summaryrefslogtreecommitdiff
path: root/subversion
diff options
context:
space:
mode:
Diffstat (limited to 'subversion')
-rw-r--r--subversion/bindings/ctypes-python/csvn/repos.py13
-rw-r--r--subversion/bindings/ctypes-python/csvn/txn.py2
-rwxr-xr-xsubversion/bindings/ctypes-python/setup.py2
-rwxr-xr-xsubversion/bindings/ctypes-python/test/remoterepos.py60
-rwxr-xr-xsubversion/bindings/ctypes-python/test/setup_path.py4
-rwxr-xr-xsubversion/bindings/ctypes-python/test/svntypes.py53
-rwxr-xr-xsubversion/bindings/ctypes-python/test/wc.py2
-rw-r--r--subversion/bindings/cxxhl/README13
-rw-r--r--subversion/bindings/cxxhl/include/svncxxhl.hpp37
-rw-r--r--subversion/bindings/cxxhl/include/svncxxhl/_compat.hpp91
-rw-r--r--subversion/bindings/cxxhl/include/svncxxhl/exception.hpp144
-rw-r--r--subversion/bindings/cxxhl/include/svncxxhl/tristate.hpp64
-rw-r--r--subversion/bindings/cxxhl/src/exception.cpp322
-rw-r--r--subversion/bindings/cxxhl/src/tristate.cpp44
-rw-r--r--subversion/bindings/cxxhl/tests/test_exception.cpp129
-rw-r--r--subversion/bindings/javahl/Manifest.in10
-rw-r--r--subversion/bindings/javahl/README7
-rw-r--r--subversion/bindings/javahl/native/Array.cpp15
-rw-r--r--subversion/bindings/javahl/native/BlameCallback.cpp8
-rw-r--r--subversion/bindings/javahl/native/ChangelistCallback.cpp3
-rw-r--r--subversion/bindings/javahl/native/ClientContext.cpp22
-rw-r--r--subversion/bindings/javahl/native/CommitCallback.cpp2
-rw-r--r--subversion/bindings/javahl/native/CommitMessage.cpp6
-rw-r--r--subversion/bindings/javahl/native/CopySources.cpp17
-rw-r--r--subversion/bindings/javahl/native/CreateJ.cpp160
-rw-r--r--subversion/bindings/javahl/native/CreateJ.h5
-rw-r--r--subversion/bindings/javahl/native/DiffOptions.cpp75
-rw-r--r--subversion/bindings/javahl/native/DiffOptions.h58
-rw-r--r--subversion/bindings/javahl/native/DiffSummaryReceiver.cpp2
-rw-r--r--subversion/bindings/javahl/native/EnumMapper.cpp58
-rw-r--r--subversion/bindings/javahl/native/File.cpp2
-rw-r--r--subversion/bindings/javahl/native/ImportFilterCallback.cpp118
-rw-r--r--subversion/bindings/javahl/native/ImportFilterCallback.h62
-rw-r--r--subversion/bindings/javahl/native/InfoCallback.cpp2
-rw-r--r--subversion/bindings/javahl/native/InputStream.cpp17
-rw-r--r--subversion/bindings/javahl/native/JNICriticalSection.cpp4
-rw-r--r--subversion/bindings/javahl/native/JNIMutex.cpp4
-rw-r--r--subversion/bindings/javahl/native/JNIStackElement.cpp28
-rw-r--r--subversion/bindings/javahl/native/JNIThreadData.cpp4
-rw-r--r--subversion/bindings/javahl/native/JNIThreadData.h2
-rw-r--r--subversion/bindings/javahl/native/JNIUtil.cpp119
-rw-r--r--subversion/bindings/javahl/native/JNIUtil.h22
-rw-r--r--subversion/bindings/javahl/native/ListCallback.cpp8
-rw-r--r--subversion/bindings/javahl/native/ListCallback.h4
-rw-r--r--subversion/bindings/javahl/native/LogMessageCallback.cpp8
-rw-r--r--subversion/bindings/javahl/native/OutputStream.cpp7
-rw-r--r--subversion/bindings/javahl/native/PatchCallback.cpp7
-rw-r--r--subversion/bindings/javahl/native/Path.cpp10
-rw-r--r--subversion/bindings/javahl/native/Path.h4
-rw-r--r--subversion/bindings/javahl/native/Pool.h2
-rw-r--r--subversion/bindings/javahl/native/Prompter.cpp24
-rw-r--r--subversion/bindings/javahl/native/ProplistCallback.cpp79
-rw-r--r--subversion/bindings/javahl/native/ProplistCallback.h11
-rw-r--r--subversion/bindings/javahl/native/ReposFreezeAction.cpp50
-rw-r--r--subversion/bindings/javahl/native/ReposFreezeAction.h49
-rw-r--r--subversion/bindings/javahl/native/ReposNotifyCallback.cpp2
-rw-r--r--subversion/bindings/javahl/native/Revision.cpp4
-rw-r--r--subversion/bindings/javahl/native/RevisionRange.cpp5
-rw-r--r--subversion/bindings/javahl/native/RevpropTable.cpp6
-rw-r--r--subversion/bindings/javahl/native/SVNBase.cpp18
-rw-r--r--subversion/bindings/javahl/native/SVNBase.h10
-rw-r--r--subversion/bindings/javahl/native/SVNClient.cpp494
-rw-r--r--subversion/bindings/javahl/native/SVNClient.h57
-rw-r--r--subversion/bindings/javahl/native/SVNRepos.cpp122
-rw-r--r--subversion/bindings/javahl/native/SVNRepos.h10
-rw-r--r--subversion/bindings/javahl/native/StatusCallback.cpp5
-rw-r--r--subversion/bindings/javahl/native/StringArray.cpp5
-rw-r--r--subversion/bindings/javahl/native/Targets.cpp22
-rw-r--r--subversion/bindings/javahl/native/Targets.h4
-rw-r--r--subversion/bindings/javahl/native/VersionExtended.cpp98
-rw-r--r--subversion/bindings/javahl/native/VersionExtended.h89
-rw-r--r--subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp213
-rw-r--r--subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNRepos.cpp49
-rw-r--r--subversion/bindings/javahl/native/org_apache_subversion_javahl_types_VersionExtended.cpp264
-rw-r--r--subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientNotifyInformation.java25
-rw-r--r--subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItem.java18
-rw-r--r--subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItemStateFlags.java11
-rw-r--r--subversion/bindings/javahl/src/org/apache/subversion/javahl/ConflictDescriptor.java16
-rw-r--r--subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java265
-rw-r--r--subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRepos.java57
-rw-r--r--subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java4
-rw-r--r--subversion/bindings/javahl/src/org/apache/subversion/javahl/ReposNotifyInformation.java14
-rw-r--r--subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java225
-rw-r--r--subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNRepos.java25
-rw-r--r--subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ImportFilterCallback.java41
-rw-r--r--subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/InheritedProplistCallback.java71
-rw-r--r--subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ListCallback.java2
-rw-r--r--subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ProplistCallback.java2
-rw-r--r--subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ReposFreezeAction.java37
-rw-r--r--subversion/bindings/javahl/src/org/apache/subversion/javahl/types/ConflictVersion.java11
-rw-r--r--subversion/bindings/javahl/src/org/apache/subversion/javahl/types/DiffOptions.java101
-rw-r--r--subversion/bindings/javahl/src/org/apache/subversion/javahl/types/LogDate.java6
-rw-r--r--subversion/bindings/javahl/src/org/apache/subversion/javahl/types/NodeKind.java16
-rw-r--r--subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Status.java21
-rw-r--r--subversion/bindings/javahl/src/org/apache/subversion/javahl/types/VersionExtended.java238
-rw-r--r--subversion/bindings/javahl/src/org/tigris/subversion/javahl/ConflictDescriptor.java8
-rw-r--r--subversion/bindings/javahl/src/org/tigris/subversion/javahl/LogDate.java6
-rw-r--r--subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java8
-rw-r--r--subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientInterface.java10
-rw-r--r--subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java346
-rw-r--r--subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNReposTests.java22
-rw-r--r--subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java18
-rw-r--r--subversion/bindings/javahl/tests/org/apache/subversion/javahl/WC.java3
-rw-r--r--subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java14
-rw-r--r--subversion/bindings/javahl/tests/org/tigris/subversion/javahl/RunTests.java4
-rw-r--r--subversion/bindings/javahl/tests/org/tigris/subversion/javahl/SVNTests.java1
-rw-r--r--subversion/bindings/javahl/tests/org/tigris/subversion/javahl/WC.java2
-rw-r--r--subversion/bindings/swig/INSTALL72
-rw-r--r--subversion/bindings/swig/core.i135
-rw-r--r--subversion/bindings/swig/include/svn_containers.swg94
-rw-r--r--subversion/bindings/swig/include/svn_types.swg155
-rw-r--r--subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c308
-rw-r--r--subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h44
-rw-r--r--subversion/bindings/swig/perl/native/Base.pm2
-rw-r--r--subversion/bindings/swig/perl/native/Client.pm745
-rw-r--r--subversion/bindings/swig/perl/native/Core.pm231
-rw-r--r--subversion/bindings/swig/perl/native/Fs.pm2
-rw-r--r--subversion/bindings/swig/perl/native/Makefile.PL.in36
-rw-r--r--subversion/bindings/swig/perl/native/Ra.pm10
-rw-r--r--subversion/bindings/swig/perl/native/Repos.pm8
-rw-r--r--subversion/bindings/swig/perl/native/Wc.pm112
-rw-r--r--subversion/bindings/swig/perl/native/core.c10059
-rw-r--r--subversion/bindings/swig/perl/native/svn_client.c13733
-rw-r--r--subversion/bindings/swig/perl/native/svn_delta.c946
-rw-r--r--subversion/bindings/swig/perl/native/svn_diff.c284
-rw-r--r--subversion/bindings/swig/perl/native/svn_fs.c1593
-rw-r--r--subversion/bindings/swig/perl/native/svn_ra.c1837
-rw-r--r--subversion/bindings/swig/perl/native/svn_repos.c4560
-rw-r--r--subversion/bindings/swig/perl/native/svn_wc.c5010
-rw-r--r--subversion/bindings/swig/perl/native/t/0use.t7
-rw-r--r--subversion/bindings/swig/perl/native/t/1repos.t6
-rw-r--r--subversion/bindings/swig/perl/native/t/2fs.t22
-rw-r--r--subversion/bindings/swig/perl/native/t/3client.t884
-rw-r--r--subversion/bindings/swig/perl/native/t/4pool.t6
-rw-r--r--subversion/bindings/swig/perl/native/t/5delta-compat.t2
-rw-r--r--subversion/bindings/swig/perl/native/t/5delta.t3
-rw-r--r--subversion/bindings/swig/perl/native/t/6ra.t41
-rw-r--r--subversion/bindings/swig/perl/native/t/7editor.t1
-rw-r--r--subversion/bindings/swig/perl/native/t/8lock.t8
-rw-r--r--subversion/bindings/swig/perl/native/t/9wc.t84
-rw-r--r--subversion/bindings/swig/proxy/mod_authz_svn_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/mod_dav_svn_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/perlrun.swg44
-rw-r--r--subversion/bindings/swig/proxy/pyrun.swg66
-rw-r--r--subversion/bindings/swig/proxy/svn_auth_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_base64_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_cache_config_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_checksum_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_client_h.swg28
-rw-r--r--subversion/bindings/swig/proxy/svn_cmdline_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_compat_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_config_h.swg19
-rw-r--r--subversion/bindings/swig/proxy/svn_ctype_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_dav_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_delta_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_diff_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_dirent_uri_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_dso_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_error_codes_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_error_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_fs_h.swg28
-rw-r--r--subversion/bindings/swig/proxy/svn_hash_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_io_h.swg12
-rw-r--r--subversion/bindings/swig/proxy/svn_iter_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_md5_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_mergeinfo_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_nls_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_opt_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_path_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_pools_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_props_h.swg4
-rw-r--r--subversion/bindings/swig/proxy/svn_quoprint_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_ra_h.swg12
-rw-r--r--subversion/bindings/swig/proxy/svn_ra_svn_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_repos_h.swg88
-rw-r--r--subversion/bindings/swig/proxy/svn_sorts_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_string_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_subst_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_time_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_types_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_user_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_utf_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_version_h.swg7
-rw-r--r--subversion/bindings/swig/proxy/svn_wc_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/svn_xml_h.swg3
-rw-r--r--subversion/bindings/swig/proxy/swig_perl_external_runtime.swg101
-rw-r--r--subversion/bindings/swig/proxy/swig_python_external_runtime.swg89
-rw-r--r--subversion/bindings/swig/proxy/swig_ruby_external_runtime.swg24
-rw-r--r--subversion/bindings/swig/python/README70
-rw-r--r--subversion/bindings/swig/python/client.py1367
-rw-r--r--subversion/bindings/swig/python/core.c7388
-rw-r--r--subversion/bindings/swig/python/core.py1640
-rw-r--r--subversion/bindings/swig/python/delta.py213
-rw-r--r--subversion/bindings/swig/python/diff.py244
-rw-r--r--subversion/bindings/swig/python/fs.py502
-rw-r--r--subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c459
-rw-r--r--subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h70
-rw-r--r--subversion/bindings/swig/python/ra.py558
-rw-r--r--subversion/bindings/swig/python/repos.py846
-rw-r--r--subversion/bindings/swig/python/svn/client.py1
-rw-r--r--subversion/bindings/swig/python/svn/core.py38
-rw-r--r--subversion/bindings/swig/python/svn/delta.py5
-rw-r--r--subversion/bindings/swig/python/svn/diff.py1
-rw-r--r--subversion/bindings/swig/python/svn/fs.py3
-rw-r--r--subversion/bindings/swig/python/svn/ra.py1
-rw-r--r--subversion/bindings/swig/python/svn/repos.py3
-rw-r--r--subversion/bindings/swig/python/svn/wc.py1
-rw-r--r--subversion/bindings/swig/python/svn_client.c5788
-rw-r--r--subversion/bindings/swig/python/svn_delta.c1096
-rw-r--r--subversion/bindings/swig/python/svn_diff.c845
-rw-r--r--subversion/bindings/swig/python/svn_fs.c1677
-rw-r--r--subversion/bindings/swig/python/svn_ra.c2063
-rw-r--r--subversion/bindings/swig/python/svn_repos.c4287
-rw-r--r--subversion/bindings/swig/python/svn_wc.c4714
-rw-r--r--subversion/bindings/swig/python/tests/checksum.py48
-rw-r--r--subversion/bindings/swig/python/tests/client.py118
-rw-r--r--subversion/bindings/swig/python/tests/core.py67
-rw-r--r--subversion/bindings/swig/python/tests/pool.py20
-rw-r--r--subversion/bindings/swig/python/tests/ra.py5
-rw-r--r--subversion/bindings/swig/python/tests/repository.py12
-rw-r--r--subversion/bindings/swig/python/tests/run_all.py5
-rw-r--r--subversion/bindings/swig/python/wc.py1451
-rw-r--r--subversion/bindings/swig/ruby/core.c7623
-rw-r--r--subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c67
-rw-r--r--subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h14
-rw-r--r--subversion/bindings/swig/ruby/svn/fs.rb2
-rw-r--r--subversion/bindings/swig/ruby/svn/info.rb4
-rw-r--r--subversion/bindings/swig/ruby/svn/util.rb2
-rw-r--r--subversion/bindings/swig/ruby/svn_client.c4858
-rw-r--r--subversion/bindings/swig/ruby/svn_delta.c726
-rw-r--r--subversion/bindings/swig/ruby/svn_diff.c176
-rw-r--r--subversion/bindings/swig/ruby/svn_fs.c1329
-rw-r--r--subversion/bindings/swig/ruby/svn_ra.c1532
-rw-r--r--subversion/bindings/swig/ruby/svn_repos.c3703
-rw-r--r--subversion/bindings/swig/ruby/svn_wc.c3941
-rw-r--r--subversion/bindings/swig/ruby/test/greek_tree.rb7
-rw-r--r--subversion/bindings/swig/ruby/test/my-assertions.rb21
-rw-r--r--subversion/bindings/swig/ruby/test/test-unit-ext.rb6
-rw-r--r--subversion/bindings/swig/ruby/test/test-unit-ext/priority.rb2
-rw-r--r--subversion/bindings/swig/ruby/test/test_client.rb14
-rw-r--r--subversion/bindings/swig/ruby/test/test_core.rb23
-rw-r--r--subversion/bindings/swig/ruby/test/test_delta.rb33
-rw-r--r--subversion/bindings/swig/ruby/test/test_fs.rb17
-rw-r--r--subversion/bindings/swig/ruby/test/test_ra.rb2
-rw-r--r--subversion/bindings/swig/ruby/test/test_repos.rb9
-rw-r--r--subversion/bindings/swig/ruby/test/test_wc.rb41
-rw-r--r--subversion/bindings/swig/ruby/test/util.rb59
-rw-r--r--subversion/bindings/swig/ruby/test/windows_util.rb48
-rw-r--r--subversion/bindings/swig/svn_client.i29
-rw-r--r--subversion/bindings/swig/svn_delta.i80
-rw-r--r--subversion/bindings/swig/svn_wc.i16
-rw-r--r--subversion/include/mod_authz_svn.h11
-rw-r--r--subversion/include/private/ra_svn_sasl.h2
-rw-r--r--subversion/include/private/svn_auth_private.h208
-rw-r--r--subversion/include/private/svn_cache.h58
-rw-r--r--subversion/include/private/svn_cert.h68
-rw-r--r--subversion/include/private/svn_client_private.h274
-rw-r--r--subversion/include/private/svn_cmdline_private.h119
-rw-r--r--subversion/include/private/svn_dav_protocol.h8
-rw-r--r--subversion/include/private/svn_debug.h42
-rw-r--r--subversion/include/private/svn_delta_private.h128
-rw-r--r--subversion/include/private/svn_dep_compat.h63
-rw-r--r--subversion/include/private/svn_diff_private.h115
-rw-r--r--subversion/include/private/svn_diff_tree.h357
-rw-r--r--subversion/include/private/svn_editor.h641
-rw-r--r--subversion/include/private/svn_eol_private.h14
-rw-r--r--subversion/include/private/svn_error_private.h8
-rw-r--r--subversion/include/private/svn_fs_private.h115
-rw-r--r--subversion/include/private/svn_fs_util.h87
-rw-r--r--subversion/include/private/svn_fspath.h31
-rw-r--r--subversion/include/private/svn_io_private.h9
-rw-r--r--subversion/include/private/svn_log.h9
-rw-r--r--subversion/include/private/svn_mergeinfo_private.h102
-rw-r--r--subversion/include/private/svn_mutex.h117
-rw-r--r--subversion/include/private/svn_named_atomic.h162
-rw-r--r--subversion/include/private/svn_opt_private.h20
-rw-r--r--subversion/include/private/svn_pseudo_md5.h83
-rw-r--r--subversion/include/private/svn_ra_private.h173
-rw-r--r--subversion/include/private/svn_ra_svn_private.h826
-rw-r--r--subversion/include/private/svn_repos_private.h41
-rw-r--r--subversion/include/private/svn_skel.h26
-rw-r--r--subversion/include/private/svn_sqlite.h198
-rw-r--r--subversion/include/private/svn_string_private.h152
-rw-r--r--subversion/include/private/svn_subr_private.h353
-rw-r--r--subversion/include/private/svn_temp_serializer.h23
-rw-r--r--subversion/include/private/svn_wc_private.h1160
-rw-r--r--subversion/include/svn_auth.h92
-rw-r--r--subversion/include/svn_checksum.h24
-rw-r--r--subversion/include/svn_client.h1032
-rw-r--r--subversion/include/svn_cmdline.h14
-rw-r--r--subversion/include/svn_config.h232
-rw-r--r--subversion/include/svn_dav.h126
-rw-r--r--subversion/include/svn_delta.h125
-rw-r--r--subversion/include/svn_diff.h36
-rw-r--r--subversion/include/svn_dirent_uri.h204
-rw-r--r--subversion/include/svn_error.h71
-rw-r--r--subversion/include/svn_error_codes.h303
-rw-r--r--subversion/include/svn_fs.h295
-rw-r--r--subversion/include/svn_hash.h44
-rw-r--r--subversion/include/svn_io.h249
-rw-r--r--subversion/include/svn_mergeinfo.h118
-rw-r--r--subversion/include/svn_opt.h27
-rw-r--r--subversion/include/svn_path.h73
-rw-r--r--subversion/include/svn_pools.h22
-rw-r--r--subversion/include/svn_props.h229
-rw-r--r--subversion/include/svn_ra.h240
-rw-r--r--subversion/include/svn_ra_svn.h267
-rw-r--r--subversion/include/svn_repos.h501
-rw-r--r--subversion/include/svn_sorts.h64
-rw-r--r--subversion/include/svn_string.h158
-rw-r--r--subversion/include/svn_subst.h49
-rw-r--r--subversion/include/svn_types.h149
-rw-r--r--subversion/include/svn_utf.h27
-rw-r--r--subversion/include/svn_version.h164
-rw-r--r--subversion/include/svn_wc.h581
-rw-r--r--subversion/include/svn_xml.h7
-rw-r--r--subversion/libsvn_auth_gnome_keyring/gnome_keyring.c489
-rw-r--r--subversion/libsvn_auth_kwallet/kwallet.cpp154
-rw-r--r--subversion/libsvn_client/add.c985
-rw-r--r--subversion/libsvn_client/blame.c174
-rw-r--r--subversion/libsvn_client/cat.c105
-rw-r--r--subversion/libsvn_client/checkout.c90
-rw-r--r--subversion/libsvn_client/cleanup.c146
-rw-r--r--subversion/libsvn_client/client.h687
-rw-r--r--subversion/libsvn_client/cmdline.c94
-rw-r--r--subversion/libsvn_client/commit.c1085
-rw-r--r--subversion/libsvn_client/commit_util.c1394
-rw-r--r--subversion/libsvn_client/copy.c1049
-rw-r--r--subversion/libsvn_client/copy_foreign.c571
-rw-r--r--subversion/libsvn_client/ctx.c24
-rw-r--r--subversion/libsvn_client/delete.c437
-rw-r--r--subversion/libsvn_client/deprecated.c492
-rw-r--r--subversion/libsvn_client/diff.c2322
-rw-r--r--subversion/libsvn_client/diff_local.c639
-rw-r--r--subversion/libsvn_client/diff_summarize.c317
-rw-r--r--subversion/libsvn_client/export.c1225
-rw-r--r--subversion/libsvn_client/externals.c1044
-rw-r--r--subversion/libsvn_client/import.c964
-rw-r--r--subversion/libsvn_client/info.c141
-rw-r--r--subversion/libsvn_client/iprops.c270
-rw-r--r--subversion/libsvn_client/list.c439
-rw-r--r--subversion/libsvn_client/locking_commands.c145
-rw-r--r--subversion/libsvn_client/log.c704
-rw-r--r--subversion/libsvn_client/merge.c11767
-rw-r--r--subversion/libsvn_client/mergeinfo.c1439
-rw-r--r--subversion/libsvn_client/mergeinfo.h171
-rw-r--r--subversion/libsvn_client/patch.c1000
-rw-r--r--subversion/libsvn_client/prop_commands.c1024
-rw-r--r--subversion/libsvn_client/ra.c796
-rw-r--r--subversion/libsvn_client/relocate.c34
-rw-r--r--subversion/libsvn_client/repos_diff.c1313
-rw-r--r--subversion/libsvn_client/repos_diff_summarize.c452
-rw-r--r--subversion/libsvn_client/resolved.c99
-rw-r--r--subversion/libsvn_client/revert.c34
-rw-r--r--subversion/libsvn_client/revisions.c8
-rw-r--r--subversion/libsvn_client/status.c234
-rw-r--r--subversion/libsvn_client/switch.c255
-rw-r--r--subversion/libsvn_client/update.c272
-rw-r--r--subversion/libsvn_client/upgrade.c405
-rw-r--r--subversion/libsvn_client/url.c15
-rw-r--r--subversion/libsvn_client/util.c388
-rw-r--r--subversion/libsvn_delta/compat.c1942
-rw-r--r--subversion/libsvn_delta/compose_delta.c2
-rw-r--r--subversion/libsvn_delta/debug_editor.c6
-rw-r--r--subversion/libsvn_delta/delta.h6
-rw-r--r--subversion/libsvn_delta/deprecated.c48
-rw-r--r--subversion/libsvn_delta/editor.c750
-rw-r--r--subversion/libsvn_delta/path_driver.c40
-rw-r--r--subversion/libsvn_delta/svndiff.c243
-rw-r--r--subversion/libsvn_delta/text_delta.c175
-rw-r--r--subversion/libsvn_delta/xdelta.c190
-rw-r--r--subversion/libsvn_diff/diff.h29
-rw-r--r--subversion/libsvn_diff/diff_file.c581
-rw-r--r--subversion/libsvn_diff/diff_memory.c269
-rw-r--r--subversion/libsvn_diff/diff_tree.c1705
-rw-r--r--subversion/libsvn_diff/parse-diff.c165
-rw-r--r--subversion/libsvn_diff/util.c265
-rw-r--r--subversion/libsvn_fs/access.c4
-rw-r--r--subversion/libsvn_fs/editor.c850
-rw-r--r--subversion/libsvn_fs/fs-loader.c497
-rw-r--r--subversion/libsvn_fs/fs-loader.h52
-rw-r--r--subversion/libsvn_fs_base/bdb/bdb-err.c2
-rw-r--r--subversion/libsvn_fs_base/bdb/changes-table.c33
-rw-r--r--subversion/libsvn_fs_base/bdb/checksum-reps-table.c8
-rw-r--r--subversion/libsvn_fs_base/bdb/copies-table.c10
-rw-r--r--subversion/libsvn_fs_base/bdb/env.c195
-rw-r--r--subversion/libsvn_fs_base/bdb/lock-tokens-table.c10
-rw-r--r--subversion/libsvn_fs_base/bdb/locks-table.c23
-rw-r--r--subversion/libsvn_fs_base/bdb/miscellaneous-table.c6
-rw-r--r--subversion/libsvn_fs_base/bdb/node-origins-table.c4
-rw-r--r--subversion/libsvn_fs_base/bdb/nodes-table.c10
-rw-r--r--subversion/libsvn_fs_base/bdb/reps-table.c10
-rw-r--r--subversion/libsvn_fs_base/bdb/rev-table.c12
-rw-r--r--subversion/libsvn_fs_base/bdb/strings-table.c42
-rw-r--r--subversion/libsvn_fs_base/bdb/txn-table.c16
-rw-r--r--subversion/libsvn_fs_base/bdb/uuids-table.c4
-rw-r--r--subversion/libsvn_fs_base/dag.c17
-rw-r--r--subversion/libsvn_fs_base/dag.h2
-rw-r--r--subversion/libsvn_fs_base/err.c3
-rw-r--r--subversion/libsvn_fs_base/fs.c194
-rw-r--r--subversion/libsvn_fs_base/fs.h3
-rw-r--r--subversion/libsvn_fs_base/id.c15
-rw-r--r--subversion/libsvn_fs_base/lock.c68
-rw-r--r--subversion/libsvn_fs_base/notes/structure4
-rw-r--r--subversion/libsvn_fs_base/reps-strings.c15
-rw-r--r--subversion/libsvn_fs_base/revs-txns.c11
-rw-r--r--subversion/libsvn_fs_base/trail.c6
-rw-r--r--subversion/libsvn_fs_base/tree.c142
-rw-r--r--subversion/libsvn_fs_base/util/fs_skels.c13
-rw-r--r--subversion/libsvn_fs_base/uuid.c29
-rw-r--r--subversion/libsvn_fs_base/uuid.h9
-rw-r--r--subversion/libsvn_fs_fs/caching.c347
-rw-r--r--subversion/libsvn_fs_fs/dag.c178
-rw-r--r--subversion/libsvn_fs_fs/dag.h143
-rw-r--r--subversion/libsvn_fs_fs/fs.c151
-rw-r--r--subversion/libsvn_fs_fs/fs.h134
-rw-r--r--subversion/libsvn_fs_fs/fs_fs.c6174
-rw-r--r--subversion/libsvn_fs_fs/fs_fs.h65
-rw-r--r--subversion/libsvn_fs_fs/id.c40
-rw-r--r--subversion/libsvn_fs_fs/key-gen.c14
-rw-r--r--subversion/libsvn_fs_fs/lock.c58
-rw-r--r--subversion/libsvn_fs_fs/rep-cache-db.h46
-rw-r--r--subversion/libsvn_fs_fs/rep-cache-db.sql20
-rw-r--r--subversion/libsvn_fs_fs/rep-cache.c215
-rw-r--r--subversion/libsvn_fs_fs/rep-cache.h25
-rw-r--r--subversion/libsvn_fs_fs/structure95
-rw-r--r--subversion/libsvn_fs_fs/temp_serializer.c535
-rw-r--r--subversion/libsvn_fs_fs/temp_serializer.h96
-rw-r--r--subversion/libsvn_fs_fs/tree.c955
-rw-r--r--subversion/libsvn_fs_fs/tree.h13
-rw-r--r--subversion/libsvn_fs_util/fs-util.c62
-rw-r--r--subversion/libsvn_ra/compat.c114
-rw-r--r--subversion/libsvn_ra/debug_reporter.c4
-rw-r--r--subversion/libsvn_ra/deprecated.c108
-rw-r--r--subversion/libsvn_ra/deprecated.h60
-rw-r--r--subversion/libsvn_ra/editor.c339
-rw-r--r--subversion/libsvn_ra/ra_loader.c503
-rw-r--r--subversion/libsvn_ra/ra_loader.h122
-rw-r--r--subversion/libsvn_ra/util.c62
-rw-r--r--subversion/libsvn_ra/wrapper_template.h12
-rw-r--r--subversion/libsvn_ra_local/ra_plugin.c474
-rw-r--r--subversion/libsvn_ra_local/split_url.c37
-rw-r--r--subversion/libsvn_ra_neon/README112
-rw-r--r--subversion/libsvn_ra_neon/commit.c1631
-rw-r--r--subversion/libsvn_ra_neon/fetch.c2814
-rw-r--r--subversion/libsvn_ra_neon/file_revs.c388
-rw-r--r--subversion/libsvn_ra_neon/get_dated_rev.c169
-rw-r--r--subversion/libsvn_ra_neon/get_deleted_rev.c173
-rw-r--r--subversion/libsvn_ra_neon/get_location_segments.c216
-rw-r--r--subversion/libsvn_ra_neon/get_locations.c195
-rw-r--r--subversion/libsvn_ra_neon/get_locks.c440
-rw-r--r--subversion/libsvn_ra_neon/lock.c609
-rw-r--r--subversion/libsvn_ra_neon/log.c580
-rw-r--r--subversion/libsvn_ra_neon/merge.c786
-rw-r--r--subversion/libsvn_ra_neon/mergeinfo.c255
-rw-r--r--subversion/libsvn_ra_neon/options.c480
-rw-r--r--subversion/libsvn_ra_neon/props.c1520
-rw-r--r--subversion/libsvn_ra_neon/ra_neon.h1189
-rw-r--r--subversion/libsvn_ra_neon/replay.c508
-rw-r--r--subversion/libsvn_ra_neon/session.c1274
-rw-r--r--subversion/libsvn_ra_neon/util.c1651
-rw-r--r--subversion/libsvn_ra_serf/blame.c450
-rw-r--r--subversion/libsvn_ra_serf/blncache.c4
-rw-r--r--subversion/libsvn_ra_serf/commit.c1216
-rw-r--r--subversion/libsvn_ra_serf/get_deleted_rev.c143
-rw-r--r--subversion/libsvn_ra_serf/getdate.c156
-rw-r--r--subversion/libsvn_ra_serf/getlocations.c177
-rw-r--r--subversion/libsvn_ra_serf/getlocationsegments.c164
-rw-r--r--subversion/libsvn_ra_serf/getlocks.c338
-rw-r--r--subversion/libsvn_ra_serf/inherited_props.c285
-rw-r--r--subversion/libsvn_ra_serf/locks.c633
-rw-r--r--subversion/libsvn_ra_serf/log.c599
-rw-r--r--subversion/libsvn_ra_serf/merge.c483
-rw-r--r--subversion/libsvn_ra_serf/mergeinfo.c212
-rw-r--r--subversion/libsvn_ra_serf/options.c611
-rw-r--r--subversion/libsvn_ra_serf/property.c979
-rw-r--r--subversion/libsvn_ra_serf/ra_serf.h924
-rw-r--r--subversion/libsvn_ra_serf/replay.c243
-rw-r--r--subversion/libsvn_ra_serf/sb_bucket.c185
-rw-r--r--subversion/libsvn_ra_serf/serf.c448
-rw-r--r--subversion/libsvn_ra_serf/update.c1769
-rw-r--r--subversion/libsvn_ra_serf/util.c2259
-rw-r--r--subversion/libsvn_ra_serf/util_error.c100
-rw-r--r--subversion/libsvn_ra_serf/xml.c587
-rw-r--r--subversion/libsvn_ra_svn/client.c903
-rw-r--r--subversion/libsvn_ra_svn/cram.c16
-rw-r--r--subversion/libsvn_ra_svn/cyrus_auth.c133
-rw-r--r--subversion/libsvn_ra_svn/deprecated.c234
-rw-r--r--subversion/libsvn_ra_svn/editorp.c243
-rw-r--r--subversion/libsvn_ra_svn/internal_auth.c2
-rw-r--r--subversion/libsvn_ra_svn/marshal.c1553
-rw-r--r--subversion/libsvn_ra_svn/protocol31
-rw-r--r--subversion/libsvn_ra_svn/ra_svn.h51
-rw-r--r--subversion/libsvn_repos/authz.c313
-rw-r--r--subversion/libsvn_repos/commit.c636
-rw-r--r--subversion/libsvn_repos/delta.c37
-rw-r--r--subversion/libsvn_repos/deprecated.c200
-rw-r--r--subversion/libsvn_repos/dump.c386
-rw-r--r--subversion/libsvn_repos/fs-wrap.c260
-rw-r--r--subversion/libsvn_repos/hooks.c221
-rw-r--r--subversion/libsvn_repos/load-fs-vtable.c395
-rw-r--r--subversion/libsvn_repos/load.c81
-rw-r--r--subversion/libsvn_repos/log.c353
-rw-r--r--subversion/libsvn_repos/replay.c751
-rw-r--r--subversion/libsvn_repos/reporter.c412
-rw-r--r--subversion/libsvn_repos/repos.c349
-rw-r--r--subversion/libsvn_repos/repos.h110
-rw-r--r--subversion/libsvn_repos/rev_hunt.c279
-rw-r--r--subversion/libsvn_subr/adler32.c4
-rw-r--r--subversion/libsvn_subr/auth.c265
-rw-r--r--subversion/libsvn_subr/auth.h49
-rw-r--r--subversion/libsvn_subr/base64.c (renamed from subversion/libsvn_subr/svn_base64.c)27
-rw-r--r--subversion/libsvn_subr/cache-inprocess.c288
-rw-r--r--subversion/libsvn_subr/cache-membuffer.c1377
-rw-r--r--subversion/libsvn_subr/cache-memcache.c36
-rw-r--r--subversion/libsvn_subr/cache.c30
-rw-r--r--subversion/libsvn_subr/cache_config.c (renamed from subversion/libsvn_subr/svn_cache_config.c)85
-rw-r--r--subversion/libsvn_subr/checksum.c127
-rw-r--r--subversion/libsvn_subr/cmdline.c645
-rw-r--r--subversion/libsvn_subr/compat.c19
-rw-r--r--subversion/libsvn_subr/config.c357
-rw-r--r--subversion/libsvn_subr/config_auth.c155
-rw-r--r--subversion/libsvn_subr/config_file.c302
-rw-r--r--subversion/libsvn_subr/config_impl.h10
-rw-r--r--subversion/libsvn_subr/config_win.c19
-rw-r--r--subversion/libsvn_subr/constructors.c241
-rw-r--r--subversion/libsvn_subr/crypto.c705
-rw-r--r--subversion/libsvn_subr/crypto.h141
-rw-r--r--subversion/libsvn_subr/debug.c94
-rw-r--r--subversion/libsvn_subr/deprecated.c259
-rw-r--r--subversion/libsvn_subr/dirent_uri.c237
-rw-r--r--subversion/libsvn_subr/dso.c95
-rw-r--r--subversion/libsvn_subr/eol.c30
-rw-r--r--subversion/libsvn_subr/error.c154
-rw-r--r--subversion/libsvn_subr/gpg_agent.c642
-rw-r--r--subversion/libsvn_subr/hash.c128
-rw-r--r--subversion/libsvn_subr/internal_statements.h69
-rw-r--r--subversion/libsvn_subr/internal_statements.sql26
-rw-r--r--subversion/libsvn_subr/io.c888
-rw-r--r--subversion/libsvn_subr/iter.c2
-rw-r--r--subversion/libsvn_subr/lock.c3
-rw-r--r--subversion/libsvn_subr/log.c26
-rw-r--r--subversion/libsvn_subr/macos_keychain.c77
-rw-r--r--subversion/libsvn_subr/magic.c3
-rw-r--r--subversion/libsvn_subr/mergeinfo.c1141
-rw-r--r--subversion/libsvn_subr/mutex.c83
-rw-r--r--subversion/libsvn_subr/named_atomic.c665
-rw-r--r--subversion/libsvn_subr/nls.c13
-rw-r--r--subversion/libsvn_subr/opt.c126
-rw-r--r--subversion/libsvn_subr/opt.h12
-rw-r--r--subversion/libsvn_subr/path.c101
-rw-r--r--subversion/libsvn_subr/pool.c43
-rw-r--r--subversion/libsvn_subr/prompt.c610
-rw-r--r--subversion/libsvn_subr/properties.c253
-rw-r--r--subversion/libsvn_subr/pseudo_md5.c422
-rw-r--r--subversion/libsvn_subr/quoprint.c10
-rw-r--r--subversion/libsvn_subr/simple_providers.c280
-rw-r--r--subversion/libsvn_subr/skel.c240
-rw-r--r--subversion/libsvn_subr/sorts.c58
-rw-r--r--subversion/libsvn_subr/spillbuf.c615
-rw-r--r--subversion/libsvn_subr/sqlite.c584
-rw-r--r--subversion/libsvn_subr/sqlite3wrapper.c63
-rw-r--r--subversion/libsvn_subr/ssl_client_cert_providers.c21
-rw-r--r--subversion/libsvn_subr/ssl_client_cert_pw_providers.c182
-rw-r--r--subversion/libsvn_subr/ssl_server_trust_providers.c64
-rw-r--r--subversion/libsvn_subr/stream.c337
-rw-r--r--subversion/libsvn_subr/string.c (renamed from subversion/libsvn_subr/svn_string.c)589
-rw-r--r--subversion/libsvn_subr/subst.c279
-rw-r--r--subversion/libsvn_subr/sysinfo.c1163
-rw-r--r--subversion/libsvn_subr/sysinfo.h69
-rw-r--r--subversion/libsvn_subr/target.c16
-rw-r--r--subversion/libsvn_subr/temp_serializer.c (renamed from subversion/libsvn_subr/svn_temp_serializer.c)44
-rw-r--r--subversion/libsvn_subr/time.c18
-rw-r--r--subversion/libsvn_subr/types.c (renamed from subversion/libsvn_subr/kitchensink.c)179
-rw-r--r--subversion/libsvn_subr/username_providers.c36
-rw-r--r--subversion/libsvn_subr/utf.c387
-rw-r--r--subversion/libsvn_subr/utf_validate.c109
-rw-r--r--subversion/libsvn_subr/utf_width.c283
-rw-r--r--subversion/libsvn_subr/version.c208
-rw-r--r--subversion/libsvn_subr/win32_crashrpt.c85
-rw-r--r--subversion/libsvn_subr/win32_crypto.c310
-rw-r--r--subversion/libsvn_subr/win32_xlate.c5
-rw-r--r--subversion/libsvn_subr/xml.c13
-rw-r--r--subversion/libsvn_wc/adm_crawler.c145
-rw-r--r--subversion/libsvn_wc/adm_files.c143
-rw-r--r--subversion/libsvn_wc/adm_ops.c1517
-rw-r--r--subversion/libsvn_wc/ambient_depth_filter_editor.c68
-rw-r--r--subversion/libsvn_wc/cleanup.c99
-rw-r--r--subversion/libsvn_wc/conflicts.c3253
-rw-r--r--subversion/libsvn_wc/conflicts.h467
-rw-r--r--subversion/libsvn_wc/context.c8
-rw-r--r--subversion/libsvn_wc/copy.c816
-rw-r--r--subversion/libsvn_wc/crop.c124
-rw-r--r--subversion/libsvn_wc/delete.c508
-rw-r--r--subversion/libsvn_wc/deprecated.c458
-rw-r--r--subversion/libsvn_wc/diff.h165
-rw-r--r--subversion/libsvn_wc/diff_editor.c3541
-rw-r--r--subversion/libsvn_wc/diff_local.c784
-rw-r--r--subversion/libsvn_wc/entries.c422
-rw-r--r--subversion/libsvn_wc/entries.h9
-rw-r--r--subversion/libsvn_wc/externals.c581
-rw-r--r--subversion/libsvn_wc/info.c171
-rw-r--r--subversion/libsvn_wc/lock.c382
-rw-r--r--subversion/libsvn_wc/lock.h7
-rw-r--r--subversion/libsvn_wc/merge.c1033
-rw-r--r--subversion/libsvn_wc/node.c1005
-rw-r--r--subversion/libsvn_wc/old-and-busted.c49
-rw-r--r--subversion/libsvn_wc/props.c1548
-rw-r--r--subversion/libsvn_wc/props.h116
-rw-r--r--subversion/libsvn_wc/questions.c298
-rw-r--r--subversion/libsvn_wc/relocate.c8
-rw-r--r--subversion/libsvn_wc/revert.c886
-rw-r--r--subversion/libsvn_wc/status.c1244
-rw-r--r--subversion/libsvn_wc/token-map.h70
-rw-r--r--subversion/libsvn_wc/translate.c55
-rw-r--r--subversion/libsvn_wc/translate.h6
-rw-r--r--subversion/libsvn_wc/tree_conflicts.c141
-rw-r--r--subversion/libsvn_wc/update_editor.c2565
-rw-r--r--subversion/libsvn_wc/upgrade.c499
-rw-r--r--subversion/libsvn_wc/util.c145
-rw-r--r--subversion/libsvn_wc/wc-checks.h9
-rw-r--r--subversion/libsvn_wc/wc-metadata.h268
-rw-r--r--subversion/libsvn_wc/wc-metadata.sql292
-rw-r--r--subversion/libsvn_wc/wc-queries.h2750
-rw-r--r--subversion/libsvn_wc/wc-queries.sql1469
-rw-r--r--subversion/libsvn_wc/wc.h274
-rw-r--r--subversion/libsvn_wc/wc_db.c9187
-rw-r--r--subversion/libsvn_wc/wc_db.h998
-rw-r--r--subversion/libsvn_wc/wc_db_pristine.c409
-rw-r--r--subversion/libsvn_wc/wc_db_private.h255
-rw-r--r--subversion/libsvn_wc/wc_db_update_move.c2648
-rw-r--r--subversion/libsvn_wc/wc_db_util.c19
-rw-r--r--subversion/libsvn_wc/wc_db_wcroot.c397
-rw-r--r--subversion/libsvn_wc/wcroot_anchor.c227
-rw-r--r--subversion/libsvn_wc/workqueue.c746
-rw-r--r--subversion/libsvn_wc/workqueue.h105
-rw-r--r--subversion/mod_authz_svn/INSTALL105
-rw-r--r--subversion/mod_authz_svn/mod_authz_svn.c428
-rw-r--r--subversion/mod_dav_svn/activity.c16
-rw-r--r--subversion/mod_dav_svn/authz.c37
-rw-r--r--subversion/mod_dav_svn/dav_svn.h112
-rw-r--r--subversion/mod_dav_svn/deadprops.c68
-rw-r--r--subversion/mod_dav_svn/liveprops.c92
-rw-r--r--subversion/mod_dav_svn/lock.c69
-rw-r--r--subversion/mod_dav_svn/merge.c43
-rw-r--r--subversion/mod_dav_svn/mirror.c34
-rw-r--r--subversion/mod_dav_svn/mod_dav_svn.c348
-rw-r--r--subversion/mod_dav_svn/posts/create_txn.c55
-rw-r--r--subversion/mod_dav_svn/reports/deleted-rev.c3
-rw-r--r--subversion/mod_dav_svn/reports/file-revs.c9
-rw-r--r--subversion/mod_dav_svn/reports/get-location-segments.c34
-rw-r--r--subversion/mod_dav_svn/reports/get-locations.c3
-rw-r--r--subversion/mod_dav_svn/reports/inherited-props.c236
-rw-r--r--subversion/mod_dav_svn/reports/log.c6
-rw-r--r--subversion/mod_dav_svn/reports/mergeinfo.c3
-rw-r--r--subversion/mod_dav_svn/reports/replay.c62
-rw-r--r--subversion/mod_dav_svn/reports/update.c398
-rw-r--r--subversion/mod_dav_svn/repos.c581
-rw-r--r--subversion/mod_dav_svn/util.c67
-rw-r--r--subversion/mod_dav_svn/version.c122
-rw-r--r--subversion/po/de.po13707
-rw-r--r--subversion/po/es.po4
-rw-r--r--subversion/po/fr.po8061
-rw-r--r--subversion/po/it.po2
-rw-r--r--subversion/po/ja.po4
-rw-r--r--subversion/po/ko.po2
-rw-r--r--subversion/po/nb.po2
-rw-r--r--subversion/po/pl.po26
-rw-r--r--subversion/po/pt_BR.po6
-rw-r--r--subversion/po/subversion.pot14011
-rw-r--r--subversion/po/sv.po15253
-rw-r--r--subversion/po/zh_CN.po8506
-rw-r--r--subversion/po/zh_TW.po6
-rw-r--r--subversion/svn/add-cmd.c5
-rw-r--r--subversion/svn/blame-cmd.c11
-rw-r--r--subversion/svn/cat-cmd.c4
-rw-r--r--subversion/svn/cl-conflicts.c454
-rw-r--r--subversion/svn/cl-conflicts.h (renamed from subversion/svn/tree-conflicts.h)24
-rw-r--r--subversion/svn/cl.h357
-rw-r--r--subversion/svn/client_errors.h2
-rw-r--r--subversion/svn/commit-cmd.c8
-rw-r--r--subversion/svn/conflict-callbacks.c1380
-rw-r--r--subversion/svn/copy-cmd.c52
-rw-r--r--subversion/svn/deprecated.c41
-rw-r--r--subversion/svn/diff-cmd.c161
-rw-r--r--subversion/svn/export-cmd.c12
-rw-r--r--subversion/svn/file-merge.c979
-rw-r--r--subversion/svn/help-cmd.c76
-rw-r--r--subversion/svn/import-cmd.c4
-rw-r--r--subversion/svn/info-cmd.c198
-rw-r--r--subversion/svn/list-cmd.c184
-rw-r--r--subversion/svn/log-cmd.c311
-rw-r--r--subversion/svn/merge-cmd.c311
-rw-r--r--subversion/svn/mergeinfo-cmd.c255
-rw-r--r--subversion/svn/move-cmd.c8
-rw-r--r--subversion/svn/notify.c413
-rw-r--r--subversion/svn/patch-cmd.c2
-rw-r--r--subversion/svn/propedit-cmd.c61
-rw-r--r--subversion/svn/propget-cmd.c281
-rw-r--r--subversion/svn/proplist-cmd.c133
-rw-r--r--subversion/svn/props.c364
-rw-r--r--subversion/svn/propset-cmd.c8
-rw-r--r--subversion/svn/relocate-cmd.c2
-rw-r--r--subversion/svn/resolve-cmd.c26
-rw-r--r--subversion/svn/resolved-cmd.c3
-rw-r--r--subversion/svn/schema/diff.rnc2
-rw-r--r--subversion/svn/schema/info.rnc20
-rw-r--r--subversion/svn/schema/status.rnc6
-rw-r--r--subversion/svn/status-cmd.c40
-rw-r--r--subversion/svn/status.c237
-rw-r--r--subversion/svn/svn.c (renamed from subversion/svn/main.c)1558
-rw-r--r--subversion/svn/switch-cmd.c28
-rw-r--r--subversion/svn/tree-conflicts.c196
-rw-r--r--subversion/svn/update-cmd.c33
-rw-r--r--subversion/svn/util.c514
-rw-r--r--subversion/svn_private_config.h.in72
-rw-r--r--subversion/svn_private_config.hw17
-rw-r--r--subversion/svnadmin/svnadmin.c (renamed from subversion/svnadmin/main.c)665
-rw-r--r--subversion/svndumpfilter/svndumpfilter.c (renamed from subversion/svndumpfilter/main.c)393
-rw-r--r--subversion/svnlook/svnlook.c (renamed from subversion/svnlook/main.c)866
-rw-r--r--subversion/svnmucc/svnmucc.147
-rw-r--r--subversion/svnmucc/svnmucc.c1468
-rw-r--r--subversion/svnrdump/dump_editor.c943
-rw-r--r--subversion/svnrdump/load_editor.c394
-rw-r--r--subversion/svnrdump/svnrdump.c389
-rw-r--r--subversion/svnrdump/svnrdump.h43
-rw-r--r--subversion/svnrdump/util.c33
-rw-r--r--subversion/svnserve/cyrus_auth.c40
-rw-r--r--subversion/svnserve/serve.c1326
-rw-r--r--subversion/svnserve/server.h73
-rw-r--r--subversion/svnserve/svnserve.812
-rw-r--r--subversion/svnserve/svnserve.c (renamed from subversion/svnserve/main.c)201
-rw-r--r--subversion/svnserve/svnserve.conf.510
-rw-r--r--subversion/svnsync/svnsync.c (renamed from subversion/svnsync/main.c)243
-rw-r--r--subversion/svnsync/sync.c136
-rw-r--r--subversion/svnversion/svnversion.14
-rw-r--r--subversion/svnversion/svnversion.c (renamed from subversion/svnversion/main.c)45
-rw-r--r--subversion/tests/README43
-rw-r--r--subversion/tests/cmdline/README22
-rw-r--r--subversion/tests/cmdline/atomic-ra-revprop-change.c93
-rwxr-xr-xsubversion/tests/cmdline/authz_tests.py229
-rwxr-xr-xsubversion/tests/cmdline/autoprop_tests.py426
-rwxr-xr-xsubversion/tests/cmdline/basic_tests.py411
-rwxr-xr-xsubversion/tests/cmdline/blame_tests.py154
-rwxr-xr-xsubversion/tests/cmdline/changelist_tests.py168
-rwxr-xr-xsubversion/tests/cmdline/checkout_tests.py106
-rwxr-xr-xsubversion/tests/cmdline/commit_tests.py542
-rwxr-xr-xsubversion/tests/cmdline/copy_tests.py1114
-rwxr-xr-xsubversion/tests/cmdline/dav-mirror-autocheck.sh2
-rwxr-xr-xsubversion/tests/cmdline/davautocheck.sh213
-rwxr-xr-xsubversion/tests/cmdline/depth_tests.py152
-rwxr-xr-xsubversion/tests/cmdline/diff_tests.py1617
-rw-r--r--subversion/tests/cmdline/entries-dump.c140
-rwxr-xr-xsubversion/tests/cmdline/entries_tests.py23
-rwxr-xr-xsubversion/tests/cmdline/export_tests.py171
-rwxr-xr-xsubversion/tests/cmdline/externals_tests.py1234
-rwxr-xr-xsubversion/tests/cmdline/getopt_tests.py97
-rw-r--r--subversion/tests/cmdline/getopt_tests_data/svn--version--verbose_stderr0
-rw-r--r--subversion/tests/cmdline/getopt_tests_data/svn--version--verbose_stdout90
-rw-r--r--subversion/tests/cmdline/getopt_tests_data/svn--version_stdout4
-rw-r--r--subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout86
-rwxr-xr-xsubversion/tests/cmdline/history_tests.py4
-rwxr-xr-xsubversion/tests/cmdline/import_tests.py192
-rw-r--r--subversion/tests/cmdline/import_tests_data/import_tree/DIR2.doo/file1.txt1
-rw-r--r--subversion/tests/cmdline/import_tests_data/import_tree/DIR3.foo/file2.txt1
-rw-r--r--subversion/tests/cmdline/import_tests_data/import_tree/DIR4.goo/file3.txt1
-rw-r--r--subversion/tests/cmdline/import_tests_data/import_tree/DIR4.goo/file4.noo1
-rw-r--r--subversion/tests/cmdline/import_tests_data/import_tree/DIR5.moo/file5.txt1
-rw-r--r--subversion/tests/cmdline/import_tests_data/import_tree/DIR6/DIR7/file7.foo1
-rw-r--r--subversion/tests/cmdline/import_tests_data/import_tree/DIR6/file6.foo1
-rwxr-xr-xsubversion/tests/cmdline/info_tests.py111
-rwxr-xr-xsubversion/tests/cmdline/input_validation_tests.py82
-rwxr-xr-xsubversion/tests/cmdline/iprop_authz_tests.py130
-rwxr-xr-xsubversion/tests/cmdline/iprop_tests.py1692
-rwxr-xr-xsubversion/tests/cmdline/legacy/utf8_tests.py (renamed from subversion/tests/cmdline/utf8_tests.py)0
-rwxr-xr-xsubversion/tests/cmdline/lock_tests.py675
-rwxr-xr-xsubversion/tests/cmdline/log_tests.py469
-rw-r--r--subversion/tests/cmdline/log_tests_data/merge_history_repo.pngbin9511 -> 9885 bytes
-rwxr-xr-xsubversion/tests/cmdline/merge_authz_tests.py104
-rwxr-xr-xsubversion/tests/cmdline/merge_automatic_tests.py1367
-rwxr-xr-xsubversion/tests/cmdline/merge_reintegrate_tests.py719
-rwxr-xr-xsubversion/tests/cmdline/merge_tests.py3636
-rwxr-xr-xsubversion/tests/cmdline/merge_tree_conflict_tests.py538
-rwxr-xr-xsubversion/tests/cmdline/mergeinfo_tests.py126
-rwxr-xr-xsubversion/tests/cmdline/move_tests.py1558
-rwxr-xr-xsubversion/tests/cmdline/patch_tests.py1442
-rwxr-xr-xsubversion/tests/cmdline/prop_tests.py508
-rwxr-xr-xsubversion/tests/cmdline/redirect_tests.py39
-rwxr-xr-xsubversion/tests/cmdline/relocate_tests.py20
-rwxr-xr-xsubversion/tests/cmdline/resolve_tests.py389
-rwxr-xr-xsubversion/tests/cmdline/resolved_tests.py375
-rwxr-xr-xsubversion/tests/cmdline/revert_tests.py217
-rwxr-xr-xsubversion/tests/cmdline/schedule_tests.py13
-rwxr-xr-xsubversion/tests/cmdline/special_tests.py415
-rwxr-xr-xsubversion/tests/cmdline/stat_tests.py546
-rwxr-xr-xsubversion/tests/cmdline/svnadmin_tests.py643
-rwxr-xr-xsubversion/tests/cmdline/svnauthz_tests.py978
-rwxr-xr-xsubversion/tests/cmdline/svndumpfilter_tests.py221
-rw-r--r--subversion/tests/cmdline/svndumpfilter_tests_data/empty_revisions.dump94
-rw-r--r--subversion/tests/cmdline/svndumpfilter_tests_data/simple_v3.dumpbin0 -> 1420 bytes
-rw-r--r--subversion/tests/cmdline/svneditor.bat2
-rwxr-xr-xsubversion/tests/cmdline/svnlook_tests.py76
-rwxr-xr-xsubversion/tests/cmdline/svnmucc_tests.py371
-rwxr-xr-xsubversion/tests/cmdline/svnrdump_tests.py232
-rw-r--r--subversion/tests/cmdline/svnrdump_tests_data/root-range.expected.dumpbin0 -> 5278 bytes
-rw-r--r--subversion/tests/cmdline/svnrdump_tests_data/trunk-A-changes.expected.dumpbin9088 -> 8367 bytes
-rw-r--r--subversion/tests/cmdline/svnrdump_tests_data/trunk-A-range.expected.dumpbin0 -> 4770 bytes
-rw-r--r--subversion/tests/cmdline/svnrdump_tests_data/trunk-only-range.expected.dumpbin0 -> 5186 bytes
-rw-r--r--subversion/tests/cmdline/svnrdump_tests_data/trunk-only.expected.dumpbin5820 -> 5306 bytes
-rwxr-xr-xsubversion/tests/cmdline/svnserveautocheck.sh30
-rwxr-xr-xsubversion/tests/cmdline/svnsync_authz_tests.py538
-rwxr-xr-xsubversion/tests/cmdline/svnsync_tests.py565
-rw-r--r--subversion/tests/cmdline/svnsync_tests_data/mergeinfo-contains-r0.dump28
-rw-r--r--subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-A-changes.dump2
-rw-r--r--subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-A-changes.expected.dump2
-rw-r--r--subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-only.dump2
-rw-r--r--subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-only.expected.dump2
-rw-r--r--subversion/tests/cmdline/svntest/__init__.py6
-rw-r--r--subversion/tests/cmdline/svntest/actions.py1484
-rw-r--r--subversion/tests/cmdline/svntest/deeptrees.py1020
-rw-r--r--subversion/tests/cmdline/svntest/err.py11
-rw-r--r--subversion/tests/cmdline/svntest/factory.py48
-rw-r--r--subversion/tests/cmdline/svntest/main.py750
-rw-r--r--subversion/tests/cmdline/svntest/sandbox.py152
-rw-r--r--subversion/tests/cmdline/svntest/tree.py67
-rw-r--r--subversion/tests/cmdline/svntest/verify.py415
-rw-r--r--subversion/tests/cmdline/svntest/wc.py262
-rwxr-xr-xsubversion/tests/cmdline/switch_tests.py421
-rwxr-xr-xsubversion/tests/cmdline/trans_tests.py104
-rwxr-xr-xsubversion/tests/cmdline/tree_conflict_tests.py235
-rwxr-xr-xsubversion/tests/cmdline/update_tests.py2157
-rwxr-xr-xsubversion/tests/cmdline/upgrade_tests.py303
-rw-r--r--subversion/tests/cmdline/upgrade_tests_data/changelist_upgrade_1_6.tar.bz2bin0 -> 1821 bytes
-rw-r--r--subversion/tests/cmdline/upgrade_tests_data/iprops_upgrade_nonroot.tar.bz2bin0 -> 3347 bytes
-rw-r--r--subversion/tests/cmdline/upgrade_tests_data/iprops_upgrade_nonroot1_6.tar.bz2bin0 -> 905 bytes
-rw-r--r--subversion/tests/cmdline/upgrade_tests_data/iprops_upgrade_root.tar.bz2bin0 -> 2711 bytes
-rw-r--r--subversion/tests/cmdline/upgrade_tests_data/iprops_upgrade_root1_6.tar.bz2bin0 -> 832 bytes
-rw-r--r--subversion/tests/cmdline/upgrade_tests_data/upgrade_1_7_dir_external.tar.bz2bin0 -> 3167 bytes
-rw-r--r--subversion/tests/cmdline/upgrade_tests_data/upgrade_from_1_7_wc.tar.bz2bin0 -> 5942 bytes
-rw-r--r--subversion/tests/cmdline/upgrade_tests_data/wc-without-stat1.tar.bz2bin0 -> 5342 bytes
-rwxr-xr-xsubversion/tests/cmdline/wc_tests.py253
-rw-r--r--subversion/tests/libsvn_client/client-test.c258
-rw-r--r--subversion/tests/libsvn_delta/random-test.c45
-rw-r--r--subversion/tests/libsvn_delta/range-index-test.h14
-rw-r--r--subversion/tests/libsvn_delta/svndiff-test.c9
-rw-r--r--subversion/tests/libsvn_delta/vdelta-test.c186
-rw-r--r--subversion/tests/libsvn_delta/window-test.c7
-rw-r--r--subversion/tests/libsvn_diff/diff-diff3-test.c675
-rw-r--r--subversion/tests/libsvn_diff/parse-diff-test.c2
-rw-r--r--subversion/tests/libsvn_fs/fs-test.c287
-rw-r--r--subversion/tests/libsvn_fs/locks-test.c200
-rw-r--r--subversion/tests/libsvn_fs_base/strings-reps-test.c2
-rw-r--r--subversion/tests/libsvn_fs_fs/fs-pack-test.c497
-rw-r--r--subversion/tests/libsvn_ra/ra-test.c213
-rw-r--r--subversion/tests/libsvn_ra_local/ra-local-test.c2
-rw-r--r--subversion/tests/libsvn_repos/repos-test.c1701
-rw-r--r--subversion/tests/libsvn_subr/auth-test.c128
-rw-r--r--subversion/tests/libsvn_subr/cache-test.c87
-rw-r--r--subversion/tests/libsvn_subr/checksum-test.c188
-rw-r--r--subversion/tests/libsvn_subr/compat-test.c112
-rw-r--r--subversion/tests/libsvn_subr/config-test.c168
-rw-r--r--subversion/tests/libsvn_subr/config-test.cfg9
-rw-r--r--subversion/tests/libsvn_subr/crypto-test.c188
-rw-r--r--subversion/tests/libsvn_subr/dirent_uri-test.c379
-rw-r--r--subversion/tests/libsvn_subr/error-code-test.c83
-rw-r--r--subversion/tests/libsvn_subr/error-test.c45
-rw-r--r--subversion/tests/libsvn_subr/io-test.c527
-rw-r--r--subversion/tests/libsvn_subr/mergeinfo-test.c385
-rw-r--r--subversion/tests/libsvn_subr/named_atomic-test-common.h245
-rw-r--r--subversion/tests/libsvn_subr/named_atomic-test-proc.c86
-rw-r--r--subversion/tests/libsvn_subr/named_atomic-test.c761
-rw-r--r--subversion/tests/libsvn_subr/path-test.c235
-rw-r--r--subversion/tests/libsvn_subr/skel-test.c19
-rw-r--r--subversion/tests/libsvn_subr/spillbuf-test.c433
-rw-r--r--subversion/tests/libsvn_subr/stream-test.c185
-rw-r--r--subversion/tests/libsvn_subr/string-test.c244
-rw-r--r--subversion/tests/libsvn_subr/subst_translate-test.c270
-rw-r--r--subversion/tests/libsvn_subr/target-test.c201
-rw-r--r--subversion/tests/libsvn_subr/utf-test.c2
-rw-r--r--subversion/tests/libsvn_subr/zlib.deflatedbin0 -> 77174 bytes
-rw-r--r--subversion/tests/libsvn_wc/conflict-data-test.c831
-rwxr-xr-xsubversion/tests/libsvn_wc/create_wc_for_upgrade.sh8
-rw-r--r--subversion/tests/libsvn_wc/db-test.c363
-rw-r--r--subversion/tests/libsvn_wc/entries-compat.c148
-rw-r--r--subversion/tests/libsvn_wc/op-depth-test.c6654
-rw-r--r--subversion/tests/libsvn_wc/pristine-store-test.c7
-rw-r--r--subversion/tests/libsvn_wc/tree-conflict-data-test.c307
-rw-r--r--subversion/tests/libsvn_wc/utils.c385
-rw-r--r--subversion/tests/libsvn_wc/utils.h101
-rw-r--r--subversion/tests/libsvn_wc/wc-incomplete-tester.c2
-rw-r--r--subversion/tests/libsvn_wc/wc-queries-test.c897
-rw-r--r--subversion/tests/libsvn_wc/wc-test.c323
-rw-r--r--subversion/tests/svn_test.h67
-rw-r--r--subversion/tests/svn_test_fs.c217
-rw-r--r--subversion/tests/svn_test_fs.h32
-rw-r--r--subversion/tests/svn_test_main.c97
896 files changed, 276227 insertions, 126615 deletions
diff --git a/subversion/bindings/ctypes-python/csvn/repos.py b/subversion/bindings/ctypes-python/csvn/repos.py
index e1df253..eead467 100644
--- a/subversion/bindings/ctypes-python/csvn/repos.py
+++ b/subversion/bindings/ctypes-python/csvn/repos.py
@@ -67,6 +67,10 @@ class RepositoryURI(object):
return self._as_parameter_
class RemoteRepository(object):
+ """This class represents a connection from the client to a remote
+ Subversion repository."""
+ # The interface corresponds roughly to the svn_ra API, and an object of
+ # this type basically represents the C type 'svn_ra_session_t'.
def __init__(self, url, user=None):
"""Open a new session to URL with the specified USER.
@@ -150,7 +154,12 @@ class RemoteRepository(object):
svn_ra_get_dir2(self, dirents.byref(), NULL, NULL, path,
rev, fields, dirents.pool)
self.iterpool.clear()
- return dirents
+ # Create a Python dict of svn_dirent_t objects from this Hash of
+ # pointers to svn_dirent_t.
+ result = {}
+ for path, dirent_p in dirents.items():
+ result[path] = dirent_p[0]
+ return result
def cat(self, buffer, path, rev = SVN_INVALID_REVNUM):
"""Get PATH@REV and save it to BUFFER. BUFFER must be a Python file
@@ -174,7 +183,7 @@ class RemoteRepository(object):
rev = self.latest_revnum()
svn_ra_stat(self, path, rev, byref(dirent), dirent.pool)
self.iterpool.clear()
- return dirent
+ return dirent[0]
def proplist(self, path, rev = SVN_INVALID_REVNUM):
"""Return a dictionary containing the properties on PATH@REV
diff --git a/subversion/bindings/ctypes-python/csvn/txn.py b/subversion/bindings/ctypes-python/csvn/txn.py
index 9f5151b..ecad4fb 100644
--- a/subversion/bindings/ctypes-python/csvn/txn.py
+++ b/subversion/bindings/ctypes-python/csvn/txn.py
@@ -90,7 +90,7 @@ class Txn(object):
if kind == svn_node_none:
if base_rev:
- message = "'%s' not found in rev %d" % (path, base_rev)
+ message = "'%s' not found in r%d" % (path, base_rev)
else:
message = "'%s' not found" % (path)
raise SubversionException(SVN_ERR_BAD_URL, message)
diff --git a/subversion/bindings/ctypes-python/setup.py b/subversion/bindings/ctypes-python/setup.py
index 92f4915..ca9ffa8 100755
--- a/subversion/bindings/ctypes-python/setup.py
+++ b/subversion/bindings/ctypes-python/setup.py
@@ -58,7 +58,7 @@ class clean(_clean):
if not self.dry_run:
os.remove(f)
else:
- log.warn("'%s' does not exist -- can't clean it", os.path.normpath(f))
+ log.debug("'%s' does not exist -- can't clean it", os.path.normpath(f))
# Run standard clean command
_clean.run(self)
diff --git a/subversion/bindings/ctypes-python/test/remoterepos.py b/subversion/bindings/ctypes-python/test/remoterepos.py
index 8a5eb10..dadea9e 100755
--- a/subversion/bindings/ctypes-python/test/remoterepos.py
+++ b/subversion/bindings/ctypes-python/test/remoterepos.py
@@ -27,6 +27,13 @@ from csvn.core import *
from urllib import pathname2url
from csvn.repos import LocalRepository, RemoteRepository
from stat import *
+from sys import version_info # For Python version check
+if version_info[0] >= 3:
+ # Python >=3.0
+ from io import StringIO
+else:
+ # Python <3.0
+ from StringIO import StringIO
repos_location = os.path.join(tempfile.gettempdir(), "svn_test_repos")
repos_url = pathname2url(repos_location)
@@ -64,6 +71,15 @@ class RemoteRepositoryTestCase(unittest.TestCase):
if os.path.exists(repos_location):
svn_repos_delete(repos_location, Pool())
+ def svn_dirent_t_assert_equal(self, a, b):
+ """Assert that two svn_dirent_t's are equal, ignoring their 'time'
+ fields."""
+ self.assertEqual(a.kind, b.kind)
+ self.assertEqual(a.size, b.size)
+ self.assertEqual(a.has_props, b.has_props)
+ self.assertEqual(a.created_rev, b.created_rev)
+ self.assertEqual(a.last_author, b.last_author)
+
def test_remote_latest_revnum(self):
self.assertEqual(9, self.repos.latest_revnum())
@@ -77,6 +93,50 @@ class RemoteRepositoryTestCase(unittest.TestCase):
self.assertEqual(svn_node_none,
self.repos.check_path("does_not_compute"))
+ def test_list(self):
+ expected = {
+ 'README.txt':
+ svn_dirent_t(kind=svn_node_file, size=159, has_props=True,
+ created_rev=9, last_author=String('bruce')),
+ 'ANOTHERREADME.txt':
+ svn_dirent_t(kind=svn_node_file, size=66, has_props=False,
+ created_rev=4, last_author=String('clark')) }
+ found = self.repos.list("trunk")
+ self.assertEqual(sorted(found.keys()), sorted(expected.keys()))
+ for path in found:
+ self.svn_dirent_t_assert_equal(found[path], expected[path])
+
+ def test_info(self):
+ e = svn_dirent_t(kind=svn_node_file, size=159, has_props=True,
+ created_rev=9, last_author=String('bruce'))
+ f = self.repos.info("trunk/README.txt")
+ self.svn_dirent_t_assert_equal(f, e)
+
+ def test_proplist(self):
+ expected = { 'Awesome': 'Yes',
+ 'svn:entry:last-author': 'bruce',
+ 'svn:entry:committed-rev': '9' }
+ found = self.repos.proplist("trunk/README.txt")
+ # Check results, ignoring some entry-props
+ del found['svn:entry:committed-date']
+ del found['svn:entry:uuid']
+ self.assertEqual(sorted(found.keys()), sorted(expected.keys()))
+ for pname in found:
+ self.assertEqual(found[pname], expected[pname])
+
+ def test_propget(self):
+ found = self.repos.propget("Awesome", "trunk/README.txt")
+ self.assertEqual(found, "Yes")
+
+ def test_log(self):
+ expected = [ (8, 'clark'),
+ (9, 'bruce') ]
+ for found in self.repos.log(7, 9, ["trunk/README.txt"]):
+ (e_rev, e_author) = expected[0]
+ self.assertEqual(found.revision, e_rev)
+ self.assertEqual(found.author, e_author)
+ expected = expected[1:]
+
def test_revprop_list(self):
# Test argument-free case
props = self.repos.revprop_list()
diff --git a/subversion/bindings/ctypes-python/test/setup_path.py b/subversion/bindings/ctypes-python/test/setup_path.py
index 29d5fbc..e9c68d2 100755
--- a/subversion/bindings/ctypes-python/test/setup_path.py
+++ b/subversion/bindings/ctypes-python/test/setup_path.py
@@ -25,8 +25,8 @@
import sys
import os
-src_swig_python_tests_dir = os.path.dirname(os.path.dirname(__file__))
-sys.path[0:0] = [ src_swig_python_tests_dir ]
+src_ctypes_python_tests_dir = os.path.dirname(os.path.dirname(__file__))
+sys.path[0:0] = [ src_ctypes_python_tests_dir ]
import csvn.core
csvn.core.svn_cmdline_init("", csvn.core.stderr)
diff --git a/subversion/bindings/ctypes-python/test/svntypes.py b/subversion/bindings/ctypes-python/test/svntypes.py
index 8ba8b37..cb9d3d6 100755
--- a/subversion/bindings/ctypes-python/test/svntypes.py
+++ b/subversion/bindings/ctypes-python/test/svntypes.py
@@ -21,8 +21,25 @@ import setup_path
import unittest
from csvn.core import *
import csvn.types as _types
+from csvn.types import SvnDate, Hash, Array, APRFile, Stream, SvnStringPtr
-class TypesTestCase(unittest.TestCase):
+class SvnDateTestCase(unittest.TestCase):
+
+ def test_as_apr_time_t(self):
+ d1 = SvnDate('1999-12-31T23:59:59.000000Z')
+ d2 = SvnDate('2000-01-01T00:00:00.000000Z')
+ t1 = d1.as_apr_time_t().value
+ t2 = d2.as_apr_time_t().value
+ self.assertEqual(t1 + 1000000, t2)
+
+ def test_as_human_string(self):
+ d1 = SvnDate('1999-12-31T23:59:59.000000Z')
+ s1 = d1.as_human_string()
+ self.assertRegexpMatches(s1[:27],
+ r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} [+-]\d{4} \(')
+
+
+class HashTestCase(unittest.TestCase):
def test_hash(self):
self.pydict = {"bruce":"batman", "clark":"superman",
@@ -35,6 +52,34 @@ class TypesTestCase(unittest.TestCase):
self.assertNotEqual(self.svnhash["clark"].value,
self.pydict["bruce"])
+ def test_insert_delete(self):
+ h = Hash(c_char_p)
+ h['foo'] = 'f'
+ h['bar'] = 'b'
+ self.assertEqual(len(h), 2)
+ self.assertEqual(h['foo'].value, 'f')
+ self.assertEqual(h['bar'].value, 'b')
+ h['bar'] = 'b'
+ self.assertEqual(len(h), 2)
+ del h['foo']
+ self.assertEqual(len(h), 1)
+ self.assertEqual(h['bar'].value, 'b')
+
+ def test_iter(self):
+ h = Hash(c_char_p, { 'foo': 'f', 'bar': 'b' })
+ keys = sorted(h.keys())
+ self.assertEqual(keys, ['bar', 'foo'])
+ vals = []
+ for k in h:
+ vals += [ h[k].value ]
+ self.assertEqual(sorted(vals), ['b', 'f'])
+ vals = []
+ for k,v in h.items():
+ vals += [ v.value ]
+ self.assertEqual(sorted(vals), ['b', 'f'])
+
+class ArrayTestCase(unittest.TestCase):
+
def test_array(self):
self.pyarray = ["vini", "vidi", "vici"]
self.svnarray = _types.Array(c_char_p, self.pyarray)
@@ -43,7 +88,11 @@ class TypesTestCase(unittest.TestCase):
self.assertEqual(self.svnarray[1], "vidi")
def suite():
- return unittest.makeSuite(TypesTestCase, 'test')
+ suite = unittest.TestSuite()
+ suite.addTest(unittest.makeSuite(SvnDateTestCase, 'test'))
+ suite.addTest(unittest.makeSuite(HashTestCase, 'test'))
+ suite.addTest(unittest.makeSuite(ArrayTestCase, 'test'))
+ return suite
if __name__ == '__main__':
runner = unittest.TextTestRunner()
diff --git a/subversion/bindings/ctypes-python/test/wc.py b/subversion/bindings/ctypes-python/test/wc.py
index 01eab89..6d57902 100755
--- a/subversion/bindings/ctypes-python/test/wc.py
+++ b/subversion/bindings/ctypes-python/test/wc.py
@@ -254,5 +254,5 @@ def suite():
return unittest.makeSuite(WCTestCase, 'test')
if __name__ == '__main__':
- runner = unittest.TextTestRunner(verbosity=2)
+ runner = unittest.TextTestRunner()
runner.run(suite())
diff --git a/subversion/bindings/cxxhl/README b/subversion/bindings/cxxhl/README
new file mode 100644
index 0000000..6bb2a1d
--- /dev/null
+++ b/subversion/bindings/cxxhl/README
@@ -0,0 +1,13 @@
+WORK IN PROGRESS
+================
+
+This directory contains an experimental implementation of a C++HL, a
+high-level Subversion C++ API, modeled along the lines of JavaHL.
+
+It is far from complete and may never see the light of day.
+
+On the other hand, one good reason for having a high-level C++ API is
+to use it as a baseline for Swig-generated binadings. Our current set
+of Perl, Python and Ruby bindings is too heterogenous in terms of
+feature set, object and usage model. They're almost as hard to use as
+the C API itself. \ No newline at end of file
diff --git a/subversion/bindings/cxxhl/include/svncxxhl.hpp b/subversion/bindings/cxxhl/include/svncxxhl.hpp
new file mode 100644
index 0000000..29b618b
--- /dev/null
+++ b/subversion/bindings/cxxhl/include/svncxxhl.hpp
@@ -0,0 +1,37 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ */
+
+#ifndef __cplusplus
+#error "This is a C++ header file."
+#endif
+
+#ifndef SVN_CXXHL_HPP
+#define SVN_CXXHL_HPP
+
+// Expose the whole API and alias the default version namespace
+#include "svncxxhl/exception.hpp"
+#include "svncxxhl/tristate.hpp"
+
+namespace svn = ::subversion::cxxhl::version_1_9_dev;
+
+#endif // SVN_CXXHL_HPP
diff --git a/subversion/bindings/cxxhl/include/svncxxhl/_compat.hpp b/subversion/bindings/cxxhl/include/svncxxhl/_compat.hpp
new file mode 100644
index 0000000..264e533
--- /dev/null
+++ b/subversion/bindings/cxxhl/include/svncxxhl/_compat.hpp
@@ -0,0 +1,91 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ */
+
+#ifndef __cplusplus
+#error "This is a C++ header file."
+#endif
+
+#ifndef SVN_CXXHL_COMPAT_HPP
+#define SVN_CXXHL_COMPAT_HPP
+
+// Configuration test: std::shared_ptr<>
+// Currently detects: clang++, g++, msvc-2010+
+#ifndef SVN_CXXHL_HAVE_STD_SHARED_PTR
+# if (defined(__clang__) && __cplusplus >= 201103L) \
+ || (defined(__GNUC__) && defined(__GXX_EXPERIMENTAL_CXX0X__)) \
+ || (defined(_MSC_VER) && _MSC_VER >= 1600)
+# define SVN_CXXHL_HAVE_STD_SHARED_PTR
+# endif // config test: std::shared_ptr<>
+#endif // SVN_CXXHL_HAVE_STD_SHARED_PTR
+
+// Configuration test: std::tr1::shared_ptr<>
+// Currently detects: clang++, g++
+#ifndef SVN_CXXHL_HAVE_STD_SHARED_PTR
+# ifndef SVN_CXXHL_HAVE_STD_TR1_SHARED_PTR
+# if defined(__GNUC__) \
+ && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ >= 1)
+# define SVN_CXXHL_HAVE_STD_TR1_SHARED_PTR
+# endif // config test: std::tr1::shared_ptr<>
+# endif // SVN_CXXHL_HAVE_STD_TR1_SHARED_PTR
+#endif // SVN_CXXHL_HAVE_STD_SHARED_PTR
+
+
+#if defined(SVN_CXXHL_HAVE_STD_SHARED_PTR)
+
+#include <memory>
+namespace subversion {
+namespace cxxhl {
+namespace compat {
+using std::shared_ptr;
+} // namespace compat
+} // namespace cxxhl
+} // namespace subversion
+
+#elif defined(SVN_CXXHL_HAVE_STD_TR1_SHARED_PTR)
+
+#include <tr1/memory>
+namespace subversion {
+namespace cxxhl {
+namespace compat {
+using std::tr1::shared_ptr;
+} // namespace compat
+} // namespace cxxhl
+} // namespace subversion
+
+#else
+// We need shared_ptr<> from somewhere. If we cannot find it in ::std
+// given known compiler characteristics, then try boost as a last
+// resort.
+
+#include <boost/shared_ptr.hpp>
+namespace subversion {
+namespace cxxhl {
+namespace compat {
+using boost::shared_ptr;
+} // namespace compat
+} // namespace cxxhl
+} // namespace subversion
+
+#endif // SVN_CXXHL_HAVE_STD_SHARED_PTR
+
+#endif // SVN_CXXHL_COMPAT_HPP
diff --git a/subversion/bindings/cxxhl/include/svncxxhl/exception.hpp b/subversion/bindings/cxxhl/include/svncxxhl/exception.hpp
new file mode 100644
index 0000000..3a1b9a0
--- /dev/null
+++ b/subversion/bindings/cxxhl/include/svncxxhl/exception.hpp
@@ -0,0 +1,144 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ */
+
+#ifndef __cplusplus
+#error "This is a C++ header file."
+#endif
+
+#ifndef SVN_CXXHL_EXCEPTION_HPP
+#define SVN_CXXHL_EXCEPTION_HPP
+
+#include <exception>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "svncxxhl/_compat.hpp"
+
+// Forward declaration of implementation-specific structure
+struct svn_error_t;
+
+namespace subversion {
+namespace cxxhl {
+
+namespace compat {} // Announce the compat namespace for shared_ptr lookup
+
+namespace detail {
+// Forward declaration of implementation-specific structure
+class error_description;
+} // namespace detail
+
+namespace version_1_9_dev {
+
+class error : public std::exception
+{
+public:
+ typedef compat::shared_ptr<error> shared_ptr;
+
+ error(const char* description, int error_code);
+ error(const char* description, int error_code, shared_ptr nested_error);
+
+ error(const error& that) throw();
+ error& operator=(const error& that) throw();
+ virtual ~error() throw();
+
+ /**
+ * Returns the error code associated with the exception.
+ */
+ virtual int code() const throw() { return m_errno; }
+
+ /**
+ * Returns a shared pointer to the nested exception object, if any.
+ */
+ virtual shared_ptr nested() const throw() { return m_nested; }
+
+ /// Returns the message associated with this exception object.
+ virtual const char* what() const throw();
+
+ /**
+ * Error message description.
+ *
+ * The first element of this pair is the error code, the second the
+ * associated error message. If the error code is 0, the message
+ * describes the location in the source code where the error was
+ * generated from.
+ */
+ typedef std::pair<int, std::string> message;
+
+ /**
+ * The list of messages associated with an error.
+ */
+ typedef std::vector<message> message_list;
+
+ /**
+ * Returns the complete list of error messages, including those from
+ * nested exceptions.
+ */
+ virtual message_list messages() const
+ {
+ return compile_messages(false);
+ }
+
+ /**
+ * Like error::messages(), but includes debugging traceback.
+ *
+ * @note
+ * Traceback is only available if the Subversion libraries were
+ * compiled with tracing enabled.
+ */
+ virtual message_list traced_messages() const
+ {
+ return compile_messages(true);
+ }
+
+public:
+ /** Used internally by the implementation. */
+ static void throw_svn_error(svn_error_t*);
+
+protected:
+ error(int error_code, detail::error_description* description) throw();
+
+private:
+ std::vector<message> compile_messages(bool show_traces) const;
+
+ int m_errno; /**< The (SVN or APR) error code. */
+ shared_ptr m_nested; /**< Optional pointer to nessted error. */
+ /** Error description and trace location information. */
+ detail::error_description* m_description;
+};
+
+class cancelled : public error
+{
+ friend void error::throw_svn_error(svn_error_t*);
+
+protected:
+ cancelled(int error_code, detail::error_description* description) throw()
+ : error(error_code, description)
+ {}
+};
+
+} // namespace version_1_9_dev
+} // namespace cxxhl
+} // namespace subversion
+
+#endif // SVN_CXXHL_EXCEPTION_HPP
diff --git a/subversion/bindings/cxxhl/include/svncxxhl/tristate.hpp b/subversion/bindings/cxxhl/include/svncxxhl/tristate.hpp
new file mode 100644
index 0000000..15a60b4
--- /dev/null
+++ b/subversion/bindings/cxxhl/include/svncxxhl/tristate.hpp
@@ -0,0 +1,64 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ */
+
+#ifndef __cplusplus
+#error "This is a C++ header file."
+#endif
+
+#ifndef SVN_CXXHL_TRISTATE_HPP
+#define SVN_CXXHL_TRISTATE_HPP
+
+namespace subversion {
+namespace cxxhl {
+namespace version_1_9_dev {
+
+class tristate
+{
+public:
+ static const tristate TRUE;
+ static const tristate FALSE;
+ static const tristate UNKNOWN;
+
+ tristate(const tristate& that) throw()
+ : m_value(that.m_value)
+ {}
+
+ bool operator==(const tristate& that) const throw()
+ { return m_value == that.m_value; }
+
+ bool operator!=(const tristate& that) const throw()
+ { return !(*this == that); }
+
+ bool known() const throw()
+ { return *this != UNKNOWN; }
+
+private:
+ explicit tristate(short int value) throw();
+ short int m_value;
+};
+
+} // namespace version_1_9_dev
+} // namespace cxxhl
+} // namespace subversion
+
+#endif // SVN_CXXHL_TRISTATE_HPP
diff --git a/subversion/bindings/cxxhl/src/exception.cpp b/subversion/bindings/cxxhl/src/exception.cpp
new file mode 100644
index 0000000..6c55792
--- /dev/null
+++ b/subversion/bindings/cxxhl/src/exception.cpp
@@ -0,0 +1,322 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ */
+
+#include <algorithm>
+#include <cstddef>
+#include <cstring>
+#include <new>
+#include <sstream>
+
+#include "svncxxhl/exception.hpp"
+
+#include "svn_error.h"
+#include "svn_utf.h"
+#include "private/svn_atomic.h"
+#include "private/svn_error_private.h"
+#include "svn_private_config.h"
+#undef TRUE
+#undef FALSE
+
+namespace subversion {
+namespace cxxhl {
+
+namespace detail {
+
+class error_description
+{
+public:
+ static error_description* create(const char* message,
+ const char *loc_file, long loc_line,
+ bool trace_link)
+ {
+ bool empty_message = (message == NULL);
+ const std::size_t length = (empty_message ? 0 : std::strlen(message));
+ void *memblock = ::operator new(length + sizeof(error_description));
+
+ error_description* description = new(memblock) error_description(
+ loc_file, loc_line, trace_link, empty_message);
+ if (length)
+ std::memcpy(description->m_message, message, length);
+ description->m_message[length] = 0;
+ return description;
+ }
+
+ static error_description* create(const char* message)
+ {
+ return create(message, NULL, 0, false);
+ }
+
+ error_description* reference() throw()
+ {
+ if (this)
+ svn_atomic_inc(&m_refcount);
+ return this;
+ }
+
+ error_description* dereference() throw()
+ {
+ if (this && 0 == svn_atomic_dec(&m_refcount))
+ {
+ this->~error_description();
+ ::operator delete(this, std::nothrow);
+ return NULL;
+ }
+ return this;
+ }
+
+ const char* what() const throw() { return (m_empty ? NULL : m_message); }
+ const char* file() const throw() { return m_loc_file; }
+ long line() const throw() { return m_loc_line; }
+ bool trace() const throw() { return m_trace; }
+
+private:
+ error_description(const char *loc_file, long loc_line,
+ bool trace_link, bool empty_message) throw()
+ : m_loc_file(loc_file),
+ m_loc_line(loc_line),
+ m_trace(trace_link),
+ m_empty(empty_message),
+ m_refcount(0)
+ {}
+
+ ~error_description() throw() {}
+
+ const char* m_loc_file;
+ long m_loc_line;
+ bool m_trace;
+ bool m_empty;
+
+ volatile svn_atomic_t m_refcount;
+ char m_message[1];
+};
+
+} // namespace detail
+
+
+namespace version_1_9_dev {
+
+error::error(const char* description, int error_code)
+ : m_errno(error_code),
+ m_description(detail::error_description::create(description)->reference())
+{}
+
+error::error(const char* description, int error_code,
+ error::shared_ptr nested_error)
+ : m_errno(error_code),
+ m_nested(nested_error),
+ m_description(detail::error_description::create(description)->reference())
+{}
+
+error::error(const error& that) throw()
+ : m_errno(that.m_errno),
+ m_nested(that.m_nested),
+ m_description(that.m_description->reference())
+{}
+
+error& error::operator=(const error& that) throw()
+{
+ if (this == &that)
+ return *this;
+
+ // This in-place destroy+copy implementation of the assignment
+ // operator is safe because both the destructor and the copy
+ // constructor do not throw exceptions.
+ this->~error();
+ return *new(this) error(that);
+}
+
+error::~error() throw()
+{
+ m_description->dereference();
+}
+
+const char* error::what() const throw()
+{
+ return m_description->what();
+}
+
+error::error(int error_code, detail::error_description* description) throw()
+ : m_errno(error_code),
+ m_description(description)
+{}
+
+void error::throw_svn_error(svn_error_t* err)
+{
+ const bool throw_cancelled = (err->apr_err == SVN_ERR_CANCELLED);
+ detail::error_description* description = NULL;
+ try
+ {
+ // Be very careful when creating the error descriptions, so that
+ // the exception unwinder can free them if an allocation fails.
+ // The private constructor does not increment the refcount
+ // precisely for this reason.
+
+ shared_ptr nested;
+ shared_ptr* current = &nested;
+
+ for (svn_error_t* next = err->child; next; next = next->child)
+ {
+ description = detail::error_description::create(
+ next->message, next->file, next->line,
+ svn_error__is_tracing_link(next));
+ description->reference();
+ current->reset(new error(next->apr_err, description));
+ description = NULL;
+ current = &(*current)->m_nested;
+ }
+
+ const int apr_err = err->apr_err;
+ description = detail::error_description::create(
+ err->message, err->file, err->line,
+ svn_error__is_tracing_link(err));
+ description->reference();
+ svn_error_clear(err);
+ if (throw_cancelled)
+ {
+ cancelled converted = cancelled(apr_err, description);
+ description = NULL;
+ converted.m_nested = nested;
+ throw converted;
+ }
+ else
+ {
+ error converted = error(apr_err, description);
+ description = NULL;
+ converted.m_nested = nested;
+ throw converted;
+ }
+ }
+ catch (...)
+ {
+ description->dereference();
+ throw;
+ }
+}
+
+
+namespace {
+void handle_one_error(error::message_list& ml, bool show_traces,
+ int error_code, detail::error_description* descr,
+ apr_pool_t* pool)
+{
+ if (show_traces && descr->file())
+ {
+ const char* file_utf8 = NULL;
+ svn_error_t* err =
+ svn_utf_cstring_to_utf8(&file_utf8, descr->file(), pool);
+ if (err)
+ {
+ svn_error_clear(err);
+ file_utf8 = NULL;
+ }
+ std::ostringstream buffer;
+ if (file_utf8)
+ buffer << file_utf8 << ':' << descr->line();
+ else
+ buffer << "svn:<undefined>";
+ buffer << ": (apr_err=" << error_code << ')';
+ ml.push_back(error::message(0, buffer.str()));
+ }
+
+ if (descr->trace())
+ return;
+
+ const char *description = descr->what();
+ if (!description)
+ {
+ char errorbuf[512];
+
+ // Is this a Subversion-specific error code?
+ if (error_code > APR_OS_START_USEERR
+ && error_code <= APR_OS_START_CANONERR)
+ description = svn_strerror(error_code, errorbuf, sizeof(errorbuf));
+ // Otherwise, this must be an APR error code.
+ else
+ {
+ svn_error_t* err = svn_utf_cstring_to_utf8(
+ &description,
+ apr_strerror(error_code, errorbuf, sizeof(errorbuf)),
+ pool);
+ if (err)
+ {
+ svn_error_clear(err);
+ description = _("Can't recode error string from APR");
+ }
+ }
+ }
+ ml.push_back(error::message(error_code, std::string(description)));
+}
+} // anonymous namespace
+
+error::message_list error::compile_messages(bool show_traces) const
+{
+ // Determine the maximum size of the returned list
+ message_list::size_type max_length = 0;
+ for (const error* err = this; err; err = err->m_nested.get())
+ {
+ if (show_traces && m_description->file())
+ ++max_length; // We will display an error location
+ if (!m_description->trace())
+ ++max_length; // Traces do not emit a message line
+ }
+ message_list ml;
+ ml.reserve(max_length);
+
+ // This vector holds a list of all error codes that we've printed
+ // the generic description for. See svn_handle_error2 for details.
+ std::vector<int> empties;
+ empties.reserve(max_length);
+
+ apr_pool_t* pool = NULL;
+ apr_pool_create(&pool, NULL);
+ try
+ {
+ for (const error* err = this; err; err = err->m_nested.get())
+ {
+ if (!err->m_description->what())
+ {
+ // Non-specific messages are printed only once.
+ std::vector<int>::iterator it = std::find(
+ empties.begin(), empties.end(), err->m_errno);
+ if (it != empties.end())
+ continue;
+ empties.push_back(err->m_errno);
+ }
+ handle_one_error(ml, show_traces,
+ err->m_errno, err->m_description,
+ pool);
+ }
+ }
+ catch (...)
+ {
+ apr_pool_destroy(pool);
+ throw;
+ }
+
+ apr_pool_destroy(pool);
+ return ml;
+}
+
+} // namespace version_1_9_dev
+} // namespace cxxhl
+} // namespace subversion
diff --git a/subversion/bindings/cxxhl/src/tristate.cpp b/subversion/bindings/cxxhl/src/tristate.cpp
new file mode 100644
index 0000000..10a2207
--- /dev/null
+++ b/subversion/bindings/cxxhl/src/tristate.cpp
@@ -0,0 +1,44 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ */
+
+#include "svncxxhl/tristate.hpp"
+
+#include "svn_types.h"
+#undef TRUE
+#undef FALSE
+
+namespace subversion {
+namespace cxxhl {
+namespace version_1_9_dev {
+
+tristate::tristate(short value) throw()
+ : m_value(value)
+{}
+
+const tristate tristate::TRUE = tristate(svn_tristate_true);
+const tristate tristate::FALSE = tristate(svn_tristate_false);
+const tristate tristate::UNKNOWN = tristate(svn_tristate_unknown);
+
+} // namespace version_1_9_dev
+} // namespace cxxhl
+} // namespace subversion
diff --git a/subversion/bindings/cxxhl/tests/test_exception.cpp b/subversion/bindings/cxxhl/tests/test_exception.cpp
new file mode 100644
index 0000000..ccfec6c
--- /dev/null
+++ b/subversion/bindings/cxxhl/tests/test_exception.cpp
@@ -0,0 +1,129 @@
+/*
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#include <algorithm>
+#include <iomanip>
+#include <ios>
+#include <iostream>
+
+#include "svncxxhl.hpp"
+
+#include <apr.h>
+#include "svn_error.h"
+
+namespace {
+void trace(const svn::error::message& msg)
+{
+ std::cout << " ";
+ if (msg.first)
+ std::cout << "test_exception: E"
+ << std::setw(6) << std::setfill('0') << std::right
+ << msg.first << ':' << ' ';
+ std::cout << msg.second << std::endl;
+}
+
+void traceall(const char *message, const svn::error& err)
+{
+ typedef svn::error::message_list message_list;
+ std::cout << message << std::endl;
+ std::cout << "Traced Messages:" << std::endl;
+ message_list ml = err.traced_messages();
+ std::for_each(ml.begin(), ml.end(), trace);
+ std::cout << "Just Messages:" << std::endl;
+ ml = err.messages();
+ std::for_each(ml.begin(), ml.end(), trace);
+}
+} // anonymous namespace
+
+
+bool test_cancel()
+{
+ try
+ {
+ svn_error_t* err;
+ err = svn_error_create(SVN_ERR_TEST_FAILED, NULL, "original message");
+ err = svn_error_create(SVN_ERR_BASE, err, "wrapper message");
+ err = svn_error_create(SVN_ERR_CANCELLED, err, NULL);
+ err = svn_error_create(SVN_ERR_CANCELLED, err, NULL);
+ err = svn_error_trace(err);
+ svn::error::throw_svn_error(err);
+ }
+ catch (const svn::cancelled& err)
+ {
+ traceall("Caught: CANCEL", err);
+ return true;
+ }
+ catch (const svn::error& err)
+ {
+ traceall("Caught: ERROR", err);
+ return false;
+ }
+ catch (...)
+ {
+ return false;
+ }
+ return false;
+}
+
+int test_error()
+{
+ try
+ {
+ svn_error_t* err;
+ err = svn_error_create(SVN_ERR_TEST_FAILED, NULL, "original message");
+ err = svn_error_create(SVN_ERR_BASE, err, "wrapper message");
+ err = svn_error_create(SVN_ERR_CANCELLED, err, NULL);
+ err = svn_error_create(SVN_ERR_CANCELLED, err, NULL);
+ err = svn_error_create(SVN_ERR_UNSUPPORTED_FEATURE, err, NULL);
+ err = svn_error_create(SVN_ERR_UNSUPPORTED_FEATURE, err, NULL);
+ err = svn_error_trace(err);
+ svn::error::throw_svn_error(err);
+ }
+ catch (const svn::cancelled& err)
+ {
+ traceall("Caught: CANCEL", err);
+ return false;
+ }
+ catch (const svn::error& err)
+ {
+ traceall("Caught: ERROR", err);
+ return true;
+ }
+ catch (...)
+ {
+ return false;
+ }
+ return false;
+}
+
+int main()
+{
+ apr_initialize();
+
+ const char *stat = (test_cancel() ? "OK" : "ERROR");
+ std::cerr << "test_cancel .... " << stat << std::endl;
+
+ stat = (test_error() ? "OK" : "ERROR");
+ std::cerr << "test_error ..... " << stat << std::endl;
+
+ apr_terminate();
+ return 0;
+}
diff --git a/subversion/bindings/javahl/Manifest.in b/subversion/bindings/javahl/Manifest.in
new file mode 100644
index 0000000..df0ad9b
--- /dev/null
+++ b/subversion/bindings/javahl/Manifest.in
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Apache Subversion JavaHL API
+Bundle-Vendor: Apache Subversion
+Bundle-SymbolicName: org.apache.subversion.javahl
+Bundle-Version: %bundleVersion
+Export-Package: org.apache.subversion.javahl,
+ org.apache.subversion.javahl.callback,
+ org.apache.subversion.javahl.types,
+ org.tigris.subversion.javahl
diff --git a/subversion/bindings/javahl/README b/subversion/bindings/javahl/README
index c8cdaf2..bcbba3f 100644
--- a/subversion/bindings/javahl/README
+++ b/subversion/bindings/javahl/README
@@ -5,7 +5,7 @@ JavaHL provides a (mostly native, using JNI and javah) implementation of
a high level Java API for Subversion, which was originally targeted for
implementors of GUI clients and IDE plug-ins for Subversion. JavaHL
currently provides a minimal-but-complete set of APIs which expose the
-core Subversion C API to Java. It requires a JRE 1.2+ (runtime).
+core Subversion C API to Java. It requires a JRE 1.5+ (runtime).
It is currently quite mature, and can be considered for production use.
@@ -14,7 +14,7 @@ Build system
------------
JavaHL should compile and run under Linux, Win32, and Mac OS X with a
-JDK 1.3+.
+JDK 1.5+.
Its build will produce both a native library (libsvnjavahl-1.so on Unix
or libsvnjavahl-1.dll on Win32) and a platform independent archive of
@@ -62,9 +62,6 @@ Success stories
Subclipse, Eclipse IDE plug-in <http://subclipse.tigris.org/>
-Svn-Up, Swing GUI and plug-in for the IDEA IDE
-<http://svnup.tigris.org/>
-
Why not 100% pure Java?
-----------------------
diff --git a/subversion/bindings/javahl/native/Array.cpp b/subversion/bindings/javahl/native/Array.cpp
index 3dda2b2..41cfd39 100644
--- a/subversion/bindings/javahl/native/Array.cpp
+++ b/subversion/bindings/javahl/native/Array.cpp
@@ -33,16 +33,13 @@
Array::~Array()
{
- if (m_objectArray != NULL)
- {
- for (std::vector<jobject>::iterator it = m_objects.begin();
- it < m_objects.end(); ++it)
- {
- JNIUtil::getEnv()->DeleteLocalRef(*it);
- }
+ /* We don't clean up our Java object here, because this destructor may run
+ *after* a call to PopLocalFrame(). If so, we would be deleting references
+ twice, which leads to all kinds of problems.
- JNIUtil::getEnv()->DeleteLocalRef(m_objectArray);
- }
+ Instead, we intentionally "leak" these references, knowing that a call
+ to PopLocalFrame() will clean them up, or, in the worse case, the JVM
+ will clean them up when it returns from the JNI code. */
}
const std::vector<jobject> &Array::vector(void) const
diff --git a/subversion/bindings/javahl/native/BlameCallback.cpp b/subversion/bindings/javahl/native/BlameCallback.cpp
index f0f84ad..5973707 100644
--- a/subversion/bindings/javahl/native/BlameCallback.cpp
+++ b/subversion/bindings/javahl/native/BlameCallback.cpp
@@ -61,11 +61,9 @@ BlameCallback::callback(void *baton,
apr_pool_t *pool)
{
if (baton)
- return ((BlameCallback *)baton)->singleLine(start_revnum, end_revnum,
- line_no, revision, rev_props,
- merged_revision,
- merged_rev_props, merged_path,
- line, local_change, pool);
+ return static_cast<BlameCallback *>(baton)->singleLine(start_revnum,
+ end_revnum, line_no, revision, rev_props, merged_revision,
+ merged_rev_props, merged_path, line, local_change, pool);
return SVN_NO_ERROR;
}
diff --git a/subversion/bindings/javahl/native/ChangelistCallback.cpp b/subversion/bindings/javahl/native/ChangelistCallback.cpp
index 5a9c9fc..d04ba32 100644
--- a/subversion/bindings/javahl/native/ChangelistCallback.cpp
+++ b/subversion/bindings/javahl/native/ChangelistCallback.cpp
@@ -53,7 +53,8 @@ ChangelistCallback::callback(void *baton,
apr_pool_t *pool)
{
if (baton)
- ((ChangelistCallback *)baton)->doChangelist(path, changelist, pool);
+ static_cast<ChangelistCallback *>(baton)->doChangelist(path, changelist,
+ pool);
return SVN_NO_ERROR;
}
diff --git a/subversion/bindings/javahl/native/ClientContext.cpp b/subversion/bindings/javahl/native/ClientContext.cpp
index b7e2de1..f1babc9 100644
--- a/subversion/bindings/javahl/native/ClientContext.cpp
+++ b/subversion/bindings/javahl/native/ClientContext.cpp
@@ -71,7 +71,8 @@ ClientContext::ClientContext(jobject jsvnclient, SVN::Pool &pool)
env->DeleteLocalRef(jctx);
- SVN_JNI_ERR(svn_client_create_context(&m_context, pool.getPool()),
+ SVN_JNI_ERR(svn_client_create_context2(&m_context, NULL,
+ pool.getPool()),
);
/* Clear the wc_ctx as we don't want to maintain this unconditionally
@@ -111,7 +112,7 @@ ClientContext::~ClientContext()
/* Helper function to make sure that we don't keep dangling pointers in ctx.
Note that this function might be called multiple times if getContext()
is called on the same pool.
-
+
The use of this function assumes a proper subpool behavior by its user,
(read: SVNClient) usually per request.
*/
@@ -125,7 +126,7 @@ struct clearctx_baton_t
static apr_status_t clear_ctx_ptrs(void *ptr)
{
- clearctx_baton_t *bt = (clearctx_baton_t*)ptr;
+ clearctx_baton_t *bt = reinterpret_cast<clearctx_baton_t*>(ptr);
/* Reset all values to those before overwriting by getContext. */
*bt->ctx = *bt->backup;
@@ -148,9 +149,11 @@ ClientContext::getContext(CommitMessage *message, SVN::Pool &in_pool)
Note that this allows creating a stack of context changes if
the function is invoked multiple times with different pools.
*/
- clearctx_baton_t *bt = (clearctx_baton_t *)apr_pcalloc(pool, sizeof(*bt));
+ clearctx_baton_t *bt =
+ reinterpret_cast<clearctx_baton_t *>(apr_pcalloc(pool, sizeof(*bt)));
bt->ctx = ctx;
- bt->backup = (svn_client_ctx_t*)apr_pmemdup(pool, ctx, sizeof(*ctx));
+ bt->backup =
+ reinterpret_cast<svn_client_ctx_t*>(apr_pmemdup(pool, ctx, sizeof(*ctx)));
apr_pool_cleanup_register(in_pool.getPool(), bt, clear_ctx_ptrs,
clear_ctx_ptrs);
@@ -166,9 +169,10 @@ ClientContext::getContext(CommitMessage *message, SVN::Pool &in_pool)
bt->backup->config = ctx->config;
}
- svn_config_t *config = (svn_config_t *) apr_hash_get(ctx->config,
- SVN_CONFIG_CATEGORY_CONFIG,
- APR_HASH_KEY_STRING);
+ svn_config_t *config =
+ reinterpret_cast<svn_config_t *>(apr_hash_get(ctx->config,
+ SVN_CONFIG_CATEGORY_CONFIG,
+ APR_HASH_KEY_STRING));
/* The whole list of registered providers */
@@ -323,7 +327,7 @@ ClientContext::cancelOperation()
svn_error_t *
ClientContext::checkCancel(void *cancelBaton)
{
- ClientContext *that = (ClientContext *)cancelBaton;
+ ClientContext *that = static_cast<ClientContext *>(cancelBaton);
if (that->m_cancelOperation)
return svn_error_create(SVN_ERR_CANCELLED, NULL,
_("Operation cancelled"));
diff --git a/subversion/bindings/javahl/native/CommitCallback.cpp b/subversion/bindings/javahl/native/CommitCallback.cpp
index e765a04..2ffe326 100644
--- a/subversion/bindings/javahl/native/CommitCallback.cpp
+++ b/subversion/bindings/javahl/native/CommitCallback.cpp
@@ -57,7 +57,7 @@ CommitCallback::callback(const svn_commit_info_t *commit_info,
apr_pool_t *pool)
{
if (baton)
- return ((CommitCallback *)baton)->commitInfo(commit_info, pool);
+ return static_cast<CommitCallback *>(baton)->commitInfo(commit_info, pool);
return SVN_NO_ERROR;
}
diff --git a/subversion/bindings/javahl/native/CommitMessage.cpp b/subversion/bindings/javahl/native/CommitMessage.cpp
index 4f8db5f..a947f97 100644
--- a/subversion/bindings/javahl/native/CommitMessage.cpp
+++ b/subversion/bindings/javahl/native/CommitMessage.cpp
@@ -50,9 +50,9 @@ CommitMessage::callback(const char **log_msg,
void *baton,
apr_pool_t *pool)
{
- if (baton && ((CommitMessage *)baton)->m_jcommitMessage)
- return ((CommitMessage *)baton)->getCommitMessage(log_msg, tmp_file,
- commit_items, pool);
+ if (baton && static_cast<CommitMessage *>(baton)->m_jcommitMessage)
+ return static_cast<CommitMessage *>(baton)->getCommitMessage(
+ log_msg, tmp_file, commit_items, pool);
*log_msg = NULL;
*tmp_file = NULL;
diff --git a/subversion/bindings/javahl/native/CopySources.cpp b/subversion/bindings/javahl/native/CopySources.cpp
index 4137f18..0ae471d 100644
--- a/subversion/bindings/javahl/native/CopySources.cpp
+++ b/subversion/bindings/javahl/native/CopySources.cpp
@@ -95,12 +95,13 @@ CopySources::array(SVN::Pool &pool)
std::vector<jobject> sources = m_copySources.vector();
apr_array_header_t *copySources =
- apr_array_make(p, sources.size(), sizeof(svn_client_copy_source_t *));
+ apr_array_make(p, static_cast<int>(sources.size()),
+ sizeof(svn_client_copy_source_t *));
for (std::vector<jobject>::const_iterator it = sources.begin();
it < sources.end(); ++it)
{
svn_client_copy_source_t *src =
- (svn_client_copy_source_t *) apr_palloc(p, sizeof(*src));
+ reinterpret_cast<svn_client_copy_source_t *>(apr_palloc(p, sizeof(*src)));
// Extract the path or URL from the copy source.
static jmethodID getPath = 0;
@@ -141,10 +142,8 @@ CopySources::array(SVN::Pool &pool)
// TODO: Default this to svn_opt_revision_undefined (or HEAD)
Revision rev(jrev);
- src->revision = (const svn_opt_revision_t *)
- apr_palloc(p, sizeof(*src->revision));
- memcpy((void *) src->revision, rev.revision(),
- sizeof(*src->revision));
+ src->revision = reinterpret_cast<const svn_opt_revision_t *>
+ (apr_pmemdup(p, rev.revision(), sizeof(*src->revision)));
env->DeleteLocalRef(jrev);
// Extract pegRevision from the copy source.
@@ -161,10 +160,8 @@ CopySources::array(SVN::Pool &pool)
return NULL;
Revision pegRev(jPegRev, true);
- src->peg_revision = (const svn_opt_revision_t *)
- apr_palloc(p, sizeof(*src->peg_revision));
- memcpy((void *) src->peg_revision, pegRev.revision(),
- sizeof(*src->peg_revision));
+ src->peg_revision = reinterpret_cast<const svn_opt_revision_t *>
+ (apr_pmemdup(p, pegRev.revision(), sizeof(*src->peg_revision)));
env->DeleteLocalRef(jPegRev);
APR_ARRAY_PUSH(copySources, svn_client_copy_source_t *) = src;
diff --git a/subversion/bindings/javahl/native/CreateJ.cpp b/subversion/bindings/javahl/native/CreateJ.cpp
index 8bf9f30..9b40ce7 100644
--- a/subversion/bindings/javahl/native/CreateJ.cpp
+++ b/subversion/bindings/javahl/native/CreateJ.cpp
@@ -20,8 +20,8 @@
* ====================================================================
* @endcopyright
*
- * @file ConflictResolverCallback.cpp
- * @brief Implementation of the class ConflictResolverCallback.
+ * @file CreateJ.cpp
+ * @brief Implementation of the class CreateJ.
*/
#include "svn_error.h"
@@ -35,6 +35,7 @@
#include "../include/org_apache_subversion_javahl_CommitItemStateFlags.h"
#include "svn_path.h"
+#include "svn_props.h"
#include "private/svn_wc_private.h"
jobject
@@ -150,7 +151,8 @@ CreateJ::ConflictVersion(const svn_wc_conflict_version_t *version)
static jmethodID ctor = 0;
if (ctor == 0)
{
- ctor = env->GetMethodID(clazz, "<init>", "(Ljava/lang/String;J"
+ ctor = env->GetMethodID(clazz, "<init>", "(Ljava/lang/String;"
+ "Ljava/lang/String;J"
"Ljava/lang/String;"
"L"JAVA_PACKAGE"/types/NodeKind;"
")V");
@@ -161,6 +163,9 @@ CreateJ::ConflictVersion(const svn_wc_conflict_version_t *version)
jstring jreposURL = JNIUtil::makeJString(version->repos_url);
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN_NULL;
+ jstring jreposUUID = JNIUtil::makeJString(version->repos_uuid);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
jstring jpathInRepos = JNIUtil::makeJString(version->path_in_repos);
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN_NULL;
@@ -168,7 +173,7 @@ CreateJ::ConflictVersion(const svn_wc_conflict_version_t *version)
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN_NULL;
- jobject jversion = env->NewObject(clazz, ctor, jreposURL,
+ jobject jversion = env->NewObject(clazz, ctor, jreposURL, jreposUUID,
(jlong)version->peg_rev, jpathInRepos,
jnodeKind);
if (JNIUtil::isJavaExceptionThrown())
@@ -206,9 +211,9 @@ CreateJ::Checksum(const svn_checksum_t *checksum)
POP_AND_RETURN_NULL;
}
- jbyteArray jdigest = JNIUtil::makeJByteArray(
- (const signed char *)checksum->digest,
- svn_checksum_size(checksum));
+ jbyteArray jdigest
+ = JNIUtil::makeJByteArray(checksum->digest,
+ static_cast<int>(svn_checksum_size(checksum)));
if (JNIUtil::isExceptionThrown())
POP_AND_RETURN_NULL;
@@ -429,7 +434,7 @@ CreateJ::ChangedPath(const char *path, svn_log_changed_path2_t *log_item)
jclass clazzCP = env->FindClass(JAVA_PACKAGE"/types/ChangePath");
if (JNIUtil::isJavaExceptionThrown())
- POP_AND_RETURN(SVN_NO_ERROR);
+ POP_AND_RETURN_NULL;
static jmethodID midCP = 0;
if (midCP == 0)
@@ -442,7 +447,7 @@ CreateJ::ChangedPath(const char *path, svn_log_changed_path2_t *log_item)
"L"JAVA_PACKAGE"/types/Tristate;"
"L"JAVA_PACKAGE"/types/Tristate;)V");
if (JNIUtil::isJavaExceptionThrown())
- POP_AND_RETURN(SVN_NO_ERROR);
+ POP_AND_RETURN_NULL;
}
jstring jpath = JNIUtil::makeJString(path);
@@ -506,6 +511,7 @@ CreateJ::Status(svn_wc_context_t *wc_ctx,
"ZZZZZL"JAVA_PACKAGE"/types/Lock;"
"L"JAVA_PACKAGE"/types/Lock;"
"JJL"JAVA_PACKAGE"/types/NodeKind;"
+ "Ljava/lang/String;Ljava/lang/String;"
"Ljava/lang/String;Ljava/lang/String;)V");
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN_NULL;
@@ -525,6 +531,8 @@ CreateJ::Status(svn_wc_context_t *wc_ctx,
jstring jLastCommitAuthor = NULL;
jobject jLocalLock = NULL;
jstring jChangelist = NULL;
+ jstring jMovedFromAbspath = NULL;
+ jstring jMovedToAbspath = NULL;
enum svn_wc_status_kind text_status = status->node_status;
@@ -596,6 +604,20 @@ CreateJ::Status(svn_wc_context_t *wc_ctx,
POP_AND_RETURN_NULL;
}
+ if (status->moved_from_abspath)
+ {
+ jMovedFromAbspath = JNIUtil::makeJString(status->moved_from_abspath);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ }
+
+ if (status->moved_to_abspath)
+ {
+ jMovedToAbspath = JNIUtil::makeJString(status->moved_to_abspath);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ }
+
jobject ret = env->NewObject(clazz, mid, jPath, jUrl, jNodeKind, jRevision,
jLastChangedRevision, jLastChangedDate,
jLastCommitAuthor, jTextType, jPropType,
@@ -604,7 +626,8 @@ CreateJ::Status(svn_wc_context_t *wc_ctx,
jIsSwitched, jIsFileExternal, jLocalLock,
jReposLock,
jOODLastCmtRevision, jOODLastCmtDate,
- jOODKind, jOODLastCmtAuthor, jChangelist);
+ jOODKind, jOODLastCmtAuthor, jChangelist,
+ jMovedFromAbspath, jMovedToAbspath);
return env->PopLocalFrame(ret);
}
@@ -711,7 +734,13 @@ CreateJ::ClientNotifyInformation(const svn_wc_notify_t *wcNotify)
jlong jhunkModifiedStart = wcNotify->hunk_modified_start;
jlong jhunkModifiedLength = wcNotify->hunk_modified_length;
jlong jhunkMatchedLine = wcNotify->hunk_matched_line;
- jint jhunkFuzz = wcNotify->hunk_fuzz;
+ jint jhunkFuzz = static_cast<jint>(wcNotify->hunk_fuzz);
+ if (jhunkFuzz != wcNotify->hunk_fuzz)
+ {
+ env->ThrowNew(env->FindClass("java.lang.ArithmeticException"),
+ "Overflow converting C svn_linenum_t to Java int");
+ POP_AND_RETURN_NULL;
+ }
// call the Java method
jobject jInfo = env->NewObject(clazz, midCT, jPath, jAction,
@@ -810,7 +839,8 @@ CreateJ::CommitItem(svn_client_commit_item3_t *item)
"(Ljava/lang/String;"
"L"JAVA_PACKAGE"/types/NodeKind;"
"ILjava/lang/String;"
- "Ljava/lang/String;J)V");
+ "Ljava/lang/String;J"
+ "Ljava/lang/String;)V");
if (JNIUtil::isExceptionThrown())
POP_AND_RETURN_NULL;
}
@@ -837,6 +867,12 @@ CreateJ::CommitItem(svn_client_commit_item3_t *item)
if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_IS_COPY)
jstateFlags |=
org_apache_subversion_javahl_CommitItemStateFlags_IsCopy;
+ if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_LOCK_TOKEN)
+ jstateFlags |=
+ org_apache_subversion_javahl_CommitItemStateFlags_LockToken;
+ if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_MOVED_HERE)
+ jstateFlags |=
+ org_apache_subversion_javahl_CommitItemStateFlags_MovedHere;
jstring jurl = JNIUtil::makeJString(item->url);
if (JNIUtil::isJavaExceptionThrown())
@@ -846,12 +882,16 @@ CreateJ::CommitItem(svn_client_commit_item3_t *item)
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN_NULL;
+ jstring jmovedFromPath = JNIUtil::makeJString(item->moved_from_abspath);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
jlong jcopyRevision = item->revision;
// create the Java object
jobject jitem = env->NewObject(clazz, midConstructor, jpath,
jnodeKind, jstateFlags, jurl,
- jcopyUrl, jcopyRevision);
+ jcopyUrl, jcopyRevision, jmovedFromPath);
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN_NULL;
@@ -911,7 +951,7 @@ CreateJ::CommitInfo(const svn_commit_info_t *commit_info)
}
jobject
-CreateJ::RevisionRangeList(apr_array_header_t *ranges)
+CreateJ::RevisionRangeList(svn_rangelist_t *ranges)
{
JNIEnv *env = JNIUtil::getEnv();
@@ -1019,21 +1059,22 @@ jobject CreateJ::PropertyMap(apr_hash_t *prop_hash)
POP_AND_RETURN_NULL;
apr_hash_index_t *hi;
- int i = 0;
for (hi = apr_hash_first(apr_hash_pool_get(prop_hash), prop_hash);
- hi; hi = apr_hash_next(hi), ++i)
+ hi; hi = apr_hash_next(hi))
{
const char *key;
svn_string_t *val;
- apr_hash_this(hi, (const void **)&key, NULL, (void **)&val);
+ apr_hash_this(hi,
+ reinterpret_cast<const void **>(&key),
+ NULL,
+ reinterpret_cast<void **>(&val));
jstring jpropName = JNIUtil::makeJString(key);
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN_NULL;
- jbyteArray jpropVal = JNIUtil::makeJByteArray(
- (const signed char *)val->data, val->len);
+ jbyteArray jpropVal = JNIUtil::makeJByteArray(val);
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN_NULL;
@@ -1048,6 +1089,87 @@ jobject CreateJ::PropertyMap(apr_hash_t *prop_hash)
return env->PopLocalFrame(map);
}
+jobject CreateJ::InheritedProps(apr_array_header_t *iprops)
+{
+ JNIEnv *env = JNIUtil::getEnv();
+
+ if (iprops == NULL)
+ return NULL;
+
+ // Create a local frame for our references
+ env->PushLocalFrame(LOCAL_FRAME_SIZE);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
+
+ jclass list_cls = env->FindClass("java/util/ArrayList");
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ static volatile jmethodID init_mid = 0;
+ if (init_mid == 0)
+ {
+ init_mid = env->GetMethodID(list_cls, "<init>", "(I)V");
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ }
+
+ static volatile jmethodID add_mid = 0;
+ if (add_mid == 0)
+ {
+ add_mid = env->GetMethodID(list_cls, "add",
+ "(Ljava/lang/Object;)Z");
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ }
+
+ jclass item_cls = env->FindClass(
+ JAVA_PACKAGE"/callback/InheritedProplistCallback$InheritedItem");
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ static volatile jmethodID ctor_mid = 0;
+ if (ctor_mid == 0)
+ {
+ ctor_mid = env->GetMethodID(item_cls, "<init>",
+ "(Ljava/lang/String;Ljava/util/Map;)V");
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ }
+
+ jobject array = env->NewObject(list_cls, init_mid, iprops->nelts);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ for (int i = 0; i < iprops->nelts; ++i)
+ {
+ svn_prop_inherited_item_t *iprop =
+ APR_ARRAY_IDX(iprops, i, svn_prop_inherited_item_t*);
+
+ jstring path_or_url = JNIUtil::makeJString(iprop->path_or_url);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jobject props = PropertyMap(iprop->prop_hash);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jobject item = env->NewObject(item_cls, ctor_mid, path_or_url, props);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ env->CallBooleanMethod(array, add_mid, item);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ env->DeleteLocalRef(item);
+ env->DeleteLocalRef(props);
+ env->DeleteLocalRef(path_or_url);
+ }
+
+ return env->PopLocalFrame(array);
+}
+
+
jobject CreateJ::Set(std::vector<jobject> &objects)
{
JNIEnv *env = JNIUtil::getEnv();
diff --git a/subversion/bindings/javahl/native/CreateJ.h b/subversion/bindings/javahl/native/CreateJ.h
index eacb9b4..7fe5363 100644
--- a/subversion/bindings/javahl/native/CreateJ.h
+++ b/subversion/bindings/javahl/native/CreateJ.h
@@ -74,7 +74,7 @@ class CreateJ
CommitInfo(const svn_commit_info_t *info);
static jobject
- RevisionRangeList(apr_array_header_t *ranges);
+ RevisionRangeList(svn_rangelist_t *ranges);
static jobject
StringSet(apr_array_header_t *strings);
@@ -82,6 +82,9 @@ class CreateJ
static jobject
PropertyMap(apr_hash_t *prop_hash);
+ static jobject
+ InheritedProps(apr_array_header_t *inherited_props);
+
/* This creates a set of Objects. It derefs the members of the vector
* after putting them in the set, so they caller doesn't need to. */
static jobject
diff --git a/subversion/bindings/javahl/native/DiffOptions.cpp b/subversion/bindings/javahl/native/DiffOptions.cpp
new file mode 100644
index 0000000..8d7a8eb
--- /dev/null
+++ b/subversion/bindings/javahl/native/DiffOptions.cpp
@@ -0,0 +1,75 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ *
+ * @file DiffOptions.cpp
+ * @brief Implementation of the DiffOptions class
+ */
+
+#include "DiffOptions.h"
+
+namespace {
+static jint get_diff_options_flags(jobject joptions)
+{
+ if (!joptions)
+ return 0;
+
+ JNIEnv *const env = JNIUtil::getEnv();
+
+ static volatile jfieldID fid = 0;
+ if (!fid)
+ {
+ fid = env->GetFieldID(env->GetObjectClass(joptions), "flags", "I");
+ if (JNIUtil::isJavaExceptionThrown())
+ return 0;
+ }
+
+ const jint flags = env->GetIntField(joptions, fid);
+ if (JNIUtil::isJavaExceptionThrown())
+ return 0;
+ return flags;
+}
+} // anonymous namespace
+
+DiffOptions::DiffOptions(jobject joptions)
+ : flags(get_diff_options_flags(joptions))
+{}
+
+
+apr_array_header_t *DiffOptions::optionsArray(SVN::Pool &resultPool) const
+{
+ // JavaHL ignores the default diff options from the client config
+ // files, so we always have to allocate an array, even if it will
+ // remain empty.
+ apr_array_header_t *opt = apr_array_make(resultPool.getPool(),
+ 0, sizeof(const char*));
+
+ if (flags & IGNORE_ALL_SPACE)
+ APR_ARRAY_PUSH(opt, const char*) = "--ignore-all-space";
+ if (flags & IGNORE_SPACE_CHANGE)
+ APR_ARRAY_PUSH(opt, const char*) = "--ignore-space-change";
+ if (flags & IGNORE_EOL_STYLE)
+ APR_ARRAY_PUSH(opt, const char*) = "--ignore-eol-style";
+ if (flags & SHOW_C_FUNCTION)
+ APR_ARRAY_PUSH(opt, const char*) = "--show-c-function";
+
+ return opt;
+}
diff --git a/subversion/bindings/javahl/native/DiffOptions.h b/subversion/bindings/javahl/native/DiffOptions.h
new file mode 100644
index 0000000..e59b2f9
--- /dev/null
+++ b/subversion/bindings/javahl/native/DiffOptions.h
@@ -0,0 +1,58 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ *
+ * @file DiffOptions.h
+ * @brief Native interpretation of the ...types.DiffOptions class
+ */
+
+#ifndef JAVAHL_DIFF_OPTIONS_H
+#define JAVAHL_DIFF_OPTIONS_H
+
+#include <apr_tables.h>
+#include "svn_types.h"
+#include "Pool.h"
+#include "JNIUtil.h"
+
+class DiffOptions
+{
+ public:
+ DiffOptions(jobject joptions);
+
+ apr_array_header_t *optionsArray(SVN::Pool &resultPool) const;
+
+ svn_boolean_t useGitDiffFormat() const
+ {
+ return (flags & USE_GIT_DIFF_FORMAT ? TRUE : FALSE);
+ }
+
+ private:
+ static const jint IGNORE_ALL_SPACE = 0x01;
+ static const jint IGNORE_SPACE_CHANGE = 0x02;
+ static const jint IGNORE_EOL_STYLE = 0x04;
+ static const jint SHOW_C_FUNCTION = 0x08;
+ static const jint USE_GIT_DIFF_FORMAT = 0x10;
+
+ const jint flags;
+};
+
+
+#endif /* JAVAHL_DIFF_OPTIONS_H */
diff --git a/subversion/bindings/javahl/native/DiffSummaryReceiver.cpp b/subversion/bindings/javahl/native/DiffSummaryReceiver.cpp
index d9173e2..f4cf052 100644
--- a/subversion/bindings/javahl/native/DiffSummaryReceiver.cpp
+++ b/subversion/bindings/javahl/native/DiffSummaryReceiver.cpp
@@ -46,7 +46,7 @@ DiffSummaryReceiver::summarize(const svn_client_diff_summarize_t *diff,
apr_pool_t *pool)
{
if (baton)
- return ((DiffSummaryReceiver *) baton)->onSummary(diff, pool);
+ return static_cast<DiffSummaryReceiver *>(baton)->onSummary(diff, pool);
return SVN_NO_ERROR;
}
diff --git a/subversion/bindings/javahl/native/EnumMapper.cpp b/subversion/bindings/javahl/native/EnumMapper.cpp
index c41cc02..089ef6f 100644
--- a/subversion/bindings/javahl/native/EnumMapper.cpp
+++ b/subversion/bindings/javahl/native/EnumMapper.cpp
@@ -81,7 +81,8 @@ jobject EnumMapper::mapChangePathAction(const char action)
jobject EnumMapper::mapNotifyState(svn_wc_notify_state_t state)
{
// We're assuming a valid value for the C enum above
- return mapEnum(JAVA_PACKAGE"/ClientNotifyInformation$Status", (int) state);
+ return mapEnum(JAVA_PACKAGE"/ClientNotifyInformation$Status",
+ static_cast<int>(state));
}
/**
@@ -90,13 +91,15 @@ jobject EnumMapper::mapNotifyState(svn_wc_notify_state_t state)
jobject EnumMapper::mapNotifyAction(svn_wc_notify_action_t action)
{
// We're assuming a valid value for the C enum above
- return mapEnum(JAVA_PACKAGE"/ClientNotifyInformation$Action", (int) action);
+ return mapEnum(JAVA_PACKAGE"/ClientNotifyInformation$Action",
+ static_cast<int>(action));
}
jobject EnumMapper::mapReposNotifyNodeAction(svn_node_action action)
{
// We're assuming a valid value for the C enum above
- return mapEnum(JAVA_PACKAGE"/ReposNotifyInformation$NodeAction", (int) action);
+ return mapEnum(JAVA_PACKAGE"/ReposNotifyInformation$NodeAction",
+ static_cast<int>(action));
}
/**
@@ -105,7 +108,8 @@ jobject EnumMapper::mapReposNotifyNodeAction(svn_node_action action)
jobject EnumMapper::mapReposNotifyAction(svn_repos_notify_action_t action)
{
// We're assuming a valid value for the C enum above
- return mapEnum(JAVA_PACKAGE"/ReposNotifyInformation$Action", (int) action);
+ return mapEnum(JAVA_PACKAGE"/ReposNotifyInformation$Action",
+ static_cast<int>(action));
}
/**
@@ -114,7 +118,8 @@ jobject EnumMapper::mapReposNotifyAction(svn_repos_notify_action_t action)
jobject EnumMapper::mapNodeKind(svn_node_kind_t nodeKind)
{
// We're assuming a valid value for the C enum above
- return mapEnum(JAVA_PACKAGE"/types/NodeKind", (int) nodeKind);
+ return mapEnum(JAVA_PACKAGE"/types/NodeKind",
+ static_cast<int>(nodeKind));
}
/**
@@ -123,7 +128,8 @@ jobject EnumMapper::mapNodeKind(svn_node_kind_t nodeKind)
jobject EnumMapper::mapNotifyLockState(svn_wc_notify_lock_state_t state)
{
// We're assuming a valid value for the C enum above
- return mapEnum(JAVA_PACKAGE"/ClientNotifyInformation$LockStatus", (int) state);
+ return mapEnum(JAVA_PACKAGE"/ClientNotifyInformation$LockStatus",
+ static_cast<int>(state));
}
/**
@@ -132,7 +138,8 @@ jobject EnumMapper::mapNotifyLockState(svn_wc_notify_lock_state_t state)
jobject EnumMapper::mapScheduleKind(svn_wc_schedule_t schedule)
{
// We're assuming a valid value for the C enum above
- return mapEnum(JAVA_PACKAGE"/types/Info$ScheduleKind", (int) schedule);
+ return mapEnum(JAVA_PACKAGE"/types/Info$ScheduleKind",
+ static_cast<int>(schedule));
}
/**
@@ -142,31 +149,36 @@ jobject EnumMapper::mapStatusKind(svn_wc_status_kind svnKind)
{
// We're assuming a valid value for the C enum above
// The offset here is +1
- return mapEnum(JAVA_PACKAGE"/types/Status$Kind", ((int) svnKind) - 1);
+ return mapEnum(JAVA_PACKAGE"/types/Status$Kind",
+ static_cast<int>(svnKind) - 1);
}
jobject EnumMapper::mapChecksumKind(svn_checksum_kind_t kind)
{
// We're assuming a valid value for the C enum above
- return mapEnum(JAVA_PACKAGE"/types/Checksum$Kind", (int) kind);
+ return mapEnum(JAVA_PACKAGE"/types/Checksum$Kind",
+ static_cast<int>(kind));
}
jobject EnumMapper::mapConflictKind(svn_wc_conflict_kind_t kind)
{
// We're assuming a valid value for the C enum above
- return mapEnum(JAVA_PACKAGE"/ConflictDescriptor$Kind", (int) kind);
+ return mapEnum(JAVA_PACKAGE"/ConflictDescriptor$Kind",
+ static_cast<int>(kind));
}
jobject EnumMapper::mapConflictAction(svn_wc_conflict_action_t action)
{
// We're assuming a valid value for the C enum above
- return mapEnum(JAVA_PACKAGE"/ConflictDescriptor$Action", (int) action);
+ return mapEnum(JAVA_PACKAGE"/ConflictDescriptor$Action",
+ static_cast<int>(action));
}
jobject EnumMapper::mapConflictReason(svn_wc_conflict_reason_t reason)
{
// We're assuming a valid value for the C enum above
- return mapEnum(JAVA_PACKAGE"/ConflictDescriptor$Reason", (int) reason);
+ return mapEnum(JAVA_PACKAGE"/ConflictDescriptor$Reason",
+ static_cast<int>(reason));
}
int EnumMapper::toMergeinfoLogKind(jobject jLogKind)
@@ -182,45 +194,47 @@ int EnumMapper::toLogLevel(jobject jLogLevel)
svn_depth_t EnumMapper::toDepth(jobject jdepth)
{
// The offset for depths is -2
- return (svn_depth_t) (getOrdinal(JAVA_PACKAGE"/types/Depth", jdepth) - 2);
+ return static_cast<svn_depth_t>(getOrdinal(JAVA_PACKAGE"/types/Depth", jdepth) - 2);
}
jobject EnumMapper::mapDepth(svn_depth_t depth)
{
// We're assuming a valid value for the C enum above
// The offset for depths is -2
- return mapEnum(JAVA_PACKAGE"/types/Depth", ((int) depth) + 2);
+ return mapEnum(JAVA_PACKAGE"/types/Depth", static_cast<int>(depth) + 2);
}
jobject EnumMapper::mapOperation(svn_wc_operation_t operation)
{
// We're assuming a valid value for the C enum above
- return mapEnum(JAVA_PACKAGE"/ConflictDescriptor$Operation", (int) operation);
+ return mapEnum(JAVA_PACKAGE"/ConflictDescriptor$Operation",
+ static_cast<int>(operation));
}
jobject EnumMapper::mapTristate(svn_tristate_t tristate)
{
// We're assuming a valid value for the C enum above
return mapEnum(JAVA_PACKAGE"/types/Tristate",
- (int) (tristate - svn_tristate_false));
+ static_cast<int>(tristate - svn_tristate_false));
}
svn_wc_conflict_choice_t EnumMapper::toConflictChoice(jobject jchoice)
{
- return (svn_wc_conflict_choice_t) getOrdinal(
- JAVA_PACKAGE"/ConflictResult$Choice", jchoice);
+ return static_cast<svn_wc_conflict_choice_t>
+ (getOrdinal(JAVA_PACKAGE"/ConflictResult$Choice", jchoice));
}
svn_opt_revision_kind EnumMapper::toRevisionKind(jobject jkind)
{
- return (svn_opt_revision_kind) getOrdinal(JAVA_PACKAGE"/types/Revision$Kind",
- jkind);
+ return static_cast<svn_opt_revision_kind>
+ (getOrdinal(JAVA_PACKAGE"/types/Revision$Kind", jkind));
}
jobject EnumMapper::mapSummarizeKind(svn_client_diff_summarize_kind_t sKind)
{
// We're assuming a valid value for the C enum above
- return mapEnum(JAVA_PACKAGE"/DiffSummary$DiffKind", (int) sKind);
+ return mapEnum(JAVA_PACKAGE"/DiffSummary$DiffKind",
+ static_cast<int>(sKind));
}
jobject EnumMapper::mapEnum(const char *clazzName, int index)
@@ -282,5 +296,5 @@ int EnumMapper::getOrdinal(const char *clazzName, jobject jenum)
POP_AND_RETURN(-1);
env->PopLocalFrame(NULL);
- return (int) jorder;
+ return static_cast<int>(jorder);
}
diff --git a/subversion/bindings/javahl/native/File.cpp b/subversion/bindings/javahl/native/File.cpp
index 7a56f71..76e92dd 100644
--- a/subversion/bindings/javahl/native/File.cpp
+++ b/subversion/bindings/javahl/native/File.cpp
@@ -82,7 +82,7 @@ const char *File::getAbsPath()
/* We don't remove the local ref for jabsolutePath here, because
JNIStringHolder expects that ref to be valid for the life of
the object, which in this case is allocated on the stack.
-
+
So we just "leak" the reference, and it will get cleaned up when
we eventually exit back to Java-land. */
env->DeleteLocalRef(clazz);
diff --git a/subversion/bindings/javahl/native/ImportFilterCallback.cpp b/subversion/bindings/javahl/native/ImportFilterCallback.cpp
new file mode 100644
index 0000000..33d7e8b
--- /dev/null
+++ b/subversion/bindings/javahl/native/ImportFilterCallback.cpp
@@ -0,0 +1,118 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ *
+ * @file ImportFilterCallback.cpp
+ * @brief Implementation of the class ImportFilterCallback
+ */
+
+#include "ImportFilterCallback.h"
+#include "EnumMapper.h"
+#include "CreateJ.h"
+#include "JNIUtil.h"
+#include "svn_time.h"
+
+/**
+ * Create a ImportFilterCallback object
+ * @param jcallback the Java callback object.
+ */
+ImportFilterCallback::ImportFilterCallback(jobject jcallback)
+{
+ m_callback = jcallback;
+}
+
+/**
+ * Destroy a ImportFilterCallback object
+ */
+ImportFilterCallback::~ImportFilterCallback()
+{
+ // The m_callback does not need to be destroyed, because it is the passed
+ // in parameter to the Java SVNClient.list method.
+}
+
+svn_error_t *
+ImportFilterCallback::callback(void *baton,
+ svn_boolean_t *filtered,
+ const char *local_abspath,
+ const svn_io_dirent2_t *dirent,
+ apr_pool_t *pool)
+{
+ if (baton)
+ return static_cast<ImportFilterCallback *>(baton)->doImportFilter(
+ filtered, local_abspath, dirent, pool);
+
+ return SVN_NO_ERROR;
+}
+
+/**
+ * Callback called for each directory entry.
+ */
+svn_error_t *
+ImportFilterCallback::doImportFilter(svn_boolean_t *filtered,
+ const char *local_abspath,
+ const svn_io_dirent2_t *dirent,
+ apr_pool_t *pool)
+{
+ JNIEnv *env = JNIUtil::getEnv();
+
+ // Create a local frame for our references
+ env->PushLocalFrame(LOCAL_FRAME_SIZE);
+ if (JNIUtil::isJavaExceptionThrown())
+ return SVN_NO_ERROR;
+
+ // The method id will not change during the time this library is
+ // loaded, so it can be cached.
+ static jmethodID mid = 0;
+ if (mid == 0)
+ {
+ jclass clazz = env->FindClass(JAVA_PACKAGE"/callback/ImportFilterCallback");
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN(SVN_NO_ERROR);
+
+ mid = env->GetMethodID(clazz, "filter",
+ "(Ljava/lang/String;"
+ "L"JAVA_PACKAGE"/types/NodeKind;Z)Z");
+ if (JNIUtil::isJavaExceptionThrown() || mid == 0)
+ POP_AND_RETURN(SVN_NO_ERROR);
+ }
+
+ // convert the parameters to their Java relatives
+ jstring jpath = JNIUtil::makeJString(local_abspath);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN(SVN_NO_ERROR);
+
+ jboolean jspecial = (dirent->special ? JNI_TRUE : JNI_FALSE);
+
+ jobject jkind = EnumMapper::mapNodeKind(dirent->kind);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN(SVN_NO_ERROR);
+
+ // call the Java method
+ jboolean jfilter = env->CallBooleanMethod(m_callback, mid, jpath, jkind,
+ jspecial);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN(SVN_NO_ERROR);
+
+ *filtered = jfilter ? TRUE : FALSE;
+
+ env->PopLocalFrame(NULL);
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/bindings/javahl/native/ImportFilterCallback.h b/subversion/bindings/javahl/native/ImportFilterCallback.h
new file mode 100644
index 0000000..d202aef
--- /dev/null
+++ b/subversion/bindings/javahl/native/ImportFilterCallback.h
@@ -0,0 +1,62 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ *
+ * @file ImportFilterCallback.h
+ * @brief Interface of the class ImportFilterCallback
+ */
+
+#ifndef IMPORT_FILTER_CALLBACK_H
+#define IMPORT_FILTER_CALLBACK_H
+
+#include <jni.h>
+#include "svn_client.h"
+
+/**
+ * This class holds a Java callback object, which will receive every
+ * directory entry for which the callback information is requested.
+ */
+class ImportFilterCallback
+{
+public:
+ ImportFilterCallback(jobject jcallback);
+ ~ImportFilterCallback();
+
+ static svn_error_t *callback(void *baton,
+ svn_boolean_t *filtered,
+ const char *local_abspath,
+ const svn_io_dirent2_t *dirent,
+ apr_pool_t *scratch_pool);
+
+protected:
+ svn_error_t *doImportFilter(svn_boolean_t *filtered,
+ const char *local_abspath,
+ const svn_io_dirent2_t *dirent,
+ apr_pool_t *pool);
+
+private:
+ /**
+ * This a local reference to the Java object.
+ */
+ jobject m_callback;
+};
+
+#endif // IMPORT_FILTER_CALLBACK_H
diff --git a/subversion/bindings/javahl/native/InfoCallback.cpp b/subversion/bindings/javahl/native/InfoCallback.cpp
index 6ac44d1..8a9e375 100644
--- a/subversion/bindings/javahl/native/InfoCallback.cpp
+++ b/subversion/bindings/javahl/native/InfoCallback.cpp
@@ -52,7 +52,7 @@ InfoCallback::callback(void *baton,
apr_pool_t *pool)
{
if (baton)
- return ((InfoCallback *)baton)->singleInfo(path, info, pool);
+ return static_cast<InfoCallback *>(baton)->singleInfo(path, info, pool);
return SVN_NO_ERROR;
}
diff --git a/subversion/bindings/javahl/native/InputStream.cpp b/subversion/bindings/javahl/native/InputStream.cpp
index 5e8b238..1c73ba2 100644
--- a/subversion/bindings/javahl/native/InputStream.cpp
+++ b/subversion/bindings/javahl/native/InputStream.cpp
@@ -70,7 +70,7 @@ svn_error_t *InputStream::read(void *baton, char *buffer, apr_size_t *len)
{
JNIEnv *env = JNIUtil::getEnv();
// An object of our class is passed in as the baton.
- InputStream *that = (InputStream*)baton;
+ InputStream *that = static_cast<InputStream *>(baton);
// The method id will not change during the time this library is
// loaded, so it can be cached.
@@ -89,8 +89,7 @@ svn_error_t *InputStream::read(void *baton, char *buffer, apr_size_t *len)
}
// Allocate a Java byte array to read the data.
- jbyteArray data = JNIUtil::makeJByteArray((const signed char*)buffer,
- *len);
+ jbyteArray data = JNIUtil::makeJByteArray(buffer, static_cast<int>(*len));
if (JNIUtil::isJavaExceptionThrown())
return SVN_NO_ERROR;
@@ -99,6 +98,14 @@ svn_error_t *InputStream::read(void *baton, char *buffer, apr_size_t *len)
if (JNIUtil::isJavaExceptionThrown())
return SVN_NO_ERROR;
+ /*
+ * Convert -1 from InputStream.read that means EOF, 0 which is subversion equivalent
+ */
+ if(jread == -1)
+ {
+ jread = 0;
+ }
+
// Put the Java byte array into a helper object to retrieve the
// data bytes.
JNIByteArray outdata(data, true);
@@ -107,7 +114,7 @@ svn_error_t *InputStream::read(void *baton, char *buffer, apr_size_t *len)
// Catch when the Java method tells us it read too much data.
if (jread > (jint) *len)
- jread = -1;
+ jread = 0;
// In the case of success copy the data back to the Subversion
// buffer.
@@ -130,7 +137,7 @@ svn_error_t *InputStream::close(void *baton)
JNIEnv *env = JNIUtil::getEnv();
// An object of our class is passed in as the baton
- InputStream *that = (InputStream*)baton;
+ InputStream *that = reinterpret_cast<InputStream*>(baton);
// The method id will not change during the time this library is
// loaded, so it can be cached.
diff --git a/subversion/bindings/javahl/native/JNICriticalSection.cpp b/subversion/bindings/javahl/native/JNICriticalSection.cpp
index c36349a..5efa2c5 100644
--- a/subversion/bindings/javahl/native/JNICriticalSection.cpp
+++ b/subversion/bindings/javahl/native/JNICriticalSection.cpp
@@ -39,7 +39,7 @@
JNICriticalSection::JNICriticalSection(JNIMutex &mutex)
{
m_mutex = &mutex;
- apr_status_t apr_err = apr_thread_mutex_lock (mutex.m_mutex);
+ apr_status_t apr_err = apr_thread_mutex_lock(mutex.m_mutex);
if (apr_err)
{
JNIUtil::handleAPRError(apr_err, "apr_thread_mutex_lock");
@@ -53,7 +53,7 @@ JNICriticalSection::JNICriticalSection(JNIMutex &mutex)
*/
JNICriticalSection::~JNICriticalSection()
{
- apr_status_t apr_err = apr_thread_mutex_unlock (m_mutex->m_mutex);
+ apr_status_t apr_err = apr_thread_mutex_unlock(m_mutex->m_mutex);
if (apr_err)
{
JNIUtil::handleAPRError(apr_err, "apr_thread_mutex_unlock");
diff --git a/subversion/bindings/javahl/native/JNIMutex.cpp b/subversion/bindings/javahl/native/JNIMutex.cpp
index d5bc4f3..e718b25 100644
--- a/subversion/bindings/javahl/native/JNIMutex.cpp
+++ b/subversion/bindings/javahl/native/JNIMutex.cpp
@@ -38,7 +38,7 @@
JNIMutex::JNIMutex(apr_pool_t *pool)
{
apr_status_t apr_err =
- apr_thread_mutex_create (&m_mutex, APR_THREAD_MUTEX_NESTED, pool);
+ apr_thread_mutex_create(&m_mutex, APR_THREAD_MUTEX_NESTED, pool);
if (apr_err)
JNIUtil::handleAPRError(apr_err, "apr_thread_mutex_create");
}
@@ -48,7 +48,7 @@ JNIMutex::JNIMutex(apr_pool_t *pool)
*/
JNIMutex::~JNIMutex()
{
- apr_status_t apr_err = apr_thread_mutex_destroy (m_mutex);
+ apr_status_t apr_err = apr_thread_mutex_destroy(m_mutex);
if (apr_err)
JNIUtil::handleAPRError(apr_err, "apr_thread_mutex_destroy");
}
diff --git a/subversion/bindings/javahl/native/JNIStackElement.cpp b/subversion/bindings/javahl/native/JNIStackElement.cpp
index 7c00109..2ca6c6e 100644
--- a/subversion/bindings/javahl/native/JNIStackElement.cpp
+++ b/subversion/bindings/javahl/native/JNIStackElement.cpp
@@ -58,20 +58,28 @@ JNIStackElement::JNIStackElement(JNIEnv *env, const char *clazz,
return;
}
- // This will call java.lang.Object.toString, even when it is
- // overriden.
- jobject oStr = env->CallNonvirtualObjectMethod(jthis, jlo, mid);
- if (JNIUtil::isJavaExceptionThrown())
- return;
-
- // Copy the result to a buffer.
- JNIStringHolder name(reinterpret_cast<jstring>(oStr));
*m_objectID = 0;
- strncat(m_objectID, name, JNIUtil::formatBufferSize -1);
+
+ if(jthis == NULL)
+ {
+ strcpy(m_objectID, "<static>");
+ }
+ else
+ {
+ // This will call java.lang.Object.toString, even when it is
+ // overriden.
+ jobject oStr = env->CallNonvirtualObjectMethod(jthis, jlo, mid);
+ if (JNIUtil::isJavaExceptionThrown())
+ return;
+
+ // Copy the result to a buffer.
+ JNIStringHolder name(reinterpret_cast<jstring>(oStr));
+ strncat(m_objectID, name, JNIUtil::formatBufferSize -1);
+ env->DeleteLocalRef(oStr);
+ }
// Release the Java string.
env->DeleteLocalRef(jlo);
- env->DeleteLocalRef(oStr);
// Remember the parameter for the exit of the method.
m_clazz = clazz;
diff --git a/subversion/bindings/javahl/native/JNIThreadData.cpp b/subversion/bindings/javahl/native/JNIThreadData.cpp
index d950e7a..e3ce334 100644
--- a/subversion/bindings/javahl/native/JNIThreadData.cpp
+++ b/subversion/bindings/javahl/native/JNIThreadData.cpp
@@ -124,7 +124,7 @@ void JNIThreadData::pushNewThreadData()
}
JNIThreadData *newData = new JNIThreadData();
newData->m_previous =data;
- apr_err = apr_threadkey_private_set (newData, g_key);
+ apr_err = apr_threadkey_private_set(newData, g_key);
if (apr_err)
{
JNIUtil::handleAPRError(apr_err, "apr_threadkey_private_set");
@@ -151,7 +151,7 @@ void JNIThreadData::popThreadData()
JNIThreadData *oldData = data->m_previous;
delete data;
- apr_err = apr_threadkey_private_set (oldData, g_key);
+ apr_err = apr_threadkey_private_set(oldData, g_key);
if (apr_err)
{
JNIUtil::handleAPRError(apr_err, "apr_threadkey_private_set");
diff --git a/subversion/bindings/javahl/native/JNIThreadData.h b/subversion/bindings/javahl/native/JNIThreadData.h
index 629b35d..55d4141 100644
--- a/subversion/bindings/javahl/native/JNIThreadData.h
+++ b/subversion/bindings/javahl/native/JNIThreadData.h
@@ -21,7 +21,7 @@
* @endcopyright
*
* @file JNIThreadData.h
- * @brief Interface of the class JNIData
+ * @brief Interface of the class JNIThreadData
*/
#ifndef JNITHREADDATA_H
diff --git a/subversion/bindings/javahl/native/JNIUtil.cpp b/subversion/bindings/javahl/native/JNIUtil.cpp
index 03168c3..e52e975 100644
--- a/subversion/bindings/javahl/native/JNIUtil.cpp
+++ b/subversion/bindings/javahl/native/JNIUtil.cpp
@@ -37,9 +37,13 @@
#include <apr_lib.h>
#include "svn_pools.h"
+#include "svn_fs.h"
+#include "svn_ra.h"
+#include "svn_utf.h"
#include "svn_wc.h"
#include "svn_dso.h"
#include "svn_path.h"
+#include "svn_cache_config.h"
#include <apr_file_info.h>
#include "svn_private_config.h"
#ifdef WIN32
@@ -175,6 +179,19 @@ bool JNIUtil::JNIGlobalInit(JNIEnv *env)
apr_allocator_max_free_set(allocator, 1);
}
+ svn_utf_initialize2(FALSE, g_pool); /* Optimize character conversions */
+ svn_fs_initialize(g_pool); /* Avoid some theoretical issues */
+ svn_ra_initialize(g_pool);
+
+ /* We shouldn't fill the JVMs memory with FS cache data unless explictly
+ requested. */
+ {
+ svn_cache_config_t settings = *svn_cache_config_get();
+ settings.cache_size = 0;
+ settings.file_handle_count = 0;
+ settings.single_threaded = FALSE;
+ svn_cache_config_set(&settings);
+ }
#ifdef ENABLE_NLS
#ifdef WIN32
@@ -194,7 +211,7 @@ bool JNIUtil::JNIGlobalInit(JNIEnv *env)
GetModuleFileNameW(moduleHandle, ucs2_path, inwords);
inwords = lstrlenW(ucs2_path);
outbytes = outlength = 3 * (inwords + 1);
- utf8_path = (char *)apr_palloc(pool, outlength);
+ utf8_path = reinterpret_cast<char *>(apr_palloc(pool, outlength));
apr_err = apr_conv_ucs2_to_utf8((const apr_wchar_t *) ucs2_path,
&inwords, utf8_path, &outbytes);
if (!apr_err && (inwords > 0 || outbytes == 0))
@@ -223,7 +240,7 @@ bool JNIUtil::JNIGlobalInit(JNIEnv *env)
/* See http://svn.apache.org/repos/asf/subversion/trunk/notes/asp-dot-net-hack.txt */
/* ### This code really only needs to be invoked by consumers of
### the libsvn_wc library, which basically means SVNClient. */
- if (getenv ("SVN_ASP_DOT_NET_HACK"))
+ if (getenv("SVN_ASP_DOT_NET_HACK"))
{
err = svn_wc_set_adm_dir("_svn", g_pool);
if (err)
@@ -240,6 +257,8 @@ bool JNIUtil::JNIGlobalInit(JNIEnv *env)
}
#endif
+ svn_error_set_malfunction_handler(svn_error_raise_on_malfunction);
+
// Build all mutexes.
g_finalizedObjectsMutex = new JNIMutex(g_pool);
if (isExceptionThrown())
@@ -376,15 +395,15 @@ JNIUtil::putErrorsInTrace(svn_error_t *err,
return;
char *tmp_path;
- char *path = svn_relpath_dirname(err->file, err->pool);
- while (tmp_path = strchr(path, '/'))
+ char *path = svn_dirent_dirname(err->file, err->pool);
+ while ((tmp_path = strchr(path, '/')))
*tmp_path = '.';
jstring jmethodName = makeJString(path);
if (isJavaExceptionThrown())
return;
- jstring jfileName = makeJString(svn_relpath_basename(err->file, err->pool));
+ jstring jfileName = makeJString(svn_dirent_basename(err->file, err->pool));
if (isJavaExceptionThrown())
return;
@@ -399,7 +418,7 @@ JNIUtil::putErrorsInTrace(svn_error_t *err,
env->DeleteLocalRef(jfileName);
}
-void JNIUtil::handleSVNError(svn_error_t *err)
+void JNIUtil::wrappedHandleSVNError(svn_error_t *err)
{
std::string msg;
assembleErrorMessage(svn_error_purge_tracing(err), 0, APR_SUCCESS, msg);
@@ -493,8 +512,14 @@ void JNIUtil::handleSVNError(svn_error_t *err)
if (isJavaExceptionThrown())
POP_AND_RETURN_NOTHING();
- jobjectArray jStackTrace = env->NewObjectArray(newStackTrace.size(), stClazz,
- NULL);
+ const jsize stSize = static_cast<jsize>(newStackTrace.size());
+ if (stSize != newStackTrace.size())
+ {
+ env->ThrowNew(env->FindClass("java.lang.ArithmeticException"),
+ "Overflow converting C size_t to JNI jsize");
+ POP_AND_RETURN_NOTHING();
+ }
+ jobjectArray jStackTrace = env->NewObjectArray(stSize, stClazz, NULL);
if (isJavaExceptionThrown())
POP_AND_RETURN_NOTHING();
@@ -521,7 +546,16 @@ void JNIUtil::handleSVNError(svn_error_t *err)
#endif
env->Throw(static_cast<jthrowable>(env->PopLocalFrame(nativeException)));
+}
+void JNIUtil::handleSVNError(svn_error_t *err)
+{
+ try {
+ wrappedHandleSVNError(err);
+ } catch (...) {
+ svn_error_clear(err);
+ throw;
+ }
svn_error_clear(err);
}
@@ -621,28 +655,42 @@ bool JNIUtil::isJavaExceptionThrown()
const char *
JNIUtil::thrownExceptionToCString(SVN::Pool &in_pool)
{
- const char *msg;
+ const char *msg = NULL;
JNIEnv *env = getEnv();
+ apr_pool_t *pool = in_pool.getPool();
if (env->ExceptionCheck())
{
jthrowable t = env->ExceptionOccurred();
- static jmethodID getMessage = 0;
- if (getMessage == 0)
+ jclass cls = env->GetObjectClass(t);
+
+ jstring jclass_name;
+ {
+ jmethodID mid = env->GetMethodID(cls, "getClass", "()Ljava/lang/Class;");
+ jobject clsobj = env->CallObjectMethod(t, mid);
+ jclass basecls = env->GetObjectClass(clsobj);
+ mid = env->GetMethodID(basecls, "getName", "()Ljava/lang/String;");
+ jclass_name = (jstring) env->CallObjectMethod(clsobj, mid);
+ }
+
+ jstring jmessage;
+ {
+ jmethodID mid = env->GetMethodID(cls, "getMessage",
+ "()Ljava/lang/String;");
+ jmessage = (jstring) env->CallObjectMethod(t, mid);
+ }
+
+ JNIStringHolder class_name(jclass_name);
+ if (jmessage)
{
- jclass clazz = env->FindClass("java/lang/Throwable");
- getMessage = env->GetMethodID(clazz, "getMessage",
- "(V)Ljava/lang/String;");
- env->DeleteLocalRef(clazz);
+ JNIStringHolder message(jmessage);
+ msg = apr_pstrcat(pool,
+ static_cast<const char*>(class_name), ": ",
+ static_cast<const char*>(message), NULL);
}
- jstring jmsg = (jstring) env->CallObjectMethod(t, getMessage);
- JNIStringHolder tmp(jmsg);
- msg = tmp.pstrdup(in_pool.getPool());
+ else
+ msg = class_name.pstrdup(pool);
// ### Conditionally add t.printStackTrace() to msg?
}
- else
- {
- msg = NULL;
- }
return msg;
}
@@ -776,7 +824,7 @@ jobject JNIUtil::createDate(apr_time_t time)
* @param data the character array
* @param length the number of characters in the array
*/
-jbyteArray JNIUtil::makeJByteArray(const signed char *data, int length)
+jbyteArray JNIUtil::makeJByteArray(const void *data, int length)
{
if (data == NULL)
{
@@ -808,6 +856,15 @@ jbyteArray JNIUtil::makeJByteArray(const signed char *data, int length)
}
/**
+ * Create a Java byte array from an svn_string_t.
+ * @param str the string
+ */
+jbyteArray JNIUtil::makeJByteArray(const svn_string_t *str)
+{
+ return JNIUtil::makeJByteArray(str->data, static_cast<int>(str->len));
+}
+
+/**
* Build the error message from the svn error into buffer. This
* method calls itselft recursively for all the chained errors
*
@@ -837,7 +894,21 @@ void JNIUtil::assembleErrorMessage(svn_error_t *err, int depth,
buffer.append(svn_strerror(err->apr_err, errbuf, sizeof(errbuf)));
/* Otherwise, this must be an APR error code. */
else
- buffer.append(apr_strerror(err->apr_err, errbuf, sizeof(errbuf)));
+ {
+ /* Messages coming from apr_strerror are in the native
+ encoding, it's a good idea to convert them to UTF-8. */
+ const char* utf8_message;
+ apr_strerror(err->apr_err, errbuf, sizeof(errbuf));
+ svn_error_t* utf8_err = svn_utf_cstring_to_utf8(
+ &utf8_message, errbuf, err->pool);
+ if (utf8_err)
+ {
+ /* Use fuzzy transliteration instead. */
+ svn_error_clear(utf8_err);
+ utf8_message = svn_utf_cstring_from_utf8_fuzzy(errbuf, err->pool);
+ }
+ buffer.append(utf8_message);
+ }
buffer.append("\n");
}
if (err->message)
diff --git a/subversion/bindings/javahl/native/JNIUtil.h b/subversion/bindings/javahl/native/JNIUtil.h
index f122556..d353984 100644
--- a/subversion/bindings/javahl/native/JNIUtil.h
+++ b/subversion/bindings/javahl/native/JNIUtil.h
@@ -41,6 +41,8 @@ struct svn_error_t;
#define JAVA_PACKAGE "org/apache/subversion/javahl"
+struct svn_string_t;
+
/**
* Class to hold a number of JNI related utility methods. No Objects
* of this class are ever created.
@@ -62,7 +64,8 @@ class JNIUtil
int aprErr = -1);
static void throwNullPointerException(const char *message);
- static jbyteArray makeJByteArray(const signed char *data, int length);
+ static jbyteArray makeJByteArray(const void *data, int length);
+ static jbyteArray makeJByteArray(const svn_string_t *str);
static jobject createDate(apr_time_t time);
static void logMessage(const char *message);
static int getLogLevel();
@@ -138,6 +141,7 @@ class JNIUtil
enum { noLog, errorLog, exceptionLog, entryLog } LogLevel;
private:
+ static void wrappedHandleSVNError(svn_error_t *err);
static void assembleErrorMessage(svn_error_t *err, int depth,
apr_status_t parent_apr_err,
std::string &buffer);
@@ -214,9 +218,9 @@ class JNIUtil
*/
#define SVN_JNI_NULL_PTR_EX(expr, str, ret_val) \
- if (expr == NULL) { \
+ if ((expr) == NULL) { \
JNIUtil::throwNullPointerException(str); \
- return ret_val ; \
+ return ret_val; \
}
/**
@@ -235,7 +239,7 @@ class JNIUtil
svn_error_t *svn_jni_err__temp = (expr); \
if (svn_jni_err__temp != SVN_NO_ERROR) { \
JNIUtil::handleSVNError(svn_jni_err__temp); \
- return ret_val ; \
+ return ret_val; \
} \
} while (0)
@@ -251,7 +255,7 @@ class JNIUtil
do \
{ \
env->PopLocalFrame(NULL); \
- return ret_val ; \
+ return ret_val; \
} \
while (0)
@@ -272,4 +276,12 @@ class JNIUtil
*/
#define POP_AND_RETURN_NULL POP_AND_RETURN(NULL)
+#define CPPADDR_NULL_PTR(expr, ret_val) \
+ do { \
+ if ((expr) == NULL) { \
+ JNIUtil::throwError(_("bad C++ this")); \
+ return ret_val; \
+ } \
+ } while (0)
+
#endif // JNIUTIL_H
diff --git a/subversion/bindings/javahl/native/ListCallback.cpp b/subversion/bindings/javahl/native/ListCallback.cpp
index 385bb1d..9759ff6 100644
--- a/subversion/bindings/javahl/native/ListCallback.cpp
+++ b/subversion/bindings/javahl/native/ListCallback.cpp
@@ -54,11 +54,13 @@ ListCallback::callback(void *baton,
const svn_dirent_t *dirent,
const svn_lock_t *lock,
const char *abs_path,
- apr_pool_t *pool)
+ const char * /* external_parent_url */,
+ const char * /* external_target */,
+ apr_pool_t *scratch_pool)
{
if (baton)
- return ((ListCallback *)baton)->doList(path, dirent, lock, abs_path,
- pool);
+ return static_cast<ListCallback *>(baton)->doList(
+ path, dirent, lock, abs_path, scratch_pool);
return SVN_NO_ERROR;
}
diff --git a/subversion/bindings/javahl/native/ListCallback.h b/subversion/bindings/javahl/native/ListCallback.h
index 57e17a9..f8049e4 100644
--- a/subversion/bindings/javahl/native/ListCallback.h
+++ b/subversion/bindings/javahl/native/ListCallback.h
@@ -45,7 +45,9 @@ public:
const svn_dirent_t *dirent,
const svn_lock_t *lock,
const char *abs_path,
- apr_pool_t *pool);
+ const char *external_parent_url,
+ const char *external_target,
+ apr_pool_t *scratch_pool);
protected:
svn_error_t *doList(const char *path,
diff --git a/subversion/bindings/javahl/native/LogMessageCallback.cpp b/subversion/bindings/javahl/native/LogMessageCallback.cpp
index cdd71fc..237aabf 100644
--- a/subversion/bindings/javahl/native/LogMessageCallback.cpp
+++ b/subversion/bindings/javahl/native/LogMessageCallback.cpp
@@ -57,7 +57,8 @@ LogMessageCallback::callback(void *baton,
apr_pool_t *pool)
{
if (baton)
- return ((LogMessageCallback *)baton)->singleMessage(log_entry, pool);
+ return static_cast<LogMessageCallback *>(baton)->singleMessage(
+ log_entry, pool);
return SVN_NO_ERROR;
}
@@ -101,9 +102,10 @@ LogMessageCallback::singleMessage(svn_log_entry_t *log_entry, apr_pool_t *pool)
hi;
hi = apr_hash_next(hi))
{
- const char *path = (const char *) svn__apr_hash_index_key(hi);
+ const char *path =
+ reinterpret_cast<const char *>(svn__apr_hash_index_key(hi));
svn_log_changed_path2_t *log_item =
- (svn_log_changed_path2_t *) svn__apr_hash_index_val(hi);
+ reinterpret_cast<svn_log_changed_path2_t *>(svn__apr_hash_index_val(hi));
jobject cp = CreateJ::ChangedPath(path, log_item);
diff --git a/subversion/bindings/javahl/native/OutputStream.cpp b/subversion/bindings/javahl/native/OutputStream.cpp
index ce80a95..9e85ec5 100644
--- a/subversion/bindings/javahl/native/OutputStream.cpp
+++ b/subversion/bindings/javahl/native/OutputStream.cpp
@@ -76,7 +76,7 @@ svn_error_t *OutputStream::write(void *baton, const char *buffer,
JNIEnv *env = JNIUtil::getEnv();
// An object of our class is passed in as the baton.
- OutputStream *that = (OutputStream*)baton;
+ OutputStream *that = static_cast<OutputStream *>(baton);
// The method id will not change during the time this library is
// loaded, so it can be cached.
@@ -95,8 +95,7 @@ svn_error_t *OutputStream::write(void *baton, const char *buffer,
}
// convert the data to a Java byte array
- jbyteArray data = JNIUtil::makeJByteArray((const signed char*)buffer,
- *len);
+ jbyteArray data = JNIUtil::makeJByteArray(buffer, static_cast<int>(*len));
if (JNIUtil::isJavaExceptionThrown())
return SVN_NO_ERROR;
@@ -120,7 +119,7 @@ svn_error_t *OutputStream::close(void *baton)
JNIEnv *env = JNIUtil::getEnv();
// An object of our class is passed in as the baton
- OutputStream *that = (OutputStream*)baton;
+ OutputStream *that = reinterpret_cast<OutputStream*>(baton);
// The method id will not change during the time this library is
// loaded, so it can be cached.
diff --git a/subversion/bindings/javahl/native/PatchCallback.cpp b/subversion/bindings/javahl/native/PatchCallback.cpp
index b958af6..0cff577 100644
--- a/subversion/bindings/javahl/native/PatchCallback.cpp
+++ b/subversion/bindings/javahl/native/PatchCallback.cpp
@@ -54,10 +54,9 @@ PatchCallback::callback(void *baton,
apr_pool_t *pool)
{
if (baton)
- return ((PatchCallback *)baton)->singlePatch(filtered,
- canon_path_from_patchfile,
- patch_abspath, reject_abspath,
- pool);
+ return static_cast<PatchCallback *>(baton)->singlePatch(
+ filtered, canon_path_from_patchfile, patch_abspath, reject_abspath,
+ pool);
return SVN_NO_ERROR;
}
diff --git a/subversion/bindings/javahl/native/Path.cpp b/subversion/bindings/javahl/native/Path.cpp
index 328f55b..b9c69ea 100644
--- a/subversion/bindings/javahl/native/Path.cpp
+++ b/subversion/bindings/javahl/native/Path.cpp
@@ -73,12 +73,12 @@ Path::init(const char *pi_path, SVN::Pool &in_pool)
{
if (*pi_path == 0)
{
- m_error_occured = NULL;
+ m_error_occurred = NULL;
m_path = "";
}
else
{
- m_error_occured = JNIUtil::preprocessPath(pi_path, in_pool.getPool());
+ m_error_occurred = JNIUtil::preprocessPath(pi_path, in_pool.getPool());
m_path = pi_path;
}
@@ -108,15 +108,15 @@ Path::c_str() const
Path&
Path::operator=(const Path &pi_path)
{
- m_error_occured = NULL;
+ m_error_occurred = NULL;
m_path = pi_path.m_path;
return *this;
}
- svn_error_t *Path::error_occured() const
+ svn_error_t *Path::error_occurred() const
{
- return m_error_occured;
+ return m_error_occurred;
}
jboolean Path::isValid(const char *p)
diff --git a/subversion/bindings/javahl/native/Path.h b/subversion/bindings/javahl/native/Path.h
index 2959a42..d23261e 100644
--- a/subversion/bindings/javahl/native/Path.h
+++ b/subversion/bindings/javahl/native/Path.h
@@ -41,7 +41,7 @@ class Path
// The path to be stored.
std::string m_path;
- svn_error_t *m_error_occured;
+ svn_error_t *m_error_occurred;
/**
* Initialize the class.
@@ -90,7 +90,7 @@ class Path
*/
const char *c_str() const;
- svn_error_t *error_occured() const;
+ svn_error_t *error_occurred() const;
/**
* Returns whether @a path is non-NULL and passes the @c
diff --git a/subversion/bindings/javahl/native/Pool.h b/subversion/bindings/javahl/native/Pool.h
index 4c7e2bc..a5b5f8e 100644
--- a/subversion/bindings/javahl/native/Pool.h
+++ b/subversion/bindings/javahl/native/Pool.h
@@ -39,7 +39,7 @@ namespace SVN {
{
public:
Pool();
- Pool(const Pool &parent_pool);
+ explicit Pool(const Pool &parent_pool);
Pool(apr_pool_t *parent_pool);
~Pool();
apr_pool_t *getPool() const;
diff --git a/subversion/bindings/javahl/native/Prompter.cpp b/subversion/bindings/javahl/native/Prompter.cpp
index 4ce8244..14bd312 100644
--- a/subversion/bindings/javahl/native/Prompter.cpp
+++ b/subversion/bindings/javahl/native/Prompter.cpp
@@ -427,9 +427,9 @@ svn_error_t *Prompter::simple_prompt(svn_auth_cred_simple_t **cred_p,
svn_boolean_t may_save,
apr_pool_t *pool)
{
- Prompter *that = (Prompter*)baton;
+ Prompter *that = static_cast<Prompter *>(baton);
svn_auth_cred_simple_t *ret =
- (svn_auth_cred_simple_t*)apr_pcalloc(pool, sizeof(*ret));
+ reinterpret_cast<svn_auth_cred_simple_t*>(apr_pcalloc(pool, sizeof(*ret)));
if (!that->prompt(realm, username, may_save ? true : false))
return svn_error_create(SVN_ERR_RA_NOT_AUTHORIZED, NULL,
_("User canceled dialog"));
@@ -460,9 +460,9 @@ svn_error_t *Prompter::username_prompt(svn_auth_cred_username_t **cred_p,
svn_boolean_t may_save,
apr_pool_t *pool)
{
- Prompter *that = (Prompter*)baton;
+ Prompter *that = static_cast<Prompter *>(baton);
svn_auth_cred_username_t *ret =
- (svn_auth_cred_username_t*)apr_pcalloc(pool, sizeof(*ret));
+ reinterpret_cast<svn_auth_cred_username_t*>(apr_pcalloc(pool, sizeof(*ret)));
const char *user = that->askQuestion(realm, _("Username: "), true,
may_save ? true : false);
if (user == NULL)
@@ -484,9 +484,9 @@ Prompter::ssl_server_trust_prompt(svn_auth_cred_ssl_server_trust_t **cred_p,
svn_boolean_t may_save,
apr_pool_t *pool)
{
- Prompter *that = (Prompter*)baton;
+ Prompter *that = static_cast<Prompter *>(baton);
svn_auth_cred_ssl_server_trust_t *ret =
- (svn_auth_cred_ssl_server_trust_t*)apr_pcalloc(pool, sizeof(*ret));
+ reinterpret_cast<svn_auth_cred_ssl_server_trust_t*>(apr_pcalloc(pool, sizeof(*ret)));
std::string question = _("Error validating server certificate for ");
question += realm;
@@ -550,9 +550,9 @@ Prompter::ssl_client_cert_prompt(svn_auth_cred_ssl_client_cert_t **cred_p,
svn_boolean_t may_save,
apr_pool_t *pool)
{
- Prompter *that = (Prompter*)baton;
+ Prompter *that = static_cast<Prompter *>(baton);
svn_auth_cred_ssl_client_cert_t *ret =
- (svn_auth_cred_ssl_client_cert_t*)apr_pcalloc(pool, sizeof(*ret));
+ reinterpret_cast<svn_auth_cred_ssl_client_cert_t*>(apr_pcalloc(pool, sizeof(*ret)));
const char *cert_file =
that->askQuestion(realm, _("client certificate filename: "), true,
may_save ? true : false);
@@ -572,9 +572,9 @@ Prompter::ssl_client_cert_pw_prompt(svn_auth_cred_ssl_client_cert_pw_t **cred_p,
svn_boolean_t may_save,
apr_pool_t *pool)
{
- Prompter *that = (Prompter*)baton;
+ Prompter *that = static_cast<Prompter *>(baton);
svn_auth_cred_ssl_client_cert_pw_t *ret =
- (svn_auth_cred_ssl_client_cert_pw_t*)apr_pcalloc(pool, sizeof(*ret));
+ reinterpret_cast<svn_auth_cred_ssl_client_cert_pw_t*>(apr_pcalloc(pool, sizeof(*ret)));
const char *info = that->askQuestion(realm,
_("client certificate passphrase: "),
false, may_save ? true : false);
@@ -593,7 +593,7 @@ Prompter::plaintext_prompt(svn_boolean_t *may_save_plaintext,
void *baton,
apr_pool_t *pool)
{
- Prompter *that = (Prompter *) baton;
+ Prompter *that = static_cast<Prompter *>(baton);
bool result = that->askYesNo(realmstring,
_("Store password unencrypted?"),
@@ -610,7 +610,7 @@ Prompter::plaintext_passphrase_prompt(svn_boolean_t *may_save_plaintext,
void *baton,
apr_pool_t *pool)
{
- Prompter *that = (Prompter *) baton;
+ Prompter *that = static_cast<Prompter *>(baton);
bool result = that->askYesNo(realmstring,
_("Store passphrase unencrypted?"),
diff --git a/subversion/bindings/javahl/native/ProplistCallback.cpp b/subversion/bindings/javahl/native/ProplistCallback.cpp
index a3bcee3..be46cf5 100644
--- a/subversion/bindings/javahl/native/ProplistCallback.cpp
+++ b/subversion/bindings/javahl/native/ProplistCallback.cpp
@@ -33,10 +33,10 @@
* Create a ProplistCallback object
* @param jcallback the Java callback object.
*/
-ProplistCallback::ProplistCallback(jobject jcallback)
-{
- m_callback = jcallback;
-}
+ProplistCallback::ProplistCallback(jobject jcallback, bool inherited)
+ : m_callback(jcallback),
+ m_inherited(inherited)
+{}
/**
* Destroy a ProplistCallback object
@@ -51,10 +51,18 @@ svn_error_t *
ProplistCallback::callback(void *baton,
const char *path,
apr_hash_t *prop_hash,
+ apr_array_header_t *inherited_props,
apr_pool_t *pool)
{
if (baton)
- return ((ProplistCallback *)baton)->singlePath(path, prop_hash, pool);
+ {
+ ProplistCallback *cb = static_cast<ProplistCallback *>(baton);
+
+ if (cb->inherited())
+ return cb->singlePath(path, prop_hash, inherited_props, pool);
+ else
+ return cb->singlePath(path, prop_hash, pool);
+ }
return SVN_NO_ERROR;
}
@@ -78,7 +86,7 @@ svn_error_t *ProplistCallback::singlePath(const char *path,
// The method id will not change during the time this library is
// loaded, so it can be cached.
- static jmethodID mid = 0;
+ static volatile jmethodID mid = 0;
if (mid == 0)
{
jclass clazz = env->FindClass(JAVA_PACKAGE"/callback/ProplistCallback");
@@ -108,3 +116,62 @@ svn_error_t *ProplistCallback::singlePath(const char *path,
return SVN_NO_ERROR;
}
+
+
+
+/**
+ * Callback called for a single path
+ * @param path the path name
+ * @param prop_hash the hash of properties on this path
+ * @param inherited_props list of inherited props
+ * @param pool memory pool for the use of this function
+ */
+svn_error_t *ProplistCallback::singlePath(
+ const char *path,
+ apr_hash_t *prop_hash,
+ apr_array_header_t *inherited_props,
+ apr_pool_t *pool)
+{
+ JNIEnv *env = JNIUtil::getEnv();
+
+ // Create a local frame for our references
+ env->PushLocalFrame(LOCAL_FRAME_SIZE);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
+
+ // The method id will not change during the time this library is
+ // loaded, so it can be cached.
+ static jmethodID mid = 0;
+ if (mid == 0)
+ {
+ jclass clazz = env->FindClass(JAVA_PACKAGE"/callback/InheritedProplistCallback");
+ if (JNIUtil::isJavaExceptionThrown())
+ return SVN_NO_ERROR;
+
+ mid = env->GetMethodID(clazz, "singlePath",
+ "(Ljava/lang/String;Ljava/util/Map;Ljava/util/Collection;)V");
+ if (JNIUtil::isJavaExceptionThrown() || mid == 0)
+ POP_AND_RETURN(SVN_NO_ERROR);
+ }
+
+ // convert the parameters to their Java relatives
+ jstring jpath = JNIUtil::makeJString(path);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN(SVN_NO_ERROR);
+
+ jobject jmap = CreateJ::PropertyMap(prop_hash);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN(SVN_NO_ERROR);
+
+ jobject jiprops = CreateJ::InheritedProps(inherited_props);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN(SVN_NO_ERROR);
+
+ // call the Java method
+ env->CallVoidMethod(m_callback, mid, jpath, jmap, jiprops);
+ // We return whether an exception was thrown or not.
+
+ env->PopLocalFrame(NULL);
+
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/bindings/javahl/native/ProplistCallback.h b/subversion/bindings/javahl/native/ProplistCallback.h
index 72209ef..09c8126 100644
--- a/subversion/bindings/javahl/native/ProplistCallback.h
+++ b/subversion/bindings/javahl/native/ProplistCallback.h
@@ -37,24 +37,33 @@
class ProplistCallback
{
public:
- ProplistCallback(jobject jcallback);
+ ProplistCallback(jobject jcallback, bool inherited);
~ProplistCallback();
static svn_error_t *callback(void *baton,
const char *path,
apr_hash_t *prop_hash,
+ apr_array_header_t *inherited_props,
apr_pool_t *pool);
+ bool inherited() const { return m_inherited; }
+
protected:
svn_error_t *singlePath(const char *path,
apr_hash_t *prop_hash,
apr_pool_t *pool);
+ svn_error_t *singlePath(const char *path,
+ apr_hash_t *prop_hash,
+ apr_array_header_t *inherited_props,
+ apr_pool_t *pool);
private:
/**
* This a local reference to the Java object.
*/
jobject m_callback;
+ bool m_inherited;
};
+
#endif // PROPLISTCALLBACK_H
diff --git a/subversion/bindings/javahl/native/ReposFreezeAction.cpp b/subversion/bindings/javahl/native/ReposFreezeAction.cpp
new file mode 100644
index 0000000..8c1cb7e
--- /dev/null
+++ b/subversion/bindings/javahl/native/ReposFreezeAction.cpp
@@ -0,0 +1,50 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ *
+ * @file ReposFreezeAction.h
+ * @brief Native mirror of the ReposFreezeAction callback interface
+ */
+
+#include "ReposFreezeAction.h"
+
+svn_error_t* ReposFreezeAction::callback(void* baton, apr_pool_t*)
+{
+ ReposFreezeAction* that = static_cast<ReposFreezeAction*>(baton);
+ return that->invoke();
+}
+
+svn_error_t* ReposFreezeAction::invoke()
+{
+ JNIEnv *const env = JNIUtil::getEnv();
+
+ static volatile jmethodID mid = 0;
+ if (!mid)
+ {
+ jclass cls = env->FindClass(JAVA_PACKAGE"/callback/ReposFreezeAction");
+ if (!JNIUtil::isJavaExceptionThrown())
+ mid = env->GetMethodID(cls, "invoke", "()V");
+ }
+
+ if (!JNIUtil::isJavaExceptionThrown())
+ env->CallVoidMethod(m_jaction, mid);
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/bindings/javahl/native/ReposFreezeAction.h b/subversion/bindings/javahl/native/ReposFreezeAction.h
new file mode 100644
index 0000000..59971ac
--- /dev/null
+++ b/subversion/bindings/javahl/native/ReposFreezeAction.h
@@ -0,0 +1,49 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ *
+ * @file ReposFreezeAction.h
+ * @brief Native mirror of the ReposFreezeAction callback interface
+ */
+
+#ifndef JAVAHL_REPOS_FREEZE_ACTION_H
+#define JAVAHL_REPOS_FREEZE_ACTION_H
+
+#include <apr_pools.h>
+#include "svn_error.h"
+#include "JNIUtil.h"
+
+class ReposFreezeAction
+{
+ public:
+ ReposFreezeAction(jobject jaction)
+ : m_jaction(jaction)
+ {}
+
+ static svn_error_t* callback(void* baton, apr_pool_t* pool);
+
+ private:
+ svn_error_t* invoke();
+ const jobject m_jaction;
+};
+
+
+#endif /* JAVAHL_REPOS_FREEZE_ACTION_H */
diff --git a/subversion/bindings/javahl/native/ReposNotifyCallback.cpp b/subversion/bindings/javahl/native/ReposNotifyCallback.cpp
index 2b3194f..a716653 100644
--- a/subversion/bindings/javahl/native/ReposNotifyCallback.cpp
+++ b/subversion/bindings/javahl/native/ReposNotifyCallback.cpp
@@ -49,7 +49,7 @@ ReposNotifyCallback::notify(void *baton, const svn_repos_notify_t *notify,
apr_pool_t *pool)
{
if (baton)
- ((ReposNotifyCallback *)baton)->onNotify(notify, pool);
+ static_cast<ReposNotifyCallback *>(baton)->onNotify(notify, pool);
}
/**
diff --git a/subversion/bindings/javahl/native/Revision.cpp b/subversion/bindings/javahl/native/Revision.cpp
index 32eaa47..7ba2094 100644
--- a/subversion/bindings/javahl/native/Revision.cpp
+++ b/subversion/bindings/javahl/native/Revision.cpp
@@ -31,7 +31,7 @@
const svn_opt_revision_kind Revision::START = svn_opt_revision_unspecified;
const svn_opt_revision_kind Revision::HEAD = svn_opt_revision_head;
-Revision::Revision (const svn_opt_revision_kind kind)
+Revision::Revision(const svn_opt_revision_kind kind)
{
m_revision.kind = kind;
m_revision.value.number = 0;
@@ -149,7 +149,7 @@ Revision::~Revision()
{
}
-const svn_opt_revision_t *Revision::revision () const
+const svn_opt_revision_t *Revision::revision() const
{
return &m_revision;
}
diff --git a/subversion/bindings/javahl/native/RevisionRange.cpp b/subversion/bindings/javahl/native/RevisionRange.cpp
index b73d5a4..677c7d5 100644
--- a/subversion/bindings/javahl/native/RevisionRange.cpp
+++ b/subversion/bindings/javahl/native/RevisionRange.cpp
@@ -20,7 +20,7 @@
* ====================================================================
* @endcopyright
*
- * @file RevisionRanges.cpp
+ * @file RevisionRange.cpp
* @brief Implementation of the class RevisionRange.
*/
@@ -87,7 +87,8 @@ const svn_opt_revision_range_t *RevisionRange::toRange(SVN::Pool &pool) const
return NULL;
svn_opt_revision_range_t *range =
- (svn_opt_revision_range_t *) apr_palloc(pool.getPool(), sizeof(*range));
+ reinterpret_cast<svn_opt_revision_range_t *>
+ (apr_palloc(pool.getPool(), sizeof(*range)));
range->start = *startRevision.revision();
if (JNIUtil::isExceptionThrown())
diff --git a/subversion/bindings/javahl/native/RevpropTable.cpp b/subversion/bindings/javahl/native/RevpropTable.cpp
index 2f1d7b9..5da74dd 100644
--- a/subversion/bindings/javahl/native/RevpropTable.cpp
+++ b/subversion/bindings/javahl/native/RevpropTable.cpp
@@ -77,7 +77,7 @@ RevpropTable::RevpropTable(jobject jrevpropTable)
if (jrevpropTable != NULL)
{
- static jmethodID keySet = 0, toArray = 0, get = 0;
+ static jmethodID keySet = 0, get = 0;
JNIEnv *env = JNIUtil::getEnv();
jclass mapClazz = env->FindClass("java/util/Map");
@@ -120,8 +120,8 @@ RevpropTable::RevpropTable(jobject jrevpropTable)
if (JNIUtil::isExceptionThrown())
return;
- m_revprops[std::string((const char *)propname)]
- = std::string((const char *)propval);
+ m_revprops[std::string(static_cast<const char *>(propname))]
+ = std::string(static_cast<const char *>(propval));
JNIUtil::getEnv()->DeleteLocalRef(jpropval);
}
diff --git a/subversion/bindings/javahl/native/SVNBase.cpp b/subversion/bindings/javahl/native/SVNBase.cpp
index d8e7310..bbabc11 100644
--- a/subversion/bindings/javahl/native/SVNBase.cpp
+++ b/subversion/bindings/javahl/native/SVNBase.cpp
@@ -30,7 +30,6 @@
SVNBase::SVNBase()
: pool(JNIUtil::getPool())
{
- jthis = NULL;
}
SVNBase::~SVNBase()
@@ -58,17 +57,6 @@ jlong SVNBase::findCppAddrForJObject(jobject jthis, jfieldID *fid,
if (JNIUtil::isJavaExceptionThrown())
return 0;
- if (cppAddr)
- {
- /* jthis is not guaranteed to be the same between JNI invocations, so
- we do a little dance here and store the updated version in our
- object for this invocation.
-
- findCppAddrForJObject() is, by necessity, called before any other
- methods on the C++ object, so by doing this we can guarantee a
- valid jthis pointer for subsequent uses. */
- (reinterpret_cast<SVNBase *> (cppAddr))->jthis = jthis;
- }
return cppAddr;
}
}
@@ -82,17 +70,15 @@ void SVNBase::finalize()
JNIUtil::enqueueForDeletion(this);
}
-void SVNBase::dispose(jfieldID *fid, const char *className)
+void SVNBase::dispose(jobject jthis, jfieldID *fid, const char *className)
{
- jobject my_jthis = this->jthis;
-
delete this;
JNIEnv *env = JNIUtil::getEnv();
SVNBase::findCppAddrFieldID(fid, className, env);
if (*fid == 0)
return;
- env->SetLongField(my_jthis, *fid, 0);
+ env->SetLongField(jthis, *fid, 0);
if (JNIUtil::isJavaExceptionThrown())
return;
}
diff --git a/subversion/bindings/javahl/native/SVNBase.h b/subversion/bindings/javahl/native/SVNBase.h
index 18ce43a..f47e3c0 100644
--- a/subversion/bindings/javahl/native/SVNBase.h
+++ b/subversion/bindings/javahl/native/SVNBase.h
@@ -49,7 +49,7 @@ class SVNBase
*
* @since 1.4.0
*/
- virtual void dispose() = 0;
+ virtual void dispose(jobject jthis) = 0;
/**
* This method should never be called, as @c dispose() should be
@@ -80,13 +80,7 @@ class SVNBase
*
* @since 1.4.0
*/
- void dispose(jfieldID *fid, const char *className);
-
- /**
- * A pointer to the parent java object. This is not valid across JNI
- * method invocations, and so should be set in each one.
- */
- jobject jthis;
+ void dispose(jobject jthis, jfieldID *fid, const char *className);
private:
/**
diff --git a/subversion/bindings/javahl/native/SVNClient.cpp b/subversion/bindings/javahl/native/SVNClient.cpp
index 7cc31c2..4945cc7 100644
--- a/subversion/bindings/javahl/native/SVNClient.cpp
+++ b/subversion/bindings/javahl/native/SVNClient.cpp
@@ -35,6 +35,7 @@
#include "Revision.h"
#include "OutputStream.h"
#include "RevisionRange.h"
+#include "VersionExtended.h"
#include "BlameCallback.h"
#include "ProplistCallback.h"
#include "LogMessageCallback.h"
@@ -44,11 +45,13 @@
#include "StatusCallback.h"
#include "ChangelistCallback.h"
#include "ListCallback.h"
+#include "ImportFilterCallback.h"
#include "JNIByteArray.h"
#include "CommitMessage.h"
#include "EnumMapper.h"
#include "StringArray.h"
#include "RevpropTable.h"
+#include "DiffOptions.h"
#include "CreateJ.h"
#include "svn_auth.h"
#include "svn_dso.h"
@@ -70,7 +73,7 @@
SVNClient::SVNClient(jobject jthis_in)
- : context(jthis_in, pool), m_lastPath("", pool)
+ : m_lastPath("", pool), context(jthis_in, pool)
{
}
@@ -86,10 +89,45 @@ SVNClient *SVNClient::getCppObject(jobject jthis)
return (cppAddr == 0 ? NULL : reinterpret_cast<SVNClient *>(cppAddr));
}
-void SVNClient::dispose()
+void SVNClient::dispose(jobject jthis)
{
static jfieldID fid = 0;
- SVNBase::dispose(&fid, JAVA_PACKAGE"/SVNClient");
+ SVNBase::dispose(jthis, &fid, JAVA_PACKAGE"/SVNClient");
+}
+
+jobject SVNClient::getVersionExtended(bool verbose)
+{
+ JNIEnv *const env = JNIUtil::getEnv();
+
+ jclass clazz = env->FindClass(JAVA_PACKAGE"/types/VersionExtended");
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
+
+ static volatile jmethodID ctor = 0;
+ if (!ctor)
+ {
+ ctor = env->GetMethodID(clazz, "<init>", "()V");
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
+ }
+
+ static volatile jfieldID fid = 0;
+ if (!fid)
+ {
+ fid = env->GetFieldID(clazz, "cppAddr", "J");
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
+ }
+
+ jobject j_ext_info = env->NewObject(clazz, ctor);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
+
+ VersionExtended *vx = new VersionExtended(verbose);
+ env->SetLongField(j_ext_info, fid, vx->getCppAddr());
+
+ env->DeleteLocalRef(clazz);
+ return j_ext_info;
}
jstring SVNClient::getAdminDirectoryName()
@@ -130,14 +168,15 @@ void SVNClient::list(const char *url, Revision &revision,
SVN_JNI_NULL_PTR_EX(url, "path or url", );
Path urlPath(url, subPool);
- SVN_JNI_ERR(urlPath.error_occured(), );
+ SVN_JNI_ERR(urlPath.error_occurred(), );
- SVN_JNI_ERR(svn_client_list2(urlPath.c_str(),
+ SVN_JNI_ERR(svn_client_list3(urlPath.c_str(),
pegRevision.revision(),
revision.revision(),
depth,
direntFields,
fetchLocks,
+ FALSE, // include_externals
ListCallback::callback,
callback,
ctx, subPool.getPool()), );
@@ -161,44 +200,32 @@ SVNClient::status(const char *path, svn_depth_t depth,
callback->setWcCtx(ctx->wc_ctx);
Path checkedPath(path, subPool);
- SVN_JNI_ERR(checkedPath.error_occured(), );
+ SVN_JNI_ERR(checkedPath.error_occurred(), );
rev.kind = svn_opt_revision_unspecified;
SVN_JNI_ERR(svn_client_status5(&youngest, ctx, checkedPath.c_str(),
&rev,
depth,
- getAll, onServer, noIgnore, FALSE,
- ignoreExternals,
+ getAll, onServer, noIgnore, ignoreExternals,
+ FALSE,
changelists.array(subPool),
StatusCallback::callback, callback,
subPool.getPool()), );
}
-void SVNClient::logMessages(const char *path, Revision &pegRevision,
- std::vector<RevisionRange> &logRanges,
- bool stopOnCopy, bool discoverPaths,
- bool includeMergedRevisions, StringArray &revProps,
- long limit, LogMessageCallback *callback)
+/* Convert a vector of revision ranges to an APR array of same. */
+static apr_array_header_t *
+rev_range_vector_to_apr_array(std::vector<RevisionRange> &revRanges,
+ SVN::Pool &subPool)
{
- SVN::Pool subPool(pool);
-
- SVN_JNI_NULL_PTR_EX(path, "path", );
-
- svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
- if (ctx == NULL)
- return;
-
- Targets target(path, subPool);
- const apr_array_header_t *targets = target.array(subPool);
- SVN_JNI_ERR(target.error_occured(), );
-
apr_array_header_t *ranges =
- apr_array_make(subPool.getPool(), logRanges.size(),
- sizeof(svn_opt_revision_range_t *));
+ apr_array_make(subPool.getPool(),
+ static_cast<int>(revRanges.size()),
+ sizeof(svn_opt_revision_range_t *));
std::vector<RevisionRange>::const_iterator it;
- for (it = logRanges.begin(); it != logRanges.end(); ++it)
+ for (it = revRanges.begin(); it != revRanges.end(); ++it)
{
if (it->toRange(subPool)->start.kind
== svn_opt_revision_unspecified
@@ -206,8 +233,8 @@ void SVNClient::logMessages(const char *path, Revision &pegRevision,
== svn_opt_revision_unspecified)
{
svn_opt_revision_range_t *range =
- (svn_opt_revision_range_t *)apr_pcalloc(subPool.getPool(),
- sizeof(*range));
+ reinterpret_cast<svn_opt_revision_range_t *>
+ (apr_pcalloc(subPool.getPool(), sizeof(*range)));
range->start.kind = svn_opt_revision_number;
range->start.value.number = 1;
range->end.kind = svn_opt_revision_head;
@@ -219,8 +246,33 @@ void SVNClient::logMessages(const char *path, Revision &pegRevision,
it->toRange(subPool);
}
if (JNIUtil::isExceptionThrown())
- return;
+ return NULL;
}
+ return ranges;
+}
+
+void SVNClient::logMessages(const char *path, Revision &pegRevision,
+ std::vector<RevisionRange> &logRanges,
+ bool stopOnCopy, bool discoverPaths,
+ bool includeMergedRevisions, StringArray &revProps,
+ long limit, LogMessageCallback *callback)
+{
+ SVN::Pool subPool(pool);
+
+ SVN_JNI_NULL_PTR_EX(path, "path", );
+
+ svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
+ if (ctx == NULL)
+ return;
+
+ Targets target(path, subPool);
+ const apr_array_header_t *targets = target.array(subPool);
+ SVN_JNI_ERR(target.error_occurred(), );
+
+ apr_array_header_t *ranges =
+ rev_range_vector_to_apr_array(logRanges, subPool);
+ if (JNIUtil::isExceptionThrown())
+ return;
SVN_JNI_ERR(svn_client_log5(targets, pegRevision.revision(), ranges,
limit, discoverPaths, stopOnCopy,
@@ -242,8 +294,8 @@ jlong SVNClient::checkout(const char *moduleName, const char *destPath,
Path url(moduleName, subPool);
Path path(destPath, subPool);
- SVN_JNI_ERR(url.error_occured(), -1);
- SVN_JNI_ERR(path.error_occured(), -1);
+ SVN_JNI_ERR(url.error_occurred(), -1);
+ SVN_JNI_ERR(path.error_occurred(), -1);
svn_revnum_t rev;
svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
@@ -274,7 +326,7 @@ void SVNClient::remove(Targets &targets, CommitMessage *message, bool force,
return;
const apr_array_header_t *targets2 = targets.array(subPool);
- SVN_JNI_ERR(targets.error_occured(), );
+ SVN_JNI_ERR(targets.error_occurred(), );
SVN_JNI_ERR(svn_client_delete4(targets2, force, keep_local,
revprops.hash(subPool),
@@ -295,14 +347,15 @@ void SVNClient::revert(const char *path, svn_depth_t depth,
Targets target(path, subPool);
const apr_array_header_t *targets = target.array(subPool);
- SVN_JNI_ERR(target.error_occured(), );
+ SVN_JNI_ERR(target.error_occurred(), );
SVN_JNI_ERR(svn_client_revert2(targets, depth,
changelists.array(subPool), ctx,
subPool.getPool()), );
}
void SVNClient::add(const char *path,
- svn_depth_t depth, bool force, bool no_ignore,
+ svn_depth_t depth, bool force,
+ bool no_ignore, bool no_autoprops,
bool add_parents)
{
SVN::Pool subPool(pool);
@@ -310,13 +363,13 @@ void SVNClient::add(const char *path,
SVN_JNI_NULL_PTR_EX(path, "path", );
Path intPath(path, subPool);
- SVN_JNI_ERR(intPath.error_occured(), );
+ SVN_JNI_ERR(intPath.error_occurred(), );
svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
if (ctx == NULL)
return;
- SVN_JNI_ERR(svn_client_add4(intPath.c_str(), depth, force,
- no_ignore, add_parents, ctx,
+ SVN_JNI_ERR(svn_client_add5(intPath.c_str(), depth, force,
+ no_ignore, no_autoprops, add_parents, ctx,
subPool.getPool()), );
}
@@ -333,7 +386,7 @@ jlongArray SVNClient::update(Targets &targets, Revision &revision,
return NULL;
const apr_array_header_t *array = targets.array(subPool);
- SVN_JNI_ERR(targets.error_occured(), NULL);
+ SVN_JNI_ERR(targets.error_occurred(), NULL);
SVN_JNI_ERR(svn_client_update4(&revs, array,
revision.revision(),
depth,
@@ -369,13 +422,16 @@ void SVNClient::commit(Targets &targets, CommitMessage *message,
{
SVN::Pool subPool(pool);
const apr_array_header_t *targets2 = targets.array(subPool);
- SVN_JNI_ERR(targets.error_occured(), );
+ SVN_JNI_ERR(targets.error_occurred(), );
svn_client_ctx_t *ctx = context.getContext(message, subPool);
if (ctx == NULL)
return;
- SVN_JNI_ERR(svn_client_commit5(targets2, depth,
- noUnlock, keepChangelist, TRUE,
+ SVN_JNI_ERR(svn_client_commit6(targets2, depth,
+ noUnlock, keepChangelist,
+ TRUE,
+ FALSE, // include_file_externals
+ FALSE, // include_dir_externals
changelists.array(subPool),
revprops.hash(subPool),
CommitCallback::callback, callback,
@@ -399,7 +455,7 @@ void SVNClient::copy(CopySources &copySources, const char *destPath,
}
SVN_JNI_NULL_PTR_EX(destPath, "destPath", );
Path destinationPath(destPath, subPool);
- SVN_JNI_ERR(destinationPath.error_occured(), );
+ SVN_JNI_ERR(destinationPath.error_occurred(), );
svn_client_ctx_t *ctx = context.getContext(message, subPool);
if (ctx == NULL)
@@ -414,24 +470,27 @@ void SVNClient::copy(CopySources &copySources, const char *destPath,
void SVNClient::move(Targets &srcPaths, const char *destPath,
CommitMessage *message, bool force, bool moveAsChild,
- bool makeParents, RevpropTable &revprops,
- CommitCallback *callback)
+ bool makeParents, bool metadataOnly, bool allowMixRev,
+ RevpropTable &revprops, CommitCallback *callback)
{
SVN::Pool subPool(pool);
const apr_array_header_t *srcs = srcPaths.array(subPool);
- SVN_JNI_ERR(srcPaths.error_occured(), );
+ SVN_JNI_ERR(srcPaths.error_occurred(), );
SVN_JNI_NULL_PTR_EX(destPath, "destPath", );
Path destinationPath(destPath, subPool);
- SVN_JNI_ERR(destinationPath.error_occured(), );
+ SVN_JNI_ERR(destinationPath.error_occurred(), );
svn_client_ctx_t *ctx = context.getContext(message, subPool);
if (ctx == NULL)
return;
- SVN_JNI_ERR(svn_client_move6((apr_array_header_t *) srcs,
+ SVN_JNI_ERR(svn_client_move7((apr_array_header_t *) srcs,
destinationPath.c_str(), moveAsChild,
- makeParents, revprops.hash(subPool),
+ makeParents,
+ allowMixRev,
+ metadataOnly,
+ revprops.hash(subPool),
CommitCallback::callback, callback, ctx,
subPool.getPool()), );
}
@@ -446,7 +505,7 @@ void SVNClient::mkdir(Targets &targets, CommitMessage *message,
return;
const apr_array_header_t *targets2 = targets.array(subPool);
- SVN_JNI_ERR(targets.error_occured(), );
+ SVN_JNI_ERR(targets.error_occurred(), );
SVN_JNI_ERR(svn_client_mkdir4(targets2, makeParents,
revprops.hash(subPool),
@@ -459,7 +518,7 @@ void SVNClient::cleanup(const char *path)
SVN::Pool subPool(pool);
SVN_JNI_NULL_PTR_EX(path, "path", );
Path intPath(path, subPool);
- SVN_JNI_ERR(intPath.error_occured(), );
+ SVN_JNI_ERR(intPath.error_occurred(), );
svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
if (ctx == NULL)
@@ -474,7 +533,7 @@ void SVNClient::resolve(const char *path, svn_depth_t depth,
SVN::Pool subPool(pool);
SVN_JNI_NULL_PTR_EX(path, "path", );
Path intPath(path, subPool);
- SVN_JNI_ERR(intPath.error_occured(), );
+ SVN_JNI_ERR(intPath.error_occurred(), );
svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
if (ctx == NULL)
return;
@@ -492,9 +551,9 @@ jlong SVNClient::doExport(const char *srcPath, const char *destPath,
SVN_JNI_NULL_PTR_EX(srcPath, "srcPath", -1);
SVN_JNI_NULL_PTR_EX(destPath, "destPath", -1);
Path sourcePath(srcPath, subPool);
- SVN_JNI_ERR(sourcePath.error_occured(), -1);
+ SVN_JNI_ERR(sourcePath.error_occurred(), -1);
Path destinationPath(destPath, subPool);
- SVN_JNI_ERR(destinationPath.error_occured(), -1);
+ SVN_JNI_ERR(destinationPath.error_occurred(), -1);
svn_revnum_t rev;
svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
if (ctx == NULL)
@@ -525,9 +584,9 @@ jlong SVNClient::doSwitch(const char *path, const char *url,
SVN_JNI_NULL_PTR_EX(path, "path", -1);
SVN_JNI_NULL_PTR_EX(url, "url", -1);
Path intUrl(url, subPool);
- SVN_JNI_ERR(intUrl.error_occured(), -1);
+ SVN_JNI_ERR(intUrl.error_occurred(), -1);
Path intPath(path, subPool);
- SVN_JNI_ERR(intPath.error_occured(), -1);
+ SVN_JNI_ERR(intPath.error_occurred(), -1);
svn_revnum_t rev;
svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
@@ -552,25 +611,29 @@ jlong SVNClient::doSwitch(const char *path, const char *url,
void SVNClient::doImport(const char *path, const char *url,
CommitMessage *message, svn_depth_t depth,
- bool noIgnore, bool ignoreUnknownNodeTypes,
- RevpropTable &revprops, CommitCallback *callback)
+ bool noIgnore, bool noAutoProps,
+ bool ignoreUnknownNodeTypes,
+ RevpropTable &revprops,
+ ImportFilterCallback *ifCallback,
+ CommitCallback *commitCallback)
{
SVN::Pool subPool(pool);
SVN_JNI_NULL_PTR_EX(path, "path", );
SVN_JNI_NULL_PTR_EX(url, "url", );
Path intPath(path, subPool);
- SVN_JNI_ERR(intPath.error_occured(), );
+ SVN_JNI_ERR(intPath.error_occurred(), );
Path intUrl(url, subPool);
- SVN_JNI_ERR(intUrl.error_occured(), );
+ SVN_JNI_ERR(intUrl.error_occurred(), );
svn_client_ctx_t *ctx = context.getContext(message, subPool);
if (ctx == NULL)
return;
- SVN_JNI_ERR(svn_client_import4(intPath.c_str(), intUrl.c_str(), depth,
- noIgnore, ignoreUnknownNodeTypes,
+ SVN_JNI_ERR(svn_client_import5(intPath.c_str(), intUrl.c_str(), depth,
+ noIgnore, noAutoProps, ignoreUnknownNodeTypes,
revprops.hash(subPool),
- CommitCallback::callback, callback,
+ ImportFilterCallback::callback, ifCallback,
+ CommitCallback::callback, commitCallback,
ctx, subPool.getPool()), );
}
@@ -593,87 +656,68 @@ SVNClient::suggestMergeSources(const char *path, Revision &pegRevision)
void SVNClient::merge(const char *path1, Revision &revision1,
const char *path2, Revision &revision2,
- const char *localPath, bool force, svn_depth_t depth,
- bool ignoreAncestry, bool dryRun, bool recordOnly)
+ const char *localPath, bool forceDelete, svn_depth_t depth,
+ bool ignoreMergeinfo, bool diffIgnoreAncestry,
+ bool dryRun, bool recordOnly)
{
SVN::Pool subPool(pool);
SVN_JNI_NULL_PTR_EX(path1, "path1", );
SVN_JNI_NULL_PTR_EX(path2, "path2", );
SVN_JNI_NULL_PTR_EX(localPath, "localPath", );
Path intLocalPath(localPath, subPool);
- SVN_JNI_ERR(intLocalPath.error_occured(), );
+ SVN_JNI_ERR(intLocalPath.error_occurred(), );
Path srcPath1(path1, subPool);
- SVN_JNI_ERR(srcPath1.error_occured(), );
+ SVN_JNI_ERR(srcPath1.error_occurred(), );
Path srcPath2(path2, subPool);
- SVN_JNI_ERR(srcPath2.error_occured(), );
+ SVN_JNI_ERR(srcPath2.error_occurred(), );
svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
if (ctx == NULL)
return;
- SVN_JNI_ERR(svn_client_merge4(srcPath1.c_str(), revision1.revision(),
+ SVN_JNI_ERR(svn_client_merge5(srcPath1.c_str(), revision1.revision(),
srcPath2.c_str(), revision2.revision(),
intLocalPath.c_str(),
depth,
- ignoreAncestry, force, recordOnly, dryRun,
+ ignoreMergeinfo, diffIgnoreAncestry,
+ forceDelete, recordOnly, dryRun,
TRUE, NULL, ctx, subPool.getPool()), );
}
void SVNClient::merge(const char *path, Revision &pegRevision,
- std::vector<RevisionRange> &rangesToMerge,
- const char *localPath, bool force, svn_depth_t depth,
- bool ignoreAncestry, bool dryRun, bool recordOnly)
+ std::vector<RevisionRange> *rangesToMerge,
+ const char *localPath, bool forceDelete, svn_depth_t depth,
+ bool ignoreMergeinfo, bool diffIgnoreAncestry,
+ bool dryRun, bool recordOnly)
{
SVN::Pool subPool(pool);
SVN_JNI_NULL_PTR_EX(path, "path", );
SVN_JNI_NULL_PTR_EX(localPath, "localPath", );
Path intLocalPath(localPath, subPool);
- SVN_JNI_ERR(intLocalPath.error_occured(), );
+ SVN_JNI_ERR(intLocalPath.error_occurred(), );
Path srcPath(path, subPool);
- SVN_JNI_ERR(srcPath.error_occured(), );
+ SVN_JNI_ERR(srcPath.error_occurred(), );
svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
if (ctx == NULL)
return;
apr_array_header_t *ranges =
- apr_array_make(subPool.getPool(), rangesToMerge.size(),
- sizeof(const svn_opt_revision_range_t *));
-
- std::vector<RevisionRange>::const_iterator it;
- for (it = rangesToMerge.begin(); it != rangesToMerge.end(); ++it)
- {
- if (it->toRange(subPool)->start.kind
- == svn_opt_revision_unspecified
- && it->toRange(subPool)->end.kind
- == svn_opt_revision_unspecified)
- {
- svn_opt_revision_range_t *range =
- (svn_opt_revision_range_t *)apr_pcalloc(subPool.getPool(),
- sizeof(*range));
- range->start.kind = svn_opt_revision_number;
- range->start.value.number = 1;
- range->end.kind = svn_opt_revision_head;
- APR_ARRAY_PUSH(ranges, const svn_opt_revision_range_t *) = range;
- }
- else
- {
- APR_ARRAY_PUSH(ranges, const svn_opt_revision_range_t *) =
- it->toRange(subPool);
- }
- if (JNIUtil::isExceptionThrown())
- return;
- }
+ (!rangesToMerge ? NULL
+ : rev_range_vector_to_apr_array(*rangesToMerge, subPool));
+ if (JNIUtil::isExceptionThrown())
+ return;
- SVN_JNI_ERR(svn_client_merge_peg4(srcPath.c_str(),
+ SVN_JNI_ERR(svn_client_merge_peg5(srcPath.c_str(),
ranges,
pegRevision.revision(),
intLocalPath.c_str(),
depth,
- ignoreAncestry, force, recordOnly,
+ ignoreMergeinfo, diffIgnoreAncestry,
+ forceDelete, recordOnly,
dryRun, TRUE, NULL, ctx,
subPool.getPool()), );
}
@@ -685,10 +729,10 @@ void SVNClient::mergeReintegrate(const char *path, Revision &pegRevision,
SVN_JNI_NULL_PTR_EX(path, "path", );
SVN_JNI_NULL_PTR_EX(localPath, "localPath", );
Path intLocalPath(localPath, subPool);
- SVN_JNI_ERR(intLocalPath.error_occured(), );
+ SVN_JNI_ERR(intLocalPath.error_occurred(), );
Path srcPath(path, subPool);
- SVN_JNI_ERR(srcPath.error_occured(), );
+ SVN_JNI_ERR(srcPath.error_occurred(), );
svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
if (ctx == NULL)
@@ -713,7 +757,7 @@ SVNClient::getMergeinfo(const char *target, Revision &pegRevision)
svn_mergeinfo_t mergeinfo;
Path intLocalTarget(target, subPool);
- SVN_JNI_ERR(intLocalTarget.error_occured(), NULL);
+ SVN_JNI_ERR(intLocalTarget.error_occurred(), NULL);
SVN_JNI_ERR(svn_client_mergeinfo_get_merged(&mergeinfo,
intLocalTarget.c_str(),
pegRevision.revision(), ctx,
@@ -758,9 +802,10 @@ SVNClient::getMergeinfo(const char *target, Revision &pegRevision)
void *val;
apr_hash_this(hi, &path, NULL, &val);
- jstring jpath = JNIUtil::makeJString((const char *) path);
+ jstring jpath =
+ JNIUtil::makeJString(reinterpret_cast<const char *>(path));
jobject jranges =
- CreateJ::RevisionRangeList((apr_array_header_t *) val);
+ CreateJ::RevisionRangeList(reinterpret_cast<svn_rangelist_t *>(val));
env->CallVoidMethod(jmergeinfo, addRevisions, jpath, jranges);
@@ -777,6 +822,8 @@ void SVNClient::getMergeinfoLog(int type, const char *pathOrURL,
Revision &pegRevision,
const char *mergeSourceURL,
Revision &srcPegRevision,
+ Revision &srcStartRevision,
+ Revision &srcEndRevision,
bool discoverChangedPaths,
svn_depth_t depth,
StringArray &revProps,
@@ -790,24 +837,26 @@ void SVNClient::getMergeinfoLog(int type, const char *pathOrURL,
SVN_JNI_NULL_PTR_EX(pathOrURL, "path or url", );
Path urlPath(pathOrURL, subPool);
- SVN_JNI_ERR(urlPath.error_occured(), );
+ SVN_JNI_ERR(urlPath.error_occurred(), );
SVN_JNI_NULL_PTR_EX(mergeSourceURL, "merge source url", );
Path srcURL(mergeSourceURL, subPool);
- SVN_JNI_ERR(srcURL.error_occured(), );
-
- SVN_JNI_ERR(svn_client_mergeinfo_log((type == 1),
- urlPath.c_str(),
- pegRevision.revision(),
- srcURL.c_str(),
- srcPegRevision.revision(),
- LogMessageCallback::callback,
- callback,
- discoverChangedPaths,
- depth,
- revProps.array(subPool),
- ctx,
- subPool.getPool()), );
+ SVN_JNI_ERR(srcURL.error_occurred(), );
+
+ SVN_JNI_ERR(svn_client_mergeinfo_log2((type == 1),
+ urlPath.c_str(),
+ pegRevision.revision(),
+ srcURL.c_str(),
+ srcPegRevision.revision(),
+ srcStartRevision.revision(),
+ srcEndRevision.revision(),
+ LogMessageCallback::callback,
+ callback,
+ discoverChangedPaths,
+ depth,
+ revProps.array(subPool),
+ ctx,
+ subPool.getPool()), );
return;
}
@@ -816,23 +865,25 @@ void SVNClient::getMergeinfoLog(int type, const char *pathOrURL,
* Get a property.
*/
jbyteArray SVNClient::propertyGet(const char *path, const char *name,
- Revision &revision, Revision &pegRevision)
+ Revision &revision, Revision &pegRevision,
+ StringArray &changelists)
{
SVN::Pool subPool(pool);
SVN_JNI_NULL_PTR_EX(path, "path", NULL);
SVN_JNI_NULL_PTR_EX(name, "name", NULL);
Path intPath(path, subPool);
- SVN_JNI_ERR(intPath.error_occured(), NULL);
+ SVN_JNI_ERR(intPath.error_occurred(), NULL);
svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
if (ctx == NULL)
return NULL;
apr_hash_t *props;
- SVN_JNI_ERR(svn_client_propget3(&props, name,
+ SVN_JNI_ERR(svn_client_propget5(&props, NULL, name,
intPath.c_str(), pegRevision.revision(),
revision.revision(), NULL, svn_depth_empty,
- NULL, ctx, subPool.getPool()),
+ changelists.array(subPool), ctx,
+ subPool.getPool(), subPool.getPool()),
NULL);
apr_hash_index_t *hi;
@@ -842,35 +893,34 @@ jbyteArray SVNClient::propertyGet(const char *path, const char *name,
return NULL; // no property with this name
svn_string_t *propval;
- apr_hash_this(hi, NULL, NULL, (void**)&propval);
+ apr_hash_this(hi, NULL, NULL, reinterpret_cast<void**>(&propval));
if (propval == NULL)
return NULL;
- return JNIUtil::makeJByteArray((const signed char *)propval->data,
- propval->len);
+ return JNIUtil::makeJByteArray(propval);
}
void SVNClient::properties(const char *path, Revision &revision,
Revision &pegRevision, svn_depth_t depth,
- StringArray &changelists, ProplistCallback *callback)
+ StringArray &changelists,
+ ProplistCallback *callback)
{
SVN::Pool subPool(pool);
SVN_JNI_NULL_PTR_EX(path, "path", );
Path intPath(path, subPool);
- SVN_JNI_ERR(intPath.error_occured(), );
+ SVN_JNI_ERR(intPath.error_occurred(), );
svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
if (ctx == NULL)
return;
- SVN_JNI_ERR(svn_client_proplist3(intPath.c_str(), pegRevision.revision(),
+ SVN_JNI_ERR(svn_client_proplist4(intPath.c_str(), pegRevision.revision(),
revision.revision(), depth,
changelists.array(subPool),
+ callback->inherited(),
ProplistCallback::callback, callback,
ctx, subPool.getPool()), );
-
- return;
}
void SVNClient::propertySetLocal(Targets &targets, const char *name,
@@ -884,8 +934,10 @@ void SVNClient::propertySetLocal(Targets &targets, const char *name,
if (value.isNull())
val = NULL;
else
- val = svn_string_ncreate((const char *)value.getBytes(), value.getLength(),
- subPool.getPool());
+ val = svn_string_ncreate
+ (reinterpret_cast<const char *>(value.getBytes()),
+ value.getLength(),
+ subPool.getPool());
svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
if (ctx == NULL)
@@ -912,11 +964,13 @@ void SVNClient::propertySetRemote(const char *path, long base_rev,
if (value.isNull())
val = NULL;
else
- val = svn_string_ncreate((const char *)value.getBytes(), value.getLength(),
- subPool.getPool());
+ val = svn_string_ncreate
+ (reinterpret_cast<const char *>(value.getBytes()),
+ value.getLength(),
+ subPool.getPool());
Path intPath(path, subPool);
- SVN_JNI_ERR(intPath.error_occured(), );
+ SVN_JNI_ERR(intPath.error_occurred(), );
svn_client_ctx_t *ctx = context.getContext(message, subPool);
if (ctx == NULL)
@@ -932,50 +986,35 @@ void SVNClient::propertySetRemote(const char *path, long base_rev,
void SVNClient::diff(const char *target1, Revision &revision1,
const char *target2, Revision &revision2,
Revision *pegRevision, const char *relativeToDir,
- const char *outfileName, svn_depth_t depth,
+ OutputStream &outputStream, svn_depth_t depth,
StringArray &changelists,
bool ignoreAncestry, bool noDiffDelete, bool force,
- bool showCopiesAsAdds)
+ bool showCopiesAsAdds, bool ignoreProps, bool propsOnly,
+ DiffOptions const& options)
{
- svn_error_t *err;
SVN::Pool subPool(pool);
const char *c_relToDir = relativeToDir ?
svn_dirent_canonicalize(relativeToDir, subPool.getPool()) :
relativeToDir;
+ bool noDiffAdded = false; /* ### Promote to argument */
SVN_JNI_NULL_PTR_EX(target1, "target", );
// target2 is ignored when pegRevision is provided.
if (pegRevision == NULL)
SVN_JNI_NULL_PTR_EX(target2, "target2", );
- SVN_JNI_NULL_PTR_EX(outfileName, "outfileName", );
svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
if (ctx == NULL)
return;
Path path1(target1, subPool);
- SVN_JNI_ERR(path1.error_occured(), );
-
- apr_file_t *outfile = NULL;
- apr_status_t rv =
- apr_file_open(&outfile,
- svn_dirent_internal_style(outfileName,
- subPool.getPool()),
- APR_CREATE|APR_WRITE|APR_TRUNCATE , APR_OS_DEFAULT,
- subPool.getPool());
- if (rv != APR_SUCCESS)
- {
- SVN_JNI_ERR(svn_error_createf(rv, NULL, _("Cannot open file '%s'"),
- outfileName), );
- }
+ SVN_JNI_ERR(path1.error_occurred(), );
- // We don't use any options to diff.
- apr_array_header_t *diffOptions = apr_array_make(subPool.getPool(),
- 0, sizeof(char *));
+ apr_array_header_t *diffOptions = options.optionsArray(subPool);
if (pegRevision)
{
- err = svn_client_diff_peg5(diffOptions,
+ SVN_JNI_ERR(svn_client_diff_peg6(diffOptions,
path1.c_str(),
pegRevision->revision(),
revision1.revision(),
@@ -983,31 +1022,28 @@ void SVNClient::diff(const char *target1, Revision &revision1,
c_relToDir,
depth,
ignoreAncestry,
+ noDiffAdded,
noDiffDelete,
showCopiesAsAdds,
force,
- FALSE,
+ ignoreProps,
+ propsOnly,
+ options.useGitDiffFormat(),
SVN_APR_LOCALE_CHARSET,
- outfile,
+ outputStream.getStream(subPool),
NULL /* error file */,
changelists.array(subPool),
ctx,
- subPool.getPool());
+ subPool.getPool()),
+ );
}
else
{
// "Regular" diff (without a peg revision).
Path path2(target2, subPool);
- err = path2.error_occured();
- if (err)
- {
- if (outfile)
- goto cleanup;
-
- SVN_JNI_ERR(err, );
- }
+ SVN_JNI_ERR(path2.error_occurred(), );
- err = svn_client_diff5(diffOptions,
+ SVN_JNI_ERR(svn_client_diff6(diffOptions,
path1.c_str(),
revision1.revision(),
path2.c_str(),
@@ -1015,53 +1051,48 @@ void SVNClient::diff(const char *target1, Revision &revision1,
c_relToDir,
depth,
ignoreAncestry,
+ noDiffAdded,
noDiffDelete,
showCopiesAsAdds,
force,
- FALSE,
+ ignoreProps,
+ propsOnly,
+ options.useGitDiffFormat(),
SVN_APR_LOCALE_CHARSET,
- outfile,
- NULL /* error file */,
+ outputStream.getStream(subPool),
+ NULL /* error stream */,
changelists.array(subPool),
ctx,
- subPool.getPool());
+ subPool.getPool()),
+ );
}
-
-cleanup:
- rv = apr_file_close(outfile);
- if (rv != APR_SUCCESS)
- {
- svn_error_clear(err);
-
- SVN_JNI_ERR(svn_error_createf(rv, NULL, _("Cannot close file '%s'"),
- outfileName), );
- }
-
- SVN_JNI_ERR(err, );
}
void SVNClient::diff(const char *target1, Revision &revision1,
const char *target2, Revision &revision2,
- const char *relativeToDir, const char *outfileName,
+ const char *relativeToDir, OutputStream &outputStream,
svn_depth_t depth, StringArray &changelists,
bool ignoreAncestry, bool noDiffDelete, bool force,
- bool showCopiesAsAdds)
+ bool showCopiesAsAdds, bool ignoreProps, bool propsOnly,
+ DiffOptions const& options)
{
diff(target1, revision1, target2, revision2, NULL, relativeToDir,
- outfileName, depth, changelists, ignoreAncestry, noDiffDelete, force,
- showCopiesAsAdds);
+ outputStream, depth, changelists, ignoreAncestry, noDiffDelete, force,
+ showCopiesAsAdds, ignoreProps, propsOnly, options);
}
void SVNClient::diff(const char *target, Revision &pegRevision,
Revision &startRevision, Revision &endRevision,
- const char *relativeToDir, const char *outfileName,
+ const char *relativeToDir, OutputStream &outputStream,
svn_depth_t depth, StringArray &changelists,
bool ignoreAncestry, bool noDiffDelete, bool force,
- bool showCopiesAsAdds)
+ bool showCopiesAsAdds, bool ignoreProps, bool propsOnly,
+ DiffOptions const& options)
{
diff(target, startRevision, NULL, endRevision, &pegRevision,
- relativeToDir, outfileName, depth, changelists,
- ignoreAncestry, noDiffDelete, force, showCopiesAsAdds);
+ relativeToDir, outputStream, depth, changelists,
+ ignoreAncestry, noDiffDelete, force, showCopiesAsAdds,
+ ignoreProps, propsOnly, options);
}
void
@@ -1081,9 +1112,9 @@ SVNClient::diffSummarize(const char *target1, Revision &revision1,
return;
Path path1(target1, subPool);
- SVN_JNI_ERR(path1.error_occured(), );
+ SVN_JNI_ERR(path1.error_occurred(), );
Path path2(target2, subPool);
- SVN_JNI_ERR(path2.error_occured(), );
+ SVN_JNI_ERR(path2.error_occurred(), );
SVN_JNI_ERR(svn_client_diff_summarize2(path1.c_str(), revision1.revision(),
path2.c_str(), revision2.revision(),
@@ -1110,7 +1141,7 @@ SVNClient::diffSummarize(const char *target, Revision &pegRevision,
return;
Path path(target, subPool);
- SVN_JNI_ERR(path.error_occured(), );
+ SVN_JNI_ERR(path.error_occurred(), );
SVN_JNI_ERR(svn_client_diff_summarize_peg2(path.c_str(),
pegRevision.revision(),
@@ -1131,14 +1162,14 @@ void SVNClient::streamFileContent(const char *path, Revision &revision,
SVN::Pool subPool(pool);
SVN_JNI_NULL_PTR_EX(path, "path", );
Path intPath(path, subPool);
- SVN_JNI_ERR(intPath.error_occured(), );
+ SVN_JNI_ERR(intPath.error_occurred(), );
svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
if (ctx == NULL)
return;
SVN_JNI_ERR(svn_client_cat2(outputStream.getStream(subPool),
- path, pegRevision.revision(),
+ intPath.c_str(), pegRevision.revision(),
revision.revision(), ctx, subPool.getPool()),
);
}
@@ -1150,7 +1181,7 @@ jbyteArray SVNClient::revProperty(const char *path,
SVN_JNI_NULL_PTR_EX(path, "path", NULL);
SVN_JNI_NULL_PTR_EX(name, "name", NULL);
Path intPath(path, subPool);
- SVN_JNI_ERR(intPath.error_occured(), NULL);
+ SVN_JNI_ERR(intPath.error_occurred(), NULL);
svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
if (ctx == NULL)
@@ -1178,8 +1209,7 @@ jbyteArray SVNClient::revProperty(const char *path,
if (propval == NULL)
return NULL;
- return JNIUtil::makeJByteArray((const signed char *)propval->data,
- propval->len);
+ return JNIUtil::makeJByteArray(propval);
}
void SVNClient::relocate(const char *from, const char *to, const char *path,
bool ignoreExternals)
@@ -1189,13 +1219,13 @@ void SVNClient::relocate(const char *from, const char *to, const char *path,
SVN_JNI_NULL_PTR_EX(from, "from", );
SVN_JNI_NULL_PTR_EX(to, "to", );
Path intPath(path, subPool);
- SVN_JNI_ERR(intPath.error_occured(), );
+ SVN_JNI_ERR(intPath.error_occurred(), );
Path intFrom(from, subPool);
- SVN_JNI_ERR(intFrom.error_occured(), );
+ SVN_JNI_ERR(intFrom.error_occurred(), );
Path intTo(to, subPool);
- SVN_JNI_ERR(intTo.error_occured(), );
+ SVN_JNI_ERR(intTo.error_occurred(), );
svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
if (ctx == NULL)
@@ -1213,21 +1243,19 @@ void SVNClient::blame(const char *path, Revision &pegRevision,
{
SVN::Pool subPool(pool);
SVN_JNI_NULL_PTR_EX(path, "path", );
- apr_pool_t *pool = subPool.getPool();
Path intPath(path, subPool);
- SVN_JNI_ERR(intPath.error_occured(), );
+ SVN_JNI_ERR(intPath.error_occurred(), );
svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
if (ctx == NULL)
return;
- SVN_JNI_ERR(svn_client_blame5(intPath.c_str(), pegRevision.revision(),
- revisionStart.revision(),
- revisionEnd.revision(),
- svn_diff_file_options_create(pool),
- ignoreMimeType, includeMergedRevisions,
- BlameCallback::callback, callback, ctx,
- pool),
+ SVN_JNI_ERR(svn_client_blame5(
+ intPath.c_str(), pegRevision.revision(), revisionStart.revision(),
+ revisionEnd.revision(),
+ svn_diff_file_options_create(subPool.getPool()), ignoreMimeType,
+ includeMergedRevisions, BlameCallback::callback, callback, ctx,
+ subPool.getPool()),
);
}
@@ -1238,7 +1266,7 @@ void SVNClient::addToChangelist(Targets &srcPaths, const char *changelist,
svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
const apr_array_header_t *srcs = srcPaths.array(subPool);
- SVN_JNI_ERR(srcPaths.error_occured(), );
+ SVN_JNI_ERR(srcPaths.error_occurred(), );
SVN_JNI_ERR(svn_client_add_to_changelist(srcs, changelist, depth,
changelists.array(subPool),
@@ -1252,7 +1280,7 @@ void SVNClient::removeFromChangelists(Targets &srcPaths, svn_depth_t depth,
svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
const apr_array_header_t *srcs = srcPaths.array(subPool);
- SVN_JNI_ERR(srcPaths.error_occured(), );
+ SVN_JNI_ERR(srcPaths.error_occurred(), );
SVN_JNI_ERR(svn_client_remove_from_changelists(srcs, depth,
changelists.array(subPool),
@@ -1278,7 +1306,7 @@ void SVNClient::lock(Targets &targets, const char *comment, bool force)
{
SVN::Pool subPool(pool);
const apr_array_header_t *targetsApr = targets.array(subPool);
- SVN_JNI_ERR(targets.error_occured(), );
+ SVN_JNI_ERR(targets.error_occurred(), );
svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
SVN_JNI_ERR(svn_client_lock(targetsApr, comment, force, ctx,
@@ -1290,10 +1318,10 @@ void SVNClient::unlock(Targets &targets, bool force)
SVN::Pool subPool(pool);
const apr_array_header_t *targetsApr = targets.array(subPool);
- SVN_JNI_ERR(targets.error_occured(), );
+ SVN_JNI_ERR(targets.error_occurred(), );
svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
- SVN_JNI_ERR(svn_client_unlock((apr_array_header_t*)targetsApr, force,
- ctx, subPool.getPool()), );
+ SVN_JNI_ERR(svn_client_unlock(
+ targetsApr, force, ctx, subPool.getPool()), );
}
void SVNClient::setRevProperty(const char *path,
const char *name, Revision &rev,
@@ -1304,7 +1332,7 @@ void SVNClient::setRevProperty(const char *path,
SVN_JNI_NULL_PTR_EX(path, "path", );
SVN_JNI_NULL_PTR_EX(name, "name", );
Path intPath(path, subPool);
- SVN_JNI_ERR(intPath.error_occured(), );
+ SVN_JNI_ERR(intPath.error_occurred(), );
svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
if (ctx == NULL)
@@ -1342,7 +1370,7 @@ jstring SVNClient::getVersionInfo(const char *path, const char *trailUrl,
SVN_JNI_NULL_PTR_EX(path, "path", NULL);
Path intPath(path, subPool);
- SVN_JNI_ERR(intPath.error_occured(), NULL);
+ SVN_JNI_ERR(intPath.error_occurred(), NULL);
int wc_format;
svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
@@ -1409,7 +1437,7 @@ void SVNClient::upgrade(const char *path)
return;
Path checkedPath(path, subPool);
- SVN_JNI_ERR(checkedPath.error_occured(), );
+ SVN_JNI_ERR(checkedPath.error_occurred(), );
SVN_JNI_ERR(svn_client_upgrade(path, ctx, subPool.getPool()), );
}
@@ -1420,7 +1448,7 @@ jobject SVNClient::revProperties(const char *path, Revision &revision)
SVN::Pool subPool(pool);
SVN_JNI_NULL_PTR_EX(path, "path", NULL);
Path intPath(path, subPool);
- SVN_JNI_ERR(intPath.error_occured(), NULL);
+ SVN_JNI_ERR(intPath.error_occurred(), NULL);
svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
const char *URL;
@@ -1459,7 +1487,7 @@ SVNClient::info2(const char *path, Revision &revision, Revision &pegRevision,
return;
Path checkedPath(path, subPool);
- SVN_JNI_ERR(checkedPath.error_occured(), );
+ SVN_JNI_ERR(checkedPath.error_occurred(), );
SVN_JNI_ERR(svn_client_info3(checkedPath.c_str(),
pegRevision.revision(),
@@ -1484,9 +1512,9 @@ SVNClient::patch(const char *patchPath, const char *targetPath, bool dryRun,
return;
Path checkedPatchPath(patchPath, subPool);
- SVN_JNI_ERR(checkedPatchPath.error_occured(), );
+ SVN_JNI_ERR(checkedPatchPath.error_occurred(), );
Path checkedTargetPath(targetPath, subPool);
- SVN_JNI_ERR(checkedTargetPath.error_occured(), );
+ SVN_JNI_ERR(checkedTargetPath.error_occurred(), );
// Should parameterize the following, instead of defaulting to FALSE
SVN_JNI_ERR(svn_client_patch(checkedPatchPath.c_str(),
diff --git a/subversion/bindings/javahl/native/SVNClient.h b/subversion/bindings/javahl/native/SVNClient.h
index 45ea79d..8d85d9b 100644
--- a/subversion/bindings/javahl/native/SVNClient.h
+++ b/subversion/bindings/javahl/native/SVNClient.h
@@ -46,6 +46,7 @@ class LogMessageCallback;
class InfoCallback;
class CommitCallback;
class ListCallback;
+class ImportFilterCallback;
class StatusCallback;
class OutputStream;
class PatchCallback;
@@ -53,6 +54,7 @@ class ChangelistCallback;
class CommitMessage;
class StringArray;
class RevpropTable;
+class DiffOptions;
#include "svn_types.h"
#include "svn_client.h"
#include "SVNBase.h"
@@ -91,23 +93,29 @@ class SVNClient :public SVNBase
jobject getMergeinfo(const char *target, Revision &pegRevision);
void getMergeinfoLog(int type, const char *pathOrURL,
Revision &pegRevision, const char *mergeSourceURL,
- Revision &srcPegRevision, bool discoverChangedPaths,
+ Revision &srcPegRevision,
+ Revision &srcStartRevision, Revision &srcEndRevision,
+ bool discoverChangedPaths,
svn_depth_t depth, StringArray &revProps,
LogMessageCallback *callback);
jobject suggestMergeSources(const char *path, Revision &pegRevision);
- void merge(const char *path1, Revision &revision1, const char *path2,
- Revision &revision2, const char *localPath, bool force,
- svn_depth_t depth, bool ignoreAncestry, bool dryRun,
- bool recordOnly);
+ void merge(const char *path1, Revision &revision1,
+ const char *path2, Revision &revision2,
+ const char *localPath, bool forceDelete, svn_depth_t depth,
+ bool ignoreMergeinfo, bool diffIgnoreAncestry,
+ bool dryRun, bool recordOnly);
void merge(const char *path, Revision &pegRevision,
- std::vector<RevisionRange> &rangesToMerge,
- const char *localPath, bool force, svn_depth_t depth,
- bool ignoreAncestry, bool dryRun, bool recordOnly);
+ std::vector<RevisionRange> *rangesToMerge,
+ const char *localPath, bool forceDelete, svn_depth_t depth,
+ bool ignoreMergeinfo, bool diffIgnoreAncestry,
+ bool dryRun, bool recordOnly);
void mergeReintegrate(const char *path, Revision &pegRevision,
const char *localPath, bool dryRun);
void doImport(const char *path, const char *url, CommitMessage *message,
- svn_depth_t depth, bool noIgnore, bool ignoreUnknownNodeTypes,
- RevpropTable &revprops, CommitCallback *callback);
+ svn_depth_t depth, bool noIgnore, bool noAutoProps,
+ bool ignoreUnknownNodeTypes,
+ RevpropTable &revprops, ImportFilterCallback *ifCallback,
+ CommitCallback *commitCallback);
jlong doSwitch(const char *path, const char *url, Revision &revision,
Revision &pegRevision, svn_depth_t depth,
bool depthIsSticky, bool ignoreExternals,
@@ -123,7 +131,8 @@ class SVNClient :public SVNBase
RevpropTable &revprops, CommitCallback *callback);
void move(Targets &srcPaths, const char *destPath,
CommitMessage *message, bool force, bool moveAsChild,
- bool makeParents, RevpropTable &revprops, CommitCallback *callback);
+ bool makeParents, bool metadataOnly, bool allowMixRev,
+ RevpropTable &revprops, CommitCallback *callback);
void copy(CopySources &copySources, const char *destPath,
CommitMessage *message, bool copyAsChild, bool makeParents,
bool ignoreExternals, RevpropTable &revprops,
@@ -135,8 +144,8 @@ class SVNClient :public SVNBase
jlongArray update(Targets &targets, Revision &revision, svn_depth_t depth,
bool depthIsSticky, bool makeParents, bool ignoreExternals,
bool allowUnverObstructions);
- void add(const char *path, svn_depth_t depth, bool force, bool no_ignore,
- bool add_parents);
+ void add(const char *path, svn_depth_t depth, bool force,
+ bool no_ignore, bool no_autoprops, bool add_parents);
void revert(const char *path, svn_depth_t depth, StringArray &changelists);
void remove(Targets &targets, CommitMessage *message, bool force,
bool keep_local, RevpropTable &revprops,
@@ -149,6 +158,7 @@ class SVNClient :public SVNBase
bool discoverPaths, bool includeMergedRevisions,
StringArray &revProps,
long limit, LogMessageCallback *callback);
+ jobject getVersionExtended(bool verbose);
jstring getAdminDirectoryName();
jboolean isAdminDirectory(const char *name);
void addToChangelist(Targets &srcPaths, const char *changelist,
@@ -171,19 +181,22 @@ class SVNClient :public SVNBase
bool lastChanged);
void upgrade(const char *path);
jbyteArray propertyGet(const char *path, const char *name,
- Revision &revision, Revision &pegRevision);
+ Revision &revision, Revision &pegRevision,
+ StringArray &changelists);
void diff(const char *target1, Revision &revision1,
const char *target2, Revision &revision2,
- const char *relativeToDir, const char *outfileName,
+ const char *relativeToDir, OutputStream &outputStream,
svn_depth_t depth, StringArray &changelists,
bool ignoreAncestry, bool noDiffDelete, bool force,
- bool showCopiesAsAdds);
+ bool showCopiesAsAdds, bool ignoreProps, bool propsOnly,
+ DiffOptions const& options);
void diff(const char *target, Revision &pegevision,
Revision &startRevision, Revision &endRevision,
- const char *relativeToDir, const char *outfileName,
+ const char *relativeToDir, OutputStream &outputStream,
svn_depth_t depth, StringArray &changelists,
bool ignoreAncestry, bool noDiffDelete, bool force,
- bool showCopiesAsAdds);
+ bool showCopiesAsAdds, bool ignoreProps, bool propsOnly,
+ DiffOptions const& options);
void diffSummarize(const char *target1, Revision &revision1,
const char *target2, Revision &revision2,
svn_depth_t depth, StringArray &changelists,
@@ -196,7 +209,7 @@ class SVNClient :public SVNBase
ClientContext &getClientContext();
const char *getLastPath();
- void dispose();
+ void dispose(jobject jthis);
static SVNClient *getCppObject(jobject jthis);
SVNClient(jobject jthis_in);
virtual ~SVNClient();
@@ -209,9 +222,11 @@ class SVNClient :public SVNBase
void diff(const char *target1, Revision &revision1,
const char *target2, Revision &revision2,
Revision *pegRevision, const char *relativeToDir,
- const char *outfileName, svn_depth_t depth, StringArray &changelists,
+ OutputStream &outputStream, svn_depth_t depth,
+ StringArray &changelists,
bool ignoreAncestry, bool noDiffDelete, bool force,
- bool showCopiesAsAdds);
+ bool showCopiesAsAdds, bool ignoreProps, bool propsOnly,
+ DiffOptions const& options);
Path m_lastPath;
ClientContext context;
diff --git a/subversion/bindings/javahl/native/SVNRepos.cpp b/subversion/bindings/javahl/native/SVNRepos.cpp
index 079ad59..7fdf63c 100644
--- a/subversion/bindings/javahl/native/SVNRepos.cpp
+++ b/subversion/bindings/javahl/native/SVNRepos.cpp
@@ -54,10 +54,10 @@ SVNRepos *SVNRepos::getCppObject(jobject jthis)
return (cppAddr == 0 ? NULL : reinterpret_cast<SVNRepos *>(cppAddr));
}
-void SVNRepos::dispose()
+void SVNRepos::dispose(jobject jthis)
{
static jfieldID fid = 0;
- SVNBase::dispose(&fid, JAVA_PACKAGE"/SVNRepos");
+ SVNBase::dispose(jthis, &fid, JAVA_PACKAGE"/SVNRepos");
}
void SVNRepos::cancelOperation()
@@ -68,7 +68,7 @@ void SVNRepos::cancelOperation()
svn_error_t *
SVNRepos::checkCancel(void *cancelBaton)
{
- SVNRepos *that = (SVNRepos *)cancelBaton;
+ SVNRepos *that = static_cast<SVNRepos *>(cancelBaton);
if (that->m_cancelOperation)
return svn_error_create(SVN_ERR_CANCELLED, NULL,
_("Operation cancelled"));
@@ -169,7 +169,7 @@ void SVNRepos::deltify(File &path, Revision &revStart, Revision &revEnd)
for (revision = start; revision <= end; ++revision)
{
revisionPool.clear();
- SVN_JNI_ERR(svn_fs_deltify_revision (fs, revision, revisionPool.getPool()),
+ SVN_JNI_ERR(svn_fs_deltify_revision(fs, revision, revisionPool.getPool()),
);
}
@@ -177,7 +177,7 @@ void SVNRepos::deltify(File &path, Revision &revStart, Revision &revEnd)
}
void SVNRepos::dump(File &path, OutputStream &dataOut,
- Revision &revsionStart, Revision &revisionEnd,
+ Revision &revisionStart, Revision &revisionEnd,
bool incremental, bool useDeltas,
ReposNotifyCallback *notifyCallback)
{
@@ -199,9 +199,9 @@ void SVNRepos::dump(File &path, OutputStream &dataOut,
SVN_JNI_ERR(svn_fs_youngest_rev(&youngest, fs, requestPool.getPool()), );
/* ### We only handle revision numbers right now, not dates. */
- if (revsionStart.revision()->kind == svn_opt_revision_number)
- lower = revsionStart.revision()->value.number;
- else if (revsionStart.revision()->kind == svn_opt_revision_head)
+ if (revisionStart.revision()->kind == svn_opt_revision_number)
+ lower = revisionStart.revision()->value.number;
+ else if (revisionStart.revision()->kind == svn_opt_revision_head)
lower = youngest;
else
lower = SVN_INVALID_REVNUM;
@@ -248,7 +248,7 @@ void SVNRepos::dump(File &path, OutputStream &dataOut,
}
void SVNRepos::hotcopy(File &path, File &targetPath,
- bool cleanLogs)
+ bool cleanLogs, bool incremental)
{
SVN::Pool requestPool;
@@ -264,13 +264,16 @@ void SVNRepos::hotcopy(File &path, File &targetPath,
return;
}
- SVN_JNI_ERR(svn_repos_hotcopy(path.getInternalStyle(requestPool),
- targetPath.getInternalStyle(requestPool),
- cleanLogs, requestPool.getPool()), );
+ SVN_JNI_ERR(svn_repos_hotcopy2(path.getInternalStyle(requestPool),
+ targetPath.getInternalStyle(requestPool),
+ cleanLogs, incremental,
+ checkCancel, this /* cancel callback/baton */,
+ requestPool.getPool()),
+ );
}
static void
-list_dblogs (File &path, MessageReceiver &receiver, bool only_unused)
+list_dblogs(File &path, MessageReceiver &receiver, bool only_unused)
{
SVN::Pool requestPool;
apr_array_header_t *logfiles;
@@ -294,7 +297,7 @@ list_dblogs (File &path, MessageReceiver &receiver, bool only_unused)
log_utf8 = svn_dirent_join(path.getInternalStyle(requestPool),
APR_ARRAY_IDX(logfiles, i, const char *),
requestPool.getPool());
- log_utf8 = svn_dirent_local_style (log_utf8, requestPool.getPool());
+ log_utf8 = svn_dirent_local_style(log_utf8, requestPool.getPool());
receiver.receiveMessage(log_utf8);
}
}
@@ -312,6 +315,8 @@ void SVNRepos::listUnusedDBLogs(File &path,
void SVNRepos::load(File &path,
InputStream &dataIn,
+ Revision &revisionStart,
+ Revision &revisionEnd,
bool ignoreUUID,
bool forceUUID,
bool usePreCommitHook,
@@ -321,6 +326,7 @@ void SVNRepos::load(File &path,
{
SVN::Pool requestPool;
svn_repos_t *repos;
+ svn_revnum_t lower = SVN_INVALID_REVNUM, upper = SVN_INVALID_REVNUM;
enum svn_repos_load_uuid uuid_action = svn_repos_load_uuid_default;
if (ignoreUUID)
uuid_action = svn_repos_load_uuid_ignore;
@@ -333,11 +339,25 @@ void SVNRepos::load(File &path,
return;
}
+ /* ### We only handle revision numbers right now, not dates. */
+ if (revisionStart.revision()->kind == svn_opt_revision_number)
+ lower = revisionStart.revision()->value.number;
+ if (revisionEnd.revision()->kind == svn_opt_revision_number)
+ upper = revisionEnd.revision()->value.number;
+ if (upper < lower
+ && lower != SVN_INVALID_REVNUM
+ && upper != SVN_INVALID_REVNUM)
+ {
+ SVN_JNI_ERR(svn_error_create
+ (SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("First revision cannot be higher than second")), );
+ }
+
SVN_JNI_ERR(svn_repos_open2(&repos, path.getInternalStyle(requestPool),
NULL, requestPool.getPool()), );
- SVN_JNI_ERR(svn_repos_load_fs3(repos, dataIn.getStream(requestPool),
- uuid_action, relativePath,
+ SVN_JNI_ERR(svn_repos_load_fs4(repos, dataIn.getStream(requestPool),
+ lower, upper, uuid_action, relativePath,
usePreCommitHook, usePostCommitHook,
FALSE,
notifyCallback != NULL
@@ -362,13 +382,13 @@ void SVNRepos::lstxns(File &path, MessageReceiver &messageReceiver)
SVN_JNI_ERR(svn_repos_open2(&repos, path.getInternalStyle(requestPool),
NULL, requestPool.getPool()), );
- fs = svn_repos_fs (repos);
+ fs = svn_repos_fs(repos);
SVN_JNI_ERR(svn_fs_list_transactions(&txns, fs, requestPool.getPool()), );
/* Loop, printing revisions. */
for (int i = 0; i < txns->nelts; ++i)
{
- messageReceiver.receiveMessage(APR_ARRAY_IDX (txns, i, const char *));
+ messageReceiver.receiveMessage(APR_ARRAY_IDX(txns, i, const char *));
}
@@ -399,12 +419,34 @@ jlong SVNRepos::recover(File &path, ReposNotifyCallback *notifyCallback)
* recovery actually worked. */
SVN_JNI_ERR(svn_repos_open2(&repos, path.getInternalStyle(requestPool),
NULL, requestPool.getPool()), -1);
- SVN_JNI_ERR(svn_fs_youngest_rev(&youngest_rev, svn_repos_fs (repos),
+ SVN_JNI_ERR(svn_fs_youngest_rev(&youngest_rev, svn_repos_fs(repos),
requestPool.getPool()),
-1);
return youngest_rev;
}
+void SVNRepos::freeze(jobjectArray jpaths, ReposFreezeAction* action)
+{
+ JNIEnv *env = JNIUtil::getEnv();
+ SVN::Pool subPool(pool);
+ const jsize num_paths = env->GetArrayLength(jpaths);
+
+ apr_array_header_t *paths = apr_array_make(subPool.getPool(), num_paths,
+ sizeof(const char*));
+ for (jsize i = 0; i < num_paths; ++i)
+ {
+ jobject obj = env->GetObjectArrayElement(jpaths, i);
+ APR_ARRAY_PUSH(paths, const char*) =
+ apr_pstrdup(subPool.getPool(), File(obj).getAbsPath());
+ env->DeleteLocalRef(obj);
+ }
+
+ SVN_JNI_ERR(svn_repos_freeze(paths, action->callback, action,
+ subPool.getPool()),
+ );
+}
+
+
void SVNRepos::rmtxns(File &path, StringArray &transactions)
{
SVN::Pool requestPool;
@@ -423,13 +465,13 @@ void SVNRepos::rmtxns(File &path, StringArray &transactions)
SVN_JNI_ERR(svn_repos_open2(&repos, path.getInternalStyle(requestPool),
NULL, requestPool.getPool()), );
- fs = svn_repos_fs (repos);
+ fs = svn_repos_fs(repos);
args = transactions.array(requestPool);
/* All the rest of the arguments are transaction names. */
for (i = 0; i < args->nelts; ++i)
{
- const char *txn_name = APR_ARRAY_IDX (args, i, const char *);
+ const char *txn_name = APR_ARRAY_IDX(args, i, const char *);
svn_error_t *err;
/* Try to open the txn. If that succeeds, try to abort it. */
@@ -443,7 +485,7 @@ void SVNRepos::rmtxns(File &path, StringArray &transactions)
* all. */
if (err && (err->apr_err == SVN_ERR_FS_TRANSACTION_DEAD))
{
- svn_error_clear (err);
+ svn_error_clear(err);
err = svn_fs_purge_txn(fs, txn_name, transactionPool.getPool());
}
@@ -497,7 +539,7 @@ void SVNRepos::setRevProp(File &path, Revision &revision,
}
else
{
- svn_fs_t *fs = svn_repos_fs (repos);
+ svn_fs_t *fs = svn_repos_fs(repos);
err = svn_fs_change_rev_prop2(fs, revision.revision()->value.number,
propName, NULL, propValStr,
requestPool.getPool());
@@ -554,7 +596,7 @@ SVNRepos::verify(File &path, Revision &revisionStart, Revision &revisionEnd,
* with no interest in the output. */
SVN_JNI_ERR(svn_repos_open2(&repos, path.getInternalStyle(requestPool),
NULL, requestPool.getPool()), );
- SVN_JNI_ERR(svn_fs_youngest_rev(&youngest, svn_repos_fs (repos),
+ SVN_JNI_ERR(svn_fs_youngest_rev(&youngest, svn_repos_fs(repos),
requestPool.getPool()), );
/* Find the revision numbers at which to start and end. */
@@ -658,13 +700,13 @@ jobject SVNRepos::lslocks(File &path, svn_depth_t depth)
std::vector<jobject> jlocks;
- for (hi = apr_hash_first (requestPool.getPool(), locks);
+ for (hi = apr_hash_first(requestPool.getPool(), locks);
hi;
- hi = apr_hash_next (hi))
+ hi = apr_hash_next(hi))
{
void *val;
- apr_hash_this (hi, NULL, NULL, &val);
- svn_lock_t *lock = (svn_lock_t *)val;
+ apr_hash_this(hi, NULL, NULL, &val);
+ svn_lock_t *lock = reinterpret_cast<svn_lock_t *>(val);
jobject jLock = CreateJ::Lock(lock);
jlocks.push_back(jLock);
@@ -678,7 +720,6 @@ jobject SVNRepos::lslocks(File &path, svn_depth_t depth)
void SVNRepos::rmlocks(File &path, StringArray &locks)
{
SVN::Pool requestPool;
- apr_pool_t *pool = requestPool.getPool();
svn_repos_t *repos;
svn_fs_t *fs;
svn_fs_access_t *access;
@@ -691,8 +732,8 @@ void SVNRepos::rmlocks(File &path, StringArray &locks)
SVN_JNI_ERR(svn_repos_open2(&repos, path.getInternalStyle(requestPool),
NULL, requestPool.getPool()), );
- fs = svn_repos_fs (repos);
- const char *username;
+ fs = svn_repos_fs(repos);
+ const char *username = NULL;
/* svn_fs_unlock() demands that some username be associated with the
* filesystem, so just use the UID of the person running 'svnadmin'.*/
@@ -700,18 +741,19 @@ void SVNRepos::rmlocks(File &path, StringArray &locks)
apr_uid_t uid;
apr_gid_t gid;
char *un;
- if (apr_uid_current (&uid, &gid, pool) == APR_SUCCESS &&
- apr_uid_name_get (&un, uid, pool) == APR_SUCCESS)
+ if (apr_uid_current(&uid, &gid, requestPool.getPool()) == APR_SUCCESS &&
+ apr_uid_name_get(&un, uid, requestPool.getPool()) == APR_SUCCESS)
{
- svn_error_t *err = svn_utf_cstring_to_utf8(&username, un, pool);
- svn_error_clear (err);
+ svn_error_t *err = svn_utf_cstring_to_utf8(&username, un,
+ requestPool.getPool());
+ svn_error_clear(err);
if (err)
username = "administrator";
}
}
/* Create an access context describing the current user. */
- SVN_JNI_ERR(svn_fs_create_access(&access, username, pool), );
+ SVN_JNI_ERR(svn_fs_create_access(&access, username, requestPool.getPool()), );
/* Attach the access context to the filesystem. */
SVN_JNI_ERR(svn_fs_set_access(fs, access), );
@@ -720,7 +762,7 @@ void SVNRepos::rmlocks(File &path, StringArray &locks)
const apr_array_header_t *args = locks.array(requestPool);
for (int i = 0; i < args->nelts; ++i)
{
- const char *lock_path = APR_ARRAY_IDX (args, i, const char *);
+ const char *lock_path = APR_ARRAY_IDX(args, i, const char *);
svn_lock_t *lock;
/* Fetch the path's svn_lock_t. */
@@ -731,13 +773,13 @@ void SVNRepos::rmlocks(File &path, StringArray &locks)
continue;
/* Now forcibly destroy the lock. */
- err = svn_fs_unlock (fs, lock_path,
- lock->token, 1 /* force */, subpool.getPool());
+ err = svn_fs_unlock(fs, lock_path,
+ lock->token, 1 /* force */, subpool.getPool());
if (err)
goto move_on;
move_on:
- svn_error_clear (err);
+ svn_error_clear(err);
subpool.clear();
}
diff --git a/subversion/bindings/javahl/native/SVNRepos.h b/subversion/bindings/javahl/native/SVNRepos.h
index 492b940..b22a4c4 100644
--- a/subversion/bindings/javahl/native/SVNRepos.h
+++ b/subversion/bindings/javahl/native/SVNRepos.h
@@ -35,6 +35,7 @@
#include "InputStream.h"
#include "MessageReceiver.h"
#include "ReposNotifyCallback.h"
+#include "ReposFreezeAction.h"
#include "StringArray.h"
#include "File.h"
@@ -51,14 +52,17 @@ class SVNRepos : public SVNBase
bool usePostRevPropChangeHook);
void rmtxns(File &path, StringArray &transactions);
jlong recover(File &path, ReposNotifyCallback *notifyCallback);
+ void freeze(jobjectArray jpaths, ReposFreezeAction* action);
void lstxns(File &path, MessageReceiver &messageReceiver);
- void load(File &path, InputStream &dataIn, bool ignoreUUID, bool forceUUID,
+ void load(File &path, InputStream &dataIn,
+ Revision &revsionStart, Revision &revisionEnd,
+ bool ignoreUUID, bool forceUUID,
bool usePreCommitHook, bool usePostCommitHook,
const char *relativePath, ReposNotifyCallback *notifyCallback);
void listUnusedDBLogs(File &path,
MessageReceiver &messageReceiver);
void listDBLogs(File &path, MessageReceiver &messageReceiver);
- void hotcopy(File &path, File &targetPath, bool cleanLogs);
+ void hotcopy(File &path, File &targetPath, bool cleanLogs, bool incremental);
void dump(File &path, OutputStream &dataOut, Revision &revsionStart,
Revision &RevisionEnd, bool incremental, bool useDeltas,
ReposNotifyCallback *notifyCallback);
@@ -69,7 +73,7 @@ class SVNRepos : public SVNBase
void pack(File &path, ReposNotifyCallback *callback);
SVNRepos();
virtual ~SVNRepos();
- void dispose();
+ void dispose(jobject jthis);
static SVNRepos *getCppObject(jobject jthis);
static svn_error_t *checkCancel(void *cancelBaton);
diff --git a/subversion/bindings/javahl/native/StatusCallback.cpp b/subversion/bindings/javahl/native/StatusCallback.cpp
index 49a8043..cc0d67a 100644
--- a/subversion/bindings/javahl/native/StatusCallback.cpp
+++ b/subversion/bindings/javahl/native/StatusCallback.cpp
@@ -55,7 +55,8 @@ StatusCallback::callback(void *baton,
apr_pool_t *pool)
{
if (baton)
- return ((StatusCallback *)baton)->doStatus(local_abspath, status, pool);
+ return static_cast<StatusCallback *>(baton)->doStatus(
+ local_abspath, status, pool);
return SVN_NO_ERROR;
}
@@ -93,7 +94,7 @@ StatusCallback::doStatus(const char *local_abspath,
jstring jPath = JNIUtil::makeJString(local_abspath);
if (JNIUtil::isJavaExceptionThrown())
- POP_AND_RETURN_NULL;
+ POP_AND_RETURN(SVN_NO_ERROR);
jobject jStatus = CreateJ::Status(wc_ctx, status, pool);
if (JNIUtil::isJavaExceptionThrown())
diff --git a/subversion/bindings/javahl/native/StringArray.cpp b/subversion/bindings/javahl/native/StringArray.cpp
index 03e7828..0438e44 100644
--- a/subversion/bindings/javahl/native/StringArray.cpp
+++ b/subversion/bindings/javahl/native/StringArray.cpp
@@ -39,7 +39,8 @@ StringArray::~StringArray()
const apr_array_header_t *StringArray::array(const SVN::Pool &pool)
{
apr_array_header_t *strings
- = apr_array_make(pool.getPool(), m_strings.size(), sizeof(char *));
+ = apr_array_make(pool.getPool(), static_cast<int>(m_strings.size()),
+ sizeof(char *));
std::vector<std::string>::const_iterator it;
for (it = m_strings.begin(); it < m_strings.end(); ++it)
@@ -69,7 +70,7 @@ StringArray::init(void)
if (JNIUtil::isExceptionThrown())
return;
- m_strings.push_back(std::string((const char *)str));
+ m_strings.push_back(std::string(static_cast<const char *>(str)));
}
}
diff --git a/subversion/bindings/javahl/native/Targets.cpp b/subversion/bindings/javahl/native/Targets.cpp
index 767caca..85ecc34 100644
--- a/subversion/bindings/javahl/native/Targets.cpp
+++ b/subversion/bindings/javahl/native/Targets.cpp
@@ -40,13 +40,13 @@ Targets::Targets(const char *path, SVN::Pool &in_pool)
: m_subpool(in_pool)
{
m_strArray = NULL;
- m_targets.push_back (apr_pstrdup(m_subpool.getPool(), path));
- m_error_occured = NULL;
+ m_targets.push_back(apr_pstrdup(m_subpool.getPool(), path));
+ m_error_occurred = NULL;
}
void Targets::add(const char *path)
{
- m_targets.push_back (path);
+ m_targets.push_back(path);
}
const apr_array_header_t *Targets::array(const SVN::Pool &pool)
@@ -62,7 +62,7 @@ const apr_array_header_t *Targets::array(const SVN::Pool &pool)
svn_error_t *err = JNIUtil::preprocessPath(tt, pool.getPool());
if (err != NULL)
{
- m_error_occured = err;
+ m_error_occurred = err;
break;
}
m_targets.push_back(tt);
@@ -72,9 +72,9 @@ const apr_array_header_t *Targets::array(const SVN::Pool &pool)
std::vector<const char*>::const_iterator it;
apr_pool_t *apr_pool = pool.getPool();
- apr_array_header_t *apr_targets = apr_array_make (apr_pool,
- m_targets.size(),
- sizeof(const char *));
+ apr_array_header_t *apr_targets
+ = apr_array_make(apr_pool, static_cast<int>(m_targets.size()),
+ sizeof(const char *));
for (it = m_targets.begin(); it != m_targets.end(); ++it)
{
@@ -83,7 +83,7 @@ const apr_array_header_t *Targets::array(const SVN::Pool &pool)
svn_error_t *err = JNIUtil::preprocessPath(target, pool.getPool());
if (err != NULL)
{
- m_error_occured = err;
+ m_error_occurred = err;
break;
}
APR_ARRAY_PUSH(apr_targets, const char *) = target;
@@ -96,10 +96,10 @@ Targets::Targets(StringArray &strArray, SVN::Pool &in_pool)
: m_subpool(in_pool)
{
m_strArray = &strArray;
- m_error_occured = NULL;
+ m_error_occurred = NULL;
}
-svn_error_t *Targets::error_occured()
+svn_error_t *Targets::error_occurred()
{
- return m_error_occured;
+ return m_error_occurred;
}
diff --git a/subversion/bindings/javahl/native/Targets.h b/subversion/bindings/javahl/native/Targets.h
index 3743fd8..8d27a0d 100644
--- a/subversion/bindings/javahl/native/Targets.h
+++ b/subversion/bindings/javahl/native/Targets.h
@@ -43,14 +43,14 @@ class Targets
SVN::Pool m_subpool;
std::vector<const char*> m_targets;
StringArray *m_strArray;
- svn_error_t *m_error_occured;
+ svn_error_t *m_error_occurred;
public:
Targets(StringArray &strArray, SVN::Pool &in_pool);
Targets(const char *path, SVN::Pool &in_pool);
void add(const char *path);
~Targets();
const apr_array_header_t *array(const SVN::Pool &pool);
- svn_error_t *error_occured();
+ svn_error_t *error_occurred();
};
#endif // TARGETS_H
diff --git a/subversion/bindings/javahl/native/VersionExtended.cpp b/subversion/bindings/javahl/native/VersionExtended.cpp
new file mode 100644
index 0000000..1dc47db
--- /dev/null
+++ b/subversion/bindings/javahl/native/VersionExtended.cpp
@@ -0,0 +1,98 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ *
+ * @file VersionExtended.cpp
+ * @brief Implementation of the VersionExtended class
+ */
+
+#include "JNIUtil.h"
+#include "VersionExtended.h"
+
+const VersionExtended *
+VersionExtended::getCppObject(jobject jthis)
+{
+ if (!jthis)
+ return NULL;
+
+ static jfieldID fid = 0;
+ jlong cppAddr = SVNBase::findCppAddrForJObject(
+ jthis, &fid, JAVA_PACKAGE"/types/VersionExtended");
+ return (cppAddr == 0 ? NULL : reinterpret_cast<VersionExtended *>(cppAddr));
+}
+
+namespace {
+static jobject getWrapperAddress(jobject jthat, volatile jfieldID *fid)
+{
+ JNIEnv *const env = JNIUtil::getEnv();
+ if (!*fid)
+ {
+ *fid = env->GetFieldID(env->GetObjectClass(jthat), "wrapper",
+ "L"JAVA_PACKAGE"/types/VersionExtended;");
+ if (JNIUtil::isJavaExceptionThrown())
+ {
+ *fid = 0;
+ return 0;
+ }
+ }
+
+ jobject jthis = env->GetObjectField(jthat, *fid);
+ if (JNIUtil::isJavaExceptionThrown())
+ return 0;
+ return jthis;
+}
+} // anonymous namespace
+
+const VersionExtended *
+VersionExtended::getCppObjectFromLinkedLib(jobject jthat)
+{
+ static volatile jfieldID fid;
+ return getCppObject(getWrapperAddress(jthat, &fid));
+}
+
+const VersionExtended *
+VersionExtended::getCppObjectFromLoadedLib(jobject jthat)
+{
+ static volatile jfieldID fid;
+ return getCppObject(getWrapperAddress(jthat, &fid));
+}
+
+const VersionExtended *
+VersionExtended::getCppObjectFromLinkedLibIterator(jobject jthat)
+{
+ static volatile jfieldID fid;
+ return getCppObject(getWrapperAddress(jthat, &fid));
+}
+
+const VersionExtended *
+VersionExtended::getCppObjectFromLoadedLibIterator(jobject jthat)
+{
+ static volatile jfieldID fid;
+ return getCppObject(getWrapperAddress(jthat, &fid));
+}
+
+VersionExtended::~VersionExtended() {}
+
+void VersionExtended::dispose(jobject jthis)
+{
+ static jfieldID fid = 0;
+ SVNBase::dispose(jthis, &fid, JAVA_PACKAGE"/types/VersionExtended");
+}
diff --git a/subversion/bindings/javahl/native/VersionExtended.h b/subversion/bindings/javahl/native/VersionExtended.h
new file mode 100644
index 0000000..8df81f3
--- /dev/null
+++ b/subversion/bindings/javahl/native/VersionExtended.h
@@ -0,0 +1,89 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ *
+ * @file VersionExtended.h
+ * @brief Interface for the VersionExtended class
+ */
+
+#ifndef JAVAHL_VERSION_EXTENDED_H
+#define JAVAHL_VERSION_EXTENDED_H
+
+#include "SVNBase.h"
+#include "svn_version.h"
+
+class VersionExtended : public SVNBase
+{
+public:
+ static const VersionExtended *getCppObject(jobject jthis);
+ static const VersionExtended *getCppObjectFromLinkedLib(jobject jthat);
+ static const VersionExtended *getCppObjectFromLoadedLib(jobject jthat);
+ static const VersionExtended *getCppObjectFromLinkedLibIterator(jobject jthat);
+ static const VersionExtended *getCppObjectFromLoadedLibIterator(jobject jthat);
+
+ virtual ~VersionExtended();
+ virtual void dispose(jobject jthis);
+
+ VersionExtended(bool verbose)
+ : m_ext_info(svn_version_extended(verbose, pool.getPool()))
+ {}
+
+ const char *build_date() const
+ { return svn_version_ext_build_date(m_ext_info); }
+
+ const char *build_time() const
+ { return svn_version_ext_build_time(m_ext_info); }
+
+ const char *build_host() const
+ { return svn_version_ext_build_host(m_ext_info); }
+
+ const char *copyright() const
+ { return svn_version_ext_copyright(m_ext_info); }
+
+ const char *runtime_host() const
+ { return svn_version_ext_runtime_host(m_ext_info); }
+
+ const char *runtime_osname() const
+ { return svn_version_ext_runtime_osname(m_ext_info); }
+
+ const svn_version_ext_linked_lib_t *get_linked_lib(int index) const
+ {
+ const apr_array_header_t *const libs =
+ svn_version_ext_linked_libs(m_ext_info);
+ if (!libs || index < 0 || libs->nelts <= index)
+ return NULL;
+ return &APR_ARRAY_IDX(libs, index, svn_version_ext_linked_lib_t);
+ }
+
+ const svn_version_ext_loaded_lib_t *get_loaded_lib(int index) const
+ {
+ const apr_array_header_t *const libs =
+ svn_version_ext_loaded_libs(m_ext_info);
+ if (!libs || index < 0 || libs->nelts <= index)
+ return NULL;
+ return &APR_ARRAY_IDX(libs, index, svn_version_ext_loaded_lib_t);
+ }
+
+private:
+ const svn_version_extended_t *m_ext_info;
+};
+
+#endif /* JAVAHL_VERSION_EXTENDED_H */
diff --git a/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp b/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
index 6d66c99..e4fdd76 100644
--- a/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
+++ b/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
@@ -47,9 +47,12 @@
#include "InfoCallback.h"
#include "StatusCallback.h"
#include "ListCallback.h"
+#include "ImportFilterCallback.h"
#include "ChangelistCallback.h"
#include "StringArray.h"
#include "RevpropTable.h"
+#include "VersionExtended.h"
+#include "DiffOptions.h"
#include "svn_version.h"
#include "svn_private_config.h"
#include "version.h"
@@ -75,7 +78,7 @@ Java_org_apache_subversion_javahl_SVNClient_dispose
JNIUtil::throwError(_("bad C++ this"));
return;
}
- cl->dispose();
+ cl->dispose(jthis);
}
JNIEXPORT void JNICALL
@@ -88,6 +91,20 @@ Java_org_apache_subversion_javahl_SVNClient_finalize
cl->finalize();
}
+JNIEXPORT jobject JNICALL
+Java_org_apache_subversion_javahl_SVNClient_getVersionExtended(
+ JNIEnv *env, jobject jthis, jboolean verbose)
+{
+ JNIEntry(SVNClient, getVersionExtended);
+ SVNClient *cl = SVNClient::getCppObject(jthis);
+ if (cl == NULL)
+ {
+ JNIUtil::throwError(_("bad C++ this"));
+ return NULL;
+ }
+ return cl->getVersionExtended(!!verbose);
+}
+
JNIEXPORT jstring JNICALL
Java_org_apache_subversion_javahl_SVNClient_getAdminDirectoryName
(JNIEnv *env, jobject jthis)
@@ -160,7 +177,8 @@ Java_org_apache_subversion_javahl_SVNClient_list
ListCallback callback(jcallback);
cl->list(url, revision, pegRevision, EnumMapper::toDepth(jdepth),
- (int)jdirentFields, jfetchLocks ? true : false, &callback);
+ static_cast<int>(jdirentFields), jfetchLocks ? true : false,
+ &callback);
}
JNIEXPORT void JNICALL
@@ -305,7 +323,7 @@ Java_org_apache_subversion_javahl_SVNClient_logMessages
cl->logMessages(path, pegRevision, revisionRanges,
jstopOnCopy ? true: false, jdisoverPaths ? true : false,
jincludeMergedRevisions ? true : false,
- revProps, jlimit, &callback);
+ revProps, static_cast<long>(jlimit), &callback);
}
JNIEXPORT jlong JNICALL
@@ -401,7 +419,8 @@ Java_org_apache_subversion_javahl_SVNClient_revert
JNIEXPORT void JNICALL
Java_org_apache_subversion_javahl_SVNClient_add
(JNIEnv *env, jobject jthis, jstring jpath, jobject jdepth,
- jboolean jforce, jboolean jnoIgnore, jboolean jaddParents)
+ jboolean jforce, jboolean jnoIgnore, jboolean jnoAutoProps,
+ jboolean jaddParents)
{
JNIEntry(SVNClient, add);
SVNClient *cl = SVNClient::getCppObject(jthis);
@@ -414,8 +433,11 @@ Java_org_apache_subversion_javahl_SVNClient_add
if (JNIUtil::isExceptionThrown())
return;
- cl->add(path, EnumMapper::toDepth(jdepth), jforce ? true : false,
- jnoIgnore ? true : false, jaddParents ? true : false);
+ cl->add(path, EnumMapper::toDepth(jdepth),
+ jforce ? true : false,
+ jnoIgnore ? true : false,
+ jnoAutoProps ? true : false,
+ jaddParents ? true : false);
}
JNIEXPORT jlongArray JNICALL
@@ -531,7 +553,8 @@ JNIEXPORT void JNICALL
Java_org_apache_subversion_javahl_SVNClient_move
(JNIEnv *env, jobject jthis, jobject jsrcPaths, jstring jdestPath,
jboolean jforce, jboolean jmoveAsChild, jboolean jmakeParents,
- jobject jrevpropTable, jobject jmessage, jobject jcallback)
+ jboolean jmetadataOnly, jboolean jallowMixRev, jobject jrevpropTable,
+ jobject jmessage, jobject jcallback)
{
JNIEntry(SVNClient, move);
@@ -561,6 +584,7 @@ Java_org_apache_subversion_javahl_SVNClient_move
CommitCallback callback(jcallback);
cl->move(srcPaths, destPath, &message, jforce ? true : false,
jmoveAsChild ? true : false, jmakeParents ? true : false,
+ jmetadataOnly ? true: false, jallowMixRev ? true : false,
revprops, jcallback ? &callback : NULL);
}
@@ -711,8 +735,9 @@ Java_org_apache_subversion_javahl_SVNClient_doSwitch
JNIEXPORT void JNICALL
Java_org_apache_subversion_javahl_SVNClient_doImport
(JNIEnv *env, jobject jthis, jstring jpath, jstring jurl, jobject jdepth,
- jboolean jnoIgnore, jboolean jignoreUnknownNodeTypes, jobject jrevpropTable,
- jobject jmessage, jobject jcallback)
+ jboolean jnoIgnore, jboolean jnoAutoProps,
+ jboolean jignoreUnknownNodeTypes, jobject jrevpropTable,
+ jobject jimportFilterCallback, jobject jmessage, jobject jcommitCallback)
{
JNIEntry(SVNClient, doImport);
SVNClient *cl = SVNClient::getCppObject(jthis);
@@ -737,11 +762,14 @@ Java_org_apache_subversion_javahl_SVNClient_doImport
if (JNIUtil::isExceptionThrown())
return;
- CommitCallback callback(jcallback);
+ ImportFilterCallback importFilterCallback(jimportFilterCallback);
+ CommitCallback commitCallback(jcommitCallback);
+
cl->doImport(path, url, &message, EnumMapper::toDepth(jdepth),
- jnoIgnore ? true : false,
+ jnoIgnore ? true : false, jnoAutoProps ? true : false,
jignoreUnknownNodeTypes ? true : false, revprops,
- jcallback ? &callback : NULL);
+ jimportFilterCallback ? &importFilterCallback : NULL,
+ jcommitCallback ? &commitCallback : NULL);
}
JNIEXPORT jobject JNICALL
@@ -768,11 +796,11 @@ Java_org_apache_subversion_javahl_SVNClient_suggestMergeSources
}
JNIEXPORT void JNICALL
-Java_org_apache_subversion_javahl_SVNClient_merge__Ljava_lang_String_2Lorg_apache_subversion_javahl_types_Revision_2Ljava_lang_String_2Lorg_apache_subversion_javahl_types_Revision_2Ljava_lang_String_2ZLorg_apache_subversion_javahl_types_Depth_2ZZZ
+Java_org_apache_subversion_javahl_SVNClient_merge__Ljava_lang_String_2Lorg_apache_subversion_javahl_types_Revision_2Ljava_lang_String_2Lorg_apache_subversion_javahl_types_Revision_2Ljava_lang_String_2ZLorg_apache_subversion_javahl_types_Depth_2ZZZZ
(JNIEnv *env, jobject jthis, jstring jpath1, jobject jrevision1,
- jstring jpath2, jobject jrevision2, jstring jlocalPath, jboolean jforce,
- jobject jdepth, jboolean jignoreAncestry, jboolean jdryRun,
- jboolean jrecordOnly)
+ jstring jpath2, jobject jrevision2, jstring jlocalPath, jboolean jforceDelete,
+ jobject jdepth, jboolean jignoreMergeinfo, jboolean jdiffIgnoreAncestry,
+ jboolean jdryRun, jboolean jrecordOnly)
{
JNIEntry(SVNClient, merge);
SVNClient *cl = SVNClient::getCppObject(jthis);
@@ -802,16 +830,20 @@ Java_org_apache_subversion_javahl_SVNClient_merge__Ljava_lang_String_2Lorg_apach
return;
cl->merge(path1, revision1, path2, revision2, localPath,
- jforce ? true:false, EnumMapper::toDepth(jdepth),
- jignoreAncestry ? true:false, jdryRun ? true:false,
+ jforceDelete ? true:false,
+ EnumMapper::toDepth(jdepth),
+ jignoreMergeinfo ? true:false,
+ jdiffIgnoreAncestry ? true:false,
+ jdryRun ? true:false,
jrecordOnly ? true:false);
}
JNIEXPORT void JNICALL
-Java_org_apache_subversion_javahl_SVNClient_merge__Ljava_lang_String_2Lorg_apache_subversion_javahl_types_Revision_2Ljava_util_List_2Ljava_lang_String_2ZLorg_apache_subversion_javahl_types_Depth_2ZZZ
+Java_org_apache_subversion_javahl_SVNClient_merge__Ljava_lang_String_2Lorg_apache_subversion_javahl_types_Revision_2Ljava_util_List_2Ljava_lang_String_2ZLorg_apache_subversion_javahl_types_Depth_2ZZZZ
(JNIEnv *env, jobject jthis, jstring jpath, jobject jpegRevision,
- jobject jranges, jstring jlocalPath, jboolean jforce, jobject jdepth,
- jboolean jignoreAncestry, jboolean jdryRun, jboolean jrecordOnly)
+ jobject jranges, jstring jlocalPath, jboolean jforceDelete, jobject jdepth,
+ jboolean jignoreMergeinfo, jboolean jdiffIgnoreAncestry,
+ jboolean jdryRun, jboolean jrecordOnly)
{
JNIEntry(SVNClient, merge);
SVNClient *cl = SVNClient::getCppObject(jthis);
@@ -833,27 +865,35 @@ Java_org_apache_subversion_javahl_SVNClient_merge__Ljava_lang_String_2Lorg_apach
if (JNIUtil::isExceptionThrown())
return;
+ std::vector<RevisionRange> *revisionRanges = NULL;
+ std::vector<RevisionRange> realRevisionRanges;
// Build the revision range vector from the Java array.
- Array ranges(jranges);
- if (JNIUtil::isExceptionThrown())
- return;
-
- std::vector<RevisionRange> revisionRanges;
- std::vector<jobject> rangeVec = ranges.vector();
-
- for (std::vector<jobject>::const_iterator it = rangeVec.begin();
- it < rangeVec.end(); ++it)
+ if (jranges)
{
- RevisionRange revisionRange(*it);
+ Array ranges(jranges);
if (JNIUtil::isExceptionThrown())
return;
- revisionRanges.push_back(revisionRange);
+ std::vector<jobject> rangeVec = ranges.vector();
+
+ for (std::vector<jobject>::const_iterator it = rangeVec.begin();
+ it < rangeVec.end(); ++it)
+ {
+ RevisionRange revisionRange(*it);
+ if (JNIUtil::isExceptionThrown())
+ return;
+
+ realRevisionRanges.push_back(revisionRange);
+ }
+ revisionRanges = &realRevisionRanges;
}
cl->merge(path, pegRevision, revisionRanges, localPath,
- jforce ? true:false, EnumMapper::toDepth(jdepth),
- jignoreAncestry ? true:false, jdryRun ? true:false,
+ jforceDelete ? true:false,
+ EnumMapper::toDepth(jdepth),
+ jignoreMergeinfo ? true:false,
+ jdiffIgnoreAncestry ? true:false,
+ jdryRun ? true:false,
jrecordOnly ? true:false);
}
@@ -886,13 +926,11 @@ Java_org_apache_subversion_javahl_SVNClient_mergeReintegrate
jdryRun ? true:false);
}
-JNIEXPORT void JNICALL
-Java_org_apache_subversion_javahl_SVNClient_properties
+static void SVNClient_properties
(JNIEnv *env, jobject jthis, jstring jpath, jobject jrevision,
jobject jpegRevision, jobject jdepth, jobject jchangelists,
- jobject jproplistCallback)
+ jobject jproplistCallback, bool inherited)
{
- JNIEntry(SVNClient, properties);
SVNClient *cl = SVNClient::getCppObject(jthis);
if (cl == NULL)
{
@@ -915,15 +953,37 @@ Java_org_apache_subversion_javahl_SVNClient_properties
if (JNIUtil::isExceptionThrown())
return;
- ProplistCallback callback(jproplistCallback);
+ ProplistCallback callback(jproplistCallback, inherited);
cl->properties(path, revision, pegRevision, EnumMapper::toDepth(jdepth),
changelists, &callback);
}
JNIEXPORT void JNICALL
+Java_org_apache_subversion_javahl_SVNClient_properties__Ljava_lang_String_2Lorg_apache_subversion_javahl_types_Revision_2Lorg_apache_subversion_javahl_types_Revision_2Lorg_apache_subversion_javahl_types_Depth_2Ljava_util_Collection_2Lorg_apache_subversion_javahl_callback_ProplistCallback_2
+(JNIEnv *env, jobject jthis, jstring jpath, jobject jrevision,
+ jobject jpegRevision, jobject jdepth, jobject jchangelists,
+ jobject jproplistCallback)
+{
+ JNIEntry(SVNClient, properties);
+ SVNClient_properties(env, jthis, jpath, jrevision, jpegRevision, jdepth,
+ jchangelists, jproplistCallback, false);
+}
+
+JNIEXPORT void JNICALL
+Java_org_apache_subversion_javahl_SVNClient_properties__Ljava_lang_String_2Lorg_apache_subversion_javahl_types_Revision_2Lorg_apache_subversion_javahl_types_Revision_2Lorg_apache_subversion_javahl_types_Depth_2Ljava_util_Collection_2Lorg_apache_subversion_javahl_callback_InheritedProplistCallback_2
+(JNIEnv *env, jobject jthis, jstring jpath, jobject jrevision,
+ jobject jpegRevision, jobject jdepth, jobject jchangelists,
+ jobject jproplistCallback)
+{
+ JNIEntry(SVNClient, properties);
+ SVNClient_properties(env, jthis, jpath, jrevision, jpegRevision, jdepth,
+ jchangelists, jproplistCallback, true);
+}
+
+JNIEXPORT void JNICALL
Java_org_apache_subversion_javahl_SVNClient_propertySetRemote
(JNIEnv *env, jobject jthis, jstring jpath, jlong jbaseRev, jstring jname,
- jbyteArray jvalue, jobject jmessage, jboolean jforce, jobject jrevpropTable,
+ jbyteArray jval, jobject jmessage, jboolean jforce, jobject jrevpropTable,
jobject jcallback)
{
JNIEntry(SVNClient, propertySet);
@@ -945,7 +1005,7 @@ Java_org_apache_subversion_javahl_SVNClient_propertySetRemote
if (JNIUtil::isExceptionThrown())
return;
- JNIByteArray value(jvalue);
+ JNIByteArray value(jval);
if (JNIUtil::isExceptionThrown())
return;
@@ -954,15 +1014,15 @@ Java_org_apache_subversion_javahl_SVNClient_propertySetRemote
return;
CommitCallback callback(jcallback);
- cl->propertySetRemote(path, jbaseRev, name, &message, value,
- jforce ? true:false,
+ cl->propertySetRemote(path, static_cast<svn_revnum_t>(jbaseRev),
+ name, &message, value, jforce ? true : false,
revprops, jcallback ? &callback : NULL);
}
JNIEXPORT void JNICALL
Java_org_apache_subversion_javahl_SVNClient_propertySetLocal
(JNIEnv *env, jobject jthis, jobject jtargets, jstring jname,
- jbyteArray jvalue, jobject jdepth, jobject jchangelists, jboolean jforce)
+ jbyteArray jval, jobject jdepth, jobject jchangelists, jboolean jforce)
{
JNIEntry(SVNClient, propertySet);
SVNClient *cl = SVNClient::getCppObject(jthis);
@@ -981,7 +1041,7 @@ Java_org_apache_subversion_javahl_SVNClient_propertySetLocal
if (JNIUtil::isExceptionThrown())
return;
- JNIByteArray value(jvalue);
+ JNIByteArray value(jval);
if (JNIUtil::isExceptionThrown())
return;
@@ -1044,7 +1104,7 @@ Java_org_apache_subversion_javahl_SVNClient_revProperties
JNIEXPORT void JNICALL
Java_org_apache_subversion_javahl_SVNClient_setRevProperty
(JNIEnv *env, jobject jthis, jstring jpath, jstring jname, jobject jrevision,
- jstring jvalue, jstring joriginalValue, jboolean jforce)
+ jstring jval, jstring joriginalValue, jboolean jforce)
{
JNIEntry(SVNClient, setRevProperty);
SVNClient *cl = SVNClient::getCppObject(jthis);
@@ -1065,7 +1125,7 @@ Java_org_apache_subversion_javahl_SVNClient_setRevProperty
if (JNIUtil::isExceptionThrown())
return;
- JNIStringHolder value(jvalue);
+ JNIStringHolder value(jval);
if (JNIUtil::isExceptionThrown())
return;
@@ -1080,7 +1140,7 @@ Java_org_apache_subversion_javahl_SVNClient_setRevProperty
JNIEXPORT jbyteArray JNICALL
Java_org_apache_subversion_javahl_SVNClient_propertyGet
(JNIEnv *env, jobject jthis, jstring jpath, jstring jname, jobject jrevision,
- jobject jpegRevision)
+ jobject jpegRevision, jobject jchangelists)
{
JNIEntry(SVNClient, propertyGet);
SVNClient *cl = SVNClient::getCppObject(jthis);
@@ -1105,7 +1165,11 @@ Java_org_apache_subversion_javahl_SVNClient_propertyGet
if (JNIUtil::isExceptionThrown())
return NULL;
- return cl->propertyGet(path, name, revision, pegRevision);
+ StringArray changelists(jchangelists);
+ if (JNIUtil::isExceptionThrown())
+ return NULL;
+
+ return cl->propertyGet(path, name, revision, pegRevision, changelists);
}
JNIEXPORT jobject JNICALL
@@ -1131,6 +1195,7 @@ Java_org_apache_subversion_javahl_SVNClient_getMergeinfo
JNIEXPORT void JNICALL Java_org_apache_subversion_javahl_SVNClient_getMergeinfoLog
(JNIEnv *env, jobject jthis, jobject jkind, jstring jpathOrUrl,
jobject jpegRevision, jstring jmergeSourceUrl, jobject jsrcPegRevision,
+ jobject jsrcStartRevision, jobject jsrcEndRevision,
jboolean jdiscoverChangedPaths, jobject jdepth, jobject jrevProps,
jobject jlogMessageCallback)
{
@@ -1150,6 +1215,14 @@ JNIEXPORT void JNICALL Java_org_apache_subversion_javahl_SVNClient_getMergeinfoL
if (JNIUtil::isExceptionThrown())
return;
+ Revision srcStartRevision(jsrcStartRevision);
+ if (JNIUtil::isExceptionThrown())
+ return;
+
+ Revision srcEndRevision(jsrcEndRevision);
+ if (JNIUtil::isExceptionThrown())
+ return;
+
JNIStringHolder pathOrUrl(jpathOrUrl);
if (JNIUtil::isExceptionThrown())
return;
@@ -1166,17 +1239,19 @@ JNIEXPORT void JNICALL Java_org_apache_subversion_javahl_SVNClient_getMergeinfoL
cl->getMergeinfoLog(EnumMapper::toMergeinfoLogKind(jkind),
pathOrUrl, pegRevision, mergeSourceUrl,
- srcPegRevision, jdiscoverChangedPaths ? true : false,
+ srcPegRevision, srcStartRevision, srcEndRevision,
+ jdiscoverChangedPaths ? true : false,
EnumMapper::toDepth(jdepth), revProps, &callback);
}
JNIEXPORT void JNICALL
-Java_org_apache_subversion_javahl_SVNClient_diff__Ljava_lang_String_2Lorg_apache_subversion_javahl_types_Revision_2Ljava_lang_String_2Lorg_apache_subversion_javahl_types_Revision_2Ljava_lang_String_2Ljava_lang_String_2Lorg_apache_subversion_javahl_types_Depth_2Ljava_util_Collection_2ZZZZ
+Java_org_apache_subversion_javahl_SVNClient_diff__Ljava_lang_String_2Lorg_apache_subversion_javahl_types_Revision_2Ljava_lang_String_2Lorg_apache_subversion_javahl_types_Revision_2Ljava_lang_String_2Ljava_io_OutputStream_2Lorg_apache_subversion_javahl_types_Depth_2Ljava_util_Collection_2ZZZZZZLorg_apache_subversion_javahl_types_DiffOptions_2
(JNIEnv *env, jobject jthis, jstring jtarget1, jobject jrevision1,
jstring jtarget2, jobject jrevision2, jstring jrelativeToDir,
- jstring joutfileName, jobject jdepth, jobject jchangelists,
+ jobject jstream, jobject jdepth, jobject jchangelists,
jboolean jignoreAncestry, jboolean jnoDiffDeleted, jboolean jforce,
- jboolean jcopiesAsAdds)
+ jboolean jcopiesAsAdds, jboolean jignoreProps, jboolean jpropsOnly,
+ jobject jdiffOptions)
{
JNIEntry(SVNClient, diff);
SVNClient *cl = SVNClient::getCppObject(jthis);
@@ -1205,7 +1280,7 @@ Java_org_apache_subversion_javahl_SVNClient_diff__Ljava_lang_String_2Lorg_apache
if (JNIUtil::isExceptionThrown())
return;
- JNIStringHolder outfileName(joutfileName);
+ OutputStream dataOut(jstream);
if (JNIUtil::isExceptionThrown())
return;
@@ -1213,20 +1288,26 @@ Java_org_apache_subversion_javahl_SVNClient_diff__Ljava_lang_String_2Lorg_apache
if (JNIUtil::isExceptionThrown())
return;
- cl->diff(target1, revision1, target2, revision2, relativeToDir, outfileName,
+ DiffOptions options(jdiffOptions);
+ if (JNIUtil::isExceptionThrown())
+ return;
+
+ cl->diff(target1, revision1, target2, revision2, relativeToDir, dataOut,
EnumMapper::toDepth(jdepth), changelists,
jignoreAncestry ? true:false,
jnoDiffDeleted ? true:false, jforce ? true:false,
- jcopiesAsAdds ? true:false);
+ jcopiesAsAdds ? true:false, jignoreProps ? true:false,
+ jpropsOnly ? true:false, options);
}
JNIEXPORT void JNICALL
-Java_org_apache_subversion_javahl_SVNClient_diff__Ljava_lang_String_2Lorg_apache_subversion_javahl_types_Revision_2Lorg_apache_subversion_javahl_types_Revision_2Lorg_apache_subversion_javahl_types_Revision_2Ljava_lang_String_2Ljava_lang_String_2Lorg_apache_subversion_javahl_types_Depth_2Ljava_util_Collection_2ZZZZ
+Java_org_apache_subversion_javahl_SVNClient_diff__Ljava_lang_String_2Lorg_apache_subversion_javahl_types_Revision_2Lorg_apache_subversion_javahl_types_Revision_2Lorg_apache_subversion_javahl_types_Revision_2Ljava_lang_String_2Ljava_io_OutputStream_2Lorg_apache_subversion_javahl_types_Depth_2Ljava_util_Collection_2ZZZZZZLorg_apache_subversion_javahl_types_DiffOptions_2
(JNIEnv *env, jobject jthis, jstring jtarget, jobject jpegRevision,
jobject jstartRevision, jobject jendRevision, jstring jrelativeToDir,
- jstring joutfileName, jobject jdepth, jobject jchangelists,
+ jobject jstream, jobject jdepth, jobject jchangelists,
jboolean jignoreAncestry, jboolean jnoDiffDeleted, jboolean jforce,
- jboolean jcopiesAsAdds)
+ jboolean jcopiesAsAdds, jboolean jignoreProps, jboolean jpropsOnly,
+ jobject jdiffOptions)
{
JNIEntry(SVNClient, diff);
SVNClient *cl = SVNClient::getCppObject(jthis);
@@ -1251,7 +1332,7 @@ Java_org_apache_subversion_javahl_SVNClient_diff__Ljava_lang_String_2Lorg_apache
if (JNIUtil::isExceptionThrown())
return;
- JNIStringHolder outfileName(joutfileName);
+ OutputStream dataOut(jstream);
if (JNIUtil::isExceptionThrown())
return;
@@ -1263,11 +1344,16 @@ Java_org_apache_subversion_javahl_SVNClient_diff__Ljava_lang_String_2Lorg_apache
if (JNIUtil::isExceptionThrown())
return;
+ DiffOptions options(jdiffOptions);
+ if (JNIUtil::isExceptionThrown())
+ return;
+
cl->diff(target, pegRevision, startRevision, endRevision, relativeToDir,
- outfileName, EnumMapper::toDepth(jdepth), changelists,
+ dataOut, EnumMapper::toDepth(jdepth), changelists,
jignoreAncestry ? true:false,
jnoDiffDeleted ? true:false, jforce ? true:false,
- jcopiesAsAdds ? true:false);
+ jcopiesAsAdds ? true:false, jignoreProps ? true:false,
+ jpropsOnly ? true:false, options);
}
JNIEXPORT void JNICALL
@@ -1760,7 +1846,8 @@ Java_org_apache_subversion_javahl_SVNClient_patch
return;
PatchCallback callback(jcallback);
- cl->patch(patchPath, targetPath, jdryRun ? true : false, (int) jstripCount,
+ cl->patch(patchPath, targetPath,
+ jdryRun ? true : false, static_cast<int>(jstripCount),
jreverse ? true : false, jignoreWhitespace ? true : false,
jremoveTempfiles ? true : false, &callback);
}
diff --git a/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNRepos.cpp b/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNRepos.cpp
index b9ddbc6..ee1c7c1 100644
--- a/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNRepos.cpp
+++ b/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNRepos.cpp
@@ -60,7 +60,7 @@ Java_org_apache_subversion_javahl_SVNRepos_dispose
JNIUtil::throwError(_("bad C++ this"));
return;
}
- cl->dispose();
+ cl->dispose(jthis);
}
JNIEXPORT void JNICALL
@@ -170,7 +170,7 @@ Java_org_apache_subversion_javahl_SVNRepos_dump
JNIEXPORT void JNICALL
Java_org_apache_subversion_javahl_SVNRepos_hotcopy
(JNIEnv *env, jobject jthis, jobject jpath, jobject jtargetPath,
- jboolean jcleanLogs)
+ jboolean jcleanLogs, jboolean jincremental)
{
JNIEntry(SVNRepos, hotcopy);
SVNRepos *cl = SVNRepos::getCppObject(jthis);
@@ -188,7 +188,8 @@ Java_org_apache_subversion_javahl_SVNRepos_hotcopy
if (JNIUtil::isExceptionThrown())
return;
- cl->hotcopy(path, targetPath, jcleanLogs ? true : false);
+ cl->hotcopy(path, targetPath, jcleanLogs ? true : false,
+ jincremental ? true : false);
}
JNIEXPORT void JNICALL
@@ -240,6 +241,7 @@ Java_org_apache_subversion_javahl_SVNRepos_listUnusedDBLogs
JNIEXPORT void JNICALL
Java_org_apache_subversion_javahl_SVNRepos_load
(JNIEnv *env, jobject jthis, jobject jpath, jobject jinputData,
+ jobject jrevisionStart, jobject jrevisionEnd,
jboolean jignoreUUID, jboolean jforceUUID, jboolean jusePreCommitHook,
jboolean jusePostCommitHook, jstring jrelativePath, jobject jnotifyCallback)
{
@@ -263,12 +265,23 @@ Java_org_apache_subversion_javahl_SVNRepos_load
if (JNIUtil::isExceptionThrown())
return;
+ Revision revisionStart(jrevisionStart);
+ if (JNIUtil::isExceptionThrown())
+ return;
+
+ Revision revisionEnd(jrevisionEnd, true);
+ if (JNIUtil::isExceptionThrown())
+ return;
+
ReposNotifyCallback notifyCallback(jnotifyCallback);
- cl->load(path, inputData, jignoreUUID ? true : false,
- jforceUUID ? true : false, jusePreCommitHook ? true : false,
- jusePostCommitHook ? true : false, relativePath,
- jnotifyCallback != NULL ? &notifyCallback : NULL);
+ cl->load(path, inputData, revisionStart, revisionEnd,
+ jignoreUUID ? true : false,
+ jforceUUID ? true : false,
+ jusePreCommitHook ? true : false,
+ jusePostCommitHook ? true : false,
+ relativePath,
+ (jnotifyCallback != NULL ? &notifyCallback : NULL));
}
JNIEXPORT void JNICALL
@@ -316,6 +329,28 @@ Java_org_apache_subversion_javahl_SVNRepos_recover
}
JNIEXPORT void JNICALL
+Java_org_apache_subversion_javahl_SVNRepos_freeze
+(JNIEnv *env, jobject jthis, jobject jaction, jobjectArray jpaths)
+{
+ JNIEntry(SVNRepos, freeze);
+ SVNRepos *cl = SVNRepos::getCppObject(jthis);
+ if (cl == NULL)
+ {
+ JNIUtil::throwError(_("bad C++ this"));
+ return;
+ }
+
+ if (!jpaths || !env->GetArrayLength(jpaths))
+ {
+ JNIUtil::throwError(_("list of repository paths must not be empty"));
+ return;
+ }
+
+ ReposFreezeAction action(jaction);
+ cl->freeze(jpaths, &action);
+}
+
+JNIEXPORT void JNICALL
Java_org_apache_subversion_javahl_SVNRepos_rmtxns
(JNIEnv *env, jobject jthis, jobject jpath, jobjectArray jtransactions)
{
diff --git a/subversion/bindings/javahl/native/org_apache_subversion_javahl_types_VersionExtended.cpp b/subversion/bindings/javahl/native/org_apache_subversion_javahl_types_VersionExtended.cpp
new file mode 100644
index 0000000..e24801a
--- /dev/null
+++ b/subversion/bindings/javahl/native/org_apache_subversion_javahl_types_VersionExtended.cpp
@@ -0,0 +1,264 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ *
+ * @file org_apache_subversion_javahl_types_VersionExtended.cpp
+ * @brief Implementation of the native methods in the Java class VersionExtended.
+ */
+
+#include "../include/org_apache_subversion_javahl_types_VersionExtended.h"
+#include "../include/org_apache_subversion_javahl_types_VersionExtended_LinkedLib.h"
+#include "../include/org_apache_subversion_javahl_types_VersionExtended_LinkedLibIterator.h"
+#include "../include/org_apache_subversion_javahl_types_VersionExtended_LoadedLib.h"
+#include "../include/org_apache_subversion_javahl_types_VersionExtended_LoadedLibIterator.h"
+#include "VersionExtended.h"
+#include "JNIStackElement.h"
+#include <string>
+
+// VersionExtended native methods
+
+JNIEXPORT jstring JNICALL
+Java_org_apache_subversion_javahl_types_VersionExtended_getBuildDate(
+ JNIEnv *env, jobject jthis)
+{
+ JNIEntry(VersionExtended, getBuildDate);
+ const VersionExtended *const vx = VersionExtended::getCppObject(jthis);
+ if (vx)
+ return env->NewStringUTF(vx->build_date());
+ return 0;
+}
+
+JNIEXPORT jstring JNICALL
+Java_org_apache_subversion_javahl_types_VersionExtended_getBuildTime(
+ JNIEnv *env, jobject jthis)
+{
+ JNIEntry(VersionExtended, getBuildTime);
+ const VersionExtended *const vx = VersionExtended::getCppObject(jthis);
+ if (vx)
+ return env->NewStringUTF(vx->build_time());
+ return 0;
+}
+
+JNIEXPORT jstring JNICALL
+Java_org_apache_subversion_javahl_types_VersionExtended_getBuildHost(
+ JNIEnv *env, jobject jthis)
+{
+ JNIEntry(VersionExtended, getBuildHost);
+ const VersionExtended *const vx = VersionExtended::getCppObject(jthis);
+ if (vx)
+ return env->NewStringUTF(vx->build_host());
+ return 0;
+}
+
+JNIEXPORT jstring JNICALL
+Java_org_apache_subversion_javahl_types_VersionExtended_getCopyright(
+ JNIEnv *env, jobject jthis)
+{
+ JNIEntry(VersionExtended, getCopyright);
+ const VersionExtended *const vx = VersionExtended::getCppObject(jthis);
+ if (vx)
+ return env->NewStringUTF(vx->copyright());
+ return 0;
+}
+
+JNIEXPORT jstring JNICALL
+Java_org_apache_subversion_javahl_types_VersionExtended_getRuntimeHost(
+ JNIEnv *env, jobject jthis)
+{
+ JNIEntry(VersionExtended, getRuntimeHost);
+ const VersionExtended *const vx = VersionExtended::getCppObject(jthis);
+ if (vx)
+ return env->NewStringUTF(vx->runtime_host());
+ return 0;
+}
+
+JNIEXPORT jstring JNICALL
+Java_org_apache_subversion_javahl_types_VersionExtended_getRuntimeOSName(
+ JNIEnv *env, jobject jthis)
+{
+ JNIEntry(VersionExtended, getRuntimeOSName);
+ const VersionExtended *const vx = VersionExtended::getCppObject(jthis);
+ if (vx)
+ return env->NewStringUTF(vx->runtime_osname());
+ return 0;
+}
+
+
+// VersionExtended.LinkedLib native methods
+
+namespace {
+static const svn_version_ext_linked_lib_t *
+getLinkedLib(JNIEnv *env, jobject jthis)
+{
+ static volatile jfieldID fid = 0;
+ if (!fid)
+ {
+ fid = env->GetFieldID(env->GetObjectClass(jthis), "index", "I");
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
+ }
+
+ const int index = env->GetIntField(jthis, fid);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
+
+ const VersionExtended *const vx =
+ VersionExtended::getCppObjectFromLinkedLib(jthis);
+ if (vx)
+ return vx->get_linked_lib(index);
+ return NULL;
+}
+} // anonymous namespace
+
+JNIEXPORT jstring JNICALL
+Java_org_apache_subversion_javahl_types_VersionExtended_00024LinkedLib_getName(
+ JNIEnv *env, jobject jthis)
+{
+ JNIEntry(VersionExtended$LinkedLib, getName);
+ const svn_version_ext_linked_lib_t *const lib = getLinkedLib(env, jthis);
+ if (lib)
+ return env->NewStringUTF(lib->name);
+ return 0;
+}
+
+JNIEXPORT jstring JNICALL
+Java_org_apache_subversion_javahl_types_VersionExtended_00024LinkedLib_getCompiledVersion(
+ JNIEnv *env, jobject jthis)
+{
+ JNIEntry(VersionExtended$LinkedLib, getCompiledVersion);
+ const svn_version_ext_linked_lib_t *const lib = getLinkedLib(env, jthis);
+ if (lib)
+ return env->NewStringUTF(lib->compiled_version);
+ return 0;
+}
+
+JNIEXPORT jstring JNICALL
+Java_org_apache_subversion_javahl_types_VersionExtended_00024LinkedLib_getRuntimeVersion(
+ JNIEnv *env, jobject jthis)
+{
+ JNIEntry(VersionExtended$LinkedLib, getRuntimeVersion);
+ const svn_version_ext_linked_lib_t *const lib = getLinkedLib(env, jthis);
+ if (lib)
+ return env->NewStringUTF(lib->runtime_version);
+ return 0;
+}
+
+
+// VersionExtended.LoadedLib native methods
+
+namespace {
+static const svn_version_ext_loaded_lib_t *
+getLoadedLib(JNIEnv *env, jobject jthis)
+{
+ static volatile jfieldID fid = 0;
+ if (!fid)
+ {
+ fid = env->GetFieldID(env->GetObjectClass(jthis), "index", "I");
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
+ }
+
+ const int index = env->GetIntField(jthis, fid);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
+
+ const VersionExtended *const vx =
+ VersionExtended::getCppObjectFromLoadedLib(jthis);
+ if (vx)
+ return vx->get_loaded_lib(index);
+ return NULL;
+}
+} // anonymous namespace
+
+JNIEXPORT jstring JNICALL
+Java_org_apache_subversion_javahl_types_VersionExtended_00024LoadedLib_getName(
+ JNIEnv *env, jobject jthis)
+{
+ JNIEntry(VersionExtended$LoadedLib, getName);
+ const svn_version_ext_loaded_lib_t *const lib = getLoadedLib(env, jthis);
+ if (lib)
+ return env->NewStringUTF(lib->name);
+ return 0;
+}
+
+JNIEXPORT jstring JNICALL
+Java_org_apache_subversion_javahl_types_VersionExtended_00024LoadedLib_getVersion(
+ JNIEnv *env, jobject jthis)
+{
+ JNIEntry(VersionExtended$LoadedLib, getVersion);
+ const svn_version_ext_loaded_lib_t *const lib = getLoadedLib(env, jthis);
+ if (lib)
+ return env->NewStringUTF(lib->version);
+ return 0;
+}
+
+
+// VersionExtended.LinkedLibIterator and .LoadedLibIterator native methods
+
+JNIEXPORT jboolean JNICALL
+Java_org_apache_subversion_javahl_types_VersionExtended_00024LinkedLibIterator_hasNext(
+ JNIEnv *env, jobject jthis)
+{
+ JNIEntry(VersionExtended$LinkedLibIterator, hasNext);
+
+ static volatile jfieldID fid = 0;
+ if (!fid)
+ {
+ fid = env->GetFieldID(env->GetObjectClass(jthis), "index", "I");
+ if (JNIUtil::isJavaExceptionThrown())
+ return false;
+ }
+
+ const int index = env->GetIntField(jthis, fid);
+ if (JNIUtil::isJavaExceptionThrown())
+ return false;
+
+ const VersionExtended *const vx =
+ VersionExtended::getCppObjectFromLinkedLibIterator(jthis);
+ if (vx)
+ return !!vx->get_linked_lib(1 + index);
+ return false;
+}
+
+JNIEXPORT jboolean JNICALL
+Java_org_apache_subversion_javahl_types_VersionExtended_00024LoadedLibIterator_hasNext(
+ JNIEnv *env, jobject jthis)
+{
+ JNIEntry(VersionExtended$LoadedLibIterator, hasNext);
+
+ static volatile jfieldID fid = 0;
+ if (!fid)
+ {
+ fid = env->GetFieldID(env->GetObjectClass(jthis), "index", "I");
+ if (JNIUtil::isJavaExceptionThrown())
+ return false;
+ }
+
+ const int index = env->GetIntField(jthis, fid);
+ if (JNIUtil::isJavaExceptionThrown())
+ return false;
+
+ const VersionExtended *const vx =
+ VersionExtended::getCppObjectFromLoadedLibIterator(jthis);
+ if (vx)
+ return !!vx->get_loaded_lib(1 + index);
+ return false;
+}
diff --git a/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientNotifyInformation.java b/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientNotifyInformation.java
index b1213c2..8a59e4d 100644
--- a/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientNotifyInformation.java
+++ b/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientNotifyInformation.java
@@ -544,7 +544,30 @@ public class ClientNotifyInformation extends EventObject
failed_forbidden_by_server ("failed forbidden by server"),
/** Operation skipped the path because it was conflicted */
- skip_conflicted ("skipped conflicted path");
+ skip_conflicted ("skipped conflicted path"),
+
+ /** The lock on a file was removed during update */
+ update_broken_lock ("broken lock removed"),
+
+ /** Operation failed because a node is obstructed */
+ failed_obstructed ("failed by obstruction"),
+
+ /** Conflict resolver is starting. */
+ conflict_resolver_starting ("conflict resolver starting"),
+
+ /** Conflict resolver is done. */
+ conflict_resolver_done ("conflict resolver done"),
+
+ /** Operation left local modifications. */
+ left_local_modifications ("left local modifications"),
+
+ /** A copy from a foreign repository has started
+ * @since New in 1.8. */
+ foreign_copy_begin ("foreign copy begin"),
+
+ /** A move in the working copy has been broken
+ * @since New in 1.8. */
+ move_broken ("move broken");
/**
* The description of the action.
diff --git a/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItem.java b/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItem.java
index 43dec0a..986faf6 100644
--- a/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItem.java
+++ b/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItem.java
@@ -70,6 +70,11 @@ public class CommitItem implements java.io.Serializable
long revision;
/**
+ * the source of the move
+ */
+ String movedFromPath;
+
+ /**
* This constructor will be only called from the jni code.
* @param p path to the commit item
* @param nk kind of node (see NodeKind)
@@ -77,8 +82,9 @@ public class CommitItem implements java.io.Serializable
* @param u url of the item
* @param cu copy source url
* @param r revision number
+ * @param mf move source abspath
*/
- public CommitItem(String p, NodeKind nk, int sf, String u, String cu, long r)
+ CommitItem(String p, NodeKind nk, int sf, String u, String cu, long r, String mf)
{
path = p;
nodeKind = nk;
@@ -86,6 +92,7 @@ public class CommitItem implements java.io.Serializable
url = u;
copyUrl = cu;
revision = r;
+ movedFromPath = mf;
}
/**
@@ -149,4 +156,13 @@ public class CommitItem implements java.io.Serializable
{
return revision;
}
+
+ /**
+ * @return the absolute path of the source of a move.
+ * @since 1.8
+ */
+ public String getMovedFromPath()
+ {
+ return movedFromPath;
+ }
}
diff --git a/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItemStateFlags.java b/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItemStateFlags.java
index 6ef0efb..6e8f593 100644
--- a/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItemStateFlags.java
+++ b/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItemStateFlags.java
@@ -53,4 +53,15 @@ public interface CommitItemStateFlags
* the item has been copied
*/
public static final int IsCopy=16;
+
+ /**
+ * the item has a lock token
+ */
+ public static final int LockToken = 32;
+
+ /**
+ * the item was moved to this location
+ * @since 1.8
+ */
+ public static int MovedHere = 64;
}
diff --git a/subversion/bindings/javahl/src/org/apache/subversion/javahl/ConflictDescriptor.java b/subversion/bindings/javahl/src/org/apache/subversion/javahl/ConflictDescriptor.java
index 75089c0..f538c63 100644
--- a/subversion/bindings/javahl/src/org/apache/subversion/javahl/ConflictDescriptor.java
+++ b/subversion/bindings/javahl/src/org/apache/subversion/javahl/ConflictDescriptor.java
@@ -244,13 +244,27 @@ public class ConflictDescriptor
/**
* Object is already added or schedule-add.
+ * @since 1.6
*/
added,
/**
* Object is already replaced.
+ * @since 1.7
*/
- replaced;
+ replaced,
+
+ /**
+ * Object is moved away.
+ * @since 1.8
+ */
+ moved_away,
+
+ /**
+ * Object is moved here.
+ * @since 1.8
+ */
+ moved_here;
}
public enum Operation
diff --git a/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java b/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
index b18ea2e..2ffe446 100644
--- a/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
+++ b/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
@@ -51,6 +51,12 @@ public interface ISVNClient
public Version getVersion();
/**
+ * @return Extended version information about the underlying
+ * native libraries and operating system.
+ */
+ public VersionExtended getVersionExtended(boolean verbose);
+
+ /**
* @return The name of the working copy's administrative
* directory, which is usually <code>.svn</code>.
* @see <a
@@ -84,7 +90,7 @@ public interface ISVNClient
throws ClientException;
/**
- * Lists the directory entries of an url on the server.
+ * Lists the directory entries of a url on the server.
* @param url the url to list
* @param revision the revision to list
* @param pegRevision the revision to interpret url
@@ -223,12 +229,30 @@ public interface ISVNClient
* ignore patterns
* @param addParents add any intermediate parents to the working copy
* @throws ClientException
+ * @note this method behaves like the 1.8 version with noAutoProps=false
*/
void add(String path, Depth depth, boolean force, boolean noIgnores,
boolean addParents)
throws ClientException;
/**
+ * Adds a file to the repository.
+ * @param path path to be added.
+ * @param depth the depth to recurse into subdirectories
+ * @param force if adding a directory and recurse true and path is a
+ * directory, all not already managed files are added.
+ * @param noIgnores if false, don't add files or directories matching
+ * ignore patterns
+ * @param noAutoProps if true, ignore any auto-props configuration
+ * @param addParents add any intermediate parents to the working copy
+ * @throws ClientException
+ * @since 1.8
+ */
+ void add(String path, Depth depth, boolean force,
+ boolean noIgnores, boolean noAutoProps, boolean addParents)
+ throws ClientException;
+
+ /**
* Updates the directories or files from repository
* @param path array of target files.
* @param revision the revision number to update.
@@ -298,12 +322,27 @@ public interface ISVNClient
* @param moveAsChild Whether to move <code>srcPaths</code> as
* children of <code>destPath</code>.
* @param makeParents Whether to create intermediate parents.
+ * @param metadataOnly Move just the metadata and not the working files/dirs
+ * @param allowMixRev If true use copy and delete without move tracking
+ * when a srcPath is mixed-revision, if false return
+ * an error when a srcPath is mixed-revision.
* @param revpropTable A string-to-string mapping of revision properties
* to values which will be set if this operation
* results in a commit.
* @param handler the commit message callback, may be <code>null</code>
* if <code>destPath</code> is not a URL
* @throws ClientException If the move operation fails.
+ * @since 1.8
+ */
+ void move(Set<String> srcPaths, String destPath, boolean force,
+ boolean moveAsChild, boolean makeParents, boolean metadataOnly,
+ boolean allowMixRev, Map<String, String> revpropTable,
+ CommitMessageCallback handler, CommitCallback callback)
+ throws ClientException;
+
+ /**
+ * @deprecated Provided for backward compatibility with 1.7. Passes
+ * metadataOnly false and allowMixRev true.
*/
void move(Set<String> srcPaths, String destPath, boolean force,
boolean moveAsChild, boolean makeParents,
@@ -394,14 +433,44 @@ public interface ISVNClient
* @param url the target url
* @param depth depth to traverse into subdirectories
* @param noIgnore whether to add files matched by ignore patterns
+ * @param noAutoProps if true, ignore any auto-props configuration
+ * @param ignoreUnknownNodeTypes whether to ignore files which
+ * the node type is not konwn, just as pipes
+ * @param revpropTable A string-to-string mapping of revision properties
+ * to values which will be set if this operation
+ * results in a commit.
+ * @param messageHandler the commit message callback
+ * @param commitCallback the commit status callback
+ * @throws ClientException
+ * @since 1.8
+ */
+ void doImport(String path, String url, Depth depth,
+ boolean noIgnore, boolean noAutoProps,
+ boolean ignoreUnknownNodeTypes,
+ Map<String, String> revpropTable,
+ ImportFilterCallback importFilterCallback,
+ CommitMessageCallback messageHandler,
+ CommitCallback commitCallback)
+ throws ClientException;
+
+
+ /**
+ * Import a file or directory into a repository directory at
+ * head.
+ * @param path the local path
+ * @param url the target url
+ * @param depth depth to traverse into subdirectories
+ * @param noIgnore whether to add files matched by ignore patterns
* @param ignoreUnknownNodeTypes whether to ignore files which
* the node type is not konwn, just as pipes
* @param revpropTable A string-to-string mapping of revision properties
* to values which will be set if this operation
* results in a commit.
* @param handler the commit message callback
+ * @param callback the commit status callback
* @throws ClientException
- *
+ * @note this method behaves like the 1.8 version with noAutoProps=false
+ * and without the filtering option.
*/
void doImport(String path, String url, Depth depth,
boolean noIgnore, boolean ignoreUnknownNodeTypes,
@@ -429,10 +498,35 @@ public interface ISVNClient
* @param localPath target local path
* @param force overwrite local changes
* @param depth how deep to traverse into subdirectories
+ * @param ignoreMergeinfo ignore merge history, treat sources as unrelated
+ * @param diffIgnoreAncestry always treat source files as related
+ * @param dryRun do not change anything
+ * @param recordOnly record mergeinfo but do not run merge
+ * @throws ClientException
+ * @since 1.8
+ */
+ void merge(String path1, Revision revision1, String path2,
+ Revision revision2, String localPath, boolean force, Depth depth,
+ boolean ignoreMergeinfo, boolean diffIgnoreAncestry,
+ boolean dryRun, boolean recordOnly)
+ throws ClientException;
+
+ /**
+ * Merge changes from two paths into a new local path.
+ *
+ * @param path1 first path or url
+ * @param revision1 first revision
+ * @param path2 second path or url
+ * @param revision2 second revision
+ * @param localPath target local path
+ * @param force overwrite local changes
+ * @param depth how deep to traverse into subdirectories
* @param ignoreAncestry ignore if files are not related
* @param dryRun do not change anything
* @param recordOnly record mergeinfo but do not run merge
* @throws ClientException
+ * @note Behaves like the 1.8 where ignoreAncestry maps to
+ * both ignoreMergeinfo and diffIgnoreAncestry
*/
void merge(String path1, Revision revision1, String path2,
Revision revision2, String localPath, boolean force, Depth depth,
@@ -443,7 +537,31 @@ public interface ISVNClient
* Merge set of revisions into a new local path.
* @param path path or url
* @param pegRevision revision to interpret path
- * @param revisions revisions to merge
+ * @param revisions revisions to merge; may be null, indicating that
+ * the optimal range should be determined automatcially
+ * @param localPath target local path
+ * @param force overwrite local changes
+ * @param depth how deep to traverse into subdirectories
+ * @param ignoreMergeinfo ignore merge history, treat sources as unrelated
+ * @param diffIgnoreAncestry always treat source files as related
+ * @param dryRun do not change anything
+ * @param recordOnly record mergeinfo but do not run merge
+ * @throws ClientException
+ * @since 1.8
+ */
+ void merge(String path, Revision pegRevision, List<RevisionRange> revisions,
+ String localPath, boolean force, Depth depth,
+ boolean ignoreMergeinfo, boolean diffIgnoreAncestry,
+ boolean dryRun, boolean recordOnly)
+ throws ClientException;
+
+ /**
+ * Merge set of revisions into a new local path.
+ * @param path path or url
+ * @param pegRevision revision to interpret path
+ * @param revisions revisions to merge;
+ * may be null, indicating that the optimal range
+ * should be determined automatcially (new in 1.8)
* @param localPath target local path
* @param force overwrite local changes
* @param depth how deep to traverse into subdirectories
@@ -451,6 +569,8 @@ public interface ISVNClient
* @param dryRun do not change anything
* @param recordOnly record mergeinfo but do not run merge
* @throws ClientException
+ * @note Behaves like the 1.8 where ignoreAncestry maps to
+ * both ignoreMergeinfo and diffIgnoreAncestry
*/
void merge(String path, Revision pegRevision, List<RevisionRange> revisions,
String localPath, boolean force, Depth depth,
@@ -472,6 +592,7 @@ public interface ISVNClient
* @param localPath target local path
* @param dryRun do not change anything
* @throws ClientException
+ * @deprecated Will be removed in a future release
*/
void mergeReintegrate(String path, Revision pegRevision,
String localPath, boolean dryRun)
@@ -495,10 +616,35 @@ public interface ISVNClient
* @param pegRevision peg rev for pathOrUrl
* @param mergeSourceUrl the source of the merge
* @param srcPegRevision peg rev for mergeSourceUrl
+ * @param srcStartRevieion lower bound of the source revision range
+ * @param srcEndRevision upper bound of the source revision range
* @param discoverChangedPaths return paths of changed items
* @param depth the depth to recurse to
* @param revProps the revprops to retrieve
* @param callback the object to receive the log messages
+ * @since 1.8
+ */
+ void getMergeinfoLog(Mergeinfo.LogKind kind, String pathOrUrl,
+ Revision pegRevision, String mergeSourceUrl,
+ Revision srcPegRevision,
+ Revision srcStartRevision, Revision srcEndRevision,
+ boolean discoverChangedPaths,
+ Depth depth, Set<String> revProps,
+ LogMessageCallback callback)
+ throws ClientException;
+
+ /**
+ * Retrieve either merged or eligible-to-be-merged revisions.
+ * @param kind kind of revisions to receive
+ * @param pathOrUrl target of merge
+ * @param pegRevision peg rev for pathOrUrl
+ * @param mergeSourceUrl the source of the merge
+ * @param srcPegRevision peg rev for mergeSourceUrl
+ * @param discoverChangedPaths return paths of changed items
+ * @param depth the depth to recurse to
+ * @param revProps the revprops to retrieve
+ * @param callback the object to receive the log messages
+ * @note Behaves like the 1.8 version, with unspecified revision range.
*/
void getMergeinfoLog(Mergeinfo.LogKind kind, String pathOrUrl,
Revision pegRevision, String mergeSourceUrl,
@@ -521,9 +667,54 @@ public interface ISVNClient
* @param force diff even on binary files
* @param copiesAsAdds if set, copied files will be shown in their
* entirety, not as diffs from their sources
+ * @param ignoreProps don't show property diffs
+ * @param propsOnly show property changes only
+ * @param options additional options for controlling the output
+ * @throws ClientException
+ * @since 1.8
+ */
+ void diff(String target1, Revision revision1, String target2,
+ Revision revision2, String relativeToDir, OutputStream outStream,
+ Depth depth, Collection<String> changelists,
+ boolean ignoreAncestry, boolean noDiffDeleted, boolean force,
+ boolean copiesAsAdds, boolean ignoreProps, boolean propsOnly,
+ DiffOptions options)
+ throws ClientException;
+
+ void diff(String target1, Revision revision1, String target2,
+ Revision revision2, String relativeToDir, String outFileName,
+ Depth depth, Collection<String> changelists,
+ boolean ignoreAncestry, boolean noDiffDeleted, boolean force,
+ boolean copiesAsAdds, boolean ignoreProps, boolean propsOnly,
+ DiffOptions options)
+ throws ClientException;
+
+ /**
+ * Display the differences between two paths
+ * @param target1 first path or url
+ * @param revision1 first revision
+ * @param target2 second path or url
+ * @param revision2 second revision
+ * @param relativeToDir index path is relative to this path
+ * @param outFileName file name where difference are written
+ * @param depth how deep to traverse into subdirectories
+ * @param ignoreAncestry ignore if files are not related
+ * @param noDiffDeleted no output on deleted files
+ * @param force diff even on binary files
+ * @param copiesAsAdds if set, copied files will be shown in their
+ * entirety, not as diffs from their sources
+ * @param ignoreProps don't show property diffs
+ * @param propsOnly show property changes only
* @throws ClientException
*/
void diff(String target1, Revision revision1, String target2,
+ Revision revision2, String relativeToDir, OutputStream outStream,
+ Depth depth, Collection<String> changelists,
+ boolean ignoreAncestry, boolean noDiffDeleted, boolean force,
+ boolean copiesAsAdds, boolean ignoreProps, boolean propsOnly)
+ throws ClientException;
+
+ void diff(String target1, Revision revision1, String target2,
Revision revision2, String relativeToDir, String outFileName,
Depth depth, Collection<String> changelists,
boolean ignoreAncestry, boolean noDiffDeleted, boolean force,
@@ -545,9 +736,56 @@ public interface ISVNClient
* @param force diff even on binary files
* @param copiesAsAdds if set, copied files will be shown in their
* entirety, not as diffs from their sources
+ * @param ignoreProps don't show property diffs
+ * @param propsOnly show property changes only
+ * @param options additional options for controlling the output
* @throws ClientException
+ * @since 1.8
*/
void diff(String target, Revision pegRevision, Revision startRevision,
+ Revision endRevision, String relativeToDir, OutputStream outStream,
+ Depth depth, Collection<String> changelists,
+ boolean ignoreAncestry, boolean noDiffDeleted, boolean force,
+ boolean copiesAsAdds, boolean ignoreProps, boolean propsOnly,
+ DiffOptions options)
+ throws ClientException;
+
+ void diff(String target, Revision pegRevision, Revision startRevision,
+ Revision endRevision, String relativeToDir, String outFileName,
+ Depth depth, Collection<String> changelists,
+ boolean ignoreAncestry, boolean noDiffDeleted, boolean force,
+ boolean copiesAsAdds, boolean ignoreProps, boolean propsOnly,
+ DiffOptions options)
+ throws ClientException;
+
+ /**
+ * Display the differences between two paths.
+ * @param target path or url
+ * @param pegRevision revision tointerpret target
+ * @param startRevision first Revision to compare
+ * @param endRevision second Revision to compare
+ * @param relativeToDir index path is relative to this path
+ * @param outFileName file name where difference are written
+ * @param depth how deep to traverse into subdirectories
+ * @param changelists if non-null, filter paths using changelists
+ * @param ignoreAncestry ignore if files are not related
+ * @param noDiffDeleted no output on deleted files
+ * @param force diff even on binary files
+ * @param copiesAsAdds if set, copied files will be shown in their
+ * entirety, not as diffs from their sources
+ * @param ignoreProps don't show property diffs
+ * @param propsOnly show property changes only
+ * @throws ClientException
+ */
+ void diff(String target, Revision pegRevision, Revision startRevision,
+ Revision endRevision, String relativeToDir,
+ OutputStream outStream,
+ Depth depth, Collection<String> changelists,
+ boolean ignoreAncestry, boolean noDiffDeleted, boolean force,
+ boolean copiesAsAdds, boolean ignoreProps, boolean propsOnly)
+ throws ClientException;
+
+ void diff(String target, Revision pegRevision, Revision startRevision,
Revision endRevision, String relativeToDir, String outFileName,
Depth depth, Collection<String> changelists,
boolean ignoreAncestry, boolean noDiffDeleted, boolean force,
@@ -630,6 +868,23 @@ public interface ISVNClient
throws ClientException;
/**
+ * Retrieves the properties of an item, including inherited properties.
+ *
+ * @param path the path of the item
+ * @param revision the revision of the item
+ * @param pegRevision the revision to interpret path
+ * @param depth the depth to recurse into subdirectories
+ * @param changelists changelists to filter by
+ * @param callback the callback to use to return the properties
+ * @throws ClientException
+ * @since 1.8
+ */
+ void properties(String path, Revision revision, Revision pegRevision,
+ Depth depth, Collection<String> changelists,
+ InheritedProplistCallback callback)
+ throws ClientException;
+
+ /**
* Sets one property of an item with a String value
*
* @param paths paths of the items
@@ -700,6 +955,10 @@ public interface ISVNClient
* @throws ClientException
*/
byte[] propertyGet(String path, String name, Revision revision,
+ Revision pegRevision, Collection<String> changelists)
+ throws ClientException;
+
+ byte[] propertyGet(String path, String name, Revision revision,
Revision pegRevision)
throws ClientException;
diff --git a/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRepos.java b/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRepos.java
index 318fb07..2fc28c2 100644
--- a/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRepos.java
+++ b/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRepos.java
@@ -29,6 +29,7 @@ import java.io.InputStream;
import java.io.File;
import org.apache.subversion.javahl.callback.ReposNotifyCallback;
+import org.apache.subversion.javahl.callback.ReposFreezeAction;
import org.apache.subversion.javahl.types.*;
public interface ISVNRepos {
@@ -113,6 +114,9 @@ public interface ISVNRepos {
* @throws ClientException throw in case of problem
*/
public abstract void hotcopy(File path, File targetPath,
+ boolean cleanLogs, boolean incremental) throws ClientException;
+
+ public abstract void hotcopy(File path, File targetPath,
boolean cleanLogs) throws ClientException;
/**
@@ -133,8 +137,35 @@ public interface ISVNRepos {
public abstract void listUnusedDBLogs(File path, MessageReceiver receiver)
throws ClientException;
+
+ /**
+ * load the data of a dump into a repository
+ * @param path the path to the repository
+ * @param dataInput the data input source
+ * @param start the first revision to load
+ * @param end the last revision to load
+ * @param ignoreUUID ignore any UUID found in the input stream
+ * @param forceUUID set the repository UUID to any found in the
+ * stream
+ * @param usePreCommitHook use the pre-commit hook when processing commits
+ * @param usePostCommitHook use the post-commit hook when processing commits
+ * @param relativePath the directory in the repository, where the data
+ * in put optional.
+ * @param callback the target for processing messages
+ * @throws ClientException throw in case of problem
+ * @since 1.8
+ */
+ public abstract void load(File path, InputStream dataInput,
+ Revision start, Revision end,
+ boolean ignoreUUID, boolean forceUUID,
+ boolean usePreCommitHook,
+ boolean usePostCommitHook,
+ String relativePath,
+ ReposNotifyCallback callback)
+ throws ClientException;
+
/**
- * load the data of a dump into a repository,
+ * load the data of a dump into a repository
* @param path the path to the repository
* @param dataInput the data input source
* @param ignoreUUID ignore any UUID found in the input stream
@@ -146,6 +177,8 @@ public interface ISVNRepos {
* in put optional.
* @param callback the target for processing messages
* @throws ClientException throw in case of problem
+ * @note behaves like the 1.8 vesion with the revision
+ * parameters set to Revision.START and Revision.HEAD.
*/
public abstract void load(File path, InputStream dataInput,
boolean ignoreUUID, boolean forceUUID, boolean usePreCommitHook,
@@ -163,14 +196,34 @@ public interface ISVNRepos {
throws ClientException;
/**
- * recover the berkeley db of a repository, returns youngest revision
+ * recover the filesystem backend of a repository
* @param path the path to the repository
+ * @return youngest revision
* @throws ClientException throw in case of problem
*/
public abstract long recover(File path, ReposNotifyCallback callback)
throws ClientException;
/**
+ * Take an exclusive lock on each of the listed repositories
+ * to prevent commits; then, while holding all the locks, call
+ * the action.invoke().
+ *
+ * The repositories may or may not be readable by Subversion
+ * while frozen, depending on implementation details of the
+ * repository's filesystem backend.
+ *
+ * Repositories are locked in the listed order.
+ * @param action describes the action to perform
+ * @param paths the set of repository paths
+ * @throws ClientException
+ * @since 1.8
+ */
+ public abstract void freeze(ReposFreezeAction action,
+ File... paths)
+ throws ClientException;
+
+ /**
* remove open transaction in a repository
* @param path the path to the repository
* @param transactions the transactions to be removed
diff --git a/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java b/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java
index 3317bd3..c140fd1 100644
--- a/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java
+++ b/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java
@@ -131,10 +131,10 @@ public class NativeResources
{
initNativeLibrary();
version = new Version();
- if (!version.isAtLeast(1, 7, 0))
+ if (!version.isAtLeast(1, 8, 0))
{
throw new LinkageError("Native library version must be at least " +
- "1.7.0, but is only " + version);
+ "1.8.0, but is only " + version);
}
}
diff --git a/subversion/bindings/javahl/src/org/apache/subversion/javahl/ReposNotifyInformation.java b/subversion/bindings/javahl/src/org/apache/subversion/javahl/ReposNotifyInformation.java
index 8a90dca..7594d6c 100644
--- a/subversion/bindings/javahl/src/org/apache/subversion/javahl/ReposNotifyInformation.java
+++ b/subversion/bindings/javahl/src/org/apache/subversion/javahl/ReposNotifyInformation.java
@@ -188,7 +188,19 @@ public class ReposNotifyInformation extends EventObject
recover_start,
/** Upgrade has started. */
- upgrade_start;
+ upgrade_start,
+
+ /**
+ * A revision was skipped during loading.
+ * @since 1.8
+ */
+ load_skipped_rev,
+
+ /**
+ * The structure of a revision is being verified.
+ * @since 1.8
+ */
+ verify_rev_structure;
}
public enum NodeAction
diff --git a/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java b/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
index 8af71f3..1af9102 100644
--- a/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
+++ b/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
@@ -27,6 +27,8 @@ import org.apache.subversion.javahl.callback.*;
import org.apache.subversion.javahl.types.*;
import java.io.OutputStream;
+import java.io.FileOutputStream;
+import java.io.FileNotFoundException;
import java.io.ByteArrayOutputStream;
import java.util.Collection;
@@ -101,6 +103,8 @@ public class SVNClient implements ISVNClient
return NativeResources.getVersion();
}
+ public native VersionExtended getVersionExtended(boolean verbose);
+
public native String getAdminDirectoryName();
public native boolean isAdminDirectory(String name);
@@ -168,9 +172,17 @@ public class SVNClient implements ISVNClient
throws ClientException;
public native void add(String path, Depth depth, boolean force,
- boolean noIgnores, boolean addParents)
+ boolean noIgnores, boolean noAutoProps,
+ boolean addParents)
throws ClientException;
+ public void add(String path, Depth depth, boolean force,
+ boolean noIgnores, boolean addParents)
+ throws ClientException
+ {
+ add(path, depth, force, noIgnores, false, addParents);
+ }
+
public native long[] update(Set<String> paths, Revision revision,
Depth depth, boolean depthIsSticky,
boolean makeParents,
@@ -194,11 +206,24 @@ public class SVNClient implements ISVNClient
public native void move(Set<String> srcPaths, String destPath,
boolean force, boolean moveAsChild,
- boolean makeParents,
+ boolean makeParents, boolean metadataOnly,
+ boolean allowMixRev,
Map<String, String> revpropTable,
CommitMessageCallback handler, CommitCallback callback)
throws ClientException;
+ /** @deprecated */
+ public void move(Set<String> srcPaths, String destPath,
+ boolean force, boolean moveAsChild,
+ boolean makeParents,
+ Map<String, String> revpropTable,
+ CommitMessageCallback handler, CommitCallback callback)
+ throws ClientException
+ {
+ move(srcPaths, destPath, force, moveAsChild, makeParents, false, true,
+ revpropTable, handler, callback);
+ }
+
public native void mkdir(Set<String> paths, boolean makeParents,
Map<String, String> revpropTable,
CommitMessageCallback handler, CommitCallback callback)
@@ -225,12 +250,25 @@ public class SVNClient implements ISVNClient
throws ClientException;
public native void doImport(String path, String url, Depth depth,
- boolean noIgnore,
+ boolean noIgnore, boolean noAutoProps,
boolean ignoreUnknownNodeTypes,
Map<String, String> revpropTable,
- CommitMessageCallback handler, CommitCallback callback)
+ ImportFilterCallback importFilterCallback,
+ CommitMessageCallback handler,
+ CommitCallback commitCallback)
throws ClientException;
+ public void doImport(String path, String url, Depth depth, boolean noIgnore,
+ boolean ignoreUnknownNodeTypes,
+ Map<String, String> revpropTable,
+ CommitMessageCallback handler,
+ CommitCallback callback)
+ throws ClientException
+ {
+ doImport(path, url, depth, noIgnore, false, ignoreUnknownNodeTypes,
+ revpropTable, null, handler, callback);
+ }
+
public native Set<String> suggestMergeSources(String path,
Revision pegRevision)
throws SubversionException;
@@ -238,16 +276,40 @@ public class SVNClient implements ISVNClient
public native void merge(String path1, Revision revision1, String path2,
Revision revision2, String localPath,
boolean force, Depth depth,
+ boolean ignoreMergeinfo, boolean diffIgnoreAncestry,
+ boolean dryRun, boolean recordOnly)
+ throws ClientException;
+
+ public void merge(String path1, Revision revision1, String path2,
+ Revision revision2, String localPath,
+ boolean force, Depth depth,
boolean ignoreAncestry, boolean dryRun,
boolean recordOnly)
- throws ClientException;
+ throws ClientException
+ {
+ merge(path1, revision1, path2, revision2, localPath, force, depth,
+ ignoreAncestry, ignoreAncestry, dryRun, recordOnly);
+ }
public native void merge(String path, Revision pegRevision,
List<RevisionRange> revisions, String localPath,
- boolean force, Depth depth, boolean ignoreAncestry,
+ boolean force, Depth depth,
+ boolean ignoreMergeinfo, boolean diffIgnoreAncestry,
boolean dryRun, boolean recordOnly)
throws ClientException;
+ public void merge(String path, Revision pegRevision,
+ List<RevisionRange> revisions, String localPath,
+ boolean force, Depth depth, boolean ignoreAncestry,
+ boolean dryRun, boolean recordOnly)
+ throws ClientException
+ {
+ merge(path, pegRevision, revisions, localPath, force, depth,
+ ignoreAncestry, ignoreAncestry, dryRun, recordOnly);
+ }
+
+
+ /** @deprecated */
public native void mergeReintegrate(String path, Revision pegRevision,
String localPath, boolean dryRun)
throws ClientException;
@@ -259,25 +321,152 @@ public class SVNClient implements ISVNClient
Revision pegRevision,
String mergeSourceUrl,
Revision srcPegRevision,
+ Revision srcStartRevision,
+ Revision srcEndRevision,
boolean discoverChangedPaths, Depth depth,
Set<String> revProps,
LogMessageCallback callback)
throws ClientException;
+ public void getMergeinfoLog(Mergeinfo.LogKind kind, String pathOrUrl,
+ Revision pegRevision,
+ String mergeSourceUrl,
+ Revision srcPegRevision,
+ boolean discoverChangedPaths, Depth depth,
+ Set<String> revProps,
+ LogMessageCallback callback)
+ throws ClientException
+ {
+ Revision unspecified = new Revision(Revision.Kind.unspecified);
+ getMergeinfoLog(kind, pathOrUrl, pegRevision, mergeSourceUrl,
+ srcPegRevision, unspecified, unspecified,
+ discoverChangedPaths, depth, revProps, callback);
+ }
+
+ public void diff(String target1, Revision revision1, String target2,
+ Revision revision2, String relativeToDir,
+ String outFileName, Depth depth,
+ Collection<String> changelists,
+ boolean ignoreAncestry, boolean noDiffDeleted,
+ boolean force, boolean copiesAsAdds)
+ throws ClientException
+ {
+ try {
+ OutputStream stream = new FileOutputStream(outFileName);
+ diff(target1, revision1, target2, revision2, relativeToDir,
+ stream, depth, changelists, ignoreAncestry, noDiffDeleted,
+ force, copiesAsAdds, false, false, null);
+ } catch (FileNotFoundException ex) {
+ throw ClientException.fromException(ex);
+ }
+ }
+
+ public void diff(String target1, Revision revision1, String target2,
+ Revision revision2, String relativeToDir,
+ OutputStream stream, Depth depth,
+ Collection<String> changelists,
+ boolean ignoreAncestry, boolean noDiffDeleted,
+ boolean force, boolean copiesAsAdds,
+ boolean ignoreProps, boolean propsOnly)
+ throws ClientException
+ {
+ diff(target1, revision1, target2, revision2, relativeToDir,
+ stream, depth, changelists, ignoreAncestry, noDiffDeleted,
+ force, copiesAsAdds, ignoreProps, propsOnly, null);
+ }
+
+ public void diff(String target1, Revision revision1, String target2,
+ Revision revision2, String relativeToDir,
+ String outFileName, Depth depth,
+ Collection<String> changelists,
+ boolean ignoreAncestry, boolean noDiffDeleted,
+ boolean force, boolean copiesAsAdds,
+ boolean ignoreProps, boolean propsOnly,
+ DiffOptions options)
+ throws ClientException
+ {
+ try {
+ OutputStream stream = new FileOutputStream(outFileName);
+ diff(target1, revision1, target2, revision2, relativeToDir,
+ stream, depth, changelists, ignoreAncestry, noDiffDeleted,
+ force, copiesAsAdds, ignoreProps, propsOnly, options);
+ } catch (FileNotFoundException ex) {
+ throw ClientException.fromException(ex);
+ }
+ }
+
public native void diff(String target1, Revision revision1, String target2,
Revision revision2, String relativeToDir,
- String outFileName, Depth depth,
+ OutputStream stream, Depth depth,
Collection<String> changelists,
boolean ignoreAncestry, boolean noDiffDeleted,
- boolean force, boolean copiesAsAdds)
+ boolean force, boolean copiesAsAdds,
+ boolean ignoreProps, boolean propsOnly,
+ DiffOptions options)
throws ClientException;
+
+
+ public void diff(String target, Revision pegRevision,
+ Revision startRevision, Revision endRevision,
+ String relativeToDir, String outFileName,
+ Depth depth, Collection<String> changelists,
+ boolean ignoreAncestry, boolean noDiffDeleted,
+ boolean force, boolean copiesAsAdds)
+ throws ClientException
+ {
+ try {
+ OutputStream stream = new FileOutputStream(outFileName);
+ diff(target, pegRevision, startRevision, endRevision,
+ relativeToDir, stream, depth, changelists, ignoreAncestry,
+ noDiffDeleted, force, copiesAsAdds, false, false, null);
+ } catch (FileNotFoundException ex) {
+ throw ClientException.fromException(ex);
+ }
+ }
+
+ public void diff(String target, Revision pegRevision,
+ Revision startRevision, Revision endRevision,
+ String relativeToDir, OutputStream stream,
+ Depth depth, Collection<String> changelists,
+ boolean ignoreAncestry, boolean noDiffDeleted,
+ boolean force, boolean copiesAsAdds,
+ boolean ignoreProps, boolean propsOnly)
+ throws ClientException
+ {
+ diff(target, pegRevision, startRevision, endRevision, relativeToDir,
+ stream, depth, changelists, ignoreAncestry, noDiffDeleted,
+ force, copiesAsAdds, ignoreProps, propsOnly, null);
+ }
+
+ public void diff(String target, Revision pegRevision,
+ Revision startRevision, Revision endRevision,
+ String relativeToDir, String outFileName,
+ Depth depth, Collection<String> changelists,
+ boolean ignoreAncestry, boolean noDiffDeleted,
+ boolean force, boolean copiesAsAdds,
+ boolean ignoreProps, boolean propsOnly,
+ DiffOptions options)
+ throws ClientException
+ {
+ try {
+ OutputStream stream = new FileOutputStream(outFileName);
+ diff(target, pegRevision, startRevision, endRevision, relativeToDir,
+ stream, depth, changelists, ignoreAncestry, noDiffDeleted,
+ force, copiesAsAdds, ignoreProps, propsOnly, options);
+ } catch (FileNotFoundException ex) {
+ throw ClientException.fromException(ex);
+ }
+ }
+
public native void diff(String target, Revision pegRevision,
Revision startRevision, Revision endRevision,
- String relativeToDir, String outFileName,
+ String relativeToDir, OutputStream stream,
Depth depth, Collection<String> changelists,
boolean ignoreAncestry, boolean noDiffDeleted,
- boolean force, boolean copiesAsAdds)
+ boolean force, boolean copiesAsAdds,
+ boolean ignoreProps, boolean propsOnly,
+ DiffOptions options)
throws ClientException;
public native void diffSummarize(String target1, Revision revision1,
@@ -301,6 +490,12 @@ public class SVNClient implements ISVNClient
ProplistCallback callback)
throws ClientException;
+ public native void properties(String path, Revision revision,
+ Revision pegRevision, Depth depth,
+ Collection<String> changelists,
+ InheritedProplistCallback callback)
+ throws ClientException;
+
public native void propertySetLocal(Set<String> paths, String name,
byte[] value, Depth depth,
Collection<String> changelists,
@@ -326,8 +521,16 @@ public class SVNClient implements ISVNClient
boolean force)
throws ClientException;
+ public byte[] propertyGet(String path, String name,
+ Revision revision, Revision pegRevision)
+ throws ClientException
+ {
+ return propertyGet(path, name, revision, pegRevision, null);
+ }
+
public native byte[] propertyGet(String path, String name,
- Revision revision, Revision pegRevision)
+ Revision revision, Revision pegRevision,
+ Collection<String> changelists)
throws ClientException;
public byte[] fileContent(String path, Revision revision,
diff --git a/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNRepos.java b/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNRepos.java
index 98b611f..7d967bf 100644
--- a/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNRepos.java
+++ b/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNRepos.java
@@ -29,6 +29,7 @@ import java.io.InputStream;
import java.io.File;
import org.apache.subversion.javahl.callback.ReposNotifyCallback;
+import org.apache.subversion.javahl.callback.ReposFreezeAction;
import org.apache.subversion.javahl.types.*;
/**
@@ -130,7 +131,14 @@ public class SVNRepos implements ISVNRepos
* @throws ClientException throw in case of problem
*/
public native void hotcopy(File path, File targetPath,
- boolean cleanLogs) throws ClientException;
+ boolean cleanLogs, boolean incremental)
+ throws ClientException;
+
+ public void hotcopy(File path, File targetPath,
+ boolean cleanLogs) throws ClientException
+ {
+ hotcopy(path, targetPath, cleanLogs, false);
+ }
/**
* list all logfiles (BDB) in use or not)
@@ -150,7 +158,19 @@ public class SVNRepos implements ISVNRepos
public native void listUnusedDBLogs(File path, ISVNRepos.MessageReceiver receiver)
throws ClientException;
+ public void load(File path, InputStream dataInput,
+ boolean ignoreUUID, boolean forceUUID,
+ boolean usePreCommitHook, boolean usePostCommitHook,
+ String relativePath, ReposNotifyCallback callback)
+ throws ClientException
+ {
+ load(path, dataInput, Revision.START, Revision.HEAD,
+ ignoreUUID, forceUUID, usePreCommitHook, usePostCommitHook,
+ relativePath, callback);
+ }
+
public native void load(File path, InputStream dataInput,
+ Revision start, Revision end,
boolean ignoreUUID, boolean forceUUID,
boolean usePreCommitHook, boolean usePostCommitHook,
String relativePath, ReposNotifyCallback callback)
@@ -168,6 +188,9 @@ public class SVNRepos implements ISVNRepos
public native long recover(File path, ReposNotifyCallback callback)
throws ClientException;
+ public native void freeze(ReposFreezeAction action, File... paths)
+ throws ClientException;
+
/**
* remove open transaction in a repository
* @param path the path to the repository
diff --git a/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ImportFilterCallback.java b/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ImportFilterCallback.java
new file mode 100644
index 0000000..3a60087
--- /dev/null
+++ b/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ImportFilterCallback.java
@@ -0,0 +1,41 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ */
+
+package org.apache.subversion.javahl.callback;
+
+import org.apache.subversion.javahl.ISVNClient;
+import org.apache.subversion.javahl.types.NodeKind;
+
+/**
+ * This interface is used to filter imported nodes in the
+ * {@link ISVNClient#import} call.
+ * @since 1.8
+ */
+public interface ImportFilterCallback
+{
+ /**
+ * This method will be called for each node. Returns true to filter the
+ * node (and its descendants) from the import.
+ */
+ public boolean filter(String path, NodeKind kind, boolean special);
+}
diff --git a/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/InheritedProplistCallback.java b/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/InheritedProplistCallback.java
new file mode 100644
index 0000000..1270b1c
--- /dev/null
+++ b/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/InheritedProplistCallback.java
@@ -0,0 +1,71 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ */
+
+package org.apache.subversion.javahl.callback;
+
+import java.util.Collection;
+import java.util.Map;
+import org.apache.subversion.javahl.ISVNClient;
+
+/**
+ * This interface is used to return regular and inherited property
+ * lists for each path in a {@link ISVNClient#properties} call.
+ *
+ * @since 1.8
+ */
+public interface InheritedProplistCallback
+{
+
+ /**
+ * Describes properties inherited from one parent.
+ */
+ public class InheritedItem
+ {
+ /**
+ * The path or URL of the owner of the inherited property.
+ */
+ public final String path_or_url;
+
+ /**
+ * the inherited properties
+ */
+ public final Map<String, byte[]> properties;
+
+ public InheritedItem(String path_or_url, Map<String, byte[]> properties)
+ {
+ this.path_or_url = path_or_url;
+ this.properties = properties;
+ }
+ }
+
+ /**
+ * The method will be called once for every file.
+ * @param path the path.
+ * @param properties the properties on the path.
+ * @param inherited_properties
+ * depth-first ordered array of inherited properties..
+ */
+ public void singlePath(String path,
+ Map<String, byte[]> properties,
+ Collection<InheritedItem> inherited_properties);
+}
diff --git a/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ListCallback.java b/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ListCallback.java
index 4da1506..61ff0ca 100644
--- a/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ListCallback.java
+++ b/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ListCallback.java
@@ -29,7 +29,7 @@ import org.apache.subversion.javahl.types.Lock;
/**
* This interface is used to receive every single line for a file on a
- * the {@link ISVNClient#blame} call.
+ * the {@link ISVNClient#list} call.
*/
public interface ListCallback
{
diff --git a/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ProplistCallback.java b/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ProplistCallback.java
index 98f73fd..5c6b0e7 100644
--- a/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ProplistCallback.java
+++ b/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ProplistCallback.java
@@ -33,7 +33,7 @@ import org.apache.subversion.javahl.ISVNClient;
public interface ProplistCallback
{
/**
- * the method will be called for every line in a file.
+ * the method will be called once for every file.
* @param path the path.
* @param properties the properties on the path.
*/
diff --git a/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ReposFreezeAction.java b/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ReposFreezeAction.java
new file mode 100644
index 0000000..68417d6
--- /dev/null
+++ b/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ReposFreezeAction.java
@@ -0,0 +1,37 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ */
+
+package org.apache.subversion.javahl.callback;
+
+/**
+ * This interface is used to desfine an action to take while
+ * repositories are frozen by {@link ISVNRepos.freeze}.
+ * @since 1.8
+ */
+public interface ReposFreezeAction
+{
+ /**
+ * The method will be called with frozen repositories
+ */
+ public void invoke();
+}
diff --git a/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/ConflictVersion.java b/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/ConflictVersion.java
index 3c59726..3c37a89 100644
--- a/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/ConflictVersion.java
+++ b/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/ConflictVersion.java
@@ -31,16 +31,19 @@ package org.apache.subversion.javahl.types;
public class ConflictVersion
{
private String reposURL;
+ private String reposUUID;
private long pegRevision;
private String pathInRepos;
private NodeKind nodeKind;
/** This constructor should only be called from JNI code. */
- public ConflictVersion(String reposURL, long pegRevision, String pathInRepos,
+ ConflictVersion(String reposURL, String reposUUID,
+ long pegRevision, String pathInRepos,
NodeKind nodeKind)
{
this.reposURL = reposURL;
+ this.reposUUID = reposUUID;
this.pegRevision = pegRevision;
this.pathInRepos = pathInRepos;
this.nodeKind = nodeKind;
@@ -51,6 +54,12 @@ public class ConflictVersion
return reposURL;
}
+ /** @since 1.8 */
+ public String getReposUUID()
+ {
+ return reposUUID;
+ }
+
public long getPegRevision()
{
return pegRevision;
diff --git a/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/DiffOptions.java b/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/DiffOptions.java
new file mode 100644
index 0000000..8257854
--- /dev/null
+++ b/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/DiffOptions.java
@@ -0,0 +1,101 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ */
+
+package org.apache.subversion.javahl.types;
+
+/**
+ * Options that control the output of {@link ISVNClient#diff}.
+ * @since 1.8
+ */
+public class DiffOptions
+{
+ public enum Flag
+ {
+ /** Ignore all white space */
+ IgnoreWhitespace (1),
+
+ /** Ignore changes in amount of white space */
+ IgnoreSpaceChange (2),
+
+ /** Ignore changes in EOL style */
+ IgnoreEOLStyle (4),
+
+ /** Show C function name */
+ ShowFunction (8),
+
+ /** Use git's extended diff format */
+ GitFormat (16);
+
+ final int value;
+
+ private Flag (int value)
+ {
+ this.value = value;
+ }
+ };
+
+ /**
+ * @param flagset any combination of the Flag enumeration values.
+ */
+ public DiffOptions(Flag... flagset)
+ {
+ int f = 0;
+ for (Flag flag : flagset)
+ {
+ f |= flag.value;
+ }
+ this.flags = f;
+ }
+
+ /** @return whether IgnoreWhitespace is enabled */
+ public boolean getIgnoreWhitespace()
+ {
+ return (0 != (flags & Flag.IgnoreWhitespace.value));
+ }
+
+ /** @return whether IgnoreSpaceChange is enabled */
+ public boolean getIgnoreSpaceChange()
+ {
+ return (0 != (flags & Flag.IgnoreSpaceChange.value));
+ }
+
+ /** @return whether IgnoreEOLStyle is enabled */
+ public boolean getIgnoreEOLStyle()
+ {
+ return (0 != (flags & Flag.IgnoreEOLStyle.value));
+ }
+
+ /** @return whether ShowFunction is enabled */
+ public boolean getShowFunction()
+ {
+ return (0 != (flags & Flag.ShowFunction.value));
+ }
+
+ /** @return whether GitFormat is enabled */
+ public boolean getGitFormat()
+ {
+ return (0 != (flags & Flag.GitFormat.value));
+ }
+
+ private final int flags;
+}
diff --git a/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/LogDate.java b/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/LogDate.java
index a06e4c2..6455fa0 100644
--- a/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/LogDate.java
+++ b/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/LogDate.java
@@ -51,7 +51,11 @@ public class LogDate implements java.io.Serializable
{
throw new ParseException("String is not a valid Subversion date", 0);
}
- Date date = formatter.parse(datestr.substring(0, 23) + " UTC");
+ Date date;
+ synchronized(formatter)
+ {
+ date = formatter.parse(datestr.substring(0, 23) + " UTC");
+ }
this.cachedString = datestr;
cachedDate = Calendar.getInstance(UTC);
cachedDate.setTime(date);
diff --git a/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/NodeKind.java b/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/NodeKind.java
index f81d49f..ccf39ab 100644
--- a/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/NodeKind.java
+++ b/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/NodeKind.java
@@ -28,17 +28,23 @@ package org.apache.subversion.javahl.types;
*/
public enum NodeKind
{
- /* absent */
+ /** absent */
none ("none"),
- /* regular file */
+ /** regular file */
file ("file"),
- /* directory */
+ /** directory */
dir ("dir"),
- /* something's here, but we don't know what */
- unknown ("unknown");
+ /** something's here, but we don't know what */
+ unknown ("unknown"),
+
+ /**
+ * symbolic link
+ * @since: 1.8
+ */
+ symlink ("symlink");
/**
* The description of the node kind.
diff --git a/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Status.java b/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Status.java
index 8b26741..4e628c1 100644
--- a/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Status.java
+++ b/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Status.java
@@ -165,6 +165,10 @@ public class Status implements java.io.Serializable
*/
private String changelist;
+ private String movedFromAbspath;
+
+ private String movedToAbspath;
+
/**
* this constructor should only called from JNI code
* @param path the file system path of item
@@ -203,6 +207,8 @@ public class Status implements java.io.Serializable
* @param reposLastCmtAuthor the author of the last commit, if out of
* date
* @param changelist the changelist the item is a member of
+ * @param movedFromAbspath path moved from
+ * @param movedToAbspath path moved from
*/
public Status(String path, String url, NodeKind nodeKind, long revision,
long lastChangedRevision, long lastChangedDate,
@@ -212,7 +218,8 @@ public class Status implements java.io.Serializable
boolean switched, boolean fileExternal, Lock localLock,
Lock reposLock, long reposLastCmtRevision,
long reposLastCmtDate, NodeKind reposKind,
- String reposLastCmtAuthor, String changelist)
+ String reposLastCmtAuthor, String changelist,
+ String movedFromAbspath, String movedToAbspath)
{
this.path = path;
this.url = url;
@@ -237,6 +244,8 @@ public class Status implements java.io.Serializable
this.reposKind = reposKind;
this.reposLastCmtAuthor = reposLastCmtAuthor;
this.changelist = changelist;
+ this.movedFromAbspath = movedFromAbspath;
+ this.movedToAbspath = movedToAbspath;
}
/**
@@ -585,6 +594,16 @@ public class Status implements java.io.Serializable
return isConflicted;
}
+ public String getMovedFromAbspath()
+ {
+ return movedFromAbspath;
+ }
+
+ public String getMovedToAbspath()
+ {
+ return movedToAbspath;
+ }
+
/**
* Converts microseconds since the epoch to a Date object.
*
diff --git a/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/VersionExtended.java b/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/VersionExtended.java
new file mode 100644
index 0000000..06d0976
--- /dev/null
+++ b/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/VersionExtended.java
@@ -0,0 +1,238 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ */
+
+package org.apache.subversion.javahl.types;
+
+/**
+ * Encapsulates information about the compile-time and run-time
+ * properties of the Subversion libraries.
+ * @since 1.8
+ */
+public class VersionExtended
+{
+ /**
+ * @return The date when the libsvn_subr library was compiled, in
+ * the format defined by the C standard macro #__DATE__.
+ */
+ public native String getBuildDate();
+
+ /**
+ * @return The time when the libsvn_subr library was compiled, in
+ * the format defined by the C standard macro #__TIME__.
+ */
+ public native String getBuildTime();
+
+ /**
+ * @return The canonical host triplet (arch-vendor-osname) of the
+ * system where libsvn_subr was compiled.
+ *
+ * @note On Unix-like systems (includng Mac OS X), this string is
+ * the same as the output of the config.guess script for the
+ * underlying Subversion libraries.
+ */
+ public native String getBuildHost();
+
+ /**
+ * @return The localized copyright notice.
+ */
+ public native String getCopyright();
+
+ /**
+ * @return The canonical host triplet (arch-vendor-osname) of the
+ * system where the current process is running.
+ *
+ * @note This string may not be the same as the output of
+ * config.guess on the same system.
+ */
+ public native String getRuntimeHost();
+
+ /**
+ * @return The "commercial" release name of the running operating
+ * system, if available. Not to be confused with, e.g., the
+ * output of "uname -v" or "uname -r". The returned value may
+ * be #null.
+ */
+ public native String getRuntimeOSName();
+
+ /**
+ * Dependent library information.
+ * Describes the name and versions of known dependencies
+ * used by libsvn_subr.
+ */
+ public class LinkedLib
+ {
+ /** @return Library name. */
+ public final native String getName();
+
+ /** @return Compile-time version string. */
+ public final native String getCompiledVersion();
+
+ /**
+ * @return Run-time version string (may be #null, which
+ * indicates that the library is embedded or statically
+ * linked).
+ */
+ public final native String getRuntimeVersion();
+
+ LinkedLib(VersionExtended wrapper, int index)
+ {
+ this.wrapper = wrapper;
+ this.index = index;
+ }
+
+ private final VersionExtended wrapper;
+ private final int index;
+ };
+
+ /**
+ * @return Iterator for an immutable internal list of #LinkedLib
+ * describing dependent libraries. The list may be empty.
+ */
+ public java.util.Iterator<LinkedLib> getLinkedLibs()
+ {
+ return new LinkedLibIterator(this);
+ }
+
+ /**
+ * Loaded shared library information.
+ * Describes the name and, where available, version of the shared
+ * libraries loaded by the running program.
+ */
+ public class LoadedLib
+ {
+ /** @return Library name. */
+ public final native String getName();
+
+ /** @return Library version (may be #null). */
+ public final native String getVersion();
+
+ LoadedLib(VersionExtended wrapper, int index)
+ {
+ this.wrapper = wrapper;
+ this.index = index;
+ }
+
+ private final VersionExtended wrapper;
+ private final int index;
+ };
+
+ /**
+ * @return Iterator for an immutable internal list of #LoadedLib
+ * describing loaded shared libraries. The the list may be empty.
+ *
+ * @note On Mac OS X, the loaded frameworks, private frameworks
+ * and system libraries will not be listed.
+ */
+ public java.util.Iterator<LoadedLib> getLoadedLibs()
+ {
+ return new LoadedLibIterator(this);
+ }
+
+ /**
+ * Iterator for #LinkedLib.
+ */
+ private class LinkedLibIterator implements java.util.Iterator<LinkedLib>
+ {
+ public LinkedLibIterator(VersionExtended wrapper)
+ {
+ this.wrapper = wrapper;
+ this.index = -1;
+ }
+
+ /**
+ * Implementation of java.util.Iterator#hasNext().
+ * @return #true if next() can be called safely.
+ */
+ public native boolean hasNext();
+
+ /**
+ * Implementation of java.util.Iterator#next().
+ * @return The next element of the sequence.
+ */
+ public LinkedLib next()
+ {
+ if (!hasNext())
+ throw new java.util.NoSuchElementException();
+ return new LinkedLib(this.wrapper, ++this.index);
+ }
+
+ /**
+ * Implementation of java.util.Iterator#remove().
+ * @note Not implemented, all sequences are immutable.
+ */
+ public void remove()
+ {
+ throw new java.lang.UnsupportedOperationException();
+ }
+
+ private final VersionExtended wrapper;
+ private int index;
+ };
+
+ /**
+ * Iterator for #LoadedLib.
+ */
+ private class LoadedLibIterator implements java.util.Iterator<LoadedLib>
+ {
+ public LoadedLibIterator(VersionExtended wrapper)
+ {
+ this.wrapper = wrapper;
+ this.index = -1;
+ }
+
+ /**
+ * Implementation of java.util.Iterator#hasNext().
+ * @return #true if next() can be called safely.
+ */
+ public native boolean hasNext();
+
+ /**
+ * Implementation of java.util.Iterator#next().
+ * @return The next element of the sequence.
+ */
+ public LoadedLib next()
+ {
+ if (!hasNext())
+ throw new java.util.NoSuchElementException();
+ return new LoadedLib(this.wrapper, ++this.index);
+ }
+
+ /**
+ * Implementation of java.util.Iterator#remove().
+ * @note Not implemented, all sequences are immutable.
+ */
+ public void remove()
+ {
+ throw new java.lang.UnsupportedOperationException();
+ }
+
+ private final VersionExtended wrapper;
+ private int index;
+ };
+
+ /**
+ * Slot for the adress of the native peer.
+ * The JNI code is the only user of this member.
+ */
+ private long cppAddr = 0;
+}
diff --git a/subversion/bindings/javahl/src/org/tigris/subversion/javahl/ConflictDescriptor.java b/subversion/bindings/javahl/src/org/tigris/subversion/javahl/ConflictDescriptor.java
index 015f989..9c388c5 100644
--- a/subversion/bindings/javahl/src/org/tigris/subversion/javahl/ConflictDescriptor.java
+++ b/subversion/bindings/javahl/src/org/tigris/subversion/javahl/ConflictDescriptor.java
@@ -125,8 +125,12 @@ public class ConflictDescriptor
aDesc.getAction().ordinal(), aDesc.getReason().ordinal(),
aDesc.getOperation().ordinal(), aDesc.getBasePath(),
aDesc.getTheirPath(), aDesc.getMyPath(), aDesc.getMergedPath(),
- new ConflictVersion(aDesc.getSrcLeftVersion()),
- new ConflictVersion(aDesc.getSrcRightVersion()));
+ aDesc.getSrcLeftVersion() != null
+ ? new ConflictVersion(aDesc.getSrcLeftVersion())
+ : null,
+ aDesc.getSrcRightVersion() != null
+ ? new ConflictVersion(aDesc.getSrcRightVersion())
+ : null);
}
public String getPath()
diff --git a/subversion/bindings/javahl/src/org/tigris/subversion/javahl/LogDate.java b/subversion/bindings/javahl/src/org/tigris/subversion/javahl/LogDate.java
index bd55cfb..0a7c808 100644
--- a/subversion/bindings/javahl/src/org/tigris/subversion/javahl/LogDate.java
+++ b/subversion/bindings/javahl/src/org/tigris/subversion/javahl/LogDate.java
@@ -53,7 +53,11 @@ public class LogDate implements java.io.Serializable
{
throw new ParseException("String is not a valid Subversion date", 0);
}
- Date date = formatter.parse(datestr.substring(0, 23) + " UTC");
+ Date date;
+ synchronized(formatter)
+ {
+ date = formatter.parse(datestr.substring(0, 23) + " UTC");
+ }
this.cachedString = datestr;
cachedDate = Calendar.getInstance(UTC);
cachedDate.setTime(date);
diff --git a/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java b/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java
index 6343283..b8582c5 100644
--- a/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java
+++ b/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java
@@ -795,6 +795,7 @@ public class SVNClient implements SVNClientInterface
/**
* @since 1.5
*/
+ @SuppressWarnings("unchecked")
public void remove(String[] paths, String message, boolean force,
boolean keepLocal, Map revpropTable)
throws ClientException
@@ -964,6 +965,7 @@ public class SVNClient implements SVNClientInterface
/**
* @since 1.5
*/
+ @SuppressWarnings("unchecked")
public long commit(String[] paths, String message, int depth,
boolean noUnlock, boolean keepChangelist,
String[] changelists, Map revpropTable)
@@ -998,6 +1000,7 @@ public class SVNClient implements SVNClientInterface
/**
* @since 1.7
*/
+ @SuppressWarnings("unchecked")
public void copy(CopySource[] sources, String destPath, String message,
boolean copyAsChild, boolean makeParents,
boolean ignoreExternals, Map revpropTable)
@@ -1031,6 +1034,7 @@ public class SVNClient implements SVNClientInterface
* boolean, boolean, Map)} instead.
* @since 1.5
*/
+ @SuppressWarnings("unchecked")
public void copy(CopySource[] sources, String destPath, String message,
boolean copyAsChild, boolean makeParents,
Map revpropTable)
@@ -1057,6 +1061,7 @@ public class SVNClient implements SVNClientInterface
/**
* @since 1.5
*/
+ @SuppressWarnings("unchecked")
public void move(String[] srcPaths, String destPath, String message,
boolean force, boolean moveAsChild,
boolean makeParents, Map revpropTable)
@@ -1106,6 +1111,7 @@ public class SVNClient implements SVNClientInterface
/**
* @since 1.5
*/
+ @SuppressWarnings("unchecked")
public void mkdir(String[] paths, String message,
boolean makeParents, Map revpropTable)
throws ClientException
@@ -1306,6 +1312,7 @@ public class SVNClient implements SVNClientInterface
/**
* @since 1.5
*/
+ @SuppressWarnings("unchecked")
public void doImport(String path, String url, String message,
int depth, boolean noIgnore,
boolean ignoreUnknownNodeTypes, Map revpropTable)
@@ -1888,6 +1895,7 @@ public class SVNClient implements SVNClientInterface
/**
* @since 1.5
*/
+ @SuppressWarnings("unchecked")
public void propertySet(String path, String name, String value, int depth,
String[] changelists, boolean force,
Map revpropTable)
diff --git a/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientInterface.java b/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientInterface.java
index 8456a0e..2584079 100644
--- a/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientInterface.java
+++ b/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientInterface.java
@@ -154,7 +154,7 @@ public interface SVNClientInterface
throws ClientException;
/**
- * Lists the directory entries of an url on the server.
+ * Lists the directory entries of a url on the server.
* @param url the url to list
* @param revision the revision to list
* @param recurse recurse into subdirectories
@@ -167,7 +167,7 @@ public interface SVNClientInterface
throws ClientException;
/**
- * Lists the directory entries of an url on the server.
+ * Lists the directory entries of a url on the server.
* @param url the url to list
* @param revision the revision to list
* @param pegRevision the revision to interpret url
@@ -182,7 +182,7 @@ public interface SVNClientInterface
throws ClientException;
/**
- * Lists the directory entries of an url on the server.
+ * Lists the directory entries of a url on the server.
* @param url the url to list
* @param revision the revision to list
* @param pegRevision the revision to interpret url
@@ -707,7 +707,7 @@ public interface SVNClientInterface
*
* @param srcPath source path or url
* @param destPath destination path or url
- * @param message commit message if destPath is an url
+ * @param message commit message if destPath is a url
* @param revision source revision
* @throws ClientException
* @deprecated Use {@link #copy(CopySource[], String, String, boolean,
@@ -754,7 +754,7 @@ public interface SVNClientInterface
*
* @param srcPath source path or url
* @param destPath destination path or url
- * @param message commit message if destPath is an url
+ * @param message commit message if destPath is a url
* @param force even with local modifications.
* @throws ClientException
* @deprecated Use {@link #move(String[], String, String, boolean, boolean,
diff --git a/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java b/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
index 8de939c..5ed2229 100644
--- a/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
+++ b/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
@@ -32,6 +32,7 @@ import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.ByteArrayOutputStream;
+import java.io.UnsupportedEncodingException;
import java.text.ParseException;
import java.util.Collection;
import java.util.Arrays;
@@ -130,6 +131,91 @@ public class BasicTests extends SVNTests
}
/**
+ * Test SVNClient.getVersionExtended().
+ * @throws Throwable
+ */
+ public void testVersionExtendedQuiet() throws Throwable
+ {
+ try
+ {
+ VersionExtended vx = client.getVersionExtended(false);
+ String result = vx.getBuildDate();
+ if (result == null || result.trim().length() == 0)
+ throw new Exception("Build date empty");
+ result = vx.getBuildTime();
+ if (result == null || result.trim().length() == 0)
+ throw new Exception("Build time empty");
+ result = vx.getBuildHost();
+ if (result == null || result.trim().length() == 0)
+ throw new Exception("Build host empty");
+ result = vx.getCopyright();
+ if (result == null || result.trim().length() == 0)
+ throw new Exception("Copyright empty");
+ }
+ catch (Exception e)
+ {
+ fail("VersionExtended should always be available unless the " +
+ "native libraries failed to initialize: " + e);
+ }
+ }
+
+ /**
+ * Test SVNClient.getVersionExtended().
+ * @throws Throwable
+ */
+ public void testVersionExtendedVerbose() throws Throwable
+ {
+ try
+ {
+ VersionExtended vx = client.getVersionExtended(true);
+ String result = vx.getRuntimeHost();
+ if (result == null || result.trim().length() == 0)
+ throw new Exception("Runtime host empty");
+
+ // OS name is allowed to be null, but not empty
+ result = vx.getRuntimeOSName();
+ if (result != null && result.trim().length() == 0)
+ throw new Exception("Runtime OS name empty");
+
+ java.util.Iterator<VersionExtended.LinkedLib> ikl;
+ ikl = vx.getLinkedLibs();
+ if (ikl.hasNext())
+ {
+ VersionExtended.LinkedLib lib = ikl.next();
+ result = lib.getName();
+ if (result == null || result.trim().length() == 0)
+ throw new Exception("Linked lib name empty");
+ result = lib.getCompiledVersion();
+ if (result == null || result.trim().length() == 0)
+ throw new Exception("Linked lib compiled version empty");
+ // Runtime version is allowed to be null, but not empty
+ result = lib.getRuntimeVersion();
+ if (result != null && result.trim().length() == 0)
+ throw new Exception("Linked lib runtime version empty");
+ }
+
+ java.util.Iterator<VersionExtended.LoadedLib> ill;
+ ill = vx.getLoadedLibs();
+ if (ill.hasNext())
+ {
+ VersionExtended.LoadedLib lib = ill.next();
+ result = lib.getName();
+ if (result == null || result.trim().length() == 0)
+ throw new Exception("Loaded lib name empty");
+ // Version is allowed to be null, but not empty
+ result = lib.getVersion();
+ if (result != null && result.trim().length() == 0)
+ throw new Exception("Loaded lib version empty");
+ }
+ }
+ catch (Exception e)
+ {
+ fail("VersionExtended should always be available unless the " +
+ "native libraries failed to initialize: " + e);
+ }
+ }
+
+ /**
* Test the JNIError class functionality
* @throws Throwable
*/
@@ -147,10 +233,10 @@ public class BasicTests extends SVNTests
CommitItemStateFlags.Add);
Set<String> urls = new HashSet<String>(1);
urls.add(thisTest.getUrl() + "/Y");
- try
+ try
{
tempclient.mkdir(urls, false, null, new ConstMsg("log_msg"), null);
- }
+ }
catch(JNIError e)
{
return; // Test passes!
@@ -710,6 +796,49 @@ public class BasicTests extends SVNTests
}
/**
+ * Test property inheritance.
+ * @throws Throwable
+ */
+ public void testInheritedProperties() throws Throwable
+ {
+ OneTest thisTest = new OneTest();
+ WC wc = thisTest.getWc();
+
+ String adirPath = fileToSVNPath(new File(thisTest.getWCPath(),
+ "/A"),
+ false);
+ String alphaPath = fileToSVNPath(new File(thisTest.getWCPath(),
+ "/A/B/E/alpha"),
+ false);
+
+ String propval = "ybg";
+ setprop(adirPath, "ahqrtz", propval.getBytes());
+
+ final Map<String, Collection<InheritedProplistCallback.InheritedItem>> ipropMaps =
+ new HashMap<String, Collection<InheritedProplistCallback.InheritedItem>>();
+
+ client.properties(alphaPath, null, null, Depth.empty, null,
+ new InheritedProplistCallback () {
+ public void singlePath(
+ String path, Map<String, byte[]> props,
+ Collection<InheritedProplistCallback.InheritedItem> iprops)
+ { ipropMaps.put(path, iprops); }
+ });
+ Collection<InheritedProplistCallback.InheritedItem> iprops = ipropMaps.get(alphaPath);
+ for (InheritedProplistCallback.InheritedItem item : iprops)
+ {
+ for (String key : item.properties.keySet())
+ {
+ assertEquals("ahqrtz", key);
+ assertEquals(propval, new String(item.properties.get(key)));
+ }
+ }
+
+ wc.setItemPropStatus("A", Status.Kind.modified);
+ thisTest.checkStatus();
+ }
+
+ /**
* Test the basic SVNClient.update functionality.
* @throws Throwable
*/
@@ -898,7 +1027,21 @@ public class BasicTests extends SVNTests
}
client.move(srcPaths,
new File(thisTest.getWorkingCopy(), "A/B/F").getPath(),
- false, true, false, null, null, null);
+ false, true, false, false, false, null, null, null);
+
+ MyStatusCallback statusCallback = new MyStatusCallback();
+ String statusPath = fileToSVNPath(new File(thisTest.getWCPath() + "/A/B"), true);
+ client.status(statusPath, Depth.infinity, false, false, false, true,
+ null, statusCallback);
+ Status[] statusList = statusCallback.getStatusArray();
+ assertEquals(statusPath + "/F/alpha",
+ statusList[0].getMovedToAbspath());
+ assertEquals(statusPath + "/F/beta",
+ statusList[1].getMovedToAbspath());
+ assertEquals(statusPath + "/E/alpha",
+ statusList[2].getMovedFromAbspath());
+ assertEquals(statusPath + "/E/beta",
+ statusList[3].getMovedFromAbspath());
// Commit the changes, and check the state of the WC.
checkCommitRevision(thisTest,
@@ -2393,6 +2536,43 @@ public class BasicTests extends SVNTests
}
/**
+ * Test merge with automatic source and revision determination
+ * (e.g. 'svn merge -g) with implied revision range.
+ * @throws Throwable
+ * @since 1.8
+ */
+ public void testMergeUsingHistoryImpliedRange() throws Throwable
+ {
+ OneTest thisTest = setupAndPerformMerge();
+
+ // Test that getMergeinfo() returns null.
+ assertNull(client.getMergeinfo(new File(thisTest.getWCPath(), "A")
+ .toString(), Revision.HEAD));
+
+ // Merge and commit some changes (r4).
+ appendText(thisTest, "A/mu", "xxx", 4);
+ checkCommitRevision(thisTest, "wrong revision number from commit", 4,
+ thisTest.getWCPathSet(), "log msg", Depth.infinity,
+ false, false, null, null);
+
+ String branchPath = thisTest.getWCPath() + "/branches/A";
+ String modUrl = thisTest.getUrl() + "/A";
+ client.merge(modUrl, Revision.HEAD, null,
+ branchPath, true, Depth.infinity, false, false, false);
+
+ // commit the changes so that we can verify merge
+ addExpectedCommitItem(thisTest.getWCPath(), thisTest.getUrl().toString(),
+ "branches/A", NodeKind.dir,
+ CommitItemStateFlags.PropMods);
+ addExpectedCommitItem(thisTest.getWCPath(), thisTest.getUrl().toString(),
+ "branches/A/mu", NodeKind.file,
+ CommitItemStateFlags.TextMods);
+ checkCommitRevision(thisTest, "wrong revision number from commit", 5,
+ thisTest.getWCPathSet(), "log msg", Depth.infinity,
+ false, false, null, null);
+ }
+
+ /**
* Test reintegrating a branch with trunk
* (e.g. 'svn merge --reintegrate').
* @throws Throwable
@@ -2648,7 +2828,7 @@ public class BasicTests extends SVNTests
}
/**
- * Test the {@link SVNClientInterface.diff()} APIs.
+ * Test the {@link ISVNClient.diff()} APIs.
* @since 1.5
*/
public void testDiff()
@@ -2883,6 +3063,132 @@ public class BasicTests extends SVNTests
}
+ /**
+ * Test the {@link ISVNClient.diff()} with {@link DiffOptions}.
+ * @since 1.8
+ */
+ public void testDiffOptions()
+ throws SubversionException, IOException
+ {
+ OneTest thisTest = new OneTest(true);
+ File diffOutput = new File(super.localTmp, thisTest.testName);
+ final String NL = System.getProperty("line.separator");
+ final String sepLine =
+ "===================================================================" + NL;
+ final String underSepLine =
+ "___________________________________________________________________" + NL;
+ final String iotaPath = thisTest.getWCPath().replace('\\', '/') + "/iota";
+ final String wcPath = fileToSVNPath(new File(thisTest.getWCPath()),
+ false);
+ final String expectedDiffHeader =
+ "Index: iota" + NL + sepLine +
+ "--- iota\t(revision 1)" + NL +
+ "+++ iota\t(working copy)" + NL;
+
+ // make edits to iota
+ PrintWriter writer = new PrintWriter(new FileOutputStream(iotaPath));
+ writer.print("This is the file 'iota'.");
+ writer.flush();
+ writer.close();
+
+ try
+ {
+ final String expectedDiffOutput = expectedDiffHeader +
+ "@@ -1 +1 @@" + NL +
+ "-This is the file 'iota'." + NL +
+ "\\ No newline at end of file" + NL +
+ "+This is the file 'iota'." + NL +
+ "\\ No newline at end of file" + NL;
+
+ client.diff(iotaPath, Revision.BASE, iotaPath, Revision.WORKING,
+ wcPath, new FileOutputStream(diffOutput.getPath()),
+ Depth.infinity, null,
+ false, false, false, false, false, false, null);
+ assertFileContentsEquals(
+ "Unexpected diff output with no options in file '" +
+ diffOutput.getPath() + '\'',
+ expectedDiffOutput, diffOutput);
+ diffOutput.delete();
+ }
+ catch (ClientException e)
+ {
+ fail(e.getMessage());
+ }
+
+ try
+ {
+ final String expectedDiffOutput = "";
+
+ client.diff(iotaPath, Revision.BASE, iotaPath, Revision.WORKING,
+ wcPath, new FileOutputStream(diffOutput.getPath()),
+ Depth.infinity, null,
+ false, false, false, false, false, false,
+ new DiffOptions(DiffOptions.Flag.IgnoreWhitespace));
+ assertFileContentsEquals(
+ "Unexpected diff output with Flag.IgnoreWhitespace in file '" +
+ diffOutput.getPath() + '\'',
+ expectedDiffOutput, diffOutput);
+ diffOutput.delete();
+ }
+ catch (ClientException e)
+ {
+ fail("Using Flag.IgnoreWhitespace: "
+ + e.getMessage());
+ }
+
+ try
+ {
+ final String expectedDiffOutput = "";
+
+ client.diff(iotaPath, Revision.BASE, iotaPath, Revision.WORKING,
+ wcPath, diffOutput.getPath(), Depth.infinity, null,
+ false, false, false, false, false, false,
+ new DiffOptions(DiffOptions.Flag.IgnoreSpaceChange));
+ assertFileContentsEquals(
+ "Unexpected diff output with Flag.IgnoreSpaceChange in file '" +
+ diffOutput.getPath() + '\'',
+ expectedDiffOutput, diffOutput);
+ diffOutput.delete();
+ }
+ catch (ClientException e)
+ {
+ fail("Using Flag.IgnoreSpaceChange: "
+ + e.getMessage());
+ }
+
+ // make edits to iota
+ writer = new PrintWriter(new FileOutputStream(iotaPath));
+ writer.print("This is the file 'io ta'.");
+ writer.flush();
+ writer.close();
+
+ try
+ {
+ final String expectedDiffOutput = expectedDiffHeader +
+ "@@ -1 +1 @@" + NL +
+ "-This is the file 'iota'." + NL +
+ "\\ No newline at end of file" + NL +
+ "+This is the file 'io ta'." + NL +
+ "\\ No newline at end of file" + NL;
+
+ client.diff(iotaPath, Revision.BASE, iotaPath, Revision.WORKING,
+ wcPath, diffOutput.getPath(), Depth.infinity, null,
+ false, false, false, false, false, false,
+ new DiffOptions(DiffOptions.Flag.IgnoreSpaceChange));
+ assertFileContentsEquals(
+ "Unexpected diff output with Flag.IgnoreSpaceChange in file '" +
+ diffOutput.getPath() + '\'',
+ expectedDiffOutput, diffOutput);
+ diffOutput.delete();
+ }
+ catch (ClientException e)
+ {
+ fail("Using Flag.IgnoreSpaceChange: "
+ + e.getMessage());
+ }
+ }
+
+
private void assertFileContentsEquals(String msg, String expected,
File actual)
throws IOException
@@ -3061,7 +3367,7 @@ public class BasicTests extends SVNTests
}
client.move(srcPaths,
new File(thisTest.getWorkingCopy(), "A/B/F").getPath(),
- false, true, false, null, null, null);
+ false, true, false, false, false, null, null, null);
// Commit the changes, and check the state of the WC.
checkCommitRevision(thisTest,
@@ -3102,16 +3408,21 @@ public class BasicTests extends SVNTests
ConflictDescriptor conflict = conflicts.iterator().next();
assertNotNull("Conflict should not be null", conflict);
+ assertNotNull("Repository UUID must be set", conflict.getSrcLeftVersion().getReposUUID());
assertEquals(conflict.getSrcLeftVersion().getNodeKind(), NodeKind.file);
assertEquals(conflict.getSrcLeftVersion().getReposURL() + "/" +
conflict.getSrcLeftVersion().getPathInRepos(), tcTest.getUrl() + "/A/B/E/alpha");
assertEquals(conflict.getSrcLeftVersion().getPegRevision(), 1L);
- assertEquals(conflict.getSrcRightVersion().getNodeKind(), NodeKind.none);
- assertEquals(conflict.getSrcRightVersion().getReposURL(), tcTest.getUrl().toString());
- assertEquals(conflict.getSrcRightVersion().getPegRevision(), 2L);
-
+ if (conflict.getSrcRightVersion() != null)
+ {
+ assertEquals(conflict.getSrcLeftVersion().getReposUUID(),
+ conflict.getSrcRightVersion().getReposUUID());
+ assertEquals(conflict.getSrcRightVersion().getNodeKind(), NodeKind.none);
+ assertEquals(conflict.getSrcRightVersion().getReposURL(), tcTest.getUrl().toString());
+ assertEquals(conflict.getSrcRightVersion().getPegRevision(), 2L);
+ }
}
/**
@@ -3146,12 +3457,12 @@ public class BasicTests extends SVNTests
// check the status of the working copy
thisTest.checkStatus();
-
+
// now edit the propval directly in the repository
long baseRev = 2L;
client.propertySetRemote(thisTest.getUrl()+"/A/D/G/rho", baseRev, PROP, NEWVALUE,
new ConstMsg("edit prop"), false, null, null);
-
+
// update the WC and verify that the property was changed
client.update(thisTest.getWCPathSet(), Revision.HEAD, Depth.infinity, false, false,
false, false);
@@ -3684,8 +3995,17 @@ public class BasicTests extends SVNTests
Map<String, byte[]> revprops,
boolean hasChildren)
{
- String author = new String(revprops.get("svn:author"));
- String message = new String(revprops.get("svn:log"));
+ String author, message;
+ try {
+ author = new String(revprops.get("svn:author"), "UTF8");
+ } catch (UnsupportedEncodingException e) {
+ author = new String(revprops.get("svn:author"));
+ }
+ try {
+ message = new String(revprops.get("svn:log"), "UTF8");
+ } catch (UnsupportedEncodingException e) {
+ message = new String(revprops.get("svn:log"));
+ }
long timeMicros;
try {
diff --git a/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNReposTests.java b/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNReposTests.java
index eaa1ebd..5171218 100644
--- a/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNReposTests.java
+++ b/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNReposTests.java
@@ -34,7 +34,7 @@ import java.net.URI;
import java.util.Map;
/**
- * This class is used for testing the SVNAdmin class
+ * This class is used for testing the ISVNRepos interface
*
* More methodes for testing are still needed
*/
@@ -50,7 +50,7 @@ public class SVNReposTests extends SVNTests
}
/**
- * Test the basic SVNAdmin.create functionality
+ * Test the basic ISVNRepos.create functionality
* @throws SubversionException
*/
public void testCreate()
@@ -100,10 +100,26 @@ public class SVNReposTests extends SVNTests
admin.pack(thisTest.getRepository(), null);
}
+ /* Check that the freeze() callback gets invoked. */
+ private class FreezeAction implements ReposFreezeAction
+ {
+ int invoked = 0;
+ public void invoke() { ++invoked; }
+ }
+
+ public void testFreeze()
+ throws SubversionException, IOException
+ {
+ OneTest thisTest = new OneTest(false);
+ FreezeAction action = new FreezeAction();
+ admin.freeze(action, thisTest.getRepository());
+ assertEquals("expect freeze callback to be invoked once", 1, action.invoked);
+ }
+
public void testLoadRepo()
throws SubversionException, IOException
{
- /* Make sure SVNAdmin.load() works, with a repo dump file known
+ /* Make sure ISVNRepos.load() works, with a repo dump file known
* to provoke bug 2979
*/
// makes repos with nothing in it
diff --git a/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java b/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java
index 5e4f32e..dd79925 100644
--- a/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java
+++ b/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java
@@ -145,6 +145,16 @@ class SVNTests extends TestCase
protected static String rootUrl;
/**
+ * Username to use in tests
+ */
+ protected final static String USERNAME = "jrandom";
+
+ /**
+ * Password to use in tests
+ */
+ protected final static String PASSWORD = "rayjandom";
+
+ /**
* Create a JUnit <code>TestCase</code> instance.
*/
protected SVNTests()
@@ -276,7 +286,7 @@ class SVNTests extends TestCase
this.client = new SVNClient();
this.client.notification2(new MyNotifier());
this.client.setPrompt(new DefaultPromptUserPassword());
- this.client.username("jrandom");
+ this.client.username(USERNAME);
this.client.setProgressCallback(new DefaultProgressListener());
this.client.setConfigDirectory(this.conf.getAbsolutePath());
this.expectedCommitItems = new HashMap<String, MyCommitItem>();
@@ -284,7 +294,7 @@ class SVNTests extends TestCase
/**
* the default prompt : never prompts the user, provides defaults answers
*/
- private static class DefaultPromptUserPassword implements UserPasswordCallback
+ protected static class DefaultPromptUserPassword implements UserPasswordCallback
{
public int askTrustSSLServer(String info, boolean allowPermanently)
@@ -304,12 +314,12 @@ class SVNTests extends TestCase
public String getPassword()
{
- return "rayjandom";
+ return PASSWORD;
}
public String getUsername()
{
- return "jrandom";
+ return USERNAME;
}
public boolean prompt(String realm, String username)
diff --git a/subversion/bindings/javahl/tests/org/apache/subversion/javahl/WC.java b/subversion/bindings/javahl/tests/org/apache/subversion/javahl/WC.java
index 75a3a9f..8190616 100644
--- a/subversion/bindings/javahl/tests/org/apache/subversion/javahl/WC.java
+++ b/subversion/bindings/javahl/tests/org/apache/subversion/javahl/WC.java
@@ -519,6 +519,9 @@ public class WC
+ item.myPath + "' don't match:",
item.reposLastCmtAuthor,
status.getReposLastCmtAuthor());
+ Assert.assertNotNull("URL for path " + item.myPath
+ + " should not be null",
+ status.getUrl());
}
}
item.touched = true;
diff --git a/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java b/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java
index 852e087..3407b96 100644
--- a/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java
+++ b/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java
@@ -2176,6 +2176,7 @@ public class BasicTests extends SVNTests
* are no revisions to return.
* @since 1.5
*/
+ @SuppressWarnings("unchecked")
private long[] getMergeinfoRevisions(int kind, String pathOrUrl,
Revision pegRevision,
String mergeSourceUrl,
@@ -3039,10 +3040,12 @@ public class BasicTests extends SVNTests
conflict.getSrcLeftVersion().getPathInRepos(), tcTest.getUrl() + "/A/B/E/alpha");
assertEquals(conflict.getSrcLeftVersion().getPegRevision(), 1L);
- assertEquals(conflict.getSrcRightVersion().getNodeKind(), NodeKind.none);
- assertEquals(conflict.getSrcRightVersion().getReposURL(), tcTest.getUrl());
- assertEquals(conflict.getSrcRightVersion().getPegRevision(), 2L);
-
+ if (conflict.getSrcRightVersion() != null)
+ {
+ assertEquals(conflict.getSrcRightVersion().getNodeKind(), NodeKind.none);
+ assertEquals(conflict.getSrcRightVersion().getReposURL(), tcTest.getUrl());
+ assertEquals(conflict.getSrcRightVersion().getPegRevision(), 2L);
+ }
}
/**
@@ -3240,6 +3243,7 @@ public class BasicTests extends SVNTests
* @throws Throwable
* @since 1.5
*/
+ @SuppressWarnings("unchecked")
public void testCommitRevprops() throws Throwable
{
@@ -3346,6 +3350,7 @@ public class BasicTests extends SVNTests
// change made to this class.
private static final long serialVersionUID = 1L;
+ @SuppressWarnings("unchecked")
public void onSummary(DiffSummary descriptor)
{
super.put(descriptor.getPath(), descriptor);
@@ -3355,6 +3360,7 @@ public class BasicTests extends SVNTests
private class MyChangelistCallback extends HashMap
implements ChangelistCallback
{
+ @SuppressWarnings("unchecked")
public void doChangelist(String path, String changelist)
{
if (super.containsKey(path))
diff --git a/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/RunTests.java b/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/RunTests.java
index 779b782..606142c 100644
--- a/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/RunTests.java
+++ b/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/RunTests.java
@@ -47,6 +47,7 @@ public class RunTests
*
* @return The complete test suite.
*/
+ @SuppressWarnings("unchecked")
public static TestSuite suite()
{
TestSuite suite = new SVNTestSuite();
@@ -75,9 +76,8 @@ public class RunTests
Constructor ctor =
clazz.getDeclaredConstructor(argTypes);
methodName = methodName.substring(i + 1);
- String[] args = { methodName };
testCases[testCaseIndex++] =
- (TestCase) ctor.newInstance(args);
+ (TestCase) ctor.newInstance(methodName);
}
catch (Exception e)
{
diff --git a/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/SVNTests.java b/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/SVNTests.java
index 8b7d6ff..1e858c8 100644
--- a/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/SVNTests.java
+++ b/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/SVNTests.java
@@ -438,6 +438,7 @@ class SVNTests extends TestCase
* @param stateFlags expected commit state flags
* (see CommitItemStateFlags)
*/
+ @SuppressWarnings("unchecked")
protected void addExpectedCommitItem(String workingCopyPath,
String baseUrl,
String itemPath,
diff --git a/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/WC.java b/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/WC.java
index 4f1f389..6f68ae9 100644
--- a/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/WC.java
+++ b/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/WC.java
@@ -627,6 +627,7 @@ public class WC
* @param path the path of the item.
* @param content the content of the item. A null signals a directory.
*/
+ @SuppressWarnings("unchecked")
private Item(String path, String content)
{
myPath = path;
@@ -639,6 +640,7 @@ public class WC
* @param source the copy source.
* @param owner the WC of the copy
*/
+ @SuppressWarnings("unchecked")
private Item(Item source, WC owner)
{
myPath = source.myPath;
diff --git a/subversion/bindings/swig/INSTALL b/subversion/bindings/swig/INSTALL
index 95d37a7..0a66105 100644
--- a/subversion/bindings/swig/INSTALL
+++ b/subversion/bindings/swig/INSTALL
@@ -80,7 +80,7 @@ Step 1: Install a suitable version of SWIG (which is
--with-python=/path/to/correct/python/binary
- to the configure script. You need Python 2.4 or above.
+ to the configure script. You need Python 2.5 or above.
If you plan to build the Perl bindings, and have a system
with more than one version of perl installed, you may need
@@ -109,7 +109,7 @@ Step 2: Build and Install Subversion.
python executable you used to configure SWIG as above. If it does not then
you can specify the correct path by adding PYTHON=/path/to/python or
PERL=/path/to/perl onto the command line for configure. For example:
- ./configure PYTHON=/usr/bin/python2.4 PERL=/usr/bin/perl5.8.0
+ ./configure PYTHON=/usr/bin/python2.5 PERL=/usr/bin/perl5.8.0
If Subversion's ./configure finds a SWIG that it's happy with, then
it will build special glue libraries to link svn to the swig bindings:
@@ -121,18 +121,18 @@ Step 3: Install Specific Language Bindings
* Python
- 1. Run 'make swig-py' from the top of the Subversion source tree,
+ 1. Run 'make swig-py' from the top of the Subversion build tree,
to build the bindings.
(This will invoke SWIG on the *.i files, resulting in a collection
of .c source files. It will then compile and link those .c files into
Python libraries.)
- 2. Run 'make check-swig-py' from the top of the Subversion source
+ 2. Run 'make check-swig-py' from the top of the Subversion build
tree, to test the bindings
3. Run 'make install-swig-py' (as root, typically)
- from the top of the Subversion source tree. This will copy
+ from the top of the Subversion build tree. This will copy
your new Python libraries into the appropriate system location.
Note: If you don't have access to install to Python's site-packages
@@ -167,18 +167,18 @@ Step 3: Install Specific Language Bindings
is the same one that you configured SWIG to run against during the
SWIG configure (see above).
- 1. Run `make swig-pl' from the top of the Subversion source tree.
+ 1. Run `make swig-pl' from the top of the Subversion build tree.
- 2. Run `make check-swig-pl' from the top of the Subversion source
+ 2. Run `make check-swig-pl' from the top of the Subversion build
tree, to test the bindings
3. to install run `make install-swig-pl' from the top of the
- Subversion source tree.
+ Subversion build tree.
If you need to pass extra parameters to Perl build process (Makefile.PL),
then you need to do this process somewhat different:
- 1. Run `make swig-pl-lib' from the top of the Subversion source tree.
+ 1. Run `make swig-pl-lib' from the top of the Subversion build tree.
2. Run `make install-swig-pl-lib'
@@ -195,14 +195,14 @@ Step 3: Install Specific Language Bindings
* Ruby
- 1. Run `make swig-rb' from the top of the Subversion source tree,
+ 1. Run `make swig-rb' from the top of the Subversion build tree,
to build the bindings.
- 2. Run `make check-swig-rb' from the top of the Subversion source
+ 2. Run `make check-swig-rb' from the top of the Subversion build
tree, to test the bindings.
3. To install, run `make install-swig-rb' from the top of the
- Subversion source tree.
+ Subversion build tree.
You can specify the ruby binary by passing RUBY=/path/to/ruby as part
of the configure command in the top level of the Subversion source
@@ -332,13 +332,50 @@ BUILDING SWIG BINDINGS FOR SVN ON WINDOWS
copy Release\subversion\bindings\swig\perl\_Wc.dll %PERL_LIBS%\auto\SVN\_Wc
copy Release\subversion\bindings\swig\perl\_Wc.pdb %PERL_LIBS%\auto\SVN\_Wc
-TESTING AND USING SWIG BINDINGS
+
+TESTING SWIG BINDINGS
* Python
You can exercise the Python bindings test suite by running 'make
check-swig-py' as described in the install section.
+* Perl
+
+ The Perl bindings are using the standard module testing facilities
+ to do regression tests. Simply run 'make check-swig-pl' as described in
+ the install section.
+
+* Ruby
+
+ To test the Ruby bindings, simply run `make check-swig-rb' as described
+ in the install section.
+
+
+USING SWIG BINDINGS
+
+* Python
+
+ 1. Ensure Python's module search path includes the 'lib/svn-python'
+ subdirectory of the Subversion installation directory. For example,
+ include that directory in the 'PYTHONPATH' environment variable or
+ insert it into 'sys.path' at run time.
+
+ 2. Import the required modules into your Python program. For example:
+
+ import svn.client, svn.repos
+
+ 3. The APIs available within each module are broadly the same as the
+ corresponding C APIs except:
+
+ * you may omit the module prefix (for example, 'svn_client_')
+ * pool arguments are optional
+ * using Python exceptions instead of returning svn_error_t
+ * returning a tuple of outputs instead of return-by-pointer
+ * do not pass a baton along with a callback function
+
+ See python/README for more details on these differences.
+
For examples of how to use the Python bindings, check out the
sample/demo programs found in tools/examples/ in the Subversion
source code tree. Additionally, there are several third-party
@@ -347,15 +384,10 @@ TESTING AND USING SWIG BINDINGS
* Perl
- The Perl bindings are using the standard module testing facilities
- to do regression tests. Simply run 'make check-swig-pl' as described in
- the install section.
+ ### TODO
-* Ruby
+* Ruby
- To test the Ruby bindings, simply run `make check-swig-rb' as described
- in the install section.
-
For examples of how to use the Ruby bindings, take a look at the .rb files
in the following directory:
subversion/bindings/swig/test
diff --git a/subversion/bindings/swig/core.i b/subversion/bindings/swig/core.i
index 1b5bf99..64a3d05 100644
--- a/subversion/bindings/swig/core.i
+++ b/subversion/bindings/swig/core.i
@@ -244,12 +244,37 @@
%ignore svn_auth_kwallet_version;
%ignore svn_auth_get_kwallet_simple_provider;
%ignore svn_auth_get_kwallet_ssl_client_cert_pw_provider;
+%ignore svn_auth_get_gpg_agent_simple_provider;
/* bad pool convention */
%ignore svn_opt_print_generic_help;
%ignore svn_opt_args_to_target_array;
+/* svn_cmdline.h */
+%ignore svn_cmdline_auth_plaintext_passphrase_prompt;
+%ignore svn_cmdline_auth_plaintext_prompt;
+%ignore svn_cmdline_auth_simple_prompt;
+%ignore svn_cmdline_auth_ssl_client_cert_prompt;
+%ignore svn_cmdline_auth_ssl_client_cert_pw_prompt;
+%ignore svn_cmdline_auth_ssl_server_trust_prompt;
+%ignore svn_cmdline_auth_username_prompt;
+%ignore svn_cmdline_cstring_from_utf8;
+%ignore svn_cmdline_cstring_from_utf8_fuzzy;
+%ignore svn_cmdline_cstring_to_utf8;
+%ignore svn_cmdline_fflush;
+%ignore svn_cmdline_fprintf;
+%ignore svn_cmdline_fputs;
+%ignore svn_cmdline_handle_exit_error;
+%ignore svn_cmdline_output_encoding;
+%ignore svn_cmdline_path_local_style_from_utf8;
+%ignore svn_cmdline_printf;
+%ignore svn_cmdline_prompt_baton2_t;
+%ignore svn_cmdline_prompt_baton_t;
+%ignore svn_cmdline_prompt_user2;
+%ignore svn_cmdline_prompt_user;
+%ignore svn_cmdline_setup_auth_baton;
+
/* Ugliness because the constants are typedefed and SWIG ignores them
as a result. */
%constant svn_revnum_t SWIG_SVN_INVALID_REVNUM = -1;
@@ -258,34 +283,34 @@
/* -----------------------------------------------------------------------
input rangelist
*/
-%apply apr_array_header_t *RANGELIST {
- apr_array_header_t *rangeinput,
- const apr_array_header_t *rangelist,
- apr_array_header_t *from,
- apr_array_header_t *to,
- apr_array_header_t *changes,
- apr_array_header_t *eraser,
- apr_array_header_t *whiteboard,
- apr_array_header_t *rangelist1,
- apr_array_header_t *rangelist2
+%apply svn_rangelist_t *RANGELIST {
+ svn_rangelist_t *rangeinput,
+ const svn_rangelist_t *rangelist,
+ svn_rangelist_t *from,
+ svn_rangelist_t *to,
+ svn_rangelist_t *changes,
+ svn_rangelist_t *eraser,
+ svn_rangelist_t *whiteboard,
+ svn_rangelist_t *rangelist1,
+ svn_rangelist_t *rangelist2
}
/* -----------------------------------------------------------------------
output rangelist
*/
-%apply apr_array_header_t **RANGELIST {
- apr_array_header_t **rangelist,
- apr_array_header_t **inheritable_rangelist,
- apr_array_header_t **deleted,
- apr_array_header_t **added,
- apr_array_header_t **output
+%apply svn_rangelist_t **RANGELIST {
+ svn_rangelist_t **rangelist,
+ svn_rangelist_t **inheritable_rangelist,
+ svn_rangelist_t **deleted,
+ svn_rangelist_t **added,
+ svn_rangelist_t **output
}
/* -----------------------------------------------------------------------
input and output rangelist
*/
-%apply apr_array_header_t **RANGELIST_INOUT {
- apr_array_header_t **rangelist_inout
+%apply svn_rangelist_t **RANGELIST_INOUT {
+ svn_rangelist_t **rangelist_inout
}
/* -----------------------------------------------------------------------
@@ -330,19 +355,22 @@
};
#endif
-
/* -----------------------------------------------------------------------
- handle the default value of svn_config_get().and the
- config directory of svn_config_read_auth_data() and
- svn_config_write_auth_data().
+ allowable null values
*/
%apply const char *MAY_BE_NULL {
+ /* svn_config_get */
const char *default_value,
- const char *config_dir,
+ /* svn_config_read_auth_data */
+ const char *config_dir,
+ /* svn_diff_file_output_merge */
const char *conflict_original,
const char *conflict_modified,
const char *conflict_latest,
- const char *conflict_separator
+ const char *conflict_separator,
+ /* svn_cmdline_create_auth_baton */
+ const char *username,
+ const char *password
};
/* -----------------------------------------------------------------------
@@ -350,12 +378,17 @@
*/
#ifdef SWIGPYTHON
%typemap(in) (char *buffer, apr_size_t *len) ($*2_type temp) {
- if (!PyInt_Check($input)) {
+ if (PyLong_Check($input)) {
+ temp = PyLong_AsLong($input);
+ }
+ else if (PyInt_Check($input)) {
+ temp = PyInt_AsLong($input);
+ }
+ else {
PyErr_SetString(PyExc_TypeError,
"expecting an integer for the buffer size");
SWIG_fail;
}
- temp = PyInt_AsLong($input);
if (temp < 0) {
PyErr_SetString(PyExc_ValueError,
"buffer size must be a positive integer");
@@ -652,14 +685,14 @@ svn_swig_pl_set_current_pool (apr_pool_t *pool)
)
#endif
-#ifdef SWIGRUBY
+#ifndef SWIGPERL
%callback_typemap(svn_config_enumerator2_t callback, void *baton,
- ,
+ svn_swig_py_config_enumerator2,
,
svn_swig_rb_config_enumerator)
%callback_typemap(svn_config_section_enumerator2_t callback, void *baton,
- ,
+ svn_swig_py_config_section_enumerator2,
,
svn_swig_rb_config_section_enumerator)
#endif
@@ -697,6 +730,16 @@ svn_swig_pl_set_current_pool (apr_pool_t *pool)
%authprompt_callback_typemap(ssl_server_trust)
%authprompt_callback_typemap(ssl_client_cert)
%authprompt_callback_typemap(ssl_client_cert_pw)
+%authprompt_callback_typemap(gnome_keyring_unlock)
+
+#ifdef SWIGPYTHON
+/* pl and rb aren't yet implemented */
+%callback_typemap_maybenull(svn_config_auth_walk_func_t walk_func,
+ void *walk_baton,
+ svn_swig_py_config_auth_walk_func,
+ svn_swig_pl_config_auth_walk_func,
+ svn_swig_rb_config_auth_walk_func)
+#endif
/* -----------------------------------------------------------------------
* For all the various functions that set a callback baton create a reference
@@ -771,6 +814,7 @@ svn_swig_pl_set_current_pool (apr_pool_t *pool)
#pragma SWIG nowarn=+305
%include svn_opt_h.swg
+%include svn_cmdline_h.swg
%include svn_auth_h.swg
%include svn_config_h.swg
%include svn_utf_h.swg
@@ -779,6 +823,33 @@ svn_swig_pl_set_current_pool (apr_pool_t *pool)
%include svn_dirent_uri_h.swg
%include svn_mergeinfo_h.swg
%include svn_io_h.swg
+%include svn_checksum_h.swg
+
+
+
+%inline %{
+/* Helper function to set the gnome-keyring unlock prompt function. This
+ * C function accepts an auth baton, a function and a prompt baton, but
+ * the below callback_typemap uses both the function and the prompt
+ * baton, so the resulting binding has just two arguments: The auth
+ * baton and the prompt function.
+ * The prompt function should again have two arguments: The keyring name
+ * (string) and a pool (except for the ruby version, which doesn't have
+ * the pool argument). It should return the entered password (string).
+ * This binding generated for this function generates a reference to the
+ * prompt function that was passed into this. The caller should store
+ * that reference somewhere, to prevent the function from being garbage
+ * collected...
+ */
+static void svn_auth_set_gnome_keyring_unlock_prompt_func(svn_auth_baton_t *ab,
+ svn_auth_gnome_keyring_unlock_prompt_func_t prompt_func,
+ void *prompt_baton) {
+ svn_auth_set_parameter(ab, SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_FUNC,
+ prompt_func);
+ svn_auth_set_parameter(ab, SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_BATON,
+ prompt_baton);
+}
+%}
#if defined(SWIGPERL) || defined(SWIGRUBY)
%include svn_md5_h.swg
@@ -1110,15 +1181,15 @@ svn_swig_mergeinfo_sort(apr_hash_t **mergeinfo_inout, apr_pool_t *pool)
}
static svn_error_t *
-svn_swig_rangelist_merge(apr_array_header_t **rangelist_inout,
- apr_array_header_t *changes,
+svn_swig_rangelist_merge(svn_rangelist_t **rangelist_inout,
+ svn_rangelist_t *changes,
apr_pool_t *pool)
{
return svn_rangelist_merge(rangelist_inout, changes, pool);
}
static svn_error_t *
-svn_swig_rangelist_reverse(apr_array_header_t **rangelist_inout,
+svn_swig_rangelist_reverse(svn_rangelist_t **rangelist_inout,
apr_pool_t *pool)
{
return svn_rangelist_reverse(*rangelist_inout, pool);
diff --git a/subversion/bindings/swig/include/svn_containers.swg b/subversion/bindings/swig/include/svn_containers.swg
index 545aa0e..b783fdf 100644
--- a/subversion/bindings/swig/include/svn_containers.swg
+++ b/subversion/bindings/swig/include/svn_containers.swg
@@ -265,6 +265,27 @@
#endif
+#ifdef SWIGPERL
+%typemap(in) apr_hash_t *PROPHASH
+ (apr_pool_t *_global_pool = NULL)
+{
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ $1 = svn_swig_pl_hash_to_prophash($input, _global_pool);
+}
+%typemap(out) apr_hash_t *PROPHASH
+{
+ %append_output(svn_swig_pl_prophash_to_hash($1));
+}
+
+%typemap(out) apr_hash_t *changed_paths2
+{
+ %append_output(
+ ($1) ? svn_swig_pl_convert_hash($1, $descriptor(svn_log_changed_path2_t *))
+ : &PL_sv_undef);
+}
+#endif
+
#ifdef SWIGRUBY
%typemap(in) apr_hash_t *PROPHASH
{
@@ -291,7 +312,6 @@
}
#endif
-#if defined(SWIGPYTHON) || defined(SWIGRUBY)
%apply apr_hash_t *PROPHASH {
apr_hash_t *target_props,
apr_hash_t *source_props,
@@ -300,7 +320,6 @@
apr_hash_t *revprop_table,
apr_hash_t *revprops
};
-#endif
#ifdef SWIGRUBY
%typemap(out) apr_hash_t *CHANGED_PATH_HASH
@@ -421,6 +440,19 @@
*/
/* -----------------------------------------------------------------------
+ Output of apr_array_header_t * <svn_prop_inherited_item_t *>
+*/
+#ifdef SWIGPYTHON
+%typemap(argout) apr_array_header_t **OUTPUT_OF_PROP_INHERITED_ITEM {
+ %append_output(svn_swig_py_propinheriteditemarray_to_dict(*$1));
+}
+
+%apply apr_array_header_t **OUTPUT_OF_PROP_INHERITED_ITEM {
+ apr_array_header_t **inherited_props
+};
+#endif
+
+/* -----------------------------------------------------------------------
Output of apr_array_header_t * <svn_prop_t *>
*/
#ifdef SWIGRUBY
@@ -482,6 +514,22 @@
svn_wc_parse_externals_description3()
*/
+#ifdef SWIGPYTHON
+%typemap(argout) apr_array_header_t **externals_p {
+ %append_output
+ (svn_swig_py_pointerlist_to_list(*$1, $descriptor(svn_wc_external_item2_t *),
+ _global_py_pool));
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+}
+#endif
+#ifdef SWIGPERL
+%typemap(argout) apr_array_header_t **externals_p {
+ %append_output
+ (svn_swig_pl_convert_array(*$1, $descriptor(svn_wc_external_item2_t *)));
+}
+#endif
#ifdef SWIGRUBY
%typemap(argout) apr_array_header_t **externals_p {
%append_output(svn_swig_rb_apr_array_to_array_external_item2(*$1));
@@ -497,7 +545,11 @@
}
}
#endif
-
+#ifdef SWIGPERL
+%typemap(argout) apr_array_header_t **result_revs {
+ %append_output(svn_swig_pl_revnums_to_list(*$1));
+}
+#endif
#ifdef SWIGRUBY
%typemap(argout) apr_array_header_t **result_revs {
%append_output(svn_swig_rb_apr_array_to_array_svn_rev(*$1));
@@ -551,6 +603,10 @@
$1 = (apr_array_header_t *) svn_swig_pl_strings_to_array($input,
_global_pool);
}
+%typemap(in) const apr_array_header_t *STRINGLIST_MAY_BE_NULL {
+ $1 = SvOK($input) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ $input, _global_pool) : NULL;
+}
#endif
#ifdef SWIGRUBY
%typemap(in) const apr_array_header_t *STRINGLIST {
@@ -579,7 +635,7 @@
apr_array_header_t *preserved_exts
};
-#ifdef SWIGRUBY
+#if defined(SWIGPERL) || defined(SWIGRUBY)
%apply const apr_array_header_t *STRINGLIST_MAY_BE_NULL {
apr_array_header_t *revprops
};
@@ -682,10 +738,11 @@
/* -----------------------------------------------------------------------
Input of apr_array_header_t * <svn_merge_range_t *>
+ (that is: svn_rangelist_t *)
*/
#ifdef SWIGPYTHON
-%typemap(in) apr_array_header_t *RANGELIST {
- $1 = (apr_array_header_t *) svn_swig_py_seq_to_array($input,
+%typemap(in) svn_rangelist_t *RANGELIST {
+ $1 = (svn_rangelist_t *) svn_swig_py_seq_to_array($input,
sizeof(const svn_merge_range_t *),
svn_swig_py_unwrap_struct_ptr,
$descriptor(svn_merge_range_t *),
@@ -697,7 +754,7 @@
#endif
#ifdef SWIGRUBY
-%typemap(in) apr_array_header_t *RANGELIST {
+%typemap(in) svn_rangelist_t *RANGELIST {
$1 = svn_swig_rb_array_to_apr_array_merge_range($input, _global_pool);
}
#endif
@@ -727,6 +784,12 @@
}
#endif
+#ifdef SWIGPERL
+%typemap(in) apr_array_header_t *REVISION_RANGE_LIST {
+ $1 = svn_swig_pl_array_to_apr_array_revision_range($input, _global_pool);
+}
+#endif
+
#ifdef SWIGRUBY
%typemap(in) apr_array_header_t *REVISION_RANGE_LIST {
$1 = svn_swig_rb_array_to_apr_array_revision_range($input, _global_pool);
@@ -799,7 +862,7 @@
Output of
apr_hash_t * <const char *,
apr_hash_t * <const char *,
- array_header_t * <svn_merge_range_t *>>>
+ apr_array_header_t * <svn_merge_range_t *>>>
*/
#ifdef SWIGRUBY
%typemap(argout) apr_hash_t **MERGEINFO_CATALOG
@@ -821,9 +884,10 @@
/* -----------------------------------------------------------------------
Output of apr_array_header_t * <svn_merge_range_t *>
+ (that is: svn_rangelist_t *)
*/
#ifdef SWIGPYTHON
-%typemap(argout) apr_array_header_t **RANGELIST {
+%typemap(argout) svn_rangelist_t **RANGELIST {
%append_output
(svn_swig_py_pointerlist_to_list(*$1, $descriptor(svn_merge_range_t *),
_global_py_pool));
@@ -832,10 +896,10 @@
}
}
-%typemap(in) apr_array_header_t **RANGELIST_INOUT ($*1_ltype temp)
+%typemap(in) svn_rangelist_t **RANGELIST_INOUT ($*1_ltype temp)
{
$1 = &temp;
- *$1 = (apr_array_header_t *) svn_swig_py_seq_to_array($input,
+ *$1 = (svn_rangelist_t *) svn_swig_py_seq_to_array($input,
sizeof(const svn_merge_range_t *),
svn_swig_py_unwrap_struct_ptr,
$descriptor(svn_merge_range_t *),
@@ -848,11 +912,11 @@
#endif
#ifdef SWIGRUBY
-%typemap(argout) apr_array_header_t **RANGELIST {
+%typemap(argout) svn_rangelist_t **RANGELIST {
%append_output(svn_swig_rb_apr_array_to_array_merge_range(*$1));
}
-%typemap(in) apr_array_header_t **RANGELIST_INOUT ($*1_ltype temp)
+%typemap(in) svn_rangelist_t **RANGELIST_INOUT ($*1_ltype temp)
{
$1 = &temp;
*$1 = svn_swig_rb_array_to_apr_array_merge_range($input, _global_pool);
@@ -860,8 +924,8 @@
#endif
#if defined(SWIGPYTHON) || defined(SWIGRUBY)
-%typemap(argout) apr_array_header_t **RANGELIST_INOUT =
- apr_array_header_t **RANGELIST;
+%typemap(argout) svn_rangelist_t **RANGELIST_INOUT =
+ svn_rangelist_t **RANGELIST;
#endif
/* -----------------------------------------------------------------------
diff --git a/subversion/bindings/swig/include/svn_types.swg b/subversion/bindings/swig/include/svn_types.swg
index a7f3c4b..b2c7fb5 100644
--- a/subversion/bindings/swig/include/svn_types.swg
+++ b/subversion/bindings/swig/include/svn_types.swg
@@ -101,6 +101,8 @@
svn_auth_provider_object_t **,
svn_config_t **,
svn_diff_t **,
+ svn_patch_file_t **,
+ svn_patch_t **,
void **credentials,
void **iter_baton,
void **token,
@@ -706,28 +708,10 @@ svn_ ## TYPE ## _swig_rb_closed(VALUE self)
svn_repos_get_logs()
*/
-#ifdef SWIGPYTHON
-%typemap(in) (svn_log_message_receiver_t receiver,
- void *receiver_baton) {
- $1 = svn_swig_py_log_receiver;
- $2 = (void *)$input;
-}
-#endif
-#ifdef SWIGPERL
-%typemap(in) (svn_log_message_receiver_t receiver,
- void *receiver_baton) {
- $1 = svn_swig_pl_thunk_log_receiver;
- $2 = (void *)$input;
-}
-#endif
-
-#ifdef SWIGRUBY
-%typemap(in) (svn_log_message_receiver_t receiver,
- void *receiver_baton) {
- $1 = svn_swig_rb_log_receiver;
- $2 = (void *)svn_swig_rb_make_baton($input, _global_svn_swig_rb_pool);
-}
-#endif
+%callback_typemap(svn_log_message_receiver_t receiver, void *receiver_baton,
+ svn_swig_py_log_receiver,
+ svn_swig_pl_thunk_log_receiver,
+ svn_swig_rb_log_receiver)
/* -----------------------------------------------------------------------
Callback: svn_log_entry_receiver_t
@@ -736,21 +720,10 @@ svn_ ## TYPE ## _swig_rb_closed(VALUE self)
svn_repos_get_logs4()
*/
-#ifdef SWIGPYTHON
-%typemap(in) (svn_log_entry_receiver_t receiver,
- void *receiver_baton) {
- $1 = svn_swig_py_log_entry_receiver;
- $2 = (void *)$input;
-}
-#endif
-
-#ifdef SWIGRUBY
-%typemap(in) (svn_log_entry_receiver_t receiver, void *receiver_baton)
-{
- $1 = svn_swig_rb_log_entry_receiver;
- $2 = (void *)svn_swig_rb_make_baton($input, _global_svn_swig_rb_pool);
-}
-#endif
+%callback_typemap(svn_log_entry_receiver_t receiver, void *receiver_baton,
+ svn_swig_py_log_entry_receiver,
+ svn_swig_pl_thunk_log_entry_receiver,
+ svn_swig_rb_log_entry_receiver)
/* -----------------------------------------------------------------------
Callback: svn_commit_callback_t
@@ -791,23 +764,38 @@ svn_ ## TYPE ## _swig_rb_closed(VALUE self)
Callback: svn_commit_callback2_t
svn_ra get_commit_editor2()
svn_repos_get_commit_editor4()
+ svn_client_mkdir4()
+ svn_client_delete4()
+ svn_client_import4()
+ svn_client_commit5()
+ svn_client_copy6()
+ svn_client_move6()
+ svn_client_propset_remote()
*/
+#ifdef SWIGPERL
+%typemap(in) (svn_commit_callback2_t commit_callback, void *commit_baton) {
+ $1 = svn_swig_pl_thunk_commit_callback2;
+ $2 = (void *)$input;
+ svn_swig_pl_hold_ref_in_pool (_global_pool, $input);
+};
+#endif
+
#ifdef SWIGRUBY
-%typemap(in) (svn_commit_callback2_t callback, void *callback_baton)
+%typemap(in) (svn_commit_callback2_t commit_callback, void *commit_baton)
{
$1 = svn_swig_rb_commit_callback2;
$2 = (void *)svn_swig_rb_make_baton($input, _global_svn_swig_rb_pool);
};
-%typemap(argout) (svn_commit_callback2_t callback, void *callback_baton)
+%typemap(argout) (svn_commit_callback2_t commit_callback, void *commit_baton)
{
svn_swig_rb_set_baton($result, (VALUE)$2);
};
#endif
#ifdef SWIGPYTHON
-%typemap(in) (svn_commit_callback2_t callback, void *callback_baton)
+%typemap(in) (svn_commit_callback2_t commit_callback, void *commit_baton)
{
$1 = svn_swig_py_commit_callback2;
$2 = (void *)$input;
@@ -889,6 +877,39 @@ svn_ ## TYPE ## _swig_rb_closed(VALUE self)
#endif
/* -----------------------------------------------------------------------
+ Callback: svn_repos_freeze_func_t
+*/
+#ifdef SWIGPYTHON
+%typemap(in) (svn_repos_freeze_func_t freeze_func, void *freeze_baton)
+{
+ $1 = svn_swig_py_repos_freeze_func;
+ $2 = (void *)$input;
+}
+#endif
+
+/* -----------------------------------------------------------------------
+ Callback: svn_fs_freeze_func_t
+*/
+#ifdef SWIGPYTHON
+%typemap(in) (svn_fs_freeze_func_t freeze_func, void *freeze_baton)
+{
+ $1 = svn_swig_py_fs_freeze_func;
+ $2 = (void *)$input;
+}
+#endif
+
+/* -----------------------------------------------------------------------
+ Callback: svn_proplist_receiver2_t
+*/
+#ifdef SWIGPYTHON
+%typemap(in) (svn_proplist_receiver2_t receiver, void *receiver_baton)
+{
+ $1 = svn_swig_py_proplist_receiver2;
+ $2 = (void *)$input;
+}
+#endif
+
+/* -----------------------------------------------------------------------
Callback: svn_fs_warning_callback_t
*/
@@ -901,6 +922,12 @@ svn_ ## TYPE ## _swig_rb_closed(VALUE self)
$2 = (void *)baton;
}
#endif
+#ifdef SWIGPERL
+%ignore svn_fs_set_warning_func;
+#endif
+#ifdef SWIGPYTHON
+%ignore svn_fs_set_warning_func;
+#endif
/* -----------------------------------------------------------------------
svn_stream_t interoperability with language native io handles
@@ -1152,53 +1179,7 @@ svn_ ## TYPE ## _swig_rb_closed(VALUE self)
*/
#ifdef SWIGPERL
%typemap(in) svn_opt_revision_t * (svn_opt_revision_t rev) {
- $1 = &rev;
- if ($input == NULL || $input == &PL_sv_undef || !SvOK($input)) {
- rev.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject($input) && sv_derived_from($input, "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr($input, (void **)&$1, $1_descriptor, 0);
- }
- else if (looks_like_number($input)) {
- rev.kind = svn_opt_revision_number;
- rev.value.number = SvIV($input);
- }
- else if (SvPOK($input)) {
- char *input = SvPV_nolen($input);
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev.kind = svn_opt_revision_date;
- rev.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ $1 = svn_swig_pl_set_revision(&rev, $input, TRUE);
}
#endif
diff --git a/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c b/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c
index 6d1a114..609fc9f 100644
--- a/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c
+++ b/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c
@@ -29,13 +29,19 @@
#include <perl.h>
#include <XSUB.h>
+/* Perl defines a _ macro, but SVN uses it for translations.
+ * So undefine _ after including the Perl headers. */
+#undef _
+
#include <stdarg.h>
#ifdef WIN32
#include <io.h>
#endif
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_opt.h"
+#include "svn_time.h"
#include "svn_private_config.h"
#include "swig_perl_external_runtime.swg"
@@ -96,6 +102,71 @@ static void *convert_pl_revnum_t(SV *value, void *dummy, apr_pool_t *pool)
return (void *)result;
}
+static void *convert_pl_svn_string_t(SV *value, void *dummy, apr_pool_t *pool)
+{
+ svn_string_t *result = apr_palloc(pool, sizeof(svn_string_t));
+ /* just the in typemap for svn_string_t */
+ result->data = SvPV(value, result->len);
+ return (void *)result;
+}
+
+/* Convert a revision range and return a svn_opt_revision_range_t*.
+ * Value can be:
+ * - a _p_svn_opt_revision_range_t object
+ * - a reference to a two-element array, [start, end],
+ * where start and end is anything accepted by svn_swig_pl_set_revision
+ * If value is not acceptable and *(svn_boolean_t *)ctx is FALSE,
+ * convert_pl_revision_range returns NULL, otherwise it croak()s.
+ */
+static void *convert_pl_revision_range(SV *value, void *ctx, apr_pool_t *pool)
+{
+ svn_boolean_t croak_on_error = *(svn_boolean_t *)ctx;
+
+ if (sv_isobject(value) && sv_derived_from(value, "_p_svn_opt_revision_range_t")) {
+ svn_opt_revision_range_t *range;
+ /* this will assign to range */
+ SWIG_ConvertPtr(value, (void **)&range, _SWIG_TYPE("svn_opt_revision_range_t *"), 0);
+ return range;
+ }
+
+ if (SvROK(value)
+ && SvTYPE(SvRV(value)) == SVt_PVAV
+ && av_len((AV *)SvRV(value)) == 1) {
+ /* value is a two-element ARRAY */
+ AV* array = (AV *)SvRV(value);
+ svn_opt_revision_t temp_start, temp_end;
+ svn_opt_revision_t *start, *end;
+ svn_opt_revision_range_t *range;
+
+ /* Note: Due to how svn_swig_pl_set_revision works,
+ * either the passed in svn_opt_revision_t is modified
+ * (and the original pointer returned) or a different pointer
+ * is returned. svn_swig_pl_set_revision may return NULL
+ * only if croak_on_error is FALSE.
+ */
+ start = svn_swig_pl_set_revision(&temp_start,
+ *av_fetch(array, 0, 0), croak_on_error);
+ if (start == NULL)
+ return NULL;
+ end = svn_swig_pl_set_revision(&temp_end,
+ *av_fetch(array, 1, 0), croak_on_error);
+ if (end == NULL)
+ return NULL;
+
+ /* allocate a new range and copy in start and end fields */
+ range = apr_palloc(pool, sizeof(*range));
+ range->start = *start;
+ range->end = *end;
+ return range;
+ }
+
+ if (croak_on_error)
+ croak("unknown revision range: "
+ "must be an array of length 2 whose elements are acceptable "
+ "as opt_revision_t or a _p_svn_opt_revision_range_t object");
+ return NULL;
+}
+
/* perl -> c hash convertors */
static apr_hash_t *svn_swig_pl_to_hash(SV *source,
pl_element_converter_t cv,
@@ -114,9 +185,9 @@ static apr_hash_t *svn_swig_pl_to_hash(SV *source,
h = (HV *)SvRV(source);
cnt = hv_iterinit(h);
while (cnt--) {
- SV* item = hv_iternextsv(h, &key, &retlen);
- void *val = cv(item, ctx, pool);
- apr_hash_set(hash, key, APR_HASH_KEY_STRING, val);
+ SV* item = hv_iternextsv(h, &key, &retlen);
+ void *val = cv(item, ctx, pool);
+ svn_hash_sets(hash, apr_pstrmemdup(pool, key, retlen), val);
}
return hash;
@@ -154,6 +225,11 @@ apr_hash_t *svn_swig_pl_objs_to_hash_of_revnum_t(SV *source,
NULL, pool);
}
+apr_hash_t *svn_swig_pl_hash_to_prophash(SV *source, apr_pool_t *pool)
+{
+ return svn_swig_pl_to_hash(source, convert_pl_svn_string_t, NULL, pool);
+}
+
/* perl -> c array convertors */
static const
apr_array_header_t *svn_swig_pl_to_array(SV *source,
@@ -202,6 +278,42 @@ const apr_array_header_t *svn_swig_pl_objs_to_array(SV *source,
tinfo, pool);
}
+/* Convert a single revision range or an array of revisions ranges
+ * Note: We can't simply use svn_swig_pl_to_array() as is, since
+ * it immediatley checks whether source is an array reference and then
+ * proceeds to treat this as the "array of ..." case. But a revision range
+ * may be specified as a (two-element) array. Hence we first try to
+ * convert source as a single revision range. Failing that and if it's
+ * an array we then call svn_swig_pl_to_array(). Otherwise we croak().
+ */
+const apr_array_header_t *svn_swig_pl_array_to_apr_array_revision_range(
+ SV *source, apr_pool_t *pool)
+{
+ svn_boolean_t croak_on_error = FALSE;
+ svn_opt_revision_range_t *range;
+
+ if (range = convert_pl_revision_range(source, &croak_on_error, pool)) {
+ apr_array_header_t *temp = apr_array_make(pool, 1,
+ sizeof(svn_opt_revision_range_t *));
+ temp->nelts = 1;
+ APR_ARRAY_IDX(temp, 0, svn_opt_revision_range_t *) = range;
+ return temp;
+ }
+
+ if (SvROK(source) && SvTYPE(SvRV(source)) == SVt_PVAV) {
+ croak_on_error = TRUE;
+ return svn_swig_pl_to_array(source, convert_pl_revision_range,
+ &croak_on_error, pool);
+ }
+
+ croak("must pass a single revision range or a reference to an array of revision ranges");
+
+ /* This return is actually unreachable because of the croak above,
+ * however, Visual Studio's compiler doesn't like if all paths don't have
+ * a return and errors out otherwise. */
+ return NULL;
+}
+
/* element convertors for c -> perl */
typedef SV *(*element_converter_t)(void *value, void *ctx);
@@ -229,6 +341,12 @@ static SV *convert_int(int value, void *dummy)
return sv_2mortal(newSViv(value));
}
+static SV *convert_svn_revnum_t(svn_revnum_t revnum, void *dummy)
+{
+ return sv_2mortal(newSViv((long int)revnum));
+
+}
+
/* c -> perl hash convertors */
static SV *convert_hash(apr_hash_t *hash, element_converter_t converter_func,
void *ctx)
@@ -301,6 +419,80 @@ SV *svn_swig_pl_convert_array(const apr_array_header_t *array,
tinfo);
}
+SV *svn_swig_pl_revnums_to_list(const apr_array_header_t *array)
+{
+ return convert_array(array, (element_converter_t)convert_svn_revnum_t,
+ NULL);
+}
+
+/* perl -> c svn_opt_revision_t conversion */
+svn_opt_revision_t *svn_swig_pl_set_revision(svn_opt_revision_t *rev,
+ SV *source,
+ svn_boolean_t croak_on_error)
+{
+#define maybe_croak(argv) do { if (croak_on_error) croak argv; \
+ else return NULL; } while (0)
+
+ if (source == NULL || source == &PL_sv_undef || !SvOK(source)) {
+ rev->kind = svn_opt_revision_unspecified;
+ }
+ else if (sv_isobject(source) && sv_derived_from(source, "_p_svn_opt_revision_t")) {
+ /* this will assign to rev */
+ SWIG_ConvertPtr(source, (void **)&rev, _SWIG_TYPE("svn_opt_revision_t *"), 0);
+ }
+ else if (looks_like_number(source)) {
+ rev->kind = svn_opt_revision_number;
+ rev->value.number = SvIV(source);
+ }
+ else if (SvPOK(source)) {
+ char *input = SvPV_nolen(source);
+ if (svn_cstring_casecmp(input, "BASE") == 0)
+ rev->kind = svn_opt_revision_base;
+ else if (svn_cstring_casecmp(input, "HEAD") == 0)
+ rev->kind = svn_opt_revision_head;
+ else if (svn_cstring_casecmp(input, "WORKING") == 0)
+ rev->kind = svn_opt_revision_working;
+ else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
+ rev->kind = svn_opt_revision_committed;
+ else if (svn_cstring_casecmp(input, "PREV") == 0)
+ rev->kind = svn_opt_revision_previous;
+ else if (*input == '{') {
+ svn_boolean_t matched;
+ apr_time_t tm;
+ svn_error_t *err;
+
+ char *end = strchr(input,'}');
+ if (!end)
+ maybe_croak(("unknown opt_revision_t string \"%s\": "
+ "missing closing brace for \"{DATE}\"", input));
+ *end = '\0';
+ err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
+ svn_swig_pl_make_pool ((SV *)NULL));
+ if (err) {
+ svn_error_clear (err);
+ maybe_croak(("unknown opt_revision_t string \"{%s}\": "
+ "internal svn_parse_date error", input + 1));
+ }
+ if (!matched)
+ maybe_croak(("unknown opt_revision_t string \"{%s}\": "
+ "svn_parse_date failed to parse it", input + 1));
+
+ rev->kind = svn_opt_revision_date;
+ rev->value.date = tm;
+ } else
+ maybe_croak(("unknown opt_revision_t string \"%s\": must be one of "
+ "\"BASE\", \"HEAD\", \"WORKING\", \"COMMITTED\", "
+ "\"PREV\" or a \"{DATE}\"", input));
+ } else
+ maybe_croak(("unknown opt_revision_t type: must be undef, a number, "
+ "a string (one of \"BASE\", \"HEAD\", \"WORKING\", "
+ "\"COMMITTED\", \"PREV\" or a \"{DATE}\") "
+ "or a _p_svn_opt_revision_t object"));
+
+ return rev;
+#undef maybe_croak
+}
+
/* put the va_arg in stack and invoke caller_func with func.
fmt:
* O: perl object
@@ -835,6 +1027,24 @@ svn_error_t *svn_swig_pl_thunk_log_receiver(void *baton,
return SVN_NO_ERROR;
}
+svn_error_t *svn_swig_pl_thunk_log_entry_receiver(void *baton,
+ svn_log_entry_t *log_entry,
+ apr_pool_t *pool)
+{
+ SV *receiver = baton;
+
+ if (!SvOK(receiver))
+ return SVN_NO_ERROR;
+
+ svn_swig_pl_callback_thunk(CALL_SV,
+ receiver, NULL,
+ "SS",
+ log_entry, _SWIG_TYPE("svn_log_entry_t *"),
+ pool, POOLINFO);
+
+ return SVN_NO_ERROR;
+}
+
svn_error_t * svn_swig_pl_thunk_client_diff_summarize_func(
const svn_client_diff_summarize_t *diff,
void *baton,
@@ -907,6 +1117,22 @@ svn_error_t *svn_swig_pl_thunk_commit_callback(svn_revnum_t new_revision,
return SVN_NO_ERROR;
}
+svn_error_t *svn_swig_pl_thunk_commit_callback2(const svn_commit_info_t *commit_info,
+ void *baton,
+ apr_pool_t *pool)
+{
+ if (!SvOK((SV *)baton))
+ return SVN_NO_ERROR;
+
+ svn_swig_pl_callback_thunk(CALL_SV, baton, NULL,
+ "SS",
+ commit_info, _SWIG_TYPE("svn_commit_info_t *"),
+ pool, POOLINFO);
+
+ return SVN_NO_ERROR;
+}
+
+
/* Wrap RA */
static svn_error_t * thunk_open_tmp_file(apr_file_t **fp,
@@ -984,6 +1210,34 @@ svn_error_t *svn_ra_make_callbacks(svn_ra_callbacks_t **cb,
return SVN_NO_ERROR;
}
+svn_error_t *svn_swig_pl_thunk_gnome_keyring_unlock_prompt(char **keyring_password,
+ const char *keyring_name,
+ void *baton,
+ apr_pool_t *pool)
+{
+ SV *result;
+ STRLEN len;
+ /* The baton is the actual prompt function passed from perl, so we
+ * call that one and process the result. */
+ svn_swig_pl_callback_thunk(CALL_SV,
+ baton, &result,
+ "sS", keyring_name,
+ pool, POOLINFO);
+ if (!SvOK(result) || result == &PL_sv_undef) {
+ *keyring_password = NULL;
+ }
+ else if (SvPOK(result)) {
+ *keyring_password = apr_pstrdup(pool, SvPV(result, len));
+ }
+ else {
+ SvREFCNT_dec(result);
+ croak("not a string");
+ }
+
+ SvREFCNT_dec(result);
+ return SVN_NO_ERROR;
+}
+
svn_error_t *svn_swig_pl_thunk_simple_prompt(svn_auth_cred_simple_t **cred,
void *baton,
const char *realm,
@@ -1260,6 +1514,54 @@ void svn_swig_pl_status_func(void *baton,
}
+/* Thunked version of svn_wc_status_func2_t callback type. */
+void svn_swig_pl_status_func2(void *baton,
+ const char *path,
+ svn_wc_status2_t *status)
+{
+ swig_type_info *statusinfo = _SWIG_TYPE("svn_wc_status2 _t *");
+
+ if (!SvOK((SV *)baton)) {
+ return;
+ }
+
+ svn_swig_pl_callback_thunk(CALL_SV, baton, NULL, "sS",
+ path, status, statusinfo);
+
+}
+
+/* Thunked version of svn_wc_status_func3_t callback type. */
+svn_error_t *svn_swig_pl_status_func3(void *baton,
+ const char *path,
+ svn_wc_status2_t *status,
+ apr_pool_t *pool)
+{
+ SV *result;
+ svn_error_t *ret_val = SVN_NO_ERROR;
+
+ swig_type_info *statusinfo = _SWIG_TYPE("svn_wc_status2 _t *");
+
+ if (!SvOK((SV *)baton)) {
+ return ret_val;
+ }
+
+ svn_swig_pl_callback_thunk(CALL_SV, baton, &result, "sSS",
+ path, status, statusinfo,
+ pool, POOLINFO);
+
+ if (sv_derived_from(result, "_p_svn_error_t")) {
+ swig_type_info *errorinfo = _SWIG_TYPE("svn_error_t *");
+ if (SWIG_ConvertPtr(result, (void *)&ret_val, errorinfo, 0) < 0) {
+ SvREFCNT_dec(result);
+ croak("Unable to convert from SWIG Type");
+ }
+ }
+
+ SvREFCNT_dec(result);
+ return ret_val;
+}
+
+
/* Thunked version of svn_client_blame_receiver_t callback type. */
svn_error_t *svn_swig_pl_blame_func(void *baton,
apr_int64_t line_no,
diff --git a/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h b/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h
index f656bc6..3eae82e 100644
--- a/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h
+++ b/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h
@@ -29,6 +29,10 @@
#include <perl.h>
#include <XSUB.h>
+/* Perl defines a _ macro, but SVN uses it for translations.
+ * So undefine _ after including the Perl headers. */
+#undef _
+
#include <apr.h>
#include <apr_pools.h>
#include <apr_strings.h>
@@ -93,9 +97,12 @@ apr_hash_t *svn_swig_pl_objs_to_hash_by_name(SV *source,
apr_pool_t *pool);
apr_hash_t *svn_swig_pl_objs_to_hash_of_revnum_t(SV *source,
apr_pool_t *pool);
+apr_hash_t *svn_swig_pl_hash_to_prophash(SV *source, apr_pool_t *pool);
const apr_array_header_t *svn_swig_pl_objs_to_array(SV *source,
swig_type_info *tinfo,
apr_pool_t *pool);
+const apr_array_header_t *svn_swig_pl_array_to_apr_array_revision_range(
+ SV *source, apr_pool_t *pool);
SV *svn_swig_pl_array_to_list(const apr_array_header_t *array);
/* Formerly used by pre-1.0 APIs. Now unused
@@ -104,8 +111,14 @@ SV *svn_swig_pl_ints_to_list(const apr_array_header_t *array);
SV *svn_swig_pl_convert_array(const apr_array_header_t *array,
swig_type_info *tinfo);
-/* thunked log receiver function. */
-svn_error_t * svn_swig_pl_thunk_log_receiver(void *py_receiver,
+SV *svn_swig_pl_revnums_to_list(const apr_array_header_t *array);
+
+svn_opt_revision_t *svn_swig_pl_set_revision(svn_opt_revision_t *rev,
+ SV *source,
+ svn_boolean_t croak_on_error);
+
+/* thunked log_message receiver function. */
+svn_error_t * svn_swig_pl_thunk_log_receiver(void *baton,
apr_hash_t *changed_paths,
svn_revnum_t rev,
const char *author,
@@ -113,6 +126,11 @@ svn_error_t * svn_swig_pl_thunk_log_receiver(void *py_receiver,
const char *msg,
apr_pool_t *pool);
+/* thunked log_entry receiver function. */
+svn_error_t * svn_swig_pl_thunk_log_entry_receiver(void *baton,
+ svn_log_entry_t *log_entry,
+ apr_pool_t *pool);
+
/* thunked diff summarize callback. */
svn_error_t * svn_swig_pl_thunk_client_diff_summarize_func(
const svn_client_diff_summarize_t *diff,
@@ -125,6 +143,11 @@ svn_error_t *svn_swig_pl_thunk_commit_callback(svn_revnum_t new_revision,
const char *author,
void *baton);
+/* thunked commit editor callback2. */
+svn_error_t *svn_swig_pl_thunk_commit_callback2(const svn_commit_info_t *commit_info,
+ void *baton,
+ apr_pool_t *pool);
+
/* thunked repos_history callback. */
svn_error_t *svn_swig_pl_thunk_history_func(void *baton,
const char *path,
@@ -144,6 +167,11 @@ svn_error_t *svn_ra_make_callbacks(svn_ra_callbacks_t **cb,
SV *perl_callbacks,
apr_pool_t *pool);
+/* thunked gnome_keyring_unlock_prompt callback function */
+svn_error_t *svn_swig_pl_thunk_gnome_keyring_unlock_prompt(char **keyring_password,
+ const char *keyring_name,
+ void *baton,
+ apr_pool_t *pool);
/* thunked simple_prompt callback function */
svn_error_t *svn_swig_pl_thunk_simple_prompt(svn_auth_cred_simple_t **cred,
void *baton,
@@ -224,6 +252,18 @@ svn_error_t *svn_swig_pl_cancel_func(void *cancel_baton);
void svn_swig_pl_status_func(void *baton,
const char *path,
svn_wc_status_t *status);
+
+/* Thunked version of svn_wc_status_func2_t callback type. */
+void svn_swig_pl_status_func2(void *baton,
+ const char *path,
+ svn_wc_status2_t *status);
+
+/* Thunked version of svn_wc_status_func2_t callback type. */
+svn_error_t *svn_swig_pl_status_func3(void *baton,
+ const char *path,
+ svn_wc_status2_t *status,
+ apr_pool_t *pool);
+
/* Thunked version of svn_client_blame_receiver_t callback type. */
svn_error_t *svn_swig_pl_blame_func(void *baton,
apr_int64_t line_no,
diff --git a/subversion/bindings/swig/perl/native/Base.pm b/subversion/bindings/swig/perl/native/Base.pm
index 9d9ec84..8fad54a 100644
--- a/subversion/bindings/swig/perl/native/Base.pm
+++ b/subversion/bindings/swig/perl/native/Base.pm
@@ -40,7 +40,7 @@ with prefix trimmed in the namespace of the caller for this import.
The 3rd through the last parameter is a list of symbol endings that
you wish for SVN::Base not to import into your namespace. This is useful
-for cases where you may want to import certaion symbols differently than
+for cases where you may want to import certain symbols differently than
normally.
=head1 CAVEATS
diff --git a/subversion/bindings/swig/perl/native/Client.pm b/subversion/bindings/swig/perl/native/Client.pm
index d41ac0f..10da064 100644
--- a/subversion/bindings/swig/perl/native/Client.pm
+++ b/subversion/bindings/swig/perl/native/Client.pm
@@ -8,25 +8,26 @@ package SVN::Client;
my @_all_fns;
BEGIN {
@_all_fns =
- qw( version diff_summarize_dup create_context checkout3
- checkout2 checkout update3 update2 update switch2 switch
- add4 add3 add2 add mkdir3 mkdir2 mkdir delete3 delete2
- delete import3 import2 import commit4 commit3 commit2
- commit status3 status2 status log4 log3 log2 log blame4
- blame3 blame2 blame diff4 diff3 diff2 diff diff_peg4
- diff_peg3 diff_peg2 diff_peg diff_summarize2
- diff_summarize diff_summarize_peg2 diff_summarize_peg
- merge3 merge2 merge merge_peg3 merge_peg2 merge_peg
- cleanup relocate revert2 revert resolve resolved copy4
- copy3 copy2 copy move5 move4 move3 move2 move propset3
- propset2 propset revprop_set propget3 propget2
- propget revprop_get proplist3 proplist2 proplist
- revprop_list export4 export3 export2 export list2 list
- ls3 ls2 ls cat2 cat add_to_changelist
- remove_from_changelist lock unlock info2 info
- url_from_path uuid_from_url uuid_from_path open_ra_session
- invoke_blame_receiver2 invoke_blame_receiver
- invoke_diff_summarize_func
+ qw( add add2 add3 add4 add_to_changelist blame blame2 blame3 blame4
+ cat cat2 checkout checkout2 checkout3 cleanup
+ commit commit2 commit3 commit4 copy copy2 copy3 copy4
+ create_context delete delete2 delete3 diff diff2 diff3 diff4
+ diff_peg diff_peg2 diff_peg3 diff_peg4
+ diff_summarize diff_summarize2 diff_summarize_dup
+ diff_summarize_peg diff_summarize_peg2
+ export export2 export3 export4 import import2 import3
+ info info2 invoke_blame_receiver invoke_blame_receiver2
+ invoke_diff_summarize_func list list2 lock
+ log log2 log3 log4 log5 ls ls2 ls3
+ merge merge2 merge3 merge_peg merge_peg2 merge_peg3
+ mkdir mkdir2 mkdir3 mkdir4 move move2 move3 move4 move5
+ open_ra_session propget propget2 propget3
+ proplist proplist2 proplist3 propset propset2 propset3
+ relocate remove_from_changelist resolve resolved
+ revert revert2 revprop_get revprop_list revprop_set
+ status status2 status3 status4 switch switch2
+ unlock update update2 update3 update4
+ url_from_path uuid_from_path uuid_from_url version
);
require SVN::Base;
@@ -40,21 +41,18 @@ SVN::Client - Subversion client functions
=head1 SYNOPSIS
use SVN::Client;
- my $ctx = new SVN::Client(
- auth => [SVN::Client::get_simple_provider(),
- SVN::Client::get_simple_prompt_provider(\&simple_prompt,2),
- SVN::Client::get_username_provider()]
- );
+ my $client = new SVN::Client(
+ auth => [
+ SVN::Client::get_simple_provider(),
+ SVN::Client::get_simple_prompt_provider(\&simple_prompt,2),
+ SVN::Client::get_username_provider()
+ ]);
- $ctx->cat(\*STDOUT, 'http://svn.apache.org/repos/asf/subversion/trunk/README',
- 'HEAD');
+ $client->cat(\*STDOUT,
+ 'http://svn.apache.org/repos/asf/subversion/trunk/README', 'HEAD');
sub simple_prompt {
- my $cred = shift;
- my $realm = shift;
- my $default_username = shift;
- my $may_save = shift;
- my $pool = shift;
+ my ($cred, $realm, $default_username, $may_save, $pool) = @_;
print "Enter authentication info for realm: $realm\n";
print "Username: ";
@@ -81,8 +79,8 @@ The Perl method calls take a SVN::Client object as the first parameter.
This allows method call invocation of the methods to be possible. For
example, the following are equivalent:
- SVN::Client::add($ctx,$path, $recursive, $pool);
- $ctx->add($path, $recursive, $pool);
+ SVN::Client::add($client,$path, $recursive, $pool);
+ $client->add($path, $recursive, $pool);
Many of the C API calls also take a apr_pool_t pointer as their last
argument. The Perl bindings generally deal with this for you and
@@ -103,7 +101,7 @@ the rules below or will be noted otherwise in the method description.
=over 4
-=item $ctx
+=item $client
An SVN::Client object that you get from the constructor.
@@ -133,16 +131,17 @@ to an array of them.
=item $revision
-This specifies a revision in the subversion repository. You can specify a
+This specifies a revision in the Subversion repository. You can specify a
revision in several ways. The easiest and most obvious is to directly
provide the revision number. You may also use the strings (aka revision
keywords) 'HEAD', 'BASE', 'COMMITTED', and 'PREV' which have the same
meanings as in the command line client. When referencing a working copy
you can use the string 'WORKING" to reference the BASE plus any local
-modifications. undef may be used to specify an unspecified revision.
-Finally you may pass a date by specifying the date inside curly braces
+modifications. C<undef> may be used to specify an unspecified revision.
+You may also pass a date by specifying the date inside curly braces
'{}'. The date formats accepted are the same as the command line client
-accepts.
+accepts. Finally a C<_p_svn_opt_revision_t> object is accepted
+(which may have been returned by some Subversion function).
=item $recursive $nonrecursive.
@@ -163,7 +162,7 @@ The following methods are available:
=over 4
-=item $ctx = SVN::Client-E<gt>new( %options );
+=item $client = SVN::Client-E<gt>new( %options );
This class method constructs a new C<SVN::Client> object and returns
a reference to it.
@@ -252,23 +251,59 @@ sub new
return $self;
}
-=item $ctx-E<gt>add($path, $recursive, $pool);
+=item $client-E<gt>add($path, $recursive, $pool);
+
+Similar to $client-E<gt>add2(), but with $force always set to FALSE.
+
+=item $client-E<gt>add2($path, $recursive, $force, $pool);
+
+Similar to $client-E<gt>add3(), but with $no_ignore always set to FALSE.
+
+=item $client-E<gt>add3($path, $recursive, $force, $no_ignore, $pool);
+
+Similar to $client-E<gt>add4(), but with $add_parents always set to FALSE and
+$depth set according to $recursive; if TRUE, then depth is
+$SVN::Depth::infinity, if FALSE, then $SVN::Depth::empty.
+
+=item $client-E<gt>add4($path, $depth, $force, $no_ignore, $add_parents, $pool);
Schedule a working copy $path for addition to the repository.
-$path's parent must be under revision control already, but $path is not.
-If $recursive is set, then assuming $path is a directory, all of its
-contents will be scheduled for addition as well.
+If $depth is $SVN::Depth::empty, add just $path and nothing below it. If
+$SVN::Depth::files, add $path and any file children of $path. If
+$SVN::Depth::immediates, add $path, any file children, and any immediate
+subdirectories (but nothing underneath those subdirectories). If
+$SVN::Depth::infinity, add $path and everything under it fully recursively.
+
+$path's parent must be under revision control already (unless $add_parents is
+TRUE), but $path is not.
+
+Unless $force is TRUE and $path is already under version control, returns an
+$SVN::Error::ENTRY_EXISTS object. If $force is set, do not error on
+already-versioned items. When used with $depth set to $SVN::Depth::infinity
+it will enter versioned directories; scheduling unversioned children.
Calls the notify callback for each added item.
+If $no_ignore is FALSE, don't add any file or directory (or recurse into any
+directory) that is unversioned and found by recursion (as opposed to being the
+explicit target $path) and whose name matches the svn:ignore property on its
+parent directory or the global-ignores list in $client->config. If $no_ignore is
+TRUE, do include such files and directories. (Note that an svn:ignore property
+can influence this behaviour only when recursing into an already versioned
+directory with $force).
+
+If $add_parents is TRUE, recurse up $path's directory and look for a versioned
+directory. If found, add all intermediate paths between it and $path. If not
+found return $SVN::Error::NO_VERSIONED_PARENT.
+
Important: this is a B<scheduling> operation. No changes will happen
to the repository until a commit occurs. This scheduling can be
-removed with $ctx-E<gt>revert().
+removed with $client-E<gt>revert().
No return.
-=item $ctx-E<gt>blame($target, $start, $end, \&receiver, $pool);
+=item $client-E<gt>blame($target, $start, $end, \&receiver, $pool);
Invoke \&receiver subroutine on each line-blame item associated with revision
$end of $target, using $start as the default source of all blame.
@@ -288,7 +323,7 @@ The blame receiver subroutine can return an svn_error_t object
to return an error. All other returns will be ignored.
You can create an svn_error_t object with SVN::Error::create().
-=item $ctx-E<gt>cat(\*FILEHANDLE, $target, $revision, $pool);
+=item $client-E<gt>cat(\*FILEHANDLE, $target, $revision, $pool);
Outputs the content of the file identified by $target and $revision to the
FILEHANDLE. FILEHANDLE is a reference to a filehandle.
@@ -297,22 +332,49 @@ If $target is not a local path and if $revision is 'PREV' (or some
other kind that requires a local path), then an error will be raised,
because the desired revision can not be determined.
-=item $ctx-E<gt>checkout($url, $path, $revision, $recursive, $pool);
+=item $client-E<gt>checkout($url, $path, $revision, $recursive, $pool);
+
+Similar to $client-E<gt>checkout2(), but with $peg_revision always set to undef (unspecified) and $ignore_externals always set to FALSE.
+
+=item $client-E<gt>checkout2($url, $path, $peg_revision, $revision, $recursive, $ignore_externals, $pool);
+
+Similar to $client-E<gt>checkout3(), but with $allow_unver_obstructions always set
+to FALSE, and $depth set according to $recurse: if $recurse is TRUE, $depth is
+$SVN::Depth::infinity, if $recurse is FALSE, set $depth to $SVN::Depth::files.
+
+=item $client-E<gt>checkout3($url, $path, $preg_revision, $revision, $depth, $ignore_externals, $allow_unver_obstructions, $pool);
Checkout a working copy of $url at $revision using $path as the root directory
of the newly checked out working copy.
+The $peg_revision sets the revision at which the path in the $url is treated as representing.
+
$revision must be a number, 'HEAD', or a date. If $revision does not
meet these requirements the $SVN::Error::CLIENT_BAD_REVISION is raised.
+$depth is one of the constants in SVN::Depth and specifies the depth of the
+operation. If set to $SVN::Depth::unknown, then behave as if for
+$SVN::Depth::infinity, except in the case of resuming a previous checkout of
+$path (i.e. updating) in which case use the depth of the existing working copy.
+
+$ignore_exteranls if set to TRUE the operation will ignore external definitions.
+
+$allow_unver_obstructions if set to TRUE the operation will tolerate existing
+unversioned items that obstruct incoming 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
+checkout. Working properties of obstructing items are set equal to the base
+properties. If set to FALSE, then abort if there are any unversioned
+obstructing items.
+
Returns the value of the revision actually checked out of the repository.
-=item $ctx-E<gt>cleanup($dir, $pool);
+=item $client-E<gt>cleanup($dir, $pool);
Recursively cleanup a working copy directory, $dir, finishing any incomplete
operations, removing lockfiles, etc.
-=item $ctx-E<gt>commit($targets, $nonrecursive, $pool);
+=item $client-E<gt>commit($targets, $nonrecursive, $pool);
Commit files or directories referenced by target. Will use the log_msg
callback to obtain the log message for the commit.
@@ -334,7 +396,7 @@ Returns a svn_client_commit_info_t object. If the revision member of the
commit information object is $SVN::Core::INVALID_REVNUM and no error was
raised, then the commit was a no-op; nothing needed to be committed.
-=item $ctx-E<gt>copy($src_target, $src_revision, $dst_target, $pool);
+=item $client-E<gt>copy($src_target, $src_revision, $dst_target, $pool);
Copies $src_target to $dst_target.
@@ -349,15 +411,15 @@ to the repository. The log_msg callback will be called to query for a commit
log message. If the commit succeeds, return a svn_client_commit_info_t
object.
-If $dst_target is not a URL, then this is just a variant of $ctx-E<gt>add(),
+If $dst_target is not a URL, then this is just a variant of $client-E<gt>add(),
where the $dst_path items are scheduled for addition as copies. No changes
will happen to the repository until a commit occurs. This scheduling can be
-removed with $ctx-E<gt>revert(). undef will be returned in this case.
+removed with $client-E<gt>revert(). undef will be returned in this case.
Calls the notify callback for each item added at the new location, passing
the new, relative path of the added item.
-=item $ctx-E<gt>delete($targets, $force, $pool);
+=item $client-E<gt>delete($targets, $force, $pool);
Delete items from a repository or working copy.
@@ -370,7 +432,7 @@ repository.
Else, schedule the working copy paths in $targets for removal from the
repository. Each path's parent must be under revision control. This is
just a B<scheduling> operation. No changes will happen to the repository
-until a commit occurs. This scheduling can be removed with $ctx-E<gt>revert().
+until a commit occurs. This scheduling can be removed with $client-E<gt>revert().
If a path is a file it is immediately removed from the working copy. If
the path is a directory it will remain in the working copy but all the files,
and all unversioned items it contains will be removed. If $force is not set
@@ -382,7 +444,7 @@ the deleted item.
Has no return.
-=item $ctx-E<gt>diff($diff_options, $target1, $revision1, $target2, $revision2, $recursive, $ignore_ancestry, $no_diff_deleted, $outfile, $errfile, $pool);
+=item $client-E<gt>diff($diff_options, $target1, $revision1, $target2, $revision2, $recursive, $ignore_ancestry, $no_diff_deleted, $outfile, $errfile, $pool);
Produces diff output which describes the delta between $target1 at
$revision1 and $target2 at $revision2. They both must represent the same
@@ -406,7 +468,7 @@ pass an empty array to return a unified context diff (like `diff -u`).
Has no return.
-=item $ctx-E<gt>diff_summarize($target1, $revision1, $target2, $revision2, $recursive, $ignore_ancestry, \&summarize_func, $pool);
+=item $client-E<gt>diff_summarize($target1, $revision1, $target2, $revision2, $recursive, $ignore_ancestry, \&summarize_func, $pool);
Produce a diff summary which lists the changed items between $target1
at $revision1 and $target2 at $revision2 without creating text deltas.
@@ -423,7 +485,7 @@ See diff() for a description of the other parameters.
Has no return.
-=item $ctx-E<gt>export($from, $to, $revision, $force, $pool);
+=item $client-E<gt>export($from, $to, $revision, $force, $pool);
Export the contents of either a subversion repository or a subversion
working copy into a 'clean' directory (meaning a directory with no
@@ -443,7 +505,7 @@ The notify callback will be called for the items exported.
Returns the value of the revision actually exported or
$SVN::Core::INVALID_REVNUM for local exports.
-=item $ctx-E<gt>import($path, $url, $nonrecursive, $pool);
+=item $client-E<gt>import($path, $url, $nonrecursive, $pool);
Import file or directory $path into repository directory $url at head.
@@ -471,50 +533,147 @@ one is needed.
Returns a svn_client_commit_info_t object.
-=item $ctx-E<gt>log($targets, $start, $end, $discover_changed_paths, $strict_node_history, \&log_receiver, $pool);
+=item $client-E<gt>info($path_or_url, $peg_revision, $revision, \&receiver, $recurse);
-Invoke the log_receiver subroutine on each log_message from $start to $end in
-turn, inclusive (but will never invoke receiver on a given log message more
+Invokes \&receiver passing it information about $path_or_url for $revision.
+The information returned is system-generated metadata, not the sort of
+"property" metadata created by users. For methods available on the object
+passed to \&receiver, B<see svn_info_t>.
+
+If both revision arguments are either svn_opt_revision_unspecified or NULL,
+then information will be pulled solely from the working copy; no network
+connections will be made.
+
+Otherwise, information will be pulled from a repository. The actual node
+revision selected is determined by the $path_or_url as it exists in
+$peg_revision. If $peg_revision is undef, then it defaults to HEAD for URLs
+or WORKING for WC targets.
+
+If $path_or_url is not a local path, then if $revision is PREV (or some other
+kind that requires a local path), an error will be returned, because the
+desired revision cannot be determined.
+
+Uses the authentication baton cached in ctx to authenticate against the
+repository.
+
+If $recurse is true (and $path_or_url is a directory) this will be a recursive
+operation, invoking $receiver on each child.
+
+ my $receiver = sub {
+ my( $path, $info, $pool ) = @_;
+ print "Current revision of $path is ", $info->rev, "\n";
+ };
+ $client->info( 'foo/bar.c', undef, 'WORKING', $receiver, 0 );
+
+=item $client-E<gt>log5($targets, $peg_revision, $revision_ranges, $limit, $discover_changed_paths, $strict_node_history, $include_merged_revisions, $revprops, \&log_entry_receiver, $pool);
+
+Invoke C<log_entry_receiver> on each log message from
+each revision range in C<$revision_ranges> in turn,
+inclusive (but never invoke C<log_entry_receiver> on a given log message more
than once).
-$targets is a reference to an array containing all the paths or URLs for
-which the log messages are desired. The log_receiver is only invoked on
-messages whose revisions involved a change to some path in $targets.
+C<$targets> is a reference to an array of either a URL followed by zero
+or more relative paths, or 1 working copy path, for which log
+messages are desired. If the array contains only a single element
+you may set C<$targets> to this element instead.
+C<log_entry_receiver> is invoked only on messages whose
+revisions involved a change to some path in C<$targets>.
-If $discover_changed_paths is set, then the changed_paths argument to the
-log_receiver routine will be passed on each invocation.
+C<$peg_revision> indicates in which revision C<$targets> are valid.
+If C<$peg_revision> is C<undef>, it defaults to 'HEAD'
+for URLs or 'WORKING' for WC paths.
-If $strict_node_history is set, copy history (if any exists) will not be
-traversed while harvesting revision logs for each target.
+C<$revision_ranges> is either a single I<revision range> or a reference
+to an array of them. A I<revision range> may be specified
+as a reference to a two-element array C<[$start, $end]>
+of L<$revision|/$revision>s or a
+L<SVN::Core::svn_opt_revision_range_t|SVN::Core/svn_opt_revision_range_t>
+object. Examples:
-If $start or $end is undef the arp_err code will be set to:
-$SVN::Error::CLIENT_BAD_REVISION.
+ $revision_ranges = ['HEAD', 1];
+ $revision_ranges = [[2, 3], [5, 8], [13, 21]];
-Special case for repositories at revision 0:
+If C<$limit> is non-zero only invoke C<log_entry_receiver>
+on the first C<$limit> logs.
-If $start is 'HEAD' and $end is 1, then handle an empty (no revisions)
-repository specially: instead of erroring because requested revision 1
-when the highest revision is 0, just invoke $log_receiver on revision 0,
-passing undef to changed paths and empty strings for the author and date.
-This is because that particular combination of $start and $end usually indicates
-the common case of log invocation; the user wants to see all log messages from
-youngest to oldest, where the oldest commit is revision 1. That works fine,
-except there are no commits in the repository, hence this special case.
+If C<$discover_changed_paths> is true, then the I<changed_paths2> field
+in the C<$log_entry> argument to C<log_entry_receiver> will be
+populated on each invocation. I<Note:> The I<text_modified> and
+I<props_modified> fields of the I<changed_paths2> structure may have the value
+C<$SVN::Tristate::unknown> if the repository does not report that information.
+
+If C<$strict_node_history> is true, copy history (if any exists) will
+not be traversed while harvesting revision logs for each target.
+
+If C<$include_merged_revisions> is true, log information for revisions
+which have been merged to C<$targets> will also be returned.
+
+If C<$revprops> is C<undef>, retrieve all revision properties.
+Otherwise C<$revpros> should be a reference to an array of
+property names and only these properties will be retrieved
+(i.e. none if the array is empty).
+
+Use C<$pool> for any temporary allocation.
+
+Calls the notify subroutine with a C<$SVN::Wc::Notify::Action::skip>
+signal on any unversioned C<$targets>.
+
+The C<log_entry_receiver> takes the following arguments:
+C<$log_entry, $pool>. C<$log_entry> is a
+L<SVN::Core::svn_log_entry_t|SVN::Core/svn_log_entry_t> object.
-Calls the notify subroutine with a $SVN::Wc::Notify::Action::skip signal on any
-unversioned targets.
+=item $client-E<gt>log4($targets, $peg_revision, $start, $end, $limit, $discover_changed_paths, $strict_node_history, $include_merged_revisions, $revprops, \&log_entry_receiver, $pool);
-The log_receiver takes the following arguments:
-$changed_paths, $revision, $author, $date, $message, $pool
+Similar to C<$client-E<gt>log5()>,
+but takes explicit C<$start> and C<$end> parameters
+instead of C<$revision_ranges>.
-It is called once for each log $message from the $revision
-on $date by $author. $author, $date or $message may be undef.
+Deprecated.
-If $changed_paths is defined it references a hash with the keys
-every path committed in $revision; the values are svn_log_changed_path_t
+=item $client-E<gt>log3($targets, $peg_revision, $start, $end, $limit, $discover_changed_paths, $strict_node_history, \&log_message_receiver, $pool);
+
+Similar to C<$client-E<gt>log4()>, but using C<log_message_receiver>
+instead of C<log_entry_receiver>. Also, C<$include_merged_revisions>
+is false and C<$revprops> is [qw( svn:author svn:date and svn:log )].
+
+The C<log_message_receiver> takes the following arguments:
+C<$changed_paths, $revision, $author, $date, $message, $pool>.
+It is called once for each log C<$message> from the C<$revision>
+on C<$date> by C<$author>. C<$author>, C<$date> or C<$message>
+may be C<undef>.
+
+If C<$changed_paths> is defined it references a hash with the keys
+every path committed in C<$revision>; the values are
+L<SVN::Core::svn_log_changed_path_t|SVN::Core/svn_log_changed_path_t>
objects.
-=item $ctx-E<gt>ls($target, $revision, $recursive, $pool);
+Deprecated.
+
+=item $client-E<gt>log2($targets, $start, $end, $limit, $discover_changed_paths, $strict_node_history, \&log_message_receiver, $pool);
+
+Similar to C<$client-E<gt>log3()>, but with C<$peg_revision> set to C<undef>.
+
+Deprecated.
+
+=item $client-E<gt>log($targets, $start, $end, $discover_changed_paths, $strict_node_history, \&log_message_receiver, $pool);
+
+Similar to C<$client-E<gt>log2()>, but with C<$limit> set to 0.
+
+I<Special case for repositories at revision 0:>
+If C<$start> is 'HEAD' and C<$end> is 1, then handle an empty (no revisions)
+repository specially: instead of erroring because requested revision 1
+when the highest revision is 0, just invoke
+C<log_message_receiver> on revision 0,
+passing C<undef> to C<$changed_paths> and empty strings for the author and date.
+This is because that particular combination of C<$start>
+and C<$end> usually indicates
+the common case of log invocation; the user wants to see all log messages from
+youngest to oldest, where the oldest commit is revision 1. That works fine,
+except there are no commits in the repository, hence this special case.
+
+Deprecated.
+
+=item $client-E<gt>ls($target, $revision, $recursive, $pool);
Returns a hash of svn_dirent_t objects for $target at $revision.
@@ -526,7 +685,7 @@ If $target is a file only return an entry for the file.
If $target is non-existent, raises the $SVN::Error::FS_NOT_FOUND
error.
-=item $ctx-E<gt>merge($src1, $rev1, $src2, $rev2, $target_wcpath, $recursive, $ignore_ancestry, $force, $dry_run, $pool);
+=item $client-E<gt>merge($src1, $rev1, $src2, $rev2, $target_wcpath, $recursive, $ignore_ancestry, $force, $dry_run, $pool);
Merge changes from $src1/$rev1 to $src2/$rev2 into the working-copy path
$target_wcpath.
@@ -563,7 +722,22 @@ feedback is provided, but the working copy is not modified.
Has no return.
-=item $ctx-E<gt>mkdir($targets, $pool);
+=item $client-E<gt>mkdir($targets, $pool);
+
+Similar to $client-E<gt>mkdir2() except it returns an svn_client_commit_info_t
+object instead of a svn_commit_info_t object.
+
+=item $client-E<gt>mkdir2($targets, $pool);
+
+Similar to $client-E<gt>mkdir3(), but with $make_parents always FALSE, and
+$revprop_hash always undef.
+
+=item $client-E<gt>mkdir3($targets, $make_parents, $revprop_hash, $pool);
+
+Similar to $client-E<gt>mkdir4(), but returns a svn_commit_info_t object rather
+than through a callback function.
+
+=item $client-E<gt>mkdir4($targets, $make_parents, $revprop_hash, \&commit_callback, $pool);
Create a directory, either in a repository or a working copy.
@@ -574,11 +748,24 @@ object.
Else, create the directories on disk, and attempt to schedule them for addition.
In this case returns undef.
+If $make_parents is TRUE, create any non-existant parent directories also.
+
+If not undef, $revprop_hash is a reference to a hash table holding additional
+custom revision properites (property names mapped to strings) to be set on the
+new revision in the event that this is a committing operation. This hash
+cannot contain any standard Subversion properties.
+
+Calls the log message callback to query for a commit log message when one is
+needed.
+
Calls the notify callback when the directory has been created (successfully)
in the working copy, with the path of the new directory. Note this is only
called for items added to the working copy.
-=item $ctx-E<gt>move($src_path, $src_revision, $dst_path, $force, $pool);
+If \&commit_callback is not undef, then for each successful commit, call
+\&commit_callback with the svn_commit_info_t object for the commit.
+
+=item $client-E<gt>move($src_path, $src_revision, $dst_path, $force, $pool);
Move $src_path to $dst_path.
@@ -605,7 +792,7 @@ If $src_path is a working copy path
not be called.
* This is a scheduling operation. No changes will happen to the repository
-until a commit occurs. This scheduling can be removed with $ctx-E<gt>revert().
+until a commit occurs. This scheduling can be removed with $client-E<gt>revert().
If $src_path is a file it is removed from the working copy immediately.
If $src_path is a directory it will remain in the working copy but all
files, and unversioned items, it contains will be removed.
@@ -618,13 +805,13 @@ The notify callback will be called twice for each item moved, once to
indicate the deletion of the moved node, and once to indicate the addition
of the new location of the node.
-=item $ctx-E<gt>propget($propname, $target, $revision, $recursive, $pool);
+=item $client-E<gt>propget($propname, $target, $revision, $recursive, $pool);
Returns a reference to a hash containing paths or URLs, prefixed by $target (a
working copy or URL), of items for which the property $propname is set, and
whose values represent the property value for $propname at that path.
-=item $ctx-E<gt>proplist($target, $revision, $recursive, $pool);
+=item $client-E<gt>proplist($target, $revision, $recursive, $pool);
Returns a reference to an array of svn_client_proplist_item_t objects.
@@ -641,7 +828,7 @@ versioned entry below (and including) $target.
If $target is not found, raises the $SVN::Error::ENTRY_NOT_FOUND error.
-=item $ctx-E<gt>propset($propname, $propval, $target, $recursive, $pool);
+=item $client-E<gt>propset($propname, $propval, $target, $recursive, $pool);
Set $propname to $propval on $target (a working copy or URL path).
@@ -655,7 +842,7 @@ If $propname is an svn-controlled property (i.e. prefixed with svn:),
then the caller is responsible for ensuring that $propval is UTF8-encoded
and uses LF line-endings.
-=item $ctx-E<gt>relocate($dir, $from, $to, $recursive, $pool);
+=item $client-E<gt>relocate($dir, $from, $to, $recursive, $pool);
Modify a working copy directory $dir, changing any repository URLs that
begin with $from to begin with $to instead, recursing into subdirectories if
@@ -663,7 +850,7 @@ $recursive is true.
Has no return.
-=item $ctx-E<gt>resolved($path, $recursive, $pool);
+=item $client-E<gt>resolved($path, $recursive, $pool);
Removed the 'conflicted' state on a working copy path.
@@ -677,7 +864,7 @@ If $path is not in a state of conflict to begin with, do nothing.
If $path's conflict state is removed, call the notify callback with the
$path.
-=item $ctx-E<gt>revert($paths, $recursive, $pool);
+=item $client-E<gt>revert($paths, $recursive, $pool);
Restore the pristine version of a working copy $paths, effectively undoing
any local mods.
@@ -685,28 +872,28 @@ any local mods.
For each path in $paths, if it is a directory and $recursive
is true, this will be a recursive operation.
-=item $ctx-E<gt>revprop_get($propname, $url, $revision, $pool);
+=item $client-E<gt>revprop_get($propname, $url, $revision, $pool);
Returns two values, the first of which is the value of $propname on revision
$revision in the repository represented by $url. The second value is the
actual revision queried.
-Note that unlike its cousin $ctx-E<gt>propget(), this routine doesn't affect
+Note that unlike its cousin $client-E<gt>propget(), this routine doesn't affect
working copy at all; it's a pure network operation that queries an
B<unversioned> property attached to a revision. This can be used to query
log messages, dates, authors, and the like.
-=item $ctx-E<gt>revprop_list($url, $revision, $pool);
+=item $client-E<gt>revprop_list($url, $revision, $pool);
Returns two values, the first of which is a reference to a hash containing
the properties attached to $revision in the repository represented by $url.
The second value is the actual revision queried.
-Note that unlike its cousin $ctx-E<gt>proplist(), this routine doesn't read a
+Note that unlike its cousin $client-E<gt>proplist(), this routine doesn't read a
working copy at all; it's a pure network operation that reads B<unversioned>
properties attached to a revision.
-=item $ctx-E<gt>revprop_set($propname, $propval, $url, $revision, $force, $pool);
+=item $client-E<gt>revprop_set($propname, $propval, $url, $revision, $force, $pool);
Set $propname to $propval on revision $revision in the repository represented
by $url.
@@ -720,7 +907,7 @@ If $propname is an svn-controlled property (i.e. prefixed with svn:), then
the caller is responsible for ensuring that the value is UTF8-encoded and
uses LF line-endings.
-Note that unlike its cousin $ctx-E<gt>propset(), this routine doesn't affect
+Note that unlike its cousin $client-E<gt>propset(), this routine doesn't affect
the working copy at all; it's a pure network operation that changes an
B<unversioned> property attached to a revision. This can be used to tweak
log messages, dates, authors, and the like. Be careful: it's a lossy
@@ -730,10 +917,22 @@ with no way to retrieve the prior value.
Also note that unless the administrator creates a pre-revprop-change hook
in the repository, this feature will fail.
-=item $ctx-E<gt>status($path, $revision, \&status_func, $recursive, $get_all, $update, $no_ignore, $pool);
+=item $client-E<gt>status($path, $revision, \&status_func, $recursive, $get_all, $update, $no_ignore, $pool);
+
+Similar to $client-E<gt>status2(), but with ignore_externals always set to FALSE, and with the status_func receiving a svn_wc_status2_t instead of a svn_wc_status_t object.
+
+=item $client-E<gt>status2($path, $revision, \&status_func, $recursive, $get_all, $update, $no_ignore, $ignore_externals, $pool);
+
+Similar to $client-E<gt>status3(), but with the changelists passed as undef, and with recursive instead of depth.
+
+=item $client-E<gt>status3($path, $revision, \&status_func, $depth, $get_all, $update, $no_ignore, $ignore_externals, $changelists, $pool);
+
+Similar to $client-E<gt>status4(), without the pool parameter to the callback and the return of the callback is ignored.
+
+=item $client-E<gt>status4($path, $revision, \&status_func, $depth, $get_all, $update, $no_ignore, $ignore_externals, $changelists, $pool);
Given $path to a working copy directory (or single file), call status_func()
-with a set of svn_wc_status_t objects which describe the status of $path and
+with a set of svn_wc_status2_t objects which describe the status of $path and
its children.
If $recursive is true, recurse fully, else do only immediate children.
@@ -746,53 +945,25 @@ information about out-of-dateness (with respect to $revision). Also, will
return the value of the actual revision against with the working copy was
compared. (The return will be undef if $update is not set).
-The function recurses into externals definitions ('svn:externals') after
-handling the main target, if any exist. The function calls the notify callback
-with $SVN::Wc::Notify::Action::status_external action before handling each
-externals definition, and with $SVN::Wc::Notify::Action::status_completed
-after each.
+Unless ignore_externals is set, the function recurses into externals definitions
+('svn:externals') after handling the main target, if any exist. The function
+calls the notify callback with $SVN::Wc::Notify::Action::status_external action
+before handling each externals definition, and with
+$SVN::Wc::Notify::Action::status_completed after each.
+
+$changelists is a reference to an array of changelist names, used as a restrictive filter on items whose statuses are reported; that is don't report status about any item unless it's a member of those changelists. If changelists is empty (or altogether undef), no changelist filtering occurs.
The status_func subroutine takes the following parameters:
-$path, $status
+$path, $status, $pool
$path is the pathname of the file or directory which status is being
-reported. $status is a svn_wc_status_t object.
-
-The return of the status_func subroutine is ignored.
-
-=item $ctx-E<gt>info($path_or_url, $peg_revision, $revision, \&receiver, $recurse);
+reported. $status is a svn_wc_status2_t object. $pool is an apr_pool_t
+object which is cleaned beteween invocations to the callback.
-Invokes \&receiver passing it information about $path_or_url for $revision.
-The information returned is system-generated metadata, not the sort of
-"property" metadata created by users. For methods available on the object
-passed to \&receiver, B<see svn_info_t>.
+The return of the status_func subroutine can be a svn_error_t object created by
+SVN::Error::create in order to propogate an error up.
-If both revision arguments are either svn_opt_revision_unspecified or NULL,
-then information will be pulled solely from the working copy; no network
-connections will be made.
-
-Otherwise, information will be pulled from a repository. The actual node
-revision selected is determined by the $path_or_url as it exists in
-$peg_revision. If $peg_revision is undef, then it defaults to HEAD for URLs
-or WORKING for WC targets.
-
-If $path_or_url is not a local path, then if $revision is PREV (or some other
-kind that requires a local path), an error will be returned, because the
-desired revision cannot be determined.
-
-Uses the authentication baton cached in ctx to authenticate against the
-repository.
-
-If $recurse is true (and $path_or_url is a directory) this will be a recursive
-operation, invoking $receiver on each child.
-
- my $receiver = sub {
- my( $path, $info, $pool ) = @_;
- print "Current revision of $path is ", $info->rev, "\n";
- };
- $ctx->info( 'foo/bar.c', undef, 'WORKING', $receiver, 0 );
-
-=item $ctx-E<gt>switch($path, $url, $revision, $recursive, $pool);
+=item $client-E<gt>switch($path, $url, $revision, $recursive, $pool);
Switch working tree $path to $url at $revision.
@@ -811,20 +982,78 @@ scratch.
Returns the value of the revision to which the working copy was actually
switched.
-=item $ctx-E<gt>update($path, $revision, $recursive, $pool)
+=item $client-E<gt>update($path, $revision, $recursive, $pool)
+
+Similar to $client-E<gt>update2() except that it accepts only a single target in
+$path, returns a single revision, and $ignore_externals is always set to FALSE.
+
+=item $client-E<gt>update2($paths, $revision, $recursive, $ignore_externals, $pool)
+
+Similar to $client-E<gt>update3() but with $allow_unver_obstructions always set to
+FALSE, $depth_is_sticky to FALSE, and $depth set according to $recursive: if
+$recursive is TRUE, set $depth to $SVN::Depth::infinity, if $recursive is
+FALSE, set $depth to $SVN::Depth::files.
+
+=item $client-E<gt>update3($paths, $revision, $depth, $depth_is_sticky, $ignore_externals, $allow_unver_obstructions, $pool)
+
+Similar to $client-E<gt>update4() but with $make_parents always set to FALSE and
+$adds_as_modification set to TRUE.
+
+=item $client-E<gt>update4($paths, $revision, $depth, $depth_is_sticky, $ignore_externals, $allow_unver_obstructions, $adds_as_modification, $make_parents)
-Update a working copy $path to $revision.
+Update working trees $paths to $revision.
+
+$paths is a array reference of paths to be updated. Unversioned paths that are
+the direct children of a versioned path will cause an update that attempts to
+add that path; other unversioned paths are skipped.
$revision must be a revision number, 'HEAD', or a date or this method will
raise the $SVN::Error::CLIENT_BAD_REVISION error.
+The paths in $paths can be from multiple working copies from multiple
+repositories, but even if they all come from the same repository there is no
+guarantee that revision represented by 'HEAD' will remain the same as each path
+is updated.
+
+If $ignore_externals is set, don't process externals definitions as part of
+this operation.
+
+If $depth is $SVN::Depth::infinity, update fully recursivelly. Else if it is
+$SVN::Depth::immediates or $SVN::Depth::files, update each target and its file
+entries, but not its subdirectories. Else if $SVN::Depth::empty, update
+exactly each target, nonrecursively (essentially, update the target's
+properties).
+
+If $depth is $SVN::Depth::unknown, take the working depth from $paths and then
+describe as behaved above.
+
+If $depth_is_sticky is set and $depth is not $SVN::Depth::unknown, then in
+addition to update paths, also set their sticky ambient depth value to $depth.
+
+If $allow_unver_obstructions is TRUE then the update 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
+update. Working properties of obstructing items are set equal to the base
+properties. If $allow_unver_obstructions is FALSE then the update will abort
+if there are any unversioned obstructing items.
+
+If $adds_as_modification is TRUE, a local addition at the same path as an
+incoming addition of the same node kind results in a normal node with a
+possible local modification, instead of a tree conflict.
+
+If $make_parents is TRUE, create any non-existent parent directories also by
+checking them out at depth=empty.
+
Calls the notify callback for each item handled by the update, and
also for files restored from the text-base.
-Returns the revision to which the working copy was actually updated.
+Returns an array reference to an array of revision numbers with each element
+set to the revision to which $revision was resolved for the corresponding
+element of $paths.
-=item $ctx-E<gt>url_from_path($target, $pool); or SVN::Client::url_from_path($target, $pool);
+=item $client-E<gt>url_from_path($target, $pool); or SVN::Client::url_from_path($target, $pool);
Returns the URL for $target.
@@ -834,21 +1063,21 @@ If $target is a versioned item, it returns $target's entry URL.
If $target is unversioned (has no entry), returns undef.
-=item $ctx-E<gt>uuid_from_path($path, $adm_access, $pool);
+=item $client-E<gt>uuid_from_path($path, $adm_access, $pool);
Return the repository uuid for working-copy $path, allocated in $pool.
Use $adm_access to retrieve the uuid from $path's entry; if not present in the
-entry, then call $ctx-E<gt>uuid_from_url() to retrieve, using the entry's URL.
+entry, then call $client-E<gt>uuid_from_url() to retrieve, using the entry's URL.
-Note: The only reason this function falls back on $ctx-E<gt>uuid_from_url is for
+Note: The only reason this function falls back on $client-E<gt>uuid_from_url is for
compatibility purposes. Old working copies may not have uuids in the entries
files.
Note: This method probably doesn't work right now without a lot of pain,
because SVN::Wc is incomplete and it requires an adm_access object from it.
-=item $ctx-E<gt>uuid_from_url($url, $pool);
+=item $client-E<gt>uuid_from_url($url, $pool);
Return repository uuid for url.
@@ -857,7 +1086,7 @@ Return repository uuid for url.
=cut
# import methods into our name space and wrap them in a closure
-# to support method calling style $ctx->log()
+# to support method calling style $client->log()
foreach my $function (@_all_fns)
{
no strict 'refs';
@@ -937,7 +1166,7 @@ current value.
=over 4
-=item $ctx-E<gt>auth(SVN::Client::get_username_provider());
+=item $client-E<gt>auth(SVN::Client::get_username_provider());
Provides access to the auth_baton in the svn_client_ctx_t attached to the
SVN::Client object.
@@ -978,7 +1207,7 @@ sub auth
return $self->{'ctx'}->auth_baton();
}
-=item $ctx-E<gt>notify(\&notify);
+=item $client-E<gt>notify(\&notify);
Sets the notify callback for the client context to a code reference that
you pass. It always returns the current codereference set.
@@ -1009,7 +1238,7 @@ sub notify {
return ${$self->{'notify_callback'}};
}
-=item $ctx-E<gt>log_msg(\&log_msg)
+=item $client-E<gt>log_msg(\&log_msg)
Sets the log_msg callback for the client context to a code reference that you
pass. It always returns the current codereference set.
@@ -1042,7 +1271,7 @@ sub log_msg {
return ${$self->{'log_msg_callback'}};
}
-=item $ctx-E<gt>cancel(\&cancel)
+=item $client-E<gt>cancel(\&cancel)
Sets the cancellation callback for the client context to a code reference that you
pass. It always returns the current codereference set.
@@ -1075,7 +1304,7 @@ sub cancel {
return ${$self->{'cancel_callback'}};
}
-=item $ctx-E<gt>pool(new SVN::Pool);
+=item $client-E<gt>pool(new SVN::Pool);
Method that sets or gets the default pool that is passed to method calls
requiring a pool, but which were not explicitly passed one.
@@ -1096,7 +1325,7 @@ sub pool
return $self->{'pool'} = shift;
}
}
-=item $ctx-E<gt>config(SVN::Core::config_get_config(undef));
+=item $client-E<gt>config(SVN::Core::config_get_config(undef));
Method that allows access to the config member of the svn_client_ctx_t.
Accepts a Perl hash to set, which is what functions like
@@ -1265,41 +1494,41 @@ use SVN::Base qw(Client svn_info_t_);
=over 8
-=item $info->URL()
+=item $info-E<gt>URL()
Where the item lives in the repository.
-=item $info->rev()
+=item $info-E<gt>rev()
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.
-=item $info->kind()
+=item $info-E<gt>kind()
The node's kind.
-=item $info->repos_root_URL()
+=item $info-E<gt>repos_root_URL()
The root URL of the repository.
-=item $info->repos_UUID()
+=item $info-E<gt>repos_UUID()
The repository's UUID.
-=item $info->last_changed_rev()
+=item $info-E<gt>last_changed_rev()
The last revision in which this object changed.
-=item $info->last_changed_date()
+=item $info-E<gt>last_changed_date()
The date of the last_changed_rev.
-=item $info->last_changed_author()
+=item $info-E<gt>last_changed_author()
The author of the last_changed_rev.
-=item $info->lock()
+=item $info-E<gt>lock()
An exclusive lock, if present. Could be either local or remote.
@@ -1311,27 +1540,27 @@ also only useful when working with a WC.
=over 8
-=item $info->has_wc_info()
+=item $info-E<gt>has_wc_info()
-=item $info->schedule()
+=item $info-E<gt>schedule()
-=item $info->copyfrom_url()
+=item $info-E<gt>copyfrom_url()
-=item $info->copyfrom_rev()
+=item $info-E<gt>copyfrom_rev()
-=item $info->text_time()
+=item $info-E<gt>text_time()
-=item $info->prop_time()
+=item $info-E<gt>prop_time()
-=item $info->checksum()
+=item $info-E<gt>checksum()
-=item $info->conflict_old()
+=item $info-E<gt>conflict_old()
-=item $info->conflict_new()
+=item $info-E<gt>conflict_new()
-=item $info->conflict_wrk()
+=item $info-E<gt>conflict_wrk()
-=item $info->prejfile()
+=item $info-E<gt>prejfile()
=back
@@ -1344,11 +1573,11 @@ use SVN::Base qw(Client svn_client_commit_info_t_);
=over 8
-=item $citem-E<gt>path()
+=item $commit_item-E<gt>path()
Absolute working-copy path of item.
-=item $citem-E<gt>kind()
+=item $commit_item-E<gt>kind()
An integer representing the type of node it is (file/dir).
Can be one of the following constants:
@@ -1357,19 +1586,19 @@ $SVN::Node::file
$SVN::Node::dir
$SVN::Node::unknown
-=item $citem-E<gt>url()
+=item $commit_item-E<gt>url()
Commit URL for this item.
-=item $citem-E<gt>revision()
+=item $commit_item-E<gt>revision()
Revision (copyfrom_rev if state_flags has IS_COPY set).
-=item $citem-E<gt>copyform_url();
+=item $commit_item-E<gt>copyform_url();
CopyFrom URL
-=item $citem-E<gt>state_flags();
+=item $commit_item-E<gt>state_flags();
One of several state flags:
$SVN::Client::COMMIT_ITEM_ADD
@@ -1378,12 +1607,12 @@ $SVN::Client::COMMIT_ITEM_TEXT_MODS
$SVN::Client::COMMIT_ITEM_PROP_MODS
$SVN::Client::COMMIT_ITEM_IS_COPY
-=item $citem>incoming_prop_changes()
+=item $commit_item-E<gt>incoming_prop_changes()
A reference to an array of svn_prop_t objects representing changes to
WC properties.
-=item $citem>outgoing_prop_changes()
+=item $commit_item-E<gt>outgoing_prop_changes()
A reference to an array of svn_prop_t objects representing extra
changes to properties in the repository (which are not necessarily
@@ -1400,15 +1629,15 @@ use SVN::Base qw(Client svn_client_commit_item3_t_);
=over 4
-=item $cinfo-E<gt>revision()
+=item $commit_info-E<gt>revision()
Just committed revision.
-=item $cinfo-E<gt>date()
+=item $commit_info-E<gt>date()
Server-Side date of the commit as a string.
-=item $cinfo-E<gt>author()
+=item $commit_info-E<gt>author()
Author of the commit.
@@ -1476,6 +1705,136 @@ File or dir?
=back
+=head2 ADDITIONAL METHODS
+
+The following methods work, but are not currently documented in this
+file. Please consult the svn_client.h section in the Subversion API
+for more details.
+
+=over 4
+
+=item $client-E<gt>add_to_changelist(...)
+
+=item $client-E<gt>blame2(...)
+
+=item $client-E<gt>blame3(...)
+
+=item $client-E<gt>blame4(...)
+
+=item $client-E<gt>cat2(...)
+
+=item $client-E<gt>commit2(...)
+
+=item $client-E<gt>commit3(...)
+
+=item $client-E<gt>commit4(...)
+
+=item $client-E<gt>copy2(...)
+
+=item $client-E<gt>copy3(...)
+
+=item $client-E<gt>copy4(...)
+
+=item $client-E<gt>create_context(...)
+
+=item $client-E<gt>delete2(...)
+
+=item $client-E<gt>delete3(...)
+
+=item $client-E<gt>diff2(...)
+
+=item $client-E<gt>diff3(...)
+
+=item $client-E<gt>diff4(...)
+
+=item $client-E<gt>diff_peg(...)
+
+=item $client-E<gt>diff_peg2(...)
+
+=item $client-E<gt>diff_peg3(...)
+
+=item $client-E<gt>diff_peg4(...)
+
+=item $client-E<gt>diff_summarize2(...)
+
+=item $client-E<gt>diff_summarize_dup(...)
+
+=item $client-E<gt>diff_summarize_peg(...)
+
+=item $client-E<gt>diff_summarize_peg2(...)
+
+=item $client-E<gt>export2(...)
+
+=item $client-E<gt>export3(...)
+
+=item $client-E<gt>export4(...)
+
+=item $client-E<gt>import2(...)
+
+=item $client-E<gt>import3(...)
+
+=item $client-E<gt>info2(...)
+
+=item $client-E<gt>invoke_blame_receiver(...)
+
+=item $client-E<gt>invoke_blame_receiver2(...)
+
+=item $client-E<gt>invoke_diff_summarize_func(...)
+
+=item $client-E<gt>list(...)
+
+=item $client-E<gt>list2(...)
+
+=item $client-E<gt>ls2(...)
+
+=item $client-E<gt>ls3(...)
+
+=item $client-E<gt>merge2(...)
+
+=item $client-E<gt>merge3(...)
+
+=item $client-E<gt>merge_peg(...)
+
+=item $client-E<gt>merge_peg2(...)
+
+=item $client-E<gt>merge_peg3(...)
+
+=item $client-E<gt>move2(...)
+
+=item $client-E<gt>move3(...)
+
+=item $client-E<gt>move4(...)
+
+=item $client-E<gt>move5(...)
+
+=item $client-E<gt>open_ra_session(...)
+
+=item $client-E<gt>propget2(...)
+
+=item $client-E<gt>propget3(...)
+
+=item $client-E<gt>proplist2(...)
+
+=item $client-E<gt>proplist3(...)
+
+=item $client-E<gt>propset2(...)
+
+=item $client-E<gt>propset3(...)
+
+=item $client-E<gt>remove_from_changelist(...)
+
+=item $client-E<gt>resolve(...)
+
+=item $client-E<gt>revert2(...)
+
+=item $client-E<gt>switch2(...)
+
+=item $client-E<gt>unlock(...)
+
+=item $client-E<gt>version(...)
+
+=back
+
=head1 TODO
* Better support for the config.
diff --git a/subversion/bindings/swig/perl/native/Core.pm b/subversion/bindings/swig/perl/native/Core.pm
index 63e6c5a..32ec5d4 100644
--- a/subversion/bindings/swig/perl/native/Core.pm
+++ b/subversion/bindings/swig/perl/native/Core.pm
@@ -698,6 +698,47 @@ no previous history.
=cut
+package _p_svn_log_changed_path2_t;
+use SVN::Base qw(Core svn_log_changed_path2_t_);
+
+=head2 svn_log_changed_path2_t
+
+An object to represent a path that changed for a log entry.
+
+=over 4
+
+=item $lcp-E<gt>action()
+
+'A'dd, 'D'elete, 'R'eplace, 'M'odify
+
+=item $lcp-E<gt>copyfrom_path()
+
+Source path of copy, or C<undef> if there isn't any previous revision
+history.
+
+=item $lcp-E<gt>copyfrom_rev()
+
+Source revision of copy, or C<$SVN::Core::INVALID_REVNUM> if there is
+no previous history.
+
+=item $lcp-E<gt>node_kind()
+
+The type of the node, a C<$SVN::Node> enum; may be C<$SVN::Node::unknown>.
+
+=item $lcp-E<gt>text_modified()
+
+Is the text modified, a C<SVN::Tristate> enum,
+may be C<$SVN::Tristate::unknown>.
+
+=item $lcp-E<gt>props_modified()
+
+Are properties modified, a C<SVN::Tristate> enum,
+may be C<$SVN::Tristate::unknown>.
+
+=back
+
+=cut
+
package SVN::Node;
use SVN::Base qw(Core svn_node_);
@@ -710,15 +751,131 @@ $SVN::Node::dir, $SVN::Node::unknown.
=cut
+package SVN::Tristate;
+use SVN::Base qw(Core svn_tristate_);
+
+=head2 svn_tristate_t - SVN::Tristate
+
+An enum of the following constants:
+
+$SVN::Tristate::true, $SVN::Tristate::false, $SVN::Tristate::unknown
+
+Note that these true/false values have nothing to do with Perl's concept
+of truth. In fact, each constant would evaluate to true in a boolean context.
+
+=cut
+
+package SVN::Depth;
+use SVN::Base qw(Core svn_depth_);
+
+=head2 svn_depth_t - SVN::Depth
+
+An enum of the following constants:
+
+=over 4
+
+=item $SVN::Depth::unknown
+
+Depth undetermined or ignored. In some contexts, this means the client should
+choose an appropriate default depth. The server will generally treat it as
+$SVN::Depth::infinity.
+
+=item $SVN::Depth::exclude
+
+Exclude (i.e., don't descend into) directory D.
+
+Note: In Subversion 1.5, $SVN::Depth::exclude is B<not> supported anyhwere in
+the client-side (Wc/Client/etc) code; it is only supported as an argument to
+set_path functions in the Ra and Repos reporters. (This will enable future
+versions of Subversion to run updates, etc, against 1.5 servers with proper
+$SVN::Depth::exclude behavior, once we get a chance to implement client side
+support for $SVN::Depth::exclude).
+
+=item $SVN::Depth::empty
+
+Just the named directory D, no entries.
+
+Updates will not pull in any files or subdirectories not already present.
+
+=item $SVN::Depth::files
+
+D + its files children, but not subdirs.
+
+Updates will pull in any files not already present, but not subdirectories.
+
+=item $SVN::Depth::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.
+
+=item $SVN::Depth::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.
+
+=back
+
+=cut
+
package _p_svn_opt_revision_t;
use SVN::Base qw(Core svn_opt_revision_t_);
=head2 svn_opt_revision_t
+A revision, specified in one of C<SVN::Core::opt_revision_*> ways.
+
+=over 4
+
+=item $rev-E<gt>kind()
+
+An enum denoting how the revision C<$rev> was specified. One of
+C<$SVN::Core::opt_revision_unspecified>,
+C<$SVN::Core::opt_revision_number>,
+C<$SVN::Core::opt_revision_date>,
+C<$SVN::Core::opt_revision_committed>,
+C<$SVN::Core::opt_revision_previous>,
+C<$SVN::Core::opt_revision_base>,
+C<$SVN::Core::opt_revision_working>
+or C<$SVN::Core::opt_revision_head>.
+
+=item $rev-E<gt>value()
+
+Extra data about the revision. Only relevant if C<$rev-E<gt>kind> is
+C<$SVN::Core::opt_revision_number> (where it contains the revision number)
+or C<$SVN::Core::opt_revision_date> (where it contains a date).
+
+=back
+
=cut
-package _p_svn_opt_revision_t_value;
-use SVN::Base qw(Core svn_opt_revision_t_value_);
+package _p_svn_opt_revision_value_t;
+use SVN::Base qw(Core svn_opt_revision_value_t_);
+
+package _p_svn_opt_revision_range_t;
+use SVN::Base qw(Core svn_opt_revision_range_t_);
+
+=head2 svn_opt_revision_range_t
+
+An object representing a range of revisions.
+
+=over 4
+
+=item $range-E<gt>start()
+
+The first revision in the range, a C<_p_svn_opt_revision_t> object.
+
+=item $range-E<gt>end()
+
+The last revision in the range, a C<_p_svn_opt_revision_t> object.
+
+=back
+
+=cut
package _p_svn_config_t;
use SVN::Base qw(Core svn_config_);
@@ -766,6 +923,73 @@ Author of created rev.
=cut
+package _p_svn_commit_info_t;
+use SVN::Base qw(Core svn_commit_info_t_);
+
+=head2 svn_commit_info_t
+
+=over 4
+
+=item $commit-E<gt>revision()
+
+Just committed revision.
+
+=item $commit-E<gt>date()
+
+Server-side date of the commit.
+
+=item $commit-E<gt>author()
+
+Author of the commit.
+
+=item $commit-E<gt>post_commit_err()
+
+Error message from the post-commit hook, or undef.
+
+=item $commit-E<gt>repos_root()
+
+Repository root, may be C<undef> if unknown.
+
+=back
+
+=cut
+
+package _p_svn_log_entry_t;
+use SVN::Base qw(Core svn_log_entry_t_);
+
+=head2 svn_log_entry_t
+
+=item $entry-E<gt>revision()
+
+The revision of the commit.
+
+=item $entry-E<gt>revprops()
+
+A reference to a hash of requested revision properties,
+which may be C<undef> if it would contain no revprops.
+
+=item $entry-E<gt>has_children()
+
+Whether or not this message has children.
+
+=item $entry-E<gt>changed_paths2()
+
+A reference to hash containing as keys every path committed in
+C<$entry-E<gt>revision()>; the values are C<_p_svn_log_changed_path2_t>
+objects.
+
+=item $entry-E<gt>non_inheritable()
+
+Whether C<$entry-E<gt>revision()> should be interpreted as non-inheritable
+in the same sense of C<_p_svn_merge_range_t>.
+
+=item $entry-E<gt>subtractive_merge()
+
+Whether C<$entry-E<gt>revision()> is a merged revision resulting
+from a reverse merge.
+
+=cut
+
package _p_svn_auth_cred_simple_t;
use SVN::Base qw(Core svn_auth_cred_simple_t_);
@@ -924,8 +1148,7 @@ Certificate authority is unknown (i.e. not trusted).
=item $SVN::Auth::SSL::OTHER
-Other failure. This can happen if neon has introduced a new failure bit that we
-do not handle yet.
+Other failure. This can happen if some unknown error condition occurs.
=back
diff --git a/subversion/bindings/swig/perl/native/Fs.pm b/subversion/bindings/swig/perl/native/Fs.pm
index d39e81c..58b4b64 100644
--- a/subversion/bindings/swig/perl/native/Fs.pm
+++ b/subversion/bindings/swig/perl/native/Fs.pm
@@ -100,7 +100,7 @@ base revision will be $rev, which should be a number.
Generate a unique lock-token using C<$fs>.
TODO - translate this to apply to Perl:
-This can be used in to populate lock->token before calling
+This can be used in to populate lock-E<gt>token before calling
svn_fs_attach_lock().
=item $fs-E<gt>get_access()
diff --git a/subversion/bindings/swig/perl/native/Makefile.PL.in b/subversion/bindings/swig/perl/native/Makefile.PL.in
index 3d91248..a60430b 100644
--- a/subversion/bindings/swig/perl/native/Makefile.PL.in
+++ b/subversion/bindings/swig/perl/native/Makefile.PL.in
@@ -39,16 +39,35 @@ my $swig_builddir = "${svnlib_builddir}/bindings/swig";
my @modules = qw/client delta fs ra repos wc/;
my @ldpaths = (abs_path($swig_builddir) . "/perl/libsvn_swig_perl/.libs",
map { abs_path($svnlib_builddir) . "/libsvn_$_/.libs" }
- @modules, qw/diff subr ra_local ra_svn ra_neon
- ra_serf fs_base fs_util fs_fs/);
+ @modules, qw/diff subr ra_local ra_svn ra_serf
+ fs_base fs_util fs_fs/);
my @ldmodules = map {"-lsvn_$_-1"} (@modules, qw/diff subr/);
my $apr_shlib_path_var = '@SVN_APR_SHLIB_PATH_VAR@';
-my $cppflags = '@CPPFLAGS@';
-my $cflags = '@CFLAGS@';
-my $apr_cflags = '@SVN_APR_INCLUDES@';
-my $apu_cflags = '@SVN_APRUTIL_INCLUDES@';
+my $cppflags = <<'EOT';
+@CPPFLAGS@
+EOT
+my $cflags = <<'EOT';
+@CFLAGS@
+EOT
+my $includes = '@SVN_APR_INCLUDES@ @SVN_APRUTIL_INCLUDES@';
+
+chomp($cppflags);
+chomp($cflags);
+
+# Avoid this bug in SWIG:
+# https://sourceforge.net/tracker/?func=detail&aid=3571361&group_id=1645&atid=101645
+# SWIG is using C++ style comments in an extern "C" code.
+$cflags =~ s/-ansi\s+//g;
+$cflags =~ s/-std=c89\s+//g;
+$cflags =~ s/-Wall//g;
+$cflags =~ s/-Wunused//g;
+$cflags =~ s/-Wshadow//g;
+$cflags =~ s/-Wstrict-prototypes//g;
+$cflags =~ s/-Wmissing-declarations//g;
+$cflags =~ s/-Wmissing-prototypes//g;
+$cflags =~ s/-Wredundant-decls//g;
# According to the log of r7937, the flags guarded by the conditional break
# the build on FreeBSD if not conditionalized.
@@ -61,7 +80,7 @@ my %config = (
ABSTRACT => 'Perl bindings for Subversion',
DEFINE => $cppflags,
CCFLAGS => join(' ', $cflags, $Config{ccflags}),
- INC => join(' ',$apr_cflags, $apu_cflags,
+ INC => join(' ', $includes, $cppflags,
" -I$swig_srcdir/perl/libsvn_swig_perl",
" -I$svnlib_srcdir/include",
" -I$svnlib_builddir",
@@ -123,6 +142,9 @@ $module_make_commands\t\$(NOECHO) \$(TOUCH) \$\@
FULLPERLRUN=$fullperlrun \$(FULLPERL)
+update_test_counts ::
+\tfor test_file in \$(TEST_FILES); do \$(PERL) -MTest::Count::FileMutator::ByFileType::App -e 'run()' \$\$test_file; done
+
EOPOST
}
diff --git a/subversion/bindings/swig/perl/native/Ra.pm b/subversion/bindings/swig/perl/native/Ra.pm
index a03b088..567e0ec 100644
--- a/subversion/bindings/swig/perl/native/Ra.pm
+++ b/subversion/bindings/swig/perl/native/Ra.pm
@@ -257,9 +257,9 @@ on the directory. This means I<all> properties: not just ones controlled by
the user and stored in the repository fs, but non-tweakable ones
generated by the SCM system itself (e.g. 'wcprops', 'entryprops', etc).
- my ($dirents, undef, $props) = $ra->get_dir('/trunk/dir', 123);
+ my ($dirents, undef, $props) = $ra->get_dir('trunk/dir', 123);
my ($dirents, $fetched_revnum, $props) = $ra->get_dir(
- '/trunk/dir', $SVN::Core::INVALID_REVNUM);
+ 'trunk/dir', $SVN::Core::INVALID_REVNUM);
=item $ra-E<gt>get_file($path, $revnum, $fh)
@@ -281,15 +281,15 @@ the user and stored in the repository fs, but non-tweakable ones
generated by the SCM system itself (e.g. 'wcprops', 'entryprops', etc).
my (undef, $props) = $ra->get_file(
- '/trunk/foo', 123, undef);
+ 'trunk/foo', 123, undef);
open my $fh, '>', 'tmp_out'
or die "error opening file: $!";
my (undef, $props) = $ra->get_file(
- '/trunk/foo', 123, $fh);
+ 'trunk/foo', 123, $fh);
my ($fetched_revnum, $props) = $ra->get_file(
- '/trunk/foo', $SVN::Core::INVALID_REVNUM, $fh);
+ 'trunk/foo', $SVN::Core::INVALID_REVNUM, $fh);
=item $ra-E<gt>get_file_revs($path, $start, $end, \&callback)
diff --git a/subversion/bindings/swig/perl/native/Repos.pm b/subversion/bindings/swig/perl/native/Repos.pm
index 89d1ca4..02d37fc 100644
--- a/subversion/bindings/swig/perl/native/Repos.pm
+++ b/subversion/bindings/swig/perl/native/Repos.pm
@@ -87,9 +87,9 @@ Example:
close $fh;
-=item $repos->load_fs($dumpfile_fh, $feedback_fh, $uuid_action, $parent_dir, $cancel_func, $cancel_baton);
+=item $repos-E<gt>load_fs($dumpfile_fh, $feedback_fh, $uuid_action, $parent_dir, $cancel_func, $cancel_baton);
-=item $repos->load_fs2($dumpfile_fh, $feedback_fh, $uuid_action, $parent_dir, $use_pre_commit_hook, $use_post_commit_hook, $cancel_func, $cancel_baton);
+=item $repos-E<gt>load_fs2($dumpfile_fh, $feedback_fh, $uuid_action, $parent_dir, $use_pre_commit_hook, $use_post_commit_hook, $cancel_func, $cancel_baton);
Loads a dumpfile specified by the C<$dumpfile_fh> filehandle into the repository.
If the dumpstream contains copy history that is unavailable in the repository,
@@ -183,11 +183,11 @@ of paths that have changed in this revision.
=item $rev
-The revision this change occured in.
+The revision this change occurred in.
=item $date
-The date and time the revision occured.
+The date and time the revision occurred.
=item $msg
diff --git a/subversion/bindings/swig/perl/native/Wc.pm b/subversion/bindings/swig/perl/native/Wc.pm
index 0b61555..9871249 100644
--- a/subversion/bindings/swig/perl/native/Wc.pm
+++ b/subversion/bindings/swig/perl/native/Wc.pm
@@ -13,15 +13,32 @@ SVN::Wc - Subversion working copy functions
Incomplete
-=head1 OBJECTS
-
=cut
swig_init_asp_dot_net_hack($SVN::Core::gpool);
+=head1 FUNCTIONS
+
+=over 4
+
+=item SVN::Wc::parse_externals_description3($parent_directory, $desc, $canonicalize_url, $pool);
+
+Parse the string $desc as an C<svn:externals> value and return a reference
+to an array of L<_p_svn_wc_external_item2_t|svn_wc_external_item2_t> objects.
+If $canonicalize_url is true, canonicalize the C<url> member of those objects.
+$parent_directory is only used in constructing error strings.
+
+=back
+
+=cut
+
+=head1 OBJECTS
+
+=cut
+
package _p_svn_wc_t;
-=head2 svn_wc_status_t
+=head2 svn_wc_status2_t
=over 4
@@ -67,10 +84,55 @@ be one of the $SVN::Wc::Status::* constants.
An integer representing the status of the item's properties in the repository.
Can be one of the $SVN::Wc::Status::* constants.
+=item $wcstat-E<gt>repos_lock()
+
+A svn_lock_t object representing the entry's lock in the repository, if any.
+
+=item $wcstat-E<gt>url()
+
+The url (actual or expected) of the item.
+
+=item $wcstat-E<gt>ood_last_cmt_rev()
+
+An integer representing the youngest committed revision or $SVN::Core::INVALID_REVNUM is not out of date.
+
+=item $wcstat-E<gt>ood_last_cmt_date()
+
+The date of the most recent commit as microseconds since 00:00:00 January 1, 1970 UTC or 0 if not out of date.
+
+=item $wcstat-E<gt>ood_kind()
+
+An integer representing the kind of the youngest commit. Can be any of the $SVN::Node::* constants. Will be $SVN::Node::none if not out of date.
+
+=item $wcstat-E<gt>tree_conflict()
+
+A svn_wc_conflict_description_t object if the entry is the victim of a tree conflict or undef.
+
+=item $wcstat-E<gt>file_external()
+
+A boolean telling if the item is a file that was added to the working copy as an svn:externals. If file_external is TRUE, then switched is always FALSE.
+
+=item $wcstat-E<gt>pristine_text_status()
+
+An integer representing the status of the item's text as compared to the pristine base of the file. Can be one of the $SVN::Wc::Status::* constants.
+
+=item $wcstat-E<gt>pristine_prop_status()
+
+An integer representing the status of the item's properties as compared to the pristine base of the node. Can be one of the $SVN::Wc::Status::* constants.
+
=back
=cut
+package _p_svn_wc_status2_t;
+use SVN::Base qw(Wc svn_wc_status2_t_);
+
+=head2 svn_wc_status_t
+
+Same as svn_wc_status2_t, but without the repos_lock, url, ood_last_cmt_rev, ood_last_cmt_date, ood_kind, ood_last_cmt_author, tree_conflict, file_external, pristine_text_status, pristine_prop_status fields.
+
+=cut
+
package _p_svn_wc_status_t;
use SVN::Base qw(Wc svn_wc_status_t_);
@@ -183,6 +245,42 @@ package _p_svn_wc_entry_t;
# as method.
use SVN::Base qw(Wc svn_wc_entry_t_);
+=head2 svn_wc_external_item2_t
+
+=over 4
+
+=item $ext-E<gt>target_dir()
+
+The name of the subdirectory into which this external should be
+checked out. This is relative to the parent directory that
+holds this external item.
+
+=item $ext-E<gt>url()
+
+Where to check out from. This is possibly a relative external URL, as
+allowed in externals definitions, but without the peg revision.
+
+=item $ext-E<gt>revision()
+
+What revision to check out,
+a L<svn_opt_revision_t|SVN::Core/svn_opt_revision_t> object.
+The only valid kind()s for this are $SVN::Core::opt_revision_number,
+$SVN::Core::opt_revision_date, and $SVN::Core::opt_revision_head.
+
+=item $ext-E<gt>peg_revision()
+
+The peg revision to use when checking out,
+a L<svn_opt_revision_t|SVN::Core/svn_opt_revision_t> object.
+The only valid kind()s for this are $SVN::Core::opt_revision_number,
+$SVN::Core::opt_revision_date, and $SVN::Core::opt_revision_head.
+
+=back
+
+=cut
+
+package _p_svn_wc_external_item2_t;
+use SVN::Base qw(Wc svn_wc_external_item2_t_);
+
=head1 CONSTANTS
=head2 SVN::Wc::Notify::Action
@@ -430,6 +528,11 @@ A directory doesn't contain a complete entries list.
=back
+=cut
+
+package SVN::Wc::Status;
+use SVN::Base qw(Wc svn_wc_status_);
+
=head1 COPYRIGHT
Licensed to the Apache Software Foundation (ASF) under one
@@ -451,7 +554,4 @@ A directory doesn't contain a complete entries list.
=cut
-package SVN::Wc::Status;
-use SVN::Base qw(Wc svn_wc_status_);
-
1;
diff --git a/subversion/bindings/swig/perl/native/core.c b/subversion/bindings/swig/perl/native/core.c
index 2874b9a..5078f5c 100644
--- a/subversion/bindings/swig/perl/native/core.c
+++ b/subversion/bindings/swig/perl/native/core.c
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -830,50 +830,35 @@ extern "C" {
SWIGINTERN const char*
SWIG_Perl_ErrorType(int code) {
- const char* type = 0;
switch(code) {
case SWIG_MemoryError:
- type = "MemoryError";
- break;
+ return "MemoryError";
case SWIG_IOError:
- type = "IOError";
- break;
+ return "IOError";
case SWIG_RuntimeError:
- type = "RuntimeError";
- break;
+ return "RuntimeError";
case SWIG_IndexError:
- type = "IndexError";
- break;
+ return "IndexError";
case SWIG_TypeError:
- type = "TypeError";
- break;
+ return "TypeError";
case SWIG_DivisionByZero:
- type = "ZeroDivisionError";
- break;
+ return "ZeroDivisionError";
case SWIG_OverflowError:
- type = "OverflowError";
- break;
+ return "OverflowError";
case SWIG_SyntaxError:
- type = "SyntaxError";
- break;
+ return "SyntaxError";
case SWIG_ValueError:
- type = "ValueError";
- break;
+ return "ValueError";
case SWIG_SystemError:
- type = "SystemError";
- break;
+ return "SystemError";
case SWIG_AttributeError:
- type = "AttributeError";
- break;
+ return "AttributeError";
default:
- type = "RuntimeError";
+ return "RuntimeError";
}
- return type;
}
-
-
/* -----------------------------------------------------------------------------
* perlrun.swg
*
@@ -916,14 +901,14 @@ SWIG_Perl_ErrorType(int code) {
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Perl_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Perl_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Perl_SetModule(pointer)
/* Error manipulation */
#define SWIG_ErrorType(code) SWIG_Perl_ErrorType(code)
-#define SWIG_Error(code, msg) sv_setpvf(GvSV(PL_errgv),"%s %s\n", SWIG_ErrorType(code), msg)
+#define SWIG_Error(code, msg) sv_setpvf(get_sv("@", GV_ADD), "%s %s", SWIG_ErrorType(code), msg)
#define SWIG_fail goto fail
/* Perl-specific SWIG API */
@@ -1017,8 +1002,6 @@ typedef int (*SwigMagicFunc)(struct interpreter *, SV *, MAGIC *);
#endif /* MULTIPLICITY */
#endif /* PERL_OBJECT */
-/* Workaround for bug in perl 5.6.x croak and earlier */
-#if (PERL_VERSION < 8)
# ifdef PERL_OBJECT
# define SWIG_croak_null() SWIG_Perl_croak_null(pPerl)
static void SWIG_Perl_croak_null(CPerlObj *pPerl)
@@ -1026,17 +1009,16 @@ static void SWIG_Perl_croak_null(CPerlObj *pPerl)
static void SWIG_croak_null()
# endif
{
- SV *err=ERRSV;
+ SV *err = get_sv("@", GV_ADD);
# if (PERL_VERSION < 6)
croak("%_", err);
# else
- if (SvOK(err) && !SvROK(err)) croak("%_", err);
- croak(Nullch);
+ if (sv_isobject(err))
+ croak(0);
+ else
+ croak("%s", SvPV_nolen(err));
# endif
}
-#else
-# define SWIG_croak_null() croak(Nullch)
-#endif
/*
@@ -1088,8 +1070,7 @@ SWIG_TypeProxyCheck(const char *c, swig_type_info *ty) {
if (ty) {
swig_cast_info *iter = ty->cast;
while (iter) {
- if ( (!iter->type->clientdata && (strcmp(iter->type->name, c) == 0)) ||
- (iter->type->clientdata && (strcmp((char*)iter->type->clientdata, c) == 0)) ) {
+ if (strcmp(SWIG_Perl_TypeProxyName(iter->type), c) == 0) {
if (iter == ty->cast)
return iter;
/* Move iter to the top of the linked list */
@@ -1220,7 +1201,7 @@ SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, swig_type_info *t, i
SV *obj=newSV(0);
HV *hash=newHV();
HV *stash;
- sv_setref_pv(obj, (char *) SWIG_Perl_TypeProxyName(t), ptr);
+ sv_setref_pv(obj, SWIG_Perl_TypeProxyName(t), ptr);
stash=SvSTASH(SvRV(obj));
if (flags & SWIG_POINTER_OWN) {
HV *hv;
@@ -1238,7 +1219,7 @@ SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, swig_type_info *t, i
sv_bless(sv, stash);
}
else {
- sv_setref_pv(sv, (char *) SWIG_Perl_TypeProxyName(t), ptr);
+ sv_setref_pv(sv, SWIG_Perl_TypeProxyName(t), ptr);
}
}
@@ -1329,19 +1310,23 @@ typedef struct {
/* Magic variable code */
#ifndef PERL_OBJECT
-#define swig_create_magic(s,a,b,c) _swig_create_magic(s,a,b,c)
- #ifndef MULTIPLICITY
- SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *))
- #else
- SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(struct interpreter*, SV *, MAGIC *), int (*get)(struct interpreter*, SV *,MAGIC *))
- #endif
+# ifdef __cplusplus
+# define swig_create_magic(s,a,b,c) _swig_create_magic(s,const_cast<char*>(a),b,c)
+# else
+# define swig_create_magic(s,a,b,c) _swig_create_magic(s,(char*)(a),b,c)
+# endif
+# ifndef MULTIPLICITY
+SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *))
+# else
+SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(struct interpreter*, SV *, MAGIC *), int (*get)(struct interpreter*, SV *,MAGIC *))
+# endif
#else
# define swig_create_magic(s,a,b,c) _swig_create_magic(pPerl,s,a,b,c)
SWIGRUNTIME void _swig_create_magic(CPerlObj *pPerl, SV *sv, const char *name, int (CPerlObj::*set)(SV *, MAGIC *), int (CPerlObj::*get)(SV *, MAGIC *))
#endif
{
MAGIC *mg;
- sv_magic(sv,sv,'U',(char *) name,strlen(name));
+ sv_magic(sv,sv,'U',name,strlen(name));
mg = mg_find(sv,'U');
mg->mg_virtual = (MGVTBL *) malloc(sizeof(MGVTBL));
mg->mg_virtual->svt_get = (SwigMagicFunc) get;
@@ -1353,7 +1338,7 @@ SWIGRUNTIME void _swig_create_magic(CPerlObj *pPerl, SV *sv, const char *name, i
SWIGRUNTIME swig_module_info *
-SWIG_Perl_GetModule(void) {
+SWIG_Perl_GetModule(void *SWIGUNUSEDPARM(clientdata)) {
static void *type_pointer = (void *)0;
SV *pointer;
@@ -1447,9 +1432,6 @@ SWIG_Perl_SetModule(swig_module_info *module) {
#ifdef eof
#undef eof
#endif
-#ifdef bool
- #undef bool
-#endif
#ifdef close
#undef close
#endif
@@ -1490,6 +1472,14 @@ SWIG_Perl_SetModule(swig_module_info *module) {
#undef stat
#endif
+#ifdef bool
+ /* Leave if macro is from C99 stdbool.h */
+ #ifndef __bool_true_false_are_defined
+ #undef bool
+ #endif
+#endif
+
+
#define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0)
@@ -1523,127 +1513,137 @@ SWIG_Perl_SetModule(swig_module_info *module) {
#define SWIGTYPE_p_char swig_types[17]
#define SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[18]
#define SWIGTYPE_p_f_p_apr_uint32_t_p_p_void_p_void_svn_diff_datasource_e__p_svn_error_t swig_types[19]
-#define SWIGTYPE_p_f_p_p_struct_svn_auth_provider_object_t_p_apr_pool_t__void swig_types[20]
-#define SWIGTYPE_p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[21]
-#define SWIGTYPE_p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[22]
-#define SWIGTYPE_p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[23]
-#define SWIGTYPE_p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[24]
-#define SWIGTYPE_p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[25]
-#define SWIGTYPE_p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[26]
-#define SWIGTYPE_p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[27]
-#define SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_void__int swig_types[28]
-#define SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_void_p_apr_pool_t__int swig_types[29]
-#define SWIGTYPE_p_f_p_q_const__char_p_void__int swig_types[30]
-#define SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__int swig_types[31]
-#define SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[32]
-#define SWIGTYPE_p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[33]
-#define SWIGTYPE_p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[34]
-#define SWIGTYPE_p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[35]
-#define SWIGTYPE_p_f_p_void__p_svn_error_t swig_types[36]
-#define SWIGTYPE_p_f_p_void__void swig_types[37]
-#define SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t__p_svn_error_t swig_types[38]
-#define SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_p_svn_diff_t__p_svn_error_t swig_types[39]
-#define SWIGTYPE_p_f_p_void_apr_size_t__p_svn_error_t swig_types[40]
-#define SWIGTYPE_p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[41]
-#define SWIGTYPE_p_f_p_void_p_apr_off_t_p_apr_off_t_p_q_const__svn_diff_datasource_e_apr_size_t__p_svn_error_t swig_types[42]
-#define SWIGTYPE_p_f_p_void_p_char_p_apr_size_t__p_svn_error_t swig_types[43]
-#define SWIGTYPE_p_f_p_void_p_p_svn_stream_mark_t_p_apr_pool_t__p_svn_error_t swig_types[44]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_size_t__p_svn_error_t swig_types[45]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__apr_finfo_t_p_apr_pool_t__p_svn_error_t swig_types[46]
-#define SWIGTYPE_p_f_p_void_p_q_const__svn_stream_mark_t__p_svn_error_t swig_types[47]
-#define SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t swig_types[48]
-#define SWIGTYPE_p_f_p_void_p_void__void swig_types[49]
-#define SWIGTYPE_p_f_p_void_p_void_p_void_p_int__p_svn_error_t swig_types[50]
-#define SWIGTYPE_p_f_p_void_svn_diff_datasource_e__p_svn_error_t swig_types[51]
-#define SWIGTYPE_p_f_svn_boolean_t_p_q_const__char_int_p_q_const__char__p_svn_error_t swig_types[52]
-#define SWIGTYPE_p_f_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t swig_types[53]
-#define SWIGTYPE_p_f_void__p_svn_version_t swig_types[54]
-#define SWIGTYPE_p_int swig_types[55]
-#define SWIGTYPE_p_long swig_types[56]
-#define SWIGTYPE_p_p_apr_array_header_t swig_types[57]
-#define SWIGTYPE_p_p_apr_file_t swig_types[58]
-#define SWIGTYPE_p_p_apr_hash_t swig_types[59]
-#define SWIGTYPE_p_p_char swig_types[60]
-#define SWIGTYPE_p_p_svn_auth_baton_t swig_types[61]
-#define SWIGTYPE_p_p_svn_auth_cred_simple_t swig_types[62]
-#define SWIGTYPE_p_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[63]
-#define SWIGTYPE_p_p_svn_auth_cred_ssl_client_cert_t swig_types[64]
-#define SWIGTYPE_p_p_svn_auth_cred_ssl_server_trust_t swig_types[65]
-#define SWIGTYPE_p_p_svn_auth_cred_username_t swig_types[66]
-#define SWIGTYPE_p_p_svn_auth_iterstate_t swig_types[67]
-#define SWIGTYPE_p_p_svn_auth_provider_object_t swig_types[68]
-#define SWIGTYPE_p_p_svn_checksum_t swig_types[69]
-#define SWIGTYPE_p_p_svn_config_t swig_types[70]
-#define SWIGTYPE_p_p_svn_diff_t swig_types[71]
-#define SWIGTYPE_p_p_svn_io_dirent2_t swig_types[72]
-#define SWIGTYPE_p_p_svn_patch_file_t swig_types[73]
-#define SWIGTYPE_p_p_svn_patch_t swig_types[74]
-#define SWIGTYPE_p_p_svn_stream_mark_t swig_types[75]
-#define SWIGTYPE_p_p_svn_stream_t swig_types[76]
-#define SWIGTYPE_p_p_svn_string_t swig_types[77]
-#define SWIGTYPE_p_p_svn_stringbuf_t swig_types[78]
-#define SWIGTYPE_p_p_void swig_types[79]
-#define SWIGTYPE_p_svn_auth_baton_t swig_types[80]
-#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[81]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[82]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[83]
-#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[84]
-#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[85]
-#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[86]
-#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[87]
-#define SWIGTYPE_p_svn_auth_provider_t swig_types[88]
-#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[89]
-#define SWIGTYPE_p_svn_checksum_kind_t swig_types[90]
-#define SWIGTYPE_p_svn_commit_info_t swig_types[91]
-#define SWIGTYPE_p_svn_config_t swig_types[92]
-#define SWIGTYPE_p_svn_depth_t swig_types[93]
-#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[94]
-#define SWIGTYPE_p_svn_diff_datasource_e swig_types[95]
-#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[96]
-#define SWIGTYPE_p_svn_diff_file_options_t swig_types[97]
-#define SWIGTYPE_p_svn_diff_fns2_t swig_types[98]
-#define SWIGTYPE_p_svn_diff_fns_t swig_types[99]
-#define SWIGTYPE_p_svn_diff_hunk_t swig_types[100]
-#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[101]
-#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[102]
-#define SWIGTYPE_p_svn_diff_t swig_types[103]
-#define SWIGTYPE_p_svn_dirent_t swig_types[104]
-#define SWIGTYPE_p_svn_errno_t swig_types[105]
-#define SWIGTYPE_p_svn_error_t swig_types[106]
-#define SWIGTYPE_p_svn_io_dirent2_t swig_types[107]
-#define SWIGTYPE_p_svn_io_dirent_t swig_types[108]
-#define SWIGTYPE_p_svn_io_file_del_t swig_types[109]
-#define SWIGTYPE_p_svn_location_segment_t swig_types[110]
-#define SWIGTYPE_p_svn_lock_t swig_types[111]
-#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[112]
-#define SWIGTYPE_p_svn_log_changed_path_t swig_types[113]
-#define SWIGTYPE_p_svn_log_entry_t swig_types[114]
-#define SWIGTYPE_p_svn_merge_range_t swig_types[115]
-#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[116]
-#define SWIGTYPE_p_svn_node_kind_t swig_types[117]
-#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[118]
-#define SWIGTYPE_p_svn_opt_revision_t swig_types[119]
-#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[120]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[121]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t_desc_overrides swig_types[122]
-#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[123]
-#define SWIGTYPE_p_svn_patch_file_t swig_types[124]
-#define SWIGTYPE_p_svn_patch_t swig_types[125]
-#define SWIGTYPE_p_svn_prop_kind swig_types[126]
-#define SWIGTYPE_p_svn_prop_patch_t swig_types[127]
-#define SWIGTYPE_p_svn_prop_t swig_types[128]
-#define SWIGTYPE_p_svn_stream_mark_t swig_types[129]
-#define SWIGTYPE_p_svn_stream_t swig_types[130]
-#define SWIGTYPE_p_svn_string_t swig_types[131]
-#define SWIGTYPE_p_svn_stringbuf_t swig_types[132]
-#define SWIGTYPE_p_svn_tristate_t swig_types[133]
-#define SWIGTYPE_p_svn_version_checklist_t swig_types[134]
-#define SWIGTYPE_p_svn_version_t swig_types[135]
-#define SWIGTYPE_p_unsigned_char swig_types[136]
-#define SWIGTYPE_p_unsigned_long swig_types[137]
-#define SWIGTYPE_p_void swig_types[138]
-static swig_type_info *swig_types[140];
-static swig_module_info swig_module = {swig_types, 139, 0, 0, 0, 0};
+#define SWIGTYPE_p_f_p_p_char_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[20]
+#define SWIGTYPE_p_f_p_p_struct_svn_auth_provider_object_t_p_apr_pool_t__void swig_types[21]
+#define SWIGTYPE_p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[22]
+#define SWIGTYPE_p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[23]
+#define SWIGTYPE_p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[24]
+#define SWIGTYPE_p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[25]
+#define SWIGTYPE_p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[26]
+#define SWIGTYPE_p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t swig_types[27]
+#define SWIGTYPE_p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[28]
+#define SWIGTYPE_p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[29]
+#define SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_void__int swig_types[30]
+#define SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_void_p_apr_pool_t__int swig_types[31]
+#define SWIGTYPE_p_f_p_q_const__char_p_void__int swig_types[32]
+#define SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__int swig_types[33]
+#define SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[34]
+#define SWIGTYPE_p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[35]
+#define SWIGTYPE_p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[36]
+#define SWIGTYPE_p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[37]
+#define SWIGTYPE_p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[38]
+#define SWIGTYPE_p_f_p_void__p_svn_error_t swig_types[39]
+#define SWIGTYPE_p_f_p_void__void swig_types[40]
+#define SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t__p_svn_error_t swig_types[41]
+#define SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_p_svn_diff_t__p_svn_error_t swig_types[42]
+#define SWIGTYPE_p_f_p_void_apr_size_t__p_svn_error_t swig_types[43]
+#define SWIGTYPE_p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[44]
+#define SWIGTYPE_p_f_p_void_p_apr_off_t_p_apr_off_t_p_q_const__svn_diff_datasource_e_apr_size_t__p_svn_error_t swig_types[45]
+#define SWIGTYPE_p_f_p_void_p_char_p_apr_size_t__p_svn_error_t swig_types[46]
+#define SWIGTYPE_p_f_p_void_p_p_svn_stream_mark_t_p_apr_pool_t__p_svn_error_t swig_types[47]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_size_t__p_svn_error_t swig_types[48]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__apr_finfo_t_p_apr_pool_t__p_svn_error_t swig_types[49]
+#define SWIGTYPE_p_f_p_void_p_q_const__svn_stream_mark_t__p_svn_error_t swig_types[50]
+#define SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t swig_types[51]
+#define SWIGTYPE_p_f_p_void_p_void__void swig_types[52]
+#define SWIGTYPE_p_f_p_void_p_void_p_void_p_int__p_svn_error_t swig_types[53]
+#define SWIGTYPE_p_f_p_void_svn_diff_datasource_e__p_svn_error_t swig_types[54]
+#define SWIGTYPE_p_f_svn_boolean_t_p_q_const__char_int_p_q_const__char__p_svn_error_t swig_types[55]
+#define SWIGTYPE_p_f_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t swig_types[56]
+#define SWIGTYPE_p_f_void__p_svn_version_t swig_types[57]
+#define SWIGTYPE_p_int swig_types[58]
+#define SWIGTYPE_p_long swig_types[59]
+#define SWIGTYPE_p_p_apr_array_header_t swig_types[60]
+#define SWIGTYPE_p_p_apr_file_t swig_types[61]
+#define SWIGTYPE_p_p_apr_hash_t swig_types[62]
+#define SWIGTYPE_p_p_char swig_types[63]
+#define SWIGTYPE_p_p_svn_auth_baton_t swig_types[64]
+#define SWIGTYPE_p_p_svn_auth_cred_simple_t swig_types[65]
+#define SWIGTYPE_p_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[66]
+#define SWIGTYPE_p_p_svn_auth_cred_ssl_client_cert_t swig_types[67]
+#define SWIGTYPE_p_p_svn_auth_cred_ssl_server_trust_t swig_types[68]
+#define SWIGTYPE_p_p_svn_auth_cred_username_t swig_types[69]
+#define SWIGTYPE_p_p_svn_auth_iterstate_t swig_types[70]
+#define SWIGTYPE_p_p_svn_auth_provider_object_t swig_types[71]
+#define SWIGTYPE_p_p_svn_checksum_t swig_types[72]
+#define SWIGTYPE_p_p_svn_config_t swig_types[73]
+#define SWIGTYPE_p_p_svn_diff_t swig_types[74]
+#define SWIGTYPE_p_p_svn_io_dirent2_t swig_types[75]
+#define SWIGTYPE_p_p_svn_patch_file_t swig_types[76]
+#define SWIGTYPE_p_p_svn_patch_t swig_types[77]
+#define SWIGTYPE_p_p_svn_stream_mark_t swig_types[78]
+#define SWIGTYPE_p_p_svn_stream_t swig_types[79]
+#define SWIGTYPE_p_p_svn_string_t swig_types[80]
+#define SWIGTYPE_p_p_svn_stringbuf_t swig_types[81]
+#define SWIGTYPE_p_p_void swig_types[82]
+#define SWIGTYPE_p_svn_auth_baton_t swig_types[83]
+#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[84]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[85]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[86]
+#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[87]
+#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[88]
+#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[89]
+#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[90]
+#define SWIGTYPE_p_svn_auth_provider_t swig_types[91]
+#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[92]
+#define SWIGTYPE_p_svn_checksum_ctx_t swig_types[93]
+#define SWIGTYPE_p_svn_checksum_kind_t swig_types[94]
+#define SWIGTYPE_p_svn_checksum_t swig_types[95]
+#define SWIGTYPE_p_svn_commit_info_t swig_types[96]
+#define SWIGTYPE_p_svn_config_t swig_types[97]
+#define SWIGTYPE_p_svn_depth_t swig_types[98]
+#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[99]
+#define SWIGTYPE_p_svn_diff_datasource_e swig_types[100]
+#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[101]
+#define SWIGTYPE_p_svn_diff_file_options_t swig_types[102]
+#define SWIGTYPE_p_svn_diff_fns2_t swig_types[103]
+#define SWIGTYPE_p_svn_diff_fns_t swig_types[104]
+#define SWIGTYPE_p_svn_diff_hunk_t swig_types[105]
+#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[106]
+#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[107]
+#define SWIGTYPE_p_svn_diff_t swig_types[108]
+#define SWIGTYPE_p_svn_dirent_t swig_types[109]
+#define SWIGTYPE_p_svn_errno_t swig_types[110]
+#define SWIGTYPE_p_svn_error_t swig_types[111]
+#define SWIGTYPE_p_svn_io_dirent2_t swig_types[112]
+#define SWIGTYPE_p_svn_io_dirent_t swig_types[113]
+#define SWIGTYPE_p_svn_io_file_del_t swig_types[114]
+#define SWIGTYPE_p_svn_location_segment_t swig_types[115]
+#define SWIGTYPE_p_svn_lock_t swig_types[116]
+#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[117]
+#define SWIGTYPE_p_svn_log_changed_path_t swig_types[118]
+#define SWIGTYPE_p_svn_log_entry_t swig_types[119]
+#define SWIGTYPE_p_svn_merge_range_t swig_types[120]
+#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[121]
+#define SWIGTYPE_p_svn_node_kind_t swig_types[122]
+#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[123]
+#define SWIGTYPE_p_svn_opt_revision_t swig_types[124]
+#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[125]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[126]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t_desc_overrides swig_types[127]
+#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[128]
+#define SWIGTYPE_p_svn_patch_file_t swig_types[129]
+#define SWIGTYPE_p_svn_patch_t swig_types[130]
+#define SWIGTYPE_p_svn_prop_inherited_item_t swig_types[131]
+#define SWIGTYPE_p_svn_prop_kind swig_types[132]
+#define SWIGTYPE_p_svn_prop_patch_t swig_types[133]
+#define SWIGTYPE_p_svn_prop_t swig_types[134]
+#define SWIGTYPE_p_svn_stream_mark_t swig_types[135]
+#define SWIGTYPE_p_svn_stream_t swig_types[136]
+#define SWIGTYPE_p_svn_string_t swig_types[137]
+#define SWIGTYPE_p_svn_stringbuf_t swig_types[138]
+#define SWIGTYPE_p_svn_tristate_t swig_types[139]
+#define SWIGTYPE_p_svn_version_checklist_t swig_types[140]
+#define SWIGTYPE_p_svn_version_ext_linked_lib_t swig_types[141]
+#define SWIGTYPE_p_svn_version_ext_loaded_lib_t swig_types[142]
+#define SWIGTYPE_p_svn_version_extended_t swig_types[143]
+#define SWIGTYPE_p_svn_version_t swig_types[144]
+#define SWIGTYPE_p_svn_wc_external_item2_t swig_types[145]
+#define SWIGTYPE_p_unsigned_char swig_types[146]
+#define SWIGTYPE_p_unsigned_long swig_types[147]
+#define SWIGTYPE_p_void swig_types[148]
+static swig_type_info *swig_types[150];
+static swig_module_info swig_module = {swig_types, 149, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@@ -1654,7 +1654,7 @@ static swig_module_info swig_module = {swig_types, 139, 0, 0, 0, 0};
#define SWIG_name "SVN::_Core::boot_SVN___Core"
#define SWIG_prefix "SVN::_Core::"
-#define SWIGVERSION 0x020004
+#define SWIGVERSION 0x020009
#define SWIG_VERSION SWIGVERSION
@@ -1693,10 +1693,13 @@ SWIGEXPORT void SWIG_init (CV *cv, CPerlObj *);
SWIGINTERNINLINE SV *
SWIG_From_long SWIG_PERL_DECL_ARGS_1(long value)
-{
- SV *obj = sv_newmortal();
- sv_setiv(obj, (IV) value);
- return obj;
+{
+ SV *sv;
+ if (value >= IV_MIN && value <= IV_MAX)
+ sv = newSViv(value);
+ else
+ sv = newSVpvf("%ld", value);
+ return sv_2mortal(sv);
}
@@ -1777,9 +1780,20 @@ SWIG_CanCastAsInteger(double *d, double min, double max) {
SWIGINTERN int
SWIG_AsVal_long SWIG_PERL_DECL_ARGS_2(SV *obj, long* val)
{
- if (SvIOK(obj)) {
- if (val) *val = SvIV(obj);
- return SWIG_OK;
+ if (SvUOK(obj)) {
+ UV v = SvUV(obj);
+ if (v <= LONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
+ } else if (SvIOK(obj)) {
+ IV v = SvIV(obj);
+ if (v >= LONG_MIN && v <= LONG_MAX) {
+ if(val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
} else {
int dispatch = 0;
const char *nptr = SvPV_nolen(obj);
@@ -1864,9 +1878,20 @@ svn_swig_pl_set_current_pool (apr_pool_t *pool)
SWIGINTERN int
SWIG_AsVal_long_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, long long *val)
{
- if (SvIOK(obj)) {
- if (val) *val = SvIV(obj);
- return SWIG_OK;
+ if (SvUOK(obj)) {
+ UV v = SvUV(obj);
+ if (v < LLONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
+ } else if (SvIOK(obj)) {
+ IV v = SvIV(obj);
+ if (v >= LLONG_MIN && v <= LLONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
} else {
int dispatch = 0;
const char *nptr = SvPV_nolen(obj);
@@ -2114,6 +2139,11 @@ typedef struct {
+#include "svn_cmdline.h"
+
+
+
+
#include "svn_auth.h"
@@ -2121,16 +2151,19 @@ SWIGINTERN int
SWIG_AsVal_unsigned_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, unsigned long *val)
{
if (SvUOK(obj)) {
- if (val) *val = SvUV(obj);
- return SWIG_OK;
- } else if (SvIOK(obj)) {
- long v = SvIV(obj);
- if (v >= 0) {
+ UV v = SvUV(obj);
+ if (v <= ULONG_MAX) {
if (val) *val = v;
return SWIG_OK;
- } else {
- return SWIG_OverflowError;
}
+ return SWIG_OverflowError;
+ } else if (SvIOK(obj)) {
+ IV v = SvIV(obj);
+ if (v >= 0 && v <= ULONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
} else {
int dispatch = 0;
const char *nptr = SvPV_nolen(obj);
@@ -2164,10 +2197,13 @@ SWIG_AsVal_unsigned_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, unsigned long *val)
SWIGINTERNINLINE SV *
SWIG_From_unsigned_SS_long SWIG_PERL_DECL_ARGS_1(unsigned long value)
-{
- SV *obj = sv_newmortal();
- sv_setuv(obj, (UV) value);
- return obj;
+{
+ SV *sv;
+ if (value <= UV_MAX)
+ sv = newSVuv(value);
+ else
+ sv = newSVpvf("%lu", value);
+ return sv_2mortal(sv);
}
@@ -2256,6 +2292,11 @@ static svn_boolean_t svn_config_invoke_enumerator2(
return _obj(name, value, baton, pool);
}
+static svn_error_t * svn_config_invoke_auth_walk_func(
+ svn_config_auth_walk_func_t _obj, svn_boolean_t *delete_cred, void *cleanup_baton, const char *cred_kind, const char *realmstring, apr_hash_t *hash, apr_pool_t *scratch_pool) {
+ return _obj(delete_cred, cleanup_baton, cred_kind, realmstring, hash, scratch_pool);
+}
+
#include "svn_utf.h"
@@ -2316,6 +2357,11 @@ static svn_error_t * svn_stream_invoke_seek_fn(
return _obj(baton, mark);
}
+static svn_error_t * svn_stream_invoke_lazyopen_func(
+ svn_stream_lazyopen_func_t _obj, svn_stream_t **stream, void *baton, apr_pool_t *result_pool, apr_pool_t *scratch_pool) {
+ return _obj(stream, baton, result_pool, scratch_pool);
+}
+
static svn_error_t * svn_io_invoke_walk_func(
svn_io_walk_func_t _obj, void *baton, const char *path, const apr_finfo_t *finfo, apr_pool_t *pool) {
return _obj(baton, path, finfo, pool);
@@ -2323,6 +2369,34 @@ static svn_error_t * svn_io_invoke_walk_func(
+#include "svn_checksum.h"
+
+
+
+
+/* Helper function to set the gnome-keyring unlock prompt function. This
+ * C function accepts an auth baton, a function and a prompt baton, but
+ * the below callback_typemap uses both the function and the prompt
+ * baton, so the resulting binding has just two arguments: The auth
+ * baton and the prompt function.
+ * The prompt function should again have two arguments: The keyring name
+ * (string) and a pool (except for the ruby version, which doesn't have
+ * the pool argument). It should return the entered password (string).
+ * This binding generated for this function generates a reference to the
+ * prompt function that was passed into this. The caller should store
+ * that reference somewhere, to prevent the function from being garbage
+ * collected...
+ */
+static void svn_auth_set_gnome_keyring_unlock_prompt_func(svn_auth_baton_t *ab,
+ svn_auth_gnome_keyring_unlock_prompt_func_t prompt_func,
+ void *prompt_baton) {
+ svn_auth_set_parameter(ab, SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_FUNC,
+ prompt_func);
+ svn_auth_set_parameter(ab, SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_BATON,
+ prompt_baton);
+}
+
+
#include "svn_md5.h"
@@ -2985,7 +3059,7 @@ XS(_wrap_svn_sleep_for_timestamps) {
XS(_wrap_svn_error_t_apr_err_set) {
{
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
apr_status_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2999,9 +3073,9 @@ XS(_wrap_svn_error_t_apr_err_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_error_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_error_t_apr_err_set" "', argument " "1"" of type '" "svn_error_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_error_t_apr_err_set" "', argument " "1"" of type '" "struct svn_error_t *""'");
}
- arg1 = (svn_error_t *)(argp1);
+ arg1 = (struct svn_error_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_error_t_apr_err_set" "', argument " "2"" of type '" "apr_status_t""'");
@@ -3022,7 +3096,7 @@ XS(_wrap_svn_error_t_apr_err_set) {
XS(_wrap_svn_error_t_apr_err_get) {
{
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3034,9 +3108,9 @@ XS(_wrap_svn_error_t_apr_err_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_error_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_error_t_apr_err_get" "', argument " "1"" of type '" "svn_error_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_error_t_apr_err_get" "', argument " "1"" of type '" "struct svn_error_t *""'");
}
- arg1 = (svn_error_t *)(argp1);
+ arg1 = (struct svn_error_t *)(argp1);
result = (apr_status_t) ((arg1)->apr_err);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -3050,7 +3124,7 @@ XS(_wrap_svn_error_t_apr_err_get) {
XS(_wrap_svn_error_t_message_get) {
{
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3062,9 +3136,9 @@ XS(_wrap_svn_error_t_message_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_error_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_error_t_message_get" "', argument " "1"" of type '" "svn_error_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_error_t_message_get" "', argument " "1"" of type '" "struct svn_error_t *""'");
}
- arg1 = (svn_error_t *)(argp1);
+ arg1 = (struct svn_error_t *)(argp1);
result = (char *) ((arg1)->message);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -3078,7 +3152,7 @@ XS(_wrap_svn_error_t_message_get) {
XS(_wrap_svn_error_t_child_set) {
{
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
struct svn_error_t *arg2 = (struct svn_error_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3092,9 +3166,9 @@ XS(_wrap_svn_error_t_child_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_error_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_error_t_child_set" "', argument " "1"" of type '" "svn_error_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_error_t_child_set" "', argument " "1"" of type '" "struct svn_error_t *""'");
}
- arg1 = (svn_error_t *)(argp1);
+ arg1 = (struct svn_error_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_error_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_error_t_child_set" "', argument " "2"" of type '" "struct svn_error_t *""'");
@@ -3115,7 +3189,7 @@ XS(_wrap_svn_error_t_child_set) {
XS(_wrap_svn_error_t_child_get) {
{
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3127,9 +3201,9 @@ XS(_wrap_svn_error_t_child_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_error_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_error_t_child_get" "', argument " "1"" of type '" "svn_error_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_error_t_child_get" "', argument " "1"" of type '" "struct svn_error_t *""'");
}
- arg1 = (svn_error_t *)(argp1);
+ arg1 = (struct svn_error_t *)(argp1);
result = (struct svn_error_t *) ((arg1)->child);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_error_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -3143,7 +3217,7 @@ XS(_wrap_svn_error_t_child_get) {
XS(_wrap_svn_error_t_pool_set) {
{
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
apr_pool_t *arg2 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool ;
void *argp1 = 0 ;
@@ -3159,9 +3233,9 @@ XS(_wrap_svn_error_t_pool_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_error_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_error_t_pool_set" "', argument " "1"" of type '" "svn_error_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_error_t_pool_set" "', argument " "1"" of type '" "struct svn_error_t *""'");
}
- arg1 = (svn_error_t *)(argp1);
+ arg1 = (struct svn_error_t *)(argp1);
if (items > 1) {
}
@@ -3180,7 +3254,7 @@ XS(_wrap_svn_error_t_pool_set) {
XS(_wrap_svn_error_t_pool_get) {
{
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3192,9 +3266,9 @@ XS(_wrap_svn_error_t_pool_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_error_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_error_t_pool_get" "', argument " "1"" of type '" "svn_error_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_error_t_pool_get" "', argument " "1"" of type '" "struct svn_error_t *""'");
}
- arg1 = (svn_error_t *)(argp1);
+ arg1 = (struct svn_error_t *)(argp1);
result = (apr_pool_t *) ((arg1)->pool);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_pool_t, 0 | 0); argvi++ ;
@@ -3208,7 +3282,7 @@ XS(_wrap_svn_error_t_pool_get) {
XS(_wrap_svn_error_t_file_get) {
{
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3220,9 +3294,9 @@ XS(_wrap_svn_error_t_file_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_error_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_error_t_file_get" "', argument " "1"" of type '" "svn_error_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_error_t_file_get" "', argument " "1"" of type '" "struct svn_error_t *""'");
}
- arg1 = (svn_error_t *)(argp1);
+ arg1 = (struct svn_error_t *)(argp1);
result = (char *) ((arg1)->file);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -3236,7 +3310,7 @@ XS(_wrap_svn_error_t_file_get) {
XS(_wrap_svn_error_t_line_set) {
{
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
long arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3250,9 +3324,9 @@ XS(_wrap_svn_error_t_line_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_error_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_error_t_line_set" "', argument " "1"" of type '" "svn_error_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_error_t_line_set" "', argument " "1"" of type '" "struct svn_error_t *""'");
}
- arg1 = (svn_error_t *)(argp1);
+ arg1 = (struct svn_error_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_error_t_line_set" "', argument " "2"" of type '" "long""'");
@@ -3273,7 +3347,7 @@ XS(_wrap_svn_error_t_line_set) {
XS(_wrap_svn_error_t_line_get) {
{
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3285,9 +3359,9 @@ XS(_wrap_svn_error_t_line_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_error_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_error_t_line_get" "', argument " "1"" of type '" "svn_error_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_error_t_line_get" "', argument " "1"" of type '" "struct svn_error_t *""'");
}
- arg1 = (svn_error_t *)(argp1);
+ arg1 = (struct svn_error_t *)(argp1);
result = (long) ((arg1)->line);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -3302,34 +3376,19 @@ XS(_wrap_svn_error_t_line_get) {
XS(_wrap_new_svn_error_t) {
{
int argvi = 0;
- svn_error_t *result = 0 ;
+ struct svn_error_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_error_t();");
}
{
- result = (svn_error_t *)calloc(1, sizeof(svn_error_t));
+ result = (struct svn_error_t *)calloc(1, sizeof(struct svn_error_t));
}
- {
- if (result) {
- SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
-
- if (SvOK(exception_handler)) {
- SV *callback_result;
-
- svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
- &callback_result, "S", result,
- SWIGTYPE_p_svn_error_t);
- } else {
- ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
- argvi++;
- }
- }
- }
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_error_t, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
XSRETURN(argvi);
fail:
SWIG_croak_null();
@@ -3339,7 +3398,7 @@ XS(_wrap_new_svn_error_t) {
XS(_wrap_delete_svn_error_t) {
{
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3350,9 +3409,9 @@ XS(_wrap_delete_svn_error_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_error_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_error_t" "', argument " "1"" of type '" "svn_error_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_error_t" "', argument " "1"" of type '" "struct svn_error_t *""'");
}
- arg1 = (svn_error_t *)(argp1);
+ arg1 = (struct svn_error_t *)(argp1);
{
free((char *) arg1);
@@ -3744,7 +3803,7 @@ XS(_wrap_svn_depth_from_word) {
XS(_wrap_svn_dirent_t_kind_set) {
{
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3758,9 +3817,9 @@ XS(_wrap_svn_dirent_t_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_dirent_t_kind_set" "', argument " "1"" of type '" "svn_dirent_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_dirent_t_kind_set" "', argument " "1"" of type '" "struct svn_dirent_t *""'");
}
- arg1 = (svn_dirent_t *)(argp1);
+ arg1 = (struct svn_dirent_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_dirent_t_kind_set" "', argument " "2"" of type '" "svn_node_kind_t""'");
@@ -3781,7 +3840,7 @@ XS(_wrap_svn_dirent_t_kind_set) {
XS(_wrap_svn_dirent_t_kind_get) {
{
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3793,9 +3852,9 @@ XS(_wrap_svn_dirent_t_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_dirent_t_kind_get" "', argument " "1"" of type '" "svn_dirent_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_dirent_t_kind_get" "', argument " "1"" of type '" "struct svn_dirent_t *""'");
}
- arg1 = (svn_dirent_t *)(argp1);
+ arg1 = (struct svn_dirent_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -3809,7 +3868,7 @@ XS(_wrap_svn_dirent_t_kind_get) {
XS(_wrap_svn_dirent_t_size_set) {
{
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
svn_filesize_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3823,9 +3882,9 @@ XS(_wrap_svn_dirent_t_size_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_dirent_t_size_set" "', argument " "1"" of type '" "svn_dirent_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_dirent_t_size_set" "', argument " "1"" of type '" "struct svn_dirent_t *""'");
}
- arg1 = (svn_dirent_t *)(argp1);
+ arg1 = (struct svn_dirent_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_dirent_t_size_set" "', argument " "2"" of type '" "svn_filesize_t""'");
@@ -3846,7 +3905,7 @@ XS(_wrap_svn_dirent_t_size_set) {
XS(_wrap_svn_dirent_t_size_get) {
{
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3858,9 +3917,9 @@ XS(_wrap_svn_dirent_t_size_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_dirent_t_size_get" "', argument " "1"" of type '" "svn_dirent_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_dirent_t_size_get" "', argument " "1"" of type '" "struct svn_dirent_t *""'");
}
- arg1 = (svn_dirent_t *)(argp1);
+ arg1 = (struct svn_dirent_t *)(argp1);
result = ((arg1)->size);
{
char temp[256];
@@ -3879,7 +3938,7 @@ XS(_wrap_svn_dirent_t_size_get) {
XS(_wrap_svn_dirent_t_has_props_set) {
{
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3893,9 +3952,9 @@ XS(_wrap_svn_dirent_t_has_props_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_dirent_t_has_props_set" "', argument " "1"" of type '" "svn_dirent_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_dirent_t_has_props_set" "', argument " "1"" of type '" "struct svn_dirent_t *""'");
}
- arg1 = (svn_dirent_t *)(argp1);
+ arg1 = (struct svn_dirent_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_dirent_t_has_props_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -3916,7 +3975,7 @@ XS(_wrap_svn_dirent_t_has_props_set) {
XS(_wrap_svn_dirent_t_has_props_get) {
{
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3928,9 +3987,9 @@ XS(_wrap_svn_dirent_t_has_props_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_dirent_t_has_props_get" "', argument " "1"" of type '" "svn_dirent_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_dirent_t_has_props_get" "', argument " "1"" of type '" "struct svn_dirent_t *""'");
}
- arg1 = (svn_dirent_t *)(argp1);
+ arg1 = (struct svn_dirent_t *)(argp1);
result = (svn_boolean_t) ((arg1)->has_props);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -3944,7 +4003,7 @@ XS(_wrap_svn_dirent_t_has_props_get) {
XS(_wrap_svn_dirent_t_created_rev_set) {
{
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3958,9 +4017,9 @@ XS(_wrap_svn_dirent_t_created_rev_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_dirent_t_created_rev_set" "', argument " "1"" of type '" "svn_dirent_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_dirent_t_created_rev_set" "', argument " "1"" of type '" "struct svn_dirent_t *""'");
}
- arg1 = (svn_dirent_t *)(argp1);
+ arg1 = (struct svn_dirent_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_dirent_t_created_rev_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -3981,7 +4040,7 @@ XS(_wrap_svn_dirent_t_created_rev_set) {
XS(_wrap_svn_dirent_t_created_rev_get) {
{
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3993,9 +4052,9 @@ XS(_wrap_svn_dirent_t_created_rev_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_dirent_t_created_rev_get" "', argument " "1"" of type '" "svn_dirent_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_dirent_t_created_rev_get" "', argument " "1"" of type '" "struct svn_dirent_t *""'");
}
- arg1 = (svn_dirent_t *)(argp1);
+ arg1 = (struct svn_dirent_t *)(argp1);
result = (svn_revnum_t) ((arg1)->created_rev);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -4009,7 +4068,7 @@ XS(_wrap_svn_dirent_t_created_rev_get) {
XS(_wrap_svn_dirent_t_time_set) {
{
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4023,9 +4082,9 @@ XS(_wrap_svn_dirent_t_time_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_dirent_t_time_set" "', argument " "1"" of type '" "svn_dirent_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_dirent_t_time_set" "', argument " "1"" of type '" "struct svn_dirent_t *""'");
}
- arg1 = (svn_dirent_t *)(argp1);
+ arg1 = (struct svn_dirent_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_dirent_t_time_set" "', argument " "2"" of type '" "apr_time_t""'");
@@ -4046,7 +4105,7 @@ XS(_wrap_svn_dirent_t_time_set) {
XS(_wrap_svn_dirent_t_time_get) {
{
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4058,9 +4117,9 @@ XS(_wrap_svn_dirent_t_time_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_dirent_t_time_get" "', argument " "1"" of type '" "svn_dirent_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_dirent_t_time_get" "', argument " "1"" of type '" "struct svn_dirent_t *""'");
}
- arg1 = (svn_dirent_t *)(argp1);
+ arg1 = (struct svn_dirent_t *)(argp1);
result = ((arg1)->time);
{
char temp[256];
@@ -4079,7 +4138,7 @@ XS(_wrap_svn_dirent_t_time_get) {
XS(_wrap_svn_dirent_t_last_author_get) {
{
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4091,9 +4150,9 @@ XS(_wrap_svn_dirent_t_last_author_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_dirent_t_last_author_get" "', argument " "1"" of type '" "svn_dirent_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_dirent_t_last_author_get" "', argument " "1"" of type '" "struct svn_dirent_t *""'");
}
- arg1 = (svn_dirent_t *)(argp1);
+ arg1 = (struct svn_dirent_t *)(argp1);
result = (char *) ((arg1)->last_author);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -4108,14 +4167,14 @@ XS(_wrap_svn_dirent_t_last_author_get) {
XS(_wrap_new_svn_dirent_t) {
{
int argvi = 0;
- svn_dirent_t *result = 0 ;
+ struct svn_dirent_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_dirent_t();");
}
{
- result = (svn_dirent_t *)calloc(1, sizeof(svn_dirent_t));
+ result = (struct svn_dirent_t *)calloc(1, sizeof(struct svn_dirent_t));
@@ -4130,7 +4189,7 @@ XS(_wrap_new_svn_dirent_t) {
XS(_wrap_delete_svn_dirent_t) {
{
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4141,9 +4200,9 @@ XS(_wrap_delete_svn_dirent_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_dirent_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_dirent_t" "', argument " "1"" of type '" "svn_dirent_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_dirent_t" "', argument " "1"" of type '" "struct svn_dirent_t *""'");
}
- arg1 = (svn_dirent_t *)(argp1);
+ arg1 = (struct svn_dirent_t *)(argp1);
{
free((char *) arg1);
@@ -4203,9 +4262,42 @@ XS(_wrap_svn_dirent_dup) {
}
+XS(_wrap_svn_dirent_create) {
+ {
+ apr_pool_t *arg1 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int argvi = 0;
+ svn_dirent_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg1 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 0) || (items > 1)) {
+ SWIG_croak("Usage: svn_dirent_create(result_pool);");
+ }
+ if (items > 0) {
+
+ }
+ {
+ result = (svn_dirent_t *)svn_dirent_create(arg1);
+
+
+
+ }
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_dirent_t, 0 | SWIG_SHADOW); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_commit_info_t_revision_set) {
{
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4219,9 +4311,9 @@ XS(_wrap_svn_commit_info_t_revision_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_commit_info_t_revision_set" "', argument " "1"" of type '" "svn_commit_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_commit_info_t_revision_set" "', argument " "1"" of type '" "struct svn_commit_info_t *""'");
}
- arg1 = (svn_commit_info_t *)(argp1);
+ arg1 = (struct svn_commit_info_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_commit_info_t_revision_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -4242,7 +4334,7 @@ XS(_wrap_svn_commit_info_t_revision_set) {
XS(_wrap_svn_commit_info_t_revision_get) {
{
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4254,9 +4346,9 @@ XS(_wrap_svn_commit_info_t_revision_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_commit_info_t_revision_get" "', argument " "1"" of type '" "svn_commit_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_commit_info_t_revision_get" "', argument " "1"" of type '" "struct svn_commit_info_t *""'");
}
- arg1 = (svn_commit_info_t *)(argp1);
+ arg1 = (struct svn_commit_info_t *)(argp1);
result = (svn_revnum_t) ((arg1)->revision);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -4270,7 +4362,7 @@ XS(_wrap_svn_commit_info_t_revision_get) {
XS(_wrap_svn_commit_info_t_date_set) {
{
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4285,9 +4377,9 @@ XS(_wrap_svn_commit_info_t_date_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_commit_info_t_date_set" "', argument " "1"" of type '" "svn_commit_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_commit_info_t_date_set" "', argument " "1"" of type '" "struct svn_commit_info_t *""'");
}
- arg1 = (svn_commit_info_t *)(argp1);
+ arg1 = (struct svn_commit_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_commit_info_t_date_set" "', argument " "2"" of type '" "char const *""'");
@@ -4315,7 +4407,7 @@ XS(_wrap_svn_commit_info_t_date_set) {
XS(_wrap_svn_commit_info_t_date_get) {
{
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4327,9 +4419,9 @@ XS(_wrap_svn_commit_info_t_date_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_commit_info_t_date_get" "', argument " "1"" of type '" "svn_commit_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_commit_info_t_date_get" "', argument " "1"" of type '" "struct svn_commit_info_t *""'");
}
- arg1 = (svn_commit_info_t *)(argp1);
+ arg1 = (struct svn_commit_info_t *)(argp1);
result = (char *) ((arg1)->date);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -4343,7 +4435,7 @@ XS(_wrap_svn_commit_info_t_date_get) {
XS(_wrap_svn_commit_info_t_author_set) {
{
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4358,9 +4450,9 @@ XS(_wrap_svn_commit_info_t_author_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_commit_info_t_author_set" "', argument " "1"" of type '" "svn_commit_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_commit_info_t_author_set" "', argument " "1"" of type '" "struct svn_commit_info_t *""'");
}
- arg1 = (svn_commit_info_t *)(argp1);
+ arg1 = (struct svn_commit_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_commit_info_t_author_set" "', argument " "2"" of type '" "char const *""'");
@@ -4388,7 +4480,7 @@ XS(_wrap_svn_commit_info_t_author_set) {
XS(_wrap_svn_commit_info_t_author_get) {
{
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4400,9 +4492,9 @@ XS(_wrap_svn_commit_info_t_author_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_commit_info_t_author_get" "', argument " "1"" of type '" "svn_commit_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_commit_info_t_author_get" "', argument " "1"" of type '" "struct svn_commit_info_t *""'");
}
- arg1 = (svn_commit_info_t *)(argp1);
+ arg1 = (struct svn_commit_info_t *)(argp1);
result = (char *) ((arg1)->author);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -4416,7 +4508,7 @@ XS(_wrap_svn_commit_info_t_author_get) {
XS(_wrap_svn_commit_info_t_post_commit_err_set) {
{
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4431,9 +4523,9 @@ XS(_wrap_svn_commit_info_t_post_commit_err_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_commit_info_t_post_commit_err_set" "', argument " "1"" of type '" "svn_commit_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_commit_info_t_post_commit_err_set" "', argument " "1"" of type '" "struct svn_commit_info_t *""'");
}
- arg1 = (svn_commit_info_t *)(argp1);
+ arg1 = (struct svn_commit_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_commit_info_t_post_commit_err_set" "', argument " "2"" of type '" "char const *""'");
@@ -4461,7 +4553,7 @@ XS(_wrap_svn_commit_info_t_post_commit_err_set) {
XS(_wrap_svn_commit_info_t_post_commit_err_get) {
{
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4473,9 +4565,9 @@ XS(_wrap_svn_commit_info_t_post_commit_err_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_commit_info_t_post_commit_err_get" "', argument " "1"" of type '" "svn_commit_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_commit_info_t_post_commit_err_get" "', argument " "1"" of type '" "struct svn_commit_info_t *""'");
}
- arg1 = (svn_commit_info_t *)(argp1);
+ arg1 = (struct svn_commit_info_t *)(argp1);
result = (char *) ((arg1)->post_commit_err);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -4489,7 +4581,7 @@ XS(_wrap_svn_commit_info_t_post_commit_err_get) {
XS(_wrap_svn_commit_info_t_repos_root_set) {
{
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4504,9 +4596,9 @@ XS(_wrap_svn_commit_info_t_repos_root_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_commit_info_t_repos_root_set" "', argument " "1"" of type '" "svn_commit_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_commit_info_t_repos_root_set" "', argument " "1"" of type '" "struct svn_commit_info_t *""'");
}
- arg1 = (svn_commit_info_t *)(argp1);
+ arg1 = (struct svn_commit_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_commit_info_t_repos_root_set" "', argument " "2"" of type '" "char const *""'");
@@ -4534,7 +4626,7 @@ XS(_wrap_svn_commit_info_t_repos_root_set) {
XS(_wrap_svn_commit_info_t_repos_root_get) {
{
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4546,9 +4638,9 @@ XS(_wrap_svn_commit_info_t_repos_root_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_commit_info_t_repos_root_get" "', argument " "1"" of type '" "svn_commit_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_commit_info_t_repos_root_get" "', argument " "1"" of type '" "struct svn_commit_info_t *""'");
}
- arg1 = (svn_commit_info_t *)(argp1);
+ arg1 = (struct svn_commit_info_t *)(argp1);
result = (char *) ((arg1)->repos_root);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -4563,14 +4655,14 @@ XS(_wrap_svn_commit_info_t_repos_root_get) {
XS(_wrap_new_svn_commit_info_t) {
{
int argvi = 0;
- svn_commit_info_t *result = 0 ;
+ struct svn_commit_info_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_commit_info_t();");
}
{
- result = (svn_commit_info_t *)calloc(1, sizeof(svn_commit_info_t));
+ result = (struct svn_commit_info_t *)calloc(1, sizeof(struct svn_commit_info_t));
@@ -4585,7 +4677,7 @@ XS(_wrap_new_svn_commit_info_t) {
XS(_wrap_delete_svn_commit_info_t) {
{
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4596,9 +4688,9 @@ XS(_wrap_delete_svn_commit_info_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_commit_info_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_commit_info_t" "', argument " "1"" of type '" "svn_commit_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_commit_info_t" "', argument " "1"" of type '" "struct svn_commit_info_t *""'");
}
- arg1 = (svn_commit_info_t *)(argp1);
+ arg1 = (struct svn_commit_info_t *)(argp1);
{
free((char *) arg1);
@@ -4693,7 +4785,7 @@ XS(_wrap_svn_commit_info_dup) {
XS(_wrap_svn_log_changed_path2_t_action_set) {
{
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
char arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4707,9 +4799,9 @@ XS(_wrap_svn_log_changed_path2_t_action_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_changed_path2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path2_t_action_set" "', argument " "1"" of type '" "svn_log_changed_path2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path2_t_action_set" "', argument " "1"" of type '" "struct svn_log_changed_path2_t *""'");
}
- arg1 = (svn_log_changed_path2_t *)(argp1);
+ arg1 = (struct svn_log_changed_path2_t *)(argp1);
ecode2 = SWIG_AsVal_char SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_log_changed_path2_t_action_set" "', argument " "2"" of type '" "char""'");
@@ -4730,7 +4822,7 @@ XS(_wrap_svn_log_changed_path2_t_action_set) {
XS(_wrap_svn_log_changed_path2_t_action_get) {
{
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4742,9 +4834,9 @@ XS(_wrap_svn_log_changed_path2_t_action_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_changed_path2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path2_t_action_get" "', argument " "1"" of type '" "svn_log_changed_path2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path2_t_action_get" "', argument " "1"" of type '" "struct svn_log_changed_path2_t *""'");
}
- arg1 = (svn_log_changed_path2_t *)(argp1);
+ arg1 = (struct svn_log_changed_path2_t *)(argp1);
result = (char) ((arg1)->action);
ST(argvi) = SWIG_From_char SWIG_PERL_CALL_ARGS_1((char)(result)); argvi++ ;
@@ -4758,7 +4850,7 @@ XS(_wrap_svn_log_changed_path2_t_action_get) {
XS(_wrap_svn_log_changed_path2_t_copyfrom_path_set) {
{
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4773,9 +4865,9 @@ XS(_wrap_svn_log_changed_path2_t_copyfrom_path_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_changed_path2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path2_t_copyfrom_path_set" "', argument " "1"" of type '" "svn_log_changed_path2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path2_t_copyfrom_path_set" "', argument " "1"" of type '" "struct svn_log_changed_path2_t *""'");
}
- arg1 = (svn_log_changed_path2_t *)(argp1);
+ arg1 = (struct svn_log_changed_path2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_log_changed_path2_t_copyfrom_path_set" "', argument " "2"" of type '" "char const *""'");
@@ -4803,7 +4895,7 @@ XS(_wrap_svn_log_changed_path2_t_copyfrom_path_set) {
XS(_wrap_svn_log_changed_path2_t_copyfrom_path_get) {
{
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4815,9 +4907,9 @@ XS(_wrap_svn_log_changed_path2_t_copyfrom_path_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_changed_path2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path2_t_copyfrom_path_get" "', argument " "1"" of type '" "svn_log_changed_path2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path2_t_copyfrom_path_get" "', argument " "1"" of type '" "struct svn_log_changed_path2_t *""'");
}
- arg1 = (svn_log_changed_path2_t *)(argp1);
+ arg1 = (struct svn_log_changed_path2_t *)(argp1);
result = (char *) ((arg1)->copyfrom_path);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -4831,7 +4923,7 @@ XS(_wrap_svn_log_changed_path2_t_copyfrom_path_get) {
XS(_wrap_svn_log_changed_path2_t_copyfrom_rev_set) {
{
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4845,9 +4937,9 @@ XS(_wrap_svn_log_changed_path2_t_copyfrom_rev_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_changed_path2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path2_t_copyfrom_rev_set" "', argument " "1"" of type '" "svn_log_changed_path2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path2_t_copyfrom_rev_set" "', argument " "1"" of type '" "struct svn_log_changed_path2_t *""'");
}
- arg1 = (svn_log_changed_path2_t *)(argp1);
+ arg1 = (struct svn_log_changed_path2_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_log_changed_path2_t_copyfrom_rev_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -4868,7 +4960,7 @@ XS(_wrap_svn_log_changed_path2_t_copyfrom_rev_set) {
XS(_wrap_svn_log_changed_path2_t_copyfrom_rev_get) {
{
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4880,9 +4972,9 @@ XS(_wrap_svn_log_changed_path2_t_copyfrom_rev_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_changed_path2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path2_t_copyfrom_rev_get" "', argument " "1"" of type '" "svn_log_changed_path2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path2_t_copyfrom_rev_get" "', argument " "1"" of type '" "struct svn_log_changed_path2_t *""'");
}
- arg1 = (svn_log_changed_path2_t *)(argp1);
+ arg1 = (struct svn_log_changed_path2_t *)(argp1);
result = (svn_revnum_t) ((arg1)->copyfrom_rev);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -4896,7 +4988,7 @@ XS(_wrap_svn_log_changed_path2_t_copyfrom_rev_get) {
XS(_wrap_svn_log_changed_path2_t_node_kind_set) {
{
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4910,9 +5002,9 @@ XS(_wrap_svn_log_changed_path2_t_node_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_changed_path2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path2_t_node_kind_set" "', argument " "1"" of type '" "svn_log_changed_path2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path2_t_node_kind_set" "', argument " "1"" of type '" "struct svn_log_changed_path2_t *""'");
}
- arg1 = (svn_log_changed_path2_t *)(argp1);
+ arg1 = (struct svn_log_changed_path2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_log_changed_path2_t_node_kind_set" "', argument " "2"" of type '" "svn_node_kind_t""'");
@@ -4933,7 +5025,7 @@ XS(_wrap_svn_log_changed_path2_t_node_kind_set) {
XS(_wrap_svn_log_changed_path2_t_node_kind_get) {
{
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4945,9 +5037,9 @@ XS(_wrap_svn_log_changed_path2_t_node_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_changed_path2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path2_t_node_kind_get" "', argument " "1"" of type '" "svn_log_changed_path2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path2_t_node_kind_get" "', argument " "1"" of type '" "struct svn_log_changed_path2_t *""'");
}
- arg1 = (svn_log_changed_path2_t *)(argp1);
+ arg1 = (struct svn_log_changed_path2_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->node_kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -4961,7 +5053,7 @@ XS(_wrap_svn_log_changed_path2_t_node_kind_get) {
XS(_wrap_svn_log_changed_path2_t_text_modified_set) {
{
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
svn_tristate_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4975,9 +5067,9 @@ XS(_wrap_svn_log_changed_path2_t_text_modified_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_changed_path2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path2_t_text_modified_set" "', argument " "1"" of type '" "svn_log_changed_path2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path2_t_text_modified_set" "', argument " "1"" of type '" "struct svn_log_changed_path2_t *""'");
}
- arg1 = (svn_log_changed_path2_t *)(argp1);
+ arg1 = (struct svn_log_changed_path2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_log_changed_path2_t_text_modified_set" "', argument " "2"" of type '" "svn_tristate_t""'");
@@ -4998,7 +5090,7 @@ XS(_wrap_svn_log_changed_path2_t_text_modified_set) {
XS(_wrap_svn_log_changed_path2_t_text_modified_get) {
{
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5010,9 +5102,9 @@ XS(_wrap_svn_log_changed_path2_t_text_modified_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_changed_path2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path2_t_text_modified_get" "', argument " "1"" of type '" "svn_log_changed_path2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path2_t_text_modified_get" "', argument " "1"" of type '" "struct svn_log_changed_path2_t *""'");
}
- arg1 = (svn_log_changed_path2_t *)(argp1);
+ arg1 = (struct svn_log_changed_path2_t *)(argp1);
result = (svn_tristate_t) ((arg1)->text_modified);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -5026,7 +5118,7 @@ XS(_wrap_svn_log_changed_path2_t_text_modified_get) {
XS(_wrap_svn_log_changed_path2_t_props_modified_set) {
{
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
svn_tristate_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5040,9 +5132,9 @@ XS(_wrap_svn_log_changed_path2_t_props_modified_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_changed_path2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path2_t_props_modified_set" "', argument " "1"" of type '" "svn_log_changed_path2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path2_t_props_modified_set" "', argument " "1"" of type '" "struct svn_log_changed_path2_t *""'");
}
- arg1 = (svn_log_changed_path2_t *)(argp1);
+ arg1 = (struct svn_log_changed_path2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_log_changed_path2_t_props_modified_set" "', argument " "2"" of type '" "svn_tristate_t""'");
@@ -5063,7 +5155,7 @@ XS(_wrap_svn_log_changed_path2_t_props_modified_set) {
XS(_wrap_svn_log_changed_path2_t_props_modified_get) {
{
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5075,9 +5167,9 @@ XS(_wrap_svn_log_changed_path2_t_props_modified_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_changed_path2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path2_t_props_modified_get" "', argument " "1"" of type '" "svn_log_changed_path2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path2_t_props_modified_get" "', argument " "1"" of type '" "struct svn_log_changed_path2_t *""'");
}
- arg1 = (svn_log_changed_path2_t *)(argp1);
+ arg1 = (struct svn_log_changed_path2_t *)(argp1);
result = (svn_tristate_t) ((arg1)->props_modified);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -5092,14 +5184,14 @@ XS(_wrap_svn_log_changed_path2_t_props_modified_get) {
XS(_wrap_new_svn_log_changed_path2_t) {
{
int argvi = 0;
- svn_log_changed_path2_t *result = 0 ;
+ struct svn_log_changed_path2_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_log_changed_path2_t();");
}
{
- result = (svn_log_changed_path2_t *)calloc(1, sizeof(svn_log_changed_path2_t));
+ result = (struct svn_log_changed_path2_t *)calloc(1, sizeof(struct svn_log_changed_path2_t));
@@ -5114,7 +5206,7 @@ XS(_wrap_new_svn_log_changed_path2_t) {
XS(_wrap_delete_svn_log_changed_path2_t) {
{
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5125,9 +5217,9 @@ XS(_wrap_delete_svn_log_changed_path2_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_changed_path2_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_log_changed_path2_t" "', argument " "1"" of type '" "svn_log_changed_path2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_log_changed_path2_t" "', argument " "1"" of type '" "struct svn_log_changed_path2_t *""'");
}
- arg1 = (svn_log_changed_path2_t *)(argp1);
+ arg1 = (struct svn_log_changed_path2_t *)(argp1);
{
free((char *) arg1);
@@ -5222,7 +5314,7 @@ XS(_wrap_svn_log_changed_path2_dup) {
XS(_wrap_svn_log_changed_path_t_action_set) {
{
- svn_log_changed_path_t *arg1 = (svn_log_changed_path_t *) 0 ;
+ struct svn_log_changed_path_t *arg1 = (struct svn_log_changed_path_t *) 0 ;
char arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5236,9 +5328,9 @@ XS(_wrap_svn_log_changed_path_t_action_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_changed_path_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path_t_action_set" "', argument " "1"" of type '" "svn_log_changed_path_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path_t_action_set" "', argument " "1"" of type '" "struct svn_log_changed_path_t *""'");
}
- arg1 = (svn_log_changed_path_t *)(argp1);
+ arg1 = (struct svn_log_changed_path_t *)(argp1);
ecode2 = SWIG_AsVal_char SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_log_changed_path_t_action_set" "', argument " "2"" of type '" "char""'");
@@ -5259,7 +5351,7 @@ XS(_wrap_svn_log_changed_path_t_action_set) {
XS(_wrap_svn_log_changed_path_t_action_get) {
{
- svn_log_changed_path_t *arg1 = (svn_log_changed_path_t *) 0 ;
+ struct svn_log_changed_path_t *arg1 = (struct svn_log_changed_path_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5271,9 +5363,9 @@ XS(_wrap_svn_log_changed_path_t_action_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_changed_path_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path_t_action_get" "', argument " "1"" of type '" "svn_log_changed_path_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path_t_action_get" "', argument " "1"" of type '" "struct svn_log_changed_path_t *""'");
}
- arg1 = (svn_log_changed_path_t *)(argp1);
+ arg1 = (struct svn_log_changed_path_t *)(argp1);
result = (char) ((arg1)->action);
ST(argvi) = SWIG_From_char SWIG_PERL_CALL_ARGS_1((char)(result)); argvi++ ;
@@ -5287,7 +5379,7 @@ XS(_wrap_svn_log_changed_path_t_action_get) {
XS(_wrap_svn_log_changed_path_t_copyfrom_path_get) {
{
- svn_log_changed_path_t *arg1 = (svn_log_changed_path_t *) 0 ;
+ struct svn_log_changed_path_t *arg1 = (struct svn_log_changed_path_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5299,9 +5391,9 @@ XS(_wrap_svn_log_changed_path_t_copyfrom_path_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_changed_path_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path_t_copyfrom_path_get" "', argument " "1"" of type '" "svn_log_changed_path_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path_t_copyfrom_path_get" "', argument " "1"" of type '" "struct svn_log_changed_path_t *""'");
}
- arg1 = (svn_log_changed_path_t *)(argp1);
+ arg1 = (struct svn_log_changed_path_t *)(argp1);
result = (char *) ((arg1)->copyfrom_path);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -5315,7 +5407,7 @@ XS(_wrap_svn_log_changed_path_t_copyfrom_path_get) {
XS(_wrap_svn_log_changed_path_t_copyfrom_rev_set) {
{
- svn_log_changed_path_t *arg1 = (svn_log_changed_path_t *) 0 ;
+ struct svn_log_changed_path_t *arg1 = (struct svn_log_changed_path_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5329,9 +5421,9 @@ XS(_wrap_svn_log_changed_path_t_copyfrom_rev_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_changed_path_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path_t_copyfrom_rev_set" "', argument " "1"" of type '" "svn_log_changed_path_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path_t_copyfrom_rev_set" "', argument " "1"" of type '" "struct svn_log_changed_path_t *""'");
}
- arg1 = (svn_log_changed_path_t *)(argp1);
+ arg1 = (struct svn_log_changed_path_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_log_changed_path_t_copyfrom_rev_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -5352,7 +5444,7 @@ XS(_wrap_svn_log_changed_path_t_copyfrom_rev_set) {
XS(_wrap_svn_log_changed_path_t_copyfrom_rev_get) {
{
- svn_log_changed_path_t *arg1 = (svn_log_changed_path_t *) 0 ;
+ struct svn_log_changed_path_t *arg1 = (struct svn_log_changed_path_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5364,9 +5456,9 @@ XS(_wrap_svn_log_changed_path_t_copyfrom_rev_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_changed_path_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path_t_copyfrom_rev_get" "', argument " "1"" of type '" "svn_log_changed_path_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_changed_path_t_copyfrom_rev_get" "', argument " "1"" of type '" "struct svn_log_changed_path_t *""'");
}
- arg1 = (svn_log_changed_path_t *)(argp1);
+ arg1 = (struct svn_log_changed_path_t *)(argp1);
result = (svn_revnum_t) ((arg1)->copyfrom_rev);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -5381,14 +5473,14 @@ XS(_wrap_svn_log_changed_path_t_copyfrom_rev_get) {
XS(_wrap_new_svn_log_changed_path_t) {
{
int argvi = 0;
- svn_log_changed_path_t *result = 0 ;
+ struct svn_log_changed_path_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_log_changed_path_t();");
}
{
- result = (svn_log_changed_path_t *)calloc(1, sizeof(svn_log_changed_path_t));
+ result = (struct svn_log_changed_path_t *)calloc(1, sizeof(struct svn_log_changed_path_t));
@@ -5403,7 +5495,7 @@ XS(_wrap_new_svn_log_changed_path_t) {
XS(_wrap_delete_svn_log_changed_path_t) {
{
- svn_log_changed_path_t *arg1 = (svn_log_changed_path_t *) 0 ;
+ struct svn_log_changed_path_t *arg1 = (struct svn_log_changed_path_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5414,9 +5506,9 @@ XS(_wrap_delete_svn_log_changed_path_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_changed_path_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_log_changed_path_t" "', argument " "1"" of type '" "svn_log_changed_path_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_log_changed_path_t" "', argument " "1"" of type '" "struct svn_log_changed_path_t *""'");
}
- arg1 = (svn_log_changed_path_t *)(argp1);
+ arg1 = (struct svn_log_changed_path_t *)(argp1);
{
free((char *) arg1);
@@ -5478,7 +5570,7 @@ XS(_wrap_svn_log_changed_path_dup) {
XS(_wrap_svn_log_entry_t_changed_paths_set) {
{
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
apr_hash_t *arg2 = (apr_hash_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5492,9 +5584,9 @@ XS(_wrap_svn_log_entry_t_changed_paths_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_changed_paths_set" "', argument " "1"" of type '" "svn_log_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_changed_paths_set" "', argument " "1"" of type '" "struct svn_log_entry_t *""'");
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_apr_hash_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_log_entry_t_changed_paths_set" "', argument " "2"" of type '" "apr_hash_t *""'");
@@ -5515,7 +5607,7 @@ XS(_wrap_svn_log_entry_t_changed_paths_set) {
XS(_wrap_svn_log_entry_t_changed_paths_get) {
{
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5527,9 +5619,9 @@ XS(_wrap_svn_log_entry_t_changed_paths_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_changed_paths_get" "', argument " "1"" of type '" "svn_log_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_changed_paths_get" "', argument " "1"" of type '" "struct svn_log_entry_t *""'");
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
result = (apr_hash_t *) ((arg1)->changed_paths);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_hash_t, 0 | 0); argvi++ ;
@@ -5543,7 +5635,7 @@ XS(_wrap_svn_log_entry_t_changed_paths_get) {
XS(_wrap_svn_log_entry_t_revision_set) {
{
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5557,9 +5649,9 @@ XS(_wrap_svn_log_entry_t_revision_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_revision_set" "', argument " "1"" of type '" "svn_log_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_revision_set" "', argument " "1"" of type '" "struct svn_log_entry_t *""'");
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_log_entry_t_revision_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -5580,7 +5672,7 @@ XS(_wrap_svn_log_entry_t_revision_set) {
XS(_wrap_svn_log_entry_t_revision_get) {
{
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5592,9 +5684,9 @@ XS(_wrap_svn_log_entry_t_revision_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_revision_get" "', argument " "1"" of type '" "svn_log_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_revision_get" "', argument " "1"" of type '" "struct svn_log_entry_t *""'");
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
result = (svn_revnum_t) ((arg1)->revision);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -5608,12 +5700,11 @@ XS(_wrap_svn_log_entry_t_revision_get) {
XS(_wrap_svn_log_entry_t_revprops_set) {
{
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
apr_hash_t *arg2 = (apr_hash_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- void *argp2 = 0 ;
- int res2 = 0 ;
+ apr_pool_t *_global_pool = NULL ;
int argvi = 0;
dXSARGS;
@@ -5622,14 +5713,14 @@ XS(_wrap_svn_log_entry_t_revprops_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_revprops_set" "', argument " "1"" of type '" "svn_log_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_revprops_set" "', argument " "1"" of type '" "struct svn_log_entry_t *""'");
}
- arg1 = (svn_log_entry_t *)(argp1);
- res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_apr_hash_t, SWIG_POINTER_DISOWN | 0 );
- if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_log_entry_t_revprops_set" "', argument " "2"" of type '" "apr_hash_t *""'");
+ arg1 = (struct svn_log_entry_t *)(argp1);
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg2 = svn_swig_pl_hash_to_prophash(ST(1), _global_pool);
}
- arg2 = (apr_hash_t *)(argp2);
if (arg1) (arg1)->revprops = arg2;
ST(argvi) = sv_newmortal();
@@ -5645,7 +5736,7 @@ XS(_wrap_svn_log_entry_t_revprops_set) {
XS(_wrap_svn_log_entry_t_revprops_get) {
{
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5657,11 +5748,13 @@ XS(_wrap_svn_log_entry_t_revprops_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_revprops_get" "', argument " "1"" of type '" "svn_log_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_revprops_get" "', argument " "1"" of type '" "struct svn_log_entry_t *""'");
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
result = (apr_hash_t *) ((arg1)->revprops);
- ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_hash_t, 0 | 0); argvi++ ;
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = svn_swig_pl_prophash_to_hash(result); argvi++ ;
+ }
XSRETURN(argvi);
fail:
@@ -5673,7 +5766,7 @@ XS(_wrap_svn_log_entry_t_revprops_get) {
XS(_wrap_svn_log_entry_t_has_children_set) {
{
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5687,9 +5780,9 @@ XS(_wrap_svn_log_entry_t_has_children_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_has_children_set" "', argument " "1"" of type '" "svn_log_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_has_children_set" "', argument " "1"" of type '" "struct svn_log_entry_t *""'");
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_log_entry_t_has_children_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -5710,7 +5803,7 @@ XS(_wrap_svn_log_entry_t_has_children_set) {
XS(_wrap_svn_log_entry_t_has_children_get) {
{
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5722,9 +5815,9 @@ XS(_wrap_svn_log_entry_t_has_children_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_has_children_get" "', argument " "1"" of type '" "svn_log_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_has_children_get" "', argument " "1"" of type '" "struct svn_log_entry_t *""'");
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
result = (svn_boolean_t) ((arg1)->has_children);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -5738,7 +5831,7 @@ XS(_wrap_svn_log_entry_t_has_children_get) {
XS(_wrap_svn_log_entry_t_changed_paths2_set) {
{
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
apr_hash_t *arg2 = (apr_hash_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5752,9 +5845,9 @@ XS(_wrap_svn_log_entry_t_changed_paths2_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_changed_paths2_set" "', argument " "1"" of type '" "svn_log_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_changed_paths2_set" "', argument " "1"" of type '" "struct svn_log_entry_t *""'");
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_apr_hash_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_log_entry_t_changed_paths2_set" "', argument " "2"" of type '" "apr_hash_t *""'");
@@ -5775,7 +5868,7 @@ XS(_wrap_svn_log_entry_t_changed_paths2_set) {
XS(_wrap_svn_log_entry_t_changed_paths2_get) {
{
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5787,11 +5880,17 @@ XS(_wrap_svn_log_entry_t_changed_paths2_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_changed_paths2_get" "', argument " "1"" of type '" "svn_log_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_changed_paths2_get" "', argument " "1"" of type '" "struct svn_log_entry_t *""'");
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
result = (apr_hash_t *) ((arg1)->changed_paths2);
- ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_hash_t, 0 | 0); argvi++ ;
+ {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,59,%append_output@*/ if (argvi >= items) EXTEND(sp,1); /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,56,%set_output@*/ ST(argvi) = (result) ? svn_swig_pl_convert_hash(result, SWIGTYPE_p_svn_log_changed_path2_t)
+ :&PL_sv_undef; argvi++ /*@SWIG@*/
+ /*@SWIG@*/
+
+ ;
+ }
XSRETURN(argvi);
fail:
@@ -5803,7 +5902,7 @@ XS(_wrap_svn_log_entry_t_changed_paths2_get) {
XS(_wrap_svn_log_entry_t_non_inheritable_set) {
{
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5817,9 +5916,9 @@ XS(_wrap_svn_log_entry_t_non_inheritable_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_non_inheritable_set" "', argument " "1"" of type '" "svn_log_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_non_inheritable_set" "', argument " "1"" of type '" "struct svn_log_entry_t *""'");
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_log_entry_t_non_inheritable_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -5840,7 +5939,7 @@ XS(_wrap_svn_log_entry_t_non_inheritable_set) {
XS(_wrap_svn_log_entry_t_non_inheritable_get) {
{
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5852,9 +5951,9 @@ XS(_wrap_svn_log_entry_t_non_inheritable_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_non_inheritable_get" "', argument " "1"" of type '" "svn_log_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_non_inheritable_get" "', argument " "1"" of type '" "struct svn_log_entry_t *""'");
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
result = (svn_boolean_t) ((arg1)->non_inheritable);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -5868,7 +5967,7 @@ XS(_wrap_svn_log_entry_t_non_inheritable_get) {
XS(_wrap_svn_log_entry_t_subtractive_merge_set) {
{
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5882,9 +5981,9 @@ XS(_wrap_svn_log_entry_t_subtractive_merge_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_subtractive_merge_set" "', argument " "1"" of type '" "svn_log_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_subtractive_merge_set" "', argument " "1"" of type '" "struct svn_log_entry_t *""'");
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_log_entry_t_subtractive_merge_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -5905,7 +6004,7 @@ XS(_wrap_svn_log_entry_t_subtractive_merge_set) {
XS(_wrap_svn_log_entry_t_subtractive_merge_get) {
{
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5917,9 +6016,9 @@ XS(_wrap_svn_log_entry_t_subtractive_merge_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_subtractive_merge_get" "', argument " "1"" of type '" "svn_log_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_log_entry_t_subtractive_merge_get" "', argument " "1"" of type '" "struct svn_log_entry_t *""'");
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
result = (svn_boolean_t) ((arg1)->subtractive_merge);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -5934,14 +6033,14 @@ XS(_wrap_svn_log_entry_t_subtractive_merge_get) {
XS(_wrap_new_svn_log_entry_t) {
{
int argvi = 0;
- svn_log_entry_t *result = 0 ;
+ struct svn_log_entry_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_log_entry_t();");
}
{
- result = (svn_log_entry_t *)calloc(1, sizeof(svn_log_entry_t));
+ result = (struct svn_log_entry_t *)calloc(1, sizeof(struct svn_log_entry_t));
@@ -5956,7 +6055,7 @@ XS(_wrap_new_svn_log_entry_t) {
XS(_wrap_delete_svn_log_entry_t) {
{
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5967,9 +6066,9 @@ XS(_wrap_delete_svn_log_entry_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_log_entry_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_log_entry_t" "', argument " "1"" of type '" "svn_log_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_log_entry_t" "', argument " "1"" of type '" "struct svn_log_entry_t *""'");
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
{
free((char *) arg1);
@@ -6157,7 +6256,7 @@ XS(_wrap_svn_mime_type_is_binary) {
XS(_wrap_svn_lock_t_path_set) {
{
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6172,9 +6271,9 @@ XS(_wrap_svn_lock_t_path_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_path_set" "', argument " "1"" of type '" "svn_lock_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_path_set" "', argument " "1"" of type '" "struct svn_lock_t *""'");
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_lock_t_path_set" "', argument " "2"" of type '" "char const *""'");
@@ -6202,7 +6301,7 @@ XS(_wrap_svn_lock_t_path_set) {
XS(_wrap_svn_lock_t_path_get) {
{
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6214,9 +6313,9 @@ XS(_wrap_svn_lock_t_path_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_path_get" "', argument " "1"" of type '" "svn_lock_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_path_get" "', argument " "1"" of type '" "struct svn_lock_t *""'");
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
result = (char *) ((arg1)->path);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -6230,7 +6329,7 @@ XS(_wrap_svn_lock_t_path_get) {
XS(_wrap_svn_lock_t_token_set) {
{
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6245,9 +6344,9 @@ XS(_wrap_svn_lock_t_token_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_token_set" "', argument " "1"" of type '" "svn_lock_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_token_set" "', argument " "1"" of type '" "struct svn_lock_t *""'");
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_lock_t_token_set" "', argument " "2"" of type '" "char const *""'");
@@ -6275,7 +6374,7 @@ XS(_wrap_svn_lock_t_token_set) {
XS(_wrap_svn_lock_t_token_get) {
{
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6287,9 +6386,9 @@ XS(_wrap_svn_lock_t_token_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_token_get" "', argument " "1"" of type '" "svn_lock_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_token_get" "', argument " "1"" of type '" "struct svn_lock_t *""'");
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
result = (char *) ((arg1)->token);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -6303,7 +6402,7 @@ XS(_wrap_svn_lock_t_token_get) {
XS(_wrap_svn_lock_t_owner_set) {
{
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6318,9 +6417,9 @@ XS(_wrap_svn_lock_t_owner_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_owner_set" "', argument " "1"" of type '" "svn_lock_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_owner_set" "', argument " "1"" of type '" "struct svn_lock_t *""'");
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_lock_t_owner_set" "', argument " "2"" of type '" "char const *""'");
@@ -6348,7 +6447,7 @@ XS(_wrap_svn_lock_t_owner_set) {
XS(_wrap_svn_lock_t_owner_get) {
{
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6360,9 +6459,9 @@ XS(_wrap_svn_lock_t_owner_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_owner_get" "', argument " "1"" of type '" "svn_lock_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_owner_get" "', argument " "1"" of type '" "struct svn_lock_t *""'");
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
result = (char *) ((arg1)->owner);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -6376,7 +6475,7 @@ XS(_wrap_svn_lock_t_owner_get) {
XS(_wrap_svn_lock_t_comment_set) {
{
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6391,9 +6490,9 @@ XS(_wrap_svn_lock_t_comment_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_comment_set" "', argument " "1"" of type '" "svn_lock_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_comment_set" "', argument " "1"" of type '" "struct svn_lock_t *""'");
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_lock_t_comment_set" "', argument " "2"" of type '" "char const *""'");
@@ -6421,7 +6520,7 @@ XS(_wrap_svn_lock_t_comment_set) {
XS(_wrap_svn_lock_t_comment_get) {
{
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6433,9 +6532,9 @@ XS(_wrap_svn_lock_t_comment_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_comment_get" "', argument " "1"" of type '" "svn_lock_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_comment_get" "', argument " "1"" of type '" "struct svn_lock_t *""'");
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
result = (char *) ((arg1)->comment);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -6449,7 +6548,7 @@ XS(_wrap_svn_lock_t_comment_get) {
XS(_wrap_svn_lock_t_is_dav_comment_set) {
{
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6463,9 +6562,9 @@ XS(_wrap_svn_lock_t_is_dav_comment_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_is_dav_comment_set" "', argument " "1"" of type '" "svn_lock_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_is_dav_comment_set" "', argument " "1"" of type '" "struct svn_lock_t *""'");
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_lock_t_is_dav_comment_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -6486,7 +6585,7 @@ XS(_wrap_svn_lock_t_is_dav_comment_set) {
XS(_wrap_svn_lock_t_is_dav_comment_get) {
{
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6498,9 +6597,9 @@ XS(_wrap_svn_lock_t_is_dav_comment_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_is_dav_comment_get" "', argument " "1"" of type '" "svn_lock_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_is_dav_comment_get" "', argument " "1"" of type '" "struct svn_lock_t *""'");
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
result = (svn_boolean_t) ((arg1)->is_dav_comment);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -6514,7 +6613,7 @@ XS(_wrap_svn_lock_t_is_dav_comment_get) {
XS(_wrap_svn_lock_t_creation_date_set) {
{
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6528,9 +6627,9 @@ XS(_wrap_svn_lock_t_creation_date_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_creation_date_set" "', argument " "1"" of type '" "svn_lock_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_creation_date_set" "', argument " "1"" of type '" "struct svn_lock_t *""'");
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_lock_t_creation_date_set" "', argument " "2"" of type '" "apr_time_t""'");
@@ -6551,7 +6650,7 @@ XS(_wrap_svn_lock_t_creation_date_set) {
XS(_wrap_svn_lock_t_creation_date_get) {
{
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6563,9 +6662,9 @@ XS(_wrap_svn_lock_t_creation_date_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_creation_date_get" "', argument " "1"" of type '" "svn_lock_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_creation_date_get" "', argument " "1"" of type '" "struct svn_lock_t *""'");
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
result = ((arg1)->creation_date);
{
char temp[256];
@@ -6584,7 +6683,7 @@ XS(_wrap_svn_lock_t_creation_date_get) {
XS(_wrap_svn_lock_t_expiration_date_set) {
{
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6598,9 +6697,9 @@ XS(_wrap_svn_lock_t_expiration_date_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_expiration_date_set" "', argument " "1"" of type '" "svn_lock_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_expiration_date_set" "', argument " "1"" of type '" "struct svn_lock_t *""'");
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_lock_t_expiration_date_set" "', argument " "2"" of type '" "apr_time_t""'");
@@ -6621,7 +6720,7 @@ XS(_wrap_svn_lock_t_expiration_date_set) {
XS(_wrap_svn_lock_t_expiration_date_get) {
{
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6633,9 +6732,9 @@ XS(_wrap_svn_lock_t_expiration_date_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_expiration_date_get" "', argument " "1"" of type '" "svn_lock_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_lock_t_expiration_date_get" "', argument " "1"" of type '" "struct svn_lock_t *""'");
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
result = ((arg1)->expiration_date);
{
char temp[256];
@@ -6655,14 +6754,14 @@ XS(_wrap_svn_lock_t_expiration_date_get) {
XS(_wrap_new_svn_lock_t) {
{
int argvi = 0;
- svn_lock_t *result = 0 ;
+ struct svn_lock_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_lock_t();");
}
{
- result = (svn_lock_t *)calloc(1, sizeof(svn_lock_t));
+ result = (struct svn_lock_t *)calloc(1, sizeof(struct svn_lock_t));
@@ -6677,7 +6776,7 @@ XS(_wrap_new_svn_lock_t) {
XS(_wrap_delete_svn_lock_t) {
{
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6688,9 +6787,9 @@ XS(_wrap_delete_svn_lock_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_lock_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_lock_t" "', argument " "1"" of type '" "svn_lock_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_lock_t" "', argument " "1"" of type '" "struct svn_lock_t *""'");
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
{
free((char *) arg1);
@@ -6818,7 +6917,7 @@ XS(_wrap_svn_uuid_generate) {
XS(_wrap_svn_merge_range_t_start_set) {
{
- svn_merge_range_t *arg1 = (svn_merge_range_t *) 0 ;
+ struct svn_merge_range_t *arg1 = (struct svn_merge_range_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6832,9 +6931,9 @@ XS(_wrap_svn_merge_range_t_start_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_merge_range_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_merge_range_t_start_set" "', argument " "1"" of type '" "svn_merge_range_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_merge_range_t_start_set" "', argument " "1"" of type '" "struct svn_merge_range_t *""'");
}
- arg1 = (svn_merge_range_t *)(argp1);
+ arg1 = (struct svn_merge_range_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_merge_range_t_start_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -6855,7 +6954,7 @@ XS(_wrap_svn_merge_range_t_start_set) {
XS(_wrap_svn_merge_range_t_start_get) {
{
- svn_merge_range_t *arg1 = (svn_merge_range_t *) 0 ;
+ struct svn_merge_range_t *arg1 = (struct svn_merge_range_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6867,9 +6966,9 @@ XS(_wrap_svn_merge_range_t_start_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_merge_range_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_merge_range_t_start_get" "', argument " "1"" of type '" "svn_merge_range_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_merge_range_t_start_get" "', argument " "1"" of type '" "struct svn_merge_range_t *""'");
}
- arg1 = (svn_merge_range_t *)(argp1);
+ arg1 = (struct svn_merge_range_t *)(argp1);
result = (svn_revnum_t) ((arg1)->start);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -6883,7 +6982,7 @@ XS(_wrap_svn_merge_range_t_start_get) {
XS(_wrap_svn_merge_range_t_end_set) {
{
- svn_merge_range_t *arg1 = (svn_merge_range_t *) 0 ;
+ struct svn_merge_range_t *arg1 = (struct svn_merge_range_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6897,9 +6996,9 @@ XS(_wrap_svn_merge_range_t_end_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_merge_range_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_merge_range_t_end_set" "', argument " "1"" of type '" "svn_merge_range_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_merge_range_t_end_set" "', argument " "1"" of type '" "struct svn_merge_range_t *""'");
}
- arg1 = (svn_merge_range_t *)(argp1);
+ arg1 = (struct svn_merge_range_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_merge_range_t_end_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -6920,7 +7019,7 @@ XS(_wrap_svn_merge_range_t_end_set) {
XS(_wrap_svn_merge_range_t_end_get) {
{
- svn_merge_range_t *arg1 = (svn_merge_range_t *) 0 ;
+ struct svn_merge_range_t *arg1 = (struct svn_merge_range_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6932,9 +7031,9 @@ XS(_wrap_svn_merge_range_t_end_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_merge_range_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_merge_range_t_end_get" "', argument " "1"" of type '" "svn_merge_range_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_merge_range_t_end_get" "', argument " "1"" of type '" "struct svn_merge_range_t *""'");
}
- arg1 = (svn_merge_range_t *)(argp1);
+ arg1 = (struct svn_merge_range_t *)(argp1);
result = (svn_revnum_t) ((arg1)->end);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -6948,7 +7047,7 @@ XS(_wrap_svn_merge_range_t_end_get) {
XS(_wrap_svn_merge_range_t_inheritable_set) {
{
- svn_merge_range_t *arg1 = (svn_merge_range_t *) 0 ;
+ struct svn_merge_range_t *arg1 = (struct svn_merge_range_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6962,9 +7061,9 @@ XS(_wrap_svn_merge_range_t_inheritable_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_merge_range_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_merge_range_t_inheritable_set" "', argument " "1"" of type '" "svn_merge_range_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_merge_range_t_inheritable_set" "', argument " "1"" of type '" "struct svn_merge_range_t *""'");
}
- arg1 = (svn_merge_range_t *)(argp1);
+ arg1 = (struct svn_merge_range_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_merge_range_t_inheritable_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -6985,7 +7084,7 @@ XS(_wrap_svn_merge_range_t_inheritable_set) {
XS(_wrap_svn_merge_range_t_inheritable_get) {
{
- svn_merge_range_t *arg1 = (svn_merge_range_t *) 0 ;
+ struct svn_merge_range_t *arg1 = (struct svn_merge_range_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6997,9 +7096,9 @@ XS(_wrap_svn_merge_range_t_inheritable_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_merge_range_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_merge_range_t_inheritable_get" "', argument " "1"" of type '" "svn_merge_range_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_merge_range_t_inheritable_get" "', argument " "1"" of type '" "struct svn_merge_range_t *""'");
}
- arg1 = (svn_merge_range_t *)(argp1);
+ arg1 = (struct svn_merge_range_t *)(argp1);
result = (svn_boolean_t) ((arg1)->inheritable);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -7014,14 +7113,14 @@ XS(_wrap_svn_merge_range_t_inheritable_get) {
XS(_wrap_new_svn_merge_range_t) {
{
int argvi = 0;
- svn_merge_range_t *result = 0 ;
+ struct svn_merge_range_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_merge_range_t();");
}
{
- result = (svn_merge_range_t *)calloc(1, sizeof(svn_merge_range_t));
+ result = (struct svn_merge_range_t *)calloc(1, sizeof(struct svn_merge_range_t));
@@ -7036,7 +7135,7 @@ XS(_wrap_new_svn_merge_range_t) {
XS(_wrap_delete_svn_merge_range_t) {
{
- svn_merge_range_t *arg1 = (svn_merge_range_t *) 0 ;
+ struct svn_merge_range_t *arg1 = (struct svn_merge_range_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -7047,9 +7146,9 @@ XS(_wrap_delete_svn_merge_range_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_merge_range_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_merge_range_t" "', argument " "1"" of type '" "svn_merge_range_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_merge_range_t" "', argument " "1"" of type '" "struct svn_merge_range_t *""'");
}
- arg1 = (svn_merge_range_t *)(argp1);
+ arg1 = (struct svn_merge_range_t *)(argp1);
{
free((char *) arg1);
@@ -7154,7 +7253,7 @@ XS(_wrap_svn_merge_range_contains_rev) {
XS(_wrap_svn_location_segment_t_range_start_set) {
{
- svn_location_segment_t *arg1 = (svn_location_segment_t *) 0 ;
+ struct svn_location_segment_t *arg1 = (struct svn_location_segment_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7168,9 +7267,9 @@ XS(_wrap_svn_location_segment_t_range_start_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_location_segment_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_location_segment_t_range_start_set" "', argument " "1"" of type '" "svn_location_segment_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_location_segment_t_range_start_set" "', argument " "1"" of type '" "struct svn_location_segment_t *""'");
}
- arg1 = (svn_location_segment_t *)(argp1);
+ arg1 = (struct svn_location_segment_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_location_segment_t_range_start_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -7191,7 +7290,7 @@ XS(_wrap_svn_location_segment_t_range_start_set) {
XS(_wrap_svn_location_segment_t_range_start_get) {
{
- svn_location_segment_t *arg1 = (svn_location_segment_t *) 0 ;
+ struct svn_location_segment_t *arg1 = (struct svn_location_segment_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -7203,9 +7302,9 @@ XS(_wrap_svn_location_segment_t_range_start_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_location_segment_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_location_segment_t_range_start_get" "', argument " "1"" of type '" "svn_location_segment_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_location_segment_t_range_start_get" "', argument " "1"" of type '" "struct svn_location_segment_t *""'");
}
- arg1 = (svn_location_segment_t *)(argp1);
+ arg1 = (struct svn_location_segment_t *)(argp1);
result = (svn_revnum_t) ((arg1)->range_start);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -7219,7 +7318,7 @@ XS(_wrap_svn_location_segment_t_range_start_get) {
XS(_wrap_svn_location_segment_t_range_end_set) {
{
- svn_location_segment_t *arg1 = (svn_location_segment_t *) 0 ;
+ struct svn_location_segment_t *arg1 = (struct svn_location_segment_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7233,9 +7332,9 @@ XS(_wrap_svn_location_segment_t_range_end_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_location_segment_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_location_segment_t_range_end_set" "', argument " "1"" of type '" "svn_location_segment_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_location_segment_t_range_end_set" "', argument " "1"" of type '" "struct svn_location_segment_t *""'");
}
- arg1 = (svn_location_segment_t *)(argp1);
+ arg1 = (struct svn_location_segment_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_location_segment_t_range_end_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -7256,7 +7355,7 @@ XS(_wrap_svn_location_segment_t_range_end_set) {
XS(_wrap_svn_location_segment_t_range_end_get) {
{
- svn_location_segment_t *arg1 = (svn_location_segment_t *) 0 ;
+ struct svn_location_segment_t *arg1 = (struct svn_location_segment_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -7268,9 +7367,9 @@ XS(_wrap_svn_location_segment_t_range_end_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_location_segment_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_location_segment_t_range_end_get" "', argument " "1"" of type '" "svn_location_segment_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_location_segment_t_range_end_get" "', argument " "1"" of type '" "struct svn_location_segment_t *""'");
}
- arg1 = (svn_location_segment_t *)(argp1);
+ arg1 = (struct svn_location_segment_t *)(argp1);
result = (svn_revnum_t) ((arg1)->range_end);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -7284,7 +7383,7 @@ XS(_wrap_svn_location_segment_t_range_end_get) {
XS(_wrap_svn_location_segment_t_path_set) {
{
- svn_location_segment_t *arg1 = (svn_location_segment_t *) 0 ;
+ struct svn_location_segment_t *arg1 = (struct svn_location_segment_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7299,9 +7398,9 @@ XS(_wrap_svn_location_segment_t_path_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_location_segment_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_location_segment_t_path_set" "', argument " "1"" of type '" "svn_location_segment_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_location_segment_t_path_set" "', argument " "1"" of type '" "struct svn_location_segment_t *""'");
}
- arg1 = (svn_location_segment_t *)(argp1);
+ arg1 = (struct svn_location_segment_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_location_segment_t_path_set" "', argument " "2"" of type '" "char const *""'");
@@ -7329,7 +7428,7 @@ XS(_wrap_svn_location_segment_t_path_set) {
XS(_wrap_svn_location_segment_t_path_get) {
{
- svn_location_segment_t *arg1 = (svn_location_segment_t *) 0 ;
+ struct svn_location_segment_t *arg1 = (struct svn_location_segment_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -7341,9 +7440,9 @@ XS(_wrap_svn_location_segment_t_path_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_location_segment_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_location_segment_t_path_get" "', argument " "1"" of type '" "svn_location_segment_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_location_segment_t_path_get" "', argument " "1"" of type '" "struct svn_location_segment_t *""'");
}
- arg1 = (svn_location_segment_t *)(argp1);
+ arg1 = (struct svn_location_segment_t *)(argp1);
result = (char *) ((arg1)->path);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -7358,14 +7457,14 @@ XS(_wrap_svn_location_segment_t_path_get) {
XS(_wrap_new_svn_location_segment_t) {
{
int argvi = 0;
- svn_location_segment_t *result = 0 ;
+ struct svn_location_segment_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_location_segment_t();");
}
{
- result = (svn_location_segment_t *)calloc(1, sizeof(svn_location_segment_t));
+ result = (struct svn_location_segment_t *)calloc(1, sizeof(struct svn_location_segment_t));
@@ -7380,7 +7479,7 @@ XS(_wrap_new_svn_location_segment_t) {
XS(_wrap_delete_svn_location_segment_t) {
{
- svn_location_segment_t *arg1 = (svn_location_segment_t *) 0 ;
+ struct svn_location_segment_t *arg1 = (struct svn_location_segment_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -7391,9 +7490,9 @@ XS(_wrap_delete_svn_location_segment_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_location_segment_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_location_segment_t" "', argument " "1"" of type '" "svn_location_segment_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_location_segment_t" "', argument " "1"" of type '" "struct svn_location_segment_t *""'");
}
- arg1 = (svn_location_segment_t *)(argp1);
+ arg1 = (struct svn_location_segment_t *)(argp1);
{
free((char *) arg1);
@@ -7986,6 +8085,39 @@ XS(_wrap_svn_pool_create) {
}
+XS(_wrap_svn_pool_create_allocator) {
+ {
+ svn_boolean_t arg1 ;
+ int val1 ;
+ int ecode1 = 0 ;
+ int argvi = 0;
+ apr_allocator_t *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_pool_create_allocator(thread_safe);");
+ }
+ ecode1 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1);
+ if (!SWIG_IsOK(ecode1)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "svn_pool_create_allocator" "', argument " "1"" of type '" "svn_boolean_t""'");
+ }
+ arg1 = (svn_boolean_t)(val1);
+ {
+ result = (apr_allocator_t *)svn_pool_create_allocator(arg1);
+
+
+
+ }
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_allocator_t, 0 | 0); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_version_t_major_set) {
{
struct svn_version_t *arg1 = (struct svn_version_t *) 0 ;
@@ -8397,7 +8529,7 @@ XS(_wrap_svn_ver_equal) {
XS(_wrap_svn_version_checklist_t_label_set) {
{
- svn_version_checklist_t *arg1 = (svn_version_checklist_t *) 0 ;
+ struct svn_version_checklist_t *arg1 = (struct svn_version_checklist_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8412,9 +8544,9 @@ XS(_wrap_svn_version_checklist_t_label_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_version_checklist_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_version_checklist_t_label_set" "', argument " "1"" of type '" "svn_version_checklist_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_version_checklist_t_label_set" "', argument " "1"" of type '" "struct svn_version_checklist_t *""'");
}
- arg1 = (svn_version_checklist_t *)(argp1);
+ arg1 = (struct svn_version_checklist_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_version_checklist_t_label_set" "', argument " "2"" of type '" "char const *""'");
@@ -8442,7 +8574,7 @@ XS(_wrap_svn_version_checklist_t_label_set) {
XS(_wrap_svn_version_checklist_t_label_get) {
{
- svn_version_checklist_t *arg1 = (svn_version_checklist_t *) 0 ;
+ struct svn_version_checklist_t *arg1 = (struct svn_version_checklist_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -8454,9 +8586,9 @@ XS(_wrap_svn_version_checklist_t_label_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_version_checklist_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_version_checklist_t_label_get" "', argument " "1"" of type '" "svn_version_checklist_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_version_checklist_t_label_get" "', argument " "1"" of type '" "struct svn_version_checklist_t *""'");
}
- arg1 = (svn_version_checklist_t *)(argp1);
+ arg1 = (struct svn_version_checklist_t *)(argp1);
result = (char *) ((arg1)->label);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -8470,7 +8602,7 @@ XS(_wrap_svn_version_checklist_t_label_get) {
XS(_wrap_svn_version_checklist_t_version_query_set) {
{
- svn_version_checklist_t *arg1 = (svn_version_checklist_t *) 0 ;
+ struct svn_version_checklist_t *arg1 = (struct svn_version_checklist_t *) 0 ;
svn_version_t *(*arg2)(void) = (svn_version_t *(*)(void)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8482,9 +8614,9 @@ XS(_wrap_svn_version_checklist_t_version_query_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_version_checklist_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_version_checklist_t_version_query_set" "', argument " "1"" of type '" "svn_version_checklist_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_version_checklist_t_version_query_set" "', argument " "1"" of type '" "struct svn_version_checklist_t *""'");
}
- arg1 = (svn_version_checklist_t *)(argp1);
+ arg1 = (struct svn_version_checklist_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_void__p_svn_version_t);
if (!SWIG_IsOK(res)) {
@@ -8506,7 +8638,7 @@ XS(_wrap_svn_version_checklist_t_version_query_set) {
XS(_wrap_svn_version_checklist_t_version_query_get) {
{
- svn_version_checklist_t *arg1 = (svn_version_checklist_t *) 0 ;
+ struct svn_version_checklist_t *arg1 = (struct svn_version_checklist_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -8518,9 +8650,9 @@ XS(_wrap_svn_version_checklist_t_version_query_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_version_checklist_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_version_checklist_t_version_query_get" "', argument " "1"" of type '" "svn_version_checklist_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_version_checklist_t_version_query_get" "', argument " "1"" of type '" "struct svn_version_checklist_t *""'");
}
- arg1 = (svn_version_checklist_t *)(argp1);
+ arg1 = (struct svn_version_checklist_t *)(argp1);
result = (svn_version_t *(*)(void)) ((arg1)->version_query);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_void__p_svn_version_t); argvi++ ;
@@ -8535,14 +8667,14 @@ XS(_wrap_svn_version_checklist_t_version_query_get) {
XS(_wrap_new_svn_version_checklist_t) {
{
int argvi = 0;
- svn_version_checklist_t *result = 0 ;
+ struct svn_version_checklist_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_version_checklist_t();");
}
{
- result = (svn_version_checklist_t *)calloc(1, sizeof(svn_version_checklist_t));
+ result = (struct svn_version_checklist_t *)calloc(1, sizeof(struct svn_version_checklist_t));
@@ -8557,7 +8689,7 @@ XS(_wrap_new_svn_version_checklist_t) {
XS(_wrap_delete_svn_version_checklist_t) {
{
- svn_version_checklist_t *arg1 = (svn_version_checklist_t *) 0 ;
+ struct svn_version_checklist_t *arg1 = (struct svn_version_checklist_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -8568,9 +8700,9 @@ XS(_wrap_delete_svn_version_checklist_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_version_checklist_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_version_checklist_t" "', argument " "1"" of type '" "svn_version_checklist_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_version_checklist_t" "', argument " "1"" of type '" "struct svn_version_checklist_t *""'");
}
- arg1 = (svn_version_checklist_t *)(argp1);
+ arg1 = (struct svn_version_checklist_t *)(argp1);
{
free((char *) arg1);
@@ -8668,6 +8800,788 @@ XS(_wrap_svn_subr_version) {
}
+XS(_wrap_svn_version_extended) {
+ {
+ svn_boolean_t arg1 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int val1 ;
+ int ecode1 = 0 ;
+ int argvi = 0;
+ svn_version_extended_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 1) || (items > 2)) {
+ SWIG_croak("Usage: svn_version_extended(verbose,pool);");
+ }
+ ecode1 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1);
+ if (!SWIG_IsOK(ecode1)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "svn_version_extended" "', argument " "1"" of type '" "svn_boolean_t""'");
+ }
+ arg1 = (svn_boolean_t)(val1);
+ if (items > 1) {
+
+ }
+ {
+ result = (svn_version_extended_t *)svn_version_extended(arg1,arg2);
+
+
+
+ }
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_version_extended_t, 0 | 0); argvi++ ;
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_version_ext_build_date) {
+ {
+ svn_version_extended_t *arg1 = (svn_version_extended_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ char *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_version_ext_build_date(ext_info);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_version_extended_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_version_ext_build_date" "', argument " "1"" of type '" "svn_version_extended_t const *""'");
+ }
+ arg1 = (svn_version_extended_t *)(argp1);
+ {
+ result = (char *)svn_version_ext_build_date((struct svn_version_extended_t const *)arg1);
+
+
+
+ }
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_version_ext_build_time) {
+ {
+ svn_version_extended_t *arg1 = (svn_version_extended_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ char *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_version_ext_build_time(ext_info);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_version_extended_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_version_ext_build_time" "', argument " "1"" of type '" "svn_version_extended_t const *""'");
+ }
+ arg1 = (svn_version_extended_t *)(argp1);
+ {
+ result = (char *)svn_version_ext_build_time((struct svn_version_extended_t const *)arg1);
+
+
+
+ }
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_version_ext_build_host) {
+ {
+ svn_version_extended_t *arg1 = (svn_version_extended_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ char *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_version_ext_build_host(ext_info);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_version_extended_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_version_ext_build_host" "', argument " "1"" of type '" "svn_version_extended_t const *""'");
+ }
+ arg1 = (svn_version_extended_t *)(argp1);
+ {
+ result = (char *)svn_version_ext_build_host((struct svn_version_extended_t const *)arg1);
+
+
+
+ }
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_version_ext_copyright) {
+ {
+ svn_version_extended_t *arg1 = (svn_version_extended_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ char *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_version_ext_copyright(ext_info);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_version_extended_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_version_ext_copyright" "', argument " "1"" of type '" "svn_version_extended_t const *""'");
+ }
+ arg1 = (svn_version_extended_t *)(argp1);
+ {
+ result = (char *)svn_version_ext_copyright((struct svn_version_extended_t const *)arg1);
+
+
+
+ }
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_version_ext_runtime_host) {
+ {
+ svn_version_extended_t *arg1 = (svn_version_extended_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ char *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_version_ext_runtime_host(ext_info);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_version_extended_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_version_ext_runtime_host" "', argument " "1"" of type '" "svn_version_extended_t const *""'");
+ }
+ arg1 = (svn_version_extended_t *)(argp1);
+ {
+ result = (char *)svn_version_ext_runtime_host((struct svn_version_extended_t const *)arg1);
+
+
+
+ }
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_version_ext_runtime_osname) {
+ {
+ svn_version_extended_t *arg1 = (svn_version_extended_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ char *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_version_ext_runtime_osname(ext_info);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_version_extended_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_version_ext_runtime_osname" "', argument " "1"" of type '" "svn_version_extended_t const *""'");
+ }
+ arg1 = (svn_version_extended_t *)(argp1);
+ {
+ result = (char *)svn_version_ext_runtime_osname((struct svn_version_extended_t const *)arg1);
+
+
+
+ }
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_version_ext_linked_lib_t_name_set) {
+ {
+ struct svn_version_ext_linked_lib_t *arg1 = (struct svn_version_ext_linked_lib_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_version_ext_linked_lib_t_name_set(self,name);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_version_ext_linked_lib_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_version_ext_linked_lib_t_name_set" "', argument " "1"" of type '" "struct svn_version_ext_linked_lib_t *""'");
+ }
+ arg1 = (struct svn_version_ext_linked_lib_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_version_ext_linked_lib_t_name_set" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->name) free((char *)arg1->name);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->name = copied;
+ }
+ ST(argvi) = sv_newmortal();
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_version_ext_linked_lib_t_name_get) {
+ {
+ struct svn_version_ext_linked_lib_t *arg1 = (struct svn_version_ext_linked_lib_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ char *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_version_ext_linked_lib_t_name_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_version_ext_linked_lib_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_version_ext_linked_lib_t_name_get" "', argument " "1"" of type '" "struct svn_version_ext_linked_lib_t *""'");
+ }
+ arg1 = (struct svn_version_ext_linked_lib_t *)(argp1);
+ result = (char *) ((arg1)->name);
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_version_ext_linked_lib_t_compiled_version_set) {
+ {
+ struct svn_version_ext_linked_lib_t *arg1 = (struct svn_version_ext_linked_lib_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_version_ext_linked_lib_t_compiled_version_set(self,compiled_version);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_version_ext_linked_lib_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_version_ext_linked_lib_t_compiled_version_set" "', argument " "1"" of type '" "struct svn_version_ext_linked_lib_t *""'");
+ }
+ arg1 = (struct svn_version_ext_linked_lib_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_version_ext_linked_lib_t_compiled_version_set" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->compiled_version) free((char *)arg1->compiled_version);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->compiled_version = copied;
+ }
+ ST(argvi) = sv_newmortal();
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_version_ext_linked_lib_t_compiled_version_get) {
+ {
+ struct svn_version_ext_linked_lib_t *arg1 = (struct svn_version_ext_linked_lib_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ char *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_version_ext_linked_lib_t_compiled_version_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_version_ext_linked_lib_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_version_ext_linked_lib_t_compiled_version_get" "', argument " "1"" of type '" "struct svn_version_ext_linked_lib_t *""'");
+ }
+ arg1 = (struct svn_version_ext_linked_lib_t *)(argp1);
+ result = (char *) ((arg1)->compiled_version);
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_version_ext_linked_lib_t_runtime_version_set) {
+ {
+ struct svn_version_ext_linked_lib_t *arg1 = (struct svn_version_ext_linked_lib_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_version_ext_linked_lib_t_runtime_version_set(self,runtime_version);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_version_ext_linked_lib_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_version_ext_linked_lib_t_runtime_version_set" "', argument " "1"" of type '" "struct svn_version_ext_linked_lib_t *""'");
+ }
+ arg1 = (struct svn_version_ext_linked_lib_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_version_ext_linked_lib_t_runtime_version_set" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->runtime_version) free((char *)arg1->runtime_version);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->runtime_version = copied;
+ }
+ ST(argvi) = sv_newmortal();
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_version_ext_linked_lib_t_runtime_version_get) {
+ {
+ struct svn_version_ext_linked_lib_t *arg1 = (struct svn_version_ext_linked_lib_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ char *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_version_ext_linked_lib_t_runtime_version_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_version_ext_linked_lib_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_version_ext_linked_lib_t_runtime_version_get" "', argument " "1"" of type '" "struct svn_version_ext_linked_lib_t *""'");
+ }
+ arg1 = (struct svn_version_ext_linked_lib_t *)(argp1);
+ result = (char *) ((arg1)->runtime_version);
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_new_svn_version_ext_linked_lib_t) {
+ {
+ int argvi = 0;
+ struct svn_version_ext_linked_lib_t *result = 0 ;
+ dXSARGS;
+
+ if ((items < 0) || (items > 0)) {
+ SWIG_croak("Usage: new_svn_version_ext_linked_lib_t();");
+ }
+ {
+ result = (struct svn_version_ext_linked_lib_t *)calloc(1, sizeof(struct svn_version_ext_linked_lib_t));
+
+
+
+ }
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_version_ext_linked_lib_t, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
+ XSRETURN(argvi);
+ fail:
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_delete_svn_version_ext_linked_lib_t) {
+ {
+ struct svn_version_ext_linked_lib_t *arg1 = (struct svn_version_ext_linked_lib_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: delete_svn_version_ext_linked_lib_t(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_version_ext_linked_lib_t, SWIG_POINTER_DISOWN | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_version_ext_linked_lib_t" "', argument " "1"" of type '" "struct svn_version_ext_linked_lib_t *""'");
+ }
+ arg1 = (struct svn_version_ext_linked_lib_t *)(argp1);
+ {
+ free((char *) arg1);
+
+
+
+ }
+ ST(argvi) = sv_newmortal();
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_version_ext_linked_libs) {
+ {
+ svn_version_extended_t *arg1 = (svn_version_extended_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ apr_array_header_t *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_version_ext_linked_libs(ext_info);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_version_extended_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_version_ext_linked_libs" "', argument " "1"" of type '" "svn_version_extended_t const *""'");
+ }
+ arg1 = (svn_version_extended_t *)(argp1);
+ {
+ result = (apr_array_header_t *)svn_version_ext_linked_libs((struct svn_version_extended_t const *)arg1);
+
+
+
+ }
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_array_header_t, 0 | 0); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_version_ext_loaded_lib_t_name_set) {
+ {
+ struct svn_version_ext_loaded_lib_t *arg1 = (struct svn_version_ext_loaded_lib_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_version_ext_loaded_lib_t_name_set(self,name);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_version_ext_loaded_lib_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_version_ext_loaded_lib_t_name_set" "', argument " "1"" of type '" "struct svn_version_ext_loaded_lib_t *""'");
+ }
+ arg1 = (struct svn_version_ext_loaded_lib_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_version_ext_loaded_lib_t_name_set" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->name) free((char *)arg1->name);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->name = copied;
+ }
+ ST(argvi) = sv_newmortal();
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_version_ext_loaded_lib_t_name_get) {
+ {
+ struct svn_version_ext_loaded_lib_t *arg1 = (struct svn_version_ext_loaded_lib_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ char *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_version_ext_loaded_lib_t_name_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_version_ext_loaded_lib_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_version_ext_loaded_lib_t_name_get" "', argument " "1"" of type '" "struct svn_version_ext_loaded_lib_t *""'");
+ }
+ arg1 = (struct svn_version_ext_loaded_lib_t *)(argp1);
+ result = (char *) ((arg1)->name);
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_version_ext_loaded_lib_t_version_set) {
+ {
+ struct svn_version_ext_loaded_lib_t *arg1 = (struct svn_version_ext_loaded_lib_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_version_ext_loaded_lib_t_version_set(self,version);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_version_ext_loaded_lib_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_version_ext_loaded_lib_t_version_set" "', argument " "1"" of type '" "struct svn_version_ext_loaded_lib_t *""'");
+ }
+ arg1 = (struct svn_version_ext_loaded_lib_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_version_ext_loaded_lib_t_version_set" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->version) free((char *)arg1->version);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->version = copied;
+ }
+ ST(argvi) = sv_newmortal();
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_version_ext_loaded_lib_t_version_get) {
+ {
+ struct svn_version_ext_loaded_lib_t *arg1 = (struct svn_version_ext_loaded_lib_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ char *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_version_ext_loaded_lib_t_version_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_version_ext_loaded_lib_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_version_ext_loaded_lib_t_version_get" "', argument " "1"" of type '" "struct svn_version_ext_loaded_lib_t *""'");
+ }
+ arg1 = (struct svn_version_ext_loaded_lib_t *)(argp1);
+ result = (char *) ((arg1)->version);
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_new_svn_version_ext_loaded_lib_t) {
+ {
+ int argvi = 0;
+ struct svn_version_ext_loaded_lib_t *result = 0 ;
+ dXSARGS;
+
+ if ((items < 0) || (items > 0)) {
+ SWIG_croak("Usage: new_svn_version_ext_loaded_lib_t();");
+ }
+ {
+ result = (struct svn_version_ext_loaded_lib_t *)calloc(1, sizeof(struct svn_version_ext_loaded_lib_t));
+
+
+
+ }
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_version_ext_loaded_lib_t, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
+ XSRETURN(argvi);
+ fail:
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_delete_svn_version_ext_loaded_lib_t) {
+ {
+ struct svn_version_ext_loaded_lib_t *arg1 = (struct svn_version_ext_loaded_lib_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: delete_svn_version_ext_loaded_lib_t(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_version_ext_loaded_lib_t, SWIG_POINTER_DISOWN | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_version_ext_loaded_lib_t" "', argument " "1"" of type '" "struct svn_version_ext_loaded_lib_t *""'");
+ }
+ arg1 = (struct svn_version_ext_loaded_lib_t *)(argp1);
+ {
+ free((char *) arg1);
+
+
+
+ }
+ ST(argvi) = sv_newmortal();
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_version_ext_loaded_libs) {
+ {
+ svn_version_extended_t *arg1 = (svn_version_extended_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ apr_array_header_t *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_version_ext_loaded_libs(ext_info);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_version_extended_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_version_ext_loaded_libs" "', argument " "1"" of type '" "svn_version_extended_t const *""'");
+ }
+ arg1 = (svn_version_extended_t *)(argp1);
+ {
+ result = (apr_array_header_t *)svn_version_ext_loaded_libs((struct svn_version_extended_t const *)arg1);
+
+
+
+ }
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_array_header_t, 0 | 0); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_version_checklist_invoke_version_query) {
{
svn_version_checklist_t *arg1 = (svn_version_checklist_t *) 0 ;
@@ -8819,13 +9733,204 @@ XS(_wrap_svn_prop_array_dup) {
}
+XS(_wrap_svn_prop_inherited_item_t_path_or_url_set) {
+ {
+ struct svn_prop_inherited_item_t *arg1 = (struct svn_prop_inherited_item_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_prop_inherited_item_t_path_or_url_set(self,path_or_url);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_prop_inherited_item_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_prop_inherited_item_t_path_or_url_set" "', argument " "1"" of type '" "struct svn_prop_inherited_item_t *""'");
+ }
+ arg1 = (struct svn_prop_inherited_item_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_prop_inherited_item_t_path_or_url_set" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->path_or_url) free((char *)arg1->path_or_url);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->path_or_url = copied;
+ }
+ ST(argvi) = sv_newmortal();
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_prop_inherited_item_t_path_or_url_get) {
+ {
+ struct svn_prop_inherited_item_t *arg1 = (struct svn_prop_inherited_item_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ char *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_prop_inherited_item_t_path_or_url_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_prop_inherited_item_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_prop_inherited_item_t_path_or_url_get" "', argument " "1"" of type '" "struct svn_prop_inherited_item_t *""'");
+ }
+ arg1 = (struct svn_prop_inherited_item_t *)(argp1);
+ result = (char *) ((arg1)->path_or_url);
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_prop_inherited_item_t_prop_hash_set) {
+ {
+ struct svn_prop_inherited_item_t *arg1 = (struct svn_prop_inherited_item_t *) 0 ;
+ apr_hash_t *arg2 = (apr_hash_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_prop_inherited_item_t_prop_hash_set(self,prop_hash);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_prop_inherited_item_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_prop_inherited_item_t_prop_hash_set" "', argument " "1"" of type '" "struct svn_prop_inherited_item_t *""'");
+ }
+ arg1 = (struct svn_prop_inherited_item_t *)(argp1);
+ res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_apr_hash_t, SWIG_POINTER_DISOWN | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_prop_inherited_item_t_prop_hash_set" "', argument " "2"" of type '" "apr_hash_t *""'");
+ }
+ arg2 = (apr_hash_t *)(argp2);
+ if (arg1) (arg1)->prop_hash = arg2;
+ ST(argvi) = sv_newmortal();
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_prop_inherited_item_t_prop_hash_get) {
+ {
+ struct svn_prop_inherited_item_t *arg1 = (struct svn_prop_inherited_item_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ apr_hash_t *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_prop_inherited_item_t_prop_hash_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_prop_inherited_item_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_prop_inherited_item_t_prop_hash_get" "', argument " "1"" of type '" "struct svn_prop_inherited_item_t *""'");
+ }
+ arg1 = (struct svn_prop_inherited_item_t *)(argp1);
+ result = (apr_hash_t *) ((arg1)->prop_hash);
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_hash_t, 0 | 0); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_new_svn_prop_inherited_item_t) {
+ {
+ int argvi = 0;
+ struct svn_prop_inherited_item_t *result = 0 ;
+ dXSARGS;
+
+ if ((items < 0) || (items > 0)) {
+ SWIG_croak("Usage: new_svn_prop_inherited_item_t();");
+ }
+ {
+ result = (struct svn_prop_inherited_item_t *)calloc(1, sizeof(struct svn_prop_inherited_item_t));
+
+
+
+ }
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_prop_inherited_item_t, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
+ XSRETURN(argvi);
+ fail:
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_delete_svn_prop_inherited_item_t) {
+ {
+ struct svn_prop_inherited_item_t *arg1 = (struct svn_prop_inherited_item_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: delete_svn_prop_inherited_item_t(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_prop_inherited_item_t, SWIG_POINTER_DISOWN | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_prop_inherited_item_t" "', argument " "1"" of type '" "struct svn_prop_inherited_item_t *""'");
+ }
+ arg1 = (struct svn_prop_inherited_item_t *)(argp1);
+ {
+ free((char *) arg1);
+
+
+
+ }
+ ST(argvi) = sv_newmortal();
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_prop_hash_to_array) {
{
apr_hash_t *arg1 = (apr_hash_t *) 0 ;
apr_pool_t *arg2 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool ;
- void *argp1 = 0 ;
- int res1 = 0 ;
int argvi = 0;
apr_array_header_t *result = 0 ;
dXSARGS;
@@ -8836,16 +9941,16 @@ XS(_wrap_svn_prop_hash_to_array) {
if ((items < 1) || (items > 2)) {
SWIG_croak("Usage: svn_prop_hash_to_array(hash,pool);");
}
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_apr_hash_t, 0 | 0 );
- if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_prop_hash_to_array" "', argument " "1"" of type '" "apr_hash_t *""'");
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg1 = svn_swig_pl_hash_to_prophash(ST(0), _global_pool);
}
- arg1 = (apr_hash_t *)(argp1);
if (items > 1) {
}
{
- result = (apr_array_header_t *)svn_prop_hash_to_array(arg1,arg2);
+ result = (apr_array_header_t *)svn_prop_hash_to_array((apr_hash_t const *)arg1,arg2);
@@ -8910,8 +10015,6 @@ XS(_wrap_svn_prop_hash_dup) {
apr_hash_t *arg1 = (apr_hash_t *) 0 ;
apr_pool_t *arg2 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool ;
- void *argp1 = 0 ;
- int res1 = 0 ;
int argvi = 0;
apr_hash_t *result = 0 ;
dXSARGS;
@@ -8922,16 +10025,16 @@ XS(_wrap_svn_prop_hash_dup) {
if ((items < 1) || (items > 2)) {
SWIG_croak("Usage: svn_prop_hash_dup(hash,pool);");
}
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_apr_hash_t, 0 | 0 );
- if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_prop_hash_dup" "', argument " "1"" of type '" "apr_hash_t *""'");
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg1 = svn_swig_pl_hash_to_prophash(ST(0), _global_pool);
}
- arg1 = (apr_hash_t *)(argp1);
if (items > 1) {
}
{
- result = (apr_hash_t *)svn_prop_hash_dup(arg1,arg2);
+ result = (apr_hash_t *)svn_prop_hash_dup((apr_hash_t const *)arg1,arg2);
@@ -8966,7 +10069,7 @@ XS(_wrap_svn_prop_get_value) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_apr_hash_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_prop_get_value" "', argument " "1"" of type '" "apr_hash_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_prop_get_value" "', argument " "1"" of type '" "apr_hash_t const *""'");
}
arg1 = (apr_hash_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
@@ -8975,7 +10078,7 @@ XS(_wrap_svn_prop_get_value) {
}
arg2 = (char *)(buf2);
{
- result = (char *)svn_prop_get_value(arg1,(char const *)arg2);
+ result = (char *)svn_prop_get_value((apr_hash_t const *)arg1,(char const *)arg2);
@@ -8992,6 +10095,40 @@ XS(_wrap_svn_prop_get_value) {
}
+XS(_wrap_svn_property_kind2) {
+ {
+ char *arg1 = (char *) 0 ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ int argvi = 0;
+ svn_prop_kind_t result;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_property_kind2(prop_name);");
+ }
+ res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_property_kind2" "', argument " "1"" of type '" "char const *""'");
+ }
+ arg1 = (char *)(buf1);
+ {
+ result = (svn_prop_kind_t)svn_property_kind2((char const *)arg1);
+
+
+
+ }
+ ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ XSRETURN(argvi);
+ fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_property_kind) {
{
int *arg1 = (int *) 0 ;
@@ -9077,8 +10214,6 @@ XS(_wrap_svn_prop_has_svn_prop) {
apr_hash_t *arg1 = (apr_hash_t *) 0 ;
apr_pool_t *arg2 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool ;
- void *argp1 = 0 ;
- int res1 = 0 ;
int argvi = 0;
svn_boolean_t result;
dXSARGS;
@@ -9089,11 +10224,11 @@ XS(_wrap_svn_prop_has_svn_prop) {
if ((items < 1) || (items > 2)) {
SWIG_croak("Usage: svn_prop_has_svn_prop(props,pool);");
}
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_apr_hash_t, 0 | 0 );
- if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_prop_has_svn_prop" "', argument " "1"" of type '" "apr_hash_t const *""'");
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg1 = svn_swig_pl_hash_to_prophash(ST(0), _global_pool);
}
- arg1 = (apr_hash_t *)(argp1);
if (items > 1) {
}
@@ -9149,6 +10284,142 @@ XS(_wrap_svn_prop_is_boolean) {
}
+XS(_wrap_svn_prop_is_known_svn_rev_prop) {
+ {
+ char *arg1 = (char *) 0 ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ int argvi = 0;
+ svn_boolean_t result;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_prop_is_known_svn_rev_prop(prop_name);");
+ }
+ res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_prop_is_known_svn_rev_prop" "', argument " "1"" of type '" "char const *""'");
+ }
+ arg1 = (char *)(buf1);
+ {
+ result = (svn_boolean_t)svn_prop_is_known_svn_rev_prop((char const *)arg1);
+
+
+
+ }
+ ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ XSRETURN(argvi);
+ fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_prop_is_known_svn_node_prop) {
+ {
+ char *arg1 = (char *) 0 ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ int argvi = 0;
+ svn_boolean_t result;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_prop_is_known_svn_node_prop(prop_name);");
+ }
+ res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_prop_is_known_svn_node_prop" "', argument " "1"" of type '" "char const *""'");
+ }
+ arg1 = (char *)(buf1);
+ {
+ result = (svn_boolean_t)svn_prop_is_known_svn_node_prop((char const *)arg1);
+
+
+
+ }
+ ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ XSRETURN(argvi);
+ fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_prop_is_known_svn_file_prop) {
+ {
+ char *arg1 = (char *) 0 ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ int argvi = 0;
+ svn_boolean_t result;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_prop_is_known_svn_file_prop(prop_name);");
+ }
+ res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_prop_is_known_svn_file_prop" "', argument " "1"" of type '" "char const *""'");
+ }
+ arg1 = (char *)(buf1);
+ {
+ result = (svn_boolean_t)svn_prop_is_known_svn_file_prop((char const *)arg1);
+
+
+
+ }
+ ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ XSRETURN(argvi);
+ fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_prop_is_known_svn_dir_prop) {
+ {
+ char *arg1 = (char *) 0 ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ int argvi = 0;
+ svn_boolean_t result;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_prop_is_known_svn_dir_prop(prop_name);");
+ }
+ res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_prop_is_known_svn_dir_prop" "', argument " "1"" of type '" "char const *""'");
+ }
+ arg1 = (char *)(buf1);
+ {
+ result = (svn_boolean_t)svn_prop_is_known_svn_dir_prop((char const *)arg1);
+
+
+
+ }
+ ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ XSRETURN(argvi);
+ fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_prop_needs_translation) {
{
char *arg1 = (char *) 0 ;
@@ -9291,10 +10562,6 @@ XS(_wrap_svn_prop_diffs) {
apr_pool_t *arg4 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool ;
apr_array_header_t *temp1 ;
- void *argp2 = 0 ;
- int res2 = 0 ;
- void *argp3 = 0 ;
- int res3 = 0 ;
int argvi = 0;
svn_error_t *result = 0 ;
dXSARGS;
@@ -9306,21 +10573,21 @@ XS(_wrap_svn_prop_diffs) {
if ((items < 2) || (items > 3)) {
SWIG_croak("Usage: svn_prop_diffs(target_props,source_props,pool);");
}
- res2 = SWIG_ConvertPtr(ST(0), &argp2,SWIGTYPE_p_apr_hash_t, 0 | 0 );
- if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_prop_diffs" "', argument " "2"" of type '" "apr_hash_t *""'");
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg2 = svn_swig_pl_hash_to_prophash(ST(0), _global_pool);
}
- arg2 = (apr_hash_t *)(argp2);
- res3 = SWIG_ConvertPtr(ST(1), &argp3,SWIGTYPE_p_apr_hash_t, 0 | 0 );
- if (!SWIG_IsOK(res3)) {
- SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_prop_diffs" "', argument " "3"" of type '" "apr_hash_t *""'");
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg3 = svn_swig_pl_hash_to_prophash(ST(1), _global_pool);
}
- arg3 = (apr_hash_t *)(argp3);
if (items > 2) {
}
{
- result = (svn_error_t *)svn_prop_diffs(arg1,arg2,arg3,arg4);
+ result = (svn_error_t *)svn_prop_diffs(arg1,(apr_hash_t const *)arg2,(apr_hash_t const *)arg3,arg4);
@@ -9401,7 +10668,7 @@ XS(_wrap_svn_prop_name_is_valid) {
XS(_wrap_svn_opt_subcommand_desc2_t_name_set) {
{
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9416,9 +10683,9 @@ XS(_wrap_svn_opt_subcommand_desc2_t_name_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_subcommand_desc2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc2_t_name_set" "', argument " "1"" of type '" "svn_opt_subcommand_desc2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc2_t_name_set" "', argument " "1"" of type '" "struct svn_opt_subcommand_desc2_t *""'");
}
- arg1 = (svn_opt_subcommand_desc2_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_opt_subcommand_desc2_t_name_set" "', argument " "2"" of type '" "char const *""'");
@@ -9446,7 +10713,7 @@ XS(_wrap_svn_opt_subcommand_desc2_t_name_set) {
XS(_wrap_svn_opt_subcommand_desc2_t_name_get) {
{
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -9458,9 +10725,9 @@ XS(_wrap_svn_opt_subcommand_desc2_t_name_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_subcommand_desc2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc2_t_name_get" "', argument " "1"" of type '" "svn_opt_subcommand_desc2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc2_t_name_get" "', argument " "1"" of type '" "struct svn_opt_subcommand_desc2_t *""'");
}
- arg1 = (svn_opt_subcommand_desc2_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)(argp1);
result = (char *) ((arg1)->name);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -9474,7 +10741,7 @@ XS(_wrap_svn_opt_subcommand_desc2_t_name_get) {
XS(_wrap_svn_opt_subcommand_desc2_t_cmd_func_set) {
{
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
svn_opt_subcommand_t *arg2 = (svn_opt_subcommand_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9486,9 +10753,9 @@ XS(_wrap_svn_opt_subcommand_desc2_t_cmd_func_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_subcommand_desc2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc2_t_cmd_func_set" "', argument " "1"" of type '" "svn_opt_subcommand_desc2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc2_t_cmd_func_set" "', argument " "1"" of type '" "struct svn_opt_subcommand_desc2_t *""'");
}
- arg1 = (svn_opt_subcommand_desc2_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -9510,7 +10777,7 @@ XS(_wrap_svn_opt_subcommand_desc2_t_cmd_func_set) {
XS(_wrap_svn_opt_subcommand_desc2_t_cmd_func_get) {
{
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -9522,9 +10789,9 @@ XS(_wrap_svn_opt_subcommand_desc2_t_cmd_func_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_subcommand_desc2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc2_t_cmd_func_get" "', argument " "1"" of type '" "svn_opt_subcommand_desc2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc2_t_cmd_func_get" "', argument " "1"" of type '" "struct svn_opt_subcommand_desc2_t *""'");
}
- arg1 = (svn_opt_subcommand_desc2_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)(argp1);
result = (svn_opt_subcommand_t *) ((arg1)->cmd_func);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -9538,7 +10805,7 @@ XS(_wrap_svn_opt_subcommand_desc2_t_cmd_func_get) {
XS(_wrap_svn_opt_subcommand_desc2_t_aliases_set) {
{
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
char **arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9552,9 +10819,9 @@ XS(_wrap_svn_opt_subcommand_desc2_t_aliases_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_subcommand_desc2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc2_t_aliases_set" "', argument " "1"" of type '" "svn_opt_subcommand_desc2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc2_t_aliases_set" "', argument " "1"" of type '" "struct svn_opt_subcommand_desc2_t *""'");
}
- arg1 = (svn_opt_subcommand_desc2_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_p_char, 0 | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_opt_subcommand_desc2_t_aliases_set" "', argument " "2"" of type '" "char const *[3]""'");
@@ -9582,7 +10849,7 @@ XS(_wrap_svn_opt_subcommand_desc2_t_aliases_set) {
XS(_wrap_svn_opt_subcommand_desc2_t_aliases_get) {
{
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -9594,9 +10861,9 @@ XS(_wrap_svn_opt_subcommand_desc2_t_aliases_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_subcommand_desc2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc2_t_aliases_get" "', argument " "1"" of type '" "svn_opt_subcommand_desc2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc2_t_aliases_get" "', argument " "1"" of type '" "struct svn_opt_subcommand_desc2_t *""'");
}
- arg1 = (svn_opt_subcommand_desc2_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)(argp1);
result = (char **)(char **) ((arg1)->aliases);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_p_char, 0 | 0); argvi++ ;
@@ -9610,7 +10877,7 @@ XS(_wrap_svn_opt_subcommand_desc2_t_aliases_get) {
XS(_wrap_svn_opt_subcommand_desc2_t_help_set) {
{
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9625,9 +10892,9 @@ XS(_wrap_svn_opt_subcommand_desc2_t_help_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_subcommand_desc2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc2_t_help_set" "', argument " "1"" of type '" "svn_opt_subcommand_desc2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc2_t_help_set" "', argument " "1"" of type '" "struct svn_opt_subcommand_desc2_t *""'");
}
- arg1 = (svn_opt_subcommand_desc2_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_opt_subcommand_desc2_t_help_set" "', argument " "2"" of type '" "char const *""'");
@@ -9655,7 +10922,7 @@ XS(_wrap_svn_opt_subcommand_desc2_t_help_set) {
XS(_wrap_svn_opt_subcommand_desc2_t_help_get) {
{
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -9667,9 +10934,9 @@ XS(_wrap_svn_opt_subcommand_desc2_t_help_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_subcommand_desc2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc2_t_help_get" "', argument " "1"" of type '" "svn_opt_subcommand_desc2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc2_t_help_get" "', argument " "1"" of type '" "struct svn_opt_subcommand_desc2_t *""'");
}
- arg1 = (svn_opt_subcommand_desc2_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)(argp1);
result = (char *) ((arg1)->help);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -9683,7 +10950,7 @@ XS(_wrap_svn_opt_subcommand_desc2_t_help_get) {
XS(_wrap_svn_opt_subcommand_desc2_t_valid_options_set) {
{
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
int *arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9697,9 +10964,9 @@ XS(_wrap_svn_opt_subcommand_desc2_t_valid_options_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_subcommand_desc2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc2_t_valid_options_set" "', argument " "1"" of type '" "svn_opt_subcommand_desc2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc2_t_valid_options_set" "', argument " "1"" of type '" "struct svn_opt_subcommand_desc2_t *""'");
}
- arg1 = (svn_opt_subcommand_desc2_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_int, 0 | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_opt_subcommand_desc2_t_valid_options_set" "', argument " "2"" of type '" "int [50]""'");
@@ -9727,7 +10994,7 @@ XS(_wrap_svn_opt_subcommand_desc2_t_valid_options_set) {
XS(_wrap_svn_opt_subcommand_desc2_t_valid_options_get) {
{
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -9739,9 +11006,9 @@ XS(_wrap_svn_opt_subcommand_desc2_t_valid_options_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_subcommand_desc2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc2_t_valid_options_get" "', argument " "1"" of type '" "svn_opt_subcommand_desc2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc2_t_valid_options_get" "', argument " "1"" of type '" "struct svn_opt_subcommand_desc2_t *""'");
}
- arg1 = (svn_opt_subcommand_desc2_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)(argp1);
result = (int *)(int *) ((arg1)->valid_options);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_int, 0 | 0); argvi++ ;
@@ -9755,7 +11022,7 @@ XS(_wrap_svn_opt_subcommand_desc2_t_valid_options_get) {
XS(_wrap_svn_opt_subcommand_desc2_t_desc_overrides_get) {
{
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -9767,9 +11034,9 @@ XS(_wrap_svn_opt_subcommand_desc2_t_desc_overrides_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_subcommand_desc2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc2_t_desc_overrides_get" "', argument " "1"" of type '" "svn_opt_subcommand_desc2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc2_t_desc_overrides_get" "', argument " "1"" of type '" "struct svn_opt_subcommand_desc2_t *""'");
}
- arg1 = (svn_opt_subcommand_desc2_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)(argp1);
result = (svn_opt_subcommand_desc2_t_desc_overrides *)(svn_opt_subcommand_desc2_t_desc_overrides *) ((arg1)->desc_overrides);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_opt_subcommand_desc2_t_desc_overrides, 0 | SWIG_SHADOW); argvi++ ;
@@ -9784,14 +11051,14 @@ XS(_wrap_svn_opt_subcommand_desc2_t_desc_overrides_get) {
XS(_wrap_new_svn_opt_subcommand_desc2_t) {
{
int argvi = 0;
- svn_opt_subcommand_desc2_t *result = 0 ;
+ struct svn_opt_subcommand_desc2_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_opt_subcommand_desc2_t();");
}
{
- result = (svn_opt_subcommand_desc2_t *)calloc(1, sizeof(svn_opt_subcommand_desc2_t));
+ result = (struct svn_opt_subcommand_desc2_t *)calloc(1, sizeof(struct svn_opt_subcommand_desc2_t));
@@ -9806,7 +11073,7 @@ XS(_wrap_new_svn_opt_subcommand_desc2_t) {
XS(_wrap_delete_svn_opt_subcommand_desc2_t) {
{
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -9817,9 +11084,9 @@ XS(_wrap_delete_svn_opt_subcommand_desc2_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_subcommand_desc2_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_opt_subcommand_desc2_t" "', argument " "1"" of type '" "svn_opt_subcommand_desc2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_opt_subcommand_desc2_t" "', argument " "1"" of type '" "struct svn_opt_subcommand_desc2_t *""'");
}
- arg1 = (svn_opt_subcommand_desc2_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)(argp1);
{
free((char *) arg1);
@@ -10031,7 +11298,7 @@ XS(_wrap_delete_svn_opt_subcommand_desc2_t_desc_overrides) {
XS(_wrap_svn_opt_subcommand_desc_t_name_set) {
{
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10046,9 +11313,9 @@ XS(_wrap_svn_opt_subcommand_desc_t_name_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_subcommand_desc_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc_t_name_set" "', argument " "1"" of type '" "svn_opt_subcommand_desc_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc_t_name_set" "', argument " "1"" of type '" "struct svn_opt_subcommand_desc_t *""'");
}
- arg1 = (svn_opt_subcommand_desc_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_opt_subcommand_desc_t_name_set" "', argument " "2"" of type '" "char const *""'");
@@ -10076,7 +11343,7 @@ XS(_wrap_svn_opt_subcommand_desc_t_name_set) {
XS(_wrap_svn_opt_subcommand_desc_t_name_get) {
{
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10088,9 +11355,9 @@ XS(_wrap_svn_opt_subcommand_desc_t_name_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_subcommand_desc_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc_t_name_get" "', argument " "1"" of type '" "svn_opt_subcommand_desc_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc_t_name_get" "', argument " "1"" of type '" "struct svn_opt_subcommand_desc_t *""'");
}
- arg1 = (svn_opt_subcommand_desc_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc_t *)(argp1);
result = (char *) ((arg1)->name);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -10104,7 +11371,7 @@ XS(_wrap_svn_opt_subcommand_desc_t_name_get) {
XS(_wrap_svn_opt_subcommand_desc_t_cmd_func_set) {
{
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
svn_opt_subcommand_t *arg2 = (svn_opt_subcommand_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10116,9 +11383,9 @@ XS(_wrap_svn_opt_subcommand_desc_t_cmd_func_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_subcommand_desc_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc_t_cmd_func_set" "', argument " "1"" of type '" "svn_opt_subcommand_desc_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc_t_cmd_func_set" "', argument " "1"" of type '" "struct svn_opt_subcommand_desc_t *""'");
}
- arg1 = (svn_opt_subcommand_desc_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10140,7 +11407,7 @@ XS(_wrap_svn_opt_subcommand_desc_t_cmd_func_set) {
XS(_wrap_svn_opt_subcommand_desc_t_cmd_func_get) {
{
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10152,9 +11419,9 @@ XS(_wrap_svn_opt_subcommand_desc_t_cmd_func_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_subcommand_desc_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc_t_cmd_func_get" "', argument " "1"" of type '" "svn_opt_subcommand_desc_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc_t_cmd_func_get" "', argument " "1"" of type '" "struct svn_opt_subcommand_desc_t *""'");
}
- arg1 = (svn_opt_subcommand_desc_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc_t *)(argp1);
result = (svn_opt_subcommand_t *) ((arg1)->cmd_func);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -10168,7 +11435,7 @@ XS(_wrap_svn_opt_subcommand_desc_t_cmd_func_get) {
XS(_wrap_svn_opt_subcommand_desc_t_aliases_set) {
{
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
char **arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10182,9 +11449,9 @@ XS(_wrap_svn_opt_subcommand_desc_t_aliases_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_subcommand_desc_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc_t_aliases_set" "', argument " "1"" of type '" "svn_opt_subcommand_desc_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc_t_aliases_set" "', argument " "1"" of type '" "struct svn_opt_subcommand_desc_t *""'");
}
- arg1 = (svn_opt_subcommand_desc_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_p_char, 0 | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_opt_subcommand_desc_t_aliases_set" "', argument " "2"" of type '" "char const *[3]""'");
@@ -10212,7 +11479,7 @@ XS(_wrap_svn_opt_subcommand_desc_t_aliases_set) {
XS(_wrap_svn_opt_subcommand_desc_t_aliases_get) {
{
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10224,9 +11491,9 @@ XS(_wrap_svn_opt_subcommand_desc_t_aliases_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_subcommand_desc_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc_t_aliases_get" "', argument " "1"" of type '" "svn_opt_subcommand_desc_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc_t_aliases_get" "', argument " "1"" of type '" "struct svn_opt_subcommand_desc_t *""'");
}
- arg1 = (svn_opt_subcommand_desc_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc_t *)(argp1);
result = (char **)(char **) ((arg1)->aliases);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_p_char, 0 | 0); argvi++ ;
@@ -10240,7 +11507,7 @@ XS(_wrap_svn_opt_subcommand_desc_t_aliases_get) {
XS(_wrap_svn_opt_subcommand_desc_t_help_set) {
{
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10255,9 +11522,9 @@ XS(_wrap_svn_opt_subcommand_desc_t_help_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_subcommand_desc_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc_t_help_set" "', argument " "1"" of type '" "svn_opt_subcommand_desc_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc_t_help_set" "', argument " "1"" of type '" "struct svn_opt_subcommand_desc_t *""'");
}
- arg1 = (svn_opt_subcommand_desc_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_opt_subcommand_desc_t_help_set" "', argument " "2"" of type '" "char const *""'");
@@ -10285,7 +11552,7 @@ XS(_wrap_svn_opt_subcommand_desc_t_help_set) {
XS(_wrap_svn_opt_subcommand_desc_t_help_get) {
{
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10297,9 +11564,9 @@ XS(_wrap_svn_opt_subcommand_desc_t_help_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_subcommand_desc_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc_t_help_get" "', argument " "1"" of type '" "svn_opt_subcommand_desc_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc_t_help_get" "', argument " "1"" of type '" "struct svn_opt_subcommand_desc_t *""'");
}
- arg1 = (svn_opt_subcommand_desc_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc_t *)(argp1);
result = (char *) ((arg1)->help);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -10313,7 +11580,7 @@ XS(_wrap_svn_opt_subcommand_desc_t_help_get) {
XS(_wrap_svn_opt_subcommand_desc_t_valid_options_set) {
{
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
int *arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10327,9 +11594,9 @@ XS(_wrap_svn_opt_subcommand_desc_t_valid_options_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_subcommand_desc_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc_t_valid_options_set" "', argument " "1"" of type '" "svn_opt_subcommand_desc_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc_t_valid_options_set" "', argument " "1"" of type '" "struct svn_opt_subcommand_desc_t *""'");
}
- arg1 = (svn_opt_subcommand_desc_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_int, 0 | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_opt_subcommand_desc_t_valid_options_set" "', argument " "2"" of type '" "int [50]""'");
@@ -10357,7 +11624,7 @@ XS(_wrap_svn_opt_subcommand_desc_t_valid_options_set) {
XS(_wrap_svn_opt_subcommand_desc_t_valid_options_get) {
{
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10369,9 +11636,9 @@ XS(_wrap_svn_opt_subcommand_desc_t_valid_options_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_subcommand_desc_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc_t_valid_options_get" "', argument " "1"" of type '" "svn_opt_subcommand_desc_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_subcommand_desc_t_valid_options_get" "', argument " "1"" of type '" "struct svn_opt_subcommand_desc_t *""'");
}
- arg1 = (svn_opt_subcommand_desc_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc_t *)(argp1);
result = (int *)(int *) ((arg1)->valid_options);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_int, 0 | 0); argvi++ ;
@@ -10386,14 +11653,14 @@ XS(_wrap_svn_opt_subcommand_desc_t_valid_options_get) {
XS(_wrap_new_svn_opt_subcommand_desc_t) {
{
int argvi = 0;
- svn_opt_subcommand_desc_t *result = 0 ;
+ struct svn_opt_subcommand_desc_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_opt_subcommand_desc_t();");
}
{
- result = (svn_opt_subcommand_desc_t *)calloc(1, sizeof(svn_opt_subcommand_desc_t));
+ result = (struct svn_opt_subcommand_desc_t *)calloc(1, sizeof(struct svn_opt_subcommand_desc_t));
@@ -10408,7 +11675,7 @@ XS(_wrap_new_svn_opt_subcommand_desc_t) {
XS(_wrap_delete_svn_opt_subcommand_desc_t) {
{
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10419,9 +11686,9 @@ XS(_wrap_delete_svn_opt_subcommand_desc_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_subcommand_desc_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_opt_subcommand_desc_t" "', argument " "1"" of type '" "svn_opt_subcommand_desc_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_opt_subcommand_desc_t" "', argument " "1"" of type '" "struct svn_opt_subcommand_desc_t *""'");
}
- arg1 = (svn_opt_subcommand_desc_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc_t *)(argp1);
{
free((char *) arg1);
@@ -11122,7 +12389,7 @@ XS(_wrap_svn_opt_subcommand_help) {
XS(_wrap_svn_opt_revision_value_t_number_set) {
{
- svn_opt_revision_value_t *arg1 = (svn_opt_revision_value_t *) 0 ;
+ union svn_opt_revision_value_t *arg1 = (union svn_opt_revision_value_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11136,9 +12403,9 @@ XS(_wrap_svn_opt_revision_value_t_number_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_revision_value_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_revision_value_t_number_set" "', argument " "1"" of type '" "svn_opt_revision_value_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_revision_value_t_number_set" "', argument " "1"" of type '" "union svn_opt_revision_value_t *""'");
}
- arg1 = (svn_opt_revision_value_t *)(argp1);
+ arg1 = (union svn_opt_revision_value_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_opt_revision_value_t_number_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -11159,7 +12426,7 @@ XS(_wrap_svn_opt_revision_value_t_number_set) {
XS(_wrap_svn_opt_revision_value_t_number_get) {
{
- svn_opt_revision_value_t *arg1 = (svn_opt_revision_value_t *) 0 ;
+ union svn_opt_revision_value_t *arg1 = (union svn_opt_revision_value_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11171,9 +12438,9 @@ XS(_wrap_svn_opt_revision_value_t_number_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_revision_value_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_revision_value_t_number_get" "', argument " "1"" of type '" "svn_opt_revision_value_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_revision_value_t_number_get" "', argument " "1"" of type '" "union svn_opt_revision_value_t *""'");
}
- arg1 = (svn_opt_revision_value_t *)(argp1);
+ arg1 = (union svn_opt_revision_value_t *)(argp1);
result = (svn_revnum_t) ((arg1)->number);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -11187,7 +12454,7 @@ XS(_wrap_svn_opt_revision_value_t_number_get) {
XS(_wrap_svn_opt_revision_value_t_date_set) {
{
- svn_opt_revision_value_t *arg1 = (svn_opt_revision_value_t *) 0 ;
+ union svn_opt_revision_value_t *arg1 = (union svn_opt_revision_value_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11201,9 +12468,9 @@ XS(_wrap_svn_opt_revision_value_t_date_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_revision_value_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_revision_value_t_date_set" "', argument " "1"" of type '" "svn_opt_revision_value_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_revision_value_t_date_set" "', argument " "1"" of type '" "union svn_opt_revision_value_t *""'");
}
- arg1 = (svn_opt_revision_value_t *)(argp1);
+ arg1 = (union svn_opt_revision_value_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_opt_revision_value_t_date_set" "', argument " "2"" of type '" "apr_time_t""'");
@@ -11224,7 +12491,7 @@ XS(_wrap_svn_opt_revision_value_t_date_set) {
XS(_wrap_svn_opt_revision_value_t_date_get) {
{
- svn_opt_revision_value_t *arg1 = (svn_opt_revision_value_t *) 0 ;
+ union svn_opt_revision_value_t *arg1 = (union svn_opt_revision_value_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11236,9 +12503,9 @@ XS(_wrap_svn_opt_revision_value_t_date_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_revision_value_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_revision_value_t_date_get" "', argument " "1"" of type '" "svn_opt_revision_value_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_revision_value_t_date_get" "', argument " "1"" of type '" "union svn_opt_revision_value_t *""'");
}
- arg1 = (svn_opt_revision_value_t *)(argp1);
+ arg1 = (union svn_opt_revision_value_t *)(argp1);
result = ((arg1)->date);
{
char temp[256];
@@ -11258,14 +12525,14 @@ XS(_wrap_svn_opt_revision_value_t_date_get) {
XS(_wrap_new_svn_opt_revision_value_t) {
{
int argvi = 0;
- svn_opt_revision_value_t *result = 0 ;
+ union svn_opt_revision_value_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_opt_revision_value_t();");
}
{
- result = (svn_opt_revision_value_t *)calloc(1, sizeof(svn_opt_revision_value_t));
+ result = (union svn_opt_revision_value_t *)calloc(1, sizeof(union svn_opt_revision_value_t));
@@ -11280,7 +12547,7 @@ XS(_wrap_new_svn_opt_revision_value_t) {
XS(_wrap_delete_svn_opt_revision_value_t) {
{
- svn_opt_revision_value_t *arg1 = (svn_opt_revision_value_t *) 0 ;
+ union svn_opt_revision_value_t *arg1 = (union svn_opt_revision_value_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11291,9 +12558,9 @@ XS(_wrap_delete_svn_opt_revision_value_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_revision_value_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_opt_revision_value_t" "', argument " "1"" of type '" "svn_opt_revision_value_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_opt_revision_value_t" "', argument " "1"" of type '" "union svn_opt_revision_value_t *""'");
}
- arg1 = (svn_opt_revision_value_t *)(argp1);
+ arg1 = (union svn_opt_revision_value_t *)(argp1);
{
free((char *) arg1);
@@ -11312,9 +12579,10 @@ XS(_wrap_delete_svn_opt_revision_value_t) {
XS(_wrap_svn_opt_revision_t_kind_set) {
{
- svn_opt_revision_t *arg1 = (svn_opt_revision_t *) 0 ;
+ struct svn_opt_revision_t *arg1 = (struct svn_opt_revision_t *) 0 ;
enum svn_opt_revision_kind arg2 ;
- svn_opt_revision_t rev1 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
int val2 ;
int ecode2 = 0 ;
int argvi = 0;
@@ -11323,55 +12591,11 @@ XS(_wrap_svn_opt_revision_t_kind_set) {
if ((items < 2) || (items > 2)) {
SWIG_croak("Usage: svn_opt_revision_t_kind_set(self,kind);");
}
- {
- arg1 = &rev1;
- if (ST(0) == NULL || ST(0) == &PL_sv_undef || !SvOK(ST(0))) {
- rev1.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(0)) && sv_derived_from(ST(0), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(0), (void **)&arg1, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(0))) {
- rev1.kind = svn_opt_revision_number;
- rev1.value.number = SvIV(ST(0));
- }
- else if (SvPOK(ST(0))) {
- char *input = SvPV_nolen(ST(0));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev1.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev1.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev1.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev1.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev1.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev1.kind = svn_opt_revision_date;
- rev1.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_revision_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_revision_t_kind_set" "', argument " "1"" of type '" "struct svn_opt_revision_t *""'");
}
+ arg1 = (struct svn_opt_revision_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_opt_revision_t_kind_set" "', argument " "2"" of type '" "enum svn_opt_revision_kind""'");
@@ -11392,8 +12616,9 @@ XS(_wrap_svn_opt_revision_t_kind_set) {
XS(_wrap_svn_opt_revision_t_kind_get) {
{
- svn_opt_revision_t *arg1 = (svn_opt_revision_t *) 0 ;
- svn_opt_revision_t rev1 ;
+ struct svn_opt_revision_t *arg1 = (struct svn_opt_revision_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
int argvi = 0;
enum svn_opt_revision_kind result;
dXSARGS;
@@ -11401,55 +12626,11 @@ XS(_wrap_svn_opt_revision_t_kind_get) {
if ((items < 1) || (items > 1)) {
SWIG_croak("Usage: svn_opt_revision_t_kind_get(self);");
}
- {
- arg1 = &rev1;
- if (ST(0) == NULL || ST(0) == &PL_sv_undef || !SvOK(ST(0))) {
- rev1.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(0)) && sv_derived_from(ST(0), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(0), (void **)&arg1, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(0))) {
- rev1.kind = svn_opt_revision_number;
- rev1.value.number = SvIV(ST(0));
- }
- else if (SvPOK(ST(0))) {
- char *input = SvPV_nolen(ST(0));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev1.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev1.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev1.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev1.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev1.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev1.kind = svn_opt_revision_date;
- rev1.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_revision_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_revision_t_kind_get" "', argument " "1"" of type '" "struct svn_opt_revision_t *""'");
}
+ arg1 = (struct svn_opt_revision_t *)(argp1);
result = (enum svn_opt_revision_kind) ((arg1)->kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -11463,9 +12644,10 @@ XS(_wrap_svn_opt_revision_t_kind_get) {
XS(_wrap_svn_opt_revision_t_value_set) {
{
- svn_opt_revision_t *arg1 = (svn_opt_revision_t *) 0 ;
+ struct svn_opt_revision_t *arg1 = (struct svn_opt_revision_t *) 0 ;
svn_opt_revision_value_t *arg2 = (svn_opt_revision_value_t *) 0 ;
- svn_opt_revision_t rev1 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
void *argp2 = 0 ;
int res2 = 0 ;
int argvi = 0;
@@ -11474,55 +12656,11 @@ XS(_wrap_svn_opt_revision_t_value_set) {
if ((items < 2) || (items > 2)) {
SWIG_croak("Usage: svn_opt_revision_t_value_set(self,value);");
}
- {
- arg1 = &rev1;
- if (ST(0) == NULL || ST(0) == &PL_sv_undef || !SvOK(ST(0))) {
- rev1.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(0)) && sv_derived_from(ST(0), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(0), (void **)&arg1, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(0))) {
- rev1.kind = svn_opt_revision_number;
- rev1.value.number = SvIV(ST(0));
- }
- else if (SvPOK(ST(0))) {
- char *input = SvPV_nolen(ST(0));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev1.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev1.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev1.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev1.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev1.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev1.kind = svn_opt_revision_date;
- rev1.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_revision_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_revision_t_value_set" "', argument " "1"" of type '" "struct svn_opt_revision_t *""'");
}
+ arg1 = (struct svn_opt_revision_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_opt_revision_value_t, 0 | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_opt_revision_t_value_set" "', argument " "2"" of type '" "svn_opt_revision_value_t *""'");
@@ -11543,8 +12681,9 @@ XS(_wrap_svn_opt_revision_t_value_set) {
XS(_wrap_svn_opt_revision_t_value_get) {
{
- svn_opt_revision_t *arg1 = (svn_opt_revision_t *) 0 ;
- svn_opt_revision_t rev1 ;
+ struct svn_opt_revision_t *arg1 = (struct svn_opt_revision_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
int argvi = 0;
svn_opt_revision_value_t *result = 0 ;
dXSARGS;
@@ -11552,55 +12691,11 @@ XS(_wrap_svn_opt_revision_t_value_get) {
if ((items < 1) || (items > 1)) {
SWIG_croak("Usage: svn_opt_revision_t_value_get(self);");
}
- {
- arg1 = &rev1;
- if (ST(0) == NULL || ST(0) == &PL_sv_undef || !SvOK(ST(0))) {
- rev1.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(0)) && sv_derived_from(ST(0), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(0), (void **)&arg1, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(0))) {
- rev1.kind = svn_opt_revision_number;
- rev1.value.number = SvIV(ST(0));
- }
- else if (SvPOK(ST(0))) {
- char *input = SvPV_nolen(ST(0));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev1.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev1.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev1.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev1.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev1.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev1.kind = svn_opt_revision_date;
- rev1.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_revision_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_revision_t_value_get" "', argument " "1"" of type '" "struct svn_opt_revision_t *""'");
}
+ arg1 = (struct svn_opt_revision_t *)(argp1);
result = (svn_opt_revision_value_t *)& ((arg1)->value);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_opt_revision_value_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -11615,14 +12710,14 @@ XS(_wrap_svn_opt_revision_t_value_get) {
XS(_wrap_new_svn_opt_revision_t) {
{
int argvi = 0;
- svn_opt_revision_t *result = 0 ;
+ struct svn_opt_revision_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_opt_revision_t();");
}
{
- result = (svn_opt_revision_t *)calloc(1, sizeof(svn_opt_revision_t));
+ result = (struct svn_opt_revision_t *)calloc(1, sizeof(struct svn_opt_revision_t));
@@ -11637,63 +12732,20 @@ XS(_wrap_new_svn_opt_revision_t) {
XS(_wrap_delete_svn_opt_revision_t) {
{
- svn_opt_revision_t *arg1 = (svn_opt_revision_t *) 0 ;
- svn_opt_revision_t rev1 ;
+ struct svn_opt_revision_t *arg1 = (struct svn_opt_revision_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
int argvi = 0;
dXSARGS;
if ((items < 1) || (items > 1)) {
SWIG_croak("Usage: delete_svn_opt_revision_t(self);");
}
- {
- arg1 = &rev1;
- if (ST(0) == NULL || ST(0) == &PL_sv_undef || !SvOK(ST(0))) {
- rev1.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(0)) && sv_derived_from(ST(0), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(0), (void **)&arg1, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(0))) {
- rev1.kind = svn_opt_revision_number;
- rev1.value.number = SvIV(ST(0));
- }
- else if (SvPOK(ST(0))) {
- char *input = SvPV_nolen(ST(0));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev1.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev1.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev1.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev1.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev1.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev1.kind = svn_opt_revision_date;
- rev1.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_revision_t, SWIG_POINTER_DISOWN | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_opt_revision_t" "', argument " "1"" of type '" "struct svn_opt_revision_t *""'");
}
+ arg1 = (struct svn_opt_revision_t *)(argp1);
{
free((char *) arg1);
@@ -11712,7 +12764,7 @@ XS(_wrap_delete_svn_opt_revision_t) {
XS(_wrap_svn_opt_revision_range_t_start_set) {
{
- svn_opt_revision_range_t *arg1 = (svn_opt_revision_range_t *) 0 ;
+ struct svn_opt_revision_range_t *arg1 = (struct svn_opt_revision_range_t *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11725,57 +12777,11 @@ XS(_wrap_svn_opt_revision_range_t_start_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_revision_range_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_revision_range_t_start_set" "', argument " "1"" of type '" "svn_opt_revision_range_t *""'");
- }
- arg1 = (svn_opt_revision_range_t *)(argp1);
- {
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_revision_range_t_start_set" "', argument " "1"" of type '" "struct svn_opt_revision_range_t *""'");
+ }
+ arg1 = (struct svn_opt_revision_range_t *)(argp1);
+ {
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
}
if (arg1) (arg1)->start = *arg2;
ST(argvi) = sv_newmortal();
@@ -11792,7 +12798,7 @@ XS(_wrap_svn_opt_revision_range_t_start_set) {
XS(_wrap_svn_opt_revision_range_t_start_get) {
{
- svn_opt_revision_range_t *arg1 = (svn_opt_revision_range_t *) 0 ;
+ struct svn_opt_revision_range_t *arg1 = (struct svn_opt_revision_range_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11804,9 +12810,9 @@ XS(_wrap_svn_opt_revision_range_t_start_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_revision_range_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_revision_range_t_start_get" "', argument " "1"" of type '" "svn_opt_revision_range_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_revision_range_t_start_get" "', argument " "1"" of type '" "struct svn_opt_revision_range_t *""'");
}
- arg1 = (svn_opt_revision_range_t *)(argp1);
+ arg1 = (struct svn_opt_revision_range_t *)(argp1);
result = (svn_opt_revision_t *)& ((arg1)->start);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_opt_revision_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -11820,7 +12826,7 @@ XS(_wrap_svn_opt_revision_range_t_start_get) {
XS(_wrap_svn_opt_revision_range_t_end_set) {
{
- svn_opt_revision_range_t *arg1 = (svn_opt_revision_range_t *) 0 ;
+ struct svn_opt_revision_range_t *arg1 = (struct svn_opt_revision_range_t *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11833,57 +12839,11 @@ XS(_wrap_svn_opt_revision_range_t_end_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_revision_range_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_revision_range_t_end_set" "', argument " "1"" of type '" "svn_opt_revision_range_t *""'");
- }
- arg1 = (svn_opt_revision_range_t *)(argp1);
- {
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_revision_range_t_end_set" "', argument " "1"" of type '" "struct svn_opt_revision_range_t *""'");
+ }
+ arg1 = (struct svn_opt_revision_range_t *)(argp1);
+ {
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
}
if (arg1) (arg1)->end = *arg2;
ST(argvi) = sv_newmortal();
@@ -11900,7 +12860,7 @@ XS(_wrap_svn_opt_revision_range_t_end_set) {
XS(_wrap_svn_opt_revision_range_t_end_get) {
{
- svn_opt_revision_range_t *arg1 = (svn_opt_revision_range_t *) 0 ;
+ struct svn_opt_revision_range_t *arg1 = (struct svn_opt_revision_range_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11912,9 +12872,9 @@ XS(_wrap_svn_opt_revision_range_t_end_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_revision_range_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_revision_range_t_end_get" "', argument " "1"" of type '" "svn_opt_revision_range_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_revision_range_t_end_get" "', argument " "1"" of type '" "struct svn_opt_revision_range_t *""'");
}
- arg1 = (svn_opt_revision_range_t *)(argp1);
+ arg1 = (struct svn_opt_revision_range_t *)(argp1);
result = (svn_opt_revision_t *)& ((arg1)->end);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_opt_revision_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -11929,14 +12889,14 @@ XS(_wrap_svn_opt_revision_range_t_end_get) {
XS(_wrap_new_svn_opt_revision_range_t) {
{
int argvi = 0;
- svn_opt_revision_range_t *result = 0 ;
+ struct svn_opt_revision_range_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_opt_revision_range_t();");
}
{
- result = (svn_opt_revision_range_t *)calloc(1, sizeof(svn_opt_revision_range_t));
+ result = (struct svn_opt_revision_range_t *)calloc(1, sizeof(struct svn_opt_revision_range_t));
@@ -11951,7 +12911,7 @@ XS(_wrap_new_svn_opt_revision_range_t) {
XS(_wrap_delete_svn_opt_revision_range_t) {
{
- svn_opt_revision_range_t *arg1 = (svn_opt_revision_range_t *) 0 ;
+ struct svn_opt_revision_range_t *arg1 = (struct svn_opt_revision_range_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11962,9 +12922,9 @@ XS(_wrap_delete_svn_opt_revision_range_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_opt_revision_range_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_opt_revision_range_t" "', argument " "1"" of type '" "svn_opt_revision_range_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_opt_revision_range_t" "', argument " "1"" of type '" "struct svn_opt_revision_range_t *""'");
}
- arg1 = (svn_opt_revision_range_t *)(argp1);
+ arg1 = (struct svn_opt_revision_range_t *)(argp1);
{
free((char *) arg1);
@@ -12004,102 +12964,10 @@ XS(_wrap_svn_opt_parse_revision) {
SWIG_croak("Usage: svn_opt_parse_revision(start_revision,end_revision,arg,pool);");
}
{
- arg1 = &rev1;
- if (ST(0) == NULL || ST(0) == &PL_sv_undef || !SvOK(ST(0))) {
- rev1.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(0)) && sv_derived_from(ST(0), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(0), (void **)&arg1, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(0))) {
- rev1.kind = svn_opt_revision_number;
- rev1.value.number = SvIV(ST(0));
- }
- else if (SvPOK(ST(0))) {
- char *input = SvPV_nolen(ST(0));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev1.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev1.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev1.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev1.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev1.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev1.kind = svn_opt_revision_date;
- rev1.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg1 = svn_swig_pl_set_revision(&rev1, ST(0), TRUE);
+ }
+ {
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
}
res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
if (!SWIG_IsOK(res3)) {
@@ -12210,102 +13078,10 @@ XS(_wrap_svn_opt_resolve_revisions) {
SWIG_croak("Usage: svn_opt_resolve_revisions(peg_rev,op_rev,is_url,notice_local_mods,pool);");
}
{
- arg1 = &rev1;
- if (ST(0) == NULL || ST(0) == &PL_sv_undef || !SvOK(ST(0))) {
- rev1.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(0)) && sv_derived_from(ST(0), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(0), (void **)&arg1, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(0))) {
- rev1.kind = svn_opt_revision_number;
- rev1.value.number = SvIV(ST(0));
- }
- else if (SvPOK(ST(0))) {
- char *input = SvPV_nolen(ST(0));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev1.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev1.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev1.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev1.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev1.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev1.kind = svn_opt_revision_date;
- rev1.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg1 = svn_swig_pl_set_revision(&rev1, ST(0), TRUE);
+ }
+ {
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
}
ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3);
if (!SWIG_IsOK(ecode3)) {
@@ -12786,53 +13562,7 @@ XS(_wrap_svn_opt_parse_path) {
SWIG_croak("Usage: svn_opt_parse_path(rev,path,pool);");
}
{
- arg1 = &rev1;
- if (ST(0) == NULL || ST(0) == &PL_sv_undef || !SvOK(ST(0))) {
- rev1.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(0)) && sv_derived_from(ST(0), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(0), (void **)&arg1, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(0))) {
- rev1.kind = svn_opt_revision_number;
- rev1.value.number = SvIV(ST(0));
- }
- else if (SvPOK(ST(0))) {
- char *input = SvPV_nolen(ST(0));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev1.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev1.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev1.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev1.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev1.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev1.kind = svn_opt_revision_date;
- rev1.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg1 = svn_swig_pl_set_revision(&rev1, ST(0), TRUE);
}
res3 = SWIG_AsCharPtrAndSize(ST(1), &buf3, NULL, &alloc3);
if (!SWIG_IsOK(res3)) {
@@ -12886,6 +13616,170 @@ XS(_wrap_svn_opt_parse_path) {
}
+XS(_wrap_svn_opt_print_help4) {
+ {
+ apr_getopt_t *arg1 = (apr_getopt_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ svn_boolean_t arg5 ;
+ char *arg6 = (char *) 0 ;
+ char *arg7 = (char *) 0 ;
+ svn_opt_subcommand_desc2_t *arg8 = (svn_opt_subcommand_desc2_t *) 0 ;
+ apr_getopt_option_t *arg9 = (apr_getopt_option_t *) 0 ;
+ int *arg10 = (int *) 0 ;
+ char *arg11 = (char *) 0 ;
+ apr_pool_t *arg12 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int val3 ;
+ int ecode3 = 0 ;
+ int val4 ;
+ int ecode4 = 0 ;
+ int val5 ;
+ int ecode5 = 0 ;
+ int res6 ;
+ char *buf6 = 0 ;
+ int alloc6 = 0 ;
+ int res7 ;
+ char *buf7 = 0 ;
+ int alloc7 = 0 ;
+ void *argp8 = 0 ;
+ int res8 = 0 ;
+ void *argp9 = 0 ;
+ int res9 = 0 ;
+ int temp10 ;
+ int res10 = SWIG_TMPOBJ ;
+ int res11 ;
+ char *buf11 = 0 ;
+ int alloc11 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg12 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg10 = &temp10;
+ if ((items < 10) || (items > 11)) {
+ SWIG_croak("Usage: svn_opt_print_help4(os,pgm_name,print_version,quiet,verbose,version_footer,header,cmd_table,option_table,footer,pool);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_apr_getopt_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_opt_print_help4" "', argument " "1"" of type '" "apr_getopt_t *""'");
+ }
+ arg1 = (apr_getopt_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_opt_print_help4" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3);
+ if (!SWIG_IsOK(ecode3)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "svn_opt_print_help4" "', argument " "3"" of type '" "svn_boolean_t""'");
+ }
+ arg3 = (svn_boolean_t)(val3);
+ ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_opt_print_help4" "', argument " "4"" of type '" "svn_boolean_t""'");
+ }
+ arg4 = (svn_boolean_t)(val4);
+ ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val5);
+ if (!SWIG_IsOK(ecode5)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_opt_print_help4" "', argument " "5"" of type '" "svn_boolean_t""'");
+ }
+ arg5 = (svn_boolean_t)(val5);
+ res6 = SWIG_AsCharPtrAndSize(ST(5), &buf6, NULL, &alloc6);
+ if (!SWIG_IsOK(res6)) {
+ SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_opt_print_help4" "', argument " "6"" of type '" "char const *""'");
+ }
+ arg6 = (char *)(buf6);
+ res7 = SWIG_AsCharPtrAndSize(ST(6), &buf7, NULL, &alloc7);
+ if (!SWIG_IsOK(res7)) {
+ SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_opt_print_help4" "', argument " "7"" of type '" "char const *""'");
+ }
+ arg7 = (char *)(buf7);
+ res8 = SWIG_ConvertPtr(ST(7), &argp8,SWIGTYPE_p_svn_opt_subcommand_desc2_t, 0 | 0 );
+ if (!SWIG_IsOK(res8)) {
+ SWIG_exception_fail(SWIG_ArgError(res8), "in method '" "svn_opt_print_help4" "', argument " "8"" of type '" "svn_opt_subcommand_desc2_t const *""'");
+ }
+ arg8 = (svn_opt_subcommand_desc2_t *)(argp8);
+ res9 = SWIG_ConvertPtr(ST(8), &argp9,SWIGTYPE_p_apr_getopt_option_t, 0 | 0 );
+ if (!SWIG_IsOK(res9)) {
+ SWIG_exception_fail(SWIG_ArgError(res9), "in method '" "svn_opt_print_help4" "', argument " "9"" of type '" "apr_getopt_option_t const *""'");
+ }
+ arg9 = (apr_getopt_option_t *)(argp9);
+ res11 = SWIG_AsCharPtrAndSize(ST(9), &buf11, NULL, &alloc11);
+ if (!SWIG_IsOK(res11)) {
+ SWIG_exception_fail(SWIG_ArgError(res11), "in method '" "svn_opt_print_help4" "', argument " "11"" of type '" "char const *""'");
+ }
+ arg11 = (char *)(buf11);
+ if (items > 10) {
+
+ }
+ {
+ result = (svn_error_t *)svn_opt_print_help4(arg1,(char const *)arg2,arg3,arg4,arg5,(char const *)arg6,(char const *)arg7,(struct svn_opt_subcommand_desc2_t const *)arg8,(apr_getopt_option_t const *)arg9,(int const *)arg10,(char const *)arg11,arg12);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ if (SWIG_IsTmpObj(res10)) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg10)); argvi++ ;
+ } else {
+ int new_flags = SWIG_IsNewObj(res10) ? (SWIG_POINTER_OWN | 0) : 0;
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg10), SWIGTYPE_p_int, new_flags); argvi++ ;
+ }
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+
+
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+ if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+
+
+
+ if (alloc11 == SWIG_NEWOBJ) free((char*)buf11);
+
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+
+
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+ if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+
+
+
+ if (alloc11 == SWIG_NEWOBJ) free((char*)buf11);
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_opt_print_help3) {
{
apr_getopt_t *arg1 = (apr_getopt_t *) 0 ;
@@ -13324,9 +14218,195 @@ XS(_wrap_svn_opt_print_help) {
}
+XS(_wrap_svn_cmdline_init) {
+ {
+ char *arg1 = (char *) 0 ;
+ FILE *arg2 = (FILE *) 0 ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ int argvi = 0;
+ int result;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_cmdline_init(progname,error_stream);");
+ }
+ res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_cmdline_init" "', argument " "1"" of type '" "char const *""'");
+ }
+ arg1 = (char *)(buf1);
+ {
+ arg2 = PerlIO_exportFILE (IoIFP (sv_2io (ST(1))), NULL);
+ }
+ {
+ result = (int)svn_cmdline_init((char const *)arg1,arg2);
+
+
+
+ }
+ ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+
+ XSRETURN(argvi);
+ fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_cmdline_create_auth_baton) {
+ {
+ svn_auth_baton_t **arg1 = (svn_auth_baton_t **) 0 ;
+ svn_boolean_t arg2 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+ char *arg5 = (char *) 0 ;
+ svn_boolean_t arg6 ;
+ svn_boolean_t arg7 ;
+ svn_config_t *arg8 = (svn_config_t *) 0 ;
+ svn_cancel_func_t arg9 = (svn_cancel_func_t) 0 ;
+ void *arg10 = (void *) 0 ;
+ apr_pool_t *arg11 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_auth_baton_t *temp1 ;
+ int val2 ;
+ int ecode2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ int res5 ;
+ char *buf5 = 0 ;
+ int alloc5 = 0 ;
+ int val6 ;
+ int ecode6 = 0 ;
+ int val7 ;
+ int ecode7 = 0 ;
+ void *argp8 = 0 ;
+ int res8 = 0 ;
+ int res10 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg11 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ if ((items < 9) || (items > 10)) {
+ SWIG_croak("Usage: svn_cmdline_create_auth_baton(non_interactive,username,password,config_dir,no_auth_cache,trust_server_cert,cfg,cancel_func,cancel_baton,pool);");
+ }
+ ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_cmdline_create_auth_baton" "', argument " "2"" of type '" "svn_boolean_t""'");
+ }
+ arg2 = (svn_boolean_t)(val2);
+ res3 = SWIG_AsCharPtrAndSize(ST(1), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_cmdline_create_auth_baton" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = (char *)(buf3);
+ res4 = SWIG_AsCharPtrAndSize(ST(2), &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_cmdline_create_auth_baton" "', argument " "4"" of type '" "char const *""'");
+ }
+ arg4 = (char *)(buf4);
+ res5 = SWIG_AsCharPtrAndSize(ST(3), &buf5, NULL, &alloc5);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_cmdline_create_auth_baton" "', argument " "5"" of type '" "char const *""'");
+ }
+ arg5 = (char *)(buf5);
+ ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val6);
+ if (!SWIG_IsOK(ecode6)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_cmdline_create_auth_baton" "', argument " "6"" of type '" "svn_boolean_t""'");
+ }
+ arg6 = (svn_boolean_t)(val6);
+ ecode7 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val7);
+ if (!SWIG_IsOK(ecode7)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "svn_cmdline_create_auth_baton" "', argument " "7"" of type '" "svn_boolean_t""'");
+ }
+ arg7 = (svn_boolean_t)(val7);
+ res8 = SWIG_ConvertPtr(ST(6), &argp8,SWIGTYPE_p_svn_config_t, 0 | 0 );
+ if (!SWIG_IsOK(res8)) {
+ SWIG_exception_fail(SWIG_ArgError(res8), "in method '" "svn_cmdline_create_auth_baton" "', argument " "8"" of type '" "svn_config_t *""'");
+ }
+ arg8 = (svn_config_t *)(argp8);
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(7), (void**)(&arg9), SWIGTYPE_p_f_p_void__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_cmdline_create_auth_baton" "', argument " "9"" of type '" "svn_cancel_func_t""'");
+ }
+ }
+ res10 = SWIG_ConvertPtr(ST(8),SWIG_as_voidptrptr(&arg10), 0, 0);
+ if (!SWIG_IsOK(res10)) {
+ SWIG_exception_fail(SWIG_ArgError(res10), "in method '" "svn_cmdline_create_auth_baton" "', argument " "10"" of type '" "void *""'");
+ }
+ if (items > 9) {
+
+ }
+ {
+ result = (svn_error_t *)svn_cmdline_create_auth_baton(arg1,arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,arg6,arg7,arg8,arg9,arg10,arg11);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_auth_baton_t, 0); argvi++ ;
+ }
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_auth_provider_t_cred_kind_set) {
{
- svn_auth_provider_t *arg1 = (svn_auth_provider_t *) 0 ;
+ struct svn_auth_provider_t *arg1 = (struct svn_auth_provider_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13341,9 +14421,9 @@ XS(_wrap_svn_auth_provider_t_cred_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_provider_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_provider_t_cred_kind_set" "', argument " "1"" of type '" "svn_auth_provider_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_provider_t_cred_kind_set" "', argument " "1"" of type '" "struct svn_auth_provider_t *""'");
}
- arg1 = (svn_auth_provider_t *)(argp1);
+ arg1 = (struct svn_auth_provider_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_auth_provider_t_cred_kind_set" "', argument " "2"" of type '" "char const *""'");
@@ -13371,7 +14451,7 @@ XS(_wrap_svn_auth_provider_t_cred_kind_set) {
XS(_wrap_svn_auth_provider_t_cred_kind_get) {
{
- svn_auth_provider_t *arg1 = (svn_auth_provider_t *) 0 ;
+ struct svn_auth_provider_t *arg1 = (struct svn_auth_provider_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13383,9 +14463,9 @@ XS(_wrap_svn_auth_provider_t_cred_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_provider_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_provider_t_cred_kind_get" "', argument " "1"" of type '" "svn_auth_provider_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_provider_t_cred_kind_get" "', argument " "1"" of type '" "struct svn_auth_provider_t *""'");
}
- arg1 = (svn_auth_provider_t *)(argp1);
+ arg1 = (struct svn_auth_provider_t *)(argp1);
result = (char *) ((arg1)->cred_kind);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -13399,7 +14479,7 @@ XS(_wrap_svn_auth_provider_t_cred_kind_get) {
XS(_wrap_svn_auth_provider_t_first_credentials_set) {
{
- svn_auth_provider_t *arg1 = (svn_auth_provider_t *) 0 ;
+ struct svn_auth_provider_t *arg1 = (struct svn_auth_provider_t *) 0 ;
svn_error_t *(*arg2)(void **,void **,void *,apr_hash_t *,char const *,apr_pool_t *) = (svn_error_t *(*)(void **,void **,void *,apr_hash_t *,char const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13411,9 +14491,9 @@ XS(_wrap_svn_auth_provider_t_first_credentials_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_provider_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_provider_t_first_credentials_set" "', argument " "1"" of type '" "svn_auth_provider_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_provider_t_first_credentials_set" "', argument " "1"" of type '" "struct svn_auth_provider_t *""'");
}
- arg1 = (svn_auth_provider_t *)(argp1);
+ arg1 = (struct svn_auth_provider_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -13435,7 +14515,7 @@ XS(_wrap_svn_auth_provider_t_first_credentials_set) {
XS(_wrap_svn_auth_provider_t_first_credentials_get) {
{
- svn_auth_provider_t *arg1 = (svn_auth_provider_t *) 0 ;
+ struct svn_auth_provider_t *arg1 = (struct svn_auth_provider_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13447,9 +14527,9 @@ XS(_wrap_svn_auth_provider_t_first_credentials_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_provider_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_provider_t_first_credentials_get" "', argument " "1"" of type '" "svn_auth_provider_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_provider_t_first_credentials_get" "', argument " "1"" of type '" "struct svn_auth_provider_t *""'");
}
- arg1 = (svn_auth_provider_t *)(argp1);
+ arg1 = (struct svn_auth_provider_t *)(argp1);
result = (svn_error_t *(*)(void **,void **,void *,apr_hash_t *,char const *,apr_pool_t *)) ((arg1)->first_credentials);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -13463,7 +14543,7 @@ XS(_wrap_svn_auth_provider_t_first_credentials_get) {
XS(_wrap_svn_auth_provider_t_next_credentials_set) {
{
- svn_auth_provider_t *arg1 = (svn_auth_provider_t *) 0 ;
+ struct svn_auth_provider_t *arg1 = (struct svn_auth_provider_t *) 0 ;
svn_error_t *(*arg2)(void **,void *,void *,apr_hash_t *,char const *,apr_pool_t *) = (svn_error_t *(*)(void **,void *,void *,apr_hash_t *,char const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13475,9 +14555,9 @@ XS(_wrap_svn_auth_provider_t_next_credentials_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_provider_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_provider_t_next_credentials_set" "', argument " "1"" of type '" "svn_auth_provider_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_provider_t_next_credentials_set" "', argument " "1"" of type '" "struct svn_auth_provider_t *""'");
}
- arg1 = (svn_auth_provider_t *)(argp1);
+ arg1 = (struct svn_auth_provider_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -13499,7 +14579,7 @@ XS(_wrap_svn_auth_provider_t_next_credentials_set) {
XS(_wrap_svn_auth_provider_t_next_credentials_get) {
{
- svn_auth_provider_t *arg1 = (svn_auth_provider_t *) 0 ;
+ struct svn_auth_provider_t *arg1 = (struct svn_auth_provider_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13511,9 +14591,9 @@ XS(_wrap_svn_auth_provider_t_next_credentials_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_provider_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_provider_t_next_credentials_get" "', argument " "1"" of type '" "svn_auth_provider_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_provider_t_next_credentials_get" "', argument " "1"" of type '" "struct svn_auth_provider_t *""'");
}
- arg1 = (svn_auth_provider_t *)(argp1);
+ arg1 = (struct svn_auth_provider_t *)(argp1);
result = (svn_error_t *(*)(void **,void *,void *,apr_hash_t *,char const *,apr_pool_t *)) ((arg1)->next_credentials);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -13527,7 +14607,7 @@ XS(_wrap_svn_auth_provider_t_next_credentials_get) {
XS(_wrap_svn_auth_provider_t_save_credentials_set) {
{
- svn_auth_provider_t *arg1 = (svn_auth_provider_t *) 0 ;
+ struct svn_auth_provider_t *arg1 = (struct svn_auth_provider_t *) 0 ;
svn_error_t *(*arg2)(svn_boolean_t *,void *,void *,apr_hash_t *,char const *,apr_pool_t *) = (svn_error_t *(*)(svn_boolean_t *,void *,void *,apr_hash_t *,char const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13539,9 +14619,9 @@ XS(_wrap_svn_auth_provider_t_save_credentials_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_provider_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_provider_t_save_credentials_set" "', argument " "1"" of type '" "svn_auth_provider_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_provider_t_save_credentials_set" "', argument " "1"" of type '" "struct svn_auth_provider_t *""'");
}
- arg1 = (svn_auth_provider_t *)(argp1);
+ arg1 = (struct svn_auth_provider_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -13563,7 +14643,7 @@ XS(_wrap_svn_auth_provider_t_save_credentials_set) {
XS(_wrap_svn_auth_provider_t_save_credentials_get) {
{
- svn_auth_provider_t *arg1 = (svn_auth_provider_t *) 0 ;
+ struct svn_auth_provider_t *arg1 = (struct svn_auth_provider_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13575,9 +14655,9 @@ XS(_wrap_svn_auth_provider_t_save_credentials_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_provider_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_provider_t_save_credentials_get" "', argument " "1"" of type '" "svn_auth_provider_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_provider_t_save_credentials_get" "', argument " "1"" of type '" "struct svn_auth_provider_t *""'");
}
- arg1 = (svn_auth_provider_t *)(argp1);
+ arg1 = (struct svn_auth_provider_t *)(argp1);
result = (svn_error_t *(*)(svn_boolean_t *,void *,void *,apr_hash_t *,char const *,apr_pool_t *)) ((arg1)->save_credentials);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -13592,14 +14672,14 @@ XS(_wrap_svn_auth_provider_t_save_credentials_get) {
XS(_wrap_new_svn_auth_provider_t) {
{
int argvi = 0;
- svn_auth_provider_t *result = 0 ;
+ struct svn_auth_provider_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_auth_provider_t();");
}
{
- result = (svn_auth_provider_t *)calloc(1, sizeof(svn_auth_provider_t));
+ result = (struct svn_auth_provider_t *)calloc(1, sizeof(struct svn_auth_provider_t));
@@ -13614,7 +14694,7 @@ XS(_wrap_new_svn_auth_provider_t) {
XS(_wrap_delete_svn_auth_provider_t) {
{
- svn_auth_provider_t *arg1 = (svn_auth_provider_t *) 0 ;
+ struct svn_auth_provider_t *arg1 = (struct svn_auth_provider_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13625,9 +14705,9 @@ XS(_wrap_delete_svn_auth_provider_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_provider_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_auth_provider_t" "', argument " "1"" of type '" "svn_auth_provider_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_auth_provider_t" "', argument " "1"" of type '" "struct svn_auth_provider_t *""'");
}
- arg1 = (svn_auth_provider_t *)(argp1);
+ arg1 = (struct svn_auth_provider_t *)(argp1);
{
free((char *) arg1);
@@ -13646,7 +14726,7 @@ XS(_wrap_delete_svn_auth_provider_t) {
XS(_wrap_svn_auth_provider_object_t_vtable_set) {
{
- svn_auth_provider_object_t *arg1 = (svn_auth_provider_object_t *) 0 ;
+ struct svn_auth_provider_object_t *arg1 = (struct svn_auth_provider_object_t *) 0 ;
svn_auth_provider_t *arg2 = (svn_auth_provider_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13660,9 +14740,9 @@ XS(_wrap_svn_auth_provider_object_t_vtable_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_provider_object_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_provider_object_t_vtable_set" "', argument " "1"" of type '" "svn_auth_provider_object_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_provider_object_t_vtable_set" "', argument " "1"" of type '" "struct svn_auth_provider_object_t *""'");
}
- arg1 = (svn_auth_provider_object_t *)(argp1);
+ arg1 = (struct svn_auth_provider_object_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_auth_provider_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_auth_provider_object_t_vtable_set" "', argument " "2"" of type '" "svn_auth_provider_t const *""'");
@@ -13683,7 +14763,7 @@ XS(_wrap_svn_auth_provider_object_t_vtable_set) {
XS(_wrap_svn_auth_provider_object_t_vtable_get) {
{
- svn_auth_provider_object_t *arg1 = (svn_auth_provider_object_t *) 0 ;
+ struct svn_auth_provider_object_t *arg1 = (struct svn_auth_provider_object_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13695,9 +14775,9 @@ XS(_wrap_svn_auth_provider_object_t_vtable_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_provider_object_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_provider_object_t_vtable_get" "', argument " "1"" of type '" "svn_auth_provider_object_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_provider_object_t_vtable_get" "', argument " "1"" of type '" "struct svn_auth_provider_object_t *""'");
}
- arg1 = (svn_auth_provider_object_t *)(argp1);
+ arg1 = (struct svn_auth_provider_object_t *)(argp1);
result = (svn_auth_provider_t *) ((arg1)->vtable);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_auth_provider_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -13711,7 +14791,7 @@ XS(_wrap_svn_auth_provider_object_t_vtable_get) {
XS(_wrap_svn_auth_provider_object_t_provider_baton_set) {
{
- svn_auth_provider_object_t *arg1 = (svn_auth_provider_object_t *) 0 ;
+ struct svn_auth_provider_object_t *arg1 = (struct svn_auth_provider_object_t *) 0 ;
void *arg2 = (void *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13724,9 +14804,9 @@ XS(_wrap_svn_auth_provider_object_t_provider_baton_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_provider_object_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_provider_object_t_provider_baton_set" "', argument " "1"" of type '" "svn_auth_provider_object_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_provider_object_t_provider_baton_set" "', argument " "1"" of type '" "struct svn_auth_provider_object_t *""'");
}
- arg1 = (svn_auth_provider_object_t *)(argp1);
+ arg1 = (struct svn_auth_provider_object_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg2), 0, SWIG_POINTER_DISOWN);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_auth_provider_object_t_provider_baton_set" "', argument " "2"" of type '" "void *""'");
@@ -13746,7 +14826,7 @@ XS(_wrap_svn_auth_provider_object_t_provider_baton_set) {
XS(_wrap_svn_auth_provider_object_t_provider_baton_get) {
{
- svn_auth_provider_object_t *arg1 = (svn_auth_provider_object_t *) 0 ;
+ struct svn_auth_provider_object_t *arg1 = (struct svn_auth_provider_object_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13758,9 +14838,9 @@ XS(_wrap_svn_auth_provider_object_t_provider_baton_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_provider_object_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_provider_object_t_provider_baton_get" "', argument " "1"" of type '" "svn_auth_provider_object_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_provider_object_t_provider_baton_get" "', argument " "1"" of type '" "struct svn_auth_provider_object_t *""'");
}
- arg1 = (svn_auth_provider_object_t *)(argp1);
+ arg1 = (struct svn_auth_provider_object_t *)(argp1);
result = (void *) ((arg1)->provider_baton);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 | 0); argvi++ ;
@@ -13775,14 +14855,14 @@ XS(_wrap_svn_auth_provider_object_t_provider_baton_get) {
XS(_wrap_new_svn_auth_provider_object_t) {
{
int argvi = 0;
- svn_auth_provider_object_t *result = 0 ;
+ struct svn_auth_provider_object_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_auth_provider_object_t();");
}
{
- result = (svn_auth_provider_object_t *)calloc(1, sizeof(svn_auth_provider_object_t));
+ result = (struct svn_auth_provider_object_t *)calloc(1, sizeof(struct svn_auth_provider_object_t));
@@ -13797,7 +14877,7 @@ XS(_wrap_new_svn_auth_provider_object_t) {
XS(_wrap_delete_svn_auth_provider_object_t) {
{
- svn_auth_provider_object_t *arg1 = (svn_auth_provider_object_t *) 0 ;
+ struct svn_auth_provider_object_t *arg1 = (struct svn_auth_provider_object_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13808,9 +14888,9 @@ XS(_wrap_delete_svn_auth_provider_object_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_provider_object_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_auth_provider_object_t" "', argument " "1"" of type '" "svn_auth_provider_object_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_auth_provider_object_t" "', argument " "1"" of type '" "struct svn_auth_provider_object_t *""'");
}
- arg1 = (svn_auth_provider_object_t *)(argp1);
+ arg1 = (struct svn_auth_provider_object_t *)(argp1);
{
free((char *) arg1);
@@ -13829,7 +14909,7 @@ XS(_wrap_delete_svn_auth_provider_object_t) {
XS(_wrap_svn_auth_cred_simple_t_username_set) {
{
- svn_auth_cred_simple_t *arg1 = (svn_auth_cred_simple_t *) 0 ;
+ struct svn_auth_cred_simple_t *arg1 = (struct svn_auth_cred_simple_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13844,21 +14924,19 @@ XS(_wrap_svn_auth_cred_simple_t_username_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_simple_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_simple_t_username_set" "', argument " "1"" of type '" "svn_auth_cred_simple_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_simple_t_username_set" "', argument " "1"" of type '" "struct svn_auth_cred_simple_t *""'");
}
- arg1 = (svn_auth_cred_simple_t *)(argp1);
+ arg1 = (struct svn_auth_cred_simple_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_auth_cred_simple_t_username_set" "', argument " "2"" of type '" "char const *""'");
}
arg2 = (char *)(buf2);
- {
- apr_size_t len = strlen(arg2) + 1;
- char *copied;
- if (arg1->username) free((char *)arg1->username);
- copied = malloc(len);
- memcpy(copied, arg2, len);
- arg1->username = copied;
+ if (arg2) {
+ size_t size = strlen((const char *)((const char *)(arg2))) + 1;
+ arg1->username = (char const *)(char *)memcpy((char *)malloc((size)*sizeof(char)), arg2, sizeof(char)*(size));
+ } else {
+ arg1->username = 0;
}
ST(argvi) = sv_newmortal();
@@ -13874,7 +14952,7 @@ XS(_wrap_svn_auth_cred_simple_t_username_set) {
XS(_wrap_svn_auth_cred_simple_t_username_get) {
{
- svn_auth_cred_simple_t *arg1 = (svn_auth_cred_simple_t *) 0 ;
+ struct svn_auth_cred_simple_t *arg1 = (struct svn_auth_cred_simple_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13886,9 +14964,9 @@ XS(_wrap_svn_auth_cred_simple_t_username_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_simple_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_simple_t_username_get" "', argument " "1"" of type '" "svn_auth_cred_simple_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_simple_t_username_get" "', argument " "1"" of type '" "struct svn_auth_cred_simple_t *""'");
}
- arg1 = (svn_auth_cred_simple_t *)(argp1);
+ arg1 = (struct svn_auth_cred_simple_t *)(argp1);
result = (char *) ((arg1)->username);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -13902,7 +14980,7 @@ XS(_wrap_svn_auth_cred_simple_t_username_get) {
XS(_wrap_svn_auth_cred_simple_t_password_set) {
{
- svn_auth_cred_simple_t *arg1 = (svn_auth_cred_simple_t *) 0 ;
+ struct svn_auth_cred_simple_t *arg1 = (struct svn_auth_cred_simple_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13917,21 +14995,19 @@ XS(_wrap_svn_auth_cred_simple_t_password_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_simple_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_simple_t_password_set" "', argument " "1"" of type '" "svn_auth_cred_simple_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_simple_t_password_set" "', argument " "1"" of type '" "struct svn_auth_cred_simple_t *""'");
}
- arg1 = (svn_auth_cred_simple_t *)(argp1);
+ arg1 = (struct svn_auth_cred_simple_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_auth_cred_simple_t_password_set" "', argument " "2"" of type '" "char const *""'");
}
arg2 = (char *)(buf2);
- {
- apr_size_t len = strlen(arg2) + 1;
- char *copied;
- if (arg1->password) free((char *)arg1->password);
- copied = malloc(len);
- memcpy(copied, arg2, len);
- arg1->password = copied;
+ if (arg2) {
+ size_t size = strlen((const char *)((const char *)(arg2))) + 1;
+ arg1->password = (char const *)(char *)memcpy((char *)malloc((size)*sizeof(char)), arg2, sizeof(char)*(size));
+ } else {
+ arg1->password = 0;
}
ST(argvi) = sv_newmortal();
@@ -13947,7 +15023,7 @@ XS(_wrap_svn_auth_cred_simple_t_password_set) {
XS(_wrap_svn_auth_cred_simple_t_password_get) {
{
- svn_auth_cred_simple_t *arg1 = (svn_auth_cred_simple_t *) 0 ;
+ struct svn_auth_cred_simple_t *arg1 = (struct svn_auth_cred_simple_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13959,9 +15035,9 @@ XS(_wrap_svn_auth_cred_simple_t_password_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_simple_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_simple_t_password_get" "', argument " "1"" of type '" "svn_auth_cred_simple_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_simple_t_password_get" "', argument " "1"" of type '" "struct svn_auth_cred_simple_t *""'");
}
- arg1 = (svn_auth_cred_simple_t *)(argp1);
+ arg1 = (struct svn_auth_cred_simple_t *)(argp1);
result = (char *) ((arg1)->password);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -13975,7 +15051,7 @@ XS(_wrap_svn_auth_cred_simple_t_password_get) {
XS(_wrap_svn_auth_cred_simple_t_may_save_set) {
{
- svn_auth_cred_simple_t *arg1 = (svn_auth_cred_simple_t *) 0 ;
+ struct svn_auth_cred_simple_t *arg1 = (struct svn_auth_cred_simple_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13989,9 +15065,9 @@ XS(_wrap_svn_auth_cred_simple_t_may_save_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_simple_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_simple_t_may_save_set" "', argument " "1"" of type '" "svn_auth_cred_simple_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_simple_t_may_save_set" "', argument " "1"" of type '" "struct svn_auth_cred_simple_t *""'");
}
- arg1 = (svn_auth_cred_simple_t *)(argp1);
+ arg1 = (struct svn_auth_cred_simple_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_auth_cred_simple_t_may_save_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -14012,7 +15088,7 @@ XS(_wrap_svn_auth_cred_simple_t_may_save_set) {
XS(_wrap_svn_auth_cred_simple_t_may_save_get) {
{
- svn_auth_cred_simple_t *arg1 = (svn_auth_cred_simple_t *) 0 ;
+ struct svn_auth_cred_simple_t *arg1 = (struct svn_auth_cred_simple_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14024,9 +15100,9 @@ XS(_wrap_svn_auth_cred_simple_t_may_save_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_simple_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_simple_t_may_save_get" "', argument " "1"" of type '" "svn_auth_cred_simple_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_simple_t_may_save_get" "', argument " "1"" of type '" "struct svn_auth_cred_simple_t *""'");
}
- arg1 = (svn_auth_cred_simple_t *)(argp1);
+ arg1 = (struct svn_auth_cred_simple_t *)(argp1);
result = (svn_boolean_t) ((arg1)->may_save);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -14041,14 +15117,14 @@ XS(_wrap_svn_auth_cred_simple_t_may_save_get) {
XS(_wrap_new_svn_auth_cred_simple_t) {
{
int argvi = 0;
- svn_auth_cred_simple_t *result = 0 ;
+ struct svn_auth_cred_simple_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_auth_cred_simple_t();");
}
{
- result = (svn_auth_cred_simple_t *)calloc(1, sizeof(svn_auth_cred_simple_t));
+ result = (struct svn_auth_cred_simple_t *)calloc(1, sizeof(struct svn_auth_cred_simple_t));
@@ -14063,7 +15139,7 @@ XS(_wrap_new_svn_auth_cred_simple_t) {
XS(_wrap_delete_svn_auth_cred_simple_t) {
{
- svn_auth_cred_simple_t *arg1 = (svn_auth_cred_simple_t *) 0 ;
+ struct svn_auth_cred_simple_t *arg1 = (struct svn_auth_cred_simple_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14074,9 +15150,9 @@ XS(_wrap_delete_svn_auth_cred_simple_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_simple_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_auth_cred_simple_t" "', argument " "1"" of type '" "svn_auth_cred_simple_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_auth_cred_simple_t" "', argument " "1"" of type '" "struct svn_auth_cred_simple_t *""'");
}
- arg1 = (svn_auth_cred_simple_t *)(argp1);
+ arg1 = (struct svn_auth_cred_simple_t *)(argp1);
{
free((char *) arg1);
@@ -14095,7 +15171,7 @@ XS(_wrap_delete_svn_auth_cred_simple_t) {
XS(_wrap_svn_auth_cred_username_t_username_set) {
{
- svn_auth_cred_username_t *arg1 = (svn_auth_cred_username_t *) 0 ;
+ struct svn_auth_cred_username_t *arg1 = (struct svn_auth_cred_username_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14110,21 +15186,19 @@ XS(_wrap_svn_auth_cred_username_t_username_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_username_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_username_t_username_set" "', argument " "1"" of type '" "svn_auth_cred_username_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_username_t_username_set" "', argument " "1"" of type '" "struct svn_auth_cred_username_t *""'");
}
- arg1 = (svn_auth_cred_username_t *)(argp1);
+ arg1 = (struct svn_auth_cred_username_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_auth_cred_username_t_username_set" "', argument " "2"" of type '" "char const *""'");
}
arg2 = (char *)(buf2);
- {
- apr_size_t len = strlen(arg2) + 1;
- char *copied;
- if (arg1->username) free((char *)arg1->username);
- copied = malloc(len);
- memcpy(copied, arg2, len);
- arg1->username = copied;
+ if (arg2) {
+ size_t size = strlen((const char *)((const char *)(arg2))) + 1;
+ arg1->username = (char const *)(char *)memcpy((char *)malloc((size)*sizeof(char)), arg2, sizeof(char)*(size));
+ } else {
+ arg1->username = 0;
}
ST(argvi) = sv_newmortal();
@@ -14140,7 +15214,7 @@ XS(_wrap_svn_auth_cred_username_t_username_set) {
XS(_wrap_svn_auth_cred_username_t_username_get) {
{
- svn_auth_cred_username_t *arg1 = (svn_auth_cred_username_t *) 0 ;
+ struct svn_auth_cred_username_t *arg1 = (struct svn_auth_cred_username_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14152,9 +15226,9 @@ XS(_wrap_svn_auth_cred_username_t_username_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_username_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_username_t_username_get" "', argument " "1"" of type '" "svn_auth_cred_username_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_username_t_username_get" "', argument " "1"" of type '" "struct svn_auth_cred_username_t *""'");
}
- arg1 = (svn_auth_cred_username_t *)(argp1);
+ arg1 = (struct svn_auth_cred_username_t *)(argp1);
result = (char *) ((arg1)->username);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -14168,7 +15242,7 @@ XS(_wrap_svn_auth_cred_username_t_username_get) {
XS(_wrap_svn_auth_cred_username_t_may_save_set) {
{
- svn_auth_cred_username_t *arg1 = (svn_auth_cred_username_t *) 0 ;
+ struct svn_auth_cred_username_t *arg1 = (struct svn_auth_cred_username_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14182,9 +15256,9 @@ XS(_wrap_svn_auth_cred_username_t_may_save_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_username_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_username_t_may_save_set" "', argument " "1"" of type '" "svn_auth_cred_username_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_username_t_may_save_set" "', argument " "1"" of type '" "struct svn_auth_cred_username_t *""'");
}
- arg1 = (svn_auth_cred_username_t *)(argp1);
+ arg1 = (struct svn_auth_cred_username_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_auth_cred_username_t_may_save_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -14205,7 +15279,7 @@ XS(_wrap_svn_auth_cred_username_t_may_save_set) {
XS(_wrap_svn_auth_cred_username_t_may_save_get) {
{
- svn_auth_cred_username_t *arg1 = (svn_auth_cred_username_t *) 0 ;
+ struct svn_auth_cred_username_t *arg1 = (struct svn_auth_cred_username_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14217,9 +15291,9 @@ XS(_wrap_svn_auth_cred_username_t_may_save_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_username_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_username_t_may_save_get" "', argument " "1"" of type '" "svn_auth_cred_username_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_username_t_may_save_get" "', argument " "1"" of type '" "struct svn_auth_cred_username_t *""'");
}
- arg1 = (svn_auth_cred_username_t *)(argp1);
+ arg1 = (struct svn_auth_cred_username_t *)(argp1);
result = (svn_boolean_t) ((arg1)->may_save);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -14234,14 +15308,14 @@ XS(_wrap_svn_auth_cred_username_t_may_save_get) {
XS(_wrap_new_svn_auth_cred_username_t) {
{
int argvi = 0;
- svn_auth_cred_username_t *result = 0 ;
+ struct svn_auth_cred_username_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_auth_cred_username_t();");
}
{
- result = (svn_auth_cred_username_t *)calloc(1, sizeof(svn_auth_cred_username_t));
+ result = (struct svn_auth_cred_username_t *)calloc(1, sizeof(struct svn_auth_cred_username_t));
@@ -14256,7 +15330,7 @@ XS(_wrap_new_svn_auth_cred_username_t) {
XS(_wrap_delete_svn_auth_cred_username_t) {
{
- svn_auth_cred_username_t *arg1 = (svn_auth_cred_username_t *) 0 ;
+ struct svn_auth_cred_username_t *arg1 = (struct svn_auth_cred_username_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14267,9 +15341,9 @@ XS(_wrap_delete_svn_auth_cred_username_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_username_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_auth_cred_username_t" "', argument " "1"" of type '" "svn_auth_cred_username_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_auth_cred_username_t" "', argument " "1"" of type '" "struct svn_auth_cred_username_t *""'");
}
- arg1 = (svn_auth_cred_username_t *)(argp1);
+ arg1 = (struct svn_auth_cred_username_t *)(argp1);
{
free((char *) arg1);
@@ -14288,7 +15362,7 @@ XS(_wrap_delete_svn_auth_cred_username_t) {
XS(_wrap_svn_auth_cred_ssl_client_cert_t_cert_file_set) {
{
- svn_auth_cred_ssl_client_cert_t *arg1 = (svn_auth_cred_ssl_client_cert_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_t *arg1 = (struct svn_auth_cred_ssl_client_cert_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14303,9 +15377,9 @@ XS(_wrap_svn_auth_cred_ssl_client_cert_t_cert_file_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_ssl_client_cert_t_cert_file_set" "', argument " "1"" of type '" "svn_auth_cred_ssl_client_cert_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_ssl_client_cert_t_cert_file_set" "', argument " "1"" of type '" "struct svn_auth_cred_ssl_client_cert_t *""'");
}
- arg1 = (svn_auth_cred_ssl_client_cert_t *)(argp1);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_auth_cred_ssl_client_cert_t_cert_file_set" "', argument " "2"" of type '" "char const *""'");
@@ -14333,7 +15407,7 @@ XS(_wrap_svn_auth_cred_ssl_client_cert_t_cert_file_set) {
XS(_wrap_svn_auth_cred_ssl_client_cert_t_cert_file_get) {
{
- svn_auth_cred_ssl_client_cert_t *arg1 = (svn_auth_cred_ssl_client_cert_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_t *arg1 = (struct svn_auth_cred_ssl_client_cert_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14345,9 +15419,9 @@ XS(_wrap_svn_auth_cred_ssl_client_cert_t_cert_file_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_ssl_client_cert_t_cert_file_get" "', argument " "1"" of type '" "svn_auth_cred_ssl_client_cert_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_ssl_client_cert_t_cert_file_get" "', argument " "1"" of type '" "struct svn_auth_cred_ssl_client_cert_t *""'");
}
- arg1 = (svn_auth_cred_ssl_client_cert_t *)(argp1);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_t *)(argp1);
result = (char *) ((arg1)->cert_file);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -14361,7 +15435,7 @@ XS(_wrap_svn_auth_cred_ssl_client_cert_t_cert_file_get) {
XS(_wrap_svn_auth_cred_ssl_client_cert_t_may_save_set) {
{
- svn_auth_cred_ssl_client_cert_t *arg1 = (svn_auth_cred_ssl_client_cert_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_t *arg1 = (struct svn_auth_cred_ssl_client_cert_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14375,9 +15449,9 @@ XS(_wrap_svn_auth_cred_ssl_client_cert_t_may_save_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_ssl_client_cert_t_may_save_set" "', argument " "1"" of type '" "svn_auth_cred_ssl_client_cert_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_ssl_client_cert_t_may_save_set" "', argument " "1"" of type '" "struct svn_auth_cred_ssl_client_cert_t *""'");
}
- arg1 = (svn_auth_cred_ssl_client_cert_t *)(argp1);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_auth_cred_ssl_client_cert_t_may_save_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -14398,7 +15472,7 @@ XS(_wrap_svn_auth_cred_ssl_client_cert_t_may_save_set) {
XS(_wrap_svn_auth_cred_ssl_client_cert_t_may_save_get) {
{
- svn_auth_cred_ssl_client_cert_t *arg1 = (svn_auth_cred_ssl_client_cert_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_t *arg1 = (struct svn_auth_cred_ssl_client_cert_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14410,9 +15484,9 @@ XS(_wrap_svn_auth_cred_ssl_client_cert_t_may_save_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_ssl_client_cert_t_may_save_get" "', argument " "1"" of type '" "svn_auth_cred_ssl_client_cert_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_ssl_client_cert_t_may_save_get" "', argument " "1"" of type '" "struct svn_auth_cred_ssl_client_cert_t *""'");
}
- arg1 = (svn_auth_cred_ssl_client_cert_t *)(argp1);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_t *)(argp1);
result = (svn_boolean_t) ((arg1)->may_save);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -14427,14 +15501,14 @@ XS(_wrap_svn_auth_cred_ssl_client_cert_t_may_save_get) {
XS(_wrap_new_svn_auth_cred_ssl_client_cert_t) {
{
int argvi = 0;
- svn_auth_cred_ssl_client_cert_t *result = 0 ;
+ struct svn_auth_cred_ssl_client_cert_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_auth_cred_ssl_client_cert_t();");
}
{
- result = (svn_auth_cred_ssl_client_cert_t *)calloc(1, sizeof(svn_auth_cred_ssl_client_cert_t));
+ result = (struct svn_auth_cred_ssl_client_cert_t *)calloc(1, sizeof(struct svn_auth_cred_ssl_client_cert_t));
@@ -14449,7 +15523,7 @@ XS(_wrap_new_svn_auth_cred_ssl_client_cert_t) {
XS(_wrap_delete_svn_auth_cred_ssl_client_cert_t) {
{
- svn_auth_cred_ssl_client_cert_t *arg1 = (svn_auth_cred_ssl_client_cert_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_t *arg1 = (struct svn_auth_cred_ssl_client_cert_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14460,9 +15534,9 @@ XS(_wrap_delete_svn_auth_cred_ssl_client_cert_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_auth_cred_ssl_client_cert_t" "', argument " "1"" of type '" "svn_auth_cred_ssl_client_cert_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_auth_cred_ssl_client_cert_t" "', argument " "1"" of type '" "struct svn_auth_cred_ssl_client_cert_t *""'");
}
- arg1 = (svn_auth_cred_ssl_client_cert_t *)(argp1);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_t *)(argp1);
{
free((char *) arg1);
@@ -14481,7 +15555,7 @@ XS(_wrap_delete_svn_auth_cred_ssl_client_cert_t) {
XS(_wrap_svn_auth_cred_ssl_client_cert_pw_t_password_set) {
{
- svn_auth_cred_ssl_client_cert_pw_t *arg1 = (svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_pw_t *arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14496,21 +15570,19 @@ XS(_wrap_svn_auth_cred_ssl_client_cert_pw_t_password_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_ssl_client_cert_pw_t_password_set" "', argument " "1"" of type '" "svn_auth_cred_ssl_client_cert_pw_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_ssl_client_cert_pw_t_password_set" "', argument " "1"" of type '" "struct svn_auth_cred_ssl_client_cert_pw_t *""'");
}
- arg1 = (svn_auth_cred_ssl_client_cert_pw_t *)(argp1);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_auth_cred_ssl_client_cert_pw_t_password_set" "', argument " "2"" of type '" "char const *""'");
}
arg2 = (char *)(buf2);
- {
- apr_size_t len = strlen(arg2) + 1;
- char *copied;
- if (arg1->password) free((char *)arg1->password);
- copied = malloc(len);
- memcpy(copied, arg2, len);
- arg1->password = copied;
+ if (arg2) {
+ size_t size = strlen((const char *)((const char *)(arg2))) + 1;
+ arg1->password = (char const *)(char *)memcpy((char *)malloc((size)*sizeof(char)), arg2, sizeof(char)*(size));
+ } else {
+ arg1->password = 0;
}
ST(argvi) = sv_newmortal();
@@ -14526,7 +15598,7 @@ XS(_wrap_svn_auth_cred_ssl_client_cert_pw_t_password_set) {
XS(_wrap_svn_auth_cred_ssl_client_cert_pw_t_password_get) {
{
- svn_auth_cred_ssl_client_cert_pw_t *arg1 = (svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_pw_t *arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14538,9 +15610,9 @@ XS(_wrap_svn_auth_cred_ssl_client_cert_pw_t_password_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_ssl_client_cert_pw_t_password_get" "', argument " "1"" of type '" "svn_auth_cred_ssl_client_cert_pw_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_ssl_client_cert_pw_t_password_get" "', argument " "1"" of type '" "struct svn_auth_cred_ssl_client_cert_pw_t *""'");
}
- arg1 = (svn_auth_cred_ssl_client_cert_pw_t *)(argp1);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *)(argp1);
result = (char *) ((arg1)->password);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -14554,7 +15626,7 @@ XS(_wrap_svn_auth_cred_ssl_client_cert_pw_t_password_get) {
XS(_wrap_svn_auth_cred_ssl_client_cert_pw_t_may_save_set) {
{
- svn_auth_cred_ssl_client_cert_pw_t *arg1 = (svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_pw_t *arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14568,9 +15640,9 @@ XS(_wrap_svn_auth_cred_ssl_client_cert_pw_t_may_save_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_ssl_client_cert_pw_t_may_save_set" "', argument " "1"" of type '" "svn_auth_cred_ssl_client_cert_pw_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_ssl_client_cert_pw_t_may_save_set" "', argument " "1"" of type '" "struct svn_auth_cred_ssl_client_cert_pw_t *""'");
}
- arg1 = (svn_auth_cred_ssl_client_cert_pw_t *)(argp1);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_auth_cred_ssl_client_cert_pw_t_may_save_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -14591,7 +15663,7 @@ XS(_wrap_svn_auth_cred_ssl_client_cert_pw_t_may_save_set) {
XS(_wrap_svn_auth_cred_ssl_client_cert_pw_t_may_save_get) {
{
- svn_auth_cred_ssl_client_cert_pw_t *arg1 = (svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_pw_t *arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14603,9 +15675,9 @@ XS(_wrap_svn_auth_cred_ssl_client_cert_pw_t_may_save_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_ssl_client_cert_pw_t_may_save_get" "', argument " "1"" of type '" "svn_auth_cred_ssl_client_cert_pw_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_ssl_client_cert_pw_t_may_save_get" "', argument " "1"" of type '" "struct svn_auth_cred_ssl_client_cert_pw_t *""'");
}
- arg1 = (svn_auth_cred_ssl_client_cert_pw_t *)(argp1);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *)(argp1);
result = (svn_boolean_t) ((arg1)->may_save);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -14620,14 +15692,14 @@ XS(_wrap_svn_auth_cred_ssl_client_cert_pw_t_may_save_get) {
XS(_wrap_new_svn_auth_cred_ssl_client_cert_pw_t) {
{
int argvi = 0;
- svn_auth_cred_ssl_client_cert_pw_t *result = 0 ;
+ struct svn_auth_cred_ssl_client_cert_pw_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_auth_cred_ssl_client_cert_pw_t();");
}
{
- result = (svn_auth_cred_ssl_client_cert_pw_t *)calloc(1, sizeof(svn_auth_cred_ssl_client_cert_pw_t));
+ result = (struct svn_auth_cred_ssl_client_cert_pw_t *)calloc(1, sizeof(struct svn_auth_cred_ssl_client_cert_pw_t));
@@ -14642,7 +15714,7 @@ XS(_wrap_new_svn_auth_cred_ssl_client_cert_pw_t) {
XS(_wrap_delete_svn_auth_cred_ssl_client_cert_pw_t) {
{
- svn_auth_cred_ssl_client_cert_pw_t *arg1 = (svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_pw_t *arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14653,9 +15725,9 @@ XS(_wrap_delete_svn_auth_cred_ssl_client_cert_pw_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_auth_cred_ssl_client_cert_pw_t" "', argument " "1"" of type '" "svn_auth_cred_ssl_client_cert_pw_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_auth_cred_ssl_client_cert_pw_t" "', argument " "1"" of type '" "struct svn_auth_cred_ssl_client_cert_pw_t *""'");
}
- arg1 = (svn_auth_cred_ssl_client_cert_pw_t *)(argp1);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *)(argp1);
{
free((char *) arg1);
@@ -14674,7 +15746,7 @@ XS(_wrap_delete_svn_auth_cred_ssl_client_cert_pw_t) {
XS(_wrap_svn_auth_ssl_server_cert_info_t_hostname_set) {
{
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14689,9 +15761,9 @@ XS(_wrap_svn_auth_ssl_server_cert_info_t_hostname_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_ssl_server_cert_info_t_hostname_set" "', argument " "1"" of type '" "svn_auth_ssl_server_cert_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_ssl_server_cert_info_t_hostname_set" "', argument " "1"" of type '" "struct svn_auth_ssl_server_cert_info_t *""'");
}
- arg1 = (svn_auth_ssl_server_cert_info_t *)(argp1);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_auth_ssl_server_cert_info_t_hostname_set" "', argument " "2"" of type '" "char const *""'");
@@ -14719,7 +15791,7 @@ XS(_wrap_svn_auth_ssl_server_cert_info_t_hostname_set) {
XS(_wrap_svn_auth_ssl_server_cert_info_t_hostname_get) {
{
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14731,9 +15803,9 @@ XS(_wrap_svn_auth_ssl_server_cert_info_t_hostname_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_ssl_server_cert_info_t_hostname_get" "', argument " "1"" of type '" "svn_auth_ssl_server_cert_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_ssl_server_cert_info_t_hostname_get" "', argument " "1"" of type '" "struct svn_auth_ssl_server_cert_info_t *""'");
}
- arg1 = (svn_auth_ssl_server_cert_info_t *)(argp1);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)(argp1);
result = (char *) ((arg1)->hostname);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -14747,7 +15819,7 @@ XS(_wrap_svn_auth_ssl_server_cert_info_t_hostname_get) {
XS(_wrap_svn_auth_ssl_server_cert_info_t_fingerprint_set) {
{
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14762,9 +15834,9 @@ XS(_wrap_svn_auth_ssl_server_cert_info_t_fingerprint_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_ssl_server_cert_info_t_fingerprint_set" "', argument " "1"" of type '" "svn_auth_ssl_server_cert_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_ssl_server_cert_info_t_fingerprint_set" "', argument " "1"" of type '" "struct svn_auth_ssl_server_cert_info_t *""'");
}
- arg1 = (svn_auth_ssl_server_cert_info_t *)(argp1);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_auth_ssl_server_cert_info_t_fingerprint_set" "', argument " "2"" of type '" "char const *""'");
@@ -14792,7 +15864,7 @@ XS(_wrap_svn_auth_ssl_server_cert_info_t_fingerprint_set) {
XS(_wrap_svn_auth_ssl_server_cert_info_t_fingerprint_get) {
{
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14804,9 +15876,9 @@ XS(_wrap_svn_auth_ssl_server_cert_info_t_fingerprint_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_ssl_server_cert_info_t_fingerprint_get" "', argument " "1"" of type '" "svn_auth_ssl_server_cert_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_ssl_server_cert_info_t_fingerprint_get" "', argument " "1"" of type '" "struct svn_auth_ssl_server_cert_info_t *""'");
}
- arg1 = (svn_auth_ssl_server_cert_info_t *)(argp1);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)(argp1);
result = (char *) ((arg1)->fingerprint);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -14820,7 +15892,7 @@ XS(_wrap_svn_auth_ssl_server_cert_info_t_fingerprint_get) {
XS(_wrap_svn_auth_ssl_server_cert_info_t_valid_from_set) {
{
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14835,9 +15907,9 @@ XS(_wrap_svn_auth_ssl_server_cert_info_t_valid_from_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_ssl_server_cert_info_t_valid_from_set" "', argument " "1"" of type '" "svn_auth_ssl_server_cert_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_ssl_server_cert_info_t_valid_from_set" "', argument " "1"" of type '" "struct svn_auth_ssl_server_cert_info_t *""'");
}
- arg1 = (svn_auth_ssl_server_cert_info_t *)(argp1);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_auth_ssl_server_cert_info_t_valid_from_set" "', argument " "2"" of type '" "char const *""'");
@@ -14865,7 +15937,7 @@ XS(_wrap_svn_auth_ssl_server_cert_info_t_valid_from_set) {
XS(_wrap_svn_auth_ssl_server_cert_info_t_valid_from_get) {
{
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14877,9 +15949,9 @@ XS(_wrap_svn_auth_ssl_server_cert_info_t_valid_from_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_ssl_server_cert_info_t_valid_from_get" "', argument " "1"" of type '" "svn_auth_ssl_server_cert_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_ssl_server_cert_info_t_valid_from_get" "', argument " "1"" of type '" "struct svn_auth_ssl_server_cert_info_t *""'");
}
- arg1 = (svn_auth_ssl_server_cert_info_t *)(argp1);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)(argp1);
result = (char *) ((arg1)->valid_from);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -14893,7 +15965,7 @@ XS(_wrap_svn_auth_ssl_server_cert_info_t_valid_from_get) {
XS(_wrap_svn_auth_ssl_server_cert_info_t_valid_until_set) {
{
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14908,9 +15980,9 @@ XS(_wrap_svn_auth_ssl_server_cert_info_t_valid_until_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_ssl_server_cert_info_t_valid_until_set" "', argument " "1"" of type '" "svn_auth_ssl_server_cert_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_ssl_server_cert_info_t_valid_until_set" "', argument " "1"" of type '" "struct svn_auth_ssl_server_cert_info_t *""'");
}
- arg1 = (svn_auth_ssl_server_cert_info_t *)(argp1);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_auth_ssl_server_cert_info_t_valid_until_set" "', argument " "2"" of type '" "char const *""'");
@@ -14938,7 +16010,7 @@ XS(_wrap_svn_auth_ssl_server_cert_info_t_valid_until_set) {
XS(_wrap_svn_auth_ssl_server_cert_info_t_valid_until_get) {
{
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14950,9 +16022,9 @@ XS(_wrap_svn_auth_ssl_server_cert_info_t_valid_until_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_ssl_server_cert_info_t_valid_until_get" "', argument " "1"" of type '" "svn_auth_ssl_server_cert_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_ssl_server_cert_info_t_valid_until_get" "', argument " "1"" of type '" "struct svn_auth_ssl_server_cert_info_t *""'");
}
- arg1 = (svn_auth_ssl_server_cert_info_t *)(argp1);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)(argp1);
result = (char *) ((arg1)->valid_until);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -14966,7 +16038,7 @@ XS(_wrap_svn_auth_ssl_server_cert_info_t_valid_until_get) {
XS(_wrap_svn_auth_ssl_server_cert_info_t_issuer_dname_set) {
{
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14981,9 +16053,9 @@ XS(_wrap_svn_auth_ssl_server_cert_info_t_issuer_dname_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_ssl_server_cert_info_t_issuer_dname_set" "', argument " "1"" of type '" "svn_auth_ssl_server_cert_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_ssl_server_cert_info_t_issuer_dname_set" "', argument " "1"" of type '" "struct svn_auth_ssl_server_cert_info_t *""'");
}
- arg1 = (svn_auth_ssl_server_cert_info_t *)(argp1);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_auth_ssl_server_cert_info_t_issuer_dname_set" "', argument " "2"" of type '" "char const *""'");
@@ -15011,7 +16083,7 @@ XS(_wrap_svn_auth_ssl_server_cert_info_t_issuer_dname_set) {
XS(_wrap_svn_auth_ssl_server_cert_info_t_issuer_dname_get) {
{
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -15023,9 +16095,9 @@ XS(_wrap_svn_auth_ssl_server_cert_info_t_issuer_dname_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_ssl_server_cert_info_t_issuer_dname_get" "', argument " "1"" of type '" "svn_auth_ssl_server_cert_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_ssl_server_cert_info_t_issuer_dname_get" "', argument " "1"" of type '" "struct svn_auth_ssl_server_cert_info_t *""'");
}
- arg1 = (svn_auth_ssl_server_cert_info_t *)(argp1);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)(argp1);
result = (char *) ((arg1)->issuer_dname);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -15039,7 +16111,7 @@ XS(_wrap_svn_auth_ssl_server_cert_info_t_issuer_dname_get) {
XS(_wrap_svn_auth_ssl_server_cert_info_t_ascii_cert_set) {
{
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -15054,9 +16126,9 @@ XS(_wrap_svn_auth_ssl_server_cert_info_t_ascii_cert_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_ssl_server_cert_info_t_ascii_cert_set" "', argument " "1"" of type '" "svn_auth_ssl_server_cert_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_ssl_server_cert_info_t_ascii_cert_set" "', argument " "1"" of type '" "struct svn_auth_ssl_server_cert_info_t *""'");
}
- arg1 = (svn_auth_ssl_server_cert_info_t *)(argp1);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_auth_ssl_server_cert_info_t_ascii_cert_set" "', argument " "2"" of type '" "char const *""'");
@@ -15084,7 +16156,7 @@ XS(_wrap_svn_auth_ssl_server_cert_info_t_ascii_cert_set) {
XS(_wrap_svn_auth_ssl_server_cert_info_t_ascii_cert_get) {
{
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -15096,9 +16168,9 @@ XS(_wrap_svn_auth_ssl_server_cert_info_t_ascii_cert_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_ssl_server_cert_info_t_ascii_cert_get" "', argument " "1"" of type '" "svn_auth_ssl_server_cert_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_ssl_server_cert_info_t_ascii_cert_get" "', argument " "1"" of type '" "struct svn_auth_ssl_server_cert_info_t *""'");
}
- arg1 = (svn_auth_ssl_server_cert_info_t *)(argp1);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)(argp1);
result = (char *) ((arg1)->ascii_cert);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -15113,14 +16185,14 @@ XS(_wrap_svn_auth_ssl_server_cert_info_t_ascii_cert_get) {
XS(_wrap_new_svn_auth_ssl_server_cert_info_t) {
{
int argvi = 0;
- svn_auth_ssl_server_cert_info_t *result = 0 ;
+ struct svn_auth_ssl_server_cert_info_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_auth_ssl_server_cert_info_t();");
}
{
- result = (svn_auth_ssl_server_cert_info_t *)calloc(1, sizeof(svn_auth_ssl_server_cert_info_t));
+ result = (struct svn_auth_ssl_server_cert_info_t *)calloc(1, sizeof(struct svn_auth_ssl_server_cert_info_t));
@@ -15135,7 +16207,7 @@ XS(_wrap_new_svn_auth_ssl_server_cert_info_t) {
XS(_wrap_delete_svn_auth_ssl_server_cert_info_t) {
{
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -15146,9 +16218,9 @@ XS(_wrap_delete_svn_auth_ssl_server_cert_info_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_auth_ssl_server_cert_info_t" "', argument " "1"" of type '" "svn_auth_ssl_server_cert_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_auth_ssl_server_cert_info_t" "', argument " "1"" of type '" "struct svn_auth_ssl_server_cert_info_t *""'");
}
- arg1 = (svn_auth_ssl_server_cert_info_t *)(argp1);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)(argp1);
{
free((char *) arg1);
@@ -15210,7 +16282,7 @@ XS(_wrap_svn_auth_ssl_server_cert_info_dup) {
XS(_wrap_svn_auth_cred_ssl_server_trust_t_may_save_set) {
{
- svn_auth_cred_ssl_server_trust_t *arg1 = (svn_auth_cred_ssl_server_trust_t *) 0 ;
+ struct svn_auth_cred_ssl_server_trust_t *arg1 = (struct svn_auth_cred_ssl_server_trust_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -15224,9 +16296,9 @@ XS(_wrap_svn_auth_cred_ssl_server_trust_t_may_save_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_ssl_server_trust_t_may_save_set" "', argument " "1"" of type '" "svn_auth_cred_ssl_server_trust_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_ssl_server_trust_t_may_save_set" "', argument " "1"" of type '" "struct svn_auth_cred_ssl_server_trust_t *""'");
}
- arg1 = (svn_auth_cred_ssl_server_trust_t *)(argp1);
+ arg1 = (struct svn_auth_cred_ssl_server_trust_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_auth_cred_ssl_server_trust_t_may_save_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -15247,7 +16319,7 @@ XS(_wrap_svn_auth_cred_ssl_server_trust_t_may_save_set) {
XS(_wrap_svn_auth_cred_ssl_server_trust_t_may_save_get) {
{
- svn_auth_cred_ssl_server_trust_t *arg1 = (svn_auth_cred_ssl_server_trust_t *) 0 ;
+ struct svn_auth_cred_ssl_server_trust_t *arg1 = (struct svn_auth_cred_ssl_server_trust_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -15259,9 +16331,9 @@ XS(_wrap_svn_auth_cred_ssl_server_trust_t_may_save_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_ssl_server_trust_t_may_save_get" "', argument " "1"" of type '" "svn_auth_cred_ssl_server_trust_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_ssl_server_trust_t_may_save_get" "', argument " "1"" of type '" "struct svn_auth_cred_ssl_server_trust_t *""'");
}
- arg1 = (svn_auth_cred_ssl_server_trust_t *)(argp1);
+ arg1 = (struct svn_auth_cred_ssl_server_trust_t *)(argp1);
result = (svn_boolean_t) ((arg1)->may_save);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -15275,7 +16347,7 @@ XS(_wrap_svn_auth_cred_ssl_server_trust_t_may_save_get) {
XS(_wrap_svn_auth_cred_ssl_server_trust_t_accepted_failures_set) {
{
- svn_auth_cred_ssl_server_trust_t *arg1 = (svn_auth_cred_ssl_server_trust_t *) 0 ;
+ struct svn_auth_cred_ssl_server_trust_t *arg1 = (struct svn_auth_cred_ssl_server_trust_t *) 0 ;
apr_uint32_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -15289,9 +16361,9 @@ XS(_wrap_svn_auth_cred_ssl_server_trust_t_accepted_failures_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_ssl_server_trust_t_accepted_failures_set" "', argument " "1"" of type '" "svn_auth_cred_ssl_server_trust_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_ssl_server_trust_t_accepted_failures_set" "', argument " "1"" of type '" "struct svn_auth_cred_ssl_server_trust_t *""'");
}
- arg1 = (svn_auth_cred_ssl_server_trust_t *)(argp1);
+ arg1 = (struct svn_auth_cred_ssl_server_trust_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_auth_cred_ssl_server_trust_t_accepted_failures_set" "', argument " "2"" of type '" "apr_uint32_t""'");
@@ -15312,7 +16384,7 @@ XS(_wrap_svn_auth_cred_ssl_server_trust_t_accepted_failures_set) {
XS(_wrap_svn_auth_cred_ssl_server_trust_t_accepted_failures_get) {
{
- svn_auth_cred_ssl_server_trust_t *arg1 = (svn_auth_cred_ssl_server_trust_t *) 0 ;
+ struct svn_auth_cred_ssl_server_trust_t *arg1 = (struct svn_auth_cred_ssl_server_trust_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -15324,9 +16396,9 @@ XS(_wrap_svn_auth_cred_ssl_server_trust_t_accepted_failures_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_ssl_server_trust_t_accepted_failures_get" "', argument " "1"" of type '" "svn_auth_cred_ssl_server_trust_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_cred_ssl_server_trust_t_accepted_failures_get" "', argument " "1"" of type '" "struct svn_auth_cred_ssl_server_trust_t *""'");
}
- arg1 = (svn_auth_cred_ssl_server_trust_t *)(argp1);
+ arg1 = (struct svn_auth_cred_ssl_server_trust_t *)(argp1);
result = ((arg1)->accepted_failures);
ST(argvi) = SWIG_From_unsigned_SS_long SWIG_PERL_CALL_ARGS_1((unsigned long)(result)); argvi++ ;
@@ -15341,14 +16413,14 @@ XS(_wrap_svn_auth_cred_ssl_server_trust_t_accepted_failures_get) {
XS(_wrap_new_svn_auth_cred_ssl_server_trust_t) {
{
int argvi = 0;
- svn_auth_cred_ssl_server_trust_t *result = 0 ;
+ struct svn_auth_cred_ssl_server_trust_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_auth_cred_ssl_server_trust_t();");
}
{
- result = (svn_auth_cred_ssl_server_trust_t *)calloc(1, sizeof(svn_auth_cred_ssl_server_trust_t));
+ result = (struct svn_auth_cred_ssl_server_trust_t *)calloc(1, sizeof(struct svn_auth_cred_ssl_server_trust_t));
@@ -15363,7 +16435,7 @@ XS(_wrap_new_svn_auth_cred_ssl_server_trust_t) {
XS(_wrap_delete_svn_auth_cred_ssl_server_trust_t) {
{
- svn_auth_cred_ssl_server_trust_t *arg1 = (svn_auth_cred_ssl_server_trust_t *) 0 ;
+ struct svn_auth_cred_ssl_server_trust_t *arg1 = (struct svn_auth_cred_ssl_server_trust_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -15374,9 +16446,9 @@ XS(_wrap_delete_svn_auth_cred_ssl_server_trust_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_auth_cred_ssl_server_trust_t" "', argument " "1"" of type '" "svn_auth_cred_ssl_server_trust_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_auth_cred_ssl_server_trust_t" "', argument " "1"" of type '" "struct svn_auth_cred_ssl_server_trust_t *""'");
}
- arg1 = (svn_auth_cred_ssl_server_trust_t *)(argp1);
+ arg1 = (struct svn_auth_cred_ssl_server_trust_t *)(argp1);
{
free((char *) arg1);
@@ -15711,6 +16783,86 @@ XS(_wrap_svn_auth_save_credentials) {
}
+XS(_wrap_svn_auth_forget_credentials) {
+ {
+ svn_auth_baton_t *arg1 = (svn_auth_baton_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg4 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 3) || (items > 4)) {
+ SWIG_croak("Usage: svn_auth_forget_credentials(auth_baton,cred_kind,realmstring,pool);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_baton_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_forget_credentials" "', argument " "1"" of type '" "svn_auth_baton_t *""'");
+ }
+ arg1 = (svn_auth_baton_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_auth_forget_credentials" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_auth_forget_credentials" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = (char *)(buf3);
+ if (items > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_auth_forget_credentials(arg1,(char const *)arg2,(char const *)arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_auth_get_simple_prompt_provider) {
{
svn_auth_provider_object_t **arg1 = (svn_auth_provider_object_t **) 0 ;
@@ -16067,7 +17219,7 @@ XS(_wrap_svn_auth_get_platform_specific_client_providers) {
}
}
{
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,59,%append_output@*/ if (argvi >= items) EXTEND(sp,1); /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,56,%set_output@*/ ST(argvi) = svn_swig_pl_convert_array(*arg1,
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,59,%append_output@*/ if (argvi >= items) EXTEND(sp,1); /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,56,%set_output@*/ ST(argvi) = svn_swig_pl_convert_array(*arg1,
SWIGTYPE_p_svn_auth_provider_object_t); argvi++ /*@SWIG@*/
/*@SWIG@*/
;
@@ -17639,6 +18791,82 @@ XS(_wrap_svn_config_get_config) {
}
+XS(_wrap_svn_config_create2) {
+ {
+ svn_config_t **arg1 = (svn_config_t **) 0 ;
+ svn_boolean_t arg2 ;
+ svn_boolean_t arg3 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_config_t *temp1 ;
+ int val2 ;
+ int ecode2 = 0 ;
+ int val3 ;
+ int ecode3 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg4 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ if ((items < 2) || (items > 3)) {
+ SWIG_croak("Usage: svn_config_create2(section_names_case_sensitive,option_names_case_sensitive,result_pool);");
+ }
+ ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_config_create2" "', argument " "2"" of type '" "svn_boolean_t""'");
+ }
+ arg2 = (svn_boolean_t)(val2);
+ ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val3);
+ if (!SWIG_IsOK(ecode3)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "svn_config_create2" "', argument " "3"" of type '" "svn_boolean_t""'");
+ }
+ arg3 = (svn_boolean_t)(val3);
+ if (items > 2) {
+
+ }
+ {
+ result = (svn_error_t *)svn_config_create2(arg1,arg2,arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_config_t, 0); argvi++ ;
+ }
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_config_create) {
{
svn_config_t **arg1 = (svn_config_t **) 0 ;
@@ -17705,6 +18933,103 @@ XS(_wrap_svn_config_create) {
}
+XS(_wrap_svn_config_read3) {
+ {
+ svn_config_t **arg1 = (svn_config_t **) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ svn_boolean_t arg5 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_config_t *temp1 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int val3 ;
+ int ecode3 = 0 ;
+ int val4 ;
+ int ecode4 = 0 ;
+ int val5 ;
+ int ecode5 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg6 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ if ((items < 4) || (items > 5)) {
+ SWIG_croak("Usage: svn_config_read3(file,must_exist,section_names_case_sensitive,option_names_case_sensitive,result_pool);");
+ }
+ res2 = SWIG_AsCharPtrAndSize(ST(0), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_config_read3" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val3);
+ if (!SWIG_IsOK(ecode3)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "svn_config_read3" "', argument " "3"" of type '" "svn_boolean_t""'");
+ }
+ arg3 = (svn_boolean_t)(val3);
+ ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_config_read3" "', argument " "4"" of type '" "svn_boolean_t""'");
+ }
+ arg4 = (svn_boolean_t)(val4);
+ ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val5);
+ if (!SWIG_IsOK(ecode5)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_config_read3" "', argument " "5"" of type '" "svn_boolean_t""'");
+ }
+ arg5 = (svn_boolean_t)(val5);
+ if (items > 4) {
+
+ }
+ {
+ result = (svn_error_t *)svn_config_read3(arg1,(char const *)arg2,arg3,arg4,arg5,arg6);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_config_t, 0); argvi++ ;
+ }
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_config_read2) {
{
svn_config_t **arg1 = (svn_config_t **) 0 ;
@@ -17730,7 +19055,7 @@ XS(_wrap_svn_config_read2) {
}
arg1 = &temp1;
if ((items < 3) || (items > 4)) {
- SWIG_croak("Usage: svn_config_read2(file,must_exist,section_names_case_sensitive,pool);");
+ SWIG_croak("Usage: svn_config_read2(file,must_exist,section_names_case_sensitive,result_pool);");
}
res2 = SWIG_AsCharPtrAndSize(ST(0), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
@@ -17814,7 +19139,7 @@ XS(_wrap_svn_config_read) {
}
arg1 = &temp1;
if ((items < 2) || (items > 3)) {
- SWIG_croak("Usage: svn_config_read(file,must_exist,pool);");
+ SWIG_croak("Usage: svn_config_read(file,must_exist,result_pool);");
}
res2 = SWIG_AsCharPtrAndSize(ST(0), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
@@ -17869,6 +19194,88 @@ XS(_wrap_svn_config_read) {
}
+XS(_wrap_svn_config_parse) {
+ {
+ svn_config_t **arg1 = (svn_config_t **) 0 ;
+ svn_stream_t *arg2 = (svn_stream_t *) 0 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_config_t *temp1 ;
+ int val3 ;
+ int ecode3 = 0 ;
+ int val4 ;
+ int ecode4 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg5 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ if ((items < 3) || (items > 4)) {
+ SWIG_croak("Usage: svn_config_parse(stream,section_names_case_sensitive,option_names_case_sensitive,result_pool);");
+ }
+ {
+ svn_swig_pl_make_stream (&arg2, ST(0));
+ }
+ ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val3);
+ if (!SWIG_IsOK(ecode3)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "svn_config_parse" "', argument " "3"" of type '" "svn_boolean_t""'");
+ }
+ arg3 = (svn_boolean_t)(val3);
+ ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_config_parse" "', argument " "4"" of type '" "svn_boolean_t""'");
+ }
+ arg4 = (svn_boolean_t)(val4);
+ if (items > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_config_parse(arg1,arg2,arg3,arg4,arg5);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_config_t, 0); argvi++ ;
+ }
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_config_merge) {
{
svn_config_t *arg1 = (svn_config_t *) 0 ;
@@ -18236,6 +19643,160 @@ XS(_wrap_svn_config_set_bool) {
}
+XS(_wrap_svn_config_get_int64) {
+ {
+ svn_config_t *arg1 = (svn_config_t *) 0 ;
+ apr_int64_t *arg2 = (apr_int64_t *) 0 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+ apr_int64_t arg5 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ apr_int64_t temp2 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ long long val5 ;
+ int ecode5 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ arg2 = &temp2;
+ if ((items < 4) || (items > 4)) {
+ SWIG_croak("Usage: svn_config_get_int64(cfg,section,option,default_value);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_config_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_config_get_int64" "', argument " "1"" of type '" "svn_config_t *""'");
+ }
+ arg1 = (svn_config_t *)(argp1);
+ res3 = SWIG_AsCharPtrAndSize(ST(1), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_config_get_int64" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = (char *)(buf3);
+ res4 = SWIG_AsCharPtrAndSize(ST(2), &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_config_get_int64" "', argument " "4"" of type '" "char const *""'");
+ }
+ arg4 = (char *)(buf4);
+ ecode5 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(3), &val5);
+ if (!SWIG_IsOK(ecode5)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_config_get_int64" "', argument " "5"" of type '" "apr_int64_t""'");
+ }
+ arg5 = (apr_int64_t)(val5);
+ {
+ result = (svn_error_t *)svn_config_get_int64(arg1,arg2,(char const *)arg3,(char const *)arg4,arg5);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ char temp[256];
+ sprintf(temp, "%" APR_INT64_T_FMT, (apr_int64_t)*(arg2));
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = sv_2mortal(newSVpv(temp, 0)); argvi++ ;
+ }
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+
+ XSRETURN(argvi);
+ fail:
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_config_set_int64) {
+ {
+ svn_config_t *arg1 = (svn_config_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ apr_int64_t arg4 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ long long val4 ;
+ int ecode4 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 4) || (items > 4)) {
+ SWIG_croak("Usage: svn_config_set_int64(cfg,section,option,value);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_config_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_config_set_int64" "', argument " "1"" of type '" "svn_config_t *""'");
+ }
+ arg1 = (svn_config_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_config_set_int64" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_config_set_int64" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = (char *)(buf3);
+ ecode4 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(3), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_config_set_int64" "', argument " "4"" of type '" "apr_int64_t""'");
+ }
+ arg4 = (apr_int64_t)(val4);
+ {
+ svn_config_set_int64(arg1,(char const *)arg2,(char const *)arg3,arg4);
+
+
+
+ }
+ ST(argvi) = sv_newmortal();
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_config_get_yes_no_ask) {
{
svn_config_t *arg1 = (svn_config_t *) 0 ;
@@ -18329,6 +19890,107 @@ XS(_wrap_svn_config_get_yes_no_ask) {
}
+XS(_wrap_svn_config_get_tristate) {
+ {
+ svn_config_t *arg1 = (svn_config_t *) 0 ;
+ svn_tristate_t *arg2 = (svn_tristate_t *) 0 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+ char *arg5 = (char *) 0 ;
+ svn_tristate_t arg6 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ int res5 ;
+ char *buf5 = 0 ;
+ int alloc5 = 0 ;
+ int val6 ;
+ int ecode6 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ if ((items < 6) || (items > 6)) {
+ SWIG_croak("Usage: svn_config_get_tristate(cfg,valuep,section,option,unknown_value,default_value);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_config_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_config_get_tristate" "', argument " "1"" of type '" "svn_config_t *""'");
+ }
+ arg1 = (svn_config_t *)(argp1);
+ res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_tristate_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_config_get_tristate" "', argument " "2"" of type '" "svn_tristate_t *""'");
+ }
+ arg2 = (svn_tristate_t *)(argp2);
+ res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_config_get_tristate" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = (char *)(buf3);
+ res4 = SWIG_AsCharPtrAndSize(ST(3), &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_config_get_tristate" "', argument " "4"" of type '" "char const *""'");
+ }
+ arg4 = (char *)(buf4);
+ res5 = SWIG_AsCharPtrAndSize(ST(4), &buf5, NULL, &alloc5);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_config_get_tristate" "', argument " "5"" of type '" "char const *""'");
+ }
+ arg5 = (char *)(buf5);
+ ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val6);
+ if (!SWIG_IsOK(ecode6)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_config_get_tristate" "', argument " "6"" of type '" "svn_tristate_t""'");
+ }
+ arg6 = (svn_tristate_t)(val6);
+ {
+ result = (svn_error_t *)svn_config_get_tristate(arg1,arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,arg6);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+
+ XSRETURN(argvi);
+ fail:
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_config_enumerate_sections) {
{
svn_config_t *arg1 = (svn_config_t *) 0 ;
@@ -19083,8 +20745,6 @@ XS(_wrap_svn_config_write_auth_data) {
char *arg4 = (char *) 0 ;
apr_pool_t *arg5 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool ;
- void *argp1 = 0 ;
- int res1 = 0 ;
int res2 ;
char *buf2 = 0 ;
int alloc2 = 0 ;
@@ -19104,11 +20764,11 @@ XS(_wrap_svn_config_write_auth_data) {
if ((items < 4) || (items > 5)) {
SWIG_croak("Usage: svn_config_write_auth_data(hash,cred_kind,realmstring,config_dir,pool);");
}
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_apr_hash_t, 0 | 0 );
- if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_config_write_auth_data" "', argument " "1"" of type '" "apr_hash_t *""'");
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg1 = svn_swig_pl_hash_to_prophash(ST(0), _global_pool);
}
- arg1 = (apr_hash_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_config_write_auth_data" "', argument " "2"" of type '" "char const *""'");
@@ -19166,6 +20826,82 @@ XS(_wrap_svn_config_write_auth_data) {
}
+XS(_wrap_svn_config_walk_auth_data) {
+ {
+ char *arg1 = (char *) 0 ;
+ svn_config_auth_walk_func_t arg2 = (svn_config_auth_walk_func_t) 0 ;
+ void *arg3 = (void *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ int res3 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg4 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 3) || (items > 4)) {
+ SWIG_croak("Usage: svn_config_walk_auth_data(config_dir,walk_func,walk_baton,scratch_pool);");
+ }
+ res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_config_walk_auth_data" "', argument " "1"" of type '" "char const *""'");
+ }
+ arg1 = (char *)(buf1);
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_config_walk_auth_data" "', argument " "2"" of type '" "svn_config_auth_walk_func_t""'");
+ }
+ }
+ res3 = SWIG_ConvertPtr(ST(2),SWIG_as_voidptrptr(&arg3), 0, 0);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_config_walk_auth_data" "', argument " "3"" of type '" "void *""'");
+ }
+ if (items > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_config_walk_auth_data((char const *)arg1,arg2,arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+
+
+
+ XSRETURN(argvi);
+ fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_config_get_user_config_path) {
{
char **arg1 = (char **) 0 ;
@@ -19248,6 +20984,138 @@ XS(_wrap_svn_config_get_user_config_path) {
}
+XS(_wrap_svn_config_dup) {
+ {
+ svn_config_t **arg1 = (svn_config_t **) 0 ;
+ svn_config_t *arg2 = (svn_config_t *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_config_t *temp1 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg3 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ if ((items < 1) || (items > 2)) {
+ SWIG_croak("Usage: svn_config_dup(src,pool);");
+ }
+ res2 = SWIG_ConvertPtr(ST(0), &argp2,SWIGTYPE_p_svn_config_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_config_dup" "', argument " "2"" of type '" "svn_config_t *""'");
+ }
+ arg2 = (svn_config_t *)(argp2);
+ if (items > 1) {
+
+ }
+ {
+ result = (svn_error_t *)svn_config_dup(arg1,arg2,arg3);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_config_t, 0); argvi++ ;
+ }
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_config_copy_config) {
+ {
+ apr_hash_t **arg1 = (apr_hash_t **) 0 ;
+ apr_hash_t *arg2 = (apr_hash_t *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ apr_hash_t *temp1 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg3 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ if ((items < 1) || (items > 2)) {
+ SWIG_croak("Usage: svn_config_copy_config(src_hash,pool);");
+ }
+ res2 = SWIG_ConvertPtr(ST(0), &argp2,SWIGTYPE_p_apr_hash_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_config_copy_config" "', argument " "2"" of type '" "apr_hash_t *""'");
+ }
+ arg2 = (apr_hash_t *)(argp2);
+ if (items > 1) {
+
+ }
+ {
+ result = (svn_error_t *)svn_config_copy_config(arg1,arg2,arg3);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = svn_swig_pl_convert_hash(*arg1, SWIGTYPE_p_svn_config_t); argvi++ ;
+ }
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_config_invoke_section_enumerator) {
{
svn_config_section_enumerator_t arg1 = (svn_config_section_enumerator_t) 0 ;
@@ -19494,6 +21362,155 @@ XS(_wrap_svn_config_invoke_enumerator2) {
}
+XS(_wrap_svn_config_invoke_auth_walk_func) {
+ {
+ svn_config_auth_walk_func_t arg1 = (svn_config_auth_walk_func_t) 0 ;
+ svn_boolean_t *arg2 = (svn_boolean_t *) 0 ;
+ void *arg3 = (void *) 0 ;
+ char *arg4 = (char *) 0 ;
+ char *arg5 = (char *) 0 ;
+ apr_hash_t *arg6 = (apr_hash_t *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_boolean_t temp2 ;
+ int res2 = SWIG_TMPOBJ ;
+ int res3 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ int res5 ;
+ char *buf5 = 0 ;
+ int alloc5 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg7 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg2 = &temp2;
+ if ((items < 5) || (items > 6)) {
+ SWIG_croak("Usage: svn_config_invoke_auth_walk_func(_obj,cleanup_baton,cred_kind,realmstring,hash,scratch_pool);");
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(0), (void**)(&arg1), SWIGTYPE_p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_config_invoke_auth_walk_func" "', argument " "1"" of type '" "svn_config_auth_walk_func_t""'");
+ }
+ }
+ res3 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg3), 0, 0);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_config_invoke_auth_walk_func" "', argument " "3"" of type '" "void *""'");
+ }
+ res4 = SWIG_AsCharPtrAndSize(ST(2), &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_config_invoke_auth_walk_func" "', argument " "4"" of type '" "char const *""'");
+ }
+ arg4 = (char *)(buf4);
+ res5 = SWIG_AsCharPtrAndSize(ST(3), &buf5, NULL, &alloc5);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_config_invoke_auth_walk_func" "', argument " "5"" of type '" "char const *""'");
+ }
+ arg5 = (char *)(buf5);
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg6 = svn_swig_pl_hash_to_prophash(ST(4), _global_pool);
+ }
+ if (items > 5) {
+
+ }
+ {
+ result = (svn_error_t *)svn_config_invoke_auth_walk_func(arg1,arg2,arg3,(char const *)arg4,(char const *)arg5,arg6,arg7);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ if (SWIG_IsTmpObj(res2)) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg2)); argvi++ ;
+ } else {
+ int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0) : 0;
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags); argvi++ ;
+ }
+
+
+
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_utf_initialize2) {
+ {
+ svn_boolean_t arg1 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int val1 ;
+ int ecode1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ {
+ _global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 1) || (items > 2)) {
+ SWIG_croak("Usage: svn_utf_initialize2(assume_native_utf8,pool);");
+ }
+ ecode1 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1);
+ if (!SWIG_IsOK(ecode1)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "svn_utf_initialize2" "', argument " "1"" of type '" "svn_boolean_t""'");
+ }
+ arg1 = (svn_boolean_t)(val1);
+ if (items > 1) {
+
+ }
+ {
+ svn_utf_initialize2(arg1,arg2);
+
+
+
+ }
+ ST(argvi) = sv_newmortal();
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_utf_initialize) {
{
apr_pool_t *arg1 = (apr_pool_t *) 0 ;
@@ -20518,6 +22535,40 @@ XS(_wrap_svn_utf_cstring_from_utf8_string) {
}
+XS(_wrap_svn_utf_cstring_utf8_width) {
+ {
+ char *arg1 = (char *) 0 ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ int argvi = 0;
+ int result;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_utf_cstring_utf8_width(cstr);");
+ }
+ res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_utf_cstring_utf8_width" "', argument " "1"" of type '" "char const *""'");
+ }
+ arg1 = (char *)(buf1);
+ {
+ result = (int)svn_utf_cstring_utf8_width((char const *)arg1);
+
+
+
+ }
+ ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ XSRETURN(argvi);
+ fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_nls_init) {
{
int argvi = 0;
@@ -21134,6 +23185,166 @@ XS(_wrap_svn_path_url_add_component2) {
}
+XS(_wrap_svn_path_is_repos_relative_url) {
+ {
+ char *arg1 = (char *) 0 ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ int argvi = 0;
+ svn_boolean_t result;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_path_is_repos_relative_url(path);");
+ }
+ res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_path_is_repos_relative_url" "', argument " "1"" of type '" "char const *""'");
+ }
+ arg1 = (char *)(buf1);
+ {
+ result = (svn_boolean_t)svn_path_is_repos_relative_url((char const *)arg1);
+
+
+
+ }
+ ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ XSRETURN(argvi);
+ fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_path_resolve_repos_relative_url) {
+ {
+ char **arg1 = (char **) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ char *temp1 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg4 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ if ((items < 2) || (items > 3)) {
+ SWIG_croak("Usage: svn_path_resolve_repos_relative_url(relative_url,repos_root_url,pool);");
+ }
+ res2 = SWIG_AsCharPtrAndSize(ST(0), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_path_resolve_repos_relative_url" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ res3 = SWIG_AsCharPtrAndSize(ST(1), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_path_resolve_repos_relative_url" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = (char *)(buf3);
+ if (items > 2) {
+
+ }
+ {
+ result = (svn_error_t *)svn_path_resolve_repos_relative_url((char const **)arg1,(char const *)arg2,(char const *)arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ if (*arg1 == NULL) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = &PL_sv_undef; argvi++ ;
+ } else {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = sv_2mortal(newSVpv(*arg1, 0)); argvi++ ;
+ }
+ }
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_path_illegal_path_escape) {
+ {
+ char *arg1 = (char *) 0 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ int argvi = 0;
+ char *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 1) || (items > 2)) {
+ SWIG_croak("Usage: svn_path_illegal_path_escape(path,pool);");
+ }
+ res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_path_illegal_path_escape" "', argument " "1"" of type '" "char const *""'");
+ }
+ arg1 = (char *)(buf1);
+ if (items > 1) {
+
+ }
+ {
+ result = (char *)svn_path_illegal_path_escape((char const *)arg1,arg2);
+
+
+
+ }
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+
+ XSRETURN(argvi);
+ fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_dirent_internal_style) {
{
char *arg1 = (char *) 0 ;
@@ -21150,7 +23361,7 @@ XS(_wrap_svn_dirent_internal_style) {
_global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
}
if ((items < 1) || (items > 2)) {
- SWIG_croak("Usage: svn_dirent_internal_style(dirent,pool);");
+ SWIG_croak("Usage: svn_dirent_internal_style(dirent,result_pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
@@ -21194,7 +23405,7 @@ XS(_wrap_svn_dirent_local_style) {
_global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
}
if ((items < 1) || (items > 2)) {
- SWIG_croak("Usage: svn_dirent_local_style(dirent,pool);");
+ SWIG_croak("Usage: svn_dirent_local_style(dirent,result_pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
@@ -21238,7 +23449,7 @@ XS(_wrap_svn_relpath__internal_style) {
_global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
}
if ((items < 1) || (items > 2)) {
- SWIG_croak("Usage: svn_relpath__internal_style(relpath,pool);");
+ SWIG_croak("Usage: svn_relpath__internal_style(relpath,result_pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
@@ -21286,7 +23497,7 @@ XS(_wrap_svn_dirent_join) {
_global_pool = arg3 = svn_swig_pl_make_pool (ST(items-1));
}
if ((items < 2) || (items > 3)) {
- SWIG_croak("Usage: svn_dirent_join(base,component,pool);");
+ SWIG_croak("Usage: svn_dirent_join(base,component,result_pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
@@ -21341,7 +23552,7 @@ XS(_wrap_svn_relpath_join) {
_global_pool = arg3 = svn_swig_pl_make_pool (ST(items-1));
}
if ((items < 2) || (items > 3)) {
- SWIG_croak("Usage: svn_relpath_join(base,component,pool);");
+ SWIG_croak("Usage: svn_relpath_join(base,component,result_pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
@@ -21392,7 +23603,7 @@ XS(_wrap_svn_dirent_basename) {
_global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
}
if ((items < 1) || (items > 2)) {
- SWIG_croak("Usage: svn_dirent_basename(dirent,pool);");
+ SWIG_croak("Usage: svn_dirent_basename(dirent,result_pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
@@ -21436,7 +23647,7 @@ XS(_wrap_svn_dirent_dirname) {
_global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
}
if ((items < 1) || (items > 2)) {
- SWIG_croak("Usage: svn_dirent_dirname(dirent,pool);");
+ SWIG_croak("Usage: svn_dirent_dirname(dirent,result_pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
@@ -21485,7 +23696,7 @@ XS(_wrap_svn_dirent_split) {
arg1 = &temp1;
arg2 = &temp2;
if ((items < 1) || (items > 2)) {
- SWIG_croak("Usage: svn_dirent_split(dirent,pool);");
+ SWIG_croak("Usage: svn_dirent_split(dirent,result_pool);");
}
res3 = SWIG_AsCharPtrAndSize(ST(0), &buf3, NULL, &alloc3);
if (!SWIG_IsOK(res3)) {
@@ -21552,7 +23763,7 @@ XS(_wrap_svn_relpath_split) {
arg1 = &temp1;
arg2 = &temp2;
if ((items < 1) || (items > 2)) {
- SWIG_croak("Usage: svn_relpath_split(relpath,pool);");
+ SWIG_croak("Usage: svn_relpath_split(relpath,result_pool);");
}
res3 = SWIG_AsCharPtrAndSize(ST(0), &buf3, NULL, &alloc3);
if (!SWIG_IsOK(res3)) {
@@ -21614,7 +23825,7 @@ XS(_wrap_svn_relpath_basename) {
_global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
}
if ((items < 1) || (items > 2)) {
- SWIG_croak("Usage: svn_relpath_basename(relpath,pool);");
+ SWIG_croak("Usage: svn_relpath_basename(relpath,result_pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
@@ -21658,7 +23869,7 @@ XS(_wrap_svn_relpath_dirname) {
_global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
}
if ((items < 1) || (items > 2)) {
- SWIG_croak("Usage: svn_relpath_dirname(relpath,pool);");
+ SWIG_croak("Usage: svn_relpath_dirname(relpath,result_pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
@@ -21707,7 +23918,7 @@ XS(_wrap_svn_uri_split) {
arg1 = &temp1;
arg2 = &temp2;
if ((items < 1) || (items > 2)) {
- SWIG_croak("Usage: svn_uri_split(uri,pool);");
+ SWIG_croak("Usage: svn_uri_split(uri,result_pool);");
}
res3 = SWIG_AsCharPtrAndSize(ST(0), &buf3, NULL, &alloc3);
if (!SWIG_IsOK(res3)) {
@@ -21769,7 +23980,7 @@ XS(_wrap_svn_uri_basename) {
_global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
}
if ((items < 1) || (items > 2)) {
- SWIG_croak("Usage: svn_uri_basename(uri,pool);");
+ SWIG_croak("Usage: svn_uri_basename(uri,result_pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
@@ -21813,7 +24024,7 @@ XS(_wrap_svn_uri_dirname) {
_global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
}
if ((items < 1) || (items > 2)) {
- SWIG_croak("Usage: svn_uri_dirname(uri,pool);");
+ SWIG_croak("Usage: svn_uri_dirname(uri,result_pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
@@ -21935,7 +24146,7 @@ XS(_wrap_svn_dirent_canonicalize) {
_global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
}
if ((items < 1) || (items > 2)) {
- SWIG_croak("Usage: svn_dirent_canonicalize(dirent,pool);");
+ SWIG_croak("Usage: svn_dirent_canonicalize(dirent,result_pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
@@ -21979,7 +24190,7 @@ XS(_wrap_svn_relpath_canonicalize) {
_global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
}
if ((items < 1) || (items > 2)) {
- SWIG_croak("Usage: svn_relpath_canonicalize(relpath,pool);");
+ SWIG_croak("Usage: svn_relpath_canonicalize(relpath,result_pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
@@ -22023,7 +24234,7 @@ XS(_wrap_svn_uri_canonicalize) {
_global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
}
if ((items < 1) || (items > 2)) {
- SWIG_croak("Usage: svn_uri_canonicalize(uri,pool);");
+ SWIG_croak("Usage: svn_uri_canonicalize(uri,result_pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
@@ -22067,7 +24278,7 @@ XS(_wrap_svn_dirent_is_canonical) {
_global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
}
if ((items < 1) || (items > 2)) {
- SWIG_croak("Usage: svn_dirent_is_canonical(dirent,pool);");
+ SWIG_croak("Usage: svn_dirent_is_canonical(dirent,scratch_pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
@@ -22145,7 +24356,7 @@ XS(_wrap_svn_uri_is_canonical) {
_global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
}
if ((items < 1) || (items > 2)) {
- SWIG_croak("Usage: svn_uri_is_canonical(uri,pool);");
+ SWIG_croak("Usage: svn_uri_is_canonical(uri,scratch_pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
@@ -22193,7 +24404,7 @@ XS(_wrap_svn_dirent_get_longest_ancestor) {
_global_pool = arg3 = svn_swig_pl_make_pool (ST(items-1));
}
if ((items < 2) || (items > 3)) {
- SWIG_croak("Usage: svn_dirent_get_longest_ancestor(dirent1,dirent2,pool);");
+ SWIG_croak("Usage: svn_dirent_get_longest_ancestor(dirent1,dirent2,result_pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
@@ -22248,7 +24459,7 @@ XS(_wrap_svn_relpath_get_longest_ancestor) {
_global_pool = arg3 = svn_swig_pl_make_pool (ST(items-1));
}
if ((items < 2) || (items > 3)) {
- SWIG_croak("Usage: svn_relpath_get_longest_ancestor(relpath1,relpath2,pool);");
+ SWIG_croak("Usage: svn_relpath_get_longest_ancestor(relpath1,relpath2,result_pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
@@ -22303,7 +24514,7 @@ XS(_wrap_svn_uri_get_longest_ancestor) {
_global_pool = arg3 = svn_swig_pl_make_pool (ST(items-1));
}
if ((items < 2) || (items > 3)) {
- SWIG_croak("Usage: svn_uri_get_longest_ancestor(uri1,uri2,pool);");
+ SWIG_croak("Usage: svn_uri_get_longest_ancestor(uri1,uri2,result_pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
@@ -22357,7 +24568,7 @@ XS(_wrap_svn_dirent_get_absolute) {
}
arg1 = &temp1;
if ((items < 1) || (items > 2)) {
- SWIG_croak("Usage: svn_dirent_get_absolute(relative,pool);");
+ SWIG_croak("Usage: svn_dirent_get_absolute(relative,result_pool);");
}
res2 = SWIG_AsCharPtrAndSize(ST(0), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
@@ -22409,61 +24620,6 @@ XS(_wrap_svn_dirent_get_absolute) {
}
-XS(_wrap_svn_uri__is_child) {
- {
- char *arg1 = (char *) 0 ;
- char *arg2 = (char *) 0 ;
- apr_pool_t *arg3 = (apr_pool_t *) 0 ;
- apr_pool_t *_global_pool ;
- int res1 ;
- char *buf1 = 0 ;
- int alloc1 = 0 ;
- int res2 ;
- char *buf2 = 0 ;
- int alloc2 = 0 ;
- int argvi = 0;
- char *result = 0 ;
- dXSARGS;
-
- {
- _global_pool = arg3 = svn_swig_pl_make_pool (ST(items-1));
- }
- if ((items < 2) || (items > 3)) {
- SWIG_croak("Usage: svn_uri__is_child(parent_uri,child_uri,pool);");
- }
- res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
- if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_uri__is_child" "', argument " "1"" of type '" "char const *""'");
- }
- arg1 = (char *)(buf1);
- res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
- if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_uri__is_child" "', argument " "2"" of type '" "char const *""'");
- }
- arg2 = (char *)(buf2);
- if (items > 2) {
-
- }
- {
- result = (char *)svn_uri__is_child((char const *)arg1,(char const *)arg2,arg3);
-
-
-
- }
- ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
- if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
- if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
-
- XSRETURN(argvi);
- fail:
- if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
- if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
-
- SWIG_croak_null();
- }
-}
-
-
XS(_wrap_svn_dirent_is_child) {
{
char *arg1 = (char *) 0 ;
@@ -22484,7 +24640,7 @@ XS(_wrap_svn_dirent_is_child) {
_global_pool = arg3 = svn_swig_pl_make_pool (ST(items-1));
}
if ((items < 2) || (items > 3)) {
- SWIG_croak("Usage: svn_dirent_is_child(parent_dirent,child_dirent,pool);");
+ SWIG_croak("Usage: svn_dirent_is_child(parent_dirent,child_dirent,result_pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
@@ -22519,61 +24675,6 @@ XS(_wrap_svn_dirent_is_child) {
}
-XS(_wrap_svn_relpath__is_child) {
- {
- char *arg1 = (char *) 0 ;
- char *arg2 = (char *) 0 ;
- apr_pool_t *arg3 = (apr_pool_t *) 0 ;
- apr_pool_t *_global_pool ;
- int res1 ;
- char *buf1 = 0 ;
- int alloc1 = 0 ;
- int res2 ;
- char *buf2 = 0 ;
- int alloc2 = 0 ;
- int argvi = 0;
- char *result = 0 ;
- dXSARGS;
-
- {
- _global_pool = arg3 = svn_swig_pl_make_pool (ST(items-1));
- }
- if ((items < 2) || (items > 3)) {
- SWIG_croak("Usage: svn_relpath__is_child(parent_relpath,child_relpath,pool);");
- }
- res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
- if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_relpath__is_child" "', argument " "1"" of type '" "char const *""'");
- }
- arg1 = (char *)(buf1);
- res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
- if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_relpath__is_child" "', argument " "2"" of type '" "char const *""'");
- }
- arg2 = (char *)(buf2);
- if (items > 2) {
-
- }
- {
- result = (char *)svn_relpath__is_child((char const *)arg1,(char const *)arg2,arg3);
-
-
-
- }
- ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
- if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
- if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
-
- XSRETURN(argvi);
- fail:
- if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
- if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
-
- SWIG_croak_null();
- }
-}
-
-
XS(_wrap_svn_dirent_is_ancestor) {
{
char *arg1 = (char *) 0 ;
@@ -22619,51 +24720,6 @@ XS(_wrap_svn_dirent_is_ancestor) {
}
-XS(_wrap_svn_relpath__is_ancestor) {
- {
- char *arg1 = (char *) 0 ;
- char *arg2 = (char *) 0 ;
- int res1 ;
- char *buf1 = 0 ;
- int alloc1 = 0 ;
- int res2 ;
- char *buf2 = 0 ;
- int alloc2 = 0 ;
- int argvi = 0;
- svn_boolean_t result;
- dXSARGS;
-
- if ((items < 2) || (items > 2)) {
- SWIG_croak("Usage: svn_relpath__is_ancestor(parent_relpath,child_relpath);");
- }
- res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
- if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_relpath__is_ancestor" "', argument " "1"" of type '" "char const *""'");
- }
- arg1 = (char *)(buf1);
- res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
- if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_relpath__is_ancestor" "', argument " "2"" of type '" "char const *""'");
- }
- arg2 = (char *)(buf2);
- {
- result = (svn_boolean_t)svn_relpath__is_ancestor((char const *)arg1,(char const *)arg2);
-
-
-
- }
- ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
- if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
- if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
- XSRETURN(argvi);
- fail:
- if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
- if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
- SWIG_croak_null();
- }
-}
-
-
XS(_wrap_svn_uri__is_ancestor) {
{
char *arg1 = (char *) 0 ;
@@ -22873,7 +24929,7 @@ XS(_wrap_svn_uri_get_dirent_from_file_url) {
}
arg1 = &temp1;
if ((items < 1) || (items > 2)) {
- SWIG_croak("Usage: svn_uri_get_dirent_from_file_url(url,pool);");
+ SWIG_croak("Usage: svn_uri_get_dirent_from_file_url(url,result_pool);");
}
res2 = SWIG_AsCharPtrAndSize(ST(0), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
@@ -22944,7 +25000,7 @@ XS(_wrap_svn_uri_get_file_url_from_dirent) {
}
arg1 = &temp1;
if ((items < 1) || (items > 2)) {
- SWIG_croak("Usage: svn_uri_get_file_url_from_dirent(dirent,pool);");
+ SWIG_croak("Usage: svn_uri_get_file_url_from_dirent(dirent,result_pool);");
}
res2 = SWIG_AsCharPtrAndSize(ST(0), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
@@ -23069,6 +25125,121 @@ XS(_wrap_svn_mergeinfo_parse) {
}
+XS(_wrap_svn_mergeinfo_diff2) {
+ {
+ svn_mergeinfo_t *arg1 = (svn_mergeinfo_t *) 0 ;
+ svn_mergeinfo_t *arg2 = (svn_mergeinfo_t *) 0 ;
+ svn_mergeinfo_t arg3 = (svn_mergeinfo_t) 0 ;
+ svn_mergeinfo_t arg4 = (svn_mergeinfo_t) 0 ;
+ svn_boolean_t arg5 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_mergeinfo_t temp1 ;
+ svn_mergeinfo_t temp2 ;
+ void *argp3 = 0 ;
+ int res3 = 0 ;
+ void *argp4 = 0 ;
+ int res4 = 0 ;
+ int val5 ;
+ int ecode5 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg6 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ {
+ _global_pool = arg7 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ arg2 = &temp2;
+ if ((items < 3) || (items > 5)) {
+ SWIG_croak("Usage: svn_mergeinfo_diff2(mergefrom,mergeto,consider_inheritance,result_pool,scratch_pool);");
+ }
+ res3 = SWIG_ConvertPtr(ST(0), &argp3,SWIGTYPE_p_apr_hash_t, 0 | 0 );
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_mergeinfo_diff2" "', argument " "3"" of type '" "svn_mergeinfo_t""'");
+ }
+ arg3 = (svn_mergeinfo_t)(argp3);
+ res4 = SWIG_ConvertPtr(ST(1), &argp4,SWIGTYPE_p_apr_hash_t, 0 | 0 );
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_mergeinfo_diff2" "', argument " "4"" of type '" "svn_mergeinfo_t""'");
+ }
+ arg4 = (svn_mergeinfo_t)(argp4);
+ ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val5);
+ if (!SWIG_IsOK(ecode5)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_mergeinfo_diff2" "', argument " "5"" of type '" "svn_boolean_t""'");
+ }
+ arg5 = (svn_boolean_t)(val5);
+ if (items > 3) {
+
+ }
+ if (items > 4) {
+
+ }
+ {
+ result = (svn_error_t *)svn_mergeinfo_diff2(arg1,arg2,arg3,arg4,arg5,arg6,arg7);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ /* FIXME: Missing argout typemap: svn_mergeinfo_diff2 arg 1 (svn_mergeinfo_t *) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_mergeinfo_diff2 is not implemented yet");
+
+ }
+ {
+ /* FIXME: Missing argout typemap: svn_mergeinfo_diff2 arg 2 (svn_mergeinfo_t *) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_mergeinfo_diff2 is not implemented yet");
+
+ }
+
+
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_mergeinfo_diff) {
{
svn_mergeinfo_t *arg1 = (svn_mergeinfo_t *) 0 ;
@@ -23175,6 +25346,83 @@ XS(_wrap_svn_mergeinfo_diff) {
}
+XS(_wrap_svn_mergeinfo_merge2) {
+ {
+ svn_mergeinfo_t arg1 = (svn_mergeinfo_t) 0 ;
+ svn_mergeinfo_t arg2 = (svn_mergeinfo_t) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg3 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ {
+ _global_pool = arg4 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 2) || (items > 4)) {
+ SWIG_croak("Usage: svn_mergeinfo_merge2(mergeinfo,changes,result_pool,scratch_pool);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_apr_hash_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_mergeinfo_merge2" "', argument " "1"" of type '" "svn_mergeinfo_t""'");
+ }
+ arg1 = (svn_mergeinfo_t)(argp1);
+ res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_apr_hash_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_mergeinfo_merge2" "', argument " "2"" of type '" "svn_mergeinfo_t""'");
+ }
+ arg2 = (svn_mergeinfo_t)(argp2);
+ if (items > 2) {
+
+ }
+ if (items > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_mergeinfo_merge2(arg1,arg2,arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_mergeinfo_catalog_merge) {
{
svn_mergeinfo_catalog_t arg1 = (svn_mergeinfo_catalog_t) 0 ;
@@ -23437,15 +25685,15 @@ XS(_wrap_svn_mergeinfo_remove2) {
XS(_wrap_svn_rangelist_diff) {
{
- apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
- apr_array_header_t **arg2 = (apr_array_header_t **) 0 ;
- apr_array_header_t *arg3 = (apr_array_header_t *) 0 ;
- apr_array_header_t *arg4 = (apr_array_header_t *) 0 ;
+ svn_rangelist_t **arg1 = (svn_rangelist_t **) 0 ;
+ svn_rangelist_t **arg2 = (svn_rangelist_t **) 0 ;
+ svn_rangelist_t *arg3 = (svn_rangelist_t *) 0 ;
+ svn_rangelist_t *arg4 = (svn_rangelist_t *) 0 ;
svn_boolean_t arg5 ;
apr_pool_t *arg6 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool ;
- apr_array_header_t *temp1 ;
- apr_array_header_t *temp2 ;
+ svn_rangelist_t *temp1 ;
+ svn_rangelist_t *temp2 ;
void *argp3 = 0 ;
int res3 = 0 ;
void *argp4 = 0 ;
@@ -23466,14 +25714,14 @@ XS(_wrap_svn_rangelist_diff) {
}
res3 = SWIG_ConvertPtr(ST(0), &argp3,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
if (!SWIG_IsOK(res3)) {
- SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_rangelist_diff" "', argument " "3"" of type '" "apr_array_header_t const *""'");
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_rangelist_diff" "', argument " "3"" of type '" "svn_rangelist_t const *""'");
}
- arg3 = (apr_array_header_t *)(argp3);
+ arg3 = (svn_rangelist_t *)(argp3);
res4 = SWIG_ConvertPtr(ST(1), &argp4,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
if (!SWIG_IsOK(res4)) {
- SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_rangelist_diff" "', argument " "4"" of type '" "apr_array_header_t const *""'");
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_rangelist_diff" "', argument " "4"" of type '" "svn_rangelist_t const *""'");
}
- arg4 = (apr_array_header_t *)(argp4);
+ arg4 = (svn_rangelist_t *)(argp4);
ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val5);
if (!SWIG_IsOK(ecode5)) {
SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_rangelist_diff" "', argument " "5"" of type '" "svn_boolean_t""'");
@@ -23505,7 +25753,7 @@ XS(_wrap_svn_rangelist_diff) {
}
}
{
- /* FIXME: Missing argout typemap: svn_rangelist_diff arg 1 (apr_array_header_t **) */
+ /* FIXME: Missing argout typemap: svn_rangelist_diff arg 1 (svn_rangelist_t **) */
@@ -23514,7 +25762,7 @@ XS(_wrap_svn_rangelist_diff) {
}
{
- /* FIXME: Missing argout typemap: svn_rangelist_diff arg 2 (apr_array_header_t **) */
+ /* FIXME: Missing argout typemap: svn_rangelist_diff arg 2 (svn_rangelist_t **) */
@@ -23541,15 +25789,92 @@ XS(_wrap_svn_rangelist_diff) {
}
+XS(_wrap_svn_rangelist_merge2) {
+ {
+ svn_rangelist_t *arg1 = (svn_rangelist_t *) 0 ;
+ svn_rangelist_t *arg2 = (svn_rangelist_t *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg3 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ {
+ _global_pool = arg4 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 2) || (items > 4)) {
+ SWIG_croak("Usage: svn_rangelist_merge2(rangelist,changes,result_pool,scratch_pool);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_rangelist_merge2" "', argument " "1"" of type '" "svn_rangelist_t *""'");
+ }
+ arg1 = (svn_rangelist_t *)(argp1);
+ res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_rangelist_merge2" "', argument " "2"" of type '" "svn_rangelist_t const *""'");
+ }
+ arg2 = (svn_rangelist_t *)(argp2);
+ if (items > 2) {
+
+ }
+ if (items > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_rangelist_merge2(arg1,(apr_array_header_t const *)arg2,arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_rangelist_remove) {
{
- apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
- apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
- apr_array_header_t *arg3 = (apr_array_header_t *) 0 ;
+ svn_rangelist_t **arg1 = (svn_rangelist_t **) 0 ;
+ svn_rangelist_t *arg2 = (svn_rangelist_t *) 0 ;
+ svn_rangelist_t *arg3 = (svn_rangelist_t *) 0 ;
svn_boolean_t arg4 ;
apr_pool_t *arg5 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool ;
- apr_array_header_t *temp1 ;
+ svn_rangelist_t *temp1 ;
void *argp2 = 0 ;
int res2 = 0 ;
void *argp3 = 0 ;
@@ -23569,14 +25894,14 @@ XS(_wrap_svn_rangelist_remove) {
}
res2 = SWIG_ConvertPtr(ST(0), &argp2,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_rangelist_remove" "', argument " "2"" of type '" "apr_array_header_t const *""'");
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_rangelist_remove" "', argument " "2"" of type '" "svn_rangelist_t const *""'");
}
- arg2 = (apr_array_header_t *)(argp2);
+ arg2 = (svn_rangelist_t *)(argp2);
res3 = SWIG_ConvertPtr(ST(1), &argp3,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
if (!SWIG_IsOK(res3)) {
- SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_rangelist_remove" "', argument " "3"" of type '" "apr_array_header_t const *""'");
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_rangelist_remove" "', argument " "3"" of type '" "svn_rangelist_t const *""'");
}
- arg3 = (apr_array_header_t *)(argp3);
+ arg3 = (svn_rangelist_t *)(argp3);
ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val4);
if (!SWIG_IsOK(ecode4)) {
SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_rangelist_remove" "', argument " "4"" of type '" "svn_boolean_t""'");
@@ -23608,7 +25933,7 @@ XS(_wrap_svn_rangelist_remove) {
}
}
{
- /* FIXME: Missing argout typemap: svn_rangelist_remove arg 1 (apr_array_header_t **) */
+ /* FIXME: Missing argout typemap: svn_rangelist_remove arg 1 (svn_rangelist_t **) */
@@ -23818,13 +26143,13 @@ XS(_wrap_svn_mergeinfo_intersect) {
XS(_wrap_svn_rangelist_intersect) {
{
- apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
- apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
- apr_array_header_t *arg3 = (apr_array_header_t *) 0 ;
+ svn_rangelist_t **arg1 = (svn_rangelist_t **) 0 ;
+ svn_rangelist_t *arg2 = (svn_rangelist_t *) 0 ;
+ svn_rangelist_t *arg3 = (svn_rangelist_t *) 0 ;
svn_boolean_t arg4 ;
apr_pool_t *arg5 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool ;
- apr_array_header_t *temp1 ;
+ svn_rangelist_t *temp1 ;
void *argp2 = 0 ;
int res2 = 0 ;
void *argp3 = 0 ;
@@ -23844,14 +26169,14 @@ XS(_wrap_svn_rangelist_intersect) {
}
res2 = SWIG_ConvertPtr(ST(0), &argp2,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_rangelist_intersect" "', argument " "2"" of type '" "apr_array_header_t const *""'");
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_rangelist_intersect" "', argument " "2"" of type '" "svn_rangelist_t const *""'");
}
- arg2 = (apr_array_header_t *)(argp2);
+ arg2 = (svn_rangelist_t *)(argp2);
res3 = SWIG_ConvertPtr(ST(1), &argp3,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
if (!SWIG_IsOK(res3)) {
- SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_rangelist_intersect" "', argument " "3"" of type '" "apr_array_header_t const *""'");
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_rangelist_intersect" "', argument " "3"" of type '" "svn_rangelist_t const *""'");
}
- arg3 = (apr_array_header_t *)(argp3);
+ arg3 = (svn_rangelist_t *)(argp3);
ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val4);
if (!SWIG_IsOK(ecode4)) {
SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_rangelist_intersect" "', argument " "4"" of type '" "svn_boolean_t""'");
@@ -23883,7 +26208,7 @@ XS(_wrap_svn_rangelist_intersect) {
}
}
{
- /* FIXME: Missing argout typemap: svn_rangelist_intersect arg 1 (apr_array_header_t **) */
+ /* FIXME: Missing argout typemap: svn_rangelist_intersect arg 1 (svn_rangelist_t **) */
@@ -23911,7 +26236,7 @@ XS(_wrap_svn_rangelist_intersect) {
XS(_wrap_svn_rangelist_to_string) {
{
svn_string_t **arg1 = (svn_string_t **) 0 ;
- apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
+ svn_rangelist_t *arg2 = (svn_rangelist_t *) 0 ;
apr_pool_t *arg3 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool ;
svn_string_t *temp1 ;
@@ -23930,9 +26255,9 @@ XS(_wrap_svn_rangelist_to_string) {
}
res2 = SWIG_ConvertPtr(ST(0), &argp2,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_rangelist_to_string" "', argument " "2"" of type '" "apr_array_header_t const *""'");
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_rangelist_to_string" "', argument " "2"" of type '" "svn_rangelist_t const *""'");
}
- arg2 = (apr_array_header_t *)(argp2);
+ arg2 = (svn_rangelist_t *)(argp2);
if (items > 1) {
}
@@ -23980,15 +26305,15 @@ XS(_wrap_svn_rangelist_to_string) {
XS(_wrap_svn_rangelist_inheritable2) {
{
- apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
- apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
+ svn_rangelist_t **arg1 = (svn_rangelist_t **) 0 ;
+ svn_rangelist_t *arg2 = (svn_rangelist_t *) 0 ;
svn_revnum_t arg3 ;
svn_revnum_t arg4 ;
svn_boolean_t arg5 ;
apr_pool_t *arg6 = (apr_pool_t *) 0 ;
apr_pool_t *arg7 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool ;
- apr_array_header_t *temp1 ;
+ svn_rangelist_t *temp1 ;
void *argp2 = 0 ;
int res2 = 0 ;
long val3 ;
@@ -24013,9 +26338,9 @@ XS(_wrap_svn_rangelist_inheritable2) {
}
res2 = SWIG_ConvertPtr(ST(0), &argp2,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_rangelist_inheritable2" "', argument " "2"" of type '" "apr_array_header_t const *""'");
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_rangelist_inheritable2" "', argument " "2"" of type '" "svn_rangelist_t const *""'");
}
- arg2 = (apr_array_header_t *)(argp2);
+ arg2 = (svn_rangelist_t *)(argp2);
ecode3 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val3);
if (!SWIG_IsOK(ecode3)) {
SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "svn_rangelist_inheritable2" "', argument " "3"" of type '" "svn_revnum_t""'");
@@ -24060,7 +26385,7 @@ XS(_wrap_svn_rangelist_inheritable2) {
}
}
{
- /* FIXME: Missing argout typemap: svn_rangelist_inheritable2 arg 1 (apr_array_header_t **) */
+ /* FIXME: Missing argout typemap: svn_rangelist_inheritable2 arg 1 (svn_rangelist_t **) */
@@ -24091,13 +26416,13 @@ XS(_wrap_svn_rangelist_inheritable2) {
XS(_wrap_svn_rangelist_inheritable) {
{
- apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
- apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
+ svn_rangelist_t **arg1 = (svn_rangelist_t **) 0 ;
+ svn_rangelist_t *arg2 = (svn_rangelist_t *) 0 ;
svn_revnum_t arg3 ;
svn_revnum_t arg4 ;
apr_pool_t *arg5 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool ;
- apr_array_header_t *temp1 ;
+ svn_rangelist_t *temp1 ;
void *argp2 = 0 ;
int res2 = 0 ;
long val3 ;
@@ -24117,9 +26442,9 @@ XS(_wrap_svn_rangelist_inheritable) {
}
res2 = SWIG_ConvertPtr(ST(0), &argp2,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_rangelist_inheritable" "', argument " "2"" of type '" "apr_array_header_t const *""'");
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_rangelist_inheritable" "', argument " "2"" of type '" "svn_rangelist_t const *""'");
}
- arg2 = (apr_array_header_t *)(argp2);
+ arg2 = (svn_rangelist_t *)(argp2);
ecode3 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val3);
if (!SWIG_IsOK(ecode3)) {
SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "svn_rangelist_inheritable" "', argument " "3"" of type '" "svn_revnum_t""'");
@@ -24156,7 +26481,7 @@ XS(_wrap_svn_rangelist_inheritable) {
}
}
{
- /* FIXME: Missing argout typemap: svn_rangelist_inheritable arg 1 (apr_array_header_t **) */
+ /* FIXME: Missing argout typemap: svn_rangelist_inheritable arg 1 (svn_rangelist_t **) */
@@ -24564,13 +26889,13 @@ XS(_wrap_svn_mergeinfo_dup) {
XS(_wrap_svn_rangelist_dup) {
{
- apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
+ svn_rangelist_t *arg1 = (svn_rangelist_t *) 0 ;
apr_pool_t *arg2 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
- apr_array_header_t *result = 0 ;
+ svn_rangelist_t *result = 0 ;
dXSARGS;
{
@@ -24581,14 +26906,14 @@ XS(_wrap_svn_rangelist_dup) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_rangelist_dup" "', argument " "1"" of type '" "apr_array_header_t const *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_rangelist_dup" "', argument " "1"" of type '" "svn_rangelist_t const *""'");
}
- arg1 = (apr_array_header_t *)(argp1);
+ arg1 = (svn_rangelist_t *)(argp1);
if (items > 1) {
}
{
- result = (apr_array_header_t *)svn_rangelist_dup((apr_array_header_t const *)arg1,arg2);
+ result = (svn_rangelist_t *)svn_rangelist_dup((apr_array_header_t const *)arg1,arg2);
@@ -24674,7 +26999,7 @@ XS(_wrap_svn_inheritance_from_word) {
XS(_wrap_svn_io_dirent2_t_kind_set) {
{
- svn_io_dirent2_t *arg1 = (svn_io_dirent2_t *) 0 ;
+ struct svn_io_dirent2_t *arg1 = (struct svn_io_dirent2_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -24688,9 +27013,9 @@ XS(_wrap_svn_io_dirent2_t_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_io_dirent2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_io_dirent2_t_kind_set" "', argument " "1"" of type '" "svn_io_dirent2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_io_dirent2_t_kind_set" "', argument " "1"" of type '" "struct svn_io_dirent2_t *""'");
}
- arg1 = (svn_io_dirent2_t *)(argp1);
+ arg1 = (struct svn_io_dirent2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_io_dirent2_t_kind_set" "', argument " "2"" of type '" "svn_node_kind_t""'");
@@ -24711,7 +27036,7 @@ XS(_wrap_svn_io_dirent2_t_kind_set) {
XS(_wrap_svn_io_dirent2_t_kind_get) {
{
- svn_io_dirent2_t *arg1 = (svn_io_dirent2_t *) 0 ;
+ struct svn_io_dirent2_t *arg1 = (struct svn_io_dirent2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -24723,9 +27048,9 @@ XS(_wrap_svn_io_dirent2_t_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_io_dirent2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_io_dirent2_t_kind_get" "', argument " "1"" of type '" "svn_io_dirent2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_io_dirent2_t_kind_get" "', argument " "1"" of type '" "struct svn_io_dirent2_t *""'");
}
- arg1 = (svn_io_dirent2_t *)(argp1);
+ arg1 = (struct svn_io_dirent2_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -24739,7 +27064,7 @@ XS(_wrap_svn_io_dirent2_t_kind_get) {
XS(_wrap_svn_io_dirent2_t_special_set) {
{
- svn_io_dirent2_t *arg1 = (svn_io_dirent2_t *) 0 ;
+ struct svn_io_dirent2_t *arg1 = (struct svn_io_dirent2_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -24753,9 +27078,9 @@ XS(_wrap_svn_io_dirent2_t_special_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_io_dirent2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_io_dirent2_t_special_set" "', argument " "1"" of type '" "svn_io_dirent2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_io_dirent2_t_special_set" "', argument " "1"" of type '" "struct svn_io_dirent2_t *""'");
}
- arg1 = (svn_io_dirent2_t *)(argp1);
+ arg1 = (struct svn_io_dirent2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_io_dirent2_t_special_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -24776,7 +27101,7 @@ XS(_wrap_svn_io_dirent2_t_special_set) {
XS(_wrap_svn_io_dirent2_t_special_get) {
{
- svn_io_dirent2_t *arg1 = (svn_io_dirent2_t *) 0 ;
+ struct svn_io_dirent2_t *arg1 = (struct svn_io_dirent2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -24788,9 +27113,9 @@ XS(_wrap_svn_io_dirent2_t_special_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_io_dirent2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_io_dirent2_t_special_get" "', argument " "1"" of type '" "svn_io_dirent2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_io_dirent2_t_special_get" "', argument " "1"" of type '" "struct svn_io_dirent2_t *""'");
}
- arg1 = (svn_io_dirent2_t *)(argp1);
+ arg1 = (struct svn_io_dirent2_t *)(argp1);
result = (svn_boolean_t) ((arg1)->special);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -24804,7 +27129,7 @@ XS(_wrap_svn_io_dirent2_t_special_get) {
XS(_wrap_svn_io_dirent2_t_filesize_set) {
{
- svn_io_dirent2_t *arg1 = (svn_io_dirent2_t *) 0 ;
+ struct svn_io_dirent2_t *arg1 = (struct svn_io_dirent2_t *) 0 ;
svn_filesize_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -24818,9 +27143,9 @@ XS(_wrap_svn_io_dirent2_t_filesize_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_io_dirent2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_io_dirent2_t_filesize_set" "', argument " "1"" of type '" "svn_io_dirent2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_io_dirent2_t_filesize_set" "', argument " "1"" of type '" "struct svn_io_dirent2_t *""'");
}
- arg1 = (svn_io_dirent2_t *)(argp1);
+ arg1 = (struct svn_io_dirent2_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_io_dirent2_t_filesize_set" "', argument " "2"" of type '" "svn_filesize_t""'");
@@ -24841,7 +27166,7 @@ XS(_wrap_svn_io_dirent2_t_filesize_set) {
XS(_wrap_svn_io_dirent2_t_filesize_get) {
{
- svn_io_dirent2_t *arg1 = (svn_io_dirent2_t *) 0 ;
+ struct svn_io_dirent2_t *arg1 = (struct svn_io_dirent2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -24853,9 +27178,9 @@ XS(_wrap_svn_io_dirent2_t_filesize_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_io_dirent2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_io_dirent2_t_filesize_get" "', argument " "1"" of type '" "svn_io_dirent2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_io_dirent2_t_filesize_get" "', argument " "1"" of type '" "struct svn_io_dirent2_t *""'");
}
- arg1 = (svn_io_dirent2_t *)(argp1);
+ arg1 = (struct svn_io_dirent2_t *)(argp1);
result = ((arg1)->filesize);
{
char temp[256];
@@ -24874,7 +27199,7 @@ XS(_wrap_svn_io_dirent2_t_filesize_get) {
XS(_wrap_svn_io_dirent2_t_mtime_set) {
{
- svn_io_dirent2_t *arg1 = (svn_io_dirent2_t *) 0 ;
+ struct svn_io_dirent2_t *arg1 = (struct svn_io_dirent2_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -24888,9 +27213,9 @@ XS(_wrap_svn_io_dirent2_t_mtime_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_io_dirent2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_io_dirent2_t_mtime_set" "', argument " "1"" of type '" "svn_io_dirent2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_io_dirent2_t_mtime_set" "', argument " "1"" of type '" "struct svn_io_dirent2_t *""'");
}
- arg1 = (svn_io_dirent2_t *)(argp1);
+ arg1 = (struct svn_io_dirent2_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_io_dirent2_t_mtime_set" "', argument " "2"" of type '" "apr_time_t""'");
@@ -24911,7 +27236,7 @@ XS(_wrap_svn_io_dirent2_t_mtime_set) {
XS(_wrap_svn_io_dirent2_t_mtime_get) {
{
- svn_io_dirent2_t *arg1 = (svn_io_dirent2_t *) 0 ;
+ struct svn_io_dirent2_t *arg1 = (struct svn_io_dirent2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -24923,9 +27248,9 @@ XS(_wrap_svn_io_dirent2_t_mtime_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_io_dirent2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_io_dirent2_t_mtime_get" "', argument " "1"" of type '" "svn_io_dirent2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_io_dirent2_t_mtime_get" "', argument " "1"" of type '" "struct svn_io_dirent2_t *""'");
}
- arg1 = (svn_io_dirent2_t *)(argp1);
+ arg1 = (struct svn_io_dirent2_t *)(argp1);
result = ((arg1)->mtime);
{
char temp[256];
@@ -24945,14 +27270,14 @@ XS(_wrap_svn_io_dirent2_t_mtime_get) {
XS(_wrap_new_svn_io_dirent2_t) {
{
int argvi = 0;
- svn_io_dirent2_t *result = 0 ;
+ struct svn_io_dirent2_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_io_dirent2_t();");
}
{
- result = (svn_io_dirent2_t *)calloc(1, sizeof(svn_io_dirent2_t));
+ result = (struct svn_io_dirent2_t *)calloc(1, sizeof(struct svn_io_dirent2_t));
@@ -24967,7 +27292,7 @@ XS(_wrap_new_svn_io_dirent2_t) {
XS(_wrap_delete_svn_io_dirent2_t) {
{
- svn_io_dirent2_t *arg1 = (svn_io_dirent2_t *) 0 ;
+ struct svn_io_dirent2_t *arg1 = (struct svn_io_dirent2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -24978,9 +27303,9 @@ XS(_wrap_delete_svn_io_dirent2_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_io_dirent2_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_io_dirent2_t" "', argument " "1"" of type '" "svn_io_dirent2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_io_dirent2_t" "', argument " "1"" of type '" "struct svn_io_dirent2_t *""'");
}
- arg1 = (svn_io_dirent2_t *)(argp1);
+ arg1 = (struct svn_io_dirent2_t *)(argp1);
{
free((char *) arg1);
@@ -25075,7 +27400,7 @@ XS(_wrap_svn_io_dirent2_dup) {
XS(_wrap_svn_io_dirent_t_kind_set) {
{
- svn_io_dirent_t *arg1 = (svn_io_dirent_t *) 0 ;
+ struct svn_io_dirent_t *arg1 = (struct svn_io_dirent_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -25089,9 +27414,9 @@ XS(_wrap_svn_io_dirent_t_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_io_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_io_dirent_t_kind_set" "', argument " "1"" of type '" "svn_io_dirent_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_io_dirent_t_kind_set" "', argument " "1"" of type '" "struct svn_io_dirent_t *""'");
}
- arg1 = (svn_io_dirent_t *)(argp1);
+ arg1 = (struct svn_io_dirent_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_io_dirent_t_kind_set" "', argument " "2"" of type '" "svn_node_kind_t""'");
@@ -25112,7 +27437,7 @@ XS(_wrap_svn_io_dirent_t_kind_set) {
XS(_wrap_svn_io_dirent_t_kind_get) {
{
- svn_io_dirent_t *arg1 = (svn_io_dirent_t *) 0 ;
+ struct svn_io_dirent_t *arg1 = (struct svn_io_dirent_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -25124,9 +27449,9 @@ XS(_wrap_svn_io_dirent_t_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_io_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_io_dirent_t_kind_get" "', argument " "1"" of type '" "svn_io_dirent_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_io_dirent_t_kind_get" "', argument " "1"" of type '" "struct svn_io_dirent_t *""'");
}
- arg1 = (svn_io_dirent_t *)(argp1);
+ arg1 = (struct svn_io_dirent_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -25140,7 +27465,7 @@ XS(_wrap_svn_io_dirent_t_kind_get) {
XS(_wrap_svn_io_dirent_t_special_set) {
{
- svn_io_dirent_t *arg1 = (svn_io_dirent_t *) 0 ;
+ struct svn_io_dirent_t *arg1 = (struct svn_io_dirent_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -25154,9 +27479,9 @@ XS(_wrap_svn_io_dirent_t_special_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_io_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_io_dirent_t_special_set" "', argument " "1"" of type '" "svn_io_dirent_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_io_dirent_t_special_set" "', argument " "1"" of type '" "struct svn_io_dirent_t *""'");
}
- arg1 = (svn_io_dirent_t *)(argp1);
+ arg1 = (struct svn_io_dirent_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_io_dirent_t_special_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -25177,7 +27502,7 @@ XS(_wrap_svn_io_dirent_t_special_set) {
XS(_wrap_svn_io_dirent_t_special_get) {
{
- svn_io_dirent_t *arg1 = (svn_io_dirent_t *) 0 ;
+ struct svn_io_dirent_t *arg1 = (struct svn_io_dirent_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -25189,9 +27514,9 @@ XS(_wrap_svn_io_dirent_t_special_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_io_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_io_dirent_t_special_get" "', argument " "1"" of type '" "svn_io_dirent_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_io_dirent_t_special_get" "', argument " "1"" of type '" "struct svn_io_dirent_t *""'");
}
- arg1 = (svn_io_dirent_t *)(argp1);
+ arg1 = (struct svn_io_dirent_t *)(argp1);
result = (svn_boolean_t) ((arg1)->special);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -25206,14 +27531,14 @@ XS(_wrap_svn_io_dirent_t_special_get) {
XS(_wrap_new_svn_io_dirent_t) {
{
int argvi = 0;
- svn_io_dirent_t *result = 0 ;
+ struct svn_io_dirent_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_io_dirent_t();");
}
{
- result = (svn_io_dirent_t *)calloc(1, sizeof(svn_io_dirent_t));
+ result = (struct svn_io_dirent_t *)calloc(1, sizeof(struct svn_io_dirent_t));
@@ -25228,7 +27553,7 @@ XS(_wrap_new_svn_io_dirent_t) {
XS(_wrap_delete_svn_io_dirent_t) {
{
- svn_io_dirent_t *arg1 = (svn_io_dirent_t *) 0 ;
+ struct svn_io_dirent_t *arg1 = (struct svn_io_dirent_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -25239,9 +27564,9 @@ XS(_wrap_delete_svn_io_dirent_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_io_dirent_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_io_dirent_t" "', argument " "1"" of type '" "svn_io_dirent_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_io_dirent_t" "', argument " "1"" of type '" "struct svn_io_dirent_t *""'");
}
- arg1 = (svn_io_dirent_t *)(argp1);
+ arg1 = (struct svn_io_dirent_t *)(argp1);
{
free((char *) arg1);
@@ -25789,6 +28114,123 @@ XS(_wrap_svn_io_sleep_for_timestamps) {
}
+XS(_wrap_svn_io_filesizes_three_different_p) {
+ {
+ svn_boolean_t *arg1 = (svn_boolean_t *) 0 ;
+ svn_boolean_t *arg2 = (svn_boolean_t *) 0 ;
+ svn_boolean_t *arg3 = (svn_boolean_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ char *arg5 = (char *) 0 ;
+ char *arg6 = (char *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_boolean_t temp1 ;
+ int res1 = SWIG_TMPOBJ ;
+ svn_boolean_t temp2 ;
+ int res2 = SWIG_TMPOBJ ;
+ svn_boolean_t temp3 ;
+ int res3 = SWIG_TMPOBJ ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ int res5 ;
+ char *buf5 = 0 ;
+ int alloc5 = 0 ;
+ int res6 ;
+ char *buf6 = 0 ;
+ int alloc6 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg7 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ arg2 = &temp2;
+ arg3 = &temp3;
+ if ((items < 3) || (items > 4)) {
+ SWIG_croak("Usage: svn_io_filesizes_three_different_p(file1,file2,file3,scratch_pool);");
+ }
+ res4 = SWIG_AsCharPtrAndSize(ST(0), &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_io_filesizes_three_different_p" "', argument " "4"" of type '" "char const *""'");
+ }
+ arg4 = (char *)(buf4);
+ res5 = SWIG_AsCharPtrAndSize(ST(1), &buf5, NULL, &alloc5);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_io_filesizes_three_different_p" "', argument " "5"" of type '" "char const *""'");
+ }
+ arg5 = (char *)(buf5);
+ res6 = SWIG_AsCharPtrAndSize(ST(2), &buf6, NULL, &alloc6);
+ if (!SWIG_IsOK(res6)) {
+ SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_io_filesizes_three_different_p" "', argument " "6"" of type '" "char const *""'");
+ }
+ arg6 = (char *)(buf6);
+ if (items > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_io_filesizes_three_different_p(arg1,arg2,arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,arg7);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ if (SWIG_IsTmpObj(res1)) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg1)); argvi++ ;
+ } else {
+ int new_flags = SWIG_IsNewObj(res1) ? (SWIG_POINTER_OWN | 0) : 0;
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_int, new_flags); argvi++ ;
+ }
+ if (SWIG_IsTmpObj(res2)) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg2)); argvi++ ;
+ } else {
+ int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0) : 0;
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags); argvi++ ;
+ }
+ if (SWIG_IsTmpObj(res3)) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg3)); argvi++ ;
+ } else {
+ int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0) : 0;
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags); argvi++ ;
+ }
+
+
+
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_io_file_checksum2) {
{
svn_checksum_t **arg1 = (svn_checksum_t **) 0 ;
@@ -25800,8 +28242,8 @@ XS(_wrap_svn_io_file_checksum2) {
int res2 ;
char *buf2 = 0 ;
int alloc2 = 0 ;
- void *argp3 ;
- int res3 = 0 ;
+ int val3 ;
+ int ecode3 = 0 ;
int argvi = 0;
svn_error_t *result = 0 ;
dXSARGS;
@@ -25818,17 +28260,11 @@ XS(_wrap_svn_io_file_checksum2) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_io_file_checksum2" "', argument " "2"" of type '" "char const *""'");
}
arg2 = (char *)(buf2);
- {
- res3 = SWIG_ConvertPtr(ST(1), &argp3, SWIGTYPE_p_svn_checksum_kind_t, 0 );
- if (!SWIG_IsOK(res3)) {
- SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_io_file_checksum2" "', argument " "3"" of type '" "svn_checksum_kind_t""'");
- }
- if (!argp3) {
- SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "svn_io_file_checksum2" "', argument " "3"" of type '" "svn_checksum_kind_t""'");
- } else {
- arg3 = *((svn_checksum_kind_t *)(argp3));
- }
- }
+ ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val3);
+ if (!SWIG_IsOK(ecode3)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "svn_io_file_checksum2" "', argument " "3"" of type '" "svn_checksum_kind_t""'");
+ }
+ arg3 = (svn_checksum_kind_t)(val3);
if (items > 2) {
}
@@ -25866,11 +28302,13 @@ XS(_wrap_svn_io_file_checksum2) {
if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
XSRETURN(argvi);
fail:
if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
SWIG_croak_null();
}
}
@@ -25928,7 +28366,7 @@ XS(_wrap_svn_io_file_checksum) {
}
}
{
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,59,%append_output@*/ if (argvi >= items) EXTEND(sp,1); /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,56,%set_output@*/ ST(argvi) = sv_2mortal(newSVpv(svn_md5_digest_to_cstring(arg1,
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,59,%append_output@*/ if (argvi >= items) EXTEND(sp,1); /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,56,%set_output@*/ ST(argvi) = sv_2mortal(newSVpv(svn_md5_digest_to_cstring(arg1,
_global_pool),
0)); argvi++ /*@SWIG@*/
@@ -26031,6 +28469,251 @@ XS(_wrap_svn_io_files_contents_same_p) {
}
+XS(_wrap_svn_io_files_contents_three_same_p) {
+ {
+ svn_boolean_t *arg1 = (svn_boolean_t *) 0 ;
+ svn_boolean_t *arg2 = (svn_boolean_t *) 0 ;
+ svn_boolean_t *arg3 = (svn_boolean_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ char *arg5 = (char *) 0 ;
+ char *arg6 = (char *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_boolean_t temp1 ;
+ int res1 = SWIG_TMPOBJ ;
+ svn_boolean_t temp2 ;
+ int res2 = SWIG_TMPOBJ ;
+ svn_boolean_t temp3 ;
+ int res3 = SWIG_TMPOBJ ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ int res5 ;
+ char *buf5 = 0 ;
+ int alloc5 = 0 ;
+ int res6 ;
+ char *buf6 = 0 ;
+ int alloc6 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg7 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ arg2 = &temp2;
+ arg3 = &temp3;
+ if ((items < 3) || (items > 4)) {
+ SWIG_croak("Usage: svn_io_files_contents_three_same_p(file1,file2,file3,scratch_pool);");
+ }
+ res4 = SWIG_AsCharPtrAndSize(ST(0), &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_io_files_contents_three_same_p" "', argument " "4"" of type '" "char const *""'");
+ }
+ arg4 = (char *)(buf4);
+ res5 = SWIG_AsCharPtrAndSize(ST(1), &buf5, NULL, &alloc5);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_io_files_contents_three_same_p" "', argument " "5"" of type '" "char const *""'");
+ }
+ arg5 = (char *)(buf5);
+ res6 = SWIG_AsCharPtrAndSize(ST(2), &buf6, NULL, &alloc6);
+ if (!SWIG_IsOK(res6)) {
+ SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_io_files_contents_three_same_p" "', argument " "6"" of type '" "char const *""'");
+ }
+ arg6 = (char *)(buf6);
+ if (items > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_io_files_contents_three_same_p(arg1,arg2,arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,arg7);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ if (SWIG_IsTmpObj(res1)) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg1)); argvi++ ;
+ } else {
+ int new_flags = SWIG_IsNewObj(res1) ? (SWIG_POINTER_OWN | 0) : 0;
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_int, new_flags); argvi++ ;
+ }
+ if (SWIG_IsTmpObj(res2)) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg2)); argvi++ ;
+ } else {
+ int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0) : 0;
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags); argvi++ ;
+ }
+ if (SWIG_IsTmpObj(res3)) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg3)); argvi++ ;
+ } else {
+ int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0) : 0;
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags); argvi++ ;
+ }
+
+
+
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_io_lock_open_file) {
+ {
+ apr_file_t *arg1 = (apr_file_t *) 0 ;
+ svn_boolean_t arg2 ;
+ svn_boolean_t arg3 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int val2 ;
+ int ecode2 = 0 ;
+ int val3 ;
+ int ecode3 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg4 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 3) || (items > 4)) {
+ SWIG_croak("Usage: svn_io_lock_open_file(lockfile_handle,exclusive,nonblocking,pool);");
+ }
+ {
+ arg1 = svn_swig_pl_make_file(ST(0), _global_pool);
+ }
+ ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_io_lock_open_file" "', argument " "2"" of type '" "svn_boolean_t""'");
+ }
+ arg2 = (svn_boolean_t)(val2);
+ ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3);
+ if (!SWIG_IsOK(ecode3)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "svn_io_lock_open_file" "', argument " "3"" of type '" "svn_boolean_t""'");
+ }
+ arg3 = (svn_boolean_t)(val3);
+ if (items > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_io_lock_open_file(arg1,arg2,arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_io_unlock_open_file) {
+ {
+ apr_file_t *arg1 = (apr_file_t *) 0 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 1) || (items > 2)) {
+ SWIG_croak("Usage: svn_io_unlock_open_file(lockfile_handle,pool);");
+ }
+ {
+ arg1 = svn_swig_pl_make_file(ST(0), _global_pool);
+ }
+ if (items > 1) {
+
+ }
+ {
+ result = (svn_error_t *)svn_io_unlock_open_file(arg1,arg2);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_stream_set_skip) {
{
svn_stream_t *arg1 = (svn_stream_t *) 0 ;
@@ -26836,6 +29519,42 @@ XS(_wrap_svn_stream_from_string) {
}
+XS(_wrap_svn_stream_buffered) {
+ {
+ apr_pool_t *arg1 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int argvi = 0;
+ svn_stream_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg1 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 0) || (items > 1)) {
+ SWIG_croak("Usage: svn_stream_buffered(result_pool);");
+ }
+ if (items > 0) {
+
+ }
+ {
+ result = (svn_stream_t *)svn_stream_buffered(arg1);
+
+
+
+ }
+ {
+ ST(argvi) = svn_swig_pl_from_stream (result);
+ argvi++;
+ }
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_stream_compressed) {
{
svn_stream_t *arg1 = (svn_stream_t *) 0 ;
@@ -26889,8 +29608,8 @@ XS(_wrap_svn_stream_checksummed2) {
apr_pool_t *_global_pool ;
svn_checksum_t *temp2 ;
svn_checksum_t *temp3 ;
- void *argp4 ;
- int res4 = 0 ;
+ int val4 ;
+ int ecode4 = 0 ;
int val5 ;
int ecode5 = 0 ;
int argvi = 0;
@@ -26908,17 +29627,11 @@ XS(_wrap_svn_stream_checksummed2) {
{
svn_swig_pl_make_stream (&arg1, ST(0));
}
- {
- res4 = SWIG_ConvertPtr(ST(1), &argp4, SWIGTYPE_p_svn_checksum_kind_t, 0 );
- if (!SWIG_IsOK(res4)) {
- SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_stream_checksummed2" "', argument " "4"" of type '" "svn_checksum_kind_t""'");
- }
- if (!argp4) {
- SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "svn_stream_checksummed2" "', argument " "4"" of type '" "svn_checksum_kind_t""'");
- } else {
- arg4 = *((svn_checksum_kind_t *)(argp4));
- }
- }
+ ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_stream_checksummed2" "', argument " "4"" of type '" "svn_checksum_kind_t""'");
+ }
+ arg4 = (svn_checksum_kind_t)(val4);
ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val5);
if (!SWIG_IsOK(ecode5)) {
SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_stream_checksummed2" "', argument " "5"" of type '" "svn_boolean_t""'");
@@ -26960,6 +29673,7 @@ XS(_wrap_svn_stream_checksummed2) {
+
XSRETURN(argvi);
fail:
@@ -26967,6 +29681,7 @@ XS(_wrap_svn_stream_checksummed2) {
+
SWIG_croak_null();
}
}
@@ -27431,6 +30146,61 @@ XS(_wrap_svn_stream_tee) {
}
+XS(_wrap_svn_stream_puts) {
+ {
+ svn_stream_t *arg1 = (svn_stream_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_stream_puts(stream,str);");
+ }
+ {
+ svn_swig_pl_make_stream (&arg1, ST(0));
+ }
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_stream_puts" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ {
+ result = (svn_error_t *)svn_stream_puts(arg1,(char const *)arg2);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_stream_readline) {
{
svn_stream_t *arg1 = (svn_stream_t *) 0 ;
@@ -27953,6 +30723,69 @@ XS(_wrap_svn_string_from_stream) {
}
+XS(_wrap_svn_stream_lazyopen_create) {
+ {
+ svn_stream_lazyopen_func_t arg1 = (svn_stream_lazyopen_func_t) 0 ;
+ void *arg2 = (void *) 0 ;
+ svn_boolean_t arg3 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int res2 ;
+ int val3 ;
+ int ecode3 = 0 ;
+ int argvi = 0;
+ svn_stream_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg4 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 3) || (items > 4)) {
+ SWIG_croak("Usage: svn_stream_lazyopen_create(open_func,open_baton,open_on_close,result_pool);");
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(0), (void**)(&arg1), SWIGTYPE_p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_stream_lazyopen_create" "', argument " "1"" of type '" "svn_stream_lazyopen_func_t""'");
+ }
+ }
+ res2 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_stream_lazyopen_create" "', argument " "2"" of type '" "void *""'");
+ }
+ ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3);
+ if (!SWIG_IsOK(ecode3)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "svn_stream_lazyopen_create" "', argument " "3"" of type '" "svn_boolean_t""'");
+ }
+ arg3 = (svn_boolean_t)(val3);
+ if (items > 3) {
+
+ }
+ {
+ result = (svn_stream_t *)svn_stream_lazyopen_create(arg1,arg2,arg3,arg4);
+
+
+
+ }
+ {
+ ST(argvi) = svn_swig_pl_from_stream (result);
+ argvi++;
+ }
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_stringbuf_from_file2) {
{
svn_stringbuf_t **arg1 = (svn_stringbuf_t **) 0 ;
@@ -28402,6 +31235,108 @@ XS(_wrap_svn_io_get_dirents3) {
}
+XS(_wrap_svn_io_stat_dirent2) {
+ {
+ svn_io_dirent2_t **arg1 = (svn_io_dirent2_t **) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_io_dirent2_t *temp1 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int val3 ;
+ int ecode3 = 0 ;
+ int val4 ;
+ int ecode4 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg5 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ {
+ _global_pool = arg6 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ if ((items < 3) || (items > 5)) {
+ SWIG_croak("Usage: svn_io_stat_dirent2(path,verify_truename,ignore_enoent,result_pool,scratch_pool);");
+ }
+ res2 = SWIG_AsCharPtrAndSize(ST(0), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_io_stat_dirent2" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val3);
+ if (!SWIG_IsOK(ecode3)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "svn_io_stat_dirent2" "', argument " "3"" of type '" "svn_boolean_t""'");
+ }
+ arg3 = (svn_boolean_t)(val3);
+ ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_io_stat_dirent2" "', argument " "4"" of type '" "svn_boolean_t""'");
+ }
+ arg4 = (svn_boolean_t)(val4);
+ if (items > 3) {
+
+ }
+ if (items > 4) {
+
+ }
+ {
+ result = (svn_error_t *)svn_io_stat_dirent2((struct svn_io_dirent2_t const **)arg1,(char const *)arg2,arg3,arg4,arg5,arg6);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ /* FIXME: Missing argout typemap: svn_io_stat_dirent2 arg 1 (svn_io_dirent2_t const **) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_io_stat_dirent2 is not implemented yet");
+
+ }
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_io_stat_dirent) {
{
svn_io_dirent2_t **arg1 = (svn_io_dirent2_t **) 0 ;
@@ -28580,6 +31515,164 @@ XS(_wrap_svn_io_dir_walk2) {
}
+XS(_wrap_svn_io_start_cmd3) {
+ {
+ apr_proc_t *arg1 = (apr_proc_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ char **arg4 = (char **) 0 ;
+ char **arg5 = (char **) 0 ;
+ svn_boolean_t arg6 ;
+ svn_boolean_t arg7 ;
+ apr_file_t *arg8 = (apr_file_t *) 0 ;
+ svn_boolean_t arg9 ;
+ apr_file_t *arg10 = (apr_file_t *) 0 ;
+ svn_boolean_t arg11 ;
+ apr_file_t *arg12 = (apr_file_t *) 0 ;
+ apr_pool_t *arg13 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ void *argp4 = 0 ;
+ int res4 = 0 ;
+ void *argp5 = 0 ;
+ int res5 = 0 ;
+ int val6 ;
+ int ecode6 = 0 ;
+ int val7 ;
+ int ecode7 = 0 ;
+ int val9 ;
+ int ecode9 = 0 ;
+ int val11 ;
+ int ecode11 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg13 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 12) || (items > 13)) {
+ SWIG_croak("Usage: svn_io_start_cmd3(cmd_proc,path,cmd,args,env,inherit,infile_pipe,infile,outfile_pipe,outfile,errfile_pipe,errfile,pool);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_apr_proc_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_io_start_cmd3" "', argument " "1"" of type '" "apr_proc_t *""'");
+ }
+ arg1 = (apr_proc_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_io_start_cmd3" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_io_start_cmd3" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = (char *)(buf3);
+ res4 = SWIG_ConvertPtr(ST(3), &argp4,SWIGTYPE_p_p_char, 0 | 0 );
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_io_start_cmd3" "', argument " "4"" of type '" "char const *const *""'");
+ }
+ arg4 = (char **)(argp4);
+ res5 = SWIG_ConvertPtr(ST(4), &argp5,SWIGTYPE_p_p_char, 0 | 0 );
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_io_start_cmd3" "', argument " "5"" of type '" "char const *const *""'");
+ }
+ arg5 = (char **)(argp5);
+ ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val6);
+ if (!SWIG_IsOK(ecode6)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_io_start_cmd3" "', argument " "6"" of type '" "svn_boolean_t""'");
+ }
+ arg6 = (svn_boolean_t)(val6);
+ ecode7 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(6), &val7);
+ if (!SWIG_IsOK(ecode7)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "svn_io_start_cmd3" "', argument " "7"" of type '" "svn_boolean_t""'");
+ }
+ arg7 = (svn_boolean_t)(val7);
+ {
+ arg8 = svn_swig_pl_make_file(ST(7), _global_pool);
+ }
+ ecode9 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(8), &val9);
+ if (!SWIG_IsOK(ecode9)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "svn_io_start_cmd3" "', argument " "9"" of type '" "svn_boolean_t""'");
+ }
+ arg9 = (svn_boolean_t)(val9);
+ {
+ arg10 = svn_swig_pl_make_file(ST(9), _global_pool);
+ }
+ ecode11 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(10), &val11);
+ if (!SWIG_IsOK(ecode11)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode11), "in method '" "svn_io_start_cmd3" "', argument " "11"" of type '" "svn_boolean_t""'");
+ }
+ arg11 = (svn_boolean_t)(val11);
+ {
+ arg12 = svn_swig_pl_make_file(ST(11), _global_pool);
+ }
+ if (items > 12) {
+
+ }
+ {
+ result = (svn_error_t *)svn_io_start_cmd3(arg1,(char const *)arg2,(char const *)arg3,(char const *const *)arg4,(char const *const *)arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12,arg13);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+
+
+
+
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+
+
+
+
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_io_start_cmd2) {
{
apr_proc_t *arg1 = (apr_proc_t *) 0 ;
@@ -29749,6 +32842,115 @@ XS(_wrap_svn_io_file_name_get) {
}
+XS(_wrap_svn_io_file_readline) {
+ {
+ apr_file_t *arg1 = (apr_file_t *) 0 ;
+ svn_stringbuf_t **arg2 = (svn_stringbuf_t **) 0 ;
+ char **arg3 = (char **) 0 ;
+ svn_boolean_t *arg4 = (svn_boolean_t *) 0 ;
+ apr_size_t arg5 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_stringbuf_t *temp2 ;
+ char *temp3 ;
+ svn_boolean_t temp4 ;
+ int res4 = SWIG_TMPOBJ ;
+ unsigned long val5 ;
+ int ecode5 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg6 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ {
+ _global_pool = arg7 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg2 = &temp2;
+ arg3 = &temp3;
+ arg4 = &temp4;
+ if ((items < 2) || (items > 4)) {
+ SWIG_croak("Usage: svn_io_file_readline(file,max_len,result_pool,scratch_pool);");
+ }
+ {
+ arg1 = svn_swig_pl_make_file(ST(0), _global_pool);
+ }
+ ecode5 = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val5);
+ if (!SWIG_IsOK(ecode5)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_io_file_readline" "', argument " "5"" of type '" "apr_size_t""'");
+ }
+ arg5 = (apr_size_t)(val5);
+ if (items > 2) {
+
+ }
+ if (items > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_io_file_readline(arg1,arg2,(char const **)arg3,arg4,arg5,arg6,arg7);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ if (*arg2) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = sv_2mortal(newSVpvn((*arg2)->data, (*arg2)->len)); argvi++ ;
+ } else {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = &PL_sv_undef; argvi++ ;
+ }
+ }
+ {
+ if (*arg3 == NULL) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = &PL_sv_undef; argvi++ ;
+ } else {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = sv_2mortal(newSVpv(*arg3, 0)); argvi++ ;
+ }
+ }
+ if (SWIG_IsTmpObj(res4)) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg4)); argvi++ ;
+ } else {
+ int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0) : 0;
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_int, new_flags); argvi++ ;
+ }
+
+
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_read_invoke_fn) {
{
svn_read_fn_t arg1 = (svn_read_fn_t) 0 ;
@@ -30153,6 +33355,88 @@ XS(_wrap_svn_stream_invoke_seek_fn) {
}
+XS(_wrap_svn_stream_invoke_lazyopen_func) {
+ {
+ svn_stream_lazyopen_func_t arg1 = (svn_stream_lazyopen_func_t) 0 ;
+ svn_stream_t **arg2 = (svn_stream_t **) 0 ;
+ void *arg3 = (void *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_stream_t *temp2 ;
+ int res3 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg4 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ {
+ _global_pool = arg5 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg2 = &temp2;
+ if ((items < 2) || (items > 4)) {
+ SWIG_croak("Usage: svn_stream_invoke_lazyopen_func(_obj,baton,result_pool,scratch_pool);");
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(0), (void**)(&arg1), SWIGTYPE_p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_stream_invoke_lazyopen_func" "', argument " "1"" of type '" "svn_stream_lazyopen_func_t""'");
+ }
+ }
+ res3 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg3), 0, 0);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_stream_invoke_lazyopen_func" "', argument " "3"" of type '" "void *""'");
+ }
+ if (items > 2) {
+
+ }
+ if (items > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_stream_invoke_lazyopen_func(arg1,arg2,arg3,arg4,arg5);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = svn_swig_pl_from_stream(*arg2); argvi++ ;
+ }
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_io_invoke_walk_func) {
{
svn_io_walk_func_t arg1 = (svn_io_walk_func_t) 0 ;
@@ -30239,6 +33523,1174 @@ XS(_wrap_svn_io_invoke_walk_func) {
}
+XS(_wrap_svn_checksum_t_digest_set) {
+ {
+ struct svn_checksum_t *arg1 = (struct svn_checksum_t *) 0 ;
+ unsigned char *arg2 = (unsigned char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ SV * _saved[1] ;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_checksum_t_digest_set(self,digest);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_checksum_t_digest_set" "', argument " "1"" of type '" "struct svn_checksum_t *""'");
+ }
+ arg1 = (struct svn_checksum_t *)(argp1);
+
+ _saved[0] = ST(1);
+ if (arg1) (arg1)->digest = (unsigned char const *)arg2;
+ ST(argvi) = sv_newmortal();
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_checksum_t_digest_get) {
+ {
+ struct svn_checksum_t *arg1 = (struct svn_checksum_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ unsigned char *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_checksum_t_digest_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_checksum_t_digest_get" "', argument " "1"" of type '" "struct svn_checksum_t *""'");
+ }
+ arg1 = (struct svn_checksum_t *)(argp1);
+ result = (unsigned char *) ((arg1)->digest);
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_unsigned_char, 0 | 0); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_checksum_t_kind_set) {
+ {
+ struct svn_checksum_t *arg1 = (struct svn_checksum_t *) 0 ;
+ svn_checksum_kind_t arg2 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int val2 ;
+ int ecode2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_checksum_t_kind_set(self,kind);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_checksum_t_kind_set" "', argument " "1"" of type '" "struct svn_checksum_t *""'");
+ }
+ arg1 = (struct svn_checksum_t *)(argp1);
+ ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_checksum_t_kind_set" "', argument " "2"" of type '" "svn_checksum_kind_t""'");
+ }
+ arg2 = (svn_checksum_kind_t)(val2);
+ if (arg1) (arg1)->kind = arg2;
+ ST(argvi) = sv_newmortal();
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_checksum_t_kind_get) {
+ {
+ struct svn_checksum_t *arg1 = (struct svn_checksum_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ svn_checksum_kind_t result;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_checksum_t_kind_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_checksum_t_kind_get" "', argument " "1"" of type '" "struct svn_checksum_t *""'");
+ }
+ arg1 = (struct svn_checksum_t *)(argp1);
+ result = (svn_checksum_kind_t) ((arg1)->kind);
+ ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_new_svn_checksum_t) {
+ {
+ int argvi = 0;
+ struct svn_checksum_t *result = 0 ;
+ dXSARGS;
+
+ if ((items < 0) || (items > 0)) {
+ SWIG_croak("Usage: new_svn_checksum_t();");
+ }
+ {
+ result = (struct svn_checksum_t *)calloc(1, sizeof(struct svn_checksum_t));
+
+
+
+ }
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_checksum_t, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
+ XSRETURN(argvi);
+ fail:
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_delete_svn_checksum_t) {
+ {
+ struct svn_checksum_t *arg1 = (struct svn_checksum_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: delete_svn_checksum_t(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_checksum_t, SWIG_POINTER_DISOWN | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_checksum_t" "', argument " "1"" of type '" "struct svn_checksum_t *""'");
+ }
+ arg1 = (struct svn_checksum_t *)(argp1);
+ {
+ free((char *) arg1);
+
+
+
+ }
+ ST(argvi) = sv_newmortal();
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_checksum_create) {
+ {
+ svn_checksum_kind_t arg1 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int val1 ;
+ int ecode1 = 0 ;
+ int argvi = 0;
+ svn_checksum_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 1) || (items > 2)) {
+ SWIG_croak("Usage: svn_checksum_create(kind,pool);");
+ }
+ ecode1 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1);
+ if (!SWIG_IsOK(ecode1)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "svn_checksum_create" "', argument " "1"" of type '" "svn_checksum_kind_t""'");
+ }
+ arg1 = (svn_checksum_kind_t)(val1);
+ if (items > 1) {
+
+ }
+ {
+ result = (svn_checksum_t *)svn_checksum_create(arg1,arg2);
+
+
+
+ }
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_checksum_t, 0 | SWIG_SHADOW); argvi++ ;
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_checksum_clear) {
+ {
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_checksum_clear(checksum);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_checksum_clear" "', argument " "1"" of type '" "svn_checksum_t *""'");
+ }
+ arg1 = (svn_checksum_t *)(argp1);
+ {
+ result = (svn_error_t *)svn_checksum_clear(arg1);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_checksum_match) {
+ {
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ svn_checksum_t *arg2 = (svn_checksum_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ int argvi = 0;
+ svn_boolean_t result;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_checksum_match(checksum1,checksum2);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_checksum_match" "', argument " "1"" of type '" "svn_checksum_t const *""'");
+ }
+ arg1 = (svn_checksum_t *)(argp1);
+ res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_checksum_match" "', argument " "2"" of type '" "svn_checksum_t const *""'");
+ }
+ arg2 = (svn_checksum_t *)(argp2);
+ {
+ result = (svn_boolean_t)svn_checksum_match((struct svn_checksum_t const *)arg1,(struct svn_checksum_t const *)arg2);
+
+
+
+ }
+ ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_checksum_dup) {
+ {
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ svn_checksum_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 1) || (items > 2)) {
+ SWIG_croak("Usage: svn_checksum_dup(checksum,pool);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_checksum_dup" "', argument " "1"" of type '" "svn_checksum_t const *""'");
+ }
+ arg1 = (svn_checksum_t *)(argp1);
+ if (items > 1) {
+
+ }
+ {
+ result = (svn_checksum_t *)svn_checksum_dup((struct svn_checksum_t const *)arg1,arg2);
+
+
+
+ }
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_checksum_t, 0 | SWIG_SHADOW); argvi++ ;
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_checksum_to_cstring_display) {
+ {
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ char *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 1) || (items > 2)) {
+ SWIG_croak("Usage: svn_checksum_to_cstring_display(checksum,pool);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_checksum_to_cstring_display" "', argument " "1"" of type '" "svn_checksum_t const *""'");
+ }
+ arg1 = (svn_checksum_t *)(argp1);
+ if (items > 1) {
+
+ }
+ {
+ result = (char *)svn_checksum_to_cstring_display((struct svn_checksum_t const *)arg1,arg2);
+
+
+
+ }
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_checksum_to_cstring) {
+ {
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ char *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 1) || (items > 2)) {
+ SWIG_croak("Usage: svn_checksum_to_cstring(checksum,pool);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_checksum_to_cstring" "', argument " "1"" of type '" "svn_checksum_t const *""'");
+ }
+ arg1 = (svn_checksum_t *)(argp1);
+ if (items > 1) {
+
+ }
+ {
+ result = (char *)svn_checksum_to_cstring((struct svn_checksum_t const *)arg1,arg2);
+
+
+
+ }
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_checksum_serialize) {
+ {
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ char *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ {
+ _global_pool = arg3 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 1) || (items > 3)) {
+ SWIG_croak("Usage: svn_checksum_serialize(checksum,result_pool,scratch_pool);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_checksum_serialize" "', argument " "1"" of type '" "svn_checksum_t const *""'");
+ }
+ arg1 = (svn_checksum_t *)(argp1);
+ if (items > 1) {
+
+ }
+ if (items > 2) {
+
+ }
+ {
+ result = (char *)svn_checksum_serialize((struct svn_checksum_t const *)arg1,arg2,arg3);
+
+
+
+ }
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_checksum_deserialize) {
+ {
+ svn_checksum_t **arg1 = (svn_checksum_t **) 0 ;
+ char *arg2 = (char *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_checksum_t *temp1 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg3 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ {
+ _global_pool = arg4 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ if ((items < 1) || (items > 3)) {
+ SWIG_croak("Usage: svn_checksum_deserialize(data,result_pool,scratch_pool);");
+ }
+ res2 = SWIG_AsCharPtrAndSize(ST(0), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_checksum_deserialize" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ if (items > 1) {
+
+ }
+ if (items > 2) {
+
+ }
+ {
+ result = (svn_error_t *)svn_checksum_deserialize((struct svn_checksum_t const **)arg1,(char const *)arg2,arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ /* FIXME: Missing argout typemap: svn_checksum_deserialize arg 1 (svn_checksum_t const **) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_checksum_deserialize is not implemented yet");
+
+ }
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_checksum_parse_hex) {
+ {
+ svn_checksum_t **arg1 = (svn_checksum_t **) 0 ;
+ svn_checksum_kind_t arg2 ;
+ char *arg3 = (char *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_checksum_t *temp1 ;
+ int val2 ;
+ int ecode2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg4 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ if ((items < 2) || (items > 3)) {
+ SWIG_croak("Usage: svn_checksum_parse_hex(kind,hex,pool);");
+ }
+ ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_checksum_parse_hex" "', argument " "2"" of type '" "svn_checksum_kind_t""'");
+ }
+ arg2 = (svn_checksum_kind_t)(val2);
+ res3 = SWIG_AsCharPtrAndSize(ST(1), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_checksum_parse_hex" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = (char *)(buf3);
+ if (items > 2) {
+
+ }
+ {
+ result = (svn_error_t *)svn_checksum_parse_hex(arg1,arg2,(char const *)arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ /* FIXME: Missing argout typemap: svn_checksum_parse_hex arg 1 (svn_checksum_t **) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_checksum_parse_hex is not implemented yet");
+
+ }
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+ XSRETURN(argvi);
+ fail:
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_checksum) {
+ {
+ svn_checksum_t **arg1 = (svn_checksum_t **) 0 ;
+ svn_checksum_kind_t arg2 ;
+ void *arg3 = (void *) 0 ;
+ apr_size_t arg4 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_checksum_t *temp1 ;
+ int val2 ;
+ int ecode2 = 0 ;
+ int res3 ;
+ unsigned long val4 ;
+ int ecode4 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg5 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ if ((items < 3) || (items > 4)) {
+ SWIG_croak("Usage: svn_checksum(kind,data,len,pool);");
+ }
+ ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_checksum" "', argument " "2"" of type '" "svn_checksum_kind_t""'");
+ }
+ arg2 = (svn_checksum_kind_t)(val2);
+ res3 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg3), 0, 0);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_checksum" "', argument " "3"" of type '" "void const *""'");
+ }
+ ecode4 = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(ST(2), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_checksum" "', argument " "4"" of type '" "apr_size_t""'");
+ }
+ arg4 = (apr_size_t)(val4);
+ if (items > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_checksum(arg1,arg2,(void const *)arg3,arg4,arg5);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ /* FIXME: Missing argout typemap: svn_checksum arg 1 (svn_checksum_t **) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_checksum is not implemented yet");
+
+ }
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_checksum_empty_checksum) {
+ {
+ svn_checksum_kind_t arg1 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int val1 ;
+ int ecode1 = 0 ;
+ int argvi = 0;
+ svn_checksum_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 1) || (items > 2)) {
+ SWIG_croak("Usage: svn_checksum_empty_checksum(kind,pool);");
+ }
+ ecode1 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1);
+ if (!SWIG_IsOK(ecode1)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "svn_checksum_empty_checksum" "', argument " "1"" of type '" "svn_checksum_kind_t""'");
+ }
+ arg1 = (svn_checksum_kind_t)(val1);
+ if (items > 1) {
+
+ }
+ {
+ result = (svn_checksum_t *)svn_checksum_empty_checksum(arg1,arg2);
+
+
+
+ }
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_checksum_t, 0 | SWIG_SHADOW); argvi++ ;
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_checksum_ctx_create) {
+ {
+ svn_checksum_kind_t arg1 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int val1 ;
+ int ecode1 = 0 ;
+ int argvi = 0;
+ svn_checksum_ctx_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 1) || (items > 2)) {
+ SWIG_croak("Usage: svn_checksum_ctx_create(kind,pool);");
+ }
+ ecode1 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1);
+ if (!SWIG_IsOK(ecode1)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "svn_checksum_ctx_create" "', argument " "1"" of type '" "svn_checksum_kind_t""'");
+ }
+ arg1 = (svn_checksum_kind_t)(val1);
+ if (items > 1) {
+
+ }
+ {
+ result = (svn_checksum_ctx_t *)svn_checksum_ctx_create(arg1,arg2);
+
+
+
+ }
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_checksum_ctx_t, 0 | 0); argvi++ ;
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_checksum_update) {
+ {
+ svn_checksum_ctx_t *arg1 = (svn_checksum_ctx_t *) 0 ;
+ void *arg2 = (void *) 0 ;
+ apr_size_t arg3 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ unsigned long val3 ;
+ int ecode3 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ if ((items < 3) || (items > 3)) {
+ SWIG_croak("Usage: svn_checksum_update(ctx,data,len);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_checksum_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_checksum_update" "', argument " "1"" of type '" "svn_checksum_ctx_t *""'");
+ }
+ arg1 = (svn_checksum_ctx_t *)(argp1);
+ res2 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_checksum_update" "', argument " "2"" of type '" "void const *""'");
+ }
+ ecode3 = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(ST(2), &val3);
+ if (!SWIG_IsOK(ecode3)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "svn_checksum_update" "', argument " "3"" of type '" "apr_size_t""'");
+ }
+ arg3 = (apr_size_t)(val3);
+ {
+ result = (svn_error_t *)svn_checksum_update(arg1,(void const *)arg2,arg3);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_checksum_final) {
+ {
+ svn_checksum_t **arg1 = (svn_checksum_t **) 0 ;
+ svn_checksum_ctx_t *arg2 = (svn_checksum_ctx_t *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_checksum_t *temp1 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg3 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ if ((items < 1) || (items > 2)) {
+ SWIG_croak("Usage: svn_checksum_final(ctx,pool);");
+ }
+ res2 = SWIG_ConvertPtr(ST(0), &argp2,SWIGTYPE_p_svn_checksum_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_checksum_final" "', argument " "2"" of type '" "svn_checksum_ctx_t const *""'");
+ }
+ arg2 = (svn_checksum_ctx_t *)(argp2);
+ if (items > 1) {
+
+ }
+ {
+ result = (svn_error_t *)svn_checksum_final(arg1,(struct svn_checksum_ctx_t const *)arg2,arg3);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ /* FIXME: Missing argout typemap: svn_checksum_final arg 1 (svn_checksum_t **) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_checksum_final is not implemented yet");
+
+ }
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_checksum_size) {
+ {
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ apr_size_t result;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_checksum_size(checksum);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_checksum_size" "', argument " "1"" of type '" "svn_checksum_t const *""'");
+ }
+ arg1 = (svn_checksum_t *)(argp1);
+ {
+ result = svn_checksum_size((struct svn_checksum_t const *)arg1);
+
+
+
+ }
+ ST(argvi) = SWIG_From_unsigned_SS_long SWIG_PERL_CALL_ARGS_1((unsigned long)(result)); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_checksum_is_empty_checksum) {
+ {
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ svn_boolean_t result;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_checksum_is_empty_checksum(checksum);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_checksum_is_empty_checksum" "', argument " "1"" of type '" "svn_checksum_t *""'");
+ }
+ arg1 = (svn_checksum_t *)(argp1);
+ {
+ result = (svn_boolean_t)svn_checksum_is_empty_checksum(arg1);
+
+
+
+ }
+ ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_checksum_mismatch_err) {
+ {
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ svn_checksum_t *arg2 = (svn_checksum_t *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ void *arg5 = 0 ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg3 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if (items < 2) {
+ SWIG_croak("Usage: svn_checksum_mismatch_err(expected,actual,scratch_pool,fmt,...);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_checksum_mismatch_err" "', argument " "1"" of type '" "svn_checksum_t const *""'");
+ }
+ arg1 = (svn_checksum_t *)(argp1);
+ res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_checksum_mismatch_err" "', argument " "2"" of type '" "svn_checksum_t const *""'");
+ }
+ arg2 = (svn_checksum_t *)(argp2);
+ if (items > 2) {
+
+ }
+ if (items > 3) {
+ res4 = SWIG_AsCharPtrAndSize(ST(3), &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_checksum_mismatch_err" "', argument " "4"" of type '" "char const *""'");
+ }
+ arg4 = (char *)(buf4);
+ }
+ {
+ result = (svn_error_t *)svn_checksum_mismatch_err((struct svn_checksum_t const *)arg1,(struct svn_checksum_t const *)arg2,arg3,(char const *)arg4,arg5);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ XSRETURN(argvi);
+ fail:
+
+
+
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_auth_set_gnome_keyring_unlock_prompt_func) {
+ {
+ svn_auth_baton_t *arg1 = (svn_auth_baton_t *) 0 ;
+ svn_auth_gnome_keyring_unlock_prompt_func_t arg2 = (svn_auth_gnome_keyring_unlock_prompt_func_t) 0 ;
+ void *arg3 = (void *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ SV *_global_callback ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_auth_set_gnome_keyring_unlock_prompt_func(ab,prompt_func,prompt_baton);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_auth_baton_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_auth_set_gnome_keyring_unlock_prompt_func" "', argument " "1"" of type '" "svn_auth_baton_t *""'");
+ }
+ arg1 = (svn_auth_baton_t *)(argp1);
+ {
+ arg2 = svn_swig_pl_thunk_gnome_keyring_unlock_prompt;
+ arg3 = ST(1);
+ _global_callback = ST(1);
+ }
+ {
+ svn_auth_set_gnome_keyring_unlock_prompt_func(arg1,arg2,arg3);
+
+
+
+ }
+ ST(argvi) = sv_newmortal();
+ {
+ /* callback baton */
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = sv_2mortal(newRV_inc(_global_callback)); argvi++ ;
+ }
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_md5_empty_string_digest) {
{
int argvi = 0;
@@ -30414,7 +34866,7 @@ XS(_wrap_svn_diff_version) {
XS(_wrap_svn_diff_fns2_t_datasources_open_set) {
{
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_off_t *,apr_off_t *,svn_diff_datasource_e const *,apr_size_t) = (svn_error_t *(*)(void *,apr_off_t *,apr_off_t *,svn_diff_datasource_e const *,apr_size_t)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -30426,9 +34878,9 @@ XS(_wrap_svn_diff_fns2_t_datasources_open_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_fns2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns2_t_datasources_open_set" "', argument " "1"" of type '" "svn_diff_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns2_t_datasources_open_set" "', argument " "1"" of type '" "struct svn_diff_fns2_t *""'");
}
- arg1 = (svn_diff_fns2_t *)(argp1);
+ arg1 = (struct svn_diff_fns2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_apr_off_t_p_apr_off_t_p_q_const__svn_diff_datasource_e_apr_size_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -30450,7 +34902,7 @@ XS(_wrap_svn_diff_fns2_t_datasources_open_set) {
XS(_wrap_svn_diff_fns2_t_datasources_open_get) {
{
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -30462,9 +34914,9 @@ XS(_wrap_svn_diff_fns2_t_datasources_open_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_fns2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns2_t_datasources_open_get" "', argument " "1"" of type '" "svn_diff_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns2_t_datasources_open_get" "', argument " "1"" of type '" "struct svn_diff_fns2_t *""'");
}
- arg1 = (svn_diff_fns2_t *)(argp1);
+ arg1 = (struct svn_diff_fns2_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_off_t *,apr_off_t *,svn_diff_datasource_e const *,apr_size_t)) ((arg1)->datasources_open);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_apr_off_t_p_apr_off_t_p_q_const__svn_diff_datasource_e_apr_size_t__p_svn_error_t); argvi++ ;
@@ -30478,7 +34930,7 @@ XS(_wrap_svn_diff_fns2_t_datasources_open_get) {
XS(_wrap_svn_diff_fns2_t_datasource_close_set) {
{
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_diff_datasource_e) = (svn_error_t *(*)(void *,svn_diff_datasource_e)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -30490,9 +34942,9 @@ XS(_wrap_svn_diff_fns2_t_datasource_close_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_fns2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns2_t_datasource_close_set" "', argument " "1"" of type '" "svn_diff_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns2_t_datasource_close_set" "', argument " "1"" of type '" "struct svn_diff_fns2_t *""'");
}
- arg1 = (svn_diff_fns2_t *)(argp1);
+ arg1 = (struct svn_diff_fns2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_svn_diff_datasource_e__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -30514,7 +34966,7 @@ XS(_wrap_svn_diff_fns2_t_datasource_close_set) {
XS(_wrap_svn_diff_fns2_t_datasource_close_get) {
{
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -30526,9 +34978,9 @@ XS(_wrap_svn_diff_fns2_t_datasource_close_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_fns2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns2_t_datasource_close_get" "', argument " "1"" of type '" "svn_diff_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns2_t_datasource_close_get" "', argument " "1"" of type '" "struct svn_diff_fns2_t *""'");
}
- arg1 = (svn_diff_fns2_t *)(argp1);
+ arg1 = (struct svn_diff_fns2_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_diff_datasource_e)) ((arg1)->datasource_close);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_svn_diff_datasource_e__p_svn_error_t); argvi++ ;
@@ -30542,7 +34994,7 @@ XS(_wrap_svn_diff_fns2_t_datasource_close_get) {
XS(_wrap_svn_diff_fns2_t_datasource_get_next_token_set) {
{
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
svn_error_t *(*arg2)(apr_uint32_t *,void **,void *,svn_diff_datasource_e) = (svn_error_t *(*)(apr_uint32_t *,void **,void *,svn_diff_datasource_e)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -30554,9 +35006,9 @@ XS(_wrap_svn_diff_fns2_t_datasource_get_next_token_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_fns2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns2_t_datasource_get_next_token_set" "', argument " "1"" of type '" "svn_diff_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns2_t_datasource_get_next_token_set" "', argument " "1"" of type '" "struct svn_diff_fns2_t *""'");
}
- arg1 = (svn_diff_fns2_t *)(argp1);
+ arg1 = (struct svn_diff_fns2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_apr_uint32_t_p_p_void_p_void_svn_diff_datasource_e__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -30578,7 +35030,7 @@ XS(_wrap_svn_diff_fns2_t_datasource_get_next_token_set) {
XS(_wrap_svn_diff_fns2_t_datasource_get_next_token_get) {
{
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -30590,9 +35042,9 @@ XS(_wrap_svn_diff_fns2_t_datasource_get_next_token_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_fns2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns2_t_datasource_get_next_token_get" "', argument " "1"" of type '" "svn_diff_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns2_t_datasource_get_next_token_get" "', argument " "1"" of type '" "struct svn_diff_fns2_t *""'");
}
- arg1 = (svn_diff_fns2_t *)(argp1);
+ arg1 = (struct svn_diff_fns2_t *)(argp1);
result = (svn_error_t *(*)(apr_uint32_t *,void **,void *,svn_diff_datasource_e)) ((arg1)->datasource_get_next_token);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_apr_uint32_t_p_p_void_p_void_svn_diff_datasource_e__p_svn_error_t); argvi++ ;
@@ -30606,7 +35058,7 @@ XS(_wrap_svn_diff_fns2_t_datasource_get_next_token_get) {
XS(_wrap_svn_diff_fns2_t_token_compare_set) {
{
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
svn_error_t *(*arg2)(void *,void *,void *,int *) = (svn_error_t *(*)(void *,void *,void *,int *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -30618,9 +35070,9 @@ XS(_wrap_svn_diff_fns2_t_token_compare_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_fns2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns2_t_token_compare_set" "', argument " "1"" of type '" "svn_diff_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns2_t_token_compare_set" "', argument " "1"" of type '" "struct svn_diff_fns2_t *""'");
}
- arg1 = (svn_diff_fns2_t *)(argp1);
+ arg1 = (struct svn_diff_fns2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_void_p_void_p_int__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -30642,7 +35094,7 @@ XS(_wrap_svn_diff_fns2_t_token_compare_set) {
XS(_wrap_svn_diff_fns2_t_token_compare_get) {
{
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -30654,9 +35106,9 @@ XS(_wrap_svn_diff_fns2_t_token_compare_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_fns2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns2_t_token_compare_get" "', argument " "1"" of type '" "svn_diff_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns2_t_token_compare_get" "', argument " "1"" of type '" "struct svn_diff_fns2_t *""'");
}
- arg1 = (svn_diff_fns2_t *)(argp1);
+ arg1 = (struct svn_diff_fns2_t *)(argp1);
result = (svn_error_t *(*)(void *,void *,void *,int *)) ((arg1)->token_compare);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_void_p_void_p_int__p_svn_error_t); argvi++ ;
@@ -30670,7 +35122,7 @@ XS(_wrap_svn_diff_fns2_t_token_compare_get) {
XS(_wrap_svn_diff_fns2_t_token_discard_set) {
{
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
void (*arg2)(void *,void *) = (void (*)(void *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -30682,9 +35134,9 @@ XS(_wrap_svn_diff_fns2_t_token_discard_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_fns2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns2_t_token_discard_set" "', argument " "1"" of type '" "svn_diff_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns2_t_token_discard_set" "', argument " "1"" of type '" "struct svn_diff_fns2_t *""'");
}
- arg1 = (svn_diff_fns2_t *)(argp1);
+ arg1 = (struct svn_diff_fns2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_void__void);
if (!SWIG_IsOK(res)) {
@@ -30706,7 +35158,7 @@ XS(_wrap_svn_diff_fns2_t_token_discard_set) {
XS(_wrap_svn_diff_fns2_t_token_discard_get) {
{
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -30718,9 +35170,9 @@ XS(_wrap_svn_diff_fns2_t_token_discard_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_fns2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns2_t_token_discard_get" "', argument " "1"" of type '" "svn_diff_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns2_t_token_discard_get" "', argument " "1"" of type '" "struct svn_diff_fns2_t *""'");
}
- arg1 = (svn_diff_fns2_t *)(argp1);
+ arg1 = (struct svn_diff_fns2_t *)(argp1);
result = (void (*)(void *,void *)) ((arg1)->token_discard);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_void__void); argvi++ ;
@@ -30734,7 +35186,7 @@ XS(_wrap_svn_diff_fns2_t_token_discard_get) {
XS(_wrap_svn_diff_fns2_t_token_discard_all_set) {
{
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
void (*arg2)(void *) = (void (*)(void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -30746,9 +35198,9 @@ XS(_wrap_svn_diff_fns2_t_token_discard_all_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_fns2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns2_t_token_discard_all_set" "', argument " "1"" of type '" "svn_diff_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns2_t_token_discard_all_set" "', argument " "1"" of type '" "struct svn_diff_fns2_t *""'");
}
- arg1 = (svn_diff_fns2_t *)(argp1);
+ arg1 = (struct svn_diff_fns2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void__void);
if (!SWIG_IsOK(res)) {
@@ -30770,7 +35222,7 @@ XS(_wrap_svn_diff_fns2_t_token_discard_all_set) {
XS(_wrap_svn_diff_fns2_t_token_discard_all_get) {
{
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -30782,9 +35234,9 @@ XS(_wrap_svn_diff_fns2_t_token_discard_all_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_fns2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns2_t_token_discard_all_get" "', argument " "1"" of type '" "svn_diff_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns2_t_token_discard_all_get" "', argument " "1"" of type '" "struct svn_diff_fns2_t *""'");
}
- arg1 = (svn_diff_fns2_t *)(argp1);
+ arg1 = (struct svn_diff_fns2_t *)(argp1);
result = (void (*)(void *)) ((arg1)->token_discard_all);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__void); argvi++ ;
@@ -30799,14 +35251,14 @@ XS(_wrap_svn_diff_fns2_t_token_discard_all_get) {
XS(_wrap_new_svn_diff_fns2_t) {
{
int argvi = 0;
- svn_diff_fns2_t *result = 0 ;
+ struct svn_diff_fns2_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_diff_fns2_t();");
}
{
- result = (svn_diff_fns2_t *)calloc(1, sizeof(svn_diff_fns2_t));
+ result = (struct svn_diff_fns2_t *)calloc(1, sizeof(struct svn_diff_fns2_t));
@@ -30821,7 +35273,7 @@ XS(_wrap_new_svn_diff_fns2_t) {
XS(_wrap_delete_svn_diff_fns2_t) {
{
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -30832,9 +35284,9 @@ XS(_wrap_delete_svn_diff_fns2_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_fns2_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_diff_fns2_t" "', argument " "1"" of type '" "svn_diff_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_diff_fns2_t" "', argument " "1"" of type '" "struct svn_diff_fns2_t *""'");
}
- arg1 = (svn_diff_fns2_t *)(argp1);
+ arg1 = (struct svn_diff_fns2_t *)(argp1);
{
free((char *) arg1);
@@ -30853,7 +35305,7 @@ XS(_wrap_delete_svn_diff_fns2_t) {
XS(_wrap_svn_diff_fns_t_datasource_open_set) {
{
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_diff_datasource_e) = (svn_error_t *(*)(void *,svn_diff_datasource_e)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -30865,9 +35317,9 @@ XS(_wrap_svn_diff_fns_t_datasource_open_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns_t_datasource_open_set" "', argument " "1"" of type '" "svn_diff_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns_t_datasource_open_set" "', argument " "1"" of type '" "struct svn_diff_fns_t *""'");
}
- arg1 = (svn_diff_fns_t *)(argp1);
+ arg1 = (struct svn_diff_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_svn_diff_datasource_e__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -30889,7 +35341,7 @@ XS(_wrap_svn_diff_fns_t_datasource_open_set) {
XS(_wrap_svn_diff_fns_t_datasource_open_get) {
{
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -30901,9 +35353,9 @@ XS(_wrap_svn_diff_fns_t_datasource_open_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns_t_datasource_open_get" "', argument " "1"" of type '" "svn_diff_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns_t_datasource_open_get" "', argument " "1"" of type '" "struct svn_diff_fns_t *""'");
}
- arg1 = (svn_diff_fns_t *)(argp1);
+ arg1 = (struct svn_diff_fns_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_diff_datasource_e)) ((arg1)->datasource_open);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_svn_diff_datasource_e__p_svn_error_t); argvi++ ;
@@ -30917,7 +35369,7 @@ XS(_wrap_svn_diff_fns_t_datasource_open_get) {
XS(_wrap_svn_diff_fns_t_datasource_close_set) {
{
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_diff_datasource_e) = (svn_error_t *(*)(void *,svn_diff_datasource_e)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -30929,9 +35381,9 @@ XS(_wrap_svn_diff_fns_t_datasource_close_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns_t_datasource_close_set" "', argument " "1"" of type '" "svn_diff_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns_t_datasource_close_set" "', argument " "1"" of type '" "struct svn_diff_fns_t *""'");
}
- arg1 = (svn_diff_fns_t *)(argp1);
+ arg1 = (struct svn_diff_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_svn_diff_datasource_e__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -30953,7 +35405,7 @@ XS(_wrap_svn_diff_fns_t_datasource_close_set) {
XS(_wrap_svn_diff_fns_t_datasource_close_get) {
{
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -30965,9 +35417,9 @@ XS(_wrap_svn_diff_fns_t_datasource_close_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns_t_datasource_close_get" "', argument " "1"" of type '" "svn_diff_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns_t_datasource_close_get" "', argument " "1"" of type '" "struct svn_diff_fns_t *""'");
}
- arg1 = (svn_diff_fns_t *)(argp1);
+ arg1 = (struct svn_diff_fns_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_diff_datasource_e)) ((arg1)->datasource_close);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_svn_diff_datasource_e__p_svn_error_t); argvi++ ;
@@ -30981,7 +35433,7 @@ XS(_wrap_svn_diff_fns_t_datasource_close_get) {
XS(_wrap_svn_diff_fns_t_datasource_get_next_token_set) {
{
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
svn_error_t *(*arg2)(apr_uint32_t *,void **,void *,svn_diff_datasource_e) = (svn_error_t *(*)(apr_uint32_t *,void **,void *,svn_diff_datasource_e)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -30993,9 +35445,9 @@ XS(_wrap_svn_diff_fns_t_datasource_get_next_token_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns_t_datasource_get_next_token_set" "', argument " "1"" of type '" "svn_diff_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns_t_datasource_get_next_token_set" "', argument " "1"" of type '" "struct svn_diff_fns_t *""'");
}
- arg1 = (svn_diff_fns_t *)(argp1);
+ arg1 = (struct svn_diff_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_apr_uint32_t_p_p_void_p_void_svn_diff_datasource_e__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -31017,7 +35469,7 @@ XS(_wrap_svn_diff_fns_t_datasource_get_next_token_set) {
XS(_wrap_svn_diff_fns_t_datasource_get_next_token_get) {
{
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -31029,9 +35481,9 @@ XS(_wrap_svn_diff_fns_t_datasource_get_next_token_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns_t_datasource_get_next_token_get" "', argument " "1"" of type '" "svn_diff_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns_t_datasource_get_next_token_get" "', argument " "1"" of type '" "struct svn_diff_fns_t *""'");
}
- arg1 = (svn_diff_fns_t *)(argp1);
+ arg1 = (struct svn_diff_fns_t *)(argp1);
result = (svn_error_t *(*)(apr_uint32_t *,void **,void *,svn_diff_datasource_e)) ((arg1)->datasource_get_next_token);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_apr_uint32_t_p_p_void_p_void_svn_diff_datasource_e__p_svn_error_t); argvi++ ;
@@ -31045,7 +35497,7 @@ XS(_wrap_svn_diff_fns_t_datasource_get_next_token_get) {
XS(_wrap_svn_diff_fns_t_token_compare_set) {
{
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,void *,void *,int *) = (svn_error_t *(*)(void *,void *,void *,int *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -31057,9 +35509,9 @@ XS(_wrap_svn_diff_fns_t_token_compare_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns_t_token_compare_set" "', argument " "1"" of type '" "svn_diff_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns_t_token_compare_set" "', argument " "1"" of type '" "struct svn_diff_fns_t *""'");
}
- arg1 = (svn_diff_fns_t *)(argp1);
+ arg1 = (struct svn_diff_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_void_p_void_p_int__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -31081,7 +35533,7 @@ XS(_wrap_svn_diff_fns_t_token_compare_set) {
XS(_wrap_svn_diff_fns_t_token_compare_get) {
{
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -31093,9 +35545,9 @@ XS(_wrap_svn_diff_fns_t_token_compare_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns_t_token_compare_get" "', argument " "1"" of type '" "svn_diff_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns_t_token_compare_get" "', argument " "1"" of type '" "struct svn_diff_fns_t *""'");
}
- arg1 = (svn_diff_fns_t *)(argp1);
+ arg1 = (struct svn_diff_fns_t *)(argp1);
result = (svn_error_t *(*)(void *,void *,void *,int *)) ((arg1)->token_compare);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_void_p_void_p_int__p_svn_error_t); argvi++ ;
@@ -31109,7 +35561,7 @@ XS(_wrap_svn_diff_fns_t_token_compare_get) {
XS(_wrap_svn_diff_fns_t_token_discard_set) {
{
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
void (*arg2)(void *,void *) = (void (*)(void *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -31121,9 +35573,9 @@ XS(_wrap_svn_diff_fns_t_token_discard_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns_t_token_discard_set" "', argument " "1"" of type '" "svn_diff_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns_t_token_discard_set" "', argument " "1"" of type '" "struct svn_diff_fns_t *""'");
}
- arg1 = (svn_diff_fns_t *)(argp1);
+ arg1 = (struct svn_diff_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_void__void);
if (!SWIG_IsOK(res)) {
@@ -31145,7 +35597,7 @@ XS(_wrap_svn_diff_fns_t_token_discard_set) {
XS(_wrap_svn_diff_fns_t_token_discard_get) {
{
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -31157,9 +35609,9 @@ XS(_wrap_svn_diff_fns_t_token_discard_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns_t_token_discard_get" "', argument " "1"" of type '" "svn_diff_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns_t_token_discard_get" "', argument " "1"" of type '" "struct svn_diff_fns_t *""'");
}
- arg1 = (svn_diff_fns_t *)(argp1);
+ arg1 = (struct svn_diff_fns_t *)(argp1);
result = (void (*)(void *,void *)) ((arg1)->token_discard);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_void__void); argvi++ ;
@@ -31173,7 +35625,7 @@ XS(_wrap_svn_diff_fns_t_token_discard_get) {
XS(_wrap_svn_diff_fns_t_token_discard_all_set) {
{
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
void (*arg2)(void *) = (void (*)(void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -31185,9 +35637,9 @@ XS(_wrap_svn_diff_fns_t_token_discard_all_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns_t_token_discard_all_set" "', argument " "1"" of type '" "svn_diff_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns_t_token_discard_all_set" "', argument " "1"" of type '" "struct svn_diff_fns_t *""'");
}
- arg1 = (svn_diff_fns_t *)(argp1);
+ arg1 = (struct svn_diff_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void__void);
if (!SWIG_IsOK(res)) {
@@ -31209,7 +35661,7 @@ XS(_wrap_svn_diff_fns_t_token_discard_all_set) {
XS(_wrap_svn_diff_fns_t_token_discard_all_get) {
{
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -31221,9 +35673,9 @@ XS(_wrap_svn_diff_fns_t_token_discard_all_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns_t_token_discard_all_get" "', argument " "1"" of type '" "svn_diff_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_fns_t_token_discard_all_get" "', argument " "1"" of type '" "struct svn_diff_fns_t *""'");
}
- arg1 = (svn_diff_fns_t *)(argp1);
+ arg1 = (struct svn_diff_fns_t *)(argp1);
result = (void (*)(void *)) ((arg1)->token_discard_all);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__void); argvi++ ;
@@ -31238,14 +35690,14 @@ XS(_wrap_svn_diff_fns_t_token_discard_all_get) {
XS(_wrap_new_svn_diff_fns_t) {
{
int argvi = 0;
- svn_diff_fns_t *result = 0 ;
+ struct svn_diff_fns_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_diff_fns_t();");
}
{
- result = (svn_diff_fns_t *)calloc(1, sizeof(svn_diff_fns_t));
+ result = (struct svn_diff_fns_t *)calloc(1, sizeof(struct svn_diff_fns_t));
@@ -31260,7 +35712,7 @@ XS(_wrap_new_svn_diff_fns_t) {
XS(_wrap_delete_svn_diff_fns_t) {
{
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -31271,9 +35723,9 @@ XS(_wrap_delete_svn_diff_fns_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_fns_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_diff_fns_t" "', argument " "1"" of type '" "svn_diff_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_diff_fns_t" "', argument " "1"" of type '" "struct svn_diff_fns_t *""'");
}
- arg1 = (svn_diff_fns_t *)(argp1);
+ arg1 = (struct svn_diff_fns_t *)(argp1);
{
free((char *) arg1);
@@ -31802,7 +36254,7 @@ XS(_wrap_svn_diff_contains_diffs) {
XS(_wrap_svn_diff_output_fns_t_output_common_set) {
{
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t) = (svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -31814,9 +36266,9 @@ XS(_wrap_svn_diff_output_fns_t_output_common_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_output_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_output_fns_t_output_common_set" "', argument " "1"" of type '" "svn_diff_output_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_output_fns_t_output_common_set" "', argument " "1"" of type '" "struct svn_diff_output_fns_t *""'");
}
- arg1 = (svn_diff_output_fns_t *)(argp1);
+ arg1 = (struct svn_diff_output_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -31838,7 +36290,7 @@ XS(_wrap_svn_diff_output_fns_t_output_common_set) {
XS(_wrap_svn_diff_output_fns_t_output_common_get) {
{
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -31850,9 +36302,9 @@ XS(_wrap_svn_diff_output_fns_t_output_common_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_output_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_output_fns_t_output_common_get" "', argument " "1"" of type '" "svn_diff_output_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_output_fns_t_output_common_get" "', argument " "1"" of type '" "struct svn_diff_output_fns_t *""'");
}
- arg1 = (svn_diff_output_fns_t *)(argp1);
+ arg1 = (struct svn_diff_output_fns_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t)) ((arg1)->output_common);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t__p_svn_error_t); argvi++ ;
@@ -31866,7 +36318,7 @@ XS(_wrap_svn_diff_output_fns_t_output_common_get) {
XS(_wrap_svn_diff_output_fns_t_output_diff_modified_set) {
{
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t) = (svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -31878,9 +36330,9 @@ XS(_wrap_svn_diff_output_fns_t_output_diff_modified_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_output_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_output_fns_t_output_diff_modified_set" "', argument " "1"" of type '" "svn_diff_output_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_output_fns_t_output_diff_modified_set" "', argument " "1"" of type '" "struct svn_diff_output_fns_t *""'");
}
- arg1 = (svn_diff_output_fns_t *)(argp1);
+ arg1 = (struct svn_diff_output_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -31902,7 +36354,7 @@ XS(_wrap_svn_diff_output_fns_t_output_diff_modified_set) {
XS(_wrap_svn_diff_output_fns_t_output_diff_modified_get) {
{
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -31914,9 +36366,9 @@ XS(_wrap_svn_diff_output_fns_t_output_diff_modified_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_output_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_output_fns_t_output_diff_modified_get" "', argument " "1"" of type '" "svn_diff_output_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_output_fns_t_output_diff_modified_get" "', argument " "1"" of type '" "struct svn_diff_output_fns_t *""'");
}
- arg1 = (svn_diff_output_fns_t *)(argp1);
+ arg1 = (struct svn_diff_output_fns_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t)) ((arg1)->output_diff_modified);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t__p_svn_error_t); argvi++ ;
@@ -31930,7 +36382,7 @@ XS(_wrap_svn_diff_output_fns_t_output_diff_modified_get) {
XS(_wrap_svn_diff_output_fns_t_output_diff_latest_set) {
{
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t) = (svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -31942,9 +36394,9 @@ XS(_wrap_svn_diff_output_fns_t_output_diff_latest_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_output_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_output_fns_t_output_diff_latest_set" "', argument " "1"" of type '" "svn_diff_output_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_output_fns_t_output_diff_latest_set" "', argument " "1"" of type '" "struct svn_diff_output_fns_t *""'");
}
- arg1 = (svn_diff_output_fns_t *)(argp1);
+ arg1 = (struct svn_diff_output_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -31966,7 +36418,7 @@ XS(_wrap_svn_diff_output_fns_t_output_diff_latest_set) {
XS(_wrap_svn_diff_output_fns_t_output_diff_latest_get) {
{
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -31978,9 +36430,9 @@ XS(_wrap_svn_diff_output_fns_t_output_diff_latest_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_output_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_output_fns_t_output_diff_latest_get" "', argument " "1"" of type '" "svn_diff_output_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_output_fns_t_output_diff_latest_get" "', argument " "1"" of type '" "struct svn_diff_output_fns_t *""'");
}
- arg1 = (svn_diff_output_fns_t *)(argp1);
+ arg1 = (struct svn_diff_output_fns_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t)) ((arg1)->output_diff_latest);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t__p_svn_error_t); argvi++ ;
@@ -31994,7 +36446,7 @@ XS(_wrap_svn_diff_output_fns_t_output_diff_latest_get) {
XS(_wrap_svn_diff_output_fns_t_output_diff_common_set) {
{
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t) = (svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -32006,9 +36458,9 @@ XS(_wrap_svn_diff_output_fns_t_output_diff_common_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_output_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_output_fns_t_output_diff_common_set" "', argument " "1"" of type '" "svn_diff_output_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_output_fns_t_output_diff_common_set" "', argument " "1"" of type '" "struct svn_diff_output_fns_t *""'");
}
- arg1 = (svn_diff_output_fns_t *)(argp1);
+ arg1 = (struct svn_diff_output_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -32030,7 +36482,7 @@ XS(_wrap_svn_diff_output_fns_t_output_diff_common_set) {
XS(_wrap_svn_diff_output_fns_t_output_diff_common_get) {
{
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -32042,9 +36494,9 @@ XS(_wrap_svn_diff_output_fns_t_output_diff_common_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_output_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_output_fns_t_output_diff_common_get" "', argument " "1"" of type '" "svn_diff_output_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_output_fns_t_output_diff_common_get" "', argument " "1"" of type '" "struct svn_diff_output_fns_t *""'");
}
- arg1 = (svn_diff_output_fns_t *)(argp1);
+ arg1 = (struct svn_diff_output_fns_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t)) ((arg1)->output_diff_common);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t__p_svn_error_t); argvi++ ;
@@ -32058,7 +36510,7 @@ XS(_wrap_svn_diff_output_fns_t_output_diff_common_get) {
XS(_wrap_svn_diff_output_fns_t_output_conflict_set) {
{
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,svn_diff_t *) = (svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,svn_diff_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -32070,9 +36522,9 @@ XS(_wrap_svn_diff_output_fns_t_output_conflict_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_output_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_output_fns_t_output_conflict_set" "', argument " "1"" of type '" "svn_diff_output_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_output_fns_t_output_conflict_set" "', argument " "1"" of type '" "struct svn_diff_output_fns_t *""'");
}
- arg1 = (svn_diff_output_fns_t *)(argp1);
+ arg1 = (struct svn_diff_output_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_p_svn_diff_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -32094,7 +36546,7 @@ XS(_wrap_svn_diff_output_fns_t_output_conflict_set) {
XS(_wrap_svn_diff_output_fns_t_output_conflict_get) {
{
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -32106,9 +36558,9 @@ XS(_wrap_svn_diff_output_fns_t_output_conflict_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_output_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_output_fns_t_output_conflict_get" "', argument " "1"" of type '" "svn_diff_output_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_output_fns_t_output_conflict_get" "', argument " "1"" of type '" "struct svn_diff_output_fns_t *""'");
}
- arg1 = (svn_diff_output_fns_t *)(argp1);
+ arg1 = (struct svn_diff_output_fns_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,svn_diff_t *)) ((arg1)->output_conflict);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_p_svn_diff_t__p_svn_error_t); argvi++ ;
@@ -32123,14 +36575,14 @@ XS(_wrap_svn_diff_output_fns_t_output_conflict_get) {
XS(_wrap_new_svn_diff_output_fns_t) {
{
int argvi = 0;
- svn_diff_output_fns_t *result = 0 ;
+ struct svn_diff_output_fns_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_diff_output_fns_t();");
}
{
- result = (svn_diff_output_fns_t *)calloc(1, sizeof(svn_diff_output_fns_t));
+ result = (struct svn_diff_output_fns_t *)calloc(1, sizeof(struct svn_diff_output_fns_t));
@@ -32145,7 +36597,7 @@ XS(_wrap_new_svn_diff_output_fns_t) {
XS(_wrap_delete_svn_diff_output_fns_t) {
{
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -32156,9 +36608,9 @@ XS(_wrap_delete_svn_diff_output_fns_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_output_fns_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_diff_output_fns_t" "', argument " "1"" of type '" "svn_diff_output_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_diff_output_fns_t" "', argument " "1"" of type '" "struct svn_diff_output_fns_t *""'");
}
- arg1 = (svn_diff_output_fns_t *)(argp1);
+ arg1 = (struct svn_diff_output_fns_t *)(argp1);
{
free((char *) arg1);
@@ -32243,7 +36695,7 @@ XS(_wrap_svn_diff_output) {
XS(_wrap_svn_diff_file_options_t_ignore_space_set) {
{
- svn_diff_file_options_t *arg1 = (svn_diff_file_options_t *) 0 ;
+ struct svn_diff_file_options_t *arg1 = (struct svn_diff_file_options_t *) 0 ;
svn_diff_file_ignore_space_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -32257,9 +36709,9 @@ XS(_wrap_svn_diff_file_options_t_ignore_space_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_file_options_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_file_options_t_ignore_space_set" "', argument " "1"" of type '" "svn_diff_file_options_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_file_options_t_ignore_space_set" "', argument " "1"" of type '" "struct svn_diff_file_options_t *""'");
}
- arg1 = (svn_diff_file_options_t *)(argp1);
+ arg1 = (struct svn_diff_file_options_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_diff_file_options_t_ignore_space_set" "', argument " "2"" of type '" "svn_diff_file_ignore_space_t""'");
@@ -32280,7 +36732,7 @@ XS(_wrap_svn_diff_file_options_t_ignore_space_set) {
XS(_wrap_svn_diff_file_options_t_ignore_space_get) {
{
- svn_diff_file_options_t *arg1 = (svn_diff_file_options_t *) 0 ;
+ struct svn_diff_file_options_t *arg1 = (struct svn_diff_file_options_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -32292,9 +36744,9 @@ XS(_wrap_svn_diff_file_options_t_ignore_space_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_file_options_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_file_options_t_ignore_space_get" "', argument " "1"" of type '" "svn_diff_file_options_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_file_options_t_ignore_space_get" "', argument " "1"" of type '" "struct svn_diff_file_options_t *""'");
}
- arg1 = (svn_diff_file_options_t *)(argp1);
+ arg1 = (struct svn_diff_file_options_t *)(argp1);
result = (svn_diff_file_ignore_space_t) ((arg1)->ignore_space);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -32308,7 +36760,7 @@ XS(_wrap_svn_diff_file_options_t_ignore_space_get) {
XS(_wrap_svn_diff_file_options_t_ignore_eol_style_set) {
{
- svn_diff_file_options_t *arg1 = (svn_diff_file_options_t *) 0 ;
+ struct svn_diff_file_options_t *arg1 = (struct svn_diff_file_options_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -32322,9 +36774,9 @@ XS(_wrap_svn_diff_file_options_t_ignore_eol_style_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_file_options_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_file_options_t_ignore_eol_style_set" "', argument " "1"" of type '" "svn_diff_file_options_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_file_options_t_ignore_eol_style_set" "', argument " "1"" of type '" "struct svn_diff_file_options_t *""'");
}
- arg1 = (svn_diff_file_options_t *)(argp1);
+ arg1 = (struct svn_diff_file_options_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_diff_file_options_t_ignore_eol_style_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -32345,7 +36797,7 @@ XS(_wrap_svn_diff_file_options_t_ignore_eol_style_set) {
XS(_wrap_svn_diff_file_options_t_ignore_eol_style_get) {
{
- svn_diff_file_options_t *arg1 = (svn_diff_file_options_t *) 0 ;
+ struct svn_diff_file_options_t *arg1 = (struct svn_diff_file_options_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -32357,9 +36809,9 @@ XS(_wrap_svn_diff_file_options_t_ignore_eol_style_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_file_options_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_file_options_t_ignore_eol_style_get" "', argument " "1"" of type '" "svn_diff_file_options_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_file_options_t_ignore_eol_style_get" "', argument " "1"" of type '" "struct svn_diff_file_options_t *""'");
}
- arg1 = (svn_diff_file_options_t *)(argp1);
+ arg1 = (struct svn_diff_file_options_t *)(argp1);
result = (svn_boolean_t) ((arg1)->ignore_eol_style);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -32373,7 +36825,7 @@ XS(_wrap_svn_diff_file_options_t_ignore_eol_style_get) {
XS(_wrap_svn_diff_file_options_t_show_c_function_set) {
{
- svn_diff_file_options_t *arg1 = (svn_diff_file_options_t *) 0 ;
+ struct svn_diff_file_options_t *arg1 = (struct svn_diff_file_options_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -32387,9 +36839,9 @@ XS(_wrap_svn_diff_file_options_t_show_c_function_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_file_options_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_file_options_t_show_c_function_set" "', argument " "1"" of type '" "svn_diff_file_options_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_file_options_t_show_c_function_set" "', argument " "1"" of type '" "struct svn_diff_file_options_t *""'");
}
- arg1 = (svn_diff_file_options_t *)(argp1);
+ arg1 = (struct svn_diff_file_options_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_diff_file_options_t_show_c_function_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -32410,7 +36862,7 @@ XS(_wrap_svn_diff_file_options_t_show_c_function_set) {
XS(_wrap_svn_diff_file_options_t_show_c_function_get) {
{
- svn_diff_file_options_t *arg1 = (svn_diff_file_options_t *) 0 ;
+ struct svn_diff_file_options_t *arg1 = (struct svn_diff_file_options_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -32422,9 +36874,9 @@ XS(_wrap_svn_diff_file_options_t_show_c_function_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_file_options_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_file_options_t_show_c_function_get" "', argument " "1"" of type '" "svn_diff_file_options_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_diff_file_options_t_show_c_function_get" "', argument " "1"" of type '" "struct svn_diff_file_options_t *""'");
}
- arg1 = (svn_diff_file_options_t *)(argp1);
+ arg1 = (struct svn_diff_file_options_t *)(argp1);
result = (svn_boolean_t) ((arg1)->show_c_function);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -32439,14 +36891,14 @@ XS(_wrap_svn_diff_file_options_t_show_c_function_get) {
XS(_wrap_new_svn_diff_file_options_t) {
{
int argvi = 0;
- svn_diff_file_options_t *result = 0 ;
+ struct svn_diff_file_options_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_diff_file_options_t();");
}
{
- result = (svn_diff_file_options_t *)calloc(1, sizeof(svn_diff_file_options_t));
+ result = (struct svn_diff_file_options_t *)calloc(1, sizeof(struct svn_diff_file_options_t));
@@ -32461,7 +36913,7 @@ XS(_wrap_new_svn_diff_file_options_t) {
XS(_wrap_delete_svn_diff_file_options_t) {
{
- svn_diff_file_options_t *arg1 = (svn_diff_file_options_t *) 0 ;
+ struct svn_diff_file_options_t *arg1 = (struct svn_diff_file_options_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -32472,9 +36924,9 @@ XS(_wrap_delete_svn_diff_file_options_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_diff_file_options_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_diff_file_options_t" "', argument " "1"" of type '" "svn_diff_file_options_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_diff_file_options_t" "', argument " "1"" of type '" "struct svn_diff_file_options_t *""'");
}
- arg1 = (svn_diff_file_options_t *)(argp1);
+ arg1 = (struct svn_diff_file_options_t *)(argp1);
{
free((char *) arg1);
@@ -35343,7 +39795,7 @@ XS(_wrap_svn_diff_hunk_get_trailing_context) {
XS(_wrap_svn_prop_patch_t_name_set) {
{
- svn_prop_patch_t *arg1 = (svn_prop_patch_t *) 0 ;
+ struct svn_prop_patch_t *arg1 = (struct svn_prop_patch_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -35358,9 +39810,9 @@ XS(_wrap_svn_prop_patch_t_name_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_prop_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_prop_patch_t_name_set" "', argument " "1"" of type '" "svn_prop_patch_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_prop_patch_t_name_set" "', argument " "1"" of type '" "struct svn_prop_patch_t *""'");
}
- arg1 = (svn_prop_patch_t *)(argp1);
+ arg1 = (struct svn_prop_patch_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_prop_patch_t_name_set" "', argument " "2"" of type '" "char const *""'");
@@ -35388,7 +39840,7 @@ XS(_wrap_svn_prop_patch_t_name_set) {
XS(_wrap_svn_prop_patch_t_name_get) {
{
- svn_prop_patch_t *arg1 = (svn_prop_patch_t *) 0 ;
+ struct svn_prop_patch_t *arg1 = (struct svn_prop_patch_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -35400,9 +39852,9 @@ XS(_wrap_svn_prop_patch_t_name_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_prop_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_prop_patch_t_name_get" "', argument " "1"" of type '" "svn_prop_patch_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_prop_patch_t_name_get" "', argument " "1"" of type '" "struct svn_prop_patch_t *""'");
}
- arg1 = (svn_prop_patch_t *)(argp1);
+ arg1 = (struct svn_prop_patch_t *)(argp1);
result = (char *) ((arg1)->name);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -35416,7 +39868,7 @@ XS(_wrap_svn_prop_patch_t_name_get) {
XS(_wrap_svn_prop_patch_t_operation_set) {
{
- svn_prop_patch_t *arg1 = (svn_prop_patch_t *) 0 ;
+ struct svn_prop_patch_t *arg1 = (struct svn_prop_patch_t *) 0 ;
svn_diff_operation_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -35430,9 +39882,9 @@ XS(_wrap_svn_prop_patch_t_operation_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_prop_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_prop_patch_t_operation_set" "', argument " "1"" of type '" "svn_prop_patch_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_prop_patch_t_operation_set" "', argument " "1"" of type '" "struct svn_prop_patch_t *""'");
}
- arg1 = (svn_prop_patch_t *)(argp1);
+ arg1 = (struct svn_prop_patch_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_prop_patch_t_operation_set" "', argument " "2"" of type '" "svn_diff_operation_kind_t""'");
@@ -35453,7 +39905,7 @@ XS(_wrap_svn_prop_patch_t_operation_set) {
XS(_wrap_svn_prop_patch_t_operation_get) {
{
- svn_prop_patch_t *arg1 = (svn_prop_patch_t *) 0 ;
+ struct svn_prop_patch_t *arg1 = (struct svn_prop_patch_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -35465,9 +39917,9 @@ XS(_wrap_svn_prop_patch_t_operation_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_prop_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_prop_patch_t_operation_get" "', argument " "1"" of type '" "svn_prop_patch_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_prop_patch_t_operation_get" "', argument " "1"" of type '" "struct svn_prop_patch_t *""'");
}
- arg1 = (svn_prop_patch_t *)(argp1);
+ arg1 = (struct svn_prop_patch_t *)(argp1);
result = (svn_diff_operation_kind_t) ((arg1)->operation);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -35481,7 +39933,7 @@ XS(_wrap_svn_prop_patch_t_operation_get) {
XS(_wrap_svn_prop_patch_t_hunks_set) {
{
- svn_prop_patch_t *arg1 = (svn_prop_patch_t *) 0 ;
+ struct svn_prop_patch_t *arg1 = (struct svn_prop_patch_t *) 0 ;
apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -35495,9 +39947,9 @@ XS(_wrap_svn_prop_patch_t_hunks_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_prop_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_prop_patch_t_hunks_set" "', argument " "1"" of type '" "svn_prop_patch_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_prop_patch_t_hunks_set" "', argument " "1"" of type '" "struct svn_prop_patch_t *""'");
}
- arg1 = (svn_prop_patch_t *)(argp1);
+ arg1 = (struct svn_prop_patch_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_apr_array_header_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_prop_patch_t_hunks_set" "', argument " "2"" of type '" "apr_array_header_t *""'");
@@ -35518,7 +39970,7 @@ XS(_wrap_svn_prop_patch_t_hunks_set) {
XS(_wrap_svn_prop_patch_t_hunks_get) {
{
- svn_prop_patch_t *arg1 = (svn_prop_patch_t *) 0 ;
+ struct svn_prop_patch_t *arg1 = (struct svn_prop_patch_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -35530,9 +39982,9 @@ XS(_wrap_svn_prop_patch_t_hunks_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_prop_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_prop_patch_t_hunks_get" "', argument " "1"" of type '" "svn_prop_patch_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_prop_patch_t_hunks_get" "', argument " "1"" of type '" "struct svn_prop_patch_t *""'");
}
- arg1 = (svn_prop_patch_t *)(argp1);
+ arg1 = (struct svn_prop_patch_t *)(argp1);
result = (apr_array_header_t *) ((arg1)->hunks);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_array_header_t, 0 | 0); argvi++ ;
@@ -35547,14 +39999,14 @@ XS(_wrap_svn_prop_patch_t_hunks_get) {
XS(_wrap_new_svn_prop_patch_t) {
{
int argvi = 0;
- svn_prop_patch_t *result = 0 ;
+ struct svn_prop_patch_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_prop_patch_t();");
}
{
- result = (svn_prop_patch_t *)calloc(1, sizeof(svn_prop_patch_t));
+ result = (struct svn_prop_patch_t *)calloc(1, sizeof(struct svn_prop_patch_t));
@@ -35569,7 +40021,7 @@ XS(_wrap_new_svn_prop_patch_t) {
XS(_wrap_delete_svn_prop_patch_t) {
{
- svn_prop_patch_t *arg1 = (svn_prop_patch_t *) 0 ;
+ struct svn_prop_patch_t *arg1 = (struct svn_prop_patch_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -35580,9 +40032,9 @@ XS(_wrap_delete_svn_prop_patch_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_prop_patch_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_prop_patch_t" "', argument " "1"" of type '" "svn_prop_patch_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_prop_patch_t" "', argument " "1"" of type '" "struct svn_prop_patch_t *""'");
}
- arg1 = (svn_prop_patch_t *)(argp1);
+ arg1 = (struct svn_prop_patch_t *)(argp1);
{
free((char *) arg1);
@@ -35601,7 +40053,7 @@ XS(_wrap_delete_svn_prop_patch_t) {
XS(_wrap_svn_patch_t_old_filename_set) {
{
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -35616,9 +40068,9 @@ XS(_wrap_svn_patch_t_old_filename_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_patch_t_old_filename_set" "', argument " "1"" of type '" "svn_patch_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_patch_t_old_filename_set" "', argument " "1"" of type '" "struct svn_patch_t *""'");
}
- arg1 = (svn_patch_t *)(argp1);
+ arg1 = (struct svn_patch_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_patch_t_old_filename_set" "', argument " "2"" of type '" "char const *""'");
@@ -35646,7 +40098,7 @@ XS(_wrap_svn_patch_t_old_filename_set) {
XS(_wrap_svn_patch_t_old_filename_get) {
{
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -35658,9 +40110,9 @@ XS(_wrap_svn_patch_t_old_filename_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_patch_t_old_filename_get" "', argument " "1"" of type '" "svn_patch_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_patch_t_old_filename_get" "', argument " "1"" of type '" "struct svn_patch_t *""'");
}
- arg1 = (svn_patch_t *)(argp1);
+ arg1 = (struct svn_patch_t *)(argp1);
result = (char *) ((arg1)->old_filename);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -35674,7 +40126,7 @@ XS(_wrap_svn_patch_t_old_filename_get) {
XS(_wrap_svn_patch_t_new_filename_set) {
{
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -35689,9 +40141,9 @@ XS(_wrap_svn_patch_t_new_filename_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_patch_t_new_filename_set" "', argument " "1"" of type '" "svn_patch_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_patch_t_new_filename_set" "', argument " "1"" of type '" "struct svn_patch_t *""'");
}
- arg1 = (svn_patch_t *)(argp1);
+ arg1 = (struct svn_patch_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_patch_t_new_filename_set" "', argument " "2"" of type '" "char const *""'");
@@ -35719,7 +40171,7 @@ XS(_wrap_svn_patch_t_new_filename_set) {
XS(_wrap_svn_patch_t_new_filename_get) {
{
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -35731,9 +40183,9 @@ XS(_wrap_svn_patch_t_new_filename_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_patch_t_new_filename_get" "', argument " "1"" of type '" "svn_patch_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_patch_t_new_filename_get" "', argument " "1"" of type '" "struct svn_patch_t *""'");
}
- arg1 = (svn_patch_t *)(argp1);
+ arg1 = (struct svn_patch_t *)(argp1);
result = (char *) ((arg1)->new_filename);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -35747,7 +40199,7 @@ XS(_wrap_svn_patch_t_new_filename_get) {
XS(_wrap_svn_patch_t_hunks_set) {
{
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -35761,9 +40213,9 @@ XS(_wrap_svn_patch_t_hunks_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_patch_t_hunks_set" "', argument " "1"" of type '" "svn_patch_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_patch_t_hunks_set" "', argument " "1"" of type '" "struct svn_patch_t *""'");
}
- arg1 = (svn_patch_t *)(argp1);
+ arg1 = (struct svn_patch_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_apr_array_header_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_patch_t_hunks_set" "', argument " "2"" of type '" "apr_array_header_t *""'");
@@ -35784,7 +40236,7 @@ XS(_wrap_svn_patch_t_hunks_set) {
XS(_wrap_svn_patch_t_hunks_get) {
{
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -35796,9 +40248,9 @@ XS(_wrap_svn_patch_t_hunks_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_patch_t_hunks_get" "', argument " "1"" of type '" "svn_patch_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_patch_t_hunks_get" "', argument " "1"" of type '" "struct svn_patch_t *""'");
}
- arg1 = (svn_patch_t *)(argp1);
+ arg1 = (struct svn_patch_t *)(argp1);
result = (apr_array_header_t *) ((arg1)->hunks);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_array_header_t, 0 | 0); argvi++ ;
@@ -35812,7 +40264,7 @@ XS(_wrap_svn_patch_t_hunks_get) {
XS(_wrap_svn_patch_t_prop_patches_set) {
{
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
apr_hash_t *arg2 = (apr_hash_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -35826,9 +40278,9 @@ XS(_wrap_svn_patch_t_prop_patches_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_patch_t_prop_patches_set" "', argument " "1"" of type '" "svn_patch_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_patch_t_prop_patches_set" "', argument " "1"" of type '" "struct svn_patch_t *""'");
}
- arg1 = (svn_patch_t *)(argp1);
+ arg1 = (struct svn_patch_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_apr_hash_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_patch_t_prop_patches_set" "', argument " "2"" of type '" "apr_hash_t *""'");
@@ -35849,7 +40301,7 @@ XS(_wrap_svn_patch_t_prop_patches_set) {
XS(_wrap_svn_patch_t_prop_patches_get) {
{
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -35861,9 +40313,9 @@ XS(_wrap_svn_patch_t_prop_patches_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_patch_t_prop_patches_get" "', argument " "1"" of type '" "svn_patch_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_patch_t_prop_patches_get" "', argument " "1"" of type '" "struct svn_patch_t *""'");
}
- arg1 = (svn_patch_t *)(argp1);
+ arg1 = (struct svn_patch_t *)(argp1);
result = (apr_hash_t *) ((arg1)->prop_patches);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_hash_t, 0 | 0); argvi++ ;
@@ -35877,7 +40329,7 @@ XS(_wrap_svn_patch_t_prop_patches_get) {
XS(_wrap_svn_patch_t_operation_set) {
{
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
svn_diff_operation_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -35891,9 +40343,9 @@ XS(_wrap_svn_patch_t_operation_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_patch_t_operation_set" "', argument " "1"" of type '" "svn_patch_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_patch_t_operation_set" "', argument " "1"" of type '" "struct svn_patch_t *""'");
}
- arg1 = (svn_patch_t *)(argp1);
+ arg1 = (struct svn_patch_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_patch_t_operation_set" "', argument " "2"" of type '" "svn_diff_operation_kind_t""'");
@@ -35914,7 +40366,7 @@ XS(_wrap_svn_patch_t_operation_set) {
XS(_wrap_svn_patch_t_operation_get) {
{
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -35926,9 +40378,9 @@ XS(_wrap_svn_patch_t_operation_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_patch_t_operation_get" "', argument " "1"" of type '" "svn_patch_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_patch_t_operation_get" "', argument " "1"" of type '" "struct svn_patch_t *""'");
}
- arg1 = (svn_patch_t *)(argp1);
+ arg1 = (struct svn_patch_t *)(argp1);
result = (svn_diff_operation_kind_t) ((arg1)->operation);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -35942,7 +40394,7 @@ XS(_wrap_svn_patch_t_operation_get) {
XS(_wrap_svn_patch_t_reverse_set) {
{
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -35956,9 +40408,9 @@ XS(_wrap_svn_patch_t_reverse_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_patch_t_reverse_set" "', argument " "1"" of type '" "svn_patch_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_patch_t_reverse_set" "', argument " "1"" of type '" "struct svn_patch_t *""'");
}
- arg1 = (svn_patch_t *)(argp1);
+ arg1 = (struct svn_patch_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_patch_t_reverse_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -35979,7 +40431,7 @@ XS(_wrap_svn_patch_t_reverse_set) {
XS(_wrap_svn_patch_t_reverse_get) {
{
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -35991,9 +40443,9 @@ XS(_wrap_svn_patch_t_reverse_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_patch_t_reverse_get" "', argument " "1"" of type '" "svn_patch_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_patch_t_reverse_get" "', argument " "1"" of type '" "struct svn_patch_t *""'");
}
- arg1 = (svn_patch_t *)(argp1);
+ arg1 = (struct svn_patch_t *)(argp1);
result = (svn_boolean_t) ((arg1)->reverse);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -36008,14 +40460,14 @@ XS(_wrap_svn_patch_t_reverse_get) {
XS(_wrap_new_svn_patch_t) {
{
int argvi = 0;
- svn_patch_t *result = 0 ;
+ struct svn_patch_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_patch_t();");
}
{
- result = (svn_patch_t *)calloc(1, sizeof(svn_patch_t));
+ result = (struct svn_patch_t *)calloc(1, sizeof(struct svn_patch_t));
@@ -36030,7 +40482,7 @@ XS(_wrap_new_svn_patch_t) {
XS(_wrap_delete_svn_patch_t) {
{
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -36041,9 +40493,9 @@ XS(_wrap_delete_svn_patch_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_patch_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_patch_t" "', argument " "1"" of type '" "svn_patch_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_patch_t" "', argument " "1"" of type '" "struct svn_patch_t *""'");
}
- arg1 = (svn_patch_t *)(argp1);
+ arg1 = (struct svn_patch_t *)(argp1);
{
free((char *) arg1);
@@ -36112,13 +40564,7 @@ XS(_wrap_svn_diff_open_patch_file) {
}
}
{
- /* FIXME: Missing argout typemap: svn_diff_open_patch_file arg 1 (svn_patch_file_t **) */
-
-
-
-
- SWIG_exception(SWIG_ValueError, "svn_diff_open_patch_file is not implemented yet");
-
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_patch_file_t, 0); argvi++ ;
}
if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
@@ -36207,13 +40653,7 @@ XS(_wrap_svn_diff_parse_next_patch) {
}
}
{
- /* FIXME: Missing argout typemap: svn_diff_parse_next_patch arg 1 (svn_patch_t **) */
-
-
-
-
- SWIG_exception(SWIG_ValueError, "svn_diff_parse_next_patch is not implemented yet");
-
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_patch_t, 0); argvi++ ;
}
@@ -37735,6 +42175,39 @@ XS(_wrap_svn_strerror) {
}
+XS(_wrap_svn_error_symbolic_name) {
+ {
+ apr_status_t arg1 ;
+ int val1 ;
+ int ecode1 = 0 ;
+ int argvi = 0;
+ char *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_error_symbolic_name(statcode);");
+ }
+ ecode1 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1);
+ if (!SWIG_IsOK(ecode1)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "svn_error_symbolic_name" "', argument " "1"" of type '" "apr_status_t""'");
+ }
+ arg1 = (apr_status_t)(val1);
+ {
+ result = (char *)svn_error_symbolic_name(arg1);
+
+
+
+ }
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_err_best_message) {
{
svn_error_t *arg1 = (svn_error_t *) 0 ;
@@ -38930,7 +43403,7 @@ XS(_wrap_svn_error_invoke_malfunction_handler) {
static swig_type_info _swigt__p_FILE = {"_p_FILE", "FILE *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_allocator_t = {"_p_apr_allocator_t", "apr_allocator_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *|svn_rangelist_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_dir_t = {"_p_apr_dir_t", "apr_dir_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_file_t = {"_p_apr_file_t", "apr_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_finfo_t = {"_p_apr_finfo_t", "apr_finfo_t *", 0, 0, (void*)0, 0};
@@ -38948,12 +43421,14 @@ static swig_type_info _swigt__p_apr_uint32_t = {"_p_apr_uint32_t", "apr_uint32_t
static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_opt_subcommand_t *|struct svn_error_t *(*)(apr_getopt_t *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_apr_uint32_t_p_p_void_p_void_svn_diff_datasource_e__p_svn_error_t = {"_p_f_p_apr_uint32_t_p_p_void_p_void_svn_diff_datasource_e__p_svn_error_t", "struct svn_error_t *(*)(apr_uint32_t *,void **,void *,svn_diff_datasource_e)|svn_error_t *(*)(apr_uint32_t *,void **,void *,svn_diff_datasource_e)", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_p_char_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_char_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t", "svn_auth_gnome_keyring_unlock_prompt_func_t|struct svn_error_t *(*)(char **,char const *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_struct_svn_auth_provider_object_t_p_apr_pool_t__void = {"_p_f_p_p_struct_svn_auth_provider_object_t_p_apr_pool_t__void", "svn_auth_simple_provider_func_t|svn_auth_ssl_client_cert_pw_provider_func_t|void (*)(struct svn_auth_provider_object_t **,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t", "svn_auth_simple_prompt_func_t|struct svn_error_t *(*)(svn_auth_cred_simple_t **,void *,char const *,char const *,svn_boolean_t,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t", "svn_auth_ssl_client_cert_pw_prompt_func_t|struct svn_error_t *(*)(svn_auth_cred_ssl_client_cert_pw_t **,void *,char const *,svn_boolean_t,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t", "svn_auth_ssl_client_cert_prompt_func_t|struct svn_error_t *(*)(svn_auth_cred_ssl_client_cert_t **,void *,char const *,svn_boolean_t,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(svn_auth_cred_ssl_server_trust_t **,void *,char const *,apr_uint32_t,svn_auth_ssl_server_cert_info_t const *,svn_boolean_t,apr_pool_t *)|svn_auth_ssl_server_trust_prompt_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(svn_auth_cred_username_t **,void *,char const *,svn_boolean_t,apr_pool_t *)|svn_auth_username_prompt_func_t", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(svn_stream_t **,void *,apr_pool_t *,apr_pool_t *)|svn_stream_lazyopen_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void **,void **,void *,apr_hash_t *,char const *,apr_pool_t *)|svn_error_t *(*)(void **,void **,void *,apr_hash_t *,char const *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t", "svn_error_t *(*)(void **,void *,void *,apr_hash_t *,char const *,apr_pool_t *)|struct svn_error_t *(*)(void **,void *,void *,apr_hash_t *,char const *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_q_const__char_p_q_const__char_p_void__int = {"_p_f_p_q_const__char_p_q_const__char_p_void__int", "svn_config_enumerator_t|int (*)(char const *,char const *,void *)", 0, 0, (void*)0, 0};
@@ -38962,6 +43437,7 @@ static swig_type_info _swigt__p_f_p_q_const__char_p_void__int = {"_p_f_p_q_const
static swig_type_info _swigt__p_f_p_q_const__char_p_void_p_apr_pool_t__int = {"_p_f_p_q_const__char_p_void_p_apr_pool_t__int", "int (*)(char const *,void *,apr_pool_t *)|svn_config_section_enumerator2_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_commit_callback2_t|struct svn_error_t *(*)(svn_commit_info_t const *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(svn_boolean_t *,char const *,void *,apr_pool_t *)|svn_auth_plaintext_prompt_func_t|svn_auth_plaintext_passphrase_prompt_func_t", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(svn_boolean_t *,void *,char const *,char const *,apr_hash_t *,apr_pool_t *)|svn_config_auth_walk_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t", "svn_error_t *(*)(svn_boolean_t *,void *,void *,apr_hash_t *,char const *,apr_pool_t *)|struct svn_error_t *(*)(svn_boolean_t *,void *,void *,apr_hash_t *,char const *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(svn_location_segment_t *,void *,apr_pool_t *)|svn_location_segment_receiver_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void__p_svn_error_t = {"_p_f_p_void__p_svn_error_t", "svn_cancel_func_t|svn_close_fn_t|struct svn_error_t *(*)(void *)", 0, 0, (void*)0, 0};
@@ -38985,7 +43461,7 @@ static swig_type_info _swigt__p_f_svn_revnum_t_p_q_const__char_p_q_const__char_p
static swig_type_info _swigt__p_f_void__p_svn_version_t = {"_p_f_void__p_svn_version_t", "svn_version_func_t|struct svn_version_t *(*)(void)|svn_version_t *(*)(void)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_int = {"_p_int", "int *|svn_boolean_t *|apr_status_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_long = {"_p_long", "long *|svn_revnum_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_p_apr_array_header_t = {"_p_p_apr_array_header_t", "apr_array_header_t **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_apr_array_header_t = {"_p_p_apr_array_header_t", "apr_array_header_t **|svn_rangelist_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_apr_file_t = {"_p_p_apr_file_t", "apr_file_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_apr_hash_t = {"_p_p_apr_hash_t", "apr_hash_t **|svn_mergeinfo_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0};
@@ -38997,7 +43473,7 @@ static swig_type_info _swigt__p_p_svn_auth_cred_ssl_server_trust_t = {"_p_p_svn_
static swig_type_info _swigt__p_p_svn_auth_cred_username_t = {"_p_p_svn_auth_cred_username_t", "struct svn_auth_cred_username_t **|svn_auth_cred_username_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_auth_iterstate_t = {"_p_p_svn_auth_iterstate_t", "struct svn_auth_iterstate_t **|svn_auth_iterstate_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_auth_provider_object_t = {"_p_p_svn_auth_provider_object_t", "struct svn_auth_provider_object_t **|svn_auth_provider_object_t **", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_p_svn_checksum_t = {"_p_p_svn_checksum_t", "svn_checksum_t **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_svn_checksum_t = {"_p_p_svn_checksum_t", "struct svn_checksum_t **|svn_checksum_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_config_t = {"_p_p_svn_config_t", "struct svn_config_t **|svn_config_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_diff_t = {"_p_p_svn_diff_t", "struct svn_diff_t **|svn_diff_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_io_dirent2_t = {"_p_p_svn_io_dirent2_t", "struct svn_io_dirent2_t **|svn_io_dirent2_t **", 0, 0, (void*)0, 0};
@@ -39018,7 +43494,9 @@ static swig_type_info _swigt__p_svn_auth_iterstate_t = {"_p_svn_auth_iterstate_t
static swig_type_info _swigt__p_svn_auth_provider_object_t = {"_p_svn_auth_provider_object_t", "struct svn_auth_provider_object_t *|svn_auth_provider_object_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_provider_t = {"_p_svn_auth_provider_t", "struct svn_auth_provider_t *|svn_auth_provider_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_ssl_server_cert_info_t = {"_p_svn_auth_ssl_server_cert_info_t", "struct svn_auth_ssl_server_cert_info_t *|svn_auth_ssl_server_cert_info_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_ctx_t = {"_p_svn_checksum_ctx_t", "struct svn_checksum_ctx_t *|svn_checksum_ctx_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "enum svn_checksum_kind_t *|svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "struct svn_checksum_t *|svn_checksum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_commit_info_t = {"_p_svn_commit_info_t", "struct svn_commit_info_t *|svn_commit_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_config_t = {"_p_svn_config_t", "struct svn_config_t *|svn_config_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_depth_t = {"_p_svn_depth_t", "enum svn_depth_t *|svn_depth_t *", 0, 0, (void*)0, 0};
@@ -39054,6 +43532,7 @@ static swig_type_info _swigt__p_svn_opt_subcommand_desc2_t_desc_overrides = {"_p
static swig_type_info _swigt__p_svn_opt_subcommand_desc_t = {"_p_svn_opt_subcommand_desc_t", "struct svn_opt_subcommand_desc_t *|svn_opt_subcommand_desc_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_file_t = {"_p_svn_patch_file_t", "struct svn_patch_file_t *|svn_patch_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_t = {"_p_svn_patch_t", "struct svn_patch_t *|svn_patch_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_prop_inherited_item_t = {"_p_svn_prop_inherited_item_t", "struct svn_prop_inherited_item_t *|svn_prop_inherited_item_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_kind = {"_p_svn_prop_kind", "svn_prop_kind_t *|enum svn_prop_kind *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_patch_t = {"_p_svn_prop_patch_t", "struct svn_prop_patch_t *|svn_prop_patch_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_t = {"_p_svn_prop_t", "struct svn_prop_t *|svn_prop_t *", 0, 0, (void*)0, 0};
@@ -39063,7 +43542,11 @@ static swig_type_info _swigt__p_svn_string_t = {"_p_svn_string_t", "struct svn_s
static swig_type_info _swigt__p_svn_stringbuf_t = {"_p_svn_stringbuf_t", "struct svn_stringbuf_t *|svn_stringbuf_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_tristate_t = {"_p_svn_tristate_t", "enum svn_tristate_t *|svn_tristate_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_checklist_t = {"_p_svn_version_checklist_t", "struct svn_version_checklist_t *|svn_version_checklist_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_linked_lib_t = {"_p_svn_version_ext_linked_lib_t", "struct svn_version_ext_linked_lib_t *|svn_version_ext_linked_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_loaded_lib_t = {"_p_svn_version_ext_loaded_lib_t", "struct svn_version_ext_loaded_lib_t *|svn_version_ext_loaded_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_extended_t = {"_p_svn_version_extended_t", "struct svn_version_extended_t *|svn_version_extended_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_t = {"_p_svn_version_t", "struct svn_version_t *|svn_version_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_wc_external_item2_t = {"_p_svn_wc_external_item2_t", "svn_wc_external_item2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_char = {"_p_unsigned_char", "unsigned char *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_long = {"_p_unsigned_long", "unsigned long *|svn_linenum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_void = {"_p_void", "void *", 0, 0, (void*)0, 0};
@@ -39089,12 +43572,14 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_char,
&_swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_apr_uint32_t_p_p_void_p_void_svn_diff_datasource_e__p_svn_error_t,
+ &_swigt__p_f_p_p_char_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_p_struct_svn_auth_provider_object_t_p_apr_pool_t__void,
&_swigt__p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_q_const__char_p_q_const__char_p_void__int,
@@ -39103,6 +43588,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_f_p_q_const__char_p_void_p_apr_pool_t__int,
&_swigt__p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void__p_svn_error_t,
@@ -39159,7 +43645,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_auth_provider_object_t,
&_swigt__p_svn_auth_provider_t,
&_swigt__p_svn_auth_ssl_server_cert_info_t,
+ &_swigt__p_svn_checksum_ctx_t,
&_swigt__p_svn_checksum_kind_t,
+ &_swigt__p_svn_checksum_t,
&_swigt__p_svn_commit_info_t,
&_swigt__p_svn_config_t,
&_swigt__p_svn_depth_t,
@@ -39195,6 +43683,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_opt_subcommand_desc_t,
&_swigt__p_svn_patch_file_t,
&_swigt__p_svn_patch_t,
+ &_swigt__p_svn_prop_inherited_item_t,
&_swigt__p_svn_prop_kind,
&_swigt__p_svn_prop_patch_t,
&_swigt__p_svn_prop_t,
@@ -39204,7 +43693,11 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_stringbuf_t,
&_swigt__p_svn_tristate_t,
&_swigt__p_svn_version_checklist_t,
+ &_swigt__p_svn_version_ext_linked_lib_t,
+ &_swigt__p_svn_version_ext_loaded_lib_t,
+ &_swigt__p_svn_version_extended_t,
&_swigt__p_svn_version_t,
+ &_swigt__p_svn_wc_external_item2_t,
&_swigt__p_unsigned_char,
&_swigt__p_unsigned_long,
&_swigt__p_void,
@@ -39230,12 +43723,14 @@ static swig_cast_info _swigc__p_apr_uint32_t[] = { {&_swigt__p_apr_uint32_t, 0,
static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_apr_uint32_t_p_p_void_p_void_svn_diff_datasource_e__p_svn_error_t[] = { {&_swigt__p_f_p_apr_uint32_t_p_p_void_p_void_svn_diff_datasource_e__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_p_char_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_char_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_struct_svn_auth_provider_object_t_p_apr_pool_t__void[] = { {&_swigt__p_f_p_p_struct_svn_auth_provider_object_t_p_apr_pool_t__void, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_q_const__char_p_q_const__char_p_void__int[] = { {&_swigt__p_f_p_q_const__char_p_q_const__char_p_void__int, 0, 0, 0},{0, 0, 0, 0}};
@@ -39244,6 +43739,7 @@ static swig_cast_info _swigc__p_f_p_q_const__char_p_void__int[] = { {&_swigt__p
static swig_cast_info _swigc__p_f_p_q_const__char_p_void_p_apr_pool_t__int[] = { {&_swigt__p_f_p_q_const__char_p_void_p_apr_pool_t__int, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void__p_svn_error_t[] = { {&_swigt__p_f_p_void__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -39300,7 +43796,9 @@ static swig_cast_info _swigc__p_svn_auth_iterstate_t[] = { {&_swigt__p_svn_auth
static swig_cast_info _swigc__p_svn_auth_provider_object_t[] = { {&_swigt__p_svn_auth_provider_object_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_provider_t[] = { {&_swigt__p_svn_auth_provider_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_ssl_server_cert_info_t[] = { {&_swigt__p_svn_auth_ssl_server_cert_info_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_ctx_t[] = { {&_swigt__p_svn_checksum_ctx_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_checksum_kind_t[] = { {&_swigt__p_svn_checksum_kind_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_t[] = { {&_swigt__p_svn_checksum_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_commit_info_t[] = { {&_swigt__p_svn_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_config_t[] = { {&_swigt__p_svn_config_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_depth_t[] = { {&_swigt__p_svn_depth_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -39336,6 +43834,7 @@ static swig_cast_info _swigc__p_svn_opt_subcommand_desc2_t_desc_overrides[] = {
static swig_cast_info _swigc__p_svn_opt_subcommand_desc_t[] = { {&_swigt__p_svn_opt_subcommand_desc_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_file_t[] = { {&_swigt__p_svn_patch_file_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_t[] = { {&_swigt__p_svn_patch_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_prop_inherited_item_t[] = { {&_swigt__p_svn_prop_inherited_item_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_kind[] = { {&_swigt__p_svn_prop_kind, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_patch_t[] = { {&_swigt__p_svn_prop_patch_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_t[] = { {&_swigt__p_svn_prop_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -39345,7 +43844,11 @@ static swig_cast_info _swigc__p_svn_string_t[] = { {&_swigt__p_svn_string_t, 0,
static swig_cast_info _swigc__p_svn_stringbuf_t[] = { {&_swigt__p_svn_stringbuf_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_tristate_t[] = { {&_swigt__p_svn_tristate_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_checklist_t[] = { {&_swigt__p_svn_version_checklist_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_linked_lib_t[] = { {&_swigt__p_svn_version_ext_linked_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_loaded_lib_t[] = { {&_swigt__p_svn_version_ext_loaded_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_extended_t[] = { {&_swigt__p_svn_version_extended_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_t[] = { {&_swigt__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_wc_external_item2_t[] = { {&_swigt__p_svn_wc_external_item2_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_char[] = { {&_swigt__p_unsigned_char, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_long[] = { {&_swigt__p_unsigned_long, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_void[] = { {&_swigt__p_void, 0, 0, 0},{0, 0, 0, 0}};
@@ -39371,12 +43874,14 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_char,
_swigc__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_apr_uint32_t_p_p_void_p_void_svn_diff_datasource_e__p_svn_error_t,
+ _swigc__p_f_p_p_char_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_p_struct_svn_auth_provider_object_t_p_apr_pool_t__void,
_swigc__p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_q_const__char_p_q_const__char_p_void__int,
@@ -39385,6 +43890,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_f_p_q_const__char_p_void_p_apr_pool_t__int,
_swigc__p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void__p_svn_error_t,
@@ -39441,7 +43947,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_auth_provider_object_t,
_swigc__p_svn_auth_provider_t,
_swigc__p_svn_auth_ssl_server_cert_info_t,
+ _swigc__p_svn_checksum_ctx_t,
_swigc__p_svn_checksum_kind_t,
+ _swigc__p_svn_checksum_t,
_swigc__p_svn_commit_info_t,
_swigc__p_svn_config_t,
_swigc__p_svn_depth_t,
@@ -39477,6 +43985,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_opt_subcommand_desc_t,
_swigc__p_svn_patch_file_t,
_swigc__p_svn_patch_t,
+ _swigc__p_svn_prop_inherited_item_t,
_swigc__p_svn_prop_kind,
_swigc__p_svn_prop_patch_t,
_swigc__p_svn_prop_t,
@@ -39486,7 +43995,11 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_stringbuf_t,
_swigc__p_svn_tristate_t,
_swigc__p_svn_version_checklist_t,
+ _swigc__p_svn_version_ext_linked_lib_t,
+ _swigc__p_svn_version_ext_loaded_lib_t,
+ _swigc__p_svn_version_extended_t,
_swigc__p_svn_version_t,
+ _swigc__p_svn_wc_external_item2_t,
_swigc__p_unsigned_char,
_swigc__p_unsigned_long,
_swigc__p_void,
@@ -39554,6 +44067,7 @@ static swig_command_info swig_commands[] = {
{"SVN::_Core::new_svn_dirent_t", _wrap_new_svn_dirent_t},
{"SVN::_Core::delete_svn_dirent_t", _wrap_delete_svn_dirent_t},
{"SVN::_Core::svn_dirent_dup", _wrap_svn_dirent_dup},
+{"SVN::_Core::svn_dirent_create", _wrap_svn_dirent_create},
{"SVN::_Core::svn_commit_info_t_revision_set", _wrap_svn_commit_info_t_revision_set},
{"SVN::_Core::svn_commit_info_t_revision_get", _wrap_svn_commit_info_t_revision_get},
{"SVN::_Core::svn_commit_info_t_date_set", _wrap_svn_commit_info_t_date_set},
@@ -39657,6 +44171,7 @@ static swig_command_info swig_commands[] = {
{"SVN::_Core::svn_cancel_invoke_func", _wrap_svn_cancel_invoke_func},
{"SVN::_Core::svn_location_invoke_segment_receiver", _wrap_svn_location_invoke_segment_receiver},
{"SVN::_Core::svn_pool_create", _wrap_svn_pool_create},
+{"SVN::_Core::svn_pool_create_allocator", _wrap_svn_pool_create_allocator},
{"SVN::_Core::svn_version_t_major_set", _wrap_svn_version_t_major_set},
{"SVN::_Core::svn_version_t_major_get", _wrap_svn_version_t_major_get},
{"SVN::_Core::svn_version_t_minor_set", _wrap_svn_version_t_minor_set},
@@ -39677,18 +44192,52 @@ static swig_command_info swig_commands[] = {
{"SVN::_Core::delete_svn_version_checklist_t", _wrap_delete_svn_version_checklist_t},
{"SVN::_Core::svn_ver_check_list", _wrap_svn_ver_check_list},
{"SVN::_Core::svn_subr_version", _wrap_svn_subr_version},
+{"SVN::_Core::svn_version_extended", _wrap_svn_version_extended},
+{"SVN::_Core::svn_version_ext_build_date", _wrap_svn_version_ext_build_date},
+{"SVN::_Core::svn_version_ext_build_time", _wrap_svn_version_ext_build_time},
+{"SVN::_Core::svn_version_ext_build_host", _wrap_svn_version_ext_build_host},
+{"SVN::_Core::svn_version_ext_copyright", _wrap_svn_version_ext_copyright},
+{"SVN::_Core::svn_version_ext_runtime_host", _wrap_svn_version_ext_runtime_host},
+{"SVN::_Core::svn_version_ext_runtime_osname", _wrap_svn_version_ext_runtime_osname},
+{"SVN::_Core::svn_version_ext_linked_lib_t_name_set", _wrap_svn_version_ext_linked_lib_t_name_set},
+{"SVN::_Core::svn_version_ext_linked_lib_t_name_get", _wrap_svn_version_ext_linked_lib_t_name_get},
+{"SVN::_Core::svn_version_ext_linked_lib_t_compiled_version_set", _wrap_svn_version_ext_linked_lib_t_compiled_version_set},
+{"SVN::_Core::svn_version_ext_linked_lib_t_compiled_version_get", _wrap_svn_version_ext_linked_lib_t_compiled_version_get},
+{"SVN::_Core::svn_version_ext_linked_lib_t_runtime_version_set", _wrap_svn_version_ext_linked_lib_t_runtime_version_set},
+{"SVN::_Core::svn_version_ext_linked_lib_t_runtime_version_get", _wrap_svn_version_ext_linked_lib_t_runtime_version_get},
+{"SVN::_Core::new_svn_version_ext_linked_lib_t", _wrap_new_svn_version_ext_linked_lib_t},
+{"SVN::_Core::delete_svn_version_ext_linked_lib_t", _wrap_delete_svn_version_ext_linked_lib_t},
+{"SVN::_Core::svn_version_ext_linked_libs", _wrap_svn_version_ext_linked_libs},
+{"SVN::_Core::svn_version_ext_loaded_lib_t_name_set", _wrap_svn_version_ext_loaded_lib_t_name_set},
+{"SVN::_Core::svn_version_ext_loaded_lib_t_name_get", _wrap_svn_version_ext_loaded_lib_t_name_get},
+{"SVN::_Core::svn_version_ext_loaded_lib_t_version_set", _wrap_svn_version_ext_loaded_lib_t_version_set},
+{"SVN::_Core::svn_version_ext_loaded_lib_t_version_get", _wrap_svn_version_ext_loaded_lib_t_version_get},
+{"SVN::_Core::new_svn_version_ext_loaded_lib_t", _wrap_new_svn_version_ext_loaded_lib_t},
+{"SVN::_Core::delete_svn_version_ext_loaded_lib_t", _wrap_delete_svn_version_ext_loaded_lib_t},
+{"SVN::_Core::svn_version_ext_loaded_libs", _wrap_svn_version_ext_loaded_libs},
{"SVN::_Core::svn_version_checklist_invoke_version_query", _wrap_svn_version_checklist_invoke_version_query},
{"SVN::_Core::svn_version_invoke_func", _wrap_svn_version_invoke_func},
{"SVN::_Core::svn_prop_dup", _wrap_svn_prop_dup},
{"SVN::_Core::svn_prop_array_dup", _wrap_svn_prop_array_dup},
+{"SVN::_Core::svn_prop_inherited_item_t_path_or_url_set", _wrap_svn_prop_inherited_item_t_path_or_url_set},
+{"SVN::_Core::svn_prop_inherited_item_t_path_or_url_get", _wrap_svn_prop_inherited_item_t_path_or_url_get},
+{"SVN::_Core::svn_prop_inherited_item_t_prop_hash_set", _wrap_svn_prop_inherited_item_t_prop_hash_set},
+{"SVN::_Core::svn_prop_inherited_item_t_prop_hash_get", _wrap_svn_prop_inherited_item_t_prop_hash_get},
+{"SVN::_Core::new_svn_prop_inherited_item_t", _wrap_new_svn_prop_inherited_item_t},
+{"SVN::_Core::delete_svn_prop_inherited_item_t", _wrap_delete_svn_prop_inherited_item_t},
{"SVN::_Core::svn_prop_hash_to_array", _wrap_svn_prop_hash_to_array},
{"SVN::_Core::svn_prop_array_to_hash", _wrap_svn_prop_array_to_hash},
{"SVN::_Core::svn_prop_hash_dup", _wrap_svn_prop_hash_dup},
{"SVN::_Core::svn_prop_get_value", _wrap_svn_prop_get_value},
+{"SVN::_Core::svn_property_kind2", _wrap_svn_property_kind2},
{"SVN::_Core::svn_property_kind", _wrap_svn_property_kind},
{"SVN::_Core::svn_prop_is_svn_prop", _wrap_svn_prop_is_svn_prop},
{"SVN::_Core::svn_prop_has_svn_prop", _wrap_svn_prop_has_svn_prop},
{"SVN::_Core::svn_prop_is_boolean", _wrap_svn_prop_is_boolean},
+{"SVN::_Core::svn_prop_is_known_svn_rev_prop", _wrap_svn_prop_is_known_svn_rev_prop},
+{"SVN::_Core::svn_prop_is_known_svn_node_prop", _wrap_svn_prop_is_known_svn_node_prop},
+{"SVN::_Core::svn_prop_is_known_svn_file_prop", _wrap_svn_prop_is_known_svn_file_prop},
+{"SVN::_Core::svn_prop_is_known_svn_dir_prop", _wrap_svn_prop_is_known_svn_dir_prop},
{"SVN::_Core::svn_prop_needs_translation", _wrap_svn_prop_needs_translation},
{"SVN::_Core::svn_categorize_props", _wrap_svn_categorize_props},
{"SVN::_Core::svn_prop_diffs", _wrap_svn_prop_diffs},
@@ -39764,9 +44313,12 @@ static swig_command_info swig_commands[] = {
{"SVN::_Core::svn_opt_parse_num_args", _wrap_svn_opt_parse_num_args},
{"SVN::_Core::svn_opt_parse_all_args", _wrap_svn_opt_parse_all_args},
{"SVN::_Core::svn_opt_parse_path", _wrap_svn_opt_parse_path},
+{"SVN::_Core::svn_opt_print_help4", _wrap_svn_opt_print_help4},
{"SVN::_Core::svn_opt_print_help3", _wrap_svn_opt_print_help3},
{"SVN::_Core::svn_opt_print_help2", _wrap_svn_opt_print_help2},
{"SVN::_Core::svn_opt_print_help", _wrap_svn_opt_print_help},
+{"SVN::_Core::svn_cmdline_init", _wrap_svn_cmdline_init},
+{"SVN::_Core::svn_cmdline_create_auth_baton", _wrap_svn_cmdline_create_auth_baton},
{"SVN::_Core::svn_auth_provider_t_cred_kind_set", _wrap_svn_auth_provider_t_cred_kind_set},
{"SVN::_Core::svn_auth_provider_t_cred_kind_get", _wrap_svn_auth_provider_t_cred_kind_get},
{"SVN::_Core::svn_auth_provider_t_first_credentials_set", _wrap_svn_auth_provider_t_first_credentials_set},
@@ -39835,6 +44387,7 @@ static swig_command_info swig_commands[] = {
{"SVN::_Core::svn_auth_first_credentials", _wrap_svn_auth_first_credentials},
{"SVN::_Core::svn_auth_next_credentials", _wrap_svn_auth_next_credentials},
{"SVN::_Core::svn_auth_save_credentials", _wrap_svn_auth_save_credentials},
+{"SVN::_Core::svn_auth_forget_credentials", _wrap_svn_auth_forget_credentials},
{"SVN::_Core::svn_auth_get_simple_prompt_provider", _wrap_svn_auth_get_simple_prompt_provider},
{"SVN::_Core::svn_auth_get_username_prompt_provider", _wrap_svn_auth_get_username_prompt_provider},
{"SVN::_Core::svn_auth_get_simple_provider2", _wrap_svn_auth_get_simple_provider2},
@@ -39862,15 +44415,21 @@ static swig_command_info swig_commands[] = {
{"SVN::_Core::svn_auth_invoke_plaintext_prompt_func", _wrap_svn_auth_invoke_plaintext_prompt_func},
{"SVN::_Core::svn_auth_invoke_plaintext_passphrase_prompt_func", _wrap_svn_auth_invoke_plaintext_passphrase_prompt_func},
{"SVN::_Core::svn_config_get_config", _wrap_svn_config_get_config},
+{"SVN::_Core::svn_config_create2", _wrap_svn_config_create2},
{"SVN::_Core::svn_config_create", _wrap_svn_config_create},
+{"SVN::_Core::svn_config_read3", _wrap_svn_config_read3},
{"SVN::_Core::svn_config_read2", _wrap_svn_config_read2},
{"SVN::_Core::svn_config_read", _wrap_svn_config_read},
+{"SVN::_Core::svn_config_parse", _wrap_svn_config_parse},
{"SVN::_Core::svn_config_merge", _wrap_svn_config_merge},
{"SVN::_Core::svn_config_get", _wrap_svn_config_get},
{"SVN::_Core::svn_config_set", _wrap_svn_config_set},
{"SVN::_Core::svn_config_get_bool", _wrap_svn_config_get_bool},
{"SVN::_Core::svn_config_set_bool", _wrap_svn_config_set_bool},
+{"SVN::_Core::svn_config_get_int64", _wrap_svn_config_get_int64},
+{"SVN::_Core::svn_config_set_int64", _wrap_svn_config_set_int64},
{"SVN::_Core::svn_config_get_yes_no_ask", _wrap_svn_config_get_yes_no_ask},
+{"SVN::_Core::svn_config_get_tristate", _wrap_svn_config_get_tristate},
{"SVN::_Core::svn_config_enumerate_sections", _wrap_svn_config_enumerate_sections},
{"SVN::_Core::svn_config_enumerate_sections2", _wrap_svn_config_enumerate_sections2},
{"SVN::_Core::svn_config_enumerate", _wrap_svn_config_enumerate},
@@ -39883,11 +44442,16 @@ static swig_command_info swig_commands[] = {
{"SVN::_Core::svn_config_ensure", _wrap_svn_config_ensure},
{"SVN::_Core::svn_config_read_auth_data", _wrap_svn_config_read_auth_data},
{"SVN::_Core::svn_config_write_auth_data", _wrap_svn_config_write_auth_data},
+{"SVN::_Core::svn_config_walk_auth_data", _wrap_svn_config_walk_auth_data},
{"SVN::_Core::svn_config_get_user_config_path", _wrap_svn_config_get_user_config_path},
+{"SVN::_Core::svn_config_dup", _wrap_svn_config_dup},
+{"SVN::_Core::svn_config_copy_config", _wrap_svn_config_copy_config},
{"SVN::_Core::svn_config_invoke_section_enumerator", _wrap_svn_config_invoke_section_enumerator},
{"SVN::_Core::svn_config_invoke_section_enumerator2", _wrap_svn_config_invoke_section_enumerator2},
{"SVN::_Core::svn_config_invoke_enumerator", _wrap_svn_config_invoke_enumerator},
{"SVN::_Core::svn_config_invoke_enumerator2", _wrap_svn_config_invoke_enumerator2},
+{"SVN::_Core::svn_config_invoke_auth_walk_func", _wrap_svn_config_invoke_auth_walk_func},
+{"SVN::_Core::svn_utf_initialize2", _wrap_svn_utf_initialize2},
{"SVN::_Core::svn_utf_initialize", _wrap_svn_utf_initialize},
{"SVN::_Core::svn_utf_stringbuf_to_utf8", _wrap_svn_utf_stringbuf_to_utf8},
{"SVN::_Core::svn_utf_string_to_utf8", _wrap_svn_utf_string_to_utf8},
@@ -39902,6 +44466,7 @@ static swig_command_info swig_commands[] = {
{"SVN::_Core::svn_utf_cstring_from_utf8_fuzzy", _wrap_svn_utf_cstring_from_utf8_fuzzy},
{"SVN::_Core::svn_utf_cstring_from_utf8_stringbuf", _wrap_svn_utf_cstring_from_utf8_stringbuf},
{"SVN::_Core::svn_utf_cstring_from_utf8_string", _wrap_svn_utf_cstring_from_utf8_string},
+{"SVN::_Core::svn_utf_cstring_utf8_width", _wrap_svn_utf_cstring_utf8_width},
{"SVN::_Core::svn_nls_init", _wrap_svn_nls_init},
{"SVN::_Core::svn_path_internal_style", _wrap_svn_path_internal_style},
{"SVN::_Core::svn_path_local_style", _wrap_svn_path_local_style},
@@ -39916,6 +44481,9 @@ static swig_command_info swig_commands[] = {
{"SVN::_Core::svn_path_is_url", _wrap_svn_path_is_url},
{"SVN::_Core::svn_path_is_uri_safe", _wrap_svn_path_is_uri_safe},
{"SVN::_Core::svn_path_url_add_component2", _wrap_svn_path_url_add_component2},
+{"SVN::_Core::svn_path_is_repos_relative_url", _wrap_svn_path_is_repos_relative_url},
+{"SVN::_Core::svn_path_resolve_repos_relative_url", _wrap_svn_path_resolve_repos_relative_url},
+{"SVN::_Core::svn_path_illegal_path_escape", _wrap_svn_path_illegal_path_escape},
{"SVN::_Core::svn_dirent_internal_style", _wrap_svn_dirent_internal_style},
{"SVN::_Core::svn_dirent_local_style", _wrap_svn_dirent_local_style},
{"SVN::_Core::svn_relpath__internal_style", _wrap_svn_relpath__internal_style},
@@ -39942,11 +44510,8 @@ static swig_command_info swig_commands[] = {
{"SVN::_Core::svn_relpath_get_longest_ancestor", _wrap_svn_relpath_get_longest_ancestor},
{"SVN::_Core::svn_uri_get_longest_ancestor", _wrap_svn_uri_get_longest_ancestor},
{"SVN::_Core::svn_dirent_get_absolute", _wrap_svn_dirent_get_absolute},
-{"SVN::_Core::svn_uri__is_child", _wrap_svn_uri__is_child},
{"SVN::_Core::svn_dirent_is_child", _wrap_svn_dirent_is_child},
-{"SVN::_Core::svn_relpath__is_child", _wrap_svn_relpath__is_child},
{"SVN::_Core::svn_dirent_is_ancestor", _wrap_svn_dirent_is_ancestor},
-{"SVN::_Core::svn_relpath__is_ancestor", _wrap_svn_relpath__is_ancestor},
{"SVN::_Core::svn_uri__is_ancestor", _wrap_svn_uri__is_ancestor},
{"SVN::_Core::svn_dirent_skip_ancestor", _wrap_svn_dirent_skip_ancestor},
{"SVN::_Core::svn_relpath_skip_ancestor", _wrap_svn_relpath_skip_ancestor},
@@ -39954,11 +44519,14 @@ static swig_command_info swig_commands[] = {
{"SVN::_Core::svn_uri_get_dirent_from_file_url", _wrap_svn_uri_get_dirent_from_file_url},
{"SVN::_Core::svn_uri_get_file_url_from_dirent", _wrap_svn_uri_get_file_url_from_dirent},
{"SVN::_Core::svn_mergeinfo_parse", _wrap_svn_mergeinfo_parse},
+{"SVN::_Core::svn_mergeinfo_diff2", _wrap_svn_mergeinfo_diff2},
{"SVN::_Core::svn_mergeinfo_diff", _wrap_svn_mergeinfo_diff},
+{"SVN::_Core::svn_mergeinfo_merge2", _wrap_svn_mergeinfo_merge2},
{"SVN::_Core::svn_mergeinfo_catalog_merge", _wrap_svn_mergeinfo_catalog_merge},
{"SVN::_Core::svn_mergeinfo_remove", _wrap_svn_mergeinfo_remove},
{"SVN::_Core::svn_mergeinfo_remove2", _wrap_svn_mergeinfo_remove2},
{"SVN::_Core::svn_rangelist_diff", _wrap_svn_rangelist_diff},
+{"SVN::_Core::svn_rangelist_merge2", _wrap_svn_rangelist_merge2},
{"SVN::_Core::svn_rangelist_remove", _wrap_svn_rangelist_remove},
{"SVN::_Core::svn_mergeinfo_intersect2", _wrap_svn_mergeinfo_intersect2},
{"SVN::_Core::svn_mergeinfo_intersect", _wrap_svn_mergeinfo_intersect},
@@ -39998,9 +44566,13 @@ static swig_command_info swig_commands[] = {
{"SVN::_Core::svn_io_open_unique_file", _wrap_svn_io_open_unique_file},
{"SVN::_Core::svn_io_copy_perms", _wrap_svn_io_copy_perms},
{"SVN::_Core::svn_io_sleep_for_timestamps", _wrap_svn_io_sleep_for_timestamps},
+{"SVN::_Core::svn_io_filesizes_three_different_p", _wrap_svn_io_filesizes_three_different_p},
{"SVN::_Core::svn_io_file_checksum2", _wrap_svn_io_file_checksum2},
{"SVN::_Core::svn_io_file_checksum", _wrap_svn_io_file_checksum},
{"SVN::_Core::svn_io_files_contents_same_p", _wrap_svn_io_files_contents_same_p},
+{"SVN::_Core::svn_io_files_contents_three_same_p", _wrap_svn_io_files_contents_three_same_p},
+{"SVN::_Core::svn_io_lock_open_file", _wrap_svn_io_lock_open_file},
+{"SVN::_Core::svn_io_unlock_open_file", _wrap_svn_io_unlock_open_file},
{"SVN::_Core::svn_stream_set_skip", _wrap_svn_stream_set_skip},
{"SVN::_Core::svn_stream_set_mark", _wrap_svn_stream_set_mark},
{"SVN::_Core::svn_stream_set_seek", _wrap_svn_stream_set_seek},
@@ -40016,6 +44588,7 @@ static swig_command_info swig_commands[] = {
{"SVN::_Core::svn_stream_for_stdout", _wrap_svn_stream_for_stdout},
{"SVN::_Core::svn_stream_from_stringbuf", _wrap_svn_stream_from_stringbuf},
{"SVN::_Core::svn_stream_from_string", _wrap_svn_stream_from_string},
+{"SVN::_Core::svn_stream_buffered", _wrap_svn_stream_buffered},
{"SVN::_Core::svn_stream_compressed", _wrap_svn_stream_compressed},
{"SVN::_Core::svn_stream_checksummed2", _wrap_svn_stream_checksummed2},
{"SVN::_Core::svn_stream_read", _wrap_svn_stream_read},
@@ -40027,6 +44600,7 @@ static swig_command_info swig_commands[] = {
{"SVN::_Core::svn_stream_mark", _wrap_svn_stream_mark},
{"SVN::_Core::svn_stream_seek", _wrap_svn_stream_seek},
{"SVN::_Core::svn_stream_tee", _wrap_svn_stream_tee},
+{"SVN::_Core::svn_stream_puts", _wrap_svn_stream_puts},
{"SVN::_Core::svn_stream_readline", _wrap_svn_stream_readline},
{"SVN::_Core::svn_stream_copy3", _wrap_svn_stream_copy3},
{"SVN::_Core::svn_stream_copy2", _wrap_svn_stream_copy2},
@@ -40034,14 +44608,17 @@ static swig_command_info swig_commands[] = {
{"SVN::_Core::svn_stream_contents_same2", _wrap_svn_stream_contents_same2},
{"SVN::_Core::svn_stream_contents_same", _wrap_svn_stream_contents_same},
{"SVN::_Core::svn_string_from_stream", _wrap_svn_string_from_stream},
+{"SVN::_Core::svn_stream_lazyopen_create", _wrap_svn_stream_lazyopen_create},
{"SVN::_Core::svn_stringbuf_from_file2", _wrap_svn_stringbuf_from_file2},
{"SVN::_Core::svn_stringbuf_from_file", _wrap_svn_stringbuf_from_file},
{"SVN::_Core::svn_stringbuf_from_aprfile", _wrap_svn_stringbuf_from_aprfile},
{"SVN::_Core::svn_io_remove_file2", _wrap_svn_io_remove_file2},
{"SVN::_Core::svn_io_remove_dir2", _wrap_svn_io_remove_dir2},
{"SVN::_Core::svn_io_get_dirents3", _wrap_svn_io_get_dirents3},
+{"SVN::_Core::svn_io_stat_dirent2", _wrap_svn_io_stat_dirent2},
{"SVN::_Core::svn_io_stat_dirent", _wrap_svn_io_stat_dirent},
{"SVN::_Core::svn_io_dir_walk2", _wrap_svn_io_dir_walk2},
+{"SVN::_Core::svn_io_start_cmd3", _wrap_svn_io_start_cmd3},
{"SVN::_Core::svn_io_start_cmd2", _wrap_svn_io_start_cmd2},
{"SVN::_Core::svn_io_run_diff2", _wrap_svn_io_run_diff2},
{"SVN::_Core::svn_io_run_diff3_3", _wrap_svn_io_run_diff3_3},
@@ -40055,13 +44632,39 @@ static swig_command_info swig_commands[] = {
{"SVN::_Core::svn_io_file_trunc", _wrap_svn_io_file_trunc},
{"SVN::_Core::svn_io_dir_close", _wrap_svn_io_dir_close},
{"SVN::_Core::svn_io_file_name_get", _wrap_svn_io_file_name_get},
+{"SVN::_Core::svn_io_file_readline", _wrap_svn_io_file_readline},
{"SVN::_Core::svn_read_invoke_fn", _wrap_svn_read_invoke_fn},
{"SVN::_Core::svn_stream_invoke_skip_fn", _wrap_svn_stream_invoke_skip_fn},
{"SVN::_Core::svn_write_invoke_fn", _wrap_svn_write_invoke_fn},
{"SVN::_Core::svn_close_invoke_fn", _wrap_svn_close_invoke_fn},
{"SVN::_Core::svn_stream_invoke_mark_fn", _wrap_svn_stream_invoke_mark_fn},
{"SVN::_Core::svn_stream_invoke_seek_fn", _wrap_svn_stream_invoke_seek_fn},
+{"SVN::_Core::svn_stream_invoke_lazyopen_func", _wrap_svn_stream_invoke_lazyopen_func},
{"SVN::_Core::svn_io_invoke_walk_func", _wrap_svn_io_invoke_walk_func},
+{"SVN::_Core::svn_checksum_t_digest_set", _wrap_svn_checksum_t_digest_set},
+{"SVN::_Core::svn_checksum_t_digest_get", _wrap_svn_checksum_t_digest_get},
+{"SVN::_Core::svn_checksum_t_kind_set", _wrap_svn_checksum_t_kind_set},
+{"SVN::_Core::svn_checksum_t_kind_get", _wrap_svn_checksum_t_kind_get},
+{"SVN::_Core::new_svn_checksum_t", _wrap_new_svn_checksum_t},
+{"SVN::_Core::delete_svn_checksum_t", _wrap_delete_svn_checksum_t},
+{"SVN::_Core::svn_checksum_create", _wrap_svn_checksum_create},
+{"SVN::_Core::svn_checksum_clear", _wrap_svn_checksum_clear},
+{"SVN::_Core::svn_checksum_match", _wrap_svn_checksum_match},
+{"SVN::_Core::svn_checksum_dup", _wrap_svn_checksum_dup},
+{"SVN::_Core::svn_checksum_to_cstring_display", _wrap_svn_checksum_to_cstring_display},
+{"SVN::_Core::svn_checksum_to_cstring", _wrap_svn_checksum_to_cstring},
+{"SVN::_Core::svn_checksum_serialize", _wrap_svn_checksum_serialize},
+{"SVN::_Core::svn_checksum_deserialize", _wrap_svn_checksum_deserialize},
+{"SVN::_Core::svn_checksum_parse_hex", _wrap_svn_checksum_parse_hex},
+{"SVN::_Core::svn_checksum", _wrap_svn_checksum},
+{"SVN::_Core::svn_checksum_empty_checksum", _wrap_svn_checksum_empty_checksum},
+{"SVN::_Core::svn_checksum_ctx_create", _wrap_svn_checksum_ctx_create},
+{"SVN::_Core::svn_checksum_update", _wrap_svn_checksum_update},
+{"SVN::_Core::svn_checksum_final", _wrap_svn_checksum_final},
+{"SVN::_Core::svn_checksum_size", _wrap_svn_checksum_size},
+{"SVN::_Core::svn_checksum_is_empty_checksum", _wrap_svn_checksum_is_empty_checksum},
+{"SVN::_Core::svn_checksum_mismatch_err", _wrap_svn_checksum_mismatch_err},
+{"SVN::_Core::svn_auth_set_gnome_keyring_unlock_prompt_func", _wrap_svn_auth_set_gnome_keyring_unlock_prompt_func},
{"SVN::_Core::svn_md5_empty_string_digest", _wrap_svn_md5_empty_string_digest},
{"SVN::_Core::svn_md5_digest_to_cstring_display", _wrap_svn_md5_digest_to_cstring_display},
{"SVN::_Core::svn_md5_digest_to_cstring", _wrap_svn_md5_digest_to_cstring},
@@ -40199,6 +44802,7 @@ static swig_command_info swig_commands[] = {
{"SVN::_Core::svn_diff_output_fns_invoke_output_diff_common", _wrap_svn_diff_output_fns_invoke_output_diff_common},
{"SVN::_Core::svn_diff_output_fns_invoke_output_conflict", _wrap_svn_diff_output_fns_invoke_output_conflict},
{"SVN::_Core::svn_strerror", _wrap_svn_strerror},
+{"SVN::_Core::svn_error_symbolic_name", _wrap_svn_error_symbolic_name},
{"SVN::_Core::svn_err_best_message", _wrap_svn_err_best_message},
{"SVN::_Core::svn_error_create", _wrap_svn_error_create},
{"SVN::_Core::svn_error_createf", _wrap_svn_error_createf},
@@ -40281,8 +44885,6 @@ SWIG_InitializeModule(void *clientdata) {
swig_module_info *module_head, *iter;
int found, init;
- clientdata = clientdata;
-
/* check to see if the circular list has been setup, if not, set it up */
if (swig_module.next==0) {
/* Initialize the swig_module */
@@ -40473,25 +45075,30 @@ XS(SWIG_init) {
/* Install commands */
for (i = 0; swig_commands[i].name; i++) {
- newXS((char*) swig_commands[i].name,swig_commands[i].wrapper, (char*)__FILE__);
+ /* Casts only needed for Perl < 5.10. */
+#ifdef __cplusplus
+ newXS(const_cast<char*>(swig_commands[i].name), swig_commands[i].wrapper, const_cast<char*>(__FILE__));
+#else
+ newXS((char*)swig_commands[i].name, swig_commands[i].wrapper, (char*)__FILE__);
+#endif
}
/* Install variables */
for (i = 0; swig_variables[i].name; i++) {
SV *sv;
- sv = get_sv((char*) swig_variables[i].name, TRUE | 0x2 | GV_ADDMULTI);
+ sv = get_sv(swig_variables[i].name, TRUE | 0x2 | GV_ADDMULTI);
if (swig_variables[i].type) {
SWIG_MakePtr(sv,(void *)1, *swig_variables[i].type,0);
} else {
sv_setiv(sv,(IV) 0);
}
- swig_create_magic(sv, (char *) swig_variables[i].name, swig_variables[i].set, swig_variables[i].get);
+ swig_create_magic(sv, swig_variables[i].name, swig_variables[i].set, swig_variables[i].get);
}
/* Install constant */
for (i = 0; swig_constants[i].type; i++) {
SV *sv;
- sv = get_sv((char*)swig_constants[i].name, TRUE | 0x2 | GV_ADDMULTI);
+ sv = get_sv(swig_constants[i].name, TRUE | 0x2 | GV_ADDMULTI);
switch(swig_constants[i].type) {
case SWIG_INT:
sv_setiv(sv, (IV) swig_constants[i].lvalue);
@@ -40500,7 +45107,7 @@ XS(SWIG_init) {
sv_setnv(sv, (double) swig_constants[i].dvalue);
break;
case SWIG_STRING:
- sv_setpv(sv, (char *) swig_constants[i].pvalue);
+ sv_setpv(sv, (const char *) swig_constants[i].pvalue);
break;
case SWIG_POINTER:
SWIG_MakePtr(sv, swig_constants[i].pvalue, *(swig_constants[i].ptype),0);
@@ -40514,2572 +45121,2712 @@ XS(SWIG_init) {
SvREADONLY_on(sv);
}
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SWIG_SVN_INVALID_REVNUM", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(-1)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SWIG_SVN_IGNORED_REVNUM", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(-1)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CATEGORY_SIZE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(5000)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_WARNING", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_WARNING)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_BAD_CONTAINING_POOL", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_BAD_CONTAINING_POOL)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_BAD_FILENAME", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_BAD_FILENAME)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_BAD_URL", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_BAD_URL)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_BAD_DATE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_BAD_DATE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_BAD_MIME_TYPE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_BAD_MIME_TYPE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_BAD_PROPERTY_VALUE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_BAD_PROPERTY_VALUE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_BAD_VERSION_FILE_FORMAT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_BAD_VERSION_FILE_FORMAT)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_BAD_RELATIVE_PATH", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_BAD_RELATIVE_PATH)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_BAD_UUID", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_BAD_UUID)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_BAD_CONFIG_VALUE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_BAD_CONFIG_VALUE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_BAD_SERVER_SPECIFICATION", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_BAD_SERVER_SPECIFICATION)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_BAD_CHECKSUM_KIND", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_BAD_CHECKSUM_KIND)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_BAD_CHECKSUM_PARSE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_BAD_CHECKSUM_PARSE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_BAD_TOKEN", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_BAD_TOKEN)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_BAD_CHANGELIST_NAME", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_BAD_CHANGELIST_NAME)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_BAD_ATOMIC", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_BAD_ATOMIC)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_XML_ATTRIB_NOT_FOUND", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_XML_ATTRIB_NOT_FOUND)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_XML_MISSING_ANCESTRY", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_XML_MISSING_ANCESTRY)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_XML_UNKNOWN_ENCODING", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_XML_UNKNOWN_ENCODING)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_XML_MALFORMED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_XML_MALFORMED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_XML_UNESCAPABLE_DATA", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_XML_UNESCAPABLE_DATA)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_IO_INCONSISTENT_EOL", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_IO_INCONSISTENT_EOL)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_IO_UNKNOWN_EOL", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_IO_UNKNOWN_EOL)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_IO_CORRUPT_EOL", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_IO_CORRUPT_EOL)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_IO_UNIQUE_NAMES_EXHAUSTED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_IO_UNIQUE_NAMES_EXHAUSTED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_IO_PIPE_FRAME_ERROR", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_IO_PIPE_FRAME_ERROR)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_IO_PIPE_READ_ERROR", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_IO_PIPE_READ_ERROR)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_IO_WRITE_ERROR", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_IO_WRITE_ERROR)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_IO_PIPE_WRITE_ERROR", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_IO_PIPE_WRITE_ERROR)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_STREAM_UNEXPECTED_EOF", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_STREAM_UNEXPECTED_EOF)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_STREAM_MALFORMED_DATA", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_STREAM_MALFORMED_DATA)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_STREAM_UNRECOGNIZED_DATA", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_STREAM_UNRECOGNIZED_DATA)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_STREAM_SEEK_NOT_SUPPORTED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_STREAM_SEEK_NOT_SUPPORTED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_NODE_UNKNOWN_KIND", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_NODE_UNKNOWN_KIND)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_NODE_UNEXPECTED_KIND", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_NODE_UNEXPECTED_KIND)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_ENTRY_NOT_FOUND", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_ENTRY_NOT_FOUND)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_ENTRY_EXISTS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_ENTRY_EXISTS)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_ENTRY_MISSING_REVISION", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_ENTRY_MISSING_REVISION)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_ENTRY_MISSING_URL", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_ENTRY_MISSING_URL)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_ENTRY_ATTRIBUTE_INVALID", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_ENTRY_ATTRIBUTE_INVALID)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_ENTRY_FORBIDDEN", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_ENTRY_FORBIDDEN)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_OBSTRUCTED_UPDATE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_OBSTRUCTED_UPDATE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_UNWIND_MISMATCH", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_UNWIND_MISMATCH)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_UNWIND_EMPTY", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_UNWIND_EMPTY)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_UNWIND_NOT_EMPTY", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_UNWIND_NOT_EMPTY)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_LOCKED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_LOCKED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_NOT_LOCKED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_NOT_LOCKED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_INVALID_LOCK", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_INVALID_LOCK)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_NOT_WORKING_COPY", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_NOT_WORKING_COPY)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_NOT_DIRECTORY", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_NOT_DIRECTORY)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_NOT_FILE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_NOT_FILE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_BAD_ADM_LOG", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_BAD_ADM_LOG)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_PATH_NOT_FOUND", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_PATH_NOT_FOUND)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_NOT_UP_TO_DATE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_NOT_UP_TO_DATE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_LEFT_LOCAL_MOD", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_LEFT_LOCAL_MOD)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_SCHEDULE_CONFLICT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_SCHEDULE_CONFLICT)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_PATH_FOUND", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_PATH_FOUND)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_FOUND_CONFLICT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_FOUND_CONFLICT)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_CORRUPT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_CORRUPT)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_CORRUPT_TEXT_BASE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_CORRUPT_TEXT_BASE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_NODE_KIND_CHANGE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_NODE_KIND_CHANGE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_INVALID_OP_ON_CWD", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_INVALID_OP_ON_CWD)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_BAD_ADM_LOG_START", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_BAD_ADM_LOG_START)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_UNSUPPORTED_FORMAT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_UNSUPPORTED_FORMAT)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_BAD_PATH", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_BAD_PATH)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_INVALID_SCHEDULE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_INVALID_SCHEDULE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_INVALID_RELOCATION", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_INVALID_RELOCATION)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_INVALID_SWITCH", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_INVALID_SWITCH)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_MISMATCHED_CHANGELIST", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_MISMATCHED_CHANGELIST)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_COPYFROM_PATH_NOT_FOUND", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_COPYFROM_PATH_NOT_FOUND)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_CHANGELIST_MOVE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_CHANGELIST_MOVE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_CANNOT_DELETE_FILE_EXTERNAL", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_CANNOT_DELETE_FILE_EXTERNAL)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_CANNOT_MOVE_FILE_EXTERNAL", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_CANNOT_MOVE_FILE_EXTERNAL)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_DB_ERROR", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_DB_ERROR)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_MISSING", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_MISSING)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_NOT_SYMLINK", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_NOT_SYMLINK)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_PATH_UNEXPECTED_STATUS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_PATH_UNEXPECTED_STATUS)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_UPGRADE_REQUIRED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_UPGRADE_REQUIRED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_CLEANUP_REQUIRED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_CLEANUP_REQUIRED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_INVALID_OPERATION_DEPTH", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_INVALID_OPERATION_DEPTH)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_PATH_ACCESS_DENIED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_PATH_ACCESS_DENIED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_MIXED_REVISIONS", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_MIXED_REVISIONS)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_WC_DUPLICATE_EXTERNALS_TARGET", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_WC_DUPLICATE_EXTERNALS_TARGET)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_GENERAL", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_GENERAL)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_CLEANUP", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_CLEANUP)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_ALREADY_OPEN", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_ALREADY_OPEN)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_NOT_OPEN", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_NOT_OPEN)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_CORRUPT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_CORRUPT)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_PATH_SYNTAX", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_PATH_SYNTAX)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_NO_SUCH_REVISION", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_NO_SUCH_REVISION)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_NO_SUCH_TRANSACTION", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_NO_SUCH_TRANSACTION)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_NO_SUCH_ENTRY", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_NO_SUCH_ENTRY)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_NO_SUCH_REPRESENTATION", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_NO_SUCH_REPRESENTATION)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_NO_SUCH_STRING", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_NO_SUCH_STRING)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_NO_SUCH_COPY", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_NO_SUCH_COPY)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_TRANSACTION_NOT_MUTABLE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_TRANSACTION_NOT_MUTABLE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_NOT_FOUND", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_NOT_FOUND)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_ID_NOT_FOUND", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_ID_NOT_FOUND)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_NOT_ID", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_NOT_ID)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_NOT_DIRECTORY", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_NOT_DIRECTORY)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_NOT_FILE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_NOT_FILE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_NOT_SINGLE_PATH_COMPONENT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_NOT_SINGLE_PATH_COMPONENT)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_NOT_MUTABLE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_NOT_MUTABLE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_ALREADY_EXISTS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_ALREADY_EXISTS)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_ROOT_DIR", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_ROOT_DIR)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_NOT_TXN_ROOT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_NOT_TXN_ROOT)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_NOT_REVISION_ROOT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_NOT_REVISION_ROOT)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_CONFLICT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_CONFLICT)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_REP_CHANGED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_REP_CHANGED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_REP_NOT_MUTABLE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_REP_NOT_MUTABLE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_MALFORMED_SKEL", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_MALFORMED_SKEL)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_TXN_OUT_OF_DATE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_TXN_OUT_OF_DATE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_BERKELEY_DB", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_BERKELEY_DB)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_BERKELEY_DB_DEADLOCK", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_BERKELEY_DB_DEADLOCK)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_TRANSACTION_DEAD", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_TRANSACTION_DEAD)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_TRANSACTION_NOT_DEAD", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_TRANSACTION_NOT_DEAD)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_UNKNOWN_FS_TYPE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_UNKNOWN_FS_TYPE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_NO_USER", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_NO_USER)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_PATH_ALREADY_LOCKED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_PATH_ALREADY_LOCKED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_PATH_NOT_LOCKED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_PATH_NOT_LOCKED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_BAD_LOCK_TOKEN", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_BAD_LOCK_TOKEN)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_NO_LOCK_TOKEN", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_NO_LOCK_TOKEN)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_LOCK_OWNER_MISMATCH", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_LOCK_OWNER_MISMATCH)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_NO_SUCH_LOCK", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_NO_SUCH_LOCK)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_LOCK_EXPIRED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_LOCK_EXPIRED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_OUT_OF_DATE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_OUT_OF_DATE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_UNSUPPORTED_FORMAT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_UNSUPPORTED_FORMAT)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_REP_BEING_WRITTEN", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_REP_BEING_WRITTEN)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_TXN_NAME_TOO_LONG", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_TXN_NAME_TOO_LONG)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_NO_SUCH_NODE_ORIGIN", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_NO_SUCH_NODE_ORIGIN)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_UNSUPPORTED_UPGRADE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_UNSUPPORTED_UPGRADE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_NO_SUCH_CHECKSUM_REP", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_NO_SUCH_CHECKSUM_REP)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_PROP_BASEVALUE_MISMATCH", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_PROP_BASEVALUE_MISMATCH)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_INCORRECT_EDITOR_COMPLETION", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_INCORRECT_EDITOR_COMPLETION)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_PACKED_REVPROP_READ_FAILURE", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_PACKED_REVPROP_READ_FAILURE)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_FS_REVPROP_CACHE_INIT_FAILURE", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_FS_REVPROP_CACHE_INIT_FAILURE)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_REPOS_LOCKED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_REPOS_LOCKED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_REPOS_HOOK_FAILURE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_REPOS_HOOK_FAILURE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_REPOS_BAD_ARGS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_REPOS_BAD_ARGS)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_REPOS_NO_DATA_FOR_REPORT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_REPOS_NO_DATA_FOR_REPORT)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_REPOS_BAD_REVISION_REPORT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_REPOS_BAD_REVISION_REPORT)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_REPOS_UNSUPPORTED_VERSION", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_REPOS_UNSUPPORTED_VERSION)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_REPOS_DISABLED_FEATURE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_REPOS_DISABLED_FEATURE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_REPOS_POST_COMMIT_HOOK_FAILED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_REPOS_POST_COMMIT_HOOK_FAILED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_REPOS_POST_LOCK_HOOK_FAILED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_REPOS_POST_LOCK_HOOK_FAILED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_REPOS_POST_UNLOCK_HOOK_FAILED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_REPOS_POST_UNLOCK_HOOK_FAILED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_REPOS_UNSUPPORTED_UPGRADE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_REPOS_UNSUPPORTED_UPGRADE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_ILLEGAL_URL", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_ILLEGAL_URL)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_NOT_AUTHORIZED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_NOT_AUTHORIZED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_UNKNOWN_AUTH", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_UNKNOWN_AUTH)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_NOT_IMPLEMENTED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_NOT_IMPLEMENTED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_OUT_OF_DATE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_OUT_OF_DATE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_NO_REPOS_UUID", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_NO_REPOS_UUID)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_UNSUPPORTED_ABI_VERSION", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_UNSUPPORTED_ABI_VERSION)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_NOT_LOCKED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_NOT_LOCKED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_PARTIAL_REPLAY_NOT_SUPPORTED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_PARTIAL_REPLAY_NOT_SUPPORTED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_UUID_MISMATCH", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_UUID_MISMATCH)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_REPOS_ROOT_URL_MISMATCH", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_REPOS_ROOT_URL_MISMATCH)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SESSION_URL_MISMATCH", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SESSION_URL_MISMATCH)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_CANNOT_CREATE_TUNNEL", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_CANNOT_CREATE_TUNNEL)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_DAV_SOCK_INIT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_DAV_SOCK_INIT)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_DAV_CREATING_REQUEST", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_DAV_CREATING_REQUEST)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_DAV_REQUEST_FAILED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_DAV_REQUEST_FAILED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_DAV_OPTIONS_REQ_FAILED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_DAV_OPTIONS_REQ_FAILED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_DAV_PROPS_NOT_FOUND", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_DAV_PROPS_NOT_FOUND)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_DAV_ALREADY_EXISTS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_DAV_ALREADY_EXISTS)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_DAV_INVALID_CONFIG_VALUE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_DAV_INVALID_CONFIG_VALUE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_DAV_PATH_NOT_FOUND", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_DAV_PATH_NOT_FOUND)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_DAV_PROPPATCH_FAILED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_DAV_PROPPATCH_FAILED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_DAV_MALFORMED_DATA", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_DAV_MALFORMED_DATA)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_DAV_RESPONSE_HEADER_BADNESS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_DAV_RESPONSE_HEADER_BADNESS)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_DAV_RELOCATED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_DAV_RELOCATED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_DAV_CONN_TIMEOUT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_DAV_CONN_TIMEOUT)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_DAV_FORBIDDEN", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_DAV_FORBIDDEN)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_LOCAL_REPOS_NOT_FOUND", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_LOCAL_REPOS_NOT_FOUND)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_LOCAL_REPOS_OPEN_FAILED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_LOCAL_REPOS_OPEN_FAILED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
- SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SVN_CMD_ERR", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SVN_CMD_ERR)));
- SvREADONLY_on(sv);
- } while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
- SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SVN_UNKNOWN_CMD", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SVN_UNKNOWN_CMD)));
- SvREADONLY_on(sv);
- } while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
- SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SVN_CONNECTION_CLOSED", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SVN_CONNECTION_CLOSED)));
- SvREADONLY_on(sv);
- } while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
- SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SVN_IO_ERROR", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SVN_IO_ERROR)));
- SvREADONLY_on(sv);
- } while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
- SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SVN_MALFORMED_DATA", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SVN_MALFORMED_DATA)));
- SvREADONLY_on(sv);
- } while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
- SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SVN_REPOS_NOT_FOUND", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SVN_REPOS_NOT_FOUND)));
- SvREADONLY_on(sv);
- } while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
- SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SVN_BAD_VERSION", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SVN_BAD_VERSION)));
- SvREADONLY_on(sv);
- } while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
- SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SVN_NO_MECHANISMS", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SVN_NO_MECHANISMS)));
- SvREADONLY_on(sv);
- } while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
- SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SVN_EDIT_ABORTED", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SVN_EDIT_ABORTED)));
- SvREADONLY_on(sv);
- } while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
- SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SERF_SSPI_INITIALISATION_FAILED", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SERF_SSPI_INITIALISATION_FAILED)));
- SvREADONLY_on(sv);
- } while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
- SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED)));
- SvREADONLY_on(sv);
- } while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
- SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SERF_GSSAPI_INITIALISATION_FAILED", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SERF_GSSAPI_INITIALISATION_FAILED)));
- SvREADONLY_on(sv);
- } while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
- SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SERF_WRAPPED_ERROR", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SERF_WRAPPED_ERROR)));
- SvREADONLY_on(sv);
- } while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
- SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_AUTHN_CREDS_UNAVAILABLE", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_AUTHN_CREDS_UNAVAILABLE)));
- SvREADONLY_on(sv);
- } while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
- SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_AUTHN_NO_PROVIDER", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_AUTHN_NO_PROVIDER)));
- SvREADONLY_on(sv);
- } while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
- SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_AUTHN_PROVIDERS_EXHAUSTED", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_AUTHN_PROVIDERS_EXHAUSTED)));
- SvREADONLY_on(sv);
- } while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
- SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_AUTHN_CREDS_NOT_SAVED", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_AUTHN_CREDS_NOT_SAVED)));
- SvREADONLY_on(sv);
- } while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
- SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_AUTHN_FAILED", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_AUTHN_FAILED)));
- SvREADONLY_on(sv);
- } while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
- SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_AUTHZ_ROOT_UNREADABLE", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_AUTHZ_ROOT_UNREADABLE)));
- SvREADONLY_on(sv);
- } while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
- SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_AUTHZ_UNREADABLE", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_AUTHZ_UNREADABLE)));
- SvREADONLY_on(sv);
- } while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
- SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_AUTHZ_PARTIALLY_READABLE", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_AUTHZ_PARTIALLY_READABLE)));
- SvREADONLY_on(sv);
- } while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
- SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_AUTHZ_INVALID_CONFIG", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_AUTHZ_INVALID_CONFIG)));
- SvREADONLY_on(sv);
- } while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
- SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_AUTHZ_UNWRITABLE", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_AUTHZ_UNWRITABLE)));
- SvREADONLY_on(sv);
- } while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_SVNDIFF_INVALID_HEADER", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_SVNDIFF_INVALID_HEADER)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_SVNDIFF_CORRUPT_WINDOW", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_SVNDIFF_CORRUPT_WINDOW)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_SVNDIFF_BACKWARD_VIEW", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_SVNDIFF_BACKWARD_VIEW)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_SVNDIFF_INVALID_OPS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_SVNDIFF_INVALID_OPS)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_SVNDIFF_UNEXPECTED_END", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_SVNDIFF_UNEXPECTED_END)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_SVNDIFF_INVALID_COMPRESSED_DATA", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_SVNDIFF_INVALID_COMPRESSED_DATA)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
- SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_DIFF_DATASOURCE_MODIFIED", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_DIFF_DATASOURCE_MODIFIED)));
- SvREADONLY_on(sv);
- } while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_APMOD_MISSING_PATH_TO_FS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_APMOD_MISSING_PATH_TO_FS)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_APMOD_MALFORMED_URI", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_APMOD_MALFORMED_URI)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_APMOD_ACTIVITY_NOT_FOUND", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_APMOD_ACTIVITY_NOT_FOUND)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_APMOD_BAD_BASELINE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_APMOD_BAD_BASELINE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_APMOD_CONNECTION_ABORTED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_APMOD_CONNECTION_ABORTED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CLIENT_VERSIONED_PATH_REQUIRED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CLIENT_VERSIONED_PATH_REQUIRED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CLIENT_RA_ACCESS_REQUIRED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CLIENT_RA_ACCESS_REQUIRED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CLIENT_BAD_REVISION", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CLIENT_BAD_REVISION)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CLIENT_DUPLICATE_COMMIT_URL", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CLIENT_DUPLICATE_COMMIT_URL)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CLIENT_IS_BINARY_FILE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CLIENT_IS_BINARY_FILE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CLIENT_INVALID_EXTERNALS_DESCRIPTION", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CLIENT_INVALID_EXTERNALS_DESCRIPTION)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CLIENT_MODIFIED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CLIENT_MODIFIED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CLIENT_IS_DIRECTORY", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CLIENT_IS_DIRECTORY)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CLIENT_REVISION_RANGE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CLIENT_REVISION_RANGE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CLIENT_INVALID_RELOCATION", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CLIENT_INVALID_RELOCATION)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CLIENT_REVISION_AUTHOR_CONTAINS_NEWLINE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CLIENT_REVISION_AUTHOR_CONTAINS_NEWLINE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CLIENT_PROPERTY_NAME", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CLIENT_PROPERTY_NAME)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CLIENT_UNRELATED_RESOURCES", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CLIENT_UNRELATED_RESOURCES)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CLIENT_MISSING_LOCK_TOKEN", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CLIENT_MISSING_LOCK_TOKEN)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CLIENT_MULTIPLE_SOURCES_DISALLOWED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CLIENT_MULTIPLE_SOURCES_DISALLOWED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CLIENT_NO_VERSIONED_PARENT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CLIENT_NO_VERSIONED_PARENT)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CLIENT_NOT_READY_TO_MERGE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CLIENT_NOT_READY_TO_MERGE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CLIENT_FILE_EXTERNAL_OVERWRITE_VERSIONED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CLIENT_FILE_EXTERNAL_OVERWRITE_VERSIONED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CLIENT_PATCH_BAD_STRIP_COUNT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CLIENT_PATCH_BAD_STRIP_COUNT)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CLIENT_CYCLE_DETECTED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CLIENT_CYCLE_DETECTED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CLIENT_MERGE_UPDATE_REQUIRED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CLIENT_MERGE_UPDATE_REQUIRED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CLIENT_INVALID_MERGEINFO_NO_MERGETRACKING", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CLIENT_INVALID_MERGEINFO_NO_MERGETRACKING)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CLIENT_NO_LOCK_TOKEN", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CLIENT_NO_LOCK_TOKEN)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CLIENT_FORBIDDEN_BY_SERVER", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CLIENT_FORBIDDEN_BY_SERVER)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_BASE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_BASE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_PLUGIN_LOAD_FAILURE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_PLUGIN_LOAD_FAILURE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_MALFORMED_FILE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_MALFORMED_FILE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_INCOMPLETE_DATA", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_INCOMPLETE_DATA)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_INCORRECT_PARAMS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_INCORRECT_PARAMS)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_UNVERSIONED_RESOURCE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_UNVERSIONED_RESOURCE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_TEST_FAILED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_TEST_FAILED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_UNSUPPORTED_FEATURE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_UNSUPPORTED_FEATURE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_BAD_PROP_KIND", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_BAD_PROP_KIND)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_ILLEGAL_TARGET", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_ILLEGAL_TARGET)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_DELTA_MD5_CHECKSUM_ABSENT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_DELTA_MD5_CHECKSUM_ABSENT)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_DIR_NOT_EMPTY", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_DIR_NOT_EMPTY)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_EXTERNAL_PROGRAM", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_EXTERNAL_PROGRAM)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_SWIG_PY_EXCEPTION_SET", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_SWIG_PY_EXCEPTION_SET)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CHECKSUM_MISMATCH", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CHECKSUM_MISMATCH)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CANCELLED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CANCELLED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_INVALID_DIFF_OPTION", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_INVALID_DIFF_OPTION)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_PROPERTY_NOT_FOUND", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_PROPERTY_NOT_FOUND)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_NO_AUTH_FILE_PATH", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_NO_AUTH_FILE_PATH)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_VERSION_MISMATCH", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_VERSION_MISMATCH)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_MERGEINFO_PARSE_ERROR", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_MERGEINFO_PARSE_ERROR)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CEASE_INVOCATION", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CEASE_INVOCATION)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_REVNUM_PARSE_FAILURE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_REVNUM_PARSE_FAILURE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_ITER_BREAK", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_ITER_BREAK)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_UNKNOWN_CHANGELIST", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_UNKNOWN_CHANGELIST)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RESERVED_FILENAME_SPECIFIED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RESERVED_FILENAME_SPECIFIED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_UNKNOWN_CAPABILITY", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_UNKNOWN_CAPABILITY)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_TEST_SKIPPED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_TEST_SKIPPED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_NO_APR_MEMCACHE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_NO_APR_MEMCACHE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_ATOMIC_INIT_FAILURE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_ATOMIC_INIT_FAILURE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_SQLITE_ERROR", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_SQLITE_ERROR)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_SQLITE_READONLY", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_SQLITE_READONLY)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_SQLITE_UNSUPPORTED_SCHEMA", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_SQLITE_UNSUPPORTED_SCHEMA)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_SQLITE_BUSY", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_SQLITE_BUSY)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_SQLITE_RESETTING_FOR_ROLLBACK", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_SQLITE_RESETTING_FOR_ROLLBACK)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_SQLITE_CONSTRAINT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_SQLITE_CONSTRAINT)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_TOO_MANY_MEMCACHED_SERVERS", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_TOO_MANY_MEMCACHED_SERVERS)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_MALFORMED_VERSION_STRING", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_MALFORMED_VERSION_STRING)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CORRUPTED_ATOMIC_STORAGE", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CORRUPTED_ATOMIC_STORAGE)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CL_ARG_PARSING_ERROR", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CL_ARG_PARSING_ERROR)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CL_INSUFFICIENT_ARGS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CL_INSUFFICIENT_ARGS)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CL_MUTUALLY_EXCLUSIVE_ARGS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CL_MUTUALLY_EXCLUSIVE_ARGS)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CL_ADM_DIR_RESERVED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CL_ADM_DIR_RESERVED)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CL_LOG_MESSAGE_IS_VERSIONED_FILE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CL_LOG_MESSAGE_IS_VERSIONED_FILE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CL_LOG_MESSAGE_IS_PATHNAME", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CL_LOG_MESSAGE_IS_PATHNAME)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CL_COMMIT_IN_ADDED_DIR", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CL_COMMIT_IN_ADDED_DIR)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CL_NO_EXTERNAL_EDITOR", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CL_NO_EXTERNAL_EDITOR)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CL_BAD_LOG_MESSAGE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CL_BAD_LOG_MESSAGE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CL_UNNECESSARY_LOG_MESSAGE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CL_UNNECESSARY_LOG_MESSAGE)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CL_NO_EXTERNAL_MERGE_TOOL", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CL_NO_EXTERNAL_MERGE_TOOL)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_CL_ERROR_PROCESSING_EXTERNALS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_CL_ERROR_PROCESSING_EXTERNALS)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SVN_CMD_ERR", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SVN_CMD_ERR)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SVN_UNKNOWN_CMD", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SVN_UNKNOWN_CMD)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SVN_CONNECTION_CLOSED", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SVN_CONNECTION_CLOSED)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SVN_IO_ERROR", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SVN_IO_ERROR)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SVN_MALFORMED_DATA", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SVN_MALFORMED_DATA)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SVN_REPOS_NOT_FOUND", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SVN_REPOS_NOT_FOUND)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SVN_BAD_VERSION", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SVN_BAD_VERSION)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SVN_NO_MECHANISMS", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SVN_NO_MECHANISMS)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SVN_EDIT_ABORTED", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SVN_EDIT_ABORTED)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_AUTHN_CREDS_UNAVAILABLE", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_AUTHN_CREDS_UNAVAILABLE)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_AUTHN_NO_PROVIDER", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_AUTHN_NO_PROVIDER)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_AUTHN_PROVIDERS_EXHAUSTED", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_AUTHN_PROVIDERS_EXHAUSTED)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_AUTHN_CREDS_NOT_SAVED", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_AUTHN_CREDS_NOT_SAVED)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_AUTHN_FAILED", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_AUTHN_FAILED)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_AUTHZ_ROOT_UNREADABLE", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_AUTHZ_ROOT_UNREADABLE)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_AUTHZ_UNREADABLE", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_AUTHZ_UNREADABLE)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_AUTHZ_PARTIALLY_READABLE", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_AUTHZ_PARTIALLY_READABLE)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_AUTHZ_INVALID_CONFIG", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_AUTHZ_INVALID_CONFIG)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_AUTHZ_UNWRITABLE", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_AUTHZ_UNWRITABLE)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_DIFF_DATASOURCE_MODIFIED", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_DIFF_DATASOURCE_MODIFIED)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SERF_SSPI_INITIALISATION_FAILED", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SERF_SSPI_INITIALISATION_FAILED)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SERF_GSSAPI_INITIALISATION_FAILED", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SERF_GSSAPI_INITIALISATION_FAILED)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_RA_SERF_WRAPPED_ERROR", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_RA_SERF_WRAPPED_ERROR)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_ASSERTION_FAIL", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_ASSERTION_FAIL)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_ASSERTION_ONLY_TRACING_LINKS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_ASSERTION_ONLY_TRACING_LINKS)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ERR_LAST", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(SVN_ERR_LAST)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_UNALIGNED_ACCESS_IS_OK", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "TRUE", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(1)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "FALSE", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_node_none", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_node_none)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_node_file", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_node_file)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_node_dir", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_node_dir)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_node_unknown", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_node_unknown)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "svn_node_symlink", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_node_symlink)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_tristate_false", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_tristate_false)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_tristate_true", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_tristate_true)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_tristate_unknown", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_tristate_unknown)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_REVNUM_T_FMT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("ld"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
- SV *sv = get_sv((char*) SWIG_prefix "TRUE", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(1)));
- SvREADONLY_on(sv);
- } while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
- SV *sv = get_sv((char*) SWIG_prefix "FALSE", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0)));
- SvREADONLY_on(sv);
- } while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_nonrecursive", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_nonrecursive)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_recursive", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_recursive)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_depth_unknown", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_depth_unknown)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_depth_exclude", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_depth_exclude)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_depth_empty", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_depth_empty)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_depth_files", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_depth_files)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_depth_immediates", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_depth_immediates)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_depth_infinity", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_depth_infinity)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_DIRENT_KIND", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0x00001)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_DIRENT_SIZE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0x00002)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_DIRENT_HAS_PROPS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0x00004)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_DIRENT_CREATED_REV", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0x00008)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_DIRENT_TIME", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0x00010)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_DIRENT_LAST_AUTHOR", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0x00020)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_KEYWORD_MAX_LEN", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(255)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_KEYWORD_REVISION_LONG", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("LastChangedRevision"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_KEYWORD_REVISION_SHORT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("Rev"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_KEYWORD_REVISION_MEDIUM", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("Revision"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_KEYWORD_DATE_LONG", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("LastChangedDate"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_KEYWORD_DATE_SHORT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("Date"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_KEYWORD_AUTHOR_LONG", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("LastChangedBy"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_KEYWORD_AUTHOR_SHORT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("Author"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_KEYWORD_URL_LONG", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("HeadURL"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_KEYWORD_URL_SHORT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("URL"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_KEYWORD_ID", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("Id"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_KEYWORD_HEADER", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("Header"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_STREAM_CHUNK_SIZE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(102400)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN__STREAM_CHUNK_SIZE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(16384)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_ALLOCATOR_RECOMMENDED_MAX_FREE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)((4096*1024))));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_VER_MAJOR", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(1)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_VER_MINOR", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(7)));
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(8)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_VER_PATCH", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(6)));
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(13)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_VER_MICRO", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(6)));
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(13)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_VER_LIBRARY", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(1)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_VER_TAG", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_FromCharPtr(" (r1370777)"));
+ sv_setsv(sv, SWIG_FromCharPtr(" (r1667537)"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_VER_NUMTAG", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr(""));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_VER_REVISION", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(1370777)));
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(1667537)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_VER_NUM", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_FromCharPtr("1.7.6"));
+ sv_setsv(sv, SWIG_FromCharPtr("1.8.13"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_VER_NUMBER", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_FromCharPtr("1.7.6"));
+ sv_setsv(sv, SWIG_FromCharPtr("1.8.13"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_VERSION", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_FromCharPtr("1.7.6 (r1370777)"));
+ sv_setsv(sv, SWIG_FromCharPtr("1.8.13 (r1667537)"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_prop_entry_kind", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_prop_entry_kind)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_prop_wc_kind", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_prop_wc_kind)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_prop_regular_kind", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_prop_regular_kind)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_PREFIX", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_BOOLEAN_TRUE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("*"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_MIME_TYPE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:mime-type"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_IGNORE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:ignore"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_EOL_STYLE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:eol-style"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_KEYWORDS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:keywords"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_EXECUTABLE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:executable"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_EXECUTABLE_VALUE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("*"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_NEEDS_LOCK", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:needs-lock"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_NEEDS_LOCK_VALUE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("*"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_SPECIAL", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:special"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_SPECIAL_VALUE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("*"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_EXTERNALS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:externals"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_MERGEINFO", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:mergeinfo"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_INHERITABLE_AUTO_PROPS", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_FromCharPtr("svn:auto-props"));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_INHERITABLE_IGNORES", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_FromCharPtr("svn:global-ignores"));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_TEXT_TIME", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:text-time"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_OWNER", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:owner"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_GROUP", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:group"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_UNIX_MODE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:unix-mode"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_WC_PREFIX", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:wc:"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_ENTRY_PREFIX", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:entry:"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_ENTRY_COMMITTED_REV", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:entry:committed-rev"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_ENTRY_COMMITTED_DATE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:entry:committed-date"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_ENTRY_LAST_AUTHOR", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:entry:last-author"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_ENTRY_UUID", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:entry:uuid"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_ENTRY_LOCK_TOKEN", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:entry:lock-token"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_CUSTOM_PREFIX", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:custom:"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_REVISION_AUTHOR", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:author"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_REVISION_LOG", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:log"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_REVISION_DATE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:date"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_REVISION_ORIG_DATE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:original-date"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_REVISION_AUTOVERSIONED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:autoversioned"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVNSYNC_PROP_PREFIX", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:sync-"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVNSYNC_PROP_LOCK", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:sync-lock"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVNSYNC_PROP_FROM_URL", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:sync-from-url"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVNSYNC_PROP_FROM_UUID", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:sync-from-uuid"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVNSYNC_PROP_LAST_MERGED_REV", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:sync-last-merged-rev"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVNSYNC_PROP_CURRENTLY_COPYING", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:sync-currently-copying"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_TXN_PREFIX", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_FromCharPtr("svn:txn-"));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_TXN_CLIENT_COMPAT_VERSION", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_FromCharPtr("svn:txn-client-compat-version"));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_TXN_USER_AGENT", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_FromCharPtr("svn:txn-user-agent"));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_PROP_REVISION_PREFIX", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_FromCharPtr("svn:revision-"));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_OPT_MAX_ALIASES", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(3)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_OPT_MAX_OPTIONS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(50)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_OPT_FIRST_LONGOPT_ID", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(256)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_opt_revision_unspecified", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_opt_revision_unspecified)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_opt_revision_number", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_opt_revision_number)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_opt_revision_date", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_opt_revision_date)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_opt_revision_committed", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_opt_revision_committed)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_opt_revision_previous", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_opt_revision_previous)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_opt_revision_base", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_opt_revision_base)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_opt_revision_working", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_opt_revision_working)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_opt_revision_head", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_opt_revision_head)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_CRED_SIMPLE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn.simple"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_CRED_USERNAME", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn.username"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_CRED_SSL_CLIENT_CERT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn.ssl.client-cert"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_CRED_SSL_CLIENT_CERT_PW", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn.ssl.client-passphrase"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_CRED_SSL_SERVER_TRUST", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn.ssl.server"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_SSL_NOTYETVALID", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0x00000001)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_SSL_EXPIRED", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0x00000002)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_SSL_CNMISMATCH", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0x00000004)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_SSL_UNKNOWNCA", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0x00000008)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_SSL_OTHER", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0x40000000)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_PARAM_PREFIX", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:auth:"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_PARAM_DEFAULT_USERNAME", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:auth:username"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_PARAM_DEFAULT_PASSWORD", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:auth:password"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_PARAM_NON_INTERACTIVE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:auth:non-interactive"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_PARAM_DONT_STORE_PASSWORDS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:auth:dont-store-passwords"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_PARAM_STORE_PLAINTEXT_PASSWORDS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:auth:store-plaintext-passwords"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_PARAM_DONT_STORE_SSL_CLIENT_CERT_PP", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:auth:dont-store-ssl-client-cert-pp"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_PARAM_STORE_SSL_CLIENT_CERT_PP_PLAINTEXT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:auth:store-ssl-client-cert-pp-plaintext"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_PARAM_NO_AUTH_CACHE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:auth:no-auth-cache"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_PARAM_SSL_SERVER_FAILURES", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:auth:ssl:failures"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_PARAM_SSL_SERVER_CERT_INFO", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:auth:ssl:cert-info"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_PARAM_CONFIG_CATEGORY_CONFIG", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:auth:config-category-config"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_PARAM_CONFIG_CATEGORY_SERVERS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:auth:config-category-servers"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_PARAM_CONFIG", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:auth:config-category-servers"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_PARAM_SERVER_GROUP", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:auth:server-group"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_PARAM_CONFIG_DIR", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:auth:config-dir"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_FUNC", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("gnome-keyring-unlock-prompt-func"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_BATON", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("gnome-keyring-unlock-prompt-baton"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_CATEGORY_SERVERS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("servers"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_SECTION_GROUPS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("groups"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_SECTION_GLOBAL", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("global"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_HTTP_PROXY_HOST", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("http-proxy-host"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_HTTP_PROXY_PORT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("http-proxy-port"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_HTTP_PROXY_USERNAME", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("http-proxy-username"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_HTTP_PROXY_PASSWORD", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("http-proxy-password"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_HTTP_PROXY_EXCEPTIONS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("http-proxy-exceptions"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_HTTP_TIMEOUT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("http-timeout"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_HTTP_COMPRESSION", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("http-compression"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_NEON_DEBUG_MASK", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("neon-debug-mask"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_HTTP_AUTH_TYPES", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("http-auth-types"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_SSL_AUTHORITY_FILES", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("ssl-authority-files"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_SSL_TRUST_DEFAULT_CA", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("ssl-trust-default-ca"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_SSL_CLIENT_CERT_FILE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("ssl-client-cert-file"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_SSL_CLIENT_CERT_PASSWORD", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("ssl-client-cert-password"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_SSL_PKCS11_PROVIDER", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("ssl-pkcs11-provider"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_HTTP_LIBRARY", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("http-library"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_STORE_PASSWORDS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("store-passwords"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_STORE_PLAINTEXT_PASSWORDS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("store-plaintext-passwords"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_STORE_AUTH_CREDS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("store-auth-creds"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_STORE_SSL_CLIENT_CERT_PP", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("store-ssl-client-cert-pp"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_STORE_SSL_CLIENT_CERT_PP_PLAINTEXT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("store-ssl-client-cert-pp-plaintext"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_USERNAME", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("username"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_HTTP_BULK_UPDATES", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_FromCharPtr("http-bulk-updates"));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_HTTP_MAX_CONNECTIONS", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_FromCharPtr("http-max-connections"));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_CATEGORY_CONFIG", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("config"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_SECTION_AUTH", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("auth"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_PASSWORD_STORES", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("password-stores"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_KWALLET_WALLET", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("kwallet-wallet"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_KWALLET_SVN_APPLICATION_NAME_WITH_PID", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("kwallet-svn-application-name-with-pid"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_SSL_CLIENT_CERT_FILE_PROMPT", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_FromCharPtr("ssl-client-cert-file-prompt"));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_SECTION_HELPERS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("helpers"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_EDITOR_CMD", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("editor-cmd"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_DIFF_CMD", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("diff-cmd"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_DIFF_EXTENSIONS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("diff-extensions"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_DIFF3_CMD", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("diff3-cmd"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_DIFF3_HAS_PROGRAM_ARG", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("diff3-has-program-arg"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_MERGE_TOOL_CMD", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("merge-tool-cmd"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_SECTION_MISCELLANY", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("miscellany"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_GLOBAL_IGNORES", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("global-ignores"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_LOG_ENCODING", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("log-encoding"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_USE_COMMIT_TIMES", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("use-commit-times"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_TEMPLATE_ROOT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("template-root"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_ENABLE_AUTO_PROPS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("enable-auto-props"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_NO_UNLOCK", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("no-unlock"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_MIMETYPES_FILE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("mime-types-file"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_PRESERVED_CF_EXTS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("preserved-conflict-file-exts"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_INTERACTIVE_CONFLICTS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("interactive-conflicts"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_MEMORY_CACHE_SIZE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("memory-cache-size"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_SECTION_TUNNELS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("tunnels"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_SECTION_AUTO_PROPS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("auto-props"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_SECTION_WORKING_COPY", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_FromCharPtr("working-copy"));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_SQLITE_EXCLUSIVE", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_FromCharPtr("exclusive-locking"));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_SQLITE_EXCLUSIVE_CLIENTS", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_FromCharPtr("exclusive-locking-clients"));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_SECTION_GENERAL", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("general"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_ANON_ACCESS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("anon-access"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_AUTH_ACCESS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("auth-access"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_PASSWORD_DB", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("password-db"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_REALM", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("realm"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_AUTHZ_DB", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("authz-db"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_GROUPS_DB", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_FromCharPtr("groups-db"));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_FORCE_USERNAME_CASE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("force-username-case"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_HOOKS_ENV", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_FromCharPtr("hooks-env"));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_SECTION_SASL", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("sasl"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_USE_SASL", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("use-sasl"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_MIN_SSF", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("min-encryption"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_OPTION_MAX_SSF", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("max-encryption"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_SECTION_USERS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("users"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG__DEFAULT_GLOBAL_IGNORES_LINE_1", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_FromCharPtr("*.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo"));
+ sv_setsv(sv, SWIG_FromCharPtr("*.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo __pycache__"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG__DEFAULT_GLOBAL_IGNORES_LINE_2", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("*.rej *~ #*# .#* .*.swp .DS_Store"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_DEFAULT_GLOBAL_IGNORES", TRUE | 0x2 | GV_ADDMULTI);
- sv_setsv(sv, SWIG_FromCharPtr("*.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo *.rej *~ #*# .#* .*.swp .DS_Store"));
+ sv_setsv(sv, SWIG_FromCharPtr("*.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo __pycache__ *.rej *~ #*# .#* .*.swp .DS_Store"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_TRUE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("TRUE"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_FALSE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("FALSE"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_ASK", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("ASK"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_DEFAULT_OPTION_STORE_PASSWORDS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(1)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_DEFAULT_OPTION_STORE_PLAINTEXT_PASSWORDS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("ASK"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_DEFAULT_OPTION_STORE_AUTH_CREDS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(1)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_DEFAULT_OPTION_STORE_SSL_CLIENT_CERT_PP", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(1)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_DEFAULT_OPTION_STORE_SSL_CLIENT_CERT_PP_PLAINTEXT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("ASK"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_DEFAULT_OPTION_HTTP_MAX_CONNECTIONS", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(4)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CONFIG_REALMSTRING_KEY", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("svn:realmstring"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_MERGEINFO_NONINHERITABLE_STR", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("*"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_mergeinfo_explicit", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_mergeinfo_explicit)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_mergeinfo_inherited", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_mergeinfo_inherited)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_mergeinfo_nearest_ancestor", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_mergeinfo_nearest_ancestor)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_io_file_del_none", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_io_file_del_none)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_io_file_del_on_close", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_io_file_del_on_close)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_io_file_del_on_pool_cleanup", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_io_file_del_on_pool_cleanup)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "svn_checksum_md5", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_checksum_md5)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "svn_checksum_sha1", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_checksum_sha1)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_diff_datasource_original", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_diff_datasource_original)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_diff_datasource_modified", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_diff_datasource_modified)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_diff_datasource_latest", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_diff_datasource_latest)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_diff_datasource_ancestor", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_diff_datasource_ancestor)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_diff_conflict_display_modified_latest", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_diff_conflict_display_modified_latest)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_diff_conflict_display_resolved_modified_latest", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_diff_conflict_display_resolved_modified_latest)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_diff_conflict_display_modified_original_latest", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_diff_conflict_display_modified_original_latest)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_diff_conflict_display_modified", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_diff_conflict_display_modified)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_diff_conflict_display_latest", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_diff_conflict_display_latest)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_diff_conflict_display_only_conflicts", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_diff_conflict_display_only_conflicts)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_diff_file_ignore_space_none", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_diff_file_ignore_space_none)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_diff_file_ignore_space_change", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_diff_file_ignore_space_change)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_diff_file_ignore_space_all", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_diff_file_ignore_space_all)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_diff_op_unchanged", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_diff_op_unchanged)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_diff_op_added", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_diff_op_added)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_diff_op_deleted", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_diff_op_deleted)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_diff_op_copied", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_diff_op_copied)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_diff_op_moved", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_diff_op_moved)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_diff_op_modified", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_diff_op_modified)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_NO_ERROR", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0)));
SvREADONLY_on(sv);
diff --git a/subversion/bindings/swig/perl/native/svn_client.c b/subversion/bindings/swig/perl/native/svn_client.c
index 3242bf7..69d3b7a 100644
--- a/subversion/bindings/swig/perl/native/svn_client.c
+++ b/subversion/bindings/swig/perl/native/svn_client.c
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -830,50 +830,35 @@ extern "C" {
SWIGINTERN const char*
SWIG_Perl_ErrorType(int code) {
- const char* type = 0;
switch(code) {
case SWIG_MemoryError:
- type = "MemoryError";
- break;
+ return "MemoryError";
case SWIG_IOError:
- type = "IOError";
- break;
+ return "IOError";
case SWIG_RuntimeError:
- type = "RuntimeError";
- break;
+ return "RuntimeError";
case SWIG_IndexError:
- type = "IndexError";
- break;
+ return "IndexError";
case SWIG_TypeError:
- type = "TypeError";
- break;
+ return "TypeError";
case SWIG_DivisionByZero:
- type = "ZeroDivisionError";
- break;
+ return "ZeroDivisionError";
case SWIG_OverflowError:
- type = "OverflowError";
- break;
+ return "OverflowError";
case SWIG_SyntaxError:
- type = "SyntaxError";
- break;
+ return "SyntaxError";
case SWIG_ValueError:
- type = "ValueError";
- break;
+ return "ValueError";
case SWIG_SystemError:
- type = "SystemError";
- break;
+ return "SystemError";
case SWIG_AttributeError:
- type = "AttributeError";
- break;
+ return "AttributeError";
default:
- type = "RuntimeError";
+ return "RuntimeError";
}
- return type;
}
-
-
/* -----------------------------------------------------------------------------
* perlrun.swg
*
@@ -916,14 +901,14 @@ SWIG_Perl_ErrorType(int code) {
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Perl_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Perl_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Perl_SetModule(pointer)
/* Error manipulation */
#define SWIG_ErrorType(code) SWIG_Perl_ErrorType(code)
-#define SWIG_Error(code, msg) sv_setpvf(GvSV(PL_errgv),"%s %s\n", SWIG_ErrorType(code), msg)
+#define SWIG_Error(code, msg) sv_setpvf(get_sv("@", GV_ADD), "%s %s", SWIG_ErrorType(code), msg)
#define SWIG_fail goto fail
/* Perl-specific SWIG API */
@@ -1017,8 +1002,6 @@ typedef int (*SwigMagicFunc)(struct interpreter *, SV *, MAGIC *);
#endif /* MULTIPLICITY */
#endif /* PERL_OBJECT */
-/* Workaround for bug in perl 5.6.x croak and earlier */
-#if (PERL_VERSION < 8)
# ifdef PERL_OBJECT
# define SWIG_croak_null() SWIG_Perl_croak_null(pPerl)
static void SWIG_Perl_croak_null(CPerlObj *pPerl)
@@ -1026,17 +1009,16 @@ static void SWIG_Perl_croak_null(CPerlObj *pPerl)
static void SWIG_croak_null()
# endif
{
- SV *err=ERRSV;
+ SV *err = get_sv("@", GV_ADD);
# if (PERL_VERSION < 6)
croak("%_", err);
# else
- if (SvOK(err) && !SvROK(err)) croak("%_", err);
- croak(Nullch);
+ if (sv_isobject(err))
+ croak(0);
+ else
+ croak("%s", SvPV_nolen(err));
# endif
}
-#else
-# define SWIG_croak_null() croak(Nullch)
-#endif
/*
@@ -1088,8 +1070,7 @@ SWIG_TypeProxyCheck(const char *c, swig_type_info *ty) {
if (ty) {
swig_cast_info *iter = ty->cast;
while (iter) {
- if ( (!iter->type->clientdata && (strcmp(iter->type->name, c) == 0)) ||
- (iter->type->clientdata && (strcmp((char*)iter->type->clientdata, c) == 0)) ) {
+ if (strcmp(SWIG_Perl_TypeProxyName(iter->type), c) == 0) {
if (iter == ty->cast)
return iter;
/* Move iter to the top of the linked list */
@@ -1220,7 +1201,7 @@ SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, swig_type_info *t, i
SV *obj=newSV(0);
HV *hash=newHV();
HV *stash;
- sv_setref_pv(obj, (char *) SWIG_Perl_TypeProxyName(t), ptr);
+ sv_setref_pv(obj, SWIG_Perl_TypeProxyName(t), ptr);
stash=SvSTASH(SvRV(obj));
if (flags & SWIG_POINTER_OWN) {
HV *hv;
@@ -1238,7 +1219,7 @@ SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, swig_type_info *t, i
sv_bless(sv, stash);
}
else {
- sv_setref_pv(sv, (char *) SWIG_Perl_TypeProxyName(t), ptr);
+ sv_setref_pv(sv, SWIG_Perl_TypeProxyName(t), ptr);
}
}
@@ -1329,19 +1310,23 @@ typedef struct {
/* Magic variable code */
#ifndef PERL_OBJECT
-#define swig_create_magic(s,a,b,c) _swig_create_magic(s,a,b,c)
- #ifndef MULTIPLICITY
- SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *))
- #else
- SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(struct interpreter*, SV *, MAGIC *), int (*get)(struct interpreter*, SV *,MAGIC *))
- #endif
+# ifdef __cplusplus
+# define swig_create_magic(s,a,b,c) _swig_create_magic(s,const_cast<char*>(a),b,c)
+# else
+# define swig_create_magic(s,a,b,c) _swig_create_magic(s,(char*)(a),b,c)
+# endif
+# ifndef MULTIPLICITY
+SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *))
+# else
+SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(struct interpreter*, SV *, MAGIC *), int (*get)(struct interpreter*, SV *,MAGIC *))
+# endif
#else
# define swig_create_magic(s,a,b,c) _swig_create_magic(pPerl,s,a,b,c)
SWIGRUNTIME void _swig_create_magic(CPerlObj *pPerl, SV *sv, const char *name, int (CPerlObj::*set)(SV *, MAGIC *), int (CPerlObj::*get)(SV *, MAGIC *))
#endif
{
MAGIC *mg;
- sv_magic(sv,sv,'U',(char *) name,strlen(name));
+ sv_magic(sv,sv,'U',name,strlen(name));
mg = mg_find(sv,'U');
mg->mg_virtual = (MGVTBL *) malloc(sizeof(MGVTBL));
mg->mg_virtual->svt_get = (SwigMagicFunc) get;
@@ -1353,7 +1338,7 @@ SWIGRUNTIME void _swig_create_magic(CPerlObj *pPerl, SV *sv, const char *name, i
SWIGRUNTIME swig_module_info *
-SWIG_Perl_GetModule(void) {
+SWIG_Perl_GetModule(void *SWIGUNUSEDPARM(clientdata)) {
static void *type_pointer = (void *)0;
SV *pointer;
@@ -1447,9 +1432,6 @@ SWIG_Perl_SetModule(swig_module_info *module) {
#ifdef eof
#undef eof
#endif
-#ifdef bool
- #undef bool
-#endif
#ifdef close
#undef close
#endif
@@ -1490,6 +1472,14 @@ SWIG_Perl_SetModule(swig_module_info *module) {
#undef stat
#endif
+#ifdef bool
+ /* Leave if macro is from C99 stdbool.h */
+ #ifndef __bool_true_false_are_defined
+ #undef bool
+ #endif
+#endif
+
+
#define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0)
@@ -1529,145 +1519,155 @@ SWIG_Perl_SetModule(swig_module_info *module) {
#define SWIGTYPE_p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[23]
#define SWIGTYPE_p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[24]
#define SWIGTYPE_p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void swig_types[25]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[26]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[27]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t swig_types[28]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t swig_types[29]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[30]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t swig_types[31]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void swig_types[32]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_struct_svn_wc_status_t__void swig_types[33]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t swig_types[34]
-#define SWIGTYPE_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void swig_types[35]
-#define SWIGTYPE_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[36]
-#define SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t swig_types[37]
-#define SWIGTYPE_p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[38]
-#define SWIGTYPE_p_int swig_types[39]
-#define SWIGTYPE_p_long swig_types[40]
-#define SWIGTYPE_p_p_apr_array_header_t swig_types[41]
-#define SWIGTYPE_p_p_apr_hash_t swig_types[42]
-#define SWIGTYPE_p_p_char swig_types[43]
-#define SWIGTYPE_p_p_svn_auth_provider_object_t swig_types[44]
-#define SWIGTYPE_p_p_svn_client_commit_info_t swig_types[45]
-#define SWIGTYPE_p_p_svn_client_commit_item3_t swig_types[46]
-#define SWIGTYPE_p_p_svn_client_ctx_t swig_types[47]
-#define SWIGTYPE_p_p_svn_commit_info_t swig_types[48]
-#define SWIGTYPE_p_p_svn_ra_session_t swig_types[49]
-#define SWIGTYPE_p_p_svn_string_t swig_types[50]
-#define SWIGTYPE_p_svn_auth_baton_t swig_types[51]
-#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[52]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[53]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[54]
-#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[55]
-#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[56]
-#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[57]
-#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[58]
-#define SWIGTYPE_p_svn_auth_provider_t swig_types[59]
-#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[60]
-#define SWIGTYPE_p_svn_client_commit_info_t swig_types[61]
-#define SWIGTYPE_p_svn_client_commit_item2_t swig_types[62]
-#define SWIGTYPE_p_svn_client_commit_item3_t swig_types[63]
-#define SWIGTYPE_p_svn_client_commit_item_t swig_types[64]
-#define SWIGTYPE_p_svn_client_copy_source_t swig_types[65]
-#define SWIGTYPE_p_svn_client_ctx_t swig_types[66]
-#define SWIGTYPE_p_svn_client_diff_summarize_kind_t swig_types[67]
-#define SWIGTYPE_p_svn_client_diff_summarize_t swig_types[68]
-#define SWIGTYPE_p_svn_client_info2_t swig_types[69]
-#define SWIGTYPE_p_svn_client_proplist_item_t swig_types[70]
-#define SWIGTYPE_p_svn_client_status_t swig_types[71]
-#define SWIGTYPE_p_svn_commit_info_t swig_types[72]
-#define SWIGTYPE_p_svn_config_t swig_types[73]
-#define SWIGTYPE_p_svn_delta_editor_t swig_types[74]
-#define SWIGTYPE_p_svn_depth_t swig_types[75]
-#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[76]
-#define SWIGTYPE_p_svn_diff_datasource_e swig_types[77]
-#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[78]
-#define SWIGTYPE_p_svn_diff_file_options_t swig_types[79]
-#define SWIGTYPE_p_svn_diff_fns2_t swig_types[80]
-#define SWIGTYPE_p_svn_diff_fns_t swig_types[81]
-#define SWIGTYPE_p_svn_diff_hunk_t swig_types[82]
-#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[83]
-#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[84]
-#define SWIGTYPE_p_svn_diff_t swig_types[85]
-#define SWIGTYPE_p_svn_dirent_t swig_types[86]
-#define SWIGTYPE_p_svn_errno_t swig_types[87]
-#define SWIGTYPE_p_svn_error_t swig_types[88]
-#define SWIGTYPE_p_svn_info_t swig_types[89]
-#define SWIGTYPE_p_svn_io_dirent2_t swig_types[90]
-#define SWIGTYPE_p_svn_io_dirent_t swig_types[91]
-#define SWIGTYPE_p_svn_io_file_del_t swig_types[92]
-#define SWIGTYPE_p_svn_location_segment_t swig_types[93]
-#define SWIGTYPE_p_svn_lock_t swig_types[94]
-#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[95]
-#define SWIGTYPE_p_svn_log_changed_path_t swig_types[96]
-#define SWIGTYPE_p_svn_log_entry_t swig_types[97]
-#define SWIGTYPE_p_svn_merge_range_t swig_types[98]
-#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[99]
-#define SWIGTYPE_p_svn_node_kind_t swig_types[100]
-#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[101]
-#define SWIGTYPE_p_svn_opt_revision_t swig_types[102]
-#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[103]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[104]
-#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[105]
-#define SWIGTYPE_p_svn_patch_file_t swig_types[106]
-#define SWIGTYPE_p_svn_patch_t swig_types[107]
-#define SWIGTYPE_p_svn_prop_kind swig_types[108]
-#define SWIGTYPE_p_svn_prop_patch_t swig_types[109]
-#define SWIGTYPE_p_svn_prop_t swig_types[110]
-#define SWIGTYPE_p_svn_ra_callbacks2_t swig_types[111]
-#define SWIGTYPE_p_svn_ra_callbacks_t swig_types[112]
-#define SWIGTYPE_p_svn_ra_plugin_t swig_types[113]
-#define SWIGTYPE_p_svn_ra_reporter2_t swig_types[114]
-#define SWIGTYPE_p_svn_ra_reporter3_t swig_types[115]
-#define SWIGTYPE_p_svn_ra_reporter_t swig_types[116]
-#define SWIGTYPE_p_svn_ra_session_t swig_types[117]
-#define SWIGTYPE_p_svn_stream_mark_t swig_types[118]
-#define SWIGTYPE_p_svn_stream_t swig_types[119]
-#define SWIGTYPE_p_svn_string_t swig_types[120]
-#define SWIGTYPE_p_svn_stringbuf_t swig_types[121]
-#define SWIGTYPE_p_svn_tristate_t swig_types[122]
-#define SWIGTYPE_p_svn_txdelta_op_t swig_types[123]
-#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[124]
-#define SWIGTYPE_p_svn_txdelta_window_t swig_types[125]
-#define SWIGTYPE_p_svn_version_checklist_t swig_types[126]
-#define SWIGTYPE_p_svn_version_t swig_types[127]
-#define SWIGTYPE_p_svn_wc_adm_access_t swig_types[128]
-#define SWIGTYPE_p_svn_wc_committed_queue_t swig_types[129]
-#define SWIGTYPE_p_svn_wc_conflict_action_t swig_types[130]
-#define SWIGTYPE_p_svn_wc_conflict_choice_t swig_types[131]
-#define SWIGTYPE_p_svn_wc_conflict_description2_t swig_types[132]
-#define SWIGTYPE_p_svn_wc_conflict_description_t swig_types[133]
-#define SWIGTYPE_p_svn_wc_conflict_kind_t swig_types[134]
-#define SWIGTYPE_p_svn_wc_conflict_reason_t swig_types[135]
-#define SWIGTYPE_p_svn_wc_conflict_result_t swig_types[136]
-#define SWIGTYPE_p_svn_wc_conflict_version_t swig_types[137]
-#define SWIGTYPE_p_svn_wc_context_t swig_types[138]
-#define SWIGTYPE_p_svn_wc_diff_callbacks2_t swig_types[139]
-#define SWIGTYPE_p_svn_wc_diff_callbacks3_t swig_types[140]
-#define SWIGTYPE_p_svn_wc_diff_callbacks4_t swig_types[141]
-#define SWIGTYPE_p_svn_wc_diff_callbacks_t swig_types[142]
-#define SWIGTYPE_p_svn_wc_entry_callbacks2_t swig_types[143]
-#define SWIGTYPE_p_svn_wc_entry_callbacks_t swig_types[144]
-#define SWIGTYPE_p_svn_wc_entry_t swig_types[145]
-#define SWIGTYPE_p_svn_wc_external_item2_t swig_types[146]
-#define SWIGTYPE_p_svn_wc_external_item_t swig_types[147]
-#define SWIGTYPE_p_svn_wc_info_t swig_types[148]
-#define SWIGTYPE_p_svn_wc_merge_outcome_t swig_types[149]
-#define SWIGTYPE_p_svn_wc_notify_action_t swig_types[150]
-#define SWIGTYPE_p_svn_wc_notify_lock_state_t swig_types[151]
-#define SWIGTYPE_p_svn_wc_notify_state_t swig_types[152]
-#define SWIGTYPE_p_svn_wc_notify_t swig_types[153]
-#define SWIGTYPE_p_svn_wc_operation_t swig_types[154]
-#define SWIGTYPE_p_svn_wc_revision_status_t swig_types[155]
-#define SWIGTYPE_p_svn_wc_schedule_t swig_types[156]
-#define SWIGTYPE_p_svn_wc_status2_t swig_types[157]
-#define SWIGTYPE_p_svn_wc_status3_t swig_types[158]
-#define SWIGTYPE_p_svn_wc_status_t swig_types[159]
-#define SWIGTYPE_p_svn_wc_traversal_info_t swig_types[160]
-#define SWIGTYPE_p_unsigned_long swig_types[161]
-#define SWIGTYPE_p_void swig_types[162]
-static swig_type_info *swig_types[164];
-static swig_module_info swig_module = {swig_types, 163, 0, 0, 0, 0};
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[26]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[27]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[28]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t swig_types[29]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t swig_types[30]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[31]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[32]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t swig_types[33]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void swig_types[34]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_struct_svn_wc_status_t__void swig_types[35]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t swig_types[36]
+#define SWIGTYPE_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void swig_types[37]
+#define SWIGTYPE_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[38]
+#define SWIGTYPE_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t swig_types[39]
+#define SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t swig_types[40]
+#define SWIGTYPE_p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[41]
+#define SWIGTYPE_p_int swig_types[42]
+#define SWIGTYPE_p_long swig_types[43]
+#define SWIGTYPE_p_p_apr_array_header_t swig_types[44]
+#define SWIGTYPE_p_p_apr_hash_t swig_types[45]
+#define SWIGTYPE_p_p_char swig_types[46]
+#define SWIGTYPE_p_p_svn_auth_provider_object_t swig_types[47]
+#define SWIGTYPE_p_p_svn_client_commit_info_t swig_types[48]
+#define SWIGTYPE_p_p_svn_client_commit_item3_t swig_types[49]
+#define SWIGTYPE_p_p_svn_client_ctx_t swig_types[50]
+#define SWIGTYPE_p_p_svn_commit_info_t swig_types[51]
+#define SWIGTYPE_p_p_svn_ra_session_t swig_types[52]
+#define SWIGTYPE_p_p_svn_string_t swig_types[53]
+#define SWIGTYPE_p_svn_auth_baton_t swig_types[54]
+#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[55]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[56]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[57]
+#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[58]
+#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[59]
+#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[60]
+#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[61]
+#define SWIGTYPE_p_svn_auth_provider_t swig_types[62]
+#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[63]
+#define SWIGTYPE_p_svn_checksum_ctx_t swig_types[64]
+#define SWIGTYPE_p_svn_checksum_kind_t swig_types[65]
+#define SWIGTYPE_p_svn_checksum_t swig_types[66]
+#define SWIGTYPE_p_svn_client_commit_info_t swig_types[67]
+#define SWIGTYPE_p_svn_client_commit_item2_t swig_types[68]
+#define SWIGTYPE_p_svn_client_commit_item3_t swig_types[69]
+#define SWIGTYPE_p_svn_client_commit_item_t swig_types[70]
+#define SWIGTYPE_p_svn_client_copy_source_t swig_types[71]
+#define SWIGTYPE_p_svn_client_ctx_t swig_types[72]
+#define SWIGTYPE_p_svn_client_diff_summarize_kind_t swig_types[73]
+#define SWIGTYPE_p_svn_client_diff_summarize_t swig_types[74]
+#define SWIGTYPE_p_svn_client_info2_t swig_types[75]
+#define SWIGTYPE_p_svn_client_proplist_item_t swig_types[76]
+#define SWIGTYPE_p_svn_client_status_t swig_types[77]
+#define SWIGTYPE_p_svn_commit_info_t swig_types[78]
+#define SWIGTYPE_p_svn_config_t swig_types[79]
+#define SWIGTYPE_p_svn_delta_editor_t swig_types[80]
+#define SWIGTYPE_p_svn_depth_t swig_types[81]
+#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[82]
+#define SWIGTYPE_p_svn_diff_datasource_e swig_types[83]
+#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[84]
+#define SWIGTYPE_p_svn_diff_file_options_t swig_types[85]
+#define SWIGTYPE_p_svn_diff_fns2_t swig_types[86]
+#define SWIGTYPE_p_svn_diff_fns_t swig_types[87]
+#define SWIGTYPE_p_svn_diff_hunk_t swig_types[88]
+#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[89]
+#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[90]
+#define SWIGTYPE_p_svn_diff_t swig_types[91]
+#define SWIGTYPE_p_svn_dirent_t swig_types[92]
+#define SWIGTYPE_p_svn_errno_t swig_types[93]
+#define SWIGTYPE_p_svn_error_t swig_types[94]
+#define SWIGTYPE_p_svn_info_t swig_types[95]
+#define SWIGTYPE_p_svn_io_dirent2_t swig_types[96]
+#define SWIGTYPE_p_svn_io_dirent_t swig_types[97]
+#define SWIGTYPE_p_svn_io_file_del_t swig_types[98]
+#define SWIGTYPE_p_svn_location_segment_t swig_types[99]
+#define SWIGTYPE_p_svn_lock_t swig_types[100]
+#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[101]
+#define SWIGTYPE_p_svn_log_changed_path_t swig_types[102]
+#define SWIGTYPE_p_svn_log_entry_t swig_types[103]
+#define SWIGTYPE_p_svn_merge_range_t swig_types[104]
+#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[105]
+#define SWIGTYPE_p_svn_node_kind_t swig_types[106]
+#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[107]
+#define SWIGTYPE_p_svn_opt_revision_t swig_types[108]
+#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[109]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[110]
+#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[111]
+#define SWIGTYPE_p_svn_patch_file_t swig_types[112]
+#define SWIGTYPE_p_svn_patch_t swig_types[113]
+#define SWIGTYPE_p_svn_prop_inherited_item_t swig_types[114]
+#define SWIGTYPE_p_svn_prop_kind swig_types[115]
+#define SWIGTYPE_p_svn_prop_patch_t swig_types[116]
+#define SWIGTYPE_p_svn_prop_t swig_types[117]
+#define SWIGTYPE_p_svn_ra_callbacks2_t swig_types[118]
+#define SWIGTYPE_p_svn_ra_callbacks_t swig_types[119]
+#define SWIGTYPE_p_svn_ra_plugin_t swig_types[120]
+#define SWIGTYPE_p_svn_ra_reporter2_t swig_types[121]
+#define SWIGTYPE_p_svn_ra_reporter3_t swig_types[122]
+#define SWIGTYPE_p_svn_ra_reporter_t swig_types[123]
+#define SWIGTYPE_p_svn_ra_session_t swig_types[124]
+#define SWIGTYPE_p_svn_stream_mark_t swig_types[125]
+#define SWIGTYPE_p_svn_stream_t swig_types[126]
+#define SWIGTYPE_p_svn_string_t swig_types[127]
+#define SWIGTYPE_p_svn_stringbuf_t swig_types[128]
+#define SWIGTYPE_p_svn_tristate_t swig_types[129]
+#define SWIGTYPE_p_svn_txdelta_op_t swig_types[130]
+#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[131]
+#define SWIGTYPE_p_svn_txdelta_window_t swig_types[132]
+#define SWIGTYPE_p_svn_version_checklist_t swig_types[133]
+#define SWIGTYPE_p_svn_version_ext_linked_lib_t swig_types[134]
+#define SWIGTYPE_p_svn_version_ext_loaded_lib_t swig_types[135]
+#define SWIGTYPE_p_svn_version_extended_t swig_types[136]
+#define SWIGTYPE_p_svn_version_t swig_types[137]
+#define SWIGTYPE_p_svn_wc_adm_access_t swig_types[138]
+#define SWIGTYPE_p_svn_wc_committed_queue_t swig_types[139]
+#define SWIGTYPE_p_svn_wc_conflict_action_t swig_types[140]
+#define SWIGTYPE_p_svn_wc_conflict_choice_t swig_types[141]
+#define SWIGTYPE_p_svn_wc_conflict_description2_t swig_types[142]
+#define SWIGTYPE_p_svn_wc_conflict_description_t swig_types[143]
+#define SWIGTYPE_p_svn_wc_conflict_kind_t swig_types[144]
+#define SWIGTYPE_p_svn_wc_conflict_reason_t swig_types[145]
+#define SWIGTYPE_p_svn_wc_conflict_result_t swig_types[146]
+#define SWIGTYPE_p_svn_wc_conflict_version_t swig_types[147]
+#define SWIGTYPE_p_svn_wc_context_t swig_types[148]
+#define SWIGTYPE_p_svn_wc_diff_callbacks2_t swig_types[149]
+#define SWIGTYPE_p_svn_wc_diff_callbacks3_t swig_types[150]
+#define SWIGTYPE_p_svn_wc_diff_callbacks4_t swig_types[151]
+#define SWIGTYPE_p_svn_wc_diff_callbacks_t swig_types[152]
+#define SWIGTYPE_p_svn_wc_entry_callbacks2_t swig_types[153]
+#define SWIGTYPE_p_svn_wc_entry_callbacks_t swig_types[154]
+#define SWIGTYPE_p_svn_wc_entry_t swig_types[155]
+#define SWIGTYPE_p_svn_wc_external_item2_t swig_types[156]
+#define SWIGTYPE_p_svn_wc_external_item_t swig_types[157]
+#define SWIGTYPE_p_svn_wc_info_t swig_types[158]
+#define SWIGTYPE_p_svn_wc_merge_outcome_t swig_types[159]
+#define SWIGTYPE_p_svn_wc_notify_action_t swig_types[160]
+#define SWIGTYPE_p_svn_wc_notify_lock_state_t swig_types[161]
+#define SWIGTYPE_p_svn_wc_notify_state_t swig_types[162]
+#define SWIGTYPE_p_svn_wc_notify_t swig_types[163]
+#define SWIGTYPE_p_svn_wc_operation_t swig_types[164]
+#define SWIGTYPE_p_svn_wc_revision_status_t swig_types[165]
+#define SWIGTYPE_p_svn_wc_schedule_t swig_types[166]
+#define SWIGTYPE_p_svn_wc_status2_t swig_types[167]
+#define SWIGTYPE_p_svn_wc_status3_t swig_types[168]
+#define SWIGTYPE_p_svn_wc_status_t swig_types[169]
+#define SWIGTYPE_p_svn_wc_traversal_info_t swig_types[170]
+#define SWIGTYPE_p_unsigned_long swig_types[171]
+#define SWIGTYPE_p_void swig_types[172]
+static swig_type_info *swig_types[174];
+static swig_module_info swig_module = {swig_types, 173, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@@ -1678,7 +1678,7 @@ static swig_module_info swig_module = {swig_types, 163, 0, 0, 0, 0};
#define SWIG_name "SVN::_Client::boot_SVN___Client"
#define SWIG_prefix "SVN::_Client::"
-#define SWIGVERSION 0x020004
+#define SWIGVERSION 0x020009
#define SWIG_VERSION SWIGVERSION
@@ -1790,9 +1790,20 @@ SWIG_CanCastAsInteger(double *d, double min, double max) {
SWIGINTERN int
SWIG_AsVal_long SWIG_PERL_DECL_ARGS_2(SV *obj, long* val)
{
- if (SvIOK(obj)) {
- if (val) *val = SvIV(obj);
- return SWIG_OK;
+ if (SvUOK(obj)) {
+ UV v = SvUV(obj);
+ if (v <= LONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
+ } else if (SvIOK(obj)) {
+ IV v = SvIV(obj);
+ if (v >= LONG_MIN && v <= LONG_MAX) {
+ if(val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
} else {
int dispatch = 0;
const char *nptr = SvPV_nolen(obj);
@@ -1842,10 +1853,13 @@ SWIG_AsVal_int SWIG_PERL_DECL_ARGS_2(SV * obj, int *val)
SWIGINTERNINLINE SV *
SWIG_From_long SWIG_PERL_DECL_ARGS_1(long value)
-{
- SV *obj = sv_newmortal();
- sv_setiv(obj, (IV) value);
- return obj;
+{
+ SV *sv;
+ if (value >= IV_MIN && value <= IV_MAX)
+ sv = newSViv(value);
+ else
+ sv = newSVpvf("%ld", value);
+ return sv_2mortal(sv);
}
@@ -1936,16 +1950,19 @@ SWIGINTERN int
SWIG_AsVal_unsigned_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, unsigned long *val)
{
if (SvUOK(obj)) {
- if (val) *val = SvUV(obj);
- return SWIG_OK;
- } else if (SvIOK(obj)) {
- long v = SvIV(obj);
- if (v >= 0) {
+ UV v = SvUV(obj);
+ if (v <= ULONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
+ } else if (SvIOK(obj)) {
+ IV v = SvIV(obj);
+ if (v >= 0 && v <= ULONG_MAX) {
if (val) *val = v;
return SWIG_OK;
- } else {
- return SWIG_OverflowError;
}
+ return SWIG_OverflowError;
} else {
int dispatch = 0;
const char *nptr = SvPV_nolen(obj);
@@ -1979,10 +1996,13 @@ SWIG_AsVal_unsigned_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, unsigned long *val)
SWIGINTERNINLINE SV *
SWIG_From_unsigned_SS_long SWIG_PERL_DECL_ARGS_1(unsigned long value)
-{
- SV *obj = sv_newmortal();
- sv_setuv(obj, (UV) value);
- return obj;
+{
+ SV *sv;
+ if (value <= UV_MAX)
+ sv = newSVuv(value);
+ else
+ sv = newSVpvf("%lu", value);
+ return sv_2mortal(sv);
}
@@ -2001,9 +2021,20 @@ SWIG_From_unsigned_SS_long SWIG_PERL_DECL_ARGS_1(unsigned long value)
SWIGINTERN int
SWIG_AsVal_long_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, long long *val)
{
- if (SvIOK(obj)) {
- if (val) *val = SvIV(obj);
- return SWIG_OK;
+ if (SvUOK(obj)) {
+ UV v = SvUV(obj);
+ if (v < LLONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
+ } else if (SvIOK(obj)) {
+ IV v = SvIV(obj);
+ if (v >= LLONG_MIN && v <= LLONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
} else {
int dispatch = 0;
const char *nptr = SvPV_nolen(obj);
@@ -2037,6 +2068,11 @@ SWIG_AsVal_long_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, long long *val)
}
+static svn_error_t * svn_proplist_invoke_receiver2(
+ svn_proplist_receiver2_t _obj, void *baton, const char *path, apr_hash_t *prop_hash, apr_array_header_t *inherited_props, apr_pool_t *scratch_pool) {
+ return _obj(baton, path, prop_hash, inherited_props, scratch_pool);
+}
+
static svn_error_t * svn_proplist_invoke_receiver(
svn_proplist_receiver_t _obj, void *baton, const char *path, apr_hash_t *prop_hash, apr_pool_t *pool) {
return _obj(baton, path, prop_hash, pool);
@@ -2077,11 +2113,21 @@ static svn_error_t * svn_client_invoke_diff_summarize_func(
return _obj(diff, baton, pool);
}
+static svn_error_t * svn_client_invoke_import_filter_func(
+ svn_client_import_filter_func_t _obj, void *baton, svn_boolean_t *filtered, const char *local_abspath, const svn_io_dirent2_t *dirent, apr_pool_t *scratch_pool) {
+ return _obj(baton, filtered, local_abspath, dirent, scratch_pool);
+}
+
static svn_error_t * svn_client_invoke_status_func(
svn_client_status_func_t _obj, void *baton, const char *path, const svn_client_status_t *status, apr_pool_t *scratch_pool) {
return _obj(baton, path, status, scratch_pool);
}
+static svn_error_t * svn_client_invoke_list_func2(
+ svn_client_list_func2_t _obj, void *baton, const char *path, const svn_dirent_t *dirent, const svn_lock_t *lock, const char *abs_path, const char *external_parent_url, const char *external_target, apr_pool_t *scratch_pool) {
+ return _obj(baton, path, dirent, lock, abs_path, external_parent_url, external_target, scratch_pool);
+}
+
static svn_error_t * svn_client_invoke_list_func(
svn_client_list_func_t _obj, void *baton, const char *path, const svn_dirent_t *dirent, const svn_lock_t *lock, const char *abs_path, apr_pool_t *pool) {
return _obj(baton, path, dirent, lock, abs_path, pool);
@@ -2657,7 +2703,7 @@ XS(_wrap_svn_client_get_ssl_client_cert_pw_prompt_provider) {
XS(_wrap_svn_client_proplist_item_t_node_name_set) {
{
- svn_client_proplist_item_t *arg1 = (svn_client_proplist_item_t *) 0 ;
+ struct svn_client_proplist_item_t *arg1 = (struct svn_client_proplist_item_t *) 0 ;
svn_stringbuf_t *arg2 = (svn_stringbuf_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2669,9 +2715,9 @@ XS(_wrap_svn_client_proplist_item_t_node_name_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_proplist_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_proplist_item_t_node_name_set" "', argument " "1"" of type '" "svn_client_proplist_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_proplist_item_t_node_name_set" "', argument " "1"" of type '" "struct svn_client_proplist_item_t *""'");
}
- arg1 = (svn_client_proplist_item_t *)(argp1);
+ arg1 = (struct svn_client_proplist_item_t *)(argp1);
{
apr_size_t len;
char *buf;
@@ -2703,7 +2749,7 @@ XS(_wrap_svn_client_proplist_item_t_node_name_set) {
XS(_wrap_svn_client_proplist_item_t_node_name_get) {
{
- svn_client_proplist_item_t *arg1 = (svn_client_proplist_item_t *) 0 ;
+ struct svn_client_proplist_item_t *arg1 = (struct svn_client_proplist_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2715,9 +2761,9 @@ XS(_wrap_svn_client_proplist_item_t_node_name_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_proplist_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_proplist_item_t_node_name_get" "', argument " "1"" of type '" "svn_client_proplist_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_proplist_item_t_node_name_get" "', argument " "1"" of type '" "struct svn_client_proplist_item_t *""'");
}
- arg1 = (svn_client_proplist_item_t *)(argp1);
+ arg1 = (struct svn_client_proplist_item_t *)(argp1);
result = (svn_stringbuf_t *) ((arg1)->node_name);
{
SV *sv = sv_newmortal();
@@ -2736,7 +2782,7 @@ XS(_wrap_svn_client_proplist_item_t_node_name_get) {
XS(_wrap_svn_client_proplist_item_t_prop_hash_set) {
{
- svn_client_proplist_item_t *arg1 = (svn_client_proplist_item_t *) 0 ;
+ struct svn_client_proplist_item_t *arg1 = (struct svn_client_proplist_item_t *) 0 ;
apr_hash_t *arg2 = (apr_hash_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2750,9 +2796,9 @@ XS(_wrap_svn_client_proplist_item_t_prop_hash_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_proplist_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_proplist_item_t_prop_hash_set" "', argument " "1"" of type '" "svn_client_proplist_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_proplist_item_t_prop_hash_set" "', argument " "1"" of type '" "struct svn_client_proplist_item_t *""'");
}
- arg1 = (svn_client_proplist_item_t *)(argp1);
+ arg1 = (struct svn_client_proplist_item_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_apr_hash_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_proplist_item_t_prop_hash_set" "', argument " "2"" of type '" "apr_hash_t *""'");
@@ -2773,7 +2819,7 @@ XS(_wrap_svn_client_proplist_item_t_prop_hash_set) {
XS(_wrap_svn_client_proplist_item_t_prop_hash_get) {
{
- svn_client_proplist_item_t *arg1 = (svn_client_proplist_item_t *) 0 ;
+ struct svn_client_proplist_item_t *arg1 = (struct svn_client_proplist_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2785,9 +2831,9 @@ XS(_wrap_svn_client_proplist_item_t_prop_hash_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_proplist_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_proplist_item_t_prop_hash_get" "', argument " "1"" of type '" "svn_client_proplist_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_proplist_item_t_prop_hash_get" "', argument " "1"" of type '" "struct svn_client_proplist_item_t *""'");
}
- arg1 = (svn_client_proplist_item_t *)(argp1);
+ arg1 = (struct svn_client_proplist_item_t *)(argp1);
result = (apr_hash_t *) ((arg1)->prop_hash);
{
ST(argvi) = svn_swig_pl_prophash_to_hash(result);
@@ -2805,14 +2851,14 @@ XS(_wrap_svn_client_proplist_item_t_prop_hash_get) {
XS(_wrap_new_svn_client_proplist_item_t) {
{
int argvi = 0;
- svn_client_proplist_item_t *result = 0 ;
+ struct svn_client_proplist_item_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_client_proplist_item_t();");
}
{
- result = (svn_client_proplist_item_t *)calloc(1, sizeof(svn_client_proplist_item_t));
+ result = (struct svn_client_proplist_item_t *)calloc(1, sizeof(struct svn_client_proplist_item_t));
@@ -2827,7 +2873,7 @@ XS(_wrap_new_svn_client_proplist_item_t) {
XS(_wrap_delete_svn_client_proplist_item_t) {
{
- svn_client_proplist_item_t *arg1 = (svn_client_proplist_item_t *) 0 ;
+ struct svn_client_proplist_item_t *arg1 = (struct svn_client_proplist_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2838,9 +2884,9 @@ XS(_wrap_delete_svn_client_proplist_item_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_proplist_item_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_client_proplist_item_t" "', argument " "1"" of type '" "svn_client_proplist_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_client_proplist_item_t" "', argument " "1"" of type '" "struct svn_client_proplist_item_t *""'");
}
- arg1 = (svn_client_proplist_item_t *)(argp1);
+ arg1 = (struct svn_client_proplist_item_t *)(argp1);
{
free((char *) arg1);
@@ -2902,7 +2948,7 @@ XS(_wrap_svn_client_proplist_item_dup) {
XS(_wrap_svn_client_commit_info_t_revision_set) {
{
- svn_client_commit_info_t *arg1 = (svn_client_commit_info_t *) 0 ;
+ struct svn_client_commit_info_t *arg1 = (struct svn_client_commit_info_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2916,9 +2962,9 @@ XS(_wrap_svn_client_commit_info_t_revision_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_info_t_revision_set" "', argument " "1"" of type '" "svn_client_commit_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_info_t_revision_set" "', argument " "1"" of type '" "struct svn_client_commit_info_t *""'");
}
- arg1 = (svn_client_commit_info_t *)(argp1);
+ arg1 = (struct svn_client_commit_info_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_commit_info_t_revision_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -2939,7 +2985,7 @@ XS(_wrap_svn_client_commit_info_t_revision_set) {
XS(_wrap_svn_client_commit_info_t_revision_get) {
{
- svn_client_commit_info_t *arg1 = (svn_client_commit_info_t *) 0 ;
+ struct svn_client_commit_info_t *arg1 = (struct svn_client_commit_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2951,9 +2997,9 @@ XS(_wrap_svn_client_commit_info_t_revision_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_info_t_revision_get" "', argument " "1"" of type '" "svn_client_commit_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_info_t_revision_get" "', argument " "1"" of type '" "struct svn_client_commit_info_t *""'");
}
- arg1 = (svn_client_commit_info_t *)(argp1);
+ arg1 = (struct svn_client_commit_info_t *)(argp1);
result = (svn_revnum_t) ((arg1)->revision);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -2967,7 +3013,7 @@ XS(_wrap_svn_client_commit_info_t_revision_get) {
XS(_wrap_svn_client_commit_info_t_date_set) {
{
- svn_client_commit_info_t *arg1 = (svn_client_commit_info_t *) 0 ;
+ struct svn_client_commit_info_t *arg1 = (struct svn_client_commit_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2982,9 +3028,9 @@ XS(_wrap_svn_client_commit_info_t_date_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_info_t_date_set" "', argument " "1"" of type '" "svn_client_commit_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_info_t_date_set" "', argument " "1"" of type '" "struct svn_client_commit_info_t *""'");
}
- arg1 = (svn_client_commit_info_t *)(argp1);
+ arg1 = (struct svn_client_commit_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_commit_info_t_date_set" "', argument " "2"" of type '" "char const *""'");
@@ -3012,7 +3058,7 @@ XS(_wrap_svn_client_commit_info_t_date_set) {
XS(_wrap_svn_client_commit_info_t_date_get) {
{
- svn_client_commit_info_t *arg1 = (svn_client_commit_info_t *) 0 ;
+ struct svn_client_commit_info_t *arg1 = (struct svn_client_commit_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3024,9 +3070,9 @@ XS(_wrap_svn_client_commit_info_t_date_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_info_t_date_get" "', argument " "1"" of type '" "svn_client_commit_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_info_t_date_get" "', argument " "1"" of type '" "struct svn_client_commit_info_t *""'");
}
- arg1 = (svn_client_commit_info_t *)(argp1);
+ arg1 = (struct svn_client_commit_info_t *)(argp1);
result = (char *) ((arg1)->date);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -3040,7 +3086,7 @@ XS(_wrap_svn_client_commit_info_t_date_get) {
XS(_wrap_svn_client_commit_info_t_author_set) {
{
- svn_client_commit_info_t *arg1 = (svn_client_commit_info_t *) 0 ;
+ struct svn_client_commit_info_t *arg1 = (struct svn_client_commit_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3055,9 +3101,9 @@ XS(_wrap_svn_client_commit_info_t_author_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_info_t_author_set" "', argument " "1"" of type '" "svn_client_commit_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_info_t_author_set" "', argument " "1"" of type '" "struct svn_client_commit_info_t *""'");
}
- arg1 = (svn_client_commit_info_t *)(argp1);
+ arg1 = (struct svn_client_commit_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_commit_info_t_author_set" "', argument " "2"" of type '" "char const *""'");
@@ -3085,7 +3131,7 @@ XS(_wrap_svn_client_commit_info_t_author_set) {
XS(_wrap_svn_client_commit_info_t_author_get) {
{
- svn_client_commit_info_t *arg1 = (svn_client_commit_info_t *) 0 ;
+ struct svn_client_commit_info_t *arg1 = (struct svn_client_commit_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3097,9 +3143,9 @@ XS(_wrap_svn_client_commit_info_t_author_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_info_t_author_get" "', argument " "1"" of type '" "svn_client_commit_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_info_t_author_get" "', argument " "1"" of type '" "struct svn_client_commit_info_t *""'");
}
- arg1 = (svn_client_commit_info_t *)(argp1);
+ arg1 = (struct svn_client_commit_info_t *)(argp1);
result = (char *) ((arg1)->author);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -3114,14 +3160,14 @@ XS(_wrap_svn_client_commit_info_t_author_get) {
XS(_wrap_new_svn_client_commit_info_t) {
{
int argvi = 0;
- svn_client_commit_info_t *result = 0 ;
+ struct svn_client_commit_info_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_client_commit_info_t();");
}
{
- result = (svn_client_commit_info_t *)calloc(1, sizeof(svn_client_commit_info_t));
+ result = (struct svn_client_commit_info_t *)calloc(1, sizeof(struct svn_client_commit_info_t));
@@ -3136,7 +3182,7 @@ XS(_wrap_new_svn_client_commit_info_t) {
XS(_wrap_delete_svn_client_commit_info_t) {
{
- svn_client_commit_info_t *arg1 = (svn_client_commit_info_t *) 0 ;
+ struct svn_client_commit_info_t *arg1 = (struct svn_client_commit_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3147,9 +3193,9 @@ XS(_wrap_delete_svn_client_commit_info_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_info_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_client_commit_info_t" "', argument " "1"" of type '" "svn_client_commit_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_client_commit_info_t" "', argument " "1"" of type '" "struct svn_client_commit_info_t *""'");
}
- arg1 = (svn_client_commit_info_t *)(argp1);
+ arg1 = (struct svn_client_commit_info_t *)(argp1);
{
free((char *) arg1);
@@ -3168,7 +3214,7 @@ XS(_wrap_delete_svn_client_commit_info_t) {
XS(_wrap_svn_client_commit_item3_t_path_set) {
{
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3183,9 +3229,9 @@ XS(_wrap_svn_client_commit_item3_t_path_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_path_set" "', argument " "1"" of type '" "svn_client_commit_item3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_path_set" "', argument " "1"" of type '" "struct svn_client_commit_item3_t *""'");
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_commit_item3_t_path_set" "', argument " "2"" of type '" "char const *""'");
@@ -3213,7 +3259,7 @@ XS(_wrap_svn_client_commit_item3_t_path_set) {
XS(_wrap_svn_client_commit_item3_t_path_get) {
{
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3225,9 +3271,9 @@ XS(_wrap_svn_client_commit_item3_t_path_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_path_get" "', argument " "1"" of type '" "svn_client_commit_item3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_path_get" "', argument " "1"" of type '" "struct svn_client_commit_item3_t *""'");
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
result = (char *) ((arg1)->path);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -3241,7 +3287,7 @@ XS(_wrap_svn_client_commit_item3_t_path_get) {
XS(_wrap_svn_client_commit_item3_t_kind_set) {
{
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3255,9 +3301,9 @@ XS(_wrap_svn_client_commit_item3_t_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_kind_set" "', argument " "1"" of type '" "svn_client_commit_item3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_kind_set" "', argument " "1"" of type '" "struct svn_client_commit_item3_t *""'");
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_commit_item3_t_kind_set" "', argument " "2"" of type '" "svn_node_kind_t""'");
@@ -3278,7 +3324,7 @@ XS(_wrap_svn_client_commit_item3_t_kind_set) {
XS(_wrap_svn_client_commit_item3_t_kind_get) {
{
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3290,9 +3336,9 @@ XS(_wrap_svn_client_commit_item3_t_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_kind_get" "', argument " "1"" of type '" "svn_client_commit_item3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_kind_get" "', argument " "1"" of type '" "struct svn_client_commit_item3_t *""'");
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -3306,7 +3352,7 @@ XS(_wrap_svn_client_commit_item3_t_kind_get) {
XS(_wrap_svn_client_commit_item3_t_url_set) {
{
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3321,9 +3367,9 @@ XS(_wrap_svn_client_commit_item3_t_url_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_url_set" "', argument " "1"" of type '" "svn_client_commit_item3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_url_set" "', argument " "1"" of type '" "struct svn_client_commit_item3_t *""'");
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_commit_item3_t_url_set" "', argument " "2"" of type '" "char const *""'");
@@ -3351,7 +3397,7 @@ XS(_wrap_svn_client_commit_item3_t_url_set) {
XS(_wrap_svn_client_commit_item3_t_url_get) {
{
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3363,9 +3409,9 @@ XS(_wrap_svn_client_commit_item3_t_url_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_url_get" "', argument " "1"" of type '" "svn_client_commit_item3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_url_get" "', argument " "1"" of type '" "struct svn_client_commit_item3_t *""'");
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
result = (char *) ((arg1)->url);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -3379,7 +3425,7 @@ XS(_wrap_svn_client_commit_item3_t_url_get) {
XS(_wrap_svn_client_commit_item3_t_revision_set) {
{
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3393,9 +3439,9 @@ XS(_wrap_svn_client_commit_item3_t_revision_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_revision_set" "', argument " "1"" of type '" "svn_client_commit_item3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_revision_set" "', argument " "1"" of type '" "struct svn_client_commit_item3_t *""'");
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_commit_item3_t_revision_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -3416,7 +3462,7 @@ XS(_wrap_svn_client_commit_item3_t_revision_set) {
XS(_wrap_svn_client_commit_item3_t_revision_get) {
{
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3428,9 +3474,9 @@ XS(_wrap_svn_client_commit_item3_t_revision_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_revision_get" "', argument " "1"" of type '" "svn_client_commit_item3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_revision_get" "', argument " "1"" of type '" "struct svn_client_commit_item3_t *""'");
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
result = (svn_revnum_t) ((arg1)->revision);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -3444,7 +3490,7 @@ XS(_wrap_svn_client_commit_item3_t_revision_get) {
XS(_wrap_svn_client_commit_item3_t_copyfrom_url_set) {
{
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3459,9 +3505,9 @@ XS(_wrap_svn_client_commit_item3_t_copyfrom_url_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_copyfrom_url_set" "', argument " "1"" of type '" "svn_client_commit_item3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_copyfrom_url_set" "', argument " "1"" of type '" "struct svn_client_commit_item3_t *""'");
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_commit_item3_t_copyfrom_url_set" "', argument " "2"" of type '" "char const *""'");
@@ -3487,7 +3533,7 @@ XS(_wrap_svn_client_commit_item3_t_copyfrom_url_set) {
XS(_wrap_svn_client_commit_item3_t_copyfrom_url_get) {
{
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3499,9 +3545,9 @@ XS(_wrap_svn_client_commit_item3_t_copyfrom_url_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_copyfrom_url_get" "', argument " "1"" of type '" "svn_client_commit_item3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_copyfrom_url_get" "', argument " "1"" of type '" "struct svn_client_commit_item3_t *""'");
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
result = (char *) ((arg1)->copyfrom_url);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -3515,7 +3561,7 @@ XS(_wrap_svn_client_commit_item3_t_copyfrom_url_get) {
XS(_wrap_svn_client_commit_item3_t_copyfrom_rev_set) {
{
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3529,9 +3575,9 @@ XS(_wrap_svn_client_commit_item3_t_copyfrom_rev_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_copyfrom_rev_set" "', argument " "1"" of type '" "svn_client_commit_item3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_copyfrom_rev_set" "', argument " "1"" of type '" "struct svn_client_commit_item3_t *""'");
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_commit_item3_t_copyfrom_rev_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -3552,7 +3598,7 @@ XS(_wrap_svn_client_commit_item3_t_copyfrom_rev_set) {
XS(_wrap_svn_client_commit_item3_t_copyfrom_rev_get) {
{
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3564,9 +3610,9 @@ XS(_wrap_svn_client_commit_item3_t_copyfrom_rev_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_copyfrom_rev_get" "', argument " "1"" of type '" "svn_client_commit_item3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_copyfrom_rev_get" "', argument " "1"" of type '" "struct svn_client_commit_item3_t *""'");
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
result = (svn_revnum_t) ((arg1)->copyfrom_rev);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -3580,7 +3626,7 @@ XS(_wrap_svn_client_commit_item3_t_copyfrom_rev_get) {
XS(_wrap_svn_client_commit_item3_t_state_flags_set) {
{
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
apr_byte_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3594,9 +3640,9 @@ XS(_wrap_svn_client_commit_item3_t_state_flags_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_state_flags_set" "', argument " "1"" of type '" "svn_client_commit_item3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_state_flags_set" "', argument " "1"" of type '" "struct svn_client_commit_item3_t *""'");
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_commit_item3_t_state_flags_set" "', argument " "2"" of type '" "apr_byte_t""'");
@@ -3617,7 +3663,7 @@ XS(_wrap_svn_client_commit_item3_t_state_flags_set) {
XS(_wrap_svn_client_commit_item3_t_state_flags_get) {
{
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3629,9 +3675,9 @@ XS(_wrap_svn_client_commit_item3_t_state_flags_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_state_flags_get" "', argument " "1"" of type '" "svn_client_commit_item3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_state_flags_get" "', argument " "1"" of type '" "struct svn_client_commit_item3_t *""'");
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
result = ((arg1)->state_flags);
ST(argvi) = SWIG_From_unsigned_SS_long SWIG_PERL_CALL_ARGS_1((unsigned long)(result)); argvi++ ;
@@ -3645,7 +3691,7 @@ XS(_wrap_svn_client_commit_item3_t_state_flags_get) {
XS(_wrap_svn_client_commit_item3_t_incoming_prop_changes_set) {
{
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3659,9 +3705,9 @@ XS(_wrap_svn_client_commit_item3_t_incoming_prop_changes_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_incoming_prop_changes_set" "', argument " "1"" of type '" "svn_client_commit_item3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_incoming_prop_changes_set" "', argument " "1"" of type '" "struct svn_client_commit_item3_t *""'");
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_apr_array_header_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_commit_item3_t_incoming_prop_changes_set" "', argument " "2"" of type '" "apr_array_header_t *""'");
@@ -3682,7 +3728,7 @@ XS(_wrap_svn_client_commit_item3_t_incoming_prop_changes_set) {
XS(_wrap_svn_client_commit_item3_t_incoming_prop_changes_get) {
{
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3694,9 +3740,9 @@ XS(_wrap_svn_client_commit_item3_t_incoming_prop_changes_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_incoming_prop_changes_get" "', argument " "1"" of type '" "svn_client_commit_item3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_incoming_prop_changes_get" "', argument " "1"" of type '" "struct svn_client_commit_item3_t *""'");
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
result = (apr_array_header_t *) ((arg1)->incoming_prop_changes);
{
if (result) {
@@ -3715,7 +3761,7 @@ XS(_wrap_svn_client_commit_item3_t_incoming_prop_changes_get) {
XS(_wrap_svn_client_commit_item3_t_outgoing_prop_changes_set) {
{
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3729,9 +3775,9 @@ XS(_wrap_svn_client_commit_item3_t_outgoing_prop_changes_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_outgoing_prop_changes_set" "', argument " "1"" of type '" "svn_client_commit_item3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_outgoing_prop_changes_set" "', argument " "1"" of type '" "struct svn_client_commit_item3_t *""'");
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_apr_array_header_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_commit_item3_t_outgoing_prop_changes_set" "', argument " "2"" of type '" "apr_array_header_t *""'");
@@ -3752,7 +3798,7 @@ XS(_wrap_svn_client_commit_item3_t_outgoing_prop_changes_set) {
XS(_wrap_svn_client_commit_item3_t_outgoing_prop_changes_get) {
{
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3764,9 +3810,9 @@ XS(_wrap_svn_client_commit_item3_t_outgoing_prop_changes_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_outgoing_prop_changes_get" "', argument " "1"" of type '" "svn_client_commit_item3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_outgoing_prop_changes_get" "', argument " "1"" of type '" "struct svn_client_commit_item3_t *""'");
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
result = (apr_array_header_t *) ((arg1)->outgoing_prop_changes);
{
if (result) {
@@ -3785,7 +3831,7 @@ XS(_wrap_svn_client_commit_item3_t_outgoing_prop_changes_get) {
XS(_wrap_svn_client_commit_item3_t_session_relpath_set) {
{
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3800,9 +3846,9 @@ XS(_wrap_svn_client_commit_item3_t_session_relpath_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_session_relpath_set" "', argument " "1"" of type '" "svn_client_commit_item3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_session_relpath_set" "', argument " "1"" of type '" "struct svn_client_commit_item3_t *""'");
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_commit_item3_t_session_relpath_set" "', argument " "2"" of type '" "char const *""'");
@@ -3830,7 +3876,7 @@ XS(_wrap_svn_client_commit_item3_t_session_relpath_set) {
XS(_wrap_svn_client_commit_item3_t_session_relpath_get) {
{
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3842,9 +3888,9 @@ XS(_wrap_svn_client_commit_item3_t_session_relpath_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_session_relpath_get" "', argument " "1"" of type '" "svn_client_commit_item3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_session_relpath_get" "', argument " "1"" of type '" "struct svn_client_commit_item3_t *""'");
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
result = (char *) ((arg1)->session_relpath);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -3856,17 +3902,90 @@ XS(_wrap_svn_client_commit_item3_t_session_relpath_get) {
}
+XS(_wrap_svn_client_commit_item3_t_moved_from_abspath_set) {
+ {
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_client_commit_item3_t_moved_from_abspath_set(self,moved_from_abspath);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_moved_from_abspath_set" "', argument " "1"" of type '" "struct svn_client_commit_item3_t *""'");
+ }
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_commit_item3_t_moved_from_abspath_set" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->moved_from_abspath) free((char *)arg1->moved_from_abspath);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->moved_from_abspath = copied;
+ }
+ ST(argvi) = sv_newmortal();
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_client_commit_item3_t_moved_from_abspath_get) {
+ {
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ char *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_client_commit_item3_t_moved_from_abspath_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item3_t_moved_from_abspath_get" "', argument " "1"" of type '" "struct svn_client_commit_item3_t *""'");
+ }
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
+ result = (char *) ((arg1)->moved_from_abspath);
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_new_svn_client_commit_item3_t) {
{
int argvi = 0;
- svn_client_commit_item3_t *result = 0 ;
+ struct svn_client_commit_item3_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_client_commit_item3_t();");
}
{
- result = (svn_client_commit_item3_t *)calloc(1, sizeof(svn_client_commit_item3_t));
+ result = (struct svn_client_commit_item3_t *)calloc(1, sizeof(struct svn_client_commit_item3_t));
@@ -3881,7 +4000,7 @@ XS(_wrap_new_svn_client_commit_item3_t) {
XS(_wrap_delete_svn_client_commit_item3_t) {
{
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3892,9 +4011,9 @@ XS(_wrap_delete_svn_client_commit_item3_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item3_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_client_commit_item3_t" "', argument " "1"" of type '" "svn_client_commit_item3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_client_commit_item3_t" "', argument " "1"" of type '" "struct svn_client_commit_item3_t *""'");
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
{
free((char *) arg1);
@@ -3913,7 +4032,7 @@ XS(_wrap_delete_svn_client_commit_item3_t) {
XS(_wrap_svn_client_commit_item2_t_path_set) {
{
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3928,9 +4047,9 @@ XS(_wrap_svn_client_commit_item2_t_path_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_path_set" "', argument " "1"" of type '" "svn_client_commit_item2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_path_set" "', argument " "1"" of type '" "struct svn_client_commit_item2_t *""'");
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_commit_item2_t_path_set" "', argument " "2"" of type '" "char const *""'");
@@ -3958,7 +4077,7 @@ XS(_wrap_svn_client_commit_item2_t_path_set) {
XS(_wrap_svn_client_commit_item2_t_path_get) {
{
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3970,9 +4089,9 @@ XS(_wrap_svn_client_commit_item2_t_path_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_path_get" "', argument " "1"" of type '" "svn_client_commit_item2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_path_get" "', argument " "1"" of type '" "struct svn_client_commit_item2_t *""'");
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
result = (char *) ((arg1)->path);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -3986,7 +4105,7 @@ XS(_wrap_svn_client_commit_item2_t_path_get) {
XS(_wrap_svn_client_commit_item2_t_kind_set) {
{
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4000,9 +4119,9 @@ XS(_wrap_svn_client_commit_item2_t_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_kind_set" "', argument " "1"" of type '" "svn_client_commit_item2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_kind_set" "', argument " "1"" of type '" "struct svn_client_commit_item2_t *""'");
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_commit_item2_t_kind_set" "', argument " "2"" of type '" "svn_node_kind_t""'");
@@ -4023,7 +4142,7 @@ XS(_wrap_svn_client_commit_item2_t_kind_set) {
XS(_wrap_svn_client_commit_item2_t_kind_get) {
{
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4035,9 +4154,9 @@ XS(_wrap_svn_client_commit_item2_t_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_kind_get" "', argument " "1"" of type '" "svn_client_commit_item2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_kind_get" "', argument " "1"" of type '" "struct svn_client_commit_item2_t *""'");
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -4051,7 +4170,7 @@ XS(_wrap_svn_client_commit_item2_t_kind_get) {
XS(_wrap_svn_client_commit_item2_t_url_set) {
{
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4066,9 +4185,9 @@ XS(_wrap_svn_client_commit_item2_t_url_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_url_set" "', argument " "1"" of type '" "svn_client_commit_item2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_url_set" "', argument " "1"" of type '" "struct svn_client_commit_item2_t *""'");
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_commit_item2_t_url_set" "', argument " "2"" of type '" "char const *""'");
@@ -4096,7 +4215,7 @@ XS(_wrap_svn_client_commit_item2_t_url_set) {
XS(_wrap_svn_client_commit_item2_t_url_get) {
{
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4108,9 +4227,9 @@ XS(_wrap_svn_client_commit_item2_t_url_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_url_get" "', argument " "1"" of type '" "svn_client_commit_item2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_url_get" "', argument " "1"" of type '" "struct svn_client_commit_item2_t *""'");
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
result = (char *) ((arg1)->url);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -4124,7 +4243,7 @@ XS(_wrap_svn_client_commit_item2_t_url_get) {
XS(_wrap_svn_client_commit_item2_t_revision_set) {
{
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4138,9 +4257,9 @@ XS(_wrap_svn_client_commit_item2_t_revision_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_revision_set" "', argument " "1"" of type '" "svn_client_commit_item2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_revision_set" "', argument " "1"" of type '" "struct svn_client_commit_item2_t *""'");
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_commit_item2_t_revision_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -4161,7 +4280,7 @@ XS(_wrap_svn_client_commit_item2_t_revision_set) {
XS(_wrap_svn_client_commit_item2_t_revision_get) {
{
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4173,9 +4292,9 @@ XS(_wrap_svn_client_commit_item2_t_revision_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_revision_get" "', argument " "1"" of type '" "svn_client_commit_item2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_revision_get" "', argument " "1"" of type '" "struct svn_client_commit_item2_t *""'");
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
result = (svn_revnum_t) ((arg1)->revision);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -4189,7 +4308,7 @@ XS(_wrap_svn_client_commit_item2_t_revision_get) {
XS(_wrap_svn_client_commit_item2_t_copyfrom_url_set) {
{
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4204,9 +4323,9 @@ XS(_wrap_svn_client_commit_item2_t_copyfrom_url_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_copyfrom_url_set" "', argument " "1"" of type '" "svn_client_commit_item2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_copyfrom_url_set" "', argument " "1"" of type '" "struct svn_client_commit_item2_t *""'");
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_commit_item2_t_copyfrom_url_set" "', argument " "2"" of type '" "char const *""'");
@@ -4232,7 +4351,7 @@ XS(_wrap_svn_client_commit_item2_t_copyfrom_url_set) {
XS(_wrap_svn_client_commit_item2_t_copyfrom_url_get) {
{
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4244,9 +4363,9 @@ XS(_wrap_svn_client_commit_item2_t_copyfrom_url_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_copyfrom_url_get" "', argument " "1"" of type '" "svn_client_commit_item2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_copyfrom_url_get" "', argument " "1"" of type '" "struct svn_client_commit_item2_t *""'");
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
result = (char *) ((arg1)->copyfrom_url);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -4260,7 +4379,7 @@ XS(_wrap_svn_client_commit_item2_t_copyfrom_url_get) {
XS(_wrap_svn_client_commit_item2_t_copyfrom_rev_set) {
{
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4274,9 +4393,9 @@ XS(_wrap_svn_client_commit_item2_t_copyfrom_rev_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_copyfrom_rev_set" "', argument " "1"" of type '" "svn_client_commit_item2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_copyfrom_rev_set" "', argument " "1"" of type '" "struct svn_client_commit_item2_t *""'");
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_commit_item2_t_copyfrom_rev_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -4297,7 +4416,7 @@ XS(_wrap_svn_client_commit_item2_t_copyfrom_rev_set) {
XS(_wrap_svn_client_commit_item2_t_copyfrom_rev_get) {
{
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4309,9 +4428,9 @@ XS(_wrap_svn_client_commit_item2_t_copyfrom_rev_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_copyfrom_rev_get" "', argument " "1"" of type '" "svn_client_commit_item2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_copyfrom_rev_get" "', argument " "1"" of type '" "struct svn_client_commit_item2_t *""'");
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
result = (svn_revnum_t) ((arg1)->copyfrom_rev);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -4325,7 +4444,7 @@ XS(_wrap_svn_client_commit_item2_t_copyfrom_rev_get) {
XS(_wrap_svn_client_commit_item2_t_state_flags_set) {
{
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
apr_byte_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4339,9 +4458,9 @@ XS(_wrap_svn_client_commit_item2_t_state_flags_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_state_flags_set" "', argument " "1"" of type '" "svn_client_commit_item2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_state_flags_set" "', argument " "1"" of type '" "struct svn_client_commit_item2_t *""'");
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_commit_item2_t_state_flags_set" "', argument " "2"" of type '" "apr_byte_t""'");
@@ -4362,7 +4481,7 @@ XS(_wrap_svn_client_commit_item2_t_state_flags_set) {
XS(_wrap_svn_client_commit_item2_t_state_flags_get) {
{
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4374,9 +4493,9 @@ XS(_wrap_svn_client_commit_item2_t_state_flags_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_state_flags_get" "', argument " "1"" of type '" "svn_client_commit_item2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_state_flags_get" "', argument " "1"" of type '" "struct svn_client_commit_item2_t *""'");
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
result = ((arg1)->state_flags);
ST(argvi) = SWIG_From_unsigned_SS_long SWIG_PERL_CALL_ARGS_1((unsigned long)(result)); argvi++ ;
@@ -4390,7 +4509,7 @@ XS(_wrap_svn_client_commit_item2_t_state_flags_get) {
XS(_wrap_svn_client_commit_item2_t_wcprop_changes_set) {
{
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4404,9 +4523,9 @@ XS(_wrap_svn_client_commit_item2_t_wcprop_changes_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_wcprop_changes_set" "', argument " "1"" of type '" "svn_client_commit_item2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_wcprop_changes_set" "', argument " "1"" of type '" "struct svn_client_commit_item2_t *""'");
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_apr_array_header_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_commit_item2_t_wcprop_changes_set" "', argument " "2"" of type '" "apr_array_header_t *""'");
@@ -4427,7 +4546,7 @@ XS(_wrap_svn_client_commit_item2_t_wcprop_changes_set) {
XS(_wrap_svn_client_commit_item2_t_wcprop_changes_get) {
{
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4439,9 +4558,9 @@ XS(_wrap_svn_client_commit_item2_t_wcprop_changes_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_wcprop_changes_get" "', argument " "1"" of type '" "svn_client_commit_item2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item2_t_wcprop_changes_get" "', argument " "1"" of type '" "struct svn_client_commit_item2_t *""'");
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
result = (apr_array_header_t *) ((arg1)->wcprop_changes);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_array_header_t, 0 | 0); argvi++ ;
@@ -4456,14 +4575,14 @@ XS(_wrap_svn_client_commit_item2_t_wcprop_changes_get) {
XS(_wrap_new_svn_client_commit_item2_t) {
{
int argvi = 0;
- svn_client_commit_item2_t *result = 0 ;
+ struct svn_client_commit_item2_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_client_commit_item2_t();");
}
{
- result = (svn_client_commit_item2_t *)calloc(1, sizeof(svn_client_commit_item2_t));
+ result = (struct svn_client_commit_item2_t *)calloc(1, sizeof(struct svn_client_commit_item2_t));
@@ -4478,7 +4597,7 @@ XS(_wrap_new_svn_client_commit_item2_t) {
XS(_wrap_delete_svn_client_commit_item2_t) {
{
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4489,9 +4608,9 @@ XS(_wrap_delete_svn_client_commit_item2_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item2_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_client_commit_item2_t" "', argument " "1"" of type '" "svn_client_commit_item2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_client_commit_item2_t" "', argument " "1"" of type '" "struct svn_client_commit_item2_t *""'");
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
{
free((char *) arg1);
@@ -4510,7 +4629,7 @@ XS(_wrap_delete_svn_client_commit_item2_t) {
XS(_wrap_svn_client_commit_item_t_path_set) {
{
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4525,9 +4644,9 @@ XS(_wrap_svn_client_commit_item_t_path_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_path_set" "', argument " "1"" of type '" "svn_client_commit_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_path_set" "', argument " "1"" of type '" "struct svn_client_commit_item_t *""'");
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_commit_item_t_path_set" "', argument " "2"" of type '" "char const *""'");
@@ -4555,7 +4674,7 @@ XS(_wrap_svn_client_commit_item_t_path_set) {
XS(_wrap_svn_client_commit_item_t_path_get) {
{
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4567,9 +4686,9 @@ XS(_wrap_svn_client_commit_item_t_path_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_path_get" "', argument " "1"" of type '" "svn_client_commit_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_path_get" "', argument " "1"" of type '" "struct svn_client_commit_item_t *""'");
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
result = (char *) ((arg1)->path);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -4583,7 +4702,7 @@ XS(_wrap_svn_client_commit_item_t_path_get) {
XS(_wrap_svn_client_commit_item_t_kind_set) {
{
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4597,9 +4716,9 @@ XS(_wrap_svn_client_commit_item_t_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_kind_set" "', argument " "1"" of type '" "svn_client_commit_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_kind_set" "', argument " "1"" of type '" "struct svn_client_commit_item_t *""'");
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_commit_item_t_kind_set" "', argument " "2"" of type '" "svn_node_kind_t""'");
@@ -4620,7 +4739,7 @@ XS(_wrap_svn_client_commit_item_t_kind_set) {
XS(_wrap_svn_client_commit_item_t_kind_get) {
{
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4632,9 +4751,9 @@ XS(_wrap_svn_client_commit_item_t_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_kind_get" "', argument " "1"" of type '" "svn_client_commit_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_kind_get" "', argument " "1"" of type '" "struct svn_client_commit_item_t *""'");
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -4648,7 +4767,7 @@ XS(_wrap_svn_client_commit_item_t_kind_get) {
XS(_wrap_svn_client_commit_item_t_url_set) {
{
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4663,9 +4782,9 @@ XS(_wrap_svn_client_commit_item_t_url_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_url_set" "', argument " "1"" of type '" "svn_client_commit_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_url_set" "', argument " "1"" of type '" "struct svn_client_commit_item_t *""'");
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_commit_item_t_url_set" "', argument " "2"" of type '" "char const *""'");
@@ -4693,7 +4812,7 @@ XS(_wrap_svn_client_commit_item_t_url_set) {
XS(_wrap_svn_client_commit_item_t_url_get) {
{
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4705,9 +4824,9 @@ XS(_wrap_svn_client_commit_item_t_url_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_url_get" "', argument " "1"" of type '" "svn_client_commit_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_url_get" "', argument " "1"" of type '" "struct svn_client_commit_item_t *""'");
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
result = (char *) ((arg1)->url);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -4721,7 +4840,7 @@ XS(_wrap_svn_client_commit_item_t_url_get) {
XS(_wrap_svn_client_commit_item_t_revision_set) {
{
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4735,9 +4854,9 @@ XS(_wrap_svn_client_commit_item_t_revision_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_revision_set" "', argument " "1"" of type '" "svn_client_commit_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_revision_set" "', argument " "1"" of type '" "struct svn_client_commit_item_t *""'");
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_commit_item_t_revision_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -4758,7 +4877,7 @@ XS(_wrap_svn_client_commit_item_t_revision_set) {
XS(_wrap_svn_client_commit_item_t_revision_get) {
{
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4770,9 +4889,9 @@ XS(_wrap_svn_client_commit_item_t_revision_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_revision_get" "', argument " "1"" of type '" "svn_client_commit_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_revision_get" "', argument " "1"" of type '" "struct svn_client_commit_item_t *""'");
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
result = (svn_revnum_t) ((arg1)->revision);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -4786,7 +4905,7 @@ XS(_wrap_svn_client_commit_item_t_revision_get) {
XS(_wrap_svn_client_commit_item_t_copyfrom_url_set) {
{
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4801,9 +4920,9 @@ XS(_wrap_svn_client_commit_item_t_copyfrom_url_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_copyfrom_url_set" "', argument " "1"" of type '" "svn_client_commit_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_copyfrom_url_set" "', argument " "1"" of type '" "struct svn_client_commit_item_t *""'");
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_commit_item_t_copyfrom_url_set" "', argument " "2"" of type '" "char const *""'");
@@ -4829,7 +4948,7 @@ XS(_wrap_svn_client_commit_item_t_copyfrom_url_set) {
XS(_wrap_svn_client_commit_item_t_copyfrom_url_get) {
{
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4841,9 +4960,9 @@ XS(_wrap_svn_client_commit_item_t_copyfrom_url_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_copyfrom_url_get" "', argument " "1"" of type '" "svn_client_commit_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_copyfrom_url_get" "', argument " "1"" of type '" "struct svn_client_commit_item_t *""'");
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
result = (char *) ((arg1)->copyfrom_url);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -4857,7 +4976,7 @@ XS(_wrap_svn_client_commit_item_t_copyfrom_url_get) {
XS(_wrap_svn_client_commit_item_t_state_flags_set) {
{
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
apr_byte_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4871,9 +4990,9 @@ XS(_wrap_svn_client_commit_item_t_state_flags_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_state_flags_set" "', argument " "1"" of type '" "svn_client_commit_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_state_flags_set" "', argument " "1"" of type '" "struct svn_client_commit_item_t *""'");
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_commit_item_t_state_flags_set" "', argument " "2"" of type '" "apr_byte_t""'");
@@ -4894,7 +5013,7 @@ XS(_wrap_svn_client_commit_item_t_state_flags_set) {
XS(_wrap_svn_client_commit_item_t_state_flags_get) {
{
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4906,9 +5025,9 @@ XS(_wrap_svn_client_commit_item_t_state_flags_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_state_flags_get" "', argument " "1"" of type '" "svn_client_commit_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_state_flags_get" "', argument " "1"" of type '" "struct svn_client_commit_item_t *""'");
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
result = ((arg1)->state_flags);
ST(argvi) = SWIG_From_unsigned_SS_long SWIG_PERL_CALL_ARGS_1((unsigned long)(result)); argvi++ ;
@@ -4922,7 +5041,7 @@ XS(_wrap_svn_client_commit_item_t_state_flags_get) {
XS(_wrap_svn_client_commit_item_t_wcprop_changes_set) {
{
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4936,9 +5055,9 @@ XS(_wrap_svn_client_commit_item_t_wcprop_changes_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_wcprop_changes_set" "', argument " "1"" of type '" "svn_client_commit_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_wcprop_changes_set" "', argument " "1"" of type '" "struct svn_client_commit_item_t *""'");
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_apr_array_header_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_commit_item_t_wcprop_changes_set" "', argument " "2"" of type '" "apr_array_header_t *""'");
@@ -4959,7 +5078,7 @@ XS(_wrap_svn_client_commit_item_t_wcprop_changes_set) {
XS(_wrap_svn_client_commit_item_t_wcprop_changes_get) {
{
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4971,9 +5090,9 @@ XS(_wrap_svn_client_commit_item_t_wcprop_changes_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_wcprop_changes_get" "', argument " "1"" of type '" "svn_client_commit_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_commit_item_t_wcprop_changes_get" "', argument " "1"" of type '" "struct svn_client_commit_item_t *""'");
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
result = (apr_array_header_t *) ((arg1)->wcprop_changes);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_array_header_t, 0 | 0); argvi++ ;
@@ -4988,14 +5107,14 @@ XS(_wrap_svn_client_commit_item_t_wcprop_changes_get) {
XS(_wrap_new_svn_client_commit_item_t) {
{
int argvi = 0;
- svn_client_commit_item_t *result = 0 ;
+ struct svn_client_commit_item_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_client_commit_item_t();");
}
{
- result = (svn_client_commit_item_t *)calloc(1, sizeof(svn_client_commit_item_t));
+ result = (struct svn_client_commit_item_t *)calloc(1, sizeof(struct svn_client_commit_item_t));
@@ -5010,7 +5129,7 @@ XS(_wrap_new_svn_client_commit_item_t) {
XS(_wrap_delete_svn_client_commit_item_t) {
{
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5021,9 +5140,9 @@ XS(_wrap_delete_svn_client_commit_item_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_commit_item_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_client_commit_item_t" "', argument " "1"" of type '" "svn_client_commit_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_client_commit_item_t" "', argument " "1"" of type '" "struct svn_client_commit_item_t *""'");
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
{
free((char *) arg1);
@@ -5217,7 +5336,7 @@ XS(_wrap_svn_client_commit_item2_dup) {
XS(_wrap_svn_client_diff_summarize_t_path_set) {
{
- svn_client_diff_summarize_t *arg1 = (svn_client_diff_summarize_t *) 0 ;
+ struct svn_client_diff_summarize_t *arg1 = (struct svn_client_diff_summarize_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5232,9 +5351,9 @@ XS(_wrap_svn_client_diff_summarize_t_path_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_diff_summarize_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_diff_summarize_t_path_set" "', argument " "1"" of type '" "svn_client_diff_summarize_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_diff_summarize_t_path_set" "', argument " "1"" of type '" "struct svn_client_diff_summarize_t *""'");
}
- arg1 = (svn_client_diff_summarize_t *)(argp1);
+ arg1 = (struct svn_client_diff_summarize_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_diff_summarize_t_path_set" "', argument " "2"" of type '" "char const *""'");
@@ -5262,7 +5381,7 @@ XS(_wrap_svn_client_diff_summarize_t_path_set) {
XS(_wrap_svn_client_diff_summarize_t_path_get) {
{
- svn_client_diff_summarize_t *arg1 = (svn_client_diff_summarize_t *) 0 ;
+ struct svn_client_diff_summarize_t *arg1 = (struct svn_client_diff_summarize_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5274,9 +5393,9 @@ XS(_wrap_svn_client_diff_summarize_t_path_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_diff_summarize_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_diff_summarize_t_path_get" "', argument " "1"" of type '" "svn_client_diff_summarize_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_diff_summarize_t_path_get" "', argument " "1"" of type '" "struct svn_client_diff_summarize_t *""'");
}
- arg1 = (svn_client_diff_summarize_t *)(argp1);
+ arg1 = (struct svn_client_diff_summarize_t *)(argp1);
result = (char *) ((arg1)->path);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -5290,7 +5409,7 @@ XS(_wrap_svn_client_diff_summarize_t_path_get) {
XS(_wrap_svn_client_diff_summarize_t_summarize_kind_set) {
{
- svn_client_diff_summarize_t *arg1 = (svn_client_diff_summarize_t *) 0 ;
+ struct svn_client_diff_summarize_t *arg1 = (struct svn_client_diff_summarize_t *) 0 ;
svn_client_diff_summarize_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5304,9 +5423,9 @@ XS(_wrap_svn_client_diff_summarize_t_summarize_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_diff_summarize_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_diff_summarize_t_summarize_kind_set" "', argument " "1"" of type '" "svn_client_diff_summarize_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_diff_summarize_t_summarize_kind_set" "', argument " "1"" of type '" "struct svn_client_diff_summarize_t *""'");
}
- arg1 = (svn_client_diff_summarize_t *)(argp1);
+ arg1 = (struct svn_client_diff_summarize_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_diff_summarize_t_summarize_kind_set" "', argument " "2"" of type '" "svn_client_diff_summarize_kind_t""'");
@@ -5327,7 +5446,7 @@ XS(_wrap_svn_client_diff_summarize_t_summarize_kind_set) {
XS(_wrap_svn_client_diff_summarize_t_summarize_kind_get) {
{
- svn_client_diff_summarize_t *arg1 = (svn_client_diff_summarize_t *) 0 ;
+ struct svn_client_diff_summarize_t *arg1 = (struct svn_client_diff_summarize_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5339,9 +5458,9 @@ XS(_wrap_svn_client_diff_summarize_t_summarize_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_diff_summarize_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_diff_summarize_t_summarize_kind_get" "', argument " "1"" of type '" "svn_client_diff_summarize_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_diff_summarize_t_summarize_kind_get" "', argument " "1"" of type '" "struct svn_client_diff_summarize_t *""'");
}
- arg1 = (svn_client_diff_summarize_t *)(argp1);
+ arg1 = (struct svn_client_diff_summarize_t *)(argp1);
result = (svn_client_diff_summarize_kind_t) ((arg1)->summarize_kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -5355,7 +5474,7 @@ XS(_wrap_svn_client_diff_summarize_t_summarize_kind_get) {
XS(_wrap_svn_client_diff_summarize_t_prop_changed_set) {
{
- svn_client_diff_summarize_t *arg1 = (svn_client_diff_summarize_t *) 0 ;
+ struct svn_client_diff_summarize_t *arg1 = (struct svn_client_diff_summarize_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5369,9 +5488,9 @@ XS(_wrap_svn_client_diff_summarize_t_prop_changed_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_diff_summarize_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_diff_summarize_t_prop_changed_set" "', argument " "1"" of type '" "svn_client_diff_summarize_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_diff_summarize_t_prop_changed_set" "', argument " "1"" of type '" "struct svn_client_diff_summarize_t *""'");
}
- arg1 = (svn_client_diff_summarize_t *)(argp1);
+ arg1 = (struct svn_client_diff_summarize_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_diff_summarize_t_prop_changed_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -5392,7 +5511,7 @@ XS(_wrap_svn_client_diff_summarize_t_prop_changed_set) {
XS(_wrap_svn_client_diff_summarize_t_prop_changed_get) {
{
- svn_client_diff_summarize_t *arg1 = (svn_client_diff_summarize_t *) 0 ;
+ struct svn_client_diff_summarize_t *arg1 = (struct svn_client_diff_summarize_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5404,9 +5523,9 @@ XS(_wrap_svn_client_diff_summarize_t_prop_changed_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_diff_summarize_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_diff_summarize_t_prop_changed_get" "', argument " "1"" of type '" "svn_client_diff_summarize_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_diff_summarize_t_prop_changed_get" "', argument " "1"" of type '" "struct svn_client_diff_summarize_t *""'");
}
- arg1 = (svn_client_diff_summarize_t *)(argp1);
+ arg1 = (struct svn_client_diff_summarize_t *)(argp1);
result = (svn_boolean_t) ((arg1)->prop_changed);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -5420,7 +5539,7 @@ XS(_wrap_svn_client_diff_summarize_t_prop_changed_get) {
XS(_wrap_svn_client_diff_summarize_t_node_kind_set) {
{
- svn_client_diff_summarize_t *arg1 = (svn_client_diff_summarize_t *) 0 ;
+ struct svn_client_diff_summarize_t *arg1 = (struct svn_client_diff_summarize_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5434,9 +5553,9 @@ XS(_wrap_svn_client_diff_summarize_t_node_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_diff_summarize_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_diff_summarize_t_node_kind_set" "', argument " "1"" of type '" "svn_client_diff_summarize_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_diff_summarize_t_node_kind_set" "', argument " "1"" of type '" "struct svn_client_diff_summarize_t *""'");
}
- arg1 = (svn_client_diff_summarize_t *)(argp1);
+ arg1 = (struct svn_client_diff_summarize_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_diff_summarize_t_node_kind_set" "', argument " "2"" of type '" "svn_node_kind_t""'");
@@ -5457,7 +5576,7 @@ XS(_wrap_svn_client_diff_summarize_t_node_kind_set) {
XS(_wrap_svn_client_diff_summarize_t_node_kind_get) {
{
- svn_client_diff_summarize_t *arg1 = (svn_client_diff_summarize_t *) 0 ;
+ struct svn_client_diff_summarize_t *arg1 = (struct svn_client_diff_summarize_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5469,9 +5588,9 @@ XS(_wrap_svn_client_diff_summarize_t_node_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_diff_summarize_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_diff_summarize_t_node_kind_get" "', argument " "1"" of type '" "svn_client_diff_summarize_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_diff_summarize_t_node_kind_get" "', argument " "1"" of type '" "struct svn_client_diff_summarize_t *""'");
}
- arg1 = (svn_client_diff_summarize_t *)(argp1);
+ arg1 = (struct svn_client_diff_summarize_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->node_kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -5486,14 +5605,14 @@ XS(_wrap_svn_client_diff_summarize_t_node_kind_get) {
XS(_wrap_new_svn_client_diff_summarize_t) {
{
int argvi = 0;
- svn_client_diff_summarize_t *result = 0 ;
+ struct svn_client_diff_summarize_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_client_diff_summarize_t();");
}
{
- result = (svn_client_diff_summarize_t *)calloc(1, sizeof(svn_client_diff_summarize_t));
+ result = (struct svn_client_diff_summarize_t *)calloc(1, sizeof(struct svn_client_diff_summarize_t));
@@ -5508,7 +5627,7 @@ XS(_wrap_new_svn_client_diff_summarize_t) {
XS(_wrap_delete_svn_client_diff_summarize_t) {
{
- svn_client_diff_summarize_t *arg1 = (svn_client_diff_summarize_t *) 0 ;
+ struct svn_client_diff_summarize_t *arg1 = (struct svn_client_diff_summarize_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5519,9 +5638,9 @@ XS(_wrap_delete_svn_client_diff_summarize_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_diff_summarize_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_client_diff_summarize_t" "', argument " "1"" of type '" "svn_client_diff_summarize_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_client_diff_summarize_t" "', argument " "1"" of type '" "struct svn_client_diff_summarize_t *""'");
}
- arg1 = (svn_client_diff_summarize_t *)(argp1);
+ arg1 = (struct svn_client_diff_summarize_t *)(argp1);
{
free((char *) arg1);
@@ -5583,7 +5702,7 @@ XS(_wrap_svn_client_diff_summarize_dup) {
XS(_wrap_svn_client_ctx_t_auth_baton_set) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_auth_baton_t *arg2 = (svn_auth_baton_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5597,9 +5716,9 @@ XS(_wrap_svn_client_ctx_t_auth_baton_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_auth_baton_set" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_auth_baton_set" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_auth_baton_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_ctx_t_auth_baton_set" "', argument " "2"" of type '" "svn_auth_baton_t *""'");
@@ -5620,7 +5739,7 @@ XS(_wrap_svn_client_ctx_t_auth_baton_set) {
XS(_wrap_svn_client_ctx_t_auth_baton_get) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5632,9 +5751,9 @@ XS(_wrap_svn_client_ctx_t_auth_baton_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_auth_baton_get" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_auth_baton_get" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (svn_auth_baton_t *) ((arg1)->auth_baton);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_auth_baton_t, 0 | 0); argvi++ ;
@@ -5648,7 +5767,7 @@ XS(_wrap_svn_client_ctx_t_auth_baton_get) {
XS(_wrap_svn_client_ctx_t_notify_func_set) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_wc_notify_func_t arg2 = (svn_wc_notify_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5660,9 +5779,9 @@ XS(_wrap_svn_client_ctx_t_notify_func_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_notify_func_set" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_notify_func_set" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void);
if (!SWIG_IsOK(res)) {
@@ -5684,7 +5803,7 @@ XS(_wrap_svn_client_ctx_t_notify_func_set) {
XS(_wrap_svn_client_ctx_t_notify_func_get) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5696,9 +5815,9 @@ XS(_wrap_svn_client_ctx_t_notify_func_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_notify_func_get" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_notify_func_get" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (svn_wc_notify_func_t) ((arg1)->notify_func);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void); argvi++ ;
@@ -5712,7 +5831,7 @@ XS(_wrap_svn_client_ctx_t_notify_func_get) {
XS(_wrap_svn_client_ctx_t_notify_baton_set) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5726,9 +5845,9 @@ XS(_wrap_svn_client_ctx_t_notify_baton_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_notify_baton_set" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_notify_baton_set" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
_global_callback = ST(1);
arg2 = (void *) _global_callback;
@@ -5753,7 +5872,7 @@ XS(_wrap_svn_client_ctx_t_notify_baton_set) {
XS(_wrap_svn_client_ctx_t_notify_baton_get) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5765,9 +5884,9 @@ XS(_wrap_svn_client_ctx_t_notify_baton_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_notify_baton_get" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_notify_baton_get" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (void *) ((arg1)->notify_baton);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 | 0); argvi++ ;
@@ -5781,7 +5900,7 @@ XS(_wrap_svn_client_ctx_t_notify_baton_get) {
XS(_wrap_svn_client_ctx_t_log_msg_func_set) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_client_get_commit_log_t arg2 = (svn_client_get_commit_log_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5793,9 +5912,9 @@ XS(_wrap_svn_client_ctx_t_log_msg_func_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_log_msg_func_set" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_log_msg_func_set" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_p_q_const__char_p_p_q_const__char_p_apr_array_header_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -5817,7 +5936,7 @@ XS(_wrap_svn_client_ctx_t_log_msg_func_set) {
XS(_wrap_svn_client_ctx_t_log_msg_func_get) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5829,9 +5948,9 @@ XS(_wrap_svn_client_ctx_t_log_msg_func_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_log_msg_func_get" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_log_msg_func_get" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (svn_client_get_commit_log_t) ((arg1)->log_msg_func);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_q_const__char_p_p_q_const__char_p_apr_array_header_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -5845,7 +5964,7 @@ XS(_wrap_svn_client_ctx_t_log_msg_func_get) {
XS(_wrap_svn_client_ctx_t_log_msg_baton_set) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5858,9 +5977,9 @@ XS(_wrap_svn_client_ctx_t_log_msg_baton_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_log_msg_baton_set" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_log_msg_baton_set" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg2), 0, SWIG_POINTER_DISOWN);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_ctx_t_log_msg_baton_set" "', argument " "2"" of type '" "void *""'");
@@ -5880,7 +5999,7 @@ XS(_wrap_svn_client_ctx_t_log_msg_baton_set) {
XS(_wrap_svn_client_ctx_t_log_msg_baton_get) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5892,9 +6011,9 @@ XS(_wrap_svn_client_ctx_t_log_msg_baton_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_log_msg_baton_get" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_log_msg_baton_get" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (void *) ((arg1)->log_msg_baton);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 | 0); argvi++ ;
@@ -5908,7 +6027,7 @@ XS(_wrap_svn_client_ctx_t_log_msg_baton_get) {
XS(_wrap_svn_client_ctx_t_config_set) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
apr_hash_t *arg2 = (apr_hash_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5920,9 +6039,9 @@ XS(_wrap_svn_client_ctx_t_config_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_config_set" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_config_set" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
arg2 = svn_swig_pl_objs_to_hash_by_name (ST(1), "svn_config_t *",
svn_swig_pl_make_pool ((SV *)NULL));
@@ -5942,7 +6061,7 @@ XS(_wrap_svn_client_ctx_t_config_set) {
XS(_wrap_svn_client_ctx_t_config_get) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5954,9 +6073,9 @@ XS(_wrap_svn_client_ctx_t_config_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_config_get" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_config_get" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (apr_hash_t *) ((arg1)->config);
{
ST(argvi) = svn_swig_pl_convert_hash(result,
@@ -5974,7 +6093,7 @@ XS(_wrap_svn_client_ctx_t_config_get) {
XS(_wrap_svn_client_ctx_t_cancel_func_set) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_cancel_func_t arg2 = (svn_cancel_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5986,9 +6105,9 @@ XS(_wrap_svn_client_ctx_t_cancel_func_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_cancel_func_set" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_cancel_func_set" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -6010,7 +6129,7 @@ XS(_wrap_svn_client_ctx_t_cancel_func_set) {
XS(_wrap_svn_client_ctx_t_cancel_func_get) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6022,9 +6141,9 @@ XS(_wrap_svn_client_ctx_t_cancel_func_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_cancel_func_get" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_cancel_func_get" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (svn_cancel_func_t) ((arg1)->cancel_func);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__p_svn_error_t); argvi++ ;
@@ -6038,7 +6157,7 @@ XS(_wrap_svn_client_ctx_t_cancel_func_get) {
XS(_wrap_svn_client_ctx_t_cancel_baton_set) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6052,9 +6171,9 @@ XS(_wrap_svn_client_ctx_t_cancel_baton_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_cancel_baton_set" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_cancel_baton_set" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
_global_callback = ST(1);
arg2 = (void *) _global_callback;
@@ -6079,7 +6198,7 @@ XS(_wrap_svn_client_ctx_t_cancel_baton_set) {
XS(_wrap_svn_client_ctx_t_cancel_baton_get) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6091,9 +6210,9 @@ XS(_wrap_svn_client_ctx_t_cancel_baton_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_cancel_baton_get" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_cancel_baton_get" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (void *) ((arg1)->cancel_baton);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 | 0); argvi++ ;
@@ -6107,7 +6226,7 @@ XS(_wrap_svn_client_ctx_t_cancel_baton_get) {
XS(_wrap_svn_client_ctx_t_notify_func2_set) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_wc_notify_func2_t arg2 = (svn_wc_notify_func2_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6119,9 +6238,9 @@ XS(_wrap_svn_client_ctx_t_notify_func2_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_notify_func2_set" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_notify_func2_set" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void);
if (!SWIG_IsOK(res)) {
@@ -6143,7 +6262,7 @@ XS(_wrap_svn_client_ctx_t_notify_func2_set) {
XS(_wrap_svn_client_ctx_t_notify_func2_get) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6155,9 +6274,9 @@ XS(_wrap_svn_client_ctx_t_notify_func2_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_notify_func2_get" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_notify_func2_get" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (svn_wc_notify_func2_t) ((arg1)->notify_func2);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void); argvi++ ;
@@ -6171,7 +6290,7 @@ XS(_wrap_svn_client_ctx_t_notify_func2_get) {
XS(_wrap_svn_client_ctx_t_notify_baton2_set) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6184,9 +6303,9 @@ XS(_wrap_svn_client_ctx_t_notify_baton2_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_notify_baton2_set" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_notify_baton2_set" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg2), 0, SWIG_POINTER_DISOWN);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_ctx_t_notify_baton2_set" "', argument " "2"" of type '" "void *""'");
@@ -6206,7 +6325,7 @@ XS(_wrap_svn_client_ctx_t_notify_baton2_set) {
XS(_wrap_svn_client_ctx_t_notify_baton2_get) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6218,9 +6337,9 @@ XS(_wrap_svn_client_ctx_t_notify_baton2_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_notify_baton2_get" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_notify_baton2_get" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (void *) ((arg1)->notify_baton2);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 | 0); argvi++ ;
@@ -6234,7 +6353,7 @@ XS(_wrap_svn_client_ctx_t_notify_baton2_get) {
XS(_wrap_svn_client_ctx_t_log_msg_func2_set) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_client_get_commit_log2_t arg2 = (svn_client_get_commit_log2_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6246,9 +6365,9 @@ XS(_wrap_svn_client_ctx_t_log_msg_func2_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_log_msg_func2_set" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_log_msg_func2_set" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_p_q_const__char_p_p_q_const__char_p_q_const__apr_array_header_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -6270,7 +6389,7 @@ XS(_wrap_svn_client_ctx_t_log_msg_func2_set) {
XS(_wrap_svn_client_ctx_t_log_msg_func2_get) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6282,9 +6401,9 @@ XS(_wrap_svn_client_ctx_t_log_msg_func2_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_log_msg_func2_get" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_log_msg_func2_get" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (svn_client_get_commit_log2_t) ((arg1)->log_msg_func2);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_q_const__char_p_p_q_const__char_p_q_const__apr_array_header_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -6298,7 +6417,7 @@ XS(_wrap_svn_client_ctx_t_log_msg_func2_get) {
XS(_wrap_svn_client_ctx_t_log_msg_baton2_set) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6311,9 +6430,9 @@ XS(_wrap_svn_client_ctx_t_log_msg_baton2_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_log_msg_baton2_set" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_log_msg_baton2_set" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg2), 0, SWIG_POINTER_DISOWN);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_ctx_t_log_msg_baton2_set" "', argument " "2"" of type '" "void *""'");
@@ -6333,7 +6452,7 @@ XS(_wrap_svn_client_ctx_t_log_msg_baton2_set) {
XS(_wrap_svn_client_ctx_t_log_msg_baton2_get) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6345,9 +6464,9 @@ XS(_wrap_svn_client_ctx_t_log_msg_baton2_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_log_msg_baton2_get" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_log_msg_baton2_get" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (void *) ((arg1)->log_msg_baton2);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 | 0); argvi++ ;
@@ -6361,7 +6480,7 @@ XS(_wrap_svn_client_ctx_t_log_msg_baton2_get) {
XS(_wrap_svn_client_ctx_t_progress_func_set) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_ra_progress_notify_func_t arg2 = (svn_ra_progress_notify_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6373,9 +6492,9 @@ XS(_wrap_svn_client_ctx_t_progress_func_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_progress_func_set" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_progress_func_set" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_apr_off_t_apr_off_t_p_void_p_apr_pool_t__void);
if (!SWIG_IsOK(res)) {
@@ -6397,7 +6516,7 @@ XS(_wrap_svn_client_ctx_t_progress_func_set) {
XS(_wrap_svn_client_ctx_t_progress_func_get) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6409,9 +6528,9 @@ XS(_wrap_svn_client_ctx_t_progress_func_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_progress_func_get" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_progress_func_get" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (svn_ra_progress_notify_func_t) ((arg1)->progress_func);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_apr_off_t_apr_off_t_p_void_p_apr_pool_t__void); argvi++ ;
@@ -6425,7 +6544,7 @@ XS(_wrap_svn_client_ctx_t_progress_func_get) {
XS(_wrap_svn_client_ctx_t_progress_baton_set) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6438,9 +6557,9 @@ XS(_wrap_svn_client_ctx_t_progress_baton_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_progress_baton_set" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_progress_baton_set" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg2), 0, SWIG_POINTER_DISOWN);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_ctx_t_progress_baton_set" "', argument " "2"" of type '" "void *""'");
@@ -6460,7 +6579,7 @@ XS(_wrap_svn_client_ctx_t_progress_baton_set) {
XS(_wrap_svn_client_ctx_t_progress_baton_get) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6472,9 +6591,9 @@ XS(_wrap_svn_client_ctx_t_progress_baton_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_progress_baton_get" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_progress_baton_get" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (void *) ((arg1)->progress_baton);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 | 0); argvi++ ;
@@ -6488,7 +6607,7 @@ XS(_wrap_svn_client_ctx_t_progress_baton_get) {
XS(_wrap_svn_client_ctx_t_log_msg_func3_set) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_client_get_commit_log3_t arg2 = (svn_client_get_commit_log3_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6500,9 +6619,9 @@ XS(_wrap_svn_client_ctx_t_log_msg_func3_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_log_msg_func3_set" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_log_msg_func3_set" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_p_q_const__char_p_p_q_const__char_p_q_const__apr_array_header_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -6524,7 +6643,7 @@ XS(_wrap_svn_client_ctx_t_log_msg_func3_set) {
XS(_wrap_svn_client_ctx_t_log_msg_func3_get) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6536,9 +6655,9 @@ XS(_wrap_svn_client_ctx_t_log_msg_func3_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_log_msg_func3_get" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_log_msg_func3_get" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (svn_client_get_commit_log3_t) ((arg1)->log_msg_func3);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_q_const__char_p_p_q_const__char_p_q_const__apr_array_header_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -6552,7 +6671,7 @@ XS(_wrap_svn_client_ctx_t_log_msg_func3_get) {
XS(_wrap_svn_client_ctx_t_log_msg_baton3_set) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6566,9 +6685,9 @@ XS(_wrap_svn_client_ctx_t_log_msg_baton3_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_log_msg_baton3_set" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_log_msg_baton3_set" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
_global_callback = ST(1);
arg2 = (void *) _global_callback;
@@ -6593,7 +6712,7 @@ XS(_wrap_svn_client_ctx_t_log_msg_baton3_set) {
XS(_wrap_svn_client_ctx_t_log_msg_baton3_get) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6605,9 +6724,9 @@ XS(_wrap_svn_client_ctx_t_log_msg_baton3_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_log_msg_baton3_get" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_log_msg_baton3_get" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (void *) ((arg1)->log_msg_baton3);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 | 0); argvi++ ;
@@ -6621,7 +6740,7 @@ XS(_wrap_svn_client_ctx_t_log_msg_baton3_get) {
XS(_wrap_svn_client_ctx_t_mimetypes_map_set) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
apr_hash_t *arg2 = (apr_hash_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6635,9 +6754,9 @@ XS(_wrap_svn_client_ctx_t_mimetypes_map_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_mimetypes_map_set" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_mimetypes_map_set" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_apr_hash_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_ctx_t_mimetypes_map_set" "', argument " "2"" of type '" "apr_hash_t *""'");
@@ -6658,7 +6777,7 @@ XS(_wrap_svn_client_ctx_t_mimetypes_map_set) {
XS(_wrap_svn_client_ctx_t_mimetypes_map_get) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6670,9 +6789,9 @@ XS(_wrap_svn_client_ctx_t_mimetypes_map_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_mimetypes_map_get" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_mimetypes_map_get" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (apr_hash_t *) ((arg1)->mimetypes_map);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_hash_t, 0 | 0); argvi++ ;
@@ -6686,7 +6805,7 @@ XS(_wrap_svn_client_ctx_t_mimetypes_map_get) {
XS(_wrap_svn_client_ctx_t_conflict_func_set) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_wc_conflict_resolver_func_t arg2 = (svn_wc_conflict_resolver_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6698,9 +6817,9 @@ XS(_wrap_svn_client_ctx_t_conflict_func_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_conflict_func_set" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_conflict_func_set" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -6722,7 +6841,7 @@ XS(_wrap_svn_client_ctx_t_conflict_func_set) {
XS(_wrap_svn_client_ctx_t_conflict_func_get) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6734,9 +6853,9 @@ XS(_wrap_svn_client_ctx_t_conflict_func_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_conflict_func_get" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_conflict_func_get" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (svn_wc_conflict_resolver_func_t) ((arg1)->conflict_func);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -6750,7 +6869,7 @@ XS(_wrap_svn_client_ctx_t_conflict_func_get) {
XS(_wrap_svn_client_ctx_t_conflict_baton_set) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6763,9 +6882,9 @@ XS(_wrap_svn_client_ctx_t_conflict_baton_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_conflict_baton_set" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_conflict_baton_set" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg2), 0, SWIG_POINTER_DISOWN);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_ctx_t_conflict_baton_set" "', argument " "2"" of type '" "void *""'");
@@ -6785,7 +6904,7 @@ XS(_wrap_svn_client_ctx_t_conflict_baton_set) {
XS(_wrap_svn_client_ctx_t_conflict_baton_get) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6797,9 +6916,9 @@ XS(_wrap_svn_client_ctx_t_conflict_baton_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_conflict_baton_get" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_conflict_baton_get" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (void *) ((arg1)->conflict_baton);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 | 0); argvi++ ;
@@ -6813,7 +6932,7 @@ XS(_wrap_svn_client_ctx_t_conflict_baton_get) {
XS(_wrap_svn_client_ctx_t_client_name_set) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6828,9 +6947,9 @@ XS(_wrap_svn_client_ctx_t_client_name_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_client_name_set" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_client_name_set" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_ctx_t_client_name_set" "', argument " "2"" of type '" "char const *""'");
@@ -6858,7 +6977,7 @@ XS(_wrap_svn_client_ctx_t_client_name_set) {
XS(_wrap_svn_client_ctx_t_client_name_get) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6870,9 +6989,9 @@ XS(_wrap_svn_client_ctx_t_client_name_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_client_name_get" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_client_name_get" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (char *) ((arg1)->client_name);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -6886,7 +7005,7 @@ XS(_wrap_svn_client_ctx_t_client_name_get) {
XS(_wrap_svn_client_ctx_t_conflict_func2_set) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_wc_conflict_resolver_func2_t arg2 = (svn_wc_conflict_resolver_func2_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6898,9 +7017,9 @@ XS(_wrap_svn_client_ctx_t_conflict_func2_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_conflict_func2_set" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_conflict_func2_set" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description2_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -6922,7 +7041,7 @@ XS(_wrap_svn_client_ctx_t_conflict_func2_set) {
XS(_wrap_svn_client_ctx_t_conflict_func2_get) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6934,9 +7053,9 @@ XS(_wrap_svn_client_ctx_t_conflict_func2_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_conflict_func2_get" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_conflict_func2_get" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (svn_wc_conflict_resolver_func2_t) ((arg1)->conflict_func2);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description2_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -6950,7 +7069,7 @@ XS(_wrap_svn_client_ctx_t_conflict_func2_get) {
XS(_wrap_svn_client_ctx_t_conflict_baton2_set) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6963,9 +7082,9 @@ XS(_wrap_svn_client_ctx_t_conflict_baton2_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_conflict_baton2_set" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_conflict_baton2_set" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg2), 0, SWIG_POINTER_DISOWN);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_ctx_t_conflict_baton2_set" "', argument " "2"" of type '" "void *""'");
@@ -6985,7 +7104,7 @@ XS(_wrap_svn_client_ctx_t_conflict_baton2_set) {
XS(_wrap_svn_client_ctx_t_conflict_baton2_get) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6997,9 +7116,9 @@ XS(_wrap_svn_client_ctx_t_conflict_baton2_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_conflict_baton2_get" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_conflict_baton2_get" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (void *) ((arg1)->conflict_baton2);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 | 0); argvi++ ;
@@ -7013,7 +7132,7 @@ XS(_wrap_svn_client_ctx_t_conflict_baton2_get) {
XS(_wrap_svn_client_ctx_t_wc_ctx_set) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_wc_context_t *arg2 = (svn_wc_context_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7027,9 +7146,9 @@ XS(_wrap_svn_client_ctx_t_wc_ctx_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_wc_ctx_set" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_wc_ctx_set" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_wc_context_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_ctx_t_wc_ctx_set" "', argument " "2"" of type '" "svn_wc_context_t *""'");
@@ -7050,7 +7169,7 @@ XS(_wrap_svn_client_ctx_t_wc_ctx_set) {
XS(_wrap_svn_client_ctx_t_wc_ctx_get) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -7062,9 +7181,9 @@ XS(_wrap_svn_client_ctx_t_wc_ctx_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_wc_ctx_get" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_ctx_t_wc_ctx_get" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (svn_wc_context_t *) ((arg1)->wc_ctx);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_wc_context_t, 0 | 0); argvi++ ;
@@ -7079,14 +7198,14 @@ XS(_wrap_svn_client_ctx_t_wc_ctx_get) {
XS(_wrap_new_svn_client_ctx_t) {
{
int argvi = 0;
- svn_client_ctx_t *result = 0 ;
+ struct svn_client_ctx_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_client_ctx_t();");
}
{
- result = (svn_client_ctx_t *)calloc(1, sizeof(svn_client_ctx_t));
+ result = (struct svn_client_ctx_t *)calloc(1, sizeof(struct svn_client_ctx_t));
@@ -7101,7 +7220,7 @@ XS(_wrap_new_svn_client_ctx_t) {
XS(_wrap_delete_svn_client_ctx_t) {
{
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -7112,9 +7231,9 @@ XS(_wrap_delete_svn_client_ctx_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_ctx_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_client_ctx_t" "', argument " "1"" of type '" "svn_client_ctx_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_client_ctx_t" "', argument " "1"" of type '" "struct svn_client_ctx_t *""'");
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
free((char *) arg1);
@@ -7131,6 +7250,78 @@ XS(_wrap_delete_svn_client_ctx_t) {
}
+XS(_wrap_svn_client_create_context2) {
+ {
+ svn_client_ctx_t **arg1 = (svn_client_ctx_t **) 0 ;
+ apr_hash_t *arg2 = (apr_hash_t *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_client_ctx_t *temp1 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg3 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ if ((items < 1) || (items > 2)) {
+ SWIG_croak("Usage: svn_client_create_context2(cfg_hash,pool);");
+ }
+ res2 = SWIG_ConvertPtr(ST(0), &argp2,SWIGTYPE_p_apr_hash_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_create_context2" "', argument " "2"" of type '" "apr_hash_t *""'");
+ }
+ arg2 = (apr_hash_t *)(argp2);
+ if (items > 1) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_create_context2(arg1,arg2,arg3);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ (*arg1)->notify_func = svn_swig_pl_notify_func;
+ (*arg1)->notify_baton = (void *) &PL_sv_undef;
+ (*arg1)->log_msg_func3 = svn_swig_pl_get_commit_log_func;
+ (*arg1)->log_msg_baton3 = (void *) &PL_sv_undef;
+ (*arg1)->cancel_func = svn_swig_pl_cancel_func;
+ (*arg1)->cancel_baton = (void *) &PL_sv_undef;
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_client_ctx_t, 0); argvi++ ;
+ }
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_client_create_context) {
{
svn_client_ctx_t **arg1 = (svn_client_ctx_t **) 0 ;
@@ -7428,102 +7619,10 @@ XS(_wrap_svn_client_checkout3) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg5 = &rev5;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev5.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg5, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev5.kind = svn_opt_revision_number;
- rev5.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev5.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev5.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev5.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev5.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev5.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev5.kind = svn_opt_revision_date;
- rev5.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(2), TRUE);
+ }
+ {
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(3), TRUE);
}
ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val6);
if (!SWIG_IsOK(ecode6)) {
@@ -7663,102 +7762,10 @@ XS(_wrap_svn_client_checkout2) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg5 = &rev5;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev5.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg5, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev5.kind = svn_opt_revision_number;
- rev5.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev5.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev5.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev5.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev5.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev5.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev5.kind = svn_opt_revision_date;
- rev5.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(2), TRUE);
+ }
+ {
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(3), TRUE);
}
ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val6);
if (!SWIG_IsOK(ecode6)) {
@@ -7886,53 +7893,7 @@ XS(_wrap_svn_client_checkout) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(2), TRUE);
}
ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val5);
if (!SWIG_IsOK(ecode5)) {
@@ -8047,53 +8008,7 @@ XS(_wrap_svn_client_update4) {
_global_pool);
}
{
- arg3 = &rev3;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(1), TRUE);
}
ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val4);
if (!SWIG_IsOK(ecode4)) {
@@ -8161,13 +8076,7 @@ XS(_wrap_svn_client_update4) {
}
}
{
- /* FIXME: Missing argout typemap: svn_client_update4 arg 1 (apr_array_header_t **) */
-
-
-
-
- SWIG_exception(SWIG_ValueError, "svn_client_update4 is not implemented yet");
-
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = svn_swig_pl_revnums_to_list(*arg1); argvi++ ;
}
@@ -8238,53 +8147,7 @@ XS(_wrap_svn_client_update3) {
_global_pool);
}
{
- arg3 = &rev3;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(1), TRUE);
}
ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val4);
if (!SWIG_IsOK(ecode4)) {
@@ -8342,13 +8205,7 @@ XS(_wrap_svn_client_update3) {
}
}
{
- /* FIXME: Missing argout typemap: svn_client_update3 arg 1 (apr_array_header_t **) */
-
-
-
-
- SWIG_exception(SWIG_ValueError, "svn_client_update3 is not implemented yet");
-
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = svn_swig_pl_revnums_to_list(*arg1); argvi++ ;
}
@@ -8409,53 +8266,7 @@ XS(_wrap_svn_client_update2) {
_global_pool);
}
{
- arg3 = &rev3;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(1), TRUE);
}
ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val4);
if (!SWIG_IsOK(ecode4)) {
@@ -8503,13 +8314,7 @@ XS(_wrap_svn_client_update2) {
}
}
{
- /* FIXME: Missing argout typemap: svn_client_update2 arg 1 (apr_array_header_t **) */
-
-
-
-
- SWIG_exception(SWIG_ValueError, "svn_client_update2 is not implemented yet");
-
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = svn_swig_pl_revnums_to_list(*arg1); argvi++ ;
}
@@ -8568,53 +8373,7 @@ XS(_wrap_svn_client_update) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(1), TRUE);
}
ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val4);
if (!SWIG_IsOK(ecode4)) {
@@ -8740,102 +8499,10 @@ XS(_wrap_svn_client_switch3) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg5 = &rev5;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev5.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg5, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev5.kind = svn_opt_revision_number;
- rev5.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev5.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev5.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev5.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev5.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev5.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev5.kind = svn_opt_revision_date;
- rev5.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(2), TRUE);
+ }
+ {
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(3), TRUE);
}
ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val6);
if (!SWIG_IsOK(ecode6)) {
@@ -8995,102 +8662,10 @@ XS(_wrap_svn_client_switch2) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg5 = &rev5;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev5.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg5, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev5.kind = svn_opt_revision_number;
- rev5.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev5.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev5.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev5.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev5.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev5.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev5.kind = svn_opt_revision_date;
- rev5.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(2), TRUE);
+ }
+ {
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(3), TRUE);
}
ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val6);
if (!SWIG_IsOK(ecode6)) {
@@ -9232,53 +8807,7 @@ XS(_wrap_svn_client_switch) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(2), TRUE);
}
ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val5);
if (!SWIG_IsOK(ecode5)) {
@@ -9347,6 +8876,125 @@ XS(_wrap_svn_client_switch) {
}
+XS(_wrap_svn_client_add5) {
+ {
+ char *arg1 = (char *) 0 ;
+ svn_depth_t arg2 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ svn_boolean_t arg5 ;
+ svn_boolean_t arg6 ;
+ svn_client_ctx_t *arg7 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg8 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ int val2 ;
+ int ecode2 = 0 ;
+ int val3 ;
+ int ecode3 = 0 ;
+ int val4 ;
+ int ecode4 = 0 ;
+ int val5 ;
+ int ecode5 = 0 ;
+ int val6 ;
+ int ecode6 = 0 ;
+ void *argp7 = 0 ;
+ int res7 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg8 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 7) || (items > 8)) {
+ SWIG_croak("Usage: svn_client_add5(path,depth,force,no_ignore,no_autoprops,add_parents,ctx,scratch_pool);");
+ }
+ res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_add5" "', argument " "1"" of type '" "char const *""'");
+ }
+ arg1 = (char *)(buf1);
+ ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_add5" "', argument " "2"" of type '" "svn_depth_t""'");
+ }
+ arg2 = (svn_depth_t)(val2);
+ ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3);
+ if (!SWIG_IsOK(ecode3)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "svn_client_add5" "', argument " "3"" of type '" "svn_boolean_t""'");
+ }
+ arg3 = (svn_boolean_t)(val3);
+ ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_client_add5" "', argument " "4"" of type '" "svn_boolean_t""'");
+ }
+ arg4 = (svn_boolean_t)(val4);
+ ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val5);
+ if (!SWIG_IsOK(ecode5)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_client_add5" "', argument " "5"" of type '" "svn_boolean_t""'");
+ }
+ arg5 = (svn_boolean_t)(val5);
+ ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val6);
+ if (!SWIG_IsOK(ecode6)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_client_add5" "', argument " "6"" of type '" "svn_boolean_t""'");
+ }
+ arg6 = (svn_boolean_t)(val6);
+ res7 = SWIG_ConvertPtr(ST(6), &argp7,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res7)) {
+ SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_client_add5" "', argument " "7"" of type '" "svn_client_ctx_t *""'");
+ }
+ arg7 = (svn_client_ctx_t *)(argp7);
+ if (items > 7) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_add5((char const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+
+
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+
+
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_client_add4) {
{
char *arg1 = (char *) 0 ;
@@ -9735,10 +9383,6 @@ XS(_wrap_svn_client_mkdir4) {
apr_pool_t *_global_pool ;
int val2 ;
int ecode2 = 0 ;
- int res3 ;
- char *buf3 = 0 ;
- int alloc3 = 0 ;
- int res5 ;
void *argp6 = 0 ;
int res6 = 0 ;
int argvi = 0;
@@ -9748,7 +9392,7 @@ XS(_wrap_svn_client_mkdir4) {
{
_global_pool = arg7 = svn_swig_pl_make_pool (ST(items-1));
}
- if ((items < 6) || (items > 7)) {
+ if ((items < 5) || (items > 6)) {
SWIG_croak("Usage: svn_client_mkdir4(paths,make_parents,revprop_table,commit_callback,commit_baton,ctx,pool);");
}
{
@@ -9760,27 +9404,22 @@ XS(_wrap_svn_client_mkdir4) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_mkdir4" "', argument " "2"" of type '" "svn_boolean_t""'");
}
arg2 = (svn_boolean_t)(val2);
- res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
- if (!SWIG_IsOK(res3)) {
- SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_client_mkdir4" "', argument " "3"" of type '" "apr_hash_t const *""'");
- }
- arg3 = (apr_hash_t *)(buf3);
{
- int res = SWIG_ConvertFunctionPtr(ST(3), (void**)(&arg4), SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_client_mkdir4" "', argument " "4"" of type '" "svn_commit_callback2_t""'");
- }
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg3 = svn_swig_pl_hash_to_prophash(ST(2), _global_pool);
}
- res5 = SWIG_ConvertPtr(ST(4),SWIG_as_voidptrptr(&arg5), 0, 0);
- if (!SWIG_IsOK(res5)) {
- SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_client_mkdir4" "', argument " "5"" of type '" "void *""'");
+ {
+ arg4 = svn_swig_pl_thunk_commit_callback2;
+ arg5 = (void *)ST(3);
+ svn_swig_pl_hold_ref_in_pool (_global_pool, ST(3));
}
- res6 = SWIG_ConvertPtr(ST(5), &argp6,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ res6 = SWIG_ConvertPtr(ST(4), &argp6,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res6)) {
SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_client_mkdir4" "', argument " "6"" of type '" "svn_client_ctx_t *""'");
}
arg6 = (svn_client_ctx_t *)(argp6);
- if (items > 6) {
+ if (items > 5) {
}
{
@@ -9807,8 +9446,6 @@ XS(_wrap_svn_client_mkdir4) {
}
- if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
-
@@ -9816,8 +9453,6 @@ XS(_wrap_svn_client_mkdir4) {
fail:
- if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
-
@@ -9838,9 +9473,6 @@ XS(_wrap_svn_client_mkdir3) {
svn_commit_info_t *temp1 = NULL ;
int val3 ;
int ecode3 = 0 ;
- int res4 ;
- char *buf4 = 0 ;
- int alloc4 = 0 ;
void *argp5 = 0 ;
int res5 = 0 ;
int argvi = 0;
@@ -9863,11 +9495,11 @@ XS(_wrap_svn_client_mkdir3) {
SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "svn_client_mkdir3" "', argument " "3"" of type '" "svn_boolean_t""'");
}
arg3 = (svn_boolean_t)(val3);
- res4 = SWIG_AsCharPtrAndSize(ST(2), &buf4, NULL, &alloc4);
- if (!SWIG_IsOK(res4)) {
- SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_client_mkdir3" "', argument " "4"" of type '" "apr_hash_t const *""'");
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg4 = svn_swig_pl_hash_to_prophash(ST(2), _global_pool);
}
- arg4 = (apr_hash_t *)(buf4);
res5 = SWIG_ConvertPtr(ST(3), &argp5,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res5)) {
SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_client_mkdir3" "', argument " "5"" of type '" "svn_client_ctx_t *""'");
@@ -9904,7 +9536,7 @@ XS(_wrap_svn_client_mkdir3) {
- if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+
XSRETURN(argvi);
@@ -9912,7 +9544,7 @@ XS(_wrap_svn_client_mkdir3) {
- if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+
SWIG_croak_null();
@@ -10085,10 +9717,6 @@ XS(_wrap_svn_client_delete4) {
int ecode2 = 0 ;
int val3 ;
int ecode3 = 0 ;
- int res4 ;
- char *buf4 = 0 ;
- int alloc4 = 0 ;
- int res6 ;
void *argp7 = 0 ;
int res7 = 0 ;
int argvi = 0;
@@ -10098,7 +9726,7 @@ XS(_wrap_svn_client_delete4) {
{
_global_pool = arg8 = svn_swig_pl_make_pool (ST(items-1));
}
- if ((items < 7) || (items > 8)) {
+ if ((items < 6) || (items > 7)) {
SWIG_croak("Usage: svn_client_delete4(paths,force,keep_local,revprop_table,commit_callback,commit_baton,ctx,pool);");
}
{
@@ -10115,27 +9743,22 @@ XS(_wrap_svn_client_delete4) {
SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "svn_client_delete4" "', argument " "3"" of type '" "svn_boolean_t""'");
}
arg3 = (svn_boolean_t)(val3);
- res4 = SWIG_AsCharPtrAndSize(ST(3), &buf4, NULL, &alloc4);
- if (!SWIG_IsOK(res4)) {
- SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_client_delete4" "', argument " "4"" of type '" "apr_hash_t const *""'");
- }
- arg4 = (apr_hash_t *)(buf4);
{
- int res = SWIG_ConvertFunctionPtr(ST(4), (void**)(&arg5), SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_client_delete4" "', argument " "5"" of type '" "svn_commit_callback2_t""'");
- }
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg4 = svn_swig_pl_hash_to_prophash(ST(3), _global_pool);
}
- res6 = SWIG_ConvertPtr(ST(5),SWIG_as_voidptrptr(&arg6), 0, 0);
- if (!SWIG_IsOK(res6)) {
- SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_client_delete4" "', argument " "6"" of type '" "void *""'");
+ {
+ arg5 = svn_swig_pl_thunk_commit_callback2;
+ arg6 = (void *)ST(4);
+ svn_swig_pl_hold_ref_in_pool (_global_pool, ST(4));
}
- res7 = SWIG_ConvertPtr(ST(6), &argp7,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ res7 = SWIG_ConvertPtr(ST(5), &argp7,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res7)) {
SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_client_delete4" "', argument " "7"" of type '" "svn_client_ctx_t *""'");
}
arg7 = (svn_client_ctx_t *)(argp7);
- if (items > 7) {
+ if (items > 6) {
}
{
@@ -10163,8 +9786,6 @@ XS(_wrap_svn_client_delete4) {
- if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
-
@@ -10173,8 +9794,6 @@ XS(_wrap_svn_client_delete4) {
- if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
-
@@ -10198,9 +9817,6 @@ XS(_wrap_svn_client_delete3) {
int ecode3 = 0 ;
int val4 ;
int ecode4 = 0 ;
- int res5 ;
- char *buf5 = 0 ;
- int alloc5 = 0 ;
void *argp6 = 0 ;
int res6 = 0 ;
int argvi = 0;
@@ -10228,11 +9844,11 @@ XS(_wrap_svn_client_delete3) {
SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_client_delete3" "', argument " "4"" of type '" "svn_boolean_t""'");
}
arg4 = (svn_boolean_t)(val4);
- res5 = SWIG_AsCharPtrAndSize(ST(3), &buf5, NULL, &alloc5);
- if (!SWIG_IsOK(res5)) {
- SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_client_delete3" "', argument " "5"" of type '" "apr_hash_t const *""'");
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg5 = svn_swig_pl_hash_to_prophash(ST(3), _global_pool);
}
- arg5 = (apr_hash_t *)(buf5);
res6 = SWIG_ConvertPtr(ST(4), &argp6,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res6)) {
SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_client_delete3" "', argument " "6"" of type '" "svn_client_ctx_t *""'");
@@ -10270,7 +9886,7 @@ XS(_wrap_svn_client_delete3) {
- if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+
XSRETURN(argvi);
@@ -10279,7 +9895,7 @@ XS(_wrap_svn_client_delete3) {
- if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+
SWIG_croak_null();
@@ -10457,6 +10073,158 @@ XS(_wrap_svn_client_delete) {
}
+XS(_wrap_svn_client_import5) {
+ {
+ char *arg1 = (char *) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_depth_t arg3 ;
+ svn_boolean_t arg4 ;
+ svn_boolean_t arg5 ;
+ svn_boolean_t arg6 ;
+ apr_hash_t *arg7 = (apr_hash_t *) 0 ;
+ svn_client_import_filter_func_t arg8 = (svn_client_import_filter_func_t) 0 ;
+ void *arg9 = (void *) 0 ;
+ svn_commit_callback2_t arg10 = (svn_commit_callback2_t) 0 ;
+ void *arg11 = (void *) 0 ;
+ svn_client_ctx_t *arg12 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg13 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int val3 ;
+ int ecode3 = 0 ;
+ int val4 ;
+ int ecode4 = 0 ;
+ int val5 ;
+ int ecode5 = 0 ;
+ int val6 ;
+ int ecode6 = 0 ;
+ int res9 ;
+ void *argp12 = 0 ;
+ int res12 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg13 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 11) || (items > 12)) {
+ SWIG_croak("Usage: svn_client_import5(path,url,depth,no_ignore,no_autoprops,ignore_unknown_node_types,revprop_table,filter_callback,filter_baton,commit_callback,commit_baton,ctx,scratch_pool);");
+ }
+ res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_import5" "', argument " "1"" of type '" "char const *""'");
+ }
+ arg1 = (char *)(buf1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_import5" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3);
+ if (!SWIG_IsOK(ecode3)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "svn_client_import5" "', argument " "3"" of type '" "svn_depth_t""'");
+ }
+ arg3 = (svn_depth_t)(val3);
+ ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_client_import5" "', argument " "4"" of type '" "svn_boolean_t""'");
+ }
+ arg4 = (svn_boolean_t)(val4);
+ ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val5);
+ if (!SWIG_IsOK(ecode5)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_client_import5" "', argument " "5"" of type '" "svn_boolean_t""'");
+ }
+ arg5 = (svn_boolean_t)(val5);
+ ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val6);
+ if (!SWIG_IsOK(ecode6)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_client_import5" "', argument " "6"" of type '" "svn_boolean_t""'");
+ }
+ arg6 = (svn_boolean_t)(val6);
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg7 = svn_swig_pl_hash_to_prophash(ST(6), _global_pool);
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(7), (void**)(&arg8), SWIGTYPE_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_client_import5" "', argument " "8"" of type '" "svn_client_import_filter_func_t""'");
+ }
+ }
+ res9 = SWIG_ConvertPtr(ST(8),SWIG_as_voidptrptr(&arg9), 0, 0);
+ if (!SWIG_IsOK(res9)) {
+ SWIG_exception_fail(SWIG_ArgError(res9), "in method '" "svn_client_import5" "', argument " "9"" of type '" "void *""'");
+ }
+ {
+ arg10 = svn_swig_pl_thunk_commit_callback2;
+ arg11 = (void *)ST(9);
+ svn_swig_pl_hold_ref_in_pool (_global_pool, ST(9));
+ }
+ res12 = SWIG_ConvertPtr(ST(10), &argp12,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res12)) {
+ SWIG_exception_fail(SWIG_ArgError(res12), "in method '" "svn_client_import5" "', argument " "12"" of type '" "svn_client_ctx_t *""'");
+ }
+ arg12 = (svn_client_ctx_t *)(argp12);
+ if (items > 11) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_import5((char const *)arg1,(char const *)arg2,arg3,arg4,arg5,arg6,(apr_hash_t const *)arg7,arg8,arg9,arg10,arg11,arg12,arg13);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+
+
+
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+
+
+
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_client_import4) {
{
char *arg1 = (char *) 0 ;
@@ -10482,10 +10250,6 @@ XS(_wrap_svn_client_import4) {
int ecode4 = 0 ;
int val5 ;
int ecode5 = 0 ;
- int res6 ;
- char *buf6 = 0 ;
- int alloc6 = 0 ;
- int res8 ;
void *argp9 = 0 ;
int res9 = 0 ;
int argvi = 0;
@@ -10495,7 +10259,7 @@ XS(_wrap_svn_client_import4) {
{
_global_pool = arg10 = svn_swig_pl_make_pool (ST(items-1));
}
- if ((items < 9) || (items > 10)) {
+ if ((items < 8) || (items > 9)) {
SWIG_croak("Usage: svn_client_import4(path,url,depth,no_ignore,ignore_unknown_node_types,revprop_table,commit_callback,commit_baton,ctx,pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
@@ -10523,27 +10287,22 @@ XS(_wrap_svn_client_import4) {
SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_client_import4" "', argument " "5"" of type '" "svn_boolean_t""'");
}
arg5 = (svn_boolean_t)(val5);
- res6 = SWIG_AsCharPtrAndSize(ST(5), &buf6, NULL, &alloc6);
- if (!SWIG_IsOK(res6)) {
- SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_client_import4" "', argument " "6"" of type '" "apr_hash_t const *""'");
- }
- arg6 = (apr_hash_t *)(buf6);
{
- int res = SWIG_ConvertFunctionPtr(ST(6), (void**)(&arg7), SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_client_import4" "', argument " "7"" of type '" "svn_commit_callback2_t""'");
- }
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg6 = svn_swig_pl_hash_to_prophash(ST(5), _global_pool);
}
- res8 = SWIG_ConvertPtr(ST(7),SWIG_as_voidptrptr(&arg8), 0, 0);
- if (!SWIG_IsOK(res8)) {
- SWIG_exception_fail(SWIG_ArgError(res8), "in method '" "svn_client_import4" "', argument " "8"" of type '" "void *""'");
+ {
+ arg7 = svn_swig_pl_thunk_commit_callback2;
+ arg8 = (void *)ST(6);
+ svn_swig_pl_hold_ref_in_pool (_global_pool, ST(6));
}
- res9 = SWIG_ConvertPtr(ST(8), &argp9,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ res9 = SWIG_ConvertPtr(ST(7), &argp9,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res9)) {
SWIG_exception_fail(SWIG_ArgError(res9), "in method '" "svn_client_import4" "', argument " "9"" of type '" "svn_client_ctx_t *""'");
}
arg9 = (svn_client_ctx_t *)(argp9);
- if (items > 9) {
+ if (items > 8) {
}
{
@@ -10573,8 +10332,6 @@ XS(_wrap_svn_client_import4) {
- if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
-
@@ -10585,8 +10342,6 @@ XS(_wrap_svn_client_import4) {
- if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
-
@@ -10620,9 +10375,6 @@ XS(_wrap_svn_client_import3) {
int ecode5 = 0 ;
int val6 ;
int ecode6 = 0 ;
- int res7 ;
- char *buf7 = 0 ;
- int alloc7 = 0 ;
void *argp8 = 0 ;
int res8 = 0 ;
int argvi = 0;
@@ -10661,11 +10413,11 @@ XS(_wrap_svn_client_import3) {
SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_client_import3" "', argument " "6"" of type '" "svn_boolean_t""'");
}
arg6 = (svn_boolean_t)(val6);
- res7 = SWIG_AsCharPtrAndSize(ST(5), &buf7, NULL, &alloc7);
- if (!SWIG_IsOK(res7)) {
- SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_client_import3" "', argument " "7"" of type '" "apr_hash_t const *""'");
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg7 = svn_swig_pl_hash_to_prophash(ST(5), _global_pool);
}
- arg7 = (apr_hash_t *)(buf7);
res8 = SWIG_ConvertPtr(ST(6), &argp8,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res8)) {
SWIG_exception_fail(SWIG_ArgError(res8), "in method '" "svn_client_import3" "', argument " "8"" of type '" "svn_client_ctx_t *""'");
@@ -10705,7 +10457,7 @@ XS(_wrap_svn_client_import3) {
- if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+
XSRETURN(argvi);
@@ -10716,7 +10468,7 @@ XS(_wrap_svn_client_import3) {
- if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+
SWIG_croak_null();
@@ -10934,6 +10686,153 @@ XS(_wrap_svn_client_import) {
}
+XS(_wrap_svn_client_commit6) {
+ {
+ apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
+ svn_depth_t arg2 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ svn_boolean_t arg5 ;
+ svn_boolean_t arg6 ;
+ svn_boolean_t arg7 ;
+ apr_array_header_t *arg8 = (apr_array_header_t *) 0 ;
+ apr_hash_t *arg9 = (apr_hash_t *) 0 ;
+ svn_commit_callback2_t arg10 = (svn_commit_callback2_t) 0 ;
+ void *arg11 = (void *) 0 ;
+ svn_client_ctx_t *arg12 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg13 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int val2 ;
+ int ecode2 = 0 ;
+ int val3 ;
+ int ecode3 = 0 ;
+ int val4 ;
+ int ecode4 = 0 ;
+ int val5 ;
+ int ecode5 = 0 ;
+ int val6 ;
+ int ecode6 = 0 ;
+ int val7 ;
+ int ecode7 = 0 ;
+ void *argp12 = 0 ;
+ int res12 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg13 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 11) || (items > 12)) {
+ SWIG_croak("Usage: svn_client_commit6(targets,depth,keep_locks,keep_changelists,commit_as_operations,include_file_externals,include_dir_externals,changelists,revprop_table,commit_callback,commit_baton,ctx,pool);");
+ }
+ {
+ arg1 = (apr_array_header_t *) svn_swig_pl_strings_to_array(ST(0),
+ _global_pool);
+ }
+ ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_commit6" "', argument " "2"" of type '" "svn_depth_t""'");
+ }
+ arg2 = (svn_depth_t)(val2);
+ ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3);
+ if (!SWIG_IsOK(ecode3)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "svn_client_commit6" "', argument " "3"" of type '" "svn_boolean_t""'");
+ }
+ arg3 = (svn_boolean_t)(val3);
+ ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_client_commit6" "', argument " "4"" of type '" "svn_boolean_t""'");
+ }
+ arg4 = (svn_boolean_t)(val4);
+ ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val5);
+ if (!SWIG_IsOK(ecode5)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_client_commit6" "', argument " "5"" of type '" "svn_boolean_t""'");
+ }
+ arg5 = (svn_boolean_t)(val5);
+ ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val6);
+ if (!SWIG_IsOK(ecode6)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_client_commit6" "', argument " "6"" of type '" "svn_boolean_t""'");
+ }
+ arg6 = (svn_boolean_t)(val6);
+ ecode7 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(6), &val7);
+ if (!SWIG_IsOK(ecode7)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "svn_client_commit6" "', argument " "7"" of type '" "svn_boolean_t""'");
+ }
+ arg7 = (svn_boolean_t)(val7);
+ {
+ arg8 = SvOK(ST(7)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(7), _global_pool) : NULL;
+ }
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg9 = svn_swig_pl_hash_to_prophash(ST(8), _global_pool);
+ }
+ {
+ arg10 = svn_swig_pl_thunk_commit_callback2;
+ arg11 = (void *)ST(9);
+ svn_swig_pl_hold_ref_in_pool (_global_pool, ST(9));
+ }
+ res12 = SWIG_ConvertPtr(ST(10), &argp12,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res12)) {
+ SWIG_exception_fail(SWIG_ArgError(res12), "in method '" "svn_client_commit6" "', argument " "12"" of type '" "svn_client_ctx_t *""'");
+ }
+ arg12 = (svn_client_ctx_t *)(argp12);
+ if (items > 11) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_commit6((apr_array_header_t const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7,(apr_array_header_t const *)arg8,(apr_hash_t const *)arg9,arg10,arg11,arg12,arg13);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+
+
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_client_commit5) {
{
apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
@@ -10956,13 +10855,6 @@ XS(_wrap_svn_client_commit5) {
int ecode4 = 0 ;
int val5 ;
int ecode5 = 0 ;
- int res6 ;
- char *buf6 = 0 ;
- int alloc6 = 0 ;
- int res7 ;
- char *buf7 = 0 ;
- int alloc7 = 0 ;
- int res9 ;
void *argp10 = 0 ;
int res10 = 0 ;
int argvi = 0;
@@ -10972,7 +10864,7 @@ XS(_wrap_svn_client_commit5) {
{
_global_pool = arg11 = svn_swig_pl_make_pool (ST(items-1));
}
- if ((items < 10) || (items > 11)) {
+ if ((items < 9) || (items > 10)) {
SWIG_croak("Usage: svn_client_commit5(targets,depth,keep_locks,keep_changelists,commit_as_operations,changelists,revprop_table,commit_callback,commit_baton,ctx,pool);");
}
{
@@ -10999,32 +10891,26 @@ XS(_wrap_svn_client_commit5) {
SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_client_commit5" "', argument " "5"" of type '" "svn_boolean_t""'");
}
arg5 = (svn_boolean_t)(val5);
- res6 = SWIG_AsCharPtrAndSize(ST(5), &buf6, NULL, &alloc6);
- if (!SWIG_IsOK(res6)) {
- SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_client_commit5" "', argument " "6"" of type '" "apr_array_header_t const *""'");
- }
- arg6 = (apr_array_header_t *)(buf6);
- res7 = SWIG_AsCharPtrAndSize(ST(6), &buf7, NULL, &alloc7);
- if (!SWIG_IsOK(res7)) {
- SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_client_commit5" "', argument " "7"" of type '" "apr_hash_t const *""'");
+ {
+ arg6 = SvOK(ST(5)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(5), _global_pool) : NULL;
}
- arg7 = (apr_hash_t *)(buf7);
{
- int res = SWIG_ConvertFunctionPtr(ST(7), (void**)(&arg8), SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_client_commit5" "', argument " "8"" of type '" "svn_commit_callback2_t""'");
- }
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg7 = svn_swig_pl_hash_to_prophash(ST(6), _global_pool);
}
- res9 = SWIG_ConvertPtr(ST(8),SWIG_as_voidptrptr(&arg9), 0, 0);
- if (!SWIG_IsOK(res9)) {
- SWIG_exception_fail(SWIG_ArgError(res9), "in method '" "svn_client_commit5" "', argument " "9"" of type '" "void *""'");
+ {
+ arg8 = svn_swig_pl_thunk_commit_callback2;
+ arg9 = (void *)ST(7);
+ svn_swig_pl_hold_ref_in_pool (_global_pool, ST(7));
}
- res10 = SWIG_ConvertPtr(ST(9), &argp10,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ res10 = SWIG_ConvertPtr(ST(8), &argp10,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res10)) {
SWIG_exception_fail(SWIG_ArgError(res10), "in method '" "svn_client_commit5" "', argument " "10"" of type '" "svn_client_ctx_t *""'");
}
arg10 = (svn_client_ctx_t *)(argp10);
- if (items > 10) {
+ if (items > 9) {
}
{
@@ -11054,8 +10940,6 @@ XS(_wrap_svn_client_commit5) {
- if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
- if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
@@ -11067,8 +10951,6 @@ XS(_wrap_svn_client_commit5) {
- if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
- if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
@@ -11097,12 +10979,6 @@ XS(_wrap_svn_client_commit4) {
int ecode4 = 0 ;
int val5 ;
int ecode5 = 0 ;
- int res6 ;
- char *buf6 = 0 ;
- int alloc6 = 0 ;
- int res7 ;
- char *buf7 = 0 ;
- int alloc7 = 0 ;
void *argp8 = 0 ;
int res8 = 0 ;
int argvi = 0;
@@ -11135,16 +11011,15 @@ XS(_wrap_svn_client_commit4) {
SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_client_commit4" "', argument " "5"" of type '" "svn_boolean_t""'");
}
arg5 = (svn_boolean_t)(val5);
- res6 = SWIG_AsCharPtrAndSize(ST(4), &buf6, NULL, &alloc6);
- if (!SWIG_IsOK(res6)) {
- SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_client_commit4" "', argument " "6"" of type '" "apr_array_header_t const *""'");
+ {
+ arg6 = SvOK(ST(4)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(4), _global_pool) : NULL;
}
- arg6 = (apr_array_header_t *)(buf6);
- res7 = SWIG_AsCharPtrAndSize(ST(5), &buf7, NULL, &alloc7);
- if (!SWIG_IsOK(res7)) {
- SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_client_commit4" "', argument " "7"" of type '" "apr_hash_t const *""'");
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg7 = svn_swig_pl_hash_to_prophash(ST(5), _global_pool);
}
- arg7 = (apr_hash_t *)(buf7);
res8 = SWIG_ConvertPtr(ST(6), &argp8,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res8)) {
SWIG_exception_fail(SWIG_ArgError(res8), "in method '" "svn_client_commit4" "', argument " "8"" of type '" "svn_client_ctx_t *""'");
@@ -11183,8 +11058,8 @@ XS(_wrap_svn_client_commit4) {
- if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
- if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+
+
XSRETURN(argvi);
@@ -11194,8 +11069,8 @@ XS(_wrap_svn_client_commit4) {
- if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
- if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+
+
SWIG_croak_null();
@@ -11482,7 +11357,7 @@ XS(_wrap_svn_client_commit) {
XS(_wrap_svn_client_status_t_kind_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11496,9 +11371,9 @@ XS(_wrap_svn_client_status_t_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_kind_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_kind_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_status_t_kind_set" "', argument " "2"" of type '" "svn_node_kind_t""'");
@@ -11519,7 +11394,7 @@ XS(_wrap_svn_client_status_t_kind_set) {
XS(_wrap_svn_client_status_t_kind_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11531,9 +11406,9 @@ XS(_wrap_svn_client_status_t_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_kind_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_kind_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -11547,7 +11422,7 @@ XS(_wrap_svn_client_status_t_kind_get) {
XS(_wrap_svn_client_status_t_local_abspath_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11562,9 +11437,9 @@ XS(_wrap_svn_client_status_t_local_abspath_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_local_abspath_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_local_abspath_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_status_t_local_abspath_set" "', argument " "2"" of type '" "char const *""'");
@@ -11592,7 +11467,7 @@ XS(_wrap_svn_client_status_t_local_abspath_set) {
XS(_wrap_svn_client_status_t_local_abspath_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11604,9 +11479,9 @@ XS(_wrap_svn_client_status_t_local_abspath_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_local_abspath_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_local_abspath_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (char *) ((arg1)->local_abspath);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -11620,7 +11495,7 @@ XS(_wrap_svn_client_status_t_local_abspath_get) {
XS(_wrap_svn_client_status_t_filesize_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_filesize_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11634,9 +11509,9 @@ XS(_wrap_svn_client_status_t_filesize_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_filesize_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_filesize_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_status_t_filesize_set" "', argument " "2"" of type '" "svn_filesize_t""'");
@@ -11657,7 +11532,7 @@ XS(_wrap_svn_client_status_t_filesize_set) {
XS(_wrap_svn_client_status_t_filesize_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11669,9 +11544,9 @@ XS(_wrap_svn_client_status_t_filesize_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_filesize_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_filesize_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = ((arg1)->filesize);
{
char temp[256];
@@ -11690,7 +11565,7 @@ XS(_wrap_svn_client_status_t_filesize_get) {
XS(_wrap_svn_client_status_t_versioned_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11704,9 +11579,9 @@ XS(_wrap_svn_client_status_t_versioned_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_versioned_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_versioned_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_status_t_versioned_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -11727,7 +11602,7 @@ XS(_wrap_svn_client_status_t_versioned_set) {
XS(_wrap_svn_client_status_t_versioned_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11739,9 +11614,9 @@ XS(_wrap_svn_client_status_t_versioned_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_versioned_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_versioned_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_boolean_t) ((arg1)->versioned);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -11755,7 +11630,7 @@ XS(_wrap_svn_client_status_t_versioned_get) {
XS(_wrap_svn_client_status_t_conflicted_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11769,9 +11644,9 @@ XS(_wrap_svn_client_status_t_conflicted_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_conflicted_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_conflicted_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_status_t_conflicted_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -11792,7 +11667,7 @@ XS(_wrap_svn_client_status_t_conflicted_set) {
XS(_wrap_svn_client_status_t_conflicted_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11804,9 +11679,9 @@ XS(_wrap_svn_client_status_t_conflicted_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_conflicted_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_conflicted_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_boolean_t) ((arg1)->conflicted);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -11820,7 +11695,7 @@ XS(_wrap_svn_client_status_t_conflicted_get) {
XS(_wrap_svn_client_status_t_node_status_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11834,9 +11709,9 @@ XS(_wrap_svn_client_status_t_node_status_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_node_status_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_node_status_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_status_t_node_status_set" "', argument " "2"" of type '" "enum svn_wc_status_kind""'");
@@ -11857,7 +11732,7 @@ XS(_wrap_svn_client_status_t_node_status_set) {
XS(_wrap_svn_client_status_t_node_status_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11869,9 +11744,9 @@ XS(_wrap_svn_client_status_t_node_status_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_node_status_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_node_status_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->node_status);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -11885,7 +11760,7 @@ XS(_wrap_svn_client_status_t_node_status_get) {
XS(_wrap_svn_client_status_t_text_status_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11899,9 +11774,9 @@ XS(_wrap_svn_client_status_t_text_status_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_text_status_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_text_status_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_status_t_text_status_set" "', argument " "2"" of type '" "enum svn_wc_status_kind""'");
@@ -11922,7 +11797,7 @@ XS(_wrap_svn_client_status_t_text_status_set) {
XS(_wrap_svn_client_status_t_text_status_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11934,9 +11809,9 @@ XS(_wrap_svn_client_status_t_text_status_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_text_status_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_text_status_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->text_status);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -11950,7 +11825,7 @@ XS(_wrap_svn_client_status_t_text_status_get) {
XS(_wrap_svn_client_status_t_prop_status_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11964,9 +11839,9 @@ XS(_wrap_svn_client_status_t_prop_status_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_prop_status_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_prop_status_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_status_t_prop_status_set" "', argument " "2"" of type '" "enum svn_wc_status_kind""'");
@@ -11987,7 +11862,7 @@ XS(_wrap_svn_client_status_t_prop_status_set) {
XS(_wrap_svn_client_status_t_prop_status_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11999,9 +11874,9 @@ XS(_wrap_svn_client_status_t_prop_status_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_prop_status_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_prop_status_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->prop_status);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -12015,7 +11890,7 @@ XS(_wrap_svn_client_status_t_prop_status_get) {
XS(_wrap_svn_client_status_t_wc_is_locked_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12029,9 +11904,9 @@ XS(_wrap_svn_client_status_t_wc_is_locked_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_wc_is_locked_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_wc_is_locked_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_status_t_wc_is_locked_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -12052,7 +11927,7 @@ XS(_wrap_svn_client_status_t_wc_is_locked_set) {
XS(_wrap_svn_client_status_t_wc_is_locked_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12064,9 +11939,9 @@ XS(_wrap_svn_client_status_t_wc_is_locked_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_wc_is_locked_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_wc_is_locked_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_boolean_t) ((arg1)->wc_is_locked);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -12080,7 +11955,7 @@ XS(_wrap_svn_client_status_t_wc_is_locked_get) {
XS(_wrap_svn_client_status_t_copied_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12094,9 +11969,9 @@ XS(_wrap_svn_client_status_t_copied_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_copied_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_copied_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_status_t_copied_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -12117,7 +11992,7 @@ XS(_wrap_svn_client_status_t_copied_set) {
XS(_wrap_svn_client_status_t_copied_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12129,9 +12004,9 @@ XS(_wrap_svn_client_status_t_copied_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_copied_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_copied_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_boolean_t) ((arg1)->copied);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -12145,7 +12020,7 @@ XS(_wrap_svn_client_status_t_copied_get) {
XS(_wrap_svn_client_status_t_repos_root_url_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12160,9 +12035,9 @@ XS(_wrap_svn_client_status_t_repos_root_url_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_root_url_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_root_url_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_status_t_repos_root_url_set" "', argument " "2"" of type '" "char const *""'");
@@ -12190,7 +12065,7 @@ XS(_wrap_svn_client_status_t_repos_root_url_set) {
XS(_wrap_svn_client_status_t_repos_root_url_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12202,9 +12077,9 @@ XS(_wrap_svn_client_status_t_repos_root_url_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_root_url_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_root_url_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (char *) ((arg1)->repos_root_url);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -12218,7 +12093,7 @@ XS(_wrap_svn_client_status_t_repos_root_url_get) {
XS(_wrap_svn_client_status_t_repos_uuid_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12233,9 +12108,9 @@ XS(_wrap_svn_client_status_t_repos_uuid_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_uuid_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_uuid_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_status_t_repos_uuid_set" "', argument " "2"" of type '" "char const *""'");
@@ -12263,7 +12138,7 @@ XS(_wrap_svn_client_status_t_repos_uuid_set) {
XS(_wrap_svn_client_status_t_repos_uuid_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12275,9 +12150,9 @@ XS(_wrap_svn_client_status_t_repos_uuid_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_uuid_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_uuid_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (char *) ((arg1)->repos_uuid);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -12291,7 +12166,7 @@ XS(_wrap_svn_client_status_t_repos_uuid_get) {
XS(_wrap_svn_client_status_t_repos_relpath_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12306,9 +12181,9 @@ XS(_wrap_svn_client_status_t_repos_relpath_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_relpath_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_relpath_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_status_t_repos_relpath_set" "', argument " "2"" of type '" "char const *""'");
@@ -12336,7 +12211,7 @@ XS(_wrap_svn_client_status_t_repos_relpath_set) {
XS(_wrap_svn_client_status_t_repos_relpath_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12348,9 +12223,9 @@ XS(_wrap_svn_client_status_t_repos_relpath_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_relpath_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_relpath_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (char *) ((arg1)->repos_relpath);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -12364,7 +12239,7 @@ XS(_wrap_svn_client_status_t_repos_relpath_get) {
XS(_wrap_svn_client_status_t_revision_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12378,9 +12253,9 @@ XS(_wrap_svn_client_status_t_revision_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_revision_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_revision_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_status_t_revision_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -12401,7 +12276,7 @@ XS(_wrap_svn_client_status_t_revision_set) {
XS(_wrap_svn_client_status_t_revision_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12413,9 +12288,9 @@ XS(_wrap_svn_client_status_t_revision_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_revision_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_revision_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_revnum_t) ((arg1)->revision);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -12429,7 +12304,7 @@ XS(_wrap_svn_client_status_t_revision_get) {
XS(_wrap_svn_client_status_t_changed_rev_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12443,9 +12318,9 @@ XS(_wrap_svn_client_status_t_changed_rev_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_changed_rev_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_changed_rev_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_status_t_changed_rev_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -12466,7 +12341,7 @@ XS(_wrap_svn_client_status_t_changed_rev_set) {
XS(_wrap_svn_client_status_t_changed_rev_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12478,9 +12353,9 @@ XS(_wrap_svn_client_status_t_changed_rev_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_changed_rev_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_changed_rev_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_revnum_t) ((arg1)->changed_rev);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -12494,7 +12369,7 @@ XS(_wrap_svn_client_status_t_changed_rev_get) {
XS(_wrap_svn_client_status_t_changed_date_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12508,9 +12383,9 @@ XS(_wrap_svn_client_status_t_changed_date_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_changed_date_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_changed_date_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_status_t_changed_date_set" "', argument " "2"" of type '" "apr_time_t""'");
@@ -12531,7 +12406,7 @@ XS(_wrap_svn_client_status_t_changed_date_set) {
XS(_wrap_svn_client_status_t_changed_date_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12543,9 +12418,9 @@ XS(_wrap_svn_client_status_t_changed_date_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_changed_date_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_changed_date_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = ((arg1)->changed_date);
{
char temp[256];
@@ -12564,7 +12439,7 @@ XS(_wrap_svn_client_status_t_changed_date_get) {
XS(_wrap_svn_client_status_t_changed_author_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12579,9 +12454,9 @@ XS(_wrap_svn_client_status_t_changed_author_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_changed_author_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_changed_author_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_status_t_changed_author_set" "', argument " "2"" of type '" "char const *""'");
@@ -12609,7 +12484,7 @@ XS(_wrap_svn_client_status_t_changed_author_set) {
XS(_wrap_svn_client_status_t_changed_author_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12621,9 +12496,9 @@ XS(_wrap_svn_client_status_t_changed_author_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_changed_author_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_changed_author_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (char *) ((arg1)->changed_author);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -12637,7 +12512,7 @@ XS(_wrap_svn_client_status_t_changed_author_get) {
XS(_wrap_svn_client_status_t_switched_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12651,9 +12526,9 @@ XS(_wrap_svn_client_status_t_switched_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_switched_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_switched_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_status_t_switched_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -12674,7 +12549,7 @@ XS(_wrap_svn_client_status_t_switched_set) {
XS(_wrap_svn_client_status_t_switched_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12686,9 +12561,9 @@ XS(_wrap_svn_client_status_t_switched_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_switched_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_switched_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_boolean_t) ((arg1)->switched);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -12702,7 +12577,7 @@ XS(_wrap_svn_client_status_t_switched_get) {
XS(_wrap_svn_client_status_t_file_external_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12716,9 +12591,9 @@ XS(_wrap_svn_client_status_t_file_external_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_file_external_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_file_external_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_status_t_file_external_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -12739,7 +12614,7 @@ XS(_wrap_svn_client_status_t_file_external_set) {
XS(_wrap_svn_client_status_t_file_external_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12751,9 +12626,9 @@ XS(_wrap_svn_client_status_t_file_external_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_file_external_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_file_external_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_boolean_t) ((arg1)->file_external);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -12767,7 +12642,7 @@ XS(_wrap_svn_client_status_t_file_external_get) {
XS(_wrap_svn_client_status_t_lock_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_lock_t *arg2 = (svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12781,9 +12656,9 @@ XS(_wrap_svn_client_status_t_lock_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_lock_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_lock_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_lock_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_status_t_lock_set" "', argument " "2"" of type '" "svn_lock_t const *""'");
@@ -12804,7 +12679,7 @@ XS(_wrap_svn_client_status_t_lock_set) {
XS(_wrap_svn_client_status_t_lock_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12816,9 +12691,9 @@ XS(_wrap_svn_client_status_t_lock_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_lock_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_lock_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_lock_t *) ((arg1)->lock);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_lock_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -12832,7 +12707,7 @@ XS(_wrap_svn_client_status_t_lock_get) {
XS(_wrap_svn_client_status_t_changelist_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12847,9 +12722,9 @@ XS(_wrap_svn_client_status_t_changelist_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_changelist_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_changelist_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_status_t_changelist_set" "', argument " "2"" of type '" "char const *""'");
@@ -12877,7 +12752,7 @@ XS(_wrap_svn_client_status_t_changelist_set) {
XS(_wrap_svn_client_status_t_changelist_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12889,9 +12764,9 @@ XS(_wrap_svn_client_status_t_changelist_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_changelist_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_changelist_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (char *) ((arg1)->changelist);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -12905,7 +12780,7 @@ XS(_wrap_svn_client_status_t_changelist_get) {
XS(_wrap_svn_client_status_t_depth_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_depth_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12919,9 +12794,9 @@ XS(_wrap_svn_client_status_t_depth_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_depth_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_depth_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_status_t_depth_set" "', argument " "2"" of type '" "svn_depth_t""'");
@@ -12942,7 +12817,7 @@ XS(_wrap_svn_client_status_t_depth_set) {
XS(_wrap_svn_client_status_t_depth_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12954,9 +12829,9 @@ XS(_wrap_svn_client_status_t_depth_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_depth_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_depth_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_depth_t) ((arg1)->depth);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -12970,7 +12845,7 @@ XS(_wrap_svn_client_status_t_depth_get) {
XS(_wrap_svn_client_status_t_ood_kind_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12984,9 +12859,9 @@ XS(_wrap_svn_client_status_t_ood_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_ood_kind_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_ood_kind_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_status_t_ood_kind_set" "', argument " "2"" of type '" "svn_node_kind_t""'");
@@ -13007,7 +12882,7 @@ XS(_wrap_svn_client_status_t_ood_kind_set) {
XS(_wrap_svn_client_status_t_ood_kind_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13019,9 +12894,9 @@ XS(_wrap_svn_client_status_t_ood_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_ood_kind_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_ood_kind_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->ood_kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -13035,7 +12910,7 @@ XS(_wrap_svn_client_status_t_ood_kind_get) {
XS(_wrap_svn_client_status_t_repos_node_status_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13049,9 +12924,9 @@ XS(_wrap_svn_client_status_t_repos_node_status_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_node_status_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_node_status_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_status_t_repos_node_status_set" "', argument " "2"" of type '" "enum svn_wc_status_kind""'");
@@ -13072,7 +12947,7 @@ XS(_wrap_svn_client_status_t_repos_node_status_set) {
XS(_wrap_svn_client_status_t_repos_node_status_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13084,9 +12959,9 @@ XS(_wrap_svn_client_status_t_repos_node_status_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_node_status_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_node_status_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->repos_node_status);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -13100,7 +12975,7 @@ XS(_wrap_svn_client_status_t_repos_node_status_get) {
XS(_wrap_svn_client_status_t_repos_text_status_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13114,9 +12989,9 @@ XS(_wrap_svn_client_status_t_repos_text_status_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_text_status_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_text_status_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_status_t_repos_text_status_set" "', argument " "2"" of type '" "enum svn_wc_status_kind""'");
@@ -13137,7 +13012,7 @@ XS(_wrap_svn_client_status_t_repos_text_status_set) {
XS(_wrap_svn_client_status_t_repos_text_status_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13149,9 +13024,9 @@ XS(_wrap_svn_client_status_t_repos_text_status_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_text_status_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_text_status_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->repos_text_status);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -13165,7 +13040,7 @@ XS(_wrap_svn_client_status_t_repos_text_status_get) {
XS(_wrap_svn_client_status_t_repos_prop_status_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13179,9 +13054,9 @@ XS(_wrap_svn_client_status_t_repos_prop_status_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_prop_status_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_prop_status_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_status_t_repos_prop_status_set" "', argument " "2"" of type '" "enum svn_wc_status_kind""'");
@@ -13202,7 +13077,7 @@ XS(_wrap_svn_client_status_t_repos_prop_status_set) {
XS(_wrap_svn_client_status_t_repos_prop_status_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13214,9 +13089,9 @@ XS(_wrap_svn_client_status_t_repos_prop_status_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_prop_status_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_prop_status_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->repos_prop_status);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -13230,7 +13105,7 @@ XS(_wrap_svn_client_status_t_repos_prop_status_get) {
XS(_wrap_svn_client_status_t_repos_lock_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_lock_t *arg2 = (svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13244,9 +13119,9 @@ XS(_wrap_svn_client_status_t_repos_lock_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_lock_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_lock_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_lock_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_status_t_repos_lock_set" "', argument " "2"" of type '" "svn_lock_t const *""'");
@@ -13267,7 +13142,7 @@ XS(_wrap_svn_client_status_t_repos_lock_set) {
XS(_wrap_svn_client_status_t_repos_lock_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13279,9 +13154,9 @@ XS(_wrap_svn_client_status_t_repos_lock_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_lock_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_repos_lock_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_lock_t *) ((arg1)->repos_lock);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_lock_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -13295,7 +13170,7 @@ XS(_wrap_svn_client_status_t_repos_lock_get) {
XS(_wrap_svn_client_status_t_ood_changed_rev_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13309,9 +13184,9 @@ XS(_wrap_svn_client_status_t_ood_changed_rev_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_ood_changed_rev_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_ood_changed_rev_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_status_t_ood_changed_rev_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -13332,7 +13207,7 @@ XS(_wrap_svn_client_status_t_ood_changed_rev_set) {
XS(_wrap_svn_client_status_t_ood_changed_rev_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13344,9 +13219,9 @@ XS(_wrap_svn_client_status_t_ood_changed_rev_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_ood_changed_rev_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_ood_changed_rev_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_revnum_t) ((arg1)->ood_changed_rev);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -13360,7 +13235,7 @@ XS(_wrap_svn_client_status_t_ood_changed_rev_get) {
XS(_wrap_svn_client_status_t_ood_changed_date_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13374,9 +13249,9 @@ XS(_wrap_svn_client_status_t_ood_changed_date_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_ood_changed_date_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_ood_changed_date_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_status_t_ood_changed_date_set" "', argument " "2"" of type '" "apr_time_t""'");
@@ -13397,7 +13272,7 @@ XS(_wrap_svn_client_status_t_ood_changed_date_set) {
XS(_wrap_svn_client_status_t_ood_changed_date_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13409,9 +13284,9 @@ XS(_wrap_svn_client_status_t_ood_changed_date_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_ood_changed_date_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_ood_changed_date_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = ((arg1)->ood_changed_date);
{
char temp[256];
@@ -13430,7 +13305,7 @@ XS(_wrap_svn_client_status_t_ood_changed_date_get) {
XS(_wrap_svn_client_status_t_ood_changed_author_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13445,9 +13320,9 @@ XS(_wrap_svn_client_status_t_ood_changed_author_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_ood_changed_author_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_ood_changed_author_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_status_t_ood_changed_author_set" "', argument " "2"" of type '" "char const *""'");
@@ -13475,7 +13350,7 @@ XS(_wrap_svn_client_status_t_ood_changed_author_set) {
XS(_wrap_svn_client_status_t_ood_changed_author_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13487,9 +13362,9 @@ XS(_wrap_svn_client_status_t_ood_changed_author_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_ood_changed_author_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_ood_changed_author_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (char *) ((arg1)->ood_changed_author);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -13503,7 +13378,7 @@ XS(_wrap_svn_client_status_t_ood_changed_author_get) {
XS(_wrap_svn_client_status_t_backwards_compatibility_baton_set) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *arg2 = (void *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13516,9 +13391,9 @@ XS(_wrap_svn_client_status_t_backwards_compatibility_baton_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_backwards_compatibility_baton_set" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_backwards_compatibility_baton_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg2), 0, SWIG_POINTER_DISOWN);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_status_t_backwards_compatibility_baton_set" "', argument " "2"" of type '" "void const *""'");
@@ -13538,7 +13413,7 @@ XS(_wrap_svn_client_status_t_backwards_compatibility_baton_set) {
XS(_wrap_svn_client_status_t_backwards_compatibility_baton_get) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13550,9 +13425,9 @@ XS(_wrap_svn_client_status_t_backwards_compatibility_baton_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_backwards_compatibility_baton_get" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_backwards_compatibility_baton_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (void *) ((arg1)->backwards_compatibility_baton);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 | 0); argvi++ ;
@@ -13564,17 +13439,163 @@ XS(_wrap_svn_client_status_t_backwards_compatibility_baton_get) {
}
+XS(_wrap_svn_client_status_t_moved_from_abspath_set) {
+ {
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_client_status_t_moved_from_abspath_set(self,moved_from_abspath);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_moved_from_abspath_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
+ }
+ arg1 = (struct svn_client_status_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_status_t_moved_from_abspath_set" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->moved_from_abspath) free((char *)arg1->moved_from_abspath);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->moved_from_abspath = copied;
+ }
+ ST(argvi) = sv_newmortal();
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_client_status_t_moved_from_abspath_get) {
+ {
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ char *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_client_status_t_moved_from_abspath_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_moved_from_abspath_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
+ }
+ arg1 = (struct svn_client_status_t *)(argp1);
+ result = (char *) ((arg1)->moved_from_abspath);
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_client_status_t_moved_to_abspath_set) {
+ {
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_client_status_t_moved_to_abspath_set(self,moved_to_abspath);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_moved_to_abspath_set" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
+ }
+ arg1 = (struct svn_client_status_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_status_t_moved_to_abspath_set" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->moved_to_abspath) free((char *)arg1->moved_to_abspath);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->moved_to_abspath = copied;
+ }
+ ST(argvi) = sv_newmortal();
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_client_status_t_moved_to_abspath_get) {
+ {
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ char *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_client_status_t_moved_to_abspath_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_status_t_moved_to_abspath_get" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
+ }
+ arg1 = (struct svn_client_status_t *)(argp1);
+ result = (char *) ((arg1)->moved_to_abspath);
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_new_svn_client_status_t) {
{
int argvi = 0;
- svn_client_status_t *result = 0 ;
+ struct svn_client_status_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_client_status_t();");
}
{
- result = (svn_client_status_t *)calloc(1, sizeof(svn_client_status_t));
+ result = (struct svn_client_status_t *)calloc(1, sizeof(struct svn_client_status_t));
@@ -13589,7 +13610,7 @@ XS(_wrap_new_svn_client_status_t) {
XS(_wrap_delete_svn_client_status_t) {
{
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13600,9 +13621,9 @@ XS(_wrap_delete_svn_client_status_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_status_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_client_status_t" "', argument " "1"" of type '" "svn_client_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_client_status_t" "', argument " "1"" of type '" "struct svn_client_status_t *""'");
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
{
free((char *) arg1);
@@ -13699,9 +13720,6 @@ XS(_wrap_svn_client_status5) {
int ecode9 = 0 ;
int val10 ;
int ecode10 = 0 ;
- int res11 ;
- char *buf11 = 0 ;
- int alloc11 = 0 ;
int res13 ;
int argvi = 0;
svn_error_t *result = 0 ;
@@ -13725,53 +13743,7 @@ XS(_wrap_svn_client_status5) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(2), TRUE);
}
ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val5);
if (!SWIG_IsOK(ecode5)) {
@@ -13803,11 +13775,10 @@ XS(_wrap_svn_client_status5) {
SWIG_exception_fail(SWIG_ArgError(ecode10), "in method '" "svn_client_status5" "', argument " "10"" of type '" "svn_boolean_t""'");
}
arg10 = (svn_boolean_t)(val10);
- res11 = SWIG_AsCharPtrAndSize(ST(9), &buf11, NULL, &alloc11);
- if (!SWIG_IsOK(res11)) {
- SWIG_exception_fail(SWIG_ArgError(res11), "in method '" "svn_client_status5" "', argument " "11"" of type '" "apr_array_header_t const *""'");
+ {
+ arg11 = SvOK(ST(9)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(9), _global_pool) : NULL;
}
- arg11 = (apr_array_header_t *)(buf11);
{
int res = SWIG_ConvertFunctionPtr(ST(10), (void**)(&arg12), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -13864,7 +13835,7 @@ XS(_wrap_svn_client_status5) {
- if (alloc11 == SWIG_NEWOBJ) free((char*)buf11);
+
@@ -13880,7 +13851,7 @@ XS(_wrap_svn_client_status5) {
- if (alloc11 == SWIG_NEWOBJ) free((char*)buf11);
+
@@ -13911,7 +13882,6 @@ XS(_wrap_svn_client_status4) {
char *buf2 = 0 ;
int alloc2 = 0 ;
svn_opt_revision_t rev3 ;
- int res5 ;
int val6 ;
int ecode6 = 0 ;
int val7 ;
@@ -13922,9 +13892,6 @@ XS(_wrap_svn_client_status4) {
int ecode9 = 0 ;
int val10 ;
int ecode10 = 0 ;
- int res11 ;
- char *buf11 = 0 ;
- int alloc11 = 0 ;
void *argp12 = 0 ;
int res12 = 0 ;
int argvi = 0;
@@ -13935,7 +13902,7 @@ XS(_wrap_svn_client_status4) {
_global_pool = arg13 = svn_swig_pl_make_pool (ST(items-1));
}
arg1 = &temp1;
- if ((items < 11) || (items > 12)) {
+ if ((items < 10) || (items > 11)) {
SWIG_croak("Usage: svn_client_status4(path,revision,status_func,status_baton,depth,get_all,update,no_ignore,ignore_externals,changelists,ctx,pool);");
}
res2 = SWIG_AsCharPtrAndSize(ST(0), &buf2, NULL, &alloc2);
@@ -13944,100 +13911,47 @@ XS(_wrap_svn_client_status4) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(1), TRUE);
}
{
- int res = SWIG_ConvertFunctionPtr(ST(2), (void**)(&arg4), SWIGTYPE_p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_client_status4" "', argument " "4"" of type '" "svn_wc_status_func3_t""'");
- }
- }
- res5 = SWIG_ConvertPtr(ST(3),SWIG_as_voidptrptr(&arg5), 0, 0);
- if (!SWIG_IsOK(res5)) {
- SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_client_status4" "', argument " "5"" of type '" "void *""'");
+ arg4 = svn_swig_pl_status_func3;
+ arg5 = ST(2);
}
- ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val6);
+ ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val6);
if (!SWIG_IsOK(ecode6)) {
SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_client_status4" "', argument " "6"" of type '" "svn_depth_t""'");
}
arg6 = (svn_depth_t)(val6);
- ecode7 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val7);
+ ecode7 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val7);
if (!SWIG_IsOK(ecode7)) {
SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "svn_client_status4" "', argument " "7"" of type '" "svn_boolean_t""'");
}
arg7 = (svn_boolean_t)(val7);
- ecode8 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(6), &val8);
+ ecode8 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val8);
if (!SWIG_IsOK(ecode8)) {
SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "svn_client_status4" "', argument " "8"" of type '" "svn_boolean_t""'");
}
arg8 = (svn_boolean_t)(val8);
- ecode9 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(7), &val9);
+ ecode9 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(6), &val9);
if (!SWIG_IsOK(ecode9)) {
SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "svn_client_status4" "', argument " "9"" of type '" "svn_boolean_t""'");
}
arg9 = (svn_boolean_t)(val9);
- ecode10 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(8), &val10);
+ ecode10 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(7), &val10);
if (!SWIG_IsOK(ecode10)) {
SWIG_exception_fail(SWIG_ArgError(ecode10), "in method '" "svn_client_status4" "', argument " "10"" of type '" "svn_boolean_t""'");
}
arg10 = (svn_boolean_t)(val10);
- res11 = SWIG_AsCharPtrAndSize(ST(9), &buf11, NULL, &alloc11);
- if (!SWIG_IsOK(res11)) {
- SWIG_exception_fail(SWIG_ArgError(res11), "in method '" "svn_client_status4" "', argument " "11"" of type '" "apr_array_header_t const *""'");
+ {
+ arg11 = SvOK(ST(8)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(8), _global_pool) : NULL;
}
- arg11 = (apr_array_header_t *)(buf11);
- res12 = SWIG_ConvertPtr(ST(10), &argp12,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ res12 = SWIG_ConvertPtr(ST(9), &argp12,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res12)) {
SWIG_exception_fail(SWIG_ArgError(res12), "in method '" "svn_client_status4" "', argument " "12"" of type '" "svn_client_ctx_t *""'");
}
arg12 = (svn_client_ctx_t *)(argp12);
- if (items > 11) {
+ if (items > 10) {
}
{
@@ -14083,8 +13997,6 @@ XS(_wrap_svn_client_status4) {
- if (alloc11 == SWIG_NEWOBJ) free((char*)buf11);
-
XSRETURN(argvi);
fail:
@@ -14098,8 +14010,6 @@ XS(_wrap_svn_client_status4) {
- if (alloc11 == SWIG_NEWOBJ) free((char*)buf11);
-
SWIG_croak_null();
}
@@ -14128,7 +14038,6 @@ XS(_wrap_svn_client_status3) {
char *buf2 = 0 ;
int alloc2 = 0 ;
svn_opt_revision_t rev3 ;
- int res5 ;
int val6 ;
int ecode6 = 0 ;
int val7 ;
@@ -14139,9 +14048,6 @@ XS(_wrap_svn_client_status3) {
int ecode9 = 0 ;
int val10 ;
int ecode10 = 0 ;
- int res11 ;
- char *buf11 = 0 ;
- int alloc11 = 0 ;
void *argp12 = 0 ;
int res12 = 0 ;
int argvi = 0;
@@ -14152,7 +14058,7 @@ XS(_wrap_svn_client_status3) {
_global_pool = arg13 = svn_swig_pl_make_pool (ST(items-1));
}
arg1 = &temp1;
- if ((items < 11) || (items > 12)) {
+ if ((items < 10) || (items > 11)) {
SWIG_croak("Usage: svn_client_status3(path,revision,status_func,status_baton,depth,get_all,update,no_ignore,ignore_externals,changelists,ctx,pool);");
}
res2 = SWIG_AsCharPtrAndSize(ST(0), &buf2, NULL, &alloc2);
@@ -14161,100 +14067,47 @@ XS(_wrap_svn_client_status3) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(1), TRUE);
}
{
- int res = SWIG_ConvertFunctionPtr(ST(2), (void**)(&arg4), SWIGTYPE_p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_client_status3" "', argument " "4"" of type '" "svn_wc_status_func2_t""'");
- }
- }
- res5 = SWIG_ConvertPtr(ST(3),SWIG_as_voidptrptr(&arg5), 0, 0);
- if (!SWIG_IsOK(res5)) {
- SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_client_status3" "', argument " "5"" of type '" "void *""'");
+ arg4 = svn_swig_pl_status_func2;
+ arg5 = ST(2);
}
- ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val6);
+ ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val6);
if (!SWIG_IsOK(ecode6)) {
SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_client_status3" "', argument " "6"" of type '" "svn_depth_t""'");
}
arg6 = (svn_depth_t)(val6);
- ecode7 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val7);
+ ecode7 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val7);
if (!SWIG_IsOK(ecode7)) {
SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "svn_client_status3" "', argument " "7"" of type '" "svn_boolean_t""'");
}
arg7 = (svn_boolean_t)(val7);
- ecode8 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(6), &val8);
+ ecode8 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val8);
if (!SWIG_IsOK(ecode8)) {
SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "svn_client_status3" "', argument " "8"" of type '" "svn_boolean_t""'");
}
arg8 = (svn_boolean_t)(val8);
- ecode9 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(7), &val9);
+ ecode9 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(6), &val9);
if (!SWIG_IsOK(ecode9)) {
SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "svn_client_status3" "', argument " "9"" of type '" "svn_boolean_t""'");
}
arg9 = (svn_boolean_t)(val9);
- ecode10 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(8), &val10);
+ ecode10 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(7), &val10);
if (!SWIG_IsOK(ecode10)) {
SWIG_exception_fail(SWIG_ArgError(ecode10), "in method '" "svn_client_status3" "', argument " "10"" of type '" "svn_boolean_t""'");
}
arg10 = (svn_boolean_t)(val10);
- res11 = SWIG_AsCharPtrAndSize(ST(9), &buf11, NULL, &alloc11);
- if (!SWIG_IsOK(res11)) {
- SWIG_exception_fail(SWIG_ArgError(res11), "in method '" "svn_client_status3" "', argument " "11"" of type '" "apr_array_header_t const *""'");
+ {
+ arg11 = SvOK(ST(8)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(8), _global_pool) : NULL;
}
- arg11 = (apr_array_header_t *)(buf11);
- res12 = SWIG_ConvertPtr(ST(10), &argp12,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ res12 = SWIG_ConvertPtr(ST(9), &argp12,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res12)) {
SWIG_exception_fail(SWIG_ArgError(res12), "in method '" "svn_client_status3" "', argument " "12"" of type '" "svn_client_ctx_t *""'");
}
arg12 = (svn_client_ctx_t *)(argp12);
- if (items > 11) {
+ if (items > 10) {
}
{
@@ -14300,8 +14153,6 @@ XS(_wrap_svn_client_status3) {
- if (alloc11 == SWIG_NEWOBJ) free((char*)buf11);
-
XSRETURN(argvi);
fail:
@@ -14315,8 +14166,6 @@ XS(_wrap_svn_client_status3) {
- if (alloc11 == SWIG_NEWOBJ) free((char*)buf11);
-
SWIG_croak_null();
}
@@ -14344,7 +14193,6 @@ XS(_wrap_svn_client_status2) {
char *buf2 = 0 ;
int alloc2 = 0 ;
svn_opt_revision_t rev3 ;
- int res5 ;
int val6 ;
int ecode6 = 0 ;
int val7 ;
@@ -14365,7 +14213,7 @@ XS(_wrap_svn_client_status2) {
_global_pool = arg12 = svn_swig_pl_make_pool (ST(items-1));
}
arg1 = &temp1;
- if ((items < 10) || (items > 11)) {
+ if ((items < 9) || (items > 10)) {
SWIG_croak("Usage: svn_client_status2(path,revision,status_func,status_baton,recurse,get_all,update,no_ignore,ignore_externals,ctx,pool);");
}
res2 = SWIG_AsCharPtrAndSize(ST(0), &buf2, NULL, &alloc2);
@@ -14374,95 +14222,43 @@ XS(_wrap_svn_client_status2) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(1), TRUE);
}
{
- int res = SWIG_ConvertFunctionPtr(ST(2), (void**)(&arg4), SWIGTYPE_p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_client_status2" "', argument " "4"" of type '" "svn_wc_status_func2_t""'");
- }
- }
- res5 = SWIG_ConvertPtr(ST(3),SWIG_as_voidptrptr(&arg5), 0, 0);
- if (!SWIG_IsOK(res5)) {
- SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_client_status2" "', argument " "5"" of type '" "void *""'");
+ arg4 = svn_swig_pl_status_func2;
+ arg5 = ST(2);
}
- ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val6);
+ ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val6);
if (!SWIG_IsOK(ecode6)) {
SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_client_status2" "', argument " "6"" of type '" "svn_boolean_t""'");
}
arg6 = (svn_boolean_t)(val6);
- ecode7 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val7);
+ ecode7 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val7);
if (!SWIG_IsOK(ecode7)) {
SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "svn_client_status2" "', argument " "7"" of type '" "svn_boolean_t""'");
}
arg7 = (svn_boolean_t)(val7);
- ecode8 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(6), &val8);
+ ecode8 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val8);
if (!SWIG_IsOK(ecode8)) {
SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "svn_client_status2" "', argument " "8"" of type '" "svn_boolean_t""'");
}
arg8 = (svn_boolean_t)(val8);
- ecode9 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(7), &val9);
+ ecode9 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(6), &val9);
if (!SWIG_IsOK(ecode9)) {
SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "svn_client_status2" "', argument " "9"" of type '" "svn_boolean_t""'");
}
arg9 = (svn_boolean_t)(val9);
- ecode10 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(8), &val10);
+ ecode10 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(7), &val10);
if (!SWIG_IsOK(ecode10)) {
SWIG_exception_fail(SWIG_ArgError(ecode10), "in method '" "svn_client_status2" "', argument " "10"" of type '" "svn_boolean_t""'");
}
arg10 = (svn_boolean_t)(val10);
- res11 = SWIG_ConvertPtr(ST(9), &argp11,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ res11 = SWIG_ConvertPtr(ST(8), &argp11,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res11)) {
SWIG_exception_fail(SWIG_ArgError(res11), "in method '" "svn_client_status2" "', argument " "11"" of type '" "svn_client_ctx_t *""'");
}
arg11 = (svn_client_ctx_t *)(argp11);
- if (items > 10) {
+ if (items > 9) {
}
{
@@ -14508,8 +14304,6 @@ XS(_wrap_svn_client_status2) {
-
-
XSRETURN(argvi);
fail:
@@ -14522,8 +14316,6 @@ XS(_wrap_svn_client_status2) {
-
-
SWIG_croak_null();
}
}
@@ -14576,53 +14368,7 @@ XS(_wrap_svn_client_status) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(1), TRUE);
}
{
arg4 = svn_swig_pl_status_func;
@@ -14725,8 +14471,6 @@ XS(_wrap_svn_client_log5) {
apr_pool_t *arg12 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool ;
svn_opt_revision_t rev2 ;
- void *argp3 = 0 ;
- int res3 = 0 ;
int val4 ;
int ecode4 = 0 ;
int val5 ;
@@ -14735,7 +14479,6 @@ XS(_wrap_svn_client_log5) {
int ecode6 = 0 ;
int val7 ;
int ecode7 = 0 ;
- int res10 ;
void *argp11 = 0 ;
int res11 = 0 ;
int argvi = 0;
@@ -14745,7 +14488,7 @@ XS(_wrap_svn_client_log5) {
{
_global_pool = arg12 = svn_swig_pl_make_pool (ST(items-1));
}
- if ((items < 11) || (items > 12)) {
+ if ((items < 10) || (items > 11)) {
SWIG_croak("Usage: svn_client_log5(targets,peg_revision,revision_ranges,limit,discover_changed_paths,strict_node_history,include_merged_revisions,revprops,receiver,receiver_baton,ctx,pool);");
}
{
@@ -14753,59 +14496,11 @@ XS(_wrap_svn_client_log5) {
_global_pool);
}
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- res3 = SWIG_ConvertPtr(ST(2), &argp3,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
- if (!SWIG_IsOK(res3)) {
- SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_client_log5" "', argument " "3"" of type '" "apr_array_header_t const *""'");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
+ }
+ {
+ arg3 = svn_swig_pl_array_to_apr_array_revision_range(ST(2), _global_pool);
}
- arg3 = (apr_array_header_t *)(argp3);
ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val4);
if (!SWIG_IsOK(ecode4)) {
SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_client_log5" "', argument " "4"" of type '" "int""'");
@@ -14827,25 +14522,19 @@ XS(_wrap_svn_client_log5) {
}
arg7 = (svn_boolean_t)(val7);
{
- arg8 = (apr_array_header_t *) svn_swig_pl_strings_to_array(ST(7),
- _global_pool);
+ arg8 = SvOK(ST(7)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(7), _global_pool) : NULL;
}
{
- int res = SWIG_ConvertFunctionPtr(ST(8), (void**)(&arg9), SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_client_log5" "', argument " "9"" of type '" "svn_log_entry_receiver_t""'");
- }
- }
- res10 = SWIG_ConvertPtr(ST(9),SWIG_as_voidptrptr(&arg10), 0, 0);
- if (!SWIG_IsOK(res10)) {
- SWIG_exception_fail(SWIG_ArgError(res10), "in method '" "svn_client_log5" "', argument " "10"" of type '" "void *""'");
+ arg9 = svn_swig_pl_thunk_log_entry_receiver;
+ arg10 = ST(8);
}
- res11 = SWIG_ConvertPtr(ST(10), &argp11,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ res11 = SWIG_ConvertPtr(ST(9), &argp11,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res11)) {
SWIG_exception_fail(SWIG_ArgError(res11), "in method '" "svn_client_log5" "', argument " "11"" of type '" "svn_client_ctx_t *""'");
}
arg11 = (svn_client_ctx_t *)(argp11);
- if (items > 11) {
+ if (items > 10) {
}
{
@@ -14885,8 +14574,6 @@ XS(_wrap_svn_client_log5) {
-
-
XSRETURN(argvi);
fail:
@@ -14899,8 +14586,6 @@ XS(_wrap_svn_client_log5) {
-
-
SWIG_croak_null();
}
}
@@ -14933,7 +14618,6 @@ XS(_wrap_svn_client_log4) {
int ecode7 = 0 ;
int val8 ;
int ecode8 = 0 ;
- int res11 ;
void *argp12 = 0 ;
int res12 = 0 ;
int argvi = 0;
@@ -14943,7 +14627,7 @@ XS(_wrap_svn_client_log4) {
{
_global_pool = arg13 = svn_swig_pl_make_pool (ST(items-1));
}
- if ((items < 12) || (items > 13)) {
+ if ((items < 11) || (items > 12)) {
SWIG_croak("Usage: svn_client_log4(targets,peg_revision,start,end,limit,discover_changed_paths,strict_node_history,include_merged_revisions,revprops,receiver,receiver_baton,ctx,pool);");
}
{
@@ -14951,151 +14635,13 @@ XS(_wrap_svn_client_log4) {
_global_pool);
}
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg4 = &rev4;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
+ }
+ {
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
+ }
+ {
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
}
ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val5);
if (!SWIG_IsOK(ecode5)) {
@@ -15118,25 +14664,19 @@ XS(_wrap_svn_client_log4) {
}
arg8 = (svn_boolean_t)(val8);
{
- arg9 = (apr_array_header_t *) svn_swig_pl_strings_to_array(ST(8),
- _global_pool);
+ arg9 = SvOK(ST(8)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(8), _global_pool) : NULL;
}
{
- int res = SWIG_ConvertFunctionPtr(ST(9), (void**)(&arg10), SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_client_log4" "', argument " "10"" of type '" "svn_log_entry_receiver_t""'");
- }
- }
- res11 = SWIG_ConvertPtr(ST(10),SWIG_as_voidptrptr(&arg11), 0, 0);
- if (!SWIG_IsOK(res11)) {
- SWIG_exception_fail(SWIG_ArgError(res11), "in method '" "svn_client_log4" "', argument " "11"" of type '" "void *""'");
+ arg10 = svn_swig_pl_thunk_log_entry_receiver;
+ arg11 = ST(9);
}
- res12 = SWIG_ConvertPtr(ST(11), &argp12,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ res12 = SWIG_ConvertPtr(ST(10), &argp12,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res12)) {
SWIG_exception_fail(SWIG_ArgError(res12), "in method '" "svn_client_log4" "', argument " "12"" of type '" "svn_client_ctx_t *""'");
}
arg12 = (svn_client_ctx_t *)(argp12);
- if (items > 12) {
+ if (items > 11) {
}
{
@@ -15177,8 +14717,6 @@ XS(_wrap_svn_client_log4) {
-
-
XSRETURN(argvi);
fail:
@@ -15192,8 +14730,6 @@ XS(_wrap_svn_client_log4) {
-
-
SWIG_croak_null();
}
}
@@ -15239,151 +14775,13 @@ XS(_wrap_svn_client_log3) {
_global_pool);
}
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg4 = &rev4;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
+ }
+ {
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
+ }
+ {
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
}
ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val5);
if (!SWIG_IsOK(ecode5)) {
@@ -15402,7 +14800,7 @@ XS(_wrap_svn_client_log3) {
arg7 = (svn_boolean_t)(val7);
{
arg8 = svn_swig_pl_thunk_log_receiver;
- arg9 = (void *)ST(7);
+ arg9 = ST(7);
}
res10 = SWIG_ConvertPtr(ST(8), &argp10,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res10)) {
@@ -15502,102 +14900,10 @@ XS(_wrap_svn_client_log2) {
_global_pool);
}
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
+ }
+ {
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
}
ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val4);
if (!SWIG_IsOK(ecode4)) {
@@ -15616,7 +14922,7 @@ XS(_wrap_svn_client_log2) {
arg6 = (svn_boolean_t)(val6);
{
arg7 = svn_swig_pl_thunk_log_receiver;
- arg8 = (void *)ST(6);
+ arg8 = ST(6);
}
res9 = SWIG_ConvertPtr(ST(7), &argp9,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res9)) {
@@ -15706,102 +15012,10 @@ XS(_wrap_svn_client_log) {
_global_pool);
}
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
+ }
+ {
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
}
ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val4);
if (!SWIG_IsOK(ecode4)) {
@@ -15815,7 +15029,7 @@ XS(_wrap_svn_client_log) {
arg5 = (svn_boolean_t)(val5);
{
arg6 = svn_swig_pl_thunk_log_receiver;
- arg7 = (void *)ST(5);
+ arg7 = ST(5);
}
res8 = SWIG_ConvertPtr(ST(6), &argp8,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res8)) {
@@ -15913,151 +15127,13 @@ XS(_wrap_svn_client_blame5) {
}
arg1 = (char *)(buf1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg4 = &rev4;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
+ }
+ {
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
+ }
+ {
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
}
res5 = SWIG_ConvertPtr(ST(4), &argp5,SWIGTYPE_p_svn_diff_file_options_t, 0 | 0 );
if (!SWIG_IsOK(res5)) {
@@ -16193,151 +15269,13 @@ XS(_wrap_svn_client_blame4) {
}
arg1 = (char *)(buf1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg4 = &rev4;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
+ }
+ {
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
+ }
+ {
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
}
res5 = SWIG_ConvertPtr(ST(4), &argp5,SWIGTYPE_p_svn_diff_file_options_t, 0 | 0 );
if (!SWIG_IsOK(res5)) {
@@ -16469,151 +15407,13 @@ XS(_wrap_svn_client_blame3) {
}
arg1 = (char *)(buf1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg4 = &rev4;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
+ }
+ {
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
+ }
+ {
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
}
res5 = SWIG_ConvertPtr(ST(4), &argp5,SWIGTYPE_p_svn_diff_file_options_t, 0 | 0 );
if (!SWIG_IsOK(res5)) {
@@ -16722,151 +15522,13 @@ XS(_wrap_svn_client_blame2) {
}
arg1 = (char *)(buf1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg4 = &rev4;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
+ }
+ {
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
+ }
+ {
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
}
{
arg5 = svn_swig_pl_blame_func;
@@ -16959,102 +15621,10 @@ XS(_wrap_svn_client_blame) {
}
arg1 = (char *)(buf1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
+ }
+ {
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
}
{
arg4 = svn_swig_pl_blame_func;
@@ -17107,6 +15677,238 @@ XS(_wrap_svn_client_blame) {
}
+XS(_wrap_svn_client_diff6) {
+ {
+ apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_opt_revision_t *arg3 = (svn_opt_revision_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ svn_opt_revision_t *arg5 = (svn_opt_revision_t *) 0 ;
+ char *arg6 = (char *) 0 ;
+ svn_depth_t arg7 ;
+ svn_boolean_t arg8 ;
+ svn_boolean_t arg9 ;
+ svn_boolean_t arg10 ;
+ svn_boolean_t arg11 ;
+ svn_boolean_t arg12 ;
+ svn_boolean_t arg13 ;
+ svn_boolean_t arg14 ;
+ svn_boolean_t arg15 ;
+ char *arg16 = (char *) 0 ;
+ svn_stream_t *arg17 = (svn_stream_t *) 0 ;
+ svn_stream_t *arg18 = (svn_stream_t *) 0 ;
+ apr_array_header_t *arg19 = (apr_array_header_t *) 0 ;
+ svn_client_ctx_t *arg20 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg21 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ svn_opt_revision_t rev3 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ svn_opt_revision_t rev5 ;
+ int res6 ;
+ char *buf6 = 0 ;
+ int alloc6 = 0 ;
+ int val7 ;
+ int ecode7 = 0 ;
+ int val8 ;
+ int ecode8 = 0 ;
+ int val9 ;
+ int ecode9 = 0 ;
+ int val10 ;
+ int ecode10 = 0 ;
+ int val11 ;
+ int ecode11 = 0 ;
+ int val12 ;
+ int ecode12 = 0 ;
+ int val13 ;
+ int ecode13 = 0 ;
+ int val14 ;
+ int ecode14 = 0 ;
+ int val15 ;
+ int ecode15 = 0 ;
+ int res16 ;
+ char *buf16 = 0 ;
+ int alloc16 = 0 ;
+ void *argp20 = 0 ;
+ int res20 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg21 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 20) || (items > 21)) {
+ SWIG_croak("Usage: svn_client_diff6(diff_options,path_or_url1,revision1,path_or_url2,revision2,relative_to_dir,depth,ignore_ancestry,no_diff_added,no_diff_deleted,show_copies_as_adds,ignore_content_type,ignore_properties,properties_only,use_git_diff_format,header_encoding,outstream,errstream,changelists,ctx,pool);");
+ }
+ {
+ arg1 = (apr_array_header_t *) svn_swig_pl_strings_to_array(ST(0),
+ _global_pool);
+ }
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_diff6" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ {
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
+ }
+ res4 = SWIG_AsCharPtrAndSize(ST(3), &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_client_diff6" "', argument " "4"" of type '" "char const *""'");
+ }
+ arg4 = (char *)(buf4);
+ {
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(4), TRUE);
+ }
+ res6 = SWIG_AsCharPtrAndSize(ST(5), &buf6, NULL, &alloc6);
+ if (!SWIG_IsOK(res6)) {
+ SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_client_diff6" "', argument " "6"" of type '" "char const *""'");
+ }
+ arg6 = (char *)(buf6);
+ ecode7 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(6), &val7);
+ if (!SWIG_IsOK(ecode7)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "svn_client_diff6" "', argument " "7"" of type '" "svn_depth_t""'");
+ }
+ arg7 = (svn_depth_t)(val7);
+ ecode8 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(7), &val8);
+ if (!SWIG_IsOK(ecode8)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "svn_client_diff6" "', argument " "8"" of type '" "svn_boolean_t""'");
+ }
+ arg8 = (svn_boolean_t)(val8);
+ ecode9 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(8), &val9);
+ if (!SWIG_IsOK(ecode9)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "svn_client_diff6" "', argument " "9"" of type '" "svn_boolean_t""'");
+ }
+ arg9 = (svn_boolean_t)(val9);
+ ecode10 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(9), &val10);
+ if (!SWIG_IsOK(ecode10)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode10), "in method '" "svn_client_diff6" "', argument " "10"" of type '" "svn_boolean_t""'");
+ }
+ arg10 = (svn_boolean_t)(val10);
+ ecode11 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(10), &val11);
+ if (!SWIG_IsOK(ecode11)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode11), "in method '" "svn_client_diff6" "', argument " "11"" of type '" "svn_boolean_t""'");
+ }
+ arg11 = (svn_boolean_t)(val11);
+ ecode12 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(11), &val12);
+ if (!SWIG_IsOK(ecode12)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode12), "in method '" "svn_client_diff6" "', argument " "12"" of type '" "svn_boolean_t""'");
+ }
+ arg12 = (svn_boolean_t)(val12);
+ ecode13 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(12), &val13);
+ if (!SWIG_IsOK(ecode13)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode13), "in method '" "svn_client_diff6" "', argument " "13"" of type '" "svn_boolean_t""'");
+ }
+ arg13 = (svn_boolean_t)(val13);
+ ecode14 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(13), &val14);
+ if (!SWIG_IsOK(ecode14)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode14), "in method '" "svn_client_diff6" "', argument " "14"" of type '" "svn_boolean_t""'");
+ }
+ arg14 = (svn_boolean_t)(val14);
+ ecode15 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(14), &val15);
+ if (!SWIG_IsOK(ecode15)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode15), "in method '" "svn_client_diff6" "', argument " "15"" of type '" "svn_boolean_t""'");
+ }
+ arg15 = (svn_boolean_t)(val15);
+ res16 = SWIG_AsCharPtrAndSize(ST(15), &buf16, NULL, &alloc16);
+ if (!SWIG_IsOK(res16)) {
+ SWIG_exception_fail(SWIG_ArgError(res16), "in method '" "svn_client_diff6" "', argument " "16"" of type '" "char const *""'");
+ }
+ arg16 = (char *)(buf16);
+ {
+ svn_swig_pl_make_stream (&arg17, ST(16));
+ }
+ {
+ svn_swig_pl_make_stream (&arg18, ST(17));
+ }
+ {
+ arg19 = SvOK(ST(18)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(18), _global_pool) : NULL;
+ }
+ res20 = SWIG_ConvertPtr(ST(19), &argp20,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res20)) {
+ SWIG_exception_fail(SWIG_ArgError(res20), "in method '" "svn_client_diff6" "', argument " "20"" of type '" "svn_client_ctx_t *""'");
+ }
+ arg20 = (svn_client_ctx_t *)(argp20);
+ if (items > 20) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_diff6((apr_array_header_t const *)arg1,(char const *)arg2,(struct svn_opt_revision_t const *)arg3,(char const *)arg4,(struct svn_opt_revision_t const *)arg5,(char const *)arg6,arg7,arg8,arg9,arg10,arg11,arg12,arg13,arg14,arg15,(char const *)arg16,arg17,arg18,(apr_array_header_t const *)arg19,arg20,arg21);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+
+
+
+
+
+
+
+
+
+ if (alloc16 == SWIG_NEWOBJ) free((char*)buf16);
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+
+
+
+
+
+
+
+
+
+ if (alloc16 == SWIG_NEWOBJ) free((char*)buf16);
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_client_diff5) {
{
apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
@@ -17154,9 +15956,6 @@ XS(_wrap_svn_client_diff5) {
int res13 ;
char *buf13 = 0 ;
int alloc13 = 0 ;
- int res16 ;
- char *buf16 = 0 ;
- int alloc16 = 0 ;
void *argp17 = 0 ;
int res17 = 0 ;
int argvi = 0;
@@ -17179,53 +15978,7 @@ XS(_wrap_svn_client_diff5) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
}
res4 = SWIG_AsCharPtrAndSize(ST(3), &buf4, NULL, &alloc4);
if (!SWIG_IsOK(res4)) {
@@ -17233,53 +15986,7 @@ XS(_wrap_svn_client_diff5) {
}
arg4 = (char *)(buf4);
{
- arg5 = &rev5;
- if (ST(4) == NULL || ST(4) == &PL_sv_undef || !SvOK(ST(4))) {
- rev5.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(4)) && sv_derived_from(ST(4), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(4), (void **)&arg5, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(4))) {
- rev5.kind = svn_opt_revision_number;
- rev5.value.number = SvIV(ST(4));
- }
- else if (SvPOK(ST(4))) {
- char *input = SvPV_nolen(ST(4));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev5.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev5.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev5.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev5.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev5.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev5.kind = svn_opt_revision_date;
- rev5.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(4), TRUE);
}
res6 = SWIG_AsCharPtrAndSize(ST(5), &buf6, NULL, &alloc6);
if (!SWIG_IsOK(res6)) {
@@ -17327,11 +16034,10 @@ XS(_wrap_svn_client_diff5) {
{
arg15 = svn_swig_pl_make_file(ST(14), _global_pool);
}
- res16 = SWIG_AsCharPtrAndSize(ST(15), &buf16, NULL, &alloc16);
- if (!SWIG_IsOK(res16)) {
- SWIG_exception_fail(SWIG_ArgError(res16), "in method '" "svn_client_diff5" "', argument " "16"" of type '" "apr_array_header_t const *""'");
+ {
+ arg16 = SvOK(ST(15)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(15), _global_pool) : NULL;
}
- arg16 = (apr_array_header_t *)(buf16);
res17 = SWIG_ConvertPtr(ST(16), &argp17,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res17)) {
SWIG_exception_fail(SWIG_ArgError(res17), "in method '" "svn_client_diff5" "', argument " "17"" of type '" "svn_client_ctx_t *""'");
@@ -17377,7 +16083,7 @@ XS(_wrap_svn_client_diff5) {
if (alloc13 == SWIG_NEWOBJ) free((char*)buf13);
- if (alloc16 == SWIG_NEWOBJ) free((char*)buf16);
+
XSRETURN(argvi);
@@ -17397,7 +16103,7 @@ XS(_wrap_svn_client_diff5) {
if (alloc13 == SWIG_NEWOBJ) free((char*)buf13);
- if (alloc16 == SWIG_NEWOBJ) free((char*)buf16);
+
SWIG_croak_null();
@@ -17446,9 +16152,6 @@ XS(_wrap_svn_client_diff4) {
int res11 ;
char *buf11 = 0 ;
int alloc11 = 0 ;
- int res14 ;
- char *buf14 = 0 ;
- int alloc14 = 0 ;
void *argp15 = 0 ;
int res15 = 0 ;
int argvi = 0;
@@ -17471,53 +16174,7 @@ XS(_wrap_svn_client_diff4) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
}
res4 = SWIG_AsCharPtrAndSize(ST(3), &buf4, NULL, &alloc4);
if (!SWIG_IsOK(res4)) {
@@ -17525,53 +16182,7 @@ XS(_wrap_svn_client_diff4) {
}
arg4 = (char *)(buf4);
{
- arg5 = &rev5;
- if (ST(4) == NULL || ST(4) == &PL_sv_undef || !SvOK(ST(4))) {
- rev5.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(4)) && sv_derived_from(ST(4), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(4), (void **)&arg5, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(4))) {
- rev5.kind = svn_opt_revision_number;
- rev5.value.number = SvIV(ST(4));
- }
- else if (SvPOK(ST(4))) {
- char *input = SvPV_nolen(ST(4));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev5.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev5.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev5.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev5.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev5.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev5.kind = svn_opt_revision_date;
- rev5.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(4), TRUE);
}
res6 = SWIG_AsCharPtrAndSize(ST(5), &buf6, NULL, &alloc6);
if (!SWIG_IsOK(res6)) {
@@ -17609,11 +16220,10 @@ XS(_wrap_svn_client_diff4) {
{
arg13 = svn_swig_pl_make_file(ST(12), _global_pool);
}
- res14 = SWIG_AsCharPtrAndSize(ST(13), &buf14, NULL, &alloc14);
- if (!SWIG_IsOK(res14)) {
- SWIG_exception_fail(SWIG_ArgError(res14), "in method '" "svn_client_diff4" "', argument " "14"" of type '" "apr_array_header_t const *""'");
+ {
+ arg14 = SvOK(ST(13)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(13), _global_pool) : NULL;
}
- arg14 = (apr_array_header_t *)(buf14);
res15 = SWIG_ConvertPtr(ST(14), &argp15,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res15)) {
SWIG_exception_fail(SWIG_ArgError(res15), "in method '" "svn_client_diff4" "', argument " "15"" of type '" "svn_client_ctx_t *""'");
@@ -17657,7 +16267,7 @@ XS(_wrap_svn_client_diff4) {
if (alloc11 == SWIG_NEWOBJ) free((char*)buf11);
- if (alloc14 == SWIG_NEWOBJ) free((char*)buf14);
+
XSRETURN(argvi);
@@ -17675,7 +16285,7 @@ XS(_wrap_svn_client_diff4) {
if (alloc11 == SWIG_NEWOBJ) free((char*)buf11);
- if (alloc14 == SWIG_NEWOBJ) free((char*)buf14);
+
SWIG_croak_null();
@@ -17741,53 +16351,7 @@ XS(_wrap_svn_client_diff3) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
}
res4 = SWIG_AsCharPtrAndSize(ST(3), &buf4, NULL, &alloc4);
if (!SWIG_IsOK(res4)) {
@@ -17795,53 +16359,7 @@ XS(_wrap_svn_client_diff3) {
}
arg4 = (char *)(buf4);
{
- arg5 = &rev5;
- if (ST(4) == NULL || ST(4) == &PL_sv_undef || !SvOK(ST(4))) {
- rev5.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(4)) && sv_derived_from(ST(4), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(4), (void **)&arg5, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(4))) {
- rev5.kind = svn_opt_revision_number;
- rev5.value.number = SvIV(ST(4));
- }
- else if (SvPOK(ST(4))) {
- char *input = SvPV_nolen(ST(4));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev5.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev5.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev5.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev5.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev5.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev5.kind = svn_opt_revision_date;
- rev5.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(4), TRUE);
}
ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val6);
if (!SWIG_IsOK(ecode6)) {
@@ -17993,53 +16511,7 @@ XS(_wrap_svn_client_diff2) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
}
res4 = SWIG_AsCharPtrAndSize(ST(3), &buf4, NULL, &alloc4);
if (!SWIG_IsOK(res4)) {
@@ -18047,53 +16519,7 @@ XS(_wrap_svn_client_diff2) {
}
arg4 = (char *)(buf4);
{
- arg5 = &rev5;
- if (ST(4) == NULL || ST(4) == &PL_sv_undef || !SvOK(ST(4))) {
- rev5.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(4)) && sv_derived_from(ST(4), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(4), (void **)&arg5, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(4))) {
- rev5.kind = svn_opt_revision_number;
- rev5.value.number = SvIV(ST(4));
- }
- else if (SvPOK(ST(4))) {
- char *input = SvPV_nolen(ST(4));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev5.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev5.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev5.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev5.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev5.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev5.kind = svn_opt_revision_date;
- rev5.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(4), TRUE);
}
ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val6);
if (!SWIG_IsOK(ecode6)) {
@@ -18235,53 +16661,7 @@ XS(_wrap_svn_client_diff) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
}
res4 = SWIG_AsCharPtrAndSize(ST(3), &buf4, NULL, &alloc4);
if (!SWIG_IsOK(res4)) {
@@ -18289,53 +16669,7 @@ XS(_wrap_svn_client_diff) {
}
arg4 = (char *)(buf4);
{
- arg5 = &rev5;
- if (ST(4) == NULL || ST(4) == &PL_sv_undef || !SvOK(ST(4))) {
- rev5.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(4)) && sv_derived_from(ST(4), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(4), (void **)&arg5, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(4))) {
- rev5.kind = svn_opt_revision_number;
- rev5.value.number = SvIV(ST(4));
- }
- else if (SvPOK(ST(4))) {
- char *input = SvPV_nolen(ST(4));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev5.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev5.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev5.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev5.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev5.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev5.kind = svn_opt_revision_date;
- rev5.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(4), TRUE);
}
ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val6);
if (!SWIG_IsOK(ecode6)) {
@@ -18419,6 +16753,239 @@ XS(_wrap_svn_client_diff) {
}
+XS(_wrap_svn_client_diff_peg6) {
+ {
+ apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_opt_revision_t *arg3 = (svn_opt_revision_t *) 0 ;
+ svn_opt_revision_t *arg4 = (svn_opt_revision_t *) 0 ;
+ svn_opt_revision_t *arg5 = (svn_opt_revision_t *) 0 ;
+ char *arg6 = (char *) 0 ;
+ svn_depth_t arg7 ;
+ svn_boolean_t arg8 ;
+ svn_boolean_t arg9 ;
+ svn_boolean_t arg10 ;
+ svn_boolean_t arg11 ;
+ svn_boolean_t arg12 ;
+ svn_boolean_t arg13 ;
+ svn_boolean_t arg14 ;
+ svn_boolean_t arg15 ;
+ char *arg16 = (char *) 0 ;
+ svn_stream_t *arg17 = (svn_stream_t *) 0 ;
+ svn_stream_t *arg18 = (svn_stream_t *) 0 ;
+ apr_array_header_t *arg19 = (apr_array_header_t *) 0 ;
+ svn_client_ctx_t *arg20 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg21 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ svn_opt_revision_t rev3 ;
+ svn_opt_revision_t rev4 ;
+ svn_opt_revision_t rev5 ;
+ int res6 ;
+ char *buf6 = 0 ;
+ int alloc6 = 0 ;
+ int val7 ;
+ int ecode7 = 0 ;
+ int val8 ;
+ int ecode8 = 0 ;
+ int val9 ;
+ int ecode9 = 0 ;
+ int val10 ;
+ int ecode10 = 0 ;
+ int val11 ;
+ int ecode11 = 0 ;
+ int val12 ;
+ int ecode12 = 0 ;
+ int val13 ;
+ int ecode13 = 0 ;
+ int val14 ;
+ int ecode14 = 0 ;
+ int val15 ;
+ int ecode15 = 0 ;
+ int res16 ;
+ char *buf16 = 0 ;
+ int alloc16 = 0 ;
+ void *argp20 = 0 ;
+ int res20 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg21 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 20) || (items > 21)) {
+ SWIG_croak("Usage: svn_client_diff_peg6(diff_options,path_or_url,peg_revision,start_revision,end_revision,relative_to_dir,depth,ignore_ancestry,no_diff_added,no_diff_deleted,show_copies_as_adds,ignore_content_type,ignore_properties,properties_only,use_git_diff_format,header_encoding,outstream,errstream,changelists,ctx,pool);");
+ }
+ {
+ arg1 = (apr_array_header_t *) svn_swig_pl_strings_to_array(ST(0),
+ _global_pool);
+ }
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_diff_peg6" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ {
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
+ }
+ {
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
+ }
+ {
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(4), TRUE);
+ }
+ res6 = SWIG_AsCharPtrAndSize(ST(5), &buf6, NULL, &alloc6);
+ if (!SWIG_IsOK(res6)) {
+ SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_client_diff_peg6" "', argument " "6"" of type '" "char const *""'");
+ }
+ arg6 = (char *)(buf6);
+ ecode7 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(6), &val7);
+ if (!SWIG_IsOK(ecode7)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "svn_client_diff_peg6" "', argument " "7"" of type '" "svn_depth_t""'");
+ }
+ arg7 = (svn_depth_t)(val7);
+ ecode8 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(7), &val8);
+ if (!SWIG_IsOK(ecode8)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "svn_client_diff_peg6" "', argument " "8"" of type '" "svn_boolean_t""'");
+ }
+ arg8 = (svn_boolean_t)(val8);
+ ecode9 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(8), &val9);
+ if (!SWIG_IsOK(ecode9)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "svn_client_diff_peg6" "', argument " "9"" of type '" "svn_boolean_t""'");
+ }
+ arg9 = (svn_boolean_t)(val9);
+ ecode10 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(9), &val10);
+ if (!SWIG_IsOK(ecode10)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode10), "in method '" "svn_client_diff_peg6" "', argument " "10"" of type '" "svn_boolean_t""'");
+ }
+ arg10 = (svn_boolean_t)(val10);
+ ecode11 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(10), &val11);
+ if (!SWIG_IsOK(ecode11)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode11), "in method '" "svn_client_diff_peg6" "', argument " "11"" of type '" "svn_boolean_t""'");
+ }
+ arg11 = (svn_boolean_t)(val11);
+ ecode12 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(11), &val12);
+ if (!SWIG_IsOK(ecode12)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode12), "in method '" "svn_client_diff_peg6" "', argument " "12"" of type '" "svn_boolean_t""'");
+ }
+ arg12 = (svn_boolean_t)(val12);
+ ecode13 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(12), &val13);
+ if (!SWIG_IsOK(ecode13)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode13), "in method '" "svn_client_diff_peg6" "', argument " "13"" of type '" "svn_boolean_t""'");
+ }
+ arg13 = (svn_boolean_t)(val13);
+ ecode14 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(13), &val14);
+ if (!SWIG_IsOK(ecode14)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode14), "in method '" "svn_client_diff_peg6" "', argument " "14"" of type '" "svn_boolean_t""'");
+ }
+ arg14 = (svn_boolean_t)(val14);
+ ecode15 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(14), &val15);
+ if (!SWIG_IsOK(ecode15)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode15), "in method '" "svn_client_diff_peg6" "', argument " "15"" of type '" "svn_boolean_t""'");
+ }
+ arg15 = (svn_boolean_t)(val15);
+ res16 = SWIG_AsCharPtrAndSize(ST(15), &buf16, NULL, &alloc16);
+ if (!SWIG_IsOK(res16)) {
+ SWIG_exception_fail(SWIG_ArgError(res16), "in method '" "svn_client_diff_peg6" "', argument " "16"" of type '" "char const *""'");
+ }
+ arg16 = (char *)(buf16);
+ {
+ svn_swig_pl_make_stream (&arg17, ST(16));
+ }
+ {
+ svn_swig_pl_make_stream (&arg18, ST(17));
+ }
+ {
+ arg19 = SvOK(ST(18)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(18), _global_pool) : NULL;
+ }
+ res20 = SWIG_ConvertPtr(ST(19), &argp20,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res20)) {
+ SWIG_exception_fail(SWIG_ArgError(res20), "in method '" "svn_client_diff_peg6" "', argument " "20"" of type '" "svn_client_ctx_t *""'");
+ }
+ arg20 = (svn_client_ctx_t *)(argp20);
+ if (items > 20) {
+
+ }
+ {
+ if (!arg3) {
+ SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
+ }
+ }
+ {
+ result = (svn_error_t *)svn_client_diff_peg6((apr_array_header_t const *)arg1,(char const *)arg2,(struct svn_opt_revision_t const *)arg3,(struct svn_opt_revision_t const *)arg4,(struct svn_opt_revision_t const *)arg5,(char const *)arg6,arg7,arg8,arg9,arg10,arg11,arg12,arg13,arg14,arg15,(char const *)arg16,arg17,arg18,(apr_array_header_t const *)arg19,arg20,arg21);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+
+
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+
+
+
+
+
+
+
+
+
+ if (alloc16 == SWIG_NEWOBJ) free((char*)buf16);
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+
+
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+
+
+
+
+
+
+
+
+
+ if (alloc16 == SWIG_NEWOBJ) free((char*)buf16);
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_client_diff_peg5) {
{
apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
@@ -18464,9 +17031,6 @@ XS(_wrap_svn_client_diff_peg5) {
int res13 ;
char *buf13 = 0 ;
int alloc13 = 0 ;
- int res16 ;
- char *buf16 = 0 ;
- int alloc16 = 0 ;
void *argp17 = 0 ;
int res17 = 0 ;
int argvi = 0;
@@ -18489,151 +17053,13 @@ XS(_wrap_svn_client_diff_peg5) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg4 = &rev4;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg5 = &rev5;
- if (ST(4) == NULL || ST(4) == &PL_sv_undef || !SvOK(ST(4))) {
- rev5.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(4)) && sv_derived_from(ST(4), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(4), (void **)&arg5, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(4))) {
- rev5.kind = svn_opt_revision_number;
- rev5.value.number = SvIV(ST(4));
- }
- else if (SvPOK(ST(4))) {
- char *input = SvPV_nolen(ST(4));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev5.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev5.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev5.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev5.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev5.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev5.kind = svn_opt_revision_date;
- rev5.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
+ }
+ {
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
+ }
+ {
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(4), TRUE);
}
res6 = SWIG_AsCharPtrAndSize(ST(5), &buf6, NULL, &alloc6);
if (!SWIG_IsOK(res6)) {
@@ -18681,11 +17107,10 @@ XS(_wrap_svn_client_diff_peg5) {
{
arg15 = svn_swig_pl_make_file(ST(14), _global_pool);
}
- res16 = SWIG_AsCharPtrAndSize(ST(15), &buf16, NULL, &alloc16);
- if (!SWIG_IsOK(res16)) {
- SWIG_exception_fail(SWIG_ArgError(res16), "in method '" "svn_client_diff_peg5" "', argument " "16"" of type '" "apr_array_header_t const *""'");
+ {
+ arg16 = SvOK(ST(15)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(15), _global_pool) : NULL;
}
- arg16 = (apr_array_header_t *)(buf16);
res17 = SWIG_ConvertPtr(ST(16), &argp17,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res17)) {
SWIG_exception_fail(SWIG_ArgError(res17), "in method '" "svn_client_diff_peg5" "', argument " "17"" of type '" "svn_client_ctx_t *""'");
@@ -18736,7 +17161,7 @@ XS(_wrap_svn_client_diff_peg5) {
if (alloc13 == SWIG_NEWOBJ) free((char*)buf13);
- if (alloc16 == SWIG_NEWOBJ) free((char*)buf16);
+
XSRETURN(argvi);
@@ -18756,7 +17181,7 @@ XS(_wrap_svn_client_diff_peg5) {
if (alloc13 == SWIG_NEWOBJ) free((char*)buf13);
- if (alloc16 == SWIG_NEWOBJ) free((char*)buf16);
+
SWIG_croak_null();
@@ -18803,9 +17228,6 @@ XS(_wrap_svn_client_diff_peg4) {
int res11 ;
char *buf11 = 0 ;
int alloc11 = 0 ;
- int res14 ;
- char *buf14 = 0 ;
- int alloc14 = 0 ;
void *argp15 = 0 ;
int res15 = 0 ;
int argvi = 0;
@@ -18828,151 +17250,13 @@ XS(_wrap_svn_client_diff_peg4) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg4 = &rev4;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg5 = &rev5;
- if (ST(4) == NULL || ST(4) == &PL_sv_undef || !SvOK(ST(4))) {
- rev5.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(4)) && sv_derived_from(ST(4), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(4), (void **)&arg5, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(4))) {
- rev5.kind = svn_opt_revision_number;
- rev5.value.number = SvIV(ST(4));
- }
- else if (SvPOK(ST(4))) {
- char *input = SvPV_nolen(ST(4));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev5.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev5.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev5.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev5.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev5.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev5.kind = svn_opt_revision_date;
- rev5.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
+ }
+ {
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
+ }
+ {
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(4), TRUE);
}
res6 = SWIG_AsCharPtrAndSize(ST(5), &buf6, NULL, &alloc6);
if (!SWIG_IsOK(res6)) {
@@ -19010,11 +17294,10 @@ XS(_wrap_svn_client_diff_peg4) {
{
arg13 = svn_swig_pl_make_file(ST(12), _global_pool);
}
- res14 = SWIG_AsCharPtrAndSize(ST(13), &buf14, NULL, &alloc14);
- if (!SWIG_IsOK(res14)) {
- SWIG_exception_fail(SWIG_ArgError(res14), "in method '" "svn_client_diff_peg4" "', argument " "14"" of type '" "apr_array_header_t const *""'");
+ {
+ arg14 = SvOK(ST(13)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(13), _global_pool) : NULL;
}
- arg14 = (apr_array_header_t *)(buf14);
res15 = SWIG_ConvertPtr(ST(14), &argp15,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res15)) {
SWIG_exception_fail(SWIG_ArgError(res15), "in method '" "svn_client_diff_peg4" "', argument " "15"" of type '" "svn_client_ctx_t *""'");
@@ -19063,7 +17346,7 @@ XS(_wrap_svn_client_diff_peg4) {
if (alloc11 == SWIG_NEWOBJ) free((char*)buf11);
- if (alloc14 == SWIG_NEWOBJ) free((char*)buf14);
+
XSRETURN(argvi);
@@ -19081,7 +17364,7 @@ XS(_wrap_svn_client_diff_peg4) {
if (alloc11 == SWIG_NEWOBJ) free((char*)buf11);
- if (alloc14 == SWIG_NEWOBJ) free((char*)buf14);
+
SWIG_croak_null();
@@ -19145,151 +17428,13 @@ XS(_wrap_svn_client_diff_peg3) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg4 = &rev4;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg5 = &rev5;
- if (ST(4) == NULL || ST(4) == &PL_sv_undef || !SvOK(ST(4))) {
- rev5.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(4)) && sv_derived_from(ST(4), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(4), (void **)&arg5, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(4))) {
- rev5.kind = svn_opt_revision_number;
- rev5.value.number = SvIV(ST(4));
- }
- else if (SvPOK(ST(4))) {
- char *input = SvPV_nolen(ST(4));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev5.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev5.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev5.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev5.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev5.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev5.kind = svn_opt_revision_date;
- rev5.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
+ }
+ {
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
+ }
+ {
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(4), TRUE);
}
ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val6);
if (!SWIG_IsOK(ecode6)) {
@@ -19444,151 +17589,13 @@ XS(_wrap_svn_client_diff_peg2) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg4 = &rev4;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg5 = &rev5;
- if (ST(4) == NULL || ST(4) == &PL_sv_undef || !SvOK(ST(4))) {
- rev5.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(4)) && sv_derived_from(ST(4), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(4), (void **)&arg5, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(4))) {
- rev5.kind = svn_opt_revision_number;
- rev5.value.number = SvIV(ST(4));
- }
- else if (SvPOK(ST(4))) {
- char *input = SvPV_nolen(ST(4));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev5.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev5.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev5.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev5.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev5.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev5.kind = svn_opt_revision_date;
- rev5.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
+ }
+ {
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
+ }
+ {
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(4), TRUE);
}
ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val6);
if (!SWIG_IsOK(ecode6)) {
@@ -19733,151 +17740,13 @@ XS(_wrap_svn_client_diff_peg) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg4 = &rev4;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg5 = &rev5;
- if (ST(4) == NULL || ST(4) == &PL_sv_undef || !SvOK(ST(4))) {
- rev5.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(4)) && sv_derived_from(ST(4), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(4), (void **)&arg5, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(4))) {
- rev5.kind = svn_opt_revision_number;
- rev5.value.number = SvIV(ST(4));
- }
- else if (SvPOK(ST(4))) {
- char *input = SvPV_nolen(ST(4));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev5.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev5.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev5.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev5.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev5.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev5.kind = svn_opt_revision_date;
- rev5.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
+ }
+ {
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
+ }
+ {
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(4), TRUE);
}
ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val6);
if (!SWIG_IsOK(ecode6)) {
@@ -19992,9 +17861,6 @@ XS(_wrap_svn_client_diff_summarize2) {
int ecode5 = 0 ;
int val6 ;
int ecode6 = 0 ;
- int res7 ;
- char *buf7 = 0 ;
- int alloc7 = 0 ;
void *argp10 = 0 ;
int res10 = 0 ;
int argvi = 0;
@@ -20005,7 +17871,7 @@ XS(_wrap_svn_client_diff_summarize2) {
_global_pool = arg11 = svn_swig_pl_make_pool (ST(items-1));
}
if ((items < 9) || (items > 10)) {
- SWIG_croak("Usage: svn_client_diff_summarize2(path1,revision1,path2,revision2,depth,ignore_ancestry,changelists,summarize_func,summarize_baton,ctx,pool);");
+ SWIG_croak("Usage: svn_client_diff_summarize2(path_or_url1,revision1,path_or_url2,revision2,depth,ignore_ancestry,changelists,summarize_func,summarize_baton,ctx,pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
@@ -20013,53 +17879,7 @@ XS(_wrap_svn_client_diff_summarize2) {
}
arg1 = (char *)(buf1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
}
res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
if (!SWIG_IsOK(res3)) {
@@ -20067,53 +17887,7 @@ XS(_wrap_svn_client_diff_summarize2) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
}
ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val5);
if (!SWIG_IsOK(ecode5)) {
@@ -20125,11 +17899,10 @@ XS(_wrap_svn_client_diff_summarize2) {
SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_client_diff_summarize2" "', argument " "6"" of type '" "svn_boolean_t""'");
}
arg6 = (svn_boolean_t)(val6);
- res7 = SWIG_AsCharPtrAndSize(ST(6), &buf7, NULL, &alloc7);
- if (!SWIG_IsOK(res7)) {
- SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_client_diff_summarize2" "', argument " "7"" of type '" "apr_array_header_t const *""'");
+ {
+ arg7 = SvOK(ST(6)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(6), _global_pool) : NULL;
}
- arg7 = (apr_array_header_t *)(buf7);
{
arg8 = svn_swig_pl_thunk_client_diff_summarize_func;
arg9 = (void *)ST(7);
@@ -20170,7 +17943,7 @@ XS(_wrap_svn_client_diff_summarize2) {
- if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+
XSRETURN(argvi);
@@ -20181,7 +17954,7 @@ XS(_wrap_svn_client_diff_summarize2) {
- if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+
SWIG_croak_null();
@@ -20232,53 +18005,7 @@ XS(_wrap_svn_client_diff_summarize) {
}
arg1 = (char *)(buf1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
}
res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
if (!SWIG_IsOK(res3)) {
@@ -20286,53 +18013,7 @@ XS(_wrap_svn_client_diff_summarize) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
}
ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val5);
if (!SWIG_IsOK(ecode5)) {
@@ -20425,9 +18106,6 @@ XS(_wrap_svn_client_diff_summarize_peg2) {
int ecode5 = 0 ;
int val6 ;
int ecode6 = 0 ;
- int res7 ;
- char *buf7 = 0 ;
- int alloc7 = 0 ;
void *argp10 = 0 ;
int res10 = 0 ;
int argvi = 0;
@@ -20438,7 +18116,7 @@ XS(_wrap_svn_client_diff_summarize_peg2) {
_global_pool = arg11 = svn_swig_pl_make_pool (ST(items-1));
}
if ((items < 9) || (items > 10)) {
- SWIG_croak("Usage: svn_client_diff_summarize_peg2(path,peg_revision,start_revision,end_revision,depth,ignore_ancestry,changelists,summarize_func,summarize_baton,ctx,pool);");
+ SWIG_croak("Usage: svn_client_diff_summarize_peg2(path_or_url,peg_revision,start_revision,end_revision,depth,ignore_ancestry,changelists,summarize_func,summarize_baton,ctx,pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
@@ -20446,151 +18124,13 @@ XS(_wrap_svn_client_diff_summarize_peg2) {
}
arg1 = (char *)(buf1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg4 = &rev4;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
+ }
+ {
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
+ }
+ {
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
}
ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val5);
if (!SWIG_IsOK(ecode5)) {
@@ -20602,11 +18142,10 @@ XS(_wrap_svn_client_diff_summarize_peg2) {
SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_client_diff_summarize_peg2" "', argument " "6"" of type '" "svn_boolean_t""'");
}
arg6 = (svn_boolean_t)(val6);
- res7 = SWIG_AsCharPtrAndSize(ST(6), &buf7, NULL, &alloc7);
- if (!SWIG_IsOK(res7)) {
- SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_client_diff_summarize_peg2" "', argument " "7"" of type '" "apr_array_header_t const *""'");
+ {
+ arg7 = SvOK(ST(6)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(6), _global_pool) : NULL;
}
- arg7 = (apr_array_header_t *)(buf7);
{
arg8 = svn_swig_pl_thunk_client_diff_summarize_func;
arg9 = (void *)ST(7);
@@ -20652,7 +18191,7 @@ XS(_wrap_svn_client_diff_summarize_peg2) {
- if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+
XSRETURN(argvi);
@@ -20663,7 +18202,7 @@ XS(_wrap_svn_client_diff_summarize_peg2) {
- if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+
SWIG_croak_null();
@@ -20712,151 +18251,13 @@ XS(_wrap_svn_client_diff_summarize_peg) {
}
arg1 = (char *)(buf1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg4 = &rev4;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
+ }
+ {
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
+ }
+ {
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
}
ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val5);
if (!SWIG_IsOK(ecode5)) {
@@ -20930,6 +18331,414 @@ XS(_wrap_svn_client_diff_summarize_peg) {
}
+XS(_wrap_svn_client_get_merging_summary) {
+ {
+ svn_boolean_t *arg1 = (svn_boolean_t *) 0 ;
+ char **arg2 = (char **) 0 ;
+ svn_revnum_t *arg3 = (svn_revnum_t *) 0 ;
+ char **arg4 = (char **) 0 ;
+ svn_revnum_t *arg5 = (svn_revnum_t *) 0 ;
+ char **arg6 = (char **) 0 ;
+ svn_revnum_t *arg7 = (svn_revnum_t *) 0 ;
+ char **arg8 = (char **) 0 ;
+ svn_revnum_t *arg9 = (svn_revnum_t *) 0 ;
+ char **arg10 = (char **) 0 ;
+ char *arg11 = (char *) 0 ;
+ svn_opt_revision_t *arg12 = (svn_opt_revision_t *) 0 ;
+ char *arg13 = (char *) 0 ;
+ svn_opt_revision_t *arg14 = (svn_opt_revision_t *) 0 ;
+ svn_client_ctx_t *arg15 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg16 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg17 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_boolean_t temp1 ;
+ int res1 = SWIG_TMPOBJ ;
+ char *temp2 ;
+ svn_revnum_t temp3 ;
+ int res3 = SWIG_TMPOBJ ;
+ char *temp4 ;
+ svn_revnum_t temp5 ;
+ int res5 = SWIG_TMPOBJ ;
+ char *temp6 ;
+ svn_revnum_t temp7 ;
+ int res7 = SWIG_TMPOBJ ;
+ char *temp8 ;
+ svn_revnum_t temp9 ;
+ int res9 = SWIG_TMPOBJ ;
+ char *temp10 ;
+ int res11 ;
+ char *buf11 = 0 ;
+ int alloc11 = 0 ;
+ svn_opt_revision_t rev12 ;
+ int res13 ;
+ char *buf13 = 0 ;
+ int alloc13 = 0 ;
+ svn_opt_revision_t rev14 ;
+ void *argp15 = 0 ;
+ int res15 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg16 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ {
+ _global_pool = arg17 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ arg2 = &temp2;
+ arg3 = &temp3;
+ arg4 = &temp4;
+ arg5 = &temp5;
+ arg6 = &temp6;
+ arg7 = &temp7;
+ arg8 = &temp8;
+ arg9 = &temp9;
+ arg10 = &temp10;
+ if ((items < 5) || (items > 7)) {
+ SWIG_croak("Usage: svn_client_get_merging_summary(source_path_or_url,source_revision,target_path_or_url,target_revision,ctx,result_pool,scratch_pool);");
+ }
+ res11 = SWIG_AsCharPtrAndSize(ST(0), &buf11, NULL, &alloc11);
+ if (!SWIG_IsOK(res11)) {
+ SWIG_exception_fail(SWIG_ArgError(res11), "in method '" "svn_client_get_merging_summary" "', argument " "11"" of type '" "char const *""'");
+ }
+ arg11 = (char *)(buf11);
+ {
+ arg12 = svn_swig_pl_set_revision(&rev12, ST(1), TRUE);
+ }
+ res13 = SWIG_AsCharPtrAndSize(ST(2), &buf13, NULL, &alloc13);
+ if (!SWIG_IsOK(res13)) {
+ SWIG_exception_fail(SWIG_ArgError(res13), "in method '" "svn_client_get_merging_summary" "', argument " "13"" of type '" "char const *""'");
+ }
+ arg13 = (char *)(buf13);
+ {
+ arg14 = svn_swig_pl_set_revision(&rev14, ST(3), TRUE);
+ }
+ res15 = SWIG_ConvertPtr(ST(4), &argp15,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res15)) {
+ SWIG_exception_fail(SWIG_ArgError(res15), "in method '" "svn_client_get_merging_summary" "', argument " "15"" of type '" "svn_client_ctx_t *""'");
+ }
+ arg15 = (svn_client_ctx_t *)(argp15);
+ if (items > 5) {
+
+ }
+ if (items > 6) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_get_merging_summary(arg1,(char const **)arg2,arg3,(char const **)arg4,arg5,(char const **)arg6,arg7,(char const **)arg8,arg9,(char const **)arg10,(char const *)arg11,(struct svn_opt_revision_t const *)arg12,(char const *)arg13,(struct svn_opt_revision_t const *)arg14,arg15,arg16,arg17);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ if (SWIG_IsTmpObj(res1)) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg1)); argvi++ ;
+ } else {
+ int new_flags = SWIG_IsNewObj(res1) ? (SWIG_POINTER_OWN | 0) : 0;
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_int, new_flags); argvi++ ;
+ }
+ {
+ if (*arg2 == NULL) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = &PL_sv_undef; argvi++ ;
+ } else {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = sv_2mortal(newSVpv(*arg2, 0)); argvi++ ;
+ }
+ }
+ if (SWIG_IsTmpObj(res3)) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((*arg3)); argvi++ ;
+ } else {
+ int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0) : 0;
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_long, new_flags); argvi++ ;
+ }
+ {
+ if (*arg4 == NULL) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = &PL_sv_undef; argvi++ ;
+ } else {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = sv_2mortal(newSVpv(*arg4, 0)); argvi++ ;
+ }
+ }
+ if (SWIG_IsTmpObj(res5)) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((*arg5)); argvi++ ;
+ } else {
+ int new_flags = SWIG_IsNewObj(res5) ? (SWIG_POINTER_OWN | 0) : 0;
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg5), SWIGTYPE_p_long, new_flags); argvi++ ;
+ }
+ {
+ if (*arg6 == NULL) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = &PL_sv_undef; argvi++ ;
+ } else {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = sv_2mortal(newSVpv(*arg6, 0)); argvi++ ;
+ }
+ }
+ if (SWIG_IsTmpObj(res7)) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((*arg7)); argvi++ ;
+ } else {
+ int new_flags = SWIG_IsNewObj(res7) ? (SWIG_POINTER_OWN | 0) : 0;
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg7), SWIGTYPE_p_long, new_flags); argvi++ ;
+ }
+ {
+ if (*arg8 == NULL) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = &PL_sv_undef; argvi++ ;
+ } else {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = sv_2mortal(newSVpv(*arg8, 0)); argvi++ ;
+ }
+ }
+ if (SWIG_IsTmpObj(res9)) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((*arg9)); argvi++ ;
+ } else {
+ int new_flags = SWIG_IsNewObj(res9) ? (SWIG_POINTER_OWN | 0) : 0;
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg9), SWIGTYPE_p_long, new_flags); argvi++ ;
+ }
+ {
+ if (*arg10 == NULL) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = &PL_sv_undef; argvi++ ;
+ } else {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = sv_2mortal(newSVpv(*arg10, 0)); argvi++ ;
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+ if (alloc11 == SWIG_NEWOBJ) free((char*)buf11);
+
+ if (alloc13 == SWIG_NEWOBJ) free((char*)buf13);
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+
+
+
+
+
+
+ if (alloc11 == SWIG_NEWOBJ) free((char*)buf11);
+
+ if (alloc13 == SWIG_NEWOBJ) free((char*)buf13);
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_client_merge5) {
+ {
+ char *arg1 = (char *) 0 ;
+ svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_opt_revision_t *arg4 = (svn_opt_revision_t *) 0 ;
+ char *arg5 = (char *) 0 ;
+ svn_depth_t arg6 ;
+ svn_boolean_t arg7 ;
+ svn_boolean_t arg8 ;
+ svn_boolean_t arg9 ;
+ svn_boolean_t arg10 ;
+ svn_boolean_t arg11 ;
+ svn_boolean_t arg12 ;
+ apr_array_header_t *arg13 = (apr_array_header_t *) 0 ;
+ svn_client_ctx_t *arg14 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg15 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ svn_opt_revision_t rev2 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ svn_opt_revision_t rev4 ;
+ int res5 ;
+ char *buf5 = 0 ;
+ int alloc5 = 0 ;
+ int val6 ;
+ int ecode6 = 0 ;
+ int val7 ;
+ int ecode7 = 0 ;
+ int val8 ;
+ int ecode8 = 0 ;
+ int val9 ;
+ int ecode9 = 0 ;
+ int val10 ;
+ int ecode10 = 0 ;
+ int val11 ;
+ int ecode11 = 0 ;
+ int val12 ;
+ int ecode12 = 0 ;
+ void *argp13 = 0 ;
+ int res13 = 0 ;
+ void *argp14 = 0 ;
+ int res14 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg15 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 14) || (items > 15)) {
+ SWIG_croak("Usage: svn_client_merge5(source1,revision1,source2,revision2,target_wcpath,depth,ignore_mergeinfo,diff_ignore_ancestry,force_delete,record_only,dry_run,allow_mixed_rev,merge_options,ctx,pool);");
+ }
+ res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_merge5" "', argument " "1"" of type '" "char const *""'");
+ }
+ arg1 = (char *)(buf1);
+ {
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
+ }
+ res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_client_merge5" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = (char *)(buf3);
+ {
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
+ }
+ res5 = SWIG_AsCharPtrAndSize(ST(4), &buf5, NULL, &alloc5);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_client_merge5" "', argument " "5"" of type '" "char const *""'");
+ }
+ arg5 = (char *)(buf5);
+ ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val6);
+ if (!SWIG_IsOK(ecode6)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_client_merge5" "', argument " "6"" of type '" "svn_depth_t""'");
+ }
+ arg6 = (svn_depth_t)(val6);
+ ecode7 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(6), &val7);
+ if (!SWIG_IsOK(ecode7)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "svn_client_merge5" "', argument " "7"" of type '" "svn_boolean_t""'");
+ }
+ arg7 = (svn_boolean_t)(val7);
+ ecode8 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(7), &val8);
+ if (!SWIG_IsOK(ecode8)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "svn_client_merge5" "', argument " "8"" of type '" "svn_boolean_t""'");
+ }
+ arg8 = (svn_boolean_t)(val8);
+ ecode9 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(8), &val9);
+ if (!SWIG_IsOK(ecode9)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "svn_client_merge5" "', argument " "9"" of type '" "svn_boolean_t""'");
+ }
+ arg9 = (svn_boolean_t)(val9);
+ ecode10 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(9), &val10);
+ if (!SWIG_IsOK(ecode10)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode10), "in method '" "svn_client_merge5" "', argument " "10"" of type '" "svn_boolean_t""'");
+ }
+ arg10 = (svn_boolean_t)(val10);
+ ecode11 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(10), &val11);
+ if (!SWIG_IsOK(ecode11)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode11), "in method '" "svn_client_merge5" "', argument " "11"" of type '" "svn_boolean_t""'");
+ }
+ arg11 = (svn_boolean_t)(val11);
+ ecode12 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(11), &val12);
+ if (!SWIG_IsOK(ecode12)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode12), "in method '" "svn_client_merge5" "', argument " "12"" of type '" "svn_boolean_t""'");
+ }
+ arg12 = (svn_boolean_t)(val12);
+ res13 = SWIG_ConvertPtr(ST(12), &argp13,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
+ if (!SWIG_IsOK(res13)) {
+ SWIG_exception_fail(SWIG_ArgError(res13), "in method '" "svn_client_merge5" "', argument " "13"" of type '" "apr_array_header_t const *""'");
+ }
+ arg13 = (apr_array_header_t *)(argp13);
+ res14 = SWIG_ConvertPtr(ST(13), &argp14,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res14)) {
+ SWIG_exception_fail(SWIG_ArgError(res14), "in method '" "svn_client_merge5" "', argument " "14"" of type '" "svn_client_ctx_t *""'");
+ }
+ arg14 = (svn_client_ctx_t *)(argp14);
+ if (items > 14) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_merge5((char const *)arg1,(struct svn_opt_revision_t const *)arg2,(char const *)arg3,(struct svn_opt_revision_t const *)arg4,(char const *)arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12,(apr_array_header_t const *)arg13,arg14,arg15);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+
+
+
+
+
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+
+
+
+
+
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_client_merge4) {
{
char *arg1 = (char *) 0 ;
@@ -20982,7 +18791,7 @@ XS(_wrap_svn_client_merge4) {
_global_pool = arg14 = svn_swig_pl_make_pool (ST(items-1));
}
if ((items < 13) || (items > 14)) {
- SWIG_croak("Usage: svn_client_merge4(source1,revision1,source2,revision2,target_wcpath,depth,ignore_ancestry,force,record_only,dry_run,allow_mixed_rev,merge_options,ctx,pool);");
+ SWIG_croak("Usage: svn_client_merge4(source1,revision1,source2,revision2,target_wcpath,depth,ignore_ancestry,force_delete,record_only,dry_run,allow_mixed_rev,merge_options,ctx,pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
@@ -20990,53 +18799,7 @@ XS(_wrap_svn_client_merge4) {
}
arg1 = (char *)(buf1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
}
res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
if (!SWIG_IsOK(res3)) {
@@ -21044,53 +18807,7 @@ XS(_wrap_svn_client_merge4) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
}
res5 = SWIG_AsCharPtrAndSize(ST(4), &buf5, NULL, &alloc5);
if (!SWIG_IsOK(res5)) {
@@ -21254,53 +18971,7 @@ XS(_wrap_svn_client_merge3) {
}
arg1 = (char *)(buf1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
}
res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
if (!SWIG_IsOK(res3)) {
@@ -21308,53 +18979,7 @@ XS(_wrap_svn_client_merge3) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
}
res5 = SWIG_AsCharPtrAndSize(ST(4), &buf5, NULL, &alloc5);
if (!SWIG_IsOK(res5)) {
@@ -21508,53 +19133,7 @@ XS(_wrap_svn_client_merge2) {
}
arg1 = (char *)(buf1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
}
res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
if (!SWIG_IsOK(res3)) {
@@ -21562,53 +19141,7 @@ XS(_wrap_svn_client_merge2) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
}
res5 = SWIG_AsCharPtrAndSize(ST(4), &buf5, NULL, &alloc5);
if (!SWIG_IsOK(res5)) {
@@ -21752,53 +19285,7 @@ XS(_wrap_svn_client_merge) {
}
arg1 = (char *)(buf1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
}
res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
if (!SWIG_IsOK(res3)) {
@@ -21806,53 +19293,7 @@ XS(_wrap_svn_client_merge) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
}
res5 = SWIG_AsCharPtrAndSize(ST(4), &buf5, NULL, &alloc5);
if (!SWIG_IsOK(res5)) {
@@ -21969,7 +19410,7 @@ XS(_wrap_svn_client_merge_reintegrate) {
_global_pool = arg7 = svn_swig_pl_make_pool (ST(items-1));
}
if ((items < 6) || (items > 7)) {
- SWIG_croak("Usage: svn_client_merge_reintegrate(source,peg_revision,target_wcpath,dry_run,merge_options,ctx,pool);");
+ SWIG_croak("Usage: svn_client_merge_reintegrate(source_path_or_url,source_peg_revision,target_wcpath,dry_run,merge_options,ctx,pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
@@ -21977,53 +19418,7 @@ XS(_wrap_svn_client_merge_reintegrate) {
}
arg1 = (char *)(buf1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
}
res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
if (!SWIG_IsOK(res3)) {
@@ -22049,11 +19444,6 @@ XS(_wrap_svn_client_merge_reintegrate) {
}
{
- if (!arg2) {
- SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
- }
- }
- {
result = (svn_error_t *)svn_client_merge_reintegrate((char const *)arg1,(struct svn_opt_revision_t const *)arg2,(char const *)arg3,arg4,(apr_array_header_t const *)arg5,arg6,arg7);
@@ -22096,6 +19486,179 @@ XS(_wrap_svn_client_merge_reintegrate) {
}
+XS(_wrap_svn_client_merge_peg5) {
+ {
+ char *arg1 = (char *) 0 ;
+ apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
+ svn_opt_revision_t *arg3 = (svn_opt_revision_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ svn_depth_t arg5 ;
+ svn_boolean_t arg6 ;
+ svn_boolean_t arg7 ;
+ svn_boolean_t arg8 ;
+ svn_boolean_t arg9 ;
+ svn_boolean_t arg10 ;
+ svn_boolean_t arg11 ;
+ apr_array_header_t *arg12 = (apr_array_header_t *) 0 ;
+ svn_client_ctx_t *arg13 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg14 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ svn_opt_revision_t rev3 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ int val5 ;
+ int ecode5 = 0 ;
+ int val6 ;
+ int ecode6 = 0 ;
+ int val7 ;
+ int ecode7 = 0 ;
+ int val8 ;
+ int ecode8 = 0 ;
+ int val9 ;
+ int ecode9 = 0 ;
+ int val10 ;
+ int ecode10 = 0 ;
+ int val11 ;
+ int ecode11 = 0 ;
+ void *argp12 = 0 ;
+ int res12 = 0 ;
+ void *argp13 = 0 ;
+ int res13 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg14 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 13) || (items > 14)) {
+ SWIG_croak("Usage: svn_client_merge_peg5(source_path_or_url,ranges_to_merge,source_peg_revision,target_wcpath,depth,ignore_mergeinfo,diff_ignore_ancestry,force_delete,record_only,dry_run,allow_mixed_rev,merge_options,ctx,pool);");
+ }
+ res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_merge_peg5" "', argument " "1"" of type '" "char const *""'");
+ }
+ arg1 = (char *)(buf1);
+ {
+ arg2 = svn_swig_pl_array_to_apr_array_revision_range(ST(1), _global_pool);
+ }
+ {
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
+ }
+ res4 = SWIG_AsCharPtrAndSize(ST(3), &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_client_merge_peg5" "', argument " "4"" of type '" "char const *""'");
+ }
+ arg4 = (char *)(buf4);
+ ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val5);
+ if (!SWIG_IsOK(ecode5)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_client_merge_peg5" "', argument " "5"" of type '" "svn_depth_t""'");
+ }
+ arg5 = (svn_depth_t)(val5);
+ ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val6);
+ if (!SWIG_IsOK(ecode6)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_client_merge_peg5" "', argument " "6"" of type '" "svn_boolean_t""'");
+ }
+ arg6 = (svn_boolean_t)(val6);
+ ecode7 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(6), &val7);
+ if (!SWIG_IsOK(ecode7)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "svn_client_merge_peg5" "', argument " "7"" of type '" "svn_boolean_t""'");
+ }
+ arg7 = (svn_boolean_t)(val7);
+ ecode8 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(7), &val8);
+ if (!SWIG_IsOK(ecode8)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "svn_client_merge_peg5" "', argument " "8"" of type '" "svn_boolean_t""'");
+ }
+ arg8 = (svn_boolean_t)(val8);
+ ecode9 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(8), &val9);
+ if (!SWIG_IsOK(ecode9)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "svn_client_merge_peg5" "', argument " "9"" of type '" "svn_boolean_t""'");
+ }
+ arg9 = (svn_boolean_t)(val9);
+ ecode10 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(9), &val10);
+ if (!SWIG_IsOK(ecode10)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode10), "in method '" "svn_client_merge_peg5" "', argument " "10"" of type '" "svn_boolean_t""'");
+ }
+ arg10 = (svn_boolean_t)(val10);
+ ecode11 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(10), &val11);
+ if (!SWIG_IsOK(ecode11)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode11), "in method '" "svn_client_merge_peg5" "', argument " "11"" of type '" "svn_boolean_t""'");
+ }
+ arg11 = (svn_boolean_t)(val11);
+ res12 = SWIG_ConvertPtr(ST(11), &argp12,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
+ if (!SWIG_IsOK(res12)) {
+ SWIG_exception_fail(SWIG_ArgError(res12), "in method '" "svn_client_merge_peg5" "', argument " "12"" of type '" "apr_array_header_t const *""'");
+ }
+ arg12 = (apr_array_header_t *)(argp12);
+ res13 = SWIG_ConvertPtr(ST(12), &argp13,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res13)) {
+ SWIG_exception_fail(SWIG_ArgError(res13), "in method '" "svn_client_merge_peg5" "', argument " "13"" of type '" "svn_client_ctx_t *""'");
+ }
+ arg13 = (svn_client_ctx_t *)(argp13);
+ if (items > 13) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_merge_peg5((char const *)arg1,(apr_array_header_t const *)arg2,(struct svn_opt_revision_t const *)arg3,(char const *)arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,(apr_array_header_t const *)arg12,arg13,arg14);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+
+
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+
+
+
+
+
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+
+
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+
+
+
+
+
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_client_merge_peg4) {
{
char *arg1 = (char *) 0 ;
@@ -22115,8 +19678,6 @@ XS(_wrap_svn_client_merge_peg4) {
int res1 ;
char *buf1 = 0 ;
int alloc1 = 0 ;
- void *argp2 = 0 ;
- int res2 = 0 ;
svn_opt_revision_t rev3 ;
int res4 ;
char *buf4 = 0 ;
@@ -22145,66 +19706,18 @@ XS(_wrap_svn_client_merge_peg4) {
_global_pool = arg13 = svn_swig_pl_make_pool (ST(items-1));
}
if ((items < 12) || (items > 13)) {
- SWIG_croak("Usage: svn_client_merge_peg4(source,ranges_to_merge,peg_revision,target_wcpath,depth,ignore_ancestry,force,record_only,dry_run,allow_mixed_rev,merge_options,ctx,pool);");
+ SWIG_croak("Usage: svn_client_merge_peg4(source_path_or_url,ranges_to_merge,source_peg_revision,target_wcpath,depth,ignore_ancestry,force_delete,record_only,dry_run,allow_mixed_rev,merge_options,ctx,pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_merge_peg4" "', argument " "1"" of type '" "char const *""'");
}
arg1 = (char *)(buf1);
- res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
- if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_merge_peg4" "', argument " "2"" of type '" "apr_array_header_t const *""'");
+ {
+ arg2 = svn_swig_pl_array_to_apr_array_revision_range(ST(1), _global_pool);
}
- arg2 = (apr_array_header_t *)(argp2);
{
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
}
res4 = SWIG_AsCharPtrAndSize(ST(3), &buf4, NULL, &alloc4);
if (!SWIG_IsOK(res4)) {
@@ -22255,11 +19768,6 @@ XS(_wrap_svn_client_merge_peg4) {
}
{
- if (!arg3) {
- SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
- }
- }
- {
result = (svn_error_t *)svn_client_merge_peg4((char const *)arg1,(apr_array_header_t const *)arg2,(struct svn_opt_revision_t const *)arg3,(char const *)arg4,arg5,arg6,arg7,arg8,arg9,arg10,(apr_array_header_t const *)arg11,arg12,arg13);
@@ -22332,8 +19840,6 @@ XS(_wrap_svn_client_merge_peg3) {
int res1 ;
char *buf1 = 0 ;
int alloc1 = 0 ;
- void *argp2 = 0 ;
- int res2 = 0 ;
svn_opt_revision_t rev3 ;
int res4 ;
char *buf4 = 0 ;
@@ -22367,59 +19873,11 @@ XS(_wrap_svn_client_merge_peg3) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_merge_peg3" "', argument " "1"" of type '" "char const *""'");
}
arg1 = (char *)(buf1);
- res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
- if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_merge_peg3" "', argument " "2"" of type '" "apr_array_header_t const *""'");
+ {
+ arg2 = svn_swig_pl_array_to_apr_array_revision_range(ST(1), _global_pool);
}
- arg2 = (apr_array_header_t *)(argp2);
{
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
}
res4 = SWIG_AsCharPtrAndSize(ST(3), &buf4, NULL, &alloc4);
if (!SWIG_IsOK(res4)) {
@@ -22574,151 +20032,13 @@ XS(_wrap_svn_client_merge_peg2) {
}
arg1 = (char *)(buf1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg4 = &rev4;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
+ }
+ {
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
+ }
+ {
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
}
res5 = SWIG_AsCharPtrAndSize(ST(4), &buf5, NULL, &alloc5);
if (!SWIG_IsOK(res5)) {
@@ -22865,151 +20185,13 @@ XS(_wrap_svn_client_merge_peg) {
}
arg1 = (char *)(buf1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg4 = &rev4;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
+ }
+ {
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
+ }
+ {
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
}
res5 = SWIG_AsCharPtrAndSize(ST(4), &buf5, NULL, &alloc5);
if (!SWIG_IsOK(res5)) {
@@ -23132,53 +20314,7 @@ XS(_wrap_svn_client_suggest_merge_sources) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(1), TRUE);
}
res4 = SWIG_ConvertPtr(ST(2), &argp4,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res4)) {
@@ -23267,53 +20403,7 @@ XS(_wrap_svn_client_mergeinfo_get_merged) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(1), TRUE);
}
res4 = SWIG_ConvertPtr(ST(2), &argp4,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res4)) {
@@ -23376,6 +20466,157 @@ XS(_wrap_svn_client_mergeinfo_get_merged) {
}
+XS(_wrap_svn_client_mergeinfo_log2) {
+ {
+ svn_boolean_t arg1 ;
+ char *arg2 = (char *) 0 ;
+ svn_opt_revision_t *arg3 = (svn_opt_revision_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ svn_opt_revision_t *arg5 = (svn_opt_revision_t *) 0 ;
+ svn_opt_revision_t *arg6 = (svn_opt_revision_t *) 0 ;
+ svn_opt_revision_t *arg7 = (svn_opt_revision_t *) 0 ;
+ svn_log_entry_receiver_t arg8 = (svn_log_entry_receiver_t) 0 ;
+ void *arg9 = (void *) 0 ;
+ svn_boolean_t arg10 ;
+ svn_depth_t arg11 ;
+ apr_array_header_t *arg12 = (apr_array_header_t *) 0 ;
+ svn_client_ctx_t *arg13 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg14 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int val1 ;
+ int ecode1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ svn_opt_revision_t rev3 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ svn_opt_revision_t rev5 ;
+ svn_opt_revision_t rev6 ;
+ svn_opt_revision_t rev7 ;
+ int val10 ;
+ int ecode10 = 0 ;
+ int val11 ;
+ int ecode11 = 0 ;
+ void *argp13 = 0 ;
+ int res13 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg14 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 12) || (items > 13)) {
+ SWIG_croak("Usage: svn_client_mergeinfo_log2(finding_merged,target_path_or_url,target_peg_revision,source_path_or_url,source_peg_revision,source_start_revision,source_end_revision,receiver,receiver_baton,discover_changed_paths,depth,revprops,ctx,scratch_pool);");
+ }
+ ecode1 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1);
+ if (!SWIG_IsOK(ecode1)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "svn_client_mergeinfo_log2" "', argument " "1"" of type '" "svn_boolean_t""'");
+ }
+ arg1 = (svn_boolean_t)(val1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_mergeinfo_log2" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ {
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
+ }
+ res4 = SWIG_AsCharPtrAndSize(ST(3), &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_client_mergeinfo_log2" "', argument " "4"" of type '" "char const *""'");
+ }
+ arg4 = (char *)(buf4);
+ {
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(4), TRUE);
+ }
+ {
+ arg6 = svn_swig_pl_set_revision(&rev6, ST(5), TRUE);
+ }
+ {
+ arg7 = svn_swig_pl_set_revision(&rev7, ST(6), TRUE);
+ }
+ {
+ arg8 = svn_swig_pl_thunk_log_entry_receiver;
+ arg9 = ST(7);
+ }
+ ecode10 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(8), &val10);
+ if (!SWIG_IsOK(ecode10)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode10), "in method '" "svn_client_mergeinfo_log2" "', argument " "10"" of type '" "svn_boolean_t""'");
+ }
+ arg10 = (svn_boolean_t)(val10);
+ ecode11 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(9), &val11);
+ if (!SWIG_IsOK(ecode11)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode11), "in method '" "svn_client_mergeinfo_log2" "', argument " "11"" of type '" "svn_depth_t""'");
+ }
+ arg11 = (svn_depth_t)(val11);
+ {
+ arg12 = SvOK(ST(10)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(10), _global_pool) : NULL;
+ }
+ res13 = SWIG_ConvertPtr(ST(11), &argp13,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res13)) {
+ SWIG_exception_fail(SWIG_ArgError(res13), "in method '" "svn_client_mergeinfo_log2" "', argument " "13"" of type '" "svn_client_ctx_t *""'");
+ }
+ arg13 = (svn_client_ctx_t *)(argp13);
+ if (items > 12) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_mergeinfo_log2(arg1,(char const *)arg2,(struct svn_opt_revision_t const *)arg3,(char const *)arg4,(struct svn_opt_revision_t const *)arg5,(struct svn_opt_revision_t const *)arg6,(struct svn_opt_revision_t const *)arg7,arg8,arg9,arg10,arg11,(apr_array_header_t const *)arg12,arg13,arg14);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+
+
+
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+
+
+
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_client_mergeinfo_log) {
{
svn_boolean_t arg1 ;
@@ -23401,7 +20642,6 @@ XS(_wrap_svn_client_mergeinfo_log) {
char *buf4 = 0 ;
int alloc4 = 0 ;
svn_opt_revision_t rev5 ;
- int res7 ;
int val8 ;
int ecode8 = 0 ;
int val9 ;
@@ -23415,8 +20655,8 @@ XS(_wrap_svn_client_mergeinfo_log) {
{
_global_pool = arg12 = svn_swig_pl_make_pool (ST(items-1));
}
- if ((items < 11) || (items > 12)) {
- SWIG_croak("Usage: svn_client_mergeinfo_log(finding_merged,path_or_url,peg_revision,merge_source_path_or_url,src_peg_revision,receiver,receiver_baton,discover_changed_paths,depth,revprops,ctx,scratch_pool);");
+ if ((items < 10) || (items > 11)) {
+ SWIG_croak("Usage: svn_client_mergeinfo_log(finding_merged,target_path_or_url,target_peg_revision,source_path_or_url,source_peg_revision,receiver,receiver_baton,discover_changed_paths,depth,revprops,ctx,scratch_pool);");
}
ecode1 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1);
if (!SWIG_IsOK(ecode1)) {
@@ -23429,53 +20669,7 @@ XS(_wrap_svn_client_mergeinfo_log) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
}
res4 = SWIG_AsCharPtrAndSize(ST(3), &buf4, NULL, &alloc4);
if (!SWIG_IsOK(res4)) {
@@ -23483,92 +20677,35 @@ XS(_wrap_svn_client_mergeinfo_log) {
}
arg4 = (char *)(buf4);
{
- arg5 = &rev5;
- if (ST(4) == NULL || ST(4) == &PL_sv_undef || !SvOK(ST(4))) {
- rev5.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(4)) && sv_derived_from(ST(4), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(4), (void **)&arg5, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(4))) {
- rev5.kind = svn_opt_revision_number;
- rev5.value.number = SvIV(ST(4));
- }
- else if (SvPOK(ST(4))) {
- char *input = SvPV_nolen(ST(4));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev5.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev5.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev5.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev5.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev5.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev5.kind = svn_opt_revision_date;
- rev5.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(4), TRUE);
}
{
- int res = SWIG_ConvertFunctionPtr(ST(5), (void**)(&arg6), SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_client_mergeinfo_log" "', argument " "6"" of type '" "svn_log_entry_receiver_t""'");
- }
+ arg6 = svn_swig_pl_thunk_log_entry_receiver;
+ arg7 = ST(5);
}
- res7 = SWIG_ConvertPtr(ST(6),SWIG_as_voidptrptr(&arg7), 0, 0);
- if (!SWIG_IsOK(res7)) {
- SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_client_mergeinfo_log" "', argument " "7"" of type '" "void *""'");
- }
- ecode8 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(7), &val8);
+ ecode8 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(6), &val8);
if (!SWIG_IsOK(ecode8)) {
SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "svn_client_mergeinfo_log" "', argument " "8"" of type '" "svn_boolean_t""'");
}
arg8 = (svn_boolean_t)(val8);
- ecode9 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(8), &val9);
+ ecode9 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(7), &val9);
if (!SWIG_IsOK(ecode9)) {
SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "svn_client_mergeinfo_log" "', argument " "9"" of type '" "svn_depth_t""'");
}
arg9 = (svn_depth_t)(val9);
{
- arg10 = (apr_array_header_t *) svn_swig_pl_strings_to_array(ST(9),
- _global_pool);
+ arg10 = SvOK(ST(8)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(8), _global_pool) : NULL;
}
- res11 = SWIG_ConvertPtr(ST(10), &argp11,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ res11 = SWIG_ConvertPtr(ST(9), &argp11,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res11)) {
SWIG_exception_fail(SWIG_ArgError(res11), "in method '" "svn_client_mergeinfo_log" "', argument " "11"" of type '" "svn_client_ctx_t *""'");
}
arg11 = (svn_client_ctx_t *)(argp11);
- if (items > 11) {
+ if (items > 10) {
}
{
- if (!arg3) {
- SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
- }
- }
- {
result = (svn_error_t *)svn_client_mergeinfo_log(arg1,(char const *)arg2,(struct svn_opt_revision_t const *)arg3,(char const *)arg4,(struct svn_opt_revision_t const *)arg5,arg6,arg7,arg8,arg9,(apr_array_header_t const *)arg10,arg11,arg12);
@@ -23600,8 +20737,6 @@ XS(_wrap_svn_client_mergeinfo_log) {
-
-
XSRETURN(argvi);
fail:
@@ -23614,8 +20749,6 @@ XS(_wrap_svn_client_mergeinfo_log) {
-
-
SWIG_croak_null();
}
}
@@ -23642,7 +20775,6 @@ XS(_wrap_svn_client_mergeinfo_log_merged) {
char *buf3 = 0 ;
int alloc3 = 0 ;
svn_opt_revision_t rev4 ;
- int res6 ;
int val7 ;
int ecode7 = 0 ;
void *argp9 = 0 ;
@@ -23654,7 +20786,7 @@ XS(_wrap_svn_client_mergeinfo_log_merged) {
{
_global_pool = arg10 = svn_swig_pl_make_pool (ST(items-1));
}
- if ((items < 9) || (items > 10)) {
+ if ((items < 8) || (items > 9)) {
SWIG_croak("Usage: svn_client_mergeinfo_log_merged(path_or_url,peg_revision,merge_source_path_or_url,src_peg_revision,receiver,receiver_baton,discover_changed_paths,revprops,ctx,pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
@@ -23663,53 +20795,7 @@ XS(_wrap_svn_client_mergeinfo_log_merged) {
}
arg1 = (char *)(buf1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
}
res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
if (!SWIG_IsOK(res3)) {
@@ -23717,79 +20803,27 @@ XS(_wrap_svn_client_mergeinfo_log_merged) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
}
{
- int res = SWIG_ConvertFunctionPtr(ST(4), (void**)(&arg5), SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_client_mergeinfo_log_merged" "', argument " "5"" of type '" "svn_log_entry_receiver_t""'");
- }
- }
- res6 = SWIG_ConvertPtr(ST(5),SWIG_as_voidptrptr(&arg6), 0, 0);
- if (!SWIG_IsOK(res6)) {
- SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_client_mergeinfo_log_merged" "', argument " "6"" of type '" "void *""'");
+ arg5 = svn_swig_pl_thunk_log_entry_receiver;
+ arg6 = ST(4);
}
- ecode7 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(6), &val7);
+ ecode7 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val7);
if (!SWIG_IsOK(ecode7)) {
SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "svn_client_mergeinfo_log_merged" "', argument " "7"" of type '" "svn_boolean_t""'");
}
arg7 = (svn_boolean_t)(val7);
{
- arg8 = (apr_array_header_t *) svn_swig_pl_strings_to_array(ST(7),
- _global_pool);
+ arg8 = SvOK(ST(6)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(6), _global_pool) : NULL;
}
- res9 = SWIG_ConvertPtr(ST(8), &argp9,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ res9 = SWIG_ConvertPtr(ST(7), &argp9,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res9)) {
SWIG_exception_fail(SWIG_ArgError(res9), "in method '" "svn_client_mergeinfo_log_merged" "', argument " "9"" of type '" "svn_client_ctx_t *""'");
}
arg9 = (svn_client_ctx_t *)(argp9);
- if (items > 9) {
+ if (items > 8) {
}
{
@@ -23827,8 +20861,6 @@ XS(_wrap_svn_client_mergeinfo_log_merged) {
-
-
XSRETURN(argvi);
fail:
if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
@@ -23839,8 +20871,6 @@ XS(_wrap_svn_client_mergeinfo_log_merged) {
-
-
SWIG_croak_null();
}
}
@@ -23867,7 +20897,6 @@ XS(_wrap_svn_client_mergeinfo_log_eligible) {
char *buf3 = 0 ;
int alloc3 = 0 ;
svn_opt_revision_t rev4 ;
- int res6 ;
int val7 ;
int ecode7 = 0 ;
void *argp9 = 0 ;
@@ -23879,7 +20908,7 @@ XS(_wrap_svn_client_mergeinfo_log_eligible) {
{
_global_pool = arg10 = svn_swig_pl_make_pool (ST(items-1));
}
- if ((items < 9) || (items > 10)) {
+ if ((items < 8) || (items > 9)) {
SWIG_croak("Usage: svn_client_mergeinfo_log_eligible(path_or_url,peg_revision,merge_source_path_or_url,src_peg_revision,receiver,receiver_baton,discover_changed_paths,revprops,ctx,pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
@@ -23888,53 +20917,7 @@ XS(_wrap_svn_client_mergeinfo_log_eligible) {
}
arg1 = (char *)(buf1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
}
res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
if (!SWIG_IsOK(res3)) {
@@ -23942,79 +20925,27 @@ XS(_wrap_svn_client_mergeinfo_log_eligible) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
}
{
- int res = SWIG_ConvertFunctionPtr(ST(4), (void**)(&arg5), SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_client_mergeinfo_log_eligible" "', argument " "5"" of type '" "svn_log_entry_receiver_t""'");
- }
- }
- res6 = SWIG_ConvertPtr(ST(5),SWIG_as_voidptrptr(&arg6), 0, 0);
- if (!SWIG_IsOK(res6)) {
- SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_client_mergeinfo_log_eligible" "', argument " "6"" of type '" "void *""'");
+ arg5 = svn_swig_pl_thunk_log_entry_receiver;
+ arg6 = ST(4);
}
- ecode7 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(6), &val7);
+ ecode7 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val7);
if (!SWIG_IsOK(ecode7)) {
SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "svn_client_mergeinfo_log_eligible" "', argument " "7"" of type '" "svn_boolean_t""'");
}
arg7 = (svn_boolean_t)(val7);
{
- arg8 = (apr_array_header_t *) svn_swig_pl_strings_to_array(ST(7),
- _global_pool);
+ arg8 = SvOK(ST(6)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(6), _global_pool) : NULL;
}
- res9 = SWIG_ConvertPtr(ST(8), &argp9,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ res9 = SWIG_ConvertPtr(ST(7), &argp9,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res9)) {
SWIG_exception_fail(SWIG_ArgError(res9), "in method '" "svn_client_mergeinfo_log_eligible" "', argument " "9"" of type '" "svn_client_ctx_t *""'");
}
arg9 = (svn_client_ctx_t *)(argp9);
- if (items > 9) {
+ if (items > 8) {
}
{
@@ -24052,8 +20983,6 @@ XS(_wrap_svn_client_mergeinfo_log_eligible) {
-
-
XSRETURN(argvi);
fail:
if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
@@ -24064,8 +20993,6 @@ XS(_wrap_svn_client_mergeinfo_log_eligible) {
-
-
SWIG_croak_null();
}
}
@@ -24421,9 +21348,6 @@ XS(_wrap_svn_client_revert2) {
apr_pool_t *_global_pool ;
int val2 ;
int ecode2 = 0 ;
- int res3 ;
- char *buf3 = 0 ;
- int alloc3 = 0 ;
void *argp4 = 0 ;
int res4 = 0 ;
int argvi = 0;
@@ -24445,11 +21369,10 @@ XS(_wrap_svn_client_revert2) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_revert2" "', argument " "2"" of type '" "svn_depth_t""'");
}
arg2 = (svn_depth_t)(val2);
- res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
- if (!SWIG_IsOK(res3)) {
- SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_client_revert2" "', argument " "3"" of type '" "apr_array_header_t const *""'");
+ {
+ arg3 = SvOK(ST(2)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(2), _global_pool) : NULL;
}
- arg3 = (apr_array_header_t *)(buf3);
res4 = SWIG_ConvertPtr(ST(3), &argp4,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res4)) {
SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_client_revert2" "', argument " "4"" of type '" "svn_client_ctx_t *""'");
@@ -24482,14 +21405,14 @@ XS(_wrap_svn_client_revert2) {
}
- if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
XSRETURN(argvi);
fail:
- if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
SWIG_croak_null();
@@ -24742,7 +21665,7 @@ XS(_wrap_svn_client_resolve) {
XS(_wrap_svn_client_copy_source_t_path_set) {
{
- svn_client_copy_source_t *arg1 = (svn_client_copy_source_t *) 0 ;
+ struct svn_client_copy_source_t *arg1 = (struct svn_client_copy_source_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -24757,9 +21680,9 @@ XS(_wrap_svn_client_copy_source_t_path_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_copy_source_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_copy_source_t_path_set" "', argument " "1"" of type '" "svn_client_copy_source_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_copy_source_t_path_set" "', argument " "1"" of type '" "struct svn_client_copy_source_t *""'");
}
- arg1 = (svn_client_copy_source_t *)(argp1);
+ arg1 = (struct svn_client_copy_source_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_copy_source_t_path_set" "', argument " "2"" of type '" "char const *""'");
@@ -24787,7 +21710,7 @@ XS(_wrap_svn_client_copy_source_t_path_set) {
XS(_wrap_svn_client_copy_source_t_path_get) {
{
- svn_client_copy_source_t *arg1 = (svn_client_copy_source_t *) 0 ;
+ struct svn_client_copy_source_t *arg1 = (struct svn_client_copy_source_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -24799,9 +21722,9 @@ XS(_wrap_svn_client_copy_source_t_path_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_copy_source_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_copy_source_t_path_get" "', argument " "1"" of type '" "svn_client_copy_source_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_copy_source_t_path_get" "', argument " "1"" of type '" "struct svn_client_copy_source_t *""'");
}
- arg1 = (svn_client_copy_source_t *)(argp1);
+ arg1 = (struct svn_client_copy_source_t *)(argp1);
result = (char *) ((arg1)->path);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -24815,7 +21738,7 @@ XS(_wrap_svn_client_copy_source_t_path_get) {
XS(_wrap_svn_client_copy_source_t_revision_set) {
{
- svn_client_copy_source_t *arg1 = (svn_client_copy_source_t *) 0 ;
+ struct svn_client_copy_source_t *arg1 = (struct svn_client_copy_source_t *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -24828,57 +21751,11 @@ XS(_wrap_svn_client_copy_source_t_revision_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_copy_source_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_copy_source_t_revision_set" "', argument " "1"" of type '" "svn_client_copy_source_t *""'");
- }
- arg1 = (svn_client_copy_source_t *)(argp1);
- {
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_copy_source_t_revision_set" "', argument " "1"" of type '" "struct svn_client_copy_source_t *""'");
+ }
+ arg1 = (struct svn_client_copy_source_t *)(argp1);
+ {
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
}
{
if (!arg2) {
@@ -24900,7 +21777,7 @@ XS(_wrap_svn_client_copy_source_t_revision_set) {
XS(_wrap_svn_client_copy_source_t_revision_get) {
{
- svn_client_copy_source_t *arg1 = (svn_client_copy_source_t *) 0 ;
+ struct svn_client_copy_source_t *arg1 = (struct svn_client_copy_source_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -24912,9 +21789,9 @@ XS(_wrap_svn_client_copy_source_t_revision_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_copy_source_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_copy_source_t_revision_get" "', argument " "1"" of type '" "svn_client_copy_source_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_copy_source_t_revision_get" "', argument " "1"" of type '" "struct svn_client_copy_source_t *""'");
}
- arg1 = (svn_client_copy_source_t *)(argp1);
+ arg1 = (struct svn_client_copy_source_t *)(argp1);
result = (svn_opt_revision_t *) ((arg1)->revision);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_opt_revision_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -24928,7 +21805,7 @@ XS(_wrap_svn_client_copy_source_t_revision_get) {
XS(_wrap_svn_client_copy_source_t_peg_revision_set) {
{
- svn_client_copy_source_t *arg1 = (svn_client_copy_source_t *) 0 ;
+ struct svn_client_copy_source_t *arg1 = (struct svn_client_copy_source_t *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -24941,57 +21818,11 @@ XS(_wrap_svn_client_copy_source_t_peg_revision_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_copy_source_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_copy_source_t_peg_revision_set" "', argument " "1"" of type '" "svn_client_copy_source_t *""'");
- }
- arg1 = (svn_client_copy_source_t *)(argp1);
- {
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_copy_source_t_peg_revision_set" "', argument " "1"" of type '" "struct svn_client_copy_source_t *""'");
+ }
+ arg1 = (struct svn_client_copy_source_t *)(argp1);
+ {
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
}
{
if (!arg2) {
@@ -25013,7 +21844,7 @@ XS(_wrap_svn_client_copy_source_t_peg_revision_set) {
XS(_wrap_svn_client_copy_source_t_peg_revision_get) {
{
- svn_client_copy_source_t *arg1 = (svn_client_copy_source_t *) 0 ;
+ struct svn_client_copy_source_t *arg1 = (struct svn_client_copy_source_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -25025,9 +21856,9 @@ XS(_wrap_svn_client_copy_source_t_peg_revision_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_copy_source_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_copy_source_t_peg_revision_get" "', argument " "1"" of type '" "svn_client_copy_source_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_copy_source_t_peg_revision_get" "', argument " "1"" of type '" "struct svn_client_copy_source_t *""'");
}
- arg1 = (svn_client_copy_source_t *)(argp1);
+ arg1 = (struct svn_client_copy_source_t *)(argp1);
result = (svn_opt_revision_t *) ((arg1)->peg_revision);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_opt_revision_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -25042,14 +21873,14 @@ XS(_wrap_svn_client_copy_source_t_peg_revision_get) {
XS(_wrap_new_svn_client_copy_source_t) {
{
int argvi = 0;
- svn_client_copy_source_t *result = 0 ;
+ struct svn_client_copy_source_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_client_copy_source_t();");
}
{
- result = (svn_client_copy_source_t *)calloc(1, sizeof(svn_client_copy_source_t));
+ result = (struct svn_client_copy_source_t *)calloc(1, sizeof(struct svn_client_copy_source_t));
@@ -25064,7 +21895,7 @@ XS(_wrap_new_svn_client_copy_source_t) {
XS(_wrap_delete_svn_client_copy_source_t) {
{
- svn_client_copy_source_t *arg1 = (svn_client_copy_source_t *) 0 ;
+ struct svn_client_copy_source_t *arg1 = (struct svn_client_copy_source_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -25075,9 +21906,9 @@ XS(_wrap_delete_svn_client_copy_source_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_copy_source_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_client_copy_source_t" "', argument " "1"" of type '" "svn_client_copy_source_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_client_copy_source_t" "', argument " "1"" of type '" "struct svn_client_copy_source_t *""'");
}
- arg1 = (svn_client_copy_source_t *)(argp1);
+ arg1 = (struct svn_client_copy_source_t *)(argp1);
{
free((char *) arg1);
@@ -25118,10 +21949,6 @@ XS(_wrap_svn_client_copy6) {
int ecode4 = 0 ;
int val5 ;
int ecode5 = 0 ;
- int res6 ;
- char *buf6 = 0 ;
- int alloc6 = 0 ;
- int res8 ;
void *argp9 = 0 ;
int res9 = 0 ;
int argvi = 0;
@@ -25131,7 +21958,7 @@ XS(_wrap_svn_client_copy6) {
{
_global_pool = arg10 = svn_swig_pl_make_pool (ST(items-1));
}
- if ((items < 9) || (items > 10)) {
+ if ((items < 8) || (items > 9)) {
SWIG_croak("Usage: svn_client_copy6(sources,dst_path,copy_as_child,make_parents,ignore_externals,revprop_table,commit_callback,commit_baton,ctx,pool);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
@@ -25159,27 +21986,22 @@ XS(_wrap_svn_client_copy6) {
SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_client_copy6" "', argument " "5"" of type '" "svn_boolean_t""'");
}
arg5 = (svn_boolean_t)(val5);
- res6 = SWIG_AsCharPtrAndSize(ST(5), &buf6, NULL, &alloc6);
- if (!SWIG_IsOK(res6)) {
- SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_client_copy6" "', argument " "6"" of type '" "apr_hash_t const *""'");
- }
- arg6 = (apr_hash_t *)(buf6);
{
- int res = SWIG_ConvertFunctionPtr(ST(6), (void**)(&arg7), SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_client_copy6" "', argument " "7"" of type '" "svn_commit_callback2_t""'");
- }
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg6 = svn_swig_pl_hash_to_prophash(ST(5), _global_pool);
}
- res8 = SWIG_ConvertPtr(ST(7),SWIG_as_voidptrptr(&arg8), 0, 0);
- if (!SWIG_IsOK(res8)) {
- SWIG_exception_fail(SWIG_ArgError(res8), "in method '" "svn_client_copy6" "', argument " "8"" of type '" "void *""'");
+ {
+ arg7 = svn_swig_pl_thunk_commit_callback2;
+ arg8 = (void *)ST(6);
+ svn_swig_pl_hold_ref_in_pool (_global_pool, ST(6));
}
- res9 = SWIG_ConvertPtr(ST(8), &argp9,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ res9 = SWIG_ConvertPtr(ST(7), &argp9,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res9)) {
SWIG_exception_fail(SWIG_ArgError(res9), "in method '" "svn_client_copy6" "', argument " "9"" of type '" "svn_client_ctx_t *""'");
}
arg9 = (svn_client_ctx_t *)(argp9);
- if (items > 9) {
+ if (items > 8) {
}
{
@@ -25209,8 +22031,6 @@ XS(_wrap_svn_client_copy6) {
- if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
-
@@ -25221,8 +22041,6 @@ XS(_wrap_svn_client_copy6) {
- if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
-
@@ -25255,9 +22073,6 @@ XS(_wrap_svn_client_copy5) {
int ecode5 = 0 ;
int val6 ;
int ecode6 = 0 ;
- int res7 ;
- char *buf7 = 0 ;
- int alloc7 = 0 ;
void *argp8 = 0 ;
int res8 = 0 ;
int argvi = 0;
@@ -25296,11 +22111,11 @@ XS(_wrap_svn_client_copy5) {
SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_client_copy5" "', argument " "6"" of type '" "svn_boolean_t""'");
}
arg6 = (svn_boolean_t)(val6);
- res7 = SWIG_AsCharPtrAndSize(ST(5), &buf7, NULL, &alloc7);
- if (!SWIG_IsOK(res7)) {
- SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_client_copy5" "', argument " "7"" of type '" "apr_hash_t const *""'");
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg7 = svn_swig_pl_hash_to_prophash(ST(5), _global_pool);
}
- arg7 = (apr_hash_t *)(buf7);
res8 = SWIG_ConvertPtr(ST(6), &argp8,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res8)) {
SWIG_exception_fail(SWIG_ArgError(res8), "in method '" "svn_client_copy5" "', argument " "8"" of type '" "svn_client_ctx_t *""'");
@@ -25340,7 +22155,7 @@ XS(_wrap_svn_client_copy5) {
- if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+
XSRETURN(argvi);
@@ -25351,7 +22166,7 @@ XS(_wrap_svn_client_copy5) {
- if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+
SWIG_croak_null();
@@ -25380,9 +22195,6 @@ XS(_wrap_svn_client_copy4) {
int ecode4 = 0 ;
int val5 ;
int ecode5 = 0 ;
- int res6 ;
- char *buf6 = 0 ;
- int alloc6 = 0 ;
void *argp7 = 0 ;
int res7 = 0 ;
int argvi = 0;
@@ -25416,11 +22228,11 @@ XS(_wrap_svn_client_copy4) {
SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_client_copy4" "', argument " "5"" of type '" "svn_boolean_t""'");
}
arg5 = (svn_boolean_t)(val5);
- res6 = SWIG_AsCharPtrAndSize(ST(4), &buf6, NULL, &alloc6);
- if (!SWIG_IsOK(res6)) {
- SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_client_copy4" "', argument " "6"" of type '" "apr_hash_t const *""'");
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg6 = svn_swig_pl_hash_to_prophash(ST(4), _global_pool);
}
- arg6 = (apr_hash_t *)(buf6);
res7 = SWIG_ConvertPtr(ST(5), &argp7,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res7)) {
SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_client_copy4" "', argument " "7"" of type '" "svn_client_ctx_t *""'");
@@ -25459,7 +22271,7 @@ XS(_wrap_svn_client_copy4) {
if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
- if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+
XSRETURN(argvi);
@@ -25469,7 +22281,7 @@ XS(_wrap_svn_client_copy4) {
if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
- if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+
SWIG_croak_null();
@@ -25513,53 +22325,7 @@ XS(_wrap_svn_client_copy3) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(1), TRUE);
}
res4 = SWIG_AsCharPtrAndSize(ST(2), &buf4, NULL, &alloc4);
if (!SWIG_IsOK(res4)) {
@@ -25654,53 +22420,7 @@ XS(_wrap_svn_client_copy2) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(1), TRUE);
}
res4 = SWIG_AsCharPtrAndSize(ST(2), &buf4, NULL, &alloc4);
if (!SWIG_IsOK(res4)) {
@@ -25795,53 +22515,7 @@ XS(_wrap_svn_client_copy) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(1), TRUE);
}
res4 = SWIG_AsCharPtrAndSize(ST(2), &buf4, NULL, &alloc4);
if (!SWIG_IsOK(res4)) {
@@ -25904,6 +22578,137 @@ XS(_wrap_svn_client_copy) {
}
+XS(_wrap_svn_client_move7) {
+ {
+ apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ svn_boolean_t arg5 ;
+ svn_boolean_t arg6 ;
+ apr_hash_t *arg7 = (apr_hash_t *) 0 ;
+ svn_commit_callback2_t arg8 = (svn_commit_callback2_t) 0 ;
+ void *arg9 = (void *) 0 ;
+ svn_client_ctx_t *arg10 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg11 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int val3 ;
+ int ecode3 = 0 ;
+ int val4 ;
+ int ecode4 = 0 ;
+ int val5 ;
+ int ecode5 = 0 ;
+ int val6 ;
+ int ecode6 = 0 ;
+ void *argp10 = 0 ;
+ int res10 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg11 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 9) || (items > 10)) {
+ SWIG_croak("Usage: svn_client_move7(src_paths,dst_path,move_as_child,make_parents,allow_mixed_revisions,metadata_only,revprop_table,commit_callback,commit_baton,ctx,pool);");
+ }
+ {
+ arg1 = (apr_array_header_t *) svn_swig_pl_strings_to_array(ST(0),
+ _global_pool);
+ }
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_move7" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3);
+ if (!SWIG_IsOK(ecode3)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "svn_client_move7" "', argument " "3"" of type '" "svn_boolean_t""'");
+ }
+ arg3 = (svn_boolean_t)(val3);
+ ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_client_move7" "', argument " "4"" of type '" "svn_boolean_t""'");
+ }
+ arg4 = (svn_boolean_t)(val4);
+ ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val5);
+ if (!SWIG_IsOK(ecode5)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_client_move7" "', argument " "5"" of type '" "svn_boolean_t""'");
+ }
+ arg5 = (svn_boolean_t)(val5);
+ ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val6);
+ if (!SWIG_IsOK(ecode6)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_client_move7" "', argument " "6"" of type '" "svn_boolean_t""'");
+ }
+ arg6 = (svn_boolean_t)(val6);
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg7 = svn_swig_pl_hash_to_prophash(ST(6), _global_pool);
+ }
+ {
+ arg8 = svn_swig_pl_thunk_commit_callback2;
+ arg9 = (void *)ST(7);
+ svn_swig_pl_hold_ref_in_pool (_global_pool, ST(7));
+ }
+ res10 = SWIG_ConvertPtr(ST(8), &argp10,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res10)) {
+ SWIG_exception_fail(SWIG_ArgError(res10), "in method '" "svn_client_move7" "', argument " "10"" of type '" "svn_client_ctx_t *""'");
+ }
+ arg10 = (svn_client_ctx_t *)(argp10);
+ if (items > 9) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_move7((apr_array_header_t const *)arg1,(char const *)arg2,arg3,arg4,arg5,arg6,(apr_hash_t const *)arg7,arg8,arg9,arg10,arg11);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_client_move6) {
{
apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
@@ -25923,10 +22728,6 @@ XS(_wrap_svn_client_move6) {
int ecode3 = 0 ;
int val4 ;
int ecode4 = 0 ;
- int res5 ;
- char *buf5 = 0 ;
- int alloc5 = 0 ;
- int res7 ;
void *argp8 = 0 ;
int res8 = 0 ;
int argvi = 0;
@@ -25936,7 +22737,7 @@ XS(_wrap_svn_client_move6) {
{
_global_pool = arg9 = svn_swig_pl_make_pool (ST(items-1));
}
- if ((items < 8) || (items > 9)) {
+ if ((items < 7) || (items > 8)) {
SWIG_croak("Usage: svn_client_move6(src_paths,dst_path,move_as_child,make_parents,revprop_table,commit_callback,commit_baton,ctx,pool);");
}
{
@@ -25958,27 +22759,22 @@ XS(_wrap_svn_client_move6) {
SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_client_move6" "', argument " "4"" of type '" "svn_boolean_t""'");
}
arg4 = (svn_boolean_t)(val4);
- res5 = SWIG_AsCharPtrAndSize(ST(4), &buf5, NULL, &alloc5);
- if (!SWIG_IsOK(res5)) {
- SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_client_move6" "', argument " "5"" of type '" "apr_hash_t const *""'");
- }
- arg5 = (apr_hash_t *)(buf5);
{
- int res = SWIG_ConvertFunctionPtr(ST(5), (void**)(&arg6), SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_client_move6" "', argument " "6"" of type '" "svn_commit_callback2_t""'");
- }
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg5 = svn_swig_pl_hash_to_prophash(ST(4), _global_pool);
}
- res7 = SWIG_ConvertPtr(ST(6),SWIG_as_voidptrptr(&arg7), 0, 0);
- if (!SWIG_IsOK(res7)) {
- SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_client_move6" "', argument " "7"" of type '" "void *""'");
+ {
+ arg6 = svn_swig_pl_thunk_commit_callback2;
+ arg7 = (void *)ST(5);
+ svn_swig_pl_hold_ref_in_pool (_global_pool, ST(5));
}
- res8 = SWIG_ConvertPtr(ST(7), &argp8,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ res8 = SWIG_ConvertPtr(ST(6), &argp8,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res8)) {
SWIG_exception_fail(SWIG_ArgError(res8), "in method '" "svn_client_move6" "', argument " "8"" of type '" "svn_client_ctx_t *""'");
}
arg8 = (svn_client_ctx_t *)(argp8);
- if (items > 8) {
+ if (items > 7) {
}
{
@@ -26007,8 +22803,6 @@ XS(_wrap_svn_client_move6) {
if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
- if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
-
@@ -26018,8 +22812,6 @@ XS(_wrap_svn_client_move6) {
if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
- if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
-
@@ -26050,9 +22842,6 @@ XS(_wrap_svn_client_move5) {
int ecode5 = 0 ;
int val6 ;
int ecode6 = 0 ;
- int res7 ;
- char *buf7 = 0 ;
- int alloc7 = 0 ;
void *argp8 = 0 ;
int res8 = 0 ;
int argvi = 0;
@@ -26090,11 +22879,11 @@ XS(_wrap_svn_client_move5) {
SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_client_move5" "', argument " "6"" of type '" "svn_boolean_t""'");
}
arg6 = (svn_boolean_t)(val6);
- res7 = SWIG_AsCharPtrAndSize(ST(5), &buf7, NULL, &alloc7);
- if (!SWIG_IsOK(res7)) {
- SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_client_move5" "', argument " "7"" of type '" "apr_hash_t const *""'");
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg7 = svn_swig_pl_hash_to_prophash(ST(5), _global_pool);
}
- arg7 = (apr_hash_t *)(buf7);
res8 = SWIG_ConvertPtr(ST(6), &argp8,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res8)) {
SWIG_exception_fail(SWIG_ArgError(res8), "in method '" "svn_client_move5" "', argument " "8"" of type '" "svn_client_ctx_t *""'");
@@ -26134,7 +22923,7 @@ XS(_wrap_svn_client_move5) {
- if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+
XSRETURN(argvi);
@@ -26145,7 +22934,7 @@ XS(_wrap_svn_client_move5) {
- if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+
SWIG_croak_null();
@@ -26490,53 +23279,7 @@ XS(_wrap_svn_client_move) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(1), TRUE);
}
res4 = SWIG_AsCharPtrAndSize(ST(2), &buf4, NULL, &alloc4);
if (!SWIG_IsOK(res4)) {
@@ -26630,10 +23373,6 @@ XS(_wrap_svn_client_propset_remote) {
int ecode4 = 0 ;
long val5 ;
int ecode5 = 0 ;
- int res6 ;
- char *buf6 = 0 ;
- int alloc6 = 0 ;
- int res8 ;
void *argp9 = 0 ;
int res9 = 0 ;
int argvi = 0;
@@ -26643,7 +23382,7 @@ XS(_wrap_svn_client_propset_remote) {
{
_global_pool = arg10 = svn_swig_pl_make_pool (ST(items-1));
}
- if ((items < 9) || (items > 10)) {
+ if ((items < 8) || (items > 9)) {
SWIG_croak("Usage: svn_client_propset_remote(propname,propval,url,skip_checks,base_revision_for_url,revprop_table,commit_callback,commit_baton,ctx,scratch_pool);");
}
res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
@@ -26675,27 +23414,22 @@ XS(_wrap_svn_client_propset_remote) {
SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_client_propset_remote" "', argument " "5"" of type '" "svn_revnum_t""'");
}
arg5 = (svn_revnum_t)(val5);
- res6 = SWIG_AsCharPtrAndSize(ST(5), &buf6, NULL, &alloc6);
- if (!SWIG_IsOK(res6)) {
- SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_client_propset_remote" "', argument " "6"" of type '" "apr_hash_t const *""'");
- }
- arg6 = (apr_hash_t *)(buf6);
{
- int res = SWIG_ConvertFunctionPtr(ST(6), (void**)(&arg7), SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_client_propset_remote" "', argument " "7"" of type '" "svn_commit_callback2_t""'");
- }
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg6 = svn_swig_pl_hash_to_prophash(ST(5), _global_pool);
}
- res8 = SWIG_ConvertPtr(ST(7),SWIG_as_voidptrptr(&arg8), 0, 0);
- if (!SWIG_IsOK(res8)) {
- SWIG_exception_fail(SWIG_ArgError(res8), "in method '" "svn_client_propset_remote" "', argument " "8"" of type '" "void *""'");
+ {
+ arg7 = svn_swig_pl_thunk_commit_callback2;
+ arg8 = (void *)ST(6);
+ svn_swig_pl_hold_ref_in_pool (_global_pool, ST(6));
}
- res9 = SWIG_ConvertPtr(ST(8), &argp9,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ res9 = SWIG_ConvertPtr(ST(7), &argp9,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res9)) {
SWIG_exception_fail(SWIG_ArgError(res9), "in method '" "svn_client_propset_remote" "', argument " "9"" of type '" "svn_client_ctx_t *""'");
}
arg9 = (svn_client_ctx_t *)(argp9);
- if (items > 9) {
+ if (items > 8) {
}
{
@@ -26725,8 +23459,6 @@ XS(_wrap_svn_client_propset_remote) {
if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
- if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
-
@@ -26737,8 +23469,6 @@ XS(_wrap_svn_client_propset_remote) {
if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
- if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
-
@@ -26766,9 +23496,6 @@ XS(_wrap_svn_client_propset_local) {
int ecode4 = 0 ;
int val5 ;
int ecode5 = 0 ;
- int res6 ;
- char *buf6 = 0 ;
- int alloc6 = 0 ;
void *argp7 = 0 ;
int res7 = 0 ;
int argvi = 0;
@@ -26809,11 +23536,10 @@ XS(_wrap_svn_client_propset_local) {
SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_client_propset_local" "', argument " "5"" of type '" "svn_boolean_t""'");
}
arg5 = (svn_boolean_t)(val5);
- res6 = SWIG_AsCharPtrAndSize(ST(5), &buf6, NULL, &alloc6);
- if (!SWIG_IsOK(res6)) {
- SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_client_propset_local" "', argument " "6"" of type '" "apr_array_header_t const *""'");
+ {
+ arg6 = SvOK(ST(5)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(5), _global_pool) : NULL;
}
- arg6 = (apr_array_header_t *)(buf6);
res7 = SWIG_ConvertPtr(ST(6), &argp7,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res7)) {
SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_client_propset_local" "', argument " "7"" of type '" "svn_client_ctx_t *""'");
@@ -26849,7 +23575,7 @@ XS(_wrap_svn_client_propset_local) {
- if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+
XSRETURN(argvi);
@@ -26859,7 +23585,7 @@ XS(_wrap_svn_client_propset_local) {
- if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+
SWIG_croak_null();
@@ -26895,12 +23621,6 @@ XS(_wrap_svn_client_propset3) {
int ecode6 = 0 ;
long val7 ;
int ecode7 = 0 ;
- int res8 ;
- char *buf8 = 0 ;
- int alloc8 = 0 ;
- int res9 ;
- char *buf9 = 0 ;
- int alloc9 = 0 ;
void *argp10 = 0 ;
int res10 = 0 ;
int argvi = 0;
@@ -26948,16 +23668,15 @@ XS(_wrap_svn_client_propset3) {
SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "svn_client_propset3" "', argument " "7"" of type '" "svn_revnum_t""'");
}
arg7 = (svn_revnum_t)(val7);
- res8 = SWIG_AsCharPtrAndSize(ST(6), &buf8, NULL, &alloc8);
- if (!SWIG_IsOK(res8)) {
- SWIG_exception_fail(SWIG_ArgError(res8), "in method '" "svn_client_propset3" "', argument " "8"" of type '" "apr_array_header_t const *""'");
+ {
+ arg8 = SvOK(ST(6)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(6), _global_pool) : NULL;
}
- arg8 = (apr_array_header_t *)(buf8);
- res9 = SWIG_AsCharPtrAndSize(ST(7), &buf9, NULL, &alloc9);
- if (!SWIG_IsOK(res9)) {
- SWIG_exception_fail(SWIG_ArgError(res9), "in method '" "svn_client_propset3" "', argument " "9"" of type '" "apr_hash_t const *""'");
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg9 = svn_swig_pl_hash_to_prophash(ST(7), _global_pool);
}
- arg9 = (apr_hash_t *)(buf9);
res10 = SWIG_ConvertPtr(ST(8), &argp10,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res10)) {
SWIG_exception_fail(SWIG_ArgError(res10), "in method '" "svn_client_propset3" "', argument " "10"" of type '" "svn_client_ctx_t *""'");
@@ -26998,8 +23717,8 @@ XS(_wrap_svn_client_propset3) {
- if (alloc8 == SWIG_NEWOBJ) free((char*)buf8);
- if (alloc9 == SWIG_NEWOBJ) free((char*)buf9);
+
+
XSRETURN(argvi);
@@ -27011,8 +23730,8 @@ XS(_wrap_svn_client_propset3) {
- if (alloc8 == SWIG_NEWOBJ) free((char*)buf8);
- if (alloc9 == SWIG_NEWOBJ) free((char*)buf9);
+
+
SWIG_croak_null();
@@ -27293,53 +24012,7 @@ XS(_wrap_svn_client_revprop_set2) {
}
arg4 = (char *)(buf4);
{
- arg5 = &rev5;
- if (ST(4) == NULL || ST(4) == &PL_sv_undef || !SvOK(ST(4))) {
- rev5.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(4)) && sv_derived_from(ST(4), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(4), (void **)&arg5, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(4))) {
- rev5.kind = svn_opt_revision_number;
- rev5.value.number = SvIV(ST(4));
- }
- else if (SvPOK(ST(4))) {
- char *input = SvPV_nolen(ST(4));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev5.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev5.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev5.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev5.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev5.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev5.kind = svn_opt_revision_date;
- rev5.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(4), TRUE);
}
ecode7 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val7);
if (!SWIG_IsOK(ecode7)) {
@@ -27468,53 +24141,7 @@ XS(_wrap_svn_client_revprop_set) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
}
ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val6);
if (!SWIG_IsOK(ecode6)) {
@@ -27585,6 +24212,170 @@ XS(_wrap_svn_client_revprop_set) {
}
+XS(_wrap_svn_client_propget5) {
+ {
+ apr_hash_t **arg1 = (apr_hash_t **) 0 ;
+ apr_array_header_t **arg2 = (apr_array_header_t **) 0 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+ svn_opt_revision_t *arg5 = (svn_opt_revision_t *) 0 ;
+ svn_opt_revision_t *arg6 = (svn_opt_revision_t *) 0 ;
+ svn_revnum_t *arg7 = (svn_revnum_t *) 0 ;
+ svn_depth_t arg8 ;
+ apr_array_header_t *arg9 = (apr_array_header_t *) 0 ;
+ svn_client_ctx_t *arg10 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg11 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg12 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ apr_hash_t *temp1 ;
+ apr_array_header_t *temp2 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ svn_opt_revision_t rev5 ;
+ svn_opt_revision_t rev6 ;
+ svn_revnum_t temp7 ;
+ int res7 = SWIG_TMPOBJ ;
+ int val8 ;
+ int ecode8 = 0 ;
+ void *argp10 = 0 ;
+ int res10 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg11 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ {
+ _global_pool = arg12 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ arg2 = &temp2;
+ arg7 = &temp7;
+ if ((items < 7) || (items > 9)) {
+ SWIG_croak("Usage: svn_client_propget5(propname,target,peg_revision,revision,depth,changelists,ctx,result_pool,scratch_pool);");
+ }
+ res3 = SWIG_AsCharPtrAndSize(ST(0), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_client_propget5" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = (char *)(buf3);
+ res4 = SWIG_AsCharPtrAndSize(ST(1), &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_client_propget5" "', argument " "4"" of type '" "char const *""'");
+ }
+ arg4 = (char *)(buf4);
+ {
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(2), TRUE);
+ }
+ {
+ arg6 = svn_swig_pl_set_revision(&rev6, ST(3), TRUE);
+ }
+ ecode8 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val8);
+ if (!SWIG_IsOK(ecode8)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "svn_client_propget5" "', argument " "8"" of type '" "svn_depth_t""'");
+ }
+ arg8 = (svn_depth_t)(val8);
+ {
+ arg9 = SvOK(ST(5)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(5), _global_pool) : NULL;
+ }
+ res10 = SWIG_ConvertPtr(ST(6), &argp10,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res10)) {
+ SWIG_exception_fail(SWIG_ArgError(res10), "in method '" "svn_client_propget5" "', argument " "10"" of type '" "svn_client_ctx_t *""'");
+ }
+ arg10 = (svn_client_ctx_t *)(argp10);
+ if (items > 7) {
+
+ }
+ if (items > 8) {
+
+ }
+ {
+ if (!arg5) {
+ SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
+ }
+ }
+ {
+ if (!arg6) {
+ SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
+ }
+ }
+ {
+ result = (svn_error_t *)svn_client_propget5(arg1,arg2,(char const *)arg3,(char const *)arg4,(struct svn_opt_revision_t const *)arg5,(struct svn_opt_revision_t const *)arg6,arg7,arg8,(apr_array_header_t const *)arg9,arg10,arg11,arg12);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = svn_swig_pl_prophash_to_hash(*arg1); argvi++ ;
+ }
+ {
+ /* FIXME: Missing argout typemap: svn_client_propget5 arg 2 (apr_array_header_t **) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_client_propget5 is not implemented yet");
+
+ }
+ if (SWIG_IsTmpObj(res7)) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((*arg7)); argvi++ ;
+ } else {
+ int new_flags = SWIG_IsNewObj(res7) ? (SWIG_POINTER_OWN | 0) : 0;
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg7), SWIGTYPE_p_long, new_flags); argvi++ ;
+ }
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+
+
+
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+
+
+
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_client_propget4) {
{
apr_hash_t **arg1 = (apr_hash_t **) 0 ;
@@ -27612,9 +24403,6 @@ XS(_wrap_svn_client_propget4) {
int res6 = SWIG_TMPOBJ ;
int val7 ;
int ecode7 = 0 ;
- int res8 ;
- char *buf8 = 0 ;
- int alloc8 = 0 ;
void *argp9 = 0 ;
int res9 = 0 ;
int argvi = 0;
@@ -27643,113 +24431,20 @@ XS(_wrap_svn_client_propget4) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg5 = &rev5;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev5.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg5, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev5.kind = svn_opt_revision_number;
- rev5.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev5.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev5.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev5.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev5.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev5.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev5.kind = svn_opt_revision_date;
- rev5.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(2), TRUE);
+ }
+ {
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(3), TRUE);
}
ecode7 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val7);
if (!SWIG_IsOK(ecode7)) {
SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "svn_client_propget4" "', argument " "7"" of type '" "svn_depth_t""'");
}
arg7 = (svn_depth_t)(val7);
- res8 = SWIG_AsCharPtrAndSize(ST(5), &buf8, NULL, &alloc8);
- if (!SWIG_IsOK(res8)) {
- SWIG_exception_fail(SWIG_ArgError(res8), "in method '" "svn_client_propget4" "', argument " "8"" of type '" "apr_array_header_t const *""'");
+ {
+ arg8 = SvOK(ST(5)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(5), _global_pool) : NULL;
}
- arg8 = (apr_array_header_t *)(buf8);
res9 = SWIG_ConvertPtr(ST(6), &argp9,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res9)) {
SWIG_exception_fail(SWIG_ArgError(res9), "in method '" "svn_client_propget4" "', argument " "9"" of type '" "svn_client_ctx_t *""'");
@@ -27809,7 +24504,7 @@ XS(_wrap_svn_client_propget4) {
- if (alloc8 == SWIG_NEWOBJ) free((char*)buf8);
+
@@ -27822,7 +24517,7 @@ XS(_wrap_svn_client_propget4) {
- if (alloc8 == SWIG_NEWOBJ) free((char*)buf8);
+
@@ -27857,9 +24552,6 @@ XS(_wrap_svn_client_propget3) {
int res6 = SWIG_TMPOBJ ;
int val7 ;
int ecode7 = 0 ;
- int res8 ;
- char *buf8 = 0 ;
- int alloc8 = 0 ;
void *argp9 = 0 ;
int res9 = 0 ;
int argvi = 0;
@@ -27885,113 +24577,20 @@ XS(_wrap_svn_client_propget3) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg5 = &rev5;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev5.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg5, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev5.kind = svn_opt_revision_number;
- rev5.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev5.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev5.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev5.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev5.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev5.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev5.kind = svn_opt_revision_date;
- rev5.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(2), TRUE);
+ }
+ {
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(3), TRUE);
}
ecode7 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val7);
if (!SWIG_IsOK(ecode7)) {
SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "svn_client_propget3" "', argument " "7"" of type '" "svn_depth_t""'");
}
arg7 = (svn_depth_t)(val7);
- res8 = SWIG_AsCharPtrAndSize(ST(5), &buf8, NULL, &alloc8);
- if (!SWIG_IsOK(res8)) {
- SWIG_exception_fail(SWIG_ArgError(res8), "in method '" "svn_client_propget3" "', argument " "8"" of type '" "apr_array_header_t const *""'");
+ {
+ arg8 = SvOK(ST(5)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(5), _global_pool) : NULL;
}
- arg8 = (apr_array_header_t *)(buf8);
res9 = SWIG_ConvertPtr(ST(6), &argp9,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res9)) {
SWIG_exception_fail(SWIG_ArgError(res9), "in method '" "svn_client_propget3" "', argument " "9"" of type '" "svn_client_ctx_t *""'");
@@ -28048,7 +24647,7 @@ XS(_wrap_svn_client_propget3) {
- if (alloc8 == SWIG_NEWOBJ) free((char*)buf8);
+
XSRETURN(argvi);
@@ -28060,7 +24659,7 @@ XS(_wrap_svn_client_propget3) {
- if (alloc8 == SWIG_NEWOBJ) free((char*)buf8);
+
SWIG_croak_null();
@@ -28114,102 +24713,10 @@ XS(_wrap_svn_client_propget2) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg5 = &rev5;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev5.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg5, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev5.kind = svn_opt_revision_number;
- rev5.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev5.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev5.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev5.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev5.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev5.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev5.kind = svn_opt_revision_date;
- rev5.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(2), TRUE);
+ }
+ {
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(3), TRUE);
}
ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val6);
if (!SWIG_IsOK(ecode6)) {
@@ -28326,53 +24833,7 @@ XS(_wrap_svn_client_propget) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(2), TRUE);
}
ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val5);
if (!SWIG_IsOK(ecode5)) {
@@ -28483,53 +24944,7 @@ XS(_wrap_svn_client_revprop_get) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(2), TRUE);
}
res6 = SWIG_ConvertPtr(ST(3), &argp6,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res6)) {
@@ -28600,6 +25015,143 @@ XS(_wrap_svn_client_revprop_get) {
}
+XS(_wrap_svn_client_proplist4) {
+ {
+ char *arg1 = (char *) 0 ;
+ svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
+ svn_opt_revision_t *arg3 = (svn_opt_revision_t *) 0 ;
+ svn_depth_t arg4 ;
+ apr_array_header_t *arg5 = (apr_array_header_t *) 0 ;
+ svn_boolean_t arg6 ;
+ svn_proplist_receiver2_t arg7 = (svn_proplist_receiver2_t) 0 ;
+ void *arg8 = (void *) 0 ;
+ svn_client_ctx_t *arg9 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg10 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ svn_opt_revision_t rev2 ;
+ svn_opt_revision_t rev3 ;
+ int val4 ;
+ int ecode4 = 0 ;
+ int val6 ;
+ int ecode6 = 0 ;
+ int res8 ;
+ void *argp9 = 0 ;
+ int res9 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg10 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 9) || (items > 10)) {
+ SWIG_croak("Usage: svn_client_proplist4(target,peg_revision,revision,depth,changelists,get_target_inherited_props,receiver,receiver_baton,ctx,scratch_pool);");
+ }
+ res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_proplist4" "', argument " "1"" of type '" "char const *""'");
+ }
+ arg1 = (char *)(buf1);
+ {
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
+ }
+ {
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
+ }
+ ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_client_proplist4" "', argument " "4"" of type '" "svn_depth_t""'");
+ }
+ arg4 = (svn_depth_t)(val4);
+ {
+ arg5 = SvOK(ST(4)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(4), _global_pool) : NULL;
+ }
+ ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val6);
+ if (!SWIG_IsOK(ecode6)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_client_proplist4" "', argument " "6"" of type '" "svn_boolean_t""'");
+ }
+ arg6 = (svn_boolean_t)(val6);
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(6), (void**)(&arg7), SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_client_proplist4" "', argument " "7"" of type '" "svn_proplist_receiver2_t""'");
+ }
+ }
+ res8 = SWIG_ConvertPtr(ST(7),SWIG_as_voidptrptr(&arg8), 0, 0);
+ if (!SWIG_IsOK(res8)) {
+ SWIG_exception_fail(SWIG_ArgError(res8), "in method '" "svn_client_proplist4" "', argument " "8"" of type '" "void *""'");
+ }
+ res9 = SWIG_ConvertPtr(ST(8), &argp9,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res9)) {
+ SWIG_exception_fail(SWIG_ArgError(res9), "in method '" "svn_client_proplist4" "', argument " "9"" of type '" "svn_client_ctx_t *""'");
+ }
+ arg9 = (svn_client_ctx_t *)(argp9);
+ if (items > 9) {
+
+ }
+ {
+ if (!arg2) {
+ SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
+ }
+ }
+ {
+ if (!arg3) {
+ SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
+ }
+ }
+ {
+ result = (svn_error_t *)svn_client_proplist4((char const *)arg1,(struct svn_opt_revision_t const *)arg2,(struct svn_opt_revision_t const *)arg3,arg4,(apr_array_header_t const *)arg5,arg6,arg7,arg8,arg9,arg10);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+
+
+
+
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+
+
+
+
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_client_proplist3) {
{
char *arg1 = (char *) 0 ;
@@ -28619,9 +25171,6 @@ XS(_wrap_svn_client_proplist3) {
svn_opt_revision_t rev3 ;
int val4 ;
int ecode4 = 0 ;
- int res5 ;
- char *buf5 = 0 ;
- int alloc5 = 0 ;
int res7 ;
void *argp8 = 0 ;
int res8 = 0 ;
@@ -28641,113 +25190,20 @@ XS(_wrap_svn_client_proplist3) {
}
arg1 = (char *)(buf1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
+ }
+ {
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
}
ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val4);
if (!SWIG_IsOK(ecode4)) {
SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_client_proplist3" "', argument " "4"" of type '" "svn_depth_t""'");
}
arg4 = (svn_depth_t)(val4);
- res5 = SWIG_AsCharPtrAndSize(ST(4), &buf5, NULL, &alloc5);
- if (!SWIG_IsOK(res5)) {
- SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_client_proplist3" "', argument " "5"" of type '" "apr_array_header_t const *""'");
+ {
+ arg5 = SvOK(ST(4)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(4), _global_pool) : NULL;
}
- arg5 = (apr_array_header_t *)(buf5);
{
int res = SWIG_ConvertFunctionPtr(ST(5), (void**)(&arg6), SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -28802,7 +25258,7 @@ XS(_wrap_svn_client_proplist3) {
- if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+
@@ -28813,7 +25269,7 @@ XS(_wrap_svn_client_proplist3) {
- if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+
@@ -28860,102 +25316,10 @@ XS(_wrap_svn_client_proplist2) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg4 = &rev4;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(1), TRUE);
+ }
+ {
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(2), TRUE);
}
ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val5);
if (!SWIG_IsOK(ecode5)) {
@@ -29003,7 +25367,7 @@ XS(_wrap_svn_client_proplist2) {
}
}
{
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,59,%append_output@*/ if (argvi >= items) EXTEND(sp,1); /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,56,%set_output@*/ ST(argvi) = svn_swig_pl_convert_array(*arg1,
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,59,%append_output@*/ if (argvi >= items) EXTEND(sp,1); /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,56,%set_output@*/ ST(argvi) = svn_swig_pl_convert_array(*arg1,
SWIGTYPE_p_svn_client_proplist_item_t); argvi++ /*@SWIG@*/
/*@SWIG@*/
;
@@ -29064,53 +25428,7 @@ XS(_wrap_svn_client_proplist) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(1), TRUE);
}
ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val4);
if (!SWIG_IsOK(ecode4)) {
@@ -29153,7 +25471,7 @@ XS(_wrap_svn_client_proplist) {
}
}
{
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,59,%append_output@*/ if (argvi >= items) EXTEND(sp,1); /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,56,%set_output@*/ ST(argvi) = svn_swig_pl_convert_array(*arg1,
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,59,%append_output@*/ if (argvi >= items) EXTEND(sp,1); /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,56,%set_output@*/ ST(argvi) = svn_swig_pl_convert_array(*arg1,
SWIGTYPE_p_svn_client_proplist_item_t); argvi++ /*@SWIG@*/
/*@SWIG@*/
;
@@ -29213,53 +25531,7 @@ XS(_wrap_svn_client_revprop_list) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(1), TRUE);
}
res5 = SWIG_ConvertPtr(ST(2), &argp5,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res5)) {
@@ -29384,102 +25656,10 @@ XS(_wrap_svn_client_export5) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg5 = &rev5;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev5.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg5, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev5.kind = svn_opt_revision_number;
- rev5.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev5.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev5.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev5.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev5.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev5.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev5.kind = svn_opt_revision_date;
- rev5.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(2), TRUE);
+ }
+ {
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(3), TRUE);
}
ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val6);
if (!SWIG_IsOK(ecode6)) {
@@ -29640,102 +25820,10 @@ XS(_wrap_svn_client_export4) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg5 = &rev5;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev5.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg5, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev5.kind = svn_opt_revision_number;
- rev5.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev5.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev5.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev5.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev5.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev5.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev5.kind = svn_opt_revision_date;
- rev5.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(2), TRUE);
+ }
+ {
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(3), TRUE);
}
ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val6);
if (!SWIG_IsOK(ecode6)) {
@@ -29889,102 +25977,10 @@ XS(_wrap_svn_client_export3) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg5 = &rev5;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev5.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg5, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev5.kind = svn_opt_revision_number;
- rev5.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev5.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev5.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev5.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev5.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev5.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev5.kind = svn_opt_revision_date;
- rev5.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(2), TRUE);
+ }
+ {
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(3), TRUE);
}
ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val6);
if (!SWIG_IsOK(ecode6)) {
@@ -30130,53 +26126,7 @@ XS(_wrap_svn_client_export2) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(2), TRUE);
}
ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val5);
if (!SWIG_IsOK(ecode5)) {
@@ -30292,53 +26242,7 @@ XS(_wrap_svn_client_export) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(2), TRUE);
}
ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val5);
if (!SWIG_IsOK(ecode5)) {
@@ -30402,6 +26306,156 @@ XS(_wrap_svn_client_export) {
}
+XS(_wrap_svn_client_list3) {
+ {
+ char *arg1 = (char *) 0 ;
+ svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
+ svn_opt_revision_t *arg3 = (svn_opt_revision_t *) 0 ;
+ svn_depth_t arg4 ;
+ apr_uint32_t arg5 ;
+ svn_boolean_t arg6 ;
+ svn_boolean_t arg7 ;
+ svn_client_list_func2_t arg8 = (svn_client_list_func2_t) 0 ;
+ void *arg9 = (void *) 0 ;
+ svn_client_ctx_t *arg10 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg11 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ svn_opt_revision_t rev2 ;
+ svn_opt_revision_t rev3 ;
+ int val4 ;
+ int ecode4 = 0 ;
+ unsigned long val5 ;
+ int ecode5 = 0 ;
+ int val6 ;
+ int ecode6 = 0 ;
+ int val7 ;
+ int ecode7 = 0 ;
+ int res9 ;
+ void *argp10 = 0 ;
+ int res10 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg11 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 10) || (items > 11)) {
+ SWIG_croak("Usage: svn_client_list3(path_or_url,peg_revision,revision,depth,dirent_fields,fetch_locks,include_externals,list_func,baton,ctx,pool);");
+ }
+ res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_list3" "', argument " "1"" of type '" "char const *""'");
+ }
+ arg1 = (char *)(buf1);
+ {
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
+ }
+ {
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
+ }
+ ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_client_list3" "', argument " "4"" of type '" "svn_depth_t""'");
+ }
+ arg4 = (svn_depth_t)(val4);
+ ecode5 = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(ST(4), &val5);
+ if (!SWIG_IsOK(ecode5)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_client_list3" "', argument " "5"" of type '" "apr_uint32_t""'");
+ }
+ arg5 = (apr_uint32_t)(val5);
+ ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val6);
+ if (!SWIG_IsOK(ecode6)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_client_list3" "', argument " "6"" of type '" "svn_boolean_t""'");
+ }
+ arg6 = (svn_boolean_t)(val6);
+ ecode7 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(6), &val7);
+ if (!SWIG_IsOK(ecode7)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "svn_client_list3" "', argument " "7"" of type '" "svn_boolean_t""'");
+ }
+ arg7 = (svn_boolean_t)(val7);
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(7), (void**)(&arg8), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_client_list3" "', argument " "8"" of type '" "svn_client_list_func2_t""'");
+ }
+ }
+ res9 = SWIG_ConvertPtr(ST(8),SWIG_as_voidptrptr(&arg9), 0, 0);
+ if (!SWIG_IsOK(res9)) {
+ SWIG_exception_fail(SWIG_ArgError(res9), "in method '" "svn_client_list3" "', argument " "9"" of type '" "void *""'");
+ }
+ res10 = SWIG_ConvertPtr(ST(9), &argp10,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res10)) {
+ SWIG_exception_fail(SWIG_ArgError(res10), "in method '" "svn_client_list3" "', argument " "10"" of type '" "svn_client_ctx_t *""'");
+ }
+ arg10 = (svn_client_ctx_t *)(argp10);
+ if (items > 10) {
+
+ }
+ {
+ if (!arg2) {
+ SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
+ }
+ }
+ {
+ if (!arg3) {
+ SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
+ }
+ }
+ {
+ result = (svn_error_t *)svn_client_list3((char const *)arg1,(struct svn_opt_revision_t const *)arg2,(struct svn_opt_revision_t const *)arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+
+
+
+
+
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+
+
+
+
+
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_client_list2) {
{
char *arg1 = (char *) 0 ;
@@ -30445,102 +26499,10 @@ XS(_wrap_svn_client_list2) {
}
arg1 = (char *)(buf1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
+ }
+ {
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
}
ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val4);
if (!SWIG_IsOK(ecode4)) {
@@ -30677,102 +26639,10 @@ XS(_wrap_svn_client_list) {
}
arg1 = (char *)(buf1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
+ }
+ {
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
}
ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val4);
if (!SWIG_IsOK(ecode4)) {
@@ -30906,102 +26776,10 @@ XS(_wrap_svn_client_ls3) {
}
arg3 = (char *)(buf3);
{
- arg4 = &rev4;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg5 = &rev5;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev5.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg5, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev5.kind = svn_opt_revision_number;
- rev5.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev5.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev5.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev5.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev5.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev5.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev5.kind = svn_opt_revision_date;
- rev5.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(1), TRUE);
+ }
+ {
+ arg5 = svn_swig_pl_set_revision(&rev5, ST(2), TRUE);
}
ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val6);
if (!SWIG_IsOK(ecode6)) {
@@ -31114,102 +26892,10 @@ XS(_wrap_svn_client_ls2) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg4 = &rev4;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(1), TRUE);
+ }
+ {
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(2), TRUE);
}
ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val5);
if (!SWIG_IsOK(ecode5)) {
@@ -31315,53 +27001,7 @@ XS(_wrap_svn_client_ls) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(1), TRUE);
}
ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val4);
if (!SWIG_IsOK(ecode4)) {
@@ -31455,102 +27095,10 @@ XS(_wrap_svn_client_cat2) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg4 = &rev4;
- if (ST(3) == NULL || ST(3) == &PL_sv_undef || !SvOK(ST(3))) {
- rev4.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(3)) && sv_derived_from(ST(3), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(3), (void **)&arg4, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(3))) {
- rev4.kind = svn_opt_revision_number;
- rev4.value.number = SvIV(ST(3));
- }
- else if (SvPOK(ST(3))) {
- char *input = SvPV_nolen(ST(3));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev4.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev4.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev4.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev4.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev4.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev4.kind = svn_opt_revision_date;
- rev4.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
+ }
+ {
+ arg4 = svn_swig_pl_set_revision(&rev4, ST(3), TRUE);
}
res5 = SWIG_ConvertPtr(ST(4), &argp5,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res5)) {
@@ -31644,53 +27192,7 @@ XS(_wrap_svn_client_cat) {
}
arg2 = (char *)(buf2);
{
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
}
res4 = SWIG_ConvertPtr(ST(3), &argp4,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res4)) {
@@ -31758,9 +27260,6 @@ XS(_wrap_svn_client_add_to_changelist) {
int alloc2 = 0 ;
int val3 ;
int ecode3 = 0 ;
- int res4 ;
- char *buf4 = 0 ;
- int alloc4 = 0 ;
void *argp5 = 0 ;
int res5 = 0 ;
int argvi = 0;
@@ -31787,11 +27286,10 @@ XS(_wrap_svn_client_add_to_changelist) {
SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "svn_client_add_to_changelist" "', argument " "3"" of type '" "svn_depth_t""'");
}
arg3 = (svn_depth_t)(val3);
- res4 = SWIG_AsCharPtrAndSize(ST(3), &buf4, NULL, &alloc4);
- if (!SWIG_IsOK(res4)) {
- SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_client_add_to_changelist" "', argument " "4"" of type '" "apr_array_header_t const *""'");
+ {
+ arg4 = SvOK(ST(3)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(3), _global_pool) : NULL;
}
- arg4 = (apr_array_header_t *)(buf4);
res5 = SWIG_ConvertPtr(ST(4), &argp5,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res5)) {
SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_client_add_to_changelist" "', argument " "5"" of type '" "svn_client_ctx_t *""'");
@@ -31825,7 +27323,7 @@ XS(_wrap_svn_client_add_to_changelist) {
if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
- if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+
XSRETURN(argvi);
@@ -31833,7 +27331,7 @@ XS(_wrap_svn_client_add_to_changelist) {
if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
- if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+
SWIG_croak_null();
@@ -31851,9 +27349,6 @@ XS(_wrap_svn_client_remove_from_changelists) {
apr_pool_t *_global_pool ;
int val2 ;
int ecode2 = 0 ;
- int res3 ;
- char *buf3 = 0 ;
- int alloc3 = 0 ;
void *argp4 = 0 ;
int res4 = 0 ;
int argvi = 0;
@@ -31875,11 +27370,10 @@ XS(_wrap_svn_client_remove_from_changelists) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_remove_from_changelists" "', argument " "2"" of type '" "svn_depth_t""'");
}
arg2 = (svn_depth_t)(val2);
- res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
- if (!SWIG_IsOK(res3)) {
- SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_client_remove_from_changelists" "', argument " "3"" of type '" "apr_array_header_t const *""'");
+ {
+ arg3 = SvOK(ST(2)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(2), _global_pool) : NULL;
}
- arg3 = (apr_array_header_t *)(buf3);
res4 = SWIG_ConvertPtr(ST(3), &argp4,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res4)) {
SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_client_remove_from_changelists" "', argument " "4"" of type '" "svn_client_ctx_t *""'");
@@ -31912,14 +27406,14 @@ XS(_wrap_svn_client_remove_from_changelists) {
}
- if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
XSRETURN(argvi);
fail:
- if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
SWIG_croak_null();
@@ -31940,9 +27434,6 @@ XS(_wrap_svn_client_get_changelists) {
int res1 ;
char *buf1 = 0 ;
int alloc1 = 0 ;
- int res2 ;
- char *buf2 = 0 ;
- int alloc2 = 0 ;
int val3 ;
int ecode3 = 0 ;
int res5 ;
@@ -31963,11 +27454,10 @@ XS(_wrap_svn_client_get_changelists) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_get_changelists" "', argument " "1"" of type '" "char const *""'");
}
arg1 = (char *)(buf1);
- res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
- if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_get_changelists" "', argument " "2"" of type '" "apr_array_header_t const *""'");
+ {
+ arg2 = SvOK(ST(1)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(1), _global_pool) : NULL;
}
- arg2 = (apr_array_header_t *)(buf2);
ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3);
if (!SWIG_IsOK(ecode3)) {
SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "svn_client_get_changelists" "', argument " "3"" of type '" "svn_depth_t""'");
@@ -32014,7 +27504,7 @@ XS(_wrap_svn_client_get_changelists) {
}
}
if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
- if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
@@ -32023,7 +27513,7 @@ XS(_wrap_svn_client_get_changelists) {
XSRETURN(argvi);
fail:
if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
- if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
@@ -32197,7 +27687,7 @@ XS(_wrap_svn_client_unlock) {
XS(_wrap_svn_info_t_URL_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -32212,9 +27702,9 @@ XS(_wrap_svn_info_t_URL_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_URL_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_URL_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_info_t_URL_set" "', argument " "2"" of type '" "char const *""'");
@@ -32242,7 +27732,7 @@ XS(_wrap_svn_info_t_URL_set) {
XS(_wrap_svn_info_t_URL_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -32254,9 +27744,9 @@ XS(_wrap_svn_info_t_URL_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_URL_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_URL_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (char *) ((arg1)->URL);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -32270,7 +27760,7 @@ XS(_wrap_svn_info_t_URL_get) {
XS(_wrap_svn_info_t_rev_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -32284,9 +27774,9 @@ XS(_wrap_svn_info_t_rev_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_rev_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_rev_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_info_t_rev_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -32307,7 +27797,7 @@ XS(_wrap_svn_info_t_rev_set) {
XS(_wrap_svn_info_t_rev_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -32319,9 +27809,9 @@ XS(_wrap_svn_info_t_rev_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_rev_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_rev_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (svn_revnum_t) ((arg1)->rev);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -32335,7 +27825,7 @@ XS(_wrap_svn_info_t_rev_get) {
XS(_wrap_svn_info_t_kind_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -32349,9 +27839,9 @@ XS(_wrap_svn_info_t_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_kind_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_kind_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_info_t_kind_set" "', argument " "2"" of type '" "svn_node_kind_t""'");
@@ -32372,7 +27862,7 @@ XS(_wrap_svn_info_t_kind_set) {
XS(_wrap_svn_info_t_kind_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -32384,9 +27874,9 @@ XS(_wrap_svn_info_t_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_kind_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_kind_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -32400,7 +27890,7 @@ XS(_wrap_svn_info_t_kind_get) {
XS(_wrap_svn_info_t_repos_root_URL_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -32415,9 +27905,9 @@ XS(_wrap_svn_info_t_repos_root_URL_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_repos_root_URL_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_repos_root_URL_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_info_t_repos_root_URL_set" "', argument " "2"" of type '" "char const *""'");
@@ -32445,7 +27935,7 @@ XS(_wrap_svn_info_t_repos_root_URL_set) {
XS(_wrap_svn_info_t_repos_root_URL_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -32457,9 +27947,9 @@ XS(_wrap_svn_info_t_repos_root_URL_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_repos_root_URL_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_repos_root_URL_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (char *) ((arg1)->repos_root_URL);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -32473,7 +27963,7 @@ XS(_wrap_svn_info_t_repos_root_URL_get) {
XS(_wrap_svn_info_t_repos_UUID_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -32488,9 +27978,9 @@ XS(_wrap_svn_info_t_repos_UUID_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_repos_UUID_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_repos_UUID_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_info_t_repos_UUID_set" "', argument " "2"" of type '" "char const *""'");
@@ -32518,7 +28008,7 @@ XS(_wrap_svn_info_t_repos_UUID_set) {
XS(_wrap_svn_info_t_repos_UUID_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -32530,9 +28020,9 @@ XS(_wrap_svn_info_t_repos_UUID_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_repos_UUID_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_repos_UUID_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (char *) ((arg1)->repos_UUID);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -32546,7 +28036,7 @@ XS(_wrap_svn_info_t_repos_UUID_get) {
XS(_wrap_svn_info_t_last_changed_rev_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -32560,9 +28050,9 @@ XS(_wrap_svn_info_t_last_changed_rev_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_last_changed_rev_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_last_changed_rev_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_info_t_last_changed_rev_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -32583,7 +28073,7 @@ XS(_wrap_svn_info_t_last_changed_rev_set) {
XS(_wrap_svn_info_t_last_changed_rev_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -32595,9 +28085,9 @@ XS(_wrap_svn_info_t_last_changed_rev_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_last_changed_rev_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_last_changed_rev_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (svn_revnum_t) ((arg1)->last_changed_rev);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -32611,7 +28101,7 @@ XS(_wrap_svn_info_t_last_changed_rev_get) {
XS(_wrap_svn_info_t_last_changed_date_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -32625,9 +28115,9 @@ XS(_wrap_svn_info_t_last_changed_date_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_last_changed_date_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_last_changed_date_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_info_t_last_changed_date_set" "', argument " "2"" of type '" "apr_time_t""'");
@@ -32648,7 +28138,7 @@ XS(_wrap_svn_info_t_last_changed_date_set) {
XS(_wrap_svn_info_t_last_changed_date_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -32660,9 +28150,9 @@ XS(_wrap_svn_info_t_last_changed_date_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_last_changed_date_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_last_changed_date_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = ((arg1)->last_changed_date);
{
char temp[256];
@@ -32681,7 +28171,7 @@ XS(_wrap_svn_info_t_last_changed_date_get) {
XS(_wrap_svn_info_t_last_changed_author_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -32696,9 +28186,9 @@ XS(_wrap_svn_info_t_last_changed_author_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_last_changed_author_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_last_changed_author_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_info_t_last_changed_author_set" "', argument " "2"" of type '" "char const *""'");
@@ -32726,7 +28216,7 @@ XS(_wrap_svn_info_t_last_changed_author_set) {
XS(_wrap_svn_info_t_last_changed_author_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -32738,9 +28228,9 @@ XS(_wrap_svn_info_t_last_changed_author_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_last_changed_author_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_last_changed_author_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (char *) ((arg1)->last_changed_author);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -32754,7 +28244,7 @@ XS(_wrap_svn_info_t_last_changed_author_get) {
XS(_wrap_svn_info_t_lock_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_lock_t *arg2 = (svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -32768,9 +28258,9 @@ XS(_wrap_svn_info_t_lock_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_lock_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_lock_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_lock_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_info_t_lock_set" "', argument " "2"" of type '" "svn_lock_t *""'");
@@ -32791,7 +28281,7 @@ XS(_wrap_svn_info_t_lock_set) {
XS(_wrap_svn_info_t_lock_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -32803,9 +28293,9 @@ XS(_wrap_svn_info_t_lock_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_lock_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_lock_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (svn_lock_t *) ((arg1)->lock);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_lock_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -32819,7 +28309,7 @@ XS(_wrap_svn_info_t_lock_get) {
XS(_wrap_svn_info_t_has_wc_info_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -32833,9 +28323,9 @@ XS(_wrap_svn_info_t_has_wc_info_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_has_wc_info_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_has_wc_info_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_info_t_has_wc_info_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -32856,7 +28346,7 @@ XS(_wrap_svn_info_t_has_wc_info_set) {
XS(_wrap_svn_info_t_has_wc_info_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -32868,9 +28358,9 @@ XS(_wrap_svn_info_t_has_wc_info_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_has_wc_info_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_has_wc_info_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (svn_boolean_t) ((arg1)->has_wc_info);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -32884,7 +28374,7 @@ XS(_wrap_svn_info_t_has_wc_info_get) {
XS(_wrap_svn_info_t_schedule_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_wc_schedule_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -32898,9 +28388,9 @@ XS(_wrap_svn_info_t_schedule_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_schedule_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_schedule_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_info_t_schedule_set" "', argument " "2"" of type '" "svn_wc_schedule_t""'");
@@ -32921,7 +28411,7 @@ XS(_wrap_svn_info_t_schedule_set) {
XS(_wrap_svn_info_t_schedule_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -32933,9 +28423,9 @@ XS(_wrap_svn_info_t_schedule_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_schedule_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_schedule_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (svn_wc_schedule_t) ((arg1)->schedule);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -32949,7 +28439,7 @@ XS(_wrap_svn_info_t_schedule_get) {
XS(_wrap_svn_info_t_copyfrom_url_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -32964,9 +28454,9 @@ XS(_wrap_svn_info_t_copyfrom_url_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_copyfrom_url_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_copyfrom_url_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_info_t_copyfrom_url_set" "', argument " "2"" of type '" "char const *""'");
@@ -32992,7 +28482,7 @@ XS(_wrap_svn_info_t_copyfrom_url_set) {
XS(_wrap_svn_info_t_copyfrom_url_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -33004,9 +28494,9 @@ XS(_wrap_svn_info_t_copyfrom_url_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_copyfrom_url_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_copyfrom_url_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (char *) ((arg1)->copyfrom_url);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -33020,7 +28510,7 @@ XS(_wrap_svn_info_t_copyfrom_url_get) {
XS(_wrap_svn_info_t_copyfrom_rev_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -33034,9 +28524,9 @@ XS(_wrap_svn_info_t_copyfrom_rev_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_copyfrom_rev_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_copyfrom_rev_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_info_t_copyfrom_rev_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -33057,7 +28547,7 @@ XS(_wrap_svn_info_t_copyfrom_rev_set) {
XS(_wrap_svn_info_t_copyfrom_rev_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -33069,9 +28559,9 @@ XS(_wrap_svn_info_t_copyfrom_rev_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_copyfrom_rev_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_copyfrom_rev_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (svn_revnum_t) ((arg1)->copyfrom_rev);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -33085,7 +28575,7 @@ XS(_wrap_svn_info_t_copyfrom_rev_get) {
XS(_wrap_svn_info_t_text_time_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -33099,9 +28589,9 @@ XS(_wrap_svn_info_t_text_time_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_text_time_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_text_time_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_info_t_text_time_set" "', argument " "2"" of type '" "apr_time_t""'");
@@ -33122,7 +28612,7 @@ XS(_wrap_svn_info_t_text_time_set) {
XS(_wrap_svn_info_t_text_time_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -33134,9 +28624,9 @@ XS(_wrap_svn_info_t_text_time_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_text_time_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_text_time_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = ((arg1)->text_time);
{
char temp[256];
@@ -33155,7 +28645,7 @@ XS(_wrap_svn_info_t_text_time_get) {
XS(_wrap_svn_info_t_prop_time_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -33169,9 +28659,9 @@ XS(_wrap_svn_info_t_prop_time_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_prop_time_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_prop_time_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_info_t_prop_time_set" "', argument " "2"" of type '" "apr_time_t""'");
@@ -33192,7 +28682,7 @@ XS(_wrap_svn_info_t_prop_time_set) {
XS(_wrap_svn_info_t_prop_time_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -33204,9 +28694,9 @@ XS(_wrap_svn_info_t_prop_time_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_prop_time_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_prop_time_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = ((arg1)->prop_time);
{
char temp[256];
@@ -33225,7 +28715,7 @@ XS(_wrap_svn_info_t_prop_time_get) {
XS(_wrap_svn_info_t_checksum_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -33240,9 +28730,9 @@ XS(_wrap_svn_info_t_checksum_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_checksum_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_checksum_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_info_t_checksum_set" "', argument " "2"" of type '" "char const *""'");
@@ -33270,7 +28760,7 @@ XS(_wrap_svn_info_t_checksum_set) {
XS(_wrap_svn_info_t_checksum_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -33282,9 +28772,9 @@ XS(_wrap_svn_info_t_checksum_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_checksum_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_checksum_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (char *) ((arg1)->checksum);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -33298,7 +28788,7 @@ XS(_wrap_svn_info_t_checksum_get) {
XS(_wrap_svn_info_t_conflict_old_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -33313,9 +28803,9 @@ XS(_wrap_svn_info_t_conflict_old_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_conflict_old_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_conflict_old_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_info_t_conflict_old_set" "', argument " "2"" of type '" "char const *""'");
@@ -33343,7 +28833,7 @@ XS(_wrap_svn_info_t_conflict_old_set) {
XS(_wrap_svn_info_t_conflict_old_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -33355,9 +28845,9 @@ XS(_wrap_svn_info_t_conflict_old_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_conflict_old_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_conflict_old_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (char *) ((arg1)->conflict_old);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -33371,7 +28861,7 @@ XS(_wrap_svn_info_t_conflict_old_get) {
XS(_wrap_svn_info_t_conflict_new_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -33386,9 +28876,9 @@ XS(_wrap_svn_info_t_conflict_new_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_conflict_new_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_conflict_new_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_info_t_conflict_new_set" "', argument " "2"" of type '" "char const *""'");
@@ -33416,7 +28906,7 @@ XS(_wrap_svn_info_t_conflict_new_set) {
XS(_wrap_svn_info_t_conflict_new_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -33428,9 +28918,9 @@ XS(_wrap_svn_info_t_conflict_new_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_conflict_new_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_conflict_new_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (char *) ((arg1)->conflict_new);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -33444,7 +28934,7 @@ XS(_wrap_svn_info_t_conflict_new_get) {
XS(_wrap_svn_info_t_conflict_wrk_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -33459,9 +28949,9 @@ XS(_wrap_svn_info_t_conflict_wrk_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_conflict_wrk_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_conflict_wrk_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_info_t_conflict_wrk_set" "', argument " "2"" of type '" "char const *""'");
@@ -33489,7 +28979,7 @@ XS(_wrap_svn_info_t_conflict_wrk_set) {
XS(_wrap_svn_info_t_conflict_wrk_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -33501,9 +28991,9 @@ XS(_wrap_svn_info_t_conflict_wrk_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_conflict_wrk_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_conflict_wrk_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (char *) ((arg1)->conflict_wrk);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -33517,7 +29007,7 @@ XS(_wrap_svn_info_t_conflict_wrk_get) {
XS(_wrap_svn_info_t_prejfile_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -33532,9 +29022,9 @@ XS(_wrap_svn_info_t_prejfile_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_prejfile_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_prejfile_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_info_t_prejfile_set" "', argument " "2"" of type '" "char const *""'");
@@ -33562,7 +29052,7 @@ XS(_wrap_svn_info_t_prejfile_set) {
XS(_wrap_svn_info_t_prejfile_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -33574,9 +29064,9 @@ XS(_wrap_svn_info_t_prejfile_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_prejfile_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_prejfile_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (char *) ((arg1)->prejfile);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -33590,7 +29080,7 @@ XS(_wrap_svn_info_t_prejfile_get) {
XS(_wrap_svn_info_t_changelist_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -33605,9 +29095,9 @@ XS(_wrap_svn_info_t_changelist_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_changelist_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_changelist_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_info_t_changelist_set" "', argument " "2"" of type '" "char const *""'");
@@ -33635,7 +29125,7 @@ XS(_wrap_svn_info_t_changelist_set) {
XS(_wrap_svn_info_t_changelist_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -33647,9 +29137,9 @@ XS(_wrap_svn_info_t_changelist_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_changelist_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_changelist_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (char *) ((arg1)->changelist);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -33663,7 +29153,7 @@ XS(_wrap_svn_info_t_changelist_get) {
XS(_wrap_svn_info_t_depth_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_depth_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -33677,9 +29167,9 @@ XS(_wrap_svn_info_t_depth_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_depth_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_depth_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_info_t_depth_set" "', argument " "2"" of type '" "svn_depth_t""'");
@@ -33700,7 +29190,7 @@ XS(_wrap_svn_info_t_depth_set) {
XS(_wrap_svn_info_t_depth_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -33712,9 +29202,9 @@ XS(_wrap_svn_info_t_depth_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_depth_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_depth_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (svn_depth_t) ((arg1)->depth);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -33728,7 +29218,7 @@ XS(_wrap_svn_info_t_depth_get) {
XS(_wrap_svn_info_t_working_size_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
apr_size_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -33742,9 +29232,9 @@ XS(_wrap_svn_info_t_working_size_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_working_size_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_working_size_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_info_t_working_size_set" "', argument " "2"" of type '" "apr_size_t""'");
@@ -33765,7 +29255,7 @@ XS(_wrap_svn_info_t_working_size_set) {
XS(_wrap_svn_info_t_working_size_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -33777,9 +29267,9 @@ XS(_wrap_svn_info_t_working_size_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_working_size_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_working_size_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = ((arg1)->working_size);
ST(argvi) = SWIG_From_unsigned_SS_long SWIG_PERL_CALL_ARGS_1((unsigned long)(result)); argvi++ ;
@@ -33793,7 +29283,7 @@ XS(_wrap_svn_info_t_working_size_get) {
XS(_wrap_svn_info_t_size_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
apr_size_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -33807,9 +29297,9 @@ XS(_wrap_svn_info_t_size_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_size_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_size_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_info_t_size_set" "', argument " "2"" of type '" "apr_size_t""'");
@@ -33830,7 +29320,7 @@ XS(_wrap_svn_info_t_size_set) {
XS(_wrap_svn_info_t_size_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -33842,9 +29332,9 @@ XS(_wrap_svn_info_t_size_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_size_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_size_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = ((arg1)->size);
ST(argvi) = SWIG_From_unsigned_SS_long SWIG_PERL_CALL_ARGS_1((unsigned long)(result)); argvi++ ;
@@ -33858,7 +29348,7 @@ XS(_wrap_svn_info_t_size_get) {
XS(_wrap_svn_info_t_size64_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_filesize_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -33872,9 +29362,9 @@ XS(_wrap_svn_info_t_size64_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_size64_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_size64_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_info_t_size64_set" "', argument " "2"" of type '" "svn_filesize_t""'");
@@ -33895,7 +29385,7 @@ XS(_wrap_svn_info_t_size64_set) {
XS(_wrap_svn_info_t_size64_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -33907,9 +29397,9 @@ XS(_wrap_svn_info_t_size64_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_size64_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_size64_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = ((arg1)->size64);
{
char temp[256];
@@ -33928,7 +29418,7 @@ XS(_wrap_svn_info_t_size64_get) {
XS(_wrap_svn_info_t_working_size64_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_filesize_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -33942,9 +29432,9 @@ XS(_wrap_svn_info_t_working_size64_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_working_size64_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_working_size64_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_info_t_working_size64_set" "', argument " "2"" of type '" "svn_filesize_t""'");
@@ -33965,7 +29455,7 @@ XS(_wrap_svn_info_t_working_size64_set) {
XS(_wrap_svn_info_t_working_size64_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -33977,9 +29467,9 @@ XS(_wrap_svn_info_t_working_size64_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_working_size64_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_working_size64_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = ((arg1)->working_size64);
{
char temp[256];
@@ -33998,7 +29488,7 @@ XS(_wrap_svn_info_t_working_size64_get) {
XS(_wrap_svn_info_t_tree_conflict_set) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_wc_conflict_description_t *arg2 = (svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -34012,9 +29502,9 @@ XS(_wrap_svn_info_t_tree_conflict_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_tree_conflict_set" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_tree_conflict_set" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_wc_conflict_description_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_info_t_tree_conflict_set" "', argument " "2"" of type '" "svn_wc_conflict_description_t *""'");
@@ -34035,7 +29525,7 @@ XS(_wrap_svn_info_t_tree_conflict_set) {
XS(_wrap_svn_info_t_tree_conflict_get) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -34047,9 +29537,9 @@ XS(_wrap_svn_info_t_tree_conflict_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_tree_conflict_get" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_info_t_tree_conflict_get" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (svn_wc_conflict_description_t *) ((arg1)->tree_conflict);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_wc_conflict_description_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -34064,14 +29554,14 @@ XS(_wrap_svn_info_t_tree_conflict_get) {
XS(_wrap_new_svn_info_t) {
{
int argvi = 0;
- svn_info_t *result = 0 ;
+ struct svn_info_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_info_t();");
}
{
- result = (svn_info_t *)calloc(1, sizeof(svn_info_t));
+ result = (struct svn_info_t *)calloc(1, sizeof(struct svn_info_t));
@@ -34086,7 +29576,7 @@ XS(_wrap_new_svn_info_t) {
XS(_wrap_delete_svn_info_t) {
{
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -34097,9 +29587,9 @@ XS(_wrap_delete_svn_info_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_info_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_info_t" "', argument " "1"" of type '" "svn_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_info_t" "', argument " "1"" of type '" "struct svn_info_t *""'");
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
{
free((char *) arg1);
@@ -34161,7 +29651,7 @@ XS(_wrap_svn_info_dup) {
XS(_wrap_svn_client_info2_t_URL_set) {
{
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -34176,9 +29666,9 @@ XS(_wrap_svn_client_info2_t_URL_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_URL_set" "', argument " "1"" of type '" "svn_client_info2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_URL_set" "', argument " "1"" of type '" "struct svn_client_info2_t *""'");
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_info2_t_URL_set" "', argument " "2"" of type '" "char const *""'");
@@ -34206,7 +29696,7 @@ XS(_wrap_svn_client_info2_t_URL_set) {
XS(_wrap_svn_client_info2_t_URL_get) {
{
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -34218,9 +29708,9 @@ XS(_wrap_svn_client_info2_t_URL_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_URL_get" "', argument " "1"" of type '" "svn_client_info2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_URL_get" "', argument " "1"" of type '" "struct svn_client_info2_t *""'");
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
result = (char *) ((arg1)->URL);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -34234,7 +29724,7 @@ XS(_wrap_svn_client_info2_t_URL_get) {
XS(_wrap_svn_client_info2_t_rev_set) {
{
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -34248,9 +29738,9 @@ XS(_wrap_svn_client_info2_t_rev_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_rev_set" "', argument " "1"" of type '" "svn_client_info2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_rev_set" "', argument " "1"" of type '" "struct svn_client_info2_t *""'");
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_info2_t_rev_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -34271,7 +29761,7 @@ XS(_wrap_svn_client_info2_t_rev_set) {
XS(_wrap_svn_client_info2_t_rev_get) {
{
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -34283,9 +29773,9 @@ XS(_wrap_svn_client_info2_t_rev_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_rev_get" "', argument " "1"" of type '" "svn_client_info2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_rev_get" "', argument " "1"" of type '" "struct svn_client_info2_t *""'");
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
result = (svn_revnum_t) ((arg1)->rev);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -34299,7 +29789,7 @@ XS(_wrap_svn_client_info2_t_rev_get) {
XS(_wrap_svn_client_info2_t_repos_root_URL_set) {
{
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -34314,9 +29804,9 @@ XS(_wrap_svn_client_info2_t_repos_root_URL_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_repos_root_URL_set" "', argument " "1"" of type '" "svn_client_info2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_repos_root_URL_set" "', argument " "1"" of type '" "struct svn_client_info2_t *""'");
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_info2_t_repos_root_URL_set" "', argument " "2"" of type '" "char const *""'");
@@ -34344,7 +29834,7 @@ XS(_wrap_svn_client_info2_t_repos_root_URL_set) {
XS(_wrap_svn_client_info2_t_repos_root_URL_get) {
{
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -34356,9 +29846,9 @@ XS(_wrap_svn_client_info2_t_repos_root_URL_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_repos_root_URL_get" "', argument " "1"" of type '" "svn_client_info2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_repos_root_URL_get" "', argument " "1"" of type '" "struct svn_client_info2_t *""'");
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
result = (char *) ((arg1)->repos_root_URL);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -34372,7 +29862,7 @@ XS(_wrap_svn_client_info2_t_repos_root_URL_get) {
XS(_wrap_svn_client_info2_t_repos_UUID_set) {
{
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -34387,9 +29877,9 @@ XS(_wrap_svn_client_info2_t_repos_UUID_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_repos_UUID_set" "', argument " "1"" of type '" "svn_client_info2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_repos_UUID_set" "', argument " "1"" of type '" "struct svn_client_info2_t *""'");
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_info2_t_repos_UUID_set" "', argument " "2"" of type '" "char const *""'");
@@ -34417,7 +29907,7 @@ XS(_wrap_svn_client_info2_t_repos_UUID_set) {
XS(_wrap_svn_client_info2_t_repos_UUID_get) {
{
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -34429,9 +29919,9 @@ XS(_wrap_svn_client_info2_t_repos_UUID_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_repos_UUID_get" "', argument " "1"" of type '" "svn_client_info2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_repos_UUID_get" "', argument " "1"" of type '" "struct svn_client_info2_t *""'");
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
result = (char *) ((arg1)->repos_UUID);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -34445,7 +29935,7 @@ XS(_wrap_svn_client_info2_t_repos_UUID_get) {
XS(_wrap_svn_client_info2_t_kind_set) {
{
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -34459,9 +29949,9 @@ XS(_wrap_svn_client_info2_t_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_kind_set" "', argument " "1"" of type '" "svn_client_info2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_kind_set" "', argument " "1"" of type '" "struct svn_client_info2_t *""'");
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_info2_t_kind_set" "', argument " "2"" of type '" "svn_node_kind_t""'");
@@ -34482,7 +29972,7 @@ XS(_wrap_svn_client_info2_t_kind_set) {
XS(_wrap_svn_client_info2_t_kind_get) {
{
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -34494,9 +29984,9 @@ XS(_wrap_svn_client_info2_t_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_kind_get" "', argument " "1"" of type '" "svn_client_info2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_kind_get" "', argument " "1"" of type '" "struct svn_client_info2_t *""'");
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -34510,7 +30000,7 @@ XS(_wrap_svn_client_info2_t_kind_get) {
XS(_wrap_svn_client_info2_t_size_set) {
{
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
svn_filesize_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -34524,9 +30014,9 @@ XS(_wrap_svn_client_info2_t_size_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_size_set" "', argument " "1"" of type '" "svn_client_info2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_size_set" "', argument " "1"" of type '" "struct svn_client_info2_t *""'");
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_info2_t_size_set" "', argument " "2"" of type '" "svn_filesize_t""'");
@@ -34547,7 +30037,7 @@ XS(_wrap_svn_client_info2_t_size_set) {
XS(_wrap_svn_client_info2_t_size_get) {
{
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -34559,9 +30049,9 @@ XS(_wrap_svn_client_info2_t_size_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_size_get" "', argument " "1"" of type '" "svn_client_info2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_size_get" "', argument " "1"" of type '" "struct svn_client_info2_t *""'");
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
result = ((arg1)->size);
{
char temp[256];
@@ -34580,7 +30070,7 @@ XS(_wrap_svn_client_info2_t_size_get) {
XS(_wrap_svn_client_info2_t_last_changed_rev_set) {
{
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -34594,9 +30084,9 @@ XS(_wrap_svn_client_info2_t_last_changed_rev_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_last_changed_rev_set" "', argument " "1"" of type '" "svn_client_info2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_last_changed_rev_set" "', argument " "1"" of type '" "struct svn_client_info2_t *""'");
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_info2_t_last_changed_rev_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -34617,7 +30107,7 @@ XS(_wrap_svn_client_info2_t_last_changed_rev_set) {
XS(_wrap_svn_client_info2_t_last_changed_rev_get) {
{
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -34629,9 +30119,9 @@ XS(_wrap_svn_client_info2_t_last_changed_rev_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_last_changed_rev_get" "', argument " "1"" of type '" "svn_client_info2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_last_changed_rev_get" "', argument " "1"" of type '" "struct svn_client_info2_t *""'");
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
result = (svn_revnum_t) ((arg1)->last_changed_rev);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -34645,7 +30135,7 @@ XS(_wrap_svn_client_info2_t_last_changed_rev_get) {
XS(_wrap_svn_client_info2_t_last_changed_date_set) {
{
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -34659,9 +30149,9 @@ XS(_wrap_svn_client_info2_t_last_changed_date_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_last_changed_date_set" "', argument " "1"" of type '" "svn_client_info2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_last_changed_date_set" "', argument " "1"" of type '" "struct svn_client_info2_t *""'");
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_client_info2_t_last_changed_date_set" "', argument " "2"" of type '" "apr_time_t""'");
@@ -34682,7 +30172,7 @@ XS(_wrap_svn_client_info2_t_last_changed_date_set) {
XS(_wrap_svn_client_info2_t_last_changed_date_get) {
{
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -34694,9 +30184,9 @@ XS(_wrap_svn_client_info2_t_last_changed_date_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_last_changed_date_get" "', argument " "1"" of type '" "svn_client_info2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_last_changed_date_get" "', argument " "1"" of type '" "struct svn_client_info2_t *""'");
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
result = ((arg1)->last_changed_date);
{
char temp[256];
@@ -34715,7 +30205,7 @@ XS(_wrap_svn_client_info2_t_last_changed_date_get) {
XS(_wrap_svn_client_info2_t_last_changed_author_set) {
{
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -34730,9 +30220,9 @@ XS(_wrap_svn_client_info2_t_last_changed_author_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_last_changed_author_set" "', argument " "1"" of type '" "svn_client_info2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_last_changed_author_set" "', argument " "1"" of type '" "struct svn_client_info2_t *""'");
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_info2_t_last_changed_author_set" "', argument " "2"" of type '" "char const *""'");
@@ -34760,7 +30250,7 @@ XS(_wrap_svn_client_info2_t_last_changed_author_set) {
XS(_wrap_svn_client_info2_t_last_changed_author_get) {
{
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -34772,9 +30262,9 @@ XS(_wrap_svn_client_info2_t_last_changed_author_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_last_changed_author_get" "', argument " "1"" of type '" "svn_client_info2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_last_changed_author_get" "', argument " "1"" of type '" "struct svn_client_info2_t *""'");
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
result = (char *) ((arg1)->last_changed_author);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -34788,7 +30278,7 @@ XS(_wrap_svn_client_info2_t_last_changed_author_get) {
XS(_wrap_svn_client_info2_t_lock_set) {
{
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
svn_lock_t *arg2 = (svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -34802,9 +30292,9 @@ XS(_wrap_svn_client_info2_t_lock_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_lock_set" "', argument " "1"" of type '" "svn_client_info2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_lock_set" "', argument " "1"" of type '" "struct svn_client_info2_t *""'");
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_lock_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_info2_t_lock_set" "', argument " "2"" of type '" "svn_lock_t const *""'");
@@ -34825,7 +30315,7 @@ XS(_wrap_svn_client_info2_t_lock_set) {
XS(_wrap_svn_client_info2_t_lock_get) {
{
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -34837,9 +30327,9 @@ XS(_wrap_svn_client_info2_t_lock_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_lock_get" "', argument " "1"" of type '" "svn_client_info2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_lock_get" "', argument " "1"" of type '" "struct svn_client_info2_t *""'");
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
result = (svn_lock_t *) ((arg1)->lock);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_lock_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -34853,7 +30343,7 @@ XS(_wrap_svn_client_info2_t_lock_get) {
XS(_wrap_svn_client_info2_t_wc_info_set) {
{
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
svn_wc_info_t *arg2 = (svn_wc_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -34867,9 +30357,9 @@ XS(_wrap_svn_client_info2_t_wc_info_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_wc_info_set" "', argument " "1"" of type '" "svn_client_info2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_wc_info_set" "', argument " "1"" of type '" "struct svn_client_info2_t *""'");
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_wc_info_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_info2_t_wc_info_set" "', argument " "2"" of type '" "svn_wc_info_t const *""'");
@@ -34890,7 +30380,7 @@ XS(_wrap_svn_client_info2_t_wc_info_set) {
XS(_wrap_svn_client_info2_t_wc_info_get) {
{
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -34902,9 +30392,9 @@ XS(_wrap_svn_client_info2_t_wc_info_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_wc_info_get" "', argument " "1"" of type '" "svn_client_info2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_client_info2_t_wc_info_get" "', argument " "1"" of type '" "struct svn_client_info2_t *""'");
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
result = (svn_wc_info_t *) ((arg1)->wc_info);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_wc_info_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -34919,14 +30409,14 @@ XS(_wrap_svn_client_info2_t_wc_info_get) {
XS(_wrap_new_svn_client_info2_t) {
{
int argvi = 0;
- svn_client_info2_t *result = 0 ;
+ struct svn_client_info2_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_client_info2_t();");
}
{
- result = (svn_client_info2_t *)calloc(1, sizeof(svn_client_info2_t));
+ result = (struct svn_client_info2_t *)calloc(1, sizeof(struct svn_client_info2_t));
@@ -34941,7 +30431,7 @@ XS(_wrap_new_svn_client_info2_t) {
XS(_wrap_delete_svn_client_info2_t) {
{
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -34952,9 +30442,9 @@ XS(_wrap_delete_svn_client_info2_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_client_info2_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_client_info2_t" "', argument " "1"" of type '" "svn_client_info2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_client_info2_t" "', argument " "1"" of type '" "struct svn_client_info2_t *""'");
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
{
free((char *) arg1);
@@ -35039,9 +30529,6 @@ XS(_wrap_svn_client_info3) {
int ecode5 = 0 ;
int val6 ;
int ecode6 = 0 ;
- int res7 ;
- char *buf7 = 0 ;
- int alloc7 = 0 ;
int res9 ;
void *argp10 = 0 ;
int res10 = 0 ;
@@ -35061,102 +30548,10 @@ XS(_wrap_svn_client_info3) {
}
arg1 = (char *)(buf1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
+ }
+ {
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
}
ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val4);
if (!SWIG_IsOK(ecode4)) {
@@ -35173,11 +30568,10 @@ XS(_wrap_svn_client_info3) {
SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_client_info3" "', argument " "6"" of type '" "svn_boolean_t""'");
}
arg6 = (svn_boolean_t)(val6);
- res7 = SWIG_AsCharPtrAndSize(ST(6), &buf7, NULL, &alloc7);
- if (!SWIG_IsOK(res7)) {
- SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_client_info3" "', argument " "7"" of type '" "apr_array_header_t const *""'");
+ {
+ arg7 = SvOK(ST(6)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(6), _global_pool) : NULL;
}
- arg7 = (apr_array_header_t *)(buf7);
{
int res = SWIG_ConvertFunctionPtr(ST(7), (void**)(&arg8), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -35234,7 +30628,7 @@ XS(_wrap_svn_client_info3) {
- if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+
@@ -35247,7 +30641,7 @@ XS(_wrap_svn_client_info3) {
- if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+
@@ -35276,9 +30670,6 @@ XS(_wrap_svn_client_info2) {
svn_opt_revision_t rev3 ;
int val6 ;
int ecode6 = 0 ;
- int res7 ;
- char *buf7 = 0 ;
- int alloc7 = 0 ;
void *argp8 = 0 ;
int res8 = 0 ;
int argvi = 0;
@@ -35297,102 +30688,10 @@ XS(_wrap_svn_client_info2) {
}
arg1 = (char *)(buf1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
+ }
+ {
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
}
{
arg4 = svn_swig_pl_info_receiver;
@@ -35403,11 +30702,10 @@ XS(_wrap_svn_client_info2) {
SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_client_info2" "', argument " "6"" of type '" "svn_depth_t""'");
}
arg6 = (svn_depth_t)(val6);
- res7 = SWIG_AsCharPtrAndSize(ST(5), &buf7, NULL, &alloc7);
- if (!SWIG_IsOK(res7)) {
- SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_client_info2" "', argument " "7"" of type '" "apr_array_header_t const *""'");
+ {
+ arg7 = SvOK(ST(5)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(5), _global_pool) : NULL;
}
- arg7 = (apr_array_header_t *)(buf7);
res8 = SWIG_ConvertPtr(ST(6), &argp8,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res8)) {
SWIG_exception_fail(SWIG_ArgError(res8), "in method '" "svn_client_info2" "', argument " "8"" of type '" "svn_client_ctx_t *""'");
@@ -35452,7 +30750,7 @@ XS(_wrap_svn_client_info2) {
- if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+
XSRETURN(argvi);
@@ -35461,7 +30759,7 @@ XS(_wrap_svn_client_info2) {
- if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+
SWIG_croak_null();
@@ -35505,102 +30803,10 @@ XS(_wrap_svn_client_info) {
}
arg1 = (char *)(buf1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
- }
- {
- arg3 = &rev3;
- if (ST(2) == NULL || ST(2) == &PL_sv_undef || !SvOK(ST(2))) {
- rev3.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(2)) && sv_derived_from(ST(2), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(2), (void **)&arg3, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(2))) {
- rev3.kind = svn_opt_revision_number;
- rev3.value.number = SvIV(ST(2));
- }
- else if (SvPOK(ST(2))) {
- char *input = SvPV_nolen(ST(2));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev3.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev3.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev3.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev3.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev3.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev3.kind = svn_opt_revision_date;
- rev3.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
+ }
+ {
+ arg3 = svn_swig_pl_set_revision(&rev3, ST(2), TRUE);
}
{
arg4 = svn_swig_pl_info_receiver;
@@ -36171,6 +31377,108 @@ XS(_wrap_svn_client_url_from_path) {
}
+XS(_wrap_svn_client_get_repos_root) {
+ {
+ char **arg1 = (char **) 0 ;
+ char **arg2 = (char **) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_client_ctx_t *arg4 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ char *temp1 ;
+ char *temp2 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ void *argp4 = 0 ;
+ int res4 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg5 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ {
+ _global_pool = arg6 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ arg2 = &temp2;
+ if ((items < 2) || (items > 4)) {
+ SWIG_croak("Usage: svn_client_get_repos_root(abspath_or_url,ctx,result_pool,scratch_pool);");
+ }
+ res3 = SWIG_AsCharPtrAndSize(ST(0), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_client_get_repos_root" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = (char *)(buf3);
+ res4 = SWIG_ConvertPtr(ST(1), &argp4,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_client_get_repos_root" "', argument " "4"" of type '" "svn_client_ctx_t *""'");
+ }
+ arg4 = (svn_client_ctx_t *)(argp4);
+ if (items > 2) {
+
+ }
+ if (items > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_get_repos_root((char const **)arg1,(char const **)arg2,(char const *)arg3,arg4,arg5,arg6);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ if (*arg1 == NULL) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = &PL_sv_undef; argvi++ ;
+ } else {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = sv_2mortal(newSVpv(*arg1, 0)); argvi++ ;
+ }
+ }
+ {
+ if (*arg2 == NULL) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = &PL_sv_undef; argvi++ ;
+ } else {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = sv_2mortal(newSVpv(*arg2, 0)); argvi++ ;
+ }
+ }
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_client_root_url_from_path) {
{
char **arg1 = (char **) 0 ;
@@ -36514,6 +31822,103 @@ XS(_wrap_svn_client_uuid_from_path) {
}
+XS(_wrap_svn_client_open_ra_session2) {
+ {
+ svn_ra_session_t **arg1 = (svn_ra_session_t **) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_client_ctx_t *arg4 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_ra_session_t *temp1 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ void *argp4 = 0 ;
+ int res4 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg5 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ {
+ _global_pool = arg6 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ if ((items < 3) || (items > 5)) {
+ SWIG_croak("Usage: svn_client_open_ra_session2(url,wri_abspath,ctx,result_pool,scratch_pool);");
+ }
+ res2 = SWIG_AsCharPtrAndSize(ST(0), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_open_ra_session2" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ res3 = SWIG_AsCharPtrAndSize(ST(1), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_client_open_ra_session2" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = (char *)(buf3);
+ res4 = SWIG_ConvertPtr(ST(2), &argp4,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_client_open_ra_session2" "', argument " "4"" of type '" "svn_client_ctx_t *""'");
+ }
+ arg4 = (svn_client_ctx_t *)(argp4);
+ if (items > 3) {
+
+ }
+ if (items > 4) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_open_ra_session2(arg1,(char const *)arg2,(char const *)arg3,arg4,arg5,arg6);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_ra_session_t, 0); argvi++ ;
+ }
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_client_open_ra_session) {
{
svn_ra_session_t **arg1 = (svn_ra_session_t **) 0 ;
@@ -36591,6 +31996,102 @@ XS(_wrap_svn_client_open_ra_session) {
}
+XS(_wrap_svn_proplist_invoke_receiver2) {
+ {
+ svn_proplist_receiver2_t arg1 = (svn_proplist_receiver2_t) 0 ;
+ void *arg2 = (void *) 0 ;
+ char *arg3 = (char *) 0 ;
+ apr_hash_t *arg4 = (apr_hash_t *) 0 ;
+ apr_array_header_t *arg5 = (apr_array_header_t *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int res2 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ void *argp4 = 0 ;
+ int res4 = 0 ;
+ void *argp5 = 0 ;
+ int res5 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg6 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 5) || (items > 6)) {
+ SWIG_croak("Usage: svn_proplist_invoke_receiver2(_obj,baton,path,prop_hash,inherited_props,scratch_pool);");
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(0), (void**)(&arg1), SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_proplist_invoke_receiver2" "', argument " "1"" of type '" "svn_proplist_receiver2_t""'");
+ }
+ }
+ res2 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_proplist_invoke_receiver2" "', argument " "2"" of type '" "void *""'");
+ }
+ res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_proplist_invoke_receiver2" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = (char *)(buf3);
+ res4 = SWIG_ConvertPtr(ST(3), &argp4,SWIGTYPE_p_apr_hash_t, 0 | 0 );
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_proplist_invoke_receiver2" "', argument " "4"" of type '" "apr_hash_t *""'");
+ }
+ arg4 = (apr_hash_t *)(argp4);
+ res5 = SWIG_ConvertPtr(ST(4), &argp5,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_proplist_invoke_receiver2" "', argument " "5"" of type '" "apr_array_header_t *""'");
+ }
+ arg5 = (apr_array_header_t *)(argp5);
+ if (items > 5) {
+
+ }
+ {
+ result = (svn_error_t *)svn_proplist_invoke_receiver2(arg1,arg2,(char const *)arg3,arg4,arg5,arg6);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_proplist_invoke_receiver) {
{
svn_proplist_receiver_t arg1 = (svn_proplist_receiver_t) 0 ;
@@ -37495,6 +32996,104 @@ XS(_wrap_svn_client_invoke_diff_summarize_func) {
}
+XS(_wrap_svn_client_invoke_import_filter_func) {
+ {
+ svn_client_import_filter_func_t arg1 = (svn_client_import_filter_func_t) 0 ;
+ void *arg2 = (void *) 0 ;
+ svn_boolean_t *arg3 = (svn_boolean_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ svn_io_dirent2_t *arg5 = (svn_io_dirent2_t *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int res2 ;
+ svn_boolean_t temp3 ;
+ int res3 = SWIG_TMPOBJ ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ void *argp5 = 0 ;
+ int res5 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg6 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg3 = &temp3;
+ if ((items < 4) || (items > 5)) {
+ SWIG_croak("Usage: svn_client_invoke_import_filter_func(_obj,baton,local_abspath,dirent,scratch_pool);");
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(0), (void**)(&arg1), SWIGTYPE_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_client_invoke_import_filter_func" "', argument " "1"" of type '" "svn_client_import_filter_func_t""'");
+ }
+ }
+ res2 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_invoke_import_filter_func" "', argument " "2"" of type '" "void *""'");
+ }
+ res4 = SWIG_AsCharPtrAndSize(ST(2), &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_client_invoke_import_filter_func" "', argument " "4"" of type '" "char const *""'");
+ }
+ arg4 = (char *)(buf4);
+ res5 = SWIG_ConvertPtr(ST(3), &argp5,SWIGTYPE_p_svn_io_dirent2_t, 0 | 0 );
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_client_invoke_import_filter_func" "', argument " "5"" of type '" "svn_io_dirent2_t const *""'");
+ }
+ arg5 = (svn_io_dirent2_t *)(argp5);
+ if (items > 4) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_invoke_import_filter_func(arg1,arg2,arg3,(char const *)arg4,(struct svn_io_dirent2_t const *)arg5,arg6);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ if (SWIG_IsTmpObj(res3)) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg3)); argvi++ ;
+ } else {
+ int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0) : 0;
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags); argvi++ ;
+ }
+
+
+
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_client_invoke_status_func) {
{
svn_client_status_func_t arg1 = (svn_client_status_func_t) 0 ;
@@ -37581,6 +33180,135 @@ XS(_wrap_svn_client_invoke_status_func) {
}
+XS(_wrap_svn_client_invoke_list_func2) {
+ {
+ svn_client_list_func2_t arg1 = (svn_client_list_func2_t) 0 ;
+ void *arg2 = (void *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_dirent_t *arg4 = (svn_dirent_t *) 0 ;
+ svn_lock_t *arg5 = (svn_lock_t *) 0 ;
+ char *arg6 = (char *) 0 ;
+ char *arg7 = (char *) 0 ;
+ char *arg8 = (char *) 0 ;
+ apr_pool_t *arg9 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int res2 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ void *argp4 = 0 ;
+ int res4 = 0 ;
+ void *argp5 = 0 ;
+ int res5 = 0 ;
+ int res6 ;
+ char *buf6 = 0 ;
+ int alloc6 = 0 ;
+ int res7 ;
+ char *buf7 = 0 ;
+ int alloc7 = 0 ;
+ int res8 ;
+ char *buf8 = 0 ;
+ int alloc8 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg9 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 8) || (items > 9)) {
+ SWIG_croak("Usage: svn_client_invoke_list_func2(_obj,baton,path,dirent,lock,abs_path,external_parent_url,external_target,scratch_pool);");
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(0), (void**)(&arg1), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_client_invoke_list_func2" "', argument " "1"" of type '" "svn_client_list_func2_t""'");
+ }
+ }
+ res2 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_client_invoke_list_func2" "', argument " "2"" of type '" "void *""'");
+ }
+ res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_client_invoke_list_func2" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = (char *)(buf3);
+ res4 = SWIG_ConvertPtr(ST(3), &argp4,SWIGTYPE_p_svn_dirent_t, 0 | 0 );
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_client_invoke_list_func2" "', argument " "4"" of type '" "svn_dirent_t const *""'");
+ }
+ arg4 = (svn_dirent_t *)(argp4);
+ res5 = SWIG_ConvertPtr(ST(4), &argp5,SWIGTYPE_p_svn_lock_t, 0 | 0 );
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_client_invoke_list_func2" "', argument " "5"" of type '" "svn_lock_t const *""'");
+ }
+ arg5 = (svn_lock_t *)(argp5);
+ res6 = SWIG_AsCharPtrAndSize(ST(5), &buf6, NULL, &alloc6);
+ if (!SWIG_IsOK(res6)) {
+ SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_client_invoke_list_func2" "', argument " "6"" of type '" "char const *""'");
+ }
+ arg6 = (char *)(buf6);
+ res7 = SWIG_AsCharPtrAndSize(ST(6), &buf7, NULL, &alloc7);
+ if (!SWIG_IsOK(res7)) {
+ SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_client_invoke_list_func2" "', argument " "7"" of type '" "char const *""'");
+ }
+ arg7 = (char *)(buf7);
+ res8 = SWIG_AsCharPtrAndSize(ST(7), &buf8, NULL, &alloc8);
+ if (!SWIG_IsOK(res8)) {
+ SWIG_exception_fail(SWIG_ArgError(res8), "in method '" "svn_client_invoke_list_func2" "', argument " "8"" of type '" "char const *""'");
+ }
+ arg8 = (char *)(buf8);
+ if (items > 8) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_invoke_list_func2(arg1,arg2,(char const *)arg3,(struct svn_dirent_t const *)arg4,(struct svn_lock_t const *)arg5,(char const *)arg6,(char const *)arg7,(char const *)arg8,arg9);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+ if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+ if (alloc8 == SWIG_NEWOBJ) free((char*)buf8);
+
+ XSRETURN(argvi);
+ fail:
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+ if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+ if (alloc8 == SWIG_NEWOBJ) free((char*)buf8);
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_client_invoke_list_func) {
{
svn_client_list_func_t arg1 = (svn_client_list_func_t) 0 ;
@@ -37973,7 +33701,7 @@ XS(_wrap_svn_client_invoke_patch_func) {
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
-static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *|svn_rangelist_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_file_t = {"_p_apr_file_t", "apr_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_getopt_t = {"_p_apr_getopt_t", "apr_getopt_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_hash_t = {"_p_apr_hash_t", "apr_hash_t *", 0, 0, (void*)0, 0};
@@ -37999,17 +33727,20 @@ static swig_type_info _swigt__p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__cha
static swig_type_info _swigt__p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t", "svn_client_blame_receiver2_t|struct svn_error_t *(*)(void *,apr_int64_t,svn_revnum_t,char const *,char const *,svn_revnum_t,char const *,char const *,char const *,char const *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,apr_hash_t *,svn_revnum_t,char const *,char const *,char const *,apr_pool_t *)|svn_log_message_receiver_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void = {"_p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void", "void (*)(void *,char const *,enum svn_wc_notify_action_t,enum svn_node_kind_t,char const *,enum svn_wc_notify_state_t,enum svn_wc_notify_state_t,long)|svn_wc_notify_func_t", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,apr_hash_t *,apr_array_header_t *,apr_pool_t *)|svn_proplist_receiver2_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,apr_hash_t *,apr_pool_t *)|svn_proplist_receiver_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,char const *,apr_pool_t *)|svn_changelist_receiver_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t", "svn_client_info_receiver2_t|struct svn_error_t *(*)(void *,char const *,svn_client_info2_t const *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t", "svn_client_status_func_t|struct svn_error_t *(*)(void *,char const *,svn_client_status_t const *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,svn_dirent_t const *,svn_lock_t const *,char const *,apr_pool_t *)|svn_client_list_func_t", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,svn_dirent_t const *,svn_lock_t const *,char const *,char const *,char const *,apr_pool_t *)|svn_client_list_func2_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,svn_info_t const *,apr_pool_t *)|svn_info_receiver_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void = {"_p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void", "void (*)(void *,char const *,struct svn_wc_status2_t *)|svn_wc_status_func2_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_struct_svn_wc_status_t__void = {"_p_f_p_void_p_q_const__char_p_struct_svn_wc_status_t__void", "void (*)(void *,char const *,struct svn_wc_status_t *)|svn_wc_status_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,svn_wc_status2_t *,apr_pool_t *)|svn_wc_status_func3_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void = {"_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void", "svn_wc_notify_func2_t|void (*)(void *,struct svn_wc_notify_t const *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,svn_boolean_t *,char const *,char const *,char const *,apr_pool_t *)|svn_client_patch_func_t", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,svn_boolean_t *,char const *,svn_io_dirent2_t const *,apr_pool_t *)|svn_client_import_filter_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,svn_log_entry_t *,apr_pool_t *)|svn_log_entry_receiver_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,svn_revnum_t,svn_revnum_t,apr_int64_t,svn_revnum_t,apr_hash_t *,svn_revnum_t,apr_hash_t *,char const *,char const *,svn_boolean_t,apr_pool_t *)|svn_client_blame_receiver3_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_int = {"_p_int", "int *|svn_boolean_t *|apr_status_t *", 0, 0, (void*)0, 0};
@@ -38034,6 +33765,9 @@ static swig_type_info _swigt__p_svn_auth_iterstate_t = {"_p_svn_auth_iterstate_t
static swig_type_info _swigt__p_svn_auth_provider_object_t = {"_p_svn_auth_provider_object_t", "struct svn_auth_provider_object_t *|svn_auth_provider_object_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_provider_t = {"_p_svn_auth_provider_t", "struct svn_auth_provider_t *|svn_auth_provider_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_ssl_server_cert_info_t = {"_p_svn_auth_ssl_server_cert_info_t", "struct svn_auth_ssl_server_cert_info_t *|svn_auth_ssl_server_cert_info_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_ctx_t = {"_p_svn_checksum_ctx_t", "struct svn_checksum_ctx_t *|svn_checksum_ctx_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "enum svn_checksum_kind_t *|svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "struct svn_checksum_t *|svn_checksum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_client_commit_info_t = {"_p_svn_client_commit_info_t", "struct svn_client_commit_info_t *|svn_client_commit_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_client_commit_item2_t = {"_p_svn_client_commit_item2_t", "struct svn_client_commit_item2_t *|svn_client_commit_item2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_client_commit_item3_t = {"_p_svn_client_commit_item3_t", "struct svn_client_commit_item3_t *|svn_client_commit_item3_t *", 0, 0, (void*)0, 0};
@@ -38081,6 +33815,7 @@ static swig_type_info _swigt__p_svn_opt_subcommand_desc2_t = {"_p_svn_opt_subcom
static swig_type_info _swigt__p_svn_opt_subcommand_desc_t = {"_p_svn_opt_subcommand_desc_t", "struct svn_opt_subcommand_desc_t *|svn_opt_subcommand_desc_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_file_t = {"_p_svn_patch_file_t", "struct svn_patch_file_t *|svn_patch_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_t = {"_p_svn_patch_t", "struct svn_patch_t *|svn_patch_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_prop_inherited_item_t = {"_p_svn_prop_inherited_item_t", "struct svn_prop_inherited_item_t *|svn_prop_inherited_item_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_kind = {"_p_svn_prop_kind", "svn_prop_kind_t *|enum svn_prop_kind *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_patch_t = {"_p_svn_prop_patch_t", "struct svn_prop_patch_t *|svn_prop_patch_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_t = {"_p_svn_prop_t", "struct svn_prop_t *|svn_prop_t *", 0, 0, (void*)0, 0};
@@ -38100,6 +33835,9 @@ static swig_type_info _swigt__p_svn_txdelta_op_t = {"_p_svn_txdelta_op_t", "stru
static swig_type_info _swigt__p_svn_txdelta_stream_t = {"_p_svn_txdelta_stream_t", "struct svn_txdelta_stream_t *|svn_txdelta_stream_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_txdelta_window_t = {"_p_svn_txdelta_window_t", "struct svn_txdelta_window_t *|svn_txdelta_window_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_checklist_t = {"_p_svn_version_checklist_t", "struct svn_version_checklist_t *|svn_version_checklist_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_linked_lib_t = {"_p_svn_version_ext_linked_lib_t", "struct svn_version_ext_linked_lib_t *|svn_version_ext_linked_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_loaded_lib_t = {"_p_svn_version_ext_loaded_lib_t", "struct svn_version_ext_loaded_lib_t *|svn_version_ext_loaded_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_extended_t = {"_p_svn_version_extended_t", "struct svn_version_extended_t *|svn_version_extended_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_t = {"_p_svn_version_t", "struct svn_version_t *|svn_version_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_wc_adm_access_t = {"_p_svn_wc_adm_access_t", "struct svn_wc_adm_access_t *|svn_wc_adm_access_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_wc_committed_queue_t = {"_p_svn_wc_committed_queue_t", "struct svn_wc_committed_queue_t *|svn_wc_committed_queue_t *", 0, 0, (void*)0, 0};
@@ -38164,17 +33902,20 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void,
+ &_swigt__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void,
&_swigt__p_f_p_void_p_q_const__char_p_struct_svn_wc_status_t__void,
&_swigt__p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void,
&_swigt__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_int,
@@ -38199,6 +33940,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_auth_provider_object_t,
&_swigt__p_svn_auth_provider_t,
&_swigt__p_svn_auth_ssl_server_cert_info_t,
+ &_swigt__p_svn_checksum_ctx_t,
+ &_swigt__p_svn_checksum_kind_t,
+ &_swigt__p_svn_checksum_t,
&_swigt__p_svn_client_commit_info_t,
&_swigt__p_svn_client_commit_item2_t,
&_swigt__p_svn_client_commit_item3_t,
@@ -38246,6 +33990,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_opt_subcommand_desc_t,
&_swigt__p_svn_patch_file_t,
&_swigt__p_svn_patch_t,
+ &_swigt__p_svn_prop_inherited_item_t,
&_swigt__p_svn_prop_kind,
&_swigt__p_svn_prop_patch_t,
&_swigt__p_svn_prop_t,
@@ -38265,6 +34010,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_txdelta_stream_t,
&_swigt__p_svn_txdelta_window_t,
&_swigt__p_svn_version_checklist_t,
+ &_swigt__p_svn_version_ext_linked_lib_t,
+ &_swigt__p_svn_version_ext_loaded_lib_t,
+ &_swigt__p_svn_version_extended_t,
&_swigt__p_svn_version_t,
&_swigt__p_svn_wc_adm_access_t,
&_swigt__p_svn_wc_committed_queue_t,
@@ -38329,17 +34077,20 @@ static swig_cast_info _swigc__p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__cha
static swig_cast_info _swigc__p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void[] = { {&_swigt__p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void[] = { {&_swigt__p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_struct_svn_wc_status_t__void[] = { {&_swigt__p_f_p_void_p_q_const__char_p_struct_svn_wc_status_t__void, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void[] = { {&_swigt__p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_int[] = { {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}};
@@ -38364,6 +34115,9 @@ static swig_cast_info _swigc__p_svn_auth_iterstate_t[] = { {&_swigt__p_svn_auth
static swig_cast_info _swigc__p_svn_auth_provider_object_t[] = { {&_swigt__p_svn_auth_provider_object_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_provider_t[] = { {&_swigt__p_svn_auth_provider_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_ssl_server_cert_info_t[] = { {&_swigt__p_svn_auth_ssl_server_cert_info_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_ctx_t[] = { {&_swigt__p_svn_checksum_ctx_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_kind_t[] = { {&_swigt__p_svn_checksum_kind_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_t[] = { {&_swigt__p_svn_checksum_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_client_commit_info_t[] = { {&_swigt__p_svn_client_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_client_commit_item2_t[] = { {&_swigt__p_svn_client_commit_item2_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_client_commit_item3_t[] = { {&_swigt__p_svn_client_commit_item3_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -38411,6 +34165,7 @@ static swig_cast_info _swigc__p_svn_opt_subcommand_desc2_t[] = { {&_swigt__p_sv
static swig_cast_info _swigc__p_svn_opt_subcommand_desc_t[] = { {&_swigt__p_svn_opt_subcommand_desc_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_file_t[] = { {&_swigt__p_svn_patch_file_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_t[] = { {&_swigt__p_svn_patch_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_prop_inherited_item_t[] = { {&_swigt__p_svn_prop_inherited_item_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_kind[] = { {&_swigt__p_svn_prop_kind, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_patch_t[] = { {&_swigt__p_svn_prop_patch_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_t[] = { {&_swigt__p_svn_prop_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -38430,6 +34185,9 @@ static swig_cast_info _swigc__p_svn_txdelta_op_t[] = { {&_swigt__p_svn_txdelta_
static swig_cast_info _swigc__p_svn_txdelta_stream_t[] = { {&_swigt__p_svn_txdelta_stream_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_txdelta_window_t[] = { {&_swigt__p_svn_txdelta_window_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_checklist_t[] = { {&_swigt__p_svn_version_checklist_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_linked_lib_t[] = { {&_swigt__p_svn_version_ext_linked_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_loaded_lib_t[] = { {&_swigt__p_svn_version_ext_loaded_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_extended_t[] = { {&_swigt__p_svn_version_extended_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_t[] = { {&_swigt__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_wc_adm_access_t[] = { {&_swigt__p_svn_wc_adm_access_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_wc_committed_queue_t[] = { {&_swigt__p_svn_wc_committed_queue_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -38494,17 +34252,20 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void,
+ _swigc__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void,
_swigc__p_f_p_void_p_q_const__char_p_struct_svn_wc_status_t__void,
_swigc__p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void,
_swigc__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_int,
@@ -38529,6 +34290,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_auth_provider_object_t,
_swigc__p_svn_auth_provider_t,
_swigc__p_svn_auth_ssl_server_cert_info_t,
+ _swigc__p_svn_checksum_ctx_t,
+ _swigc__p_svn_checksum_kind_t,
+ _swigc__p_svn_checksum_t,
_swigc__p_svn_client_commit_info_t,
_swigc__p_svn_client_commit_item2_t,
_swigc__p_svn_client_commit_item3_t,
@@ -38576,6 +34340,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_opt_subcommand_desc_t,
_swigc__p_svn_patch_file_t,
_swigc__p_svn_patch_t,
+ _swigc__p_svn_prop_inherited_item_t,
_swigc__p_svn_prop_kind,
_swigc__p_svn_prop_patch_t,
_swigc__p_svn_prop_t,
@@ -38595,6 +34360,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_txdelta_stream_t,
_swigc__p_svn_txdelta_window_t,
_swigc__p_svn_version_checklist_t,
+ _swigc__p_svn_version_ext_linked_lib_t,
+ _swigc__p_svn_version_ext_loaded_lib_t,
+ _swigc__p_svn_version_extended_t,
_swigc__p_svn_version_t,
_swigc__p_svn_wc_adm_access_t,
_swigc__p_svn_wc_committed_queue_t,
@@ -38692,6 +34460,8 @@ static swig_command_info swig_commands[] = {
{"SVN::_Client::svn_client_commit_item3_t_outgoing_prop_changes_get", _wrap_svn_client_commit_item3_t_outgoing_prop_changes_get},
{"SVN::_Client::svn_client_commit_item3_t_session_relpath_set", _wrap_svn_client_commit_item3_t_session_relpath_set},
{"SVN::_Client::svn_client_commit_item3_t_session_relpath_get", _wrap_svn_client_commit_item3_t_session_relpath_get},
+{"SVN::_Client::svn_client_commit_item3_t_moved_from_abspath_set", _wrap_svn_client_commit_item3_t_moved_from_abspath_set},
+{"SVN::_Client::svn_client_commit_item3_t_moved_from_abspath_get", _wrap_svn_client_commit_item3_t_moved_from_abspath_get},
{"SVN::_Client::new_svn_client_commit_item3_t", _wrap_new_svn_client_commit_item3_t},
{"SVN::_Client::delete_svn_client_commit_item3_t", _wrap_delete_svn_client_commit_item3_t},
{"SVN::_Client::svn_client_commit_item2_t_path_set", _wrap_svn_client_commit_item2_t_path_set},
@@ -38791,6 +34561,7 @@ static swig_command_info swig_commands[] = {
{"SVN::_Client::svn_client_ctx_t_wc_ctx_get", _wrap_svn_client_ctx_t_wc_ctx_get},
{"SVN::_Client::new_svn_client_ctx_t", _wrap_new_svn_client_ctx_t},
{"SVN::_Client::delete_svn_client_ctx_t", _wrap_delete_svn_client_ctx_t},
+{"SVN::_Client::svn_client_create_context2", _wrap_svn_client_create_context2},
{"SVN::_Client::svn_client_create_context", _wrap_svn_client_create_context},
{"SVN::_Client::svn_client_args_to_target_array2", _wrap_svn_client_args_to_target_array2},
{"SVN::_Client::svn_client_args_to_target_array", _wrap_svn_client_args_to_target_array},
@@ -38804,6 +34575,7 @@ static swig_command_info swig_commands[] = {
{"SVN::_Client::svn_client_switch3", _wrap_svn_client_switch3},
{"SVN::_Client::svn_client_switch2", _wrap_svn_client_switch2},
{"SVN::_Client::svn_client_switch", _wrap_svn_client_switch},
+{"SVN::_Client::svn_client_add5", _wrap_svn_client_add5},
{"SVN::_Client::svn_client_add4", _wrap_svn_client_add4},
{"SVN::_Client::svn_client_add3", _wrap_svn_client_add3},
{"SVN::_Client::svn_client_add2", _wrap_svn_client_add2},
@@ -38816,10 +34588,12 @@ static swig_command_info swig_commands[] = {
{"SVN::_Client::svn_client_delete3", _wrap_svn_client_delete3},
{"SVN::_Client::svn_client_delete2", _wrap_svn_client_delete2},
{"SVN::_Client::svn_client_delete", _wrap_svn_client_delete},
+{"SVN::_Client::svn_client_import5", _wrap_svn_client_import5},
{"SVN::_Client::svn_client_import4", _wrap_svn_client_import4},
{"SVN::_Client::svn_client_import3", _wrap_svn_client_import3},
{"SVN::_Client::svn_client_import2", _wrap_svn_client_import2},
{"SVN::_Client::svn_client_import", _wrap_svn_client_import},
+{"SVN::_Client::svn_client_commit6", _wrap_svn_client_commit6},
{"SVN::_Client::svn_client_commit5", _wrap_svn_client_commit5},
{"SVN::_Client::svn_client_commit4", _wrap_svn_client_commit4},
{"SVN::_Client::svn_client_commit3", _wrap_svn_client_commit3},
@@ -38887,6 +34661,10 @@ static swig_command_info swig_commands[] = {
{"SVN::_Client::svn_client_status_t_ood_changed_author_get", _wrap_svn_client_status_t_ood_changed_author_get},
{"SVN::_Client::svn_client_status_t_backwards_compatibility_baton_set", _wrap_svn_client_status_t_backwards_compatibility_baton_set},
{"SVN::_Client::svn_client_status_t_backwards_compatibility_baton_get", _wrap_svn_client_status_t_backwards_compatibility_baton_get},
+{"SVN::_Client::svn_client_status_t_moved_from_abspath_set", _wrap_svn_client_status_t_moved_from_abspath_set},
+{"SVN::_Client::svn_client_status_t_moved_from_abspath_get", _wrap_svn_client_status_t_moved_from_abspath_get},
+{"SVN::_Client::svn_client_status_t_moved_to_abspath_set", _wrap_svn_client_status_t_moved_to_abspath_set},
+{"SVN::_Client::svn_client_status_t_moved_to_abspath_get", _wrap_svn_client_status_t_moved_to_abspath_get},
{"SVN::_Client::new_svn_client_status_t", _wrap_new_svn_client_status_t},
{"SVN::_Client::delete_svn_client_status_t", _wrap_delete_svn_client_status_t},
{"SVN::_Client::svn_client_status_dup", _wrap_svn_client_status_dup},
@@ -38905,11 +34683,13 @@ static swig_command_info swig_commands[] = {
{"SVN::_Client::svn_client_blame3", _wrap_svn_client_blame3},
{"SVN::_Client::svn_client_blame2", _wrap_svn_client_blame2},
{"SVN::_Client::svn_client_blame", _wrap_svn_client_blame},
+{"SVN::_Client::svn_client_diff6", _wrap_svn_client_diff6},
{"SVN::_Client::svn_client_diff5", _wrap_svn_client_diff5},
{"SVN::_Client::svn_client_diff4", _wrap_svn_client_diff4},
{"SVN::_Client::svn_client_diff3", _wrap_svn_client_diff3},
{"SVN::_Client::svn_client_diff2", _wrap_svn_client_diff2},
{"SVN::_Client::svn_client_diff", _wrap_svn_client_diff},
+{"SVN::_Client::svn_client_diff_peg6", _wrap_svn_client_diff_peg6},
{"SVN::_Client::svn_client_diff_peg5", _wrap_svn_client_diff_peg5},
{"SVN::_Client::svn_client_diff_peg4", _wrap_svn_client_diff_peg4},
{"SVN::_Client::svn_client_diff_peg3", _wrap_svn_client_diff_peg3},
@@ -38919,17 +34699,21 @@ static swig_command_info swig_commands[] = {
{"SVN::_Client::svn_client_diff_summarize", _wrap_svn_client_diff_summarize},
{"SVN::_Client::svn_client_diff_summarize_peg2", _wrap_svn_client_diff_summarize_peg2},
{"SVN::_Client::svn_client_diff_summarize_peg", _wrap_svn_client_diff_summarize_peg},
+{"SVN::_Client::svn_client_get_merging_summary", _wrap_svn_client_get_merging_summary},
+{"SVN::_Client::svn_client_merge5", _wrap_svn_client_merge5},
{"SVN::_Client::svn_client_merge4", _wrap_svn_client_merge4},
{"SVN::_Client::svn_client_merge3", _wrap_svn_client_merge3},
{"SVN::_Client::svn_client_merge2", _wrap_svn_client_merge2},
{"SVN::_Client::svn_client_merge", _wrap_svn_client_merge},
{"SVN::_Client::svn_client_merge_reintegrate", _wrap_svn_client_merge_reintegrate},
+{"SVN::_Client::svn_client_merge_peg5", _wrap_svn_client_merge_peg5},
{"SVN::_Client::svn_client_merge_peg4", _wrap_svn_client_merge_peg4},
{"SVN::_Client::svn_client_merge_peg3", _wrap_svn_client_merge_peg3},
{"SVN::_Client::svn_client_merge_peg2", _wrap_svn_client_merge_peg2},
{"SVN::_Client::svn_client_merge_peg", _wrap_svn_client_merge_peg},
{"SVN::_Client::svn_client_suggest_merge_sources", _wrap_svn_client_suggest_merge_sources},
{"SVN::_Client::svn_client_mergeinfo_get_merged", _wrap_svn_client_mergeinfo_get_merged},
+{"SVN::_Client::svn_client_mergeinfo_log2", _wrap_svn_client_mergeinfo_log2},
{"SVN::_Client::svn_client_mergeinfo_log", _wrap_svn_client_mergeinfo_log},
{"SVN::_Client::svn_client_mergeinfo_log_merged", _wrap_svn_client_mergeinfo_log_merged},
{"SVN::_Client::svn_client_mergeinfo_log_eligible", _wrap_svn_client_mergeinfo_log_eligible},
@@ -38955,6 +34739,7 @@ static swig_command_info swig_commands[] = {
{"SVN::_Client::svn_client_copy3", _wrap_svn_client_copy3},
{"SVN::_Client::svn_client_copy2", _wrap_svn_client_copy2},
{"SVN::_Client::svn_client_copy", _wrap_svn_client_copy},
+{"SVN::_Client::svn_client_move7", _wrap_svn_client_move7},
{"SVN::_Client::svn_client_move6", _wrap_svn_client_move6},
{"SVN::_Client::svn_client_move5", _wrap_svn_client_move5},
{"SVN::_Client::svn_client_move4", _wrap_svn_client_move4},
@@ -38968,11 +34753,13 @@ static swig_command_info swig_commands[] = {
{"SVN::_Client::svn_client_propset", _wrap_svn_client_propset},
{"SVN::_Client::svn_client_revprop_set2", _wrap_svn_client_revprop_set2},
{"SVN::_Client::svn_client_revprop_set", _wrap_svn_client_revprop_set},
+{"SVN::_Client::svn_client_propget5", _wrap_svn_client_propget5},
{"SVN::_Client::svn_client_propget4", _wrap_svn_client_propget4},
{"SVN::_Client::svn_client_propget3", _wrap_svn_client_propget3},
{"SVN::_Client::svn_client_propget2", _wrap_svn_client_propget2},
{"SVN::_Client::svn_client_propget", _wrap_svn_client_propget},
{"SVN::_Client::svn_client_revprop_get", _wrap_svn_client_revprop_get},
+{"SVN::_Client::svn_client_proplist4", _wrap_svn_client_proplist4},
{"SVN::_Client::svn_client_proplist3", _wrap_svn_client_proplist3},
{"SVN::_Client::svn_client_proplist2", _wrap_svn_client_proplist2},
{"SVN::_Client::svn_client_proplist", _wrap_svn_client_proplist},
@@ -38982,6 +34769,7 @@ static swig_command_info swig_commands[] = {
{"SVN::_Client::svn_client_export3", _wrap_svn_client_export3},
{"SVN::_Client::svn_client_export2", _wrap_svn_client_export2},
{"SVN::_Client::svn_client_export", _wrap_svn_client_export},
+{"SVN::_Client::svn_client_list3", _wrap_svn_client_list3},
{"SVN::_Client::svn_client_list2", _wrap_svn_client_list2},
{"SVN::_Client::svn_client_list", _wrap_svn_client_list},
{"SVN::_Client::svn_client_ls3", _wrap_svn_client_ls3},
@@ -39084,11 +34872,14 @@ static swig_command_info swig_commands[] = {
{"SVN::_Client::svn_client_patch", _wrap_svn_client_patch},
{"SVN::_Client::svn_client_url_from_path2", _wrap_svn_client_url_from_path2},
{"SVN::_Client::svn_client_url_from_path", _wrap_svn_client_url_from_path},
+{"SVN::_Client::svn_client_get_repos_root", _wrap_svn_client_get_repos_root},
{"SVN::_Client::svn_client_root_url_from_path", _wrap_svn_client_root_url_from_path},
{"SVN::_Client::svn_client_uuid_from_url", _wrap_svn_client_uuid_from_url},
{"SVN::_Client::svn_client_uuid_from_path2", _wrap_svn_client_uuid_from_path2},
{"SVN::_Client::svn_client_uuid_from_path", _wrap_svn_client_uuid_from_path},
+{"SVN::_Client::svn_client_open_ra_session2", _wrap_svn_client_open_ra_session2},
{"SVN::_Client::svn_client_open_ra_session", _wrap_svn_client_open_ra_session},
+{"SVN::_Client::svn_proplist_invoke_receiver2", _wrap_svn_proplist_invoke_receiver2},
{"SVN::_Client::svn_proplist_invoke_receiver", _wrap_svn_proplist_invoke_receiver},
{"SVN::_Client::svn_client_invoke_get_commit_log3", _wrap_svn_client_invoke_get_commit_log3},
{"SVN::_Client::svn_client_invoke_get_commit_log2", _wrap_svn_client_invoke_get_commit_log2},
@@ -39097,7 +34888,9 @@ static swig_command_info swig_commands[] = {
{"SVN::_Client::svn_client_invoke_blame_receiver2", _wrap_svn_client_invoke_blame_receiver2},
{"SVN::_Client::svn_client_invoke_blame_receiver", _wrap_svn_client_invoke_blame_receiver},
{"SVN::_Client::svn_client_invoke_diff_summarize_func", _wrap_svn_client_invoke_diff_summarize_func},
+{"SVN::_Client::svn_client_invoke_import_filter_func", _wrap_svn_client_invoke_import_filter_func},
{"SVN::_Client::svn_client_invoke_status_func", _wrap_svn_client_invoke_status_func},
+{"SVN::_Client::svn_client_invoke_list_func2", _wrap_svn_client_invoke_list_func2},
{"SVN::_Client::svn_client_invoke_list_func", _wrap_svn_client_invoke_list_func},
{"SVN::_Client::svn_info_invoke_receiver", _wrap_svn_info_invoke_receiver},
{"SVN::_Client::svn_client_invoke_info_receiver2", _wrap_svn_client_invoke_info_receiver2},
@@ -39163,8 +34956,6 @@ SWIG_InitializeModule(void *clientdata) {
swig_module_info *module_head, *iter;
int found, init;
- clientdata = clientdata;
-
/* check to see if the circular list has been setup, if not, set it up */
if (swig_module.next==0) {
/* Initialize the swig_module */
@@ -39355,25 +35146,30 @@ XS(SWIG_init) {
/* Install commands */
for (i = 0; swig_commands[i].name; i++) {
- newXS((char*) swig_commands[i].name,swig_commands[i].wrapper, (char*)__FILE__);
+ /* Casts only needed for Perl < 5.10. */
+#ifdef __cplusplus
+ newXS(const_cast<char*>(swig_commands[i].name), swig_commands[i].wrapper, const_cast<char*>(__FILE__));
+#else
+ newXS((char*)swig_commands[i].name, swig_commands[i].wrapper, (char*)__FILE__);
+#endif
}
/* Install variables */
for (i = 0; swig_variables[i].name; i++) {
SV *sv;
- sv = get_sv((char*) swig_variables[i].name, TRUE | 0x2 | GV_ADDMULTI);
+ sv = get_sv(swig_variables[i].name, TRUE | 0x2 | GV_ADDMULTI);
if (swig_variables[i].type) {
SWIG_MakePtr(sv,(void *)1, *swig_variables[i].type,0);
} else {
sv_setiv(sv,(IV) 0);
}
- swig_create_magic(sv, (char *) swig_variables[i].name, swig_variables[i].set, swig_variables[i].get);
+ swig_create_magic(sv, swig_variables[i].name, swig_variables[i].set, swig_variables[i].get);
}
/* Install constant */
for (i = 0; swig_constants[i].type; i++) {
SV *sv;
- sv = get_sv((char*)swig_constants[i].name, TRUE | 0x2 | GV_ADDMULTI);
+ sv = get_sv(swig_constants[i].name, TRUE | 0x2 | GV_ADDMULTI);
switch(swig_constants[i].type) {
case SWIG_INT:
sv_setiv(sv, (IV) swig_constants[i].lvalue);
@@ -39382,7 +35178,7 @@ XS(SWIG_init) {
sv_setnv(sv, (double) swig_constants[i].dvalue);
break;
case SWIG_STRING:
- sv_setpv(sv, (char *) swig_constants[i].pvalue);
+ sv_setpv(sv, (const char *) swig_constants[i].pvalue);
break;
case SWIG_POINTER:
SWIG_MakePtr(sv, swig_constants[i].pvalue, *(swig_constants[i].ptype),0);
@@ -39396,67 +35192,72 @@ XS(SWIG_init) {
SvREADONLY_on(sv);
}
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CLIENT_COMMIT_ITEM_ADD", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0x01)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CLIENT_COMMIT_ITEM_DELETE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0x02)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CLIENT_COMMIT_ITEM_TEXT_MODS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0x04)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CLIENT_COMMIT_ITEM_PROP_MODS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0x08)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CLIENT_COMMIT_ITEM_IS_COPY", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0x10)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CLIENT_COMMIT_ITEM_LOCK_TOKEN", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0x20)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_CLIENT_COMMIT_ITEM_MOVED_HERE", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0x40)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_client_diff_summarize_kind_normal", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_client_diff_summarize_kind_normal)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_client_diff_summarize_kind_added", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_client_diff_summarize_kind_added)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_client_diff_summarize_kind_modified", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_client_diff_summarize_kind_modified)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_client_diff_summarize_kind_deleted", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_client_diff_summarize_kind_deleted)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CLIENT_AUTH_USERNAME", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("username"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_CLIENT_AUTH_PASSWORD", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("password"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SWIG_SVN_INFO_SIZE_UNKNOWN", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_unsigned_SS_long SWIG_PERL_CALL_ARGS_1((unsigned long)(-1)));
SvREADONLY_on(sv);
diff --git a/subversion/bindings/swig/perl/native/svn_delta.c b/subversion/bindings/swig/perl/native/svn_delta.c
index af34cb1..9bbeabf 100644
--- a/subversion/bindings/swig/perl/native/svn_delta.c
+++ b/subversion/bindings/swig/perl/native/svn_delta.c
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -830,50 +830,35 @@ extern "C" {
SWIGINTERN const char*
SWIG_Perl_ErrorType(int code) {
- const char* type = 0;
switch(code) {
case SWIG_MemoryError:
- type = "MemoryError";
- break;
+ return "MemoryError";
case SWIG_IOError:
- type = "IOError";
- break;
+ return "IOError";
case SWIG_RuntimeError:
- type = "RuntimeError";
- break;
+ return "RuntimeError";
case SWIG_IndexError:
- type = "IndexError";
- break;
+ return "IndexError";
case SWIG_TypeError:
- type = "TypeError";
- break;
+ return "TypeError";
case SWIG_DivisionByZero:
- type = "ZeroDivisionError";
- break;
+ return "ZeroDivisionError";
case SWIG_OverflowError:
- type = "OverflowError";
- break;
+ return "OverflowError";
case SWIG_SyntaxError:
- type = "SyntaxError";
- break;
+ return "SyntaxError";
case SWIG_ValueError:
- type = "ValueError";
- break;
+ return "ValueError";
case SWIG_SystemError:
- type = "SystemError";
- break;
+ return "SystemError";
case SWIG_AttributeError:
- type = "AttributeError";
- break;
+ return "AttributeError";
default:
- type = "RuntimeError";
+ return "RuntimeError";
}
- return type;
}
-
-
/* -----------------------------------------------------------------------------
* perlrun.swg
*
@@ -916,14 +901,14 @@ SWIG_Perl_ErrorType(int code) {
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Perl_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Perl_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Perl_SetModule(pointer)
/* Error manipulation */
#define SWIG_ErrorType(code) SWIG_Perl_ErrorType(code)
-#define SWIG_Error(code, msg) sv_setpvf(GvSV(PL_errgv),"%s %s\n", SWIG_ErrorType(code), msg)
+#define SWIG_Error(code, msg) sv_setpvf(get_sv("@", GV_ADD), "%s %s", SWIG_ErrorType(code), msg)
#define SWIG_fail goto fail
/* Perl-specific SWIG API */
@@ -1017,8 +1002,6 @@ typedef int (*SwigMagicFunc)(struct interpreter *, SV *, MAGIC *);
#endif /* MULTIPLICITY */
#endif /* PERL_OBJECT */
-/* Workaround for bug in perl 5.6.x croak and earlier */
-#if (PERL_VERSION < 8)
# ifdef PERL_OBJECT
# define SWIG_croak_null() SWIG_Perl_croak_null(pPerl)
static void SWIG_Perl_croak_null(CPerlObj *pPerl)
@@ -1026,17 +1009,16 @@ static void SWIG_Perl_croak_null(CPerlObj *pPerl)
static void SWIG_croak_null()
# endif
{
- SV *err=ERRSV;
+ SV *err = get_sv("@", GV_ADD);
# if (PERL_VERSION < 6)
croak("%_", err);
# else
- if (SvOK(err) && !SvROK(err)) croak("%_", err);
- croak(Nullch);
+ if (sv_isobject(err))
+ croak(0);
+ else
+ croak("%s", SvPV_nolen(err));
# endif
}
-#else
-# define SWIG_croak_null() croak(Nullch)
-#endif
/*
@@ -1088,8 +1070,7 @@ SWIG_TypeProxyCheck(const char *c, swig_type_info *ty) {
if (ty) {
swig_cast_info *iter = ty->cast;
while (iter) {
- if ( (!iter->type->clientdata && (strcmp(iter->type->name, c) == 0)) ||
- (iter->type->clientdata && (strcmp((char*)iter->type->clientdata, c) == 0)) ) {
+ if (strcmp(SWIG_Perl_TypeProxyName(iter->type), c) == 0) {
if (iter == ty->cast)
return iter;
/* Move iter to the top of the linked list */
@@ -1220,7 +1201,7 @@ SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, swig_type_info *t, i
SV *obj=newSV(0);
HV *hash=newHV();
HV *stash;
- sv_setref_pv(obj, (char *) SWIG_Perl_TypeProxyName(t), ptr);
+ sv_setref_pv(obj, SWIG_Perl_TypeProxyName(t), ptr);
stash=SvSTASH(SvRV(obj));
if (flags & SWIG_POINTER_OWN) {
HV *hv;
@@ -1238,7 +1219,7 @@ SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, swig_type_info *t, i
sv_bless(sv, stash);
}
else {
- sv_setref_pv(sv, (char *) SWIG_Perl_TypeProxyName(t), ptr);
+ sv_setref_pv(sv, SWIG_Perl_TypeProxyName(t), ptr);
}
}
@@ -1329,19 +1310,23 @@ typedef struct {
/* Magic variable code */
#ifndef PERL_OBJECT
-#define swig_create_magic(s,a,b,c) _swig_create_magic(s,a,b,c)
- #ifndef MULTIPLICITY
- SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *))
- #else
- SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(struct interpreter*, SV *, MAGIC *), int (*get)(struct interpreter*, SV *,MAGIC *))
- #endif
+# ifdef __cplusplus
+# define swig_create_magic(s,a,b,c) _swig_create_magic(s,const_cast<char*>(a),b,c)
+# else
+# define swig_create_magic(s,a,b,c) _swig_create_magic(s,(char*)(a),b,c)
+# endif
+# ifndef MULTIPLICITY
+SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *))
+# else
+SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(struct interpreter*, SV *, MAGIC *), int (*get)(struct interpreter*, SV *,MAGIC *))
+# endif
#else
# define swig_create_magic(s,a,b,c) _swig_create_magic(pPerl,s,a,b,c)
SWIGRUNTIME void _swig_create_magic(CPerlObj *pPerl, SV *sv, const char *name, int (CPerlObj::*set)(SV *, MAGIC *), int (CPerlObj::*get)(SV *, MAGIC *))
#endif
{
MAGIC *mg;
- sv_magic(sv,sv,'U',(char *) name,strlen(name));
+ sv_magic(sv,sv,'U',name,strlen(name));
mg = mg_find(sv,'U');
mg->mg_virtual = (MGVTBL *) malloc(sizeof(MGVTBL));
mg->mg_virtual->svt_get = (SwigMagicFunc) get;
@@ -1353,7 +1338,7 @@ SWIGRUNTIME void _swig_create_magic(CPerlObj *pPerl, SV *sv, const char *name, i
SWIGRUNTIME swig_module_info *
-SWIG_Perl_GetModule(void) {
+SWIG_Perl_GetModule(void *SWIGUNUSEDPARM(clientdata)) {
static void *type_pointer = (void *)0;
SV *pointer;
@@ -1447,9 +1432,6 @@ SWIG_Perl_SetModule(swig_module_info *module) {
#ifdef eof
#undef eof
#endif
-#ifdef bool
- #undef bool
-#endif
#ifdef close
#undef close
#endif
@@ -1490,6 +1472,14 @@ SWIG_Perl_SetModule(swig_module_info *module) {
#undef stat
#endif
+#ifdef bool
+ /* Leave if macro is from C99 stdbool.h */
+ #ifndef __bool_true_false_are_defined
+ #undef bool
+ #endif
+#endif
+
+
#define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0)
@@ -1548,59 +1538,66 @@ SWIG_Perl_SetModule(swig_module_info *module) {
#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[42]
#define SWIGTYPE_p_svn_auth_provider_t swig_types[43]
#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[44]
-#define SWIGTYPE_p_svn_checksum_kind_t swig_types[45]
-#define SWIGTYPE_p_svn_commit_info_t swig_types[46]
-#define SWIGTYPE_p_svn_config_t swig_types[47]
-#define SWIGTYPE_p_svn_delta_editor_t swig_types[48]
-#define SWIGTYPE_p_svn_depth_t swig_types[49]
-#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[50]
-#define SWIGTYPE_p_svn_diff_datasource_e swig_types[51]
-#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[52]
-#define SWIGTYPE_p_svn_diff_file_options_t swig_types[53]
-#define SWIGTYPE_p_svn_diff_fns2_t swig_types[54]
-#define SWIGTYPE_p_svn_diff_fns_t swig_types[55]
-#define SWIGTYPE_p_svn_diff_hunk_t swig_types[56]
-#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[57]
-#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[58]
-#define SWIGTYPE_p_svn_diff_t swig_types[59]
-#define SWIGTYPE_p_svn_dirent_t swig_types[60]
-#define SWIGTYPE_p_svn_errno_t swig_types[61]
-#define SWIGTYPE_p_svn_error_t swig_types[62]
-#define SWIGTYPE_p_svn_io_dirent2_t swig_types[63]
-#define SWIGTYPE_p_svn_io_dirent_t swig_types[64]
-#define SWIGTYPE_p_svn_io_file_del_t swig_types[65]
-#define SWIGTYPE_p_svn_location_segment_t swig_types[66]
-#define SWIGTYPE_p_svn_lock_t swig_types[67]
-#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[68]
-#define SWIGTYPE_p_svn_log_changed_path_t swig_types[69]
-#define SWIGTYPE_p_svn_log_entry_t swig_types[70]
-#define SWIGTYPE_p_svn_merge_range_t swig_types[71]
-#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[72]
-#define SWIGTYPE_p_svn_node_kind_t swig_types[73]
-#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[74]
-#define SWIGTYPE_p_svn_opt_revision_t swig_types[75]
-#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[76]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[77]
-#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[78]
-#define SWIGTYPE_p_svn_patch_file_t swig_types[79]
-#define SWIGTYPE_p_svn_patch_t swig_types[80]
-#define SWIGTYPE_p_svn_prop_kind swig_types[81]
-#define SWIGTYPE_p_svn_prop_patch_t swig_types[82]
-#define SWIGTYPE_p_svn_stream_mark_t swig_types[83]
-#define SWIGTYPE_p_svn_stream_t swig_types[84]
-#define SWIGTYPE_p_svn_string_t swig_types[85]
-#define SWIGTYPE_p_svn_stringbuf_t swig_types[86]
-#define SWIGTYPE_p_svn_tristate_t swig_types[87]
-#define SWIGTYPE_p_svn_txdelta_op_t swig_types[88]
-#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[89]
-#define SWIGTYPE_p_svn_txdelta_window_t swig_types[90]
-#define SWIGTYPE_p_svn_version_checklist_t swig_types[91]
-#define SWIGTYPE_p_svn_version_t swig_types[92]
-#define SWIGTYPE_p_unsigned_char swig_types[93]
-#define SWIGTYPE_p_unsigned_long swig_types[94]
-#define SWIGTYPE_p_void swig_types[95]
-static swig_type_info *swig_types[97];
-static swig_module_info swig_module = {swig_types, 96, 0, 0, 0, 0};
+#define SWIGTYPE_p_svn_checksum_ctx_t swig_types[45]
+#define SWIGTYPE_p_svn_checksum_kind_t swig_types[46]
+#define SWIGTYPE_p_svn_checksum_t swig_types[47]
+#define SWIGTYPE_p_svn_commit_info_t swig_types[48]
+#define SWIGTYPE_p_svn_config_t swig_types[49]
+#define SWIGTYPE_p_svn_delta_editor_t swig_types[50]
+#define SWIGTYPE_p_svn_depth_t swig_types[51]
+#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[52]
+#define SWIGTYPE_p_svn_diff_datasource_e swig_types[53]
+#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[54]
+#define SWIGTYPE_p_svn_diff_file_options_t swig_types[55]
+#define SWIGTYPE_p_svn_diff_fns2_t swig_types[56]
+#define SWIGTYPE_p_svn_diff_fns_t swig_types[57]
+#define SWIGTYPE_p_svn_diff_hunk_t swig_types[58]
+#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[59]
+#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[60]
+#define SWIGTYPE_p_svn_diff_t swig_types[61]
+#define SWIGTYPE_p_svn_dirent_t swig_types[62]
+#define SWIGTYPE_p_svn_errno_t swig_types[63]
+#define SWIGTYPE_p_svn_error_t swig_types[64]
+#define SWIGTYPE_p_svn_io_dirent2_t swig_types[65]
+#define SWIGTYPE_p_svn_io_dirent_t swig_types[66]
+#define SWIGTYPE_p_svn_io_file_del_t swig_types[67]
+#define SWIGTYPE_p_svn_location_segment_t swig_types[68]
+#define SWIGTYPE_p_svn_lock_t swig_types[69]
+#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[70]
+#define SWIGTYPE_p_svn_log_changed_path_t swig_types[71]
+#define SWIGTYPE_p_svn_log_entry_t swig_types[72]
+#define SWIGTYPE_p_svn_merge_range_t swig_types[73]
+#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[74]
+#define SWIGTYPE_p_svn_node_kind_t swig_types[75]
+#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[76]
+#define SWIGTYPE_p_svn_opt_revision_t swig_types[77]
+#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[78]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[79]
+#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[80]
+#define SWIGTYPE_p_svn_patch_file_t swig_types[81]
+#define SWIGTYPE_p_svn_patch_t swig_types[82]
+#define SWIGTYPE_p_svn_prop_inherited_item_t swig_types[83]
+#define SWIGTYPE_p_svn_prop_kind swig_types[84]
+#define SWIGTYPE_p_svn_prop_patch_t swig_types[85]
+#define SWIGTYPE_p_svn_stream_mark_t swig_types[86]
+#define SWIGTYPE_p_svn_stream_t swig_types[87]
+#define SWIGTYPE_p_svn_string_t swig_types[88]
+#define SWIGTYPE_p_svn_stringbuf_t swig_types[89]
+#define SWIGTYPE_p_svn_tristate_t swig_types[90]
+#define SWIGTYPE_p_svn_txdelta_op_t swig_types[91]
+#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[92]
+#define SWIGTYPE_p_svn_txdelta_window_t swig_types[93]
+#define SWIGTYPE_p_svn_version_checklist_t swig_types[94]
+#define SWIGTYPE_p_svn_version_ext_linked_lib_t swig_types[95]
+#define SWIGTYPE_p_svn_version_ext_loaded_lib_t swig_types[96]
+#define SWIGTYPE_p_svn_version_extended_t swig_types[97]
+#define SWIGTYPE_p_svn_version_t swig_types[98]
+#define SWIGTYPE_p_svn_wc_external_item2_t swig_types[99]
+#define SWIGTYPE_p_unsigned_char swig_types[100]
+#define SWIGTYPE_p_unsigned_long swig_types[101]
+#define SWIGTYPE_p_void swig_types[102]
+static swig_type_info *swig_types[104];
+static swig_module_info swig_module = {swig_types, 103, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@@ -1611,7 +1608,7 @@ static swig_module_info swig_module = {swig_types, 96, 0, 0, 0, 0};
#define SWIG_name "SVN::_Delta::boot_SVN___Delta"
#define SWIG_prefix "SVN::_Delta::"
-#define SWIGVERSION 0x020004
+#define SWIGVERSION 0x020009
#define SWIG_VERSION SWIGVERSION
@@ -1649,10 +1646,13 @@ SWIGEXPORT void SWIG_init (CV *cv, CPerlObj *);
SWIGINTERNINLINE SV *
SWIG_From_long SWIG_PERL_DECL_ARGS_1(long value)
-{
- SV *obj = sv_newmortal();
- sv_setiv(obj, (IV) value);
- return obj;
+{
+ SV *sv;
+ if (value >= IV_MIN && value <= IV_MAX)
+ sv = newSViv(value);
+ else
+ sv = newSVpvf("%ld", value);
+ return sv_2mortal(sv);
}
@@ -1743,9 +1743,20 @@ SWIG_CanCastAsInteger(double *d, double min, double max) {
SWIGINTERN int
SWIG_AsVal_long SWIG_PERL_DECL_ARGS_2(SV *obj, long* val)
{
- if (SvIOK(obj)) {
- if (val) *val = SvIV(obj);
- return SWIG_OK;
+ if (SvUOK(obj)) {
+ UV v = SvUV(obj);
+ if (v <= LONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
+ } else if (SvIOK(obj)) {
+ IV v = SvIV(obj);
+ if (v >= LONG_MIN && v <= LONG_MAX) {
+ if(val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
} else {
int dispatch = 0;
const char *nptr = SvPV_nolen(obj);
@@ -1797,16 +1808,19 @@ SWIGINTERN int
SWIG_AsVal_unsigned_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, unsigned long *val)
{
if (SvUOK(obj)) {
- if (val) *val = SvUV(obj);
- return SWIG_OK;
- } else if (SvIOK(obj)) {
- long v = SvIV(obj);
- if (v >= 0) {
+ UV v = SvUV(obj);
+ if (v <= ULONG_MAX) {
if (val) *val = v;
return SWIG_OK;
- } else {
- return SWIG_OverflowError;
}
+ return SWIG_OverflowError;
+ } else if (SvIOK(obj)) {
+ IV v = SvIV(obj);
+ if (v >= 0 && v <= ULONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
} else {
int dispatch = 0;
const char *nptr = SvPV_nolen(obj);
@@ -1840,10 +1854,13 @@ SWIG_AsVal_unsigned_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, unsigned long *val)
SWIGINTERNINLINE SV *
SWIG_From_unsigned_SS_long SWIG_PERL_DECL_ARGS_1(unsigned long value)
-{
- SV *obj = sv_newmortal();
- sv_setuv(obj, (UV) value);
- return obj;
+{
+ SV *sv;
+ if (value <= UV_MAX)
+ sv = newSVuv(value);
+ else
+ sv = newSVpvf("%lu", value);
+ return sv_2mortal(sv);
}
@@ -1862,9 +1879,20 @@ SWIG_From_unsigned_SS_long SWIG_PERL_DECL_ARGS_1(unsigned long value)
SWIGINTERN int
SWIG_AsVal_long_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, long long *val)
{
- if (SvIOK(obj)) {
- if (val) *val = SvIV(obj);
- return SWIG_OK;
+ if (SvUOK(obj)) {
+ UV v = SvUV(obj);
+ if (v < LLONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
+ } else if (SvIOK(obj)) {
+ IV v = SvIV(obj);
+ if (v >= LLONG_MIN && v <= LLONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
} else {
int dispatch = 0;
const char *nptr = SvPV_nolen(obj);
@@ -2171,7 +2199,7 @@ XS(_wrap_svn_delta_version) {
XS(_wrap_svn_txdelta_op_t_action_code_set) {
{
- svn_txdelta_op_t *arg1 = (svn_txdelta_op_t *) 0 ;
+ struct svn_txdelta_op_t *arg1 = (struct svn_txdelta_op_t *) 0 ;
enum svn_delta_action arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2185,9 +2213,9 @@ XS(_wrap_svn_txdelta_op_t_action_code_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_txdelta_op_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_op_t_action_code_set" "', argument " "1"" of type '" "svn_txdelta_op_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_op_t_action_code_set" "', argument " "1"" of type '" "struct svn_txdelta_op_t *""'");
}
- arg1 = (svn_txdelta_op_t *)(argp1);
+ arg1 = (struct svn_txdelta_op_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_txdelta_op_t_action_code_set" "', argument " "2"" of type '" "enum svn_delta_action""'");
@@ -2208,7 +2236,7 @@ XS(_wrap_svn_txdelta_op_t_action_code_set) {
XS(_wrap_svn_txdelta_op_t_action_code_get) {
{
- svn_txdelta_op_t *arg1 = (svn_txdelta_op_t *) 0 ;
+ struct svn_txdelta_op_t *arg1 = (struct svn_txdelta_op_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2220,9 +2248,9 @@ XS(_wrap_svn_txdelta_op_t_action_code_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_txdelta_op_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_op_t_action_code_get" "', argument " "1"" of type '" "svn_txdelta_op_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_op_t_action_code_get" "', argument " "1"" of type '" "struct svn_txdelta_op_t *""'");
}
- arg1 = (svn_txdelta_op_t *)(argp1);
+ arg1 = (struct svn_txdelta_op_t *)(argp1);
result = (enum svn_delta_action) ((arg1)->action_code);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -2236,7 +2264,7 @@ XS(_wrap_svn_txdelta_op_t_action_code_get) {
XS(_wrap_svn_txdelta_op_t_offset_set) {
{
- svn_txdelta_op_t *arg1 = (svn_txdelta_op_t *) 0 ;
+ struct svn_txdelta_op_t *arg1 = (struct svn_txdelta_op_t *) 0 ;
apr_size_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2250,9 +2278,9 @@ XS(_wrap_svn_txdelta_op_t_offset_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_txdelta_op_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_op_t_offset_set" "', argument " "1"" of type '" "svn_txdelta_op_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_op_t_offset_set" "', argument " "1"" of type '" "struct svn_txdelta_op_t *""'");
}
- arg1 = (svn_txdelta_op_t *)(argp1);
+ arg1 = (struct svn_txdelta_op_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_txdelta_op_t_offset_set" "', argument " "2"" of type '" "apr_size_t""'");
@@ -2273,7 +2301,7 @@ XS(_wrap_svn_txdelta_op_t_offset_set) {
XS(_wrap_svn_txdelta_op_t_offset_get) {
{
- svn_txdelta_op_t *arg1 = (svn_txdelta_op_t *) 0 ;
+ struct svn_txdelta_op_t *arg1 = (struct svn_txdelta_op_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2285,9 +2313,9 @@ XS(_wrap_svn_txdelta_op_t_offset_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_txdelta_op_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_op_t_offset_get" "', argument " "1"" of type '" "svn_txdelta_op_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_op_t_offset_get" "', argument " "1"" of type '" "struct svn_txdelta_op_t *""'");
}
- arg1 = (svn_txdelta_op_t *)(argp1);
+ arg1 = (struct svn_txdelta_op_t *)(argp1);
result = ((arg1)->offset);
ST(argvi) = SWIG_From_unsigned_SS_long SWIG_PERL_CALL_ARGS_1((unsigned long)(result)); argvi++ ;
@@ -2301,7 +2329,7 @@ XS(_wrap_svn_txdelta_op_t_offset_get) {
XS(_wrap_svn_txdelta_op_t_length_set) {
{
- svn_txdelta_op_t *arg1 = (svn_txdelta_op_t *) 0 ;
+ struct svn_txdelta_op_t *arg1 = (struct svn_txdelta_op_t *) 0 ;
apr_size_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2315,9 +2343,9 @@ XS(_wrap_svn_txdelta_op_t_length_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_txdelta_op_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_op_t_length_set" "', argument " "1"" of type '" "svn_txdelta_op_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_op_t_length_set" "', argument " "1"" of type '" "struct svn_txdelta_op_t *""'");
}
- arg1 = (svn_txdelta_op_t *)(argp1);
+ arg1 = (struct svn_txdelta_op_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_txdelta_op_t_length_set" "', argument " "2"" of type '" "apr_size_t""'");
@@ -2338,7 +2366,7 @@ XS(_wrap_svn_txdelta_op_t_length_set) {
XS(_wrap_svn_txdelta_op_t_length_get) {
{
- svn_txdelta_op_t *arg1 = (svn_txdelta_op_t *) 0 ;
+ struct svn_txdelta_op_t *arg1 = (struct svn_txdelta_op_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2350,9 +2378,9 @@ XS(_wrap_svn_txdelta_op_t_length_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_txdelta_op_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_op_t_length_get" "', argument " "1"" of type '" "svn_txdelta_op_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_op_t_length_get" "', argument " "1"" of type '" "struct svn_txdelta_op_t *""'");
}
- arg1 = (svn_txdelta_op_t *)(argp1);
+ arg1 = (struct svn_txdelta_op_t *)(argp1);
result = ((arg1)->length);
ST(argvi) = SWIG_From_unsigned_SS_long SWIG_PERL_CALL_ARGS_1((unsigned long)(result)); argvi++ ;
@@ -2367,14 +2395,14 @@ XS(_wrap_svn_txdelta_op_t_length_get) {
XS(_wrap_new_svn_txdelta_op_t) {
{
int argvi = 0;
- svn_txdelta_op_t *result = 0 ;
+ struct svn_txdelta_op_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_txdelta_op_t();");
}
{
- result = (svn_txdelta_op_t *)calloc(1, sizeof(svn_txdelta_op_t));
+ result = (struct svn_txdelta_op_t *)calloc(1, sizeof(struct svn_txdelta_op_t));
@@ -2389,7 +2417,7 @@ XS(_wrap_new_svn_txdelta_op_t) {
XS(_wrap_delete_svn_txdelta_op_t) {
{
- svn_txdelta_op_t *arg1 = (svn_txdelta_op_t *) 0 ;
+ struct svn_txdelta_op_t *arg1 = (struct svn_txdelta_op_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2400,9 +2428,9 @@ XS(_wrap_delete_svn_txdelta_op_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_txdelta_op_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_txdelta_op_t" "', argument " "1"" of type '" "svn_txdelta_op_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_txdelta_op_t" "', argument " "1"" of type '" "struct svn_txdelta_op_t *""'");
}
- arg1 = (svn_txdelta_op_t *)(argp1);
+ arg1 = (struct svn_txdelta_op_t *)(argp1);
{
free((char *) arg1);
@@ -2421,7 +2449,7 @@ XS(_wrap_delete_svn_txdelta_op_t) {
XS(_wrap_svn_txdelta_window_t_sview_offset_set) {
{
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
svn_filesize_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2435,9 +2463,9 @@ XS(_wrap_svn_txdelta_window_t_sview_offset_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_txdelta_window_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_window_t_sview_offset_set" "', argument " "1"" of type '" "svn_txdelta_window_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_window_t_sview_offset_set" "', argument " "1"" of type '" "struct svn_txdelta_window_t *""'");
}
- arg1 = (svn_txdelta_window_t *)(argp1);
+ arg1 = (struct svn_txdelta_window_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_txdelta_window_t_sview_offset_set" "', argument " "2"" of type '" "svn_filesize_t""'");
@@ -2458,7 +2486,7 @@ XS(_wrap_svn_txdelta_window_t_sview_offset_set) {
XS(_wrap_svn_txdelta_window_t_sview_offset_get) {
{
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2470,9 +2498,9 @@ XS(_wrap_svn_txdelta_window_t_sview_offset_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_txdelta_window_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_window_t_sview_offset_get" "', argument " "1"" of type '" "svn_txdelta_window_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_window_t_sview_offset_get" "', argument " "1"" of type '" "struct svn_txdelta_window_t *""'");
}
- arg1 = (svn_txdelta_window_t *)(argp1);
+ arg1 = (struct svn_txdelta_window_t *)(argp1);
result = ((arg1)->sview_offset);
{
char temp[256];
@@ -2491,7 +2519,7 @@ XS(_wrap_svn_txdelta_window_t_sview_offset_get) {
XS(_wrap_svn_txdelta_window_t_sview_len_set) {
{
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
apr_size_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2505,9 +2533,9 @@ XS(_wrap_svn_txdelta_window_t_sview_len_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_txdelta_window_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_window_t_sview_len_set" "', argument " "1"" of type '" "svn_txdelta_window_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_window_t_sview_len_set" "', argument " "1"" of type '" "struct svn_txdelta_window_t *""'");
}
- arg1 = (svn_txdelta_window_t *)(argp1);
+ arg1 = (struct svn_txdelta_window_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_txdelta_window_t_sview_len_set" "', argument " "2"" of type '" "apr_size_t""'");
@@ -2528,7 +2556,7 @@ XS(_wrap_svn_txdelta_window_t_sview_len_set) {
XS(_wrap_svn_txdelta_window_t_sview_len_get) {
{
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2540,9 +2568,9 @@ XS(_wrap_svn_txdelta_window_t_sview_len_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_txdelta_window_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_window_t_sview_len_get" "', argument " "1"" of type '" "svn_txdelta_window_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_window_t_sview_len_get" "', argument " "1"" of type '" "struct svn_txdelta_window_t *""'");
}
- arg1 = (svn_txdelta_window_t *)(argp1);
+ arg1 = (struct svn_txdelta_window_t *)(argp1);
result = ((arg1)->sview_len);
ST(argvi) = SWIG_From_unsigned_SS_long SWIG_PERL_CALL_ARGS_1((unsigned long)(result)); argvi++ ;
@@ -2556,7 +2584,7 @@ XS(_wrap_svn_txdelta_window_t_sview_len_get) {
XS(_wrap_svn_txdelta_window_t_tview_len_set) {
{
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
apr_size_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2570,9 +2598,9 @@ XS(_wrap_svn_txdelta_window_t_tview_len_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_txdelta_window_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_window_t_tview_len_set" "', argument " "1"" of type '" "svn_txdelta_window_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_window_t_tview_len_set" "', argument " "1"" of type '" "struct svn_txdelta_window_t *""'");
}
- arg1 = (svn_txdelta_window_t *)(argp1);
+ arg1 = (struct svn_txdelta_window_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_txdelta_window_t_tview_len_set" "', argument " "2"" of type '" "apr_size_t""'");
@@ -2593,7 +2621,7 @@ XS(_wrap_svn_txdelta_window_t_tview_len_set) {
XS(_wrap_svn_txdelta_window_t_tview_len_get) {
{
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2605,9 +2633,9 @@ XS(_wrap_svn_txdelta_window_t_tview_len_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_txdelta_window_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_window_t_tview_len_get" "', argument " "1"" of type '" "svn_txdelta_window_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_window_t_tview_len_get" "', argument " "1"" of type '" "struct svn_txdelta_window_t *""'");
}
- arg1 = (svn_txdelta_window_t *)(argp1);
+ arg1 = (struct svn_txdelta_window_t *)(argp1);
result = ((arg1)->tview_len);
ST(argvi) = SWIG_From_unsigned_SS_long SWIG_PERL_CALL_ARGS_1((unsigned long)(result)); argvi++ ;
@@ -2621,7 +2649,7 @@ XS(_wrap_svn_txdelta_window_t_tview_len_get) {
XS(_wrap_svn_txdelta_window_t_num_ops_set) {
{
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
int arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2635,9 +2663,9 @@ XS(_wrap_svn_txdelta_window_t_num_ops_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_txdelta_window_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_window_t_num_ops_set" "', argument " "1"" of type '" "svn_txdelta_window_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_window_t_num_ops_set" "', argument " "1"" of type '" "struct svn_txdelta_window_t *""'");
}
- arg1 = (svn_txdelta_window_t *)(argp1);
+ arg1 = (struct svn_txdelta_window_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_txdelta_window_t_num_ops_set" "', argument " "2"" of type '" "int""'");
@@ -2658,7 +2686,7 @@ XS(_wrap_svn_txdelta_window_t_num_ops_set) {
XS(_wrap_svn_txdelta_window_t_num_ops_get) {
{
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2670,9 +2698,9 @@ XS(_wrap_svn_txdelta_window_t_num_ops_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_txdelta_window_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_window_t_num_ops_get" "', argument " "1"" of type '" "svn_txdelta_window_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_window_t_num_ops_get" "', argument " "1"" of type '" "struct svn_txdelta_window_t *""'");
}
- arg1 = (svn_txdelta_window_t *)(argp1);
+ arg1 = (struct svn_txdelta_window_t *)(argp1);
result = (int) ((arg1)->num_ops);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -2686,7 +2714,7 @@ XS(_wrap_svn_txdelta_window_t_num_ops_get) {
XS(_wrap_svn_txdelta_window_t_src_ops_set) {
{
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
int arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2700,9 +2728,9 @@ XS(_wrap_svn_txdelta_window_t_src_ops_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_txdelta_window_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_window_t_src_ops_set" "', argument " "1"" of type '" "svn_txdelta_window_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_window_t_src_ops_set" "', argument " "1"" of type '" "struct svn_txdelta_window_t *""'");
}
- arg1 = (svn_txdelta_window_t *)(argp1);
+ arg1 = (struct svn_txdelta_window_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_txdelta_window_t_src_ops_set" "', argument " "2"" of type '" "int""'");
@@ -2723,7 +2751,7 @@ XS(_wrap_svn_txdelta_window_t_src_ops_set) {
XS(_wrap_svn_txdelta_window_t_src_ops_get) {
{
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2735,9 +2763,9 @@ XS(_wrap_svn_txdelta_window_t_src_ops_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_txdelta_window_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_window_t_src_ops_get" "', argument " "1"" of type '" "svn_txdelta_window_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_window_t_src_ops_get" "', argument " "1"" of type '" "struct svn_txdelta_window_t *""'");
}
- arg1 = (svn_txdelta_window_t *)(argp1);
+ arg1 = (struct svn_txdelta_window_t *)(argp1);
result = (int) ((arg1)->src_ops);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -2751,7 +2779,7 @@ XS(_wrap_svn_txdelta_window_t_src_ops_get) {
XS(_wrap_svn_txdelta_window_t_ops_set) {
{
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
svn_txdelta_op_t *arg2 = (svn_txdelta_op_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2765,9 +2793,9 @@ XS(_wrap_svn_txdelta_window_t_ops_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_txdelta_window_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_window_t_ops_set" "', argument " "1"" of type '" "svn_txdelta_window_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_window_t_ops_set" "', argument " "1"" of type '" "struct svn_txdelta_window_t *""'");
}
- arg1 = (svn_txdelta_window_t *)(argp1);
+ arg1 = (struct svn_txdelta_window_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_txdelta_op_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_txdelta_window_t_ops_set" "', argument " "2"" of type '" "svn_txdelta_op_t const *""'");
@@ -2788,7 +2816,7 @@ XS(_wrap_svn_txdelta_window_t_ops_set) {
XS(_wrap_svn_txdelta_window_t_ops_get) {
{
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2800,9 +2828,9 @@ XS(_wrap_svn_txdelta_window_t_ops_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_txdelta_window_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_window_t_ops_get" "', argument " "1"" of type '" "svn_txdelta_window_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_window_t_ops_get" "', argument " "1"" of type '" "struct svn_txdelta_window_t *""'");
}
- arg1 = (svn_txdelta_window_t *)(argp1);
+ arg1 = (struct svn_txdelta_window_t *)(argp1);
result = (svn_txdelta_op_t *) ((arg1)->ops);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_txdelta_op_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -2816,7 +2844,7 @@ XS(_wrap_svn_txdelta_window_t_ops_get) {
XS(_wrap_svn_txdelta_window_t_new_data_get) {
{
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2828,9 +2856,9 @@ XS(_wrap_svn_txdelta_window_t_new_data_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_txdelta_window_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_window_t_new_data_get" "', argument " "1"" of type '" "svn_txdelta_window_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_window_t_new_data_get" "', argument " "1"" of type '" "struct svn_txdelta_window_t *""'");
}
- arg1 = (svn_txdelta_window_t *)(argp1);
+ arg1 = (struct svn_txdelta_window_t *)(argp1);
result = (svn_string_t *) ((arg1)->new_data);
{
ST(argvi) = sv_2mortal(newSVpv(result->data, result->len));
@@ -2848,14 +2876,14 @@ XS(_wrap_svn_txdelta_window_t_new_data_get) {
XS(_wrap_new_svn_txdelta_window_t) {
{
int argvi = 0;
- svn_txdelta_window_t *result = 0 ;
+ struct svn_txdelta_window_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_txdelta_window_t();");
}
{
- result = (svn_txdelta_window_t *)calloc(1, sizeof(svn_txdelta_window_t));
+ result = (struct svn_txdelta_window_t *)calloc(1, sizeof(struct svn_txdelta_window_t));
@@ -2870,7 +2898,7 @@ XS(_wrap_new_svn_txdelta_window_t) {
XS(_wrap_delete_svn_txdelta_window_t) {
{
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2881,9 +2909,9 @@ XS(_wrap_delete_svn_txdelta_window_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_txdelta_window_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_txdelta_window_t" "', argument " "1"" of type '" "svn_txdelta_window_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_txdelta_window_t" "', argument " "1"" of type '" "struct svn_txdelta_window_t *""'");
}
- arg1 = (svn_txdelta_window_t *)(argp1);
+ arg1 = (struct svn_txdelta_window_t *)(argp1);
{
free((char *) arg1);
@@ -3076,8 +3104,8 @@ XS(_wrap_svn_txdelta_run) {
apr_pool_t *arg10 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool ;
int res4 ;
- void *argp5 ;
- int res5 = 0 ;
+ int val5 ;
+ int ecode5 = 0 ;
svn_checksum_t *temp6 ;
int res8 ;
int argvi = 0;
@@ -3110,17 +3138,11 @@ XS(_wrap_svn_txdelta_run) {
if (!SWIG_IsOK(res4)) {
SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_txdelta_run" "', argument " "4"" of type '" "void *""'");
}
- {
- res5 = SWIG_ConvertPtr(ST(4), &argp5, SWIGTYPE_p_svn_checksum_kind_t, 0 );
- if (!SWIG_IsOK(res5)) {
- SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_txdelta_run" "', argument " "5"" of type '" "svn_checksum_kind_t""'");
- }
- if (!argp5) {
- SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "svn_txdelta_run" "', argument " "5"" of type '" "svn_checksum_kind_t""'");
- } else {
- arg5 = *((svn_checksum_kind_t *)(argp5));
- }
- }
+ ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val5);
+ if (!SWIG_IsOK(ecode5)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_txdelta_run" "', argument " "5"" of type '" "svn_checksum_kind_t""'");
+ }
+ arg5 = (svn_checksum_kind_t)(val5);
{
int res = SWIG_ConvertFunctionPtr(ST(5), (void**)(&arg7), SWIGTYPE_p_f_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -3177,6 +3199,7 @@ XS(_wrap_svn_txdelta_run) {
+
XSRETURN(argvi);
fail:
@@ -3188,6 +3211,7 @@ XS(_wrap_svn_txdelta_run) {
+
SWIG_croak_null();
}
}
@@ -3351,6 +3375,68 @@ XS(_wrap_svn_txdelta_md5_digest) {
}
+XS(_wrap_svn_txdelta2) {
+ {
+ svn_txdelta_stream_t **arg1 = (svn_txdelta_stream_t **) 0 ;
+ svn_stream_t *arg2 = (svn_stream_t *) 0 ;
+ svn_stream_t *arg3 = (svn_stream_t *) 0 ;
+ svn_boolean_t arg4 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_txdelta_stream_t *temp1 ;
+ int val4 ;
+ int ecode4 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ {
+ _global_pool = arg5 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ if ((items < 3) || (items > 4)) {
+ SWIG_croak("Usage: svn_txdelta2(source,target,calculate_checksum,pool);");
+ }
+ {
+ svn_swig_pl_make_stream (&arg2, ST(0));
+ }
+ {
+ svn_swig_pl_make_stream (&arg3, ST(1));
+ }
+ ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_txdelta2" "', argument " "4"" of type '" "svn_boolean_t""'");
+ }
+ arg4 = (svn_boolean_t)(val4);
+ if (items > 3) {
+
+ }
+ {
+ svn_txdelta2(arg1,arg2,arg3,arg4,arg5);
+
+
+
+ }
+ ST(argvi) = sv_newmortal();
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_txdelta_stream_t, 0); argvi++ ;
+ }
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_txdelta) {
{
svn_txdelta_stream_t **arg1 = (svn_txdelta_stream_t **) 0 ;
@@ -3600,7 +3686,7 @@ XS(_wrap_svn_txdelta_send_stream) {
}
}
{
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,59,%append_output@*/ if (argvi >= items) EXTEND(sp,1); /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,56,%set_output@*/ ST(argvi) = sv_2mortal(newSVpv(svn_md5_digest_to_cstring(arg4,
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,59,%append_output@*/ if (argvi >= items) EXTEND(sp,1); /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,56,%set_output@*/ ST(argvi) = sv_2mortal(newSVpv(svn_md5_digest_to_cstring(arg4,
_global_pool),
0)); argvi++ /*@SWIG@*/
@@ -3700,6 +3786,91 @@ XS(_wrap_svn_txdelta_send_txstream) {
}
+XS(_wrap_svn_txdelta_send_contents) {
+ {
+ unsigned char *arg1 = (unsigned char *) 0 ;
+ apr_size_t arg2 ;
+ svn_txdelta_window_handler_t arg3 = (svn_txdelta_window_handler_t) 0 ;
+ void *arg4 = (void *) 0 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ unsigned long val2 ;
+ int ecode2 = 0 ;
+ int res4 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg5 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 4) || (items > 5)) {
+ SWIG_croak("Usage: svn_txdelta_send_contents(contents,len,handler,handler_baton,pool);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_unsigned_char, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_txdelta_send_contents" "', argument " "1"" of type '" "unsigned char const *""'");
+ }
+ arg1 = (unsigned char *)(argp1);
+ ecode2 = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_txdelta_send_contents" "', argument " "2"" of type '" "apr_size_t""'");
+ }
+ arg2 = (apr_size_t)(val2);
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(2), (void**)(&arg3), SWIGTYPE_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_txdelta_send_contents" "', argument " "3"" of type '" "svn_txdelta_window_handler_t""'");
+ }
+ }
+ res4 = SWIG_ConvertPtr(ST(3),SWIG_as_voidptrptr(&arg4), 0, 0);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_txdelta_send_contents" "', argument " "4"" of type '" "void *""'");
+ }
+ if (items > 4) {
+
+ }
+ {
+ result = (svn_error_t *)svn_txdelta_send_contents((unsigned char const *)arg1,arg2,arg3,arg4,arg5);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_txdelta_apply) {
{
svn_stream_t *arg1 = (svn_stream_t *) 0 ;
@@ -4177,7 +4348,7 @@ XS(_wrap_svn_txdelta_skip_svndiff_window) {
XS(_wrap_svn_delta_editor_t_set_target_revision_set) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_revnum_t,apr_pool_t *) = (svn_error_t *(*)(void *,svn_revnum_t,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4189,9 +4360,9 @@ XS(_wrap_svn_delta_editor_t_set_target_revision_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_set_target_revision_set" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_set_target_revision_set" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_svn_revnum_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4213,7 +4384,7 @@ XS(_wrap_svn_delta_editor_t_set_target_revision_set) {
XS(_wrap_svn_delta_editor_t_set_target_revision_get) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4225,9 +4396,9 @@ XS(_wrap_svn_delta_editor_t_set_target_revision_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_set_target_revision_get" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_set_target_revision_get" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_revnum_t,apr_pool_t *)) ((arg1)->set_target_revision);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_svn_revnum_t_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -4241,7 +4412,7 @@ XS(_wrap_svn_delta_editor_t_set_target_revision_get) {
XS(_wrap_svn_delta_editor_t_open_root_set) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_revnum_t,apr_pool_t *,void **) = (svn_error_t *(*)(void *,svn_revnum_t,apr_pool_t *,void **)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4253,9 +4424,9 @@ XS(_wrap_svn_delta_editor_t_open_root_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_open_root_set" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_open_root_set" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_svn_revnum_t_p_apr_pool_t_p_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4277,7 +4448,7 @@ XS(_wrap_svn_delta_editor_t_open_root_set) {
XS(_wrap_svn_delta_editor_t_open_root_get) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4289,9 +4460,9 @@ XS(_wrap_svn_delta_editor_t_open_root_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_open_root_get" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_open_root_get" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_revnum_t,apr_pool_t *,void **)) ((arg1)->open_root);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_svn_revnum_t_p_apr_pool_t_p_p_void__p_svn_error_t); argvi++ ;
@@ -4305,7 +4476,7 @@ XS(_wrap_svn_delta_editor_t_open_root_get) {
XS(_wrap_svn_delta_editor_t_delete_entry_set) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(char const *,svn_revnum_t,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,svn_revnum_t,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4317,9 +4488,9 @@ XS(_wrap_svn_delta_editor_t_delete_entry_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_delete_entry_set" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_delete_entry_set" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_svn_revnum_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4341,7 +4512,7 @@ XS(_wrap_svn_delta_editor_t_delete_entry_set) {
XS(_wrap_svn_delta_editor_t_delete_entry_get) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4353,9 +4524,9 @@ XS(_wrap_svn_delta_editor_t_delete_entry_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_delete_entry_get" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_delete_entry_get" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(char const *,svn_revnum_t,void *,apr_pool_t *)) ((arg1)->delete_entry);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_svn_revnum_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -4369,7 +4540,7 @@ XS(_wrap_svn_delta_editor_t_delete_entry_get) {
XS(_wrap_svn_delta_editor_t_add_directory_set) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(char const *,void *,char const *,svn_revnum_t,apr_pool_t *,void **) = (svn_error_t *(*)(char const *,void *,char const *,svn_revnum_t,apr_pool_t *,void **)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4381,9 +4552,9 @@ XS(_wrap_svn_delta_editor_t_add_directory_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_add_directory_set" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_add_directory_set" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_p_void_p_q_const__char_svn_revnum_t_p_apr_pool_t_p_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4405,7 +4576,7 @@ XS(_wrap_svn_delta_editor_t_add_directory_set) {
XS(_wrap_svn_delta_editor_t_add_directory_get) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4417,9 +4588,9 @@ XS(_wrap_svn_delta_editor_t_add_directory_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_add_directory_get" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_add_directory_get" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(char const *,void *,char const *,svn_revnum_t,apr_pool_t *,void **)) ((arg1)->add_directory);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_p_void_p_q_const__char_svn_revnum_t_p_apr_pool_t_p_p_void__p_svn_error_t); argvi++ ;
@@ -4433,7 +4604,7 @@ XS(_wrap_svn_delta_editor_t_add_directory_get) {
XS(_wrap_svn_delta_editor_t_open_directory_set) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(char const *,void *,svn_revnum_t,apr_pool_t *,void **) = (svn_error_t *(*)(char const *,void *,svn_revnum_t,apr_pool_t *,void **)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4445,9 +4616,9 @@ XS(_wrap_svn_delta_editor_t_open_directory_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_open_directory_set" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_open_directory_set" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_p_void_svn_revnum_t_p_apr_pool_t_p_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4469,7 +4640,7 @@ XS(_wrap_svn_delta_editor_t_open_directory_set) {
XS(_wrap_svn_delta_editor_t_open_directory_get) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4481,9 +4652,9 @@ XS(_wrap_svn_delta_editor_t_open_directory_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_open_directory_get" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_open_directory_get" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(char const *,void *,svn_revnum_t,apr_pool_t *,void **)) ((arg1)->open_directory);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_p_void_svn_revnum_t_p_apr_pool_t_p_p_void__p_svn_error_t); argvi++ ;
@@ -4497,7 +4668,7 @@ XS(_wrap_svn_delta_editor_t_open_directory_get) {
XS(_wrap_svn_delta_editor_t_change_dir_prop_set) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_string_t const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_string_t const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4509,9 +4680,9 @@ XS(_wrap_svn_delta_editor_t_change_dir_prop_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_change_dir_prop_set" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_change_dir_prop_set" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4533,7 +4704,7 @@ XS(_wrap_svn_delta_editor_t_change_dir_prop_set) {
XS(_wrap_svn_delta_editor_t_change_dir_prop_get) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4545,9 +4716,9 @@ XS(_wrap_svn_delta_editor_t_change_dir_prop_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_change_dir_prop_get" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_change_dir_prop_get" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,svn_string_t const *,apr_pool_t *)) ((arg1)->change_dir_prop);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -4561,7 +4732,7 @@ XS(_wrap_svn_delta_editor_t_change_dir_prop_get) {
XS(_wrap_svn_delta_editor_t_close_directory_set) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4573,9 +4744,9 @@ XS(_wrap_svn_delta_editor_t_close_directory_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_close_directory_set" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_close_directory_set" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4597,7 +4768,7 @@ XS(_wrap_svn_delta_editor_t_close_directory_set) {
XS(_wrap_svn_delta_editor_t_close_directory_get) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4609,9 +4780,9 @@ XS(_wrap_svn_delta_editor_t_close_directory_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_close_directory_get" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_close_directory_get" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_pool_t *)) ((arg1)->close_directory);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -4625,7 +4796,7 @@ XS(_wrap_svn_delta_editor_t_close_directory_get) {
XS(_wrap_svn_delta_editor_t_absent_directory_set) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(char const *,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4637,9 +4808,9 @@ XS(_wrap_svn_delta_editor_t_absent_directory_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_absent_directory_set" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_absent_directory_set" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4661,7 +4832,7 @@ XS(_wrap_svn_delta_editor_t_absent_directory_set) {
XS(_wrap_svn_delta_editor_t_absent_directory_get) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4673,9 +4844,9 @@ XS(_wrap_svn_delta_editor_t_absent_directory_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_absent_directory_get" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_absent_directory_get" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(char const *,void *,apr_pool_t *)) ((arg1)->absent_directory);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -4689,7 +4860,7 @@ XS(_wrap_svn_delta_editor_t_absent_directory_get) {
XS(_wrap_svn_delta_editor_t_add_file_set) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(char const *,void *,char const *,svn_revnum_t,apr_pool_t *,void **) = (svn_error_t *(*)(char const *,void *,char const *,svn_revnum_t,apr_pool_t *,void **)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4701,9 +4872,9 @@ XS(_wrap_svn_delta_editor_t_add_file_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_add_file_set" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_add_file_set" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_p_void_p_q_const__char_svn_revnum_t_p_apr_pool_t_p_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4725,7 +4896,7 @@ XS(_wrap_svn_delta_editor_t_add_file_set) {
XS(_wrap_svn_delta_editor_t_add_file_get) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4737,9 +4908,9 @@ XS(_wrap_svn_delta_editor_t_add_file_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_add_file_get" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_add_file_get" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(char const *,void *,char const *,svn_revnum_t,apr_pool_t *,void **)) ((arg1)->add_file);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_p_void_p_q_const__char_svn_revnum_t_p_apr_pool_t_p_p_void__p_svn_error_t); argvi++ ;
@@ -4753,7 +4924,7 @@ XS(_wrap_svn_delta_editor_t_add_file_get) {
XS(_wrap_svn_delta_editor_t_open_file_set) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(char const *,void *,svn_revnum_t,apr_pool_t *,void **) = (svn_error_t *(*)(char const *,void *,svn_revnum_t,apr_pool_t *,void **)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4765,9 +4936,9 @@ XS(_wrap_svn_delta_editor_t_open_file_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_open_file_set" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_open_file_set" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_p_void_svn_revnum_t_p_apr_pool_t_p_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4789,7 +4960,7 @@ XS(_wrap_svn_delta_editor_t_open_file_set) {
XS(_wrap_svn_delta_editor_t_open_file_get) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4801,9 +4972,9 @@ XS(_wrap_svn_delta_editor_t_open_file_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_open_file_get" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_open_file_get" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(char const *,void *,svn_revnum_t,apr_pool_t *,void **)) ((arg1)->open_file);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_p_void_svn_revnum_t_p_apr_pool_t_p_p_void__p_svn_error_t); argvi++ ;
@@ -4817,7 +4988,7 @@ XS(_wrap_svn_delta_editor_t_open_file_get) {
XS(_wrap_svn_delta_editor_t_apply_textdelta_set) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,apr_pool_t *,svn_txdelta_window_handler_t *,void **) = (svn_error_t *(*)(void *,char const *,apr_pool_t *,svn_txdelta_window_handler_t *,void **)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4829,9 +5000,9 @@ XS(_wrap_svn_delta_editor_t_apply_textdelta_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_apply_textdelta_set" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_apply_textdelta_set" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_pool_t_p_svn_txdelta_window_handler_t_p_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4853,7 +5024,7 @@ XS(_wrap_svn_delta_editor_t_apply_textdelta_set) {
XS(_wrap_svn_delta_editor_t_apply_textdelta_get) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4865,9 +5036,9 @@ XS(_wrap_svn_delta_editor_t_apply_textdelta_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_apply_textdelta_get" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_apply_textdelta_get" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,apr_pool_t *,svn_txdelta_window_handler_t *,void **)) ((arg1)->apply_textdelta);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_pool_t_p_svn_txdelta_window_handler_t_p_p_void__p_svn_error_t); argvi++ ;
@@ -4881,7 +5052,7 @@ XS(_wrap_svn_delta_editor_t_apply_textdelta_get) {
XS(_wrap_svn_delta_editor_t_change_file_prop_set) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_string_t const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_string_t const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4893,9 +5064,9 @@ XS(_wrap_svn_delta_editor_t_change_file_prop_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_change_file_prop_set" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_change_file_prop_set" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4917,7 +5088,7 @@ XS(_wrap_svn_delta_editor_t_change_file_prop_set) {
XS(_wrap_svn_delta_editor_t_change_file_prop_get) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4929,9 +5100,9 @@ XS(_wrap_svn_delta_editor_t_change_file_prop_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_change_file_prop_get" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_change_file_prop_get" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,svn_string_t const *,apr_pool_t *)) ((arg1)->change_file_prop);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -4945,7 +5116,7 @@ XS(_wrap_svn_delta_editor_t_change_file_prop_get) {
XS(_wrap_svn_delta_editor_t_close_file_set) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4957,9 +5128,9 @@ XS(_wrap_svn_delta_editor_t_close_file_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_close_file_set" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_close_file_set" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4981,7 +5152,7 @@ XS(_wrap_svn_delta_editor_t_close_file_set) {
XS(_wrap_svn_delta_editor_t_close_file_get) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4993,9 +5164,9 @@ XS(_wrap_svn_delta_editor_t_close_file_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_close_file_get" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_close_file_get" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,apr_pool_t *)) ((arg1)->close_file);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -5009,7 +5180,7 @@ XS(_wrap_svn_delta_editor_t_close_file_get) {
XS(_wrap_svn_delta_editor_t_absent_file_set) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(char const *,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5021,9 +5192,9 @@ XS(_wrap_svn_delta_editor_t_absent_file_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_absent_file_set" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_absent_file_set" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -5045,7 +5216,7 @@ XS(_wrap_svn_delta_editor_t_absent_file_set) {
XS(_wrap_svn_delta_editor_t_absent_file_get) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5057,9 +5228,9 @@ XS(_wrap_svn_delta_editor_t_absent_file_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_absent_file_get" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_absent_file_get" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(char const *,void *,apr_pool_t *)) ((arg1)->absent_file);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -5073,7 +5244,7 @@ XS(_wrap_svn_delta_editor_t_absent_file_get) {
XS(_wrap_svn_delta_editor_t_close_edit_set) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5085,9 +5256,9 @@ XS(_wrap_svn_delta_editor_t_close_edit_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_close_edit_set" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_close_edit_set" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -5109,7 +5280,7 @@ XS(_wrap_svn_delta_editor_t_close_edit_set) {
XS(_wrap_svn_delta_editor_t_close_edit_get) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5121,9 +5292,9 @@ XS(_wrap_svn_delta_editor_t_close_edit_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_close_edit_get" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_close_edit_get" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_pool_t *)) ((arg1)->close_edit);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -5137,7 +5308,7 @@ XS(_wrap_svn_delta_editor_t_close_edit_get) {
XS(_wrap_svn_delta_editor_t_abort_edit_set) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5149,9 +5320,9 @@ XS(_wrap_svn_delta_editor_t_abort_edit_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_abort_edit_set" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_abort_edit_set" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -5173,7 +5344,7 @@ XS(_wrap_svn_delta_editor_t_abort_edit_set) {
XS(_wrap_svn_delta_editor_t_abort_edit_get) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5185,9 +5356,9 @@ XS(_wrap_svn_delta_editor_t_abort_edit_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_abort_edit_get" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_delta_editor_t_abort_edit_get" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_pool_t *)) ((arg1)->abort_edit);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -5202,14 +5373,14 @@ XS(_wrap_svn_delta_editor_t_abort_edit_get) {
XS(_wrap_new_svn_delta_editor_t) {
{
int argvi = 0;
- svn_delta_editor_t *result = 0 ;
+ struct svn_delta_editor_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_delta_editor_t();");
}
{
- result = (svn_delta_editor_t *)calloc(1, sizeof(svn_delta_editor_t));
+ result = (struct svn_delta_editor_t *)calloc(1, sizeof(struct svn_delta_editor_t));
@@ -5224,7 +5395,7 @@ XS(_wrap_new_svn_delta_editor_t) {
XS(_wrap_delete_svn_delta_editor_t) {
{
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5235,9 +5406,9 @@ XS(_wrap_delete_svn_delta_editor_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_delta_editor_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_delta_editor_t" "', argument " "1"" of type '" "svn_delta_editor_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_delta_editor_t" "', argument " "1"" of type '" "struct svn_delta_editor_t *""'");
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
free((char *) arg1);
@@ -5544,6 +5715,93 @@ XS(_wrap_svn_delta_depth_filter_editor) {
}
+XS(_wrap_svn_delta_path_driver2) {
+ {
+ svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ void *arg2 = (void *) 0 ;
+ apr_array_header_t *arg3 = (apr_array_header_t *) 0 ;
+ svn_boolean_t arg4 ;
+ svn_delta_path_driver_cb_func_t arg5 = (svn_delta_path_driver_cb_func_t) 0 ;
+ void *arg6 = (void *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int val4 ;
+ int ecode4 = 0 ;
+ int res6 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg7 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 5) || (items > 6)) {
+ SWIG_croak("Usage: svn_delta_path_driver2(editor,edit_baton,paths,sort_paths,callback_func,callback_baton,scratch_pool);");
+ }
+ {
+ svn_delta_make_editor(&arg1, &arg2, ST(0), _global_pool);
+ }
+ {
+ arg3 = (apr_array_header_t *) svn_swig_pl_strings_to_array(ST(1),
+ _global_pool);
+ }
+ ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_delta_path_driver2" "', argument " "4"" of type '" "svn_boolean_t""'");
+ }
+ arg4 = (svn_boolean_t)(val4);
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(3), (void**)(&arg5), SWIGTYPE_p_f_p_p_void_p_void_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_delta_path_driver2" "', argument " "5"" of type '" "svn_delta_path_driver_cb_func_t""'");
+ }
+ }
+ res6 = SWIG_ConvertPtr(ST(4),SWIG_as_voidptrptr(&arg6), 0, 0);
+ if (!SWIG_IsOK(res6)) {
+ SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_delta_path_driver2" "', argument " "6"" of type '" "void *""'");
+ }
+ if (items > 5) {
+
+ }
+ {
+ result = (svn_error_t *)svn_delta_path_driver2((struct svn_delta_editor_t const *)arg1,arg2,(apr_array_header_t const *)arg3,arg4,arg5,arg6,arg7);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_delta_path_driver) {
{
svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
@@ -5565,7 +5823,7 @@ XS(_wrap_svn_delta_path_driver) {
_global_pool = arg7 = svn_swig_pl_make_pool (ST(items-1));
}
if ((items < 5) || (items > 6)) {
- SWIG_croak("Usage: svn_delta_path_driver(editor,edit_baton,revision,paths,callback_func,callback_baton,pool);");
+ SWIG_croak("Usage: svn_delta_path_driver(editor,edit_baton,revision,paths,callback_func,callback_baton,scratch_pool);");
}
{
svn_delta_make_editor(&arg1, &arg2, ST(0), _global_pool);
@@ -7586,7 +7844,7 @@ XS(_wrap_svn_file_invoke_rev_handler_old) {
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
-static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *|svn_rangelist_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_file_t = {"_p_apr_file_t", "apr_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_hash_t = {"_p_apr_hash_t", "apr_hash_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int32_t = {"_p_apr_int32_t", "apr_int32_t *|time_t *", 0, 0, (void*)0, 0};
@@ -7616,7 +7874,7 @@ static swig_type_info _swigt__p_int = {"_p_int", "int *|svn_boolean_t *|apr_stat
static swig_type_info _swigt__p_long = {"_p_long", "long *|svn_revnum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t = {"_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t", "svn_txdelta_window_handler_t *|struct svn_error_t *(**)(svn_txdelta_window_t *,void *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(void *,char const *,svn_revnum_t,apr_hash_t *,svn_boolean_t,svn_txdelta_window_handler_t *,void **,apr_array_header_t *,apr_pool_t *)|svn_file_rev_handler_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_p_svn_checksum_t = {"_p_p_svn_checksum_t", "svn_checksum_t **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_svn_checksum_t = {"_p_p_svn_checksum_t", "struct svn_checksum_t **|svn_checksum_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_delta_editor_t = {"_p_p_svn_delta_editor_t", "struct svn_delta_editor_t **|svn_delta_editor_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_txdelta_stream_t = {"_p_p_svn_txdelta_stream_t", "struct svn_txdelta_stream_t **|svn_txdelta_stream_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_txdelta_window_t = {"_p_p_svn_txdelta_window_t", "struct svn_txdelta_window_t **|svn_txdelta_window_t **", 0, 0, (void*)0, 0};
@@ -7631,7 +7889,9 @@ static swig_type_info _swigt__p_svn_auth_iterstate_t = {"_p_svn_auth_iterstate_t
static swig_type_info _swigt__p_svn_auth_provider_object_t = {"_p_svn_auth_provider_object_t", "struct svn_auth_provider_object_t *|svn_auth_provider_object_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_provider_t = {"_p_svn_auth_provider_t", "struct svn_auth_provider_t *|svn_auth_provider_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_ssl_server_cert_info_t = {"_p_svn_auth_ssl_server_cert_info_t", "struct svn_auth_ssl_server_cert_info_t *|svn_auth_ssl_server_cert_info_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_ctx_t = {"_p_svn_checksum_ctx_t", "struct svn_checksum_ctx_t *|svn_checksum_ctx_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "enum svn_checksum_kind_t *|svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "struct svn_checksum_t *|svn_checksum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_commit_info_t = {"_p_svn_commit_info_t", "struct svn_commit_info_t *|svn_commit_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_config_t = {"_p_svn_config_t", "struct svn_config_t *|svn_config_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_delta_editor_t = {"_p_svn_delta_editor_t", "struct svn_delta_editor_t *|svn_delta_editor_t *", 0, 0, (void*)0, 0};
@@ -7667,6 +7927,7 @@ static swig_type_info _swigt__p_svn_opt_subcommand_desc2_t = {"_p_svn_opt_subcom
static swig_type_info _swigt__p_svn_opt_subcommand_desc_t = {"_p_svn_opt_subcommand_desc_t", "struct svn_opt_subcommand_desc_t *|svn_opt_subcommand_desc_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_file_t = {"_p_svn_patch_file_t", "struct svn_patch_file_t *|svn_patch_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_t = {"_p_svn_patch_t", "struct svn_patch_t *|svn_patch_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_prop_inherited_item_t = {"_p_svn_prop_inherited_item_t", "struct svn_prop_inherited_item_t *|svn_prop_inherited_item_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_kind = {"_p_svn_prop_kind", "svn_prop_kind_t *|enum svn_prop_kind *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_patch_t = {"_p_svn_prop_patch_t", "struct svn_prop_patch_t *|svn_prop_patch_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_stream_mark_t = {"_p_svn_stream_mark_t", "struct svn_stream_mark_t *|svn_stream_mark_t *", 0, 0, (void*)0, 0};
@@ -7678,7 +7939,11 @@ static swig_type_info _swigt__p_svn_txdelta_op_t = {"_p_svn_txdelta_op_t", "stru
static swig_type_info _swigt__p_svn_txdelta_stream_t = {"_p_svn_txdelta_stream_t", "struct svn_txdelta_stream_t *|svn_txdelta_stream_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_txdelta_window_t = {"_p_svn_txdelta_window_t", "struct svn_txdelta_window_t *|svn_txdelta_window_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_checklist_t = {"_p_svn_version_checklist_t", "struct svn_version_checklist_t *|svn_version_checklist_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_linked_lib_t = {"_p_svn_version_ext_linked_lib_t", "struct svn_version_ext_linked_lib_t *|svn_version_ext_linked_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_loaded_lib_t = {"_p_svn_version_ext_loaded_lib_t", "struct svn_version_ext_loaded_lib_t *|svn_version_ext_loaded_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_extended_t = {"_p_svn_version_extended_t", "struct svn_version_extended_t *|svn_version_extended_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_t = {"_p_svn_version_t", "struct svn_version_t *|svn_version_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_wc_external_item2_t = {"_p_svn_wc_external_item2_t", "svn_wc_external_item2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_char = {"_p_unsigned_char", "unsigned char *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_long = {"_p_unsigned_long", "unsigned long *|svn_linenum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_void = {"_p_void", "void *", 0, 0, (void*)0, 0};
@@ -7729,7 +7994,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_auth_provider_object_t,
&_swigt__p_svn_auth_provider_t,
&_swigt__p_svn_auth_ssl_server_cert_info_t,
+ &_swigt__p_svn_checksum_ctx_t,
&_swigt__p_svn_checksum_kind_t,
+ &_swigt__p_svn_checksum_t,
&_swigt__p_svn_commit_info_t,
&_swigt__p_svn_config_t,
&_swigt__p_svn_delta_editor_t,
@@ -7765,6 +8032,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_opt_subcommand_desc_t,
&_swigt__p_svn_patch_file_t,
&_swigt__p_svn_patch_t,
+ &_swigt__p_svn_prop_inherited_item_t,
&_swigt__p_svn_prop_kind,
&_swigt__p_svn_prop_patch_t,
&_swigt__p_svn_stream_mark_t,
@@ -7776,7 +8044,11 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_txdelta_stream_t,
&_swigt__p_svn_txdelta_window_t,
&_swigt__p_svn_version_checklist_t,
+ &_swigt__p_svn_version_ext_linked_lib_t,
+ &_swigt__p_svn_version_ext_loaded_lib_t,
+ &_swigt__p_svn_version_extended_t,
&_swigt__p_svn_version_t,
+ &_swigt__p_svn_wc_external_item2_t,
&_swigt__p_unsigned_char,
&_swigt__p_unsigned_long,
&_swigt__p_void,
@@ -7827,7 +8099,9 @@ static swig_cast_info _swigc__p_svn_auth_iterstate_t[] = { {&_swigt__p_svn_auth
static swig_cast_info _swigc__p_svn_auth_provider_object_t[] = { {&_swigt__p_svn_auth_provider_object_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_provider_t[] = { {&_swigt__p_svn_auth_provider_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_ssl_server_cert_info_t[] = { {&_swigt__p_svn_auth_ssl_server_cert_info_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_ctx_t[] = { {&_swigt__p_svn_checksum_ctx_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_checksum_kind_t[] = { {&_swigt__p_svn_checksum_kind_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_t[] = { {&_swigt__p_svn_checksum_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_commit_info_t[] = { {&_swigt__p_svn_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_config_t[] = { {&_swigt__p_svn_config_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_delta_editor_t[] = { {&_swigt__p_svn_delta_editor_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -7863,6 +8137,7 @@ static swig_cast_info _swigc__p_svn_opt_subcommand_desc2_t[] = { {&_swigt__p_sv
static swig_cast_info _swigc__p_svn_opt_subcommand_desc_t[] = { {&_swigt__p_svn_opt_subcommand_desc_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_file_t[] = { {&_swigt__p_svn_patch_file_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_t[] = { {&_swigt__p_svn_patch_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_prop_inherited_item_t[] = { {&_swigt__p_svn_prop_inherited_item_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_kind[] = { {&_swigt__p_svn_prop_kind, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_patch_t[] = { {&_swigt__p_svn_prop_patch_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_stream_mark_t[] = { {&_swigt__p_svn_stream_mark_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -7874,7 +8149,11 @@ static swig_cast_info _swigc__p_svn_txdelta_op_t[] = { {&_swigt__p_svn_txdelta_
static swig_cast_info _swigc__p_svn_txdelta_stream_t[] = { {&_swigt__p_svn_txdelta_stream_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_txdelta_window_t[] = { {&_swigt__p_svn_txdelta_window_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_checklist_t[] = { {&_swigt__p_svn_version_checklist_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_linked_lib_t[] = { {&_swigt__p_svn_version_ext_linked_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_loaded_lib_t[] = { {&_swigt__p_svn_version_ext_loaded_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_extended_t[] = { {&_swigt__p_svn_version_extended_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_t[] = { {&_swigt__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_wc_external_item2_t[] = { {&_swigt__p_svn_wc_external_item2_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_char[] = { {&_swigt__p_unsigned_char, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_long[] = { {&_swigt__p_unsigned_long, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_void[] = { {&_swigt__p_void, 0, 0, 0},{0, 0, 0, 0}};
@@ -7925,7 +8204,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_auth_provider_object_t,
_swigc__p_svn_auth_provider_t,
_swigc__p_svn_auth_ssl_server_cert_info_t,
+ _swigc__p_svn_checksum_ctx_t,
_swigc__p_svn_checksum_kind_t,
+ _swigc__p_svn_checksum_t,
_swigc__p_svn_commit_info_t,
_swigc__p_svn_config_t,
_swigc__p_svn_delta_editor_t,
@@ -7961,6 +8242,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_opt_subcommand_desc_t,
_swigc__p_svn_patch_file_t,
_swigc__p_svn_patch_t,
+ _swigc__p_svn_prop_inherited_item_t,
_swigc__p_svn_prop_kind,
_swigc__p_svn_prop_patch_t,
_swigc__p_svn_stream_mark_t,
@@ -7972,7 +8254,11 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_txdelta_stream_t,
_swigc__p_svn_txdelta_window_t,
_swigc__p_svn_version_checklist_t,
+ _swigc__p_svn_version_ext_linked_lib_t,
+ _swigc__p_svn_version_ext_loaded_lib_t,
+ _swigc__p_svn_version_extended_t,
_swigc__p_svn_version_t,
+ _swigc__p_svn_wc_external_item2_t,
_swigc__p_unsigned_char,
_swigc__p_unsigned_long,
_swigc__p_void,
@@ -8023,11 +8309,13 @@ static swig_command_info swig_commands[] = {
{"SVN::_Delta::svn_txdelta_stream_create", _wrap_svn_txdelta_stream_create},
{"SVN::_Delta::svn_txdelta_next_window", _wrap_svn_txdelta_next_window},
{"SVN::_Delta::svn_txdelta_md5_digest", _wrap_svn_txdelta_md5_digest},
+{"SVN::_Delta::svn_txdelta2", _wrap_svn_txdelta2},
{"SVN::_Delta::svn_txdelta", _wrap_svn_txdelta},
{"SVN::_Delta::svn_txdelta_target_push", _wrap_svn_txdelta_target_push},
{"SVN::_Delta::svn_txdelta_send_string", _wrap_svn_txdelta_send_string},
{"SVN::_Delta::svn_txdelta_send_stream", _wrap_svn_txdelta_send_stream},
{"SVN::_Delta::svn_txdelta_send_txstream", _wrap_svn_txdelta_send_txstream},
+{"SVN::_Delta::svn_txdelta_send_contents", _wrap_svn_txdelta_send_contents},
{"SVN::_Delta::svn_txdelta_apply", _wrap_svn_txdelta_apply},
{"SVN::_Delta::svn_txdelta_to_svndiff3", _wrap_svn_txdelta_to_svndiff3},
{"SVN::_Delta::svn_txdelta_to_svndiff2", _wrap_svn_txdelta_to_svndiff2},
@@ -8073,6 +8361,7 @@ static swig_command_info swig_commands[] = {
{"SVN::_Delta::svn_delta_noop_window_handler", _wrap_svn_delta_noop_window_handler},
{"SVN::_Delta::svn_delta_get_cancellation_editor", _wrap_svn_delta_get_cancellation_editor},
{"SVN::_Delta::svn_delta_depth_filter_editor", _wrap_svn_delta_depth_filter_editor},
+{"SVN::_Delta::svn_delta_path_driver2", _wrap_svn_delta_path_driver2},
{"SVN::_Delta::svn_delta_path_driver", _wrap_svn_delta_path_driver},
{"SVN::_Delta::svn_compat_wrap_file_rev_handler", _wrap_svn_compat_wrap_file_rev_handler},
{"SVN::_Delta::svn_delta_editor_invoke_set_target_revision", _wrap_svn_delta_editor_invoke_set_target_revision},
@@ -8158,8 +8447,6 @@ SWIG_InitializeModule(void *clientdata) {
swig_module_info *module_head, *iter;
int found, init;
- clientdata = clientdata;
-
/* check to see if the circular list has been setup, if not, set it up */
if (swig_module.next==0) {
/* Initialize the swig_module */
@@ -8350,25 +8637,30 @@ XS(SWIG_init) {
/* Install commands */
for (i = 0; swig_commands[i].name; i++) {
- newXS((char*) swig_commands[i].name,swig_commands[i].wrapper, (char*)__FILE__);
+ /* Casts only needed for Perl < 5.10. */
+#ifdef __cplusplus
+ newXS(const_cast<char*>(swig_commands[i].name), swig_commands[i].wrapper, const_cast<char*>(__FILE__));
+#else
+ newXS((char*)swig_commands[i].name, swig_commands[i].wrapper, (char*)__FILE__);
+#endif
}
/* Install variables */
for (i = 0; swig_variables[i].name; i++) {
SV *sv;
- sv = get_sv((char*) swig_variables[i].name, TRUE | 0x2 | GV_ADDMULTI);
+ sv = get_sv(swig_variables[i].name, TRUE | 0x2 | GV_ADDMULTI);
if (swig_variables[i].type) {
SWIG_MakePtr(sv,(void *)1, *swig_variables[i].type,0);
} else {
sv_setiv(sv,(IV) 0);
}
- swig_create_magic(sv, (char *) swig_variables[i].name, swig_variables[i].set, swig_variables[i].get);
+ swig_create_magic(sv, swig_variables[i].name, swig_variables[i].set, swig_variables[i].get);
}
/* Install constant */
for (i = 0; swig_constants[i].type; i++) {
SV *sv;
- sv = get_sv((char*)swig_constants[i].name, TRUE | 0x2 | GV_ADDMULTI);
+ sv = get_sv(swig_constants[i].name, TRUE | 0x2 | GV_ADDMULTI);
switch(swig_constants[i].type) {
case SWIG_INT:
sv_setiv(sv, (IV) swig_constants[i].lvalue);
@@ -8377,7 +8669,7 @@ XS(SWIG_init) {
sv_setnv(sv, (double) swig_constants[i].dvalue);
break;
case SWIG_STRING:
- sv_setpv(sv, (char *) swig_constants[i].pvalue);
+ sv_setpv(sv, (const char *) swig_constants[i].pvalue);
break;
case SWIG_POINTER:
SWIG_MakePtr(sv, swig_constants[i].pvalue, *(swig_constants[i].ptype),0);
@@ -8391,32 +8683,32 @@ XS(SWIG_init) {
SvREADONLY_on(sv);
}
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_DELTA_COMPRESSION_LEVEL_NONE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_DELTA_COMPRESSION_LEVEL_MAX", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(9)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_DELTA_COMPRESSION_LEVEL_DEFAULT", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(5)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_txdelta_source", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_txdelta_source)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_txdelta_target", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_txdelta_target)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_txdelta_new", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_txdelta_new)));
SvREADONLY_on(sv);
diff --git a/subversion/bindings/swig/perl/native/svn_diff.c b/subversion/bindings/swig/perl/native/svn_diff.c
index 4f5a6a6..0e75a59 100644
--- a/subversion/bindings/swig/perl/native/svn_diff.c
+++ b/subversion/bindings/swig/perl/native/svn_diff.c
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -830,50 +830,35 @@ extern "C" {
SWIGINTERN const char*
SWIG_Perl_ErrorType(int code) {
- const char* type = 0;
switch(code) {
case SWIG_MemoryError:
- type = "MemoryError";
- break;
+ return "MemoryError";
case SWIG_IOError:
- type = "IOError";
- break;
+ return "IOError";
case SWIG_RuntimeError:
- type = "RuntimeError";
- break;
+ return "RuntimeError";
case SWIG_IndexError:
- type = "IndexError";
- break;
+ return "IndexError";
case SWIG_TypeError:
- type = "TypeError";
- break;
+ return "TypeError";
case SWIG_DivisionByZero:
- type = "ZeroDivisionError";
- break;
+ return "ZeroDivisionError";
case SWIG_OverflowError:
- type = "OverflowError";
- break;
+ return "OverflowError";
case SWIG_SyntaxError:
- type = "SyntaxError";
- break;
+ return "SyntaxError";
case SWIG_ValueError:
- type = "ValueError";
- break;
+ return "ValueError";
case SWIG_SystemError:
- type = "SystemError";
- break;
+ return "SystemError";
case SWIG_AttributeError:
- type = "AttributeError";
- break;
+ return "AttributeError";
default:
- type = "RuntimeError";
+ return "RuntimeError";
}
- return type;
}
-
-
/* -----------------------------------------------------------------------------
* perlrun.swg
*
@@ -916,14 +901,14 @@ SWIG_Perl_ErrorType(int code) {
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Perl_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Perl_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Perl_SetModule(pointer)
/* Error manipulation */
#define SWIG_ErrorType(code) SWIG_Perl_ErrorType(code)
-#define SWIG_Error(code, msg) sv_setpvf(GvSV(PL_errgv),"%s %s\n", SWIG_ErrorType(code), msg)
+#define SWIG_Error(code, msg) sv_setpvf(get_sv("@", GV_ADD), "%s %s", SWIG_ErrorType(code), msg)
#define SWIG_fail goto fail
/* Perl-specific SWIG API */
@@ -1017,8 +1002,6 @@ typedef int (*SwigMagicFunc)(struct interpreter *, SV *, MAGIC *);
#endif /* MULTIPLICITY */
#endif /* PERL_OBJECT */
-/* Workaround for bug in perl 5.6.x croak and earlier */
-#if (PERL_VERSION < 8)
# ifdef PERL_OBJECT
# define SWIG_croak_null() SWIG_Perl_croak_null(pPerl)
static void SWIG_Perl_croak_null(CPerlObj *pPerl)
@@ -1026,17 +1009,16 @@ static void SWIG_Perl_croak_null(CPerlObj *pPerl)
static void SWIG_croak_null()
# endif
{
- SV *err=ERRSV;
+ SV *err = get_sv("@", GV_ADD);
# if (PERL_VERSION < 6)
croak("%_", err);
# else
- if (SvOK(err) && !SvROK(err)) croak("%_", err);
- croak(Nullch);
+ if (sv_isobject(err))
+ croak(0);
+ else
+ croak("%s", SvPV_nolen(err));
# endif
}
-#else
-# define SWIG_croak_null() croak(Nullch)
-#endif
/*
@@ -1088,8 +1070,7 @@ SWIG_TypeProxyCheck(const char *c, swig_type_info *ty) {
if (ty) {
swig_cast_info *iter = ty->cast;
while (iter) {
- if ( (!iter->type->clientdata && (strcmp(iter->type->name, c) == 0)) ||
- (iter->type->clientdata && (strcmp((char*)iter->type->clientdata, c) == 0)) ) {
+ if (strcmp(SWIG_Perl_TypeProxyName(iter->type), c) == 0) {
if (iter == ty->cast)
return iter;
/* Move iter to the top of the linked list */
@@ -1220,7 +1201,7 @@ SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, swig_type_info *t, i
SV *obj=newSV(0);
HV *hash=newHV();
HV *stash;
- sv_setref_pv(obj, (char *) SWIG_Perl_TypeProxyName(t), ptr);
+ sv_setref_pv(obj, SWIG_Perl_TypeProxyName(t), ptr);
stash=SvSTASH(SvRV(obj));
if (flags & SWIG_POINTER_OWN) {
HV *hv;
@@ -1238,7 +1219,7 @@ SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, swig_type_info *t, i
sv_bless(sv, stash);
}
else {
- sv_setref_pv(sv, (char *) SWIG_Perl_TypeProxyName(t), ptr);
+ sv_setref_pv(sv, SWIG_Perl_TypeProxyName(t), ptr);
}
}
@@ -1329,19 +1310,23 @@ typedef struct {
/* Magic variable code */
#ifndef PERL_OBJECT
-#define swig_create_magic(s,a,b,c) _swig_create_magic(s,a,b,c)
- #ifndef MULTIPLICITY
- SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *))
- #else
- SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(struct interpreter*, SV *, MAGIC *), int (*get)(struct interpreter*, SV *,MAGIC *))
- #endif
+# ifdef __cplusplus
+# define swig_create_magic(s,a,b,c) _swig_create_magic(s,const_cast<char*>(a),b,c)
+# else
+# define swig_create_magic(s,a,b,c) _swig_create_magic(s,(char*)(a),b,c)
+# endif
+# ifndef MULTIPLICITY
+SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *))
+# else
+SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(struct interpreter*, SV *, MAGIC *), int (*get)(struct interpreter*, SV *,MAGIC *))
+# endif
#else
# define swig_create_magic(s,a,b,c) _swig_create_magic(pPerl,s,a,b,c)
SWIGRUNTIME void _swig_create_magic(CPerlObj *pPerl, SV *sv, const char *name, int (CPerlObj::*set)(SV *, MAGIC *), int (CPerlObj::*get)(SV *, MAGIC *))
#endif
{
MAGIC *mg;
- sv_magic(sv,sv,'U',(char *) name,strlen(name));
+ sv_magic(sv,sv,'U',name,strlen(name));
mg = mg_find(sv,'U');
mg->mg_virtual = (MGVTBL *) malloc(sizeof(MGVTBL));
mg->mg_virtual->svt_get = (SwigMagicFunc) get;
@@ -1353,7 +1338,7 @@ SWIGRUNTIME void _swig_create_magic(CPerlObj *pPerl, SV *sv, const char *name, i
SWIGRUNTIME swig_module_info *
-SWIG_Perl_GetModule(void) {
+SWIG_Perl_GetModule(void *SWIGUNUSEDPARM(clientdata)) {
static void *type_pointer = (void *)0;
SV *pointer;
@@ -1447,9 +1432,6 @@ SWIG_Perl_SetModule(swig_module_info *module) {
#ifdef eof
#undef eof
#endif
-#ifdef bool
- #undef bool
-#endif
#ifdef close
#undef close
#endif
@@ -1490,6 +1472,14 @@ SWIG_Perl_SetModule(swig_module_info *module) {
#undef stat
#endif
+#ifdef bool
+ /* Leave if macro is from C99 stdbool.h */
+ #ifndef __bool_true_false_are_defined
+ #undef bool
+ #endif
+#endif
+
+
#define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0)
@@ -1503,68 +1493,77 @@ SWIG_Perl_SetModule(swig_module_info *module) {
/* -------- TYPES TABLE (BEGIN) -------- */
-#define SWIGTYPE_p_apr_int32_t swig_types[0]
-#define SWIGTYPE_p_apr_int64_t swig_types[1]
-#define SWIGTYPE_p_char swig_types[2]
-#define SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[3]
-#define SWIGTYPE_p_int swig_types[4]
-#define SWIGTYPE_p_long swig_types[5]
-#define SWIGTYPE_p_svn_auth_baton_t swig_types[6]
-#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[7]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[8]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[9]
-#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[10]
-#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[11]
-#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[12]
-#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[13]
-#define SWIGTYPE_p_svn_auth_provider_t swig_types[14]
-#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[15]
-#define SWIGTYPE_p_svn_commit_info_t swig_types[16]
-#define SWIGTYPE_p_svn_config_t swig_types[17]
-#define SWIGTYPE_p_svn_depth_t swig_types[18]
-#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[19]
-#define SWIGTYPE_p_svn_diff_datasource_e swig_types[20]
-#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[21]
-#define SWIGTYPE_p_svn_diff_file_options_t swig_types[22]
-#define SWIGTYPE_p_svn_diff_fns2_t swig_types[23]
-#define SWIGTYPE_p_svn_diff_fns_t swig_types[24]
-#define SWIGTYPE_p_svn_diff_hunk_t swig_types[25]
-#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[26]
-#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[27]
-#define SWIGTYPE_p_svn_diff_t swig_types[28]
-#define SWIGTYPE_p_svn_dirent_t swig_types[29]
-#define SWIGTYPE_p_svn_errno_t swig_types[30]
-#define SWIGTYPE_p_svn_error_t swig_types[31]
-#define SWIGTYPE_p_svn_io_dirent2_t swig_types[32]
-#define SWIGTYPE_p_svn_io_dirent_t swig_types[33]
-#define SWIGTYPE_p_svn_io_file_del_t swig_types[34]
-#define SWIGTYPE_p_svn_location_segment_t swig_types[35]
-#define SWIGTYPE_p_svn_lock_t swig_types[36]
-#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[37]
-#define SWIGTYPE_p_svn_log_changed_path_t swig_types[38]
-#define SWIGTYPE_p_svn_log_entry_t swig_types[39]
-#define SWIGTYPE_p_svn_merge_range_t swig_types[40]
-#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[41]
-#define SWIGTYPE_p_svn_node_kind_t swig_types[42]
-#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[43]
-#define SWIGTYPE_p_svn_opt_revision_t swig_types[44]
-#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[45]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[46]
-#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[47]
-#define SWIGTYPE_p_svn_patch_file_t swig_types[48]
-#define SWIGTYPE_p_svn_patch_t swig_types[49]
-#define SWIGTYPE_p_svn_prop_kind swig_types[50]
-#define SWIGTYPE_p_svn_prop_patch_t swig_types[51]
-#define SWIGTYPE_p_svn_stream_mark_t swig_types[52]
-#define SWIGTYPE_p_svn_stream_t swig_types[53]
-#define SWIGTYPE_p_svn_string_t swig_types[54]
-#define SWIGTYPE_p_svn_stringbuf_t swig_types[55]
-#define SWIGTYPE_p_svn_tristate_t swig_types[56]
-#define SWIGTYPE_p_svn_version_checklist_t swig_types[57]
-#define SWIGTYPE_p_svn_version_t swig_types[58]
-#define SWIGTYPE_p_unsigned_long swig_types[59]
-static swig_type_info *swig_types[61];
-static swig_module_info swig_module = {swig_types, 60, 0, 0, 0, 0};
+#define SWIGTYPE_p_apr_array_header_t swig_types[0]
+#define SWIGTYPE_p_apr_int32_t swig_types[1]
+#define SWIGTYPE_p_apr_int64_t swig_types[2]
+#define SWIGTYPE_p_char swig_types[3]
+#define SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[4]
+#define SWIGTYPE_p_int swig_types[5]
+#define SWIGTYPE_p_long swig_types[6]
+#define SWIGTYPE_p_svn_auth_baton_t swig_types[7]
+#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[8]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[9]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[10]
+#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[11]
+#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[12]
+#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[13]
+#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[14]
+#define SWIGTYPE_p_svn_auth_provider_t swig_types[15]
+#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[16]
+#define SWIGTYPE_p_svn_checksum_ctx_t swig_types[17]
+#define SWIGTYPE_p_svn_checksum_kind_t swig_types[18]
+#define SWIGTYPE_p_svn_checksum_t swig_types[19]
+#define SWIGTYPE_p_svn_commit_info_t swig_types[20]
+#define SWIGTYPE_p_svn_config_t swig_types[21]
+#define SWIGTYPE_p_svn_depth_t swig_types[22]
+#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[23]
+#define SWIGTYPE_p_svn_diff_datasource_e swig_types[24]
+#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[25]
+#define SWIGTYPE_p_svn_diff_file_options_t swig_types[26]
+#define SWIGTYPE_p_svn_diff_fns2_t swig_types[27]
+#define SWIGTYPE_p_svn_diff_fns_t swig_types[28]
+#define SWIGTYPE_p_svn_diff_hunk_t swig_types[29]
+#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[30]
+#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[31]
+#define SWIGTYPE_p_svn_diff_t swig_types[32]
+#define SWIGTYPE_p_svn_dirent_t swig_types[33]
+#define SWIGTYPE_p_svn_errno_t swig_types[34]
+#define SWIGTYPE_p_svn_error_t swig_types[35]
+#define SWIGTYPE_p_svn_io_dirent2_t swig_types[36]
+#define SWIGTYPE_p_svn_io_dirent_t swig_types[37]
+#define SWIGTYPE_p_svn_io_file_del_t swig_types[38]
+#define SWIGTYPE_p_svn_location_segment_t swig_types[39]
+#define SWIGTYPE_p_svn_lock_t swig_types[40]
+#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[41]
+#define SWIGTYPE_p_svn_log_changed_path_t swig_types[42]
+#define SWIGTYPE_p_svn_log_entry_t swig_types[43]
+#define SWIGTYPE_p_svn_merge_range_t swig_types[44]
+#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[45]
+#define SWIGTYPE_p_svn_node_kind_t swig_types[46]
+#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[47]
+#define SWIGTYPE_p_svn_opt_revision_t swig_types[48]
+#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[49]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[50]
+#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[51]
+#define SWIGTYPE_p_svn_patch_file_t swig_types[52]
+#define SWIGTYPE_p_svn_patch_t swig_types[53]
+#define SWIGTYPE_p_svn_prop_inherited_item_t swig_types[54]
+#define SWIGTYPE_p_svn_prop_kind swig_types[55]
+#define SWIGTYPE_p_svn_prop_patch_t swig_types[56]
+#define SWIGTYPE_p_svn_stream_mark_t swig_types[57]
+#define SWIGTYPE_p_svn_stream_t swig_types[58]
+#define SWIGTYPE_p_svn_string_t swig_types[59]
+#define SWIGTYPE_p_svn_stringbuf_t swig_types[60]
+#define SWIGTYPE_p_svn_tristate_t swig_types[61]
+#define SWIGTYPE_p_svn_version_checklist_t swig_types[62]
+#define SWIGTYPE_p_svn_version_ext_linked_lib_t swig_types[63]
+#define SWIGTYPE_p_svn_version_ext_loaded_lib_t swig_types[64]
+#define SWIGTYPE_p_svn_version_extended_t swig_types[65]
+#define SWIGTYPE_p_svn_version_t swig_types[66]
+#define SWIGTYPE_p_svn_wc_external_item2_t swig_types[67]
+#define SWIGTYPE_p_unsigned_long swig_types[68]
+static swig_type_info *swig_types[70];
+static swig_module_info swig_module = {swig_types, 69, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@@ -1575,7 +1574,7 @@ static swig_module_info swig_module = {swig_types, 60, 0, 0, 0, 0};
#define SWIG_name "SVN::_Diff::boot_SVN___Diff"
#define SWIG_prefix "SVN::_Diff::"
-#define SWIGVERSION 0x020004
+#define SWIGVERSION 0x020009
#define SWIG_VERSION SWIGVERSION
@@ -1635,6 +1634,7 @@ extern "C" {
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
+static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *|svn_rangelist_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int32_t = {"_p_apr_int32_t", "apr_int32_t *|time_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int64_t = {"_p_apr_int64_t", "apr_int64_t *|svn_filesize_t *|apr_time_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
@@ -1651,6 +1651,9 @@ static swig_type_info _swigt__p_svn_auth_iterstate_t = {"_p_svn_auth_iterstate_t
static swig_type_info _swigt__p_svn_auth_provider_object_t = {"_p_svn_auth_provider_object_t", "struct svn_auth_provider_object_t *|svn_auth_provider_object_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_provider_t = {"_p_svn_auth_provider_t", "struct svn_auth_provider_t *|svn_auth_provider_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_ssl_server_cert_info_t = {"_p_svn_auth_ssl_server_cert_info_t", "struct svn_auth_ssl_server_cert_info_t *|svn_auth_ssl_server_cert_info_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_ctx_t = {"_p_svn_checksum_ctx_t", "struct svn_checksum_ctx_t *|svn_checksum_ctx_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "enum svn_checksum_kind_t *|svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "struct svn_checksum_t *|svn_checksum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_commit_info_t = {"_p_svn_commit_info_t", "struct svn_commit_info_t *|svn_commit_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_config_t = {"_p_svn_config_t", "struct svn_config_t *|svn_config_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_depth_t = {"_p_svn_depth_t", "enum svn_depth_t *|svn_depth_t *", 0, 0, (void*)0, 0};
@@ -1685,6 +1688,7 @@ static swig_type_info _swigt__p_svn_opt_subcommand_desc2_t = {"_p_svn_opt_subcom
static swig_type_info _swigt__p_svn_opt_subcommand_desc_t = {"_p_svn_opt_subcommand_desc_t", "struct svn_opt_subcommand_desc_t *|svn_opt_subcommand_desc_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_file_t = {"_p_svn_patch_file_t", "struct svn_patch_file_t *|svn_patch_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_t = {"_p_svn_patch_t", "struct svn_patch_t *|svn_patch_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_prop_inherited_item_t = {"_p_svn_prop_inherited_item_t", "struct svn_prop_inherited_item_t *|svn_prop_inherited_item_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_kind = {"_p_svn_prop_kind", "svn_prop_kind_t *|enum svn_prop_kind *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_patch_t = {"_p_svn_prop_patch_t", "struct svn_prop_patch_t *|svn_prop_patch_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_stream_mark_t = {"_p_svn_stream_mark_t", "struct svn_stream_mark_t *|svn_stream_mark_t *", 0, 0, (void*)0, 0};
@@ -1693,10 +1697,15 @@ static swig_type_info _swigt__p_svn_string_t = {"_p_svn_string_t", "struct svn_s
static swig_type_info _swigt__p_svn_stringbuf_t = {"_p_svn_stringbuf_t", "struct svn_stringbuf_t *|svn_stringbuf_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_tristate_t = {"_p_svn_tristate_t", "enum svn_tristate_t *|svn_tristate_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_checklist_t = {"_p_svn_version_checklist_t", "struct svn_version_checklist_t *|svn_version_checklist_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_linked_lib_t = {"_p_svn_version_ext_linked_lib_t", "struct svn_version_ext_linked_lib_t *|svn_version_ext_linked_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_loaded_lib_t = {"_p_svn_version_ext_loaded_lib_t", "struct svn_version_ext_loaded_lib_t *|svn_version_ext_loaded_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_extended_t = {"_p_svn_version_extended_t", "struct svn_version_extended_t *|svn_version_extended_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_t = {"_p_svn_version_t", "struct svn_version_t *|svn_version_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_wc_external_item2_t = {"_p_svn_wc_external_item2_t", "svn_wc_external_item2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_long = {"_p_unsigned_long", "unsigned long *|svn_linenum_t *", 0, 0, (void*)0, 0};
static swig_type_info *swig_type_initial[] = {
+ &_swigt__p_apr_array_header_t,
&_swigt__p_apr_int32_t,
&_swigt__p_apr_int64_t,
&_swigt__p_char,
@@ -1713,6 +1722,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_auth_provider_object_t,
&_swigt__p_svn_auth_provider_t,
&_swigt__p_svn_auth_ssl_server_cert_info_t,
+ &_swigt__p_svn_checksum_ctx_t,
+ &_swigt__p_svn_checksum_kind_t,
+ &_swigt__p_svn_checksum_t,
&_swigt__p_svn_commit_info_t,
&_swigt__p_svn_config_t,
&_swigt__p_svn_depth_t,
@@ -1747,6 +1759,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_opt_subcommand_desc_t,
&_swigt__p_svn_patch_file_t,
&_swigt__p_svn_patch_t,
+ &_swigt__p_svn_prop_inherited_item_t,
&_swigt__p_svn_prop_kind,
&_swigt__p_svn_prop_patch_t,
&_swigt__p_svn_stream_mark_t,
@@ -1755,10 +1768,15 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_stringbuf_t,
&_swigt__p_svn_tristate_t,
&_swigt__p_svn_version_checklist_t,
+ &_swigt__p_svn_version_ext_linked_lib_t,
+ &_swigt__p_svn_version_ext_loaded_lib_t,
+ &_swigt__p_svn_version_extended_t,
&_swigt__p_svn_version_t,
+ &_swigt__p_svn_wc_external_item2_t,
&_swigt__p_unsigned_long,
};
+static swig_cast_info _swigc__p_apr_array_header_t[] = { {&_swigt__p_apr_array_header_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_apr_int32_t[] = { {&_swigt__p_apr_int32_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_apr_int64_t[] = { {&_swigt__p_apr_int64_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
@@ -1775,6 +1793,9 @@ static swig_cast_info _swigc__p_svn_auth_iterstate_t[] = { {&_swigt__p_svn_auth
static swig_cast_info _swigc__p_svn_auth_provider_object_t[] = { {&_swigt__p_svn_auth_provider_object_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_provider_t[] = { {&_swigt__p_svn_auth_provider_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_ssl_server_cert_info_t[] = { {&_swigt__p_svn_auth_ssl_server_cert_info_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_ctx_t[] = { {&_swigt__p_svn_checksum_ctx_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_kind_t[] = { {&_swigt__p_svn_checksum_kind_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_t[] = { {&_swigt__p_svn_checksum_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_commit_info_t[] = { {&_swigt__p_svn_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_config_t[] = { {&_swigt__p_svn_config_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_depth_t[] = { {&_swigt__p_svn_depth_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -1809,6 +1830,7 @@ static swig_cast_info _swigc__p_svn_opt_subcommand_desc2_t[] = { {&_swigt__p_sv
static swig_cast_info _swigc__p_svn_opt_subcommand_desc_t[] = { {&_swigt__p_svn_opt_subcommand_desc_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_file_t[] = { {&_swigt__p_svn_patch_file_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_t[] = { {&_swigt__p_svn_patch_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_prop_inherited_item_t[] = { {&_swigt__p_svn_prop_inherited_item_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_kind[] = { {&_swigt__p_svn_prop_kind, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_patch_t[] = { {&_swigt__p_svn_prop_patch_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_stream_mark_t[] = { {&_swigt__p_svn_stream_mark_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -1817,10 +1839,15 @@ static swig_cast_info _swigc__p_svn_string_t[] = { {&_swigt__p_svn_string_t, 0,
static swig_cast_info _swigc__p_svn_stringbuf_t[] = { {&_swigt__p_svn_stringbuf_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_tristate_t[] = { {&_swigt__p_svn_tristate_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_checklist_t[] = { {&_swigt__p_svn_version_checklist_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_linked_lib_t[] = { {&_swigt__p_svn_version_ext_linked_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_loaded_lib_t[] = { {&_swigt__p_svn_version_ext_loaded_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_extended_t[] = { {&_swigt__p_svn_version_extended_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_t[] = { {&_swigt__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_wc_external_item2_t[] = { {&_swigt__p_svn_wc_external_item2_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_long[] = { {&_swigt__p_unsigned_long, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info *swig_cast_initial[] = {
+ _swigc__p_apr_array_header_t,
_swigc__p_apr_int32_t,
_swigc__p_apr_int64_t,
_swigc__p_char,
@@ -1837,6 +1864,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_auth_provider_object_t,
_swigc__p_svn_auth_provider_t,
_swigc__p_svn_auth_ssl_server_cert_info_t,
+ _swigc__p_svn_checksum_ctx_t,
+ _swigc__p_svn_checksum_kind_t,
+ _swigc__p_svn_checksum_t,
_swigc__p_svn_commit_info_t,
_swigc__p_svn_config_t,
_swigc__p_svn_depth_t,
@@ -1871,6 +1901,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_opt_subcommand_desc_t,
_swigc__p_svn_patch_file_t,
_swigc__p_svn_patch_t,
+ _swigc__p_svn_prop_inherited_item_t,
_swigc__p_svn_prop_kind,
_swigc__p_svn_prop_patch_t,
_swigc__p_svn_stream_mark_t,
@@ -1879,7 +1910,11 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_stringbuf_t,
_swigc__p_svn_tristate_t,
_swigc__p_svn_version_checklist_t,
+ _swigc__p_svn_version_ext_linked_lib_t,
+ _swigc__p_svn_version_ext_loaded_lib_t,
+ _swigc__p_svn_version_extended_t,
_swigc__p_svn_version_t,
+ _swigc__p_svn_wc_external_item2_t,
_swigc__p_unsigned_long,
};
@@ -1957,8 +1992,6 @@ SWIG_InitializeModule(void *clientdata) {
swig_module_info *module_head, *iter;
int found, init;
- clientdata = clientdata;
-
/* check to see if the circular list has been setup, if not, set it up */
if (swig_module.next==0) {
/* Initialize the swig_module */
@@ -2149,25 +2182,30 @@ XS(SWIG_init) {
/* Install commands */
for (i = 0; swig_commands[i].name; i++) {
- newXS((char*) swig_commands[i].name,swig_commands[i].wrapper, (char*)__FILE__);
+ /* Casts only needed for Perl < 5.10. */
+#ifdef __cplusplus
+ newXS(const_cast<char*>(swig_commands[i].name), swig_commands[i].wrapper, const_cast<char*>(__FILE__));
+#else
+ newXS((char*)swig_commands[i].name, swig_commands[i].wrapper, (char*)__FILE__);
+#endif
}
/* Install variables */
for (i = 0; swig_variables[i].name; i++) {
SV *sv;
- sv = get_sv((char*) swig_variables[i].name, TRUE | 0x2 | GV_ADDMULTI);
+ sv = get_sv(swig_variables[i].name, TRUE | 0x2 | GV_ADDMULTI);
if (swig_variables[i].type) {
SWIG_MakePtr(sv,(void *)1, *swig_variables[i].type,0);
} else {
sv_setiv(sv,(IV) 0);
}
- swig_create_magic(sv, (char *) swig_variables[i].name, swig_variables[i].set, swig_variables[i].get);
+ swig_create_magic(sv, swig_variables[i].name, swig_variables[i].set, swig_variables[i].get);
}
/* Install constant */
for (i = 0; swig_constants[i].type; i++) {
SV *sv;
- sv = get_sv((char*)swig_constants[i].name, TRUE | 0x2 | GV_ADDMULTI);
+ sv = get_sv(swig_constants[i].name, TRUE | 0x2 | GV_ADDMULTI);
switch(swig_constants[i].type) {
case SWIG_INT:
sv_setiv(sv, (IV) swig_constants[i].lvalue);
@@ -2176,7 +2214,7 @@ XS(SWIG_init) {
sv_setnv(sv, (double) swig_constants[i].dvalue);
break;
case SWIG_STRING:
- sv_setpv(sv, (char *) swig_constants[i].pvalue);
+ sv_setpv(sv, (const char *) swig_constants[i].pvalue);
break;
case SWIG_POINTER:
SWIG_MakePtr(sv, swig_constants[i].pvalue, *(swig_constants[i].ptype),0);
diff --git a/subversion/bindings/swig/perl/native/svn_fs.c b/subversion/bindings/swig/perl/native/svn_fs.c
index e5eae80..0c456c6 100644
--- a/subversion/bindings/swig/perl/native/svn_fs.c
+++ b/subversion/bindings/swig/perl/native/svn_fs.c
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -830,50 +830,35 @@ extern "C" {
SWIGINTERN const char*
SWIG_Perl_ErrorType(int code) {
- const char* type = 0;
switch(code) {
case SWIG_MemoryError:
- type = "MemoryError";
- break;
+ return "MemoryError";
case SWIG_IOError:
- type = "IOError";
- break;
+ return "IOError";
case SWIG_RuntimeError:
- type = "RuntimeError";
- break;
+ return "RuntimeError";
case SWIG_IndexError:
- type = "IndexError";
- break;
+ return "IndexError";
case SWIG_TypeError:
- type = "TypeError";
- break;
+ return "TypeError";
case SWIG_DivisionByZero:
- type = "ZeroDivisionError";
- break;
+ return "ZeroDivisionError";
case SWIG_OverflowError:
- type = "OverflowError";
- break;
+ return "OverflowError";
case SWIG_SyntaxError:
- type = "SyntaxError";
- break;
+ return "SyntaxError";
case SWIG_ValueError:
- type = "ValueError";
- break;
+ return "ValueError";
case SWIG_SystemError:
- type = "SystemError";
- break;
+ return "SystemError";
case SWIG_AttributeError:
- type = "AttributeError";
- break;
+ return "AttributeError";
default:
- type = "RuntimeError";
+ return "RuntimeError";
}
- return type;
}
-
-
/* -----------------------------------------------------------------------------
* perlrun.swg
*
@@ -916,14 +901,14 @@ SWIG_Perl_ErrorType(int code) {
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Perl_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Perl_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Perl_SetModule(pointer)
/* Error manipulation */
#define SWIG_ErrorType(code) SWIG_Perl_ErrorType(code)
-#define SWIG_Error(code, msg) sv_setpvf(GvSV(PL_errgv),"%s %s\n", SWIG_ErrorType(code), msg)
+#define SWIG_Error(code, msg) sv_setpvf(get_sv("@", GV_ADD), "%s %s", SWIG_ErrorType(code), msg)
#define SWIG_fail goto fail
/* Perl-specific SWIG API */
@@ -1017,8 +1002,6 @@ typedef int (*SwigMagicFunc)(struct interpreter *, SV *, MAGIC *);
#endif /* MULTIPLICITY */
#endif /* PERL_OBJECT */
-/* Workaround for bug in perl 5.6.x croak and earlier */
-#if (PERL_VERSION < 8)
# ifdef PERL_OBJECT
# define SWIG_croak_null() SWIG_Perl_croak_null(pPerl)
static void SWIG_Perl_croak_null(CPerlObj *pPerl)
@@ -1026,17 +1009,16 @@ static void SWIG_Perl_croak_null(CPerlObj *pPerl)
static void SWIG_croak_null()
# endif
{
- SV *err=ERRSV;
+ SV *err = get_sv("@", GV_ADD);
# if (PERL_VERSION < 6)
croak("%_", err);
# else
- if (SvOK(err) && !SvROK(err)) croak("%_", err);
- croak(Nullch);
+ if (sv_isobject(err))
+ croak(0);
+ else
+ croak("%s", SvPV_nolen(err));
# endif
}
-#else
-# define SWIG_croak_null() croak(Nullch)
-#endif
/*
@@ -1088,8 +1070,7 @@ SWIG_TypeProxyCheck(const char *c, swig_type_info *ty) {
if (ty) {
swig_cast_info *iter = ty->cast;
while (iter) {
- if ( (!iter->type->clientdata && (strcmp(iter->type->name, c) == 0)) ||
- (iter->type->clientdata && (strcmp((char*)iter->type->clientdata, c) == 0)) ) {
+ if (strcmp(SWIG_Perl_TypeProxyName(iter->type), c) == 0) {
if (iter == ty->cast)
return iter;
/* Move iter to the top of the linked list */
@@ -1220,7 +1201,7 @@ SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, swig_type_info *t, i
SV *obj=newSV(0);
HV *hash=newHV();
HV *stash;
- sv_setref_pv(obj, (char *) SWIG_Perl_TypeProxyName(t), ptr);
+ sv_setref_pv(obj, SWIG_Perl_TypeProxyName(t), ptr);
stash=SvSTASH(SvRV(obj));
if (flags & SWIG_POINTER_OWN) {
HV *hv;
@@ -1238,7 +1219,7 @@ SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, swig_type_info *t, i
sv_bless(sv, stash);
}
else {
- sv_setref_pv(sv, (char *) SWIG_Perl_TypeProxyName(t), ptr);
+ sv_setref_pv(sv, SWIG_Perl_TypeProxyName(t), ptr);
}
}
@@ -1329,19 +1310,23 @@ typedef struct {
/* Magic variable code */
#ifndef PERL_OBJECT
-#define swig_create_magic(s,a,b,c) _swig_create_magic(s,a,b,c)
- #ifndef MULTIPLICITY
- SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *))
- #else
- SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(struct interpreter*, SV *, MAGIC *), int (*get)(struct interpreter*, SV *,MAGIC *))
- #endif
+# ifdef __cplusplus
+# define swig_create_magic(s,a,b,c) _swig_create_magic(s,const_cast<char*>(a),b,c)
+# else
+# define swig_create_magic(s,a,b,c) _swig_create_magic(s,(char*)(a),b,c)
+# endif
+# ifndef MULTIPLICITY
+SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *))
+# else
+SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(struct interpreter*, SV *, MAGIC *), int (*get)(struct interpreter*, SV *,MAGIC *))
+# endif
#else
# define swig_create_magic(s,a,b,c) _swig_create_magic(pPerl,s,a,b,c)
SWIGRUNTIME void _swig_create_magic(CPerlObj *pPerl, SV *sv, const char *name, int (CPerlObj::*set)(SV *, MAGIC *), int (CPerlObj::*get)(SV *, MAGIC *))
#endif
{
MAGIC *mg;
- sv_magic(sv,sv,'U',(char *) name,strlen(name));
+ sv_magic(sv,sv,'U',name,strlen(name));
mg = mg_find(sv,'U');
mg->mg_virtual = (MGVTBL *) malloc(sizeof(MGVTBL));
mg->mg_virtual->svt_get = (SwigMagicFunc) get;
@@ -1353,7 +1338,7 @@ SWIGRUNTIME void _swig_create_magic(CPerlObj *pPerl, SV *sv, const char *name, i
SWIGRUNTIME swig_module_info *
-SWIG_Perl_GetModule(void) {
+SWIG_Perl_GetModule(void *SWIGUNUSEDPARM(clientdata)) {
static void *type_pointer = (void *)0;
SV *pointer;
@@ -1447,9 +1432,6 @@ SWIG_Perl_SetModule(swig_module_info *module) {
#ifdef eof
#undef eof
#endif
-#ifdef bool
- #undef bool
-#endif
#ifdef close
#undef close
#endif
@@ -1490,6 +1472,14 @@ SWIG_Perl_SetModule(swig_module_info *module) {
#undef stat
#endif
+#ifdef bool
+ /* Leave if macro is from C99 stdbool.h */
+ #ifndef __bool_true_false_are_defined
+ #undef bool
+ #endif
+#endif
+
+
#define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0)
@@ -1509,104 +1499,114 @@ SWIG_Perl_SetModule(swig_module_info *module) {
#define SWIGTYPE_p_apr_int64_t swig_types[3]
#define SWIGTYPE_p_apr_pool_t swig_types[4]
#define SWIGTYPE_p_char swig_types[5]
-#define SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[6]
-#define SWIGTYPE_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t swig_types[7]
-#define SWIGTYPE_p_f_p_void__p_svn_error_t swig_types[8]
-#define SWIGTYPE_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t swig_types[9]
-#define SWIGTYPE_p_f_p_void_p_struct_svn_error_t__void swig_types[10]
-#define SWIGTYPE_p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t swig_types[11]
-#define SWIGTYPE_p_int swig_types[12]
-#define SWIGTYPE_p_long swig_types[13]
-#define SWIGTYPE_p_p_apr_array_header_t swig_types[14]
-#define SWIGTYPE_p_p_apr_hash_t swig_types[15]
-#define SWIGTYPE_p_p_char swig_types[16]
-#define SWIGTYPE_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t swig_types[17]
-#define SWIGTYPE_p_p_svn_checksum_t swig_types[18]
-#define SWIGTYPE_p_p_svn_fs_access_t swig_types[19]
-#define SWIGTYPE_p_p_svn_fs_history_t swig_types[20]
-#define SWIGTYPE_p_p_svn_fs_id_t swig_types[21]
-#define SWIGTYPE_p_p_svn_fs_root_t swig_types[22]
-#define SWIGTYPE_p_p_svn_fs_t swig_types[23]
-#define SWIGTYPE_p_p_svn_fs_txn_t swig_types[24]
-#define SWIGTYPE_p_p_svn_lock_t swig_types[25]
-#define SWIGTYPE_p_p_svn_stream_t swig_types[26]
-#define SWIGTYPE_p_p_svn_string_t swig_types[27]
-#define SWIGTYPE_p_p_svn_txdelta_stream_t swig_types[28]
-#define SWIGTYPE_p_p_void swig_types[29]
-#define SWIGTYPE_p_svn_auth_baton_t swig_types[30]
-#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[31]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[32]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[33]
-#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[34]
-#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[35]
-#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[36]
-#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[37]
-#define SWIGTYPE_p_svn_auth_provider_t swig_types[38]
-#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[39]
-#define SWIGTYPE_p_svn_checksum_kind_t swig_types[40]
-#define SWIGTYPE_p_svn_commit_info_t swig_types[41]
-#define SWIGTYPE_p_svn_config_t swig_types[42]
-#define SWIGTYPE_p_svn_delta_editor_t swig_types[43]
-#define SWIGTYPE_p_svn_depth_t swig_types[44]
-#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[45]
-#define SWIGTYPE_p_svn_diff_datasource_e swig_types[46]
-#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[47]
-#define SWIGTYPE_p_svn_diff_file_options_t swig_types[48]
-#define SWIGTYPE_p_svn_diff_fns2_t swig_types[49]
-#define SWIGTYPE_p_svn_diff_fns_t swig_types[50]
-#define SWIGTYPE_p_svn_diff_hunk_t swig_types[51]
-#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[52]
-#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[53]
-#define SWIGTYPE_p_svn_diff_t swig_types[54]
-#define SWIGTYPE_p_svn_dirent_t swig_types[55]
-#define SWIGTYPE_p_svn_errno_t swig_types[56]
-#define SWIGTYPE_p_svn_error_t swig_types[57]
-#define SWIGTYPE_p_svn_fs_access_t swig_types[58]
-#define SWIGTYPE_p_svn_fs_dirent_t swig_types[59]
-#define SWIGTYPE_p_svn_fs_history_t swig_types[60]
-#define SWIGTYPE_p_svn_fs_id_t swig_types[61]
-#define SWIGTYPE_p_svn_fs_pack_notify_action_t swig_types[62]
-#define SWIGTYPE_p_svn_fs_path_change2_t swig_types[63]
-#define SWIGTYPE_p_svn_fs_path_change_kind_t swig_types[64]
-#define SWIGTYPE_p_svn_fs_path_change_t swig_types[65]
-#define SWIGTYPE_p_svn_fs_root_t swig_types[66]
-#define SWIGTYPE_p_svn_fs_t swig_types[67]
-#define SWIGTYPE_p_svn_fs_txn_t swig_types[68]
-#define SWIGTYPE_p_svn_io_dirent2_t swig_types[69]
-#define SWIGTYPE_p_svn_io_dirent_t swig_types[70]
-#define SWIGTYPE_p_svn_io_file_del_t swig_types[71]
-#define SWIGTYPE_p_svn_location_segment_t swig_types[72]
-#define SWIGTYPE_p_svn_lock_t swig_types[73]
-#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[74]
-#define SWIGTYPE_p_svn_log_changed_path_t swig_types[75]
-#define SWIGTYPE_p_svn_log_entry_t swig_types[76]
-#define SWIGTYPE_p_svn_merge_range_t swig_types[77]
-#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[78]
-#define SWIGTYPE_p_svn_node_kind_t swig_types[79]
-#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[80]
-#define SWIGTYPE_p_svn_opt_revision_t swig_types[81]
-#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[82]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[83]
-#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[84]
-#define SWIGTYPE_p_svn_patch_file_t swig_types[85]
-#define SWIGTYPE_p_svn_patch_t swig_types[86]
-#define SWIGTYPE_p_svn_prop_kind swig_types[87]
-#define SWIGTYPE_p_svn_prop_patch_t swig_types[88]
-#define SWIGTYPE_p_svn_stream_mark_t swig_types[89]
-#define SWIGTYPE_p_svn_stream_t swig_types[90]
-#define SWIGTYPE_p_svn_string_t swig_types[91]
-#define SWIGTYPE_p_svn_stringbuf_t swig_types[92]
-#define SWIGTYPE_p_svn_tristate_t swig_types[93]
-#define SWIGTYPE_p_svn_txdelta_op_t swig_types[94]
-#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[95]
-#define SWIGTYPE_p_svn_txdelta_window_t swig_types[96]
-#define SWIGTYPE_p_svn_version_checklist_t swig_types[97]
-#define SWIGTYPE_p_svn_version_t swig_types[98]
-#define SWIGTYPE_p_unsigned_char swig_types[99]
-#define SWIGTYPE_p_unsigned_long swig_types[100]
-#define SWIGTYPE_p_void swig_types[101]
-static swig_type_info *swig_types[103];
-static swig_module_info swig_module = {swig_types, 102, 0, 0, 0, 0};
+#define SWIGTYPE_p_f_long_p_void_p_apr_pool_t__void swig_types[6]
+#define SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[7]
+#define SWIGTYPE_p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[8]
+#define SWIGTYPE_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t swig_types[9]
+#define SWIGTYPE_p_f_p_void__p_svn_error_t swig_types[10]
+#define SWIGTYPE_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t swig_types[11]
+#define SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t swig_types[12]
+#define SWIGTYPE_p_f_p_void_p_struct_svn_error_t__void swig_types[13]
+#define SWIGTYPE_p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t swig_types[14]
+#define SWIGTYPE_p_int swig_types[15]
+#define SWIGTYPE_p_long swig_types[16]
+#define SWIGTYPE_p_p_apr_array_header_t swig_types[17]
+#define SWIGTYPE_p_p_apr_hash_t swig_types[18]
+#define SWIGTYPE_p_p_char swig_types[19]
+#define SWIGTYPE_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t swig_types[20]
+#define SWIGTYPE_p_p_svn_checksum_t swig_types[21]
+#define SWIGTYPE_p_p_svn_fs_access_t swig_types[22]
+#define SWIGTYPE_p_p_svn_fs_history_t swig_types[23]
+#define SWIGTYPE_p_p_svn_fs_id_t swig_types[24]
+#define SWIGTYPE_p_p_svn_fs_root_t swig_types[25]
+#define SWIGTYPE_p_p_svn_fs_t swig_types[26]
+#define SWIGTYPE_p_p_svn_fs_txn_t swig_types[27]
+#define SWIGTYPE_p_p_svn_lock_t swig_types[28]
+#define SWIGTYPE_p_p_svn_stream_t swig_types[29]
+#define SWIGTYPE_p_p_svn_string_t swig_types[30]
+#define SWIGTYPE_p_p_svn_txdelta_stream_t swig_types[31]
+#define SWIGTYPE_p_p_void swig_types[32]
+#define SWIGTYPE_p_svn_auth_baton_t swig_types[33]
+#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[34]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[35]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[36]
+#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[37]
+#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[38]
+#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[39]
+#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[40]
+#define SWIGTYPE_p_svn_auth_provider_t swig_types[41]
+#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[42]
+#define SWIGTYPE_p_svn_checksum_ctx_t swig_types[43]
+#define SWIGTYPE_p_svn_checksum_kind_t swig_types[44]
+#define SWIGTYPE_p_svn_checksum_t swig_types[45]
+#define SWIGTYPE_p_svn_commit_info_t swig_types[46]
+#define SWIGTYPE_p_svn_config_t swig_types[47]
+#define SWIGTYPE_p_svn_delta_editor_t swig_types[48]
+#define SWIGTYPE_p_svn_depth_t swig_types[49]
+#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[50]
+#define SWIGTYPE_p_svn_diff_datasource_e swig_types[51]
+#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[52]
+#define SWIGTYPE_p_svn_diff_file_options_t swig_types[53]
+#define SWIGTYPE_p_svn_diff_fns2_t swig_types[54]
+#define SWIGTYPE_p_svn_diff_fns_t swig_types[55]
+#define SWIGTYPE_p_svn_diff_hunk_t swig_types[56]
+#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[57]
+#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[58]
+#define SWIGTYPE_p_svn_diff_t swig_types[59]
+#define SWIGTYPE_p_svn_dirent_t swig_types[60]
+#define SWIGTYPE_p_svn_errno_t swig_types[61]
+#define SWIGTYPE_p_svn_error_t swig_types[62]
+#define SWIGTYPE_p_svn_fs_access_t swig_types[63]
+#define SWIGTYPE_p_svn_fs_dirent_t swig_types[64]
+#define SWIGTYPE_p_svn_fs_history_t swig_types[65]
+#define SWIGTYPE_p_svn_fs_id_t swig_types[66]
+#define SWIGTYPE_p_svn_fs_pack_notify_action_t swig_types[67]
+#define SWIGTYPE_p_svn_fs_path_change2_t swig_types[68]
+#define SWIGTYPE_p_svn_fs_path_change_kind_t swig_types[69]
+#define SWIGTYPE_p_svn_fs_path_change_t swig_types[70]
+#define SWIGTYPE_p_svn_fs_root_t swig_types[71]
+#define SWIGTYPE_p_svn_fs_t swig_types[72]
+#define SWIGTYPE_p_svn_fs_txn_t swig_types[73]
+#define SWIGTYPE_p_svn_io_dirent2_t swig_types[74]
+#define SWIGTYPE_p_svn_io_dirent_t swig_types[75]
+#define SWIGTYPE_p_svn_io_file_del_t swig_types[76]
+#define SWIGTYPE_p_svn_location_segment_t swig_types[77]
+#define SWIGTYPE_p_svn_lock_t swig_types[78]
+#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[79]
+#define SWIGTYPE_p_svn_log_changed_path_t swig_types[80]
+#define SWIGTYPE_p_svn_log_entry_t swig_types[81]
+#define SWIGTYPE_p_svn_merge_range_t swig_types[82]
+#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[83]
+#define SWIGTYPE_p_svn_node_kind_t swig_types[84]
+#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[85]
+#define SWIGTYPE_p_svn_opt_revision_t swig_types[86]
+#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[87]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[88]
+#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[89]
+#define SWIGTYPE_p_svn_patch_file_t swig_types[90]
+#define SWIGTYPE_p_svn_patch_t swig_types[91]
+#define SWIGTYPE_p_svn_prop_inherited_item_t swig_types[92]
+#define SWIGTYPE_p_svn_prop_kind swig_types[93]
+#define SWIGTYPE_p_svn_prop_patch_t swig_types[94]
+#define SWIGTYPE_p_svn_stream_mark_t swig_types[95]
+#define SWIGTYPE_p_svn_stream_t swig_types[96]
+#define SWIGTYPE_p_svn_string_t swig_types[97]
+#define SWIGTYPE_p_svn_stringbuf_t swig_types[98]
+#define SWIGTYPE_p_svn_tristate_t swig_types[99]
+#define SWIGTYPE_p_svn_txdelta_op_t swig_types[100]
+#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[101]
+#define SWIGTYPE_p_svn_txdelta_window_t swig_types[102]
+#define SWIGTYPE_p_svn_version_checklist_t swig_types[103]
+#define SWIGTYPE_p_svn_version_ext_linked_lib_t swig_types[104]
+#define SWIGTYPE_p_svn_version_ext_loaded_lib_t swig_types[105]
+#define SWIGTYPE_p_svn_version_extended_t swig_types[106]
+#define SWIGTYPE_p_svn_version_t swig_types[107]
+#define SWIGTYPE_p_svn_wc_external_item2_t swig_types[108]
+#define SWIGTYPE_p_unsigned_char swig_types[109]
+#define SWIGTYPE_p_unsigned_long swig_types[110]
+#define SWIGTYPE_p_void swig_types[111]
+static swig_type_info *swig_types[113];
+static swig_module_info swig_module = {swig_types, 112, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@@ -1617,7 +1617,7 @@ static swig_module_info swig_module = {swig_types, 102, 0, 0, 0, 0};
#define SWIG_name "SVN::_Fs::boot_SVN___Fs"
#define SWIG_prefix "SVN::_Fs::"
-#define SWIGVERSION 0x020004
+#define SWIGVERSION 0x020009
#define SWIG_VERSION SWIGVERSION
@@ -1809,9 +1809,20 @@ SWIG_CanCastAsInteger(double *d, double min, double max) {
SWIGINTERN int
SWIG_AsVal_long SWIG_PERL_DECL_ARGS_2(SV *obj, long* val)
{
- if (SvIOK(obj)) {
- if (val) *val = SvIV(obj);
- return SWIG_OK;
+ if (SvUOK(obj)) {
+ UV v = SvUV(obj);
+ if (v <= LONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
+ } else if (SvIOK(obj)) {
+ IV v = SvIV(obj);
+ if (v >= LONG_MIN && v <= LONG_MAX) {
+ if(val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
} else {
int dispatch = 0;
const char *nptr = SvPV_nolen(obj);
@@ -1861,10 +1872,13 @@ SWIG_AsVal_int SWIG_PERL_DECL_ARGS_2(SV * obj, int *val)
SWIGINTERNINLINE SV *
SWIG_From_long SWIG_PERL_DECL_ARGS_1(long value)
-{
- SV *obj = sv_newmortal();
- sv_setiv(obj, (IV) value);
- return obj;
+{
+ SV *sv;
+ if (value >= IV_MIN && value <= IV_MAX)
+ sv = newSViv(value);
+ else
+ sv = newSVpvf("%ld", value);
+ return sv_2mortal(sv);
}
@@ -1879,16 +1893,19 @@ SWIGINTERN int
SWIG_AsVal_unsigned_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, unsigned long *val)
{
if (SvUOK(obj)) {
- if (val) *val = SvUV(obj);
- return SWIG_OK;
- } else if (SvIOK(obj)) {
- long v = SvIV(obj);
- if (v >= 0) {
+ UV v = SvUV(obj);
+ if (v <= ULONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
+ } else if (SvIOK(obj)) {
+ IV v = SvIV(obj);
+ if (v >= 0 && v <= ULONG_MAX) {
if (val) *val = v;
return SWIG_OK;
- } else {
- return SWIG_OverflowError;
}
+ return SWIG_OverflowError;
} else {
int dispatch = 0;
const char *nptr = SvPV_nolen(obj);
@@ -1935,9 +1952,20 @@ SWIG_AsVal_unsigned_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, unsigned long *val)
SWIGINTERN int
SWIG_AsVal_long_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, long long *val)
{
- if (SvIOK(obj)) {
- if (val) *val = SvIV(obj);
- return SWIG_OK;
+ if (SvUOK(obj)) {
+ UV v = SvUV(obj);
+ if (v < LLONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
+ } else if (SvIOK(obj)) {
+ IV v = SvIV(obj);
+ if (v >= LLONG_MIN && v <= LLONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
} else {
int dispatch = 0;
const char *nptr = SvPV_nolen(obj);
@@ -1976,6 +2004,21 @@ static void svn_fs_invoke_warning_callback(
_obj(baton, err);
}
+static void svn_fs_invoke_progress_notify_func(
+ svn_fs_progress_notify_func_t _obj, svn_revnum_t revision, void *baton, apr_pool_t *pool) {
+ _obj(revision, baton, pool);
+}
+
+static svn_error_t * svn_fs_invoke_freeze_func(
+ svn_fs_freeze_func_t _obj, void *baton, apr_pool_t *pool) {
+ return _obj(baton, pool);
+}
+
+static svn_error_t * svn_fs_invoke_process_contents_func(
+ svn_fs_process_contents_func_t _obj, const unsigned char *contents, apr_size_t len, void *baton, apr_pool_t *scratch_pool) {
+ return _obj(contents, len, baton, scratch_pool);
+}
+
static svn_error_t * svn_fs_invoke_get_locks_callback(
svn_fs_get_locks_callback_t _obj, void *baton, svn_lock_t *lock, apr_pool_t *pool) {
return _obj(baton, lock, pool);
@@ -2087,55 +2130,6 @@ XS(_wrap_svn_fs_initialize) {
}
-XS(_wrap_svn_fs_set_warning_func) {
- {
- svn_fs_t *arg1 = (svn_fs_t *) 0 ;
- svn_fs_warning_callback_t arg2 = (svn_fs_warning_callback_t) 0 ;
- void *arg3 = (void *) 0 ;
- void *argp1 = 0 ;
- int res1 = 0 ;
- int res3 ;
- int argvi = 0;
- dXSARGS;
-
- if ((items < 3) || (items > 3)) {
- SWIG_croak("Usage: svn_fs_set_warning_func(fs,warning,warning_baton);");
- }
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_t, 0 | 0 );
- if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_set_warning_func" "', argument " "1"" of type '" "svn_fs_t *""'");
- }
- arg1 = (svn_fs_t *)(argp1);
- {
- int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_struct_svn_error_t__void);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_fs_set_warning_func" "', argument " "2"" of type '" "svn_fs_warning_callback_t""'");
- }
- }
- res3 = SWIG_ConvertPtr(ST(2),SWIG_as_voidptrptr(&arg3), 0, 0);
- if (!SWIG_IsOK(res3)) {
- SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_fs_set_warning_func" "', argument " "3"" of type '" "void *""'");
- }
- {
- svn_fs_set_warning_func(arg1,arg2,arg3);
-
-
-
- }
- ST(argvi) = sv_newmortal();
-
-
-
- XSRETURN(argvi);
- fail:
-
-
-
- SWIG_croak_null();
- }
-}
-
-
XS(_wrap_svn_fs_create) {
{
svn_fs_t **arg1 = (svn_fs_t **) 0 ;
@@ -2457,6 +2451,49 @@ XS(_wrap_svn_fs_path) {
}
+XS(_wrap_svn_fs_config) {
+ {
+ svn_fs_t *arg1 = (svn_fs_t *) 0 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ apr_hash_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 1) || (items > 2)) {
+ SWIG_croak("Usage: svn_fs_config(fs,pool);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_config" "', argument " "1"" of type '" "svn_fs_t *""'");
+ }
+ arg1 = (svn_fs_t *)(argp1);
+ if (items > 1) {
+
+ }
+ {
+ result = (apr_hash_t *)svn_fs_config(arg1,arg2);
+
+
+
+ }
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_hash_t, 0 | 0); argvi++ ;
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_fs_delete_fs) {
{
char *arg1 = (char *) 0 ;
@@ -2516,6 +2553,113 @@ XS(_wrap_svn_fs_delete_fs) {
}
+XS(_wrap_svn_fs_hotcopy2) {
+ {
+ char *arg1 = (char *) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ svn_cancel_func_t arg5 = (svn_cancel_func_t) 0 ;
+ void *arg6 = (void *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int val3 ;
+ int ecode3 = 0 ;
+ int val4 ;
+ int ecode4 = 0 ;
+ int res6 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg7 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 6) || (items > 7)) {
+ SWIG_croak("Usage: svn_fs_hotcopy2(src_path,dest_path,clean,incremental,cancel_func,cancel_baton,scratch_pool);");
+ }
+ res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_hotcopy2" "', argument " "1"" of type '" "char const *""'");
+ }
+ arg1 = (char *)(buf1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_fs_hotcopy2" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3);
+ if (!SWIG_IsOK(ecode3)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "svn_fs_hotcopy2" "', argument " "3"" of type '" "svn_boolean_t""'");
+ }
+ arg3 = (svn_boolean_t)(val3);
+ ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_fs_hotcopy2" "', argument " "4"" of type '" "svn_boolean_t""'");
+ }
+ arg4 = (svn_boolean_t)(val4);
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(4), (void**)(&arg5), SWIGTYPE_p_f_p_void__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_fs_hotcopy2" "', argument " "5"" of type '" "svn_cancel_func_t""'");
+ }
+ }
+ res6 = SWIG_ConvertPtr(ST(5),SWIG_as_voidptrptr(&arg6), 0, 0);
+ if (!SWIG_IsOK(res6)) {
+ SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_fs_hotcopy2" "', argument " "6"" of type '" "void *""'");
+ }
+ if (items > 6) {
+
+ }
+ {
+ result = (svn_error_t *)svn_fs_hotcopy2((char const *)arg1,(char const *)arg2,arg3,arg4,arg5,arg6,arg7);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_fs_hotcopy) {
{
char *arg1 = (char *) 0 ;
@@ -2672,6 +2816,81 @@ XS(_wrap_svn_fs_recover) {
}
+XS(_wrap_svn_fs_freeze) {
+ {
+ svn_fs_t *arg1 = (svn_fs_t *) 0 ;
+ svn_fs_freeze_func_t arg2 = (svn_fs_freeze_func_t) 0 ;
+ void *arg3 = (void *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res3 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg4 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 3) || (items > 4)) {
+ SWIG_croak("Usage: svn_fs_freeze(fs,freeze_func,freeze_baton,pool);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_freeze" "', argument " "1"" of type '" "svn_fs_t *""'");
+ }
+ arg1 = (svn_fs_t *)(argp1);
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_fs_freeze" "', argument " "2"" of type '" "svn_fs_freeze_func_t""'");
+ }
+ }
+ res3 = SWIG_ConvertPtr(ST(2),SWIG_as_voidptrptr(&arg3), 0, 0);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_fs_freeze" "', argument " "3"" of type '" "void *""'");
+ }
+ if (items > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_fs_freeze(arg1,arg2,arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_fs_berkeley_logfiles) {
{
apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
@@ -4995,7 +5214,7 @@ XS(_wrap_svn_fs_revision_root_revision) {
XS(_wrap_svn_fs_path_change2_t_node_rev_id_set) {
{
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
svn_fs_id_t *arg2 = (svn_fs_id_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5009,9 +5228,9 @@ XS(_wrap_svn_fs_path_change2_t_node_rev_id_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_node_rev_id_set" "', argument " "1"" of type '" "svn_fs_path_change2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_node_rev_id_set" "', argument " "1"" of type '" "struct svn_fs_path_change2_t *""'");
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_fs_id_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_fs_path_change2_t_node_rev_id_set" "', argument " "2"" of type '" "svn_fs_id_t const *""'");
@@ -5032,7 +5251,7 @@ XS(_wrap_svn_fs_path_change2_t_node_rev_id_set) {
XS(_wrap_svn_fs_path_change2_t_node_rev_id_get) {
{
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5044,9 +5263,9 @@ XS(_wrap_svn_fs_path_change2_t_node_rev_id_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_node_rev_id_get" "', argument " "1"" of type '" "svn_fs_path_change2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_node_rev_id_get" "', argument " "1"" of type '" "struct svn_fs_path_change2_t *""'");
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
result = (svn_fs_id_t *) ((arg1)->node_rev_id);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_fs_id_t, 0 | 0); argvi++ ;
@@ -5060,7 +5279,7 @@ XS(_wrap_svn_fs_path_change2_t_node_rev_id_get) {
XS(_wrap_svn_fs_path_change2_t_change_kind_set) {
{
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
svn_fs_path_change_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5074,9 +5293,9 @@ XS(_wrap_svn_fs_path_change2_t_change_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_change_kind_set" "', argument " "1"" of type '" "svn_fs_path_change2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_change_kind_set" "', argument " "1"" of type '" "struct svn_fs_path_change2_t *""'");
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_fs_path_change2_t_change_kind_set" "', argument " "2"" of type '" "svn_fs_path_change_kind_t""'");
@@ -5097,7 +5316,7 @@ XS(_wrap_svn_fs_path_change2_t_change_kind_set) {
XS(_wrap_svn_fs_path_change2_t_change_kind_get) {
{
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5109,9 +5328,9 @@ XS(_wrap_svn_fs_path_change2_t_change_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_change_kind_get" "', argument " "1"" of type '" "svn_fs_path_change2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_change_kind_get" "', argument " "1"" of type '" "struct svn_fs_path_change2_t *""'");
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
result = (svn_fs_path_change_kind_t) ((arg1)->change_kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -5125,7 +5344,7 @@ XS(_wrap_svn_fs_path_change2_t_change_kind_get) {
XS(_wrap_svn_fs_path_change2_t_text_mod_set) {
{
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5139,9 +5358,9 @@ XS(_wrap_svn_fs_path_change2_t_text_mod_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_text_mod_set" "', argument " "1"" of type '" "svn_fs_path_change2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_text_mod_set" "', argument " "1"" of type '" "struct svn_fs_path_change2_t *""'");
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_fs_path_change2_t_text_mod_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -5162,7 +5381,7 @@ XS(_wrap_svn_fs_path_change2_t_text_mod_set) {
XS(_wrap_svn_fs_path_change2_t_text_mod_get) {
{
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5174,9 +5393,9 @@ XS(_wrap_svn_fs_path_change2_t_text_mod_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_text_mod_get" "', argument " "1"" of type '" "svn_fs_path_change2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_text_mod_get" "', argument " "1"" of type '" "struct svn_fs_path_change2_t *""'");
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
result = (svn_boolean_t) ((arg1)->text_mod);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -5190,7 +5409,7 @@ XS(_wrap_svn_fs_path_change2_t_text_mod_get) {
XS(_wrap_svn_fs_path_change2_t_prop_mod_set) {
{
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5204,9 +5423,9 @@ XS(_wrap_svn_fs_path_change2_t_prop_mod_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_prop_mod_set" "', argument " "1"" of type '" "svn_fs_path_change2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_prop_mod_set" "', argument " "1"" of type '" "struct svn_fs_path_change2_t *""'");
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_fs_path_change2_t_prop_mod_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -5227,7 +5446,7 @@ XS(_wrap_svn_fs_path_change2_t_prop_mod_set) {
XS(_wrap_svn_fs_path_change2_t_prop_mod_get) {
{
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5239,9 +5458,9 @@ XS(_wrap_svn_fs_path_change2_t_prop_mod_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_prop_mod_get" "', argument " "1"" of type '" "svn_fs_path_change2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_prop_mod_get" "', argument " "1"" of type '" "struct svn_fs_path_change2_t *""'");
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
result = (svn_boolean_t) ((arg1)->prop_mod);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -5255,7 +5474,7 @@ XS(_wrap_svn_fs_path_change2_t_prop_mod_get) {
XS(_wrap_svn_fs_path_change2_t_node_kind_set) {
{
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5269,9 +5488,9 @@ XS(_wrap_svn_fs_path_change2_t_node_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_node_kind_set" "', argument " "1"" of type '" "svn_fs_path_change2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_node_kind_set" "', argument " "1"" of type '" "struct svn_fs_path_change2_t *""'");
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_fs_path_change2_t_node_kind_set" "', argument " "2"" of type '" "svn_node_kind_t""'");
@@ -5292,7 +5511,7 @@ XS(_wrap_svn_fs_path_change2_t_node_kind_set) {
XS(_wrap_svn_fs_path_change2_t_node_kind_get) {
{
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5304,9 +5523,9 @@ XS(_wrap_svn_fs_path_change2_t_node_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_node_kind_get" "', argument " "1"" of type '" "svn_fs_path_change2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_node_kind_get" "', argument " "1"" of type '" "struct svn_fs_path_change2_t *""'");
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->node_kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -5320,7 +5539,7 @@ XS(_wrap_svn_fs_path_change2_t_node_kind_get) {
XS(_wrap_svn_fs_path_change2_t_copyfrom_known_set) {
{
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5334,9 +5553,9 @@ XS(_wrap_svn_fs_path_change2_t_copyfrom_known_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_copyfrom_known_set" "', argument " "1"" of type '" "svn_fs_path_change2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_copyfrom_known_set" "', argument " "1"" of type '" "struct svn_fs_path_change2_t *""'");
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_fs_path_change2_t_copyfrom_known_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -5357,7 +5576,7 @@ XS(_wrap_svn_fs_path_change2_t_copyfrom_known_set) {
XS(_wrap_svn_fs_path_change2_t_copyfrom_known_get) {
{
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5369,9 +5588,9 @@ XS(_wrap_svn_fs_path_change2_t_copyfrom_known_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_copyfrom_known_get" "', argument " "1"" of type '" "svn_fs_path_change2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_copyfrom_known_get" "', argument " "1"" of type '" "struct svn_fs_path_change2_t *""'");
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
result = (svn_boolean_t) ((arg1)->copyfrom_known);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -5385,7 +5604,7 @@ XS(_wrap_svn_fs_path_change2_t_copyfrom_known_get) {
XS(_wrap_svn_fs_path_change2_t_copyfrom_rev_set) {
{
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5399,9 +5618,9 @@ XS(_wrap_svn_fs_path_change2_t_copyfrom_rev_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_copyfrom_rev_set" "', argument " "1"" of type '" "svn_fs_path_change2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_copyfrom_rev_set" "', argument " "1"" of type '" "struct svn_fs_path_change2_t *""'");
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_fs_path_change2_t_copyfrom_rev_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -5422,7 +5641,7 @@ XS(_wrap_svn_fs_path_change2_t_copyfrom_rev_set) {
XS(_wrap_svn_fs_path_change2_t_copyfrom_rev_get) {
{
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5434,9 +5653,9 @@ XS(_wrap_svn_fs_path_change2_t_copyfrom_rev_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_copyfrom_rev_get" "', argument " "1"" of type '" "svn_fs_path_change2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_copyfrom_rev_get" "', argument " "1"" of type '" "struct svn_fs_path_change2_t *""'");
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
result = (svn_revnum_t) ((arg1)->copyfrom_rev);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -5450,7 +5669,7 @@ XS(_wrap_svn_fs_path_change2_t_copyfrom_rev_get) {
XS(_wrap_svn_fs_path_change2_t_copyfrom_path_set) {
{
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5465,9 +5684,9 @@ XS(_wrap_svn_fs_path_change2_t_copyfrom_path_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_copyfrom_path_set" "', argument " "1"" of type '" "svn_fs_path_change2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_copyfrom_path_set" "', argument " "1"" of type '" "struct svn_fs_path_change2_t *""'");
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_fs_path_change2_t_copyfrom_path_set" "', argument " "2"" of type '" "char const *""'");
@@ -5493,7 +5712,7 @@ XS(_wrap_svn_fs_path_change2_t_copyfrom_path_set) {
XS(_wrap_svn_fs_path_change2_t_copyfrom_path_get) {
{
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5505,9 +5724,9 @@ XS(_wrap_svn_fs_path_change2_t_copyfrom_path_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_copyfrom_path_get" "', argument " "1"" of type '" "svn_fs_path_change2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change2_t_copyfrom_path_get" "', argument " "1"" of type '" "struct svn_fs_path_change2_t *""'");
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
result = (char *) ((arg1)->copyfrom_path);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -5521,7 +5740,7 @@ XS(_wrap_svn_fs_path_change2_t_copyfrom_path_get) {
XS(_wrap_svn_fs_path_change_t_node_rev_id_set) {
{
- svn_fs_path_change_t *arg1 = (svn_fs_path_change_t *) 0 ;
+ struct svn_fs_path_change_t *arg1 = (struct svn_fs_path_change_t *) 0 ;
svn_fs_id_t *arg2 = (svn_fs_id_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5535,9 +5754,9 @@ XS(_wrap_svn_fs_path_change_t_node_rev_id_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_path_change_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change_t_node_rev_id_set" "', argument " "1"" of type '" "svn_fs_path_change_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change_t_node_rev_id_set" "', argument " "1"" of type '" "struct svn_fs_path_change_t *""'");
}
- arg1 = (svn_fs_path_change_t *)(argp1);
+ arg1 = (struct svn_fs_path_change_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_fs_id_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_fs_path_change_t_node_rev_id_set" "', argument " "2"" of type '" "svn_fs_id_t const *""'");
@@ -5558,7 +5777,7 @@ XS(_wrap_svn_fs_path_change_t_node_rev_id_set) {
XS(_wrap_svn_fs_path_change_t_node_rev_id_get) {
{
- svn_fs_path_change_t *arg1 = (svn_fs_path_change_t *) 0 ;
+ struct svn_fs_path_change_t *arg1 = (struct svn_fs_path_change_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5570,9 +5789,9 @@ XS(_wrap_svn_fs_path_change_t_node_rev_id_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_path_change_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change_t_node_rev_id_get" "', argument " "1"" of type '" "svn_fs_path_change_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change_t_node_rev_id_get" "', argument " "1"" of type '" "struct svn_fs_path_change_t *""'");
}
- arg1 = (svn_fs_path_change_t *)(argp1);
+ arg1 = (struct svn_fs_path_change_t *)(argp1);
result = (svn_fs_id_t *) ((arg1)->node_rev_id);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_fs_id_t, 0 | 0); argvi++ ;
@@ -5586,7 +5805,7 @@ XS(_wrap_svn_fs_path_change_t_node_rev_id_get) {
XS(_wrap_svn_fs_path_change_t_change_kind_set) {
{
- svn_fs_path_change_t *arg1 = (svn_fs_path_change_t *) 0 ;
+ struct svn_fs_path_change_t *arg1 = (struct svn_fs_path_change_t *) 0 ;
svn_fs_path_change_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5600,9 +5819,9 @@ XS(_wrap_svn_fs_path_change_t_change_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_path_change_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change_t_change_kind_set" "', argument " "1"" of type '" "svn_fs_path_change_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change_t_change_kind_set" "', argument " "1"" of type '" "struct svn_fs_path_change_t *""'");
}
- arg1 = (svn_fs_path_change_t *)(argp1);
+ arg1 = (struct svn_fs_path_change_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_fs_path_change_t_change_kind_set" "', argument " "2"" of type '" "svn_fs_path_change_kind_t""'");
@@ -5623,7 +5842,7 @@ XS(_wrap_svn_fs_path_change_t_change_kind_set) {
XS(_wrap_svn_fs_path_change_t_change_kind_get) {
{
- svn_fs_path_change_t *arg1 = (svn_fs_path_change_t *) 0 ;
+ struct svn_fs_path_change_t *arg1 = (struct svn_fs_path_change_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5635,9 +5854,9 @@ XS(_wrap_svn_fs_path_change_t_change_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_path_change_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change_t_change_kind_get" "', argument " "1"" of type '" "svn_fs_path_change_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change_t_change_kind_get" "', argument " "1"" of type '" "struct svn_fs_path_change_t *""'");
}
- arg1 = (svn_fs_path_change_t *)(argp1);
+ arg1 = (struct svn_fs_path_change_t *)(argp1);
result = (svn_fs_path_change_kind_t) ((arg1)->change_kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -5651,7 +5870,7 @@ XS(_wrap_svn_fs_path_change_t_change_kind_get) {
XS(_wrap_svn_fs_path_change_t_text_mod_set) {
{
- svn_fs_path_change_t *arg1 = (svn_fs_path_change_t *) 0 ;
+ struct svn_fs_path_change_t *arg1 = (struct svn_fs_path_change_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5665,9 +5884,9 @@ XS(_wrap_svn_fs_path_change_t_text_mod_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_path_change_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change_t_text_mod_set" "', argument " "1"" of type '" "svn_fs_path_change_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change_t_text_mod_set" "', argument " "1"" of type '" "struct svn_fs_path_change_t *""'");
}
- arg1 = (svn_fs_path_change_t *)(argp1);
+ arg1 = (struct svn_fs_path_change_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_fs_path_change_t_text_mod_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -5688,7 +5907,7 @@ XS(_wrap_svn_fs_path_change_t_text_mod_set) {
XS(_wrap_svn_fs_path_change_t_text_mod_get) {
{
- svn_fs_path_change_t *arg1 = (svn_fs_path_change_t *) 0 ;
+ struct svn_fs_path_change_t *arg1 = (struct svn_fs_path_change_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5700,9 +5919,9 @@ XS(_wrap_svn_fs_path_change_t_text_mod_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_path_change_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change_t_text_mod_get" "', argument " "1"" of type '" "svn_fs_path_change_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change_t_text_mod_get" "', argument " "1"" of type '" "struct svn_fs_path_change_t *""'");
}
- arg1 = (svn_fs_path_change_t *)(argp1);
+ arg1 = (struct svn_fs_path_change_t *)(argp1);
result = (svn_boolean_t) ((arg1)->text_mod);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -5716,7 +5935,7 @@ XS(_wrap_svn_fs_path_change_t_text_mod_get) {
XS(_wrap_svn_fs_path_change_t_prop_mod_set) {
{
- svn_fs_path_change_t *arg1 = (svn_fs_path_change_t *) 0 ;
+ struct svn_fs_path_change_t *arg1 = (struct svn_fs_path_change_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5730,9 +5949,9 @@ XS(_wrap_svn_fs_path_change_t_prop_mod_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_path_change_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change_t_prop_mod_set" "', argument " "1"" of type '" "svn_fs_path_change_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change_t_prop_mod_set" "', argument " "1"" of type '" "struct svn_fs_path_change_t *""'");
}
- arg1 = (svn_fs_path_change_t *)(argp1);
+ arg1 = (struct svn_fs_path_change_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_fs_path_change_t_prop_mod_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -5753,7 +5972,7 @@ XS(_wrap_svn_fs_path_change_t_prop_mod_set) {
XS(_wrap_svn_fs_path_change_t_prop_mod_get) {
{
- svn_fs_path_change_t *arg1 = (svn_fs_path_change_t *) 0 ;
+ struct svn_fs_path_change_t *arg1 = (struct svn_fs_path_change_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5765,9 +5984,9 @@ XS(_wrap_svn_fs_path_change_t_prop_mod_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_path_change_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change_t_prop_mod_get" "', argument " "1"" of type '" "svn_fs_path_change_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_path_change_t_prop_mod_get" "', argument " "1"" of type '" "struct svn_fs_path_change_t *""'");
}
- arg1 = (svn_fs_path_change_t *)(argp1);
+ arg1 = (struct svn_fs_path_change_t *)(argp1);
result = (svn_boolean_t) ((arg1)->prop_mod);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -7308,6 +7527,124 @@ XS(_wrap_svn_fs_closest_copy) {
}
+XS(_wrap_svn_fs_get_mergeinfo2) {
+ {
+ svn_mergeinfo_catalog_t *arg1 = (svn_mergeinfo_catalog_t *) 0 ;
+ svn_fs_root_t *arg2 = (svn_fs_root_t *) 0 ;
+ apr_array_header_t *arg3 = (apr_array_header_t *) 0 ;
+ svn_mergeinfo_inheritance_t arg4 ;
+ svn_boolean_t arg5 ;
+ svn_boolean_t arg6 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg8 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_mergeinfo_catalog_t temp1 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ int val4 ;
+ int ecode4 = 0 ;
+ int val5 ;
+ int ecode5 = 0 ;
+ int val6 ;
+ int ecode6 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg7 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ {
+ _global_pool = arg8 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ if ((items < 5) || (items > 7)) {
+ SWIG_croak("Usage: svn_fs_get_mergeinfo2(root,paths,inherit,include_descendants,adjust_inherited_mergeinfo,result_pool,scratch_pool);");
+ }
+ res2 = SWIG_ConvertPtr(ST(0), &argp2,SWIGTYPE_p_svn_fs_root_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_fs_get_mergeinfo2" "', argument " "2"" of type '" "svn_fs_root_t *""'");
+ }
+ arg2 = (svn_fs_root_t *)(argp2);
+ {
+ arg3 = (apr_array_header_t *) svn_swig_pl_strings_to_array(ST(1),
+ _global_pool);
+ }
+ ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_fs_get_mergeinfo2" "', argument " "4"" of type '" "svn_mergeinfo_inheritance_t""'");
+ }
+ arg4 = (svn_mergeinfo_inheritance_t)(val4);
+ ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val5);
+ if (!SWIG_IsOK(ecode5)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_fs_get_mergeinfo2" "', argument " "5"" of type '" "svn_boolean_t""'");
+ }
+ arg5 = (svn_boolean_t)(val5);
+ ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val6);
+ if (!SWIG_IsOK(ecode6)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_fs_get_mergeinfo2" "', argument " "6"" of type '" "svn_boolean_t""'");
+ }
+ arg6 = (svn_boolean_t)(val6);
+ if (items > 5) {
+
+ }
+ if (items > 6) {
+
+ }
+ {
+ result = (svn_error_t *)svn_fs_get_mergeinfo2(arg1,arg2,(apr_array_header_t const *)arg3,arg4,arg5,arg6,arg7,arg8);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ /* FIXME: Missing argout typemap: svn_fs_get_mergeinfo2 arg 1 (svn_mergeinfo_catalog_t *) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_fs_get_mergeinfo2 is not implemented yet");
+
+ }
+
+
+
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_fs_get_mergeinfo) {
{
svn_mergeinfo_catalog_t *arg1 = (svn_mergeinfo_catalog_t *) 0 ;
@@ -7532,7 +7869,7 @@ XS(_wrap_svn_fs_merge) {
XS(_wrap_svn_fs_dirent_t_name_set) {
{
- svn_fs_dirent_t *arg1 = (svn_fs_dirent_t *) 0 ;
+ struct svn_fs_dirent_t *arg1 = (struct svn_fs_dirent_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7547,9 +7884,9 @@ XS(_wrap_svn_fs_dirent_t_name_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_dirent_t_name_set" "', argument " "1"" of type '" "svn_fs_dirent_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_dirent_t_name_set" "', argument " "1"" of type '" "struct svn_fs_dirent_t *""'");
}
- arg1 = (svn_fs_dirent_t *)(argp1);
+ arg1 = (struct svn_fs_dirent_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_fs_dirent_t_name_set" "', argument " "2"" of type '" "char const *""'");
@@ -7577,7 +7914,7 @@ XS(_wrap_svn_fs_dirent_t_name_set) {
XS(_wrap_svn_fs_dirent_t_name_get) {
{
- svn_fs_dirent_t *arg1 = (svn_fs_dirent_t *) 0 ;
+ struct svn_fs_dirent_t *arg1 = (struct svn_fs_dirent_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -7589,9 +7926,9 @@ XS(_wrap_svn_fs_dirent_t_name_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_dirent_t_name_get" "', argument " "1"" of type '" "svn_fs_dirent_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_dirent_t_name_get" "', argument " "1"" of type '" "struct svn_fs_dirent_t *""'");
}
- arg1 = (svn_fs_dirent_t *)(argp1);
+ arg1 = (struct svn_fs_dirent_t *)(argp1);
result = (char *) ((arg1)->name);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -7605,7 +7942,7 @@ XS(_wrap_svn_fs_dirent_t_name_get) {
XS(_wrap_svn_fs_dirent_t_id_set) {
{
- svn_fs_dirent_t *arg1 = (svn_fs_dirent_t *) 0 ;
+ struct svn_fs_dirent_t *arg1 = (struct svn_fs_dirent_t *) 0 ;
svn_fs_id_t *arg2 = (svn_fs_id_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7619,9 +7956,9 @@ XS(_wrap_svn_fs_dirent_t_id_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_dirent_t_id_set" "', argument " "1"" of type '" "svn_fs_dirent_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_dirent_t_id_set" "', argument " "1"" of type '" "struct svn_fs_dirent_t *""'");
}
- arg1 = (svn_fs_dirent_t *)(argp1);
+ arg1 = (struct svn_fs_dirent_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_fs_id_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_fs_dirent_t_id_set" "', argument " "2"" of type '" "svn_fs_id_t const *""'");
@@ -7642,7 +7979,7 @@ XS(_wrap_svn_fs_dirent_t_id_set) {
XS(_wrap_svn_fs_dirent_t_id_get) {
{
- svn_fs_dirent_t *arg1 = (svn_fs_dirent_t *) 0 ;
+ struct svn_fs_dirent_t *arg1 = (struct svn_fs_dirent_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -7654,9 +7991,9 @@ XS(_wrap_svn_fs_dirent_t_id_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_dirent_t_id_get" "', argument " "1"" of type '" "svn_fs_dirent_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_dirent_t_id_get" "', argument " "1"" of type '" "struct svn_fs_dirent_t *""'");
}
- arg1 = (svn_fs_dirent_t *)(argp1);
+ arg1 = (struct svn_fs_dirent_t *)(argp1);
result = (svn_fs_id_t *) ((arg1)->id);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_fs_id_t, 0 | 0); argvi++ ;
@@ -7670,7 +8007,7 @@ XS(_wrap_svn_fs_dirent_t_id_get) {
XS(_wrap_svn_fs_dirent_t_kind_set) {
{
- svn_fs_dirent_t *arg1 = (svn_fs_dirent_t *) 0 ;
+ struct svn_fs_dirent_t *arg1 = (struct svn_fs_dirent_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7684,9 +8021,9 @@ XS(_wrap_svn_fs_dirent_t_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_dirent_t_kind_set" "', argument " "1"" of type '" "svn_fs_dirent_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_dirent_t_kind_set" "', argument " "1"" of type '" "struct svn_fs_dirent_t *""'");
}
- arg1 = (svn_fs_dirent_t *)(argp1);
+ arg1 = (struct svn_fs_dirent_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_fs_dirent_t_kind_set" "', argument " "2"" of type '" "svn_node_kind_t""'");
@@ -7707,7 +8044,7 @@ XS(_wrap_svn_fs_dirent_t_kind_set) {
XS(_wrap_svn_fs_dirent_t_kind_get) {
{
- svn_fs_dirent_t *arg1 = (svn_fs_dirent_t *) 0 ;
+ struct svn_fs_dirent_t *arg1 = (struct svn_fs_dirent_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -7719,9 +8056,9 @@ XS(_wrap_svn_fs_dirent_t_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_dirent_t_kind_get" "', argument " "1"" of type '" "svn_fs_dirent_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_dirent_t_kind_get" "', argument " "1"" of type '" "struct svn_fs_dirent_t *""'");
}
- arg1 = (svn_fs_dirent_t *)(argp1);
+ arg1 = (struct svn_fs_dirent_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -8206,8 +8543,8 @@ XS(_wrap_svn_fs_file_checksum) {
apr_pool_t *arg6 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool ;
svn_checksum_t *temp1 ;
- void *argp2 ;
- int res2 = 0 ;
+ int val2 ;
+ int ecode2 = 0 ;
void *argp3 = 0 ;
int res3 = 0 ;
int res4 ;
@@ -8226,17 +8563,11 @@ XS(_wrap_svn_fs_file_checksum) {
if ((items < 4) || (items > 5)) {
SWIG_croak("Usage: svn_fs_file_checksum(kind,root,path,force,pool);");
}
- {
- res2 = SWIG_ConvertPtr(ST(0), &argp2, SWIGTYPE_p_svn_checksum_kind_t, 0 );
- if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_fs_file_checksum" "', argument " "2"" of type '" "svn_checksum_kind_t""'");
- }
- if (!argp2) {
- SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "svn_fs_file_checksum" "', argument " "2"" of type '" "svn_checksum_kind_t""'");
- } else {
- arg2 = *((svn_checksum_kind_t *)(argp2));
- }
- }
+ ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_fs_file_checksum" "', argument " "2"" of type '" "svn_checksum_kind_t""'");
+ }
+ arg2 = (svn_checksum_kind_t)(val2);
res3 = SWIG_ConvertPtr(ST(1), &argp3,SWIGTYPE_p_svn_fs_root_t, 0 | 0 );
if (!SWIG_IsOK(res3)) {
SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_fs_file_checksum" "', argument " "3"" of type '" "svn_fs_root_t *""'");
@@ -8288,6 +8619,7 @@ XS(_wrap_svn_fs_file_checksum) {
}
+
if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
@@ -8295,6 +8627,7 @@ XS(_wrap_svn_fs_file_checksum) {
fail:
+
if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
@@ -8363,7 +8696,7 @@ XS(_wrap_svn_fs_file_md5_checksum) {
}
}
{
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,59,%append_output@*/ if (argvi >= items) EXTEND(sp,1); /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,56,%set_output@*/ ST(argvi) = sv_2mortal(newSVpv(svn_md5_digest_to_cstring(arg1,
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,59,%append_output@*/ if (argvi >= items) EXTEND(sp,1); /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,56,%set_output@*/ ST(argvi) = sv_2mortal(newSVpv(svn_md5_digest_to_cstring(arg1,
_global_pool),
0)); argvi++ /*@SWIG@*/
@@ -8463,6 +8796,104 @@ XS(_wrap_svn_fs_file_contents) {
}
+XS(_wrap_svn_fs_try_process_file_contents) {
+ {
+ svn_boolean_t *arg1 = (svn_boolean_t *) 0 ;
+ svn_fs_root_t *arg2 = (svn_fs_root_t *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_fs_process_contents_func_t arg4 = (svn_fs_process_contents_func_t) 0 ;
+ void *arg5 = (void *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_boolean_t temp1 ;
+ int res1 = SWIG_TMPOBJ ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int res5 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg6 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ if ((items < 4) || (items > 5)) {
+ SWIG_croak("Usage: svn_fs_try_process_file_contents(root,path,processor,baton,pool);");
+ }
+ res2 = SWIG_ConvertPtr(ST(0), &argp2,SWIGTYPE_p_svn_fs_root_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_fs_try_process_file_contents" "', argument " "2"" of type '" "svn_fs_root_t *""'");
+ }
+ arg2 = (svn_fs_root_t *)(argp2);
+ res3 = SWIG_AsCharPtrAndSize(ST(1), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_fs_try_process_file_contents" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = (char *)(buf3);
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(2), (void**)(&arg4), SWIGTYPE_p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_fs_try_process_file_contents" "', argument " "4"" of type '" "svn_fs_process_contents_func_t""'");
+ }
+ }
+ res5 = SWIG_ConvertPtr(ST(3),SWIG_as_voidptrptr(&arg5), 0, 0);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_fs_try_process_file_contents" "', argument " "5"" of type '" "void *""'");
+ }
+ if (items > 4) {
+
+ }
+ {
+ result = (svn_error_t *)svn_fs_try_process_file_contents(arg1,arg2,(char const *)arg3,arg4,arg5,arg6);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ if (SWIG_IsTmpObj(res1)) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg1)); argvi++ ;
+ } else {
+ int new_flags = SWIG_IsNewObj(res1) ? (SWIG_POINTER_OWN | 0) : 0;
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_int, new_flags); argvi++ ;
+ }
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_fs_make_file) {
{
svn_fs_root_t *arg1 = (svn_fs_root_t *) 0 ;
@@ -10292,6 +10723,184 @@ XS(_wrap_svn_fs_pack) {
}
+XS(_wrap_svn_fs_verify) {
+ {
+ char *arg1 = (char *) 0 ;
+ apr_hash_t *arg2 = (apr_hash_t *) 0 ;
+ svn_revnum_t arg3 ;
+ svn_revnum_t arg4 ;
+ svn_fs_progress_notify_func_t arg5 = (svn_fs_progress_notify_func_t) 0 ;
+ void *arg6 = (void *) 0 ;
+ svn_cancel_func_t arg7 = (svn_cancel_func_t) 0 ;
+ void *arg8 = (void *) 0 ;
+ apr_pool_t *arg9 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ long val3 ;
+ int ecode3 = 0 ;
+ long val4 ;
+ int ecode4 = 0 ;
+ int res6 ;
+ int res8 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg9 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 8) || (items > 9)) {
+ SWIG_croak("Usage: svn_fs_verify(path,fs_config,start,end,notify_func,notify_baton,cancel_func,cancel_baton,scratch_pool);");
+ }
+ res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_verify" "', argument " "1"" of type '" "char const *""'");
+ }
+ arg1 = (char *)(buf1);
+ {
+ /* PERL-FIXME: Handle undef -> NULL. */
+ arg2 = svn_swig_pl_strings_to_hash(ST(1), _global_pool);
+ }
+ ecode3 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(2), &val3);
+ if (!SWIG_IsOK(ecode3)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "svn_fs_verify" "', argument " "3"" of type '" "svn_revnum_t""'");
+ }
+ arg3 = (svn_revnum_t)(val3);
+ ecode4 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(3), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_fs_verify" "', argument " "4"" of type '" "svn_revnum_t""'");
+ }
+ arg4 = (svn_revnum_t)(val4);
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(4), (void**)(&arg5), SWIGTYPE_p_f_long_p_void_p_apr_pool_t__void);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_fs_verify" "', argument " "5"" of type '" "svn_fs_progress_notify_func_t""'");
+ }
+ }
+ res6 = SWIG_ConvertPtr(ST(5),SWIG_as_voidptrptr(&arg6), 0, 0);
+ if (!SWIG_IsOK(res6)) {
+ SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_fs_verify" "', argument " "6"" of type '" "void *""'");
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(6), (void**)(&arg7), SWIGTYPE_p_f_p_void__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_fs_verify" "', argument " "7"" of type '" "svn_cancel_func_t""'");
+ }
+ }
+ res8 = SWIG_ConvertPtr(ST(7),SWIG_as_voidptrptr(&arg8), 0, 0);
+ if (!SWIG_IsOK(res8)) {
+ SWIG_exception_fail(SWIG_ArgError(res8), "in method '" "svn_fs_verify" "', argument " "8"" of type '" "void *""'");
+ }
+ if (items > 8) {
+
+ }
+ {
+ result = (svn_error_t *)svn_fs_verify((char const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+
+
+
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+
+
+
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_fs_verify_root) {
+ {
+ svn_fs_root_t *arg1 = (svn_fs_root_t *) 0 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 1) || (items > 2)) {
+ SWIG_croak("Usage: svn_fs_verify_root(root,scratch_pool);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_fs_root_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_fs_verify_root" "', argument " "1"" of type '" "svn_fs_root_t *""'");
+ }
+ arg1 = (svn_fs_root_t *)(argp1);
+ if (items > 1) {
+
+ }
+ {
+ result = (svn_error_t *)svn_fs_verify_root(arg1,arg2);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_fs_invoke_warning_callback) {
{
svn_fs_warning_callback_t arg1 = (svn_fs_warning_callback_t) 0 ;
@@ -10341,6 +10950,215 @@ XS(_wrap_svn_fs_invoke_warning_callback) {
}
+XS(_wrap_svn_fs_invoke_progress_notify_func) {
+ {
+ svn_fs_progress_notify_func_t arg1 = (svn_fs_progress_notify_func_t) 0 ;
+ svn_revnum_t arg2 ;
+ void *arg3 = (void *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ long val2 ;
+ int ecode2 = 0 ;
+ int res3 ;
+ int argvi = 0;
+ dXSARGS;
+
+ {
+ _global_pool = arg4 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 3) || (items > 4)) {
+ SWIG_croak("Usage: svn_fs_invoke_progress_notify_func(_obj,revision,baton,pool);");
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(0), (void**)(&arg1), SWIGTYPE_p_f_long_p_void_p_apr_pool_t__void);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_fs_invoke_progress_notify_func" "', argument " "1"" of type '" "svn_fs_progress_notify_func_t""'");
+ }
+ }
+ ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_fs_invoke_progress_notify_func" "', argument " "2"" of type '" "svn_revnum_t""'");
+ }
+ arg2 = (svn_revnum_t)(val2);
+ res3 = SWIG_ConvertPtr(ST(2),SWIG_as_voidptrptr(&arg3), 0, 0);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_fs_invoke_progress_notify_func" "', argument " "3"" of type '" "void *""'");
+ }
+ if (items > 3) {
+
+ }
+ {
+ svn_fs_invoke_progress_notify_func(arg1,arg2,arg3,arg4);
+
+
+
+ }
+ ST(argvi) = sv_newmortal();
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_fs_invoke_freeze_func) {
+ {
+ svn_fs_freeze_func_t arg1 = (svn_fs_freeze_func_t) 0 ;
+ void *arg2 = (void *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int res2 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg3 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 2) || (items > 3)) {
+ SWIG_croak("Usage: svn_fs_invoke_freeze_func(_obj,baton,pool);");
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(0), (void**)(&arg1), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_fs_invoke_freeze_func" "', argument " "1"" of type '" "svn_fs_freeze_func_t""'");
+ }
+ }
+ res2 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_fs_invoke_freeze_func" "', argument " "2"" of type '" "void *""'");
+ }
+ if (items > 2) {
+
+ }
+ {
+ result = (svn_error_t *)svn_fs_invoke_freeze_func(arg1,arg2,arg3);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_fs_invoke_process_contents_func) {
+ {
+ svn_fs_process_contents_func_t arg1 = (svn_fs_process_contents_func_t) 0 ;
+ unsigned char *arg2 = (unsigned char *) 0 ;
+ apr_size_t arg3 ;
+ void *arg4 = (void *) 0 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ unsigned long val3 ;
+ int ecode3 = 0 ;
+ int res4 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg5 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 4) || (items > 5)) {
+ SWIG_croak("Usage: svn_fs_invoke_process_contents_func(_obj,contents,len,baton,scratch_pool);");
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(0), (void**)(&arg1), SWIGTYPE_p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_fs_invoke_process_contents_func" "', argument " "1"" of type '" "svn_fs_process_contents_func_t""'");
+ }
+ }
+ res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_unsigned_char, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_fs_invoke_process_contents_func" "', argument " "2"" of type '" "unsigned char const *""'");
+ }
+ arg2 = (unsigned char *)(argp2);
+ ecode3 = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(ST(2), &val3);
+ if (!SWIG_IsOK(ecode3)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "svn_fs_invoke_process_contents_func" "', argument " "3"" of type '" "apr_size_t""'");
+ }
+ arg3 = (apr_size_t)(val3);
+ res4 = SWIG_ConvertPtr(ST(3),SWIG_as_voidptrptr(&arg4), 0, 0);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_fs_invoke_process_contents_func" "', argument " "4"" of type '" "void *""'");
+ }
+ if (items > 4) {
+
+ }
+ {
+ result = (svn_error_t *)svn_fs_invoke_process_contents_func(arg1,(unsigned char const *)arg2,arg3,arg4,arg5);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_fs_invoke_get_locks_callback) {
{
svn_fs_get_locks_callback_t arg1 = (svn_fs_get_locks_callback_t) 0 ;
@@ -10504,16 +11322,19 @@ XS(_wrap_svn_fs_invoke_pack_notify) {
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
-static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *|svn_rangelist_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_hash_t = {"_p_apr_hash_t", "apr_hash_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int32_t = {"_p_apr_int32_t", "apr_int32_t *|time_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int64_t = {"_p_apr_int64_t", "apr_int64_t *|svn_filesize_t *|apr_time_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_pool_t = {"_p_apr_pool_t", "apr_pool_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_long_p_void_p_apr_pool_t__void = {"_p_f_long_p_void_p_apr_pool_t__void", "void (*)(long,void *,apr_pool_t *)|svn_fs_progress_notify_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_opt_subcommand_t *|struct svn_error_t *(*)(apr_getopt_t *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_fs_process_contents_func_t|struct svn_error_t *(*)(unsigned char const *,apr_size_t,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t = {"_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t", "struct svn_error_t *(*)(svn_txdelta_window_t *,void *)|svn_txdelta_window_handler_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void__p_svn_error_t = {"_p_f_p_void__p_svn_error_t", "svn_cancel_func_t|struct svn_error_t *(*)(void *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,apr_int64_t,svn_fs_pack_notify_action_t,apr_pool_t *)|svn_fs_pack_notify_t", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,apr_pool_t *)|svn_fs_freeze_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_struct_svn_error_t__void = {"_p_f_p_void_p_struct_svn_error_t__void", "void (*)(void *,struct svn_error_t *)|svn_fs_warning_callback_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,svn_lock_t *,apr_pool_t *)|svn_fs_get_locks_callback_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_int = {"_p_int", "int *|svn_boolean_t *|apr_status_t *", 0, 0, (void*)0, 0};
@@ -10522,7 +11343,7 @@ static swig_type_info _swigt__p_p_apr_array_header_t = {"_p_p_apr_array_header_t
static swig_type_info _swigt__p_p_apr_hash_t = {"_p_p_apr_hash_t", "apr_hash_t **|svn_mergeinfo_catalog_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t = {"_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t", "svn_txdelta_window_handler_t *|struct svn_error_t *(**)(svn_txdelta_window_t *,void *)", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_p_svn_checksum_t = {"_p_p_svn_checksum_t", "svn_checksum_t **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_svn_checksum_t = {"_p_p_svn_checksum_t", "struct svn_checksum_t **|svn_checksum_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_fs_access_t = {"_p_p_svn_fs_access_t", "struct svn_fs_access_t **|svn_fs_access_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_fs_history_t = {"_p_p_svn_fs_history_t", "struct svn_fs_history_t **|svn_fs_history_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_fs_id_t = {"_p_p_svn_fs_id_t", "struct svn_fs_id_t **|svn_fs_id_t **", 0, 0, (void*)0, 0};
@@ -10544,7 +11365,9 @@ static swig_type_info _swigt__p_svn_auth_iterstate_t = {"_p_svn_auth_iterstate_t
static swig_type_info _swigt__p_svn_auth_provider_object_t = {"_p_svn_auth_provider_object_t", "struct svn_auth_provider_object_t *|svn_auth_provider_object_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_provider_t = {"_p_svn_auth_provider_t", "struct svn_auth_provider_t *|svn_auth_provider_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_ssl_server_cert_info_t = {"_p_svn_auth_ssl_server_cert_info_t", "struct svn_auth_ssl_server_cert_info_t *|svn_auth_ssl_server_cert_info_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_ctx_t = {"_p_svn_checksum_ctx_t", "struct svn_checksum_ctx_t *|svn_checksum_ctx_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "enum svn_checksum_kind_t *|svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "struct svn_checksum_t *|svn_checksum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_commit_info_t = {"_p_svn_commit_info_t", "struct svn_commit_info_t *|svn_commit_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_config_t = {"_p_svn_config_t", "struct svn_config_t *|svn_config_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_delta_editor_t = {"_p_svn_delta_editor_t", "struct svn_delta_editor_t *|svn_delta_editor_t *", 0, 0, (void*)0, 0};
@@ -10591,6 +11414,7 @@ static swig_type_info _swigt__p_svn_opt_subcommand_desc2_t = {"_p_svn_opt_subcom
static swig_type_info _swigt__p_svn_opt_subcommand_desc_t = {"_p_svn_opt_subcommand_desc_t", "struct svn_opt_subcommand_desc_t *|svn_opt_subcommand_desc_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_file_t = {"_p_svn_patch_file_t", "struct svn_patch_file_t *|svn_patch_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_t = {"_p_svn_patch_t", "struct svn_patch_t *|svn_patch_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_prop_inherited_item_t = {"_p_svn_prop_inherited_item_t", "struct svn_prop_inherited_item_t *|svn_prop_inherited_item_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_kind = {"_p_svn_prop_kind", "svn_prop_kind_t *|enum svn_prop_kind *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_patch_t = {"_p_svn_prop_patch_t", "struct svn_prop_patch_t *|svn_prop_patch_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_stream_mark_t = {"_p_svn_stream_mark_t", "struct svn_stream_mark_t *|svn_stream_mark_t *", 0, 0, (void*)0, 0};
@@ -10602,7 +11426,11 @@ static swig_type_info _swigt__p_svn_txdelta_op_t = {"_p_svn_txdelta_op_t", "stru
static swig_type_info _swigt__p_svn_txdelta_stream_t = {"_p_svn_txdelta_stream_t", "struct svn_txdelta_stream_t *|svn_txdelta_stream_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_txdelta_window_t = {"_p_svn_txdelta_window_t", "struct svn_txdelta_window_t *|svn_txdelta_window_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_checklist_t = {"_p_svn_version_checklist_t", "struct svn_version_checklist_t *|svn_version_checklist_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_linked_lib_t = {"_p_svn_version_ext_linked_lib_t", "struct svn_version_ext_linked_lib_t *|svn_version_ext_linked_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_loaded_lib_t = {"_p_svn_version_ext_loaded_lib_t", "struct svn_version_ext_loaded_lib_t *|svn_version_ext_loaded_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_extended_t = {"_p_svn_version_extended_t", "struct svn_version_extended_t *|svn_version_extended_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_t = {"_p_svn_version_t", "struct svn_version_t *|svn_version_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_wc_external_item2_t = {"_p_svn_wc_external_item2_t", "svn_wc_external_item2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_char = {"_p_unsigned_char", "unsigned char *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_long = {"_p_unsigned_long", "unsigned long *|svn_linenum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_void = {"_p_void", "void *", 0, 0, (void*)0, 0};
@@ -10614,10 +11442,13 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_apr_int64_t,
&_swigt__p_apr_pool_t,
&_swigt__p_char,
+ &_swigt__p_f_long_p_void_p_apr_pool_t__void,
&_swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t,
&_swigt__p_f_p_void__p_svn_error_t,
&_swigt__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_f_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_struct_svn_error_t__void,
&_swigt__p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_int,
@@ -10648,7 +11479,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_auth_provider_object_t,
&_swigt__p_svn_auth_provider_t,
&_swigt__p_svn_auth_ssl_server_cert_info_t,
+ &_swigt__p_svn_checksum_ctx_t,
&_swigt__p_svn_checksum_kind_t,
+ &_swigt__p_svn_checksum_t,
&_swigt__p_svn_commit_info_t,
&_swigt__p_svn_config_t,
&_swigt__p_svn_delta_editor_t,
@@ -10695,6 +11528,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_opt_subcommand_desc_t,
&_swigt__p_svn_patch_file_t,
&_swigt__p_svn_patch_t,
+ &_swigt__p_svn_prop_inherited_item_t,
&_swigt__p_svn_prop_kind,
&_swigt__p_svn_prop_patch_t,
&_swigt__p_svn_stream_mark_t,
@@ -10706,7 +11540,11 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_txdelta_stream_t,
&_swigt__p_svn_txdelta_window_t,
&_swigt__p_svn_version_checklist_t,
+ &_swigt__p_svn_version_ext_linked_lib_t,
+ &_swigt__p_svn_version_ext_loaded_lib_t,
+ &_swigt__p_svn_version_extended_t,
&_swigt__p_svn_version_t,
+ &_swigt__p_svn_wc_external_item2_t,
&_swigt__p_unsigned_char,
&_swigt__p_unsigned_long,
&_swigt__p_void,
@@ -10718,10 +11556,13 @@ static swig_cast_info _swigc__p_apr_int32_t[] = { {&_swigt__p_apr_int32_t, 0, 0
static swig_cast_info _swigc__p_apr_int64_t[] = { {&_swigt__p_apr_int64_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_apr_pool_t[] = { {&_swigt__p_apr_pool_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_long_p_void_p_apr_pool_t__void[] = { {&_swigt__p_f_long_p_void_p_apr_pool_t__void, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t[] = { {&_swigt__p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void__p_svn_error_t[] = { {&_swigt__p_f_p_void__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_struct_svn_error_t__void[] = { {&_swigt__p_f_p_void_p_struct_svn_error_t__void, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_int[] = { {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}};
@@ -10752,7 +11593,9 @@ static swig_cast_info _swigc__p_svn_auth_iterstate_t[] = { {&_swigt__p_svn_auth
static swig_cast_info _swigc__p_svn_auth_provider_object_t[] = { {&_swigt__p_svn_auth_provider_object_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_provider_t[] = { {&_swigt__p_svn_auth_provider_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_ssl_server_cert_info_t[] = { {&_swigt__p_svn_auth_ssl_server_cert_info_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_ctx_t[] = { {&_swigt__p_svn_checksum_ctx_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_checksum_kind_t[] = { {&_swigt__p_svn_checksum_kind_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_t[] = { {&_swigt__p_svn_checksum_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_commit_info_t[] = { {&_swigt__p_svn_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_config_t[] = { {&_swigt__p_svn_config_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_delta_editor_t[] = { {&_swigt__p_svn_delta_editor_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -10799,6 +11642,7 @@ static swig_cast_info _swigc__p_svn_opt_subcommand_desc2_t[] = { {&_swigt__p_sv
static swig_cast_info _swigc__p_svn_opt_subcommand_desc_t[] = { {&_swigt__p_svn_opt_subcommand_desc_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_file_t[] = { {&_swigt__p_svn_patch_file_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_t[] = { {&_swigt__p_svn_patch_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_prop_inherited_item_t[] = { {&_swigt__p_svn_prop_inherited_item_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_kind[] = { {&_swigt__p_svn_prop_kind, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_patch_t[] = { {&_swigt__p_svn_prop_patch_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_stream_mark_t[] = { {&_swigt__p_svn_stream_mark_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -10810,7 +11654,11 @@ static swig_cast_info _swigc__p_svn_txdelta_op_t[] = { {&_swigt__p_svn_txdelta_
static swig_cast_info _swigc__p_svn_txdelta_stream_t[] = { {&_swigt__p_svn_txdelta_stream_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_txdelta_window_t[] = { {&_swigt__p_svn_txdelta_window_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_checklist_t[] = { {&_swigt__p_svn_version_checklist_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_linked_lib_t[] = { {&_swigt__p_svn_version_ext_linked_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_loaded_lib_t[] = { {&_swigt__p_svn_version_ext_loaded_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_extended_t[] = { {&_swigt__p_svn_version_extended_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_t[] = { {&_swigt__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_wc_external_item2_t[] = { {&_swigt__p_svn_wc_external_item2_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_char[] = { {&_swigt__p_unsigned_char, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_long[] = { {&_swigt__p_unsigned_long, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_void[] = { {&_swigt__p_void, 0, 0, 0},{0, 0, 0, 0}};
@@ -10822,10 +11670,13 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_apr_int64_t,
_swigc__p_apr_pool_t,
_swigc__p_char,
+ _swigc__p_f_long_p_void_p_apr_pool_t__void,
_swigc__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t,
_swigc__p_f_p_void__p_svn_error_t,
_swigc__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_f_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_struct_svn_error_t__void,
_swigc__p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_int,
@@ -10856,7 +11707,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_auth_provider_object_t,
_swigc__p_svn_auth_provider_t,
_swigc__p_svn_auth_ssl_server_cert_info_t,
+ _swigc__p_svn_checksum_ctx_t,
_swigc__p_svn_checksum_kind_t,
+ _swigc__p_svn_checksum_t,
_swigc__p_svn_commit_info_t,
_swigc__p_svn_config_t,
_swigc__p_svn_delta_editor_t,
@@ -10903,6 +11756,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_opt_subcommand_desc_t,
_swigc__p_svn_patch_file_t,
_swigc__p_svn_patch_t,
+ _swigc__p_svn_prop_inherited_item_t,
_swigc__p_svn_prop_kind,
_swigc__p_svn_prop_patch_t,
_swigc__p_svn_stream_mark_t,
@@ -10914,7 +11768,11 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_txdelta_stream_t,
_swigc__p_svn_txdelta_window_t,
_swigc__p_svn_version_checklist_t,
+ _swigc__p_svn_version_ext_linked_lib_t,
+ _swigc__p_svn_version_ext_loaded_lib_t,
+ _swigc__p_svn_version_extended_t,
_swigc__p_svn_version_t,
+ _swigc__p_svn_wc_external_item2_t,
_swigc__p_unsigned_char,
_swigc__p_unsigned_long,
_swigc__p_void,
@@ -10935,15 +11793,17 @@ static swig_variable_info swig_variables[] = {
static swig_command_info swig_commands[] = {
{"SVN::_Fs::svn_fs_version", _wrap_svn_fs_version},
{"SVN::_Fs::svn_fs_initialize", _wrap_svn_fs_initialize},
-{"SVN::_Fs::svn_fs_set_warning_func", _wrap_svn_fs_set_warning_func},
{"SVN::_Fs::svn_fs_create", _wrap_svn_fs_create},
{"SVN::_Fs::svn_fs_open", _wrap_svn_fs_open},
{"SVN::_Fs::svn_fs_upgrade", _wrap_svn_fs_upgrade},
{"SVN::_Fs::svn_fs_type", _wrap_svn_fs_type},
{"SVN::_Fs::svn_fs_path", _wrap_svn_fs_path},
+{"SVN::_Fs::svn_fs_config", _wrap_svn_fs_config},
{"SVN::_Fs::svn_fs_delete_fs", _wrap_svn_fs_delete_fs},
+{"SVN::_Fs::svn_fs_hotcopy2", _wrap_svn_fs_hotcopy2},
{"SVN::_Fs::svn_fs_hotcopy", _wrap_svn_fs_hotcopy},
{"SVN::_Fs::svn_fs_recover", _wrap_svn_fs_recover},
+{"SVN::_Fs::svn_fs_freeze", _wrap_svn_fs_freeze},
{"SVN::_Fs::svn_fs_berkeley_logfiles", _wrap_svn_fs_berkeley_logfiles},
{"SVN::_Fs::svn_fs_new", _wrap_svn_fs_new},
{"SVN::_Fs::svn_fs_create_berkeley", _wrap_svn_fs_create_berkeley},
@@ -11027,6 +11887,7 @@ static swig_command_info swig_commands[] = {
{"SVN::_Fs::svn_fs_props_changed", _wrap_svn_fs_props_changed},
{"SVN::_Fs::svn_fs_copied_from", _wrap_svn_fs_copied_from},
{"SVN::_Fs::svn_fs_closest_copy", _wrap_svn_fs_closest_copy},
+{"SVN::_Fs::svn_fs_get_mergeinfo2", _wrap_svn_fs_get_mergeinfo2},
{"SVN::_Fs::svn_fs_get_mergeinfo", _wrap_svn_fs_get_mergeinfo},
{"SVN::_Fs::svn_fs_merge", _wrap_svn_fs_merge},
{"SVN::_Fs::svn_fs_dirent_t_name_set", _wrap_svn_fs_dirent_t_name_set},
@@ -11044,6 +11905,7 @@ static swig_command_info swig_commands[] = {
{"SVN::_Fs::svn_fs_file_checksum", _wrap_svn_fs_file_checksum},
{"SVN::_Fs::svn_fs_file_md5_checksum", _wrap_svn_fs_file_md5_checksum},
{"SVN::_Fs::svn_fs_file_contents", _wrap_svn_fs_file_contents},
+{"SVN::_Fs::svn_fs_try_process_file_contents", _wrap_svn_fs_try_process_file_contents},
{"SVN::_Fs::svn_fs_make_file", _wrap_svn_fs_make_file},
{"SVN::_Fs::svn_fs_apply_textdelta", _wrap_svn_fs_apply_textdelta},
{"SVN::_Fs::svn_fs_apply_text", _wrap_svn_fs_apply_text},
@@ -11065,7 +11927,12 @@ static swig_command_info swig_commands[] = {
{"SVN::_Fs::svn_fs_get_locks", _wrap_svn_fs_get_locks},
{"SVN::_Fs::svn_fs_print_modules", _wrap_svn_fs_print_modules},
{"SVN::_Fs::svn_fs_pack", _wrap_svn_fs_pack},
+{"SVN::_Fs::svn_fs_verify", _wrap_svn_fs_verify},
+{"SVN::_Fs::svn_fs_verify_root", _wrap_svn_fs_verify_root},
{"SVN::_Fs::svn_fs_invoke_warning_callback", _wrap_svn_fs_invoke_warning_callback},
+{"SVN::_Fs::svn_fs_invoke_progress_notify_func", _wrap_svn_fs_invoke_progress_notify_func},
+{"SVN::_Fs::svn_fs_invoke_freeze_func", _wrap_svn_fs_invoke_freeze_func},
+{"SVN::_Fs::svn_fs_invoke_process_contents_func", _wrap_svn_fs_invoke_process_contents_func},
{"SVN::_Fs::svn_fs_invoke_get_locks_callback", _wrap_svn_fs_invoke_get_locks_callback},
{"SVN::_Fs::svn_fs_invoke_pack_notify", _wrap_svn_fs_invoke_pack_notify},
{0,0}
@@ -11129,8 +11996,6 @@ SWIG_InitializeModule(void *clientdata) {
swig_module_info *module_head, *iter;
int found, init;
- clientdata = clientdata;
-
/* check to see if the circular list has been setup, if not, set it up */
if (swig_module.next==0) {
/* Initialize the swig_module */
@@ -11321,25 +12186,30 @@ XS(SWIG_init) {
/* Install commands */
for (i = 0; swig_commands[i].name; i++) {
- newXS((char*) swig_commands[i].name,swig_commands[i].wrapper, (char*)__FILE__);
+ /* Casts only needed for Perl < 5.10. */
+#ifdef __cplusplus
+ newXS(const_cast<char*>(swig_commands[i].name), swig_commands[i].wrapper, const_cast<char*>(__FILE__));
+#else
+ newXS((char*)swig_commands[i].name, swig_commands[i].wrapper, (char*)__FILE__);
+#endif
}
/* Install variables */
for (i = 0; swig_variables[i].name; i++) {
SV *sv;
- sv = get_sv((char*) swig_variables[i].name, TRUE | 0x2 | GV_ADDMULTI);
+ sv = get_sv(swig_variables[i].name, TRUE | 0x2 | GV_ADDMULTI);
if (swig_variables[i].type) {
SWIG_MakePtr(sv,(void *)1, *swig_variables[i].type,0);
} else {
sv_setiv(sv,(IV) 0);
}
- swig_create_magic(sv, (char *) swig_variables[i].name, swig_variables[i].set, swig_variables[i].get);
+ swig_create_magic(sv, swig_variables[i].name, swig_variables[i].set, swig_variables[i].get);
}
/* Install constant */
for (i = 0; swig_constants[i].type; i++) {
SV *sv;
- sv = get_sv((char*)swig_constants[i].name, TRUE | 0x2 | GV_ADDMULTI);
+ sv = get_sv(swig_constants[i].name, TRUE | 0x2 | GV_ADDMULTI);
switch(swig_constants[i].type) {
case SWIG_INT:
sv_setiv(sv, (IV) swig_constants[i].lvalue);
@@ -11348,7 +12218,7 @@ XS(SWIG_init) {
sv_setnv(sv, (double) swig_constants[i].dvalue);
break;
case SWIG_STRING:
- sv_setpv(sv, (char *) swig_constants[i].pvalue);
+ sv_setpv(sv, (const char *) swig_constants[i].pvalue);
break;
case SWIG_POINTER:
SWIG_MakePtr(sv, swig_constants[i].pvalue, *(swig_constants[i].ptype),0);
@@ -11362,107 +12232,122 @@ XS(SWIG_init) {
SvREADONLY_on(sv);
}
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_FS_CONFIG_BDB_TXN_NOSYNC", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("bdb-txn-nosync"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_FS_CONFIG_BDB_LOG_AUTOREMOVE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("bdb-log-autoremove"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_FS_CONFIG_FSFS_CACHE_DELTAS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("fsfs-cache-deltas"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_FS_CONFIG_FSFS_CACHE_FULLTEXTS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("fsfs-cache-fulltexts"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_FS_CONFIG_FSFS_CACHE_REVPROPS", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_FromCharPtr("fsfs-cache-revprops"));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_FS_CONFIG_FSFS_CACHE_NS", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_FromCharPtr("fsfs-cache-namespace"));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_FS_CONFIG_FS_TYPE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("fs-type"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_FS_TYPE_BDB", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("bdb"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_FS_TYPE_FSFS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("fsfs"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_FS_CONFIG_PRE_1_4_COMPATIBLE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("pre-1.4-compatible"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_FS_CONFIG_PRE_1_5_COMPATIBLE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("pre-1.5-compatible"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_FS_CONFIG_PRE_1_6_COMPATIBLE", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("pre-1.6-compatible"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_FS_CONFIG_PRE_1_8_COMPATIBLE", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_FromCharPtr("pre-1.8-compatible"));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_FS_TXN_CHECK_OOD", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0x00001)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_FS_TXN_CHECK_LOCKS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0x00002)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_fs_path_change_modify", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_fs_path_change_modify)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_fs_path_change_add", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_fs_path_change_add)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_fs_path_change_delete", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_fs_path_change_delete)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_fs_path_change_replace", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_fs_path_change_replace)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_fs_path_change_reset", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_fs_path_change_reset)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_fs_pack_notify_start", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_fs_pack_notify_start)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_fs_pack_notify_end", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_fs_pack_notify_end)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_fs_pack_notify_start_revprop", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_fs_pack_notify_start_revprop)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_fs_pack_notify_end_revprop", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_fs_pack_notify_end_revprop)));
SvREADONLY_on(sv);
diff --git a/subversion/bindings/swig/perl/native/svn_ra.c b/subversion/bindings/swig/perl/native/svn_ra.c
index 9431590..3dd93ea 100644
--- a/subversion/bindings/swig/perl/native/svn_ra.c
+++ b/subversion/bindings/swig/perl/native/svn_ra.c
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -830,50 +830,35 @@ extern "C" {
SWIGINTERN const char*
SWIG_Perl_ErrorType(int code) {
- const char* type = 0;
switch(code) {
case SWIG_MemoryError:
- type = "MemoryError";
- break;
+ return "MemoryError";
case SWIG_IOError:
- type = "IOError";
- break;
+ return "IOError";
case SWIG_RuntimeError:
- type = "RuntimeError";
- break;
+ return "RuntimeError";
case SWIG_IndexError:
- type = "IndexError";
- break;
+ return "IndexError";
case SWIG_TypeError:
- type = "TypeError";
- break;
+ return "TypeError";
case SWIG_DivisionByZero:
- type = "ZeroDivisionError";
- break;
+ return "ZeroDivisionError";
case SWIG_OverflowError:
- type = "OverflowError";
- break;
+ return "OverflowError";
case SWIG_SyntaxError:
- type = "SyntaxError";
- break;
+ return "SyntaxError";
case SWIG_ValueError:
- type = "ValueError";
- break;
+ return "ValueError";
case SWIG_SystemError:
- type = "SystemError";
- break;
+ return "SystemError";
case SWIG_AttributeError:
- type = "AttributeError";
- break;
+ return "AttributeError";
default:
- type = "RuntimeError";
+ return "RuntimeError";
}
- return type;
}
-
-
/* -----------------------------------------------------------------------------
* perlrun.swg
*
@@ -916,14 +901,14 @@ SWIG_Perl_ErrorType(int code) {
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Perl_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Perl_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Perl_SetModule(pointer)
/* Error manipulation */
#define SWIG_ErrorType(code) SWIG_Perl_ErrorType(code)
-#define SWIG_Error(code, msg) sv_setpvf(GvSV(PL_errgv),"%s %s\n", SWIG_ErrorType(code), msg)
+#define SWIG_Error(code, msg) sv_setpvf(get_sv("@", GV_ADD), "%s %s", SWIG_ErrorType(code), msg)
#define SWIG_fail goto fail
/* Perl-specific SWIG API */
@@ -1017,8 +1002,6 @@ typedef int (*SwigMagicFunc)(struct interpreter *, SV *, MAGIC *);
#endif /* MULTIPLICITY */
#endif /* PERL_OBJECT */
-/* Workaround for bug in perl 5.6.x croak and earlier */
-#if (PERL_VERSION < 8)
# ifdef PERL_OBJECT
# define SWIG_croak_null() SWIG_Perl_croak_null(pPerl)
static void SWIG_Perl_croak_null(CPerlObj *pPerl)
@@ -1026,17 +1009,16 @@ static void SWIG_Perl_croak_null(CPerlObj *pPerl)
static void SWIG_croak_null()
# endif
{
- SV *err=ERRSV;
+ SV *err = get_sv("@", GV_ADD);
# if (PERL_VERSION < 6)
croak("%_", err);
# else
- if (SvOK(err) && !SvROK(err)) croak("%_", err);
- croak(Nullch);
+ if (sv_isobject(err))
+ croak(0);
+ else
+ croak("%s", SvPV_nolen(err));
# endif
}
-#else
-# define SWIG_croak_null() croak(Nullch)
-#endif
/*
@@ -1088,8 +1070,7 @@ SWIG_TypeProxyCheck(const char *c, swig_type_info *ty) {
if (ty) {
swig_cast_info *iter = ty->cast;
while (iter) {
- if ( (!iter->type->clientdata && (strcmp(iter->type->name, c) == 0)) ||
- (iter->type->clientdata && (strcmp((char*)iter->type->clientdata, c) == 0)) ) {
+ if (strcmp(SWIG_Perl_TypeProxyName(iter->type), c) == 0) {
if (iter == ty->cast)
return iter;
/* Move iter to the top of the linked list */
@@ -1220,7 +1201,7 @@ SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, swig_type_info *t, i
SV *obj=newSV(0);
HV *hash=newHV();
HV *stash;
- sv_setref_pv(obj, (char *) SWIG_Perl_TypeProxyName(t), ptr);
+ sv_setref_pv(obj, SWIG_Perl_TypeProxyName(t), ptr);
stash=SvSTASH(SvRV(obj));
if (flags & SWIG_POINTER_OWN) {
HV *hv;
@@ -1238,7 +1219,7 @@ SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, swig_type_info *t, i
sv_bless(sv, stash);
}
else {
- sv_setref_pv(sv, (char *) SWIG_Perl_TypeProxyName(t), ptr);
+ sv_setref_pv(sv, SWIG_Perl_TypeProxyName(t), ptr);
}
}
@@ -1329,19 +1310,23 @@ typedef struct {
/* Magic variable code */
#ifndef PERL_OBJECT
-#define swig_create_magic(s,a,b,c) _swig_create_magic(s,a,b,c)
- #ifndef MULTIPLICITY
- SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *))
- #else
- SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(struct interpreter*, SV *, MAGIC *), int (*get)(struct interpreter*, SV *,MAGIC *))
- #endif
+# ifdef __cplusplus
+# define swig_create_magic(s,a,b,c) _swig_create_magic(s,const_cast<char*>(a),b,c)
+# else
+# define swig_create_magic(s,a,b,c) _swig_create_magic(s,(char*)(a),b,c)
+# endif
+# ifndef MULTIPLICITY
+SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *))
+# else
+SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(struct interpreter*, SV *, MAGIC *), int (*get)(struct interpreter*, SV *,MAGIC *))
+# endif
#else
# define swig_create_magic(s,a,b,c) _swig_create_magic(pPerl,s,a,b,c)
SWIGRUNTIME void _swig_create_magic(CPerlObj *pPerl, SV *sv, const char *name, int (CPerlObj::*set)(SV *, MAGIC *), int (CPerlObj::*get)(SV *, MAGIC *))
#endif
{
MAGIC *mg;
- sv_magic(sv,sv,'U',(char *) name,strlen(name));
+ sv_magic(sv,sv,'U',name,strlen(name));
mg = mg_find(sv,'U');
mg->mg_virtual = (MGVTBL *) malloc(sizeof(MGVTBL));
mg->mg_virtual->svt_get = (SwigMagicFunc) get;
@@ -1353,7 +1338,7 @@ SWIGRUNTIME void _swig_create_magic(CPerlObj *pPerl, SV *sv, const char *name, i
SWIGRUNTIME swig_module_info *
-SWIG_Perl_GetModule(void) {
+SWIG_Perl_GetModule(void *SWIGUNUSEDPARM(clientdata)) {
static void *type_pointer = (void *)0;
SV *pointer;
@@ -1447,9 +1432,6 @@ SWIG_Perl_SetModule(swig_module_info *module) {
#ifdef eof
#undef eof
#endif
-#ifdef bool
- #undef bool
-#endif
#ifdef close
#undef close
#endif
@@ -1490,6 +1472,14 @@ SWIG_Perl_SetModule(swig_module_info *module) {
#undef stat
#endif
+#ifdef bool
+ /* Leave if macro is from C99 stdbool.h */
+ #ifndef __bool_true_false_are_defined
+ #undef bool
+ #endif
+#endif
+
+
#define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0)
@@ -1528,121 +1518,132 @@ SWIG_Perl_SetModule(swig_module_info *module) {
#define SWIGTYPE_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[22]
#define SWIGTYPE_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[23]
#define SWIGTYPE_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[24]
-#define SWIGTYPE_p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[25]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[26]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[27]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[28]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[29]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[30]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[31]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_depth_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[32]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_boolean_t_p_q_const__svn_lock_t_p_svn_error_t_p_apr_pool_t__p_svn_error_t swig_types[33]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[34]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[35]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_p_apr_hash_t_p_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[36]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_svn_node_kind_t_p_apr_pool_t__p_svn_error_t swig_types[37]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_svn_stream_t_p_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[38]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[39]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[40]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_depth_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[41]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_revnum_t_svn_ra_file_rev_handler_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[42]
-#define SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t swig_types[43]
-#define SWIGTYPE_p_f_p_void_p_svn_revnum_t__p_svn_error_t swig_types[44]
-#define SWIGTYPE_p_f_p_void_p_svn_revnum_t_apr_time_t_p_apr_pool_t__p_svn_error_t swig_types[45]
-#define SWIGTYPE_p_f_p_void_p_svn_revnum_t_p_apr_pool_t__p_svn_error_t swig_types[46]
-#define SWIGTYPE_p_f_p_void_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[47]
-#define SWIGTYPE_p_f_p_void_svn_revnum_t_p_q_const__char_p_p_svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[48]
-#define SWIGTYPE_p_f_p_void_svn_revnum_t_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[49]
-#define SWIGTYPE_p_f_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t swig_types[50]
-#define SWIGTYPE_p_f_svn_revnum_t_p_void_p_p_q_const__svn_delta_editor_t_p_p_void_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[51]
-#define SWIGTYPE_p_f_svn_revnum_t_p_void_p_q_const__svn_delta_editor_t_p_void_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[52]
-#define SWIGTYPE_p_f_void__p_svn_version_t swig_types[53]
-#define SWIGTYPE_p_int swig_types[54]
-#define SWIGTYPE_p_long swig_types[55]
-#define SWIGTYPE_p_p_apr_file_t swig_types[56]
-#define SWIGTYPE_p_p_apr_hash_t swig_types[57]
-#define SWIGTYPE_p_p_char swig_types[58]
-#define SWIGTYPE_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t swig_types[59]
-#define SWIGTYPE_p_p_svn_delta_editor_t swig_types[60]
-#define SWIGTYPE_p_p_svn_dirent_t swig_types[61]
-#define SWIGTYPE_p_p_svn_lock_t swig_types[62]
-#define SWIGTYPE_p_p_svn_ra_callbacks2_t swig_types[63]
-#define SWIGTYPE_p_p_svn_ra_plugin_t swig_types[64]
-#define SWIGTYPE_p_p_svn_ra_reporter2_t swig_types[65]
-#define SWIGTYPE_p_p_svn_ra_reporter3_t swig_types[66]
-#define SWIGTYPE_p_p_svn_ra_reporter_t swig_types[67]
-#define SWIGTYPE_p_p_svn_ra_session_t swig_types[68]
-#define SWIGTYPE_p_p_svn_string_t swig_types[69]
-#define SWIGTYPE_p_p_svn_stringbuf_t swig_types[70]
-#define SWIGTYPE_p_p_void swig_types[71]
-#define SWIGTYPE_p_svn_auth_baton_t swig_types[72]
-#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[73]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[74]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[75]
-#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[76]
-#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[77]
-#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[78]
-#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[79]
-#define SWIGTYPE_p_svn_auth_provider_t swig_types[80]
-#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[81]
-#define SWIGTYPE_p_svn_commit_info_t swig_types[82]
-#define SWIGTYPE_p_svn_config_t swig_types[83]
-#define SWIGTYPE_p_svn_delta_editor_t swig_types[84]
-#define SWIGTYPE_p_svn_depth_t swig_types[85]
-#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[86]
-#define SWIGTYPE_p_svn_diff_datasource_e swig_types[87]
-#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[88]
-#define SWIGTYPE_p_svn_diff_file_options_t swig_types[89]
-#define SWIGTYPE_p_svn_diff_fns2_t swig_types[90]
-#define SWIGTYPE_p_svn_diff_fns_t swig_types[91]
-#define SWIGTYPE_p_svn_diff_hunk_t swig_types[92]
-#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[93]
-#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[94]
-#define SWIGTYPE_p_svn_diff_t swig_types[95]
-#define SWIGTYPE_p_svn_dirent_t swig_types[96]
-#define SWIGTYPE_p_svn_errno_t swig_types[97]
-#define SWIGTYPE_p_svn_error_t swig_types[98]
-#define SWIGTYPE_p_svn_io_dirent2_t swig_types[99]
-#define SWIGTYPE_p_svn_io_dirent_t swig_types[100]
-#define SWIGTYPE_p_svn_io_file_del_t swig_types[101]
-#define SWIGTYPE_p_svn_location_segment_t swig_types[102]
-#define SWIGTYPE_p_svn_lock_t swig_types[103]
-#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[104]
-#define SWIGTYPE_p_svn_log_changed_path_t swig_types[105]
-#define SWIGTYPE_p_svn_log_entry_t swig_types[106]
-#define SWIGTYPE_p_svn_merge_range_t swig_types[107]
-#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[108]
-#define SWIGTYPE_p_svn_node_kind_t swig_types[109]
-#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[110]
-#define SWIGTYPE_p_svn_opt_revision_t swig_types[111]
-#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[112]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[113]
-#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[114]
-#define SWIGTYPE_p_svn_patch_file_t swig_types[115]
-#define SWIGTYPE_p_svn_patch_t swig_types[116]
-#define SWIGTYPE_p_svn_prop_kind swig_types[117]
-#define SWIGTYPE_p_svn_prop_patch_t swig_types[118]
-#define SWIGTYPE_p_svn_ra_callbacks2_t swig_types[119]
-#define SWIGTYPE_p_svn_ra_callbacks_t swig_types[120]
-#define SWIGTYPE_p_svn_ra_plugin_t swig_types[121]
-#define SWIGTYPE_p_svn_ra_reporter2_t swig_types[122]
-#define SWIGTYPE_p_svn_ra_reporter3_t swig_types[123]
-#define SWIGTYPE_p_svn_ra_reporter_t swig_types[124]
-#define SWIGTYPE_p_svn_ra_session_t swig_types[125]
-#define SWIGTYPE_p_svn_stream_mark_t swig_types[126]
-#define SWIGTYPE_p_svn_stream_t swig_types[127]
-#define SWIGTYPE_p_svn_string_t swig_types[128]
-#define SWIGTYPE_p_svn_stringbuf_t swig_types[129]
-#define SWIGTYPE_p_svn_tristate_t swig_types[130]
-#define SWIGTYPE_p_svn_txdelta_op_t swig_types[131]
-#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[132]
-#define SWIGTYPE_p_svn_txdelta_window_t swig_types[133]
-#define SWIGTYPE_p_svn_version_checklist_t swig_types[134]
-#define SWIGTYPE_p_svn_version_t swig_types[135]
-#define SWIGTYPE_p_unsigned_long swig_types[136]
-#define SWIGTYPE_p_void swig_types[137]
-static swig_type_info *swig_types[139];
-static swig_module_info swig_module = {swig_types, 138, 0, 0, 0, 0};
+#define SWIGTYPE_p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t swig_types[25]
+#define SWIGTYPE_p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[26]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[27]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[28]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[29]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[30]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[31]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[32]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_depth_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[33]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_boolean_t_p_q_const__svn_lock_t_p_svn_error_t_p_apr_pool_t__p_svn_error_t swig_types[34]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[35]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[36]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_p_apr_hash_t_p_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[37]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_svn_node_kind_t_p_apr_pool_t__p_svn_error_t swig_types[38]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_svn_stream_t_p_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[39]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[40]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[41]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_depth_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[42]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_revnum_t_svn_ra_file_rev_handler_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[43]
+#define SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t swig_types[44]
+#define SWIGTYPE_p_f_p_void_p_svn_revnum_t__p_svn_error_t swig_types[45]
+#define SWIGTYPE_p_f_p_void_p_svn_revnum_t_apr_time_t_p_apr_pool_t__p_svn_error_t swig_types[46]
+#define SWIGTYPE_p_f_p_void_p_svn_revnum_t_p_apr_pool_t__p_svn_error_t swig_types[47]
+#define SWIGTYPE_p_f_p_void_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[48]
+#define SWIGTYPE_p_f_p_void_svn_revnum_t_p_q_const__char_p_p_svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[49]
+#define SWIGTYPE_p_f_p_void_svn_revnum_t_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[50]
+#define SWIGTYPE_p_f_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t swig_types[51]
+#define SWIGTYPE_p_f_svn_revnum_t_p_void_p_p_q_const__svn_delta_editor_t_p_p_void_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[52]
+#define SWIGTYPE_p_f_svn_revnum_t_p_void_p_q_const__svn_delta_editor_t_p_void_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[53]
+#define SWIGTYPE_p_f_void__p_svn_version_t swig_types[54]
+#define SWIGTYPE_p_int swig_types[55]
+#define SWIGTYPE_p_long swig_types[56]
+#define SWIGTYPE_p_p_apr_array_header_t swig_types[57]
+#define SWIGTYPE_p_p_apr_file_t swig_types[58]
+#define SWIGTYPE_p_p_apr_hash_t swig_types[59]
+#define SWIGTYPE_p_p_char swig_types[60]
+#define SWIGTYPE_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t swig_types[61]
+#define SWIGTYPE_p_p_svn_delta_editor_t swig_types[62]
+#define SWIGTYPE_p_p_svn_dirent_t swig_types[63]
+#define SWIGTYPE_p_p_svn_lock_t swig_types[64]
+#define SWIGTYPE_p_p_svn_ra_callbacks2_t swig_types[65]
+#define SWIGTYPE_p_p_svn_ra_plugin_t swig_types[66]
+#define SWIGTYPE_p_p_svn_ra_reporter2_t swig_types[67]
+#define SWIGTYPE_p_p_svn_ra_reporter3_t swig_types[68]
+#define SWIGTYPE_p_p_svn_ra_reporter_t swig_types[69]
+#define SWIGTYPE_p_p_svn_ra_session_t swig_types[70]
+#define SWIGTYPE_p_p_svn_stream_t swig_types[71]
+#define SWIGTYPE_p_p_svn_string_t swig_types[72]
+#define SWIGTYPE_p_p_svn_stringbuf_t swig_types[73]
+#define SWIGTYPE_p_p_void swig_types[74]
+#define SWIGTYPE_p_svn_auth_baton_t swig_types[75]
+#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[76]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[77]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[78]
+#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[79]
+#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[80]
+#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[81]
+#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[82]
+#define SWIGTYPE_p_svn_auth_provider_t swig_types[83]
+#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[84]
+#define SWIGTYPE_p_svn_checksum_ctx_t swig_types[85]
+#define SWIGTYPE_p_svn_checksum_kind_t swig_types[86]
+#define SWIGTYPE_p_svn_checksum_t swig_types[87]
+#define SWIGTYPE_p_svn_commit_info_t swig_types[88]
+#define SWIGTYPE_p_svn_config_t swig_types[89]
+#define SWIGTYPE_p_svn_delta_editor_t swig_types[90]
+#define SWIGTYPE_p_svn_depth_t swig_types[91]
+#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[92]
+#define SWIGTYPE_p_svn_diff_datasource_e swig_types[93]
+#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[94]
+#define SWIGTYPE_p_svn_diff_file_options_t swig_types[95]
+#define SWIGTYPE_p_svn_diff_fns2_t swig_types[96]
+#define SWIGTYPE_p_svn_diff_fns_t swig_types[97]
+#define SWIGTYPE_p_svn_diff_hunk_t swig_types[98]
+#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[99]
+#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[100]
+#define SWIGTYPE_p_svn_diff_t swig_types[101]
+#define SWIGTYPE_p_svn_dirent_t swig_types[102]
+#define SWIGTYPE_p_svn_errno_t swig_types[103]
+#define SWIGTYPE_p_svn_error_t swig_types[104]
+#define SWIGTYPE_p_svn_io_dirent2_t swig_types[105]
+#define SWIGTYPE_p_svn_io_dirent_t swig_types[106]
+#define SWIGTYPE_p_svn_io_file_del_t swig_types[107]
+#define SWIGTYPE_p_svn_location_segment_t swig_types[108]
+#define SWIGTYPE_p_svn_lock_t swig_types[109]
+#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[110]
+#define SWIGTYPE_p_svn_log_changed_path_t swig_types[111]
+#define SWIGTYPE_p_svn_log_entry_t swig_types[112]
+#define SWIGTYPE_p_svn_merge_range_t swig_types[113]
+#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[114]
+#define SWIGTYPE_p_svn_node_kind_t swig_types[115]
+#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[116]
+#define SWIGTYPE_p_svn_opt_revision_t swig_types[117]
+#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[118]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[119]
+#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[120]
+#define SWIGTYPE_p_svn_patch_file_t swig_types[121]
+#define SWIGTYPE_p_svn_patch_t swig_types[122]
+#define SWIGTYPE_p_svn_prop_inherited_item_t swig_types[123]
+#define SWIGTYPE_p_svn_prop_kind swig_types[124]
+#define SWIGTYPE_p_svn_prop_patch_t swig_types[125]
+#define SWIGTYPE_p_svn_ra_callbacks2_t swig_types[126]
+#define SWIGTYPE_p_svn_ra_callbacks_t swig_types[127]
+#define SWIGTYPE_p_svn_ra_plugin_t swig_types[128]
+#define SWIGTYPE_p_svn_ra_reporter2_t swig_types[129]
+#define SWIGTYPE_p_svn_ra_reporter3_t swig_types[130]
+#define SWIGTYPE_p_svn_ra_reporter_t swig_types[131]
+#define SWIGTYPE_p_svn_ra_session_t swig_types[132]
+#define SWIGTYPE_p_svn_stream_mark_t swig_types[133]
+#define SWIGTYPE_p_svn_stream_t swig_types[134]
+#define SWIGTYPE_p_svn_string_t swig_types[135]
+#define SWIGTYPE_p_svn_stringbuf_t swig_types[136]
+#define SWIGTYPE_p_svn_tristate_t swig_types[137]
+#define SWIGTYPE_p_svn_txdelta_op_t swig_types[138]
+#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[139]
+#define SWIGTYPE_p_svn_txdelta_window_t swig_types[140]
+#define SWIGTYPE_p_svn_version_checklist_t swig_types[141]
+#define SWIGTYPE_p_svn_version_ext_linked_lib_t swig_types[142]
+#define SWIGTYPE_p_svn_version_ext_loaded_lib_t swig_types[143]
+#define SWIGTYPE_p_svn_version_extended_t swig_types[144]
+#define SWIGTYPE_p_svn_version_t swig_types[145]
+#define SWIGTYPE_p_svn_wc_external_item2_t swig_types[146]
+#define SWIGTYPE_p_unsigned_long swig_types[147]
+#define SWIGTYPE_p_void swig_types[148]
+static swig_type_info *swig_types[150];
+static swig_module_info swig_module = {swig_types, 149, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@@ -1653,7 +1654,7 @@ static swig_module_info swig_module = {swig_types, 138, 0, 0, 0, 0};
#define SWIG_name "SVN::_Ra::boot_SVN___Ra"
#define SWIG_prefix "SVN::_Ra::"
-#define SWIGVERSION 0x020004
+#define SWIGVERSION 0x020009
#define SWIG_VERSION SWIGVERSION
@@ -1743,10 +1744,13 @@ SWIG_AsCharPtrAndSize(SV *obj, char** cptr, size_t* psize, int *alloc)
SWIGINTERNINLINE SV *
SWIG_From_long SWIG_PERL_DECL_ARGS_1(long value)
-{
- SV *obj = sv_newmortal();
- sv_setiv(obj, (IV) value);
- return obj;
+{
+ SV *sv;
+ if (value >= IV_MIN && value <= IV_MAX)
+ sv = newSViv(value);
+ else
+ sv = newSVpvf("%ld", value);
+ return sv_2mortal(sv);
}
@@ -1842,9 +1846,20 @@ SWIG_CanCastAsInteger(double *d, double min, double max) {
SWIGINTERN int
SWIG_AsVal_long_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, long long *val)
{
- if (SvIOK(obj)) {
- if (val) *val = SvIV(obj);
- return SWIG_OK;
+ if (SvUOK(obj)) {
+ UV v = SvUV(obj);
+ if (v < LLONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
+ } else if (SvIOK(obj)) {
+ IV v = SvIV(obj);
+ if (v >= LLONG_MIN && v <= LLONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
} else {
int dispatch = 0;
const char *nptr = SvPV_nolen(obj);
@@ -1881,9 +1896,20 @@ SWIG_AsVal_long_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, long long *val)
SWIGINTERN int
SWIG_AsVal_long SWIG_PERL_DECL_ARGS_2(SV *obj, long* val)
{
- if (SvIOK(obj)) {
- if (val) *val = SvIV(obj);
- return SWIG_OK;
+ if (SvUOK(obj)) {
+ UV v = SvUV(obj);
+ if (v <= LONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
+ } else if (SvIOK(obj)) {
+ IV v = SvIV(obj);
+ if (v >= LONG_MIN && v <= LONG_MAX) {
+ if(val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
} else {
int dispatch = 0;
const char *nptr = SvPV_nolen(obj);
@@ -1935,16 +1961,19 @@ SWIGINTERN int
SWIG_AsVal_unsigned_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, unsigned long *val)
{
if (SvUOK(obj)) {
- if (val) *val = SvUV(obj);
- return SWIG_OK;
- } else if (SvIOK(obj)) {
- long v = SvIV(obj);
- if (v >= 0) {
+ UV v = SvUV(obj);
+ if (v <= ULONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
+ } else if (SvIOK(obj)) {
+ IV v = SvIV(obj);
+ if (v >= 0 && v <= ULONG_MAX) {
if (val) *val = v;
return SWIG_OK;
- } else {
- return SWIG_OverflowError;
}
+ return SWIG_OverflowError;
} else {
int dispatch = 0;
const char *nptr = SvPV_nolen(obj);
@@ -2208,6 +2237,11 @@ static svn_error_t * svn_ra_invoke_invalidate_wc_props_func(
return _obj(baton, path, name, pool);
}
+static svn_error_t * svn_ra_invoke_get_wc_contents_func(
+ svn_ra_get_wc_contents_func_t _obj, void *baton, svn_stream_t **contents, const svn_checksum_t *checksum, apr_pool_t *pool) {
+ return _obj(baton, contents, checksum, pool);
+}
+
static svn_error_t * svn_ra_invoke_get_latest_revnum_func(
svn_ra_get_latest_revnum_func_t _obj, void *session_baton, svn_revnum_t *latest_revnum) {
return _obj(session_baton, latest_revnum);
@@ -2303,7 +2337,7 @@ XS(_wrap_svn_ra_version) {
XS(_wrap_svn_ra_reporter3_t_set_path_set) {
{
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_revnum_t,svn_depth_t,svn_boolean_t,char const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_depth_t,svn_boolean_t,char const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2315,9 +2349,9 @@ XS(_wrap_svn_ra_reporter3_t_set_path_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter3_t_set_path_set" "', argument " "1"" of type '" "svn_ra_reporter3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter3_t_set_path_set" "', argument " "1"" of type '" "struct svn_ra_reporter3_t *""'");
}
- arg1 = (svn_ra_reporter3_t *)(argp1);
+ arg1 = (struct svn_ra_reporter3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_depth_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -2339,7 +2373,7 @@ XS(_wrap_svn_ra_reporter3_t_set_path_set) {
XS(_wrap_svn_ra_reporter3_t_set_path_get) {
{
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2351,9 +2385,9 @@ XS(_wrap_svn_ra_reporter3_t_set_path_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter3_t_set_path_get" "', argument " "1"" of type '" "svn_ra_reporter3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter3_t_set_path_get" "', argument " "1"" of type '" "struct svn_ra_reporter3_t *""'");
}
- arg1 = (svn_ra_reporter3_t *)(argp1);
+ arg1 = (struct svn_ra_reporter3_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_depth_t,svn_boolean_t,char const *,apr_pool_t *)) ((arg1)->set_path);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_depth_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -2367,7 +2401,7 @@ XS(_wrap_svn_ra_reporter3_t_set_path_get) {
XS(_wrap_svn_ra_reporter3_t_delete_path_set) {
{
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2379,9 +2413,9 @@ XS(_wrap_svn_ra_reporter3_t_delete_path_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter3_t_delete_path_set" "', argument " "1"" of type '" "svn_ra_reporter3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter3_t_delete_path_set" "', argument " "1"" of type '" "struct svn_ra_reporter3_t *""'");
}
- arg1 = (svn_ra_reporter3_t *)(argp1);
+ arg1 = (struct svn_ra_reporter3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -2403,7 +2437,7 @@ XS(_wrap_svn_ra_reporter3_t_delete_path_set) {
XS(_wrap_svn_ra_reporter3_t_delete_path_get) {
{
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2415,9 +2449,9 @@ XS(_wrap_svn_ra_reporter3_t_delete_path_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter3_t_delete_path_get" "', argument " "1"" of type '" "svn_ra_reporter3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter3_t_delete_path_get" "', argument " "1"" of type '" "struct svn_ra_reporter3_t *""'");
}
- arg1 = (svn_ra_reporter3_t *)(argp1);
+ arg1 = (struct svn_ra_reporter3_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,apr_pool_t *)) ((arg1)->delete_path);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -2431,7 +2465,7 @@ XS(_wrap_svn_ra_reporter3_t_delete_path_get) {
XS(_wrap_svn_ra_reporter3_t_link_path_set) {
{
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,char const *,svn_revnum_t,svn_depth_t,svn_boolean_t,char const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,char const *,svn_revnum_t,svn_depth_t,svn_boolean_t,char const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2443,9 +2477,9 @@ XS(_wrap_svn_ra_reporter3_t_link_path_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter3_t_link_path_set" "', argument " "1"" of type '" "svn_ra_reporter3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter3_t_link_path_set" "', argument " "1"" of type '" "struct svn_ra_reporter3_t *""'");
}
- arg1 = (svn_ra_reporter3_t *)(argp1);
+ arg1 = (struct svn_ra_reporter3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_depth_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -2467,7 +2501,7 @@ XS(_wrap_svn_ra_reporter3_t_link_path_set) {
XS(_wrap_svn_ra_reporter3_t_link_path_get) {
{
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2479,9 +2513,9 @@ XS(_wrap_svn_ra_reporter3_t_link_path_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter3_t_link_path_get" "', argument " "1"" of type '" "svn_ra_reporter3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter3_t_link_path_get" "', argument " "1"" of type '" "struct svn_ra_reporter3_t *""'");
}
- arg1 = (svn_ra_reporter3_t *)(argp1);
+ arg1 = (struct svn_ra_reporter3_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,char const *,svn_revnum_t,svn_depth_t,svn_boolean_t,char const *,apr_pool_t *)) ((arg1)->link_path);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_depth_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -2495,7 +2529,7 @@ XS(_wrap_svn_ra_reporter3_t_link_path_get) {
XS(_wrap_svn_ra_reporter3_t_finish_report_set) {
{
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2507,9 +2541,9 @@ XS(_wrap_svn_ra_reporter3_t_finish_report_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter3_t_finish_report_set" "', argument " "1"" of type '" "svn_ra_reporter3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter3_t_finish_report_set" "', argument " "1"" of type '" "struct svn_ra_reporter3_t *""'");
}
- arg1 = (svn_ra_reporter3_t *)(argp1);
+ arg1 = (struct svn_ra_reporter3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -2531,7 +2565,7 @@ XS(_wrap_svn_ra_reporter3_t_finish_report_set) {
XS(_wrap_svn_ra_reporter3_t_finish_report_get) {
{
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2543,9 +2577,9 @@ XS(_wrap_svn_ra_reporter3_t_finish_report_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter3_t_finish_report_get" "', argument " "1"" of type '" "svn_ra_reporter3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter3_t_finish_report_get" "', argument " "1"" of type '" "struct svn_ra_reporter3_t *""'");
}
- arg1 = (svn_ra_reporter3_t *)(argp1);
+ arg1 = (struct svn_ra_reporter3_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_pool_t *)) ((arg1)->finish_report);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -2559,7 +2593,7 @@ XS(_wrap_svn_ra_reporter3_t_finish_report_get) {
XS(_wrap_svn_ra_reporter3_t_abort_report_set) {
{
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2571,9 +2605,9 @@ XS(_wrap_svn_ra_reporter3_t_abort_report_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter3_t_abort_report_set" "', argument " "1"" of type '" "svn_ra_reporter3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter3_t_abort_report_set" "', argument " "1"" of type '" "struct svn_ra_reporter3_t *""'");
}
- arg1 = (svn_ra_reporter3_t *)(argp1);
+ arg1 = (struct svn_ra_reporter3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -2595,7 +2629,7 @@ XS(_wrap_svn_ra_reporter3_t_abort_report_set) {
XS(_wrap_svn_ra_reporter3_t_abort_report_get) {
{
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2607,9 +2641,9 @@ XS(_wrap_svn_ra_reporter3_t_abort_report_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter3_t_abort_report_get" "', argument " "1"" of type '" "svn_ra_reporter3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter3_t_abort_report_get" "', argument " "1"" of type '" "struct svn_ra_reporter3_t *""'");
}
- arg1 = (svn_ra_reporter3_t *)(argp1);
+ arg1 = (struct svn_ra_reporter3_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_pool_t *)) ((arg1)->abort_report);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -2624,14 +2658,14 @@ XS(_wrap_svn_ra_reporter3_t_abort_report_get) {
XS(_wrap_new_svn_ra_reporter3_t) {
{
int argvi = 0;
- svn_ra_reporter3_t *result = 0 ;
+ struct svn_ra_reporter3_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_ra_reporter3_t();");
}
{
- result = (svn_ra_reporter3_t *)calloc(1, sizeof(svn_ra_reporter3_t));
+ result = (struct svn_ra_reporter3_t *)calloc(1, sizeof(struct svn_ra_reporter3_t));
@@ -2646,7 +2680,7 @@ XS(_wrap_new_svn_ra_reporter3_t) {
XS(_wrap_delete_svn_ra_reporter3_t) {
{
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2657,9 +2691,9 @@ XS(_wrap_delete_svn_ra_reporter3_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter3_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_ra_reporter3_t" "', argument " "1"" of type '" "svn_ra_reporter3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_ra_reporter3_t" "', argument " "1"" of type '" "struct svn_ra_reporter3_t *""'");
}
- arg1 = (svn_ra_reporter3_t *)(argp1);
+ arg1 = (struct svn_ra_reporter3_t *)(argp1);
{
free((char *) arg1);
@@ -2678,7 +2712,7 @@ XS(_wrap_delete_svn_ra_reporter3_t) {
XS(_wrap_svn_ra_reporter2_t_set_path_set) {
{
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_revnum_t,svn_boolean_t,char const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_boolean_t,char const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2690,9 +2724,9 @@ XS(_wrap_svn_ra_reporter2_t_set_path_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter2_t_set_path_set" "', argument " "1"" of type '" "svn_ra_reporter2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter2_t_set_path_set" "', argument " "1"" of type '" "struct svn_ra_reporter2_t *""'");
}
- arg1 = (svn_ra_reporter2_t *)(argp1);
+ arg1 = (struct svn_ra_reporter2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -2714,7 +2748,7 @@ XS(_wrap_svn_ra_reporter2_t_set_path_set) {
XS(_wrap_svn_ra_reporter2_t_set_path_get) {
{
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2726,9 +2760,9 @@ XS(_wrap_svn_ra_reporter2_t_set_path_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter2_t_set_path_get" "', argument " "1"" of type '" "svn_ra_reporter2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter2_t_set_path_get" "', argument " "1"" of type '" "struct svn_ra_reporter2_t *""'");
}
- arg1 = (svn_ra_reporter2_t *)(argp1);
+ arg1 = (struct svn_ra_reporter2_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_boolean_t,char const *,apr_pool_t *)) ((arg1)->set_path);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -2742,7 +2776,7 @@ XS(_wrap_svn_ra_reporter2_t_set_path_get) {
XS(_wrap_svn_ra_reporter2_t_delete_path_set) {
{
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2754,9 +2788,9 @@ XS(_wrap_svn_ra_reporter2_t_delete_path_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter2_t_delete_path_set" "', argument " "1"" of type '" "svn_ra_reporter2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter2_t_delete_path_set" "', argument " "1"" of type '" "struct svn_ra_reporter2_t *""'");
}
- arg1 = (svn_ra_reporter2_t *)(argp1);
+ arg1 = (struct svn_ra_reporter2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -2778,7 +2812,7 @@ XS(_wrap_svn_ra_reporter2_t_delete_path_set) {
XS(_wrap_svn_ra_reporter2_t_delete_path_get) {
{
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2790,9 +2824,9 @@ XS(_wrap_svn_ra_reporter2_t_delete_path_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter2_t_delete_path_get" "', argument " "1"" of type '" "svn_ra_reporter2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter2_t_delete_path_get" "', argument " "1"" of type '" "struct svn_ra_reporter2_t *""'");
}
- arg1 = (svn_ra_reporter2_t *)(argp1);
+ arg1 = (struct svn_ra_reporter2_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,apr_pool_t *)) ((arg1)->delete_path);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -2806,7 +2840,7 @@ XS(_wrap_svn_ra_reporter2_t_delete_path_get) {
XS(_wrap_svn_ra_reporter2_t_link_path_set) {
{
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,char const *,svn_revnum_t,svn_boolean_t,char const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,char const *,svn_revnum_t,svn_boolean_t,char const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2818,9 +2852,9 @@ XS(_wrap_svn_ra_reporter2_t_link_path_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter2_t_link_path_set" "', argument " "1"" of type '" "svn_ra_reporter2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter2_t_link_path_set" "', argument " "1"" of type '" "struct svn_ra_reporter2_t *""'");
}
- arg1 = (svn_ra_reporter2_t *)(argp1);
+ arg1 = (struct svn_ra_reporter2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -2842,7 +2876,7 @@ XS(_wrap_svn_ra_reporter2_t_link_path_set) {
XS(_wrap_svn_ra_reporter2_t_link_path_get) {
{
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2854,9 +2888,9 @@ XS(_wrap_svn_ra_reporter2_t_link_path_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter2_t_link_path_get" "', argument " "1"" of type '" "svn_ra_reporter2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter2_t_link_path_get" "', argument " "1"" of type '" "struct svn_ra_reporter2_t *""'");
}
- arg1 = (svn_ra_reporter2_t *)(argp1);
+ arg1 = (struct svn_ra_reporter2_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,char const *,svn_revnum_t,svn_boolean_t,char const *,apr_pool_t *)) ((arg1)->link_path);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -2870,7 +2904,7 @@ XS(_wrap_svn_ra_reporter2_t_link_path_get) {
XS(_wrap_svn_ra_reporter2_t_finish_report_set) {
{
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2882,9 +2916,9 @@ XS(_wrap_svn_ra_reporter2_t_finish_report_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter2_t_finish_report_set" "', argument " "1"" of type '" "svn_ra_reporter2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter2_t_finish_report_set" "', argument " "1"" of type '" "struct svn_ra_reporter2_t *""'");
}
- arg1 = (svn_ra_reporter2_t *)(argp1);
+ arg1 = (struct svn_ra_reporter2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -2906,7 +2940,7 @@ XS(_wrap_svn_ra_reporter2_t_finish_report_set) {
XS(_wrap_svn_ra_reporter2_t_finish_report_get) {
{
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2918,9 +2952,9 @@ XS(_wrap_svn_ra_reporter2_t_finish_report_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter2_t_finish_report_get" "', argument " "1"" of type '" "svn_ra_reporter2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter2_t_finish_report_get" "', argument " "1"" of type '" "struct svn_ra_reporter2_t *""'");
}
- arg1 = (svn_ra_reporter2_t *)(argp1);
+ arg1 = (struct svn_ra_reporter2_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_pool_t *)) ((arg1)->finish_report);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -2934,7 +2968,7 @@ XS(_wrap_svn_ra_reporter2_t_finish_report_get) {
XS(_wrap_svn_ra_reporter2_t_abort_report_set) {
{
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2946,9 +2980,9 @@ XS(_wrap_svn_ra_reporter2_t_abort_report_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter2_t_abort_report_set" "', argument " "1"" of type '" "svn_ra_reporter2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter2_t_abort_report_set" "', argument " "1"" of type '" "struct svn_ra_reporter2_t *""'");
}
- arg1 = (svn_ra_reporter2_t *)(argp1);
+ arg1 = (struct svn_ra_reporter2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -2970,7 +3004,7 @@ XS(_wrap_svn_ra_reporter2_t_abort_report_set) {
XS(_wrap_svn_ra_reporter2_t_abort_report_get) {
{
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2982,9 +3016,9 @@ XS(_wrap_svn_ra_reporter2_t_abort_report_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter2_t_abort_report_get" "', argument " "1"" of type '" "svn_ra_reporter2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter2_t_abort_report_get" "', argument " "1"" of type '" "struct svn_ra_reporter2_t *""'");
}
- arg1 = (svn_ra_reporter2_t *)(argp1);
+ arg1 = (struct svn_ra_reporter2_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_pool_t *)) ((arg1)->abort_report);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -2999,14 +3033,14 @@ XS(_wrap_svn_ra_reporter2_t_abort_report_get) {
XS(_wrap_new_svn_ra_reporter2_t) {
{
int argvi = 0;
- svn_ra_reporter2_t *result = 0 ;
+ struct svn_ra_reporter2_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_ra_reporter2_t();");
}
{
- result = (svn_ra_reporter2_t *)calloc(1, sizeof(svn_ra_reporter2_t));
+ result = (struct svn_ra_reporter2_t *)calloc(1, sizeof(struct svn_ra_reporter2_t));
@@ -3021,7 +3055,7 @@ XS(_wrap_new_svn_ra_reporter2_t) {
XS(_wrap_delete_svn_ra_reporter2_t) {
{
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3032,9 +3066,9 @@ XS(_wrap_delete_svn_ra_reporter2_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter2_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_ra_reporter2_t" "', argument " "1"" of type '" "svn_ra_reporter2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_ra_reporter2_t" "', argument " "1"" of type '" "struct svn_ra_reporter2_t *""'");
}
- arg1 = (svn_ra_reporter2_t *)(argp1);
+ arg1 = (struct svn_ra_reporter2_t *)(argp1);
{
free((char *) arg1);
@@ -3053,7 +3087,7 @@ XS(_wrap_delete_svn_ra_reporter2_t) {
XS(_wrap_svn_ra_reporter_t_set_path_set) {
{
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_revnum_t,svn_boolean_t,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_boolean_t,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3065,9 +3099,9 @@ XS(_wrap_svn_ra_reporter_t_set_path_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter_t_set_path_set" "', argument " "1"" of type '" "svn_ra_reporter_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter_t_set_path_set" "', argument " "1"" of type '" "struct svn_ra_reporter_t *""'");
}
- arg1 = (svn_ra_reporter_t *)(argp1);
+ arg1 = (struct svn_ra_reporter_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -3089,7 +3123,7 @@ XS(_wrap_svn_ra_reporter_t_set_path_set) {
XS(_wrap_svn_ra_reporter_t_set_path_get) {
{
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3101,9 +3135,9 @@ XS(_wrap_svn_ra_reporter_t_set_path_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter_t_set_path_get" "', argument " "1"" of type '" "svn_ra_reporter_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter_t_set_path_get" "', argument " "1"" of type '" "struct svn_ra_reporter_t *""'");
}
- arg1 = (svn_ra_reporter_t *)(argp1);
+ arg1 = (struct svn_ra_reporter_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_boolean_t,apr_pool_t *)) ((arg1)->set_path);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -3117,7 +3151,7 @@ XS(_wrap_svn_ra_reporter_t_set_path_get) {
XS(_wrap_svn_ra_reporter_t_delete_path_set) {
{
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3129,9 +3163,9 @@ XS(_wrap_svn_ra_reporter_t_delete_path_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter_t_delete_path_set" "', argument " "1"" of type '" "svn_ra_reporter_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter_t_delete_path_set" "', argument " "1"" of type '" "struct svn_ra_reporter_t *""'");
}
- arg1 = (svn_ra_reporter_t *)(argp1);
+ arg1 = (struct svn_ra_reporter_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -3153,7 +3187,7 @@ XS(_wrap_svn_ra_reporter_t_delete_path_set) {
XS(_wrap_svn_ra_reporter_t_delete_path_get) {
{
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3165,9 +3199,9 @@ XS(_wrap_svn_ra_reporter_t_delete_path_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter_t_delete_path_get" "', argument " "1"" of type '" "svn_ra_reporter_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter_t_delete_path_get" "', argument " "1"" of type '" "struct svn_ra_reporter_t *""'");
}
- arg1 = (svn_ra_reporter_t *)(argp1);
+ arg1 = (struct svn_ra_reporter_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,apr_pool_t *)) ((arg1)->delete_path);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -3181,7 +3215,7 @@ XS(_wrap_svn_ra_reporter_t_delete_path_get) {
XS(_wrap_svn_ra_reporter_t_link_path_set) {
{
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,char const *,svn_revnum_t,svn_boolean_t,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,char const *,svn_revnum_t,svn_boolean_t,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3193,9 +3227,9 @@ XS(_wrap_svn_ra_reporter_t_link_path_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter_t_link_path_set" "', argument " "1"" of type '" "svn_ra_reporter_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter_t_link_path_set" "', argument " "1"" of type '" "struct svn_ra_reporter_t *""'");
}
- arg1 = (svn_ra_reporter_t *)(argp1);
+ arg1 = (struct svn_ra_reporter_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -3217,7 +3251,7 @@ XS(_wrap_svn_ra_reporter_t_link_path_set) {
XS(_wrap_svn_ra_reporter_t_link_path_get) {
{
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3229,9 +3263,9 @@ XS(_wrap_svn_ra_reporter_t_link_path_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter_t_link_path_get" "', argument " "1"" of type '" "svn_ra_reporter_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter_t_link_path_get" "', argument " "1"" of type '" "struct svn_ra_reporter_t *""'");
}
- arg1 = (svn_ra_reporter_t *)(argp1);
+ arg1 = (struct svn_ra_reporter_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,char const *,svn_revnum_t,svn_boolean_t,apr_pool_t *)) ((arg1)->link_path);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -3245,7 +3279,7 @@ XS(_wrap_svn_ra_reporter_t_link_path_get) {
XS(_wrap_svn_ra_reporter_t_finish_report_set) {
{
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3257,9 +3291,9 @@ XS(_wrap_svn_ra_reporter_t_finish_report_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter_t_finish_report_set" "', argument " "1"" of type '" "svn_ra_reporter_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter_t_finish_report_set" "', argument " "1"" of type '" "struct svn_ra_reporter_t *""'");
}
- arg1 = (svn_ra_reporter_t *)(argp1);
+ arg1 = (struct svn_ra_reporter_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -3281,7 +3315,7 @@ XS(_wrap_svn_ra_reporter_t_finish_report_set) {
XS(_wrap_svn_ra_reporter_t_finish_report_get) {
{
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3293,9 +3327,9 @@ XS(_wrap_svn_ra_reporter_t_finish_report_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter_t_finish_report_get" "', argument " "1"" of type '" "svn_ra_reporter_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter_t_finish_report_get" "', argument " "1"" of type '" "struct svn_ra_reporter_t *""'");
}
- arg1 = (svn_ra_reporter_t *)(argp1);
+ arg1 = (struct svn_ra_reporter_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_pool_t *)) ((arg1)->finish_report);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -3309,7 +3343,7 @@ XS(_wrap_svn_ra_reporter_t_finish_report_get) {
XS(_wrap_svn_ra_reporter_t_abort_report_set) {
{
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3321,9 +3355,9 @@ XS(_wrap_svn_ra_reporter_t_abort_report_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter_t_abort_report_set" "', argument " "1"" of type '" "svn_ra_reporter_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter_t_abort_report_set" "', argument " "1"" of type '" "struct svn_ra_reporter_t *""'");
}
- arg1 = (svn_ra_reporter_t *)(argp1);
+ arg1 = (struct svn_ra_reporter_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -3345,7 +3379,7 @@ XS(_wrap_svn_ra_reporter_t_abort_report_set) {
XS(_wrap_svn_ra_reporter_t_abort_report_get) {
{
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3357,9 +3391,9 @@ XS(_wrap_svn_ra_reporter_t_abort_report_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter_t_abort_report_get" "', argument " "1"" of type '" "svn_ra_reporter_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_reporter_t_abort_report_get" "', argument " "1"" of type '" "struct svn_ra_reporter_t *""'");
}
- arg1 = (svn_ra_reporter_t *)(argp1);
+ arg1 = (struct svn_ra_reporter_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_pool_t *)) ((arg1)->abort_report);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -3374,14 +3408,14 @@ XS(_wrap_svn_ra_reporter_t_abort_report_get) {
XS(_wrap_new_svn_ra_reporter_t) {
{
int argvi = 0;
- svn_ra_reporter_t *result = 0 ;
+ struct svn_ra_reporter_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_ra_reporter_t();");
}
{
- result = (svn_ra_reporter_t *)calloc(1, sizeof(svn_ra_reporter_t));
+ result = (struct svn_ra_reporter_t *)calloc(1, sizeof(struct svn_ra_reporter_t));
@@ -3396,7 +3430,7 @@ XS(_wrap_new_svn_ra_reporter_t) {
XS(_wrap_delete_svn_ra_reporter_t) {
{
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3407,9 +3441,9 @@ XS(_wrap_delete_svn_ra_reporter_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_reporter_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_ra_reporter_t" "', argument " "1"" of type '" "svn_ra_reporter_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_ra_reporter_t" "', argument " "1"" of type '" "struct svn_ra_reporter_t *""'");
}
- arg1 = (svn_ra_reporter_t *)(argp1);
+ arg1 = (struct svn_ra_reporter_t *)(argp1);
{
free((char *) arg1);
@@ -3428,7 +3462,7 @@ XS(_wrap_delete_svn_ra_reporter_t) {
XS(_wrap_svn_ra_callbacks2_t_open_tmp_file_set) {
{
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(apr_file_t **,void *,apr_pool_t *) = (svn_error_t *(*)(apr_file_t **,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3440,9 +3474,9 @@ XS(_wrap_svn_ra_callbacks2_t_open_tmp_file_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_open_tmp_file_set" "', argument " "1"" of type '" "svn_ra_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_open_tmp_file_set" "', argument " "1"" of type '" "struct svn_ra_callbacks2_t *""'");
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_p_apr_file_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -3464,7 +3498,7 @@ XS(_wrap_svn_ra_callbacks2_t_open_tmp_file_set) {
XS(_wrap_svn_ra_callbacks2_t_open_tmp_file_get) {
{
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3476,9 +3510,9 @@ XS(_wrap_svn_ra_callbacks2_t_open_tmp_file_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_open_tmp_file_get" "', argument " "1"" of type '" "svn_ra_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_open_tmp_file_get" "', argument " "1"" of type '" "struct svn_ra_callbacks2_t *""'");
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
result = (svn_error_t *(*)(apr_file_t **,void *,apr_pool_t *)) ((arg1)->open_tmp_file);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_apr_file_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -3492,7 +3526,7 @@ XS(_wrap_svn_ra_callbacks2_t_open_tmp_file_get) {
XS(_wrap_svn_ra_callbacks2_t_auth_baton_set) {
{
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_auth_baton_t *arg2 = (svn_auth_baton_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3506,9 +3540,9 @@ XS(_wrap_svn_ra_callbacks2_t_auth_baton_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_auth_baton_set" "', argument " "1"" of type '" "svn_ra_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_auth_baton_set" "', argument " "1"" of type '" "struct svn_ra_callbacks2_t *""'");
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_auth_baton_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_ra_callbacks2_t_auth_baton_set" "', argument " "2"" of type '" "svn_auth_baton_t *""'");
@@ -3529,7 +3563,7 @@ XS(_wrap_svn_ra_callbacks2_t_auth_baton_set) {
XS(_wrap_svn_ra_callbacks2_t_auth_baton_get) {
{
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3541,9 +3575,9 @@ XS(_wrap_svn_ra_callbacks2_t_auth_baton_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_auth_baton_get" "', argument " "1"" of type '" "svn_ra_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_auth_baton_get" "', argument " "1"" of type '" "struct svn_ra_callbacks2_t *""'");
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
result = (svn_auth_baton_t *) ((arg1)->auth_baton);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_auth_baton_t, 0 | 0); argvi++ ;
@@ -3557,7 +3591,7 @@ XS(_wrap_svn_ra_callbacks2_t_auth_baton_get) {
XS(_wrap_svn_ra_callbacks2_t_get_wc_prop_set) {
{
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_ra_get_wc_prop_func_t arg2 = (svn_ra_get_wc_prop_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3569,9 +3603,9 @@ XS(_wrap_svn_ra_callbacks2_t_get_wc_prop_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_get_wc_prop_set" "', argument " "1"" of type '" "svn_ra_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_get_wc_prop_set" "', argument " "1"" of type '" "struct svn_ra_callbacks2_t *""'");
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -3593,7 +3627,7 @@ XS(_wrap_svn_ra_callbacks2_t_get_wc_prop_set) {
XS(_wrap_svn_ra_callbacks2_t_get_wc_prop_get) {
{
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3605,9 +3639,9 @@ XS(_wrap_svn_ra_callbacks2_t_get_wc_prop_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_get_wc_prop_get" "', argument " "1"" of type '" "svn_ra_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_get_wc_prop_get" "', argument " "1"" of type '" "struct svn_ra_callbacks2_t *""'");
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
result = (svn_ra_get_wc_prop_func_t) ((arg1)->get_wc_prop);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -3621,7 +3655,7 @@ XS(_wrap_svn_ra_callbacks2_t_get_wc_prop_get) {
XS(_wrap_svn_ra_callbacks2_t_set_wc_prop_set) {
{
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_ra_set_wc_prop_func_t arg2 = (svn_ra_set_wc_prop_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3633,9 +3667,9 @@ XS(_wrap_svn_ra_callbacks2_t_set_wc_prop_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_set_wc_prop_set" "', argument " "1"" of type '" "svn_ra_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_set_wc_prop_set" "', argument " "1"" of type '" "struct svn_ra_callbacks2_t *""'");
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -3657,7 +3691,7 @@ XS(_wrap_svn_ra_callbacks2_t_set_wc_prop_set) {
XS(_wrap_svn_ra_callbacks2_t_set_wc_prop_get) {
{
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3669,9 +3703,9 @@ XS(_wrap_svn_ra_callbacks2_t_set_wc_prop_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_set_wc_prop_get" "', argument " "1"" of type '" "svn_ra_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_set_wc_prop_get" "', argument " "1"" of type '" "struct svn_ra_callbacks2_t *""'");
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
result = (svn_ra_set_wc_prop_func_t) ((arg1)->set_wc_prop);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -3685,7 +3719,7 @@ XS(_wrap_svn_ra_callbacks2_t_set_wc_prop_get) {
XS(_wrap_svn_ra_callbacks2_t_push_wc_prop_set) {
{
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_ra_push_wc_prop_func_t arg2 = (svn_ra_push_wc_prop_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3697,9 +3731,9 @@ XS(_wrap_svn_ra_callbacks2_t_push_wc_prop_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_push_wc_prop_set" "', argument " "1"" of type '" "svn_ra_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_push_wc_prop_set" "', argument " "1"" of type '" "struct svn_ra_callbacks2_t *""'");
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -3721,7 +3755,7 @@ XS(_wrap_svn_ra_callbacks2_t_push_wc_prop_set) {
XS(_wrap_svn_ra_callbacks2_t_push_wc_prop_get) {
{
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3733,9 +3767,9 @@ XS(_wrap_svn_ra_callbacks2_t_push_wc_prop_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_push_wc_prop_get" "', argument " "1"" of type '" "svn_ra_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_push_wc_prop_get" "', argument " "1"" of type '" "struct svn_ra_callbacks2_t *""'");
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
result = (svn_ra_push_wc_prop_func_t) ((arg1)->push_wc_prop);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -3749,7 +3783,7 @@ XS(_wrap_svn_ra_callbacks2_t_push_wc_prop_get) {
XS(_wrap_svn_ra_callbacks2_t_invalidate_wc_props_set) {
{
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_ra_invalidate_wc_props_func_t arg2 = (svn_ra_invalidate_wc_props_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3761,9 +3795,9 @@ XS(_wrap_svn_ra_callbacks2_t_invalidate_wc_props_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_invalidate_wc_props_set" "', argument " "1"" of type '" "svn_ra_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_invalidate_wc_props_set" "', argument " "1"" of type '" "struct svn_ra_callbacks2_t *""'");
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -3785,7 +3819,7 @@ XS(_wrap_svn_ra_callbacks2_t_invalidate_wc_props_set) {
XS(_wrap_svn_ra_callbacks2_t_invalidate_wc_props_get) {
{
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3797,9 +3831,9 @@ XS(_wrap_svn_ra_callbacks2_t_invalidate_wc_props_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_invalidate_wc_props_get" "', argument " "1"" of type '" "svn_ra_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_invalidate_wc_props_get" "', argument " "1"" of type '" "struct svn_ra_callbacks2_t *""'");
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
result = (svn_ra_invalidate_wc_props_func_t) ((arg1)->invalidate_wc_props);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -3813,7 +3847,7 @@ XS(_wrap_svn_ra_callbacks2_t_invalidate_wc_props_get) {
XS(_wrap_svn_ra_callbacks2_t_progress_func_set) {
{
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_ra_progress_notify_func_t arg2 = (svn_ra_progress_notify_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3825,9 +3859,9 @@ XS(_wrap_svn_ra_callbacks2_t_progress_func_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_progress_func_set" "', argument " "1"" of type '" "svn_ra_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_progress_func_set" "', argument " "1"" of type '" "struct svn_ra_callbacks2_t *""'");
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_apr_off_t_apr_off_t_p_void_p_apr_pool_t__void);
if (!SWIG_IsOK(res)) {
@@ -3849,7 +3883,7 @@ XS(_wrap_svn_ra_callbacks2_t_progress_func_set) {
XS(_wrap_svn_ra_callbacks2_t_progress_func_get) {
{
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3861,9 +3895,9 @@ XS(_wrap_svn_ra_callbacks2_t_progress_func_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_progress_func_get" "', argument " "1"" of type '" "svn_ra_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_progress_func_get" "', argument " "1"" of type '" "struct svn_ra_callbacks2_t *""'");
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
result = (svn_ra_progress_notify_func_t) ((arg1)->progress_func);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_apr_off_t_apr_off_t_p_void_p_apr_pool_t__void); argvi++ ;
@@ -3877,7 +3911,7 @@ XS(_wrap_svn_ra_callbacks2_t_progress_func_get) {
XS(_wrap_svn_ra_callbacks2_t_progress_baton_set) {
{
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
void *arg2 = (void *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3890,9 +3924,9 @@ XS(_wrap_svn_ra_callbacks2_t_progress_baton_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_progress_baton_set" "', argument " "1"" of type '" "svn_ra_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_progress_baton_set" "', argument " "1"" of type '" "struct svn_ra_callbacks2_t *""'");
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg2), 0, SWIG_POINTER_DISOWN);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_ra_callbacks2_t_progress_baton_set" "', argument " "2"" of type '" "void *""'");
@@ -3912,7 +3946,7 @@ XS(_wrap_svn_ra_callbacks2_t_progress_baton_set) {
XS(_wrap_svn_ra_callbacks2_t_progress_baton_get) {
{
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3924,9 +3958,9 @@ XS(_wrap_svn_ra_callbacks2_t_progress_baton_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_progress_baton_get" "', argument " "1"" of type '" "svn_ra_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_progress_baton_get" "', argument " "1"" of type '" "struct svn_ra_callbacks2_t *""'");
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
result = (void *) ((arg1)->progress_baton);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 | 0); argvi++ ;
@@ -3940,7 +3974,7 @@ XS(_wrap_svn_ra_callbacks2_t_progress_baton_get) {
XS(_wrap_svn_ra_callbacks2_t_cancel_func_set) {
{
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_cancel_func_t arg2 = (svn_cancel_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3952,9 +3986,9 @@ XS(_wrap_svn_ra_callbacks2_t_cancel_func_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_cancel_func_set" "', argument " "1"" of type '" "svn_ra_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_cancel_func_set" "', argument " "1"" of type '" "struct svn_ra_callbacks2_t *""'");
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -3976,7 +4010,7 @@ XS(_wrap_svn_ra_callbacks2_t_cancel_func_set) {
XS(_wrap_svn_ra_callbacks2_t_cancel_func_get) {
{
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -3988,9 +4022,9 @@ XS(_wrap_svn_ra_callbacks2_t_cancel_func_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_cancel_func_get" "', argument " "1"" of type '" "svn_ra_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_cancel_func_get" "', argument " "1"" of type '" "struct svn_ra_callbacks2_t *""'");
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
result = (svn_cancel_func_t) ((arg1)->cancel_func);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__p_svn_error_t); argvi++ ;
@@ -4004,7 +4038,7 @@ XS(_wrap_svn_ra_callbacks2_t_cancel_func_get) {
XS(_wrap_svn_ra_callbacks2_t_get_client_string_set) {
{
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_ra_get_client_string_func_t arg2 = (svn_ra_get_client_string_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4016,9 +4050,9 @@ XS(_wrap_svn_ra_callbacks2_t_get_client_string_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_get_client_string_set" "', argument " "1"" of type '" "svn_ra_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_get_client_string_set" "', argument " "1"" of type '" "struct svn_ra_callbacks2_t *""'");
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4040,7 +4074,7 @@ XS(_wrap_svn_ra_callbacks2_t_get_client_string_set) {
XS(_wrap_svn_ra_callbacks2_t_get_client_string_get) {
{
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4052,9 +4086,9 @@ XS(_wrap_svn_ra_callbacks2_t_get_client_string_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_get_client_string_get" "', argument " "1"" of type '" "svn_ra_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_get_client_string_get" "', argument " "1"" of type '" "struct svn_ra_callbacks2_t *""'");
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
result = (svn_ra_get_client_string_func_t) ((arg1)->get_client_string);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_p_q_const__char_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -4066,17 +4100,81 @@ XS(_wrap_svn_ra_callbacks2_t_get_client_string_get) {
}
+XS(_wrap_svn_ra_callbacks2_t_get_wc_contents_set) {
+ {
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
+ svn_ra_get_wc_contents_func_t arg2 = (svn_ra_get_wc_contents_func_t) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_ra_callbacks2_t_get_wc_contents_set(self,get_wc_contents);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_get_wc_contents_set" "', argument " "1"" of type '" "struct svn_ra_callbacks2_t *""'");
+ }
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_ra_callbacks2_t_get_wc_contents_set" "', argument " "2"" of type '" "svn_ra_get_wc_contents_func_t""'");
+ }
+ }
+ if (arg1) (arg1)->get_wc_contents = arg2;
+ ST(argvi) = sv_newmortal();
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_ra_callbacks2_t_get_wc_contents_get) {
+ {
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ svn_ra_get_wc_contents_func_t result;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_ra_callbacks2_t_get_wc_contents_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks2_t_get_wc_contents_get" "', argument " "1"" of type '" "struct svn_ra_callbacks2_t *""'");
+ }
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
+ result = (svn_ra_get_wc_contents_func_t) ((arg1)->get_wc_contents);
+ ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_new_svn_ra_callbacks2_t) {
{
int argvi = 0;
- svn_ra_callbacks2_t *result = 0 ;
+ struct svn_ra_callbacks2_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_ra_callbacks2_t();");
}
{
- result = (svn_ra_callbacks2_t *)calloc(1, sizeof(svn_ra_callbacks2_t));
+ result = (struct svn_ra_callbacks2_t *)calloc(1, sizeof(struct svn_ra_callbacks2_t));
@@ -4091,7 +4189,7 @@ XS(_wrap_new_svn_ra_callbacks2_t) {
XS(_wrap_delete_svn_ra_callbacks2_t) {
{
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4102,9 +4200,9 @@ XS(_wrap_delete_svn_ra_callbacks2_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_ra_callbacks2_t" "', argument " "1"" of type '" "svn_ra_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_ra_callbacks2_t" "', argument " "1"" of type '" "struct svn_ra_callbacks2_t *""'");
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
{
free((char *) arg1);
@@ -4123,7 +4221,7 @@ XS(_wrap_delete_svn_ra_callbacks2_t) {
XS(_wrap_svn_ra_callbacks_t_open_tmp_file_set) {
{
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
svn_error_t *(*arg2)(apr_file_t **,void *,apr_pool_t *) = (svn_error_t *(*)(apr_file_t **,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4135,9 +4233,9 @@ XS(_wrap_svn_ra_callbacks_t_open_tmp_file_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks_t_open_tmp_file_set" "', argument " "1"" of type '" "svn_ra_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks_t_open_tmp_file_set" "', argument " "1"" of type '" "struct svn_ra_callbacks_t *""'");
}
- arg1 = (svn_ra_callbacks_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_p_apr_file_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4159,7 +4257,7 @@ XS(_wrap_svn_ra_callbacks_t_open_tmp_file_set) {
XS(_wrap_svn_ra_callbacks_t_open_tmp_file_get) {
{
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4171,9 +4269,9 @@ XS(_wrap_svn_ra_callbacks_t_open_tmp_file_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks_t_open_tmp_file_get" "', argument " "1"" of type '" "svn_ra_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks_t_open_tmp_file_get" "', argument " "1"" of type '" "struct svn_ra_callbacks_t *""'");
}
- arg1 = (svn_ra_callbacks_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks_t *)(argp1);
result = (svn_error_t *(*)(apr_file_t **,void *,apr_pool_t *)) ((arg1)->open_tmp_file);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_apr_file_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -4187,7 +4285,7 @@ XS(_wrap_svn_ra_callbacks_t_open_tmp_file_get) {
XS(_wrap_svn_ra_callbacks_t_auth_baton_set) {
{
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
svn_auth_baton_t *arg2 = (svn_auth_baton_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4201,9 +4299,9 @@ XS(_wrap_svn_ra_callbacks_t_auth_baton_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks_t_auth_baton_set" "', argument " "1"" of type '" "svn_ra_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks_t_auth_baton_set" "', argument " "1"" of type '" "struct svn_ra_callbacks_t *""'");
}
- arg1 = (svn_ra_callbacks_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_auth_baton_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_ra_callbacks_t_auth_baton_set" "', argument " "2"" of type '" "svn_auth_baton_t *""'");
@@ -4224,7 +4322,7 @@ XS(_wrap_svn_ra_callbacks_t_auth_baton_set) {
XS(_wrap_svn_ra_callbacks_t_auth_baton_get) {
{
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4236,9 +4334,9 @@ XS(_wrap_svn_ra_callbacks_t_auth_baton_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks_t_auth_baton_get" "', argument " "1"" of type '" "svn_ra_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks_t_auth_baton_get" "', argument " "1"" of type '" "struct svn_ra_callbacks_t *""'");
}
- arg1 = (svn_ra_callbacks_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks_t *)(argp1);
result = (svn_auth_baton_t *) ((arg1)->auth_baton);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_auth_baton_t, 0 | 0); argvi++ ;
@@ -4252,7 +4350,7 @@ XS(_wrap_svn_ra_callbacks_t_auth_baton_get) {
XS(_wrap_svn_ra_callbacks_t_get_wc_prop_set) {
{
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
svn_ra_get_wc_prop_func_t arg2 = (svn_ra_get_wc_prop_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4264,9 +4362,9 @@ XS(_wrap_svn_ra_callbacks_t_get_wc_prop_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks_t_get_wc_prop_set" "', argument " "1"" of type '" "svn_ra_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks_t_get_wc_prop_set" "', argument " "1"" of type '" "struct svn_ra_callbacks_t *""'");
}
- arg1 = (svn_ra_callbacks_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4288,7 +4386,7 @@ XS(_wrap_svn_ra_callbacks_t_get_wc_prop_set) {
XS(_wrap_svn_ra_callbacks_t_get_wc_prop_get) {
{
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4300,9 +4398,9 @@ XS(_wrap_svn_ra_callbacks_t_get_wc_prop_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks_t_get_wc_prop_get" "', argument " "1"" of type '" "svn_ra_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks_t_get_wc_prop_get" "', argument " "1"" of type '" "struct svn_ra_callbacks_t *""'");
}
- arg1 = (svn_ra_callbacks_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks_t *)(argp1);
result = (svn_ra_get_wc_prop_func_t) ((arg1)->get_wc_prop);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -4316,7 +4414,7 @@ XS(_wrap_svn_ra_callbacks_t_get_wc_prop_get) {
XS(_wrap_svn_ra_callbacks_t_set_wc_prop_set) {
{
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
svn_ra_set_wc_prop_func_t arg2 = (svn_ra_set_wc_prop_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4328,9 +4426,9 @@ XS(_wrap_svn_ra_callbacks_t_set_wc_prop_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks_t_set_wc_prop_set" "', argument " "1"" of type '" "svn_ra_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks_t_set_wc_prop_set" "', argument " "1"" of type '" "struct svn_ra_callbacks_t *""'");
}
- arg1 = (svn_ra_callbacks_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4352,7 +4450,7 @@ XS(_wrap_svn_ra_callbacks_t_set_wc_prop_set) {
XS(_wrap_svn_ra_callbacks_t_set_wc_prop_get) {
{
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4364,9 +4462,9 @@ XS(_wrap_svn_ra_callbacks_t_set_wc_prop_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks_t_set_wc_prop_get" "', argument " "1"" of type '" "svn_ra_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks_t_set_wc_prop_get" "', argument " "1"" of type '" "struct svn_ra_callbacks_t *""'");
}
- arg1 = (svn_ra_callbacks_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks_t *)(argp1);
result = (svn_ra_set_wc_prop_func_t) ((arg1)->set_wc_prop);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -4380,7 +4478,7 @@ XS(_wrap_svn_ra_callbacks_t_set_wc_prop_get) {
XS(_wrap_svn_ra_callbacks_t_push_wc_prop_set) {
{
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
svn_ra_push_wc_prop_func_t arg2 = (svn_ra_push_wc_prop_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4392,9 +4490,9 @@ XS(_wrap_svn_ra_callbacks_t_push_wc_prop_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks_t_push_wc_prop_set" "', argument " "1"" of type '" "svn_ra_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks_t_push_wc_prop_set" "', argument " "1"" of type '" "struct svn_ra_callbacks_t *""'");
}
- arg1 = (svn_ra_callbacks_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4416,7 +4514,7 @@ XS(_wrap_svn_ra_callbacks_t_push_wc_prop_set) {
XS(_wrap_svn_ra_callbacks_t_push_wc_prop_get) {
{
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4428,9 +4526,9 @@ XS(_wrap_svn_ra_callbacks_t_push_wc_prop_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks_t_push_wc_prop_get" "', argument " "1"" of type '" "svn_ra_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks_t_push_wc_prop_get" "', argument " "1"" of type '" "struct svn_ra_callbacks_t *""'");
}
- arg1 = (svn_ra_callbacks_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks_t *)(argp1);
result = (svn_ra_push_wc_prop_func_t) ((arg1)->push_wc_prop);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -4444,7 +4542,7 @@ XS(_wrap_svn_ra_callbacks_t_push_wc_prop_get) {
XS(_wrap_svn_ra_callbacks_t_invalidate_wc_props_set) {
{
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
svn_ra_invalidate_wc_props_func_t arg2 = (svn_ra_invalidate_wc_props_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4456,9 +4554,9 @@ XS(_wrap_svn_ra_callbacks_t_invalidate_wc_props_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks_t_invalidate_wc_props_set" "', argument " "1"" of type '" "svn_ra_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks_t_invalidate_wc_props_set" "', argument " "1"" of type '" "struct svn_ra_callbacks_t *""'");
}
- arg1 = (svn_ra_callbacks_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4480,7 +4578,7 @@ XS(_wrap_svn_ra_callbacks_t_invalidate_wc_props_set) {
XS(_wrap_svn_ra_callbacks_t_invalidate_wc_props_get) {
{
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4492,9 +4590,9 @@ XS(_wrap_svn_ra_callbacks_t_invalidate_wc_props_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks_t_invalidate_wc_props_get" "', argument " "1"" of type '" "svn_ra_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_callbacks_t_invalidate_wc_props_get" "', argument " "1"" of type '" "struct svn_ra_callbacks_t *""'");
}
- arg1 = (svn_ra_callbacks_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks_t *)(argp1);
result = (svn_ra_invalidate_wc_props_func_t) ((arg1)->invalidate_wc_props);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -4509,14 +4607,14 @@ XS(_wrap_svn_ra_callbacks_t_invalidate_wc_props_get) {
XS(_wrap_new_svn_ra_callbacks_t) {
{
int argvi = 0;
- svn_ra_callbacks_t *result = 0 ;
+ struct svn_ra_callbacks_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_ra_callbacks_t();");
}
{
- result = (svn_ra_callbacks_t *)calloc(1, sizeof(svn_ra_callbacks_t));
+ result = (struct svn_ra_callbacks_t *)calloc(1, sizeof(struct svn_ra_callbacks_t));
@@ -4531,7 +4629,7 @@ XS(_wrap_new_svn_ra_callbacks_t) {
XS(_wrap_delete_svn_ra_callbacks_t) {
{
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4542,9 +4640,9 @@ XS(_wrap_delete_svn_ra_callbacks_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_callbacks_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_ra_callbacks_t" "', argument " "1"" of type '" "svn_ra_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_ra_callbacks_t" "', argument " "1"" of type '" "struct svn_ra_callbacks_t *""'");
}
- arg1 = (svn_ra_callbacks_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks_t *)(argp1);
{
free((char *) arg1);
@@ -5906,9 +6004,6 @@ XS(_wrap_svn_ra_get_commit_editor3) {
int res1 = 0 ;
svn_delta_editor_t *temp2 ;
void *temp3 ;
- void *argp4 = 0 ;
- int res4 = 0 ;
- int res6 ;
int val8 ;
int ecode8 = 0 ;
int argvi = 0;
@@ -5920,39 +6015,34 @@ XS(_wrap_svn_ra_get_commit_editor3) {
}
arg2 = &temp2;
arg3 = &temp3;
- if ((items < 6) || (items > 7)) {
- SWIG_croak("Usage: svn_ra_get_commit_editor3(session,revprop_table,callback,callback_baton,lock_tokens,keep_locks,pool);");
+ if ((items < 5) || (items > 6)) {
+ SWIG_croak("Usage: svn_ra_get_commit_editor3(session,revprop_table,commit_callback,commit_baton,lock_tokens,keep_locks,pool);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_session_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_get_commit_editor3" "', argument " "1"" of type '" "svn_ra_session_t *""'");
}
arg1 = (svn_ra_session_t *)(argp1);
- res4 = SWIG_ConvertPtr(ST(1), &argp4,SWIGTYPE_p_apr_hash_t, 0 | 0 );
- if (!SWIG_IsOK(res4)) {
- SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_ra_get_commit_editor3" "', argument " "4"" of type '" "apr_hash_t *""'");
- }
- arg4 = (apr_hash_t *)(argp4);
{
- int res = SWIG_ConvertFunctionPtr(ST(2), (void**)(&arg5), SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_ra_get_commit_editor3" "', argument " "5"" of type '" "svn_commit_callback2_t""'");
- }
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg4 = svn_swig_pl_hash_to_prophash(ST(1), _global_pool);
}
- res6 = SWIG_ConvertPtr(ST(3),SWIG_as_voidptrptr(&arg6), 0, 0);
- if (!SWIG_IsOK(res6)) {
- SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_ra_get_commit_editor3" "', argument " "6"" of type '" "void *""'");
+ {
+ arg5 = svn_swig_pl_thunk_commit_callback2;
+ arg6 = (void *)ST(2);
+ svn_swig_pl_hold_ref_in_pool (_global_pool, ST(2));
}
{
/* PERL-FIXME: Handle undef -> NULL. */
- arg7 = svn_swig_pl_strings_to_hash(ST(4), _global_pool);
+ arg7 = svn_swig_pl_strings_to_hash(ST(3), _global_pool);
}
- ecode8 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val8);
+ ecode8 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val8);
if (!SWIG_IsOK(ecode8)) {
SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "svn_ra_get_commit_editor3" "', argument " "8"" of type '" "svn_boolean_t""'");
}
arg8 = (svn_boolean_t)(val8);
- if (items > 6) {
+ if (items > 5) {
}
{
@@ -5990,8 +6080,6 @@ XS(_wrap_svn_ra_get_commit_editor3) {
-
-
XSRETURN(argvi);
fail:
@@ -6001,8 +6089,6 @@ XS(_wrap_svn_ra_get_commit_editor3) {
-
-
SWIG_croak_null();
}
}
@@ -6027,7 +6113,6 @@ XS(_wrap_svn_ra_get_commit_editor2) {
int res4 ;
char *buf4 = 0 ;
int alloc4 = 0 ;
- int res6 ;
int val8 ;
int ecode8 = 0 ;
int argvi = 0;
@@ -6039,8 +6124,8 @@ XS(_wrap_svn_ra_get_commit_editor2) {
}
arg2 = &temp2;
arg3 = &temp3;
- if ((items < 6) || (items > 7)) {
- SWIG_croak("Usage: svn_ra_get_commit_editor2(session,log_msg,callback,callback_baton,lock_tokens,keep_locks,pool);");
+ if ((items < 5) || (items > 6)) {
+ SWIG_croak("Usage: svn_ra_get_commit_editor2(session,log_msg,commit_callback,commit_baton,lock_tokens,keep_locks,pool);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_session_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
@@ -6053,25 +6138,20 @@ XS(_wrap_svn_ra_get_commit_editor2) {
}
arg4 = (char *)(buf4);
{
- int res = SWIG_ConvertFunctionPtr(ST(2), (void**)(&arg5), SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_ra_get_commit_editor2" "', argument " "5"" of type '" "svn_commit_callback2_t""'");
- }
- }
- res6 = SWIG_ConvertPtr(ST(3),SWIG_as_voidptrptr(&arg6), 0, 0);
- if (!SWIG_IsOK(res6)) {
- SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_ra_get_commit_editor2" "', argument " "6"" of type '" "void *""'");
+ arg5 = svn_swig_pl_thunk_commit_callback2;
+ arg6 = (void *)ST(2);
+ svn_swig_pl_hold_ref_in_pool (_global_pool, ST(2));
}
{
/* PERL-FIXME: Handle undef -> NULL. */
- arg7 = svn_swig_pl_strings_to_hash(ST(4), _global_pool);
+ arg7 = svn_swig_pl_strings_to_hash(ST(3), _global_pool);
}
- ecode8 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val8);
+ ecode8 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val8);
if (!SWIG_IsOK(ecode8)) {
SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "svn_ra_get_commit_editor2" "', argument " "8"" of type '" "svn_boolean_t""'");
}
arg8 = (svn_boolean_t)(val8);
- if (items > 6) {
+ if (items > 5) {
}
{
@@ -6109,8 +6189,6 @@ XS(_wrap_svn_ra_get_commit_editor2) {
-
-
XSRETURN(argvi);
fail:
@@ -6120,8 +6198,6 @@ XS(_wrap_svn_ra_get_commit_editor2) {
-
-
SWIG_croak_null();
}
}
@@ -6674,6 +6750,145 @@ XS(_wrap_svn_ra_get_mergeinfo) {
}
+XS(_wrap_svn_ra_do_update3) {
+ {
+ svn_ra_session_t *arg1 = (svn_ra_session_t *) 0 ;
+ svn_ra_reporter3_t **arg2 = (svn_ra_reporter3_t **) 0 ;
+ void **arg3 = (void **) 0 ;
+ svn_revnum_t arg4 ;
+ char *arg5 = (char *) 0 ;
+ svn_depth_t arg6 ;
+ svn_boolean_t arg7 ;
+ svn_boolean_t arg8 ;
+ svn_delta_editor_t *arg9 = (svn_delta_editor_t *) 0 ;
+ void *arg10 = (void *) 0 ;
+ apr_pool_t *arg11 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg12 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_ra_reporter3_t *temp2 ;
+ void *temp3 ;
+ long val4 ;
+ int ecode4 = 0 ;
+ int res5 ;
+ char *buf5 = 0 ;
+ int alloc5 = 0 ;
+ int val6 ;
+ int ecode6 = 0 ;
+ int val7 ;
+ int ecode7 = 0 ;
+ int val8 ;
+ int ecode8 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg11 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ {
+ _global_pool = arg12 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg2 = &temp2;
+ arg3 = &temp3;
+ if ((items < 7) || (items > 9)) {
+ SWIG_croak("Usage: svn_ra_do_update3(session,revision_to_update_to,update_target,depth,send_copyfrom_args,ignore_ancestry,update_editor,update_baton,result_pool,scratch_pool);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_session_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_do_update3" "', argument " "1"" of type '" "svn_ra_session_t *""'");
+ }
+ arg1 = (svn_ra_session_t *)(argp1);
+ ecode4 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_ra_do_update3" "', argument " "4"" of type '" "svn_revnum_t""'");
+ }
+ arg4 = (svn_revnum_t)(val4);
+ res5 = SWIG_AsCharPtrAndSize(ST(2), &buf5, NULL, &alloc5);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_ra_do_update3" "', argument " "5"" of type '" "char const *""'");
+ }
+ arg5 = (char *)(buf5);
+ ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val6);
+ if (!SWIG_IsOK(ecode6)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_ra_do_update3" "', argument " "6"" of type '" "svn_depth_t""'");
+ }
+ arg6 = (svn_depth_t)(val6);
+ ecode7 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val7);
+ if (!SWIG_IsOK(ecode7)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "svn_ra_do_update3" "', argument " "7"" of type '" "svn_boolean_t""'");
+ }
+ arg7 = (svn_boolean_t)(val7);
+ ecode8 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val8);
+ if (!SWIG_IsOK(ecode8)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "svn_ra_do_update3" "', argument " "8"" of type '" "svn_boolean_t""'");
+ }
+ arg8 = (svn_boolean_t)(val8);
+ {
+ svn_delta_make_editor(&arg9, &arg10, ST(6), _global_pool);
+ }
+ if (items > 7) {
+
+ }
+ if (items > 8) {
+
+ }
+ {
+ result = (svn_error_t *)svn_ra_do_update3(arg1,(struct svn_ra_reporter3_t const **)arg2,arg3,arg4,(char const *)arg5,arg6,arg7,arg8,(struct svn_delta_editor_t const *)arg9,arg10,arg11,arg12);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg2, SWIGTYPE_p_svn_ra_reporter3_t, 0); argvi++ ;
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg3, SWIGTYPE_p_void, 0); argvi++ ;
+ }
+
+
+
+
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_ra_do_update2) {
{
svn_ra_session_t *arg1 = (svn_ra_session_t *) 0 ;
@@ -6904,6 +7119,156 @@ XS(_wrap_svn_ra_do_update) {
}
+XS(_wrap_svn_ra_do_switch3) {
+ {
+ svn_ra_session_t *arg1 = (svn_ra_session_t *) 0 ;
+ svn_ra_reporter3_t **arg2 = (svn_ra_reporter3_t **) 0 ;
+ void **arg3 = (void **) 0 ;
+ svn_revnum_t arg4 ;
+ char *arg5 = (char *) 0 ;
+ svn_depth_t arg6 ;
+ char *arg7 = (char *) 0 ;
+ svn_boolean_t arg8 ;
+ svn_boolean_t arg9 ;
+ svn_delta_editor_t *arg10 = (svn_delta_editor_t *) 0 ;
+ void *arg11 = (void *) 0 ;
+ apr_pool_t *arg12 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg13 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_ra_reporter3_t *temp2 ;
+ void *temp3 ;
+ long val4 ;
+ int ecode4 = 0 ;
+ int res5 ;
+ char *buf5 = 0 ;
+ int alloc5 = 0 ;
+ int val6 ;
+ int ecode6 = 0 ;
+ int res7 ;
+ char *buf7 = 0 ;
+ int alloc7 = 0 ;
+ int val8 ;
+ int ecode8 = 0 ;
+ int val9 ;
+ int ecode9 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg12 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ {
+ _global_pool = arg13 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg2 = &temp2;
+ arg3 = &temp3;
+ if ((items < 8) || (items > 10)) {
+ SWIG_croak("Usage: svn_ra_do_switch3(session,revision_to_switch_to,switch_target,depth,switch_url,send_copyfrom_args,ignore_ancestry,switch_editor,switch_baton,result_pool,scratch_pool);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_session_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_do_switch3" "', argument " "1"" of type '" "svn_ra_session_t *""'");
+ }
+ arg1 = (svn_ra_session_t *)(argp1);
+ ecode4 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_ra_do_switch3" "', argument " "4"" of type '" "svn_revnum_t""'");
+ }
+ arg4 = (svn_revnum_t)(val4);
+ res5 = SWIG_AsCharPtrAndSize(ST(2), &buf5, NULL, &alloc5);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_ra_do_switch3" "', argument " "5"" of type '" "char const *""'");
+ }
+ arg5 = (char *)(buf5);
+ ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val6);
+ if (!SWIG_IsOK(ecode6)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_ra_do_switch3" "', argument " "6"" of type '" "svn_depth_t""'");
+ }
+ arg6 = (svn_depth_t)(val6);
+ res7 = SWIG_AsCharPtrAndSize(ST(4), &buf7, NULL, &alloc7);
+ if (!SWIG_IsOK(res7)) {
+ SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_ra_do_switch3" "', argument " "7"" of type '" "char const *""'");
+ }
+ arg7 = (char *)(buf7);
+ ecode8 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val8);
+ if (!SWIG_IsOK(ecode8)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "svn_ra_do_switch3" "', argument " "8"" of type '" "svn_boolean_t""'");
+ }
+ arg8 = (svn_boolean_t)(val8);
+ ecode9 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(6), &val9);
+ if (!SWIG_IsOK(ecode9)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "svn_ra_do_switch3" "', argument " "9"" of type '" "svn_boolean_t""'");
+ }
+ arg9 = (svn_boolean_t)(val9);
+ {
+ svn_delta_make_editor(&arg10, &arg11, ST(7), _global_pool);
+ }
+ if (items > 8) {
+
+ }
+ if (items > 9) {
+
+ }
+ {
+ result = (svn_error_t *)svn_ra_do_switch3(arg1,(struct svn_ra_reporter3_t const **)arg2,arg3,arg4,(char const *)arg5,arg6,(char const *)arg7,arg8,arg9,(struct svn_delta_editor_t const *)arg10,arg11,arg12,arg13);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg2, SWIGTYPE_p_svn_ra_reporter3_t, 0); argvi++ ;
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg3, SWIGTYPE_p_void, 0); argvi++ ;
+ }
+
+
+
+
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+
+ if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+
+ if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_ra_do_switch2) {
{
svn_ra_session_t *arg1 = (svn_ra_session_t *) 0 ;
@@ -7808,7 +8173,6 @@ XS(_wrap_svn_ra_get_log2) {
int ecode7 = 0 ;
int val8 ;
int ecode8 = 0 ;
- int res11 ;
int argvi = 0;
svn_error_t *result = 0 ;
dXSARGS;
@@ -7816,7 +8180,7 @@ XS(_wrap_svn_ra_get_log2) {
{
_global_pool = arg12 = svn_swig_pl_make_pool (ST(items-1));
}
- if ((items < 11) || (items > 12)) {
+ if ((items < 10) || (items > 11)) {
SWIG_croak("Usage: svn_ra_get_log2(session,paths,start,end,limit,discover_changed_paths,strict_node_history,include_merged_revisions,revprops,receiver,receiver_baton,pool);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_session_t, 0 | 0 );
@@ -7859,20 +8223,14 @@ XS(_wrap_svn_ra_get_log2) {
}
arg8 = (svn_boolean_t)(val8);
{
- arg9 = (apr_array_header_t *) svn_swig_pl_strings_to_array(ST(8),
- _global_pool);
+ arg9 = SvOK(ST(8)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(8), _global_pool) : NULL;
}
{
- int res = SWIG_ConvertFunctionPtr(ST(9), (void**)(&arg10), SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_ra_get_log2" "', argument " "10"" of type '" "svn_log_entry_receiver_t""'");
- }
- }
- res11 = SWIG_ConvertPtr(ST(10),SWIG_as_voidptrptr(&arg11), 0, 0);
- if (!SWIG_IsOK(res11)) {
- SWIG_exception_fail(SWIG_ArgError(res11), "in method '" "svn_ra_get_log2" "', argument " "11"" of type '" "void *""'");
+ arg10 = svn_swig_pl_thunk_log_entry_receiver;
+ arg11 = ST(9);
}
- if (items > 11) {
+ if (items > 10) {
}
{
@@ -7907,8 +8265,6 @@ XS(_wrap_svn_ra_get_log2) {
-
-
XSRETURN(argvi);
fail:
@@ -7921,8 +8277,6 @@ XS(_wrap_svn_ra_get_log2) {
-
-
SWIG_croak_null();
}
}
@@ -7999,7 +8353,7 @@ XS(_wrap_svn_ra_get_log) {
arg7 = (svn_boolean_t)(val7);
{
arg8 = svn_swig_pl_thunk_log_receiver;
- arg9 = (void *)ST(7);
+ arg9 = ST(7);
}
if (items > 8) {
@@ -9678,6 +10032,108 @@ XS(_wrap_svn_ra_get_deleted_rev) {
}
+XS(_wrap_svn_ra_get_inherited_props) {
+ {
+ svn_ra_session_t *arg1 = (svn_ra_session_t *) 0 ;
+ apr_array_header_t **arg2 = (apr_array_header_t **) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_revnum_t arg4 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ apr_array_header_t *temp2 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ long val4 ;
+ int ecode4 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg5 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ {
+ _global_pool = arg6 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg2 = &temp2;
+ if ((items < 3) || (items > 5)) {
+ SWIG_croak("Usage: svn_ra_get_inherited_props(session,path,revision,result_pool,scratch_pool);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_session_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_get_inherited_props" "', argument " "1"" of type '" "svn_ra_session_t *""'");
+ }
+ arg1 = (svn_ra_session_t *)(argp1);
+ res3 = SWIG_AsCharPtrAndSize(ST(1), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_ra_get_inherited_props" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = (char *)(buf3);
+ ecode4 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(2), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_ra_get_inherited_props" "', argument " "4"" of type '" "svn_revnum_t""'");
+ }
+ arg4 = (svn_revnum_t)(val4);
+ if (items > 3) {
+
+ }
+ if (items > 4) {
+
+ }
+ {
+ result = (svn_error_t *)svn_ra_get_inherited_props(arg1,arg2,(char const *)arg3,arg4,arg5,arg6);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ /* FIXME: Missing argout typemap: svn_ra_get_inherited_props arg 2 (apr_array_header_t **) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_ra_get_inherited_props is not implemented yet");
+
+ }
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_ra_has_capability) {
{
svn_ra_session_t *arg1 = (svn_ra_session_t *) 0 ;
@@ -9896,7 +10352,7 @@ XS(_wrap_svn_ra_print_ra_libraries) {
XS(_wrap_svn_ra_plugin_t_name_set) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9911,9 +10367,9 @@ XS(_wrap_svn_ra_plugin_t_name_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_name_set" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_name_set" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_ra_plugin_t_name_set" "', argument " "2"" of type '" "char const *""'");
@@ -9941,7 +10397,7 @@ XS(_wrap_svn_ra_plugin_t_name_set) {
XS(_wrap_svn_ra_plugin_t_name_get) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -9953,9 +10409,9 @@ XS(_wrap_svn_ra_plugin_t_name_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_name_get" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_name_get" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (char *) ((arg1)->name);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -9969,7 +10425,7 @@ XS(_wrap_svn_ra_plugin_t_name_get) {
XS(_wrap_svn_ra_plugin_t_description_set) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9984,9 +10440,9 @@ XS(_wrap_svn_ra_plugin_t_description_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_description_set" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_description_set" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_ra_plugin_t_description_set" "', argument " "2"" of type '" "char const *""'");
@@ -10014,7 +10470,7 @@ XS(_wrap_svn_ra_plugin_t_description_set) {
XS(_wrap_svn_ra_plugin_t_description_get) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10026,9 +10482,9 @@ XS(_wrap_svn_ra_plugin_t_description_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_description_get" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_description_get" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (char *) ((arg1)->description);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -10042,7 +10498,7 @@ XS(_wrap_svn_ra_plugin_t_description_get) {
XS(_wrap_svn_ra_plugin_t_open_set) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void **,char const *,svn_ra_callbacks_t const *,void *,apr_hash_t *,apr_pool_t *) = (svn_error_t *(*)(void **,char const *,svn_ra_callbacks_t const *,void *,apr_hash_t *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10054,9 +10510,9 @@ XS(_wrap_svn_ra_plugin_t_open_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_open_set" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_open_set" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_p_void_p_q_const__char_p_q_const__svn_ra_callbacks_t_p_void_p_apr_hash_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10078,7 +10534,7 @@ XS(_wrap_svn_ra_plugin_t_open_set) {
XS(_wrap_svn_ra_plugin_t_open_get) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10090,9 +10546,9 @@ XS(_wrap_svn_ra_plugin_t_open_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_open_get" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_open_get" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void **,char const *,svn_ra_callbacks_t const *,void *,apr_hash_t *,apr_pool_t *)) ((arg1)->open);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_void_p_q_const__char_p_q_const__svn_ra_callbacks_t_p_void_p_apr_hash_t_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -10106,7 +10562,7 @@ XS(_wrap_svn_ra_plugin_t_open_get) {
XS(_wrap_svn_ra_plugin_t_get_latest_revnum_set) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_revnum_t *,apr_pool_t *) = (svn_error_t *(*)(void *,svn_revnum_t *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10118,9 +10574,9 @@ XS(_wrap_svn_ra_plugin_t_get_latest_revnum_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_latest_revnum_set" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_latest_revnum_set" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_svn_revnum_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10142,7 +10598,7 @@ XS(_wrap_svn_ra_plugin_t_get_latest_revnum_set) {
XS(_wrap_svn_ra_plugin_t_get_latest_revnum_get) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10154,9 +10610,9 @@ XS(_wrap_svn_ra_plugin_t_get_latest_revnum_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_latest_revnum_get" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_latest_revnum_get" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_revnum_t *,apr_pool_t *)) ((arg1)->get_latest_revnum);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_svn_revnum_t_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -10170,7 +10626,7 @@ XS(_wrap_svn_ra_plugin_t_get_latest_revnum_get) {
XS(_wrap_svn_ra_plugin_t_get_dated_revision_set) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_revnum_t *,apr_time_t,apr_pool_t *) = (svn_error_t *(*)(void *,svn_revnum_t *,apr_time_t,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10182,9 +10638,9 @@ XS(_wrap_svn_ra_plugin_t_get_dated_revision_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_dated_revision_set" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_dated_revision_set" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_svn_revnum_t_apr_time_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10206,7 +10662,7 @@ XS(_wrap_svn_ra_plugin_t_get_dated_revision_set) {
XS(_wrap_svn_ra_plugin_t_get_dated_revision_get) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10218,9 +10674,9 @@ XS(_wrap_svn_ra_plugin_t_get_dated_revision_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_dated_revision_get" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_dated_revision_get" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_revnum_t *,apr_time_t,apr_pool_t *)) ((arg1)->get_dated_revision);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_svn_revnum_t_apr_time_t_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -10234,7 +10690,7 @@ XS(_wrap_svn_ra_plugin_t_get_dated_revision_get) {
XS(_wrap_svn_ra_plugin_t_change_rev_prop_set) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_revnum_t,char const *,svn_string_t const *,apr_pool_t *) = (svn_error_t *(*)(void *,svn_revnum_t,char const *,svn_string_t const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10246,9 +10702,9 @@ XS(_wrap_svn_ra_plugin_t_change_rev_prop_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_change_rev_prop_set" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_change_rev_prop_set" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_svn_revnum_t_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10270,7 +10726,7 @@ XS(_wrap_svn_ra_plugin_t_change_rev_prop_set) {
XS(_wrap_svn_ra_plugin_t_change_rev_prop_get) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10282,9 +10738,9 @@ XS(_wrap_svn_ra_plugin_t_change_rev_prop_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_change_rev_prop_get" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_change_rev_prop_get" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_revnum_t,char const *,svn_string_t const *,apr_pool_t *)) ((arg1)->change_rev_prop);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_svn_revnum_t_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -10298,7 +10754,7 @@ XS(_wrap_svn_ra_plugin_t_change_rev_prop_get) {
XS(_wrap_svn_ra_plugin_t_rev_proplist_set) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_revnum_t,apr_hash_t **,apr_pool_t *) = (svn_error_t *(*)(void *,svn_revnum_t,apr_hash_t **,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10310,9 +10766,9 @@ XS(_wrap_svn_ra_plugin_t_rev_proplist_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_rev_proplist_set" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_rev_proplist_set" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10334,7 +10790,7 @@ XS(_wrap_svn_ra_plugin_t_rev_proplist_set) {
XS(_wrap_svn_ra_plugin_t_rev_proplist_get) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10346,9 +10802,9 @@ XS(_wrap_svn_ra_plugin_t_rev_proplist_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_rev_proplist_get" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_rev_proplist_get" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_revnum_t,apr_hash_t **,apr_pool_t *)) ((arg1)->rev_proplist);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -10362,7 +10818,7 @@ XS(_wrap_svn_ra_plugin_t_rev_proplist_get) {
XS(_wrap_svn_ra_plugin_t_rev_prop_set) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_revnum_t,char const *,svn_string_t **,apr_pool_t *) = (svn_error_t *(*)(void *,svn_revnum_t,char const *,svn_string_t **,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10374,9 +10830,9 @@ XS(_wrap_svn_ra_plugin_t_rev_prop_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_rev_prop_set" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_rev_prop_set" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_svn_revnum_t_p_q_const__char_p_p_svn_string_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10398,7 +10854,7 @@ XS(_wrap_svn_ra_plugin_t_rev_prop_set) {
XS(_wrap_svn_ra_plugin_t_rev_prop_get) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10410,9 +10866,9 @@ XS(_wrap_svn_ra_plugin_t_rev_prop_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_rev_prop_get" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_rev_prop_get" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_revnum_t,char const *,svn_string_t **,apr_pool_t *)) ((arg1)->rev_prop);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_svn_revnum_t_p_q_const__char_p_p_svn_string_t_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -10426,7 +10882,7 @@ XS(_wrap_svn_ra_plugin_t_rev_prop_get) {
XS(_wrap_svn_ra_plugin_t_get_commit_editor_set) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_delta_editor_t const **,void **,char const *,svn_commit_callback_t,void *,apr_pool_t *) = (svn_error_t *(*)(void *,svn_delta_editor_t const **,void **,char const *,svn_commit_callback_t,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10438,9 +10894,9 @@ XS(_wrap_svn_ra_plugin_t_get_commit_editor_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_commit_editor_set" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_commit_editor_set" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_p_q_const__svn_delta_editor_t_p_p_void_p_q_const__char_svn_commit_callback_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10462,7 +10918,7 @@ XS(_wrap_svn_ra_plugin_t_get_commit_editor_set) {
XS(_wrap_svn_ra_plugin_t_get_commit_editor_get) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10474,9 +10930,9 @@ XS(_wrap_svn_ra_plugin_t_get_commit_editor_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_commit_editor_get" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_commit_editor_get" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_delta_editor_t const **,void **,char const *,svn_commit_callback_t,void *,apr_pool_t *)) ((arg1)->get_commit_editor);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_p_q_const__svn_delta_editor_t_p_p_void_p_q_const__char_svn_commit_callback_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -10490,7 +10946,7 @@ XS(_wrap_svn_ra_plugin_t_get_commit_editor_get) {
XS(_wrap_svn_ra_plugin_t_get_file_set) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_revnum_t,svn_stream_t *,svn_revnum_t *,apr_hash_t **,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_stream_t *,svn_revnum_t *,apr_hash_t **,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10502,9 +10958,9 @@ XS(_wrap_svn_ra_plugin_t_get_file_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_file_set" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_file_set" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_svn_stream_t_p_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10526,7 +10982,7 @@ XS(_wrap_svn_ra_plugin_t_get_file_set) {
XS(_wrap_svn_ra_plugin_t_get_file_get) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10538,9 +10994,9 @@ XS(_wrap_svn_ra_plugin_t_get_file_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_file_get" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_file_get" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_stream_t *,svn_revnum_t *,apr_hash_t **,apr_pool_t *)) ((arg1)->get_file);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_svn_stream_t_p_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -10554,7 +11010,7 @@ XS(_wrap_svn_ra_plugin_t_get_file_get) {
XS(_wrap_svn_ra_plugin_t_get_dir_set) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_revnum_t,apr_hash_t **,svn_revnum_t *,apr_hash_t **,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_revnum_t,apr_hash_t **,svn_revnum_t *,apr_hash_t **,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10566,9 +11022,9 @@ XS(_wrap_svn_ra_plugin_t_get_dir_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_dir_set" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_dir_set" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_p_apr_hash_t_p_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10590,7 +11046,7 @@ XS(_wrap_svn_ra_plugin_t_get_dir_set) {
XS(_wrap_svn_ra_plugin_t_get_dir_get) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10602,9 +11058,9 @@ XS(_wrap_svn_ra_plugin_t_get_dir_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_dir_get" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_dir_get" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,svn_revnum_t,apr_hash_t **,svn_revnum_t *,apr_hash_t **,apr_pool_t *)) ((arg1)->get_dir);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_p_apr_hash_t_p_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -10618,7 +11074,7 @@ XS(_wrap_svn_ra_plugin_t_get_dir_get) {
XS(_wrap_svn_ra_plugin_t_do_update_set) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *) = (svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10630,9 +11086,9 @@ XS(_wrap_svn_ra_plugin_t_do_update_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_do_update_set" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_do_update_set" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10654,7 +11110,7 @@ XS(_wrap_svn_ra_plugin_t_do_update_set) {
XS(_wrap_svn_ra_plugin_t_do_update_get) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10666,9 +11122,9 @@ XS(_wrap_svn_ra_plugin_t_do_update_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_do_update_get" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_do_update_get" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *)) ((arg1)->do_update);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -10682,7 +11138,7 @@ XS(_wrap_svn_ra_plugin_t_do_update_get) {
XS(_wrap_svn_ra_plugin_t_do_switch_set) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *) = (svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10694,9 +11150,9 @@ XS(_wrap_svn_ra_plugin_t_do_switch_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_do_switch_set" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_do_switch_set" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10718,7 +11174,7 @@ XS(_wrap_svn_ra_plugin_t_do_switch_set) {
XS(_wrap_svn_ra_plugin_t_do_switch_get) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10730,9 +11186,9 @@ XS(_wrap_svn_ra_plugin_t_do_switch_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_do_switch_get" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_do_switch_get" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *)) ((arg1)->do_switch);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -10746,7 +11202,7 @@ XS(_wrap_svn_ra_plugin_t_do_switch_get) {
XS(_wrap_svn_ra_plugin_t_do_status_set) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_ra_reporter_t const **,void **,char const *,svn_revnum_t,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *) = (svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,char const *,svn_revnum_t,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10758,9 +11214,9 @@ XS(_wrap_svn_ra_plugin_t_do_status_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_do_status_set" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_do_status_set" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_p_q_const__char_svn_revnum_t_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10782,7 +11238,7 @@ XS(_wrap_svn_ra_plugin_t_do_status_set) {
XS(_wrap_svn_ra_plugin_t_do_status_get) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10794,9 +11250,9 @@ XS(_wrap_svn_ra_plugin_t_do_status_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_do_status_get" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_do_status_get" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,char const *,svn_revnum_t,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *)) ((arg1)->do_status);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_p_q_const__char_svn_revnum_t_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -10810,7 +11266,7 @@ XS(_wrap_svn_ra_plugin_t_do_status_get) {
XS(_wrap_svn_ra_plugin_t_do_diff_set) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *) = (svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10822,9 +11278,9 @@ XS(_wrap_svn_ra_plugin_t_do_diff_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_do_diff_set" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_do_diff_set" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10846,7 +11302,7 @@ XS(_wrap_svn_ra_plugin_t_do_diff_set) {
XS(_wrap_svn_ra_plugin_t_do_diff_get) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10858,9 +11314,9 @@ XS(_wrap_svn_ra_plugin_t_do_diff_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_do_diff_get" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_do_diff_get" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *)) ((arg1)->do_diff);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -10874,7 +11330,7 @@ XS(_wrap_svn_ra_plugin_t_do_diff_get) {
XS(_wrap_svn_ra_plugin_t_get_log_set) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_array_header_t const *,svn_revnum_t,svn_revnum_t,svn_boolean_t,svn_boolean_t,svn_log_message_receiver_t,void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_array_header_t const *,svn_revnum_t,svn_revnum_t,svn_boolean_t,svn_boolean_t,svn_log_message_receiver_t,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10886,9 +11342,9 @@ XS(_wrap_svn_ra_plugin_t_get_log_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_log_set" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_log_set" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10910,7 +11366,7 @@ XS(_wrap_svn_ra_plugin_t_get_log_set) {
XS(_wrap_svn_ra_plugin_t_get_log_get) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10922,9 +11378,9 @@ XS(_wrap_svn_ra_plugin_t_get_log_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_log_get" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_log_get" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_array_header_t const *,svn_revnum_t,svn_revnum_t,svn_boolean_t,svn_boolean_t,svn_log_message_receiver_t,void *,apr_pool_t *)) ((arg1)->get_log);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -10938,7 +11394,7 @@ XS(_wrap_svn_ra_plugin_t_get_log_get) {
XS(_wrap_svn_ra_plugin_t_check_path_set) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_revnum_t,svn_node_kind_t *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_node_kind_t *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10950,9 +11406,9 @@ XS(_wrap_svn_ra_plugin_t_check_path_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_check_path_set" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_check_path_set" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_svn_node_kind_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10974,7 +11430,7 @@ XS(_wrap_svn_ra_plugin_t_check_path_set) {
XS(_wrap_svn_ra_plugin_t_check_path_get) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10986,9 +11442,9 @@ XS(_wrap_svn_ra_plugin_t_check_path_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_check_path_get" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_check_path_get" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_node_kind_t *,apr_pool_t *)) ((arg1)->check_path);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_svn_node_kind_t_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -11002,7 +11458,7 @@ XS(_wrap_svn_ra_plugin_t_check_path_get) {
XS(_wrap_svn_ra_plugin_t_get_uuid_set) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,char const **,apr_pool_t *) = (svn_error_t *(*)(void *,char const **,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11014,9 +11470,9 @@ XS(_wrap_svn_ra_plugin_t_get_uuid_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_uuid_set" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_uuid_set" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11038,7 +11494,7 @@ XS(_wrap_svn_ra_plugin_t_get_uuid_set) {
XS(_wrap_svn_ra_plugin_t_get_uuid_get) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11050,9 +11506,9 @@ XS(_wrap_svn_ra_plugin_t_get_uuid_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_uuid_get" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_uuid_get" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,char const **,apr_pool_t *)) ((arg1)->get_uuid);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_p_q_const__char_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -11066,7 +11522,7 @@ XS(_wrap_svn_ra_plugin_t_get_uuid_get) {
XS(_wrap_svn_ra_plugin_t_get_repos_root_set) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,char const **,apr_pool_t *) = (svn_error_t *(*)(void *,char const **,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11078,9 +11534,9 @@ XS(_wrap_svn_ra_plugin_t_get_repos_root_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_repos_root_set" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_repos_root_set" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11102,7 +11558,7 @@ XS(_wrap_svn_ra_plugin_t_get_repos_root_set) {
XS(_wrap_svn_ra_plugin_t_get_repos_root_get) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11114,9 +11570,9 @@ XS(_wrap_svn_ra_plugin_t_get_repos_root_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_repos_root_get" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_repos_root_get" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,char const **,apr_pool_t *)) ((arg1)->get_repos_root);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_p_q_const__char_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -11130,7 +11586,7 @@ XS(_wrap_svn_ra_plugin_t_get_repos_root_get) {
XS(_wrap_svn_ra_plugin_t_get_locations_set) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_hash_t **,char const *,svn_revnum_t,apr_array_header_t *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_hash_t **,char const *,svn_revnum_t,apr_array_header_t *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11142,9 +11598,9 @@ XS(_wrap_svn_ra_plugin_t_get_locations_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_locations_set" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_locations_set" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_p_apr_hash_t_p_q_const__char_svn_revnum_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11166,7 +11622,7 @@ XS(_wrap_svn_ra_plugin_t_get_locations_set) {
XS(_wrap_svn_ra_plugin_t_get_locations_get) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11178,9 +11634,9 @@ XS(_wrap_svn_ra_plugin_t_get_locations_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_locations_get" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_locations_get" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_hash_t **,char const *,svn_revnum_t,apr_array_header_t *,apr_pool_t *)) ((arg1)->get_locations);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_p_apr_hash_t_p_q_const__char_svn_revnum_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -11194,7 +11650,7 @@ XS(_wrap_svn_ra_plugin_t_get_locations_get) {
XS(_wrap_svn_ra_plugin_t_get_file_revs_set) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_revnum_t,svn_revnum_t,svn_ra_file_rev_handler_t,void *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_revnum_t,svn_ra_file_rev_handler_t,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11206,9 +11662,9 @@ XS(_wrap_svn_ra_plugin_t_get_file_revs_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_file_revs_set" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_file_revs_set" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_revnum_t_svn_ra_file_rev_handler_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11230,7 +11686,7 @@ XS(_wrap_svn_ra_plugin_t_get_file_revs_set) {
XS(_wrap_svn_ra_plugin_t_get_file_revs_get) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11242,9 +11698,9 @@ XS(_wrap_svn_ra_plugin_t_get_file_revs_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_file_revs_get" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_file_revs_get" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_revnum_t,svn_ra_file_rev_handler_t,void *,apr_pool_t *)) ((arg1)->get_file_revs);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_revnum_t_svn_ra_file_rev_handler_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -11258,7 +11714,7 @@ XS(_wrap_svn_ra_plugin_t_get_file_revs_get) {
XS(_wrap_svn_ra_plugin_t_get_version_set) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_version_t *(*arg2)(void) = (svn_version_t *(*)(void)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11270,9 +11726,9 @@ XS(_wrap_svn_ra_plugin_t_get_version_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_version_set" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_version_set" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_void__p_svn_version_t);
if (!SWIG_IsOK(res)) {
@@ -11294,7 +11750,7 @@ XS(_wrap_svn_ra_plugin_t_get_version_set) {
XS(_wrap_svn_ra_plugin_t_get_version_get) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11306,9 +11762,9 @@ XS(_wrap_svn_ra_plugin_t_get_version_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_version_get" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_ra_plugin_t_get_version_get" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_version_t *(*)(void)) ((arg1)->get_version);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_void__p_svn_version_t); argvi++ ;
@@ -11323,14 +11779,14 @@ XS(_wrap_svn_ra_plugin_t_get_version_get) {
XS(_wrap_new_svn_ra_plugin_t) {
{
int argvi = 0;
- svn_ra_plugin_t *result = 0 ;
+ struct svn_ra_plugin_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_ra_plugin_t();");
}
{
- result = (svn_ra_plugin_t *)calloc(1, sizeof(svn_ra_plugin_t));
+ result = (struct svn_ra_plugin_t *)calloc(1, sizeof(struct svn_ra_plugin_t));
@@ -11345,7 +11801,7 @@ XS(_wrap_new_svn_ra_plugin_t) {
XS(_wrap_delete_svn_ra_plugin_t) {
{
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11356,9 +11812,9 @@ XS(_wrap_delete_svn_ra_plugin_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_ra_plugin_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_ra_plugin_t" "', argument " "1"" of type '" "svn_ra_plugin_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_ra_plugin_t" "', argument " "1"" of type '" "struct svn_ra_plugin_t *""'");
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
free((char *) arg1);
@@ -14399,7 +14855,7 @@ XS(_wrap_svn_ra_plugin_invoke_get_log) {
arg7 = (svn_boolean_t)(val7);
{
arg8 = svn_swig_pl_thunk_log_receiver;
- arg9 = (void *)ST(7);
+ arg9 = ST(7);
}
if (items > 8) {
@@ -15348,6 +15804,89 @@ XS(_wrap_svn_ra_invoke_invalidate_wc_props_func) {
}
+XS(_wrap_svn_ra_invoke_get_wc_contents_func) {
+ {
+ svn_ra_get_wc_contents_func_t arg1 = (svn_ra_get_wc_contents_func_t) 0 ;
+ void *arg2 = (void *) 0 ;
+ svn_stream_t **arg3 = (svn_stream_t **) 0 ;
+ svn_checksum_t *arg4 = (svn_checksum_t *) 0 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int res2 ;
+ svn_stream_t *temp3 ;
+ void *argp4 = 0 ;
+ int res4 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg5 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg3 = &temp3;
+ if ((items < 3) || (items > 4)) {
+ SWIG_croak("Usage: svn_ra_invoke_get_wc_contents_func(_obj,baton,checksum,pool);");
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(0), (void**)(&arg1), SWIGTYPE_p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_ra_invoke_get_wc_contents_func" "', argument " "1"" of type '" "svn_ra_get_wc_contents_func_t""'");
+ }
+ }
+ res2 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_ra_invoke_get_wc_contents_func" "', argument " "2"" of type '" "void *""'");
+ }
+ res4 = SWIG_ConvertPtr(ST(2), &argp4,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_ra_invoke_get_wc_contents_func" "', argument " "4"" of type '" "svn_checksum_t const *""'");
+ }
+ arg4 = (svn_checksum_t *)(argp4);
+ if (items > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_ra_invoke_get_wc_contents_func(arg1,arg2,arg3,(struct svn_checksum_t const *)arg4,arg5);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = svn_swig_pl_from_stream(*arg3); argvi++ ;
+ }
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_ra_invoke_get_latest_revnum_func) {
{
svn_ra_get_latest_revnum_func_t arg1 = (svn_ra_get_latest_revnum_func_t) 0 ;
@@ -15989,8 +16528,6 @@ XS(_wrap_svn_ra_invoke_init_func) {
apr_pool_t *_global_pool ;
int val2 ;
int ecode2 = 0 ;
- void *argp4 = 0 ;
- int res4 = 0 ;
int argvi = 0;
svn_error_t *result = 0 ;
dXSARGS;
@@ -16016,11 +16553,11 @@ XS(_wrap_svn_ra_invoke_init_func) {
}
if (items > 3) {
- res4 = SWIG_ConvertPtr(ST(3), &argp4,SWIGTYPE_p_apr_hash_t, 0 | 0 );
- if (!SWIG_IsOK(res4)) {
- SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_ra_invoke_init_func" "', argument " "4"" of type '" "apr_hash_t *""'");
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg4 = svn_swig_pl_hash_to_prophash(ST(3), _global_pool);
}
- arg4 = (apr_hash_t *)(argp4);
}
{
result = (svn_error_t *)svn_ra_invoke_init_func(arg1,arg2,arg3,arg4);
@@ -16062,7 +16599,7 @@ XS(_wrap_svn_ra_invoke_init_func) {
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
-static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *|svn_rangelist_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_file_t = {"_p_apr_file_t", "apr_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_hash_t = {"_p_apr_hash_t", "apr_hash_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int32_t = {"_p_apr_int32_t", "apr_int32_t *|time_t *", 0, 0, (void*)0, 0};
@@ -16087,6 +16624,7 @@ static swig_type_info _swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void
static swig_type_info _swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *)|struct svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *)|struct svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *)|struct svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,svn_stream_t **,svn_checksum_t const *,apr_pool_t *)|svn_ra_get_wc_contents_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_error_t *(*)(void *,apr_array_header_t const *,svn_revnum_t,svn_revnum_t,svn_boolean_t,svn_boolean_t,svn_log_message_receiver_t,void *,apr_pool_t *)|struct svn_error_t *(*)(void *,apr_array_header_t const *,svn_revnum_t,svn_revnum_t,svn_boolean_t,svn_boolean_t,svn_log_message_receiver_t,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t", "svn_error_t *(*)(void *,char const *,apr_pool_t *)|struct svn_error_t *(*)(void *,char const *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,char const *,apr_pool_t *)|svn_ra_invalidate_wc_props_func_t", 0, 0, (void*)0, 0};
@@ -16118,6 +16656,7 @@ static swig_type_info _swigt__p_f_svn_revnum_t_p_void_p_q_const__svn_delta_edito
static swig_type_info _swigt__p_f_void__p_svn_version_t = {"_p_f_void__p_svn_version_t", "struct svn_version_t *(*)(void)|svn_version_t *(*)(void)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_int = {"_p_int", "int *|svn_boolean_t *|apr_status_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_long = {"_p_long", "long *|svn_revnum_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_apr_array_header_t = {"_p_p_apr_array_header_t", "apr_array_header_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_apr_file_t = {"_p_p_apr_file_t", "apr_file_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_apr_hash_t = {"_p_p_apr_hash_t", "apr_hash_t **|svn_mergeinfo_catalog_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0};
@@ -16131,6 +16670,7 @@ static swig_type_info _swigt__p_p_svn_ra_reporter2_t = {"_p_p_svn_ra_reporter2_t
static swig_type_info _swigt__p_p_svn_ra_reporter3_t = {"_p_p_svn_ra_reporter3_t", "struct svn_ra_reporter3_t **|svn_ra_reporter3_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_ra_reporter_t = {"_p_p_svn_ra_reporter_t", "struct svn_ra_reporter_t **|svn_ra_reporter_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_ra_session_t = {"_p_p_svn_ra_session_t", "struct svn_ra_session_t **|svn_ra_session_t **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_svn_stream_t = {"_p_p_svn_stream_t", "struct svn_stream_t **|svn_stream_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_string_t = {"_p_p_svn_string_t", "struct svn_string_t **|svn_string_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_stringbuf_t = {"_p_p_svn_stringbuf_t", "struct svn_stringbuf_t **|svn_stringbuf_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_void = {"_p_p_void", "void **", 0, 0, (void*)0, 0};
@@ -16144,6 +16684,9 @@ static swig_type_info _swigt__p_svn_auth_iterstate_t = {"_p_svn_auth_iterstate_t
static swig_type_info _swigt__p_svn_auth_provider_object_t = {"_p_svn_auth_provider_object_t", "struct svn_auth_provider_object_t *|svn_auth_provider_object_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_provider_t = {"_p_svn_auth_provider_t", "struct svn_auth_provider_t *|svn_auth_provider_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_ssl_server_cert_info_t = {"_p_svn_auth_ssl_server_cert_info_t", "struct svn_auth_ssl_server_cert_info_t *|svn_auth_ssl_server_cert_info_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_ctx_t = {"_p_svn_checksum_ctx_t", "struct svn_checksum_ctx_t *|svn_checksum_ctx_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "enum svn_checksum_kind_t *|svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "struct svn_checksum_t *|svn_checksum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_commit_info_t = {"_p_svn_commit_info_t", "struct svn_commit_info_t *|svn_commit_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_config_t = {"_p_svn_config_t", "struct svn_config_t *|svn_config_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_delta_editor_t = {"_p_svn_delta_editor_t", "struct svn_delta_editor_t *|svn_delta_editor_t *", 0, 0, (void*)0, 0};
@@ -16179,6 +16722,7 @@ static swig_type_info _swigt__p_svn_opt_subcommand_desc2_t = {"_p_svn_opt_subcom
static swig_type_info _swigt__p_svn_opt_subcommand_desc_t = {"_p_svn_opt_subcommand_desc_t", "struct svn_opt_subcommand_desc_t *|svn_opt_subcommand_desc_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_file_t = {"_p_svn_patch_file_t", "struct svn_patch_file_t *|svn_patch_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_t = {"_p_svn_patch_t", "struct svn_patch_t *|svn_patch_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_prop_inherited_item_t = {"_p_svn_prop_inherited_item_t", "struct svn_prop_inherited_item_t *|svn_prop_inherited_item_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_kind = {"_p_svn_prop_kind", "svn_prop_kind_t *|enum svn_prop_kind *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_patch_t = {"_p_svn_prop_patch_t", "struct svn_prop_patch_t *|svn_prop_patch_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_ra_callbacks2_t = {"_p_svn_ra_callbacks2_t", "struct svn_ra_callbacks2_t *|svn_ra_callbacks2_t *", 0, 0, (void*)0, 0};
@@ -16197,7 +16741,11 @@ static swig_type_info _swigt__p_svn_txdelta_op_t = {"_p_svn_txdelta_op_t", "stru
static swig_type_info _swigt__p_svn_txdelta_stream_t = {"_p_svn_txdelta_stream_t", "struct svn_txdelta_stream_t *|svn_txdelta_stream_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_txdelta_window_t = {"_p_svn_txdelta_window_t", "struct svn_txdelta_window_t *|svn_txdelta_window_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_checklist_t = {"_p_svn_version_checklist_t", "struct svn_version_checklist_t *|svn_version_checklist_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_linked_lib_t = {"_p_svn_version_ext_linked_lib_t", "struct svn_version_ext_linked_lib_t *|svn_version_ext_linked_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_loaded_lib_t = {"_p_svn_version_ext_loaded_lib_t", "struct svn_version_ext_loaded_lib_t *|svn_version_ext_loaded_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_extended_t = {"_p_svn_version_extended_t", "struct svn_version_extended_t *|svn_version_extended_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_t = {"_p_svn_version_t", "struct svn_version_t *|svn_version_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_wc_external_item2_t = {"_p_svn_wc_external_item2_t", "svn_wc_external_item2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_long = {"_p_unsigned_long", "unsigned long *|svn_linenum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_void = {"_p_void", "void *", 0, 0, (void*)0, 0};
@@ -16227,6 +16775,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
@@ -16258,6 +16807,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_f_void__p_svn_version_t,
&_swigt__p_int,
&_swigt__p_long,
+ &_swigt__p_p_apr_array_header_t,
&_swigt__p_p_apr_file_t,
&_swigt__p_p_apr_hash_t,
&_swigt__p_p_char,
@@ -16271,6 +16821,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_p_svn_ra_reporter3_t,
&_swigt__p_p_svn_ra_reporter_t,
&_swigt__p_p_svn_ra_session_t,
+ &_swigt__p_p_svn_stream_t,
&_swigt__p_p_svn_string_t,
&_swigt__p_p_svn_stringbuf_t,
&_swigt__p_p_void,
@@ -16284,6 +16835,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_auth_provider_object_t,
&_swigt__p_svn_auth_provider_t,
&_swigt__p_svn_auth_ssl_server_cert_info_t,
+ &_swigt__p_svn_checksum_ctx_t,
+ &_swigt__p_svn_checksum_kind_t,
+ &_swigt__p_svn_checksum_t,
&_swigt__p_svn_commit_info_t,
&_swigt__p_svn_config_t,
&_swigt__p_svn_delta_editor_t,
@@ -16319,6 +16873,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_opt_subcommand_desc_t,
&_swigt__p_svn_patch_file_t,
&_swigt__p_svn_patch_t,
+ &_swigt__p_svn_prop_inherited_item_t,
&_swigt__p_svn_prop_kind,
&_swigt__p_svn_prop_patch_t,
&_swigt__p_svn_ra_callbacks2_t,
@@ -16337,7 +16892,11 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_txdelta_stream_t,
&_swigt__p_svn_txdelta_window_t,
&_swigt__p_svn_version_checklist_t,
+ &_swigt__p_svn_version_ext_linked_lib_t,
+ &_swigt__p_svn_version_ext_loaded_lib_t,
+ &_swigt__p_svn_version_extended_t,
&_swigt__p_svn_version_t,
+ &_swigt__p_svn_wc_external_item2_t,
&_swigt__p_unsigned_long,
&_swigt__p_void,
};
@@ -16367,6 +16926,7 @@ static swig_cast_info _swigc__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void
static swig_cast_info _swigc__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -16398,6 +16958,7 @@ static swig_cast_info _swigc__p_f_svn_revnum_t_p_void_p_q_const__svn_delta_edito
static swig_cast_info _swigc__p_f_void__p_svn_version_t[] = { {&_swigt__p_f_void__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_int[] = { {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_long[] = { {&_swigt__p_long, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_apr_array_header_t[] = { {&_swigt__p_p_apr_array_header_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_apr_file_t[] = { {&_swigt__p_p_apr_file_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_apr_hash_t[] = { {&_swigt__p_p_apr_hash_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_char[] = { {&_swigt__p_p_char, 0, 0, 0},{0, 0, 0, 0}};
@@ -16411,6 +16972,7 @@ static swig_cast_info _swigc__p_p_svn_ra_reporter2_t[] = { {&_swigt__p_p_svn_ra
static swig_cast_info _swigc__p_p_svn_ra_reporter3_t[] = { {&_swigt__p_p_svn_ra_reporter3_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_ra_reporter_t[] = { {&_swigt__p_p_svn_ra_reporter_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_ra_session_t[] = { {&_swigt__p_p_svn_ra_session_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_svn_stream_t[] = { {&_swigt__p_p_svn_stream_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_string_t[] = { {&_swigt__p_p_svn_string_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_stringbuf_t[] = { {&_swigt__p_p_svn_stringbuf_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_void[] = { {&_swigt__p_p_void, 0, 0, 0},{0, 0, 0, 0}};
@@ -16424,6 +16986,9 @@ static swig_cast_info _swigc__p_svn_auth_iterstate_t[] = { {&_swigt__p_svn_auth
static swig_cast_info _swigc__p_svn_auth_provider_object_t[] = { {&_swigt__p_svn_auth_provider_object_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_provider_t[] = { {&_swigt__p_svn_auth_provider_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_ssl_server_cert_info_t[] = { {&_swigt__p_svn_auth_ssl_server_cert_info_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_ctx_t[] = { {&_swigt__p_svn_checksum_ctx_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_kind_t[] = { {&_swigt__p_svn_checksum_kind_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_t[] = { {&_swigt__p_svn_checksum_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_commit_info_t[] = { {&_swigt__p_svn_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_config_t[] = { {&_swigt__p_svn_config_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_delta_editor_t[] = { {&_swigt__p_svn_delta_editor_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -16459,6 +17024,7 @@ static swig_cast_info _swigc__p_svn_opt_subcommand_desc2_t[] = { {&_swigt__p_sv
static swig_cast_info _swigc__p_svn_opt_subcommand_desc_t[] = { {&_swigt__p_svn_opt_subcommand_desc_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_file_t[] = { {&_swigt__p_svn_patch_file_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_t[] = { {&_swigt__p_svn_patch_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_prop_inherited_item_t[] = { {&_swigt__p_svn_prop_inherited_item_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_kind[] = { {&_swigt__p_svn_prop_kind, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_patch_t[] = { {&_swigt__p_svn_prop_patch_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_ra_callbacks2_t[] = { {&_swigt__p_svn_ra_callbacks2_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -16477,7 +17043,11 @@ static swig_cast_info _swigc__p_svn_txdelta_op_t[] = { {&_swigt__p_svn_txdelta_
static swig_cast_info _swigc__p_svn_txdelta_stream_t[] = { {&_swigt__p_svn_txdelta_stream_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_txdelta_window_t[] = { {&_swigt__p_svn_txdelta_window_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_checklist_t[] = { {&_swigt__p_svn_version_checklist_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_linked_lib_t[] = { {&_swigt__p_svn_version_ext_linked_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_loaded_lib_t[] = { {&_swigt__p_svn_version_ext_loaded_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_extended_t[] = { {&_swigt__p_svn_version_extended_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_t[] = { {&_swigt__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_wc_external_item2_t[] = { {&_swigt__p_svn_wc_external_item2_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_long[] = { {&_swigt__p_unsigned_long, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_void[] = { {&_swigt__p_void, 0, 0, 0},{0, 0, 0, 0}};
@@ -16507,6 +17077,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
@@ -16538,6 +17109,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_f_void__p_svn_version_t,
_swigc__p_int,
_swigc__p_long,
+ _swigc__p_p_apr_array_header_t,
_swigc__p_p_apr_file_t,
_swigc__p_p_apr_hash_t,
_swigc__p_p_char,
@@ -16551,6 +17123,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_p_svn_ra_reporter3_t,
_swigc__p_p_svn_ra_reporter_t,
_swigc__p_p_svn_ra_session_t,
+ _swigc__p_p_svn_stream_t,
_swigc__p_p_svn_string_t,
_swigc__p_p_svn_stringbuf_t,
_swigc__p_p_void,
@@ -16564,6 +17137,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_auth_provider_object_t,
_swigc__p_svn_auth_provider_t,
_swigc__p_svn_auth_ssl_server_cert_info_t,
+ _swigc__p_svn_checksum_ctx_t,
+ _swigc__p_svn_checksum_kind_t,
+ _swigc__p_svn_checksum_t,
_swigc__p_svn_commit_info_t,
_swigc__p_svn_config_t,
_swigc__p_svn_delta_editor_t,
@@ -16599,6 +17175,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_opt_subcommand_desc_t,
_swigc__p_svn_patch_file_t,
_swigc__p_svn_patch_t,
+ _swigc__p_svn_prop_inherited_item_t,
_swigc__p_svn_prop_kind,
_swigc__p_svn_prop_patch_t,
_swigc__p_svn_ra_callbacks2_t,
@@ -16617,7 +17194,11 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_txdelta_stream_t,
_swigc__p_svn_txdelta_window_t,
_swigc__p_svn_version_checklist_t,
+ _swigc__p_svn_version_ext_linked_lib_t,
+ _swigc__p_svn_version_ext_loaded_lib_t,
+ _swigc__p_svn_version_extended_t,
_swigc__p_svn_version_t,
+ _swigc__p_svn_wc_external_item2_t,
_swigc__p_unsigned_long,
_swigc__p_void,
};
@@ -16692,6 +17273,8 @@ static swig_command_info swig_commands[] = {
{"SVN::_Ra::svn_ra_callbacks2_t_cancel_func_get", _wrap_svn_ra_callbacks2_t_cancel_func_get},
{"SVN::_Ra::svn_ra_callbacks2_t_get_client_string_set", _wrap_svn_ra_callbacks2_t_get_client_string_set},
{"SVN::_Ra::svn_ra_callbacks2_t_get_client_string_get", _wrap_svn_ra_callbacks2_t_get_client_string_get},
+{"SVN::_Ra::svn_ra_callbacks2_t_get_wc_contents_set", _wrap_svn_ra_callbacks2_t_get_wc_contents_set},
+{"SVN::_Ra::svn_ra_callbacks2_t_get_wc_contents_get", _wrap_svn_ra_callbacks2_t_get_wc_contents_get},
{"SVN::_Ra::new_svn_ra_callbacks2_t", _wrap_new_svn_ra_callbacks2_t},
{"SVN::_Ra::delete_svn_ra_callbacks2_t", _wrap_delete_svn_ra_callbacks2_t},
{"SVN::_Ra::svn_ra_callbacks_t_open_tmp_file_set", _wrap_svn_ra_callbacks_t_open_tmp_file_set},
@@ -16731,8 +17314,10 @@ static swig_command_info swig_commands[] = {
{"SVN::_Ra::svn_ra_get_dir2", _wrap_svn_ra_get_dir2},
{"SVN::_Ra::svn_ra_get_dir", _wrap_svn_ra_get_dir},
{"SVN::_Ra::svn_ra_get_mergeinfo", _wrap_svn_ra_get_mergeinfo},
+{"SVN::_Ra::svn_ra_do_update3", _wrap_svn_ra_do_update3},
{"SVN::_Ra::svn_ra_do_update2", _wrap_svn_ra_do_update2},
{"SVN::_Ra::svn_ra_do_update", _wrap_svn_ra_do_update},
+{"SVN::_Ra::svn_ra_do_switch3", _wrap_svn_ra_do_switch3},
{"SVN::_Ra::svn_ra_do_switch2", _wrap_svn_ra_do_switch2},
{"SVN::_Ra::svn_ra_do_switch", _wrap_svn_ra_do_switch},
{"SVN::_Ra::svn_ra_do_status2", _wrap_svn_ra_do_status2},
@@ -16760,6 +17345,7 @@ static swig_command_info swig_commands[] = {
{"SVN::_Ra::svn_ra_replay_range", _wrap_svn_ra_replay_range},
{"SVN::_Ra::svn_ra_replay", _wrap_svn_ra_replay},
{"SVN::_Ra::svn_ra_get_deleted_rev", _wrap_svn_ra_get_deleted_rev},
+{"SVN::_Ra::svn_ra_get_inherited_props", _wrap_svn_ra_get_inherited_props},
{"SVN::_Ra::svn_ra_has_capability", _wrap_svn_ra_has_capability},
{"SVN::_Ra::svn_ra_print_modules", _wrap_svn_ra_print_modules},
{"SVN::_Ra::svn_ra_print_ra_libraries", _wrap_svn_ra_print_ra_libraries},
@@ -16852,6 +17438,7 @@ static swig_command_info swig_commands[] = {
{"SVN::_Ra::svn_ra_invoke_set_wc_prop_func", _wrap_svn_ra_invoke_set_wc_prop_func},
{"SVN::_Ra::svn_ra_invoke_push_wc_prop_func", _wrap_svn_ra_invoke_push_wc_prop_func},
{"SVN::_Ra::svn_ra_invoke_invalidate_wc_props_func", _wrap_svn_ra_invoke_invalidate_wc_props_func},
+{"SVN::_Ra::svn_ra_invoke_get_wc_contents_func", _wrap_svn_ra_invoke_get_wc_contents_func},
{"SVN::_Ra::svn_ra_invoke_get_latest_revnum_func", _wrap_svn_ra_invoke_get_latest_revnum_func},
{"SVN::_Ra::svn_ra_invoke_get_client_string_func", _wrap_svn_ra_invoke_get_client_string_func},
{"SVN::_Ra::svn_ra_invoke_file_rev_handler", _wrap_svn_ra_invoke_file_rev_handler},
@@ -16921,8 +17508,6 @@ SWIG_InitializeModule(void *clientdata) {
swig_module_info *module_head, *iter;
int found, init;
- clientdata = clientdata;
-
/* check to see if the circular list has been setup, if not, set it up */
if (swig_module.next==0) {
/* Initialize the swig_module */
@@ -17113,25 +17698,30 @@ XS(SWIG_init) {
/* Install commands */
for (i = 0; swig_commands[i].name; i++) {
- newXS((char*) swig_commands[i].name,swig_commands[i].wrapper, (char*)__FILE__);
+ /* Casts only needed for Perl < 5.10. */
+#ifdef __cplusplus
+ newXS(const_cast<char*>(swig_commands[i].name), swig_commands[i].wrapper, const_cast<char*>(__FILE__));
+#else
+ newXS((char*)swig_commands[i].name, swig_commands[i].wrapper, (char*)__FILE__);
+#endif
}
/* Install variables */
for (i = 0; swig_variables[i].name; i++) {
SV *sv;
- sv = get_sv((char*) swig_variables[i].name, TRUE | 0x2 | GV_ADDMULTI);
+ sv = get_sv(swig_variables[i].name, TRUE | 0x2 | GV_ADDMULTI);
if (swig_variables[i].type) {
SWIG_MakePtr(sv,(void *)1, *swig_variables[i].type,0);
} else {
sv_setiv(sv,(IV) 0);
}
- swig_create_magic(sv, (char *) swig_variables[i].name, swig_variables[i].set, swig_variables[i].get);
+ swig_create_magic(sv, swig_variables[i].name, swig_variables[i].set, swig_variables[i].get);
}
/* Install constant */
for (i = 0; swig_constants[i].type; i++) {
SV *sv;
- sv = get_sv((char*)swig_constants[i].name, TRUE | 0x2 | GV_ADDMULTI);
+ sv = get_sv(swig_constants[i].name, TRUE | 0x2 | GV_ADDMULTI);
switch(swig_constants[i].type) {
case SWIG_INT:
sv_setiv(sv, (IV) swig_constants[i].lvalue);
@@ -17140,7 +17730,7 @@ XS(SWIG_init) {
sv_setnv(sv, (double) swig_constants[i].dvalue);
break;
case SWIG_STRING:
- sv_setpv(sv, (char *) swig_constants[i].pvalue);
+ sv_setpv(sv, (const char *) swig_constants[i].pvalue);
break;
case SWIG_POINTER:
SWIG_MakePtr(sv, swig_constants[i].pvalue, *(swig_constants[i].ptype),0);
@@ -17154,37 +17744,52 @@ XS(SWIG_init) {
SvREADONLY_on(sv);
}
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_RA_CAPABILITY_DEPTH", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("depth"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_RA_CAPABILITY_MERGEINFO", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("mergeinfo"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_RA_CAPABILITY_LOG_REVPROPS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("log-revprops"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_RA_CAPABILITY_PARTIAL_REPLAY", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("partial-replay"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_RA_CAPABILITY_COMMIT_REVPROPS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("commit-revprops"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_RA_CAPABILITY_ATOMIC_REVPROPS", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("atomic-revprops"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_RA_CAPABILITY_INHERITED_PROPS", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_FromCharPtr("inherited-props"));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_RA_CAPABILITY_EPHEMERAL_TXNPROPS", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_FromCharPtr("ephemeral-txnprops"));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_RA_CAPABILITY_GET_FILE_REVS_REVERSE", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_FromCharPtr("get-file-revs-reversed"));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_RA_ABI_VERSION", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(2)));
SvREADONLY_on(sv);
diff --git a/subversion/bindings/swig/perl/native/svn_repos.c b/subversion/bindings/swig/perl/native/svn_repos.c
index e07f8a1..08a8d95 100644
--- a/subversion/bindings/swig/perl/native/svn_repos.c
+++ b/subversion/bindings/swig/perl/native/svn_repos.c
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -830,50 +830,35 @@ extern "C" {
SWIGINTERN const char*
SWIG_Perl_ErrorType(int code) {
- const char* type = 0;
switch(code) {
case SWIG_MemoryError:
- type = "MemoryError";
- break;
+ return "MemoryError";
case SWIG_IOError:
- type = "IOError";
- break;
+ return "IOError";
case SWIG_RuntimeError:
- type = "RuntimeError";
- break;
+ return "RuntimeError";
case SWIG_IndexError:
- type = "IndexError";
- break;
+ return "IndexError";
case SWIG_TypeError:
- type = "TypeError";
- break;
+ return "TypeError";
case SWIG_DivisionByZero:
- type = "ZeroDivisionError";
- break;
+ return "ZeroDivisionError";
case SWIG_OverflowError:
- type = "OverflowError";
- break;
+ return "OverflowError";
case SWIG_SyntaxError:
- type = "SyntaxError";
- break;
+ return "SyntaxError";
case SWIG_ValueError:
- type = "ValueError";
- break;
+ return "ValueError";
case SWIG_SystemError:
- type = "SystemError";
- break;
+ return "SystemError";
case SWIG_AttributeError:
- type = "AttributeError";
- break;
+ return "AttributeError";
default:
- type = "RuntimeError";
+ return "RuntimeError";
}
- return type;
}
-
-
/* -----------------------------------------------------------------------------
* perlrun.swg
*
@@ -916,14 +901,14 @@ SWIG_Perl_ErrorType(int code) {
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Perl_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Perl_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Perl_SetModule(pointer)
/* Error manipulation */
#define SWIG_ErrorType(code) SWIG_Perl_ErrorType(code)
-#define SWIG_Error(code, msg) sv_setpvf(GvSV(PL_errgv),"%s %s\n", SWIG_ErrorType(code), msg)
+#define SWIG_Error(code, msg) sv_setpvf(get_sv("@", GV_ADD), "%s %s", SWIG_ErrorType(code), msg)
#define SWIG_fail goto fail
/* Perl-specific SWIG API */
@@ -1017,8 +1002,6 @@ typedef int (*SwigMagicFunc)(struct interpreter *, SV *, MAGIC *);
#endif /* MULTIPLICITY */
#endif /* PERL_OBJECT */
-/* Workaround for bug in perl 5.6.x croak and earlier */
-#if (PERL_VERSION < 8)
# ifdef PERL_OBJECT
# define SWIG_croak_null() SWIG_Perl_croak_null(pPerl)
static void SWIG_Perl_croak_null(CPerlObj *pPerl)
@@ -1026,17 +1009,16 @@ static void SWIG_Perl_croak_null(CPerlObj *pPerl)
static void SWIG_croak_null()
# endif
{
- SV *err=ERRSV;
+ SV *err = get_sv("@", GV_ADD);
# if (PERL_VERSION < 6)
croak("%_", err);
# else
- if (SvOK(err) && !SvROK(err)) croak("%_", err);
- croak(Nullch);
+ if (sv_isobject(err))
+ croak(0);
+ else
+ croak("%s", SvPV_nolen(err));
# endif
}
-#else
-# define SWIG_croak_null() croak(Nullch)
-#endif
/*
@@ -1088,8 +1070,7 @@ SWIG_TypeProxyCheck(const char *c, swig_type_info *ty) {
if (ty) {
swig_cast_info *iter = ty->cast;
while (iter) {
- if ( (!iter->type->clientdata && (strcmp(iter->type->name, c) == 0)) ||
- (iter->type->clientdata && (strcmp((char*)iter->type->clientdata, c) == 0)) ) {
+ if (strcmp(SWIG_Perl_TypeProxyName(iter->type), c) == 0) {
if (iter == ty->cast)
return iter;
/* Move iter to the top of the linked list */
@@ -1220,7 +1201,7 @@ SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, swig_type_info *t, i
SV *obj=newSV(0);
HV *hash=newHV();
HV *stash;
- sv_setref_pv(obj, (char *) SWIG_Perl_TypeProxyName(t), ptr);
+ sv_setref_pv(obj, SWIG_Perl_TypeProxyName(t), ptr);
stash=SvSTASH(SvRV(obj));
if (flags & SWIG_POINTER_OWN) {
HV *hv;
@@ -1238,7 +1219,7 @@ SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, swig_type_info *t, i
sv_bless(sv, stash);
}
else {
- sv_setref_pv(sv, (char *) SWIG_Perl_TypeProxyName(t), ptr);
+ sv_setref_pv(sv, SWIG_Perl_TypeProxyName(t), ptr);
}
}
@@ -1329,19 +1310,23 @@ typedef struct {
/* Magic variable code */
#ifndef PERL_OBJECT
-#define swig_create_magic(s,a,b,c) _swig_create_magic(s,a,b,c)
- #ifndef MULTIPLICITY
- SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *))
- #else
- SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(struct interpreter*, SV *, MAGIC *), int (*get)(struct interpreter*, SV *,MAGIC *))
- #endif
+# ifdef __cplusplus
+# define swig_create_magic(s,a,b,c) _swig_create_magic(s,const_cast<char*>(a),b,c)
+# else
+# define swig_create_magic(s,a,b,c) _swig_create_magic(s,(char*)(a),b,c)
+# endif
+# ifndef MULTIPLICITY
+SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *))
+# else
+SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(struct interpreter*, SV *, MAGIC *), int (*get)(struct interpreter*, SV *,MAGIC *))
+# endif
#else
# define swig_create_magic(s,a,b,c) _swig_create_magic(pPerl,s,a,b,c)
SWIGRUNTIME void _swig_create_magic(CPerlObj *pPerl, SV *sv, const char *name, int (CPerlObj::*set)(SV *, MAGIC *), int (CPerlObj::*get)(SV *, MAGIC *))
#endif
{
MAGIC *mg;
- sv_magic(sv,sv,'U',(char *) name,strlen(name));
+ sv_magic(sv,sv,'U',name,strlen(name));
mg = mg_find(sv,'U');
mg->mg_virtual = (MGVTBL *) malloc(sizeof(MGVTBL));
mg->mg_virtual->svt_get = (SwigMagicFunc) get;
@@ -1353,7 +1338,7 @@ SWIGRUNTIME void _swig_create_magic(CPerlObj *pPerl, SV *sv, const char *name, i
SWIGRUNTIME swig_module_info *
-SWIG_Perl_GetModule(void) {
+SWIG_Perl_GetModule(void *SWIGUNUSEDPARM(clientdata)) {
static void *type_pointer = (void *)0;
SV *pointer;
@@ -1447,9 +1432,6 @@ SWIG_Perl_SetModule(swig_module_info *module) {
#ifdef eof
#undef eof
#endif
-#ifdef bool
- #undef bool
-#endif
#ifdef close
#undef close
#endif
@@ -1490,6 +1472,14 @@ SWIG_Perl_SetModule(swig_module_info *module) {
#undef stat
#endif
+#ifdef bool
+ /* Leave if macro is from C99 stdbool.h */
+ #ifndef __bool_true_false_are_defined
+ #undef bool
+ #endif
+#endif
+
+
#define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0)
@@ -1509,126 +1499,138 @@ SWIG_Perl_SetModule(swig_module_info *module) {
#define SWIGTYPE_p_apr_int64_t swig_types[3]
#define SWIGTYPE_p_apr_pool_t swig_types[4]
#define SWIGTYPE_p_char swig_types[5]
-#define SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[6]
-#define SWIGTYPE_p_f_p_p_svn_stream_t_p_void__p_svn_error_t swig_types[7]
-#define SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[8]
-#define SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[9]
-#define SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[10]
-#define SWIGTYPE_p_f_p_svn_boolean_t_p_svn_fs_root_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[11]
-#define SWIGTYPE_p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[12]
-#define SWIGTYPE_p_f_p_svn_txdelta_window_handler_t_p_p_void_p_void__p_svn_error_t swig_types[13]
-#define SWIGTYPE_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t swig_types[14]
-#define SWIGTYPE_p_f_p_void__p_svn_error_t swig_types[15]
-#define SWIGTYPE_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t swig_types[16]
-#define SWIGTYPE_p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[17]
-#define SWIGTYPE_p_f_p_void_p_q_const__char__p_svn_error_t swig_types[18]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t swig_types[19]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[20]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[21]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_pool_t__p_svn_error_t swig_types[22]
-#define SWIGTYPE_p_f_p_void_p_q_const__struct_svn_repos_notify_t_p_apr_pool_t__void swig_types[23]
-#define SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t swig_types[24]
-#define SWIGTYPE_p_f_svn_repos_authz_access_t_p_svn_boolean_t_p_svn_fs_root_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[25]
-#define SWIGTYPE_p_f_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t swig_types[26]
-#define SWIGTYPE_p_int swig_types[27]
-#define SWIGTYPE_p_long swig_types[28]
-#define SWIGTYPE_p_p_apr_array_header_t swig_types[29]
-#define SWIGTYPE_p_p_apr_hash_t swig_types[30]
-#define SWIGTYPE_p_p_char swig_types[31]
-#define SWIGTYPE_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t swig_types[32]
-#define SWIGTYPE_p_p_svn_authz_t swig_types[33]
-#define SWIGTYPE_p_p_svn_delta_editor_t swig_types[34]
-#define SWIGTYPE_p_p_svn_dirent_t swig_types[35]
-#define SWIGTYPE_p_p_svn_fs_txn_t swig_types[36]
-#define SWIGTYPE_p_p_svn_lock_t swig_types[37]
-#define SWIGTYPE_p_p_svn_repos_parse_fns2_t swig_types[38]
-#define SWIGTYPE_p_p_svn_repos_parse_fns_t swig_types[39]
-#define SWIGTYPE_p_p_svn_repos_t swig_types[40]
-#define SWIGTYPE_p_p_svn_stream_t swig_types[41]
-#define SWIGTYPE_p_p_svn_string_t swig_types[42]
-#define SWIGTYPE_p_p_void swig_types[43]
-#define SWIGTYPE_p_svn_auth_baton_t swig_types[44]
-#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[45]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[46]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[47]
-#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[48]
-#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[49]
-#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[50]
-#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[51]
-#define SWIGTYPE_p_svn_auth_provider_t swig_types[52]
-#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[53]
-#define SWIGTYPE_p_svn_authz_t swig_types[54]
-#define SWIGTYPE_p_svn_commit_info_t swig_types[55]
-#define SWIGTYPE_p_svn_config_t swig_types[56]
-#define SWIGTYPE_p_svn_delta_editor_t swig_types[57]
-#define SWIGTYPE_p_svn_depth_t swig_types[58]
-#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[59]
-#define SWIGTYPE_p_svn_diff_datasource_e swig_types[60]
-#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[61]
-#define SWIGTYPE_p_svn_diff_file_options_t swig_types[62]
-#define SWIGTYPE_p_svn_diff_fns2_t swig_types[63]
-#define SWIGTYPE_p_svn_diff_fns_t swig_types[64]
-#define SWIGTYPE_p_svn_diff_hunk_t swig_types[65]
-#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[66]
-#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[67]
-#define SWIGTYPE_p_svn_diff_t swig_types[68]
-#define SWIGTYPE_p_svn_dirent_t swig_types[69]
-#define SWIGTYPE_p_svn_errno_t swig_types[70]
-#define SWIGTYPE_p_svn_error_t swig_types[71]
-#define SWIGTYPE_p_svn_fs_access_t swig_types[72]
-#define SWIGTYPE_p_svn_fs_dirent_t swig_types[73]
-#define SWIGTYPE_p_svn_fs_history_t swig_types[74]
-#define SWIGTYPE_p_svn_fs_id_t swig_types[75]
-#define SWIGTYPE_p_svn_fs_pack_notify_action_t swig_types[76]
-#define SWIGTYPE_p_svn_fs_path_change2_t swig_types[77]
-#define SWIGTYPE_p_svn_fs_path_change_kind_t swig_types[78]
-#define SWIGTYPE_p_svn_fs_path_change_t swig_types[79]
-#define SWIGTYPE_p_svn_fs_root_t swig_types[80]
-#define SWIGTYPE_p_svn_fs_t swig_types[81]
-#define SWIGTYPE_p_svn_fs_txn_t swig_types[82]
-#define SWIGTYPE_p_svn_io_dirent2_t swig_types[83]
-#define SWIGTYPE_p_svn_io_dirent_t swig_types[84]
-#define SWIGTYPE_p_svn_io_file_del_t swig_types[85]
-#define SWIGTYPE_p_svn_location_segment_t swig_types[86]
-#define SWIGTYPE_p_svn_lock_t swig_types[87]
-#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[88]
-#define SWIGTYPE_p_svn_log_changed_path_t swig_types[89]
-#define SWIGTYPE_p_svn_log_entry_t swig_types[90]
-#define SWIGTYPE_p_svn_merge_range_t swig_types[91]
-#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[92]
-#define SWIGTYPE_p_svn_node_kind_t swig_types[93]
-#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[94]
-#define SWIGTYPE_p_svn_opt_revision_t swig_types[95]
-#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[96]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[97]
-#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[98]
-#define SWIGTYPE_p_svn_patch_file_t swig_types[99]
-#define SWIGTYPE_p_svn_patch_t swig_types[100]
-#define SWIGTYPE_p_svn_prop_kind swig_types[101]
-#define SWIGTYPE_p_svn_prop_patch_t swig_types[102]
-#define SWIGTYPE_p_svn_repos_authz_access_t swig_types[103]
-#define SWIGTYPE_p_svn_repos_node_t swig_types[104]
-#define SWIGTYPE_p_svn_repos_notify_action_t swig_types[105]
-#define SWIGTYPE_p_svn_repos_notify_t swig_types[106]
-#define SWIGTYPE_p_svn_repos_notify_warning_t swig_types[107]
-#define SWIGTYPE_p_svn_repos_parse_fns2_t swig_types[108]
-#define SWIGTYPE_p_svn_repos_parse_fns_t swig_types[109]
-#define SWIGTYPE_p_svn_repos_revision_access_level_t swig_types[110]
-#define SWIGTYPE_p_svn_repos_t swig_types[111]
-#define SWIGTYPE_p_svn_stream_mark_t swig_types[112]
-#define SWIGTYPE_p_svn_stream_t swig_types[113]
-#define SWIGTYPE_p_svn_string_t swig_types[114]
-#define SWIGTYPE_p_svn_stringbuf_t swig_types[115]
-#define SWIGTYPE_p_svn_tristate_t swig_types[116]
-#define SWIGTYPE_p_svn_txdelta_op_t swig_types[117]
-#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[118]
-#define SWIGTYPE_p_svn_txdelta_window_t swig_types[119]
-#define SWIGTYPE_p_svn_version_checklist_t swig_types[120]
-#define SWIGTYPE_p_svn_version_t swig_types[121]
-#define SWIGTYPE_p_unsigned_long swig_types[122]
-#define SWIGTYPE_p_void swig_types[123]
-static swig_type_info *swig_types[125];
-static swig_module_info swig_module = {swig_types, 124, 0, 0, 0, 0};
+#define SWIGTYPE_p_f_int_p_void_p_apr_pool_t__p_svn_error_t swig_types[6]
+#define SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[7]
+#define SWIGTYPE_p_f_p_p_svn_stream_t_p_void__p_svn_error_t swig_types[8]
+#define SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[9]
+#define SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[10]
+#define SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[11]
+#define SWIGTYPE_p_f_p_svn_boolean_t_p_svn_fs_root_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[12]
+#define SWIGTYPE_p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[13]
+#define SWIGTYPE_p_f_p_svn_txdelta_window_handler_t_p_p_void_p_void__p_svn_error_t swig_types[14]
+#define SWIGTYPE_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t swig_types[15]
+#define SWIGTYPE_p_f_p_void__p_svn_error_t swig_types[16]
+#define SWIGTYPE_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t swig_types[17]
+#define SWIGTYPE_p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[18]
+#define SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t swig_types[19]
+#define SWIGTYPE_p_f_p_void_p_q_const__char__p_svn_error_t swig_types[20]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t swig_types[21]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[22]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[23]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_pool_t__p_svn_error_t swig_types[24]
+#define SWIGTYPE_p_f_p_void_p_q_const__struct_svn_repos_notify_t_p_apr_pool_t__void swig_types[25]
+#define SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t swig_types[26]
+#define SWIGTYPE_p_f_svn_repos_authz_access_t_p_svn_boolean_t_p_svn_fs_root_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[27]
+#define SWIGTYPE_p_f_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t swig_types[28]
+#define SWIGTYPE_p_int swig_types[29]
+#define SWIGTYPE_p_long swig_types[30]
+#define SWIGTYPE_p_p_apr_array_header_t swig_types[31]
+#define SWIGTYPE_p_p_apr_hash_t swig_types[32]
+#define SWIGTYPE_p_p_char swig_types[33]
+#define SWIGTYPE_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t swig_types[34]
+#define SWIGTYPE_p_p_svn_authz_t swig_types[35]
+#define SWIGTYPE_p_p_svn_delta_editor_t swig_types[36]
+#define SWIGTYPE_p_p_svn_dirent_t swig_types[37]
+#define SWIGTYPE_p_p_svn_fs_txn_t swig_types[38]
+#define SWIGTYPE_p_p_svn_lock_t swig_types[39]
+#define SWIGTYPE_p_p_svn_repos_parse_fns2_t swig_types[40]
+#define SWIGTYPE_p_p_svn_repos_parse_fns3_t swig_types[41]
+#define SWIGTYPE_p_p_svn_repos_parse_fns_t swig_types[42]
+#define SWIGTYPE_p_p_svn_repos_t swig_types[43]
+#define SWIGTYPE_p_p_svn_stream_t swig_types[44]
+#define SWIGTYPE_p_p_svn_string_t swig_types[45]
+#define SWIGTYPE_p_p_void swig_types[46]
+#define SWIGTYPE_p_svn_auth_baton_t swig_types[47]
+#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[48]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[49]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[50]
+#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[51]
+#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[52]
+#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[53]
+#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[54]
+#define SWIGTYPE_p_svn_auth_provider_t swig_types[55]
+#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[56]
+#define SWIGTYPE_p_svn_authz_t swig_types[57]
+#define SWIGTYPE_p_svn_checksum_ctx_t swig_types[58]
+#define SWIGTYPE_p_svn_checksum_kind_t swig_types[59]
+#define SWIGTYPE_p_svn_checksum_t swig_types[60]
+#define SWIGTYPE_p_svn_commit_info_t swig_types[61]
+#define SWIGTYPE_p_svn_config_t swig_types[62]
+#define SWIGTYPE_p_svn_delta_editor_t swig_types[63]
+#define SWIGTYPE_p_svn_depth_t swig_types[64]
+#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[65]
+#define SWIGTYPE_p_svn_diff_datasource_e swig_types[66]
+#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[67]
+#define SWIGTYPE_p_svn_diff_file_options_t swig_types[68]
+#define SWIGTYPE_p_svn_diff_fns2_t swig_types[69]
+#define SWIGTYPE_p_svn_diff_fns_t swig_types[70]
+#define SWIGTYPE_p_svn_diff_hunk_t swig_types[71]
+#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[72]
+#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[73]
+#define SWIGTYPE_p_svn_diff_t swig_types[74]
+#define SWIGTYPE_p_svn_dirent_t swig_types[75]
+#define SWIGTYPE_p_svn_errno_t swig_types[76]
+#define SWIGTYPE_p_svn_error_t swig_types[77]
+#define SWIGTYPE_p_svn_fs_access_t swig_types[78]
+#define SWIGTYPE_p_svn_fs_dirent_t swig_types[79]
+#define SWIGTYPE_p_svn_fs_history_t swig_types[80]
+#define SWIGTYPE_p_svn_fs_id_t swig_types[81]
+#define SWIGTYPE_p_svn_fs_pack_notify_action_t swig_types[82]
+#define SWIGTYPE_p_svn_fs_path_change2_t swig_types[83]
+#define SWIGTYPE_p_svn_fs_path_change_kind_t swig_types[84]
+#define SWIGTYPE_p_svn_fs_path_change_t swig_types[85]
+#define SWIGTYPE_p_svn_fs_root_t swig_types[86]
+#define SWIGTYPE_p_svn_fs_t swig_types[87]
+#define SWIGTYPE_p_svn_fs_txn_t swig_types[88]
+#define SWIGTYPE_p_svn_io_dirent2_t swig_types[89]
+#define SWIGTYPE_p_svn_io_dirent_t swig_types[90]
+#define SWIGTYPE_p_svn_io_file_del_t swig_types[91]
+#define SWIGTYPE_p_svn_location_segment_t swig_types[92]
+#define SWIGTYPE_p_svn_lock_t swig_types[93]
+#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[94]
+#define SWIGTYPE_p_svn_log_changed_path_t swig_types[95]
+#define SWIGTYPE_p_svn_log_entry_t swig_types[96]
+#define SWIGTYPE_p_svn_merge_range_t swig_types[97]
+#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[98]
+#define SWIGTYPE_p_svn_node_kind_t swig_types[99]
+#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[100]
+#define SWIGTYPE_p_svn_opt_revision_t swig_types[101]
+#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[102]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[103]
+#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[104]
+#define SWIGTYPE_p_svn_patch_file_t swig_types[105]
+#define SWIGTYPE_p_svn_patch_t swig_types[106]
+#define SWIGTYPE_p_svn_prop_inherited_item_t swig_types[107]
+#define SWIGTYPE_p_svn_prop_kind swig_types[108]
+#define SWIGTYPE_p_svn_prop_patch_t swig_types[109]
+#define SWIGTYPE_p_svn_repos_authz_access_t swig_types[110]
+#define SWIGTYPE_p_svn_repos_node_t swig_types[111]
+#define SWIGTYPE_p_svn_repos_notify_action_t swig_types[112]
+#define SWIGTYPE_p_svn_repos_notify_t swig_types[113]
+#define SWIGTYPE_p_svn_repos_notify_warning_t swig_types[114]
+#define SWIGTYPE_p_svn_repos_parse_fns2_t swig_types[115]
+#define SWIGTYPE_p_svn_repos_parse_fns3_t swig_types[116]
+#define SWIGTYPE_p_svn_repos_parse_fns_t swig_types[117]
+#define SWIGTYPE_p_svn_repos_revision_access_level_t swig_types[118]
+#define SWIGTYPE_p_svn_repos_t swig_types[119]
+#define SWIGTYPE_p_svn_stream_mark_t swig_types[120]
+#define SWIGTYPE_p_svn_stream_t swig_types[121]
+#define SWIGTYPE_p_svn_string_t swig_types[122]
+#define SWIGTYPE_p_svn_stringbuf_t swig_types[123]
+#define SWIGTYPE_p_svn_tristate_t swig_types[124]
+#define SWIGTYPE_p_svn_txdelta_op_t swig_types[125]
+#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[126]
+#define SWIGTYPE_p_svn_txdelta_window_t swig_types[127]
+#define SWIGTYPE_p_svn_version_checklist_t swig_types[128]
+#define SWIGTYPE_p_svn_version_ext_linked_lib_t swig_types[129]
+#define SWIGTYPE_p_svn_version_ext_loaded_lib_t swig_types[130]
+#define SWIGTYPE_p_svn_version_extended_t swig_types[131]
+#define SWIGTYPE_p_svn_version_t swig_types[132]
+#define SWIGTYPE_p_svn_wc_external_item2_t swig_types[133]
+#define SWIGTYPE_p_unsigned_long swig_types[134]
+#define SWIGTYPE_p_void swig_types[135]
+static swig_type_info *swig_types[137];
+static swig_module_info swig_module = {swig_types, 136, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@@ -1639,7 +1641,7 @@ static swig_module_info swig_module = {swig_types, 124, 0, 0, 0, 0};
#define SWIG_name "SVN::_Repos::boot_SVN___Repos"
#define SWIG_prefix "SVN::_Repos::"
-#define SWIGVERSION 0x020004
+#define SWIGVERSION 0x020009
#define SWIG_VERSION SWIGVERSION
@@ -1673,10 +1675,13 @@ SWIGEXPORT void SWIG_init (CV *cv, CPerlObj *);
SWIGINTERNINLINE SV *
SWIG_From_long SWIG_PERL_DECL_ARGS_1(long value)
-{
- SV *obj = sv_newmortal();
- sv_setiv(obj, (IV) value);
- return obj;
+{
+ SV *sv;
+ if (value >= IV_MIN && value <= IV_MAX)
+ sv = newSViv(value);
+ else
+ sv = newSVpvf("%ld", value);
+ return sv_2mortal(sv);
}
@@ -1767,9 +1772,20 @@ SWIG_CanCastAsInteger(double *d, double min, double max) {
SWIGINTERN int
SWIG_AsVal_long SWIG_PERL_DECL_ARGS_2(SV *obj, long* val)
{
- if (SvIOK(obj)) {
- if (val) *val = SvIV(obj);
- return SWIG_OK;
+ if (SvUOK(obj)) {
+ UV v = SvUV(obj);
+ if (v <= LONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
+ } else if (SvIOK(obj)) {
+ IV v = SvIV(obj);
+ if (v >= LONG_MIN && v <= LONG_MAX) {
+ if(val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
} else {
int dispatch = 0;
const char *nptr = SvPV_nolen(obj);
@@ -1908,9 +1924,20 @@ SWIG_FromCharPtr(const char *cptr)
SWIGINTERN int
SWIG_AsVal_long_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, long long *val)
{
- if (SvIOK(obj)) {
- if (val) *val = SvIV(obj);
- return SWIG_OK;
+ if (SvUOK(obj)) {
+ UV v = SvUV(obj);
+ if (v < LLONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
+ } else if (SvIOK(obj)) {
+ IV v = SvIV(obj);
+ if (v >= LLONG_MIN && v <= LLONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
} else {
int dispatch = 0;
const char *nptr = SvPV_nolen(obj);
@@ -1945,6 +1972,54 @@ SWIG_AsVal_long_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, long long *val)
SWIGINTERN int
+SWIG_AsVal_unsigned_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, unsigned long *val)
+{
+ if (SvUOK(obj)) {
+ UV v = SvUV(obj);
+ if (v <= ULONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
+ } else if (SvIOK(obj)) {
+ IV v = SvIV(obj);
+ if (v >= 0 && v <= ULONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
+ } else {
+ int dispatch = 0;
+ const char *nptr = SvPV_nolen(obj);
+ if (nptr) {
+ char *endptr;
+ unsigned long v;
+ errno = 0;
+ v = strtoul(nptr, &endptr,0);
+ if (errno == ERANGE) {
+ errno = 0;
+ return SWIG_OverflowError;
+ } else {
+ if (*endptr == '\0') {
+ if (val) *val = v;
+ return SWIG_Str2NumCast(SWIG_OK);
+ }
+ }
+ }
+ if (!dispatch) {
+ double d;
+ int res = SWIG_AddCast(SWIG_AsVal_double SWIG_PERL_CALL_ARGS_2(obj,&d));
+ if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, 0, ULONG_MAX)) {
+ if (val) *val = (unsigned long)(d);
+ return res;
+ }
+ }
+ }
+ return SWIG_TypeError;
+}
+
+
+SWIGINTERN int
SWIG_AsCharArray(SV * obj, char *val, size_t size)
{
char* cptr = 0; size_t csize = 0; int alloc = SWIG_OLDOBJ;
@@ -1994,6 +2069,66 @@ SWIG_From_char SWIG_PERL_DECL_ARGS_1(char c)
}
+static svn_error_t * svn_repos_parse_fns3_invoke_magic_header_record(
+ svn_repos_parse_fns3_t * _obj, int version, void *parse_baton, apr_pool_t *pool) {
+ return (_obj->magic_header_record)(version, parse_baton, pool);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_uuid_record(
+ svn_repos_parse_fns3_t * _obj, const char *uuid, void *parse_baton, apr_pool_t *pool) {
+ return (_obj->uuid_record)(uuid, parse_baton, pool);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_new_revision_record(
+ svn_repos_parse_fns3_t * _obj, void **revision_baton, apr_hash_t *headers, void *parse_baton, apr_pool_t *pool) {
+ return (_obj->new_revision_record)(revision_baton, headers, parse_baton, pool);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_new_node_record(
+ svn_repos_parse_fns3_t * _obj, void **node_baton, apr_hash_t *headers, void *revision_baton, apr_pool_t *pool) {
+ return (_obj->new_node_record)(node_baton, headers, revision_baton, pool);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_set_revision_property(
+ svn_repos_parse_fns3_t * _obj, void *revision_baton, const char *name, const svn_string_t *value) {
+ return (_obj->set_revision_property)(revision_baton, name, value);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_set_node_property(
+ svn_repos_parse_fns3_t * _obj, void *node_baton, const char *name, const svn_string_t *value) {
+ return (_obj->set_node_property)(node_baton, name, value);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_delete_node_property(
+ svn_repos_parse_fns3_t * _obj, void *node_baton, const char *name) {
+ return (_obj->delete_node_property)(node_baton, name);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_remove_node_props(
+ svn_repos_parse_fns3_t * _obj, void *node_baton) {
+ return (_obj->remove_node_props)(node_baton);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_set_fulltext(
+ svn_repos_parse_fns3_t * _obj, svn_stream_t **stream, void *node_baton) {
+ return (_obj->set_fulltext)(stream, node_baton);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_apply_textdelta(
+ svn_repos_parse_fns3_t * _obj, svn_txdelta_window_handler_t *handler, void **handler_baton, void *node_baton) {
+ return (_obj->apply_textdelta)(handler, handler_baton, node_baton);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_close_node(
+ svn_repos_parse_fns3_t * _obj, void *node_baton) {
+ return (_obj->close_node)(node_baton);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_close_revision(
+ svn_repos_parse_fns3_t * _obj, void *revision_baton) {
+ return (_obj->close_revision)(revision_baton);
+}
+
static svn_error_t * svn_repos_parse_fns2_invoke_new_revision_record(
svn_repos_parse_fns2_t * _obj, void **revision_baton, apr_hash_t *headers, void *parse_baton, apr_pool_t *pool) {
return (_obj->new_revision_record)(revision_baton, headers, parse_baton, pool);
@@ -2069,6 +2204,11 @@ static void svn_repos_invoke_notify_func(
_obj(baton, notify, scratch_pool);
}
+static svn_error_t * svn_repos_invoke_freeze_func(
+ svn_repos_freeze_func_t _obj, void *baton, apr_pool_t *pool) {
+ return _obj(baton, pool);
+}
+
static svn_error_t * svn_repos_invoke_history_func(
svn_repos_history_func_t _obj, void *baton, const char *path, svn_revnum_t revision, apr_pool_t *pool) {
return _obj(baton, path, revision, pool);
@@ -2129,7 +2269,7 @@ XS(_wrap_svn_repos_version) {
XS(_wrap_svn_repos_notify_t_action_set) {
{
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
svn_repos_notify_action_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2143,9 +2283,9 @@ XS(_wrap_svn_repos_notify_t_action_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_action_set" "', argument " "1"" of type '" "svn_repos_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_action_set" "', argument " "1"" of type '" "struct svn_repos_notify_t *""'");
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_repos_notify_t_action_set" "', argument " "2"" of type '" "svn_repos_notify_action_t""'");
@@ -2166,7 +2306,7 @@ XS(_wrap_svn_repos_notify_t_action_set) {
XS(_wrap_svn_repos_notify_t_action_get) {
{
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2178,9 +2318,9 @@ XS(_wrap_svn_repos_notify_t_action_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_action_get" "', argument " "1"" of type '" "svn_repos_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_action_get" "', argument " "1"" of type '" "struct svn_repos_notify_t *""'");
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
result = (svn_repos_notify_action_t) ((arg1)->action);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -2194,7 +2334,7 @@ XS(_wrap_svn_repos_notify_t_action_get) {
XS(_wrap_svn_repos_notify_t_revision_set) {
{
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2208,9 +2348,9 @@ XS(_wrap_svn_repos_notify_t_revision_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_revision_set" "', argument " "1"" of type '" "svn_repos_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_revision_set" "', argument " "1"" of type '" "struct svn_repos_notify_t *""'");
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_repos_notify_t_revision_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -2231,7 +2371,7 @@ XS(_wrap_svn_repos_notify_t_revision_set) {
XS(_wrap_svn_repos_notify_t_revision_get) {
{
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2243,9 +2383,9 @@ XS(_wrap_svn_repos_notify_t_revision_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_revision_get" "', argument " "1"" of type '" "svn_repos_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_revision_get" "', argument " "1"" of type '" "struct svn_repos_notify_t *""'");
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
result = (svn_revnum_t) ((arg1)->revision);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -2259,7 +2399,7 @@ XS(_wrap_svn_repos_notify_t_revision_get) {
XS(_wrap_svn_repos_notify_t_warning_str_set) {
{
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2274,9 +2414,9 @@ XS(_wrap_svn_repos_notify_t_warning_str_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_warning_str_set" "', argument " "1"" of type '" "svn_repos_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_warning_str_set" "', argument " "1"" of type '" "struct svn_repos_notify_t *""'");
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_repos_notify_t_warning_str_set" "', argument " "2"" of type '" "char const *""'");
@@ -2304,7 +2444,7 @@ XS(_wrap_svn_repos_notify_t_warning_str_set) {
XS(_wrap_svn_repos_notify_t_warning_str_get) {
{
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2316,9 +2456,9 @@ XS(_wrap_svn_repos_notify_t_warning_str_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_warning_str_get" "', argument " "1"" of type '" "svn_repos_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_warning_str_get" "', argument " "1"" of type '" "struct svn_repos_notify_t *""'");
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
result = (char *) ((arg1)->warning_str);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -2332,7 +2472,7 @@ XS(_wrap_svn_repos_notify_t_warning_str_get) {
XS(_wrap_svn_repos_notify_t_warning_set) {
{
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
svn_repos_notify_warning_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2346,9 +2486,9 @@ XS(_wrap_svn_repos_notify_t_warning_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_warning_set" "', argument " "1"" of type '" "svn_repos_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_warning_set" "', argument " "1"" of type '" "struct svn_repos_notify_t *""'");
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_repos_notify_t_warning_set" "', argument " "2"" of type '" "svn_repos_notify_warning_t""'");
@@ -2369,7 +2509,7 @@ XS(_wrap_svn_repos_notify_t_warning_set) {
XS(_wrap_svn_repos_notify_t_warning_get) {
{
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2381,9 +2521,9 @@ XS(_wrap_svn_repos_notify_t_warning_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_warning_get" "', argument " "1"" of type '" "svn_repos_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_warning_get" "', argument " "1"" of type '" "struct svn_repos_notify_t *""'");
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
result = (svn_repos_notify_warning_t) ((arg1)->warning);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -2397,7 +2537,7 @@ XS(_wrap_svn_repos_notify_t_warning_get) {
XS(_wrap_svn_repos_notify_t_shard_set) {
{
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
apr_int64_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2411,9 +2551,9 @@ XS(_wrap_svn_repos_notify_t_shard_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_shard_set" "', argument " "1"" of type '" "svn_repos_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_shard_set" "', argument " "1"" of type '" "struct svn_repos_notify_t *""'");
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_repos_notify_t_shard_set" "', argument " "2"" of type '" "apr_int64_t""'");
@@ -2434,7 +2574,7 @@ XS(_wrap_svn_repos_notify_t_shard_set) {
XS(_wrap_svn_repos_notify_t_shard_get) {
{
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2446,9 +2586,9 @@ XS(_wrap_svn_repos_notify_t_shard_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_shard_get" "', argument " "1"" of type '" "svn_repos_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_shard_get" "', argument " "1"" of type '" "struct svn_repos_notify_t *""'");
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
result = ((arg1)->shard);
{
char temp[256];
@@ -2467,7 +2607,7 @@ XS(_wrap_svn_repos_notify_t_shard_get) {
XS(_wrap_svn_repos_notify_t_new_revision_set) {
{
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2481,9 +2621,9 @@ XS(_wrap_svn_repos_notify_t_new_revision_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_new_revision_set" "', argument " "1"" of type '" "svn_repos_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_new_revision_set" "', argument " "1"" of type '" "struct svn_repos_notify_t *""'");
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_repos_notify_t_new_revision_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -2504,7 +2644,7 @@ XS(_wrap_svn_repos_notify_t_new_revision_set) {
XS(_wrap_svn_repos_notify_t_new_revision_get) {
{
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2516,9 +2656,9 @@ XS(_wrap_svn_repos_notify_t_new_revision_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_new_revision_get" "', argument " "1"" of type '" "svn_repos_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_new_revision_get" "', argument " "1"" of type '" "struct svn_repos_notify_t *""'");
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
result = (svn_revnum_t) ((arg1)->new_revision);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -2532,7 +2672,7 @@ XS(_wrap_svn_repos_notify_t_new_revision_get) {
XS(_wrap_svn_repos_notify_t_old_revision_set) {
{
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2546,9 +2686,9 @@ XS(_wrap_svn_repos_notify_t_old_revision_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_old_revision_set" "', argument " "1"" of type '" "svn_repos_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_old_revision_set" "', argument " "1"" of type '" "struct svn_repos_notify_t *""'");
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_repos_notify_t_old_revision_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -2569,7 +2709,7 @@ XS(_wrap_svn_repos_notify_t_old_revision_set) {
XS(_wrap_svn_repos_notify_t_old_revision_get) {
{
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2581,9 +2721,9 @@ XS(_wrap_svn_repos_notify_t_old_revision_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_old_revision_get" "', argument " "1"" of type '" "svn_repos_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_old_revision_get" "', argument " "1"" of type '" "struct svn_repos_notify_t *""'");
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
result = (svn_revnum_t) ((arg1)->old_revision);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -2597,7 +2737,7 @@ XS(_wrap_svn_repos_notify_t_old_revision_get) {
XS(_wrap_svn_repos_notify_t_node_action_set) {
{
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
enum svn_node_action arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2611,9 +2751,9 @@ XS(_wrap_svn_repos_notify_t_node_action_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_node_action_set" "', argument " "1"" of type '" "svn_repos_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_node_action_set" "', argument " "1"" of type '" "struct svn_repos_notify_t *""'");
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_repos_notify_t_node_action_set" "', argument " "2"" of type '" "enum svn_node_action""'");
@@ -2634,7 +2774,7 @@ XS(_wrap_svn_repos_notify_t_node_action_set) {
XS(_wrap_svn_repos_notify_t_node_action_get) {
{
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2646,9 +2786,9 @@ XS(_wrap_svn_repos_notify_t_node_action_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_node_action_get" "', argument " "1"" of type '" "svn_repos_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_node_action_get" "', argument " "1"" of type '" "struct svn_repos_notify_t *""'");
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
result = (enum svn_node_action) ((arg1)->node_action);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -2662,7 +2802,7 @@ XS(_wrap_svn_repos_notify_t_node_action_get) {
XS(_wrap_svn_repos_notify_t_path_set) {
{
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2677,9 +2817,9 @@ XS(_wrap_svn_repos_notify_t_path_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_path_set" "', argument " "1"" of type '" "svn_repos_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_path_set" "', argument " "1"" of type '" "struct svn_repos_notify_t *""'");
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_repos_notify_t_path_set" "', argument " "2"" of type '" "char const *""'");
@@ -2707,7 +2847,7 @@ XS(_wrap_svn_repos_notify_t_path_set) {
XS(_wrap_svn_repos_notify_t_path_get) {
{
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -2719,9 +2859,9 @@ XS(_wrap_svn_repos_notify_t_path_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_path_get" "', argument " "1"" of type '" "svn_repos_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_notify_t_path_get" "', argument " "1"" of type '" "struct svn_repos_notify_t *""'");
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
result = (char *) ((arg1)->path);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -3409,6 +3549,113 @@ XS(_wrap_svn_repos_fs) {
}
+XS(_wrap_svn_repos_hotcopy2) {
+ {
+ char *arg1 = (char *) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ svn_cancel_func_t arg5 = (svn_cancel_func_t) 0 ;
+ void *arg6 = (void *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int val3 ;
+ int ecode3 = 0 ;
+ int val4 ;
+ int ecode4 = 0 ;
+ int res6 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg7 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 6) || (items > 7)) {
+ SWIG_croak("Usage: svn_repos_hotcopy2(src_path,dst_path,clean_logs,incremental,cancel_func,cancel_baton,pool);");
+ }
+ res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_hotcopy2" "', argument " "1"" of type '" "char const *""'");
+ }
+ arg1 = (char *)(buf1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_repos_hotcopy2" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3);
+ if (!SWIG_IsOK(ecode3)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "svn_repos_hotcopy2" "', argument " "3"" of type '" "svn_boolean_t""'");
+ }
+ arg3 = (svn_boolean_t)(val3);
+ ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_repos_hotcopy2" "', argument " "4"" of type '" "svn_boolean_t""'");
+ }
+ arg4 = (svn_boolean_t)(val4);
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(4), (void**)(&arg5), SWIGTYPE_p_f_p_void__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_hotcopy2" "', argument " "5"" of type '" "svn_cancel_func_t""'");
+ }
+ }
+ res6 = SWIG_ConvertPtr(ST(5),SWIG_as_voidptrptr(&arg6), 0, 0);
+ if (!SWIG_IsOK(res6)) {
+ SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_repos_hotcopy2" "', argument " "6"" of type '" "void *""'");
+ }
+ if (items > 6) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_hotcopy2((char const *)arg1,(char const *)arg2,arg3,arg4,arg5,arg6,arg7);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_repos_hotcopy) {
{
char *arg1 = (char *) 0 ;
@@ -4024,6 +4271,78 @@ XS(_wrap_svn_repos_recover) {
}
+XS(_wrap_svn_repos_freeze) {
+ {
+ apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
+ svn_repos_freeze_func_t arg2 = (svn_repos_freeze_func_t) 0 ;
+ void *arg3 = (void *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int res3 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg4 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 3) || (items > 4)) {
+ SWIG_croak("Usage: svn_repos_freeze(paths,freeze_func,freeze_baton,pool);");
+ }
+ {
+ arg1 = (apr_array_header_t *) svn_swig_pl_strings_to_array(ST(0),
+ _global_pool);
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_freeze" "', argument " "2"" of type '" "svn_repos_freeze_func_t""'");
+ }
+ }
+ res3 = SWIG_ConvertPtr(ST(2),SWIG_as_voidptrptr(&arg3), 0, 0);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_repos_freeze" "', argument " "3"" of type '" "void *""'");
+ }
+ if (items > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_freeze(arg1,arg2,arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_repos_db_logfiles) {
{
apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
@@ -4832,6 +5151,250 @@ XS(_wrap_svn_repos_post_unlock_hook) {
}
+XS(_wrap_svn_repos_hooks_setenv) {
+ {
+ svn_repos_t *arg1 = (svn_repos_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg3 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 2) || (items > 3)) {
+ SWIG_croak("Usage: svn_repos_hooks_setenv(repos,hooks_env_path,scratch_pool);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_hooks_setenv" "', argument " "1"" of type '" "svn_repos_t *""'");
+ }
+ arg1 = (svn_repos_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_repos_hooks_setenv" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ if (items > 2) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_hooks_setenv(arg1,(char const *)arg2,arg3);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_begin_report3) {
+ {
+ void **arg1 = (void **) 0 ;
+ svn_revnum_t arg2 ;
+ svn_repos_t *arg3 = (svn_repos_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ char *arg5 = (char *) 0 ;
+ char *arg6 = (char *) 0 ;
+ svn_boolean_t arg7 ;
+ svn_depth_t arg8 ;
+ svn_boolean_t arg9 ;
+ svn_boolean_t arg10 ;
+ svn_delta_editor_t *arg11 = (svn_delta_editor_t *) 0 ;
+ void *arg12 = (void *) 0 ;
+ svn_repos_authz_func_t arg13 = (svn_repos_authz_func_t) 0 ;
+ void *arg14 = (void *) 0 ;
+ apr_size_t arg15 ;
+ apr_pool_t *arg16 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ void *temp1 ;
+ long val2 ;
+ int ecode2 = 0 ;
+ void *argp3 = 0 ;
+ int res3 = 0 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ int res5 ;
+ char *buf5 = 0 ;
+ int alloc5 = 0 ;
+ int res6 ;
+ char *buf6 = 0 ;
+ int alloc6 = 0 ;
+ int val7 ;
+ int ecode7 = 0 ;
+ int val8 ;
+ int ecode8 = 0 ;
+ int val9 ;
+ int ecode9 = 0 ;
+ int val10 ;
+ int ecode10 = 0 ;
+ unsigned long val15 ;
+ int ecode15 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg16 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ if ((items < 12) || (items > 13)) {
+ SWIG_croak("Usage: svn_repos_begin_report3(revnum,repos,fs_base,target,tgt_path,text_deltas,depth,ignore_ancestry,send_copyfrom_args,editor,edit_baton,authz_read_func,authz_read_baton,zero_copy_limit,pool);");
+ }
+ ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(0), &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_repos_begin_report3" "', argument " "2"" of type '" "svn_revnum_t""'");
+ }
+ arg2 = (svn_revnum_t)(val2);
+ res3 = SWIG_ConvertPtr(ST(1), &argp3,SWIGTYPE_p_svn_repos_t, 0 | 0 );
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_repos_begin_report3" "', argument " "3"" of type '" "svn_repos_t *""'");
+ }
+ arg3 = (svn_repos_t *)(argp3);
+ res4 = SWIG_AsCharPtrAndSize(ST(2), &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_repos_begin_report3" "', argument " "4"" of type '" "char const *""'");
+ }
+ arg4 = (char *)(buf4);
+ res5 = SWIG_AsCharPtrAndSize(ST(3), &buf5, NULL, &alloc5);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_repos_begin_report3" "', argument " "5"" of type '" "char const *""'");
+ }
+ arg5 = (char *)(buf5);
+ res6 = SWIG_AsCharPtrAndSize(ST(4), &buf6, NULL, &alloc6);
+ if (!SWIG_IsOK(res6)) {
+ SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_repos_begin_report3" "', argument " "6"" of type '" "char const *""'");
+ }
+ arg6 = (char *)(buf6);
+ ecode7 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val7);
+ if (!SWIG_IsOK(ecode7)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "svn_repos_begin_report3" "', argument " "7"" of type '" "svn_boolean_t""'");
+ }
+ arg7 = (svn_boolean_t)(val7);
+ ecode8 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(6), &val8);
+ if (!SWIG_IsOK(ecode8)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "svn_repos_begin_report3" "', argument " "8"" of type '" "svn_depth_t""'");
+ }
+ arg8 = (svn_depth_t)(val8);
+ ecode9 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(7), &val9);
+ if (!SWIG_IsOK(ecode9)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "svn_repos_begin_report3" "', argument " "9"" of type '" "svn_boolean_t""'");
+ }
+ arg9 = (svn_boolean_t)(val9);
+ ecode10 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(8), &val10);
+ if (!SWIG_IsOK(ecode10)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode10), "in method '" "svn_repos_begin_report3" "', argument " "10"" of type '" "svn_boolean_t""'");
+ }
+ arg10 = (svn_boolean_t)(val10);
+ {
+ svn_delta_make_editor(&arg11, &arg12, ST(9), _global_pool);
+ }
+ {
+ if (SvOK(ST(10))) {
+ arg13 = svn_swig_pl_thunk_authz_func;
+ arg14 = ST(10);
+ } else {
+ arg13 = NULL;
+ arg14 = NULL;
+ }
+ }
+ ecode15 = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(ST(11), &val15);
+ if (!SWIG_IsOK(ecode15)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode15), "in method '" "svn_repos_begin_report3" "', argument " "15"" of type '" "apr_size_t""'");
+ }
+ arg15 = (apr_size_t)(val15);
+ if (items > 12) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_begin_report3(arg1,arg2,arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,arg7,arg8,arg9,arg10,(struct svn_delta_editor_t const *)arg11,arg12,arg13,arg14,arg15,arg16);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg1, SWIGTYPE_p_void, 0); argvi++ ;
+ }
+
+
+
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_repos_begin_report2) {
{
void **arg1 = (void **) 0 ;
@@ -6470,9 +7033,6 @@ XS(_wrap_svn_repos_get_commit_editor5) {
int res6 ;
char *buf6 = 0 ;
int alloc6 = 0 ;
- void *argp7 = 0 ;
- int res7 = 0 ;
- int res9 ;
int res11 ;
int argvi = 0;
svn_error_t *result = 0 ;
@@ -6483,8 +7043,8 @@ XS(_wrap_svn_repos_get_commit_editor5) {
}
arg1 = &temp1;
arg2 = &temp2;
- if ((items < 9) || (items > 10)) {
- SWIG_croak("Usage: svn_repos_get_commit_editor5(repos,txn,repos_url,base_path,revprop_table,callback,callback_baton,authz_callback,authz_baton,pool);");
+ if ((items < 8) || (items > 9)) {
+ SWIG_croak("Usage: svn_repos_get_commit_editor5(repos,txn,repos_url,base_path,revprop_table,commit_callback,commit_baton,authz_callback,authz_baton,pool);");
}
res3 = SWIG_ConvertPtr(ST(0), &argp3,SWIGTYPE_p_svn_repos_t, 0 | 0 );
if (!SWIG_IsOK(res3)) {
@@ -6506,32 +7066,27 @@ XS(_wrap_svn_repos_get_commit_editor5) {
SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_repos_get_commit_editor5" "', argument " "6"" of type '" "char const *""'");
}
arg6 = (char *)(buf6);
- res7 = SWIG_ConvertPtr(ST(4), &argp7,SWIGTYPE_p_apr_hash_t, 0 | 0 );
- if (!SWIG_IsOK(res7)) {
- SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_repos_get_commit_editor5" "', argument " "7"" of type '" "apr_hash_t *""'");
- }
- arg7 = (apr_hash_t *)(argp7);
{
- int res = SWIG_ConvertFunctionPtr(ST(5), (void**)(&arg8), SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_get_commit_editor5" "', argument " "8"" of type '" "svn_commit_callback2_t""'");
- }
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg7 = svn_swig_pl_hash_to_prophash(ST(4), _global_pool);
}
- res9 = SWIG_ConvertPtr(ST(6),SWIG_as_voidptrptr(&arg9), 0, 0);
- if (!SWIG_IsOK(res9)) {
- SWIG_exception_fail(SWIG_ArgError(res9), "in method '" "svn_repos_get_commit_editor5" "', argument " "9"" of type '" "void *""'");
+ {
+ arg8 = svn_swig_pl_thunk_commit_callback2;
+ arg9 = (void *)ST(5);
+ svn_swig_pl_hold_ref_in_pool (_global_pool, ST(5));
}
{
- int res = SWIG_ConvertFunctionPtr(ST(7), (void**)(&arg10), SWIGTYPE_p_f_svn_repos_authz_access_t_p_svn_boolean_t_p_svn_fs_root_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t);
+ int res = SWIG_ConvertFunctionPtr(ST(6), (void**)(&arg10), SWIGTYPE_p_f_svn_repos_authz_access_t_p_svn_boolean_t_p_svn_fs_root_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_get_commit_editor5" "', argument " "10"" of type '" "svn_repos_authz_callback_t""'");
}
}
- res11 = SWIG_ConvertPtr(ST(8),SWIG_as_voidptrptr(&arg11), 0, 0);
+ res11 = SWIG_ConvertPtr(ST(7),SWIG_as_voidptrptr(&arg11), 0, 0);
if (!SWIG_IsOK(res11)) {
SWIG_exception_fail(SWIG_ArgError(res11), "in method '" "svn_repos_get_commit_editor5" "', argument " "11"" of type '" "void *""'");
}
- if (items > 9) {
+ if (items > 8) {
}
{
@@ -6572,8 +7127,6 @@ XS(_wrap_svn_repos_get_commit_editor5) {
-
-
XSRETURN(argvi);
fail:
@@ -6586,8 +7139,6 @@ XS(_wrap_svn_repos_get_commit_editor5) {
-
-
SWIG_croak_null();
}
}
@@ -6627,7 +7178,6 @@ XS(_wrap_svn_repos_get_commit_editor4) {
int res8 ;
char *buf8 = 0 ;
int alloc8 = 0 ;
- int res10 ;
int res12 ;
int argvi = 0;
svn_error_t *result = 0 ;
@@ -6638,8 +7188,8 @@ XS(_wrap_svn_repos_get_commit_editor4) {
}
arg1 = &temp1;
arg2 = &temp2;
- if ((items < 10) || (items > 11)) {
- SWIG_croak("Usage: svn_repos_get_commit_editor4(repos,txn,repos_url,base_path,user,log_msg,callback,callback_baton,authz_callback,authz_baton,pool);");
+ if ((items < 9) || (items > 10)) {
+ SWIG_croak("Usage: svn_repos_get_commit_editor4(repos,txn,repos_url,base_path,user,log_msg,commit_callback,commit_baton,authz_callback,authz_baton,pool);");
}
res3 = SWIG_ConvertPtr(ST(0), &argp3,SWIGTYPE_p_svn_repos_t, 0 | 0 );
if (!SWIG_IsOK(res3)) {
@@ -6672,26 +7222,21 @@ XS(_wrap_svn_repos_get_commit_editor4) {
}
arg8 = (char *)(buf8);
{
- int res = SWIG_ConvertFunctionPtr(ST(6), (void**)(&arg9), SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_get_commit_editor4" "', argument " "9"" of type '" "svn_commit_callback2_t""'");
- }
- }
- res10 = SWIG_ConvertPtr(ST(7),SWIG_as_voidptrptr(&arg10), 0, 0);
- if (!SWIG_IsOK(res10)) {
- SWIG_exception_fail(SWIG_ArgError(res10), "in method '" "svn_repos_get_commit_editor4" "', argument " "10"" of type '" "void *""'");
+ arg9 = svn_swig_pl_thunk_commit_callback2;
+ arg10 = (void *)ST(6);
+ svn_swig_pl_hold_ref_in_pool (_global_pool, ST(6));
}
{
- int res = SWIG_ConvertFunctionPtr(ST(8), (void**)(&arg11), SWIGTYPE_p_f_svn_repos_authz_access_t_p_svn_boolean_t_p_svn_fs_root_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t);
+ int res = SWIG_ConvertFunctionPtr(ST(7), (void**)(&arg11), SWIGTYPE_p_f_svn_repos_authz_access_t_p_svn_boolean_t_p_svn_fs_root_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_get_commit_editor4" "', argument " "11"" of type '" "svn_repos_authz_callback_t""'");
}
}
- res12 = SWIG_ConvertPtr(ST(9),SWIG_as_voidptrptr(&arg12), 0, 0);
+ res12 = SWIG_ConvertPtr(ST(8),SWIG_as_voidptrptr(&arg12), 0, 0);
if (!SWIG_IsOK(res12)) {
SWIG_exception_fail(SWIG_ArgError(res12), "in method '" "svn_repos_get_commit_editor4" "', argument " "12"" of type '" "void *""'");
}
- if (items > 10) {
+ if (items > 9) {
}
{
@@ -6733,8 +7278,6 @@ XS(_wrap_svn_repos_get_commit_editor4) {
-
-
XSRETURN(argvi);
fail:
@@ -6748,8 +7291,6 @@ XS(_wrap_svn_repos_get_commit_editor4) {
-
-
SWIG_croak_null();
}
}
@@ -8023,7 +8564,6 @@ XS(_wrap_svn_repos_get_logs4) {
int ecode7 = 0 ;
int val8 ;
int ecode8 = 0 ;
- int res13 ;
int argvi = 0;
svn_error_t *result = 0 ;
dXSARGS;
@@ -8031,7 +8571,7 @@ XS(_wrap_svn_repos_get_logs4) {
{
_global_pool = arg14 = svn_swig_pl_make_pool (ST(items-1));
}
- if ((items < 12) || (items > 13)) {
+ if ((items < 11) || (items > 12)) {
SWIG_croak("Usage: svn_repos_get_logs4(repos,paths,start,end,limit,discover_changed_paths,strict_node_history,include_merged_revisions,revprops,authz_read_func,authz_read_baton,receiver,receiver_baton,pool);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_t, 0 | 0 );
@@ -8074,8 +8614,8 @@ XS(_wrap_svn_repos_get_logs4) {
}
arg8 = (svn_boolean_t)(val8);
{
- arg9 = (apr_array_header_t *) svn_swig_pl_strings_to_array(ST(8),
- _global_pool);
+ arg9 = SvOK(ST(8)) ? (apr_array_header_t *) svn_swig_pl_strings_to_array(
+ ST(8), _global_pool) : NULL;
}
{
if (SvOK(ST(9))) {
@@ -8087,16 +8627,10 @@ XS(_wrap_svn_repos_get_logs4) {
}
}
{
- int res = SWIG_ConvertFunctionPtr(ST(10), (void**)(&arg12), SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_get_logs4" "', argument " "12"" of type '" "svn_log_entry_receiver_t""'");
- }
- }
- res13 = SWIG_ConvertPtr(ST(11),SWIG_as_voidptrptr(&arg13), 0, 0);
- if (!SWIG_IsOK(res13)) {
- SWIG_exception_fail(SWIG_ArgError(res13), "in method '" "svn_repos_get_logs4" "', argument " "13"" of type '" "void *""'");
+ arg12 = svn_swig_pl_thunk_log_entry_receiver;
+ arg13 = ST(10);
}
- if (items > 12) {
+ if (items > 11) {
}
{
@@ -8131,8 +8665,6 @@ XS(_wrap_svn_repos_get_logs4) {
-
-
XSRETURN(argvi);
fail:
@@ -8145,8 +8677,6 @@ XS(_wrap_svn_repos_get_logs4) {
-
-
SWIG_croak_null();
}
}
@@ -8234,7 +8764,7 @@ XS(_wrap_svn_repos_get_logs3) {
}
{
arg10 = svn_swig_pl_thunk_log_receiver;
- arg11 = (void *)ST(8);
+ arg11 = ST(8);
}
if (items > 9) {
@@ -8358,7 +8888,7 @@ XS(_wrap_svn_repos_get_logs2) {
}
{
arg9 = svn_swig_pl_thunk_log_receiver;
- arg10 = (void *)ST(7);
+ arg10 = ST(7);
}
if (items > 8) {
@@ -8469,7 +8999,7 @@ XS(_wrap_svn_repos_get_logs) {
arg6 = (svn_boolean_t)(val6);
{
arg7 = svn_swig_pl_thunk_log_receiver;
- arg8 = (void *)ST(6);
+ arg8 = ST(6);
}
if (items > 7) {
@@ -8986,8 +9516,6 @@ XS(_wrap_svn_repos_fs_begin_txn_for_commit2) {
int res2 = 0 ;
long val3 ;
int ecode3 = 0 ;
- void *argp4 = 0 ;
- int res4 = 0 ;
int argvi = 0;
svn_error_t *result = 0 ;
dXSARGS;
@@ -9009,11 +9537,11 @@ XS(_wrap_svn_repos_fs_begin_txn_for_commit2) {
SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "svn_repos_fs_begin_txn_for_commit2" "', argument " "3"" of type '" "svn_revnum_t""'");
}
arg3 = (svn_revnum_t)(val3);
- res4 = SWIG_ConvertPtr(ST(2), &argp4,SWIGTYPE_p_apr_hash_t, 0 | 0 );
- if (!SWIG_IsOK(res4)) {
- SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_repos_fs_begin_txn_for_commit2" "', argument " "4"" of type '" "apr_hash_t *""'");
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg4 = svn_swig_pl_hash_to_prophash(ST(2), _global_pool);
}
- arg4 = (apr_hash_t *)(argp4);
if (items > 3) {
}
@@ -10597,7 +11125,7 @@ XS(_wrap_svn_repos_fs_change_txn_props) {
XS(_wrap_svn_repos_node_t_kind_set) {
{
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10611,9 +11139,9 @@ XS(_wrap_svn_repos_node_t_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_kind_set" "', argument " "1"" of type '" "svn_repos_node_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_kind_set" "', argument " "1"" of type '" "struct svn_repos_node_t *""'");
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_repos_node_t_kind_set" "', argument " "2"" of type '" "svn_node_kind_t""'");
@@ -10634,7 +11162,7 @@ XS(_wrap_svn_repos_node_t_kind_set) {
XS(_wrap_svn_repos_node_t_kind_get) {
{
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10646,9 +11174,9 @@ XS(_wrap_svn_repos_node_t_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_kind_get" "', argument " "1"" of type '" "svn_repos_node_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_kind_get" "', argument " "1"" of type '" "struct svn_repos_node_t *""'");
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -10662,7 +11190,7 @@ XS(_wrap_svn_repos_node_t_kind_get) {
XS(_wrap_svn_repos_node_t_action_set) {
{
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
char arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10676,9 +11204,9 @@ XS(_wrap_svn_repos_node_t_action_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_action_set" "', argument " "1"" of type '" "svn_repos_node_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_action_set" "', argument " "1"" of type '" "struct svn_repos_node_t *""'");
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
ecode2 = SWIG_AsVal_char SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_repos_node_t_action_set" "', argument " "2"" of type '" "char""'");
@@ -10699,7 +11227,7 @@ XS(_wrap_svn_repos_node_t_action_set) {
XS(_wrap_svn_repos_node_t_action_get) {
{
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10711,9 +11239,9 @@ XS(_wrap_svn_repos_node_t_action_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_action_get" "', argument " "1"" of type '" "svn_repos_node_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_action_get" "', argument " "1"" of type '" "struct svn_repos_node_t *""'");
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
result = (char) ((arg1)->action);
ST(argvi) = SWIG_From_char SWIG_PERL_CALL_ARGS_1((char)(result)); argvi++ ;
@@ -10727,7 +11255,7 @@ XS(_wrap_svn_repos_node_t_action_get) {
XS(_wrap_svn_repos_node_t_text_mod_set) {
{
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10741,9 +11269,9 @@ XS(_wrap_svn_repos_node_t_text_mod_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_text_mod_set" "', argument " "1"" of type '" "svn_repos_node_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_text_mod_set" "', argument " "1"" of type '" "struct svn_repos_node_t *""'");
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_repos_node_t_text_mod_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -10764,7 +11292,7 @@ XS(_wrap_svn_repos_node_t_text_mod_set) {
XS(_wrap_svn_repos_node_t_text_mod_get) {
{
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10776,9 +11304,9 @@ XS(_wrap_svn_repos_node_t_text_mod_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_text_mod_get" "', argument " "1"" of type '" "svn_repos_node_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_text_mod_get" "', argument " "1"" of type '" "struct svn_repos_node_t *""'");
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
result = (svn_boolean_t) ((arg1)->text_mod);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -10792,7 +11320,7 @@ XS(_wrap_svn_repos_node_t_text_mod_get) {
XS(_wrap_svn_repos_node_t_prop_mod_set) {
{
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10806,9 +11334,9 @@ XS(_wrap_svn_repos_node_t_prop_mod_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_prop_mod_set" "', argument " "1"" of type '" "svn_repos_node_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_prop_mod_set" "', argument " "1"" of type '" "struct svn_repos_node_t *""'");
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_repos_node_t_prop_mod_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -10829,7 +11357,7 @@ XS(_wrap_svn_repos_node_t_prop_mod_set) {
XS(_wrap_svn_repos_node_t_prop_mod_get) {
{
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10841,9 +11369,9 @@ XS(_wrap_svn_repos_node_t_prop_mod_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_prop_mod_get" "', argument " "1"" of type '" "svn_repos_node_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_prop_mod_get" "', argument " "1"" of type '" "struct svn_repos_node_t *""'");
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
result = (svn_boolean_t) ((arg1)->prop_mod);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -10857,7 +11385,7 @@ XS(_wrap_svn_repos_node_t_prop_mod_get) {
XS(_wrap_svn_repos_node_t_name_set) {
{
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10872,9 +11400,9 @@ XS(_wrap_svn_repos_node_t_name_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_name_set" "', argument " "1"" of type '" "svn_repos_node_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_name_set" "', argument " "1"" of type '" "struct svn_repos_node_t *""'");
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_repos_node_t_name_set" "', argument " "2"" of type '" "char const *""'");
@@ -10902,7 +11430,7 @@ XS(_wrap_svn_repos_node_t_name_set) {
XS(_wrap_svn_repos_node_t_name_get) {
{
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10914,9 +11442,9 @@ XS(_wrap_svn_repos_node_t_name_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_name_get" "', argument " "1"" of type '" "svn_repos_node_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_name_get" "', argument " "1"" of type '" "struct svn_repos_node_t *""'");
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
result = (char *) ((arg1)->name);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -10930,7 +11458,7 @@ XS(_wrap_svn_repos_node_t_name_get) {
XS(_wrap_svn_repos_node_t_copyfrom_rev_set) {
{
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10944,9 +11472,9 @@ XS(_wrap_svn_repos_node_t_copyfrom_rev_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_copyfrom_rev_set" "', argument " "1"" of type '" "svn_repos_node_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_copyfrom_rev_set" "', argument " "1"" of type '" "struct svn_repos_node_t *""'");
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_repos_node_t_copyfrom_rev_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -10967,7 +11495,7 @@ XS(_wrap_svn_repos_node_t_copyfrom_rev_set) {
XS(_wrap_svn_repos_node_t_copyfrom_rev_get) {
{
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10979,9 +11507,9 @@ XS(_wrap_svn_repos_node_t_copyfrom_rev_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_copyfrom_rev_get" "', argument " "1"" of type '" "svn_repos_node_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_copyfrom_rev_get" "', argument " "1"" of type '" "struct svn_repos_node_t *""'");
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
result = (svn_revnum_t) ((arg1)->copyfrom_rev);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -10995,7 +11523,7 @@ XS(_wrap_svn_repos_node_t_copyfrom_rev_get) {
XS(_wrap_svn_repos_node_t_copyfrom_path_set) {
{
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11010,9 +11538,9 @@ XS(_wrap_svn_repos_node_t_copyfrom_path_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_copyfrom_path_set" "', argument " "1"" of type '" "svn_repos_node_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_copyfrom_path_set" "', argument " "1"" of type '" "struct svn_repos_node_t *""'");
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_repos_node_t_copyfrom_path_set" "', argument " "2"" of type '" "char const *""'");
@@ -11038,7 +11566,7 @@ XS(_wrap_svn_repos_node_t_copyfrom_path_set) {
XS(_wrap_svn_repos_node_t_copyfrom_path_get) {
{
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11050,9 +11578,9 @@ XS(_wrap_svn_repos_node_t_copyfrom_path_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_copyfrom_path_get" "', argument " "1"" of type '" "svn_repos_node_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_copyfrom_path_get" "', argument " "1"" of type '" "struct svn_repos_node_t *""'");
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
result = (char *) ((arg1)->copyfrom_path);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -11066,7 +11594,7 @@ XS(_wrap_svn_repos_node_t_copyfrom_path_get) {
XS(_wrap_svn_repos_node_t_sibling_set) {
{
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
struct svn_repos_node_t *arg2 = (struct svn_repos_node_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11080,9 +11608,9 @@ XS(_wrap_svn_repos_node_t_sibling_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_sibling_set" "', argument " "1"" of type '" "svn_repos_node_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_sibling_set" "', argument " "1"" of type '" "struct svn_repos_node_t *""'");
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_repos_node_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_repos_node_t_sibling_set" "', argument " "2"" of type '" "struct svn_repos_node_t *""'");
@@ -11103,7 +11631,7 @@ XS(_wrap_svn_repos_node_t_sibling_set) {
XS(_wrap_svn_repos_node_t_sibling_get) {
{
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11115,9 +11643,9 @@ XS(_wrap_svn_repos_node_t_sibling_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_sibling_get" "', argument " "1"" of type '" "svn_repos_node_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_sibling_get" "', argument " "1"" of type '" "struct svn_repos_node_t *""'");
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
result = (struct svn_repos_node_t *) ((arg1)->sibling);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_repos_node_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -11131,7 +11659,7 @@ XS(_wrap_svn_repos_node_t_sibling_get) {
XS(_wrap_svn_repos_node_t_child_set) {
{
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
struct svn_repos_node_t *arg2 = (struct svn_repos_node_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11145,9 +11673,9 @@ XS(_wrap_svn_repos_node_t_child_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_child_set" "', argument " "1"" of type '" "svn_repos_node_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_child_set" "', argument " "1"" of type '" "struct svn_repos_node_t *""'");
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_repos_node_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_repos_node_t_child_set" "', argument " "2"" of type '" "struct svn_repos_node_t *""'");
@@ -11168,7 +11696,7 @@ XS(_wrap_svn_repos_node_t_child_set) {
XS(_wrap_svn_repos_node_t_child_get) {
{
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11180,9 +11708,9 @@ XS(_wrap_svn_repos_node_t_child_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_child_get" "', argument " "1"" of type '" "svn_repos_node_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_child_get" "', argument " "1"" of type '" "struct svn_repos_node_t *""'");
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
result = (struct svn_repos_node_t *) ((arg1)->child);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_repos_node_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -11196,7 +11724,7 @@ XS(_wrap_svn_repos_node_t_child_get) {
XS(_wrap_svn_repos_node_t_parent_set) {
{
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
struct svn_repos_node_t *arg2 = (struct svn_repos_node_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11210,9 +11738,9 @@ XS(_wrap_svn_repos_node_t_parent_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_parent_set" "', argument " "1"" of type '" "svn_repos_node_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_parent_set" "', argument " "1"" of type '" "struct svn_repos_node_t *""'");
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_repos_node_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_repos_node_t_parent_set" "', argument " "2"" of type '" "struct svn_repos_node_t *""'");
@@ -11233,7 +11761,7 @@ XS(_wrap_svn_repos_node_t_parent_set) {
XS(_wrap_svn_repos_node_t_parent_get) {
{
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11245,9 +11773,9 @@ XS(_wrap_svn_repos_node_t_parent_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_parent_get" "', argument " "1"" of type '" "svn_repos_node_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_node_t_parent_get" "', argument " "1"" of type '" "struct svn_repos_node_t *""'");
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
result = (struct svn_repos_node_t *) ((arg1)->parent);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_repos_node_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -11988,6 +12516,175 @@ XS(_wrap_svn_repos_dump_fs) {
}
+XS(_wrap_svn_repos_load_fs4) {
+ {
+ svn_repos_t *arg1 = (svn_repos_t *) 0 ;
+ svn_stream_t *arg2 = (svn_stream_t *) 0 ;
+ svn_revnum_t arg3 ;
+ svn_revnum_t arg4 ;
+ enum svn_repos_load_uuid arg5 ;
+ char *arg6 = (char *) 0 ;
+ svn_boolean_t arg7 ;
+ svn_boolean_t arg8 ;
+ svn_boolean_t arg9 ;
+ svn_repos_notify_func_t arg10 = (svn_repos_notify_func_t) 0 ;
+ void *arg11 = (void *) 0 ;
+ svn_cancel_func_t arg12 = (svn_cancel_func_t) 0 ;
+ void *arg13 = (void *) 0 ;
+ apr_pool_t *arg14 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ long val3 ;
+ int ecode3 = 0 ;
+ long val4 ;
+ int ecode4 = 0 ;
+ int val5 ;
+ int ecode5 = 0 ;
+ int res6 ;
+ char *buf6 = 0 ;
+ int alloc6 = 0 ;
+ int val7 ;
+ int ecode7 = 0 ;
+ int val8 ;
+ int ecode8 = 0 ;
+ int val9 ;
+ int ecode9 = 0 ;
+ int res11 ;
+ int res13 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg14 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 13) || (items > 14)) {
+ SWIG_croak("Usage: svn_repos_load_fs4(repos,dumpstream,start_rev,end_rev,uuid_action,parent_dir,use_pre_commit_hook,use_post_commit_hook,validate_props,notify_func,notify_baton,cancel_func,cancel_baton,pool);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_load_fs4" "', argument " "1"" of type '" "svn_repos_t *""'");
+ }
+ arg1 = (svn_repos_t *)(argp1);
+ {
+ svn_swig_pl_make_stream (&arg2, ST(1));
+ }
+ ecode3 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(2), &val3);
+ if (!SWIG_IsOK(ecode3)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "svn_repos_load_fs4" "', argument " "3"" of type '" "svn_revnum_t""'");
+ }
+ arg3 = (svn_revnum_t)(val3);
+ ecode4 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(3), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_repos_load_fs4" "', argument " "4"" of type '" "svn_revnum_t""'");
+ }
+ arg4 = (svn_revnum_t)(val4);
+ ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val5);
+ if (!SWIG_IsOK(ecode5)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_repos_load_fs4" "', argument " "5"" of type '" "enum svn_repos_load_uuid""'");
+ }
+ arg5 = (enum svn_repos_load_uuid)(val5);
+ res6 = SWIG_AsCharPtrAndSize(ST(5), &buf6, NULL, &alloc6);
+ if (!SWIG_IsOK(res6)) {
+ SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_repos_load_fs4" "', argument " "6"" of type '" "char const *""'");
+ }
+ arg6 = (char *)(buf6);
+ ecode7 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(6), &val7);
+ if (!SWIG_IsOK(ecode7)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "svn_repos_load_fs4" "', argument " "7"" of type '" "svn_boolean_t""'");
+ }
+ arg7 = (svn_boolean_t)(val7);
+ ecode8 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(7), &val8);
+ if (!SWIG_IsOK(ecode8)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "svn_repos_load_fs4" "', argument " "8"" of type '" "svn_boolean_t""'");
+ }
+ arg8 = (svn_boolean_t)(val8);
+ ecode9 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(8), &val9);
+ if (!SWIG_IsOK(ecode9)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "svn_repos_load_fs4" "', argument " "9"" of type '" "svn_boolean_t""'");
+ }
+ arg9 = (svn_boolean_t)(val9);
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(9), (void**)(&arg10), SWIGTYPE_p_f_p_void_p_q_const__struct_svn_repos_notify_t_p_apr_pool_t__void);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_load_fs4" "', argument " "10"" of type '" "svn_repos_notify_func_t""'");
+ }
+ }
+ res11 = SWIG_ConvertPtr(ST(10),SWIG_as_voidptrptr(&arg11), 0, 0);
+ if (!SWIG_IsOK(res11)) {
+ SWIG_exception_fail(SWIG_ArgError(res11), "in method '" "svn_repos_load_fs4" "', argument " "11"" of type '" "void *""'");
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(11), (void**)(&arg12), SWIGTYPE_p_f_p_void__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_load_fs4" "', argument " "12"" of type '" "svn_cancel_func_t""'");
+ }
+ }
+ res13 = SWIG_ConvertPtr(ST(12),SWIG_as_voidptrptr(&arg13), 0, 0);
+ if (!SWIG_IsOK(res13)) {
+ SWIG_exception_fail(SWIG_ArgError(res13), "in method '" "svn_repos_load_fs4" "', argument " "13"" of type '" "void *""'");
+ }
+ if (items > 13) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_load_fs4(arg1,arg2,arg3,arg4,arg5,(char const *)arg6,arg7,arg8,arg9,arg10,arg11,arg12,arg13,arg14);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+
+
+
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+
+
+
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+
+
+
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_repos_load_fs3) {
{
svn_repos_t *arg1 = (svn_repos_t *) 0 ;
@@ -12373,30 +13070,30 @@ XS(_wrap_svn_repos_load_fs) {
}
-XS(_wrap_svn_repos_parse_fns2_t_new_revision_record_set) {
+XS(_wrap_svn_repos_parse_fns3_t_magic_header_record_set) {
{
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
- svn_error_t *(*arg2)(void **,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
+ svn_error_t *(*arg2)(int,void *,apr_pool_t *) = (svn_error_t *(*)(int,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
dXSARGS;
if ((items < 2) || (items > 2)) {
- SWIG_croak("Usage: svn_repos_parse_fns2_t_new_revision_record_set(self,new_revision_record);");
+ SWIG_croak("Usage: svn_repos_parse_fns3_t_magic_header_record_set(self,magic_header_record);");
}
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_new_revision_record_set" "', argument " "1"" of type '" "svn_repos_parse_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_t_magic_header_record_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns3_t *""'");
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
{
- int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
+ int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_int_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_new_revision_record_set" "', argument " "2"" of type '" "svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)""'");
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns3_t_magic_header_record_set" "', argument " "2"" of type '" "svn_error_t *(*)(int,void *,apr_pool_t *)""'");
}
}
- if (arg1) (arg1)->new_revision_record = arg2;
+ if (arg1) (arg1)->magic_header_record = arg2;
ST(argvi) = sv_newmortal();
@@ -12409,25 +13106,25 @@ XS(_wrap_svn_repos_parse_fns2_t_new_revision_record_set) {
}
-XS(_wrap_svn_repos_parse_fns2_t_new_revision_record_get) {
+XS(_wrap_svn_repos_parse_fns3_t_magic_header_record_get) {
{
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
- svn_error_t *(*result)(void **,apr_hash_t *,void *,apr_pool_t *) = 0 ;
+ svn_error_t *(*result)(int,void *,apr_pool_t *) = 0 ;
dXSARGS;
if ((items < 1) || (items > 1)) {
- SWIG_croak("Usage: svn_repos_parse_fns2_t_new_revision_record_get(self);");
+ SWIG_croak("Usage: svn_repos_parse_fns3_t_magic_header_record_get(self);");
}
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_new_revision_record_get" "', argument " "1"" of type '" "svn_repos_parse_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_t_magic_header_record_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns3_t *""'");
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
- result = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) ((arg1)->new_revision_record);
- ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
+ result = (svn_error_t *(*)(int,void *,apr_pool_t *)) ((arg1)->magic_header_record);
+ ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_int_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
XSRETURN(argvi);
fail:
@@ -12437,9 +13134,9 @@ XS(_wrap_svn_repos_parse_fns2_t_new_revision_record_get) {
}
-XS(_wrap_svn_repos_parse_fns2_t_uuid_record_set) {
+XS(_wrap_svn_repos_parse_fns3_t_uuid_record_set) {
{
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(char const *,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12447,17 +13144,17 @@ XS(_wrap_svn_repos_parse_fns2_t_uuid_record_set) {
dXSARGS;
if ((items < 2) || (items > 2)) {
- SWIG_croak("Usage: svn_repos_parse_fns2_t_uuid_record_set(self,uuid_record);");
+ SWIG_croak("Usage: svn_repos_parse_fns3_t_uuid_record_set(self,uuid_record);");
}
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_uuid_record_set" "', argument " "1"" of type '" "svn_repos_parse_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_t_uuid_record_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns3_t *""'");
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_uuid_record_set" "', argument " "2"" of type '" "svn_error_t *(*)(char const *,void *,apr_pool_t *)""'");
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns3_t_uuid_record_set" "', argument " "2"" of type '" "svn_error_t *(*)(char const *,void *,apr_pool_t *)""'");
}
}
if (arg1) (arg1)->uuid_record = arg2;
@@ -12473,9 +13170,9 @@ XS(_wrap_svn_repos_parse_fns2_t_uuid_record_set) {
}
-XS(_wrap_svn_repos_parse_fns2_t_uuid_record_get) {
+XS(_wrap_svn_repos_parse_fns3_t_uuid_record_get) {
{
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12483,13 +13180,13 @@ XS(_wrap_svn_repos_parse_fns2_t_uuid_record_get) {
dXSARGS;
if ((items < 1) || (items > 1)) {
- SWIG_croak("Usage: svn_repos_parse_fns2_t_uuid_record_get(self);");
+ SWIG_croak("Usage: svn_repos_parse_fns3_t_uuid_record_get(self);");
}
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_uuid_record_get" "', argument " "1"" of type '" "svn_repos_parse_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_t_uuid_record_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns3_t *""'");
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
result = (svn_error_t *(*)(char const *,void *,apr_pool_t *)) ((arg1)->uuid_record);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -12501,9 +13198,9 @@ XS(_wrap_svn_repos_parse_fns2_t_uuid_record_get) {
}
-XS(_wrap_svn_repos_parse_fns2_t_new_node_record_set) {
+XS(_wrap_svn_repos_parse_fns3_t_new_revision_record_set) {
{
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(void **,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12511,17 +13208,81 @@ XS(_wrap_svn_repos_parse_fns2_t_new_node_record_set) {
dXSARGS;
if ((items < 2) || (items > 2)) {
- SWIG_croak("Usage: svn_repos_parse_fns2_t_new_node_record_set(self,new_node_record);");
+ SWIG_croak("Usage: svn_repos_parse_fns3_t_new_revision_record_set(self,new_revision_record);");
}
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_new_node_record_set" "', argument " "1"" of type '" "svn_repos_parse_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_t_new_revision_record_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns3_t *""'");
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_new_node_record_set" "', argument " "2"" of type '" "svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)""'");
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns3_t_new_revision_record_set" "', argument " "2"" of type '" "svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)""'");
+ }
+ }
+ if (arg1) (arg1)->new_revision_record = arg2;
+ ST(argvi) = sv_newmortal();
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns3_t_new_revision_record_get) {
+ {
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ svn_error_t *(*result)(void **,apr_hash_t *,void *,apr_pool_t *) = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_repos_parse_fns3_t_new_revision_record_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_t_new_revision_record_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns3_t *""'");
+ }
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
+ result = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) ((arg1)->new_revision_record);
+ ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns3_t_new_node_record_set) {
+ {
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
+ svn_error_t *(*arg2)(void **,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_repos_parse_fns3_t_new_node_record_set(self,new_node_record);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_t_new_node_record_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns3_t *""'");
+ }
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns3_t_new_node_record_set" "', argument " "2"" of type '" "svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)""'");
}
}
if (arg1) (arg1)->new_node_record = arg2;
@@ -12537,9 +13298,9 @@ XS(_wrap_svn_repos_parse_fns2_t_new_node_record_set) {
}
-XS(_wrap_svn_repos_parse_fns2_t_new_node_record_get) {
+XS(_wrap_svn_repos_parse_fns3_t_new_node_record_get) {
{
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12547,13 +13308,13 @@ XS(_wrap_svn_repos_parse_fns2_t_new_node_record_get) {
dXSARGS;
if ((items < 1) || (items > 1)) {
- SWIG_croak("Usage: svn_repos_parse_fns2_t_new_node_record_get(self);");
+ SWIG_croak("Usage: svn_repos_parse_fns3_t_new_node_record_get(self);");
}
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_new_node_record_get" "', argument " "1"" of type '" "svn_repos_parse_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_t_new_node_record_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns3_t *""'");
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
result = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) ((arg1)->new_node_record);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -12565,9 +13326,9 @@ XS(_wrap_svn_repos_parse_fns2_t_new_node_record_get) {
}
-XS(_wrap_svn_repos_parse_fns2_t_set_revision_property_set) {
+XS(_wrap_svn_repos_parse_fns3_t_set_revision_property_set) {
{
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_string_t const *) = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12575,17 +13336,17 @@ XS(_wrap_svn_repos_parse_fns2_t_set_revision_property_set) {
dXSARGS;
if ((items < 2) || (items > 2)) {
- SWIG_croak("Usage: svn_repos_parse_fns2_t_set_revision_property_set(self,set_revision_property);");
+ SWIG_croak("Usage: svn_repos_parse_fns3_t_set_revision_property_set(self,set_revision_property);");
}
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_set_revision_property_set" "', argument " "1"" of type '" "svn_repos_parse_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_t_set_revision_property_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns3_t *""'");
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_set_revision_property_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *,char const *,svn_string_t const *)""'");
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns3_t_set_revision_property_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *,char const *,svn_string_t const *)""'");
}
}
if (arg1) (arg1)->set_revision_property = arg2;
@@ -12601,9 +13362,9 @@ XS(_wrap_svn_repos_parse_fns2_t_set_revision_property_set) {
}
-XS(_wrap_svn_repos_parse_fns2_t_set_revision_property_get) {
+XS(_wrap_svn_repos_parse_fns3_t_set_revision_property_get) {
{
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12611,13 +13372,13 @@ XS(_wrap_svn_repos_parse_fns2_t_set_revision_property_get) {
dXSARGS;
if ((items < 1) || (items > 1)) {
- SWIG_croak("Usage: svn_repos_parse_fns2_t_set_revision_property_get(self);");
+ SWIG_croak("Usage: svn_repos_parse_fns3_t_set_revision_property_get(self);");
}
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_set_revision_property_get" "', argument " "1"" of type '" "svn_repos_parse_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_t_set_revision_property_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns3_t *""'");
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) ((arg1)->set_revision_property);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t); argvi++ ;
@@ -12629,9 +13390,9 @@ XS(_wrap_svn_repos_parse_fns2_t_set_revision_property_get) {
}
-XS(_wrap_svn_repos_parse_fns2_t_set_node_property_set) {
+XS(_wrap_svn_repos_parse_fns3_t_set_node_property_set) {
{
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_string_t const *) = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12639,17 +13400,17 @@ XS(_wrap_svn_repos_parse_fns2_t_set_node_property_set) {
dXSARGS;
if ((items < 2) || (items > 2)) {
- SWIG_croak("Usage: svn_repos_parse_fns2_t_set_node_property_set(self,set_node_property);");
+ SWIG_croak("Usage: svn_repos_parse_fns3_t_set_node_property_set(self,set_node_property);");
}
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_set_node_property_set" "', argument " "1"" of type '" "svn_repos_parse_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_t_set_node_property_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns3_t *""'");
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_set_node_property_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *,char const *,svn_string_t const *)""'");
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns3_t_set_node_property_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *,char const *,svn_string_t const *)""'");
}
}
if (arg1) (arg1)->set_node_property = arg2;
@@ -12665,9 +13426,9 @@ XS(_wrap_svn_repos_parse_fns2_t_set_node_property_set) {
}
-XS(_wrap_svn_repos_parse_fns2_t_set_node_property_get) {
+XS(_wrap_svn_repos_parse_fns3_t_set_node_property_get) {
{
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12675,13 +13436,13 @@ XS(_wrap_svn_repos_parse_fns2_t_set_node_property_get) {
dXSARGS;
if ((items < 1) || (items > 1)) {
- SWIG_croak("Usage: svn_repos_parse_fns2_t_set_node_property_get(self);");
+ SWIG_croak("Usage: svn_repos_parse_fns3_t_set_node_property_get(self);");
}
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_set_node_property_get" "', argument " "1"" of type '" "svn_repos_parse_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_t_set_node_property_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns3_t *""'");
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) ((arg1)->set_node_property);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t); argvi++ ;
@@ -12693,9 +13454,9 @@ XS(_wrap_svn_repos_parse_fns2_t_set_node_property_get) {
}
-XS(_wrap_svn_repos_parse_fns2_t_delete_node_property_set) {
+XS(_wrap_svn_repos_parse_fns3_t_delete_node_property_set) {
{
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *) = (svn_error_t *(*)(void *,char const *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12703,17 +13464,17 @@ XS(_wrap_svn_repos_parse_fns2_t_delete_node_property_set) {
dXSARGS;
if ((items < 2) || (items > 2)) {
- SWIG_croak("Usage: svn_repos_parse_fns2_t_delete_node_property_set(self,delete_node_property);");
+ SWIG_croak("Usage: svn_repos_parse_fns3_t_delete_node_property_set(self,delete_node_property);");
}
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_delete_node_property_set" "', argument " "1"" of type '" "svn_repos_parse_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_t_delete_node_property_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns3_t *""'");
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char__p_svn_error_t);
if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_delete_node_property_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *,char const *)""'");
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns3_t_delete_node_property_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *,char const *)""'");
}
}
if (arg1) (arg1)->delete_node_property = arg2;
@@ -12729,9 +13490,9 @@ XS(_wrap_svn_repos_parse_fns2_t_delete_node_property_set) {
}
-XS(_wrap_svn_repos_parse_fns2_t_delete_node_property_get) {
+XS(_wrap_svn_repos_parse_fns3_t_delete_node_property_get) {
{
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12739,13 +13500,13 @@ XS(_wrap_svn_repos_parse_fns2_t_delete_node_property_get) {
dXSARGS;
if ((items < 1) || (items > 1)) {
- SWIG_croak("Usage: svn_repos_parse_fns2_t_delete_node_property_get(self);");
+ SWIG_croak("Usage: svn_repos_parse_fns3_t_delete_node_property_get(self);");
}
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_delete_node_property_get" "', argument " "1"" of type '" "svn_repos_parse_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_t_delete_node_property_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns3_t *""'");
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *)) ((arg1)->delete_node_property);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char__p_svn_error_t); argvi++ ;
@@ -12757,9 +13518,9 @@ XS(_wrap_svn_repos_parse_fns2_t_delete_node_property_get) {
}
-XS(_wrap_svn_repos_parse_fns2_t_remove_node_props_set) {
+XS(_wrap_svn_repos_parse_fns3_t_remove_node_props_set) {
{
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12767,17 +13528,17 @@ XS(_wrap_svn_repos_parse_fns2_t_remove_node_props_set) {
dXSARGS;
if ((items < 2) || (items > 2)) {
- SWIG_croak("Usage: svn_repos_parse_fns2_t_remove_node_props_set(self,remove_node_props);");
+ SWIG_croak("Usage: svn_repos_parse_fns3_t_remove_node_props_set(self,remove_node_props);");
}
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_remove_node_props_set" "', argument " "1"" of type '" "svn_repos_parse_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_t_remove_node_props_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns3_t *""'");
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_remove_node_props_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *)""'");
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns3_t_remove_node_props_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *)""'");
}
}
if (arg1) (arg1)->remove_node_props = arg2;
@@ -12793,9 +13554,9 @@ XS(_wrap_svn_repos_parse_fns2_t_remove_node_props_set) {
}
-XS(_wrap_svn_repos_parse_fns2_t_remove_node_props_get) {
+XS(_wrap_svn_repos_parse_fns3_t_remove_node_props_get) {
{
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12803,13 +13564,13 @@ XS(_wrap_svn_repos_parse_fns2_t_remove_node_props_get) {
dXSARGS;
if ((items < 1) || (items > 1)) {
- SWIG_croak("Usage: svn_repos_parse_fns2_t_remove_node_props_get(self);");
+ SWIG_croak("Usage: svn_repos_parse_fns3_t_remove_node_props_get(self);");
}
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_remove_node_props_get" "', argument " "1"" of type '" "svn_repos_parse_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_t_remove_node_props_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns3_t *""'");
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
result = (svn_error_t *(*)(void *)) ((arg1)->remove_node_props);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__p_svn_error_t); argvi++ ;
@@ -12821,9 +13582,9 @@ XS(_wrap_svn_repos_parse_fns2_t_remove_node_props_get) {
}
-XS(_wrap_svn_repos_parse_fns2_t_set_fulltext_set) {
+XS(_wrap_svn_repos_parse_fns3_t_set_fulltext_set) {
{
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(svn_stream_t **,void *) = (svn_error_t *(*)(svn_stream_t **,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12831,17 +13592,17 @@ XS(_wrap_svn_repos_parse_fns2_t_set_fulltext_set) {
dXSARGS;
if ((items < 2) || (items > 2)) {
- SWIG_croak("Usage: svn_repos_parse_fns2_t_set_fulltext_set(self,set_fulltext);");
+ SWIG_croak("Usage: svn_repos_parse_fns3_t_set_fulltext_set(self,set_fulltext);");
}
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_set_fulltext_set" "', argument " "1"" of type '" "svn_repos_parse_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_t_set_fulltext_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns3_t *""'");
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_p_svn_stream_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_set_fulltext_set" "', argument " "2"" of type '" "svn_error_t *(*)(svn_stream_t **,void *)""'");
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns3_t_set_fulltext_set" "', argument " "2"" of type '" "svn_error_t *(*)(svn_stream_t **,void *)""'");
}
}
if (arg1) (arg1)->set_fulltext = arg2;
@@ -12857,9 +13618,9 @@ XS(_wrap_svn_repos_parse_fns2_t_set_fulltext_set) {
}
-XS(_wrap_svn_repos_parse_fns2_t_set_fulltext_get) {
+XS(_wrap_svn_repos_parse_fns3_t_set_fulltext_get) {
{
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12867,13 +13628,13 @@ XS(_wrap_svn_repos_parse_fns2_t_set_fulltext_get) {
dXSARGS;
if ((items < 1) || (items > 1)) {
- SWIG_croak("Usage: svn_repos_parse_fns2_t_set_fulltext_get(self);");
+ SWIG_croak("Usage: svn_repos_parse_fns3_t_set_fulltext_get(self);");
}
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_set_fulltext_get" "', argument " "1"" of type '" "svn_repos_parse_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_t_set_fulltext_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns3_t *""'");
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
result = (svn_error_t *(*)(svn_stream_t **,void *)) ((arg1)->set_fulltext);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_svn_stream_t_p_void__p_svn_error_t); argvi++ ;
@@ -12885,9 +13646,9 @@ XS(_wrap_svn_repos_parse_fns2_t_set_fulltext_get) {
}
-XS(_wrap_svn_repos_parse_fns2_t_apply_textdelta_set) {
+XS(_wrap_svn_repos_parse_fns3_t_apply_textdelta_set) {
{
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(svn_txdelta_window_handler_t *,void **,void *) = (svn_error_t *(*)(svn_txdelta_window_handler_t *,void **,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12895,17 +13656,17 @@ XS(_wrap_svn_repos_parse_fns2_t_apply_textdelta_set) {
dXSARGS;
if ((items < 2) || (items > 2)) {
- SWIG_croak("Usage: svn_repos_parse_fns2_t_apply_textdelta_set(self,apply_textdelta);");
+ SWIG_croak("Usage: svn_repos_parse_fns3_t_apply_textdelta_set(self,apply_textdelta);");
}
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_apply_textdelta_set" "', argument " "1"" of type '" "svn_repos_parse_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_t_apply_textdelta_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns3_t *""'");
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_txdelta_window_handler_t_p_p_void_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_apply_textdelta_set" "', argument " "2"" of type '" "svn_error_t *(*)(svn_txdelta_window_handler_t *,void **,void *)""'");
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns3_t_apply_textdelta_set" "', argument " "2"" of type '" "svn_error_t *(*)(svn_txdelta_window_handler_t *,void **,void *)""'");
}
}
if (arg1) (arg1)->apply_textdelta = arg2;
@@ -12921,9 +13682,9 @@ XS(_wrap_svn_repos_parse_fns2_t_apply_textdelta_set) {
}
-XS(_wrap_svn_repos_parse_fns2_t_apply_textdelta_get) {
+XS(_wrap_svn_repos_parse_fns3_t_apply_textdelta_get) {
{
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12931,13 +13692,13 @@ XS(_wrap_svn_repos_parse_fns2_t_apply_textdelta_get) {
dXSARGS;
if ((items < 1) || (items > 1)) {
- SWIG_croak("Usage: svn_repos_parse_fns2_t_apply_textdelta_get(self);");
+ SWIG_croak("Usage: svn_repos_parse_fns3_t_apply_textdelta_get(self);");
}
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_apply_textdelta_get" "', argument " "1"" of type '" "svn_repos_parse_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_t_apply_textdelta_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns3_t *""'");
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
result = (svn_error_t *(*)(svn_txdelta_window_handler_t *,void **,void *)) ((arg1)->apply_textdelta);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_txdelta_window_handler_t_p_p_void_p_void__p_svn_error_t); argvi++ ;
@@ -12949,9 +13710,9 @@ XS(_wrap_svn_repos_parse_fns2_t_apply_textdelta_get) {
}
-XS(_wrap_svn_repos_parse_fns2_t_close_node_set) {
+XS(_wrap_svn_repos_parse_fns3_t_close_node_set) {
{
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12959,17 +13720,17 @@ XS(_wrap_svn_repos_parse_fns2_t_close_node_set) {
dXSARGS;
if ((items < 2) || (items > 2)) {
- SWIG_croak("Usage: svn_repos_parse_fns2_t_close_node_set(self,close_node);");
+ SWIG_croak("Usage: svn_repos_parse_fns3_t_close_node_set(self,close_node);");
}
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_close_node_set" "', argument " "1"" of type '" "svn_repos_parse_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_t_close_node_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns3_t *""'");
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_close_node_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *)""'");
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns3_t_close_node_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *)""'");
}
}
if (arg1) (arg1)->close_node = arg2;
@@ -12985,9 +13746,9 @@ XS(_wrap_svn_repos_parse_fns2_t_close_node_set) {
}
-XS(_wrap_svn_repos_parse_fns2_t_close_node_get) {
+XS(_wrap_svn_repos_parse_fns3_t_close_node_get) {
{
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12995,13 +13756,13 @@ XS(_wrap_svn_repos_parse_fns2_t_close_node_get) {
dXSARGS;
if ((items < 1) || (items > 1)) {
- SWIG_croak("Usage: svn_repos_parse_fns2_t_close_node_get(self);");
+ SWIG_croak("Usage: svn_repos_parse_fns3_t_close_node_get(self);");
}
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_close_node_get" "', argument " "1"" of type '" "svn_repos_parse_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_t_close_node_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns3_t *""'");
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
result = (svn_error_t *(*)(void *)) ((arg1)->close_node);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__p_svn_error_t); argvi++ ;
@@ -13013,9 +13774,9 @@ XS(_wrap_svn_repos_parse_fns2_t_close_node_get) {
}
-XS(_wrap_svn_repos_parse_fns2_t_close_revision_set) {
+XS(_wrap_svn_repos_parse_fns3_t_close_revision_set) {
{
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13023,17 +13784,17 @@ XS(_wrap_svn_repos_parse_fns2_t_close_revision_set) {
dXSARGS;
if ((items < 2) || (items > 2)) {
- SWIG_croak("Usage: svn_repos_parse_fns2_t_close_revision_set(self,close_revision);");
+ SWIG_croak("Usage: svn_repos_parse_fns3_t_close_revision_set(self,close_revision);");
}
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_close_revision_set" "', argument " "1"" of type '" "svn_repos_parse_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_t_close_revision_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns3_t *""'");
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_close_revision_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *)""'");
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns3_t_close_revision_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *)""'");
}
}
if (arg1) (arg1)->close_revision = arg2;
@@ -13049,9 +13810,9 @@ XS(_wrap_svn_repos_parse_fns2_t_close_revision_set) {
}
-XS(_wrap_svn_repos_parse_fns2_t_close_revision_get) {
+XS(_wrap_svn_repos_parse_fns3_t_close_revision_get) {
{
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13059,13 +13820,13 @@ XS(_wrap_svn_repos_parse_fns2_t_close_revision_get) {
dXSARGS;
if ((items < 1) || (items > 1)) {
- SWIG_croak("Usage: svn_repos_parse_fns2_t_close_revision_get(self);");
+ SWIG_croak("Usage: svn_repos_parse_fns3_t_close_revision_get(self);");
}
- res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_close_revision_get" "', argument " "1"" of type '" "svn_repos_parse_fns2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_t_close_revision_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns3_t *""'");
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
result = (svn_error_t *(*)(void *)) ((arg1)->close_revision);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__p_svn_error_t); argvi++ ;
@@ -13077,56 +13838,64 @@ XS(_wrap_svn_repos_parse_fns2_t_close_revision_get) {
}
-XS(_wrap_svn_repos_parse_dumpstream2) {
+XS(_wrap_svn_repos_parse_dumpstream3) {
{
svn_stream_t *arg1 = (svn_stream_t *) 0 ;
- svn_repos_parse_fns2_t *arg2 = (svn_repos_parse_fns2_t *) 0 ;
+ svn_repos_parse_fns3_t *arg2 = (svn_repos_parse_fns3_t *) 0 ;
void *arg3 = (void *) 0 ;
- svn_cancel_func_t arg4 = (svn_cancel_func_t) 0 ;
- void *arg5 = (void *) 0 ;
- apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ svn_boolean_t arg4 ;
+ svn_cancel_func_t arg5 = (svn_cancel_func_t) 0 ;
+ void *arg6 = (void *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool ;
void *argp2 = 0 ;
int res2 = 0 ;
int res3 ;
- int res5 ;
+ int val4 ;
+ int ecode4 = 0 ;
+ int res6 ;
int argvi = 0;
svn_error_t *result = 0 ;
dXSARGS;
{
- _global_pool = arg6 = svn_swig_pl_make_pool (ST(items-1));
+ _global_pool = arg7 = svn_swig_pl_make_pool (ST(items-1));
}
- if ((items < 5) || (items > 6)) {
- SWIG_croak("Usage: svn_repos_parse_dumpstream2(stream,parse_fns,parse_baton,cancel_func,cancel_baton,pool);");
+ if ((items < 6) || (items > 7)) {
+ SWIG_croak("Usage: svn_repos_parse_dumpstream3(stream,parse_fns,parse_baton,deltas_are_text,cancel_func,cancel_baton,pool);");
}
{
svn_swig_pl_make_stream (&arg1, ST(0));
}
- res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_repos_parse_dumpstream2" "', argument " "2"" of type '" "svn_repos_parse_fns2_t const *""'");
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_repos_parse_dumpstream3" "', argument " "2"" of type '" "svn_repos_parse_fns3_t const *""'");
}
- arg2 = (svn_repos_parse_fns2_t *)(argp2);
+ arg2 = (svn_repos_parse_fns3_t *)(argp2);
res3 = SWIG_ConvertPtr(ST(2),SWIG_as_voidptrptr(&arg3), 0, 0);
if (!SWIG_IsOK(res3)) {
- SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_repos_parse_dumpstream2" "', argument " "3"" of type '" "void *""'");
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_repos_parse_dumpstream3" "', argument " "3"" of type '" "void *""'");
}
+ ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_repos_parse_dumpstream3" "', argument " "4"" of type '" "svn_boolean_t""'");
+ }
+ arg4 = (svn_boolean_t)(val4);
{
- int res = SWIG_ConvertFunctionPtr(ST(3), (void**)(&arg4), SWIGTYPE_p_f_p_void__p_svn_error_t);
+ int res = SWIG_ConvertFunctionPtr(ST(4), (void**)(&arg5), SWIGTYPE_p_f_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_dumpstream2" "', argument " "4"" of type '" "svn_cancel_func_t""'");
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_dumpstream3" "', argument " "5"" of type '" "svn_cancel_func_t""'");
}
}
- res5 = SWIG_ConvertPtr(ST(4),SWIG_as_voidptrptr(&arg5), 0, 0);
- if (!SWIG_IsOK(res5)) {
- SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_repos_parse_dumpstream2" "', argument " "5"" of type '" "void *""'");
+ res6 = SWIG_ConvertPtr(ST(5),SWIG_as_voidptrptr(&arg6), 0, 0);
+ if (!SWIG_IsOK(res6)) {
+ SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_repos_parse_dumpstream3" "', argument " "6"" of type '" "void *""'");
}
- if (items > 5) {
+ if (items > 6) {
}
{
- result = (svn_error_t *)svn_repos_parse_dumpstream2(arg1,(struct svn_repos_parse_fns2_t const *)arg2,arg3,arg4,arg5,arg6);
+ result = (svn_error_t *)svn_repos_parse_dumpstream3(arg1,(struct svn_repos_parse_fns3_t const *)arg2,arg3,arg4,arg5,arg6,arg7);
@@ -13153,6 +13922,7 @@ XS(_wrap_svn_repos_parse_dumpstream2) {
+
XSRETURN(argvi);
fail:
@@ -13161,90 +13931,107 @@ XS(_wrap_svn_repos_parse_dumpstream2) {
+
SWIG_croak_null();
}
}
-XS(_wrap_svn_repos_get_fs_build_parser3) {
+XS(_wrap_svn_repos_get_fs_build_parser4) {
{
- svn_repos_parse_fns2_t **arg1 = (svn_repos_parse_fns2_t **) 0 ;
+ svn_repos_parse_fns3_t **arg1 = (svn_repos_parse_fns3_t **) 0 ;
void **arg2 = (void **) 0 ;
svn_repos_t *arg3 = (svn_repos_t *) 0 ;
- svn_boolean_t arg4 ;
- svn_boolean_t arg5 ;
- enum svn_repos_load_uuid arg6 ;
- char *arg7 = (char *) 0 ;
- svn_repos_notify_func_t arg8 = (svn_repos_notify_func_t) 0 ;
- void *arg9 = (void *) 0 ;
- apr_pool_t *arg10 = (apr_pool_t *) 0 ;
+ svn_revnum_t arg4 ;
+ svn_revnum_t arg5 ;
+ svn_boolean_t arg6 ;
+ svn_boolean_t arg7 ;
+ enum svn_repos_load_uuid arg8 ;
+ char *arg9 = (char *) 0 ;
+ svn_repos_notify_func_t arg10 = (svn_repos_notify_func_t) 0 ;
+ void *arg11 = (void *) 0 ;
+ apr_pool_t *arg12 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool ;
- svn_repos_parse_fns2_t *temp1 ;
+ svn_repos_parse_fns3_t *temp1 ;
void *temp2 ;
void *argp3 = 0 ;
int res3 = 0 ;
- int val4 ;
+ long val4 ;
int ecode4 = 0 ;
- int val5 ;
+ long val5 ;
int ecode5 = 0 ;
int val6 ;
int ecode6 = 0 ;
- int res7 ;
- char *buf7 = 0 ;
- int alloc7 = 0 ;
+ int val7 ;
+ int ecode7 = 0 ;
+ int val8 ;
+ int ecode8 = 0 ;
int res9 ;
+ char *buf9 = 0 ;
+ int alloc9 = 0 ;
+ int res11 ;
int argvi = 0;
svn_error_t *result = 0 ;
dXSARGS;
{
- _global_pool = arg10 = svn_swig_pl_make_pool (ST(items-1));
+ _global_pool = arg12 = svn_swig_pl_make_pool (ST(items-1));
}
arg1 = &temp1;
arg2 = &temp2;
- if ((items < 7) || (items > 8)) {
- SWIG_croak("Usage: svn_repos_get_fs_build_parser3(repos,use_history,validate_props,uuid_action,parent_dir,notify_func,notify_baton,pool);");
+ if ((items < 9) || (items > 10)) {
+ SWIG_croak("Usage: svn_repos_get_fs_build_parser4(repos,start_rev,end_rev,use_history,validate_props,uuid_action,parent_dir,notify_func,notify_baton,pool);");
}
res3 = SWIG_ConvertPtr(ST(0), &argp3,SWIGTYPE_p_svn_repos_t, 0 | 0 );
if (!SWIG_IsOK(res3)) {
- SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_repos_get_fs_build_parser3" "', argument " "3"" of type '" "svn_repos_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_repos_get_fs_build_parser4" "', argument " "3"" of type '" "svn_repos_t *""'");
}
arg3 = (svn_repos_t *)(argp3);
- ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val4);
+ ecode4 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val4);
if (!SWIG_IsOK(ecode4)) {
- SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_repos_get_fs_build_parser3" "', argument " "4"" of type '" "svn_boolean_t""'");
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_repos_get_fs_build_parser4" "', argument " "4"" of type '" "svn_revnum_t""'");
}
- arg4 = (svn_boolean_t)(val4);
- ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val5);
+ arg4 = (svn_revnum_t)(val4);
+ ecode5 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(2), &val5);
if (!SWIG_IsOK(ecode5)) {
- SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_repos_get_fs_build_parser3" "', argument " "5"" of type '" "svn_boolean_t""'");
+ SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_repos_get_fs_build_parser4" "', argument " "5"" of type '" "svn_revnum_t""'");
}
- arg5 = (svn_boolean_t)(val5);
+ arg5 = (svn_revnum_t)(val5);
ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val6);
if (!SWIG_IsOK(ecode6)) {
- SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_repos_get_fs_build_parser3" "', argument " "6"" of type '" "enum svn_repos_load_uuid""'");
+ SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_repos_get_fs_build_parser4" "', argument " "6"" of type '" "svn_boolean_t""'");
}
- arg6 = (enum svn_repos_load_uuid)(val6);
- res7 = SWIG_AsCharPtrAndSize(ST(4), &buf7, NULL, &alloc7);
- if (!SWIG_IsOK(res7)) {
- SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_repos_get_fs_build_parser3" "', argument " "7"" of type '" "char const *""'");
+ arg6 = (svn_boolean_t)(val6);
+ ecode7 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val7);
+ if (!SWIG_IsOK(ecode7)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "svn_repos_get_fs_build_parser4" "', argument " "7"" of type '" "svn_boolean_t""'");
+ }
+ arg7 = (svn_boolean_t)(val7);
+ ecode8 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val8);
+ if (!SWIG_IsOK(ecode8)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "svn_repos_get_fs_build_parser4" "', argument " "8"" of type '" "enum svn_repos_load_uuid""'");
+ }
+ arg8 = (enum svn_repos_load_uuid)(val8);
+ res9 = SWIG_AsCharPtrAndSize(ST(6), &buf9, NULL, &alloc9);
+ if (!SWIG_IsOK(res9)) {
+ SWIG_exception_fail(SWIG_ArgError(res9), "in method '" "svn_repos_get_fs_build_parser4" "', argument " "9"" of type '" "char const *""'");
}
- arg7 = (char *)(buf7);
+ arg9 = (char *)(buf9);
{
- int res = SWIG_ConvertFunctionPtr(ST(5), (void**)(&arg8), SWIGTYPE_p_f_p_void_p_q_const__struct_svn_repos_notify_t_p_apr_pool_t__void);
+ int res = SWIG_ConvertFunctionPtr(ST(7), (void**)(&arg10), SWIGTYPE_p_f_p_void_p_q_const__struct_svn_repos_notify_t_p_apr_pool_t__void);
if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_get_fs_build_parser3" "', argument " "8"" of type '" "svn_repos_notify_func_t""'");
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_get_fs_build_parser4" "', argument " "10"" of type '" "svn_repos_notify_func_t""'");
}
}
- res9 = SWIG_ConvertPtr(ST(6),SWIG_as_voidptrptr(&arg9), 0, 0);
- if (!SWIG_IsOK(res9)) {
- SWIG_exception_fail(SWIG_ArgError(res9), "in method '" "svn_repos_get_fs_build_parser3" "', argument " "9"" of type '" "void *""'");
+ res11 = SWIG_ConvertPtr(ST(8),SWIG_as_voidptrptr(&arg11), 0, 0);
+ if (!SWIG_IsOK(res11)) {
+ SWIG_exception_fail(SWIG_ArgError(res11), "in method '" "svn_repos_get_fs_build_parser4" "', argument " "11"" of type '" "void *""'");
}
- if (items > 7) {
+ if (items > 9) {
}
{
- result = (svn_error_t *)svn_repos_get_fs_build_parser3((struct svn_repos_parse_fns2_t const **)arg1,arg2,arg3,arg4,arg5,arg6,(char const *)arg7,arg8,arg9,arg10);
+ result = (svn_error_t *)svn_repos_get_fs_build_parser4((struct svn_repos_parse_fns3_t const **)arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,(char const *)arg9,arg10,arg11,arg12);
@@ -13266,7 +14053,13 @@ XS(_wrap_svn_repos_get_fs_build_parser3) {
}
}
{
- if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_repos_parse_fns2_t, 0); argvi++ ;
+ /* FIXME: Missing argout typemap: svn_repos_get_fs_build_parser4 arg 1 (svn_repos_parse_fns3_t const **) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_repos_get_fs_build_parser4 is not implemented yet");
+
}
{
if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg2, SWIGTYPE_p_void, 0); argvi++ ;
@@ -13277,7 +14070,9 @@ XS(_wrap_svn_repos_get_fs_build_parser3) {
- if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+
+
+ if (alloc9 == SWIG_NEWOBJ) free((char*)buf9);
@@ -13289,7 +14084,9 @@ XS(_wrap_svn_repos_get_fs_build_parser3) {
- if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+
+
+ if (alloc9 == SWIG_NEWOBJ) free((char*)buf9);
@@ -13298,111 +14095,704 @@ XS(_wrap_svn_repos_get_fs_build_parser3) {
}
-XS(_wrap_svn_repos_get_fs_build_parser2) {
+XS(_wrap_svn_repos_parse_fns2_t_new_revision_record_set) {
{
- svn_repos_parse_fns2_t **arg1 = (svn_repos_parse_fns2_t **) 0 ;
- void **arg2 = (void **) 0 ;
- svn_repos_t *arg3 = (svn_repos_t *) 0 ;
- svn_boolean_t arg4 ;
- enum svn_repos_load_uuid arg5 ;
- svn_stream_t *arg6 = (svn_stream_t *) 0 ;
- char *arg7 = (char *) 0 ;
- apr_pool_t *arg8 = (apr_pool_t *) 0 ;
- apr_pool_t *_global_pool ;
- svn_repos_parse_fns2_t *temp1 ;
- void *temp2 ;
- void *argp3 = 0 ;
- int res3 = 0 ;
- int val4 ;
- int ecode4 = 0 ;
- int val5 ;
- int ecode5 = 0 ;
- int res7 ;
- char *buf7 = 0 ;
- int alloc7 = 0 ;
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(void **,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
int argvi = 0;
- svn_error_t *result = 0 ;
dXSARGS;
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_repos_parse_fns2_t_new_revision_record_set(self,new_revision_record);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_new_revision_record_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns2_t *""'");
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
{
- _global_pool = arg8 = svn_swig_pl_make_pool (ST(items-1));
+ int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_new_revision_record_set" "', argument " "2"" of type '" "svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)""'");
+ }
}
- arg1 = &temp1;
- arg2 = &temp2;
- if ((items < 5) || (items > 6)) {
- SWIG_croak("Usage: svn_repos_get_fs_build_parser2(repos,use_history,uuid_action,outstream,parent_dir,pool);");
+ if (arg1) (arg1)->new_revision_record = arg2;
+ ST(argvi) = sv_newmortal();
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns2_t_new_revision_record_get) {
+ {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ svn_error_t *(*result)(void **,apr_hash_t *,void *,apr_pool_t *) = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_repos_parse_fns2_t_new_revision_record_get(self);");
}
- res3 = SWIG_ConvertPtr(ST(0), &argp3,SWIGTYPE_p_svn_repos_t, 0 | 0 );
- if (!SWIG_IsOK(res3)) {
- SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_repos_get_fs_build_parser2" "', argument " "3"" of type '" "svn_repos_t *""'");
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_new_revision_record_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns2_t *""'");
}
- arg3 = (svn_repos_t *)(argp3);
- ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val4);
- if (!SWIG_IsOK(ecode4)) {
- SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_repos_get_fs_build_parser2" "', argument " "4"" of type '" "svn_boolean_t""'");
- }
- arg4 = (svn_boolean_t)(val4);
- ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val5);
- if (!SWIG_IsOK(ecode5)) {
- SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_repos_get_fs_build_parser2" "', argument " "5"" of type '" "enum svn_repos_load_uuid""'");
- }
- arg5 = (enum svn_repos_load_uuid)(val5);
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ result = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) ((arg1)->new_revision_record);
+ ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns2_t_uuid_record_set) {
+ {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(char const *,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,void *,apr_pool_t *)) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_repos_parse_fns2_t_uuid_record_set(self,uuid_record);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_uuid_record_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns2_t *""'");
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
{
- svn_swig_pl_make_stream (&arg6, ST(3));
+ int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_uuid_record_set" "', argument " "2"" of type '" "svn_error_t *(*)(char const *,void *,apr_pool_t *)""'");
+ }
}
- res7 = SWIG_AsCharPtrAndSize(ST(4), &buf7, NULL, &alloc7);
- if (!SWIG_IsOK(res7)) {
- SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_repos_get_fs_build_parser2" "', argument " "7"" of type '" "char const *""'");
+ if (arg1) (arg1)->uuid_record = arg2;
+ ST(argvi) = sv_newmortal();
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns2_t_uuid_record_get) {
+ {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ svn_error_t *(*result)(char const *,void *,apr_pool_t *) = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_repos_parse_fns2_t_uuid_record_get(self);");
}
- arg7 = (char *)(buf7);
- if (items > 5) {
-
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_uuid_record_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns2_t *""'");
}
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ result = (svn_error_t *(*)(char const *,void *,apr_pool_t *)) ((arg1)->uuid_record);
+ ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns2_t_new_node_record_set) {
+ {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(void **,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_repos_parse_fns2_t_new_node_record_set(self,new_node_record);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_new_node_record_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns2_t *""'");
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
{
- result = (svn_error_t *)svn_repos_get_fs_build_parser2((struct svn_repos_parse_fns2_t const **)arg1,arg2,arg3,arg4,arg5,arg6,(char const *)arg7,arg8);
-
-
-
+ int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_new_node_record_set" "', argument " "2"" of type '" "svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)""'");
+ }
+ }
+ if (arg1) (arg1)->new_node_record = arg2;
+ ST(argvi) = sv_newmortal();
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns2_t_new_node_record_get) {
+ {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ svn_error_t *(*result)(void **,apr_hash_t *,void *,apr_pool_t *) = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_repos_parse_fns2_t_new_node_record_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_new_node_record_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns2_t *""'");
}
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ result = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) ((arg1)->new_node_record);
+ ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns2_t_set_revision_property_set) {
+ {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(void *,char const *,svn_string_t const *) = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_repos_parse_fns2_t_set_revision_property_set(self,set_revision_property);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_set_revision_property_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns2_t *""'");
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
{
- if (result) {
- SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
-
- if (SvOK(exception_handler)) {
- SV *callback_result;
-
- svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
- &callback_result, "S", result,
- SWIGTYPE_p_svn_error_t);
- } else {
- ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
- argvi++;
- }
+ int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_set_revision_property_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *,char const *,svn_string_t const *)""'");
}
}
+ if (arg1) (arg1)->set_revision_property = arg2;
+ ST(argvi) = sv_newmortal();
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns2_t_set_revision_property_get) {
+ {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ svn_error_t *(*result)(void *,char const *,svn_string_t const *) = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_repos_parse_fns2_t_set_revision_property_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_set_revision_property_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns2_t *""'");
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ result = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) ((arg1)->set_revision_property);
+ ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns2_t_set_node_property_set) {
+ {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(void *,char const *,svn_string_t const *) = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_repos_parse_fns2_t_set_node_property_set(self,set_node_property);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_set_node_property_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns2_t *""'");
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
{
- if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_repos_parse_fns2_t, 0); argvi++ ;
+ int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_set_node_property_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *,char const *,svn_string_t const *)""'");
+ }
}
+ if (arg1) (arg1)->set_node_property = arg2;
+ ST(argvi) = sv_newmortal();
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns2_t_set_node_property_get) {
+ {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ svn_error_t *(*result)(void *,char const *,svn_string_t const *) = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_repos_parse_fns2_t_set_node_property_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_set_node_property_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns2_t *""'");
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ result = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) ((arg1)->set_node_property);
+ ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns2_t_delete_node_property_set) {
+ {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(void *,char const *) = (svn_error_t *(*)(void *,char const *)) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_repos_parse_fns2_t_delete_node_property_set(self,delete_node_property);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_delete_node_property_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns2_t *""'");
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
{
- if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg2, SWIGTYPE_p_void, 0); argvi++ ;
+ int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_delete_node_property_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *,char const *)""'");
+ }
}
+ if (arg1) (arg1)->delete_node_property = arg2;
+ ST(argvi) = sv_newmortal();
+ XSRETURN(argvi);
+ fail:
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns2_t_delete_node_property_get) {
+ {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ svn_error_t *(*result)(void *,char const *) = 0 ;
+ dXSARGS;
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_repos_parse_fns2_t_delete_node_property_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_delete_node_property_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns2_t *""'");
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ result = (svn_error_t *(*)(void *,char const *)) ((arg1)->delete_node_property);
+ ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char__p_svn_error_t); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns2_t_remove_node_props_set) {
+ {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_repos_parse_fns2_t_remove_node_props_set(self,remove_node_props);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_remove_node_props_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns2_t *""'");
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_remove_node_props_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *)""'");
+ }
+ }
+ if (arg1) (arg1)->remove_node_props = arg2;
+ ST(argvi) = sv_newmortal();
- if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
XSRETURN(argvi);
fail:
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns2_t_remove_node_props_get) {
+ {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ svn_error_t *(*result)(void *) = 0 ;
+ dXSARGS;
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_repos_parse_fns2_t_remove_node_props_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_remove_node_props_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns2_t *""'");
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ result = (svn_error_t *(*)(void *)) ((arg1)->remove_node_props);
+ ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__p_svn_error_t); argvi++ ;
+ XSRETURN(argvi);
+ fail:
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns2_t_set_fulltext_set) {
+ {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(svn_stream_t **,void *) = (svn_error_t *(*)(svn_stream_t **,void *)) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
- if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_repos_parse_fns2_t_set_fulltext_set(self,set_fulltext);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_set_fulltext_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns2_t *""'");
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_p_svn_stream_t_p_void__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_set_fulltext_set" "', argument " "2"" of type '" "svn_error_t *(*)(svn_stream_t **,void *)""'");
+ }
+ }
+ if (arg1) (arg1)->set_fulltext = arg2;
+ ST(argvi) = sv_newmortal();
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns2_t_set_fulltext_get) {
+ {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ svn_error_t *(*result)(svn_stream_t **,void *) = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_repos_parse_fns2_t_set_fulltext_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_set_fulltext_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns2_t *""'");
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ result = (svn_error_t *(*)(svn_stream_t **,void *)) ((arg1)->set_fulltext);
+ ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_svn_stream_t_p_void__p_svn_error_t); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns2_t_apply_textdelta_set) {
+ {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(svn_txdelta_window_handler_t *,void **,void *) = (svn_error_t *(*)(svn_txdelta_window_handler_t *,void **,void *)) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_repos_parse_fns2_t_apply_textdelta_set(self,apply_textdelta);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_apply_textdelta_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns2_t *""'");
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_txdelta_window_handler_t_p_p_void_p_void__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_apply_textdelta_set" "', argument " "2"" of type '" "svn_error_t *(*)(svn_txdelta_window_handler_t *,void **,void *)""'");
+ }
+ }
+ if (arg1) (arg1)->apply_textdelta = arg2;
+ ST(argvi) = sv_newmortal();
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns2_t_apply_textdelta_get) {
+ {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ svn_error_t *(*result)(svn_txdelta_window_handler_t *,void **,void *) = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_repos_parse_fns2_t_apply_textdelta_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_apply_textdelta_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns2_t *""'");
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ result = (svn_error_t *(*)(svn_txdelta_window_handler_t *,void **,void *)) ((arg1)->apply_textdelta);
+ ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_txdelta_window_handler_t_p_p_void_p_void__p_svn_error_t); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns2_t_close_node_set) {
+ {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_repos_parse_fns2_t_close_node_set(self,close_node);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_close_node_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns2_t *""'");
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_close_node_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *)""'");
+ }
+ }
+ if (arg1) (arg1)->close_node = arg2;
+ ST(argvi) = sv_newmortal();
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns2_t_close_node_get) {
+ {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ svn_error_t *(*result)(void *) = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_repos_parse_fns2_t_close_node_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_close_node_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns2_t *""'");
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ result = (svn_error_t *(*)(void *)) ((arg1)->close_node);
+ ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__p_svn_error_t); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns2_t_close_revision_set) {
+ {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_repos_parse_fns2_t_close_revision_set(self,close_revision);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_close_revision_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns2_t *""'");
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_close_revision_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *)""'");
+ }
+ }
+ if (arg1) (arg1)->close_revision = arg2;
+ ST(argvi) = sv_newmortal();
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns2_t_close_revision_get) {
+ {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ svn_error_t *(*result)(void *) = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_repos_parse_fns2_t_close_revision_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns2_t_close_revision_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns2_t *""'");
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ result = (svn_error_t *(*)(void *)) ((arg1)->close_revision);
+ ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__p_svn_error_t); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
SWIG_croak_null();
}
@@ -13411,7 +14801,7 @@ XS(_wrap_svn_repos_get_fs_build_parser2) {
XS(_wrap_svn_repos_parser_fns_t_new_revision_record_set) {
{
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(void **,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13423,9 +14813,9 @@ XS(_wrap_svn_repos_parser_fns_t_new_revision_record_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_new_revision_record_set" "', argument " "1"" of type '" "svn_repos_parser_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_new_revision_record_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns_t *""'");
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -13447,7 +14837,7 @@ XS(_wrap_svn_repos_parser_fns_t_new_revision_record_set) {
XS(_wrap_svn_repos_parser_fns_t_new_revision_record_get) {
{
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13459,9 +14849,9 @@ XS(_wrap_svn_repos_parser_fns_t_new_revision_record_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_new_revision_record_get" "', argument " "1"" of type '" "svn_repos_parser_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_new_revision_record_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns_t *""'");
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
result = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) ((arg1)->new_revision_record);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -13475,7 +14865,7 @@ XS(_wrap_svn_repos_parser_fns_t_new_revision_record_get) {
XS(_wrap_svn_repos_parser_fns_t_uuid_record_set) {
{
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(char const *,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13487,9 +14877,9 @@ XS(_wrap_svn_repos_parser_fns_t_uuid_record_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_uuid_record_set" "', argument " "1"" of type '" "svn_repos_parser_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_uuid_record_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns_t *""'");
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -13511,7 +14901,7 @@ XS(_wrap_svn_repos_parser_fns_t_uuid_record_set) {
XS(_wrap_svn_repos_parser_fns_t_uuid_record_get) {
{
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13523,9 +14913,9 @@ XS(_wrap_svn_repos_parser_fns_t_uuid_record_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_uuid_record_get" "', argument " "1"" of type '" "svn_repos_parser_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_uuid_record_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns_t *""'");
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
result = (svn_error_t *(*)(char const *,void *,apr_pool_t *)) ((arg1)->uuid_record);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -13539,7 +14929,7 @@ XS(_wrap_svn_repos_parser_fns_t_uuid_record_get) {
XS(_wrap_svn_repos_parser_fns_t_new_node_record_set) {
{
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(void **,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13551,9 +14941,9 @@ XS(_wrap_svn_repos_parser_fns_t_new_node_record_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_new_node_record_set" "', argument " "1"" of type '" "svn_repos_parser_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_new_node_record_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns_t *""'");
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -13575,7 +14965,7 @@ XS(_wrap_svn_repos_parser_fns_t_new_node_record_set) {
XS(_wrap_svn_repos_parser_fns_t_new_node_record_get) {
{
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13587,9 +14977,9 @@ XS(_wrap_svn_repos_parser_fns_t_new_node_record_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_new_node_record_get" "', argument " "1"" of type '" "svn_repos_parser_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_new_node_record_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns_t *""'");
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
result = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) ((arg1)->new_node_record);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -13603,7 +14993,7 @@ XS(_wrap_svn_repos_parser_fns_t_new_node_record_get) {
XS(_wrap_svn_repos_parser_fns_t_set_revision_property_set) {
{
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_string_t const *) = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13615,9 +15005,9 @@ XS(_wrap_svn_repos_parser_fns_t_set_revision_property_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_set_revision_property_set" "', argument " "1"" of type '" "svn_repos_parser_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_set_revision_property_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns_t *""'");
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -13639,7 +15029,7 @@ XS(_wrap_svn_repos_parser_fns_t_set_revision_property_set) {
XS(_wrap_svn_repos_parser_fns_t_set_revision_property_get) {
{
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13651,9 +15041,9 @@ XS(_wrap_svn_repos_parser_fns_t_set_revision_property_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_set_revision_property_get" "', argument " "1"" of type '" "svn_repos_parser_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_set_revision_property_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns_t *""'");
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) ((arg1)->set_revision_property);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t); argvi++ ;
@@ -13667,7 +15057,7 @@ XS(_wrap_svn_repos_parser_fns_t_set_revision_property_get) {
XS(_wrap_svn_repos_parser_fns_t_set_node_property_set) {
{
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_string_t const *) = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13679,9 +15069,9 @@ XS(_wrap_svn_repos_parser_fns_t_set_node_property_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_set_node_property_set" "', argument " "1"" of type '" "svn_repos_parser_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_set_node_property_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns_t *""'");
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -13703,7 +15093,7 @@ XS(_wrap_svn_repos_parser_fns_t_set_node_property_set) {
XS(_wrap_svn_repos_parser_fns_t_set_node_property_get) {
{
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13715,9 +15105,9 @@ XS(_wrap_svn_repos_parser_fns_t_set_node_property_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_set_node_property_get" "', argument " "1"" of type '" "svn_repos_parser_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_set_node_property_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns_t *""'");
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) ((arg1)->set_node_property);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t); argvi++ ;
@@ -13731,7 +15121,7 @@ XS(_wrap_svn_repos_parser_fns_t_set_node_property_get) {
XS(_wrap_svn_repos_parser_fns_t_remove_node_props_set) {
{
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13743,9 +15133,9 @@ XS(_wrap_svn_repos_parser_fns_t_remove_node_props_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_remove_node_props_set" "', argument " "1"" of type '" "svn_repos_parser_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_remove_node_props_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns_t *""'");
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -13767,7 +15157,7 @@ XS(_wrap_svn_repos_parser_fns_t_remove_node_props_set) {
XS(_wrap_svn_repos_parser_fns_t_remove_node_props_get) {
{
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13779,9 +15169,9 @@ XS(_wrap_svn_repos_parser_fns_t_remove_node_props_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_remove_node_props_get" "', argument " "1"" of type '" "svn_repos_parser_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_remove_node_props_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns_t *""'");
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
result = (svn_error_t *(*)(void *)) ((arg1)->remove_node_props);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__p_svn_error_t); argvi++ ;
@@ -13795,7 +15185,7 @@ XS(_wrap_svn_repos_parser_fns_t_remove_node_props_get) {
XS(_wrap_svn_repos_parser_fns_t_set_fulltext_set) {
{
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(svn_stream_t **,void *) = (svn_error_t *(*)(svn_stream_t **,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13807,9 +15197,9 @@ XS(_wrap_svn_repos_parser_fns_t_set_fulltext_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_set_fulltext_set" "', argument " "1"" of type '" "svn_repos_parser_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_set_fulltext_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns_t *""'");
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_p_svn_stream_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -13831,7 +15221,7 @@ XS(_wrap_svn_repos_parser_fns_t_set_fulltext_set) {
XS(_wrap_svn_repos_parser_fns_t_set_fulltext_get) {
{
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13843,9 +15233,9 @@ XS(_wrap_svn_repos_parser_fns_t_set_fulltext_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_set_fulltext_get" "', argument " "1"" of type '" "svn_repos_parser_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_set_fulltext_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns_t *""'");
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
result = (svn_error_t *(*)(svn_stream_t **,void *)) ((arg1)->set_fulltext);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_svn_stream_t_p_void__p_svn_error_t); argvi++ ;
@@ -13859,7 +15249,7 @@ XS(_wrap_svn_repos_parser_fns_t_set_fulltext_get) {
XS(_wrap_svn_repos_parser_fns_t_close_node_set) {
{
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13871,9 +15261,9 @@ XS(_wrap_svn_repos_parser_fns_t_close_node_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_close_node_set" "', argument " "1"" of type '" "svn_repos_parser_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_close_node_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns_t *""'");
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -13895,7 +15285,7 @@ XS(_wrap_svn_repos_parser_fns_t_close_node_set) {
XS(_wrap_svn_repos_parser_fns_t_close_node_get) {
{
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13907,9 +15297,9 @@ XS(_wrap_svn_repos_parser_fns_t_close_node_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_close_node_get" "', argument " "1"" of type '" "svn_repos_parser_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_close_node_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns_t *""'");
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
result = (svn_error_t *(*)(void *)) ((arg1)->close_node);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__p_svn_error_t); argvi++ ;
@@ -13923,7 +15313,7 @@ XS(_wrap_svn_repos_parser_fns_t_close_node_get) {
XS(_wrap_svn_repos_parser_fns_t_close_revision_set) {
{
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13935,9 +15325,9 @@ XS(_wrap_svn_repos_parser_fns_t_close_revision_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_close_revision_set" "', argument " "1"" of type '" "svn_repos_parser_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_close_revision_set" "', argument " "1"" of type '" "struct svn_repos_parse_fns_t *""'");
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -13959,7 +15349,7 @@ XS(_wrap_svn_repos_parser_fns_t_close_revision_set) {
XS(_wrap_svn_repos_parser_fns_t_close_revision_get) {
{
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13971,9 +15361,9 @@ XS(_wrap_svn_repos_parser_fns_t_close_revision_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_close_revision_get" "', argument " "1"" of type '" "svn_repos_parser_fns_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parser_fns_t_close_revision_get" "', argument " "1"" of type '" "struct svn_repos_parse_fns_t *""'");
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
result = (svn_error_t *(*)(void *)) ((arg1)->close_revision);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__p_svn_error_t); argvi++ ;
@@ -13985,6 +15375,95 @@ XS(_wrap_svn_repos_parser_fns_t_close_revision_get) {
}
+XS(_wrap_svn_repos_parse_dumpstream2) {
+ {
+ svn_stream_t *arg1 = (svn_stream_t *) 0 ;
+ svn_repos_parser_fns2_t *arg2 = (svn_repos_parser_fns2_t *) 0 ;
+ void *arg3 = (void *) 0 ;
+ svn_cancel_func_t arg4 = (svn_cancel_func_t) 0 ;
+ void *arg5 = (void *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ int res3 ;
+ int res5 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg6 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 5) || (items > 6)) {
+ SWIG_croak("Usage: svn_repos_parse_dumpstream2(stream,parse_fns,parse_baton,cancel_func,cancel_baton,pool);");
+ }
+ {
+ svn_swig_pl_make_stream (&arg1, ST(0));
+ }
+ res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_repos_parse_dumpstream2" "', argument " "2"" of type '" "svn_repos_parser_fns2_t const *""'");
+ }
+ arg2 = (svn_repos_parser_fns2_t *)(argp2);
+ res3 = SWIG_ConvertPtr(ST(2),SWIG_as_voidptrptr(&arg3), 0, 0);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_repos_parse_dumpstream2" "', argument " "3"" of type '" "void *""'");
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(3), (void**)(&arg4), SWIGTYPE_p_f_p_void__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_dumpstream2" "', argument " "4"" of type '" "svn_cancel_func_t""'");
+ }
+ }
+ res5 = SWIG_ConvertPtr(ST(4),SWIG_as_voidptrptr(&arg5), 0, 0);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_repos_parse_dumpstream2" "', argument " "5"" of type '" "void *""'");
+ }
+ if (items > 5) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_parse_dumpstream2(arg1,(struct svn_repos_parse_fns2_t const *)arg2,arg3,arg4,arg5,arg6);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_repos_parse_dumpstream) {
{
svn_stream_t *arg1 = (svn_stream_t *) 0 ;
@@ -14074,6 +15553,249 @@ XS(_wrap_svn_repos_parse_dumpstream) {
}
+XS(_wrap_svn_repos_get_fs_build_parser3) {
+ {
+ svn_repos_parse_fns2_t **arg1 = (svn_repos_parse_fns2_t **) 0 ;
+ void **arg2 = (void **) 0 ;
+ svn_repos_t *arg3 = (svn_repos_t *) 0 ;
+ svn_boolean_t arg4 ;
+ svn_boolean_t arg5 ;
+ enum svn_repos_load_uuid arg6 ;
+ char *arg7 = (char *) 0 ;
+ svn_repos_notify_func_t arg8 = (svn_repos_notify_func_t) 0 ;
+ void *arg9 = (void *) 0 ;
+ apr_pool_t *arg10 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_repos_parse_fns2_t *temp1 ;
+ void *temp2 ;
+ void *argp3 = 0 ;
+ int res3 = 0 ;
+ int val4 ;
+ int ecode4 = 0 ;
+ int val5 ;
+ int ecode5 = 0 ;
+ int val6 ;
+ int ecode6 = 0 ;
+ int res7 ;
+ char *buf7 = 0 ;
+ int alloc7 = 0 ;
+ int res9 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg10 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ arg2 = &temp2;
+ if ((items < 7) || (items > 8)) {
+ SWIG_croak("Usage: svn_repos_get_fs_build_parser3(repos,use_history,validate_props,uuid_action,parent_dir,notify_func,notify_baton,pool);");
+ }
+ res3 = SWIG_ConvertPtr(ST(0), &argp3,SWIGTYPE_p_svn_repos_t, 0 | 0 );
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_repos_get_fs_build_parser3" "', argument " "3"" of type '" "svn_repos_t *""'");
+ }
+ arg3 = (svn_repos_t *)(argp3);
+ ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_repos_get_fs_build_parser3" "', argument " "4"" of type '" "svn_boolean_t""'");
+ }
+ arg4 = (svn_boolean_t)(val4);
+ ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val5);
+ if (!SWIG_IsOK(ecode5)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_repos_get_fs_build_parser3" "', argument " "5"" of type '" "svn_boolean_t""'");
+ }
+ arg5 = (svn_boolean_t)(val5);
+ ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val6);
+ if (!SWIG_IsOK(ecode6)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "svn_repos_get_fs_build_parser3" "', argument " "6"" of type '" "enum svn_repos_load_uuid""'");
+ }
+ arg6 = (enum svn_repos_load_uuid)(val6);
+ res7 = SWIG_AsCharPtrAndSize(ST(4), &buf7, NULL, &alloc7);
+ if (!SWIG_IsOK(res7)) {
+ SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_repos_get_fs_build_parser3" "', argument " "7"" of type '" "char const *""'");
+ }
+ arg7 = (char *)(buf7);
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(5), (void**)(&arg8), SWIGTYPE_p_f_p_void_p_q_const__struct_svn_repos_notify_t_p_apr_pool_t__void);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_get_fs_build_parser3" "', argument " "8"" of type '" "svn_repos_notify_func_t""'");
+ }
+ }
+ res9 = SWIG_ConvertPtr(ST(6),SWIG_as_voidptrptr(&arg9), 0, 0);
+ if (!SWIG_IsOK(res9)) {
+ SWIG_exception_fail(SWIG_ArgError(res9), "in method '" "svn_repos_get_fs_build_parser3" "', argument " "9"" of type '" "void *""'");
+ }
+ if (items > 7) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_get_fs_build_parser3((struct svn_repos_parse_fns2_t const **)arg1,arg2,arg3,arg4,arg5,arg6,(char const *)arg7,arg8,arg9,arg10);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_repos_parse_fns2_t, 0); argvi++ ;
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg2, SWIGTYPE_p_void, 0); argvi++ ;
+ }
+
+
+
+
+
+
+ if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+
+
+ if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_get_fs_build_parser2) {
+ {
+ svn_repos_parse_fns2_t **arg1 = (svn_repos_parse_fns2_t **) 0 ;
+ void **arg2 = (void **) 0 ;
+ svn_repos_t *arg3 = (svn_repos_t *) 0 ;
+ svn_boolean_t arg4 ;
+ enum svn_repos_load_uuid arg5 ;
+ svn_stream_t *arg6 = (svn_stream_t *) 0 ;
+ char *arg7 = (char *) 0 ;
+ apr_pool_t *arg8 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_repos_parse_fns2_t *temp1 ;
+ void *temp2 ;
+ void *argp3 = 0 ;
+ int res3 = 0 ;
+ int val4 ;
+ int ecode4 = 0 ;
+ int val5 ;
+ int ecode5 = 0 ;
+ int res7 ;
+ char *buf7 = 0 ;
+ int alloc7 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg8 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ arg2 = &temp2;
+ if ((items < 5) || (items > 6)) {
+ SWIG_croak("Usage: svn_repos_get_fs_build_parser2(repos,use_history,uuid_action,outstream,parent_dir,pool);");
+ }
+ res3 = SWIG_ConvertPtr(ST(0), &argp3,SWIGTYPE_p_svn_repos_t, 0 | 0 );
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_repos_get_fs_build_parser2" "', argument " "3"" of type '" "svn_repos_t *""'");
+ }
+ arg3 = (svn_repos_t *)(argp3);
+ ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_repos_get_fs_build_parser2" "', argument " "4"" of type '" "svn_boolean_t""'");
+ }
+ arg4 = (svn_boolean_t)(val4);
+ ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val5);
+ if (!SWIG_IsOK(ecode5)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_repos_get_fs_build_parser2" "', argument " "5"" of type '" "enum svn_repos_load_uuid""'");
+ }
+ arg5 = (enum svn_repos_load_uuid)(val5);
+ {
+ svn_swig_pl_make_stream (&arg6, ST(3));
+ }
+ res7 = SWIG_AsCharPtrAndSize(ST(4), &buf7, NULL, &alloc7);
+ if (!SWIG_IsOK(res7)) {
+ SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_repos_get_fs_build_parser2" "', argument " "7"" of type '" "char const *""'");
+ }
+ arg7 = (char *)(buf7);
+ if (items > 5) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_get_fs_build_parser2((struct svn_repos_parse_fns2_t const **)arg1,arg2,arg3,arg4,arg5,arg6,(char const *)arg7,arg8);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_repos_parse_fns2_t, 0); argvi++ ;
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg2, SWIGTYPE_p_void, 0); argvi++ ;
+ }
+
+
+
+
+
+
+ if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+
+
+ if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_repos_get_fs_build_parser) {
{
svn_repos_parser_fns_t **arg1 = (svn_repos_parser_fns_t **) 0 ;
@@ -14185,6 +15907,94 @@ XS(_wrap_svn_repos_get_fs_build_parser) {
}
+XS(_wrap_svn_repos_authz_read2) {
+ {
+ svn_authz_t **arg1 = (svn_authz_t **) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_boolean_t arg4 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_authz_t *temp1 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int val4 ;
+ int ecode4 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg5 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ if ((items < 3) || (items > 4)) {
+ SWIG_croak("Usage: svn_repos_authz_read2(path,groups_path,must_exist,pool);");
+ }
+ res2 = SWIG_AsCharPtrAndSize(ST(0), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_repos_authz_read2" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ res3 = SWIG_AsCharPtrAndSize(ST(1), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_repos_authz_read2" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = (char *)(buf3);
+ ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_repos_authz_read2" "', argument " "4"" of type '" "svn_boolean_t""'");
+ }
+ arg4 = (svn_boolean_t)(val4);
+ if (items > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_authz_read2(arg1,(char const *)arg2,(char const *)arg3,arg4,arg5);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_authz_t, 0); argvi++ ;
+ }
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_repos_authz_read) {
{
svn_authz_t **arg1 = (svn_authz_t **) 0 ;
@@ -14262,6 +16072,74 @@ XS(_wrap_svn_repos_authz_read) {
}
+XS(_wrap_svn_repos_authz_parse) {
+ {
+ svn_authz_t **arg1 = (svn_authz_t **) 0 ;
+ svn_stream_t *arg2 = (svn_stream_t *) 0 ;
+ svn_stream_t *arg3 = (svn_stream_t *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_authz_t *temp1 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg4 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ if ((items < 2) || (items > 3)) {
+ SWIG_croak("Usage: svn_repos_authz_parse(stream,groups_stream,pool);");
+ }
+ {
+ svn_swig_pl_make_stream (&arg2, ST(0));
+ }
+ {
+ svn_swig_pl_make_stream (&arg3, ST(1));
+ }
+ if (items > 2) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_authz_parse(arg1,arg2,arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_authz_t, 0); argvi++ ;
+ }
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_repos_authz_check_access) {
{
svn_authz_t *arg1 = (svn_authz_t *) 0 ;
@@ -14464,6 +16342,120 @@ XS(_wrap_svn_repos_check_revision_access) {
}
+XS(_wrap_svn_repos_fs_get_inherited_props) {
+ {
+ apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
+ svn_fs_root_t *arg2 = (svn_fs_root_t *) 0 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+ svn_repos_authz_func_t arg5 = (svn_repos_authz_func_t) 0 ;
+ void *arg6 = (void *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg8 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ apr_array_header_t *temp1 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg7 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ {
+ _global_pool = arg8 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ if ((items < 4) || (items > 6)) {
+ SWIG_croak("Usage: svn_repos_fs_get_inherited_props(root,path,propname,authz_read_func,authz_read_baton,result_pool,scratch_pool);");
+ }
+ res2 = SWIG_ConvertPtr(ST(0), &argp2,SWIGTYPE_p_svn_fs_root_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_repos_fs_get_inherited_props" "', argument " "2"" of type '" "svn_fs_root_t *""'");
+ }
+ arg2 = (svn_fs_root_t *)(argp2);
+ res3 = SWIG_AsCharPtrAndSize(ST(1), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_repos_fs_get_inherited_props" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = (char *)(buf3);
+ res4 = SWIG_AsCharPtrAndSize(ST(2), &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_repos_fs_get_inherited_props" "', argument " "4"" of type '" "char const *""'");
+ }
+ arg4 = (char *)(buf4);
+ {
+ if (SvOK(ST(3))) {
+ arg5 = svn_swig_pl_thunk_authz_func;
+ arg6 = ST(3);
+ } else {
+ arg5 = NULL;
+ arg6 = NULL;
+ }
+ }
+ if (items > 4) {
+
+ }
+ if (items > 5) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_fs_get_inherited_props(arg1,arg2,(char const *)arg3,(char const *)arg4,arg5,arg6,arg7,arg8);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ /* FIXME: Missing argout typemap: svn_repos_fs_get_inherited_props arg 1 (apr_array_header_t **) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_repos_fs_get_inherited_props is not implemented yet");
+
+ }
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_repos_remember_client_capabilities) {
{
svn_repos_t *arg1 = (svn_repos_t *) 0 ;
@@ -14522,6 +16514,858 @@ XS(_wrap_svn_repos_remember_client_capabilities) {
}
+XS(_wrap_svn_repos_parse_fns3_invoke_magic_header_record) {
+ {
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ int arg2 ;
+ void *arg3 = (void *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int val2 ;
+ int ecode2 = 0 ;
+ int res3 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg4 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 3) || (items > 4)) {
+ SWIG_croak("Usage: svn_repos_parse_fns3_invoke_magic_header_record(_obj,version,parse_baton,pool);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_invoke_magic_header_record" "', argument " "1"" of type '" "svn_repos_parse_fns3_t *""'");
+ }
+ arg1 = (svn_repos_parse_fns3_t *)(argp1);
+ ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_repos_parse_fns3_invoke_magic_header_record" "', argument " "2"" of type '" "int""'");
+ }
+ arg2 = (int)(val2);
+ res3 = SWIG_ConvertPtr(ST(2),SWIG_as_voidptrptr(&arg3), 0, 0);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_repos_parse_fns3_invoke_magic_header_record" "', argument " "3"" of type '" "void *""'");
+ }
+ if (items > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_magic_header_record(arg1,arg2,arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns3_invoke_uuid_record) {
+ {
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *arg3 = (void *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg4 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 3) || (items > 4)) {
+ SWIG_croak("Usage: svn_repos_parse_fns3_invoke_uuid_record(_obj,uuid,parse_baton,pool);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_invoke_uuid_record" "', argument " "1"" of type '" "svn_repos_parse_fns3_t *""'");
+ }
+ arg1 = (svn_repos_parse_fns3_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_repos_parse_fns3_invoke_uuid_record" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ res3 = SWIG_ConvertPtr(ST(2),SWIG_as_voidptrptr(&arg3), 0, 0);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_repos_parse_fns3_invoke_uuid_record" "', argument " "3"" of type '" "void *""'");
+ }
+ if (items > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_uuid_record(arg1,(char const *)arg2,arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns3_invoke_new_revision_record) {
+ {
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ void **arg2 = (void **) 0 ;
+ apr_hash_t *arg3 = (apr_hash_t *) 0 ;
+ void *arg4 = (void *) 0 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ void *temp2 ;
+ void *argp3 = 0 ;
+ int res3 = 0 ;
+ int res4 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg5 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg2 = &temp2;
+ if ((items < 3) || (items > 4)) {
+ SWIG_croak("Usage: svn_repos_parse_fns3_invoke_new_revision_record(_obj,headers,parse_baton,pool);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_invoke_new_revision_record" "', argument " "1"" of type '" "svn_repos_parse_fns3_t *""'");
+ }
+ arg1 = (svn_repos_parse_fns3_t *)(argp1);
+ res3 = SWIG_ConvertPtr(ST(1), &argp3,SWIGTYPE_p_apr_hash_t, 0 | 0 );
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_repos_parse_fns3_invoke_new_revision_record" "', argument " "3"" of type '" "apr_hash_t *""'");
+ }
+ arg3 = (apr_hash_t *)(argp3);
+ res4 = SWIG_ConvertPtr(ST(2),SWIG_as_voidptrptr(&arg4), 0, 0);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_repos_parse_fns3_invoke_new_revision_record" "', argument " "4"" of type '" "void *""'");
+ }
+ if (items > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_new_revision_record(arg1,arg2,arg3,arg4,arg5);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg2, SWIGTYPE_p_void, 0); argvi++ ;
+ }
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns3_invoke_new_node_record) {
+ {
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ void **arg2 = (void **) 0 ;
+ apr_hash_t *arg3 = (apr_hash_t *) 0 ;
+ void *arg4 = (void *) 0 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ void *temp2 ;
+ void *argp3 = 0 ;
+ int res3 = 0 ;
+ int res4 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg5 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg2 = &temp2;
+ if ((items < 3) || (items > 4)) {
+ SWIG_croak("Usage: svn_repos_parse_fns3_invoke_new_node_record(_obj,headers,revision_baton,pool);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_invoke_new_node_record" "', argument " "1"" of type '" "svn_repos_parse_fns3_t *""'");
+ }
+ arg1 = (svn_repos_parse_fns3_t *)(argp1);
+ res3 = SWIG_ConvertPtr(ST(1), &argp3,SWIGTYPE_p_apr_hash_t, 0 | 0 );
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_repos_parse_fns3_invoke_new_node_record" "', argument " "3"" of type '" "apr_hash_t *""'");
+ }
+ arg3 = (apr_hash_t *)(argp3);
+ res4 = SWIG_ConvertPtr(ST(2),SWIG_as_voidptrptr(&arg4), 0, 0);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_repos_parse_fns3_invoke_new_node_record" "', argument " "4"" of type '" "void *""'");
+ }
+ if (items > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_new_node_record(arg1,arg2,arg3,arg4,arg5);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg2, SWIGTYPE_p_void, 0); argvi++ ;
+ }
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns3_invoke_set_revision_property) {
+ {
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ void *arg2 = (void *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_string_t *arg4 = (svn_string_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ svn_string_t value4 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ if ((items < 4) || (items > 4)) {
+ SWIG_croak("Usage: svn_repos_parse_fns3_invoke_set_revision_property(_obj,revision_baton,name,value);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_invoke_set_revision_property" "', argument " "1"" of type '" "svn_repos_parse_fns3_t *""'");
+ }
+ arg1 = (svn_repos_parse_fns3_t *)(argp1);
+ res2 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_repos_parse_fns3_invoke_set_revision_property" "', argument " "2"" of type '" "void *""'");
+ }
+ res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_repos_parse_fns3_invoke_set_revision_property" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = (char *)(buf3);
+ {
+ if (SvOK(ST(3))) {
+ value4.data = SvPV(ST(3), value4.len);
+ arg4 = &value4;
+ }
+ else {
+ arg4 = NULL;
+ }
+ }
+ {
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_set_revision_property(arg1,arg2,(char const *)arg3,(struct svn_string_t const *)arg4);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+ XSRETURN(argvi);
+ fail:
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns3_invoke_set_node_property) {
+ {
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ void *arg2 = (void *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_string_t *arg4 = (svn_string_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ svn_string_t value4 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ if ((items < 4) || (items > 4)) {
+ SWIG_croak("Usage: svn_repos_parse_fns3_invoke_set_node_property(_obj,node_baton,name,value);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_invoke_set_node_property" "', argument " "1"" of type '" "svn_repos_parse_fns3_t *""'");
+ }
+ arg1 = (svn_repos_parse_fns3_t *)(argp1);
+ res2 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_repos_parse_fns3_invoke_set_node_property" "', argument " "2"" of type '" "void *""'");
+ }
+ res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_repos_parse_fns3_invoke_set_node_property" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = (char *)(buf3);
+ {
+ if (SvOK(ST(3))) {
+ value4.data = SvPV(ST(3), value4.len);
+ arg4 = &value4;
+ }
+ else {
+ arg4 = NULL;
+ }
+ }
+ {
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_set_node_property(arg1,arg2,(char const *)arg3,(struct svn_string_t const *)arg4);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+ XSRETURN(argvi);
+ fail:
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns3_invoke_delete_node_property) {
+ {
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ void *arg2 = (void *) 0 ;
+ char *arg3 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ if ((items < 3) || (items > 3)) {
+ SWIG_croak("Usage: svn_repos_parse_fns3_invoke_delete_node_property(_obj,node_baton,name);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_invoke_delete_node_property" "', argument " "1"" of type '" "svn_repos_parse_fns3_t *""'");
+ }
+ arg1 = (svn_repos_parse_fns3_t *)(argp1);
+ res2 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_repos_parse_fns3_invoke_delete_node_property" "', argument " "2"" of type '" "void *""'");
+ }
+ res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_repos_parse_fns3_invoke_delete_node_property" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = (char *)(buf3);
+ {
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_delete_node_property(arg1,arg2,(char const *)arg3);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ XSRETURN(argvi);
+ fail:
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns3_invoke_remove_node_props) {
+ {
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ void *arg2 = (void *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_repos_parse_fns3_invoke_remove_node_props(_obj,node_baton);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_invoke_remove_node_props" "', argument " "1"" of type '" "svn_repos_parse_fns3_t *""'");
+ }
+ arg1 = (svn_repos_parse_fns3_t *)(argp1);
+ res2 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_repos_parse_fns3_invoke_remove_node_props" "', argument " "2"" of type '" "void *""'");
+ }
+ {
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_remove_node_props(arg1,arg2);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns3_invoke_set_fulltext) {
+ {
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ svn_stream_t **arg2 = (svn_stream_t **) 0 ;
+ void *arg3 = (void *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_stream_t *temp2 ;
+ int res3 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ arg2 = &temp2;
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_repos_parse_fns3_invoke_set_fulltext(_obj,node_baton);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_invoke_set_fulltext" "', argument " "1"" of type '" "svn_repos_parse_fns3_t *""'");
+ }
+ arg1 = (svn_repos_parse_fns3_t *)(argp1);
+ res3 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg3), 0, 0);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_repos_parse_fns3_invoke_set_fulltext" "', argument " "3"" of type '" "void *""'");
+ }
+ {
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_set_fulltext(arg1,arg2,arg3);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = svn_swig_pl_from_stream(*arg2); argvi++ ;
+ }
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns3_invoke_apply_textdelta) {
+ {
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ svn_txdelta_window_handler_t *arg2 = (svn_txdelta_window_handler_t *) 0 ;
+ void **arg3 = (void **) 0 ;
+ void *arg4 = (void *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_txdelta_window_handler_t temp2 ;
+ void *temp3 ;
+ int res4 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ arg2 = &temp2;
+ arg3 = &temp3;
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_repos_parse_fns3_invoke_apply_textdelta(_obj,node_baton);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_invoke_apply_textdelta" "', argument " "1"" of type '" "svn_repos_parse_fns3_t *""'");
+ }
+ arg1 = (svn_repos_parse_fns3_t *)(argp1);
+ res4 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg4), 0, 0);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_repos_parse_fns3_invoke_apply_textdelta" "', argument " "4"" of type '" "void *""'");
+ }
+ {
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_apply_textdelta(arg1,arg2,arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg2, SWIGTYPE_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t, 0); argvi++ ;
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg3, SWIGTYPE_p_void, 0); argvi++ ;
+ }
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns3_invoke_close_node) {
+ {
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ void *arg2 = (void *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_repos_parse_fns3_invoke_close_node(_obj,node_baton);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_invoke_close_node" "', argument " "1"" of type '" "svn_repos_parse_fns3_t *""'");
+ }
+ arg1 = (svn_repos_parse_fns3_t *)(argp1);
+ res2 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_repos_parse_fns3_invoke_close_node" "', argument " "2"" of type '" "void *""'");
+ }
+ {
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_close_node(arg1,arg2);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_repos_parse_fns3_invoke_close_revision) {
+ {
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ void *arg2 = (void *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_repos_parse_fns3_invoke_close_revision(_obj,revision_baton);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_repos_parse_fns3_invoke_close_revision" "', argument " "1"" of type '" "svn_repos_parse_fns3_t *""'");
+ }
+ arg1 = (svn_repos_parse_fns3_t *)(argp1);
+ res2 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_repos_parse_fns3_invoke_close_revision" "', argument " "2"" of type '" "void *""'");
+ }
+ {
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_close_revision(arg1,arg2);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_repos_parse_fns2_invoke_new_revision_record) {
{
svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
@@ -15685,6 +18529,71 @@ XS(_wrap_svn_repos_invoke_notify_func) {
}
+XS(_wrap_svn_repos_invoke_freeze_func) {
+ {
+ svn_repos_freeze_func_t arg1 = (svn_repos_freeze_func_t) 0 ;
+ void *arg2 = (void *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int res2 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg3 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 2) || (items > 3)) {
+ SWIG_croak("Usage: svn_repos_invoke_freeze_func(_obj,baton,pool);");
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(0), (void**)(&arg1), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_invoke_freeze_func" "', argument " "1"" of type '" "svn_repos_freeze_func_t""'");
+ }
+ }
+ res2 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_repos_invoke_freeze_func" "', argument " "2"" of type '" "void *""'");
+ }
+ if (items > 2) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_invoke_freeze_func(arg1,arg2,arg3);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_repos_invoke_history_func) {
{
svn_repos_history_func_t arg1 = (svn_repos_history_func_t) 0 ;
@@ -15774,12 +18683,13 @@ XS(_wrap_svn_repos_invoke_history_func) {
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
-static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *|svn_rangelist_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_hash_t = {"_p_apr_hash_t", "apr_hash_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int32_t = {"_p_apr_int32_t", "apr_int32_t *|time_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int64_t = {"_p_apr_int64_t", "apr_int64_t *|svn_filesize_t *|apr_time_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_pool_t = {"_p_apr_pool_t", "apr_pool_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_int_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_int_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(int,void *,apr_pool_t *)|svn_error_t *(*)(int,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_opt_subcommand_t *|struct svn_error_t *(*)(apr_getopt_t *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_svn_stream_t_p_void__p_svn_error_t = {"_p_f_p_p_svn_stream_t_p_void__p_svn_error_t", "struct svn_error_t *(*)(svn_stream_t **,void *)|svn_error_t *(*)(svn_stream_t **,void *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)|svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
@@ -15792,6 +18702,7 @@ static swig_type_info _swigt__p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t =
static swig_type_info _swigt__p_f_p_void__p_svn_error_t = {"_p_f_p_void__p_svn_error_t", "svn_cancel_func_t|struct svn_error_t *(*)(void *)|svn_error_t *(*)(void *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,apr_int64_t,svn_fs_pack_notify_action_t,apr_pool_t *)|svn_fs_pack_notify_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,apr_hash_t *,svn_revnum_t,char const *,char const *,char const *,apr_pool_t *)|svn_log_message_receiver_t", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,apr_pool_t *)|svn_repos_freeze_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char__p_svn_error_t = {"_p_f_p_void_p_q_const__char__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *)|svn_error_t *(*)(void *,char const *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,svn_string_t const *)|svn_error_t *(*)(void *,char const *,svn_string_t const *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,svn_revnum_t,apr_hash_t *,svn_txdelta_window_handler_t *,void **,apr_array_header_t *,apr_pool_t *)|svn_repos_file_rev_handler_t", 0, 0, (void*)0, 0};
@@ -15813,6 +18724,7 @@ static swig_type_info _swigt__p_p_svn_dirent_t = {"_p_p_svn_dirent_t", "struct s
static swig_type_info _swigt__p_p_svn_fs_txn_t = {"_p_p_svn_fs_txn_t", "struct svn_fs_txn_t **|svn_fs_txn_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_lock_t = {"_p_p_svn_lock_t", "struct svn_lock_t **|svn_lock_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_repos_parse_fns2_t = {"_p_p_svn_repos_parse_fns2_t", "struct svn_repos_parse_fns2_t **|svn_repos_parse_fns2_t **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_svn_repos_parse_fns3_t = {"_p_p_svn_repos_parse_fns3_t", "struct svn_repos_parse_fns3_t **|svn_repos_parse_fns3_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_repos_parse_fns_t = {"_p_p_svn_repos_parse_fns_t", "struct svn_repos_parse_fns_t **|svn_repos_parser_fns_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_repos_t = {"_p_p_svn_repos_t", "struct svn_repos_t **|svn_repos_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_stream_t = {"_p_p_svn_stream_t", "struct svn_stream_t **|svn_stream_t **", 0, 0, (void*)0, 0};
@@ -15829,6 +18741,9 @@ static swig_type_info _swigt__p_svn_auth_provider_object_t = {"_p_svn_auth_provi
static swig_type_info _swigt__p_svn_auth_provider_t = {"_p_svn_auth_provider_t", "struct svn_auth_provider_t *|svn_auth_provider_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_ssl_server_cert_info_t = {"_p_svn_auth_ssl_server_cert_info_t", "struct svn_auth_ssl_server_cert_info_t *|svn_auth_ssl_server_cert_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_authz_t = {"_p_svn_authz_t", "struct svn_authz_t *|svn_authz_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_ctx_t = {"_p_svn_checksum_ctx_t", "struct svn_checksum_ctx_t *|svn_checksum_ctx_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "enum svn_checksum_kind_t *|svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "struct svn_checksum_t *|svn_checksum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_commit_info_t = {"_p_svn_commit_info_t", "struct svn_commit_info_t *|svn_commit_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_config_t = {"_p_svn_config_t", "struct svn_config_t *|svn_config_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_delta_editor_t = {"_p_svn_delta_editor_t", "struct svn_delta_editor_t *|svn_delta_editor_t *", 0, 0, (void*)0, 0};
@@ -15875,6 +18790,7 @@ static swig_type_info _swigt__p_svn_opt_subcommand_desc2_t = {"_p_svn_opt_subcom
static swig_type_info _swigt__p_svn_opt_subcommand_desc_t = {"_p_svn_opt_subcommand_desc_t", "struct svn_opt_subcommand_desc_t *|svn_opt_subcommand_desc_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_file_t = {"_p_svn_patch_file_t", "struct svn_patch_file_t *|svn_patch_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_t = {"_p_svn_patch_t", "struct svn_patch_t *|svn_patch_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_prop_inherited_item_t = {"_p_svn_prop_inherited_item_t", "struct svn_prop_inherited_item_t *|svn_prop_inherited_item_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_kind = {"_p_svn_prop_kind", "svn_prop_kind_t *|enum svn_prop_kind *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_patch_t = {"_p_svn_prop_patch_t", "struct svn_prop_patch_t *|svn_prop_patch_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_repos_authz_access_t = {"_p_svn_repos_authz_access_t", "enum svn_repos_authz_access_t *|svn_repos_authz_access_t *", 0, 0, (void*)0, 0};
@@ -15883,6 +18799,7 @@ static swig_type_info _swigt__p_svn_repos_notify_action_t = {"_p_svn_repos_notif
static swig_type_info _swigt__p_svn_repos_notify_t = {"_p_svn_repos_notify_t", "struct svn_repos_notify_t *|svn_repos_notify_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_repos_notify_warning_t = {"_p_svn_repos_notify_warning_t", "enum svn_repos_notify_warning_t *|svn_repos_notify_warning_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_repos_parse_fns2_t = {"_p_svn_repos_parse_fns2_t", "struct svn_repos_parse_fns2_t *|svn_repos_parse_fns2_t *|svn_repos_parser_fns2_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_repos_parse_fns3_t = {"_p_svn_repos_parse_fns3_t", "struct svn_repos_parse_fns3_t *|svn_repos_parse_fns3_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_repos_parse_fns_t = {"_p_svn_repos_parse_fns_t", "struct svn_repos_parse_fns_t *|svn_repos_parser_fns_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_repos_revision_access_level_t = {"_p_svn_repos_revision_access_level_t", "enum svn_repos_revision_access_level_t *|svn_repos_revision_access_level_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_repos_t = {"_p_svn_repos_t", "struct svn_repos_t *|svn_repos_t *", 0, 0, (void*)0, 0};
@@ -15895,7 +18812,11 @@ static swig_type_info _swigt__p_svn_txdelta_op_t = {"_p_svn_txdelta_op_t", "stru
static swig_type_info _swigt__p_svn_txdelta_stream_t = {"_p_svn_txdelta_stream_t", "struct svn_txdelta_stream_t *|svn_txdelta_stream_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_txdelta_window_t = {"_p_svn_txdelta_window_t", "struct svn_txdelta_window_t *|svn_txdelta_window_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_checklist_t = {"_p_svn_version_checklist_t", "struct svn_version_checklist_t *|svn_version_checklist_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_linked_lib_t = {"_p_svn_version_ext_linked_lib_t", "struct svn_version_ext_linked_lib_t *|svn_version_ext_linked_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_loaded_lib_t = {"_p_svn_version_ext_loaded_lib_t", "struct svn_version_ext_loaded_lib_t *|svn_version_ext_loaded_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_extended_t = {"_p_svn_version_extended_t", "struct svn_version_extended_t *|svn_version_extended_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_t = {"_p_svn_version_t", "struct svn_version_t *|svn_version_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_wc_external_item2_t = {"_p_svn_wc_external_item2_t", "svn_wc_external_item2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_long = {"_p_unsigned_long", "unsigned long *|svn_linenum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_void = {"_p_void", "void *", 0, 0, (void*)0, 0};
@@ -15906,6 +18827,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_apr_int64_t,
&_swigt__p_apr_pool_t,
&_swigt__p_char,
+ &_swigt__p_f_int_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_p_svn_stream_t_p_void__p_svn_error_t,
&_swigt__p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t,
@@ -15918,6 +18840,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_f_p_void__p_svn_error_t,
&_swigt__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_f_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t,
@@ -15939,6 +18862,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_p_svn_fs_txn_t,
&_swigt__p_p_svn_lock_t,
&_swigt__p_p_svn_repos_parse_fns2_t,
+ &_swigt__p_p_svn_repos_parse_fns3_t,
&_swigt__p_p_svn_repos_parse_fns_t,
&_swigt__p_p_svn_repos_t,
&_swigt__p_p_svn_stream_t,
@@ -15955,6 +18879,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_auth_provider_t,
&_swigt__p_svn_auth_ssl_server_cert_info_t,
&_swigt__p_svn_authz_t,
+ &_swigt__p_svn_checksum_ctx_t,
+ &_swigt__p_svn_checksum_kind_t,
+ &_swigt__p_svn_checksum_t,
&_swigt__p_svn_commit_info_t,
&_swigt__p_svn_config_t,
&_swigt__p_svn_delta_editor_t,
@@ -16001,6 +18928,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_opt_subcommand_desc_t,
&_swigt__p_svn_patch_file_t,
&_swigt__p_svn_patch_t,
+ &_swigt__p_svn_prop_inherited_item_t,
&_swigt__p_svn_prop_kind,
&_swigt__p_svn_prop_patch_t,
&_swigt__p_svn_repos_authz_access_t,
@@ -16009,6 +18937,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_repos_notify_t,
&_swigt__p_svn_repos_notify_warning_t,
&_swigt__p_svn_repos_parse_fns2_t,
+ &_swigt__p_svn_repos_parse_fns3_t,
&_swigt__p_svn_repos_parse_fns_t,
&_swigt__p_svn_repos_revision_access_level_t,
&_swigt__p_svn_repos_t,
@@ -16021,7 +18950,11 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_txdelta_stream_t,
&_swigt__p_svn_txdelta_window_t,
&_swigt__p_svn_version_checklist_t,
+ &_swigt__p_svn_version_ext_linked_lib_t,
+ &_swigt__p_svn_version_ext_loaded_lib_t,
+ &_swigt__p_svn_version_extended_t,
&_swigt__p_svn_version_t,
+ &_swigt__p_svn_wc_external_item2_t,
&_swigt__p_unsigned_long,
&_swigt__p_void,
};
@@ -16032,6 +18965,7 @@ static swig_cast_info _swigc__p_apr_int32_t[] = { {&_swigt__p_apr_int32_t, 0, 0
static swig_cast_info _swigc__p_apr_int64_t[] = { {&_swigt__p_apr_int64_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_apr_pool_t[] = { {&_swigt__p_apr_pool_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_int_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_int_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_svn_stream_t_p_void__p_svn_error_t[] = { {&_swigt__p_f_p_p_svn_stream_t_p_void__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -16044,6 +18978,7 @@ static swig_cast_info _swigc__p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t[]
static swig_cast_info _swigc__p_f_p_void__p_svn_error_t[] = { {&_swigt__p_f_p_void__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -16065,6 +19000,7 @@ static swig_cast_info _swigc__p_p_svn_dirent_t[] = { {&_swigt__p_p_svn_dirent_t
static swig_cast_info _swigc__p_p_svn_fs_txn_t[] = { {&_swigt__p_p_svn_fs_txn_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_lock_t[] = { {&_swigt__p_p_svn_lock_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_repos_parse_fns2_t[] = { {&_swigt__p_p_svn_repos_parse_fns2_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_svn_repos_parse_fns3_t[] = { {&_swigt__p_p_svn_repos_parse_fns3_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_repos_parse_fns_t[] = { {&_swigt__p_p_svn_repos_parse_fns_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_repos_t[] = { {&_swigt__p_p_svn_repos_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_stream_t[] = { {&_swigt__p_p_svn_stream_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -16081,6 +19017,9 @@ static swig_cast_info _swigc__p_svn_auth_provider_object_t[] = { {&_swigt__p_sv
static swig_cast_info _swigc__p_svn_auth_provider_t[] = { {&_swigt__p_svn_auth_provider_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_ssl_server_cert_info_t[] = { {&_swigt__p_svn_auth_ssl_server_cert_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_authz_t[] = { {&_swigt__p_svn_authz_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_ctx_t[] = { {&_swigt__p_svn_checksum_ctx_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_kind_t[] = { {&_swigt__p_svn_checksum_kind_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_t[] = { {&_swigt__p_svn_checksum_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_commit_info_t[] = { {&_swigt__p_svn_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_config_t[] = { {&_swigt__p_svn_config_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_delta_editor_t[] = { {&_swigt__p_svn_delta_editor_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -16127,6 +19066,7 @@ static swig_cast_info _swigc__p_svn_opt_subcommand_desc2_t[] = { {&_swigt__p_sv
static swig_cast_info _swigc__p_svn_opt_subcommand_desc_t[] = { {&_swigt__p_svn_opt_subcommand_desc_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_file_t[] = { {&_swigt__p_svn_patch_file_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_t[] = { {&_swigt__p_svn_patch_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_prop_inherited_item_t[] = { {&_swigt__p_svn_prop_inherited_item_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_kind[] = { {&_swigt__p_svn_prop_kind, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_patch_t[] = { {&_swigt__p_svn_prop_patch_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_repos_authz_access_t[] = { {&_swigt__p_svn_repos_authz_access_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -16135,6 +19075,7 @@ static swig_cast_info _swigc__p_svn_repos_notify_action_t[] = { {&_swigt__p_svn
static swig_cast_info _swigc__p_svn_repos_notify_t[] = { {&_swigt__p_svn_repos_notify_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_repos_notify_warning_t[] = { {&_swigt__p_svn_repos_notify_warning_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_repos_parse_fns2_t[] = { {&_swigt__p_svn_repos_parse_fns2_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_repos_parse_fns3_t[] = { {&_swigt__p_svn_repos_parse_fns3_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_repos_parse_fns_t[] = { {&_swigt__p_svn_repos_parse_fns_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_repos_revision_access_level_t[] = { {&_swigt__p_svn_repos_revision_access_level_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_repos_t[] = { {&_swigt__p_svn_repos_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -16147,7 +19088,11 @@ static swig_cast_info _swigc__p_svn_txdelta_op_t[] = { {&_swigt__p_svn_txdelta_
static swig_cast_info _swigc__p_svn_txdelta_stream_t[] = { {&_swigt__p_svn_txdelta_stream_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_txdelta_window_t[] = { {&_swigt__p_svn_txdelta_window_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_checklist_t[] = { {&_swigt__p_svn_version_checklist_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_linked_lib_t[] = { {&_swigt__p_svn_version_ext_linked_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_loaded_lib_t[] = { {&_swigt__p_svn_version_ext_loaded_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_extended_t[] = { {&_swigt__p_svn_version_extended_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_t[] = { {&_swigt__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_wc_external_item2_t[] = { {&_swigt__p_svn_wc_external_item2_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_long[] = { {&_swigt__p_unsigned_long, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_void[] = { {&_swigt__p_void, 0, 0, 0},{0, 0, 0, 0}};
@@ -16158,6 +19103,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_apr_int64_t,
_swigc__p_apr_pool_t,
_swigc__p_char,
+ _swigc__p_f_int_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_p_svn_stream_t_p_void__p_svn_error_t,
_swigc__p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t,
@@ -16170,6 +19116,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_f_p_void__p_svn_error_t,
_swigc__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_f_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t,
@@ -16191,6 +19138,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_p_svn_fs_txn_t,
_swigc__p_p_svn_lock_t,
_swigc__p_p_svn_repos_parse_fns2_t,
+ _swigc__p_p_svn_repos_parse_fns3_t,
_swigc__p_p_svn_repos_parse_fns_t,
_swigc__p_p_svn_repos_t,
_swigc__p_p_svn_stream_t,
@@ -16207,6 +19155,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_auth_provider_t,
_swigc__p_svn_auth_ssl_server_cert_info_t,
_swigc__p_svn_authz_t,
+ _swigc__p_svn_checksum_ctx_t,
+ _swigc__p_svn_checksum_kind_t,
+ _swigc__p_svn_checksum_t,
_swigc__p_svn_commit_info_t,
_swigc__p_svn_config_t,
_swigc__p_svn_delta_editor_t,
@@ -16253,6 +19204,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_opt_subcommand_desc_t,
_swigc__p_svn_patch_file_t,
_swigc__p_svn_patch_t,
+ _swigc__p_svn_prop_inherited_item_t,
_swigc__p_svn_prop_kind,
_swigc__p_svn_prop_patch_t,
_swigc__p_svn_repos_authz_access_t,
@@ -16261,6 +19213,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_repos_notify_t,
_swigc__p_svn_repos_notify_warning_t,
_swigc__p_svn_repos_parse_fns2_t,
+ _swigc__p_svn_repos_parse_fns3_t,
_swigc__p_svn_repos_parse_fns_t,
_swigc__p_svn_repos_revision_access_level_t,
_swigc__p_svn_repos_t,
@@ -16273,7 +19226,11 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_txdelta_stream_t,
_swigc__p_svn_txdelta_window_t,
_swigc__p_svn_version_checklist_t,
+ _swigc__p_svn_version_ext_linked_lib_t,
+ _swigc__p_svn_version_ext_loaded_lib_t,
+ _swigc__p_svn_version_extended_t,
_swigc__p_svn_version_t,
+ _swigc__p_svn_wc_external_item2_t,
_swigc__p_unsigned_long,
_swigc__p_void,
};
@@ -16320,6 +19277,7 @@ static swig_command_info swig_commands[] = {
{"SVN::_Repos::svn_repos_delete", _wrap_svn_repos_delete},
{"SVN::_Repos::svn_repos_has_capability", _wrap_svn_repos_has_capability},
{"SVN::_Repos::svn_repos_fs", _wrap_svn_repos_fs},
+{"SVN::_Repos::svn_repos_hotcopy2", _wrap_svn_repos_hotcopy2},
{"SVN::_Repos::svn_repos_hotcopy", _wrap_svn_repos_hotcopy},
{"SVN::_Repos::svn_repos_fs_pack2", _wrap_svn_repos_fs_pack2},
{"SVN::_Repos::svn_repos_fs_pack", _wrap_svn_repos_fs_pack},
@@ -16327,6 +19285,7 @@ static swig_command_info swig_commands[] = {
{"SVN::_Repos::svn_repos_recover3", _wrap_svn_repos_recover3},
{"SVN::_Repos::svn_repos_recover2", _wrap_svn_repos_recover2},
{"SVN::_Repos::svn_repos_recover", _wrap_svn_repos_recover},
+{"SVN::_Repos::svn_repos_freeze", _wrap_svn_repos_freeze},
{"SVN::_Repos::svn_repos_db_logfiles", _wrap_svn_repos_db_logfiles},
{"SVN::_Repos::svn_repos_path", _wrap_svn_repos_path},
{"SVN::_Repos::svn_repos_db_env", _wrap_svn_repos_db_env},
@@ -16345,6 +19304,8 @@ static swig_command_info swig_commands[] = {
{"SVN::_Repos::svn_repos_post_lock_hook", _wrap_svn_repos_post_lock_hook},
{"SVN::_Repos::svn_repos_pre_unlock_hook", _wrap_svn_repos_pre_unlock_hook},
{"SVN::_Repos::svn_repos_post_unlock_hook", _wrap_svn_repos_post_unlock_hook},
+{"SVN::_Repos::svn_repos_hooks_setenv", _wrap_svn_repos_hooks_setenv},
+{"SVN::_Repos::svn_repos_begin_report3", _wrap_svn_repos_begin_report3},
{"SVN::_Repos::svn_repos_begin_report2", _wrap_svn_repos_begin_report2},
{"SVN::_Repos::svn_repos_begin_report", _wrap_svn_repos_begin_report},
{"SVN::_Repos::svn_repos_set_path3", _wrap_svn_repos_set_path3},
@@ -16424,9 +19385,36 @@ static swig_command_info swig_commands[] = {
{"SVN::_Repos::svn_repos_dump_fs3", _wrap_svn_repos_dump_fs3},
{"SVN::_Repos::svn_repos_dump_fs2", _wrap_svn_repos_dump_fs2},
{"SVN::_Repos::svn_repos_dump_fs", _wrap_svn_repos_dump_fs},
+{"SVN::_Repos::svn_repos_load_fs4", _wrap_svn_repos_load_fs4},
{"SVN::_Repos::svn_repos_load_fs3", _wrap_svn_repos_load_fs3},
{"SVN::_Repos::svn_repos_load_fs2", _wrap_svn_repos_load_fs2},
{"SVN::_Repos::svn_repos_load_fs", _wrap_svn_repos_load_fs},
+{"SVN::_Repos::svn_repos_parse_fns3_t_magic_header_record_set", _wrap_svn_repos_parse_fns3_t_magic_header_record_set},
+{"SVN::_Repos::svn_repos_parse_fns3_t_magic_header_record_get", _wrap_svn_repos_parse_fns3_t_magic_header_record_get},
+{"SVN::_Repos::svn_repos_parse_fns3_t_uuid_record_set", _wrap_svn_repos_parse_fns3_t_uuid_record_set},
+{"SVN::_Repos::svn_repos_parse_fns3_t_uuid_record_get", _wrap_svn_repos_parse_fns3_t_uuid_record_get},
+{"SVN::_Repos::svn_repos_parse_fns3_t_new_revision_record_set", _wrap_svn_repos_parse_fns3_t_new_revision_record_set},
+{"SVN::_Repos::svn_repos_parse_fns3_t_new_revision_record_get", _wrap_svn_repos_parse_fns3_t_new_revision_record_get},
+{"SVN::_Repos::svn_repos_parse_fns3_t_new_node_record_set", _wrap_svn_repos_parse_fns3_t_new_node_record_set},
+{"SVN::_Repos::svn_repos_parse_fns3_t_new_node_record_get", _wrap_svn_repos_parse_fns3_t_new_node_record_get},
+{"SVN::_Repos::svn_repos_parse_fns3_t_set_revision_property_set", _wrap_svn_repos_parse_fns3_t_set_revision_property_set},
+{"SVN::_Repos::svn_repos_parse_fns3_t_set_revision_property_get", _wrap_svn_repos_parse_fns3_t_set_revision_property_get},
+{"SVN::_Repos::svn_repos_parse_fns3_t_set_node_property_set", _wrap_svn_repos_parse_fns3_t_set_node_property_set},
+{"SVN::_Repos::svn_repos_parse_fns3_t_set_node_property_get", _wrap_svn_repos_parse_fns3_t_set_node_property_get},
+{"SVN::_Repos::svn_repos_parse_fns3_t_delete_node_property_set", _wrap_svn_repos_parse_fns3_t_delete_node_property_set},
+{"SVN::_Repos::svn_repos_parse_fns3_t_delete_node_property_get", _wrap_svn_repos_parse_fns3_t_delete_node_property_get},
+{"SVN::_Repos::svn_repos_parse_fns3_t_remove_node_props_set", _wrap_svn_repos_parse_fns3_t_remove_node_props_set},
+{"SVN::_Repos::svn_repos_parse_fns3_t_remove_node_props_get", _wrap_svn_repos_parse_fns3_t_remove_node_props_get},
+{"SVN::_Repos::svn_repos_parse_fns3_t_set_fulltext_set", _wrap_svn_repos_parse_fns3_t_set_fulltext_set},
+{"SVN::_Repos::svn_repos_parse_fns3_t_set_fulltext_get", _wrap_svn_repos_parse_fns3_t_set_fulltext_get},
+{"SVN::_Repos::svn_repos_parse_fns3_t_apply_textdelta_set", _wrap_svn_repos_parse_fns3_t_apply_textdelta_set},
+{"SVN::_Repos::svn_repos_parse_fns3_t_apply_textdelta_get", _wrap_svn_repos_parse_fns3_t_apply_textdelta_get},
+{"SVN::_Repos::svn_repos_parse_fns3_t_close_node_set", _wrap_svn_repos_parse_fns3_t_close_node_set},
+{"SVN::_Repos::svn_repos_parse_fns3_t_close_node_get", _wrap_svn_repos_parse_fns3_t_close_node_get},
+{"SVN::_Repos::svn_repos_parse_fns3_t_close_revision_set", _wrap_svn_repos_parse_fns3_t_close_revision_set},
+{"SVN::_Repos::svn_repos_parse_fns3_t_close_revision_get", _wrap_svn_repos_parse_fns3_t_close_revision_get},
+{"SVN::_Repos::svn_repos_parse_dumpstream3", _wrap_svn_repos_parse_dumpstream3},
+{"SVN::_Repos::svn_repos_get_fs_build_parser4", _wrap_svn_repos_get_fs_build_parser4},
{"SVN::_Repos::svn_repos_parse_fns2_t_new_revision_record_set", _wrap_svn_repos_parse_fns2_t_new_revision_record_set},
{"SVN::_Repos::svn_repos_parse_fns2_t_new_revision_record_get", _wrap_svn_repos_parse_fns2_t_new_revision_record_get},
{"SVN::_Repos::svn_repos_parse_fns2_t_uuid_record_set", _wrap_svn_repos_parse_fns2_t_uuid_record_set},
@@ -16449,9 +19437,6 @@ static swig_command_info swig_commands[] = {
{"SVN::_Repos::svn_repos_parse_fns2_t_close_node_get", _wrap_svn_repos_parse_fns2_t_close_node_get},
{"SVN::_Repos::svn_repos_parse_fns2_t_close_revision_set", _wrap_svn_repos_parse_fns2_t_close_revision_set},
{"SVN::_Repos::svn_repos_parse_fns2_t_close_revision_get", _wrap_svn_repos_parse_fns2_t_close_revision_get},
-{"SVN::_Repos::svn_repos_parse_dumpstream2", _wrap_svn_repos_parse_dumpstream2},
-{"SVN::_Repos::svn_repos_get_fs_build_parser3", _wrap_svn_repos_get_fs_build_parser3},
-{"SVN::_Repos::svn_repos_get_fs_build_parser2", _wrap_svn_repos_get_fs_build_parser2},
{"SVN::_Repos::svn_repos_parser_fns_t_new_revision_record_set", _wrap_svn_repos_parser_fns_t_new_revision_record_set},
{"SVN::_Repos::svn_repos_parser_fns_t_new_revision_record_get", _wrap_svn_repos_parser_fns_t_new_revision_record_get},
{"SVN::_Repos::svn_repos_parser_fns_t_uuid_record_set", _wrap_svn_repos_parser_fns_t_uuid_record_set},
@@ -16470,12 +19455,30 @@ static swig_command_info swig_commands[] = {
{"SVN::_Repos::svn_repos_parser_fns_t_close_node_get", _wrap_svn_repos_parser_fns_t_close_node_get},
{"SVN::_Repos::svn_repos_parser_fns_t_close_revision_set", _wrap_svn_repos_parser_fns_t_close_revision_set},
{"SVN::_Repos::svn_repos_parser_fns_t_close_revision_get", _wrap_svn_repos_parser_fns_t_close_revision_get},
+{"SVN::_Repos::svn_repos_parse_dumpstream2", _wrap_svn_repos_parse_dumpstream2},
{"SVN::_Repos::svn_repos_parse_dumpstream", _wrap_svn_repos_parse_dumpstream},
+{"SVN::_Repos::svn_repos_get_fs_build_parser3", _wrap_svn_repos_get_fs_build_parser3},
+{"SVN::_Repos::svn_repos_get_fs_build_parser2", _wrap_svn_repos_get_fs_build_parser2},
{"SVN::_Repos::svn_repos_get_fs_build_parser", _wrap_svn_repos_get_fs_build_parser},
+{"SVN::_Repos::svn_repos_authz_read2", _wrap_svn_repos_authz_read2},
{"SVN::_Repos::svn_repos_authz_read", _wrap_svn_repos_authz_read},
+{"SVN::_Repos::svn_repos_authz_parse", _wrap_svn_repos_authz_parse},
{"SVN::_Repos::svn_repos_authz_check_access", _wrap_svn_repos_authz_check_access},
{"SVN::_Repos::svn_repos_check_revision_access", _wrap_svn_repos_check_revision_access},
+{"SVN::_Repos::svn_repos_fs_get_inherited_props", _wrap_svn_repos_fs_get_inherited_props},
{"SVN::_Repos::svn_repos_remember_client_capabilities", _wrap_svn_repos_remember_client_capabilities},
+{"SVN::_Repos::svn_repos_parse_fns3_invoke_magic_header_record", _wrap_svn_repos_parse_fns3_invoke_magic_header_record},
+{"SVN::_Repos::svn_repos_parse_fns3_invoke_uuid_record", _wrap_svn_repos_parse_fns3_invoke_uuid_record},
+{"SVN::_Repos::svn_repos_parse_fns3_invoke_new_revision_record", _wrap_svn_repos_parse_fns3_invoke_new_revision_record},
+{"SVN::_Repos::svn_repos_parse_fns3_invoke_new_node_record", _wrap_svn_repos_parse_fns3_invoke_new_node_record},
+{"SVN::_Repos::svn_repos_parse_fns3_invoke_set_revision_property", _wrap_svn_repos_parse_fns3_invoke_set_revision_property},
+{"SVN::_Repos::svn_repos_parse_fns3_invoke_set_node_property", _wrap_svn_repos_parse_fns3_invoke_set_node_property},
+{"SVN::_Repos::svn_repos_parse_fns3_invoke_delete_node_property", _wrap_svn_repos_parse_fns3_invoke_delete_node_property},
+{"SVN::_Repos::svn_repos_parse_fns3_invoke_remove_node_props", _wrap_svn_repos_parse_fns3_invoke_remove_node_props},
+{"SVN::_Repos::svn_repos_parse_fns3_invoke_set_fulltext", _wrap_svn_repos_parse_fns3_invoke_set_fulltext},
+{"SVN::_Repos::svn_repos_parse_fns3_invoke_apply_textdelta", _wrap_svn_repos_parse_fns3_invoke_apply_textdelta},
+{"SVN::_Repos::svn_repos_parse_fns3_invoke_close_node", _wrap_svn_repos_parse_fns3_invoke_close_node},
+{"SVN::_Repos::svn_repos_parse_fns3_invoke_close_revision", _wrap_svn_repos_parse_fns3_invoke_close_revision},
{"SVN::_Repos::svn_repos_parse_fns2_invoke_new_revision_record", _wrap_svn_repos_parse_fns2_invoke_new_revision_record},
{"SVN::_Repos::svn_repos_parse_fns2_invoke_uuid_record", _wrap_svn_repos_parse_fns2_invoke_uuid_record},
{"SVN::_Repos::svn_repos_parse_fns2_invoke_new_node_record", _wrap_svn_repos_parse_fns2_invoke_new_node_record},
@@ -16491,6 +19494,7 @@ static swig_command_info swig_commands[] = {
{"SVN::_Repos::svn_repos_invoke_authz_callback", _wrap_svn_repos_invoke_authz_callback},
{"SVN::_Repos::svn_repos_invoke_file_rev_handler", _wrap_svn_repos_invoke_file_rev_handler},
{"SVN::_Repos::svn_repos_invoke_notify_func", _wrap_svn_repos_invoke_notify_func},
+{"SVN::_Repos::svn_repos_invoke_freeze_func", _wrap_svn_repos_invoke_freeze_func},
{"SVN::_Repos::svn_repos_invoke_history_func", _wrap_svn_repos_invoke_history_func},
{0,0}
};
@@ -16553,8 +19557,6 @@ SWIG_InitializeModule(void *clientdata) {
swig_module_info *module_head, *iter;
int found, init;
- clientdata = clientdata;
-
/* check to see if the circular list has been setup, if not, set it up */
if (swig_module.next==0) {
/* Initialize the swig_module */
@@ -16745,25 +19747,30 @@ XS(SWIG_init) {
/* Install commands */
for (i = 0; swig_commands[i].name; i++) {
- newXS((char*) swig_commands[i].name,swig_commands[i].wrapper, (char*)__FILE__);
+ /* Casts only needed for Perl < 5.10. */
+#ifdef __cplusplus
+ newXS(const_cast<char*>(swig_commands[i].name), swig_commands[i].wrapper, const_cast<char*>(__FILE__));
+#else
+ newXS((char*)swig_commands[i].name, swig_commands[i].wrapper, (char*)__FILE__);
+#endif
}
/* Install variables */
for (i = 0; swig_variables[i].name; i++) {
SV *sv;
- sv = get_sv((char*) swig_variables[i].name, TRUE | 0x2 | GV_ADDMULTI);
+ sv = get_sv(swig_variables[i].name, TRUE | 0x2 | GV_ADDMULTI);
if (swig_variables[i].type) {
SWIG_MakePtr(sv,(void *)1, *swig_variables[i].type,0);
} else {
sv_setiv(sv,(IV) 0);
}
- swig_create_magic(sv, (char *) swig_variables[i].name, swig_variables[i].set, swig_variables[i].get);
+ swig_create_magic(sv, swig_variables[i].name, swig_variables[i].set, swig_variables[i].get);
}
/* Install constant */
for (i = 0; swig_constants[i].type; i++) {
SV *sv;
- sv = get_sv((char*)swig_constants[i].name, TRUE | 0x2 | GV_ADDMULTI);
+ sv = get_sv(swig_constants[i].name, TRUE | 0x2 | GV_ADDMULTI);
switch(swig_constants[i].type) {
case SWIG_INT:
sv_setiv(sv, (IV) swig_constants[i].lvalue);
@@ -16772,7 +19779,7 @@ XS(SWIG_init) {
sv_setnv(sv, (double) swig_constants[i].dvalue);
break;
case SWIG_STRING:
- sv_setpv(sv, (char *) swig_constants[i].pvalue);
+ sv_setpv(sv, (const char *) swig_constants[i].pvalue);
break;
case SWIG_POINTER:
SWIG_MakePtr(sv, swig_constants[i].pvalue, *(swig_constants[i].ptype),0);
@@ -16786,297 +19793,312 @@ XS(SWIG_init) {
SvREADONLY_on(sv);
}
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_node_action_change", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_node_action_change)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_node_action_add", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_node_action_add)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_node_action_delete", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_node_action_delete)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_node_action_replace", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_node_action_replace)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_load_uuid_default", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_load_uuid_default)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_load_uuid_ignore", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_load_uuid_ignore)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_load_uuid_force", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_load_uuid_force)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_authz_none", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_authz_none)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_authz_read", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_authz_read)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_authz_write", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_authz_write)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_authz_recursive", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_authz_recursive)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_notify_warning", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_notify_warning)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_notify_dump_rev_end", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_notify_dump_rev_end)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_notify_verify_rev_end", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_notify_verify_rev_end)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_notify_dump_end", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_notify_dump_end)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_notify_verify_end", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_notify_verify_end)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_notify_pack_shard_start", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_notify_pack_shard_start)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_notify_pack_shard_end", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_notify_pack_shard_end)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_notify_pack_shard_start_revprop", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_notify_pack_shard_start_revprop)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_notify_pack_shard_end_revprop", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_notify_pack_shard_end_revprop)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_notify_load_txn_start", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_notify_load_txn_start)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_notify_load_txn_committed", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_notify_load_txn_committed)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_notify_load_node_start", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_notify_load_node_start)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_notify_load_node_done", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_notify_load_node_done)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_notify_load_copied_node", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_notify_load_copied_node)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_notify_load_normalized_mergeinfo", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_notify_load_normalized_mergeinfo)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_notify_mutex_acquired", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_notify_mutex_acquired)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_notify_recover_start", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_notify_recover_start)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_notify_upgrade_start", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_notify_upgrade_start)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "svn_repos_notify_load_skipped_rev", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_notify_load_skipped_rev)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "svn_repos_notify_verify_rev_structure", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_notify_verify_rev_structure)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_notify_warning_found_old_reference", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_notify_warning_found_old_reference)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_notify_warning_found_old_mergeinfo", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_notify_warning_found_old_mergeinfo)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_notify_warning_invalid_fspath", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_notify_warning_invalid_fspath)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_REPOS_CAPABILITY_MERGEINFO", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("mergeinfo"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_REPOS_DUMPFILE_MAGIC_HEADER", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("SVN-fs-dump-format-version"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_REPOS_DUMPFILE_FORMAT_VERSION", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(3)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "SVN_REPOS_DUMPFILE_FORMAT_VERSION_DELTAS", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(3)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_REPOS_DUMPFILE_UUID", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("UUID"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_REPOS_DUMPFILE_CONTENT_LENGTH", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("Content-length"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_REPOS_DUMPFILE_REVISION_NUMBER", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("Revision-number"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_REPOS_DUMPFILE_NODE_PATH", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("Node-path"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_REPOS_DUMPFILE_NODE_KIND", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("Node-kind"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_REPOS_DUMPFILE_NODE_ACTION", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("Node-action"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_REPOS_DUMPFILE_NODE_COPYFROM_PATH", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("Node-copyfrom-path"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_REPOS_DUMPFILE_NODE_COPYFROM_REV", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("Node-copyfrom-rev"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_REPOS_DUMPFILE_TEXT_COPY_SOURCE_MD5", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("Text-copy-source-md5"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_REPOS_DUMPFILE_TEXT_COPY_SOURCE_SHA1", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("Text-copy-source-sha1"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_REPOS_DUMPFILE_TEXT_COPY_SOURCE_CHECKSUM", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("Text-copy-source-md5"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_REPOS_DUMPFILE_TEXT_CONTENT_MD5", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("Text-content-md5"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_REPOS_DUMPFILE_TEXT_CONTENT_SHA1", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("Text-content-sha1"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_REPOS_DUMPFILE_TEXT_CONTENT_CHECKSUM", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("Text-content-md5"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_REPOS_DUMPFILE_PROP_CONTENT_LENGTH", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("Prop-content-length"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_REPOS_DUMPFILE_TEXT_CONTENT_LENGTH", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("Text-content-length"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_REPOS_DUMPFILE_PROP_DELTA", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("Prop-delta"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_REPOS_DUMPFILE_TEXT_DELTA", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("Text-delta"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_REPOS_DUMPFILE_TEXT_DELTA_BASE_MD5", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("Text-delta-base-md5"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_REPOS_DUMPFILE_TEXT_DELTA_BASE_SHA1", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("Text-delta-base-sha1"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_REPOS_DUMPFILE_TEXT_DELTA_BASE_CHECKSUM", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr("Text-delta-base-md5"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_revision_access_none", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_revision_access_none)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_revision_access_partial", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_revision_access_partial)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_repos_revision_access_full", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_repos_revision_access_full)));
SvREADONLY_on(sv);
diff --git a/subversion/bindings/swig/perl/native/svn_wc.c b/subversion/bindings/swig/perl/native/svn_wc.c
index c20a171..c7e723b 100644
--- a/subversion/bindings/swig/perl/native/svn_wc.c
+++ b/subversion/bindings/swig/perl/native/svn_wc.c
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -830,50 +830,35 @@ extern "C" {
SWIGINTERN const char*
SWIG_Perl_ErrorType(int code) {
- const char* type = 0;
switch(code) {
case SWIG_MemoryError:
- type = "MemoryError";
- break;
+ return "MemoryError";
case SWIG_IOError:
- type = "IOError";
- break;
+ return "IOError";
case SWIG_RuntimeError:
- type = "RuntimeError";
- break;
+ return "RuntimeError";
case SWIG_IndexError:
- type = "IndexError";
- break;
+ return "IndexError";
case SWIG_TypeError:
- type = "TypeError";
- break;
+ return "TypeError";
case SWIG_DivisionByZero:
- type = "ZeroDivisionError";
- break;
+ return "ZeroDivisionError";
case SWIG_OverflowError:
- type = "OverflowError";
- break;
+ return "OverflowError";
case SWIG_SyntaxError:
- type = "SyntaxError";
- break;
+ return "SyntaxError";
case SWIG_ValueError:
- type = "ValueError";
- break;
+ return "ValueError";
case SWIG_SystemError:
- type = "SystemError";
- break;
+ return "SystemError";
case SWIG_AttributeError:
- type = "AttributeError";
- break;
+ return "AttributeError";
default:
- type = "RuntimeError";
+ return "RuntimeError";
}
- return type;
}
-
-
/* -----------------------------------------------------------------------------
* perlrun.swg
*
@@ -916,14 +901,14 @@ SWIG_Perl_ErrorType(int code) {
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Perl_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Perl_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Perl_SetModule(pointer)
/* Error manipulation */
#define SWIG_ErrorType(code) SWIG_Perl_ErrorType(code)
-#define SWIG_Error(code, msg) sv_setpvf(GvSV(PL_errgv),"%s %s\n", SWIG_ErrorType(code), msg)
+#define SWIG_Error(code, msg) sv_setpvf(get_sv("@", GV_ADD), "%s %s", SWIG_ErrorType(code), msg)
#define SWIG_fail goto fail
/* Perl-specific SWIG API */
@@ -1017,8 +1002,6 @@ typedef int (*SwigMagicFunc)(struct interpreter *, SV *, MAGIC *);
#endif /* MULTIPLICITY */
#endif /* PERL_OBJECT */
-/* Workaround for bug in perl 5.6.x croak and earlier */
-#if (PERL_VERSION < 8)
# ifdef PERL_OBJECT
# define SWIG_croak_null() SWIG_Perl_croak_null(pPerl)
static void SWIG_Perl_croak_null(CPerlObj *pPerl)
@@ -1026,17 +1009,16 @@ static void SWIG_Perl_croak_null(CPerlObj *pPerl)
static void SWIG_croak_null()
# endif
{
- SV *err=ERRSV;
+ SV *err = get_sv("@", GV_ADD);
# if (PERL_VERSION < 6)
croak("%_", err);
# else
- if (SvOK(err) && !SvROK(err)) croak("%_", err);
- croak(Nullch);
+ if (sv_isobject(err))
+ croak(0);
+ else
+ croak("%s", SvPV_nolen(err));
# endif
}
-#else
-# define SWIG_croak_null() croak(Nullch)
-#endif
/*
@@ -1088,8 +1070,7 @@ SWIG_TypeProxyCheck(const char *c, swig_type_info *ty) {
if (ty) {
swig_cast_info *iter = ty->cast;
while (iter) {
- if ( (!iter->type->clientdata && (strcmp(iter->type->name, c) == 0)) ||
- (iter->type->clientdata && (strcmp((char*)iter->type->clientdata, c) == 0)) ) {
+ if (strcmp(SWIG_Perl_TypeProxyName(iter->type), c) == 0) {
if (iter == ty->cast)
return iter;
/* Move iter to the top of the linked list */
@@ -1220,7 +1201,7 @@ SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, swig_type_info *t, i
SV *obj=newSV(0);
HV *hash=newHV();
HV *stash;
- sv_setref_pv(obj, (char *) SWIG_Perl_TypeProxyName(t), ptr);
+ sv_setref_pv(obj, SWIG_Perl_TypeProxyName(t), ptr);
stash=SvSTASH(SvRV(obj));
if (flags & SWIG_POINTER_OWN) {
HV *hv;
@@ -1238,7 +1219,7 @@ SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, swig_type_info *t, i
sv_bless(sv, stash);
}
else {
- sv_setref_pv(sv, (char *) SWIG_Perl_TypeProxyName(t), ptr);
+ sv_setref_pv(sv, SWIG_Perl_TypeProxyName(t), ptr);
}
}
@@ -1329,19 +1310,23 @@ typedef struct {
/* Magic variable code */
#ifndef PERL_OBJECT
-#define swig_create_magic(s,a,b,c) _swig_create_magic(s,a,b,c)
- #ifndef MULTIPLICITY
- SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *))
- #else
- SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(struct interpreter*, SV *, MAGIC *), int (*get)(struct interpreter*, SV *,MAGIC *))
- #endif
+# ifdef __cplusplus
+# define swig_create_magic(s,a,b,c) _swig_create_magic(s,const_cast<char*>(a),b,c)
+# else
+# define swig_create_magic(s,a,b,c) _swig_create_magic(s,(char*)(a),b,c)
+# endif
+# ifndef MULTIPLICITY
+SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *))
+# else
+SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(struct interpreter*, SV *, MAGIC *), int (*get)(struct interpreter*, SV *,MAGIC *))
+# endif
#else
# define swig_create_magic(s,a,b,c) _swig_create_magic(pPerl,s,a,b,c)
SWIGRUNTIME void _swig_create_magic(CPerlObj *pPerl, SV *sv, const char *name, int (CPerlObj::*set)(SV *, MAGIC *), int (CPerlObj::*get)(SV *, MAGIC *))
#endif
{
MAGIC *mg;
- sv_magic(sv,sv,'U',(char *) name,strlen(name));
+ sv_magic(sv,sv,'U',name,strlen(name));
mg = mg_find(sv,'U');
mg->mg_virtual = (MGVTBL *) malloc(sizeof(MGVTBL));
mg->mg_virtual->svt_get = (SwigMagicFunc) get;
@@ -1353,7 +1338,7 @@ SWIGRUNTIME void _swig_create_magic(CPerlObj *pPerl, SV *sv, const char *name, i
SWIGRUNTIME swig_module_info *
-SWIG_Perl_GetModule(void) {
+SWIG_Perl_GetModule(void *SWIGUNUSEDPARM(clientdata)) {
static void *type_pointer = (void *)0;
SV *pointer;
@@ -1447,9 +1432,6 @@ SWIG_Perl_SetModule(swig_module_info *module) {
#ifdef eof
#undef eof
#endif
-#ifdef bool
- #undef bool
-#endif
#ifdef close
#undef close
#endif
@@ -1490,6 +1472,14 @@ SWIG_Perl_SetModule(swig_module_info *module) {
#undef stat
#endif
+#ifdef bool
+ /* Leave if macro is from C99 stdbool.h */
+ #ifndef __bool_true_false_are_defined
+ #undef bool
+ #endif
+#endif
+
+
#define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0)
@@ -1585,99 +1575,105 @@ SWIG_Perl_SetModule(swig_module_info *module) {
#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[79]
#define SWIGTYPE_p_svn_auth_provider_t swig_types[80]
#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[81]
-#define SWIGTYPE_p_svn_checksum_t swig_types[82]
-#define SWIGTYPE_p_svn_commit_info_t swig_types[83]
-#define SWIGTYPE_p_svn_config_t swig_types[84]
-#define SWIGTYPE_p_svn_delta_editor_t swig_types[85]
-#define SWIGTYPE_p_svn_depth_t swig_types[86]
-#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[87]
-#define SWIGTYPE_p_svn_diff_datasource_e swig_types[88]
-#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[89]
-#define SWIGTYPE_p_svn_diff_file_options_t swig_types[90]
-#define SWIGTYPE_p_svn_diff_fns2_t swig_types[91]
-#define SWIGTYPE_p_svn_diff_fns_t swig_types[92]
-#define SWIGTYPE_p_svn_diff_hunk_t swig_types[93]
-#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[94]
-#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[95]
-#define SWIGTYPE_p_svn_diff_t swig_types[96]
-#define SWIGTYPE_p_svn_dirent_t swig_types[97]
-#define SWIGTYPE_p_svn_errno_t swig_types[98]
-#define SWIGTYPE_p_svn_error_t swig_types[99]
-#define SWIGTYPE_p_svn_io_dirent2_t swig_types[100]
-#define SWIGTYPE_p_svn_io_dirent_t swig_types[101]
-#define SWIGTYPE_p_svn_io_file_del_t swig_types[102]
-#define SWIGTYPE_p_svn_location_segment_t swig_types[103]
-#define SWIGTYPE_p_svn_lock_t swig_types[104]
-#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[105]
-#define SWIGTYPE_p_svn_log_changed_path_t swig_types[106]
-#define SWIGTYPE_p_svn_log_entry_t swig_types[107]
-#define SWIGTYPE_p_svn_merge_range_t swig_types[108]
-#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[109]
-#define SWIGTYPE_p_svn_node_kind_t swig_types[110]
-#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[111]
-#define SWIGTYPE_p_svn_opt_revision_t swig_types[112]
-#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[113]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[114]
-#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[115]
-#define SWIGTYPE_p_svn_patch_file_t swig_types[116]
-#define SWIGTYPE_p_svn_patch_t swig_types[117]
-#define SWIGTYPE_p_svn_prop_kind swig_types[118]
-#define SWIGTYPE_p_svn_prop_patch_t swig_types[119]
-#define SWIGTYPE_p_svn_ra_callbacks2_t swig_types[120]
-#define SWIGTYPE_p_svn_ra_callbacks_t swig_types[121]
-#define SWIGTYPE_p_svn_ra_plugin_t swig_types[122]
-#define SWIGTYPE_p_svn_ra_reporter2_t swig_types[123]
-#define SWIGTYPE_p_svn_ra_reporter3_t swig_types[124]
-#define SWIGTYPE_p_svn_ra_reporter_t swig_types[125]
-#define SWIGTYPE_p_svn_ra_session_t swig_types[126]
-#define SWIGTYPE_p_svn_stream_mark_t swig_types[127]
-#define SWIGTYPE_p_svn_stream_t swig_types[128]
-#define SWIGTYPE_p_svn_string_t swig_types[129]
-#define SWIGTYPE_p_svn_stringbuf_t swig_types[130]
-#define SWIGTYPE_p_svn_tristate_t swig_types[131]
-#define SWIGTYPE_p_svn_txdelta_op_t swig_types[132]
-#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[133]
-#define SWIGTYPE_p_svn_txdelta_window_t swig_types[134]
-#define SWIGTYPE_p_svn_version_checklist_t swig_types[135]
-#define SWIGTYPE_p_svn_version_t swig_types[136]
-#define SWIGTYPE_p_svn_wc_adm_access_t swig_types[137]
-#define SWIGTYPE_p_svn_wc_committed_queue_t swig_types[138]
-#define SWIGTYPE_p_svn_wc_conflict_action_t swig_types[139]
-#define SWIGTYPE_p_svn_wc_conflict_choice_t swig_types[140]
-#define SWIGTYPE_p_svn_wc_conflict_description2_t swig_types[141]
-#define SWIGTYPE_p_svn_wc_conflict_description_t swig_types[142]
-#define SWIGTYPE_p_svn_wc_conflict_kind_t swig_types[143]
-#define SWIGTYPE_p_svn_wc_conflict_reason_t swig_types[144]
-#define SWIGTYPE_p_svn_wc_conflict_result_t swig_types[145]
-#define SWIGTYPE_p_svn_wc_conflict_version_t swig_types[146]
-#define SWIGTYPE_p_svn_wc_context_t swig_types[147]
-#define SWIGTYPE_p_svn_wc_diff_callbacks2_t swig_types[148]
-#define SWIGTYPE_p_svn_wc_diff_callbacks3_t swig_types[149]
-#define SWIGTYPE_p_svn_wc_diff_callbacks4_t swig_types[150]
-#define SWIGTYPE_p_svn_wc_diff_callbacks_t swig_types[151]
-#define SWIGTYPE_p_svn_wc_entry_callbacks2_t swig_types[152]
-#define SWIGTYPE_p_svn_wc_entry_callbacks_t swig_types[153]
-#define SWIGTYPE_p_svn_wc_entry_t swig_types[154]
-#define SWIGTYPE_p_svn_wc_external_item2_t swig_types[155]
-#define SWIGTYPE_p_svn_wc_external_item_t swig_types[156]
-#define SWIGTYPE_p_svn_wc_info_t swig_types[157]
-#define SWIGTYPE_p_svn_wc_merge_outcome_t swig_types[158]
-#define SWIGTYPE_p_svn_wc_notify_action_t swig_types[159]
-#define SWIGTYPE_p_svn_wc_notify_lock_state_t swig_types[160]
-#define SWIGTYPE_p_svn_wc_notify_state_t swig_types[161]
-#define SWIGTYPE_p_svn_wc_notify_t swig_types[162]
-#define SWIGTYPE_p_svn_wc_operation_t swig_types[163]
-#define SWIGTYPE_p_svn_wc_revision_status_t swig_types[164]
-#define SWIGTYPE_p_svn_wc_schedule_t swig_types[165]
-#define SWIGTYPE_p_svn_wc_status2_t swig_types[166]
-#define SWIGTYPE_p_svn_wc_status3_t swig_types[167]
-#define SWIGTYPE_p_svn_wc_status_t swig_types[168]
-#define SWIGTYPE_p_svn_wc_traversal_info_t swig_types[169]
-#define SWIGTYPE_p_unsigned_char swig_types[170]
-#define SWIGTYPE_p_unsigned_long swig_types[171]
-#define SWIGTYPE_p_void swig_types[172]
-static swig_type_info *swig_types[174];
-static swig_module_info swig_module = {swig_types, 173, 0, 0, 0, 0};
+#define SWIGTYPE_p_svn_checksum_ctx_t swig_types[82]
+#define SWIGTYPE_p_svn_checksum_kind_t swig_types[83]
+#define SWIGTYPE_p_svn_checksum_t swig_types[84]
+#define SWIGTYPE_p_svn_commit_info_t swig_types[85]
+#define SWIGTYPE_p_svn_config_t swig_types[86]
+#define SWIGTYPE_p_svn_delta_editor_t swig_types[87]
+#define SWIGTYPE_p_svn_depth_t swig_types[88]
+#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[89]
+#define SWIGTYPE_p_svn_diff_datasource_e swig_types[90]
+#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[91]
+#define SWIGTYPE_p_svn_diff_file_options_t swig_types[92]
+#define SWIGTYPE_p_svn_diff_fns2_t swig_types[93]
+#define SWIGTYPE_p_svn_diff_fns_t swig_types[94]
+#define SWIGTYPE_p_svn_diff_hunk_t swig_types[95]
+#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[96]
+#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[97]
+#define SWIGTYPE_p_svn_diff_t swig_types[98]
+#define SWIGTYPE_p_svn_dirent_t swig_types[99]
+#define SWIGTYPE_p_svn_errno_t swig_types[100]
+#define SWIGTYPE_p_svn_error_t swig_types[101]
+#define SWIGTYPE_p_svn_io_dirent2_t swig_types[102]
+#define SWIGTYPE_p_svn_io_dirent_t swig_types[103]
+#define SWIGTYPE_p_svn_io_file_del_t swig_types[104]
+#define SWIGTYPE_p_svn_location_segment_t swig_types[105]
+#define SWIGTYPE_p_svn_lock_t swig_types[106]
+#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[107]
+#define SWIGTYPE_p_svn_log_changed_path_t swig_types[108]
+#define SWIGTYPE_p_svn_log_entry_t swig_types[109]
+#define SWIGTYPE_p_svn_merge_range_t swig_types[110]
+#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[111]
+#define SWIGTYPE_p_svn_node_kind_t swig_types[112]
+#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[113]
+#define SWIGTYPE_p_svn_opt_revision_t swig_types[114]
+#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[115]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[116]
+#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[117]
+#define SWIGTYPE_p_svn_patch_file_t swig_types[118]
+#define SWIGTYPE_p_svn_patch_t swig_types[119]
+#define SWIGTYPE_p_svn_prop_inherited_item_t swig_types[120]
+#define SWIGTYPE_p_svn_prop_kind swig_types[121]
+#define SWIGTYPE_p_svn_prop_patch_t swig_types[122]
+#define SWIGTYPE_p_svn_ra_callbacks2_t swig_types[123]
+#define SWIGTYPE_p_svn_ra_callbacks_t swig_types[124]
+#define SWIGTYPE_p_svn_ra_plugin_t swig_types[125]
+#define SWIGTYPE_p_svn_ra_reporter2_t swig_types[126]
+#define SWIGTYPE_p_svn_ra_reporter3_t swig_types[127]
+#define SWIGTYPE_p_svn_ra_reporter_t swig_types[128]
+#define SWIGTYPE_p_svn_ra_session_t swig_types[129]
+#define SWIGTYPE_p_svn_stream_mark_t swig_types[130]
+#define SWIGTYPE_p_svn_stream_t swig_types[131]
+#define SWIGTYPE_p_svn_string_t swig_types[132]
+#define SWIGTYPE_p_svn_stringbuf_t swig_types[133]
+#define SWIGTYPE_p_svn_tristate_t swig_types[134]
+#define SWIGTYPE_p_svn_txdelta_op_t swig_types[135]
+#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[136]
+#define SWIGTYPE_p_svn_txdelta_window_t swig_types[137]
+#define SWIGTYPE_p_svn_version_checklist_t swig_types[138]
+#define SWIGTYPE_p_svn_version_ext_linked_lib_t swig_types[139]
+#define SWIGTYPE_p_svn_version_ext_loaded_lib_t swig_types[140]
+#define SWIGTYPE_p_svn_version_extended_t swig_types[141]
+#define SWIGTYPE_p_svn_version_t swig_types[142]
+#define SWIGTYPE_p_svn_wc_adm_access_t swig_types[143]
+#define SWIGTYPE_p_svn_wc_committed_queue_t swig_types[144]
+#define SWIGTYPE_p_svn_wc_conflict_action_t swig_types[145]
+#define SWIGTYPE_p_svn_wc_conflict_choice_t swig_types[146]
+#define SWIGTYPE_p_svn_wc_conflict_description2_t swig_types[147]
+#define SWIGTYPE_p_svn_wc_conflict_description_t swig_types[148]
+#define SWIGTYPE_p_svn_wc_conflict_kind_t swig_types[149]
+#define SWIGTYPE_p_svn_wc_conflict_reason_t swig_types[150]
+#define SWIGTYPE_p_svn_wc_conflict_result_t swig_types[151]
+#define SWIGTYPE_p_svn_wc_conflict_version_t swig_types[152]
+#define SWIGTYPE_p_svn_wc_context_t swig_types[153]
+#define SWIGTYPE_p_svn_wc_diff_callbacks2_t swig_types[154]
+#define SWIGTYPE_p_svn_wc_diff_callbacks3_t swig_types[155]
+#define SWIGTYPE_p_svn_wc_diff_callbacks4_t swig_types[156]
+#define SWIGTYPE_p_svn_wc_diff_callbacks_t swig_types[157]
+#define SWIGTYPE_p_svn_wc_entry_callbacks2_t swig_types[158]
+#define SWIGTYPE_p_svn_wc_entry_callbacks_t swig_types[159]
+#define SWIGTYPE_p_svn_wc_entry_t swig_types[160]
+#define SWIGTYPE_p_svn_wc_external_item2_t swig_types[161]
+#define SWIGTYPE_p_svn_wc_external_item_t swig_types[162]
+#define SWIGTYPE_p_svn_wc_info_t swig_types[163]
+#define SWIGTYPE_p_svn_wc_merge_outcome_t swig_types[164]
+#define SWIGTYPE_p_svn_wc_notify_action_t swig_types[165]
+#define SWIGTYPE_p_svn_wc_notify_lock_state_t swig_types[166]
+#define SWIGTYPE_p_svn_wc_notify_state_t swig_types[167]
+#define SWIGTYPE_p_svn_wc_notify_t swig_types[168]
+#define SWIGTYPE_p_svn_wc_operation_t swig_types[169]
+#define SWIGTYPE_p_svn_wc_revision_status_t swig_types[170]
+#define SWIGTYPE_p_svn_wc_schedule_t swig_types[171]
+#define SWIGTYPE_p_svn_wc_status2_t swig_types[172]
+#define SWIGTYPE_p_svn_wc_status3_t swig_types[173]
+#define SWIGTYPE_p_svn_wc_status_t swig_types[174]
+#define SWIGTYPE_p_svn_wc_traversal_info_t swig_types[175]
+#define SWIGTYPE_p_unsigned_char swig_types[176]
+#define SWIGTYPE_p_unsigned_long swig_types[177]
+#define SWIGTYPE_p_void swig_types[178]
+static swig_type_info *swig_types[180];
+static swig_module_info swig_module = {swig_types, 179, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@@ -1688,7 +1684,7 @@ static swig_module_info swig_module = {swig_types, 173, 0, 0, 0, 0};
#define SWIG_name "SVN::_Wc::boot_SVN___Wc"
#define SWIG_prefix "SVN::_Wc::"
-#define SWIGVERSION 0x020004
+#define SWIGVERSION 0x020009
#define SWIG_VERSION SWIGVERSION
@@ -1726,10 +1722,13 @@ SWIGEXPORT void SWIG_init (CV *cv, CPerlObj *);
SWIGINTERNINLINE SV *
SWIG_From_long SWIG_PERL_DECL_ARGS_1(long value)
-{
- SV *obj = sv_newmortal();
- sv_setiv(obj, (IV) value);
- return obj;
+{
+ SV *sv;
+ if (value >= IV_MIN && value <= IV_MAX)
+ sv = newSViv(value);
+ else
+ sv = newSVpvf("%ld", value);
+ return sv_2mortal(sv);
}
@@ -1876,9 +1875,20 @@ SWIG_CanCastAsInteger(double *d, double min, double max) {
SWIGINTERN int
SWIG_AsVal_long SWIG_PERL_DECL_ARGS_2(SV *obj, long* val)
{
- if (SvIOK(obj)) {
- if (val) *val = SvIV(obj);
- return SWIG_OK;
+ if (SvUOK(obj)) {
+ UV v = SvUV(obj);
+ if (v <= LONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
+ } else if (SvIOK(obj)) {
+ IV v = SvIV(obj);
+ if (v >= LONG_MIN && v <= LONG_MAX) {
+ if(val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
} else {
int dispatch = 0;
const char *nptr = SvPV_nolen(obj);
@@ -1950,16 +1960,19 @@ SWIGINTERN int
SWIG_AsVal_unsigned_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, unsigned long *val)
{
if (SvUOK(obj)) {
- if (val) *val = SvUV(obj);
- return SWIG_OK;
- } else if (SvIOK(obj)) {
- long v = SvIV(obj);
- if (v >= 0) {
+ UV v = SvUV(obj);
+ if (v <= ULONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
+ } else if (SvIOK(obj)) {
+ IV v = SvIV(obj);
+ if (v >= 0 && v <= ULONG_MAX) {
if (val) *val = v;
return SWIG_OK;
- } else {
- return SWIG_OverflowError;
}
+ return SWIG_OverflowError;
} else {
int dispatch = 0;
const char *nptr = SvPV_nolen(obj);
@@ -1993,10 +2006,13 @@ SWIG_AsVal_unsigned_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, unsigned long *val)
SWIGINTERNINLINE SV *
SWIG_From_unsigned_SS_long SWIG_PERL_DECL_ARGS_1(unsigned long value)
-{
- SV *obj = sv_newmortal();
- sv_setuv(obj, (UV) value);
- return obj;
+{
+ SV *sv;
+ if (value <= UV_MAX)
+ sv = newSVuv(value);
+ else
+ sv = newSVpvf("%lu", value);
+ return sv_2mortal(sv);
}
@@ -2015,9 +2031,20 @@ SWIG_From_unsigned_SS_long SWIG_PERL_DECL_ARGS_1(unsigned long value)
SWIGINTERN int
SWIG_AsVal_long_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, long long *val)
{
- if (SvIOK(obj)) {
- if (val) *val = SvIV(obj);
- return SWIG_OK;
+ if (SvUOK(obj)) {
+ UV v = SvUV(obj);
+ if (v < LLONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
+ } else if (SvIOK(obj)) {
+ IV v = SvIV(obj);
+ if (v >= LLONG_MIN && v <= LLONG_MAX) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ return SWIG_OverflowError;
} else {
int dispatch = 0;
const char *nptr = SvPV_nolen(obj);
@@ -4337,7 +4364,7 @@ XS(_wrap_svn_wc_traversed_depths) {
XS(_wrap_svn_wc_external_item2_t_target_dir_set) {
{
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4352,9 +4379,9 @@ XS(_wrap_svn_wc_external_item2_t_target_dir_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_external_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item2_t_target_dir_set" "', argument " "1"" of type '" "svn_wc_external_item2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item2_t_target_dir_set" "', argument " "1"" of type '" "struct svn_wc_external_item2_t *""'");
}
- arg1 = (svn_wc_external_item2_t *)(argp1);
+ arg1 = (struct svn_wc_external_item2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_external_item2_t_target_dir_set" "', argument " "2"" of type '" "char const *""'");
@@ -4382,7 +4409,7 @@ XS(_wrap_svn_wc_external_item2_t_target_dir_set) {
XS(_wrap_svn_wc_external_item2_t_target_dir_get) {
{
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4394,9 +4421,9 @@ XS(_wrap_svn_wc_external_item2_t_target_dir_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_external_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item2_t_target_dir_get" "', argument " "1"" of type '" "svn_wc_external_item2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item2_t_target_dir_get" "', argument " "1"" of type '" "struct svn_wc_external_item2_t *""'");
}
- arg1 = (svn_wc_external_item2_t *)(argp1);
+ arg1 = (struct svn_wc_external_item2_t *)(argp1);
result = (char *) ((arg1)->target_dir);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -4410,7 +4437,7 @@ XS(_wrap_svn_wc_external_item2_t_target_dir_get) {
XS(_wrap_svn_wc_external_item2_t_url_set) {
{
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4425,9 +4452,9 @@ XS(_wrap_svn_wc_external_item2_t_url_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_external_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item2_t_url_set" "', argument " "1"" of type '" "svn_wc_external_item2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item2_t_url_set" "', argument " "1"" of type '" "struct svn_wc_external_item2_t *""'");
}
- arg1 = (svn_wc_external_item2_t *)(argp1);
+ arg1 = (struct svn_wc_external_item2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_external_item2_t_url_set" "', argument " "2"" of type '" "char const *""'");
@@ -4455,7 +4482,7 @@ XS(_wrap_svn_wc_external_item2_t_url_set) {
XS(_wrap_svn_wc_external_item2_t_url_get) {
{
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4467,9 +4494,9 @@ XS(_wrap_svn_wc_external_item2_t_url_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_external_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item2_t_url_get" "', argument " "1"" of type '" "svn_wc_external_item2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item2_t_url_get" "', argument " "1"" of type '" "struct svn_wc_external_item2_t *""'");
}
- arg1 = (svn_wc_external_item2_t *)(argp1);
+ arg1 = (struct svn_wc_external_item2_t *)(argp1);
result = (char *) ((arg1)->url);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -4483,7 +4510,7 @@ XS(_wrap_svn_wc_external_item2_t_url_get) {
XS(_wrap_svn_wc_external_item2_t_revision_set) {
{
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4496,57 +4523,11 @@ XS(_wrap_svn_wc_external_item2_t_revision_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_external_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item2_t_revision_set" "', argument " "1"" of type '" "svn_wc_external_item2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item2_t_revision_set" "', argument " "1"" of type '" "struct svn_wc_external_item2_t *""'");
}
- arg1 = (svn_wc_external_item2_t *)(argp1);
+ arg1 = (struct svn_wc_external_item2_t *)(argp1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
}
if (arg1) (arg1)->revision = *arg2;
ST(argvi) = sv_newmortal();
@@ -4563,7 +4544,7 @@ XS(_wrap_svn_wc_external_item2_t_revision_set) {
XS(_wrap_svn_wc_external_item2_t_revision_get) {
{
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4575,9 +4556,9 @@ XS(_wrap_svn_wc_external_item2_t_revision_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_external_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item2_t_revision_get" "', argument " "1"" of type '" "svn_wc_external_item2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item2_t_revision_get" "', argument " "1"" of type '" "struct svn_wc_external_item2_t *""'");
}
- arg1 = (svn_wc_external_item2_t *)(argp1);
+ arg1 = (struct svn_wc_external_item2_t *)(argp1);
result = (svn_opt_revision_t *)& ((arg1)->revision);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_opt_revision_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -4591,7 +4572,7 @@ XS(_wrap_svn_wc_external_item2_t_revision_get) {
XS(_wrap_svn_wc_external_item2_t_peg_revision_set) {
{
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4604,57 +4585,11 @@ XS(_wrap_svn_wc_external_item2_t_peg_revision_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_external_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item2_t_peg_revision_set" "', argument " "1"" of type '" "svn_wc_external_item2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item2_t_peg_revision_set" "', argument " "1"" of type '" "struct svn_wc_external_item2_t *""'");
}
- arg1 = (svn_wc_external_item2_t *)(argp1);
+ arg1 = (struct svn_wc_external_item2_t *)(argp1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
}
if (arg1) (arg1)->peg_revision = *arg2;
ST(argvi) = sv_newmortal();
@@ -4671,7 +4606,7 @@ XS(_wrap_svn_wc_external_item2_t_peg_revision_set) {
XS(_wrap_svn_wc_external_item2_t_peg_revision_get) {
{
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4683,9 +4618,9 @@ XS(_wrap_svn_wc_external_item2_t_peg_revision_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_external_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item2_t_peg_revision_get" "', argument " "1"" of type '" "svn_wc_external_item2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item2_t_peg_revision_get" "', argument " "1"" of type '" "struct svn_wc_external_item2_t *""'");
}
- arg1 = (svn_wc_external_item2_t *)(argp1);
+ arg1 = (struct svn_wc_external_item2_t *)(argp1);
result = (svn_opt_revision_t *)& ((arg1)->peg_revision);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_opt_revision_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -4700,14 +4635,14 @@ XS(_wrap_svn_wc_external_item2_t_peg_revision_get) {
XS(_wrap_new_svn_wc_external_item2_t) {
{
int argvi = 0;
- svn_wc_external_item2_t *result = 0 ;
+ struct svn_wc_external_item2_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_wc_external_item2_t();");
}
{
- result = (svn_wc_external_item2_t *)calloc(1, sizeof(svn_wc_external_item2_t));
+ result = (struct svn_wc_external_item2_t *)calloc(1, sizeof(struct svn_wc_external_item2_t));
@@ -4722,7 +4657,7 @@ XS(_wrap_new_svn_wc_external_item2_t) {
XS(_wrap_delete_svn_wc_external_item2_t) {
{
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4733,9 +4668,9 @@ XS(_wrap_delete_svn_wc_external_item2_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_external_item2_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_external_item2_t" "', argument " "1"" of type '" "svn_wc_external_item2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_external_item2_t" "', argument " "1"" of type '" "struct svn_wc_external_item2_t *""'");
}
- arg1 = (svn_wc_external_item2_t *)(argp1);
+ arg1 = (struct svn_wc_external_item2_t *)(argp1);
{
free((char *) arg1);
@@ -4752,6 +4687,62 @@ XS(_wrap_delete_svn_wc_external_item2_t) {
}
+XS(_wrap_svn_wc_external_item2_create) {
+ {
+ svn_wc_external_item2_t **arg1 = (svn_wc_external_item2_t **) 0 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_wc_external_item2_t *temp1 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg2 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ if ((items < 0) || (items > 1)) {
+ SWIG_croak("Usage: svn_wc_external_item2_create(pool);");
+ }
+ if (items > 0) {
+
+ }
+ {
+ result = (svn_error_t *)svn_wc_external_item2_create(arg1,arg2);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_wc_external_item2_t, 0); argvi++ ;
+ }
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_wc_external_item_create) {
{
svn_wc_external_item2_t **arg1 = (svn_wc_external_item2_t **) 0 ;
@@ -4853,7 +4844,7 @@ XS(_wrap_svn_wc_external_item2_dup) {
XS(_wrap_svn_wc_external_item_t_target_dir_set) {
{
- svn_wc_external_item_t *arg1 = (svn_wc_external_item_t *) 0 ;
+ struct svn_wc_external_item_t *arg1 = (struct svn_wc_external_item_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4868,9 +4859,9 @@ XS(_wrap_svn_wc_external_item_t_target_dir_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_external_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item_t_target_dir_set" "', argument " "1"" of type '" "svn_wc_external_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item_t_target_dir_set" "', argument " "1"" of type '" "struct svn_wc_external_item_t *""'");
}
- arg1 = (svn_wc_external_item_t *)(argp1);
+ arg1 = (struct svn_wc_external_item_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_external_item_t_target_dir_set" "', argument " "2"" of type '" "char const *""'");
@@ -4898,7 +4889,7 @@ XS(_wrap_svn_wc_external_item_t_target_dir_set) {
XS(_wrap_svn_wc_external_item_t_target_dir_get) {
{
- svn_wc_external_item_t *arg1 = (svn_wc_external_item_t *) 0 ;
+ struct svn_wc_external_item_t *arg1 = (struct svn_wc_external_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4910,9 +4901,9 @@ XS(_wrap_svn_wc_external_item_t_target_dir_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_external_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item_t_target_dir_get" "', argument " "1"" of type '" "svn_wc_external_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item_t_target_dir_get" "', argument " "1"" of type '" "struct svn_wc_external_item_t *""'");
}
- arg1 = (svn_wc_external_item_t *)(argp1);
+ arg1 = (struct svn_wc_external_item_t *)(argp1);
result = (char *) ((arg1)->target_dir);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -4926,7 +4917,7 @@ XS(_wrap_svn_wc_external_item_t_target_dir_get) {
XS(_wrap_svn_wc_external_item_t_url_set) {
{
- svn_wc_external_item_t *arg1 = (svn_wc_external_item_t *) 0 ;
+ struct svn_wc_external_item_t *arg1 = (struct svn_wc_external_item_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4941,9 +4932,9 @@ XS(_wrap_svn_wc_external_item_t_url_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_external_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item_t_url_set" "', argument " "1"" of type '" "svn_wc_external_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item_t_url_set" "', argument " "1"" of type '" "struct svn_wc_external_item_t *""'");
}
- arg1 = (svn_wc_external_item_t *)(argp1);
+ arg1 = (struct svn_wc_external_item_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_external_item_t_url_set" "', argument " "2"" of type '" "char const *""'");
@@ -4971,7 +4962,7 @@ XS(_wrap_svn_wc_external_item_t_url_set) {
XS(_wrap_svn_wc_external_item_t_url_get) {
{
- svn_wc_external_item_t *arg1 = (svn_wc_external_item_t *) 0 ;
+ struct svn_wc_external_item_t *arg1 = (struct svn_wc_external_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -4983,9 +4974,9 @@ XS(_wrap_svn_wc_external_item_t_url_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_external_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item_t_url_get" "', argument " "1"" of type '" "svn_wc_external_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item_t_url_get" "', argument " "1"" of type '" "struct svn_wc_external_item_t *""'");
}
- arg1 = (svn_wc_external_item_t *)(argp1);
+ arg1 = (struct svn_wc_external_item_t *)(argp1);
result = (char *) ((arg1)->url);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -4999,7 +4990,7 @@ XS(_wrap_svn_wc_external_item_t_url_get) {
XS(_wrap_svn_wc_external_item_t_revision_set) {
{
- svn_wc_external_item_t *arg1 = (svn_wc_external_item_t *) 0 ;
+ struct svn_wc_external_item_t *arg1 = (struct svn_wc_external_item_t *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5012,57 +5003,11 @@ XS(_wrap_svn_wc_external_item_t_revision_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_external_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item_t_revision_set" "', argument " "1"" of type '" "svn_wc_external_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item_t_revision_set" "', argument " "1"" of type '" "struct svn_wc_external_item_t *""'");
}
- arg1 = (svn_wc_external_item_t *)(argp1);
+ arg1 = (struct svn_wc_external_item_t *)(argp1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
}
if (arg1) (arg1)->revision = *arg2;
ST(argvi) = sv_newmortal();
@@ -5079,7 +5024,7 @@ XS(_wrap_svn_wc_external_item_t_revision_set) {
XS(_wrap_svn_wc_external_item_t_revision_get) {
{
- svn_wc_external_item_t *arg1 = (svn_wc_external_item_t *) 0 ;
+ struct svn_wc_external_item_t *arg1 = (struct svn_wc_external_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5091,9 +5036,9 @@ XS(_wrap_svn_wc_external_item_t_revision_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_external_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item_t_revision_get" "', argument " "1"" of type '" "svn_wc_external_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_external_item_t_revision_get" "', argument " "1"" of type '" "struct svn_wc_external_item_t *""'");
}
- arg1 = (svn_wc_external_item_t *)(argp1);
+ arg1 = (struct svn_wc_external_item_t *)(argp1);
result = (svn_opt_revision_t *)& ((arg1)->revision);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_opt_revision_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -5108,14 +5053,14 @@ XS(_wrap_svn_wc_external_item_t_revision_get) {
XS(_wrap_new_svn_wc_external_item_t) {
{
int argvi = 0;
- svn_wc_external_item_t *result = 0 ;
+ struct svn_wc_external_item_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_wc_external_item_t();");
}
{
- result = (svn_wc_external_item_t *)calloc(1, sizeof(svn_wc_external_item_t));
+ result = (struct svn_wc_external_item_t *)calloc(1, sizeof(struct svn_wc_external_item_t));
@@ -5130,7 +5075,7 @@ XS(_wrap_new_svn_wc_external_item_t) {
XS(_wrap_delete_svn_wc_external_item_t) {
{
- svn_wc_external_item_t *arg1 = (svn_wc_external_item_t *) 0 ;
+ struct svn_wc_external_item_t *arg1 = (struct svn_wc_external_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5141,9 +5086,9 @@ XS(_wrap_delete_svn_wc_external_item_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_external_item_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_external_item_t" "', argument " "1"" of type '" "svn_wc_external_item_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_external_item_t" "', argument " "1"" of type '" "struct svn_wc_external_item_t *""'");
}
- arg1 = (svn_wc_external_item_t *)(argp1);
+ arg1 = (struct svn_wc_external_item_t *)(argp1);
{
free((char *) arg1);
@@ -5272,13 +5217,8 @@ XS(_wrap_svn_wc_parse_externals_description3) {
}
}
{
- /* FIXME: Missing argout typemap: svn_wc_parse_externals_description3 arg 1 (apr_array_header_t **) */
-
-
-
-
- SWIG_exception(SWIG_ValueError, "svn_wc_parse_externals_description3 is not implemented yet");
-
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = svn_swig_pl_convert_array(*arg1, SWIGTYPE_p_svn_wc_external_item2_t); argvi++
+ ;
}
if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
@@ -5358,13 +5298,8 @@ XS(_wrap_svn_wc_parse_externals_description2) {
}
}
{
- /* FIXME: Missing argout typemap: svn_wc_parse_externals_description2 arg 1 (apr_array_header_t **) */
-
-
-
-
- SWIG_exception(SWIG_ValueError, "svn_wc_parse_externals_description2 is not implemented yet");
-
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = svn_swig_pl_convert_array(*arg1, SWIGTYPE_p_svn_wc_external_item2_t); argvi++
+ ;
}
if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
@@ -5461,7 +5396,7 @@ XS(_wrap_svn_wc_parse_externals_description) {
XS(_wrap_svn_wc_notify_t_path_set) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5476,9 +5411,9 @@ XS(_wrap_svn_wc_notify_t_path_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_path_set" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_path_set" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_notify_t_path_set" "', argument " "2"" of type '" "char const *""'");
@@ -5506,7 +5441,7 @@ XS(_wrap_svn_wc_notify_t_path_set) {
XS(_wrap_svn_wc_notify_t_path_get) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5518,9 +5453,9 @@ XS(_wrap_svn_wc_notify_t_path_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_path_get" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_path_get" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (char *) ((arg1)->path);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -5534,7 +5469,7 @@ XS(_wrap_svn_wc_notify_t_path_get) {
XS(_wrap_svn_wc_notify_t_action_set) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_wc_notify_action_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5548,9 +5483,9 @@ XS(_wrap_svn_wc_notify_t_action_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_action_set" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_action_set" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_notify_t_action_set" "', argument " "2"" of type '" "svn_wc_notify_action_t""'");
@@ -5571,7 +5506,7 @@ XS(_wrap_svn_wc_notify_t_action_set) {
XS(_wrap_svn_wc_notify_t_action_get) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5583,9 +5518,9 @@ XS(_wrap_svn_wc_notify_t_action_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_action_get" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_action_get" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_wc_notify_action_t) ((arg1)->action);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -5599,7 +5534,7 @@ XS(_wrap_svn_wc_notify_t_action_get) {
XS(_wrap_svn_wc_notify_t_kind_set) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5613,9 +5548,9 @@ XS(_wrap_svn_wc_notify_t_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_kind_set" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_kind_set" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_notify_t_kind_set" "', argument " "2"" of type '" "svn_node_kind_t""'");
@@ -5636,7 +5571,7 @@ XS(_wrap_svn_wc_notify_t_kind_set) {
XS(_wrap_svn_wc_notify_t_kind_get) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5648,9 +5583,9 @@ XS(_wrap_svn_wc_notify_t_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_kind_get" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_kind_get" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -5664,7 +5599,7 @@ XS(_wrap_svn_wc_notify_t_kind_get) {
XS(_wrap_svn_wc_notify_t_mime_type_set) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5679,9 +5614,9 @@ XS(_wrap_svn_wc_notify_t_mime_type_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_mime_type_set" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_mime_type_set" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_notify_t_mime_type_set" "', argument " "2"" of type '" "char const *""'");
@@ -5709,7 +5644,7 @@ XS(_wrap_svn_wc_notify_t_mime_type_set) {
XS(_wrap_svn_wc_notify_t_mime_type_get) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5721,9 +5656,9 @@ XS(_wrap_svn_wc_notify_t_mime_type_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_mime_type_get" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_mime_type_get" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (char *) ((arg1)->mime_type);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -5737,7 +5672,7 @@ XS(_wrap_svn_wc_notify_t_mime_type_get) {
XS(_wrap_svn_wc_notify_t_lock_set) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_lock_t *arg2 = (svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5751,9 +5686,9 @@ XS(_wrap_svn_wc_notify_t_lock_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_lock_set" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_lock_set" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_lock_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_notify_t_lock_set" "', argument " "2"" of type '" "svn_lock_t const *""'");
@@ -5774,7 +5709,7 @@ XS(_wrap_svn_wc_notify_t_lock_set) {
XS(_wrap_svn_wc_notify_t_lock_get) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5786,9 +5721,9 @@ XS(_wrap_svn_wc_notify_t_lock_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_lock_get" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_lock_get" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_lock_t *) ((arg1)->lock);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_lock_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -5802,7 +5737,7 @@ XS(_wrap_svn_wc_notify_t_lock_get) {
XS(_wrap_svn_wc_notify_t_err_set) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_error_t *arg2 = (svn_error_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5816,9 +5751,9 @@ XS(_wrap_svn_wc_notify_t_err_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_err_set" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_err_set" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_error_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_notify_t_err_set" "', argument " "2"" of type '" "svn_error_t *""'");
@@ -5839,7 +5774,7 @@ XS(_wrap_svn_wc_notify_t_err_set) {
XS(_wrap_svn_wc_notify_t_err_get) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5851,9 +5786,9 @@ XS(_wrap_svn_wc_notify_t_err_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_err_get" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_err_get" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_error_t *) ((arg1)->err);
{
if (result) {
@@ -5882,7 +5817,7 @@ XS(_wrap_svn_wc_notify_t_err_get) {
XS(_wrap_svn_wc_notify_t_content_state_set) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_wc_notify_state_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5896,9 +5831,9 @@ XS(_wrap_svn_wc_notify_t_content_state_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_content_state_set" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_content_state_set" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_notify_t_content_state_set" "', argument " "2"" of type '" "svn_wc_notify_state_t""'");
@@ -5919,7 +5854,7 @@ XS(_wrap_svn_wc_notify_t_content_state_set) {
XS(_wrap_svn_wc_notify_t_content_state_get) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5931,9 +5866,9 @@ XS(_wrap_svn_wc_notify_t_content_state_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_content_state_get" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_content_state_get" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_wc_notify_state_t) ((arg1)->content_state);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -5947,7 +5882,7 @@ XS(_wrap_svn_wc_notify_t_content_state_get) {
XS(_wrap_svn_wc_notify_t_prop_state_set) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_wc_notify_state_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5961,9 +5896,9 @@ XS(_wrap_svn_wc_notify_t_prop_state_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_prop_state_set" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_prop_state_set" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_notify_t_prop_state_set" "', argument " "2"" of type '" "svn_wc_notify_state_t""'");
@@ -5984,7 +5919,7 @@ XS(_wrap_svn_wc_notify_t_prop_state_set) {
XS(_wrap_svn_wc_notify_t_prop_state_get) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -5996,9 +5931,9 @@ XS(_wrap_svn_wc_notify_t_prop_state_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_prop_state_get" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_prop_state_get" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_wc_notify_state_t) ((arg1)->prop_state);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -6012,7 +5947,7 @@ XS(_wrap_svn_wc_notify_t_prop_state_get) {
XS(_wrap_svn_wc_notify_t_lock_state_set) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_wc_notify_lock_state_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6026,9 +5961,9 @@ XS(_wrap_svn_wc_notify_t_lock_state_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_lock_state_set" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_lock_state_set" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_notify_t_lock_state_set" "', argument " "2"" of type '" "svn_wc_notify_lock_state_t""'");
@@ -6049,7 +5984,7 @@ XS(_wrap_svn_wc_notify_t_lock_state_set) {
XS(_wrap_svn_wc_notify_t_lock_state_get) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6061,9 +5996,9 @@ XS(_wrap_svn_wc_notify_t_lock_state_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_lock_state_get" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_lock_state_get" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_wc_notify_lock_state_t) ((arg1)->lock_state);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -6077,7 +6012,7 @@ XS(_wrap_svn_wc_notify_t_lock_state_get) {
XS(_wrap_svn_wc_notify_t_revision_set) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6091,9 +6026,9 @@ XS(_wrap_svn_wc_notify_t_revision_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_revision_set" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_revision_set" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_notify_t_revision_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -6114,7 +6049,7 @@ XS(_wrap_svn_wc_notify_t_revision_set) {
XS(_wrap_svn_wc_notify_t_revision_get) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6126,9 +6061,9 @@ XS(_wrap_svn_wc_notify_t_revision_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_revision_get" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_revision_get" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_revnum_t) ((arg1)->revision);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -6142,7 +6077,7 @@ XS(_wrap_svn_wc_notify_t_revision_get) {
XS(_wrap_svn_wc_notify_t_changelist_name_set) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6157,9 +6092,9 @@ XS(_wrap_svn_wc_notify_t_changelist_name_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_changelist_name_set" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_changelist_name_set" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_notify_t_changelist_name_set" "', argument " "2"" of type '" "char const *""'");
@@ -6187,7 +6122,7 @@ XS(_wrap_svn_wc_notify_t_changelist_name_set) {
XS(_wrap_svn_wc_notify_t_changelist_name_get) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6199,9 +6134,9 @@ XS(_wrap_svn_wc_notify_t_changelist_name_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_changelist_name_get" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_changelist_name_get" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (char *) ((arg1)->changelist_name);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -6215,7 +6150,7 @@ XS(_wrap_svn_wc_notify_t_changelist_name_get) {
XS(_wrap_svn_wc_notify_t_merge_range_set) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_merge_range_t *arg2 = (svn_merge_range_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6229,9 +6164,9 @@ XS(_wrap_svn_wc_notify_t_merge_range_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_merge_range_set" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_merge_range_set" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_merge_range_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_notify_t_merge_range_set" "', argument " "2"" of type '" "svn_merge_range_t *""'");
@@ -6252,7 +6187,7 @@ XS(_wrap_svn_wc_notify_t_merge_range_set) {
XS(_wrap_svn_wc_notify_t_merge_range_get) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6264,9 +6199,9 @@ XS(_wrap_svn_wc_notify_t_merge_range_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_merge_range_get" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_merge_range_get" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_merge_range_t *) ((arg1)->merge_range);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_merge_range_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -6280,7 +6215,7 @@ XS(_wrap_svn_wc_notify_t_merge_range_get) {
XS(_wrap_svn_wc_notify_t_url_set) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6295,9 +6230,9 @@ XS(_wrap_svn_wc_notify_t_url_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_url_set" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_url_set" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_notify_t_url_set" "', argument " "2"" of type '" "char const *""'");
@@ -6325,7 +6260,7 @@ XS(_wrap_svn_wc_notify_t_url_set) {
XS(_wrap_svn_wc_notify_t_url_get) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6337,9 +6272,9 @@ XS(_wrap_svn_wc_notify_t_url_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_url_get" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_url_get" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (char *) ((arg1)->url);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -6353,7 +6288,7 @@ XS(_wrap_svn_wc_notify_t_url_get) {
XS(_wrap_svn_wc_notify_t_path_prefix_set) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6368,9 +6303,9 @@ XS(_wrap_svn_wc_notify_t_path_prefix_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_path_prefix_set" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_path_prefix_set" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_notify_t_path_prefix_set" "', argument " "2"" of type '" "char const *""'");
@@ -6398,7 +6333,7 @@ XS(_wrap_svn_wc_notify_t_path_prefix_set) {
XS(_wrap_svn_wc_notify_t_path_prefix_get) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6410,9 +6345,9 @@ XS(_wrap_svn_wc_notify_t_path_prefix_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_path_prefix_get" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_path_prefix_get" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (char *) ((arg1)->path_prefix);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -6426,7 +6361,7 @@ XS(_wrap_svn_wc_notify_t_path_prefix_get) {
XS(_wrap_svn_wc_notify_t_prop_name_set) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6441,9 +6376,9 @@ XS(_wrap_svn_wc_notify_t_prop_name_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_prop_name_set" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_prop_name_set" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_notify_t_prop_name_set" "', argument " "2"" of type '" "char const *""'");
@@ -6471,7 +6406,7 @@ XS(_wrap_svn_wc_notify_t_prop_name_set) {
XS(_wrap_svn_wc_notify_t_prop_name_get) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6483,9 +6418,9 @@ XS(_wrap_svn_wc_notify_t_prop_name_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_prop_name_get" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_prop_name_get" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (char *) ((arg1)->prop_name);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -6499,7 +6434,7 @@ XS(_wrap_svn_wc_notify_t_prop_name_get) {
XS(_wrap_svn_wc_notify_t_rev_props_set) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
apr_hash_t *arg2 = (apr_hash_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6513,9 +6448,9 @@ XS(_wrap_svn_wc_notify_t_rev_props_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_rev_props_set" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_rev_props_set" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_apr_hash_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_notify_t_rev_props_set" "', argument " "2"" of type '" "apr_hash_t *""'");
@@ -6536,7 +6471,7 @@ XS(_wrap_svn_wc_notify_t_rev_props_set) {
XS(_wrap_svn_wc_notify_t_rev_props_get) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6548,9 +6483,9 @@ XS(_wrap_svn_wc_notify_t_rev_props_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_rev_props_get" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_rev_props_get" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (apr_hash_t *) ((arg1)->rev_props);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_hash_t, 0 | 0); argvi++ ;
@@ -6564,7 +6499,7 @@ XS(_wrap_svn_wc_notify_t_rev_props_get) {
XS(_wrap_svn_wc_notify_t_old_revision_set) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6578,9 +6513,9 @@ XS(_wrap_svn_wc_notify_t_old_revision_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_old_revision_set" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_old_revision_set" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_notify_t_old_revision_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -6601,7 +6536,7 @@ XS(_wrap_svn_wc_notify_t_old_revision_set) {
XS(_wrap_svn_wc_notify_t_old_revision_get) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6613,9 +6548,9 @@ XS(_wrap_svn_wc_notify_t_old_revision_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_old_revision_get" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_old_revision_get" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_revnum_t) ((arg1)->old_revision);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -6629,7 +6564,7 @@ XS(_wrap_svn_wc_notify_t_old_revision_get) {
XS(_wrap_svn_wc_notify_t_hunk_original_start_set) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_linenum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6643,9 +6578,9 @@ XS(_wrap_svn_wc_notify_t_hunk_original_start_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_hunk_original_start_set" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_hunk_original_start_set" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_notify_t_hunk_original_start_set" "', argument " "2"" of type '" "svn_linenum_t""'");
@@ -6666,7 +6601,7 @@ XS(_wrap_svn_wc_notify_t_hunk_original_start_set) {
XS(_wrap_svn_wc_notify_t_hunk_original_start_get) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6678,9 +6613,9 @@ XS(_wrap_svn_wc_notify_t_hunk_original_start_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_hunk_original_start_get" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_hunk_original_start_get" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_linenum_t) ((arg1)->hunk_original_start);
ST(argvi) = SWIG_From_unsigned_SS_long SWIG_PERL_CALL_ARGS_1((unsigned long)(result)); argvi++ ;
@@ -6694,7 +6629,7 @@ XS(_wrap_svn_wc_notify_t_hunk_original_start_get) {
XS(_wrap_svn_wc_notify_t_hunk_original_length_set) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_linenum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6708,9 +6643,9 @@ XS(_wrap_svn_wc_notify_t_hunk_original_length_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_hunk_original_length_set" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_hunk_original_length_set" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_notify_t_hunk_original_length_set" "', argument " "2"" of type '" "svn_linenum_t""'");
@@ -6731,7 +6666,7 @@ XS(_wrap_svn_wc_notify_t_hunk_original_length_set) {
XS(_wrap_svn_wc_notify_t_hunk_original_length_get) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6743,9 +6678,9 @@ XS(_wrap_svn_wc_notify_t_hunk_original_length_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_hunk_original_length_get" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_hunk_original_length_get" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_linenum_t) ((arg1)->hunk_original_length);
ST(argvi) = SWIG_From_unsigned_SS_long SWIG_PERL_CALL_ARGS_1((unsigned long)(result)); argvi++ ;
@@ -6759,7 +6694,7 @@ XS(_wrap_svn_wc_notify_t_hunk_original_length_get) {
XS(_wrap_svn_wc_notify_t_hunk_modified_start_set) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_linenum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6773,9 +6708,9 @@ XS(_wrap_svn_wc_notify_t_hunk_modified_start_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_hunk_modified_start_set" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_hunk_modified_start_set" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_notify_t_hunk_modified_start_set" "', argument " "2"" of type '" "svn_linenum_t""'");
@@ -6796,7 +6731,7 @@ XS(_wrap_svn_wc_notify_t_hunk_modified_start_set) {
XS(_wrap_svn_wc_notify_t_hunk_modified_start_get) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6808,9 +6743,9 @@ XS(_wrap_svn_wc_notify_t_hunk_modified_start_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_hunk_modified_start_get" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_hunk_modified_start_get" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_linenum_t) ((arg1)->hunk_modified_start);
ST(argvi) = SWIG_From_unsigned_SS_long SWIG_PERL_CALL_ARGS_1((unsigned long)(result)); argvi++ ;
@@ -6824,7 +6759,7 @@ XS(_wrap_svn_wc_notify_t_hunk_modified_start_get) {
XS(_wrap_svn_wc_notify_t_hunk_modified_length_set) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_linenum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6838,9 +6773,9 @@ XS(_wrap_svn_wc_notify_t_hunk_modified_length_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_hunk_modified_length_set" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_hunk_modified_length_set" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_notify_t_hunk_modified_length_set" "', argument " "2"" of type '" "svn_linenum_t""'");
@@ -6861,7 +6796,7 @@ XS(_wrap_svn_wc_notify_t_hunk_modified_length_set) {
XS(_wrap_svn_wc_notify_t_hunk_modified_length_get) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6873,9 +6808,9 @@ XS(_wrap_svn_wc_notify_t_hunk_modified_length_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_hunk_modified_length_get" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_hunk_modified_length_get" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_linenum_t) ((arg1)->hunk_modified_length);
ST(argvi) = SWIG_From_unsigned_SS_long SWIG_PERL_CALL_ARGS_1((unsigned long)(result)); argvi++ ;
@@ -6889,7 +6824,7 @@ XS(_wrap_svn_wc_notify_t_hunk_modified_length_get) {
XS(_wrap_svn_wc_notify_t_hunk_matched_line_set) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_linenum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6903,9 +6838,9 @@ XS(_wrap_svn_wc_notify_t_hunk_matched_line_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_hunk_matched_line_set" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_hunk_matched_line_set" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_notify_t_hunk_matched_line_set" "', argument " "2"" of type '" "svn_linenum_t""'");
@@ -6926,7 +6861,7 @@ XS(_wrap_svn_wc_notify_t_hunk_matched_line_set) {
XS(_wrap_svn_wc_notify_t_hunk_matched_line_get) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -6938,9 +6873,9 @@ XS(_wrap_svn_wc_notify_t_hunk_matched_line_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_hunk_matched_line_get" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_hunk_matched_line_get" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_linenum_t) ((arg1)->hunk_matched_line);
ST(argvi) = SWIG_From_unsigned_SS_long SWIG_PERL_CALL_ARGS_1((unsigned long)(result)); argvi++ ;
@@ -6954,7 +6889,7 @@ XS(_wrap_svn_wc_notify_t_hunk_matched_line_get) {
XS(_wrap_svn_wc_notify_t_hunk_fuzz_set) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_linenum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6968,9 +6903,9 @@ XS(_wrap_svn_wc_notify_t_hunk_fuzz_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_hunk_fuzz_set" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_hunk_fuzz_set" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_notify_t_hunk_fuzz_set" "', argument " "2"" of type '" "svn_linenum_t""'");
@@ -6991,7 +6926,7 @@ XS(_wrap_svn_wc_notify_t_hunk_fuzz_set) {
XS(_wrap_svn_wc_notify_t_hunk_fuzz_get) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -7003,9 +6938,9 @@ XS(_wrap_svn_wc_notify_t_hunk_fuzz_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_hunk_fuzz_get" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_notify_t_hunk_fuzz_get" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_linenum_t) ((arg1)->hunk_fuzz);
ST(argvi) = SWIG_From_unsigned_SS_long SWIG_PERL_CALL_ARGS_1((unsigned long)(result)); argvi++ ;
@@ -7020,14 +6955,14 @@ XS(_wrap_svn_wc_notify_t_hunk_fuzz_get) {
XS(_wrap_new_svn_wc_notify_t) {
{
int argvi = 0;
- svn_wc_notify_t *result = 0 ;
+ struct svn_wc_notify_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_wc_notify_t();");
}
{
- result = (svn_wc_notify_t *)calloc(1, sizeof(svn_wc_notify_t));
+ result = (struct svn_wc_notify_t *)calloc(1, sizeof(struct svn_wc_notify_t));
@@ -7042,7 +6977,7 @@ XS(_wrap_new_svn_wc_notify_t) {
XS(_wrap_delete_svn_wc_notify_t) {
{
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -7053,9 +6988,9 @@ XS(_wrap_delete_svn_wc_notify_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_notify_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_notify_t" "', argument " "1"" of type '" "svn_wc_notify_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_notify_t" "', argument " "1"" of type '" "struct svn_wc_notify_t *""'");
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
{
free((char *) arg1);
@@ -7225,7 +7160,7 @@ XS(_wrap_svn_wc_dup_notify) {
XS(_wrap_svn_wc_conflict_version_t_repos_url_set) {
{
- svn_wc_conflict_version_t *arg1 = (svn_wc_conflict_version_t *) 0 ;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7240,9 +7175,9 @@ XS(_wrap_svn_wc_conflict_version_t_repos_url_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_version_t_repos_url_set" "', argument " "1"" of type '" "svn_wc_conflict_version_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_version_t_repos_url_set" "', argument " "1"" of type '" "struct svn_wc_conflict_version_t *""'");
}
- arg1 = (svn_wc_conflict_version_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_version_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_conflict_version_t_repos_url_set" "', argument " "2"" of type '" "char const *""'");
@@ -7270,7 +7205,7 @@ XS(_wrap_svn_wc_conflict_version_t_repos_url_set) {
XS(_wrap_svn_wc_conflict_version_t_repos_url_get) {
{
- svn_wc_conflict_version_t *arg1 = (svn_wc_conflict_version_t *) 0 ;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -7282,9 +7217,9 @@ XS(_wrap_svn_wc_conflict_version_t_repos_url_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_version_t_repos_url_get" "', argument " "1"" of type '" "svn_wc_conflict_version_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_version_t_repos_url_get" "', argument " "1"" of type '" "struct svn_wc_conflict_version_t *""'");
}
- arg1 = (svn_wc_conflict_version_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_version_t *)(argp1);
result = (char *) ((arg1)->repos_url);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -7298,7 +7233,7 @@ XS(_wrap_svn_wc_conflict_version_t_repos_url_get) {
XS(_wrap_svn_wc_conflict_version_t_peg_rev_set) {
{
- svn_wc_conflict_version_t *arg1 = (svn_wc_conflict_version_t *) 0 ;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7312,9 +7247,9 @@ XS(_wrap_svn_wc_conflict_version_t_peg_rev_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_version_t_peg_rev_set" "', argument " "1"" of type '" "svn_wc_conflict_version_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_version_t_peg_rev_set" "', argument " "1"" of type '" "struct svn_wc_conflict_version_t *""'");
}
- arg1 = (svn_wc_conflict_version_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_version_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_conflict_version_t_peg_rev_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -7335,7 +7270,7 @@ XS(_wrap_svn_wc_conflict_version_t_peg_rev_set) {
XS(_wrap_svn_wc_conflict_version_t_peg_rev_get) {
{
- svn_wc_conflict_version_t *arg1 = (svn_wc_conflict_version_t *) 0 ;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -7347,9 +7282,9 @@ XS(_wrap_svn_wc_conflict_version_t_peg_rev_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_version_t_peg_rev_get" "', argument " "1"" of type '" "svn_wc_conflict_version_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_version_t_peg_rev_get" "', argument " "1"" of type '" "struct svn_wc_conflict_version_t *""'");
}
- arg1 = (svn_wc_conflict_version_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_version_t *)(argp1);
result = (svn_revnum_t) ((arg1)->peg_rev);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -7363,7 +7298,7 @@ XS(_wrap_svn_wc_conflict_version_t_peg_rev_get) {
XS(_wrap_svn_wc_conflict_version_t_path_in_repos_set) {
{
- svn_wc_conflict_version_t *arg1 = (svn_wc_conflict_version_t *) 0 ;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7378,9 +7313,9 @@ XS(_wrap_svn_wc_conflict_version_t_path_in_repos_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_version_t_path_in_repos_set" "', argument " "1"" of type '" "svn_wc_conflict_version_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_version_t_path_in_repos_set" "', argument " "1"" of type '" "struct svn_wc_conflict_version_t *""'");
}
- arg1 = (svn_wc_conflict_version_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_version_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_conflict_version_t_path_in_repos_set" "', argument " "2"" of type '" "char const *""'");
@@ -7408,7 +7343,7 @@ XS(_wrap_svn_wc_conflict_version_t_path_in_repos_set) {
XS(_wrap_svn_wc_conflict_version_t_path_in_repos_get) {
{
- svn_wc_conflict_version_t *arg1 = (svn_wc_conflict_version_t *) 0 ;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -7420,9 +7355,9 @@ XS(_wrap_svn_wc_conflict_version_t_path_in_repos_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_version_t_path_in_repos_get" "', argument " "1"" of type '" "svn_wc_conflict_version_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_version_t_path_in_repos_get" "', argument " "1"" of type '" "struct svn_wc_conflict_version_t *""'");
}
- arg1 = (svn_wc_conflict_version_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_version_t *)(argp1);
result = (char *) ((arg1)->path_in_repos);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -7436,7 +7371,7 @@ XS(_wrap_svn_wc_conflict_version_t_path_in_repos_get) {
XS(_wrap_svn_wc_conflict_version_t_node_kind_set) {
{
- svn_wc_conflict_version_t *arg1 = (svn_wc_conflict_version_t *) 0 ;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7450,9 +7385,9 @@ XS(_wrap_svn_wc_conflict_version_t_node_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_version_t_node_kind_set" "', argument " "1"" of type '" "svn_wc_conflict_version_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_version_t_node_kind_set" "', argument " "1"" of type '" "struct svn_wc_conflict_version_t *""'");
}
- arg1 = (svn_wc_conflict_version_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_version_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_conflict_version_t_node_kind_set" "', argument " "2"" of type '" "svn_node_kind_t""'");
@@ -7473,7 +7408,7 @@ XS(_wrap_svn_wc_conflict_version_t_node_kind_set) {
XS(_wrap_svn_wc_conflict_version_t_node_kind_get) {
{
- svn_wc_conflict_version_t *arg1 = (svn_wc_conflict_version_t *) 0 ;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -7485,9 +7420,9 @@ XS(_wrap_svn_wc_conflict_version_t_node_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_version_t_node_kind_get" "', argument " "1"" of type '" "svn_wc_conflict_version_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_version_t_node_kind_get" "', argument " "1"" of type '" "struct svn_wc_conflict_version_t *""'");
}
- arg1 = (svn_wc_conflict_version_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_version_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->node_kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -7499,17 +7434,90 @@ XS(_wrap_svn_wc_conflict_version_t_node_kind_get) {
}
+XS(_wrap_svn_wc_conflict_version_t_repos_uuid_set) {
+ {
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_wc_conflict_version_t_repos_uuid_set(self,repos_uuid);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_version_t_repos_uuid_set" "', argument " "1"" of type '" "struct svn_wc_conflict_version_t *""'");
+ }
+ arg1 = (struct svn_wc_conflict_version_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_conflict_version_t_repos_uuid_set" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->repos_uuid) free((char *)arg1->repos_uuid);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->repos_uuid = copied;
+ }
+ ST(argvi) = sv_newmortal();
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_wc_conflict_version_t_repos_uuid_get) {
+ {
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ char *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_wc_conflict_version_t_repos_uuid_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_version_t_repos_uuid_get" "', argument " "1"" of type '" "struct svn_wc_conflict_version_t *""'");
+ }
+ arg1 = (struct svn_wc_conflict_version_t *)(argp1);
+ result = (char *) ((arg1)->repos_uuid);
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_new_svn_wc_conflict_version_t) {
{
int argvi = 0;
- svn_wc_conflict_version_t *result = 0 ;
+ struct svn_wc_conflict_version_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_wc_conflict_version_t();");
}
{
- result = (svn_wc_conflict_version_t *)calloc(1, sizeof(svn_wc_conflict_version_t));
+ result = (struct svn_wc_conflict_version_t *)calloc(1, sizeof(struct svn_wc_conflict_version_t));
@@ -7524,7 +7532,7 @@ XS(_wrap_new_svn_wc_conflict_version_t) {
XS(_wrap_delete_svn_wc_conflict_version_t) {
{
- svn_wc_conflict_version_t *arg1 = (svn_wc_conflict_version_t *) 0 ;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -7535,9 +7543,9 @@ XS(_wrap_delete_svn_wc_conflict_version_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_version_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_conflict_version_t" "', argument " "1"" of type '" "svn_wc_conflict_version_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_conflict_version_t" "', argument " "1"" of type '" "struct svn_wc_conflict_version_t *""'");
}
- arg1 = (svn_wc_conflict_version_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_version_t *)(argp1);
{
free((char *) arg1);
@@ -7554,6 +7562,92 @@ XS(_wrap_delete_svn_wc_conflict_version_t) {
}
+XS(_wrap_svn_wc_conflict_version_create2) {
+ {
+ char *arg1 = (char *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_revnum_t arg4 ;
+ svn_node_kind_t arg5 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ long val4 ;
+ int ecode4 = 0 ;
+ int val5 ;
+ int ecode5 = 0 ;
+ int argvi = 0;
+ svn_wc_conflict_version_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg6 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 5) || (items > 6)) {
+ SWIG_croak("Usage: svn_wc_conflict_version_create2(repos_root_url,repos_uuid,repos_relpath,revision,kind,result_pool);");
+ }
+ res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_version_create2" "', argument " "1"" of type '" "char const *""'");
+ }
+ arg1 = (char *)(buf1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_conflict_version_create2" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_wc_conflict_version_create2" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = (char *)(buf3);
+ ecode4 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(3), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_wc_conflict_version_create2" "', argument " "4"" of type '" "svn_revnum_t""'");
+ }
+ arg4 = (svn_revnum_t)(val4);
+ ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val5);
+ if (!SWIG_IsOK(ecode5)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_wc_conflict_version_create2" "', argument " "5"" of type '" "svn_node_kind_t""'");
+ }
+ arg5 = (svn_node_kind_t)(val5);
+ if (items > 5) {
+
+ }
+ {
+ result = (svn_wc_conflict_version_t *)svn_wc_conflict_version_create2((char const *)arg1,(char const *)arg2,(char const *)arg3,arg4,arg5,arg6);
+
+
+
+ }
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_wc_conflict_version_t, 0 | SWIG_SHADOW); argvi++ ;
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+
+
+ XSRETURN(argvi);
+ fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_wc_conflict_version_create) {
{
char *arg1 = (char *) 0 ;
@@ -7674,7 +7768,7 @@ XS(_wrap_svn_wc_conflict_version_dup) {
XS(_wrap_svn_wc_conflict_description2_t_local_abspath_set) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7689,9 +7783,9 @@ XS(_wrap_svn_wc_conflict_description2_t_local_abspath_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_local_abspath_set" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_local_abspath_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_conflict_description2_t_local_abspath_set" "', argument " "2"" of type '" "char const *""'");
@@ -7719,7 +7813,7 @@ XS(_wrap_svn_wc_conflict_description2_t_local_abspath_set) {
XS(_wrap_svn_wc_conflict_description2_t_local_abspath_get) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -7731,9 +7825,9 @@ XS(_wrap_svn_wc_conflict_description2_t_local_abspath_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_local_abspath_get" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_local_abspath_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (char *) ((arg1)->local_abspath);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -7747,7 +7841,7 @@ XS(_wrap_svn_wc_conflict_description2_t_local_abspath_get) {
XS(_wrap_svn_wc_conflict_description2_t_node_kind_set) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7761,9 +7855,9 @@ XS(_wrap_svn_wc_conflict_description2_t_node_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_node_kind_set" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_node_kind_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_conflict_description2_t_node_kind_set" "', argument " "2"" of type '" "svn_node_kind_t""'");
@@ -7784,7 +7878,7 @@ XS(_wrap_svn_wc_conflict_description2_t_node_kind_set) {
XS(_wrap_svn_wc_conflict_description2_t_node_kind_get) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -7796,9 +7890,9 @@ XS(_wrap_svn_wc_conflict_description2_t_node_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_node_kind_get" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_node_kind_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->node_kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -7812,7 +7906,7 @@ XS(_wrap_svn_wc_conflict_description2_t_node_kind_get) {
XS(_wrap_svn_wc_conflict_description2_t_kind_set) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
svn_wc_conflict_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7826,9 +7920,9 @@ XS(_wrap_svn_wc_conflict_description2_t_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_kind_set" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_kind_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_conflict_description2_t_kind_set" "', argument " "2"" of type '" "svn_wc_conflict_kind_t""'");
@@ -7849,7 +7943,7 @@ XS(_wrap_svn_wc_conflict_description2_t_kind_set) {
XS(_wrap_svn_wc_conflict_description2_t_kind_get) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -7861,9 +7955,9 @@ XS(_wrap_svn_wc_conflict_description2_t_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_kind_get" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_kind_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (svn_wc_conflict_kind_t) ((arg1)->kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -7877,7 +7971,7 @@ XS(_wrap_svn_wc_conflict_description2_t_kind_get) {
XS(_wrap_svn_wc_conflict_description2_t_property_name_set) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7892,9 +7986,9 @@ XS(_wrap_svn_wc_conflict_description2_t_property_name_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_property_name_set" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_property_name_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_conflict_description2_t_property_name_set" "', argument " "2"" of type '" "char const *""'");
@@ -7922,7 +8016,7 @@ XS(_wrap_svn_wc_conflict_description2_t_property_name_set) {
XS(_wrap_svn_wc_conflict_description2_t_property_name_get) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -7934,9 +8028,9 @@ XS(_wrap_svn_wc_conflict_description2_t_property_name_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_property_name_get" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_property_name_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (char *) ((arg1)->property_name);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -7950,7 +8044,7 @@ XS(_wrap_svn_wc_conflict_description2_t_property_name_get) {
XS(_wrap_svn_wc_conflict_description2_t_is_binary_set) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7964,9 +8058,9 @@ XS(_wrap_svn_wc_conflict_description2_t_is_binary_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_is_binary_set" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_is_binary_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_conflict_description2_t_is_binary_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -7987,7 +8081,7 @@ XS(_wrap_svn_wc_conflict_description2_t_is_binary_set) {
XS(_wrap_svn_wc_conflict_description2_t_is_binary_get) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -7999,9 +8093,9 @@ XS(_wrap_svn_wc_conflict_description2_t_is_binary_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_is_binary_get" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_is_binary_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (svn_boolean_t) ((arg1)->is_binary);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -8015,7 +8109,7 @@ XS(_wrap_svn_wc_conflict_description2_t_is_binary_get) {
XS(_wrap_svn_wc_conflict_description2_t_mime_type_set) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8030,9 +8124,9 @@ XS(_wrap_svn_wc_conflict_description2_t_mime_type_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_mime_type_set" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_mime_type_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_conflict_description2_t_mime_type_set" "', argument " "2"" of type '" "char const *""'");
@@ -8060,7 +8154,7 @@ XS(_wrap_svn_wc_conflict_description2_t_mime_type_set) {
XS(_wrap_svn_wc_conflict_description2_t_mime_type_get) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -8072,9 +8166,9 @@ XS(_wrap_svn_wc_conflict_description2_t_mime_type_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_mime_type_get" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_mime_type_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (char *) ((arg1)->mime_type);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -8088,7 +8182,7 @@ XS(_wrap_svn_wc_conflict_description2_t_mime_type_get) {
XS(_wrap_svn_wc_conflict_description2_t_action_set) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
svn_wc_conflict_action_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8102,9 +8196,9 @@ XS(_wrap_svn_wc_conflict_description2_t_action_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_action_set" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_action_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_conflict_description2_t_action_set" "', argument " "2"" of type '" "svn_wc_conflict_action_t""'");
@@ -8125,7 +8219,7 @@ XS(_wrap_svn_wc_conflict_description2_t_action_set) {
XS(_wrap_svn_wc_conflict_description2_t_action_get) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -8137,9 +8231,9 @@ XS(_wrap_svn_wc_conflict_description2_t_action_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_action_get" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_action_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (svn_wc_conflict_action_t) ((arg1)->action);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -8153,7 +8247,7 @@ XS(_wrap_svn_wc_conflict_description2_t_action_get) {
XS(_wrap_svn_wc_conflict_description2_t_reason_set) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
svn_wc_conflict_reason_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8167,9 +8261,9 @@ XS(_wrap_svn_wc_conflict_description2_t_reason_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_reason_set" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_reason_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_conflict_description2_t_reason_set" "', argument " "2"" of type '" "svn_wc_conflict_reason_t""'");
@@ -8190,7 +8284,7 @@ XS(_wrap_svn_wc_conflict_description2_t_reason_set) {
XS(_wrap_svn_wc_conflict_description2_t_reason_get) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -8202,9 +8296,9 @@ XS(_wrap_svn_wc_conflict_description2_t_reason_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_reason_get" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_reason_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (svn_wc_conflict_reason_t) ((arg1)->reason);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -8218,7 +8312,7 @@ XS(_wrap_svn_wc_conflict_description2_t_reason_get) {
XS(_wrap_svn_wc_conflict_description2_t_base_abspath_set) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8233,9 +8327,9 @@ XS(_wrap_svn_wc_conflict_description2_t_base_abspath_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_base_abspath_set" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_base_abspath_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_conflict_description2_t_base_abspath_set" "', argument " "2"" of type '" "char const *""'");
@@ -8263,7 +8357,7 @@ XS(_wrap_svn_wc_conflict_description2_t_base_abspath_set) {
XS(_wrap_svn_wc_conflict_description2_t_base_abspath_get) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -8275,9 +8369,9 @@ XS(_wrap_svn_wc_conflict_description2_t_base_abspath_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_base_abspath_get" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_base_abspath_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (char *) ((arg1)->base_abspath);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -8291,7 +8385,7 @@ XS(_wrap_svn_wc_conflict_description2_t_base_abspath_get) {
XS(_wrap_svn_wc_conflict_description2_t_their_abspath_set) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8306,9 +8400,9 @@ XS(_wrap_svn_wc_conflict_description2_t_their_abspath_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_their_abspath_set" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_their_abspath_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_conflict_description2_t_their_abspath_set" "', argument " "2"" of type '" "char const *""'");
@@ -8336,7 +8430,7 @@ XS(_wrap_svn_wc_conflict_description2_t_their_abspath_set) {
XS(_wrap_svn_wc_conflict_description2_t_their_abspath_get) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -8348,9 +8442,9 @@ XS(_wrap_svn_wc_conflict_description2_t_their_abspath_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_their_abspath_get" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_their_abspath_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (char *) ((arg1)->their_abspath);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -8364,7 +8458,7 @@ XS(_wrap_svn_wc_conflict_description2_t_their_abspath_get) {
XS(_wrap_svn_wc_conflict_description2_t_my_abspath_set) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8379,9 +8473,9 @@ XS(_wrap_svn_wc_conflict_description2_t_my_abspath_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_my_abspath_set" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_my_abspath_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_conflict_description2_t_my_abspath_set" "', argument " "2"" of type '" "char const *""'");
@@ -8409,7 +8503,7 @@ XS(_wrap_svn_wc_conflict_description2_t_my_abspath_set) {
XS(_wrap_svn_wc_conflict_description2_t_my_abspath_get) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -8421,9 +8515,9 @@ XS(_wrap_svn_wc_conflict_description2_t_my_abspath_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_my_abspath_get" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_my_abspath_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (char *) ((arg1)->my_abspath);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -8437,7 +8531,7 @@ XS(_wrap_svn_wc_conflict_description2_t_my_abspath_get) {
XS(_wrap_svn_wc_conflict_description2_t_merged_file_set) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8452,9 +8546,9 @@ XS(_wrap_svn_wc_conflict_description2_t_merged_file_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_merged_file_set" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_merged_file_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_conflict_description2_t_merged_file_set" "', argument " "2"" of type '" "char const *""'");
@@ -8482,7 +8576,7 @@ XS(_wrap_svn_wc_conflict_description2_t_merged_file_set) {
XS(_wrap_svn_wc_conflict_description2_t_merged_file_get) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -8494,9 +8588,9 @@ XS(_wrap_svn_wc_conflict_description2_t_merged_file_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_merged_file_get" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_merged_file_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (char *) ((arg1)->merged_file);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -8510,7 +8604,7 @@ XS(_wrap_svn_wc_conflict_description2_t_merged_file_get) {
XS(_wrap_svn_wc_conflict_description2_t_operation_set) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
svn_wc_operation_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8524,9 +8618,9 @@ XS(_wrap_svn_wc_conflict_description2_t_operation_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_operation_set" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_operation_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_conflict_description2_t_operation_set" "', argument " "2"" of type '" "svn_wc_operation_t""'");
@@ -8547,7 +8641,7 @@ XS(_wrap_svn_wc_conflict_description2_t_operation_set) {
XS(_wrap_svn_wc_conflict_description2_t_operation_get) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -8559,9 +8653,9 @@ XS(_wrap_svn_wc_conflict_description2_t_operation_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_operation_get" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_operation_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (svn_wc_operation_t) ((arg1)->operation);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -8575,7 +8669,7 @@ XS(_wrap_svn_wc_conflict_description2_t_operation_get) {
XS(_wrap_svn_wc_conflict_description2_t_src_left_version_set) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
svn_wc_conflict_version_t *arg2 = (svn_wc_conflict_version_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8589,9 +8683,9 @@ XS(_wrap_svn_wc_conflict_description2_t_src_left_version_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_src_left_version_set" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_src_left_version_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_wc_conflict_version_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_conflict_description2_t_src_left_version_set" "', argument " "2"" of type '" "svn_wc_conflict_version_t const *""'");
@@ -8612,7 +8706,7 @@ XS(_wrap_svn_wc_conflict_description2_t_src_left_version_set) {
XS(_wrap_svn_wc_conflict_description2_t_src_left_version_get) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -8624,9 +8718,9 @@ XS(_wrap_svn_wc_conflict_description2_t_src_left_version_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_src_left_version_get" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_src_left_version_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (svn_wc_conflict_version_t *) ((arg1)->src_left_version);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_wc_conflict_version_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -8640,7 +8734,7 @@ XS(_wrap_svn_wc_conflict_description2_t_src_left_version_get) {
XS(_wrap_svn_wc_conflict_description2_t_src_right_version_set) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
svn_wc_conflict_version_t *arg2 = (svn_wc_conflict_version_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8654,9 +8748,9 @@ XS(_wrap_svn_wc_conflict_description2_t_src_right_version_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_src_right_version_set" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_src_right_version_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_wc_conflict_version_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_conflict_description2_t_src_right_version_set" "', argument " "2"" of type '" "svn_wc_conflict_version_t const *""'");
@@ -8677,7 +8771,7 @@ XS(_wrap_svn_wc_conflict_description2_t_src_right_version_set) {
XS(_wrap_svn_wc_conflict_description2_t_src_right_version_get) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -8689,9 +8783,9 @@ XS(_wrap_svn_wc_conflict_description2_t_src_right_version_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_src_right_version_get" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description2_t_src_right_version_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (svn_wc_conflict_version_t *) ((arg1)->src_right_version);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_wc_conflict_version_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -8706,14 +8800,14 @@ XS(_wrap_svn_wc_conflict_description2_t_src_right_version_get) {
XS(_wrap_new_svn_wc_conflict_description2_t) {
{
int argvi = 0;
- svn_wc_conflict_description2_t *result = 0 ;
+ struct svn_wc_conflict_description2_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_wc_conflict_description2_t();");
}
{
- result = (svn_wc_conflict_description2_t *)calloc(1, sizeof(svn_wc_conflict_description2_t));
+ result = (struct svn_wc_conflict_description2_t *)calloc(1, sizeof(struct svn_wc_conflict_description2_t));
@@ -8728,7 +8822,7 @@ XS(_wrap_new_svn_wc_conflict_description2_t) {
XS(_wrap_delete_svn_wc_conflict_description2_t) {
{
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -8739,9 +8833,9 @@ XS(_wrap_delete_svn_wc_conflict_description2_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_conflict_description2_t" "', argument " "1"" of type '" "svn_wc_conflict_description2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_conflict_description2_t" "', argument " "1"" of type '" "struct svn_wc_conflict_description2_t *""'");
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
{
free((char *) arg1);
@@ -8760,7 +8854,7 @@ XS(_wrap_delete_svn_wc_conflict_description2_t) {
XS(_wrap_svn_wc_conflict_description_t_path_set) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8775,9 +8869,9 @@ XS(_wrap_svn_wc_conflict_description_t_path_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_path_set" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_path_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_conflict_description_t_path_set" "', argument " "2"" of type '" "char const *""'");
@@ -8805,7 +8899,7 @@ XS(_wrap_svn_wc_conflict_description_t_path_set) {
XS(_wrap_svn_wc_conflict_description_t_path_get) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -8817,9 +8911,9 @@ XS(_wrap_svn_wc_conflict_description_t_path_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_path_get" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_path_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (char *) ((arg1)->path);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -8833,7 +8927,7 @@ XS(_wrap_svn_wc_conflict_description_t_path_get) {
XS(_wrap_svn_wc_conflict_description_t_node_kind_set) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8847,9 +8941,9 @@ XS(_wrap_svn_wc_conflict_description_t_node_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_node_kind_set" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_node_kind_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_conflict_description_t_node_kind_set" "', argument " "2"" of type '" "svn_node_kind_t""'");
@@ -8870,7 +8964,7 @@ XS(_wrap_svn_wc_conflict_description_t_node_kind_set) {
XS(_wrap_svn_wc_conflict_description_t_node_kind_get) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -8882,9 +8976,9 @@ XS(_wrap_svn_wc_conflict_description_t_node_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_node_kind_get" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_node_kind_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->node_kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -8898,7 +8992,7 @@ XS(_wrap_svn_wc_conflict_description_t_node_kind_get) {
XS(_wrap_svn_wc_conflict_description_t_kind_set) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_wc_conflict_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8912,9 +9006,9 @@ XS(_wrap_svn_wc_conflict_description_t_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_kind_set" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_kind_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_conflict_description_t_kind_set" "', argument " "2"" of type '" "svn_wc_conflict_kind_t""'");
@@ -8935,7 +9029,7 @@ XS(_wrap_svn_wc_conflict_description_t_kind_set) {
XS(_wrap_svn_wc_conflict_description_t_kind_get) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -8947,9 +9041,9 @@ XS(_wrap_svn_wc_conflict_description_t_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_kind_get" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_kind_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (svn_wc_conflict_kind_t) ((arg1)->kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -8963,7 +9057,7 @@ XS(_wrap_svn_wc_conflict_description_t_kind_get) {
XS(_wrap_svn_wc_conflict_description_t_property_name_set) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8978,9 +9072,9 @@ XS(_wrap_svn_wc_conflict_description_t_property_name_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_property_name_set" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_property_name_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_conflict_description_t_property_name_set" "', argument " "2"" of type '" "char const *""'");
@@ -9008,7 +9102,7 @@ XS(_wrap_svn_wc_conflict_description_t_property_name_set) {
XS(_wrap_svn_wc_conflict_description_t_property_name_get) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -9020,9 +9114,9 @@ XS(_wrap_svn_wc_conflict_description_t_property_name_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_property_name_get" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_property_name_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (char *) ((arg1)->property_name);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -9036,7 +9130,7 @@ XS(_wrap_svn_wc_conflict_description_t_property_name_get) {
XS(_wrap_svn_wc_conflict_description_t_is_binary_set) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9050,9 +9144,9 @@ XS(_wrap_svn_wc_conflict_description_t_is_binary_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_is_binary_set" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_is_binary_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_conflict_description_t_is_binary_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -9073,7 +9167,7 @@ XS(_wrap_svn_wc_conflict_description_t_is_binary_set) {
XS(_wrap_svn_wc_conflict_description_t_is_binary_get) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -9085,9 +9179,9 @@ XS(_wrap_svn_wc_conflict_description_t_is_binary_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_is_binary_get" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_is_binary_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (svn_boolean_t) ((arg1)->is_binary);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -9101,7 +9195,7 @@ XS(_wrap_svn_wc_conflict_description_t_is_binary_get) {
XS(_wrap_svn_wc_conflict_description_t_mime_type_set) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9116,9 +9210,9 @@ XS(_wrap_svn_wc_conflict_description_t_mime_type_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_mime_type_set" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_mime_type_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_conflict_description_t_mime_type_set" "', argument " "2"" of type '" "char const *""'");
@@ -9146,7 +9240,7 @@ XS(_wrap_svn_wc_conflict_description_t_mime_type_set) {
XS(_wrap_svn_wc_conflict_description_t_mime_type_get) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -9158,9 +9252,9 @@ XS(_wrap_svn_wc_conflict_description_t_mime_type_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_mime_type_get" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_mime_type_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (char *) ((arg1)->mime_type);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -9174,7 +9268,7 @@ XS(_wrap_svn_wc_conflict_description_t_mime_type_get) {
XS(_wrap_svn_wc_conflict_description_t_access_set) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_wc_adm_access_t *arg2 = (svn_wc_adm_access_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9188,9 +9282,9 @@ XS(_wrap_svn_wc_conflict_description_t_access_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_access_set" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_access_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_wc_adm_access_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_conflict_description_t_access_set" "', argument " "2"" of type '" "svn_wc_adm_access_t *""'");
@@ -9211,7 +9305,7 @@ XS(_wrap_svn_wc_conflict_description_t_access_set) {
XS(_wrap_svn_wc_conflict_description_t_access_get) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -9223,9 +9317,9 @@ XS(_wrap_svn_wc_conflict_description_t_access_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_access_get" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_access_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (svn_wc_adm_access_t *) ((arg1)->access);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_wc_adm_access_t, 0 | 0); argvi++ ;
@@ -9239,7 +9333,7 @@ XS(_wrap_svn_wc_conflict_description_t_access_get) {
XS(_wrap_svn_wc_conflict_description_t_action_set) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_wc_conflict_action_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9253,9 +9347,9 @@ XS(_wrap_svn_wc_conflict_description_t_action_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_action_set" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_action_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_conflict_description_t_action_set" "', argument " "2"" of type '" "svn_wc_conflict_action_t""'");
@@ -9276,7 +9370,7 @@ XS(_wrap_svn_wc_conflict_description_t_action_set) {
XS(_wrap_svn_wc_conflict_description_t_action_get) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -9288,9 +9382,9 @@ XS(_wrap_svn_wc_conflict_description_t_action_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_action_get" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_action_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (svn_wc_conflict_action_t) ((arg1)->action);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -9304,7 +9398,7 @@ XS(_wrap_svn_wc_conflict_description_t_action_get) {
XS(_wrap_svn_wc_conflict_description_t_reason_set) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_wc_conflict_reason_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9318,9 +9412,9 @@ XS(_wrap_svn_wc_conflict_description_t_reason_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_reason_set" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_reason_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_conflict_description_t_reason_set" "', argument " "2"" of type '" "svn_wc_conflict_reason_t""'");
@@ -9341,7 +9435,7 @@ XS(_wrap_svn_wc_conflict_description_t_reason_set) {
XS(_wrap_svn_wc_conflict_description_t_reason_get) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -9353,9 +9447,9 @@ XS(_wrap_svn_wc_conflict_description_t_reason_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_reason_get" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_reason_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (svn_wc_conflict_reason_t) ((arg1)->reason);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -9369,7 +9463,7 @@ XS(_wrap_svn_wc_conflict_description_t_reason_get) {
XS(_wrap_svn_wc_conflict_description_t_base_file_set) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9384,9 +9478,9 @@ XS(_wrap_svn_wc_conflict_description_t_base_file_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_base_file_set" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_base_file_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_conflict_description_t_base_file_set" "', argument " "2"" of type '" "char const *""'");
@@ -9414,7 +9508,7 @@ XS(_wrap_svn_wc_conflict_description_t_base_file_set) {
XS(_wrap_svn_wc_conflict_description_t_base_file_get) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -9426,9 +9520,9 @@ XS(_wrap_svn_wc_conflict_description_t_base_file_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_base_file_get" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_base_file_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (char *) ((arg1)->base_file);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -9442,7 +9536,7 @@ XS(_wrap_svn_wc_conflict_description_t_base_file_get) {
XS(_wrap_svn_wc_conflict_description_t_their_file_set) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9457,9 +9551,9 @@ XS(_wrap_svn_wc_conflict_description_t_their_file_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_their_file_set" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_their_file_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_conflict_description_t_their_file_set" "', argument " "2"" of type '" "char const *""'");
@@ -9487,7 +9581,7 @@ XS(_wrap_svn_wc_conflict_description_t_their_file_set) {
XS(_wrap_svn_wc_conflict_description_t_their_file_get) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -9499,9 +9593,9 @@ XS(_wrap_svn_wc_conflict_description_t_their_file_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_their_file_get" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_their_file_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (char *) ((arg1)->their_file);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -9515,7 +9609,7 @@ XS(_wrap_svn_wc_conflict_description_t_their_file_get) {
XS(_wrap_svn_wc_conflict_description_t_my_file_set) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9530,9 +9624,9 @@ XS(_wrap_svn_wc_conflict_description_t_my_file_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_my_file_set" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_my_file_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_conflict_description_t_my_file_set" "', argument " "2"" of type '" "char const *""'");
@@ -9560,7 +9654,7 @@ XS(_wrap_svn_wc_conflict_description_t_my_file_set) {
XS(_wrap_svn_wc_conflict_description_t_my_file_get) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -9572,9 +9666,9 @@ XS(_wrap_svn_wc_conflict_description_t_my_file_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_my_file_get" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_my_file_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (char *) ((arg1)->my_file);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -9588,7 +9682,7 @@ XS(_wrap_svn_wc_conflict_description_t_my_file_get) {
XS(_wrap_svn_wc_conflict_description_t_merged_file_set) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9603,9 +9697,9 @@ XS(_wrap_svn_wc_conflict_description_t_merged_file_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_merged_file_set" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_merged_file_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_conflict_description_t_merged_file_set" "', argument " "2"" of type '" "char const *""'");
@@ -9633,7 +9727,7 @@ XS(_wrap_svn_wc_conflict_description_t_merged_file_set) {
XS(_wrap_svn_wc_conflict_description_t_merged_file_get) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -9645,9 +9739,9 @@ XS(_wrap_svn_wc_conflict_description_t_merged_file_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_merged_file_get" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_merged_file_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (char *) ((arg1)->merged_file);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -9661,7 +9755,7 @@ XS(_wrap_svn_wc_conflict_description_t_merged_file_get) {
XS(_wrap_svn_wc_conflict_description_t_operation_set) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_wc_operation_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9675,9 +9769,9 @@ XS(_wrap_svn_wc_conflict_description_t_operation_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_operation_set" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_operation_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_conflict_description_t_operation_set" "', argument " "2"" of type '" "svn_wc_operation_t""'");
@@ -9698,7 +9792,7 @@ XS(_wrap_svn_wc_conflict_description_t_operation_set) {
XS(_wrap_svn_wc_conflict_description_t_operation_get) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -9710,9 +9804,9 @@ XS(_wrap_svn_wc_conflict_description_t_operation_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_operation_get" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_operation_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (svn_wc_operation_t) ((arg1)->operation);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -9726,7 +9820,7 @@ XS(_wrap_svn_wc_conflict_description_t_operation_get) {
XS(_wrap_svn_wc_conflict_description_t_src_left_version_set) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_wc_conflict_version_t *arg2 = (svn_wc_conflict_version_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9740,9 +9834,9 @@ XS(_wrap_svn_wc_conflict_description_t_src_left_version_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_src_left_version_set" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_src_left_version_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_wc_conflict_version_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_conflict_description_t_src_left_version_set" "', argument " "2"" of type '" "svn_wc_conflict_version_t *""'");
@@ -9763,7 +9857,7 @@ XS(_wrap_svn_wc_conflict_description_t_src_left_version_set) {
XS(_wrap_svn_wc_conflict_description_t_src_left_version_get) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -9775,9 +9869,9 @@ XS(_wrap_svn_wc_conflict_description_t_src_left_version_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_src_left_version_get" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_src_left_version_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (svn_wc_conflict_version_t *) ((arg1)->src_left_version);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_wc_conflict_version_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -9791,7 +9885,7 @@ XS(_wrap_svn_wc_conflict_description_t_src_left_version_get) {
XS(_wrap_svn_wc_conflict_description_t_src_right_version_set) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_wc_conflict_version_t *arg2 = (svn_wc_conflict_version_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9805,9 +9899,9 @@ XS(_wrap_svn_wc_conflict_description_t_src_right_version_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_src_right_version_set" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_src_right_version_set" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_wc_conflict_version_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_conflict_description_t_src_right_version_set" "', argument " "2"" of type '" "svn_wc_conflict_version_t *""'");
@@ -9828,7 +9922,7 @@ XS(_wrap_svn_wc_conflict_description_t_src_right_version_set) {
XS(_wrap_svn_wc_conflict_description_t_src_right_version_get) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -9840,9 +9934,9 @@ XS(_wrap_svn_wc_conflict_description_t_src_right_version_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_src_right_version_get" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_description_t_src_right_version_get" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (svn_wc_conflict_version_t *) ((arg1)->src_right_version);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_wc_conflict_version_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -9857,14 +9951,14 @@ XS(_wrap_svn_wc_conflict_description_t_src_right_version_get) {
XS(_wrap_new_svn_wc_conflict_description_t) {
{
int argvi = 0;
- svn_wc_conflict_description_t *result = 0 ;
+ struct svn_wc_conflict_description_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_wc_conflict_description_t();");
}
{
- result = (svn_wc_conflict_description_t *)calloc(1, sizeof(svn_wc_conflict_description_t));
+ result = (struct svn_wc_conflict_description_t *)calloc(1, sizeof(struct svn_wc_conflict_description_t));
@@ -9879,7 +9973,7 @@ XS(_wrap_new_svn_wc_conflict_description_t) {
XS(_wrap_delete_svn_wc_conflict_description_t) {
{
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -9890,9 +9984,9 @@ XS(_wrap_delete_svn_wc_conflict_description_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_conflict_description_t" "', argument " "1"" of type '" "svn_wc_conflict_description_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_conflict_description_t" "', argument " "1"" of type '" "struct svn_wc_conflict_description_t *""'");
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
{
free((char *) arg1);
@@ -10370,7 +10464,7 @@ XS(_wrap_svn_wc__conflict_description2_dup) {
XS(_wrap_svn_wc_conflict_result_t_choice_set) {
{
- svn_wc_conflict_result_t *arg1 = (svn_wc_conflict_result_t *) 0 ;
+ struct svn_wc_conflict_result_t *arg1 = (struct svn_wc_conflict_result_t *) 0 ;
svn_wc_conflict_choice_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10384,9 +10478,9 @@ XS(_wrap_svn_wc_conflict_result_t_choice_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_result_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_result_t_choice_set" "', argument " "1"" of type '" "svn_wc_conflict_result_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_result_t_choice_set" "', argument " "1"" of type '" "struct svn_wc_conflict_result_t *""'");
}
- arg1 = (svn_wc_conflict_result_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_result_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_conflict_result_t_choice_set" "', argument " "2"" of type '" "svn_wc_conflict_choice_t""'");
@@ -10407,7 +10501,7 @@ XS(_wrap_svn_wc_conflict_result_t_choice_set) {
XS(_wrap_svn_wc_conflict_result_t_choice_get) {
{
- svn_wc_conflict_result_t *arg1 = (svn_wc_conflict_result_t *) 0 ;
+ struct svn_wc_conflict_result_t *arg1 = (struct svn_wc_conflict_result_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10419,9 +10513,9 @@ XS(_wrap_svn_wc_conflict_result_t_choice_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_result_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_result_t_choice_get" "', argument " "1"" of type '" "svn_wc_conflict_result_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_result_t_choice_get" "', argument " "1"" of type '" "struct svn_wc_conflict_result_t *""'");
}
- arg1 = (svn_wc_conflict_result_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_result_t *)(argp1);
result = (svn_wc_conflict_choice_t) ((arg1)->choice);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -10435,7 +10529,7 @@ XS(_wrap_svn_wc_conflict_result_t_choice_get) {
XS(_wrap_svn_wc_conflict_result_t_merged_file_set) {
{
- svn_wc_conflict_result_t *arg1 = (svn_wc_conflict_result_t *) 0 ;
+ struct svn_wc_conflict_result_t *arg1 = (struct svn_wc_conflict_result_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10450,9 +10544,9 @@ XS(_wrap_svn_wc_conflict_result_t_merged_file_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_result_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_result_t_merged_file_set" "', argument " "1"" of type '" "svn_wc_conflict_result_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_result_t_merged_file_set" "', argument " "1"" of type '" "struct svn_wc_conflict_result_t *""'");
}
- arg1 = (svn_wc_conflict_result_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_result_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_conflict_result_t_merged_file_set" "', argument " "2"" of type '" "char const *""'");
@@ -10480,7 +10574,7 @@ XS(_wrap_svn_wc_conflict_result_t_merged_file_set) {
XS(_wrap_svn_wc_conflict_result_t_merged_file_get) {
{
- svn_wc_conflict_result_t *arg1 = (svn_wc_conflict_result_t *) 0 ;
+ struct svn_wc_conflict_result_t *arg1 = (struct svn_wc_conflict_result_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10492,9 +10586,9 @@ XS(_wrap_svn_wc_conflict_result_t_merged_file_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_result_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_result_t_merged_file_get" "', argument " "1"" of type '" "svn_wc_conflict_result_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_result_t_merged_file_get" "', argument " "1"" of type '" "struct svn_wc_conflict_result_t *""'");
}
- arg1 = (svn_wc_conflict_result_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_result_t *)(argp1);
result = (char *) ((arg1)->merged_file);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -10508,7 +10602,7 @@ XS(_wrap_svn_wc_conflict_result_t_merged_file_get) {
XS(_wrap_svn_wc_conflict_result_t_save_merged_set) {
{
- svn_wc_conflict_result_t *arg1 = (svn_wc_conflict_result_t *) 0 ;
+ struct svn_wc_conflict_result_t *arg1 = (struct svn_wc_conflict_result_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10522,9 +10616,9 @@ XS(_wrap_svn_wc_conflict_result_t_save_merged_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_result_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_result_t_save_merged_set" "', argument " "1"" of type '" "svn_wc_conflict_result_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_result_t_save_merged_set" "', argument " "1"" of type '" "struct svn_wc_conflict_result_t *""'");
}
- arg1 = (svn_wc_conflict_result_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_result_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_conflict_result_t_save_merged_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -10545,7 +10639,7 @@ XS(_wrap_svn_wc_conflict_result_t_save_merged_set) {
XS(_wrap_svn_wc_conflict_result_t_save_merged_get) {
{
- svn_wc_conflict_result_t *arg1 = (svn_wc_conflict_result_t *) 0 ;
+ struct svn_wc_conflict_result_t *arg1 = (struct svn_wc_conflict_result_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10557,9 +10651,9 @@ XS(_wrap_svn_wc_conflict_result_t_save_merged_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_result_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_result_t_save_merged_get" "', argument " "1"" of type '" "svn_wc_conflict_result_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_conflict_result_t_save_merged_get" "', argument " "1"" of type '" "struct svn_wc_conflict_result_t *""'");
}
- arg1 = (svn_wc_conflict_result_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_result_t *)(argp1);
result = (svn_boolean_t) ((arg1)->save_merged);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -10574,14 +10668,14 @@ XS(_wrap_svn_wc_conflict_result_t_save_merged_get) {
XS(_wrap_new_svn_wc_conflict_result_t) {
{
int argvi = 0;
- svn_wc_conflict_result_t *result = 0 ;
+ struct svn_wc_conflict_result_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_wc_conflict_result_t();");
}
{
- result = (svn_wc_conflict_result_t *)calloc(1, sizeof(svn_wc_conflict_result_t));
+ result = (struct svn_wc_conflict_result_t *)calloc(1, sizeof(struct svn_wc_conflict_result_t));
@@ -10596,7 +10690,7 @@ XS(_wrap_new_svn_wc_conflict_result_t) {
XS(_wrap_delete_svn_wc_conflict_result_t) {
{
- svn_wc_conflict_result_t *arg1 = (svn_wc_conflict_result_t *) 0 ;
+ struct svn_wc_conflict_result_t *arg1 = (struct svn_wc_conflict_result_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10607,9 +10701,9 @@ XS(_wrap_delete_svn_wc_conflict_result_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_conflict_result_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_conflict_result_t" "', argument " "1"" of type '" "svn_wc_conflict_result_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_conflict_result_t" "', argument " "1"" of type '" "struct svn_wc_conflict_result_t *""'");
}
- arg1 = (svn_wc_conflict_result_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_result_t *)(argp1);
{
free((char *) arg1);
@@ -10682,7 +10776,7 @@ XS(_wrap_svn_wc_create_conflict_result) {
XS(_wrap_svn_wc_diff_callbacks4_t_file_opened_set) {
{
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,void *,apr_pool_t *) = (svn_error_t *(*)(svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10694,9 +10788,9 @@ XS(_wrap_svn_wc_diff_callbacks4_t_file_opened_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_file_opened_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks4_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_file_opened_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks4_t *""'");
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_boolean_t_p_svn_boolean_t_p_q_const__char_svn_revnum_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10718,7 +10812,7 @@ XS(_wrap_svn_wc_diff_callbacks4_t_file_opened_set) {
XS(_wrap_svn_wc_diff_callbacks4_t_file_opened_get) {
{
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10730,9 +10824,9 @@ XS(_wrap_svn_wc_diff_callbacks4_t_file_opened_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_file_opened_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks4_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_file_opened_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks4_t *""'");
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
result = (svn_error_t *(*)(svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,void *,apr_pool_t *)) ((arg1)->file_opened);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_boolean_t_p_svn_boolean_t_p_q_const__char_svn_revnum_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -10746,7 +10840,7 @@ XS(_wrap_svn_wc_diff_callbacks4_t_file_opened_get) {
XS(_wrap_svn_wc_diff_callbacks4_t_file_changed_set) {
{
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10758,9 +10852,9 @@ XS(_wrap_svn_wc_diff_callbacks4_t_file_changed_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_file_changed_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks4_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_file_changed_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks4_t *""'");
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10782,7 +10876,7 @@ XS(_wrap_svn_wc_diff_callbacks4_t_file_changed_set) {
XS(_wrap_svn_wc_diff_callbacks4_t_file_changed_get) {
{
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10794,9 +10888,9 @@ XS(_wrap_svn_wc_diff_callbacks4_t_file_changed_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_file_changed_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks4_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_file_changed_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks4_t *""'");
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *)) ((arg1)->file_changed);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -10810,7 +10904,7 @@ XS(_wrap_svn_wc_diff_callbacks4_t_file_changed_get) {
XS(_wrap_svn_wc_diff_callbacks4_t_file_added_set) {
{
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,char const *,svn_revnum_t,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,char const *,svn_revnum_t,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10822,9 +10916,9 @@ XS(_wrap_svn_wc_diff_callbacks4_t_file_added_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_file_added_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks4_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_file_added_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks4_t *""'");
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__apr_array_header_t_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10846,7 +10940,7 @@ XS(_wrap_svn_wc_diff_callbacks4_t_file_added_set) {
XS(_wrap_svn_wc_diff_callbacks4_t_file_added_get) {
{
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10858,9 +10952,9 @@ XS(_wrap_svn_wc_diff_callbacks4_t_file_added_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_file_added_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks4_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_file_added_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks4_t *""'");
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,char const *,svn_revnum_t,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *)) ((arg1)->file_added);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__apr_array_header_t_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -10874,7 +10968,7 @@ XS(_wrap_svn_wc_diff_callbacks4_t_file_added_get) {
XS(_wrap_svn_wc_diff_callbacks4_t_file_deleted_set) {
{
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10886,9 +10980,9 @@ XS(_wrap_svn_wc_diff_callbacks4_t_file_deleted_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_file_deleted_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks4_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_file_deleted_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks4_t *""'");
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10910,7 +11004,7 @@ XS(_wrap_svn_wc_diff_callbacks4_t_file_deleted_set) {
XS(_wrap_svn_wc_diff_callbacks4_t_file_deleted_get) {
{
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10922,9 +11016,9 @@ XS(_wrap_svn_wc_diff_callbacks4_t_file_deleted_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_file_deleted_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks4_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_file_deleted_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks4_t *""'");
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *,apr_pool_t *)) ((arg1)->file_deleted);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -10938,7 +11032,7 @@ XS(_wrap_svn_wc_diff_callbacks4_t_file_deleted_get) {
XS(_wrap_svn_wc_diff_callbacks4_t_dir_deleted_set) {
{
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *,apr_pool_t *) = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10950,9 +11044,9 @@ XS(_wrap_svn_wc_diff_callbacks4_t_dir_deleted_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_dir_deleted_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks4_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_dir_deleted_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks4_t *""'");
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10974,7 +11068,7 @@ XS(_wrap_svn_wc_diff_callbacks4_t_dir_deleted_set) {
XS(_wrap_svn_wc_diff_callbacks4_t_dir_deleted_get) {
{
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -10986,9 +11080,9 @@ XS(_wrap_svn_wc_diff_callbacks4_t_dir_deleted_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_dir_deleted_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks4_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_dir_deleted_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks4_t *""'");
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *,apr_pool_t *)) ((arg1)->dir_deleted);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -11002,7 +11096,7 @@ XS(_wrap_svn_wc_diff_callbacks4_t_dir_deleted_get) {
XS(_wrap_svn_wc_diff_callbacks4_t_dir_opened_set) {
{
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_boolean_t *,svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,void *,apr_pool_t *) = (svn_error_t *(*)(svn_boolean_t *,svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11014,9 +11108,9 @@ XS(_wrap_svn_wc_diff_callbacks4_t_dir_opened_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_dir_opened_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks4_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_dir_opened_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks4_t *""'");
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_boolean_t_p_svn_boolean_t_p_svn_boolean_t_p_q_const__char_svn_revnum_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11038,7 +11132,7 @@ XS(_wrap_svn_wc_diff_callbacks4_t_dir_opened_set) {
XS(_wrap_svn_wc_diff_callbacks4_t_dir_opened_get) {
{
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11050,9 +11144,9 @@ XS(_wrap_svn_wc_diff_callbacks4_t_dir_opened_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_dir_opened_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks4_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_dir_opened_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks4_t *""'");
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
result = (svn_error_t *(*)(svn_boolean_t *,svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,void *,apr_pool_t *)) ((arg1)->dir_opened);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_boolean_t_p_svn_boolean_t_p_svn_boolean_t_p_q_const__char_svn_revnum_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -11066,7 +11160,7 @@ XS(_wrap_svn_wc_diff_callbacks4_t_dir_opened_get) {
XS(_wrap_svn_wc_diff_callbacks4_t_dir_added_set) {
{
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_notify_state_t *,svn_boolean_t *,svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,char const *,svn_revnum_t,void *,apr_pool_t *) = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,char const *,svn_revnum_t,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11078,9 +11172,9 @@ XS(_wrap_svn_wc_diff_callbacks4_t_dir_added_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_dir_added_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks4_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_dir_added_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks4_t *""'");
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_boolean_t_p_svn_boolean_t_p_svn_boolean_t_p_q_const__char_svn_revnum_t_p_q_const__char_svn_revnum_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11102,7 +11196,7 @@ XS(_wrap_svn_wc_diff_callbacks4_t_dir_added_set) {
XS(_wrap_svn_wc_diff_callbacks4_t_dir_added_get) {
{
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11114,9 +11208,9 @@ XS(_wrap_svn_wc_diff_callbacks4_t_dir_added_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_dir_added_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks4_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_dir_added_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks4_t *""'");
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,char const *,svn_revnum_t,void *,apr_pool_t *)) ((arg1)->dir_added);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_boolean_t_p_svn_boolean_t_p_svn_boolean_t_p_q_const__char_svn_revnum_t_p_q_const__char_svn_revnum_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -11130,7 +11224,7 @@ XS(_wrap_svn_wc_diff_callbacks4_t_dir_added_get) {
XS(_wrap_svn_wc_diff_callbacks4_t_dir_props_changed_set) {
{
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_boolean_t,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_boolean_t,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11142,9 +11236,9 @@ XS(_wrap_svn_wc_diff_callbacks4_t_dir_props_changed_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_dir_props_changed_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks4_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_dir_props_changed_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks4_t *""'");
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_svn_boolean_t_p_q_const__apr_array_header_t_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11166,7 +11260,7 @@ XS(_wrap_svn_wc_diff_callbacks4_t_dir_props_changed_set) {
XS(_wrap_svn_wc_diff_callbacks4_t_dir_props_changed_get) {
{
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11178,9 +11272,9 @@ XS(_wrap_svn_wc_diff_callbacks4_t_dir_props_changed_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_dir_props_changed_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks4_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_dir_props_changed_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks4_t *""'");
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_boolean_t,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *)) ((arg1)->dir_props_changed);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_svn_boolean_t_p_q_const__apr_array_header_t_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -11194,7 +11288,7 @@ XS(_wrap_svn_wc_diff_callbacks4_t_dir_props_changed_get) {
XS(_wrap_svn_wc_diff_callbacks4_t_dir_closed_set) {
{
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_boolean_t,void *,apr_pool_t *) = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_boolean_t,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11206,9 +11300,9 @@ XS(_wrap_svn_wc_diff_callbacks4_t_dir_closed_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_dir_closed_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks4_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_dir_closed_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks4_t *""'");
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_svn_boolean_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11230,7 +11324,7 @@ XS(_wrap_svn_wc_diff_callbacks4_t_dir_closed_set) {
XS(_wrap_svn_wc_diff_callbacks4_t_dir_closed_get) {
{
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11242,9 +11336,9 @@ XS(_wrap_svn_wc_diff_callbacks4_t_dir_closed_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_dir_closed_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks4_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks4_t_dir_closed_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks4_t *""'");
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_boolean_t,void *,apr_pool_t *)) ((arg1)->dir_closed);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_svn_boolean_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -11259,14 +11353,14 @@ XS(_wrap_svn_wc_diff_callbacks4_t_dir_closed_get) {
XS(_wrap_new_svn_wc_diff_callbacks4_t) {
{
int argvi = 0;
- svn_wc_diff_callbacks4_t *result = 0 ;
+ struct svn_wc_diff_callbacks4_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_wc_diff_callbacks4_t();");
}
{
- result = (svn_wc_diff_callbacks4_t *)calloc(1, sizeof(svn_wc_diff_callbacks4_t));
+ result = (struct svn_wc_diff_callbacks4_t *)calloc(1, sizeof(struct svn_wc_diff_callbacks4_t));
@@ -11281,7 +11375,7 @@ XS(_wrap_new_svn_wc_diff_callbacks4_t) {
XS(_wrap_delete_svn_wc_diff_callbacks4_t) {
{
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11292,9 +11386,9 @@ XS(_wrap_delete_svn_wc_diff_callbacks4_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_diff_callbacks4_t" "', argument " "1"" of type '" "svn_wc_diff_callbacks4_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_diff_callbacks4_t" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks4_t *""'");
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
{
free((char *) arg1);
@@ -11313,7 +11407,7 @@ XS(_wrap_delete_svn_wc_diff_callbacks4_t) {
XS(_wrap_svn_wc_diff_callbacks3_t_file_changed_set) {
{
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11325,9 +11419,9 @@ XS(_wrap_svn_wc_diff_callbacks3_t_file_changed_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_file_changed_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_file_changed_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks3_t *""'");
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11349,7 +11443,7 @@ XS(_wrap_svn_wc_diff_callbacks3_t_file_changed_set) {
XS(_wrap_svn_wc_diff_callbacks3_t_file_changed_get) {
{
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11361,9 +11455,9 @@ XS(_wrap_svn_wc_diff_callbacks3_t_file_changed_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_file_changed_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_file_changed_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks3_t *""'");
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) ((arg1)->file_changed);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t); argvi++ ;
@@ -11377,7 +11471,7 @@ XS(_wrap_svn_wc_diff_callbacks3_t_file_changed_get) {
XS(_wrap_svn_wc_diff_callbacks3_t_file_added_set) {
{
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11389,9 +11483,9 @@ XS(_wrap_svn_wc_diff_callbacks3_t_file_added_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_file_added_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_file_added_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks3_t *""'");
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11413,7 +11507,7 @@ XS(_wrap_svn_wc_diff_callbacks3_t_file_added_set) {
XS(_wrap_svn_wc_diff_callbacks3_t_file_added_get) {
{
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11425,9 +11519,9 @@ XS(_wrap_svn_wc_diff_callbacks3_t_file_added_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_file_added_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_file_added_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks3_t *""'");
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) ((arg1)->file_added);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t); argvi++ ;
@@ -11441,7 +11535,7 @@ XS(_wrap_svn_wc_diff_callbacks3_t_file_added_get) {
XS(_wrap_svn_wc_diff_callbacks3_t_file_deleted_set) {
{
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11453,9 +11547,9 @@ XS(_wrap_svn_wc_diff_callbacks3_t_file_deleted_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_file_deleted_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_file_deleted_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks3_t *""'");
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_hash_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11477,7 +11571,7 @@ XS(_wrap_svn_wc_diff_callbacks3_t_file_deleted_set) {
XS(_wrap_svn_wc_diff_callbacks3_t_file_deleted_get) {
{
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11489,9 +11583,9 @@ XS(_wrap_svn_wc_diff_callbacks3_t_file_deleted_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_file_deleted_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_file_deleted_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks3_t *""'");
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *)) ((arg1)->file_deleted);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_hash_t_p_void__p_svn_error_t); argvi++ ;
@@ -11505,7 +11599,7 @@ XS(_wrap_svn_wc_diff_callbacks3_t_file_deleted_get) {
XS(_wrap_svn_wc_diff_callbacks3_t_dir_added_set) {
{
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_revnum_t,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_revnum_t,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11517,9 +11611,9 @@ XS(_wrap_svn_wc_diff_callbacks3_t_dir_added_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_dir_added_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_dir_added_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks3_t *""'");
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_svn_revnum_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11541,7 +11635,7 @@ XS(_wrap_svn_wc_diff_callbacks3_t_dir_added_set) {
XS(_wrap_svn_wc_diff_callbacks3_t_dir_added_get) {
{
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11553,9 +11647,9 @@ XS(_wrap_svn_wc_diff_callbacks3_t_dir_added_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_dir_added_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_dir_added_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks3_t *""'");
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_revnum_t,void *)) ((arg1)->dir_added);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_svn_revnum_t_p_void__p_svn_error_t); argvi++ ;
@@ -11569,7 +11663,7 @@ XS(_wrap_svn_wc_diff_callbacks3_t_dir_added_get) {
XS(_wrap_svn_wc_diff_callbacks3_t_dir_deleted_set) {
{
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11581,9 +11675,9 @@ XS(_wrap_svn_wc_diff_callbacks3_t_dir_deleted_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_dir_deleted_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_dir_deleted_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks3_t *""'");
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11605,7 +11699,7 @@ XS(_wrap_svn_wc_diff_callbacks3_t_dir_deleted_set) {
XS(_wrap_svn_wc_diff_callbacks3_t_dir_deleted_get) {
{
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11617,9 +11711,9 @@ XS(_wrap_svn_wc_diff_callbacks3_t_dir_deleted_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_dir_deleted_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_dir_deleted_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks3_t *""'");
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *)) ((arg1)->dir_deleted);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_void__p_svn_error_t); argvi++ ;
@@ -11633,7 +11727,7 @@ XS(_wrap_svn_wc_diff_callbacks3_t_dir_deleted_get) {
XS(_wrap_svn_wc_diff_callbacks3_t_dir_props_changed_set) {
{
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11645,9 +11739,9 @@ XS(_wrap_svn_wc_diff_callbacks3_t_dir_props_changed_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_dir_props_changed_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_dir_props_changed_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks3_t *""'");
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11669,7 +11763,7 @@ XS(_wrap_svn_wc_diff_callbacks3_t_dir_props_changed_set) {
XS(_wrap_svn_wc_diff_callbacks3_t_dir_props_changed_get) {
{
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11681,9 +11775,9 @@ XS(_wrap_svn_wc_diff_callbacks3_t_dir_props_changed_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_dir_props_changed_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_dir_props_changed_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks3_t *""'");
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) ((arg1)->dir_props_changed);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t); argvi++ ;
@@ -11697,7 +11791,7 @@ XS(_wrap_svn_wc_diff_callbacks3_t_dir_props_changed_get) {
XS(_wrap_svn_wc_diff_callbacks3_t_dir_opened_set) {
{
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_boolean_t *,char const *,svn_revnum_t,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_boolean_t *,char const *,svn_revnum_t,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11709,9 +11803,9 @@ XS(_wrap_svn_wc_diff_callbacks3_t_dir_opened_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_dir_opened_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_dir_opened_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks3_t *""'");
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_boolean_t_p_q_const__char_svn_revnum_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11733,7 +11827,7 @@ XS(_wrap_svn_wc_diff_callbacks3_t_dir_opened_set) {
XS(_wrap_svn_wc_diff_callbacks3_t_dir_opened_get) {
{
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11745,9 +11839,9 @@ XS(_wrap_svn_wc_diff_callbacks3_t_dir_opened_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_dir_opened_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_dir_opened_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks3_t *""'");
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_boolean_t *,char const *,svn_revnum_t,void *)) ((arg1)->dir_opened);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_boolean_t_p_q_const__char_svn_revnum_t_p_void__p_svn_error_t); argvi++ ;
@@ -11761,7 +11855,7 @@ XS(_wrap_svn_wc_diff_callbacks3_t_dir_opened_get) {
XS(_wrap_svn_wc_diff_callbacks3_t_dir_closed_set) {
{
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11773,9 +11867,9 @@ XS(_wrap_svn_wc_diff_callbacks3_t_dir_closed_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_dir_closed_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_dir_closed_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks3_t *""'");
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11797,7 +11891,7 @@ XS(_wrap_svn_wc_diff_callbacks3_t_dir_closed_set) {
XS(_wrap_svn_wc_diff_callbacks3_t_dir_closed_get) {
{
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11809,9 +11903,9 @@ XS(_wrap_svn_wc_diff_callbacks3_t_dir_closed_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_dir_closed_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks3_t_dir_closed_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks3_t *""'");
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *)) ((arg1)->dir_closed);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_void__p_svn_error_t); argvi++ ;
@@ -11826,14 +11920,14 @@ XS(_wrap_svn_wc_diff_callbacks3_t_dir_closed_get) {
XS(_wrap_new_svn_wc_diff_callbacks3_t) {
{
int argvi = 0;
- svn_wc_diff_callbacks3_t *result = 0 ;
+ struct svn_wc_diff_callbacks3_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_wc_diff_callbacks3_t();");
}
{
- result = (svn_wc_diff_callbacks3_t *)calloc(1, sizeof(svn_wc_diff_callbacks3_t));
+ result = (struct svn_wc_diff_callbacks3_t *)calloc(1, sizeof(struct svn_wc_diff_callbacks3_t));
@@ -11848,7 +11942,7 @@ XS(_wrap_new_svn_wc_diff_callbacks3_t) {
XS(_wrap_delete_svn_wc_diff_callbacks3_t) {
{
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11859,9 +11953,9 @@ XS(_wrap_delete_svn_wc_diff_callbacks3_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_diff_callbacks3_t" "', argument " "1"" of type '" "svn_wc_diff_callbacks3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_diff_callbacks3_t" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks3_t *""'");
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
{
free((char *) arg1);
@@ -11880,7 +11974,7 @@ XS(_wrap_delete_svn_wc_diff_callbacks3_t) {
XS(_wrap_svn_wc_diff_callbacks2_t_file_changed_set) {
{
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11892,9 +11986,9 @@ XS(_wrap_svn_wc_diff_callbacks2_t_file_changed_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks2_t_file_changed_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks2_t_file_changed_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks2_t *""'");
}
- arg1 = (svn_wc_diff_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11916,7 +12010,7 @@ XS(_wrap_svn_wc_diff_callbacks2_t_file_changed_set) {
XS(_wrap_svn_wc_diff_callbacks2_t_file_changed_get) {
{
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11928,9 +12022,9 @@ XS(_wrap_svn_wc_diff_callbacks2_t_file_changed_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks2_t_file_changed_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks2_t_file_changed_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks2_t *""'");
}
- arg1 = (svn_wc_diff_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) ((arg1)->file_changed);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t); argvi++ ;
@@ -11944,7 +12038,7 @@ XS(_wrap_svn_wc_diff_callbacks2_t_file_changed_get) {
XS(_wrap_svn_wc_diff_callbacks2_t_file_added_set) {
{
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11956,9 +12050,9 @@ XS(_wrap_svn_wc_diff_callbacks2_t_file_added_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks2_t_file_added_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks2_t_file_added_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks2_t *""'");
}
- arg1 = (svn_wc_diff_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11980,7 +12074,7 @@ XS(_wrap_svn_wc_diff_callbacks2_t_file_added_set) {
XS(_wrap_svn_wc_diff_callbacks2_t_file_added_get) {
{
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -11992,9 +12086,9 @@ XS(_wrap_svn_wc_diff_callbacks2_t_file_added_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks2_t_file_added_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks2_t_file_added_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks2_t *""'");
}
- arg1 = (svn_wc_diff_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) ((arg1)->file_added);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t); argvi++ ;
@@ -12008,7 +12102,7 @@ XS(_wrap_svn_wc_diff_callbacks2_t_file_added_get) {
XS(_wrap_svn_wc_diff_callbacks2_t_file_deleted_set) {
{
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12020,9 +12114,9 @@ XS(_wrap_svn_wc_diff_callbacks2_t_file_deleted_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks2_t_file_deleted_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks2_t_file_deleted_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks2_t *""'");
}
- arg1 = (svn_wc_diff_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_hash_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -12044,7 +12138,7 @@ XS(_wrap_svn_wc_diff_callbacks2_t_file_deleted_set) {
XS(_wrap_svn_wc_diff_callbacks2_t_file_deleted_get) {
{
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12056,9 +12150,9 @@ XS(_wrap_svn_wc_diff_callbacks2_t_file_deleted_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks2_t_file_deleted_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks2_t_file_deleted_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks2_t *""'");
}
- arg1 = (svn_wc_diff_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *)) ((arg1)->file_deleted);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_hash_t_p_void__p_svn_error_t); argvi++ ;
@@ -12072,7 +12166,7 @@ XS(_wrap_svn_wc_diff_callbacks2_t_file_deleted_get) {
XS(_wrap_svn_wc_diff_callbacks2_t_dir_added_set) {
{
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,svn_revnum_t,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,svn_revnum_t,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12084,9 +12178,9 @@ XS(_wrap_svn_wc_diff_callbacks2_t_dir_added_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks2_t_dir_added_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks2_t_dir_added_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks2_t *""'");
}
- arg1 = (svn_wc_diff_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_svn_revnum_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -12108,7 +12202,7 @@ XS(_wrap_svn_wc_diff_callbacks2_t_dir_added_set) {
XS(_wrap_svn_wc_diff_callbacks2_t_dir_added_get) {
{
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12120,9 +12214,9 @@ XS(_wrap_svn_wc_diff_callbacks2_t_dir_added_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks2_t_dir_added_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks2_t_dir_added_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks2_t *""'");
}
- arg1 = (svn_wc_diff_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,svn_revnum_t,void *)) ((arg1)->dir_added);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_svn_revnum_t_p_void__p_svn_error_t); argvi++ ;
@@ -12136,7 +12230,7 @@ XS(_wrap_svn_wc_diff_callbacks2_t_dir_added_get) {
XS(_wrap_svn_wc_diff_callbacks2_t_dir_deleted_set) {
{
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12148,9 +12242,9 @@ XS(_wrap_svn_wc_diff_callbacks2_t_dir_deleted_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks2_t_dir_deleted_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks2_t_dir_deleted_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks2_t *""'");
}
- arg1 = (svn_wc_diff_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -12172,7 +12266,7 @@ XS(_wrap_svn_wc_diff_callbacks2_t_dir_deleted_set) {
XS(_wrap_svn_wc_diff_callbacks2_t_dir_deleted_get) {
{
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12184,9 +12278,9 @@ XS(_wrap_svn_wc_diff_callbacks2_t_dir_deleted_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks2_t_dir_deleted_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks2_t_dir_deleted_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks2_t *""'");
}
- arg1 = (svn_wc_diff_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,void *)) ((arg1)->dir_deleted);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_void__p_svn_error_t); argvi++ ;
@@ -12200,7 +12294,7 @@ XS(_wrap_svn_wc_diff_callbacks2_t_dir_deleted_get) {
XS(_wrap_svn_wc_diff_callbacks2_t_dir_props_changed_set) {
{
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12212,9 +12306,9 @@ XS(_wrap_svn_wc_diff_callbacks2_t_dir_props_changed_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks2_t_dir_props_changed_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks2_t_dir_props_changed_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks2_t *""'");
}
- arg1 = (svn_wc_diff_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -12236,7 +12330,7 @@ XS(_wrap_svn_wc_diff_callbacks2_t_dir_props_changed_set) {
XS(_wrap_svn_wc_diff_callbacks2_t_dir_props_changed_get) {
{
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12248,9 +12342,9 @@ XS(_wrap_svn_wc_diff_callbacks2_t_dir_props_changed_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks2_t_dir_props_changed_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks2_t_dir_props_changed_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks2_t *""'");
}
- arg1 = (svn_wc_diff_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) ((arg1)->dir_props_changed);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t); argvi++ ;
@@ -12265,14 +12359,14 @@ XS(_wrap_svn_wc_diff_callbacks2_t_dir_props_changed_get) {
XS(_wrap_new_svn_wc_diff_callbacks2_t) {
{
int argvi = 0;
- svn_wc_diff_callbacks2_t *result = 0 ;
+ struct svn_wc_diff_callbacks2_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_wc_diff_callbacks2_t();");
}
{
- result = (svn_wc_diff_callbacks2_t *)calloc(1, sizeof(svn_wc_diff_callbacks2_t));
+ result = (struct svn_wc_diff_callbacks2_t *)calloc(1, sizeof(struct svn_wc_diff_callbacks2_t));
@@ -12287,7 +12381,7 @@ XS(_wrap_new_svn_wc_diff_callbacks2_t) {
XS(_wrap_delete_svn_wc_diff_callbacks2_t) {
{
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12298,9 +12392,9 @@ XS(_wrap_delete_svn_wc_diff_callbacks2_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks2_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_diff_callbacks2_t" "', argument " "1"" of type '" "svn_wc_diff_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_diff_callbacks2_t" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks2_t *""'");
}
- arg1 = (svn_wc_diff_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)(argp1);
{
free((char *) arg1);
@@ -12319,7 +12413,7 @@ XS(_wrap_delete_svn_wc_diff_callbacks2_t) {
XS(_wrap_svn_wc_diff_callbacks_t_file_changed_set) {
{
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12331,9 +12425,9 @@ XS(_wrap_svn_wc_diff_callbacks_t_file_changed_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks_t_file_changed_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks_t_file_changed_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks_t *""'");
}
- arg1 = (svn_wc_diff_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -12355,7 +12449,7 @@ XS(_wrap_svn_wc_diff_callbacks_t_file_changed_set) {
XS(_wrap_svn_wc_diff_callbacks_t_file_changed_get) {
{
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12367,9 +12461,9 @@ XS(_wrap_svn_wc_diff_callbacks_t_file_changed_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks_t_file_changed_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks_t_file_changed_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks_t *""'");
}
- arg1 = (svn_wc_diff_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,void *)) ((arg1)->file_changed);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t); argvi++ ;
@@ -12383,7 +12477,7 @@ XS(_wrap_svn_wc_diff_callbacks_t_file_changed_get) {
XS(_wrap_svn_wc_diff_callbacks_t_file_added_set) {
{
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12395,9 +12489,9 @@ XS(_wrap_svn_wc_diff_callbacks_t_file_added_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks_t_file_added_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks_t_file_added_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks_t *""'");
}
- arg1 = (svn_wc_diff_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -12419,7 +12513,7 @@ XS(_wrap_svn_wc_diff_callbacks_t_file_added_set) {
XS(_wrap_svn_wc_diff_callbacks_t_file_added_get) {
{
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12431,9 +12525,9 @@ XS(_wrap_svn_wc_diff_callbacks_t_file_added_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks_t_file_added_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks_t_file_added_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks_t *""'");
}
- arg1 = (svn_wc_diff_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,void *)) ((arg1)->file_added);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t); argvi++ ;
@@ -12447,7 +12541,7 @@ XS(_wrap_svn_wc_diff_callbacks_t_file_added_get) {
XS(_wrap_svn_wc_diff_callbacks_t_file_deleted_set) {
{
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,char const *,char const *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,char const *,char const *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12459,9 +12553,9 @@ XS(_wrap_svn_wc_diff_callbacks_t_file_deleted_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks_t_file_deleted_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks_t_file_deleted_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks_t *""'");
}
- arg1 = (svn_wc_diff_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -12483,7 +12577,7 @@ XS(_wrap_svn_wc_diff_callbacks_t_file_deleted_set) {
XS(_wrap_svn_wc_diff_callbacks_t_file_deleted_get) {
{
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12495,9 +12589,9 @@ XS(_wrap_svn_wc_diff_callbacks_t_file_deleted_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks_t_file_deleted_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks_t_file_deleted_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks_t *""'");
}
- arg1 = (svn_wc_diff_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,char const *,char const *,void *)) ((arg1)->file_deleted);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_void__p_svn_error_t); argvi++ ;
@@ -12511,7 +12605,7 @@ XS(_wrap_svn_wc_diff_callbacks_t_file_deleted_get) {
XS(_wrap_svn_wc_diff_callbacks_t_dir_added_set) {
{
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,svn_revnum_t,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,svn_revnum_t,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12523,9 +12617,9 @@ XS(_wrap_svn_wc_diff_callbacks_t_dir_added_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks_t_dir_added_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks_t_dir_added_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks_t *""'");
}
- arg1 = (svn_wc_diff_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_svn_revnum_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -12547,7 +12641,7 @@ XS(_wrap_svn_wc_diff_callbacks_t_dir_added_set) {
XS(_wrap_svn_wc_diff_callbacks_t_dir_added_get) {
{
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12559,9 +12653,9 @@ XS(_wrap_svn_wc_diff_callbacks_t_dir_added_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks_t_dir_added_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks_t_dir_added_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks_t *""'");
}
- arg1 = (svn_wc_diff_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,svn_revnum_t,void *)) ((arg1)->dir_added);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_svn_revnum_t_p_void__p_svn_error_t); argvi++ ;
@@ -12575,7 +12669,7 @@ XS(_wrap_svn_wc_diff_callbacks_t_dir_added_get) {
XS(_wrap_svn_wc_diff_callbacks_t_dir_deleted_set) {
{
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12587,9 +12681,9 @@ XS(_wrap_svn_wc_diff_callbacks_t_dir_deleted_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks_t_dir_deleted_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks_t_dir_deleted_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks_t *""'");
}
- arg1 = (svn_wc_diff_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -12611,7 +12705,7 @@ XS(_wrap_svn_wc_diff_callbacks_t_dir_deleted_set) {
XS(_wrap_svn_wc_diff_callbacks_t_dir_deleted_get) {
{
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12623,9 +12717,9 @@ XS(_wrap_svn_wc_diff_callbacks_t_dir_deleted_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks_t_dir_deleted_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks_t_dir_deleted_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks_t *""'");
}
- arg1 = (svn_wc_diff_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,void *)) ((arg1)->dir_deleted);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_void__p_svn_error_t); argvi++ ;
@@ -12639,7 +12733,7 @@ XS(_wrap_svn_wc_diff_callbacks_t_dir_deleted_get) {
XS(_wrap_svn_wc_diff_callbacks_t_props_changed_set) {
{
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12651,9 +12745,9 @@ XS(_wrap_svn_wc_diff_callbacks_t_props_changed_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks_t_props_changed_set" "', argument " "1"" of type '" "svn_wc_diff_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks_t_props_changed_set" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks_t *""'");
}
- arg1 = (svn_wc_diff_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -12675,7 +12769,7 @@ XS(_wrap_svn_wc_diff_callbacks_t_props_changed_set) {
XS(_wrap_svn_wc_diff_callbacks_t_props_changed_get) {
{
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12687,9 +12781,9 @@ XS(_wrap_svn_wc_diff_callbacks_t_props_changed_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks_t_props_changed_get" "', argument " "1"" of type '" "svn_wc_diff_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_diff_callbacks_t_props_changed_get" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks_t *""'");
}
- arg1 = (svn_wc_diff_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) ((arg1)->props_changed);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t); argvi++ ;
@@ -12704,14 +12798,14 @@ XS(_wrap_svn_wc_diff_callbacks_t_props_changed_get) {
XS(_wrap_new_svn_wc_diff_callbacks_t) {
{
int argvi = 0;
- svn_wc_diff_callbacks_t *result = 0 ;
+ struct svn_wc_diff_callbacks_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_wc_diff_callbacks_t();");
}
{
- result = (svn_wc_diff_callbacks_t *)calloc(1, sizeof(svn_wc_diff_callbacks_t));
+ result = (struct svn_wc_diff_callbacks_t *)calloc(1, sizeof(struct svn_wc_diff_callbacks_t));
@@ -12726,7 +12820,7 @@ XS(_wrap_new_svn_wc_diff_callbacks_t) {
XS(_wrap_delete_svn_wc_diff_callbacks_t) {
{
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -12737,9 +12831,9 @@ XS(_wrap_delete_svn_wc_diff_callbacks_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_diff_callbacks_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_diff_callbacks_t" "', argument " "1"" of type '" "svn_wc_diff_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_diff_callbacks_t" "', argument " "1"" of type '" "struct svn_wc_diff_callbacks_t *""'");
}
- arg1 = (svn_wc_diff_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks_t *)(argp1);
{
free((char *) arg1);
@@ -13015,7 +13109,7 @@ XS(_wrap_svn_wc_text_modified_p2) {
}
arg1 = &temp1;
if ((items < 3) || (items > 4)) {
- SWIG_croak("Usage: svn_wc_text_modified_p2(wc_ctx,local_abspath,force_comparison,scratch_pool);");
+ SWIG_croak("Usage: svn_wc_text_modified_p2(wc_ctx,local_abspath,unused,scratch_pool);");
}
res2 = SWIG_ConvertPtr(ST(0), &argp2,SWIGTYPE_p_svn_wc_context_t, 0 | 0 );
if (!SWIG_IsOK(res2)) {
@@ -13335,7 +13429,7 @@ XS(_wrap_svn_wc_props_modified_p) {
XS(_wrap_svn_wc_entry_t_name_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13350,9 +13444,9 @@ XS(_wrap_svn_wc_entry_t_name_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_name_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_name_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_entry_t_name_set" "', argument " "2"" of type '" "char const *""'");
@@ -13380,7 +13474,7 @@ XS(_wrap_svn_wc_entry_t_name_set) {
XS(_wrap_svn_wc_entry_t_name_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13392,9 +13486,9 @@ XS(_wrap_svn_wc_entry_t_name_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_name_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_name_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->name);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -13408,7 +13502,7 @@ XS(_wrap_svn_wc_entry_t_name_get) {
XS(_wrap_svn_wc_entry_t_revision_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13422,9 +13516,9 @@ XS(_wrap_svn_wc_entry_t_revision_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_revision_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_revision_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_entry_t_revision_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -13445,7 +13539,7 @@ XS(_wrap_svn_wc_entry_t_revision_set) {
XS(_wrap_svn_wc_entry_t_revision_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13457,9 +13551,9 @@ XS(_wrap_svn_wc_entry_t_revision_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_revision_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_revision_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_revnum_t) ((arg1)->revision);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -13473,7 +13567,7 @@ XS(_wrap_svn_wc_entry_t_revision_get) {
XS(_wrap_svn_wc_entry_t_url_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13488,9 +13582,9 @@ XS(_wrap_svn_wc_entry_t_url_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_url_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_url_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_entry_t_url_set" "', argument " "2"" of type '" "char const *""'");
@@ -13518,7 +13612,7 @@ XS(_wrap_svn_wc_entry_t_url_set) {
XS(_wrap_svn_wc_entry_t_url_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13530,9 +13624,9 @@ XS(_wrap_svn_wc_entry_t_url_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_url_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_url_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->url);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -13546,7 +13640,7 @@ XS(_wrap_svn_wc_entry_t_url_get) {
XS(_wrap_svn_wc_entry_t_repos_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13561,9 +13655,9 @@ XS(_wrap_svn_wc_entry_t_repos_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_repos_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_repos_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_entry_t_repos_set" "', argument " "2"" of type '" "char const *""'");
@@ -13589,7 +13683,7 @@ XS(_wrap_svn_wc_entry_t_repos_set) {
XS(_wrap_svn_wc_entry_t_repos_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13601,9 +13695,9 @@ XS(_wrap_svn_wc_entry_t_repos_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_repos_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_repos_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->repos);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -13617,7 +13711,7 @@ XS(_wrap_svn_wc_entry_t_repos_get) {
XS(_wrap_svn_wc_entry_t_uuid_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13632,9 +13726,9 @@ XS(_wrap_svn_wc_entry_t_uuid_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_uuid_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_uuid_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_entry_t_uuid_set" "', argument " "2"" of type '" "char const *""'");
@@ -13660,7 +13754,7 @@ XS(_wrap_svn_wc_entry_t_uuid_set) {
XS(_wrap_svn_wc_entry_t_uuid_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13672,9 +13766,9 @@ XS(_wrap_svn_wc_entry_t_uuid_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_uuid_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_uuid_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->uuid);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -13688,7 +13782,7 @@ XS(_wrap_svn_wc_entry_t_uuid_get) {
XS(_wrap_svn_wc_entry_t_kind_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13702,9 +13796,9 @@ XS(_wrap_svn_wc_entry_t_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_kind_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_kind_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_entry_t_kind_set" "', argument " "2"" of type '" "svn_node_kind_t""'");
@@ -13725,7 +13819,7 @@ XS(_wrap_svn_wc_entry_t_kind_set) {
XS(_wrap_svn_wc_entry_t_kind_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13737,9 +13831,9 @@ XS(_wrap_svn_wc_entry_t_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_kind_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_kind_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -13753,7 +13847,7 @@ XS(_wrap_svn_wc_entry_t_kind_get) {
XS(_wrap_svn_wc_entry_t_schedule_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_wc_schedule_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13767,9 +13861,9 @@ XS(_wrap_svn_wc_entry_t_schedule_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_schedule_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_schedule_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_entry_t_schedule_set" "', argument " "2"" of type '" "svn_wc_schedule_t""'");
@@ -13790,7 +13884,7 @@ XS(_wrap_svn_wc_entry_t_schedule_set) {
XS(_wrap_svn_wc_entry_t_schedule_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13802,9 +13896,9 @@ XS(_wrap_svn_wc_entry_t_schedule_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_schedule_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_schedule_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_wc_schedule_t) ((arg1)->schedule);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -13818,7 +13912,7 @@ XS(_wrap_svn_wc_entry_t_schedule_get) {
XS(_wrap_svn_wc_entry_t_copied_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13832,9 +13926,9 @@ XS(_wrap_svn_wc_entry_t_copied_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_copied_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_copied_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_entry_t_copied_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -13855,7 +13949,7 @@ XS(_wrap_svn_wc_entry_t_copied_set) {
XS(_wrap_svn_wc_entry_t_copied_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13867,9 +13961,9 @@ XS(_wrap_svn_wc_entry_t_copied_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_copied_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_copied_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_boolean_t) ((arg1)->copied);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -13883,7 +13977,7 @@ XS(_wrap_svn_wc_entry_t_copied_get) {
XS(_wrap_svn_wc_entry_t_deleted_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13897,9 +13991,9 @@ XS(_wrap_svn_wc_entry_t_deleted_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_deleted_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_deleted_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_entry_t_deleted_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -13920,7 +14014,7 @@ XS(_wrap_svn_wc_entry_t_deleted_set) {
XS(_wrap_svn_wc_entry_t_deleted_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13932,9 +14026,9 @@ XS(_wrap_svn_wc_entry_t_deleted_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_deleted_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_deleted_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_boolean_t) ((arg1)->deleted);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -13948,7 +14042,7 @@ XS(_wrap_svn_wc_entry_t_deleted_get) {
XS(_wrap_svn_wc_entry_t_absent_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13962,9 +14056,9 @@ XS(_wrap_svn_wc_entry_t_absent_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_absent_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_absent_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_entry_t_absent_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -13985,7 +14079,7 @@ XS(_wrap_svn_wc_entry_t_absent_set) {
XS(_wrap_svn_wc_entry_t_absent_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -13997,9 +14091,9 @@ XS(_wrap_svn_wc_entry_t_absent_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_absent_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_absent_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_boolean_t) ((arg1)->absent);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -14013,7 +14107,7 @@ XS(_wrap_svn_wc_entry_t_absent_get) {
XS(_wrap_svn_wc_entry_t_incomplete_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14027,9 +14121,9 @@ XS(_wrap_svn_wc_entry_t_incomplete_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_incomplete_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_incomplete_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_entry_t_incomplete_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -14050,7 +14144,7 @@ XS(_wrap_svn_wc_entry_t_incomplete_set) {
XS(_wrap_svn_wc_entry_t_incomplete_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14062,9 +14156,9 @@ XS(_wrap_svn_wc_entry_t_incomplete_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_incomplete_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_incomplete_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_boolean_t) ((arg1)->incomplete);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -14078,7 +14172,7 @@ XS(_wrap_svn_wc_entry_t_incomplete_get) {
XS(_wrap_svn_wc_entry_t_copyfrom_url_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14093,9 +14187,9 @@ XS(_wrap_svn_wc_entry_t_copyfrom_url_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_copyfrom_url_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_copyfrom_url_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_entry_t_copyfrom_url_set" "', argument " "2"" of type '" "char const *""'");
@@ -14121,7 +14215,7 @@ XS(_wrap_svn_wc_entry_t_copyfrom_url_set) {
XS(_wrap_svn_wc_entry_t_copyfrom_url_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14133,9 +14227,9 @@ XS(_wrap_svn_wc_entry_t_copyfrom_url_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_copyfrom_url_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_copyfrom_url_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->copyfrom_url);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -14149,7 +14243,7 @@ XS(_wrap_svn_wc_entry_t_copyfrom_url_get) {
XS(_wrap_svn_wc_entry_t_copyfrom_rev_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14163,9 +14257,9 @@ XS(_wrap_svn_wc_entry_t_copyfrom_rev_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_copyfrom_rev_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_copyfrom_rev_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_entry_t_copyfrom_rev_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -14186,7 +14280,7 @@ XS(_wrap_svn_wc_entry_t_copyfrom_rev_set) {
XS(_wrap_svn_wc_entry_t_copyfrom_rev_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14198,9 +14292,9 @@ XS(_wrap_svn_wc_entry_t_copyfrom_rev_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_copyfrom_rev_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_copyfrom_rev_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_revnum_t) ((arg1)->copyfrom_rev);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -14214,7 +14308,7 @@ XS(_wrap_svn_wc_entry_t_copyfrom_rev_get) {
XS(_wrap_svn_wc_entry_t_conflict_old_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14229,9 +14323,9 @@ XS(_wrap_svn_wc_entry_t_conflict_old_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_conflict_old_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_conflict_old_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_entry_t_conflict_old_set" "', argument " "2"" of type '" "char const *""'");
@@ -14259,7 +14353,7 @@ XS(_wrap_svn_wc_entry_t_conflict_old_set) {
XS(_wrap_svn_wc_entry_t_conflict_old_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14271,9 +14365,9 @@ XS(_wrap_svn_wc_entry_t_conflict_old_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_conflict_old_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_conflict_old_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->conflict_old);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -14287,7 +14381,7 @@ XS(_wrap_svn_wc_entry_t_conflict_old_get) {
XS(_wrap_svn_wc_entry_t_conflict_new_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14302,9 +14396,9 @@ XS(_wrap_svn_wc_entry_t_conflict_new_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_conflict_new_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_conflict_new_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_entry_t_conflict_new_set" "', argument " "2"" of type '" "char const *""'");
@@ -14332,7 +14426,7 @@ XS(_wrap_svn_wc_entry_t_conflict_new_set) {
XS(_wrap_svn_wc_entry_t_conflict_new_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14344,9 +14438,9 @@ XS(_wrap_svn_wc_entry_t_conflict_new_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_conflict_new_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_conflict_new_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->conflict_new);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -14360,7 +14454,7 @@ XS(_wrap_svn_wc_entry_t_conflict_new_get) {
XS(_wrap_svn_wc_entry_t_conflict_wrk_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14375,9 +14469,9 @@ XS(_wrap_svn_wc_entry_t_conflict_wrk_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_conflict_wrk_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_conflict_wrk_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_entry_t_conflict_wrk_set" "', argument " "2"" of type '" "char const *""'");
@@ -14405,7 +14499,7 @@ XS(_wrap_svn_wc_entry_t_conflict_wrk_set) {
XS(_wrap_svn_wc_entry_t_conflict_wrk_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14417,9 +14511,9 @@ XS(_wrap_svn_wc_entry_t_conflict_wrk_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_conflict_wrk_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_conflict_wrk_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->conflict_wrk);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -14433,7 +14527,7 @@ XS(_wrap_svn_wc_entry_t_conflict_wrk_get) {
XS(_wrap_svn_wc_entry_t_prejfile_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14448,9 +14542,9 @@ XS(_wrap_svn_wc_entry_t_prejfile_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_prejfile_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_prejfile_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_entry_t_prejfile_set" "', argument " "2"" of type '" "char const *""'");
@@ -14478,7 +14572,7 @@ XS(_wrap_svn_wc_entry_t_prejfile_set) {
XS(_wrap_svn_wc_entry_t_prejfile_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14490,9 +14584,9 @@ XS(_wrap_svn_wc_entry_t_prejfile_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_prejfile_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_prejfile_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->prejfile);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -14506,7 +14600,7 @@ XS(_wrap_svn_wc_entry_t_prejfile_get) {
XS(_wrap_svn_wc_entry_t_text_time_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14520,9 +14614,9 @@ XS(_wrap_svn_wc_entry_t_text_time_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_text_time_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_text_time_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_entry_t_text_time_set" "', argument " "2"" of type '" "apr_time_t""'");
@@ -14543,7 +14637,7 @@ XS(_wrap_svn_wc_entry_t_text_time_set) {
XS(_wrap_svn_wc_entry_t_text_time_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14555,9 +14649,9 @@ XS(_wrap_svn_wc_entry_t_text_time_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_text_time_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_text_time_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = ((arg1)->text_time);
{
char temp[256];
@@ -14576,7 +14670,7 @@ XS(_wrap_svn_wc_entry_t_text_time_get) {
XS(_wrap_svn_wc_entry_t_prop_time_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14590,9 +14684,9 @@ XS(_wrap_svn_wc_entry_t_prop_time_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_prop_time_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_prop_time_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_entry_t_prop_time_set" "', argument " "2"" of type '" "apr_time_t""'");
@@ -14613,7 +14707,7 @@ XS(_wrap_svn_wc_entry_t_prop_time_set) {
XS(_wrap_svn_wc_entry_t_prop_time_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14625,9 +14719,9 @@ XS(_wrap_svn_wc_entry_t_prop_time_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_prop_time_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_prop_time_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = ((arg1)->prop_time);
{
char temp[256];
@@ -14646,7 +14740,7 @@ XS(_wrap_svn_wc_entry_t_prop_time_get) {
XS(_wrap_svn_wc_entry_t_checksum_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14661,9 +14755,9 @@ XS(_wrap_svn_wc_entry_t_checksum_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_checksum_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_checksum_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_entry_t_checksum_set" "', argument " "2"" of type '" "char const *""'");
@@ -14691,7 +14785,7 @@ XS(_wrap_svn_wc_entry_t_checksum_set) {
XS(_wrap_svn_wc_entry_t_checksum_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14703,9 +14797,9 @@ XS(_wrap_svn_wc_entry_t_checksum_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_checksum_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_checksum_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->checksum);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -14719,7 +14813,7 @@ XS(_wrap_svn_wc_entry_t_checksum_get) {
XS(_wrap_svn_wc_entry_t_cmt_rev_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14733,9 +14827,9 @@ XS(_wrap_svn_wc_entry_t_cmt_rev_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_cmt_rev_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_cmt_rev_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_entry_t_cmt_rev_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -14756,7 +14850,7 @@ XS(_wrap_svn_wc_entry_t_cmt_rev_set) {
XS(_wrap_svn_wc_entry_t_cmt_rev_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14768,9 +14862,9 @@ XS(_wrap_svn_wc_entry_t_cmt_rev_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_cmt_rev_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_cmt_rev_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_revnum_t) ((arg1)->cmt_rev);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -14784,7 +14878,7 @@ XS(_wrap_svn_wc_entry_t_cmt_rev_get) {
XS(_wrap_svn_wc_entry_t_cmt_date_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14798,9 +14892,9 @@ XS(_wrap_svn_wc_entry_t_cmt_date_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_cmt_date_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_cmt_date_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_entry_t_cmt_date_set" "', argument " "2"" of type '" "apr_time_t""'");
@@ -14821,7 +14915,7 @@ XS(_wrap_svn_wc_entry_t_cmt_date_set) {
XS(_wrap_svn_wc_entry_t_cmt_date_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14833,9 +14927,9 @@ XS(_wrap_svn_wc_entry_t_cmt_date_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_cmt_date_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_cmt_date_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = ((arg1)->cmt_date);
{
char temp[256];
@@ -14854,7 +14948,7 @@ XS(_wrap_svn_wc_entry_t_cmt_date_get) {
XS(_wrap_svn_wc_entry_t_cmt_author_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14869,9 +14963,9 @@ XS(_wrap_svn_wc_entry_t_cmt_author_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_cmt_author_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_cmt_author_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_entry_t_cmt_author_set" "', argument " "2"" of type '" "char const *""'");
@@ -14899,7 +14993,7 @@ XS(_wrap_svn_wc_entry_t_cmt_author_set) {
XS(_wrap_svn_wc_entry_t_cmt_author_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14911,9 +15005,9 @@ XS(_wrap_svn_wc_entry_t_cmt_author_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_cmt_author_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_cmt_author_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->cmt_author);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -14927,7 +15021,7 @@ XS(_wrap_svn_wc_entry_t_cmt_author_get) {
XS(_wrap_svn_wc_entry_t_lock_token_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14942,9 +15036,9 @@ XS(_wrap_svn_wc_entry_t_lock_token_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_lock_token_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_lock_token_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_entry_t_lock_token_set" "', argument " "2"" of type '" "char const *""'");
@@ -14970,7 +15064,7 @@ XS(_wrap_svn_wc_entry_t_lock_token_set) {
XS(_wrap_svn_wc_entry_t_lock_token_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -14982,9 +15076,9 @@ XS(_wrap_svn_wc_entry_t_lock_token_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_lock_token_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_lock_token_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->lock_token);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -14998,7 +15092,7 @@ XS(_wrap_svn_wc_entry_t_lock_token_get) {
XS(_wrap_svn_wc_entry_t_lock_owner_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -15013,9 +15107,9 @@ XS(_wrap_svn_wc_entry_t_lock_owner_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_lock_owner_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_lock_owner_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_entry_t_lock_owner_set" "', argument " "2"" of type '" "char const *""'");
@@ -15043,7 +15137,7 @@ XS(_wrap_svn_wc_entry_t_lock_owner_set) {
XS(_wrap_svn_wc_entry_t_lock_owner_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -15055,9 +15149,9 @@ XS(_wrap_svn_wc_entry_t_lock_owner_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_lock_owner_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_lock_owner_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->lock_owner);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -15071,7 +15165,7 @@ XS(_wrap_svn_wc_entry_t_lock_owner_get) {
XS(_wrap_svn_wc_entry_t_lock_comment_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -15086,9 +15180,9 @@ XS(_wrap_svn_wc_entry_t_lock_comment_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_lock_comment_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_lock_comment_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_entry_t_lock_comment_set" "', argument " "2"" of type '" "char const *""'");
@@ -15116,7 +15210,7 @@ XS(_wrap_svn_wc_entry_t_lock_comment_set) {
XS(_wrap_svn_wc_entry_t_lock_comment_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -15128,9 +15222,9 @@ XS(_wrap_svn_wc_entry_t_lock_comment_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_lock_comment_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_lock_comment_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->lock_comment);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -15144,7 +15238,7 @@ XS(_wrap_svn_wc_entry_t_lock_comment_get) {
XS(_wrap_svn_wc_entry_t_lock_creation_date_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -15158,9 +15252,9 @@ XS(_wrap_svn_wc_entry_t_lock_creation_date_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_lock_creation_date_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_lock_creation_date_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_entry_t_lock_creation_date_set" "', argument " "2"" of type '" "apr_time_t""'");
@@ -15181,7 +15275,7 @@ XS(_wrap_svn_wc_entry_t_lock_creation_date_set) {
XS(_wrap_svn_wc_entry_t_lock_creation_date_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -15193,9 +15287,9 @@ XS(_wrap_svn_wc_entry_t_lock_creation_date_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_lock_creation_date_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_lock_creation_date_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = ((arg1)->lock_creation_date);
{
char temp[256];
@@ -15214,7 +15308,7 @@ XS(_wrap_svn_wc_entry_t_lock_creation_date_get) {
XS(_wrap_svn_wc_entry_t_has_props_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -15228,9 +15322,9 @@ XS(_wrap_svn_wc_entry_t_has_props_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_has_props_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_has_props_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_entry_t_has_props_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -15251,7 +15345,7 @@ XS(_wrap_svn_wc_entry_t_has_props_set) {
XS(_wrap_svn_wc_entry_t_has_props_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -15263,9 +15357,9 @@ XS(_wrap_svn_wc_entry_t_has_props_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_has_props_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_has_props_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_boolean_t) ((arg1)->has_props);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -15279,7 +15373,7 @@ XS(_wrap_svn_wc_entry_t_has_props_get) {
XS(_wrap_svn_wc_entry_t_has_prop_mods_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -15293,9 +15387,9 @@ XS(_wrap_svn_wc_entry_t_has_prop_mods_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_has_prop_mods_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_has_prop_mods_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_entry_t_has_prop_mods_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -15316,7 +15410,7 @@ XS(_wrap_svn_wc_entry_t_has_prop_mods_set) {
XS(_wrap_svn_wc_entry_t_has_prop_mods_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -15328,9 +15422,9 @@ XS(_wrap_svn_wc_entry_t_has_prop_mods_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_has_prop_mods_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_has_prop_mods_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_boolean_t) ((arg1)->has_prop_mods);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -15344,7 +15438,7 @@ XS(_wrap_svn_wc_entry_t_has_prop_mods_get) {
XS(_wrap_svn_wc_entry_t_cachable_props_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -15359,9 +15453,9 @@ XS(_wrap_svn_wc_entry_t_cachable_props_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_cachable_props_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_cachable_props_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_entry_t_cachable_props_set" "', argument " "2"" of type '" "char const *""'");
@@ -15389,7 +15483,7 @@ XS(_wrap_svn_wc_entry_t_cachable_props_set) {
XS(_wrap_svn_wc_entry_t_cachable_props_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -15401,9 +15495,9 @@ XS(_wrap_svn_wc_entry_t_cachable_props_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_cachable_props_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_cachable_props_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->cachable_props);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -15417,7 +15511,7 @@ XS(_wrap_svn_wc_entry_t_cachable_props_get) {
XS(_wrap_svn_wc_entry_t_present_props_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -15432,9 +15526,9 @@ XS(_wrap_svn_wc_entry_t_present_props_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_present_props_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_present_props_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_entry_t_present_props_set" "', argument " "2"" of type '" "char const *""'");
@@ -15462,7 +15556,7 @@ XS(_wrap_svn_wc_entry_t_present_props_set) {
XS(_wrap_svn_wc_entry_t_present_props_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -15474,9 +15568,9 @@ XS(_wrap_svn_wc_entry_t_present_props_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_present_props_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_present_props_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->present_props);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -15490,7 +15584,7 @@ XS(_wrap_svn_wc_entry_t_present_props_get) {
XS(_wrap_svn_wc_entry_t_changelist_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -15505,9 +15599,9 @@ XS(_wrap_svn_wc_entry_t_changelist_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_changelist_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_changelist_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_entry_t_changelist_set" "', argument " "2"" of type '" "char const *""'");
@@ -15535,7 +15629,7 @@ XS(_wrap_svn_wc_entry_t_changelist_set) {
XS(_wrap_svn_wc_entry_t_changelist_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -15547,9 +15641,9 @@ XS(_wrap_svn_wc_entry_t_changelist_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_changelist_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_changelist_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->changelist);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -15563,7 +15657,7 @@ XS(_wrap_svn_wc_entry_t_changelist_get) {
XS(_wrap_svn_wc_entry_t_working_size_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
apr_off_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -15577,9 +15671,9 @@ XS(_wrap_svn_wc_entry_t_working_size_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_working_size_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_working_size_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_entry_t_working_size_set" "', argument " "2"" of type '" "apr_off_t""'");
@@ -15600,7 +15694,7 @@ XS(_wrap_svn_wc_entry_t_working_size_set) {
XS(_wrap_svn_wc_entry_t_working_size_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -15612,9 +15706,9 @@ XS(_wrap_svn_wc_entry_t_working_size_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_working_size_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_working_size_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = ((arg1)->working_size);
{
char temp[256];
@@ -15633,7 +15727,7 @@ XS(_wrap_svn_wc_entry_t_working_size_get) {
XS(_wrap_svn_wc_entry_t_keep_local_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -15647,9 +15741,9 @@ XS(_wrap_svn_wc_entry_t_keep_local_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_keep_local_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_keep_local_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_entry_t_keep_local_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -15670,7 +15764,7 @@ XS(_wrap_svn_wc_entry_t_keep_local_set) {
XS(_wrap_svn_wc_entry_t_keep_local_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -15682,9 +15776,9 @@ XS(_wrap_svn_wc_entry_t_keep_local_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_keep_local_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_keep_local_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_boolean_t) ((arg1)->keep_local);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -15698,7 +15792,7 @@ XS(_wrap_svn_wc_entry_t_keep_local_get) {
XS(_wrap_svn_wc_entry_t_depth_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_depth_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -15712,9 +15806,9 @@ XS(_wrap_svn_wc_entry_t_depth_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_depth_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_depth_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_entry_t_depth_set" "', argument " "2"" of type '" "svn_depth_t""'");
@@ -15735,7 +15829,7 @@ XS(_wrap_svn_wc_entry_t_depth_set) {
XS(_wrap_svn_wc_entry_t_depth_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -15747,9 +15841,9 @@ XS(_wrap_svn_wc_entry_t_depth_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_depth_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_depth_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_depth_t) ((arg1)->depth);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -15763,7 +15857,7 @@ XS(_wrap_svn_wc_entry_t_depth_get) {
XS(_wrap_svn_wc_entry_t_tree_conflict_data_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -15778,9 +15872,9 @@ XS(_wrap_svn_wc_entry_t_tree_conflict_data_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_tree_conflict_data_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_tree_conflict_data_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_entry_t_tree_conflict_data_set" "', argument " "2"" of type '" "char const *""'");
@@ -15808,7 +15902,7 @@ XS(_wrap_svn_wc_entry_t_tree_conflict_data_set) {
XS(_wrap_svn_wc_entry_t_tree_conflict_data_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -15820,9 +15914,9 @@ XS(_wrap_svn_wc_entry_t_tree_conflict_data_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_tree_conflict_data_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_tree_conflict_data_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->tree_conflict_data);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -15836,7 +15930,7 @@ XS(_wrap_svn_wc_entry_t_tree_conflict_data_get) {
XS(_wrap_svn_wc_entry_t_file_external_path_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -15851,9 +15945,9 @@ XS(_wrap_svn_wc_entry_t_file_external_path_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_file_external_path_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_file_external_path_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_entry_t_file_external_path_set" "', argument " "2"" of type '" "char const *""'");
@@ -15881,7 +15975,7 @@ XS(_wrap_svn_wc_entry_t_file_external_path_set) {
XS(_wrap_svn_wc_entry_t_file_external_path_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -15893,9 +15987,9 @@ XS(_wrap_svn_wc_entry_t_file_external_path_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_file_external_path_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_file_external_path_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->file_external_path);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -15909,7 +16003,7 @@ XS(_wrap_svn_wc_entry_t_file_external_path_get) {
XS(_wrap_svn_wc_entry_t_file_external_peg_rev_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -15922,57 +16016,11 @@ XS(_wrap_svn_wc_entry_t_file_external_peg_rev_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_file_external_peg_rev_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_file_external_peg_rev_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
}
if (arg1) (arg1)->file_external_peg_rev = *arg2;
ST(argvi) = sv_newmortal();
@@ -15989,7 +16037,7 @@ XS(_wrap_svn_wc_entry_t_file_external_peg_rev_set) {
XS(_wrap_svn_wc_entry_t_file_external_peg_rev_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -16001,9 +16049,9 @@ XS(_wrap_svn_wc_entry_t_file_external_peg_rev_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_file_external_peg_rev_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_file_external_peg_rev_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_opt_revision_t *)& ((arg1)->file_external_peg_rev);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_opt_revision_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -16017,7 +16065,7 @@ XS(_wrap_svn_wc_entry_t_file_external_peg_rev_get) {
XS(_wrap_svn_wc_entry_t_file_external_rev_set) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -16030,57 +16078,11 @@ XS(_wrap_svn_wc_entry_t_file_external_rev_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_file_external_rev_set" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_file_external_rev_set" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
{
- arg2 = &rev2;
- if (ST(1) == NULL || ST(1) == &PL_sv_undef || !SvOK(ST(1))) {
- rev2.kind = svn_opt_revision_unspecified;
- }
- else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "_p_svn_opt_revision_t")) {
- SWIG_ConvertPtr(ST(1), (void **)&arg2, SWIGTYPE_p_svn_opt_revision_t, 0);
- }
- else if (looks_like_number(ST(1))) {
- rev2.kind = svn_opt_revision_number;
- rev2.value.number = SvIV(ST(1));
- }
- else if (SvPOK(ST(1))) {
- char *input = SvPV_nolen(ST(1));
- if (svn_cstring_casecmp(input, "BASE") == 0)
- rev2.kind = svn_opt_revision_base;
- else if (svn_cstring_casecmp(input, "HEAD") == 0)
- rev2.kind = svn_opt_revision_head;
- else if (svn_cstring_casecmp(input, "WORKING") == 0)
- rev2.kind = svn_opt_revision_working;
- else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
- rev2.kind = svn_opt_revision_committed;
- else if (svn_cstring_casecmp(input, "PREV") == 0)
- rev2.kind = svn_opt_revision_previous;
- else if (*input == '{') {
- svn_boolean_t matched;
- apr_time_t tm;
- svn_error_t *err;
-
- char *end = strchr(input,'}');
- if (!end)
- SWIG_croak("unknown opt_revision_t type");
- *end = '\0';
- err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
- svn_swig_pl_make_pool ((SV *)NULL));
- if (err) {
- svn_error_clear (err);
- SWIG_croak("unknown opt_revision_t type");
- }
- if (!matched)
- SWIG_croak("unknown opt_revision_t type");
-
- rev2.kind = svn_opt_revision_date;
- rev2.value.date = tm;
- } else
- SWIG_croak("unknown opt_revision_t type");
- } else
- SWIG_croak("unknown opt_revision_t type");
+ arg2 = svn_swig_pl_set_revision(&rev2, ST(1), TRUE);
}
if (arg1) (arg1)->file_external_rev = *arg2;
ST(argvi) = sv_newmortal();
@@ -16097,7 +16099,7 @@ XS(_wrap_svn_wc_entry_t_file_external_rev_set) {
XS(_wrap_svn_wc_entry_t_file_external_rev_get) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -16109,9 +16111,9 @@ XS(_wrap_svn_wc_entry_t_file_external_rev_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_file_external_rev_get" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_t_file_external_rev_get" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_opt_revision_t *)& ((arg1)->file_external_rev);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_opt_revision_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -16126,14 +16128,14 @@ XS(_wrap_svn_wc_entry_t_file_external_rev_get) {
XS(_wrap_new_svn_wc_entry_t) {
{
int argvi = 0;
- svn_wc_entry_t *result = 0 ;
+ struct svn_wc_entry_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_wc_entry_t();");
}
{
- result = (svn_wc_entry_t *)calloc(1, sizeof(svn_wc_entry_t));
+ result = (struct svn_wc_entry_t *)calloc(1, sizeof(struct svn_wc_entry_t));
@@ -16148,7 +16150,7 @@ XS(_wrap_new_svn_wc_entry_t) {
XS(_wrap_delete_svn_wc_entry_t) {
{
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -16159,9 +16161,9 @@ XS(_wrap_delete_svn_wc_entry_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_entry_t" "', argument " "1"" of type '" "svn_wc_entry_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_entry_t" "', argument " "1"" of type '" "struct svn_wc_entry_t *""'");
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
{
free((char *) arg1);
@@ -16386,7 +16388,7 @@ XS(_wrap_svn_wc_entry_dup) {
XS(_wrap_svn_wc_info_t_schedule_set) {
{
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
svn_wc_schedule_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -16400,9 +16402,9 @@ XS(_wrap_svn_wc_info_t_schedule_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_schedule_set" "', argument " "1"" of type '" "svn_wc_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_schedule_set" "', argument " "1"" of type '" "struct svn_wc_info_t *""'");
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_info_t_schedule_set" "', argument " "2"" of type '" "svn_wc_schedule_t""'");
@@ -16423,7 +16425,7 @@ XS(_wrap_svn_wc_info_t_schedule_set) {
XS(_wrap_svn_wc_info_t_schedule_get) {
{
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -16435,9 +16437,9 @@ XS(_wrap_svn_wc_info_t_schedule_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_schedule_get" "', argument " "1"" of type '" "svn_wc_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_schedule_get" "', argument " "1"" of type '" "struct svn_wc_info_t *""'");
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
result = (svn_wc_schedule_t) ((arg1)->schedule);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -16451,7 +16453,7 @@ XS(_wrap_svn_wc_info_t_schedule_get) {
XS(_wrap_svn_wc_info_t_copyfrom_url_set) {
{
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -16466,9 +16468,9 @@ XS(_wrap_svn_wc_info_t_copyfrom_url_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_copyfrom_url_set" "', argument " "1"" of type '" "svn_wc_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_copyfrom_url_set" "', argument " "1"" of type '" "struct svn_wc_info_t *""'");
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_info_t_copyfrom_url_set" "', argument " "2"" of type '" "char const *""'");
@@ -16494,7 +16496,7 @@ XS(_wrap_svn_wc_info_t_copyfrom_url_set) {
XS(_wrap_svn_wc_info_t_copyfrom_url_get) {
{
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -16506,9 +16508,9 @@ XS(_wrap_svn_wc_info_t_copyfrom_url_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_copyfrom_url_get" "', argument " "1"" of type '" "svn_wc_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_copyfrom_url_get" "', argument " "1"" of type '" "struct svn_wc_info_t *""'");
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
result = (char *) ((arg1)->copyfrom_url);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -16522,7 +16524,7 @@ XS(_wrap_svn_wc_info_t_copyfrom_url_get) {
XS(_wrap_svn_wc_info_t_copyfrom_rev_set) {
{
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -16536,9 +16538,9 @@ XS(_wrap_svn_wc_info_t_copyfrom_rev_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_copyfrom_rev_set" "', argument " "1"" of type '" "svn_wc_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_copyfrom_rev_set" "', argument " "1"" of type '" "struct svn_wc_info_t *""'");
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_info_t_copyfrom_rev_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -16559,7 +16561,7 @@ XS(_wrap_svn_wc_info_t_copyfrom_rev_set) {
XS(_wrap_svn_wc_info_t_copyfrom_rev_get) {
{
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -16571,9 +16573,9 @@ XS(_wrap_svn_wc_info_t_copyfrom_rev_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_copyfrom_rev_get" "', argument " "1"" of type '" "svn_wc_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_copyfrom_rev_get" "', argument " "1"" of type '" "struct svn_wc_info_t *""'");
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
result = (svn_revnum_t) ((arg1)->copyfrom_rev);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -16587,7 +16589,7 @@ XS(_wrap_svn_wc_info_t_copyfrom_rev_get) {
XS(_wrap_svn_wc_info_t_checksum_set) {
{
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
svn_checksum_t *arg2 = (svn_checksum_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -16601,9 +16603,9 @@ XS(_wrap_svn_wc_info_t_checksum_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_checksum_set" "', argument " "1"" of type '" "svn_wc_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_checksum_set" "', argument " "1"" of type '" "struct svn_wc_info_t *""'");
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_checksum_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_info_t_checksum_set" "', argument " "2"" of type '" "svn_checksum_t const *""'");
@@ -16624,7 +16626,7 @@ XS(_wrap_svn_wc_info_t_checksum_set) {
XS(_wrap_svn_wc_info_t_checksum_get) {
{
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -16636,11 +16638,11 @@ XS(_wrap_svn_wc_info_t_checksum_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_checksum_get" "', argument " "1"" of type '" "svn_wc_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_checksum_get" "', argument " "1"" of type '" "struct svn_wc_info_t *""'");
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
result = (svn_checksum_t *) ((arg1)->checksum);
- ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_checksum_t, 0 | 0); argvi++ ;
+ ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_checksum_t, 0 | SWIG_SHADOW); argvi++ ;
XSRETURN(argvi);
fail:
@@ -16652,7 +16654,7 @@ XS(_wrap_svn_wc_info_t_checksum_get) {
XS(_wrap_svn_wc_info_t_changelist_set) {
{
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -16667,9 +16669,9 @@ XS(_wrap_svn_wc_info_t_changelist_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_changelist_set" "', argument " "1"" of type '" "svn_wc_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_changelist_set" "', argument " "1"" of type '" "struct svn_wc_info_t *""'");
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_info_t_changelist_set" "', argument " "2"" of type '" "char const *""'");
@@ -16697,7 +16699,7 @@ XS(_wrap_svn_wc_info_t_changelist_set) {
XS(_wrap_svn_wc_info_t_changelist_get) {
{
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -16709,9 +16711,9 @@ XS(_wrap_svn_wc_info_t_changelist_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_changelist_get" "', argument " "1"" of type '" "svn_wc_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_changelist_get" "', argument " "1"" of type '" "struct svn_wc_info_t *""'");
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
result = (char *) ((arg1)->changelist);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -16725,7 +16727,7 @@ XS(_wrap_svn_wc_info_t_changelist_get) {
XS(_wrap_svn_wc_info_t_depth_set) {
{
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
svn_depth_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -16739,9 +16741,9 @@ XS(_wrap_svn_wc_info_t_depth_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_depth_set" "', argument " "1"" of type '" "svn_wc_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_depth_set" "', argument " "1"" of type '" "struct svn_wc_info_t *""'");
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_info_t_depth_set" "', argument " "2"" of type '" "svn_depth_t""'");
@@ -16762,7 +16764,7 @@ XS(_wrap_svn_wc_info_t_depth_set) {
XS(_wrap_svn_wc_info_t_depth_get) {
{
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -16774,9 +16776,9 @@ XS(_wrap_svn_wc_info_t_depth_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_depth_get" "', argument " "1"" of type '" "svn_wc_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_depth_get" "', argument " "1"" of type '" "struct svn_wc_info_t *""'");
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
result = (svn_depth_t) ((arg1)->depth);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -16790,7 +16792,7 @@ XS(_wrap_svn_wc_info_t_depth_get) {
XS(_wrap_svn_wc_info_t_recorded_size_set) {
{
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
svn_filesize_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -16804,9 +16806,9 @@ XS(_wrap_svn_wc_info_t_recorded_size_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_recorded_size_set" "', argument " "1"" of type '" "svn_wc_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_recorded_size_set" "', argument " "1"" of type '" "struct svn_wc_info_t *""'");
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_info_t_recorded_size_set" "', argument " "2"" of type '" "svn_filesize_t""'");
@@ -16827,7 +16829,7 @@ XS(_wrap_svn_wc_info_t_recorded_size_set) {
XS(_wrap_svn_wc_info_t_recorded_size_get) {
{
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -16839,9 +16841,9 @@ XS(_wrap_svn_wc_info_t_recorded_size_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_recorded_size_get" "', argument " "1"" of type '" "svn_wc_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_recorded_size_get" "', argument " "1"" of type '" "struct svn_wc_info_t *""'");
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
result = ((arg1)->recorded_size);
{
char temp[256];
@@ -16860,7 +16862,7 @@ XS(_wrap_svn_wc_info_t_recorded_size_get) {
XS(_wrap_svn_wc_info_t_recorded_time_set) {
{
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -16874,9 +16876,9 @@ XS(_wrap_svn_wc_info_t_recorded_time_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_recorded_time_set" "', argument " "1"" of type '" "svn_wc_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_recorded_time_set" "', argument " "1"" of type '" "struct svn_wc_info_t *""'");
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_info_t_recorded_time_set" "', argument " "2"" of type '" "apr_time_t""'");
@@ -16897,7 +16899,7 @@ XS(_wrap_svn_wc_info_t_recorded_time_set) {
XS(_wrap_svn_wc_info_t_recorded_time_get) {
{
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -16909,9 +16911,9 @@ XS(_wrap_svn_wc_info_t_recorded_time_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_recorded_time_get" "', argument " "1"" of type '" "svn_wc_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_recorded_time_get" "', argument " "1"" of type '" "struct svn_wc_info_t *""'");
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
result = ((arg1)->recorded_time);
{
char temp[256];
@@ -16930,7 +16932,7 @@ XS(_wrap_svn_wc_info_t_recorded_time_get) {
XS(_wrap_svn_wc_info_t_conflicts_set) {
{
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -16944,9 +16946,9 @@ XS(_wrap_svn_wc_info_t_conflicts_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_conflicts_set" "', argument " "1"" of type '" "svn_wc_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_conflicts_set" "', argument " "1"" of type '" "struct svn_wc_info_t *""'");
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_apr_array_header_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_info_t_conflicts_set" "', argument " "2"" of type '" "apr_array_header_t const *""'");
@@ -16967,7 +16969,7 @@ XS(_wrap_svn_wc_info_t_conflicts_set) {
XS(_wrap_svn_wc_info_t_conflicts_get) {
{
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -16979,9 +16981,9 @@ XS(_wrap_svn_wc_info_t_conflicts_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_conflicts_get" "', argument " "1"" of type '" "svn_wc_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_conflicts_get" "', argument " "1"" of type '" "struct svn_wc_info_t *""'");
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
result = (apr_array_header_t *) ((arg1)->conflicts);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_array_header_t, 0 | 0); argvi++ ;
@@ -16995,7 +16997,7 @@ XS(_wrap_svn_wc_info_t_conflicts_get) {
XS(_wrap_svn_wc_info_t_wcroot_abspath_set) {
{
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -17010,9 +17012,9 @@ XS(_wrap_svn_wc_info_t_wcroot_abspath_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_wcroot_abspath_set" "', argument " "1"" of type '" "svn_wc_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_wcroot_abspath_set" "', argument " "1"" of type '" "struct svn_wc_info_t *""'");
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_info_t_wcroot_abspath_set" "', argument " "2"" of type '" "char const *""'");
@@ -17040,7 +17042,7 @@ XS(_wrap_svn_wc_info_t_wcroot_abspath_set) {
XS(_wrap_svn_wc_info_t_wcroot_abspath_get) {
{
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -17052,9 +17054,9 @@ XS(_wrap_svn_wc_info_t_wcroot_abspath_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_wcroot_abspath_get" "', argument " "1"" of type '" "svn_wc_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_wcroot_abspath_get" "', argument " "1"" of type '" "struct svn_wc_info_t *""'");
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
result = (char *) ((arg1)->wcroot_abspath);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -17066,17 +17068,163 @@ XS(_wrap_svn_wc_info_t_wcroot_abspath_get) {
}
+XS(_wrap_svn_wc_info_t_moved_from_abspath_set) {
+ {
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_wc_info_t_moved_from_abspath_set(self,moved_from_abspath);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_moved_from_abspath_set" "', argument " "1"" of type '" "struct svn_wc_info_t *""'");
+ }
+ arg1 = (struct svn_wc_info_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_info_t_moved_from_abspath_set" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->moved_from_abspath) free((char *)arg1->moved_from_abspath);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->moved_from_abspath = copied;
+ }
+ ST(argvi) = sv_newmortal();
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_wc_info_t_moved_from_abspath_get) {
+ {
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ char *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_wc_info_t_moved_from_abspath_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_moved_from_abspath_get" "', argument " "1"" of type '" "struct svn_wc_info_t *""'");
+ }
+ arg1 = (struct svn_wc_info_t *)(argp1);
+ result = (char *) ((arg1)->moved_from_abspath);
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_wc_info_t_moved_to_abspath_set) {
+ {
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_wc_info_t_moved_to_abspath_set(self,moved_to_abspath);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_moved_to_abspath_set" "', argument " "1"" of type '" "struct svn_wc_info_t *""'");
+ }
+ arg1 = (struct svn_wc_info_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_info_t_moved_to_abspath_set" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->moved_to_abspath) free((char *)arg1->moved_to_abspath);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->moved_to_abspath = copied;
+ }
+ ST(argvi) = sv_newmortal();
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_wc_info_t_moved_to_abspath_get) {
+ {
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ char *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_wc_info_t_moved_to_abspath_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_info_t_moved_to_abspath_get" "', argument " "1"" of type '" "struct svn_wc_info_t *""'");
+ }
+ arg1 = (struct svn_wc_info_t *)(argp1);
+ result = (char *) ((arg1)->moved_to_abspath);
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_new_svn_wc_info_t) {
{
int argvi = 0;
- svn_wc_info_t *result = 0 ;
+ struct svn_wc_info_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_wc_info_t();");
}
{
- result = (svn_wc_info_t *)calloc(1, sizeof(svn_wc_info_t));
+ result = (struct svn_wc_info_t *)calloc(1, sizeof(struct svn_wc_info_t));
@@ -17091,7 +17239,7 @@ XS(_wrap_new_svn_wc_info_t) {
XS(_wrap_delete_svn_wc_info_t) {
{
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -17102,9 +17250,9 @@ XS(_wrap_delete_svn_wc_info_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_info_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_info_t" "', argument " "1"" of type '" "svn_wc_info_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_info_t" "', argument " "1"" of type '" "struct svn_wc_info_t *""'");
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
{
free((char *) arg1);
@@ -17562,7 +17710,7 @@ XS(_wrap_svn_wc_get_ancestry) {
XS(_wrap_svn_wc_entry_callbacks2_t_found_entry_set) {
{
- svn_wc_entry_callbacks2_t *arg1 = (svn_wc_entry_callbacks2_t *) 0 ;
+ struct svn_wc_entry_callbacks2_t *arg1 = (struct svn_wc_entry_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(char const *,svn_wc_entry_t const *,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,svn_wc_entry_t const *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -17574,9 +17722,9 @@ XS(_wrap_svn_wc_entry_callbacks2_t_found_entry_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_callbacks2_t_found_entry_set" "', argument " "1"" of type '" "svn_wc_entry_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_callbacks2_t_found_entry_set" "', argument " "1"" of type '" "struct svn_wc_entry_callbacks2_t *""'");
}
- arg1 = (svn_wc_entry_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_entry_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_p_q_const__svn_wc_entry_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -17598,7 +17746,7 @@ XS(_wrap_svn_wc_entry_callbacks2_t_found_entry_set) {
XS(_wrap_svn_wc_entry_callbacks2_t_found_entry_get) {
{
- svn_wc_entry_callbacks2_t *arg1 = (svn_wc_entry_callbacks2_t *) 0 ;
+ struct svn_wc_entry_callbacks2_t *arg1 = (struct svn_wc_entry_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -17610,9 +17758,9 @@ XS(_wrap_svn_wc_entry_callbacks2_t_found_entry_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_callbacks2_t_found_entry_get" "', argument " "1"" of type '" "svn_wc_entry_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_callbacks2_t_found_entry_get" "', argument " "1"" of type '" "struct svn_wc_entry_callbacks2_t *""'");
}
- arg1 = (svn_wc_entry_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_entry_callbacks2_t *)(argp1);
result = (svn_error_t *(*)(char const *,svn_wc_entry_t const *,void *,apr_pool_t *)) ((arg1)->found_entry);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_p_q_const__svn_wc_entry_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -17626,7 +17774,7 @@ XS(_wrap_svn_wc_entry_callbacks2_t_found_entry_get) {
XS(_wrap_svn_wc_entry_callbacks2_t_handle_error_set) {
{
- svn_wc_entry_callbacks2_t *arg1 = (svn_wc_entry_callbacks2_t *) 0 ;
+ struct svn_wc_entry_callbacks2_t *arg1 = (struct svn_wc_entry_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(char const *,svn_error_t *,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,svn_error_t *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -17638,9 +17786,9 @@ XS(_wrap_svn_wc_entry_callbacks2_t_handle_error_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_callbacks2_t_handle_error_set" "', argument " "1"" of type '" "svn_wc_entry_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_callbacks2_t_handle_error_set" "', argument " "1"" of type '" "struct svn_wc_entry_callbacks2_t *""'");
}
- arg1 = (svn_wc_entry_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_entry_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_p_svn_error_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -17662,7 +17810,7 @@ XS(_wrap_svn_wc_entry_callbacks2_t_handle_error_set) {
XS(_wrap_svn_wc_entry_callbacks2_t_handle_error_get) {
{
- svn_wc_entry_callbacks2_t *arg1 = (svn_wc_entry_callbacks2_t *) 0 ;
+ struct svn_wc_entry_callbacks2_t *arg1 = (struct svn_wc_entry_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -17674,9 +17822,9 @@ XS(_wrap_svn_wc_entry_callbacks2_t_handle_error_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_callbacks2_t_handle_error_get" "', argument " "1"" of type '" "svn_wc_entry_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_callbacks2_t_handle_error_get" "', argument " "1"" of type '" "struct svn_wc_entry_callbacks2_t *""'");
}
- arg1 = (svn_wc_entry_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_entry_callbacks2_t *)(argp1);
result = (svn_error_t *(*)(char const *,svn_error_t *,void *,apr_pool_t *)) ((arg1)->handle_error);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_p_svn_error_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -17691,14 +17839,14 @@ XS(_wrap_svn_wc_entry_callbacks2_t_handle_error_get) {
XS(_wrap_new_svn_wc_entry_callbacks2_t) {
{
int argvi = 0;
- svn_wc_entry_callbacks2_t *result = 0 ;
+ struct svn_wc_entry_callbacks2_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_wc_entry_callbacks2_t();");
}
{
- result = (svn_wc_entry_callbacks2_t *)calloc(1, sizeof(svn_wc_entry_callbacks2_t));
+ result = (struct svn_wc_entry_callbacks2_t *)calloc(1, sizeof(struct svn_wc_entry_callbacks2_t));
@@ -17713,7 +17861,7 @@ XS(_wrap_new_svn_wc_entry_callbacks2_t) {
XS(_wrap_delete_svn_wc_entry_callbacks2_t) {
{
- svn_wc_entry_callbacks2_t *arg1 = (svn_wc_entry_callbacks2_t *) 0 ;
+ struct svn_wc_entry_callbacks2_t *arg1 = (struct svn_wc_entry_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -17724,9 +17872,9 @@ XS(_wrap_delete_svn_wc_entry_callbacks2_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_callbacks2_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_entry_callbacks2_t" "', argument " "1"" of type '" "svn_wc_entry_callbacks2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_entry_callbacks2_t" "', argument " "1"" of type '" "struct svn_wc_entry_callbacks2_t *""'");
}
- arg1 = (svn_wc_entry_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_entry_callbacks2_t *)(argp1);
{
free((char *) arg1);
@@ -17745,7 +17893,7 @@ XS(_wrap_delete_svn_wc_entry_callbacks2_t) {
XS(_wrap_svn_wc_entry_callbacks_t_found_entry_set) {
{
- svn_wc_entry_callbacks_t *arg1 = (svn_wc_entry_callbacks_t *) 0 ;
+ struct svn_wc_entry_callbacks_t *arg1 = (struct svn_wc_entry_callbacks_t *) 0 ;
svn_error_t *(*arg2)(char const *,svn_wc_entry_t const *,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,svn_wc_entry_t const *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -17757,9 +17905,9 @@ XS(_wrap_svn_wc_entry_callbacks_t_found_entry_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_callbacks_t_found_entry_set" "', argument " "1"" of type '" "svn_wc_entry_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_callbacks_t_found_entry_set" "', argument " "1"" of type '" "struct svn_wc_entry_callbacks_t *""'");
}
- arg1 = (svn_wc_entry_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_entry_callbacks_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(ST(1), (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_p_q_const__svn_wc_entry_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -17781,7 +17929,7 @@ XS(_wrap_svn_wc_entry_callbacks_t_found_entry_set) {
XS(_wrap_svn_wc_entry_callbacks_t_found_entry_get) {
{
- svn_wc_entry_callbacks_t *arg1 = (svn_wc_entry_callbacks_t *) 0 ;
+ struct svn_wc_entry_callbacks_t *arg1 = (struct svn_wc_entry_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -17793,9 +17941,9 @@ XS(_wrap_svn_wc_entry_callbacks_t_found_entry_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_callbacks_t_found_entry_get" "', argument " "1"" of type '" "svn_wc_entry_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_entry_callbacks_t_found_entry_get" "', argument " "1"" of type '" "struct svn_wc_entry_callbacks_t *""'");
}
- arg1 = (svn_wc_entry_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_entry_callbacks_t *)(argp1);
result = (svn_error_t *(*)(char const *,svn_wc_entry_t const *,void *,apr_pool_t *)) ((arg1)->found_entry);
ST(argvi) = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_p_q_const__svn_wc_entry_t_p_void_p_apr_pool_t__p_svn_error_t); argvi++ ;
@@ -17810,14 +17958,14 @@ XS(_wrap_svn_wc_entry_callbacks_t_found_entry_get) {
XS(_wrap_new_svn_wc_entry_callbacks_t) {
{
int argvi = 0;
- svn_wc_entry_callbacks_t *result = 0 ;
+ struct svn_wc_entry_callbacks_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_wc_entry_callbacks_t();");
}
{
- result = (svn_wc_entry_callbacks_t *)calloc(1, sizeof(svn_wc_entry_callbacks_t));
+ result = (struct svn_wc_entry_callbacks_t *)calloc(1, sizeof(struct svn_wc_entry_callbacks_t));
@@ -17832,7 +17980,7 @@ XS(_wrap_new_svn_wc_entry_callbacks_t) {
XS(_wrap_delete_svn_wc_entry_callbacks_t) {
{
- svn_wc_entry_callbacks_t *arg1 = (svn_wc_entry_callbacks_t *) 0 ;
+ struct svn_wc_entry_callbacks_t *arg1 = (struct svn_wc_entry_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -17843,9 +17991,9 @@ XS(_wrap_delete_svn_wc_entry_callbacks_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_entry_callbacks_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_entry_callbacks_t" "', argument " "1"" of type '" "svn_wc_entry_callbacks_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_entry_callbacks_t" "', argument " "1"" of type '" "struct svn_wc_entry_callbacks_t *""'");
}
- arg1 = (svn_wc_entry_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_entry_callbacks_t *)(argp1);
{
free((char *) arg1);
@@ -18775,7 +18923,7 @@ XS(_wrap_svn_wc_maybe_set_repos_root) {
XS(_wrap_svn_wc_status3_t_kind_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -18789,9 +18937,9 @@ XS(_wrap_svn_wc_status3_t_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_kind_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_kind_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status3_t_kind_set" "', argument " "2"" of type '" "svn_node_kind_t""'");
@@ -18812,7 +18960,7 @@ XS(_wrap_svn_wc_status3_t_kind_set) {
XS(_wrap_svn_wc_status3_t_kind_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -18824,9 +18972,9 @@ XS(_wrap_svn_wc_status3_t_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_kind_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_kind_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -18840,7 +18988,7 @@ XS(_wrap_svn_wc_status3_t_kind_get) {
XS(_wrap_svn_wc_status3_t_depth_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_depth_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -18854,9 +19002,9 @@ XS(_wrap_svn_wc_status3_t_depth_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_depth_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_depth_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status3_t_depth_set" "', argument " "2"" of type '" "svn_depth_t""'");
@@ -18877,7 +19025,7 @@ XS(_wrap_svn_wc_status3_t_depth_set) {
XS(_wrap_svn_wc_status3_t_depth_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -18889,9 +19037,9 @@ XS(_wrap_svn_wc_status3_t_depth_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_depth_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_depth_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (svn_depth_t) ((arg1)->depth);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -18905,7 +19053,7 @@ XS(_wrap_svn_wc_status3_t_depth_get) {
XS(_wrap_svn_wc_status3_t_filesize_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_filesize_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -18919,9 +19067,9 @@ XS(_wrap_svn_wc_status3_t_filesize_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_filesize_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_filesize_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status3_t_filesize_set" "', argument " "2"" of type '" "svn_filesize_t""'");
@@ -18942,7 +19090,7 @@ XS(_wrap_svn_wc_status3_t_filesize_set) {
XS(_wrap_svn_wc_status3_t_filesize_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -18954,9 +19102,9 @@ XS(_wrap_svn_wc_status3_t_filesize_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_filesize_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_filesize_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = ((arg1)->filesize);
{
char temp[256];
@@ -18975,7 +19123,7 @@ XS(_wrap_svn_wc_status3_t_filesize_get) {
XS(_wrap_svn_wc_status3_t_versioned_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -18989,9 +19137,9 @@ XS(_wrap_svn_wc_status3_t_versioned_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_versioned_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_versioned_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status3_t_versioned_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -19012,7 +19160,7 @@ XS(_wrap_svn_wc_status3_t_versioned_set) {
XS(_wrap_svn_wc_status3_t_versioned_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -19024,9 +19172,9 @@ XS(_wrap_svn_wc_status3_t_versioned_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_versioned_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_versioned_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (svn_boolean_t) ((arg1)->versioned);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -19040,7 +19188,7 @@ XS(_wrap_svn_wc_status3_t_versioned_get) {
XS(_wrap_svn_wc_status3_t_conflicted_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19054,9 +19202,9 @@ XS(_wrap_svn_wc_status3_t_conflicted_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_conflicted_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_conflicted_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status3_t_conflicted_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -19077,7 +19225,7 @@ XS(_wrap_svn_wc_status3_t_conflicted_set) {
XS(_wrap_svn_wc_status3_t_conflicted_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -19089,9 +19237,9 @@ XS(_wrap_svn_wc_status3_t_conflicted_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_conflicted_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_conflicted_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (svn_boolean_t) ((arg1)->conflicted);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -19105,7 +19253,7 @@ XS(_wrap_svn_wc_status3_t_conflicted_get) {
XS(_wrap_svn_wc_status3_t_node_status_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19119,9 +19267,9 @@ XS(_wrap_svn_wc_status3_t_node_status_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_node_status_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_node_status_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status3_t_node_status_set" "', argument " "2"" of type '" "enum svn_wc_status_kind""'");
@@ -19142,7 +19290,7 @@ XS(_wrap_svn_wc_status3_t_node_status_set) {
XS(_wrap_svn_wc_status3_t_node_status_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -19154,9 +19302,9 @@ XS(_wrap_svn_wc_status3_t_node_status_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_node_status_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_node_status_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->node_status);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -19170,7 +19318,7 @@ XS(_wrap_svn_wc_status3_t_node_status_get) {
XS(_wrap_svn_wc_status3_t_text_status_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19184,9 +19332,9 @@ XS(_wrap_svn_wc_status3_t_text_status_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_text_status_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_text_status_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status3_t_text_status_set" "', argument " "2"" of type '" "enum svn_wc_status_kind""'");
@@ -19207,7 +19355,7 @@ XS(_wrap_svn_wc_status3_t_text_status_set) {
XS(_wrap_svn_wc_status3_t_text_status_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -19219,9 +19367,9 @@ XS(_wrap_svn_wc_status3_t_text_status_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_text_status_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_text_status_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->text_status);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -19235,7 +19383,7 @@ XS(_wrap_svn_wc_status3_t_text_status_get) {
XS(_wrap_svn_wc_status3_t_prop_status_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19249,9 +19397,9 @@ XS(_wrap_svn_wc_status3_t_prop_status_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_prop_status_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_prop_status_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status3_t_prop_status_set" "', argument " "2"" of type '" "enum svn_wc_status_kind""'");
@@ -19272,7 +19420,7 @@ XS(_wrap_svn_wc_status3_t_prop_status_set) {
XS(_wrap_svn_wc_status3_t_prop_status_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -19284,9 +19432,9 @@ XS(_wrap_svn_wc_status3_t_prop_status_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_prop_status_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_prop_status_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->prop_status);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -19300,7 +19448,7 @@ XS(_wrap_svn_wc_status3_t_prop_status_get) {
XS(_wrap_svn_wc_status3_t_copied_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19314,9 +19462,9 @@ XS(_wrap_svn_wc_status3_t_copied_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_copied_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_copied_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status3_t_copied_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -19337,7 +19485,7 @@ XS(_wrap_svn_wc_status3_t_copied_set) {
XS(_wrap_svn_wc_status3_t_copied_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -19349,9 +19497,9 @@ XS(_wrap_svn_wc_status3_t_copied_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_copied_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_copied_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (svn_boolean_t) ((arg1)->copied);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -19365,7 +19513,7 @@ XS(_wrap_svn_wc_status3_t_copied_get) {
XS(_wrap_svn_wc_status3_t_revision_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19379,9 +19527,9 @@ XS(_wrap_svn_wc_status3_t_revision_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_revision_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_revision_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status3_t_revision_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -19402,7 +19550,7 @@ XS(_wrap_svn_wc_status3_t_revision_set) {
XS(_wrap_svn_wc_status3_t_revision_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -19414,9 +19562,9 @@ XS(_wrap_svn_wc_status3_t_revision_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_revision_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_revision_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (svn_revnum_t) ((arg1)->revision);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -19430,7 +19578,7 @@ XS(_wrap_svn_wc_status3_t_revision_get) {
XS(_wrap_svn_wc_status3_t_changed_rev_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19444,9 +19592,9 @@ XS(_wrap_svn_wc_status3_t_changed_rev_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_changed_rev_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_changed_rev_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status3_t_changed_rev_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -19467,7 +19615,7 @@ XS(_wrap_svn_wc_status3_t_changed_rev_set) {
XS(_wrap_svn_wc_status3_t_changed_rev_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -19479,9 +19627,9 @@ XS(_wrap_svn_wc_status3_t_changed_rev_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_changed_rev_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_changed_rev_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (svn_revnum_t) ((arg1)->changed_rev);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -19495,7 +19643,7 @@ XS(_wrap_svn_wc_status3_t_changed_rev_get) {
XS(_wrap_svn_wc_status3_t_changed_date_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19509,9 +19657,9 @@ XS(_wrap_svn_wc_status3_t_changed_date_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_changed_date_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_changed_date_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status3_t_changed_date_set" "', argument " "2"" of type '" "apr_time_t""'");
@@ -19532,7 +19680,7 @@ XS(_wrap_svn_wc_status3_t_changed_date_set) {
XS(_wrap_svn_wc_status3_t_changed_date_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -19544,9 +19692,9 @@ XS(_wrap_svn_wc_status3_t_changed_date_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_changed_date_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_changed_date_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = ((arg1)->changed_date);
{
char temp[256];
@@ -19565,7 +19713,7 @@ XS(_wrap_svn_wc_status3_t_changed_date_get) {
XS(_wrap_svn_wc_status3_t_changed_author_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19580,9 +19728,9 @@ XS(_wrap_svn_wc_status3_t_changed_author_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_changed_author_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_changed_author_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_status3_t_changed_author_set" "', argument " "2"" of type '" "char const *""'");
@@ -19610,7 +19758,7 @@ XS(_wrap_svn_wc_status3_t_changed_author_set) {
XS(_wrap_svn_wc_status3_t_changed_author_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -19622,9 +19770,9 @@ XS(_wrap_svn_wc_status3_t_changed_author_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_changed_author_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_changed_author_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (char *) ((arg1)->changed_author);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -19638,7 +19786,7 @@ XS(_wrap_svn_wc_status3_t_changed_author_get) {
XS(_wrap_svn_wc_status3_t_repos_root_url_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19653,9 +19801,9 @@ XS(_wrap_svn_wc_status3_t_repos_root_url_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_root_url_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_root_url_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_status3_t_repos_root_url_set" "', argument " "2"" of type '" "char const *""'");
@@ -19683,7 +19831,7 @@ XS(_wrap_svn_wc_status3_t_repos_root_url_set) {
XS(_wrap_svn_wc_status3_t_repos_root_url_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -19695,9 +19843,9 @@ XS(_wrap_svn_wc_status3_t_repos_root_url_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_root_url_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_root_url_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (char *) ((arg1)->repos_root_url);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -19711,7 +19859,7 @@ XS(_wrap_svn_wc_status3_t_repos_root_url_get) {
XS(_wrap_svn_wc_status3_t_repos_uuid_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19726,9 +19874,9 @@ XS(_wrap_svn_wc_status3_t_repos_uuid_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_uuid_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_uuid_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_status3_t_repos_uuid_set" "', argument " "2"" of type '" "char const *""'");
@@ -19756,7 +19904,7 @@ XS(_wrap_svn_wc_status3_t_repos_uuid_set) {
XS(_wrap_svn_wc_status3_t_repos_uuid_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -19768,9 +19916,9 @@ XS(_wrap_svn_wc_status3_t_repos_uuid_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_uuid_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_uuid_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (char *) ((arg1)->repos_uuid);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -19784,7 +19932,7 @@ XS(_wrap_svn_wc_status3_t_repos_uuid_get) {
XS(_wrap_svn_wc_status3_t_repos_relpath_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19799,9 +19947,9 @@ XS(_wrap_svn_wc_status3_t_repos_relpath_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_relpath_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_relpath_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_status3_t_repos_relpath_set" "', argument " "2"" of type '" "char const *""'");
@@ -19829,7 +19977,7 @@ XS(_wrap_svn_wc_status3_t_repos_relpath_set) {
XS(_wrap_svn_wc_status3_t_repos_relpath_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -19841,9 +19989,9 @@ XS(_wrap_svn_wc_status3_t_repos_relpath_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_relpath_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_relpath_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (char *) ((arg1)->repos_relpath);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -19857,7 +20005,7 @@ XS(_wrap_svn_wc_status3_t_repos_relpath_get) {
XS(_wrap_svn_wc_status3_t_switched_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19871,9 +20019,9 @@ XS(_wrap_svn_wc_status3_t_switched_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_switched_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_switched_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status3_t_switched_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -19894,7 +20042,7 @@ XS(_wrap_svn_wc_status3_t_switched_set) {
XS(_wrap_svn_wc_status3_t_switched_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -19906,9 +20054,9 @@ XS(_wrap_svn_wc_status3_t_switched_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_switched_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_switched_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (svn_boolean_t) ((arg1)->switched);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -19922,7 +20070,7 @@ XS(_wrap_svn_wc_status3_t_switched_get) {
XS(_wrap_svn_wc_status3_t_locked_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19936,9 +20084,9 @@ XS(_wrap_svn_wc_status3_t_locked_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_locked_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_locked_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status3_t_locked_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -19959,7 +20107,7 @@ XS(_wrap_svn_wc_status3_t_locked_set) {
XS(_wrap_svn_wc_status3_t_locked_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -19971,9 +20119,9 @@ XS(_wrap_svn_wc_status3_t_locked_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_locked_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_locked_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (svn_boolean_t) ((arg1)->locked);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -19987,7 +20135,7 @@ XS(_wrap_svn_wc_status3_t_locked_get) {
XS(_wrap_svn_wc_status3_t_lock_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_lock_t *arg2 = (svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -20001,9 +20149,9 @@ XS(_wrap_svn_wc_status3_t_lock_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_lock_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_lock_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_lock_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_status3_t_lock_set" "', argument " "2"" of type '" "svn_lock_t const *""'");
@@ -20024,7 +20172,7 @@ XS(_wrap_svn_wc_status3_t_lock_set) {
XS(_wrap_svn_wc_status3_t_lock_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -20036,9 +20184,9 @@ XS(_wrap_svn_wc_status3_t_lock_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_lock_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_lock_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (svn_lock_t *) ((arg1)->lock);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_lock_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -20052,7 +20200,7 @@ XS(_wrap_svn_wc_status3_t_lock_get) {
XS(_wrap_svn_wc_status3_t_changelist_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -20067,9 +20215,9 @@ XS(_wrap_svn_wc_status3_t_changelist_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_changelist_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_changelist_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_status3_t_changelist_set" "', argument " "2"" of type '" "char const *""'");
@@ -20097,7 +20245,7 @@ XS(_wrap_svn_wc_status3_t_changelist_set) {
XS(_wrap_svn_wc_status3_t_changelist_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -20109,9 +20257,9 @@ XS(_wrap_svn_wc_status3_t_changelist_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_changelist_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_changelist_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (char *) ((arg1)->changelist);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -20125,7 +20273,7 @@ XS(_wrap_svn_wc_status3_t_changelist_get) {
XS(_wrap_svn_wc_status3_t_ood_kind_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -20139,9 +20287,9 @@ XS(_wrap_svn_wc_status3_t_ood_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_ood_kind_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_ood_kind_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status3_t_ood_kind_set" "', argument " "2"" of type '" "svn_node_kind_t""'");
@@ -20162,7 +20310,7 @@ XS(_wrap_svn_wc_status3_t_ood_kind_set) {
XS(_wrap_svn_wc_status3_t_ood_kind_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -20174,9 +20322,9 @@ XS(_wrap_svn_wc_status3_t_ood_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_ood_kind_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_ood_kind_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->ood_kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -20190,7 +20338,7 @@ XS(_wrap_svn_wc_status3_t_ood_kind_get) {
XS(_wrap_svn_wc_status3_t_repos_node_status_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -20204,9 +20352,9 @@ XS(_wrap_svn_wc_status3_t_repos_node_status_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_node_status_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_node_status_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status3_t_repos_node_status_set" "', argument " "2"" of type '" "enum svn_wc_status_kind""'");
@@ -20227,7 +20375,7 @@ XS(_wrap_svn_wc_status3_t_repos_node_status_set) {
XS(_wrap_svn_wc_status3_t_repos_node_status_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -20239,9 +20387,9 @@ XS(_wrap_svn_wc_status3_t_repos_node_status_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_node_status_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_node_status_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->repos_node_status);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -20255,7 +20403,7 @@ XS(_wrap_svn_wc_status3_t_repos_node_status_get) {
XS(_wrap_svn_wc_status3_t_repos_text_status_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -20269,9 +20417,9 @@ XS(_wrap_svn_wc_status3_t_repos_text_status_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_text_status_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_text_status_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status3_t_repos_text_status_set" "', argument " "2"" of type '" "enum svn_wc_status_kind""'");
@@ -20292,7 +20440,7 @@ XS(_wrap_svn_wc_status3_t_repos_text_status_set) {
XS(_wrap_svn_wc_status3_t_repos_text_status_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -20304,9 +20452,9 @@ XS(_wrap_svn_wc_status3_t_repos_text_status_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_text_status_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_text_status_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->repos_text_status);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -20320,7 +20468,7 @@ XS(_wrap_svn_wc_status3_t_repos_text_status_get) {
XS(_wrap_svn_wc_status3_t_repos_prop_status_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -20334,9 +20482,9 @@ XS(_wrap_svn_wc_status3_t_repos_prop_status_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_prop_status_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_prop_status_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status3_t_repos_prop_status_set" "', argument " "2"" of type '" "enum svn_wc_status_kind""'");
@@ -20357,7 +20505,7 @@ XS(_wrap_svn_wc_status3_t_repos_prop_status_set) {
XS(_wrap_svn_wc_status3_t_repos_prop_status_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -20369,9 +20517,9 @@ XS(_wrap_svn_wc_status3_t_repos_prop_status_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_prop_status_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_prop_status_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->repos_prop_status);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -20385,7 +20533,7 @@ XS(_wrap_svn_wc_status3_t_repos_prop_status_get) {
XS(_wrap_svn_wc_status3_t_repos_lock_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_lock_t *arg2 = (svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -20399,9 +20547,9 @@ XS(_wrap_svn_wc_status3_t_repos_lock_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_lock_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_lock_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_lock_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_status3_t_repos_lock_set" "', argument " "2"" of type '" "svn_lock_t const *""'");
@@ -20422,7 +20570,7 @@ XS(_wrap_svn_wc_status3_t_repos_lock_set) {
XS(_wrap_svn_wc_status3_t_repos_lock_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -20434,9 +20582,9 @@ XS(_wrap_svn_wc_status3_t_repos_lock_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_lock_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_repos_lock_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (svn_lock_t *) ((arg1)->repos_lock);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_lock_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -20450,7 +20598,7 @@ XS(_wrap_svn_wc_status3_t_repos_lock_get) {
XS(_wrap_svn_wc_status3_t_ood_changed_rev_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -20464,9 +20612,9 @@ XS(_wrap_svn_wc_status3_t_ood_changed_rev_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_ood_changed_rev_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_ood_changed_rev_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status3_t_ood_changed_rev_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -20487,7 +20635,7 @@ XS(_wrap_svn_wc_status3_t_ood_changed_rev_set) {
XS(_wrap_svn_wc_status3_t_ood_changed_rev_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -20499,9 +20647,9 @@ XS(_wrap_svn_wc_status3_t_ood_changed_rev_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_ood_changed_rev_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_ood_changed_rev_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (svn_revnum_t) ((arg1)->ood_changed_rev);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -20515,7 +20663,7 @@ XS(_wrap_svn_wc_status3_t_ood_changed_rev_get) {
XS(_wrap_svn_wc_status3_t_ood_changed_date_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -20529,9 +20677,9 @@ XS(_wrap_svn_wc_status3_t_ood_changed_date_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_ood_changed_date_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_ood_changed_date_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status3_t_ood_changed_date_set" "', argument " "2"" of type '" "apr_time_t""'");
@@ -20552,7 +20700,7 @@ XS(_wrap_svn_wc_status3_t_ood_changed_date_set) {
XS(_wrap_svn_wc_status3_t_ood_changed_date_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -20564,9 +20712,9 @@ XS(_wrap_svn_wc_status3_t_ood_changed_date_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_ood_changed_date_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_ood_changed_date_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = ((arg1)->ood_changed_date);
{
char temp[256];
@@ -20585,7 +20733,7 @@ XS(_wrap_svn_wc_status3_t_ood_changed_date_get) {
XS(_wrap_svn_wc_status3_t_ood_changed_author_set) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -20600,9 +20748,9 @@ XS(_wrap_svn_wc_status3_t_ood_changed_author_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_ood_changed_author_set" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_ood_changed_author_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_status3_t_ood_changed_author_set" "', argument " "2"" of type '" "char const *""'");
@@ -20630,7 +20778,7 @@ XS(_wrap_svn_wc_status3_t_ood_changed_author_set) {
XS(_wrap_svn_wc_status3_t_ood_changed_author_get) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -20642,9 +20790,9 @@ XS(_wrap_svn_wc_status3_t_ood_changed_author_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_ood_changed_author_get" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_ood_changed_author_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (char *) ((arg1)->ood_changed_author);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -20656,17 +20804,228 @@ XS(_wrap_svn_wc_status3_t_ood_changed_author_get) {
}
+XS(_wrap_svn_wc_status3_t_moved_from_abspath_set) {
+ {
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_wc_status3_t_moved_from_abspath_set(self,moved_from_abspath);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_moved_from_abspath_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
+ }
+ arg1 = (struct svn_wc_status3_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_status3_t_moved_from_abspath_set" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->moved_from_abspath) free((char *)arg1->moved_from_abspath);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->moved_from_abspath = copied;
+ }
+ ST(argvi) = sv_newmortal();
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_wc_status3_t_moved_from_abspath_get) {
+ {
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ char *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_wc_status3_t_moved_from_abspath_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_moved_from_abspath_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
+ }
+ arg1 = (struct svn_wc_status3_t *)(argp1);
+ result = (char *) ((arg1)->moved_from_abspath);
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_wc_status3_t_moved_to_abspath_set) {
+ {
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_wc_status3_t_moved_to_abspath_set(self,moved_to_abspath);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_moved_to_abspath_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
+ }
+ arg1 = (struct svn_wc_status3_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_status3_t_moved_to_abspath_set" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->moved_to_abspath) free((char *)arg1->moved_to_abspath);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->moved_to_abspath = copied;
+ }
+ ST(argvi) = sv_newmortal();
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_wc_status3_t_moved_to_abspath_get) {
+ {
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ char *result = 0 ;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_wc_status3_t_moved_to_abspath_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_moved_to_abspath_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
+ }
+ arg1 = (struct svn_wc_status3_t *)(argp1);
+ result = (char *) ((arg1)->moved_to_abspath);
+ ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_wc_status3_t_file_external_set) {
+ {
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
+ svn_boolean_t arg2 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int val2 ;
+ int ecode2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: svn_wc_status3_t_file_external_set(self,file_external);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_file_external_set" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
+ }
+ arg1 = (struct svn_wc_status3_t *)(argp1);
+ ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status3_t_file_external_set" "', argument " "2"" of type '" "svn_boolean_t""'");
+ }
+ arg2 = (svn_boolean_t)(val2);
+ if (arg1) (arg1)->file_external = arg2;
+ ST(argvi) = sv_newmortal();
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_svn_wc_status3_t_file_external_get) {
+ {
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int argvi = 0;
+ svn_boolean_t result;
+ dXSARGS;
+
+ if ((items < 1) || (items > 1)) {
+ SWIG_croak("Usage: svn_wc_status3_t_file_external_get(self);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status3_t_file_external_get" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
+ }
+ arg1 = (struct svn_wc_status3_t *)(argp1);
+ result = (svn_boolean_t) ((arg1)->file_external);
+ ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
+
+ XSRETURN(argvi);
+ fail:
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_new_svn_wc_status3_t) {
{
int argvi = 0;
- svn_wc_status3_t *result = 0 ;
+ struct svn_wc_status3_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_wc_status3_t();");
}
{
- result = (svn_wc_status3_t *)calloc(1, sizeof(svn_wc_status3_t));
+ result = (struct svn_wc_status3_t *)calloc(1, sizeof(struct svn_wc_status3_t));
@@ -20681,7 +21040,7 @@ XS(_wrap_new_svn_wc_status3_t) {
XS(_wrap_delete_svn_wc_status3_t) {
{
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -20692,9 +21051,9 @@ XS(_wrap_delete_svn_wc_status3_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status3_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_status3_t" "', argument " "1"" of type '" "svn_wc_status3_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_status3_t" "', argument " "1"" of type '" "struct svn_wc_status3_t *""'");
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
{
free((char *) arg1);
@@ -20713,7 +21072,7 @@ XS(_wrap_delete_svn_wc_status3_t) {
XS(_wrap_svn_wc_status2_t_entry_set) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_wc_entry_t *arg2 = (svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -20727,9 +21086,9 @@ XS(_wrap_svn_wc_status2_t_entry_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_entry_set" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_entry_set" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_wc_entry_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_status2_t_entry_set" "', argument " "2"" of type '" "svn_wc_entry_t const *""'");
@@ -20750,7 +21109,7 @@ XS(_wrap_svn_wc_status2_t_entry_set) {
XS(_wrap_svn_wc_status2_t_entry_get) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -20762,9 +21121,9 @@ XS(_wrap_svn_wc_status2_t_entry_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_entry_get" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_entry_get" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (svn_wc_entry_t *) ((arg1)->entry);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_wc_entry_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -20778,7 +21137,7 @@ XS(_wrap_svn_wc_status2_t_entry_get) {
XS(_wrap_svn_wc_status2_t_text_status_set) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -20792,9 +21151,9 @@ XS(_wrap_svn_wc_status2_t_text_status_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_text_status_set" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_text_status_set" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status2_t_text_status_set" "', argument " "2"" of type '" "enum svn_wc_status_kind""'");
@@ -20815,7 +21174,7 @@ XS(_wrap_svn_wc_status2_t_text_status_set) {
XS(_wrap_svn_wc_status2_t_text_status_get) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -20827,9 +21186,9 @@ XS(_wrap_svn_wc_status2_t_text_status_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_text_status_get" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_text_status_get" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->text_status);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -20843,7 +21202,7 @@ XS(_wrap_svn_wc_status2_t_text_status_get) {
XS(_wrap_svn_wc_status2_t_prop_status_set) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -20857,9 +21216,9 @@ XS(_wrap_svn_wc_status2_t_prop_status_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_prop_status_set" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_prop_status_set" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status2_t_prop_status_set" "', argument " "2"" of type '" "enum svn_wc_status_kind""'");
@@ -20880,7 +21239,7 @@ XS(_wrap_svn_wc_status2_t_prop_status_set) {
XS(_wrap_svn_wc_status2_t_prop_status_get) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -20892,9 +21251,9 @@ XS(_wrap_svn_wc_status2_t_prop_status_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_prop_status_get" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_prop_status_get" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->prop_status);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -20908,7 +21267,7 @@ XS(_wrap_svn_wc_status2_t_prop_status_get) {
XS(_wrap_svn_wc_status2_t_locked_set) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -20922,9 +21281,9 @@ XS(_wrap_svn_wc_status2_t_locked_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_locked_set" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_locked_set" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status2_t_locked_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -20945,7 +21304,7 @@ XS(_wrap_svn_wc_status2_t_locked_set) {
XS(_wrap_svn_wc_status2_t_locked_get) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -20957,9 +21316,9 @@ XS(_wrap_svn_wc_status2_t_locked_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_locked_get" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_locked_get" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (svn_boolean_t) ((arg1)->locked);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -20973,7 +21332,7 @@ XS(_wrap_svn_wc_status2_t_locked_get) {
XS(_wrap_svn_wc_status2_t_copied_set) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -20987,9 +21346,9 @@ XS(_wrap_svn_wc_status2_t_copied_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_copied_set" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_copied_set" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status2_t_copied_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -21010,7 +21369,7 @@ XS(_wrap_svn_wc_status2_t_copied_set) {
XS(_wrap_svn_wc_status2_t_copied_get) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -21022,9 +21381,9 @@ XS(_wrap_svn_wc_status2_t_copied_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_copied_get" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_copied_get" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (svn_boolean_t) ((arg1)->copied);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -21038,7 +21397,7 @@ XS(_wrap_svn_wc_status2_t_copied_get) {
XS(_wrap_svn_wc_status2_t_switched_set) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -21052,9 +21411,9 @@ XS(_wrap_svn_wc_status2_t_switched_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_switched_set" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_switched_set" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status2_t_switched_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -21075,7 +21434,7 @@ XS(_wrap_svn_wc_status2_t_switched_set) {
XS(_wrap_svn_wc_status2_t_switched_get) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -21087,9 +21446,9 @@ XS(_wrap_svn_wc_status2_t_switched_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_switched_get" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_switched_get" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (svn_boolean_t) ((arg1)->switched);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -21103,7 +21462,7 @@ XS(_wrap_svn_wc_status2_t_switched_get) {
XS(_wrap_svn_wc_status2_t_repos_text_status_set) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -21117,9 +21476,9 @@ XS(_wrap_svn_wc_status2_t_repos_text_status_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_repos_text_status_set" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_repos_text_status_set" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status2_t_repos_text_status_set" "', argument " "2"" of type '" "enum svn_wc_status_kind""'");
@@ -21140,7 +21499,7 @@ XS(_wrap_svn_wc_status2_t_repos_text_status_set) {
XS(_wrap_svn_wc_status2_t_repos_text_status_get) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -21152,9 +21511,9 @@ XS(_wrap_svn_wc_status2_t_repos_text_status_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_repos_text_status_get" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_repos_text_status_get" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->repos_text_status);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -21168,7 +21527,7 @@ XS(_wrap_svn_wc_status2_t_repos_text_status_get) {
XS(_wrap_svn_wc_status2_t_repos_prop_status_set) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -21182,9 +21541,9 @@ XS(_wrap_svn_wc_status2_t_repos_prop_status_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_repos_prop_status_set" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_repos_prop_status_set" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status2_t_repos_prop_status_set" "', argument " "2"" of type '" "enum svn_wc_status_kind""'");
@@ -21205,7 +21564,7 @@ XS(_wrap_svn_wc_status2_t_repos_prop_status_set) {
XS(_wrap_svn_wc_status2_t_repos_prop_status_get) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -21217,9 +21576,9 @@ XS(_wrap_svn_wc_status2_t_repos_prop_status_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_repos_prop_status_get" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_repos_prop_status_get" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->repos_prop_status);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -21233,7 +21592,7 @@ XS(_wrap_svn_wc_status2_t_repos_prop_status_get) {
XS(_wrap_svn_wc_status2_t_repos_lock_set) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_lock_t *arg2 = (svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -21247,9 +21606,9 @@ XS(_wrap_svn_wc_status2_t_repos_lock_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_repos_lock_set" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_repos_lock_set" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_lock_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_status2_t_repos_lock_set" "', argument " "2"" of type '" "svn_lock_t *""'");
@@ -21270,7 +21629,7 @@ XS(_wrap_svn_wc_status2_t_repos_lock_set) {
XS(_wrap_svn_wc_status2_t_repos_lock_get) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -21282,9 +21641,9 @@ XS(_wrap_svn_wc_status2_t_repos_lock_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_repos_lock_get" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_repos_lock_get" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (svn_lock_t *) ((arg1)->repos_lock);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_lock_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -21298,7 +21657,7 @@ XS(_wrap_svn_wc_status2_t_repos_lock_get) {
XS(_wrap_svn_wc_status2_t_url_set) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -21313,9 +21672,9 @@ XS(_wrap_svn_wc_status2_t_url_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_url_set" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_url_set" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_status2_t_url_set" "', argument " "2"" of type '" "char const *""'");
@@ -21343,7 +21702,7 @@ XS(_wrap_svn_wc_status2_t_url_set) {
XS(_wrap_svn_wc_status2_t_url_get) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -21355,9 +21714,9 @@ XS(_wrap_svn_wc_status2_t_url_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_url_get" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_url_get" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (char *) ((arg1)->url);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -21371,7 +21730,7 @@ XS(_wrap_svn_wc_status2_t_url_get) {
XS(_wrap_svn_wc_status2_t_ood_last_cmt_rev_set) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -21385,9 +21744,9 @@ XS(_wrap_svn_wc_status2_t_ood_last_cmt_rev_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_ood_last_cmt_rev_set" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_ood_last_cmt_rev_set" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status2_t_ood_last_cmt_rev_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -21408,7 +21767,7 @@ XS(_wrap_svn_wc_status2_t_ood_last_cmt_rev_set) {
XS(_wrap_svn_wc_status2_t_ood_last_cmt_rev_get) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -21420,9 +21779,9 @@ XS(_wrap_svn_wc_status2_t_ood_last_cmt_rev_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_ood_last_cmt_rev_get" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_ood_last_cmt_rev_get" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (svn_revnum_t) ((arg1)->ood_last_cmt_rev);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -21436,7 +21795,7 @@ XS(_wrap_svn_wc_status2_t_ood_last_cmt_rev_get) {
XS(_wrap_svn_wc_status2_t_ood_last_cmt_date_set) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -21450,9 +21809,9 @@ XS(_wrap_svn_wc_status2_t_ood_last_cmt_date_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_ood_last_cmt_date_set" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_ood_last_cmt_date_set" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status2_t_ood_last_cmt_date_set" "', argument " "2"" of type '" "apr_time_t""'");
@@ -21473,7 +21832,7 @@ XS(_wrap_svn_wc_status2_t_ood_last_cmt_date_set) {
XS(_wrap_svn_wc_status2_t_ood_last_cmt_date_get) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -21485,9 +21844,9 @@ XS(_wrap_svn_wc_status2_t_ood_last_cmt_date_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_ood_last_cmt_date_get" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_ood_last_cmt_date_get" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = ((arg1)->ood_last_cmt_date);
{
char temp[256];
@@ -21506,7 +21865,7 @@ XS(_wrap_svn_wc_status2_t_ood_last_cmt_date_get) {
XS(_wrap_svn_wc_status2_t_ood_kind_set) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -21520,9 +21879,9 @@ XS(_wrap_svn_wc_status2_t_ood_kind_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_ood_kind_set" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_ood_kind_set" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status2_t_ood_kind_set" "', argument " "2"" of type '" "svn_node_kind_t""'");
@@ -21543,7 +21902,7 @@ XS(_wrap_svn_wc_status2_t_ood_kind_set) {
XS(_wrap_svn_wc_status2_t_ood_kind_get) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -21555,9 +21914,9 @@ XS(_wrap_svn_wc_status2_t_ood_kind_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_ood_kind_get" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_ood_kind_get" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->ood_kind);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -21571,7 +21930,7 @@ XS(_wrap_svn_wc_status2_t_ood_kind_get) {
XS(_wrap_svn_wc_status2_t_ood_last_cmt_author_set) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -21586,9 +21945,9 @@ XS(_wrap_svn_wc_status2_t_ood_last_cmt_author_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_ood_last_cmt_author_set" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_ood_last_cmt_author_set" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_status2_t_ood_last_cmt_author_set" "', argument " "2"" of type '" "char const *""'");
@@ -21616,7 +21975,7 @@ XS(_wrap_svn_wc_status2_t_ood_last_cmt_author_set) {
XS(_wrap_svn_wc_status2_t_ood_last_cmt_author_get) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -21628,9 +21987,9 @@ XS(_wrap_svn_wc_status2_t_ood_last_cmt_author_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_ood_last_cmt_author_get" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_ood_last_cmt_author_get" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (char *) ((arg1)->ood_last_cmt_author);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@@ -21644,7 +22003,7 @@ XS(_wrap_svn_wc_status2_t_ood_last_cmt_author_get) {
XS(_wrap_svn_wc_status2_t_tree_conflict_set) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_wc_conflict_description_t *arg2 = (svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -21658,9 +22017,9 @@ XS(_wrap_svn_wc_status2_t_tree_conflict_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_tree_conflict_set" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_tree_conflict_set" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_wc_conflict_description_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_status2_t_tree_conflict_set" "', argument " "2"" of type '" "svn_wc_conflict_description_t *""'");
@@ -21681,7 +22040,7 @@ XS(_wrap_svn_wc_status2_t_tree_conflict_set) {
XS(_wrap_svn_wc_status2_t_tree_conflict_get) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -21693,9 +22052,9 @@ XS(_wrap_svn_wc_status2_t_tree_conflict_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_tree_conflict_get" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_tree_conflict_get" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (svn_wc_conflict_description_t *) ((arg1)->tree_conflict);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_wc_conflict_description_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -21709,7 +22068,7 @@ XS(_wrap_svn_wc_status2_t_tree_conflict_get) {
XS(_wrap_svn_wc_status2_t_file_external_set) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -21723,9 +22082,9 @@ XS(_wrap_svn_wc_status2_t_file_external_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_file_external_set" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_file_external_set" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status2_t_file_external_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -21746,7 +22105,7 @@ XS(_wrap_svn_wc_status2_t_file_external_set) {
XS(_wrap_svn_wc_status2_t_file_external_get) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -21758,9 +22117,9 @@ XS(_wrap_svn_wc_status2_t_file_external_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_file_external_get" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_file_external_get" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (svn_boolean_t) ((arg1)->file_external);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -21774,7 +22133,7 @@ XS(_wrap_svn_wc_status2_t_file_external_get) {
XS(_wrap_svn_wc_status2_t_pristine_text_status_set) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -21788,9 +22147,9 @@ XS(_wrap_svn_wc_status2_t_pristine_text_status_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_pristine_text_status_set" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_pristine_text_status_set" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status2_t_pristine_text_status_set" "', argument " "2"" of type '" "enum svn_wc_status_kind""'");
@@ -21811,7 +22170,7 @@ XS(_wrap_svn_wc_status2_t_pristine_text_status_set) {
XS(_wrap_svn_wc_status2_t_pristine_text_status_get) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -21823,9 +22182,9 @@ XS(_wrap_svn_wc_status2_t_pristine_text_status_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_pristine_text_status_get" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_pristine_text_status_get" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->pristine_text_status);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -21839,7 +22198,7 @@ XS(_wrap_svn_wc_status2_t_pristine_text_status_get) {
XS(_wrap_svn_wc_status2_t_pristine_prop_status_set) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -21853,9 +22212,9 @@ XS(_wrap_svn_wc_status2_t_pristine_prop_status_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_pristine_prop_status_set" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_pristine_prop_status_set" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status2_t_pristine_prop_status_set" "', argument " "2"" of type '" "enum svn_wc_status_kind""'");
@@ -21876,7 +22235,7 @@ XS(_wrap_svn_wc_status2_t_pristine_prop_status_set) {
XS(_wrap_svn_wc_status2_t_pristine_prop_status_get) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -21888,9 +22247,9 @@ XS(_wrap_svn_wc_status2_t_pristine_prop_status_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_pristine_prop_status_get" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status2_t_pristine_prop_status_get" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->pristine_prop_status);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -21905,14 +22264,14 @@ XS(_wrap_svn_wc_status2_t_pristine_prop_status_get) {
XS(_wrap_new_svn_wc_status2_t) {
{
int argvi = 0;
- svn_wc_status2_t *result = 0 ;
+ struct svn_wc_status2_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_wc_status2_t();");
}
{
- result = (svn_wc_status2_t *)calloc(1, sizeof(svn_wc_status2_t));
+ result = (struct svn_wc_status2_t *)calloc(1, sizeof(struct svn_wc_status2_t));
@@ -21927,7 +22286,7 @@ XS(_wrap_new_svn_wc_status2_t) {
XS(_wrap_delete_svn_wc_status2_t) {
{
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -21938,9 +22297,9 @@ XS(_wrap_delete_svn_wc_status2_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status2_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_status2_t" "', argument " "1"" of type '" "svn_wc_status2_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_status2_t" "', argument " "1"" of type '" "struct svn_wc_status2_t *""'");
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
{
free((char *) arg1);
@@ -21959,7 +22318,7 @@ XS(_wrap_delete_svn_wc_status2_t) {
XS(_wrap_svn_wc_status_t_entry_set) {
{
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
svn_wc_entry_t *arg2 = (svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -21973,9 +22332,9 @@ XS(_wrap_svn_wc_status_t_entry_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_entry_set" "', argument " "1"" of type '" "svn_wc_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_entry_set" "', argument " "1"" of type '" "struct svn_wc_status_t *""'");
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_svn_wc_entry_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_status_t_entry_set" "', argument " "2"" of type '" "svn_wc_entry_t const *""'");
@@ -21996,7 +22355,7 @@ XS(_wrap_svn_wc_status_t_entry_set) {
XS(_wrap_svn_wc_status_t_entry_get) {
{
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -22008,9 +22367,9 @@ XS(_wrap_svn_wc_status_t_entry_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_entry_get" "', argument " "1"" of type '" "svn_wc_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_entry_get" "', argument " "1"" of type '" "struct svn_wc_status_t *""'");
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
result = (svn_wc_entry_t *) ((arg1)->entry);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_wc_entry_t, 0 | SWIG_SHADOW); argvi++ ;
@@ -22024,7 +22383,7 @@ XS(_wrap_svn_wc_status_t_entry_get) {
XS(_wrap_svn_wc_status_t_text_status_set) {
{
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -22038,9 +22397,9 @@ XS(_wrap_svn_wc_status_t_text_status_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_text_status_set" "', argument " "1"" of type '" "svn_wc_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_text_status_set" "', argument " "1"" of type '" "struct svn_wc_status_t *""'");
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status_t_text_status_set" "', argument " "2"" of type '" "enum svn_wc_status_kind""'");
@@ -22061,7 +22420,7 @@ XS(_wrap_svn_wc_status_t_text_status_set) {
XS(_wrap_svn_wc_status_t_text_status_get) {
{
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -22073,9 +22432,9 @@ XS(_wrap_svn_wc_status_t_text_status_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_text_status_get" "', argument " "1"" of type '" "svn_wc_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_text_status_get" "', argument " "1"" of type '" "struct svn_wc_status_t *""'");
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->text_status);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -22089,7 +22448,7 @@ XS(_wrap_svn_wc_status_t_text_status_get) {
XS(_wrap_svn_wc_status_t_prop_status_set) {
{
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -22103,9 +22462,9 @@ XS(_wrap_svn_wc_status_t_prop_status_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_prop_status_set" "', argument " "1"" of type '" "svn_wc_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_prop_status_set" "', argument " "1"" of type '" "struct svn_wc_status_t *""'");
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status_t_prop_status_set" "', argument " "2"" of type '" "enum svn_wc_status_kind""'");
@@ -22126,7 +22485,7 @@ XS(_wrap_svn_wc_status_t_prop_status_set) {
XS(_wrap_svn_wc_status_t_prop_status_get) {
{
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -22138,9 +22497,9 @@ XS(_wrap_svn_wc_status_t_prop_status_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_prop_status_get" "', argument " "1"" of type '" "svn_wc_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_prop_status_get" "', argument " "1"" of type '" "struct svn_wc_status_t *""'");
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->prop_status);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -22154,7 +22513,7 @@ XS(_wrap_svn_wc_status_t_prop_status_get) {
XS(_wrap_svn_wc_status_t_locked_set) {
{
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -22168,9 +22527,9 @@ XS(_wrap_svn_wc_status_t_locked_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_locked_set" "', argument " "1"" of type '" "svn_wc_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_locked_set" "', argument " "1"" of type '" "struct svn_wc_status_t *""'");
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status_t_locked_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -22191,7 +22550,7 @@ XS(_wrap_svn_wc_status_t_locked_set) {
XS(_wrap_svn_wc_status_t_locked_get) {
{
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -22203,9 +22562,9 @@ XS(_wrap_svn_wc_status_t_locked_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_locked_get" "', argument " "1"" of type '" "svn_wc_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_locked_get" "', argument " "1"" of type '" "struct svn_wc_status_t *""'");
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
result = (svn_boolean_t) ((arg1)->locked);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -22219,7 +22578,7 @@ XS(_wrap_svn_wc_status_t_locked_get) {
XS(_wrap_svn_wc_status_t_copied_set) {
{
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -22233,9 +22592,9 @@ XS(_wrap_svn_wc_status_t_copied_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_copied_set" "', argument " "1"" of type '" "svn_wc_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_copied_set" "', argument " "1"" of type '" "struct svn_wc_status_t *""'");
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status_t_copied_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -22256,7 +22615,7 @@ XS(_wrap_svn_wc_status_t_copied_set) {
XS(_wrap_svn_wc_status_t_copied_get) {
{
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -22268,9 +22627,9 @@ XS(_wrap_svn_wc_status_t_copied_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_copied_get" "', argument " "1"" of type '" "svn_wc_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_copied_get" "', argument " "1"" of type '" "struct svn_wc_status_t *""'");
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
result = (svn_boolean_t) ((arg1)->copied);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -22284,7 +22643,7 @@ XS(_wrap_svn_wc_status_t_copied_get) {
XS(_wrap_svn_wc_status_t_switched_set) {
{
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -22298,9 +22657,9 @@ XS(_wrap_svn_wc_status_t_switched_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_switched_set" "', argument " "1"" of type '" "svn_wc_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_switched_set" "', argument " "1"" of type '" "struct svn_wc_status_t *""'");
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status_t_switched_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -22321,7 +22680,7 @@ XS(_wrap_svn_wc_status_t_switched_set) {
XS(_wrap_svn_wc_status_t_switched_get) {
{
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -22333,9 +22692,9 @@ XS(_wrap_svn_wc_status_t_switched_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_switched_get" "', argument " "1"" of type '" "svn_wc_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_switched_get" "', argument " "1"" of type '" "struct svn_wc_status_t *""'");
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
result = (svn_boolean_t) ((arg1)->switched);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -22349,7 +22708,7 @@ XS(_wrap_svn_wc_status_t_switched_get) {
XS(_wrap_svn_wc_status_t_repos_text_status_set) {
{
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -22363,9 +22722,9 @@ XS(_wrap_svn_wc_status_t_repos_text_status_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_repos_text_status_set" "', argument " "1"" of type '" "svn_wc_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_repos_text_status_set" "', argument " "1"" of type '" "struct svn_wc_status_t *""'");
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status_t_repos_text_status_set" "', argument " "2"" of type '" "enum svn_wc_status_kind""'");
@@ -22386,7 +22745,7 @@ XS(_wrap_svn_wc_status_t_repos_text_status_set) {
XS(_wrap_svn_wc_status_t_repos_text_status_get) {
{
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -22398,9 +22757,9 @@ XS(_wrap_svn_wc_status_t_repos_text_status_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_repos_text_status_get" "', argument " "1"" of type '" "svn_wc_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_repos_text_status_get" "', argument " "1"" of type '" "struct svn_wc_status_t *""'");
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->repos_text_status);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -22414,7 +22773,7 @@ XS(_wrap_svn_wc_status_t_repos_text_status_get) {
XS(_wrap_svn_wc_status_t_repos_prop_status_set) {
{
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -22428,9 +22787,9 @@ XS(_wrap_svn_wc_status_t_repos_prop_status_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_repos_prop_status_set" "', argument " "1"" of type '" "svn_wc_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_repos_prop_status_set" "', argument " "1"" of type '" "struct svn_wc_status_t *""'");
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_status_t_repos_prop_status_set" "', argument " "2"" of type '" "enum svn_wc_status_kind""'");
@@ -22451,7 +22810,7 @@ XS(_wrap_svn_wc_status_t_repos_prop_status_set) {
XS(_wrap_svn_wc_status_t_repos_prop_status_get) {
{
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -22463,9 +22822,9 @@ XS(_wrap_svn_wc_status_t_repos_prop_status_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_repos_prop_status_get" "', argument " "1"" of type '" "svn_wc_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_status_t_repos_prop_status_get" "', argument " "1"" of type '" "struct svn_wc_status_t *""'");
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->repos_prop_status);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -22480,14 +22839,14 @@ XS(_wrap_svn_wc_status_t_repos_prop_status_get) {
XS(_wrap_new_svn_wc_status_t) {
{
int argvi = 0;
- svn_wc_status_t *result = 0 ;
+ struct svn_wc_status_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_wc_status_t();");
}
{
- result = (svn_wc_status_t *)calloc(1, sizeof(svn_wc_status_t));
+ result = (struct svn_wc_status_t *)calloc(1, sizeof(struct svn_wc_status_t));
@@ -22502,7 +22861,7 @@ XS(_wrap_new_svn_wc_status_t) {
XS(_wrap_delete_svn_wc_status_t) {
{
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -22513,9 +22872,9 @@ XS(_wrap_delete_svn_wc_status_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_status_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_status_t" "', argument " "1"" of type '" "svn_wc_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_status_t" "', argument " "1"" of type '" "struct svn_wc_status_t *""'");
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
{
free((char *) arg1);
@@ -23316,7 +23675,6 @@ XS(_wrap_svn_wc_get_status_editor4) {
int ecode9 = 0 ;
void *argp10 = 0 ;
int res10 = 0 ;
- int res12 ;
int res14 ;
void *argp15 = 0 ;
int res15 = 0 ;
@@ -23331,7 +23689,7 @@ XS(_wrap_svn_wc_get_status_editor4) {
arg2 = &temp2;
arg3 = &temp3;
arg4 = &temp4;
- if ((items < 11) || (items > 12)) {
+ if ((items < 10) || (items > 11)) {
SWIG_croak("Usage: svn_wc_get_status_editor4(anchor,target,depth,get_all,no_ignore,ignore_patterns,status_func,status_baton,cancel_func,cancel_baton,traversal_info,pool);");
}
res5 = SWIG_ConvertPtr(ST(0), &argp5,SWIGTYPE_p_svn_wc_adm_access_t, 0 | 0 );
@@ -23365,31 +23723,25 @@ XS(_wrap_svn_wc_get_status_editor4) {
}
arg10 = (apr_array_header_t *)(argp10);
{
- int res = SWIG_ConvertFunctionPtr(ST(6), (void**)(&arg11), SWIGTYPE_p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_wc_get_status_editor4" "', argument " "11"" of type '" "svn_wc_status_func3_t""'");
- }
- }
- res12 = SWIG_ConvertPtr(ST(7),SWIG_as_voidptrptr(&arg12), 0, 0);
- if (!SWIG_IsOK(res12)) {
- SWIG_exception_fail(SWIG_ArgError(res12), "in method '" "svn_wc_get_status_editor4" "', argument " "12"" of type '" "void *""'");
+ arg11 = svn_swig_pl_status_func3;
+ arg12 = ST(6);
}
{
- int res = SWIG_ConvertFunctionPtr(ST(8), (void**)(&arg13), SWIGTYPE_p_f_p_void__p_svn_error_t);
+ int res = SWIG_ConvertFunctionPtr(ST(7), (void**)(&arg13), SWIGTYPE_p_f_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_wc_get_status_editor4" "', argument " "13"" of type '" "svn_cancel_func_t""'");
}
}
- res14 = SWIG_ConvertPtr(ST(9),SWIG_as_voidptrptr(&arg14), 0, 0);
+ res14 = SWIG_ConvertPtr(ST(8),SWIG_as_voidptrptr(&arg14), 0, 0);
if (!SWIG_IsOK(res14)) {
SWIG_exception_fail(SWIG_ArgError(res14), "in method '" "svn_wc_get_status_editor4" "', argument " "14"" of type '" "void *""'");
}
- res15 = SWIG_ConvertPtr(ST(10), &argp15,SWIGTYPE_p_svn_wc_traversal_info_t, 0 | 0 );
+ res15 = SWIG_ConvertPtr(ST(9), &argp15,SWIGTYPE_p_svn_wc_traversal_info_t, 0 | 0 );
if (!SWIG_IsOK(res15)) {
SWIG_exception_fail(SWIG_ArgError(res15), "in method '" "svn_wc_get_status_editor4" "', argument " "15"" of type '" "svn_wc_traversal_info_t *""'");
}
arg15 = (svn_wc_traversal_info_t *)(argp15);
- if (items > 11) {
+ if (items > 10) {
}
{
@@ -23443,8 +23795,6 @@ XS(_wrap_svn_wc_get_status_editor4) {
-
-
XSRETURN(argvi);
fail:
@@ -23461,8 +23811,6 @@ XS(_wrap_svn_wc_get_status_editor4) {
-
-
SWIG_croak_null();
}
}
@@ -23505,7 +23853,6 @@ XS(_wrap_svn_wc_get_status_editor3) {
int ecode9 = 0 ;
void *argp10 = 0 ;
int res10 = 0 ;
- int res12 ;
int res14 ;
void *argp15 = 0 ;
int res15 = 0 ;
@@ -23520,7 +23867,7 @@ XS(_wrap_svn_wc_get_status_editor3) {
arg2 = &temp2;
arg3 = &temp3;
arg4 = &temp4;
- if ((items < 11) || (items > 12)) {
+ if ((items < 10) || (items > 11)) {
SWIG_croak("Usage: svn_wc_get_status_editor3(anchor,target,depth,get_all,no_ignore,ignore_patterns,status_func,status_baton,cancel_func,cancel_baton,traversal_info,pool);");
}
res5 = SWIG_ConvertPtr(ST(0), &argp5,SWIGTYPE_p_svn_wc_adm_access_t, 0 | 0 );
@@ -23554,31 +23901,25 @@ XS(_wrap_svn_wc_get_status_editor3) {
}
arg10 = (apr_array_header_t *)(argp10);
{
- int res = SWIG_ConvertFunctionPtr(ST(6), (void**)(&arg11), SWIGTYPE_p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_wc_get_status_editor3" "', argument " "11"" of type '" "svn_wc_status_func2_t""'");
- }
- }
- res12 = SWIG_ConvertPtr(ST(7),SWIG_as_voidptrptr(&arg12), 0, 0);
- if (!SWIG_IsOK(res12)) {
- SWIG_exception_fail(SWIG_ArgError(res12), "in method '" "svn_wc_get_status_editor3" "', argument " "12"" of type '" "void *""'");
+ arg11 = svn_swig_pl_status_func2;
+ arg12 = ST(6);
}
{
- int res = SWIG_ConvertFunctionPtr(ST(8), (void**)(&arg13), SWIGTYPE_p_f_p_void__p_svn_error_t);
+ int res = SWIG_ConvertFunctionPtr(ST(7), (void**)(&arg13), SWIGTYPE_p_f_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_wc_get_status_editor3" "', argument " "13"" of type '" "svn_cancel_func_t""'");
}
}
- res14 = SWIG_ConvertPtr(ST(9),SWIG_as_voidptrptr(&arg14), 0, 0);
+ res14 = SWIG_ConvertPtr(ST(8),SWIG_as_voidptrptr(&arg14), 0, 0);
if (!SWIG_IsOK(res14)) {
SWIG_exception_fail(SWIG_ArgError(res14), "in method '" "svn_wc_get_status_editor3" "', argument " "14"" of type '" "void *""'");
}
- res15 = SWIG_ConvertPtr(ST(10), &argp15,SWIGTYPE_p_svn_wc_traversal_info_t, 0 | 0 );
+ res15 = SWIG_ConvertPtr(ST(9), &argp15,SWIGTYPE_p_svn_wc_traversal_info_t, 0 | 0 );
if (!SWIG_IsOK(res15)) {
SWIG_exception_fail(SWIG_ArgError(res15), "in method '" "svn_wc_get_status_editor3" "', argument " "15"" of type '" "svn_wc_traversal_info_t *""'");
}
arg15 = (svn_wc_traversal_info_t *)(argp15);
- if (items > 11) {
+ if (items > 10) {
}
{
@@ -23632,8 +23973,6 @@ XS(_wrap_svn_wc_get_status_editor3) {
-
-
XSRETURN(argvi);
fail:
@@ -23650,8 +23989,6 @@ XS(_wrap_svn_wc_get_status_editor3) {
-
-
SWIG_croak_null();
}
}
@@ -23692,7 +24029,6 @@ XS(_wrap_svn_wc_get_status_editor2) {
int ecode9 = 0 ;
int val10 ;
int ecode10 = 0 ;
- int res12 ;
int res14 ;
void *argp15 = 0 ;
int res15 = 0 ;
@@ -23707,7 +24043,7 @@ XS(_wrap_svn_wc_get_status_editor2) {
arg2 = &temp2;
arg3 = &temp3;
arg4 = &temp4;
- if ((items < 11) || (items > 12)) {
+ if ((items < 10) || (items > 11)) {
SWIG_croak("Usage: svn_wc_get_status_editor2(anchor,target,config,recurse,get_all,no_ignore,status_func,status_baton,cancel_func,cancel_baton,traversal_info,pool);");
}
res5 = SWIG_ConvertPtr(ST(0), &argp5,SWIGTYPE_p_svn_wc_adm_access_t, 0 | 0 );
@@ -23740,31 +24076,25 @@ XS(_wrap_svn_wc_get_status_editor2) {
}
arg10 = (svn_boolean_t)(val10);
{
- int res = SWIG_ConvertFunctionPtr(ST(6), (void**)(&arg11), SWIGTYPE_p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_wc_get_status_editor2" "', argument " "11"" of type '" "svn_wc_status_func2_t""'");
- }
- }
- res12 = SWIG_ConvertPtr(ST(7),SWIG_as_voidptrptr(&arg12), 0, 0);
- if (!SWIG_IsOK(res12)) {
- SWIG_exception_fail(SWIG_ArgError(res12), "in method '" "svn_wc_get_status_editor2" "', argument " "12"" of type '" "void *""'");
+ arg11 = svn_swig_pl_status_func2;
+ arg12 = ST(6);
}
{
- int res = SWIG_ConvertFunctionPtr(ST(8), (void**)(&arg13), SWIGTYPE_p_f_p_void__p_svn_error_t);
+ int res = SWIG_ConvertFunctionPtr(ST(7), (void**)(&arg13), SWIGTYPE_p_f_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_wc_get_status_editor2" "', argument " "13"" of type '" "svn_cancel_func_t""'");
}
}
- res14 = SWIG_ConvertPtr(ST(9),SWIG_as_voidptrptr(&arg14), 0, 0);
+ res14 = SWIG_ConvertPtr(ST(8),SWIG_as_voidptrptr(&arg14), 0, 0);
if (!SWIG_IsOK(res14)) {
SWIG_exception_fail(SWIG_ArgError(res14), "in method '" "svn_wc_get_status_editor2" "', argument " "14"" of type '" "void *""'");
}
- res15 = SWIG_ConvertPtr(ST(10), &argp15,SWIGTYPE_p_svn_wc_traversal_info_t, 0 | 0 );
+ res15 = SWIG_ConvertPtr(ST(9), &argp15,SWIGTYPE_p_svn_wc_traversal_info_t, 0 | 0 );
if (!SWIG_IsOK(res15)) {
SWIG_exception_fail(SWIG_ArgError(res15), "in method '" "svn_wc_get_status_editor2" "', argument " "15"" of type '" "svn_wc_traversal_info_t *""'");
}
arg15 = (svn_wc_traversal_info_t *)(argp15);
- if (items > 11) {
+ if (items > 10) {
}
{
@@ -23818,8 +24148,6 @@ XS(_wrap_svn_wc_get_status_editor2) {
-
-
XSRETURN(argvi);
fail:
@@ -23836,8 +24164,6 @@ XS(_wrap_svn_wc_get_status_editor2) {
-
-
SWIG_croak_null();
}
}
@@ -25005,6 +25331,100 @@ XS(_wrap_svn_wc_delete) {
}
+XS(_wrap_svn_wc_add_from_disk2) {
+ {
+ svn_wc_context_t *arg1 = (svn_wc_context_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ apr_hash_t *arg3 = (apr_hash_t *) 0 ;
+ svn_wc_notify_func2_t arg4 = (svn_wc_notify_func2_t) 0 ;
+ void *arg5 = (void *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res5 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg6 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ if ((items < 5) || (items > 6)) {
+ SWIG_croak("Usage: svn_wc_add_from_disk2(wc_ctx,local_abspath,props,notify_func,notify_baton,scratch_pool);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_context_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_add_from_disk2" "', argument " "1"" of type '" "svn_wc_context_t *""'");
+ }
+ arg1 = (svn_wc_context_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_add_from_disk2" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = (char *)(buf2);
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg3 = svn_swig_pl_hash_to_prophash(ST(2), _global_pool);
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(3), (void**)(&arg4), SWIGTYPE_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_wc_add_from_disk2" "', argument " "4"" of type '" "svn_wc_notify_func2_t""'");
+ }
+ }
+ res5 = SWIG_ConvertPtr(ST(4),SWIG_as_voidptrptr(&arg5), 0, 0);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_wc_add_from_disk2" "', argument " "5"" of type '" "void *""'");
+ }
+ if (items > 5) {
+
+ }
+ {
+ result = (svn_error_t *)svn_wc_add_from_disk2(arg1,(char const *)arg2,(apr_hash_t const *)arg3,arg4,arg5,arg6);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_wc_add_from_disk) {
{
svn_wc_context_t *arg1 = (svn_wc_context_t *) 0 ;
@@ -25626,10 +26046,6 @@ XS(_wrap_svn_wc_add_repos_file4) {
int res2 ;
char *buf2 = 0 ;
int alloc2 = 0 ;
- void *argp5 = 0 ;
- int res5 = 0 ;
- void *argp6 = 0 ;
- int res6 = 0 ;
int res7 ;
char *buf7 = 0 ;
int alloc7 = 0 ;
@@ -25662,16 +26078,16 @@ XS(_wrap_svn_wc_add_repos_file4) {
{
svn_swig_pl_make_stream (&arg4, ST(3));
}
- res5 = SWIG_ConvertPtr(ST(4), &argp5,SWIGTYPE_p_apr_hash_t, 0 | 0 );
- if (!SWIG_IsOK(res5)) {
- SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_wc_add_repos_file4" "', argument " "5"" of type '" "apr_hash_t *""'");
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg5 = svn_swig_pl_hash_to_prophash(ST(4), _global_pool);
}
- arg5 = (apr_hash_t *)(argp5);
- res6 = SWIG_ConvertPtr(ST(5), &argp6,SWIGTYPE_p_apr_hash_t, 0 | 0 );
- if (!SWIG_IsOK(res6)) {
- SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_wc_add_repos_file4" "', argument " "6"" of type '" "apr_hash_t *""'");
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg6 = svn_swig_pl_hash_to_prophash(ST(5), _global_pool);
}
- arg6 = (apr_hash_t *)(argp6);
res7 = SWIG_AsCharPtrAndSize(ST(6), &buf7, NULL, &alloc7);
if (!SWIG_IsOK(res7)) {
SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_wc_add_repos_file4" "', argument " "7"" of type '" "char const *""'");
@@ -25767,10 +26183,6 @@ XS(_wrap_svn_wc_add_repos_file3) {
int alloc1 = 0 ;
void *argp2 = 0 ;
int res2 = 0 ;
- void *argp5 = 0 ;
- int res5 = 0 ;
- void *argp6 = 0 ;
- int res6 = 0 ;
int res7 ;
char *buf7 = 0 ;
int alloc7 = 0 ;
@@ -25804,16 +26216,16 @@ XS(_wrap_svn_wc_add_repos_file3) {
{
svn_swig_pl_make_stream (&arg4, ST(3));
}
- res5 = SWIG_ConvertPtr(ST(4), &argp5,SWIGTYPE_p_apr_hash_t, 0 | 0 );
- if (!SWIG_IsOK(res5)) {
- SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_wc_add_repos_file3" "', argument " "5"" of type '" "apr_hash_t *""'");
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg5 = svn_swig_pl_hash_to_prophash(ST(4), _global_pool);
}
- arg5 = (apr_hash_t *)(argp5);
- res6 = SWIG_ConvertPtr(ST(5), &argp6,SWIGTYPE_p_apr_hash_t, 0 | 0 );
- if (!SWIG_IsOK(res6)) {
- SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_wc_add_repos_file3" "', argument " "6"" of type '" "apr_hash_t *""'");
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg6 = svn_swig_pl_hash_to_prophash(ST(5), _global_pool);
}
- arg6 = (apr_hash_t *)(argp6);
res7 = SWIG_AsCharPtrAndSize(ST(6), &buf7, NULL, &alloc7);
if (!SWIG_IsOK(res7)) {
SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_wc_add_repos_file3" "', argument " "7"" of type '" "char const *""'");
@@ -25925,10 +26337,6 @@ XS(_wrap_svn_wc_add_repos_file2) {
int res4 ;
char *buf4 = 0 ;
int alloc4 = 0 ;
- void *argp5 = 0 ;
- int res5 = 0 ;
- void *argp6 = 0 ;
- int res6 = 0 ;
int res7 ;
char *buf7 = 0 ;
int alloc7 = 0 ;
@@ -25964,16 +26372,16 @@ XS(_wrap_svn_wc_add_repos_file2) {
SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_wc_add_repos_file2" "', argument " "4"" of type '" "char const *""'");
}
arg4 = (char *)(buf4);
- res5 = SWIG_ConvertPtr(ST(4), &argp5,SWIGTYPE_p_apr_hash_t, 0 | 0 );
- if (!SWIG_IsOK(res5)) {
- SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_wc_add_repos_file2" "', argument " "5"" of type '" "apr_hash_t *""'");
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg5 = svn_swig_pl_hash_to_prophash(ST(4), _global_pool);
}
- arg5 = (apr_hash_t *)(argp5);
- res6 = SWIG_ConvertPtr(ST(5), &argp6,SWIGTYPE_p_apr_hash_t, 0 | 0 );
- if (!SWIG_IsOK(res6)) {
- SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_wc_add_repos_file2" "', argument " "6"" of type '" "apr_hash_t *""'");
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg6 = svn_swig_pl_hash_to_prophash(ST(5), _global_pool);
}
- arg6 = (apr_hash_t *)(argp6);
res7 = SWIG_AsCharPtrAndSize(ST(6), &buf7, NULL, &alloc7);
if (!SWIG_IsOK(res7)) {
SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_wc_add_repos_file2" "', argument " "7"" of type '" "char const *""'");
@@ -26052,8 +26460,6 @@ XS(_wrap_svn_wc_add_repos_file) {
int res3 ;
char *buf3 = 0 ;
int alloc3 = 0 ;
- void *argp4 = 0 ;
- int res4 = 0 ;
int res5 ;
char *buf5 = 0 ;
int alloc5 = 0 ;
@@ -26084,11 +26490,11 @@ XS(_wrap_svn_wc_add_repos_file) {
SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_wc_add_repos_file" "', argument " "3"" of type '" "char const *""'");
}
arg3 = (char *)(buf3);
- res4 = SWIG_ConvertPtr(ST(3), &argp4,SWIGTYPE_p_apr_hash_t, 0 | 0 );
- if (!SWIG_IsOK(res4)) {
- SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_wc_add_repos_file" "', argument " "4"" of type '" "apr_hash_t *""'");
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg4 = svn_swig_pl_hash_to_prophash(ST(3), _global_pool);
}
- arg4 = (apr_hash_t *)(argp4);
res5 = SWIG_AsCharPtrAndSize(ST(4), &buf5, NULL, &alloc5);
if (!SWIG_IsOK(res5)) {
SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_wc_add_repos_file" "', argument " "5"" of type '" "char const *""'");
@@ -27172,7 +27578,7 @@ XS(_wrap_svn_wc_queue_committed3) {
}
{
- result = (svn_error_t *)svn_wc_queue_committed3(arg1,arg2,(char const *)arg3,arg4,(apr_array_header_t const *)arg5,arg6,arg7,(svn_checksum_t const *)arg8,arg9);
+ result = (svn_error_t *)svn_wc_queue_committed3(arg1,arg2,(char const *)arg3,arg4,(apr_array_header_t const *)arg5,arg6,arg7,(struct svn_checksum_t const *)arg8,arg9);
@@ -27301,7 +27707,7 @@ XS(_wrap_svn_wc_queue_committed2) {
}
{
- result = (svn_error_t *)svn_wc_queue_committed2(arg1,(char const *)arg2,arg3,arg4,(apr_array_header_t const *)arg5,arg6,arg7,(svn_checksum_t const *)arg8,arg9);
+ result = (svn_error_t *)svn_wc_queue_committed2(arg1,(char const *)arg2,arg3,arg4,(apr_array_header_t const *)arg5,arg6,arg7,(struct svn_checksum_t const *)arg8,arg9);
@@ -29003,6 +29409,111 @@ XS(_wrap_svn_wc_crawl_revisions) {
}
+XS(_wrap_svn_wc_check_root) {
+ {
+ svn_boolean_t *arg1 = (svn_boolean_t *) 0 ;
+ svn_boolean_t *arg2 = (svn_boolean_t *) 0 ;
+ svn_node_kind_t *arg3 = (svn_node_kind_t *) 0 ;
+ svn_wc_context_t *arg4 = (svn_wc_context_t *) 0 ;
+ char *arg5 = (char *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_boolean_t temp1 ;
+ int res1 = SWIG_TMPOBJ ;
+ svn_boolean_t temp2 ;
+ int res2 = SWIG_TMPOBJ ;
+ svn_node_kind_t temp3 ;
+ int res3 = SWIG_TMPOBJ ;
+ void *argp4 = 0 ;
+ int res4 = 0 ;
+ int res5 ;
+ char *buf5 = 0 ;
+ int alloc5 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg6 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ arg2 = &temp2;
+ arg3 = &temp3;
+ if ((items < 2) || (items > 3)) {
+ SWIG_croak("Usage: svn_wc_check_root(wc_ctx,local_abspath,scratch_pool);");
+ }
+ res4 = SWIG_ConvertPtr(ST(0), &argp4,SWIGTYPE_p_svn_wc_context_t, 0 | 0 );
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_wc_check_root" "', argument " "4"" of type '" "svn_wc_context_t *""'");
+ }
+ arg4 = (svn_wc_context_t *)(argp4);
+ res5 = SWIG_AsCharPtrAndSize(ST(1), &buf5, NULL, &alloc5);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_wc_check_root" "', argument " "5"" of type '" "char const *""'");
+ }
+ arg5 = (char *)(buf5);
+ if (items > 2) {
+
+ }
+ {
+ result = (svn_error_t *)svn_wc_check_root(arg1,arg2,arg3,arg4,(char const *)arg5,arg6);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ if (SWIG_IsTmpObj(res1)) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg1)); argvi++ ;
+ } else {
+ int new_flags = SWIG_IsNewObj(res1) ? (SWIG_POINTER_OWN | 0) : 0;
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_int, new_flags); argvi++ ;
+ }
+ if (SWIG_IsTmpObj(res2)) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg2)); argvi++ ;
+ } else {
+ int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0) : 0;
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags); argvi++ ;
+ }
+ if (SWIG_IsTmpObj(res3)) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((*arg3)); argvi++ ;
+ } else {
+ int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0) : 0;
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_svn_node_kind_t, new_flags); argvi++ ;
+ }
+
+
+
+
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_wc_is_wc_root2) {
{
svn_boolean_t *arg1 = (svn_boolean_t *) 0 ;
@@ -34160,6 +34671,257 @@ XS(_wrap_svn_wc_get_prop_diffs) {
}
+XS(_wrap_svn_wc_merge5) {
+ {
+ enum svn_wc_merge_outcome_t *arg1 = (enum svn_wc_merge_outcome_t *) 0 ;
+ enum svn_wc_notify_state_t *arg2 = (enum svn_wc_notify_state_t *) 0 ;
+ svn_wc_context_t *arg3 = (svn_wc_context_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ char *arg5 = (char *) 0 ;
+ char *arg6 = (char *) 0 ;
+ char *arg7 = (char *) 0 ;
+ char *arg8 = (char *) 0 ;
+ char *arg9 = (char *) 0 ;
+ svn_wc_conflict_version_t *arg10 = (svn_wc_conflict_version_t *) 0 ;
+ svn_wc_conflict_version_t *arg11 = (svn_wc_conflict_version_t *) 0 ;
+ svn_boolean_t arg12 ;
+ char *arg13 = (char *) 0 ;
+ apr_array_header_t *arg14 = (apr_array_header_t *) 0 ;
+ apr_hash_t *arg15 = (apr_hash_t *) 0 ;
+ apr_array_header_t *arg16 = (apr_array_header_t *) 0 ;
+ svn_wc_conflict_resolver_func2_t arg17 = (svn_wc_conflict_resolver_func2_t) 0 ;
+ void *arg18 = (void *) 0 ;
+ svn_cancel_func_t arg19 = (svn_cancel_func_t) 0 ;
+ void *arg20 = (void *) 0 ;
+ apr_pool_t *arg21 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ enum svn_wc_merge_outcome_t temp1 ;
+ int res1 = SWIG_TMPOBJ ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ void *argp3 = 0 ;
+ int res3 = 0 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ int res5 ;
+ char *buf5 = 0 ;
+ int alloc5 = 0 ;
+ int res6 ;
+ char *buf6 = 0 ;
+ int alloc6 = 0 ;
+ int res7 ;
+ char *buf7 = 0 ;
+ int alloc7 = 0 ;
+ int res8 ;
+ char *buf8 = 0 ;
+ int alloc8 = 0 ;
+ int res9 ;
+ char *buf9 = 0 ;
+ int alloc9 = 0 ;
+ void *argp10 = 0 ;
+ int res10 = 0 ;
+ void *argp11 = 0 ;
+ int res11 = 0 ;
+ int val12 ;
+ int ecode12 = 0 ;
+ int res13 ;
+ char *buf13 = 0 ;
+ int alloc13 = 0 ;
+ void *argp14 = 0 ;
+ int res14 = 0 ;
+ void *argp15 = 0 ;
+ int res15 = 0 ;
+ void *argp16 = 0 ;
+ int res16 = 0 ;
+ int res18 ;
+ int res20 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg21 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ if ((items < 19) || (items > 20)) {
+ SWIG_croak("Usage: svn_wc_merge5(merge_props_state,wc_ctx,left_abspath,right_abspath,target_abspath,left_label,right_label,target_label,left_version,right_version,dry_run,diff3_cmd,merge_options,original_props,prop_diff,conflict_func,conflict_baton,cancel_func,cancel_baton,scratch_pool);");
+ }
+ res2 = SWIG_ConvertPtr(ST(0), &argp2,SWIGTYPE_p_svn_wc_notify_state_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_merge5" "', argument " "2"" of type '" "enum svn_wc_notify_state_t *""'");
+ }
+ arg2 = (enum svn_wc_notify_state_t *)(argp2);
+ res3 = SWIG_ConvertPtr(ST(1), &argp3,SWIGTYPE_p_svn_wc_context_t, 0 | 0 );
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_wc_merge5" "', argument " "3"" of type '" "svn_wc_context_t *""'");
+ }
+ arg3 = (svn_wc_context_t *)(argp3);
+ res4 = SWIG_AsCharPtrAndSize(ST(2), &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_wc_merge5" "', argument " "4"" of type '" "char const *""'");
+ }
+ arg4 = (char *)(buf4);
+ res5 = SWIG_AsCharPtrAndSize(ST(3), &buf5, NULL, &alloc5);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_wc_merge5" "', argument " "5"" of type '" "char const *""'");
+ }
+ arg5 = (char *)(buf5);
+ res6 = SWIG_AsCharPtrAndSize(ST(4), &buf6, NULL, &alloc6);
+ if (!SWIG_IsOK(res6)) {
+ SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_wc_merge5" "', argument " "6"" of type '" "char const *""'");
+ }
+ arg6 = (char *)(buf6);
+ res7 = SWIG_AsCharPtrAndSize(ST(5), &buf7, NULL, &alloc7);
+ if (!SWIG_IsOK(res7)) {
+ SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_wc_merge5" "', argument " "7"" of type '" "char const *""'");
+ }
+ arg7 = (char *)(buf7);
+ res8 = SWIG_AsCharPtrAndSize(ST(6), &buf8, NULL, &alloc8);
+ if (!SWIG_IsOK(res8)) {
+ SWIG_exception_fail(SWIG_ArgError(res8), "in method '" "svn_wc_merge5" "', argument " "8"" of type '" "char const *""'");
+ }
+ arg8 = (char *)(buf8);
+ res9 = SWIG_AsCharPtrAndSize(ST(7), &buf9, NULL, &alloc9);
+ if (!SWIG_IsOK(res9)) {
+ SWIG_exception_fail(SWIG_ArgError(res9), "in method '" "svn_wc_merge5" "', argument " "9"" of type '" "char const *""'");
+ }
+ arg9 = (char *)(buf9);
+ res10 = SWIG_ConvertPtr(ST(8), &argp10,SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
+ if (!SWIG_IsOK(res10)) {
+ SWIG_exception_fail(SWIG_ArgError(res10), "in method '" "svn_wc_merge5" "', argument " "10"" of type '" "svn_wc_conflict_version_t const *""'");
+ }
+ arg10 = (svn_wc_conflict_version_t *)(argp10);
+ res11 = SWIG_ConvertPtr(ST(9), &argp11,SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
+ if (!SWIG_IsOK(res11)) {
+ SWIG_exception_fail(SWIG_ArgError(res11), "in method '" "svn_wc_merge5" "', argument " "11"" of type '" "svn_wc_conflict_version_t const *""'");
+ }
+ arg11 = (svn_wc_conflict_version_t *)(argp11);
+ ecode12 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(10), &val12);
+ if (!SWIG_IsOK(ecode12)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode12), "in method '" "svn_wc_merge5" "', argument " "12"" of type '" "svn_boolean_t""'");
+ }
+ arg12 = (svn_boolean_t)(val12);
+ res13 = SWIG_AsCharPtrAndSize(ST(11), &buf13, NULL, &alloc13);
+ if (!SWIG_IsOK(res13)) {
+ SWIG_exception_fail(SWIG_ArgError(res13), "in method '" "svn_wc_merge5" "', argument " "13"" of type '" "char const *""'");
+ }
+ arg13 = (char *)(buf13);
+ res14 = SWIG_ConvertPtr(ST(12), &argp14,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
+ if (!SWIG_IsOK(res14)) {
+ SWIG_exception_fail(SWIG_ArgError(res14), "in method '" "svn_wc_merge5" "', argument " "14"" of type '" "apr_array_header_t const *""'");
+ }
+ arg14 = (apr_array_header_t *)(argp14);
+ res15 = SWIG_ConvertPtr(ST(13), &argp15,SWIGTYPE_p_apr_hash_t, 0 | 0 );
+ if (!SWIG_IsOK(res15)) {
+ SWIG_exception_fail(SWIG_ArgError(res15), "in method '" "svn_wc_merge5" "', argument " "15"" of type '" "apr_hash_t *""'");
+ }
+ arg15 = (apr_hash_t *)(argp15);
+ res16 = SWIG_ConvertPtr(ST(14), &argp16,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
+ if (!SWIG_IsOK(res16)) {
+ SWIG_exception_fail(SWIG_ArgError(res16), "in method '" "svn_wc_merge5" "', argument " "16"" of type '" "apr_array_header_t const *""'");
+ }
+ arg16 = (apr_array_header_t *)(argp16);
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(15), (void**)(&arg17), SWIGTYPE_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description2_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_wc_merge5" "', argument " "17"" of type '" "svn_wc_conflict_resolver_func2_t""'");
+ }
+ }
+ res18 = SWIG_ConvertPtr(ST(16),SWIG_as_voidptrptr(&arg18), 0, 0);
+ if (!SWIG_IsOK(res18)) {
+ SWIG_exception_fail(SWIG_ArgError(res18), "in method '" "svn_wc_merge5" "', argument " "18"" of type '" "void *""'");
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(ST(17), (void**)(&arg19), SWIGTYPE_p_f_p_void__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_wc_merge5" "', argument " "19"" of type '" "svn_cancel_func_t""'");
+ }
+ }
+ res20 = SWIG_ConvertPtr(ST(18),SWIG_as_voidptrptr(&arg20), 0, 0);
+ if (!SWIG_IsOK(res20)) {
+ SWIG_exception_fail(SWIG_ArgError(res20), "in method '" "svn_wc_merge5" "', argument " "20"" of type '" "void *""'");
+ }
+ if (items > 19) {
+
+ }
+ {
+ result = (svn_error_t *)svn_wc_merge5(arg1,arg2,arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,(char const *)arg7,(char const *)arg8,(char const *)arg9,(struct svn_wc_conflict_version_t const *)arg10,(struct svn_wc_conflict_version_t const *)arg11,arg12,(char const *)arg13,(apr_array_header_t const *)arg14,arg15,(apr_array_header_t const *)arg16,arg17,arg18,arg19,arg20,arg21);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ if (SWIG_IsTmpObj(res1)) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg1)); argvi++ ;
+ } else {
+ int new_flags = SWIG_IsNewObj(res1) ? (SWIG_POINTER_OWN | 0) : 0;
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_svn_wc_merge_outcome_t, new_flags); argvi++ ;
+ }
+
+
+
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+ if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+ if (alloc8 == SWIG_NEWOBJ) free((char*)buf8);
+ if (alloc9 == SWIG_NEWOBJ) free((char*)buf9);
+
+
+
+ if (alloc13 == SWIG_NEWOBJ) free((char*)buf13);
+
+
+
+
+
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+ if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+ if (alloc8 == SWIG_NEWOBJ) free((char*)buf8);
+ if (alloc9 == SWIG_NEWOBJ) free((char*)buf9);
+
+
+
+ if (alloc13 == SWIG_NEWOBJ) free((char*)buf13);
+
+
+
+
+
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_wc_merge4) {
{
enum svn_wc_merge_outcome_t *arg1 = (enum svn_wc_merge_outcome_t *) 0 ;
@@ -34936,8 +35698,6 @@ XS(_wrap_svn_wc_merge_props3) {
int res4 = 0 ;
void *argp5 = 0 ;
int res5 = 0 ;
- void *argp6 = 0 ;
- int res6 = 0 ;
void *argp7 = 0 ;
int res7 = 0 ;
int val8 ;
@@ -34979,11 +35739,11 @@ XS(_wrap_svn_wc_merge_props3) {
SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_wc_merge_props3" "', argument " "5"" of type '" "svn_wc_conflict_version_t const *""'");
}
arg5 = (svn_wc_conflict_version_t *)(argp5);
- res6 = SWIG_ConvertPtr(ST(5), &argp6,SWIGTYPE_p_apr_hash_t, 0 | 0 );
- if (!SWIG_IsOK(res6)) {
- SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "svn_wc_merge_props3" "', argument " "6"" of type '" "apr_hash_t *""'");
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg6 = svn_swig_pl_hash_to_prophash(ST(5), _global_pool);
}
- arg6 = (apr_hash_t *)(argp6);
res7 = SWIG_ConvertPtr(ST(6), &argp7,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
if (!SWIG_IsOK(res7)) {
SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "svn_wc_merge_props3" "', argument " "7"" of type '" "apr_array_header_t const *""'");
@@ -35092,8 +35852,6 @@ XS(_wrap_svn_wc_merge_props2) {
int alloc2 = 0 ;
void *argp3 = 0 ;
int res3 = 0 ;
- void *argp4 = 0 ;
- int res4 = 0 ;
void *argp5 = 0 ;
int res5 = 0 ;
int val6 ;
@@ -35126,11 +35884,11 @@ XS(_wrap_svn_wc_merge_props2) {
SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_wc_merge_props2" "', argument " "3"" of type '" "svn_wc_adm_access_t *""'");
}
arg3 = (svn_wc_adm_access_t *)(argp3);
- res4 = SWIG_ConvertPtr(ST(3), &argp4,SWIGTYPE_p_apr_hash_t, 0 | 0 );
- if (!SWIG_IsOK(res4)) {
- SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_wc_merge_props2" "', argument " "4"" of type '" "apr_hash_t *""'");
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg4 = svn_swig_pl_hash_to_prophash(ST(3), _global_pool);
}
- arg4 = (apr_hash_t *)(argp4);
res5 = SWIG_ConvertPtr(ST(4), &argp5,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
if (!SWIG_IsOK(res5)) {
SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_wc_merge_props2" "', argument " "5"" of type '" "apr_array_header_t const *""'");
@@ -35226,8 +35984,6 @@ XS(_wrap_svn_wc_merge_props) {
int alloc2 = 0 ;
void *argp3 = 0 ;
int res3 = 0 ;
- void *argp4 = 0 ;
- int res4 = 0 ;
void *argp5 = 0 ;
int res5 = 0 ;
int val6 ;
@@ -35259,11 +36015,11 @@ XS(_wrap_svn_wc_merge_props) {
SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_wc_merge_props" "', argument " "3"" of type '" "svn_wc_adm_access_t *""'");
}
arg3 = (svn_wc_adm_access_t *)(argp3);
- res4 = SWIG_ConvertPtr(ST(3), &argp4,SWIGTYPE_p_apr_hash_t, 0 | 0 );
- if (!SWIG_IsOK(res4)) {
- SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_wc_merge_props" "', argument " "4"" of type '" "apr_hash_t *""'");
+ {
+ if (_global_pool == NULL)
+ _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+ arg4 = svn_swig_pl_hash_to_prophash(ST(3), _global_pool);
}
- arg4 = (apr_hash_t *)(argp4);
res5 = SWIG_ConvertPtr(ST(4), &argp5,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
if (!SWIG_IsOK(res5)) {
SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_wc_merge_props" "', argument " "5"" of type '" "apr_array_header_t const *""'");
@@ -37630,7 +38386,7 @@ XS(_wrap_svn_wc_transmit_text_deltas3) {
}
{
- result = (svn_error_t *)svn_wc_transmit_text_deltas3((svn_checksum_t const **)arg1,(svn_checksum_t const **)arg2,arg3,(char const *)arg4,arg5,(struct svn_delta_editor_t const *)arg6,arg7,arg8,arg9);
+ result = (svn_error_t *)svn_wc_transmit_text_deltas3((struct svn_checksum_t const **)arg1,(struct svn_checksum_t const **)arg2,arg3,(char const *)arg4,arg5,(struct svn_delta_editor_t const *)arg6,arg7,arg8,arg9);
@@ -37773,7 +38529,7 @@ XS(_wrap_svn_wc_transmit_text_deltas2) {
}
}
{
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,59,%append_output@*/ if (argvi >= items) EXTEND(sp,1); /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,56,%set_output@*/ ST(argvi) = sv_2mortal(newSVpv(svn_md5_digest_to_cstring(arg2,
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,59,%append_output@*/ if (argvi >= items) EXTEND(sp,1); /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,56,%set_output@*/ ST(argvi) = sv_2mortal(newSVpv(svn_md5_digest_to_cstring(arg2,
_global_pool),
0)); argvi++ /*@SWIG@*/
@@ -38644,7 +39400,7 @@ XS(_wrap_svn_wc_remove_lock) {
XS(_wrap_svn_wc_revision_status_t_min_rev_set) {
{
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -38658,9 +39414,9 @@ XS(_wrap_svn_wc_revision_status_t_min_rev_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_revision_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_revision_status_t_min_rev_set" "', argument " "1"" of type '" "svn_wc_revision_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_revision_status_t_min_rev_set" "', argument " "1"" of type '" "struct svn_wc_revision_status_t *""'");
}
- arg1 = (svn_wc_revision_status_t *)(argp1);
+ arg1 = (struct svn_wc_revision_status_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_revision_status_t_min_rev_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -38681,7 +39437,7 @@ XS(_wrap_svn_wc_revision_status_t_min_rev_set) {
XS(_wrap_svn_wc_revision_status_t_min_rev_get) {
{
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -38693,9 +39449,9 @@ XS(_wrap_svn_wc_revision_status_t_min_rev_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_revision_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_revision_status_t_min_rev_get" "', argument " "1"" of type '" "svn_wc_revision_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_revision_status_t_min_rev_get" "', argument " "1"" of type '" "struct svn_wc_revision_status_t *""'");
}
- arg1 = (svn_wc_revision_status_t *)(argp1);
+ arg1 = (struct svn_wc_revision_status_t *)(argp1);
result = (svn_revnum_t) ((arg1)->min_rev);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -38709,7 +39465,7 @@ XS(_wrap_svn_wc_revision_status_t_min_rev_get) {
XS(_wrap_svn_wc_revision_status_t_max_rev_set) {
{
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -38723,9 +39479,9 @@ XS(_wrap_svn_wc_revision_status_t_max_rev_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_revision_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_revision_status_t_max_rev_set" "', argument " "1"" of type '" "svn_wc_revision_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_revision_status_t_max_rev_set" "', argument " "1"" of type '" "struct svn_wc_revision_status_t *""'");
}
- arg1 = (svn_wc_revision_status_t *)(argp1);
+ arg1 = (struct svn_wc_revision_status_t *)(argp1);
ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_revision_status_t_max_rev_set" "', argument " "2"" of type '" "svn_revnum_t""'");
@@ -38746,7 +39502,7 @@ XS(_wrap_svn_wc_revision_status_t_max_rev_set) {
XS(_wrap_svn_wc_revision_status_t_max_rev_get) {
{
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -38758,9 +39514,9 @@ XS(_wrap_svn_wc_revision_status_t_max_rev_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_revision_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_revision_status_t_max_rev_get" "', argument " "1"" of type '" "svn_wc_revision_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_revision_status_t_max_rev_get" "', argument " "1"" of type '" "struct svn_wc_revision_status_t *""'");
}
- arg1 = (svn_wc_revision_status_t *)(argp1);
+ arg1 = (struct svn_wc_revision_status_t *)(argp1);
result = (svn_revnum_t) ((arg1)->max_rev);
ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ;
@@ -38774,7 +39530,7 @@ XS(_wrap_svn_wc_revision_status_t_max_rev_get) {
XS(_wrap_svn_wc_revision_status_t_switched_set) {
{
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -38788,9 +39544,9 @@ XS(_wrap_svn_wc_revision_status_t_switched_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_revision_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_revision_status_t_switched_set" "', argument " "1"" of type '" "svn_wc_revision_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_revision_status_t_switched_set" "', argument " "1"" of type '" "struct svn_wc_revision_status_t *""'");
}
- arg1 = (svn_wc_revision_status_t *)(argp1);
+ arg1 = (struct svn_wc_revision_status_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_revision_status_t_switched_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -38811,7 +39567,7 @@ XS(_wrap_svn_wc_revision_status_t_switched_set) {
XS(_wrap_svn_wc_revision_status_t_switched_get) {
{
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -38823,9 +39579,9 @@ XS(_wrap_svn_wc_revision_status_t_switched_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_revision_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_revision_status_t_switched_get" "', argument " "1"" of type '" "svn_wc_revision_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_revision_status_t_switched_get" "', argument " "1"" of type '" "struct svn_wc_revision_status_t *""'");
}
- arg1 = (svn_wc_revision_status_t *)(argp1);
+ arg1 = (struct svn_wc_revision_status_t *)(argp1);
result = (svn_boolean_t) ((arg1)->switched);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -38839,7 +39595,7 @@ XS(_wrap_svn_wc_revision_status_t_switched_get) {
XS(_wrap_svn_wc_revision_status_t_modified_set) {
{
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -38853,9 +39609,9 @@ XS(_wrap_svn_wc_revision_status_t_modified_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_revision_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_revision_status_t_modified_set" "', argument " "1"" of type '" "svn_wc_revision_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_revision_status_t_modified_set" "', argument " "1"" of type '" "struct svn_wc_revision_status_t *""'");
}
- arg1 = (svn_wc_revision_status_t *)(argp1);
+ arg1 = (struct svn_wc_revision_status_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_revision_status_t_modified_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -38876,7 +39632,7 @@ XS(_wrap_svn_wc_revision_status_t_modified_set) {
XS(_wrap_svn_wc_revision_status_t_modified_get) {
{
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -38888,9 +39644,9 @@ XS(_wrap_svn_wc_revision_status_t_modified_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_revision_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_revision_status_t_modified_get" "', argument " "1"" of type '" "svn_wc_revision_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_revision_status_t_modified_get" "', argument " "1"" of type '" "struct svn_wc_revision_status_t *""'");
}
- arg1 = (svn_wc_revision_status_t *)(argp1);
+ arg1 = (struct svn_wc_revision_status_t *)(argp1);
result = (svn_boolean_t) ((arg1)->modified);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -38904,7 +39660,7 @@ XS(_wrap_svn_wc_revision_status_t_modified_get) {
XS(_wrap_svn_wc_revision_status_t_sparse_checkout_set) {
{
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -38918,9 +39674,9 @@ XS(_wrap_svn_wc_revision_status_t_sparse_checkout_set) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_revision_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_revision_status_t_sparse_checkout_set" "', argument " "1"" of type '" "svn_wc_revision_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_revision_status_t_sparse_checkout_set" "', argument " "1"" of type '" "struct svn_wc_revision_status_t *""'");
}
- arg1 = (svn_wc_revision_status_t *)(argp1);
+ arg1 = (struct svn_wc_revision_status_t *)(argp1);
ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "svn_wc_revision_status_t_sparse_checkout_set" "', argument " "2"" of type '" "svn_boolean_t""'");
@@ -38941,7 +39697,7 @@ XS(_wrap_svn_wc_revision_status_t_sparse_checkout_set) {
XS(_wrap_svn_wc_revision_status_t_sparse_checkout_get) {
{
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -38953,9 +39709,9 @@ XS(_wrap_svn_wc_revision_status_t_sparse_checkout_get) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_revision_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_revision_status_t_sparse_checkout_get" "', argument " "1"" of type '" "svn_wc_revision_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "svn_wc_revision_status_t_sparse_checkout_get" "', argument " "1"" of type '" "struct svn_wc_revision_status_t *""'");
}
- arg1 = (svn_wc_revision_status_t *)(argp1);
+ arg1 = (struct svn_wc_revision_status_t *)(argp1);
result = (svn_boolean_t) ((arg1)->sparse_checkout);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ;
@@ -38970,14 +39726,14 @@ XS(_wrap_svn_wc_revision_status_t_sparse_checkout_get) {
XS(_wrap_new_svn_wc_revision_status_t) {
{
int argvi = 0;
- svn_wc_revision_status_t *result = 0 ;
+ struct svn_wc_revision_status_t *result = 0 ;
dXSARGS;
if ((items < 0) || (items > 0)) {
SWIG_croak("Usage: new_svn_wc_revision_status_t();");
}
{
- result = (svn_wc_revision_status_t *)calloc(1, sizeof(svn_wc_revision_status_t));
+ result = (struct svn_wc_revision_status_t *)calloc(1, sizeof(struct svn_wc_revision_status_t));
@@ -38992,7 +39748,7 @@ XS(_wrap_new_svn_wc_revision_status_t) {
XS(_wrap_delete_svn_wc_revision_status_t) {
{
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int argvi = 0;
@@ -39003,9 +39759,9 @@ XS(_wrap_delete_svn_wc_revision_status_t) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_svn_wc_revision_status_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_revision_status_t" "', argument " "1"" of type '" "svn_wc_revision_status_t *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_svn_wc_revision_status_t" "', argument " "1"" of type '" "struct svn_wc_revision_status_t *""'");
}
- arg1 = (svn_wc_revision_status_t *)(argp1);
+ arg1 = (struct svn_wc_revision_status_t *)(argp1);
{
free((char *) arg1);
@@ -39951,6 +40707,107 @@ XS(_wrap_svn_wc_exclude) {
}
+XS(_wrap_svn_wc_read_kind2) {
+ {
+ svn_node_kind_t *arg1 = (svn_node_kind_t *) 0 ;
+ svn_wc_context_t *arg2 = (svn_wc_context_t *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_boolean_t arg4 ;
+ svn_boolean_t arg5 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool ;
+ svn_node_kind_t temp1 ;
+ int res1 = SWIG_TMPOBJ ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int val4 ;
+ int ecode4 = 0 ;
+ int val5 ;
+ int ecode5 = 0 ;
+ int argvi = 0;
+ svn_error_t *result = 0 ;
+ dXSARGS;
+
+ {
+ _global_pool = arg6 = svn_swig_pl_make_pool (ST(items-1));
+ }
+ arg1 = &temp1;
+ if ((items < 4) || (items > 5)) {
+ SWIG_croak("Usage: svn_wc_read_kind2(wc_ctx,local_abspath,show_deleted,show_hidden,scratch_pool);");
+ }
+ res2 = SWIG_ConvertPtr(ST(0), &argp2,SWIGTYPE_p_svn_wc_context_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_wc_read_kind2" "', argument " "2"" of type '" "svn_wc_context_t *""'");
+ }
+ arg2 = (svn_wc_context_t *)(argp2);
+ res3 = SWIG_AsCharPtrAndSize(ST(1), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_wc_read_kind2" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = (char *)(buf3);
+ ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "svn_wc_read_kind2" "', argument " "4"" of type '" "svn_boolean_t""'");
+ }
+ arg4 = (svn_boolean_t)(val4);
+ ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val5);
+ if (!SWIG_IsOK(ecode5)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "svn_wc_read_kind2" "', argument " "5"" of type '" "svn_boolean_t""'");
+ }
+ arg5 = (svn_boolean_t)(val5);
+ if (items > 4) {
+
+ }
+ {
+ result = (svn_error_t *)svn_wc_read_kind2(arg1,arg2,(char const *)arg3,arg4,arg5,arg6);
+
+
+
+ }
+ {
+ if (result) {
+ SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
+
+ if (SvOK(exception_handler)) {
+ SV *callback_result;
+
+ svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
+ &callback_result, "S", result,
+ SWIGTYPE_p_svn_error_t);
+ } else {
+ ST(argvi) = SWIG_NewPointerObj(result, SWIGTYPE_p_svn_error_t, 0);
+ argvi++;
+ }
+ }
+ }
+ if (SWIG_IsTmpObj(res1)) {
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((*arg1)); argvi++ ;
+ } else {
+ int new_flags = SWIG_IsNewObj(res1) ? (SWIG_POINTER_OWN | 0) : 0;
+ if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_svn_node_kind_t, new_flags); argvi++ ;
+ }
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+
+
+ XSRETURN(argvi);
+ fail:
+
+
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+
+
+
+ SWIG_croak_null();
+ }
+}
+
+
XS(_wrap_svn_wc_read_kind) {
{
svn_node_kind_t *arg1 = (svn_node_kind_t *) 0 ;
@@ -45769,7 +46626,7 @@ XS(_wrap_svn_wc_swig_init_asp_dot_net_hack) {
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
-static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *|svn_rangelist_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_file_t = {"_p_apr_file_t", "apr_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_hash_t = {"_p_apr_hash_t", "apr_hash_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int32_t = {"_p_apr_int32_t", "apr_int32_t *|time_t *", 0, 0, (void*)0, 0};
@@ -45826,7 +46683,7 @@ static swig_type_info _swigt__p_p_apr_array_header_t = {"_p_p_apr_array_header_t
static swig_type_info _swigt__p_p_apr_file_t = {"_p_p_apr_file_t", "apr_file_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_apr_hash_t = {"_p_p_apr_hash_t", "apr_hash_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_p_svn_checksum_t = {"_p_p_svn_checksum_t", "svn_checksum_t **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_svn_checksum_t = {"_p_p_svn_checksum_t", "struct svn_checksum_t **|svn_checksum_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_delta_editor_t = {"_p_p_svn_delta_editor_t", "struct svn_delta_editor_t **|svn_delta_editor_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_stream_t = {"_p_p_svn_stream_t", "struct svn_stream_t **|svn_stream_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_string_t = {"_p_p_svn_string_t", "struct svn_string_t **|svn_string_t **", 0, 0, (void*)0, 0};
@@ -45851,7 +46708,9 @@ static swig_type_info _swigt__p_svn_auth_iterstate_t = {"_p_svn_auth_iterstate_t
static swig_type_info _swigt__p_svn_auth_provider_object_t = {"_p_svn_auth_provider_object_t", "struct svn_auth_provider_object_t *|svn_auth_provider_object_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_provider_t = {"_p_svn_auth_provider_t", "struct svn_auth_provider_t *|svn_auth_provider_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_ssl_server_cert_info_t = {"_p_svn_auth_ssl_server_cert_info_t", "struct svn_auth_ssl_server_cert_info_t *|svn_auth_ssl_server_cert_info_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "svn_checksum_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_ctx_t = {"_p_svn_checksum_ctx_t", "struct svn_checksum_ctx_t *|svn_checksum_ctx_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "enum svn_checksum_kind_t *|svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "struct svn_checksum_t *|svn_checksum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_commit_info_t = {"_p_svn_commit_info_t", "struct svn_commit_info_t *|svn_commit_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_config_t = {"_p_svn_config_t", "struct svn_config_t *|svn_config_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_delta_editor_t = {"_p_svn_delta_editor_t", "struct svn_delta_editor_t *|svn_delta_editor_t *", 0, 0, (void*)0, 0};
@@ -45887,6 +46746,7 @@ static swig_type_info _swigt__p_svn_opt_subcommand_desc2_t = {"_p_svn_opt_subcom
static swig_type_info _swigt__p_svn_opt_subcommand_desc_t = {"_p_svn_opt_subcommand_desc_t", "struct svn_opt_subcommand_desc_t *|svn_opt_subcommand_desc_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_file_t = {"_p_svn_patch_file_t", "struct svn_patch_file_t *|svn_patch_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_t = {"_p_svn_patch_t", "struct svn_patch_t *|svn_patch_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_prop_inherited_item_t = {"_p_svn_prop_inherited_item_t", "struct svn_prop_inherited_item_t *|svn_prop_inherited_item_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_kind = {"_p_svn_prop_kind", "svn_prop_kind_t *|enum svn_prop_kind *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_patch_t = {"_p_svn_prop_patch_t", "struct svn_prop_patch_t *|svn_prop_patch_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_ra_callbacks2_t = {"_p_svn_ra_callbacks2_t", "struct svn_ra_callbacks2_t *|svn_ra_callbacks2_t *", 0, 0, (void*)0, 0};
@@ -45905,6 +46765,9 @@ static swig_type_info _swigt__p_svn_txdelta_op_t = {"_p_svn_txdelta_op_t", "stru
static swig_type_info _swigt__p_svn_txdelta_stream_t = {"_p_svn_txdelta_stream_t", "struct svn_txdelta_stream_t *|svn_txdelta_stream_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_txdelta_window_t = {"_p_svn_txdelta_window_t", "struct svn_txdelta_window_t *|svn_txdelta_window_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_checklist_t = {"_p_svn_version_checklist_t", "struct svn_version_checklist_t *|svn_version_checklist_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_linked_lib_t = {"_p_svn_version_ext_linked_lib_t", "struct svn_version_ext_linked_lib_t *|svn_version_ext_linked_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_loaded_lib_t = {"_p_svn_version_ext_loaded_lib_t", "struct svn_version_ext_loaded_lib_t *|svn_version_ext_loaded_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_extended_t = {"_p_svn_version_extended_t", "struct svn_version_extended_t *|svn_version_extended_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_t = {"_p_svn_version_t", "struct svn_version_t *|svn_version_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_wc_adm_access_t = {"_p_svn_wc_adm_access_t", "struct svn_wc_adm_access_t *|svn_wc_adm_access_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_wc_committed_queue_t = {"_p_svn_wc_committed_queue_t", "struct svn_wc_committed_queue_t *|svn_wc_committed_queue_t *", 0, 0, (void*)0, 0};
@@ -46026,6 +46889,8 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_auth_provider_object_t,
&_swigt__p_svn_auth_provider_t,
&_swigt__p_svn_auth_ssl_server_cert_info_t,
+ &_swigt__p_svn_checksum_ctx_t,
+ &_swigt__p_svn_checksum_kind_t,
&_swigt__p_svn_checksum_t,
&_swigt__p_svn_commit_info_t,
&_swigt__p_svn_config_t,
@@ -46062,6 +46927,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_opt_subcommand_desc_t,
&_swigt__p_svn_patch_file_t,
&_swigt__p_svn_patch_t,
+ &_swigt__p_svn_prop_inherited_item_t,
&_swigt__p_svn_prop_kind,
&_swigt__p_svn_prop_patch_t,
&_swigt__p_svn_ra_callbacks2_t,
@@ -46080,6 +46946,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_txdelta_stream_t,
&_swigt__p_svn_txdelta_window_t,
&_swigt__p_svn_version_checklist_t,
+ &_swigt__p_svn_version_ext_linked_lib_t,
+ &_swigt__p_svn_version_ext_loaded_lib_t,
+ &_swigt__p_svn_version_extended_t,
&_swigt__p_svn_version_t,
&_swigt__p_svn_wc_adm_access_t,
&_swigt__p_svn_wc_committed_queue_t,
@@ -46201,6 +47070,8 @@ static swig_cast_info _swigc__p_svn_auth_iterstate_t[] = { {&_swigt__p_svn_auth
static swig_cast_info _swigc__p_svn_auth_provider_object_t[] = { {&_swigt__p_svn_auth_provider_object_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_provider_t[] = { {&_swigt__p_svn_auth_provider_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_ssl_server_cert_info_t[] = { {&_swigt__p_svn_auth_ssl_server_cert_info_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_ctx_t[] = { {&_swigt__p_svn_checksum_ctx_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_kind_t[] = { {&_swigt__p_svn_checksum_kind_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_checksum_t[] = { {&_swigt__p_svn_checksum_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_commit_info_t[] = { {&_swigt__p_svn_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_config_t[] = { {&_swigt__p_svn_config_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -46237,6 +47108,7 @@ static swig_cast_info _swigc__p_svn_opt_subcommand_desc2_t[] = { {&_swigt__p_sv
static swig_cast_info _swigc__p_svn_opt_subcommand_desc_t[] = { {&_swigt__p_svn_opt_subcommand_desc_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_file_t[] = { {&_swigt__p_svn_patch_file_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_t[] = { {&_swigt__p_svn_patch_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_prop_inherited_item_t[] = { {&_swigt__p_svn_prop_inherited_item_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_kind[] = { {&_swigt__p_svn_prop_kind, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_patch_t[] = { {&_swigt__p_svn_prop_patch_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_ra_callbacks2_t[] = { {&_swigt__p_svn_ra_callbacks2_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -46255,6 +47127,9 @@ static swig_cast_info _swigc__p_svn_txdelta_op_t[] = { {&_swigt__p_svn_txdelta_
static swig_cast_info _swigc__p_svn_txdelta_stream_t[] = { {&_swigt__p_svn_txdelta_stream_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_txdelta_window_t[] = { {&_swigt__p_svn_txdelta_window_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_checklist_t[] = { {&_swigt__p_svn_version_checklist_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_linked_lib_t[] = { {&_swigt__p_svn_version_ext_linked_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_loaded_lib_t[] = { {&_swigt__p_svn_version_ext_loaded_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_extended_t[] = { {&_swigt__p_svn_version_extended_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_t[] = { {&_swigt__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_wc_adm_access_t[] = { {&_swigt__p_svn_wc_adm_access_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_wc_committed_queue_t[] = { {&_swigt__p_svn_wc_committed_queue_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -46376,6 +47251,8 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_auth_provider_object_t,
_swigc__p_svn_auth_provider_t,
_swigc__p_svn_auth_ssl_server_cert_info_t,
+ _swigc__p_svn_checksum_ctx_t,
+ _swigc__p_svn_checksum_kind_t,
_swigc__p_svn_checksum_t,
_swigc__p_svn_commit_info_t,
_swigc__p_svn_config_t,
@@ -46412,6 +47289,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_opt_subcommand_desc_t,
_swigc__p_svn_patch_file_t,
_swigc__p_svn_patch_t,
+ _swigc__p_svn_prop_inherited_item_t,
_swigc__p_svn_prop_kind,
_swigc__p_svn_prop_patch_t,
_swigc__p_svn_ra_callbacks2_t,
@@ -46430,6 +47308,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_txdelta_stream_t,
_swigc__p_svn_txdelta_window_t,
_swigc__p_svn_version_checklist_t,
+ _swigc__p_svn_version_ext_linked_lib_t,
+ _swigc__p_svn_version_ext_loaded_lib_t,
+ _swigc__p_svn_version_extended_t,
_swigc__p_svn_version_t,
_swigc__p_svn_wc_adm_access_t,
_swigc__p_svn_wc_committed_queue_t,
@@ -46520,6 +47401,7 @@ static swig_command_info swig_commands[] = {
{"SVN::_Wc::svn_wc_external_item2_t_peg_revision_get", _wrap_svn_wc_external_item2_t_peg_revision_get},
{"SVN::_Wc::new_svn_wc_external_item2_t", _wrap_new_svn_wc_external_item2_t},
{"SVN::_Wc::delete_svn_wc_external_item2_t", _wrap_delete_svn_wc_external_item2_t},
+{"SVN::_Wc::svn_wc_external_item2_create", _wrap_svn_wc_external_item2_create},
{"SVN::_Wc::svn_wc_external_item_create", _wrap_svn_wc_external_item_create},
{"SVN::_Wc::svn_wc_external_item2_dup", _wrap_svn_wc_external_item2_dup},
{"SVN::_Wc::svn_wc_external_item_t_target_dir_set", _wrap_svn_wc_external_item_t_target_dir_set},
@@ -46593,8 +47475,11 @@ static swig_command_info swig_commands[] = {
{"SVN::_Wc::svn_wc_conflict_version_t_path_in_repos_get", _wrap_svn_wc_conflict_version_t_path_in_repos_get},
{"SVN::_Wc::svn_wc_conflict_version_t_node_kind_set", _wrap_svn_wc_conflict_version_t_node_kind_set},
{"SVN::_Wc::svn_wc_conflict_version_t_node_kind_get", _wrap_svn_wc_conflict_version_t_node_kind_get},
+{"SVN::_Wc::svn_wc_conflict_version_t_repos_uuid_set", _wrap_svn_wc_conflict_version_t_repos_uuid_set},
+{"SVN::_Wc::svn_wc_conflict_version_t_repos_uuid_get", _wrap_svn_wc_conflict_version_t_repos_uuid_get},
{"SVN::_Wc::new_svn_wc_conflict_version_t", _wrap_new_svn_wc_conflict_version_t},
{"SVN::_Wc::delete_svn_wc_conflict_version_t", _wrap_delete_svn_wc_conflict_version_t},
+{"SVN::_Wc::svn_wc_conflict_version_create2", _wrap_svn_wc_conflict_version_create2},
{"SVN::_Wc::svn_wc_conflict_version_create", _wrap_svn_wc_conflict_version_create},
{"SVN::_Wc::svn_wc_conflict_version_dup", _wrap_svn_wc_conflict_version_dup},
{"SVN::_Wc::svn_wc_conflict_description2_t_local_abspath_set", _wrap_svn_wc_conflict_description2_t_local_abspath_set},
@@ -46855,6 +47740,10 @@ static swig_command_info swig_commands[] = {
{"SVN::_Wc::svn_wc_info_t_conflicts_get", _wrap_svn_wc_info_t_conflicts_get},
{"SVN::_Wc::svn_wc_info_t_wcroot_abspath_set", _wrap_svn_wc_info_t_wcroot_abspath_set},
{"SVN::_Wc::svn_wc_info_t_wcroot_abspath_get", _wrap_svn_wc_info_t_wcroot_abspath_get},
+{"SVN::_Wc::svn_wc_info_t_moved_from_abspath_set", _wrap_svn_wc_info_t_moved_from_abspath_set},
+{"SVN::_Wc::svn_wc_info_t_moved_from_abspath_get", _wrap_svn_wc_info_t_moved_from_abspath_get},
+{"SVN::_Wc::svn_wc_info_t_moved_to_abspath_set", _wrap_svn_wc_info_t_moved_to_abspath_set},
+{"SVN::_Wc::svn_wc_info_t_moved_to_abspath_get", _wrap_svn_wc_info_t_moved_to_abspath_get},
{"SVN::_Wc::new_svn_wc_info_t", _wrap_new_svn_wc_info_t},
{"SVN::_Wc::delete_svn_wc_info_t", _wrap_delete_svn_wc_info_t},
{"SVN::_Wc::svn_wc_info_dup", _wrap_svn_wc_info_dup},
@@ -46937,6 +47826,12 @@ static swig_command_info swig_commands[] = {
{"SVN::_Wc::svn_wc_status3_t_ood_changed_date_get", _wrap_svn_wc_status3_t_ood_changed_date_get},
{"SVN::_Wc::svn_wc_status3_t_ood_changed_author_set", _wrap_svn_wc_status3_t_ood_changed_author_set},
{"SVN::_Wc::svn_wc_status3_t_ood_changed_author_get", _wrap_svn_wc_status3_t_ood_changed_author_get},
+{"SVN::_Wc::svn_wc_status3_t_moved_from_abspath_set", _wrap_svn_wc_status3_t_moved_from_abspath_set},
+{"SVN::_Wc::svn_wc_status3_t_moved_from_abspath_get", _wrap_svn_wc_status3_t_moved_from_abspath_get},
+{"SVN::_Wc::svn_wc_status3_t_moved_to_abspath_set", _wrap_svn_wc_status3_t_moved_to_abspath_set},
+{"SVN::_Wc::svn_wc_status3_t_moved_to_abspath_get", _wrap_svn_wc_status3_t_moved_to_abspath_get},
+{"SVN::_Wc::svn_wc_status3_t_file_external_set", _wrap_svn_wc_status3_t_file_external_set},
+{"SVN::_Wc::svn_wc_status3_t_file_external_get", _wrap_svn_wc_status3_t_file_external_get},
{"SVN::_Wc::new_svn_wc_status3_t", _wrap_new_svn_wc_status3_t},
{"SVN::_Wc::delete_svn_wc_status3_t", _wrap_delete_svn_wc_status3_t},
{"SVN::_Wc::svn_wc_status2_t_entry_set", _wrap_svn_wc_status2_t_entry_set},
@@ -47016,6 +47911,7 @@ static swig_command_info swig_commands[] = {
{"SVN::_Wc::svn_wc_delete3", _wrap_svn_wc_delete3},
{"SVN::_Wc::svn_wc_delete2", _wrap_svn_wc_delete2},
{"SVN::_Wc::svn_wc_delete", _wrap_svn_wc_delete},
+{"SVN::_Wc::svn_wc_add_from_disk2", _wrap_svn_wc_add_from_disk2},
{"SVN::_Wc::svn_wc_add_from_disk", _wrap_svn_wc_add_from_disk},
{"SVN::_Wc::svn_wc_add4", _wrap_svn_wc_add4},
{"SVN::_Wc::svn_wc_add3", _wrap_svn_wc_add3},
@@ -47047,6 +47943,7 @@ static swig_command_info swig_commands[] = {
{"SVN::_Wc::svn_wc_crawl_revisions3", _wrap_svn_wc_crawl_revisions3},
{"SVN::_Wc::svn_wc_crawl_revisions2", _wrap_svn_wc_crawl_revisions2},
{"SVN::_Wc::svn_wc_crawl_revisions", _wrap_svn_wc_crawl_revisions},
+{"SVN::_Wc::svn_wc_check_root", _wrap_svn_wc_check_root},
{"SVN::_Wc::svn_wc_is_wc_root2", _wrap_svn_wc_is_wc_root2},
{"SVN::_Wc::svn_wc_is_wc_root", _wrap_svn_wc_is_wc_root},
{"SVN::_Wc::svn_wc_get_actual_target2", _wrap_svn_wc_get_actual_target2},
@@ -47086,6 +47983,7 @@ static swig_command_info swig_commands[] = {
{"SVN::_Wc::svn_wc_diff", _wrap_svn_wc_diff},
{"SVN::_Wc::svn_wc_get_prop_diffs2", _wrap_svn_wc_get_prop_diffs2},
{"SVN::_Wc::svn_wc_get_prop_diffs", _wrap_svn_wc_get_prop_diffs},
+{"SVN::_Wc::svn_wc_merge5", _wrap_svn_wc_merge5},
{"SVN::_Wc::svn_wc_merge4", _wrap_svn_wc_merge4},
{"SVN::_Wc::svn_wc_merge3", _wrap_svn_wc_merge3},
{"SVN::_Wc::svn_wc_merge2", _wrap_svn_wc_merge2},
@@ -47148,6 +48046,7 @@ static swig_command_info swig_commands[] = {
{"SVN::_Wc::svn_wc_crop_tree2", _wrap_svn_wc_crop_tree2},
{"SVN::_Wc::svn_wc_crop_tree", _wrap_svn_wc_crop_tree},
{"SVN::_Wc::svn_wc_exclude", _wrap_svn_wc_exclude},
+{"SVN::_Wc::svn_wc_read_kind2", _wrap_svn_wc_read_kind2},
{"SVN::_Wc::svn_wc_read_kind", _wrap_svn_wc_read_kind},
{"SVN::_Wc::svn_wc_diff_callbacks4_invoke_file_opened", _wrap_svn_wc_diff_callbacks4_invoke_file_opened},
{"SVN::_Wc::svn_wc_diff_callbacks4_invoke_file_changed", _wrap_svn_wc_diff_callbacks4_invoke_file_changed},
@@ -47260,8 +48159,6 @@ SWIG_InitializeModule(void *clientdata) {
swig_module_info *module_head, *iter;
int found, init;
- clientdata = clientdata;
-
/* check to see if the circular list has been setup, if not, set it up */
if (swig_module.next==0) {
/* Initialize the swig_module */
@@ -47452,25 +48349,30 @@ XS(SWIG_init) {
/* Install commands */
for (i = 0; swig_commands[i].name; i++) {
- newXS((char*) swig_commands[i].name,swig_commands[i].wrapper, (char*)__FILE__);
+ /* Casts only needed for Perl < 5.10. */
+#ifdef __cplusplus
+ newXS(const_cast<char*>(swig_commands[i].name), swig_commands[i].wrapper, const_cast<char*>(__FILE__));
+#else
+ newXS((char*)swig_commands[i].name, swig_commands[i].wrapper, (char*)__FILE__);
+#endif
}
/* Install variables */
for (i = 0; swig_variables[i].name; i++) {
SV *sv;
- sv = get_sv((char*) swig_variables[i].name, TRUE | 0x2 | GV_ADDMULTI);
+ sv = get_sv(swig_variables[i].name, TRUE | 0x2 | GV_ADDMULTI);
if (swig_variables[i].type) {
SWIG_MakePtr(sv,(void *)1, *swig_variables[i].type,0);
} else {
sv_setiv(sv,(IV) 0);
}
- swig_create_magic(sv, (char *) swig_variables[i].name, swig_variables[i].set, swig_variables[i].get);
+ swig_create_magic(sv, swig_variables[i].name, swig_variables[i].set, swig_variables[i].get);
}
/* Install constant */
for (i = 0; swig_constants[i].type; i++) {
SV *sv;
- sv = get_sv((char*)swig_constants[i].name, TRUE | 0x2 | GV_ADDMULTI);
+ sv = get_sv(swig_constants[i].name, TRUE | 0x2 | GV_ADDMULTI);
switch(swig_constants[i].type) {
case SWIG_INT:
sv_setiv(sv, (IV) swig_constants[i].lvalue);
@@ -47479,7 +48381,7 @@ XS(SWIG_init) {
sv_setnv(sv, (double) swig_constants[i].dvalue);
break;
case SWIG_STRING:
- sv_setpv(sv, (char *) swig_constants[i].pvalue);
+ sv_setpv(sv, (const char *) swig_constants[i].pvalue);
break;
case SWIG_POINTER:
SWIG_MakePtr(sv, swig_constants[i].pvalue, *(swig_constants[i].ptype),0);
@@ -47493,697 +48395,747 @@ XS(SWIG_init) {
SvREADONLY_on(sv);
}
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_WC_TRANSLATE_FROM_NF", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0x00000000)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_WC_TRANSLATE_TO_NF", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0x00000001)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_WC_TRANSLATE_FORCE_EOL_REPAIR", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0x00000002)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_WC_TRANSLATE_NO_OUTPUT_CLEANUP", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0x00000004)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_WC_TRANSLATE_FORCE_COPY", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0x00000008)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_WC_TRANSLATE_USE_GLOBAL_TMP", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(0x00000010)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_WC_ADM_DIR_NAME", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr(".svn"));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_add", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_add)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_copy", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_copy)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_delete", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_delete)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_restore", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_restore)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_revert", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_revert)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_failed_revert", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_failed_revert)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_resolved", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_resolved)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_skip", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_skip)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_update_delete", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_update_delete)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_update_add", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_update_add)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_update_update", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_update_update)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_update_completed", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_update_completed)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_update_external", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_update_external)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_status_completed", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_status_completed)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_status_external", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_status_external)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_commit_modified", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_commit_modified)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_commit_added", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_commit_added)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_commit_deleted", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_commit_deleted)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_commit_replaced", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_commit_replaced)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_commit_postfix_txdelta", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_commit_postfix_txdelta)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_blame_revision", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_blame_revision)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_locked", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_locked)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_unlocked", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_unlocked)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_failed_lock", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_failed_lock)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_failed_unlock", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_failed_unlock)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_exists", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_exists)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_changelist_set", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_changelist_set)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_changelist_clear", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_changelist_clear)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_changelist_moved", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_changelist_moved)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_merge_begin", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_merge_begin)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_foreign_merge_begin", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_foreign_merge_begin)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_update_replace", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_update_replace)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_property_added", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_property_added)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_property_modified", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_property_modified)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_property_deleted", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_property_deleted)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_property_deleted_nonexistent", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_property_deleted_nonexistent)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_revprop_set", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_revprop_set)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_revprop_deleted", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_revprop_deleted)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_merge_completed", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_merge_completed)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_tree_conflict", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_tree_conflict)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_failed_external", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_failed_external)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_update_started", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_update_started)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_update_skip_obstruction", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_update_skip_obstruction)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_update_skip_working_only", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_update_skip_working_only)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_update_skip_access_denied", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_update_skip_access_denied)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_update_external_removed", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_update_external_removed)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_update_shadowed_add", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_update_shadowed_add)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_update_shadowed_update", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_update_shadowed_update)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_update_shadowed_delete", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_update_shadowed_delete)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_merge_record_info", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_merge_record_info)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_upgraded_path", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_upgraded_path)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_merge_record_info_begin", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_merge_record_info_begin)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_merge_elide_info", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_merge_elide_info)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_patch", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_patch)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_patch_applied_hunk", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_patch_applied_hunk)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_patch_rejected_hunk", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_patch_rejected_hunk)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_patch_hunk_already_applied", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_patch_hunk_already_applied)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_commit_copied", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_commit_copied)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_commit_copied_replaced", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_commit_copied_replaced)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_url_redirect", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_url_redirect)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_path_nonexistent", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_path_nonexistent)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_exclude", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_exclude)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_failed_conflict", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_failed_conflict)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_failed_missing", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_failed_missing)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_failed_out_of_date", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_failed_out_of_date)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_failed_no_parent", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_failed_no_parent)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_failed_locked", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_failed_locked)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_failed_forbidden_by_server", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_failed_forbidden_by_server)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_skip_conflicted", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_skip_conflicted)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_update_broken_lock", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_update_broken_lock)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_failed_obstruction", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_failed_obstruction)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_conflict_resolver_starting", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_conflict_resolver_starting)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_conflict_resolver_done", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_conflict_resolver_done)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_left_local_modifications", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_left_local_modifications)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_foreign_copy_begin", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_foreign_copy_begin)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_move_broken", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_move_broken)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_state_inapplicable", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_state_inapplicable)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_state_unknown", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_state_unknown)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_state_unchanged", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_state_unchanged)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_state_missing", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_state_missing)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_state_obstructed", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_state_obstructed)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_state_changed", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_state_changed)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_state_merged", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_state_merged)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_state_conflicted", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_state_conflicted)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_state_source_missing", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_state_source_missing)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_lock_state_inapplicable", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_lock_state_inapplicable)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_lock_state_unknown", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_lock_state_unknown)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_lock_state_unchanged", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_lock_state_unchanged)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_lock_state_locked", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_lock_state_locked)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_notify_lock_state_unlocked", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_notify_lock_state_unlocked)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_conflict_action_edit", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_conflict_action_edit)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_conflict_action_add", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_conflict_action_add)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_conflict_action_delete", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_conflict_action_delete)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_conflict_action_replace", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_conflict_action_replace)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_conflict_reason_edited", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_conflict_reason_edited)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_conflict_reason_obstructed", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_conflict_reason_obstructed)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_conflict_reason_deleted", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_conflict_reason_deleted)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_conflict_reason_missing", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_conflict_reason_missing)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_conflict_reason_unversioned", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_conflict_reason_unversioned)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_conflict_reason_added", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_conflict_reason_added)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_conflict_reason_replaced", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_conflict_reason_replaced)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "svn_wc_conflict_reason_moved_away", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_conflict_reason_moved_away)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "svn_wc_conflict_reason_moved_here", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_conflict_reason_moved_here)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_conflict_kind_text", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_conflict_kind_text)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_conflict_kind_property", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_conflict_kind_property)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_conflict_kind_tree", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_conflict_kind_tree)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_operation_none", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_operation_none)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_operation_update", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_operation_update)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_operation_switch", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_operation_switch)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_operation_merge", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_operation_merge)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_conflict_choose_postpone", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_conflict_choose_postpone)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_conflict_choose_base", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_conflict_choose_base)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_conflict_choose_theirs_full", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_conflict_choose_theirs_full)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_conflict_choose_mine_full", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_conflict_choose_mine_full)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_conflict_choose_theirs_conflict", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_conflict_choose_theirs_conflict)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_conflict_choose_mine_conflict", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_conflict_choose_mine_conflict)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_conflict_choose_merged", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_conflict_choose_merged)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ SV *sv = get_sv((char*) SWIG_prefix "svn_wc_conflict_choose_unspecified", TRUE | 0x2 | GV_ADDMULTI);
+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_conflict_choose_unspecified)));
+ SvREADONLY_on(sv);
+ } while(0) /*@SWIG@*/;
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_schedule_normal", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_schedule_normal)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_schedule_add", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_schedule_add)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_schedule_delete", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_schedule_delete)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_schedule_replace", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_schedule_replace)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_WC_ENTRY_WORKING_SIZE_UNKNOWN", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)((-1))));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "SVN_WC_ENTRY_THIS_DIR", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_FromCharPtr(""));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_status_none", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_status_none)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_status_unversioned", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_status_unversioned)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_status_normal", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_status_normal)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_status_added", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_status_added)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_status_missing", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_status_missing)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_status_deleted", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_status_deleted)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_status_replaced", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_status_replaced)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_status_modified", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_status_modified)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_status_merged", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_status_merged)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_status_conflicted", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_status_conflicted)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_status_ignored", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_status_ignored)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_status_obstructed", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_status_obstructed)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_status_external", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_status_external)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_status_incomplete", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_status_incomplete)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_merge_unchanged", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_merge_unchanged)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_merge_merged", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_merge_merged)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_merge_conflict", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_merge_conflict)));
SvREADONLY_on(sv);
} while(0) /*@SWIG@*/;
- /*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+ /*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/perl5/perltypemaps.swg,65,%set_constant@*/ do {
SV *sv = get_sv((char*) SWIG_prefix "svn_wc_merge_no_merge", TRUE | 0x2 | GV_ADDMULTI);
sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(svn_wc_merge_no_merge)));
SvREADONLY_on(sv);
diff --git a/subversion/bindings/swig/perl/native/t/0use.t b/subversion/bindings/swig/perl/native/t/0use.t
index d45b096..9ed018a 100644
--- a/subversion/bindings/swig/perl/native/t/0use.t
+++ b/subversion/bindings/swig/perl/native/t/0use.t
@@ -22,10 +22,17 @@
use Test::More tests => 7;
use strict;
+# TEST
use_ok 'SVN::Core';
+# TEST
use_ok 'SVN::Repos';
+# TEST
use_ok 'SVN::Fs';
+# TEST
use_ok 'SVN::Delta';
+# TEST
use_ok 'SVN::Ra';
+# TEST
use_ok 'SVN::Wc';
+# TEST
use_ok 'SVN::Client';
diff --git a/subversion/bindings/swig/perl/native/t/1repos.t b/subversion/bindings/swig/perl/native/t/1repos.t
index a979963..85abd2c 100644
--- a/subversion/bindings/swig/perl/native/t/1repos.t
+++ b/subversion/bindings/swig/perl/native/t/1repos.t
@@ -35,6 +35,7 @@ my $repospath = tempdir('svn-perl-test-XXXXXX', TMPDIR => 1, CLEANUP => 1);
my $repos;
+# TEST
ok($repos = SVN::Repos::create("$repospath", undef, undef, undef, undef),
"create repository at $repospath");
@@ -60,6 +61,7 @@ SVN::TxDelta::send_string("FILEA CONTENT", @$ret);
$editor->close_edit();
+# TEST
cmp_ok($fs->youngest_rev, '==', 1);
{
$editor = SVN::Delta::Editor->
@@ -73,6 +75,7 @@ my $subdirbaton = $editor->add_directory('tags/foo', $dirbaton,
$editor->close_edit();
}
+# TEST
cmp_ok($fs->youngest_rev, '==', 2);
my @history;
@@ -80,6 +83,7 @@ my @history;
SVN::Repos::history($fs, 'tags/foo/filea',
sub {push @history, [@_[0,1]]}, 0, 2, 1);
+# TEST
is_deeply(\@history, [['/tags/foo/filea',2],['/trunk/filea',1]],
'repos_history');
@@ -97,8 +101,10 @@ $editor->delete_entry('tags', 2, $rootbaton);
$editor->close_edit();
}
+# TEST
ok($main::something_destroyed, 'callback properly destroyed');
+# TEST
cmp_ok($fs->youngest_rev, '==', 3);
END {
diff --git a/subversion/bindings/swig/perl/native/t/2fs.t b/subversion/bindings/swig/perl/native/t/2fs.t
index 01e6427..43e40c7 100644
--- a/subversion/bindings/swig/perl/native/t/2fs.t
+++ b/subversion/bindings/swig/perl/native/t/2fs.t
@@ -36,24 +36,32 @@ my $repospath = tempdir('svn-perl-test-XXXXXX', TMPDIR => 1, CLEANUP => 1);
my $repos;
+# TEST
ok($repos = SVN::Repos::create("$repospath", undef, undef, undef, undef),
"create repository at $repospath");
my $fs = $repos->fs;
+# TEST
cmp_ok($fs->youngest_rev, '==', 0,
"new repository start with rev 0");
+# TEST
is($fs->path, "$repospath/db", '$fs->path()');
+# TEST
is(SVN::Fs::type($fs->path), 'fsfs', 'SVN::Fs::type()');
my $txn = $fs->begin_txn($fs->youngest_rev);
my $txns = $fs->list_transactions;
+# TEST
ok(eq_array($fs->list_transactions, [$txn->name]), 'list transaction');
+# TEST
isa_ok($txn->root, '_p_svn_fs_root_t', '$txn->root()');
+# TEST
is($txn->root->txn_name, $txn->name, '$txn->root->txn_name()');
+# TEST
is($fs->revision_root($fs->youngest_rev)->txn_name, undef);
$txn->root->make_dir('trunk');
@@ -63,32 +71,43 @@ my $text = "this is just a test\n";
$txn->root->make_file($path);
{
my $stream = $txn->root->apply_text($path, undef);
+ # TEST
isa_ok($stream, 'SVN::Stream', '$txn->root->apply_text');
print $stream $text;
close $stream;
}
$txn->commit;
+# TEST
cmp_ok($fs->youngest_rev, '==', 1, 'revision increased');
my $root = $fs->revision_root($fs->youngest_rev);
+# TEST
cmp_ok($root->check_path($path), '==', $SVN::Node::file, 'check_path');
+# TEST
ok(!$root->is_dir($path), 'is_dir');
+# TEST
ok($root->is_file($path), 'is_file');
{
my $stream = $root->file_contents($path);
local $/;
+ # TEST
is(<$stream>, $text, 'content verified');
+ # TEST
is($root->file_md5_checksum($path), 'dd2314129f81675e95b940ff94ddc935',
'md5 verified');
}
+# TEST
cmp_ok($root->file_length($path), '==', length($text), 'file_length');
# Revision properties
+# TEST
isa_ok($fs->revision_proplist(1), 'HASH', 'revision_proplist: object');
+# TEST
is($fs->revision_prop(1, 'not:exists'), undef, 'revision_prop: nonexistent');
+# TEST
like($fs->revision_prop(1, 'svn:date'), qr/^\d+-\d+-\d+T\d+:\d+:\d+\.\d+Z$/,
'revision_prop: svn:date');
@@ -108,12 +127,15 @@ SKIP: {
or die "error making hook script '$script_filename' executable: $!";
$fs->change_rev_prop(1, 'test-prop', 'foo');
+ # TEST
is($fs->revision_prop(1, 'test-prop'), 'foo', 'change_rev_prop');
$fs->change_rev_prop(1, 'test-prop', undef);
+ # TEST
is($fs->revision_prop(1, 'test-prop'), undef, 'change_rev_prop: deleted');
$fs->change_rev_prop(1, 'binary-prop', $BINARY_DATA);
+ # TEST
is($fs->revision_prop(1, 'binary-prop'), $BINARY_DATA,
'change_rev_prop with binary data');
}
diff --git a/subversion/bindings/swig/perl/native/t/3client.t b/subversion/bindings/swig/perl/native/t/3client.t
index 4591af9..4a97f38 100644
--- a/subversion/bindings/swig/perl/native/t/3client.t
+++ b/subversion/bindings/swig/perl/native/t/3client.t
@@ -20,7 +20,7 @@
#
#
-use Test::More tests => 119;
+use Test::More tests => 297;
use strict;
# shut up about variables that are only used once.
@@ -28,9 +28,13 @@ use strict;
# by the bindings but not elsewhere in perl space.
no warnings 'once';
+# TEST
use_ok('SVN::Core');
+# TEST
use_ok('SVN::Repos');
+# TEST
use_ok('SVN::Client');
+# TEST
use_ok('SVN::Wc'); # needed for status
use File::Spec::Functions;
use File::Temp qw(tempdir);
@@ -46,6 +50,11 @@ my $reposurl = 'file://' . (substr($repospath,0,1) ne '/' ? '/' : '')
my $wcpath = catdir($testpath,'wc');
my $importpath = catdir($testpath,'import');
+# Use internal style paths on Windows
+$reposurl =~ s/\\/\//g;
+$wcpath =~ s/\\/\//g;
+$importpath =~ s/\\/\//g;
+
# track current rev ourselves to test against
my $current_rev = 0;
@@ -53,121 +62,245 @@ my $current_rev = 0;
$SVN::Error::handler = undef;
# Get username we are running as
-my $username = getpwuid($>);
+my $username;
+if ($^O eq 'MSWin32') {
+ $username = getlogin();
+} else {
+ $username = getpwuid($>) || getlogin();
+}
# This is ugly to create the test repo with SVN::Repos, but
# it seems to be the most reliable way.
+# TEST
ok(SVN::Repos::create("$repospath", undef, undef, undef, undef),
"create repository at $repospath");
my ($ctx) = SVN::Client->new;
+# TEST
isa_ok($ctx,'SVN::Client','Client Object');
my $uuid_from_url = $ctx->uuid_from_url($reposurl);
+# TEST
ok($uuid_from_url,'Valid return from uuid_from_url method form');
# test non method invocation passing a SVN::Client
+# TEST
ok(SVN::Client::uuid_from_url($reposurl,$ctx),
'Valid return from uuid_from_url function form with SVN::Client object');
# test non method invocation passing a _p_svn_client_ctx_t
+# TEST
ok(SVN::Client::uuid_from_url($reposurl,$ctx->{'ctx'}),
'Valid return from uuid_from_url function form with _p_svn_client_ctx object');
my ($ci_dir1) = $ctx->mkdir(["$reposurl/dir1"]);
+# TEST
isa_ok($ci_dir1,'_p_svn_client_commit_info_t');
$current_rev++;
+# TEST
is($ci_dir1->revision,$current_rev,"commit info revision equals $current_rev");
+my ($ci_dir2) = $ctx->mkdir2(["$reposurl/dir2"]);
+# TEST
+isa_ok($ci_dir2,'_p_svn_commit_info_t');
+$current_rev++;
+# TEST
+is($ci_dir2->revision,$current_rev,"commit info revision equals $current_rev");
+
+my ($ci_dir3) = $ctx->mkdir3(["$reposurl/dir3"],0,undef);
+# TEST
+isa_ok($ci_dir3,'_p_svn_commit_info_t');
+$current_rev++;
+# TEST
+is($ci_dir3->revision,$current_rev,"commit info revision equals $current_rev");
+
+# TEST
+is($ctx->mkdir4(["$reposurl/dir4"],0,undef,sub {
+ my ($commit_info) = @_;
+
+ # TEST
+ isa_ok($commit_info,'_p_svn_commit_info_t','commit_info type check');
+
+ # TEST
+ is($commit_info->revision(),$current_rev + 1, 'commit info revision');
+
+ # TEST
+ like($commit_info->date(),
+ qr/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{6}Z$/,
+ 'commit info date');
+
+ # TEST
+ is($commit_info->post_commit_err(),undef,'commit info post_commit_error');
+
+ # TEST
+ is($commit_info->repos_root(),$reposurl,'commit info repos_root');
+ }),
+ undef,'Returned undef from mkdir4 operation.');
+$current_rev++;
my ($rpgval,$rpgrev) = $ctx->revprop_get('svn:author',$reposurl,$current_rev);
+# TEST
is($rpgval,$username,'svn:author set to expected username from revprop_get');
+# TEST
is($rpgrev,$current_rev,'Returned revnum of current rev from revprop_get');
-SKIP: {
- skip 'Difficult to test on Win32', 3 if $^O eq 'MSWin32';
-
+if ($^O eq 'MSWin32') {
+ # TEST
+ ok(open(NEW, ">$repospath/hooks/pre-revprop-change.bat"),
+ 'Open pre-revprop-change hook for writing');
+ # TEST
+ ok(print(NEW 'exit 0'), 'Print to hook');
+ # TEST
+ ok(close(NEW), 'Close hook');
+} else {
+ # TEST
ok(rename("$repospath/hooks/pre-revprop-change.tmpl",
"$repospath/hooks/pre-revprop-change"),
'Rename pre-revprop-change hook');
+ # TEST
ok(chmod(0700,"$repospath/hooks/pre-revprop-change"),
'Change permissions on pre-revprop-change hook');
-
- my ($rps_rev) = $ctx->revprop_set('svn:log','mkdir dir1',
- $reposurl, $current_rev, 0);
- is($rps_rev,$current_rev,
- 'Returned revnum of current rev from revprop_set');
-
+ # TEST
+ is(1, 1, '-')
}
+my ($rps_rev) = $ctx->revprop_set('svn:log','mkdir dir1',
+ $reposurl, $current_rev, 0);
+# TEST
+is($rps_rev,$current_rev,
+ 'Returned revnum of current rev from revprop_set');
my ($rph, $rplrev) = $ctx->revprop_list($reposurl,$current_rev);
+# TEST
isa_ok($rph,'HASH','Returned hash reference form revprop_list');
+# TEST
is($rplrev,$current_rev,'Returned current rev from revprop_list');
+# TEST
is($rph->{'svn:author'},$username,
'svn:author is expected user from revprop_list');
-if ($^O eq 'MSWin32') {
- # we skip the log change test on win32 so we have to test
- # for a different var here
- is($rph->{'svn:log'},'Make dir1',
- 'svn:log is expected value from revprop_list');
-} else {
- is($rph->{'svn:log'},'mkdir dir1',
- 'svn:log is expected value from revprop_list');
-}
+# TEST
+is($rph->{'svn:log'},'mkdir dir1',
+ 'svn:log is expected value from revprop_list');
+
+# TEST
ok($rph->{'svn:date'},'svn:date is set from revprop_list');
+# TEST
is($ctx->checkout($reposurl,$wcpath,'HEAD',1),$current_rev,
'Returned current rev from checkout');
+# TEST
+is($ctx->checkout2($reposurl,$wcpath . '2',undef,'HEAD',1,0),$current_rev,
+ 'Returned current rev from checkout2');
+
+# TEST
+is($ctx->checkout3($reposurl,$wcpath . '3',undef,'HEAD',$SVN::Depth::infinity,
+ 0,0),$current_rev, 'Returned current rev from checkout3');
+
+# TEST
is(SVN::Client::url_from_path($wcpath),$reposurl,
"Returned $reposurl from url_from_path");
+# TEST
ok(open(NEW, ">$wcpath/dir1/new"),'Open new file for writing');
+# TEST
ok(print(NEW 'addtest'), 'Print to new file');
+# TEST
ok(close(NEW),'Close new file');
# no return means success
+# TEST
is($ctx->add("$wcpath/dir1/new",0),undef,
'Returned undef from add schedule operation');
+# TEST
+ok(open(NEW2, ">$wcpath/dir1/new2"),'Open new2 file for writing');
+# TEST
+ok(print(NEW2 'addtest2'), 'Print to new2 file');
+# TEST
+ok(close(NEW2),'Close new2 file');
+
+# no return means success
+# TEST
+is($ctx->add2("$wcpath/dir1/new2",0,0),undef,
+ 'Returned undef from add2 schedule operation');
+
+# TEST
+ok(open(NEW3, ">$wcpath/dir1/new3"),'Open new3 file for writing');
+# TEST
+ok(print(NEW3 'addtest3'), 'Print to new3 file');
+# TEST
+ok(close(NEW3),'Close new3 file');
+
+# no return means success
+# TEST
+is($ctx->add3("$wcpath/dir1/new3",0,0,0),undef,
+ 'Returned undef from add3 schedule operation');
+
+# TEST
+ok(open(NEW4, ">$wcpath/dir1/new4"),'Open new4 file for writing');
+# TEST
+ok(print(NEW4 'addtest4'), 'Print to new4 file');
+# TEST
+ok(close(NEW4),'Close new4 file');
+
+# no return means success
+# TEST
+is($ctx->add4("$wcpath/dir1/new4",$SVN::Depth::empty,0,0,0),undef,
+ 'Returned undef from add4 schedule operation');
+
+
# test the log_msg callback
$ctx->log_msg(
sub
{
my ($log_msg,$tmp_file,$commit_items,$pool) = @_;
+ # TEST
isa_ok($log_msg,'SCALAR','log_msg param to callback is a SCALAR');
+ # TEST
isa_ok($tmp_file,'SCALAR','tmp_file param to callback is a SCALAR');
+ # TEST
isa_ok($commit_items,'ARRAY',
'commit_items param to callback is a SCALAR');
+ # TEST
isa_ok($pool,'_p_apr_pool_t',
'pool param to callback is a _p_apr_pool_t');
my $commit_item = shift @$commit_items;
+ # TEST
isa_ok($commit_item,'_p_svn_client_commit_item3_t',
'commit_item element is a _p_svn_client_commit_item3_t');
+ # TEST
is($commit_item->path(),"$wcpath/dir1/new",
"commit_item has proper path for committed file");
+ # TEST
is($commit_item->kind(),$SVN::Node::file,
"kind() shows the node as a file");
+ # TEST
is($commit_item->url(),"$reposurl/dir1/new",
'URL matches our repos url');
# revision is INVALID because the commit has not happened yet
# and this is not a copy
+ # TEST
is($commit_item->revision(),$SVN::Core::INVALID_REVNUM,
'Revision is INVALID since commit has not happened yet');
+ # TEST
is($commit_item->copyfrom_url(),undef,
'copyfrom_url is undef since file is not a copy');
+ # TEST
is($commit_item->state_flags(),$SVN::Client::COMMIT_ITEM_ADD |
$SVN::Client::COMMIT_ITEM_TEXT_MODS,
'state_flags are ADD and TEXT_MODS');
my $prop_changes = $commit_item->incoming_prop_changes();
+ # TEST
isa_ok($prop_changes, 'ARRAY',
'incoming_prop_changes returns an ARRAY');
+ # TEST
is(scalar(@$prop_changes), 0,
'No elements in the incoming_prop_changes array because ' .
' we did not make any');
$prop_changes = $commit_item->outgoing_prop_changes();
+ # TEST
is($prop_changes, undef,
'No outgoing_prop_changes array because we did not create one');
$$log_msg = 'Add new';
@@ -176,23 +309,30 @@ $ctx->log_msg(
my ($ci_commit1) = $ctx->commit($wcpath,0);
+# TEST
isa_ok($ci_commit1,'_p_svn_client_commit_info_t',
'Commit returns a _p_svn_client_commit_info');
$current_rev++;
+# TEST
is($ci_commit1->revision,$current_rev,
"commit info revision equals $current_rev");
# get rid of log_msg callback
+# TEST
is($ctx->log_msg(undef),undef,
'Clearing the log_msg callback works');
# test info() on WC
+# TEST
is($ctx->info("$wcpath/dir1/new", undef, 'WORKING',
sub
{
my($infopath,$svn_info_t,$pool) = @_;
+ # TEST
is($infopath,"new",'path passed to receiver is same as WC');
+ # TEST
isa_ok($svn_info_t,'_p_svn_info_t');
+ # TEST
isa_ok($pool,'_p_apr_pool_t',
'pool param is _p_apr_pool_t');
}, 0),
@@ -200,75 +340,623 @@ is($ctx->info("$wcpath/dir1/new", undef, 'WORKING',
'info should return undef');
my $svn_error = $ctx->info("$wcpath/dir1/newxyz", undef, 'WORKING', sub {}, 0);
+# TEST
isa_ok($svn_error, '_p_svn_error_t',
'info should return _p_svn_error_t for a nonexistent file');
$svn_error->clear(); #don't leak this
# test getting the log
+
+sub test_log_message_receiver {
+ my ($changed_paths,$revision,
+ $author,$date,$message,$pool) = @_;
+ # TEST
+ isa_ok($changed_paths,'HASH',
+ 'changed_paths param is a HASH');
+ # TEST
+ isa_ok($changed_paths->{'/dir1/new'},
+ '_p_svn_log_changed_path_t',
+ 'Hash value is a _p_svn_log_changed_path_t');
+ # TEST
+ is($changed_paths->{'/dir1/new'}->action(),'A',
+ 'action returns A for add');
+ # TEST
+ is($changed_paths->{'/dir1/new'}->copyfrom_path(),undef,
+ 'copyfrom_path returns undef as it is not a copy');
+ # TEST
+ is($changed_paths->{'/dir1/new'}->copyfrom_rev(),
+ $SVN::Core::INVALID_REVNUM,
+ 'copyfrom_rev is set to INVALID as it is not a copy');
+ # TEST
+ is($revision,$current_rev,
+ 'revision param matches current rev');
+ # TEST
+ is($author,$username,
+ 'author param matches expected username');
+ # TEST
+ ok($date,'date param is defined');
+ # TEST
+ is($message,'Add new',
+ 'message param is the expected value');
+ # TEST
+ isa_ok($pool,'_p_apr_pool_t',
+ 'pool param is _p_apr_pool_t');
+}
+
+# TEST log range $current_rev:$current_rev
is($ctx->log("$reposurl/dir1/new",$current_rev,$current_rev,1,0,
- sub
- {
- my ($changed_paths,$revision,
- $author,$date,$message,$pool) = @_;
- isa_ok($changed_paths,'HASH',
- 'changed_paths param is a HASH');
- isa_ok($changed_paths->{'/dir1/new'},
- '_p_svn_log_changed_path_t',
- 'Hash value is a _p_svn_log_changed_path_t');
- is($changed_paths->{'/dir1/new'}->action(),'A',
- 'action returns A for add');
- is($changed_paths->{'/dir1/new'}->copyfrom_path(),undef,
- 'copyfrom_path returns undef as it is not a copy');
- is($changed_paths->{'/dir1/new'}->copyfrom_rev(),
- $SVN::Core::INVALID_REVNUM,
- 'copyfrom_rev is set to INVALID as it is not a copy');
- is($revision,$current_rev,
- 'revision param matches current rev');
- is($author,$username,
- 'author param matches expected username');
- ok($date,'date param is defined');
- is($message,'Add new',
- 'message param is the expected value');
- isa_ok($pool,'_p_apr_pool_t',
- 'pool param is _p_apr_pool_t');
- }),
+ \&test_log_message_receiver),
undef,
'log returns undef');
+# TEST log2 range $current_rev:0 limit=1
+is($ctx->log2("$reposurl/dir1/new",$current_rev,0,1,1,0,
+ \&test_log_message_receiver),
+ undef,
+ 'log2 returns undef');
+# TEST log3 range $current_rev:0 limit=1
+is($ctx->log3("$reposurl/dir1/new",'HEAD',$current_rev,0,1,1,0,
+ \&test_log_message_receiver),
+ undef,
+ 'log3 returns undef');
+
+my @new_paths = qw( dir1/new dir1/new2 dir1/new3 dir1/new4 );
+$ctx->log3([ $reposurl, @new_paths ],
+ 'HEAD',$current_rev,0,1,1,0, sub {
+ my ($changed_paths,$revision,$author,$date,$message,$pool) = @_;
+ # TEST
+ is_deeply([sort keys %$changed_paths],
+ [sort map { "/$_" } @new_paths],
+ "changed_paths for multiple targets");
+});
+
+sub get_full_log {
+ my ($start, $end) = @_;
+ my @log;
+ $ctx->log($reposurl, $start, $end, 1, 0, sub {
+ my ($changed_paths, $revision, $author, $date, $msg, undef) = @_;
+ # "unpack" the values of the $changed_paths hash
+ # (_p_svn_log_changed_path_t objects) so that
+ # we can use is_deeply() to compare results
+ my %hash;
+ while (my ($path, $changed) = each %$changed_paths) {
+ foreach (qw( action copyfrom_path copyfrom_rev )) {
+ $hash{$path}{$_} = $changed->$_()
+ }
+ }
+ push @log, [ \%hash, $revision, $author, $date, $msg ];
+ });
+ return \@log;
+}
+
+# TEST
+my $full_log = get_full_log('HEAD',1);
+is(scalar @$full_log, $current_rev, "history up to 'HEAD'");
+
+# TEST
+my $opt_revision_head = SVN::_Core::new_svn_opt_revision_t();
+$opt_revision_head->kind($SVN::Core::opt_revision_head);
+is_deeply(get_full_log($opt_revision_head,1), # got
+ $full_log, # expected
+ "history up to svn_opt_revision_t of kind head");
+
+# TEST
+is_deeply(get_full_log($current_rev,1), # got
+ $full_log, # expected
+ "history up to number $current_rev");
+
+# TEST
+my $opt_revision_number = SVN::_Core::new_svn_opt_revision_t();
+$opt_revision_number->kind($SVN::Core::opt_revision_number);
+$opt_revision_number->value->number($current_rev);
+is_deeply(get_full_log($opt_revision_number,1), # got
+ $full_log, # expected
+ "history up to svn_opt_revision_t of kind number and value $current_rev");
+
+sub test_log_entry_receiver {
+ my ($log_entry,$pool) = @_;
+ # TEST
+ isa_ok($log_entry, '_p_svn_log_entry_t',
+ 'log_entry param');
+ # TEST
+ isa_ok($pool,'_p_apr_pool_t',
+ 'pool param');
+ # TEST
+ is($log_entry->revision,$current_rev,
+ 'log_entry->revision matches current rev');
+
+ my $revprops = $log_entry->revprops;
+ # TEST
+ isa_ok($revprops,'HASH',
+ 'log_entry->revprops');
+ # TEST
+ is($revprops->{"svn:author"},$username,
+ 'svn:author revprop matches expected username');
+ # TEST
+ ok($revprops->{"svn:date"},'svn:date revprop is defined');
+ # TEST
+ is($revprops->{"svn:log"},'Add new',
+ 'svn:log revprop is the expected value');
+
+ my $changed_paths = $log_entry->changed_paths2;
+ # TEST
+ isa_ok($changed_paths,'HASH',
+ 'log_entry->changed_paths2');
+ # TEST
+ isa_ok($changed_paths->{'/dir1/new'},
+ '_p_svn_log_changed_path2_t',
+ 'log_entry->changed_paths2 value');
+ # TEST
+ is($changed_paths->{'/dir1/new'}->action(),'A',
+ 'action returns A for add');
+ # TEST
+ is($changed_paths->{'/dir1/new'}->node_kind(),$SVN::Node::file,
+ 'node_kind returns $SVN::Node::file');
+ # TEST
+ is($changed_paths->{'/dir1/new'}->text_modified(),$SVN::Tristate::true,
+ 'text_modified returns true');
+ # TEST
+ is($changed_paths->{'/dir1/new'}->props_modified(),$SVN::Tristate::false,
+ 'props_modified returns false');
+ # TEST
+ is($changed_paths->{'/dir1/new'}->copyfrom_path(),undef,
+ 'copyfrom_path returns undef as it is not a copy');
+ # TEST
+ is($changed_paths->{'/dir1/new'}->copyfrom_rev(),
+ $SVN::Core::INVALID_REVNUM,
+ 'copyfrom_rev is set to INVALID as it is not a copy');
+}
+# TEST
+is($ctx->log4("$reposurl/dir1/new",
+ 'HEAD',$current_rev,0,1, # peg rev, start rev, end rev, limit
+ 1,1,0, # discover_changed_paths, strict_node_history, include_merged_revisions
+ undef, # revprops
+ \&test_log_entry_receiver),
+ undef,
+ 'log4 returns undef');
+
+# TEST
+is($ctx->log5("$reposurl/dir1/new",
+ 'HEAD',[$current_rev,0],1, # peg rev, rev ranges, limit
+ 1,1,0, # discover_changed_paths, strict_node_history, include_merged_revisions
+ undef, # revprops
+ \&test_log_entry_receiver),
+ undef,
+ 'log5 returns undef');
+
+# test the different forms to specify revision ranges
+sub get_revs {
+ my ($rev_ranges) = @_;
+ my @revs;
+ $ctx->log5($reposurl, 'HEAD', $rev_ranges, 0, 0, 0, 0, undef, sub {
+ my ($log_entry,$pool) = @_;
+ push @revs, $log_entry->revision;
+ });
+ return \@revs;
+}
+
+my $top = SVN::_Core::new_svn_opt_revision_range_t();
+$top->start('HEAD');
+$top->end('HEAD');
+my $bottom = SVN::_Core::new_svn_opt_revision_range_t();
+$bottom->start(1);
+$bottom->end($current_rev-1);
+
+# TEST
+is_deeply(get_revs($top),
+ [ $current_rev ], 'single svn_opt_revision_range_t');
+# TEST
+is_deeply(get_revs([$top]),
+ [ $current_rev ], 'list of svn_opt_revision_range_t');
+# TEST
+is_deeply(get_revs(['HEAD', 'HEAD']),
+ [ $current_rev ], 'single [start, end]');
+# TEST
+is_deeply(get_revs([['HEAD', 'HEAD']]),
+ [ $current_rev ], 'list of [start, end]');
+# TEST
+is_deeply(get_revs([$current_rev, $current_rev]),
+ [ $current_rev ], 'single [start, end]');
+# TEST
+is_deeply(get_revs([[$current_rev, $current_rev]]),
+ [ $current_rev ], 'list of [start, end]');
+# TEST
+is_deeply(get_revs([1, 'HEAD']),
+ [ 1..$current_rev ], 'single [start, end]');
+# TEST
+is_deeply(get_revs([[1, 'HEAD']]),
+ [ 1..$current_rev ], 'list of [start, end]');
+# TEST
+is_deeply(get_revs([1, $opt_revision_head]),
+ [ 1..$current_rev ], 'single [start, end]');
+# TEST
+is_deeply(get_revs([[1, $opt_revision_head]]),
+ [ 1..$current_rev ], 'list of [start, end]');
+# TEST
+is_deeply(get_revs($bottom),
+ [ 1..$current_rev-1 ], 'single svn_opt_revision_range_t');
+# TEST
+is_deeply(get_revs([$bottom]),
+ [ 1..$current_rev-1 ], 'list of svn_opt_revision_range_t');
+# TEST
+is_deeply(get_revs([1, $current_rev-1]),
+ [ 1..$current_rev-1 ], 'single [start, end]');
+# TEST
+is_deeply(get_revs([[1, $current_rev-1]]),
+ [ 1..$current_rev-1 ], 'list of [start, end]');
+# TEST
+is_deeply(get_revs([[1, $current_rev-1], $top]),
+ [ 1..$current_rev ], 'mixed list of ranges');
+# TEST
+is_deeply(get_revs([$bottom, ['HEAD', 'HEAD']]),
+ [ 1..$current_rev ], 'mixed list of ranges');
+# TEST
+is_deeply(get_revs([$bottom, $top]),
+ [ 1..$current_rev ], 'mixed list of ranges');
+
+
+# TEST
is($ctx->update($wcpath,'HEAD',1),$current_rev,
'Return from update is the current rev');
+my $update2_result = $ctx->update2([$wcpath],'HEAD',1,0);
+# TEST
+isa_ok($update2_result,'ARRAY','update2 returns a list');
+# TEST
+is(scalar(@$update2_result),1,'update2 member count');
+# TEST
+is($update2_result->[0],$current_rev,'return from update2 is the current rev');
+
+my $update3_result = $ctx->update3([$wcpath],'HEAD',$SVN::Depth::infinity,
+ 0,0,0);
+# TEST
+isa_ok($update3_result,'ARRAY','update3 returns a list');
+# TEST
+is(scalar(@$update3_result),1,'update3 member count');
+# TEST
+is($update3_result->[0],$current_rev,'return from update3 is the current rev');
+
+my $update4_result = $ctx->update4([$wcpath],'HEAD',$SVN::Depth::infinity,
+ 0,0,0,1,0);
+# TEST
+isa_ok($update4_result,'ARRAY','update4 returns a list');
+# TEST
+is(scalar(@$update4_result),1,'update4 member count');
+# TEST
+is($update4_result->[0],$current_rev,'return from update4 is the current rev');
+
# no return so we should get undef as the result
# we will get a _p_svn_error_t if there is an error.
+# TEST
is($ctx->propset('perl-test','test-val',"$wcpath/dir1",0),undef,
'propset on a working copy path returns undef');
my ($ph) = $ctx->propget('perl-test',"$wcpath/dir1",undef,0);
+# TEST
isa_ok($ph,'HASH','propget returns a hash');
+# TEST
is($ph->{"$wcpath/dir1"},'test-val','perl-test property has the correct value');
# No revnum for the working copy so we should get INVALID_REVNUM
+# TEST
is($ctx->status($wcpath, undef, sub {
my ($path,$wc_status) = @_;
+ # TEST
is($path,"$wcpath/dir1",
'path param to status callback is' .
- 'the correct path.');
+ ' the correct path.');
+ # TEST
isa_ok($wc_status,'_p_svn_wc_status_t',
- 'wc_stats param is a' .
- ' _p_svn_wc_status_t');
+ 'wc_stats param');
+ # TEST
+ is($wc_status->text_status(),
+ $SVN::Wc::Status::normal,
+ 'text_status param to status' .
+ ' callback');
+ # TEST
is($wc_status->prop_status(),
- $SVN::Wc::status_modified,
- 'prop_status is status_modified');
- # TODO test the rest of the members
+ $SVN::Wc::Status::modified,
+ 'prop_status param to status' .
+ ' callback');
+ # TEST
+ is($wc_status->locked(), 0,
+ 'locked param to status callback');
+ # TEST
+ is($wc_status->copied(), 0,
+ 'copied param to status callback');
+ # TEST
+ is($wc_status->switched(), 0,
+ 'switched param to status callback');
+ # TEST
+ is($wc_status->repos_text_status(),
+ $SVN::Wc::Status::none,
+ 'repos_text_status param to status' .
+ ' callback');
+ # TEST
+ is($wc_status->repos_prop_status(),
+ $SVN::Wc::Status::none,
+ 'repos_prop_status param to status' .
+ ' callback');
},
1, 0, 0, 0),
$SVN::Core::INVALID_REVNUM,
'status returns INVALID_REVNUM when run against a working copy');
+# No revnum for the working copy so we should get INVALID_REVNUM
+# TEST
+is($ctx->status2($wcpath, undef, sub {
+ my ($path,$wc_status) = @_;
+ # TEST
+ is($path,"$wcpath/dir1",
+ 'path param to status2 callback');
+ # TEST
+ isa_ok($wc_status,'_p_svn_wc_status2_t',
+ 'wc_stats param to the status2' .
+ ' callback');
+ # TEST
+ is($wc_status->text_status(),
+ $SVN::Wc::Status::normal,
+ 'text_status param to status2' .
+ ' callback');
+ # TEST
+ is($wc_status->prop_status(),
+ $SVN::Wc::Status::modified,
+ 'prop_status param to status2' .
+ ' callback');
+ # TEST
+ is($wc_status->locked(), 0,
+ 'locked param to status2' .
+ ' callback');
+ # TEST
+ is($wc_status->copied(), 0,
+ 'copied param to status2' .
+ ' callback');
+ # TEST
+ is($wc_status->switched(), 0,
+ 'switched param to status2' .
+ ' callback');
+ # TEST
+ is($wc_status->repos_text_status(),
+ $SVN::Wc::Status::none,
+ 'repos_text_status param to status2' .
+ ' callback');
+ # TEST
+ is($wc_status->repos_prop_status(),
+ $SVN::Wc::Status::none,
+ 'repos_prop_status param to status2' .
+ ' callback');
+ # TEST
+ is($wc_status->repos_lock(), undef,
+ 'repos_lock param to status2 callback');
+ # TEST
+ is($wc_status->url(),"$reposurl/dir1",
+ 'url param to status2 callback');
+ # TEST
+ is($wc_status->ood_last_cmt_rev(),
+ $SVN::Core::INVALID_REVNUM,
+ 'ood_last_cmt_rev to status2' .
+ ' callback');
+ # TEST
+ is($wc_status->ood_last_cmt_date(), 0,
+ 'ood_last_cmt_date to status2' .
+ ' callback');
+ # TEST
+ is($wc_status->ood_kind(),
+ $SVN::Node::none,
+ 'ood_kind param to status2 callback');
+ # TEST
+ is($wc_status->ood_last_cmt_author(),
+ undef,
+ 'ood_last_cmt_author to status2' .
+ ' callback');
+ # TEST
+ is($wc_status->tree_conflict(), undef,
+ 'tree_conflict to status2 callback');
+ # TEST
+ is($wc_status->file_external(), 0,
+ 'file_external to status2 callback');
+ # TEST
+ is($wc_status->pristine_text_status(),
+ $SVN::Wc::Status::normal,
+ 'pristine_text_status param to' .
+ ' status2 callback');
+ # TEST
+ is($wc_status->pristine_prop_status(),
+ $SVN::Wc::Status::modified,
+ 'pristine_prop_status param to' .
+ ' status2 callback');
+ },
+ 1, 0, 0, 0, 0),
+ $SVN::Core::INVALID_REVNUM,
+ 'status2 returns INVALID_REVNUM when run against a working copy');
+
+# No revnum for the working copy so we should get INVALID_REVNUM
+# TEST
+is($ctx->status3($wcpath, undef, sub {
+ my ($path,$wc_status) = @_;
+ # TEST
+ is($path,"$wcpath/dir1",
+ 'path param to status3 callback');
+ # TEST
+ isa_ok($wc_status,'_p_svn_wc_status2_t',
+ 'wc_stats param to the status3' .
+ ' callback');
+ # TEST
+ is($wc_status->text_status(),
+ $SVN::Wc::Status::normal,
+ 'text_status param to status3' .
+ ' callback');
+ # TEST
+ is($wc_status->prop_status(),
+ $SVN::Wc::Status::modified,
+ 'prop_status param to status3' .
+ ' callback');
+ # TEST
+ is($wc_status->locked(), 0,
+ 'locked param to status3' .
+ ' callback');
+ # TEST
+ is($wc_status->copied(), 0,
+ 'copied param to status3' .
+ ' callback');
+ # TEST
+ is($wc_status->switched(), 0,
+ 'switched param to status3' .
+ ' callback');
+ # TEST
+ is($wc_status->repos_text_status(),
+ $SVN::Wc::Status::none,
+ 'repos_text_status param to status3' .
+ ' callback');
+ # TEST
+ is($wc_status->repos_prop_status(),
+ $SVN::Wc::Status::none,
+ 'repos_prop_status param to status3' .
+ ' callback');
+ # TEST
+ is($wc_status->repos_lock(), undef,
+ 'repos_lock param to status3 callback');
+ # TEST
+ is($wc_status->url(),"$reposurl/dir1",
+ 'url param to status3 callback');
+ # TEST
+ is($wc_status->ood_last_cmt_rev(),
+ $SVN::Core::INVALID_REVNUM,
+ 'ood_last_cmt_rev to status3' .
+ ' callback');
+ # TEST
+ is($wc_status->ood_last_cmt_date(), 0,
+ 'ood_last_cmt_date to status3' .
+ ' callback');
+ # TEST
+ is($wc_status->ood_kind(),
+ $SVN::Node::none,
+ 'ood_kind param to status3 callback');
+ # TEST
+ is($wc_status->ood_last_cmt_author(),
+ undef,
+ 'ood_last_cmt_author to status3' .
+ ' callback');
+ # TEST
+ is($wc_status->tree_conflict(), undef,
+ 'tree_conflict to status3 callback');
+ # TEST
+ is($wc_status->file_external(), 0,
+ 'file_external to status3 callback');
+ # TEST
+ is($wc_status->pristine_text_status(),
+ $SVN::Wc::Status::normal,
+ 'pristine_text_status param to' .
+ ' status3 callback');
+ # TEST
+ is($wc_status->pristine_prop_status(),
+ $SVN::Wc::Status::modified,
+ 'pristine_prop_status param to' .
+ ' status3 callback');
+ },
+ $SVN::Depth::infinity, 0, 0, 0, 0, undef),
+ $SVN::Core::INVALID_REVNUM,
+ 'status3 returns INVALID_REVNUM when run against a working copy');
+
+# No revnum for the working copy so we should get INVALID_REVNUM
+# TEST
+is($ctx->status4($wcpath, undef, sub {
+ my ($path,$wc_status, $pool) = @_;
+ # TEST
+ is($path,"$wcpath/dir1",
+ 'path param to status4 callback');
+ # TEST
+ isa_ok($wc_status,'_p_svn_wc_status2_t',
+ 'wc_stats param to the status4' .
+ ' callback');
+ # TEST
+ is($wc_status->text_status(),
+ $SVN::Wc::Status::normal,
+ 'text_status param to status4' .
+ ' callback');
+ # TEST
+ is($wc_status->prop_status(),
+ $SVN::Wc::Status::modified,
+ 'prop_status param to status4' .
+ ' callback');
+ # TEST
+ is($wc_status->locked(), 0,
+ 'locked param to status4' .
+ ' callback');
+ # TEST
+ is($wc_status->copied(), 0,
+ 'copied param to status4' .
+ ' callback');
+ # TEST
+ is($wc_status->switched(), 0,
+ 'switched param to status4' .
+ ' callback');
+ # TEST
+ is($wc_status->repos_text_status(),
+ $SVN::Wc::Status::none,
+ 'repos_text_status param to status4' .
+ ' callback');
+ # TEST
+ is($wc_status->repos_prop_status(),
+ $SVN::Wc::Status::none,
+ 'repos_prop_status param to status4' .
+ ' callback');
+ # TEST
+ is($wc_status->repos_lock(), undef,
+ 'repos_lock param to status4 callback');
+ # TEST
+ is($wc_status->url(),"$reposurl/dir1",
+ 'url param to status4 callback');
+ # TEST
+ is($wc_status->ood_last_cmt_rev(),
+ $SVN::Core::INVALID_REVNUM,
+ 'ood_last_cmt_rev to status4' .
+ ' callback');
+ # TEST
+ is($wc_status->ood_last_cmt_date(), 0,
+ 'ood_last_cmt_date to status4' .
+ ' callback');
+ # TEST
+ is($wc_status->ood_kind(),
+ $SVN::Node::none,
+ 'ood_kind param to status4 callback');
+ # TEST
+ is($wc_status->ood_last_cmt_author(),
+ undef,
+ 'ood_last_cmt_author to status4' .
+ ' callback');
+ # TEST
+ is($wc_status->tree_conflict(), undef,
+ 'tree_conflict to status4 callback');
+ # TEST
+ is($wc_status->file_external(), 0,
+ 'file_external to status4 callback');
+ # TEST
+ is($wc_status->pristine_text_status(),
+ $SVN::Wc::Status::normal,
+ 'pristine_text_status param to' .
+ ' status4 callback');
+ # TEST
+ is($wc_status->pristine_prop_status(),
+ $SVN::Wc::Status::modified,
+ 'pristine_prop_status param to' .
+ ' status4 callback');
+ # TEST
+ isa_ok($pool, '_p_apr_pool_t',
+ 'pool param to status4' .
+ ' callback');
+ },
+ $SVN::Depth::infinity, 0, 0, 0, 0, undef),
+ $SVN::Core::INVALID_REVNUM,
+ 'status4 returns INVALID_REVNUM when run against a working copy');
+
+
my ($ci_commit2) = $ctx->commit($wcpath,0);
+# TEST
isa_ok($ci_commit2,'_p_svn_client_commit_info_t',
'commit returns a _p_svn_client_commit_info_t');
$current_rev++;
+# TEST
is($ci_commit2->revision(),$current_rev,
"commit info revision equals $current_rev");
@@ -276,111 +964,158 @@ my $dir1_rev = $current_rev;
my($pl) = $ctx->proplist($reposurl,$current_rev,1);
+# TEST
isa_ok($pl,'ARRAY','proplist returns an ARRAY');
+# TEST
isa_ok($pl->[0], '_p_svn_client_proplist_item_t',
- 'array element is a _p_svn_client_proplist_item_t');
+ 'proplist array element');
+# TEST
is($pl->[0]->node_name(),"$reposurl/dir1",
'node_name is the expected value');
my $plh = $pl->[0]->prop_hash();
+# TEST
isa_ok($plh,'HASH',
'prop_hash returns a HASH');
+# TEST
is_deeply($plh, {'perl-test' => 'test-val'}, 'test prop list prop_hash values');
# add a dir to test update
-my ($ci_dir2) = $ctx->mkdir(["$reposurl/dir2"]);
-isa_ok($ci_dir2,'_p_svn_client_commit_info_t',
+my ($ci_dir5) = $ctx->mkdir(["$reposurl/dir5"]);
+# TEST
+isa_ok($ci_dir5,'_p_svn_client_commit_info_t',
'mkdir returns a _p_svn_client_commit_info_t');
$current_rev++;
-is($ci_dir2->revision(),$current_rev,
+# TEST
+is($ci_dir5->revision(),$current_rev,
"commit info revision equals $current_rev");
# Use explicit revnum to test that instead of just HEAD.
+# TEST
is($ctx->update($wcpath,$current_rev,$current_rev),$current_rev,
'update returns current rev');
# commit action against a repo returns undef
+# TEST
is($ctx->delete(["$wcpath/dir2"],0),undef,
'delete returns undef');
# no return means success
+# TEST
is($ctx->revert($wcpath,1),undef,
'revert returns undef');
my ($ci_copy) = $ctx->copy("$reposurl/dir1",2,"$reposurl/dir3");
+# TEST
isa_ok($ci_copy,'_p_svn_client_commit_info_t',
'copy returns a _p_svn_client_commitn_info_t when run against repo');
$current_rev++;
+# TEST
is($ci_copy->revision,$current_rev,
"commit info revision equals $current_rev");
+# TEST
ok(mkdir($importpath),'Make import path dir');
+# TEST
ok(open(FOO, ">$importpath/foo"),'Open file for writing in import path dir');
+# TEST
ok(print(FOO 'foobar'),'Print to the file in import path dir');
+# TEST
ok(close(FOO),'Close file in import path dir');
my ($ci_import) = $ctx->import($importpath,$reposurl,0);
+# TEST
isa_ok($ci_import,'_p_svn_client_commit_info_t',
'Import returns _p_svn_client_commint_info_t');
$current_rev++;
+# TEST
is($ci_import->revision,$current_rev,
"commit info revision equals $current_rev");
+# TEST
is($ctx->blame("$reposurl/foo",'HEAD','HEAD', sub {
my ($line_no,$rev,$author,
$date, $line,$pool) = @_;
+ # TEST
is($line_no,0,
'line_no param is zero');
+ # TEST
is($rev,$current_rev,
'rev param is current rev');
+ # TEST
is($author,$username,
'author param is expected' .
'value');
+ # TEST
ok($date,'date is defined');
- is($line,'foobar',
- 'line is expected value');
+ if ($^O eq 'MSWin32') {
+ #### Why two \r-s?
+ # TEST
+ is($line,"foobar\r\r",
+ 'line is expected value');
+ } else {
+ # TEST
+ is($line,'foobar',
+ 'line is expected value');
+ }
+ # TEST
isa_ok($pool,'_p_apr_pool_t',
- 'pool param is ' .
- '_p_apr_pool_t');
+ 'pool param');
}),
undef,
'blame returns undef');
+# TEST
ok(open(CAT, "+>$testpath/cattest"),'open file for cat output');
+# TEST
is($ctx->cat(\*CAT, "$reposurl/foo", 'HEAD'),undef,
'cat returns undef');
+# TEST
ok(seek(CAT,0,0),
'seek the beginning of the cat file');
+# TEST
is(readline(*CAT),'foobar',
'read the first line of the cat file');
+# TEST
ok(close(CAT),'close cat file');
# the string around the $current_rev exists to expose a past
# bug. In the past we did not accept values that simply
# had not been converted to a number yet.
my ($dirents) = $ctx->ls($reposurl,"$current_rev", 1);
+# TEST
isa_ok($dirents, 'HASH','ls returns a HASH');
+# TEST
isa_ok($dirents->{'dir1'},'_p_svn_dirent_t',
- 'hash value is a _p_svn_dirent_t');
+ 'dirents hash value');
+# TEST
is($dirents->{'dir1'}->kind(),$SVN::Core::node_dir,
'kind() returns a dir node');
+# TEST
is($dirents->{'dir1'}->size(),0,
'size() returns 0 for a directory');
+# TEST
is($dirents->{'dir1'}->has_props(),1,
'has_props() returns true');
+# TEST
is($dirents->{'dir1'}->created_rev(),$dir1_rev,
'created_rev() returns expected rev');
+# TEST
ok($dirents->{'dir1'}->time(),
'time is defined');
#diag(scalar(localtime($dirents->{'dir1'}->time() / 1000000)));
+# TEST
is($dirents->{'dir1'}->last_author(),$username,
'last_auth() returns expected username');
# test removing a property
+# TEST
is($ctx->propset('perl-test', undef, "$wcpath/dir1", 0),undef,
'propset returns undef');
my ($ph2) = $ctx->propget('perl-test', "$wcpath/dir1", 'WORKING', 0);
+# TEST
isa_ok($ph2,'HASH','propget returns HASH');
+# TEST
is(scalar(keys %$ph2),0,
'No properties after deleting a property');
@@ -443,6 +1178,7 @@ SKIP: {
my $oldauthbaton = $ctx->auth();
+ # TEST
isa_ok($ctx->auth(SVN::Client::get_simple_prompt_provider(
sub { simple_prompt(@_,'x') },2),
SVN::Client::get_ssl_server_trust_prompt_provider(
@@ -457,9 +1193,11 @@ SKIP: {
# if this doesn't work we will get an svn_error_t so by
# getting a hash we know it worked.
my ($dirents) = $ctx->ls('https://localhost/svn/test','HEAD',1);
+ # TEST
isa_ok($dirents,'HASH','ls returns a HASH');
# return the auth baton to its original setting
+ # TEST
isa_ok($ctx->auth($oldauthbaton),'_p_svn_auth_baton_t',
'Successfully set auth_baton back to old value');
}
@@ -475,8 +1213,32 @@ my @providers = @{SVN::Core::auth_get_platform_specific_client_providers(undef,
foreach my $p (@providers) {
$ok &= defined($p) && $p->isa('_p_svn_auth_provider_object_t');
}
+# TEST
ok($ok, 'svn_auth_get_platform_specific_client_providers returns _p_svn_auth_provider_object_t\'s');
+SKIP: {
+ skip 'Gnome-Keyring support not compiled in', 1
+ unless defined &SVN::Core::auth_set_gnome_keyring_unlock_prompt_func;
+
+ # Test setting gnome_keyring prompt function. This just sets the proper
+ # attributes in the auth baton and checks the return value (which should
+ # be a reference to the passed function reference). This does not
+ # actually try the prompt, since that would require setting up a
+ # gnome-keyring-daemon...
+ sub gnome_keyring_unlock_prompt {
+ my $keyring_name = shift;
+ my $pool = shift;
+
+ 'test';
+ }
+
+ my $callback = \&gnome_keyring_unlock_prompt;
+ my $result = SVN::Core::auth_set_gnome_keyring_unlock_prompt_func(
+ $ctx->auth(), $callback);
+ # TEST
+ is(${$result}, $callback, 'auth_set_gnome_keyring_unlock_prompt_func result equals paramter');
+}
+
END {
diag('cleanup');
rmtree($testpath);
diff --git a/subversion/bindings/swig/perl/native/t/4pool.t b/subversion/bindings/swig/perl/native/t/4pool.t
index dabb947..4ad6f03 100644
--- a/subversion/bindings/swig/perl/native/t/4pool.t
+++ b/subversion/bindings/swig/perl/native/t/4pool.t
@@ -55,6 +55,7 @@ my $repospath = tempdir('svn-perl-test-XXXXXX', TMPDIR => 1, CLEANUP => 1);
my $repos;
+# TEST
ok($repos = SVN::Repos::create("$repospath", undef, undef, undef, undef),
"create repository at $repospath");
@@ -62,19 +63,23 @@ my $fs = $repos->fs;
my $pool = SVN::Pool->new_default;
+# TEST
is_pool_default($pool, 'default pool');
{
my $spool = SVN::Pool->new_default_sub;
+ # TEST
is_pool_default($spool, 'lexical default pool default');
}
+# TEST
is_pool_default($pool, 'lexical default pool destroyed');
my $root = $fs->revision_root(0);
my $txn = $fs->begin_txn(0);
+# TEST
$txn->root->make_dir('trunk');
$txn->commit;
@@ -86,6 +91,7 @@ SVN::Repos::dir_delta($root, '', '',
undef, 1, 1, 0, 1);
+# TEST
is_pool_default($pool, 'default pool from c calls destroyed');
END {
diff --git a/subversion/bindings/swig/perl/native/t/5delta-compat.t b/subversion/bindings/swig/perl/native/t/5delta-compat.t
index 3ec473d..f11f125 100644
--- a/subversion/bindings/swig/perl/native/t/5delta-compat.t
+++ b/subversion/bindings/swig/perl/native/t/5delta-compat.t
@@ -33,11 +33,13 @@ open my $aresult, '>', \$result;
my $txstream = SVN::TxDelta::new($source, $target);
+# TEST
isa_ok($txstream, '_p_svn_txdelta_stream_t');
open my $asource, '<', \$srctext;
my $handle = [SVN::TxDelta::apply($asource, $aresult, undef, undef)];
SVN::TxDelta::send_txstream($txstream, @$handle);
+# TEST
is($result, $tgttext, 'delta self test');
diff --git a/subversion/bindings/swig/perl/native/t/5delta.t b/subversion/bindings/swig/perl/native/t/5delta.t
index e955de5..a4f7877 100644
--- a/subversion/bindings/swig/perl/native/t/5delta.t
+++ b/subversion/bindings/swig/perl/native/t/5delta.t
@@ -33,12 +33,15 @@ open my $aresult, '>', \$result;
my $txstream = SVN::TxDelta::new($source, $target);
+# TEST
isa_ok($txstream, '_p_svn_txdelta_stream_t');
open my $asource, '<', \$srctext;
my ($md5, @handle) = SVN::TxDelta::apply($asource, $aresult, undef);
SVN::TxDelta::send_txstream($txstream, @handle);
+# TEST
is($result, $tgttext, 'delta self test');
+# TEST
is("$md5", 'a22b3dadcbddac48d2f1eae3ec5fb86a', 'md5 matched');
diff --git a/subversion/bindings/swig/perl/native/t/6ra.t b/subversion/bindings/swig/perl/native/t/6ra.t
index 25772d0..083ea86 100644
--- a/subversion/bindings/swig/perl/native/t/6ra.t
+++ b/subversion/bindings/swig/perl/native/t/6ra.t
@@ -36,6 +36,7 @@ my $BINARY_DATA = "foo\0\n\t\x1F\x7F\x80\xA0\x{FF}bar";
my $repospath = tempdir('svn-perl-test-XXXXXX', TMPDIR => 1, CLEANUP => 1);
my $repos;
+# TEST
ok($repos = SVN::Repos::create("$repospath", undef, undef, undef, undef),
"create repository at $repospath");
@@ -61,25 +62,36 @@ $uri = "file://$uri";
{
my $ra = SVN::Ra->new($uri);
+ # TEST
isa_ok($ra, 'SVN::Ra', 'create with only one argument');
}
my $ra = SVN::Ra->new(url => $uri);
+# TEST
isa_ok($ra, 'SVN::Ra', 'create with hash param');
+# TEST
is($ra->get_uuid, $fs->get_uuid, 'get_uuid');
+# TEST
is($ra->get_latest_revnum, 2, 'get_latest_revnum');
+# TEST
is($ra->get_repos_root, $uri, 'get_repos_root');
# get_dir
{
my ($dirents, $revnum, $props) = $ra->get_dir('trunk',
$SVN::Core::INVALID_REVNUM);
+ # TEST
isa_ok($dirents, 'HASH', 'get_dir: dirents');
+ # TEST
is(scalar(keys %$dirents), 2, 'get_dir: num dirents');
+ # TEST+2
isa_ok($dirents->{$_}, '_p_svn_dirent_t', "get_dir: dirent $_")
for qw( filea fileb );
+ # TEST
is($revnum, $ra->get_latest_revnum, 'get_dir: revnum');
+ # TEST
isa_ok($props, 'HASH', 'get_dir: props');
+ # TEST
is($props->{'dir-prop'}, 'frob', 'get_dir: property dir-prop');
}
@@ -87,15 +99,22 @@ is($ra->get_repos_root, $uri, 'get_repos_root');
{
my ($revnum, $props) = $ra->get_file('trunk/filea',
$SVN::Core::INVALID_REVNUM, undef);
+ # TEST
is($revnum, $ra->get_latest_revnum, 'get_file: revnum');
+ # TEST
isa_ok($props, 'HASH', 'get_file: props');
+ # TEST
ok(!exists $props->{'test-prop'}, 'get_file: property test-prop deleted');
+ # TEST
is($props->{'binary-prop'}, $BINARY_DATA, 'get_file: property binary-prop');
}
# Revision properties
+# TEST
isa_ok($ra->rev_proplist(1), 'HASH', 'rev_proplist: object');
+# TEST
is($ra->rev_prop(1, 'nonexistent'), undef, 'rev_prop: nonexistent');
+# TEST
like($ra->rev_prop(1, 'svn:date'), qr/^\d+-\d+-\d+T\d+:\d+:\d+\.\d+Z$/,
'rev_prop: svn:date');
@@ -115,51 +134,71 @@ SKIP: {
or die "error making hook script '$script_filename' executable: $!";
$ra->change_rev_prop(1, 'test-prop', 'foo');
+ # TEST
is($ra->rev_prop(1, 'test-prop'), 'foo', 'change_rev_prop');
$ra->change_rev_prop(1, 'test-prop', undef);
+ # TEST
is($ra->rev_prop(1, 'test-prop'), undef, 'change_rev_prop: deleted');
$ra->change_rev_prop(1, 'binary-prop', $BINARY_DATA);
+ # TEST
is($ra->rev_prop(1, 'binary-prop'), $BINARY_DATA,
'change_rev_prop with binary data');
}
# Information about nodes in the filesystem.
+# TEST
is($ra->check_path('trunk', 1), $SVN::Node::dir, 'check_path');
{
my $dirent = $ra->stat('trunk', 1);
+ # TEST
isa_ok($dirent, '_p_svn_dirent_t', 'stat dir: dirent object');
+ # TEST
is($dirent->kind, $SVN::Node::dir, 'stat dir: kind');
- is($dirent->size, 0, 'stat dir: size');
+ # TEST
+ is($dirent->size, -1, 'stat dir: size');
+ # TEST
is($dirent->created_rev, 1, 'stat dir: created_rev');
+ # TEST
ok($dirent->has_props, 'stat dir: has_props');
$dirent = $ra->stat('trunk/fileb', 1);
+ # TEST
is($dirent->kind, $SVN::Node::file, 'stat file: kind');
+ # TEST
ok(!$dirent->has_props, 'stat file: has_props');
}
# do_update
my $ed = MockEditor->new;
my $reporter = $ra->do_update(2, '', 1, $ed);
+# TEST
isa_ok($reporter, 'SVN::Ra::Reporter');
$reporter->set_path('', 0, 1, undef);
$reporter->finish_report;
+# TEST
is($ed->{_base_revnum}, 0, 'do_update: base_revision');
+# TEST
is($ed->{_target_revnum}, 2, 'do_update: target_revnum');
+# TEST
is($ed->{trunk}{props}{'dir-prop'}, 'frob', 'do_update: dir-prop');
+# TEST
ok(!exists $ed->{'trunk/filea'}{props}{'test-prop'},
'do_update: deleted property');
+# TEST
is($ed->{'trunk/filea'}{props}{'binary-prop'}, $BINARY_DATA,
'do_update: binary-prop');
# replay
$ed = MockEditor->new;
$ra->replay(1, 0, 1, $ed);
+# TEST
is($ed->{trunk}{type}, 'dir', "replay: got trunk");
+# TEST
is($ed->{trunk}{props}{'dir-prop'}, 'frob', 'replay: dir-prop');
+# TEST
is($ed->{'trunk/filea'}{props}{'binary-prop'}, $BINARY_DATA,
'replay: binary-prop');
diff --git a/subversion/bindings/swig/perl/native/t/7editor.t b/subversion/bindings/swig/perl/native/t/7editor.t
index 9a050e2..4e4c703 100644
--- a/subversion/bindings/swig/perl/native/t/7editor.t
+++ b/subversion/bindings/swig/perl/native/t/7editor.t
@@ -62,6 +62,7 @@ SVN::Repos::dir_delta($fs->revision_root(0), '/', '',
MyEditor->new(crap => bless {}, 'something'),
undef, 1, 1, 0, 0);
};
+# TEST
ok($main::something_destroyed, 'editor');
package something;
diff --git a/subversion/bindings/swig/perl/native/t/8lock.t b/subversion/bindings/swig/perl/native/t/8lock.t
index 4de01b9..4830d85 100644
--- a/subversion/bindings/swig/perl/native/t/8lock.t
+++ b/subversion/bindings/swig/perl/native/t/8lock.t
@@ -37,12 +37,14 @@ my $repospath = tempdir('svn-perl-test-XXXXXX', TMPDIR => 1, CLEANUP => 1);
my $repos;
+# TEST
ok($repos = SVN::Repos::create("$repospath", undef, undef, undef, undef),
"create repository at $repospath");
my $fs = $repos->fs;
my $acc = SVN::Fs::create_access('foo');
+# TEST
is($acc->get_username, 'foo');
$fs->set_access($acc);
@@ -58,11 +60,15 @@ my $token = "opaquelocktoken:notauuid-$$";
$fs->lock('/testfile', $token, 'we hate software', 0, 0, $fs->youngest_rev, 0);
+# TEST
ok(my $lock = $fs->get_lock('/testfile'));
+# TEST
is($lock->token, $token);
+# TEST
is($lock->owner, 'foo');
$acc = SVN::Fs::create_access('fnord');
+# TEST
is($acc->get_username, 'fnord');
$fs->set_access($acc);
@@ -70,11 +76,13 @@ eval {
$fs->lock('/testfile', $token, 'we hate software', 0, 0, $fs->youngest_rev, 0);
};
+# TEST
like($@, qr/already locked/);
eval {
$fs->unlock('/testfile', 'software', 0)
};
+# TEST
like($@, qr/no such lock/);
$fs->unlock('/testfile', 'software', 1);
diff --git a/subversion/bindings/swig/perl/native/t/9wc.t b/subversion/bindings/swig/perl/native/t/9wc.t
new file mode 100644
index 0000000..257b1d2
--- /dev/null
+++ b/subversion/bindings/swig/perl/native/t/9wc.t
@@ -0,0 +1,84 @@
+#!/usr/bin/perl
+#
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+#
+
+use strict;
+use Test::More tests => 19;
+use Scalar::Util;
+
+# shut up about variables that are only used once.
+# these come from constants and variables used
+# by the bindings but not elsewhere in perl space.
+no warnings 'once';
+
+# TEST
+use_ok('SVN::Core');
+# TEST
+use_ok('SVN::Wc');
+
+my $external_desc = <<'END';
+http://svn.example.com/repos/project1 project1
+-r6 ^/repos/project2@3 "Project 2"
+END
+
+# Run parse_externals_description3()
+# TEST
+my ($externals) = SVN::Wc::parse_externals_description3("/fake/path",
+ $external_desc, 1);
+isa_ok($externals, 'ARRAY', 'parse_externals_description3 returns array ref');
+
+# Check the first member of the returned array.
+# TEST
+isa_ok($externals->[0], '_p_svn_wc_external_item2_t');
+# TEST
+is($externals->[0]->target_dir(), 'project1');
+# TEST
+is($externals->[0]->url(), 'http://svn.example.com/repos/project1');
+# TEST
+isa_ok($externals->[0]->revision(), '_p_svn_opt_revision_t');
+# TEST
+is($externals->[0]->revision->kind, $SVN::Core::opt_revision_head);
+# TEST
+isa_ok($externals->[0]->peg_revision(), '_p_svn_opt_revision_t');
+# TEST
+is($externals->[0]->peg_revision()->kind(),
+ $SVN::Core::opt_revision_head);
+
+# Check the second member
+# TEST
+isa_ok($externals->[1], '_p_svn_wc_external_item2_t');
+# TEST
+is($externals->[1]->target_dir(), 'Project 2');
+# TEST
+is($externals->[1]->url(), '^/repos/project2');
+# TEST
+isa_ok($externals->[1]->revision(), '_p_svn_opt_revision_t');
+# TEST
+is($externals->[1]->revision()->kind(), $SVN::Core::opt_revision_number);
+# TEST
+is($externals->[1]->revision()->value()->number(), 6);
+# TEST
+isa_ok($externals->[1]->peg_revision(), '_p_svn_opt_revision_t');
+# TEST
+is($externals->[1]->peg_revision()->kind(), $SVN::Core::opt_revision_number);
+# TEST
+is($externals->[1]->peg_revision()->value()->number(), 3);
+
diff --git a/subversion/bindings/swig/proxy/mod_authz_svn_h.swg b/subversion/bindings/swig/proxy/mod_authz_svn_h.swg
index 55d1a50..7e77f89 100644
--- a/subversion/bindings/swig/proxy/mod_authz_svn_h.swg
+++ b/subversion/bindings/swig/proxy/mod_authz_svn_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for mod_authz_svn.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/mod_dav_svn_h.swg b/subversion/bindings/swig/proxy/mod_dav_svn_h.swg
index ed516cf..a95efeb 100644
--- a/subversion/bindings/swig/proxy/mod_dav_svn_h.swg
+++ b/subversion/bindings/swig/proxy/mod_dav_svn_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for mod_dav_svn.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/perlrun.swg b/subversion/bindings/swig/proxy/perlrun.swg
index d898656..ebc4fec 100644
--- a/subversion/bindings/swig/proxy/perlrun.swg
+++ b/subversion/bindings/swig/proxy/perlrun.swg
@@ -40,14 +40,14 @@
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Perl_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Perl_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Perl_SetModule(pointer)
/* Error manipulation */
#define SWIG_ErrorType(code) SWIG_Perl_ErrorType(code)
-#define SWIG_Error(code, msg) sv_setpvf(GvSV(PL_errgv),"%s %s\n", SWIG_ErrorType(code), msg)
+#define SWIG_Error(code, msg) sv_setpvf(get_sv("@", GV_ADD), "%s %s", SWIG_ErrorType(code), msg)
#define SWIG_fail goto fail
/* Perl-specific SWIG API */
@@ -141,8 +141,6 @@ typedef int (*SwigMagicFunc)(struct interpreter *, SV *, MAGIC *);
#endif /* MULTIPLICITY */
#endif /* PERL_OBJECT */
-/* Workaround for bug in perl 5.6.x croak and earlier */
-#if (PERL_VERSION < 8)
# ifdef PERL_OBJECT
# define SWIG_croak_null() SWIG_Perl_croak_null(pPerl)
static void SWIG_Perl_croak_null(CPerlObj *pPerl)
@@ -150,17 +148,16 @@ static void SWIG_Perl_croak_null(CPerlObj *pPerl)
static void SWIG_croak_null()
# endif
{
- SV *err=ERRSV;
+ SV *err = get_sv("@", GV_ADD);
# if (PERL_VERSION < 6)
croak("%_", err);
# else
- if (SvOK(err) && !SvROK(err)) croak("%_", err);
- croak(Nullch);
+ if (sv_isobject(err))
+ croak(0);
+ else
+ croak("%s", SvPV_nolen(err));
# endif
}
-#else
-# define SWIG_croak_null() croak(Nullch)
-#endif
/*
@@ -212,8 +209,7 @@ SWIG_TypeProxyCheck(const char *c, swig_type_info *ty) {
if (ty) {
swig_cast_info *iter = ty->cast;
while (iter) {
- if ( (!iter->type->clientdata && (strcmp(iter->type->name, c) == 0)) ||
- (iter->type->clientdata && (strcmp((char*)iter->type->clientdata, c) == 0)) ) {
+ if (strcmp(SWIG_Perl_TypeProxyName(iter->type), c) == 0) {
if (iter == ty->cast)
return iter;
/* Move iter to the top of the linked list */
@@ -344,7 +340,7 @@ SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, swig_type_info *t, i
SV *obj=newSV(0);
HV *hash=newHV();
HV *stash;
- sv_setref_pv(obj, (char *) SWIG_Perl_TypeProxyName(t), ptr);
+ sv_setref_pv(obj, SWIG_Perl_TypeProxyName(t), ptr);
stash=SvSTASH(SvRV(obj));
if (flags & SWIG_POINTER_OWN) {
HV *hv;
@@ -362,7 +358,7 @@ SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, swig_type_info *t, i
sv_bless(sv, stash);
}
else {
- sv_setref_pv(sv, (char *) SWIG_Perl_TypeProxyName(t), ptr);
+ sv_setref_pv(sv, SWIG_Perl_TypeProxyName(t), ptr);
}
}
@@ -453,19 +449,23 @@ typedef struct {
/* Magic variable code */
#ifndef PERL_OBJECT
-#define swig_create_magic(s,a,b,c) _swig_create_magic(s,a,b,c)
- #ifndef MULTIPLICITY
- SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *))
- #else
- SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(struct interpreter*, SV *, MAGIC *), int (*get)(struct interpreter*, SV *,MAGIC *))
- #endif
+# ifdef __cplusplus
+# define swig_create_magic(s,a,b,c) _swig_create_magic(s,const_cast<char*>(a),b,c)
+# else
+# define swig_create_magic(s,a,b,c) _swig_create_magic(s,(char*)(a),b,c)
+# endif
+# ifndef MULTIPLICITY
+SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *))
+# else
+SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(struct interpreter*, SV *, MAGIC *), int (*get)(struct interpreter*, SV *,MAGIC *))
+# endif
#else
# define swig_create_magic(s,a,b,c) _swig_create_magic(pPerl,s,a,b,c)
SWIGRUNTIME void _swig_create_magic(CPerlObj *pPerl, SV *sv, const char *name, int (CPerlObj::*set)(SV *, MAGIC *), int (CPerlObj::*get)(SV *, MAGIC *))
#endif
{
MAGIC *mg;
- sv_magic(sv,sv,'U',(char *) name,strlen(name));
+ sv_magic(sv,sv,'U',name,strlen(name));
mg = mg_find(sv,'U');
mg->mg_virtual = (MGVTBL *) malloc(sizeof(MGVTBL));
mg->mg_virtual->svt_get = (SwigMagicFunc) get;
@@ -477,7 +477,7 @@ SWIGRUNTIME void _swig_create_magic(CPerlObj *pPerl, SV *sv, const char *name, i
SWIGRUNTIME swig_module_info *
-SWIG_Perl_GetModule(void) {
+SWIG_Perl_GetModule(void *SWIGUNUSEDPARM(clientdata)) {
static void *type_pointer = (void *)0;
SV *pointer;
diff --git a/subversion/bindings/swig/proxy/pyrun.swg b/subversion/bindings/swig/proxy/pyrun.swg
index d730a2d..3585e7a 100644
--- a/subversion/bindings/swig/proxy/pyrun.swg
+++ b/subversion/bindings/swig/proxy/pyrun.swg
@@ -45,7 +45,7 @@
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Python_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Python_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Python_SetModule(pointer)
#define SWIG_NewClientData(obj) SwigPyClientData_New(obj)
@@ -71,7 +71,7 @@ SWIG_Python_SetErrorObj(PyObject *errtype, PyObject *obj) {
SWIGINTERN void
SWIG_Python_SetErrorMsg(PyObject *errtype, const char *msg) {
SWIG_PYTHON_THREAD_BEGIN_BLOCK;
- PyErr_SetString(errtype, (char *) msg);
+ PyErr_SetString(errtype, msg);
SWIG_PYTHON_THREAD_END_BLOCK;
}
@@ -90,7 +90,11 @@ SwigPyBuiltin_AddPublicSymbol(PyObject *seq, const char *key) {
SWIGINTERN void
SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *name, PyObject *obj) {
+#if PY_VERSION_HEX < 0x02030000
PyDict_SetItemString(d, (char *)name, obj);
+#else
+ PyDict_SetItemString(d, name, obj);
+#endif
Py_DECREF(obj);
if (public_interface)
SwigPyBuiltin_AddPublicSymbol(public_interface, name);
@@ -100,7 +104,11 @@ SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *nam
SWIGINTERN void
SWIG_Python_SetConstant(PyObject *d, const char *name, PyObject *obj) {
+#if PY_VERSION_HEX < 0x02030000
PyDict_SetItemString(d, (char *)name, obj);
+#else
+ PyDict_SetItemString(d, name, obj);
+#endif
Py_DECREF(obj);
}
@@ -421,7 +429,7 @@ SwigPyObject_repr(SwigPyObject *v, PyObject *args)
#endif
{
const char *name = SWIG_TypePrettyName(v->ty);
- PyObject *repr = SWIG_Python_str_FromFormat("<Swig Object of type '%s' at %p>", name, (void *)v);
+ PyObject *repr = SWIG_Python_str_FromFormat("<Swig Object of type '%s' at %p>", (name ? name : "unknown"), (void *)v);
if (v->next) {
# ifdef METH_NOARGS
PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next);
@@ -625,8 +633,10 @@ SwigPyObject_own(PyObject *v, PyObject *args)
PyObject *val = 0;
#if (PY_VERSION_HEX < 0x02020000)
if (!PyArg_ParseTuple(args,(char *)"|O:own",&val))
-#else
+#elif (PY_VERSION_HEX < 0x02050000)
if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val))
+#else
+ if (!PyArg_UnpackTuple(args, "own", 0, 1, &val))
#endif
{
return NULL;
@@ -1321,23 +1331,29 @@ SWIG_Python_NewShadowInstance(SwigPyClientData *data, PyObject *swig_this)
} else {
#if PY_VERSION_HEX >= 0x03000000
inst = PyBaseObject_Type.tp_new((PyTypeObject*) data->newargs, Py_None, Py_None);
- PyObject_SetAttr(inst, SWIG_This(), swig_this);
- Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG;
+ if (inst) {
+ PyObject_SetAttr(inst, SWIG_This(), swig_this);
+ Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG;
+ }
#else
PyObject *dict = PyDict_New();
- PyDict_SetItem(dict, SWIG_This(), swig_this);
- inst = PyInstance_NewRaw(data->newargs, dict);
- Py_DECREF(dict);
+ if (dict) {
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ inst = PyInstance_NewRaw(data->newargs, dict);
+ Py_DECREF(dict);
+ }
#endif
}
return inst;
#else
#if (PY_VERSION_HEX >= 0x02010000)
- PyObject *inst;
+ PyObject *inst = 0;
PyObject *dict = PyDict_New();
- PyDict_SetItem(dict, SWIG_This(), swig_this);
- inst = PyInstance_NewRaw(data->newargs, dict);
- Py_DECREF(dict);
+ if (dict) {
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ inst = PyInstance_NewRaw(data->newargs, dict);
+ Py_DECREF(dict);
+ }
return (PyObject *) inst;
#else
PyInstanceObject *inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type);
@@ -1388,7 +1404,7 @@ SWIG_Python_SetSwigThis(PyObject *inst, PyObject *swig_this)
SWIGINTERN PyObject *
SWIG_Python_InitShadowInstance(PyObject *args) {
PyObject *obj[2];
- if (!SWIG_Python_UnpackTuple(args,(char*)"swiginit", 2, 2, obj)) {
+ if (!SWIG_Python_UnpackTuple(args, "swiginit", 2, 2, obj)) {
return NULL;
} else {
SwigPyObject *sthis = SWIG_Python_GetSwigThis(obj[0]);
@@ -1444,12 +1460,10 @@ SWIG_Python_NewPointerObj(PyObject *self, void *ptr, swig_type_info *type, int f
assert(!(flags & SWIG_BUILTIN_TP_INIT));
robj = SwigPyObject_New(ptr, type, own);
- if (clientdata && !(flags & SWIG_POINTER_NOSHADOW)) {
+ if (robj && clientdata && !(flags & SWIG_POINTER_NOSHADOW)) {
PyObject *inst = SWIG_Python_NewShadowInstance(clientdata, robj);
- if (inst) {
- Py_DECREF(robj);
- robj = inst;
- }
+ Py_DECREF(robj);
+ robj = inst;
}
return robj;
}
@@ -1470,7 +1484,7 @@ void *SWIG_ReturnGlobalTypeList(void *);
#endif
SWIGRUNTIME swig_module_info *
-SWIG_Python_GetModule(void) {
+SWIG_Python_GetModule(void *SWIGUNUSEDPARM(clientdata)) {
static void *type_pointer = (void *)0;
/* first check if module already created */
if (!type_pointer) {
@@ -1596,7 +1610,7 @@ SWIG_Python_TypeQuery(const char *type)
descriptor = (swig_type_info *) PyCObject_AsVoidPtr(obj);
#endif
} else {
- swig_module_info *swig_module = SWIG_Python_GetModule();
+ swig_module_info *swig_module = SWIG_GetModule(0);
descriptor = SWIG_TypeQueryModule(swig_module, swig_module, type);
if (descriptor) {
#ifdef SWIGPY_USE_CAPSULE
@@ -1664,7 +1678,7 @@ SwigPyObject_GetDesc(PyObject *self)
{
SwigPyObject *v = (SwigPyObject *)self;
swig_type_info *ty = v ? v->ty : 0;
- return ty ? ty->str : (char*)"";
+ return ty ? ty->str : "";
}
SWIGRUNTIME void
@@ -1721,6 +1735,7 @@ SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int SWIGUNUSEDPARM(arg
return result;
}
+#ifdef SWIGPYTHON_BUILTIN
SWIGRUNTIME int
SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
PyTypeObject *tp = obj->ob_type;
@@ -1729,15 +1744,15 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
descrsetfunc f;
int res;
-#ifdef Py_USING_UNICODE
+# ifdef Py_USING_UNICODE
if (PyString_Check(name)) {
name = PyUnicode_Decode(PyString_AsString(name), PyString_Size(name), NULL, NULL);
if (!name)
return -1;
} else if (!PyUnicode_Check(name))
-#else
+# else
if (!PyString_Check(name))
-#endif
+# endif
{
PyErr_Format(PyExc_TypeError, "attribute name must be string, not '%.200s'", name->ob_type->tp_name);
return -1;
@@ -1772,6 +1787,7 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
Py_DECREF(name);
return res;
}
+#endif
#ifdef __cplusplus
diff --git a/subversion/bindings/swig/proxy/svn_auth_h.swg b/subversion/bindings/swig/proxy/svn_auth_h.swg
index 96e17d6..dc125da 100644
--- a/subversion/bindings/swig/proxy/svn_auth_h.swg
+++ b/subversion/bindings/swig/proxy/svn_auth_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_auth.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_base64_h.swg b/subversion/bindings/swig/proxy/svn_base64_h.swg
index 465947d..0eaca54 100644
--- a/subversion/bindings/swig/proxy/svn_base64_h.swg
+++ b/subversion/bindings/swig/proxy/svn_base64_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_base64.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_cache_config_h.swg b/subversion/bindings/swig/proxy/svn_cache_config_h.swg
index 30ed789..aed7f7b 100644
--- a/subversion/bindings/swig/proxy/svn_cache_config_h.swg
+++ b/subversion/bindings/swig/proxy/svn_cache_config_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_cache_config.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_checksum_h.swg b/subversion/bindings/swig/proxy/svn_checksum_h.swg
index bb0860a..cb866df 100644
--- a/subversion/bindings/swig/proxy/svn_checksum_h.swg
+++ b/subversion/bindings/swig/proxy/svn_checksum_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_checksum.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_client_h.swg b/subversion/bindings/swig/proxy/svn_client_h.swg
index 799ab88..a11cccc 100644
--- a/subversion/bindings/swig/proxy/svn_client_h.swg
+++ b/subversion/bindings/swig/proxy/svn_client_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_client.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
@@ -8,6 +9,7 @@
/* Callback typemaps */
#ifdef SWIGPYTHON
%apply CALLABLE_CALLBACK {
+ svn_proplist_receiver2_t,
svn_proplist_receiver_t,
svn_client_get_commit_log3_t,
svn_client_get_commit_log2_t,
@@ -16,13 +18,16 @@
svn_client_blame_receiver2_t,
svn_client_blame_receiver_t,
svn_client_diff_summarize_func_t,
+ svn_client_import_filter_func_t,
svn_client_status_func_t,
+ svn_client_list_func2_t,
svn_client_list_func_t,
svn_info_receiver_t,
svn_client_info_receiver2_t,
svn_client_patch_func_t
};
%apply CALLABLE_CALLBACK * {
+ svn_proplist_receiver2_t *,
svn_proplist_receiver_t *,
svn_client_get_commit_log3_t *,
svn_client_get_commit_log2_t *,
@@ -31,7 +36,9 @@
svn_client_blame_receiver2_t *,
svn_client_blame_receiver_t *,
svn_client_diff_summarize_func_t *,
+ svn_client_import_filter_func_t *,
svn_client_status_func_t *,
+ svn_client_list_func2_t *,
svn_client_list_func_t *,
svn_info_receiver_t *,
svn_client_info_receiver2_t *,
@@ -54,6 +61,7 @@
void *conflict_baton,
void *conflict_baton2,
void *commit_baton,
+ void *filter_baton,
void *backwards_compatibility_baton,
void *status_baton,
void *receiver_baton,
@@ -87,6 +95,11 @@
/* Callbacks */
%inline %{
+static svn_error_t * svn_proplist_invoke_receiver2(
+ svn_proplist_receiver2_t _obj, void *baton, const char *path, apr_hash_t *prop_hash, apr_array_header_t *inherited_props, apr_pool_t *scratch_pool) {
+ return _obj(baton, path, prop_hash, inherited_props, scratch_pool);
+}
+
static svn_error_t * svn_proplist_invoke_receiver(
svn_proplist_receiver_t _obj, void *baton, const char *path, apr_hash_t *prop_hash, apr_pool_t *pool) {
return _obj(baton, path, prop_hash, pool);
@@ -127,11 +140,21 @@ static svn_error_t * svn_client_invoke_diff_summarize_func(
return _obj(diff, baton, pool);
}
+static svn_error_t * svn_client_invoke_import_filter_func(
+ svn_client_import_filter_func_t _obj, void *baton, svn_boolean_t *filtered, const char *local_abspath, const svn_io_dirent2_t *dirent, apr_pool_t *scratch_pool) {
+ return _obj(baton, filtered, local_abspath, dirent, scratch_pool);
+}
+
static svn_error_t * svn_client_invoke_status_func(
svn_client_status_func_t _obj, void *baton, const char *path, const svn_client_status_t *status, apr_pool_t *scratch_pool) {
return _obj(baton, path, status, scratch_pool);
}
+static svn_error_t * svn_client_invoke_list_func2(
+ svn_client_list_func2_t _obj, void *baton, const char *path, const svn_dirent_t *dirent, const svn_lock_t *lock, const char *abs_path, const char *external_parent_url, const char *external_target, apr_pool_t *scratch_pool) {
+ return _obj(baton, path, dirent, lock, abs_path, external_parent_url, external_target, scratch_pool);
+}
+
static svn_error_t * svn_client_invoke_list_func(
svn_client_list_func_t _obj, void *baton, const char *path, const svn_dirent_t *dirent, const svn_lock_t *lock, const char *abs_path, apr_pool_t *pool) {
return _obj(baton, path, dirent, lock, abs_path, pool);
@@ -155,6 +178,7 @@ static svn_error_t * svn_client_invoke_patch_func(
%}
#ifdef SWIGPYTHON
+%funcptr_proxy(svn_proplist_receiver2_t, svn_proplist_invoke_receiver2);
%funcptr_proxy(svn_proplist_receiver_t, svn_proplist_invoke_receiver);
%funcptr_proxy(svn_client_get_commit_log3_t, svn_client_invoke_get_commit_log3);
%funcptr_proxy(svn_client_get_commit_log2_t, svn_client_invoke_get_commit_log2);
@@ -163,7 +187,9 @@ static svn_error_t * svn_client_invoke_patch_func(
%funcptr_proxy(svn_client_blame_receiver2_t, svn_client_invoke_blame_receiver2);
%funcptr_proxy(svn_client_blame_receiver_t, svn_client_invoke_blame_receiver);
%funcptr_proxy(svn_client_diff_summarize_func_t, svn_client_invoke_diff_summarize_func);
+%funcptr_proxy(svn_client_import_filter_func_t, svn_client_invoke_import_filter_func);
%funcptr_proxy(svn_client_status_func_t, svn_client_invoke_status_func);
+%funcptr_proxy(svn_client_list_func2_t, svn_client_invoke_list_func2);
%funcptr_proxy(svn_client_list_func_t, svn_client_invoke_list_func);
%funcptr_proxy(svn_info_receiver_t, svn_info_invoke_receiver);
%funcptr_proxy(svn_client_info_receiver2_t, svn_client_invoke_info_receiver2);
diff --git a/subversion/bindings/swig/proxy/svn_cmdline_h.swg b/subversion/bindings/swig/proxy/svn_cmdline_h.swg
index 6f0a95a..7a57e7b 100644
--- a/subversion/bindings/swig/proxy/svn_cmdline_h.swg
+++ b/subversion/bindings/swig/proxy/svn_cmdline_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_cmdline.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_compat_h.swg b/subversion/bindings/swig/proxy/svn_compat_h.swg
index a2aa953..f7c2d81 100644
--- a/subversion/bindings/swig/proxy/svn_compat_h.swg
+++ b/subversion/bindings/swig/proxy/svn_compat_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_compat.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_config_h.swg b/subversion/bindings/swig/proxy/svn_config_h.swg
index 821f134..7b4b50f 100644
--- a/subversion/bindings/swig/proxy/svn_config_h.swg
+++ b/subversion/bindings/swig/proxy/svn_config_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_config.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
@@ -12,20 +13,24 @@
svn_config_section_enumerator_t,
svn_config_section_enumerator2_t,
svn_config_enumerator_t,
- svn_config_enumerator2_t
+ svn_config_enumerator2_t,
+ svn_config_auth_walk_func_t
};
%apply CALLABLE_CALLBACK * {
svn_config_section_enumerator_t *,
svn_config_section_enumerator2_t *,
svn_config_enumerator_t *,
- svn_config_enumerator2_t *
+ svn_config_enumerator2_t *,
+ svn_config_auth_walk_func_t *
};
#endif
/* Baton typemaps */
#ifdef SWIGPYTHON
%apply void *PY_AS_VOID {
- void *baton
+ void *baton,
+ void *cleanup_baton,
+ void *walk_baton
};
#endif
@@ -63,6 +68,11 @@ static svn_boolean_t svn_config_invoke_enumerator2(
return _obj(name, value, baton, pool);
}
+static svn_error_t * svn_config_invoke_auth_walk_func(
+ svn_config_auth_walk_func_t _obj, svn_boolean_t *delete_cred, void *cleanup_baton, const char *cred_kind, const char *realmstring, apr_hash_t *hash, apr_pool_t *scratch_pool) {
+ return _obj(delete_cred, cleanup_baton, cred_kind, realmstring, hash, scratch_pool);
+}
+
%}
#ifdef SWIGPYTHON
@@ -70,5 +80,6 @@ static svn_boolean_t svn_config_invoke_enumerator2(
%funcptr_proxy(svn_config_section_enumerator2_t, svn_config_invoke_section_enumerator2);
%funcptr_proxy(svn_config_enumerator_t, svn_config_invoke_enumerator);
%funcptr_proxy(svn_config_enumerator2_t, svn_config_invoke_enumerator2);
+%funcptr_proxy(svn_config_auth_walk_func_t, svn_config_invoke_auth_walk_func);
#endif
diff --git a/subversion/bindings/swig/proxy/svn_ctype_h.swg b/subversion/bindings/swig/proxy/svn_ctype_h.swg
index 0f3fae0..39f8f9e 100644
--- a/subversion/bindings/swig/proxy/svn_ctype_h.swg
+++ b/subversion/bindings/swig/proxy/svn_ctype_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_ctype.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_dav_h.swg b/subversion/bindings/swig/proxy/svn_dav_h.swg
index 11f1c98..de08e9e 100644
--- a/subversion/bindings/swig/proxy/svn_dav_h.swg
+++ b/subversion/bindings/swig/proxy/svn_dav_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_dav.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_delta_h.swg b/subversion/bindings/swig/proxy/svn_delta_h.swg
index 4a534b5..7e12bdb 100644
--- a/subversion/bindings/swig/proxy/svn_delta_h.swg
+++ b/subversion/bindings/swig/proxy/svn_delta_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_delta.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_diff_h.swg b/subversion/bindings/swig/proxy/svn_diff_h.swg
index 4ebeba8..f4eab90 100644
--- a/subversion/bindings/swig/proxy/svn_diff_h.swg
+++ b/subversion/bindings/swig/proxy/svn_diff_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_diff.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_dirent_uri_h.swg b/subversion/bindings/swig/proxy/svn_dirent_uri_h.swg
index ae14076..c59d298 100644
--- a/subversion/bindings/swig/proxy/svn_dirent_uri_h.swg
+++ b/subversion/bindings/swig/proxy/svn_dirent_uri_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_dirent_uri.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_dso_h.swg b/subversion/bindings/swig/proxy/svn_dso_h.swg
index 85c6e12..5cdafc7 100644
--- a/subversion/bindings/swig/proxy/svn_dso_h.swg
+++ b/subversion/bindings/swig/proxy/svn_dso_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_dso.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_error_codes_h.swg b/subversion/bindings/swig/proxy/svn_error_codes_h.swg
index cdfa7a1..307723a 100644
--- a/subversion/bindings/swig/proxy/svn_error_codes_h.swg
+++ b/subversion/bindings/swig/proxy/svn_error_codes_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_error_codes.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_error_h.swg b/subversion/bindings/swig/proxy/svn_error_h.swg
index d7c20aa..a7352cd 100644
--- a/subversion/bindings/swig/proxy/svn_error_h.swg
+++ b/subversion/bindings/swig/proxy/svn_error_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_error.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_fs_h.swg b/subversion/bindings/swig/proxy/svn_fs_h.swg
index 1fc0f1b..0775f98 100644
--- a/subversion/bindings/swig/proxy/svn_fs_h.swg
+++ b/subversion/bindings/swig/proxy/svn_fs_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_fs.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
@@ -15,11 +16,17 @@
#ifdef SWIGPYTHON
%apply CALLABLE_CALLBACK {
svn_fs_warning_callback_t,
+ svn_fs_progress_notify_func_t,
+ svn_fs_freeze_func_t,
+ svn_fs_process_contents_func_t,
svn_fs_get_locks_callback_t,
svn_fs_pack_notify_t
};
%apply CALLABLE_CALLBACK * {
svn_fs_warning_callback_t *,
+ svn_fs_progress_notify_func_t *,
+ svn_fs_freeze_func_t *,
+ svn_fs_process_contents_func_t *,
svn_fs_get_locks_callback_t *,
svn_fs_pack_notify_t *
};
@@ -31,6 +38,7 @@
void *baton,
void *warning_baton,
void *cancel_baton,
+ void *freeze_baton,
void *get_locks_baton,
void *notify_baton
};
@@ -63,6 +71,21 @@ static void svn_fs_invoke_warning_callback(
_obj(baton, err);
}
+static void svn_fs_invoke_progress_notify_func(
+ svn_fs_progress_notify_func_t _obj, svn_revnum_t revision, void *baton, apr_pool_t *pool) {
+ _obj(revision, baton, pool);
+}
+
+static svn_error_t * svn_fs_invoke_freeze_func(
+ svn_fs_freeze_func_t _obj, void *baton, apr_pool_t *pool) {
+ return _obj(baton, pool);
+}
+
+static svn_error_t * svn_fs_invoke_process_contents_func(
+ svn_fs_process_contents_func_t _obj, const unsigned char *contents, apr_size_t len, void *baton, apr_pool_t *scratch_pool) {
+ return _obj(contents, len, baton, scratch_pool);
+}
+
static svn_error_t * svn_fs_invoke_get_locks_callback(
svn_fs_get_locks_callback_t _obj, void *baton, svn_lock_t *lock, apr_pool_t *pool) {
return _obj(baton, lock, pool);
@@ -77,6 +100,9 @@ static svn_error_t * svn_fs_invoke_pack_notify(
#ifdef SWIGPYTHON
%funcptr_proxy(svn_fs_warning_callback_t, svn_fs_invoke_warning_callback);
+%funcptr_proxy(svn_fs_progress_notify_func_t, svn_fs_invoke_progress_notify_func);
+%funcptr_proxy(svn_fs_freeze_func_t, svn_fs_invoke_freeze_func);
+%funcptr_proxy(svn_fs_process_contents_func_t, svn_fs_invoke_process_contents_func);
%funcptr_proxy(svn_fs_get_locks_callback_t, svn_fs_invoke_get_locks_callback);
%funcptr_proxy(svn_fs_pack_notify_t, svn_fs_invoke_pack_notify);
diff --git a/subversion/bindings/swig/proxy/svn_hash_h.swg b/subversion/bindings/swig/proxy/svn_hash_h.swg
index 5d231c3..e7ad174 100644
--- a/subversion/bindings/swig/proxy/svn_hash_h.swg
+++ b/subversion/bindings/swig/proxy/svn_hash_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_hash.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_io_h.swg b/subversion/bindings/swig/proxy/svn_io_h.swg
index d220ec8..961104c 100644
--- a/subversion/bindings/swig/proxy/svn_io_h.swg
+++ b/subversion/bindings/swig/proxy/svn_io_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_io.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
@@ -16,6 +17,7 @@
svn_close_fn_t,
svn_stream_mark_fn_t,
svn_stream_seek_fn_t,
+ svn_stream_lazyopen_func_t,
svn_io_walk_func_t
};
%apply CALLABLE_CALLBACK * {
@@ -25,6 +27,7 @@
svn_close_fn_t *,
svn_stream_mark_fn_t *,
svn_stream_seek_fn_t *,
+ svn_stream_lazyopen_func_t *,
svn_io_walk_func_t *
};
#endif
@@ -34,6 +37,7 @@
%apply void *PY_AS_VOID {
void *cancel_baton,
void *baton,
+ void *open_baton,
void *walk_baton
};
#endif
@@ -85,6 +89,11 @@ static svn_error_t * svn_stream_invoke_seek_fn(
return _obj(baton, mark);
}
+static svn_error_t * svn_stream_invoke_lazyopen_func(
+ svn_stream_lazyopen_func_t _obj, svn_stream_t **stream, void *baton, apr_pool_t *result_pool, apr_pool_t *scratch_pool) {
+ return _obj(stream, baton, result_pool, scratch_pool);
+}
+
static svn_error_t * svn_io_invoke_walk_func(
svn_io_walk_func_t _obj, void *baton, const char *path, const apr_finfo_t *finfo, apr_pool_t *pool) {
return _obj(baton, path, finfo, pool);
@@ -99,6 +108,7 @@ static svn_error_t * svn_io_invoke_walk_func(
%funcptr_proxy(svn_close_fn_t, svn_close_invoke_fn);
%funcptr_proxy(svn_stream_mark_fn_t, svn_stream_invoke_mark_fn);
%funcptr_proxy(svn_stream_seek_fn_t, svn_stream_invoke_seek_fn);
+%funcptr_proxy(svn_stream_lazyopen_func_t, svn_stream_invoke_lazyopen_func);
%funcptr_proxy(svn_io_walk_func_t, svn_io_invoke_walk_func);
#endif
diff --git a/subversion/bindings/swig/proxy/svn_iter_h.swg b/subversion/bindings/swig/proxy/svn_iter_h.swg
index 04dc6a9..b51c597 100644
--- a/subversion/bindings/swig/proxy/svn_iter_h.swg
+++ b/subversion/bindings/swig/proxy/svn_iter_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_iter.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_md5_h.swg b/subversion/bindings/swig/proxy/svn_md5_h.swg
index a80268b..47e35c2 100644
--- a/subversion/bindings/swig/proxy/svn_md5_h.swg
+++ b/subversion/bindings/swig/proxy/svn_md5_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_md5.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_mergeinfo_h.swg b/subversion/bindings/swig/proxy/svn_mergeinfo_h.swg
index 28d28ec..94c29f6 100644
--- a/subversion/bindings/swig/proxy/svn_mergeinfo_h.swg
+++ b/subversion/bindings/swig/proxy/svn_mergeinfo_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_mergeinfo.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_nls_h.swg b/subversion/bindings/swig/proxy/svn_nls_h.swg
index 87bffab..9be919b 100644
--- a/subversion/bindings/swig/proxy/svn_nls_h.swg
+++ b/subversion/bindings/swig/proxy/svn_nls_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_nls.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_opt_h.swg b/subversion/bindings/swig/proxy/svn_opt_h.swg
index 248c5b6..65ccf3b 100644
--- a/subversion/bindings/swig/proxy/svn_opt_h.swg
+++ b/subversion/bindings/swig/proxy/svn_opt_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_opt.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_path_h.swg b/subversion/bindings/swig/proxy/svn_path_h.swg
index 55ce607..a49addd 100644
--- a/subversion/bindings/swig/proxy/svn_path_h.swg
+++ b/subversion/bindings/swig/proxy/svn_path_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_path.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_pools_h.swg b/subversion/bindings/swig/proxy/svn_pools_h.swg
index 1023c61..d44f809 100644
--- a/subversion/bindings/swig/proxy/svn_pools_h.swg
+++ b/subversion/bindings/swig/proxy/svn_pools_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_pools.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_props_h.swg b/subversion/bindings/swig/proxy/svn_props_h.swg
index eb332ca..d1dd8e5 100644
--- a/subversion/bindings/swig/proxy/svn_props_h.swg
+++ b/subversion/bindings/swig/proxy/svn_props_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_props.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
@@ -18,6 +19,7 @@
/* Structure definitions */
#ifdef SWIGPYTHON
%proxy(svn_prop_t);
+%proxy(svn_prop_inherited_item_t);
#endif
/* Callbacks */
diff --git a/subversion/bindings/swig/proxy/svn_quoprint_h.swg b/subversion/bindings/swig/proxy/svn_quoprint_h.swg
index ebd1556..47b1e59 100644
--- a/subversion/bindings/swig/proxy/svn_quoprint_h.swg
+++ b/subversion/bindings/swig/proxy/svn_quoprint_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_quoprint.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_ra_h.swg b/subversion/bindings/swig/proxy/svn_ra_h.swg
index 79cb755..f4dbd63 100644
--- a/subversion/bindings/swig/proxy/svn_ra_h.swg
+++ b/subversion/bindings/swig/proxy/svn_ra_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_ra.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
@@ -13,6 +14,7 @@
svn_ra_set_wc_prop_func_t,
svn_ra_push_wc_prop_func_t,
svn_ra_invalidate_wc_props_func_t,
+ svn_ra_get_wc_contents_func_t,
svn_ra_get_latest_revnum_func_t,
svn_ra_get_client_string_func_t,
svn_ra_file_rev_handler_t,
@@ -27,6 +29,7 @@
svn_ra_set_wc_prop_func_t *,
svn_ra_push_wc_prop_func_t *,
svn_ra_invalidate_wc_props_func_t *,
+ svn_ra_get_wc_contents_func_t *,
svn_ra_get_latest_revnum_func_t *,
svn_ra_get_client_string_func_t *,
svn_ra_file_rev_handler_t *,
@@ -48,6 +51,7 @@
void *report_baton,
void *callback_baton,
void *progress_baton,
+ void *commit_baton,
void *update_baton,
void *switch_baton,
void *status_baton,
@@ -284,6 +288,11 @@ static svn_error_t * svn_ra_invoke_invalidate_wc_props_func(
return _obj(baton, path, name, pool);
}
+static svn_error_t * svn_ra_invoke_get_wc_contents_func(
+ svn_ra_get_wc_contents_func_t _obj, void *baton, svn_stream_t **contents, const svn_checksum_t *checksum, apr_pool_t *pool) {
+ return _obj(baton, contents, checksum, pool);
+}
+
static svn_error_t * svn_ra_invoke_get_latest_revnum_func(
svn_ra_get_latest_revnum_func_t _obj, void *session_baton, svn_revnum_t *latest_revnum) {
return _obj(session_baton, latest_revnum);
@@ -368,6 +377,7 @@ static svn_error_t * svn_ra_invoke_init_func(
%funcptr_proxy(svn_ra_set_wc_prop_func_t, svn_ra_invoke_set_wc_prop_func);
%funcptr_proxy(svn_ra_push_wc_prop_func_t, svn_ra_invoke_push_wc_prop_func);
%funcptr_proxy(svn_ra_invalidate_wc_props_func_t, svn_ra_invoke_invalidate_wc_props_func);
+%funcptr_proxy(svn_ra_get_wc_contents_func_t, svn_ra_invoke_get_wc_contents_func);
%funcptr_proxy(svn_ra_get_latest_revnum_func_t, svn_ra_invoke_get_latest_revnum_func);
%funcptr_proxy(svn_ra_get_client_string_func_t, svn_ra_invoke_get_client_string_func);
%funcptr_proxy(svn_ra_file_rev_handler_t, svn_ra_invoke_file_rev_handler);
diff --git a/subversion/bindings/swig/proxy/svn_ra_svn_h.swg b/subversion/bindings/swig/proxy/svn_ra_svn_h.swg
index 8b96261..5d904cc 100644
--- a/subversion/bindings/swig/proxy/svn_ra_svn_h.swg
+++ b/subversion/bindings/swig/proxy/svn_ra_svn_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_ra_svn.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_repos_h.swg b/subversion/bindings/swig/proxy/svn_repos_h.swg
index 06e0bf8..22aea45 100644
--- a/subversion/bindings/swig/proxy/svn_repos_h.swg
+++ b/subversion/bindings/swig/proxy/svn_repos_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_repos.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
@@ -14,6 +15,7 @@
svn_repos_authz_callback_t,
svn_repos_file_rev_handler_t,
svn_repos_notify_func_t,
+ svn_repos_freeze_func_t,
svn_repos_history_func_t
};
%apply CALLABLE_CALLBACK * {
@@ -21,6 +23,7 @@
svn_repos_authz_callback_t *,
svn_repos_file_rev_handler_t *,
svn_repos_notify_func_t *,
+ svn_repos_freeze_func_t *,
svn_repos_history_func_t *
};
#endif
@@ -32,11 +35,13 @@
void *notify_baton,
void *start_callback_baton,
void *cancel_baton,
+ void *freeze_baton,
void *edit_baton,
void *authz_read_baton,
void *report_baton,
- void *callback_baton,
+ void *commit_baton,
void *authz_baton,
+ void *callback_baton,
void *history_baton,
void *receiver_baton,
void *handler_baton,
@@ -57,6 +62,7 @@
%proxy(svn_repos_notify_t);
%opaque_proxy(svn_repos_t);
%proxy(svn_repos_node_t);
+%proxy(svn_repos_parse_fns3_t);
%proxy(svn_repos_parse_fns2_t);
%proxy(svn_repos_parse_fns_t);
%opaque_proxy(svn_authz_t);
@@ -65,6 +71,66 @@
/* Callbacks */
%inline %{
+static svn_error_t * svn_repos_parse_fns3_invoke_magic_header_record(
+ svn_repos_parse_fns3_t * _obj, int version, void *parse_baton, apr_pool_t *pool) {
+ return (_obj->magic_header_record)(version, parse_baton, pool);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_uuid_record(
+ svn_repos_parse_fns3_t * _obj, const char *uuid, void *parse_baton, apr_pool_t *pool) {
+ return (_obj->uuid_record)(uuid, parse_baton, pool);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_new_revision_record(
+ svn_repos_parse_fns3_t * _obj, void **revision_baton, apr_hash_t *headers, void *parse_baton, apr_pool_t *pool) {
+ return (_obj->new_revision_record)(revision_baton, headers, parse_baton, pool);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_new_node_record(
+ svn_repos_parse_fns3_t * _obj, void **node_baton, apr_hash_t *headers, void *revision_baton, apr_pool_t *pool) {
+ return (_obj->new_node_record)(node_baton, headers, revision_baton, pool);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_set_revision_property(
+ svn_repos_parse_fns3_t * _obj, void *revision_baton, const char *name, const svn_string_t *value) {
+ return (_obj->set_revision_property)(revision_baton, name, value);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_set_node_property(
+ svn_repos_parse_fns3_t * _obj, void *node_baton, const char *name, const svn_string_t *value) {
+ return (_obj->set_node_property)(node_baton, name, value);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_delete_node_property(
+ svn_repos_parse_fns3_t * _obj, void *node_baton, const char *name) {
+ return (_obj->delete_node_property)(node_baton, name);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_remove_node_props(
+ svn_repos_parse_fns3_t * _obj, void *node_baton) {
+ return (_obj->remove_node_props)(node_baton);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_set_fulltext(
+ svn_repos_parse_fns3_t * _obj, svn_stream_t **stream, void *node_baton) {
+ return (_obj->set_fulltext)(stream, node_baton);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_apply_textdelta(
+ svn_repos_parse_fns3_t * _obj, svn_txdelta_window_handler_t *handler, void **handler_baton, void *node_baton) {
+ return (_obj->apply_textdelta)(handler, handler_baton, node_baton);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_close_node(
+ svn_repos_parse_fns3_t * _obj, void *node_baton) {
+ return (_obj->close_node)(node_baton);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_close_revision(
+ svn_repos_parse_fns3_t * _obj, void *revision_baton) {
+ return (_obj->close_revision)(revision_baton);
+}
+
static svn_error_t * svn_repos_parse_fns2_invoke_new_revision_record(
svn_repos_parse_fns2_t * _obj, void **revision_baton, apr_hash_t *headers, void *parse_baton, apr_pool_t *pool) {
return (_obj->new_revision_record)(revision_baton, headers, parse_baton, pool);
@@ -140,6 +206,11 @@ static void svn_repos_invoke_notify_func(
_obj(baton, notify, scratch_pool);
}
+static svn_error_t * svn_repos_invoke_freeze_func(
+ svn_repos_freeze_func_t _obj, void *baton, apr_pool_t *pool) {
+ return _obj(baton, pool);
+}
+
static svn_error_t * svn_repos_invoke_history_func(
svn_repos_history_func_t _obj, void *baton, const char *path, svn_revnum_t revision, apr_pool_t *pool) {
return _obj(baton, path, revision, pool);
@@ -148,6 +219,18 @@ static svn_error_t * svn_repos_invoke_history_func(
%}
#ifdef SWIGPYTHON
+%funcptr_member_proxy(svn_repos_parse_fns3_t, magic_header_record, svn_repos_parse_fns3_invoke_magic_header_record);
+%funcptr_member_proxy(svn_repos_parse_fns3_t, uuid_record, svn_repos_parse_fns3_invoke_uuid_record);
+%funcptr_member_proxy(svn_repos_parse_fns3_t, new_revision_record, svn_repos_parse_fns3_invoke_new_revision_record);
+%funcptr_member_proxy(svn_repos_parse_fns3_t, new_node_record, svn_repos_parse_fns3_invoke_new_node_record);
+%funcptr_member_proxy(svn_repos_parse_fns3_t, set_revision_property, svn_repos_parse_fns3_invoke_set_revision_property);
+%funcptr_member_proxy(svn_repos_parse_fns3_t, set_node_property, svn_repos_parse_fns3_invoke_set_node_property);
+%funcptr_member_proxy(svn_repos_parse_fns3_t, delete_node_property, svn_repos_parse_fns3_invoke_delete_node_property);
+%funcptr_member_proxy(svn_repos_parse_fns3_t, remove_node_props, svn_repos_parse_fns3_invoke_remove_node_props);
+%funcptr_member_proxy(svn_repos_parse_fns3_t, set_fulltext, svn_repos_parse_fns3_invoke_set_fulltext);
+%funcptr_member_proxy(svn_repos_parse_fns3_t, apply_textdelta, svn_repos_parse_fns3_invoke_apply_textdelta);
+%funcptr_member_proxy(svn_repos_parse_fns3_t, close_node, svn_repos_parse_fns3_invoke_close_node);
+%funcptr_member_proxy(svn_repos_parse_fns3_t, close_revision, svn_repos_parse_fns3_invoke_close_revision);
%funcptr_member_proxy(svn_repos_parse_fns2_t, new_revision_record, svn_repos_parse_fns2_invoke_new_revision_record);
%funcptr_member_proxy(svn_repos_parse_fns2_t, uuid_record, svn_repos_parse_fns2_invoke_uuid_record);
%funcptr_member_proxy(svn_repos_parse_fns2_t, new_node_record, svn_repos_parse_fns2_invoke_new_node_record);
@@ -163,6 +246,7 @@ static svn_error_t * svn_repos_invoke_history_func(
%funcptr_proxy(svn_repos_authz_callback_t, svn_repos_invoke_authz_callback);
%funcptr_proxy(svn_repos_file_rev_handler_t, svn_repos_invoke_file_rev_handler);
%funcptr_proxy(svn_repos_notify_func_t, svn_repos_invoke_notify_func);
+%funcptr_proxy(svn_repos_freeze_func_t, svn_repos_invoke_freeze_func);
%funcptr_proxy(svn_repos_history_func_t, svn_repos_invoke_history_func);
#endif
diff --git a/subversion/bindings/swig/proxy/svn_sorts_h.swg b/subversion/bindings/swig/proxy/svn_sorts_h.swg
index 80d3c49..d398b11 100644
--- a/subversion/bindings/swig/proxy/svn_sorts_h.swg
+++ b/subversion/bindings/swig/proxy/svn_sorts_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_sorts.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_string_h.swg b/subversion/bindings/swig/proxy/svn_string_h.swg
index 2ef6178..8f8fa3e 100644
--- a/subversion/bindings/swig/proxy/svn_string_h.swg
+++ b/subversion/bindings/swig/proxy/svn_string_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_string.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_subst_h.swg b/subversion/bindings/swig/proxy/svn_subst_h.swg
index 046cd2e..9376e66 100644
--- a/subversion/bindings/swig/proxy/svn_subst_h.swg
+++ b/subversion/bindings/swig/proxy/svn_subst_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_subst.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_time_h.swg b/subversion/bindings/swig/proxy/svn_time_h.swg
index 3e57e85..2ac3fdc 100644
--- a/subversion/bindings/swig/proxy/svn_time_h.swg
+++ b/subversion/bindings/swig/proxy/svn_time_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_time.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_types_h.swg b/subversion/bindings/swig/proxy/svn_types_h.swg
index 56acbd4..95261de 100644
--- a/subversion/bindings/swig/proxy/svn_types_h.swg
+++ b/subversion/bindings/swig/proxy/svn_types_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_types.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_user_h.swg b/subversion/bindings/swig/proxy/svn_user_h.swg
index 1b1d051..f4df937 100644
--- a/subversion/bindings/swig/proxy/svn_user_h.swg
+++ b/subversion/bindings/swig/proxy/svn_user_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_user.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_utf_h.swg b/subversion/bindings/swig/proxy/svn_utf_h.swg
index f9e3215..ccaa959 100644
--- a/subversion/bindings/swig/proxy/svn_utf_h.swg
+++ b/subversion/bindings/swig/proxy/svn_utf_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_utf.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_version_h.swg b/subversion/bindings/swig/proxy/svn_version_h.swg
index e37d1a5..15d519b 100644
--- a/subversion/bindings/swig/proxy/svn_version_h.swg
+++ b/subversion/bindings/swig/proxy/svn_version_h.swg
@@ -1,8 +1,10 @@
/* Proxy classes for svn_version.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
+%nodefault svn_version_extended_t;
#endif
/* Callback typemaps */
@@ -26,6 +28,9 @@
/* Structure definitions */
#ifdef SWIGPYTHON
%proxy(svn_version_checklist_t);
+%opaque_proxy(svn_version_extended_t);
+%proxy(svn_version_ext_linked_lib_t);
+%proxy(svn_version_ext_loaded_lib_t);
#endif
/* Callbacks */
diff --git a/subversion/bindings/swig/proxy/svn_wc_h.swg b/subversion/bindings/swig/proxy/svn_wc_h.swg
index 74b716d..f5acba3 100644
--- a/subversion/bindings/swig/proxy/svn_wc_h.swg
+++ b/subversion/bindings/swig/proxy/svn_wc_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_wc.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/svn_xml_h.swg b/subversion/bindings/swig/proxy/svn_xml_h.swg
index a606a7d..d89b4d8 100644
--- a/subversion/bindings/swig/proxy/svn_xml_h.swg
+++ b/subversion/bindings/swig/proxy/svn_xml_h.swg
@@ -1,5 +1,6 @@
/* Proxy classes for svn_xml.h
- * DO NOT EDIT -- AUTOMATICALLY GENERATED */
+ * DO NOT EDIT -- AUTOMATICALLY GENERATED
+ * BY build/generator/swig/header_wrappers.py */
/* No default constructors for opaque structs */
#ifdef SWIGPYTHON
diff --git a/subversion/bindings/swig/proxy/swig_perl_external_runtime.swg b/subversion/bindings/swig/proxy/swig_perl_external_runtime.swg
index d45836b..4822bae 100644
--- a/subversion/bindings/swig/proxy/swig_perl_external_runtime.swg
+++ b/subversion/bindings/swig/proxy/swig_perl_external_runtime.swg
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -132,22 +132,6 @@
#define SWIG_NullReferenceError -13
-/* Errors in SWIG */
-#define SWIG_UnknownError -1
-#define SWIG_IOError -2
-#define SWIG_RuntimeError -3
-#define SWIG_IndexError -4
-#define SWIG_TypeError -5
-#define SWIG_DivisionByZero -6
-#define SWIG_OverflowError -7
-#define SWIG_SyntaxError -8
-#define SWIG_ValueError -9
-#define SWIG_SystemError -10
-#define SWIG_AttributeError -11
-#define SWIG_MemoryError -12
-#define SWIG_NullReferenceError -13
-
-
/* -----------------------------------------------------------------------------
* swigrun.swg
*
@@ -839,49 +823,34 @@ extern "C" {
SWIGINTERN const char*
SWIG_Perl_ErrorType(int code) {
- const char* type = 0;
switch(code) {
case SWIG_MemoryError:
- type = "MemoryError";
- break;
+ return "MemoryError";
case SWIG_IOError:
- type = "IOError";
- break;
+ return "IOError";
case SWIG_RuntimeError:
- type = "RuntimeError";
- break;
+ return "RuntimeError";
case SWIG_IndexError:
- type = "IndexError";
- break;
+ return "IndexError";
case SWIG_TypeError:
- type = "TypeError";
- break;
+ return "TypeError";
case SWIG_DivisionByZero:
- type = "ZeroDivisionError";
- break;
+ return "ZeroDivisionError";
case SWIG_OverflowError:
- type = "OverflowError";
- break;
+ return "OverflowError";
case SWIG_SyntaxError:
- type = "SyntaxError";
- break;
+ return "SyntaxError";
case SWIG_ValueError:
- type = "ValueError";
- break;
+ return "ValueError";
case SWIG_SystemError:
- type = "SystemError";
- break;
+ return "SystemError";
case SWIG_AttributeError:
- type = "AttributeError";
- break;
+ return "AttributeError";
default:
- type = "RuntimeError";
+ return "RuntimeError";
}
- return type;
}
-
-
/* -----------------------------------------------------------------------------
* perlrun.swg
*
@@ -924,14 +893,14 @@ SWIG_Perl_ErrorType(int code) {
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Perl_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Perl_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Perl_SetModule(pointer)
/* Error manipulation */
#define SWIG_ErrorType(code) SWIG_Perl_ErrorType(code)
-#define SWIG_Error(code, msg) sv_setpvf(GvSV(PL_errgv),"%s %s\n", SWIG_ErrorType(code), msg)
+#define SWIG_Error(code, msg) sv_setpvf(get_sv("@", GV_ADD), "%s %s", SWIG_ErrorType(code), msg)
#define SWIG_fail goto fail
/* Perl-specific SWIG API */
@@ -1025,8 +994,6 @@ typedef int (*SwigMagicFunc)(struct interpreter *, SV *, MAGIC *);
#endif /* MULTIPLICITY */
#endif /* PERL_OBJECT */
-/* Workaround for bug in perl 5.6.x croak and earlier */
-#if (PERL_VERSION < 8)
# ifdef PERL_OBJECT
# define SWIG_croak_null() SWIG_Perl_croak_null(pPerl)
static void SWIG_Perl_croak_null(CPerlObj *pPerl)
@@ -1034,17 +1001,16 @@ static void SWIG_Perl_croak_null(CPerlObj *pPerl)
static void SWIG_croak_null()
# endif
{
- SV *err=ERRSV;
+ SV *err = get_sv("@", GV_ADD);
# if (PERL_VERSION < 6)
croak("%_", err);
# else
- if (SvOK(err) && !SvROK(err)) croak("%_", err);
- croak(Nullch);
+ if (sv_isobject(err))
+ croak(0);
+ else
+ croak("%s", SvPV_nolen(err));
# endif
}
-#else
-# define SWIG_croak_null() croak(Nullch)
-#endif
/*
@@ -1096,8 +1062,7 @@ SWIG_TypeProxyCheck(const char *c, swig_type_info *ty) {
if (ty) {
swig_cast_info *iter = ty->cast;
while (iter) {
- if ( (!iter->type->clientdata && (strcmp(iter->type->name, c) == 0)) ||
- (iter->type->clientdata && (strcmp((char*)iter->type->clientdata, c) == 0)) ) {
+ if (strcmp(SWIG_Perl_TypeProxyName(iter->type), c) == 0) {
if (iter == ty->cast)
return iter;
/* Move iter to the top of the linked list */
@@ -1228,7 +1193,7 @@ SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, swig_type_info *t, i
SV *obj=newSV(0);
HV *hash=newHV();
HV *stash;
- sv_setref_pv(obj, (char *) SWIG_Perl_TypeProxyName(t), ptr);
+ sv_setref_pv(obj, SWIG_Perl_TypeProxyName(t), ptr);
stash=SvSTASH(SvRV(obj));
if (flags & SWIG_POINTER_OWN) {
HV *hv;
@@ -1246,7 +1211,7 @@ SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, swig_type_info *t, i
sv_bless(sv, stash);
}
else {
- sv_setref_pv(sv, (char *) SWIG_Perl_TypeProxyName(t), ptr);
+ sv_setref_pv(sv, SWIG_Perl_TypeProxyName(t), ptr);
}
}
@@ -1337,19 +1302,23 @@ typedef struct {
/* Magic variable code */
#ifndef PERL_OBJECT
-#define swig_create_magic(s,a,b,c) _swig_create_magic(s,a,b,c)
- #ifndef MULTIPLICITY
- SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *))
- #else
- SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(struct interpreter*, SV *, MAGIC *), int (*get)(struct interpreter*, SV *,MAGIC *))
- #endif
+# ifdef __cplusplus
+# define swig_create_magic(s,a,b,c) _swig_create_magic(s,const_cast<char*>(a),b,c)
+# else
+# define swig_create_magic(s,a,b,c) _swig_create_magic(s,(char*)(a),b,c)
+# endif
+# ifndef MULTIPLICITY
+SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *))
+# else
+SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(struct interpreter*, SV *, MAGIC *), int (*get)(struct interpreter*, SV *,MAGIC *))
+# endif
#else
# define swig_create_magic(s,a,b,c) _swig_create_magic(pPerl,s,a,b,c)
SWIGRUNTIME void _swig_create_magic(CPerlObj *pPerl, SV *sv, const char *name, int (CPerlObj::*set)(SV *, MAGIC *), int (CPerlObj::*get)(SV *, MAGIC *))
#endif
{
MAGIC *mg;
- sv_magic(sv,sv,'U',(char *) name,strlen(name));
+ sv_magic(sv,sv,'U',name,strlen(name));
mg = mg_find(sv,'U');
mg->mg_virtual = (MGVTBL *) malloc(sizeof(MGVTBL));
mg->mg_virtual->svt_get = (SwigMagicFunc) get;
@@ -1361,7 +1330,7 @@ SWIGRUNTIME void _swig_create_magic(CPerlObj *pPerl, SV *sv, const char *name, i
SWIGRUNTIME swig_module_info *
-SWIG_Perl_GetModule(void) {
+SWIG_Perl_GetModule(void *SWIGUNUSEDPARM(clientdata)) {
static void *type_pointer = (void *)0;
SV *pointer;
diff --git a/subversion/bindings/swig/proxy/swig_python_external_runtime.swg b/subversion/bindings/swig/proxy/swig_python_external_runtime.swg
index 49baed3..23ee4fb 100644
--- a/subversion/bindings/swig/proxy/swig_python_external_runtime.swg
+++ b/subversion/bindings/swig/proxy/swig_python_external_runtime.swg
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -132,22 +132,6 @@
#define SWIG_NullReferenceError -13
-/* Errors in SWIG */
-#define SWIG_UnknownError -1
-#define SWIG_IOError -2
-#define SWIG_RuntimeError -3
-#define SWIG_IndexError -4
-#define SWIG_TypeError -5
-#define SWIG_DivisionByZero -6
-#define SWIG_OverflowError -7
-#define SWIG_SyntaxError -8
-#define SWIG_ValueError -9
-#define SWIG_SystemError -10
-#define SWIG_AttributeError -11
-#define SWIG_MemoryError -12
-#define SWIG_NullReferenceError -13
-
-
/* -----------------------------------------------------------------------------
* swigrun.swg
*
@@ -738,6 +722,7 @@ SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) {
#define PyInt_Check(x) PyLong_Check(x)
#define PyInt_AsLong(x) PyLong_AsLong(x)
#define PyInt_FromLong(x) PyLong_FromLong(x)
+#define PyInt_FromSize_t(x) PyLong_FromSize_t(x)
#define PyString_Check(name) PyBytes_Check(name)
#define PyString_FromString(x) PyUnicode_FromString(x)
#define PyString_Format(fmt, args) PyUnicode_Format(fmt, args)
@@ -907,6 +892,10 @@ static long PyNumber_AsSsize_t (PyObject *x, void *SWIGUNUSEDPARM(exc))
}
#endif
+#if PY_VERSION_HEX < 0x02050000
+#define PyInt_FromSize_t(x) PyInt_FromLong((long)x)
+#endif
+
#if PY_VERSION_HEX < 0x02040000
#define Py_VISIT(op) \
do { \
@@ -1174,7 +1163,7 @@ SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self),
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Python_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Python_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Python_SetModule(pointer)
#define SWIG_NewClientData(obj) SwigPyClientData_New(obj)
@@ -1200,7 +1189,7 @@ SWIG_Python_SetErrorObj(PyObject *errtype, PyObject *obj) {
SWIGINTERN void
SWIG_Python_SetErrorMsg(PyObject *errtype, const char *msg) {
SWIG_PYTHON_THREAD_BEGIN_BLOCK;
- PyErr_SetString(errtype, (char *) msg);
+ PyErr_SetString(errtype, msg);
SWIG_PYTHON_THREAD_END_BLOCK;
}
@@ -1219,7 +1208,11 @@ SwigPyBuiltin_AddPublicSymbol(PyObject *seq, const char *key) {
SWIGINTERN void
SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *name, PyObject *obj) {
+#if PY_VERSION_HEX < 0x02030000
PyDict_SetItemString(d, (char *)name, obj);
+#else
+ PyDict_SetItemString(d, name, obj);
+#endif
Py_DECREF(obj);
if (public_interface)
SwigPyBuiltin_AddPublicSymbol(public_interface, name);
@@ -1229,7 +1222,11 @@ SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *nam
SWIGINTERN void
SWIG_Python_SetConstant(PyObject *d, const char *name, PyObject *obj) {
+#if PY_VERSION_HEX < 0x02030000
PyDict_SetItemString(d, (char *)name, obj);
+#else
+ PyDict_SetItemString(d, name, obj);
+#endif
Py_DECREF(obj);
}
@@ -1550,7 +1547,7 @@ SwigPyObject_repr(SwigPyObject *v, PyObject *args)
#endif
{
const char *name = SWIG_TypePrettyName(v->ty);
- PyObject *repr = SWIG_Python_str_FromFormat("<Swig Object of type '%s' at %p>", name, (void *)v);
+ PyObject *repr = SWIG_Python_str_FromFormat("<Swig Object of type '%s' at %p>", (name ? name : "unknown"), (void *)v);
if (v->next) {
# ifdef METH_NOARGS
PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next);
@@ -1754,8 +1751,10 @@ SwigPyObject_own(PyObject *v, PyObject *args)
PyObject *val = 0;
#if (PY_VERSION_HEX < 0x02020000)
if (!PyArg_ParseTuple(args,(char *)"|O:own",&val))
-#else
+#elif (PY_VERSION_HEX < 0x02050000)
if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val))
+#else
+ if (!PyArg_UnpackTuple(args, "own", 0, 1, &val))
#endif
{
return NULL;
@@ -2450,23 +2449,29 @@ SWIG_Python_NewShadowInstance(SwigPyClientData *data, PyObject *swig_this)
} else {
#if PY_VERSION_HEX >= 0x03000000
inst = PyBaseObject_Type.tp_new((PyTypeObject*) data->newargs, Py_None, Py_None);
- PyObject_SetAttr(inst, SWIG_This(), swig_this);
- Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG;
+ if (inst) {
+ PyObject_SetAttr(inst, SWIG_This(), swig_this);
+ Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG;
+ }
#else
PyObject *dict = PyDict_New();
- PyDict_SetItem(dict, SWIG_This(), swig_this);
- inst = PyInstance_NewRaw(data->newargs, dict);
- Py_DECREF(dict);
+ if (dict) {
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ inst = PyInstance_NewRaw(data->newargs, dict);
+ Py_DECREF(dict);
+ }
#endif
}
return inst;
#else
#if (PY_VERSION_HEX >= 0x02010000)
- PyObject *inst;
+ PyObject *inst = 0;
PyObject *dict = PyDict_New();
- PyDict_SetItem(dict, SWIG_This(), swig_this);
- inst = PyInstance_NewRaw(data->newargs, dict);
- Py_DECREF(dict);
+ if (dict) {
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ inst = PyInstance_NewRaw(data->newargs, dict);
+ Py_DECREF(dict);
+ }
return (PyObject *) inst;
#else
PyInstanceObject *inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type);
@@ -2517,7 +2522,7 @@ SWIG_Python_SetSwigThis(PyObject *inst, PyObject *swig_this)
SWIGINTERN PyObject *
SWIG_Python_InitShadowInstance(PyObject *args) {
PyObject *obj[2];
- if (!SWIG_Python_UnpackTuple(args,(char*)"swiginit", 2, 2, obj)) {
+ if (!SWIG_Python_UnpackTuple(args, "swiginit", 2, 2, obj)) {
return NULL;
} else {
SwigPyObject *sthis = SWIG_Python_GetSwigThis(obj[0]);
@@ -2573,12 +2578,10 @@ SWIG_Python_NewPointerObj(PyObject *self, void *ptr, swig_type_info *type, int f
assert(!(flags & SWIG_BUILTIN_TP_INIT));
robj = SwigPyObject_New(ptr, type, own);
- if (clientdata && !(flags & SWIG_POINTER_NOSHADOW)) {
+ if (robj && clientdata && !(flags & SWIG_POINTER_NOSHADOW)) {
PyObject *inst = SWIG_Python_NewShadowInstance(clientdata, robj);
- if (inst) {
- Py_DECREF(robj);
- robj = inst;
- }
+ Py_DECREF(robj);
+ robj = inst;
}
return robj;
}
@@ -2599,7 +2602,7 @@ void *SWIG_ReturnGlobalTypeList(void *);
#endif
SWIGRUNTIME swig_module_info *
-SWIG_Python_GetModule(void) {
+SWIG_Python_GetModule(void *SWIGUNUSEDPARM(clientdata)) {
static void *type_pointer = (void *)0;
/* first check if module already created */
if (!type_pointer) {
@@ -2725,7 +2728,7 @@ SWIG_Python_TypeQuery(const char *type)
descriptor = (swig_type_info *) PyCObject_AsVoidPtr(obj);
#endif
} else {
- swig_module_info *swig_module = SWIG_Python_GetModule();
+ swig_module_info *swig_module = SWIG_GetModule(0);
descriptor = SWIG_TypeQueryModule(swig_module, swig_module, type);
if (descriptor) {
#ifdef SWIGPY_USE_CAPSULE
@@ -2793,7 +2796,7 @@ SwigPyObject_GetDesc(PyObject *self)
{
SwigPyObject *v = (SwigPyObject *)self;
swig_type_info *ty = v ? v->ty : 0;
- return ty ? ty->str : (char*)"";
+ return ty ? ty->str : "";
}
SWIGRUNTIME void
@@ -2850,6 +2853,7 @@ SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int SWIGUNUSEDPARM(arg
return result;
}
+#ifdef SWIGPYTHON_BUILTIN
SWIGRUNTIME int
SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
PyTypeObject *tp = obj->ob_type;
@@ -2858,15 +2862,15 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
descrsetfunc f;
int res;
-#ifdef Py_USING_UNICODE
+# ifdef Py_USING_UNICODE
if (PyString_Check(name)) {
name = PyUnicode_Decode(PyString_AsString(name), PyString_Size(name), NULL, NULL);
if (!name)
return -1;
} else if (!PyUnicode_Check(name))
-#else
+# else
if (!PyString_Check(name))
-#endif
+# endif
{
PyErr_Format(PyExc_TypeError, "attribute name must be string, not '%.200s'", name->ob_type->tp_name);
return -1;
@@ -2901,6 +2905,7 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
Py_DECREF(name);
return res;
}
+#endif
#ifdef __cplusplus
diff --git a/subversion/bindings/swig/proxy/swig_ruby_external_runtime.swg b/subversion/bindings/swig/proxy/swig_ruby_external_runtime.swg
index 91b51c7..1bb5159 100644
--- a/subversion/bindings/swig/proxy/swig_ruby_external_runtime.swg
+++ b/subversion/bindings/swig/proxy/swig_ruby_external_runtime.swg
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -132,22 +132,6 @@
#define SWIG_NullReferenceError -13
-/* Errors in SWIG */
-#define SWIG_UnknownError -1
-#define SWIG_IOError -2
-#define SWIG_RuntimeError -3
-#define SWIG_IndexError -4
-#define SWIG_TypeError -5
-#define SWIG_DivisionByZero -6
-#define SWIG_OverflowError -7
-#define SWIG_SyntaxError -8
-#define SWIG_ValueError -9
-#define SWIG_SystemError -10
-#define SWIG_AttributeError -11
-#define SWIG_MemoryError -12
-#define SWIG_NullReferenceError -13
-
-
/* -----------------------------------------------------------------------------
* swigrun.swg
*
@@ -1272,7 +1256,7 @@ SWIG_Ruby_AppendOutput(VALUE target, VALUE o) {
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Ruby_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Ruby_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Ruby_SetModule(pointer)
@@ -1426,7 +1410,7 @@ SWIG_Ruby_NewPointerObj(void *ptr, swig_type_info *type, int flags)
downcast methods. */
if (obj != Qnil) {
VALUE value = rb_iv_get(obj, "@__swigtype__");
- char* type_name = RSTRING_PTR(value);
+ const char* type_name = RSTRING_PTR(value);
if (strcmp(type->name, type_name) == 0) {
return obj;
@@ -1608,7 +1592,7 @@ SWIG_Ruby_ConvertPacked(VALUE obj, void *ptr, int sz, swig_type_info *ty) {
}
SWIGRUNTIME swig_module_info *
-SWIG_Ruby_GetModule(void)
+SWIG_Ruby_GetModule(void *SWIGUNUSEDPARM(clientdata))
{
VALUE pointer;
swig_module_info *ret = 0;
diff --git a/subversion/bindings/swig/python/README b/subversion/bindings/swig/python/README
index 474a677..6c69e98 100644
--- a/subversion/bindings/swig/python/README
+++ b/subversion/bindings/swig/python/README
@@ -5,6 +5,25 @@ TRANSLATING PARAMETER LISTS
The argument-reductions laws of the SWIG bindings something go like
this:
+ - The module prefix can be omitted. o:
+
+ void *some_C_function = svn_client_foo;
+
+ becomes:
+
+ import svn.client
+ func = svn.client.foo
+
+ However, the following two alternatives also work:
+
+ # Fully-qualified C name
+ import svn.client
+ func = svn.client.svn_client_foo
+
+ # Star-import imports just svn_* names, not bare 'foo' names.
+ from svn.client import *
+ func = svn_client_foo
+
- Python functions don't return errors. They throw exceptions.
Which means that...
@@ -13,30 +32,51 @@ TRANSLATING PARAMETER LISTS
pointers with new data (you know, values that are returned to
the caller, but not as "return values") will return those
values directly in Python. So:
-
- error = foo (object **returned_obj, int blah);
-
+
+ object_t *returned_obj;
+ SVN_ERR(svn_client_foo(&returned_obj, blah));
+
+ becomes:
+
+ returned_obj = svn.client.foo(blah)
+
+ and:
+
+ err = svn_client_foo(&returned_obj, blah);
+ if (err && err->apr_err == SVN_ERR_...)
+ /* handle it */
+
becomes:
try:
- returned_obj = foo (blah)
+ returned_obj = svn.client.foo(blah)
except:
# handle it
- Callback function/baton pairs get reduced to just callback
functions, and the benefit you get from batons is gotten
- instead through Python default arguments:
-
- error = foo (callback_t function, void *baton);
-
+ instead through defining the callback function locally and
+ passing the 'baton' data in through Python default arguments. So:
+
+ struct baton_t { userdata1, ... };
+
+ svn_error_t *cb_func(cb_arg1, ..., void *baton)
+ {
+ baton_t *b = baton;
+ /* do stuff here with b->userdata1... etc. */
+ }
+
+ /* Now use it: */
+ {
+ baton_t *b = { whatever, ... };
+ error = svn_client_foo(cb_func, b);
+ }
+
becomes:
-
- try:
- def function(callback_arg1, ..., userdata1=whatever, ...):
- # do stuff here
- foo(function)
- except:
- # handle it
+
+ def cb_func(cb_arg1, ..., userdata1=whatever, ...):
+ # do stuff here with userdata1 etc.
+ svn.client.foo(cb_func)
RUNNING THE TESTS
diff --git a/subversion/bindings/swig/python/client.py b/subversion/bindings/swig/python/client.py
index 63479ac..c62d460 100644
--- a/subversion/bindings/swig/python/client.py
+++ b/subversion/bindings/swig/python/client.py
@@ -1,5 +1,5 @@
# This file was automatically generated by SWIG (http://www.swig.org).
-# Version 2.0.4
+# Version 2.0.9
#
# Do not make changes to this file unless you know what you are doing--modify
# the SWIG interface file instead.
@@ -84,27 +84,21 @@ def _assert_valid_deep(value):
if hasattr(value, "assert_valid"):
value.assert_valid()
-import core
-import delta
-import wc
-import ra
+import libsvn.core
+import libsvn.delta
+import libsvn.wc
+import libsvn.ra
def svn_client_version():
- """svn_client_version() -> svn_version_t"""
+ """svn_client_version() -> svn_version_t const *"""
return _client.svn_client_version()
def svn_client_get_simple_prompt_provider(*args):
- """
- svn_client_get_simple_prompt_provider(svn_auth_simple_prompt_func_t prompt_func, int retry_limit,
- apr_pool_t pool)
- """
+ """svn_client_get_simple_prompt_provider(svn_auth_simple_prompt_func_t prompt_func, int retry_limit, apr_pool_t pool)"""
return _client.svn_client_get_simple_prompt_provider(*args)
def svn_client_get_username_prompt_provider(*args):
- """
- svn_client_get_username_prompt_provider(svn_auth_username_prompt_func_t prompt_func, int retry_limit,
- apr_pool_t pool)
- """
+ """svn_client_get_username_prompt_provider(svn_auth_username_prompt_func_t prompt_func, int retry_limit, apr_pool_t pool)"""
return _client.svn_client_get_username_prompt_provider(*args)
def svn_client_get_simple_provider(*args):
@@ -128,28 +122,19 @@ def svn_client_get_ssl_client_cert_pw_file_provider(*args):
return _client.svn_client_get_ssl_client_cert_pw_file_provider(*args)
def svn_client_get_ssl_server_trust_prompt_provider(*args):
- """
- svn_client_get_ssl_server_trust_prompt_provider(svn_auth_ssl_server_trust_prompt_func_t prompt_func,
- apr_pool_t pool)
- """
+ """svn_client_get_ssl_server_trust_prompt_provider(svn_auth_ssl_server_trust_prompt_func_t prompt_func, apr_pool_t pool)"""
return _client.svn_client_get_ssl_server_trust_prompt_provider(*args)
def svn_client_get_ssl_client_cert_prompt_provider(*args):
- """
- svn_client_get_ssl_client_cert_prompt_provider(svn_auth_ssl_client_cert_prompt_func_t prompt_func,
- int retry_limit, apr_pool_t pool)
- """
+ """svn_client_get_ssl_client_cert_prompt_provider(svn_auth_ssl_client_cert_prompt_func_t prompt_func, int retry_limit, apr_pool_t pool)"""
return _client.svn_client_get_ssl_client_cert_prompt_provider(*args)
def svn_client_get_ssl_client_cert_pw_prompt_provider(*args):
- """
- svn_client_get_ssl_client_cert_pw_prompt_provider(svn_auth_ssl_client_cert_pw_prompt_func_t prompt_func,
- int retry_limit, apr_pool_t pool)
- """
+ """svn_client_get_ssl_client_cert_pw_prompt_provider(svn_auth_ssl_client_cert_pw_prompt_func_t prompt_func, int retry_limit, apr_pool_t pool)"""
return _client.svn_client_get_ssl_client_cert_pw_prompt_provider(*args)
def svn_client_proplist_item_dup(*args):
- """svn_client_proplist_item_dup( item, apr_pool_t pool)"""
+ """svn_client_proplist_item_dup(svn_client_proplist_item_t const * item, apr_pool_t pool) -> svn_client_proplist_item_t *"""
return _client.svn_client_proplist_item_dup(*args)
class svn_client_commit_info_t:
"""Proxy of C svn_client_commit_info_t struct"""
@@ -207,7 +192,7 @@ class svn_client_commit_info_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_client_commit_info_t"""
+ """__init__(svn_client_commit_info_t self) -> svn_client_commit_info_t"""
this = _client.new_svn_client_commit_info_t()
try: self.this.append(this)
except: self.this = this
@@ -222,6 +207,7 @@ SVN_CLIENT_COMMIT_ITEM_TEXT_MODS = _client.SVN_CLIENT_COMMIT_ITEM_TEXT_MODS
SVN_CLIENT_COMMIT_ITEM_PROP_MODS = _client.SVN_CLIENT_COMMIT_ITEM_PROP_MODS
SVN_CLIENT_COMMIT_ITEM_IS_COPY = _client.SVN_CLIENT_COMMIT_ITEM_IS_COPY
SVN_CLIENT_COMMIT_ITEM_LOCK_TOKEN = _client.SVN_CLIENT_COMMIT_ITEM_LOCK_TOKEN
+SVN_CLIENT_COMMIT_ITEM_MOVED_HERE = _client.SVN_CLIENT_COMMIT_ITEM_MOVED_HERE
class svn_client_commit_item3_t:
"""Proxy of C svn_client_commit_item3_t struct"""
__swig_setmethods__ = {}
@@ -249,6 +235,8 @@ class svn_client_commit_item3_t:
__swig_getmethods__["outgoing_prop_changes"] = _client.svn_client_commit_item3_t_outgoing_prop_changes_get
__swig_setmethods__["session_relpath"] = _client.svn_client_commit_item3_t_session_relpath_set
__swig_getmethods__["session_relpath"] = _client.svn_client_commit_item3_t_session_relpath_get
+ __swig_setmethods__["moved_from_abspath"] = _client.svn_client_commit_item3_t_moved_from_abspath_set
+ __swig_getmethods__["moved_from_abspath"] = _client.svn_client_commit_item3_t_moved_from_abspath_get
def set_parent_pool(self, parent_pool=None):
"""Create a new proxy object for svn_client_commit_item3_t"""
import libsvn.core, weakref
@@ -292,7 +280,7 @@ class svn_client_commit_item3_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_client_commit_item3_t"""
+ """__init__(svn_client_commit_item3_t self) -> svn_client_commit_item3_t"""
this = _client.new_svn_client_commit_item3_t()
try: self.this.append(this)
except: self.this = this
@@ -367,7 +355,7 @@ class svn_client_commit_item2_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_client_commit_item2_t"""
+ """__init__(svn_client_commit_item2_t self) -> svn_client_commit_item2_t"""
this = _client.new_svn_client_commit_item2_t()
try: self.this.append(this)
except: self.this = this
@@ -440,7 +428,7 @@ class svn_client_commit_item_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_client_commit_item_t"""
+ """__init__(svn_client_commit_item_t self) -> svn_client_commit_item_t"""
this = _client.new_svn_client_commit_item_t()
try: self.this.append(this)
except: self.this = this
@@ -527,7 +515,7 @@ class svn_client_diff_summarize_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_client_diff_summarize_t"""
+ """__init__(svn_client_diff_summarize_t self) -> svn_client_diff_summarize_t"""
this = _client.new_svn_client_diff_summarize_t()
try: self.this.append(this)
except: self.this = this
@@ -636,7 +624,7 @@ class svn_client_ctx_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_client_ctx_t"""
+ """__init__(svn_client_ctx_t self) -> svn_client_ctx_t"""
this = _client.new_svn_client_ctx_t()
try: self.this.append(this)
except: self.this = this
@@ -646,6 +634,10 @@ svn_client_ctx_t_swigregister = _client.svn_client_ctx_t_swigregister
svn_client_ctx_t_swigregister(svn_client_ctx_t)
+def svn_client_create_context2(*args):
+ """svn_client_create_context2(apr_hash_t cfg_hash, apr_pool_t pool) -> svn_error_t"""
+ return _client.svn_client_create_context2(*args)
+
def svn_client_create_context(*args):
"""svn_client_create_context(apr_pool_t pool) -> svn_error_t"""
return _client.svn_client_create_context(*args)
@@ -654,152 +646,137 @@ SVN_CLIENT_AUTH_PASSWORD = _client.SVN_CLIENT_AUTH_PASSWORD
def svn_client_args_to_target_array2(*args):
"""
- svn_client_args_to_target_array2(apr_getopt_t os, apr_array_header_t known_targets,
- svn_client_ctx_t ctx, svn_boolean_t keep_last_origpath_on_truepath_collision,
+ svn_client_args_to_target_array2(apr_getopt_t * os, apr_array_header_t known_targets, svn_client_ctx_t ctx, svn_boolean_t keep_last_origpath_on_truepath_collision,
apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_args_to_target_array2(*args)
def svn_client_args_to_target_array(*args):
- """
- svn_client_args_to_target_array(apr_getopt_t os, apr_array_header_t known_targets,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
- """
+ """svn_client_args_to_target_array(apr_getopt_t * os, apr_array_header_t known_targets, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"""
return _client.svn_client_args_to_target_array(*args)
def svn_client_checkout3(*args):
"""
- svn_client_checkout3(char URL, char path, svn_opt_revision_t peg_revision,
- svn_opt_revision_t revision, svn_depth_t depth,
- svn_boolean_t ignore_externals, svn_boolean_t allow_unver_obstructions,
- svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_checkout3(char const * URL, char const * path, svn_opt_revision_t peg_revision, svn_opt_revision_t revision,
+ svn_depth_t depth, svn_boolean_t ignore_externals, svn_boolean_t allow_unver_obstructions,
+ svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_checkout3(*args)
def svn_client_checkout2(*args):
"""
- svn_client_checkout2(char URL, char path, svn_opt_revision_t peg_revision,
- svn_opt_revision_t revision, svn_boolean_t recurse,
- svn_boolean_t ignore_externals, svn_client_ctx_t ctx,
+ svn_client_checkout2(char const * URL, char const * path, svn_opt_revision_t peg_revision, svn_opt_revision_t revision,
+ svn_boolean_t recurse, svn_boolean_t ignore_externals, svn_client_ctx_t ctx,
apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_checkout2(*args)
def svn_client_checkout(*args):
"""
- svn_client_checkout(char URL, char path, svn_opt_revision_t revision, svn_boolean_t recurse,
+ svn_client_checkout(char const * URL, char const * path, svn_opt_revision_t revision, svn_boolean_t recurse,
svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_checkout(*args)
def svn_client_update4(*args):
"""
- svn_client_update4(apr_array_header_t paths, svn_opt_revision_t revision,
- svn_depth_t depth, svn_boolean_t depth_is_sticky,
+ svn_client_update4(apr_array_header_t paths, svn_opt_revision_t revision, svn_depth_t depth, svn_boolean_t depth_is_sticky,
svn_boolean_t ignore_externals, svn_boolean_t allow_unver_obstructions,
- svn_boolean_t adds_as_modification,
- svn_boolean_t make_parents,
+ svn_boolean_t adds_as_modification, svn_boolean_t make_parents,
svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_update4(*args)
def svn_client_update3(*args):
"""
- svn_client_update3(apr_array_header_t paths, svn_opt_revision_t revision,
- svn_depth_t depth, svn_boolean_t depth_is_sticky,
+ svn_client_update3(apr_array_header_t paths, svn_opt_revision_t revision, svn_depth_t depth, svn_boolean_t depth_is_sticky,
svn_boolean_t ignore_externals, svn_boolean_t allow_unver_obstructions,
- svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_update3(*args)
def svn_client_update2(*args):
"""
- svn_client_update2(apr_array_header_t paths, svn_opt_revision_t revision,
- svn_boolean_t recurse, svn_boolean_t ignore_externals,
+ svn_client_update2(apr_array_header_t paths, svn_opt_revision_t revision, svn_boolean_t recurse, svn_boolean_t ignore_externals,
svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_update2(*args)
def svn_client_update(*args):
"""
- svn_client_update(char path, svn_opt_revision_t revision, svn_boolean_t recurse,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_update(char const * path, svn_opt_revision_t revision, svn_boolean_t recurse, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_update(*args)
def svn_client_switch3(*args):
"""
- svn_client_switch3(char path, char url, svn_opt_revision_t peg_revision,
- svn_opt_revision_t revision, svn_depth_t depth,
- svn_boolean_t depth_is_sticky, svn_boolean_t ignore_externals,
- svn_boolean_t allow_unver_obstructions,
- svn_boolean_t ignore_ancestry,
+ svn_client_switch3(char const * path, char const * url, svn_opt_revision_t peg_revision, svn_opt_revision_t revision,
+ svn_depth_t depth, svn_boolean_t depth_is_sticky, svn_boolean_t ignore_externals,
+ svn_boolean_t allow_unver_obstructions, svn_boolean_t ignore_ancestry,
svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_switch3(*args)
def svn_client_switch2(*args):
"""
- svn_client_switch2(char path, char url, svn_opt_revision_t peg_revision,
- svn_opt_revision_t revision, svn_depth_t depth,
- svn_boolean_t depth_is_sticky, svn_boolean_t ignore_externals,
- svn_boolean_t allow_unver_obstructions,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_switch2(char const * path, char const * url, svn_opt_revision_t peg_revision, svn_opt_revision_t revision,
+ svn_depth_t depth, svn_boolean_t depth_is_sticky, svn_boolean_t ignore_externals,
+ svn_boolean_t allow_unver_obstructions, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_switch2(*args)
def svn_client_switch(*args):
"""
- svn_client_switch(char path, char url, svn_opt_revision_t revision, svn_boolean_t recurse,
+ svn_client_switch(char const * path, char const * url, svn_opt_revision_t revision, svn_boolean_t recurse,
svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_switch(*args)
+def svn_client_add5(*args):
+ """
+ svn_client_add5(char const * path, svn_depth_t depth, svn_boolean_t force, svn_boolean_t no_ignore,
+ svn_boolean_t no_autoprops, svn_boolean_t add_parents, svn_client_ctx_t ctx,
+ apr_pool_t scratch_pool) -> svn_error_t
+ """
+ return _client.svn_client_add5(*args)
+
def svn_client_add4(*args):
"""
- svn_client_add4(char path, svn_depth_t depth, svn_boolean_t force,
- svn_boolean_t no_ignore, svn_boolean_t add_parents,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_add4(char const * path, svn_depth_t depth, svn_boolean_t force, svn_boolean_t no_ignore,
+ svn_boolean_t add_parents, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_add4(*args)
def svn_client_add3(*args):
"""
- svn_client_add3(char path, svn_boolean_t recursive, svn_boolean_t force,
- svn_boolean_t no_ignore, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_add3(char const * path, svn_boolean_t recursive, svn_boolean_t force, svn_boolean_t no_ignore,
+ svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_add3(*args)
def svn_client_add2(*args):
"""
- svn_client_add2(char path, svn_boolean_t recursive, svn_boolean_t force,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_add2(char const * path, svn_boolean_t recursive, svn_boolean_t force, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_add2(*args)
def svn_client_add(*args):
- """
- svn_client_add(char path, svn_boolean_t recursive, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_client_add(char const * path, svn_boolean_t recursive, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"""
return _client.svn_client_add(*args)
def svn_client_mkdir4(*args):
"""
- svn_client_mkdir4(apr_array_header_t paths, svn_boolean_t make_parents,
- apr_hash_t revprop_table, svn_commit_callback2_t commit_callback,
- void commit_baton, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_mkdir4(apr_array_header_t paths, svn_boolean_t make_parents, apr_hash_t revprop_table, svn_commit_callback2_t commit_callback,
+ svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_mkdir4(*args)
def svn_client_mkdir3(*args):
"""
- svn_client_mkdir3(apr_array_header_t paths, svn_boolean_t make_parents,
- apr_hash_t revprop_table, svn_client_ctx_t ctx,
+ svn_client_mkdir3(apr_array_header_t paths, svn_boolean_t make_parents, apr_hash_t revprop_table, svn_client_ctx_t ctx,
apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_mkdir3(*args)
@@ -814,85 +791,89 @@ def svn_client_mkdir(*args):
def svn_client_delete4(*args):
"""
- svn_client_delete4(apr_array_header_t paths, svn_boolean_t force, svn_boolean_t keep_local,
- apr_hash_t revprop_table,
- svn_commit_callback2_t commit_callback, void commit_baton,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_delete4(apr_array_header_t paths, svn_boolean_t force, svn_boolean_t keep_local, apr_hash_t revprop_table,
+ svn_commit_callback2_t commit_callback, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_delete4(*args)
def svn_client_delete3(*args):
"""
- svn_client_delete3(apr_array_header_t paths, svn_boolean_t force, svn_boolean_t keep_local,
- apr_hash_t revprop_table,
+ svn_client_delete3(apr_array_header_t paths, svn_boolean_t force, svn_boolean_t keep_local, apr_hash_t revprop_table,
svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_delete3(*args)
def svn_client_delete2(*args):
- """
- svn_client_delete2(apr_array_header_t paths, svn_boolean_t force, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_client_delete2(apr_array_header_t paths, svn_boolean_t force, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"""
return _client.svn_client_delete2(*args)
def svn_client_delete(*args):
+ """svn_client_delete(apr_array_header_t paths, svn_boolean_t force, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"""
+ return _client.svn_client_delete(*args)
+
+def svn_client_import5(*args):
"""
- svn_client_delete(apr_array_header_t paths, svn_boolean_t force, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_import5(char const * path, char const * url, svn_depth_t depth, svn_boolean_t no_ignore,
+ svn_boolean_t no_autoprops, svn_boolean_t ignore_unknown_node_types, apr_hash_t revprop_table,
+ svn_client_import_filter_func_t filter_callback, void * filter_baton,
+ svn_commit_callback2_t commit_callback, svn_client_ctx_t ctx,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
- return _client.svn_client_delete(*args)
+ return _client.svn_client_import5(*args)
def svn_client_import4(*args):
"""
- svn_client_import4(char path, char url, svn_depth_t depth, svn_boolean_t no_ignore,
- svn_boolean_t ignore_unknown_node_types,
- apr_hash_t revprop_table, svn_commit_callback2_t commit_callback,
- void commit_baton,
+ svn_client_import4(char const * path, char const * url, svn_depth_t depth, svn_boolean_t no_ignore,
+ svn_boolean_t ignore_unknown_node_types, apr_hash_t revprop_table, svn_commit_callback2_t commit_callback,
svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_import4(*args)
def svn_client_import3(*args):
"""
- svn_client_import3(char path, char url, svn_depth_t depth, svn_boolean_t no_ignore,
- svn_boolean_t ignore_unknown_node_types,
- apr_hash_t revprop_table, svn_client_ctx_t ctx,
+ svn_client_import3(char const * path, char const * url, svn_depth_t depth, svn_boolean_t no_ignore,
+ svn_boolean_t ignore_unknown_node_types, apr_hash_t revprop_table, svn_client_ctx_t ctx,
apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_import3(*args)
def svn_client_import2(*args):
"""
- svn_client_import2(char path, char url, svn_boolean_t nonrecursive, svn_boolean_t no_ignore,
- svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_import2(char const * path, char const * url, svn_boolean_t nonrecursive, svn_boolean_t no_ignore,
+ svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_import2(*args)
def svn_client_import(*args):
"""
- svn_client_import(char path, char url, svn_boolean_t nonrecursive, svn_client_ctx_t ctx,
+ svn_client_import(char const * path, char const * url, svn_boolean_t nonrecursive, svn_client_ctx_t ctx,
apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_import(*args)
+def svn_client_commit6(*args):
+ """
+ svn_client_commit6(apr_array_header_t targets, svn_depth_t depth, svn_boolean_t keep_locks, svn_boolean_t keep_changelists,
+ svn_boolean_t commit_as_operations, svn_boolean_t include_file_externals,
+ svn_boolean_t include_dir_externals, apr_array_header_t changelists,
+ apr_hash_t revprop_table, svn_commit_callback2_t commit_callback,
+ svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ """
+ return _client.svn_client_commit6(*args)
+
def svn_client_commit5(*args):
"""
- svn_client_commit5(apr_array_header_t targets, svn_depth_t depth, svn_boolean_t keep_locks,
- svn_boolean_t keep_changelists,
- svn_boolean_t commit_as_operations,
- apr_array_header_t changelists, apr_hash_t revprop_table,
- svn_commit_callback2_t commit_callback,
- void commit_baton, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_commit5(apr_array_header_t targets, svn_depth_t depth, svn_boolean_t keep_locks, svn_boolean_t keep_changelists,
+ svn_boolean_t commit_as_operations, apr_array_header_t changelists,
+ apr_hash_t revprop_table, svn_commit_callback2_t commit_callback,
+ svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_commit5(*args)
def svn_client_commit4(*args):
"""
- svn_client_commit4(apr_array_header_t targets, svn_depth_t depth, svn_boolean_t keep_locks,
- svn_boolean_t keep_changelists,
+ svn_client_commit4(apr_array_header_t targets, svn_depth_t depth, svn_boolean_t keep_locks, svn_boolean_t keep_changelists,
apr_array_header_t changelists, apr_hash_t revprop_table,
svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
@@ -900,25 +881,20 @@ def svn_client_commit4(*args):
def svn_client_commit3(*args):
"""
- svn_client_commit3(apr_array_header_t targets, svn_boolean_t recurse,
- svn_boolean_t keep_locks, svn_client_ctx_t ctx,
+ svn_client_commit3(apr_array_header_t targets, svn_boolean_t recurse, svn_boolean_t keep_locks, svn_client_ctx_t ctx,
apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_commit3(*args)
def svn_client_commit2(*args):
"""
- svn_client_commit2(apr_array_header_t targets, svn_boolean_t recurse,
- svn_boolean_t keep_locks, svn_client_ctx_t ctx,
+ svn_client_commit2(apr_array_header_t targets, svn_boolean_t recurse, svn_boolean_t keep_locks, svn_client_ctx_t ctx,
apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_commit2(*args)
def svn_client_commit(*args):
- """
- svn_client_commit(apr_array_header_t targets, svn_boolean_t nonrecursive,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
- """
+ """svn_client_commit(apr_array_header_t targets, svn_boolean_t nonrecursive, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"""
return _client.svn_client_commit(*args)
class svn_client_status_t:
"""Proxy of C svn_client_status_t struct"""
@@ -989,6 +965,10 @@ class svn_client_status_t:
__swig_getmethods__["ood_changed_author"] = _client.svn_client_status_t_ood_changed_author_get
__swig_setmethods__["backwards_compatibility_baton"] = _client.svn_client_status_t_backwards_compatibility_baton_set
__swig_getmethods__["backwards_compatibility_baton"] = _client.svn_client_status_t_backwards_compatibility_baton_get
+ __swig_setmethods__["moved_from_abspath"] = _client.svn_client_status_t_moved_from_abspath_set
+ __swig_getmethods__["moved_from_abspath"] = _client.svn_client_status_t_moved_from_abspath_get
+ __swig_setmethods__["moved_to_abspath"] = _client.svn_client_status_t_moved_to_abspath_set
+ __swig_getmethods__["moved_to_abspath"] = _client.svn_client_status_t_moved_to_abspath_get
def set_parent_pool(self, parent_pool=None):
"""Create a new proxy object for svn_client_status_t"""
import libsvn.core, weakref
@@ -1032,7 +1012,7 @@ class svn_client_status_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_client_status_t"""
+ """__init__(svn_client_status_t self) -> svn_client_status_t"""
this = _client.new_svn_client_status_t()
try: self.this.append(this)
except: self.this = this
@@ -1048,542 +1028,510 @@ def svn_client_status_dup(*args):
def svn_client_status5(*args):
"""
- svn_client_status5(svn_client_ctx_t ctx, char path, svn_opt_revision_t revision,
- svn_depth_t depth, svn_boolean_t get_all,
- svn_boolean_t update, svn_boolean_t no_ignore,
- svn_boolean_t ignore_externals, svn_boolean_t depth_as_sticky,
- apr_array_header_t changelists,
- svn_client_status_func_t status_func,
- void status_baton, apr_pool_t scratch_pool) -> svn_error_t
+ svn_client_status5(svn_client_ctx_t ctx, char const * path, svn_opt_revision_t revision, svn_depth_t depth,
+ svn_boolean_t get_all, svn_boolean_t update, svn_boolean_t no_ignore,
+ svn_boolean_t ignore_externals, svn_boolean_t depth_as_sticky, apr_array_header_t changelists,
+ svn_client_status_func_t status_func, void * status_baton,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
return _client.svn_client_status5(*args)
def svn_client_status4(*args):
"""
- svn_client_status4(char path, svn_opt_revision_t revision, svn_wc_status_func3_t status_func,
- void status_baton, svn_depth_t depth,
- svn_boolean_t get_all, svn_boolean_t update,
- svn_boolean_t no_ignore, svn_boolean_t ignore_externals,
- apr_array_header_t changelists,
+ svn_client_status4(char const * path, svn_opt_revision_t revision, svn_wc_status_func3_t status_func,
+ void * status_baton, svn_depth_t depth, svn_boolean_t get_all, svn_boolean_t update,
+ svn_boolean_t no_ignore, svn_boolean_t ignore_externals, apr_array_header_t changelists,
svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_status4(*args)
def svn_client_status3(*args):
"""
- svn_client_status3(char path, svn_opt_revision_t revision, svn_wc_status_func2_t status_func,
- svn_depth_t depth, svn_boolean_t get_all,
- svn_boolean_t update, svn_boolean_t no_ignore,
- svn_boolean_t ignore_externals,
- apr_array_header_t changelists, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_status3(char const * path, svn_opt_revision_t revision, svn_wc_status_func2_t status_func,
+ svn_depth_t depth, svn_boolean_t get_all, svn_boolean_t update, svn_boolean_t no_ignore,
+ svn_boolean_t ignore_externals, apr_array_header_t changelists,
+ svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_status3(*args)
def svn_client_status2(*args):
"""
- svn_client_status2(char path, svn_opt_revision_t revision, svn_wc_status_func2_t status_func,
- svn_boolean_t recurse,
- svn_boolean_t get_all, svn_boolean_t update,
- svn_boolean_t no_ignore, svn_boolean_t ignore_externals,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_status2(char const * path, svn_opt_revision_t revision, svn_wc_status_func2_t status_func,
+ svn_boolean_t recurse, svn_boolean_t get_all, svn_boolean_t update, svn_boolean_t no_ignore,
+ svn_boolean_t ignore_externals, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_status2(*args)
def svn_client_status(*args):
"""
- svn_client_status(char path, svn_opt_revision_t revision, svn_wc_status_func_t status_func,
- svn_boolean_t recurse,
- svn_boolean_t get_all, svn_boolean_t update,
- svn_boolean_t no_ignore, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_status(char const * path, svn_opt_revision_t revision, svn_wc_status_func_t status_func,
+ svn_boolean_t recurse, svn_boolean_t get_all, svn_boolean_t update, svn_boolean_t no_ignore,
+ svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_status(*args)
def svn_client_log5(*args):
"""
- svn_client_log5(apr_array_header_t targets, svn_opt_revision_t peg_revision,
- apr_array_header_t revision_ranges,
- int limit, svn_boolean_t discover_changed_paths,
- svn_boolean_t strict_node_history, svn_boolean_t include_merged_revisions,
- apr_array_header_t revprops,
- svn_log_entry_receiver_t receiver,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_log5(apr_array_header_t targets, svn_opt_revision_t peg_revision, apr_array_header_t revision_ranges,
+ int limit, svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history,
+ svn_boolean_t include_merged_revisions, apr_array_header_t revprops,
+ svn_log_entry_receiver_t receiver, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_log5(*args)
def svn_client_log4(*args):
"""
- svn_client_log4(apr_array_header_t targets, svn_opt_revision_t peg_revision,
- svn_opt_revision_t start, svn_opt_revision_t end,
- int limit, svn_boolean_t discover_changed_paths,
- svn_boolean_t strict_node_history,
- svn_boolean_t include_merged_revisions,
- apr_array_header_t revprops, svn_log_entry_receiver_t receiver,
- svn_client_ctx_t ctx,
+ svn_client_log4(apr_array_header_t targets, svn_opt_revision_t peg_revision, svn_opt_revision_t start,
+ svn_opt_revision_t end, int limit, svn_boolean_t discover_changed_paths,
+ svn_boolean_t strict_node_history, svn_boolean_t include_merged_revisions,
+ apr_array_header_t revprops, svn_log_entry_receiver_t receiver, svn_client_ctx_t ctx,
apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_log4(*args)
def svn_client_log3(*args):
"""
- svn_client_log3(apr_array_header_t targets, svn_opt_revision_t peg_revision,
- svn_opt_revision_t start, svn_opt_revision_t end,
- int limit, svn_boolean_t discover_changed_paths,
- svn_boolean_t strict_node_history,
- svn_log_message_receiver_t receiver,
+ svn_client_log3(apr_array_header_t targets, svn_opt_revision_t peg_revision, svn_opt_revision_t start,
+ svn_opt_revision_t end, int limit, svn_boolean_t discover_changed_paths,
+ svn_boolean_t strict_node_history, svn_log_message_receiver_t receiver,
svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_log3(*args)
def svn_client_log2(*args):
"""
- svn_client_log2(apr_array_header_t targets, svn_opt_revision_t start,
- svn_opt_revision_t end, int limit, svn_boolean_t discover_changed_paths,
- svn_boolean_t strict_node_history,
- svn_log_message_receiver_t receiver,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_log2(apr_array_header_t targets, svn_opt_revision_t start, svn_opt_revision_t end, int limit,
+ svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history,
+ svn_log_message_receiver_t receiver, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_log2(*args)
def svn_client_log(*args):
"""
- svn_client_log(apr_array_header_t targets, svn_opt_revision_t start,
- svn_opt_revision_t end, svn_boolean_t discover_changed_paths,
- svn_boolean_t strict_node_history,
- svn_log_message_receiver_t receiver,
+ svn_client_log(apr_array_header_t targets, svn_opt_revision_t start, svn_opt_revision_t end, svn_boolean_t discover_changed_paths,
+ svn_boolean_t strict_node_history, svn_log_message_receiver_t receiver,
svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_log(*args)
def svn_client_blame5(*args):
"""
- svn_client_blame5(char path_or_url, svn_opt_revision_t peg_revision,
- svn_opt_revision_t start, svn_opt_revision_t end,
- svn_diff_file_options_t diff_options, svn_boolean_t ignore_mime_type,
- svn_boolean_t include_merged_revisions,
- svn_client_blame_receiver3_t receiver,
- void receiver_baton, svn_client_ctx_t ctx,
+ svn_client_blame5(char const * path_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t start,
+ svn_opt_revision_t end, svn_diff_file_options_t const * diff_options, svn_boolean_t ignore_mime_type,
+ svn_boolean_t include_merged_revisions, svn_client_blame_receiver3_t receiver,
+ void * receiver_baton, svn_client_ctx_t ctx,
apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_blame5(*args)
def svn_client_blame4(*args):
"""
- svn_client_blame4(char path_or_url, svn_opt_revision_t peg_revision,
- svn_opt_revision_t start, svn_opt_revision_t end,
- svn_diff_file_options_t diff_options, svn_boolean_t ignore_mime_type,
- svn_boolean_t include_merged_revisions,
- svn_client_blame_receiver2_t receiver,
- void receiver_baton, svn_client_ctx_t ctx,
+ svn_client_blame4(char const * path_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t start,
+ svn_opt_revision_t end, svn_diff_file_options_t const * diff_options, svn_boolean_t ignore_mime_type,
+ svn_boolean_t include_merged_revisions, svn_client_blame_receiver2_t receiver,
+ void * receiver_baton, svn_client_ctx_t ctx,
apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_blame4(*args)
def svn_client_blame3(*args):
"""
- svn_client_blame3(char path_or_url, svn_opt_revision_t peg_revision,
- svn_opt_revision_t start, svn_opt_revision_t end,
- svn_diff_file_options_t diff_options, svn_boolean_t ignore_mime_type,
- svn_client_blame_receiver_t receiver,
- svn_client_ctx_t ctx,
+ svn_client_blame3(char const * path_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t start,
+ svn_opt_revision_t end, svn_diff_file_options_t const * diff_options, svn_boolean_t ignore_mime_type,
+ svn_client_blame_receiver_t receiver, svn_client_ctx_t ctx,
apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_blame3(*args)
def svn_client_blame2(*args):
"""
- svn_client_blame2(char path_or_url, svn_opt_revision_t peg_revision,
- svn_opt_revision_t start, svn_opt_revision_t end,
- svn_client_blame_receiver_t receiver, svn_client_ctx_t ctx,
+ svn_client_blame2(char const * path_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t start,
+ svn_opt_revision_t end, svn_client_blame_receiver_t receiver, svn_client_ctx_t ctx,
apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_blame2(*args)
def svn_client_blame(*args):
"""
- svn_client_blame(char path_or_url, svn_opt_revision_t start, svn_opt_revision_t end,
- svn_client_blame_receiver_t receiver,
+ svn_client_blame(char const * path_or_url, svn_opt_revision_t start, svn_opt_revision_t end, svn_client_blame_receiver_t receiver,
svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_blame(*args)
-def svn_client_diff5(*args):
+def svn_client_diff6(*args):
"""
- svn_client_diff5(apr_array_header_t diff_options, char path1, svn_opt_revision_t revision1,
- char path2, svn_opt_revision_t revision2,
- char relative_to_dir, svn_depth_t depth,
- svn_boolean_t ignore_ancestry,
+ svn_client_diff6(apr_array_header_t diff_options, char const * path_or_url1, svn_opt_revision_t revision1,
+ char const * path_or_url2, svn_opt_revision_t revision2, char const * relative_to_dir,
+ svn_depth_t depth, svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_added,
svn_boolean_t no_diff_deleted, svn_boolean_t show_copies_as_adds,
- svn_boolean_t ignore_content_type,
- svn_boolean_t use_git_diff_format,
- char header_encoding, apr_file_t outfile,
- apr_file_t errfile, apr_array_header_t changelists,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_boolean_t ignore_content_type, svn_boolean_t ignore_properties,
+ svn_boolean_t properties_only, svn_boolean_t use_git_diff_format,
+ char const * header_encoding, svn_stream_t * outstream, svn_stream_t * errstream,
+ apr_array_header_t changelists, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ """
+ return _client.svn_client_diff6(*args)
+
+def svn_client_diff5(*args):
+ """
+ svn_client_diff5(apr_array_header_t diff_options, char const * path1, svn_opt_revision_t revision1,
+ char const * path2, svn_opt_revision_t revision2, char const * relative_to_dir,
+ svn_depth_t depth, svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted,
+ svn_boolean_t show_copies_as_adds, svn_boolean_t ignore_content_type,
+ svn_boolean_t use_git_diff_format, char const * header_encoding, apr_file_t outfile,
+ apr_file_t errfile, apr_array_header_t changelists, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_diff5(*args)
def svn_client_diff4(*args):
"""
- svn_client_diff4(apr_array_header_t diff_options, char path1, svn_opt_revision_t revision1,
- char path2, svn_opt_revision_t revision2,
- char relative_to_dir, svn_depth_t depth,
- svn_boolean_t ignore_ancestry,
- svn_boolean_t no_diff_deleted, svn_boolean_t ignore_content_type,
- char header_encoding,
+ svn_client_diff4(apr_array_header_t diff_options, char const * path1, svn_opt_revision_t revision1,
+ char const * path2, svn_opt_revision_t revision2, char const * relative_to_dir,
+ svn_depth_t depth, svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted,
+ svn_boolean_t ignore_content_type, char const * header_encoding,
apr_file_t outfile, apr_file_t errfile, apr_array_header_t changelists,
- svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_diff4(*args)
def svn_client_diff3(*args):
"""
- svn_client_diff3(apr_array_header_t diff_options, char path1, svn_opt_revision_t revision1,
- char path2, svn_opt_revision_t revision2,
- svn_boolean_t recurse, svn_boolean_t ignore_ancestry,
- svn_boolean_t no_diff_deleted,
- svn_boolean_t ignore_content_type,
- char header_encoding, apr_file_t outfile,
- apr_file_t errfile, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_diff3(apr_array_header_t diff_options, char const * path1, svn_opt_revision_t revision1,
+ char const * path2, svn_opt_revision_t revision2, svn_boolean_t recurse,
+ svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted, svn_boolean_t ignore_content_type,
+ char const * header_encoding, apr_file_t outfile, apr_file_t errfile,
+ svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_diff3(*args)
def svn_client_diff2(*args):
"""
- svn_client_diff2(apr_array_header_t diff_options, char path1, svn_opt_revision_t revision1,
- char path2, svn_opt_revision_t revision2,
- svn_boolean_t recurse, svn_boolean_t ignore_ancestry,
- svn_boolean_t no_diff_deleted,
- svn_boolean_t ignore_content_type,
- apr_file_t outfile, apr_file_t errfile,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_diff2(apr_array_header_t diff_options, char const * path1, svn_opt_revision_t revision1,
+ char const * path2, svn_opt_revision_t revision2, svn_boolean_t recurse,
+ svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted, svn_boolean_t ignore_content_type,
+ apr_file_t outfile, apr_file_t errfile, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_diff2(*args)
def svn_client_diff(*args):
"""
- svn_client_diff(apr_array_header_t diff_options, char path1, svn_opt_revision_t revision1,
- char path2, svn_opt_revision_t revision2,
- svn_boolean_t recurse, svn_boolean_t ignore_ancestry,
- svn_boolean_t no_diff_deleted,
- apr_file_t outfile, apr_file_t errfile,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_diff(apr_array_header_t diff_options, char const * path1, svn_opt_revision_t revision1,
+ char const * path2, svn_opt_revision_t revision2, svn_boolean_t recurse,
+ svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted, apr_file_t outfile,
+ apr_file_t errfile, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_diff(*args)
+def svn_client_diff_peg6(*args):
+ """
+ svn_client_diff_peg6(apr_array_header_t diff_options, char const * path_or_url, svn_opt_revision_t peg_revision,
+ svn_opt_revision_t start_revision, svn_opt_revision_t end_revision,
+ char const * relative_to_dir, svn_depth_t depth, svn_boolean_t ignore_ancestry,
+ svn_boolean_t no_diff_added, svn_boolean_t no_diff_deleted, svn_boolean_t show_copies_as_adds,
+ svn_boolean_t ignore_content_type, svn_boolean_t ignore_properties,
+ svn_boolean_t properties_only, svn_boolean_t use_git_diff_format,
+ char const * header_encoding, svn_stream_t * outstream, svn_stream_t * errstream,
+ apr_array_header_t changelists, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ """
+ return _client.svn_client_diff_peg6(*args)
+
def svn_client_diff_peg5(*args):
"""
- svn_client_diff_peg5(apr_array_header_t diff_options, char path, svn_opt_revision_t peg_revision,
- svn_opt_revision_t start_revision,
- svn_opt_revision_t end_revision,
- char relative_to_dir, svn_depth_t depth,
- svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted,
- svn_boolean_t show_copies_as_adds,
- svn_boolean_t ignore_content_type, svn_boolean_t use_git_diff_format,
- char header_encoding,
- apr_file_t outfile, apr_file_t errfile,
- apr_array_header_t changelists, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_diff_peg5(apr_array_header_t diff_options, char const * path, svn_opt_revision_t peg_revision,
+ svn_opt_revision_t start_revision, svn_opt_revision_t end_revision, char const * relative_to_dir,
+ svn_depth_t depth, svn_boolean_t ignore_ancestry,
+ svn_boolean_t no_diff_deleted, svn_boolean_t show_copies_as_adds, svn_boolean_t ignore_content_type,
+ svn_boolean_t use_git_diff_format, char const * header_encoding,
+ apr_file_t outfile, apr_file_t errfile, apr_array_header_t changelists,
+ svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_diff_peg5(*args)
def svn_client_diff_peg4(*args):
"""
- svn_client_diff_peg4(apr_array_header_t diff_options, char path, svn_opt_revision_t peg_revision,
- svn_opt_revision_t start_revision,
- svn_opt_revision_t end_revision,
- char relative_to_dir, svn_depth_t depth,
- svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted,
- svn_boolean_t ignore_content_type,
- char header_encoding, apr_file_t outfile,
- apr_file_t errfile, apr_array_header_t changelists,
+ svn_client_diff_peg4(apr_array_header_t diff_options, char const * path, svn_opt_revision_t peg_revision,
+ svn_opt_revision_t start_revision, svn_opt_revision_t end_revision, char const * relative_to_dir,
+ svn_depth_t depth, svn_boolean_t ignore_ancestry,
+ svn_boolean_t no_diff_deleted, svn_boolean_t ignore_content_type, char const * header_encoding,
+ apr_file_t outfile, apr_file_t errfile, apr_array_header_t changelists,
svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_diff_peg4(*args)
def svn_client_diff_peg3(*args):
"""
- svn_client_diff_peg3(apr_array_header_t diff_options, char path, svn_opt_revision_t peg_revision,
- svn_opt_revision_t start_revision,
- svn_opt_revision_t end_revision,
- svn_boolean_t recurse, svn_boolean_t ignore_ancestry,
- svn_boolean_t no_diff_deleted, svn_boolean_t ignore_content_type,
- char header_encoding,
- apr_file_t outfile, apr_file_t errfile,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_diff_peg3(apr_array_header_t diff_options, char const * path, svn_opt_revision_t peg_revision,
+ svn_opt_revision_t start_revision, svn_opt_revision_t end_revision, svn_boolean_t recurse,
+ svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted,
+ svn_boolean_t ignore_content_type, char const * header_encoding, apr_file_t outfile,
+ apr_file_t errfile, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_diff_peg3(*args)
def svn_client_diff_peg2(*args):
"""
- svn_client_diff_peg2(apr_array_header_t diff_options, char path, svn_opt_revision_t peg_revision,
- svn_opt_revision_t start_revision,
- svn_opt_revision_t end_revision,
- svn_boolean_t recurse, svn_boolean_t ignore_ancestry,
- svn_boolean_t no_diff_deleted, svn_boolean_t ignore_content_type,
- apr_file_t outfile,
- apr_file_t errfile, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_diff_peg2(apr_array_header_t diff_options, char const * path, svn_opt_revision_t peg_revision,
+ svn_opt_revision_t start_revision, svn_opt_revision_t end_revision, svn_boolean_t recurse,
+ svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted,
+ svn_boolean_t ignore_content_type, apr_file_t outfile, apr_file_t errfile,
+ svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_diff_peg2(*args)
def svn_client_diff_peg(*args):
"""
- svn_client_diff_peg(apr_array_header_t diff_options, char path, svn_opt_revision_t peg_revision,
- svn_opt_revision_t start_revision,
- svn_opt_revision_t end_revision,
- svn_boolean_t recurse, svn_boolean_t ignore_ancestry,
- svn_boolean_t no_diff_deleted, apr_file_t outfile,
- apr_file_t errfile, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_diff_peg(apr_array_header_t diff_options, char const * path, svn_opt_revision_t peg_revision,
+ svn_opt_revision_t start_revision, svn_opt_revision_t end_revision, svn_boolean_t recurse,
+ svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted,
+ apr_file_t outfile, apr_file_t errfile, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_diff_peg(*args)
def svn_client_diff_summarize2(*args):
"""
- svn_client_diff_summarize2(char path1, svn_opt_revision_t revision1, char path2,
- svn_opt_revision_t revision2, svn_depth_t depth,
- svn_boolean_t ignore_ancestry, apr_array_header_t changelists,
- svn_client_diff_summarize_func_t summarize_func,
- void summarize_baton,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_diff_summarize2(char const * path_or_url1, svn_opt_revision_t revision1, char const * path_or_url2,
+ svn_opt_revision_t revision2, svn_depth_t depth, svn_boolean_t ignore_ancestry,
+ apr_array_header_t changelists, svn_client_diff_summarize_func_t summarize_func,
+ void * summarize_baton, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_diff_summarize2(*args)
def svn_client_diff_summarize(*args):
"""
- svn_client_diff_summarize(char path1, svn_opt_revision_t revision1, char path2,
- svn_opt_revision_t revision2, svn_boolean_t recurse,
- svn_boolean_t ignore_ancestry, svn_client_diff_summarize_func_t summarize_func,
- void summarize_baton,
- svn_client_ctx_t ctx,
+ svn_client_diff_summarize(char const * path1, svn_opt_revision_t revision1, char const * path2, svn_opt_revision_t revision2,
+ svn_boolean_t recurse, svn_boolean_t ignore_ancestry, svn_client_diff_summarize_func_t summarize_func,
+ void * summarize_baton, svn_client_ctx_t ctx,
apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_diff_summarize(*args)
def svn_client_diff_summarize_peg2(*args):
"""
- svn_client_diff_summarize_peg2(char path, svn_opt_revision_t peg_revision, svn_opt_revision_t start_revision,
- svn_opt_revision_t end_revision,
- svn_depth_t depth, svn_boolean_t ignore_ancestry,
- apr_array_header_t changelists,
- svn_client_diff_summarize_func_t summarize_func,
- void summarize_baton, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_diff_summarize_peg2(char const * path_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t start_revision,
+ svn_opt_revision_t end_revision, svn_depth_t depth, svn_boolean_t ignore_ancestry,
+ apr_array_header_t changelists, svn_client_diff_summarize_func_t summarize_func,
+ void * summarize_baton, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_diff_summarize_peg2(*args)
def svn_client_diff_summarize_peg(*args):
"""
- svn_client_diff_summarize_peg(char path, svn_opt_revision_t peg_revision, svn_opt_revision_t start_revision,
- svn_opt_revision_t end_revision,
- svn_boolean_t recurse, svn_boolean_t ignore_ancestry,
- svn_client_diff_summarize_func_t summarize_func,
- void summarize_baton,
+ svn_client_diff_summarize_peg(char const * path, svn_opt_revision_t peg_revision, svn_opt_revision_t start_revision,
+ svn_opt_revision_t end_revision, svn_boolean_t recurse, svn_boolean_t ignore_ancestry,
+ svn_client_diff_summarize_func_t summarize_func, void * summarize_baton,
svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_diff_summarize_peg(*args)
+def svn_client_get_merging_summary(*args):
+ """
+ svn_client_get_merging_summary(char const * source_path_or_url, svn_opt_revision_t source_revision, char const * target_path_or_url,
+ svn_opt_revision_t target_revision, svn_client_ctx_t ctx,
+ apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t
+ """
+ return _client.svn_client_get_merging_summary(*args)
+
+def svn_client_merge5(*args):
+ """
+ svn_client_merge5(char const * source1, svn_opt_revision_t revision1, char const * source2, svn_opt_revision_t revision2,
+ char const * target_wcpath, svn_depth_t depth, svn_boolean_t ignore_mergeinfo,
+ svn_boolean_t diff_ignore_ancestry, svn_boolean_t force_delete,
+ svn_boolean_t record_only, svn_boolean_t dry_run, svn_boolean_t allow_mixed_rev,
+ apr_array_header_t merge_options, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
+ """
+ return _client.svn_client_merge5(*args)
+
def svn_client_merge4(*args):
"""
- svn_client_merge4(char source1, svn_opt_revision_t revision1, char source2,
- svn_opt_revision_t revision2, char target_wcpath,
- svn_depth_t depth, svn_boolean_t ignore_ancestry,
- svn_boolean_t force, svn_boolean_t record_only,
- svn_boolean_t dry_run, svn_boolean_t allow_mixed_rev,
- apr_array_header_t merge_options,
+ svn_client_merge4(char const * source1, svn_opt_revision_t revision1, char const * source2, svn_opt_revision_t revision2,
+ char const * target_wcpath, svn_depth_t depth, svn_boolean_t ignore_ancestry,
+ svn_boolean_t force_delete, svn_boolean_t record_only,
+ svn_boolean_t dry_run, svn_boolean_t allow_mixed_rev, apr_array_header_t merge_options,
svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_merge4(*args)
def svn_client_merge3(*args):
"""
- svn_client_merge3(char source1, svn_opt_revision_t revision1, char source2,
- svn_opt_revision_t revision2, char target_wcpath,
- svn_depth_t depth, svn_boolean_t ignore_ancestry,
- svn_boolean_t force, svn_boolean_t record_only,
- svn_boolean_t dry_run, apr_array_header_t merge_options,
- svn_client_ctx_t ctx,
+ svn_client_merge3(char const * source1, svn_opt_revision_t revision1, char const * source2, svn_opt_revision_t revision2,
+ char const * target_wcpath, svn_depth_t depth, svn_boolean_t ignore_ancestry,
+ svn_boolean_t force, svn_boolean_t record_only, svn_boolean_t dry_run,
+ apr_array_header_t merge_options, svn_client_ctx_t ctx,
apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_merge3(*args)
def svn_client_merge2(*args):
"""
- svn_client_merge2(char source1, svn_opt_revision_t revision1, char source2,
- svn_opt_revision_t revision2, char target_wcpath,
- svn_boolean_t recurse, svn_boolean_t ignore_ancestry,
- svn_boolean_t force, svn_boolean_t dry_run,
- apr_array_header_t merge_options,
+ svn_client_merge2(char const * source1, svn_opt_revision_t revision1, char const * source2, svn_opt_revision_t revision2,
+ char const * target_wcpath, svn_boolean_t recurse, svn_boolean_t ignore_ancestry,
+ svn_boolean_t force, svn_boolean_t dry_run, apr_array_header_t merge_options,
svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_merge2(*args)
def svn_client_merge(*args):
"""
- svn_client_merge(char source1, svn_opt_revision_t revision1, char source2,
- svn_opt_revision_t revision2, char target_wcpath,
- svn_boolean_t recurse, svn_boolean_t ignore_ancestry,
- svn_boolean_t force, svn_boolean_t dry_run,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_merge(char const * source1, svn_opt_revision_t revision1, char const * source2, svn_opt_revision_t revision2,
+ char const * target_wcpath, svn_boolean_t recurse, svn_boolean_t ignore_ancestry,
+ svn_boolean_t force, svn_boolean_t dry_run, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_merge(*args)
def svn_client_merge_reintegrate(*args):
"""
- svn_client_merge_reintegrate(char source, svn_opt_revision_t peg_revision, char target_wcpath,
+ svn_client_merge_reintegrate(char const * source_path_or_url, svn_opt_revision_t source_peg_revision, char const * target_wcpath,
svn_boolean_t dry_run, apr_array_header_t merge_options,
- svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_merge_reintegrate(*args)
+def svn_client_merge_peg5(*args):
+ """
+ svn_client_merge_peg5(char const * source_path_or_url, apr_array_header_t ranges_to_merge, svn_opt_revision_t source_peg_revision,
+ char const * target_wcpath, svn_depth_t depth,
+ svn_boolean_t ignore_mergeinfo, svn_boolean_t diff_ignore_ancestry, svn_boolean_t force_delete,
+ svn_boolean_t record_only, svn_boolean_t dry_run, svn_boolean_t allow_mixed_rev,
+ apr_array_header_t merge_options, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
+ """
+ return _client.svn_client_merge_peg5(*args)
+
def svn_client_merge_peg4(*args):
"""
- svn_client_merge_peg4(char source, apr_array_header_t ranges_to_merge, svn_opt_revision_t peg_revision,
- char target_wcpath,
- svn_depth_t depth, svn_boolean_t ignore_ancestry,
- svn_boolean_t force, svn_boolean_t record_only,
- svn_boolean_t dry_run, svn_boolean_t allow_mixed_rev,
- apr_array_header_t merge_options,
+ svn_client_merge_peg4(char const * source_path_or_url, apr_array_header_t ranges_to_merge, svn_opt_revision_t source_peg_revision,
+ char const * target_wcpath, svn_depth_t depth,
+ svn_boolean_t ignore_ancestry, svn_boolean_t force_delete, svn_boolean_t record_only,
+ svn_boolean_t dry_run, svn_boolean_t allow_mixed_rev, apr_array_header_t merge_options,
svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_merge_peg4(*args)
def svn_client_merge_peg3(*args):
"""
- svn_client_merge_peg3(char source, apr_array_header_t ranges_to_merge, svn_opt_revision_t peg_revision,
- char target_wcpath,
- svn_depth_t depth, svn_boolean_t ignore_ancestry,
- svn_boolean_t force, svn_boolean_t record_only,
- svn_boolean_t dry_run, apr_array_header_t merge_options,
- svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_merge_peg3(char const * source, apr_array_header_t ranges_to_merge, svn_opt_revision_t peg_revision,
+ char const * target_wcpath, svn_depth_t depth, svn_boolean_t ignore_ancestry,
+ svn_boolean_t force, svn_boolean_t record_only, svn_boolean_t dry_run,
+ apr_array_header_t merge_options, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_merge_peg3(*args)
def svn_client_merge_peg2(*args):
"""
- svn_client_merge_peg2(char source, svn_opt_revision_t revision1, svn_opt_revision_t revision2,
- svn_opt_revision_t peg_revision,
- char target_wcpath, svn_boolean_t recurse,
- svn_boolean_t ignore_ancestry, svn_boolean_t force,
- svn_boolean_t dry_run, apr_array_header_t merge_options,
- svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_merge_peg2(char const * source, svn_opt_revision_t revision1, svn_opt_revision_t revision2,
+ svn_opt_revision_t peg_revision, char const * target_wcpath, svn_boolean_t recurse,
+ svn_boolean_t ignore_ancestry, svn_boolean_t force, svn_boolean_t dry_run,
+ apr_array_header_t merge_options, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_merge_peg2(*args)
def svn_client_merge_peg(*args):
"""
- svn_client_merge_peg(char source, svn_opt_revision_t revision1, svn_opt_revision_t revision2,
- svn_opt_revision_t peg_revision,
- char target_wcpath, svn_boolean_t recurse,
- svn_boolean_t ignore_ancestry, svn_boolean_t force,
- svn_boolean_t dry_run, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_merge_peg(char const * source, svn_opt_revision_t revision1, svn_opt_revision_t revision2,
+ svn_opt_revision_t peg_revision, char const * target_wcpath, svn_boolean_t recurse,
+ svn_boolean_t ignore_ancestry, svn_boolean_t force, svn_boolean_t dry_run,
+ svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_merge_peg(*args)
def svn_client_suggest_merge_sources(*args):
"""
- svn_client_suggest_merge_sources(char path_or_url, svn_opt_revision_t peg_revision,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_suggest_merge_sources(char const * path_or_url, svn_opt_revision_t peg_revision, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_suggest_merge_sources(*args)
def svn_client_mergeinfo_get_merged(*args):
"""
- svn_client_mergeinfo_get_merged(char path_or_url, svn_opt_revision_t peg_revision,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_mergeinfo_get_merged(char const * path_or_url, svn_opt_revision_t peg_revision, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_mergeinfo_get_merged(*args)
+def svn_client_mergeinfo_log2(*args):
+ """
+ svn_client_mergeinfo_log2(svn_boolean_t finding_merged, char const * target_path_or_url, svn_opt_revision_t target_peg_revision,
+ char const * source_path_or_url, svn_opt_revision_t source_peg_revision,
+ svn_opt_revision_t source_start_revision, svn_opt_revision_t source_end_revision,
+ svn_log_entry_receiver_t receiver, svn_boolean_t discover_changed_paths,
+ svn_depth_t depth, apr_array_header_t revprops, svn_client_ctx_t ctx,
+ apr_pool_t scratch_pool) -> svn_error_t
+ """
+ return _client.svn_client_mergeinfo_log2(*args)
+
def svn_client_mergeinfo_log(*args):
"""
- svn_client_mergeinfo_log(svn_boolean_t finding_merged, char path_or_url, svn_opt_revision_t peg_revision,
- char merge_source_path_or_url,
- svn_opt_revision_t src_peg_revision,
+ svn_client_mergeinfo_log(svn_boolean_t finding_merged, char const * target_path_or_url, svn_opt_revision_t target_peg_revision,
+ char const * source_path_or_url, svn_opt_revision_t source_peg_revision,
svn_log_entry_receiver_t receiver, svn_boolean_t discover_changed_paths,
- svn_depth_t depth,
- apr_array_header_t revprops, svn_client_ctx_t ctx,
+ svn_depth_t depth, apr_array_header_t revprops, svn_client_ctx_t ctx,
apr_pool_t scratch_pool) -> svn_error_t
"""
return _client.svn_client_mergeinfo_log(*args)
def svn_client_mergeinfo_log_merged(*args):
"""
- svn_client_mergeinfo_log_merged(char path_or_url, svn_opt_revision_t peg_revision,
- char merge_source_path_or_url, svn_opt_revision_t src_peg_revision,
- svn_log_entry_receiver_t receiver,
- svn_boolean_t discover_changed_paths,
- apr_array_header_t revprops, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_mergeinfo_log_merged(char const * path_or_url, svn_opt_revision_t peg_revision, char const * merge_source_path_or_url,
+ svn_opt_revision_t src_peg_revision, svn_log_entry_receiver_t receiver,
+ svn_boolean_t discover_changed_paths, apr_array_header_t revprops,
+ svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_mergeinfo_log_merged(*args)
def svn_client_mergeinfo_log_eligible(*args):
"""
- svn_client_mergeinfo_log_eligible(char path_or_url, svn_opt_revision_t peg_revision,
- char merge_source_path_or_url, svn_opt_revision_t src_peg_revision,
- svn_log_entry_receiver_t receiver,
- svn_boolean_t discover_changed_paths,
- apr_array_header_t revprops, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_mergeinfo_log_eligible(char const * path_or_url, svn_opt_revision_t peg_revision, char const * merge_source_path_or_url,
+ svn_opt_revision_t src_peg_revision, svn_log_entry_receiver_t receiver,
+ svn_boolean_t discover_changed_paths, apr_array_header_t revprops,
+ svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_mergeinfo_log_eligible(*args)
def svn_client_cleanup(*args):
- """svn_client_cleanup(char dir, svn_client_ctx_t ctx, apr_pool_t scratch_pool) -> svn_error_t"""
+ """svn_client_cleanup(char const * dir, svn_client_ctx_t ctx, apr_pool_t scratch_pool) -> svn_error_t"""
return _client.svn_client_cleanup(*args)
def svn_client_upgrade(*args):
- """svn_client_upgrade(char wcroot_dir, svn_client_ctx_t ctx, apr_pool_t scratch_pool) -> svn_error_t"""
+ """svn_client_upgrade(char const * wcroot_dir, svn_client_ctx_t ctx, apr_pool_t scratch_pool) -> svn_error_t"""
return _client.svn_client_upgrade(*args)
def svn_client_relocate2(*args):
"""
- svn_client_relocate2(char wcroot_dir, char from_prefix, char to_prefix,
- svn_boolean_t ignore_externals, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_relocate2(char const * wcroot_dir, char const * from_prefix, char const * to_prefix, svn_boolean_t ignore_externals,
+ svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_relocate2(*args)
def svn_client_relocate(*args):
"""
- svn_client_relocate(char dir, char from_prefix, char to_prefix, svn_boolean_t recurse,
+ svn_client_relocate(char const * dir, char const * from_prefix, char const * to_prefix, svn_boolean_t recurse,
svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_relocate(*args)
def svn_client_revert2(*args):
"""
- svn_client_revert2(apr_array_header_t paths, svn_depth_t depth, apr_array_header_t changelists,
- svn_client_ctx_t ctx,
+ svn_client_revert2(apr_array_header_t paths, svn_depth_t depth, apr_array_header_t changelists, svn_client_ctx_t ctx,
apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_revert2(*args)
def svn_client_revert(*args):
- """
- svn_client_revert(apr_array_header_t paths, svn_boolean_t recursive,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
- """
+ """svn_client_revert(apr_array_header_t paths, svn_boolean_t recursive, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"""
return _client.svn_client_revert(*args)
def svn_client_resolved(*args):
- """
- svn_client_resolved(char path, svn_boolean_t recursive, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_client_resolved(char const * path, svn_boolean_t recursive, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"""
return _client.svn_client_resolved(*args)
def svn_client_resolve(*args):
"""
- svn_client_resolve(char path, svn_depth_t depth, svn_wc_conflict_choice_t conflict_choice,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_resolve(char const * path, svn_depth_t depth, svn_wc_conflict_choice_t conflict_choice, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_resolve(*args)
class svn_client_copy_source_t:
@@ -1642,7 +1590,7 @@ class svn_client_copy_source_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_client_copy_source_t"""
+ """__init__(svn_client_copy_source_t self) -> svn_client_copy_source_t"""
this = _client.new_svn_client_copy_source_t()
try: self.this.append(this)
except: self.this = this
@@ -1654,19 +1602,15 @@ svn_client_copy_source_t_swigregister(svn_client_copy_source_t)
def svn_client_copy6(*args):
"""
- svn_client_copy6(apr_array_header_t sources, char dst_path, svn_boolean_t copy_as_child,
- svn_boolean_t make_parents,
+ svn_client_copy6(apr_array_header_t sources, char const * dst_path, svn_boolean_t copy_as_child, svn_boolean_t make_parents,
svn_boolean_t ignore_externals, apr_hash_t revprop_table,
- svn_commit_callback2_t commit_callback,
- void commit_baton, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_commit_callback2_t commit_callback, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_copy6(*args)
def svn_client_copy5(*args):
"""
- svn_client_copy5(apr_array_header_t sources, char dst_path, svn_boolean_t copy_as_child,
- svn_boolean_t make_parents,
+ svn_client_copy5(apr_array_header_t sources, char const * dst_path, svn_boolean_t copy_as_child, svn_boolean_t make_parents,
svn_boolean_t ignore_externals, apr_hash_t revprop_table,
svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
@@ -1674,8 +1618,7 @@ def svn_client_copy5(*args):
def svn_client_copy4(*args):
"""
- svn_client_copy4(apr_array_header_t sources, char dst_path, svn_boolean_t copy_as_child,
- svn_boolean_t make_parents,
+ svn_client_copy4(apr_array_header_t sources, char const * dst_path, svn_boolean_t copy_as_child, svn_boolean_t make_parents,
apr_hash_t revprop_table, svn_client_ctx_t ctx,
apr_pool_t pool) -> svn_error_t
"""
@@ -1683,349 +1626,345 @@ def svn_client_copy4(*args):
def svn_client_copy3(*args):
"""
- svn_client_copy3(char src_path, svn_opt_revision_t src_revision, char dst_path,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_copy3(char const * src_path, svn_opt_revision_t src_revision, char const * dst_path, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_copy3(*args)
def svn_client_copy2(*args):
"""
- svn_client_copy2(char src_path, svn_opt_revision_t src_revision, char dst_path,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_copy2(char const * src_path, svn_opt_revision_t src_revision, char const * dst_path, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_copy2(*args)
def svn_client_copy(*args):
"""
- svn_client_copy(char src_path, svn_opt_revision_t src_revision, char dst_path,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_copy(char const * src_path, svn_opt_revision_t src_revision, char const * dst_path, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_copy(*args)
-def svn_client_move6(*args):
+def svn_client_move7(*args):
"""
- svn_client_move6(apr_array_header_t src_paths, char dst_path, svn_boolean_t move_as_child,
- svn_boolean_t make_parents,
+ svn_client_move7(apr_array_header_t src_paths, char const * dst_path, svn_boolean_t move_as_child,
+ svn_boolean_t make_parents, svn_boolean_t allow_mixed_revisions, svn_boolean_t metadata_only,
apr_hash_t revprop_table, svn_commit_callback2_t commit_callback,
- void commit_baton,
+ svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ """
+ return _client.svn_client_move7(*args)
+
+def svn_client_move6(*args):
+ """
+ svn_client_move6(apr_array_header_t src_paths, char const * dst_path, svn_boolean_t move_as_child,
+ svn_boolean_t make_parents, apr_hash_t revprop_table, svn_commit_callback2_t commit_callback,
svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_move6(*args)
def svn_client_move5(*args):
"""
- svn_client_move5(apr_array_header_t src_paths, char dst_path, svn_boolean_t force,
- svn_boolean_t move_as_child, svn_boolean_t make_parents,
- apr_hash_t revprop_table,
+ svn_client_move5(apr_array_header_t src_paths, char const * dst_path, svn_boolean_t force, svn_boolean_t move_as_child,
+ svn_boolean_t make_parents, apr_hash_t revprop_table,
svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_move5(*args)
def svn_client_move4(*args):
"""
- svn_client_move4(char src_path, char dst_path, svn_boolean_t force,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_move4(char const * src_path, char const * dst_path, svn_boolean_t force, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_move4(*args)
def svn_client_move3(*args):
"""
- svn_client_move3(char src_path, char dst_path, svn_boolean_t force,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_move3(char const * src_path, char const * dst_path, svn_boolean_t force, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_move3(*args)
def svn_client_move2(*args):
"""
- svn_client_move2(char src_path, char dst_path, svn_boolean_t force,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_move2(char const * src_path, char const * dst_path, svn_boolean_t force, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_move2(*args)
def svn_client_move(*args):
"""
- svn_client_move(char src_path, svn_opt_revision_t src_revision, char dst_path,
- svn_boolean_t force, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_move(char const * src_path, svn_opt_revision_t src_revision, char const * dst_path, svn_boolean_t force,
+ svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_move(*args)
def svn_client_propset_remote(*args):
"""
- svn_client_propset_remote(char propname, svn_string_t propval, char url, svn_boolean_t skip_checks,
- svn_revnum_t base_revision_for_url,
- apr_hash_t revprop_table, svn_commit_callback2_t commit_callback,
- void commit_baton,
- svn_client_ctx_t ctx, apr_pool_t scratch_pool) -> svn_error_t
+ svn_client_propset_remote(char const * propname, svn_string_t const * propval, char const * url, svn_boolean_t skip_checks,
+ svn_revnum_t base_revision_for_url, apr_hash_t revprop_table,
+ svn_commit_callback2_t commit_callback, svn_client_ctx_t ctx, apr_pool_t scratch_pool) -> svn_error_t
"""
return _client.svn_client_propset_remote(*args)
def svn_client_propset_local(*args):
"""
- svn_client_propset_local(char propname, svn_string_t propval, apr_array_header_t targets,
- svn_depth_t depth, svn_boolean_t skip_checks,
- apr_array_header_t changelists,
+ svn_client_propset_local(char const * propname, svn_string_t const * propval, apr_array_header_t targets,
+ svn_depth_t depth, svn_boolean_t skip_checks, apr_array_header_t changelists,
svn_client_ctx_t ctx, apr_pool_t scratch_pool) -> svn_error_t
"""
return _client.svn_client_propset_local(*args)
def svn_client_propset3(*args):
"""
- svn_client_propset3(char propname, svn_string_t propval, char target, svn_depth_t depth,
- svn_boolean_t skip_checks,
- svn_revnum_t base_revision_for_url, apr_array_header_t changelists,
- apr_hash_t revprop_table,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_propset3(char const * propname, svn_string_t const * propval, char const * target, svn_depth_t depth,
+ svn_boolean_t skip_checks, svn_revnum_t base_revision_for_url,
+ apr_array_header_t changelists, apr_hash_t revprop_table, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_propset3(*args)
def svn_client_propset2(*args):
"""
- svn_client_propset2(char propname, svn_string_t propval, char target, svn_boolean_t recurse,
- svn_boolean_t skip_checks,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_propset2(char const * propname, svn_string_t const * propval, char const * target, svn_boolean_t recurse,
+ svn_boolean_t skip_checks, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_propset2(*args)
def svn_client_propset(*args):
"""
- svn_client_propset(char propname, svn_string_t propval, char target, svn_boolean_t recurse,
+ svn_client_propset(char const * propname, svn_string_t const * propval, char const * target, svn_boolean_t recurse,
apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_propset(*args)
def svn_client_revprop_set2(*args):
"""
- svn_client_revprop_set2(char propname, svn_string_t propval, svn_string_t original_propval,
- char URL, svn_opt_revision_t revision,
- svn_boolean_t force, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_revprop_set2(char const * propname, svn_string_t const * propval, svn_string_t const * original_propval,
+ char const * URL, svn_opt_revision_t revision, svn_boolean_t force,
+ svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_revprop_set2(*args)
def svn_client_revprop_set(*args):
"""
- svn_client_revprop_set(char propname, svn_string_t propval, char URL, svn_opt_revision_t revision,
- svn_boolean_t force,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_revprop_set(char const * propname, svn_string_t const * propval, char const * URL, svn_opt_revision_t revision,
+ svn_boolean_t force, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_revprop_set(*args)
+def svn_client_propget5(*args):
+ """
+ svn_client_propget5(char const * propname, char const * target, svn_opt_revision_t peg_revision, svn_opt_revision_t revision,
+ svn_depth_t depth, apr_array_header_t changelists,
+ svn_client_ctx_t ctx, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t
+ """
+ return _client.svn_client_propget5(*args)
+
def svn_client_propget4(*args):
"""
- svn_client_propget4(char propname, char target, svn_opt_revision_t peg_revision,
- svn_opt_revision_t revision, svn_depth_t depth,
- apr_array_header_t changelists,
- svn_client_ctx_t ctx, apr_pool_t result_pool,
- apr_pool_t scratch_pool) -> svn_error_t
+ svn_client_propget4(char const * propname, char const * target, svn_opt_revision_t peg_revision, svn_opt_revision_t revision,
+ svn_depth_t depth, apr_array_header_t changelists,
+ svn_client_ctx_t ctx, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t
"""
return _client.svn_client_propget4(*args)
def svn_client_propget3(*args):
"""
- svn_client_propget3(char propname, char target, svn_opt_revision_t peg_revision,
- svn_opt_revision_t revision, svn_depth_t depth,
- apr_array_header_t changelists,
+ svn_client_propget3(char const * propname, char const * target, svn_opt_revision_t peg_revision, svn_opt_revision_t revision,
+ svn_depth_t depth, apr_array_header_t changelists,
svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_propget3(*args)
def svn_client_propget2(*args):
"""
- svn_client_propget2(char propname, char target, svn_opt_revision_t peg_revision,
- svn_opt_revision_t revision, svn_boolean_t recurse,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_propget2(char const * propname, char const * target, svn_opt_revision_t peg_revision, svn_opt_revision_t revision,
+ svn_boolean_t recurse, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_propget2(*args)
def svn_client_propget(*args):
"""
- svn_client_propget(char propname, char target, svn_opt_revision_t revision,
- svn_boolean_t recurse, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_propget(char const * propname, char const * target, svn_opt_revision_t revision, svn_boolean_t recurse,
+ svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_propget(*args)
def svn_client_revprop_get(*args):
"""
- svn_client_revprop_get(char propname, char URL, svn_opt_revision_t revision,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_revprop_get(char const * propname, char const * URL, svn_opt_revision_t revision, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_revprop_get(*args)
+def svn_client_proplist4(*args):
+ """
+ svn_client_proplist4(char const * target, svn_opt_revision_t peg_revision, svn_opt_revision_t revision,
+ svn_depth_t depth, apr_array_header_t changelists, svn_boolean_t get_target_inherited_props,
+ svn_proplist_receiver2_t receiver, svn_client_ctx_t ctx,
+ apr_pool_t scratch_pool) -> svn_error_t
+ """
+ return _client.svn_client_proplist4(*args)
+
def svn_client_proplist3(*args):
"""
- svn_client_proplist3(char target, svn_opt_revision_t peg_revision, svn_opt_revision_t revision,
- svn_depth_t depth, apr_array_header_t changelists,
- svn_proplist_receiver_t receiver,
- void receiver_baton, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_proplist3(char const * target, svn_opt_revision_t peg_revision, svn_opt_revision_t revision,
+ svn_depth_t depth, apr_array_header_t changelists, svn_proplist_receiver_t receiver,
+ void * receiver_baton, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_proplist3(*args)
def svn_client_proplist2(*args):
"""
- svn_client_proplist2(char target, svn_opt_revision_t peg_revision, svn_opt_revision_t revision,
- svn_boolean_t recurse,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_proplist2(char const * target, svn_opt_revision_t peg_revision, svn_opt_revision_t revision,
+ svn_boolean_t recurse, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_proplist2(*args)
def svn_client_proplist(*args):
"""
- svn_client_proplist(char target, svn_opt_revision_t revision, svn_boolean_t recurse,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_proplist(char const * target, svn_opt_revision_t revision, svn_boolean_t recurse, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_proplist(*args)
def svn_client_revprop_list(*args):
- """
- svn_client_revprop_list(char URL, svn_opt_revision_t revision, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_client_revprop_list(char const * URL, svn_opt_revision_t revision, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"""
return _client.svn_client_revprop_list(*args)
def svn_client_export5(*args):
"""
- svn_client_export5(char from_path_or_url, char to_path, svn_opt_revision_t peg_revision,
- svn_opt_revision_t revision,
- svn_boolean_t overwrite, svn_boolean_t ignore_externals,
- svn_boolean_t ignore_keywords,
- svn_depth_t depth, char native_eol, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_export5(char const * from_path_or_url, char const * to_path, svn_opt_revision_t peg_revision,
+ svn_opt_revision_t revision, svn_boolean_t overwrite, svn_boolean_t ignore_externals,
+ svn_boolean_t ignore_keywords, svn_depth_t depth, char const * native_eol,
+ svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_export5(*args)
def svn_client_export4(*args):
"""
- svn_client_export4(char from_path_or_url, char to_path, svn_opt_revision_t peg_revision,
- svn_opt_revision_t revision,
- svn_boolean_t overwrite, svn_boolean_t ignore_externals,
- svn_depth_t depth, char native_eol,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_export4(char const * from_path_or_url, char const * to_path, svn_opt_revision_t peg_revision,
+ svn_opt_revision_t revision, svn_boolean_t overwrite, svn_boolean_t ignore_externals,
+ svn_depth_t depth, char const * native_eol, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_export4(*args)
def svn_client_export3(*args):
"""
- svn_client_export3(char from_path_or_url, char to_path, svn_opt_revision_t peg_revision,
- svn_opt_revision_t revision,
- svn_boolean_t overwrite, svn_boolean_t ignore_externals,
- svn_boolean_t recurse, char native_eol,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_export3(char const * from_path_or_url, char const * to_path, svn_opt_revision_t peg_revision,
+ svn_opt_revision_t revision, svn_boolean_t overwrite, svn_boolean_t ignore_externals,
+ svn_boolean_t recurse, char const * native_eol, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_export3(*args)
def svn_client_export2(*args):
"""
- svn_client_export2(char from_path_or_url, char to_path, svn_opt_revision_t revision,
- svn_boolean_t force, char native_eol,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_export2(char const * from_path_or_url, char const * to_path, svn_opt_revision_t revision,
+ svn_boolean_t force, char const * native_eol, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_export2(*args)
def svn_client_export(*args):
"""
- svn_client_export(char from_path_or_url, char to_path, svn_opt_revision_t revision,
- svn_boolean_t force, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_export(char const * from_path_or_url, char const * to_path, svn_opt_revision_t revision,
+ svn_boolean_t force, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_export(*args)
+def svn_client_list3(*args):
+ """
+ svn_client_list3(char const * path_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t revision,
+ svn_depth_t depth, apr_uint32_t dirent_fields, svn_boolean_t fetch_locks,
+ svn_boolean_t include_externals, svn_client_list_func2_t list_func, void * baton,
+ svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ """
+ return _client.svn_client_list3(*args)
+
def svn_client_list2(*args):
"""
- svn_client_list2(char path_or_url, svn_opt_revision_t peg_revision,
- svn_opt_revision_t revision, svn_depth_t depth,
- apr_uint32_t dirent_fields, svn_boolean_t fetch_locks,
- svn_client_list_func_t list_func,
- void baton, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_list2(char const * path_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t revision,
+ svn_depth_t depth, apr_uint32_t dirent_fields, svn_boolean_t fetch_locks,
+ svn_client_list_func_t list_func, void * baton, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_list2(*args)
def svn_client_list(*args):
"""
- svn_client_list(char path_or_url, svn_opt_revision_t peg_revision,
- svn_opt_revision_t revision, svn_boolean_t recurse,
- apr_uint32_t dirent_fields, svn_boolean_t fetch_locks,
- svn_client_list_func_t list_func,
- void baton, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_list(char const * path_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t revision,
+ svn_boolean_t recurse, apr_uint32_t dirent_fields, svn_boolean_t fetch_locks,
+ svn_client_list_func_t list_func, void * baton, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_list(*args)
def svn_client_ls3(*args):
"""
- svn_client_ls3(char path_or_url, svn_opt_revision_t peg_revision,
- svn_opt_revision_t revision, svn_boolean_t recurse,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_ls3(char const * path_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t revision,
+ svn_boolean_t recurse, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_ls3(*args)
def svn_client_ls2(*args):
"""
- svn_client_ls2(char path_or_url, svn_opt_revision_t peg_revision,
- svn_opt_revision_t revision, svn_boolean_t recurse,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_ls2(char const * path_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t revision,
+ svn_boolean_t recurse, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_ls2(*args)
def svn_client_ls(*args):
"""
- svn_client_ls(char path_or_url, svn_opt_revision_t revision, svn_boolean_t recurse,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_ls(char const * path_or_url, svn_opt_revision_t revision, svn_boolean_t recurse, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_ls(*args)
def svn_client_cat2(*args):
"""
- svn_client_cat2(svn_stream_t out, char path_or_url, svn_opt_revision_t peg_revision,
- svn_opt_revision_t revision,
+ svn_client_cat2(svn_stream_t * out, char const * path_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t revision,
svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_cat2(*args)
def svn_client_cat(*args):
"""
- svn_client_cat(svn_stream_t out, char path_or_url, svn_opt_revision_t revision,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_cat(svn_stream_t * out, char const * path_or_url, svn_opt_revision_t revision, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_cat(*args)
def svn_client_add_to_changelist(*args):
"""
- svn_client_add_to_changelist(apr_array_header_t paths, char changelist, svn_depth_t depth,
- apr_array_header_t changelists, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_add_to_changelist(apr_array_header_t paths, char const * changelist, svn_depth_t depth, apr_array_header_t changelists,
+ svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_add_to_changelist(*args)
def svn_client_remove_from_changelists(*args):
"""
- svn_client_remove_from_changelists(apr_array_header_t paths, svn_depth_t depth, apr_array_header_t changelists,
- svn_client_ctx_t ctx,
+ svn_client_remove_from_changelists(apr_array_header_t paths, svn_depth_t depth, apr_array_header_t changelists, svn_client_ctx_t ctx,
apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_remove_from_changelists(*args)
def svn_client_get_changelists(*args):
"""
- svn_client_get_changelists(char path, apr_array_header_t changelists, svn_depth_t depth,
- svn_changelist_receiver_t callback_func,
+ svn_client_get_changelists(char const * path, apr_array_header_t changelists, svn_depth_t depth, svn_changelist_receiver_t callback_func,
svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_get_changelists(*args)
def svn_client_lock(*args):
"""
- svn_client_lock(apr_array_header_t targets, char comment, svn_boolean_t steal_lock,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
+ svn_client_lock(apr_array_header_t targets, char const * comment, svn_boolean_t steal_lock, svn_client_ctx_t ctx,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_lock(*args)
def svn_client_unlock(*args):
- """
- svn_client_unlock(apr_array_header_t targets, svn_boolean_t break_lock,
- svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
- """
+ """svn_client_unlock(apr_array_header_t targets, svn_boolean_t break_lock, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"""
return _client.svn_client_unlock(*args)
class svn_info_t:
"""Proxy of C svn_info_t struct"""
@@ -2131,7 +2070,7 @@ class svn_info_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_info_t"""
+ """__init__(svn_info_t self) -> svn_info_t"""
this = _client.new_svn_info_t()
try: self.this.append(this)
except: self.this = this
@@ -2216,7 +2155,7 @@ class svn_client_info2_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_client_info2_t"""
+ """__init__(svn_client_info2_t self) -> svn_client_info2_t"""
this = _client.new_svn_client_info2_t()
try: self.this.append(this)
except: self.this = this
@@ -2232,197 +2171,254 @@ def svn_client_info2_dup(*args):
def svn_client_info3(*args):
"""
- svn_client_info3(char abspath_or_url, svn_opt_revision_t peg_revision,
- svn_opt_revision_t revision, svn_depth_t depth,
- svn_boolean_t fetch_excluded, svn_boolean_t fetch_actual_only,
- apr_array_header_t changelists,
- svn_client_info_receiver2_t receiver,
- void receiver_baton, svn_client_ctx_t ctx,
- apr_pool_t scratch_pool) -> svn_error_t
+ svn_client_info3(char const * abspath_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t revision,
+ svn_depth_t depth, svn_boolean_t fetch_excluded, svn_boolean_t fetch_actual_only,
+ apr_array_header_t changelists, svn_client_info_receiver2_t receiver,
+ void * receiver_baton, svn_client_ctx_t ctx, apr_pool_t scratch_pool) -> svn_error_t
"""
return _client.svn_client_info3(*args)
def svn_client_info2(*args):
"""
- svn_client_info2(char path_or_url, svn_opt_revision_t peg_revision,
- svn_opt_revision_t revision, svn_info_receiver_t receiver,
- svn_depth_t depth, apr_array_header_t changelists,
+ svn_client_info2(char const * path_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t revision,
+ svn_info_receiver_t receiver, svn_depth_t depth, apr_array_header_t changelists,
svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_info2(*args)
def svn_client_info(*args):
"""
- svn_client_info(char path_or_url, svn_opt_revision_t peg_revision,
- svn_opt_revision_t revision, svn_info_receiver_t receiver,
- svn_boolean_t recurse, svn_client_ctx_t ctx,
+ svn_client_info(char const * path_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t revision,
+ svn_info_receiver_t receiver, svn_boolean_t recurse, svn_client_ctx_t ctx,
apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_info(*args)
def svn_client_get_wc_root(*args):
- """
- svn_client_get_wc_root(char local_abspath, svn_client_ctx_t ctx, apr_pool_t result_pool,
- apr_pool_t scratch_pool) -> svn_error_t
- """
+ """svn_client_get_wc_root(char const * local_abspath, svn_client_ctx_t ctx, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
return _client.svn_client_get_wc_root(*args)
def svn_client_min_max_revisions(*args):
- """
- svn_client_min_max_revisions(char local_abspath, svn_boolean_t committed, svn_client_ctx_t ctx,
- apr_pool_t scratch_pool) -> svn_error_t
- """
+ """svn_client_min_max_revisions(char const * local_abspath, svn_boolean_t committed, svn_client_ctx_t ctx, apr_pool_t scratch_pool) -> svn_error_t"""
return _client.svn_client_min_max_revisions(*args)
def svn_client_patch(*args):
"""
- svn_client_patch(char patch_abspath, char wc_dir_abspath, svn_boolean_t dry_run,
- int strip_count, svn_boolean_t reverse,
- svn_boolean_t ignore_whitespace, svn_boolean_t remove_tempfiles,
- svn_client_patch_func_t patch_func,
- void patch_baton, svn_client_ctx_t ctx,
- apr_pool_t scratch_pool) -> svn_error_t
+ svn_client_patch(char const * patch_abspath, char const * wc_dir_abspath, svn_boolean_t dry_run, int strip_count,
+ svn_boolean_t reverse, svn_boolean_t ignore_whitespace, svn_boolean_t remove_tempfiles,
+ svn_client_patch_func_t patch_func, void * patch_baton,
+ svn_client_ctx_t ctx, apr_pool_t scratch_pool) -> svn_error_t
"""
return _client.svn_client_patch(*args)
def svn_client_url_from_path2(*args):
- """
- svn_client_url_from_path2(char path_or_url, svn_client_ctx_t ctx, apr_pool_t result_pool,
- apr_pool_t scratch_pool) -> svn_error_t
- """
+ """svn_client_url_from_path2(char const * path_or_url, svn_client_ctx_t ctx, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
return _client.svn_client_url_from_path2(*args)
def svn_client_url_from_path(*args):
- """svn_client_url_from_path(char path_or_url, apr_pool_t pool) -> svn_error_t"""
+ """svn_client_url_from_path(char const * path_or_url, apr_pool_t pool) -> svn_error_t"""
return _client.svn_client_url_from_path(*args)
+def svn_client_get_repos_root(*args):
+ """svn_client_get_repos_root(char const * abspath_or_url, svn_client_ctx_t ctx, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
+ return _client.svn_client_get_repos_root(*args)
+
def svn_client_root_url_from_path(*args):
- """svn_client_root_url_from_path(char path_or_url, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"""
+ """svn_client_root_url_from_path(char const * path_or_url, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"""
return _client.svn_client_root_url_from_path(*args)
def svn_client_uuid_from_url(*args):
- """svn_client_uuid_from_url(char url, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"""
+ """svn_client_uuid_from_url(char const * url, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"""
return _client.svn_client_uuid_from_url(*args)
def svn_client_uuid_from_path2(*args):
- """
- svn_client_uuid_from_path2(char local_abspath, svn_client_ctx_t ctx, apr_pool_t result_pool,
- apr_pool_t scratch_pool) -> svn_error_t
- """
+ """svn_client_uuid_from_path2(char const * local_abspath, svn_client_ctx_t ctx, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
return _client.svn_client_uuid_from_path2(*args)
def svn_client_uuid_from_path(*args):
+ """svn_client_uuid_from_path(char const * path, svn_wc_adm_access_t * adm_access, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"""
+ return _client.svn_client_uuid_from_path(*args)
+
+def svn_client_open_ra_session2(*args):
"""
- svn_client_uuid_from_path(char path, svn_wc_adm_access_t adm_access, svn_client_ctx_t ctx,
- apr_pool_t pool) -> svn_error_t
+ svn_client_open_ra_session2(char const * url, char const * wri_abspath, svn_client_ctx_t ctx, apr_pool_t result_pool,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
- return _client.svn_client_uuid_from_path(*args)
+ return _client.svn_client_open_ra_session2(*args)
def svn_client_open_ra_session(*args):
- """svn_client_open_ra_session(char url, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"""
+ """svn_client_open_ra_session(char const * url, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"""
return _client.svn_client_open_ra_session(*args)
+def svn_proplist_invoke_receiver2(*args):
+ """
+ svn_proplist_invoke_receiver2(svn_proplist_receiver2_t _obj, void * baton, char const * path, apr_hash_t prop_hash,
+ apr_array_header_t inherited_props, apr_pool_t scratch_pool) -> svn_error_t
+ """
+ return _client.svn_proplist_invoke_receiver2(*args)
+
def svn_proplist_invoke_receiver(*args):
"""
- svn_proplist_invoke_receiver(svn_proplist_receiver_t _obj, void baton, char path,
- apr_hash_t prop_hash, apr_pool_t pool) -> svn_error_t
+ svn_proplist_invoke_receiver(svn_proplist_receiver_t _obj, void * baton, char const * path, apr_hash_t prop_hash,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_proplist_invoke_receiver(*args)
def svn_client_invoke_get_commit_log3(*args):
"""
- svn_client_invoke_get_commit_log3(svn_client_get_commit_log3_t _obj, apr_array_header_t commit_items,
- void baton, apr_pool_t pool) -> svn_error_t
+ svn_client_invoke_get_commit_log3(svn_client_get_commit_log3_t _obj, apr_array_header_t commit_items, void * baton,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_invoke_get_commit_log3(*args)
def svn_client_invoke_get_commit_log2(*args):
"""
- svn_client_invoke_get_commit_log2(svn_client_get_commit_log2_t _obj, apr_array_header_t commit_items,
- void baton, apr_pool_t pool) -> svn_error_t
+ svn_client_invoke_get_commit_log2(svn_client_get_commit_log2_t _obj, apr_array_header_t commit_items, void * baton,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_invoke_get_commit_log2(*args)
def svn_client_invoke_get_commit_log(*args):
"""
- svn_client_invoke_get_commit_log(svn_client_get_commit_log_t _obj, apr_array_header_t commit_items,
- void baton, apr_pool_t pool) -> svn_error_t
+ svn_client_invoke_get_commit_log(svn_client_get_commit_log_t _obj, apr_array_header_t commit_items, void * baton,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_invoke_get_commit_log(*args)
def svn_client_invoke_blame_receiver3(*args):
"""
- svn_client_invoke_blame_receiver3(svn_client_blame_receiver3_t _obj, void baton, svn_revnum_t start_revnum,
- svn_revnum_t end_revnum,
- apr_int64_t line_no, svn_revnum_t revision,
- apr_hash_t rev_props, svn_revnum_t merged_revision,
- apr_hash_t merged_rev_props, char merged_path,
- char line, svn_boolean_t local_change,
- apr_pool_t pool) -> svn_error_t
+ svn_client_invoke_blame_receiver3(svn_client_blame_receiver3_t _obj, void * baton, svn_revnum_t start_revnum, svn_revnum_t end_revnum,
+ apr_int64_t line_no, svn_revnum_t revision, apr_hash_t rev_props,
+ svn_revnum_t merged_revision, apr_hash_t merged_rev_props, char const * merged_path,
+ char const * line, svn_boolean_t local_change, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_invoke_blame_receiver3(*args)
def svn_client_invoke_blame_receiver2(*args):
"""
- svn_client_invoke_blame_receiver2(svn_client_blame_receiver2_t _obj, void baton, apr_int64_t line_no,
- svn_revnum_t revision, char author,
- char date, svn_revnum_t merged_revision,
- char merged_author, char merged_date, char merged_path,
- char line, apr_pool_t pool) -> svn_error_t
+ svn_client_invoke_blame_receiver2(svn_client_blame_receiver2_t _obj, void * baton, apr_int64_t line_no, svn_revnum_t revision,
+ char const * author, char const * date, svn_revnum_t merged_revision,
+ char const * merged_author, char const * merged_date, char const * merged_path,
+ char const * line, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_invoke_blame_receiver2(*args)
def svn_client_invoke_blame_receiver(*args):
"""
- svn_client_invoke_blame_receiver(svn_client_blame_receiver_t _obj, void baton, apr_int64_t line_no,
- svn_revnum_t revision, char author,
- char date, char line, apr_pool_t pool) -> svn_error_t
+ svn_client_invoke_blame_receiver(svn_client_blame_receiver_t _obj, void * baton, apr_int64_t line_no, svn_revnum_t revision,
+ char const * author, char const * date, char const * line, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_invoke_blame_receiver(*args)
def svn_client_invoke_diff_summarize_func(*args):
"""
- svn_client_invoke_diff_summarize_func(svn_client_diff_summarize_func_t _obj, svn_client_diff_summarize_t diff,
- void baton, apr_pool_t pool) -> svn_error_t
+ svn_client_invoke_diff_summarize_func(svn_client_diff_summarize_func_t _obj, svn_client_diff_summarize_t diff, void * baton,
+ apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_invoke_diff_summarize_func(*args)
+def svn_client_invoke_import_filter_func(*args):
+ """
+ svn_client_invoke_import_filter_func(svn_client_import_filter_func_t _obj, void * baton, char const * local_abspath, svn_io_dirent2_t dirent,
+ apr_pool_t scratch_pool) -> svn_error_t
+ """
+ return _client.svn_client_invoke_import_filter_func(*args)
+
def svn_client_invoke_status_func(*args):
"""
- svn_client_invoke_status_func(svn_client_status_func_t _obj, void baton, char path,
- svn_client_status_t status, apr_pool_t scratch_pool) -> svn_error_t
+ svn_client_invoke_status_func(svn_client_status_func_t _obj, void * baton, char const * path, svn_client_status_t status,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
return _client.svn_client_invoke_status_func(*args)
+def svn_client_invoke_list_func2(*args):
+ """
+ svn_client_invoke_list_func2(svn_client_list_func2_t _obj, void * baton, char const * path, svn_dirent_t dirent,
+ svn_lock_t lock, char const * abs_path, char const * external_parent_url,
+ char const * external_target, apr_pool_t scratch_pool) -> svn_error_t
+ """
+ return _client.svn_client_invoke_list_func2(*args)
+
def svn_client_invoke_list_func(*args):
"""
- svn_client_invoke_list_func(svn_client_list_func_t _obj, void baton, char path,
- svn_dirent_t dirent, svn_lock_t lock, char abs_path,
- apr_pool_t pool) -> svn_error_t
+ svn_client_invoke_list_func(svn_client_list_func_t _obj, void * baton, char const * path, svn_dirent_t dirent,
+ svn_lock_t lock, char const * abs_path, apr_pool_t pool) -> svn_error_t
"""
return _client.svn_client_invoke_list_func(*args)
def svn_info_invoke_receiver(*args):
- """
- svn_info_invoke_receiver(svn_info_receiver_t _obj, void baton, char path, svn_info_t info,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_info_invoke_receiver(svn_info_receiver_t _obj, void * baton, char const * path, svn_info_t info, apr_pool_t pool) -> svn_error_t"""
return _client.svn_info_invoke_receiver(*args)
def svn_client_invoke_info_receiver2(*args):
"""
- svn_client_invoke_info_receiver2(svn_client_info_receiver2_t _obj, void baton, char abspath_or_url,
- svn_client_info2_t info, apr_pool_t scratch_pool) -> svn_error_t
+ svn_client_invoke_info_receiver2(svn_client_info_receiver2_t _obj, void * baton, char const * abspath_or_url, svn_client_info2_t info,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
return _client.svn_client_invoke_info_receiver2(*args)
def svn_client_invoke_patch_func(*args):
"""
- svn_client_invoke_patch_func(svn_client_patch_func_t _obj, void baton, char canon_path_from_patchfile,
- char patch_abspath, char reject_abspath,
- apr_pool_t scratch_pool) -> svn_error_t
+ svn_client_invoke_patch_func(svn_client_patch_func_t _obj, void * baton, char const * canon_path_from_patchfile,
+ char const * patch_abspath, char const * reject_abspath, apr_pool_t scratch_pool) -> svn_error_t
"""
return _client.svn_client_invoke_patch_func(*args)
+class svn_proplist_receiver2_t:
+ """Proxy of C svn_proplist_receiver2_t struct"""
+ __swig_setmethods__ = {}
+ __setattr__ = lambda self, name, value: _swig_setattr(self, svn_proplist_receiver2_t, name, value)
+ __swig_getmethods__ = {}
+ __getattr__ = lambda self, name: _swig_getattr(self, svn_proplist_receiver2_t, name)
+ def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+ __repr__ = _swig_repr
+ def set_parent_pool(self, parent_pool=None):
+ """Create a new proxy object for svn_proplist_receiver2_t"""
+ import libsvn.core, weakref
+ self.__dict__["_parent_pool"] = \
+ parent_pool or libsvn.core.application_pool;
+ if self.__dict__["_parent_pool"]:
+ self.__dict__["_is_valid"] = weakref.ref(
+ self.__dict__["_parent_pool"]._is_valid)
+
+ def assert_valid(self):
+ """Assert that this object is using valid pool memory"""
+ if "_is_valid" in self.__dict__:
+ assert self.__dict__["_is_valid"](), "Variable has already been deleted"
+
+ def __getattr__(self, name):
+ """Get an attribute from this object"""
+ self.assert_valid()
+
+ value = _swig_getattr(self, self.__class__, name)
+
+
+
+ members = self.__dict__.get("_members")
+ if members is not None:
+ _copy_metadata_deep(value, members.get(name))
+
+
+ _assert_valid_deep(value)
+
+ return value
+
+ def __setattr__(self, name, value):
+ """Set an attribute on this object"""
+ self.assert_valid()
+
+
+
+
+ self.__dict__.setdefault("_members",{})[name] = value
+
+ return _swig_setattr(self, self.__class__, name, value)
+
+ def __call__(self, *args):
+ return svn_proplist_invoke_receiver2(self, *args)
+
+svn_proplist_receiver2_t_swigregister = _client.svn_proplist_receiver2_t_swigregister
+svn_proplist_receiver2_t_swigregister(svn_proplist_receiver2_t)
+
class svn_proplist_receiver_t:
"""Proxy of C svn_proplist_receiver_t struct"""
__swig_setmethods__ = {}
@@ -2871,6 +2867,62 @@ class svn_client_diff_summarize_func_t:
svn_client_diff_summarize_func_t_swigregister = _client.svn_client_diff_summarize_func_t_swigregister
svn_client_diff_summarize_func_t_swigregister(svn_client_diff_summarize_func_t)
+class svn_client_import_filter_func_t:
+ """Proxy of C svn_client_import_filter_func_t struct"""
+ __swig_setmethods__ = {}
+ __setattr__ = lambda self, name, value: _swig_setattr(self, svn_client_import_filter_func_t, name, value)
+ __swig_getmethods__ = {}
+ __getattr__ = lambda self, name: _swig_getattr(self, svn_client_import_filter_func_t, name)
+ def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+ __repr__ = _swig_repr
+ def set_parent_pool(self, parent_pool=None):
+ """Create a new proxy object for svn_client_import_filter_func_t"""
+ import libsvn.core, weakref
+ self.__dict__["_parent_pool"] = \
+ parent_pool or libsvn.core.application_pool;
+ if self.__dict__["_parent_pool"]:
+ self.__dict__["_is_valid"] = weakref.ref(
+ self.__dict__["_parent_pool"]._is_valid)
+
+ def assert_valid(self):
+ """Assert that this object is using valid pool memory"""
+ if "_is_valid" in self.__dict__:
+ assert self.__dict__["_is_valid"](), "Variable has already been deleted"
+
+ def __getattr__(self, name):
+ """Get an attribute from this object"""
+ self.assert_valid()
+
+ value = _swig_getattr(self, self.__class__, name)
+
+
+
+ members = self.__dict__.get("_members")
+ if members is not None:
+ _copy_metadata_deep(value, members.get(name))
+
+
+ _assert_valid_deep(value)
+
+ return value
+
+ def __setattr__(self, name, value):
+ """Set an attribute on this object"""
+ self.assert_valid()
+
+
+
+
+ self.__dict__.setdefault("_members",{})[name] = value
+
+ return _swig_setattr(self, self.__class__, name, value)
+
+ def __call__(self, *args):
+ return svn_client_invoke_import_filter_func(self, *args)
+
+svn_client_import_filter_func_t_swigregister = _client.svn_client_import_filter_func_t_swigregister
+svn_client_import_filter_func_t_swigregister(svn_client_import_filter_func_t)
+
class svn_client_status_func_t:
"""Proxy of C svn_client_status_func_t struct"""
__swig_setmethods__ = {}
@@ -2927,6 +2979,62 @@ class svn_client_status_func_t:
svn_client_status_func_t_swigregister = _client.svn_client_status_func_t_swigregister
svn_client_status_func_t_swigregister(svn_client_status_func_t)
+class svn_client_list_func2_t:
+ """Proxy of C svn_client_list_func2_t struct"""
+ __swig_setmethods__ = {}
+ __setattr__ = lambda self, name, value: _swig_setattr(self, svn_client_list_func2_t, name, value)
+ __swig_getmethods__ = {}
+ __getattr__ = lambda self, name: _swig_getattr(self, svn_client_list_func2_t, name)
+ def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+ __repr__ = _swig_repr
+ def set_parent_pool(self, parent_pool=None):
+ """Create a new proxy object for svn_client_list_func2_t"""
+ import libsvn.core, weakref
+ self.__dict__["_parent_pool"] = \
+ parent_pool or libsvn.core.application_pool;
+ if self.__dict__["_parent_pool"]:
+ self.__dict__["_is_valid"] = weakref.ref(
+ self.__dict__["_parent_pool"]._is_valid)
+
+ def assert_valid(self):
+ """Assert that this object is using valid pool memory"""
+ if "_is_valid" in self.__dict__:
+ assert self.__dict__["_is_valid"](), "Variable has already been deleted"
+
+ def __getattr__(self, name):
+ """Get an attribute from this object"""
+ self.assert_valid()
+
+ value = _swig_getattr(self, self.__class__, name)
+
+
+
+ members = self.__dict__.get("_members")
+ if members is not None:
+ _copy_metadata_deep(value, members.get(name))
+
+
+ _assert_valid_deep(value)
+
+ return value
+
+ def __setattr__(self, name, value):
+ """Set an attribute on this object"""
+ self.assert_valid()
+
+
+
+
+ self.__dict__.setdefault("_members",{})[name] = value
+
+ return _swig_setattr(self, self.__class__, name, value)
+
+ def __call__(self, *args):
+ return svn_client_invoke_list_func2(self, *args)
+
+svn_client_list_func2_t_swigregister = _client.svn_client_list_func2_t_swigregister
+svn_client_list_func2_t_swigregister(svn_client_list_func2_t)
+
class svn_client_list_func_t:
"""Proxy of C svn_client_list_func_t struct"""
__swig_setmethods__ = {}
@@ -3155,6 +3263,7 @@ SWIG_SVN_INFO_SIZE_UNKNOWN = _client.SWIG_SVN_INFO_SIZE_UNKNOWN
svn_swig_py_cancel_func = _client.svn_swig_py_cancel_func
svn_swig_py_get_commit_log_func = _client.svn_swig_py_get_commit_log_func
svn_swig_py_notify_func = _client.svn_swig_py_notify_func
+svn_swig_py_notify_func2 = _client.svn_swig_py_notify_func2
# This file is compatible with both classic and new-style classes.
diff --git a/subversion/bindings/swig/python/core.c b/subversion/bindings/swig/python/core.c
index 0c53f7d..8c95dbd 100644
--- a/subversion/bindings/swig/python/core.c
+++ b/subversion/bindings/swig/python/core.c
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -733,6 +733,7 @@ SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) {
#define PyInt_Check(x) PyLong_Check(x)
#define PyInt_AsLong(x) PyLong_AsLong(x)
#define PyInt_FromLong(x) PyLong_FromLong(x)
+#define PyInt_FromSize_t(x) PyLong_FromSize_t(x)
#define PyString_Check(name) PyBytes_Check(name)
#define PyString_FromString(x) PyUnicode_FromString(x)
#define PyString_Format(fmt, args) PyUnicode_Format(fmt, args)
@@ -902,6 +903,10 @@ static long PyNumber_AsSsize_t (PyObject *x, void *SWIGUNUSEDPARM(exc))
}
#endif
+#if PY_VERSION_HEX < 0x02050000
+#define PyInt_FromSize_t(x) PyInt_FromLong((long)x)
+#endif
+
#if PY_VERSION_HEX < 0x02040000
#define Py_VISIT(op) \
do { \
@@ -1173,7 +1178,7 @@ SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self),
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Python_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Python_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Python_SetModule(pointer)
#define SWIG_NewClientData(obj) SwigPyClientData_New(obj)
@@ -1199,7 +1204,7 @@ SWIG_Python_SetErrorObj(PyObject *errtype, PyObject *obj) {
SWIGINTERN void
SWIG_Python_SetErrorMsg(PyObject *errtype, const char *msg) {
SWIG_PYTHON_THREAD_BEGIN_BLOCK;
- PyErr_SetString(errtype, (char *) msg);
+ PyErr_SetString(errtype, msg);
SWIG_PYTHON_THREAD_END_BLOCK;
}
@@ -1218,7 +1223,11 @@ SwigPyBuiltin_AddPublicSymbol(PyObject *seq, const char *key) {
SWIGINTERN void
SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *name, PyObject *obj) {
+#if PY_VERSION_HEX < 0x02030000
PyDict_SetItemString(d, (char *)name, obj);
+#else
+ PyDict_SetItemString(d, name, obj);
+#endif
Py_DECREF(obj);
if (public_interface)
SwigPyBuiltin_AddPublicSymbol(public_interface, name);
@@ -1228,7 +1237,11 @@ SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *nam
SWIGINTERN void
SWIG_Python_SetConstant(PyObject *d, const char *name, PyObject *obj) {
+#if PY_VERSION_HEX < 0x02030000
PyDict_SetItemString(d, (char *)name, obj);
+#else
+ PyDict_SetItemString(d, name, obj);
+#endif
Py_DECREF(obj);
}
@@ -1549,7 +1562,7 @@ SwigPyObject_repr(SwigPyObject *v, PyObject *args)
#endif
{
const char *name = SWIG_TypePrettyName(v->ty);
- PyObject *repr = SWIG_Python_str_FromFormat("<Swig Object of type '%s' at %p>", name, (void *)v);
+ PyObject *repr = SWIG_Python_str_FromFormat("<Swig Object of type '%s' at %p>", (name ? name : "unknown"), (void *)v);
if (v->next) {
# ifdef METH_NOARGS
PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next);
@@ -1753,8 +1766,10 @@ SwigPyObject_own(PyObject *v, PyObject *args)
PyObject *val = 0;
#if (PY_VERSION_HEX < 0x02020000)
if (!PyArg_ParseTuple(args,(char *)"|O:own",&val))
-#else
+#elif (PY_VERSION_HEX < 0x02050000)
if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val))
+#else
+ if (!PyArg_UnpackTuple(args, "own", 0, 1, &val))
#endif
{
return NULL;
@@ -2449,23 +2464,29 @@ SWIG_Python_NewShadowInstance(SwigPyClientData *data, PyObject *swig_this)
} else {
#if PY_VERSION_HEX >= 0x03000000
inst = PyBaseObject_Type.tp_new((PyTypeObject*) data->newargs, Py_None, Py_None);
- PyObject_SetAttr(inst, SWIG_This(), swig_this);
- Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG;
+ if (inst) {
+ PyObject_SetAttr(inst, SWIG_This(), swig_this);
+ Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG;
+ }
#else
PyObject *dict = PyDict_New();
- PyDict_SetItem(dict, SWIG_This(), swig_this);
- inst = PyInstance_NewRaw(data->newargs, dict);
- Py_DECREF(dict);
+ if (dict) {
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ inst = PyInstance_NewRaw(data->newargs, dict);
+ Py_DECREF(dict);
+ }
#endif
}
return inst;
#else
#if (PY_VERSION_HEX >= 0x02010000)
- PyObject *inst;
+ PyObject *inst = 0;
PyObject *dict = PyDict_New();
- PyDict_SetItem(dict, SWIG_This(), swig_this);
- inst = PyInstance_NewRaw(data->newargs, dict);
- Py_DECREF(dict);
+ if (dict) {
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ inst = PyInstance_NewRaw(data->newargs, dict);
+ Py_DECREF(dict);
+ }
return (PyObject *) inst;
#else
PyInstanceObject *inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type);
@@ -2516,7 +2537,7 @@ SWIG_Python_SetSwigThis(PyObject *inst, PyObject *swig_this)
SWIGINTERN PyObject *
SWIG_Python_InitShadowInstance(PyObject *args) {
PyObject *obj[2];
- if (!SWIG_Python_UnpackTuple(args,(char*)"swiginit", 2, 2, obj)) {
+ if (!SWIG_Python_UnpackTuple(args, "swiginit", 2, 2, obj)) {
return NULL;
} else {
SwigPyObject *sthis = SWIG_Python_GetSwigThis(obj[0]);
@@ -2572,12 +2593,10 @@ SWIG_Python_NewPointerObj(PyObject *self, void *ptr, swig_type_info *type, int f
assert(!(flags & SWIG_BUILTIN_TP_INIT));
robj = SwigPyObject_New(ptr, type, own);
- if (clientdata && !(flags & SWIG_POINTER_NOSHADOW)) {
+ if (robj && clientdata && !(flags & SWIG_POINTER_NOSHADOW)) {
PyObject *inst = SWIG_Python_NewShadowInstance(clientdata, robj);
- if (inst) {
- Py_DECREF(robj);
- robj = inst;
- }
+ Py_DECREF(robj);
+ robj = inst;
}
return robj;
}
@@ -2598,7 +2617,7 @@ void *SWIG_ReturnGlobalTypeList(void *);
#endif
SWIGRUNTIME swig_module_info *
-SWIG_Python_GetModule(void) {
+SWIG_Python_GetModule(void *SWIGUNUSEDPARM(clientdata)) {
static void *type_pointer = (void *)0;
/* first check if module already created */
if (!type_pointer) {
@@ -2724,7 +2743,7 @@ SWIG_Python_TypeQuery(const char *type)
descriptor = (swig_type_info *) PyCObject_AsVoidPtr(obj);
#endif
} else {
- swig_module_info *swig_module = SWIG_Python_GetModule();
+ swig_module_info *swig_module = SWIG_GetModule(0);
descriptor = SWIG_TypeQueryModule(swig_module, swig_module, type);
if (descriptor) {
#ifdef SWIGPY_USE_CAPSULE
@@ -2792,7 +2811,7 @@ SwigPyObject_GetDesc(PyObject *self)
{
SwigPyObject *v = (SwigPyObject *)self;
swig_type_info *ty = v ? v->ty : 0;
- return ty ? ty->str : (char*)"";
+ return ty ? ty->str : "";
}
SWIGRUNTIME void
@@ -2849,6 +2868,7 @@ SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int SWIGUNUSEDPARM(arg
return result;
}
+#ifdef SWIGPYTHON_BUILTIN
SWIGRUNTIME int
SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
PyTypeObject *tp = obj->ob_type;
@@ -2857,15 +2877,15 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
descrsetfunc f;
int res;
-#ifdef Py_USING_UNICODE
+# ifdef Py_USING_UNICODE
if (PyString_Check(name)) {
name = PyUnicode_Decode(PyString_AsString(name), PyString_Size(name), NULL, NULL);
if (!name)
return -1;
} else if (!PyUnicode_Check(name))
-#else
+# else
if (!PyString_Check(name))
-#endif
+# endif
{
PyErr_Format(PyExc_TypeError, "attribute name must be string, not '%.200s'", name->ob_type->tp_name);
return -1;
@@ -2900,6 +2920,7 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
Py_DECREF(name);
return res;
}
+#endif
#ifdef __cplusplus
@@ -2937,128 +2958,140 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
#define SWIGTYPE_p_apr_size_t swig_types[15]
#define SWIGTYPE_p_char swig_types[16]
#define SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[17]
-#define SWIGTYPE_p_f_p_p_struct_svn_auth_provider_object_t_p_apr_pool_t__void swig_types[18]
-#define SWIGTYPE_p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[19]
-#define SWIGTYPE_p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[20]
-#define SWIGTYPE_p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[21]
-#define SWIGTYPE_p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[22]
-#define SWIGTYPE_p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[23]
-#define SWIGTYPE_p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[24]
-#define SWIGTYPE_p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[25]
-#define SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_void__int swig_types[26]
-#define SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_void_p_apr_pool_t__int swig_types[27]
-#define SWIGTYPE_p_f_p_q_const__char_p_void__int swig_types[28]
-#define SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__int swig_types[29]
-#define SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[30]
-#define SWIGTYPE_p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[31]
-#define SWIGTYPE_p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[32]
-#define SWIGTYPE_p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[33]
-#define SWIGTYPE_p_f_p_void__p_svn_error_t swig_types[34]
-#define SWIGTYPE_p_f_p_void_apr_size_t__p_svn_error_t swig_types[35]
-#define SWIGTYPE_p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[36]
-#define SWIGTYPE_p_f_p_void_p_char_p_apr_size_t__p_svn_error_t swig_types[37]
-#define SWIGTYPE_p_f_p_void_p_p_svn_stream_mark_t_p_apr_pool_t__p_svn_error_t swig_types[38]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_size_t__p_svn_error_t swig_types[39]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__apr_finfo_t_p_apr_pool_t__p_svn_error_t swig_types[40]
-#define SWIGTYPE_p_f_p_void_p_q_const__svn_stream_mark_t__p_svn_error_t swig_types[41]
-#define SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t swig_types[42]
-#define SWIGTYPE_p_f_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t swig_types[43]
-#define SWIGTYPE_p_f_void__p_svn_version_t swig_types[44]
-#define SWIGTYPE_p_int swig_types[45]
-#define SWIGTYPE_p_long swig_types[46]
-#define SWIGTYPE_p_p_apr_array_header_t swig_types[47]
-#define SWIGTYPE_p_p_apr_file_t swig_types[48]
-#define SWIGTYPE_p_p_apr_hash_t swig_types[49]
-#define SWIGTYPE_p_p_char swig_types[50]
-#define SWIGTYPE_p_p_f_p_p_char_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[51]
-#define SWIGTYPE_p_p_f_p_p_struct_svn_auth_provider_object_t_p_apr_pool_t__void swig_types[52]
-#define SWIGTYPE_p_p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[53]
-#define SWIGTYPE_p_p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[54]
-#define SWIGTYPE_p_p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[55]
-#define SWIGTYPE_p_p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[56]
-#define SWIGTYPE_p_p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[57]
-#define SWIGTYPE_p_p_f_p_q_const__char_p_q_const__char_p_void__int swig_types[58]
-#define SWIGTYPE_p_p_f_p_q_const__char_p_q_const__char_p_void_p_apr_pool_t__int swig_types[59]
-#define SWIGTYPE_p_p_f_p_q_const__char_p_void__int swig_types[60]
-#define SWIGTYPE_p_p_f_p_q_const__char_p_void_p_apr_pool_t__int swig_types[61]
-#define SWIGTYPE_p_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[62]
-#define SWIGTYPE_p_p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[63]
-#define SWIGTYPE_p_p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[64]
-#define SWIGTYPE_p_p_f_p_void__p_svn_error_t swig_types[65]
-#define SWIGTYPE_p_p_f_p_void_apr_size_t__p_svn_error_t swig_types[66]
-#define SWIGTYPE_p_p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[67]
-#define SWIGTYPE_p_p_f_p_void_p_char_p_apr_size_t__p_svn_error_t swig_types[68]
-#define SWIGTYPE_p_p_f_p_void_p_p_svn_stream_mark_t_p_apr_pool_t__p_svn_error_t swig_types[69]
-#define SWIGTYPE_p_p_f_p_void_p_q_const__char_p_apr_size_t__p_svn_error_t swig_types[70]
-#define SWIGTYPE_p_p_f_p_void_p_q_const__char_p_q_const__apr_finfo_t_p_apr_pool_t__p_svn_error_t swig_types[71]
-#define SWIGTYPE_p_p_f_p_void_p_q_const__svn_stream_mark_t__p_svn_error_t swig_types[72]
-#define SWIGTYPE_p_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t swig_types[73]
-#define SWIGTYPE_p_p_f_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t swig_types[74]
-#define SWIGTYPE_p_p_f_void__p_svn_version_t swig_types[75]
-#define SWIGTYPE_p_p_svn_auth_baton_t swig_types[76]
-#define SWIGTYPE_p_p_svn_auth_cred_simple_t swig_types[77]
-#define SWIGTYPE_p_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[78]
-#define SWIGTYPE_p_p_svn_auth_cred_ssl_client_cert_t swig_types[79]
-#define SWIGTYPE_p_p_svn_auth_cred_ssl_server_trust_t swig_types[80]
-#define SWIGTYPE_p_p_svn_auth_cred_username_t swig_types[81]
-#define SWIGTYPE_p_p_svn_auth_iterstate_t swig_types[82]
-#define SWIGTYPE_p_p_svn_auth_provider_object_t swig_types[83]
-#define SWIGTYPE_p_p_svn_checksum_t swig_types[84]
-#define SWIGTYPE_p_p_svn_config_t swig_types[85]
-#define SWIGTYPE_p_p_svn_io_dirent2_t swig_types[86]
-#define SWIGTYPE_p_p_svn_stream_mark_t swig_types[87]
-#define SWIGTYPE_p_p_svn_stream_t swig_types[88]
-#define SWIGTYPE_p_p_svn_string_t swig_types[89]
-#define SWIGTYPE_p_p_svn_stringbuf_t swig_types[90]
-#define SWIGTYPE_p_p_void swig_types[91]
-#define SWIGTYPE_p_svn_auth_baton_t swig_types[92]
-#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[93]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[94]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[95]
-#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[96]
-#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[97]
-#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[98]
-#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[99]
-#define SWIGTYPE_p_svn_auth_provider_t swig_types[100]
-#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[101]
-#define SWIGTYPE_p_svn_checksum_kind_t swig_types[102]
-#define SWIGTYPE_p_svn_commit_info_t swig_types[103]
-#define SWIGTYPE_p_svn_config_t swig_types[104]
-#define SWIGTYPE_p_svn_depth_t swig_types[105]
-#define SWIGTYPE_p_svn_dirent_t swig_types[106]
-#define SWIGTYPE_p_svn_errno_t swig_types[107]
-#define SWIGTYPE_p_svn_error_t swig_types[108]
-#define SWIGTYPE_p_svn_io_dirent2_t swig_types[109]
-#define SWIGTYPE_p_svn_io_dirent_t swig_types[110]
-#define SWIGTYPE_p_svn_io_file_del_t swig_types[111]
-#define SWIGTYPE_p_svn_location_segment_t swig_types[112]
-#define SWIGTYPE_p_svn_lock_t swig_types[113]
-#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[114]
-#define SWIGTYPE_p_svn_log_changed_path_t swig_types[115]
-#define SWIGTYPE_p_svn_log_entry_t swig_types[116]
-#define SWIGTYPE_p_svn_merge_range_t swig_types[117]
-#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[118]
-#define SWIGTYPE_p_svn_node_kind_t swig_types[119]
-#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[120]
-#define SWIGTYPE_p_svn_opt_revision_t swig_types[121]
-#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[122]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[123]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t_desc_overrides swig_types[124]
-#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[125]
-#define SWIGTYPE_p_svn_prop_kind swig_types[126]
-#define SWIGTYPE_p_svn_prop_t swig_types[127]
-#define SWIGTYPE_p_svn_stream_mark_t swig_types[128]
-#define SWIGTYPE_p_svn_stream_t swig_types[129]
-#define SWIGTYPE_p_svn_string_t swig_types[130]
-#define SWIGTYPE_p_svn_stringbuf_t swig_types[131]
-#define SWIGTYPE_p_svn_tristate_t swig_types[132]
-#define SWIGTYPE_p_svn_version_checklist_t swig_types[133]
-#define SWIGTYPE_p_svn_version_t swig_types[134]
-#define SWIGTYPE_p_unsigned_char swig_types[135]
-#define SWIGTYPE_p_unsigned_long swig_types[136]
-#define SWIGTYPE_p_void swig_types[137]
-static swig_type_info *swig_types[139];
-static swig_module_info swig_module = {swig_types, 138, 0, 0, 0, 0};
+#define SWIGTYPE_p_f_p_p_char_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[18]
+#define SWIGTYPE_p_f_p_p_struct_svn_auth_provider_object_t_p_apr_pool_t__void swig_types[19]
+#define SWIGTYPE_p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[20]
+#define SWIGTYPE_p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[21]
+#define SWIGTYPE_p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[22]
+#define SWIGTYPE_p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[23]
+#define SWIGTYPE_p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[24]
+#define SWIGTYPE_p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t swig_types[25]
+#define SWIGTYPE_p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[26]
+#define SWIGTYPE_p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[27]
+#define SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_void__int swig_types[28]
+#define SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_void_p_apr_pool_t__int swig_types[29]
+#define SWIGTYPE_p_f_p_q_const__char_p_void__int swig_types[30]
+#define SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__int swig_types[31]
+#define SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[32]
+#define SWIGTYPE_p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[33]
+#define SWIGTYPE_p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[34]
+#define SWIGTYPE_p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[35]
+#define SWIGTYPE_p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[36]
+#define SWIGTYPE_p_f_p_void__p_svn_error_t swig_types[37]
+#define SWIGTYPE_p_f_p_void_apr_size_t__p_svn_error_t swig_types[38]
+#define SWIGTYPE_p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[39]
+#define SWIGTYPE_p_f_p_void_p_char_p_apr_size_t__p_svn_error_t swig_types[40]
+#define SWIGTYPE_p_f_p_void_p_p_svn_stream_mark_t_p_apr_pool_t__p_svn_error_t swig_types[41]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_size_t__p_svn_error_t swig_types[42]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__apr_finfo_t_p_apr_pool_t__p_svn_error_t swig_types[43]
+#define SWIGTYPE_p_f_p_void_p_q_const__svn_stream_mark_t__p_svn_error_t swig_types[44]
+#define SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t swig_types[45]
+#define SWIGTYPE_p_f_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t swig_types[46]
+#define SWIGTYPE_p_f_void__p_svn_version_t swig_types[47]
+#define SWIGTYPE_p_int swig_types[48]
+#define SWIGTYPE_p_long swig_types[49]
+#define SWIGTYPE_p_p_apr_array_header_t swig_types[50]
+#define SWIGTYPE_p_p_apr_file_t swig_types[51]
+#define SWIGTYPE_p_p_apr_hash_t swig_types[52]
+#define SWIGTYPE_p_p_char swig_types[53]
+#define SWIGTYPE_p_p_f_p_p_char_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[54]
+#define SWIGTYPE_p_p_f_p_p_struct_svn_auth_provider_object_t_p_apr_pool_t__void swig_types[55]
+#define SWIGTYPE_p_p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[56]
+#define SWIGTYPE_p_p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[57]
+#define SWIGTYPE_p_p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[58]
+#define SWIGTYPE_p_p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[59]
+#define SWIGTYPE_p_p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[60]
+#define SWIGTYPE_p_p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t swig_types[61]
+#define SWIGTYPE_p_p_f_p_q_const__char_p_q_const__char_p_void__int swig_types[62]
+#define SWIGTYPE_p_p_f_p_q_const__char_p_q_const__char_p_void_p_apr_pool_t__int swig_types[63]
+#define SWIGTYPE_p_p_f_p_q_const__char_p_void__int swig_types[64]
+#define SWIGTYPE_p_p_f_p_q_const__char_p_void_p_apr_pool_t__int swig_types[65]
+#define SWIGTYPE_p_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[66]
+#define SWIGTYPE_p_p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[67]
+#define SWIGTYPE_p_p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[68]
+#define SWIGTYPE_p_p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[69]
+#define SWIGTYPE_p_p_f_p_void__p_svn_error_t swig_types[70]
+#define SWIGTYPE_p_p_f_p_void_apr_size_t__p_svn_error_t swig_types[71]
+#define SWIGTYPE_p_p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[72]
+#define SWIGTYPE_p_p_f_p_void_p_char_p_apr_size_t__p_svn_error_t swig_types[73]
+#define SWIGTYPE_p_p_f_p_void_p_p_svn_stream_mark_t_p_apr_pool_t__p_svn_error_t swig_types[74]
+#define SWIGTYPE_p_p_f_p_void_p_q_const__char_p_apr_size_t__p_svn_error_t swig_types[75]
+#define SWIGTYPE_p_p_f_p_void_p_q_const__char_p_q_const__apr_finfo_t_p_apr_pool_t__p_svn_error_t swig_types[76]
+#define SWIGTYPE_p_p_f_p_void_p_q_const__svn_stream_mark_t__p_svn_error_t swig_types[77]
+#define SWIGTYPE_p_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t swig_types[78]
+#define SWIGTYPE_p_p_f_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t swig_types[79]
+#define SWIGTYPE_p_p_f_void__p_svn_version_t swig_types[80]
+#define SWIGTYPE_p_p_svn_auth_baton_t swig_types[81]
+#define SWIGTYPE_p_p_svn_auth_cred_simple_t swig_types[82]
+#define SWIGTYPE_p_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[83]
+#define SWIGTYPE_p_p_svn_auth_cred_ssl_client_cert_t swig_types[84]
+#define SWIGTYPE_p_p_svn_auth_cred_ssl_server_trust_t swig_types[85]
+#define SWIGTYPE_p_p_svn_auth_cred_username_t swig_types[86]
+#define SWIGTYPE_p_p_svn_auth_iterstate_t swig_types[87]
+#define SWIGTYPE_p_p_svn_auth_provider_object_t swig_types[88]
+#define SWIGTYPE_p_p_svn_checksum_t swig_types[89]
+#define SWIGTYPE_p_p_svn_config_t swig_types[90]
+#define SWIGTYPE_p_p_svn_io_dirent2_t swig_types[91]
+#define SWIGTYPE_p_p_svn_stream_mark_t swig_types[92]
+#define SWIGTYPE_p_p_svn_stream_t swig_types[93]
+#define SWIGTYPE_p_p_svn_string_t swig_types[94]
+#define SWIGTYPE_p_p_svn_stringbuf_t swig_types[95]
+#define SWIGTYPE_p_p_void swig_types[96]
+#define SWIGTYPE_p_svn_auth_baton_t swig_types[97]
+#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[98]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[99]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[100]
+#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[101]
+#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[102]
+#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[103]
+#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[104]
+#define SWIGTYPE_p_svn_auth_provider_t swig_types[105]
+#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[106]
+#define SWIGTYPE_p_svn_checksum_ctx_t swig_types[107]
+#define SWIGTYPE_p_svn_checksum_kind_t swig_types[108]
+#define SWIGTYPE_p_svn_checksum_t swig_types[109]
+#define SWIGTYPE_p_svn_commit_info_t swig_types[110]
+#define SWIGTYPE_p_svn_config_t swig_types[111]
+#define SWIGTYPE_p_svn_depth_t swig_types[112]
+#define SWIGTYPE_p_svn_dirent_t swig_types[113]
+#define SWIGTYPE_p_svn_errno_t swig_types[114]
+#define SWIGTYPE_p_svn_error_t swig_types[115]
+#define SWIGTYPE_p_svn_io_dirent2_t swig_types[116]
+#define SWIGTYPE_p_svn_io_dirent_t swig_types[117]
+#define SWIGTYPE_p_svn_io_file_del_t swig_types[118]
+#define SWIGTYPE_p_svn_location_segment_t swig_types[119]
+#define SWIGTYPE_p_svn_lock_t swig_types[120]
+#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[121]
+#define SWIGTYPE_p_svn_log_changed_path_t swig_types[122]
+#define SWIGTYPE_p_svn_log_entry_t swig_types[123]
+#define SWIGTYPE_p_svn_merge_range_t swig_types[124]
+#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[125]
+#define SWIGTYPE_p_svn_node_kind_t swig_types[126]
+#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[127]
+#define SWIGTYPE_p_svn_opt_revision_t swig_types[128]
+#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[129]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[130]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t_desc_overrides swig_types[131]
+#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[132]
+#define SWIGTYPE_p_svn_prop_inherited_item_t swig_types[133]
+#define SWIGTYPE_p_svn_prop_kind swig_types[134]
+#define SWIGTYPE_p_svn_prop_t swig_types[135]
+#define SWIGTYPE_p_svn_stream_mark_t swig_types[136]
+#define SWIGTYPE_p_svn_stream_t swig_types[137]
+#define SWIGTYPE_p_svn_string_t swig_types[138]
+#define SWIGTYPE_p_svn_stringbuf_t swig_types[139]
+#define SWIGTYPE_p_svn_tristate_t swig_types[140]
+#define SWIGTYPE_p_svn_version_checklist_t swig_types[141]
+#define SWIGTYPE_p_svn_version_ext_linked_lib_t swig_types[142]
+#define SWIGTYPE_p_svn_version_ext_loaded_lib_t swig_types[143]
+#define SWIGTYPE_p_svn_version_extended_t swig_types[144]
+#define SWIGTYPE_p_svn_version_t swig_types[145]
+#define SWIGTYPE_p_svn_wc_external_item2_t swig_types[146]
+#define SWIGTYPE_p_unsigned_char swig_types[147]
+#define SWIGTYPE_p_unsigned_long swig_types[148]
+#define SWIGTYPE_p_void swig_types[149]
+static swig_type_info *swig_types[151];
+static swig_module_info swig_module = {swig_types, 150, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@@ -3082,7 +3115,7 @@ static swig_module_info swig_module = {swig_types, 138, 0, 0, 0, 0};
#endif
#define SWIG_name "_core"
-#define SWIGVERSION 0x020004
+#define SWIGVERSION 0x020009
#define SWIG_VERSION SWIGVERSION
@@ -3150,7 +3183,7 @@ static PyObject * _global_py_pool = NULL;
#include "svn_private_config.h"
- #define SWIG_From_long PyInt_FromLong
+ #define SWIG_From_long PyLong_FromLong
SWIGINTERN int
@@ -3416,10 +3449,10 @@ SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc)
-SWIGINTERNINLINE PyObject *
-SWIG_From_int (int value)
-{
- return SWIG_From_long (value);
+SWIGINTERNINLINE PyObject*
+ SWIG_From_int (int value)
+{
+ return PyInt_FromLong((long) value);
}
@@ -3555,12 +3588,18 @@ typedef struct {
+#include "svn_cmdline.h"
+
+
+
+
#include "svn_auth.h"
SWIGINTERN int
SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val)
{
+#if PY_VERSION_HEX < 0x03000000
if (PyInt_Check(obj)) {
long v = PyInt_AsLong(obj);
if (v >= 0) {
@@ -3569,7 +3608,9 @@ SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val)
} else {
return SWIG_OverflowError;
}
- } else if (PyLong_Check(obj)) {
+ } else
+#endif
+ if (PyLong_Check(obj)) {
unsigned long v = PyLong_AsUnsignedLong(obj);
if (!PyErr_Occurred()) {
if (val) *val = v;
@@ -3622,7 +3663,7 @@ SWIGINTERNINLINE PyObject*
SWIG_From_unsigned_SS_long (unsigned long value)
{
return (value > LONG_MAX) ?
- PyLong_FromUnsignedLong(value) : PyInt_FromLong((long)(value));
+ PyLong_FromUnsignedLong(value) : PyLong_FromLong((long)(value));
}
@@ -3711,6 +3752,11 @@ static svn_boolean_t svn_config_invoke_enumerator2(
return _obj(name, value, baton, pool);
}
+static svn_error_t * svn_config_invoke_auth_walk_func(
+ svn_config_auth_walk_func_t _obj, svn_boolean_t *delete_cred, void *cleanup_baton, const char *cred_kind, const char *realmstring, apr_hash_t *hash, apr_pool_t *scratch_pool) {
+ return _obj(delete_cred, cleanup_baton, cred_kind, realmstring, hash, scratch_pool);
+}
+
#include "svn_utf.h"
@@ -3771,6 +3817,11 @@ static svn_error_t * svn_stream_invoke_seek_fn(
return _obj(baton, mark);
}
+static svn_error_t * svn_stream_invoke_lazyopen_func(
+ svn_stream_lazyopen_func_t _obj, svn_stream_t **stream, void *baton, apr_pool_t *result_pool, apr_pool_t *scratch_pool) {
+ return _obj(stream, baton, result_pool, scratch_pool);
+}
+
static svn_error_t * svn_io_invoke_walk_func(
svn_io_walk_func_t _obj, void *baton, const char *path, const apr_finfo_t *finfo, apr_pool_t *pool) {
return _obj(baton, path, finfo, pool);
@@ -3778,6 +3829,34 @@ static svn_error_t * svn_io_invoke_walk_func(
+#include "svn_checksum.h"
+
+
+
+
+/* Helper function to set the gnome-keyring unlock prompt function. This
+ * C function accepts an auth baton, a function and a prompt baton, but
+ * the below callback_typemap uses both the function and the prompt
+ * baton, so the resulting binding has just two arguments: The auth
+ * baton and the prompt function.
+ * The prompt function should again have two arguments: The keyring name
+ * (string) and a pool (except for the ruby version, which doesn't have
+ * the pool argument). It should return the entered password (string).
+ * This binding generated for this function generates a reference to the
+ * prompt function that was passed into this. The caller should store
+ * that reference somewhere, to prevent the function from being garbage
+ * collected...
+ */
+static void svn_auth_set_gnome_keyring_unlock_prompt_func(svn_auth_baton_t *ab,
+ svn_auth_gnome_keyring_unlock_prompt_func_t prompt_func,
+ void *prompt_baton) {
+ svn_auth_set_parameter(ab, SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_FUNC,
+ prompt_func);
+ svn_auth_set_parameter(ab, SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_BATON,
+ prompt_baton);
+}
+
+
static svn_error_t *
svn_swig_mergeinfo_merge(apr_hash_t **mergeinfo_inout,
apr_hash_t *changes,
@@ -3793,15 +3872,15 @@ svn_swig_mergeinfo_sort(apr_hash_t **mergeinfo_inout, apr_pool_t *pool)
}
static svn_error_t *
-svn_swig_rangelist_merge(apr_array_header_t **rangelist_inout,
- apr_array_header_t *changes,
+svn_swig_rangelist_merge(svn_rangelist_t **rangelist_inout,
+ svn_rangelist_t *changes,
apr_pool_t *pool)
{
return svn_rangelist_merge(rangelist_inout, changes, pool);
}
static svn_error_t *
-svn_swig_rangelist_reverse(apr_array_header_t **rangelist_inout,
+svn_swig_rangelist_reverse(svn_rangelist_t **rangelist_inout,
apr_pool_t *pool)
{
return svn_rangelist_reverse(*rangelist_inout, pool);
@@ -4309,14 +4388,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_error_t_apr_err_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
apr_status_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_error_t_apr_err_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_error_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_error_t, svn_argnum_obj0);
+ arg1 = (struct svn_error_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_error_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4337,13 +4416,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_error_t_apr_err_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
PyObject * obj0 = 0 ;
apr_status_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_error_t_apr_err_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_error_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_error_t, svn_argnum_obj0);
+ arg1 = (struct svn_error_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_error_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4358,13 +4437,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_error_t_message_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_error_t_message_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_error_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_error_t, svn_argnum_obj0);
+ arg1 = (struct svn_error_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_error_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4379,14 +4458,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_error_t_child_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
struct svn_error_t *arg2 = (struct svn_error_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_error_t_child_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_error_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_error_t, svn_argnum_obj0);
+ arg1 = (struct svn_error_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_error_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4407,13 +4486,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_error_t_child_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
PyObject * obj0 = 0 ;
struct svn_error_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_error_t_child_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_error_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_error_t, svn_argnum_obj0);
+ arg1 = (struct svn_error_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_error_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4429,7 +4508,7 @@ fail:
SWIGINTERN PyObject *_wrap_svn_error_t_pool_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
apr_pool_t *arg2 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool = NULL ;
PyObject *_global_py_pool = NULL ;
@@ -4442,7 +4521,7 @@ SWIGINTERN PyObject *_wrap_svn_error_t_pool_set(PyObject *SWIGUNUSEDPARM(self),
arg2 = _global_pool;
if (!PyArg_ParseTuple(args,(char *)"O|O:svn_error_t_pool_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_error_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_error_t, svn_argnum_obj0);
+ arg1 = (struct svn_error_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_error_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4471,13 +4550,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_error_t_pool_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
PyObject * obj0 = 0 ;
apr_pool_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_error_t_pool_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_error_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_error_t, svn_argnum_obj0);
+ arg1 = (struct svn_error_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_error_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4493,13 +4572,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_error_t_file_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_error_t_file_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_error_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_error_t, svn_argnum_obj0);
+ arg1 = (struct svn_error_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_error_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4514,14 +4593,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_error_t_line_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
long arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_error_t_line_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_error_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_error_t, svn_argnum_obj0);
+ arg1 = (struct svn_error_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_error_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4542,13 +4621,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_error_t_line_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
PyObject * obj0 = 0 ;
long result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_error_t_line_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_error_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_error_t, svn_argnum_obj0);
+ arg1 = (struct svn_error_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_error_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4563,28 +4642,19 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_error_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_error_t *result = 0 ;
+ struct svn_error_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_error_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_error_t *)calloc(1, sizeof(svn_error_t));
+ result = (struct svn_error_t *)calloc(1, sizeof(struct svn_error_t));
svn_swig_py_acquire_py_lock();
}
- {
- if (result != NULL) {
- if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
- svn_swig_py_svn_exception(result);
- else
- svn_error_clear(result);
- SWIG_fail;
- }
- Py_INCREF(Py_None);
- resultobj = Py_None;
- }
+ resultobj = svn_swig_NewPointerObj((void*)(result), SWIGTYPE_p_svn_error_t,
+ _global_py_pool, args);
return resultobj;
fail:
return NULL;
@@ -4593,12 +4663,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_error_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_error_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_error_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_error_t, svn_argnum_obj0);
+ arg1 = (struct svn_error_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_error_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4917,14 +4987,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_dirent_t_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
svn_node_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_dirent_t_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_dirent_t, svn_argnum_obj0);
+ arg1 = (struct svn_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_dirent_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4945,13 +5015,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_dirent_t_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
PyObject * obj0 = 0 ;
svn_node_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_dirent_t_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_dirent_t, svn_argnum_obj0);
+ arg1 = (struct svn_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_dirent_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4966,14 +5036,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_dirent_t_size_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
svn_filesize_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_dirent_t_size_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_dirent_t, svn_argnum_obj0);
+ arg1 = (struct svn_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_dirent_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4989,13 +5059,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_dirent_t_size_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
PyObject * obj0 = 0 ;
svn_filesize_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_dirent_t_size_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_dirent_t, svn_argnum_obj0);
+ arg1 = (struct svn_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_dirent_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5010,14 +5080,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_dirent_t_has_props_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_dirent_t_has_props_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_dirent_t, svn_argnum_obj0);
+ arg1 = (struct svn_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_dirent_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5038,13 +5108,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_dirent_t_has_props_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_dirent_t_has_props_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_dirent_t, svn_argnum_obj0);
+ arg1 = (struct svn_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_dirent_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5059,14 +5129,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_dirent_t_created_rev_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_dirent_t_created_rev_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_dirent_t, svn_argnum_obj0);
+ arg1 = (struct svn_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_dirent_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5087,13 +5157,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_dirent_t_created_rev_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_dirent_t_created_rev_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_dirent_t, svn_argnum_obj0);
+ arg1 = (struct svn_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_dirent_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5108,14 +5178,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_dirent_t_time_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
apr_time_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_dirent_t_time_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_dirent_t, svn_argnum_obj0);
+ arg1 = (struct svn_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_dirent_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5131,13 +5201,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_dirent_t_time_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
PyObject * obj0 = 0 ;
apr_time_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_dirent_t_time_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_dirent_t, svn_argnum_obj0);
+ arg1 = (struct svn_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_dirent_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5152,13 +5222,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_dirent_t_last_author_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_dirent_t_last_author_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_dirent_t, svn_argnum_obj0);
+ arg1 = (struct svn_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_dirent_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5173,13 +5243,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_dirent_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_dirent_t *result = 0 ;
+ struct svn_dirent_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_dirent_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_dirent_t *)calloc(1, sizeof(svn_dirent_t));
+ result = (struct svn_dirent_t *)calloc(1, sizeof(struct svn_dirent_t));
svn_swig_py_acquire_py_lock();
@@ -5194,12 +5264,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_dirent_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_dirent_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_dirent_t, svn_argnum_obj0);
+ arg1 = (struct svn_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_dirent_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5277,16 +5347,59 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_dirent_create(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ apr_pool_t *arg1 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ svn_dirent_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg1 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"|O:svn_dirent_create",&obj0)) SWIG_fail;
+ if (obj0) {
+ /* Verify that the user supplied a valid pool */
+ if (obj0 != Py_None && obj0 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj0);
+ SWIG_arg_fail(svn_argnum_obj0);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_dirent_t *)svn_dirent_create(arg1);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = svn_swig_NewPointerObj((void*)(result), SWIGTYPE_p_svn_dirent_t,
+ _global_py_pool, args);
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_commit_info_t_revision_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_commit_info_t_revision_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_commit_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_commit_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5307,13 +5420,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_commit_info_t_revision_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_commit_info_t_revision_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_commit_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_commit_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5328,13 +5441,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_commit_info_t_date_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_commit_info_t_date_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_commit_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_commit_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5356,13 +5469,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_commit_info_t_date_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_commit_info_t_date_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_commit_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_commit_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5377,13 +5490,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_commit_info_t_author_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_commit_info_t_author_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_commit_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_commit_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5405,13 +5518,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_commit_info_t_author_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_commit_info_t_author_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_commit_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_commit_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5426,13 +5539,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_commit_info_t_post_commit_err_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_commit_info_t_post_commit_err_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_commit_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_commit_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5454,13 +5567,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_commit_info_t_post_commit_err_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_commit_info_t_post_commit_err_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_commit_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_commit_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5475,13 +5588,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_commit_info_t_repos_root_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_commit_info_t_repos_root_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_commit_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_commit_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5503,13 +5616,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_commit_info_t_repos_root_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_commit_info_t_repos_root_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_commit_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_commit_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5524,13 +5637,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_commit_info_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_commit_info_t *result = 0 ;
+ struct svn_commit_info_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_commit_info_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_commit_info_t *)calloc(1, sizeof(svn_commit_info_t));
+ result = (struct svn_commit_info_t *)calloc(1, sizeof(struct svn_commit_info_t));
svn_swig_py_acquire_py_lock();
@@ -5545,12 +5658,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_commit_info_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_commit_info_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_commit_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_commit_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5673,13 +5786,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_changed_path2_t_action_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
char arg2 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Oc:svn_log_changed_path2_t_action_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_log_changed_path2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path2_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_changed_path2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5694,13 +5807,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_changed_path2_t_action_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
PyObject * obj0 = 0 ;
char result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_log_changed_path2_t_action_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_log_changed_path2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path2_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_changed_path2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5715,13 +5828,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_changed_path2_t_copyfrom_path_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_log_changed_path2_t_copyfrom_path_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_log_changed_path2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path2_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_changed_path2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5743,13 +5856,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_changed_path2_t_copyfrom_path_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_log_changed_path2_t_copyfrom_path_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_log_changed_path2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path2_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_changed_path2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5764,14 +5877,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_changed_path2_t_copyfrom_rev_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_log_changed_path2_t_copyfrom_rev_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_log_changed_path2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path2_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_changed_path2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5792,13 +5905,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_changed_path2_t_copyfrom_rev_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_log_changed_path2_t_copyfrom_rev_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_log_changed_path2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path2_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_changed_path2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5813,14 +5926,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_changed_path2_t_node_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
svn_node_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_log_changed_path2_t_node_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_log_changed_path2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path2_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_changed_path2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5841,13 +5954,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_changed_path2_t_node_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_node_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_log_changed_path2_t_node_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_log_changed_path2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path2_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_changed_path2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5862,14 +5975,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_changed_path2_t_text_modified_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
svn_tristate_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_log_changed_path2_t_text_modified_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_log_changed_path2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path2_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_changed_path2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5890,13 +6003,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_changed_path2_t_text_modified_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_tristate_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_log_changed_path2_t_text_modified_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_log_changed_path2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path2_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_changed_path2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5911,14 +6024,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_changed_path2_t_props_modified_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
svn_tristate_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_log_changed_path2_t_props_modified_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_log_changed_path2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path2_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_changed_path2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5939,13 +6052,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_changed_path2_t_props_modified_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_tristate_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_log_changed_path2_t_props_modified_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_log_changed_path2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path2_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_changed_path2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5960,13 +6073,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_log_changed_path2_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_changed_path2_t *result = 0 ;
+ struct svn_log_changed_path2_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_log_changed_path2_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_log_changed_path2_t *)calloc(1, sizeof(svn_log_changed_path2_t));
+ result = (struct svn_log_changed_path2_t *)calloc(1, sizeof(struct svn_log_changed_path2_t));
svn_swig_py_acquire_py_lock();
@@ -5981,12 +6094,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_log_changed_path2_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_log_changed_path2_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_log_changed_path2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path2_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_changed_path2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6109,13 +6222,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_changed_path_t_action_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_changed_path_t *arg1 = (svn_log_changed_path_t *) 0 ;
+ struct svn_log_changed_path_t *arg1 = (struct svn_log_changed_path_t *) 0 ;
char arg2 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Oc:svn_log_changed_path_t_action_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_log_changed_path_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_changed_path_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6130,13 +6243,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_changed_path_t_action_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_changed_path_t *arg1 = (svn_log_changed_path_t *) 0 ;
+ struct svn_log_changed_path_t *arg1 = (struct svn_log_changed_path_t *) 0 ;
PyObject * obj0 = 0 ;
char result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_log_changed_path_t_action_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_log_changed_path_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_changed_path_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6151,13 +6264,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_changed_path_t_copyfrom_path_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_changed_path_t *arg1 = (svn_log_changed_path_t *) 0 ;
+ struct svn_log_changed_path_t *arg1 = (struct svn_log_changed_path_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_log_changed_path_t_copyfrom_path_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_log_changed_path_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_changed_path_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6172,14 +6285,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_changed_path_t_copyfrom_rev_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_changed_path_t *arg1 = (svn_log_changed_path_t *) 0 ;
+ struct svn_log_changed_path_t *arg1 = (struct svn_log_changed_path_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_log_changed_path_t_copyfrom_rev_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_log_changed_path_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_changed_path_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6200,13 +6313,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_changed_path_t_copyfrom_rev_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_changed_path_t *arg1 = (svn_log_changed_path_t *) 0 ;
+ struct svn_log_changed_path_t *arg1 = (struct svn_log_changed_path_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_log_changed_path_t_copyfrom_rev_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_log_changed_path_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_changed_path_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6221,13 +6334,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_log_changed_path_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_changed_path_t *result = 0 ;
+ struct svn_log_changed_path_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_log_changed_path_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_log_changed_path_t *)calloc(1, sizeof(svn_log_changed_path_t));
+ result = (struct svn_log_changed_path_t *)calloc(1, sizeof(struct svn_log_changed_path_t));
svn_swig_py_acquire_py_lock();
@@ -6242,12 +6355,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_log_changed_path_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_changed_path_t *arg1 = (svn_log_changed_path_t *) 0 ;
+ struct svn_log_changed_path_t *arg1 = (struct svn_log_changed_path_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_log_changed_path_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_log_changed_path_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_changed_path_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_changed_path_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6327,7 +6440,7 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_entry_t_changed_paths_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
apr_hash_t *arg2 = (apr_hash_t *) 0 ;
apr_pool_t *_global_pool = NULL ;
PyObject *_global_py_pool = NULL ;
@@ -6336,7 +6449,7 @@ SWIGINTERN PyObject *_wrap_svn_log_entry_t_changed_paths_set(PyObject *SWIGUNUSE
if (!PyArg_ParseTuple(args,(char *)"OO:svn_log_entry_t_changed_paths_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6365,13 +6478,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_entry_t_changed_paths_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
PyObject * obj0 = 0 ;
apr_hash_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_log_entry_t_changed_paths_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6388,14 +6501,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_entry_t_revision_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_log_entry_t_revision_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6416,13 +6529,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_entry_t_revision_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_log_entry_t_revision_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6437,7 +6550,7 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_entry_t_revprops_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
apr_hash_t *arg2 = (apr_hash_t *) 0 ;
apr_pool_t *_global_pool = NULL ;
PyObject *_global_py_pool = NULL ;
@@ -6446,7 +6559,7 @@ SWIGINTERN PyObject *_wrap_svn_log_entry_t_revprops_set(PyObject *SWIGUNUSEDPARM
if (!PyArg_ParseTuple(args,(char *)"OO:svn_log_entry_t_revprops_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6474,13 +6587,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_entry_t_revprops_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
PyObject * obj0 = 0 ;
apr_hash_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_log_entry_t_revprops_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6497,14 +6610,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_entry_t_has_children_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_log_entry_t_has_children_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6525,13 +6638,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_entry_t_has_children_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_log_entry_t_has_children_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6546,7 +6659,7 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_entry_t_changed_paths2_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
apr_hash_t *arg2 = (apr_hash_t *) 0 ;
apr_pool_t *_global_pool = NULL ;
PyObject *_global_py_pool = NULL ;
@@ -6555,7 +6668,7 @@ SWIGINTERN PyObject *_wrap_svn_log_entry_t_changed_paths2_set(PyObject *SWIGUNUS
if (!PyArg_ParseTuple(args,(char *)"OO:svn_log_entry_t_changed_paths2_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6584,13 +6697,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_entry_t_changed_paths2_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
PyObject * obj0 = 0 ;
apr_hash_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_log_entry_t_changed_paths2_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6607,14 +6720,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_entry_t_non_inheritable_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_log_entry_t_non_inheritable_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6635,13 +6748,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_entry_t_non_inheritable_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_log_entry_t_non_inheritable_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6656,14 +6769,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_entry_t_subtractive_merge_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_log_entry_t_subtractive_merge_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6684,13 +6797,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_log_entry_t_subtractive_merge_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_log_entry_t_subtractive_merge_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6705,13 +6818,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_log_entry_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_entry_t *result = 0 ;
+ struct svn_log_entry_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_log_entry_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_log_entry_t *)calloc(1, sizeof(svn_log_entry_t));
+ result = (struct svn_log_entry_t *)calloc(1, sizeof(struct svn_log_entry_t));
svn_swig_py_acquire_py_lock();
@@ -6726,12 +6839,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_log_entry_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_log_entry_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_log_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_log_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6928,13 +7041,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_lock_t_path_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_lock_t_path_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
+ arg1 = (struct svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6956,13 +7069,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_lock_t_path_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_lock_t_path_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
+ arg1 = (struct svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6977,13 +7090,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_lock_t_token_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_lock_t_token_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
+ arg1 = (struct svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7005,13 +7118,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_lock_t_token_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_lock_t_token_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
+ arg1 = (struct svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7026,13 +7139,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_lock_t_owner_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_lock_t_owner_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
+ arg1 = (struct svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7054,13 +7167,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_lock_t_owner_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_lock_t_owner_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
+ arg1 = (struct svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7075,13 +7188,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_lock_t_comment_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_lock_t_comment_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
+ arg1 = (struct svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7103,13 +7216,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_lock_t_comment_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_lock_t_comment_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
+ arg1 = (struct svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7124,14 +7237,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_lock_t_is_dav_comment_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_lock_t_is_dav_comment_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
+ arg1 = (struct svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7152,13 +7265,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_lock_t_is_dav_comment_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_lock_t_is_dav_comment_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
+ arg1 = (struct svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7173,14 +7286,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_lock_t_creation_date_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
apr_time_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_lock_t_creation_date_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
+ arg1 = (struct svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7196,13 +7309,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_lock_t_creation_date_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
PyObject * obj0 = 0 ;
apr_time_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_lock_t_creation_date_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
+ arg1 = (struct svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7217,14 +7330,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_lock_t_expiration_date_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
apr_time_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_lock_t_expiration_date_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
+ arg1 = (struct svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7240,13 +7353,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_lock_t_expiration_date_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
PyObject * obj0 = 0 ;
apr_time_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_lock_t_expiration_date_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
+ arg1 = (struct svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7261,13 +7374,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_lock_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_lock_t *result = 0 ;
+ struct svn_lock_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_lock_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_lock_t *)calloc(1, sizeof(svn_lock_t));
+ result = (struct svn_lock_t *)calloc(1, sizeof(struct svn_lock_t));
svn_swig_py_acquire_py_lock();
@@ -7282,12 +7395,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_lock_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_lock_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
+ arg1 = (struct svn_lock_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_lock_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7452,14 +7565,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_merge_range_t_start_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_merge_range_t *arg1 = (svn_merge_range_t *) 0 ;
+ struct svn_merge_range_t *arg1 = (struct svn_merge_range_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_merge_range_t_start_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_merge_range_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_merge_range_t, svn_argnum_obj0);
+ arg1 = (struct svn_merge_range_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_merge_range_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7480,13 +7593,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_merge_range_t_start_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_merge_range_t *arg1 = (svn_merge_range_t *) 0 ;
+ struct svn_merge_range_t *arg1 = (struct svn_merge_range_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_merge_range_t_start_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_merge_range_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_merge_range_t, svn_argnum_obj0);
+ arg1 = (struct svn_merge_range_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_merge_range_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7501,14 +7614,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_merge_range_t_end_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_merge_range_t *arg1 = (svn_merge_range_t *) 0 ;
+ struct svn_merge_range_t *arg1 = (struct svn_merge_range_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_merge_range_t_end_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_merge_range_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_merge_range_t, svn_argnum_obj0);
+ arg1 = (struct svn_merge_range_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_merge_range_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7529,13 +7642,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_merge_range_t_end_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_merge_range_t *arg1 = (svn_merge_range_t *) 0 ;
+ struct svn_merge_range_t *arg1 = (struct svn_merge_range_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_merge_range_t_end_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_merge_range_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_merge_range_t, svn_argnum_obj0);
+ arg1 = (struct svn_merge_range_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_merge_range_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7550,14 +7663,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_merge_range_t_inheritable_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_merge_range_t *arg1 = (svn_merge_range_t *) 0 ;
+ struct svn_merge_range_t *arg1 = (struct svn_merge_range_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_merge_range_t_inheritable_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_merge_range_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_merge_range_t, svn_argnum_obj0);
+ arg1 = (struct svn_merge_range_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_merge_range_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7578,13 +7691,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_merge_range_t_inheritable_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_merge_range_t *arg1 = (svn_merge_range_t *) 0 ;
+ struct svn_merge_range_t *arg1 = (struct svn_merge_range_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_merge_range_t_inheritable_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_merge_range_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_merge_range_t, svn_argnum_obj0);
+ arg1 = (struct svn_merge_range_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_merge_range_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7599,13 +7712,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_merge_range_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_merge_range_t *result = 0 ;
+ struct svn_merge_range_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_merge_range_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_merge_range_t *)calloc(1, sizeof(svn_merge_range_t));
+ result = (struct svn_merge_range_t *)calloc(1, sizeof(struct svn_merge_range_t));
svn_swig_py_acquire_py_lock();
@@ -7620,12 +7733,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_merge_range_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_merge_range_t *arg1 = (svn_merge_range_t *) 0 ;
+ struct svn_merge_range_t *arg1 = (struct svn_merge_range_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_merge_range_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_merge_range_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_merge_range_t, svn_argnum_obj0);
+ arg1 = (struct svn_merge_range_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_merge_range_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7741,14 +7854,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_location_segment_t_range_start_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_location_segment_t *arg1 = (svn_location_segment_t *) 0 ;
+ struct svn_location_segment_t *arg1 = (struct svn_location_segment_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_location_segment_t_range_start_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_location_segment_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_location_segment_t, svn_argnum_obj0);
+ arg1 = (struct svn_location_segment_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_location_segment_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7769,13 +7882,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_location_segment_t_range_start_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_location_segment_t *arg1 = (svn_location_segment_t *) 0 ;
+ struct svn_location_segment_t *arg1 = (struct svn_location_segment_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_location_segment_t_range_start_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_location_segment_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_location_segment_t, svn_argnum_obj0);
+ arg1 = (struct svn_location_segment_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_location_segment_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7790,14 +7903,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_location_segment_t_range_end_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_location_segment_t *arg1 = (svn_location_segment_t *) 0 ;
+ struct svn_location_segment_t *arg1 = (struct svn_location_segment_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_location_segment_t_range_end_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_location_segment_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_location_segment_t, svn_argnum_obj0);
+ arg1 = (struct svn_location_segment_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_location_segment_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7818,13 +7931,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_location_segment_t_range_end_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_location_segment_t *arg1 = (svn_location_segment_t *) 0 ;
+ struct svn_location_segment_t *arg1 = (struct svn_location_segment_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_location_segment_t_range_end_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_location_segment_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_location_segment_t, svn_argnum_obj0);
+ arg1 = (struct svn_location_segment_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_location_segment_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7839,13 +7952,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_location_segment_t_path_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_location_segment_t *arg1 = (svn_location_segment_t *) 0 ;
+ struct svn_location_segment_t *arg1 = (struct svn_location_segment_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_location_segment_t_path_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_location_segment_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_location_segment_t, svn_argnum_obj0);
+ arg1 = (struct svn_location_segment_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_location_segment_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7867,13 +7980,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_location_segment_t_path_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_location_segment_t *arg1 = (svn_location_segment_t *) 0 ;
+ struct svn_location_segment_t *arg1 = (struct svn_location_segment_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_location_segment_t_path_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_location_segment_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_location_segment_t, svn_argnum_obj0);
+ arg1 = (struct svn_location_segment_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_location_segment_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7888,13 +8001,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_location_segment_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_location_segment_t *result = 0 ;
+ struct svn_location_segment_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_location_segment_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_location_segment_t *)calloc(1, sizeof(svn_location_segment_t));
+ result = (struct svn_location_segment_t *)calloc(1, sizeof(struct svn_location_segment_t));
svn_swig_py_acquire_py_lock();
@@ -7909,12 +8022,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_location_segment_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_location_segment_t *arg1 = (svn_location_segment_t *) 0 ;
+ struct svn_location_segment_t *arg1 = (struct svn_location_segment_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_location_segment_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_location_segment_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_location_segment_t, svn_argnum_obj0);
+ arg1 = (struct svn_location_segment_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_location_segment_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8546,6 +8659,35 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_pool_create_allocator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_boolean_t arg1 ;
+ PyObject * obj0 = 0 ;
+ apr_allocator_t *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_pool_create_allocator",&obj0)) SWIG_fail;
+ {
+ arg1 = (svn_boolean_t)SWIG_As_long (obj0);
+ if (SWIG_arg_fail(svn_argnum_obj0)) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (apr_allocator_t *)svn_pool_create_allocator(arg1);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = svn_swig_NewPointerObj((void*)(result), SWIGTYPE_p_apr_allocator_t,
+ _global_py_pool, args);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_ver_compatible(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_version_t *arg1 = (svn_version_t *) 0 ;
@@ -8620,13 +8762,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_version_checklist_t_label_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_version_checklist_t *arg1 = (svn_version_checklist_t *) 0 ;
+ struct svn_version_checklist_t *arg1 = (struct svn_version_checklist_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_version_checklist_t_label_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_version_checklist_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_checklist_t, svn_argnum_obj0);
+ arg1 = (struct svn_version_checklist_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_checklist_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8648,13 +8790,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_version_checklist_t_label_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_version_checklist_t *arg1 = (svn_version_checklist_t *) 0 ;
+ struct svn_version_checklist_t *arg1 = (struct svn_version_checklist_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_version_checklist_t_label_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_version_checklist_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_checklist_t, svn_argnum_obj0);
+ arg1 = (struct svn_version_checklist_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_checklist_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8669,14 +8811,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_version_checklist_t_version_query_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_version_checklist_t *arg1 = (svn_version_checklist_t *) 0 ;
+ struct svn_version_checklist_t *arg1 = (struct svn_version_checklist_t *) 0 ;
svn_version_t *(*arg2)(void) = (svn_version_t *(*)(void)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_version_checklist_t_version_query_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_version_checklist_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_checklist_t, svn_argnum_obj0);
+ arg1 = (struct svn_version_checklist_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_checklist_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8697,13 +8839,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_version_checklist_t_version_query_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_version_checklist_t *arg1 = (svn_version_checklist_t *) 0 ;
+ struct svn_version_checklist_t *arg1 = (struct svn_version_checklist_t *) 0 ;
PyObject * obj0 = 0 ;
svn_version_t *(*result)(void) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_version_checklist_t_version_query_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_version_checklist_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_checklist_t, svn_argnum_obj0);
+ arg1 = (struct svn_version_checklist_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_checklist_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8718,13 +8860,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_version_checklist_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_version_checklist_t *result = 0 ;
+ struct svn_version_checklist_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_version_checklist_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_version_checklist_t *)calloc(1, sizeof(svn_version_checklist_t));
+ result = (struct svn_version_checklist_t *)calloc(1, sizeof(struct svn_version_checklist_t));
svn_swig_py_acquire_py_lock();
@@ -8739,12 +8881,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_version_checklist_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_version_checklist_t *arg1 = (svn_version_checklist_t *) 0 ;
+ struct svn_version_checklist_t *arg1 = (struct svn_version_checklist_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_version_checklist_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_version_checklist_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_checklist_t, svn_argnum_obj0);
+ arg1 = (struct svn_version_checklist_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_checklist_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8838,6 +8980,645 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_version_extended(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_boolean_t arg1 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ svn_version_extended_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg2 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"O|O:svn_version_extended",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (svn_boolean_t)SWIG_As_long (obj0);
+ if (SWIG_arg_fail(svn_argnum_obj0)) {
+ SWIG_fail;
+ }
+ }
+ if (obj1) {
+ /* Verify that the user supplied a valid pool */
+ if (obj1 != Py_None && obj1 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj1);
+ SWIG_arg_fail(svn_argnum_obj1);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_version_extended_t *)svn_version_extended(arg1,arg2);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = svn_swig_NewPointerObj((void*)(result), SWIGTYPE_p_svn_version_extended_t,
+ _global_py_pool, args);
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_version_ext_build_date(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_version_extended_t *arg1 = (svn_version_extended_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ char *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_version_ext_build_date",&obj0)) SWIG_fail;
+ {
+ arg1 = (svn_version_extended_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_extended_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (char *)svn_version_ext_build_date((struct svn_version_extended_t const *)arg1);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_version_ext_build_time(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_version_extended_t *arg1 = (svn_version_extended_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ char *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_version_ext_build_time",&obj0)) SWIG_fail;
+ {
+ arg1 = (svn_version_extended_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_extended_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (char *)svn_version_ext_build_time((struct svn_version_extended_t const *)arg1);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_version_ext_build_host(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_version_extended_t *arg1 = (svn_version_extended_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ char *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_version_ext_build_host",&obj0)) SWIG_fail;
+ {
+ arg1 = (svn_version_extended_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_extended_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (char *)svn_version_ext_build_host((struct svn_version_extended_t const *)arg1);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_version_ext_copyright(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_version_extended_t *arg1 = (svn_version_extended_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ char *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_version_ext_copyright",&obj0)) SWIG_fail;
+ {
+ arg1 = (svn_version_extended_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_extended_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (char *)svn_version_ext_copyright((struct svn_version_extended_t const *)arg1);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_version_ext_runtime_host(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_version_extended_t *arg1 = (svn_version_extended_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ char *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_version_ext_runtime_host",&obj0)) SWIG_fail;
+ {
+ arg1 = (svn_version_extended_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_extended_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (char *)svn_version_ext_runtime_host((struct svn_version_extended_t const *)arg1);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_version_ext_runtime_osname(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_version_extended_t *arg1 = (svn_version_extended_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ char *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_version_ext_runtime_osname",&obj0)) SWIG_fail;
+ {
+ arg1 = (svn_version_extended_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_extended_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (char *)svn_version_ext_runtime_osname((struct svn_version_extended_t const *)arg1);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_version_ext_linked_lib_t_name_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_version_ext_linked_lib_t *arg1 = (struct svn_version_ext_linked_lib_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"Os:svn_version_ext_linked_lib_t_name_set",&obj0,&arg2)) SWIG_fail;
+ {
+ arg1 = (struct svn_version_ext_linked_lib_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_ext_linked_lib_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->name) free((char *)arg1->name);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->name = copied;
+ }
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_version_ext_linked_lib_t_name_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_version_ext_linked_lib_t *arg1 = (struct svn_version_ext_linked_lib_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ char *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_version_ext_linked_lib_t_name_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_version_ext_linked_lib_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_ext_linked_lib_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (char *) ((arg1)->name);
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_version_ext_linked_lib_t_compiled_version_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_version_ext_linked_lib_t *arg1 = (struct svn_version_ext_linked_lib_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"Os:svn_version_ext_linked_lib_t_compiled_version_set",&obj0,&arg2)) SWIG_fail;
+ {
+ arg1 = (struct svn_version_ext_linked_lib_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_ext_linked_lib_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->compiled_version) free((char *)arg1->compiled_version);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->compiled_version = copied;
+ }
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_version_ext_linked_lib_t_compiled_version_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_version_ext_linked_lib_t *arg1 = (struct svn_version_ext_linked_lib_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ char *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_version_ext_linked_lib_t_compiled_version_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_version_ext_linked_lib_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_ext_linked_lib_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (char *) ((arg1)->compiled_version);
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_version_ext_linked_lib_t_runtime_version_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_version_ext_linked_lib_t *arg1 = (struct svn_version_ext_linked_lib_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"Os:svn_version_ext_linked_lib_t_runtime_version_set",&obj0,&arg2)) SWIG_fail;
+ {
+ arg1 = (struct svn_version_ext_linked_lib_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_ext_linked_lib_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->runtime_version) free((char *)arg1->runtime_version);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->runtime_version = copied;
+ }
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_version_ext_linked_lib_t_runtime_version_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_version_ext_linked_lib_t *arg1 = (struct svn_version_ext_linked_lib_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ char *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_version_ext_linked_lib_t_runtime_version_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_version_ext_linked_lib_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_ext_linked_lib_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (char *) ((arg1)->runtime_version);
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_svn_version_ext_linked_lib_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_version_ext_linked_lib_t *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)":new_svn_version_ext_linked_lib_t")) SWIG_fail;
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (struct svn_version_ext_linked_lib_t *)calloc(1, sizeof(struct svn_version_ext_linked_lib_t));
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = svn_swig_NewPointerObj((void*)(result), SWIGTYPE_p_svn_version_ext_linked_lib_t,
+ _global_py_pool, args);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_svn_version_ext_linked_lib_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_version_ext_linked_lib_t *arg1 = (struct svn_version_ext_linked_lib_t *) 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_version_ext_linked_lib_t",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_version_ext_linked_lib_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_ext_linked_lib_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ free((char *) arg1);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *svn_version_ext_linked_lib_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *obj;
+ if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+ SWIG_TypeNewClientData(SWIGTYPE_p_svn_version_ext_linked_lib_t, SWIG_NewClientData(obj));
+ return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_svn_version_ext_linked_libs(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_version_extended_t *arg1 = (svn_version_extended_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ apr_array_header_t *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_version_ext_linked_libs",&obj0)) SWIG_fail;
+ {
+ arg1 = (svn_version_extended_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_extended_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (apr_array_header_t *)svn_version_ext_linked_libs((struct svn_version_extended_t const *)arg1);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = svn_swig_NewPointerObj((void*)(result), SWIGTYPE_p_apr_array_header_t,
+ _global_py_pool, args);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_version_ext_loaded_lib_t_name_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_version_ext_loaded_lib_t *arg1 = (struct svn_version_ext_loaded_lib_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"Os:svn_version_ext_loaded_lib_t_name_set",&obj0,&arg2)) SWIG_fail;
+ {
+ arg1 = (struct svn_version_ext_loaded_lib_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_ext_loaded_lib_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->name) free((char *)arg1->name);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->name = copied;
+ }
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_version_ext_loaded_lib_t_name_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_version_ext_loaded_lib_t *arg1 = (struct svn_version_ext_loaded_lib_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ char *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_version_ext_loaded_lib_t_name_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_version_ext_loaded_lib_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_ext_loaded_lib_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (char *) ((arg1)->name);
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_version_ext_loaded_lib_t_version_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_version_ext_loaded_lib_t *arg1 = (struct svn_version_ext_loaded_lib_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"Os:svn_version_ext_loaded_lib_t_version_set",&obj0,&arg2)) SWIG_fail;
+ {
+ arg1 = (struct svn_version_ext_loaded_lib_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_ext_loaded_lib_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->version) free((char *)arg1->version);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->version = copied;
+ }
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_version_ext_loaded_lib_t_version_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_version_ext_loaded_lib_t *arg1 = (struct svn_version_ext_loaded_lib_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ char *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_version_ext_loaded_lib_t_version_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_version_ext_loaded_lib_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_ext_loaded_lib_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (char *) ((arg1)->version);
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_svn_version_ext_loaded_lib_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_version_ext_loaded_lib_t *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)":new_svn_version_ext_loaded_lib_t")) SWIG_fail;
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (struct svn_version_ext_loaded_lib_t *)calloc(1, sizeof(struct svn_version_ext_loaded_lib_t));
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = svn_swig_NewPointerObj((void*)(result), SWIGTYPE_p_svn_version_ext_loaded_lib_t,
+ _global_py_pool, args);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_svn_version_ext_loaded_lib_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_version_ext_loaded_lib_t *arg1 = (struct svn_version_ext_loaded_lib_t *) 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_version_ext_loaded_lib_t",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_version_ext_loaded_lib_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_ext_loaded_lib_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ free((char *) arg1);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *svn_version_ext_loaded_lib_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *obj;
+ if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+ SWIG_TypeNewClientData(SWIGTYPE_p_svn_version_ext_loaded_lib_t, SWIG_NewClientData(obj));
+ return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_svn_version_ext_loaded_libs(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_version_extended_t *arg1 = (svn_version_extended_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ apr_array_header_t *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_version_ext_loaded_libs",&obj0)) SWIG_fail;
+ {
+ arg1 = (svn_version_extended_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_version_extended_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (apr_array_header_t *)svn_version_ext_loaded_libs((struct svn_version_extended_t const *)arg1);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = svn_swig_NewPointerObj((void*)(result), SWIGTYPE_p_apr_array_header_t,
+ _global_py_pool, args);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *svn_version_extended_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *obj;
+ if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+ SWIG_TypeNewClientData(SWIGTYPE_p_svn_version_extended_t, SWIG_NewClientData(obj));
+ return SWIG_Py_Void();
+}
+
SWIGINTERN PyObject *_wrap_svn_version_checklist_invoke_version_query(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_version_checklist_t *arg1 = (svn_version_checklist_t *) 0 ;
@@ -9007,6 +9788,160 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_prop_inherited_item_t_path_or_url_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_prop_inherited_item_t *arg1 = (struct svn_prop_inherited_item_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"Os:svn_prop_inherited_item_t_path_or_url_set",&obj0,&arg2)) SWIG_fail;
+ {
+ arg1 = (struct svn_prop_inherited_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_prop_inherited_item_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->path_or_url) free((char *)arg1->path_or_url);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->path_or_url = copied;
+ }
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_prop_inherited_item_t_path_or_url_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_prop_inherited_item_t *arg1 = (struct svn_prop_inherited_item_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ char *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_prop_inherited_item_t_path_or_url_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_prop_inherited_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_prop_inherited_item_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (char *) ((arg1)->path_or_url);
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_prop_inherited_item_t_prop_hash_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_prop_inherited_item_t *arg1 = (struct svn_prop_inherited_item_t *) 0 ;
+ apr_hash_t *arg2 = (apr_hash_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_prop_inherited_item_t_prop_hash_set",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (struct svn_prop_inherited_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_prop_inherited_item_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg2 = (apr_hash_t *)svn_swig_MustGetPtr(obj1, SWIGTYPE_p_apr_hash_t, svn_argnum_obj1);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (arg1) (arg1)->prop_hash = arg2;
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_prop_inherited_item_t_prop_hash_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_prop_inherited_item_t *arg1 = (struct svn_prop_inherited_item_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ apr_hash_t *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_prop_inherited_item_t_prop_hash_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_prop_inherited_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_prop_inherited_item_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (apr_hash_t *) ((arg1)->prop_hash);
+ resultobj = svn_swig_NewPointerObj((void*)(result), SWIGTYPE_p_apr_hash_t,
+ _global_py_pool, args);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_svn_prop_inherited_item_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_prop_inherited_item_t *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)":new_svn_prop_inherited_item_t")) SWIG_fail;
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (struct svn_prop_inherited_item_t *)calloc(1, sizeof(struct svn_prop_inherited_item_t));
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = svn_swig_NewPointerObj((void*)(result), SWIGTYPE_p_svn_prop_inherited_item_t,
+ _global_py_pool, args);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_svn_prop_inherited_item_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_prop_inherited_item_t *arg1 = (struct svn_prop_inherited_item_t *) 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_prop_inherited_item_t",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_prop_inherited_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_prop_inherited_item_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ free((char *) arg1);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *svn_prop_inherited_item_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *obj;
+ if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+ SWIG_TypeNewClientData(SWIGTYPE_p_svn_prop_inherited_item_t, SWIG_NewClientData(obj));
+ return SWIG_Py_Void();
+}
+
SWIGINTERN PyObject *_wrap_svn_prop_hash_to_array(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
apr_hash_t *arg1 = (apr_hash_t *) 0 ;
@@ -9046,7 +9981,7 @@ SWIGINTERN PyObject *_wrap_svn_prop_hash_to_array(PyObject *SWIGUNUSEDPARM(self)
{
svn_swig_py_release_py_lock();
- result = (apr_array_header_t *)svn_prop_hash_to_array(arg1,arg2);
+ result = (apr_array_header_t *)svn_prop_hash_to_array((apr_hash_t const *)arg1,arg2);
svn_swig_py_acquire_py_lock();
@@ -9155,7 +10090,7 @@ SWIGINTERN PyObject *_wrap_svn_prop_hash_dup(PyObject *SWIGUNUSEDPARM(self), PyO
{
svn_swig_py_release_py_lock();
- result = (apr_hash_t *)svn_prop_hash_dup(arg1,arg2);
+ result = (apr_hash_t *)svn_prop_hash_dup((apr_hash_t const *)arg1,arg2);
svn_swig_py_acquire_py_lock();
@@ -9191,7 +10126,7 @@ SWIGINTERN PyObject *_wrap_svn_prop_get_value(PyObject *SWIGUNUSEDPARM(self), Py
{
svn_swig_py_release_py_lock();
- result = (char *)svn_prop_get_value(arg1,(char const *)arg2);
+ result = (char *)svn_prop_get_value((apr_hash_t const *)arg1,(char const *)arg2);
svn_swig_py_acquire_py_lock();
@@ -9203,6 +10138,27 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_property_kind2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ char *arg1 = (char *) 0 ;
+ svn_prop_kind_t result;
+
+ if (!PyArg_ParseTuple(args,(char *)"s:svn_property_kind2",&arg1)) SWIG_fail;
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_prop_kind_t)svn_property_kind2((char const *)arg1);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_From_long((long)(result));
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_property_kind(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
int *arg1 = (int *) 0 ;
@@ -9333,6 +10289,90 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_prop_is_known_svn_rev_prop(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ char *arg1 = (char *) 0 ;
+ svn_boolean_t result;
+
+ if (!PyArg_ParseTuple(args,(char *)"s:svn_prop_is_known_svn_rev_prop",&arg1)) SWIG_fail;
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_boolean_t)svn_prop_is_known_svn_rev_prop((char const *)arg1);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_From_long((long)(result));
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_prop_is_known_svn_node_prop(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ char *arg1 = (char *) 0 ;
+ svn_boolean_t result;
+
+ if (!PyArg_ParseTuple(args,(char *)"s:svn_prop_is_known_svn_node_prop",&arg1)) SWIG_fail;
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_boolean_t)svn_prop_is_known_svn_node_prop((char const *)arg1);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_From_long((long)(result));
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_prop_is_known_svn_file_prop(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ char *arg1 = (char *) 0 ;
+ svn_boolean_t result;
+
+ if (!PyArg_ParseTuple(args,(char *)"s:svn_prop_is_known_svn_file_prop",&arg1)) SWIG_fail;
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_boolean_t)svn_prop_is_known_svn_file_prop((char const *)arg1);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_From_long((long)(result));
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_prop_is_known_svn_dir_prop(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ char *arg1 = (char *) 0 ;
+ svn_boolean_t result;
+
+ if (!PyArg_ParseTuple(args,(char *)"s:svn_prop_is_known_svn_dir_prop",&arg1)) SWIG_fail;
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_boolean_t)svn_prop_is_known_svn_dir_prop((char const *)arg1);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_From_long((long)(result));
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_prop_needs_translation(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
char *arg1 = (char *) 0 ;
@@ -9489,7 +10529,7 @@ SWIGINTERN PyObject *_wrap_svn_prop_diffs(PyObject *SWIGUNUSEDPARM(self), PyObje
{
svn_swig_py_release_py_lock();
- result = (svn_error_t *)svn_prop_diffs(arg1,arg2,arg3,arg4);
+ result = (svn_error_t *)svn_prop_diffs(arg1,(apr_hash_t const *)arg2,(apr_hash_t const *)arg3,arg4);
svn_swig_py_acquire_py_lock();
@@ -9543,13 +10583,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_subcommand_desc2_t_name_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_opt_subcommand_desc2_t_name_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_opt_subcommand_desc2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc2_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9571,13 +10611,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_subcommand_desc2_t_name_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_opt_subcommand_desc2_t_name_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_opt_subcommand_desc2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc2_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9592,14 +10632,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_subcommand_desc2_t_cmd_func_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
svn_opt_subcommand_t *arg2 = (svn_opt_subcommand_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_opt_subcommand_desc2_t_cmd_func_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_opt_subcommand_desc2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc2_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9620,13 +10660,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_subcommand_desc2_t_cmd_func_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_opt_subcommand_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_opt_subcommand_desc2_t_cmd_func_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_opt_subcommand_desc2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc2_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9641,14 +10681,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_subcommand_desc2_t_aliases_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
char **arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_opt_subcommand_desc2_t_aliases_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_opt_subcommand_desc2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc2_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9676,13 +10716,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_subcommand_desc2_t_aliases_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
PyObject * obj0 = 0 ;
char **result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_opt_subcommand_desc2_t_aliases_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_opt_subcommand_desc2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc2_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9698,13 +10738,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_subcommand_desc2_t_help_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_opt_subcommand_desc2_t_help_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_opt_subcommand_desc2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc2_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9726,13 +10766,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_subcommand_desc2_t_help_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_opt_subcommand_desc2_t_help_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_opt_subcommand_desc2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc2_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9747,14 +10787,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_subcommand_desc2_t_valid_options_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
int *arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_opt_subcommand_desc2_t_valid_options_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_opt_subcommand_desc2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc2_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9782,13 +10822,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_subcommand_desc2_t_valid_options_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
PyObject * obj0 = 0 ;
int *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_opt_subcommand_desc2_t_valid_options_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_opt_subcommand_desc2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc2_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9804,13 +10844,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_subcommand_desc2_t_desc_overrides_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_opt_subcommand_desc2_t_desc_overrides *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_opt_subcommand_desc2_t_desc_overrides_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_opt_subcommand_desc2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc2_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9826,13 +10866,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_opt_subcommand_desc2_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_subcommand_desc2_t *result = 0 ;
+ struct svn_opt_subcommand_desc2_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_opt_subcommand_desc2_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_opt_subcommand_desc2_t *)calloc(1, sizeof(svn_opt_subcommand_desc2_t));
+ result = (struct svn_opt_subcommand_desc2_t *)calloc(1, sizeof(struct svn_opt_subcommand_desc2_t));
svn_swig_py_acquire_py_lock();
@@ -9847,12 +10887,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_opt_subcommand_desc2_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_opt_subcommand_desc2_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_opt_subcommand_desc2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc2_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10034,13 +11074,13 @@ SWIGINTERN PyObject *svn_opt_subcommand_desc2_t_desc_overrides_swigregister(PyOb
SWIGINTERN PyObject *_wrap_svn_opt_subcommand_desc_t_name_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_opt_subcommand_desc_t_name_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_opt_subcommand_desc_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_subcommand_desc_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10062,13 +11102,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_subcommand_desc_t_name_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_opt_subcommand_desc_t_name_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_opt_subcommand_desc_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_subcommand_desc_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10083,14 +11123,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_subcommand_desc_t_cmd_func_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
svn_opt_subcommand_t *arg2 = (svn_opt_subcommand_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_opt_subcommand_desc_t_cmd_func_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_opt_subcommand_desc_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_subcommand_desc_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10111,13 +11151,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_subcommand_desc_t_cmd_func_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
PyObject * obj0 = 0 ;
svn_opt_subcommand_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_opt_subcommand_desc_t_cmd_func_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_opt_subcommand_desc_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_subcommand_desc_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10132,14 +11172,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_subcommand_desc_t_aliases_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
char **arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_opt_subcommand_desc_t_aliases_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_opt_subcommand_desc_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_subcommand_desc_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10167,13 +11207,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_subcommand_desc_t_aliases_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
PyObject * obj0 = 0 ;
char **result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_opt_subcommand_desc_t_aliases_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_opt_subcommand_desc_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_subcommand_desc_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10189,13 +11229,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_subcommand_desc_t_help_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_opt_subcommand_desc_t_help_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_opt_subcommand_desc_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_subcommand_desc_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10217,13 +11257,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_subcommand_desc_t_help_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_opt_subcommand_desc_t_help_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_opt_subcommand_desc_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_subcommand_desc_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10238,14 +11278,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_subcommand_desc_t_valid_options_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
int *arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_opt_subcommand_desc_t_valid_options_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_opt_subcommand_desc_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_subcommand_desc_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10273,13 +11313,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_subcommand_desc_t_valid_options_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
PyObject * obj0 = 0 ;
int *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_opt_subcommand_desc_t_valid_options_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_opt_subcommand_desc_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_subcommand_desc_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10295,13 +11335,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_opt_subcommand_desc_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_subcommand_desc_t *result = 0 ;
+ struct svn_opt_subcommand_desc_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_opt_subcommand_desc_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_opt_subcommand_desc_t *)calloc(1, sizeof(svn_opt_subcommand_desc_t));
+ result = (struct svn_opt_subcommand_desc_t *)calloc(1, sizeof(struct svn_opt_subcommand_desc_t));
svn_swig_py_acquire_py_lock();
@@ -10316,12 +11356,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_opt_subcommand_desc_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_opt_subcommand_desc_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_opt_subcommand_desc_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_subcommand_desc_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_subcommand_desc_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10959,14 +11999,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_revision_value_t_number_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_revision_value_t *arg1 = (svn_opt_revision_value_t *) 0 ;
+ union svn_opt_revision_value_t *arg1 = (union svn_opt_revision_value_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_opt_revision_value_t_number_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_opt_revision_value_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_value_t, svn_argnum_obj0);
+ arg1 = (union svn_opt_revision_value_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_value_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10987,13 +12027,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_revision_value_t_number_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_revision_value_t *arg1 = (svn_opt_revision_value_t *) 0 ;
+ union svn_opt_revision_value_t *arg1 = (union svn_opt_revision_value_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_opt_revision_value_t_number_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_opt_revision_value_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_value_t, svn_argnum_obj0);
+ arg1 = (union svn_opt_revision_value_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_value_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11008,14 +12048,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_revision_value_t_date_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_revision_value_t *arg1 = (svn_opt_revision_value_t *) 0 ;
+ union svn_opt_revision_value_t *arg1 = (union svn_opt_revision_value_t *) 0 ;
apr_time_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_opt_revision_value_t_date_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_opt_revision_value_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_value_t, svn_argnum_obj0);
+ arg1 = (union svn_opt_revision_value_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_value_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11031,13 +12071,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_revision_value_t_date_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_revision_value_t *arg1 = (svn_opt_revision_value_t *) 0 ;
+ union svn_opt_revision_value_t *arg1 = (union svn_opt_revision_value_t *) 0 ;
PyObject * obj0 = 0 ;
apr_time_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_opt_revision_value_t_date_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_opt_revision_value_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_value_t, svn_argnum_obj0);
+ arg1 = (union svn_opt_revision_value_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_value_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11052,13 +12092,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_opt_revision_value_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_revision_value_t *result = 0 ;
+ union svn_opt_revision_value_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_opt_revision_value_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_opt_revision_value_t *)calloc(1, sizeof(svn_opt_revision_value_t));
+ result = (union svn_opt_revision_value_t *)calloc(1, sizeof(union svn_opt_revision_value_t));
svn_swig_py_acquire_py_lock();
@@ -11073,12 +12113,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_opt_revision_value_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_revision_value_t *arg1 = (svn_opt_revision_value_t *) 0 ;
+ union svn_opt_revision_value_t *arg1 = (union svn_opt_revision_value_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_opt_revision_value_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_opt_revision_value_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_value_t, svn_argnum_obj0);
+ arg1 = (union svn_opt_revision_value_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_value_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11107,14 +12147,14 @@ SWIGINTERN PyObject *svn_opt_revision_value_t_swigregister(PyObject *SWIGUNUSEDP
SWIGINTERN PyObject *_wrap_svn_opt_revision_t_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_revision_t *arg1 = (svn_opt_revision_t *) 0 ;
+ struct svn_opt_revision_t *arg1 = (struct svn_opt_revision_t *) 0 ;
enum svn_opt_revision_kind arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_opt_revision_t_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_opt_revision_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_revision_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11135,13 +12175,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_revision_t_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_revision_t *arg1 = (svn_opt_revision_t *) 0 ;
+ struct svn_opt_revision_t *arg1 = (struct svn_opt_revision_t *) 0 ;
PyObject * obj0 = 0 ;
enum svn_opt_revision_kind result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_opt_revision_t_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_opt_revision_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_revision_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11156,14 +12196,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_revision_t_value_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_revision_t *arg1 = (svn_opt_revision_t *) 0 ;
+ struct svn_opt_revision_t *arg1 = (struct svn_opt_revision_t *) 0 ;
svn_opt_revision_value_t *arg2 = (svn_opt_revision_value_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_opt_revision_t_value_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_opt_revision_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_revision_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11184,13 +12224,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_revision_t_value_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_revision_t *arg1 = (svn_opt_revision_t *) 0 ;
+ struct svn_opt_revision_t *arg1 = (struct svn_opt_revision_t *) 0 ;
PyObject * obj0 = 0 ;
svn_opt_revision_value_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_opt_revision_t_value_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_opt_revision_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_revision_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11206,13 +12246,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_opt_revision_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_revision_t *result = 0 ;
+ struct svn_opt_revision_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_opt_revision_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_opt_revision_t *)calloc(1, sizeof(svn_opt_revision_t));
+ result = (struct svn_opt_revision_t *)calloc(1, sizeof(struct svn_opt_revision_t));
svn_swig_py_acquire_py_lock();
@@ -11227,12 +12267,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_opt_revision_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_revision_t *arg1 = (svn_opt_revision_t *) 0 ;
+ struct svn_opt_revision_t *arg1 = (struct svn_opt_revision_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_opt_revision_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_opt_revision_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_revision_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11261,14 +12301,14 @@ SWIGINTERN PyObject *svn_opt_revision_t_swigregister(PyObject *SWIGUNUSEDPARM(se
SWIGINTERN PyObject *_wrap_svn_opt_revision_range_t_start_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_revision_range_t *arg1 = (svn_opt_revision_range_t *) 0 ;
+ struct svn_opt_revision_range_t *arg1 = (struct svn_opt_revision_range_t *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_opt_revision_range_t_start_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_opt_revision_range_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_range_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_revision_range_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_range_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11289,13 +12329,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_revision_range_t_start_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_revision_range_t *arg1 = (svn_opt_revision_range_t *) 0 ;
+ struct svn_opt_revision_range_t *arg1 = (struct svn_opt_revision_range_t *) 0 ;
PyObject * obj0 = 0 ;
svn_opt_revision_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_opt_revision_range_t_start_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_opt_revision_range_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_range_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_revision_range_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_range_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11311,14 +12351,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_revision_range_t_end_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_revision_range_t *arg1 = (svn_opt_revision_range_t *) 0 ;
+ struct svn_opt_revision_range_t *arg1 = (struct svn_opt_revision_range_t *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_opt_revision_range_t_end_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_opt_revision_range_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_range_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_revision_range_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_range_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11339,13 +12379,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_opt_revision_range_t_end_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_revision_range_t *arg1 = (svn_opt_revision_range_t *) 0 ;
+ struct svn_opt_revision_range_t *arg1 = (struct svn_opt_revision_range_t *) 0 ;
PyObject * obj0 = 0 ;
svn_opt_revision_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_opt_revision_range_t_end_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_opt_revision_range_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_range_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_revision_range_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_range_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11361,13 +12401,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_opt_revision_range_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_revision_range_t *result = 0 ;
+ struct svn_opt_revision_range_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_opt_revision_range_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_opt_revision_range_t *)calloc(1, sizeof(svn_opt_revision_range_t));
+ result = (struct svn_opt_revision_range_t *)calloc(1, sizeof(struct svn_opt_revision_range_t));
svn_swig_py_acquire_py_lock();
@@ -11382,12 +12422,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_opt_revision_range_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_opt_revision_range_t *arg1 = (svn_opt_revision_range_t *) 0 ;
+ struct svn_opt_revision_range_t *arg1 = (struct svn_opt_revision_range_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_opt_revision_range_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_opt_revision_range_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_range_t, svn_argnum_obj0);
+ arg1 = (struct svn_opt_revision_range_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_opt_revision_range_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12081,6 +13121,120 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_opt_print_help4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ apr_getopt_t *arg1 = (apr_getopt_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ svn_boolean_t arg5 ;
+ char *arg6 = (char *) 0 ;
+ char *arg7 = (char *) 0 ;
+ svn_opt_subcommand_desc2_t *arg8 = (svn_opt_subcommand_desc2_t *) 0 ;
+ apr_getopt_option_t *arg9 = (apr_getopt_option_t *) 0 ;
+ int *arg10 = (int *) 0 ;
+ char *arg11 = (char *) 0 ;
+ apr_pool_t *arg12 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ int temp10 ;
+ int res10 = SWIG_TMPOBJ ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj7 = 0 ;
+ PyObject * obj8 = 0 ;
+ PyObject * obj10 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg12 = _global_pool;
+ arg10 = &temp10;
+ if (!PyArg_ParseTuple(args,(char *)"OsOOOssOOs|O:svn_opt_print_help4",&obj0,&arg2,&obj2,&obj3,&obj4,&arg6,&arg7,&obj7,&obj8,&arg11,&obj10)) SWIG_fail;
+ {
+ arg1 = (apr_getopt_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_apr_getopt_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg3 = (svn_boolean_t)SWIG_As_long (obj2);
+ if (SWIG_arg_fail(svn_argnum_obj2)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg4 = (svn_boolean_t)SWIG_As_long (obj3);
+ if (SWIG_arg_fail(svn_argnum_obj3)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg5 = (svn_boolean_t)SWIG_As_long (obj4);
+ if (SWIG_arg_fail(svn_argnum_obj4)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg8 = (svn_opt_subcommand_desc2_t *)svn_swig_MustGetPtr(obj7, SWIGTYPE_p_svn_opt_subcommand_desc2_t, svn_argnum_obj7);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg9 = (apr_getopt_option_t *)svn_swig_MustGetPtr(obj8, SWIGTYPE_p_apr_getopt_option_t, svn_argnum_obj8);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj10) {
+ /* Verify that the user supplied a valid pool */
+ if (obj10 != Py_None && obj10 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj10);
+ SWIG_arg_fail(svn_argnum_obj10);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_opt_print_help4(arg1,(char const *)arg2,arg3,arg4,arg5,(char const *)arg6,(char const *)arg7,(struct svn_opt_subcommand_desc2_t const *)arg8,(apr_getopt_option_t const *)arg9,(int const *)arg10,(char const *)arg11,arg12);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ if (SWIG_IsTmpObj(res10)) {
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg10)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res10) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg10), SWIGTYPE_p_int, new_flags));
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_opt_print_help3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
apr_getopt_t *arg1 = (apr_getopt_t *) 0 ;
@@ -12379,15 +13533,148 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_cmdline_init(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ char *arg1 = (char *) 0 ;
+ FILE *arg2 = (FILE *) 0 ;
+ PyObject * obj1 = 0 ;
+ int result;
+
+ if (!PyArg_ParseTuple(args,(char *)"sO:svn_cmdline_init",&arg1,&obj1)) SWIG_fail;
+ {
+ arg2 = PyFile_AsFile(obj1);
+ if (arg2 == NULL) {
+ PyErr_SetString(PyExc_ValueError, "Must pass in a valid file object");
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (int)svn_cmdline_init((char const *)arg1,arg2);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_From_long((long)(result));
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_cmdline_create_auth_baton(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_auth_baton_t **arg1 = (svn_auth_baton_t **) 0 ;
+ svn_boolean_t arg2 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+ char *arg5 = (char *) 0 ;
+ svn_boolean_t arg6 ;
+ svn_boolean_t arg7 ;
+ svn_config_t *arg8 = (svn_config_t *) 0 ;
+ svn_cancel_func_t arg9 = (svn_cancel_func_t) 0 ;
+ void *arg10 = (void *) 0 ;
+ apr_pool_t *arg11 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_auth_baton_t *temp1 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj5 = 0 ;
+ PyObject * obj6 = 0 ;
+ PyObject * obj7 = 0 ;
+ PyObject * obj8 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg11 = _global_pool;
+ arg1 = &temp1;
+ if (!PyArg_ParseTuple(args,(char *)"OzzzOOOO|O:svn_cmdline_create_auth_baton",&obj0,&arg3,&arg4,&arg5,&obj4,&obj5,&obj6,&obj7,&obj8)) SWIG_fail;
+ {
+ arg2 = (svn_boolean_t)SWIG_As_long (obj0);
+ if (SWIG_arg_fail(svn_argnum_obj0)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg6 = (svn_boolean_t)SWIG_As_long (obj4);
+ if (SWIG_arg_fail(svn_argnum_obj4)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg7 = (svn_boolean_t)SWIG_As_long (obj5);
+ if (SWIG_arg_fail(svn_argnum_obj5)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg8 = (svn_config_t *)svn_swig_MustGetPtr(obj6, SWIGTYPE_p_svn_config_t, svn_argnum_obj6);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg9 = svn_swig_py_cancel_func;
+ arg10 = obj7; /* our function is the baton. */
+ }
+ if (obj8) {
+ /* Verify that the user supplied a valid pool */
+ if (obj8 != Py_None && obj8 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj8);
+ SWIG_arg_fail(svn_argnum_obj8);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_cmdline_create_auth_baton(arg1,arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,arg6,arg7,arg8,arg9,arg10,arg11);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg1, SWIGTYPE_p_svn_auth_baton_t,
+ _global_py_pool, args))
+
+ ;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_auth_provider_t_cred_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_provider_t *arg1 = (svn_auth_provider_t *) 0 ;
+ struct svn_auth_provider_t *arg1 = (struct svn_auth_provider_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_auth_provider_t_cred_kind_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_auth_provider_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_provider_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12409,13 +13696,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_provider_t_cred_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_provider_t *arg1 = (svn_auth_provider_t *) 0 ;
+ struct svn_auth_provider_t *arg1 = (struct svn_auth_provider_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_auth_provider_t_cred_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_provider_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_provider_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12430,14 +13717,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_provider_t_first_credentials_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_provider_t *arg1 = (svn_auth_provider_t *) 0 ;
+ struct svn_auth_provider_t *arg1 = (struct svn_auth_provider_t *) 0 ;
svn_error_t *(*arg2)(void **,void **,void *,apr_hash_t *,char const *,apr_pool_t *) = (svn_error_t *(*)(void **,void **,void *,apr_hash_t *,char const *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_auth_provider_t_first_credentials_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_auth_provider_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_provider_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12458,13 +13745,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_provider_t_first_credentials_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_provider_t *arg1 = (svn_auth_provider_t *) 0 ;
+ struct svn_auth_provider_t *arg1 = (struct svn_auth_provider_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void **,void **,void *,apr_hash_t *,char const *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_auth_provider_t_first_credentials_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_provider_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_provider_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12479,14 +13766,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_provider_t_next_credentials_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_provider_t *arg1 = (svn_auth_provider_t *) 0 ;
+ struct svn_auth_provider_t *arg1 = (struct svn_auth_provider_t *) 0 ;
svn_error_t *(*arg2)(void **,void *,void *,apr_hash_t *,char const *,apr_pool_t *) = (svn_error_t *(*)(void **,void *,void *,apr_hash_t *,char const *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_auth_provider_t_next_credentials_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_auth_provider_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_provider_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12507,13 +13794,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_provider_t_next_credentials_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_provider_t *arg1 = (svn_auth_provider_t *) 0 ;
+ struct svn_auth_provider_t *arg1 = (struct svn_auth_provider_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void **,void *,void *,apr_hash_t *,char const *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_auth_provider_t_next_credentials_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_provider_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_provider_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12528,14 +13815,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_provider_t_save_credentials_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_provider_t *arg1 = (svn_auth_provider_t *) 0 ;
+ struct svn_auth_provider_t *arg1 = (struct svn_auth_provider_t *) 0 ;
svn_error_t *(*arg2)(svn_boolean_t *,void *,void *,apr_hash_t *,char const *,apr_pool_t *) = (svn_error_t *(*)(svn_boolean_t *,void *,void *,apr_hash_t *,char const *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_auth_provider_t_save_credentials_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_auth_provider_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_provider_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12556,13 +13843,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_provider_t_save_credentials_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_provider_t *arg1 = (svn_auth_provider_t *) 0 ;
+ struct svn_auth_provider_t *arg1 = (struct svn_auth_provider_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_boolean_t *,void *,void *,apr_hash_t *,char const *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_auth_provider_t_save_credentials_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_provider_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_provider_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12577,13 +13864,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_auth_provider_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_provider_t *result = 0 ;
+ struct svn_auth_provider_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_auth_provider_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_auth_provider_t *)calloc(1, sizeof(svn_auth_provider_t));
+ result = (struct svn_auth_provider_t *)calloc(1, sizeof(struct svn_auth_provider_t));
svn_swig_py_acquire_py_lock();
@@ -12598,12 +13885,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_auth_provider_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_provider_t *arg1 = (svn_auth_provider_t *) 0 ;
+ struct svn_auth_provider_t *arg1 = (struct svn_auth_provider_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_auth_provider_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_provider_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_provider_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12632,14 +13919,14 @@ SWIGINTERN PyObject *svn_auth_provider_t_swigregister(PyObject *SWIGUNUSEDPARM(s
SWIGINTERN PyObject *_wrap_svn_auth_provider_object_t_vtable_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_provider_object_t *arg1 = (svn_auth_provider_object_t *) 0 ;
+ struct svn_auth_provider_object_t *arg1 = (struct svn_auth_provider_object_t *) 0 ;
svn_auth_provider_t *arg2 = (svn_auth_provider_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_auth_provider_object_t_vtable_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_auth_provider_object_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_object_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_provider_object_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_object_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12660,13 +13947,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_provider_object_t_vtable_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_provider_object_t *arg1 = (svn_auth_provider_object_t *) 0 ;
+ struct svn_auth_provider_object_t *arg1 = (struct svn_auth_provider_object_t *) 0 ;
PyObject * obj0 = 0 ;
svn_auth_provider_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_auth_provider_object_t_vtable_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_provider_object_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_object_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_provider_object_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_object_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12682,14 +13969,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_provider_object_t_provider_baton_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_provider_object_t *arg1 = (svn_auth_provider_object_t *) 0 ;
+ struct svn_auth_provider_object_t *arg1 = (struct svn_auth_provider_object_t *) 0 ;
void *arg2 = (void *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_auth_provider_object_t_provider_baton_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_auth_provider_object_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_object_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_provider_object_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_object_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12712,13 +13999,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_provider_object_t_provider_baton_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_provider_object_t *arg1 = (svn_auth_provider_object_t *) 0 ;
+ struct svn_auth_provider_object_t *arg1 = (struct svn_auth_provider_object_t *) 0 ;
PyObject * obj0 = 0 ;
void *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_auth_provider_object_t_provider_baton_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_provider_object_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_object_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_provider_object_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_object_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12757,13 +14044,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_auth_provider_object_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_provider_object_t *result = 0 ;
+ struct svn_auth_provider_object_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_auth_provider_object_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_auth_provider_object_t *)calloc(1, sizeof(svn_auth_provider_object_t));
+ result = (struct svn_auth_provider_object_t *)calloc(1, sizeof(struct svn_auth_provider_object_t));
svn_swig_py_acquire_py_lock();
@@ -12778,12 +14065,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_auth_provider_object_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_provider_object_t *arg1 = (svn_auth_provider_object_t *) 0 ;
+ struct svn_auth_provider_object_t *arg1 = (struct svn_auth_provider_object_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_auth_provider_object_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_provider_object_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_object_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_provider_object_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_provider_object_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12812,13 +14099,13 @@ SWIGINTERN PyObject *svn_auth_provider_object_t_swigregister(PyObject *SWIGUNUSE
SWIGINTERN PyObject *_wrap_svn_auth_cred_simple_t_username_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_simple_t *arg1 = (svn_auth_cred_simple_t *) 0 ;
+ struct svn_auth_cred_simple_t *arg1 = (struct svn_auth_cred_simple_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"Os:svn_auth_cred_simple_t_username_set",&obj0,&arg2)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"Oz:svn_auth_cred_simple_t_username_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_auth_cred_simple_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_simple_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_simple_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_simple_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12840,13 +14127,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_cred_simple_t_username_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_simple_t *arg1 = (svn_auth_cred_simple_t *) 0 ;
+ struct svn_auth_cred_simple_t *arg1 = (struct svn_auth_cred_simple_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_auth_cred_simple_t_username_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_cred_simple_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_simple_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_simple_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_simple_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12861,13 +14148,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_cred_simple_t_password_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_simple_t *arg1 = (svn_auth_cred_simple_t *) 0 ;
+ struct svn_auth_cred_simple_t *arg1 = (struct svn_auth_cred_simple_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"Os:svn_auth_cred_simple_t_password_set",&obj0,&arg2)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"Oz:svn_auth_cred_simple_t_password_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_auth_cred_simple_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_simple_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_simple_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_simple_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12889,13 +14176,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_cred_simple_t_password_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_simple_t *arg1 = (svn_auth_cred_simple_t *) 0 ;
+ struct svn_auth_cred_simple_t *arg1 = (struct svn_auth_cred_simple_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_auth_cred_simple_t_password_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_cred_simple_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_simple_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_simple_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_simple_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12910,14 +14197,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_cred_simple_t_may_save_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_simple_t *arg1 = (svn_auth_cred_simple_t *) 0 ;
+ struct svn_auth_cred_simple_t *arg1 = (struct svn_auth_cred_simple_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_auth_cred_simple_t_may_save_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_auth_cred_simple_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_simple_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_simple_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_simple_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12938,13 +14225,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_cred_simple_t_may_save_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_simple_t *arg1 = (svn_auth_cred_simple_t *) 0 ;
+ struct svn_auth_cred_simple_t *arg1 = (struct svn_auth_cred_simple_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_auth_cred_simple_t_may_save_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_cred_simple_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_simple_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_simple_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_simple_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12959,13 +14246,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_auth_cred_simple_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_simple_t *result = 0 ;
+ struct svn_auth_cred_simple_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_auth_cred_simple_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_auth_cred_simple_t *)calloc(1, sizeof(svn_auth_cred_simple_t));
+ result = (struct svn_auth_cred_simple_t *)calloc(1, sizeof(struct svn_auth_cred_simple_t));
svn_swig_py_acquire_py_lock();
@@ -12980,12 +14267,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_auth_cred_simple_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_simple_t *arg1 = (svn_auth_cred_simple_t *) 0 ;
+ struct svn_auth_cred_simple_t *arg1 = (struct svn_auth_cred_simple_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_auth_cred_simple_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_cred_simple_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_simple_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_simple_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_simple_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13014,13 +14301,13 @@ SWIGINTERN PyObject *svn_auth_cred_simple_t_swigregister(PyObject *SWIGUNUSEDPAR
SWIGINTERN PyObject *_wrap_svn_auth_cred_username_t_username_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_username_t *arg1 = (svn_auth_cred_username_t *) 0 ;
+ struct svn_auth_cred_username_t *arg1 = (struct svn_auth_cred_username_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"Os:svn_auth_cred_username_t_username_set",&obj0,&arg2)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"Oz:svn_auth_cred_username_t_username_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_auth_cred_username_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_username_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_username_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_username_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13042,13 +14329,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_cred_username_t_username_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_username_t *arg1 = (svn_auth_cred_username_t *) 0 ;
+ struct svn_auth_cred_username_t *arg1 = (struct svn_auth_cred_username_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_auth_cred_username_t_username_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_cred_username_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_username_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_username_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_username_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13063,14 +14350,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_cred_username_t_may_save_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_username_t *arg1 = (svn_auth_cred_username_t *) 0 ;
+ struct svn_auth_cred_username_t *arg1 = (struct svn_auth_cred_username_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_auth_cred_username_t_may_save_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_auth_cred_username_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_username_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_username_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_username_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13091,13 +14378,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_cred_username_t_may_save_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_username_t *arg1 = (svn_auth_cred_username_t *) 0 ;
+ struct svn_auth_cred_username_t *arg1 = (struct svn_auth_cred_username_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_auth_cred_username_t_may_save_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_cred_username_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_username_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_username_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_username_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13112,13 +14399,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_auth_cred_username_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_username_t *result = 0 ;
+ struct svn_auth_cred_username_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_auth_cred_username_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_auth_cred_username_t *)calloc(1, sizeof(svn_auth_cred_username_t));
+ result = (struct svn_auth_cred_username_t *)calloc(1, sizeof(struct svn_auth_cred_username_t));
svn_swig_py_acquire_py_lock();
@@ -13133,12 +14420,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_auth_cred_username_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_username_t *arg1 = (svn_auth_cred_username_t *) 0 ;
+ struct svn_auth_cred_username_t *arg1 = (struct svn_auth_cred_username_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_auth_cred_username_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_cred_username_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_username_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_username_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_username_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13167,13 +14454,13 @@ SWIGINTERN PyObject *svn_auth_cred_username_t_swigregister(PyObject *SWIGUNUSEDP
SWIGINTERN PyObject *_wrap_svn_auth_cred_ssl_client_cert_t_cert_file_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_ssl_client_cert_t *arg1 = (svn_auth_cred_ssl_client_cert_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_t *arg1 = (struct svn_auth_cred_ssl_client_cert_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_auth_cred_ssl_client_cert_t_cert_file_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_auth_cred_ssl_client_cert_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13195,13 +14482,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_cred_ssl_client_cert_t_cert_file_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_ssl_client_cert_t *arg1 = (svn_auth_cred_ssl_client_cert_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_t *arg1 = (struct svn_auth_cred_ssl_client_cert_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_auth_cred_ssl_client_cert_t_cert_file_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_cred_ssl_client_cert_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13216,14 +14503,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_cred_ssl_client_cert_t_may_save_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_ssl_client_cert_t *arg1 = (svn_auth_cred_ssl_client_cert_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_t *arg1 = (struct svn_auth_cred_ssl_client_cert_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_auth_cred_ssl_client_cert_t_may_save_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_auth_cred_ssl_client_cert_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13244,13 +14531,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_cred_ssl_client_cert_t_may_save_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_ssl_client_cert_t *arg1 = (svn_auth_cred_ssl_client_cert_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_t *arg1 = (struct svn_auth_cred_ssl_client_cert_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_auth_cred_ssl_client_cert_t_may_save_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_cred_ssl_client_cert_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13265,13 +14552,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_auth_cred_ssl_client_cert_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_ssl_client_cert_t *result = 0 ;
+ struct svn_auth_cred_ssl_client_cert_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_auth_cred_ssl_client_cert_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_auth_cred_ssl_client_cert_t *)calloc(1, sizeof(svn_auth_cred_ssl_client_cert_t));
+ result = (struct svn_auth_cred_ssl_client_cert_t *)calloc(1, sizeof(struct svn_auth_cred_ssl_client_cert_t));
svn_swig_py_acquire_py_lock();
@@ -13286,12 +14573,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_auth_cred_ssl_client_cert_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_ssl_client_cert_t *arg1 = (svn_auth_cred_ssl_client_cert_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_t *arg1 = (struct svn_auth_cred_ssl_client_cert_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_auth_cred_ssl_client_cert_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_cred_ssl_client_cert_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13320,13 +14607,13 @@ SWIGINTERN PyObject *svn_auth_cred_ssl_client_cert_t_swigregister(PyObject *SWIG
SWIGINTERN PyObject *_wrap_svn_auth_cred_ssl_client_cert_pw_t_password_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_ssl_client_cert_pw_t *arg1 = (svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_pw_t *arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"Os:svn_auth_cred_ssl_client_cert_pw_t_password_set",&obj0,&arg2)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"Oz:svn_auth_cred_ssl_client_cert_pw_t_password_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_auth_cred_ssl_client_cert_pw_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13348,13 +14635,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_cred_ssl_client_cert_pw_t_password_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_ssl_client_cert_pw_t *arg1 = (svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_pw_t *arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_auth_cred_ssl_client_cert_pw_t_password_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_cred_ssl_client_cert_pw_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13369,14 +14656,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_cred_ssl_client_cert_pw_t_may_save_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_ssl_client_cert_pw_t *arg1 = (svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_pw_t *arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_auth_cred_ssl_client_cert_pw_t_may_save_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_auth_cred_ssl_client_cert_pw_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13397,13 +14684,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_cred_ssl_client_cert_pw_t_may_save_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_ssl_client_cert_pw_t *arg1 = (svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_pw_t *arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_auth_cred_ssl_client_cert_pw_t_may_save_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_cred_ssl_client_cert_pw_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13418,13 +14705,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_auth_cred_ssl_client_cert_pw_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_ssl_client_cert_pw_t *result = 0 ;
+ struct svn_auth_cred_ssl_client_cert_pw_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_auth_cred_ssl_client_cert_pw_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_auth_cred_ssl_client_cert_pw_t *)calloc(1, sizeof(svn_auth_cred_ssl_client_cert_pw_t));
+ result = (struct svn_auth_cred_ssl_client_cert_pw_t *)calloc(1, sizeof(struct svn_auth_cred_ssl_client_cert_pw_t));
svn_swig_py_acquire_py_lock();
@@ -13439,12 +14726,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_auth_cred_ssl_client_cert_pw_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_ssl_client_cert_pw_t *arg1 = (svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_pw_t *arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_auth_cred_ssl_client_cert_pw_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_cred_ssl_client_cert_pw_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13473,13 +14760,13 @@ SWIGINTERN PyObject *svn_auth_cred_ssl_client_cert_pw_t_swigregister(PyObject *S
SWIGINTERN PyObject *_wrap_svn_auth_ssl_server_cert_info_t_hostname_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_auth_ssl_server_cert_info_t_hostname_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_auth_ssl_server_cert_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13501,13 +14788,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_ssl_server_cert_info_t_hostname_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_auth_ssl_server_cert_info_t_hostname_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_ssl_server_cert_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13522,13 +14809,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_ssl_server_cert_info_t_fingerprint_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_auth_ssl_server_cert_info_t_fingerprint_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_auth_ssl_server_cert_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13550,13 +14837,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_ssl_server_cert_info_t_fingerprint_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_auth_ssl_server_cert_info_t_fingerprint_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_ssl_server_cert_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13571,13 +14858,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_ssl_server_cert_info_t_valid_from_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_auth_ssl_server_cert_info_t_valid_from_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_auth_ssl_server_cert_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13599,13 +14886,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_ssl_server_cert_info_t_valid_from_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_auth_ssl_server_cert_info_t_valid_from_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_ssl_server_cert_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13620,13 +14907,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_ssl_server_cert_info_t_valid_until_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_auth_ssl_server_cert_info_t_valid_until_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_auth_ssl_server_cert_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13648,13 +14935,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_ssl_server_cert_info_t_valid_until_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_auth_ssl_server_cert_info_t_valid_until_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_ssl_server_cert_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13669,13 +14956,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_ssl_server_cert_info_t_issuer_dname_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_auth_ssl_server_cert_info_t_issuer_dname_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_auth_ssl_server_cert_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13697,13 +14984,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_ssl_server_cert_info_t_issuer_dname_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_auth_ssl_server_cert_info_t_issuer_dname_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_ssl_server_cert_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13718,13 +15005,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_ssl_server_cert_info_t_ascii_cert_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_auth_ssl_server_cert_info_t_ascii_cert_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_auth_ssl_server_cert_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13746,13 +15033,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_ssl_server_cert_info_t_ascii_cert_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_auth_ssl_server_cert_info_t_ascii_cert_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_ssl_server_cert_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13767,13 +15054,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_auth_ssl_server_cert_info_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_ssl_server_cert_info_t *result = 0 ;
+ struct svn_auth_ssl_server_cert_info_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_auth_ssl_server_cert_info_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_auth_ssl_server_cert_info_t *)calloc(1, sizeof(svn_auth_ssl_server_cert_info_t));
+ result = (struct svn_auth_ssl_server_cert_info_t *)calloc(1, sizeof(struct svn_auth_ssl_server_cert_info_t));
svn_swig_py_acquire_py_lock();
@@ -13788,12 +15075,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_auth_ssl_server_cert_info_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_auth_ssl_server_cert_info_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_ssl_server_cert_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13873,14 +15160,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_cred_ssl_server_trust_t_may_save_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_ssl_server_trust_t *arg1 = (svn_auth_cred_ssl_server_trust_t *) 0 ;
+ struct svn_auth_cred_ssl_server_trust_t *arg1 = (struct svn_auth_cred_ssl_server_trust_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_auth_cred_ssl_server_trust_t_may_save_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_auth_cred_ssl_server_trust_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_ssl_server_trust_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13901,13 +15188,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_cred_ssl_server_trust_t_may_save_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_ssl_server_trust_t *arg1 = (svn_auth_cred_ssl_server_trust_t *) 0 ;
+ struct svn_auth_cred_ssl_server_trust_t *arg1 = (struct svn_auth_cred_ssl_server_trust_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_auth_cred_ssl_server_trust_t_may_save_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_cred_ssl_server_trust_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_ssl_server_trust_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13922,14 +15209,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_cred_ssl_server_trust_t_accepted_failures_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_ssl_server_trust_t *arg1 = (svn_auth_cred_ssl_server_trust_t *) 0 ;
+ struct svn_auth_cred_ssl_server_trust_t *arg1 = (struct svn_auth_cred_ssl_server_trust_t *) 0 ;
apr_uint32_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_auth_cred_ssl_server_trust_t_accepted_failures_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_auth_cred_ssl_server_trust_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_ssl_server_trust_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13950,13 +15237,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_auth_cred_ssl_server_trust_t_accepted_failures_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_ssl_server_trust_t *arg1 = (svn_auth_cred_ssl_server_trust_t *) 0 ;
+ struct svn_auth_cred_ssl_server_trust_t *arg1 = (struct svn_auth_cred_ssl_server_trust_t *) 0 ;
PyObject * obj0 = 0 ;
apr_uint32_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_auth_cred_ssl_server_trust_t_accepted_failures_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_cred_ssl_server_trust_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_ssl_server_trust_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13971,13 +15258,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_auth_cred_ssl_server_trust_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_ssl_server_trust_t *result = 0 ;
+ struct svn_auth_cred_ssl_server_trust_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_auth_cred_ssl_server_trust_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_auth_cred_ssl_server_trust_t *)calloc(1, sizeof(svn_auth_cred_ssl_server_trust_t));
+ result = (struct svn_auth_cred_ssl_server_trust_t *)calloc(1, sizeof(struct svn_auth_cred_ssl_server_trust_t));
svn_swig_py_acquire_py_lock();
@@ -13992,12 +15279,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_auth_cred_ssl_server_trust_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_auth_cred_ssl_server_trust_t *arg1 = (svn_auth_cred_ssl_server_trust_t *) 0 ;
+ struct svn_auth_cred_ssl_server_trust_t *arg1 = (struct svn_auth_cred_ssl_server_trust_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_auth_cred_ssl_server_trust_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_auth_cred_ssl_server_trust_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t, svn_argnum_obj0);
+ arg1 = (struct svn_auth_cred_ssl_server_trust_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14357,6 +15644,68 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_auth_forget_credentials(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_auth_baton_t *arg1 = (svn_auth_baton_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj3 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg4 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"Oss|O:svn_auth_forget_credentials",&obj0,&arg2,&arg3,&obj3)) SWIG_fail;
+ {
+ arg1 = (svn_auth_baton_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_baton_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj3) {
+ /* Verify that the user supplied a valid pool */
+ if (obj3 != Py_None && obj3 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj3);
+ SWIG_arg_fail(svn_argnum_obj3);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_auth_forget_credentials(arg1,(char const *)arg2,(char const *)arg3,arg4);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_auth_get_simple_prompt_provider(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_auth_provider_object_t **arg1 = (svn_auth_provider_object_t **) 0 ;
@@ -15649,7 +16998,7 @@ SWIGINTERN PyObject *_wrap_svn_auth_invoke_simple_prompt_func(PyObject *SWIGUNUS
SWIG_fail;
arg7 = _global_pool;
arg2 = &temp2;
- if (!PyArg_ParseTuple(args,(char *)"OOssO|O:svn_auth_invoke_simple_prompt_func",&obj0,&obj1,&arg4,&arg5,&obj4,&obj5)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"OOszO|O:svn_auth_invoke_simple_prompt_func",&obj0,&obj1,&arg4,&arg5,&obj4,&obj5)) SWIG_fail;
{
svn_auth_simple_prompt_func_t * tmp =
svn_swig_MustGetPtr(obj0, SWIGTYPE_p_p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t, svn_argnum_obj0);
@@ -16394,6 +17743,83 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_config_create2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_config_t **arg1 = (svn_config_t **) 0 ;
+ svn_boolean_t arg2 ;
+ svn_boolean_t arg3 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_config_t *temp1 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg4 = _global_pool;
+ arg1 = &temp1;
+ if (!PyArg_ParseTuple(args,(char *)"OO|O:svn_config_create2",&obj0,&obj1,&obj2)) SWIG_fail;
+ {
+ arg2 = (svn_boolean_t)SWIG_As_long (obj0);
+ if (SWIG_arg_fail(svn_argnum_obj0)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg3 = (svn_boolean_t)SWIG_As_long (obj1);
+ if (SWIG_arg_fail(svn_argnum_obj1)) {
+ SWIG_fail;
+ }
+ }
+ if (obj2) {
+ /* Verify that the user supplied a valid pool */
+ if (obj2 != Py_None && obj2 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj2);
+ SWIG_arg_fail(svn_argnum_obj2);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_config_create2(arg1,arg2,arg3,arg4);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg1, SWIGTYPE_p_svn_config_t,
+ _global_py_pool, args))
+
+ ;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_config_create(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_config_t **arg1 = (svn_config_t **) 0 ;
@@ -16463,6 +17889,92 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_config_read3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_config_t **arg1 = (svn_config_t **) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ svn_boolean_t arg5 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_config_t *temp1 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg6 = _global_pool;
+ arg1 = &temp1;
+ if (!PyArg_ParseTuple(args,(char *)"sOOO|O:svn_config_read3",&arg2,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+ {
+ arg3 = (svn_boolean_t)SWIG_As_long (obj1);
+ if (SWIG_arg_fail(svn_argnum_obj1)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg4 = (svn_boolean_t)SWIG_As_long (obj2);
+ if (SWIG_arg_fail(svn_argnum_obj2)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg5 = (svn_boolean_t)SWIG_As_long (obj3);
+ if (SWIG_arg_fail(svn_argnum_obj3)) {
+ SWIG_fail;
+ }
+ }
+ if (obj4) {
+ /* Verify that the user supplied a valid pool */
+ if (obj4 != Py_None && obj4 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj4);
+ SWIG_arg_fail(svn_argnum_obj4);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_config_read3(arg1,(char const *)arg2,arg3,arg4,arg5,arg6);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg1, SWIGTYPE_p_svn_config_t,
+ _global_py_pool, args))
+
+ ;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_config_read2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_config_t **arg1 = (svn_config_t **) 0 ;
@@ -16611,6 +18123,91 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_config_parse(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_config_t **arg1 = (svn_config_t **) 0 ;
+ svn_stream_t *arg2 = (svn_stream_t *) 0 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_config_t *temp1 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg5 = _global_pool;
+ arg1 = &temp1;
+ if (!PyArg_ParseTuple(args,(char *)"OOO|O:svn_config_parse",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+ {
+ arg2 = (svn_stream_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_stream_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg3 = (svn_boolean_t)SWIG_As_long (obj1);
+ if (SWIG_arg_fail(svn_argnum_obj1)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg4 = (svn_boolean_t)SWIG_As_long (obj2);
+ if (SWIG_arg_fail(svn_argnum_obj2)) {
+ SWIG_fail;
+ }
+ }
+ if (obj3) {
+ /* Verify that the user supplied a valid pool */
+ if (obj3 != Py_None && obj3 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj3);
+ SWIG_arg_fail(svn_argnum_obj3);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_config_parse(arg1,arg2,arg3,arg4,arg5);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg1, SWIGTYPE_p_svn_config_t,
+ _global_py_pool, args))
+
+ ;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_config_merge(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_config_t *arg1 = (svn_config_t *) 0 ;
@@ -16829,6 +18426,87 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_config_get_int64(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_config_t *arg1 = (svn_config_t *) 0 ;
+ apr_int64_t *arg2 = (apr_int64_t *) 0 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+ apr_int64_t arg5 ;
+ apr_int64_t temp2 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj3 = 0 ;
+ svn_error_t *result = 0 ;
+
+ arg2 = &temp2;
+ if (!PyArg_ParseTuple(args,(char *)"OssO:svn_config_get_int64",&obj0,&arg3,&arg4,&obj3)) SWIG_fail;
+ {
+ arg1 = (svn_config_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_config_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ arg5 = (apr_int64_t) PyLong_AsLongLong(obj3);
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_config_get_int64(arg1,arg2,(char const *)arg3,(char const *)arg4,arg5);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, PyLong_FromLongLong(*arg2));
+ }
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_config_set_int64(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_config_t *arg1 = (svn_config_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ apr_int64_t arg4 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj3 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OssO:svn_config_set_int64",&obj0,&arg2,&arg3,&obj3)) SWIG_fail;
+ {
+ arg1 = (svn_config_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_config_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ arg4 = (apr_int64_t) PyLong_AsLongLong(obj3);
+ {
+ svn_swig_py_release_py_lock();
+
+ svn_config_set_int64(arg1,(char const *)arg2,(char const *)arg3,arg4);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_config_get_yes_no_ask(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_config_t *arg1 = (svn_config_t *) 0 ;
@@ -16886,6 +18564,63 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_config_get_tristate(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_config_t *arg1 = (svn_config_t *) 0 ;
+ svn_tristate_t *arg2 = (svn_tristate_t *) 0 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+ char *arg5 = (char *) 0 ;
+ svn_tristate_t arg6 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj5 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OOsssO:svn_config_get_tristate",&obj0,&obj1,&arg3,&arg4,&arg5,&obj5)) SWIG_fail;
+ {
+ arg1 = (svn_config_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_config_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg2 = (svn_tristate_t *)svn_swig_MustGetPtr(obj1, SWIGTYPE_p_svn_tristate_t, svn_argnum_obj1);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg6 = (svn_tristate_t)SWIG_As_long (obj5);
+ if (SWIG_arg_fail(svn_argnum_obj5)) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_config_get_tristate(arg1,arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,arg6);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_config_enumerate_sections(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_config_t *arg1 = (svn_config_t *) 0 ;
@@ -16945,14 +18680,13 @@ SWIGINTERN PyObject *_wrap_svn_config_enumerate_sections2(PyObject *SWIGUNUSEDPA
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
PyObject * obj2 = 0 ;
- PyObject * obj3 = 0 ;
int result;
if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
&_global_py_pool, &_global_pool))
SWIG_fail;
arg4 = _global_pool;
- if (!PyArg_ParseTuple(args,(char *)"OOO|O:svn_config_enumerate_sections2",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"OO|O:svn_config_enumerate_sections2",&obj0,&obj1,&obj2)) SWIG_fail;
{
arg1 = (svn_config_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_config_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
@@ -16960,26 +18694,14 @@ SWIGINTERN PyObject *_wrap_svn_config_enumerate_sections2(PyObject *SWIGUNUSEDPA
}
}
{
- svn_config_section_enumerator2_t * tmp =
- svn_swig_MustGetPtr(obj1, SWIGTYPE_p_p_f_p_q_const__char_p_void_p_apr_pool_t__int, svn_argnum_obj1);
- if (tmp == NULL || PyErr_Occurred()) {
- SWIG_fail;
- }
- arg2 = *tmp;
+ arg2 = svn_swig_py_config_section_enumerator2;
+ arg3 = obj1;
}
- {
- if (obj2 == Py_None) {
- arg3 = NULL;
- } else if (SWIG_ConvertPtr(obj2, (void **) &arg3, 0, 0) == -1) {
- arg3 = (void *) obj2;
- PyErr_Clear();
- }
- }
- if (obj3) {
+ if (obj2) {
/* Verify that the user supplied a valid pool */
- if (obj3 != Py_None && obj3 != _global_py_pool) {
- SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj3);
- SWIG_arg_fail(svn_argnum_obj3);
+ if (obj2 != Py_None && obj2 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj2);
+ SWIG_arg_fail(svn_argnum_obj2);
SWIG_fail;
}
}
@@ -17065,14 +18787,13 @@ SWIGINTERN PyObject *_wrap_svn_config_enumerate2(PyObject *SWIGUNUSEDPARM(self),
PyObject * obj0 = 0 ;
PyObject * obj2 = 0 ;
PyObject * obj3 = 0 ;
- PyObject * obj4 = 0 ;
int result;
if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
&_global_py_pool, &_global_pool))
SWIG_fail;
arg5 = _global_pool;
- if (!PyArg_ParseTuple(args,(char *)"OsOO|O:svn_config_enumerate2",&obj0,&arg2,&obj2,&obj3,&obj4)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"OsO|O:svn_config_enumerate2",&obj0,&arg2,&obj2,&obj3)) SWIG_fail;
{
arg1 = (svn_config_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_config_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
@@ -17080,26 +18801,14 @@ SWIGINTERN PyObject *_wrap_svn_config_enumerate2(PyObject *SWIGUNUSEDPARM(self),
}
}
{
- svn_config_enumerator2_t * tmp =
- svn_swig_MustGetPtr(obj2, SWIGTYPE_p_p_f_p_q_const__char_p_q_const__char_p_void_p_apr_pool_t__int, svn_argnum_obj2);
- if (tmp == NULL || PyErr_Occurred()) {
- SWIG_fail;
- }
- arg3 = *tmp;
- }
- {
- if (obj3 == Py_None) {
- arg4 = NULL;
- } else if (SWIG_ConvertPtr(obj3, (void **) &arg4, 0, 0) == -1) {
- arg4 = (void *) obj3;
- PyErr_Clear();
- }
+ arg3 = svn_swig_py_config_enumerator2;
+ arg4 = obj2;
}
- if (obj4) {
+ if (obj3) {
/* Verify that the user supplied a valid pool */
- if (obj4 != Py_None && obj4 != _global_py_pool) {
- SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj4);
- SWIG_arg_fail(svn_argnum_obj4);
+ if (obj3 != Py_None && obj3 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj3);
+ SWIG_arg_fail(svn_argnum_obj3);
SWIG_fail;
}
}
@@ -17549,6 +19258,67 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_config_walk_auth_data(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ char *arg1 = (char *) 0 ;
+ svn_config_auth_walk_func_t arg2 = (svn_config_auth_walk_func_t) 0 ;
+ void *arg3 = (void *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg4 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"zO|O:svn_config_walk_auth_data",&arg1,&obj1,&obj2)) SWIG_fail;
+ {
+ /* FIXME: Handle the NULL case. */
+ arg2 = svn_swig_py_config_auth_walk_func;
+ arg3 = obj1;
+ }
+ if (obj2) {
+ /* Verify that the user supplied a valid pool */
+ if (obj2 != Py_None && obj2 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj2);
+ SWIG_arg_fail(svn_argnum_obj2);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_config_walk_auth_data((char const *)arg1,arg2,arg3,arg4);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_config_get_user_config_path(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
char **arg1 = (char **) 0 ;
@@ -17619,6 +19389,147 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_config_dup(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_config_t **arg1 = (svn_config_t **) 0 ;
+ svn_config_t *arg2 = (svn_config_t *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_config_t *temp1 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg3 = _global_pool;
+ arg1 = &temp1;
+ if (!PyArg_ParseTuple(args,(char *)"O|O:svn_config_dup",&obj0,&obj1)) SWIG_fail;
+ {
+ arg2 = (svn_config_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_config_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj1) {
+ /* Verify that the user supplied a valid pool */
+ if (obj1 != Py_None && obj1 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj1);
+ SWIG_arg_fail(svn_argnum_obj1);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_config_dup(arg1,arg2,arg3);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg1, SWIGTYPE_p_svn_config_t,
+ _global_py_pool, args))
+
+ ;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_config_copy_config(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ apr_hash_t **arg1 = (apr_hash_t **) 0 ;
+ apr_hash_t *arg2 = (apr_hash_t *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ apr_hash_t *temp1 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg3 = _global_pool;
+ arg1 = &temp1;
+ if (!PyArg_ParseTuple(args,(char *)"O|O:svn_config_copy_config",&obj0,&obj1)) SWIG_fail;
+ {
+ arg2 = (apr_hash_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_apr_hash_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj1) {
+ /* Verify that the user supplied a valid pool */
+ if (obj1 != Py_None && obj1 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj1);
+ SWIG_arg_fail(svn_argnum_obj1);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_config_copy_config(arg1,arg2,arg3);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_py_convert_hash(*arg1,
+ SWIGTYPE_p_svn_config_t,
+ _global_py_pool))
+
+
+
+ ;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *svn_config_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *obj;
if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
@@ -17836,6 +19747,105 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_config_invoke_auth_walk_func(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_config_auth_walk_func_t arg1 = (svn_config_auth_walk_func_t) 0 ;
+ svn_boolean_t *arg2 = (svn_boolean_t *) 0 ;
+ void *arg3 = (void *) 0 ;
+ char *arg4 = (char *) 0 ;
+ char *arg5 = (char *) 0 ;
+ apr_hash_t *arg6 = (apr_hash_t *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_boolean_t temp2 ;
+ int res2 = SWIG_TMPOBJ ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj5 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg7 = _global_pool;
+ arg2 = &temp2;
+ if (!PyArg_ParseTuple(args,(char *)"OOssO|O:svn_config_invoke_auth_walk_func",&obj0,&obj1,&arg4,&arg5,&obj4,&obj5)) SWIG_fail;
+ {
+ svn_config_auth_walk_func_t * tmp =
+ svn_swig_MustGetPtr(obj0, SWIGTYPE_p_p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t, svn_argnum_obj0);
+ if (tmp == NULL || PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ arg1 = *tmp;
+ }
+ {
+ if (obj1 == Py_None) {
+ arg3 = NULL;
+ } else if (SWIG_ConvertPtr(obj1, (void **) &arg3, 0, 0) == -1) {
+ arg3 = (void *) obj1;
+ PyErr_Clear();
+ }
+ }
+ {
+ if (_global_pool == NULL)
+ {
+ if (svn_swig_py_get_parent_pool(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ }
+
+ arg6 = svn_swig_py_prophash_from_dict(obj4, _global_pool);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj5) {
+ /* Verify that the user supplied a valid pool */
+ if (obj5 != Py_None && obj5 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj5);
+ SWIG_arg_fail(svn_argnum_obj5);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_config_invoke_auth_walk_func(arg1,arg2,arg3,(char const *)arg4,(char const *)arg5,arg6,arg7);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ if (SWIG_IsTmpObj(res2)) {
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags));
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *svn_config_section_enumerator_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *obj;
if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
@@ -17864,6 +19874,62 @@ SWIGINTERN PyObject *svn_config_enumerator2_t_swigregister(PyObject *SWIGUNUSEDP
return SWIG_Py_Void();
}
+SWIGINTERN PyObject *svn_config_auth_walk_func_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *obj;
+ if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+ SWIG_TypeNewClientData(SWIGTYPE_p_p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t, SWIG_NewClientData(obj));
+ return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_svn_utf_initialize2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_boolean_t arg1 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg2 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"O|O:svn_utf_initialize2",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (svn_boolean_t)SWIG_As_long (obj0);
+ if (SWIG_arg_fail(svn_argnum_obj0)) {
+ SWIG_fail;
+ }
+ }
+ if (obj1) {
+ /* Verify that the user supplied a valid pool */
+ if (obj1 != Py_None && obj1 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj1);
+ SWIG_arg_fail(svn_argnum_obj1);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ svn_utf_initialize2(arg1,arg2);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_Py_Void();
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_utf_initialize(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
apr_pool_t *arg1 = (apr_pool_t *) 0 ;
@@ -18860,6 +20926,27 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_utf_cstring_utf8_width(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ char *arg1 = (char *) 0 ;
+ int result;
+
+ if (!PyArg_ParseTuple(args,(char *)"s:svn_utf_cstring_utf8_width",&arg1)) SWIG_fail;
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (int)svn_utf_cstring_utf8_width((char const *)arg1);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_From_long((long)(result));
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_nls_init(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_error_t *result = 0 ;
@@ -19359,6 +21446,140 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_path_is_repos_relative_url(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ char *arg1 = (char *) 0 ;
+ svn_boolean_t result;
+
+ if (!PyArg_ParseTuple(args,(char *)"s:svn_path_is_repos_relative_url",&arg1)) SWIG_fail;
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_boolean_t)svn_path_is_repos_relative_url((char const *)arg1);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_From_long((long)(result));
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_path_resolve_repos_relative_url(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ char **arg1 = (char **) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ char *temp1 ;
+ PyObject * obj2 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg4 = _global_pool;
+ arg1 = &temp1;
+ if (!PyArg_ParseTuple(args,(char *)"ss|O:svn_path_resolve_repos_relative_url",&arg2,&arg3,&obj2)) SWIG_fail;
+ if (obj2) {
+ /* Verify that the user supplied a valid pool */
+ if (obj2 != Py_None && obj2 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj2);
+ SWIG_arg_fail(svn_argnum_obj2);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_path_resolve_repos_relative_url((char const **)arg1,(char const *)arg2,(char const *)arg3,arg4);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ PyObject *s;
+ if (*arg1 == NULL) {
+ Py_INCREF(Py_None);
+ s = Py_None;
+ }
+ else {
+ s = PyString_FromString(*arg1);
+ if (s == NULL)
+ SWIG_fail;
+ }
+ resultobj = SWIG_Python_AppendOutput(resultobj, s);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_path_illegal_path_escape(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ char *arg1 = (char *) 0 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj1 = 0 ;
+ char *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg2 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"s|O:svn_path_illegal_path_escape",&arg1,&obj1)) SWIG_fail;
+ if (obj1) {
+ /* Verify that the user supplied a valid pool */
+ if (obj1 != Py_None && obj1 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj1);
+ SWIG_arg_fail(svn_argnum_obj1);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (char *)svn_path_illegal_path_escape((char const *)arg1,arg2);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_dirent_internal_style(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
char *arg1 = (char *) 0 ;
@@ -20543,50 +22764,6 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_uri__is_child(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
- PyObject *resultobj = 0;
- char *arg1 = (char *) 0 ;
- char *arg2 = (char *) 0 ;
- apr_pool_t *arg3 = (apr_pool_t *) 0 ;
- apr_pool_t *_global_pool = NULL ;
- PyObject *_global_py_pool = NULL ;
- PyObject * obj2 = 0 ;
- char *result = 0 ;
-
- if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
- &_global_py_pool, &_global_pool))
- SWIG_fail;
- arg3 = _global_pool;
- if (!PyArg_ParseTuple(args,(char *)"ss|O:svn_uri__is_child",&arg1,&arg2,&obj2)) SWIG_fail;
- if (obj2) {
- /* Verify that the user supplied a valid pool */
- if (obj2 != Py_None && obj2 != _global_py_pool) {
- SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj2);
- SWIG_arg_fail(svn_argnum_obj2);
- SWIG_fail;
- }
- }
- {
- svn_swig_py_release_py_lock();
-
- result = (char *)svn_uri__is_child((char const *)arg1,(char const *)arg2,arg3);
-
- svn_swig_py_acquire_py_lock();
-
- }
- resultobj = SWIG_FromCharPtr((const char *)result);
- {
- Py_XDECREF(_global_py_pool);
- }
- return resultobj;
-fail:
- {
- Py_XDECREF(_global_py_pool);
- }
- return NULL;
-}
-
-
SWIGINTERN PyObject *_wrap_svn_dirent_is_child(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
char *arg1 = (char *) 0 ;
@@ -20631,50 +22808,6 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_relpath__is_child(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
- PyObject *resultobj = 0;
- char *arg1 = (char *) 0 ;
- char *arg2 = (char *) 0 ;
- apr_pool_t *arg3 = (apr_pool_t *) 0 ;
- apr_pool_t *_global_pool = NULL ;
- PyObject *_global_py_pool = NULL ;
- PyObject * obj2 = 0 ;
- char *result = 0 ;
-
- if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
- &_global_py_pool, &_global_pool))
- SWIG_fail;
- arg3 = _global_pool;
- if (!PyArg_ParseTuple(args,(char *)"ss|O:svn_relpath__is_child",&arg1,&arg2,&obj2)) SWIG_fail;
- if (obj2) {
- /* Verify that the user supplied a valid pool */
- if (obj2 != Py_None && obj2 != _global_py_pool) {
- SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj2);
- SWIG_arg_fail(svn_argnum_obj2);
- SWIG_fail;
- }
- }
- {
- svn_swig_py_release_py_lock();
-
- result = (char *)svn_relpath__is_child((char const *)arg1,(char const *)arg2,arg3);
-
- svn_swig_py_acquire_py_lock();
-
- }
- resultobj = SWIG_FromCharPtr((const char *)result);
- {
- Py_XDECREF(_global_py_pool);
- }
- return resultobj;
-fail:
- {
- Py_XDECREF(_global_py_pool);
- }
- return NULL;
-}
-
-
SWIGINTERN PyObject *_wrap_svn_dirent_is_ancestor(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
char *arg1 = (char *) 0 ;
@@ -20697,28 +22830,6 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_relpath__is_ancestor(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
- PyObject *resultobj = 0;
- char *arg1 = (char *) 0 ;
- char *arg2 = (char *) 0 ;
- svn_boolean_t result;
-
- if (!PyArg_ParseTuple(args,(char *)"ss:svn_relpath__is_ancestor",&arg1,&arg2)) SWIG_fail;
- {
- svn_swig_py_release_py_lock();
-
- result = (svn_boolean_t)svn_relpath__is_ancestor((char const *)arg1,(char const *)arg2);
-
- svn_swig_py_acquire_py_lock();
-
- }
- resultobj = SWIG_From_long((long)(result));
- return resultobj;
-fail:
- return NULL;
-}
-
-
SWIGINTERN PyObject *_wrap_svn_uri__is_ancestor(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
char *arg1 = (char *) 0 ;
@@ -21034,6 +23145,130 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_mergeinfo_diff2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_mergeinfo_t *arg1 = (svn_mergeinfo_t *) 0 ;
+ svn_mergeinfo_t *arg2 = (svn_mergeinfo_t *) 0 ;
+ svn_mergeinfo_t arg3 = (svn_mergeinfo_t) 0 ;
+ svn_mergeinfo_t arg4 = (svn_mergeinfo_t) 0 ;
+ svn_boolean_t arg5 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_mergeinfo_t temp1 ;
+ svn_mergeinfo_t temp2 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg6 = _global_pool;
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg7 = _global_pool;
+ arg1 = &temp1;
+ arg2 = &temp2;
+ if (!PyArg_ParseTuple(args,(char *)"OOO|OO:svn_mergeinfo_diff2",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+ {
+ arg3 = svn_swig_py_mergeinfo_from_dict(obj0, _global_pool);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg4 = svn_swig_py_mergeinfo_from_dict(obj1, _global_pool);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg5 = (svn_boolean_t)SWIG_As_long (obj2);
+ if (SWIG_arg_fail(svn_argnum_obj2)) {
+ SWIG_fail;
+ }
+ }
+ if (obj3) {
+ /* Verify that the user supplied a valid pool */
+ if (obj3 != Py_None && obj3 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj3);
+ SWIG_arg_fail(svn_argnum_obj3);
+ SWIG_fail;
+ }
+ }
+ if (obj4) {
+ /* Verify that the user supplied a valid pool */
+ if (obj4 != Py_None && obj4 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj4);
+ SWIG_arg_fail(svn_argnum_obj4);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_mergeinfo_diff2(arg1,arg2,arg3,arg4,arg5,arg6,arg7);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_py_mergeinfo_to_dict(*arg1, SWIGTYPE_p_svn_merge_range_t,
+ _global_py_pool))
+
+
+ ;
+
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_py_mergeinfo_to_dict(*arg2, SWIGTYPE_p_svn_merge_range_t,
+ _global_py_pool))
+
+
+ ;
+
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_mergeinfo_diff(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_mergeinfo_t *arg1 = (svn_mergeinfo_t *) 0 ;
@@ -21138,6 +23373,94 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_mergeinfo_merge2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_mergeinfo_t arg1 = (svn_mergeinfo_t) 0 ;
+ svn_mergeinfo_t arg2 = (svn_mergeinfo_t) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg3 = _global_pool;
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg4 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OO|OO:svn_mergeinfo_merge2",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+ {
+ arg1 = svn_swig_py_mergeinfo_from_dict(obj0, _global_pool);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg2 = svn_swig_py_mergeinfo_from_dict(obj1, _global_pool);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj2) {
+ /* Verify that the user supplied a valid pool */
+ if (obj2 != Py_None && obj2 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj2);
+ SWIG_arg_fail(svn_argnum_obj2);
+ SWIG_fail;
+ }
+ }
+ if (obj3) {
+ /* Verify that the user supplied a valid pool */
+ if (obj3 != Py_None && obj3 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj3);
+ SWIG_arg_fail(svn_argnum_obj3);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_mergeinfo_merge2(arg1,arg2,arg3,arg4);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_mergeinfo_catalog_merge(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_mergeinfo_catalog_t arg1 = (svn_mergeinfo_catalog_t) 0 ;
@@ -21420,16 +23743,16 @@ fail:
SWIGINTERN PyObject *_wrap_svn_rangelist_diff(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
- apr_array_header_t **arg2 = (apr_array_header_t **) 0 ;
- apr_array_header_t *arg3 = (apr_array_header_t *) 0 ;
- apr_array_header_t *arg4 = (apr_array_header_t *) 0 ;
+ svn_rangelist_t **arg1 = (svn_rangelist_t **) 0 ;
+ svn_rangelist_t **arg2 = (svn_rangelist_t **) 0 ;
+ svn_rangelist_t *arg3 = (svn_rangelist_t *) 0 ;
+ svn_rangelist_t *arg4 = (svn_rangelist_t *) 0 ;
svn_boolean_t arg5 ;
apr_pool_t *arg6 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool = NULL ;
PyObject *_global_py_pool = NULL ;
- apr_array_header_t *temp1 ;
- apr_array_header_t *temp2 ;
+ svn_rangelist_t *temp1 ;
+ svn_rangelist_t *temp2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
PyObject * obj2 = 0 ;
@@ -21444,7 +23767,7 @@ SWIGINTERN PyObject *_wrap_svn_rangelist_diff(PyObject *SWIGUNUSEDPARM(self), Py
arg2 = &temp2;
if (!PyArg_ParseTuple(args,(char *)"OOO|O:svn_rangelist_diff",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
{
- arg3 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj0,
+ arg3 = (svn_rangelist_t *) svn_swig_py_seq_to_array(obj0,
sizeof(const svn_merge_range_t *),
svn_swig_py_unwrap_struct_ptr,
SWIGTYPE_p_svn_merge_range_t,
@@ -21454,7 +23777,7 @@ SWIGINTERN PyObject *_wrap_svn_rangelist_diff(PyObject *SWIGUNUSEDPARM(self), Py
}
}
{
- arg4 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj1,
+ arg4 = (svn_rangelist_t *) svn_swig_py_seq_to_array(obj1,
sizeof(const svn_merge_range_t *),
svn_swig_py_unwrap_struct_ptr,
SWIGTYPE_p_svn_merge_range_t,
@@ -21528,16 +23851,108 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_rangelist_merge2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_rangelist_t *arg1 = (svn_rangelist_t *) 0 ;
+ svn_rangelist_t *arg2 = (svn_rangelist_t *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg3 = _global_pool;
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg4 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OO|OO:svn_rangelist_merge2",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+ {
+ arg1 = (svn_rangelist_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_apr_array_header_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg2 = (svn_rangelist_t *) svn_swig_py_seq_to_array(obj1,
+ sizeof(const svn_merge_range_t *),
+ svn_swig_py_unwrap_struct_ptr,
+ SWIGTYPE_p_svn_merge_range_t,
+ _global_pool);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj2) {
+ /* Verify that the user supplied a valid pool */
+ if (obj2 != Py_None && obj2 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj2);
+ SWIG_arg_fail(svn_argnum_obj2);
+ SWIG_fail;
+ }
+ }
+ if (obj3) {
+ /* Verify that the user supplied a valid pool */
+ if (obj3 != Py_None && obj3 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj3);
+ SWIG_arg_fail(svn_argnum_obj3);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_rangelist_merge2(arg1,(apr_array_header_t const *)arg2,arg3,arg4);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_rangelist_remove(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
- apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
- apr_array_header_t *arg3 = (apr_array_header_t *) 0 ;
+ svn_rangelist_t **arg1 = (svn_rangelist_t **) 0 ;
+ svn_rangelist_t *arg2 = (svn_rangelist_t *) 0 ;
+ svn_rangelist_t *arg3 = (svn_rangelist_t *) 0 ;
svn_boolean_t arg4 ;
apr_pool_t *arg5 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool = NULL ;
PyObject *_global_py_pool = NULL ;
- apr_array_header_t *temp1 ;
+ svn_rangelist_t *temp1 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
PyObject * obj2 = 0 ;
@@ -21551,7 +23966,7 @@ SWIGINTERN PyObject *_wrap_svn_rangelist_remove(PyObject *SWIGUNUSEDPARM(self),
arg1 = &temp1;
if (!PyArg_ParseTuple(args,(char *)"OOO|O:svn_rangelist_remove",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
{
- arg2 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj0,
+ arg2 = (svn_rangelist_t *) svn_swig_py_seq_to_array(obj0,
sizeof(const svn_merge_range_t *),
svn_swig_py_unwrap_struct_ptr,
SWIGTYPE_p_svn_merge_range_t,
@@ -21561,7 +23976,7 @@ SWIGINTERN PyObject *_wrap_svn_rangelist_remove(PyObject *SWIGUNUSEDPARM(self),
}
}
{
- arg3 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj1,
+ arg3 = (svn_rangelist_t *) svn_swig_py_seq_to_array(obj1,
sizeof(const svn_merge_range_t *),
svn_swig_py_unwrap_struct_ptr,
SWIGTYPE_p_svn_merge_range_t,
@@ -21819,14 +24234,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_rangelist_intersect(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
- apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
- apr_array_header_t *arg3 = (apr_array_header_t *) 0 ;
+ svn_rangelist_t **arg1 = (svn_rangelist_t **) 0 ;
+ svn_rangelist_t *arg2 = (svn_rangelist_t *) 0 ;
+ svn_rangelist_t *arg3 = (svn_rangelist_t *) 0 ;
svn_boolean_t arg4 ;
apr_pool_t *arg5 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool = NULL ;
PyObject *_global_py_pool = NULL ;
- apr_array_header_t *temp1 ;
+ svn_rangelist_t *temp1 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
PyObject * obj2 = 0 ;
@@ -21840,7 +24255,7 @@ SWIGINTERN PyObject *_wrap_svn_rangelist_intersect(PyObject *SWIGUNUSEDPARM(self
arg1 = &temp1;
if (!PyArg_ParseTuple(args,(char *)"OOO|O:svn_rangelist_intersect",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
{
- arg2 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj0,
+ arg2 = (svn_rangelist_t *) svn_swig_py_seq_to_array(obj0,
sizeof(const svn_merge_range_t *),
svn_swig_py_unwrap_struct_ptr,
SWIGTYPE_p_svn_merge_range_t,
@@ -21850,7 +24265,7 @@ SWIGINTERN PyObject *_wrap_svn_rangelist_intersect(PyObject *SWIGUNUSEDPARM(self
}
}
{
- arg3 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj1,
+ arg3 = (svn_rangelist_t *) svn_swig_py_seq_to_array(obj1,
sizeof(const svn_merge_range_t *),
svn_swig_py_unwrap_struct_ptr,
SWIGTYPE_p_svn_merge_range_t,
@@ -21917,7 +24332,7 @@ fail:
SWIGINTERN PyObject *_wrap_svn_rangelist_to_string(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_string_t **arg1 = (svn_string_t **) 0 ;
- apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
+ svn_rangelist_t *arg2 = (svn_rangelist_t *) 0 ;
apr_pool_t *arg3 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool = NULL ;
PyObject *_global_py_pool = NULL ;
@@ -21933,7 +24348,7 @@ SWIGINTERN PyObject *_wrap_svn_rangelist_to_string(PyObject *SWIGUNUSEDPARM(self
arg1 = &temp1;
if (!PyArg_ParseTuple(args,(char *)"O|O:svn_rangelist_to_string",&obj0,&obj1)) SWIG_fail;
{
- arg2 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj0,
+ arg2 = (svn_rangelist_t *) svn_swig_py_seq_to_array(obj0,
sizeof(const svn_merge_range_t *),
svn_swig_py_unwrap_struct_ptr,
SWIGTYPE_p_svn_merge_range_t,
@@ -21996,8 +24411,8 @@ fail:
SWIGINTERN PyObject *_wrap_svn_rangelist_inheritable2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
- apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
+ svn_rangelist_t **arg1 = (svn_rangelist_t **) 0 ;
+ svn_rangelist_t *arg2 = (svn_rangelist_t *) 0 ;
svn_revnum_t arg3 ;
svn_revnum_t arg4 ;
svn_boolean_t arg5 ;
@@ -22005,7 +24420,7 @@ SWIGINTERN PyObject *_wrap_svn_rangelist_inheritable2(PyObject *SWIGUNUSEDPARM(s
apr_pool_t *arg7 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool = NULL ;
PyObject *_global_py_pool = NULL ;
- apr_array_header_t *temp1 ;
+ svn_rangelist_t *temp1 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
PyObject * obj2 = 0 ;
@@ -22025,7 +24440,7 @@ SWIGINTERN PyObject *_wrap_svn_rangelist_inheritable2(PyObject *SWIGUNUSEDPARM(s
arg1 = &temp1;
if (!PyArg_ParseTuple(args,(char *)"OOOO|OO:svn_rangelist_inheritable2",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
{
- arg2 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj0,
+ arg2 = (svn_rangelist_t *) svn_swig_py_seq_to_array(obj0,
sizeof(const svn_merge_range_t *),
svn_swig_py_unwrap_struct_ptr,
SWIGTYPE_p_svn_merge_range_t,
@@ -22117,14 +24532,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_rangelist_inheritable(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
- apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
+ svn_rangelist_t **arg1 = (svn_rangelist_t **) 0 ;
+ svn_rangelist_t *arg2 = (svn_rangelist_t *) 0 ;
svn_revnum_t arg3 ;
svn_revnum_t arg4 ;
apr_pool_t *arg5 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool = NULL ;
PyObject *_global_py_pool = NULL ;
- apr_array_header_t *temp1 ;
+ svn_rangelist_t *temp1 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
PyObject * obj2 = 0 ;
@@ -22138,7 +24553,7 @@ SWIGINTERN PyObject *_wrap_svn_rangelist_inheritable(PyObject *SWIGUNUSEDPARM(se
arg1 = &temp1;
if (!PyArg_ParseTuple(args,(char *)"OOO|O:svn_rangelist_inheritable",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
{
- arg2 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj0,
+ arg2 = (svn_rangelist_t *) svn_swig_py_seq_to_array(obj0,
sizeof(const svn_merge_range_t *),
svn_swig_py_unwrap_struct_ptr,
SWIGTYPE_p_svn_merge_range_t,
@@ -22598,13 +25013,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_rangelist_dup(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
+ svn_rangelist_t *arg1 = (svn_rangelist_t *) 0 ;
apr_pool_t *arg2 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool = NULL ;
PyObject *_global_py_pool = NULL ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
- apr_array_header_t *result = 0 ;
+ svn_rangelist_t *result = 0 ;
if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
&_global_py_pool, &_global_pool))
@@ -22612,7 +25027,7 @@ SWIGINTERN PyObject *_wrap_svn_rangelist_dup(PyObject *SWIGUNUSEDPARM(self), PyO
arg2 = _global_pool;
if (!PyArg_ParseTuple(args,(char *)"O|O:svn_rangelist_dup",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj0,
+ arg1 = (svn_rangelist_t *) svn_swig_py_seq_to_array(obj0,
sizeof(const svn_merge_range_t *),
svn_swig_py_unwrap_struct_ptr,
SWIGTYPE_p_svn_merge_range_t,
@@ -22632,7 +25047,7 @@ SWIGINTERN PyObject *_wrap_svn_rangelist_dup(PyObject *SWIGUNUSEDPARM(self), PyO
{
svn_swig_py_release_py_lock();
- result = (apr_array_header_t *)svn_rangelist_dup((apr_array_header_t const *)arg1,arg2);
+ result = (svn_rangelist_t *)svn_rangelist_dup((apr_array_header_t const *)arg1,arg2);
svn_swig_py_acquire_py_lock();
@@ -22702,14 +25117,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_io_dirent2_t_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_io_dirent2_t *arg1 = (svn_io_dirent2_t *) 0 ;
+ struct svn_io_dirent2_t *arg1 = (struct svn_io_dirent2_t *) 0 ;
svn_node_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_io_dirent2_t_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_io_dirent2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent2_t, svn_argnum_obj0);
+ arg1 = (struct svn_io_dirent2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -22730,13 +25145,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_io_dirent2_t_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_io_dirent2_t *arg1 = (svn_io_dirent2_t *) 0 ;
+ struct svn_io_dirent2_t *arg1 = (struct svn_io_dirent2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_node_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_io_dirent2_t_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_io_dirent2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent2_t, svn_argnum_obj0);
+ arg1 = (struct svn_io_dirent2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -22751,14 +25166,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_io_dirent2_t_special_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_io_dirent2_t *arg1 = (svn_io_dirent2_t *) 0 ;
+ struct svn_io_dirent2_t *arg1 = (struct svn_io_dirent2_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_io_dirent2_t_special_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_io_dirent2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent2_t, svn_argnum_obj0);
+ arg1 = (struct svn_io_dirent2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -22779,13 +25194,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_io_dirent2_t_special_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_io_dirent2_t *arg1 = (svn_io_dirent2_t *) 0 ;
+ struct svn_io_dirent2_t *arg1 = (struct svn_io_dirent2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_io_dirent2_t_special_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_io_dirent2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent2_t, svn_argnum_obj0);
+ arg1 = (struct svn_io_dirent2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -22800,14 +25215,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_io_dirent2_t_filesize_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_io_dirent2_t *arg1 = (svn_io_dirent2_t *) 0 ;
+ struct svn_io_dirent2_t *arg1 = (struct svn_io_dirent2_t *) 0 ;
svn_filesize_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_io_dirent2_t_filesize_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_io_dirent2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent2_t, svn_argnum_obj0);
+ arg1 = (struct svn_io_dirent2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -22823,13 +25238,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_io_dirent2_t_filesize_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_io_dirent2_t *arg1 = (svn_io_dirent2_t *) 0 ;
+ struct svn_io_dirent2_t *arg1 = (struct svn_io_dirent2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_filesize_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_io_dirent2_t_filesize_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_io_dirent2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent2_t, svn_argnum_obj0);
+ arg1 = (struct svn_io_dirent2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -22844,14 +25259,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_io_dirent2_t_mtime_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_io_dirent2_t *arg1 = (svn_io_dirent2_t *) 0 ;
+ struct svn_io_dirent2_t *arg1 = (struct svn_io_dirent2_t *) 0 ;
apr_time_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_io_dirent2_t_mtime_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_io_dirent2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent2_t, svn_argnum_obj0);
+ arg1 = (struct svn_io_dirent2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -22867,13 +25282,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_io_dirent2_t_mtime_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_io_dirent2_t *arg1 = (svn_io_dirent2_t *) 0 ;
+ struct svn_io_dirent2_t *arg1 = (struct svn_io_dirent2_t *) 0 ;
PyObject * obj0 = 0 ;
apr_time_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_io_dirent2_t_mtime_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_io_dirent2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent2_t, svn_argnum_obj0);
+ arg1 = (struct svn_io_dirent2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -22888,13 +25303,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_io_dirent2_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_io_dirent2_t *result = 0 ;
+ struct svn_io_dirent2_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_io_dirent2_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_io_dirent2_t *)calloc(1, sizeof(svn_io_dirent2_t));
+ result = (struct svn_io_dirent2_t *)calloc(1, sizeof(struct svn_io_dirent2_t));
svn_swig_py_acquire_py_lock();
@@ -22909,12 +25324,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_io_dirent2_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_io_dirent2_t *arg1 = (svn_io_dirent2_t *) 0 ;
+ struct svn_io_dirent2_t *arg1 = (struct svn_io_dirent2_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_io_dirent2_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_io_dirent2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent2_t, svn_argnum_obj0);
+ arg1 = (struct svn_io_dirent2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -23037,14 +25452,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_io_dirent_t_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_io_dirent_t *arg1 = (svn_io_dirent_t *) 0 ;
+ struct svn_io_dirent_t *arg1 = (struct svn_io_dirent_t *) 0 ;
svn_node_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_io_dirent_t_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_io_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent_t, svn_argnum_obj0);
+ arg1 = (struct svn_io_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -23065,13 +25480,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_io_dirent_t_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_io_dirent_t *arg1 = (svn_io_dirent_t *) 0 ;
+ struct svn_io_dirent_t *arg1 = (struct svn_io_dirent_t *) 0 ;
PyObject * obj0 = 0 ;
svn_node_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_io_dirent_t_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_io_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent_t, svn_argnum_obj0);
+ arg1 = (struct svn_io_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -23086,14 +25501,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_io_dirent_t_special_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_io_dirent_t *arg1 = (svn_io_dirent_t *) 0 ;
+ struct svn_io_dirent_t *arg1 = (struct svn_io_dirent_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_io_dirent_t_special_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_io_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent_t, svn_argnum_obj0);
+ arg1 = (struct svn_io_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -23114,13 +25529,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_io_dirent_t_special_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_io_dirent_t *arg1 = (svn_io_dirent_t *) 0 ;
+ struct svn_io_dirent_t *arg1 = (struct svn_io_dirent_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_io_dirent_t_special_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_io_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent_t, svn_argnum_obj0);
+ arg1 = (struct svn_io_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -23135,13 +25550,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_io_dirent_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_io_dirent_t *result = 0 ;
+ struct svn_io_dirent_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_io_dirent_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_io_dirent_t *)calloc(1, sizeof(svn_io_dirent_t));
+ result = (struct svn_io_dirent_t *)calloc(1, sizeof(struct svn_io_dirent_t));
svn_swig_py_acquire_py_lock();
@@ -23156,12 +25571,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_io_dirent_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_io_dirent_t *arg1 = (svn_io_dirent_t *) 0 ;
+ struct svn_io_dirent_t *arg1 = (struct svn_io_dirent_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_io_dirent_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_io_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent_t, svn_argnum_obj0);
+ arg1 = (struct svn_io_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_io_dirent_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -23672,6 +26087,91 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_io_filesizes_three_different_p(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_boolean_t *arg1 = (svn_boolean_t *) 0 ;
+ svn_boolean_t *arg2 = (svn_boolean_t *) 0 ;
+ svn_boolean_t *arg3 = (svn_boolean_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ char *arg5 = (char *) 0 ;
+ char *arg6 = (char *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_boolean_t temp1 ;
+ int res1 = SWIG_TMPOBJ ;
+ svn_boolean_t temp2 ;
+ int res2 = SWIG_TMPOBJ ;
+ svn_boolean_t temp3 ;
+ int res3 = SWIG_TMPOBJ ;
+ PyObject * obj3 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg7 = _global_pool;
+ arg1 = &temp1;
+ arg2 = &temp2;
+ arg3 = &temp3;
+ if (!PyArg_ParseTuple(args,(char *)"sss|O:svn_io_filesizes_three_different_p",&arg4,&arg5,&arg6,&obj3)) SWIG_fail;
+ if (obj3) {
+ /* Verify that the user supplied a valid pool */
+ if (obj3 != Py_None && obj3 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj3);
+ SWIG_arg_fail(svn_argnum_obj3);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_io_filesizes_three_different_p(arg1,arg2,arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,arg7);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ if (SWIG_IsTmpObj(res1)) {
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg1)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res1) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_int, new_flags));
+ }
+ if (SWIG_IsTmpObj(res2)) {
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags));
+ }
+ if (SWIG_IsTmpObj(res3)) {
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg3)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags));
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_io_file_checksum2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_checksum_t **arg1 = (svn_checksum_t **) 0 ;
@@ -23681,8 +26181,6 @@ SWIGINTERN PyObject *_wrap_svn_io_file_checksum2(PyObject *SWIGUNUSEDPARM(self),
apr_pool_t *_global_pool = NULL ;
PyObject *_global_py_pool = NULL ;
svn_checksum_t *temp1 ;
- void *argp3 ;
- int res3 = 0 ;
PyObject * obj1 = 0 ;
PyObject * obj2 = 0 ;
svn_error_t *result = 0 ;
@@ -23694,14 +26192,9 @@ SWIGINTERN PyObject *_wrap_svn_io_file_checksum2(PyObject *SWIGUNUSEDPARM(self),
arg1 = &temp1;
if (!PyArg_ParseTuple(args,(char *)"sO|O:svn_io_file_checksum2",&arg2,&obj1,&obj2)) SWIG_fail;
{
- res3 = SWIG_ConvertPtr(obj1, &argp3, SWIGTYPE_p_svn_checksum_kind_t, 0 );
- if (!SWIG_IsOK(res3)) {
- SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "svn_io_file_checksum2" "', argument " "3"" of type '" "svn_checksum_kind_t""'");
- }
- if (!argp3) {
- SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "svn_io_file_checksum2" "', argument " "3"" of type '" "svn_checksum_kind_t""'");
- } else {
- arg3 = *((svn_checksum_kind_t *)(argp3));
+ arg3 = (svn_checksum_kind_t)SWIG_As_long (obj1);
+ if (SWIG_arg_fail(svn_argnum_obj1)) {
+ SWIG_fail;
}
}
if (obj2) {
@@ -23875,6 +26368,223 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_io_files_contents_three_same_p(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_boolean_t *arg1 = (svn_boolean_t *) 0 ;
+ svn_boolean_t *arg2 = (svn_boolean_t *) 0 ;
+ svn_boolean_t *arg3 = (svn_boolean_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ char *arg5 = (char *) 0 ;
+ char *arg6 = (char *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_boolean_t temp1 ;
+ int res1 = SWIG_TMPOBJ ;
+ svn_boolean_t temp2 ;
+ int res2 = SWIG_TMPOBJ ;
+ svn_boolean_t temp3 ;
+ int res3 = SWIG_TMPOBJ ;
+ PyObject * obj3 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg7 = _global_pool;
+ arg1 = &temp1;
+ arg2 = &temp2;
+ arg3 = &temp3;
+ if (!PyArg_ParseTuple(args,(char *)"sss|O:svn_io_files_contents_three_same_p",&arg4,&arg5,&arg6,&obj3)) SWIG_fail;
+ if (obj3) {
+ /* Verify that the user supplied a valid pool */
+ if (obj3 != Py_None && obj3 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj3);
+ SWIG_arg_fail(svn_argnum_obj3);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_io_files_contents_three_same_p(arg1,arg2,arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,arg7);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ if (SWIG_IsTmpObj(res1)) {
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg1)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res1) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_int, new_flags));
+ }
+ if (SWIG_IsTmpObj(res2)) {
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags));
+ }
+ if (SWIG_IsTmpObj(res3)) {
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg3)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags));
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_io_lock_open_file(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ apr_file_t *arg1 = (apr_file_t *) 0 ;
+ svn_boolean_t arg2 ;
+ svn_boolean_t arg3 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg4 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OOO|O:svn_io_lock_open_file",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+ {
+ arg1 = svn_swig_py_make_file(obj0, _global_pool);
+ if (!arg1) SWIG_fail;
+ }
+ {
+ arg2 = (svn_boolean_t)SWIG_As_long (obj1);
+ if (SWIG_arg_fail(svn_argnum_obj1)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg3 = (svn_boolean_t)SWIG_As_long (obj2);
+ if (SWIG_arg_fail(svn_argnum_obj2)) {
+ SWIG_fail;
+ }
+ }
+ if (obj3) {
+ /* Verify that the user supplied a valid pool */
+ if (obj3 != Py_None && obj3 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj3);
+ SWIG_arg_fail(svn_argnum_obj3);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_io_lock_open_file(arg1,arg2,arg3,arg4);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_io_unlock_open_file(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ apr_file_t *arg1 = (apr_file_t *) 0 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg2 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"O|O:svn_io_unlock_open_file",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = svn_swig_py_make_file(obj0, _global_pool);
+ if (!arg1) SWIG_fail;
+ }
+ if (obj1) {
+ /* Verify that the user supplied a valid pool */
+ if (obj1 != Py_None && obj1 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj1);
+ SWIG_arg_fail(svn_argnum_obj1);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_io_unlock_open_file(arg1,arg2);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_stream_set_skip(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_stream_t *arg1 = (svn_stream_t *) 0 ;
@@ -24753,6 +27463,49 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_stream_buffered(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ apr_pool_t *arg1 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ svn_stream_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg1 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"|O:svn_stream_buffered",&obj0)) SWIG_fail;
+ if (obj0) {
+ /* Verify that the user supplied a valid pool */
+ if (obj0 != Py_None && obj0 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj0);
+ SWIG_arg_fail(svn_argnum_obj0);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_stream_t *)svn_stream_buffered(arg1);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = svn_swig_NewPointerObj((void*)(result), SWIGTYPE_p_svn_stream_t,
+ _global_py_pool, args);
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_stream_compressed(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_stream_t *arg1 = (svn_stream_t *) 0 ;
@@ -24816,8 +27569,6 @@ SWIGINTERN PyObject *_wrap_svn_stream_checksummed2(PyObject *SWIGUNUSEDPARM(self
PyObject *_global_py_pool = NULL ;
svn_checksum_t *temp2 ;
svn_checksum_t *temp3 ;
- void *argp4 ;
- int res4 = 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
PyObject * obj2 = 0 ;
@@ -24838,14 +27589,9 @@ SWIGINTERN PyObject *_wrap_svn_stream_checksummed2(PyObject *SWIGUNUSEDPARM(self
}
}
{
- res4 = SWIG_ConvertPtr(obj1, &argp4, SWIGTYPE_p_svn_checksum_kind_t, 0 );
- if (!SWIG_IsOK(res4)) {
- SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "svn_stream_checksummed2" "', argument " "4"" of type '" "svn_checksum_kind_t""'");
- }
- if (!argp4) {
- SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "svn_stream_checksummed2" "', argument " "4"" of type '" "svn_checksum_kind_t""'");
- } else {
- arg4 = *((svn_checksum_kind_t *)(argp4));
+ arg4 = (svn_checksum_kind_t)SWIG_As_long (obj1);
+ if (SWIG_arg_fail(svn_argnum_obj1)) {
+ SWIG_fail;
}
}
{
@@ -24920,12 +27666,17 @@ SWIGINTERN PyObject *_wrap_svn_stream_read(PyObject *SWIGUNUSEDPARM(self), PyObj
}
}
{
- if (!PyInt_Check(obj1)) {
+ if (PyLong_Check(obj1)) {
+ temp2 = PyLong_AsLong(obj1);
+ }
+ else if (PyInt_Check(obj1)) {
+ temp2 = PyInt_AsLong(obj1);
+ }
+ else {
PyErr_SetString(PyExc_TypeError,
"expecting an integer for the buffer size");
SWIG_fail;
}
- temp2 = PyInt_AsLong(obj1);
if (temp2 < 0) {
PyErr_SetString(PyExc_ValueError,
"buffer size must be a positive integer");
@@ -25345,6 +28096,45 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_stream_puts(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_stream_t *arg1 = (svn_stream_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ PyObject * obj0 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"Os:svn_stream_puts",&obj0,&arg2)) SWIG_fail;
+ {
+ arg1 = (svn_stream_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_stream_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_stream_puts(arg1,(char const *)arg2);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_stream_readline(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_stream_t *arg1 = (svn_stream_t *) 0 ;
@@ -25902,6 +28692,77 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_stream_lazyopen_create(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_stream_lazyopen_func_t arg1 = (svn_stream_lazyopen_func_t) 0 ;
+ void *arg2 = (void *) 0 ;
+ svn_boolean_t arg3 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ svn_stream_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg4 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OOO|O:svn_stream_lazyopen_create",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+ {
+ svn_stream_lazyopen_func_t * tmp =
+ svn_swig_MustGetPtr(obj0, SWIGTYPE_p_p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t, svn_argnum_obj0);
+ if (tmp == NULL || PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ arg1 = *tmp;
+ }
+ {
+ if (obj1 == Py_None) {
+ arg2 = NULL;
+ } else if (SWIG_ConvertPtr(obj1, (void **) &arg2, 0, 0) == -1) {
+ arg2 = (void *) obj1;
+ PyErr_Clear();
+ }
+ }
+ {
+ arg3 = (svn_boolean_t)SWIG_As_long (obj2);
+ if (SWIG_arg_fail(svn_argnum_obj2)) {
+ SWIG_fail;
+ }
+ }
+ if (obj3) {
+ /* Verify that the user supplied a valid pool */
+ if (obj3 != Py_None && obj3 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj3);
+ SWIG_arg_fail(svn_argnum_obj3);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_stream_t *)svn_stream_lazyopen_create(arg1,arg2,arg3,arg4);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = svn_swig_NewPointerObj((void*)(result), SWIGTYPE_p_svn_stream_t,
+ _global_py_pool, args);
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_stringbuf_from_file2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_stringbuf_t **arg1 = (svn_stringbuf_t **) 0 ;
@@ -26442,6 +29303,107 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_io_stat_dirent2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_io_dirent2_t **arg1 = (svn_io_dirent2_t **) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_io_dirent2_t *temp1 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg5 = _global_pool;
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg6 = _global_pool;
+ arg1 = &temp1;
+ if (!PyArg_ParseTuple(args,(char *)"sOO|OO:svn_io_stat_dirent2",&arg2,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+ {
+ arg3 = (svn_boolean_t)SWIG_As_long (obj1);
+ if (SWIG_arg_fail(svn_argnum_obj1)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg4 = (svn_boolean_t)SWIG_As_long (obj2);
+ if (SWIG_arg_fail(svn_argnum_obj2)) {
+ SWIG_fail;
+ }
+ }
+ if (obj3) {
+ /* Verify that the user supplied a valid pool */
+ if (obj3 != Py_None && obj3 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj3);
+ SWIG_arg_fail(svn_argnum_obj3);
+ SWIG_fail;
+ }
+ }
+ if (obj4) {
+ /* Verify that the user supplied a valid pool */
+ if (obj4 != Py_None && obj4 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj4);
+ SWIG_arg_fail(svn_argnum_obj4);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_io_stat_dirent2((struct svn_io_dirent2_t const **)arg1,(char const *)arg2,arg3,arg4,arg5,arg6);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ /* FIXME: Missing argout typemap: svn_io_stat_dirent2 arg 1 (svn_io_dirent2_t const **) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_io_stat_dirent2 is not implemented yet");
+
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_io_stat_dirent(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_io_dirent2_t **arg1 = (svn_io_dirent2_t **) 0 ;
@@ -26616,6 +29578,134 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_io_start_cmd3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ apr_proc_t *arg1 = (apr_proc_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ char **arg4 = (char **) 0 ;
+ char **arg5 = (char **) 0 ;
+ svn_boolean_t arg6 ;
+ svn_boolean_t arg7 ;
+ apr_file_t *arg8 = (apr_file_t *) 0 ;
+ svn_boolean_t arg9 ;
+ apr_file_t *arg10 = (apr_file_t *) 0 ;
+ svn_boolean_t arg11 ;
+ apr_file_t *arg12 = (apr_file_t *) 0 ;
+ apr_pool_t *arg13 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj5 = 0 ;
+ PyObject * obj6 = 0 ;
+ PyObject * obj7 = 0 ;
+ PyObject * obj8 = 0 ;
+ PyObject * obj9 = 0 ;
+ PyObject * obj10 = 0 ;
+ PyObject * obj11 = 0 ;
+ PyObject * obj12 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg13 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OssOOOOOOOOO|O:svn_io_start_cmd3",&obj0,&arg2,&arg3,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9,&obj10,&obj11,&obj12)) SWIG_fail;
+ {
+ arg1 = (apr_proc_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_apr_proc_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg4 = (char **)svn_swig_MustGetPtr(obj3, SWIGTYPE_p_p_char, svn_argnum_obj3);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg5 = (char **)svn_swig_MustGetPtr(obj4, SWIGTYPE_p_p_char, svn_argnum_obj4);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg6 = (svn_boolean_t)SWIG_As_long (obj5);
+ if (SWIG_arg_fail(svn_argnum_obj5)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg7 = (svn_boolean_t)SWIG_As_long (obj6);
+ if (SWIG_arg_fail(svn_argnum_obj6)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg8 = svn_swig_py_make_file(obj7, _global_pool);
+ if (!arg8) SWIG_fail;
+ }
+ {
+ arg9 = (svn_boolean_t)SWIG_As_long (obj8);
+ if (SWIG_arg_fail(svn_argnum_obj8)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg10 = svn_swig_py_make_file(obj9, _global_pool);
+ if (!arg10) SWIG_fail;
+ }
+ {
+ arg11 = (svn_boolean_t)SWIG_As_long (obj10);
+ if (SWIG_arg_fail(svn_argnum_obj10)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg12 = svn_swig_py_make_file(obj11, _global_pool);
+ if (!arg12) SWIG_fail;
+ }
+ if (obj12) {
+ /* Verify that the user supplied a valid pool */
+ if (obj12 != Py_None && obj12 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj12);
+ SWIG_arg_fail(svn_argnum_obj12);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_io_start_cmd3(arg1,(char const *)arg2,(char const *)arg3,(char const *const *)arg4,(char const *const *)arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12,arg13);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_io_start_cmd2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
apr_proc_t *arg1 = (apr_proc_t *) 0 ;
@@ -27573,6 +30663,134 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_io_file_readline(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ apr_file_t *arg1 = (apr_file_t *) 0 ;
+ svn_stringbuf_t **arg2 = (svn_stringbuf_t **) 0 ;
+ char **arg3 = (char **) 0 ;
+ svn_boolean_t *arg4 = (svn_boolean_t *) 0 ;
+ apr_size_t arg5 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_stringbuf_t *temp2 ;
+ char *temp3 ;
+ svn_boolean_t temp4 ;
+ int res4 = SWIG_TMPOBJ ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg6 = _global_pool;
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg7 = _global_pool;
+ arg2 = &temp2;
+ arg3 = &temp3;
+ arg4 = &temp4;
+ if (!PyArg_ParseTuple(args,(char *)"OO|OO:svn_io_file_readline",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+ {
+ arg1 = svn_swig_py_make_file(obj0, _global_pool);
+ if (!arg1) SWIG_fail;
+ }
+ {
+ arg5 = (apr_size_t)SWIG_As_unsigned_SS_long (obj1);
+ if (SWIG_arg_fail(svn_argnum_obj1)) {
+ SWIG_fail;
+ }
+ }
+ if (obj2) {
+ /* Verify that the user supplied a valid pool */
+ if (obj2 != Py_None && obj2 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj2);
+ SWIG_arg_fail(svn_argnum_obj2);
+ SWIG_fail;
+ }
+ }
+ if (obj3) {
+ /* Verify that the user supplied a valid pool */
+ if (obj3 != Py_None && obj3 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj3);
+ SWIG_arg_fail(svn_argnum_obj3);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_io_file_readline(arg1,arg2,(char const **)arg3,arg4,arg5,arg6,arg7);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ PyObject *s;
+ if (*arg2 == NULL) {
+ Py_INCREF(Py_None);
+ s = Py_None;
+ }
+ else {
+ s = PyString_FromStringAndSize((*arg2)->data, (*arg2)->len);
+ if (s == NULL)
+ SWIG_fail;
+ }
+ resultobj = SWIG_Python_AppendOutput(resultobj, s);
+ }
+ {
+ PyObject *s;
+ if (*arg3 == NULL) {
+ Py_INCREF(Py_None);
+ s = Py_None;
+ }
+ else {
+ s = PyString_FromString(*arg3);
+ if (s == NULL)
+ SWIG_fail;
+ }
+ resultobj = SWIG_Python_AppendOutput(resultobj, s);
+ }
+ if (SWIG_IsTmpObj(res4)) {
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg4)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_int, new_flags));
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *svn_stream_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *obj;
if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
@@ -27617,12 +30835,17 @@ SWIGINTERN PyObject *_wrap_svn_read_invoke_fn(PyObject *SWIGUNUSEDPARM(self), Py
}
}
{
- if (!PyInt_Check(obj2)) {
+ if (PyLong_Check(obj2)) {
+ temp3 = PyLong_AsLong(obj2);
+ }
+ else if (PyInt_Check(obj2)) {
+ temp3 = PyInt_AsLong(obj2);
+ }
+ else {
PyErr_SetString(PyExc_TypeError,
"expecting an integer for the buffer size");
SWIG_fail;
}
- temp3 = PyInt_AsLong(obj2);
if (temp3 < 0) {
PyErr_SetString(PyExc_ValueError,
"buffer size must be a positive integer");
@@ -27977,6 +31200,107 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_stream_invoke_lazyopen_func(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_stream_lazyopen_func_t arg1 = (svn_stream_lazyopen_func_t) 0 ;
+ svn_stream_t **arg2 = (svn_stream_t **) 0 ;
+ void *arg3 = (void *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_stream_t *temp2 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg4 = _global_pool;
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg5 = _global_pool;
+ arg2 = &temp2;
+ if (!PyArg_ParseTuple(args,(char *)"OO|OO:svn_stream_invoke_lazyopen_func",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+ {
+ svn_stream_lazyopen_func_t * tmp =
+ svn_swig_MustGetPtr(obj0, SWIGTYPE_p_p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t, svn_argnum_obj0);
+ if (tmp == NULL || PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ arg1 = *tmp;
+ }
+ {
+ if (obj1 == Py_None) {
+ arg3 = NULL;
+ } else if (SWIG_ConvertPtr(obj1, (void **) &arg3, 0, 0) == -1) {
+ arg3 = (void *) obj1;
+ PyErr_Clear();
+ }
+ }
+ if (obj2) {
+ /* Verify that the user supplied a valid pool */
+ if (obj2 != Py_None && obj2 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj2);
+ SWIG_arg_fail(svn_argnum_obj2);
+ SWIG_fail;
+ }
+ }
+ if (obj3) {
+ /* Verify that the user supplied a valid pool */
+ if (obj3 != Py_None && obj3 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj3);
+ SWIG_arg_fail(svn_argnum_obj3);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_stream_invoke_lazyopen_func(arg1,arg2,arg3,arg4,arg5);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg2, SWIGTYPE_p_svn_stream_t,
+ _global_py_pool, args))
+
+ ;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_io_invoke_walk_func(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_io_walk_func_t arg1 = (svn_io_walk_func_t) 0 ;
@@ -28100,6 +31424,13 @@ SWIGINTERN PyObject *svn_stream_seek_fn_t_swigregister(PyObject *SWIGUNUSEDPARM(
return SWIG_Py_Void();
}
+SWIGINTERN PyObject *svn_stream_lazyopen_func_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *obj;
+ if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+ SWIG_TypeNewClientData(SWIGTYPE_p_p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t, SWIG_NewClientData(obj));
+ return SWIG_Py_Void();
+}
+
SWIGINTERN PyObject *svn_io_walk_func_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *obj;
if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
@@ -28107,6 +31438,1164 @@ SWIGINTERN PyObject *svn_io_walk_func_t_swigregister(PyObject *SWIGUNUSEDPARM(se
return SWIG_Py_Void();
}
+SWIGINTERN PyObject *_wrap_svn_checksum_t_digest_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_checksum_t *arg1 = (struct svn_checksum_t *) 0 ;
+ unsigned char *arg2 = (unsigned char *) 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_checksum_t_digest_set",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (struct svn_checksum_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_checksum_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ if (obj1 == Py_None) {
+ arg2 = NULL;
+ } else {
+ arg2 = (unsigned char *) PyString_AsString(obj1);
+ if (arg2 == NULL) SWIG_fail;
+ }
+ }
+ if (arg1) (arg1)->digest = (unsigned char const *)arg2;
+ resultobj = SWIG_Py_Void();
+
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_checksum_t_digest_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_checksum_t *arg1 = (struct svn_checksum_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ unsigned char *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_checksum_t_digest_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_checksum_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_checksum_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (unsigned char *) ((arg1)->digest);
+ resultobj = svn_swig_NewPointerObj((void*)(result), SWIGTYPE_p_unsigned_char,
+ _global_py_pool, args);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_checksum_t_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_checksum_t *arg1 = (struct svn_checksum_t *) 0 ;
+ svn_checksum_kind_t arg2 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_checksum_t_kind_set",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (struct svn_checksum_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_checksum_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg2 = (svn_checksum_kind_t)SWIG_As_long (obj1);
+ if (SWIG_arg_fail(svn_argnum_obj1)) {
+ SWIG_fail;
+ }
+ }
+ if (arg1) (arg1)->kind = arg2;
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_checksum_t_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_checksum_t *arg1 = (struct svn_checksum_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ svn_checksum_kind_t result;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_checksum_t_kind_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_checksum_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_checksum_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (svn_checksum_kind_t) ((arg1)->kind);
+ resultobj = SWIG_From_long((long)(result));
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_svn_checksum_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_checksum_t *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)":new_svn_checksum_t")) SWIG_fail;
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (struct svn_checksum_t *)calloc(1, sizeof(struct svn_checksum_t));
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = svn_swig_NewPointerObj((void*)(result), SWIGTYPE_p_svn_checksum_t,
+ _global_py_pool, args);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_svn_checksum_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_checksum_t *arg1 = (struct svn_checksum_t *) 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_checksum_t",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_checksum_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_checksum_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ free((char *) arg1);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *svn_checksum_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *obj;
+ if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+ SWIG_TypeNewClientData(SWIGTYPE_p_svn_checksum_t, SWIG_NewClientData(obj));
+ return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_svn_checksum_create(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_checksum_kind_t arg1 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ svn_checksum_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg2 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"O|O:svn_checksum_create",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (svn_checksum_kind_t)SWIG_As_long (obj0);
+ if (SWIG_arg_fail(svn_argnum_obj0)) {
+ SWIG_fail;
+ }
+ }
+ if (obj1) {
+ /* Verify that the user supplied a valid pool */
+ if (obj1 != Py_None && obj1 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj1);
+ SWIG_arg_fail(svn_argnum_obj1);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_checksum_t *)svn_checksum_create(arg1,arg2);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = svn_swig_NewPointerObj((void*)(result), SWIGTYPE_p_svn_checksum_t,
+ _global_py_pool, args);
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_checksum_clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_checksum_clear",&obj0)) SWIG_fail;
+ {
+ arg1 = (svn_checksum_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_checksum_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_checksum_clear(arg1);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_checksum_match(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ svn_checksum_t *arg2 = (svn_checksum_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ svn_boolean_t result;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_checksum_match",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (svn_checksum_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_checksum_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg2 = (svn_checksum_t *)svn_swig_MustGetPtr(obj1, SWIGTYPE_p_svn_checksum_t, svn_argnum_obj1);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_boolean_t)svn_checksum_match((struct svn_checksum_t const *)arg1,(struct svn_checksum_t const *)arg2);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_From_long((long)(result));
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_checksum_dup(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ svn_checksum_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg2 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"O|O:svn_checksum_dup",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (svn_checksum_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_checksum_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj1) {
+ /* Verify that the user supplied a valid pool */
+ if (obj1 != Py_None && obj1 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj1);
+ SWIG_arg_fail(svn_argnum_obj1);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_checksum_t *)svn_checksum_dup((struct svn_checksum_t const *)arg1,arg2);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = svn_swig_NewPointerObj((void*)(result), SWIGTYPE_p_svn_checksum_t,
+ _global_py_pool, args);
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_checksum_to_cstring_display(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ char *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg2 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"O|O:svn_checksum_to_cstring_display",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (svn_checksum_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_checksum_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj1) {
+ /* Verify that the user supplied a valid pool */
+ if (obj1 != Py_None && obj1 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj1);
+ SWIG_arg_fail(svn_argnum_obj1);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (char *)svn_checksum_to_cstring_display((struct svn_checksum_t const *)arg1,arg2);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_checksum_to_cstring(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ char *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg2 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"O|O:svn_checksum_to_cstring",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (svn_checksum_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_checksum_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj1) {
+ /* Verify that the user supplied a valid pool */
+ if (obj1 != Py_None && obj1 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj1);
+ SWIG_arg_fail(svn_argnum_obj1);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (char *)svn_checksum_to_cstring((struct svn_checksum_t const *)arg1,arg2);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_checksum_serialize(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ char *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg2 = _global_pool;
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg3 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"O|OO:svn_checksum_serialize",&obj0,&obj1,&obj2)) SWIG_fail;
+ {
+ arg1 = (svn_checksum_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_checksum_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj1) {
+ /* Verify that the user supplied a valid pool */
+ if (obj1 != Py_None && obj1 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj1);
+ SWIG_arg_fail(svn_argnum_obj1);
+ SWIG_fail;
+ }
+ }
+ if (obj2) {
+ /* Verify that the user supplied a valid pool */
+ if (obj2 != Py_None && obj2 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj2);
+ SWIG_arg_fail(svn_argnum_obj2);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (char *)svn_checksum_serialize((struct svn_checksum_t const *)arg1,arg2,arg3);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_checksum_deserialize(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_checksum_t **arg1 = (svn_checksum_t **) 0 ;
+ char *arg2 = (char *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_checksum_t *temp1 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg3 = _global_pool;
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg4 = _global_pool;
+ arg1 = &temp1;
+ if (!PyArg_ParseTuple(args,(char *)"s|OO:svn_checksum_deserialize",&arg2,&obj1,&obj2)) SWIG_fail;
+ if (obj1) {
+ /* Verify that the user supplied a valid pool */
+ if (obj1 != Py_None && obj1 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj1);
+ SWIG_arg_fail(svn_argnum_obj1);
+ SWIG_fail;
+ }
+ }
+ if (obj2) {
+ /* Verify that the user supplied a valid pool */
+ if (obj2 != Py_None && obj2 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj2);
+ SWIG_arg_fail(svn_argnum_obj2);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_checksum_deserialize((struct svn_checksum_t const **)arg1,(char const *)arg2,arg3,arg4);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ /* FIXME: Missing argout typemap: svn_checksum_deserialize arg 1 (svn_checksum_t const **) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_checksum_deserialize is not implemented yet");
+
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_checksum_parse_hex(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_checksum_t **arg1 = (svn_checksum_t **) 0 ;
+ svn_checksum_kind_t arg2 ;
+ char *arg3 = (char *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_checksum_t *temp1 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj2 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg4 = _global_pool;
+ arg1 = &temp1;
+ if (!PyArg_ParseTuple(args,(char *)"Os|O:svn_checksum_parse_hex",&obj0,&arg3,&obj2)) SWIG_fail;
+ {
+ arg2 = (svn_checksum_kind_t)SWIG_As_long (obj0);
+ if (SWIG_arg_fail(svn_argnum_obj0)) {
+ SWIG_fail;
+ }
+ }
+ if (obj2) {
+ /* Verify that the user supplied a valid pool */
+ if (obj2 != Py_None && obj2 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj2);
+ SWIG_arg_fail(svn_argnum_obj2);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_checksum_parse_hex(arg1,arg2,(char const *)arg3,arg4);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ /* FIXME: Missing argout typemap: svn_checksum_parse_hex arg 1 (svn_checksum_t **) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_checksum_parse_hex is not implemented yet");
+
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_checksum(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_checksum_t **arg1 = (svn_checksum_t **) 0 ;
+ svn_checksum_kind_t arg2 ;
+ void *arg3 = (void *) 0 ;
+ apr_size_t arg4 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_checksum_t *temp1 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg5 = _global_pool;
+ arg1 = &temp1;
+ if (!PyArg_ParseTuple(args,(char *)"OOO|O:svn_checksum",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+ {
+ arg2 = (svn_checksum_kind_t)SWIG_As_long (obj0);
+ if (SWIG_arg_fail(svn_argnum_obj0)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg3 = (void *)svn_swig_MustGetPtr(obj1, SWIGTYPE_p_void, svn_argnum_obj1);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg4 = (apr_size_t)SWIG_As_unsigned_SS_long (obj2);
+ if (SWIG_arg_fail(svn_argnum_obj2)) {
+ SWIG_fail;
+ }
+ }
+ if (obj3) {
+ /* Verify that the user supplied a valid pool */
+ if (obj3 != Py_None && obj3 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj3);
+ SWIG_arg_fail(svn_argnum_obj3);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_checksum(arg1,arg2,(void const *)arg3,arg4,arg5);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ /* FIXME: Missing argout typemap: svn_checksum arg 1 (svn_checksum_t **) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_checksum is not implemented yet");
+
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_checksum_empty_checksum(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_checksum_kind_t arg1 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ svn_checksum_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg2 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"O|O:svn_checksum_empty_checksum",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (svn_checksum_kind_t)SWIG_As_long (obj0);
+ if (SWIG_arg_fail(svn_argnum_obj0)) {
+ SWIG_fail;
+ }
+ }
+ if (obj1) {
+ /* Verify that the user supplied a valid pool */
+ if (obj1 != Py_None && obj1 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj1);
+ SWIG_arg_fail(svn_argnum_obj1);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_checksum_t *)svn_checksum_empty_checksum(arg1,arg2);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = svn_swig_NewPointerObj((void*)(result), SWIGTYPE_p_svn_checksum_t,
+ _global_py_pool, args);
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_checksum_ctx_create(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_checksum_kind_t arg1 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ svn_checksum_ctx_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg2 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"O|O:svn_checksum_ctx_create",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (svn_checksum_kind_t)SWIG_As_long (obj0);
+ if (SWIG_arg_fail(svn_argnum_obj0)) {
+ SWIG_fail;
+ }
+ }
+ if (obj1) {
+ /* Verify that the user supplied a valid pool */
+ if (obj1 != Py_None && obj1 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj1);
+ SWIG_arg_fail(svn_argnum_obj1);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_checksum_ctx_t *)svn_checksum_ctx_create(arg1,arg2);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = svn_swig_NewPointerObj((void*)(result), SWIGTYPE_p_svn_checksum_ctx_t,
+ _global_py_pool, args);
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_checksum_update(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_checksum_ctx_t *arg1 = (svn_checksum_ctx_t *) 0 ;
+ void *arg2 = (void *) 0 ;
+ apr_size_t arg3 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OOO:svn_checksum_update",&obj0,&obj1,&obj2)) SWIG_fail;
+ {
+ arg1 = (svn_checksum_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_checksum_ctx_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg2 = (void *)svn_swig_MustGetPtr(obj1, SWIGTYPE_p_void, svn_argnum_obj1);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg3 = (apr_size_t)SWIG_As_unsigned_SS_long (obj2);
+ if (SWIG_arg_fail(svn_argnum_obj2)) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_checksum_update(arg1,(void const *)arg2,arg3);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_checksum_final(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_checksum_t **arg1 = (svn_checksum_t **) 0 ;
+ svn_checksum_ctx_t *arg2 = (svn_checksum_ctx_t *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_checksum_t *temp1 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg3 = _global_pool;
+ arg1 = &temp1;
+ if (!PyArg_ParseTuple(args,(char *)"O|O:svn_checksum_final",&obj0,&obj1)) SWIG_fail;
+ {
+ arg2 = (svn_checksum_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_checksum_ctx_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj1) {
+ /* Verify that the user supplied a valid pool */
+ if (obj1 != Py_None && obj1 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj1);
+ SWIG_arg_fail(svn_argnum_obj1);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_checksum_final(arg1,(struct svn_checksum_ctx_t const *)arg2,arg3);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ /* FIXME: Missing argout typemap: svn_checksum_final arg 1 (svn_checksum_t **) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_checksum_final is not implemented yet");
+
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_checksum_size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ apr_size_t result;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_checksum_size",&obj0)) SWIG_fail;
+ {
+ arg1 = (svn_checksum_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_checksum_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = svn_checksum_size((struct svn_checksum_t const *)arg1);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_From_unsigned_SS_long((unsigned long)(result));
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_checksum_is_empty_checksum(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ svn_boolean_t result;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_checksum_is_empty_checksum",&obj0)) SWIG_fail;
+ {
+ arg1 = (svn_checksum_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_checksum_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_boolean_t)svn_checksum_is_empty_checksum(arg1);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_From_long((long)(result));
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_checksum_mismatch_err__varargs__(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *varargs) {
+ PyObject *resultobj = 0;
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ svn_checksum_t *arg2 = (svn_checksum_t *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ void *arg5 = 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg3 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OO|Os:svn_checksum_mismatch_err",&obj0,&obj1,&obj2,&arg4)) SWIG_fail;
+ {
+ arg1 = (svn_checksum_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_checksum_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg2 = (svn_checksum_t *)svn_swig_MustGetPtr(obj1, SWIGTYPE_p_svn_checksum_t, svn_argnum_obj1);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj2) {
+ /* Verify that the user supplied a valid pool */
+ if (obj2 != Py_None && obj2 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj2);
+ SWIG_arg_fail(svn_argnum_obj2);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_checksum_mismatch_err((struct svn_checksum_t const *)arg1,(struct svn_checksum_t const *)arg2,arg3,(char const *)arg4,arg5);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_checksum_mismatch_err(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj;
+ PyObject *varargs;
+ PyObject *newargs;
+
+ newargs = PyTuple_GetSlice(args,0,2);
+ varargs = PyTuple_GetSlice(args,2,PyTuple_Size(args)+1);
+ resultobj = _wrap_svn_checksum_mismatch_err__varargs__(NULL,newargs,varargs);
+ Py_XDECREF(newargs);
+ Py_XDECREF(varargs);
+ return resultobj;
+}
+
+
+SWIGINTERN PyObject *svn_checksum_ctx_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *obj;
+ if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+ SWIG_TypeNewClientData(SWIGTYPE_p_svn_checksum_ctx_t, SWIG_NewClientData(obj));
+ return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_svn_auth_set_gnome_keyring_unlock_prompt_func(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_auth_baton_t *arg1 = (svn_auth_baton_t *) 0 ;
+ svn_auth_gnome_keyring_unlock_prompt_func_t arg2 = (svn_auth_gnome_keyring_unlock_prompt_func_t) 0 ;
+ void *arg3 = (void *) 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_auth_set_gnome_keyring_unlock_prompt_func",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (svn_auth_baton_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_auth_baton_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg2 = svn_swig_py_auth_gnome_keyring_unlock_prompt_func;
+ arg3 = obj1;
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ svn_auth_set_gnome_keyring_unlock_prompt_func(arg1,arg2,arg3);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_swig_py_set_application_pool(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
PyObject *arg1 = (PyObject *) 0 ;
@@ -28354,12 +32843,12 @@ fail:
SWIGINTERN PyObject *_wrap_svn_swig_rangelist_merge(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
- apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
+ svn_rangelist_t **arg1 = (svn_rangelist_t **) 0 ;
+ svn_rangelist_t *arg2 = (svn_rangelist_t *) 0 ;
apr_pool_t *arg3 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool = NULL ;
PyObject *_global_py_pool = NULL ;
- apr_array_header_t *temp1 ;
+ svn_rangelist_t *temp1 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
PyObject * obj2 = 0 ;
@@ -28372,7 +32861,7 @@ SWIGINTERN PyObject *_wrap_svn_swig_rangelist_merge(PyObject *SWIGUNUSEDPARM(sel
if (!PyArg_ParseTuple(args,(char *)"OO|O:svn_swig_rangelist_merge",&obj0,&obj1,&obj2)) SWIG_fail;
{
arg1 = &temp1;
- *arg1 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj0,
+ *arg1 = (svn_rangelist_t *) svn_swig_py_seq_to_array(obj0,
sizeof(const svn_merge_range_t *),
svn_swig_py_unwrap_struct_ptr,
SWIGTYPE_p_svn_merge_range_t,
@@ -28383,7 +32872,7 @@ SWIGINTERN PyObject *_wrap_svn_swig_rangelist_merge(PyObject *SWIGUNUSEDPARM(sel
}
}
{
- arg2 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj1,
+ arg2 = (svn_rangelist_t *) svn_swig_py_seq_to_array(obj1,
sizeof(const svn_merge_range_t *),
svn_swig_py_unwrap_struct_ptr,
SWIGTYPE_p_svn_merge_range_t,
@@ -28443,11 +32932,11 @@ fail:
SWIGINTERN PyObject *_wrap_svn_swig_rangelist_reverse(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
+ svn_rangelist_t **arg1 = (svn_rangelist_t **) 0 ;
apr_pool_t *arg2 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool = NULL ;
PyObject *_global_py_pool = NULL ;
- apr_array_header_t *temp1 ;
+ svn_rangelist_t *temp1 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
svn_error_t *result = 0 ;
@@ -28459,7 +32948,7 @@ SWIGINTERN PyObject *_wrap_svn_swig_rangelist_reverse(PyObject *SWIGUNUSEDPARM(s
if (!PyArg_ParseTuple(args,(char *)"O|O:svn_swig_rangelist_reverse",&obj0,&obj1)) SWIG_fail;
{
arg1 = &temp1;
- *arg1 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj0,
+ *arg1 = (svn_rangelist_t *) svn_swig_py_seq_to_array(obj0,
sizeof(const svn_merge_range_t *),
svn_swig_py_unwrap_struct_ptr,
SWIGTYPE_p_svn_merge_range_t,
@@ -28527,34 +33016,34 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"apr_pool_clear", _wrap_apr_pool_clear, METH_VARARGS, (char *)"apr_pool_clear(apr_pool_t p)"},
{ (char *)"apr_file_open_stdout", _wrap_apr_file_open_stdout, METH_VARARGS, (char *)"apr_file_open_stdout(apr_pool_t pool) -> apr_status_t"},
{ (char *)"apr_file_open_stderr", _wrap_apr_file_open_stderr, METH_VARARGS, (char *)"apr_file_open_stderr(apr_pool_t pool) -> apr_status_t"},
- { (char *)"svn_time_to_cstring", _wrap_svn_time_to_cstring, METH_VARARGS, (char *)"svn_time_to_cstring(apr_time_t when, apr_pool_t pool) -> char"},
- { (char *)"svn_time_from_cstring", _wrap_svn_time_from_cstring, METH_VARARGS, (char *)"svn_time_from_cstring(char data, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_time_to_human_cstring", _wrap_svn_time_to_human_cstring, METH_VARARGS, (char *)"svn_time_to_human_cstring(apr_time_t when, apr_pool_t pool) -> char"},
- { (char *)"svn_parse_date", _wrap_svn_parse_date, METH_VARARGS, (char *)"svn_parse_date(char text, apr_time_t now, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_time_to_cstring", _wrap_svn_time_to_cstring, METH_VARARGS, (char *)"svn_time_to_cstring(apr_time_t when, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_time_from_cstring", _wrap_svn_time_from_cstring, METH_VARARGS, (char *)"svn_time_from_cstring(char const * data, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_time_to_human_cstring", _wrap_svn_time_to_human_cstring, METH_VARARGS, (char *)"svn_time_to_human_cstring(apr_time_t when, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_parse_date", _wrap_svn_parse_date, METH_VARARGS, (char *)"svn_parse_date(char const * text, apr_time_t now, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_sleep_for_timestamps", _wrap_svn_sleep_for_timestamps, METH_VARARGS, (char *)"svn_sleep_for_timestamps()"},
{ (char *)"svn_error_t_apr_err_set", _wrap_svn_error_t_apr_err_set, METH_VARARGS, (char *)"svn_error_t_apr_err_set(svn_error_t self, apr_status_t apr_err)"},
{ (char *)"svn_error_t_apr_err_get", _wrap_svn_error_t_apr_err_get, METH_VARARGS, (char *)"svn_error_t_apr_err_get(svn_error_t self) -> apr_status_t"},
- { (char *)"svn_error_t_message_get", _wrap_svn_error_t_message_get, METH_VARARGS, (char *)"svn_error_t_message_get(svn_error_t self) -> char"},
- { (char *)"svn_error_t_child_set", _wrap_svn_error_t_child_set, METH_VARARGS, (char *)"svn_error_t_child_set(svn_error_t self, struct svn_error_t child)"},
- { (char *)"svn_error_t_child_get", _wrap_svn_error_t_child_get, METH_VARARGS, (char *)"svn_error_t_child_get(svn_error_t self) -> struct svn_error_t"},
+ { (char *)"svn_error_t_message_get", _wrap_svn_error_t_message_get, METH_VARARGS, (char *)"svn_error_t_message_get(svn_error_t self) -> char const *"},
+ { (char *)"svn_error_t_child_set", _wrap_svn_error_t_child_set, METH_VARARGS, (char *)"svn_error_t_child_set(svn_error_t self, svn_error_t child)"},
+ { (char *)"svn_error_t_child_get", _wrap_svn_error_t_child_get, METH_VARARGS, (char *)"svn_error_t_child_get(svn_error_t self) -> svn_error_t"},
{ (char *)"svn_error_t_pool_set", _wrap_svn_error_t_pool_set, METH_VARARGS, (char *)"svn_error_t_pool_set(svn_error_t self, apr_pool_t pool)"},
{ (char *)"svn_error_t_pool_get", _wrap_svn_error_t_pool_get, METH_VARARGS, (char *)"svn_error_t_pool_get(svn_error_t self) -> apr_pool_t"},
- { (char *)"svn_error_t_file_get", _wrap_svn_error_t_file_get, METH_VARARGS, (char *)"svn_error_t_file_get(svn_error_t self) -> char"},
+ { (char *)"svn_error_t_file_get", _wrap_svn_error_t_file_get, METH_VARARGS, (char *)"svn_error_t_file_get(svn_error_t self) -> char const *"},
{ (char *)"svn_error_t_line_set", _wrap_svn_error_t_line_set, METH_VARARGS, (char *)"svn_error_t_line_set(svn_error_t self, long line)"},
{ (char *)"svn_error_t_line_get", _wrap_svn_error_t_line_get, METH_VARARGS, (char *)"svn_error_t_line_get(svn_error_t self) -> long"},
{ (char *)"new_svn_error_t", _wrap_new_svn_error_t, METH_VARARGS, (char *)"new_svn_error_t() -> svn_error_t"},
{ (char *)"delete_svn_error_t", _wrap_delete_svn_error_t, METH_VARARGS, (char *)"delete_svn_error_t(svn_error_t self)"},
{ (char *)"svn_error_t_swigregister", svn_error_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn__apr_hash_index_key", _wrap_svn__apr_hash_index_key, METH_VARARGS, (char *)"svn__apr_hash_index_key(apr_hash_index_t hi) -> void"},
- { (char *)"svn__apr_hash_index_klen", _wrap_svn__apr_hash_index_klen, METH_VARARGS, (char *)"svn__apr_hash_index_klen(apr_hash_index_t hi) -> apr_ssize_t"},
- { (char *)"svn__apr_hash_index_val", _wrap_svn__apr_hash_index_val, METH_VARARGS, (char *)"svn__apr_hash_index_val(apr_hash_index_t hi) -> void"},
- { (char *)"svn_node_kind_to_word", _wrap_svn_node_kind_to_word, METH_VARARGS, (char *)"svn_node_kind_to_word(svn_node_kind_t kind) -> char"},
- { (char *)"svn_node_kind_from_word", _wrap_svn_node_kind_from_word, METH_VARARGS, (char *)"svn_node_kind_from_word(char word) -> svn_node_kind_t"},
- { (char *)"svn_tristate__to_word", _wrap_svn_tristate__to_word, METH_VARARGS, (char *)"svn_tristate__to_word(svn_tristate_t tristate) -> char"},
- { (char *)"svn_tristate__from_word", _wrap_svn_tristate__from_word, METH_VARARGS, (char *)"svn_tristate__from_word(char word) -> svn_tristate_t"},
- { (char *)"svn_revnum_parse", _wrap_svn_revnum_parse, METH_VARARGS, (char *)"svn_revnum_parse(char str) -> svn_error_t"},
- { (char *)"svn_depth_to_word", _wrap_svn_depth_to_word, METH_VARARGS, (char *)"svn_depth_to_word(svn_depth_t depth) -> char"},
- { (char *)"svn_depth_from_word", _wrap_svn_depth_from_word, METH_VARARGS, (char *)"svn_depth_from_word(char word) -> svn_depth_t"},
+ { (char *)"svn__apr_hash_index_key", _wrap_svn__apr_hash_index_key, METH_VARARGS, (char *)"svn__apr_hash_index_key(apr_hash_index_t const * hi) -> void const *"},
+ { (char *)"svn__apr_hash_index_klen", _wrap_svn__apr_hash_index_klen, METH_VARARGS, (char *)"svn__apr_hash_index_klen(apr_hash_index_t const * hi) -> apr_ssize_t"},
+ { (char *)"svn__apr_hash_index_val", _wrap_svn__apr_hash_index_val, METH_VARARGS, (char *)"svn__apr_hash_index_val(apr_hash_index_t const * hi) -> void *"},
+ { (char *)"svn_node_kind_to_word", _wrap_svn_node_kind_to_word, METH_VARARGS, (char *)"svn_node_kind_to_word(svn_node_kind_t kind) -> char const *"},
+ { (char *)"svn_node_kind_from_word", _wrap_svn_node_kind_from_word, METH_VARARGS, (char *)"svn_node_kind_from_word(char const * word) -> svn_node_kind_t"},
+ { (char *)"svn_tristate__to_word", _wrap_svn_tristate__to_word, METH_VARARGS, (char *)"svn_tristate__to_word(svn_tristate_t tristate) -> char const *"},
+ { (char *)"svn_tristate__from_word", _wrap_svn_tristate__from_word, METH_VARARGS, (char *)"svn_tristate__from_word(char const * word) -> svn_tristate_t"},
+ { (char *)"svn_revnum_parse", _wrap_svn_revnum_parse, METH_VARARGS, (char *)"svn_revnum_parse(char const * str) -> svn_error_t"},
+ { (char *)"svn_depth_to_word", _wrap_svn_depth_to_word, METH_VARARGS, (char *)"svn_depth_to_word(svn_depth_t depth) -> char const *"},
+ { (char *)"svn_depth_from_word", _wrap_svn_depth_from_word, METH_VARARGS, (char *)"svn_depth_from_word(char const * word) -> svn_depth_t"},
{ (char *)"svn_dirent_t_kind_set", _wrap_svn_dirent_t_kind_set, METH_VARARGS, (char *)"svn_dirent_t_kind_set(svn_dirent_t self, svn_node_kind_t kind)"},
{ (char *)"svn_dirent_t_kind_get", _wrap_svn_dirent_t_kind_get, METH_VARARGS, (char *)"svn_dirent_t_kind_get(svn_dirent_t self) -> svn_node_kind_t"},
{ (char *)"svn_dirent_t_size_set", _wrap_svn_dirent_t_size_set, METH_VARARGS, (char *)"svn_dirent_t_size_set(svn_dirent_t self, svn_filesize_t size)"},
@@ -28565,21 +33054,22 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_dirent_t_created_rev_get", _wrap_svn_dirent_t_created_rev_get, METH_VARARGS, (char *)"svn_dirent_t_created_rev_get(svn_dirent_t self) -> svn_revnum_t"},
{ (char *)"svn_dirent_t_time_set", _wrap_svn_dirent_t_time_set, METH_VARARGS, (char *)"svn_dirent_t_time_set(svn_dirent_t self, apr_time_t time)"},
{ (char *)"svn_dirent_t_time_get", _wrap_svn_dirent_t_time_get, METH_VARARGS, (char *)"svn_dirent_t_time_get(svn_dirent_t self) -> apr_time_t"},
- { (char *)"svn_dirent_t_last_author_get", _wrap_svn_dirent_t_last_author_get, METH_VARARGS, (char *)"svn_dirent_t_last_author_get(svn_dirent_t self) -> char"},
+ { (char *)"svn_dirent_t_last_author_get", _wrap_svn_dirent_t_last_author_get, METH_VARARGS, (char *)"svn_dirent_t_last_author_get(svn_dirent_t self) -> char const *"},
{ (char *)"new_svn_dirent_t", _wrap_new_svn_dirent_t, METH_VARARGS, (char *)"new_svn_dirent_t() -> svn_dirent_t"},
{ (char *)"delete_svn_dirent_t", _wrap_delete_svn_dirent_t, METH_VARARGS, (char *)"delete_svn_dirent_t(svn_dirent_t self)"},
{ (char *)"svn_dirent_t_swigregister", svn_dirent_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_dirent_dup", _wrap_svn_dirent_dup, METH_VARARGS, (char *)"svn_dirent_dup(svn_dirent_t dirent, apr_pool_t pool) -> svn_dirent_t"},
+ { (char *)"svn_dirent_create", _wrap_svn_dirent_create, METH_VARARGS, (char *)"svn_dirent_create(apr_pool_t result_pool) -> svn_dirent_t"},
{ (char *)"svn_commit_info_t_revision_set", _wrap_svn_commit_info_t_revision_set, METH_VARARGS, (char *)"svn_commit_info_t_revision_set(svn_commit_info_t self, svn_revnum_t revision)"},
{ (char *)"svn_commit_info_t_revision_get", _wrap_svn_commit_info_t_revision_get, METH_VARARGS, (char *)"svn_commit_info_t_revision_get(svn_commit_info_t self) -> svn_revnum_t"},
- { (char *)"svn_commit_info_t_date_set", _wrap_svn_commit_info_t_date_set, METH_VARARGS, (char *)"svn_commit_info_t_date_set(svn_commit_info_t self, char date)"},
- { (char *)"svn_commit_info_t_date_get", _wrap_svn_commit_info_t_date_get, METH_VARARGS, (char *)"svn_commit_info_t_date_get(svn_commit_info_t self) -> char"},
- { (char *)"svn_commit_info_t_author_set", _wrap_svn_commit_info_t_author_set, METH_VARARGS, (char *)"svn_commit_info_t_author_set(svn_commit_info_t self, char author)"},
- { (char *)"svn_commit_info_t_author_get", _wrap_svn_commit_info_t_author_get, METH_VARARGS, (char *)"svn_commit_info_t_author_get(svn_commit_info_t self) -> char"},
- { (char *)"svn_commit_info_t_post_commit_err_set", _wrap_svn_commit_info_t_post_commit_err_set, METH_VARARGS, (char *)"svn_commit_info_t_post_commit_err_set(svn_commit_info_t self, char post_commit_err)"},
- { (char *)"svn_commit_info_t_post_commit_err_get", _wrap_svn_commit_info_t_post_commit_err_get, METH_VARARGS, (char *)"svn_commit_info_t_post_commit_err_get(svn_commit_info_t self) -> char"},
- { (char *)"svn_commit_info_t_repos_root_set", _wrap_svn_commit_info_t_repos_root_set, METH_VARARGS, (char *)"svn_commit_info_t_repos_root_set(svn_commit_info_t self, char repos_root)"},
- { (char *)"svn_commit_info_t_repos_root_get", _wrap_svn_commit_info_t_repos_root_get, METH_VARARGS, (char *)"svn_commit_info_t_repos_root_get(svn_commit_info_t self) -> char"},
+ { (char *)"svn_commit_info_t_date_set", _wrap_svn_commit_info_t_date_set, METH_VARARGS, (char *)"svn_commit_info_t_date_set(svn_commit_info_t self, char const * date)"},
+ { (char *)"svn_commit_info_t_date_get", _wrap_svn_commit_info_t_date_get, METH_VARARGS, (char *)"svn_commit_info_t_date_get(svn_commit_info_t self) -> char const *"},
+ { (char *)"svn_commit_info_t_author_set", _wrap_svn_commit_info_t_author_set, METH_VARARGS, (char *)"svn_commit_info_t_author_set(svn_commit_info_t self, char const * author)"},
+ { (char *)"svn_commit_info_t_author_get", _wrap_svn_commit_info_t_author_get, METH_VARARGS, (char *)"svn_commit_info_t_author_get(svn_commit_info_t self) -> char const *"},
+ { (char *)"svn_commit_info_t_post_commit_err_set", _wrap_svn_commit_info_t_post_commit_err_set, METH_VARARGS, (char *)"svn_commit_info_t_post_commit_err_set(svn_commit_info_t self, char const * post_commit_err)"},
+ { (char *)"svn_commit_info_t_post_commit_err_get", _wrap_svn_commit_info_t_post_commit_err_get, METH_VARARGS, (char *)"svn_commit_info_t_post_commit_err_get(svn_commit_info_t self) -> char const *"},
+ { (char *)"svn_commit_info_t_repos_root_set", _wrap_svn_commit_info_t_repos_root_set, METH_VARARGS, (char *)"svn_commit_info_t_repos_root_set(svn_commit_info_t self, char const * repos_root)"},
+ { (char *)"svn_commit_info_t_repos_root_get", _wrap_svn_commit_info_t_repos_root_get, METH_VARARGS, (char *)"svn_commit_info_t_repos_root_get(svn_commit_info_t self) -> char const *"},
{ (char *)"new_svn_commit_info_t", _wrap_new_svn_commit_info_t, METH_VARARGS, (char *)"new_svn_commit_info_t() -> svn_commit_info_t"},
{ (char *)"delete_svn_commit_info_t", _wrap_delete_svn_commit_info_t, METH_VARARGS, (char *)"delete_svn_commit_info_t(svn_commit_info_t self)"},
{ (char *)"svn_commit_info_t_swigregister", svn_commit_info_t_swigregister, METH_VARARGS, NULL},
@@ -28587,8 +33077,8 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_commit_info_dup", _wrap_svn_commit_info_dup, METH_VARARGS, (char *)"svn_commit_info_dup(svn_commit_info_t src_commit_info, apr_pool_t pool) -> svn_commit_info_t"},
{ (char *)"svn_log_changed_path2_t_action_set", _wrap_svn_log_changed_path2_t_action_set, METH_VARARGS, (char *)"svn_log_changed_path2_t_action_set(svn_log_changed_path2_t self, char action)"},
{ (char *)"svn_log_changed_path2_t_action_get", _wrap_svn_log_changed_path2_t_action_get, METH_VARARGS, (char *)"svn_log_changed_path2_t_action_get(svn_log_changed_path2_t self) -> char"},
- { (char *)"svn_log_changed_path2_t_copyfrom_path_set", _wrap_svn_log_changed_path2_t_copyfrom_path_set, METH_VARARGS, (char *)"svn_log_changed_path2_t_copyfrom_path_set(svn_log_changed_path2_t self, char copyfrom_path)"},
- { (char *)"svn_log_changed_path2_t_copyfrom_path_get", _wrap_svn_log_changed_path2_t_copyfrom_path_get, METH_VARARGS, (char *)"svn_log_changed_path2_t_copyfrom_path_get(svn_log_changed_path2_t self) -> char"},
+ { (char *)"svn_log_changed_path2_t_copyfrom_path_set", _wrap_svn_log_changed_path2_t_copyfrom_path_set, METH_VARARGS, (char *)"svn_log_changed_path2_t_copyfrom_path_set(svn_log_changed_path2_t self, char const * copyfrom_path)"},
+ { (char *)"svn_log_changed_path2_t_copyfrom_path_get", _wrap_svn_log_changed_path2_t_copyfrom_path_get, METH_VARARGS, (char *)"svn_log_changed_path2_t_copyfrom_path_get(svn_log_changed_path2_t self) -> char const *"},
{ (char *)"svn_log_changed_path2_t_copyfrom_rev_set", _wrap_svn_log_changed_path2_t_copyfrom_rev_set, METH_VARARGS, (char *)"svn_log_changed_path2_t_copyfrom_rev_set(svn_log_changed_path2_t self, svn_revnum_t copyfrom_rev)"},
{ (char *)"svn_log_changed_path2_t_copyfrom_rev_get", _wrap_svn_log_changed_path2_t_copyfrom_rev_get, METH_VARARGS, (char *)"svn_log_changed_path2_t_copyfrom_rev_get(svn_log_changed_path2_t self) -> svn_revnum_t"},
{ (char *)"svn_log_changed_path2_t_node_kind_set", _wrap_svn_log_changed_path2_t_node_kind_set, METH_VARARGS, (char *)"svn_log_changed_path2_t_node_kind_set(svn_log_changed_path2_t self, svn_node_kind_t node_kind)"},
@@ -28604,7 +33094,7 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_log_changed_path2_dup", _wrap_svn_log_changed_path2_dup, METH_VARARGS, (char *)"svn_log_changed_path2_dup(svn_log_changed_path2_t changed_path, apr_pool_t pool) -> svn_log_changed_path2_t"},
{ (char *)"svn_log_changed_path_t_action_set", _wrap_svn_log_changed_path_t_action_set, METH_VARARGS, (char *)"svn_log_changed_path_t_action_set(svn_log_changed_path_t self, char action)"},
{ (char *)"svn_log_changed_path_t_action_get", _wrap_svn_log_changed_path_t_action_get, METH_VARARGS, (char *)"svn_log_changed_path_t_action_get(svn_log_changed_path_t self) -> char"},
- { (char *)"svn_log_changed_path_t_copyfrom_path_get", _wrap_svn_log_changed_path_t_copyfrom_path_get, METH_VARARGS, (char *)"svn_log_changed_path_t_copyfrom_path_get(svn_log_changed_path_t self) -> char"},
+ { (char *)"svn_log_changed_path_t_copyfrom_path_get", _wrap_svn_log_changed_path_t_copyfrom_path_get, METH_VARARGS, (char *)"svn_log_changed_path_t_copyfrom_path_get(svn_log_changed_path_t self) -> char const *"},
{ (char *)"svn_log_changed_path_t_copyfrom_rev_set", _wrap_svn_log_changed_path_t_copyfrom_rev_set, METH_VARARGS, (char *)"svn_log_changed_path_t_copyfrom_rev_set(svn_log_changed_path_t self, svn_revnum_t copyfrom_rev)"},
{ (char *)"svn_log_changed_path_t_copyfrom_rev_get", _wrap_svn_log_changed_path_t_copyfrom_rev_get, METH_VARARGS, (char *)"svn_log_changed_path_t_copyfrom_rev_get(svn_log_changed_path_t self) -> svn_revnum_t"},
{ (char *)"new_svn_log_changed_path_t", _wrap_new_svn_log_changed_path_t, METH_VARARGS, (char *)"new_svn_log_changed_path_t() -> svn_log_changed_path_t"},
@@ -28630,16 +33120,16 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_log_entry_t_swigregister", svn_log_entry_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_log_entry_create", _wrap_svn_log_entry_create, METH_VARARGS, (char *)"svn_log_entry_create(apr_pool_t pool) -> svn_log_entry_t"},
{ (char *)"svn_log_entry_dup", _wrap_svn_log_entry_dup, METH_VARARGS, (char *)"svn_log_entry_dup(svn_log_entry_t log_entry, apr_pool_t pool) -> svn_log_entry_t"},
- { (char *)"svn_mime_type_validate", _wrap_svn_mime_type_validate, METH_VARARGS, (char *)"svn_mime_type_validate(char mime_type, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_mime_type_is_binary", _wrap_svn_mime_type_is_binary, METH_VARARGS, (char *)"svn_mime_type_is_binary(char mime_type) -> svn_boolean_t"},
- { (char *)"svn_lock_t_path_set", _wrap_svn_lock_t_path_set, METH_VARARGS, (char *)"svn_lock_t_path_set(svn_lock_t self, char path)"},
- { (char *)"svn_lock_t_path_get", _wrap_svn_lock_t_path_get, METH_VARARGS, (char *)"svn_lock_t_path_get(svn_lock_t self) -> char"},
- { (char *)"svn_lock_t_token_set", _wrap_svn_lock_t_token_set, METH_VARARGS, (char *)"svn_lock_t_token_set(svn_lock_t self, char token)"},
- { (char *)"svn_lock_t_token_get", _wrap_svn_lock_t_token_get, METH_VARARGS, (char *)"svn_lock_t_token_get(svn_lock_t self) -> char"},
- { (char *)"svn_lock_t_owner_set", _wrap_svn_lock_t_owner_set, METH_VARARGS, (char *)"svn_lock_t_owner_set(svn_lock_t self, char owner)"},
- { (char *)"svn_lock_t_owner_get", _wrap_svn_lock_t_owner_get, METH_VARARGS, (char *)"svn_lock_t_owner_get(svn_lock_t self) -> char"},
- { (char *)"svn_lock_t_comment_set", _wrap_svn_lock_t_comment_set, METH_VARARGS, (char *)"svn_lock_t_comment_set(svn_lock_t self, char comment)"},
- { (char *)"svn_lock_t_comment_get", _wrap_svn_lock_t_comment_get, METH_VARARGS, (char *)"svn_lock_t_comment_get(svn_lock_t self) -> char"},
+ { (char *)"svn_mime_type_validate", _wrap_svn_mime_type_validate, METH_VARARGS, (char *)"svn_mime_type_validate(char const * mime_type, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_mime_type_is_binary", _wrap_svn_mime_type_is_binary, METH_VARARGS, (char *)"svn_mime_type_is_binary(char const * mime_type) -> svn_boolean_t"},
+ { (char *)"svn_lock_t_path_set", _wrap_svn_lock_t_path_set, METH_VARARGS, (char *)"svn_lock_t_path_set(svn_lock_t self, char const * path)"},
+ { (char *)"svn_lock_t_path_get", _wrap_svn_lock_t_path_get, METH_VARARGS, (char *)"svn_lock_t_path_get(svn_lock_t self) -> char const *"},
+ { (char *)"svn_lock_t_token_set", _wrap_svn_lock_t_token_set, METH_VARARGS, (char *)"svn_lock_t_token_set(svn_lock_t self, char const * token)"},
+ { (char *)"svn_lock_t_token_get", _wrap_svn_lock_t_token_get, METH_VARARGS, (char *)"svn_lock_t_token_get(svn_lock_t self) -> char const *"},
+ { (char *)"svn_lock_t_owner_set", _wrap_svn_lock_t_owner_set, METH_VARARGS, (char *)"svn_lock_t_owner_set(svn_lock_t self, char const * owner)"},
+ { (char *)"svn_lock_t_owner_get", _wrap_svn_lock_t_owner_get, METH_VARARGS, (char *)"svn_lock_t_owner_get(svn_lock_t self) -> char const *"},
+ { (char *)"svn_lock_t_comment_set", _wrap_svn_lock_t_comment_set, METH_VARARGS, (char *)"svn_lock_t_comment_set(svn_lock_t self, char const * comment)"},
+ { (char *)"svn_lock_t_comment_get", _wrap_svn_lock_t_comment_get, METH_VARARGS, (char *)"svn_lock_t_comment_get(svn_lock_t self) -> char const *"},
{ (char *)"svn_lock_t_is_dav_comment_set", _wrap_svn_lock_t_is_dav_comment_set, METH_VARARGS, (char *)"svn_lock_t_is_dav_comment_set(svn_lock_t self, svn_boolean_t is_dav_comment)"},
{ (char *)"svn_lock_t_is_dav_comment_get", _wrap_svn_lock_t_is_dav_comment_get, METH_VARARGS, (char *)"svn_lock_t_is_dav_comment_get(svn_lock_t self) -> svn_boolean_t"},
{ (char *)"svn_lock_t_creation_date_set", _wrap_svn_lock_t_creation_date_set, METH_VARARGS, (char *)"svn_lock_t_creation_date_set(svn_lock_t self, apr_time_t creation_date)"},
@@ -28651,7 +33141,7 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_lock_t_swigregister", svn_lock_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_lock_create", _wrap_svn_lock_create, METH_VARARGS, (char *)"svn_lock_create(apr_pool_t pool) -> svn_lock_t"},
{ (char *)"svn_lock_dup", _wrap_svn_lock_dup, METH_VARARGS, (char *)"svn_lock_dup(svn_lock_t lock, apr_pool_t pool) -> svn_lock_t"},
- { (char *)"svn_uuid_generate", _wrap_svn_uuid_generate, METH_VARARGS, (char *)"svn_uuid_generate(apr_pool_t pool) -> char"},
+ { (char *)"svn_uuid_generate", _wrap_svn_uuid_generate, METH_VARARGS, (char *)"svn_uuid_generate(apr_pool_t pool) -> char const *"},
{ (char *)"svn_merge_range_t_start_set", _wrap_svn_merge_range_t_start_set, METH_VARARGS, (char *)"svn_merge_range_t_start_set(svn_merge_range_t self, svn_revnum_t start)"},
{ (char *)"svn_merge_range_t_start_get", _wrap_svn_merge_range_t_start_get, METH_VARARGS, (char *)"svn_merge_range_t_start_get(svn_merge_range_t self) -> svn_revnum_t"},
{ (char *)"svn_merge_range_t_end_set", _wrap_svn_merge_range_t_end_set, METH_VARARGS, (char *)"svn_merge_range_t_end_set(svn_merge_range_t self, svn_revnum_t end)"},
@@ -28667,34 +33157,28 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_location_segment_t_range_start_get", _wrap_svn_location_segment_t_range_start_get, METH_VARARGS, (char *)"svn_location_segment_t_range_start_get(svn_location_segment_t self) -> svn_revnum_t"},
{ (char *)"svn_location_segment_t_range_end_set", _wrap_svn_location_segment_t_range_end_set, METH_VARARGS, (char *)"svn_location_segment_t_range_end_set(svn_location_segment_t self, svn_revnum_t range_end)"},
{ (char *)"svn_location_segment_t_range_end_get", _wrap_svn_location_segment_t_range_end_get, METH_VARARGS, (char *)"svn_location_segment_t_range_end_get(svn_location_segment_t self) -> svn_revnum_t"},
- { (char *)"svn_location_segment_t_path_set", _wrap_svn_location_segment_t_path_set, METH_VARARGS, (char *)"svn_location_segment_t_path_set(svn_location_segment_t self, char path)"},
- { (char *)"svn_location_segment_t_path_get", _wrap_svn_location_segment_t_path_get, METH_VARARGS, (char *)"svn_location_segment_t_path_get(svn_location_segment_t self) -> char"},
+ { (char *)"svn_location_segment_t_path_set", _wrap_svn_location_segment_t_path_set, METH_VARARGS, (char *)"svn_location_segment_t_path_set(svn_location_segment_t self, char const * path)"},
+ { (char *)"svn_location_segment_t_path_get", _wrap_svn_location_segment_t_path_get, METH_VARARGS, (char *)"svn_location_segment_t_path_get(svn_location_segment_t self) -> char const *"},
{ (char *)"new_svn_location_segment_t", _wrap_new_svn_location_segment_t, METH_VARARGS, (char *)"new_svn_location_segment_t() -> svn_location_segment_t"},
{ (char *)"delete_svn_location_segment_t", _wrap_delete_svn_location_segment_t, METH_VARARGS, (char *)"delete_svn_location_segment_t(svn_location_segment_t self)"},
{ (char *)"svn_location_segment_t_swigregister", svn_location_segment_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_location_segment_dup", _wrap_svn_location_segment_dup, METH_VARARGS, (char *)"svn_location_segment_dup(svn_location_segment_t segment, apr_pool_t pool) -> svn_location_segment_t"},
{ (char *)"svn_version_t_swigregister", svn_version_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_log_invoke_entry_receiver", _wrap_svn_log_invoke_entry_receiver, METH_VARARGS, (char *)"\n"
- "svn_log_invoke_entry_receiver(svn_log_entry_receiver_t _obj, void baton, svn_log_entry_t log_entry, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
+ { (char *)"svn_log_invoke_entry_receiver", _wrap_svn_log_invoke_entry_receiver, METH_VARARGS, (char *)"svn_log_invoke_entry_receiver(svn_log_entry_receiver_t _obj, void * baton, svn_log_entry_t log_entry, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_log_invoke_message_receiver", _wrap_svn_log_invoke_message_receiver, METH_VARARGS, (char *)"\n"
- "svn_log_invoke_message_receiver(svn_log_message_receiver_t _obj, void baton, apr_hash_t changed_paths, \n"
- " svn_revnum_t revision, char author, \n"
- " char date, char message, apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_commit_invoke_callback2", _wrap_svn_commit_invoke_callback2, METH_VARARGS, (char *)"\n"
- "svn_commit_invoke_callback2(svn_commit_callback2_t _obj, svn_commit_info_t commit_info, \n"
- " void baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_log_invoke_message_receiver(svn_log_message_receiver_t _obj, void * baton, apr_hash_t changed_paths, svn_revnum_t revision, \n"
+ " char const * author, char const * date, char const * message, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_commit_invoke_callback2", _wrap_svn_commit_invoke_callback2, METH_VARARGS, (char *)"svn_commit_invoke_callback2(svn_commit_callback2_t _obj, svn_commit_info_t commit_info, void * baton, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_commit_invoke_callback", _wrap_svn_commit_invoke_callback, METH_VARARGS, (char *)"\n"
- "svn_commit_invoke_callback(svn_commit_callback_t _obj, svn_revnum_t new_revision, \n"
- " char date, char author, void baton) -> svn_error_t\n"
+ "svn_commit_invoke_callback(svn_commit_callback_t _obj, svn_revnum_t new_revision, char const * date, char const * author, \n"
+ " void * baton) -> svn_error_t\n"
""},
- { (char *)"svn_cancel_invoke_func", _wrap_svn_cancel_invoke_func, METH_VARARGS, (char *)"svn_cancel_invoke_func(svn_cancel_func_t _obj, void cancel_baton) -> svn_error_t"},
+ { (char *)"svn_cancel_invoke_func", _wrap_svn_cancel_invoke_func, METH_VARARGS, (char *)"svn_cancel_invoke_func(svn_cancel_func_t _obj, void * cancel_baton) -> svn_error_t"},
{ (char *)"svn_location_invoke_segment_receiver", _wrap_svn_location_invoke_segment_receiver, METH_VARARGS, (char *)"\n"
- "svn_location_invoke_segment_receiver(svn_location_segment_receiver_t _obj, svn_location_segment_t segment, \n"
- " void baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_location_invoke_segment_receiver(svn_location_segment_receiver_t _obj, svn_location_segment_t segment, void * baton, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_log_entry_receiver_t_swigregister", svn_log_entry_receiver_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_log_message_receiver_t_swigregister", svn_log_message_receiver_t_swigregister, METH_VARARGS, NULL},
@@ -28702,95 +33186,133 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_commit_callback_t_swigregister", svn_commit_callback_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_cancel_func_t_swigregister", svn_cancel_func_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_location_segment_receiver_t_swigregister", svn_location_segment_receiver_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_pool_create", _wrap_svn_pool_create, METH_VARARGS, (char *)"svn_pool_create(apr_pool_t parent_pool, apr_allocator_t allocator) -> apr_pool_t"},
- { (char *)"svn_ver_compatible", _wrap_svn_ver_compatible, METH_VARARGS, (char *)"svn_ver_compatible(svn_version_t my_version, svn_version_t lib_version) -> svn_boolean_t"},
- { (char *)"svn_ver_equal", _wrap_svn_ver_equal, METH_VARARGS, (char *)"svn_ver_equal(svn_version_t my_version, svn_version_t lib_version) -> svn_boolean_t"},
- { (char *)"svn_version_checklist_t_label_set", _wrap_svn_version_checklist_t_label_set, METH_VARARGS, (char *)"svn_version_checklist_t_label_set(svn_version_checklist_t self, char label)"},
- { (char *)"svn_version_checklist_t_label_get", _wrap_svn_version_checklist_t_label_get, METH_VARARGS, (char *)"svn_version_checklist_t_label_get(svn_version_checklist_t self) -> char"},
- { (char *)"svn_version_checklist_t_version_query_set", _wrap_svn_version_checklist_t_version_query_set, METH_VARARGS, (char *)"svn_version_checklist_t_version_query_set(svn_version_checklist_t self, svn_version_t version_query)"},
- { (char *)"svn_version_checklist_t_version_query_get", _wrap_svn_version_checklist_t_version_query_get, METH_VARARGS, (char *)"svn_version_checklist_t_version_query_get(svn_version_checklist_t self) -> svn_version_t"},
+ { (char *)"svn_pool_create", _wrap_svn_pool_create, METH_VARARGS, (char *)"svn_pool_create(apr_pool_t parent_pool, apr_allocator_t * allocator) -> apr_pool_t"},
+ { (char *)"svn_pool_create_allocator", _wrap_svn_pool_create_allocator, METH_VARARGS, (char *)"svn_pool_create_allocator(svn_boolean_t thread_safe) -> apr_allocator_t *"},
+ { (char *)"svn_ver_compatible", _wrap_svn_ver_compatible, METH_VARARGS, (char *)"svn_ver_compatible(svn_version_t const * my_version, svn_version_t const * lib_version) -> svn_boolean_t"},
+ { (char *)"svn_ver_equal", _wrap_svn_ver_equal, METH_VARARGS, (char *)"svn_ver_equal(svn_version_t const * my_version, svn_version_t const * lib_version) -> svn_boolean_t"},
+ { (char *)"svn_version_checklist_t_label_set", _wrap_svn_version_checklist_t_label_set, METH_VARARGS, (char *)"svn_version_checklist_t_label_set(svn_version_checklist_t self, char const * label)"},
+ { (char *)"svn_version_checklist_t_label_get", _wrap_svn_version_checklist_t_label_get, METH_VARARGS, (char *)"svn_version_checklist_t_label_get(svn_version_checklist_t self) -> char const *"},
+ { (char *)"svn_version_checklist_t_version_query_set", _wrap_svn_version_checklist_t_version_query_set, METH_VARARGS, (char *)"svn_version_checklist_t_version_query_set(svn_version_checklist_t self, svn_version_t const *(*)(void) version_query)"},
+ { (char *)"svn_version_checklist_t_version_query_get", _wrap_svn_version_checklist_t_version_query_get, METH_VARARGS, (char *)"svn_version_checklist_t_version_query_get(svn_version_checklist_t self) -> svn_version_t const *(*)(void)"},
{ (char *)"new_svn_version_checklist_t", _wrap_new_svn_version_checklist_t, METH_VARARGS, (char *)"new_svn_version_checklist_t() -> svn_version_checklist_t"},
{ (char *)"delete_svn_version_checklist_t", _wrap_delete_svn_version_checklist_t, METH_VARARGS, (char *)"delete_svn_version_checklist_t(svn_version_checklist_t self)"},
{ (char *)"svn_version_checklist_t_swigregister", svn_version_checklist_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_ver_check_list", _wrap_svn_ver_check_list, METH_VARARGS, (char *)"svn_ver_check_list(svn_version_t my_version, svn_version_checklist_t checklist) -> svn_error_t"},
- { (char *)"svn_subr_version", _wrap_svn_subr_version, METH_VARARGS, (char *)"svn_subr_version() -> svn_version_t"},
- { (char *)"svn_version_checklist_invoke_version_query", _wrap_svn_version_checklist_invoke_version_query, METH_VARARGS, (char *)"svn_version_checklist_invoke_version_query(svn_version_checklist_t _obj) -> svn_version_t"},
- { (char *)"svn_version_invoke_func", _wrap_svn_version_invoke_func, METH_VARARGS, (char *)"svn_version_invoke_func(svn_version_func_t _obj) -> svn_version_t"},
+ { (char *)"svn_ver_check_list", _wrap_svn_ver_check_list, METH_VARARGS, (char *)"svn_ver_check_list(svn_version_t const * my_version, svn_version_checklist_t checklist) -> svn_error_t"},
+ { (char *)"svn_subr_version", _wrap_svn_subr_version, METH_VARARGS, (char *)"svn_subr_version() -> svn_version_t const *"},
+ { (char *)"svn_version_extended", _wrap_svn_version_extended, METH_VARARGS, (char *)"svn_version_extended(svn_boolean_t verbose, apr_pool_t pool) -> svn_version_extended_t const *"},
+ { (char *)"svn_version_ext_build_date", _wrap_svn_version_ext_build_date, METH_VARARGS, (char *)"svn_version_ext_build_date(svn_version_extended_t const * ext_info) -> char const *"},
+ { (char *)"svn_version_ext_build_time", _wrap_svn_version_ext_build_time, METH_VARARGS, (char *)"svn_version_ext_build_time(svn_version_extended_t const * ext_info) -> char const *"},
+ { (char *)"svn_version_ext_build_host", _wrap_svn_version_ext_build_host, METH_VARARGS, (char *)"svn_version_ext_build_host(svn_version_extended_t const * ext_info) -> char const *"},
+ { (char *)"svn_version_ext_copyright", _wrap_svn_version_ext_copyright, METH_VARARGS, (char *)"svn_version_ext_copyright(svn_version_extended_t const * ext_info) -> char const *"},
+ { (char *)"svn_version_ext_runtime_host", _wrap_svn_version_ext_runtime_host, METH_VARARGS, (char *)"svn_version_ext_runtime_host(svn_version_extended_t const * ext_info) -> char const *"},
+ { (char *)"svn_version_ext_runtime_osname", _wrap_svn_version_ext_runtime_osname, METH_VARARGS, (char *)"svn_version_ext_runtime_osname(svn_version_extended_t const * ext_info) -> char const *"},
+ { (char *)"svn_version_ext_linked_lib_t_name_set", _wrap_svn_version_ext_linked_lib_t_name_set, METH_VARARGS, (char *)"svn_version_ext_linked_lib_t_name_set(svn_version_ext_linked_lib_t self, char const * name)"},
+ { (char *)"svn_version_ext_linked_lib_t_name_get", _wrap_svn_version_ext_linked_lib_t_name_get, METH_VARARGS, (char *)"svn_version_ext_linked_lib_t_name_get(svn_version_ext_linked_lib_t self) -> char const *"},
+ { (char *)"svn_version_ext_linked_lib_t_compiled_version_set", _wrap_svn_version_ext_linked_lib_t_compiled_version_set, METH_VARARGS, (char *)"svn_version_ext_linked_lib_t_compiled_version_set(svn_version_ext_linked_lib_t self, char const * compiled_version)"},
+ { (char *)"svn_version_ext_linked_lib_t_compiled_version_get", _wrap_svn_version_ext_linked_lib_t_compiled_version_get, METH_VARARGS, (char *)"svn_version_ext_linked_lib_t_compiled_version_get(svn_version_ext_linked_lib_t self) -> char const *"},
+ { (char *)"svn_version_ext_linked_lib_t_runtime_version_set", _wrap_svn_version_ext_linked_lib_t_runtime_version_set, METH_VARARGS, (char *)"svn_version_ext_linked_lib_t_runtime_version_set(svn_version_ext_linked_lib_t self, char const * runtime_version)"},
+ { (char *)"svn_version_ext_linked_lib_t_runtime_version_get", _wrap_svn_version_ext_linked_lib_t_runtime_version_get, METH_VARARGS, (char *)"svn_version_ext_linked_lib_t_runtime_version_get(svn_version_ext_linked_lib_t self) -> char const *"},
+ { (char *)"new_svn_version_ext_linked_lib_t", _wrap_new_svn_version_ext_linked_lib_t, METH_VARARGS, (char *)"new_svn_version_ext_linked_lib_t() -> svn_version_ext_linked_lib_t"},
+ { (char *)"delete_svn_version_ext_linked_lib_t", _wrap_delete_svn_version_ext_linked_lib_t, METH_VARARGS, (char *)"delete_svn_version_ext_linked_lib_t(svn_version_ext_linked_lib_t self)"},
+ { (char *)"svn_version_ext_linked_lib_t_swigregister", svn_version_ext_linked_lib_t_swigregister, METH_VARARGS, NULL},
+ { (char *)"svn_version_ext_linked_libs", _wrap_svn_version_ext_linked_libs, METH_VARARGS, (char *)"svn_version_ext_linked_libs(svn_version_extended_t const * ext_info) -> apr_array_header_t"},
+ { (char *)"svn_version_ext_loaded_lib_t_name_set", _wrap_svn_version_ext_loaded_lib_t_name_set, METH_VARARGS, (char *)"svn_version_ext_loaded_lib_t_name_set(svn_version_ext_loaded_lib_t self, char const * name)"},
+ { (char *)"svn_version_ext_loaded_lib_t_name_get", _wrap_svn_version_ext_loaded_lib_t_name_get, METH_VARARGS, (char *)"svn_version_ext_loaded_lib_t_name_get(svn_version_ext_loaded_lib_t self) -> char const *"},
+ { (char *)"svn_version_ext_loaded_lib_t_version_set", _wrap_svn_version_ext_loaded_lib_t_version_set, METH_VARARGS, (char *)"svn_version_ext_loaded_lib_t_version_set(svn_version_ext_loaded_lib_t self, char const * version)"},
+ { (char *)"svn_version_ext_loaded_lib_t_version_get", _wrap_svn_version_ext_loaded_lib_t_version_get, METH_VARARGS, (char *)"svn_version_ext_loaded_lib_t_version_get(svn_version_ext_loaded_lib_t self) -> char const *"},
+ { (char *)"new_svn_version_ext_loaded_lib_t", _wrap_new_svn_version_ext_loaded_lib_t, METH_VARARGS, (char *)"new_svn_version_ext_loaded_lib_t() -> svn_version_ext_loaded_lib_t"},
+ { (char *)"delete_svn_version_ext_loaded_lib_t", _wrap_delete_svn_version_ext_loaded_lib_t, METH_VARARGS, (char *)"delete_svn_version_ext_loaded_lib_t(svn_version_ext_loaded_lib_t self)"},
+ { (char *)"svn_version_ext_loaded_lib_t_swigregister", svn_version_ext_loaded_lib_t_swigregister, METH_VARARGS, NULL},
+ { (char *)"svn_version_ext_loaded_libs", _wrap_svn_version_ext_loaded_libs, METH_VARARGS, (char *)"svn_version_ext_loaded_libs(svn_version_extended_t const * ext_info) -> apr_array_header_t"},
+ { (char *)"svn_version_extended_t_swigregister", svn_version_extended_t_swigregister, METH_VARARGS, NULL},
+ { (char *)"svn_version_checklist_invoke_version_query", _wrap_svn_version_checklist_invoke_version_query, METH_VARARGS, (char *)"svn_version_checklist_invoke_version_query(svn_version_checklist_t _obj) -> svn_version_t const *"},
+ { (char *)"svn_version_invoke_func", _wrap_svn_version_invoke_func, METH_VARARGS, (char *)"svn_version_invoke_func(svn_version_func_t _obj) -> svn_version_t const *"},
{ (char *)"svn_version_func_t_swigregister", svn_version_func_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_prop_dup", _wrap_svn_prop_dup, METH_VARARGS, (char *)"svn_prop_dup( prop, apr_pool_t pool)"},
+ { (char *)"svn_prop_dup", _wrap_svn_prop_dup, METH_VARARGS, (char *)"svn_prop_dup(svn_prop_t const * prop, apr_pool_t pool) -> svn_prop_t *"},
{ (char *)"svn_prop_array_dup", _wrap_svn_prop_array_dup, METH_VARARGS, (char *)"svn_prop_array_dup(apr_array_header_t array, apr_pool_t pool) -> apr_array_header_t"},
+ { (char *)"svn_prop_inherited_item_t_path_or_url_set", _wrap_svn_prop_inherited_item_t_path_or_url_set, METH_VARARGS, (char *)"svn_prop_inherited_item_t_path_or_url_set(svn_prop_inherited_item_t self, char const * path_or_url)"},
+ { (char *)"svn_prop_inherited_item_t_path_or_url_get", _wrap_svn_prop_inherited_item_t_path_or_url_get, METH_VARARGS, (char *)"svn_prop_inherited_item_t_path_or_url_get(svn_prop_inherited_item_t self) -> char const *"},
+ { (char *)"svn_prop_inherited_item_t_prop_hash_set", _wrap_svn_prop_inherited_item_t_prop_hash_set, METH_VARARGS, (char *)"svn_prop_inherited_item_t_prop_hash_set(svn_prop_inherited_item_t self, apr_hash_t prop_hash)"},
+ { (char *)"svn_prop_inherited_item_t_prop_hash_get", _wrap_svn_prop_inherited_item_t_prop_hash_get, METH_VARARGS, (char *)"svn_prop_inherited_item_t_prop_hash_get(svn_prop_inherited_item_t self) -> apr_hash_t"},
+ { (char *)"new_svn_prop_inherited_item_t", _wrap_new_svn_prop_inherited_item_t, METH_VARARGS, (char *)"new_svn_prop_inherited_item_t() -> svn_prop_inherited_item_t"},
+ { (char *)"delete_svn_prop_inherited_item_t", _wrap_delete_svn_prop_inherited_item_t, METH_VARARGS, (char *)"delete_svn_prop_inherited_item_t(svn_prop_inherited_item_t self)"},
+ { (char *)"svn_prop_inherited_item_t_swigregister", svn_prop_inherited_item_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_prop_hash_to_array", _wrap_svn_prop_hash_to_array, METH_VARARGS, (char *)"svn_prop_hash_to_array(apr_hash_t hash, apr_pool_t pool) -> apr_array_header_t"},
{ (char *)"svn_prop_array_to_hash", _wrap_svn_prop_array_to_hash, METH_VARARGS, (char *)"svn_prop_array_to_hash(apr_array_header_t properties, apr_pool_t result) -> apr_hash_t"},
{ (char *)"svn_prop_hash_dup", _wrap_svn_prop_hash_dup, METH_VARARGS, (char *)"svn_prop_hash_dup(apr_hash_t hash, apr_pool_t pool) -> apr_hash_t"},
- { (char *)"svn_prop_get_value", _wrap_svn_prop_get_value, METH_VARARGS, (char *)"svn_prop_get_value(apr_hash_t properties, char prop_name) -> char"},
- { (char *)"svn_property_kind", _wrap_svn_property_kind, METH_VARARGS, (char *)"svn_property_kind(char prop_name)"},
- { (char *)"svn_prop_is_svn_prop", _wrap_svn_prop_is_svn_prop, METH_VARARGS, (char *)"svn_prop_is_svn_prop(char prop_name) -> svn_boolean_t"},
+ { (char *)"svn_prop_get_value", _wrap_svn_prop_get_value, METH_VARARGS, (char *)"svn_prop_get_value(apr_hash_t properties, char const * prop_name) -> char const *"},
+ { (char *)"svn_property_kind2", _wrap_svn_property_kind2, METH_VARARGS, (char *)"svn_property_kind2(char const * prop_name) -> svn_prop_kind_t"},
+ { (char *)"svn_property_kind", _wrap_svn_property_kind, METH_VARARGS, (char *)"svn_property_kind(char const * prop_name) -> svn_prop_kind_t"},
+ { (char *)"svn_prop_is_svn_prop", _wrap_svn_prop_is_svn_prop, METH_VARARGS, (char *)"svn_prop_is_svn_prop(char const * prop_name) -> svn_boolean_t"},
{ (char *)"svn_prop_has_svn_prop", _wrap_svn_prop_has_svn_prop, METH_VARARGS, (char *)"svn_prop_has_svn_prop(apr_hash_t props, apr_pool_t pool) -> svn_boolean_t"},
- { (char *)"svn_prop_is_boolean", _wrap_svn_prop_is_boolean, METH_VARARGS, (char *)"svn_prop_is_boolean(char prop_name) -> svn_boolean_t"},
- { (char *)"svn_prop_needs_translation", _wrap_svn_prop_needs_translation, METH_VARARGS, (char *)"svn_prop_needs_translation(char prop_name) -> svn_boolean_t"},
+ { (char *)"svn_prop_is_boolean", _wrap_svn_prop_is_boolean, METH_VARARGS, (char *)"svn_prop_is_boolean(char const * prop_name) -> svn_boolean_t"},
+ { (char *)"svn_prop_is_known_svn_rev_prop", _wrap_svn_prop_is_known_svn_rev_prop, METH_VARARGS, (char *)"svn_prop_is_known_svn_rev_prop(char const * prop_name) -> svn_boolean_t"},
+ { (char *)"svn_prop_is_known_svn_node_prop", _wrap_svn_prop_is_known_svn_node_prop, METH_VARARGS, (char *)"svn_prop_is_known_svn_node_prop(char const * prop_name) -> svn_boolean_t"},
+ { (char *)"svn_prop_is_known_svn_file_prop", _wrap_svn_prop_is_known_svn_file_prop, METH_VARARGS, (char *)"svn_prop_is_known_svn_file_prop(char const * prop_name) -> svn_boolean_t"},
+ { (char *)"svn_prop_is_known_svn_dir_prop", _wrap_svn_prop_is_known_svn_dir_prop, METH_VARARGS, (char *)"svn_prop_is_known_svn_dir_prop(char const * prop_name) -> svn_boolean_t"},
+ { (char *)"svn_prop_needs_translation", _wrap_svn_prop_needs_translation, METH_VARARGS, (char *)"svn_prop_needs_translation(char const * prop_name) -> svn_boolean_t"},
{ (char *)"svn_categorize_props", _wrap_svn_categorize_props, METH_VARARGS, (char *)"svn_categorize_props(apr_array_header_t proplist, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_prop_diffs", _wrap_svn_prop_diffs, METH_VARARGS, (char *)"svn_prop_diffs(apr_hash_t target_props, apr_hash_t source_props, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_prop_name_is_valid", _wrap_svn_prop_name_is_valid, METH_VARARGS, (char *)"svn_prop_name_is_valid(char prop_name) -> svn_boolean_t"},
- { (char *)"svn_opt_subcommand_desc2_t_name_set", _wrap_svn_opt_subcommand_desc2_t_name_set, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_name_set(svn_opt_subcommand_desc2_t self, char name)"},
- { (char *)"svn_opt_subcommand_desc2_t_name_get", _wrap_svn_opt_subcommand_desc2_t_name_get, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_name_get(svn_opt_subcommand_desc2_t self) -> char"},
- { (char *)"svn_opt_subcommand_desc2_t_cmd_func_set", _wrap_svn_opt_subcommand_desc2_t_cmd_func_set, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_cmd_func_set(svn_opt_subcommand_desc2_t self, svn_opt_subcommand_t cmd_func)"},
- { (char *)"svn_opt_subcommand_desc2_t_cmd_func_get", _wrap_svn_opt_subcommand_desc2_t_cmd_func_get, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_cmd_func_get(svn_opt_subcommand_desc2_t self) -> svn_opt_subcommand_t"},
- { (char *)"svn_opt_subcommand_desc2_t_aliases_set", _wrap_svn_opt_subcommand_desc2_t_aliases_set, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_aliases_set(svn_opt_subcommand_desc2_t self, char aliases)"},
- { (char *)"svn_opt_subcommand_desc2_t_aliases_get", _wrap_svn_opt_subcommand_desc2_t_aliases_get, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_aliases_get(svn_opt_subcommand_desc2_t self) -> char"},
- { (char *)"svn_opt_subcommand_desc2_t_help_set", _wrap_svn_opt_subcommand_desc2_t_help_set, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_help_set(svn_opt_subcommand_desc2_t self, char help)"},
- { (char *)"svn_opt_subcommand_desc2_t_help_get", _wrap_svn_opt_subcommand_desc2_t_help_get, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_help_get(svn_opt_subcommand_desc2_t self) -> char"},
- { (char *)"svn_opt_subcommand_desc2_t_valid_options_set", _wrap_svn_opt_subcommand_desc2_t_valid_options_set, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_valid_options_set(svn_opt_subcommand_desc2_t self, int valid_options)"},
- { (char *)"svn_opt_subcommand_desc2_t_valid_options_get", _wrap_svn_opt_subcommand_desc2_t_valid_options_get, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_valid_options_get(svn_opt_subcommand_desc2_t self) -> int"},
+ { (char *)"svn_prop_name_is_valid", _wrap_svn_prop_name_is_valid, METH_VARARGS, (char *)"svn_prop_name_is_valid(char const * prop_name) -> svn_boolean_t"},
+ { (char *)"svn_opt_subcommand_desc2_t_name_set", _wrap_svn_opt_subcommand_desc2_t_name_set, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_name_set(svn_opt_subcommand_desc2_t self, char const * name)"},
+ { (char *)"svn_opt_subcommand_desc2_t_name_get", _wrap_svn_opt_subcommand_desc2_t_name_get, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_name_get(svn_opt_subcommand_desc2_t self) -> char const *"},
+ { (char *)"svn_opt_subcommand_desc2_t_cmd_func_set", _wrap_svn_opt_subcommand_desc2_t_cmd_func_set, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_cmd_func_set(svn_opt_subcommand_desc2_t self, svn_opt_subcommand_t * cmd_func)"},
+ { (char *)"svn_opt_subcommand_desc2_t_cmd_func_get", _wrap_svn_opt_subcommand_desc2_t_cmd_func_get, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_cmd_func_get(svn_opt_subcommand_desc2_t self) -> svn_opt_subcommand_t *"},
+ { (char *)"svn_opt_subcommand_desc2_t_aliases_set", _wrap_svn_opt_subcommand_desc2_t_aliases_set, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_aliases_set(svn_opt_subcommand_desc2_t self, char const *[3] aliases)"},
+ { (char *)"svn_opt_subcommand_desc2_t_aliases_get", _wrap_svn_opt_subcommand_desc2_t_aliases_get, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_aliases_get(svn_opt_subcommand_desc2_t self) -> char const *[3]"},
+ { (char *)"svn_opt_subcommand_desc2_t_help_set", _wrap_svn_opt_subcommand_desc2_t_help_set, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_help_set(svn_opt_subcommand_desc2_t self, char const * help)"},
+ { (char *)"svn_opt_subcommand_desc2_t_help_get", _wrap_svn_opt_subcommand_desc2_t_help_get, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_help_get(svn_opt_subcommand_desc2_t self) -> char const *"},
+ { (char *)"svn_opt_subcommand_desc2_t_valid_options_set", _wrap_svn_opt_subcommand_desc2_t_valid_options_set, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_valid_options_set(svn_opt_subcommand_desc2_t self, int [50] valid_options)"},
+ { (char *)"svn_opt_subcommand_desc2_t_valid_options_get", _wrap_svn_opt_subcommand_desc2_t_valid_options_get, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_valid_options_get(svn_opt_subcommand_desc2_t self) -> int [50]"},
{ (char *)"svn_opt_subcommand_desc2_t_desc_overrides_get", _wrap_svn_opt_subcommand_desc2_t_desc_overrides_get, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_desc_overrides_get(svn_opt_subcommand_desc2_t self) -> svn_opt_subcommand_desc2_t_desc_overrides"},
{ (char *)"new_svn_opt_subcommand_desc2_t", _wrap_new_svn_opt_subcommand_desc2_t, METH_VARARGS, (char *)"new_svn_opt_subcommand_desc2_t() -> svn_opt_subcommand_desc2_t"},
{ (char *)"delete_svn_opt_subcommand_desc2_t", _wrap_delete_svn_opt_subcommand_desc2_t, METH_VARARGS, (char *)"delete_svn_opt_subcommand_desc2_t(svn_opt_subcommand_desc2_t self)"},
{ (char *)"svn_opt_subcommand_desc2_t_swigregister", svn_opt_subcommand_desc2_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_opt_subcommand_desc2_t_desc_overrides_optch_set", _wrap_svn_opt_subcommand_desc2_t_desc_overrides_optch_set, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_desc_overrides_optch_set(svn_opt_subcommand_desc2_t_desc_overrides self, int optch)"},
{ (char *)"svn_opt_subcommand_desc2_t_desc_overrides_optch_get", _wrap_svn_opt_subcommand_desc2_t_desc_overrides_optch_get, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_desc_overrides_optch_get(svn_opt_subcommand_desc2_t_desc_overrides self) -> int"},
- { (char *)"svn_opt_subcommand_desc2_t_desc_overrides_desc_set", _wrap_svn_opt_subcommand_desc2_t_desc_overrides_desc_set, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_desc_overrides_desc_set(svn_opt_subcommand_desc2_t_desc_overrides self, char desc)"},
- { (char *)"svn_opt_subcommand_desc2_t_desc_overrides_desc_get", _wrap_svn_opt_subcommand_desc2_t_desc_overrides_desc_get, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_desc_overrides_desc_get(svn_opt_subcommand_desc2_t_desc_overrides self) -> char"},
+ { (char *)"svn_opt_subcommand_desc2_t_desc_overrides_desc_set", _wrap_svn_opt_subcommand_desc2_t_desc_overrides_desc_set, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_desc_overrides_desc_set(svn_opt_subcommand_desc2_t_desc_overrides self, char const * desc)"},
+ { (char *)"svn_opt_subcommand_desc2_t_desc_overrides_desc_get", _wrap_svn_opt_subcommand_desc2_t_desc_overrides_desc_get, METH_VARARGS, (char *)"svn_opt_subcommand_desc2_t_desc_overrides_desc_get(svn_opt_subcommand_desc2_t_desc_overrides self) -> char const *"},
{ (char *)"new_svn_opt_subcommand_desc2_t_desc_overrides", _wrap_new_svn_opt_subcommand_desc2_t_desc_overrides, METH_VARARGS, (char *)"new_svn_opt_subcommand_desc2_t_desc_overrides() -> svn_opt_subcommand_desc2_t_desc_overrides"},
{ (char *)"delete_svn_opt_subcommand_desc2_t_desc_overrides", _wrap_delete_svn_opt_subcommand_desc2_t_desc_overrides, METH_VARARGS, (char *)"delete_svn_opt_subcommand_desc2_t_desc_overrides(svn_opt_subcommand_desc2_t_desc_overrides self)"},
{ (char *)"svn_opt_subcommand_desc2_t_desc_overrides_swigregister", svn_opt_subcommand_desc2_t_desc_overrides_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_opt_subcommand_desc_t_name_set", _wrap_svn_opt_subcommand_desc_t_name_set, METH_VARARGS, (char *)"svn_opt_subcommand_desc_t_name_set(svn_opt_subcommand_desc_t self, char name)"},
- { (char *)"svn_opt_subcommand_desc_t_name_get", _wrap_svn_opt_subcommand_desc_t_name_get, METH_VARARGS, (char *)"svn_opt_subcommand_desc_t_name_get(svn_opt_subcommand_desc_t self) -> char"},
- { (char *)"svn_opt_subcommand_desc_t_cmd_func_set", _wrap_svn_opt_subcommand_desc_t_cmd_func_set, METH_VARARGS, (char *)"svn_opt_subcommand_desc_t_cmd_func_set(svn_opt_subcommand_desc_t self, svn_opt_subcommand_t cmd_func)"},
- { (char *)"svn_opt_subcommand_desc_t_cmd_func_get", _wrap_svn_opt_subcommand_desc_t_cmd_func_get, METH_VARARGS, (char *)"svn_opt_subcommand_desc_t_cmd_func_get(svn_opt_subcommand_desc_t self) -> svn_opt_subcommand_t"},
- { (char *)"svn_opt_subcommand_desc_t_aliases_set", _wrap_svn_opt_subcommand_desc_t_aliases_set, METH_VARARGS, (char *)"svn_opt_subcommand_desc_t_aliases_set(svn_opt_subcommand_desc_t self, char aliases)"},
- { (char *)"svn_opt_subcommand_desc_t_aliases_get", _wrap_svn_opt_subcommand_desc_t_aliases_get, METH_VARARGS, (char *)"svn_opt_subcommand_desc_t_aliases_get(svn_opt_subcommand_desc_t self) -> char"},
- { (char *)"svn_opt_subcommand_desc_t_help_set", _wrap_svn_opt_subcommand_desc_t_help_set, METH_VARARGS, (char *)"svn_opt_subcommand_desc_t_help_set(svn_opt_subcommand_desc_t self, char help)"},
- { (char *)"svn_opt_subcommand_desc_t_help_get", _wrap_svn_opt_subcommand_desc_t_help_get, METH_VARARGS, (char *)"svn_opt_subcommand_desc_t_help_get(svn_opt_subcommand_desc_t self) -> char"},
- { (char *)"svn_opt_subcommand_desc_t_valid_options_set", _wrap_svn_opt_subcommand_desc_t_valid_options_set, METH_VARARGS, (char *)"svn_opt_subcommand_desc_t_valid_options_set(svn_opt_subcommand_desc_t self, int valid_options)"},
- { (char *)"svn_opt_subcommand_desc_t_valid_options_get", _wrap_svn_opt_subcommand_desc_t_valid_options_get, METH_VARARGS, (char *)"svn_opt_subcommand_desc_t_valid_options_get(svn_opt_subcommand_desc_t self) -> int"},
+ { (char *)"svn_opt_subcommand_desc_t_name_set", _wrap_svn_opt_subcommand_desc_t_name_set, METH_VARARGS, (char *)"svn_opt_subcommand_desc_t_name_set(svn_opt_subcommand_desc_t self, char const * name)"},
+ { (char *)"svn_opt_subcommand_desc_t_name_get", _wrap_svn_opt_subcommand_desc_t_name_get, METH_VARARGS, (char *)"svn_opt_subcommand_desc_t_name_get(svn_opt_subcommand_desc_t self) -> char const *"},
+ { (char *)"svn_opt_subcommand_desc_t_cmd_func_set", _wrap_svn_opt_subcommand_desc_t_cmd_func_set, METH_VARARGS, (char *)"svn_opt_subcommand_desc_t_cmd_func_set(svn_opt_subcommand_desc_t self, svn_opt_subcommand_t * cmd_func)"},
+ { (char *)"svn_opt_subcommand_desc_t_cmd_func_get", _wrap_svn_opt_subcommand_desc_t_cmd_func_get, METH_VARARGS, (char *)"svn_opt_subcommand_desc_t_cmd_func_get(svn_opt_subcommand_desc_t self) -> svn_opt_subcommand_t *"},
+ { (char *)"svn_opt_subcommand_desc_t_aliases_set", _wrap_svn_opt_subcommand_desc_t_aliases_set, METH_VARARGS, (char *)"svn_opt_subcommand_desc_t_aliases_set(svn_opt_subcommand_desc_t self, char const *[3] aliases)"},
+ { (char *)"svn_opt_subcommand_desc_t_aliases_get", _wrap_svn_opt_subcommand_desc_t_aliases_get, METH_VARARGS, (char *)"svn_opt_subcommand_desc_t_aliases_get(svn_opt_subcommand_desc_t self) -> char const *[3]"},
+ { (char *)"svn_opt_subcommand_desc_t_help_set", _wrap_svn_opt_subcommand_desc_t_help_set, METH_VARARGS, (char *)"svn_opt_subcommand_desc_t_help_set(svn_opt_subcommand_desc_t self, char const * help)"},
+ { (char *)"svn_opt_subcommand_desc_t_help_get", _wrap_svn_opt_subcommand_desc_t_help_get, METH_VARARGS, (char *)"svn_opt_subcommand_desc_t_help_get(svn_opt_subcommand_desc_t self) -> char const *"},
+ { (char *)"svn_opt_subcommand_desc_t_valid_options_set", _wrap_svn_opt_subcommand_desc_t_valid_options_set, METH_VARARGS, (char *)"svn_opt_subcommand_desc_t_valid_options_set(svn_opt_subcommand_desc_t self, int [50] valid_options)"},
+ { (char *)"svn_opt_subcommand_desc_t_valid_options_get", _wrap_svn_opt_subcommand_desc_t_valid_options_get, METH_VARARGS, (char *)"svn_opt_subcommand_desc_t_valid_options_get(svn_opt_subcommand_desc_t self) -> int [50]"},
{ (char *)"new_svn_opt_subcommand_desc_t", _wrap_new_svn_opt_subcommand_desc_t, METH_VARARGS, (char *)"new_svn_opt_subcommand_desc_t() -> svn_opt_subcommand_desc_t"},
{ (char *)"delete_svn_opt_subcommand_desc_t", _wrap_delete_svn_opt_subcommand_desc_t, METH_VARARGS, (char *)"delete_svn_opt_subcommand_desc_t(svn_opt_subcommand_desc_t self)"},
{ (char *)"svn_opt_subcommand_desc_t_swigregister", svn_opt_subcommand_desc_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_opt_get_canonical_subcommand2", _wrap_svn_opt_get_canonical_subcommand2, METH_VARARGS, (char *)"svn_opt_get_canonical_subcommand2(svn_opt_subcommand_desc2_t table, char cmd_name) -> svn_opt_subcommand_desc2_t"},
- { (char *)"svn_opt_get_canonical_subcommand", _wrap_svn_opt_get_canonical_subcommand, METH_VARARGS, (char *)"svn_opt_get_canonical_subcommand(svn_opt_subcommand_desc_t table, char cmd_name) -> svn_opt_subcommand_desc_t"},
+ { (char *)"svn_opt_get_canonical_subcommand2", _wrap_svn_opt_get_canonical_subcommand2, METH_VARARGS, (char *)"svn_opt_get_canonical_subcommand2(svn_opt_subcommand_desc2_t table, char const * cmd_name) -> svn_opt_subcommand_desc2_t"},
+ { (char *)"svn_opt_get_canonical_subcommand", _wrap_svn_opt_get_canonical_subcommand, METH_VARARGS, (char *)"svn_opt_get_canonical_subcommand(svn_opt_subcommand_desc_t table, char const * cmd_name) -> svn_opt_subcommand_desc_t"},
{ (char *)"svn_opt_get_option_from_code2", _wrap_svn_opt_get_option_from_code2, METH_VARARGS, (char *)"\n"
- "svn_opt_get_option_from_code2(int code, apr_getopt_option_t option_table, svn_opt_subcommand_desc2_t command, \n"
- " apr_pool_t pool) -> apr_getopt_option_t\n"
+ "svn_opt_get_option_from_code2(int code, apr_getopt_option_t const * option_table, svn_opt_subcommand_desc2_t command, \n"
+ " apr_pool_t pool) -> apr_getopt_option_t const *\n"
""},
- { (char *)"svn_opt_get_option_from_code", _wrap_svn_opt_get_option_from_code, METH_VARARGS, (char *)"svn_opt_get_option_from_code(int code, apr_getopt_option_t option_table) -> apr_getopt_option_t"},
+ { (char *)"svn_opt_get_option_from_code", _wrap_svn_opt_get_option_from_code, METH_VARARGS, (char *)"svn_opt_get_option_from_code(int code, apr_getopt_option_t const * option_table) -> apr_getopt_option_t const *"},
{ (char *)"svn_opt_subcommand_takes_option3", _wrap_svn_opt_subcommand_takes_option3, METH_VARARGS, (char *)"svn_opt_subcommand_takes_option3(svn_opt_subcommand_desc2_t command, int option_code) -> svn_boolean_t"},
{ (char *)"svn_opt_subcommand_takes_option2", _wrap_svn_opt_subcommand_takes_option2, METH_VARARGS, (char *)"svn_opt_subcommand_takes_option2(svn_opt_subcommand_desc2_t command, int option_code) -> svn_boolean_t"},
{ (char *)"svn_opt_subcommand_takes_option", _wrap_svn_opt_subcommand_takes_option, METH_VARARGS, (char *)"svn_opt_subcommand_takes_option(svn_opt_subcommand_desc_t command, int option_code) -> svn_boolean_t"},
{ (char *)"svn_opt_print_generic_help2", _wrap_svn_opt_print_generic_help2, METH_VARARGS, (char *)"\n"
- "svn_opt_print_generic_help2(char header, svn_opt_subcommand_desc2_t cmd_table, \n"
- " apr_getopt_option_t opt_table, char footer, apr_pool_t pool, \n"
- " FILE stream)\n"
+ "svn_opt_print_generic_help2(char const * header, svn_opt_subcommand_desc2_t cmd_table, apr_getopt_option_t const * opt_table, \n"
+ " char const * footer, apr_pool_t pool, FILE * stream)\n"
""},
- { (char *)"svn_opt_format_option", _wrap_svn_opt_format_option, METH_VARARGS, (char *)"svn_opt_format_option(apr_getopt_option_t opt, svn_boolean_t doc, apr_pool_t pool)"},
+ { (char *)"svn_opt_format_option", _wrap_svn_opt_format_option, METH_VARARGS, (char *)"svn_opt_format_option(apr_getopt_option_t const * opt, svn_boolean_t doc, apr_pool_t pool)"},
{ (char *)"svn_opt_subcommand_help3", _wrap_svn_opt_subcommand_help3, METH_VARARGS, (char *)"\n"
- "svn_opt_subcommand_help3(char subcommand, svn_opt_subcommand_desc2_t table, \n"
- " apr_getopt_option_t options_table, apr_pool_t pool)\n"
+ "svn_opt_subcommand_help3(char const * subcommand, svn_opt_subcommand_desc2_t table, apr_getopt_option_t const * options_table, \n"
+ " apr_pool_t pool)\n"
""},
{ (char *)"svn_opt_subcommand_help2", _wrap_svn_opt_subcommand_help2, METH_VARARGS, (char *)"\n"
- "svn_opt_subcommand_help2(char subcommand, svn_opt_subcommand_desc2_t table, \n"
- " apr_getopt_option_t options_table, apr_pool_t pool)\n"
+ "svn_opt_subcommand_help2(char const * subcommand, svn_opt_subcommand_desc2_t table, apr_getopt_option_t const * options_table, \n"
+ " apr_pool_t pool)\n"
""},
{ (char *)"svn_opt_subcommand_help", _wrap_svn_opt_subcommand_help, METH_VARARGS, (char *)"\n"
- "svn_opt_subcommand_help(char subcommand, svn_opt_subcommand_desc_t table, apr_getopt_option_t options_table, \n"
+ "svn_opt_subcommand_help(char const * subcommand, svn_opt_subcommand_desc_t table, apr_getopt_option_t const * options_table, \n"
" apr_pool_t pool)\n"
""},
{ (char *)"svn_opt_revision_value_t_number_set", _wrap_svn_opt_revision_value_t_number_set, METH_VARARGS, (char *)"svn_opt_revision_value_t_number_set(svn_opt_revision_value_t self, svn_revnum_t number)"},
@@ -28815,109 +33337,111 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"delete_svn_opt_revision_range_t", _wrap_delete_svn_opt_revision_range_t, METH_VARARGS, (char *)"delete_svn_opt_revision_range_t(svn_opt_revision_range_t self)"},
{ (char *)"svn_opt_revision_range_t_swigregister", svn_opt_revision_range_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_opt_parse_revision", _wrap_svn_opt_parse_revision, METH_VARARGS, (char *)"\n"
- "svn_opt_parse_revision(svn_opt_revision_t start_revision, svn_opt_revision_t end_revision, \n"
- " char arg, apr_pool_t pool) -> int\n"
+ "svn_opt_parse_revision(svn_opt_revision_t start_revision, svn_opt_revision_t end_revision, char const * arg, \n"
+ " apr_pool_t pool) -> int\n"
""},
- { (char *)"svn_opt_parse_revision_to_range", _wrap_svn_opt_parse_revision_to_range, METH_VARARGS, (char *)"svn_opt_parse_revision_to_range(apr_array_header_t opt_ranges, char arg, apr_pool_t pool) -> int"},
+ { (char *)"svn_opt_parse_revision_to_range", _wrap_svn_opt_parse_revision_to_range, METH_VARARGS, (char *)"svn_opt_parse_revision_to_range(apr_array_header_t opt_ranges, char const * arg, apr_pool_t pool) -> int"},
{ (char *)"svn_opt_resolve_revisions", _wrap_svn_opt_resolve_revisions, METH_VARARGS, (char *)"\n"
- "svn_opt_resolve_revisions(svn_opt_revision_t peg_rev, svn_opt_revision_t op_rev, \n"
- " svn_boolean_t is_url, svn_boolean_t notice_local_mods, \n"
+ "svn_opt_resolve_revisions(svn_opt_revision_t peg_rev, svn_opt_revision_t op_rev, svn_boolean_t is_url, svn_boolean_t notice_local_mods, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_opt_args_to_target_array3", _wrap_svn_opt_args_to_target_array3, METH_VARARGS, (char *)"\n"
- "svn_opt_args_to_target_array3(apr_getopt_t os, apr_array_header_t known_targets, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_opt_args_to_target_array2", _wrap_svn_opt_args_to_target_array2, METH_VARARGS, (char *)"\n"
- "svn_opt_args_to_target_array2(apr_getopt_t os, apr_array_header_t known_targets, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_opt_parse_revprop", _wrap_svn_opt_parse_revprop, METH_VARARGS, (char *)"svn_opt_parse_revprop(char revprop_spec, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_opt_args_to_target_array3", _wrap_svn_opt_args_to_target_array3, METH_VARARGS, (char *)"svn_opt_args_to_target_array3(apr_getopt_t * os, apr_array_header_t known_targets, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_opt_args_to_target_array2", _wrap_svn_opt_args_to_target_array2, METH_VARARGS, (char *)"svn_opt_args_to_target_array2(apr_getopt_t * os, apr_array_header_t known_targets, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_opt_parse_revprop", _wrap_svn_opt_parse_revprop, METH_VARARGS, (char *)"svn_opt_parse_revprop(char const * revprop_spec, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_opt_push_implicit_dot_target", _wrap_svn_opt_push_implicit_dot_target, METH_VARARGS, (char *)"svn_opt_push_implicit_dot_target(apr_array_header_t targets, apr_pool_t pool)"},
- { (char *)"svn_opt_parse_num_args", _wrap_svn_opt_parse_num_args, METH_VARARGS, (char *)"svn_opt_parse_num_args(apr_getopt_t os, int num_args, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_opt_parse_all_args", _wrap_svn_opt_parse_all_args, METH_VARARGS, (char *)"svn_opt_parse_all_args(apr_getopt_t os, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_opt_parse_path", _wrap_svn_opt_parse_path, METH_VARARGS, (char *)"svn_opt_parse_path(svn_opt_revision_t rev, char path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_opt_parse_num_args", _wrap_svn_opt_parse_num_args, METH_VARARGS, (char *)"svn_opt_parse_num_args(apr_getopt_t * os, int num_args, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_opt_parse_all_args", _wrap_svn_opt_parse_all_args, METH_VARARGS, (char *)"svn_opt_parse_all_args(apr_getopt_t * os, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_opt_parse_path", _wrap_svn_opt_parse_path, METH_VARARGS, (char *)"svn_opt_parse_path(svn_opt_revision_t rev, char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_opt_print_help4", _wrap_svn_opt_print_help4, METH_VARARGS, (char *)"\n"
+ "svn_opt_print_help4(apr_getopt_t * os, char const * pgm_name, svn_boolean_t print_version, svn_boolean_t quiet, \n"
+ " svn_boolean_t verbose, char const * version_footer, char const * header, \n"
+ " svn_opt_subcommand_desc2_t cmd_table, apr_getopt_option_t const * option_table, \n"
+ " char const * footer, apr_pool_t pool) -> svn_error_t\n"
+ ""},
{ (char *)"svn_opt_print_help3", _wrap_svn_opt_print_help3, METH_VARARGS, (char *)"\n"
- "svn_opt_print_help3(apr_getopt_t os, char pgm_name, svn_boolean_t print_version, \n"
- " svn_boolean_t quiet, char version_footer, \n"
- " char header, svn_opt_subcommand_desc2_t cmd_table, \n"
- " apr_getopt_option_t option_table, \n"
- " char footer, apr_pool_t pool) -> svn_error_t\n"
+ "svn_opt_print_help3(apr_getopt_t * os, char const * pgm_name, svn_boolean_t print_version, svn_boolean_t quiet, \n"
+ " char const * version_footer, char const * header, svn_opt_subcommand_desc2_t cmd_table, \n"
+ " apr_getopt_option_t const * option_table, char const * footer, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_opt_print_help2", _wrap_svn_opt_print_help2, METH_VARARGS, (char *)"\n"
- "svn_opt_print_help2(apr_getopt_t os, char pgm_name, svn_boolean_t print_version, \n"
- " svn_boolean_t quiet, char version_footer, \n"
- " char header, svn_opt_subcommand_desc2_t cmd_table, \n"
- " apr_getopt_option_t option_table, \n"
- " char footer, apr_pool_t pool) -> svn_error_t\n"
+ "svn_opt_print_help2(apr_getopt_t * os, char const * pgm_name, svn_boolean_t print_version, svn_boolean_t quiet, \n"
+ " char const * version_footer, char const * header, svn_opt_subcommand_desc2_t cmd_table, \n"
+ " apr_getopt_option_t const * option_table, char const * footer, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_opt_print_help", _wrap_svn_opt_print_help, METH_VARARGS, (char *)"\n"
- "svn_opt_print_help(apr_getopt_t os, char pgm_name, svn_boolean_t print_version, \n"
- " svn_boolean_t quiet, char version_footer, \n"
- " char header, svn_opt_subcommand_desc_t cmd_table, \n"
- " apr_getopt_option_t option_table, \n"
- " char footer, apr_pool_t pool) -> svn_error_t\n"
+ "svn_opt_print_help(apr_getopt_t * os, char const * pgm_name, svn_boolean_t print_version, svn_boolean_t quiet, \n"
+ " char const * version_footer, char const * header, svn_opt_subcommand_desc_t cmd_table, \n"
+ " apr_getopt_option_t const * option_table, char const * footer, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_auth_provider_t_cred_kind_set", _wrap_svn_auth_provider_t_cred_kind_set, METH_VARARGS, (char *)"svn_auth_provider_t_cred_kind_set(svn_auth_provider_t self, char cred_kind)"},
- { (char *)"svn_auth_provider_t_cred_kind_get", _wrap_svn_auth_provider_t_cred_kind_get, METH_VARARGS, (char *)"svn_auth_provider_t_cred_kind_get(svn_auth_provider_t self) -> char"},
- { (char *)"svn_auth_provider_t_first_credentials_set", _wrap_svn_auth_provider_t_first_credentials_set, METH_VARARGS, (char *)"svn_auth_provider_t_first_credentials_set(svn_auth_provider_t self, svn_error_t first_credentials)"},
- { (char *)"svn_auth_provider_t_first_credentials_get", _wrap_svn_auth_provider_t_first_credentials_get, METH_VARARGS, (char *)"svn_auth_provider_t_first_credentials_get(svn_auth_provider_t self) -> svn_error_t"},
- { (char *)"svn_auth_provider_t_next_credentials_set", _wrap_svn_auth_provider_t_next_credentials_set, METH_VARARGS, (char *)"svn_auth_provider_t_next_credentials_set(svn_auth_provider_t self, svn_error_t next_credentials)"},
- { (char *)"svn_auth_provider_t_next_credentials_get", _wrap_svn_auth_provider_t_next_credentials_get, METH_VARARGS, (char *)"svn_auth_provider_t_next_credentials_get(svn_auth_provider_t self) -> svn_error_t"},
- { (char *)"svn_auth_provider_t_save_credentials_set", _wrap_svn_auth_provider_t_save_credentials_set, METH_VARARGS, (char *)"svn_auth_provider_t_save_credentials_set(svn_auth_provider_t self, svn_error_t save_credentials)"},
- { (char *)"svn_auth_provider_t_save_credentials_get", _wrap_svn_auth_provider_t_save_credentials_get, METH_VARARGS, (char *)"svn_auth_provider_t_save_credentials_get(svn_auth_provider_t self) -> svn_error_t"},
+ { (char *)"svn_cmdline_init", _wrap_svn_cmdline_init, METH_VARARGS, (char *)"svn_cmdline_init(char const * progname, FILE * error_stream) -> int"},
+ { (char *)"svn_cmdline_create_auth_baton", _wrap_svn_cmdline_create_auth_baton, METH_VARARGS, (char *)"\n"
+ "svn_cmdline_create_auth_baton(svn_boolean_t non_interactive, char const * username, char const * password, char const * config_dir, \n"
+ " svn_boolean_t no_auth_cache, svn_boolean_t trust_server_cert, \n"
+ " svn_config_t * cfg, svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
+ ""},
+ { (char *)"svn_auth_provider_t_cred_kind_set", _wrap_svn_auth_provider_t_cred_kind_set, METH_VARARGS, (char *)"svn_auth_provider_t_cred_kind_set(svn_auth_provider_t self, char const * cred_kind)"},
+ { (char *)"svn_auth_provider_t_cred_kind_get", _wrap_svn_auth_provider_t_cred_kind_get, METH_VARARGS, (char *)"svn_auth_provider_t_cred_kind_get(svn_auth_provider_t self) -> char const *"},
+ { (char *)"svn_auth_provider_t_first_credentials_set", _wrap_svn_auth_provider_t_first_credentials_set, METH_VARARGS, (char *)"svn_auth_provider_t_first_credentials_set(svn_auth_provider_t self, svn_error_t *(*)(void **,void **,void *,apr_hash_t *,char const *,apr_pool_t *) first_credentials)"},
+ { (char *)"svn_auth_provider_t_first_credentials_get", _wrap_svn_auth_provider_t_first_credentials_get, METH_VARARGS, (char *)"svn_auth_provider_t_first_credentials_get(svn_auth_provider_t self) -> svn_error_t *(*)(void **,void **,void *,apr_hash_t *,char const *,apr_pool_t *)"},
+ { (char *)"svn_auth_provider_t_next_credentials_set", _wrap_svn_auth_provider_t_next_credentials_set, METH_VARARGS, (char *)"svn_auth_provider_t_next_credentials_set(svn_auth_provider_t self, svn_error_t *(*)(void **,void *,void *,apr_hash_t *,char const *,apr_pool_t *) next_credentials)"},
+ { (char *)"svn_auth_provider_t_next_credentials_get", _wrap_svn_auth_provider_t_next_credentials_get, METH_VARARGS, (char *)"svn_auth_provider_t_next_credentials_get(svn_auth_provider_t self) -> svn_error_t *(*)(void **,void *,void *,apr_hash_t *,char const *,apr_pool_t *)"},
+ { (char *)"svn_auth_provider_t_save_credentials_set", _wrap_svn_auth_provider_t_save_credentials_set, METH_VARARGS, (char *)"svn_auth_provider_t_save_credentials_set(svn_auth_provider_t self, svn_error_t *(*)(svn_boolean_t *,void *,void *,apr_hash_t *,char const *,apr_pool_t *) save_credentials)"},
+ { (char *)"svn_auth_provider_t_save_credentials_get", _wrap_svn_auth_provider_t_save_credentials_get, METH_VARARGS, (char *)"svn_auth_provider_t_save_credentials_get(svn_auth_provider_t self) -> svn_error_t *(*)(svn_boolean_t *,void *,void *,apr_hash_t *,char const *,apr_pool_t *)"},
{ (char *)"new_svn_auth_provider_t", _wrap_new_svn_auth_provider_t, METH_VARARGS, (char *)"new_svn_auth_provider_t() -> svn_auth_provider_t"},
{ (char *)"delete_svn_auth_provider_t", _wrap_delete_svn_auth_provider_t, METH_VARARGS, (char *)"delete_svn_auth_provider_t(svn_auth_provider_t self)"},
{ (char *)"svn_auth_provider_t_swigregister", svn_auth_provider_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_auth_provider_object_t_vtable_set", _wrap_svn_auth_provider_object_t_vtable_set, METH_VARARGS, (char *)"svn_auth_provider_object_t_vtable_set(svn_auth_provider_object_t self, svn_auth_provider_t vtable)"},
{ (char *)"svn_auth_provider_object_t_vtable_get", _wrap_svn_auth_provider_object_t_vtable_get, METH_VARARGS, (char *)"svn_auth_provider_object_t_vtable_get(svn_auth_provider_object_t self) -> svn_auth_provider_t"},
- { (char *)"svn_auth_provider_object_t_provider_baton_set", _wrap_svn_auth_provider_object_t_provider_baton_set, METH_VARARGS, (char *)"svn_auth_provider_object_t_provider_baton_set(svn_auth_provider_object_t self, void provider_baton)"},
- { (char *)"svn_auth_provider_object_t_provider_baton_get", _wrap_svn_auth_provider_object_t_provider_baton_get, METH_VARARGS, (char *)"svn_auth_provider_object_t_provider_baton_get(svn_auth_provider_object_t self) -> void"},
+ { (char *)"svn_auth_provider_object_t_provider_baton_set", _wrap_svn_auth_provider_object_t_provider_baton_set, METH_VARARGS, (char *)"svn_auth_provider_object_t_provider_baton_set(svn_auth_provider_object_t self, void * provider_baton)"},
+ { (char *)"svn_auth_provider_object_t_provider_baton_get", _wrap_svn_auth_provider_object_t_provider_baton_get, METH_VARARGS, (char *)"svn_auth_provider_object_t_provider_baton_get(svn_auth_provider_object_t self) -> void *"},
{ (char *)"new_svn_auth_provider_object_t", _wrap_new_svn_auth_provider_object_t, METH_VARARGS, (char *)"new_svn_auth_provider_object_t() -> svn_auth_provider_object_t"},
{ (char *)"delete_svn_auth_provider_object_t", _wrap_delete_svn_auth_provider_object_t, METH_VARARGS, (char *)"delete_svn_auth_provider_object_t(svn_auth_provider_object_t self)"},
{ (char *)"svn_auth_provider_object_t_swigregister", svn_auth_provider_object_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_auth_cred_simple_t_username_set", _wrap_svn_auth_cred_simple_t_username_set, METH_VARARGS, (char *)"svn_auth_cred_simple_t_username_set(svn_auth_cred_simple_t self, char username)"},
- { (char *)"svn_auth_cred_simple_t_username_get", _wrap_svn_auth_cred_simple_t_username_get, METH_VARARGS, (char *)"svn_auth_cred_simple_t_username_get(svn_auth_cred_simple_t self) -> char"},
- { (char *)"svn_auth_cred_simple_t_password_set", _wrap_svn_auth_cred_simple_t_password_set, METH_VARARGS, (char *)"svn_auth_cred_simple_t_password_set(svn_auth_cred_simple_t self, char password)"},
- { (char *)"svn_auth_cred_simple_t_password_get", _wrap_svn_auth_cred_simple_t_password_get, METH_VARARGS, (char *)"svn_auth_cred_simple_t_password_get(svn_auth_cred_simple_t self) -> char"},
+ { (char *)"svn_auth_cred_simple_t_username_set", _wrap_svn_auth_cred_simple_t_username_set, METH_VARARGS, (char *)"svn_auth_cred_simple_t_username_set(svn_auth_cred_simple_t self, char const * username)"},
+ { (char *)"svn_auth_cred_simple_t_username_get", _wrap_svn_auth_cred_simple_t_username_get, METH_VARARGS, (char *)"svn_auth_cred_simple_t_username_get(svn_auth_cred_simple_t self) -> char const *"},
+ { (char *)"svn_auth_cred_simple_t_password_set", _wrap_svn_auth_cred_simple_t_password_set, METH_VARARGS, (char *)"svn_auth_cred_simple_t_password_set(svn_auth_cred_simple_t self, char const * password)"},
+ { (char *)"svn_auth_cred_simple_t_password_get", _wrap_svn_auth_cred_simple_t_password_get, METH_VARARGS, (char *)"svn_auth_cred_simple_t_password_get(svn_auth_cred_simple_t self) -> char const *"},
{ (char *)"svn_auth_cred_simple_t_may_save_set", _wrap_svn_auth_cred_simple_t_may_save_set, METH_VARARGS, (char *)"svn_auth_cred_simple_t_may_save_set(svn_auth_cred_simple_t self, svn_boolean_t may_save)"},
{ (char *)"svn_auth_cred_simple_t_may_save_get", _wrap_svn_auth_cred_simple_t_may_save_get, METH_VARARGS, (char *)"svn_auth_cred_simple_t_may_save_get(svn_auth_cred_simple_t self) -> svn_boolean_t"},
{ (char *)"new_svn_auth_cred_simple_t", _wrap_new_svn_auth_cred_simple_t, METH_VARARGS, (char *)"new_svn_auth_cred_simple_t() -> svn_auth_cred_simple_t"},
{ (char *)"delete_svn_auth_cred_simple_t", _wrap_delete_svn_auth_cred_simple_t, METH_VARARGS, (char *)"delete_svn_auth_cred_simple_t(svn_auth_cred_simple_t self)"},
{ (char *)"svn_auth_cred_simple_t_swigregister", svn_auth_cred_simple_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_auth_cred_username_t_username_set", _wrap_svn_auth_cred_username_t_username_set, METH_VARARGS, (char *)"svn_auth_cred_username_t_username_set(svn_auth_cred_username_t self, char username)"},
- { (char *)"svn_auth_cred_username_t_username_get", _wrap_svn_auth_cred_username_t_username_get, METH_VARARGS, (char *)"svn_auth_cred_username_t_username_get(svn_auth_cred_username_t self) -> char"},
+ { (char *)"svn_auth_cred_username_t_username_set", _wrap_svn_auth_cred_username_t_username_set, METH_VARARGS, (char *)"svn_auth_cred_username_t_username_set(svn_auth_cred_username_t self, char const * username)"},
+ { (char *)"svn_auth_cred_username_t_username_get", _wrap_svn_auth_cred_username_t_username_get, METH_VARARGS, (char *)"svn_auth_cred_username_t_username_get(svn_auth_cred_username_t self) -> char const *"},
{ (char *)"svn_auth_cred_username_t_may_save_set", _wrap_svn_auth_cred_username_t_may_save_set, METH_VARARGS, (char *)"svn_auth_cred_username_t_may_save_set(svn_auth_cred_username_t self, svn_boolean_t may_save)"},
{ (char *)"svn_auth_cred_username_t_may_save_get", _wrap_svn_auth_cred_username_t_may_save_get, METH_VARARGS, (char *)"svn_auth_cred_username_t_may_save_get(svn_auth_cred_username_t self) -> svn_boolean_t"},
{ (char *)"new_svn_auth_cred_username_t", _wrap_new_svn_auth_cred_username_t, METH_VARARGS, (char *)"new_svn_auth_cred_username_t() -> svn_auth_cred_username_t"},
{ (char *)"delete_svn_auth_cred_username_t", _wrap_delete_svn_auth_cred_username_t, METH_VARARGS, (char *)"delete_svn_auth_cred_username_t(svn_auth_cred_username_t self)"},
{ (char *)"svn_auth_cred_username_t_swigregister", svn_auth_cred_username_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_auth_cred_ssl_client_cert_t_cert_file_set", _wrap_svn_auth_cred_ssl_client_cert_t_cert_file_set, METH_VARARGS, (char *)"svn_auth_cred_ssl_client_cert_t_cert_file_set(svn_auth_cred_ssl_client_cert_t self, char cert_file)"},
- { (char *)"svn_auth_cred_ssl_client_cert_t_cert_file_get", _wrap_svn_auth_cred_ssl_client_cert_t_cert_file_get, METH_VARARGS, (char *)"svn_auth_cred_ssl_client_cert_t_cert_file_get(svn_auth_cred_ssl_client_cert_t self) -> char"},
+ { (char *)"svn_auth_cred_ssl_client_cert_t_cert_file_set", _wrap_svn_auth_cred_ssl_client_cert_t_cert_file_set, METH_VARARGS, (char *)"svn_auth_cred_ssl_client_cert_t_cert_file_set(svn_auth_cred_ssl_client_cert_t self, char const * cert_file)"},
+ { (char *)"svn_auth_cred_ssl_client_cert_t_cert_file_get", _wrap_svn_auth_cred_ssl_client_cert_t_cert_file_get, METH_VARARGS, (char *)"svn_auth_cred_ssl_client_cert_t_cert_file_get(svn_auth_cred_ssl_client_cert_t self) -> char const *"},
{ (char *)"svn_auth_cred_ssl_client_cert_t_may_save_set", _wrap_svn_auth_cred_ssl_client_cert_t_may_save_set, METH_VARARGS, (char *)"svn_auth_cred_ssl_client_cert_t_may_save_set(svn_auth_cred_ssl_client_cert_t self, svn_boolean_t may_save)"},
{ (char *)"svn_auth_cred_ssl_client_cert_t_may_save_get", _wrap_svn_auth_cred_ssl_client_cert_t_may_save_get, METH_VARARGS, (char *)"svn_auth_cred_ssl_client_cert_t_may_save_get(svn_auth_cred_ssl_client_cert_t self) -> svn_boolean_t"},
{ (char *)"new_svn_auth_cred_ssl_client_cert_t", _wrap_new_svn_auth_cred_ssl_client_cert_t, METH_VARARGS, (char *)"new_svn_auth_cred_ssl_client_cert_t() -> svn_auth_cred_ssl_client_cert_t"},
{ (char *)"delete_svn_auth_cred_ssl_client_cert_t", _wrap_delete_svn_auth_cred_ssl_client_cert_t, METH_VARARGS, (char *)"delete_svn_auth_cred_ssl_client_cert_t(svn_auth_cred_ssl_client_cert_t self)"},
{ (char *)"svn_auth_cred_ssl_client_cert_t_swigregister", svn_auth_cred_ssl_client_cert_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_auth_cred_ssl_client_cert_pw_t_password_set", _wrap_svn_auth_cred_ssl_client_cert_pw_t_password_set, METH_VARARGS, (char *)"svn_auth_cred_ssl_client_cert_pw_t_password_set(svn_auth_cred_ssl_client_cert_pw_t self, char password)"},
- { (char *)"svn_auth_cred_ssl_client_cert_pw_t_password_get", _wrap_svn_auth_cred_ssl_client_cert_pw_t_password_get, METH_VARARGS, (char *)"svn_auth_cred_ssl_client_cert_pw_t_password_get(svn_auth_cred_ssl_client_cert_pw_t self) -> char"},
+ { (char *)"svn_auth_cred_ssl_client_cert_pw_t_password_set", _wrap_svn_auth_cred_ssl_client_cert_pw_t_password_set, METH_VARARGS, (char *)"svn_auth_cred_ssl_client_cert_pw_t_password_set(svn_auth_cred_ssl_client_cert_pw_t self, char const * password)"},
+ { (char *)"svn_auth_cred_ssl_client_cert_pw_t_password_get", _wrap_svn_auth_cred_ssl_client_cert_pw_t_password_get, METH_VARARGS, (char *)"svn_auth_cred_ssl_client_cert_pw_t_password_get(svn_auth_cred_ssl_client_cert_pw_t self) -> char const *"},
{ (char *)"svn_auth_cred_ssl_client_cert_pw_t_may_save_set", _wrap_svn_auth_cred_ssl_client_cert_pw_t_may_save_set, METH_VARARGS, (char *)"svn_auth_cred_ssl_client_cert_pw_t_may_save_set(svn_auth_cred_ssl_client_cert_pw_t self, svn_boolean_t may_save)"},
{ (char *)"svn_auth_cred_ssl_client_cert_pw_t_may_save_get", _wrap_svn_auth_cred_ssl_client_cert_pw_t_may_save_get, METH_VARARGS, (char *)"svn_auth_cred_ssl_client_cert_pw_t_may_save_get(svn_auth_cred_ssl_client_cert_pw_t self) -> svn_boolean_t"},
{ (char *)"new_svn_auth_cred_ssl_client_cert_pw_t", _wrap_new_svn_auth_cred_ssl_client_cert_pw_t, METH_VARARGS, (char *)"new_svn_auth_cred_ssl_client_cert_pw_t() -> svn_auth_cred_ssl_client_cert_pw_t"},
{ (char *)"delete_svn_auth_cred_ssl_client_cert_pw_t", _wrap_delete_svn_auth_cred_ssl_client_cert_pw_t, METH_VARARGS, (char *)"delete_svn_auth_cred_ssl_client_cert_pw_t(svn_auth_cred_ssl_client_cert_pw_t self)"},
{ (char *)"svn_auth_cred_ssl_client_cert_pw_t_swigregister", svn_auth_cred_ssl_client_cert_pw_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_auth_ssl_server_cert_info_t_hostname_set", _wrap_svn_auth_ssl_server_cert_info_t_hostname_set, METH_VARARGS, (char *)"svn_auth_ssl_server_cert_info_t_hostname_set(svn_auth_ssl_server_cert_info_t self, char hostname)"},
- { (char *)"svn_auth_ssl_server_cert_info_t_hostname_get", _wrap_svn_auth_ssl_server_cert_info_t_hostname_get, METH_VARARGS, (char *)"svn_auth_ssl_server_cert_info_t_hostname_get(svn_auth_ssl_server_cert_info_t self) -> char"},
- { (char *)"svn_auth_ssl_server_cert_info_t_fingerprint_set", _wrap_svn_auth_ssl_server_cert_info_t_fingerprint_set, METH_VARARGS, (char *)"svn_auth_ssl_server_cert_info_t_fingerprint_set(svn_auth_ssl_server_cert_info_t self, char fingerprint)"},
- { (char *)"svn_auth_ssl_server_cert_info_t_fingerprint_get", _wrap_svn_auth_ssl_server_cert_info_t_fingerprint_get, METH_VARARGS, (char *)"svn_auth_ssl_server_cert_info_t_fingerprint_get(svn_auth_ssl_server_cert_info_t self) -> char"},
- { (char *)"svn_auth_ssl_server_cert_info_t_valid_from_set", _wrap_svn_auth_ssl_server_cert_info_t_valid_from_set, METH_VARARGS, (char *)"svn_auth_ssl_server_cert_info_t_valid_from_set(svn_auth_ssl_server_cert_info_t self, char valid_from)"},
- { (char *)"svn_auth_ssl_server_cert_info_t_valid_from_get", _wrap_svn_auth_ssl_server_cert_info_t_valid_from_get, METH_VARARGS, (char *)"svn_auth_ssl_server_cert_info_t_valid_from_get(svn_auth_ssl_server_cert_info_t self) -> char"},
- { (char *)"svn_auth_ssl_server_cert_info_t_valid_until_set", _wrap_svn_auth_ssl_server_cert_info_t_valid_until_set, METH_VARARGS, (char *)"svn_auth_ssl_server_cert_info_t_valid_until_set(svn_auth_ssl_server_cert_info_t self, char valid_until)"},
- { (char *)"svn_auth_ssl_server_cert_info_t_valid_until_get", _wrap_svn_auth_ssl_server_cert_info_t_valid_until_get, METH_VARARGS, (char *)"svn_auth_ssl_server_cert_info_t_valid_until_get(svn_auth_ssl_server_cert_info_t self) -> char"},
- { (char *)"svn_auth_ssl_server_cert_info_t_issuer_dname_set", _wrap_svn_auth_ssl_server_cert_info_t_issuer_dname_set, METH_VARARGS, (char *)"svn_auth_ssl_server_cert_info_t_issuer_dname_set(svn_auth_ssl_server_cert_info_t self, char issuer_dname)"},
- { (char *)"svn_auth_ssl_server_cert_info_t_issuer_dname_get", _wrap_svn_auth_ssl_server_cert_info_t_issuer_dname_get, METH_VARARGS, (char *)"svn_auth_ssl_server_cert_info_t_issuer_dname_get(svn_auth_ssl_server_cert_info_t self) -> char"},
- { (char *)"svn_auth_ssl_server_cert_info_t_ascii_cert_set", _wrap_svn_auth_ssl_server_cert_info_t_ascii_cert_set, METH_VARARGS, (char *)"svn_auth_ssl_server_cert_info_t_ascii_cert_set(svn_auth_ssl_server_cert_info_t self, char ascii_cert)"},
- { (char *)"svn_auth_ssl_server_cert_info_t_ascii_cert_get", _wrap_svn_auth_ssl_server_cert_info_t_ascii_cert_get, METH_VARARGS, (char *)"svn_auth_ssl_server_cert_info_t_ascii_cert_get(svn_auth_ssl_server_cert_info_t self) -> char"},
+ { (char *)"svn_auth_ssl_server_cert_info_t_hostname_set", _wrap_svn_auth_ssl_server_cert_info_t_hostname_set, METH_VARARGS, (char *)"svn_auth_ssl_server_cert_info_t_hostname_set(svn_auth_ssl_server_cert_info_t self, char const * hostname)"},
+ { (char *)"svn_auth_ssl_server_cert_info_t_hostname_get", _wrap_svn_auth_ssl_server_cert_info_t_hostname_get, METH_VARARGS, (char *)"svn_auth_ssl_server_cert_info_t_hostname_get(svn_auth_ssl_server_cert_info_t self) -> char const *"},
+ { (char *)"svn_auth_ssl_server_cert_info_t_fingerprint_set", _wrap_svn_auth_ssl_server_cert_info_t_fingerprint_set, METH_VARARGS, (char *)"svn_auth_ssl_server_cert_info_t_fingerprint_set(svn_auth_ssl_server_cert_info_t self, char const * fingerprint)"},
+ { (char *)"svn_auth_ssl_server_cert_info_t_fingerprint_get", _wrap_svn_auth_ssl_server_cert_info_t_fingerprint_get, METH_VARARGS, (char *)"svn_auth_ssl_server_cert_info_t_fingerprint_get(svn_auth_ssl_server_cert_info_t self) -> char const *"},
+ { (char *)"svn_auth_ssl_server_cert_info_t_valid_from_set", _wrap_svn_auth_ssl_server_cert_info_t_valid_from_set, METH_VARARGS, (char *)"svn_auth_ssl_server_cert_info_t_valid_from_set(svn_auth_ssl_server_cert_info_t self, char const * valid_from)"},
+ { (char *)"svn_auth_ssl_server_cert_info_t_valid_from_get", _wrap_svn_auth_ssl_server_cert_info_t_valid_from_get, METH_VARARGS, (char *)"svn_auth_ssl_server_cert_info_t_valid_from_get(svn_auth_ssl_server_cert_info_t self) -> char const *"},
+ { (char *)"svn_auth_ssl_server_cert_info_t_valid_until_set", _wrap_svn_auth_ssl_server_cert_info_t_valid_until_set, METH_VARARGS, (char *)"svn_auth_ssl_server_cert_info_t_valid_until_set(svn_auth_ssl_server_cert_info_t self, char const * valid_until)"},
+ { (char *)"svn_auth_ssl_server_cert_info_t_valid_until_get", _wrap_svn_auth_ssl_server_cert_info_t_valid_until_get, METH_VARARGS, (char *)"svn_auth_ssl_server_cert_info_t_valid_until_get(svn_auth_ssl_server_cert_info_t self) -> char const *"},
+ { (char *)"svn_auth_ssl_server_cert_info_t_issuer_dname_set", _wrap_svn_auth_ssl_server_cert_info_t_issuer_dname_set, METH_VARARGS, (char *)"svn_auth_ssl_server_cert_info_t_issuer_dname_set(svn_auth_ssl_server_cert_info_t self, char const * issuer_dname)"},
+ { (char *)"svn_auth_ssl_server_cert_info_t_issuer_dname_get", _wrap_svn_auth_ssl_server_cert_info_t_issuer_dname_get, METH_VARARGS, (char *)"svn_auth_ssl_server_cert_info_t_issuer_dname_get(svn_auth_ssl_server_cert_info_t self) -> char const *"},
+ { (char *)"svn_auth_ssl_server_cert_info_t_ascii_cert_set", _wrap_svn_auth_ssl_server_cert_info_t_ascii_cert_set, METH_VARARGS, (char *)"svn_auth_ssl_server_cert_info_t_ascii_cert_set(svn_auth_ssl_server_cert_info_t self, char const * ascii_cert)"},
+ { (char *)"svn_auth_ssl_server_cert_info_t_ascii_cert_get", _wrap_svn_auth_ssl_server_cert_info_t_ascii_cert_get, METH_VARARGS, (char *)"svn_auth_ssl_server_cert_info_t_ascii_cert_get(svn_auth_ssl_server_cert_info_t self) -> char const *"},
{ (char *)"new_svn_auth_ssl_server_cert_info_t", _wrap_new_svn_auth_ssl_server_cert_info_t, METH_VARARGS, (char *)"new_svn_auth_ssl_server_cert_info_t() -> svn_auth_ssl_server_cert_info_t"},
{ (char *)"delete_svn_auth_ssl_server_cert_info_t", _wrap_delete_svn_auth_ssl_server_cert_info_t, METH_VARARGS, (char *)"delete_svn_auth_ssl_server_cert_info_t(svn_auth_ssl_server_cert_info_t self)"},
{ (char *)"svn_auth_ssl_server_cert_info_t_swigregister", svn_auth_ssl_server_cert_info_t_swigregister, METH_VARARGS, NULL},
@@ -28930,98 +33454,75 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"delete_svn_auth_cred_ssl_server_trust_t", _wrap_delete_svn_auth_cred_ssl_server_trust_t, METH_VARARGS, (char *)"delete_svn_auth_cred_ssl_server_trust_t(svn_auth_cred_ssl_server_trust_t self)"},
{ (char *)"svn_auth_cred_ssl_server_trust_t_swigregister", svn_auth_cred_ssl_server_trust_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_auth_open", _wrap_svn_auth_open, METH_VARARGS, (char *)"svn_auth_open(apr_array_header_t providers, apr_pool_t pool)"},
- { (char *)"svn_auth_set_parameter", _wrap_svn_auth_set_parameter, METH_VARARGS, (char *)"svn_auth_set_parameter(svn_auth_baton_t auth_baton, char name, void value)"},
+ { (char *)"svn_auth_set_parameter", _wrap_svn_auth_set_parameter, METH_VARARGS, (char *)"svn_auth_set_parameter(svn_auth_baton_t * auth_baton, char const * name, void const * value)"},
{ (char *)"svn_auth_first_credentials", _wrap_svn_auth_first_credentials, METH_VARARGS, (char *)"\n"
- "svn_auth_first_credentials(char cred_kind, char realmstring, svn_auth_baton_t auth_baton, \n"
+ "svn_auth_first_credentials(char const * cred_kind, char const * realmstring, svn_auth_baton_t * auth_baton, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_auth_next_credentials", _wrap_svn_auth_next_credentials, METH_VARARGS, (char *)"svn_auth_next_credentials(svn_auth_iterstate_t state, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_auth_save_credentials", _wrap_svn_auth_save_credentials, METH_VARARGS, (char *)"svn_auth_save_credentials(svn_auth_iterstate_t state, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_auth_get_simple_prompt_provider", _wrap_svn_auth_get_simple_prompt_provider, METH_VARARGS, (char *)"\n"
- "svn_auth_get_simple_prompt_provider(svn_auth_simple_prompt_func_t prompt_func, int retry_limit, \n"
- " apr_pool_t pool)\n"
- ""},
- { (char *)"svn_auth_get_username_prompt_provider", _wrap_svn_auth_get_username_prompt_provider, METH_VARARGS, (char *)"\n"
- "svn_auth_get_username_prompt_provider(svn_auth_username_prompt_func_t prompt_func, int retry_limit, \n"
- " apr_pool_t pool)\n"
- ""},
- { (char *)"svn_auth_get_simple_provider2", _wrap_svn_auth_get_simple_provider2, METH_VARARGS, (char *)"\n"
- "svn_auth_get_simple_provider2(svn_auth_plaintext_prompt_func_t plaintext_prompt_func, \n"
- " void prompt_baton, apr_pool_t pool)\n"
+ { (char *)"svn_auth_next_credentials", _wrap_svn_auth_next_credentials, METH_VARARGS, (char *)"svn_auth_next_credentials(svn_auth_iterstate_t * state, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_auth_save_credentials", _wrap_svn_auth_save_credentials, METH_VARARGS, (char *)"svn_auth_save_credentials(svn_auth_iterstate_t * state, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_auth_forget_credentials", _wrap_svn_auth_forget_credentials, METH_VARARGS, (char *)"\n"
+ "svn_auth_forget_credentials(svn_auth_baton_t * auth_baton, char const * cred_kind, char const * realmstring, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_auth_get_simple_prompt_provider", _wrap_svn_auth_get_simple_prompt_provider, METH_VARARGS, (char *)"svn_auth_get_simple_prompt_provider(svn_auth_simple_prompt_func_t prompt_func, int retry_limit, apr_pool_t pool)"},
+ { (char *)"svn_auth_get_username_prompt_provider", _wrap_svn_auth_get_username_prompt_provider, METH_VARARGS, (char *)"svn_auth_get_username_prompt_provider(svn_auth_username_prompt_func_t prompt_func, int retry_limit, apr_pool_t pool)"},
+ { (char *)"svn_auth_get_simple_provider2", _wrap_svn_auth_get_simple_provider2, METH_VARARGS, (char *)"svn_auth_get_simple_provider2(svn_auth_plaintext_prompt_func_t plaintext_prompt_func, void * prompt_baton, apr_pool_t pool)"},
{ (char *)"svn_auth_get_simple_provider", _wrap_svn_auth_get_simple_provider, METH_VARARGS, (char *)"svn_auth_get_simple_provider(apr_pool_t pool)"},
- { (char *)"svn_auth_get_platform_specific_provider", _wrap_svn_auth_get_platform_specific_provider, METH_VARARGS, (char *)"svn_auth_get_platform_specific_provider(char provider_name, char provider_type, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_auth_get_platform_specific_client_providers", _wrap_svn_auth_get_platform_specific_client_providers, METH_VARARGS, (char *)"svn_auth_get_platform_specific_client_providers(svn_config_t config, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_auth_get_platform_specific_provider", _wrap_svn_auth_get_platform_specific_provider, METH_VARARGS, (char *)"svn_auth_get_platform_specific_provider(char const * provider_name, char const * provider_type, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_auth_get_platform_specific_client_providers", _wrap_svn_auth_get_platform_specific_client_providers, METH_VARARGS, (char *)"svn_auth_get_platform_specific_client_providers(svn_config_t * config, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_auth_get_username_provider", _wrap_svn_auth_get_username_provider, METH_VARARGS, (char *)"svn_auth_get_username_provider(apr_pool_t pool)"},
{ (char *)"svn_auth_get_ssl_server_trust_file_provider", _wrap_svn_auth_get_ssl_server_trust_file_provider, METH_VARARGS, (char *)"svn_auth_get_ssl_server_trust_file_provider(apr_pool_t pool)"},
{ (char *)"svn_auth_get_ssl_client_cert_file_provider", _wrap_svn_auth_get_ssl_client_cert_file_provider, METH_VARARGS, (char *)"svn_auth_get_ssl_client_cert_file_provider(apr_pool_t pool)"},
{ (char *)"svn_auth_get_ssl_client_cert_pw_file_provider2", _wrap_svn_auth_get_ssl_client_cert_pw_file_provider2, METH_VARARGS, (char *)"\n"
- "svn_auth_get_ssl_client_cert_pw_file_provider2(svn_auth_plaintext_passphrase_prompt_func_t plaintext_passphrase_prompt_func, \n"
- " void prompt_baton, \n"
+ "svn_auth_get_ssl_client_cert_pw_file_provider2(svn_auth_plaintext_passphrase_prompt_func_t plaintext_passphrase_prompt_func, void * prompt_baton, \n"
" apr_pool_t pool)\n"
""},
{ (char *)"svn_auth_get_ssl_client_cert_pw_file_provider", _wrap_svn_auth_get_ssl_client_cert_pw_file_provider, METH_VARARGS, (char *)"svn_auth_get_ssl_client_cert_pw_file_provider(apr_pool_t pool)"},
- { (char *)"svn_auth_get_ssl_server_trust_prompt_provider", _wrap_svn_auth_get_ssl_server_trust_prompt_provider, METH_VARARGS, (char *)"\n"
- "svn_auth_get_ssl_server_trust_prompt_provider(svn_auth_ssl_server_trust_prompt_func_t prompt_func, \n"
- " apr_pool_t pool)\n"
- ""},
- { (char *)"svn_auth_get_ssl_client_cert_prompt_provider", _wrap_svn_auth_get_ssl_client_cert_prompt_provider, METH_VARARGS, (char *)"\n"
- "svn_auth_get_ssl_client_cert_prompt_provider(svn_auth_ssl_client_cert_prompt_func_t prompt_func, \n"
- " int retry_limit, apr_pool_t pool)\n"
- ""},
- { (char *)"svn_auth_get_ssl_client_cert_pw_prompt_provider", _wrap_svn_auth_get_ssl_client_cert_pw_prompt_provider, METH_VARARGS, (char *)"\n"
- "svn_auth_get_ssl_client_cert_pw_prompt_provider(svn_auth_ssl_client_cert_pw_prompt_func_t prompt_func, \n"
- " int retry_limit, apr_pool_t pool)\n"
- ""},
+ { (char *)"svn_auth_get_ssl_server_trust_prompt_provider", _wrap_svn_auth_get_ssl_server_trust_prompt_provider, METH_VARARGS, (char *)"svn_auth_get_ssl_server_trust_prompt_provider(svn_auth_ssl_server_trust_prompt_func_t prompt_func, apr_pool_t pool)"},
+ { (char *)"svn_auth_get_ssl_client_cert_prompt_provider", _wrap_svn_auth_get_ssl_client_cert_prompt_provider, METH_VARARGS, (char *)"svn_auth_get_ssl_client_cert_prompt_provider(svn_auth_ssl_client_cert_prompt_func_t prompt_func, int retry_limit, apr_pool_t pool)"},
+ { (char *)"svn_auth_get_ssl_client_cert_pw_prompt_provider", _wrap_svn_auth_get_ssl_client_cert_pw_prompt_provider, METH_VARARGS, (char *)"svn_auth_get_ssl_client_cert_pw_prompt_provider(svn_auth_ssl_client_cert_pw_prompt_func_t prompt_func, int retry_limit, apr_pool_t pool)"},
{ (char *)"svn_auth_baton_t_swigregister", svn_auth_baton_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_auth_iterstate_t_swigregister", svn_auth_iterstate_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_auth_provider_invoke_first_credentials", _wrap_svn_auth_provider_invoke_first_credentials, METH_VARARGS, (char *)"\n"
- "svn_auth_provider_invoke_first_credentials(svn_auth_provider_t _obj, void provider_baton, apr_hash_t parameters, \n"
- " char realmstring, apr_pool_t pool) -> svn_error_t\n"
+ "svn_auth_provider_invoke_first_credentials(svn_auth_provider_t _obj, void * provider_baton, apr_hash_t parameters, char const * realmstring, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_auth_provider_invoke_next_credentials", _wrap_svn_auth_provider_invoke_next_credentials, METH_VARARGS, (char *)"\n"
- "svn_auth_provider_invoke_next_credentials(svn_auth_provider_t _obj, void iter_baton, void provider_baton, \n"
- " apr_hash_t parameters, char realmstring, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_auth_provider_invoke_next_credentials(svn_auth_provider_t _obj, void * iter_baton, void * provider_baton, apr_hash_t parameters, \n"
+ " char const * realmstring, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_auth_provider_invoke_save_credentials", _wrap_svn_auth_provider_invoke_save_credentials, METH_VARARGS, (char *)"\n"
- "svn_auth_provider_invoke_save_credentials(svn_auth_provider_t _obj, void credentials, void provider_baton, \n"
- " apr_hash_t parameters, char realmstring, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_auth_provider_invoke_save_credentials(svn_auth_provider_t _obj, void * credentials, void * provider_baton, apr_hash_t parameters, \n"
+ " char const * realmstring, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_auth_invoke_simple_provider_func", _wrap_svn_auth_invoke_simple_provider_func, METH_VARARGS, (char *)"svn_auth_invoke_simple_provider_func(svn_auth_simple_provider_func_t _obj, apr_pool_t pool)"},
{ (char *)"svn_auth_invoke_ssl_client_cert_pw_provider_func", _wrap_svn_auth_invoke_ssl_client_cert_pw_provider_func, METH_VARARGS, (char *)"svn_auth_invoke_ssl_client_cert_pw_provider_func(svn_auth_ssl_client_cert_pw_provider_func_t _obj, apr_pool_t pool)"},
{ (char *)"svn_auth_invoke_simple_prompt_func", _wrap_svn_auth_invoke_simple_prompt_func, METH_VARARGS, (char *)"\n"
- "svn_auth_invoke_simple_prompt_func(svn_auth_simple_prompt_func_t _obj, void baton, char realm, \n"
- " char username, svn_boolean_t may_save, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_auth_invoke_simple_prompt_func(svn_auth_simple_prompt_func_t _obj, void * baton, char const * realm, char const * username, \n"
+ " svn_boolean_t may_save, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_auth_invoke_username_prompt_func", _wrap_svn_auth_invoke_username_prompt_func, METH_VARARGS, (char *)"\n"
- "svn_auth_invoke_username_prompt_func(svn_auth_username_prompt_func_t _obj, void baton, char realm, \n"
- " svn_boolean_t may_save, apr_pool_t pool) -> svn_error_t\n"
+ "svn_auth_invoke_username_prompt_func(svn_auth_username_prompt_func_t _obj, void * baton, char const * realm, svn_boolean_t may_save, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_auth_invoke_ssl_server_trust_prompt_func", _wrap_svn_auth_invoke_ssl_server_trust_prompt_func, METH_VARARGS, (char *)"\n"
- "svn_auth_invoke_ssl_server_trust_prompt_func(svn_auth_ssl_server_trust_prompt_func_t _obj, void baton, \n"
- " char realm, apr_uint32_t failures, svn_auth_ssl_server_cert_info_t cert_info, \n"
- " svn_boolean_t may_save, \n"
+ "svn_auth_invoke_ssl_server_trust_prompt_func(svn_auth_ssl_server_trust_prompt_func_t _obj, void * baton, char const * realm, apr_uint32_t failures, \n"
+ " svn_auth_ssl_server_cert_info_t cert_info, svn_boolean_t may_save, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_auth_invoke_ssl_client_cert_prompt_func", _wrap_svn_auth_invoke_ssl_client_cert_prompt_func, METH_VARARGS, (char *)"\n"
- "svn_auth_invoke_ssl_client_cert_prompt_func(svn_auth_ssl_client_cert_prompt_func_t _obj, void baton, \n"
- " char realm, svn_boolean_t may_save, apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_auth_invoke_ssl_client_cert_pw_prompt_func", _wrap_svn_auth_invoke_ssl_client_cert_pw_prompt_func, METH_VARARGS, (char *)"\n"
- "svn_auth_invoke_ssl_client_cert_pw_prompt_func(svn_auth_ssl_client_cert_pw_prompt_func_t _obj, void baton, \n"
- " char realm, svn_boolean_t may_save, \n"
+ "svn_auth_invoke_ssl_client_cert_prompt_func(svn_auth_ssl_client_cert_prompt_func_t _obj, void * baton, char const * realm, svn_boolean_t may_save, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_auth_invoke_plaintext_prompt_func", _wrap_svn_auth_invoke_plaintext_prompt_func, METH_VARARGS, (char *)"\n"
- "svn_auth_invoke_plaintext_prompt_func(svn_auth_plaintext_prompt_func_t _obj, char realmstring, \n"
- " void baton, apr_pool_t pool) -> svn_error_t\n"
+ { (char *)"svn_auth_invoke_ssl_client_cert_pw_prompt_func", _wrap_svn_auth_invoke_ssl_client_cert_pw_prompt_func, METH_VARARGS, (char *)"\n"
+ "svn_auth_invoke_ssl_client_cert_pw_prompt_func(svn_auth_ssl_client_cert_pw_prompt_func_t _obj, void * baton, char const * realm, \n"
+ " svn_boolean_t may_save, apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_auth_invoke_plaintext_prompt_func", _wrap_svn_auth_invoke_plaintext_prompt_func, METH_VARARGS, (char *)"svn_auth_invoke_plaintext_prompt_func(svn_auth_plaintext_prompt_func_t _obj, char const * realmstring, void * baton, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_auth_invoke_plaintext_passphrase_prompt_func", _wrap_svn_auth_invoke_plaintext_passphrase_prompt_func, METH_VARARGS, (char *)"\n"
- "svn_auth_invoke_plaintext_passphrase_prompt_func(svn_auth_plaintext_passphrase_prompt_func_t _obj, char realmstring, \n"
- " void baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_auth_invoke_plaintext_passphrase_prompt_func(svn_auth_plaintext_passphrase_prompt_func_t _obj, char const * realmstring, void * baton, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_auth_simple_provider_func_t_swigregister", svn_auth_simple_provider_func_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_auth_ssl_client_cert_pw_provider_func_t_swigregister", svn_auth_ssl_client_cert_pw_provider_func_t_swigregister, METH_VARARGS, NULL},
@@ -29033,208 +33534,197 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_auth_plaintext_prompt_func_t_swigregister", svn_auth_plaintext_prompt_func_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_auth_plaintext_passphrase_prompt_func_t_swigregister", svn_auth_plaintext_passphrase_prompt_func_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_auth_gnome_keyring_unlock_prompt_func_t_swigregister", svn_auth_gnome_keyring_unlock_prompt_func_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_config_get_config", _wrap_svn_config_get_config, METH_VARARGS, (char *)"svn_config_get_config(char config_dir, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_config_create", _wrap_svn_config_create, METH_VARARGS, (char *)"svn_config_create(svn_boolean_t section_names_case_sensitive, apr_pool_t result_pool) -> svn_error_t"},
- { (char *)"svn_config_read2", _wrap_svn_config_read2, METH_VARARGS, (char *)"\n"
- "svn_config_read2(char file, svn_boolean_t must_exist, svn_boolean_t section_names_case_sensitive, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ { (char *)"svn_config_get_config", _wrap_svn_config_get_config, METH_VARARGS, (char *)"svn_config_get_config(char const * config_dir, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_config_create2", _wrap_svn_config_create2, METH_VARARGS, (char *)"\n"
+ "svn_config_create2(svn_boolean_t section_names_case_sensitive, svn_boolean_t option_names_case_sensitive, \n"
+ " apr_pool_t result_pool) -> svn_error_t\n"
""},
- { (char *)"svn_config_read", _wrap_svn_config_read, METH_VARARGS, (char *)"svn_config_read(char file, svn_boolean_t must_exist, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_config_merge", _wrap_svn_config_merge, METH_VARARGS, (char *)"svn_config_merge(svn_config_t cfg, char file, svn_boolean_t must_exist) -> svn_error_t"},
- { (char *)"svn_config_get", _wrap_svn_config_get, METH_VARARGS, (char *)"svn_config_get(svn_config_t cfg, char section, char option, char default_value)"},
- { (char *)"svn_config_set", _wrap_svn_config_set, METH_VARARGS, (char *)"svn_config_set(svn_config_t cfg, char section, char option, char value)"},
- { (char *)"svn_config_get_bool", _wrap_svn_config_get_bool, METH_VARARGS, (char *)"svn_config_get_bool(svn_config_t cfg, char section, char option, svn_boolean_t default_value) -> svn_error_t"},
- { (char *)"svn_config_set_bool", _wrap_svn_config_set_bool, METH_VARARGS, (char *)"svn_config_set_bool(svn_config_t cfg, char section, char option, svn_boolean_t value)"},
- { (char *)"svn_config_get_yes_no_ask", _wrap_svn_config_get_yes_no_ask, METH_VARARGS, (char *)"svn_config_get_yes_no_ask(svn_config_t cfg, char section, char option, char default_value) -> svn_error_t"},
- { (char *)"svn_config_enumerate_sections", _wrap_svn_config_enumerate_sections, METH_VARARGS, (char *)"\n"
- "svn_config_enumerate_sections(svn_config_t cfg, svn_config_section_enumerator_t callback, \n"
- " void baton) -> int\n"
- ""},
- { (char *)"svn_config_enumerate_sections2", _wrap_svn_config_enumerate_sections2, METH_VARARGS, (char *)"\n"
- "svn_config_enumerate_sections2(svn_config_t cfg, svn_config_section_enumerator2_t callback, \n"
- " void baton, apr_pool_t pool) -> int\n"
+ { (char *)"svn_config_create", _wrap_svn_config_create, METH_VARARGS, (char *)"svn_config_create(svn_boolean_t section_names_case_sensitive, apr_pool_t result_pool) -> svn_error_t"},
+ { (char *)"svn_config_read3", _wrap_svn_config_read3, METH_VARARGS, (char *)"\n"
+ "svn_config_read3(char const * file, svn_boolean_t must_exist, svn_boolean_t section_names_case_sensitive, \n"
+ " svn_boolean_t option_names_case_sensitive, apr_pool_t result_pool) -> svn_error_t\n"
""},
- { (char *)"svn_config_enumerate", _wrap_svn_config_enumerate, METH_VARARGS, (char *)"\n"
- "svn_config_enumerate(svn_config_t cfg, char section, svn_config_enumerator_t callback, \n"
- " void baton) -> int\n"
+ { (char *)"svn_config_read2", _wrap_svn_config_read2, METH_VARARGS, (char *)"\n"
+ "svn_config_read2(char const * file, svn_boolean_t must_exist, svn_boolean_t section_names_case_sensitive, \n"
+ " apr_pool_t result_pool) -> svn_error_t\n"
""},
- { (char *)"svn_config_enumerate2", _wrap_svn_config_enumerate2, METH_VARARGS, (char *)"\n"
- "svn_config_enumerate2(svn_config_t cfg, char section, svn_config_enumerator2_t callback, \n"
- " void baton, apr_pool_t pool) -> int\n"
+ { (char *)"svn_config_read", _wrap_svn_config_read, METH_VARARGS, (char *)"svn_config_read(char const * file, svn_boolean_t must_exist, apr_pool_t result_pool) -> svn_error_t"},
+ { (char *)"svn_config_parse", _wrap_svn_config_parse, METH_VARARGS, (char *)"\n"
+ "svn_config_parse(svn_stream_t * stream, svn_boolean_t section_names_case_sensitive, svn_boolean_t option_names_case_sensitive, \n"
+ " apr_pool_t result_pool) -> svn_error_t\n"
""},
- { (char *)"svn_config_has_section", _wrap_svn_config_has_section, METH_VARARGS, (char *)"svn_config_has_section(svn_config_t cfg, char section) -> svn_boolean_t"},
- { (char *)"svn_config_find_group", _wrap_svn_config_find_group, METH_VARARGS, (char *)"svn_config_find_group(svn_config_t cfg, char key, char master_section, apr_pool_t pool) -> char"},
- { (char *)"svn_config_get_server_setting", _wrap_svn_config_get_server_setting, METH_VARARGS, (char *)"\n"
- "svn_config_get_server_setting(svn_config_t cfg, char server_group, char option_name, \n"
- " char default_value) -> char\n"
+ { (char *)"svn_config_merge", _wrap_svn_config_merge, METH_VARARGS, (char *)"svn_config_merge(svn_config_t * cfg, char const * file, svn_boolean_t must_exist) -> svn_error_t"},
+ { (char *)"svn_config_get", _wrap_svn_config_get, METH_VARARGS, (char *)"svn_config_get(svn_config_t * cfg, char const * section, char const * option, char const * default_value)"},
+ { (char *)"svn_config_set", _wrap_svn_config_set, METH_VARARGS, (char *)"svn_config_set(svn_config_t * cfg, char const * section, char const * option, char const * value)"},
+ { (char *)"svn_config_get_bool", _wrap_svn_config_get_bool, METH_VARARGS, (char *)"svn_config_get_bool(svn_config_t * cfg, char const * section, char const * option, svn_boolean_t default_value) -> svn_error_t"},
+ { (char *)"svn_config_set_bool", _wrap_svn_config_set_bool, METH_VARARGS, (char *)"svn_config_set_bool(svn_config_t * cfg, char const * section, char const * option, svn_boolean_t value)"},
+ { (char *)"svn_config_get_int64", _wrap_svn_config_get_int64, METH_VARARGS, (char *)"svn_config_get_int64(svn_config_t * cfg, char const * section, char const * option, apr_int64_t default_value) -> svn_error_t"},
+ { (char *)"svn_config_set_int64", _wrap_svn_config_set_int64, METH_VARARGS, (char *)"svn_config_set_int64(svn_config_t * cfg, char const * section, char const * option, apr_int64_t value)"},
+ { (char *)"svn_config_get_yes_no_ask", _wrap_svn_config_get_yes_no_ask, METH_VARARGS, (char *)"svn_config_get_yes_no_ask(svn_config_t * cfg, char const * section, char const * option, char const * default_value) -> svn_error_t"},
+ { (char *)"svn_config_get_tristate", _wrap_svn_config_get_tristate, METH_VARARGS, (char *)"\n"
+ "svn_config_get_tristate(svn_config_t * cfg, svn_tristate_t * valuep, char const * section, char const * option, \n"
+ " char const * unknown_value, svn_tristate_t default_value) -> svn_error_t\n"
""},
+ { (char *)"svn_config_enumerate_sections", _wrap_svn_config_enumerate_sections, METH_VARARGS, (char *)"svn_config_enumerate_sections(svn_config_t * cfg, svn_config_section_enumerator_t callback, void * baton) -> int"},
+ { (char *)"svn_config_enumerate_sections2", _wrap_svn_config_enumerate_sections2, METH_VARARGS, (char *)"svn_config_enumerate_sections2(svn_config_t * cfg, svn_config_section_enumerator2_t callback, apr_pool_t pool) -> int"},
+ { (char *)"svn_config_enumerate", _wrap_svn_config_enumerate, METH_VARARGS, (char *)"svn_config_enumerate(svn_config_t * cfg, char const * section, svn_config_enumerator_t callback, void * baton) -> int"},
+ { (char *)"svn_config_enumerate2", _wrap_svn_config_enumerate2, METH_VARARGS, (char *)"svn_config_enumerate2(svn_config_t * cfg, char const * section, svn_config_enumerator2_t callback, apr_pool_t pool) -> int"},
+ { (char *)"svn_config_has_section", _wrap_svn_config_has_section, METH_VARARGS, (char *)"svn_config_has_section(svn_config_t * cfg, char const * section) -> svn_boolean_t"},
+ { (char *)"svn_config_find_group", _wrap_svn_config_find_group, METH_VARARGS, (char *)"svn_config_find_group(svn_config_t * cfg, char const * key, char const * master_section, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_config_get_server_setting", _wrap_svn_config_get_server_setting, METH_VARARGS, (char *)"svn_config_get_server_setting(svn_config_t * cfg, char const * server_group, char const * option_name, char const * default_value) -> char const *"},
{ (char *)"svn_config_get_server_setting_int", _wrap_svn_config_get_server_setting_int, METH_VARARGS, (char *)"\n"
- "svn_config_get_server_setting_int(svn_config_t cfg, char server_group, char option_name, \n"
- " apr_int64_t default_value, apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_config_get_server_setting_bool", _wrap_svn_config_get_server_setting_bool, METH_VARARGS, (char *)"\n"
- "svn_config_get_server_setting_bool(svn_config_t cfg, char server_group, char option_name, \n"
- " svn_boolean_t default_value) -> svn_error_t\n"
- ""},
- { (char *)"svn_config_ensure", _wrap_svn_config_ensure, METH_VARARGS, (char *)"svn_config_ensure(char config_dir, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_config_read_auth_data", _wrap_svn_config_read_auth_data, METH_VARARGS, (char *)"\n"
- "svn_config_read_auth_data(char cred_kind, char realmstring, char config_dir, \n"
+ "svn_config_get_server_setting_int(svn_config_t * cfg, char const * server_group, char const * option_name, apr_int64_t default_value, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_config_get_server_setting_bool", _wrap_svn_config_get_server_setting_bool, METH_VARARGS, (char *)"svn_config_get_server_setting_bool(svn_config_t * cfg, char const * server_group, char const * option_name, svn_boolean_t default_value) -> svn_error_t"},
+ { (char *)"svn_config_ensure", _wrap_svn_config_ensure, METH_VARARGS, (char *)"svn_config_ensure(char const * config_dir, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_config_read_auth_data", _wrap_svn_config_read_auth_data, METH_VARARGS, (char *)"svn_config_read_auth_data(char const * cred_kind, char const * realmstring, char const * config_dir, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_config_write_auth_data", _wrap_svn_config_write_auth_data, METH_VARARGS, (char *)"\n"
- "svn_config_write_auth_data(apr_hash_t hash, char cred_kind, char realmstring, \n"
- " char config_dir, apr_pool_t pool) -> svn_error_t\n"
+ "svn_config_write_auth_data(apr_hash_t hash, char const * cred_kind, char const * realmstring, char const * config_dir, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_config_get_user_config_path", _wrap_svn_config_get_user_config_path, METH_VARARGS, (char *)"svn_config_get_user_config_path(char config_dir, char fname, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_config_walk_auth_data", _wrap_svn_config_walk_auth_data, METH_VARARGS, (char *)"svn_config_walk_auth_data(char const * config_dir, svn_config_auth_walk_func_t walk_func, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_config_get_user_config_path", _wrap_svn_config_get_user_config_path, METH_VARARGS, (char *)"svn_config_get_user_config_path(char const * config_dir, char const * fname, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_config_dup", _wrap_svn_config_dup, METH_VARARGS, (char *)"svn_config_dup(svn_config_t * src, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_config_copy_config", _wrap_svn_config_copy_config, METH_VARARGS, (char *)"svn_config_copy_config(apr_hash_t src_hash, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_config_t_swigregister", svn_config_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_config_invoke_section_enumerator", _wrap_svn_config_invoke_section_enumerator, METH_VARARGS, (char *)"svn_config_invoke_section_enumerator(svn_config_section_enumerator_t _obj, char name, void baton) -> svn_boolean_t"},
- { (char *)"svn_config_invoke_section_enumerator2", _wrap_svn_config_invoke_section_enumerator2, METH_VARARGS, (char *)"\n"
- "svn_config_invoke_section_enumerator2(svn_config_section_enumerator2_t _obj, char name, void baton, \n"
+ { (char *)"svn_config_invoke_section_enumerator", _wrap_svn_config_invoke_section_enumerator, METH_VARARGS, (char *)"svn_config_invoke_section_enumerator(svn_config_section_enumerator_t _obj, char const * name, void * baton) -> svn_boolean_t"},
+ { (char *)"svn_config_invoke_section_enumerator2", _wrap_svn_config_invoke_section_enumerator2, METH_VARARGS, (char *)"svn_config_invoke_section_enumerator2(svn_config_section_enumerator2_t _obj, char const * name, void * baton, apr_pool_t pool) -> svn_boolean_t"},
+ { (char *)"svn_config_invoke_enumerator", _wrap_svn_config_invoke_enumerator, METH_VARARGS, (char *)"svn_config_invoke_enumerator(svn_config_enumerator_t _obj, char const * name, char const * value, void * baton) -> svn_boolean_t"},
+ { (char *)"svn_config_invoke_enumerator2", _wrap_svn_config_invoke_enumerator2, METH_VARARGS, (char *)"\n"
+ "svn_config_invoke_enumerator2(svn_config_enumerator2_t _obj, char const * name, char const * value, void * baton, \n"
" apr_pool_t pool) -> svn_boolean_t\n"
""},
- { (char *)"svn_config_invoke_enumerator", _wrap_svn_config_invoke_enumerator, METH_VARARGS, (char *)"\n"
- "svn_config_invoke_enumerator(svn_config_enumerator_t _obj, char name, char value, \n"
- " void baton) -> svn_boolean_t\n"
- ""},
- { (char *)"svn_config_invoke_enumerator2", _wrap_svn_config_invoke_enumerator2, METH_VARARGS, (char *)"\n"
- "svn_config_invoke_enumerator2(svn_config_enumerator2_t _obj, char name, char value, \n"
- " void baton, apr_pool_t pool) -> svn_boolean_t\n"
+ { (char *)"svn_config_invoke_auth_walk_func", _wrap_svn_config_invoke_auth_walk_func, METH_VARARGS, (char *)"\n"
+ "svn_config_invoke_auth_walk_func(svn_config_auth_walk_func_t _obj, void * cleanup_baton, char const * cred_kind, char const * realmstring, \n"
+ " apr_hash_t hash, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_config_section_enumerator_t_swigregister", svn_config_section_enumerator_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_config_section_enumerator2_t_swigregister", svn_config_section_enumerator2_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_config_enumerator_t_swigregister", svn_config_enumerator_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_config_enumerator2_t_swigregister", svn_config_enumerator2_t_swigregister, METH_VARARGS, NULL},
+ { (char *)"svn_config_auth_walk_func_t_swigregister", svn_config_auth_walk_func_t_swigregister, METH_VARARGS, NULL},
+ { (char *)"svn_utf_initialize2", _wrap_svn_utf_initialize2, METH_VARARGS, (char *)"svn_utf_initialize2(svn_boolean_t assume_native_utf8, apr_pool_t pool)"},
{ (char *)"svn_utf_initialize", _wrap_svn_utf_initialize, METH_VARARGS, (char *)"svn_utf_initialize(apr_pool_t pool)"},
- { (char *)"svn_utf_stringbuf_to_utf8", _wrap_svn_utf_stringbuf_to_utf8, METH_VARARGS, (char *)"svn_utf_stringbuf_to_utf8(svn_stringbuf_t src, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_utf_string_to_utf8", _wrap_svn_utf_string_to_utf8, METH_VARARGS, (char *)"svn_utf_string_to_utf8(svn_string_t src, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_utf_cstring_to_utf8", _wrap_svn_utf_cstring_to_utf8, METH_VARARGS, (char *)"svn_utf_cstring_to_utf8(char src, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_utf_cstring_to_utf8_ex2", _wrap_svn_utf_cstring_to_utf8_ex2, METH_VARARGS, (char *)"svn_utf_cstring_to_utf8_ex2(char src, char frompage, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_utf_cstring_to_utf8_ex", _wrap_svn_utf_cstring_to_utf8_ex, METH_VARARGS, (char *)"svn_utf_cstring_to_utf8_ex(char src, char frompage, char convset_key, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_utf_stringbuf_from_utf8", _wrap_svn_utf_stringbuf_from_utf8, METH_VARARGS, (char *)"svn_utf_stringbuf_from_utf8(svn_stringbuf_t src, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_utf_string_from_utf8", _wrap_svn_utf_string_from_utf8, METH_VARARGS, (char *)"svn_utf_string_from_utf8(svn_string_t src, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_utf_cstring_from_utf8", _wrap_svn_utf_cstring_from_utf8, METH_VARARGS, (char *)"svn_utf_cstring_from_utf8(char src, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_utf_cstring_from_utf8_ex2", _wrap_svn_utf_cstring_from_utf8_ex2, METH_VARARGS, (char *)"svn_utf_cstring_from_utf8_ex2(char src, char topage, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_utf_cstring_from_utf8_ex", _wrap_svn_utf_cstring_from_utf8_ex, METH_VARARGS, (char *)"svn_utf_cstring_from_utf8_ex(char src, char topage, char convset_key, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_utf_cstring_from_utf8_fuzzy", _wrap_svn_utf_cstring_from_utf8_fuzzy, METH_VARARGS, (char *)"svn_utf_cstring_from_utf8_fuzzy(char src, apr_pool_t pool) -> char"},
- { (char *)"svn_utf_cstring_from_utf8_stringbuf", _wrap_svn_utf_cstring_from_utf8_stringbuf, METH_VARARGS, (char *)"svn_utf_cstring_from_utf8_stringbuf(svn_stringbuf_t src, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_utf_cstring_from_utf8_string", _wrap_svn_utf_cstring_from_utf8_string, METH_VARARGS, (char *)"svn_utf_cstring_from_utf8_string(svn_string_t src, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_utf_stringbuf_to_utf8", _wrap_svn_utf_stringbuf_to_utf8, METH_VARARGS, (char *)"svn_utf_stringbuf_to_utf8(svn_stringbuf_t const * src, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_utf_string_to_utf8", _wrap_svn_utf_string_to_utf8, METH_VARARGS, (char *)"svn_utf_string_to_utf8(svn_string_t const * src, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_utf_cstring_to_utf8", _wrap_svn_utf_cstring_to_utf8, METH_VARARGS, (char *)"svn_utf_cstring_to_utf8(char const * src, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_utf_cstring_to_utf8_ex2", _wrap_svn_utf_cstring_to_utf8_ex2, METH_VARARGS, (char *)"svn_utf_cstring_to_utf8_ex2(char const * src, char const * frompage, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_utf_cstring_to_utf8_ex", _wrap_svn_utf_cstring_to_utf8_ex, METH_VARARGS, (char *)"svn_utf_cstring_to_utf8_ex(char const * src, char const * frompage, char const * convset_key, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_utf_stringbuf_from_utf8", _wrap_svn_utf_stringbuf_from_utf8, METH_VARARGS, (char *)"svn_utf_stringbuf_from_utf8(svn_stringbuf_t const * src, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_utf_string_from_utf8", _wrap_svn_utf_string_from_utf8, METH_VARARGS, (char *)"svn_utf_string_from_utf8(svn_string_t const * src, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_utf_cstring_from_utf8", _wrap_svn_utf_cstring_from_utf8, METH_VARARGS, (char *)"svn_utf_cstring_from_utf8(char const * src, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_utf_cstring_from_utf8_ex2", _wrap_svn_utf_cstring_from_utf8_ex2, METH_VARARGS, (char *)"svn_utf_cstring_from_utf8_ex2(char const * src, char const * topage, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_utf_cstring_from_utf8_ex", _wrap_svn_utf_cstring_from_utf8_ex, METH_VARARGS, (char *)"svn_utf_cstring_from_utf8_ex(char const * src, char const * topage, char const * convset_key, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_utf_cstring_from_utf8_fuzzy", _wrap_svn_utf_cstring_from_utf8_fuzzy, METH_VARARGS, (char *)"svn_utf_cstring_from_utf8_fuzzy(char const * src, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_utf_cstring_from_utf8_stringbuf", _wrap_svn_utf_cstring_from_utf8_stringbuf, METH_VARARGS, (char *)"svn_utf_cstring_from_utf8_stringbuf(svn_stringbuf_t const * src, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_utf_cstring_from_utf8_string", _wrap_svn_utf_cstring_from_utf8_string, METH_VARARGS, (char *)"svn_utf_cstring_from_utf8_string(svn_string_t const * src, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_utf_cstring_utf8_width", _wrap_svn_utf_cstring_utf8_width, METH_VARARGS, (char *)"svn_utf_cstring_utf8_width(char const * cstr) -> int"},
{ (char *)"svn_nls_init", _wrap_svn_nls_init, METH_VARARGS, (char *)"svn_nls_init() -> svn_error_t"},
- { (char *)"svn_path_internal_style", _wrap_svn_path_internal_style, METH_VARARGS, (char *)"svn_path_internal_style(char path, apr_pool_t pool) -> char"},
- { (char *)"svn_path_local_style", _wrap_svn_path_local_style, METH_VARARGS, (char *)"svn_path_local_style(char path, apr_pool_t pool) -> char"},
- { (char *)"svn_path_splitext", _wrap_svn_path_splitext, METH_VARARGS, (char *)"svn_path_splitext(char path, apr_pool_t pool)"},
- { (char *)"svn_path_is_empty", _wrap_svn_path_is_empty, METH_VARARGS, (char *)"svn_path_is_empty(char path) -> int"},
- { (char *)"svn_dirent_is_root", _wrap_svn_dirent_is_root, METH_VARARGS, (char *)"svn_dirent_is_root(char dirent, apr_size_t len) -> svn_boolean_t"},
- { (char *)"svn_path_canonicalize", _wrap_svn_path_canonicalize, METH_VARARGS, (char *)"svn_path_canonicalize(char path, apr_pool_t pool) -> char"},
- { (char *)"svn_path_is_canonical", _wrap_svn_path_is_canonical, METH_VARARGS, (char *)"svn_path_is_canonical(char path, apr_pool_t pool) -> svn_boolean_t"},
- { (char *)"svn_path_compare_paths", _wrap_svn_path_compare_paths, METH_VARARGS, (char *)"svn_path_compare_paths(char path1, char path2) -> int"},
- { (char *)"svn_path_get_longest_ancestor", _wrap_svn_path_get_longest_ancestor, METH_VARARGS, (char *)"svn_path_get_longest_ancestor(char path1, char path2, apr_pool_t pool) -> char"},
- { (char *)"svn_path_is_dotpath_present", _wrap_svn_path_is_dotpath_present, METH_VARARGS, (char *)"svn_path_is_dotpath_present(char path) -> svn_boolean_t"},
- { (char *)"svn_path_is_url", _wrap_svn_path_is_url, METH_VARARGS, (char *)"svn_path_is_url(char path) -> svn_boolean_t"},
- { (char *)"svn_path_is_uri_safe", _wrap_svn_path_is_uri_safe, METH_VARARGS, (char *)"svn_path_is_uri_safe(char path) -> svn_boolean_t"},
- { (char *)"svn_path_url_add_component2", _wrap_svn_path_url_add_component2, METH_VARARGS, (char *)"svn_path_url_add_component2(char url, char component, apr_pool_t pool) -> char"},
- { (char *)"svn_dirent_internal_style", _wrap_svn_dirent_internal_style, METH_VARARGS, (char *)"svn_dirent_internal_style(char dirent, apr_pool_t pool) -> char"},
- { (char *)"svn_dirent_local_style", _wrap_svn_dirent_local_style, METH_VARARGS, (char *)"svn_dirent_local_style(char dirent, apr_pool_t pool) -> char"},
- { (char *)"svn_relpath__internal_style", _wrap_svn_relpath__internal_style, METH_VARARGS, (char *)"svn_relpath__internal_style(char relpath, apr_pool_t pool) -> char"},
- { (char *)"svn_dirent_join", _wrap_svn_dirent_join, METH_VARARGS, (char *)"svn_dirent_join(char base, char component, apr_pool_t pool) -> char"},
- { (char *)"svn_relpath_join", _wrap_svn_relpath_join, METH_VARARGS, (char *)"svn_relpath_join(char base, char component, apr_pool_t pool) -> char"},
- { (char *)"svn_dirent_basename", _wrap_svn_dirent_basename, METH_VARARGS, (char *)"svn_dirent_basename(char dirent, apr_pool_t pool) -> char"},
- { (char *)"svn_dirent_dirname", _wrap_svn_dirent_dirname, METH_VARARGS, (char *)"svn_dirent_dirname(char dirent, apr_pool_t pool) -> char"},
- { (char *)"svn_dirent_split", _wrap_svn_dirent_split, METH_VARARGS, (char *)"svn_dirent_split(char dirent, apr_pool_t pool)"},
- { (char *)"svn_relpath_split", _wrap_svn_relpath_split, METH_VARARGS, (char *)"svn_relpath_split(char relpath, apr_pool_t pool)"},
- { (char *)"svn_relpath_basename", _wrap_svn_relpath_basename, METH_VARARGS, (char *)"svn_relpath_basename(char relpath, apr_pool_t pool) -> char"},
- { (char *)"svn_relpath_dirname", _wrap_svn_relpath_dirname, METH_VARARGS, (char *)"svn_relpath_dirname(char relpath, apr_pool_t pool) -> char"},
- { (char *)"svn_uri_split", _wrap_svn_uri_split, METH_VARARGS, (char *)"svn_uri_split(char uri, apr_pool_t pool)"},
- { (char *)"svn_uri_basename", _wrap_svn_uri_basename, METH_VARARGS, (char *)"svn_uri_basename(char uri, apr_pool_t pool) -> char"},
- { (char *)"svn_uri_dirname", _wrap_svn_uri_dirname, METH_VARARGS, (char *)"svn_uri_dirname(char uri, apr_pool_t pool) -> char"},
- { (char *)"svn_dirent_is_absolute", _wrap_svn_dirent_is_absolute, METH_VARARGS, (char *)"svn_dirent_is_absolute(char dirent) -> svn_boolean_t"},
- { (char *)"svn_uri_is_root", _wrap_svn_uri_is_root, METH_VARARGS, (char *)"svn_uri_is_root(char uri, apr_size_t len) -> svn_boolean_t"},
- { (char *)"svn_dirent_canonicalize", _wrap_svn_dirent_canonicalize, METH_VARARGS, (char *)"svn_dirent_canonicalize(char dirent, apr_pool_t pool) -> char"},
- { (char *)"svn_relpath_canonicalize", _wrap_svn_relpath_canonicalize, METH_VARARGS, (char *)"svn_relpath_canonicalize(char relpath, apr_pool_t pool) -> char"},
- { (char *)"svn_uri_canonicalize", _wrap_svn_uri_canonicalize, METH_VARARGS, (char *)"svn_uri_canonicalize(char uri, apr_pool_t pool) -> char"},
- { (char *)"svn_dirent_is_canonical", _wrap_svn_dirent_is_canonical, METH_VARARGS, (char *)"svn_dirent_is_canonical(char dirent, apr_pool_t pool) -> svn_boolean_t"},
- { (char *)"svn_relpath_is_canonical", _wrap_svn_relpath_is_canonical, METH_VARARGS, (char *)"svn_relpath_is_canonical(char relpath) -> svn_boolean_t"},
- { (char *)"svn_uri_is_canonical", _wrap_svn_uri_is_canonical, METH_VARARGS, (char *)"svn_uri_is_canonical(char uri, apr_pool_t pool) -> svn_boolean_t"},
- { (char *)"svn_dirent_get_longest_ancestor", _wrap_svn_dirent_get_longest_ancestor, METH_VARARGS, (char *)"svn_dirent_get_longest_ancestor(char dirent1, char dirent2, apr_pool_t pool) -> char"},
- { (char *)"svn_relpath_get_longest_ancestor", _wrap_svn_relpath_get_longest_ancestor, METH_VARARGS, (char *)"svn_relpath_get_longest_ancestor(char relpath1, char relpath2, apr_pool_t pool) -> char"},
- { (char *)"svn_uri_get_longest_ancestor", _wrap_svn_uri_get_longest_ancestor, METH_VARARGS, (char *)"svn_uri_get_longest_ancestor(char uri1, char uri2, apr_pool_t pool) -> char"},
- { (char *)"svn_dirent_get_absolute", _wrap_svn_dirent_get_absolute, METH_VARARGS, (char *)"svn_dirent_get_absolute(char relative, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_uri__is_child", _wrap_svn_uri__is_child, METH_VARARGS, (char *)"svn_uri__is_child(char parent_uri, char child_uri, apr_pool_t pool) -> char"},
- { (char *)"svn_dirent_is_child", _wrap_svn_dirent_is_child, METH_VARARGS, (char *)"svn_dirent_is_child(char parent_dirent, char child_dirent, apr_pool_t pool) -> char"},
- { (char *)"svn_relpath__is_child", _wrap_svn_relpath__is_child, METH_VARARGS, (char *)"svn_relpath__is_child(char parent_relpath, char child_relpath, apr_pool_t pool) -> char"},
- { (char *)"svn_dirent_is_ancestor", _wrap_svn_dirent_is_ancestor, METH_VARARGS, (char *)"svn_dirent_is_ancestor(char parent_dirent, char child_dirent) -> svn_boolean_t"},
- { (char *)"svn_relpath__is_ancestor", _wrap_svn_relpath__is_ancestor, METH_VARARGS, (char *)"svn_relpath__is_ancestor(char parent_relpath, char child_relpath) -> svn_boolean_t"},
- { (char *)"svn_uri__is_ancestor", _wrap_svn_uri__is_ancestor, METH_VARARGS, (char *)"svn_uri__is_ancestor(char parent_uri, char child_uri) -> svn_boolean_t"},
- { (char *)"svn_dirent_skip_ancestor", _wrap_svn_dirent_skip_ancestor, METH_VARARGS, (char *)"svn_dirent_skip_ancestor(char parent_dirent, char child_dirent) -> char"},
- { (char *)"svn_relpath_skip_ancestor", _wrap_svn_relpath_skip_ancestor, METH_VARARGS, (char *)"svn_relpath_skip_ancestor(char parent_relpath, char child_relpath) -> char"},
- { (char *)"svn_uri_skip_ancestor", _wrap_svn_uri_skip_ancestor, METH_VARARGS, (char *)"svn_uri_skip_ancestor(char parent_uri, char child_uri, apr_pool_t result_pool) -> char"},
- { (char *)"svn_uri_get_dirent_from_file_url", _wrap_svn_uri_get_dirent_from_file_url, METH_VARARGS, (char *)"svn_uri_get_dirent_from_file_url(char url, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_uri_get_file_url_from_dirent", _wrap_svn_uri_get_file_url_from_dirent, METH_VARARGS, (char *)"svn_uri_get_file_url_from_dirent(char dirent, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_mergeinfo_parse", _wrap_svn_mergeinfo_parse, METH_VARARGS, (char *)"svn_mergeinfo_parse(char input, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_mergeinfo_diff", _wrap_svn_mergeinfo_diff, METH_VARARGS, (char *)"\n"
- "svn_mergeinfo_diff(svn_mergeinfo_t mergefrom, svn_mergeinfo_t mergeto, \n"
- " svn_boolean_t consider_inheritance, apr_pool_t pool) -> svn_error_t\n"
+ { (char *)"svn_path_internal_style", _wrap_svn_path_internal_style, METH_VARARGS, (char *)"svn_path_internal_style(char const * path, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_path_local_style", _wrap_svn_path_local_style, METH_VARARGS, (char *)"svn_path_local_style(char const * path, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_path_splitext", _wrap_svn_path_splitext, METH_VARARGS, (char *)"svn_path_splitext(char const * path, apr_pool_t pool)"},
+ { (char *)"svn_path_is_empty", _wrap_svn_path_is_empty, METH_VARARGS, (char *)"svn_path_is_empty(char const * path) -> int"},
+ { (char *)"svn_dirent_is_root", _wrap_svn_dirent_is_root, METH_VARARGS, (char *)"svn_dirent_is_root(char const * dirent, apr_size_t len) -> svn_boolean_t"},
+ { (char *)"svn_path_canonicalize", _wrap_svn_path_canonicalize, METH_VARARGS, (char *)"svn_path_canonicalize(char const * path, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_path_is_canonical", _wrap_svn_path_is_canonical, METH_VARARGS, (char *)"svn_path_is_canonical(char const * path, apr_pool_t pool) -> svn_boolean_t"},
+ { (char *)"svn_path_compare_paths", _wrap_svn_path_compare_paths, METH_VARARGS, (char *)"svn_path_compare_paths(char const * path1, char const * path2) -> int"},
+ { (char *)"svn_path_get_longest_ancestor", _wrap_svn_path_get_longest_ancestor, METH_VARARGS, (char *)"svn_path_get_longest_ancestor(char const * path1, char const * path2, apr_pool_t pool) -> char *"},
+ { (char *)"svn_path_is_dotpath_present", _wrap_svn_path_is_dotpath_present, METH_VARARGS, (char *)"svn_path_is_dotpath_present(char const * path) -> svn_boolean_t"},
+ { (char *)"svn_path_is_url", _wrap_svn_path_is_url, METH_VARARGS, (char *)"svn_path_is_url(char const * path) -> svn_boolean_t"},
+ { (char *)"svn_path_is_uri_safe", _wrap_svn_path_is_uri_safe, METH_VARARGS, (char *)"svn_path_is_uri_safe(char const * path) -> svn_boolean_t"},
+ { (char *)"svn_path_url_add_component2", _wrap_svn_path_url_add_component2, METH_VARARGS, (char *)"svn_path_url_add_component2(char const * url, char const * component, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_path_is_repos_relative_url", _wrap_svn_path_is_repos_relative_url, METH_VARARGS, (char *)"svn_path_is_repos_relative_url(char const * path) -> svn_boolean_t"},
+ { (char *)"svn_path_resolve_repos_relative_url", _wrap_svn_path_resolve_repos_relative_url, METH_VARARGS, (char *)"svn_path_resolve_repos_relative_url(char const * relative_url, char const * repos_root_url, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_path_illegal_path_escape", _wrap_svn_path_illegal_path_escape, METH_VARARGS, (char *)"svn_path_illegal_path_escape(char const * path, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_dirent_internal_style", _wrap_svn_dirent_internal_style, METH_VARARGS, (char *)"svn_dirent_internal_style(char const * dirent, apr_pool_t result_pool) -> char const *"},
+ { (char *)"svn_dirent_local_style", _wrap_svn_dirent_local_style, METH_VARARGS, (char *)"svn_dirent_local_style(char const * dirent, apr_pool_t result_pool) -> char const *"},
+ { (char *)"svn_relpath__internal_style", _wrap_svn_relpath__internal_style, METH_VARARGS, (char *)"svn_relpath__internal_style(char const * relpath, apr_pool_t result_pool) -> char const *"},
+ { (char *)"svn_dirent_join", _wrap_svn_dirent_join, METH_VARARGS, (char *)"svn_dirent_join(char const * base, char const * component, apr_pool_t result_pool) -> char *"},
+ { (char *)"svn_relpath_join", _wrap_svn_relpath_join, METH_VARARGS, (char *)"svn_relpath_join(char const * base, char const * component, apr_pool_t result_pool) -> char *"},
+ { (char *)"svn_dirent_basename", _wrap_svn_dirent_basename, METH_VARARGS, (char *)"svn_dirent_basename(char const * dirent, apr_pool_t result_pool) -> char const *"},
+ { (char *)"svn_dirent_dirname", _wrap_svn_dirent_dirname, METH_VARARGS, (char *)"svn_dirent_dirname(char const * dirent, apr_pool_t result_pool) -> char *"},
+ { (char *)"svn_dirent_split", _wrap_svn_dirent_split, METH_VARARGS, (char *)"svn_dirent_split(char const * dirent, apr_pool_t result_pool)"},
+ { (char *)"svn_relpath_split", _wrap_svn_relpath_split, METH_VARARGS, (char *)"svn_relpath_split(char const * relpath, apr_pool_t result_pool)"},
+ { (char *)"svn_relpath_basename", _wrap_svn_relpath_basename, METH_VARARGS, (char *)"svn_relpath_basename(char const * relpath, apr_pool_t result_pool) -> char const *"},
+ { (char *)"svn_relpath_dirname", _wrap_svn_relpath_dirname, METH_VARARGS, (char *)"svn_relpath_dirname(char const * relpath, apr_pool_t result_pool) -> char *"},
+ { (char *)"svn_uri_split", _wrap_svn_uri_split, METH_VARARGS, (char *)"svn_uri_split(char const * uri, apr_pool_t result_pool)"},
+ { (char *)"svn_uri_basename", _wrap_svn_uri_basename, METH_VARARGS, (char *)"svn_uri_basename(char const * uri, apr_pool_t result_pool) -> char const *"},
+ { (char *)"svn_uri_dirname", _wrap_svn_uri_dirname, METH_VARARGS, (char *)"svn_uri_dirname(char const * uri, apr_pool_t result_pool) -> char *"},
+ { (char *)"svn_dirent_is_absolute", _wrap_svn_dirent_is_absolute, METH_VARARGS, (char *)"svn_dirent_is_absolute(char const * dirent) -> svn_boolean_t"},
+ { (char *)"svn_uri_is_root", _wrap_svn_uri_is_root, METH_VARARGS, (char *)"svn_uri_is_root(char const * uri, apr_size_t len) -> svn_boolean_t"},
+ { (char *)"svn_dirent_canonicalize", _wrap_svn_dirent_canonicalize, METH_VARARGS, (char *)"svn_dirent_canonicalize(char const * dirent, apr_pool_t result_pool) -> char const *"},
+ { (char *)"svn_relpath_canonicalize", _wrap_svn_relpath_canonicalize, METH_VARARGS, (char *)"svn_relpath_canonicalize(char const * relpath, apr_pool_t result_pool) -> char const *"},
+ { (char *)"svn_uri_canonicalize", _wrap_svn_uri_canonicalize, METH_VARARGS, (char *)"svn_uri_canonicalize(char const * uri, apr_pool_t result_pool) -> char const *"},
+ { (char *)"svn_dirent_is_canonical", _wrap_svn_dirent_is_canonical, METH_VARARGS, (char *)"svn_dirent_is_canonical(char const * dirent, apr_pool_t scratch_pool) -> svn_boolean_t"},
+ { (char *)"svn_relpath_is_canonical", _wrap_svn_relpath_is_canonical, METH_VARARGS, (char *)"svn_relpath_is_canonical(char const * relpath) -> svn_boolean_t"},
+ { (char *)"svn_uri_is_canonical", _wrap_svn_uri_is_canonical, METH_VARARGS, (char *)"svn_uri_is_canonical(char const * uri, apr_pool_t scratch_pool) -> svn_boolean_t"},
+ { (char *)"svn_dirent_get_longest_ancestor", _wrap_svn_dirent_get_longest_ancestor, METH_VARARGS, (char *)"svn_dirent_get_longest_ancestor(char const * dirent1, char const * dirent2, apr_pool_t result_pool) -> char *"},
+ { (char *)"svn_relpath_get_longest_ancestor", _wrap_svn_relpath_get_longest_ancestor, METH_VARARGS, (char *)"svn_relpath_get_longest_ancestor(char const * relpath1, char const * relpath2, apr_pool_t result_pool) -> char *"},
+ { (char *)"svn_uri_get_longest_ancestor", _wrap_svn_uri_get_longest_ancestor, METH_VARARGS, (char *)"svn_uri_get_longest_ancestor(char const * uri1, char const * uri2, apr_pool_t result_pool) -> char *"},
+ { (char *)"svn_dirent_get_absolute", _wrap_svn_dirent_get_absolute, METH_VARARGS, (char *)"svn_dirent_get_absolute(char const * relative, apr_pool_t result_pool) -> svn_error_t"},
+ { (char *)"svn_dirent_is_child", _wrap_svn_dirent_is_child, METH_VARARGS, (char *)"svn_dirent_is_child(char const * parent_dirent, char const * child_dirent, apr_pool_t result_pool) -> char const *"},
+ { (char *)"svn_dirent_is_ancestor", _wrap_svn_dirent_is_ancestor, METH_VARARGS, (char *)"svn_dirent_is_ancestor(char const * parent_dirent, char const * child_dirent) -> svn_boolean_t"},
+ { (char *)"svn_uri__is_ancestor", _wrap_svn_uri__is_ancestor, METH_VARARGS, (char *)"svn_uri__is_ancestor(char const * parent_uri, char const * child_uri) -> svn_boolean_t"},
+ { (char *)"svn_dirent_skip_ancestor", _wrap_svn_dirent_skip_ancestor, METH_VARARGS, (char *)"svn_dirent_skip_ancestor(char const * parent_dirent, char const * child_dirent) -> char const *"},
+ { (char *)"svn_relpath_skip_ancestor", _wrap_svn_relpath_skip_ancestor, METH_VARARGS, (char *)"svn_relpath_skip_ancestor(char const * parent_relpath, char const * child_relpath) -> char const *"},
+ { (char *)"svn_uri_skip_ancestor", _wrap_svn_uri_skip_ancestor, METH_VARARGS, (char *)"svn_uri_skip_ancestor(char const * parent_uri, char const * child_uri, apr_pool_t result_pool) -> char const *"},
+ { (char *)"svn_uri_get_dirent_from_file_url", _wrap_svn_uri_get_dirent_from_file_url, METH_VARARGS, (char *)"svn_uri_get_dirent_from_file_url(char const * url, apr_pool_t result_pool) -> svn_error_t"},
+ { (char *)"svn_uri_get_file_url_from_dirent", _wrap_svn_uri_get_file_url_from_dirent, METH_VARARGS, (char *)"svn_uri_get_file_url_from_dirent(char const * dirent, apr_pool_t result_pool) -> svn_error_t"},
+ { (char *)"svn_mergeinfo_parse", _wrap_svn_mergeinfo_parse, METH_VARARGS, (char *)"svn_mergeinfo_parse(char const * input, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_mergeinfo_diff2", _wrap_svn_mergeinfo_diff2, METH_VARARGS, (char *)"\n"
+ "svn_mergeinfo_diff2(apr_hash_t mergefrom, apr_hash_t mergeto, svn_boolean_t consider_inheritance, apr_pool_t result_pool, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
+ { (char *)"svn_mergeinfo_diff", _wrap_svn_mergeinfo_diff, METH_VARARGS, (char *)"svn_mergeinfo_diff(apr_hash_t mergefrom, apr_hash_t mergeto, svn_boolean_t consider_inheritance, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_mergeinfo_merge2", _wrap_svn_mergeinfo_merge2, METH_VARARGS, (char *)"svn_mergeinfo_merge2(apr_hash_t mergeinfo, apr_hash_t changes, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
{ (char *)"svn_mergeinfo_catalog_merge", _wrap_svn_mergeinfo_catalog_merge, METH_VARARGS, (char *)"\n"
- "svn_mergeinfo_catalog_merge(svn_mergeinfo_catalog_t mergeinfo_catalog, svn_mergeinfo_catalog_t changes_catalog, \n"
- " apr_pool_t result_pool, \n"
+ "svn_mergeinfo_catalog_merge(apr_hash_t mergeinfo_catalog, apr_hash_t changes_catalog, apr_pool_t result_pool, \n"
" apr_pool_t scratch_pool) -> svn_error_t\n"
""},
- { (char *)"svn_mergeinfo_remove", _wrap_svn_mergeinfo_remove, METH_VARARGS, (char *)"\n"
- "svn_mergeinfo_remove(svn_mergeinfo_t eraser, svn_mergeinfo_t whiteboard, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
+ { (char *)"svn_mergeinfo_remove", _wrap_svn_mergeinfo_remove, METH_VARARGS, (char *)"svn_mergeinfo_remove(apr_hash_t eraser, apr_hash_t whiteboard, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_mergeinfo_remove2", _wrap_svn_mergeinfo_remove2, METH_VARARGS, (char *)"\n"
- "svn_mergeinfo_remove2(svn_mergeinfo_t eraser, svn_mergeinfo_t whiteboard, \n"
- " svn_boolean_t consider_inheritance, apr_pool_t result_pool, \n"
+ "svn_mergeinfo_remove2(apr_hash_t eraser, apr_hash_t whiteboard, svn_boolean_t consider_inheritance, apr_pool_t result_pool, \n"
" apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_rangelist_diff", _wrap_svn_rangelist_diff, METH_VARARGS, (char *)"\n"
"svn_rangelist_diff(apr_array_header_t _from, apr_array_header_t to, svn_boolean_t consider_inheritance, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_rangelist_remove", _wrap_svn_rangelist_remove, METH_VARARGS, (char *)"\n"
- "svn_rangelist_remove(apr_array_header_t eraser, apr_array_header_t whiteboard, \n"
- " svn_boolean_t consider_inheritance, apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_mergeinfo_intersect2", _wrap_svn_mergeinfo_intersect2, METH_VARARGS, (char *)"\n"
- "svn_mergeinfo_intersect2(svn_mergeinfo_t mergeinfo1, svn_mergeinfo_t mergeinfo2, \n"
- " svn_boolean_t consider_inheritance, apr_pool_t result_pool, \n"
+ { (char *)"svn_rangelist_merge2", _wrap_svn_rangelist_merge2, METH_VARARGS, (char *)"\n"
+ "svn_rangelist_merge2(apr_array_header_t rangelist, apr_array_header_t changes, apr_pool_t result_pool, \n"
" apr_pool_t scratch_pool) -> svn_error_t\n"
""},
- { (char *)"svn_mergeinfo_intersect", _wrap_svn_mergeinfo_intersect, METH_VARARGS, (char *)"\n"
- "svn_mergeinfo_intersect(svn_mergeinfo_t mergeinfo1, svn_mergeinfo_t mergeinfo2, \n"
+ { (char *)"svn_rangelist_remove", _wrap_svn_rangelist_remove, METH_VARARGS, (char *)"\n"
+ "svn_rangelist_remove(apr_array_header_t eraser, apr_array_header_t whiteboard, svn_boolean_t consider_inheritance, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_mergeinfo_intersect2", _wrap_svn_mergeinfo_intersect2, METH_VARARGS, (char *)"\n"
+ "svn_mergeinfo_intersect2(apr_hash_t mergeinfo1, apr_hash_t mergeinfo2, svn_boolean_t consider_inheritance, \n"
+ " apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t\n"
+ ""},
+ { (char *)"svn_mergeinfo_intersect", _wrap_svn_mergeinfo_intersect, METH_VARARGS, (char *)"svn_mergeinfo_intersect(apr_hash_t mergeinfo1, apr_hash_t mergeinfo2, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_rangelist_intersect", _wrap_svn_rangelist_intersect, METH_VARARGS, (char *)"\n"
- "svn_rangelist_intersect(apr_array_header_t rangelist1, apr_array_header_t rangelist2, \n"
- " svn_boolean_t consider_inheritance, \n"
+ "svn_rangelist_intersect(apr_array_header_t rangelist1, apr_array_header_t rangelist2, svn_boolean_t consider_inheritance, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_rangelist_to_string", _wrap_svn_rangelist_to_string, METH_VARARGS, (char *)"svn_rangelist_to_string(apr_array_header_t rangelist, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_rangelist_inheritable2", _wrap_svn_rangelist_inheritable2, METH_VARARGS, (char *)"\n"
- "svn_rangelist_inheritable2(apr_array_header_t rangelist, svn_revnum_t start, svn_revnum_t end, \n"
- " svn_boolean_t inheritable, apr_pool_t result_pool, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_rangelist_inheritable", _wrap_svn_rangelist_inheritable, METH_VARARGS, (char *)"\n"
- "svn_rangelist_inheritable(apr_array_header_t rangelist, svn_revnum_t start, svn_revnum_t end, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_rangelist_inheritable2(apr_array_header_t rangelist, svn_revnum_t start, svn_revnum_t end, svn_boolean_t inheritable, \n"
+ " apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
+ { (char *)"svn_rangelist_inheritable", _wrap_svn_rangelist_inheritable, METH_VARARGS, (char *)"svn_rangelist_inheritable(apr_array_header_t rangelist, svn_revnum_t start, svn_revnum_t end, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_mergeinfo_inheritable2", _wrap_svn_mergeinfo_inheritable2, METH_VARARGS, (char *)"\n"
- "svn_mergeinfo_inheritable2(svn_mergeinfo_t mergeinfo, char path, svn_revnum_t start, \n"
- " svn_revnum_t end, svn_boolean_t inheritable, \n"
+ "svn_mergeinfo_inheritable2(apr_hash_t mergeinfo, char const * path, svn_revnum_t start, svn_revnum_t end, svn_boolean_t inheritable, \n"
" apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
- { (char *)"svn_mergeinfo_inheritable", _wrap_svn_mergeinfo_inheritable, METH_VARARGS, (char *)"\n"
- "svn_mergeinfo_inheritable(svn_mergeinfo_t mergeinfo, char path, svn_revnum_t start, \n"
- " svn_revnum_t end, apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_mergeinfo_to_string", _wrap_svn_mergeinfo_to_string, METH_VARARGS, (char *)"svn_mergeinfo_to_string(svn_mergeinfo_t mergeinput, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_mergeinfo_catalog_dup", _wrap_svn_mergeinfo_catalog_dup, METH_VARARGS, (char *)"svn_mergeinfo_catalog_dup(svn_mergeinfo_catalog_t mergeinfo_catalog, apr_pool_t pool) -> svn_mergeinfo_catalog_t"},
- { (char *)"svn_mergeinfo_dup", _wrap_svn_mergeinfo_dup, METH_VARARGS, (char *)"svn_mergeinfo_dup(svn_mergeinfo_t mergeinfo, apr_pool_t pool) -> svn_mergeinfo_t"},
+ { (char *)"svn_mergeinfo_inheritable", _wrap_svn_mergeinfo_inheritable, METH_VARARGS, (char *)"svn_mergeinfo_inheritable(apr_hash_t mergeinfo, char const * path, svn_revnum_t start, svn_revnum_t end, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_mergeinfo_to_string", _wrap_svn_mergeinfo_to_string, METH_VARARGS, (char *)"svn_mergeinfo_to_string(apr_hash_t mergeinput, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_mergeinfo_catalog_dup", _wrap_svn_mergeinfo_catalog_dup, METH_VARARGS, (char *)"svn_mergeinfo_catalog_dup(apr_hash_t mergeinfo_catalog, apr_pool_t pool) -> apr_hash_t"},
+ { (char *)"svn_mergeinfo_dup", _wrap_svn_mergeinfo_dup, METH_VARARGS, (char *)"svn_mergeinfo_dup(apr_hash_t mergeinfo, apr_pool_t pool) -> apr_hash_t"},
{ (char *)"svn_rangelist_dup", _wrap_svn_rangelist_dup, METH_VARARGS, (char *)"svn_rangelist_dup(apr_array_header_t rangelist, apr_pool_t pool) -> apr_array_header_t"},
- { (char *)"svn_inheritance_to_word", _wrap_svn_inheritance_to_word, METH_VARARGS, (char *)"svn_inheritance_to_word(svn_mergeinfo_inheritance_t inherit) -> char"},
- { (char *)"svn_inheritance_from_word", _wrap_svn_inheritance_from_word, METH_VARARGS, (char *)"svn_inheritance_from_word(char word) -> svn_mergeinfo_inheritance_t"},
+ { (char *)"svn_inheritance_to_word", _wrap_svn_inheritance_to_word, METH_VARARGS, (char *)"svn_inheritance_to_word(svn_mergeinfo_inheritance_t inherit) -> char const *"},
+ { (char *)"svn_inheritance_from_word", _wrap_svn_inheritance_from_word, METH_VARARGS, (char *)"svn_inheritance_from_word(char const * word) -> svn_mergeinfo_inheritance_t"},
{ (char *)"svn_io_dirent2_t_kind_set", _wrap_svn_io_dirent2_t_kind_set, METH_VARARGS, (char *)"svn_io_dirent2_t_kind_set(svn_io_dirent2_t self, svn_node_kind_t kind)"},
{ (char *)"svn_io_dirent2_t_kind_get", _wrap_svn_io_dirent2_t_kind_get, METH_VARARGS, (char *)"svn_io_dirent2_t_kind_get(svn_io_dirent2_t self) -> svn_node_kind_t"},
{ (char *)"svn_io_dirent2_t_special_set", _wrap_svn_io_dirent2_t_special_set, METH_VARARGS, (char *)"svn_io_dirent2_t_special_set(svn_io_dirent2_t self, svn_boolean_t special)"},
@@ -29256,136 +33746,127 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"delete_svn_io_dirent_t", _wrap_delete_svn_io_dirent_t, METH_VARARGS, (char *)"delete_svn_io_dirent_t(svn_io_dirent_t self)"},
{ (char *)"svn_io_dirent_t_swigregister", svn_io_dirent_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_io_open_uniquely_named", _wrap_svn_io_open_uniquely_named, METH_VARARGS, (char *)"\n"
- "svn_io_open_uniquely_named(char dirpath, char filename, char suffix, svn_io_file_del_t delete_when, \n"
- " apr_pool_t result_pool, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_io_open_unique_file3", _wrap_svn_io_open_unique_file3, METH_VARARGS, (char *)"\n"
- "svn_io_open_unique_file3(char dirpath, svn_io_file_del_t delete_when, apr_pool_t result_pool, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_io_open_unique_file2", _wrap_svn_io_open_unique_file2, METH_VARARGS, (char *)"\n"
- "svn_io_open_unique_file2(char path, char suffix, svn_io_file_del_t delete_when, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_io_open_unique_file", _wrap_svn_io_open_unique_file, METH_VARARGS, (char *)"\n"
- "svn_io_open_unique_file(char path, char suffix, svn_boolean_t delete_on_close, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_io_copy_perms", _wrap_svn_io_copy_perms, METH_VARARGS, (char *)"svn_io_copy_perms(char src, char dst, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_io_sleep_for_timestamps", _wrap_svn_io_sleep_for_timestamps, METH_VARARGS, (char *)"svn_io_sleep_for_timestamps(char path, apr_pool_t pool)"},
- { (char *)"svn_io_file_checksum2", _wrap_svn_io_file_checksum2, METH_VARARGS, (char *)"svn_io_file_checksum2(char file, svn_checksum_kind_t kind, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_io_file_checksum", _wrap_svn_io_file_checksum, METH_VARARGS, (char *)"svn_io_file_checksum(char file, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_io_files_contents_same_p", _wrap_svn_io_files_contents_same_p, METH_VARARGS, (char *)"svn_io_files_contents_same_p(char file1, char file2, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_stream_set_skip", _wrap_svn_stream_set_skip, METH_VARARGS, (char *)"svn_stream_set_skip(svn_stream_t stream, svn_stream_skip_fn_t skip_fn)"},
- { (char *)"svn_stream_set_mark", _wrap_svn_stream_set_mark, METH_VARARGS, (char *)"svn_stream_set_mark(svn_stream_t stream, svn_stream_mark_fn_t mark_fn)"},
- { (char *)"svn_stream_set_seek", _wrap_svn_stream_set_seek, METH_VARARGS, (char *)"svn_stream_set_seek(svn_stream_t stream, svn_stream_seek_fn_t seek_fn)"},
- { (char *)"svn_stream_empty", _wrap_svn_stream_empty, METH_VARARGS, (char *)"svn_stream_empty(apr_pool_t pool) -> svn_stream_t"},
- { (char *)"svn_stream_disown", _wrap_svn_stream_disown, METH_VARARGS, (char *)"svn_stream_disown(svn_stream_t stream, apr_pool_t pool) -> svn_stream_t"},
- { (char *)"svn_stream_open_readonly", _wrap_svn_stream_open_readonly, METH_VARARGS, (char *)"svn_stream_open_readonly(char path, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
- { (char *)"svn_stream_open_writable", _wrap_svn_stream_open_writable, METH_VARARGS, (char *)"svn_stream_open_writable(char path, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
- { (char *)"svn_stream_open_unique", _wrap_svn_stream_open_unique, METH_VARARGS, (char *)"\n"
- "svn_stream_open_unique(char dirpath, svn_io_file_del_t delete_when, apr_pool_t result_pool, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_io_open_uniquely_named(char const * dirpath, char const * filename, char const * suffix, svn_io_file_del_t delete_when, \n"
+ " apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
- { (char *)"svn_stream_from_aprfile2", _wrap_svn_stream_from_aprfile2, METH_VARARGS, (char *)"svn_stream_from_aprfile2(apr_file_t file, svn_boolean_t disown, apr_pool_t pool) -> svn_stream_t"},
- { (char *)"svn_stream_from_aprfile", _wrap_svn_stream_from_aprfile, METH_VARARGS, (char *)"svn_stream_from_aprfile(apr_file_t file, apr_pool_t pool) -> svn_stream_t"},
+ { (char *)"svn_io_open_unique_file3", _wrap_svn_io_open_unique_file3, METH_VARARGS, (char *)"svn_io_open_unique_file3(char const * dirpath, svn_io_file_del_t delete_when, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_io_open_unique_file2", _wrap_svn_io_open_unique_file2, METH_VARARGS, (char *)"svn_io_open_unique_file2(char const * path, char const * suffix, svn_io_file_del_t delete_when, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_io_open_unique_file", _wrap_svn_io_open_unique_file, METH_VARARGS, (char *)"svn_io_open_unique_file(char const * path, char const * suffix, svn_boolean_t delete_on_close, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_io_copy_perms", _wrap_svn_io_copy_perms, METH_VARARGS, (char *)"svn_io_copy_perms(char const * src, char const * dst, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_io_sleep_for_timestamps", _wrap_svn_io_sleep_for_timestamps, METH_VARARGS, (char *)"svn_io_sleep_for_timestamps(char const * path, apr_pool_t pool)"},
+ { (char *)"svn_io_filesizes_three_different_p", _wrap_svn_io_filesizes_three_different_p, METH_VARARGS, (char *)"svn_io_filesizes_three_different_p(char const * file1, char const * file2, char const * file3, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_io_file_checksum2", _wrap_svn_io_file_checksum2, METH_VARARGS, (char *)"svn_io_file_checksum2(char const * file, svn_checksum_kind_t kind, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_io_file_checksum", _wrap_svn_io_file_checksum, METH_VARARGS, (char *)"svn_io_file_checksum(char const * file, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_io_files_contents_same_p", _wrap_svn_io_files_contents_same_p, METH_VARARGS, (char *)"svn_io_files_contents_same_p(char const * file1, char const * file2, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_io_files_contents_three_same_p", _wrap_svn_io_files_contents_three_same_p, METH_VARARGS, (char *)"svn_io_files_contents_three_same_p(char const * file1, char const * file2, char const * file3, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_io_lock_open_file", _wrap_svn_io_lock_open_file, METH_VARARGS, (char *)"svn_io_lock_open_file(apr_file_t lockfile_handle, svn_boolean_t exclusive, svn_boolean_t nonblocking, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_io_unlock_open_file", _wrap_svn_io_unlock_open_file, METH_VARARGS, (char *)"svn_io_unlock_open_file(apr_file_t lockfile_handle, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_stream_set_skip", _wrap_svn_stream_set_skip, METH_VARARGS, (char *)"svn_stream_set_skip(svn_stream_t * stream, svn_stream_skip_fn_t skip_fn)"},
+ { (char *)"svn_stream_set_mark", _wrap_svn_stream_set_mark, METH_VARARGS, (char *)"svn_stream_set_mark(svn_stream_t * stream, svn_stream_mark_fn_t mark_fn)"},
+ { (char *)"svn_stream_set_seek", _wrap_svn_stream_set_seek, METH_VARARGS, (char *)"svn_stream_set_seek(svn_stream_t * stream, svn_stream_seek_fn_t seek_fn)"},
+ { (char *)"svn_stream_empty", _wrap_svn_stream_empty, METH_VARARGS, (char *)"svn_stream_empty(apr_pool_t pool) -> svn_stream_t *"},
+ { (char *)"svn_stream_disown", _wrap_svn_stream_disown, METH_VARARGS, (char *)"svn_stream_disown(svn_stream_t * stream, apr_pool_t pool) -> svn_stream_t *"},
+ { (char *)"svn_stream_open_readonly", _wrap_svn_stream_open_readonly, METH_VARARGS, (char *)"svn_stream_open_readonly(char const * path, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_stream_open_writable", _wrap_svn_stream_open_writable, METH_VARARGS, (char *)"svn_stream_open_writable(char const * path, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_stream_open_unique", _wrap_svn_stream_open_unique, METH_VARARGS, (char *)"svn_stream_open_unique(char const * dirpath, svn_io_file_del_t delete_when, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_stream_from_aprfile2", _wrap_svn_stream_from_aprfile2, METH_VARARGS, (char *)"svn_stream_from_aprfile2(apr_file_t file, svn_boolean_t disown, apr_pool_t pool) -> svn_stream_t *"},
+ { (char *)"svn_stream_from_aprfile", _wrap_svn_stream_from_aprfile, METH_VARARGS, (char *)"svn_stream_from_aprfile(apr_file_t file, apr_pool_t pool) -> svn_stream_t *"},
{ (char *)"svn_stream_for_stdin", _wrap_svn_stream_for_stdin, METH_VARARGS, (char *)"svn_stream_for_stdin(apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_stream_for_stderr", _wrap_svn_stream_for_stderr, METH_VARARGS, (char *)"svn_stream_for_stderr(apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_stream_for_stdout", _wrap_svn_stream_for_stdout, METH_VARARGS, (char *)"svn_stream_for_stdout(apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_stream_from_stringbuf", _wrap_svn_stream_from_stringbuf, METH_VARARGS, (char *)"svn_stream_from_stringbuf(svn_stringbuf_t str, apr_pool_t pool) -> svn_stream_t"},
- { (char *)"svn_stream_from_string", _wrap_svn_stream_from_string, METH_VARARGS, (char *)"svn_stream_from_string(svn_string_t str, apr_pool_t pool) -> svn_stream_t"},
- { (char *)"svn_stream_compressed", _wrap_svn_stream_compressed, METH_VARARGS, (char *)"svn_stream_compressed(svn_stream_t stream, apr_pool_t pool) -> svn_stream_t"},
+ { (char *)"svn_stream_from_stringbuf", _wrap_svn_stream_from_stringbuf, METH_VARARGS, (char *)"svn_stream_from_stringbuf(svn_stringbuf_t * str, apr_pool_t pool) -> svn_stream_t *"},
+ { (char *)"svn_stream_from_string", _wrap_svn_stream_from_string, METH_VARARGS, (char *)"svn_stream_from_string(svn_string_t const * str, apr_pool_t pool) -> svn_stream_t *"},
+ { (char *)"svn_stream_buffered", _wrap_svn_stream_buffered, METH_VARARGS, (char *)"svn_stream_buffered(apr_pool_t result_pool) -> svn_stream_t *"},
+ { (char *)"svn_stream_compressed", _wrap_svn_stream_compressed, METH_VARARGS, (char *)"svn_stream_compressed(svn_stream_t * stream, apr_pool_t pool) -> svn_stream_t *"},
{ (char *)"svn_stream_checksummed2", _wrap_svn_stream_checksummed2, METH_VARARGS, (char *)"\n"
- "svn_stream_checksummed2(svn_stream_t stream, svn_checksum_kind_t checksum_kind, \n"
- " svn_boolean_t read_all, apr_pool_t pool) -> svn_stream_t\n"
+ "svn_stream_checksummed2(svn_stream_t * stream, svn_checksum_kind_t checksum_kind, svn_boolean_t read_all, \n"
+ " apr_pool_t pool) -> svn_stream_t *\n"
""},
- { (char *)"svn_stream_read", _wrap_svn_stream_read, METH_VARARGS, (char *)"svn_stream_read(svn_stream_t stream, char buffer) -> svn_error_t"},
- { (char *)"svn_stream_skip", _wrap_svn_stream_skip, METH_VARARGS, (char *)"svn_stream_skip(svn_stream_t stream, apr_size_t len) -> svn_error_t"},
- { (char *)"svn_stream_write", _wrap_svn_stream_write, METH_VARARGS, (char *)"svn_stream_write(svn_stream_t stream, char data) -> svn_error_t"},
- { (char *)"svn_stream_close", _wrap_svn_stream_close, METH_VARARGS, (char *)"svn_stream_close(svn_stream_t stream) -> svn_error_t"},
- { (char *)"svn_stream_reset", _wrap_svn_stream_reset, METH_VARARGS, (char *)"svn_stream_reset(svn_stream_t stream) -> svn_error_t"},
- { (char *)"svn_stream_supports_mark", _wrap_svn_stream_supports_mark, METH_VARARGS, (char *)"svn_stream_supports_mark(svn_stream_t stream) -> svn_boolean_t"},
- { (char *)"svn_stream_mark", _wrap_svn_stream_mark, METH_VARARGS, (char *)"svn_stream_mark(svn_stream_t stream, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_stream_seek", _wrap_svn_stream_seek, METH_VARARGS, (char *)"svn_stream_seek(svn_stream_t stream, svn_stream_mark_t mark) -> svn_error_t"},
- { (char *)"svn_stream_tee", _wrap_svn_stream_tee, METH_VARARGS, (char *)"svn_stream_tee(svn_stream_t out1, svn_stream_t out2, apr_pool_t pool) -> svn_stream_t"},
- { (char *)"svn_stream_readline", _wrap_svn_stream_readline, METH_VARARGS, (char *)"svn_stream_readline(svn_stream_t stream, char eol, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_stream_copy3", _wrap_svn_stream_copy3, METH_VARARGS, (char *)"\n"
- "svn_stream_copy3(svn_stream_t _from, svn_stream_t to, svn_cancel_func_t cancel_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_stream_copy2", _wrap_svn_stream_copy2, METH_VARARGS, (char *)"\n"
- "svn_stream_copy2(svn_stream_t _from, svn_stream_t to, svn_cancel_func_t cancel_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ { (char *)"svn_stream_read", _wrap_svn_stream_read, METH_VARARGS, (char *)"svn_stream_read(svn_stream_t * stream, char * buffer) -> svn_error_t"},
+ { (char *)"svn_stream_skip", _wrap_svn_stream_skip, METH_VARARGS, (char *)"svn_stream_skip(svn_stream_t * stream, apr_size_t len) -> svn_error_t"},
+ { (char *)"svn_stream_write", _wrap_svn_stream_write, METH_VARARGS, (char *)"svn_stream_write(svn_stream_t * stream, char const * data) -> svn_error_t"},
+ { (char *)"svn_stream_close", _wrap_svn_stream_close, METH_VARARGS, (char *)"svn_stream_close(svn_stream_t * stream) -> svn_error_t"},
+ { (char *)"svn_stream_reset", _wrap_svn_stream_reset, METH_VARARGS, (char *)"svn_stream_reset(svn_stream_t * stream) -> svn_error_t"},
+ { (char *)"svn_stream_supports_mark", _wrap_svn_stream_supports_mark, METH_VARARGS, (char *)"svn_stream_supports_mark(svn_stream_t * stream) -> svn_boolean_t"},
+ { (char *)"svn_stream_mark", _wrap_svn_stream_mark, METH_VARARGS, (char *)"svn_stream_mark(svn_stream_t * stream, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_stream_seek", _wrap_svn_stream_seek, METH_VARARGS, (char *)"svn_stream_seek(svn_stream_t * stream, svn_stream_mark_t const * mark) -> svn_error_t"},
+ { (char *)"svn_stream_tee", _wrap_svn_stream_tee, METH_VARARGS, (char *)"svn_stream_tee(svn_stream_t * out1, svn_stream_t * out2, apr_pool_t pool) -> svn_stream_t *"},
+ { (char *)"svn_stream_puts", _wrap_svn_stream_puts, METH_VARARGS, (char *)"svn_stream_puts(svn_stream_t * stream, char const * str) -> svn_error_t"},
+ { (char *)"svn_stream_readline", _wrap_svn_stream_readline, METH_VARARGS, (char *)"svn_stream_readline(svn_stream_t * stream, char const * eol, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_stream_copy3", _wrap_svn_stream_copy3, METH_VARARGS, (char *)"svn_stream_copy3(svn_stream_t * _from, svn_stream_t * to, svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_stream_copy2", _wrap_svn_stream_copy2, METH_VARARGS, (char *)"svn_stream_copy2(svn_stream_t * _from, svn_stream_t * to, svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_stream_copy", _wrap_svn_stream_copy, METH_VARARGS, (char *)"svn_stream_copy(svn_stream_t * _from, svn_stream_t * to, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_stream_contents_same2", _wrap_svn_stream_contents_same2, METH_VARARGS, (char *)"svn_stream_contents_same2(svn_stream_t * stream1, svn_stream_t * stream2, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_stream_contents_same", _wrap_svn_stream_contents_same, METH_VARARGS, (char *)"svn_stream_contents_same(svn_stream_t * stream1, svn_stream_t * stream2, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_string_from_stream", _wrap_svn_string_from_stream, METH_VARARGS, (char *)"svn_string_from_stream(svn_stream_t * stream, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_stream_lazyopen_create", _wrap_svn_stream_lazyopen_create, METH_VARARGS, (char *)"\n"
+ "svn_stream_lazyopen_create(svn_stream_lazyopen_func_t open_func, void * open_baton, svn_boolean_t open_on_close, \n"
+ " apr_pool_t result_pool) -> svn_stream_t *\n"
""},
- { (char *)"svn_stream_copy", _wrap_svn_stream_copy, METH_VARARGS, (char *)"svn_stream_copy(svn_stream_t _from, svn_stream_t to, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_stream_contents_same2", _wrap_svn_stream_contents_same2, METH_VARARGS, (char *)"svn_stream_contents_same2(svn_stream_t stream1, svn_stream_t stream2, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_stream_contents_same", _wrap_svn_stream_contents_same, METH_VARARGS, (char *)"svn_stream_contents_same(svn_stream_t stream1, svn_stream_t stream2, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_string_from_stream", _wrap_svn_string_from_stream, METH_VARARGS, (char *)"svn_string_from_stream(svn_stream_t stream, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
- { (char *)"svn_stringbuf_from_file2", _wrap_svn_stringbuf_from_file2, METH_VARARGS, (char *)"svn_stringbuf_from_file2(char filename, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_stringbuf_from_file", _wrap_svn_stringbuf_from_file, METH_VARARGS, (char *)"svn_stringbuf_from_file(char filename, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_stringbuf_from_file2", _wrap_svn_stringbuf_from_file2, METH_VARARGS, (char *)"svn_stringbuf_from_file2(char const * filename, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_stringbuf_from_file", _wrap_svn_stringbuf_from_file, METH_VARARGS, (char *)"svn_stringbuf_from_file(char const * filename, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_stringbuf_from_aprfile", _wrap_svn_stringbuf_from_aprfile, METH_VARARGS, (char *)"svn_stringbuf_from_aprfile(apr_file_t file, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_io_remove_file2", _wrap_svn_io_remove_file2, METH_VARARGS, (char *)"svn_io_remove_file2(char path, svn_boolean_t ignore_enoent, apr_pool_t scratch_pool) -> svn_error_t"},
- { (char *)"svn_io_remove_file", _wrap_svn_io_remove_file, METH_VARARGS, (char *)"svn_io_remove_file(char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_io_remove_dir2", _wrap_svn_io_remove_dir2, METH_VARARGS, (char *)"\n"
- "svn_io_remove_dir2(char path, svn_boolean_t ignore_enoent, svn_cancel_func_t cancel_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_io_remove_dir", _wrap_svn_io_remove_dir, METH_VARARGS, (char *)"svn_io_remove_dir(char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_io_get_dirents3", _wrap_svn_io_get_dirents3, METH_VARARGS, (char *)"\n"
- "svn_io_get_dirents3(char path, svn_boolean_t only_check_type, apr_pool_t result_pool, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_io_stat_dirent", _wrap_svn_io_stat_dirent, METH_VARARGS, (char *)"\n"
- "svn_io_stat_dirent(char path, svn_boolean_t ignore_enoent, apr_pool_t result_pool, \n"
+ { (char *)"svn_io_remove_file2", _wrap_svn_io_remove_file2, METH_VARARGS, (char *)"svn_io_remove_file2(char const * path, svn_boolean_t ignore_enoent, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_io_remove_file", _wrap_svn_io_remove_file, METH_VARARGS, (char *)"svn_io_remove_file(char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_io_remove_dir2", _wrap_svn_io_remove_dir2, METH_VARARGS, (char *)"svn_io_remove_dir2(char const * path, svn_boolean_t ignore_enoent, svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_io_remove_dir", _wrap_svn_io_remove_dir, METH_VARARGS, (char *)"svn_io_remove_dir(char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_io_get_dirents3", _wrap_svn_io_get_dirents3, METH_VARARGS, (char *)"svn_io_get_dirents3(char const * path, svn_boolean_t only_check_type, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_io_stat_dirent2", _wrap_svn_io_stat_dirent2, METH_VARARGS, (char *)"\n"
+ "svn_io_stat_dirent2(char const * path, svn_boolean_t verify_truename, svn_boolean_t ignore_enoent, apr_pool_t result_pool, \n"
" apr_pool_t scratch_pool) -> svn_error_t\n"
""},
+ { (char *)"svn_io_stat_dirent", _wrap_svn_io_stat_dirent, METH_VARARGS, (char *)"svn_io_stat_dirent(char const * path, svn_boolean_t ignore_enoent, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
{ (char *)"svn_io_dir_walk2", _wrap_svn_io_dir_walk2, METH_VARARGS, (char *)"\n"
- "svn_io_dir_walk2(char dirname, apr_int32_t wanted, svn_io_walk_func_t walk_func, \n"
- " void walk_baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_io_dir_walk2(char const * dirname, apr_int32_t wanted, svn_io_walk_func_t walk_func, void * walk_baton, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
+ ""},
+ { (char *)"svn_io_start_cmd3", _wrap_svn_io_start_cmd3, METH_VARARGS, (char *)"\n"
+ "svn_io_start_cmd3(apr_proc_t * cmd_proc, char const * path, char const * cmd, char const *const * args, \n"
+ " char const *const * env, svn_boolean_t inherit, svn_boolean_t infile_pipe, \n"
+ " apr_file_t infile, svn_boolean_t outfile_pipe, apr_file_t outfile, svn_boolean_t errfile_pipe, \n"
+ " apr_file_t errfile, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_io_start_cmd2", _wrap_svn_io_start_cmd2, METH_VARARGS, (char *)"\n"
- "svn_io_start_cmd2(apr_proc_t cmd_proc, char path, char cmd, char args, \n"
- " svn_boolean_t inherit, svn_boolean_t infile_pipe, \n"
- " apr_file_t infile, svn_boolean_t outfile_pipe, \n"
+ "svn_io_start_cmd2(apr_proc_t * cmd_proc, char const * path, char const * cmd, char const *const * args, \n"
+ " svn_boolean_t inherit, svn_boolean_t infile_pipe, apr_file_t infile, svn_boolean_t outfile_pipe, \n"
" apr_file_t outfile, svn_boolean_t errfile_pipe, \n"
" apr_file_t errfile, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_io_run_diff2", _wrap_svn_io_run_diff2, METH_VARARGS, (char *)"\n"
- "svn_io_run_diff2(char dir, char user_args, int num_user_args, char label1, \n"
- " char label2, char _from, char to, apr_file_t outfile, \n"
- " apr_file_t errfile, char diff_cmd, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_io_run_diff2(char const * dir, char const *const * user_args, int num_user_args, char const * label1, \n"
+ " char const * label2, char const * _from, char const * to, apr_file_t outfile, \n"
+ " apr_file_t errfile, char const * diff_cmd, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_io_run_diff3_3", _wrap_svn_io_run_diff3_3, METH_VARARGS, (char *)"\n"
- "svn_io_run_diff3_3(char dir, char mine, char older, char yours, char mine_label, \n"
- " char older_label, char yours_label, \n"
- " apr_file_t merged, char diff3_cmd, apr_array_header_t user_args, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_io_run_diff3_3(char const * dir, char const * mine, char const * older, char const * yours, char const * mine_label, \n"
+ " char const * older_label, char const * yours_label, apr_file_t merged, \n"
+ " char const * diff3_cmd, apr_array_header_t user_args, apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_io_parse_mimetypes_file", _wrap_svn_io_parse_mimetypes_file, METH_VARARGS, (char *)"svn_io_parse_mimetypes_file(char mimetypes_file, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_io_detect_mimetype2", _wrap_svn_io_detect_mimetype2, METH_VARARGS, (char *)"svn_io_detect_mimetype2(char file, apr_hash_t mimetype_map, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_io_detect_mimetype", _wrap_svn_io_detect_mimetype, METH_VARARGS, (char *)"svn_io_detect_mimetype(char file, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_io_is_binary_data", _wrap_svn_io_is_binary_data, METH_VARARGS, (char *)"svn_io_is_binary_data(void buf, apr_size_t len) -> svn_boolean_t"},
+ { (char *)"svn_io_parse_mimetypes_file", _wrap_svn_io_parse_mimetypes_file, METH_VARARGS, (char *)"svn_io_parse_mimetypes_file(char const * mimetypes_file, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_io_detect_mimetype2", _wrap_svn_io_detect_mimetype2, METH_VARARGS, (char *)"svn_io_detect_mimetype2(char const * file, apr_hash_t mimetype_map, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_io_detect_mimetype", _wrap_svn_io_detect_mimetype, METH_VARARGS, (char *)"svn_io_detect_mimetype(char const * file, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_io_is_binary_data", _wrap_svn_io_is_binary_data, METH_VARARGS, (char *)"svn_io_is_binary_data(void const * buf, apr_size_t len) -> svn_boolean_t"},
{ (char *)"svn_io_file_putc", _wrap_svn_io_file_putc, METH_VARARGS, (char *)"svn_io_file_putc(char ch, apr_file_t file, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_io_file_read_full2", _wrap_svn_io_file_read_full2, METH_VARARGS, (char *)"svn_io_file_read_full2(apr_file_t file, void buf, apr_size_t nbytes, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_io_file_read_full2", _wrap_svn_io_file_read_full2, METH_VARARGS, (char *)"svn_io_file_read_full2(apr_file_t file, void * buf, apr_size_t nbytes, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_io_write_unique", _wrap_svn_io_write_unique, METH_VARARGS, (char *)"\n"
- "svn_io_write_unique(char dirpath, void buf, apr_size_t nbytes, svn_io_file_del_t delete_when, \n"
+ "svn_io_write_unique(char const * dirpath, void const * buf, apr_size_t nbytes, svn_io_file_del_t delete_when, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_io_file_trunc", _wrap_svn_io_file_trunc, METH_VARARGS, (char *)"svn_io_file_trunc(apr_file_t file, apr_off_t offset, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_io_dir_close", _wrap_svn_io_dir_close, METH_VARARGS, (char *)"svn_io_dir_close(apr_dir_t thedir) -> svn_error_t"},
+ { (char *)"svn_io_dir_close", _wrap_svn_io_dir_close, METH_VARARGS, (char *)"svn_io_dir_close(apr_dir_t * thedir) -> svn_error_t"},
{ (char *)"svn_io_file_name_get", _wrap_svn_io_file_name_get, METH_VARARGS, (char *)"svn_io_file_name_get(apr_file_t file, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_io_file_readline", _wrap_svn_io_file_readline, METH_VARARGS, (char *)"svn_io_file_readline(apr_file_t file, apr_size_t max_len, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
{ (char *)"svn_stream_t_swigregister", svn_stream_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_stream_mark_t_swigregister", svn_stream_mark_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_read_invoke_fn", _wrap_svn_read_invoke_fn, METH_VARARGS, (char *)"svn_read_invoke_fn(svn_read_fn_t _obj, void baton, char buffer) -> svn_error_t"},
- { (char *)"svn_stream_invoke_skip_fn", _wrap_svn_stream_invoke_skip_fn, METH_VARARGS, (char *)"svn_stream_invoke_skip_fn(svn_stream_skip_fn_t _obj, void baton, apr_size_t len) -> svn_error_t"},
- { (char *)"svn_write_invoke_fn", _wrap_svn_write_invoke_fn, METH_VARARGS, (char *)"svn_write_invoke_fn(svn_write_fn_t _obj, void baton, char data) -> svn_error_t"},
- { (char *)"svn_close_invoke_fn", _wrap_svn_close_invoke_fn, METH_VARARGS, (char *)"svn_close_invoke_fn(svn_close_fn_t _obj, void baton) -> svn_error_t"},
- { (char *)"svn_stream_invoke_mark_fn", _wrap_svn_stream_invoke_mark_fn, METH_VARARGS, (char *)"svn_stream_invoke_mark_fn(svn_stream_mark_fn_t _obj, void baton, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_stream_invoke_seek_fn", _wrap_svn_stream_invoke_seek_fn, METH_VARARGS, (char *)"svn_stream_invoke_seek_fn(svn_stream_seek_fn_t _obj, void baton, svn_stream_mark_t mark) -> svn_error_t"},
+ { (char *)"svn_read_invoke_fn", _wrap_svn_read_invoke_fn, METH_VARARGS, (char *)"svn_read_invoke_fn(svn_read_fn_t _obj, void * baton, char * buffer) -> svn_error_t"},
+ { (char *)"svn_stream_invoke_skip_fn", _wrap_svn_stream_invoke_skip_fn, METH_VARARGS, (char *)"svn_stream_invoke_skip_fn(svn_stream_skip_fn_t _obj, void * baton, apr_size_t len) -> svn_error_t"},
+ { (char *)"svn_write_invoke_fn", _wrap_svn_write_invoke_fn, METH_VARARGS, (char *)"svn_write_invoke_fn(svn_write_fn_t _obj, void * baton, char const * data) -> svn_error_t"},
+ { (char *)"svn_close_invoke_fn", _wrap_svn_close_invoke_fn, METH_VARARGS, (char *)"svn_close_invoke_fn(svn_close_fn_t _obj, void * baton) -> svn_error_t"},
+ { (char *)"svn_stream_invoke_mark_fn", _wrap_svn_stream_invoke_mark_fn, METH_VARARGS, (char *)"svn_stream_invoke_mark_fn(svn_stream_mark_fn_t _obj, void * baton, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_stream_invoke_seek_fn", _wrap_svn_stream_invoke_seek_fn, METH_VARARGS, (char *)"svn_stream_invoke_seek_fn(svn_stream_seek_fn_t _obj, void * baton, svn_stream_mark_t const * mark) -> svn_error_t"},
+ { (char *)"svn_stream_invoke_lazyopen_func", _wrap_svn_stream_invoke_lazyopen_func, METH_VARARGS, (char *)"svn_stream_invoke_lazyopen_func(svn_stream_lazyopen_func_t _obj, void * baton, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
{ (char *)"svn_io_invoke_walk_func", _wrap_svn_io_invoke_walk_func, METH_VARARGS, (char *)"\n"
- "svn_io_invoke_walk_func(svn_io_walk_func_t _obj, void baton, char path, apr_finfo_t finfo, \n"
+ "svn_io_invoke_walk_func(svn_io_walk_func_t _obj, void * baton, char const * path, apr_finfo_t const * finfo, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_read_fn_t_swigregister", svn_read_fn_t_swigregister, METH_VARARGS, NULL},
@@ -29394,20 +33875,44 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_close_fn_t_swigregister", svn_close_fn_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_stream_mark_fn_t_swigregister", svn_stream_mark_fn_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_stream_seek_fn_t_swigregister", svn_stream_seek_fn_t_swigregister, METH_VARARGS, NULL},
+ { (char *)"svn_stream_lazyopen_func_t_swigregister", svn_stream_lazyopen_func_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_io_walk_func_t_swigregister", svn_io_walk_func_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_swig_py_set_application_pool", _wrap_svn_swig_py_set_application_pool, METH_VARARGS, (char *)"svn_swig_py_set_application_pool(PyObject py_pool, apr_pool_t pool)"},
+ { (char *)"svn_checksum_t_digest_set", _wrap_svn_checksum_t_digest_set, METH_VARARGS, (char *)"svn_checksum_t_digest_set(svn_checksum_t self, unsigned char const * digest)"},
+ { (char *)"svn_checksum_t_digest_get", _wrap_svn_checksum_t_digest_get, METH_VARARGS, (char *)"svn_checksum_t_digest_get(svn_checksum_t self) -> unsigned char const *"},
+ { (char *)"svn_checksum_t_kind_set", _wrap_svn_checksum_t_kind_set, METH_VARARGS, (char *)"svn_checksum_t_kind_set(svn_checksum_t self, svn_checksum_kind_t kind)"},
+ { (char *)"svn_checksum_t_kind_get", _wrap_svn_checksum_t_kind_get, METH_VARARGS, (char *)"svn_checksum_t_kind_get(svn_checksum_t self) -> svn_checksum_kind_t"},
+ { (char *)"new_svn_checksum_t", _wrap_new_svn_checksum_t, METH_VARARGS, (char *)"new_svn_checksum_t() -> svn_checksum_t"},
+ { (char *)"delete_svn_checksum_t", _wrap_delete_svn_checksum_t, METH_VARARGS, (char *)"delete_svn_checksum_t(svn_checksum_t self)"},
+ { (char *)"svn_checksum_t_swigregister", svn_checksum_t_swigregister, METH_VARARGS, NULL},
+ { (char *)"svn_checksum_create", _wrap_svn_checksum_create, METH_VARARGS, (char *)"svn_checksum_create(svn_checksum_kind_t kind, apr_pool_t pool) -> svn_checksum_t"},
+ { (char *)"svn_checksum_clear", _wrap_svn_checksum_clear, METH_VARARGS, (char *)"svn_checksum_clear(svn_checksum_t checksum) -> svn_error_t"},
+ { (char *)"svn_checksum_match", _wrap_svn_checksum_match, METH_VARARGS, (char *)"svn_checksum_match(svn_checksum_t checksum1, svn_checksum_t checksum2) -> svn_boolean_t"},
+ { (char *)"svn_checksum_dup", _wrap_svn_checksum_dup, METH_VARARGS, (char *)"svn_checksum_dup(svn_checksum_t checksum, apr_pool_t pool) -> svn_checksum_t"},
+ { (char *)"svn_checksum_to_cstring_display", _wrap_svn_checksum_to_cstring_display, METH_VARARGS, (char *)"svn_checksum_to_cstring_display(svn_checksum_t checksum, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_checksum_to_cstring", _wrap_svn_checksum_to_cstring, METH_VARARGS, (char *)"svn_checksum_to_cstring(svn_checksum_t checksum, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_checksum_serialize", _wrap_svn_checksum_serialize, METH_VARARGS, (char *)"svn_checksum_serialize(svn_checksum_t checksum, apr_pool_t result_pool, apr_pool_t scratch_pool) -> char const *"},
+ { (char *)"svn_checksum_deserialize", _wrap_svn_checksum_deserialize, METH_VARARGS, (char *)"svn_checksum_deserialize(char const * data, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_checksum_parse_hex", _wrap_svn_checksum_parse_hex, METH_VARARGS, (char *)"svn_checksum_parse_hex(svn_checksum_kind_t kind, char const * hex, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_checksum", _wrap_svn_checksum, METH_VARARGS, (char *)"svn_checksum(svn_checksum_kind_t kind, void const * data, apr_size_t len, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_checksum_empty_checksum", _wrap_svn_checksum_empty_checksum, METH_VARARGS, (char *)"svn_checksum_empty_checksum(svn_checksum_kind_t kind, apr_pool_t pool) -> svn_checksum_t"},
+ { (char *)"svn_checksum_ctx_create", _wrap_svn_checksum_ctx_create, METH_VARARGS, (char *)"svn_checksum_ctx_create(svn_checksum_kind_t kind, apr_pool_t pool) -> svn_checksum_ctx_t *"},
+ { (char *)"svn_checksum_update", _wrap_svn_checksum_update, METH_VARARGS, (char *)"svn_checksum_update(svn_checksum_ctx_t * ctx, void const * data, apr_size_t len) -> svn_error_t"},
+ { (char *)"svn_checksum_final", _wrap_svn_checksum_final, METH_VARARGS, (char *)"svn_checksum_final(svn_checksum_ctx_t const * ctx, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_checksum_size", _wrap_svn_checksum_size, METH_VARARGS, (char *)"svn_checksum_size(svn_checksum_t checksum) -> apr_size_t"},
+ { (char *)"svn_checksum_is_empty_checksum", _wrap_svn_checksum_is_empty_checksum, METH_VARARGS, (char *)"svn_checksum_is_empty_checksum(svn_checksum_t checksum) -> svn_boolean_t"},
+ { (char *)"svn_checksum_mismatch_err", _wrap_svn_checksum_mismatch_err, METH_VARARGS, (char *)"svn_checksum_mismatch_err(svn_checksum_t expected, svn_checksum_t actual, apr_pool_t scratch_pool, char const * fmt) -> svn_error_t"},
+ { (char *)"svn_checksum_ctx_t_swigregister", svn_checksum_ctx_t_swigregister, METH_VARARGS, NULL},
+ { (char *)"svn_auth_set_gnome_keyring_unlock_prompt_func", _wrap_svn_auth_set_gnome_keyring_unlock_prompt_func, METH_VARARGS, (char *)"svn_auth_set_gnome_keyring_unlock_prompt_func(svn_auth_baton_t * ab, svn_auth_gnome_keyring_unlock_prompt_func_t prompt_func)"},
+ { (char *)"svn_swig_py_set_application_pool", _wrap_svn_swig_py_set_application_pool, METH_VARARGS, (char *)"svn_swig_py_set_application_pool(PyObject * py_pool, apr_pool_t pool)"},
{ (char *)"svn_swig_py_clear_application_pool", _wrap_svn_swig_py_clear_application_pool, METH_VARARGS, (char *)"svn_swig_py_clear_application_pool()"},
{ (char *)"apr_array_header_t_swigregister", apr_array_header_t_swigregister, METH_VARARGS, NULL},
{ (char *)"apr_file_t_swigregister", apr_file_t_swigregister, METH_VARARGS, NULL},
{ (char *)"apr_hash_t_swigregister", apr_hash_t_swigregister, METH_VARARGS, NULL},
{ (char *)"apr_pool_t_swigregister", apr_pool_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_swig_mergeinfo_merge", _wrap_svn_swig_mergeinfo_merge, METH_VARARGS, (char *)"svn_swig_mergeinfo_merge(apr_hash_t mergeinfo_inout, apr_hash_t changes, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_swig_mergeinfo_sort", _wrap_svn_swig_mergeinfo_sort, METH_VARARGS, (char *)"svn_swig_mergeinfo_sort(apr_hash_t mergeinfo_inout, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_swig_rangelist_merge", _wrap_svn_swig_rangelist_merge, METH_VARARGS, (char *)"\n"
- "svn_swig_rangelist_merge(apr_array_header_t rangelist_inout, apr_array_header_t changes, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_swig_rangelist_reverse", _wrap_svn_swig_rangelist_reverse, METH_VARARGS, (char *)"svn_swig_rangelist_reverse(apr_array_header_t rangelist_inout, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_swig_mergeinfo_merge", _wrap_svn_swig_mergeinfo_merge, METH_VARARGS, (char *)"svn_swig_mergeinfo_merge(apr_hash_t ** mergeinfo_inout, apr_hash_t changes, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_swig_mergeinfo_sort", _wrap_svn_swig_mergeinfo_sort, METH_VARARGS, (char *)"svn_swig_mergeinfo_sort(apr_hash_t ** mergeinfo_inout, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_swig_rangelist_merge", _wrap_svn_swig_rangelist_merge, METH_VARARGS, (char *)"svn_swig_rangelist_merge(svn_rangelist_t ** rangelist_inout, apr_array_header_t changes, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_swig_rangelist_reverse", _wrap_svn_swig_rangelist_reverse, METH_VARARGS, (char *)"svn_swig_rangelist_reverse(svn_rangelist_t ** rangelist_inout, apr_pool_t pool) -> svn_error_t"},
{ NULL, NULL, 0, NULL }
};
@@ -29416,7 +33921,7 @@ static PyMethodDef SwigMethods[] = {
static swig_type_info _swigt__p_FILE = {"_p_FILE", "FILE *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_allocator_t = {"_p_apr_allocator_t", "apr_allocator_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *|svn_rangelist_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_dir_t = {"_p_apr_dir_t", "apr_dir_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_file_t = {"_p_apr_file_t", "apr_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_finfo_t = {"_p_apr_finfo_t", "apr_finfo_t *", 0, 0, (void*)0, 0};
@@ -29432,12 +33937,14 @@ static swig_type_info _swigt__p_apr_proc_t = {"_p_apr_proc_t", "apr_proc_t *", 0
static swig_type_info _swigt__p_apr_size_t = {"_p_apr_size_t", "apr_size_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_opt_subcommand_t *|struct svn_error_t *(*)(apr_getopt_t *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_p_char_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_char_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t", "svn_auth_gnome_keyring_unlock_prompt_func_t|struct svn_error_t *(*)(char **,char const *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_struct_svn_auth_provider_object_t_p_apr_pool_t__void = {"_p_f_p_p_struct_svn_auth_provider_object_t_p_apr_pool_t__void", "svn_auth_simple_provider_func_t|svn_auth_ssl_client_cert_pw_provider_func_t|void (*)(struct svn_auth_provider_object_t **,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t", "svn_auth_simple_prompt_func_t|struct svn_error_t *(*)(svn_auth_cred_simple_t **,void *,char const *,char const *,svn_boolean_t,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t", "svn_auth_ssl_client_cert_pw_prompt_func_t|struct svn_error_t *(*)(svn_auth_cred_ssl_client_cert_pw_t **,void *,char const *,svn_boolean_t,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t", "svn_auth_ssl_client_cert_prompt_func_t|struct svn_error_t *(*)(svn_auth_cred_ssl_client_cert_t **,void *,char const *,svn_boolean_t,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(svn_auth_cred_ssl_server_trust_t **,void *,char const *,apr_uint32_t,svn_auth_ssl_server_cert_info_t const *,svn_boolean_t,apr_pool_t *)|svn_auth_ssl_server_trust_prompt_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(svn_auth_cred_username_t **,void *,char const *,svn_boolean_t,apr_pool_t *)|svn_auth_username_prompt_func_t", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(svn_stream_t **,void *,apr_pool_t *,apr_pool_t *)|svn_stream_lazyopen_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void **,void **,void *,apr_hash_t *,char const *,apr_pool_t *)|svn_error_t *(*)(void **,void **,void *,apr_hash_t *,char const *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t", "svn_error_t *(*)(void **,void *,void *,apr_hash_t *,char const *,apr_pool_t *)|struct svn_error_t *(*)(void **,void *,void *,apr_hash_t *,char const *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_q_const__char_p_q_const__char_p_void__int = {"_p_f_p_q_const__char_p_q_const__char_p_void__int", "svn_config_enumerator_t|int (*)(char const *,char const *,void *)", 0, 0, (void*)0, 0};
@@ -29446,6 +33953,7 @@ static swig_type_info _swigt__p_f_p_q_const__char_p_void__int = {"_p_f_p_q_const
static swig_type_info _swigt__p_f_p_q_const__char_p_void_p_apr_pool_t__int = {"_p_f_p_q_const__char_p_void_p_apr_pool_t__int", "int (*)(char const *,void *,apr_pool_t *)|svn_config_section_enumerator2_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_commit_callback2_t|struct svn_error_t *(*)(svn_commit_info_t const *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(svn_boolean_t *,char const *,void *,apr_pool_t *)|svn_auth_plaintext_prompt_func_t|svn_auth_plaintext_passphrase_prompt_func_t", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(svn_boolean_t *,void *,char const *,char const *,apr_hash_t *,apr_pool_t *)|svn_config_auth_walk_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t", "svn_error_t *(*)(svn_boolean_t *,void *,void *,apr_hash_t *,char const *,apr_pool_t *)|struct svn_error_t *(*)(svn_boolean_t *,void *,void *,apr_hash_t *,char const *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(svn_location_segment_t *,void *,apr_pool_t *)|svn_location_segment_receiver_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void__p_svn_error_t = {"_p_f_p_void__p_svn_error_t", "svn_cancel_func_t|svn_close_fn_t|struct svn_error_t *(*)(void *)", 0, 0, (void*)0, 0};
@@ -29461,7 +33969,7 @@ static swig_type_info _swigt__p_f_svn_revnum_t_p_q_const__char_p_q_const__char_p
static swig_type_info _swigt__p_f_void__p_svn_version_t = {"_p_f_void__p_svn_version_t", "svn_version_func_t|struct svn_version_t *(*)(void)|svn_version_t *(*)(void)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_int = {"_p_int", "int *|svn_boolean_t *|apr_status_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_long = {"_p_long", "long *|svn_revnum_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_p_apr_array_header_t = {"_p_p_apr_array_header_t", "apr_array_header_t **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_apr_array_header_t = {"_p_p_apr_array_header_t", "apr_array_header_t **|svn_rangelist_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_apr_file_t = {"_p_p_apr_file_t", "apr_file_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_apr_hash_t = {"_p_p_apr_hash_t", "apr_hash_t **|svn_mergeinfo_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0};
@@ -29472,12 +33980,14 @@ static swig_type_info _swigt__p_p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_voi
static swig_type_info _swigt__p_p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(svn_auth_cred_ssl_client_cert_t **,void *,char const *,svn_boolean_t,apr_pool_t *)|svn_auth_ssl_client_cert_prompt_func_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(svn_auth_cred_ssl_server_trust_t **,void *,char const *,apr_uint32_t,svn_auth_ssl_server_cert_info_t const *,svn_boolean_t,apr_pool_t *)|svn_auth_ssl_server_trust_prompt_func_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(svn_auth_cred_username_t **,void *,char const *,svn_boolean_t,apr_pool_t *)|svn_auth_username_prompt_func_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(svn_stream_t **,void *,apr_pool_t *,apr_pool_t *)|svn_stream_lazyopen_func_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_q_const__char_p_q_const__char_p_void__int = {"_p_p_f_p_q_const__char_p_q_const__char_p_void__int", "svn_config_enumerator_t *|int (**)(char const *,char const *,void *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_q_const__char_p_q_const__char_p_void_p_apr_pool_t__int = {"_p_p_f_p_q_const__char_p_q_const__char_p_void_p_apr_pool_t__int", "int (**)(char const *,char const *,void *,apr_pool_t *)|svn_config_enumerator2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_q_const__char_p_void__int = {"_p_p_f_p_q_const__char_p_void__int", "svn_config_section_enumerator_t *|int (**)(char const *,void *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_q_const__char_p_void_p_apr_pool_t__int = {"_p_p_f_p_q_const__char_p_void_p_apr_pool_t__int", "int (**)(char const *,void *,apr_pool_t *)|svn_config_section_enumerator2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(svn_commit_info_t const *,void *,apr_pool_t *)|svn_commit_callback2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(svn_boolean_t *,char const *,void *,apr_pool_t *)|svn_auth_plaintext_prompt_func_t *|svn_auth_plaintext_passphrase_prompt_func_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(svn_boolean_t *,void *,char const *,char const *,apr_hash_t *,apr_pool_t *)|svn_config_auth_walk_func_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(svn_location_segment_t *,void *,apr_pool_t *)|svn_location_segment_receiver_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void__p_svn_error_t = {"_p_p_f_p_void__p_svn_error_t", "svn_cancel_func_t *|svn_close_fn_t *|struct svn_error_t *(**)(void *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_apr_size_t__p_svn_error_t = {"_p_p_f_p_void_apr_size_t__p_svn_error_t", "struct svn_error_t *(**)(void *,apr_size_t)|svn_stream_skip_fn_t *", 0, 0, (void*)0, 0};
@@ -29498,7 +34008,7 @@ static swig_type_info _swigt__p_p_svn_auth_cred_ssl_server_trust_t = {"_p_p_svn_
static swig_type_info _swigt__p_p_svn_auth_cred_username_t = {"_p_p_svn_auth_cred_username_t", "struct svn_auth_cred_username_t **|svn_auth_cred_username_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_auth_iterstate_t = {"_p_p_svn_auth_iterstate_t", "struct svn_auth_iterstate_t **|svn_auth_iterstate_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_auth_provider_object_t = {"_p_p_svn_auth_provider_object_t", "struct svn_auth_provider_object_t **|svn_auth_provider_object_t **", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_p_svn_checksum_t = {"_p_p_svn_checksum_t", "svn_checksum_t **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_svn_checksum_t = {"_p_p_svn_checksum_t", "struct svn_checksum_t **|svn_checksum_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_config_t = {"_p_p_svn_config_t", "struct svn_config_t **|svn_config_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_io_dirent2_t = {"_p_p_svn_io_dirent2_t", "struct svn_io_dirent2_t **|svn_io_dirent2_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_stream_mark_t = {"_p_p_svn_stream_mark_t", "struct svn_stream_mark_t **|svn_stream_mark_t **", 0, 0, (void*)0, 0};
@@ -29516,7 +34026,9 @@ static swig_type_info _swigt__p_svn_auth_iterstate_t = {"_p_svn_auth_iterstate_t
static swig_type_info _swigt__p_svn_auth_provider_object_t = {"_p_svn_auth_provider_object_t", "struct svn_auth_provider_object_t *|svn_auth_provider_object_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_provider_t = {"_p_svn_auth_provider_t", "struct svn_auth_provider_t *|svn_auth_provider_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_ssl_server_cert_info_t = {"_p_svn_auth_ssl_server_cert_info_t", "struct svn_auth_ssl_server_cert_info_t *|svn_auth_ssl_server_cert_info_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_ctx_t = {"_p_svn_checksum_ctx_t", "struct svn_checksum_ctx_t *|svn_checksum_ctx_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "enum svn_checksum_kind_t *|svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "struct svn_checksum_t *|svn_checksum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_commit_info_t = {"_p_svn_commit_info_t", "struct svn_commit_info_t *|svn_commit_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_config_t = {"_p_svn_config_t", "struct svn_config_t *|svn_config_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_depth_t = {"_p_svn_depth_t", "enum svn_depth_t *|svn_depth_t *", 0, 0, (void*)0, 0};
@@ -29540,6 +34052,7 @@ static swig_type_info _swigt__p_svn_opt_revision_value_t = {"_p_svn_opt_revision
static swig_type_info _swigt__p_svn_opt_subcommand_desc2_t = {"_p_svn_opt_subcommand_desc2_t", "struct svn_opt_subcommand_desc2_t *|svn_opt_subcommand_desc2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_opt_subcommand_desc2_t_desc_overrides = {"_p_svn_opt_subcommand_desc2_t_desc_overrides", "svn_opt_subcommand_desc2_t_desc_overrides *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_opt_subcommand_desc_t = {"_p_svn_opt_subcommand_desc_t", "struct svn_opt_subcommand_desc_t *|svn_opt_subcommand_desc_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_prop_inherited_item_t = {"_p_svn_prop_inherited_item_t", "struct svn_prop_inherited_item_t *|svn_prop_inherited_item_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_kind = {"_p_svn_prop_kind", "svn_prop_kind_t *|enum svn_prop_kind *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_t = {"_p_svn_prop_t", "struct svn_prop_t *|svn_prop_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_stream_mark_t = {"_p_svn_stream_mark_t", "struct svn_stream_mark_t *|svn_stream_mark_t *", 0, 0, (void*)0, 0};
@@ -29548,7 +34061,11 @@ static swig_type_info _swigt__p_svn_string_t = {"_p_svn_string_t", "struct svn_s
static swig_type_info _swigt__p_svn_stringbuf_t = {"_p_svn_stringbuf_t", "struct svn_stringbuf_t *|svn_stringbuf_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_tristate_t = {"_p_svn_tristate_t", "enum svn_tristate_t *|svn_tristate_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_checklist_t = {"_p_svn_version_checklist_t", "struct svn_version_checklist_t *|svn_version_checklist_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_linked_lib_t = {"_p_svn_version_ext_linked_lib_t", "struct svn_version_ext_linked_lib_t *|svn_version_ext_linked_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_loaded_lib_t = {"_p_svn_version_ext_loaded_lib_t", "struct svn_version_ext_loaded_lib_t *|svn_version_ext_loaded_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_extended_t = {"_p_svn_version_extended_t", "struct svn_version_extended_t *|svn_version_extended_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_t = {"_p_svn_version_t", "struct svn_version_t *|svn_version_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_wc_external_item2_t = {"_p_svn_wc_external_item2_t", "svn_wc_external_item2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_char = {"_p_unsigned_char", "unsigned char *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_long = {"_p_unsigned_long", "unsigned long *|svn_linenum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_void = {"_p_void", "void *", 0, 0, (void*)0, 0};
@@ -29572,12 +34089,14 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_apr_size_t,
&_swigt__p_char,
&_swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_f_p_p_char_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_p_struct_svn_auth_provider_object_t_p_apr_pool_t__void,
&_swigt__p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_q_const__char_p_q_const__char_p_void__int,
@@ -29586,6 +34105,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_f_p_q_const__char_p_void_p_apr_pool_t__int,
&_swigt__p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void__p_svn_error_t,
@@ -29612,12 +34132,14 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_q_const__char_p_q_const__char_p_void__int,
&_swigt__p_p_f_p_q_const__char_p_q_const__char_p_void_p_apr_pool_t__int,
&_swigt__p_p_f_p_q_const__char_p_void__int,
&_swigt__p_p_f_p_q_const__char_p_void_p_apr_pool_t__int,
&_swigt__p_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_void__p_svn_error_t,
&_swigt__p_p_f_p_void_apr_size_t__p_svn_error_t,
@@ -29656,7 +34178,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_auth_provider_object_t,
&_swigt__p_svn_auth_provider_t,
&_swigt__p_svn_auth_ssl_server_cert_info_t,
+ &_swigt__p_svn_checksum_ctx_t,
&_swigt__p_svn_checksum_kind_t,
+ &_swigt__p_svn_checksum_t,
&_swigt__p_svn_commit_info_t,
&_swigt__p_svn_config_t,
&_swigt__p_svn_depth_t,
@@ -29680,6 +34204,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_opt_subcommand_desc2_t,
&_swigt__p_svn_opt_subcommand_desc2_t_desc_overrides,
&_swigt__p_svn_opt_subcommand_desc_t,
+ &_swigt__p_svn_prop_inherited_item_t,
&_swigt__p_svn_prop_kind,
&_swigt__p_svn_prop_t,
&_swigt__p_svn_stream_mark_t,
@@ -29688,7 +34213,11 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_stringbuf_t,
&_swigt__p_svn_tristate_t,
&_swigt__p_svn_version_checklist_t,
+ &_swigt__p_svn_version_ext_linked_lib_t,
+ &_swigt__p_svn_version_ext_loaded_lib_t,
+ &_swigt__p_svn_version_extended_t,
&_swigt__p_svn_version_t,
+ &_swigt__p_svn_wc_external_item2_t,
&_swigt__p_unsigned_char,
&_swigt__p_unsigned_long,
&_swigt__p_void,
@@ -29712,12 +34241,14 @@ static swig_cast_info _swigc__p_apr_proc_t[] = { {&_swigt__p_apr_proc_t, 0, 0,
static swig_cast_info _swigc__p_apr_size_t[] = { {&_swigt__p_apr_size_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_p_char_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_char_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_struct_svn_auth_provider_object_t_p_apr_pool_t__void[] = { {&_swigt__p_f_p_p_struct_svn_auth_provider_object_t_p_apr_pool_t__void, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_q_const__char_p_q_const__char_p_void__int[] = { {&_swigt__p_f_p_q_const__char_p_q_const__char_p_void__int, 0, 0, 0},{0, 0, 0, 0}};
@@ -29726,6 +34257,7 @@ static swig_cast_info _swigc__p_f_p_q_const__char_p_void__int[] = { {&_swigt__p
static swig_cast_info _swigc__p_f_p_q_const__char_p_void_p_apr_pool_t__int[] = { {&_swigt__p_f_p_q_const__char_p_void_p_apr_pool_t__int, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void__p_svn_error_t[] = { {&_swigt__p_f_p_void__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -29752,12 +34284,14 @@ static swig_cast_info _swigc__p_p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_voi
static swig_cast_info _swigc__p_p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_q_const__char_p_q_const__char_p_void__int[] = { {&_swigt__p_p_f_p_q_const__char_p_q_const__char_p_void__int, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_q_const__char_p_q_const__char_p_void_p_apr_pool_t__int[] = { {&_swigt__p_p_f_p_q_const__char_p_q_const__char_p_void_p_apr_pool_t__int, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_q_const__char_p_void__int[] = { {&_swigt__p_p_f_p_q_const__char_p_void__int, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_q_const__char_p_void_p_apr_pool_t__int[] = { {&_swigt__p_p_f_p_q_const__char_p_void_p_apr_pool_t__int, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void__p_svn_error_t[] = { {&_swigt__p_p_f_p_void__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void_apr_size_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_apr_size_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -29796,7 +34330,9 @@ static swig_cast_info _swigc__p_svn_auth_iterstate_t[] = { {&_swigt__p_svn_auth
static swig_cast_info _swigc__p_svn_auth_provider_object_t[] = { {&_swigt__p_svn_auth_provider_object_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_provider_t[] = { {&_swigt__p_svn_auth_provider_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_ssl_server_cert_info_t[] = { {&_swigt__p_svn_auth_ssl_server_cert_info_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_ctx_t[] = { {&_swigt__p_svn_checksum_ctx_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_checksum_kind_t[] = { {&_swigt__p_svn_checksum_kind_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_t[] = { {&_swigt__p_svn_checksum_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_commit_info_t[] = { {&_swigt__p_svn_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_config_t[] = { {&_swigt__p_svn_config_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_depth_t[] = { {&_swigt__p_svn_depth_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -29820,6 +34356,7 @@ static swig_cast_info _swigc__p_svn_opt_revision_value_t[] = { {&_swigt__p_svn_
static swig_cast_info _swigc__p_svn_opt_subcommand_desc2_t[] = { {&_swigt__p_svn_opt_subcommand_desc2_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_opt_subcommand_desc2_t_desc_overrides[] = { {&_swigt__p_svn_opt_subcommand_desc2_t_desc_overrides, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_opt_subcommand_desc_t[] = { {&_swigt__p_svn_opt_subcommand_desc_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_prop_inherited_item_t[] = { {&_swigt__p_svn_prop_inherited_item_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_kind[] = { {&_swigt__p_svn_prop_kind, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_t[] = { {&_swigt__p_svn_prop_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_stream_mark_t[] = { {&_swigt__p_svn_stream_mark_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -29828,7 +34365,11 @@ static swig_cast_info _swigc__p_svn_string_t[] = { {&_swigt__p_svn_string_t, 0,
static swig_cast_info _swigc__p_svn_stringbuf_t[] = { {&_swigt__p_svn_stringbuf_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_tristate_t[] = { {&_swigt__p_svn_tristate_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_checklist_t[] = { {&_swigt__p_svn_version_checklist_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_linked_lib_t[] = { {&_swigt__p_svn_version_ext_linked_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_loaded_lib_t[] = { {&_swigt__p_svn_version_ext_loaded_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_extended_t[] = { {&_swigt__p_svn_version_extended_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_t[] = { {&_swigt__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_wc_external_item2_t[] = { {&_swigt__p_svn_wc_external_item2_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_char[] = { {&_swigt__p_unsigned_char, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_long[] = { {&_swigt__p_unsigned_long, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_void[] = { {&_swigt__p_void, 0, 0, 0},{0, 0, 0, 0}};
@@ -29852,12 +34393,14 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_apr_size_t,
_swigc__p_char,
_swigc__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_f_p_p_char_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_p_struct_svn_auth_provider_object_t_p_apr_pool_t__void,
_swigc__p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_q_const__char_p_q_const__char_p_void__int,
@@ -29866,6 +34409,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_f_p_q_const__char_p_void_p_apr_pool_t__int,
_swigc__p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void__p_svn_error_t,
@@ -29892,12 +34436,14 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_q_const__char_p_q_const__char_p_void__int,
_swigc__p_p_f_p_q_const__char_p_q_const__char_p_void_p_apr_pool_t__int,
_swigc__p_p_f_p_q_const__char_p_void__int,
_swigc__p_p_f_p_q_const__char_p_void_p_apr_pool_t__int,
_swigc__p_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_void__p_svn_error_t,
_swigc__p_p_f_p_void_apr_size_t__p_svn_error_t,
@@ -29936,7 +34482,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_auth_provider_object_t,
_swigc__p_svn_auth_provider_t,
_swigc__p_svn_auth_ssl_server_cert_info_t,
+ _swigc__p_svn_checksum_ctx_t,
_swigc__p_svn_checksum_kind_t,
+ _swigc__p_svn_checksum_t,
_swigc__p_svn_commit_info_t,
_swigc__p_svn_config_t,
_swigc__p_svn_depth_t,
@@ -29960,6 +34508,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_opt_subcommand_desc2_t,
_swigc__p_svn_opt_subcommand_desc2_t_desc_overrides,
_swigc__p_svn_opt_subcommand_desc_t,
+ _swigc__p_svn_prop_inherited_item_t,
_swigc__p_svn_prop_kind,
_swigc__p_svn_prop_t,
_swigc__p_svn_stream_mark_t,
@@ -29968,7 +34517,11 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_stringbuf_t,
_swigc__p_svn_tristate_t,
_swigc__p_svn_version_checklist_t,
+ _swigc__p_svn_version_ext_linked_lib_t,
+ _swigc__p_svn_version_ext_loaded_lib_t,
+ _swigc__p_svn_version_extended_t,
_swigc__p_svn_version_t,
+ _swigc__p_svn_wc_external_item2_t,
_swigc__p_unsigned_char,
_swigc__p_unsigned_long,
_swigc__p_void,
@@ -30042,8 +34595,6 @@ SWIG_InitializeModule(void *clientdata) {
swig_module_info *module_head, *iter;
int found, init;
- clientdata = clientdata;
-
/* check to see if the circular list has been setup, if not, set it up */
if (swig_module.next==0) {
/* Initialize the swig_module */
@@ -30616,6 +35167,7 @@ SWIG_init(void) {
m = Py_InitModule((char *) SWIG_name, SwigMethods);
#endif
md = d = PyModule_GetDict(m);
+ (void)md;
SWIG_InitializeModule(0);
@@ -30676,6 +35228,7 @@ SWIG_init(void) {
SWIG_Python_SetConstant(d, "SVN_ERR_BAD_CHECKSUM_PARSE",SWIG_From_long((long)(SVN_ERR_BAD_CHECKSUM_PARSE)));
SWIG_Python_SetConstant(d, "SVN_ERR_BAD_TOKEN",SWIG_From_long((long)(SVN_ERR_BAD_TOKEN)));
SWIG_Python_SetConstant(d, "SVN_ERR_BAD_CHANGELIST_NAME",SWIG_From_long((long)(SVN_ERR_BAD_CHANGELIST_NAME)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_BAD_ATOMIC",SWIG_From_long((long)(SVN_ERR_BAD_ATOMIC)));
SWIG_Python_SetConstant(d, "SVN_ERR_XML_ATTRIB_NOT_FOUND",SWIG_From_long((long)(SVN_ERR_XML_ATTRIB_NOT_FOUND)));
SWIG_Python_SetConstant(d, "SVN_ERR_XML_MISSING_ANCESTRY",SWIG_From_long((long)(SVN_ERR_XML_MISSING_ANCESTRY)));
SWIG_Python_SetConstant(d, "SVN_ERR_XML_UNKNOWN_ENCODING",SWIG_From_long((long)(SVN_ERR_XML_UNKNOWN_ENCODING)));
@@ -30742,6 +35295,8 @@ SWIG_init(void) {
SWIG_Python_SetConstant(d, "SVN_ERR_WC_CLEANUP_REQUIRED",SWIG_From_long((long)(SVN_ERR_WC_CLEANUP_REQUIRED)));
SWIG_Python_SetConstant(d, "SVN_ERR_WC_INVALID_OPERATION_DEPTH",SWIG_From_long((long)(SVN_ERR_WC_INVALID_OPERATION_DEPTH)));
SWIG_Python_SetConstant(d, "SVN_ERR_WC_PATH_ACCESS_DENIED",SWIG_From_long((long)(SVN_ERR_WC_PATH_ACCESS_DENIED)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_WC_MIXED_REVISIONS",SWIG_From_long((long)(SVN_ERR_WC_MIXED_REVISIONS)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_WC_DUPLICATE_EXTERNALS_TARGET",SWIG_From_long((long)(SVN_ERR_WC_DUPLICATE_EXTERNALS_TARGET)));
SWIG_Python_SetConstant(d, "SVN_ERR_FS_GENERAL",SWIG_From_long((long)(SVN_ERR_FS_GENERAL)));
SWIG_Python_SetConstant(d, "SVN_ERR_FS_CLEANUP",SWIG_From_long((long)(SVN_ERR_FS_CLEANUP)));
SWIG_Python_SetConstant(d, "SVN_ERR_FS_ALREADY_OPEN",SWIG_From_long((long)(SVN_ERR_FS_ALREADY_OPEN)));
@@ -30792,6 +35347,9 @@ SWIG_init(void) {
SWIG_Python_SetConstant(d, "SVN_ERR_FS_UNSUPPORTED_UPGRADE",SWIG_From_long((long)(SVN_ERR_FS_UNSUPPORTED_UPGRADE)));
SWIG_Python_SetConstant(d, "SVN_ERR_FS_NO_SUCH_CHECKSUM_REP",SWIG_From_long((long)(SVN_ERR_FS_NO_SUCH_CHECKSUM_REP)));
SWIG_Python_SetConstant(d, "SVN_ERR_FS_PROP_BASEVALUE_MISMATCH",SWIG_From_long((long)(SVN_ERR_FS_PROP_BASEVALUE_MISMATCH)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_FS_INCORRECT_EDITOR_COMPLETION",SWIG_From_long((long)(SVN_ERR_FS_INCORRECT_EDITOR_COMPLETION)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_FS_PACKED_REVPROP_READ_FAILURE",SWIG_From_long((long)(SVN_ERR_FS_PACKED_REVPROP_READ_FAILURE)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_FS_REVPROP_CACHE_INIT_FAILURE",SWIG_From_long((long)(SVN_ERR_FS_REVPROP_CACHE_INIT_FAILURE)));
SWIG_Python_SetConstant(d, "SVN_ERR_REPOS_LOCKED",SWIG_From_long((long)(SVN_ERR_REPOS_LOCKED)));
SWIG_Python_SetConstant(d, "SVN_ERR_REPOS_HOOK_FAILURE",SWIG_From_long((long)(SVN_ERR_REPOS_HOOK_FAILURE)));
SWIG_Python_SetConstant(d, "SVN_ERR_REPOS_BAD_ARGS",SWIG_From_long((long)(SVN_ERR_REPOS_BAD_ARGS)));
@@ -30815,6 +35373,7 @@ SWIG_init(void) {
SWIG_Python_SetConstant(d, "SVN_ERR_RA_UUID_MISMATCH",SWIG_From_long((long)(SVN_ERR_RA_UUID_MISMATCH)));
SWIG_Python_SetConstant(d, "SVN_ERR_RA_REPOS_ROOT_URL_MISMATCH",SWIG_From_long((long)(SVN_ERR_RA_REPOS_ROOT_URL_MISMATCH)));
SWIG_Python_SetConstant(d, "SVN_ERR_RA_SESSION_URL_MISMATCH",SWIG_From_long((long)(SVN_ERR_RA_SESSION_URL_MISMATCH)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_RA_CANNOT_CREATE_TUNNEL",SWIG_From_long((long)(SVN_ERR_RA_CANNOT_CREATE_TUNNEL)));
SWIG_Python_SetConstant(d, "SVN_ERR_RA_DAV_SOCK_INIT",SWIG_From_long((long)(SVN_ERR_RA_DAV_SOCK_INIT)));
SWIG_Python_SetConstant(d, "SVN_ERR_RA_DAV_CREATING_REQUEST",SWIG_From_long((long)(SVN_ERR_RA_DAV_CREATING_REQUEST)));
SWIG_Python_SetConstant(d, "SVN_ERR_RA_DAV_REQUEST_FAILED",SWIG_From_long((long)(SVN_ERR_RA_DAV_REQUEST_FAILED)));
@@ -30831,36 +35390,12 @@ SWIG_init(void) {
SWIG_Python_SetConstant(d, "SVN_ERR_RA_DAV_FORBIDDEN",SWIG_From_long((long)(SVN_ERR_RA_DAV_FORBIDDEN)));
SWIG_Python_SetConstant(d, "SVN_ERR_RA_LOCAL_REPOS_NOT_FOUND",SWIG_From_long((long)(SVN_ERR_RA_LOCAL_REPOS_NOT_FOUND)));
SWIG_Python_SetConstant(d, "SVN_ERR_RA_LOCAL_REPOS_OPEN_FAILED",SWIG_From_long((long)(SVN_ERR_RA_LOCAL_REPOS_OPEN_FAILED)));
- SWIG_Python_SetConstant(d, "SVN_ERR_RA_SVN_CMD_ERR",SWIG_From_long((long)(SVN_ERR_RA_SVN_CMD_ERR)));
- SWIG_Python_SetConstant(d, "SVN_ERR_RA_SVN_UNKNOWN_CMD",SWIG_From_long((long)(SVN_ERR_RA_SVN_UNKNOWN_CMD)));
- SWIG_Python_SetConstant(d, "SVN_ERR_RA_SVN_CONNECTION_CLOSED",SWIG_From_long((long)(SVN_ERR_RA_SVN_CONNECTION_CLOSED)));
- SWIG_Python_SetConstant(d, "SVN_ERR_RA_SVN_IO_ERROR",SWIG_From_long((long)(SVN_ERR_RA_SVN_IO_ERROR)));
- SWIG_Python_SetConstant(d, "SVN_ERR_RA_SVN_MALFORMED_DATA",SWIG_From_long((long)(SVN_ERR_RA_SVN_MALFORMED_DATA)));
- SWIG_Python_SetConstant(d, "SVN_ERR_RA_SVN_REPOS_NOT_FOUND",SWIG_From_long((long)(SVN_ERR_RA_SVN_REPOS_NOT_FOUND)));
- SWIG_Python_SetConstant(d, "SVN_ERR_RA_SVN_BAD_VERSION",SWIG_From_long((long)(SVN_ERR_RA_SVN_BAD_VERSION)));
- SWIG_Python_SetConstant(d, "SVN_ERR_RA_SVN_NO_MECHANISMS",SWIG_From_long((long)(SVN_ERR_RA_SVN_NO_MECHANISMS)));
- SWIG_Python_SetConstant(d, "SVN_ERR_RA_SVN_EDIT_ABORTED",SWIG_From_long((long)(SVN_ERR_RA_SVN_EDIT_ABORTED)));
- SWIG_Python_SetConstant(d, "SVN_ERR_RA_SERF_SSPI_INITIALISATION_FAILED",SWIG_From_long((long)(SVN_ERR_RA_SERF_SSPI_INITIALISATION_FAILED)));
- SWIG_Python_SetConstant(d, "SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED",SWIG_From_long((long)(SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED)));
- SWIG_Python_SetConstant(d, "SVN_ERR_RA_SERF_GSSAPI_INITIALISATION_FAILED",SWIG_From_long((long)(SVN_ERR_RA_SERF_GSSAPI_INITIALISATION_FAILED)));
- SWIG_Python_SetConstant(d, "SVN_ERR_RA_SERF_WRAPPED_ERROR",SWIG_From_long((long)(SVN_ERR_RA_SERF_WRAPPED_ERROR)));
- SWIG_Python_SetConstant(d, "SVN_ERR_AUTHN_CREDS_UNAVAILABLE",SWIG_From_long((long)(SVN_ERR_AUTHN_CREDS_UNAVAILABLE)));
- SWIG_Python_SetConstant(d, "SVN_ERR_AUTHN_NO_PROVIDER",SWIG_From_long((long)(SVN_ERR_AUTHN_NO_PROVIDER)));
- SWIG_Python_SetConstant(d, "SVN_ERR_AUTHN_PROVIDERS_EXHAUSTED",SWIG_From_long((long)(SVN_ERR_AUTHN_PROVIDERS_EXHAUSTED)));
- SWIG_Python_SetConstant(d, "SVN_ERR_AUTHN_CREDS_NOT_SAVED",SWIG_From_long((long)(SVN_ERR_AUTHN_CREDS_NOT_SAVED)));
- SWIG_Python_SetConstant(d, "SVN_ERR_AUTHN_FAILED",SWIG_From_long((long)(SVN_ERR_AUTHN_FAILED)));
- SWIG_Python_SetConstant(d, "SVN_ERR_AUTHZ_ROOT_UNREADABLE",SWIG_From_long((long)(SVN_ERR_AUTHZ_ROOT_UNREADABLE)));
- SWIG_Python_SetConstant(d, "SVN_ERR_AUTHZ_UNREADABLE",SWIG_From_long((long)(SVN_ERR_AUTHZ_UNREADABLE)));
- SWIG_Python_SetConstant(d, "SVN_ERR_AUTHZ_PARTIALLY_READABLE",SWIG_From_long((long)(SVN_ERR_AUTHZ_PARTIALLY_READABLE)));
- SWIG_Python_SetConstant(d, "SVN_ERR_AUTHZ_INVALID_CONFIG",SWIG_From_long((long)(SVN_ERR_AUTHZ_INVALID_CONFIG)));
- SWIG_Python_SetConstant(d, "SVN_ERR_AUTHZ_UNWRITABLE",SWIG_From_long((long)(SVN_ERR_AUTHZ_UNWRITABLE)));
SWIG_Python_SetConstant(d, "SVN_ERR_SVNDIFF_INVALID_HEADER",SWIG_From_long((long)(SVN_ERR_SVNDIFF_INVALID_HEADER)));
SWIG_Python_SetConstant(d, "SVN_ERR_SVNDIFF_CORRUPT_WINDOW",SWIG_From_long((long)(SVN_ERR_SVNDIFF_CORRUPT_WINDOW)));
SWIG_Python_SetConstant(d, "SVN_ERR_SVNDIFF_BACKWARD_VIEW",SWIG_From_long((long)(SVN_ERR_SVNDIFF_BACKWARD_VIEW)));
SWIG_Python_SetConstant(d, "SVN_ERR_SVNDIFF_INVALID_OPS",SWIG_From_long((long)(SVN_ERR_SVNDIFF_INVALID_OPS)));
SWIG_Python_SetConstant(d, "SVN_ERR_SVNDIFF_UNEXPECTED_END",SWIG_From_long((long)(SVN_ERR_SVNDIFF_UNEXPECTED_END)));
SWIG_Python_SetConstant(d, "SVN_ERR_SVNDIFF_INVALID_COMPRESSED_DATA",SWIG_From_long((long)(SVN_ERR_SVNDIFF_INVALID_COMPRESSED_DATA)));
- SWIG_Python_SetConstant(d, "SVN_ERR_DIFF_DATASOURCE_MODIFIED",SWIG_From_long((long)(SVN_ERR_DIFF_DATASOURCE_MODIFIED)));
SWIG_Python_SetConstant(d, "SVN_ERR_APMOD_MISSING_PATH_TO_FS",SWIG_From_long((long)(SVN_ERR_APMOD_MISSING_PATH_TO_FS)));
SWIG_Python_SetConstant(d, "SVN_ERR_APMOD_MALFORMED_URI",SWIG_From_long((long)(SVN_ERR_APMOD_MALFORMED_URI)));
SWIG_Python_SetConstant(d, "SVN_ERR_APMOD_ACTIVITY_NOT_FOUND",SWIG_From_long((long)(SVN_ERR_APMOD_ACTIVITY_NOT_FOUND)));
@@ -30926,6 +35461,9 @@ SWIG_init(void) {
SWIG_Python_SetConstant(d, "SVN_ERR_SQLITE_BUSY",SWIG_From_long((long)(SVN_ERR_SQLITE_BUSY)));
SWIG_Python_SetConstant(d, "SVN_ERR_SQLITE_RESETTING_FOR_ROLLBACK",SWIG_From_long((long)(SVN_ERR_SQLITE_RESETTING_FOR_ROLLBACK)));
SWIG_Python_SetConstant(d, "SVN_ERR_SQLITE_CONSTRAINT",SWIG_From_long((long)(SVN_ERR_SQLITE_CONSTRAINT)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_TOO_MANY_MEMCACHED_SERVERS",SWIG_From_long((long)(SVN_ERR_TOO_MANY_MEMCACHED_SERVERS)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_MALFORMED_VERSION_STRING",SWIG_From_long((long)(SVN_ERR_MALFORMED_VERSION_STRING)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_CORRUPTED_ATOMIC_STORAGE",SWIG_From_long((long)(SVN_ERR_CORRUPTED_ATOMIC_STORAGE)));
SWIG_Python_SetConstant(d, "SVN_ERR_CL_ARG_PARSING_ERROR",SWIG_From_long((long)(SVN_ERR_CL_ARG_PARSING_ERROR)));
SWIG_Python_SetConstant(d, "SVN_ERR_CL_INSUFFICIENT_ARGS",SWIG_From_long((long)(SVN_ERR_CL_INSUFFICIENT_ARGS)));
SWIG_Python_SetConstant(d, "SVN_ERR_CL_MUTUALLY_EXCLUSIVE_ARGS",SWIG_From_long((long)(SVN_ERR_CL_MUTUALLY_EXCLUSIVE_ARGS)));
@@ -30938,20 +35476,45 @@ SWIG_init(void) {
SWIG_Python_SetConstant(d, "SVN_ERR_CL_UNNECESSARY_LOG_MESSAGE",SWIG_From_long((long)(SVN_ERR_CL_UNNECESSARY_LOG_MESSAGE)));
SWIG_Python_SetConstant(d, "SVN_ERR_CL_NO_EXTERNAL_MERGE_TOOL",SWIG_From_long((long)(SVN_ERR_CL_NO_EXTERNAL_MERGE_TOOL)));
SWIG_Python_SetConstant(d, "SVN_ERR_CL_ERROR_PROCESSING_EXTERNALS",SWIG_From_long((long)(SVN_ERR_CL_ERROR_PROCESSING_EXTERNALS)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_RA_SVN_CMD_ERR",SWIG_From_long((long)(SVN_ERR_RA_SVN_CMD_ERR)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_RA_SVN_UNKNOWN_CMD",SWIG_From_long((long)(SVN_ERR_RA_SVN_UNKNOWN_CMD)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_RA_SVN_CONNECTION_CLOSED",SWIG_From_long((long)(SVN_ERR_RA_SVN_CONNECTION_CLOSED)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_RA_SVN_IO_ERROR",SWIG_From_long((long)(SVN_ERR_RA_SVN_IO_ERROR)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_RA_SVN_MALFORMED_DATA",SWIG_From_long((long)(SVN_ERR_RA_SVN_MALFORMED_DATA)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_RA_SVN_REPOS_NOT_FOUND",SWIG_From_long((long)(SVN_ERR_RA_SVN_REPOS_NOT_FOUND)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_RA_SVN_BAD_VERSION",SWIG_From_long((long)(SVN_ERR_RA_SVN_BAD_VERSION)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_RA_SVN_NO_MECHANISMS",SWIG_From_long((long)(SVN_ERR_RA_SVN_NO_MECHANISMS)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_RA_SVN_EDIT_ABORTED",SWIG_From_long((long)(SVN_ERR_RA_SVN_EDIT_ABORTED)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_AUTHN_CREDS_UNAVAILABLE",SWIG_From_long((long)(SVN_ERR_AUTHN_CREDS_UNAVAILABLE)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_AUTHN_NO_PROVIDER",SWIG_From_long((long)(SVN_ERR_AUTHN_NO_PROVIDER)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_AUTHN_PROVIDERS_EXHAUSTED",SWIG_From_long((long)(SVN_ERR_AUTHN_PROVIDERS_EXHAUSTED)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_AUTHN_CREDS_NOT_SAVED",SWIG_From_long((long)(SVN_ERR_AUTHN_CREDS_NOT_SAVED)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_AUTHN_FAILED",SWIG_From_long((long)(SVN_ERR_AUTHN_FAILED)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_AUTHZ_ROOT_UNREADABLE",SWIG_From_long((long)(SVN_ERR_AUTHZ_ROOT_UNREADABLE)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_AUTHZ_UNREADABLE",SWIG_From_long((long)(SVN_ERR_AUTHZ_UNREADABLE)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_AUTHZ_PARTIALLY_READABLE",SWIG_From_long((long)(SVN_ERR_AUTHZ_PARTIALLY_READABLE)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_AUTHZ_INVALID_CONFIG",SWIG_From_long((long)(SVN_ERR_AUTHZ_INVALID_CONFIG)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_AUTHZ_UNWRITABLE",SWIG_From_long((long)(SVN_ERR_AUTHZ_UNWRITABLE)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_DIFF_DATASOURCE_MODIFIED",SWIG_From_long((long)(SVN_ERR_DIFF_DATASOURCE_MODIFIED)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_RA_SERF_SSPI_INITIALISATION_FAILED",SWIG_From_long((long)(SVN_ERR_RA_SERF_SSPI_INITIALISATION_FAILED)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED",SWIG_From_long((long)(SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_RA_SERF_GSSAPI_INITIALISATION_FAILED",SWIG_From_long((long)(SVN_ERR_RA_SERF_GSSAPI_INITIALISATION_FAILED)));
+ SWIG_Python_SetConstant(d, "SVN_ERR_RA_SERF_WRAPPED_ERROR",SWIG_From_long((long)(SVN_ERR_RA_SERF_WRAPPED_ERROR)));
SWIG_Python_SetConstant(d, "SVN_ERR_ASSERTION_FAIL",SWIG_From_long((long)(SVN_ERR_ASSERTION_FAIL)));
SWIG_Python_SetConstant(d, "SVN_ERR_ASSERTION_ONLY_TRACING_LINKS",SWIG_From_long((long)(SVN_ERR_ASSERTION_ONLY_TRACING_LINKS)));
SWIG_Python_SetConstant(d, "SVN_ERR_LAST",SWIG_From_long((long)(SVN_ERR_LAST)));
SWIG_Python_SetConstant(d, "SVN_UNALIGNED_ACCESS_IS_OK",SWIG_From_long((long)(0)));
+ SWIG_Python_SetConstant(d, "TRUE",SWIG_From_long((long)(1)));
+ SWIG_Python_SetConstant(d, "FALSE",SWIG_From_long((long)(0)));
SWIG_Python_SetConstant(d, "svn_node_none",SWIG_From_long((long)(svn_node_none)));
SWIG_Python_SetConstant(d, "svn_node_file",SWIG_From_long((long)(svn_node_file)));
SWIG_Python_SetConstant(d, "svn_node_dir",SWIG_From_long((long)(svn_node_dir)));
SWIG_Python_SetConstant(d, "svn_node_unknown",SWIG_From_long((long)(svn_node_unknown)));
+ SWIG_Python_SetConstant(d, "svn_node_symlink",SWIG_From_long((long)(svn_node_symlink)));
SWIG_Python_SetConstant(d, "svn_tristate_false",SWIG_From_long((long)(svn_tristate_false)));
SWIG_Python_SetConstant(d, "svn_tristate_true",SWIG_From_long((long)(svn_tristate_true)));
SWIG_Python_SetConstant(d, "svn_tristate_unknown",SWIG_From_long((long)(svn_tristate_unknown)));
SWIG_Python_SetConstant(d, "SVN_REVNUM_T_FMT",SWIG_FromCharPtr("ld"));
- SWIG_Python_SetConstant(d, "TRUE",SWIG_From_long((long)(1)));
- SWIG_Python_SetConstant(d, "FALSE",SWIG_From_long((long)(0)));
SWIG_Python_SetConstant(d, "svn_nonrecursive",SWIG_From_long((long)(svn_nonrecursive)));
SWIG_Python_SetConstant(d, "svn_recursive",SWIG_From_long((long)(svn_recursive)));
SWIG_Python_SetConstant(d, "svn_depth_unknown",SWIG_From_long((long)(svn_depth_unknown)));
@@ -30982,16 +35545,16 @@ SWIG_init(void) {
SWIG_Python_SetConstant(d, "SVN__STREAM_CHUNK_SIZE",SWIG_From_long((long)(16384)));
SWIG_Python_SetConstant(d, "SVN_ALLOCATOR_RECOMMENDED_MAX_FREE",SWIG_From_long((long)((4096*1024))));
SWIG_Python_SetConstant(d, "SVN_VER_MAJOR",SWIG_From_long((long)(1)));
- SWIG_Python_SetConstant(d, "SVN_VER_MINOR",SWIG_From_long((long)(7)));
- SWIG_Python_SetConstant(d, "SVN_VER_PATCH",SWIG_From_long((long)(6)));
- SWIG_Python_SetConstant(d, "SVN_VER_MICRO",SWIG_From_long((long)(6)));
+ SWIG_Python_SetConstant(d, "SVN_VER_MINOR",SWIG_From_long((long)(8)));
+ SWIG_Python_SetConstant(d, "SVN_VER_PATCH",SWIG_From_long((long)(13)));
+ SWIG_Python_SetConstant(d, "SVN_VER_MICRO",SWIG_From_long((long)(13)));
SWIG_Python_SetConstant(d, "SVN_VER_LIBRARY",SWIG_From_long((long)(1)));
- SWIG_Python_SetConstant(d, "SVN_VER_TAG",SWIG_FromCharPtr(" (r1370777)"));
+ SWIG_Python_SetConstant(d, "SVN_VER_TAG",SWIG_FromCharPtr(" (r1667537)"));
SWIG_Python_SetConstant(d, "SVN_VER_NUMTAG",SWIG_FromCharPtr(""));
- SWIG_Python_SetConstant(d, "SVN_VER_REVISION",SWIG_From_long((long)(1370777)));
- SWIG_Python_SetConstant(d, "SVN_VER_NUM",SWIG_FromCharPtr("1.7.6"));
- SWIG_Python_SetConstant(d, "SVN_VER_NUMBER",SWIG_FromCharPtr("1.7.6"));
- SWIG_Python_SetConstant(d, "SVN_VERSION",SWIG_FromCharPtr("1.7.6 (r1370777)"));
+ SWIG_Python_SetConstant(d, "SVN_VER_REVISION",SWIG_From_long((long)(1667537)));
+ SWIG_Python_SetConstant(d, "SVN_VER_NUM",SWIG_FromCharPtr("1.8.13"));
+ SWIG_Python_SetConstant(d, "SVN_VER_NUMBER",SWIG_FromCharPtr("1.8.13"));
+ SWIG_Python_SetConstant(d, "SVN_VERSION",SWIG_FromCharPtr("1.8.13 (r1667537)"));
SWIG_Python_SetConstant(d, "svn_prop_entry_kind",SWIG_From_long((long)(svn_prop_entry_kind)));
SWIG_Python_SetConstant(d, "svn_prop_wc_kind",SWIG_From_long((long)(svn_prop_wc_kind)));
SWIG_Python_SetConstant(d, "svn_prop_regular_kind",SWIG_From_long((long)(svn_prop_regular_kind)));
@@ -31009,6 +35572,8 @@ SWIG_init(void) {
SWIG_Python_SetConstant(d, "SVN_PROP_SPECIAL_VALUE",SWIG_FromCharPtr("*"));
SWIG_Python_SetConstant(d, "SVN_PROP_EXTERNALS",SWIG_FromCharPtr("svn:externals"));
SWIG_Python_SetConstant(d, "SVN_PROP_MERGEINFO",SWIG_FromCharPtr("svn:mergeinfo"));
+ SWIG_Python_SetConstant(d, "SVN_PROP_INHERITABLE_AUTO_PROPS",SWIG_FromCharPtr("svn:auto-props"));
+ SWIG_Python_SetConstant(d, "SVN_PROP_INHERITABLE_IGNORES",SWIG_FromCharPtr("svn:global-ignores"));
SWIG_Python_SetConstant(d, "SVN_PROP_TEXT_TIME",SWIG_FromCharPtr("svn:text-time"));
SWIG_Python_SetConstant(d, "SVN_PROP_OWNER",SWIG_FromCharPtr("svn:owner"));
SWIG_Python_SetConstant(d, "SVN_PROP_GROUP",SWIG_FromCharPtr("svn:group"));
@@ -31032,6 +35597,10 @@ SWIG_init(void) {
SWIG_Python_SetConstant(d, "SVNSYNC_PROP_FROM_UUID",SWIG_FromCharPtr("svn:sync-from-uuid"));
SWIG_Python_SetConstant(d, "SVNSYNC_PROP_LAST_MERGED_REV",SWIG_FromCharPtr("svn:sync-last-merged-rev"));
SWIG_Python_SetConstant(d, "SVNSYNC_PROP_CURRENTLY_COPYING",SWIG_FromCharPtr("svn:sync-currently-copying"));
+ SWIG_Python_SetConstant(d, "SVN_PROP_TXN_PREFIX",SWIG_FromCharPtr("svn:txn-"));
+ SWIG_Python_SetConstant(d, "SVN_PROP_TXN_CLIENT_COMPAT_VERSION",SWIG_FromCharPtr("svn:txn-client-compat-version"));
+ SWIG_Python_SetConstant(d, "SVN_PROP_TXN_USER_AGENT",SWIG_FromCharPtr("svn:txn-user-agent"));
+ SWIG_Python_SetConstant(d, "SVN_PROP_REVISION_PREFIX",SWIG_FromCharPtr("svn:revision-"));
SWIG_Python_SetConstant(d, "SVN_OPT_MAX_ALIASES",SWIG_From_long((long)(3)));
SWIG_Python_SetConstant(d, "SVN_OPT_MAX_OPTIONS",SWIG_From_long((long)(50)));
SWIG_Python_SetConstant(d, "SVN_OPT_FIRST_LONGOPT_ID",SWIG_From_long((long)(256)));
@@ -31095,11 +35664,14 @@ SWIG_init(void) {
SWIG_Python_SetConstant(d, "SVN_CONFIG_OPTION_STORE_SSL_CLIENT_CERT_PP",SWIG_FromCharPtr("store-ssl-client-cert-pp"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_OPTION_STORE_SSL_CLIENT_CERT_PP_PLAINTEXT",SWIG_FromCharPtr("store-ssl-client-cert-pp-plaintext"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_OPTION_USERNAME",SWIG_FromCharPtr("username"));
+ SWIG_Python_SetConstant(d, "SVN_CONFIG_OPTION_HTTP_BULK_UPDATES",SWIG_FromCharPtr("http-bulk-updates"));
+ SWIG_Python_SetConstant(d, "SVN_CONFIG_OPTION_HTTP_MAX_CONNECTIONS",SWIG_FromCharPtr("http-max-connections"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_CATEGORY_CONFIG",SWIG_FromCharPtr("config"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_SECTION_AUTH",SWIG_FromCharPtr("auth"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_OPTION_PASSWORD_STORES",SWIG_FromCharPtr("password-stores"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_OPTION_KWALLET_WALLET",SWIG_FromCharPtr("kwallet-wallet"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_OPTION_KWALLET_SVN_APPLICATION_NAME_WITH_PID",SWIG_FromCharPtr("kwallet-svn-application-name-with-pid"));
+ SWIG_Python_SetConstant(d, "SVN_CONFIG_OPTION_SSL_CLIENT_CERT_FILE_PROMPT",SWIG_FromCharPtr("ssl-client-cert-file-prompt"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_SECTION_HELPERS",SWIG_FromCharPtr("helpers"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_OPTION_EDITOR_CMD",SWIG_FromCharPtr("editor-cmd"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_OPTION_DIFF_CMD",SWIG_FromCharPtr("diff-cmd"));
@@ -31120,21 +35692,26 @@ SWIG_init(void) {
SWIG_Python_SetConstant(d, "SVN_CONFIG_OPTION_MEMORY_CACHE_SIZE",SWIG_FromCharPtr("memory-cache-size"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_SECTION_TUNNELS",SWIG_FromCharPtr("tunnels"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_SECTION_AUTO_PROPS",SWIG_FromCharPtr("auto-props"));
+ SWIG_Python_SetConstant(d, "SVN_CONFIG_SECTION_WORKING_COPY",SWIG_FromCharPtr("working-copy"));
+ SWIG_Python_SetConstant(d, "SVN_CONFIG_OPTION_SQLITE_EXCLUSIVE",SWIG_FromCharPtr("exclusive-locking"));
+ SWIG_Python_SetConstant(d, "SVN_CONFIG_OPTION_SQLITE_EXCLUSIVE_CLIENTS",SWIG_FromCharPtr("exclusive-locking-clients"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_SECTION_GENERAL",SWIG_FromCharPtr("general"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_OPTION_ANON_ACCESS",SWIG_FromCharPtr("anon-access"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_OPTION_AUTH_ACCESS",SWIG_FromCharPtr("auth-access"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_OPTION_PASSWORD_DB",SWIG_FromCharPtr("password-db"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_OPTION_REALM",SWIG_FromCharPtr("realm"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_OPTION_AUTHZ_DB",SWIG_FromCharPtr("authz-db"));
+ SWIG_Python_SetConstant(d, "SVN_CONFIG_OPTION_GROUPS_DB",SWIG_FromCharPtr("groups-db"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_OPTION_FORCE_USERNAME_CASE",SWIG_FromCharPtr("force-username-case"));
+ SWIG_Python_SetConstant(d, "SVN_CONFIG_OPTION_HOOKS_ENV",SWIG_FromCharPtr("hooks-env"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_SECTION_SASL",SWIG_FromCharPtr("sasl"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_OPTION_USE_SASL",SWIG_FromCharPtr("use-sasl"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_OPTION_MIN_SSF",SWIG_FromCharPtr("min-encryption"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_OPTION_MAX_SSF",SWIG_FromCharPtr("max-encryption"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_SECTION_USERS",SWIG_FromCharPtr("users"));
- SWIG_Python_SetConstant(d, "SVN_CONFIG__DEFAULT_GLOBAL_IGNORES_LINE_1",SWIG_FromCharPtr("*.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo"));
+ SWIG_Python_SetConstant(d, "SVN_CONFIG__DEFAULT_GLOBAL_IGNORES_LINE_1",SWIG_FromCharPtr("*.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo __pycache__"));
SWIG_Python_SetConstant(d, "SVN_CONFIG__DEFAULT_GLOBAL_IGNORES_LINE_2",SWIG_FromCharPtr("*.rej *~ #*# .#* .*.swp .DS_Store"));
- SWIG_Python_SetConstant(d, "SVN_CONFIG_DEFAULT_GLOBAL_IGNORES",SWIG_FromCharPtr("*.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo *.rej *~ #*# .#* .*.swp .DS_Store"));
+ SWIG_Python_SetConstant(d, "SVN_CONFIG_DEFAULT_GLOBAL_IGNORES",SWIG_FromCharPtr("*.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo __pycache__ *.rej *~ #*# .#* .*.swp .DS_Store"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_TRUE",SWIG_FromCharPtr("TRUE"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_FALSE",SWIG_FromCharPtr("FALSE"));
SWIG_Python_SetConstant(d, "SVN_CONFIG_ASK",SWIG_FromCharPtr("ASK"));
@@ -31143,6 +35720,7 @@ SWIG_init(void) {
SWIG_Python_SetConstant(d, "SVN_CONFIG_DEFAULT_OPTION_STORE_AUTH_CREDS",SWIG_From_long((long)(1)));
SWIG_Python_SetConstant(d, "SVN_CONFIG_DEFAULT_OPTION_STORE_SSL_CLIENT_CERT_PP",SWIG_From_long((long)(1)));
SWIG_Python_SetConstant(d, "SVN_CONFIG_DEFAULT_OPTION_STORE_SSL_CLIENT_CERT_PP_PLAINTEXT",SWIG_FromCharPtr("ASK"));
+ SWIG_Python_SetConstant(d, "SVN_CONFIG_DEFAULT_OPTION_HTTP_MAX_CONNECTIONS",SWIG_From_long((long)(4)));
SWIG_Python_SetConstant(d, "SVN_CONFIG_REALMSTRING_KEY",SWIG_FromCharPtr("svn:realmstring"));
SWIG_Python_SetConstant(d, "SVN_MERGEINFO_NONINHERITABLE_STR",SWIG_FromCharPtr("*"));
SWIG_Python_SetConstant(d, "svn_mergeinfo_explicit",SWIG_From_long((long)(svn_mergeinfo_explicit)));
@@ -31151,6 +35729,8 @@ SWIG_init(void) {
SWIG_Python_SetConstant(d, "svn_io_file_del_none",SWIG_From_long((long)(svn_io_file_del_none)));
SWIG_Python_SetConstant(d, "svn_io_file_del_on_close",SWIG_From_long((long)(svn_io_file_del_on_close)));
SWIG_Python_SetConstant(d, "svn_io_file_del_on_pool_cleanup",SWIG_From_long((long)(svn_io_file_del_on_pool_cleanup)));
+ SWIG_Python_SetConstant(d, "svn_checksum_md5",SWIG_From_long((long)(svn_checksum_md5)));
+ SWIG_Python_SetConstant(d, "svn_checksum_sha1",SWIG_From_long((long)(svn_checksum_sha1)));
/* Theoretically, we should be checking for errors here,
but I do not know of any useful way to signal an error to Python
diff --git a/subversion/bindings/swig/python/core.py b/subversion/bindings/swig/python/core.py
index 3463c1d..19a2b17 100644
--- a/subversion/bindings/swig/python/core.py
+++ b/subversion/bindings/swig/python/core.py
@@ -1,5 +1,5 @@
# This file was automatically generated by SWIG (http://www.swig.org).
-# Version 2.0.4
+# Version 2.0.9
#
# Do not make changes to this file unless you know what you are doing--modify
# the SWIG interface file instead.
@@ -131,6 +131,7 @@ SVN_ERR_BAD_CHECKSUM_KIND = _core.SVN_ERR_BAD_CHECKSUM_KIND
SVN_ERR_BAD_CHECKSUM_PARSE = _core.SVN_ERR_BAD_CHECKSUM_PARSE
SVN_ERR_BAD_TOKEN = _core.SVN_ERR_BAD_TOKEN
SVN_ERR_BAD_CHANGELIST_NAME = _core.SVN_ERR_BAD_CHANGELIST_NAME
+SVN_ERR_BAD_ATOMIC = _core.SVN_ERR_BAD_ATOMIC
SVN_ERR_XML_ATTRIB_NOT_FOUND = _core.SVN_ERR_XML_ATTRIB_NOT_FOUND
SVN_ERR_XML_MISSING_ANCESTRY = _core.SVN_ERR_XML_MISSING_ANCESTRY
SVN_ERR_XML_UNKNOWN_ENCODING = _core.SVN_ERR_XML_UNKNOWN_ENCODING
@@ -197,6 +198,8 @@ SVN_ERR_WC_UPGRADE_REQUIRED = _core.SVN_ERR_WC_UPGRADE_REQUIRED
SVN_ERR_WC_CLEANUP_REQUIRED = _core.SVN_ERR_WC_CLEANUP_REQUIRED
SVN_ERR_WC_INVALID_OPERATION_DEPTH = _core.SVN_ERR_WC_INVALID_OPERATION_DEPTH
SVN_ERR_WC_PATH_ACCESS_DENIED = _core.SVN_ERR_WC_PATH_ACCESS_DENIED
+SVN_ERR_WC_MIXED_REVISIONS = _core.SVN_ERR_WC_MIXED_REVISIONS
+SVN_ERR_WC_DUPLICATE_EXTERNALS_TARGET = _core.SVN_ERR_WC_DUPLICATE_EXTERNALS_TARGET
SVN_ERR_FS_GENERAL = _core.SVN_ERR_FS_GENERAL
SVN_ERR_FS_CLEANUP = _core.SVN_ERR_FS_CLEANUP
SVN_ERR_FS_ALREADY_OPEN = _core.SVN_ERR_FS_ALREADY_OPEN
@@ -247,6 +250,9 @@ SVN_ERR_FS_NO_SUCH_NODE_ORIGIN = _core.SVN_ERR_FS_NO_SUCH_NODE_ORIGIN
SVN_ERR_FS_UNSUPPORTED_UPGRADE = _core.SVN_ERR_FS_UNSUPPORTED_UPGRADE
SVN_ERR_FS_NO_SUCH_CHECKSUM_REP = _core.SVN_ERR_FS_NO_SUCH_CHECKSUM_REP
SVN_ERR_FS_PROP_BASEVALUE_MISMATCH = _core.SVN_ERR_FS_PROP_BASEVALUE_MISMATCH
+SVN_ERR_FS_INCORRECT_EDITOR_COMPLETION = _core.SVN_ERR_FS_INCORRECT_EDITOR_COMPLETION
+SVN_ERR_FS_PACKED_REVPROP_READ_FAILURE = _core.SVN_ERR_FS_PACKED_REVPROP_READ_FAILURE
+SVN_ERR_FS_REVPROP_CACHE_INIT_FAILURE = _core.SVN_ERR_FS_REVPROP_CACHE_INIT_FAILURE
SVN_ERR_REPOS_LOCKED = _core.SVN_ERR_REPOS_LOCKED
SVN_ERR_REPOS_HOOK_FAILURE = _core.SVN_ERR_REPOS_HOOK_FAILURE
SVN_ERR_REPOS_BAD_ARGS = _core.SVN_ERR_REPOS_BAD_ARGS
@@ -270,6 +276,7 @@ SVN_ERR_RA_PARTIAL_REPLAY_NOT_SUPPORTED = _core.SVN_ERR_RA_PARTIAL_REPLAY_NOT_SU
SVN_ERR_RA_UUID_MISMATCH = _core.SVN_ERR_RA_UUID_MISMATCH
SVN_ERR_RA_REPOS_ROOT_URL_MISMATCH = _core.SVN_ERR_RA_REPOS_ROOT_URL_MISMATCH
SVN_ERR_RA_SESSION_URL_MISMATCH = _core.SVN_ERR_RA_SESSION_URL_MISMATCH
+SVN_ERR_RA_CANNOT_CREATE_TUNNEL = _core.SVN_ERR_RA_CANNOT_CREATE_TUNNEL
SVN_ERR_RA_DAV_SOCK_INIT = _core.SVN_ERR_RA_DAV_SOCK_INIT
SVN_ERR_RA_DAV_CREATING_REQUEST = _core.SVN_ERR_RA_DAV_CREATING_REQUEST
SVN_ERR_RA_DAV_REQUEST_FAILED = _core.SVN_ERR_RA_DAV_REQUEST_FAILED
@@ -286,36 +293,12 @@ SVN_ERR_RA_DAV_CONN_TIMEOUT = _core.SVN_ERR_RA_DAV_CONN_TIMEOUT
SVN_ERR_RA_DAV_FORBIDDEN = _core.SVN_ERR_RA_DAV_FORBIDDEN
SVN_ERR_RA_LOCAL_REPOS_NOT_FOUND = _core.SVN_ERR_RA_LOCAL_REPOS_NOT_FOUND
SVN_ERR_RA_LOCAL_REPOS_OPEN_FAILED = _core.SVN_ERR_RA_LOCAL_REPOS_OPEN_FAILED
-SVN_ERR_RA_SVN_CMD_ERR = _core.SVN_ERR_RA_SVN_CMD_ERR
-SVN_ERR_RA_SVN_UNKNOWN_CMD = _core.SVN_ERR_RA_SVN_UNKNOWN_CMD
-SVN_ERR_RA_SVN_CONNECTION_CLOSED = _core.SVN_ERR_RA_SVN_CONNECTION_CLOSED
-SVN_ERR_RA_SVN_IO_ERROR = _core.SVN_ERR_RA_SVN_IO_ERROR
-SVN_ERR_RA_SVN_MALFORMED_DATA = _core.SVN_ERR_RA_SVN_MALFORMED_DATA
-SVN_ERR_RA_SVN_REPOS_NOT_FOUND = _core.SVN_ERR_RA_SVN_REPOS_NOT_FOUND
-SVN_ERR_RA_SVN_BAD_VERSION = _core.SVN_ERR_RA_SVN_BAD_VERSION
-SVN_ERR_RA_SVN_NO_MECHANISMS = _core.SVN_ERR_RA_SVN_NO_MECHANISMS
-SVN_ERR_RA_SVN_EDIT_ABORTED = _core.SVN_ERR_RA_SVN_EDIT_ABORTED
-SVN_ERR_RA_SERF_SSPI_INITIALISATION_FAILED = _core.SVN_ERR_RA_SERF_SSPI_INITIALISATION_FAILED
-SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED = _core.SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED
-SVN_ERR_RA_SERF_GSSAPI_INITIALISATION_FAILED = _core.SVN_ERR_RA_SERF_GSSAPI_INITIALISATION_FAILED
-SVN_ERR_RA_SERF_WRAPPED_ERROR = _core.SVN_ERR_RA_SERF_WRAPPED_ERROR
-SVN_ERR_AUTHN_CREDS_UNAVAILABLE = _core.SVN_ERR_AUTHN_CREDS_UNAVAILABLE
-SVN_ERR_AUTHN_NO_PROVIDER = _core.SVN_ERR_AUTHN_NO_PROVIDER
-SVN_ERR_AUTHN_PROVIDERS_EXHAUSTED = _core.SVN_ERR_AUTHN_PROVIDERS_EXHAUSTED
-SVN_ERR_AUTHN_CREDS_NOT_SAVED = _core.SVN_ERR_AUTHN_CREDS_NOT_SAVED
-SVN_ERR_AUTHN_FAILED = _core.SVN_ERR_AUTHN_FAILED
-SVN_ERR_AUTHZ_ROOT_UNREADABLE = _core.SVN_ERR_AUTHZ_ROOT_UNREADABLE
-SVN_ERR_AUTHZ_UNREADABLE = _core.SVN_ERR_AUTHZ_UNREADABLE
-SVN_ERR_AUTHZ_PARTIALLY_READABLE = _core.SVN_ERR_AUTHZ_PARTIALLY_READABLE
-SVN_ERR_AUTHZ_INVALID_CONFIG = _core.SVN_ERR_AUTHZ_INVALID_CONFIG
-SVN_ERR_AUTHZ_UNWRITABLE = _core.SVN_ERR_AUTHZ_UNWRITABLE
SVN_ERR_SVNDIFF_INVALID_HEADER = _core.SVN_ERR_SVNDIFF_INVALID_HEADER
SVN_ERR_SVNDIFF_CORRUPT_WINDOW = _core.SVN_ERR_SVNDIFF_CORRUPT_WINDOW
SVN_ERR_SVNDIFF_BACKWARD_VIEW = _core.SVN_ERR_SVNDIFF_BACKWARD_VIEW
SVN_ERR_SVNDIFF_INVALID_OPS = _core.SVN_ERR_SVNDIFF_INVALID_OPS
SVN_ERR_SVNDIFF_UNEXPECTED_END = _core.SVN_ERR_SVNDIFF_UNEXPECTED_END
SVN_ERR_SVNDIFF_INVALID_COMPRESSED_DATA = _core.SVN_ERR_SVNDIFF_INVALID_COMPRESSED_DATA
-SVN_ERR_DIFF_DATASOURCE_MODIFIED = _core.SVN_ERR_DIFF_DATASOURCE_MODIFIED
SVN_ERR_APMOD_MISSING_PATH_TO_FS = _core.SVN_ERR_APMOD_MISSING_PATH_TO_FS
SVN_ERR_APMOD_MALFORMED_URI = _core.SVN_ERR_APMOD_MALFORMED_URI
SVN_ERR_APMOD_ACTIVITY_NOT_FOUND = _core.SVN_ERR_APMOD_ACTIVITY_NOT_FOUND
@@ -381,6 +364,9 @@ SVN_ERR_SQLITE_UNSUPPORTED_SCHEMA = _core.SVN_ERR_SQLITE_UNSUPPORTED_SCHEMA
SVN_ERR_SQLITE_BUSY = _core.SVN_ERR_SQLITE_BUSY
SVN_ERR_SQLITE_RESETTING_FOR_ROLLBACK = _core.SVN_ERR_SQLITE_RESETTING_FOR_ROLLBACK
SVN_ERR_SQLITE_CONSTRAINT = _core.SVN_ERR_SQLITE_CONSTRAINT
+SVN_ERR_TOO_MANY_MEMCACHED_SERVERS = _core.SVN_ERR_TOO_MANY_MEMCACHED_SERVERS
+SVN_ERR_MALFORMED_VERSION_STRING = _core.SVN_ERR_MALFORMED_VERSION_STRING
+SVN_ERR_CORRUPTED_ATOMIC_STORAGE = _core.SVN_ERR_CORRUPTED_ATOMIC_STORAGE
SVN_ERR_CL_ARG_PARSING_ERROR = _core.SVN_ERR_CL_ARG_PARSING_ERROR
SVN_ERR_CL_INSUFFICIENT_ARGS = _core.SVN_ERR_CL_INSUFFICIENT_ARGS
SVN_ERR_CL_MUTUALLY_EXCLUSIVE_ARGS = _core.SVN_ERR_CL_MUTUALLY_EXCLUSIVE_ARGS
@@ -393,30 +379,56 @@ SVN_ERR_CL_BAD_LOG_MESSAGE = _core.SVN_ERR_CL_BAD_LOG_MESSAGE
SVN_ERR_CL_UNNECESSARY_LOG_MESSAGE = _core.SVN_ERR_CL_UNNECESSARY_LOG_MESSAGE
SVN_ERR_CL_NO_EXTERNAL_MERGE_TOOL = _core.SVN_ERR_CL_NO_EXTERNAL_MERGE_TOOL
SVN_ERR_CL_ERROR_PROCESSING_EXTERNALS = _core.SVN_ERR_CL_ERROR_PROCESSING_EXTERNALS
+SVN_ERR_RA_SVN_CMD_ERR = _core.SVN_ERR_RA_SVN_CMD_ERR
+SVN_ERR_RA_SVN_UNKNOWN_CMD = _core.SVN_ERR_RA_SVN_UNKNOWN_CMD
+SVN_ERR_RA_SVN_CONNECTION_CLOSED = _core.SVN_ERR_RA_SVN_CONNECTION_CLOSED
+SVN_ERR_RA_SVN_IO_ERROR = _core.SVN_ERR_RA_SVN_IO_ERROR
+SVN_ERR_RA_SVN_MALFORMED_DATA = _core.SVN_ERR_RA_SVN_MALFORMED_DATA
+SVN_ERR_RA_SVN_REPOS_NOT_FOUND = _core.SVN_ERR_RA_SVN_REPOS_NOT_FOUND
+SVN_ERR_RA_SVN_BAD_VERSION = _core.SVN_ERR_RA_SVN_BAD_VERSION
+SVN_ERR_RA_SVN_NO_MECHANISMS = _core.SVN_ERR_RA_SVN_NO_MECHANISMS
+SVN_ERR_RA_SVN_EDIT_ABORTED = _core.SVN_ERR_RA_SVN_EDIT_ABORTED
+SVN_ERR_AUTHN_CREDS_UNAVAILABLE = _core.SVN_ERR_AUTHN_CREDS_UNAVAILABLE
+SVN_ERR_AUTHN_NO_PROVIDER = _core.SVN_ERR_AUTHN_NO_PROVIDER
+SVN_ERR_AUTHN_PROVIDERS_EXHAUSTED = _core.SVN_ERR_AUTHN_PROVIDERS_EXHAUSTED
+SVN_ERR_AUTHN_CREDS_NOT_SAVED = _core.SVN_ERR_AUTHN_CREDS_NOT_SAVED
+SVN_ERR_AUTHN_FAILED = _core.SVN_ERR_AUTHN_FAILED
+SVN_ERR_AUTHZ_ROOT_UNREADABLE = _core.SVN_ERR_AUTHZ_ROOT_UNREADABLE
+SVN_ERR_AUTHZ_UNREADABLE = _core.SVN_ERR_AUTHZ_UNREADABLE
+SVN_ERR_AUTHZ_PARTIALLY_READABLE = _core.SVN_ERR_AUTHZ_PARTIALLY_READABLE
+SVN_ERR_AUTHZ_INVALID_CONFIG = _core.SVN_ERR_AUTHZ_INVALID_CONFIG
+SVN_ERR_AUTHZ_UNWRITABLE = _core.SVN_ERR_AUTHZ_UNWRITABLE
+SVN_ERR_DIFF_DATASOURCE_MODIFIED = _core.SVN_ERR_DIFF_DATASOURCE_MODIFIED
+SVN_ERR_RA_SERF_SSPI_INITIALISATION_FAILED = _core.SVN_ERR_RA_SERF_SSPI_INITIALISATION_FAILED
+SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED = _core.SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED
+SVN_ERR_RA_SERF_GSSAPI_INITIALISATION_FAILED = _core.SVN_ERR_RA_SERF_GSSAPI_INITIALISATION_FAILED
+SVN_ERR_RA_SERF_WRAPPED_ERROR = _core.SVN_ERR_RA_SERF_WRAPPED_ERROR
SVN_ERR_ASSERTION_FAIL = _core.SVN_ERR_ASSERTION_FAIL
SVN_ERR_ASSERTION_ONLY_TRACING_LINKS = _core.SVN_ERR_ASSERTION_ONLY_TRACING_LINKS
SVN_ERR_LAST = _core.SVN_ERR_LAST
def svn_time_to_cstring(*args):
- """svn_time_to_cstring(apr_time_t when, apr_pool_t pool) -> char"""
+ """svn_time_to_cstring(apr_time_t when, apr_pool_t pool) -> char const *"""
return _core.svn_time_to_cstring(*args)
def svn_time_from_cstring(*args):
- """svn_time_from_cstring(char data, apr_pool_t pool) -> svn_error_t"""
+ """svn_time_from_cstring(char const * data, apr_pool_t pool) -> svn_error_t"""
return _core.svn_time_from_cstring(*args)
def svn_time_to_human_cstring(*args):
- """svn_time_to_human_cstring(apr_time_t when, apr_pool_t pool) -> char"""
+ """svn_time_to_human_cstring(apr_time_t when, apr_pool_t pool) -> char const *"""
return _core.svn_time_to_human_cstring(*args)
def svn_parse_date(*args):
- """svn_parse_date(char text, apr_time_t now, apr_pool_t pool) -> svn_error_t"""
+ """svn_parse_date(char const * text, apr_time_t now, apr_pool_t pool) -> svn_error_t"""
return _core.svn_parse_date(*args)
def svn_sleep_for_timestamps():
"""svn_sleep_for_timestamps()"""
return _core.svn_sleep_for_timestamps()
SVN_UNALIGNED_ACCESS_IS_OK = _core.SVN_UNALIGNED_ACCESS_IS_OK
+TRUE = _core.TRUE
+FALSE = _core.FALSE
class svn_error_t:
"""Proxy of C svn_error_t struct"""
__swig_setmethods__ = {}
@@ -477,7 +489,7 @@ class svn_error_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_error_t"""
+ """__init__(svn_error_t self) -> svn_error_t"""
this = _core.new_svn_error_t()
try: self.this.append(this)
except: self.this = this
@@ -488,46 +500,45 @@ svn_error_t_swigregister(svn_error_t)
def svn__apr_hash_index_key(*args):
- """svn__apr_hash_index_key(apr_hash_index_t hi) -> void"""
+ """svn__apr_hash_index_key(apr_hash_index_t const * hi) -> void const *"""
return _core.svn__apr_hash_index_key(*args)
def svn__apr_hash_index_klen(*args):
- """svn__apr_hash_index_klen(apr_hash_index_t hi) -> apr_ssize_t"""
+ """svn__apr_hash_index_klen(apr_hash_index_t const * hi) -> apr_ssize_t"""
return _core.svn__apr_hash_index_klen(*args)
def svn__apr_hash_index_val(*args):
- """svn__apr_hash_index_val(apr_hash_index_t hi) -> void"""
+ """svn__apr_hash_index_val(apr_hash_index_t const * hi) -> void *"""
return _core.svn__apr_hash_index_val(*args)
svn_node_none = _core.svn_node_none
svn_node_file = _core.svn_node_file
svn_node_dir = _core.svn_node_dir
svn_node_unknown = _core.svn_node_unknown
+svn_node_symlink = _core.svn_node_symlink
def svn_node_kind_to_word(*args):
- """svn_node_kind_to_word(svn_node_kind_t kind) -> char"""
+ """svn_node_kind_to_word(svn_node_kind_t kind) -> char const *"""
return _core.svn_node_kind_to_word(*args)
def svn_node_kind_from_word(*args):
- """svn_node_kind_from_word(char word) -> svn_node_kind_t"""
+ """svn_node_kind_from_word(char const * word) -> svn_node_kind_t"""
return _core.svn_node_kind_from_word(*args)
svn_tristate_false = _core.svn_tristate_false
svn_tristate_true = _core.svn_tristate_true
svn_tristate_unknown = _core.svn_tristate_unknown
def svn_tristate__to_word(*args):
- """svn_tristate__to_word(svn_tristate_t tristate) -> char"""
+ """svn_tristate__to_word(svn_tristate_t tristate) -> char const *"""
return _core.svn_tristate__to_word(*args)
def svn_tristate__from_word(*args):
- """svn_tristate__from_word(char word) -> svn_tristate_t"""
+ """svn_tristate__from_word(char const * word) -> svn_tristate_t"""
return _core.svn_tristate__from_word(*args)
def svn_revnum_parse(*args):
- """svn_revnum_parse(char str) -> svn_error_t"""
+ """svn_revnum_parse(char const * str) -> svn_error_t"""
return _core.svn_revnum_parse(*args)
SVN_REVNUM_T_FMT = _core.SVN_REVNUM_T_FMT
-TRUE = _core.TRUE
-FALSE = _core.FALSE
svn_nonrecursive = _core.svn_nonrecursive
svn_recursive = _core.svn_recursive
svn_depth_unknown = _core.svn_depth_unknown
@@ -538,11 +549,11 @@ svn_depth_immediates = _core.svn_depth_immediates
svn_depth_infinity = _core.svn_depth_infinity
def svn_depth_to_word(*args):
- """svn_depth_to_word(svn_depth_t depth) -> char"""
+ """svn_depth_to_word(svn_depth_t depth) -> char const *"""
return _core.svn_depth_to_word(*args)
def svn_depth_from_word(*args):
- """svn_depth_from_word(char word) -> svn_depth_t"""
+ """svn_depth_from_word(char const * word) -> svn_depth_t"""
return _core.svn_depth_from_word(*args)
SVN_DIRENT_KIND = _core.SVN_DIRENT_KIND
SVN_DIRENT_SIZE = _core.SVN_DIRENT_SIZE
@@ -611,7 +622,7 @@ class svn_dirent_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_dirent_t"""
+ """__init__(svn_dirent_t self) -> svn_dirent_t"""
this = _core.new_svn_dirent_t()
try: self.this.append(this)
except: self.this = this
@@ -624,6 +635,10 @@ svn_dirent_t_swigregister(svn_dirent_t)
def svn_dirent_dup(*args):
"""svn_dirent_dup(svn_dirent_t dirent, apr_pool_t pool) -> svn_dirent_t"""
return _core.svn_dirent_dup(*args)
+
+def svn_dirent_create(*args):
+ """svn_dirent_create(apr_pool_t result_pool) -> svn_dirent_t"""
+ return _core.svn_dirent_create(*args)
SVN_KEYWORD_MAX_LEN = _core.SVN_KEYWORD_MAX_LEN
SVN_KEYWORD_REVISION_LONG = _core.SVN_KEYWORD_REVISION_LONG
SVN_KEYWORD_REVISION_SHORT = _core.SVN_KEYWORD_REVISION_SHORT
@@ -696,7 +711,7 @@ class svn_commit_info_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_commit_info_t"""
+ """__init__(svn_commit_info_t self) -> svn_commit_info_t"""
this = _core.new_svn_commit_info_t()
try: self.this.append(this)
except: self.this = this
@@ -775,7 +790,7 @@ class svn_log_changed_path2_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_log_changed_path2_t"""
+ """__init__(svn_log_changed_path2_t self) -> svn_log_changed_path2_t"""
this = _core.new_svn_log_changed_path2_t()
try: self.this.append(this)
except: self.this = this
@@ -847,7 +862,7 @@ class svn_log_changed_path_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_log_changed_path_t"""
+ """__init__(svn_log_changed_path_t self) -> svn_log_changed_path_t"""
this = _core.new_svn_log_changed_path_t()
try: self.this.append(this)
except: self.this = this
@@ -924,7 +939,7 @@ class svn_log_entry_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_log_entry_t"""
+ """__init__(svn_log_entry_t self) -> svn_log_entry_t"""
this = _core.new_svn_log_entry_t()
try: self.this.append(this)
except: self.this = this
@@ -945,11 +960,11 @@ SVN_STREAM_CHUNK_SIZE = _core.SVN_STREAM_CHUNK_SIZE
SVN__STREAM_CHUNK_SIZE = _core.SVN__STREAM_CHUNK_SIZE
def svn_mime_type_validate(*args):
- """svn_mime_type_validate(char mime_type, apr_pool_t pool) -> svn_error_t"""
+ """svn_mime_type_validate(char const * mime_type, apr_pool_t pool) -> svn_error_t"""
return _core.svn_mime_type_validate(*args)
def svn_mime_type_is_binary(*args):
- """svn_mime_type_is_binary(char mime_type) -> svn_boolean_t"""
+ """svn_mime_type_is_binary(char const * mime_type) -> svn_boolean_t"""
return _core.svn_mime_type_is_binary(*args)
class svn_lock_t:
"""Proxy of C svn_lock_t struct"""
@@ -1015,7 +1030,7 @@ class svn_lock_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_lock_t"""
+ """__init__(svn_lock_t self) -> svn_lock_t"""
this = _core.new_svn_lock_t()
try: self.this.append(this)
except: self.this = this
@@ -1034,7 +1049,7 @@ def svn_lock_dup(*args):
return _core.svn_lock_dup(*args)
def svn_uuid_generate(*args):
- """svn_uuid_generate(apr_pool_t pool) -> char"""
+ """svn_uuid_generate(apr_pool_t pool) -> char const *"""
return _core.svn_uuid_generate(*args)
class svn_merge_range_t:
"""Proxy of C svn_merge_range_t struct"""
@@ -1092,7 +1107,7 @@ class svn_merge_range_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_merge_range_t"""
+ """__init__(svn_merge_range_t self) -> svn_merge_range_t"""
this = _core.new_svn_merge_range_t()
try: self.this.append(this)
except: self.this = this
@@ -1165,7 +1180,7 @@ class svn_location_segment_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_location_segment_t"""
+ """__init__(svn_location_segment_t self) -> svn_location_segment_t"""
this = _core.new_svn_location_segment_t()
try: self.this.append(this)
except: self.this = this
@@ -1233,42 +1248,36 @@ svn_version_t_swigregister(svn_version_t)
def svn_log_invoke_entry_receiver(*args):
- """
- svn_log_invoke_entry_receiver(svn_log_entry_receiver_t _obj, void baton, svn_log_entry_t log_entry,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_log_invoke_entry_receiver(svn_log_entry_receiver_t _obj, void * baton, svn_log_entry_t log_entry, apr_pool_t pool) -> svn_error_t"""
return _core.svn_log_invoke_entry_receiver(*args)
def svn_log_invoke_message_receiver(*args):
"""
- svn_log_invoke_message_receiver(svn_log_message_receiver_t _obj, void baton, apr_hash_t changed_paths,
- svn_revnum_t revision, char author,
- char date, char message, apr_pool_t pool) -> svn_error_t
+ svn_log_invoke_message_receiver(svn_log_message_receiver_t _obj, void * baton, apr_hash_t changed_paths, svn_revnum_t revision,
+ char const * author, char const * date, char const * message,
+ apr_pool_t pool) -> svn_error_t
"""
return _core.svn_log_invoke_message_receiver(*args)
def svn_commit_invoke_callback2(*args):
- """
- svn_commit_invoke_callback2(svn_commit_callback2_t _obj, svn_commit_info_t commit_info,
- void baton, apr_pool_t pool) -> svn_error_t
- """
+ """svn_commit_invoke_callback2(svn_commit_callback2_t _obj, svn_commit_info_t commit_info, void * baton, apr_pool_t pool) -> svn_error_t"""
return _core.svn_commit_invoke_callback2(*args)
def svn_commit_invoke_callback(*args):
"""
- svn_commit_invoke_callback(svn_commit_callback_t _obj, svn_revnum_t new_revision,
- char date, char author, void baton) -> svn_error_t
+ svn_commit_invoke_callback(svn_commit_callback_t _obj, svn_revnum_t new_revision, char const * date, char const * author,
+ void * baton) -> svn_error_t
"""
return _core.svn_commit_invoke_callback(*args)
def svn_cancel_invoke_func(*args):
- """svn_cancel_invoke_func(svn_cancel_func_t _obj, void cancel_baton) -> svn_error_t"""
+ """svn_cancel_invoke_func(svn_cancel_func_t _obj, void * cancel_baton) -> svn_error_t"""
return _core.svn_cancel_invoke_func(*args)
def svn_location_invoke_segment_receiver(*args):
"""
- svn_location_invoke_segment_receiver(svn_location_segment_receiver_t _obj, svn_location_segment_t segment,
- void baton, apr_pool_t pool) -> svn_error_t
+ svn_location_invoke_segment_receiver(svn_location_segment_receiver_t _obj, svn_location_segment_t segment, void * baton,
+ apr_pool_t pool) -> svn_error_t
"""
return _core.svn_location_invoke_segment_receiver(*args)
class svn_log_entry_receiver_t:
@@ -1610,8 +1619,12 @@ svn_location_segment_receiver_t_swigregister(svn_location_segment_receiver_t)
SVN_ALLOCATOR_RECOMMENDED_MAX_FREE = _core.SVN_ALLOCATOR_RECOMMENDED_MAX_FREE
def svn_pool_create(*args):
- """svn_pool_create(apr_pool_t parent_pool, apr_allocator_t allocator) -> apr_pool_t"""
+ """svn_pool_create(apr_pool_t parent_pool, apr_allocator_t * allocator) -> apr_pool_t"""
return _core.svn_pool_create(*args)
+
+def svn_pool_create_allocator(*args):
+ """svn_pool_create_allocator(svn_boolean_t thread_safe) -> apr_allocator_t *"""
+ return _core.svn_pool_create_allocator(*args)
SVN_VER_MAJOR = _core.SVN_VER_MAJOR
SVN_VER_MINOR = _core.SVN_VER_MINOR
SVN_VER_PATCH = _core.SVN_VER_PATCH
@@ -1625,11 +1638,11 @@ SVN_VER_NUMBER = _core.SVN_VER_NUMBER
SVN_VERSION = _core.SVN_VERSION
def svn_ver_compatible(*args):
- """svn_ver_compatible(svn_version_t my_version, svn_version_t lib_version) -> svn_boolean_t"""
+ """svn_ver_compatible(svn_version_t const * my_version, svn_version_t const * lib_version) -> svn_boolean_t"""
return _core.svn_ver_compatible(*args)
def svn_ver_equal(*args):
- """svn_ver_equal(svn_version_t my_version, svn_version_t lib_version) -> svn_boolean_t"""
+ """svn_ver_equal(svn_version_t const * my_version, svn_version_t const * lib_version) -> svn_boolean_t"""
return _core.svn_ver_equal(*args)
class svn_version_checklist_t:
"""Proxy of C svn_version_checklist_t struct"""
@@ -1688,7 +1701,7 @@ class svn_version_checklist_t:
return svn_version_checklist_invoke_version_query(self, *args)
def __init__(self):
- """__init__(self) -> svn_version_checklist_t"""
+ """__init__(svn_version_checklist_t self) -> svn_version_checklist_t"""
this = _core.new_svn_version_checklist_t()
try: self.this.append(this)
except: self.this = this
@@ -1699,19 +1712,236 @@ svn_version_checklist_t_swigregister(svn_version_checklist_t)
def svn_ver_check_list(*args):
- """svn_ver_check_list(svn_version_t my_version, svn_version_checklist_t checklist) -> svn_error_t"""
+ """svn_ver_check_list(svn_version_t const * my_version, svn_version_checklist_t checklist) -> svn_error_t"""
return _core.svn_ver_check_list(*args)
def svn_subr_version():
- """svn_subr_version() -> svn_version_t"""
+ """svn_subr_version() -> svn_version_t const *"""
return _core.svn_subr_version()
+def svn_version_extended(*args):
+ """svn_version_extended(svn_boolean_t verbose, apr_pool_t pool) -> svn_version_extended_t const *"""
+ return _core.svn_version_extended(*args)
+
+def svn_version_ext_build_date(*args):
+ """svn_version_ext_build_date(svn_version_extended_t const * ext_info) -> char const *"""
+ return _core.svn_version_ext_build_date(*args)
+
+def svn_version_ext_build_time(*args):
+ """svn_version_ext_build_time(svn_version_extended_t const * ext_info) -> char const *"""
+ return _core.svn_version_ext_build_time(*args)
+
+def svn_version_ext_build_host(*args):
+ """svn_version_ext_build_host(svn_version_extended_t const * ext_info) -> char const *"""
+ return _core.svn_version_ext_build_host(*args)
+
+def svn_version_ext_copyright(*args):
+ """svn_version_ext_copyright(svn_version_extended_t const * ext_info) -> char const *"""
+ return _core.svn_version_ext_copyright(*args)
+
+def svn_version_ext_runtime_host(*args):
+ """svn_version_ext_runtime_host(svn_version_extended_t const * ext_info) -> char const *"""
+ return _core.svn_version_ext_runtime_host(*args)
+
+def svn_version_ext_runtime_osname(*args):
+ """svn_version_ext_runtime_osname(svn_version_extended_t const * ext_info) -> char const *"""
+ return _core.svn_version_ext_runtime_osname(*args)
+class svn_version_ext_linked_lib_t:
+ """Proxy of C svn_version_ext_linked_lib_t struct"""
+ __swig_setmethods__ = {}
+ __setattr__ = lambda self, name, value: _swig_setattr(self, svn_version_ext_linked_lib_t, name, value)
+ __swig_getmethods__ = {}
+ __getattr__ = lambda self, name: _swig_getattr(self, svn_version_ext_linked_lib_t, name)
+ __repr__ = _swig_repr
+ __swig_setmethods__["name"] = _core.svn_version_ext_linked_lib_t_name_set
+ __swig_getmethods__["name"] = _core.svn_version_ext_linked_lib_t_name_get
+ __swig_setmethods__["compiled_version"] = _core.svn_version_ext_linked_lib_t_compiled_version_set
+ __swig_getmethods__["compiled_version"] = _core.svn_version_ext_linked_lib_t_compiled_version_get
+ __swig_setmethods__["runtime_version"] = _core.svn_version_ext_linked_lib_t_runtime_version_set
+ __swig_getmethods__["runtime_version"] = _core.svn_version_ext_linked_lib_t_runtime_version_get
+ def set_parent_pool(self, parent_pool=None):
+ """Create a new proxy object for svn_version_ext_linked_lib_t"""
+ import libsvn.core, weakref
+ self.__dict__["_parent_pool"] = \
+ parent_pool or libsvn.core.application_pool;
+ if self.__dict__["_parent_pool"]:
+ self.__dict__["_is_valid"] = weakref.ref(
+ self.__dict__["_parent_pool"]._is_valid)
+
+ def assert_valid(self):
+ """Assert that this object is using valid pool memory"""
+ if "_is_valid" in self.__dict__:
+ assert self.__dict__["_is_valid"](), "Variable has already been deleted"
+
+ def __getattr__(self, name):
+ """Get an attribute from this object"""
+ self.assert_valid()
+
+ value = _swig_getattr(self, self.__class__, name)
+
+
+
+ members = self.__dict__.get("_members")
+ if members is not None:
+ _copy_metadata_deep(value, members.get(name))
+
+
+ _assert_valid_deep(value)
+
+ return value
+
+ def __setattr__(self, name, value):
+ """Set an attribute on this object"""
+ self.assert_valid()
+
+
+
+
+ self.__dict__.setdefault("_members",{})[name] = value
+
+ return _swig_setattr(self, self.__class__, name, value)
+
+ def __init__(self):
+ """__init__(svn_version_ext_linked_lib_t self) -> svn_version_ext_linked_lib_t"""
+ this = _core.new_svn_version_ext_linked_lib_t()
+ try: self.this.append(this)
+ except: self.this = this
+ __swig_destroy__ = _core.delete_svn_version_ext_linked_lib_t
+ __del__ = lambda self : None;
+svn_version_ext_linked_lib_t_swigregister = _core.svn_version_ext_linked_lib_t_swigregister
+svn_version_ext_linked_lib_t_swigregister(svn_version_ext_linked_lib_t)
+
+
+def svn_version_ext_linked_libs(*args):
+ """svn_version_ext_linked_libs(svn_version_extended_t const * ext_info) -> apr_array_header_t"""
+ return _core.svn_version_ext_linked_libs(*args)
+class svn_version_ext_loaded_lib_t:
+ """Proxy of C svn_version_ext_loaded_lib_t struct"""
+ __swig_setmethods__ = {}
+ __setattr__ = lambda self, name, value: _swig_setattr(self, svn_version_ext_loaded_lib_t, name, value)
+ __swig_getmethods__ = {}
+ __getattr__ = lambda self, name: _swig_getattr(self, svn_version_ext_loaded_lib_t, name)
+ __repr__ = _swig_repr
+ __swig_setmethods__["name"] = _core.svn_version_ext_loaded_lib_t_name_set
+ __swig_getmethods__["name"] = _core.svn_version_ext_loaded_lib_t_name_get
+ __swig_setmethods__["version"] = _core.svn_version_ext_loaded_lib_t_version_set
+ __swig_getmethods__["version"] = _core.svn_version_ext_loaded_lib_t_version_get
+ def set_parent_pool(self, parent_pool=None):
+ """Create a new proxy object for svn_version_ext_loaded_lib_t"""
+ import libsvn.core, weakref
+ self.__dict__["_parent_pool"] = \
+ parent_pool or libsvn.core.application_pool;
+ if self.__dict__["_parent_pool"]:
+ self.__dict__["_is_valid"] = weakref.ref(
+ self.__dict__["_parent_pool"]._is_valid)
+
+ def assert_valid(self):
+ """Assert that this object is using valid pool memory"""
+ if "_is_valid" in self.__dict__:
+ assert self.__dict__["_is_valid"](), "Variable has already been deleted"
+
+ def __getattr__(self, name):
+ """Get an attribute from this object"""
+ self.assert_valid()
+
+ value = _swig_getattr(self, self.__class__, name)
+
+
+
+ members = self.__dict__.get("_members")
+ if members is not None:
+ _copy_metadata_deep(value, members.get(name))
+
+
+ _assert_valid_deep(value)
+
+ return value
+
+ def __setattr__(self, name, value):
+ """Set an attribute on this object"""
+ self.assert_valid()
+
+
+
+
+ self.__dict__.setdefault("_members",{})[name] = value
+
+ return _swig_setattr(self, self.__class__, name, value)
+
+ def __init__(self):
+ """__init__(svn_version_ext_loaded_lib_t self) -> svn_version_ext_loaded_lib_t"""
+ this = _core.new_svn_version_ext_loaded_lib_t()
+ try: self.this.append(this)
+ except: self.this = this
+ __swig_destroy__ = _core.delete_svn_version_ext_loaded_lib_t
+ __del__ = lambda self : None;
+svn_version_ext_loaded_lib_t_swigregister = _core.svn_version_ext_loaded_lib_t_swigregister
+svn_version_ext_loaded_lib_t_swigregister(svn_version_ext_loaded_lib_t)
+
+
+def svn_version_ext_loaded_libs(*args):
+ """svn_version_ext_loaded_libs(svn_version_extended_t const * ext_info) -> apr_array_header_t"""
+ return _core.svn_version_ext_loaded_libs(*args)
+class svn_version_extended_t:
+ """Proxy of C svn_version_extended_t struct"""
+ __swig_setmethods__ = {}
+ __setattr__ = lambda self, name, value: _swig_setattr(self, svn_version_extended_t, name, value)
+ __swig_getmethods__ = {}
+ __getattr__ = lambda self, name: _swig_getattr(self, svn_version_extended_t, name)
+ def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+ __repr__ = _swig_repr
+ def set_parent_pool(self, parent_pool=None):
+ """Create a new proxy object for svn_version_extended_t"""
+ import libsvn.core, weakref
+ self.__dict__["_parent_pool"] = \
+ parent_pool or libsvn.core.application_pool;
+ if self.__dict__["_parent_pool"]:
+ self.__dict__["_is_valid"] = weakref.ref(
+ self.__dict__["_parent_pool"]._is_valid)
+
+ def assert_valid(self):
+ """Assert that this object is using valid pool memory"""
+ if "_is_valid" in self.__dict__:
+ assert self.__dict__["_is_valid"](), "Variable has already been deleted"
+
+ def __getattr__(self, name):
+ """Get an attribute from this object"""
+ self.assert_valid()
+
+ value = _swig_getattr(self, self.__class__, name)
+
+
+
+ members = self.__dict__.get("_members")
+ if members is not None:
+ _copy_metadata_deep(value, members.get(name))
+
+
+ _assert_valid_deep(value)
+
+ return value
+
+ def __setattr__(self, name, value):
+ """Set an attribute on this object"""
+ self.assert_valid()
+
+
+
+
+ self.__dict__.setdefault("_members",{})[name] = value
+
+ return _swig_setattr(self, self.__class__, name, value)
+
+svn_version_extended_t_swigregister = _core.svn_version_extended_t_swigregister
+svn_version_extended_t_swigregister(svn_version_extended_t)
+
+
def svn_version_checklist_invoke_version_query(*args):
- """svn_version_checklist_invoke_version_query(svn_version_checklist_t _obj) -> svn_version_t"""
+ """svn_version_checklist_invoke_version_query(svn_version_checklist_t _obj) -> svn_version_t const *"""
return _core.svn_version_checklist_invoke_version_query(*args)
def svn_version_invoke_func(*args):
- """svn_version_invoke_func(svn_version_func_t _obj) -> svn_version_t"""
+ """svn_version_invoke_func(svn_version_func_t _obj) -> svn_version_t const *"""
return _core.svn_version_invoke_func(*args)
class svn_version_func_t:
"""Proxy of C svn_version_func_t struct"""
@@ -1771,12 +2001,75 @@ svn_version_func_t_swigregister(svn_version_func_t)
def svn_prop_dup(*args):
- """svn_prop_dup( prop, apr_pool_t pool)"""
+ """svn_prop_dup(svn_prop_t const * prop, apr_pool_t pool) -> svn_prop_t *"""
return _core.svn_prop_dup(*args)
def svn_prop_array_dup(*args):
"""svn_prop_array_dup(apr_array_header_t array, apr_pool_t pool) -> apr_array_header_t"""
return _core.svn_prop_array_dup(*args)
+class svn_prop_inherited_item_t:
+ """Proxy of C svn_prop_inherited_item_t struct"""
+ __swig_setmethods__ = {}
+ __setattr__ = lambda self, name, value: _swig_setattr(self, svn_prop_inherited_item_t, name, value)
+ __swig_getmethods__ = {}
+ __getattr__ = lambda self, name: _swig_getattr(self, svn_prop_inherited_item_t, name)
+ __repr__ = _swig_repr
+ __swig_setmethods__["path_or_url"] = _core.svn_prop_inherited_item_t_path_or_url_set
+ __swig_getmethods__["path_or_url"] = _core.svn_prop_inherited_item_t_path_or_url_get
+ __swig_setmethods__["prop_hash"] = _core.svn_prop_inherited_item_t_prop_hash_set
+ __swig_getmethods__["prop_hash"] = _core.svn_prop_inherited_item_t_prop_hash_get
+ def set_parent_pool(self, parent_pool=None):
+ """Create a new proxy object for svn_prop_inherited_item_t"""
+ import libsvn.core, weakref
+ self.__dict__["_parent_pool"] = \
+ parent_pool or libsvn.core.application_pool;
+ if self.__dict__["_parent_pool"]:
+ self.__dict__["_is_valid"] = weakref.ref(
+ self.__dict__["_parent_pool"]._is_valid)
+
+ def assert_valid(self):
+ """Assert that this object is using valid pool memory"""
+ if "_is_valid" in self.__dict__:
+ assert self.__dict__["_is_valid"](), "Variable has already been deleted"
+
+ def __getattr__(self, name):
+ """Get an attribute from this object"""
+ self.assert_valid()
+
+ value = _swig_getattr(self, self.__class__, name)
+
+
+
+ members = self.__dict__.get("_members")
+ if members is not None:
+ _copy_metadata_deep(value, members.get(name))
+
+
+ _assert_valid_deep(value)
+
+ return value
+
+ def __setattr__(self, name, value):
+ """Set an attribute on this object"""
+ self.assert_valid()
+
+
+
+
+ self.__dict__.setdefault("_members",{})[name] = value
+
+ return _swig_setattr(self, self.__class__, name, value)
+
+ def __init__(self):
+ """__init__(svn_prop_inherited_item_t self) -> svn_prop_inherited_item_t"""
+ this = _core.new_svn_prop_inherited_item_t()
+ try: self.this.append(this)
+ except: self.this = this
+ __swig_destroy__ = _core.delete_svn_prop_inherited_item_t
+ __del__ = lambda self : None;
+svn_prop_inherited_item_t_swigregister = _core.svn_prop_inherited_item_t_swigregister
+svn_prop_inherited_item_t_swigregister(svn_prop_inherited_item_t)
+
def svn_prop_hash_to_array(*args):
"""svn_prop_hash_to_array(apr_hash_t hash, apr_pool_t pool) -> apr_array_header_t"""
@@ -1791,18 +2084,22 @@ def svn_prop_hash_dup(*args):
return _core.svn_prop_hash_dup(*args)
def svn_prop_get_value(*args):
- """svn_prop_get_value(apr_hash_t properties, char prop_name) -> char"""
+ """svn_prop_get_value(apr_hash_t properties, char const * prop_name) -> char const *"""
return _core.svn_prop_get_value(*args)
svn_prop_entry_kind = _core.svn_prop_entry_kind
svn_prop_wc_kind = _core.svn_prop_wc_kind
svn_prop_regular_kind = _core.svn_prop_regular_kind
+def svn_property_kind2(*args):
+ """svn_property_kind2(char const * prop_name) -> svn_prop_kind_t"""
+ return _core.svn_property_kind2(*args)
+
def svn_property_kind(*args):
- """svn_property_kind(char prop_name)"""
+ """svn_property_kind(char const * prop_name) -> svn_prop_kind_t"""
return _core.svn_property_kind(*args)
def svn_prop_is_svn_prop(*args):
- """svn_prop_is_svn_prop(char prop_name) -> svn_boolean_t"""
+ """svn_prop_is_svn_prop(char const * prop_name) -> svn_boolean_t"""
return _core.svn_prop_is_svn_prop(*args)
def svn_prop_has_svn_prop(*args):
@@ -1810,11 +2107,27 @@ def svn_prop_has_svn_prop(*args):
return _core.svn_prop_has_svn_prop(*args)
def svn_prop_is_boolean(*args):
- """svn_prop_is_boolean(char prop_name) -> svn_boolean_t"""
+ """svn_prop_is_boolean(char const * prop_name) -> svn_boolean_t"""
return _core.svn_prop_is_boolean(*args)
+def svn_prop_is_known_svn_rev_prop(*args):
+ """svn_prop_is_known_svn_rev_prop(char const * prop_name) -> svn_boolean_t"""
+ return _core.svn_prop_is_known_svn_rev_prop(*args)
+
+def svn_prop_is_known_svn_node_prop(*args):
+ """svn_prop_is_known_svn_node_prop(char const * prop_name) -> svn_boolean_t"""
+ return _core.svn_prop_is_known_svn_node_prop(*args)
+
+def svn_prop_is_known_svn_file_prop(*args):
+ """svn_prop_is_known_svn_file_prop(char const * prop_name) -> svn_boolean_t"""
+ return _core.svn_prop_is_known_svn_file_prop(*args)
+
+def svn_prop_is_known_svn_dir_prop(*args):
+ """svn_prop_is_known_svn_dir_prop(char const * prop_name) -> svn_boolean_t"""
+ return _core.svn_prop_is_known_svn_dir_prop(*args)
+
def svn_prop_needs_translation(*args):
- """svn_prop_needs_translation(char prop_name) -> svn_boolean_t"""
+ """svn_prop_needs_translation(char const * prop_name) -> svn_boolean_t"""
return _core.svn_prop_needs_translation(*args)
def svn_categorize_props(*args):
@@ -1826,7 +2139,7 @@ def svn_prop_diffs(*args):
return _core.svn_prop_diffs(*args)
def svn_prop_name_is_valid(*args):
- """svn_prop_name_is_valid(char prop_name) -> svn_boolean_t"""
+ """svn_prop_name_is_valid(char const * prop_name) -> svn_boolean_t"""
return _core.svn_prop_name_is_valid(*args)
SVN_PROP_PREFIX = _core.SVN_PROP_PREFIX
SVN_PROP_BOOLEAN_TRUE = _core.SVN_PROP_BOOLEAN_TRUE
@@ -1842,6 +2155,8 @@ SVN_PROP_SPECIAL = _core.SVN_PROP_SPECIAL
SVN_PROP_SPECIAL_VALUE = _core.SVN_PROP_SPECIAL_VALUE
SVN_PROP_EXTERNALS = _core.SVN_PROP_EXTERNALS
SVN_PROP_MERGEINFO = _core.SVN_PROP_MERGEINFO
+SVN_PROP_INHERITABLE_AUTO_PROPS = _core.SVN_PROP_INHERITABLE_AUTO_PROPS
+SVN_PROP_INHERITABLE_IGNORES = _core.SVN_PROP_INHERITABLE_IGNORES
SVN_PROP_TEXT_TIME = _core.SVN_PROP_TEXT_TIME
SVN_PROP_OWNER = _core.SVN_PROP_OWNER
SVN_PROP_GROUP = _core.SVN_PROP_GROUP
@@ -1865,6 +2180,10 @@ SVNSYNC_PROP_FROM_URL = _core.SVNSYNC_PROP_FROM_URL
SVNSYNC_PROP_FROM_UUID = _core.SVNSYNC_PROP_FROM_UUID
SVNSYNC_PROP_LAST_MERGED_REV = _core.SVNSYNC_PROP_LAST_MERGED_REV
SVNSYNC_PROP_CURRENTLY_COPYING = _core.SVNSYNC_PROP_CURRENTLY_COPYING
+SVN_PROP_TXN_PREFIX = _core.SVN_PROP_TXN_PREFIX
+SVN_PROP_TXN_CLIENT_COMPAT_VERSION = _core.SVN_PROP_TXN_CLIENT_COMPAT_VERSION
+SVN_PROP_TXN_USER_AGENT = _core.SVN_PROP_TXN_USER_AGENT
+SVN_PROP_REVISION_PREFIX = _core.SVN_PROP_REVISION_PREFIX
SVN_OPT_MAX_ALIASES = _core.SVN_OPT_MAX_ALIASES
SVN_OPT_MAX_OPTIONS = _core.SVN_OPT_MAX_OPTIONS
SVN_OPT_FIRST_LONGOPT_ID = _core.SVN_OPT_FIRST_LONGOPT_ID
@@ -1929,7 +2248,7 @@ class svn_opt_subcommand_desc2_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_opt_subcommand_desc2_t"""
+ """__init__(svn_opt_subcommand_desc2_t self) -> svn_opt_subcommand_desc2_t"""
this = _core.new_svn_opt_subcommand_desc2_t()
try: self.this.append(this)
except: self.this = this
@@ -1950,7 +2269,7 @@ class svn_opt_subcommand_desc2_t_desc_overrides:
__swig_setmethods__["desc"] = _core.svn_opt_subcommand_desc2_t_desc_overrides_desc_set
__swig_getmethods__["desc"] = _core.svn_opt_subcommand_desc2_t_desc_overrides_desc_get
def __init__(self):
- """__init__(self) -> svn_opt_subcommand_desc2_t_desc_overrides"""
+ """__init__(svn_opt_subcommand_desc2_t_desc_overrides self) -> svn_opt_subcommand_desc2_t_desc_overrides"""
this = _core.new_svn_opt_subcommand_desc2_t_desc_overrides()
try: self.this.append(this)
except: self.this = this
@@ -2019,7 +2338,7 @@ class svn_opt_subcommand_desc_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_opt_subcommand_desc_t"""
+ """__init__(svn_opt_subcommand_desc_t self) -> svn_opt_subcommand_desc_t"""
this = _core.new_svn_opt_subcommand_desc_t()
try: self.this.append(this)
except: self.this = this
@@ -2030,22 +2349,22 @@ svn_opt_subcommand_desc_t_swigregister(svn_opt_subcommand_desc_t)
def svn_opt_get_canonical_subcommand2(*args):
- """svn_opt_get_canonical_subcommand2(svn_opt_subcommand_desc2_t table, char cmd_name) -> svn_opt_subcommand_desc2_t"""
+ """svn_opt_get_canonical_subcommand2(svn_opt_subcommand_desc2_t table, char const * cmd_name) -> svn_opt_subcommand_desc2_t"""
return _core.svn_opt_get_canonical_subcommand2(*args)
def svn_opt_get_canonical_subcommand(*args):
- """svn_opt_get_canonical_subcommand(svn_opt_subcommand_desc_t table, char cmd_name) -> svn_opt_subcommand_desc_t"""
+ """svn_opt_get_canonical_subcommand(svn_opt_subcommand_desc_t table, char const * cmd_name) -> svn_opt_subcommand_desc_t"""
return _core.svn_opt_get_canonical_subcommand(*args)
def svn_opt_get_option_from_code2(*args):
"""
- svn_opt_get_option_from_code2(int code, apr_getopt_option_t option_table, svn_opt_subcommand_desc2_t command,
- apr_pool_t pool) -> apr_getopt_option_t
+ svn_opt_get_option_from_code2(int code, apr_getopt_option_t const * option_table, svn_opt_subcommand_desc2_t command,
+ apr_pool_t pool) -> apr_getopt_option_t const *
"""
return _core.svn_opt_get_option_from_code2(*args)
def svn_opt_get_option_from_code(*args):
- """svn_opt_get_option_from_code(int code, apr_getopt_option_t option_table) -> apr_getopt_option_t"""
+ """svn_opt_get_option_from_code(int code, apr_getopt_option_t const * option_table) -> apr_getopt_option_t const *"""
return _core.svn_opt_get_option_from_code(*args)
def svn_opt_subcommand_takes_option3(*args):
@@ -2062,33 +2381,32 @@ def svn_opt_subcommand_takes_option(*args):
def svn_opt_print_generic_help2(*args):
"""
- svn_opt_print_generic_help2(char header, svn_opt_subcommand_desc2_t cmd_table,
- apr_getopt_option_t opt_table, char footer, apr_pool_t pool,
- FILE stream)
+ svn_opt_print_generic_help2(char const * header, svn_opt_subcommand_desc2_t cmd_table, apr_getopt_option_t const * opt_table,
+ char const * footer, apr_pool_t pool, FILE * stream)
"""
return _core.svn_opt_print_generic_help2(*args)
def svn_opt_format_option(*args):
- """svn_opt_format_option(apr_getopt_option_t opt, svn_boolean_t doc, apr_pool_t pool)"""
+ """svn_opt_format_option(apr_getopt_option_t const * opt, svn_boolean_t doc, apr_pool_t pool)"""
return _core.svn_opt_format_option(*args)
def svn_opt_subcommand_help3(*args):
"""
- svn_opt_subcommand_help3(char subcommand, svn_opt_subcommand_desc2_t table,
- apr_getopt_option_t options_table, apr_pool_t pool)
+ svn_opt_subcommand_help3(char const * subcommand, svn_opt_subcommand_desc2_t table, apr_getopt_option_t const * options_table,
+ apr_pool_t pool)
"""
return _core.svn_opt_subcommand_help3(*args)
def svn_opt_subcommand_help2(*args):
"""
- svn_opt_subcommand_help2(char subcommand, svn_opt_subcommand_desc2_t table,
- apr_getopt_option_t options_table, apr_pool_t pool)
+ svn_opt_subcommand_help2(char const * subcommand, svn_opt_subcommand_desc2_t table, apr_getopt_option_t const * options_table,
+ apr_pool_t pool)
"""
return _core.svn_opt_subcommand_help2(*args)
def svn_opt_subcommand_help(*args):
"""
- svn_opt_subcommand_help(char subcommand, svn_opt_subcommand_desc_t table, apr_getopt_option_t options_table,
+ svn_opt_subcommand_help(char const * subcommand, svn_opt_subcommand_desc_t table, apr_getopt_option_t const * options_table,
apr_pool_t pool)
"""
return _core.svn_opt_subcommand_help(*args)
@@ -2154,7 +2472,7 @@ class svn_opt_revision_value_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_opt_revision_value_t"""
+ """__init__(svn_opt_revision_value_t self) -> svn_opt_revision_value_t"""
this = _core.new_svn_opt_revision_value_t()
try: self.this.append(this)
except: self.this = this
@@ -2217,7 +2535,7 @@ class svn_opt_revision_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_opt_revision_t"""
+ """__init__(svn_opt_revision_t self) -> svn_opt_revision_t"""
this = _core.new_svn_opt_revision_t()
try: self.this.append(this)
except: self.this = this
@@ -2280,7 +2598,7 @@ class svn_opt_revision_range_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_opt_revision_range_t"""
+ """__init__(svn_opt_revision_range_t self) -> svn_opt_revision_range_t"""
this = _core.new_svn_opt_revision_range_t()
try: self.this.append(this)
except: self.this = this
@@ -2292,39 +2610,32 @@ svn_opt_revision_range_t_swigregister(svn_opt_revision_range_t)
def svn_opt_parse_revision(*args):
"""
- svn_opt_parse_revision(svn_opt_revision_t start_revision, svn_opt_revision_t end_revision,
- char arg, apr_pool_t pool) -> int
+ svn_opt_parse_revision(svn_opt_revision_t start_revision, svn_opt_revision_t end_revision, char const * arg,
+ apr_pool_t pool) -> int
"""
return _core.svn_opt_parse_revision(*args)
def svn_opt_parse_revision_to_range(*args):
- """svn_opt_parse_revision_to_range(apr_array_header_t opt_ranges, char arg, apr_pool_t pool) -> int"""
+ """svn_opt_parse_revision_to_range(apr_array_header_t opt_ranges, char const * arg, apr_pool_t pool) -> int"""
return _core.svn_opt_parse_revision_to_range(*args)
def svn_opt_resolve_revisions(*args):
"""
- svn_opt_resolve_revisions(svn_opt_revision_t peg_rev, svn_opt_revision_t op_rev,
- svn_boolean_t is_url, svn_boolean_t notice_local_mods,
+ svn_opt_resolve_revisions(svn_opt_revision_t peg_rev, svn_opt_revision_t op_rev, svn_boolean_t is_url, svn_boolean_t notice_local_mods,
apr_pool_t pool) -> svn_error_t
"""
return _core.svn_opt_resolve_revisions(*args)
def svn_opt_args_to_target_array3(*args):
- """
- svn_opt_args_to_target_array3(apr_getopt_t os, apr_array_header_t known_targets,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_opt_args_to_target_array3(apr_getopt_t * os, apr_array_header_t known_targets, apr_pool_t pool) -> svn_error_t"""
return _core.svn_opt_args_to_target_array3(*args)
def svn_opt_args_to_target_array2(*args):
- """
- svn_opt_args_to_target_array2(apr_getopt_t os, apr_array_header_t known_targets,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_opt_args_to_target_array2(apr_getopt_t * os, apr_array_header_t known_targets, apr_pool_t pool) -> svn_error_t"""
return _core.svn_opt_args_to_target_array2(*args)
def svn_opt_parse_revprop(*args):
- """svn_opt_parse_revprop(char revprop_spec, apr_pool_t pool) -> svn_error_t"""
+ """svn_opt_parse_revprop(char const * revprop_spec, apr_pool_t pool) -> svn_error_t"""
return _core.svn_opt_parse_revprop(*args)
def svn_opt_push_implicit_dot_target(*args):
@@ -2332,46 +2643,64 @@ def svn_opt_push_implicit_dot_target(*args):
return _core.svn_opt_push_implicit_dot_target(*args)
def svn_opt_parse_num_args(*args):
- """svn_opt_parse_num_args(apr_getopt_t os, int num_args, apr_pool_t pool) -> svn_error_t"""
+ """svn_opt_parse_num_args(apr_getopt_t * os, int num_args, apr_pool_t pool) -> svn_error_t"""
return _core.svn_opt_parse_num_args(*args)
def svn_opt_parse_all_args(*args):
- """svn_opt_parse_all_args(apr_getopt_t os, apr_pool_t pool) -> svn_error_t"""
+ """svn_opt_parse_all_args(apr_getopt_t * os, apr_pool_t pool) -> svn_error_t"""
return _core.svn_opt_parse_all_args(*args)
def svn_opt_parse_path(*args):
- """svn_opt_parse_path(svn_opt_revision_t rev, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_opt_parse_path(svn_opt_revision_t rev, char const * path, apr_pool_t pool) -> svn_error_t"""
return _core.svn_opt_parse_path(*args)
+def svn_opt_print_help4(*args):
+ """
+ svn_opt_print_help4(apr_getopt_t * os, char const * pgm_name, svn_boolean_t print_version, svn_boolean_t quiet,
+ svn_boolean_t verbose, char const * version_footer, char const * header,
+ svn_opt_subcommand_desc2_t cmd_table, apr_getopt_option_t const * option_table,
+ char const * footer, apr_pool_t pool) -> svn_error_t
+ """
+ return _core.svn_opt_print_help4(*args)
+
def svn_opt_print_help3(*args):
"""
- svn_opt_print_help3(apr_getopt_t os, char pgm_name, svn_boolean_t print_version,
- svn_boolean_t quiet, char version_footer,
- char header, svn_opt_subcommand_desc2_t cmd_table,
- apr_getopt_option_t option_table,
- char footer, apr_pool_t pool) -> svn_error_t
+ svn_opt_print_help3(apr_getopt_t * os, char const * pgm_name, svn_boolean_t print_version, svn_boolean_t quiet,
+ char const * version_footer, char const * header, svn_opt_subcommand_desc2_t cmd_table,
+ apr_getopt_option_t const * option_table, char const * footer,
+ apr_pool_t pool) -> svn_error_t
"""
return _core.svn_opt_print_help3(*args)
def svn_opt_print_help2(*args):
"""
- svn_opt_print_help2(apr_getopt_t os, char pgm_name, svn_boolean_t print_version,
- svn_boolean_t quiet, char version_footer,
- char header, svn_opt_subcommand_desc2_t cmd_table,
- apr_getopt_option_t option_table,
- char footer, apr_pool_t pool) -> svn_error_t
+ svn_opt_print_help2(apr_getopt_t * os, char const * pgm_name, svn_boolean_t print_version, svn_boolean_t quiet,
+ char const * version_footer, char const * header, svn_opt_subcommand_desc2_t cmd_table,
+ apr_getopt_option_t const * option_table, char const * footer,
+ apr_pool_t pool) -> svn_error_t
"""
return _core.svn_opt_print_help2(*args)
def svn_opt_print_help(*args):
"""
- svn_opt_print_help(apr_getopt_t os, char pgm_name, svn_boolean_t print_version,
- svn_boolean_t quiet, char version_footer,
- char header, svn_opt_subcommand_desc_t cmd_table,
- apr_getopt_option_t option_table,
- char footer, apr_pool_t pool) -> svn_error_t
+ svn_opt_print_help(apr_getopt_t * os, char const * pgm_name, svn_boolean_t print_version, svn_boolean_t quiet,
+ char const * version_footer, char const * header, svn_opt_subcommand_desc_t cmd_table,
+ apr_getopt_option_t const * option_table, char const * footer,
+ apr_pool_t pool) -> svn_error_t
"""
return _core.svn_opt_print_help(*args)
+
+def svn_cmdline_init(*args):
+ """svn_cmdline_init(char const * progname, FILE * error_stream) -> int"""
+ return _core.svn_cmdline_init(*args)
+
+def svn_cmdline_create_auth_baton(*args):
+ """
+ svn_cmdline_create_auth_baton(svn_boolean_t non_interactive, char const * username, char const * password, char const * config_dir,
+ svn_boolean_t no_auth_cache, svn_boolean_t trust_server_cert,
+ svn_config_t * cfg, svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
+ """
+ return _core.svn_cmdline_create_auth_baton(*args)
class svn_auth_provider_t:
"""Proxy of C svn_auth_provider_t struct"""
__swig_setmethods__ = {}
@@ -2439,7 +2768,7 @@ class svn_auth_provider_t:
return svn_auth_provider_invoke_save_credentials(self, *args)
def __init__(self):
- """__init__(self) -> svn_auth_provider_t"""
+ """__init__(svn_auth_provider_t self) -> svn_auth_provider_t"""
this = _core.new_svn_auth_provider_t()
try: self.this.append(this)
except: self.this = this
@@ -2502,7 +2831,7 @@ class svn_auth_provider_object_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_auth_provider_object_t"""
+ """__init__(svn_auth_provider_object_t self) -> svn_auth_provider_object_t"""
this = _core.new_svn_auth_provider_object_t()
try: self.this.append(this)
except: self.this = this
@@ -2568,7 +2897,7 @@ class svn_auth_cred_simple_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_auth_cred_simple_t"""
+ """__init__(svn_auth_cred_simple_t self) -> svn_auth_cred_simple_t"""
this = _core.new_svn_auth_cred_simple_t()
try: self.this.append(this)
except: self.this = this
@@ -2632,7 +2961,7 @@ class svn_auth_cred_username_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_auth_cred_username_t"""
+ """__init__(svn_auth_cred_username_t self) -> svn_auth_cred_username_t"""
this = _core.new_svn_auth_cred_username_t()
try: self.this.append(this)
except: self.this = this
@@ -2696,7 +3025,7 @@ class svn_auth_cred_ssl_client_cert_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_auth_cred_ssl_client_cert_t"""
+ """__init__(svn_auth_cred_ssl_client_cert_t self) -> svn_auth_cred_ssl_client_cert_t"""
this = _core.new_svn_auth_cred_ssl_client_cert_t()
try: self.this.append(this)
except: self.this = this
@@ -2760,7 +3089,7 @@ class svn_auth_cred_ssl_client_cert_pw_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_auth_cred_ssl_client_cert_pw_t"""
+ """__init__(svn_auth_cred_ssl_client_cert_pw_t self) -> svn_auth_cred_ssl_client_cert_pw_t"""
this = _core.new_svn_auth_cred_ssl_client_cert_pw_t()
try: self.this.append(this)
except: self.this = this
@@ -2832,7 +3161,7 @@ class svn_auth_ssl_server_cert_info_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_auth_ssl_server_cert_info_t"""
+ """__init__(svn_auth_ssl_server_cert_info_t self) -> svn_auth_ssl_server_cert_info_t"""
this = _core.new_svn_auth_ssl_server_cert_info_t()
try: self.this.append(this)
except: self.this = this
@@ -2899,7 +3228,7 @@ class svn_auth_cred_ssl_server_trust_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_auth_cred_ssl_server_trust_t"""
+ """__init__(svn_auth_cred_ssl_server_trust_t self) -> svn_auth_cred_ssl_server_trust_t"""
this = _core.new_svn_auth_cred_ssl_server_trust_t()
try: self.this.append(this)
except: self.this = this
@@ -2923,7 +3252,7 @@ def svn_auth_open(*args):
return val
def svn_auth_set_parameter(*args):
- """svn_auth_set_parameter(svn_auth_baton_t auth_baton, char name, void value)"""
+ """svn_auth_set_parameter(svn_auth_baton_t * auth_baton, char const * name, void const * value)"""
return _core.svn_auth_set_parameter(*args)
SVN_AUTH_PARAM_PREFIX = _core.SVN_AUTH_PARAM_PREFIX
SVN_AUTH_PARAM_DEFAULT_USERNAME = _core.SVN_AUTH_PARAM_DEFAULT_USERNAME
@@ -2944,38 +3273,36 @@ SVN_AUTH_PARAM_CONFIG_DIR = _core.SVN_AUTH_PARAM_CONFIG_DIR
def svn_auth_first_credentials(*args):
"""
- svn_auth_first_credentials(char cred_kind, char realmstring, svn_auth_baton_t auth_baton,
+ svn_auth_first_credentials(char const * cred_kind, char const * realmstring, svn_auth_baton_t * auth_baton,
apr_pool_t pool) -> svn_error_t
"""
return _core.svn_auth_first_credentials(*args)
def svn_auth_next_credentials(*args):
- """svn_auth_next_credentials(svn_auth_iterstate_t state, apr_pool_t pool) -> svn_error_t"""
+ """svn_auth_next_credentials(svn_auth_iterstate_t * state, apr_pool_t pool) -> svn_error_t"""
return _core.svn_auth_next_credentials(*args)
def svn_auth_save_credentials(*args):
- """svn_auth_save_credentials(svn_auth_iterstate_t state, apr_pool_t pool) -> svn_error_t"""
+ """svn_auth_save_credentials(svn_auth_iterstate_t * state, apr_pool_t pool) -> svn_error_t"""
return _core.svn_auth_save_credentials(*args)
-def svn_auth_get_simple_prompt_provider(*args):
+def svn_auth_forget_credentials(*args):
"""
- svn_auth_get_simple_prompt_provider(svn_auth_simple_prompt_func_t prompt_func, int retry_limit,
- apr_pool_t pool)
+ svn_auth_forget_credentials(svn_auth_baton_t * auth_baton, char const * cred_kind, char const * realmstring,
+ apr_pool_t pool) -> svn_error_t
"""
+ return _core.svn_auth_forget_credentials(*args)
+
+def svn_auth_get_simple_prompt_provider(*args):
+ """svn_auth_get_simple_prompt_provider(svn_auth_simple_prompt_func_t prompt_func, int retry_limit, apr_pool_t pool)"""
return _core.svn_auth_get_simple_prompt_provider(*args)
def svn_auth_get_username_prompt_provider(*args):
- """
- svn_auth_get_username_prompt_provider(svn_auth_username_prompt_func_t prompt_func, int retry_limit,
- apr_pool_t pool)
- """
+ """svn_auth_get_username_prompt_provider(svn_auth_username_prompt_func_t prompt_func, int retry_limit, apr_pool_t pool)"""
return _core.svn_auth_get_username_prompt_provider(*args)
def svn_auth_get_simple_provider2(*args):
- """
- svn_auth_get_simple_provider2(svn_auth_plaintext_prompt_func_t plaintext_prompt_func,
- void prompt_baton, apr_pool_t pool)
- """
+ """svn_auth_get_simple_provider2(svn_auth_plaintext_prompt_func_t plaintext_prompt_func, void * prompt_baton, apr_pool_t pool)"""
return _core.svn_auth_get_simple_provider2(*args)
def svn_auth_get_simple_provider(*args):
@@ -2983,11 +3310,11 @@ def svn_auth_get_simple_provider(*args):
return _core.svn_auth_get_simple_provider(*args)
def svn_auth_get_platform_specific_provider(*args):
- """svn_auth_get_platform_specific_provider(char provider_name, char provider_type, apr_pool_t pool) -> svn_error_t"""
+ """svn_auth_get_platform_specific_provider(char const * provider_name, char const * provider_type, apr_pool_t pool) -> svn_error_t"""
return _core.svn_auth_get_platform_specific_provider(*args)
def svn_auth_get_platform_specific_client_providers(*args):
- """svn_auth_get_platform_specific_client_providers(svn_config_t config, apr_pool_t pool) -> svn_error_t"""
+ """svn_auth_get_platform_specific_client_providers(svn_config_t * config, apr_pool_t pool) -> svn_error_t"""
return _core.svn_auth_get_platform_specific_client_providers(*args)
SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_FUNC = _core.SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_FUNC
SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_BATON = _core.SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_BATON
@@ -3006,8 +3333,7 @@ def svn_auth_get_ssl_client_cert_file_provider(*args):
def svn_auth_get_ssl_client_cert_pw_file_provider2(*args):
"""
- svn_auth_get_ssl_client_cert_pw_file_provider2(svn_auth_plaintext_passphrase_prompt_func_t plaintext_passphrase_prompt_func,
- void prompt_baton,
+ svn_auth_get_ssl_client_cert_pw_file_provider2(svn_auth_plaintext_passphrase_prompt_func_t plaintext_passphrase_prompt_func, void * prompt_baton,
apr_pool_t pool)
"""
return _core.svn_auth_get_ssl_client_cert_pw_file_provider2(*args)
@@ -3017,24 +3343,15 @@ def svn_auth_get_ssl_client_cert_pw_file_provider(*args):
return _core.svn_auth_get_ssl_client_cert_pw_file_provider(*args)
def svn_auth_get_ssl_server_trust_prompt_provider(*args):
- """
- svn_auth_get_ssl_server_trust_prompt_provider(svn_auth_ssl_server_trust_prompt_func_t prompt_func,
- apr_pool_t pool)
- """
+ """svn_auth_get_ssl_server_trust_prompt_provider(svn_auth_ssl_server_trust_prompt_func_t prompt_func, apr_pool_t pool)"""
return _core.svn_auth_get_ssl_server_trust_prompt_provider(*args)
def svn_auth_get_ssl_client_cert_prompt_provider(*args):
- """
- svn_auth_get_ssl_client_cert_prompt_provider(svn_auth_ssl_client_cert_prompt_func_t prompt_func,
- int retry_limit, apr_pool_t pool)
- """
+ """svn_auth_get_ssl_client_cert_prompt_provider(svn_auth_ssl_client_cert_prompt_func_t prompt_func, int retry_limit, apr_pool_t pool)"""
return _core.svn_auth_get_ssl_client_cert_prompt_provider(*args)
def svn_auth_get_ssl_client_cert_pw_prompt_provider(*args):
- """
- svn_auth_get_ssl_client_cert_pw_prompt_provider(svn_auth_ssl_client_cert_pw_prompt_func_t prompt_func,
- int retry_limit, apr_pool_t pool)
- """
+ """svn_auth_get_ssl_client_cert_pw_prompt_provider(svn_auth_ssl_client_cert_pw_prompt_func_t prompt_func, int retry_limit, apr_pool_t pool)"""
return _core.svn_auth_get_ssl_client_cert_pw_prompt_provider(*args)
class svn_auth_baton_t:
"""Proxy of C svn_auth_baton_t struct"""
@@ -3145,24 +3462,22 @@ svn_auth_iterstate_t_swigregister(svn_auth_iterstate_t)
def svn_auth_provider_invoke_first_credentials(*args):
"""
- svn_auth_provider_invoke_first_credentials(svn_auth_provider_t _obj, void provider_baton, apr_hash_t parameters,
- char realmstring, apr_pool_t pool) -> svn_error_t
+ svn_auth_provider_invoke_first_credentials(svn_auth_provider_t _obj, void * provider_baton, apr_hash_t parameters, char const * realmstring,
+ apr_pool_t pool) -> svn_error_t
"""
return _core.svn_auth_provider_invoke_first_credentials(*args)
def svn_auth_provider_invoke_next_credentials(*args):
"""
- svn_auth_provider_invoke_next_credentials(svn_auth_provider_t _obj, void iter_baton, void provider_baton,
- apr_hash_t parameters, char realmstring,
- apr_pool_t pool) -> svn_error_t
+ svn_auth_provider_invoke_next_credentials(svn_auth_provider_t _obj, void * iter_baton, void * provider_baton, apr_hash_t parameters,
+ char const * realmstring, apr_pool_t pool) -> svn_error_t
"""
return _core.svn_auth_provider_invoke_next_credentials(*args)
def svn_auth_provider_invoke_save_credentials(*args):
"""
- svn_auth_provider_invoke_save_credentials(svn_auth_provider_t _obj, void credentials, void provider_baton,
- apr_hash_t parameters, char realmstring,
- apr_pool_t pool) -> svn_error_t
+ svn_auth_provider_invoke_save_credentials(svn_auth_provider_t _obj, void * credentials, void * provider_baton, apr_hash_t parameters,
+ char const * realmstring, apr_pool_t pool) -> svn_error_t
"""
return _core.svn_auth_provider_invoke_save_credentials(*args)
@@ -3176,54 +3491,48 @@ def svn_auth_invoke_ssl_client_cert_pw_provider_func(*args):
def svn_auth_invoke_simple_prompt_func(*args):
"""
- svn_auth_invoke_simple_prompt_func(svn_auth_simple_prompt_func_t _obj, void baton, char realm,
- char username, svn_boolean_t may_save,
- apr_pool_t pool) -> svn_error_t
+ svn_auth_invoke_simple_prompt_func(svn_auth_simple_prompt_func_t _obj, void * baton, char const * realm, char const * username,
+ svn_boolean_t may_save, apr_pool_t pool) -> svn_error_t
"""
return _core.svn_auth_invoke_simple_prompt_func(*args)
def svn_auth_invoke_username_prompt_func(*args):
"""
- svn_auth_invoke_username_prompt_func(svn_auth_username_prompt_func_t _obj, void baton, char realm,
- svn_boolean_t may_save, apr_pool_t pool) -> svn_error_t
+ svn_auth_invoke_username_prompt_func(svn_auth_username_prompt_func_t _obj, void * baton, char const * realm, svn_boolean_t may_save,
+ apr_pool_t pool) -> svn_error_t
"""
return _core.svn_auth_invoke_username_prompt_func(*args)
def svn_auth_invoke_ssl_server_trust_prompt_func(*args):
"""
- svn_auth_invoke_ssl_server_trust_prompt_func(svn_auth_ssl_server_trust_prompt_func_t _obj, void baton,
- char realm, apr_uint32_t failures, svn_auth_ssl_server_cert_info_t cert_info,
- svn_boolean_t may_save,
+ svn_auth_invoke_ssl_server_trust_prompt_func(svn_auth_ssl_server_trust_prompt_func_t _obj, void * baton, char const * realm, apr_uint32_t failures,
+ svn_auth_ssl_server_cert_info_t cert_info, svn_boolean_t may_save,
apr_pool_t pool) -> svn_error_t
"""
return _core.svn_auth_invoke_ssl_server_trust_prompt_func(*args)
def svn_auth_invoke_ssl_client_cert_prompt_func(*args):
"""
- svn_auth_invoke_ssl_client_cert_prompt_func(svn_auth_ssl_client_cert_prompt_func_t _obj, void baton,
- char realm, svn_boolean_t may_save, apr_pool_t pool) -> svn_error_t
+ svn_auth_invoke_ssl_client_cert_prompt_func(svn_auth_ssl_client_cert_prompt_func_t _obj, void * baton, char const * realm, svn_boolean_t may_save,
+ apr_pool_t pool) -> svn_error_t
"""
return _core.svn_auth_invoke_ssl_client_cert_prompt_func(*args)
def svn_auth_invoke_ssl_client_cert_pw_prompt_func(*args):
"""
- svn_auth_invoke_ssl_client_cert_pw_prompt_func(svn_auth_ssl_client_cert_pw_prompt_func_t _obj, void baton,
- char realm, svn_boolean_t may_save,
- apr_pool_t pool) -> svn_error_t
+ svn_auth_invoke_ssl_client_cert_pw_prompt_func(svn_auth_ssl_client_cert_pw_prompt_func_t _obj, void * baton, char const * realm,
+ svn_boolean_t may_save, apr_pool_t pool) -> svn_error_t
"""
return _core.svn_auth_invoke_ssl_client_cert_pw_prompt_func(*args)
def svn_auth_invoke_plaintext_prompt_func(*args):
- """
- svn_auth_invoke_plaintext_prompt_func(svn_auth_plaintext_prompt_func_t _obj, char realmstring,
- void baton, apr_pool_t pool) -> svn_error_t
- """
+ """svn_auth_invoke_plaintext_prompt_func(svn_auth_plaintext_prompt_func_t _obj, char const * realmstring, void * baton, apr_pool_t pool) -> svn_error_t"""
return _core.svn_auth_invoke_plaintext_prompt_func(*args)
def svn_auth_invoke_plaintext_passphrase_prompt_func(*args):
"""
- svn_auth_invoke_plaintext_passphrase_prompt_func(svn_auth_plaintext_passphrase_prompt_func_t _obj, char realmstring,
- void baton, apr_pool_t pool) -> svn_error_t
+ svn_auth_invoke_plaintext_passphrase_prompt_func(svn_auth_plaintext_passphrase_prompt_func_t _obj, char const * realmstring, void * baton,
+ apr_pool_t pool) -> svn_error_t
"""
return _core.svn_auth_invoke_plaintext_passphrase_prompt_func(*args)
class svn_auth_simple_provider_func_t:
@@ -3810,11 +4119,14 @@ SVN_CONFIG_OPTION_STORE_AUTH_CREDS = _core.SVN_CONFIG_OPTION_STORE_AUTH_CREDS
SVN_CONFIG_OPTION_STORE_SSL_CLIENT_CERT_PP = _core.SVN_CONFIG_OPTION_STORE_SSL_CLIENT_CERT_PP
SVN_CONFIG_OPTION_STORE_SSL_CLIENT_CERT_PP_PLAINTEXT = _core.SVN_CONFIG_OPTION_STORE_SSL_CLIENT_CERT_PP_PLAINTEXT
SVN_CONFIG_OPTION_USERNAME = _core.SVN_CONFIG_OPTION_USERNAME
+SVN_CONFIG_OPTION_HTTP_BULK_UPDATES = _core.SVN_CONFIG_OPTION_HTTP_BULK_UPDATES
+SVN_CONFIG_OPTION_HTTP_MAX_CONNECTIONS = _core.SVN_CONFIG_OPTION_HTTP_MAX_CONNECTIONS
SVN_CONFIG_CATEGORY_CONFIG = _core.SVN_CONFIG_CATEGORY_CONFIG
SVN_CONFIG_SECTION_AUTH = _core.SVN_CONFIG_SECTION_AUTH
SVN_CONFIG_OPTION_PASSWORD_STORES = _core.SVN_CONFIG_OPTION_PASSWORD_STORES
SVN_CONFIG_OPTION_KWALLET_WALLET = _core.SVN_CONFIG_OPTION_KWALLET_WALLET
SVN_CONFIG_OPTION_KWALLET_SVN_APPLICATION_NAME_WITH_PID = _core.SVN_CONFIG_OPTION_KWALLET_SVN_APPLICATION_NAME_WITH_PID
+SVN_CONFIG_OPTION_SSL_CLIENT_CERT_FILE_PROMPT = _core.SVN_CONFIG_OPTION_SSL_CLIENT_CERT_FILE_PROMPT
SVN_CONFIG_SECTION_HELPERS = _core.SVN_CONFIG_SECTION_HELPERS
SVN_CONFIG_OPTION_EDITOR_CMD = _core.SVN_CONFIG_OPTION_EDITOR_CMD
SVN_CONFIG_OPTION_DIFF_CMD = _core.SVN_CONFIG_OPTION_DIFF_CMD
@@ -3835,13 +4147,18 @@ SVN_CONFIG_OPTION_INTERACTIVE_CONFLICTS = _core.SVN_CONFIG_OPTION_INTERACTIVE_CO
SVN_CONFIG_OPTION_MEMORY_CACHE_SIZE = _core.SVN_CONFIG_OPTION_MEMORY_CACHE_SIZE
SVN_CONFIG_SECTION_TUNNELS = _core.SVN_CONFIG_SECTION_TUNNELS
SVN_CONFIG_SECTION_AUTO_PROPS = _core.SVN_CONFIG_SECTION_AUTO_PROPS
+SVN_CONFIG_SECTION_WORKING_COPY = _core.SVN_CONFIG_SECTION_WORKING_COPY
+SVN_CONFIG_OPTION_SQLITE_EXCLUSIVE = _core.SVN_CONFIG_OPTION_SQLITE_EXCLUSIVE
+SVN_CONFIG_OPTION_SQLITE_EXCLUSIVE_CLIENTS = _core.SVN_CONFIG_OPTION_SQLITE_EXCLUSIVE_CLIENTS
SVN_CONFIG_SECTION_GENERAL = _core.SVN_CONFIG_SECTION_GENERAL
SVN_CONFIG_OPTION_ANON_ACCESS = _core.SVN_CONFIG_OPTION_ANON_ACCESS
SVN_CONFIG_OPTION_AUTH_ACCESS = _core.SVN_CONFIG_OPTION_AUTH_ACCESS
SVN_CONFIG_OPTION_PASSWORD_DB = _core.SVN_CONFIG_OPTION_PASSWORD_DB
SVN_CONFIG_OPTION_REALM = _core.SVN_CONFIG_OPTION_REALM
SVN_CONFIG_OPTION_AUTHZ_DB = _core.SVN_CONFIG_OPTION_AUTHZ_DB
+SVN_CONFIG_OPTION_GROUPS_DB = _core.SVN_CONFIG_OPTION_GROUPS_DB
SVN_CONFIG_OPTION_FORCE_USERNAME_CASE = _core.SVN_CONFIG_OPTION_FORCE_USERNAME_CASE
+SVN_CONFIG_OPTION_HOOKS_ENV = _core.SVN_CONFIG_OPTION_HOOKS_ENV
SVN_CONFIG_SECTION_SASL = _core.SVN_CONFIG_SECTION_SASL
SVN_CONFIG_OPTION_USE_SASL = _core.SVN_CONFIG_OPTION_USE_SASL
SVN_CONFIG_OPTION_MIN_SSF = _core.SVN_CONFIG_OPTION_MIN_SSF
@@ -3858,129 +4175,157 @@ SVN_CONFIG_DEFAULT_OPTION_STORE_PLAINTEXT_PASSWORDS = _core.SVN_CONFIG_DEFAULT_O
SVN_CONFIG_DEFAULT_OPTION_STORE_AUTH_CREDS = _core.SVN_CONFIG_DEFAULT_OPTION_STORE_AUTH_CREDS
SVN_CONFIG_DEFAULT_OPTION_STORE_SSL_CLIENT_CERT_PP = _core.SVN_CONFIG_DEFAULT_OPTION_STORE_SSL_CLIENT_CERT_PP
SVN_CONFIG_DEFAULT_OPTION_STORE_SSL_CLIENT_CERT_PP_PLAINTEXT = _core.SVN_CONFIG_DEFAULT_OPTION_STORE_SSL_CLIENT_CERT_PP_PLAINTEXT
+SVN_CONFIG_DEFAULT_OPTION_HTTP_MAX_CONNECTIONS = _core.SVN_CONFIG_DEFAULT_OPTION_HTTP_MAX_CONNECTIONS
def svn_config_get_config(*args):
- """svn_config_get_config(char config_dir, apr_pool_t pool) -> svn_error_t"""
+ """svn_config_get_config(char const * config_dir, apr_pool_t pool) -> svn_error_t"""
return _core.svn_config_get_config(*args)
+def svn_config_create2(*args):
+ """
+ svn_config_create2(svn_boolean_t section_names_case_sensitive, svn_boolean_t option_names_case_sensitive,
+ apr_pool_t result_pool) -> svn_error_t
+ """
+ return _core.svn_config_create2(*args)
+
def svn_config_create(*args):
"""svn_config_create(svn_boolean_t section_names_case_sensitive, apr_pool_t result_pool) -> svn_error_t"""
return _core.svn_config_create(*args)
+def svn_config_read3(*args):
+ """
+ svn_config_read3(char const * file, svn_boolean_t must_exist, svn_boolean_t section_names_case_sensitive,
+ svn_boolean_t option_names_case_sensitive, apr_pool_t result_pool) -> svn_error_t
+ """
+ return _core.svn_config_read3(*args)
+
def svn_config_read2(*args):
"""
- svn_config_read2(char file, svn_boolean_t must_exist, svn_boolean_t section_names_case_sensitive,
- apr_pool_t pool) -> svn_error_t
+ svn_config_read2(char const * file, svn_boolean_t must_exist, svn_boolean_t section_names_case_sensitive,
+ apr_pool_t result_pool) -> svn_error_t
"""
return _core.svn_config_read2(*args)
def svn_config_read(*args):
- """svn_config_read(char file, svn_boolean_t must_exist, apr_pool_t pool) -> svn_error_t"""
+ """svn_config_read(char const * file, svn_boolean_t must_exist, apr_pool_t result_pool) -> svn_error_t"""
return _core.svn_config_read(*args)
+def svn_config_parse(*args):
+ """
+ svn_config_parse(svn_stream_t * stream, svn_boolean_t section_names_case_sensitive, svn_boolean_t option_names_case_sensitive,
+ apr_pool_t result_pool) -> svn_error_t
+ """
+ return _core.svn_config_parse(*args)
+
def svn_config_merge(*args):
- """svn_config_merge(svn_config_t cfg, char file, svn_boolean_t must_exist) -> svn_error_t"""
+ """svn_config_merge(svn_config_t * cfg, char const * file, svn_boolean_t must_exist) -> svn_error_t"""
return _core.svn_config_merge(*args)
def svn_config_get(*args):
- """svn_config_get(svn_config_t cfg, char section, char option, char default_value)"""
+ """svn_config_get(svn_config_t * cfg, char const * section, char const * option, char const * default_value)"""
return _core.svn_config_get(*args)
def svn_config_set(*args):
- """svn_config_set(svn_config_t cfg, char section, char option, char value)"""
+ """svn_config_set(svn_config_t * cfg, char const * section, char const * option, char const * value)"""
return _core.svn_config_set(*args)
def svn_config_get_bool(*args):
- """svn_config_get_bool(svn_config_t cfg, char section, char option, svn_boolean_t default_value) -> svn_error_t"""
+ """svn_config_get_bool(svn_config_t * cfg, char const * section, char const * option, svn_boolean_t default_value) -> svn_error_t"""
return _core.svn_config_get_bool(*args)
def svn_config_set_bool(*args):
- """svn_config_set_bool(svn_config_t cfg, char section, char option, svn_boolean_t value)"""
+ """svn_config_set_bool(svn_config_t * cfg, char const * section, char const * option, svn_boolean_t value)"""
return _core.svn_config_set_bool(*args)
+def svn_config_get_int64(*args):
+ """svn_config_get_int64(svn_config_t * cfg, char const * section, char const * option, apr_int64_t default_value) -> svn_error_t"""
+ return _core.svn_config_get_int64(*args)
+
+def svn_config_set_int64(*args):
+ """svn_config_set_int64(svn_config_t * cfg, char const * section, char const * option, apr_int64_t value)"""
+ return _core.svn_config_set_int64(*args)
+
def svn_config_get_yes_no_ask(*args):
- """svn_config_get_yes_no_ask(svn_config_t cfg, char section, char option, char default_value) -> svn_error_t"""
+ """svn_config_get_yes_no_ask(svn_config_t * cfg, char const * section, char const * option, char const * default_value) -> svn_error_t"""
return _core.svn_config_get_yes_no_ask(*args)
-def svn_config_enumerate_sections(*args):
+def svn_config_get_tristate(*args):
"""
- svn_config_enumerate_sections(svn_config_t cfg, svn_config_section_enumerator_t callback,
- void baton) -> int
+ svn_config_get_tristate(svn_config_t * cfg, svn_tristate_t * valuep, char const * section, char const * option,
+ char const * unknown_value, svn_tristate_t default_value) -> svn_error_t
"""
+ return _core.svn_config_get_tristate(*args)
+
+def svn_config_enumerate_sections(*args):
+ """svn_config_enumerate_sections(svn_config_t * cfg, svn_config_section_enumerator_t callback, void * baton) -> int"""
return _core.svn_config_enumerate_sections(*args)
def svn_config_enumerate_sections2(*args):
- """
- svn_config_enumerate_sections2(svn_config_t cfg, svn_config_section_enumerator2_t callback,
- void baton, apr_pool_t pool) -> int
- """
+ """svn_config_enumerate_sections2(svn_config_t * cfg, svn_config_section_enumerator2_t callback, apr_pool_t pool) -> int"""
return _core.svn_config_enumerate_sections2(*args)
def svn_config_enumerate(*args):
- """
- svn_config_enumerate(svn_config_t cfg, char section, svn_config_enumerator_t callback,
- void baton) -> int
- """
+ """svn_config_enumerate(svn_config_t * cfg, char const * section, svn_config_enumerator_t callback, void * baton) -> int"""
return _core.svn_config_enumerate(*args)
def svn_config_enumerate2(*args):
- """
- svn_config_enumerate2(svn_config_t cfg, char section, svn_config_enumerator2_t callback,
- void baton, apr_pool_t pool) -> int
- """
+ """svn_config_enumerate2(svn_config_t * cfg, char const * section, svn_config_enumerator2_t callback, apr_pool_t pool) -> int"""
return _core.svn_config_enumerate2(*args)
def svn_config_has_section(*args):
- """svn_config_has_section(svn_config_t cfg, char section) -> svn_boolean_t"""
+ """svn_config_has_section(svn_config_t * cfg, char const * section) -> svn_boolean_t"""
return _core.svn_config_has_section(*args)
def svn_config_find_group(*args):
- """svn_config_find_group(svn_config_t cfg, char key, char master_section, apr_pool_t pool) -> char"""
+ """svn_config_find_group(svn_config_t * cfg, char const * key, char const * master_section, apr_pool_t pool) -> char const *"""
return _core.svn_config_find_group(*args)
def svn_config_get_server_setting(*args):
- """
- svn_config_get_server_setting(svn_config_t cfg, char server_group, char option_name,
- char default_value) -> char
- """
+ """svn_config_get_server_setting(svn_config_t * cfg, char const * server_group, char const * option_name, char const * default_value) -> char const *"""
return _core.svn_config_get_server_setting(*args)
def svn_config_get_server_setting_int(*args):
"""
- svn_config_get_server_setting_int(svn_config_t cfg, char server_group, char option_name,
- apr_int64_t default_value, apr_pool_t pool) -> svn_error_t
+ svn_config_get_server_setting_int(svn_config_t * cfg, char const * server_group, char const * option_name, apr_int64_t default_value,
+ apr_pool_t pool) -> svn_error_t
"""
return _core.svn_config_get_server_setting_int(*args)
def svn_config_get_server_setting_bool(*args):
- """
- svn_config_get_server_setting_bool(svn_config_t cfg, char server_group, char option_name,
- svn_boolean_t default_value) -> svn_error_t
- """
+ """svn_config_get_server_setting_bool(svn_config_t * cfg, char const * server_group, char const * option_name, svn_boolean_t default_value) -> svn_error_t"""
return _core.svn_config_get_server_setting_bool(*args)
def svn_config_ensure(*args):
- """svn_config_ensure(char config_dir, apr_pool_t pool) -> svn_error_t"""
+ """svn_config_ensure(char const * config_dir, apr_pool_t pool) -> svn_error_t"""
return _core.svn_config_ensure(*args)
SVN_CONFIG_REALMSTRING_KEY = _core.SVN_CONFIG_REALMSTRING_KEY
def svn_config_read_auth_data(*args):
- """
- svn_config_read_auth_data(char cred_kind, char realmstring, char config_dir,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_config_read_auth_data(char const * cred_kind, char const * realmstring, char const * config_dir, apr_pool_t pool) -> svn_error_t"""
return _core.svn_config_read_auth_data(*args)
def svn_config_write_auth_data(*args):
"""
- svn_config_write_auth_data(apr_hash_t hash, char cred_kind, char realmstring,
- char config_dir, apr_pool_t pool) -> svn_error_t
+ svn_config_write_auth_data(apr_hash_t hash, char const * cred_kind, char const * realmstring, char const * config_dir,
+ apr_pool_t pool) -> svn_error_t
"""
return _core.svn_config_write_auth_data(*args)
+def svn_config_walk_auth_data(*args):
+ """svn_config_walk_auth_data(char const * config_dir, svn_config_auth_walk_func_t walk_func, apr_pool_t scratch_pool) -> svn_error_t"""
+ return _core.svn_config_walk_auth_data(*args)
+
def svn_config_get_user_config_path(*args):
- """svn_config_get_user_config_path(char config_dir, char fname, apr_pool_t pool) -> svn_error_t"""
+ """svn_config_get_user_config_path(char const * config_dir, char const * fname, apr_pool_t pool) -> svn_error_t"""
return _core.svn_config_get_user_config_path(*args)
+
+def svn_config_dup(*args):
+ """svn_config_dup(svn_config_t * src, apr_pool_t pool) -> svn_error_t"""
+ return _core.svn_config_dup(*args)
+
+def svn_config_copy_config(*args):
+ """svn_config_copy_config(apr_hash_t src_hash, apr_pool_t pool) -> svn_error_t"""
+ return _core.svn_config_copy_config(*args)
class svn_config_t:
"""Proxy of C svn_config_t struct"""
__swig_setmethods__ = {}
@@ -4036,29 +4381,30 @@ svn_config_t_swigregister(svn_config_t)
def svn_config_invoke_section_enumerator(*args):
- """svn_config_invoke_section_enumerator(svn_config_section_enumerator_t _obj, char name, void baton) -> svn_boolean_t"""
+ """svn_config_invoke_section_enumerator(svn_config_section_enumerator_t _obj, char const * name, void * baton) -> svn_boolean_t"""
return _core.svn_config_invoke_section_enumerator(*args)
def svn_config_invoke_section_enumerator2(*args):
- """
- svn_config_invoke_section_enumerator2(svn_config_section_enumerator2_t _obj, char name, void baton,
- apr_pool_t pool) -> svn_boolean_t
- """
+ """svn_config_invoke_section_enumerator2(svn_config_section_enumerator2_t _obj, char const * name, void * baton, apr_pool_t pool) -> svn_boolean_t"""
return _core.svn_config_invoke_section_enumerator2(*args)
def svn_config_invoke_enumerator(*args):
- """
- svn_config_invoke_enumerator(svn_config_enumerator_t _obj, char name, char value,
- void baton) -> svn_boolean_t
- """
+ """svn_config_invoke_enumerator(svn_config_enumerator_t _obj, char const * name, char const * value, void * baton) -> svn_boolean_t"""
return _core.svn_config_invoke_enumerator(*args)
def svn_config_invoke_enumerator2(*args):
"""
- svn_config_invoke_enumerator2(svn_config_enumerator2_t _obj, char name, char value,
- void baton, apr_pool_t pool) -> svn_boolean_t
+ svn_config_invoke_enumerator2(svn_config_enumerator2_t _obj, char const * name, char const * value, void * baton,
+ apr_pool_t pool) -> svn_boolean_t
"""
return _core.svn_config_invoke_enumerator2(*args)
+
+def svn_config_invoke_auth_walk_func(*args):
+ """
+ svn_config_invoke_auth_walk_func(svn_config_auth_walk_func_t _obj, void * cleanup_baton, char const * cred_kind, char const * realmstring,
+ apr_hash_t hash, apr_pool_t scratch_pool) -> svn_error_t
+ """
+ return _core.svn_config_invoke_auth_walk_func(*args)
class svn_config_section_enumerator_t:
"""Proxy of C svn_config_section_enumerator_t struct"""
__swig_setmethods__ = {}
@@ -4283,298 +4629,365 @@ class svn_config_enumerator2_t:
svn_config_enumerator2_t_swigregister = _core.svn_config_enumerator2_t_swigregister
svn_config_enumerator2_t_swigregister(svn_config_enumerator2_t)
+class svn_config_auth_walk_func_t:
+ """Proxy of C svn_config_auth_walk_func_t struct"""
+ __swig_setmethods__ = {}
+ __setattr__ = lambda self, name, value: _swig_setattr(self, svn_config_auth_walk_func_t, name, value)
+ __swig_getmethods__ = {}
+ __getattr__ = lambda self, name: _swig_getattr(self, svn_config_auth_walk_func_t, name)
+ def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+ __repr__ = _swig_repr
+ def set_parent_pool(self, parent_pool=None):
+ """Create a new proxy object for svn_config_auth_walk_func_t"""
+ import libsvn.core, weakref
+ self.__dict__["_parent_pool"] = \
+ parent_pool or libsvn.core.application_pool;
+ if self.__dict__["_parent_pool"]:
+ self.__dict__["_is_valid"] = weakref.ref(
+ self.__dict__["_parent_pool"]._is_valid)
+
+ def assert_valid(self):
+ """Assert that this object is using valid pool memory"""
+ if "_is_valid" in self.__dict__:
+ assert self.__dict__["_is_valid"](), "Variable has already been deleted"
+
+ def __getattr__(self, name):
+ """Get an attribute from this object"""
+ self.assert_valid()
+
+ value = _swig_getattr(self, self.__class__, name)
+
+
+
+ members = self.__dict__.get("_members")
+ if members is not None:
+ _copy_metadata_deep(value, members.get(name))
+
+
+ _assert_valid_deep(value)
+
+ return value
+
+ def __setattr__(self, name, value):
+ """Set an attribute on this object"""
+ self.assert_valid()
+
+
+
+
+ self.__dict__.setdefault("_members",{})[name] = value
+
+ return _swig_setattr(self, self.__class__, name, value)
+
+ def __call__(self, *args):
+ return svn_config_invoke_auth_walk_func(self, *args)
+
+svn_config_auth_walk_func_t_swigregister = _core.svn_config_auth_walk_func_t_swigregister
+svn_config_auth_walk_func_t_swigregister(svn_config_auth_walk_func_t)
+
+
+def svn_utf_initialize2(*args):
+ """svn_utf_initialize2(svn_boolean_t assume_native_utf8, apr_pool_t pool)"""
+ return _core.svn_utf_initialize2(*args)
def svn_utf_initialize(*args):
"""svn_utf_initialize(apr_pool_t pool)"""
return _core.svn_utf_initialize(*args)
def svn_utf_stringbuf_to_utf8(*args):
- """svn_utf_stringbuf_to_utf8(svn_stringbuf_t src, apr_pool_t pool) -> svn_error_t"""
+ """svn_utf_stringbuf_to_utf8(svn_stringbuf_t const * src, apr_pool_t pool) -> svn_error_t"""
return _core.svn_utf_stringbuf_to_utf8(*args)
def svn_utf_string_to_utf8(*args):
- """svn_utf_string_to_utf8(svn_string_t src, apr_pool_t pool) -> svn_error_t"""
+ """svn_utf_string_to_utf8(svn_string_t const * src, apr_pool_t pool) -> svn_error_t"""
return _core.svn_utf_string_to_utf8(*args)
def svn_utf_cstring_to_utf8(*args):
- """svn_utf_cstring_to_utf8(char src, apr_pool_t pool) -> svn_error_t"""
+ """svn_utf_cstring_to_utf8(char const * src, apr_pool_t pool) -> svn_error_t"""
return _core.svn_utf_cstring_to_utf8(*args)
def svn_utf_cstring_to_utf8_ex2(*args):
- """svn_utf_cstring_to_utf8_ex2(char src, char frompage, apr_pool_t pool) -> svn_error_t"""
+ """svn_utf_cstring_to_utf8_ex2(char const * src, char const * frompage, apr_pool_t pool) -> svn_error_t"""
return _core.svn_utf_cstring_to_utf8_ex2(*args)
def svn_utf_cstring_to_utf8_ex(*args):
- """svn_utf_cstring_to_utf8_ex(char src, char frompage, char convset_key, apr_pool_t pool) -> svn_error_t"""
+ """svn_utf_cstring_to_utf8_ex(char const * src, char const * frompage, char const * convset_key, apr_pool_t pool) -> svn_error_t"""
return _core.svn_utf_cstring_to_utf8_ex(*args)
def svn_utf_stringbuf_from_utf8(*args):
- """svn_utf_stringbuf_from_utf8(svn_stringbuf_t src, apr_pool_t pool) -> svn_error_t"""
+ """svn_utf_stringbuf_from_utf8(svn_stringbuf_t const * src, apr_pool_t pool) -> svn_error_t"""
return _core.svn_utf_stringbuf_from_utf8(*args)
def svn_utf_string_from_utf8(*args):
- """svn_utf_string_from_utf8(svn_string_t src, apr_pool_t pool) -> svn_error_t"""
+ """svn_utf_string_from_utf8(svn_string_t const * src, apr_pool_t pool) -> svn_error_t"""
return _core.svn_utf_string_from_utf8(*args)
def svn_utf_cstring_from_utf8(*args):
- """svn_utf_cstring_from_utf8(char src, apr_pool_t pool) -> svn_error_t"""
+ """svn_utf_cstring_from_utf8(char const * src, apr_pool_t pool) -> svn_error_t"""
return _core.svn_utf_cstring_from_utf8(*args)
def svn_utf_cstring_from_utf8_ex2(*args):
- """svn_utf_cstring_from_utf8_ex2(char src, char topage, apr_pool_t pool) -> svn_error_t"""
+ """svn_utf_cstring_from_utf8_ex2(char const * src, char const * topage, apr_pool_t pool) -> svn_error_t"""
return _core.svn_utf_cstring_from_utf8_ex2(*args)
def svn_utf_cstring_from_utf8_ex(*args):
- """svn_utf_cstring_from_utf8_ex(char src, char topage, char convset_key, apr_pool_t pool) -> svn_error_t"""
+ """svn_utf_cstring_from_utf8_ex(char const * src, char const * topage, char const * convset_key, apr_pool_t pool) -> svn_error_t"""
return _core.svn_utf_cstring_from_utf8_ex(*args)
def svn_utf_cstring_from_utf8_fuzzy(*args):
- """svn_utf_cstring_from_utf8_fuzzy(char src, apr_pool_t pool) -> char"""
+ """svn_utf_cstring_from_utf8_fuzzy(char const * src, apr_pool_t pool) -> char const *"""
return _core.svn_utf_cstring_from_utf8_fuzzy(*args)
def svn_utf_cstring_from_utf8_stringbuf(*args):
- """svn_utf_cstring_from_utf8_stringbuf(svn_stringbuf_t src, apr_pool_t pool) -> svn_error_t"""
+ """svn_utf_cstring_from_utf8_stringbuf(svn_stringbuf_t const * src, apr_pool_t pool) -> svn_error_t"""
return _core.svn_utf_cstring_from_utf8_stringbuf(*args)
def svn_utf_cstring_from_utf8_string(*args):
- """svn_utf_cstring_from_utf8_string(svn_string_t src, apr_pool_t pool) -> svn_error_t"""
+ """svn_utf_cstring_from_utf8_string(svn_string_t const * src, apr_pool_t pool) -> svn_error_t"""
return _core.svn_utf_cstring_from_utf8_string(*args)
+def svn_utf_cstring_utf8_width(*args):
+ """svn_utf_cstring_utf8_width(char const * cstr) -> int"""
+ return _core.svn_utf_cstring_utf8_width(*args)
+
def svn_nls_init():
"""svn_nls_init() -> svn_error_t"""
return _core.svn_nls_init()
def svn_path_internal_style(*args):
- """svn_path_internal_style(char path, apr_pool_t pool) -> char"""
+ """svn_path_internal_style(char const * path, apr_pool_t pool) -> char const *"""
return _core.svn_path_internal_style(*args)
def svn_path_local_style(*args):
- """svn_path_local_style(char path, apr_pool_t pool) -> char"""
+ """svn_path_local_style(char const * path, apr_pool_t pool) -> char const *"""
return _core.svn_path_local_style(*args)
def svn_path_splitext(*args):
- """svn_path_splitext(char path, apr_pool_t pool)"""
+ """svn_path_splitext(char const * path, apr_pool_t pool)"""
return _core.svn_path_splitext(*args)
def svn_path_is_empty(*args):
- """svn_path_is_empty(char path) -> int"""
+ """svn_path_is_empty(char const * path) -> int"""
return _core.svn_path_is_empty(*args)
def svn_dirent_is_root(*args):
- """svn_dirent_is_root(char dirent, apr_size_t len) -> svn_boolean_t"""
+ """svn_dirent_is_root(char const * dirent, apr_size_t len) -> svn_boolean_t"""
return _core.svn_dirent_is_root(*args)
def svn_path_canonicalize(*args):
- """svn_path_canonicalize(char path, apr_pool_t pool) -> char"""
+ """svn_path_canonicalize(char const * path, apr_pool_t pool) -> char const *"""
return _core.svn_path_canonicalize(*args)
def svn_path_is_canonical(*args):
- """svn_path_is_canonical(char path, apr_pool_t pool) -> svn_boolean_t"""
+ """svn_path_is_canonical(char const * path, apr_pool_t pool) -> svn_boolean_t"""
return _core.svn_path_is_canonical(*args)
def svn_path_compare_paths(*args):
- """svn_path_compare_paths(char path1, char path2) -> int"""
+ """svn_path_compare_paths(char const * path1, char const * path2) -> int"""
return _core.svn_path_compare_paths(*args)
def svn_path_get_longest_ancestor(*args):
- """svn_path_get_longest_ancestor(char path1, char path2, apr_pool_t pool) -> char"""
+ """svn_path_get_longest_ancestor(char const * path1, char const * path2, apr_pool_t pool) -> char *"""
return _core.svn_path_get_longest_ancestor(*args)
def svn_path_is_dotpath_present(*args):
- """svn_path_is_dotpath_present(char path) -> svn_boolean_t"""
+ """svn_path_is_dotpath_present(char const * path) -> svn_boolean_t"""
return _core.svn_path_is_dotpath_present(*args)
def svn_path_is_url(*args):
- """svn_path_is_url(char path) -> svn_boolean_t"""
+ """svn_path_is_url(char const * path) -> svn_boolean_t"""
return _core.svn_path_is_url(*args)
def svn_path_is_uri_safe(*args):
- """svn_path_is_uri_safe(char path) -> svn_boolean_t"""
+ """svn_path_is_uri_safe(char const * path) -> svn_boolean_t"""
return _core.svn_path_is_uri_safe(*args)
def svn_path_url_add_component2(*args):
- """svn_path_url_add_component2(char url, char component, apr_pool_t pool) -> char"""
+ """svn_path_url_add_component2(char const * url, char const * component, apr_pool_t pool) -> char const *"""
return _core.svn_path_url_add_component2(*args)
+def svn_path_is_repos_relative_url(*args):
+ """svn_path_is_repos_relative_url(char const * path) -> svn_boolean_t"""
+ return _core.svn_path_is_repos_relative_url(*args)
+
+def svn_path_resolve_repos_relative_url(*args):
+ """svn_path_resolve_repos_relative_url(char const * relative_url, char const * repos_root_url, apr_pool_t pool) -> svn_error_t"""
+ return _core.svn_path_resolve_repos_relative_url(*args)
+
+def svn_path_illegal_path_escape(*args):
+ """svn_path_illegal_path_escape(char const * path, apr_pool_t pool) -> char const *"""
+ return _core.svn_path_illegal_path_escape(*args)
+
def svn_dirent_internal_style(*args):
- """svn_dirent_internal_style(char dirent, apr_pool_t pool) -> char"""
+ """svn_dirent_internal_style(char const * dirent, apr_pool_t result_pool) -> char const *"""
return _core.svn_dirent_internal_style(*args)
def svn_dirent_local_style(*args):
- """svn_dirent_local_style(char dirent, apr_pool_t pool) -> char"""
+ """svn_dirent_local_style(char const * dirent, apr_pool_t result_pool) -> char const *"""
return _core.svn_dirent_local_style(*args)
def svn_relpath__internal_style(*args):
- """svn_relpath__internal_style(char relpath, apr_pool_t pool) -> char"""
+ """svn_relpath__internal_style(char const * relpath, apr_pool_t result_pool) -> char const *"""
return _core.svn_relpath__internal_style(*args)
def svn_dirent_join(*args):
- """svn_dirent_join(char base, char component, apr_pool_t pool) -> char"""
+ """svn_dirent_join(char const * base, char const * component, apr_pool_t result_pool) -> char *"""
return _core.svn_dirent_join(*args)
def svn_relpath_join(*args):
- """svn_relpath_join(char base, char component, apr_pool_t pool) -> char"""
+ """svn_relpath_join(char const * base, char const * component, apr_pool_t result_pool) -> char *"""
return _core.svn_relpath_join(*args)
def svn_dirent_basename(*args):
- """svn_dirent_basename(char dirent, apr_pool_t pool) -> char"""
+ """svn_dirent_basename(char const * dirent, apr_pool_t result_pool) -> char const *"""
return _core.svn_dirent_basename(*args)
def svn_dirent_dirname(*args):
- """svn_dirent_dirname(char dirent, apr_pool_t pool) -> char"""
+ """svn_dirent_dirname(char const * dirent, apr_pool_t result_pool) -> char *"""
return _core.svn_dirent_dirname(*args)
def svn_dirent_split(*args):
- """svn_dirent_split(char dirent, apr_pool_t pool)"""
+ """svn_dirent_split(char const * dirent, apr_pool_t result_pool)"""
return _core.svn_dirent_split(*args)
def svn_relpath_split(*args):
- """svn_relpath_split(char relpath, apr_pool_t pool)"""
+ """svn_relpath_split(char const * relpath, apr_pool_t result_pool)"""
return _core.svn_relpath_split(*args)
def svn_relpath_basename(*args):
- """svn_relpath_basename(char relpath, apr_pool_t pool) -> char"""
+ """svn_relpath_basename(char const * relpath, apr_pool_t result_pool) -> char const *"""
return _core.svn_relpath_basename(*args)
def svn_relpath_dirname(*args):
- """svn_relpath_dirname(char relpath, apr_pool_t pool) -> char"""
+ """svn_relpath_dirname(char const * relpath, apr_pool_t result_pool) -> char *"""
return _core.svn_relpath_dirname(*args)
def svn_uri_split(*args):
- """svn_uri_split(char uri, apr_pool_t pool)"""
+ """svn_uri_split(char const * uri, apr_pool_t result_pool)"""
return _core.svn_uri_split(*args)
def svn_uri_basename(*args):
- """svn_uri_basename(char uri, apr_pool_t pool) -> char"""
+ """svn_uri_basename(char const * uri, apr_pool_t result_pool) -> char const *"""
return _core.svn_uri_basename(*args)
def svn_uri_dirname(*args):
- """svn_uri_dirname(char uri, apr_pool_t pool) -> char"""
+ """svn_uri_dirname(char const * uri, apr_pool_t result_pool) -> char *"""
return _core.svn_uri_dirname(*args)
def svn_dirent_is_absolute(*args):
- """svn_dirent_is_absolute(char dirent) -> svn_boolean_t"""
+ """svn_dirent_is_absolute(char const * dirent) -> svn_boolean_t"""
return _core.svn_dirent_is_absolute(*args)
def svn_uri_is_root(*args):
- """svn_uri_is_root(char uri, apr_size_t len) -> svn_boolean_t"""
+ """svn_uri_is_root(char const * uri, apr_size_t len) -> svn_boolean_t"""
return _core.svn_uri_is_root(*args)
def svn_dirent_canonicalize(*args):
- """svn_dirent_canonicalize(char dirent, apr_pool_t pool) -> char"""
+ """svn_dirent_canonicalize(char const * dirent, apr_pool_t result_pool) -> char const *"""
return _core.svn_dirent_canonicalize(*args)
def svn_relpath_canonicalize(*args):
- """svn_relpath_canonicalize(char relpath, apr_pool_t pool) -> char"""
+ """svn_relpath_canonicalize(char const * relpath, apr_pool_t result_pool) -> char const *"""
return _core.svn_relpath_canonicalize(*args)
def svn_uri_canonicalize(*args):
- """svn_uri_canonicalize(char uri, apr_pool_t pool) -> char"""
+ """svn_uri_canonicalize(char const * uri, apr_pool_t result_pool) -> char const *"""
return _core.svn_uri_canonicalize(*args)
def svn_dirent_is_canonical(*args):
- """svn_dirent_is_canonical(char dirent, apr_pool_t pool) -> svn_boolean_t"""
+ """svn_dirent_is_canonical(char const * dirent, apr_pool_t scratch_pool) -> svn_boolean_t"""
return _core.svn_dirent_is_canonical(*args)
def svn_relpath_is_canonical(*args):
- """svn_relpath_is_canonical(char relpath) -> svn_boolean_t"""
+ """svn_relpath_is_canonical(char const * relpath) -> svn_boolean_t"""
return _core.svn_relpath_is_canonical(*args)
def svn_uri_is_canonical(*args):
- """svn_uri_is_canonical(char uri, apr_pool_t pool) -> svn_boolean_t"""
+ """svn_uri_is_canonical(char const * uri, apr_pool_t scratch_pool) -> svn_boolean_t"""
return _core.svn_uri_is_canonical(*args)
def svn_dirent_get_longest_ancestor(*args):
- """svn_dirent_get_longest_ancestor(char dirent1, char dirent2, apr_pool_t pool) -> char"""
+ """svn_dirent_get_longest_ancestor(char const * dirent1, char const * dirent2, apr_pool_t result_pool) -> char *"""
return _core.svn_dirent_get_longest_ancestor(*args)
def svn_relpath_get_longest_ancestor(*args):
- """svn_relpath_get_longest_ancestor(char relpath1, char relpath2, apr_pool_t pool) -> char"""
+ """svn_relpath_get_longest_ancestor(char const * relpath1, char const * relpath2, apr_pool_t result_pool) -> char *"""
return _core.svn_relpath_get_longest_ancestor(*args)
def svn_uri_get_longest_ancestor(*args):
- """svn_uri_get_longest_ancestor(char uri1, char uri2, apr_pool_t pool) -> char"""
+ """svn_uri_get_longest_ancestor(char const * uri1, char const * uri2, apr_pool_t result_pool) -> char *"""
return _core.svn_uri_get_longest_ancestor(*args)
def svn_dirent_get_absolute(*args):
- """svn_dirent_get_absolute(char relative, apr_pool_t pool) -> svn_error_t"""
+ """svn_dirent_get_absolute(char const * relative, apr_pool_t result_pool) -> svn_error_t"""
return _core.svn_dirent_get_absolute(*args)
-def svn_uri__is_child(*args):
- """svn_uri__is_child(char parent_uri, char child_uri, apr_pool_t pool) -> char"""
- return _core.svn_uri__is_child(*args)
-
def svn_dirent_is_child(*args):
- """svn_dirent_is_child(char parent_dirent, char child_dirent, apr_pool_t pool) -> char"""
+ """svn_dirent_is_child(char const * parent_dirent, char const * child_dirent, apr_pool_t result_pool) -> char const *"""
return _core.svn_dirent_is_child(*args)
-def svn_relpath__is_child(*args):
- """svn_relpath__is_child(char parent_relpath, char child_relpath, apr_pool_t pool) -> char"""
- return _core.svn_relpath__is_child(*args)
-
def svn_dirent_is_ancestor(*args):
- """svn_dirent_is_ancestor(char parent_dirent, char child_dirent) -> svn_boolean_t"""
+ """svn_dirent_is_ancestor(char const * parent_dirent, char const * child_dirent) -> svn_boolean_t"""
return _core.svn_dirent_is_ancestor(*args)
-def svn_relpath__is_ancestor(*args):
- """svn_relpath__is_ancestor(char parent_relpath, char child_relpath) -> svn_boolean_t"""
- return _core.svn_relpath__is_ancestor(*args)
-
def svn_uri__is_ancestor(*args):
- """svn_uri__is_ancestor(char parent_uri, char child_uri) -> svn_boolean_t"""
+ """svn_uri__is_ancestor(char const * parent_uri, char const * child_uri) -> svn_boolean_t"""
return _core.svn_uri__is_ancestor(*args)
def svn_dirent_skip_ancestor(*args):
- """svn_dirent_skip_ancestor(char parent_dirent, char child_dirent) -> char"""
+ """svn_dirent_skip_ancestor(char const * parent_dirent, char const * child_dirent) -> char const *"""
return _core.svn_dirent_skip_ancestor(*args)
def svn_relpath_skip_ancestor(*args):
- """svn_relpath_skip_ancestor(char parent_relpath, char child_relpath) -> char"""
+ """svn_relpath_skip_ancestor(char const * parent_relpath, char const * child_relpath) -> char const *"""
return _core.svn_relpath_skip_ancestor(*args)
def svn_uri_skip_ancestor(*args):
- """svn_uri_skip_ancestor(char parent_uri, char child_uri, apr_pool_t result_pool) -> char"""
+ """svn_uri_skip_ancestor(char const * parent_uri, char const * child_uri, apr_pool_t result_pool) -> char const *"""
return _core.svn_uri_skip_ancestor(*args)
def svn_uri_get_dirent_from_file_url(*args):
- """svn_uri_get_dirent_from_file_url(char url, apr_pool_t pool) -> svn_error_t"""
+ """svn_uri_get_dirent_from_file_url(char const * url, apr_pool_t result_pool) -> svn_error_t"""
return _core.svn_uri_get_dirent_from_file_url(*args)
def svn_uri_get_file_url_from_dirent(*args):
- """svn_uri_get_file_url_from_dirent(char dirent, apr_pool_t pool) -> svn_error_t"""
+ """svn_uri_get_file_url_from_dirent(char const * dirent, apr_pool_t result_pool) -> svn_error_t"""
return _core.svn_uri_get_file_url_from_dirent(*args)
SVN_MERGEINFO_NONINHERITABLE_STR = _core.SVN_MERGEINFO_NONINHERITABLE_STR
def svn_mergeinfo_parse(*args):
- """svn_mergeinfo_parse(char input, apr_pool_t pool) -> svn_error_t"""
+ """svn_mergeinfo_parse(char const * input, apr_pool_t pool) -> svn_error_t"""
return _core.svn_mergeinfo_parse(*args)
-def svn_mergeinfo_diff(*args):
+def svn_mergeinfo_diff2(*args):
"""
- svn_mergeinfo_diff(svn_mergeinfo_t mergefrom, svn_mergeinfo_t mergeto,
- svn_boolean_t consider_inheritance, apr_pool_t pool) -> svn_error_t
+ svn_mergeinfo_diff2(apr_hash_t mergefrom, apr_hash_t mergeto, svn_boolean_t consider_inheritance, apr_pool_t result_pool,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
+ return _core.svn_mergeinfo_diff2(*args)
+
+def svn_mergeinfo_diff(*args):
+ """svn_mergeinfo_diff(apr_hash_t mergefrom, apr_hash_t mergeto, svn_boolean_t consider_inheritance, apr_pool_t pool) -> svn_error_t"""
return _core.svn_mergeinfo_diff(*args)
+def svn_mergeinfo_merge2(*args):
+ """svn_mergeinfo_merge2(apr_hash_t mergeinfo, apr_hash_t changes, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
+ return _core.svn_mergeinfo_merge2(*args)
+
def svn_mergeinfo_catalog_merge(*args):
"""
- svn_mergeinfo_catalog_merge(svn_mergeinfo_catalog_t mergeinfo_catalog, svn_mergeinfo_catalog_t changes_catalog,
- apr_pool_t result_pool,
+ svn_mergeinfo_catalog_merge(apr_hash_t mergeinfo_catalog, apr_hash_t changes_catalog, apr_pool_t result_pool,
apr_pool_t scratch_pool) -> svn_error_t
"""
return _core.svn_mergeinfo_catalog_merge(*args)
def svn_mergeinfo_remove(*args):
- """
- svn_mergeinfo_remove(svn_mergeinfo_t eraser, svn_mergeinfo_t whiteboard,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_mergeinfo_remove(apr_hash_t eraser, apr_hash_t whiteboard, apr_pool_t pool) -> svn_error_t"""
return _core.svn_mergeinfo_remove(*args)
def svn_mergeinfo_remove2(*args):
"""
- svn_mergeinfo_remove2(svn_mergeinfo_t eraser, svn_mergeinfo_t whiteboard,
- svn_boolean_t consider_inheritance, apr_pool_t result_pool,
+ svn_mergeinfo_remove2(apr_hash_t eraser, apr_hash_t whiteboard, svn_boolean_t consider_inheritance, apr_pool_t result_pool,
apr_pool_t scratch_pool) -> svn_error_t
"""
return _core.svn_mergeinfo_remove2(*args)
@@ -4586,32 +4999,34 @@ def svn_rangelist_diff(*args):
"""
return _core.svn_rangelist_diff(*args)
+def svn_rangelist_merge2(*args):
+ """
+ svn_rangelist_merge2(apr_array_header_t rangelist, apr_array_header_t changes, apr_pool_t result_pool,
+ apr_pool_t scratch_pool) -> svn_error_t
+ """
+ return _core.svn_rangelist_merge2(*args)
+
def svn_rangelist_remove(*args):
"""
- svn_rangelist_remove(apr_array_header_t eraser, apr_array_header_t whiteboard,
- svn_boolean_t consider_inheritance, apr_pool_t pool) -> svn_error_t
+ svn_rangelist_remove(apr_array_header_t eraser, apr_array_header_t whiteboard, svn_boolean_t consider_inheritance,
+ apr_pool_t pool) -> svn_error_t
"""
return _core.svn_rangelist_remove(*args)
def svn_mergeinfo_intersect2(*args):
"""
- svn_mergeinfo_intersect2(svn_mergeinfo_t mergeinfo1, svn_mergeinfo_t mergeinfo2,
- svn_boolean_t consider_inheritance, apr_pool_t result_pool,
- apr_pool_t scratch_pool) -> svn_error_t
+ svn_mergeinfo_intersect2(apr_hash_t mergeinfo1, apr_hash_t mergeinfo2, svn_boolean_t consider_inheritance,
+ apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t
"""
return _core.svn_mergeinfo_intersect2(*args)
def svn_mergeinfo_intersect(*args):
- """
- svn_mergeinfo_intersect(svn_mergeinfo_t mergeinfo1, svn_mergeinfo_t mergeinfo2,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_mergeinfo_intersect(apr_hash_t mergeinfo1, apr_hash_t mergeinfo2, apr_pool_t pool) -> svn_error_t"""
return _core.svn_mergeinfo_intersect(*args)
def svn_rangelist_intersect(*args):
"""
- svn_rangelist_intersect(apr_array_header_t rangelist1, apr_array_header_t rangelist2,
- svn_boolean_t consider_inheritance,
+ svn_rangelist_intersect(apr_array_header_t rangelist1, apr_array_header_t rangelist2, svn_boolean_t consider_inheritance,
apr_pool_t pool) -> svn_error_t
"""
return _core.svn_rangelist_intersect(*args)
@@ -4622,44 +5037,36 @@ def svn_rangelist_to_string(*args):
def svn_rangelist_inheritable2(*args):
"""
- svn_rangelist_inheritable2(apr_array_header_t rangelist, svn_revnum_t start, svn_revnum_t end,
- svn_boolean_t inheritable, apr_pool_t result_pool,
- apr_pool_t scratch_pool) -> svn_error_t
+ svn_rangelist_inheritable2(apr_array_header_t rangelist, svn_revnum_t start, svn_revnum_t end, svn_boolean_t inheritable,
+ apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t
"""
return _core.svn_rangelist_inheritable2(*args)
def svn_rangelist_inheritable(*args):
- """
- svn_rangelist_inheritable(apr_array_header_t rangelist, svn_revnum_t start, svn_revnum_t end,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_rangelist_inheritable(apr_array_header_t rangelist, svn_revnum_t start, svn_revnum_t end, apr_pool_t pool) -> svn_error_t"""
return _core.svn_rangelist_inheritable(*args)
def svn_mergeinfo_inheritable2(*args):
"""
- svn_mergeinfo_inheritable2(svn_mergeinfo_t mergeinfo, char path, svn_revnum_t start,
- svn_revnum_t end, svn_boolean_t inheritable,
+ svn_mergeinfo_inheritable2(apr_hash_t mergeinfo, char const * path, svn_revnum_t start, svn_revnum_t end, svn_boolean_t inheritable,
apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t
"""
return _core.svn_mergeinfo_inheritable2(*args)
def svn_mergeinfo_inheritable(*args):
- """
- svn_mergeinfo_inheritable(svn_mergeinfo_t mergeinfo, char path, svn_revnum_t start,
- svn_revnum_t end, apr_pool_t pool) -> svn_error_t
- """
+ """svn_mergeinfo_inheritable(apr_hash_t mergeinfo, char const * path, svn_revnum_t start, svn_revnum_t end, apr_pool_t pool) -> svn_error_t"""
return _core.svn_mergeinfo_inheritable(*args)
def svn_mergeinfo_to_string(*args):
- """svn_mergeinfo_to_string(svn_mergeinfo_t mergeinput, apr_pool_t pool) -> svn_error_t"""
+ """svn_mergeinfo_to_string(apr_hash_t mergeinput, apr_pool_t pool) -> svn_error_t"""
return _core.svn_mergeinfo_to_string(*args)
def svn_mergeinfo_catalog_dup(*args):
- """svn_mergeinfo_catalog_dup(svn_mergeinfo_catalog_t mergeinfo_catalog, apr_pool_t pool) -> svn_mergeinfo_catalog_t"""
+ """svn_mergeinfo_catalog_dup(apr_hash_t mergeinfo_catalog, apr_pool_t pool) -> apr_hash_t"""
return _core.svn_mergeinfo_catalog_dup(*args)
def svn_mergeinfo_dup(*args):
- """svn_mergeinfo_dup(svn_mergeinfo_t mergeinfo, apr_pool_t pool) -> svn_mergeinfo_t"""
+ """svn_mergeinfo_dup(apr_hash_t mergeinfo, apr_pool_t pool) -> apr_hash_t"""
return _core.svn_mergeinfo_dup(*args)
def svn_rangelist_dup(*args):
@@ -4670,11 +5077,11 @@ svn_mergeinfo_inherited = _core.svn_mergeinfo_inherited
svn_mergeinfo_nearest_ancestor = _core.svn_mergeinfo_nearest_ancestor
def svn_inheritance_to_word(*args):
- """svn_inheritance_to_word(svn_mergeinfo_inheritance_t inherit) -> char"""
+ """svn_inheritance_to_word(svn_mergeinfo_inheritance_t inherit) -> char const *"""
return _core.svn_inheritance_to_word(*args)
def svn_inheritance_from_word(*args):
- """svn_inheritance_from_word(char word) -> svn_mergeinfo_inheritance_t"""
+ """svn_inheritance_from_word(char const * word) -> svn_mergeinfo_inheritance_t"""
return _core.svn_inheritance_from_word(*args)
svn_io_file_del_none = _core.svn_io_file_del_none
svn_io_file_del_on_close = _core.svn_io_file_del_on_close
@@ -4737,7 +5144,7 @@ class svn_io_dirent2_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_io_dirent2_t"""
+ """__init__(svn_io_dirent2_t self) -> svn_io_dirent2_t"""
this = _core.new_svn_io_dirent2_t()
try: self.this.append(this)
except: self.this = this
@@ -4808,7 +5215,7 @@ class svn_io_dirent_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_io_dirent_t"""
+ """__init__(svn_io_dirent_t self) -> svn_io_dirent_t"""
this = _core.new_svn_io_dirent_t()
try: self.this.append(this)
except: self.this = this
@@ -4820,94 +5227,97 @@ svn_io_dirent_t_swigregister(svn_io_dirent_t)
def svn_io_open_uniquely_named(*args):
"""
- svn_io_open_uniquely_named(char dirpath, char filename, char suffix, svn_io_file_del_t delete_when,
- apr_pool_t result_pool,
- apr_pool_t scratch_pool) -> svn_error_t
+ svn_io_open_uniquely_named(char const * dirpath, char const * filename, char const * suffix, svn_io_file_del_t delete_when,
+ apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t
"""
return _core.svn_io_open_uniquely_named(*args)
def svn_io_open_unique_file3(*args):
- """
- svn_io_open_unique_file3(char dirpath, svn_io_file_del_t delete_when, apr_pool_t result_pool,
- apr_pool_t scratch_pool) -> svn_error_t
- """
+ """svn_io_open_unique_file3(char const * dirpath, svn_io_file_del_t delete_when, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
return _core.svn_io_open_unique_file3(*args)
def svn_io_open_unique_file2(*args):
- """
- svn_io_open_unique_file2(char path, char suffix, svn_io_file_del_t delete_when,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_io_open_unique_file2(char const * path, char const * suffix, svn_io_file_del_t delete_when, apr_pool_t pool) -> svn_error_t"""
return _core.svn_io_open_unique_file2(*args)
def svn_io_open_unique_file(*args):
- """
- svn_io_open_unique_file(char path, char suffix, svn_boolean_t delete_on_close,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_io_open_unique_file(char const * path, char const * suffix, svn_boolean_t delete_on_close, apr_pool_t pool) -> svn_error_t"""
return _core.svn_io_open_unique_file(*args)
def svn_io_copy_perms(*args):
- """svn_io_copy_perms(char src, char dst, apr_pool_t pool) -> svn_error_t"""
+ """svn_io_copy_perms(char const * src, char const * dst, apr_pool_t pool) -> svn_error_t"""
return _core.svn_io_copy_perms(*args)
def svn_io_sleep_for_timestamps(*args):
- """svn_io_sleep_for_timestamps(char path, apr_pool_t pool)"""
+ """svn_io_sleep_for_timestamps(char const * path, apr_pool_t pool)"""
return _core.svn_io_sleep_for_timestamps(*args)
+def svn_io_filesizes_three_different_p(*args):
+ """svn_io_filesizes_three_different_p(char const * file1, char const * file2, char const * file3, apr_pool_t scratch_pool) -> svn_error_t"""
+ return _core.svn_io_filesizes_three_different_p(*args)
+
def svn_io_file_checksum2(*args):
- """svn_io_file_checksum2(char file, svn_checksum_kind_t kind, apr_pool_t pool) -> svn_error_t"""
+ """svn_io_file_checksum2(char const * file, svn_checksum_kind_t kind, apr_pool_t pool) -> svn_error_t"""
return _core.svn_io_file_checksum2(*args)
def svn_io_file_checksum(*args):
- """svn_io_file_checksum(char file, apr_pool_t pool) -> svn_error_t"""
+ """svn_io_file_checksum(char const * file, apr_pool_t pool) -> svn_error_t"""
return _core.svn_io_file_checksum(*args)
def svn_io_files_contents_same_p(*args):
- """svn_io_files_contents_same_p(char file1, char file2, apr_pool_t pool) -> svn_error_t"""
+ """svn_io_files_contents_same_p(char const * file1, char const * file2, apr_pool_t pool) -> svn_error_t"""
return _core.svn_io_files_contents_same_p(*args)
+def svn_io_files_contents_three_same_p(*args):
+ """svn_io_files_contents_three_same_p(char const * file1, char const * file2, char const * file3, apr_pool_t scratch_pool) -> svn_error_t"""
+ return _core.svn_io_files_contents_three_same_p(*args)
+
+def svn_io_lock_open_file(*args):
+ """svn_io_lock_open_file(apr_file_t lockfile_handle, svn_boolean_t exclusive, svn_boolean_t nonblocking, apr_pool_t pool) -> svn_error_t"""
+ return _core.svn_io_lock_open_file(*args)
+
+def svn_io_unlock_open_file(*args):
+ """svn_io_unlock_open_file(apr_file_t lockfile_handle, apr_pool_t pool) -> svn_error_t"""
+ return _core.svn_io_unlock_open_file(*args)
+
def svn_stream_set_skip(*args):
- """svn_stream_set_skip(svn_stream_t stream, svn_stream_skip_fn_t skip_fn)"""
+ """svn_stream_set_skip(svn_stream_t * stream, svn_stream_skip_fn_t skip_fn)"""
return _core.svn_stream_set_skip(*args)
def svn_stream_set_mark(*args):
- """svn_stream_set_mark(svn_stream_t stream, svn_stream_mark_fn_t mark_fn)"""
+ """svn_stream_set_mark(svn_stream_t * stream, svn_stream_mark_fn_t mark_fn)"""
return _core.svn_stream_set_mark(*args)
def svn_stream_set_seek(*args):
- """svn_stream_set_seek(svn_stream_t stream, svn_stream_seek_fn_t seek_fn)"""
+ """svn_stream_set_seek(svn_stream_t * stream, svn_stream_seek_fn_t seek_fn)"""
return _core.svn_stream_set_seek(*args)
def svn_stream_empty(*args):
- """svn_stream_empty(apr_pool_t pool) -> svn_stream_t"""
+ """svn_stream_empty(apr_pool_t pool) -> svn_stream_t *"""
return _core.svn_stream_empty(*args)
def svn_stream_disown(*args):
- """svn_stream_disown(svn_stream_t stream, apr_pool_t pool) -> svn_stream_t"""
+ """svn_stream_disown(svn_stream_t * stream, apr_pool_t pool) -> svn_stream_t *"""
return _core.svn_stream_disown(*args)
def svn_stream_open_readonly(*args):
- """svn_stream_open_readonly(char path, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
+ """svn_stream_open_readonly(char const * path, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
return _core.svn_stream_open_readonly(*args)
def svn_stream_open_writable(*args):
- """svn_stream_open_writable(char path, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
+ """svn_stream_open_writable(char const * path, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
return _core.svn_stream_open_writable(*args)
def svn_stream_open_unique(*args):
- """
- svn_stream_open_unique(char dirpath, svn_io_file_del_t delete_when, apr_pool_t result_pool,
- apr_pool_t scratch_pool) -> svn_error_t
- """
+ """svn_stream_open_unique(char const * dirpath, svn_io_file_del_t delete_when, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
return _core.svn_stream_open_unique(*args)
def svn_stream_from_aprfile2(*args):
- """svn_stream_from_aprfile2(apr_file_t file, svn_boolean_t disown, apr_pool_t pool) -> svn_stream_t"""
+ """svn_stream_from_aprfile2(apr_file_t file, svn_boolean_t disown, apr_pool_t pool) -> svn_stream_t *"""
return _core.svn_stream_from_aprfile2(*args)
def svn_stream_from_aprfile(*args):
- """svn_stream_from_aprfile(apr_file_t file, apr_pool_t pool) -> svn_stream_t"""
+ """svn_stream_from_aprfile(apr_file_t file, apr_pool_t pool) -> svn_stream_t *"""
return _core.svn_stream_from_aprfile(*args)
def svn_stream_for_stdin(*args):
@@ -4923,100 +5333,109 @@ def svn_stream_for_stdout(*args):
return _core.svn_stream_for_stdout(*args)
def svn_stream_from_stringbuf(*args):
- """svn_stream_from_stringbuf(svn_stringbuf_t str, apr_pool_t pool) -> svn_stream_t"""
+ """svn_stream_from_stringbuf(svn_stringbuf_t * str, apr_pool_t pool) -> svn_stream_t *"""
return _core.svn_stream_from_stringbuf(*args)
def svn_stream_from_string(*args):
- """svn_stream_from_string(svn_string_t str, apr_pool_t pool) -> svn_stream_t"""
+ """svn_stream_from_string(svn_string_t const * str, apr_pool_t pool) -> svn_stream_t *"""
return _core.svn_stream_from_string(*args)
+def svn_stream_buffered(*args):
+ """svn_stream_buffered(apr_pool_t result_pool) -> svn_stream_t *"""
+ return _core.svn_stream_buffered(*args)
+
def svn_stream_compressed(*args):
- """svn_stream_compressed(svn_stream_t stream, apr_pool_t pool) -> svn_stream_t"""
+ """svn_stream_compressed(svn_stream_t * stream, apr_pool_t pool) -> svn_stream_t *"""
return _core.svn_stream_compressed(*args)
def svn_stream_checksummed2(*args):
"""
- svn_stream_checksummed2(svn_stream_t stream, svn_checksum_kind_t checksum_kind,
- svn_boolean_t read_all, apr_pool_t pool) -> svn_stream_t
+ svn_stream_checksummed2(svn_stream_t * stream, svn_checksum_kind_t checksum_kind, svn_boolean_t read_all,
+ apr_pool_t pool) -> svn_stream_t *
"""
return _core.svn_stream_checksummed2(*args)
def svn_stream_read(*args):
- """svn_stream_read(svn_stream_t stream, char buffer) -> svn_error_t"""
+ """svn_stream_read(svn_stream_t * stream, char * buffer) -> svn_error_t"""
return _core.svn_stream_read(*args)
def svn_stream_skip(*args):
- """svn_stream_skip(svn_stream_t stream, apr_size_t len) -> svn_error_t"""
+ """svn_stream_skip(svn_stream_t * stream, apr_size_t len) -> svn_error_t"""
return _core.svn_stream_skip(*args)
def svn_stream_write(*args):
- """svn_stream_write(svn_stream_t stream, char data) -> svn_error_t"""
+ """svn_stream_write(svn_stream_t * stream, char const * data) -> svn_error_t"""
return _core.svn_stream_write(*args)
def svn_stream_close(*args):
- """svn_stream_close(svn_stream_t stream) -> svn_error_t"""
+ """svn_stream_close(svn_stream_t * stream) -> svn_error_t"""
return _core.svn_stream_close(*args)
def svn_stream_reset(*args):
- """svn_stream_reset(svn_stream_t stream) -> svn_error_t"""
+ """svn_stream_reset(svn_stream_t * stream) -> svn_error_t"""
return _core.svn_stream_reset(*args)
def svn_stream_supports_mark(*args):
- """svn_stream_supports_mark(svn_stream_t stream) -> svn_boolean_t"""
+ """svn_stream_supports_mark(svn_stream_t * stream) -> svn_boolean_t"""
return _core.svn_stream_supports_mark(*args)
def svn_stream_mark(*args):
- """svn_stream_mark(svn_stream_t stream, apr_pool_t pool) -> svn_error_t"""
+ """svn_stream_mark(svn_stream_t * stream, apr_pool_t pool) -> svn_error_t"""
return _core.svn_stream_mark(*args)
def svn_stream_seek(*args):
- """svn_stream_seek(svn_stream_t stream, svn_stream_mark_t mark) -> svn_error_t"""
+ """svn_stream_seek(svn_stream_t * stream, svn_stream_mark_t const * mark) -> svn_error_t"""
return _core.svn_stream_seek(*args)
def svn_stream_tee(*args):
- """svn_stream_tee(svn_stream_t out1, svn_stream_t out2, apr_pool_t pool) -> svn_stream_t"""
+ """svn_stream_tee(svn_stream_t * out1, svn_stream_t * out2, apr_pool_t pool) -> svn_stream_t *"""
return _core.svn_stream_tee(*args)
+def svn_stream_puts(*args):
+ """svn_stream_puts(svn_stream_t * stream, char const * str) -> svn_error_t"""
+ return _core.svn_stream_puts(*args)
+
def svn_stream_readline(*args):
- """svn_stream_readline(svn_stream_t stream, char eol, apr_pool_t pool) -> svn_error_t"""
+ """svn_stream_readline(svn_stream_t * stream, char const * eol, apr_pool_t pool) -> svn_error_t"""
return _core.svn_stream_readline(*args)
def svn_stream_copy3(*args):
- """
- svn_stream_copy3(svn_stream_t _from, svn_stream_t to, svn_cancel_func_t cancel_func,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_stream_copy3(svn_stream_t * _from, svn_stream_t * to, svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t"""
return _core.svn_stream_copy3(*args)
def svn_stream_copy2(*args):
- """
- svn_stream_copy2(svn_stream_t _from, svn_stream_t to, svn_cancel_func_t cancel_func,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_stream_copy2(svn_stream_t * _from, svn_stream_t * to, svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t"""
return _core.svn_stream_copy2(*args)
def svn_stream_copy(*args):
- """svn_stream_copy(svn_stream_t _from, svn_stream_t to, apr_pool_t pool) -> svn_error_t"""
+ """svn_stream_copy(svn_stream_t * _from, svn_stream_t * to, apr_pool_t pool) -> svn_error_t"""
return _core.svn_stream_copy(*args)
def svn_stream_contents_same2(*args):
- """svn_stream_contents_same2(svn_stream_t stream1, svn_stream_t stream2, apr_pool_t pool) -> svn_error_t"""
+ """svn_stream_contents_same2(svn_stream_t * stream1, svn_stream_t * stream2, apr_pool_t pool) -> svn_error_t"""
return _core.svn_stream_contents_same2(*args)
def svn_stream_contents_same(*args):
- """svn_stream_contents_same(svn_stream_t stream1, svn_stream_t stream2, apr_pool_t pool) -> svn_error_t"""
+ """svn_stream_contents_same(svn_stream_t * stream1, svn_stream_t * stream2, apr_pool_t pool) -> svn_error_t"""
return _core.svn_stream_contents_same(*args)
def svn_string_from_stream(*args):
- """svn_string_from_stream(svn_stream_t stream, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
+ """svn_string_from_stream(svn_stream_t * stream, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
return _core.svn_string_from_stream(*args)
+def svn_stream_lazyopen_create(*args):
+ """
+ svn_stream_lazyopen_create(svn_stream_lazyopen_func_t open_func, void * open_baton, svn_boolean_t open_on_close,
+ apr_pool_t result_pool) -> svn_stream_t *
+ """
+ return _core.svn_stream_lazyopen_create(*args)
+
def svn_stringbuf_from_file2(*args):
- """svn_stringbuf_from_file2(char filename, apr_pool_t pool) -> svn_error_t"""
+ """svn_stringbuf_from_file2(char const * filename, apr_pool_t pool) -> svn_error_t"""
return _core.svn_stringbuf_from_file2(*args)
def svn_stringbuf_from_file(*args):
- """svn_stringbuf_from_file(char filename, apr_pool_t pool) -> svn_error_t"""
+ """svn_stringbuf_from_file(char const * filename, apr_pool_t pool) -> svn_error_t"""
return _core.svn_stringbuf_from_file(*args)
def svn_stringbuf_from_aprfile(*args):
@@ -5024,50 +5443,56 @@ def svn_stringbuf_from_aprfile(*args):
return _core.svn_stringbuf_from_aprfile(*args)
def svn_io_remove_file2(*args):
- """svn_io_remove_file2(char path, svn_boolean_t ignore_enoent, apr_pool_t scratch_pool) -> svn_error_t"""
+ """svn_io_remove_file2(char const * path, svn_boolean_t ignore_enoent, apr_pool_t scratch_pool) -> svn_error_t"""
return _core.svn_io_remove_file2(*args)
def svn_io_remove_file(*args):
- """svn_io_remove_file(char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_io_remove_file(char const * path, apr_pool_t pool) -> svn_error_t"""
return _core.svn_io_remove_file(*args)
def svn_io_remove_dir2(*args):
- """
- svn_io_remove_dir2(char path, svn_boolean_t ignore_enoent, svn_cancel_func_t cancel_func,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_io_remove_dir2(char const * path, svn_boolean_t ignore_enoent, svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t"""
return _core.svn_io_remove_dir2(*args)
def svn_io_remove_dir(*args):
- """svn_io_remove_dir(char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_io_remove_dir(char const * path, apr_pool_t pool) -> svn_error_t"""
return _core.svn_io_remove_dir(*args)
def svn_io_get_dirents3(*args):
- """
- svn_io_get_dirents3(char path, svn_boolean_t only_check_type, apr_pool_t result_pool,
- apr_pool_t scratch_pool) -> svn_error_t
- """
+ """svn_io_get_dirents3(char const * path, svn_boolean_t only_check_type, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
return _core.svn_io_get_dirents3(*args)
-def svn_io_stat_dirent(*args):
+def svn_io_stat_dirent2(*args):
"""
- svn_io_stat_dirent(char path, svn_boolean_t ignore_enoent, apr_pool_t result_pool,
+ svn_io_stat_dirent2(char const * path, svn_boolean_t verify_truename, svn_boolean_t ignore_enoent, apr_pool_t result_pool,
apr_pool_t scratch_pool) -> svn_error_t
"""
+ return _core.svn_io_stat_dirent2(*args)
+
+def svn_io_stat_dirent(*args):
+ """svn_io_stat_dirent(char const * path, svn_boolean_t ignore_enoent, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
return _core.svn_io_stat_dirent(*args)
def svn_io_dir_walk2(*args):
"""
- svn_io_dir_walk2(char dirname, apr_int32_t wanted, svn_io_walk_func_t walk_func,
- void walk_baton, apr_pool_t pool) -> svn_error_t
+ svn_io_dir_walk2(char const * dirname, apr_int32_t wanted, svn_io_walk_func_t walk_func, void * walk_baton,
+ apr_pool_t pool) -> svn_error_t
"""
return _core.svn_io_dir_walk2(*args)
+def svn_io_start_cmd3(*args):
+ """
+ svn_io_start_cmd3(apr_proc_t * cmd_proc, char const * path, char const * cmd, char const *const * args,
+ char const *const * env, svn_boolean_t inherit, svn_boolean_t infile_pipe,
+ apr_file_t infile, svn_boolean_t outfile_pipe, apr_file_t outfile, svn_boolean_t errfile_pipe,
+ apr_file_t errfile, apr_pool_t pool) -> svn_error_t
+ """
+ return _core.svn_io_start_cmd3(*args)
+
def svn_io_start_cmd2(*args):
"""
- svn_io_start_cmd2(apr_proc_t cmd_proc, char path, char cmd, char args,
- svn_boolean_t inherit, svn_boolean_t infile_pipe,
- apr_file_t infile, svn_boolean_t outfile_pipe,
+ svn_io_start_cmd2(apr_proc_t * cmd_proc, char const * path, char const * cmd, char const *const * args,
+ svn_boolean_t inherit, svn_boolean_t infile_pipe, apr_file_t infile, svn_boolean_t outfile_pipe,
apr_file_t outfile, svn_boolean_t errfile_pipe,
apr_file_t errfile, apr_pool_t pool) -> svn_error_t
"""
@@ -5075,36 +5500,34 @@ def svn_io_start_cmd2(*args):
def svn_io_run_diff2(*args):
"""
- svn_io_run_diff2(char dir, char user_args, int num_user_args, char label1,
- char label2, char _from, char to, apr_file_t outfile,
- apr_file_t errfile, char diff_cmd,
- apr_pool_t pool) -> svn_error_t
+ svn_io_run_diff2(char const * dir, char const *const * user_args, int num_user_args, char const * label1,
+ char const * label2, char const * _from, char const * to, apr_file_t outfile,
+ apr_file_t errfile, char const * diff_cmd, apr_pool_t pool) -> svn_error_t
"""
return _core.svn_io_run_diff2(*args)
def svn_io_run_diff3_3(*args):
"""
- svn_io_run_diff3_3(char dir, char mine, char older, char yours, char mine_label,
- char older_label, char yours_label,
- apr_file_t merged, char diff3_cmd, apr_array_header_t user_args,
- apr_pool_t pool) -> svn_error_t
+ svn_io_run_diff3_3(char const * dir, char const * mine, char const * older, char const * yours, char const * mine_label,
+ char const * older_label, char const * yours_label, apr_file_t merged,
+ char const * diff3_cmd, apr_array_header_t user_args, apr_pool_t pool) -> svn_error_t
"""
return _core.svn_io_run_diff3_3(*args)
def svn_io_parse_mimetypes_file(*args):
- """svn_io_parse_mimetypes_file(char mimetypes_file, apr_pool_t pool) -> svn_error_t"""
+ """svn_io_parse_mimetypes_file(char const * mimetypes_file, apr_pool_t pool) -> svn_error_t"""
return _core.svn_io_parse_mimetypes_file(*args)
def svn_io_detect_mimetype2(*args):
- """svn_io_detect_mimetype2(char file, apr_hash_t mimetype_map, apr_pool_t pool) -> svn_error_t"""
+ """svn_io_detect_mimetype2(char const * file, apr_hash_t mimetype_map, apr_pool_t pool) -> svn_error_t"""
return _core.svn_io_detect_mimetype2(*args)
def svn_io_detect_mimetype(*args):
- """svn_io_detect_mimetype(char file, apr_pool_t pool) -> svn_error_t"""
+ """svn_io_detect_mimetype(char const * file, apr_pool_t pool) -> svn_error_t"""
return _core.svn_io_detect_mimetype(*args)
def svn_io_is_binary_data(*args):
- """svn_io_is_binary_data(void buf, apr_size_t len) -> svn_boolean_t"""
+ """svn_io_is_binary_data(void const * buf, apr_size_t len) -> svn_boolean_t"""
return _core.svn_io_is_binary_data(*args)
def svn_io_file_putc(*args):
@@ -5112,12 +5535,12 @@ def svn_io_file_putc(*args):
return _core.svn_io_file_putc(*args)
def svn_io_file_read_full2(*args):
- """svn_io_file_read_full2(apr_file_t file, void buf, apr_size_t nbytes, apr_pool_t pool) -> svn_error_t"""
+ """svn_io_file_read_full2(apr_file_t file, void * buf, apr_size_t nbytes, apr_pool_t pool) -> svn_error_t"""
return _core.svn_io_file_read_full2(*args)
def svn_io_write_unique(*args):
"""
- svn_io_write_unique(char dirpath, void buf, apr_size_t nbytes, svn_io_file_del_t delete_when,
+ svn_io_write_unique(char const * dirpath, void const * buf, apr_size_t nbytes, svn_io_file_del_t delete_when,
apr_pool_t pool) -> svn_error_t
"""
return _core.svn_io_write_unique(*args)
@@ -5127,12 +5550,16 @@ def svn_io_file_trunc(*args):
return _core.svn_io_file_trunc(*args)
def svn_io_dir_close(*args):
- """svn_io_dir_close(apr_dir_t thedir) -> svn_error_t"""
+ """svn_io_dir_close(apr_dir_t * thedir) -> svn_error_t"""
return _core.svn_io_dir_close(*args)
def svn_io_file_name_get(*args):
"""svn_io_file_name_get(apr_file_t file, apr_pool_t pool) -> svn_error_t"""
return _core.svn_io_file_name_get(*args)
+
+def svn_io_file_readline(*args):
+ """svn_io_file_readline(apr_file_t file, apr_size_t max_len, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
+ return _core.svn_io_file_readline(*args)
class svn_stream_t:
"""Proxy of C svn_stream_t struct"""
__swig_setmethods__ = {}
@@ -5241,32 +5668,36 @@ svn_stream_mark_t_swigregister(svn_stream_mark_t)
def svn_read_invoke_fn(*args):
- """svn_read_invoke_fn(svn_read_fn_t _obj, void baton, char buffer) -> svn_error_t"""
+ """svn_read_invoke_fn(svn_read_fn_t _obj, void * baton, char * buffer) -> svn_error_t"""
return _core.svn_read_invoke_fn(*args)
def svn_stream_invoke_skip_fn(*args):
- """svn_stream_invoke_skip_fn(svn_stream_skip_fn_t _obj, void baton, apr_size_t len) -> svn_error_t"""
+ """svn_stream_invoke_skip_fn(svn_stream_skip_fn_t _obj, void * baton, apr_size_t len) -> svn_error_t"""
return _core.svn_stream_invoke_skip_fn(*args)
def svn_write_invoke_fn(*args):
- """svn_write_invoke_fn(svn_write_fn_t _obj, void baton, char data) -> svn_error_t"""
+ """svn_write_invoke_fn(svn_write_fn_t _obj, void * baton, char const * data) -> svn_error_t"""
return _core.svn_write_invoke_fn(*args)
def svn_close_invoke_fn(*args):
- """svn_close_invoke_fn(svn_close_fn_t _obj, void baton) -> svn_error_t"""
+ """svn_close_invoke_fn(svn_close_fn_t _obj, void * baton) -> svn_error_t"""
return _core.svn_close_invoke_fn(*args)
def svn_stream_invoke_mark_fn(*args):
- """svn_stream_invoke_mark_fn(svn_stream_mark_fn_t _obj, void baton, apr_pool_t pool) -> svn_error_t"""
+ """svn_stream_invoke_mark_fn(svn_stream_mark_fn_t _obj, void * baton, apr_pool_t pool) -> svn_error_t"""
return _core.svn_stream_invoke_mark_fn(*args)
def svn_stream_invoke_seek_fn(*args):
- """svn_stream_invoke_seek_fn(svn_stream_seek_fn_t _obj, void baton, svn_stream_mark_t mark) -> svn_error_t"""
+ """svn_stream_invoke_seek_fn(svn_stream_seek_fn_t _obj, void * baton, svn_stream_mark_t const * mark) -> svn_error_t"""
return _core.svn_stream_invoke_seek_fn(*args)
+def svn_stream_invoke_lazyopen_func(*args):
+ """svn_stream_invoke_lazyopen_func(svn_stream_lazyopen_func_t _obj, void * baton, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
+ return _core.svn_stream_invoke_lazyopen_func(*args)
+
def svn_io_invoke_walk_func(*args):
"""
- svn_io_invoke_walk_func(svn_io_walk_func_t _obj, void baton, char path, apr_finfo_t finfo,
+ svn_io_invoke_walk_func(svn_io_walk_func_t _obj, void * baton, char const * path, apr_finfo_t const * finfo,
apr_pool_t pool) -> svn_error_t
"""
return _core.svn_io_invoke_walk_func(*args)
@@ -5606,6 +6037,62 @@ class svn_stream_seek_fn_t:
svn_stream_seek_fn_t_swigregister = _core.svn_stream_seek_fn_t_swigregister
svn_stream_seek_fn_t_swigregister(svn_stream_seek_fn_t)
+class svn_stream_lazyopen_func_t:
+ """Proxy of C svn_stream_lazyopen_func_t struct"""
+ __swig_setmethods__ = {}
+ __setattr__ = lambda self, name, value: _swig_setattr(self, svn_stream_lazyopen_func_t, name, value)
+ __swig_getmethods__ = {}
+ __getattr__ = lambda self, name: _swig_getattr(self, svn_stream_lazyopen_func_t, name)
+ def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+ __repr__ = _swig_repr
+ def set_parent_pool(self, parent_pool=None):
+ """Create a new proxy object for svn_stream_lazyopen_func_t"""
+ import libsvn.core, weakref
+ self.__dict__["_parent_pool"] = \
+ parent_pool or libsvn.core.application_pool;
+ if self.__dict__["_parent_pool"]:
+ self.__dict__["_is_valid"] = weakref.ref(
+ self.__dict__["_parent_pool"]._is_valid)
+
+ def assert_valid(self):
+ """Assert that this object is using valid pool memory"""
+ if "_is_valid" in self.__dict__:
+ assert self.__dict__["_is_valid"](), "Variable has already been deleted"
+
+ def __getattr__(self, name):
+ """Get an attribute from this object"""
+ self.assert_valid()
+
+ value = _swig_getattr(self, self.__class__, name)
+
+
+
+ members = self.__dict__.get("_members")
+ if members is not None:
+ _copy_metadata_deep(value, members.get(name))
+
+
+ _assert_valid_deep(value)
+
+ return value
+
+ def __setattr__(self, name, value):
+ """Set an attribute on this object"""
+ self.assert_valid()
+
+
+
+
+ self.__dict__.setdefault("_members",{})[name] = value
+
+ return _swig_setattr(self, self.__class__, name, value)
+
+ def __call__(self, *args):
+ return svn_stream_invoke_lazyopen_func(self, *args)
+
+svn_stream_lazyopen_func_t_swigregister = _core.svn_stream_lazyopen_func_t_swigregister
+svn_stream_lazyopen_func_t_swigregister(svn_stream_lazyopen_func_t)
+
class svn_io_walk_func_t:
"""Proxy of C svn_io_walk_func_t struct"""
__swig_setmethods__ = {}
@@ -5662,9 +6149,199 @@ class svn_io_walk_func_t:
svn_io_walk_func_t_swigregister = _core.svn_io_walk_func_t_swigregister
svn_io_walk_func_t_swigregister(svn_io_walk_func_t)
+svn_checksum_md5 = _core.svn_checksum_md5
+svn_checksum_sha1 = _core.svn_checksum_sha1
+class svn_checksum_t:
+ """Proxy of C svn_checksum_t struct"""
+ __swig_setmethods__ = {}
+ __setattr__ = lambda self, name, value: _swig_setattr(self, svn_checksum_t, name, value)
+ __swig_getmethods__ = {}
+ __getattr__ = lambda self, name: _swig_getattr(self, svn_checksum_t, name)
+ __repr__ = _swig_repr
+ __swig_setmethods__["digest"] = _core.svn_checksum_t_digest_set
+ __swig_getmethods__["digest"] = _core.svn_checksum_t_digest_get
+ __swig_setmethods__["kind"] = _core.svn_checksum_t_kind_set
+ __swig_getmethods__["kind"] = _core.svn_checksum_t_kind_get
+ def set_parent_pool(self, parent_pool=None):
+ """Create a new proxy object for svn_checksum_t"""
+ import libsvn.core, weakref
+ self.__dict__["_parent_pool"] = \
+ parent_pool or libsvn.core.application_pool;
+ if self.__dict__["_parent_pool"]:
+ self.__dict__["_is_valid"] = weakref.ref(
+ self.__dict__["_parent_pool"]._is_valid)
+
+ def assert_valid(self):
+ """Assert that this object is using valid pool memory"""
+ if "_is_valid" in self.__dict__:
+ assert self.__dict__["_is_valid"](), "Variable has already been deleted"
+
+ def __getattr__(self, name):
+ """Get an attribute from this object"""
+ self.assert_valid()
+
+ value = _swig_getattr(self, self.__class__, name)
+
+
+
+ members = self.__dict__.get("_members")
+ if members is not None:
+ _copy_metadata_deep(value, members.get(name))
+
+
+ _assert_valid_deep(value)
+
+ return value
+
+ def __setattr__(self, name, value):
+ """Set an attribute on this object"""
+ self.assert_valid()
+
+
+
+
+ self.__dict__.setdefault("_members",{})[name] = value
+
+ return _swig_setattr(self, self.__class__, name, value)
+
+ def __init__(self):
+ """__init__(svn_checksum_t self) -> svn_checksum_t"""
+ this = _core.new_svn_checksum_t()
+ try: self.this.append(this)
+ except: self.this = this
+ __swig_destroy__ = _core.delete_svn_checksum_t
+ __del__ = lambda self : None;
+svn_checksum_t_swigregister = _core.svn_checksum_t_swigregister
+svn_checksum_t_swigregister(svn_checksum_t)
+
+
+def svn_checksum_create(*args):
+ """svn_checksum_create(svn_checksum_kind_t kind, apr_pool_t pool) -> svn_checksum_t"""
+ return _core.svn_checksum_create(*args)
+
+def svn_checksum_clear(*args):
+ """svn_checksum_clear(svn_checksum_t checksum) -> svn_error_t"""
+ return _core.svn_checksum_clear(*args)
+
+def svn_checksum_match(*args):
+ """svn_checksum_match(svn_checksum_t checksum1, svn_checksum_t checksum2) -> svn_boolean_t"""
+ return _core.svn_checksum_match(*args)
+
+def svn_checksum_dup(*args):
+ """svn_checksum_dup(svn_checksum_t checksum, apr_pool_t pool) -> svn_checksum_t"""
+ return _core.svn_checksum_dup(*args)
+
+def svn_checksum_to_cstring_display(*args):
+ """svn_checksum_to_cstring_display(svn_checksum_t checksum, apr_pool_t pool) -> char const *"""
+ return _core.svn_checksum_to_cstring_display(*args)
+
+def svn_checksum_to_cstring(*args):
+ """svn_checksum_to_cstring(svn_checksum_t checksum, apr_pool_t pool) -> char const *"""
+ return _core.svn_checksum_to_cstring(*args)
+
+def svn_checksum_serialize(*args):
+ """svn_checksum_serialize(svn_checksum_t checksum, apr_pool_t result_pool, apr_pool_t scratch_pool) -> char const *"""
+ return _core.svn_checksum_serialize(*args)
+
+def svn_checksum_deserialize(*args):
+ """svn_checksum_deserialize(char const * data, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
+ return _core.svn_checksum_deserialize(*args)
+
+def svn_checksum_parse_hex(*args):
+ """svn_checksum_parse_hex(svn_checksum_kind_t kind, char const * hex, apr_pool_t pool) -> svn_error_t"""
+ return _core.svn_checksum_parse_hex(*args)
+
+def svn_checksum(*args):
+ """svn_checksum(svn_checksum_kind_t kind, void const * data, apr_size_t len, apr_pool_t pool) -> svn_error_t"""
+ return _core.svn_checksum(*args)
+
+def svn_checksum_empty_checksum(*args):
+ """svn_checksum_empty_checksum(svn_checksum_kind_t kind, apr_pool_t pool) -> svn_checksum_t"""
+ return _core.svn_checksum_empty_checksum(*args)
+
+def svn_checksum_ctx_create(*args):
+ """svn_checksum_ctx_create(svn_checksum_kind_t kind, apr_pool_t pool) -> svn_checksum_ctx_t *"""
+ return _core.svn_checksum_ctx_create(*args)
+
+def svn_checksum_update(*args):
+ """svn_checksum_update(svn_checksum_ctx_t * ctx, void const * data, apr_size_t len) -> svn_error_t"""
+ return _core.svn_checksum_update(*args)
+
+def svn_checksum_final(*args):
+ """svn_checksum_final(svn_checksum_ctx_t const * ctx, apr_pool_t pool) -> svn_error_t"""
+ return _core.svn_checksum_final(*args)
+
+def svn_checksum_size(*args):
+ """svn_checksum_size(svn_checksum_t checksum) -> apr_size_t"""
+ return _core.svn_checksum_size(*args)
+
+def svn_checksum_is_empty_checksum(*args):
+ """svn_checksum_is_empty_checksum(svn_checksum_t checksum) -> svn_boolean_t"""
+ return _core.svn_checksum_is_empty_checksum(*args)
+
+def svn_checksum_mismatch_err(*args):
+ """svn_checksum_mismatch_err(svn_checksum_t expected, svn_checksum_t actual, apr_pool_t scratch_pool, char const * fmt) -> svn_error_t"""
+ return _core.svn_checksum_mismatch_err(*args)
+class svn_checksum_ctx_t:
+ """Proxy of C svn_checksum_ctx_t struct"""
+ __swig_setmethods__ = {}
+ __setattr__ = lambda self, name, value: _swig_setattr(self, svn_checksum_ctx_t, name, value)
+ __swig_getmethods__ = {}
+ __getattr__ = lambda self, name: _swig_getattr(self, svn_checksum_ctx_t, name)
+ def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+ __repr__ = _swig_repr
+ def set_parent_pool(self, parent_pool=None):
+ """Create a new proxy object for svn_checksum_ctx_t"""
+ import libsvn.core, weakref
+ self.__dict__["_parent_pool"] = \
+ parent_pool or libsvn.core.application_pool;
+ if self.__dict__["_parent_pool"]:
+ self.__dict__["_is_valid"] = weakref.ref(
+ self.__dict__["_parent_pool"]._is_valid)
+
+ def assert_valid(self):
+ """Assert that this object is using valid pool memory"""
+ if "_is_valid" in self.__dict__:
+ assert self.__dict__["_is_valid"](), "Variable has already been deleted"
+
+ def __getattr__(self, name):
+ """Get an attribute from this object"""
+ self.assert_valid()
+
+ value = _swig_getattr(self, self.__class__, name)
+
+
+
+ members = self.__dict__.get("_members")
+ if members is not None:
+ _copy_metadata_deep(value, members.get(name))
+
+
+ _assert_valid_deep(value)
+
+ return value
+
+ def __setattr__(self, name, value):
+ """Set an attribute on this object"""
+ self.assert_valid()
+
+
+
+
+ self.__dict__.setdefault("_members",{})[name] = value
+
+ return _swig_setattr(self, self.__class__, name, value)
+
+svn_checksum_ctx_t_swigregister = _core.svn_checksum_ctx_t_swigregister
+svn_checksum_ctx_t_swigregister(svn_checksum_ctx_t)
+
+
+def svn_auth_set_gnome_keyring_unlock_prompt_func(*args):
+ """svn_auth_set_gnome_keyring_unlock_prompt_func(svn_auth_baton_t * ab, svn_auth_gnome_keyring_unlock_prompt_func_t prompt_func)"""
+ return _core.svn_auth_set_gnome_keyring_unlock_prompt_func(*args)
def svn_swig_py_set_application_pool(*args):
- """svn_swig_py_set_application_pool(PyObject py_pool, apr_pool_t pool)"""
+ """svn_swig_py_set_application_pool(PyObject * py_pool, apr_pool_t pool)"""
return _core.svn_swig_py_set_application_pool(*args)
def svn_swig_py_clear_application_pool():
@@ -5981,22 +6658,19 @@ svn_pool_create()
def svn_swig_mergeinfo_merge(*args):
- """svn_swig_mergeinfo_merge(apr_hash_t mergeinfo_inout, apr_hash_t changes, apr_pool_t pool) -> svn_error_t"""
+ """svn_swig_mergeinfo_merge(apr_hash_t ** mergeinfo_inout, apr_hash_t changes, apr_pool_t pool) -> svn_error_t"""
return _core.svn_swig_mergeinfo_merge(*args)
def svn_swig_mergeinfo_sort(*args):
- """svn_swig_mergeinfo_sort(apr_hash_t mergeinfo_inout, apr_pool_t pool) -> svn_error_t"""
+ """svn_swig_mergeinfo_sort(apr_hash_t ** mergeinfo_inout, apr_pool_t pool) -> svn_error_t"""
return _core.svn_swig_mergeinfo_sort(*args)
def svn_swig_rangelist_merge(*args):
- """
- svn_swig_rangelist_merge(apr_array_header_t rangelist_inout, apr_array_header_t changes,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_swig_rangelist_merge(svn_rangelist_t ** rangelist_inout, apr_array_header_t changes, apr_pool_t pool) -> svn_error_t"""
return _core.svn_swig_rangelist_merge(*args)
def svn_swig_rangelist_reverse(*args):
- """svn_swig_rangelist_reverse(apr_array_header_t rangelist_inout, apr_pool_t pool) -> svn_error_t"""
+ """svn_swig_rangelist_reverse(svn_rangelist_t ** rangelist_inout, apr_pool_t pool) -> svn_error_t"""
return _core.svn_swig_rangelist_reverse(*args)
# This file is compatible with both classic and new-style classes.
diff --git a/subversion/bindings/swig/python/delta.py b/subversion/bindings/swig/python/delta.py
index 04e95a1..7504bcd 100644
--- a/subversion/bindings/swig/python/delta.py
+++ b/subversion/bindings/swig/python/delta.py
@@ -1,5 +1,5 @@
# This file was automatically generated by SWIG (http://www.swig.org).
-# Version 2.0.4
+# Version 2.0.9
#
# Do not make changes to this file unless you know what you are doing--modify
# the SWIG interface file instead.
@@ -84,21 +84,17 @@ def _assert_valid_deep(value):
if hasattr(value, "assert_valid"):
value.assert_valid()
-import core
+import libsvn.core
def svn_swig_py_make_editor(*args):
- """svn_swig_py_make_editor(PyObject py_editor, apr_pool_t pool)"""
+ """svn_swig_py_make_editor(PyObject * py_editor, apr_pool_t pool)"""
return _delta.svn_swig_py_make_editor(*args)
-
-def svn_txdelta_window_t_ops_get(*args):
- """svn_txdelta_window_t_ops_get(PyObject window_ob) -> PyObject"""
- return _delta.svn_txdelta_window_t_ops_get(*args)
SVN_DELTA_COMPRESSION_LEVEL_NONE = _delta.SVN_DELTA_COMPRESSION_LEVEL_NONE
SVN_DELTA_COMPRESSION_LEVEL_MAX = _delta.SVN_DELTA_COMPRESSION_LEVEL_MAX
SVN_DELTA_COMPRESSION_LEVEL_DEFAULT = _delta.SVN_DELTA_COMPRESSION_LEVEL_DEFAULT
def svn_delta_version():
- """svn_delta_version() -> svn_version_t"""
+ """svn_delta_version() -> svn_version_t const *"""
return _delta.svn_delta_version()
svn_txdelta_source = _delta.svn_txdelta_source
svn_txdelta_target = _delta.svn_txdelta_target
@@ -159,7 +155,7 @@ class svn_txdelta_op_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_txdelta_op_t"""
+ """__init__(svn_txdelta_op_t self) -> svn_txdelta_op_t"""
this = _delta.new_svn_txdelta_op_t()
try: self.this.append(this)
except: self.this = this
@@ -186,6 +182,12 @@ class svn_txdelta_window_t:
__swig_setmethods__["src_ops"] = _delta.svn_txdelta_window_t_src_ops_set
__swig_getmethods__["src_ops"] = _delta.svn_txdelta_window_t_src_ops_get
__swig_getmethods__["new_data"] = _delta.svn_txdelta_window_t_new_data_get
+ def _ops_get(self):
+ """_ops_get(svn_txdelta_window_t self)"""
+ return _delta.svn_txdelta_window_t__ops_get(self)
+
+ ops = property(_ops_get)
+
def set_parent_pool(self, parent_pool=None):
"""Create a new proxy object for svn_txdelta_window_t"""
import libsvn.core, weakref
@@ -229,7 +231,7 @@ class svn_txdelta_window_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_txdelta_window_t"""
+ """__init__(svn_txdelta_window_t self) -> svn_txdelta_window_t"""
this = _delta.new_svn_txdelta_window_t()
try: self.this.append(this)
except: self.this = this
@@ -244,104 +246,104 @@ def svn_txdelta_window_dup(*args):
return _delta.svn_txdelta_window_dup(*args)
def svn_txdelta_compose_windows(*args):
- """
- svn_txdelta_compose_windows(svn_txdelta_window_t window_A, svn_txdelta_window_t window_B,
- apr_pool_t pool) -> svn_txdelta_window_t
- """
+ """svn_txdelta_compose_windows(svn_txdelta_window_t window_A, svn_txdelta_window_t window_B, apr_pool_t pool) -> svn_txdelta_window_t"""
return _delta.svn_txdelta_compose_windows(*args)
def svn_txdelta_apply_instructions(*args):
- """svn_txdelta_apply_instructions(svn_txdelta_window_t window, char sbuf, char tbuf)"""
+ """svn_txdelta_apply_instructions(svn_txdelta_window_t window, char const * sbuf, char * tbuf)"""
return _delta.svn_txdelta_apply_instructions(*args)
def svn_txdelta_run(*args):
"""
- svn_txdelta_run(svn_stream_t source, svn_stream_t target, svn_txdelta_window_handler_t handler,
- void handler_baton,
- svn_checksum_kind_t checksum_kind, svn_cancel_func_t cancel_func,
- apr_pool_t result_pool,
- apr_pool_t scratch_pool) -> svn_error_t
+ svn_txdelta_run(svn_stream_t * source, svn_stream_t * target, svn_txdelta_window_handler_t handler,
+ void * handler_baton, svn_checksum_kind_t checksum_kind, svn_cancel_func_t cancel_func,
+ apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t
"""
return _delta.svn_txdelta_run(*args)
def svn_txdelta_stream_create(*args):
"""
- svn_txdelta_stream_create(void baton, svn_txdelta_next_window_fn_t next_window,
- svn_txdelta_md5_digest_fn_t md5_digest, apr_pool_t pool) -> svn_txdelta_stream_t
+ svn_txdelta_stream_create(void * baton, svn_txdelta_next_window_fn_t next_window, svn_txdelta_md5_digest_fn_t md5_digest,
+ apr_pool_t pool) -> svn_txdelta_stream_t *
"""
return _delta.svn_txdelta_stream_create(*args)
def svn_txdelta_next_window(*args):
- """svn_txdelta_next_window(svn_txdelta_stream_t stream, apr_pool_t pool) -> svn_error_t"""
+ """svn_txdelta_next_window(svn_txdelta_stream_t * stream, apr_pool_t pool) -> svn_error_t"""
return _delta.svn_txdelta_next_window(*args)
def svn_txdelta_md5_digest(*args):
- """svn_txdelta_md5_digest(svn_txdelta_stream_t stream) -> unsigned char"""
+ """svn_txdelta_md5_digest(svn_txdelta_stream_t * stream) -> unsigned char const *"""
return _delta.svn_txdelta_md5_digest(*args)
+def svn_txdelta2(*args):
+ """svn_txdelta2(svn_stream_t * source, svn_stream_t * target, svn_boolean_t calculate_checksum, apr_pool_t pool)"""
+ return _delta.svn_txdelta2(*args)
+
def svn_txdelta(*args):
- """svn_txdelta(svn_stream_t source, svn_stream_t target, apr_pool_t pool)"""
+ """svn_txdelta(svn_stream_t * source, svn_stream_t * target, apr_pool_t pool)"""
return _delta.svn_txdelta(*args)
def svn_txdelta_target_push(*args):
"""
- svn_txdelta_target_push(svn_txdelta_window_handler_t handler, void handler_baton,
- svn_stream_t source, apr_pool_t pool) -> svn_stream_t
+ svn_txdelta_target_push(svn_txdelta_window_handler_t handler, void * handler_baton, svn_stream_t * source,
+ apr_pool_t pool) -> svn_stream_t *
"""
return _delta.svn_txdelta_target_push(*args)
def svn_txdelta_send_string(*args):
"""
- svn_txdelta_send_string(svn_string_t string, svn_txdelta_window_handler_t handler,
- void handler_baton, apr_pool_t pool) -> svn_error_t
+ svn_txdelta_send_string(svn_string_t const * string, svn_txdelta_window_handler_t handler, void * handler_baton,
+ apr_pool_t pool) -> svn_error_t
"""
return _delta.svn_txdelta_send_string(*args)
def svn_txdelta_send_stream(*args):
"""
- svn_txdelta_send_stream(svn_stream_t stream, svn_txdelta_window_handler_t handler,
- void handler_baton, apr_pool_t pool) -> svn_error_t
+ svn_txdelta_send_stream(svn_stream_t * stream, svn_txdelta_window_handler_t handler, void * handler_baton,
+ apr_pool_t pool) -> svn_error_t
"""
return _delta.svn_txdelta_send_stream(*args)
def svn_txdelta_send_txstream(*args):
"""
- svn_txdelta_send_txstream(svn_txdelta_stream_t txstream, svn_txdelta_window_handler_t handler,
- void handler_baton, apr_pool_t pool) -> svn_error_t
+ svn_txdelta_send_txstream(svn_txdelta_stream_t * txstream, svn_txdelta_window_handler_t handler, void * handler_baton,
+ apr_pool_t pool) -> svn_error_t
"""
return _delta.svn_txdelta_send_txstream(*args)
-def svn_txdelta_apply(*args):
+def svn_txdelta_send_contents(*args):
"""
- svn_txdelta_apply(svn_stream_t source, svn_stream_t target, char error_info,
- apr_pool_t pool)
+ svn_txdelta_send_contents(unsigned char const * contents, apr_size_t len, svn_txdelta_window_handler_t handler,
+ void * handler_baton, apr_pool_t pool) -> svn_error_t
"""
+ return _delta.svn_txdelta_send_contents(*args)
+
+def svn_txdelta_apply(*args):
+ """svn_txdelta_apply(svn_stream_t * source, svn_stream_t * target, char const * error_info, apr_pool_t pool)"""
return _delta.svn_txdelta_apply(*args)
def svn_txdelta_to_svndiff3(*args):
- """
- svn_txdelta_to_svndiff3(svn_stream_t output, int svndiff_version, int compression_level,
- apr_pool_t pool)
- """
+ """svn_txdelta_to_svndiff3(svn_stream_t * output, int svndiff_version, int compression_level, apr_pool_t pool)"""
return _delta.svn_txdelta_to_svndiff3(*args)
def svn_txdelta_to_svndiff2(*args):
- """svn_txdelta_to_svndiff2(svn_stream_t output, int svndiff_version, apr_pool_t pool)"""
+ """svn_txdelta_to_svndiff2(svn_stream_t * output, int svndiff_version, apr_pool_t pool)"""
return _delta.svn_txdelta_to_svndiff2(*args)
def svn_txdelta_to_svndiff(*args):
- """svn_txdelta_to_svndiff(svn_stream_t output, apr_pool_t pool)"""
+ """svn_txdelta_to_svndiff(svn_stream_t * output, apr_pool_t pool)"""
return _delta.svn_txdelta_to_svndiff(*args)
def svn_txdelta_parse_svndiff(*args):
"""
- svn_txdelta_parse_svndiff(svn_txdelta_window_handler_t handler, void handler_baton,
- svn_boolean_t error_on_early_close, apr_pool_t pool) -> svn_stream_t
+ svn_txdelta_parse_svndiff(svn_txdelta_window_handler_t handler, void * handler_baton, svn_boolean_t error_on_early_close,
+ apr_pool_t pool) -> svn_stream_t *
"""
return _delta.svn_txdelta_parse_svndiff(*args)
def svn_txdelta_read_svndiff_window(*args):
- """svn_txdelta_read_svndiff_window(svn_stream_t stream, int svndiff_version, apr_pool_t pool) -> svn_error_t"""
+ """svn_txdelta_read_svndiff_window(svn_stream_t * stream, int svndiff_version, apr_pool_t pool) -> svn_error_t"""
return _delta.svn_txdelta_read_svndiff_window(*args)
def svn_txdelta_skip_svndiff_window(*args):
@@ -477,7 +479,7 @@ class svn_delta_editor_t:
return svn_delta_editor_invoke_abort_edit(self, *args)
def __init__(self):
- """__init__(self) -> svn_delta_editor_t"""
+ """__init__(svn_delta_editor_t self) -> svn_delta_editor_t"""
this = _delta.new_svn_delta_editor_t()
try: self.this.append(this)
except: self.this = this
@@ -492,37 +494,39 @@ def svn_delta_default_editor(*args):
return _delta.svn_delta_default_editor(*args)
def svn_delta_noop_window_handler(*args):
- """svn_delta_noop_window_handler(svn_txdelta_window_t window, void baton) -> svn_error_t"""
+ """svn_delta_noop_window_handler(svn_txdelta_window_t window, void * baton) -> svn_error_t"""
return _delta.svn_delta_noop_window_handler(*args)
def svn_delta_get_cancellation_editor(*args):
"""
- svn_delta_get_cancellation_editor(svn_cancel_func_t cancel_func, svn_delta_editor_t wrapped_editor,
- void wrapped_baton, apr_pool_t pool) -> svn_error_t
+ svn_delta_get_cancellation_editor(svn_cancel_func_t cancel_func, svn_delta_editor_t wrapped_editor, void * wrapped_baton,
+ apr_pool_t pool) -> svn_error_t
"""
return _delta.svn_delta_get_cancellation_editor(*args)
def svn_delta_depth_filter_editor(*args):
"""
- svn_delta_depth_filter_editor(svn_delta_editor_t wrapped_editor, void wrapped_edit_baton,
- svn_depth_t requested_depth, svn_boolean_t has_target,
- apr_pool_t pool) -> svn_error_t
+ svn_delta_depth_filter_editor(svn_delta_editor_t wrapped_editor, void * wrapped_edit_baton, svn_depth_t requested_depth,
+ svn_boolean_t has_target, apr_pool_t pool) -> svn_error_t
"""
return _delta.svn_delta_depth_filter_editor(*args)
+def svn_delta_path_driver2(*args):
+ """
+ svn_delta_path_driver2(svn_delta_editor_t editor, void * edit_baton, apr_array_header_t paths, svn_boolean_t sort_paths,
+ svn_delta_path_driver_cb_func_t callback_func, apr_pool_t scratch_pool) -> svn_error_t
+ """
+ return _delta.svn_delta_path_driver2(*args)
+
def svn_delta_path_driver(*args):
"""
- svn_delta_path_driver(svn_delta_editor_t editor, void edit_baton, svn_revnum_t revision,
- apr_array_header_t paths, svn_delta_path_driver_cb_func_t callback_func,
- apr_pool_t pool) -> svn_error_t
+ svn_delta_path_driver(svn_delta_editor_t editor, void * edit_baton, svn_revnum_t revision, apr_array_header_t paths,
+ svn_delta_path_driver_cb_func_t callback_func, apr_pool_t scratch_pool) -> svn_error_t
"""
return _delta.svn_delta_path_driver(*args)
def svn_compat_wrap_file_rev_handler(*args):
- """
- svn_compat_wrap_file_rev_handler(svn_file_rev_handler_old_t handler, void handler_baton,
- apr_pool_t pool)
- """
+ """svn_compat_wrap_file_rev_handler(svn_file_rev_handler_old_t handler, void * handler_baton, apr_pool_t pool)"""
return _delta.svn_compat_wrap_file_rev_handler(*args)
class svn_txdelta_stream_t:
"""Proxy of C svn_txdelta_stream_t struct"""
@@ -579,146 +583,121 @@ svn_txdelta_stream_t_swigregister(svn_txdelta_stream_t)
def svn_delta_editor_invoke_set_target_revision(*args):
- """
- svn_delta_editor_invoke_set_target_revision(svn_delta_editor_t _obj, void edit_baton, svn_revnum_t target_revision,
- apr_pool_t scratch_pool) -> svn_error_t
- """
+ """svn_delta_editor_invoke_set_target_revision(svn_delta_editor_t _obj, void * edit_baton, svn_revnum_t target_revision, apr_pool_t scratch_pool) -> svn_error_t"""
return _delta.svn_delta_editor_invoke_set_target_revision(*args)
def svn_delta_editor_invoke_open_root(*args):
- """
- svn_delta_editor_invoke_open_root(svn_delta_editor_t _obj, void edit_baton, svn_revnum_t base_revision,
- apr_pool_t result_pool) -> svn_error_t
- """
+ """svn_delta_editor_invoke_open_root(svn_delta_editor_t _obj, void * edit_baton, svn_revnum_t base_revision, apr_pool_t result_pool) -> svn_error_t"""
return _delta.svn_delta_editor_invoke_open_root(*args)
def svn_delta_editor_invoke_delete_entry(*args):
"""
- svn_delta_editor_invoke_delete_entry(svn_delta_editor_t _obj, char path, svn_revnum_t revision,
- void parent_baton, apr_pool_t scratch_pool) -> svn_error_t
+ svn_delta_editor_invoke_delete_entry(svn_delta_editor_t _obj, char const * path, svn_revnum_t revision, void * parent_baton,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
return _delta.svn_delta_editor_invoke_delete_entry(*args)
def svn_delta_editor_invoke_add_directory(*args):
"""
- svn_delta_editor_invoke_add_directory(svn_delta_editor_t _obj, char path, void parent_baton,
- char copyfrom_path, svn_revnum_t copyfrom_revision,
- apr_pool_t result_pool) -> svn_error_t
+ svn_delta_editor_invoke_add_directory(svn_delta_editor_t _obj, char const * path, void * parent_baton, char const * copyfrom_path,
+ svn_revnum_t copyfrom_revision, apr_pool_t result_pool) -> svn_error_t
"""
return _delta.svn_delta_editor_invoke_add_directory(*args)
def svn_delta_editor_invoke_open_directory(*args):
"""
- svn_delta_editor_invoke_open_directory(svn_delta_editor_t _obj, char path, void parent_baton,
- svn_revnum_t base_revision, apr_pool_t result_pool) -> svn_error_t
+ svn_delta_editor_invoke_open_directory(svn_delta_editor_t _obj, char const * path, void * parent_baton, svn_revnum_t base_revision,
+ apr_pool_t result_pool) -> svn_error_t
"""
return _delta.svn_delta_editor_invoke_open_directory(*args)
def svn_delta_editor_invoke_change_dir_prop(*args):
"""
- svn_delta_editor_invoke_change_dir_prop(svn_delta_editor_t _obj, void dir_baton, char name,
- svn_string_t value, apr_pool_t scratch_pool) -> svn_error_t
+ svn_delta_editor_invoke_change_dir_prop(svn_delta_editor_t _obj, void * dir_baton, char const * name, svn_string_t const * value,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
return _delta.svn_delta_editor_invoke_change_dir_prop(*args)
def svn_delta_editor_invoke_close_directory(*args):
- """svn_delta_editor_invoke_close_directory(svn_delta_editor_t _obj, void dir_baton, apr_pool_t scratch_pool) -> svn_error_t"""
+ """svn_delta_editor_invoke_close_directory(svn_delta_editor_t _obj, void * dir_baton, apr_pool_t scratch_pool) -> svn_error_t"""
return _delta.svn_delta_editor_invoke_close_directory(*args)
def svn_delta_editor_invoke_absent_directory(*args):
- """
- svn_delta_editor_invoke_absent_directory(svn_delta_editor_t _obj, char path, void parent_baton,
- apr_pool_t scratch_pool) -> svn_error_t
- """
+ """svn_delta_editor_invoke_absent_directory(svn_delta_editor_t _obj, char const * path, void * parent_baton, apr_pool_t scratch_pool) -> svn_error_t"""
return _delta.svn_delta_editor_invoke_absent_directory(*args)
def svn_delta_editor_invoke_add_file(*args):
"""
- svn_delta_editor_invoke_add_file(svn_delta_editor_t _obj, char path, void parent_baton,
- char copyfrom_path, svn_revnum_t copyfrom_revision,
- apr_pool_t result_pool) -> svn_error_t
+ svn_delta_editor_invoke_add_file(svn_delta_editor_t _obj, char const * path, void * parent_baton, char const * copyfrom_path,
+ svn_revnum_t copyfrom_revision, apr_pool_t result_pool) -> svn_error_t
"""
return _delta.svn_delta_editor_invoke_add_file(*args)
def svn_delta_editor_invoke_open_file(*args):
"""
- svn_delta_editor_invoke_open_file(svn_delta_editor_t _obj, char path, void parent_baton,
- svn_revnum_t base_revision, apr_pool_t result_pool) -> svn_error_t
+ svn_delta_editor_invoke_open_file(svn_delta_editor_t _obj, char const * path, void * parent_baton, svn_revnum_t base_revision,
+ apr_pool_t result_pool) -> svn_error_t
"""
return _delta.svn_delta_editor_invoke_open_file(*args)
def svn_delta_editor_invoke_apply_textdelta(*args):
- """
- svn_delta_editor_invoke_apply_textdelta(svn_delta_editor_t _obj, void file_baton, char base_checksum,
- apr_pool_t result_pool) -> svn_error_t
- """
+ """svn_delta_editor_invoke_apply_textdelta(svn_delta_editor_t _obj, void * file_baton, char const * base_checksum, apr_pool_t result_pool) -> svn_error_t"""
return _delta.svn_delta_editor_invoke_apply_textdelta(*args)
def svn_delta_editor_invoke_change_file_prop(*args):
"""
- svn_delta_editor_invoke_change_file_prop(svn_delta_editor_t _obj, void file_baton, char name,
- svn_string_t value, apr_pool_t scratch_pool) -> svn_error_t
+ svn_delta_editor_invoke_change_file_prop(svn_delta_editor_t _obj, void * file_baton, char const * name, svn_string_t const * value,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
return _delta.svn_delta_editor_invoke_change_file_prop(*args)
def svn_delta_editor_invoke_close_file(*args):
- """
- svn_delta_editor_invoke_close_file(svn_delta_editor_t _obj, void file_baton, char text_checksum,
- apr_pool_t scratch_pool) -> svn_error_t
- """
+ """svn_delta_editor_invoke_close_file(svn_delta_editor_t _obj, void * file_baton, char const * text_checksum, apr_pool_t scratch_pool) -> svn_error_t"""
return _delta.svn_delta_editor_invoke_close_file(*args)
def svn_delta_editor_invoke_absent_file(*args):
- """
- svn_delta_editor_invoke_absent_file(svn_delta_editor_t _obj, char path, void parent_baton,
- apr_pool_t scratch_pool) -> svn_error_t
- """
+ """svn_delta_editor_invoke_absent_file(svn_delta_editor_t _obj, char const * path, void * parent_baton, apr_pool_t scratch_pool) -> svn_error_t"""
return _delta.svn_delta_editor_invoke_absent_file(*args)
def svn_delta_editor_invoke_close_edit(*args):
- """svn_delta_editor_invoke_close_edit(svn_delta_editor_t _obj, void edit_baton, apr_pool_t scratch_pool) -> svn_error_t"""
+ """svn_delta_editor_invoke_close_edit(svn_delta_editor_t _obj, void * edit_baton, apr_pool_t scratch_pool) -> svn_error_t"""
return _delta.svn_delta_editor_invoke_close_edit(*args)
def svn_delta_editor_invoke_abort_edit(*args):
- """svn_delta_editor_invoke_abort_edit(svn_delta_editor_t _obj, void edit_baton, apr_pool_t scratch_pool) -> svn_error_t"""
+ """svn_delta_editor_invoke_abort_edit(svn_delta_editor_t _obj, void * edit_baton, apr_pool_t scratch_pool) -> svn_error_t"""
return _delta.svn_delta_editor_invoke_abort_edit(*args)
def svn_txdelta_invoke_window_handler(*args):
- """
- svn_txdelta_invoke_window_handler(svn_txdelta_window_handler_t _obj, svn_txdelta_window_t window,
- void baton) -> svn_error_t
- """
+ """svn_txdelta_invoke_window_handler(svn_txdelta_window_handler_t _obj, svn_txdelta_window_t window, void * baton) -> svn_error_t"""
return _delta.svn_txdelta_invoke_window_handler(*args)
def svn_txdelta_invoke_next_window_fn(*args):
- """svn_txdelta_invoke_next_window_fn(svn_txdelta_next_window_fn_t _obj, void baton, apr_pool_t pool) -> svn_error_t"""
+ """svn_txdelta_invoke_next_window_fn(svn_txdelta_next_window_fn_t _obj, void * baton, apr_pool_t pool) -> svn_error_t"""
return _delta.svn_txdelta_invoke_next_window_fn(*args)
def svn_txdelta_invoke_md5_digest_fn(*args):
- """svn_txdelta_invoke_md5_digest_fn(svn_txdelta_md5_digest_fn_t _obj, void baton) -> unsigned char"""
+ """svn_txdelta_invoke_md5_digest_fn(svn_txdelta_md5_digest_fn_t _obj, void * baton) -> unsigned char const *"""
return _delta.svn_txdelta_invoke_md5_digest_fn(*args)
def svn_delta_invoke_path_driver_cb_func(*args):
"""
- svn_delta_invoke_path_driver_cb_func(svn_delta_path_driver_cb_func_t _obj, void parent_baton,
- void callback_baton, char path, apr_pool_t pool) -> svn_error_t
+ svn_delta_invoke_path_driver_cb_func(svn_delta_path_driver_cb_func_t _obj, void * parent_baton, void * callback_baton,
+ char const * path, apr_pool_t pool) -> svn_error_t
"""
return _delta.svn_delta_invoke_path_driver_cb_func(*args)
def svn_file_invoke_rev_handler(*args):
"""
- svn_file_invoke_rev_handler(svn_file_rev_handler_t _obj, void baton, char path,
- svn_revnum_t rev, apr_hash_t rev_props, svn_boolean_t result_of_merge,
- apr_array_header_t prop_diffs,
+ svn_file_invoke_rev_handler(svn_file_rev_handler_t _obj, void * baton, char const * path, svn_revnum_t rev, apr_hash_t rev_props,
+ svn_boolean_t result_of_merge, apr_array_header_t prop_diffs,
apr_pool_t pool) -> svn_error_t
"""
return _delta.svn_file_invoke_rev_handler(*args)
def svn_file_invoke_rev_handler_old(*args):
"""
- svn_file_invoke_rev_handler_old(svn_file_rev_handler_old_t _obj, void baton, char path,
- svn_revnum_t rev, apr_hash_t rev_props,
- apr_array_header_t prop_diffs, apr_pool_t pool) -> svn_error_t
+ svn_file_invoke_rev_handler_old(svn_file_rev_handler_old_t _obj, void * baton, char const * path, svn_revnum_t rev,
+ apr_hash_t rev_props, apr_array_header_t prop_diffs, apr_pool_t pool) -> svn_error_t
"""
return _delta.svn_file_invoke_rev_handler_old(*args)
class svn_txdelta_window_handler_t:
@@ -1057,6 +1036,8 @@ class svn_file_rev_handler_old_t:
svn_file_rev_handler_old_t_swigregister = _delta.svn_file_rev_handler_old_t_swigregister
svn_file_rev_handler_old_t_swigregister(svn_file_rev_handler_old_t)
+svn_txdelta_window_t_ops_get = svn_txdelta_window_t._ops_get
+
# This file is compatible with both classic and new-style classes.
diff --git a/subversion/bindings/swig/python/diff.py b/subversion/bindings/swig/python/diff.py
index 1c5c777..476236d 100644
--- a/subversion/bindings/swig/python/diff.py
+++ b/subversion/bindings/swig/python/diff.py
@@ -1,5 +1,5 @@
# This file was automatically generated by SWIG (http://www.swig.org).
-# Version 2.0.4
+# Version 2.0.9
#
# Do not make changes to this file unless you know what you are doing--modify
# the SWIG interface file instead.
@@ -84,10 +84,10 @@ def _assert_valid_deep(value):
if hasattr(value, "assert_valid"):
value.assert_valid()
-import core
+import libsvn.core
def svn_diff_version():
- """svn_diff_version() -> svn_version_t"""
+ """svn_diff_version() -> svn_version_t const *"""
return _diff.svn_diff_version()
svn_diff_datasource_original = _diff.svn_diff_datasource_original
svn_diff_datasource_modified = _diff.svn_diff_datasource_modified
@@ -173,7 +173,7 @@ class svn_diff_fns2_t:
return svn_diff_fns2_invoke_token_discard_all(self, *args)
def __init__(self):
- """__init__(self) -> svn_diff_fns2_t"""
+ """__init__(svn_diff_fns2_t self) -> svn_diff_fns2_t"""
this = _diff.new_svn_diff_fns2_t()
try: self.this.append(this)
except: self.this = this
@@ -262,7 +262,7 @@ class svn_diff_fns_t:
return svn_diff_fns_invoke_token_discard_all(self, *args)
def __init__(self):
- """__init__(self) -> svn_diff_fns_t"""
+ """__init__(svn_diff_fns_t self) -> svn_diff_fns_t"""
this = _diff.new_svn_diff_fns_t()
try: self.this.append(this)
except: self.this = this
@@ -273,35 +273,35 @@ svn_diff_fns_t_swigregister(svn_diff_fns_t)
def svn_diff_diff_2(*args):
- """svn_diff_diff_2(void diff_baton, svn_diff_fns2_t diff_fns, apr_pool_t pool) -> svn_error_t"""
+ """svn_diff_diff_2(void * diff_baton, svn_diff_fns2_t diff_fns, apr_pool_t pool) -> svn_error_t"""
return _diff.svn_diff_diff_2(*args)
def svn_diff_diff(*args):
- """svn_diff_diff(void diff_baton, svn_diff_fns_t diff_fns, apr_pool_t pool) -> svn_error_t"""
+ """svn_diff_diff(void * diff_baton, svn_diff_fns_t diff_fns, apr_pool_t pool) -> svn_error_t"""
return _diff.svn_diff_diff(*args)
def svn_diff_diff3_2(*args):
- """svn_diff_diff3_2(void diff_baton, svn_diff_fns2_t diff_fns, apr_pool_t pool) -> svn_error_t"""
+ """svn_diff_diff3_2(void * diff_baton, svn_diff_fns2_t diff_fns, apr_pool_t pool) -> svn_error_t"""
return _diff.svn_diff_diff3_2(*args)
def svn_diff_diff3(*args):
- """svn_diff_diff3(void diff_baton, svn_diff_fns_t diff_fns, apr_pool_t pool) -> svn_error_t"""
+ """svn_diff_diff3(void * diff_baton, svn_diff_fns_t diff_fns, apr_pool_t pool) -> svn_error_t"""
return _diff.svn_diff_diff3(*args)
def svn_diff_diff4_2(*args):
- """svn_diff_diff4_2(void diff_baton, svn_diff_fns2_t diff_fns, apr_pool_t pool) -> svn_error_t"""
+ """svn_diff_diff4_2(void * diff_baton, svn_diff_fns2_t diff_fns, apr_pool_t pool) -> svn_error_t"""
return _diff.svn_diff_diff4_2(*args)
def svn_diff_diff4(*args):
- """svn_diff_diff4(void diff_baton, svn_diff_fns_t diff_fns, apr_pool_t pool) -> svn_error_t"""
+ """svn_diff_diff4(void * diff_baton, svn_diff_fns_t diff_fns, apr_pool_t pool) -> svn_error_t"""
return _diff.svn_diff_diff4(*args)
def svn_diff_contains_conflicts(*args):
- """svn_diff_contains_conflicts(svn_diff_t diff) -> svn_boolean_t"""
+ """svn_diff_contains_conflicts(svn_diff_t * diff) -> svn_boolean_t"""
return _diff.svn_diff_contains_conflicts(*args)
def svn_diff_contains_diffs(*args):
- """svn_diff_contains_diffs(svn_diff_t diff) -> svn_boolean_t"""
+ """svn_diff_contains_diffs(svn_diff_t * diff) -> svn_boolean_t"""
return _diff.svn_diff_contains_diffs(*args)
class svn_diff_output_fns_t:
"""Proxy of C svn_diff_output_fns_t struct"""
@@ -378,7 +378,7 @@ class svn_diff_output_fns_t:
return svn_diff_output_fns_invoke_output_conflict(self, *args)
def __init__(self):
- """__init__(self) -> svn_diff_output_fns_t"""
+ """__init__(svn_diff_output_fns_t self) -> svn_diff_output_fns_t"""
this = _diff.new_svn_diff_output_fns_t()
try: self.this.append(this)
except: self.this = this
@@ -395,7 +395,7 @@ svn_diff_conflict_display_latest = _diff.svn_diff_conflict_display_latest
svn_diff_conflict_display_only_conflicts = _diff.svn_diff_conflict_display_only_conflicts
def svn_diff_output(*args):
- """svn_diff_output(svn_diff_t diff, void output_baton, svn_diff_output_fns_t output_fns) -> svn_error_t"""
+ """svn_diff_output(svn_diff_t * diff, void * output_baton, svn_diff_output_fns_t output_fns) -> svn_error_t"""
return _diff.svn_diff_output(*args)
svn_diff_file_ignore_space_none = _diff.svn_diff_file_ignore_space_none
svn_diff_file_ignore_space_change = _diff.svn_diff_file_ignore_space_change
@@ -456,7 +456,7 @@ class svn_diff_file_options_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_diff_file_options_t"""
+ """__init__(svn_diff_file_options_t self) -> svn_diff_file_options_t"""
this = _diff.new_svn_diff_file_options_t()
try: self.this.append(this)
except: self.this = this
@@ -471,81 +471,72 @@ def svn_diff_file_options_create(*args):
return _diff.svn_diff_file_options_create(*args)
def svn_diff_file_options_parse(*args):
- """
- svn_diff_file_options_parse(svn_diff_file_options_t options, apr_array_header_t args,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_diff_file_options_parse(svn_diff_file_options_t options, apr_array_header_t args, apr_pool_t pool) -> svn_error_t"""
return _diff.svn_diff_file_options_parse(*args)
def svn_diff_file_diff_2(*args):
- """
- svn_diff_file_diff_2(char original, char modified, svn_diff_file_options_t options,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_diff_file_diff_2(char const * original, char const * modified, svn_diff_file_options_t options, apr_pool_t pool) -> svn_error_t"""
return _diff.svn_diff_file_diff_2(*args)
def svn_diff_file_diff(*args):
- """svn_diff_file_diff(char original, char modified, apr_pool_t pool) -> svn_error_t"""
+ """svn_diff_file_diff(char const * original, char const * modified, apr_pool_t pool) -> svn_error_t"""
return _diff.svn_diff_file_diff(*args)
def svn_diff_file_diff3_2(*args):
"""
- svn_diff_file_diff3_2(char original, char modified, char latest, svn_diff_file_options_t options,
+ svn_diff_file_diff3_2(char const * original, char const * modified, char const * latest, svn_diff_file_options_t options,
apr_pool_t pool) -> svn_error_t
"""
return _diff.svn_diff_file_diff3_2(*args)
def svn_diff_file_diff3(*args):
- """svn_diff_file_diff3(char original, char modified, char latest, apr_pool_t pool) -> svn_error_t"""
+ """svn_diff_file_diff3(char const * original, char const * modified, char const * latest, apr_pool_t pool) -> svn_error_t"""
return _diff.svn_diff_file_diff3(*args)
def svn_diff_file_diff4_2(*args):
"""
- svn_diff_file_diff4_2(char original, char modified, char latest, char ancestor,
+ svn_diff_file_diff4_2(char const * original, char const * modified, char const * latest, char const * ancestor,
svn_diff_file_options_t options, apr_pool_t pool) -> svn_error_t
"""
return _diff.svn_diff_file_diff4_2(*args)
def svn_diff_file_diff4(*args):
"""
- svn_diff_file_diff4(char original, char modified, char latest, char ancestor,
+ svn_diff_file_diff4(char const * original, char const * modified, char const * latest, char const * ancestor,
apr_pool_t pool) -> svn_error_t
"""
return _diff.svn_diff_file_diff4(*args)
def svn_diff_file_output_unified3(*args):
"""
- svn_diff_file_output_unified3(svn_stream_t output_stream, svn_diff_t diff, char original_path,
- char modified_path, char original_header,
- char modified_header, char header_encoding,
- char relative_to_dir, svn_boolean_t show_c_function,
+ svn_diff_file_output_unified3(svn_stream_t * output_stream, svn_diff_t * diff, char const * original_path, char const * modified_path,
+ char const * original_header, char const * modified_header,
+ char const * header_encoding, char const * relative_to_dir, svn_boolean_t show_c_function,
apr_pool_t pool) -> svn_error_t
"""
return _diff.svn_diff_file_output_unified3(*args)
def svn_diff_file_output_unified2(*args):
"""
- svn_diff_file_output_unified2(svn_stream_t output_stream, svn_diff_t diff, char original_path,
- char modified_path, char original_header,
- char modified_header, char header_encoding,
- apr_pool_t pool) -> svn_error_t
+ svn_diff_file_output_unified2(svn_stream_t * output_stream, svn_diff_t * diff, char const * original_path, char const * modified_path,
+ char const * original_header, char const * modified_header,
+ char const * header_encoding, apr_pool_t pool) -> svn_error_t
"""
return _diff.svn_diff_file_output_unified2(*args)
def svn_diff_file_output_unified(*args):
"""
- svn_diff_file_output_unified(svn_stream_t output_stream, svn_diff_t diff, char original_path,
- char modified_path, char original_header,
- char modified_header, apr_pool_t pool) -> svn_error_t
+ svn_diff_file_output_unified(svn_stream_t * output_stream, svn_diff_t * diff, char const * original_path, char const * modified_path,
+ char const * original_header, char const * modified_header,
+ apr_pool_t pool) -> svn_error_t
"""
return _diff.svn_diff_file_output_unified(*args)
def svn_diff_file_output_merge2(*args):
"""
- svn_diff_file_output_merge2(svn_stream_t output_stream, svn_diff_t diff, char original_path,
- char modified_path, char latest_path,
- char conflict_original, char conflict_modified,
- char conflict_latest, char conflict_separator,
+ svn_diff_file_output_merge2(svn_stream_t * output_stream, svn_diff_t * diff, char const * original_path, char const * modified_path,
+ char const * latest_path, char const * conflict_original,
+ char const * conflict_modified, char const * conflict_latest, char const * conflict_separator,
svn_diff_conflict_display_style_t conflict_style,
apr_pool_t pool) -> svn_error_t
"""
@@ -553,78 +544,69 @@ def svn_diff_file_output_merge2(*args):
def svn_diff_file_output_merge(*args):
"""
- svn_diff_file_output_merge(svn_stream_t output_stream, svn_diff_t diff, char original_path,
- char modified_path, char latest_path,
- char conflict_original, char conflict_modified,
- char conflict_latest, char conflict_separator,
- svn_boolean_t display_original_in_conflict,
- svn_boolean_t display_resolved_conflicts,
+ svn_diff_file_output_merge(svn_stream_t * output_stream, svn_diff_t * diff, char const * original_path, char const * modified_path,
+ char const * latest_path, char const * conflict_original,
+ char const * conflict_modified, char const * conflict_latest, char const * conflict_separator,
+ svn_boolean_t display_original_in_conflict, svn_boolean_t display_resolved_conflicts,
apr_pool_t pool) -> svn_error_t
"""
return _diff.svn_diff_file_output_merge(*args)
def svn_diff_mem_string_diff(*args):
"""
- svn_diff_mem_string_diff(svn_string_t original, svn_string_t modified, svn_diff_file_options_t options,
+ svn_diff_mem_string_diff(svn_string_t const * original, svn_string_t const * modified, svn_diff_file_options_t options,
apr_pool_t pool) -> svn_error_t
"""
return _diff.svn_diff_mem_string_diff(*args)
def svn_diff_mem_string_diff3(*args):
"""
- svn_diff_mem_string_diff3(svn_string_t original, svn_string_t modified, svn_string_t latest,
- svn_diff_file_options_t options,
- apr_pool_t pool) -> svn_error_t
+ svn_diff_mem_string_diff3(svn_string_t const * original, svn_string_t const * modified, svn_string_t const * latest,
+ svn_diff_file_options_t options, apr_pool_t pool) -> svn_error_t
"""
return _diff.svn_diff_mem_string_diff3(*args)
def svn_diff_mem_string_diff4(*args):
"""
- svn_diff_mem_string_diff4(svn_string_t original, svn_string_t modified, svn_string_t latest,
- svn_string_t ancestor, svn_diff_file_options_t options,
- apr_pool_t pool) -> svn_error_t
+ svn_diff_mem_string_diff4(svn_string_t const * original, svn_string_t const * modified, svn_string_t const * latest,
+ svn_string_t const * ancestor, svn_diff_file_options_t options, apr_pool_t pool) -> svn_error_t
"""
return _diff.svn_diff_mem_string_diff4(*args)
def svn_diff_mem_string_output_unified2(*args):
"""
- svn_diff_mem_string_output_unified2(svn_stream_t output_stream, svn_diff_t diff, svn_boolean_t with_diff_header,
- char hunk_delimiter,
- char original_header, char modified_header,
- char header_encoding, svn_string_t original,
- svn_string_t modified, apr_pool_t pool) -> svn_error_t
+ svn_diff_mem_string_output_unified2(svn_stream_t * output_stream, svn_diff_t * diff, svn_boolean_t with_diff_header,
+ char const * hunk_delimiter, char const * original_header, char const * modified_header,
+ char const * header_encoding, svn_string_t const * original,
+ svn_string_t const * modified, apr_pool_t pool) -> svn_error_t
"""
return _diff.svn_diff_mem_string_output_unified2(*args)
def svn_diff_mem_string_output_unified(*args):
"""
- svn_diff_mem_string_output_unified(svn_stream_t output_stream, svn_diff_t diff, char original_header,
- char modified_header, char header_encoding,
- svn_string_t original, svn_string_t modified,
- apr_pool_t pool) -> svn_error_t
+ svn_diff_mem_string_output_unified(svn_stream_t * output_stream, svn_diff_t * diff, char const * original_header, char const * modified_header,
+ char const * header_encoding, svn_string_t const * original,
+ svn_string_t const * modified, apr_pool_t pool) -> svn_error_t
"""
return _diff.svn_diff_mem_string_output_unified(*args)
def svn_diff_mem_string_output_merge2(*args):
"""
- svn_diff_mem_string_output_merge2(svn_stream_t output_stream, svn_diff_t diff, svn_string_t original,
- svn_string_t modified, svn_string_t latest,
- char conflict_original, char conflict_modified,
- char conflict_latest, char conflict_separator,
- svn_diff_conflict_display_style_t style,
+ svn_diff_mem_string_output_merge2(svn_stream_t * output_stream, svn_diff_t * diff, svn_string_t const * original, svn_string_t const * modified,
+ svn_string_t const * latest, char const * conflict_original,
+ char const * conflict_modified, char const * conflict_latest,
+ char const * conflict_separator, svn_diff_conflict_display_style_t style,
apr_pool_t pool) -> svn_error_t
"""
return _diff.svn_diff_mem_string_output_merge2(*args)
def svn_diff_mem_string_output_merge(*args):
"""
- svn_diff_mem_string_output_merge(svn_stream_t output_stream, svn_diff_t diff, svn_string_t original,
- svn_string_t modified, svn_string_t latest,
- char conflict_original, char conflict_modified,
- char conflict_latest, char conflict_separator,
- svn_boolean_t display_original_in_conflict,
- svn_boolean_t display_resolved_conflicts,
- apr_pool_t pool) -> svn_error_t
+ svn_diff_mem_string_output_merge(svn_stream_t * output_stream, svn_diff_t * diff, svn_string_t const * original, svn_string_t const * modified,
+ svn_string_t const * latest, char const * conflict_original,
+ char const * conflict_modified, char const * conflict_latest,
+ char const * conflict_separator, svn_boolean_t display_original_in_conflict,
+ svn_boolean_t display_resolved_conflicts, apr_pool_t pool) -> svn_error_t
"""
return _diff.svn_diff_mem_string_output_merge(*args)
svn_diff_op_unchanged = _diff.svn_diff_op_unchanged
@@ -635,51 +617,51 @@ svn_diff_op_moved = _diff.svn_diff_op_moved
svn_diff_op_modified = _diff.svn_diff_op_modified
def svn_diff_hunk_readline_diff_text(*args):
- """svn_diff_hunk_readline_diff_text(svn_diff_hunk_t hunk, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
+ """svn_diff_hunk_readline_diff_text(svn_diff_hunk_t * hunk, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
return _diff.svn_diff_hunk_readline_diff_text(*args)
def svn_diff_hunk_readline_original_text(*args):
- """svn_diff_hunk_readline_original_text(svn_diff_hunk_t hunk, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
+ """svn_diff_hunk_readline_original_text(svn_diff_hunk_t * hunk, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
return _diff.svn_diff_hunk_readline_original_text(*args)
def svn_diff_hunk_readline_modified_text(*args):
- """svn_diff_hunk_readline_modified_text(svn_diff_hunk_t hunk, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
+ """svn_diff_hunk_readline_modified_text(svn_diff_hunk_t * hunk, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
return _diff.svn_diff_hunk_readline_modified_text(*args)
def svn_diff_hunk_reset_diff_text(*args):
- """svn_diff_hunk_reset_diff_text(svn_diff_hunk_t hunk)"""
+ """svn_diff_hunk_reset_diff_text(svn_diff_hunk_t * hunk)"""
return _diff.svn_diff_hunk_reset_diff_text(*args)
def svn_diff_hunk_reset_original_text(*args):
- """svn_diff_hunk_reset_original_text(svn_diff_hunk_t hunk)"""
+ """svn_diff_hunk_reset_original_text(svn_diff_hunk_t * hunk)"""
return _diff.svn_diff_hunk_reset_original_text(*args)
def svn_diff_hunk_reset_modified_text(*args):
- """svn_diff_hunk_reset_modified_text(svn_diff_hunk_t hunk)"""
+ """svn_diff_hunk_reset_modified_text(svn_diff_hunk_t * hunk)"""
return _diff.svn_diff_hunk_reset_modified_text(*args)
def svn_diff_hunk_get_original_start(*args):
- """svn_diff_hunk_get_original_start(svn_diff_hunk_t hunk) -> svn_linenum_t"""
+ """svn_diff_hunk_get_original_start(svn_diff_hunk_t const * hunk) -> svn_linenum_t"""
return _diff.svn_diff_hunk_get_original_start(*args)
def svn_diff_hunk_get_original_length(*args):
- """svn_diff_hunk_get_original_length(svn_diff_hunk_t hunk) -> svn_linenum_t"""
+ """svn_diff_hunk_get_original_length(svn_diff_hunk_t const * hunk) -> svn_linenum_t"""
return _diff.svn_diff_hunk_get_original_length(*args)
def svn_diff_hunk_get_modified_start(*args):
- """svn_diff_hunk_get_modified_start(svn_diff_hunk_t hunk) -> svn_linenum_t"""
+ """svn_diff_hunk_get_modified_start(svn_diff_hunk_t const * hunk) -> svn_linenum_t"""
return _diff.svn_diff_hunk_get_modified_start(*args)
def svn_diff_hunk_get_modified_length(*args):
- """svn_diff_hunk_get_modified_length(svn_diff_hunk_t hunk) -> svn_linenum_t"""
+ """svn_diff_hunk_get_modified_length(svn_diff_hunk_t const * hunk) -> svn_linenum_t"""
return _diff.svn_diff_hunk_get_modified_length(*args)
def svn_diff_hunk_get_leading_context(*args):
- """svn_diff_hunk_get_leading_context(svn_diff_hunk_t hunk) -> svn_linenum_t"""
+ """svn_diff_hunk_get_leading_context(svn_diff_hunk_t const * hunk) -> svn_linenum_t"""
return _diff.svn_diff_hunk_get_leading_context(*args)
def svn_diff_hunk_get_trailing_context(*args):
- """svn_diff_hunk_get_trailing_context(svn_diff_hunk_t hunk) -> svn_linenum_t"""
+ """svn_diff_hunk_get_trailing_context(svn_diff_hunk_t const * hunk) -> svn_linenum_t"""
return _diff.svn_diff_hunk_get_trailing_context(*args)
class svn_prop_patch_t:
"""Proxy of C svn_prop_patch_t struct"""
@@ -737,7 +719,7 @@ class svn_prop_patch_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_prop_patch_t"""
+ """__init__(svn_prop_patch_t self) -> svn_prop_patch_t"""
this = _diff.new_svn_prop_patch_t()
try: self.this.append(this)
except: self.this = this
@@ -808,7 +790,7 @@ class svn_patch_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_patch_t"""
+ """__init__(svn_patch_t self) -> svn_patch_t"""
this = _diff.new_svn_patch_t()
try: self.this.append(this)
except: self.this = this
@@ -819,19 +801,18 @@ svn_patch_t_swigregister(svn_patch_t)
def svn_diff_open_patch_file(*args):
- """svn_diff_open_patch_file(char local_abspath, apr_pool_t result_pool) -> svn_error_t"""
+ """svn_diff_open_patch_file(char const * local_abspath, apr_pool_t result_pool) -> svn_error_t"""
return _diff.svn_diff_open_patch_file(*args)
def svn_diff_parse_next_patch(*args):
"""
- svn_diff_parse_next_patch(svn_patch_file_t patch_file, svn_boolean_t reverse,
- svn_boolean_t ignore_whitespace, apr_pool_t result_pool,
- apr_pool_t scratch_pool) -> svn_error_t
+ svn_diff_parse_next_patch(svn_patch_file_t * patch_file, svn_boolean_t reverse, svn_boolean_t ignore_whitespace,
+ apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t
"""
return _diff.svn_diff_parse_next_patch(*args)
def svn_diff_close_patch_file(*args):
- """svn_diff_close_patch_file(svn_patch_file_t patch_file, apr_pool_t scratch_pool) -> svn_error_t"""
+ """svn_diff_close_patch_file(svn_patch_file_t * patch_file, apr_pool_t scratch_pool) -> svn_error_t"""
return _diff.svn_diff_close_patch_file(*args)
class svn_diff_t:
"""Proxy of C svn_diff_t struct"""
@@ -995,105 +976,92 @@ svn_patch_file_t_swigregister(svn_patch_file_t)
def svn_diff_fns2_invoke_datasources_open(*args):
"""
- svn_diff_fns2_invoke_datasources_open(svn_diff_fns2_t _obj, void diff_baton, apr_off_t prefix_lines,
- apr_off_t suffix_lines, svn_diff_datasource_e datasources,
- apr_size_t datasources_len) -> svn_error_t
+ svn_diff_fns2_invoke_datasources_open(svn_diff_fns2_t _obj, void * diff_baton, apr_off_t * prefix_lines, apr_off_t * suffix_lines,
+ svn_diff_datasource_e const * datasources, apr_size_t datasources_len) -> svn_error_t
"""
return _diff.svn_diff_fns2_invoke_datasources_open(*args)
def svn_diff_fns2_invoke_datasource_close(*args):
- """svn_diff_fns2_invoke_datasource_close(svn_diff_fns2_t _obj, void diff_baton, svn_diff_datasource_e datasource) -> svn_error_t"""
+ """svn_diff_fns2_invoke_datasource_close(svn_diff_fns2_t _obj, void * diff_baton, svn_diff_datasource_e datasource) -> svn_error_t"""
return _diff.svn_diff_fns2_invoke_datasource_close(*args)
def svn_diff_fns2_invoke_datasource_get_next_token(*args):
- """svn_diff_fns2_invoke_datasource_get_next_token(svn_diff_fns2_t _obj, void diff_baton, svn_diff_datasource_e datasource) -> svn_error_t"""
+ """svn_diff_fns2_invoke_datasource_get_next_token(svn_diff_fns2_t _obj, void * diff_baton, svn_diff_datasource_e datasource) -> svn_error_t"""
return _diff.svn_diff_fns2_invoke_datasource_get_next_token(*args)
def svn_diff_fns2_invoke_token_compare(*args):
- """
- svn_diff_fns2_invoke_token_compare(svn_diff_fns2_t _obj, void diff_baton, void ltoken,
- void rtoken) -> svn_error_t
- """
+ """svn_diff_fns2_invoke_token_compare(svn_diff_fns2_t _obj, void * diff_baton, void * ltoken, void * rtoken) -> svn_error_t"""
return _diff.svn_diff_fns2_invoke_token_compare(*args)
def svn_diff_fns2_invoke_token_discard(*args):
- """svn_diff_fns2_invoke_token_discard(svn_diff_fns2_t _obj, void diff_baton, void token)"""
+ """svn_diff_fns2_invoke_token_discard(svn_diff_fns2_t _obj, void * diff_baton, void * token)"""
return _diff.svn_diff_fns2_invoke_token_discard(*args)
def svn_diff_fns2_invoke_token_discard_all(*args):
- """svn_diff_fns2_invoke_token_discard_all(svn_diff_fns2_t _obj, void diff_baton)"""
+ """svn_diff_fns2_invoke_token_discard_all(svn_diff_fns2_t _obj, void * diff_baton)"""
return _diff.svn_diff_fns2_invoke_token_discard_all(*args)
def svn_diff_fns_invoke_datasource_open(*args):
- """svn_diff_fns_invoke_datasource_open(svn_diff_fns_t _obj, void diff_baton, svn_diff_datasource_e datasource) -> svn_error_t"""
+ """svn_diff_fns_invoke_datasource_open(svn_diff_fns_t _obj, void * diff_baton, svn_diff_datasource_e datasource) -> svn_error_t"""
return _diff.svn_diff_fns_invoke_datasource_open(*args)
def svn_diff_fns_invoke_datasource_close(*args):
- """svn_diff_fns_invoke_datasource_close(svn_diff_fns_t _obj, void diff_baton, svn_diff_datasource_e datasource) -> svn_error_t"""
+ """svn_diff_fns_invoke_datasource_close(svn_diff_fns_t _obj, void * diff_baton, svn_diff_datasource_e datasource) -> svn_error_t"""
return _diff.svn_diff_fns_invoke_datasource_close(*args)
def svn_diff_fns_invoke_datasource_get_next_token(*args):
- """svn_diff_fns_invoke_datasource_get_next_token(svn_diff_fns_t _obj, void diff_baton, svn_diff_datasource_e datasource) -> svn_error_t"""
+ """svn_diff_fns_invoke_datasource_get_next_token(svn_diff_fns_t _obj, void * diff_baton, svn_diff_datasource_e datasource) -> svn_error_t"""
return _diff.svn_diff_fns_invoke_datasource_get_next_token(*args)
def svn_diff_fns_invoke_token_compare(*args):
- """
- svn_diff_fns_invoke_token_compare(svn_diff_fns_t _obj, void diff_baton, void ltoken,
- void rtoken) -> svn_error_t
- """
+ """svn_diff_fns_invoke_token_compare(svn_diff_fns_t _obj, void * diff_baton, void * ltoken, void * rtoken) -> svn_error_t"""
return _diff.svn_diff_fns_invoke_token_compare(*args)
def svn_diff_fns_invoke_token_discard(*args):
- """svn_diff_fns_invoke_token_discard(svn_diff_fns_t _obj, void diff_baton, void token)"""
+ """svn_diff_fns_invoke_token_discard(svn_diff_fns_t _obj, void * diff_baton, void * token)"""
return _diff.svn_diff_fns_invoke_token_discard(*args)
def svn_diff_fns_invoke_token_discard_all(*args):
- """svn_diff_fns_invoke_token_discard_all(svn_diff_fns_t _obj, void diff_baton)"""
+ """svn_diff_fns_invoke_token_discard_all(svn_diff_fns_t _obj, void * diff_baton)"""
return _diff.svn_diff_fns_invoke_token_discard_all(*args)
def svn_diff_output_fns_invoke_output_common(*args):
"""
- svn_diff_output_fns_invoke_output_common(svn_diff_output_fns_t _obj, void output_baton, apr_off_t original_start,
- apr_off_t original_length,
- apr_off_t modified_start, apr_off_t modified_length,
- apr_off_t latest_start, apr_off_t latest_length) -> svn_error_t
+ svn_diff_output_fns_invoke_output_common(svn_diff_output_fns_t _obj, void * output_baton, apr_off_t original_start, apr_off_t original_length,
+ apr_off_t modified_start, apr_off_t modified_length, apr_off_t latest_start,
+ apr_off_t latest_length) -> svn_error_t
"""
return _diff.svn_diff_output_fns_invoke_output_common(*args)
def svn_diff_output_fns_invoke_output_diff_modified(*args):
"""
- svn_diff_output_fns_invoke_output_diff_modified(svn_diff_output_fns_t _obj, void output_baton, apr_off_t original_start,
- apr_off_t original_length,
- apr_off_t modified_start, apr_off_t modified_length,
- apr_off_t latest_start, apr_off_t latest_length) -> svn_error_t
+ svn_diff_output_fns_invoke_output_diff_modified(svn_diff_output_fns_t _obj, void * output_baton, apr_off_t original_start, apr_off_t original_length,
+ apr_off_t modified_start, apr_off_t modified_length, apr_off_t latest_start,
+ apr_off_t latest_length) -> svn_error_t
"""
return _diff.svn_diff_output_fns_invoke_output_diff_modified(*args)
def svn_diff_output_fns_invoke_output_diff_latest(*args):
"""
- svn_diff_output_fns_invoke_output_diff_latest(svn_diff_output_fns_t _obj, void output_baton, apr_off_t original_start,
- apr_off_t original_length,
- apr_off_t modified_start, apr_off_t modified_length,
- apr_off_t latest_start, apr_off_t latest_length) -> svn_error_t
+ svn_diff_output_fns_invoke_output_diff_latest(svn_diff_output_fns_t _obj, void * output_baton, apr_off_t original_start, apr_off_t original_length,
+ apr_off_t modified_start, apr_off_t modified_length, apr_off_t latest_start,
+ apr_off_t latest_length) -> svn_error_t
"""
return _diff.svn_diff_output_fns_invoke_output_diff_latest(*args)
def svn_diff_output_fns_invoke_output_diff_common(*args):
"""
- svn_diff_output_fns_invoke_output_diff_common(svn_diff_output_fns_t _obj, void output_baton, apr_off_t original_start,
- apr_off_t original_length,
- apr_off_t modified_start, apr_off_t modified_length,
- apr_off_t latest_start, apr_off_t latest_length) -> svn_error_t
+ svn_diff_output_fns_invoke_output_diff_common(svn_diff_output_fns_t _obj, void * output_baton, apr_off_t original_start, apr_off_t original_length,
+ apr_off_t modified_start, apr_off_t modified_length, apr_off_t latest_start,
+ apr_off_t latest_length) -> svn_error_t
"""
return _diff.svn_diff_output_fns_invoke_output_diff_common(*args)
def svn_diff_output_fns_invoke_output_conflict(*args):
"""
- svn_diff_output_fns_invoke_output_conflict(svn_diff_output_fns_t _obj, void output_baton, apr_off_t original_start,
- apr_off_t original_length,
- apr_off_t modified_start, apr_off_t modified_length,
- apr_off_t latest_start, apr_off_t latest_length,
- svn_diff_t resolved_diff) -> svn_error_t
+ svn_diff_output_fns_invoke_output_conflict(svn_diff_output_fns_t _obj, void * output_baton, apr_off_t original_start, apr_off_t original_length,
+ apr_off_t modified_start, apr_off_t modified_length, apr_off_t latest_start,
+ apr_off_t latest_length, svn_diff_t * resolved_diff) -> svn_error_t
"""
return _diff.svn_diff_output_fns_invoke_output_conflict(*args)
# This file is compatible with both classic and new-style classes.
diff --git a/subversion/bindings/swig/python/fs.py b/subversion/bindings/swig/python/fs.py
index 4736cd2..6d3b4cd 100644
--- a/subversion/bindings/swig/python/fs.py
+++ b/subversion/bindings/swig/python/fs.py
@@ -1,5 +1,5 @@
# This file was automatically generated by SWIG (http://www.swig.org).
-# Version 2.0.4
+# Version 2.0.9
#
# Do not make changes to this file unless you know what you are doing--modify
# the SWIG interface file instead.
@@ -84,232 +84,237 @@ def _assert_valid_deep(value):
if hasattr(value, "assert_valid"):
value.assert_valid()
-import core
-import delta
+import libsvn.core
+import libsvn.delta
def svn_fs_version():
- """svn_fs_version() -> svn_version_t"""
+ """svn_fs_version() -> svn_version_t const *"""
return _fs.svn_fs_version()
SVN_FS_CONFIG_BDB_TXN_NOSYNC = _fs.SVN_FS_CONFIG_BDB_TXN_NOSYNC
SVN_FS_CONFIG_BDB_LOG_AUTOREMOVE = _fs.SVN_FS_CONFIG_BDB_LOG_AUTOREMOVE
SVN_FS_CONFIG_FSFS_CACHE_DELTAS = _fs.SVN_FS_CONFIG_FSFS_CACHE_DELTAS
SVN_FS_CONFIG_FSFS_CACHE_FULLTEXTS = _fs.SVN_FS_CONFIG_FSFS_CACHE_FULLTEXTS
+SVN_FS_CONFIG_FSFS_CACHE_REVPROPS = _fs.SVN_FS_CONFIG_FSFS_CACHE_REVPROPS
+SVN_FS_CONFIG_FSFS_CACHE_NS = _fs.SVN_FS_CONFIG_FSFS_CACHE_NS
SVN_FS_CONFIG_FS_TYPE = _fs.SVN_FS_CONFIG_FS_TYPE
SVN_FS_TYPE_BDB = _fs.SVN_FS_TYPE_BDB
SVN_FS_TYPE_FSFS = _fs.SVN_FS_TYPE_FSFS
SVN_FS_CONFIG_PRE_1_4_COMPATIBLE = _fs.SVN_FS_CONFIG_PRE_1_4_COMPATIBLE
SVN_FS_CONFIG_PRE_1_5_COMPATIBLE = _fs.SVN_FS_CONFIG_PRE_1_5_COMPATIBLE
SVN_FS_CONFIG_PRE_1_6_COMPATIBLE = _fs.SVN_FS_CONFIG_PRE_1_6_COMPATIBLE
+SVN_FS_CONFIG_PRE_1_8_COMPATIBLE = _fs.SVN_FS_CONFIG_PRE_1_8_COMPATIBLE
def svn_fs_initialize(*args):
"""svn_fs_initialize(apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_initialize(*args)
-def svn_fs_set_warning_func(*args):
- """svn_fs_set_warning_func(svn_fs_t fs, svn_fs_warning_callback_t warning, void warning_baton)"""
- return _fs.svn_fs_set_warning_func(*args)
-
def svn_fs_create(*args):
- """svn_fs_create(char path, apr_hash_t fs_config, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_create(char const * path, apr_hash_t fs_config, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_create(*args)
def svn_fs_open(*args):
- """svn_fs_open(char path, apr_hash_t fs_config, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_open(char const * path, apr_hash_t fs_config, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_open(*args)
def svn_fs_upgrade(*args):
- """svn_fs_upgrade(char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_upgrade(char const * path, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_upgrade(*args)
def svn_fs_type(*args):
- """svn_fs_type(char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_type(char const * path, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_type(*args)
def svn_fs_path(*args):
- """svn_fs_path(svn_fs_t fs, apr_pool_t pool) -> char"""
+ """svn_fs_path(svn_fs_t * fs, apr_pool_t pool) -> char const *"""
return _fs.svn_fs_path(*args)
+def svn_fs_config(*args):
+ """svn_fs_config(svn_fs_t * fs, apr_pool_t pool) -> apr_hash_t"""
+ return _fs.svn_fs_config(*args)
+
def svn_fs_delete_fs(*args):
- """svn_fs_delete_fs(char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_delete_fs(char const * path, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_delete_fs(*args)
-def svn_fs_hotcopy(*args):
+def svn_fs_hotcopy2(*args):
"""
- svn_fs_hotcopy(char src_path, char dest_path, svn_boolean_t clean,
- apr_pool_t pool) -> svn_error_t
+ svn_fs_hotcopy2(char const * src_path, char const * dest_path, svn_boolean_t clean, svn_boolean_t incremental,
+ svn_cancel_func_t cancel_func, apr_pool_t scratch_pool) -> svn_error_t
"""
+ return _fs.svn_fs_hotcopy2(*args)
+
+def svn_fs_hotcopy(*args):
+ """svn_fs_hotcopy(char const * src_path, char const * dest_path, svn_boolean_t clean, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_hotcopy(*args)
def svn_fs_recover(*args):
- """svn_fs_recover(char path, svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_recover(char const * path, svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_recover(*args)
+def svn_fs_freeze(*args):
+ """svn_fs_freeze(svn_fs_t * fs, svn_fs_freeze_func_t freeze_func, apr_pool_t pool) -> svn_error_t"""
+ return _fs.svn_fs_freeze(*args)
+
def svn_fs_berkeley_logfiles(*args):
- """svn_fs_berkeley_logfiles(char path, svn_boolean_t only_unused, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_berkeley_logfiles(char const * path, svn_boolean_t only_unused, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_berkeley_logfiles(*args)
def svn_fs_new(*args):
- """svn_fs_new(apr_hash_t fs_config, apr_pool_t pool) -> svn_fs_t"""
+ """svn_fs_new(apr_hash_t fs_config, apr_pool_t pool) -> svn_fs_t *"""
return _fs.svn_fs_new(*args)
def svn_fs_create_berkeley(*args):
- """svn_fs_create_berkeley(svn_fs_t fs, char path) -> svn_error_t"""
+ """svn_fs_create_berkeley(svn_fs_t * fs, char const * path) -> svn_error_t"""
return _fs.svn_fs_create_berkeley(*args)
def svn_fs_open_berkeley(*args):
- """svn_fs_open_berkeley(svn_fs_t fs, char path) -> svn_error_t"""
+ """svn_fs_open_berkeley(svn_fs_t * fs, char const * path) -> svn_error_t"""
return _fs.svn_fs_open_berkeley(*args)
def svn_fs_berkeley_path(*args):
- """svn_fs_berkeley_path(svn_fs_t fs, apr_pool_t pool) -> char"""
+ """svn_fs_berkeley_path(svn_fs_t * fs, apr_pool_t pool) -> char const *"""
return _fs.svn_fs_berkeley_path(*args)
def svn_fs_delete_berkeley(*args):
- """svn_fs_delete_berkeley(char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_delete_berkeley(char const * path, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_delete_berkeley(*args)
def svn_fs_hotcopy_berkeley(*args):
- """
- svn_fs_hotcopy_berkeley(char src_path, char dest_path, svn_boolean_t clean_logs,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_fs_hotcopy_berkeley(char const * src_path, char const * dest_path, svn_boolean_t clean_logs, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_hotcopy_berkeley(*args)
def svn_fs_berkeley_recover(*args):
- """svn_fs_berkeley_recover(char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_berkeley_recover(char const * path, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_berkeley_recover(*args)
def svn_fs_create_access(*args):
- """svn_fs_create_access(char username, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_create_access(char const * username, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_create_access(*args)
def svn_fs_set_access(*args):
- """svn_fs_set_access(svn_fs_t fs, svn_fs_access_t access_ctx) -> svn_error_t"""
+ """svn_fs_set_access(svn_fs_t * fs, svn_fs_access_t * access_ctx) -> svn_error_t"""
return _fs.svn_fs_set_access(*args)
def svn_fs_get_access(*args):
- """svn_fs_get_access(svn_fs_t fs) -> svn_error_t"""
+ """svn_fs_get_access(svn_fs_t * fs) -> svn_error_t"""
return _fs.svn_fs_get_access(*args)
def svn_fs_access_get_username(*args):
- """svn_fs_access_get_username(svn_fs_access_t access_ctx) -> svn_error_t"""
+ """svn_fs_access_get_username(svn_fs_access_t * access_ctx) -> svn_error_t"""
return _fs.svn_fs_access_get_username(*args)
def svn_fs_access_add_lock_token2(*args):
- """svn_fs_access_add_lock_token2(svn_fs_access_t access_ctx, char path, char token) -> svn_error_t"""
+ """svn_fs_access_add_lock_token2(svn_fs_access_t * access_ctx, char const * path, char const * token) -> svn_error_t"""
return _fs.svn_fs_access_add_lock_token2(*args)
def svn_fs_access_add_lock_token(*args):
- """svn_fs_access_add_lock_token(svn_fs_access_t access_ctx, char token) -> svn_error_t"""
+ """svn_fs_access_add_lock_token(svn_fs_access_t * access_ctx, char const * token) -> svn_error_t"""
return _fs.svn_fs_access_add_lock_token(*args)
def svn_fs_compare_ids(*args):
- """svn_fs_compare_ids(svn_fs_id_t a, svn_fs_id_t b) -> int"""
+ """svn_fs_compare_ids(svn_fs_id_t const * a, svn_fs_id_t const * b) -> int"""
return _fs.svn_fs_compare_ids(*args)
def svn_fs_check_related(*args):
- """svn_fs_check_related(svn_fs_id_t id1, svn_fs_id_t id2) -> svn_boolean_t"""
+ """svn_fs_check_related(svn_fs_id_t const * id1, svn_fs_id_t const * id2) -> svn_boolean_t"""
return _fs.svn_fs_check_related(*args)
def svn_fs_parse_id(*args):
- """svn_fs_parse_id(char data, apr_pool_t pool) -> svn_fs_id_t"""
+ """svn_fs_parse_id(char const * data, apr_pool_t pool) -> svn_fs_id_t *"""
return _fs.svn_fs_parse_id(*args)
def svn_fs_unparse_id(*args):
- """svn_fs_unparse_id(svn_fs_id_t id, apr_pool_t pool) -> svn_string_t"""
+ """svn_fs_unparse_id(svn_fs_id_t const * id, apr_pool_t pool) -> svn_string_t *"""
return _fs.svn_fs_unparse_id(*args)
SVN_FS_TXN_CHECK_OOD = _fs.SVN_FS_TXN_CHECK_OOD
SVN_FS_TXN_CHECK_LOCKS = _fs.SVN_FS_TXN_CHECK_LOCKS
def svn_fs_begin_txn2(*args):
- """
- svn_fs_begin_txn2(svn_fs_t fs, svn_revnum_t rev, apr_uint32_t flags,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_fs_begin_txn2(svn_fs_t * fs, svn_revnum_t rev, apr_uint32_t flags, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_begin_txn2(*args)
def svn_fs_begin_txn(*args):
- """svn_fs_begin_txn(svn_fs_t fs, svn_revnum_t rev, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_begin_txn(svn_fs_t * fs, svn_revnum_t rev, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_begin_txn(*args)
def svn_fs_commit_txn(*args):
- """svn_fs_commit_txn(svn_fs_txn_t txn, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_commit_txn(svn_fs_txn_t * txn, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_commit_txn(*args)
def svn_fs_abort_txn(*args):
- """svn_fs_abort_txn(svn_fs_txn_t txn, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_abort_txn(svn_fs_txn_t * txn, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_abort_txn(*args)
def svn_fs_purge_txn(*args):
- """svn_fs_purge_txn(svn_fs_t fs, char txn_id, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_purge_txn(svn_fs_t * fs, char const * txn_id, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_purge_txn(*args)
def svn_fs_txn_name(*args):
- """svn_fs_txn_name(svn_fs_txn_t txn, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_txn_name(svn_fs_txn_t * txn, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_txn_name(*args)
def svn_fs_txn_base_revision(*args):
- """svn_fs_txn_base_revision(svn_fs_txn_t txn) -> svn_revnum_t"""
+ """svn_fs_txn_base_revision(svn_fs_txn_t * txn) -> svn_revnum_t"""
return _fs.svn_fs_txn_base_revision(*args)
def svn_fs_open_txn(*args):
- """svn_fs_open_txn(svn_fs_t fs, char name, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_open_txn(svn_fs_t * fs, char const * name, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_open_txn(*args)
def svn_fs_list_transactions(*args):
- """svn_fs_list_transactions(svn_fs_t fs, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_list_transactions(svn_fs_t * fs, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_list_transactions(*args)
def svn_fs_txn_prop(*args):
- """svn_fs_txn_prop(svn_fs_txn_t txn, char propname, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_txn_prop(svn_fs_txn_t * txn, char const * propname, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_txn_prop(*args)
def svn_fs_txn_proplist(*args):
- """svn_fs_txn_proplist(svn_fs_txn_t txn, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_txn_proplist(svn_fs_txn_t * txn, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_txn_proplist(*args)
def svn_fs_change_txn_prop(*args):
- """svn_fs_change_txn_prop(svn_fs_txn_t txn, char name, svn_string_t value, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_change_txn_prop(svn_fs_txn_t * txn, char const * name, svn_string_t const * value, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_change_txn_prop(*args)
def svn_fs_change_txn_props(*args):
- """svn_fs_change_txn_props(svn_fs_txn_t txn, apr_array_header_t props, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_change_txn_props(svn_fs_txn_t * txn, apr_array_header_t props, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_change_txn_props(*args)
def svn_fs_revision_root(*args):
- """svn_fs_revision_root(svn_fs_t fs, svn_revnum_t rev, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_revision_root(svn_fs_t * fs, svn_revnum_t rev, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_revision_root(*args)
def svn_fs_txn_root(*args):
- """svn_fs_txn_root(svn_fs_txn_t txn, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_txn_root(svn_fs_txn_t * txn, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_txn_root(*args)
def svn_fs_close_root(*args):
- """svn_fs_close_root(svn_fs_root_t root)"""
+ """svn_fs_close_root(svn_fs_root_t * root)"""
return _fs.svn_fs_close_root(*args)
def svn_fs_root_fs(*args):
- """svn_fs_root_fs(svn_fs_root_t root) -> svn_fs_t"""
+ """svn_fs_root_fs(svn_fs_root_t * root) -> svn_fs_t *"""
return _fs.svn_fs_root_fs(*args)
def svn_fs_is_txn_root(*args):
- """svn_fs_is_txn_root(svn_fs_root_t root) -> svn_boolean_t"""
+ """svn_fs_is_txn_root(svn_fs_root_t * root) -> svn_boolean_t"""
return _fs.svn_fs_is_txn_root(*args)
def svn_fs_is_revision_root(*args):
- """svn_fs_is_revision_root(svn_fs_root_t root) -> svn_boolean_t"""
+ """svn_fs_is_revision_root(svn_fs_root_t * root) -> svn_boolean_t"""
return _fs.svn_fs_is_revision_root(*args)
def svn_fs_txn_root_name(*args):
- """svn_fs_txn_root_name(svn_fs_root_t root, apr_pool_t pool) -> char"""
+ """svn_fs_txn_root_name(svn_fs_root_t * root, apr_pool_t pool) -> char const *"""
return _fs.svn_fs_txn_root_name(*args)
def svn_fs_txn_root_base_revision(*args):
- """svn_fs_txn_root_base_revision(svn_fs_root_t root) -> svn_revnum_t"""
+ """svn_fs_txn_root_base_revision(svn_fs_root_t * root) -> svn_revnum_t"""
return _fs.svn_fs_txn_root_base_revision(*args)
def svn_fs_revision_root_revision(*args):
- """svn_fs_revision_root_revision(svn_fs_root_t root) -> svn_revnum_t"""
+ """svn_fs_revision_root_revision(svn_fs_root_t * root) -> svn_revnum_t"""
return _fs.svn_fs_revision_root_revision(*args)
svn_fs_path_change_modify = _fs.svn_fs_path_change_modify
svn_fs_path_change_add = _fs.svn_fs_path_change_add
@@ -448,106 +453,107 @@ svn_fs_path_change_t_swigregister(svn_fs_path_change_t)
def svn_fs_path_change2_create(*args):
- """
- svn_fs_path_change2_create(svn_fs_id_t node_rev_id, svn_fs_path_change_kind_t change_kind,
- apr_pool_t pool) -> svn_fs_path_change2_t
- """
+ """svn_fs_path_change2_create(svn_fs_id_t const * node_rev_id, svn_fs_path_change_kind_t change_kind, apr_pool_t pool) -> svn_fs_path_change2_t"""
return _fs.svn_fs_path_change2_create(*args)
def svn_fs_paths_changed2(*args):
- """svn_fs_paths_changed2(svn_fs_root_t root, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_paths_changed2(svn_fs_root_t * root, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_paths_changed2(*args)
def svn_fs_paths_changed(*args):
- """svn_fs_paths_changed(svn_fs_root_t root, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_paths_changed(svn_fs_root_t * root, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_paths_changed(*args)
def svn_fs_check_path(*args):
- """svn_fs_check_path(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_check_path(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_check_path(*args)
def svn_fs_node_history(*args):
- """svn_fs_node_history(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_node_history(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_node_history(*args)
def svn_fs_history_prev(*args):
- """
- svn_fs_history_prev(svn_fs_history_t history, svn_boolean_t cross_copies,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_fs_history_prev(svn_fs_history_t * history, svn_boolean_t cross_copies, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_history_prev(*args)
def svn_fs_history_location(*args):
- """svn_fs_history_location(svn_fs_history_t history, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_history_location(svn_fs_history_t * history, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_history_location(*args)
def svn_fs_is_dir(*args):
- """svn_fs_is_dir(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_is_dir(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_is_dir(*args)
def svn_fs_is_file(*args):
- """svn_fs_is_file(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_is_file(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_is_file(*args)
def svn_fs_node_id(*args):
- """svn_fs_node_id(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_node_id(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_node_id(*args)
def svn_fs_node_created_rev(*args):
- """svn_fs_node_created_rev(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_node_created_rev(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_node_created_rev(*args)
def svn_fs_node_origin_rev(*args):
- """svn_fs_node_origin_rev(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_node_origin_rev(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_node_origin_rev(*args)
def svn_fs_node_created_path(*args):
- """svn_fs_node_created_path(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_node_created_path(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_node_created_path(*args)
def svn_fs_node_prop(*args):
- """svn_fs_node_prop(svn_fs_root_t root, char path, char propname, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_node_prop(svn_fs_root_t * root, char const * path, char const * propname, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_node_prop(*args)
def svn_fs_node_proplist(*args):
- """svn_fs_node_proplist(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_node_proplist(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_node_proplist(*args)
def svn_fs_change_node_prop(*args):
"""
- svn_fs_change_node_prop(svn_fs_root_t root, char path, char name, svn_string_t value,
+ svn_fs_change_node_prop(svn_fs_root_t * root, char const * path, char const * name, svn_string_t const * value,
apr_pool_t pool) -> svn_error_t
"""
return _fs.svn_fs_change_node_prop(*args)
def svn_fs_props_changed(*args):
"""
- svn_fs_props_changed(svn_fs_root_t root1, char path1, svn_fs_root_t root2,
- char path2, apr_pool_t pool) -> svn_error_t
+ svn_fs_props_changed(svn_fs_root_t * root1, char const * path1, svn_fs_root_t * root2, char const * path2,
+ apr_pool_t pool) -> svn_error_t
"""
return _fs.svn_fs_props_changed(*args)
def svn_fs_copied_from(*args):
- """svn_fs_copied_from(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_copied_from(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_copied_from(*args)
def svn_fs_closest_copy(*args):
- """svn_fs_closest_copy(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_closest_copy(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_closest_copy(*args)
+def svn_fs_get_mergeinfo2(*args):
+ """
+ svn_fs_get_mergeinfo2(svn_fs_root_t * root, apr_array_header_t paths, svn_mergeinfo_inheritance_t inherit,
+ svn_boolean_t include_descendants, svn_boolean_t adjust_inherited_mergeinfo,
+ apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t
+ """
+ return _fs.svn_fs_get_mergeinfo2(*args)
+
def svn_fs_get_mergeinfo(*args):
"""
- svn_fs_get_mergeinfo(svn_fs_root_t root, apr_array_header_t paths, svn_mergeinfo_inheritance_t inherit,
- svn_boolean_t include_descendants,
- apr_pool_t pool) -> svn_error_t
+ svn_fs_get_mergeinfo(svn_fs_root_t * root, apr_array_header_t paths, svn_mergeinfo_inheritance_t inherit,
+ svn_boolean_t include_descendants, apr_pool_t pool) -> svn_error_t
"""
return _fs.svn_fs_get_mergeinfo(*args)
def svn_fs_merge(*args):
"""
- svn_fs_merge(svn_fs_root_t source_root, char source_path, svn_fs_root_t target_root,
- char target_path, svn_fs_root_t ancestor_root,
- char ancestor_path, apr_pool_t pool) -> svn_error_t
+ svn_fs_merge(svn_fs_root_t * source_root, char const * source_path, svn_fs_root_t * target_root,
+ char const * target_path, svn_fs_root_t * ancestor_root, char const * ancestor_path,
+ apr_pool_t pool) -> svn_error_t
"""
return _fs.svn_fs_merge(*args)
class svn_fs_dirent_t:
@@ -611,160 +617,151 @@ svn_fs_dirent_t_swigregister(svn_fs_dirent_t)
def svn_fs_dir_entries(*args):
- """svn_fs_dir_entries(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_dir_entries(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_dir_entries(*args)
def svn_fs_make_dir(*args):
- """svn_fs_make_dir(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_make_dir(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_make_dir(*args)
def svn_fs_delete(*args):
- """svn_fs_delete(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_delete(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_delete(*args)
def svn_fs_copy(*args):
"""
- svn_fs_copy(svn_fs_root_t from_root, char from_path, svn_fs_root_t to_root,
- char to_path, apr_pool_t pool) -> svn_error_t
+ svn_fs_copy(svn_fs_root_t * from_root, char const * from_path, svn_fs_root_t * to_root, char const * to_path,
+ apr_pool_t pool) -> svn_error_t
"""
return _fs.svn_fs_copy(*args)
def svn_fs_revision_link(*args):
- """
- svn_fs_revision_link(svn_fs_root_t from_root, svn_fs_root_t to_root, char path,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_fs_revision_link(svn_fs_root_t * from_root, svn_fs_root_t * to_root, char const * path, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_revision_link(*args)
def svn_fs_file_length(*args):
- """svn_fs_file_length(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_file_length(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_file_length(*args)
def svn_fs_file_checksum(*args):
"""
- svn_fs_file_checksum(svn_checksum_kind_t kind, svn_fs_root_t root, char path,
- svn_boolean_t force, apr_pool_t pool) -> svn_error_t
+ svn_fs_file_checksum(svn_checksum_kind_t kind, svn_fs_root_t * root, char const * path, svn_boolean_t force,
+ apr_pool_t pool) -> svn_error_t
"""
return _fs.svn_fs_file_checksum(*args)
def svn_fs_file_md5_checksum(*args):
- """svn_fs_file_md5_checksum(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_file_md5_checksum(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_file_md5_checksum(*args)
def svn_fs_file_contents(*args):
- """svn_fs_file_contents(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_file_contents(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_file_contents(*args)
+def svn_fs_try_process_file_contents(*args):
+ """
+ svn_fs_try_process_file_contents(svn_fs_root_t * root, char const * path, svn_fs_process_contents_func_t processor,
+ void * baton, apr_pool_t pool) -> svn_error_t
+ """
+ return _fs.svn_fs_try_process_file_contents(*args)
+
def svn_fs_make_file(*args):
- """svn_fs_make_file(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_make_file(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_make_file(*args)
def svn_fs_apply_textdelta(*args):
"""
- svn_fs_apply_textdelta(svn_fs_root_t root, char path, char base_checksum,
- char result_checksum, apr_pool_t pool) -> svn_error_t
+ svn_fs_apply_textdelta(svn_fs_root_t * root, char const * path, char const * base_checksum, char const * result_checksum,
+ apr_pool_t pool) -> svn_error_t
"""
return _fs.svn_fs_apply_textdelta(*args)
def svn_fs_apply_text(*args):
- """
- svn_fs_apply_text(svn_fs_root_t root, char path, char result_checksum,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_fs_apply_text(svn_fs_root_t * root, char const * path, char const * result_checksum, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_apply_text(*args)
def svn_fs_contents_changed(*args):
"""
- svn_fs_contents_changed(svn_fs_root_t root1, char path1, svn_fs_root_t root2,
- char path2, apr_pool_t pool) -> svn_error_t
+ svn_fs_contents_changed(svn_fs_root_t * root1, char const * path1, svn_fs_root_t * root2, char const * path2,
+ apr_pool_t pool) -> svn_error_t
"""
return _fs.svn_fs_contents_changed(*args)
def svn_fs_youngest_rev(*args):
- """svn_fs_youngest_rev(svn_fs_t fs, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_youngest_rev(svn_fs_t * fs, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_youngest_rev(*args)
def svn_fs_deltify_revision(*args):
- """svn_fs_deltify_revision(svn_fs_t fs, svn_revnum_t revision, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_deltify_revision(svn_fs_t * fs, svn_revnum_t revision, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_deltify_revision(*args)
def svn_fs_revision_prop(*args):
- """svn_fs_revision_prop(svn_fs_t fs, svn_revnum_t rev, char propname, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_revision_prop(svn_fs_t * fs, svn_revnum_t rev, char const * propname, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_revision_prop(*args)
def svn_fs_revision_proplist(*args):
- """svn_fs_revision_proplist(svn_fs_t fs, svn_revnum_t rev, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_revision_proplist(svn_fs_t * fs, svn_revnum_t rev, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_revision_proplist(*args)
def svn_fs_change_rev_prop2(*args):
"""
- svn_fs_change_rev_prop2(svn_fs_t fs, svn_revnum_t rev, char name, svn_string_t old_value_p,
- svn_string_t value, apr_pool_t pool) -> svn_error_t
+ svn_fs_change_rev_prop2(svn_fs_t * fs, svn_revnum_t rev, char const * name, svn_string_t const *const * old_value_p,
+ svn_string_t const * value, apr_pool_t pool) -> svn_error_t
"""
return _fs.svn_fs_change_rev_prop2(*args)
def svn_fs_change_rev_prop(*args):
- """
- svn_fs_change_rev_prop(svn_fs_t fs, svn_revnum_t rev, char name, svn_string_t value,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_fs_change_rev_prop(svn_fs_t * fs, svn_revnum_t rev, char const * name, svn_string_t const * value, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_change_rev_prop(*args)
def svn_fs_get_file_delta_stream(*args):
"""
- svn_fs_get_file_delta_stream(svn_fs_root_t source_root, char source_path, svn_fs_root_t target_root,
- char target_path, apr_pool_t pool) -> svn_error_t
+ svn_fs_get_file_delta_stream(svn_fs_root_t * source_root, char const * source_path, svn_fs_root_t * target_root,
+ char const * target_path, apr_pool_t pool) -> svn_error_t
"""
return _fs.svn_fs_get_file_delta_stream(*args)
def svn_fs_get_uuid(*args):
- """svn_fs_get_uuid(svn_fs_t fs, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_get_uuid(svn_fs_t * fs, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_get_uuid(*args)
def svn_fs_set_uuid(*args):
- """svn_fs_set_uuid(svn_fs_t fs, char uuid, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_set_uuid(svn_fs_t * fs, char const * uuid, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_set_uuid(*args)
def svn_fs_lock(*args):
"""
- svn_fs_lock(svn_fs_t fs, char path, char token, char comment, svn_boolean_t is_dav_comment,
- apr_time_t expiration_date,
- svn_revnum_t current_rev, svn_boolean_t steal_lock,
- apr_pool_t pool) -> svn_error_t
+ svn_fs_lock(svn_fs_t * fs, char const * path, char const * token, char const * comment, svn_boolean_t is_dav_comment,
+ apr_time_t expiration_date, svn_revnum_t current_rev,
+ svn_boolean_t steal_lock, apr_pool_t pool) -> svn_error_t
"""
return _fs.svn_fs_lock(*args)
def svn_fs_generate_lock_token(*args):
- """svn_fs_generate_lock_token(svn_fs_t fs, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_generate_lock_token(svn_fs_t * fs, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_generate_lock_token(*args)
def svn_fs_unlock(*args):
- """
- svn_fs_unlock(svn_fs_t fs, char path, char token, svn_boolean_t break_lock,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_fs_unlock(svn_fs_t * fs, char const * path, char const * token, svn_boolean_t break_lock, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_unlock(*args)
def svn_fs_get_lock(*args):
- """svn_fs_get_lock(svn_fs_t fs, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_get_lock(svn_fs_t * fs, char const * path, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_get_lock(*args)
def svn_fs_get_locks2(*args):
"""
- svn_fs_get_locks2(svn_fs_t fs, char path, svn_depth_t depth, svn_fs_get_locks_callback_t get_locks_func,
+ svn_fs_get_locks2(svn_fs_t * fs, char const * path, svn_depth_t depth, svn_fs_get_locks_callback_t get_locks_func,
apr_pool_t pool) -> svn_error_t
"""
return _fs.svn_fs_get_locks2(*args)
def svn_fs_get_locks(*args):
- """
- svn_fs_get_locks(svn_fs_t fs, char path, svn_fs_get_locks_callback_t get_locks_func,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_fs_get_locks(svn_fs_t * fs, char const * path, svn_fs_get_locks_callback_t get_locks_func, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_get_locks(*args)
def svn_fs_print_modules(*args):
- """svn_fs_print_modules(svn_stringbuf_t output, apr_pool_t pool) -> svn_error_t"""
+ """svn_fs_print_modules(svn_stringbuf_t * output, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_print_modules(*args)
svn_fs_pack_notify_start = _fs.svn_fs_pack_notify_start
svn_fs_pack_notify_end = _fs.svn_fs_pack_notify_end
@@ -773,11 +770,22 @@ svn_fs_pack_notify_end_revprop = _fs.svn_fs_pack_notify_end_revprop
def svn_fs_pack(*args):
"""
- svn_fs_pack(char db_path, svn_fs_pack_notify_t notify_func, void notify_baton,
- svn_cancel_func_t cancel_func,
+ svn_fs_pack(char const * db_path, svn_fs_pack_notify_t notify_func, void * notify_baton, svn_cancel_func_t cancel_func,
apr_pool_t pool) -> svn_error_t
"""
return _fs.svn_fs_pack(*args)
+
+def svn_fs_verify(*args):
+ """
+ svn_fs_verify(char const * path, apr_hash_t fs_config, svn_revnum_t start, svn_revnum_t end, svn_fs_progress_notify_func_t notify_func,
+ void * notify_baton, svn_cancel_func_t cancel_func,
+ apr_pool_t scratch_pool) -> svn_error_t
+ """
+ return _fs.svn_fs_verify(*args)
+
+def svn_fs_verify_root(*args):
+ """svn_fs_verify_root(svn_fs_root_t * root, apr_pool_t scratch_pool) -> svn_error_t"""
+ return _fs.svn_fs_verify_root(*args)
class svn_fs_t:
"""Proxy of C svn_fs_t struct"""
__swig_setmethods__ = {}
@@ -1098,20 +1106,32 @@ svn_fs_history_t_swigregister(svn_fs_history_t)
def svn_fs_invoke_warning_callback(*args):
- """svn_fs_invoke_warning_callback(svn_fs_warning_callback_t _obj, void baton, svn_error_t err)"""
+ """svn_fs_invoke_warning_callback(svn_fs_warning_callback_t _obj, void * baton, svn_error_t err)"""
return _fs.svn_fs_invoke_warning_callback(*args)
-def svn_fs_invoke_get_locks_callback(*args):
+def svn_fs_invoke_progress_notify_func(*args):
+ """svn_fs_invoke_progress_notify_func(svn_fs_progress_notify_func_t _obj, svn_revnum_t revision, void * baton, apr_pool_t pool)"""
+ return _fs.svn_fs_invoke_progress_notify_func(*args)
+
+def svn_fs_invoke_freeze_func(*args):
+ """svn_fs_invoke_freeze_func(svn_fs_freeze_func_t _obj, void * baton, apr_pool_t pool) -> svn_error_t"""
+ return _fs.svn_fs_invoke_freeze_func(*args)
+
+def svn_fs_invoke_process_contents_func(*args):
"""
- svn_fs_invoke_get_locks_callback(svn_fs_get_locks_callback_t _obj, void baton, svn_lock_t lock,
- apr_pool_t pool) -> svn_error_t
+ svn_fs_invoke_process_contents_func(svn_fs_process_contents_func_t _obj, unsigned char const * contents, apr_size_t len,
+ void * baton, apr_pool_t scratch_pool) -> svn_error_t
"""
+ return _fs.svn_fs_invoke_process_contents_func(*args)
+
+def svn_fs_invoke_get_locks_callback(*args):
+ """svn_fs_invoke_get_locks_callback(svn_fs_get_locks_callback_t _obj, void * baton, svn_lock_t lock, apr_pool_t pool) -> svn_error_t"""
return _fs.svn_fs_invoke_get_locks_callback(*args)
def svn_fs_invoke_pack_notify(*args):
"""
- svn_fs_invoke_pack_notify(svn_fs_pack_notify_t _obj, void baton, apr_int64_t shard,
- svn_fs_pack_notify_action_t action, apr_pool_t pool) -> svn_error_t
+ svn_fs_invoke_pack_notify(svn_fs_pack_notify_t _obj, void * baton, apr_int64_t shard, svn_fs_pack_notify_action_t action,
+ apr_pool_t pool) -> svn_error_t
"""
return _fs.svn_fs_invoke_pack_notify(*args)
class svn_fs_warning_callback_t:
@@ -1170,6 +1190,174 @@ class svn_fs_warning_callback_t:
svn_fs_warning_callback_t_swigregister = _fs.svn_fs_warning_callback_t_swigregister
svn_fs_warning_callback_t_swigregister(svn_fs_warning_callback_t)
+class svn_fs_progress_notify_func_t:
+ """Proxy of C svn_fs_progress_notify_func_t struct"""
+ __swig_setmethods__ = {}
+ __setattr__ = lambda self, name, value: _swig_setattr(self, svn_fs_progress_notify_func_t, name, value)
+ __swig_getmethods__ = {}
+ __getattr__ = lambda self, name: _swig_getattr(self, svn_fs_progress_notify_func_t, name)
+ def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+ __repr__ = _swig_repr
+ def set_parent_pool(self, parent_pool=None):
+ """Create a new proxy object for svn_fs_progress_notify_func_t"""
+ import libsvn.core, weakref
+ self.__dict__["_parent_pool"] = \
+ parent_pool or libsvn.core.application_pool;
+ if self.__dict__["_parent_pool"]:
+ self.__dict__["_is_valid"] = weakref.ref(
+ self.__dict__["_parent_pool"]._is_valid)
+
+ def assert_valid(self):
+ """Assert that this object is using valid pool memory"""
+ if "_is_valid" in self.__dict__:
+ assert self.__dict__["_is_valid"](), "Variable has already been deleted"
+
+ def __getattr__(self, name):
+ """Get an attribute from this object"""
+ self.assert_valid()
+
+ value = _swig_getattr(self, self.__class__, name)
+
+
+
+ members = self.__dict__.get("_members")
+ if members is not None:
+ _copy_metadata_deep(value, members.get(name))
+
+
+ _assert_valid_deep(value)
+
+ return value
+
+ def __setattr__(self, name, value):
+ """Set an attribute on this object"""
+ self.assert_valid()
+
+
+
+
+ self.__dict__.setdefault("_members",{})[name] = value
+
+ return _swig_setattr(self, self.__class__, name, value)
+
+ def __call__(self, *args):
+ return svn_fs_invoke_progress_notify_func(self, *args)
+
+svn_fs_progress_notify_func_t_swigregister = _fs.svn_fs_progress_notify_func_t_swigregister
+svn_fs_progress_notify_func_t_swigregister(svn_fs_progress_notify_func_t)
+
+class svn_fs_freeze_func_t:
+ """Proxy of C svn_fs_freeze_func_t struct"""
+ __swig_setmethods__ = {}
+ __setattr__ = lambda self, name, value: _swig_setattr(self, svn_fs_freeze_func_t, name, value)
+ __swig_getmethods__ = {}
+ __getattr__ = lambda self, name: _swig_getattr(self, svn_fs_freeze_func_t, name)
+ def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+ __repr__ = _swig_repr
+ def set_parent_pool(self, parent_pool=None):
+ """Create a new proxy object for svn_fs_freeze_func_t"""
+ import libsvn.core, weakref
+ self.__dict__["_parent_pool"] = \
+ parent_pool or libsvn.core.application_pool;
+ if self.__dict__["_parent_pool"]:
+ self.__dict__["_is_valid"] = weakref.ref(
+ self.__dict__["_parent_pool"]._is_valid)
+
+ def assert_valid(self):
+ """Assert that this object is using valid pool memory"""
+ if "_is_valid" in self.__dict__:
+ assert self.__dict__["_is_valid"](), "Variable has already been deleted"
+
+ def __getattr__(self, name):
+ """Get an attribute from this object"""
+ self.assert_valid()
+
+ value = _swig_getattr(self, self.__class__, name)
+
+
+
+ members = self.__dict__.get("_members")
+ if members is not None:
+ _copy_metadata_deep(value, members.get(name))
+
+
+ _assert_valid_deep(value)
+
+ return value
+
+ def __setattr__(self, name, value):
+ """Set an attribute on this object"""
+ self.assert_valid()
+
+
+
+
+ self.__dict__.setdefault("_members",{})[name] = value
+
+ return _swig_setattr(self, self.__class__, name, value)
+
+ def __call__(self, *args):
+ return svn_fs_invoke_freeze_func(self, *args)
+
+svn_fs_freeze_func_t_swigregister = _fs.svn_fs_freeze_func_t_swigregister
+svn_fs_freeze_func_t_swigregister(svn_fs_freeze_func_t)
+
+class svn_fs_process_contents_func_t:
+ """Proxy of C svn_fs_process_contents_func_t struct"""
+ __swig_setmethods__ = {}
+ __setattr__ = lambda self, name, value: _swig_setattr(self, svn_fs_process_contents_func_t, name, value)
+ __swig_getmethods__ = {}
+ __getattr__ = lambda self, name: _swig_getattr(self, svn_fs_process_contents_func_t, name)
+ def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+ __repr__ = _swig_repr
+ def set_parent_pool(self, parent_pool=None):
+ """Create a new proxy object for svn_fs_process_contents_func_t"""
+ import libsvn.core, weakref
+ self.__dict__["_parent_pool"] = \
+ parent_pool or libsvn.core.application_pool;
+ if self.__dict__["_parent_pool"]:
+ self.__dict__["_is_valid"] = weakref.ref(
+ self.__dict__["_parent_pool"]._is_valid)
+
+ def assert_valid(self):
+ """Assert that this object is using valid pool memory"""
+ if "_is_valid" in self.__dict__:
+ assert self.__dict__["_is_valid"](), "Variable has already been deleted"
+
+ def __getattr__(self, name):
+ """Get an attribute from this object"""
+ self.assert_valid()
+
+ value = _swig_getattr(self, self.__class__, name)
+
+
+
+ members = self.__dict__.get("_members")
+ if members is not None:
+ _copy_metadata_deep(value, members.get(name))
+
+
+ _assert_valid_deep(value)
+
+ return value
+
+ def __setattr__(self, name, value):
+ """Set an attribute on this object"""
+ self.assert_valid()
+
+
+
+
+ self.__dict__.setdefault("_members",{})[name] = value
+
+ return _swig_setattr(self, self.__class__, name, value)
+
+ def __call__(self, *args):
+ return svn_fs_invoke_process_contents_func(self, *args)
+
+svn_fs_process_contents_func_t_swigregister = _fs.svn_fs_process_contents_func_t_swigregister
+svn_fs_process_contents_func_t_swigregister(svn_fs_process_contents_func_t)
+
class svn_fs_get_locks_callback_t:
"""Proxy of C svn_fs_get_locks_callback_t struct"""
__swig_setmethods__ = {}
diff --git a/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c b/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
index 0f89905..1dbdc1b 100644
--- a/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
+++ b/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
@@ -35,6 +35,7 @@
#include <apr_portable.h>
#include <apr_thread_proc.h>
+#include "svn_hash.h"
#include "svn_client.h"
#include "svn_string.h"
#include "svn_opt.h"
@@ -547,6 +548,19 @@ static PyObject *convert_svn_string_t(void *value, void *ctx,
return PyString_FromStringAndSize((void *)s->data, s->len);
}
+/* Convert a C string into a Python String object (or a reference to
+ Py_None if CSTRING is NULL). */
+static PyObject *cstring_to_pystring(const char *cstring)
+{
+ if (! cstring)
+ {
+ PyObject *retval = Py_None;
+ Py_INCREF(Py_None);
+ return retval;
+ }
+ return PyString_FromString(cstring);
+}
+
static PyObject *convert_svn_client_commit_item3_t(void *value, void *ctx)
{
PyObject *list;
@@ -558,30 +572,9 @@ static PyObject *convert_svn_client_commit_item3_t(void *value, void *ctx)
list = PyList_New(9);
- if (item->path)
- path = PyString_FromString(item->path);
- else
- {
- path = Py_None;
- Py_INCREF(Py_None);
- }
-
- if (item->url)
- url = PyString_FromString(item->url);
- else
- {
- url = Py_None;
- Py_INCREF(Py_None);
- }
-
- if (item->copyfrom_url)
- cf_url = PyString_FromString(item->copyfrom_url);
- else
- {
- cf_url = Py_None;
- Py_INCREF(Py_None);
- }
-
+ path = cstring_to_pystring(item->path);
+ url = cstring_to_pystring(item->url);
+ cf_url = cstring_to_pystring(item->copyfrom_url);
kind = PyInt_FromLong(item->kind);
rev = PyInt_FromLong(item->revision);
cf_rev = PyInt_FromLong(item->copyfrom_rev);
@@ -708,6 +701,51 @@ PyObject *svn_swig_py_mergeinfo_catalog_to_dict(apr_hash_t *hash,
return convert_hash(hash, convert_mergeinfo_hash, type, py_pool);
}
+PyObject *
+svn_swig_py_propinheriteditemarray_to_dict(const apr_array_header_t *array)
+{
+ PyObject *dict = PyDict_New();
+ int i;
+
+ if (dict == NULL)
+ return NULL;
+
+ for (i = 0; i < array->nelts; ++i)
+ {
+ svn_prop_inherited_item_t *prop_inherited_item
+ = APR_ARRAY_IDX(array, i, svn_prop_inherited_item_t *);
+ apr_hash_t *prop_hash = prop_inherited_item->prop_hash;
+ PyObject *py_key, *py_value;
+
+ py_key = PyString_FromString(prop_inherited_item->path_or_url);
+ if (py_key == NULL)
+ goto error;
+
+ py_value = svn_swig_py_prophash_to_dict(prop_hash);
+ if (py_value == NULL)
+ {
+ Py_DECREF(py_key);
+ goto error;
+ }
+
+ if (PyDict_SetItem(dict, py_key, py_value) == -1)
+ {
+ Py_DECREF(py_value);
+ Py_DECREF(py_key);
+ goto error;
+ }
+
+ Py_DECREF(py_value);
+ Py_DECREF(py_key);
+ }
+
+ return dict;
+
+ error:
+ Py_DECREF(dict);
+ return NULL;
+}
+
PyObject *svn_swig_py_proparray_to_dict(const apr_array_header_t *array)
{
PyObject *dict = PyDict_New();
@@ -743,7 +781,15 @@ PyObject *svn_swig_py_proparray_to_dict(const apr_array_header_t *array)
}
}
- PyDict_SetItem(dict, py_key, py_value);
+ if (PyDict_SetItem(dict, py_key, py_value) == -1)
+ {
+ Py_DECREF(py_key);
+ Py_DECREF(py_value);
+ goto error;
+ }
+
+ Py_DECREF(py_key);
+ Py_DECREF(py_value);
}
return dict;
@@ -786,6 +832,7 @@ PyObject *svn_swig_py_locationhash_to_dict(apr_hash_t *hash)
}
if (PyDict_SetItem(dict, key, value) == -1)
{
+ Py_DECREF(key);
Py_DECREF(value);
Py_DECREF(dict);
return NULL;
@@ -845,7 +892,11 @@ PyObject *svn_swig_py_c_strings_to_list(char **strings)
if (ob == NULL)
goto error;
if (PyList_Append(list, ob) == -1)
+ {
+ Py_DECREF(ob);
goto error;
+ }
+ Py_DECREF(ob);
}
return list;
@@ -959,7 +1010,7 @@ apr_hash_t *svn_swig_py_stringhash_from_dict(PyObject *dict,
Py_DECREF(keys);
return NULL;
}
- apr_hash_set(hash, propname, APR_HASH_KEY_STRING, propval);
+ svn_hash_sets(hash, propname, propval);
}
Py_DECREF(keys);
return hash;
@@ -988,7 +1039,7 @@ apr_hash_t *svn_swig_py_mergeinfo_from_dict(PyObject *dict,
PyObject *key = PyList_GetItem(keys, i);
PyObject *value = PyDict_GetItem(dict, key);
const char *pathname = make_string_from_ob(key, pool);
- const apr_array_header_t *ranges = svn_swig_py_seq_to_array(value,
+ const svn_rangelist_t *ranges = svn_swig_py_seq_to_array(value,
sizeof(const svn_merge_range_t *),
svn_swig_py_unwrap_struct_ptr,
svn_swig_TypeQuery("svn_merge_range_t *"),
@@ -1002,7 +1053,7 @@ apr_hash_t *svn_swig_py_mergeinfo_from_dict(PyObject *dict,
Py_DECREF(keys);
return NULL;
}
- apr_hash_set(hash, pathname, APR_HASH_KEY_STRING, ranges);
+ svn_hash_sets(hash, pathname, ranges);
}
Py_DECREF(keys);
return hash;
@@ -1079,7 +1130,7 @@ apr_hash_t *svn_swig_py_prophash_from_dict(PyObject *dict,
Py_DECREF(keys);
return NULL;
}
- apr_hash_set(hash, propname, APR_HASH_KEY_STRING, propval);
+ svn_hash_sets(hash, propname, propval);
}
Py_DECREF(keys);
return hash;
@@ -1132,7 +1183,7 @@ apr_hash_t *svn_swig_py_path_revs_hash_from_dict(PyObject *dict,
return NULL;
}
- apr_hash_set(hash, path, APR_HASH_KEY_STRING, revnum);
+ svn_hash_sets(hash, path, revnum);
}
Py_DECREF(keys);
return hash;
@@ -1181,7 +1232,7 @@ apr_hash_t *svn_swig_py_struct_ptr_hash_from_dict(PyObject *dict,
Py_DECREF(keys);
return NULL;
}
- apr_hash_set(hash, c_key, APR_HASH_KEY_STRING, struct_ptr);
+ svn_hash_sets(hash, c_key, struct_ptr);
}
Py_DECREF(keys);
return hash;
@@ -2159,6 +2210,24 @@ svn_swig_py_make_stream(PyObject *py_io, apr_pool_t *pool)
return stream;
}
+PyObject *
+svn_swig_py_convert_txdelta_op_c_array(int num_ops,
+ svn_txdelta_op_t *ops,
+ swig_type_info *op_type_info,
+ PyObject *parent_pool)
+{
+ PyObject *result = PyList_New(num_ops);
+ int i;
+
+ if (!result) return NULL;
+
+ for (i = 0; i < num_ops; ++i)
+ PyList_SET_ITEM(result, i,
+ svn_swig_NewPointerObj(ops + i, op_type_info,
+ parent_pool, NULL));
+
+ return result;
+}
void svn_swig_py_notify_func(void *baton,
const char *path,
@@ -2568,6 +2637,139 @@ svn_error_t *svn_swig_py_repos_history_func(void *baton,
return err;
}
+static svn_error_t *
+freeze_func(void *baton,
+ apr_pool_t *pool)
+{
+ PyObject *receiver = baton;
+ PyObject *py_pool;
+ PyObject *result;
+ svn_error_t *err = SVN_NO_ERROR;
+
+ if ((receiver == NULL) || (receiver == Py_None))
+ return SVN_NO_ERROR;
+
+ svn_swig_py_acquire_py_lock();
+
+ py_pool = make_ob_pool(pool);
+ if (py_pool == NULL)
+ {
+ err = callback_exception_error();
+ goto finished;
+ }
+
+ result = PyObject_CallFunction(receiver, (char *)"O", py_pool);
+ if (result == NULL)
+ {
+ err = callback_exception_error();
+ }
+ else
+ {
+ if (result != Py_None)
+ err = callback_bad_return_error("Not None");
+ Py_DECREF(result);
+ }
+
+ Py_DECREF(py_pool);
+
+finished:
+ svn_swig_py_release_py_lock();
+ return err;
+}
+
+svn_error_t *svn_swig_py_repos_freeze_func(void *baton,
+ apr_pool_t *pool)
+{
+ return freeze_func(baton, pool);
+}
+
+svn_error_t *svn_swig_py_fs_freeze_func(void *baton,
+ apr_pool_t *pool)
+{
+ return freeze_func(baton, pool);
+}
+
+svn_error_t *svn_swig_py_proplist_receiver2(void *baton,
+ const char *path,
+ apr_hash_t *prop_hash,
+ apr_array_header_t *inherited_props,
+ apr_pool_t *pool)
+{
+ PyObject *receiver = baton;
+ PyObject *py_pool;
+ PyObject *py_props;
+ PyObject *py_iprops;
+ PyObject *result;
+ svn_error_t *err = SVN_NO_ERROR;
+
+ if ((receiver == NULL) || (receiver == Py_None))
+ return SVN_NO_ERROR;
+
+ svn_swig_py_acquire_py_lock();
+
+ py_pool = make_ob_pool(pool);
+ if (py_pool == NULL)
+ {
+ err = callback_exception_error();
+ goto finished;
+ }
+
+ if (prop_hash)
+ {
+ py_props = svn_swig_py_prophash_to_dict(prop_hash);
+ if (py_props == NULL)
+ {
+ err = type_conversion_error("apr_hash_t *");
+ Py_DECREF(py_pool);
+ goto finished;
+ }
+ }
+ else
+ {
+ py_props = Py_None;
+ Py_INCREF(Py_None);
+ }
+
+ if (inherited_props)
+ {
+ py_iprops = svn_swig_py_propinheriteditemarray_to_dict(inherited_props);
+ if (py_iprops == NULL)
+ {
+ err = type_conversion_error("apr_array_header_t *");
+ Py_DECREF(py_props);
+ Py_DECREF(py_pool);
+ goto finished;
+ }
+ }
+ else
+ {
+ py_iprops = Py_None;
+ Py_INCREF(Py_None);
+ }
+
+ result = PyObject_CallFunction(receiver,
+ (char *)"sOOO",
+ path, py_props, py_iprops, py_pool);
+ if (result == NULL)
+ {
+ err = callback_exception_error();
+ }
+ else
+ {
+ if (result != Py_None)
+ err = callback_bad_return_error("Not None");
+ Py_DECREF(result);
+ }
+
+ Py_DECREF(py_props);
+ Py_DECREF(py_iprops);
+ Py_DECREF(py_pool);
+
+finished:
+ svn_swig_py_release_py_lock();
+ return err;
+}
+
svn_error_t *svn_swig_py_log_receiver(void *baton,
apr_hash_t *changed_paths,
@@ -2804,6 +3006,41 @@ svn_error_t *svn_swig_py_changelist_receiver_func(void *baton,
}
svn_error_t *
+svn_swig_py_auth_gnome_keyring_unlock_prompt_func(char **keyring_passwd,
+ const char *keyring_name,
+ void *baton,
+ apr_pool_t *pool)
+{
+ /* The baton is the actual prompt function passed from python */
+ PyObject *function = baton;
+ PyObject *result;
+ svn_error_t *err = SVN_NO_ERROR;
+ *keyring_passwd = NULL;
+
+ if ((function == NULL) || (function == Py_None))
+ return SVN_NO_ERROR;
+
+ svn_swig_py_acquire_py_lock();
+
+ if ((result = PyObject_CallFunction(function,
+ (char *)"sO&",
+ keyring_name,
+ make_ob_pool, pool)) == NULL)
+ {
+ err = callback_exception_error();
+ }
+ else
+ {
+ *keyring_passwd = make_string_from_ob(result, pool);
+ Py_DECREF(result);
+ }
+
+ svn_swig_py_release_py_lock();
+ return err;
+}
+
+
+svn_error_t *
svn_swig_py_auth_simple_prompt_func(svn_auth_cred_simple_t **cred,
void *baton,
const char *realm,
@@ -3060,6 +3297,64 @@ svn_swig_py_auth_ssl_client_cert_pw_prompt_func(
return err;
}
+svn_error_t *
+svn_swig_py_config_auth_walk_func(svn_boolean_t *delete_cred,
+ void *walk_baton,
+ const char *cred_kind,
+ const char *realmstring,
+ apr_hash_t *hash,
+ apr_pool_t *scratch_pool)
+{
+ PyObject *function = walk_baton;
+ PyObject *result;
+ PyObject *py_scratch_pool, *py_hash;
+ svn_error_t *err = SVN_NO_ERROR;
+
+ *delete_cred = FALSE;
+
+ if (function == NULL || function == Py_None)
+ return SVN_NO_ERROR;
+
+ svn_swig_py_acquire_py_lock();
+
+ py_scratch_pool = make_ob_pool(scratch_pool);
+ if (py_scratch_pool == NULL)
+ {
+ err = callback_exception_error();
+ goto finished;
+ }
+ py_hash = svn_swig_py_prophash_to_dict(hash);
+ if (py_hash == NULL)
+ {
+ Py_DECREF(py_scratch_pool);
+ err = callback_exception_error();
+ goto finished;
+ }
+
+ if ((result = PyObject_CallFunction(function, (char *)"ssOO",
+ cred_kind, realmstring,
+ py_hash, py_scratch_pool)) == NULL)
+ {
+ err = callback_exception_error();
+ }
+ else
+ {
+ if (PyInt_Check(result))
+ *delete_cred = PyInt_AsLong(result) ? TRUE : FALSE;
+ else if (PyLong_Check(result))
+ *delete_cred = PyLong_AsLong(result) ? TRUE : FALSE;
+ else
+ err = callback_bad_return_error("Not an integer");
+ Py_DECREF(result);
+ }
+ Py_DECREF(py_hash);
+ Py_DECREF(py_scratch_pool);
+
+finished:
+ svn_swig_py_release_py_lock();
+ return err;
+}
+
/* svn_ra_callbacks_t */
static svn_error_t *
ra_callbacks_open_tmp_file(apr_file_t **fp,
@@ -4139,18 +4434,98 @@ svn_swig_py_setup_wc_diff_callbacks2(void **baton,
return callbacks;
}
-PyObject *
-svn_swig_py_txdelta_window_t_ops_get(svn_txdelta_window_t *window,
- swig_type_info * op_type_info,
- PyObject *window_pool)
+svn_boolean_t
+svn_swig_py_config_enumerator2(const char *name,
+ const char *value,
+ void *baton,
+ apr_pool_t *pool)
{
- PyObject *result = PyList_New(window->num_ops);
- int i;
+ PyObject *function = baton;
+ PyObject *result;
+ svn_error_t *err = SVN_NO_ERROR;
+ svn_boolean_t c_result;
- for (i = 0; i < window->num_ops; ++i)
- PyList_SET_ITEM(result, i,
- svn_swig_NewPointerObj(window->ops + i, op_type_info,
- window_pool, NULL));
+ svn_swig_py_acquire_py_lock();
- return result;
+ if ((result = PyObject_CallFunction(function,
+ (char *)"ssO&",
+ name,
+ value,
+ make_ob_pool, pool)) == NULL)
+ {
+ err = callback_exception_error();
+ }
+ else if (!PyBool_Check(result))
+ {
+ err = callback_bad_return_error("Not bool");
+ Py_DECREF(result);
+ }
+
+ /* Any Python exception we might have pending must be cleared,
+ because the SWIG wrapper will not check for it, and return a value with
+ the exception still set. */
+ PyErr_Clear();
+
+ if (err)
+ {
+ /* We can't return the error, but let's at least stop enumeration. */
+ svn_error_clear(err);
+ c_result = FALSE;
+ }
+ else
+ {
+ c_result = result == Py_True;
+ Py_DECREF(result);
+ }
+
+ svn_swig_py_release_py_lock();
+
+ return c_result;
+}
+
+svn_boolean_t
+svn_swig_py_config_section_enumerator2(const char *name,
+ void *baton,
+ apr_pool_t *pool)
+{
+ PyObject *function = baton;
+ PyObject *result;
+ svn_error_t *err = SVN_NO_ERROR;
+ svn_boolean_t c_result;
+
+ svn_swig_py_acquire_py_lock();
+
+ if ((result = PyObject_CallFunction(function,
+ (char *)"sO&",
+ name,
+ make_ob_pool, pool)) == NULL)
+ {
+ err = callback_exception_error();
+ }
+ else if (!PyBool_Check(result))
+ {
+ err = callback_bad_return_error("Not bool");
+ Py_DECREF(result);
+ }
+
+ /* Any Python exception we might have pending must be cleared,
+ because the SWIG wrapper will not check for it, and return a value with
+ the exception still set. */
+ PyErr_Clear();
+
+ if (err)
+ {
+ /* We can't return the error, but let's at least stop enumeration. */
+ svn_error_clear(err);
+ c_result = FALSE;
+ }
+ else
+ {
+ c_result = result == Py_True;
+ Py_DECREF(result);
+ }
+
+ svn_swig_py_release_py_lock();
+
+ return c_result;
}
diff --git a/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h b/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h
index 3747f3a..60931c2 100644
--- a/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h
+++ b/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h
@@ -215,6 +215,13 @@ apr_array_header_t *svn_swig_py_proparray_from_dict(PyObject *dict,
SVN_SWIG_SWIGUTIL_EXPORT
PyObject *svn_swig_py_proparray_to_dict(const apr_array_header_t *array);
+/* helper function to convert a 'apr_array_header_t *' of
+ 'svn_prop_inherited_item_t' to a Python dictionary mapping strings
+ to dictionary. */
+SVN_SWIG_SWIGUTIL_EXPORT
+PyObject *
+svn_swig_py_propinheriteditemarray_to_dict(const apr_array_header_t *array);
+
/* helper function to convert a Python dictionary mapping strings to
strings into an apr_hash_t mapping const char *'s to svn_string_t's,
allocated in POOL. */
@@ -299,6 +306,15 @@ SVN_SWIG_SWIGUTIL_EXPORT
svn_stream_t *svn_swig_py_make_stream(PyObject *py_io,
apr_pool_t *pool);
+/* Convert ops, a C array of num_ops elements, to a Python list of SWIG
+ objects with descriptor op_type_info and pool set to parent_pool. */
+SVN_SWIG_SWIGUTIL_EXPORT
+PyObject *
+svn_swig_py_convert_txdelta_op_c_array(int num_ops,
+ svn_txdelta_op_t *ops,
+ swig_type_info * op_type_info,
+ PyObject *parent_pool);
+
/* a notify function that executes a Python function that is passed in
via the baton argument */
SVN_SWIG_SWIGUTIL_EXPORT
@@ -390,6 +406,24 @@ svn_error_t *svn_swig_py_log_entry_receiver(void *baton,
svn_log_entry_t *log_entry,
apr_pool_t *pool);
+/* thunked repos freeze function */
+SVN_SWIG_SWIGUTIL_EXPORT
+svn_error_t *svn_swig_py_repos_freeze_func(void *baton,
+ apr_pool_t *pool);
+
+/* thunked fs freeze function */
+SVN_SWIG_SWIGUTIL_EXPORT
+svn_error_t *svn_swig_py_fs_freeze_func(void *baton,
+ apr_pool_t *pool);
+
+/* thunked proplist receiver2 function */
+SVN_SWIG_SWIGUTIL_EXPORT
+svn_error_t *svn_swig_py_proplist_receiver2(void *baton,
+ const char *path,
+ apr_hash_t *prop_hash,
+ apr_array_header_t *inherited_props,
+ apr_pool_t *pool);
+
/* thunked info receiver function */
SVN_SWIG_SWIGUTIL_EXPORT
svn_error_t *svn_swig_py_info_receiver_func(void *py_receiver,
@@ -423,6 +457,13 @@ svn_error_t *svn_swig_py_changelist_receiver_func(void *baton,
/* auth provider callbacks */
SVN_SWIG_SWIGUTIL_EXPORT
+svn_error_t * svn_swig_py_auth_gnome_keyring_unlock_prompt_func(
+ char **keyring_passwd,
+ const char *keyring_name,
+ void *baton,
+ apr_pool_t *pool);
+
+SVN_SWIG_SWIGUTIL_EXPORT
svn_error_t *svn_swig_py_auth_simple_prompt_func(
svn_auth_cred_simple_t **cred,
void *baton,
@@ -465,6 +506,15 @@ svn_error_t *svn_swig_py_auth_ssl_client_cert_pw_prompt_func(
svn_boolean_t may_save,
apr_pool_t *pool);
+/* auth cleanup callback */
+SVN_SWIG_SWIGUTIL_EXPORT
+svn_error_t *svn_swig_py_config_auth_walk_func(svn_boolean_t *delete_cred,
+ void *walk_baton,
+ const char *cred_kind,
+ const char *realmstring,
+ apr_hash_t *hash,
+ apr_pool_t *scratch_pool);
+
SVN_SWIG_SWIGUTIL_EXPORT
void
svn_swig_py_setup_ra_callbacks(svn_ra_callbacks2_t **callbacks,
@@ -513,16 +563,18 @@ svn_error_t *svn_swig_py_ra_lock_callback(
SVN_SWIG_SWIGUTIL_EXPORT
extern const svn_ra_reporter2_t swig_py_ra_reporter2;
-/* Get a list of ops from a window. Used to replace the naive
- svn_txdelta_window_t.ops accessor. op_type_info is supposed to be
- the SWIG descriptor of "svn_txdelta_op_t *". window_pool is supposed
- to be the pool associated with the window proxy and used for wrapping
- the op objects. */
SVN_SWIG_SWIGUTIL_EXPORT
-PyObject *
-svn_swig_py_txdelta_window_t_ops_get(svn_txdelta_window_t *window,
- swig_type_info * op_type_info,
- PyObject *window_pool);
+svn_boolean_t
+svn_swig_py_config_enumerator2(const char *name,
+ const char *value,
+ void *baton,
+ apr_pool_t *pool);
+
+SVN_SWIG_SWIGUTIL_EXPORT
+svn_boolean_t
+svn_swig_py_config_section_enumerator2(const char *name,
+ void *baton,
+ apr_pool_t *pool);
#ifdef __cplusplus
}
diff --git a/subversion/bindings/swig/python/ra.py b/subversion/bindings/swig/python/ra.py
index 8c94b9a..d43ae5e 100644
--- a/subversion/bindings/swig/python/ra.py
+++ b/subversion/bindings/swig/python/ra.py
@@ -1,5 +1,5 @@
# This file was automatically generated by SWIG (http://www.swig.org).
-# Version 2.0.4
+# Version 2.0.9
#
# Do not make changes to this file unless you know what you are doing--modify
# the SWIG interface file instead.
@@ -84,11 +84,11 @@ def _assert_valid_deep(value):
if hasattr(value, "assert_valid"):
value.assert_valid()
-import core
-import delta
+import libsvn.core
+import libsvn.delta
def svn_ra_version():
- """svn_ra_version() -> svn_version_t"""
+ """svn_ra_version() -> svn_version_t const *"""
return _ra.svn_ra_version()
class svn_ra_reporter3_t:
"""Proxy of C svn_ra_reporter3_t struct"""
@@ -165,7 +165,7 @@ class svn_ra_reporter3_t:
return svn_ra_reporter3_invoke_abort_report(self, *args)
def __init__(self):
- """__init__(self) -> svn_ra_reporter3_t"""
+ """__init__(svn_ra_reporter3_t self) -> svn_ra_reporter3_t"""
this = _ra.new_svn_ra_reporter3_t()
try: self.this.append(this)
except: self.this = this
@@ -249,7 +249,7 @@ class svn_ra_reporter2_t:
return svn_ra_reporter2_invoke_abort_report(self, *args)
def __init__(self):
- """__init__(self) -> svn_ra_reporter2_t"""
+ """__init__(svn_ra_reporter2_t self) -> svn_ra_reporter2_t"""
this = _ra.new_svn_ra_reporter2_t()
try: self.this.append(this)
except: self.this = this
@@ -333,7 +333,7 @@ class svn_ra_reporter_t:
return svn_ra_reporter_invoke_abort_report(self, *args)
def __init__(self):
- """__init__(self) -> svn_ra_reporter_t"""
+ """__init__(svn_ra_reporter_t self) -> svn_ra_reporter_t"""
this = _ra.new_svn_ra_reporter_t()
try: self.this.append(this)
except: self.this = this
@@ -369,6 +369,8 @@ class svn_ra_callbacks2_t:
__swig_getmethods__["cancel_func"] = _ra.svn_ra_callbacks2_t_cancel_func_get
__swig_setmethods__["get_client_string"] = _ra.svn_ra_callbacks2_t_get_client_string_set
__swig_getmethods__["get_client_string"] = _ra.svn_ra_callbacks2_t_get_client_string_get
+ __swig_setmethods__["get_wc_contents"] = _ra.svn_ra_callbacks2_t_get_wc_contents_set
+ __swig_getmethods__["get_wc_contents"] = _ra.svn_ra_callbacks2_t_get_wc_contents_get
def set_parent_pool(self, parent_pool=None):
"""Create a new proxy object for svn_ra_callbacks2_t"""
import libsvn.core, weakref
@@ -415,7 +417,7 @@ class svn_ra_callbacks2_t:
return svn_ra_callbacks2_invoke_open_tmp_file(self, *args)
def __init__(self):
- """__init__(self) -> svn_ra_callbacks2_t"""
+ """__init__(svn_ra_callbacks2_t self) -> svn_ra_callbacks2_t"""
this = _ra.new_svn_ra_callbacks2_t()
try: self.this.append(this)
except: self.this = this
@@ -489,7 +491,7 @@ class svn_ra_callbacks_t:
return svn_ra_callbacks_invoke_open_tmp_file(self, *args)
def __init__(self):
- """__init__(self) -> svn_ra_callbacks_t"""
+ """__init__(svn_ra_callbacks_t self) -> svn_ra_callbacks_t"""
this = _ra.new_svn_ra_callbacks_t()
try: self.this.append(this)
except: self.this = this
@@ -509,367 +511,340 @@ def svn_ra_create_callbacks(*args):
def svn_ra_open4(*args):
"""
- svn_ra_open4(char repos_URL, char uuid, svn_ra_callbacks2_t callbacks,
- apr_hash_t config, apr_pool_t pool) -> svn_error_t
+ svn_ra_open4(char const * repos_URL, char const * uuid, svn_ra_callbacks2_t callbacks, apr_hash_t config,
+ apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_open4(*args)
def svn_ra_open3(*args):
"""
- svn_ra_open3(char repos_URL, char uuid, svn_ra_callbacks2_t callbacks,
- apr_hash_t config, apr_pool_t pool) -> svn_error_t
+ svn_ra_open3(char const * repos_URL, char const * uuid, svn_ra_callbacks2_t callbacks, apr_hash_t config,
+ apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_open3(*args)
def svn_ra_open2(*args):
- """
- svn_ra_open2(char repos_URL, svn_ra_callbacks2_t callbacks, apr_hash_t config,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_ra_open2(char const * repos_URL, svn_ra_callbacks2_t callbacks, apr_hash_t config, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_open2(*args)
def svn_ra_open(*args):
"""
- svn_ra_open(char repos_URL, svn_ra_callbacks_t callbacks, void callback_baton,
- apr_hash_t config, apr_pool_t pool) -> svn_error_t
+ svn_ra_open(char const * repos_URL, svn_ra_callbacks_t callbacks, void * callback_baton, apr_hash_t config,
+ apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_open(*args)
def svn_ra_reparent(*args):
- """svn_ra_reparent(svn_ra_session_t ra_session, char url, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_reparent(svn_ra_session_t * ra_session, char const * url, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_reparent(*args)
def svn_ra_get_session_url(*args):
- """svn_ra_get_session_url(svn_ra_session_t ra_session, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_get_session_url(svn_ra_session_t * ra_session, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_get_session_url(*args)
def svn_ra_get_path_relative_to_session(*args):
- """svn_ra_get_path_relative_to_session(svn_ra_session_t ra_session, char url, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_get_path_relative_to_session(svn_ra_session_t * ra_session, char const * url, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_get_path_relative_to_session(*args)
def svn_ra_get_path_relative_to_root(*args):
- """svn_ra_get_path_relative_to_root(svn_ra_session_t ra_session, char url, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_get_path_relative_to_root(svn_ra_session_t * ra_session, char const * url, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_get_path_relative_to_root(*args)
def svn_ra_get_latest_revnum(*args):
- """svn_ra_get_latest_revnum(svn_ra_session_t session, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_get_latest_revnum(svn_ra_session_t * session, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_get_latest_revnum(*args)
def svn_ra_get_dated_revision(*args):
- """svn_ra_get_dated_revision(svn_ra_session_t session, apr_time_t tm, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_get_dated_revision(svn_ra_session_t * session, apr_time_t tm, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_get_dated_revision(*args)
def svn_ra_change_rev_prop2(*args):
"""
- svn_ra_change_rev_prop2(svn_ra_session_t session, svn_revnum_t rev, char name,
- svn_string_t old_value_p, svn_string_t value,
- apr_pool_t pool) -> svn_error_t
+ svn_ra_change_rev_prop2(svn_ra_session_t * session, svn_revnum_t rev, char const * name, svn_string_t const *const * old_value_p,
+ svn_string_t const * value, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_change_rev_prop2(*args)
def svn_ra_change_rev_prop(*args):
"""
- svn_ra_change_rev_prop(svn_ra_session_t session, svn_revnum_t rev, char name,
- svn_string_t value, apr_pool_t pool) -> svn_error_t
+ svn_ra_change_rev_prop(svn_ra_session_t * session, svn_revnum_t rev, char const * name, svn_string_t const * value,
+ apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_change_rev_prop(*args)
def svn_ra_rev_proplist(*args):
- """svn_ra_rev_proplist(svn_ra_session_t session, svn_revnum_t rev, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_rev_proplist(svn_ra_session_t * session, svn_revnum_t rev, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_rev_proplist(*args)
def svn_ra_rev_prop(*args):
- """
- svn_ra_rev_prop(svn_ra_session_t session, svn_revnum_t rev, char name,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_ra_rev_prop(svn_ra_session_t * session, svn_revnum_t rev, char const * name, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_rev_prop(*args)
def svn_ra_get_commit_editor3(*args):
"""
- svn_ra_get_commit_editor3(svn_ra_session_t session, apr_hash_t revprop_table,
- svn_commit_callback2_t callback, apr_hash_t lock_tokens,
- svn_boolean_t keep_locks, apr_pool_t pool) -> svn_error_t
+ svn_ra_get_commit_editor3(svn_ra_session_t * session, apr_hash_t revprop_table, svn_commit_callback2_t commit_callback,
+ apr_hash_t lock_tokens, svn_boolean_t keep_locks, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_get_commit_editor3(*args)
def svn_ra_get_commit_editor2(*args):
"""
- svn_ra_get_commit_editor2(svn_ra_session_t session, char log_msg, svn_commit_callback2_t callback,
- apr_hash_t lock_tokens,
- svn_boolean_t keep_locks, apr_pool_t pool) -> svn_error_t
+ svn_ra_get_commit_editor2(svn_ra_session_t * session, char const * log_msg, svn_commit_callback2_t commit_callback,
+ apr_hash_t lock_tokens, svn_boolean_t keep_locks, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_get_commit_editor2(*args)
def svn_ra_get_commit_editor(*args):
"""
- svn_ra_get_commit_editor(svn_ra_session_t session, char log_msg, svn_commit_callback_t callback,
- apr_hash_t lock_tokens,
- svn_boolean_t keep_locks, apr_pool_t pool) -> svn_error_t
+ svn_ra_get_commit_editor(svn_ra_session_t * session, char const * log_msg, svn_commit_callback_t callback,
+ apr_hash_t lock_tokens, svn_boolean_t keep_locks, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_get_commit_editor(*args)
def svn_ra_get_file(*args):
"""
- svn_ra_get_file(svn_ra_session_t session, char path, svn_revnum_t revision,
- svn_stream_t stream, apr_pool_t pool) -> svn_error_t
+ svn_ra_get_file(svn_ra_session_t * session, char const * path, svn_revnum_t revision, svn_stream_t * stream,
+ apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_get_file(*args)
def svn_ra_get_dir2(*args):
"""
- svn_ra_get_dir2(svn_ra_session_t session, char path, svn_revnum_t revision,
- apr_uint32_t dirent_fields, apr_pool_t pool) -> svn_error_t
+ svn_ra_get_dir2(svn_ra_session_t * session, char const * path, svn_revnum_t revision, apr_uint32_t dirent_fields,
+ apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_get_dir2(*args)
def svn_ra_get_dir(*args):
- """
- svn_ra_get_dir(svn_ra_session_t session, char path, svn_revnum_t revision,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_ra_get_dir(svn_ra_session_t * session, char const * path, svn_revnum_t revision, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_get_dir(*args)
def svn_ra_get_mergeinfo(*args):
"""
- svn_ra_get_mergeinfo(svn_ra_session_t session, apr_array_header_t paths,
- svn_revnum_t revision, svn_mergeinfo_inheritance_t inherit,
- svn_boolean_t include_descendants,
- apr_pool_t pool) -> svn_error_t
+ svn_ra_get_mergeinfo(svn_ra_session_t * session, apr_array_header_t paths, svn_revnum_t revision, svn_mergeinfo_inheritance_t inherit,
+ svn_boolean_t include_descendants, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_get_mergeinfo(*args)
+def svn_ra_do_update3(*args):
+ """
+ svn_ra_do_update3(svn_ra_session_t * session, svn_revnum_t revision_to_update_to, char const * update_target,
+ svn_depth_t depth, svn_boolean_t send_copyfrom_args, svn_boolean_t ignore_ancestry,
+ svn_delta_editor_t update_editor, void * update_baton,
+ apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t
+ """
+ return _ra.svn_ra_do_update3(*args)
+
def svn_ra_do_update2(*args):
"""
- svn_ra_do_update2(svn_ra_session_t session, svn_revnum_t revision_to_update_to,
- char update_target, svn_depth_t depth,
- svn_boolean_t send_copyfrom_args, svn_delta_editor_t update_editor,
- void update_baton,
- apr_pool_t pool) -> svn_error_t
+ svn_ra_do_update2(svn_ra_session_t * session, svn_revnum_t revision_to_update_to, char const * update_target,
+ svn_depth_t depth, svn_boolean_t send_copyfrom_args, svn_delta_editor_t update_editor,
+ void * update_baton, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_do_update2(*args)
def svn_ra_do_update(*args):
"""
- svn_ra_do_update(svn_ra_session_t session, svn_revnum_t revision_to_update_to,
- char update_target, svn_boolean_t recurse,
- svn_delta_editor_t update_editor, void update_baton,
+ svn_ra_do_update(svn_ra_session_t * session, svn_revnum_t revision_to_update_to, char const * update_target,
+ svn_boolean_t recurse, svn_delta_editor_t update_editor, void * update_baton,
apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_do_update(*args)
+def svn_ra_do_switch3(*args):
+ """
+ svn_ra_do_switch3(svn_ra_session_t * session, svn_revnum_t revision_to_switch_to, char const * switch_target,
+ svn_depth_t depth, char const * switch_url, svn_boolean_t send_copyfrom_args,
+ svn_boolean_t ignore_ancestry, svn_delta_editor_t switch_editor,
+ void * switch_baton, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t
+ """
+ return _ra.svn_ra_do_switch3(*args)
+
def svn_ra_do_switch2(*args):
"""
- svn_ra_do_switch2(svn_ra_session_t session, svn_revnum_t revision_to_switch_to,
- char switch_target, svn_depth_t depth,
- char switch_url, svn_delta_editor_t switch_editor,
- void switch_baton, apr_pool_t pool) -> svn_error_t
+ svn_ra_do_switch2(svn_ra_session_t * session, svn_revnum_t revision_to_switch_to, char const * switch_target,
+ svn_depth_t depth, char const * switch_url, svn_delta_editor_t switch_editor,
+ void * switch_baton, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_do_switch2(*args)
def svn_ra_do_switch(*args):
"""
- svn_ra_do_switch(svn_ra_session_t session, svn_revnum_t revision_to_switch_to,
- char switch_target, svn_boolean_t recurse,
- char switch_url, svn_delta_editor_t switch_editor,
- void switch_baton, apr_pool_t pool) -> svn_error_t
+ svn_ra_do_switch(svn_ra_session_t * session, svn_revnum_t revision_to_switch_to, char const * switch_target,
+ svn_boolean_t recurse, char const * switch_url, svn_delta_editor_t switch_editor,
+ void * switch_baton, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_do_switch(*args)
def svn_ra_do_status2(*args):
"""
- svn_ra_do_status2(svn_ra_session_t session, char status_target, svn_revnum_t revision,
- svn_depth_t depth, svn_delta_editor_t status_editor,
- void status_baton,
- apr_pool_t pool) -> svn_error_t
+ svn_ra_do_status2(svn_ra_session_t * session, char const * status_target, svn_revnum_t revision, svn_depth_t depth,
+ svn_delta_editor_t status_editor, void * status_baton, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_do_status2(*args)
def svn_ra_do_status(*args):
"""
- svn_ra_do_status(svn_ra_session_t session, char status_target, svn_revnum_t revision,
- svn_boolean_t recurse, svn_delta_editor_t status_editor,
- void status_baton,
+ svn_ra_do_status(svn_ra_session_t * session, char const * status_target, svn_revnum_t revision, svn_boolean_t recurse,
+ svn_delta_editor_t status_editor, void * status_baton,
apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_do_status(*args)
def svn_ra_do_diff3(*args):
"""
- svn_ra_do_diff3(svn_ra_session_t session, svn_revnum_t revision, char diff_target,
- svn_depth_t depth, svn_boolean_t ignore_ancestry,
- svn_boolean_t text_deltas,
- char versus_url, svn_delta_editor_t diff_editor,
- void diff_baton, apr_pool_t pool) -> svn_error_t
+ svn_ra_do_diff3(svn_ra_session_t * session, svn_revnum_t revision, char const * diff_target, svn_depth_t depth,
+ svn_boolean_t ignore_ancestry, svn_boolean_t text_deltas, char const * versus_url,
+ svn_delta_editor_t diff_editor, void * diff_baton, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_do_diff3(*args)
def svn_ra_do_diff2(*args):
"""
- svn_ra_do_diff2(svn_ra_session_t session, svn_revnum_t revision, char diff_target,
- svn_boolean_t recurse, svn_boolean_t ignore_ancestry,
- svn_boolean_t text_deltas,
- char versus_url, svn_delta_editor_t diff_editor,
- void diff_baton, apr_pool_t pool) -> svn_error_t
+ svn_ra_do_diff2(svn_ra_session_t * session, svn_revnum_t revision, char const * diff_target, svn_boolean_t recurse,
+ svn_boolean_t ignore_ancestry, svn_boolean_t text_deltas,
+ char const * versus_url, svn_delta_editor_t diff_editor, void * diff_baton,
+ apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_do_diff2(*args)
def svn_ra_do_diff(*args):
"""
- svn_ra_do_diff(svn_ra_session_t session, svn_revnum_t revision, char diff_target,
- svn_boolean_t recurse, svn_boolean_t ignore_ancestry,
- char versus_url, svn_delta_editor_t diff_editor,
- void diff_baton,
- apr_pool_t pool) -> svn_error_t
+ svn_ra_do_diff(svn_ra_session_t * session, svn_revnum_t revision, char const * diff_target, svn_boolean_t recurse,
+ svn_boolean_t ignore_ancestry, char const * versus_url,
+ svn_delta_editor_t diff_editor, void * diff_baton, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_do_diff(*args)
def svn_ra_get_log2(*args):
"""
- svn_ra_get_log2(svn_ra_session_t session, apr_array_header_t paths,
- svn_revnum_t start, svn_revnum_t end, int limit,
- svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history,
- svn_boolean_t include_merged_revisions,
- apr_array_header_t revprops,
- svn_log_entry_receiver_t receiver,
- apr_pool_t pool) -> svn_error_t
+ svn_ra_get_log2(svn_ra_session_t * session, apr_array_header_t paths, svn_revnum_t start, svn_revnum_t end,
+ int limit, svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history,
+ svn_boolean_t include_merged_revisions, apr_array_header_t revprops,
+ svn_log_entry_receiver_t receiver, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_get_log2(*args)
def svn_ra_get_log(*args):
"""
- svn_ra_get_log(svn_ra_session_t session, apr_array_header_t paths,
- svn_revnum_t start, svn_revnum_t end, int limit,
- svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history,
- svn_log_message_receiver_t receiver,
- apr_pool_t pool) -> svn_error_t
+ svn_ra_get_log(svn_ra_session_t * session, apr_array_header_t paths, svn_revnum_t start, svn_revnum_t end,
+ int limit, svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history,
+ svn_log_message_receiver_t receiver, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_get_log(*args)
def svn_ra_check_path(*args):
- """
- svn_ra_check_path(svn_ra_session_t session, char path, svn_revnum_t revision,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_ra_check_path(svn_ra_session_t * session, char const * path, svn_revnum_t revision, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_check_path(*args)
def svn_ra_stat(*args):
- """
- svn_ra_stat(svn_ra_session_t session, char path, svn_revnum_t revision,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_ra_stat(svn_ra_session_t * session, char const * path, svn_revnum_t revision, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_stat(*args)
def svn_ra_get_uuid2(*args):
- """svn_ra_get_uuid2(svn_ra_session_t session, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_get_uuid2(svn_ra_session_t * session, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_get_uuid2(*args)
def svn_ra_get_uuid(*args):
- """svn_ra_get_uuid(svn_ra_session_t session, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_get_uuid(svn_ra_session_t * session, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_get_uuid(*args)
def svn_ra_get_repos_root2(*args):
- """svn_ra_get_repos_root2(svn_ra_session_t session, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_get_repos_root2(svn_ra_session_t * session, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_get_repos_root2(*args)
def svn_ra_get_repos_root(*args):
- """svn_ra_get_repos_root(svn_ra_session_t session, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_get_repos_root(svn_ra_session_t * session, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_get_repos_root(*args)
def svn_ra_get_locations(*args):
"""
- svn_ra_get_locations(svn_ra_session_t session, char path, svn_revnum_t peg_revision,
- apr_array_header_t location_revisions,
+ svn_ra_get_locations(svn_ra_session_t * session, char const * path, svn_revnum_t peg_revision, apr_array_header_t location_revisions,
apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_get_locations(*args)
def svn_ra_get_location_segments(*args):
"""
- svn_ra_get_location_segments(svn_ra_session_t session, char path, svn_revnum_t peg_revision,
- svn_revnum_t start_rev, svn_revnum_t end_rev,
- svn_location_segment_receiver_t receiver,
+ svn_ra_get_location_segments(svn_ra_session_t * session, char const * path, svn_revnum_t peg_revision, svn_revnum_t start_rev,
+ svn_revnum_t end_rev, svn_location_segment_receiver_t receiver,
apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_get_location_segments(*args)
def svn_ra_get_file_revs2(*args):
"""
- svn_ra_get_file_revs2(svn_ra_session_t session, char path, svn_revnum_t start,
- svn_revnum_t end, svn_boolean_t include_merged_revisions,
- svn_file_rev_handler_t handler,
- void handler_baton, apr_pool_t pool) -> svn_error_t
+ svn_ra_get_file_revs2(svn_ra_session_t * session, char const * path, svn_revnum_t start, svn_revnum_t end,
+ svn_boolean_t include_merged_revisions, svn_file_rev_handler_t handler,
+ void * handler_baton, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_get_file_revs2(*args)
def svn_ra_get_file_revs(*args):
"""
- svn_ra_get_file_revs(svn_ra_session_t session, char path, svn_revnum_t start,
- svn_revnum_t end, svn_ra_file_rev_handler_t handler,
- apr_pool_t pool) -> svn_error_t
+ svn_ra_get_file_revs(svn_ra_session_t * session, char const * path, svn_revnum_t start, svn_revnum_t end,
+ svn_ra_file_rev_handler_t handler, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_get_file_revs(*args)
def svn_ra_lock(*args):
"""
- svn_ra_lock(svn_ra_session_t session, apr_hash_t path_revs, char comment,
- svn_boolean_t steal_lock, svn_ra_lock_callback_t lock_func,
- apr_pool_t pool) -> svn_error_t
+ svn_ra_lock(svn_ra_session_t * session, apr_hash_t path_revs, char const * comment, svn_boolean_t steal_lock,
+ svn_ra_lock_callback_t lock_func, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_lock(*args)
def svn_ra_unlock(*args):
"""
- svn_ra_unlock(svn_ra_session_t session, apr_hash_t path_tokens, svn_boolean_t break_lock,
- svn_ra_lock_callback_t lock_func,
+ svn_ra_unlock(svn_ra_session_t * session, apr_hash_t path_tokens, svn_boolean_t break_lock, svn_ra_lock_callback_t lock_func,
apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_unlock(*args)
def svn_ra_get_lock(*args):
- """svn_ra_get_lock(svn_ra_session_t session, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_get_lock(svn_ra_session_t * session, char const * path, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_get_lock(*args)
def svn_ra_get_locks2(*args):
- """
- svn_ra_get_locks2(svn_ra_session_t session, char path, svn_depth_t depth,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_ra_get_locks2(svn_ra_session_t * session, char const * path, svn_depth_t depth, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_get_locks2(*args)
def svn_ra_get_locks(*args):
- """svn_ra_get_locks(svn_ra_session_t session, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_get_locks(svn_ra_session_t * session, char const * path, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_get_locks(*args)
def svn_ra_replay_range(*args):
"""
- svn_ra_replay_range(svn_ra_session_t session, svn_revnum_t start_revision,
- svn_revnum_t end_revision, svn_revnum_t low_water_mark,
- svn_boolean_t send_deltas, svn_ra_replay_revstart_callback_t revstart_func,
+ svn_ra_replay_range(svn_ra_session_t * session, svn_revnum_t start_revision, svn_revnum_t end_revision,
+ svn_revnum_t low_water_mark, svn_boolean_t send_deltas, svn_ra_replay_revstart_callback_t revstart_func,
svn_ra_replay_revfinish_callback_t revfinish_func,
- void replay_baton,
- apr_pool_t pool) -> svn_error_t
+ void * replay_baton, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_replay_range(*args)
def svn_ra_replay(*args):
"""
- svn_ra_replay(svn_ra_session_t session, svn_revnum_t revision, svn_revnum_t low_water_mark,
- svn_boolean_t send_deltas,
- svn_delta_editor_t editor, void edit_baton,
- apr_pool_t pool) -> svn_error_t
+ svn_ra_replay(svn_ra_session_t * session, svn_revnum_t revision, svn_revnum_t low_water_mark, svn_boolean_t send_deltas,
+ svn_delta_editor_t editor, void * edit_baton, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_replay(*args)
def svn_ra_get_deleted_rev(*args):
"""
- svn_ra_get_deleted_rev(svn_ra_session_t session, char path, svn_revnum_t peg_revision,
- svn_revnum_t end_revision, apr_pool_t pool) -> svn_error_t
+ svn_ra_get_deleted_rev(svn_ra_session_t * session, char const * path, svn_revnum_t peg_revision, svn_revnum_t end_revision,
+ apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_get_deleted_rev(*args)
+def svn_ra_get_inherited_props(*args):
+ """
+ svn_ra_get_inherited_props(svn_ra_session_t * session, char const * path, svn_revnum_t revision, apr_pool_t result_pool,
+ apr_pool_t scratch_pool) -> svn_error_t
+ """
+ return _ra.svn_ra_get_inherited_props(*args)
+
def svn_ra_has_capability(*args):
- """svn_ra_has_capability(svn_ra_session_t session, char capability, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_has_capability(svn_ra_session_t * session, char const * capability, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_has_capability(*args)
SVN_RA_CAPABILITY_DEPTH = _ra.SVN_RA_CAPABILITY_DEPTH
SVN_RA_CAPABILITY_MERGEINFO = _ra.SVN_RA_CAPABILITY_MERGEINFO
@@ -877,13 +852,16 @@ SVN_RA_CAPABILITY_LOG_REVPROPS = _ra.SVN_RA_CAPABILITY_LOG_REVPROPS
SVN_RA_CAPABILITY_PARTIAL_REPLAY = _ra.SVN_RA_CAPABILITY_PARTIAL_REPLAY
SVN_RA_CAPABILITY_COMMIT_REVPROPS = _ra.SVN_RA_CAPABILITY_COMMIT_REVPROPS
SVN_RA_CAPABILITY_ATOMIC_REVPROPS = _ra.SVN_RA_CAPABILITY_ATOMIC_REVPROPS
+SVN_RA_CAPABILITY_INHERITED_PROPS = _ra.SVN_RA_CAPABILITY_INHERITED_PROPS
+SVN_RA_CAPABILITY_EPHEMERAL_TXNPROPS = _ra.SVN_RA_CAPABILITY_EPHEMERAL_TXNPROPS
+SVN_RA_CAPABILITY_GET_FILE_REVS_REVERSE = _ra.SVN_RA_CAPABILITY_GET_FILE_REVS_REVERSE
def svn_ra_print_modules(*args):
- """svn_ra_print_modules(svn_stringbuf_t output, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_print_modules(svn_stringbuf_t * output, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_print_modules(*args)
def svn_ra_print_ra_libraries(*args):
- """svn_ra_print_ra_libraries(void ra_baton, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_print_ra_libraries(void * ra_baton, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_print_ra_libraries(*args)
class svn_ra_plugin_t:
"""Proxy of C svn_ra_plugin_t struct"""
@@ -1039,7 +1017,7 @@ class svn_ra_plugin_t:
return svn_ra_plugin_invoke_get_version(self, *args)
def __init__(self):
- """__init__(self) -> svn_ra_plugin_t"""
+ """__init__(svn_ra_plugin_t self) -> svn_ra_plugin_t"""
this = _ra.new_svn_ra_plugin_t()
try: self.this.append(this)
except: self.this = this
@@ -1055,7 +1033,7 @@ def svn_ra_init_ra_libs(*args):
return _ra.svn_ra_init_ra_libs(*args)
def svn_ra_get_ra_library(*args):
- """svn_ra_get_ra_library(void ra_baton, char url, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_get_ra_library(void * ra_baton, char const * url, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_get_ra_library(*args)
class svn_ra_session_t:
"""Proxy of C svn_ra_session_t struct"""
@@ -1113,333 +1091,297 @@ svn_ra_session_t_swigregister(svn_ra_session_t)
def svn_ra_reporter3_invoke_set_path(*args):
"""
- svn_ra_reporter3_invoke_set_path(svn_ra_reporter3_t _obj, void report_baton, char path,
- svn_revnum_t revision, svn_depth_t depth,
- svn_boolean_t start_empty, char lock_token,
+ svn_ra_reporter3_invoke_set_path(svn_ra_reporter3_t _obj, void * report_baton, char const * path, svn_revnum_t revision,
+ svn_depth_t depth, svn_boolean_t start_empty, char const * lock_token,
apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_reporter3_invoke_set_path(*args)
def svn_ra_reporter3_invoke_delete_path(*args):
- """
- svn_ra_reporter3_invoke_delete_path(svn_ra_reporter3_t _obj, void report_baton, char path,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_ra_reporter3_invoke_delete_path(svn_ra_reporter3_t _obj, void * report_baton, char const * path, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_reporter3_invoke_delete_path(*args)
def svn_ra_reporter3_invoke_link_path(*args):
"""
- svn_ra_reporter3_invoke_link_path(svn_ra_reporter3_t _obj, void report_baton, char path,
- char url, svn_revnum_t revision, svn_depth_t depth,
- svn_boolean_t start_empty, char lock_token,
+ svn_ra_reporter3_invoke_link_path(svn_ra_reporter3_t _obj, void * report_baton, char const * path, char const * url,
+ svn_revnum_t revision, svn_depth_t depth, svn_boolean_t start_empty, char const * lock_token,
apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_reporter3_invoke_link_path(*args)
def svn_ra_reporter3_invoke_finish_report(*args):
- """svn_ra_reporter3_invoke_finish_report(svn_ra_reporter3_t _obj, void report_baton, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_reporter3_invoke_finish_report(svn_ra_reporter3_t _obj, void * report_baton, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_reporter3_invoke_finish_report(*args)
def svn_ra_reporter3_invoke_abort_report(*args):
- """svn_ra_reporter3_invoke_abort_report(svn_ra_reporter3_t _obj, void report_baton, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_reporter3_invoke_abort_report(svn_ra_reporter3_t _obj, void * report_baton, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_reporter3_invoke_abort_report(*args)
def svn_ra_reporter2_invoke_set_path(*args):
"""
- svn_ra_reporter2_invoke_set_path(svn_ra_reporter2_t _obj, void report_baton, char path,
- svn_revnum_t revision, svn_boolean_t start_empty,
- char lock_token, apr_pool_t pool) -> svn_error_t
+ svn_ra_reporter2_invoke_set_path(svn_ra_reporter2_t _obj, void * report_baton, char const * path, svn_revnum_t revision,
+ svn_boolean_t start_empty, char const * lock_token, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_reporter2_invoke_set_path(*args)
def svn_ra_reporter2_invoke_delete_path(*args):
- """
- svn_ra_reporter2_invoke_delete_path(svn_ra_reporter2_t _obj, void report_baton, char path,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_ra_reporter2_invoke_delete_path(svn_ra_reporter2_t _obj, void * report_baton, char const * path, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_reporter2_invoke_delete_path(*args)
def svn_ra_reporter2_invoke_link_path(*args):
"""
- svn_ra_reporter2_invoke_link_path(svn_ra_reporter2_t _obj, void report_baton, char path,
- char url, svn_revnum_t revision, svn_boolean_t start_empty,
- char lock_token, apr_pool_t pool) -> svn_error_t
+ svn_ra_reporter2_invoke_link_path(svn_ra_reporter2_t _obj, void * report_baton, char const * path, char const * url,
+ svn_revnum_t revision, svn_boolean_t start_empty, char const * lock_token,
+ apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_reporter2_invoke_link_path(*args)
def svn_ra_reporter2_invoke_finish_report(*args):
- """svn_ra_reporter2_invoke_finish_report(svn_ra_reporter2_t _obj, void report_baton, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_reporter2_invoke_finish_report(svn_ra_reporter2_t _obj, void * report_baton, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_reporter2_invoke_finish_report(*args)
def svn_ra_reporter2_invoke_abort_report(*args):
- """svn_ra_reporter2_invoke_abort_report(svn_ra_reporter2_t _obj, void report_baton, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_reporter2_invoke_abort_report(svn_ra_reporter2_t _obj, void * report_baton, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_reporter2_invoke_abort_report(*args)
def svn_ra_reporter_invoke_set_path(*args):
"""
- svn_ra_reporter_invoke_set_path(svn_ra_reporter_t _obj, void report_baton, char path,
- svn_revnum_t revision, svn_boolean_t start_empty,
- apr_pool_t pool) -> svn_error_t
+ svn_ra_reporter_invoke_set_path(svn_ra_reporter_t _obj, void * report_baton, char const * path, svn_revnum_t revision,
+ svn_boolean_t start_empty, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_reporter_invoke_set_path(*args)
def svn_ra_reporter_invoke_delete_path(*args):
- """
- svn_ra_reporter_invoke_delete_path(svn_ra_reporter_t _obj, void report_baton, char path,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_ra_reporter_invoke_delete_path(svn_ra_reporter_t _obj, void * report_baton, char const * path, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_reporter_invoke_delete_path(*args)
def svn_ra_reporter_invoke_link_path(*args):
"""
- svn_ra_reporter_invoke_link_path(svn_ra_reporter_t _obj, void report_baton, char path,
- char url, svn_revnum_t revision, svn_boolean_t start_empty,
- apr_pool_t pool) -> svn_error_t
+ svn_ra_reporter_invoke_link_path(svn_ra_reporter_t _obj, void * report_baton, char const * path, char const * url,
+ svn_revnum_t revision, svn_boolean_t start_empty, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_reporter_invoke_link_path(*args)
def svn_ra_reporter_invoke_finish_report(*args):
- """svn_ra_reporter_invoke_finish_report(svn_ra_reporter_t _obj, void report_baton, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_reporter_invoke_finish_report(svn_ra_reporter_t _obj, void * report_baton, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_reporter_invoke_finish_report(*args)
def svn_ra_reporter_invoke_abort_report(*args):
- """svn_ra_reporter_invoke_abort_report(svn_ra_reporter_t _obj, void report_baton, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_reporter_invoke_abort_report(svn_ra_reporter_t _obj, void * report_baton, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_reporter_invoke_abort_report(*args)
def svn_ra_callbacks2_invoke_open_tmp_file(*args):
- """svn_ra_callbacks2_invoke_open_tmp_file(svn_ra_callbacks2_t _obj, void callback_baton, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_callbacks2_invoke_open_tmp_file(svn_ra_callbacks2_t _obj, void * callback_baton, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_callbacks2_invoke_open_tmp_file(*args)
def svn_ra_callbacks_invoke_open_tmp_file(*args):
- """svn_ra_callbacks_invoke_open_tmp_file(svn_ra_callbacks_t _obj, void callback_baton, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_callbacks_invoke_open_tmp_file(svn_ra_callbacks_t _obj, void * callback_baton, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_callbacks_invoke_open_tmp_file(*args)
def svn_ra_plugin_invoke_open(*args):
"""
- svn_ra_plugin_invoke_open(svn_ra_plugin_t _obj, char repos_URL, svn_ra_callbacks_t callbacks,
- void callback_baton, apr_hash_t config,
- apr_pool_t pool) -> svn_error_t
+ svn_ra_plugin_invoke_open(svn_ra_plugin_t _obj, char const * repos_URL, svn_ra_callbacks_t callbacks, void * callback_baton,
+ apr_hash_t config, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_plugin_invoke_open(*args)
def svn_ra_plugin_invoke_get_latest_revnum(*args):
- """svn_ra_plugin_invoke_get_latest_revnum(svn_ra_plugin_t _obj, void session_baton, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_plugin_invoke_get_latest_revnum(svn_ra_plugin_t _obj, void * session_baton, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_plugin_invoke_get_latest_revnum(*args)
def svn_ra_plugin_invoke_get_dated_revision(*args):
- """
- svn_ra_plugin_invoke_get_dated_revision(svn_ra_plugin_t _obj, void session_baton, apr_time_t tm,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_ra_plugin_invoke_get_dated_revision(svn_ra_plugin_t _obj, void * session_baton, apr_time_t tm, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_plugin_invoke_get_dated_revision(*args)
def svn_ra_plugin_invoke_change_rev_prop(*args):
"""
- svn_ra_plugin_invoke_change_rev_prop(svn_ra_plugin_t _obj, void session_baton, svn_revnum_t rev,
- char name, svn_string_t value, apr_pool_t pool) -> svn_error_t
+ svn_ra_plugin_invoke_change_rev_prop(svn_ra_plugin_t _obj, void * session_baton, svn_revnum_t rev, char const * name,
+ svn_string_t const * value, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_plugin_invoke_change_rev_prop(*args)
def svn_ra_plugin_invoke_rev_proplist(*args):
- """
- svn_ra_plugin_invoke_rev_proplist(svn_ra_plugin_t _obj, void session_baton, svn_revnum_t rev,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_ra_plugin_invoke_rev_proplist(svn_ra_plugin_t _obj, void * session_baton, svn_revnum_t rev, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_plugin_invoke_rev_proplist(*args)
def svn_ra_plugin_invoke_rev_prop(*args):
"""
- svn_ra_plugin_invoke_rev_prop(svn_ra_plugin_t _obj, void session_baton, svn_revnum_t rev,
- char name, apr_pool_t pool) -> svn_error_t
+ svn_ra_plugin_invoke_rev_prop(svn_ra_plugin_t _obj, void * session_baton, svn_revnum_t rev, char const * name,
+ apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_plugin_invoke_rev_prop(*args)
def svn_ra_plugin_invoke_get_commit_editor(*args):
"""
- svn_ra_plugin_invoke_get_commit_editor(svn_ra_plugin_t _obj, void session_baton, char log_msg,
- svn_commit_callback_t callback, apr_pool_t pool) -> svn_error_t
+ svn_ra_plugin_invoke_get_commit_editor(svn_ra_plugin_t _obj, void * session_baton, char const * log_msg, svn_commit_callback_t callback,
+ apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_plugin_invoke_get_commit_editor(*args)
def svn_ra_plugin_invoke_get_file(*args):
"""
- svn_ra_plugin_invoke_get_file(svn_ra_plugin_t _obj, void session_baton, char path,
- svn_revnum_t revision, svn_stream_t stream,
- apr_pool_t pool) -> svn_error_t
+ svn_ra_plugin_invoke_get_file(svn_ra_plugin_t _obj, void * session_baton, char const * path, svn_revnum_t revision,
+ svn_stream_t * stream, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_plugin_invoke_get_file(*args)
def svn_ra_plugin_invoke_get_dir(*args):
"""
- svn_ra_plugin_invoke_get_dir(svn_ra_plugin_t _obj, void session_baton, char path,
- svn_revnum_t revision, apr_pool_t pool) -> svn_error_t
+ svn_ra_plugin_invoke_get_dir(svn_ra_plugin_t _obj, void * session_baton, char const * path, svn_revnum_t revision,
+ apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_plugin_invoke_get_dir(*args)
def svn_ra_plugin_invoke_do_update(*args):
"""
- svn_ra_plugin_invoke_do_update(svn_ra_plugin_t _obj, void session_baton, svn_revnum_t revision_to_update_to,
- char update_target,
+ svn_ra_plugin_invoke_do_update(svn_ra_plugin_t _obj, void * session_baton, svn_revnum_t revision_to_update_to, char const * update_target,
svn_boolean_t recurse, svn_delta_editor_t update_editor,
- void update_baton, apr_pool_t pool) -> svn_error_t
+ void * update_baton, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_plugin_invoke_do_update(*args)
def svn_ra_plugin_invoke_do_switch(*args):
"""
- svn_ra_plugin_invoke_do_switch(svn_ra_plugin_t _obj, void session_baton, svn_revnum_t revision_to_switch_to,
- char switch_target,
- svn_boolean_t recurse, char switch_url, svn_delta_editor_t switch_editor,
- void switch_baton,
- apr_pool_t pool) -> svn_error_t
+ svn_ra_plugin_invoke_do_switch(svn_ra_plugin_t _obj, void * session_baton, svn_revnum_t revision_to_switch_to, char const * switch_target,
+ svn_boolean_t recurse, char const * switch_url,
+ svn_delta_editor_t switch_editor, void * switch_baton, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_plugin_invoke_do_switch(*args)
def svn_ra_plugin_invoke_do_status(*args):
"""
- svn_ra_plugin_invoke_do_status(svn_ra_plugin_t _obj, void session_baton, char status_target,
- svn_revnum_t revision, svn_boolean_t recurse,
- svn_delta_editor_t status_editor,
- void status_baton, apr_pool_t pool) -> svn_error_t
+ svn_ra_plugin_invoke_do_status(svn_ra_plugin_t _obj, void * session_baton, char const * status_target, svn_revnum_t revision,
+ svn_boolean_t recurse, svn_delta_editor_t status_editor, void * status_baton,
+ apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_plugin_invoke_do_status(*args)
def svn_ra_plugin_invoke_do_diff(*args):
"""
- svn_ra_plugin_invoke_do_diff(svn_ra_plugin_t _obj, void session_baton, svn_revnum_t revision,
- char diff_target, svn_boolean_t recurse,
- svn_boolean_t ignore_ancestry, char versus_url,
- svn_delta_editor_t diff_editor,
- void diff_baton, apr_pool_t pool) -> svn_error_t
+ svn_ra_plugin_invoke_do_diff(svn_ra_plugin_t _obj, void * session_baton, svn_revnum_t revision, char const * diff_target,
+ svn_boolean_t recurse, svn_boolean_t ignore_ancestry, char const * versus_url,
+ svn_delta_editor_t diff_editor, void * diff_baton, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_plugin_invoke_do_diff(*args)
def svn_ra_plugin_invoke_get_log(*args):
"""
- svn_ra_plugin_invoke_get_log(svn_ra_plugin_t _obj, void session_baton, apr_array_header_t paths,
- svn_revnum_t start, svn_revnum_t end,
- svn_boolean_t discover_changed_paths,
- svn_boolean_t strict_node_history, svn_log_message_receiver_t receiver,
- apr_pool_t pool) -> svn_error_t
+ svn_ra_plugin_invoke_get_log(svn_ra_plugin_t _obj, void * session_baton, apr_array_header_t paths, svn_revnum_t start,
+ svn_revnum_t end, svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history,
+ svn_log_message_receiver_t receiver, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_plugin_invoke_get_log(*args)
def svn_ra_plugin_invoke_check_path(*args):
"""
- svn_ra_plugin_invoke_check_path(svn_ra_plugin_t _obj, void session_baton, char path,
- svn_revnum_t revision, apr_pool_t pool) -> svn_error_t
+ svn_ra_plugin_invoke_check_path(svn_ra_plugin_t _obj, void * session_baton, char const * path, svn_revnum_t revision,
+ apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_plugin_invoke_check_path(*args)
def svn_ra_plugin_invoke_get_uuid(*args):
- """svn_ra_plugin_invoke_get_uuid(svn_ra_plugin_t _obj, void session_baton, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_plugin_invoke_get_uuid(svn_ra_plugin_t _obj, void * session_baton, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_plugin_invoke_get_uuid(*args)
def svn_ra_plugin_invoke_get_repos_root(*args):
- """svn_ra_plugin_invoke_get_repos_root(svn_ra_plugin_t _obj, void session_baton, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_plugin_invoke_get_repos_root(svn_ra_plugin_t _obj, void * session_baton, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_plugin_invoke_get_repos_root(*args)
def svn_ra_plugin_invoke_get_locations(*args):
"""
- svn_ra_plugin_invoke_get_locations(svn_ra_plugin_t _obj, void session_baton, char path,
- svn_revnum_t peg_revision, apr_array_header_t location_revisions,
- apr_pool_t pool) -> svn_error_t
+ svn_ra_plugin_invoke_get_locations(svn_ra_plugin_t _obj, void * session_baton, char const * path, svn_revnum_t peg_revision,
+ apr_array_header_t location_revisions, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_plugin_invoke_get_locations(*args)
def svn_ra_plugin_invoke_get_file_revs(*args):
"""
- svn_ra_plugin_invoke_get_file_revs(svn_ra_plugin_t _obj, void session_baton, char path,
- svn_revnum_t start, svn_revnum_t end, svn_ra_file_rev_handler_t handler,
- apr_pool_t pool) -> svn_error_t
+ svn_ra_plugin_invoke_get_file_revs(svn_ra_plugin_t _obj, void * session_baton, char const * path, svn_revnum_t start,
+ svn_revnum_t end, svn_ra_file_rev_handler_t handler, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_plugin_invoke_get_file_revs(*args)
def svn_ra_plugin_invoke_get_version(*args):
- """svn_ra_plugin_invoke_get_version(svn_ra_plugin_t _obj) -> svn_version_t"""
+ """svn_ra_plugin_invoke_get_version(svn_ra_plugin_t _obj) -> svn_version_t const *"""
return _ra.svn_ra_plugin_invoke_get_version(*args)
def svn_ra_invoke_get_wc_prop_func(*args):
"""
- svn_ra_invoke_get_wc_prop_func(svn_ra_get_wc_prop_func_t _obj, void baton, char path,
- char name, apr_pool_t pool) -> svn_error_t
+ svn_ra_invoke_get_wc_prop_func(svn_ra_get_wc_prop_func_t _obj, void * baton, char const * path, char const * name,
+ apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_invoke_get_wc_prop_func(*args)
def svn_ra_invoke_set_wc_prop_func(*args):
"""
- svn_ra_invoke_set_wc_prop_func(svn_ra_set_wc_prop_func_t _obj, void baton, char path,
- char name, svn_string_t value, apr_pool_t pool) -> svn_error_t
+ svn_ra_invoke_set_wc_prop_func(svn_ra_set_wc_prop_func_t _obj, void * baton, char const * path, char const * name,
+ svn_string_t const * value, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_invoke_set_wc_prop_func(*args)
def svn_ra_invoke_push_wc_prop_func(*args):
"""
- svn_ra_invoke_push_wc_prop_func(svn_ra_push_wc_prop_func_t _obj, void baton, char path,
- char name, svn_string_t value, apr_pool_t pool) -> svn_error_t
+ svn_ra_invoke_push_wc_prop_func(svn_ra_push_wc_prop_func_t _obj, void * baton, char const * path, char const * name,
+ svn_string_t const * value, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_invoke_push_wc_prop_func(*args)
def svn_ra_invoke_invalidate_wc_props_func(*args):
"""
- svn_ra_invoke_invalidate_wc_props_func(svn_ra_invalidate_wc_props_func_t _obj, void baton,
- char path, char name, apr_pool_t pool) -> svn_error_t
+ svn_ra_invoke_invalidate_wc_props_func(svn_ra_invalidate_wc_props_func_t _obj, void * baton, char const * path, char const * name,
+ apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_invoke_invalidate_wc_props_func(*args)
+def svn_ra_invoke_get_wc_contents_func(*args):
+ """svn_ra_invoke_get_wc_contents_func(svn_ra_get_wc_contents_func_t _obj, void * baton, svn_checksum_t checksum, apr_pool_t pool) -> svn_error_t"""
+ return _ra.svn_ra_invoke_get_wc_contents_func(*args)
+
def svn_ra_invoke_get_latest_revnum_func(*args):
- """svn_ra_invoke_get_latest_revnum_func(svn_ra_get_latest_revnum_func_t _obj, void session_baton) -> svn_error_t"""
+ """svn_ra_invoke_get_latest_revnum_func(svn_ra_get_latest_revnum_func_t _obj, void * session_baton) -> svn_error_t"""
return _ra.svn_ra_invoke_get_latest_revnum_func(*args)
def svn_ra_invoke_get_client_string_func(*args):
- """svn_ra_invoke_get_client_string_func(svn_ra_get_client_string_func_t _obj, void baton, apr_pool_t pool) -> svn_error_t"""
+ """svn_ra_invoke_get_client_string_func(svn_ra_get_client_string_func_t _obj, void * baton, apr_pool_t pool) -> svn_error_t"""
return _ra.svn_ra_invoke_get_client_string_func(*args)
def svn_ra_invoke_file_rev_handler(*args):
"""
- svn_ra_invoke_file_rev_handler(svn_ra_file_rev_handler_t _obj, void baton, char path,
- svn_revnum_t rev, apr_hash_t rev_props, apr_array_header_t prop_diffs,
- apr_pool_t pool) -> svn_error_t
+ svn_ra_invoke_file_rev_handler(svn_ra_file_rev_handler_t _obj, void * baton, char const * path, svn_revnum_t rev,
+ apr_hash_t rev_props, apr_array_header_t prop_diffs, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_invoke_file_rev_handler(*args)
def svn_ra_invoke_lock_callback(*args):
"""
- svn_ra_invoke_lock_callback(svn_ra_lock_callback_t _obj, void baton, char path,
- svn_boolean_t do_lock, svn_lock_t lock, svn_error_t ra_err,
- apr_pool_t pool) -> svn_error_t
+ svn_ra_invoke_lock_callback(svn_ra_lock_callback_t _obj, void * baton, char const * path, svn_boolean_t do_lock,
+ svn_lock_t lock, svn_error_t ra_err, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_invoke_lock_callback(*args)
def svn_ra_invoke_progress_notify_func(*args):
"""
- svn_ra_invoke_progress_notify_func(svn_ra_progress_notify_func_t _obj, apr_off_t progress,
- apr_off_t total, void baton, apr_pool_t pool)
+ svn_ra_invoke_progress_notify_func(svn_ra_progress_notify_func_t _obj, apr_off_t progress, apr_off_t total, void * baton,
+ apr_pool_t pool)
"""
return _ra.svn_ra_invoke_progress_notify_func(*args)
def svn_ra_invoke_replay_revstart_callback(*args):
"""
- svn_ra_invoke_replay_revstart_callback(svn_ra_replay_revstart_callback_t _obj, svn_revnum_t revision,
- void replay_baton, apr_hash_t rev_props,
- apr_pool_t pool) -> svn_error_t
+ svn_ra_invoke_replay_revstart_callback(svn_ra_replay_revstart_callback_t _obj, svn_revnum_t revision, void * replay_baton,
+ apr_hash_t rev_props, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_invoke_replay_revstart_callback(*args)
def svn_ra_invoke_replay_revfinish_callback(*args):
"""
- svn_ra_invoke_replay_revfinish_callback(svn_ra_replay_revfinish_callback_t _obj, svn_revnum_t revision,
- void replay_baton, svn_delta_editor_t editor,
- void edit_baton, apr_hash_t rev_props,
- apr_pool_t pool) -> svn_error_t
+ svn_ra_invoke_replay_revfinish_callback(svn_ra_replay_revfinish_callback_t _obj, svn_revnum_t revision, void * replay_baton,
+ svn_delta_editor_t editor, void * edit_baton, apr_hash_t rev_props, apr_pool_t pool) -> svn_error_t
"""
return _ra.svn_ra_invoke_replay_revfinish_callback(*args)
def svn_ra_invoke_init_func(*args):
- """
- svn_ra_invoke_init_func(svn_ra_init_func_t _obj, int abi_version, apr_pool_t pool,
- apr_hash_t hash) -> svn_error_t
- """
+ """svn_ra_invoke_init_func(svn_ra_init_func_t _obj, int abi_version, apr_pool_t pool, apr_hash_t hash) -> svn_error_t"""
return _ra.svn_ra_invoke_init_func(*args)
class svn_ra_get_wc_prop_func_t:
"""Proxy of C svn_ra_get_wc_prop_func_t struct"""
@@ -1665,6 +1607,62 @@ class svn_ra_invalidate_wc_props_func_t:
svn_ra_invalidate_wc_props_func_t_swigregister = _ra.svn_ra_invalidate_wc_props_func_t_swigregister
svn_ra_invalidate_wc_props_func_t_swigregister(svn_ra_invalidate_wc_props_func_t)
+class svn_ra_get_wc_contents_func_t:
+ """Proxy of C svn_ra_get_wc_contents_func_t struct"""
+ __swig_setmethods__ = {}
+ __setattr__ = lambda self, name, value: _swig_setattr(self, svn_ra_get_wc_contents_func_t, name, value)
+ __swig_getmethods__ = {}
+ __getattr__ = lambda self, name: _swig_getattr(self, svn_ra_get_wc_contents_func_t, name)
+ def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+ __repr__ = _swig_repr
+ def set_parent_pool(self, parent_pool=None):
+ """Create a new proxy object for svn_ra_get_wc_contents_func_t"""
+ import libsvn.core, weakref
+ self.__dict__["_parent_pool"] = \
+ parent_pool or libsvn.core.application_pool;
+ if self.__dict__["_parent_pool"]:
+ self.__dict__["_is_valid"] = weakref.ref(
+ self.__dict__["_parent_pool"]._is_valid)
+
+ def assert_valid(self):
+ """Assert that this object is using valid pool memory"""
+ if "_is_valid" in self.__dict__:
+ assert self.__dict__["_is_valid"](), "Variable has already been deleted"
+
+ def __getattr__(self, name):
+ """Get an attribute from this object"""
+ self.assert_valid()
+
+ value = _swig_getattr(self, self.__class__, name)
+
+
+
+ members = self.__dict__.get("_members")
+ if members is not None:
+ _copy_metadata_deep(value, members.get(name))
+
+
+ _assert_valid_deep(value)
+
+ return value
+
+ def __setattr__(self, name, value):
+ """Set an attribute on this object"""
+ self.assert_valid()
+
+
+
+
+ self.__dict__.setdefault("_members",{})[name] = value
+
+ return _swig_setattr(self, self.__class__, name, value)
+
+ def __call__(self, *args):
+ return svn_ra_invoke_get_wc_contents_func(self, *args)
+
+svn_ra_get_wc_contents_func_t_swigregister = _ra.svn_ra_get_wc_contents_func_t_swigregister
+svn_ra_get_wc_contents_func_t_swigregister(svn_ra_get_wc_contents_func_t)
+
class svn_ra_get_latest_revnum_func_t:
"""Proxy of C svn_ra_get_latest_revnum_func_t struct"""
__swig_setmethods__ = {}
diff --git a/subversion/bindings/swig/python/repos.py b/subversion/bindings/swig/python/repos.py
index 3f75f81..aa9a5c5 100644
--- a/subversion/bindings/swig/python/repos.py
+++ b/subversion/bindings/swig/python/repos.py
@@ -1,5 +1,5 @@
# This file was automatically generated by SWIG (http://www.swig.org).
-# Version 2.0.4
+# Version 2.0.9
#
# Do not make changes to this file unless you know what you are doing--modify
# the SWIG interface file instead.
@@ -84,12 +84,12 @@ def _assert_valid_deep(value):
if hasattr(value, "assert_valid"):
value.assert_valid()
-import core
-import delta
-import fs
+import libsvn.core
+import libsvn.delta
+import libsvn.fs
def svn_repos_version():
- """svn_repos_version() -> svn_version_t"""
+ """svn_repos_version() -> svn_version_t const *"""
return _repos.svn_repos_version()
svn_node_action_change = _repos.svn_node_action_change
svn_node_action_add = _repos.svn_node_action_add
@@ -120,6 +120,8 @@ svn_repos_notify_load_normalized_mergeinfo = _repos.svn_repos_notify_load_normal
svn_repos_notify_mutex_acquired = _repos.svn_repos_notify_mutex_acquired
svn_repos_notify_recover_start = _repos.svn_repos_notify_recover_start
svn_repos_notify_upgrade_start = _repos.svn_repos_notify_upgrade_start
+svn_repos_notify_load_skipped_rev = _repos.svn_repos_notify_load_skipped_rev
+svn_repos_notify_verify_rev_structure = _repos.svn_repos_notify_verify_rev_structure
svn_repos_notify_warning_found_old_reference = _repos.svn_repos_notify_warning_found_old_reference
svn_repos_notify_warning_found_old_mergeinfo = _repos.svn_repos_notify_warning_found_old_mergeinfo
svn_repos_notify_warning_invalid_fspath = _repos.svn_repos_notify_warning_invalid_fspath
@@ -200,442 +202,421 @@ def svn_repos_notify_create(*args):
return _repos.svn_repos_notify_create(*args)
def svn_repos_find_root_path(*args):
- """svn_repos_find_root_path(char path, apr_pool_t pool) -> char"""
+ """svn_repos_find_root_path(char const * path, apr_pool_t pool) -> char const *"""
return _repos.svn_repos_find_root_path(*args)
def svn_repos_open2(*args):
- """svn_repos_open2(char path, apr_hash_t fs_config, apr_pool_t pool) -> svn_error_t"""
+ """svn_repos_open2(char const * path, apr_hash_t fs_config, apr_pool_t pool) -> svn_error_t"""
return _repos.svn_repos_open2(*args)
def svn_repos_open(*args):
- """svn_repos_open(char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_repos_open(char const * path, apr_pool_t pool) -> svn_error_t"""
return _repos.svn_repos_open(*args)
def svn_repos_create(*args):
"""
- svn_repos_create(char path, char unused_1, char unused_2, apr_hash_t config,
+ svn_repos_create(char const * path, char const * unused_1, char const * unused_2, apr_hash_t config,
apr_hash_t fs_config, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_create(*args)
def svn_repos_upgrade2(*args):
"""
- svn_repos_upgrade2(char path, svn_boolean_t nonblocking, svn_repos_notify_func_t notify_func,
- void notify_baton, apr_pool_t pool) -> svn_error_t
+ svn_repos_upgrade2(char const * path, svn_boolean_t nonblocking, svn_repos_notify_func_t notify_func,
+ void * notify_baton, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_upgrade2(*args)
def svn_repos_upgrade(*args):
"""
- svn_repos_upgrade(char path, svn_boolean_t nonblocking, svn_error_t start_callback,
- void start_callback_baton, apr_pool_t pool) -> svn_error_t
+ svn_repos_upgrade(char const * path, svn_boolean_t nonblocking, svn_error_t *(*)(void *) start_callback,
+ void * start_callback_baton, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_upgrade(*args)
def svn_repos_delete(*args):
- """svn_repos_delete(char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_repos_delete(char const * path, apr_pool_t pool) -> svn_error_t"""
return _repos.svn_repos_delete(*args)
def svn_repos_has_capability(*args):
- """svn_repos_has_capability(svn_repos_t repos, char capability, apr_pool_t pool) -> svn_error_t"""
+ """svn_repos_has_capability(svn_repos_t * repos, char const * capability, apr_pool_t pool) -> svn_error_t"""
return _repos.svn_repos_has_capability(*args)
SVN_REPOS_CAPABILITY_MERGEINFO = _repos.SVN_REPOS_CAPABILITY_MERGEINFO
def svn_repos_fs(*args):
- """svn_repos_fs(svn_repos_t repos) -> svn_fs_t"""
+ """svn_repos_fs(svn_repos_t * repos) -> svn_fs_t *"""
return _repos.svn_repos_fs(*args)
-def svn_repos_hotcopy(*args):
+def svn_repos_hotcopy2(*args):
"""
- svn_repos_hotcopy(char src_path, char dst_path, svn_boolean_t clean_logs,
- apr_pool_t pool) -> svn_error_t
+ svn_repos_hotcopy2(char const * src_path, char const * dst_path, svn_boolean_t clean_logs, svn_boolean_t incremental,
+ svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
"""
+ return _repos.svn_repos_hotcopy2(*args)
+
+def svn_repos_hotcopy(*args):
+ """svn_repos_hotcopy(char const * src_path, char const * dst_path, svn_boolean_t clean_logs, apr_pool_t pool) -> svn_error_t"""
return _repos.svn_repos_hotcopy(*args)
def svn_repos_fs_pack2(*args):
"""
- svn_repos_fs_pack2(svn_repos_t repos, svn_repos_notify_func_t notify_func,
- void notify_baton, svn_cancel_func_t cancel_func,
+ svn_repos_fs_pack2(svn_repos_t * repos, svn_repos_notify_func_t notify_func, void * notify_baton, svn_cancel_func_t cancel_func,
apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_fs_pack2(*args)
def svn_repos_fs_pack(*args):
"""
- svn_repos_fs_pack(svn_repos_t repos, svn_fs_pack_notify_t notify_func,
- void notify_baton, svn_cancel_func_t cancel_func,
+ svn_repos_fs_pack(svn_repos_t * repos, svn_fs_pack_notify_t notify_func, void * notify_baton, svn_cancel_func_t cancel_func,
apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_fs_pack(*args)
def svn_repos_recover4(*args):
"""
- svn_repos_recover4(char path, svn_boolean_t nonblocking, svn_repos_notify_func_t notify_func,
- void notify_baton, svn_cancel_func_t cancel_func,
- apr_pool_t pool) -> svn_error_t
+ svn_repos_recover4(char const * path, svn_boolean_t nonblocking, svn_repos_notify_func_t notify_func,
+ void * notify_baton, svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_recover4(*args)
def svn_repos_recover3(*args):
"""
- svn_repos_recover3(char path, svn_boolean_t nonblocking, svn_error_t start_callback,
- void start_callback_baton, svn_cancel_func_t cancel_func,
- apr_pool_t pool) -> svn_error_t
+ svn_repos_recover3(char const * path, svn_boolean_t nonblocking, svn_error_t *(*)(void *) start_callback,
+ void * start_callback_baton, svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_recover3(*args)
def svn_repos_recover2(*args):
"""
- svn_repos_recover2(char path, svn_boolean_t nonblocking, svn_error_t start_callback,
- void start_callback_baton, apr_pool_t pool) -> svn_error_t
+ svn_repos_recover2(char const * path, svn_boolean_t nonblocking, svn_error_t *(*)(void *) start_callback,
+ void * start_callback_baton, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_recover2(*args)
def svn_repos_recover(*args):
- """svn_repos_recover(char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_repos_recover(char const * path, apr_pool_t pool) -> svn_error_t"""
return _repos.svn_repos_recover(*args)
+def svn_repos_freeze(*args):
+ """svn_repos_freeze(apr_array_header_t paths, svn_repos_freeze_func_t freeze_func, apr_pool_t pool) -> svn_error_t"""
+ return _repos.svn_repos_freeze(*args)
+
def svn_repos_db_logfiles(*args):
- """svn_repos_db_logfiles(char path, svn_boolean_t only_unused, apr_pool_t pool) -> svn_error_t"""
+ """svn_repos_db_logfiles(char const * path, svn_boolean_t only_unused, apr_pool_t pool) -> svn_error_t"""
return _repos.svn_repos_db_logfiles(*args)
def svn_repos_path(*args):
- """svn_repos_path(svn_repos_t repos, apr_pool_t pool) -> char"""
+ """svn_repos_path(svn_repos_t * repos, apr_pool_t pool) -> char const *"""
return _repos.svn_repos_path(*args)
def svn_repos_db_env(*args):
- """svn_repos_db_env(svn_repos_t repos, apr_pool_t pool) -> char"""
+ """svn_repos_db_env(svn_repos_t * repos, apr_pool_t pool) -> char const *"""
return _repos.svn_repos_db_env(*args)
def svn_repos_conf_dir(*args):
- """svn_repos_conf_dir(svn_repos_t repos, apr_pool_t pool) -> char"""
+ """svn_repos_conf_dir(svn_repos_t * repos, apr_pool_t pool) -> char const *"""
return _repos.svn_repos_conf_dir(*args)
def svn_repos_svnserve_conf(*args):
- """svn_repos_svnserve_conf(svn_repos_t repos, apr_pool_t pool) -> char"""
+ """svn_repos_svnserve_conf(svn_repos_t * repos, apr_pool_t pool) -> char const *"""
return _repos.svn_repos_svnserve_conf(*args)
def svn_repos_lock_dir(*args):
- """svn_repos_lock_dir(svn_repos_t repos, apr_pool_t pool) -> char"""
+ """svn_repos_lock_dir(svn_repos_t * repos, apr_pool_t pool) -> char const *"""
return _repos.svn_repos_lock_dir(*args)
def svn_repos_db_lockfile(*args):
- """svn_repos_db_lockfile(svn_repos_t repos, apr_pool_t pool) -> char"""
+ """svn_repos_db_lockfile(svn_repos_t * repos, apr_pool_t pool) -> char const *"""
return _repos.svn_repos_db_lockfile(*args)
def svn_repos_db_logs_lockfile(*args):
- """svn_repos_db_logs_lockfile(svn_repos_t repos, apr_pool_t pool) -> char"""
+ """svn_repos_db_logs_lockfile(svn_repos_t * repos, apr_pool_t pool) -> char const *"""
return _repos.svn_repos_db_logs_lockfile(*args)
def svn_repos_hook_dir(*args):
- """svn_repos_hook_dir(svn_repos_t repos, apr_pool_t pool) -> char"""
+ """svn_repos_hook_dir(svn_repos_t * repos, apr_pool_t pool) -> char const *"""
return _repos.svn_repos_hook_dir(*args)
def svn_repos_start_commit_hook(*args):
- """svn_repos_start_commit_hook(svn_repos_t repos, apr_pool_t pool) -> char"""
+ """svn_repos_start_commit_hook(svn_repos_t * repos, apr_pool_t pool) -> char const *"""
return _repos.svn_repos_start_commit_hook(*args)
def svn_repos_pre_commit_hook(*args):
- """svn_repos_pre_commit_hook(svn_repos_t repos, apr_pool_t pool) -> char"""
+ """svn_repos_pre_commit_hook(svn_repos_t * repos, apr_pool_t pool) -> char const *"""
return _repos.svn_repos_pre_commit_hook(*args)
def svn_repos_post_commit_hook(*args):
- """svn_repos_post_commit_hook(svn_repos_t repos, apr_pool_t pool) -> char"""
+ """svn_repos_post_commit_hook(svn_repos_t * repos, apr_pool_t pool) -> char const *"""
return _repos.svn_repos_post_commit_hook(*args)
def svn_repos_pre_revprop_change_hook(*args):
- """svn_repos_pre_revprop_change_hook(svn_repos_t repos, apr_pool_t pool) -> char"""
+ """svn_repos_pre_revprop_change_hook(svn_repos_t * repos, apr_pool_t pool) -> char const *"""
return _repos.svn_repos_pre_revprop_change_hook(*args)
def svn_repos_post_revprop_change_hook(*args):
- """svn_repos_post_revprop_change_hook(svn_repos_t repos, apr_pool_t pool) -> char"""
+ """svn_repos_post_revprop_change_hook(svn_repos_t * repos, apr_pool_t pool) -> char const *"""
return _repos.svn_repos_post_revprop_change_hook(*args)
def svn_repos_pre_lock_hook(*args):
- """svn_repos_pre_lock_hook(svn_repos_t repos, apr_pool_t pool) -> char"""
+ """svn_repos_pre_lock_hook(svn_repos_t * repos, apr_pool_t pool) -> char const *"""
return _repos.svn_repos_pre_lock_hook(*args)
def svn_repos_post_lock_hook(*args):
- """svn_repos_post_lock_hook(svn_repos_t repos, apr_pool_t pool) -> char"""
+ """svn_repos_post_lock_hook(svn_repos_t * repos, apr_pool_t pool) -> char const *"""
return _repos.svn_repos_post_lock_hook(*args)
def svn_repos_pre_unlock_hook(*args):
- """svn_repos_pre_unlock_hook(svn_repos_t repos, apr_pool_t pool) -> char"""
+ """svn_repos_pre_unlock_hook(svn_repos_t * repos, apr_pool_t pool) -> char const *"""
return _repos.svn_repos_pre_unlock_hook(*args)
def svn_repos_post_unlock_hook(*args):
- """svn_repos_post_unlock_hook(svn_repos_t repos, apr_pool_t pool) -> char"""
+ """svn_repos_post_unlock_hook(svn_repos_t * repos, apr_pool_t pool) -> char const *"""
return _repos.svn_repos_post_unlock_hook(*args)
-def svn_repos_begin_report2(*args):
+def svn_repos_hooks_setenv(*args):
+ """svn_repos_hooks_setenv(svn_repos_t * repos, char const * hooks_env_path, apr_pool_t scratch_pool) -> svn_error_t"""
+ return _repos.svn_repos_hooks_setenv(*args)
+
+def svn_repos_begin_report3(*args):
"""
- svn_repos_begin_report2(svn_revnum_t revnum, svn_repos_t repos, char fs_base,
- char target, char tgt_path, svn_boolean_t text_deltas,
- svn_depth_t depth, svn_boolean_t ignore_ancestry,
- svn_boolean_t send_copyfrom_args,
- svn_delta_editor_t editor, void edit_baton,
- svn_repos_authz_func_t authz_read_func,
+ svn_repos_begin_report3(svn_revnum_t revnum, svn_repos_t * repos, char const * fs_base, char const * target,
+ char const * tgt_path, svn_boolean_t text_deltas, svn_depth_t depth, svn_boolean_t ignore_ancestry,
+ svn_boolean_t send_copyfrom_args, svn_delta_editor_t editor,
+ void * edit_baton, svn_repos_authz_func_t authz_read_func, apr_size_t zero_copy_limit,
apr_pool_t pool) -> svn_error_t
"""
+ return _repos.svn_repos_begin_report3(*args)
+
+def svn_repos_begin_report2(*args):
+ """
+ svn_repos_begin_report2(svn_revnum_t revnum, svn_repos_t * repos, char const * fs_base, char const * target,
+ char const * tgt_path, svn_boolean_t text_deltas, svn_depth_t depth, svn_boolean_t ignore_ancestry,
+ svn_boolean_t send_copyfrom_args, svn_delta_editor_t editor,
+ void * edit_baton, svn_repos_authz_func_t authz_read_func, apr_pool_t pool) -> svn_error_t
+ """
return _repos.svn_repos_begin_report2(*args)
def svn_repos_begin_report(*args):
"""
- svn_repos_begin_report(svn_revnum_t revnum, char username, svn_repos_t repos,
- char fs_base, char target, char tgt_path,
- svn_boolean_t text_deltas, svn_boolean_t recurse,
- svn_boolean_t ignore_ancestry, svn_delta_editor_t editor,
- void edit_baton, svn_repos_authz_func_t authz_read_func,
- apr_pool_t pool) -> svn_error_t
+ svn_repos_begin_report(svn_revnum_t revnum, char const * username, svn_repos_t * repos, char const * fs_base,
+ char const * target, char const * tgt_path, svn_boolean_t text_deltas,
+ svn_boolean_t recurse, svn_boolean_t ignore_ancestry, svn_delta_editor_t editor,
+ void * edit_baton, svn_repos_authz_func_t authz_read_func, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_begin_report(*args)
def svn_repos_set_path3(*args):
"""
- svn_repos_set_path3(void report_baton, char path, svn_revnum_t revision,
- svn_depth_t depth, svn_boolean_t start_empty,
- char lock_token, apr_pool_t pool) -> svn_error_t
+ svn_repos_set_path3(void * report_baton, char const * path, svn_revnum_t revision, svn_depth_t depth,
+ svn_boolean_t start_empty, char const * lock_token, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_set_path3(*args)
def svn_repos_set_path2(*args):
"""
- svn_repos_set_path2(void report_baton, char path, svn_revnum_t revision,
- svn_boolean_t start_empty, char lock_token,
- apr_pool_t pool) -> svn_error_t
+ svn_repos_set_path2(void * report_baton, char const * path, svn_revnum_t revision, svn_boolean_t start_empty,
+ char const * lock_token, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_set_path2(*args)
def svn_repos_set_path(*args):
"""
- svn_repos_set_path(void report_baton, char path, svn_revnum_t revision,
- svn_boolean_t start_empty, apr_pool_t pool) -> svn_error_t
+ svn_repos_set_path(void * report_baton, char const * path, svn_revnum_t revision, svn_boolean_t start_empty,
+ apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_set_path(*args)
def svn_repos_link_path3(*args):
"""
- svn_repos_link_path3(void report_baton, char path, char link_path, svn_revnum_t revision,
- svn_depth_t depth, svn_boolean_t start_empty,
- char lock_token, apr_pool_t pool) -> svn_error_t
+ svn_repos_link_path3(void * report_baton, char const * path, char const * link_path, svn_revnum_t revision,
+ svn_depth_t depth, svn_boolean_t start_empty, char const * lock_token,
+ apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_link_path3(*args)
def svn_repos_link_path2(*args):
"""
- svn_repos_link_path2(void report_baton, char path, char link_path, svn_revnum_t revision,
- svn_boolean_t start_empty,
- char lock_token, apr_pool_t pool) -> svn_error_t
+ svn_repos_link_path2(void * report_baton, char const * path, char const * link_path, svn_revnum_t revision,
+ svn_boolean_t start_empty, char const * lock_token, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_link_path2(*args)
def svn_repos_link_path(*args):
"""
- svn_repos_link_path(void report_baton, char path, char link_path, svn_revnum_t revision,
- svn_boolean_t start_empty,
- apr_pool_t pool) -> svn_error_t
+ svn_repos_link_path(void * report_baton, char const * path, char const * link_path, svn_revnum_t revision,
+ svn_boolean_t start_empty, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_link_path(*args)
def svn_repos_delete_path(*args):
- """svn_repos_delete_path(void report_baton, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_repos_delete_path(void * report_baton, char const * path, apr_pool_t pool) -> svn_error_t"""
return _repos.svn_repos_delete_path(*args)
def svn_repos_finish_report(*args):
- """svn_repos_finish_report(void report_baton, apr_pool_t pool) -> svn_error_t"""
+ """svn_repos_finish_report(void * report_baton, apr_pool_t pool) -> svn_error_t"""
return _repos.svn_repos_finish_report(*args)
def svn_repos_abort_report(*args):
- """svn_repos_abort_report(void report_baton, apr_pool_t pool) -> svn_error_t"""
+ """svn_repos_abort_report(void * report_baton, apr_pool_t pool) -> svn_error_t"""
return _repos.svn_repos_abort_report(*args)
def svn_repos_dir_delta2(*args):
"""
- svn_repos_dir_delta2(svn_fs_root_t src_root, char src_parent_dir, char src_entry,
- svn_fs_root_t tgt_root, char tgt_path,
- svn_delta_editor_t editor, void edit_baton,
+ svn_repos_dir_delta2(svn_fs_root_t * src_root, char const * src_parent_dir, char const * src_entry, svn_fs_root_t * tgt_root,
+ char const * tgt_path, svn_delta_editor_t editor, void * edit_baton,
svn_repos_authz_func_t authz_read_func, svn_boolean_t text_deltas,
- svn_depth_t depth, svn_boolean_t entry_props,
- svn_boolean_t ignore_ancestry,
+ svn_depth_t depth, svn_boolean_t entry_props, svn_boolean_t ignore_ancestry,
apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_dir_delta2(*args)
def svn_repos_dir_delta(*args):
"""
- svn_repos_dir_delta(svn_fs_root_t src_root, char src_parent_dir, char src_entry,
- svn_fs_root_t tgt_root, char tgt_path,
- svn_delta_editor_t editor, void edit_baton,
+ svn_repos_dir_delta(svn_fs_root_t * src_root, char const * src_parent_dir, char const * src_entry, svn_fs_root_t * tgt_root,
+ char const * tgt_path, svn_delta_editor_t editor, void * edit_baton,
svn_repos_authz_func_t authz_read_func, svn_boolean_t text_deltas,
- svn_boolean_t recurse,
- svn_boolean_t entry_props, svn_boolean_t ignore_ancestry,
+ svn_boolean_t recurse, svn_boolean_t entry_props, svn_boolean_t ignore_ancestry,
apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_dir_delta(*args)
def svn_repos_replay2(*args):
"""
- svn_repos_replay2(svn_fs_root_t root, char base_dir, svn_revnum_t low_water_mark,
- svn_boolean_t send_deltas, svn_delta_editor_t editor,
- void edit_baton, svn_repos_authz_func_t authz_read_func,
+ svn_repos_replay2(svn_fs_root_t * root, char const * base_dir, svn_revnum_t low_water_mark, svn_boolean_t send_deltas,
+ svn_delta_editor_t editor, void * edit_baton, svn_repos_authz_func_t authz_read_func,
apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_replay2(*args)
def svn_repos_replay(*args):
- """
- svn_repos_replay(svn_fs_root_t root, svn_delta_editor_t editor, void edit_baton,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_repos_replay(svn_fs_root_t * root, svn_delta_editor_t editor, void * edit_baton, apr_pool_t pool) -> svn_error_t"""
return _repos.svn_repos_replay(*args)
def svn_repos_get_commit_editor5(*args):
"""
- svn_repos_get_commit_editor5(svn_repos_t repos, svn_fs_txn_t txn, char repos_url,
- char base_path, apr_hash_t revprop_table, svn_commit_callback2_t callback,
- svn_repos_authz_callback_t authz_callback,
- void authz_baton,
- apr_pool_t pool) -> svn_error_t
+ svn_repos_get_commit_editor5(svn_repos_t * repos, svn_fs_txn_t * txn, char const * repos_url, char const * base_path,
+ apr_hash_t revprop_table, svn_commit_callback2_t commit_callback, svn_repos_authz_callback_t authz_callback,
+ void * authz_baton, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_get_commit_editor5(*args)
def svn_repos_get_commit_editor4(*args):
"""
- svn_repos_get_commit_editor4(svn_repos_t repos, svn_fs_txn_t txn, char repos_url,
- char base_path, char user, char log_msg, svn_commit_callback2_t callback,
- svn_repos_authz_callback_t authz_callback,
- void authz_baton,
+ svn_repos_get_commit_editor4(svn_repos_t * repos, svn_fs_txn_t * txn, char const * repos_url, char const * base_path,
+ char const * user, char const * log_msg, svn_commit_callback2_t commit_callback,
+ svn_repos_authz_callback_t authz_callback, void * authz_baton,
apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_get_commit_editor4(*args)
def svn_repos_get_commit_editor3(*args):
"""
- svn_repos_get_commit_editor3(svn_repos_t repos, svn_fs_txn_t txn, char repos_url,
- char base_path, char user, char log_msg, svn_commit_callback_t callback,
- svn_repos_authz_callback_t authz_callback,
- void authz_baton,
- apr_pool_t pool) -> svn_error_t
+ svn_repos_get_commit_editor3(svn_repos_t * repos, svn_fs_txn_t * txn, char const * repos_url, char const * base_path,
+ char const * user, char const * log_msg, svn_commit_callback_t callback,
+ svn_repos_authz_callback_t authz_callback, void * authz_baton, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_get_commit_editor3(*args)
def svn_repos_get_commit_editor2(*args):
"""
- svn_repos_get_commit_editor2(svn_repos_t repos, svn_fs_txn_t txn, char repos_url,
- char base_path, char user, char log_msg, svn_commit_callback_t callback,
+ svn_repos_get_commit_editor2(svn_repos_t * repos, svn_fs_txn_t * txn, char const * repos_url, char const * base_path,
+ char const * user, char const * log_msg, svn_commit_callback_t callback,
apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_get_commit_editor2(*args)
def svn_repos_get_commit_editor(*args):
"""
- svn_repos_get_commit_editor(svn_repos_t repos, char repos_url, char base_path,
- char user, char log_msg, svn_commit_callback_t callback,
- apr_pool_t pool) -> svn_error_t
+ svn_repos_get_commit_editor(svn_repos_t * repos, char const * repos_url, char const * base_path, char const * user,
+ char const * log_msg, svn_commit_callback_t callback, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_get_commit_editor(*args)
def svn_repos_dated_revision(*args):
- """svn_repos_dated_revision(svn_repos_t repos, apr_time_t tm, apr_pool_t pool) -> svn_error_t"""
+ """svn_repos_dated_revision(svn_repos_t * repos, apr_time_t tm, apr_pool_t pool) -> svn_error_t"""
return _repos.svn_repos_dated_revision(*args)
def svn_repos_get_committed_info(*args):
- """svn_repos_get_committed_info(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_repos_get_committed_info(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"""
return _repos.svn_repos_get_committed_info(*args)
def svn_repos_stat(*args):
- """svn_repos_stat(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_repos_stat(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"""
return _repos.svn_repos_stat(*args)
def svn_repos_deleted_rev(*args):
- """
- svn_repos_deleted_rev(svn_fs_t fs, char path, svn_revnum_t start, svn_revnum_t end,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_repos_deleted_rev(svn_fs_t * fs, char const * path, svn_revnum_t start, svn_revnum_t end, apr_pool_t pool) -> svn_error_t"""
return _repos.svn_repos_deleted_rev(*args)
def svn_repos_history2(*args):
"""
- svn_repos_history2(svn_fs_t fs, char path, svn_repos_history_func_t history_func,
- svn_repos_authz_func_t authz_read_func,
- svn_revnum_t start, svn_revnum_t end,
- svn_boolean_t cross_copies, apr_pool_t pool) -> svn_error_t
+ svn_repos_history2(svn_fs_t * fs, char const * path, svn_repos_history_func_t history_func, svn_repos_authz_func_t authz_read_func,
+ svn_revnum_t start, svn_revnum_t end, svn_boolean_t cross_copies,
+ apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_history2(*args)
def svn_repos_history(*args):
"""
- svn_repos_history(svn_fs_t fs, char path, svn_repos_history_func_t history_func,
- svn_revnum_t start, svn_revnum_t end,
- svn_boolean_t cross_copies, apr_pool_t pool) -> svn_error_t
+ svn_repos_history(svn_fs_t * fs, char const * path, svn_repos_history_func_t history_func, svn_revnum_t start,
+ svn_revnum_t end, svn_boolean_t cross_copies, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_history(*args)
def svn_repos_trace_node_locations(*args):
"""
- svn_repos_trace_node_locations(svn_fs_t fs, char fs_path, svn_revnum_t peg_revision,
- apr_array_header_t location_revisions, svn_repos_authz_func_t authz_read_func,
- apr_pool_t pool) -> svn_error_t
+ svn_repos_trace_node_locations(svn_fs_t * fs, char const * fs_path, svn_revnum_t peg_revision, apr_array_header_t location_revisions,
+ svn_repos_authz_func_t authz_read_func, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_trace_node_locations(*args)
def svn_repos_node_location_segments(*args):
"""
- svn_repos_node_location_segments(svn_repos_t repos, char path, svn_revnum_t peg_revision,
- svn_revnum_t start_rev, svn_revnum_t end_rev,
- svn_location_segment_receiver_t receiver,
- svn_repos_authz_func_t authz_read_func, apr_pool_t pool) -> svn_error_t
+ svn_repos_node_location_segments(svn_repos_t * repos, char const * path, svn_revnum_t peg_revision, svn_revnum_t start_rev,
+ svn_revnum_t end_rev, svn_location_segment_receiver_t receiver, svn_repos_authz_func_t authz_read_func,
+ apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_node_location_segments(*args)
def svn_repos_get_logs4(*args):
"""
- svn_repos_get_logs4(svn_repos_t repos, apr_array_header_t paths, svn_revnum_t start,
- svn_revnum_t end, int limit, svn_boolean_t discover_changed_paths,
- svn_boolean_t strict_node_history,
- svn_boolean_t include_merged_revisions,
- apr_array_header_t revprops,
- svn_repos_authz_func_t authz_read_func,
- svn_log_entry_receiver_t receiver, apr_pool_t pool) -> svn_error_t
+ svn_repos_get_logs4(svn_repos_t * repos, apr_array_header_t paths, svn_revnum_t start, svn_revnum_t end,
+ int limit, svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history,
+ svn_boolean_t include_merged_revisions, apr_array_header_t revprops,
+ svn_repos_authz_func_t authz_read_func, svn_log_entry_receiver_t receiver,
+ apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_get_logs4(*args)
def svn_repos_get_logs3(*args):
"""
- svn_repos_get_logs3(svn_repos_t repos, apr_array_header_t paths, svn_revnum_t start,
- svn_revnum_t end, int limit, svn_boolean_t discover_changed_paths,
- svn_boolean_t strict_node_history,
- svn_repos_authz_func_t authz_read_func,
- svn_log_message_receiver_t receiver,
+ svn_repos_get_logs3(svn_repos_t * repos, apr_array_header_t paths, svn_revnum_t start, svn_revnum_t end,
+ int limit, svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history,
+ svn_repos_authz_func_t authz_read_func, svn_log_message_receiver_t receiver,
apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_get_logs3(*args)
def svn_repos_get_logs2(*args):
"""
- svn_repos_get_logs2(svn_repos_t repos, apr_array_header_t paths, svn_revnum_t start,
- svn_revnum_t end, svn_boolean_t discover_changed_paths,
- svn_boolean_t strict_node_history,
- svn_repos_authz_func_t authz_read_func,
- svn_log_message_receiver_t receiver,
+ svn_repos_get_logs2(svn_repos_t * repos, apr_array_header_t paths, svn_revnum_t start, svn_revnum_t end,
+ svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history,
+ svn_repos_authz_func_t authz_read_func, svn_log_message_receiver_t receiver,
apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_get_logs2(*args)
def svn_repos_get_logs(*args):
"""
- svn_repos_get_logs(svn_repos_t repos, apr_array_header_t paths, svn_revnum_t start,
- svn_revnum_t end, svn_boolean_t discover_changed_paths,
- svn_boolean_t strict_node_history,
- svn_log_message_receiver_t receiver,
- apr_pool_t pool) -> svn_error_t
+ svn_repos_get_logs(svn_repos_t * repos, apr_array_header_t paths, svn_revnum_t start, svn_revnum_t end,
+ svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history,
+ svn_log_message_receiver_t receiver, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_get_logs(*args)
def svn_repos_fs_get_mergeinfo(*args):
"""
- svn_repos_fs_get_mergeinfo(svn_repos_t repos, apr_array_header_t paths, svn_revnum_t revision,
- svn_mergeinfo_inheritance_t inherit,
+ svn_repos_fs_get_mergeinfo(svn_repos_t * repos, apr_array_header_t paths, svn_revnum_t revision, svn_mergeinfo_inheritance_t inherit,
svn_boolean_t include_descendants, svn_repos_authz_func_t authz_read_func,
apr_pool_t pool) -> svn_error_t
"""
@@ -643,91 +624,78 @@ def svn_repos_fs_get_mergeinfo(*args):
def svn_repos_get_file_revs2(*args):
"""
- svn_repos_get_file_revs2(svn_repos_t repos, char path, svn_revnum_t start, svn_revnum_t end,
- svn_boolean_t include_merged_revisions,
+ svn_repos_get_file_revs2(svn_repos_t * repos, char const * path, svn_revnum_t start, svn_revnum_t end, svn_boolean_t include_merged_revisions,
svn_repos_authz_func_t authz_read_func,
- svn_file_rev_handler_t handler, void handler_baton,
- apr_pool_t pool) -> svn_error_t
+ svn_file_rev_handler_t handler, void * handler_baton, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_get_file_revs2(*args)
def svn_repos_get_file_revs(*args):
"""
- svn_repos_get_file_revs(svn_repos_t repos, char path, svn_revnum_t start, svn_revnum_t end,
- svn_repos_authz_func_t authz_read_func,
+ svn_repos_get_file_revs(svn_repos_t * repos, char const * path, svn_revnum_t start, svn_revnum_t end, svn_repos_authz_func_t authz_read_func,
svn_repos_file_rev_handler_t handler,
- void handler_baton, apr_pool_t pool) -> svn_error_t
+ void * handler_baton, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_get_file_revs(*args)
def svn_repos_fs_commit_txn(*args):
- """svn_repos_fs_commit_txn(svn_repos_t repos, svn_fs_txn_t txn, apr_pool_t pool) -> svn_error_t"""
+ """svn_repos_fs_commit_txn(svn_repos_t * repos, svn_fs_txn_t * txn, apr_pool_t pool) -> svn_error_t"""
return _repos.svn_repos_fs_commit_txn(*args)
def svn_repos_fs_begin_txn_for_commit2(*args):
- """
- svn_repos_fs_begin_txn_for_commit2(svn_repos_t repos, svn_revnum_t rev, apr_hash_t revprop_table,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_repos_fs_begin_txn_for_commit2(svn_repos_t * repos, svn_revnum_t rev, apr_hash_t revprop_table, apr_pool_t pool) -> svn_error_t"""
return _repos.svn_repos_fs_begin_txn_for_commit2(*args)
def svn_repos_fs_begin_txn_for_commit(*args):
"""
- svn_repos_fs_begin_txn_for_commit(svn_repos_t repos, svn_revnum_t rev, char author, char log_msg,
+ svn_repos_fs_begin_txn_for_commit(svn_repos_t * repos, svn_revnum_t rev, char const * author, char const * log_msg,
apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_fs_begin_txn_for_commit(*args)
def svn_repos_fs_begin_txn_for_update(*args):
- """svn_repos_fs_begin_txn_for_update(svn_repos_t repos, svn_revnum_t rev, char author, apr_pool_t pool) -> svn_error_t"""
+ """svn_repos_fs_begin_txn_for_update(svn_repos_t * repos, svn_revnum_t rev, char const * author, apr_pool_t pool) -> svn_error_t"""
return _repos.svn_repos_fs_begin_txn_for_update(*args)
def svn_repos_fs_lock(*args):
"""
- svn_repos_fs_lock(svn_repos_t repos, char path, char token, char comment,
- svn_boolean_t is_dav_comment, apr_time_t expiration_date,
- svn_revnum_t current_rev, svn_boolean_t steal_lock,
- apr_pool_t pool) -> svn_error_t
+ svn_repos_fs_lock(svn_repos_t * repos, char const * path, char const * token, char const * comment,
+ svn_boolean_t is_dav_comment, apr_time_t expiration_date, svn_revnum_t current_rev,
+ svn_boolean_t steal_lock, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_fs_lock(*args)
def svn_repos_fs_unlock(*args):
"""
- svn_repos_fs_unlock(svn_repos_t repos, char path, char token, svn_boolean_t break_lock,
+ svn_repos_fs_unlock(svn_repos_t * repos, char const * path, char const * token, svn_boolean_t break_lock,
apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_fs_unlock(*args)
def svn_repos_fs_get_locks2(*args):
"""
- svn_repos_fs_get_locks2(svn_repos_t repos, char path, svn_depth_t depth, svn_repos_authz_func_t authz_read_func,
+ svn_repos_fs_get_locks2(svn_repos_t * repos, char const * path, svn_depth_t depth, svn_repos_authz_func_t authz_read_func,
apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_fs_get_locks2(*args)
def svn_repos_fs_get_locks(*args):
- """
- svn_repos_fs_get_locks(svn_repos_t repos, char path, svn_repos_authz_func_t authz_read_func,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_repos_fs_get_locks(svn_repos_t * repos, char const * path, svn_repos_authz_func_t authz_read_func, apr_pool_t pool) -> svn_error_t"""
return _repos.svn_repos_fs_get_locks(*args)
def svn_repos_fs_change_rev_prop4(*args):
"""
- svn_repos_fs_change_rev_prop4(svn_repos_t repos, svn_revnum_t rev, char author, char name,
- svn_string_t old_value_p, svn_string_t new_value,
- svn_boolean_t use_pre_revprop_change_hook,
+ svn_repos_fs_change_rev_prop4(svn_repos_t * repos, svn_revnum_t rev, char const * author, char const * name, svn_string_t const *const * old_value_p,
+ svn_string_t const * new_value, svn_boolean_t use_pre_revprop_change_hook,
svn_boolean_t use_post_revprop_change_hook,
- svn_repos_authz_func_t authz_read_func,
- apr_pool_t pool) -> svn_error_t
+ svn_repos_authz_func_t authz_read_func, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_fs_change_rev_prop4(*args)
def svn_repos_fs_change_rev_prop3(*args):
"""
- svn_repos_fs_change_rev_prop3(svn_repos_t repos, svn_revnum_t rev, char author, char name,
- svn_string_t new_value, svn_boolean_t use_pre_revprop_change_hook,
- svn_boolean_t use_post_revprop_change_hook,
+ svn_repos_fs_change_rev_prop3(svn_repos_t * repos, svn_revnum_t rev, char const * author, char const * name, svn_string_t const * new_value,
+ svn_boolean_t use_pre_revprop_change_hook, svn_boolean_t use_post_revprop_change_hook,
svn_repos_authz_func_t authz_read_func,
apr_pool_t pool) -> svn_error_t
"""
@@ -735,46 +703,42 @@ def svn_repos_fs_change_rev_prop3(*args):
def svn_repos_fs_change_rev_prop2(*args):
"""
- svn_repos_fs_change_rev_prop2(svn_repos_t repos, svn_revnum_t rev, char author, char name,
- svn_string_t new_value, svn_repos_authz_func_t authz_read_func,
- apr_pool_t pool) -> svn_error_t
+ svn_repos_fs_change_rev_prop2(svn_repos_t * repos, svn_revnum_t rev, char const * author, char const * name, svn_string_t const * new_value,
+ svn_repos_authz_func_t authz_read_func, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_fs_change_rev_prop2(*args)
def svn_repos_fs_change_rev_prop(*args):
"""
- svn_repos_fs_change_rev_prop(svn_repos_t repos, svn_revnum_t rev, char author, char name,
- svn_string_t new_value, apr_pool_t pool) -> svn_error_t
+ svn_repos_fs_change_rev_prop(svn_repos_t * repos, svn_revnum_t rev, char const * author, char const * name, svn_string_t const * new_value,
+ apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_fs_change_rev_prop(*args)
def svn_repos_fs_revision_prop(*args):
"""
- svn_repos_fs_revision_prop(svn_repos_t repos, svn_revnum_t rev, char propname,
- svn_repos_authz_func_t authz_read_func, apr_pool_t pool) -> svn_error_t
+ svn_repos_fs_revision_prop(svn_repos_t * repos, svn_revnum_t rev, char const * propname, svn_repos_authz_func_t authz_read_func,
+ apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_fs_revision_prop(*args)
def svn_repos_fs_revision_proplist(*args):
- """
- svn_repos_fs_revision_proplist(svn_repos_t repos, svn_revnum_t rev, svn_repos_authz_func_t authz_read_func,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_repos_fs_revision_proplist(svn_repos_t * repos, svn_revnum_t rev, svn_repos_authz_func_t authz_read_func, apr_pool_t pool) -> svn_error_t"""
return _repos.svn_repos_fs_revision_proplist(*args)
def svn_repos_fs_change_node_prop(*args):
"""
- svn_repos_fs_change_node_prop(svn_fs_root_t root, char path, char name, svn_string_t value,
+ svn_repos_fs_change_node_prop(svn_fs_root_t * root, char const * path, char const * name, svn_string_t const * value,
apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_fs_change_node_prop(*args)
def svn_repos_fs_change_txn_prop(*args):
- """svn_repos_fs_change_txn_prop(svn_fs_txn_t txn, char name, svn_string_t value, apr_pool_t pool) -> svn_error_t"""
+ """svn_repos_fs_change_txn_prop(svn_fs_txn_t * txn, char const * name, svn_string_t const * value, apr_pool_t pool) -> svn_error_t"""
return _repos.svn_repos_fs_change_txn_prop(*args)
def svn_repos_fs_change_txn_props(*args):
- """svn_repos_fs_change_txn_props(svn_fs_txn_t txn, apr_array_header_t props, apr_pool_t pool) -> svn_error_t"""
+ """svn_repos_fs_change_txn_props(svn_fs_txn_t * txn, apr_array_header_t props, apr_pool_t pool) -> svn_error_t"""
return _repos.svn_repos_fs_change_txn_props(*args)
class svn_repos_node_t:
"""Proxy of C svn_repos_node_t struct"""
@@ -852,16 +816,17 @@ svn_repos_node_t_swigregister(svn_repos_node_t)
def svn_repos_node_editor(*args):
"""
- svn_repos_node_editor(svn_repos_t repos, svn_fs_root_t base_root, svn_fs_root_t root,
- apr_pool_t node_pool, apr_pool_t pool) -> svn_error_t
+ svn_repos_node_editor(svn_repos_t * repos, svn_fs_root_t * base_root, svn_fs_root_t * root, apr_pool_t node_pool,
+ apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_node_editor(*args)
def svn_repos_node_from_baton(*args):
- """svn_repos_node_from_baton(void edit_baton) -> svn_repos_node_t"""
+ """svn_repos_node_from_baton(void * edit_baton) -> svn_repos_node_t"""
return _repos.svn_repos_node_from_baton(*args)
SVN_REPOS_DUMPFILE_MAGIC_HEADER = _repos.SVN_REPOS_DUMPFILE_MAGIC_HEADER
SVN_REPOS_DUMPFILE_FORMAT_VERSION = _repos.SVN_REPOS_DUMPFILE_FORMAT_VERSION
+SVN_REPOS_DUMPFILE_FORMAT_VERSION_DELTAS = _repos.SVN_REPOS_DUMPFILE_FORMAT_VERSION_DELTAS
SVN_REPOS_DUMPFILE_UUID = _repos.SVN_REPOS_DUMPFILE_UUID
SVN_REPOS_DUMPFILE_CONTENT_LENGTH = _repos.SVN_REPOS_DUMPFILE_CONTENT_LENGTH
SVN_REPOS_DUMPFILE_REVISION_NUMBER = _repos.SVN_REPOS_DUMPFILE_REVISION_NUMBER
@@ -886,81 +851,208 @@ SVN_REPOS_DUMPFILE_TEXT_DELTA_BASE_CHECKSUM = _repos.SVN_REPOS_DUMPFILE_TEXT_DEL
def svn_repos_verify_fs2(*args):
"""
- svn_repos_verify_fs2(svn_repos_t repos, svn_revnum_t start_rev, svn_revnum_t end_rev,
- svn_repos_notify_func_t notify_func,
- void notify_baton, svn_cancel_func_t cancel,
- void cancel_baton, apr_pool_t scratch_pool) -> svn_error_t
+ svn_repos_verify_fs2(svn_repos_t * repos, svn_revnum_t start_rev, svn_revnum_t end_rev, svn_repos_notify_func_t notify_func,
+ void * notify_baton, svn_cancel_func_t cancel, void * cancel_baton,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
return _repos.svn_repos_verify_fs2(*args)
def svn_repos_verify_fs(*args):
"""
- svn_repos_verify_fs(svn_repos_t repos, svn_stream_t feedback_stream, svn_revnum_t start_rev,
- svn_revnum_t end_rev, svn_cancel_func_t cancel_func,
- apr_pool_t pool) -> svn_error_t
+ svn_repos_verify_fs(svn_repos_t * repos, svn_stream_t * feedback_stream, svn_revnum_t start_rev, svn_revnum_t end_rev,
+ svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_verify_fs(*args)
def svn_repos_dump_fs3(*args):
"""
- svn_repos_dump_fs3(svn_repos_t repos, svn_stream_t dumpstream, svn_revnum_t start_rev,
- svn_revnum_t end_rev, svn_boolean_t incremental,
- svn_boolean_t use_deltas,
- svn_repos_notify_func_t notify_func, void notify_baton,
- svn_cancel_func_t cancel_func, apr_pool_t scratch_pool) -> svn_error_t
+ svn_repos_dump_fs3(svn_repos_t * repos, svn_stream_t * dumpstream, svn_revnum_t start_rev, svn_revnum_t end_rev,
+ svn_boolean_t incremental, svn_boolean_t use_deltas, svn_repos_notify_func_t notify_func,
+ void * notify_baton, svn_cancel_func_t cancel_func,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
return _repos.svn_repos_dump_fs3(*args)
def svn_repos_dump_fs2(*args):
"""
- svn_repos_dump_fs2(svn_repos_t repos, svn_stream_t dumpstream, svn_stream_t feedback_stream,
- svn_revnum_t start_rev,
- svn_revnum_t end_rev, svn_boolean_t incremental,
- svn_boolean_t use_deltas, svn_cancel_func_t cancel_func,
- apr_pool_t pool) -> svn_error_t
+ svn_repos_dump_fs2(svn_repos_t * repos, svn_stream_t * dumpstream, svn_stream_t * feedback_stream, svn_revnum_t start_rev,
+ svn_revnum_t end_rev, svn_boolean_t incremental, svn_boolean_t use_deltas,
+ svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_dump_fs2(*args)
def svn_repos_dump_fs(*args):
"""
- svn_repos_dump_fs(svn_repos_t repos, svn_stream_t dumpstream, svn_stream_t feedback_stream,
- svn_revnum_t start_rev,
- svn_revnum_t end_rev, svn_boolean_t incremental,
- svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
+ svn_repos_dump_fs(svn_repos_t * repos, svn_stream_t * dumpstream, svn_stream_t * feedback_stream, svn_revnum_t start_rev,
+ svn_revnum_t end_rev, svn_boolean_t incremental, svn_cancel_func_t cancel_func,
+ apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_dump_fs(*args)
+def svn_repos_load_fs4(*args):
+ """
+ svn_repos_load_fs4(svn_repos_t * repos, svn_stream_t * dumpstream, svn_revnum_t start_rev, svn_revnum_t end_rev,
+ enum svn_repos_load_uuid uuid_action, char const * parent_dir,
+ svn_boolean_t use_pre_commit_hook, svn_boolean_t use_post_commit_hook, svn_boolean_t validate_props,
+ svn_repos_notify_func_t notify_func, void * notify_baton,
+ svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
+ """
+ return _repos.svn_repos_load_fs4(*args)
+
def svn_repos_load_fs3(*args):
"""
- svn_repos_load_fs3(svn_repos_t repos, svn_stream_t dumpstream, enum svn_repos_load_uuid uuid_action,
- char parent_dir,
- svn_boolean_t use_pre_commit_hook, svn_boolean_t use_post_commit_hook,
- svn_boolean_t validate_props,
- svn_repos_notify_func_t notify_func,
- void notify_baton, svn_cancel_func_t cancel_func,
- apr_pool_t pool) -> svn_error_t
+ svn_repos_load_fs3(svn_repos_t * repos, svn_stream_t * dumpstream, enum svn_repos_load_uuid uuid_action,
+ char const * parent_dir, svn_boolean_t use_pre_commit_hook, svn_boolean_t use_post_commit_hook,
+ svn_boolean_t validate_props, svn_repos_notify_func_t notify_func,
+ void * notify_baton, svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_load_fs3(*args)
def svn_repos_load_fs2(*args):
"""
- svn_repos_load_fs2(svn_repos_t repos, svn_stream_t dumpstream, svn_stream_t feedback_stream,
- enum svn_repos_load_uuid uuid_action,
- char parent_dir, svn_boolean_t use_pre_commit_hook,
- svn_boolean_t use_post_commit_hook,
- svn_cancel_func_t cancel_func,
+ svn_repos_load_fs2(svn_repos_t * repos, svn_stream_t * dumpstream, svn_stream_t * feedback_stream, enum svn_repos_load_uuid uuid_action,
+ char const * parent_dir, svn_boolean_t use_pre_commit_hook,
+ svn_boolean_t use_post_commit_hook, svn_cancel_func_t cancel_func,
apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_load_fs2(*args)
def svn_repos_load_fs(*args):
"""
- svn_repos_load_fs(svn_repos_t repos, svn_stream_t dumpstream, svn_stream_t feedback_stream,
- enum svn_repos_load_uuid uuid_action,
- char parent_dir, svn_cancel_func_t cancel_func,
+ svn_repos_load_fs(svn_repos_t * repos, svn_stream_t * dumpstream, svn_stream_t * feedback_stream, enum svn_repos_load_uuid uuid_action,
+ char const * parent_dir, svn_cancel_func_t cancel_func,
apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_load_fs(*args)
+class svn_repos_parse_fns3_t:
+ """Proxy of C svn_repos_parse_fns3_t struct"""
+ __swig_setmethods__ = {}
+ __setattr__ = lambda self, name, value: _swig_setattr(self, svn_repos_parse_fns3_t, name, value)
+ __swig_getmethods__ = {}
+ __getattr__ = lambda self, name: _swig_getattr(self, svn_repos_parse_fns3_t, name)
+ def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+ __repr__ = _swig_repr
+ __swig_setmethods__["magic_header_record"] = _repos.svn_repos_parse_fns3_t_magic_header_record_set
+ __swig_getmethods__["magic_header_record"] = _repos.svn_repos_parse_fns3_t_magic_header_record_get
+ __swig_setmethods__["uuid_record"] = _repos.svn_repos_parse_fns3_t_uuid_record_set
+ __swig_getmethods__["uuid_record"] = _repos.svn_repos_parse_fns3_t_uuid_record_get
+ __swig_setmethods__["new_revision_record"] = _repos.svn_repos_parse_fns3_t_new_revision_record_set
+ __swig_getmethods__["new_revision_record"] = _repos.svn_repos_parse_fns3_t_new_revision_record_get
+ __swig_setmethods__["new_node_record"] = _repos.svn_repos_parse_fns3_t_new_node_record_set
+ __swig_getmethods__["new_node_record"] = _repos.svn_repos_parse_fns3_t_new_node_record_get
+ __swig_setmethods__["set_revision_property"] = _repos.svn_repos_parse_fns3_t_set_revision_property_set
+ __swig_getmethods__["set_revision_property"] = _repos.svn_repos_parse_fns3_t_set_revision_property_get
+ __swig_setmethods__["set_node_property"] = _repos.svn_repos_parse_fns3_t_set_node_property_set
+ __swig_getmethods__["set_node_property"] = _repos.svn_repos_parse_fns3_t_set_node_property_get
+ __swig_setmethods__["delete_node_property"] = _repos.svn_repos_parse_fns3_t_delete_node_property_set
+ __swig_getmethods__["delete_node_property"] = _repos.svn_repos_parse_fns3_t_delete_node_property_get
+ __swig_setmethods__["remove_node_props"] = _repos.svn_repos_parse_fns3_t_remove_node_props_set
+ __swig_getmethods__["remove_node_props"] = _repos.svn_repos_parse_fns3_t_remove_node_props_get
+ __swig_setmethods__["set_fulltext"] = _repos.svn_repos_parse_fns3_t_set_fulltext_set
+ __swig_getmethods__["set_fulltext"] = _repos.svn_repos_parse_fns3_t_set_fulltext_get
+ __swig_setmethods__["apply_textdelta"] = _repos.svn_repos_parse_fns3_t_apply_textdelta_set
+ __swig_getmethods__["apply_textdelta"] = _repos.svn_repos_parse_fns3_t_apply_textdelta_get
+ __swig_setmethods__["close_node"] = _repos.svn_repos_parse_fns3_t_close_node_set
+ __swig_getmethods__["close_node"] = _repos.svn_repos_parse_fns3_t_close_node_get
+ __swig_setmethods__["close_revision"] = _repos.svn_repos_parse_fns3_t_close_revision_set
+ __swig_getmethods__["close_revision"] = _repos.svn_repos_parse_fns3_t_close_revision_get
+ def set_parent_pool(self, parent_pool=None):
+ """Create a new proxy object for svn_repos_parse_fns3_t"""
+ import libsvn.core, weakref
+ self.__dict__["_parent_pool"] = \
+ parent_pool or libsvn.core.application_pool;
+ if self.__dict__["_parent_pool"]:
+ self.__dict__["_is_valid"] = weakref.ref(
+ self.__dict__["_parent_pool"]._is_valid)
+
+ def assert_valid(self):
+ """Assert that this object is using valid pool memory"""
+ if "_is_valid" in self.__dict__:
+ assert self.__dict__["_is_valid"](), "Variable has already been deleted"
+
+ def __getattr__(self, name):
+ """Get an attribute from this object"""
+ self.assert_valid()
+
+ value = _swig_getattr(self, self.__class__, name)
+
+
+
+ members = self.__dict__.get("_members")
+ if members is not None:
+ _copy_metadata_deep(value, members.get(name))
+
+
+ _assert_valid_deep(value)
+
+ return value
+
+ def __setattr__(self, name, value):
+ """Set an attribute on this object"""
+ self.assert_valid()
+
+
+
+
+ self.__dict__.setdefault("_members",{})[name] = value
+
+ return _swig_setattr(self, self.__class__, name, value)
+
+ def magic_header_record(self, *args):
+ return svn_repos_parse_fns3_invoke_magic_header_record(self, *args)
+
+ def uuid_record(self, *args):
+ return svn_repos_parse_fns3_invoke_uuid_record(self, *args)
+
+ def new_revision_record(self, *args):
+ return svn_repos_parse_fns3_invoke_new_revision_record(self, *args)
+
+ def new_node_record(self, *args):
+ return svn_repos_parse_fns3_invoke_new_node_record(self, *args)
+
+ def set_revision_property(self, *args):
+ return svn_repos_parse_fns3_invoke_set_revision_property(self, *args)
+
+ def set_node_property(self, *args):
+ return svn_repos_parse_fns3_invoke_set_node_property(self, *args)
+
+ def delete_node_property(self, *args):
+ return svn_repos_parse_fns3_invoke_delete_node_property(self, *args)
+
+ def remove_node_props(self, *args):
+ return svn_repos_parse_fns3_invoke_remove_node_props(self, *args)
+
+ def set_fulltext(self, *args):
+ return svn_repos_parse_fns3_invoke_set_fulltext(self, *args)
+
+ def apply_textdelta(self, *args):
+ return svn_repos_parse_fns3_invoke_apply_textdelta(self, *args)
+
+ def close_node(self, *args):
+ return svn_repos_parse_fns3_invoke_close_node(self, *args)
+
+ def close_revision(self, *args):
+ return svn_repos_parse_fns3_invoke_close_revision(self, *args)
+
+svn_repos_parse_fns3_t_swigregister = _repos.svn_repos_parse_fns3_t_swigregister
+svn_repos_parse_fns3_t_swigregister(svn_repos_parse_fns3_t)
+
+
+def svn_repos_parse_dumpstream3(*args):
+ """
+ svn_repos_parse_dumpstream3(svn_stream_t * stream, svn_repos_parse_fns3_t parse_fns, void * parse_baton, svn_boolean_t deltas_are_text,
+ svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
+ """
+ return _repos.svn_repos_parse_dumpstream3(*args)
+
+def svn_repos_get_fs_build_parser4(*args):
+ """
+ svn_repos_get_fs_build_parser4(svn_repos_t * repos, svn_revnum_t start_rev, svn_revnum_t end_rev, svn_boolean_t use_history,
+ svn_boolean_t validate_props, enum svn_repos_load_uuid uuid_action,
+ char const * parent_dir, svn_repos_notify_func_t notify_func, void * notify_baton,
+ apr_pool_t pool) -> svn_error_t
+ """
+ return _repos.svn_repos_get_fs_build_parser4(*args)
class svn_repos_parse_fns2_t:
"""Proxy of C svn_repos_parse_fns2_t struct"""
__swig_setmethods__ = {}
@@ -1069,34 +1161,8 @@ class svn_repos_parse_fns2_t:
svn_repos_parse_fns2_t_swigregister = _repos.svn_repos_parse_fns2_t_swigregister
svn_repos_parse_fns2_t_swigregister(svn_repos_parse_fns2_t)
-
-def svn_repos_parse_dumpstream2(*args):
- """
- svn_repos_parse_dumpstream2(svn_stream_t stream, svn_repos_parse_fns2_t parse_fns,
- void parse_baton, svn_cancel_func_t cancel_func,
- apr_pool_t pool) -> svn_error_t
- """
- return _repos.svn_repos_parse_dumpstream2(*args)
-
-def svn_repos_get_fs_build_parser3(*args):
- """
- svn_repos_get_fs_build_parser3(svn_repos_t repos, svn_boolean_t use_history, svn_boolean_t validate_props,
- enum svn_repos_load_uuid uuid_action,
- char parent_dir, svn_repos_notify_func_t notify_func,
- void notify_baton,
- apr_pool_t pool) -> svn_error_t
- """
- return _repos.svn_repos_get_fs_build_parser3(*args)
-
-def svn_repos_get_fs_build_parser2(*args):
- """
- svn_repos_get_fs_build_parser2(svn_repos_t repos, svn_boolean_t use_history, enum svn_repos_load_uuid uuid_action,
- svn_stream_t outstream,
- char parent_dir, apr_pool_t pool) -> svn_error_t
- """
- return _repos.svn_repos_get_fs_build_parser2(*args)
class svn_repos_parser_fns_t:
- """Proxy of C svn_repos_parser_fns_t struct"""
+ """Proxy of C svn_repos_parse_fns_t struct"""
__swig_setmethods__ = {}
__setattr__ = lambda self, name, value: _swig_setattr(self, svn_repos_parser_fns_t, name, value)
__swig_getmethods__ = {}
@@ -1167,30 +1233,58 @@ svn_repos_parser_fns_t_swigregister = _repos.svn_repos_parser_fns_t_swigregister
svn_repos_parser_fns_t_swigregister(svn_repos_parser_fns_t)
+def svn_repos_parse_dumpstream2(*args):
+ """
+ svn_repos_parse_dumpstream2(svn_stream_t * stream, svn_repos_parse_fns2_t parse_fns, void * parse_baton, svn_cancel_func_t cancel_func,
+ apr_pool_t pool) -> svn_error_t
+ """
+ return _repos.svn_repos_parse_dumpstream2(*args)
+
def svn_repos_parse_dumpstream(*args):
"""
- svn_repos_parse_dumpstream(svn_stream_t stream, parse_fns, void parse_baton,
- svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
+ svn_repos_parse_dumpstream(svn_stream_t * stream, svn_repos_parser_fns_t parse_fns, void * parse_baton, svn_cancel_func_t cancel_func,
+ apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_parse_dumpstream(*args)
+def svn_repos_get_fs_build_parser3(*args):
+ """
+ svn_repos_get_fs_build_parser3(svn_repos_t * repos, svn_boolean_t use_history, svn_boolean_t validate_props, enum svn_repos_load_uuid uuid_action,
+ char const * parent_dir, svn_repos_notify_func_t notify_func,
+ void * notify_baton, apr_pool_t pool) -> svn_error_t
+ """
+ return _repos.svn_repos_get_fs_build_parser3(*args)
+
+def svn_repos_get_fs_build_parser2(*args):
+ """
+ svn_repos_get_fs_build_parser2(svn_repos_t * repos, svn_boolean_t use_history, enum svn_repos_load_uuid uuid_action,
+ svn_stream_t * outstream, char const * parent_dir, apr_pool_t pool) -> svn_error_t
+ """
+ return _repos.svn_repos_get_fs_build_parser2(*args)
+
def svn_repos_get_fs_build_parser(*args):
"""
- svn_repos_get_fs_build_parser(svn_repos_t repos, svn_boolean_t use_history, enum svn_repos_load_uuid uuid_action,
- svn_stream_t outstream,
- char parent_dir, apr_pool_t pool) -> svn_error_t
+ svn_repos_get_fs_build_parser(svn_repos_t * repos, svn_boolean_t use_history, enum svn_repos_load_uuid uuid_action,
+ svn_stream_t * outstream, char const * parent_dir, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_get_fs_build_parser(*args)
+def svn_repos_authz_read2(*args):
+ """svn_repos_authz_read2(char const * path, char const * groups_path, svn_boolean_t must_exist, apr_pool_t pool) -> svn_error_t"""
+ return _repos.svn_repos_authz_read2(*args)
+
def svn_repos_authz_read(*args):
- """svn_repos_authz_read(char file, svn_boolean_t must_exist, apr_pool_t pool) -> svn_error_t"""
+ """svn_repos_authz_read(char const * file, svn_boolean_t must_exist, apr_pool_t pool) -> svn_error_t"""
return _repos.svn_repos_authz_read(*args)
+def svn_repos_authz_parse(*args):
+ """svn_repos_authz_parse(svn_stream_t * stream, svn_stream_t * groups_stream, apr_pool_t pool) -> svn_error_t"""
+ return _repos.svn_repos_authz_parse(*args)
+
def svn_repos_authz_check_access(*args):
"""
- svn_repos_authz_check_access(svn_authz_t authz, char repos_name, char path, char user,
- svn_repos_authz_access_t required_access,
- apr_pool_t pool) -> svn_error_t
+ svn_repos_authz_check_access(svn_authz_t * authz, char const * repos_name, char const * path, char const * user,
+ svn_repos_authz_access_t required_access, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_authz_check_access(*args)
svn_repos_revision_access_none = _repos.svn_repos_revision_access_none
@@ -1199,14 +1293,20 @@ svn_repos_revision_access_full = _repos.svn_repos_revision_access_full
def svn_repos_check_revision_access(*args):
"""
- svn_repos_check_revision_access(svn_repos_revision_access_level_t access_level, svn_repos_t repos,
- svn_revnum_t revision, svn_repos_authz_func_t authz_read_func,
- apr_pool_t pool) -> svn_error_t
+ svn_repos_check_revision_access(svn_repos_revision_access_level_t * access_level, svn_repos_t * repos, svn_revnum_t revision,
+ svn_repos_authz_func_t authz_read_func, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_check_revision_access(*args)
+def svn_repos_fs_get_inherited_props(*args):
+ """
+ svn_repos_fs_get_inherited_props(svn_fs_root_t * root, char const * path, char const * propname, svn_repos_authz_func_t authz_read_func,
+ apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t
+ """
+ return _repos.svn_repos_fs_get_inherited_props(*args)
+
def svn_repos_remember_client_capabilities(*args):
- """svn_repos_remember_client_capabilities(svn_repos_t repos, apr_array_header_t capabilities) -> svn_error_t"""
+ """svn_repos_remember_client_capabilities(svn_repos_t * repos, apr_array_header_t capabilities) -> svn_error_t"""
return _repos.svn_repos_remember_client_capabilities(*args)
class svn_repos_t:
"""Proxy of C svn_repos_t struct"""
@@ -1315,99 +1415,131 @@ svn_authz_t_swigregister = _repos.svn_authz_t_swigregister
svn_authz_t_swigregister(svn_authz_t)
+def svn_repos_parse_fns3_invoke_magic_header_record(*args):
+ """svn_repos_parse_fns3_invoke_magic_header_record(svn_repos_parse_fns3_t _obj, int version, void * parse_baton, apr_pool_t pool) -> svn_error_t"""
+ return _repos.svn_repos_parse_fns3_invoke_magic_header_record(*args)
+
+def svn_repos_parse_fns3_invoke_uuid_record(*args):
+ """svn_repos_parse_fns3_invoke_uuid_record(svn_repos_parse_fns3_t _obj, char const * uuid, void * parse_baton, apr_pool_t pool) -> svn_error_t"""
+ return _repos.svn_repos_parse_fns3_invoke_uuid_record(*args)
+
+def svn_repos_parse_fns3_invoke_new_revision_record(*args):
+ """svn_repos_parse_fns3_invoke_new_revision_record(svn_repos_parse_fns3_t _obj, apr_hash_t headers, void * parse_baton, apr_pool_t pool) -> svn_error_t"""
+ return _repos.svn_repos_parse_fns3_invoke_new_revision_record(*args)
+
+def svn_repos_parse_fns3_invoke_new_node_record(*args):
+ """svn_repos_parse_fns3_invoke_new_node_record(svn_repos_parse_fns3_t _obj, apr_hash_t headers, void * revision_baton, apr_pool_t pool) -> svn_error_t"""
+ return _repos.svn_repos_parse_fns3_invoke_new_node_record(*args)
+
+def svn_repos_parse_fns3_invoke_set_revision_property(*args):
+ """svn_repos_parse_fns3_invoke_set_revision_property(svn_repos_parse_fns3_t _obj, void * revision_baton, char const * name, svn_string_t const * value) -> svn_error_t"""
+ return _repos.svn_repos_parse_fns3_invoke_set_revision_property(*args)
+
+def svn_repos_parse_fns3_invoke_set_node_property(*args):
+ """svn_repos_parse_fns3_invoke_set_node_property(svn_repos_parse_fns3_t _obj, void * node_baton, char const * name, svn_string_t const * value) -> svn_error_t"""
+ return _repos.svn_repos_parse_fns3_invoke_set_node_property(*args)
+
+def svn_repos_parse_fns3_invoke_delete_node_property(*args):
+ """svn_repos_parse_fns3_invoke_delete_node_property(svn_repos_parse_fns3_t _obj, void * node_baton, char const * name) -> svn_error_t"""
+ return _repos.svn_repos_parse_fns3_invoke_delete_node_property(*args)
+
+def svn_repos_parse_fns3_invoke_remove_node_props(*args):
+ """svn_repos_parse_fns3_invoke_remove_node_props(svn_repos_parse_fns3_t _obj, void * node_baton) -> svn_error_t"""
+ return _repos.svn_repos_parse_fns3_invoke_remove_node_props(*args)
+
+def svn_repos_parse_fns3_invoke_set_fulltext(*args):
+ """svn_repos_parse_fns3_invoke_set_fulltext(svn_repos_parse_fns3_t _obj, void * node_baton) -> svn_error_t"""
+ return _repos.svn_repos_parse_fns3_invoke_set_fulltext(*args)
+
+def svn_repos_parse_fns3_invoke_apply_textdelta(*args):
+ """svn_repos_parse_fns3_invoke_apply_textdelta(svn_repos_parse_fns3_t _obj, void * node_baton) -> svn_error_t"""
+ return _repos.svn_repos_parse_fns3_invoke_apply_textdelta(*args)
+
+def svn_repos_parse_fns3_invoke_close_node(*args):
+ """svn_repos_parse_fns3_invoke_close_node(svn_repos_parse_fns3_t _obj, void * node_baton) -> svn_error_t"""
+ return _repos.svn_repos_parse_fns3_invoke_close_node(*args)
+
+def svn_repos_parse_fns3_invoke_close_revision(*args):
+ """svn_repos_parse_fns3_invoke_close_revision(svn_repos_parse_fns3_t _obj, void * revision_baton) -> svn_error_t"""
+ return _repos.svn_repos_parse_fns3_invoke_close_revision(*args)
+
def svn_repos_parse_fns2_invoke_new_revision_record(*args):
- """
- svn_repos_parse_fns2_invoke_new_revision_record(svn_repos_parse_fns2_t _obj, apr_hash_t headers, void parse_baton,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_repos_parse_fns2_invoke_new_revision_record(svn_repos_parse_fns2_t _obj, apr_hash_t headers, void * parse_baton, apr_pool_t pool) -> svn_error_t"""
return _repos.svn_repos_parse_fns2_invoke_new_revision_record(*args)
def svn_repos_parse_fns2_invoke_uuid_record(*args):
- """
- svn_repos_parse_fns2_invoke_uuid_record(svn_repos_parse_fns2_t _obj, char uuid, void parse_baton,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_repos_parse_fns2_invoke_uuid_record(svn_repos_parse_fns2_t _obj, char const * uuid, void * parse_baton, apr_pool_t pool) -> svn_error_t"""
return _repos.svn_repos_parse_fns2_invoke_uuid_record(*args)
def svn_repos_parse_fns2_invoke_new_node_record(*args):
- """
- svn_repos_parse_fns2_invoke_new_node_record(svn_repos_parse_fns2_t _obj, apr_hash_t headers, void revision_baton,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_repos_parse_fns2_invoke_new_node_record(svn_repos_parse_fns2_t _obj, apr_hash_t headers, void * revision_baton, apr_pool_t pool) -> svn_error_t"""
return _repos.svn_repos_parse_fns2_invoke_new_node_record(*args)
def svn_repos_parse_fns2_invoke_set_revision_property(*args):
- """
- svn_repos_parse_fns2_invoke_set_revision_property(svn_repos_parse_fns2_t _obj, void revision_baton, char name,
- svn_string_t value) -> svn_error_t
- """
+ """svn_repos_parse_fns2_invoke_set_revision_property(svn_repos_parse_fns2_t _obj, void * revision_baton, char const * name, svn_string_t const * value) -> svn_error_t"""
return _repos.svn_repos_parse_fns2_invoke_set_revision_property(*args)
def svn_repos_parse_fns2_invoke_set_node_property(*args):
- """
- svn_repos_parse_fns2_invoke_set_node_property(svn_repos_parse_fns2_t _obj, void node_baton, char name,
- svn_string_t value) -> svn_error_t
- """
+ """svn_repos_parse_fns2_invoke_set_node_property(svn_repos_parse_fns2_t _obj, void * node_baton, char const * name, svn_string_t const * value) -> svn_error_t"""
return _repos.svn_repos_parse_fns2_invoke_set_node_property(*args)
def svn_repos_parse_fns2_invoke_delete_node_property(*args):
- """svn_repos_parse_fns2_invoke_delete_node_property(svn_repos_parse_fns2_t _obj, void node_baton, char name) -> svn_error_t"""
+ """svn_repos_parse_fns2_invoke_delete_node_property(svn_repos_parse_fns2_t _obj, void * node_baton, char const * name) -> svn_error_t"""
return _repos.svn_repos_parse_fns2_invoke_delete_node_property(*args)
def svn_repos_parse_fns2_invoke_remove_node_props(*args):
- """svn_repos_parse_fns2_invoke_remove_node_props(svn_repos_parse_fns2_t _obj, void node_baton) -> svn_error_t"""
+ """svn_repos_parse_fns2_invoke_remove_node_props(svn_repos_parse_fns2_t _obj, void * node_baton) -> svn_error_t"""
return _repos.svn_repos_parse_fns2_invoke_remove_node_props(*args)
def svn_repos_parse_fns2_invoke_set_fulltext(*args):
- """svn_repos_parse_fns2_invoke_set_fulltext(svn_repos_parse_fns2_t _obj, void node_baton) -> svn_error_t"""
+ """svn_repos_parse_fns2_invoke_set_fulltext(svn_repos_parse_fns2_t _obj, void * node_baton) -> svn_error_t"""
return _repos.svn_repos_parse_fns2_invoke_set_fulltext(*args)
def svn_repos_parse_fns2_invoke_apply_textdelta(*args):
- """svn_repos_parse_fns2_invoke_apply_textdelta(svn_repos_parse_fns2_t _obj, void node_baton) -> svn_error_t"""
+ """svn_repos_parse_fns2_invoke_apply_textdelta(svn_repos_parse_fns2_t _obj, void * node_baton) -> svn_error_t"""
return _repos.svn_repos_parse_fns2_invoke_apply_textdelta(*args)
def svn_repos_parse_fns2_invoke_close_node(*args):
- """svn_repos_parse_fns2_invoke_close_node(svn_repos_parse_fns2_t _obj, void node_baton) -> svn_error_t"""
+ """svn_repos_parse_fns2_invoke_close_node(svn_repos_parse_fns2_t _obj, void * node_baton) -> svn_error_t"""
return _repos.svn_repos_parse_fns2_invoke_close_node(*args)
def svn_repos_parse_fns2_invoke_close_revision(*args):
- """svn_repos_parse_fns2_invoke_close_revision(svn_repos_parse_fns2_t _obj, void revision_baton) -> svn_error_t"""
+ """svn_repos_parse_fns2_invoke_close_revision(svn_repos_parse_fns2_t _obj, void * revision_baton) -> svn_error_t"""
return _repos.svn_repos_parse_fns2_invoke_close_revision(*args)
def svn_repos_invoke_authz_func(*args):
"""
- svn_repos_invoke_authz_func(svn_repos_authz_func_t _obj, svn_fs_root_t root, char path,
- void baton, apr_pool_t pool) -> svn_error_t
+ svn_repos_invoke_authz_func(svn_repos_authz_func_t _obj, svn_fs_root_t * root, char const * path, void * baton,
+ apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_invoke_authz_func(*args)
def svn_repos_invoke_authz_callback(*args):
"""
- svn_repos_invoke_authz_callback(svn_repos_authz_callback_t _obj, svn_repos_authz_access_t required,
- svn_fs_root_t root, char path,
- void baton, apr_pool_t pool) -> svn_error_t
+ svn_repos_invoke_authz_callback(svn_repos_authz_callback_t _obj, svn_repos_authz_access_t required, svn_fs_root_t * root,
+ char const * path, void * baton, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_invoke_authz_callback(*args)
def svn_repos_invoke_file_rev_handler(*args):
"""
- svn_repos_invoke_file_rev_handler(svn_repos_file_rev_handler_t _obj, void baton, char path,
- svn_revnum_t rev, apr_hash_t rev_props,
- apr_array_header_t prop_diffs, apr_pool_t pool) -> svn_error_t
+ svn_repos_invoke_file_rev_handler(svn_repos_file_rev_handler_t _obj, void * baton, char const * path, svn_revnum_t rev,
+ apr_hash_t rev_props, apr_array_header_t prop_diffs, apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_invoke_file_rev_handler(*args)
def svn_repos_invoke_notify_func(*args):
- """
- svn_repos_invoke_notify_func(svn_repos_notify_func_t _obj, void baton, svn_repos_notify_t notify,
- apr_pool_t scratch_pool)
- """
+ """svn_repos_invoke_notify_func(svn_repos_notify_func_t _obj, void * baton, svn_repos_notify_t notify, apr_pool_t scratch_pool)"""
return _repos.svn_repos_invoke_notify_func(*args)
+def svn_repos_invoke_freeze_func(*args):
+ """svn_repos_invoke_freeze_func(svn_repos_freeze_func_t _obj, void * baton, apr_pool_t pool) -> svn_error_t"""
+ return _repos.svn_repos_invoke_freeze_func(*args)
+
def svn_repos_invoke_history_func(*args):
"""
- svn_repos_invoke_history_func(svn_repos_history_func_t _obj, void baton, char path,
- svn_revnum_t revision, apr_pool_t pool) -> svn_error_t
+ svn_repos_invoke_history_func(svn_repos_history_func_t _obj, void * baton, char const * path, svn_revnum_t revision,
+ apr_pool_t pool) -> svn_error_t
"""
return _repos.svn_repos_invoke_history_func(*args)
class svn_repos_authz_func_t:
@@ -1634,6 +1766,62 @@ class svn_repos_notify_func_t:
svn_repos_notify_func_t_swigregister = _repos.svn_repos_notify_func_t_swigregister
svn_repos_notify_func_t_swigregister(svn_repos_notify_func_t)
+class svn_repos_freeze_func_t:
+ """Proxy of C svn_repos_freeze_func_t struct"""
+ __swig_setmethods__ = {}
+ __setattr__ = lambda self, name, value: _swig_setattr(self, svn_repos_freeze_func_t, name, value)
+ __swig_getmethods__ = {}
+ __getattr__ = lambda self, name: _swig_getattr(self, svn_repos_freeze_func_t, name)
+ def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+ __repr__ = _swig_repr
+ def set_parent_pool(self, parent_pool=None):
+ """Create a new proxy object for svn_repos_freeze_func_t"""
+ import libsvn.core, weakref
+ self.__dict__["_parent_pool"] = \
+ parent_pool or libsvn.core.application_pool;
+ if self.__dict__["_parent_pool"]:
+ self.__dict__["_is_valid"] = weakref.ref(
+ self.__dict__["_parent_pool"]._is_valid)
+
+ def assert_valid(self):
+ """Assert that this object is using valid pool memory"""
+ if "_is_valid" in self.__dict__:
+ assert self.__dict__["_is_valid"](), "Variable has already been deleted"
+
+ def __getattr__(self, name):
+ """Get an attribute from this object"""
+ self.assert_valid()
+
+ value = _swig_getattr(self, self.__class__, name)
+
+
+
+ members = self.__dict__.get("_members")
+ if members is not None:
+ _copy_metadata_deep(value, members.get(name))
+
+
+ _assert_valid_deep(value)
+
+ return value
+
+ def __setattr__(self, name, value):
+ """Set an attribute on this object"""
+ self.assert_valid()
+
+
+
+
+ self.__dict__.setdefault("_members",{})[name] = value
+
+ return _swig_setattr(self, self.__class__, name, value)
+
+ def __call__(self, *args):
+ return svn_repos_invoke_freeze_func(self, *args)
+
+svn_repos_freeze_func_t_swigregister = _repos.svn_repos_freeze_func_t_swigregister
+svn_repos_freeze_func_t_swigregister(svn_repos_freeze_func_t)
+
class svn_repos_history_func_t:
"""Proxy of C svn_repos_history_func_t struct"""
__swig_setmethods__ = {}
diff --git a/subversion/bindings/swig/python/svn/client.py b/subversion/bindings/swig/python/svn/client.py
index 75883af..5fb7aa5 100644
--- a/subversion/bindings/swig/python/svn/client.py
+++ b/subversion/bindings/swig/python/svn/client.py
@@ -27,4 +27,5 @@ from libsvn.client import *
from svn.core import _unprefix_names
_unprefix_names(locals(), 'svn_client_')
_unprefix_names(locals(), 'SVN_CLIENT_')
+__all__ = filter(lambda x: x.lower().startswith('svn_'), locals().keys())
del _unprefix_names
diff --git a/subversion/bindings/swig/python/svn/core.py b/subversion/bindings/swig/python/svn/core.py
index 9fd3acf..386581c 100644
--- a/subversion/bindings/swig/python/svn/core.py
+++ b/subversion/bindings/swig/python/svn/core.py
@@ -27,6 +27,44 @@ from libsvn.core import *
import libsvn.core as _libsvncore
import atexit as _atexit
import sys
+__all__ = [
+ # Symbols that 'import *' used to pull (in 1.7)
+ 'Pool',
+ 'SVNSYNC_PROP_CURRENTLY_COPYING',
+ 'SVNSYNC_PROP_FROM_URL',
+ 'SVNSYNC_PROP_FROM_UUID',
+ 'SVNSYNC_PROP_LAST_MERGED_REV',
+ 'SVNSYNC_PROP_LOCK',
+ 'SVNSYNC_PROP_PREFIX',
+ 'SubversionException',
+ # 'apr_array_header_t',
+ # 'apr_file_open_stderr',
+ # 'apr_file_open_stdout',
+ # 'apr_file_t',
+ # 'apr_hash_t',
+ # 'apr_initialize',
+ # 'apr_pool_clear',
+ # 'apr_pool_destroy',
+ # 'apr_pool_t',
+ # 'apr_terminate',
+ # 'apr_time_ansi_put',
+ # 'run_app',
+
+ # Symbols defined explicitly below.
+ 'SVN_IGNORED_REVNUM',
+ 'SVN_INVALID_REVNUM',
+ 'svn_path_compare_paths',
+ 'svn_mergeinfo_merge',
+ 'svn_mergeinfo_sort',
+ 'svn_rangelist_merge',
+ 'svn_rangelist_reverse',
+ # 'Stream',
+ # 'apr_initialize',
+ # 'apr_terminate',
+ 'svn_pool_create',
+ 'svn_pool_destroy',
+ 'svn_pool_clear',
+]
class SubversionException(Exception):
diff --git a/subversion/bindings/swig/python/svn/delta.py b/subversion/bindings/swig/python/svn/delta.py
index 3a00157..664974b 100644
--- a/subversion/bindings/swig/python/svn/delta.py
+++ b/subversion/bindings/swig/python/svn/delta.py
@@ -27,12 +27,9 @@ from libsvn.delta import *
from svn.core import _unprefix_names
_unprefix_names(locals(), 'svn_delta_')
_unprefix_names(locals(), 'svn_txdelta_', 'tx_')
+__all__ = filter(lambda x: x.lower().startswith('svn_'), locals().keys())
del _unprefix_names
-# Force our accessor since it appears that there isn't a more civilized way
-# to make SWIG use it.
-svn_txdelta_window_t.ops = property(svn_txdelta_window_t_ops_get)
-
class Editor:
def set_target_revision(self, target_revision, pool=None):
diff --git a/subversion/bindings/swig/python/svn/diff.py b/subversion/bindings/swig/python/svn/diff.py
index 11069ec..d7317ab 100644
--- a/subversion/bindings/swig/python/svn/diff.py
+++ b/subversion/bindings/swig/python/svn/diff.py
@@ -26,4 +26,5 @@
from libsvn.diff import *
from svn.core import _unprefix_names
_unprefix_names(locals(), 'svn_diff_')
+__all__ = filter(lambda x: x.lower().startswith('svn_'), locals().keys())
del _unprefix_names
diff --git a/subversion/bindings/swig/python/svn/fs.py b/subversion/bindings/swig/python/svn/fs.py
index e82e495..9893880 100644
--- a/subversion/bindings/swig/python/svn/fs.py
+++ b/subversion/bindings/swig/python/svn/fs.py
@@ -27,6 +27,7 @@ from libsvn.fs import *
from svn.core import _unprefix_names, Pool
_unprefix_names(locals(), 'svn_fs_')
_unprefix_names(locals(), 'SVN_FS_')
+__all__ = filter(lambda x: x.lower().startswith('svn_'), locals().keys())
del _unprefix_names
@@ -114,7 +115,7 @@ class FileDiff:
+ [self.tempfile1, self.tempfile2]
# open the pipe, and return the file object for reading from the child.
- p = _subprocess.Popen(cmd, stdout=_subprocess.PIPE,
+ p = _subprocess.Popen(cmd, stdout=_subprocess.PIPE, bufsize=-1,
close_fds=_sys.platform != "win32")
return p.stdout
diff --git a/subversion/bindings/swig/python/svn/ra.py b/subversion/bindings/swig/python/svn/ra.py
index 0fefe5f..6cfd61d 100644
--- a/subversion/bindings/swig/python/svn/ra.py
+++ b/subversion/bindings/swig/python/svn/ra.py
@@ -27,6 +27,7 @@ from libsvn.ra import *
from svn.core import _unprefix_names
_unprefix_names(locals(), 'svn_ra_')
_unprefix_names(locals(), 'SVN_RA_')
+__all__ = filter(lambda x: x.lower().startswith('svn_'), locals().keys())
del _unprefix_names
class Callbacks:
diff --git a/subversion/bindings/swig/python/svn/repos.py b/subversion/bindings/swig/python/svn/repos.py
index 91e7fe4..f5e5944 100644
--- a/subversion/bindings/swig/python/svn/repos.py
+++ b/subversion/bindings/swig/python/svn/repos.py
@@ -27,6 +27,7 @@ from libsvn.repos import *
from svn.core import _unprefix_names, Pool
_unprefix_names(locals(), 'svn_repos_')
_unprefix_names(locals(), 'SVN_REPOS_')
+__all__ = filter(lambda x: x.lower().startswith('svn_'), locals().keys())
del _unprefix_names
@@ -88,7 +89,7 @@ class ChangeCollector(_svndelta.Editor):
At this time, two ChangedPath objects will be passed for a path that had
been replaced in the revision/transaction. This may change in the future.
-
+
### Can't we deduce FS_PTR from ROOT?
### POOL is unused
diff --git a/subversion/bindings/swig/python/svn/wc.py b/subversion/bindings/swig/python/svn/wc.py
index 690ad7e..bb491b5 100644
--- a/subversion/bindings/swig/python/svn/wc.py
+++ b/subversion/bindings/swig/python/svn/wc.py
@@ -27,6 +27,7 @@ from libsvn.wc import *
from svn.core import _unprefix_names
_unprefix_names(locals(), 'svn_wc_')
_unprefix_names(locals(), 'SVN_WC_')
+__all__ = filter(lambda x: x.lower().startswith('svn_'), locals().keys())
del _unprefix_names
diff --git a/subversion/bindings/swig/python/svn_client.c b/subversion/bindings/swig/python/svn_client.c
index 2fd068c..b823730 100644
--- a/subversion/bindings/swig/python/svn_client.c
+++ b/subversion/bindings/swig/python/svn_client.c
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -733,6 +733,7 @@ SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) {
#define PyInt_Check(x) PyLong_Check(x)
#define PyInt_AsLong(x) PyLong_AsLong(x)
#define PyInt_FromLong(x) PyLong_FromLong(x)
+#define PyInt_FromSize_t(x) PyLong_FromSize_t(x)
#define PyString_Check(name) PyBytes_Check(name)
#define PyString_FromString(x) PyUnicode_FromString(x)
#define PyString_Format(fmt, args) PyUnicode_Format(fmt, args)
@@ -902,6 +903,10 @@ static long PyNumber_AsSsize_t (PyObject *x, void *SWIGUNUSEDPARM(exc))
}
#endif
+#if PY_VERSION_HEX < 0x02050000
+#define PyInt_FromSize_t(x) PyInt_FromLong((long)x)
+#endif
+
#if PY_VERSION_HEX < 0x02040000
#define Py_VISIT(op) \
do { \
@@ -1173,7 +1178,7 @@ SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self),
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Python_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Python_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Python_SetModule(pointer)
#define SWIG_NewClientData(obj) SwigPyClientData_New(obj)
@@ -1199,7 +1204,7 @@ SWIG_Python_SetErrorObj(PyObject *errtype, PyObject *obj) {
SWIGINTERN void
SWIG_Python_SetErrorMsg(PyObject *errtype, const char *msg) {
SWIG_PYTHON_THREAD_BEGIN_BLOCK;
- PyErr_SetString(errtype, (char *) msg);
+ PyErr_SetString(errtype, msg);
SWIG_PYTHON_THREAD_END_BLOCK;
}
@@ -1218,7 +1223,11 @@ SwigPyBuiltin_AddPublicSymbol(PyObject *seq, const char *key) {
SWIGINTERN void
SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *name, PyObject *obj) {
+#if PY_VERSION_HEX < 0x02030000
PyDict_SetItemString(d, (char *)name, obj);
+#else
+ PyDict_SetItemString(d, name, obj);
+#endif
Py_DECREF(obj);
if (public_interface)
SwigPyBuiltin_AddPublicSymbol(public_interface, name);
@@ -1228,7 +1237,11 @@ SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *nam
SWIGINTERN void
SWIG_Python_SetConstant(PyObject *d, const char *name, PyObject *obj) {
+#if PY_VERSION_HEX < 0x02030000
PyDict_SetItemString(d, (char *)name, obj);
+#else
+ PyDict_SetItemString(d, name, obj);
+#endif
Py_DECREF(obj);
}
@@ -1549,7 +1562,7 @@ SwigPyObject_repr(SwigPyObject *v, PyObject *args)
#endif
{
const char *name = SWIG_TypePrettyName(v->ty);
- PyObject *repr = SWIG_Python_str_FromFormat("<Swig Object of type '%s' at %p>", name, (void *)v);
+ PyObject *repr = SWIG_Python_str_FromFormat("<Swig Object of type '%s' at %p>", (name ? name : "unknown"), (void *)v);
if (v->next) {
# ifdef METH_NOARGS
PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next);
@@ -1753,8 +1766,10 @@ SwigPyObject_own(PyObject *v, PyObject *args)
PyObject *val = 0;
#if (PY_VERSION_HEX < 0x02020000)
if (!PyArg_ParseTuple(args,(char *)"|O:own",&val))
-#else
+#elif (PY_VERSION_HEX < 0x02050000)
if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val))
+#else
+ if (!PyArg_UnpackTuple(args, "own", 0, 1, &val))
#endif
{
return NULL;
@@ -2449,23 +2464,29 @@ SWIG_Python_NewShadowInstance(SwigPyClientData *data, PyObject *swig_this)
} else {
#if PY_VERSION_HEX >= 0x03000000
inst = PyBaseObject_Type.tp_new((PyTypeObject*) data->newargs, Py_None, Py_None);
- PyObject_SetAttr(inst, SWIG_This(), swig_this);
- Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG;
+ if (inst) {
+ PyObject_SetAttr(inst, SWIG_This(), swig_this);
+ Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG;
+ }
#else
PyObject *dict = PyDict_New();
- PyDict_SetItem(dict, SWIG_This(), swig_this);
- inst = PyInstance_NewRaw(data->newargs, dict);
- Py_DECREF(dict);
+ if (dict) {
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ inst = PyInstance_NewRaw(data->newargs, dict);
+ Py_DECREF(dict);
+ }
#endif
}
return inst;
#else
#if (PY_VERSION_HEX >= 0x02010000)
- PyObject *inst;
+ PyObject *inst = 0;
PyObject *dict = PyDict_New();
- PyDict_SetItem(dict, SWIG_This(), swig_this);
- inst = PyInstance_NewRaw(data->newargs, dict);
- Py_DECREF(dict);
+ if (dict) {
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ inst = PyInstance_NewRaw(data->newargs, dict);
+ Py_DECREF(dict);
+ }
return (PyObject *) inst;
#else
PyInstanceObject *inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type);
@@ -2516,7 +2537,7 @@ SWIG_Python_SetSwigThis(PyObject *inst, PyObject *swig_this)
SWIGINTERN PyObject *
SWIG_Python_InitShadowInstance(PyObject *args) {
PyObject *obj[2];
- if (!SWIG_Python_UnpackTuple(args,(char*)"swiginit", 2, 2, obj)) {
+ if (!SWIG_Python_UnpackTuple(args, "swiginit", 2, 2, obj)) {
return NULL;
} else {
SwigPyObject *sthis = SWIG_Python_GetSwigThis(obj[0]);
@@ -2572,12 +2593,10 @@ SWIG_Python_NewPointerObj(PyObject *self, void *ptr, swig_type_info *type, int f
assert(!(flags & SWIG_BUILTIN_TP_INIT));
robj = SwigPyObject_New(ptr, type, own);
- if (clientdata && !(flags & SWIG_POINTER_NOSHADOW)) {
+ if (robj && clientdata && !(flags & SWIG_POINTER_NOSHADOW)) {
PyObject *inst = SWIG_Python_NewShadowInstance(clientdata, robj);
- if (inst) {
- Py_DECREF(robj);
- robj = inst;
- }
+ Py_DECREF(robj);
+ robj = inst;
}
return robj;
}
@@ -2598,7 +2617,7 @@ void *SWIG_ReturnGlobalTypeList(void *);
#endif
SWIGRUNTIME swig_module_info *
-SWIG_Python_GetModule(void) {
+SWIG_Python_GetModule(void *SWIGUNUSEDPARM(clientdata)) {
static void *type_pointer = (void *)0;
/* first check if module already created */
if (!type_pointer) {
@@ -2724,7 +2743,7 @@ SWIG_Python_TypeQuery(const char *type)
descriptor = (swig_type_info *) PyCObject_AsVoidPtr(obj);
#endif
} else {
- swig_module_info *swig_module = SWIG_Python_GetModule();
+ swig_module_info *swig_module = SWIG_GetModule(0);
descriptor = SWIG_TypeQueryModule(swig_module, swig_module, type);
if (descriptor) {
#ifdef SWIGPY_USE_CAPSULE
@@ -2792,7 +2811,7 @@ SwigPyObject_GetDesc(PyObject *self)
{
SwigPyObject *v = (SwigPyObject *)self;
swig_type_info *ty = v ? v->ty : 0;
- return ty ? ty->str : (char*)"";
+ return ty ? ty->str : "";
}
SWIGRUNTIME void
@@ -2849,6 +2868,7 @@ SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int SWIGUNUSEDPARM(arg
return result;
}
+#ifdef SWIGPYTHON_BUILTIN
SWIGRUNTIME int
SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
PyTypeObject *tp = obj->ob_type;
@@ -2857,15 +2877,15 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
descrsetfunc f;
int res;
-#ifdef Py_USING_UNICODE
+# ifdef Py_USING_UNICODE
if (PyString_Check(name)) {
name = PyUnicode_Decode(PyString_AsString(name), PyString_Size(name), NULL, NULL);
if (!name)
return -1;
} else if (!PyUnicode_Check(name))
-#else
+# else
if (!PyString_Check(name))
-#endif
+# endif
{
PyErr_Format(PyExc_TypeError, "attribute name must be string, not '%.200s'", name->ob_type->tp_name);
return -1;
@@ -2900,6 +2920,7 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
Py_DECREF(name);
return res;
}
+#endif
#ifdef __cplusplus
@@ -2945,152 +2966,164 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
#define SWIGTYPE_p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[23]
#define SWIGTYPE_p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[24]
#define SWIGTYPE_p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void swig_types[25]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[26]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[27]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t swig_types[28]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t swig_types[29]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[30]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t swig_types[31]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void swig_types[32]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_struct_svn_wc_status_t__void swig_types[33]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t swig_types[34]
-#define SWIGTYPE_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void swig_types[35]
-#define SWIGTYPE_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[36]
-#define SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t swig_types[37]
-#define SWIGTYPE_p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[38]
-#define SWIGTYPE_p_int swig_types[39]
-#define SWIGTYPE_p_long swig_types[40]
-#define SWIGTYPE_p_p_apr_array_header_t swig_types[41]
-#define SWIGTYPE_p_p_apr_hash_t swig_types[42]
-#define SWIGTYPE_p_p_char swig_types[43]
-#define SWIGTYPE_p_p_f_apr_off_t_apr_off_t_p_void_p_apr_pool_t__void swig_types[44]
-#define SWIGTYPE_p_p_f_p_p_q_const__char_p_p_q_const__char_p_apr_array_header_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[45]
-#define SWIGTYPE_p_p_f_p_p_q_const__char_p_p_q_const__char_p_q_const__apr_array_header_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[46]
-#define SWIGTYPE_p_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description2_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t swig_types[47]
-#define SWIGTYPE_p_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[48]
-#define SWIGTYPE_p_p_f_p_q_const__svn_client_diff_summarize_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[49]
-#define SWIGTYPE_p_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[50]
-#define SWIGTYPE_p_p_f_p_void__p_svn_error_t swig_types[51]
-#define SWIGTYPE_p_p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[52]
-#define SWIGTYPE_p_p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[53]
-#define SWIGTYPE_p_p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void swig_types[54]
-#define SWIGTYPE_p_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[55]
-#define SWIGTYPE_p_p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t swig_types[56]
-#define SWIGTYPE_p_p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t swig_types[57]
-#define SWIGTYPE_p_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[58]
-#define SWIGTYPE_p_p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t swig_types[59]
-#define SWIGTYPE_p_p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t swig_types[60]
-#define SWIGTYPE_p_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void swig_types[61]
-#define SWIGTYPE_p_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[62]
-#define SWIGTYPE_p_p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[63]
-#define SWIGTYPE_p_p_svn_auth_provider_object_t swig_types[64]
-#define SWIGTYPE_p_p_svn_client_commit_info_t swig_types[65]
-#define SWIGTYPE_p_p_svn_client_commit_item3_t swig_types[66]
-#define SWIGTYPE_p_p_svn_client_ctx_t swig_types[67]
-#define SWIGTYPE_p_p_svn_commit_info_t swig_types[68]
-#define SWIGTYPE_p_p_svn_ra_session_t swig_types[69]
-#define SWIGTYPE_p_p_svn_string_t swig_types[70]
-#define SWIGTYPE_p_svn_auth_baton_t swig_types[71]
-#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[72]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[73]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[74]
-#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[75]
-#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[76]
-#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[77]
-#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[78]
-#define SWIGTYPE_p_svn_auth_provider_t swig_types[79]
-#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[80]
-#define SWIGTYPE_p_svn_client_commit_info_t swig_types[81]
-#define SWIGTYPE_p_svn_client_commit_item2_t swig_types[82]
-#define SWIGTYPE_p_svn_client_commit_item3_t swig_types[83]
-#define SWIGTYPE_p_svn_client_commit_item_t swig_types[84]
-#define SWIGTYPE_p_svn_client_copy_source_t swig_types[85]
-#define SWIGTYPE_p_svn_client_ctx_t swig_types[86]
-#define SWIGTYPE_p_svn_client_diff_summarize_kind_t swig_types[87]
-#define SWIGTYPE_p_svn_client_diff_summarize_t swig_types[88]
-#define SWIGTYPE_p_svn_client_info2_t swig_types[89]
-#define SWIGTYPE_p_svn_client_proplist_item_t swig_types[90]
-#define SWIGTYPE_p_svn_client_status_t swig_types[91]
-#define SWIGTYPE_p_svn_commit_info_t swig_types[92]
-#define SWIGTYPE_p_svn_config_t swig_types[93]
-#define SWIGTYPE_p_svn_delta_editor_t swig_types[94]
-#define SWIGTYPE_p_svn_depth_t swig_types[95]
-#define SWIGTYPE_p_svn_diff_file_options_t swig_types[96]
-#define SWIGTYPE_p_svn_dirent_t swig_types[97]
-#define SWIGTYPE_p_svn_errno_t swig_types[98]
-#define SWIGTYPE_p_svn_error_t swig_types[99]
-#define SWIGTYPE_p_svn_info_t swig_types[100]
-#define SWIGTYPE_p_svn_io_dirent2_t swig_types[101]
-#define SWIGTYPE_p_svn_io_dirent_t swig_types[102]
-#define SWIGTYPE_p_svn_io_file_del_t swig_types[103]
-#define SWIGTYPE_p_svn_location_segment_t swig_types[104]
-#define SWIGTYPE_p_svn_lock_t swig_types[105]
-#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[106]
-#define SWIGTYPE_p_svn_log_changed_path_t swig_types[107]
-#define SWIGTYPE_p_svn_log_entry_t swig_types[108]
-#define SWIGTYPE_p_svn_merge_range_t swig_types[109]
-#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[110]
-#define SWIGTYPE_p_svn_node_kind_t swig_types[111]
-#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[112]
-#define SWIGTYPE_p_svn_opt_revision_t swig_types[113]
-#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[114]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[115]
-#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[116]
-#define SWIGTYPE_p_svn_prop_kind swig_types[117]
-#define SWIGTYPE_p_svn_ra_callbacks2_t swig_types[118]
-#define SWIGTYPE_p_svn_ra_callbacks_t swig_types[119]
-#define SWIGTYPE_p_svn_ra_plugin_t swig_types[120]
-#define SWIGTYPE_p_svn_ra_reporter2_t swig_types[121]
-#define SWIGTYPE_p_svn_ra_reporter3_t swig_types[122]
-#define SWIGTYPE_p_svn_ra_reporter_t swig_types[123]
-#define SWIGTYPE_p_svn_ra_session_t swig_types[124]
-#define SWIGTYPE_p_svn_stream_mark_t swig_types[125]
-#define SWIGTYPE_p_svn_stream_t swig_types[126]
-#define SWIGTYPE_p_svn_string_t swig_types[127]
-#define SWIGTYPE_p_svn_stringbuf_t swig_types[128]
-#define SWIGTYPE_p_svn_tristate_t swig_types[129]
-#define SWIGTYPE_p_svn_txdelta_op_t swig_types[130]
-#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[131]
-#define SWIGTYPE_p_svn_txdelta_window_t swig_types[132]
-#define SWIGTYPE_p_svn_version_checklist_t swig_types[133]
-#define SWIGTYPE_p_svn_version_t swig_types[134]
-#define SWIGTYPE_p_svn_wc_adm_access_t swig_types[135]
-#define SWIGTYPE_p_svn_wc_committed_queue_t swig_types[136]
-#define SWIGTYPE_p_svn_wc_conflict_action_t swig_types[137]
-#define SWIGTYPE_p_svn_wc_conflict_choice_t swig_types[138]
-#define SWIGTYPE_p_svn_wc_conflict_description2_t swig_types[139]
-#define SWIGTYPE_p_svn_wc_conflict_description_t swig_types[140]
-#define SWIGTYPE_p_svn_wc_conflict_kind_t swig_types[141]
-#define SWIGTYPE_p_svn_wc_conflict_reason_t swig_types[142]
-#define SWIGTYPE_p_svn_wc_conflict_result_t swig_types[143]
-#define SWIGTYPE_p_svn_wc_conflict_version_t swig_types[144]
-#define SWIGTYPE_p_svn_wc_context_t swig_types[145]
-#define SWIGTYPE_p_svn_wc_diff_callbacks2_t swig_types[146]
-#define SWIGTYPE_p_svn_wc_diff_callbacks3_t swig_types[147]
-#define SWIGTYPE_p_svn_wc_diff_callbacks4_t swig_types[148]
-#define SWIGTYPE_p_svn_wc_diff_callbacks_t swig_types[149]
-#define SWIGTYPE_p_svn_wc_entry_callbacks2_t swig_types[150]
-#define SWIGTYPE_p_svn_wc_entry_callbacks_t swig_types[151]
-#define SWIGTYPE_p_svn_wc_entry_t swig_types[152]
-#define SWIGTYPE_p_svn_wc_external_item2_t swig_types[153]
-#define SWIGTYPE_p_svn_wc_external_item_t swig_types[154]
-#define SWIGTYPE_p_svn_wc_info_t swig_types[155]
-#define SWIGTYPE_p_svn_wc_merge_outcome_t swig_types[156]
-#define SWIGTYPE_p_svn_wc_notify_action_t swig_types[157]
-#define SWIGTYPE_p_svn_wc_notify_lock_state_t swig_types[158]
-#define SWIGTYPE_p_svn_wc_notify_state_t swig_types[159]
-#define SWIGTYPE_p_svn_wc_notify_t swig_types[160]
-#define SWIGTYPE_p_svn_wc_operation_t swig_types[161]
-#define SWIGTYPE_p_svn_wc_revision_status_t swig_types[162]
-#define SWIGTYPE_p_svn_wc_schedule_t swig_types[163]
-#define SWIGTYPE_p_svn_wc_status2_t swig_types[164]
-#define SWIGTYPE_p_svn_wc_status3_t swig_types[165]
-#define SWIGTYPE_p_svn_wc_status_t swig_types[166]
-#define SWIGTYPE_p_svn_wc_traversal_info_t swig_types[167]
-#define SWIGTYPE_p_unsigned_long swig_types[168]
-#define SWIGTYPE_p_void swig_types[169]
-static swig_type_info *swig_types[171];
-static swig_module_info swig_module = {swig_types, 170, 0, 0, 0, 0};
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[26]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[27]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[28]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t swig_types[29]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t swig_types[30]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[31]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[32]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t swig_types[33]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void swig_types[34]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_struct_svn_wc_status_t__void swig_types[35]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t swig_types[36]
+#define SWIGTYPE_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void swig_types[37]
+#define SWIGTYPE_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[38]
+#define SWIGTYPE_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t swig_types[39]
+#define SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t swig_types[40]
+#define SWIGTYPE_p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[41]
+#define SWIGTYPE_p_int swig_types[42]
+#define SWIGTYPE_p_long swig_types[43]
+#define SWIGTYPE_p_p_apr_array_header_t swig_types[44]
+#define SWIGTYPE_p_p_apr_hash_t swig_types[45]
+#define SWIGTYPE_p_p_char swig_types[46]
+#define SWIGTYPE_p_p_f_apr_off_t_apr_off_t_p_void_p_apr_pool_t__void swig_types[47]
+#define SWIGTYPE_p_p_f_p_p_q_const__char_p_p_q_const__char_p_apr_array_header_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[48]
+#define SWIGTYPE_p_p_f_p_p_q_const__char_p_p_q_const__char_p_q_const__apr_array_header_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[49]
+#define SWIGTYPE_p_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description2_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t swig_types[50]
+#define SWIGTYPE_p_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[51]
+#define SWIGTYPE_p_p_f_p_q_const__svn_client_diff_summarize_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[52]
+#define SWIGTYPE_p_p_f_p_void__p_svn_error_t swig_types[53]
+#define SWIGTYPE_p_p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[54]
+#define SWIGTYPE_p_p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[55]
+#define SWIGTYPE_p_p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void swig_types[56]
+#define SWIGTYPE_p_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[57]
+#define SWIGTYPE_p_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[58]
+#define SWIGTYPE_p_p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t swig_types[59]
+#define SWIGTYPE_p_p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t swig_types[60]
+#define SWIGTYPE_p_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[61]
+#define SWIGTYPE_p_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[62]
+#define SWIGTYPE_p_p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t swig_types[63]
+#define SWIGTYPE_p_p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t swig_types[64]
+#define SWIGTYPE_p_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void swig_types[65]
+#define SWIGTYPE_p_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[66]
+#define SWIGTYPE_p_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t swig_types[67]
+#define SWIGTYPE_p_p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[68]
+#define SWIGTYPE_p_p_svn_auth_provider_object_t swig_types[69]
+#define SWIGTYPE_p_p_svn_client_commit_info_t swig_types[70]
+#define SWIGTYPE_p_p_svn_client_commit_item3_t swig_types[71]
+#define SWIGTYPE_p_p_svn_client_ctx_t swig_types[72]
+#define SWIGTYPE_p_p_svn_commit_info_t swig_types[73]
+#define SWIGTYPE_p_p_svn_ra_session_t swig_types[74]
+#define SWIGTYPE_p_p_svn_string_t swig_types[75]
+#define SWIGTYPE_p_svn_auth_baton_t swig_types[76]
+#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[77]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[78]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[79]
+#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[80]
+#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[81]
+#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[82]
+#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[83]
+#define SWIGTYPE_p_svn_auth_provider_t swig_types[84]
+#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[85]
+#define SWIGTYPE_p_svn_checksum_ctx_t swig_types[86]
+#define SWIGTYPE_p_svn_checksum_kind_t swig_types[87]
+#define SWIGTYPE_p_svn_checksum_t swig_types[88]
+#define SWIGTYPE_p_svn_client_commit_info_t swig_types[89]
+#define SWIGTYPE_p_svn_client_commit_item2_t swig_types[90]
+#define SWIGTYPE_p_svn_client_commit_item3_t swig_types[91]
+#define SWIGTYPE_p_svn_client_commit_item_t swig_types[92]
+#define SWIGTYPE_p_svn_client_copy_source_t swig_types[93]
+#define SWIGTYPE_p_svn_client_ctx_t swig_types[94]
+#define SWIGTYPE_p_svn_client_diff_summarize_kind_t swig_types[95]
+#define SWIGTYPE_p_svn_client_diff_summarize_t swig_types[96]
+#define SWIGTYPE_p_svn_client_info2_t swig_types[97]
+#define SWIGTYPE_p_svn_client_proplist_item_t swig_types[98]
+#define SWIGTYPE_p_svn_client_status_t swig_types[99]
+#define SWIGTYPE_p_svn_commit_info_t swig_types[100]
+#define SWIGTYPE_p_svn_config_t swig_types[101]
+#define SWIGTYPE_p_svn_delta_editor_t swig_types[102]
+#define SWIGTYPE_p_svn_depth_t swig_types[103]
+#define SWIGTYPE_p_svn_diff_file_options_t swig_types[104]
+#define SWIGTYPE_p_svn_dirent_t swig_types[105]
+#define SWIGTYPE_p_svn_errno_t swig_types[106]
+#define SWIGTYPE_p_svn_error_t swig_types[107]
+#define SWIGTYPE_p_svn_info_t swig_types[108]
+#define SWIGTYPE_p_svn_io_dirent2_t swig_types[109]
+#define SWIGTYPE_p_svn_io_dirent_t swig_types[110]
+#define SWIGTYPE_p_svn_io_file_del_t swig_types[111]
+#define SWIGTYPE_p_svn_location_segment_t swig_types[112]
+#define SWIGTYPE_p_svn_lock_t swig_types[113]
+#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[114]
+#define SWIGTYPE_p_svn_log_changed_path_t swig_types[115]
+#define SWIGTYPE_p_svn_log_entry_t swig_types[116]
+#define SWIGTYPE_p_svn_merge_range_t swig_types[117]
+#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[118]
+#define SWIGTYPE_p_svn_node_kind_t swig_types[119]
+#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[120]
+#define SWIGTYPE_p_svn_opt_revision_t swig_types[121]
+#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[122]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[123]
+#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[124]
+#define SWIGTYPE_p_svn_prop_inherited_item_t swig_types[125]
+#define SWIGTYPE_p_svn_prop_kind swig_types[126]
+#define SWIGTYPE_p_svn_ra_callbacks2_t swig_types[127]
+#define SWIGTYPE_p_svn_ra_callbacks_t swig_types[128]
+#define SWIGTYPE_p_svn_ra_plugin_t swig_types[129]
+#define SWIGTYPE_p_svn_ra_reporter2_t swig_types[130]
+#define SWIGTYPE_p_svn_ra_reporter3_t swig_types[131]
+#define SWIGTYPE_p_svn_ra_reporter_t swig_types[132]
+#define SWIGTYPE_p_svn_ra_session_t swig_types[133]
+#define SWIGTYPE_p_svn_stream_mark_t swig_types[134]
+#define SWIGTYPE_p_svn_stream_t swig_types[135]
+#define SWIGTYPE_p_svn_string_t swig_types[136]
+#define SWIGTYPE_p_svn_stringbuf_t swig_types[137]
+#define SWIGTYPE_p_svn_tristate_t swig_types[138]
+#define SWIGTYPE_p_svn_txdelta_op_t swig_types[139]
+#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[140]
+#define SWIGTYPE_p_svn_txdelta_window_t swig_types[141]
+#define SWIGTYPE_p_svn_version_checklist_t swig_types[142]
+#define SWIGTYPE_p_svn_version_ext_linked_lib_t swig_types[143]
+#define SWIGTYPE_p_svn_version_ext_loaded_lib_t swig_types[144]
+#define SWIGTYPE_p_svn_version_extended_t swig_types[145]
+#define SWIGTYPE_p_svn_version_t swig_types[146]
+#define SWIGTYPE_p_svn_wc_adm_access_t swig_types[147]
+#define SWIGTYPE_p_svn_wc_committed_queue_t swig_types[148]
+#define SWIGTYPE_p_svn_wc_conflict_action_t swig_types[149]
+#define SWIGTYPE_p_svn_wc_conflict_choice_t swig_types[150]
+#define SWIGTYPE_p_svn_wc_conflict_description2_t swig_types[151]
+#define SWIGTYPE_p_svn_wc_conflict_description_t swig_types[152]
+#define SWIGTYPE_p_svn_wc_conflict_kind_t swig_types[153]
+#define SWIGTYPE_p_svn_wc_conflict_reason_t swig_types[154]
+#define SWIGTYPE_p_svn_wc_conflict_result_t swig_types[155]
+#define SWIGTYPE_p_svn_wc_conflict_version_t swig_types[156]
+#define SWIGTYPE_p_svn_wc_context_t swig_types[157]
+#define SWIGTYPE_p_svn_wc_diff_callbacks2_t swig_types[158]
+#define SWIGTYPE_p_svn_wc_diff_callbacks3_t swig_types[159]
+#define SWIGTYPE_p_svn_wc_diff_callbacks4_t swig_types[160]
+#define SWIGTYPE_p_svn_wc_diff_callbacks_t swig_types[161]
+#define SWIGTYPE_p_svn_wc_entry_callbacks2_t swig_types[162]
+#define SWIGTYPE_p_svn_wc_entry_callbacks_t swig_types[163]
+#define SWIGTYPE_p_svn_wc_entry_t swig_types[164]
+#define SWIGTYPE_p_svn_wc_external_item2_t swig_types[165]
+#define SWIGTYPE_p_svn_wc_external_item_t swig_types[166]
+#define SWIGTYPE_p_svn_wc_info_t swig_types[167]
+#define SWIGTYPE_p_svn_wc_merge_outcome_t swig_types[168]
+#define SWIGTYPE_p_svn_wc_notify_action_t swig_types[169]
+#define SWIGTYPE_p_svn_wc_notify_lock_state_t swig_types[170]
+#define SWIGTYPE_p_svn_wc_notify_state_t swig_types[171]
+#define SWIGTYPE_p_svn_wc_notify_t swig_types[172]
+#define SWIGTYPE_p_svn_wc_operation_t swig_types[173]
+#define SWIGTYPE_p_svn_wc_revision_status_t swig_types[174]
+#define SWIGTYPE_p_svn_wc_schedule_t swig_types[175]
+#define SWIGTYPE_p_svn_wc_status2_t swig_types[176]
+#define SWIGTYPE_p_svn_wc_status3_t swig_types[177]
+#define SWIGTYPE_p_svn_wc_status_t swig_types[178]
+#define SWIGTYPE_p_svn_wc_traversal_info_t swig_types[179]
+#define SWIGTYPE_p_unsigned_long swig_types[180]
+#define SWIGTYPE_p_void swig_types[181]
+static swig_type_info *swig_types[183];
+static swig_module_info swig_module = {swig_types, 182, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@@ -3114,7 +3147,7 @@ static swig_module_info swig_module = {swig_types, 170, 0, 0, 0, 0};
#endif
#define SWIG_name "_client"
-#define SWIGVERSION 0x020004
+#define SWIGVERSION 0x020009
#define SWIG_VERSION SWIGVERSION
@@ -3312,7 +3345,7 @@ SWIG_As_long (PyObject* obj)
}
- #define SWIG_From_long PyInt_FromLong
+ #define SWIG_From_long PyLong_FromLong
SWIGINTERN swig_type_info*
@@ -3438,6 +3471,7 @@ SWIG_FromCharPtr(const char *cptr)
SWIGINTERN int
SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val)
{
+#if PY_VERSION_HEX < 0x03000000
if (PyInt_Check(obj)) {
long v = PyInt_AsLong(obj);
if (v >= 0) {
@@ -3446,7 +3480,9 @@ SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val)
} else {
return SWIG_OverflowError;
}
- } else if (PyLong_Check(obj)) {
+ } else
+#endif
+ if (PyLong_Check(obj)) {
unsigned long v = PyLong_AsUnsignedLong(obj);
if (!PyErr_Occurred()) {
if (val) *val = v;
@@ -3499,10 +3535,22 @@ SWIGINTERNINLINE PyObject*
SWIG_From_unsigned_SS_long (unsigned long value)
{
return (value > LONG_MAX) ?
- PyLong_FromUnsignedLong(value) : PyInt_FromLong((long)(value));
+ PyLong_FromUnsignedLong(value) : PyLong_FromLong((long)(value));
}
+SWIGINTERNINLINE PyObject*
+ SWIG_From_int (int value)
+{
+ return PyInt_FromLong((long) value);
+}
+
+
+static svn_error_t * svn_proplist_invoke_receiver2(
+ svn_proplist_receiver2_t _obj, void *baton, const char *path, apr_hash_t *prop_hash, apr_array_header_t *inherited_props, apr_pool_t *scratch_pool) {
+ return _obj(baton, path, prop_hash, inherited_props, scratch_pool);
+}
+
static svn_error_t * svn_proplist_invoke_receiver(
svn_proplist_receiver_t _obj, void *baton, const char *path, apr_hash_t *prop_hash, apr_pool_t *pool) {
return _obj(baton, path, prop_hash, pool);
@@ -3543,11 +3591,21 @@ static svn_error_t * svn_client_invoke_diff_summarize_func(
return _obj(diff, baton, pool);
}
+static svn_error_t * svn_client_invoke_import_filter_func(
+ svn_client_import_filter_func_t _obj, void *baton, svn_boolean_t *filtered, const char *local_abspath, const svn_io_dirent2_t *dirent, apr_pool_t *scratch_pool) {
+ return _obj(baton, filtered, local_abspath, dirent, scratch_pool);
+}
+
static svn_error_t * svn_client_invoke_status_func(
svn_client_status_func_t _obj, void *baton, const char *path, const svn_client_status_t *status, apr_pool_t *scratch_pool) {
return _obj(baton, path, status, scratch_pool);
}
+static svn_error_t * svn_client_invoke_list_func2(
+ svn_client_list_func2_t _obj, void *baton, const char *path, const svn_dirent_t *dirent, const svn_lock_t *lock, const char *abs_path, const char *external_parent_url, const char *external_target, apr_pool_t *scratch_pool) {
+ return _obj(baton, path, dirent, lock, abs_path, external_parent_url, external_target, scratch_pool);
+}
+
static svn_error_t * svn_client_invoke_list_func(
svn_client_list_func_t _obj, void *baton, const char *path, const svn_dirent_t *dirent, const svn_lock_t *lock, const char *abs_path, apr_pool_t *pool) {
return _obj(baton, path, dirent, lock, abs_path, pool);
@@ -3569,13 +3627,6 @@ static svn_error_t * svn_client_invoke_patch_func(
}
-
-SWIGINTERNINLINE PyObject *
-SWIG_From_int (int value)
-{
- return SWIG_From_long (value);
-}
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -4220,14 +4271,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_info_t_revision_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_info_t *arg1 = (svn_client_commit_info_t *) 0 ;
+ struct svn_client_commit_info_t *arg1 = (struct svn_client_commit_info_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_commit_info_t_revision_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4248,13 +4299,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_info_t_revision_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_info_t *arg1 = (svn_client_commit_info_t *) 0 ;
+ struct svn_client_commit_info_t *arg1 = (struct svn_client_commit_info_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_info_t_revision_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4269,13 +4320,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_info_t_date_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_info_t *arg1 = (svn_client_commit_info_t *) 0 ;
+ struct svn_client_commit_info_t *arg1 = (struct svn_client_commit_info_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_client_commit_info_t_date_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_client_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4297,13 +4348,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_info_t_date_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_info_t *arg1 = (svn_client_commit_info_t *) 0 ;
+ struct svn_client_commit_info_t *arg1 = (struct svn_client_commit_info_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_info_t_date_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4318,13 +4369,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_info_t_author_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_info_t *arg1 = (svn_client_commit_info_t *) 0 ;
+ struct svn_client_commit_info_t *arg1 = (struct svn_client_commit_info_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_client_commit_info_t_author_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_client_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4346,13 +4397,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_info_t_author_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_info_t *arg1 = (svn_client_commit_info_t *) 0 ;
+ struct svn_client_commit_info_t *arg1 = (struct svn_client_commit_info_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_info_t_author_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4367,13 +4418,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_client_commit_info_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_info_t *result = 0 ;
+ struct svn_client_commit_info_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_client_commit_info_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_client_commit_info_t *)calloc(1, sizeof(svn_client_commit_info_t));
+ result = (struct svn_client_commit_info_t *)calloc(1, sizeof(struct svn_client_commit_info_t));
svn_swig_py_acquire_py_lock();
@@ -4388,12 +4439,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_client_commit_info_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_info_t *arg1 = (svn_client_commit_info_t *) 0 ;
+ struct svn_client_commit_info_t *arg1 = (struct svn_client_commit_info_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_client_commit_info_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4422,13 +4473,13 @@ SWIGINTERN PyObject *svn_client_commit_info_t_swigregister(PyObject *SWIGUNUSEDP
SWIGINTERN PyObject *_wrap_svn_client_commit_item3_t_path_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_client_commit_item3_t_path_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4450,13 +4501,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item3_t_path_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_item3_t_path_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4471,14 +4522,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item3_t_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
svn_node_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_commit_item3_t_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4499,13 +4550,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item3_t_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_node_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_item3_t_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4520,13 +4571,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item3_t_url_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_client_commit_item3_t_url_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4548,13 +4599,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item3_t_url_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_item3_t_url_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4569,14 +4620,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item3_t_revision_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_commit_item3_t_revision_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4597,13 +4648,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item3_t_revision_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_item3_t_revision_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4618,13 +4669,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item3_t_copyfrom_url_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Oz:svn_client_commit_item3_t_copyfrom_url_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4646,13 +4697,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item3_t_copyfrom_url_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_item3_t_copyfrom_url_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4667,14 +4718,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item3_t_copyfrom_rev_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_commit_item3_t_copyfrom_rev_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4695,13 +4746,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item3_t_copyfrom_rev_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_item3_t_copyfrom_rev_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4716,14 +4767,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item3_t_state_flags_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
apr_byte_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_commit_item3_t_state_flags_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4744,13 +4795,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item3_t_state_flags_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
PyObject * obj0 = 0 ;
apr_byte_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_item3_t_state_flags_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4765,14 +4816,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item3_t_incoming_prop_changes_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_commit_item3_t_incoming_prop_changes_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4793,13 +4844,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item3_t_incoming_prop_changes_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
PyObject * obj0 = 0 ;
apr_array_header_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_item3_t_incoming_prop_changes_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4815,14 +4866,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item3_t_outgoing_prop_changes_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_commit_item3_t_outgoing_prop_changes_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4843,13 +4894,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item3_t_outgoing_prop_changes_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
PyObject * obj0 = 0 ;
apr_array_header_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_item3_t_outgoing_prop_changes_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4865,13 +4916,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item3_t_session_relpath_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_client_commit_item3_t_session_relpath_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4893,13 +4944,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item3_t_session_relpath_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_item3_t_session_relpath_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4912,15 +4963,64 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_client_commit_item3_t_moved_from_abspath_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"Os:svn_client_commit_item3_t_moved_from_abspath_set",&obj0,&arg2)) SWIG_fail;
+ {
+ arg1 = (struct svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->moved_from_abspath) free((char *)arg1->moved_from_abspath);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->moved_from_abspath = copied;
+ }
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_client_commit_item3_t_moved_from_abspath_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ char *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_item3_t_moved_from_abspath_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (char *) ((arg1)->moved_from_abspath);
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_new_svn_client_commit_item3_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item3_t *result = 0 ;
+ struct svn_client_commit_item3_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_client_commit_item3_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_client_commit_item3_t *)calloc(1, sizeof(svn_client_commit_item3_t));
+ result = (struct svn_client_commit_item3_t *)calloc(1, sizeof(struct svn_client_commit_item3_t));
svn_swig_py_acquire_py_lock();
@@ -4935,12 +5035,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_client_commit_item3_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_client_commit_item3_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4969,13 +5069,13 @@ SWIGINTERN PyObject *svn_client_commit_item3_t_swigregister(PyObject *SWIGUNUSED
SWIGINTERN PyObject *_wrap_svn_client_commit_item2_t_path_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_client_commit_item2_t_path_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4997,13 +5097,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item2_t_path_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_item2_t_path_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5018,14 +5118,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item2_t_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
svn_node_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_commit_item2_t_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5046,13 +5146,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item2_t_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_node_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_item2_t_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5067,13 +5167,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item2_t_url_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_client_commit_item2_t_url_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5095,13 +5195,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item2_t_url_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_item2_t_url_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5116,14 +5216,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item2_t_revision_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_commit_item2_t_revision_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5144,13 +5244,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item2_t_revision_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_item2_t_revision_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5165,13 +5265,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item2_t_copyfrom_url_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Oz:svn_client_commit_item2_t_copyfrom_url_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5193,13 +5293,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item2_t_copyfrom_url_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_item2_t_copyfrom_url_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5214,14 +5314,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item2_t_copyfrom_rev_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_commit_item2_t_copyfrom_rev_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5242,13 +5342,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item2_t_copyfrom_rev_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_item2_t_copyfrom_rev_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5263,14 +5363,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item2_t_state_flags_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
apr_byte_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_commit_item2_t_state_flags_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5291,13 +5391,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item2_t_state_flags_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
PyObject * obj0 = 0 ;
apr_byte_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_item2_t_state_flags_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5312,7 +5412,7 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item2_t_wcprop_changes_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
apr_pool_t *_global_pool = NULL ;
PyObject *_global_py_pool = NULL ;
@@ -5321,7 +5421,7 @@ SWIGINTERN PyObject *_wrap_svn_client_commit_item2_t_wcprop_changes_set(PyObject
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_commit_item2_t_wcprop_changes_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5349,13 +5449,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item2_t_wcprop_changes_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
PyObject * obj0 = 0 ;
apr_array_header_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_item2_t_wcprop_changes_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5371,13 +5471,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_client_commit_item2_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item2_t *result = 0 ;
+ struct svn_client_commit_item2_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_client_commit_item2_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_client_commit_item2_t *)calloc(1, sizeof(svn_client_commit_item2_t));
+ result = (struct svn_client_commit_item2_t *)calloc(1, sizeof(struct svn_client_commit_item2_t));
svn_swig_py_acquire_py_lock();
@@ -5392,12 +5492,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_client_commit_item2_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_client_commit_item2_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5426,13 +5526,13 @@ SWIGINTERN PyObject *svn_client_commit_item2_t_swigregister(PyObject *SWIGUNUSED
SWIGINTERN PyObject *_wrap_svn_client_commit_item_t_path_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_client_commit_item_t_path_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5454,13 +5554,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item_t_path_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_item_t_path_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5475,14 +5575,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item_t_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
svn_node_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_commit_item_t_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5503,13 +5603,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item_t_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
PyObject * obj0 = 0 ;
svn_node_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_item_t_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5524,13 +5624,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item_t_url_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_client_commit_item_t_url_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5552,13 +5652,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item_t_url_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_item_t_url_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5573,14 +5673,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item_t_revision_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_commit_item_t_revision_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5601,13 +5701,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item_t_revision_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_item_t_revision_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5622,13 +5722,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item_t_copyfrom_url_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Oz:svn_client_commit_item_t_copyfrom_url_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5650,13 +5750,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item_t_copyfrom_url_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_item_t_copyfrom_url_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5671,14 +5771,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item_t_state_flags_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
apr_byte_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_commit_item_t_state_flags_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5699,13 +5799,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item_t_state_flags_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
PyObject * obj0 = 0 ;
apr_byte_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_item_t_state_flags_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5720,7 +5820,7 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item_t_wcprop_changes_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
apr_pool_t *_global_pool = NULL ;
PyObject *_global_py_pool = NULL ;
@@ -5729,7 +5829,7 @@ SWIGINTERN PyObject *_wrap_svn_client_commit_item_t_wcprop_changes_set(PyObject
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_commit_item_t_wcprop_changes_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5757,13 +5857,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_commit_item_t_wcprop_changes_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
PyObject * obj0 = 0 ;
apr_array_header_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_commit_item_t_wcprop_changes_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5779,13 +5879,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_client_commit_item_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item_t *result = 0 ;
+ struct svn_client_commit_item_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_client_commit_item_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_client_commit_item_t *)calloc(1, sizeof(svn_client_commit_item_t));
+ result = (struct svn_client_commit_item_t *)calloc(1, sizeof(struct svn_client_commit_item_t));
svn_swig_py_acquire_py_lock();
@@ -5800,12 +5900,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_client_commit_item_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_client_commit_item_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_commit_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_commit_item_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6040,13 +6140,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_diff_summarize_t_path_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_diff_summarize_t *arg1 = (svn_client_diff_summarize_t *) 0 ;
+ struct svn_client_diff_summarize_t *arg1 = (struct svn_client_diff_summarize_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_client_diff_summarize_t_path_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_client_diff_summarize_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_diff_summarize_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_diff_summarize_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_diff_summarize_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6068,13 +6168,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_diff_summarize_t_path_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_diff_summarize_t *arg1 = (svn_client_diff_summarize_t *) 0 ;
+ struct svn_client_diff_summarize_t *arg1 = (struct svn_client_diff_summarize_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_diff_summarize_t_path_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_diff_summarize_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_diff_summarize_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_diff_summarize_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_diff_summarize_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6089,14 +6189,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_diff_summarize_t_summarize_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_diff_summarize_t *arg1 = (svn_client_diff_summarize_t *) 0 ;
+ struct svn_client_diff_summarize_t *arg1 = (struct svn_client_diff_summarize_t *) 0 ;
svn_client_diff_summarize_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_diff_summarize_t_summarize_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_diff_summarize_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_diff_summarize_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_diff_summarize_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_diff_summarize_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6117,13 +6217,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_diff_summarize_t_summarize_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_diff_summarize_t *arg1 = (svn_client_diff_summarize_t *) 0 ;
+ struct svn_client_diff_summarize_t *arg1 = (struct svn_client_diff_summarize_t *) 0 ;
PyObject * obj0 = 0 ;
svn_client_diff_summarize_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_diff_summarize_t_summarize_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_diff_summarize_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_diff_summarize_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_diff_summarize_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_diff_summarize_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6138,14 +6238,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_diff_summarize_t_prop_changed_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_diff_summarize_t *arg1 = (svn_client_diff_summarize_t *) 0 ;
+ struct svn_client_diff_summarize_t *arg1 = (struct svn_client_diff_summarize_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_diff_summarize_t_prop_changed_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_diff_summarize_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_diff_summarize_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_diff_summarize_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_diff_summarize_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6166,13 +6266,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_diff_summarize_t_prop_changed_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_diff_summarize_t *arg1 = (svn_client_diff_summarize_t *) 0 ;
+ struct svn_client_diff_summarize_t *arg1 = (struct svn_client_diff_summarize_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_diff_summarize_t_prop_changed_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_diff_summarize_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_diff_summarize_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_diff_summarize_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_diff_summarize_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6187,14 +6287,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_diff_summarize_t_node_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_diff_summarize_t *arg1 = (svn_client_diff_summarize_t *) 0 ;
+ struct svn_client_diff_summarize_t *arg1 = (struct svn_client_diff_summarize_t *) 0 ;
svn_node_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_diff_summarize_t_node_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_diff_summarize_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_diff_summarize_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_diff_summarize_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_diff_summarize_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6215,13 +6315,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_diff_summarize_t_node_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_diff_summarize_t *arg1 = (svn_client_diff_summarize_t *) 0 ;
+ struct svn_client_diff_summarize_t *arg1 = (struct svn_client_diff_summarize_t *) 0 ;
PyObject * obj0 = 0 ;
svn_node_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_diff_summarize_t_node_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_diff_summarize_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_diff_summarize_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_diff_summarize_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_diff_summarize_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6236,13 +6336,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_client_diff_summarize_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_diff_summarize_t *result = 0 ;
+ struct svn_client_diff_summarize_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_client_diff_summarize_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_client_diff_summarize_t *)calloc(1, sizeof(svn_client_diff_summarize_t));
+ result = (struct svn_client_diff_summarize_t *)calloc(1, sizeof(struct svn_client_diff_summarize_t));
svn_swig_py_acquire_py_lock();
@@ -6257,12 +6357,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_client_diff_summarize_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_diff_summarize_t *arg1 = (svn_client_diff_summarize_t *) 0 ;
+ struct svn_client_diff_summarize_t *arg1 = (struct svn_client_diff_summarize_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_client_diff_summarize_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_diff_summarize_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_diff_summarize_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_diff_summarize_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_diff_summarize_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6342,14 +6442,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_auth_baton_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_auth_baton_t *arg2 = (svn_auth_baton_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_ctx_t_auth_baton_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6370,13 +6470,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_auth_baton_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
PyObject * obj0 = 0 ;
svn_auth_baton_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_ctx_t_auth_baton_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6392,14 +6492,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_notify_func_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_wc_notify_func_t arg2 = (svn_wc_notify_func_t) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_ctx_t_notify_func_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6422,13 +6522,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_notify_func_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_notify_func_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_ctx_t_notify_func_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6462,14 +6562,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_notify_baton_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_ctx_t_notify_baton_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6492,13 +6592,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_notify_baton_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
PyObject * obj0 = 0 ;
void *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_ctx_t_notify_baton_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6537,14 +6637,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_log_msg_func_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_client_get_commit_log_t arg2 = (svn_client_get_commit_log_t) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_ctx_t_log_msg_func_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6567,13 +6667,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_log_msg_func_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
PyObject * obj0 = 0 ;
svn_client_get_commit_log_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_ctx_t_log_msg_func_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6607,14 +6707,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_log_msg_baton_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_ctx_t_log_msg_baton_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6637,13 +6737,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_log_msg_baton_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
PyObject * obj0 = 0 ;
void *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_ctx_t_log_msg_baton_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6682,7 +6782,7 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_config_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
apr_hash_t *arg2 = (apr_hash_t *) 0 ;
apr_pool_t *_global_pool = NULL ;
PyObject *_global_py_pool = NULL ;
@@ -6691,7 +6791,7 @@ SWIGINTERN PyObject *_wrap_svn_client_ctx_t_config_set(PyObject *SWIGUNUSEDPARM(
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_ctx_t_config_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6719,13 +6819,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_config_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
PyObject * obj0 = 0 ;
apr_hash_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_ctx_t_config_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6759,14 +6859,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_cancel_func_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_cancel_func_t arg2 = (svn_cancel_func_t) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_ctx_t_cancel_func_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6789,13 +6889,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_cancel_func_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
PyObject * obj0 = 0 ;
svn_cancel_func_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_ctx_t_cancel_func_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6829,14 +6929,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_cancel_baton_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_ctx_t_cancel_baton_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6859,13 +6959,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_cancel_baton_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
PyObject * obj0 = 0 ;
void *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_ctx_t_cancel_baton_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6904,14 +7004,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_notify_func2_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_wc_notify_func2_t arg2 = (svn_wc_notify_func2_t) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_ctx_t_notify_func2_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6934,13 +7034,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_notify_func2_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_notify_func2_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_ctx_t_notify_func2_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6974,14 +7074,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_notify_baton2_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_ctx_t_notify_baton2_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7004,13 +7104,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_notify_baton2_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
PyObject * obj0 = 0 ;
void *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_ctx_t_notify_baton2_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7049,14 +7149,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_log_msg_func2_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_client_get_commit_log2_t arg2 = (svn_client_get_commit_log2_t) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_ctx_t_log_msg_func2_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7079,13 +7179,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_log_msg_func2_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
PyObject * obj0 = 0 ;
svn_client_get_commit_log2_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_ctx_t_log_msg_func2_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7119,14 +7219,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_log_msg_baton2_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_ctx_t_log_msg_baton2_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7149,13 +7249,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_log_msg_baton2_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
PyObject * obj0 = 0 ;
void *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_ctx_t_log_msg_baton2_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7194,14 +7294,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_progress_func_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_ra_progress_notify_func_t arg2 = (svn_ra_progress_notify_func_t) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_ctx_t_progress_func_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7224,13 +7324,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_progress_func_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
PyObject * obj0 = 0 ;
svn_ra_progress_notify_func_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_ctx_t_progress_func_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7264,14 +7364,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_progress_baton_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_ctx_t_progress_baton_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7294,13 +7394,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_progress_baton_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
PyObject * obj0 = 0 ;
void *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_ctx_t_progress_baton_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7339,14 +7439,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_log_msg_func3_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_client_get_commit_log3_t arg2 = (svn_client_get_commit_log3_t) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_ctx_t_log_msg_func3_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7369,13 +7469,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_log_msg_func3_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
PyObject * obj0 = 0 ;
svn_client_get_commit_log3_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_ctx_t_log_msg_func3_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7409,14 +7509,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_log_msg_baton3_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_ctx_t_log_msg_baton3_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7439,13 +7539,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_log_msg_baton3_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
PyObject * obj0 = 0 ;
void *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_ctx_t_log_msg_baton3_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7484,14 +7584,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_mimetypes_map_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
apr_hash_t *arg2 = (apr_hash_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_ctx_t_mimetypes_map_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7512,13 +7612,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_mimetypes_map_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
PyObject * obj0 = 0 ;
apr_hash_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_ctx_t_mimetypes_map_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7534,14 +7634,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_conflict_func_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_wc_conflict_resolver_func_t arg2 = (svn_wc_conflict_resolver_func_t) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_ctx_t_conflict_func_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7564,13 +7664,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_conflict_func_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_conflict_resolver_func_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_ctx_t_conflict_func_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7604,14 +7704,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_conflict_baton_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_ctx_t_conflict_baton_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7634,13 +7734,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_conflict_baton_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
PyObject * obj0 = 0 ;
void *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_ctx_t_conflict_baton_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7679,13 +7779,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_client_name_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_client_ctx_t_client_name_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7707,13 +7807,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_client_name_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_ctx_t_client_name_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7728,14 +7828,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_conflict_func2_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_wc_conflict_resolver_func2_t arg2 = (svn_wc_conflict_resolver_func2_t) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_ctx_t_conflict_func2_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7758,13 +7858,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_conflict_func2_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_conflict_resolver_func2_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_ctx_t_conflict_func2_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7798,14 +7898,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_conflict_baton2_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_ctx_t_conflict_baton2_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7828,13 +7928,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_conflict_baton2_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
PyObject * obj0 = 0 ;
void *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_ctx_t_conflict_baton2_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7873,14 +7973,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_wc_ctx_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_wc_context_t *arg2 = (svn_wc_context_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_ctx_t_wc_ctx_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7901,13 +8001,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_ctx_t_wc_ctx_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_context_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_ctx_t_wc_ctx_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7923,13 +8023,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_client_ctx_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *result = 0 ;
+ struct svn_client_ctx_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_client_ctx_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_client_ctx_t *)calloc(1, sizeof(svn_client_ctx_t));
+ result = (struct svn_client_ctx_t *)calloc(1, sizeof(struct svn_client_ctx_t));
svn_swig_py_acquire_py_lock();
@@ -7944,12 +8044,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_client_ctx_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_client_ctx_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_ctx_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7976,6 +8076,75 @@ SWIGINTERN PyObject *svn_client_ctx_t_swigregister(PyObject *SWIGUNUSEDPARM(self
return SWIG_Py_Void();
}
+SWIGINTERN PyObject *_wrap_svn_client_create_context2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_client_ctx_t **arg1 = (svn_client_ctx_t **) 0 ;
+ apr_hash_t *arg2 = (apr_hash_t *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_client_ctx_t *temp1 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg3 = _global_pool;
+ arg1 = &temp1;
+ if (!PyArg_ParseTuple(args,(char *)"O|O:svn_client_create_context2",&obj0,&obj1)) SWIG_fail;
+ {
+ arg2 = (apr_hash_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_apr_hash_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj1) {
+ /* Verify that the user supplied a valid pool */
+ if (obj1 != Py_None && obj1 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj1);
+ SWIG_arg_fail(svn_argnum_obj1);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_client_create_context2(arg1,arg2,arg3);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg1, SWIGTYPE_p_svn_client_ctx_t,
+ _global_py_pool, args))
+
+ ;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_client_create_context(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_client_ctx_t **arg1 = (svn_client_ctx_t **) 0 ;
@@ -9366,6 +9535,107 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_client_add5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ char *arg1 = (char *) 0 ;
+ svn_depth_t arg2 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ svn_boolean_t arg5 ;
+ svn_boolean_t arg6 ;
+ svn_client_ctx_t *arg7 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg8 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj5 = 0 ;
+ PyObject * obj6 = 0 ;
+ PyObject * obj7 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg8 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"sOOOOOO|O:svn_client_add5",&arg1,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7)) SWIG_fail;
+ {
+ arg2 = (svn_depth_t)SWIG_As_long (obj1);
+ if (SWIG_arg_fail(svn_argnum_obj1)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg3 = (svn_boolean_t)SWIG_As_long (obj2);
+ if (SWIG_arg_fail(svn_argnum_obj2)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg4 = (svn_boolean_t)SWIG_As_long (obj3);
+ if (SWIG_arg_fail(svn_argnum_obj3)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg5 = (svn_boolean_t)SWIG_As_long (obj4);
+ if (SWIG_arg_fail(svn_argnum_obj4)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg6 = (svn_boolean_t)SWIG_As_long (obj5);
+ if (SWIG_arg_fail(svn_argnum_obj5)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg7 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj6, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj6);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj7) {
+ /* Verify that the user supplied a valid pool */
+ if (obj7 != Py_None && obj7 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj7);
+ SWIG_arg_fail(svn_argnum_obj7);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_client_add5((char const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_client_add4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
char *arg1 = (char *) 0 ;
@@ -9707,14 +9977,13 @@ SWIGINTERN PyObject *_wrap_svn_client_mkdir4(PyObject *SWIGUNUSEDPARM(self), PyO
PyObject * obj3 = 0 ;
PyObject * obj4 = 0 ;
PyObject * obj5 = 0 ;
- PyObject * obj6 = 0 ;
svn_error_t *result = 0 ;
if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
&_global_py_pool, &_global_pool))
SWIG_fail;
arg7 = _global_pool;
- if (!PyArg_ParseTuple(args,(char *)"OOOOOO|O:svn_client_mkdir4",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"OOOOO|O:svn_client_mkdir4",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
{
arg1 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj0,
sizeof(const char *),
@@ -9744,32 +10013,20 @@ SWIGINTERN PyObject *_wrap_svn_client_mkdir4(PyObject *SWIGUNUSEDPARM(self), PyO
}
}
{
- svn_commit_callback2_t * tmp =
- svn_swig_MustGetPtr(obj3, SWIGTYPE_p_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t, svn_argnum_obj3);
- if (tmp == NULL || PyErr_Occurred()) {
- SWIG_fail;
- }
- arg4 = *tmp;
- }
- {
- if (obj4 == Py_None) {
- arg5 = NULL;
- } else if (SWIG_ConvertPtr(obj4, (void **) &arg5, 0, 0) == -1) {
- arg5 = (void *) obj4;
- PyErr_Clear();
- }
+ arg4 = svn_swig_py_commit_callback2;
+ arg5 = (void *)obj3;
}
{
- arg6 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj5, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj5);
+ arg6 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj4, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj4);
if (PyErr_Occurred()) {
SWIG_fail;
}
}
- if (obj6) {
+ if (obj5) {
/* Verify that the user supplied a valid pool */
- if (obj6 != Py_None && obj6 != _global_py_pool) {
- SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj6);
- SWIG_arg_fail(svn_argnum_obj6);
+ if (obj5 != Py_None && obj5 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj5);
+ SWIG_arg_fail(svn_argnum_obj5);
SWIG_fail;
}
}
@@ -10086,14 +10343,13 @@ SWIGINTERN PyObject *_wrap_svn_client_delete4(PyObject *SWIGUNUSEDPARM(self), Py
PyObject * obj4 = 0 ;
PyObject * obj5 = 0 ;
PyObject * obj6 = 0 ;
- PyObject * obj7 = 0 ;
svn_error_t *result = 0 ;
if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
&_global_py_pool, &_global_pool))
SWIG_fail;
arg8 = _global_pool;
- if (!PyArg_ParseTuple(args,(char *)"OOOOOOO|O:svn_client_delete4",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"OOOOOO|O:svn_client_delete4",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
{
arg1 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj0,
sizeof(const char *),
@@ -10129,32 +10385,20 @@ SWIGINTERN PyObject *_wrap_svn_client_delete4(PyObject *SWIGUNUSEDPARM(self), Py
}
}
{
- svn_commit_callback2_t * tmp =
- svn_swig_MustGetPtr(obj4, SWIGTYPE_p_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t, svn_argnum_obj4);
- if (tmp == NULL || PyErr_Occurred()) {
- SWIG_fail;
- }
- arg5 = *tmp;
- }
- {
- if (obj5 == Py_None) {
- arg6 = NULL;
- } else if (SWIG_ConvertPtr(obj5, (void **) &arg6, 0, 0) == -1) {
- arg6 = (void *) obj5;
- PyErr_Clear();
- }
+ arg5 = svn_swig_py_commit_callback2;
+ arg6 = (void *)obj4;
}
{
- arg7 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj6, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj6);
+ arg7 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj5, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj5);
if (PyErr_Occurred()) {
SWIG_fail;
}
}
- if (obj7) {
+ if (obj6) {
/* Verify that the user supplied a valid pool */
- if (obj7 != Py_None && obj7 != _global_py_pool) {
- SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj7);
- SWIG_arg_fail(svn_argnum_obj7);
+ if (obj6 != Py_None && obj6 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj6);
+ SWIG_arg_fail(svn_argnum_obj6);
SWIG_fail;
}
}
@@ -10476,18 +10720,21 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_client_import4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_svn_client_import5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
char *arg1 = (char *) 0 ;
char *arg2 = (char *) 0 ;
svn_depth_t arg3 ;
svn_boolean_t arg4 ;
svn_boolean_t arg5 ;
- apr_hash_t *arg6 = (apr_hash_t *) 0 ;
- svn_commit_callback2_t arg7 = (svn_commit_callback2_t) 0 ;
- void *arg8 = (void *) 0 ;
- svn_client_ctx_t *arg9 = (svn_client_ctx_t *) 0 ;
- apr_pool_t *arg10 = (apr_pool_t *) 0 ;
+ svn_boolean_t arg6 ;
+ apr_hash_t *arg7 = (apr_hash_t *) 0 ;
+ svn_client_import_filter_func_t arg8 = (svn_client_import_filter_func_t) 0 ;
+ void *arg9 = (void *) 0 ;
+ svn_commit_callback2_t arg10 = (svn_commit_callback2_t) 0 ;
+ void *arg11 = (void *) 0 ;
+ svn_client_ctx_t *arg12 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg13 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool = NULL ;
PyObject *_global_py_pool = NULL ;
PyObject * obj2 = 0 ;
@@ -10498,13 +10745,15 @@ SWIGINTERN PyObject *_wrap_svn_client_import4(PyObject *SWIGUNUSEDPARM(self), Py
PyObject * obj7 = 0 ;
PyObject * obj8 = 0 ;
PyObject * obj9 = 0 ;
+ PyObject * obj10 = 0 ;
+ PyObject * obj11 = 0 ;
svn_error_t *result = 0 ;
if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
&_global_py_pool, &_global_pool))
SWIG_fail;
- arg10 = _global_pool;
- if (!PyArg_ParseTuple(args,(char *)"ssOOOOOOO|O:svn_client_import4",&arg1,&arg2,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9)) SWIG_fail;
+ arg13 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"ssOOOOOOOOO|O:svn_client_import5",&arg1,&arg2,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9,&obj10,&obj11)) SWIG_fail;
{
arg3 = (svn_depth_t)SWIG_As_long (obj2);
if (SWIG_arg_fail(svn_argnum_obj2)) {
@@ -10524,6 +10773,12 @@ SWIGINTERN PyObject *_wrap_svn_client_import4(PyObject *SWIGUNUSEDPARM(self), Py
}
}
{
+ arg6 = (svn_boolean_t)SWIG_As_long (obj5);
+ if (SWIG_arg_fail(svn_argnum_obj5)) {
+ SWIG_fail;
+ }
+ }
+ {
if (_global_pool == NULL)
{
if (svn_swig_py_get_parent_pool(args, SWIGTYPE_p_apr_pool_t,
@@ -10531,38 +10786,150 @@ SWIGINTERN PyObject *_wrap_svn_client_import4(PyObject *SWIGUNUSEDPARM(self), Py
SWIG_fail;
}
- arg6 = svn_swig_py_prophash_from_dict(obj5, _global_pool);
+ arg7 = svn_swig_py_prophash_from_dict(obj6, _global_pool);
if (PyErr_Occurred()) {
SWIG_fail;
}
}
{
- svn_commit_callback2_t * tmp =
- svn_swig_MustGetPtr(obj6, SWIGTYPE_p_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t, svn_argnum_obj6);
+ svn_client_import_filter_func_t * tmp =
+ svn_swig_MustGetPtr(obj7, SWIGTYPE_p_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t, svn_argnum_obj7);
if (tmp == NULL || PyErr_Occurred()) {
SWIG_fail;
}
- arg7 = *tmp;
+ arg8 = *tmp;
}
{
- if (obj7 == Py_None) {
- arg8 = NULL;
- } else if (SWIG_ConvertPtr(obj7, (void **) &arg8, 0, 0) == -1) {
- arg8 = (void *) obj7;
+ if (obj8 == Py_None) {
+ arg9 = NULL;
+ } else if (SWIG_ConvertPtr(obj8, (void **) &arg9, 0, 0) == -1) {
+ arg9 = (void *) obj8;
PyErr_Clear();
}
}
{
- arg9 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj8, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj8);
+ arg10 = svn_swig_py_commit_callback2;
+ arg11 = (void *)obj9;
+ }
+ {
+ arg12 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj10, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj10);
if (PyErr_Occurred()) {
SWIG_fail;
}
}
- if (obj9) {
+ if (obj11) {
/* Verify that the user supplied a valid pool */
- if (obj9 != Py_None && obj9 != _global_py_pool) {
- SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj9);
- SWIG_arg_fail(svn_argnum_obj9);
+ if (obj11 != Py_None && obj11 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj11);
+ SWIG_arg_fail(svn_argnum_obj11);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_client_import5((char const *)arg1,(char const *)arg2,arg3,arg4,arg5,arg6,(apr_hash_t const *)arg7,arg8,arg9,arg10,arg11,arg12,arg13);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_client_import4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ char *arg1 = (char *) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_depth_t arg3 ;
+ svn_boolean_t arg4 ;
+ svn_boolean_t arg5 ;
+ apr_hash_t *arg6 = (apr_hash_t *) 0 ;
+ svn_commit_callback2_t arg7 = (svn_commit_callback2_t) 0 ;
+ void *arg8 = (void *) 0 ;
+ svn_client_ctx_t *arg9 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg10 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj5 = 0 ;
+ PyObject * obj6 = 0 ;
+ PyObject * obj7 = 0 ;
+ PyObject * obj8 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg10 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"ssOOOOOO|O:svn_client_import4",&arg1,&arg2,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8)) SWIG_fail;
+ {
+ arg3 = (svn_depth_t)SWIG_As_long (obj2);
+ if (SWIG_arg_fail(svn_argnum_obj2)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg4 = (svn_boolean_t)SWIG_As_long (obj3);
+ if (SWIG_arg_fail(svn_argnum_obj3)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg5 = (svn_boolean_t)SWIG_As_long (obj4);
+ if (SWIG_arg_fail(svn_argnum_obj4)) {
+ SWIG_fail;
+ }
+ }
+ {
+ if (_global_pool == NULL)
+ {
+ if (svn_swig_py_get_parent_pool(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ }
+
+ arg6 = svn_swig_py_prophash_from_dict(obj5, _global_pool);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg7 = svn_swig_py_commit_callback2;
+ arg8 = (void *)obj6;
+ }
+ {
+ arg9 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj7, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj7);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj8) {
+ /* Verify that the user supplied a valid pool */
+ if (obj8 != Py_None && obj8 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj8);
+ SWIG_arg_fail(svn_argnum_obj8);
SWIG_fail;
}
}
@@ -10873,6 +11240,158 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_client_commit6(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
+ svn_depth_t arg2 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ svn_boolean_t arg5 ;
+ svn_boolean_t arg6 ;
+ svn_boolean_t arg7 ;
+ apr_array_header_t *arg8 = (apr_array_header_t *) 0 ;
+ apr_hash_t *arg9 = (apr_hash_t *) 0 ;
+ svn_commit_callback2_t arg10 = (svn_commit_callback2_t) 0 ;
+ void *arg11 = (void *) 0 ;
+ svn_client_ctx_t *arg12 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg13 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj5 = 0 ;
+ PyObject * obj6 = 0 ;
+ PyObject * obj7 = 0 ;
+ PyObject * obj8 = 0 ;
+ PyObject * obj9 = 0 ;
+ PyObject * obj10 = 0 ;
+ PyObject * obj11 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg13 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOOOO|O:svn_client_commit6",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9,&obj10,&obj11)) SWIG_fail;
+ {
+ arg1 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj0,
+ sizeof(const char *),
+ svn_swig_py_unwrap_string,
+ NULL,
+ _global_pool);
+ if (PyErr_Occurred())
+ SWIG_fail;
+ }
+ {
+ arg2 = (svn_depth_t)SWIG_As_long (obj1);
+ if (SWIG_arg_fail(svn_argnum_obj1)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg3 = (svn_boolean_t)SWIG_As_long (obj2);
+ if (SWIG_arg_fail(svn_argnum_obj2)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg4 = (svn_boolean_t)SWIG_As_long (obj3);
+ if (SWIG_arg_fail(svn_argnum_obj3)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg5 = (svn_boolean_t)SWIG_As_long (obj4);
+ if (SWIG_arg_fail(svn_argnum_obj4)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg6 = (svn_boolean_t)SWIG_As_long (obj5);
+ if (SWIG_arg_fail(svn_argnum_obj5)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg7 = (svn_boolean_t)SWIG_As_long (obj6);
+ if (SWIG_arg_fail(svn_argnum_obj6)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg8 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj7,
+ sizeof(const char *),
+ svn_swig_py_unwrap_string,
+ NULL,
+ _global_pool);
+ if (PyErr_Occurred())
+ SWIG_fail;
+ }
+ {
+ if (_global_pool == NULL)
+ {
+ if (svn_swig_py_get_parent_pool(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ }
+
+ arg9 = svn_swig_py_prophash_from_dict(obj8, _global_pool);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg10 = svn_swig_py_commit_callback2;
+ arg11 = (void *)obj9;
+ }
+ {
+ arg12 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj10, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj10);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj11) {
+ /* Verify that the user supplied a valid pool */
+ if (obj11 != Py_None && obj11 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj11);
+ SWIG_arg_fail(svn_argnum_obj11);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_client_commit6((apr_array_header_t const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7,(apr_array_header_t const *)arg8,(apr_hash_t const *)arg9,arg10,arg11,arg12,arg13);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_client_commit5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
@@ -10898,14 +11417,13 @@ SWIGINTERN PyObject *_wrap_svn_client_commit5(PyObject *SWIGUNUSEDPARM(self), Py
PyObject * obj7 = 0 ;
PyObject * obj8 = 0 ;
PyObject * obj9 = 0 ;
- PyObject * obj10 = 0 ;
svn_error_t *result = 0 ;
if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
&_global_py_pool, &_global_pool))
SWIG_fail;
arg11 = _global_pool;
- if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOOO|O:svn_client_commit5",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9,&obj10)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOO|O:svn_client_commit5",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9)) SWIG_fail;
{
arg1 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj0,
sizeof(const char *),
@@ -10962,32 +11480,20 @@ SWIGINTERN PyObject *_wrap_svn_client_commit5(PyObject *SWIGUNUSEDPARM(self), Py
}
}
{
- svn_commit_callback2_t * tmp =
- svn_swig_MustGetPtr(obj7, SWIGTYPE_p_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t, svn_argnum_obj7);
- if (tmp == NULL || PyErr_Occurred()) {
- SWIG_fail;
- }
- arg8 = *tmp;
- }
- {
- if (obj8 == Py_None) {
- arg9 = NULL;
- } else if (SWIG_ConvertPtr(obj8, (void **) &arg9, 0, 0) == -1) {
- arg9 = (void *) obj8;
- PyErr_Clear();
- }
+ arg8 = svn_swig_py_commit_callback2;
+ arg9 = (void *)obj7;
}
{
- arg10 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj9, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj9);
+ arg10 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj8, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj8);
if (PyErr_Occurred()) {
SWIG_fail;
}
}
- if (obj10) {
+ if (obj9) {
/* Verify that the user supplied a valid pool */
- if (obj10 != Py_None && obj10 != _global_py_pool) {
- SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj10);
- SWIG_arg_fail(svn_argnum_obj10);
+ if (obj9 != Py_None && obj9 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj9);
+ SWIG_arg_fail(svn_argnum_obj9);
SWIG_fail;
}
}
@@ -11434,14 +11940,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_node_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_status_t_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11462,13 +11968,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
svn_node_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11483,13 +11989,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_local_abspath_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_client_status_t_local_abspath_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11511,13 +12017,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_local_abspath_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_local_abspath_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11532,14 +12038,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_filesize_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_filesize_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_status_t_filesize_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11555,13 +12061,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_filesize_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
svn_filesize_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_filesize_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11576,14 +12082,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_versioned_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_status_t_versioned_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11604,13 +12110,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_versioned_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_versioned_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11625,14 +12131,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_conflicted_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_status_t_conflicted_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11653,13 +12159,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_conflicted_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_conflicted_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11674,14 +12180,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_node_status_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_status_t_node_status_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11702,13 +12208,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_node_status_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
enum svn_wc_status_kind result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_node_status_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11723,14 +12229,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_text_status_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_status_t_text_status_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11751,13 +12257,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_text_status_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
enum svn_wc_status_kind result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_text_status_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11772,14 +12278,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_prop_status_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_status_t_prop_status_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11800,13 +12306,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_prop_status_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
enum svn_wc_status_kind result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_prop_status_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11821,14 +12327,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_wc_is_locked_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_status_t_wc_is_locked_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11849,13 +12355,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_wc_is_locked_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_wc_is_locked_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11870,14 +12376,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_copied_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_status_t_copied_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11898,13 +12404,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_copied_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_copied_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11919,13 +12425,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_repos_root_url_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_client_status_t_repos_root_url_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11947,13 +12453,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_repos_root_url_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_repos_root_url_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11968,13 +12474,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_repos_uuid_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_client_status_t_repos_uuid_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11996,13 +12502,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_repos_uuid_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_repos_uuid_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12017,13 +12523,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_repos_relpath_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_client_status_t_repos_relpath_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12045,13 +12551,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_repos_relpath_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_repos_relpath_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12066,14 +12572,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_revision_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_status_t_revision_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12094,13 +12600,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_revision_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_revision_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12115,14 +12621,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_changed_rev_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_status_t_changed_rev_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12143,13 +12649,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_changed_rev_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_changed_rev_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12164,14 +12670,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_changed_date_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
apr_time_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_status_t_changed_date_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12187,13 +12693,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_changed_date_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
apr_time_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_changed_date_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12208,13 +12714,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_changed_author_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_client_status_t_changed_author_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12236,13 +12742,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_changed_author_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_changed_author_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12257,14 +12763,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_switched_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_status_t_switched_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12285,13 +12791,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_switched_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_switched_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12306,14 +12812,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_file_external_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_status_t_file_external_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12334,13 +12840,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_file_external_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_file_external_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12355,14 +12861,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_lock_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_lock_t *arg2 = (svn_lock_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_status_t_lock_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12383,13 +12889,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_lock_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
svn_lock_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_lock_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12405,13 +12911,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_changelist_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_client_status_t_changelist_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12433,13 +12939,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_changelist_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_changelist_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12454,14 +12960,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_depth_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_depth_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_status_t_depth_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12482,13 +12988,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_depth_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
svn_depth_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_depth_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12503,14 +13009,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_ood_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_node_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_status_t_ood_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12531,13 +13037,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_ood_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
svn_node_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_ood_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12552,14 +13058,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_repos_node_status_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_status_t_repos_node_status_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12580,13 +13086,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_repos_node_status_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
enum svn_wc_status_kind result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_repos_node_status_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12601,14 +13107,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_repos_text_status_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_status_t_repos_text_status_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12629,13 +13135,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_repos_text_status_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
enum svn_wc_status_kind result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_repos_text_status_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12650,14 +13156,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_repos_prop_status_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_status_t_repos_prop_status_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12678,13 +13184,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_repos_prop_status_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
enum svn_wc_status_kind result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_repos_prop_status_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12699,14 +13205,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_repos_lock_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_lock_t *arg2 = (svn_lock_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_status_t_repos_lock_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12727,13 +13233,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_repos_lock_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
svn_lock_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_repos_lock_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12749,14 +13255,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_ood_changed_rev_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_status_t_ood_changed_rev_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12777,13 +13283,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_ood_changed_rev_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_ood_changed_rev_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12798,14 +13304,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_ood_changed_date_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
apr_time_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_status_t_ood_changed_date_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12821,13 +13327,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_ood_changed_date_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
apr_time_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_ood_changed_date_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12842,13 +13348,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_ood_changed_author_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_client_status_t_ood_changed_author_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12870,13 +13376,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_ood_changed_author_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_ood_changed_author_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12891,14 +13397,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_backwards_compatibility_baton_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *arg2 = (void *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_status_t_backwards_compatibility_baton_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12921,13 +13427,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_status_t_backwards_compatibility_baton_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
void *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_backwards_compatibility_baton_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12964,15 +13470,113 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_client_status_t_moved_from_abspath_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"Os:svn_client_status_t_moved_from_abspath_set",&obj0,&arg2)) SWIG_fail;
+ {
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->moved_from_abspath) free((char *)arg1->moved_from_abspath);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->moved_from_abspath = copied;
+ }
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_client_status_t_moved_from_abspath_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ char *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_moved_from_abspath_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (char *) ((arg1)->moved_from_abspath);
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_client_status_t_moved_to_abspath_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"Os:svn_client_status_t_moved_to_abspath_set",&obj0,&arg2)) SWIG_fail;
+ {
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->moved_to_abspath) free((char *)arg1->moved_to_abspath);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->moved_to_abspath = copied;
+ }
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_client_status_t_moved_to_abspath_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ char *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_client_status_t_moved_to_abspath_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (char *) ((arg1)->moved_to_abspath);
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_new_svn_client_status_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *result = 0 ;
+ struct svn_client_status_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_client_status_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_client_status_t *)calloc(1, sizeof(svn_client_status_t));
+ result = (struct svn_client_status_t *)calloc(1, sizeof(struct svn_client_status_t));
svn_swig_py_acquire_py_lock();
@@ -12987,12 +13591,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_client_status_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_client_status_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13873,7 +14477,7 @@ SWIGINTERN PyObject *_wrap_svn_client_log5(PyObject *SWIGUNUSEDPARM(self), PyObj
}
{
arg9 = svn_swig_py_log_entry_receiver;
- arg10 = (void *)obj8;
+ arg10 = obj8;
}
{
arg11 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj9, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj9);
@@ -14023,7 +14627,7 @@ SWIGINTERN PyObject *_wrap_svn_client_log4(PyObject *SWIGUNUSEDPARM(self), PyObj
}
{
arg10 = svn_swig_py_log_entry_receiver;
- arg11 = (void *)obj9;
+ arg11 = obj9;
}
{
arg12 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj10, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj10);
@@ -14154,7 +14758,7 @@ SWIGINTERN PyObject *_wrap_svn_client_log3(PyObject *SWIGUNUSEDPARM(self), PyObj
}
{
arg8 = svn_swig_py_log_receiver;
- arg9 = (void *)obj7;
+ arg9 = obj7;
}
{
arg10 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj8, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj8);
@@ -14277,7 +14881,7 @@ SWIGINTERN PyObject *_wrap_svn_client_log2(PyObject *SWIGUNUSEDPARM(self), PyObj
}
{
arg7 = svn_swig_py_log_receiver;
- arg8 = (void *)obj6;
+ arg8 = obj6;
}
{
arg9 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj7, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj7);
@@ -14387,7 +14991,7 @@ SWIGINTERN PyObject *_wrap_svn_client_log(PyObject *SWIGUNUSEDPARM(self), PyObje
}
{
arg6 = svn_swig_py_log_receiver;
- arg7 = (void *)obj5;
+ arg7 = obj5;
}
{
arg8 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj6, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj6);
@@ -14996,6 +15600,190 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_client_diff6(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_opt_revision_t *arg3 = (svn_opt_revision_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ svn_opt_revision_t *arg5 = (svn_opt_revision_t *) 0 ;
+ char *arg6 = (char *) 0 ;
+ svn_depth_t arg7 ;
+ svn_boolean_t arg8 ;
+ svn_boolean_t arg9 ;
+ svn_boolean_t arg10 ;
+ svn_boolean_t arg11 ;
+ svn_boolean_t arg12 ;
+ svn_boolean_t arg13 ;
+ svn_boolean_t arg14 ;
+ svn_boolean_t arg15 ;
+ char *arg16 = (char *) 0 ;
+ svn_stream_t *arg17 = (svn_stream_t *) 0 ;
+ svn_stream_t *arg18 = (svn_stream_t *) 0 ;
+ apr_array_header_t *arg19 = (apr_array_header_t *) 0 ;
+ svn_client_ctx_t *arg20 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg21 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj6 = 0 ;
+ PyObject * obj7 = 0 ;
+ PyObject * obj8 = 0 ;
+ PyObject * obj9 = 0 ;
+ PyObject * obj10 = 0 ;
+ PyObject * obj11 = 0 ;
+ PyObject * obj12 = 0 ;
+ PyObject * obj13 = 0 ;
+ PyObject * obj14 = 0 ;
+ PyObject * obj16 = 0 ;
+ PyObject * obj17 = 0 ;
+ PyObject * obj18 = 0 ;
+ PyObject * obj19 = 0 ;
+ PyObject * obj20 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg21 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OsOsOzOOOOOOOOOsOOOO|O:svn_client_diff6",&obj0,&arg2,&obj2,&arg4,&obj4,&arg6,&obj6,&obj7,&obj8,&obj9,&obj10,&obj11,&obj12,&obj13,&obj14,&arg16,&obj16,&obj17,&obj18,&obj19,&obj20)) SWIG_fail;
+ {
+ arg1 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj0,
+ sizeof(const char *),
+ svn_swig_py_unwrap_string,
+ NULL,
+ _global_pool);
+ if (PyErr_Occurred())
+ SWIG_fail;
+ }
+ {
+ arg3 = (svn_opt_revision_t *)svn_swig_MustGetPtr(obj2, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj2);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg5 = (svn_opt_revision_t *)svn_swig_MustGetPtr(obj4, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj4);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg7 = (svn_depth_t)SWIG_As_long (obj6);
+ if (SWIG_arg_fail(svn_argnum_obj6)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg8 = (svn_boolean_t)SWIG_As_long (obj7);
+ if (SWIG_arg_fail(svn_argnum_obj7)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg9 = (svn_boolean_t)SWIG_As_long (obj8);
+ if (SWIG_arg_fail(svn_argnum_obj8)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg10 = (svn_boolean_t)SWIG_As_long (obj9);
+ if (SWIG_arg_fail(svn_argnum_obj9)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg11 = (svn_boolean_t)SWIG_As_long (obj10);
+ if (SWIG_arg_fail(svn_argnum_obj10)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg12 = (svn_boolean_t)SWIG_As_long (obj11);
+ if (SWIG_arg_fail(svn_argnum_obj11)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg13 = (svn_boolean_t)SWIG_As_long (obj12);
+ if (SWIG_arg_fail(svn_argnum_obj12)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg14 = (svn_boolean_t)SWIG_As_long (obj13);
+ if (SWIG_arg_fail(svn_argnum_obj13)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg15 = (svn_boolean_t)SWIG_As_long (obj14);
+ if (SWIG_arg_fail(svn_argnum_obj14)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg17 = svn_swig_py_make_stream (obj16, _global_pool);
+ }
+ {
+ arg18 = svn_swig_py_make_stream (obj17, _global_pool);
+ }
+ {
+ arg19 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj18,
+ sizeof(const char *),
+ svn_swig_py_unwrap_string,
+ NULL,
+ _global_pool);
+ if (PyErr_Occurred())
+ SWIG_fail;
+ }
+ {
+ arg20 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj19, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj19);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj20) {
+ /* Verify that the user supplied a valid pool */
+ if (obj20 != Py_None && obj20 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj20);
+ SWIG_arg_fail(svn_argnum_obj20);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_client_diff6((apr_array_header_t const *)arg1,(char const *)arg2,(struct svn_opt_revision_t const *)arg3,(char const *)arg4,(struct svn_opt_revision_t const *)arg5,(char const *)arg6,arg7,arg8,arg9,arg10,arg11,arg12,arg13,arg14,arg15,(char const *)arg16,arg17,arg18,(apr_array_header_t const *)arg19,arg20,arg21);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_client_diff5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
@@ -15696,6 +16484,202 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_client_diff_peg6(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_opt_revision_t *arg3 = (svn_opt_revision_t *) 0 ;
+ svn_opt_revision_t *arg4 = (svn_opt_revision_t *) 0 ;
+ svn_opt_revision_t *arg5 = (svn_opt_revision_t *) 0 ;
+ char *arg6 = (char *) 0 ;
+ svn_depth_t arg7 ;
+ svn_boolean_t arg8 ;
+ svn_boolean_t arg9 ;
+ svn_boolean_t arg10 ;
+ svn_boolean_t arg11 ;
+ svn_boolean_t arg12 ;
+ svn_boolean_t arg13 ;
+ svn_boolean_t arg14 ;
+ svn_boolean_t arg15 ;
+ char *arg16 = (char *) 0 ;
+ svn_stream_t *arg17 = (svn_stream_t *) 0 ;
+ svn_stream_t *arg18 = (svn_stream_t *) 0 ;
+ apr_array_header_t *arg19 = (apr_array_header_t *) 0 ;
+ svn_client_ctx_t *arg20 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg21 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj6 = 0 ;
+ PyObject * obj7 = 0 ;
+ PyObject * obj8 = 0 ;
+ PyObject * obj9 = 0 ;
+ PyObject * obj10 = 0 ;
+ PyObject * obj11 = 0 ;
+ PyObject * obj12 = 0 ;
+ PyObject * obj13 = 0 ;
+ PyObject * obj14 = 0 ;
+ PyObject * obj16 = 0 ;
+ PyObject * obj17 = 0 ;
+ PyObject * obj18 = 0 ;
+ PyObject * obj19 = 0 ;
+ PyObject * obj20 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg21 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OsOOOzOOOOOOOOOsOOOO|O:svn_client_diff_peg6",&obj0,&arg2,&obj2,&obj3,&obj4,&arg6,&obj6,&obj7,&obj8,&obj9,&obj10,&obj11,&obj12,&obj13,&obj14,&arg16,&obj16,&obj17,&obj18,&obj19,&obj20)) SWIG_fail;
+ {
+ arg1 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj0,
+ sizeof(const char *),
+ svn_swig_py_unwrap_string,
+ NULL,
+ _global_pool);
+ if (PyErr_Occurred())
+ SWIG_fail;
+ }
+ {
+ arg3 = (svn_opt_revision_t *)svn_swig_MustGetPtr(obj2, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj2);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg4 = (svn_opt_revision_t *)svn_swig_MustGetPtr(obj3, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj3);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg5 = (svn_opt_revision_t *)svn_swig_MustGetPtr(obj4, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj4);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg7 = (svn_depth_t)SWIG_As_long (obj6);
+ if (SWIG_arg_fail(svn_argnum_obj6)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg8 = (svn_boolean_t)SWIG_As_long (obj7);
+ if (SWIG_arg_fail(svn_argnum_obj7)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg9 = (svn_boolean_t)SWIG_As_long (obj8);
+ if (SWIG_arg_fail(svn_argnum_obj8)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg10 = (svn_boolean_t)SWIG_As_long (obj9);
+ if (SWIG_arg_fail(svn_argnum_obj9)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg11 = (svn_boolean_t)SWIG_As_long (obj10);
+ if (SWIG_arg_fail(svn_argnum_obj10)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg12 = (svn_boolean_t)SWIG_As_long (obj11);
+ if (SWIG_arg_fail(svn_argnum_obj11)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg13 = (svn_boolean_t)SWIG_As_long (obj12);
+ if (SWIG_arg_fail(svn_argnum_obj12)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg14 = (svn_boolean_t)SWIG_As_long (obj13);
+ if (SWIG_arg_fail(svn_argnum_obj13)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg15 = (svn_boolean_t)SWIG_As_long (obj14);
+ if (SWIG_arg_fail(svn_argnum_obj14)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg17 = svn_swig_py_make_stream (obj16, _global_pool);
+ }
+ {
+ arg18 = svn_swig_py_make_stream (obj17, _global_pool);
+ }
+ {
+ arg19 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj18,
+ sizeof(const char *),
+ svn_swig_py_unwrap_string,
+ NULL,
+ _global_pool);
+ if (PyErr_Occurred())
+ SWIG_fail;
+ }
+ {
+ arg20 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj19, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj19);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj20) {
+ /* Verify that the user supplied a valid pool */
+ if (obj20 != Py_None && obj20 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj20);
+ SWIG_arg_fail(svn_argnum_obj20);
+ SWIG_fail;
+ }
+ }
+ {
+ if (!arg3) {
+ SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_client_diff_peg6((apr_array_header_t const *)arg1,(char const *)arg2,(struct svn_opt_revision_t const *)arg3,(struct svn_opt_revision_t const *)arg4,(struct svn_opt_revision_t const *)arg5,(char const *)arg6,arg7,arg8,arg9,arg10,arg11,arg12,arg13,arg14,arg15,(char const *)arg16,arg17,arg18,(apr_array_header_t const *)arg19,arg20,arg21);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_client_diff_peg5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
@@ -16958,6 +17942,377 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_client_get_merging_summary(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_boolean_t *arg1 = (svn_boolean_t *) 0 ;
+ char **arg2 = (char **) 0 ;
+ svn_revnum_t *arg3 = (svn_revnum_t *) 0 ;
+ char **arg4 = (char **) 0 ;
+ svn_revnum_t *arg5 = (svn_revnum_t *) 0 ;
+ char **arg6 = (char **) 0 ;
+ svn_revnum_t *arg7 = (svn_revnum_t *) 0 ;
+ char **arg8 = (char **) 0 ;
+ svn_revnum_t *arg9 = (svn_revnum_t *) 0 ;
+ char **arg10 = (char **) 0 ;
+ char *arg11 = (char *) 0 ;
+ svn_opt_revision_t *arg12 = (svn_opt_revision_t *) 0 ;
+ char *arg13 = (char *) 0 ;
+ svn_opt_revision_t *arg14 = (svn_opt_revision_t *) 0 ;
+ svn_client_ctx_t *arg15 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg16 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg17 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_boolean_t temp1 ;
+ int res1 = SWIG_TMPOBJ ;
+ char *temp2 ;
+ svn_revnum_t temp3 ;
+ int res3 = SWIG_TMPOBJ ;
+ char *temp4 ;
+ svn_revnum_t temp5 ;
+ int res5 = SWIG_TMPOBJ ;
+ char *temp6 ;
+ svn_revnum_t temp7 ;
+ int res7 = SWIG_TMPOBJ ;
+ char *temp8 ;
+ svn_revnum_t temp9 ;
+ int res9 = SWIG_TMPOBJ ;
+ char *temp10 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj5 = 0 ;
+ PyObject * obj6 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg16 = _global_pool;
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg17 = _global_pool;
+ arg1 = &temp1;
+ arg2 = &temp2;
+ arg3 = &temp3;
+ arg4 = &temp4;
+ arg5 = &temp5;
+ arg6 = &temp6;
+ arg7 = &temp7;
+ arg8 = &temp8;
+ arg9 = &temp9;
+ arg10 = &temp10;
+ if (!PyArg_ParseTuple(args,(char *)"sOsOO|OO:svn_client_get_merging_summary",&arg11,&obj1,&arg13,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+ {
+ arg12 = (svn_opt_revision_t *)svn_swig_MustGetPtr(obj1, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj1);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg14 = (svn_opt_revision_t *)svn_swig_MustGetPtr(obj3, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj3);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg15 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj4, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj4);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj5) {
+ /* Verify that the user supplied a valid pool */
+ if (obj5 != Py_None && obj5 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj5);
+ SWIG_arg_fail(svn_argnum_obj5);
+ SWIG_fail;
+ }
+ }
+ if (obj6) {
+ /* Verify that the user supplied a valid pool */
+ if (obj6 != Py_None && obj6 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj6);
+ SWIG_arg_fail(svn_argnum_obj6);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_client_get_merging_summary(arg1,(char const **)arg2,arg3,(char const **)arg4,arg5,(char const **)arg6,arg7,(char const **)arg8,arg9,(char const **)arg10,(char const *)arg11,(struct svn_opt_revision_t const *)arg12,(char const *)arg13,(struct svn_opt_revision_t const *)arg14,arg15,arg16,arg17);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ if (SWIG_IsTmpObj(res1)) {
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg1)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res1) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_int, new_flags));
+ }
+ {
+ PyObject *s;
+ if (*arg2 == NULL) {
+ Py_INCREF(Py_None);
+ s = Py_None;
+ }
+ else {
+ s = PyString_FromString(*arg2);
+ if (s == NULL)
+ SWIG_fail;
+ }
+ resultobj = SWIG_Python_AppendOutput(resultobj, s);
+ }
+ if (SWIG_IsTmpObj(res3)) {
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_long((*arg3)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_long, new_flags));
+ }
+ {
+ PyObject *s;
+ if (*arg4 == NULL) {
+ Py_INCREF(Py_None);
+ s = Py_None;
+ }
+ else {
+ s = PyString_FromString(*arg4);
+ if (s == NULL)
+ SWIG_fail;
+ }
+ resultobj = SWIG_Python_AppendOutput(resultobj, s);
+ }
+ if (SWIG_IsTmpObj(res5)) {
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_long((*arg5)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res5) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg5), SWIGTYPE_p_long, new_flags));
+ }
+ {
+ PyObject *s;
+ if (*arg6 == NULL) {
+ Py_INCREF(Py_None);
+ s = Py_None;
+ }
+ else {
+ s = PyString_FromString(*arg6);
+ if (s == NULL)
+ SWIG_fail;
+ }
+ resultobj = SWIG_Python_AppendOutput(resultobj, s);
+ }
+ if (SWIG_IsTmpObj(res7)) {
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_long((*arg7)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res7) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg7), SWIGTYPE_p_long, new_flags));
+ }
+ {
+ PyObject *s;
+ if (*arg8 == NULL) {
+ Py_INCREF(Py_None);
+ s = Py_None;
+ }
+ else {
+ s = PyString_FromString(*arg8);
+ if (s == NULL)
+ SWIG_fail;
+ }
+ resultobj = SWIG_Python_AppendOutput(resultobj, s);
+ }
+ if (SWIG_IsTmpObj(res9)) {
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_long((*arg9)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res9) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg9), SWIGTYPE_p_long, new_flags));
+ }
+ {
+ PyObject *s;
+ if (*arg10 == NULL) {
+ Py_INCREF(Py_None);
+ s = Py_None;
+ }
+ else {
+ s = PyString_FromString(*arg10);
+ if (s == NULL)
+ SWIG_fail;
+ }
+ resultobj = SWIG_Python_AppendOutput(resultobj, s);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_client_merge5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ char *arg1 = (char *) 0 ;
+ svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_opt_revision_t *arg4 = (svn_opt_revision_t *) 0 ;
+ char *arg5 = (char *) 0 ;
+ svn_depth_t arg6 ;
+ svn_boolean_t arg7 ;
+ svn_boolean_t arg8 ;
+ svn_boolean_t arg9 ;
+ svn_boolean_t arg10 ;
+ svn_boolean_t arg11 ;
+ svn_boolean_t arg12 ;
+ apr_array_header_t *arg13 = (apr_array_header_t *) 0 ;
+ svn_client_ctx_t *arg14 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg15 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj5 = 0 ;
+ PyObject * obj6 = 0 ;
+ PyObject * obj7 = 0 ;
+ PyObject * obj8 = 0 ;
+ PyObject * obj9 = 0 ;
+ PyObject * obj10 = 0 ;
+ PyObject * obj11 = 0 ;
+ PyObject * obj12 = 0 ;
+ PyObject * obj13 = 0 ;
+ PyObject * obj14 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg15 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"sOsOsOOOOOOOOO|O:svn_client_merge5",&arg1,&obj1,&arg3,&obj3,&arg5,&obj5,&obj6,&obj7,&obj8,&obj9,&obj10,&obj11,&obj12,&obj13,&obj14)) SWIG_fail;
+ {
+ arg2 = (svn_opt_revision_t *)svn_swig_MustGetPtr(obj1, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj1);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg4 = (svn_opt_revision_t *)svn_swig_MustGetPtr(obj3, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj3);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg6 = (svn_depth_t)SWIG_As_long (obj5);
+ if (SWIG_arg_fail(svn_argnum_obj5)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg7 = (svn_boolean_t)SWIG_As_long (obj6);
+ if (SWIG_arg_fail(svn_argnum_obj6)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg8 = (svn_boolean_t)SWIG_As_long (obj7);
+ if (SWIG_arg_fail(svn_argnum_obj7)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg9 = (svn_boolean_t)SWIG_As_long (obj8);
+ if (SWIG_arg_fail(svn_argnum_obj8)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg10 = (svn_boolean_t)SWIG_As_long (obj9);
+ if (SWIG_arg_fail(svn_argnum_obj9)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg11 = (svn_boolean_t)SWIG_As_long (obj10);
+ if (SWIG_arg_fail(svn_argnum_obj10)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg12 = (svn_boolean_t)SWIG_As_long (obj11);
+ if (SWIG_arg_fail(svn_argnum_obj11)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg13 = (apr_array_header_t *)svn_swig_MustGetPtr(obj12, SWIGTYPE_p_apr_array_header_t, svn_argnum_obj12);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg14 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj13, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj13);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj14) {
+ /* Verify that the user supplied a valid pool */
+ if (obj14 != Py_None && obj14 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj14);
+ SWIG_arg_fail(svn_argnum_obj14);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_client_merge5((char const *)arg1,(struct svn_opt_revision_t const *)arg2,(char const *)arg3,(struct svn_opt_revision_t const *)arg4,(char const *)arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12,(apr_array_header_t const *)arg13,arg14,arg15);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_client_merge4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
char *arg1 = (char *) 0 ;
@@ -17506,14 +18861,155 @@ SWIGINTERN PyObject *_wrap_svn_client_merge_reintegrate(PyObject *SWIGUNUSEDPARM
}
}
{
- if (!arg2) {
- SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_client_merge_reintegrate((char const *)arg1,(struct svn_opt_revision_t const *)arg2,(char const *)arg3,arg4,(apr_array_header_t const *)arg5,arg6,arg7);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_client_merge_peg5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ char *arg1 = (char *) 0 ;
+ apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
+ svn_opt_revision_t *arg3 = (svn_opt_revision_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ svn_depth_t arg5 ;
+ svn_boolean_t arg6 ;
+ svn_boolean_t arg7 ;
+ svn_boolean_t arg8 ;
+ svn_boolean_t arg9 ;
+ svn_boolean_t arg10 ;
+ svn_boolean_t arg11 ;
+ apr_array_header_t *arg12 = (apr_array_header_t *) 0 ;
+ svn_client_ctx_t *arg13 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg14 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj5 = 0 ;
+ PyObject * obj6 = 0 ;
+ PyObject * obj7 = 0 ;
+ PyObject * obj8 = 0 ;
+ PyObject * obj9 = 0 ;
+ PyObject * obj10 = 0 ;
+ PyObject * obj11 = 0 ;
+ PyObject * obj12 = 0 ;
+ PyObject * obj13 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg14 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"sOOsOOOOOOOOO|O:svn_client_merge_peg5",&arg1,&obj1,&obj2,&arg4,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9,&obj10,&obj11,&obj12,&obj13)) SWIG_fail;
+ {
+ arg2 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj1,
+ sizeof(const svn_opt_revision_range_t *),
+ svn_swig_py_unwrap_struct_ptr,
+ SWIGTYPE_p_svn_opt_revision_range_t,
+ _global_pool);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg3 = (svn_opt_revision_t *)svn_swig_MustGetPtr(obj2, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj2);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg5 = (svn_depth_t)SWIG_As_long (obj4);
+ if (SWIG_arg_fail(svn_argnum_obj4)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg6 = (svn_boolean_t)SWIG_As_long (obj5);
+ if (SWIG_arg_fail(svn_argnum_obj5)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg7 = (svn_boolean_t)SWIG_As_long (obj6);
+ if (SWIG_arg_fail(svn_argnum_obj6)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg8 = (svn_boolean_t)SWIG_As_long (obj7);
+ if (SWIG_arg_fail(svn_argnum_obj7)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg9 = (svn_boolean_t)SWIG_As_long (obj8);
+ if (SWIG_arg_fail(svn_argnum_obj8)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg10 = (svn_boolean_t)SWIG_As_long (obj9);
+ if (SWIG_arg_fail(svn_argnum_obj9)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg11 = (svn_boolean_t)SWIG_As_long (obj10);
+ if (SWIG_arg_fail(svn_argnum_obj10)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg12 = (apr_array_header_t *)svn_swig_MustGetPtr(obj11, SWIGTYPE_p_apr_array_header_t, svn_argnum_obj11);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg13 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj12, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj12);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj13) {
+ /* Verify that the user supplied a valid pool */
+ if (obj13 != Py_None && obj13 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj13);
+ SWIG_arg_fail(svn_argnum_obj13);
+ SWIG_fail;
}
}
{
svn_swig_py_release_py_lock();
- result = (svn_error_t *)svn_client_merge_reintegrate((char const *)arg1,(struct svn_opt_revision_t const *)arg2,(char const *)arg3,arg4,(apr_array_header_t const *)arg5,arg6,arg7);
+ result = (svn_error_t *)svn_client_merge_peg5((char const *)arg1,(apr_array_header_t const *)arg2,(struct svn_opt_revision_t const *)arg3,(char const *)arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,(apr_array_header_t const *)arg12,arg13,arg14);
svn_swig_py_acquire_py_lock();
@@ -17649,11 +19145,6 @@ SWIGINTERN PyObject *_wrap_svn_client_merge_peg4(PyObject *SWIGUNUSEDPARM(self),
}
}
{
- if (!arg3) {
- SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
- }
- }
- {
svn_swig_py_release_py_lock();
result = (svn_error_t *)svn_client_merge_peg4((char const *)arg1,(apr_array_header_t const *)arg2,(struct svn_opt_revision_t const *)arg3,(char const *)arg4,arg5,arg6,arg7,arg8,arg9,arg10,(apr_array_header_t const *)arg11,arg12,arg13);
@@ -18241,6 +19732,142 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_client_mergeinfo_log2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_boolean_t arg1 ;
+ char *arg2 = (char *) 0 ;
+ svn_opt_revision_t *arg3 = (svn_opt_revision_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ svn_opt_revision_t *arg5 = (svn_opt_revision_t *) 0 ;
+ svn_opt_revision_t *arg6 = (svn_opt_revision_t *) 0 ;
+ svn_opt_revision_t *arg7 = (svn_opt_revision_t *) 0 ;
+ svn_log_entry_receiver_t arg8 = (svn_log_entry_receiver_t) 0 ;
+ void *arg9 = (void *) 0 ;
+ svn_boolean_t arg10 ;
+ svn_depth_t arg11 ;
+ apr_array_header_t *arg12 = (apr_array_header_t *) 0 ;
+ svn_client_ctx_t *arg13 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg14 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj5 = 0 ;
+ PyObject * obj6 = 0 ;
+ PyObject * obj7 = 0 ;
+ PyObject * obj8 = 0 ;
+ PyObject * obj9 = 0 ;
+ PyObject * obj10 = 0 ;
+ PyObject * obj11 = 0 ;
+ PyObject * obj12 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg14 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OsOsOOOOOOOO|O:svn_client_mergeinfo_log2",&obj0,&arg2,&obj2,&arg4,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9,&obj10,&obj11,&obj12)) SWIG_fail;
+ {
+ arg1 = (svn_boolean_t)SWIG_As_long (obj0);
+ if (SWIG_arg_fail(svn_argnum_obj0)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg3 = (svn_opt_revision_t *)svn_swig_MustGetPtr(obj2, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj2);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg5 = (svn_opt_revision_t *)svn_swig_MustGetPtr(obj4, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj4);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg6 = (svn_opt_revision_t *)svn_swig_MustGetPtr(obj5, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj5);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg7 = (svn_opt_revision_t *)svn_swig_MustGetPtr(obj6, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj6);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg8 = svn_swig_py_log_entry_receiver;
+ arg9 = obj7;
+ }
+ {
+ arg10 = (svn_boolean_t)SWIG_As_long (obj8);
+ if (SWIG_arg_fail(svn_argnum_obj8)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg11 = (svn_depth_t)SWIG_As_long (obj9);
+ if (SWIG_arg_fail(svn_argnum_obj9)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg12 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj10,
+ sizeof(const char *),
+ svn_swig_py_unwrap_string,
+ NULL,
+ _global_pool);
+ if (PyErr_Occurred())
+ SWIG_fail;
+ }
+ {
+ arg13 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj11, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj11);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj12) {
+ /* Verify that the user supplied a valid pool */
+ if (obj12 != Py_None && obj12 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj12);
+ SWIG_arg_fail(svn_argnum_obj12);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_client_mergeinfo_log2(arg1,(char const *)arg2,(struct svn_opt_revision_t const *)arg3,(char const *)arg4,(struct svn_opt_revision_t const *)arg5,(struct svn_opt_revision_t const *)arg6,(struct svn_opt_revision_t const *)arg7,arg8,arg9,arg10,arg11,(apr_array_header_t const *)arg12,arg13,arg14);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_client_mergeinfo_log(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_boolean_t arg1 ;
@@ -18293,7 +19920,7 @@ SWIGINTERN PyObject *_wrap_svn_client_mergeinfo_log(PyObject *SWIGUNUSEDPARM(sel
}
{
arg6 = svn_swig_py_log_entry_receiver;
- arg7 = (void *)obj5;
+ arg7 = obj5;
}
{
arg8 = (svn_boolean_t)SWIG_As_long (obj6);
@@ -18331,11 +19958,6 @@ SWIGINTERN PyObject *_wrap_svn_client_mergeinfo_log(PyObject *SWIGUNUSEDPARM(sel
}
}
{
- if (!arg3) {
- SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
- }
- }
- {
svn_swig_py_release_py_lock();
result = (svn_error_t *)svn_client_mergeinfo_log(arg1,(char const *)arg2,(struct svn_opt_revision_t const *)arg3,(char const *)arg4,(struct svn_opt_revision_t const *)arg5,arg6,arg7,arg8,arg9,(apr_array_header_t const *)arg10,arg11,arg12);
@@ -18408,7 +20030,7 @@ SWIGINTERN PyObject *_wrap_svn_client_mergeinfo_log_merged(PyObject *SWIGUNUSEDP
}
{
arg5 = svn_swig_py_log_entry_receiver;
- arg6 = (void *)obj4;
+ arg6 = obj4;
}
{
arg7 = (svn_boolean_t)SWIG_As_long (obj5);
@@ -18517,7 +20139,7 @@ SWIGINTERN PyObject *_wrap_svn_client_mergeinfo_log_eligible(PyObject *SWIGUNUSE
}
{
arg5 = svn_swig_py_log_entry_receiver;
- arg6 = (void *)obj4;
+ arg6 = obj4;
}
{
arg7 = (svn_boolean_t)SWIG_As_long (obj5);
@@ -19165,13 +20787,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_copy_source_t_path_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_copy_source_t *arg1 = (svn_client_copy_source_t *) 0 ;
+ struct svn_client_copy_source_t *arg1 = (struct svn_client_copy_source_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_client_copy_source_t_path_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_client_copy_source_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_copy_source_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_copy_source_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_copy_source_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -19193,13 +20815,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_copy_source_t_path_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_copy_source_t *arg1 = (svn_client_copy_source_t *) 0 ;
+ struct svn_client_copy_source_t *arg1 = (struct svn_client_copy_source_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_copy_source_t_path_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_copy_source_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_copy_source_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_copy_source_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_copy_source_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -19214,14 +20836,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_copy_source_t_revision_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_copy_source_t *arg1 = (svn_client_copy_source_t *) 0 ;
+ struct svn_client_copy_source_t *arg1 = (struct svn_client_copy_source_t *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_copy_source_t_revision_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_copy_source_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_copy_source_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_copy_source_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_copy_source_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -19247,13 +20869,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_copy_source_t_revision_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_copy_source_t *arg1 = (svn_client_copy_source_t *) 0 ;
+ struct svn_client_copy_source_t *arg1 = (struct svn_client_copy_source_t *) 0 ;
PyObject * obj0 = 0 ;
svn_opt_revision_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_copy_source_t_revision_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_copy_source_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_copy_source_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_copy_source_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_copy_source_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -19269,14 +20891,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_copy_source_t_peg_revision_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_copy_source_t *arg1 = (svn_client_copy_source_t *) 0 ;
+ struct svn_client_copy_source_t *arg1 = (struct svn_client_copy_source_t *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_copy_source_t_peg_revision_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_copy_source_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_copy_source_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_copy_source_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_copy_source_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -19302,13 +20924,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_copy_source_t_peg_revision_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_copy_source_t *arg1 = (svn_client_copy_source_t *) 0 ;
+ struct svn_client_copy_source_t *arg1 = (struct svn_client_copy_source_t *) 0 ;
PyObject * obj0 = 0 ;
svn_opt_revision_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_copy_source_t_peg_revision_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_copy_source_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_copy_source_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_copy_source_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_copy_source_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -19324,13 +20946,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_client_copy_source_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_copy_source_t *result = 0 ;
+ struct svn_client_copy_source_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_client_copy_source_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_client_copy_source_t *)calloc(1, sizeof(svn_client_copy_source_t));
+ result = (struct svn_client_copy_source_t *)calloc(1, sizeof(struct svn_client_copy_source_t));
svn_swig_py_acquire_py_lock();
@@ -19345,12 +20967,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_client_copy_source_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_copy_source_t *arg1 = (svn_client_copy_source_t *) 0 ;
+ struct svn_client_copy_source_t *arg1 = (struct svn_client_copy_source_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_client_copy_source_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_copy_source_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_copy_source_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_copy_source_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_copy_source_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -19399,14 +21021,13 @@ SWIGINTERN PyObject *_wrap_svn_client_copy6(PyObject *SWIGUNUSEDPARM(self), PyOb
PyObject * obj6 = 0 ;
PyObject * obj7 = 0 ;
PyObject * obj8 = 0 ;
- PyObject * obj9 = 0 ;
svn_error_t *result = 0 ;
if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
&_global_py_pool, &_global_pool))
SWIG_fail;
arg10 = _global_pool;
- if (!PyArg_ParseTuple(args,(char *)"OsOOOOOOO|O:svn_client_copy6",&obj0,&arg2,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"OsOOOOOO|O:svn_client_copy6",&obj0,&arg2,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8)) SWIG_fail;
{
arg1 = (apr_array_header_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_apr_array_header_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
@@ -19445,32 +21066,20 @@ SWIGINTERN PyObject *_wrap_svn_client_copy6(PyObject *SWIGUNUSEDPARM(self), PyOb
}
}
{
- svn_commit_callback2_t * tmp =
- svn_swig_MustGetPtr(obj6, SWIGTYPE_p_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t, svn_argnum_obj6);
- if (tmp == NULL || PyErr_Occurred()) {
- SWIG_fail;
- }
- arg7 = *tmp;
- }
- {
- if (obj7 == Py_None) {
- arg8 = NULL;
- } else if (SWIG_ConvertPtr(obj7, (void **) &arg8, 0, 0) == -1) {
- arg8 = (void *) obj7;
- PyErr_Clear();
- }
+ arg7 = svn_swig_py_commit_callback2;
+ arg8 = (void *)obj6;
}
{
- arg9 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj8, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj8);
+ arg9 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj7, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj7);
if (PyErr_Occurred()) {
SWIG_fail;
}
}
- if (obj9) {
+ if (obj8) {
/* Verify that the user supplied a valid pool */
- if (obj9 != Py_None && obj9 != _global_py_pool) {
- SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj9);
- SWIG_arg_fail(svn_argnum_obj9);
+ if (obj8 != Py_None && obj8 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj8);
+ SWIG_arg_fail(svn_argnum_obj8);
SWIG_fail;
}
}
@@ -19968,6 +21577,132 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_client_move7(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ svn_boolean_t arg5 ;
+ svn_boolean_t arg6 ;
+ apr_hash_t *arg7 = (apr_hash_t *) 0 ;
+ svn_commit_callback2_t arg8 = (svn_commit_callback2_t) 0 ;
+ void *arg9 = (void *) 0 ;
+ svn_client_ctx_t *arg10 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg11 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj5 = 0 ;
+ PyObject * obj6 = 0 ;
+ PyObject * obj7 = 0 ;
+ PyObject * obj8 = 0 ;
+ PyObject * obj9 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg11 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OsOOOOOOO|O:svn_client_move7",&obj0,&arg2,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9)) SWIG_fail;
+ {
+ arg1 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj0,
+ sizeof(const char *),
+ svn_swig_py_unwrap_string,
+ NULL,
+ _global_pool);
+ if (PyErr_Occurred())
+ SWIG_fail;
+ }
+ {
+ arg3 = (svn_boolean_t)SWIG_As_long (obj2);
+ if (SWIG_arg_fail(svn_argnum_obj2)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg4 = (svn_boolean_t)SWIG_As_long (obj3);
+ if (SWIG_arg_fail(svn_argnum_obj3)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg5 = (svn_boolean_t)SWIG_As_long (obj4);
+ if (SWIG_arg_fail(svn_argnum_obj4)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg6 = (svn_boolean_t)SWIG_As_long (obj5);
+ if (SWIG_arg_fail(svn_argnum_obj5)) {
+ SWIG_fail;
+ }
+ }
+ {
+ if (_global_pool == NULL)
+ {
+ if (svn_swig_py_get_parent_pool(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ }
+
+ arg7 = svn_swig_py_prophash_from_dict(obj6, _global_pool);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg8 = svn_swig_py_commit_callback2;
+ arg9 = (void *)obj7;
+ }
+ {
+ arg10 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj8, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj8);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj9) {
+ /* Verify that the user supplied a valid pool */
+ if (obj9 != Py_None && obj9 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj9);
+ SWIG_arg_fail(svn_argnum_obj9);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_client_move7((apr_array_header_t const *)arg1,(char const *)arg2,arg3,arg4,arg5,arg6,(apr_hash_t const *)arg7,arg8,arg9,arg10,arg11);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_client_move6(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
@@ -19988,14 +21723,13 @@ SWIGINTERN PyObject *_wrap_svn_client_move6(PyObject *SWIGUNUSEDPARM(self), PyOb
PyObject * obj5 = 0 ;
PyObject * obj6 = 0 ;
PyObject * obj7 = 0 ;
- PyObject * obj8 = 0 ;
svn_error_t *result = 0 ;
if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
&_global_py_pool, &_global_pool))
SWIG_fail;
arg9 = _global_pool;
- if (!PyArg_ParseTuple(args,(char *)"OsOOOOOO|O:svn_client_move6",&obj0,&arg2,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"OsOOOOO|O:svn_client_move6",&obj0,&arg2,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7)) SWIG_fail;
{
arg1 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj0,
sizeof(const char *),
@@ -20031,32 +21765,20 @@ SWIGINTERN PyObject *_wrap_svn_client_move6(PyObject *SWIGUNUSEDPARM(self), PyOb
}
}
{
- svn_commit_callback2_t * tmp =
- svn_swig_MustGetPtr(obj5, SWIGTYPE_p_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t, svn_argnum_obj5);
- if (tmp == NULL || PyErr_Occurred()) {
- SWIG_fail;
- }
- arg6 = *tmp;
- }
- {
- if (obj6 == Py_None) {
- arg7 = NULL;
- } else if (SWIG_ConvertPtr(obj6, (void **) &arg7, 0, 0) == -1) {
- arg7 = (void *) obj6;
- PyErr_Clear();
- }
+ arg6 = svn_swig_py_commit_callback2;
+ arg7 = (void *)obj5;
}
{
- arg8 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj7, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj7);
+ arg8 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj6, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj6);
if (PyErr_Occurred()) {
SWIG_fail;
}
}
- if (obj8) {
+ if (obj7) {
/* Verify that the user supplied a valid pool */
- if (obj8 != Py_None && obj8 != _global_py_pool) {
- SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj8);
- SWIG_arg_fail(svn_argnum_obj8);
+ if (obj7 != Py_None && obj7 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj7);
+ SWIG_arg_fail(svn_argnum_obj7);
SWIG_fail;
}
}
@@ -20557,14 +22279,13 @@ SWIGINTERN PyObject *_wrap_svn_client_propset_remote(PyObject *SWIGUNUSEDPARM(se
PyObject * obj6 = 0 ;
PyObject * obj7 = 0 ;
PyObject * obj8 = 0 ;
- PyObject * obj9 = 0 ;
svn_error_t *result = 0 ;
if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
&_global_py_pool, &_global_pool))
SWIG_fail;
arg10 = _global_pool;
- if (!PyArg_ParseTuple(args,(char *)"sOsOOOOOO|O:svn_client_propset_remote",&arg1,&obj1,&arg3,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"sOsOOOOO|O:svn_client_propset_remote",&arg1,&obj1,&arg3,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8)) SWIG_fail;
{
if (obj1 == Py_None)
arg2 = NULL;
@@ -20604,32 +22325,20 @@ SWIGINTERN PyObject *_wrap_svn_client_propset_remote(PyObject *SWIGUNUSEDPARM(se
}
}
{
- svn_commit_callback2_t * tmp =
- svn_swig_MustGetPtr(obj6, SWIGTYPE_p_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t, svn_argnum_obj6);
- if (tmp == NULL || PyErr_Occurred()) {
- SWIG_fail;
- }
- arg7 = *tmp;
- }
- {
- if (obj7 == Py_None) {
- arg8 = NULL;
- } else if (SWIG_ConvertPtr(obj7, (void **) &arg8, 0, 0) == -1) {
- arg8 = (void *) obj7;
- PyErr_Clear();
- }
+ arg7 = svn_swig_py_commit_callback2;
+ arg8 = (void *)obj6;
}
{
- arg9 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj8, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj8);
+ arg9 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj7, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj7);
if (PyErr_Occurred()) {
SWIG_fail;
}
}
- if (obj9) {
+ if (obj8) {
/* Verify that the user supplied a valid pool */
- if (obj9 != Py_None && obj9 != _global_py_pool) {
- SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj9);
- SWIG_arg_fail(svn_argnum_obj9);
+ if (obj8 != Py_None && obj8 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj8);
+ SWIG_arg_fail(svn_argnum_obj8);
SWIG_fail;
}
}
@@ -21322,6 +23031,155 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_client_propget5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ apr_hash_t **arg1 = (apr_hash_t **) 0 ;
+ apr_array_header_t **arg2 = (apr_array_header_t **) 0 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+ svn_opt_revision_t *arg5 = (svn_opt_revision_t *) 0 ;
+ svn_opt_revision_t *arg6 = (svn_opt_revision_t *) 0 ;
+ svn_revnum_t *arg7 = (svn_revnum_t *) 0 ;
+ svn_depth_t arg8 ;
+ apr_array_header_t *arg9 = (apr_array_header_t *) 0 ;
+ svn_client_ctx_t *arg10 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg11 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg12 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ apr_hash_t *temp1 ;
+ apr_array_header_t *temp2 ;
+ svn_revnum_t temp7 ;
+ int res7 = SWIG_TMPOBJ ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj5 = 0 ;
+ PyObject * obj6 = 0 ;
+ PyObject * obj7 = 0 ;
+ PyObject * obj8 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg11 = _global_pool;
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg12 = _global_pool;
+ arg1 = &temp1;
+ arg2 = &temp2;
+ arg7 = &temp7;
+ if (!PyArg_ParseTuple(args,(char *)"ssOOOOO|OO:svn_client_propget5",&arg3,&arg4,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8)) SWIG_fail;
+ {
+ arg5 = (svn_opt_revision_t *)svn_swig_MustGetPtr(obj2, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj2);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg6 = (svn_opt_revision_t *)svn_swig_MustGetPtr(obj3, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj3);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg8 = (svn_depth_t)SWIG_As_long (obj4);
+ if (SWIG_arg_fail(svn_argnum_obj4)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg9 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj5,
+ sizeof(const char *),
+ svn_swig_py_unwrap_string,
+ NULL,
+ _global_pool);
+ if (PyErr_Occurred())
+ SWIG_fail;
+ }
+ {
+ arg10 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj6, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj6);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj7) {
+ /* Verify that the user supplied a valid pool */
+ if (obj7 != Py_None && obj7 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj7);
+ SWIG_arg_fail(svn_argnum_obj7);
+ SWIG_fail;
+ }
+ }
+ if (obj8) {
+ /* Verify that the user supplied a valid pool */
+ if (obj8 != Py_None && obj8 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj8);
+ SWIG_arg_fail(svn_argnum_obj8);
+ SWIG_fail;
+ }
+ }
+ {
+ if (!arg5) {
+ SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
+ }
+ }
+ {
+ if (!arg6) {
+ SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_client_propget5(arg1,arg2,(char const *)arg3,(char const *)arg4,(struct svn_opt_revision_t const *)arg5,(struct svn_opt_revision_t const *)arg6,arg7,arg8,(apr_array_header_t const *)arg9,arg10,arg11,arg12);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_py_prophash_to_dict(*arg1));
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_py_propinheriteditemarray_to_dict(*arg2));
+ }
+ if (SWIG_IsTmpObj(res7)) {
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_long((*arg7)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res7) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg7), SWIGTYPE_p_long, new_flags));
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_client_propget4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
apr_hash_t **arg1 = (apr_hash_t **) 0 ;
@@ -21880,6 +23738,127 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_client_proplist4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ char *arg1 = (char *) 0 ;
+ svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
+ svn_opt_revision_t *arg3 = (svn_opt_revision_t *) 0 ;
+ svn_depth_t arg4 ;
+ apr_array_header_t *arg5 = (apr_array_header_t *) 0 ;
+ svn_boolean_t arg6 ;
+ svn_proplist_receiver2_t arg7 = (svn_proplist_receiver2_t) 0 ;
+ void *arg8 = (void *) 0 ;
+ svn_client_ctx_t *arg9 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg10 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj5 = 0 ;
+ PyObject * obj6 = 0 ;
+ PyObject * obj7 = 0 ;
+ PyObject * obj8 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg10 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"sOOOOOOO|O:svn_client_proplist4",&arg1,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8)) SWIG_fail;
+ {
+ arg2 = (svn_opt_revision_t *)svn_swig_MustGetPtr(obj1, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj1);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg3 = (svn_opt_revision_t *)svn_swig_MustGetPtr(obj2, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj2);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg4 = (svn_depth_t)SWIG_As_long (obj3);
+ if (SWIG_arg_fail(svn_argnum_obj3)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg5 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj4,
+ sizeof(const char *),
+ svn_swig_py_unwrap_string,
+ NULL,
+ _global_pool);
+ if (PyErr_Occurred())
+ SWIG_fail;
+ }
+ {
+ arg6 = (svn_boolean_t)SWIG_As_long (obj5);
+ if (SWIG_arg_fail(svn_argnum_obj5)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg7 = svn_swig_py_proplist_receiver2;
+ arg8 = (void *)obj6;
+ }
+ {
+ arg9 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj7, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj7);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj8) {
+ /* Verify that the user supplied a valid pool */
+ if (obj8 != Py_None && obj8 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj8);
+ SWIG_arg_fail(svn_argnum_obj8);
+ SWIG_fail;
+ }
+ }
+ {
+ if (!arg2) {
+ SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
+ }
+ }
+ {
+ if (!arg3) {
+ SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_client_proplist4((char const *)arg1,(struct svn_opt_revision_t const *)arg2,(struct svn_opt_revision_t const *)arg3,arg4,(apr_array_header_t const *)arg5,arg6,arg7,arg8,arg9,arg10);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_client_proplist3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
char *arg1 = (char *) 0 ;
@@ -22889,6 +24868,145 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_client_list3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ char *arg1 = (char *) 0 ;
+ svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
+ svn_opt_revision_t *arg3 = (svn_opt_revision_t *) 0 ;
+ svn_depth_t arg4 ;
+ apr_uint32_t arg5 ;
+ svn_boolean_t arg6 ;
+ svn_boolean_t arg7 ;
+ svn_client_list_func2_t arg8 = (svn_client_list_func2_t) 0 ;
+ void *arg9 = (void *) 0 ;
+ svn_client_ctx_t *arg10 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg11 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj5 = 0 ;
+ PyObject * obj6 = 0 ;
+ PyObject * obj7 = 0 ;
+ PyObject * obj8 = 0 ;
+ PyObject * obj9 = 0 ;
+ PyObject * obj10 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg11 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"sOOOOOOOOO|O:svn_client_list3",&arg1,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9,&obj10)) SWIG_fail;
+ {
+ arg2 = (svn_opt_revision_t *)svn_swig_MustGetPtr(obj1, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj1);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg3 = (svn_opt_revision_t *)svn_swig_MustGetPtr(obj2, SWIGTYPE_p_svn_opt_revision_t, svn_argnum_obj2);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg4 = (svn_depth_t)SWIG_As_long (obj3);
+ if (SWIG_arg_fail(svn_argnum_obj3)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg5 = (apr_uint32_t)SWIG_As_unsigned_SS_long (obj4);
+ if (SWIG_arg_fail(svn_argnum_obj4)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg6 = (svn_boolean_t)SWIG_As_long (obj5);
+ if (SWIG_arg_fail(svn_argnum_obj5)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg7 = (svn_boolean_t)SWIG_As_long (obj6);
+ if (SWIG_arg_fail(svn_argnum_obj6)) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_client_list_func2_t * tmp =
+ svn_swig_MustGetPtr(obj7, SWIGTYPE_p_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, svn_argnum_obj7);
+ if (tmp == NULL || PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ arg8 = *tmp;
+ }
+ {
+ if (obj8 == Py_None) {
+ arg9 = NULL;
+ } else if (SWIG_ConvertPtr(obj8, (void **) &arg9, 0, 0) == -1) {
+ arg9 = (void *) obj8;
+ PyErr_Clear();
+ }
+ }
+ {
+ arg10 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj9, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj9);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj10) {
+ /* Verify that the user supplied a valid pool */
+ if (obj10 != Py_None && obj10 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj10);
+ SWIG_arg_fail(svn_argnum_obj10);
+ SWIG_fail;
+ }
+ }
+ {
+ if (!arg2) {
+ SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
+ }
+ }
+ {
+ if (!arg3) {
+ SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_client_list3((char const *)arg1,(struct svn_opt_revision_t const *)arg2,(struct svn_opt_revision_t const *)arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_client_list2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
char *arg1 = (char *) 0 ;
@@ -24066,13 +26184,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_URL_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_info_t_URL_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24094,13 +26212,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_URL_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_URL_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24115,14 +26233,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_rev_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_info_t_rev_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24143,13 +26261,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_rev_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_rev_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24164,14 +26282,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_node_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_info_t_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24192,13 +26310,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
svn_node_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24213,13 +26331,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_repos_root_URL_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_info_t_repos_root_URL_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24241,13 +26359,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_repos_root_URL_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_repos_root_URL_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24262,13 +26380,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_repos_UUID_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_info_t_repos_UUID_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24290,13 +26408,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_repos_UUID_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_repos_UUID_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24311,14 +26429,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_last_changed_rev_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_info_t_last_changed_rev_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24339,13 +26457,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_last_changed_rev_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_last_changed_rev_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24360,14 +26478,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_last_changed_date_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
apr_time_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_info_t_last_changed_date_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24383,13 +26501,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_last_changed_date_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
apr_time_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_last_changed_date_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24404,13 +26522,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_last_changed_author_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_info_t_last_changed_author_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24432,13 +26550,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_last_changed_author_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_last_changed_author_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24453,14 +26571,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_lock_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_lock_t *arg2 = (svn_lock_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_info_t_lock_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24481,13 +26599,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_lock_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
svn_lock_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_lock_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24503,14 +26621,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_has_wc_info_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_info_t_has_wc_info_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24531,13 +26649,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_has_wc_info_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_has_wc_info_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24552,14 +26670,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_schedule_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_wc_schedule_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_info_t_schedule_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24580,13 +26698,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_schedule_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_schedule_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_schedule_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24601,13 +26719,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_copyfrom_url_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Oz:svn_info_t_copyfrom_url_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24629,13 +26747,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_copyfrom_url_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_copyfrom_url_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24650,14 +26768,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_copyfrom_rev_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_info_t_copyfrom_rev_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24678,13 +26796,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_copyfrom_rev_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_copyfrom_rev_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24699,14 +26817,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_text_time_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
apr_time_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_info_t_text_time_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24722,13 +26840,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_text_time_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
apr_time_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_text_time_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24743,14 +26861,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_prop_time_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
apr_time_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_info_t_prop_time_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24766,13 +26884,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_prop_time_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
apr_time_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_prop_time_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24787,13 +26905,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_checksum_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_info_t_checksum_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24815,13 +26933,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_checksum_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_checksum_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24836,13 +26954,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_conflict_old_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_info_t_conflict_old_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24864,13 +26982,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_conflict_old_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_conflict_old_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24885,13 +27003,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_conflict_new_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_info_t_conflict_new_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24913,13 +27031,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_conflict_new_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_conflict_new_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24934,13 +27052,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_conflict_wrk_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_info_t_conflict_wrk_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24962,13 +27080,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_conflict_wrk_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_conflict_wrk_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -24983,13 +27101,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_prejfile_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_info_t_prejfile_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25011,13 +27129,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_prejfile_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_prejfile_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25032,13 +27150,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_changelist_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_info_t_changelist_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25060,13 +27178,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_changelist_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_changelist_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25081,14 +27199,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_depth_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_depth_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_info_t_depth_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25109,13 +27227,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_depth_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
svn_depth_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_depth_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25130,14 +27248,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_working_size_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
apr_size_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_info_t_working_size_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25158,13 +27276,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_working_size_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
apr_size_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_working_size_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25179,14 +27297,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_size_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
apr_size_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_info_t_size_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25207,13 +27325,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_size_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
apr_size_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_size_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25228,14 +27346,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_size64_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_filesize_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_info_t_size64_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25251,13 +27369,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_size64_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
svn_filesize_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_size64_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25272,14 +27390,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_working_size64_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_filesize_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_info_t_working_size64_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25295,13 +27413,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_working_size64_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
svn_filesize_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_working_size64_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25316,14 +27434,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_tree_conflict_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_wc_conflict_description_t *arg2 = (svn_wc_conflict_description_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_info_t_tree_conflict_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25344,13 +27462,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_info_t_tree_conflict_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_conflict_description_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_info_t_tree_conflict_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25366,13 +27484,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_info_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *result = 0 ;
+ struct svn_info_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_info_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_info_t *)calloc(1, sizeof(svn_info_t));
+ result = (struct svn_info_t *)calloc(1, sizeof(struct svn_info_t));
svn_swig_py_acquire_py_lock();
@@ -25387,12 +27505,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_info_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_info_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25472,13 +27590,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_info2_t_URL_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_client_info2_t_URL_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25500,13 +27618,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_info2_t_URL_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_info2_t_URL_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25521,14 +27639,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_info2_t_rev_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_info2_t_rev_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25549,13 +27667,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_info2_t_rev_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_info2_t_rev_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25570,13 +27688,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_info2_t_repos_root_URL_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_client_info2_t_repos_root_URL_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25598,13 +27716,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_info2_t_repos_root_URL_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_info2_t_repos_root_URL_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25619,13 +27737,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_info2_t_repos_UUID_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_client_info2_t_repos_UUID_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25647,13 +27765,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_info2_t_repos_UUID_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_info2_t_repos_UUID_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25668,14 +27786,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_info2_t_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
svn_node_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_info2_t_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25696,13 +27814,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_info2_t_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_node_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_info2_t_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25717,14 +27835,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_info2_t_size_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
svn_filesize_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_info2_t_size_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25740,13 +27858,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_info2_t_size_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_filesize_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_info2_t_size_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25761,14 +27879,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_info2_t_last_changed_rev_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_info2_t_last_changed_rev_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25789,13 +27907,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_info2_t_last_changed_rev_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_info2_t_last_changed_rev_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25810,14 +27928,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_info2_t_last_changed_date_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
apr_time_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_info2_t_last_changed_date_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25833,13 +27951,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_info2_t_last_changed_date_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
PyObject * obj0 = 0 ;
apr_time_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_info2_t_last_changed_date_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25854,13 +27972,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_info2_t_last_changed_author_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_client_info2_t_last_changed_author_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25882,13 +28000,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_info2_t_last_changed_author_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_info2_t_last_changed_author_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25903,14 +28021,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_info2_t_lock_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
svn_lock_t *arg2 = (svn_lock_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_info2_t_lock_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25931,13 +28049,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_info2_t_lock_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_lock_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_info2_t_lock_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25953,14 +28071,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_info2_t_wc_info_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
svn_wc_info_t *arg2 = (svn_wc_info_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_client_info2_t_wc_info_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -25981,13 +28099,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_client_info2_t_wc_info_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_info_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_client_info2_t_wc_info_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -26003,13 +28121,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_client_info2_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_info2_t *result = 0 ;
+ struct svn_client_info2_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_client_info2_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_client_info2_t *)calloc(1, sizeof(svn_client_info2_t));
+ result = (struct svn_client_info2_t *)calloc(1, sizeof(struct svn_client_info2_t));
svn_swig_py_acquire_py_lock();
@@ -26024,12 +28142,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_client_info2_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_client_info2_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
+ arg1 = (struct svn_client_info2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_client_info2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -26938,6 +29056,119 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_client_get_repos_root(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ char **arg1 = (char **) 0 ;
+ char **arg2 = (char **) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_client_ctx_t *arg4 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ char *temp1 ;
+ char *temp2 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg5 = _global_pool;
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg6 = _global_pool;
+ arg1 = &temp1;
+ arg2 = &temp2;
+ if (!PyArg_ParseTuple(args,(char *)"sO|OO:svn_client_get_repos_root",&arg3,&obj1,&obj2,&obj3)) SWIG_fail;
+ {
+ arg4 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj1, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj1);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj2) {
+ /* Verify that the user supplied a valid pool */
+ if (obj2 != Py_None && obj2 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj2);
+ SWIG_arg_fail(svn_argnum_obj2);
+ SWIG_fail;
+ }
+ }
+ if (obj3) {
+ /* Verify that the user supplied a valid pool */
+ if (obj3 != Py_None && obj3 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj3);
+ SWIG_arg_fail(svn_argnum_obj3);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_client_get_repos_root((char const **)arg1,(char const **)arg2,(char const *)arg3,arg4,arg5,arg6);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ PyObject *s;
+ if (*arg1 == NULL) {
+ Py_INCREF(Py_None);
+ s = Py_None;
+ }
+ else {
+ s = PyString_FromString(*arg1);
+ if (s == NULL)
+ SWIG_fail;
+ }
+ resultobj = SWIG_Python_AppendOutput(resultobj, s);
+ }
+ {
+ PyObject *s;
+ if (*arg2 == NULL) {
+ Py_INCREF(Py_None);
+ s = Py_None;
+ }
+ else {
+ s = PyString_FromString(*arg2);
+ if (s == NULL)
+ SWIG_fail;
+ }
+ resultobj = SWIG_Python_AppendOutput(resultobj, s);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_client_root_url_from_path(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
char **arg1 = (char **) 0 ;
@@ -27274,6 +29505,97 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_client_open_ra_session2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_ra_session_t **arg1 = (svn_ra_session_t **) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_client_ctx_t *arg4 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_ra_session_t *temp1 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg5 = _global_pool;
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg6 = _global_pool;
+ arg1 = &temp1;
+ if (!PyArg_ParseTuple(args,(char *)"ssO|OO:svn_client_open_ra_session2",&arg2,&arg3,&obj2,&obj3,&obj4)) SWIG_fail;
+ {
+ arg4 = (svn_client_ctx_t *)svn_swig_MustGetPtr(obj2, SWIGTYPE_p_svn_client_ctx_t, svn_argnum_obj2);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj3) {
+ /* Verify that the user supplied a valid pool */
+ if (obj3 != Py_None && obj3 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj3);
+ SWIG_arg_fail(svn_argnum_obj3);
+ SWIG_fail;
+ }
+ }
+ if (obj4) {
+ /* Verify that the user supplied a valid pool */
+ if (obj4 != Py_None && obj4 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj4);
+ SWIG_arg_fail(svn_argnum_obj4);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_client_open_ra_session2(arg1,(char const *)arg2,(char const *)arg3,arg4,arg5,arg6);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg1, SWIGTYPE_p_svn_ra_session_t,
+ _global_py_pool, args))
+
+ ;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_client_open_ra_session(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_ra_session_t **arg1 = (svn_ra_session_t **) 0 ;
@@ -27344,6 +29666,95 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_proplist_invoke_receiver2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_proplist_receiver2_t arg1 = (svn_proplist_receiver2_t) 0 ;
+ void *arg2 = (void *) 0 ;
+ char *arg3 = (char *) 0 ;
+ apr_hash_t *arg4 = (apr_hash_t *) 0 ;
+ apr_array_header_t *arg5 = (apr_array_header_t *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj5 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg6 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OOsOO|O:svn_proplist_invoke_receiver2",&obj0,&obj1,&arg3,&obj3,&obj4,&obj5)) SWIG_fail;
+ {
+ svn_proplist_receiver2_t * tmp =
+ svn_swig_MustGetPtr(obj0, SWIGTYPE_p_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t, svn_argnum_obj0);
+ if (tmp == NULL || PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ arg1 = *tmp;
+ }
+ {
+ if (obj1 == Py_None) {
+ arg2 = NULL;
+ } else if (SWIG_ConvertPtr(obj1, (void **) &arg2, 0, 0) == -1) {
+ arg2 = (void *) obj1;
+ PyErr_Clear();
+ }
+ }
+ {
+ arg4 = (apr_hash_t *)svn_swig_MustGetPtr(obj3, SWIGTYPE_p_apr_hash_t, svn_argnum_obj3);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg5 = (apr_array_header_t *)svn_swig_MustGetPtr(obj4, SWIGTYPE_p_apr_array_header_t, svn_argnum_obj4);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj5) {
+ /* Verify that the user supplied a valid pool */
+ if (obj5 != Py_None && obj5 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj5);
+ SWIG_arg_fail(svn_argnum_obj5);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_proplist_invoke_receiver2(arg1,arg2,(char const *)arg3,arg4,arg5,arg6);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_proplist_invoke_receiver(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_proplist_receiver_t arg1 = (svn_proplist_receiver_t) 0 ;
@@ -28157,6 +30568,97 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_client_invoke_import_filter_func(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_client_import_filter_func_t arg1 = (svn_client_import_filter_func_t) 0 ;
+ void *arg2 = (void *) 0 ;
+ svn_boolean_t *arg3 = (svn_boolean_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ svn_io_dirent2_t *arg5 = (svn_io_dirent2_t *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_boolean_t temp3 ;
+ int res3 = SWIG_TMPOBJ ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg6 = _global_pool;
+ arg3 = &temp3;
+ if (!PyArg_ParseTuple(args,(char *)"OOsO|O:svn_client_invoke_import_filter_func",&obj0,&obj1,&arg4,&obj3,&obj4)) SWIG_fail;
+ {
+ svn_client_import_filter_func_t * tmp =
+ svn_swig_MustGetPtr(obj0, SWIGTYPE_p_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t, svn_argnum_obj0);
+ if (tmp == NULL || PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ arg1 = *tmp;
+ }
+ {
+ if (obj1 == Py_None) {
+ arg2 = NULL;
+ } else if (SWIG_ConvertPtr(obj1, (void **) &arg2, 0, 0) == -1) {
+ arg2 = (void *) obj1;
+ PyErr_Clear();
+ }
+ }
+ {
+ arg5 = (svn_io_dirent2_t *)svn_swig_MustGetPtr(obj3, SWIGTYPE_p_svn_io_dirent2_t, svn_argnum_obj3);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj4) {
+ /* Verify that the user supplied a valid pool */
+ if (obj4 != Py_None && obj4 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj4);
+ SWIG_arg_fail(svn_argnum_obj4);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_client_invoke_import_filter_func(arg1,arg2,arg3,(char const *)arg4,(struct svn_io_dirent2_t const *)arg5,arg6);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ if (SWIG_IsTmpObj(res3)) {
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg3)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags));
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_client_invoke_status_func(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_client_status_func_t arg1 = (svn_client_status_func_t) 0 ;
@@ -28238,6 +30740,98 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_client_invoke_list_func2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_client_list_func2_t arg1 = (svn_client_list_func2_t) 0 ;
+ void *arg2 = (void *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_dirent_t *arg4 = (svn_dirent_t *) 0 ;
+ svn_lock_t *arg5 = (svn_lock_t *) 0 ;
+ char *arg6 = (char *) 0 ;
+ char *arg7 = (char *) 0 ;
+ char *arg8 = (char *) 0 ;
+ apr_pool_t *arg9 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj8 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg9 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OOsOOsss|O:svn_client_invoke_list_func2",&obj0,&obj1,&arg3,&obj3,&obj4,&arg6,&arg7,&arg8,&obj8)) SWIG_fail;
+ {
+ svn_client_list_func2_t * tmp =
+ svn_swig_MustGetPtr(obj0, SWIGTYPE_p_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, svn_argnum_obj0);
+ if (tmp == NULL || PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ arg1 = *tmp;
+ }
+ {
+ if (obj1 == Py_None) {
+ arg2 = NULL;
+ } else if (SWIG_ConvertPtr(obj1, (void **) &arg2, 0, 0) == -1) {
+ arg2 = (void *) obj1;
+ PyErr_Clear();
+ }
+ }
+ {
+ arg4 = (svn_dirent_t *)svn_swig_MustGetPtr(obj3, SWIGTYPE_p_svn_dirent_t, svn_argnum_obj3);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg5 = (svn_lock_t *)svn_swig_MustGetPtr(obj4, SWIGTYPE_p_svn_lock_t, svn_argnum_obj4);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj8) {
+ /* Verify that the user supplied a valid pool */
+ if (obj8 != Py_None && obj8 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj8);
+ SWIG_arg_fail(svn_argnum_obj8);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_client_invoke_list_func2(arg1,arg2,(char const *)arg3,(struct svn_dirent_t const *)arg4,(struct svn_lock_t const *)arg5,(char const *)arg6,(char const *)arg7,(char const *)arg8,arg9);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_client_invoke_list_func(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_client_list_func_t arg1 = (svn_client_list_func_t) 0 ;
@@ -28575,6 +31169,13 @@ fail:
}
+SWIGINTERN PyObject *svn_proplist_receiver2_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *obj;
+ if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+ SWIG_TypeNewClientData(SWIGTYPE_p_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t, SWIG_NewClientData(obj));
+ return SWIG_Py_Void();
+}
+
SWIGINTERN PyObject *svn_proplist_receiver_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *obj;
if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
@@ -28631,6 +31232,13 @@ SWIGINTERN PyObject *svn_client_diff_summarize_func_t_swigregister(PyObject *SWI
return SWIG_Py_Void();
}
+SWIGINTERN PyObject *svn_client_import_filter_func_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *obj;
+ if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+ SWIG_TypeNewClientData(SWIGTYPE_p_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t, SWIG_NewClientData(obj));
+ return SWIG_Py_Void();
+}
+
SWIGINTERN PyObject *svn_client_status_func_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *obj;
if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
@@ -28638,6 +31246,13 @@ SWIGINTERN PyObject *svn_client_status_func_t_swigregister(PyObject *SWIGUNUSEDP
return SWIG_Py_Void();
}
+SWIGINTERN PyObject *svn_client_list_func2_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *obj;
+ if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+ SWIG_TypeNewClientData(SWIGTYPE_p_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, SWIG_NewClientData(obj));
+ return SWIG_Py_Void();
+}
+
SWIGINTERN PyObject *svn_client_list_func_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *obj;
if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
@@ -28668,52 +31283,37 @@ SWIGINTERN PyObject *svn_client_patch_func_t_swigregister(PyObject *SWIGUNUSEDPA
static PyMethodDef SwigMethods[] = {
{ (char *)"SWIG_PyInstanceMethod_New", (PyCFunction)SWIG_PyInstanceMethod_New, METH_O, NULL},
- { (char *)"svn_client_version", _wrap_svn_client_version, METH_VARARGS, (char *)"svn_client_version() -> svn_version_t"},
- { (char *)"svn_client_get_simple_prompt_provider", _wrap_svn_client_get_simple_prompt_provider, METH_VARARGS, (char *)"\n"
- "svn_client_get_simple_prompt_provider(svn_auth_simple_prompt_func_t prompt_func, int retry_limit, \n"
- " apr_pool_t pool)\n"
- ""},
- { (char *)"svn_client_get_username_prompt_provider", _wrap_svn_client_get_username_prompt_provider, METH_VARARGS, (char *)"\n"
- "svn_client_get_username_prompt_provider(svn_auth_username_prompt_func_t prompt_func, int retry_limit, \n"
- " apr_pool_t pool)\n"
- ""},
+ { (char *)"svn_client_version", _wrap_svn_client_version, METH_VARARGS, (char *)"svn_client_version() -> svn_version_t const *"},
+ { (char *)"svn_client_get_simple_prompt_provider", _wrap_svn_client_get_simple_prompt_provider, METH_VARARGS, (char *)"svn_client_get_simple_prompt_provider(svn_auth_simple_prompt_func_t prompt_func, int retry_limit, apr_pool_t pool)"},
+ { (char *)"svn_client_get_username_prompt_provider", _wrap_svn_client_get_username_prompt_provider, METH_VARARGS, (char *)"svn_client_get_username_prompt_provider(svn_auth_username_prompt_func_t prompt_func, int retry_limit, apr_pool_t pool)"},
{ (char *)"svn_client_get_simple_provider", _wrap_svn_client_get_simple_provider, METH_VARARGS, (char *)"svn_client_get_simple_provider(apr_pool_t pool)"},
{ (char *)"svn_client_get_username_provider", _wrap_svn_client_get_username_provider, METH_VARARGS, (char *)"svn_client_get_username_provider(apr_pool_t pool)"},
{ (char *)"svn_client_get_ssl_server_trust_file_provider", _wrap_svn_client_get_ssl_server_trust_file_provider, METH_VARARGS, (char *)"svn_client_get_ssl_server_trust_file_provider(apr_pool_t pool)"},
{ (char *)"svn_client_get_ssl_client_cert_file_provider", _wrap_svn_client_get_ssl_client_cert_file_provider, METH_VARARGS, (char *)"svn_client_get_ssl_client_cert_file_provider(apr_pool_t pool)"},
{ (char *)"svn_client_get_ssl_client_cert_pw_file_provider", _wrap_svn_client_get_ssl_client_cert_pw_file_provider, METH_VARARGS, (char *)"svn_client_get_ssl_client_cert_pw_file_provider(apr_pool_t pool)"},
- { (char *)"svn_client_get_ssl_server_trust_prompt_provider", _wrap_svn_client_get_ssl_server_trust_prompt_provider, METH_VARARGS, (char *)"\n"
- "svn_client_get_ssl_server_trust_prompt_provider(svn_auth_ssl_server_trust_prompt_func_t prompt_func, \n"
- " apr_pool_t pool)\n"
- ""},
- { (char *)"svn_client_get_ssl_client_cert_prompt_provider", _wrap_svn_client_get_ssl_client_cert_prompt_provider, METH_VARARGS, (char *)"\n"
- "svn_client_get_ssl_client_cert_prompt_provider(svn_auth_ssl_client_cert_prompt_func_t prompt_func, \n"
- " int retry_limit, apr_pool_t pool)\n"
- ""},
- { (char *)"svn_client_get_ssl_client_cert_pw_prompt_provider", _wrap_svn_client_get_ssl_client_cert_pw_prompt_provider, METH_VARARGS, (char *)"\n"
- "svn_client_get_ssl_client_cert_pw_prompt_provider(svn_auth_ssl_client_cert_pw_prompt_func_t prompt_func, \n"
- " int retry_limit, apr_pool_t pool)\n"
- ""},
- { (char *)"svn_client_proplist_item_dup", _wrap_svn_client_proplist_item_dup, METH_VARARGS, (char *)"svn_client_proplist_item_dup( item, apr_pool_t pool)"},
+ { (char *)"svn_client_get_ssl_server_trust_prompt_provider", _wrap_svn_client_get_ssl_server_trust_prompt_provider, METH_VARARGS, (char *)"svn_client_get_ssl_server_trust_prompt_provider(svn_auth_ssl_server_trust_prompt_func_t prompt_func, apr_pool_t pool)"},
+ { (char *)"svn_client_get_ssl_client_cert_prompt_provider", _wrap_svn_client_get_ssl_client_cert_prompt_provider, METH_VARARGS, (char *)"svn_client_get_ssl_client_cert_prompt_provider(svn_auth_ssl_client_cert_prompt_func_t prompt_func, int retry_limit, apr_pool_t pool)"},
+ { (char *)"svn_client_get_ssl_client_cert_pw_prompt_provider", _wrap_svn_client_get_ssl_client_cert_pw_prompt_provider, METH_VARARGS, (char *)"svn_client_get_ssl_client_cert_pw_prompt_provider(svn_auth_ssl_client_cert_pw_prompt_func_t prompt_func, int retry_limit, apr_pool_t pool)"},
+ { (char *)"svn_client_proplist_item_dup", _wrap_svn_client_proplist_item_dup, METH_VARARGS, (char *)"svn_client_proplist_item_dup(svn_client_proplist_item_t const * item, apr_pool_t pool) -> svn_client_proplist_item_t *"},
{ (char *)"svn_client_commit_info_t_revision_set", _wrap_svn_client_commit_info_t_revision_set, METH_VARARGS, (char *)"svn_client_commit_info_t_revision_set(svn_client_commit_info_t self, svn_revnum_t revision)"},
{ (char *)"svn_client_commit_info_t_revision_get", _wrap_svn_client_commit_info_t_revision_get, METH_VARARGS, (char *)"svn_client_commit_info_t_revision_get(svn_client_commit_info_t self) -> svn_revnum_t"},
- { (char *)"svn_client_commit_info_t_date_set", _wrap_svn_client_commit_info_t_date_set, METH_VARARGS, (char *)"svn_client_commit_info_t_date_set(svn_client_commit_info_t self, char date)"},
- { (char *)"svn_client_commit_info_t_date_get", _wrap_svn_client_commit_info_t_date_get, METH_VARARGS, (char *)"svn_client_commit_info_t_date_get(svn_client_commit_info_t self) -> char"},
- { (char *)"svn_client_commit_info_t_author_set", _wrap_svn_client_commit_info_t_author_set, METH_VARARGS, (char *)"svn_client_commit_info_t_author_set(svn_client_commit_info_t self, char author)"},
- { (char *)"svn_client_commit_info_t_author_get", _wrap_svn_client_commit_info_t_author_get, METH_VARARGS, (char *)"svn_client_commit_info_t_author_get(svn_client_commit_info_t self) -> char"},
+ { (char *)"svn_client_commit_info_t_date_set", _wrap_svn_client_commit_info_t_date_set, METH_VARARGS, (char *)"svn_client_commit_info_t_date_set(svn_client_commit_info_t self, char const * date)"},
+ { (char *)"svn_client_commit_info_t_date_get", _wrap_svn_client_commit_info_t_date_get, METH_VARARGS, (char *)"svn_client_commit_info_t_date_get(svn_client_commit_info_t self) -> char const *"},
+ { (char *)"svn_client_commit_info_t_author_set", _wrap_svn_client_commit_info_t_author_set, METH_VARARGS, (char *)"svn_client_commit_info_t_author_set(svn_client_commit_info_t self, char const * author)"},
+ { (char *)"svn_client_commit_info_t_author_get", _wrap_svn_client_commit_info_t_author_get, METH_VARARGS, (char *)"svn_client_commit_info_t_author_get(svn_client_commit_info_t self) -> char const *"},
{ (char *)"new_svn_client_commit_info_t", _wrap_new_svn_client_commit_info_t, METH_VARARGS, (char *)"new_svn_client_commit_info_t() -> svn_client_commit_info_t"},
{ (char *)"delete_svn_client_commit_info_t", _wrap_delete_svn_client_commit_info_t, METH_VARARGS, (char *)"delete_svn_client_commit_info_t(svn_client_commit_info_t self)"},
{ (char *)"svn_client_commit_info_t_swigregister", svn_client_commit_info_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_client_commit_item3_t_path_set", _wrap_svn_client_commit_item3_t_path_set, METH_VARARGS, (char *)"svn_client_commit_item3_t_path_set(svn_client_commit_item3_t self, char path)"},
- { (char *)"svn_client_commit_item3_t_path_get", _wrap_svn_client_commit_item3_t_path_get, METH_VARARGS, (char *)"svn_client_commit_item3_t_path_get(svn_client_commit_item3_t self) -> char"},
+ { (char *)"svn_client_commit_item3_t_path_set", _wrap_svn_client_commit_item3_t_path_set, METH_VARARGS, (char *)"svn_client_commit_item3_t_path_set(svn_client_commit_item3_t self, char const * path)"},
+ { (char *)"svn_client_commit_item3_t_path_get", _wrap_svn_client_commit_item3_t_path_get, METH_VARARGS, (char *)"svn_client_commit_item3_t_path_get(svn_client_commit_item3_t self) -> char const *"},
{ (char *)"svn_client_commit_item3_t_kind_set", _wrap_svn_client_commit_item3_t_kind_set, METH_VARARGS, (char *)"svn_client_commit_item3_t_kind_set(svn_client_commit_item3_t self, svn_node_kind_t kind)"},
{ (char *)"svn_client_commit_item3_t_kind_get", _wrap_svn_client_commit_item3_t_kind_get, METH_VARARGS, (char *)"svn_client_commit_item3_t_kind_get(svn_client_commit_item3_t self) -> svn_node_kind_t"},
- { (char *)"svn_client_commit_item3_t_url_set", _wrap_svn_client_commit_item3_t_url_set, METH_VARARGS, (char *)"svn_client_commit_item3_t_url_set(svn_client_commit_item3_t self, char url)"},
- { (char *)"svn_client_commit_item3_t_url_get", _wrap_svn_client_commit_item3_t_url_get, METH_VARARGS, (char *)"svn_client_commit_item3_t_url_get(svn_client_commit_item3_t self) -> char"},
+ { (char *)"svn_client_commit_item3_t_url_set", _wrap_svn_client_commit_item3_t_url_set, METH_VARARGS, (char *)"svn_client_commit_item3_t_url_set(svn_client_commit_item3_t self, char const * url)"},
+ { (char *)"svn_client_commit_item3_t_url_get", _wrap_svn_client_commit_item3_t_url_get, METH_VARARGS, (char *)"svn_client_commit_item3_t_url_get(svn_client_commit_item3_t self) -> char const *"},
{ (char *)"svn_client_commit_item3_t_revision_set", _wrap_svn_client_commit_item3_t_revision_set, METH_VARARGS, (char *)"svn_client_commit_item3_t_revision_set(svn_client_commit_item3_t self, svn_revnum_t revision)"},
{ (char *)"svn_client_commit_item3_t_revision_get", _wrap_svn_client_commit_item3_t_revision_get, METH_VARARGS, (char *)"svn_client_commit_item3_t_revision_get(svn_client_commit_item3_t self) -> svn_revnum_t"},
- { (char *)"svn_client_commit_item3_t_copyfrom_url_set", _wrap_svn_client_commit_item3_t_copyfrom_url_set, METH_VARARGS, (char *)"svn_client_commit_item3_t_copyfrom_url_set(svn_client_commit_item3_t self, char copyfrom_url)"},
- { (char *)"svn_client_commit_item3_t_copyfrom_url_get", _wrap_svn_client_commit_item3_t_copyfrom_url_get, METH_VARARGS, (char *)"svn_client_commit_item3_t_copyfrom_url_get(svn_client_commit_item3_t self) -> char"},
+ { (char *)"svn_client_commit_item3_t_copyfrom_url_set", _wrap_svn_client_commit_item3_t_copyfrom_url_set, METH_VARARGS, (char *)"svn_client_commit_item3_t_copyfrom_url_set(svn_client_commit_item3_t self, char const * copyfrom_url)"},
+ { (char *)"svn_client_commit_item3_t_copyfrom_url_get", _wrap_svn_client_commit_item3_t_copyfrom_url_get, METH_VARARGS, (char *)"svn_client_commit_item3_t_copyfrom_url_get(svn_client_commit_item3_t self) -> char const *"},
{ (char *)"svn_client_commit_item3_t_copyfrom_rev_set", _wrap_svn_client_commit_item3_t_copyfrom_rev_set, METH_VARARGS, (char *)"svn_client_commit_item3_t_copyfrom_rev_set(svn_client_commit_item3_t self, svn_revnum_t copyfrom_rev)"},
{ (char *)"svn_client_commit_item3_t_copyfrom_rev_get", _wrap_svn_client_commit_item3_t_copyfrom_rev_get, METH_VARARGS, (char *)"svn_client_commit_item3_t_copyfrom_rev_get(svn_client_commit_item3_t self) -> svn_revnum_t"},
{ (char *)"svn_client_commit_item3_t_state_flags_set", _wrap_svn_client_commit_item3_t_state_flags_set, METH_VARARGS, (char *)"svn_client_commit_item3_t_state_flags_set(svn_client_commit_item3_t self, apr_byte_t state_flags)"},
@@ -28722,21 +31322,23 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_client_commit_item3_t_incoming_prop_changes_get", _wrap_svn_client_commit_item3_t_incoming_prop_changes_get, METH_VARARGS, (char *)"svn_client_commit_item3_t_incoming_prop_changes_get(svn_client_commit_item3_t self) -> apr_array_header_t"},
{ (char *)"svn_client_commit_item3_t_outgoing_prop_changes_set", _wrap_svn_client_commit_item3_t_outgoing_prop_changes_set, METH_VARARGS, (char *)"svn_client_commit_item3_t_outgoing_prop_changes_set(svn_client_commit_item3_t self, apr_array_header_t outgoing_prop_changes)"},
{ (char *)"svn_client_commit_item3_t_outgoing_prop_changes_get", _wrap_svn_client_commit_item3_t_outgoing_prop_changes_get, METH_VARARGS, (char *)"svn_client_commit_item3_t_outgoing_prop_changes_get(svn_client_commit_item3_t self) -> apr_array_header_t"},
- { (char *)"svn_client_commit_item3_t_session_relpath_set", _wrap_svn_client_commit_item3_t_session_relpath_set, METH_VARARGS, (char *)"svn_client_commit_item3_t_session_relpath_set(svn_client_commit_item3_t self, char session_relpath)"},
- { (char *)"svn_client_commit_item3_t_session_relpath_get", _wrap_svn_client_commit_item3_t_session_relpath_get, METH_VARARGS, (char *)"svn_client_commit_item3_t_session_relpath_get(svn_client_commit_item3_t self) -> char"},
+ { (char *)"svn_client_commit_item3_t_session_relpath_set", _wrap_svn_client_commit_item3_t_session_relpath_set, METH_VARARGS, (char *)"svn_client_commit_item3_t_session_relpath_set(svn_client_commit_item3_t self, char const * session_relpath)"},
+ { (char *)"svn_client_commit_item3_t_session_relpath_get", _wrap_svn_client_commit_item3_t_session_relpath_get, METH_VARARGS, (char *)"svn_client_commit_item3_t_session_relpath_get(svn_client_commit_item3_t self) -> char const *"},
+ { (char *)"svn_client_commit_item3_t_moved_from_abspath_set", _wrap_svn_client_commit_item3_t_moved_from_abspath_set, METH_VARARGS, (char *)"svn_client_commit_item3_t_moved_from_abspath_set(svn_client_commit_item3_t self, char const * moved_from_abspath)"},
+ { (char *)"svn_client_commit_item3_t_moved_from_abspath_get", _wrap_svn_client_commit_item3_t_moved_from_abspath_get, METH_VARARGS, (char *)"svn_client_commit_item3_t_moved_from_abspath_get(svn_client_commit_item3_t self) -> char const *"},
{ (char *)"new_svn_client_commit_item3_t", _wrap_new_svn_client_commit_item3_t, METH_VARARGS, (char *)"new_svn_client_commit_item3_t() -> svn_client_commit_item3_t"},
{ (char *)"delete_svn_client_commit_item3_t", _wrap_delete_svn_client_commit_item3_t, METH_VARARGS, (char *)"delete_svn_client_commit_item3_t(svn_client_commit_item3_t self)"},
{ (char *)"svn_client_commit_item3_t_swigregister", svn_client_commit_item3_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_client_commit_item2_t_path_set", _wrap_svn_client_commit_item2_t_path_set, METH_VARARGS, (char *)"svn_client_commit_item2_t_path_set(svn_client_commit_item2_t self, char path)"},
- { (char *)"svn_client_commit_item2_t_path_get", _wrap_svn_client_commit_item2_t_path_get, METH_VARARGS, (char *)"svn_client_commit_item2_t_path_get(svn_client_commit_item2_t self) -> char"},
+ { (char *)"svn_client_commit_item2_t_path_set", _wrap_svn_client_commit_item2_t_path_set, METH_VARARGS, (char *)"svn_client_commit_item2_t_path_set(svn_client_commit_item2_t self, char const * path)"},
+ { (char *)"svn_client_commit_item2_t_path_get", _wrap_svn_client_commit_item2_t_path_get, METH_VARARGS, (char *)"svn_client_commit_item2_t_path_get(svn_client_commit_item2_t self) -> char const *"},
{ (char *)"svn_client_commit_item2_t_kind_set", _wrap_svn_client_commit_item2_t_kind_set, METH_VARARGS, (char *)"svn_client_commit_item2_t_kind_set(svn_client_commit_item2_t self, svn_node_kind_t kind)"},
{ (char *)"svn_client_commit_item2_t_kind_get", _wrap_svn_client_commit_item2_t_kind_get, METH_VARARGS, (char *)"svn_client_commit_item2_t_kind_get(svn_client_commit_item2_t self) -> svn_node_kind_t"},
- { (char *)"svn_client_commit_item2_t_url_set", _wrap_svn_client_commit_item2_t_url_set, METH_VARARGS, (char *)"svn_client_commit_item2_t_url_set(svn_client_commit_item2_t self, char url)"},
- { (char *)"svn_client_commit_item2_t_url_get", _wrap_svn_client_commit_item2_t_url_get, METH_VARARGS, (char *)"svn_client_commit_item2_t_url_get(svn_client_commit_item2_t self) -> char"},
+ { (char *)"svn_client_commit_item2_t_url_set", _wrap_svn_client_commit_item2_t_url_set, METH_VARARGS, (char *)"svn_client_commit_item2_t_url_set(svn_client_commit_item2_t self, char const * url)"},
+ { (char *)"svn_client_commit_item2_t_url_get", _wrap_svn_client_commit_item2_t_url_get, METH_VARARGS, (char *)"svn_client_commit_item2_t_url_get(svn_client_commit_item2_t self) -> char const *"},
{ (char *)"svn_client_commit_item2_t_revision_set", _wrap_svn_client_commit_item2_t_revision_set, METH_VARARGS, (char *)"svn_client_commit_item2_t_revision_set(svn_client_commit_item2_t self, svn_revnum_t revision)"},
{ (char *)"svn_client_commit_item2_t_revision_get", _wrap_svn_client_commit_item2_t_revision_get, METH_VARARGS, (char *)"svn_client_commit_item2_t_revision_get(svn_client_commit_item2_t self) -> svn_revnum_t"},
- { (char *)"svn_client_commit_item2_t_copyfrom_url_set", _wrap_svn_client_commit_item2_t_copyfrom_url_set, METH_VARARGS, (char *)"svn_client_commit_item2_t_copyfrom_url_set(svn_client_commit_item2_t self, char copyfrom_url)"},
- { (char *)"svn_client_commit_item2_t_copyfrom_url_get", _wrap_svn_client_commit_item2_t_copyfrom_url_get, METH_VARARGS, (char *)"svn_client_commit_item2_t_copyfrom_url_get(svn_client_commit_item2_t self) -> char"},
+ { (char *)"svn_client_commit_item2_t_copyfrom_url_set", _wrap_svn_client_commit_item2_t_copyfrom_url_set, METH_VARARGS, (char *)"svn_client_commit_item2_t_copyfrom_url_set(svn_client_commit_item2_t self, char const * copyfrom_url)"},
+ { (char *)"svn_client_commit_item2_t_copyfrom_url_get", _wrap_svn_client_commit_item2_t_copyfrom_url_get, METH_VARARGS, (char *)"svn_client_commit_item2_t_copyfrom_url_get(svn_client_commit_item2_t self) -> char const *"},
{ (char *)"svn_client_commit_item2_t_copyfrom_rev_set", _wrap_svn_client_commit_item2_t_copyfrom_rev_set, METH_VARARGS, (char *)"svn_client_commit_item2_t_copyfrom_rev_set(svn_client_commit_item2_t self, svn_revnum_t copyfrom_rev)"},
{ (char *)"svn_client_commit_item2_t_copyfrom_rev_get", _wrap_svn_client_commit_item2_t_copyfrom_rev_get, METH_VARARGS, (char *)"svn_client_commit_item2_t_copyfrom_rev_get(svn_client_commit_item2_t self) -> svn_revnum_t"},
{ (char *)"svn_client_commit_item2_t_state_flags_set", _wrap_svn_client_commit_item2_t_state_flags_set, METH_VARARGS, (char *)"svn_client_commit_item2_t_state_flags_set(svn_client_commit_item2_t self, apr_byte_t state_flags)"},
@@ -28746,16 +31348,16 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"new_svn_client_commit_item2_t", _wrap_new_svn_client_commit_item2_t, METH_VARARGS, (char *)"new_svn_client_commit_item2_t() -> svn_client_commit_item2_t"},
{ (char *)"delete_svn_client_commit_item2_t", _wrap_delete_svn_client_commit_item2_t, METH_VARARGS, (char *)"delete_svn_client_commit_item2_t(svn_client_commit_item2_t self)"},
{ (char *)"svn_client_commit_item2_t_swigregister", svn_client_commit_item2_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_client_commit_item_t_path_set", _wrap_svn_client_commit_item_t_path_set, METH_VARARGS, (char *)"svn_client_commit_item_t_path_set(svn_client_commit_item_t self, char path)"},
- { (char *)"svn_client_commit_item_t_path_get", _wrap_svn_client_commit_item_t_path_get, METH_VARARGS, (char *)"svn_client_commit_item_t_path_get(svn_client_commit_item_t self) -> char"},
+ { (char *)"svn_client_commit_item_t_path_set", _wrap_svn_client_commit_item_t_path_set, METH_VARARGS, (char *)"svn_client_commit_item_t_path_set(svn_client_commit_item_t self, char const * path)"},
+ { (char *)"svn_client_commit_item_t_path_get", _wrap_svn_client_commit_item_t_path_get, METH_VARARGS, (char *)"svn_client_commit_item_t_path_get(svn_client_commit_item_t self) -> char const *"},
{ (char *)"svn_client_commit_item_t_kind_set", _wrap_svn_client_commit_item_t_kind_set, METH_VARARGS, (char *)"svn_client_commit_item_t_kind_set(svn_client_commit_item_t self, svn_node_kind_t kind)"},
{ (char *)"svn_client_commit_item_t_kind_get", _wrap_svn_client_commit_item_t_kind_get, METH_VARARGS, (char *)"svn_client_commit_item_t_kind_get(svn_client_commit_item_t self) -> svn_node_kind_t"},
- { (char *)"svn_client_commit_item_t_url_set", _wrap_svn_client_commit_item_t_url_set, METH_VARARGS, (char *)"svn_client_commit_item_t_url_set(svn_client_commit_item_t self, char url)"},
- { (char *)"svn_client_commit_item_t_url_get", _wrap_svn_client_commit_item_t_url_get, METH_VARARGS, (char *)"svn_client_commit_item_t_url_get(svn_client_commit_item_t self) -> char"},
+ { (char *)"svn_client_commit_item_t_url_set", _wrap_svn_client_commit_item_t_url_set, METH_VARARGS, (char *)"svn_client_commit_item_t_url_set(svn_client_commit_item_t self, char const * url)"},
+ { (char *)"svn_client_commit_item_t_url_get", _wrap_svn_client_commit_item_t_url_get, METH_VARARGS, (char *)"svn_client_commit_item_t_url_get(svn_client_commit_item_t self) -> char const *"},
{ (char *)"svn_client_commit_item_t_revision_set", _wrap_svn_client_commit_item_t_revision_set, METH_VARARGS, (char *)"svn_client_commit_item_t_revision_set(svn_client_commit_item_t self, svn_revnum_t revision)"},
{ (char *)"svn_client_commit_item_t_revision_get", _wrap_svn_client_commit_item_t_revision_get, METH_VARARGS, (char *)"svn_client_commit_item_t_revision_get(svn_client_commit_item_t self) -> svn_revnum_t"},
- { (char *)"svn_client_commit_item_t_copyfrom_url_set", _wrap_svn_client_commit_item_t_copyfrom_url_set, METH_VARARGS, (char *)"svn_client_commit_item_t_copyfrom_url_set(svn_client_commit_item_t self, char copyfrom_url)"},
- { (char *)"svn_client_commit_item_t_copyfrom_url_get", _wrap_svn_client_commit_item_t_copyfrom_url_get, METH_VARARGS, (char *)"svn_client_commit_item_t_copyfrom_url_get(svn_client_commit_item_t self) -> char"},
+ { (char *)"svn_client_commit_item_t_copyfrom_url_set", _wrap_svn_client_commit_item_t_copyfrom_url_set, METH_VARARGS, (char *)"svn_client_commit_item_t_copyfrom_url_set(svn_client_commit_item_t self, char const * copyfrom_url)"},
+ { (char *)"svn_client_commit_item_t_copyfrom_url_get", _wrap_svn_client_commit_item_t_copyfrom_url_get, METH_VARARGS, (char *)"svn_client_commit_item_t_copyfrom_url_get(svn_client_commit_item_t self) -> char const *"},
{ (char *)"svn_client_commit_item_t_state_flags_set", _wrap_svn_client_commit_item_t_state_flags_set, METH_VARARGS, (char *)"svn_client_commit_item_t_state_flags_set(svn_client_commit_item_t self, apr_byte_t state_flags)"},
{ (char *)"svn_client_commit_item_t_state_flags_get", _wrap_svn_client_commit_item_t_state_flags_get, METH_VARARGS, (char *)"svn_client_commit_item_t_state_flags_get(svn_client_commit_item_t self) -> apr_byte_t"},
{ (char *)"svn_client_commit_item_t_wcprop_changes_set", _wrap_svn_client_commit_item_t_wcprop_changes_set, METH_VARARGS, (char *)"svn_client_commit_item_t_wcprop_changes_set(svn_client_commit_item_t self, apr_array_header_t wcprop_changes)"},
@@ -28767,8 +31369,8 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_client_commit_item_create", _wrap_svn_client_commit_item_create, METH_VARARGS, (char *)"svn_client_commit_item_create(apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_client_commit_item3_dup", _wrap_svn_client_commit_item3_dup, METH_VARARGS, (char *)"svn_client_commit_item3_dup(svn_client_commit_item3_t item, apr_pool_t pool) -> svn_client_commit_item3_t"},
{ (char *)"svn_client_commit_item2_dup", _wrap_svn_client_commit_item2_dup, METH_VARARGS, (char *)"svn_client_commit_item2_dup(svn_client_commit_item2_t item, apr_pool_t pool) -> svn_client_commit_item2_t"},
- { (char *)"svn_client_diff_summarize_t_path_set", _wrap_svn_client_diff_summarize_t_path_set, METH_VARARGS, (char *)"svn_client_diff_summarize_t_path_set(svn_client_diff_summarize_t self, char path)"},
- { (char *)"svn_client_diff_summarize_t_path_get", _wrap_svn_client_diff_summarize_t_path_get, METH_VARARGS, (char *)"svn_client_diff_summarize_t_path_get(svn_client_diff_summarize_t self) -> char"},
+ { (char *)"svn_client_diff_summarize_t_path_set", _wrap_svn_client_diff_summarize_t_path_set, METH_VARARGS, (char *)"svn_client_diff_summarize_t_path_set(svn_client_diff_summarize_t self, char const * path)"},
+ { (char *)"svn_client_diff_summarize_t_path_get", _wrap_svn_client_diff_summarize_t_path_get, METH_VARARGS, (char *)"svn_client_diff_summarize_t_path_get(svn_client_diff_summarize_t self) -> char const *"},
{ (char *)"svn_client_diff_summarize_t_summarize_kind_set", _wrap_svn_client_diff_summarize_t_summarize_kind_set, METH_VARARGS, (char *)"svn_client_diff_summarize_t_summarize_kind_set(svn_client_diff_summarize_t self, svn_client_diff_summarize_kind_t summarize_kind)"},
{ (char *)"svn_client_diff_summarize_t_summarize_kind_get", _wrap_svn_client_diff_summarize_t_summarize_kind_get, METH_VARARGS, (char *)"svn_client_diff_summarize_t_summarize_kind_get(svn_client_diff_summarize_t self) -> svn_client_diff_summarize_kind_t"},
{ (char *)"svn_client_diff_summarize_t_prop_changed_set", _wrap_svn_client_diff_summarize_t_prop_changed_set, METH_VARARGS, (char *)"svn_client_diff_summarize_t_prop_changed_set(svn_client_diff_summarize_t self, svn_boolean_t prop_changed)"},
@@ -28779,230 +31381,206 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"delete_svn_client_diff_summarize_t", _wrap_delete_svn_client_diff_summarize_t, METH_VARARGS, (char *)"delete_svn_client_diff_summarize_t(svn_client_diff_summarize_t self)"},
{ (char *)"svn_client_diff_summarize_t_swigregister", svn_client_diff_summarize_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_client_diff_summarize_dup", _wrap_svn_client_diff_summarize_dup, METH_VARARGS, (char *)"svn_client_diff_summarize_dup(svn_client_diff_summarize_t diff, apr_pool_t pool) -> svn_client_diff_summarize_t"},
- { (char *)"svn_client_ctx_t_auth_baton_set", _wrap_svn_client_ctx_t_auth_baton_set, METH_VARARGS, (char *)"svn_client_ctx_t_auth_baton_set(svn_client_ctx_t self, svn_auth_baton_t auth_baton)"},
- { (char *)"svn_client_ctx_t_auth_baton_get", _wrap_svn_client_ctx_t_auth_baton_get, METH_VARARGS, (char *)"svn_client_ctx_t_auth_baton_get(svn_client_ctx_t self) -> svn_auth_baton_t"},
+ { (char *)"svn_client_ctx_t_auth_baton_set", _wrap_svn_client_ctx_t_auth_baton_set, METH_VARARGS, (char *)"svn_client_ctx_t_auth_baton_set(svn_client_ctx_t self, svn_auth_baton_t * auth_baton)"},
+ { (char *)"svn_client_ctx_t_auth_baton_get", _wrap_svn_client_ctx_t_auth_baton_get, METH_VARARGS, (char *)"svn_client_ctx_t_auth_baton_get(svn_client_ctx_t self) -> svn_auth_baton_t *"},
{ (char *)"svn_client_ctx_t_notify_func_set", _wrap_svn_client_ctx_t_notify_func_set, METH_VARARGS, (char *)"svn_client_ctx_t_notify_func_set(svn_client_ctx_t self, svn_wc_notify_func_t notify_func)"},
{ (char *)"svn_client_ctx_t_notify_func_get", _wrap_svn_client_ctx_t_notify_func_get, METH_VARARGS, (char *)"svn_client_ctx_t_notify_func_get(svn_client_ctx_t self) -> svn_wc_notify_func_t"},
- { (char *)"svn_client_ctx_t_notify_baton_set", _wrap_svn_client_ctx_t_notify_baton_set, METH_VARARGS, (char *)"svn_client_ctx_t_notify_baton_set(svn_client_ctx_t self, void notify_baton)"},
- { (char *)"svn_client_ctx_t_notify_baton_get", _wrap_svn_client_ctx_t_notify_baton_get, METH_VARARGS, (char *)"svn_client_ctx_t_notify_baton_get(svn_client_ctx_t self) -> void"},
+ { (char *)"svn_client_ctx_t_notify_baton_set", _wrap_svn_client_ctx_t_notify_baton_set, METH_VARARGS, (char *)"svn_client_ctx_t_notify_baton_set(svn_client_ctx_t self, void * notify_baton)"},
+ { (char *)"svn_client_ctx_t_notify_baton_get", _wrap_svn_client_ctx_t_notify_baton_get, METH_VARARGS, (char *)"svn_client_ctx_t_notify_baton_get(svn_client_ctx_t self) -> void *"},
{ (char *)"svn_client_ctx_t_log_msg_func_set", _wrap_svn_client_ctx_t_log_msg_func_set, METH_VARARGS, (char *)"svn_client_ctx_t_log_msg_func_set(svn_client_ctx_t self, svn_client_get_commit_log_t log_msg_func)"},
{ (char *)"svn_client_ctx_t_log_msg_func_get", _wrap_svn_client_ctx_t_log_msg_func_get, METH_VARARGS, (char *)"svn_client_ctx_t_log_msg_func_get(svn_client_ctx_t self) -> svn_client_get_commit_log_t"},
- { (char *)"svn_client_ctx_t_log_msg_baton_set", _wrap_svn_client_ctx_t_log_msg_baton_set, METH_VARARGS, (char *)"svn_client_ctx_t_log_msg_baton_set(svn_client_ctx_t self, void log_msg_baton)"},
- { (char *)"svn_client_ctx_t_log_msg_baton_get", _wrap_svn_client_ctx_t_log_msg_baton_get, METH_VARARGS, (char *)"svn_client_ctx_t_log_msg_baton_get(svn_client_ctx_t self) -> void"},
+ { (char *)"svn_client_ctx_t_log_msg_baton_set", _wrap_svn_client_ctx_t_log_msg_baton_set, METH_VARARGS, (char *)"svn_client_ctx_t_log_msg_baton_set(svn_client_ctx_t self, void * log_msg_baton)"},
+ { (char *)"svn_client_ctx_t_log_msg_baton_get", _wrap_svn_client_ctx_t_log_msg_baton_get, METH_VARARGS, (char *)"svn_client_ctx_t_log_msg_baton_get(svn_client_ctx_t self) -> void *"},
{ (char *)"svn_client_ctx_t_config_set", _wrap_svn_client_ctx_t_config_set, METH_VARARGS, (char *)"svn_client_ctx_t_config_set(svn_client_ctx_t self, apr_hash_t config)"},
{ (char *)"svn_client_ctx_t_config_get", _wrap_svn_client_ctx_t_config_get, METH_VARARGS, (char *)"svn_client_ctx_t_config_get(svn_client_ctx_t self) -> apr_hash_t"},
{ (char *)"svn_client_ctx_t_cancel_func_set", _wrap_svn_client_ctx_t_cancel_func_set, METH_VARARGS, (char *)"svn_client_ctx_t_cancel_func_set(svn_client_ctx_t self, svn_cancel_func_t cancel_func)"},
{ (char *)"svn_client_ctx_t_cancel_func_get", _wrap_svn_client_ctx_t_cancel_func_get, METH_VARARGS, (char *)"svn_client_ctx_t_cancel_func_get(svn_client_ctx_t self) -> svn_cancel_func_t"},
- { (char *)"svn_client_ctx_t_cancel_baton_set", _wrap_svn_client_ctx_t_cancel_baton_set, METH_VARARGS, (char *)"svn_client_ctx_t_cancel_baton_set(svn_client_ctx_t self, void cancel_baton)"},
- { (char *)"svn_client_ctx_t_cancel_baton_get", _wrap_svn_client_ctx_t_cancel_baton_get, METH_VARARGS, (char *)"svn_client_ctx_t_cancel_baton_get(svn_client_ctx_t self) -> void"},
+ { (char *)"svn_client_ctx_t_cancel_baton_set", _wrap_svn_client_ctx_t_cancel_baton_set, METH_VARARGS, (char *)"svn_client_ctx_t_cancel_baton_set(svn_client_ctx_t self, void * cancel_baton)"},
+ { (char *)"svn_client_ctx_t_cancel_baton_get", _wrap_svn_client_ctx_t_cancel_baton_get, METH_VARARGS, (char *)"svn_client_ctx_t_cancel_baton_get(svn_client_ctx_t self) -> void *"},
{ (char *)"svn_client_ctx_t_notify_func2_set", _wrap_svn_client_ctx_t_notify_func2_set, METH_VARARGS, (char *)"svn_client_ctx_t_notify_func2_set(svn_client_ctx_t self, svn_wc_notify_func2_t notify_func2)"},
{ (char *)"svn_client_ctx_t_notify_func2_get", _wrap_svn_client_ctx_t_notify_func2_get, METH_VARARGS, (char *)"svn_client_ctx_t_notify_func2_get(svn_client_ctx_t self) -> svn_wc_notify_func2_t"},
- { (char *)"svn_client_ctx_t_notify_baton2_set", _wrap_svn_client_ctx_t_notify_baton2_set, METH_VARARGS, (char *)"svn_client_ctx_t_notify_baton2_set(svn_client_ctx_t self, void notify_baton2)"},
- { (char *)"svn_client_ctx_t_notify_baton2_get", _wrap_svn_client_ctx_t_notify_baton2_get, METH_VARARGS, (char *)"svn_client_ctx_t_notify_baton2_get(svn_client_ctx_t self) -> void"},
+ { (char *)"svn_client_ctx_t_notify_baton2_set", _wrap_svn_client_ctx_t_notify_baton2_set, METH_VARARGS, (char *)"svn_client_ctx_t_notify_baton2_set(svn_client_ctx_t self, void * notify_baton2)"},
+ { (char *)"svn_client_ctx_t_notify_baton2_get", _wrap_svn_client_ctx_t_notify_baton2_get, METH_VARARGS, (char *)"svn_client_ctx_t_notify_baton2_get(svn_client_ctx_t self) -> void *"},
{ (char *)"svn_client_ctx_t_log_msg_func2_set", _wrap_svn_client_ctx_t_log_msg_func2_set, METH_VARARGS, (char *)"svn_client_ctx_t_log_msg_func2_set(svn_client_ctx_t self, svn_client_get_commit_log2_t log_msg_func2)"},
{ (char *)"svn_client_ctx_t_log_msg_func2_get", _wrap_svn_client_ctx_t_log_msg_func2_get, METH_VARARGS, (char *)"svn_client_ctx_t_log_msg_func2_get(svn_client_ctx_t self) -> svn_client_get_commit_log2_t"},
- { (char *)"svn_client_ctx_t_log_msg_baton2_set", _wrap_svn_client_ctx_t_log_msg_baton2_set, METH_VARARGS, (char *)"svn_client_ctx_t_log_msg_baton2_set(svn_client_ctx_t self, void log_msg_baton2)"},
- { (char *)"svn_client_ctx_t_log_msg_baton2_get", _wrap_svn_client_ctx_t_log_msg_baton2_get, METH_VARARGS, (char *)"svn_client_ctx_t_log_msg_baton2_get(svn_client_ctx_t self) -> void"},
+ { (char *)"svn_client_ctx_t_log_msg_baton2_set", _wrap_svn_client_ctx_t_log_msg_baton2_set, METH_VARARGS, (char *)"svn_client_ctx_t_log_msg_baton2_set(svn_client_ctx_t self, void * log_msg_baton2)"},
+ { (char *)"svn_client_ctx_t_log_msg_baton2_get", _wrap_svn_client_ctx_t_log_msg_baton2_get, METH_VARARGS, (char *)"svn_client_ctx_t_log_msg_baton2_get(svn_client_ctx_t self) -> void *"},
{ (char *)"svn_client_ctx_t_progress_func_set", _wrap_svn_client_ctx_t_progress_func_set, METH_VARARGS, (char *)"svn_client_ctx_t_progress_func_set(svn_client_ctx_t self, svn_ra_progress_notify_func_t progress_func)"},
{ (char *)"svn_client_ctx_t_progress_func_get", _wrap_svn_client_ctx_t_progress_func_get, METH_VARARGS, (char *)"svn_client_ctx_t_progress_func_get(svn_client_ctx_t self) -> svn_ra_progress_notify_func_t"},
- { (char *)"svn_client_ctx_t_progress_baton_set", _wrap_svn_client_ctx_t_progress_baton_set, METH_VARARGS, (char *)"svn_client_ctx_t_progress_baton_set(svn_client_ctx_t self, void progress_baton)"},
- { (char *)"svn_client_ctx_t_progress_baton_get", _wrap_svn_client_ctx_t_progress_baton_get, METH_VARARGS, (char *)"svn_client_ctx_t_progress_baton_get(svn_client_ctx_t self) -> void"},
+ { (char *)"svn_client_ctx_t_progress_baton_set", _wrap_svn_client_ctx_t_progress_baton_set, METH_VARARGS, (char *)"svn_client_ctx_t_progress_baton_set(svn_client_ctx_t self, void * progress_baton)"},
+ { (char *)"svn_client_ctx_t_progress_baton_get", _wrap_svn_client_ctx_t_progress_baton_get, METH_VARARGS, (char *)"svn_client_ctx_t_progress_baton_get(svn_client_ctx_t self) -> void *"},
{ (char *)"svn_client_ctx_t_log_msg_func3_set", _wrap_svn_client_ctx_t_log_msg_func3_set, METH_VARARGS, (char *)"svn_client_ctx_t_log_msg_func3_set(svn_client_ctx_t self, svn_client_get_commit_log3_t log_msg_func3)"},
{ (char *)"svn_client_ctx_t_log_msg_func3_get", _wrap_svn_client_ctx_t_log_msg_func3_get, METH_VARARGS, (char *)"svn_client_ctx_t_log_msg_func3_get(svn_client_ctx_t self) -> svn_client_get_commit_log3_t"},
- { (char *)"svn_client_ctx_t_log_msg_baton3_set", _wrap_svn_client_ctx_t_log_msg_baton3_set, METH_VARARGS, (char *)"svn_client_ctx_t_log_msg_baton3_set(svn_client_ctx_t self, void log_msg_baton3)"},
- { (char *)"svn_client_ctx_t_log_msg_baton3_get", _wrap_svn_client_ctx_t_log_msg_baton3_get, METH_VARARGS, (char *)"svn_client_ctx_t_log_msg_baton3_get(svn_client_ctx_t self) -> void"},
+ { (char *)"svn_client_ctx_t_log_msg_baton3_set", _wrap_svn_client_ctx_t_log_msg_baton3_set, METH_VARARGS, (char *)"svn_client_ctx_t_log_msg_baton3_set(svn_client_ctx_t self, void * log_msg_baton3)"},
+ { (char *)"svn_client_ctx_t_log_msg_baton3_get", _wrap_svn_client_ctx_t_log_msg_baton3_get, METH_VARARGS, (char *)"svn_client_ctx_t_log_msg_baton3_get(svn_client_ctx_t self) -> void *"},
{ (char *)"svn_client_ctx_t_mimetypes_map_set", _wrap_svn_client_ctx_t_mimetypes_map_set, METH_VARARGS, (char *)"svn_client_ctx_t_mimetypes_map_set(svn_client_ctx_t self, apr_hash_t mimetypes_map)"},
{ (char *)"svn_client_ctx_t_mimetypes_map_get", _wrap_svn_client_ctx_t_mimetypes_map_get, METH_VARARGS, (char *)"svn_client_ctx_t_mimetypes_map_get(svn_client_ctx_t self) -> apr_hash_t"},
{ (char *)"svn_client_ctx_t_conflict_func_set", _wrap_svn_client_ctx_t_conflict_func_set, METH_VARARGS, (char *)"svn_client_ctx_t_conflict_func_set(svn_client_ctx_t self, svn_wc_conflict_resolver_func_t conflict_func)"},
{ (char *)"svn_client_ctx_t_conflict_func_get", _wrap_svn_client_ctx_t_conflict_func_get, METH_VARARGS, (char *)"svn_client_ctx_t_conflict_func_get(svn_client_ctx_t self) -> svn_wc_conflict_resolver_func_t"},
- { (char *)"svn_client_ctx_t_conflict_baton_set", _wrap_svn_client_ctx_t_conflict_baton_set, METH_VARARGS, (char *)"svn_client_ctx_t_conflict_baton_set(svn_client_ctx_t self, void conflict_baton)"},
- { (char *)"svn_client_ctx_t_conflict_baton_get", _wrap_svn_client_ctx_t_conflict_baton_get, METH_VARARGS, (char *)"svn_client_ctx_t_conflict_baton_get(svn_client_ctx_t self) -> void"},
- { (char *)"svn_client_ctx_t_client_name_set", _wrap_svn_client_ctx_t_client_name_set, METH_VARARGS, (char *)"svn_client_ctx_t_client_name_set(svn_client_ctx_t self, char client_name)"},
- { (char *)"svn_client_ctx_t_client_name_get", _wrap_svn_client_ctx_t_client_name_get, METH_VARARGS, (char *)"svn_client_ctx_t_client_name_get(svn_client_ctx_t self) -> char"},
+ { (char *)"svn_client_ctx_t_conflict_baton_set", _wrap_svn_client_ctx_t_conflict_baton_set, METH_VARARGS, (char *)"svn_client_ctx_t_conflict_baton_set(svn_client_ctx_t self, void * conflict_baton)"},
+ { (char *)"svn_client_ctx_t_conflict_baton_get", _wrap_svn_client_ctx_t_conflict_baton_get, METH_VARARGS, (char *)"svn_client_ctx_t_conflict_baton_get(svn_client_ctx_t self) -> void *"},
+ { (char *)"svn_client_ctx_t_client_name_set", _wrap_svn_client_ctx_t_client_name_set, METH_VARARGS, (char *)"svn_client_ctx_t_client_name_set(svn_client_ctx_t self, char const * client_name)"},
+ { (char *)"svn_client_ctx_t_client_name_get", _wrap_svn_client_ctx_t_client_name_get, METH_VARARGS, (char *)"svn_client_ctx_t_client_name_get(svn_client_ctx_t self) -> char const *"},
{ (char *)"svn_client_ctx_t_conflict_func2_set", _wrap_svn_client_ctx_t_conflict_func2_set, METH_VARARGS, (char *)"svn_client_ctx_t_conflict_func2_set(svn_client_ctx_t self, svn_wc_conflict_resolver_func2_t conflict_func2)"},
{ (char *)"svn_client_ctx_t_conflict_func2_get", _wrap_svn_client_ctx_t_conflict_func2_get, METH_VARARGS, (char *)"svn_client_ctx_t_conflict_func2_get(svn_client_ctx_t self) -> svn_wc_conflict_resolver_func2_t"},
- { (char *)"svn_client_ctx_t_conflict_baton2_set", _wrap_svn_client_ctx_t_conflict_baton2_set, METH_VARARGS, (char *)"svn_client_ctx_t_conflict_baton2_set(svn_client_ctx_t self, void conflict_baton2)"},
- { (char *)"svn_client_ctx_t_conflict_baton2_get", _wrap_svn_client_ctx_t_conflict_baton2_get, METH_VARARGS, (char *)"svn_client_ctx_t_conflict_baton2_get(svn_client_ctx_t self) -> void"},
- { (char *)"svn_client_ctx_t_wc_ctx_set", _wrap_svn_client_ctx_t_wc_ctx_set, METH_VARARGS, (char *)"svn_client_ctx_t_wc_ctx_set(svn_client_ctx_t self, svn_wc_context_t wc_ctx)"},
- { (char *)"svn_client_ctx_t_wc_ctx_get", _wrap_svn_client_ctx_t_wc_ctx_get, METH_VARARGS, (char *)"svn_client_ctx_t_wc_ctx_get(svn_client_ctx_t self) -> svn_wc_context_t"},
+ { (char *)"svn_client_ctx_t_conflict_baton2_set", _wrap_svn_client_ctx_t_conflict_baton2_set, METH_VARARGS, (char *)"svn_client_ctx_t_conflict_baton2_set(svn_client_ctx_t self, void * conflict_baton2)"},
+ { (char *)"svn_client_ctx_t_conflict_baton2_get", _wrap_svn_client_ctx_t_conflict_baton2_get, METH_VARARGS, (char *)"svn_client_ctx_t_conflict_baton2_get(svn_client_ctx_t self) -> void *"},
+ { (char *)"svn_client_ctx_t_wc_ctx_set", _wrap_svn_client_ctx_t_wc_ctx_set, METH_VARARGS, (char *)"svn_client_ctx_t_wc_ctx_set(svn_client_ctx_t self, svn_wc_context_t * wc_ctx)"},
+ { (char *)"svn_client_ctx_t_wc_ctx_get", _wrap_svn_client_ctx_t_wc_ctx_get, METH_VARARGS, (char *)"svn_client_ctx_t_wc_ctx_get(svn_client_ctx_t self) -> svn_wc_context_t *"},
{ (char *)"new_svn_client_ctx_t", _wrap_new_svn_client_ctx_t, METH_VARARGS, (char *)"new_svn_client_ctx_t() -> svn_client_ctx_t"},
{ (char *)"delete_svn_client_ctx_t", _wrap_delete_svn_client_ctx_t, METH_VARARGS, (char *)"delete_svn_client_ctx_t(svn_client_ctx_t self)"},
{ (char *)"svn_client_ctx_t_swigregister", svn_client_ctx_t_swigregister, METH_VARARGS, NULL},
+ { (char *)"svn_client_create_context2", _wrap_svn_client_create_context2, METH_VARARGS, (char *)"svn_client_create_context2(apr_hash_t cfg_hash, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_client_create_context", _wrap_svn_client_create_context, METH_VARARGS, (char *)"svn_client_create_context(apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_client_args_to_target_array2", _wrap_svn_client_args_to_target_array2, METH_VARARGS, (char *)"\n"
- "svn_client_args_to_target_array2(apr_getopt_t os, apr_array_header_t known_targets, \n"
- " svn_client_ctx_t ctx, svn_boolean_t keep_last_origpath_on_truepath_collision, \n"
+ "svn_client_args_to_target_array2(apr_getopt_t * os, apr_array_header_t known_targets, svn_client_ctx_t ctx, svn_boolean_t keep_last_origpath_on_truepath_collision, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_client_args_to_target_array", _wrap_svn_client_args_to_target_array, METH_VARARGS, (char *)"\n"
- "svn_client_args_to_target_array(apr_getopt_t os, apr_array_header_t known_targets, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
- ""},
+ { (char *)"svn_client_args_to_target_array", _wrap_svn_client_args_to_target_array, METH_VARARGS, (char *)"svn_client_args_to_target_array(apr_getopt_t * os, apr_array_header_t known_targets, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_client_checkout3", _wrap_svn_client_checkout3, METH_VARARGS, (char *)"\n"
- "svn_client_checkout3(char URL, char path, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t revision, svn_depth_t depth, \n"
- " svn_boolean_t ignore_externals, svn_boolean_t allow_unver_obstructions, \n"
- " svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_checkout3(char const * URL, char const * path, svn_opt_revision_t peg_revision, svn_opt_revision_t revision, \n"
+ " svn_depth_t depth, svn_boolean_t ignore_externals, svn_boolean_t allow_unver_obstructions, \n"
+ " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_checkout2", _wrap_svn_client_checkout2, METH_VARARGS, (char *)"\n"
- "svn_client_checkout2(char URL, char path, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t revision, svn_boolean_t recurse, \n"
- " svn_boolean_t ignore_externals, svn_client_ctx_t ctx, \n"
+ "svn_client_checkout2(char const * URL, char const * path, svn_opt_revision_t peg_revision, svn_opt_revision_t revision, \n"
+ " svn_boolean_t recurse, svn_boolean_t ignore_externals, svn_client_ctx_t ctx, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_checkout", _wrap_svn_client_checkout, METH_VARARGS, (char *)"\n"
- "svn_client_checkout(char URL, char path, svn_opt_revision_t revision, svn_boolean_t recurse, \n"
+ "svn_client_checkout(char const * URL, char const * path, svn_opt_revision_t revision, svn_boolean_t recurse, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_update4", _wrap_svn_client_update4, METH_VARARGS, (char *)"\n"
- "svn_client_update4(apr_array_header_t paths, svn_opt_revision_t revision, \n"
- " svn_depth_t depth, svn_boolean_t depth_is_sticky, \n"
+ "svn_client_update4(apr_array_header_t paths, svn_opt_revision_t revision, svn_depth_t depth, svn_boolean_t depth_is_sticky, \n"
" svn_boolean_t ignore_externals, svn_boolean_t allow_unver_obstructions, \n"
- " svn_boolean_t adds_as_modification, \n"
- " svn_boolean_t make_parents, \n"
+ " svn_boolean_t adds_as_modification, svn_boolean_t make_parents, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_update3", _wrap_svn_client_update3, METH_VARARGS, (char *)"\n"
- "svn_client_update3(apr_array_header_t paths, svn_opt_revision_t revision, \n"
- " svn_depth_t depth, svn_boolean_t depth_is_sticky, \n"
+ "svn_client_update3(apr_array_header_t paths, svn_opt_revision_t revision, svn_depth_t depth, svn_boolean_t depth_is_sticky, \n"
" svn_boolean_t ignore_externals, svn_boolean_t allow_unver_obstructions, \n"
- " svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_update2", _wrap_svn_client_update2, METH_VARARGS, (char *)"\n"
- "svn_client_update2(apr_array_header_t paths, svn_opt_revision_t revision, \n"
- " svn_boolean_t recurse, svn_boolean_t ignore_externals, \n"
+ "svn_client_update2(apr_array_header_t paths, svn_opt_revision_t revision, svn_boolean_t recurse, svn_boolean_t ignore_externals, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_update", _wrap_svn_client_update, METH_VARARGS, (char *)"\n"
- "svn_client_update(char path, svn_opt_revision_t revision, svn_boolean_t recurse, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_update(char const * path, svn_opt_revision_t revision, svn_boolean_t recurse, svn_client_ctx_t ctx, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_switch3", _wrap_svn_client_switch3, METH_VARARGS, (char *)"\n"
- "svn_client_switch3(char path, char url, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t revision, svn_depth_t depth, \n"
- " svn_boolean_t depth_is_sticky, svn_boolean_t ignore_externals, \n"
- " svn_boolean_t allow_unver_obstructions, \n"
- " svn_boolean_t ignore_ancestry, \n"
+ "svn_client_switch3(char const * path, char const * url, svn_opt_revision_t peg_revision, svn_opt_revision_t revision, \n"
+ " svn_depth_t depth, svn_boolean_t depth_is_sticky, svn_boolean_t ignore_externals, \n"
+ " svn_boolean_t allow_unver_obstructions, svn_boolean_t ignore_ancestry, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_switch2", _wrap_svn_client_switch2, METH_VARARGS, (char *)"\n"
- "svn_client_switch2(char path, char url, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t revision, svn_depth_t depth, \n"
- " svn_boolean_t depth_is_sticky, svn_boolean_t ignore_externals, \n"
- " svn_boolean_t allow_unver_obstructions, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_switch2(char const * path, char const * url, svn_opt_revision_t peg_revision, svn_opt_revision_t revision, \n"
+ " svn_depth_t depth, svn_boolean_t depth_is_sticky, svn_boolean_t ignore_externals, \n"
+ " svn_boolean_t allow_unver_obstructions, svn_client_ctx_t ctx, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_switch", _wrap_svn_client_switch, METH_VARARGS, (char *)"\n"
- "svn_client_switch(char path, char url, svn_opt_revision_t revision, svn_boolean_t recurse, \n"
+ "svn_client_switch(char const * path, char const * url, svn_opt_revision_t revision, svn_boolean_t recurse, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_client_add5", _wrap_svn_client_add5, METH_VARARGS, (char *)"\n"
+ "svn_client_add5(char const * path, svn_depth_t depth, svn_boolean_t force, svn_boolean_t no_ignore, \n"
+ " svn_boolean_t no_autoprops, svn_boolean_t add_parents, svn_client_ctx_t ctx, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
+ ""},
{ (char *)"svn_client_add4", _wrap_svn_client_add4, METH_VARARGS, (char *)"\n"
- "svn_client_add4(char path, svn_depth_t depth, svn_boolean_t force, \n"
- " svn_boolean_t no_ignore, svn_boolean_t add_parents, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_add4(char const * path, svn_depth_t depth, svn_boolean_t force, svn_boolean_t no_ignore, \n"
+ " svn_boolean_t add_parents, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_add3", _wrap_svn_client_add3, METH_VARARGS, (char *)"\n"
- "svn_client_add3(char path, svn_boolean_t recursive, svn_boolean_t force, \n"
- " svn_boolean_t no_ignore, svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_client_add2", _wrap_svn_client_add2, METH_VARARGS, (char *)"\n"
- "svn_client_add2(char path, svn_boolean_t recursive, svn_boolean_t force, \n"
+ "svn_client_add3(char const * path, svn_boolean_t recursive, svn_boolean_t force, svn_boolean_t no_ignore, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_client_add", _wrap_svn_client_add, METH_VARARGS, (char *)"\n"
- "svn_client_add(char path, svn_boolean_t recursive, svn_client_ctx_t ctx, \n"
+ { (char *)"svn_client_add2", _wrap_svn_client_add2, METH_VARARGS, (char *)"\n"
+ "svn_client_add2(char const * path, svn_boolean_t recursive, svn_boolean_t force, svn_client_ctx_t ctx, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_client_add", _wrap_svn_client_add, METH_VARARGS, (char *)"svn_client_add(char const * path, svn_boolean_t recursive, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_client_mkdir4", _wrap_svn_client_mkdir4, METH_VARARGS, (char *)"\n"
- "svn_client_mkdir4(apr_array_header_t paths, svn_boolean_t make_parents, \n"
- " apr_hash_t revprop_table, svn_commit_callback2_t commit_callback, \n"
- " void commit_baton, svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_mkdir4(apr_array_header_t paths, svn_boolean_t make_parents, apr_hash_t revprop_table, svn_commit_callback2_t commit_callback, \n"
+ " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_mkdir3", _wrap_svn_client_mkdir3, METH_VARARGS, (char *)"\n"
- "svn_client_mkdir3(apr_array_header_t paths, svn_boolean_t make_parents, \n"
- " apr_hash_t revprop_table, svn_client_ctx_t ctx, \n"
+ "svn_client_mkdir3(apr_array_header_t paths, svn_boolean_t make_parents, apr_hash_t revprop_table, svn_client_ctx_t ctx, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_mkdir2", _wrap_svn_client_mkdir2, METH_VARARGS, (char *)"svn_client_mkdir2(apr_array_header_t paths, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_client_mkdir", _wrap_svn_client_mkdir, METH_VARARGS, (char *)"svn_client_mkdir(apr_array_header_t paths, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_client_delete4", _wrap_svn_client_delete4, METH_VARARGS, (char *)"\n"
- "svn_client_delete4(apr_array_header_t paths, svn_boolean_t force, svn_boolean_t keep_local, \n"
- " apr_hash_t revprop_table, \n"
- " svn_commit_callback2_t commit_callback, void commit_baton, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_delete4(apr_array_header_t paths, svn_boolean_t force, svn_boolean_t keep_local, apr_hash_t revprop_table, \n"
+ " svn_commit_callback2_t commit_callback, svn_client_ctx_t ctx, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_delete3", _wrap_svn_client_delete3, METH_VARARGS, (char *)"\n"
- "svn_client_delete3(apr_array_header_t paths, svn_boolean_t force, svn_boolean_t keep_local, \n"
- " apr_hash_t revprop_table, \n"
+ "svn_client_delete3(apr_array_header_t paths, svn_boolean_t force, svn_boolean_t keep_local, apr_hash_t revprop_table, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_client_delete2", _wrap_svn_client_delete2, METH_VARARGS, (char *)"\n"
- "svn_client_delete2(apr_array_header_t paths, svn_boolean_t force, svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_client_delete", _wrap_svn_client_delete, METH_VARARGS, (char *)"\n"
- "svn_client_delete(apr_array_header_t paths, svn_boolean_t force, svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ { (char *)"svn_client_delete2", _wrap_svn_client_delete2, METH_VARARGS, (char *)"svn_client_delete2(apr_array_header_t paths, svn_boolean_t force, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_client_delete", _wrap_svn_client_delete, METH_VARARGS, (char *)"svn_client_delete(apr_array_header_t paths, svn_boolean_t force, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_client_import5", _wrap_svn_client_import5, METH_VARARGS, (char *)"\n"
+ "svn_client_import5(char const * path, char const * url, svn_depth_t depth, svn_boolean_t no_ignore, \n"
+ " svn_boolean_t no_autoprops, svn_boolean_t ignore_unknown_node_types, apr_hash_t revprop_table, \n"
+ " svn_client_import_filter_func_t filter_callback, void * filter_baton, \n"
+ " svn_commit_callback2_t commit_callback, svn_client_ctx_t ctx, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_import4", _wrap_svn_client_import4, METH_VARARGS, (char *)"\n"
- "svn_client_import4(char path, char url, svn_depth_t depth, svn_boolean_t no_ignore, \n"
- " svn_boolean_t ignore_unknown_node_types, \n"
- " apr_hash_t revprop_table, svn_commit_callback2_t commit_callback, \n"
- " void commit_baton, \n"
+ "svn_client_import4(char const * path, char const * url, svn_depth_t depth, svn_boolean_t no_ignore, \n"
+ " svn_boolean_t ignore_unknown_node_types, apr_hash_t revprop_table, svn_commit_callback2_t commit_callback, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_import3", _wrap_svn_client_import3, METH_VARARGS, (char *)"\n"
- "svn_client_import3(char path, char url, svn_depth_t depth, svn_boolean_t no_ignore, \n"
- " svn_boolean_t ignore_unknown_node_types, \n"
- " apr_hash_t revprop_table, svn_client_ctx_t ctx, \n"
+ "svn_client_import3(char const * path, char const * url, svn_depth_t depth, svn_boolean_t no_ignore, \n"
+ " svn_boolean_t ignore_unknown_node_types, apr_hash_t revprop_table, svn_client_ctx_t ctx, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_import2", _wrap_svn_client_import2, METH_VARARGS, (char *)"\n"
- "svn_client_import2(char path, char url, svn_boolean_t nonrecursive, svn_boolean_t no_ignore, \n"
- " svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_import2(char const * path, char const * url, svn_boolean_t nonrecursive, svn_boolean_t no_ignore, \n"
+ " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_import", _wrap_svn_client_import, METH_VARARGS, (char *)"\n"
- "svn_client_import(char path, char url, svn_boolean_t nonrecursive, svn_client_ctx_t ctx, \n"
+ "svn_client_import(char const * path, char const * url, svn_boolean_t nonrecursive, svn_client_ctx_t ctx, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_client_commit6", _wrap_svn_client_commit6, METH_VARARGS, (char *)"\n"
+ "svn_client_commit6(apr_array_header_t targets, svn_depth_t depth, svn_boolean_t keep_locks, svn_boolean_t keep_changelists, \n"
+ " svn_boolean_t commit_as_operations, svn_boolean_t include_file_externals, \n"
+ " svn_boolean_t include_dir_externals, apr_array_header_t changelists, \n"
+ " apr_hash_t revprop_table, svn_commit_callback2_t commit_callback, \n"
+ " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ ""},
{ (char *)"svn_client_commit5", _wrap_svn_client_commit5, METH_VARARGS, (char *)"\n"
- "svn_client_commit5(apr_array_header_t targets, svn_depth_t depth, svn_boolean_t keep_locks, \n"
- " svn_boolean_t keep_changelists, \n"
- " svn_boolean_t commit_as_operations, \n"
- " apr_array_header_t changelists, apr_hash_t revprop_table, \n"
- " svn_commit_callback2_t commit_callback, \n"
- " void commit_baton, svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_commit5(apr_array_header_t targets, svn_depth_t depth, svn_boolean_t keep_locks, svn_boolean_t keep_changelists, \n"
+ " svn_boolean_t commit_as_operations, apr_array_header_t changelists, \n"
+ " apr_hash_t revprop_table, svn_commit_callback2_t commit_callback, \n"
+ " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_commit4", _wrap_svn_client_commit4, METH_VARARGS, (char *)"\n"
- "svn_client_commit4(apr_array_header_t targets, svn_depth_t depth, svn_boolean_t keep_locks, \n"
- " svn_boolean_t keep_changelists, \n"
+ "svn_client_commit4(apr_array_header_t targets, svn_depth_t depth, svn_boolean_t keep_locks, svn_boolean_t keep_changelists, \n"
" apr_array_header_t changelists, apr_hash_t revprop_table, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_commit3", _wrap_svn_client_commit3, METH_VARARGS, (char *)"\n"
- "svn_client_commit3(apr_array_header_t targets, svn_boolean_t recurse, \n"
- " svn_boolean_t keep_locks, svn_client_ctx_t ctx, \n"
+ "svn_client_commit3(apr_array_header_t targets, svn_boolean_t recurse, svn_boolean_t keep_locks, svn_client_ctx_t ctx, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_commit2", _wrap_svn_client_commit2, METH_VARARGS, (char *)"\n"
- "svn_client_commit2(apr_array_header_t targets, svn_boolean_t recurse, \n"
- " svn_boolean_t keep_locks, svn_client_ctx_t ctx, \n"
+ "svn_client_commit2(apr_array_header_t targets, svn_boolean_t recurse, svn_boolean_t keep_locks, svn_client_ctx_t ctx, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_client_commit", _wrap_svn_client_commit, METH_VARARGS, (char *)"\n"
- "svn_client_commit(apr_array_header_t targets, svn_boolean_t nonrecursive, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
- ""},
+ { (char *)"svn_client_commit", _wrap_svn_client_commit, METH_VARARGS, (char *)"svn_client_commit(apr_array_header_t targets, svn_boolean_t nonrecursive, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_client_status_t_kind_set", _wrap_svn_client_status_t_kind_set, METH_VARARGS, (char *)"svn_client_status_t_kind_set(svn_client_status_t self, svn_node_kind_t kind)"},
{ (char *)"svn_client_status_t_kind_get", _wrap_svn_client_status_t_kind_get, METH_VARARGS, (char *)"svn_client_status_t_kind_get(svn_client_status_t self) -> svn_node_kind_t"},
- { (char *)"svn_client_status_t_local_abspath_set", _wrap_svn_client_status_t_local_abspath_set, METH_VARARGS, (char *)"svn_client_status_t_local_abspath_set(svn_client_status_t self, char local_abspath)"},
- { (char *)"svn_client_status_t_local_abspath_get", _wrap_svn_client_status_t_local_abspath_get, METH_VARARGS, (char *)"svn_client_status_t_local_abspath_get(svn_client_status_t self) -> char"},
+ { (char *)"svn_client_status_t_local_abspath_set", _wrap_svn_client_status_t_local_abspath_set, METH_VARARGS, (char *)"svn_client_status_t_local_abspath_set(svn_client_status_t self, char const * local_abspath)"},
+ { (char *)"svn_client_status_t_local_abspath_get", _wrap_svn_client_status_t_local_abspath_get, METH_VARARGS, (char *)"svn_client_status_t_local_abspath_get(svn_client_status_t self) -> char const *"},
{ (char *)"svn_client_status_t_filesize_set", _wrap_svn_client_status_t_filesize_set, METH_VARARGS, (char *)"svn_client_status_t_filesize_set(svn_client_status_t self, svn_filesize_t filesize)"},
{ (char *)"svn_client_status_t_filesize_get", _wrap_svn_client_status_t_filesize_get, METH_VARARGS, (char *)"svn_client_status_t_filesize_get(svn_client_status_t self) -> svn_filesize_t"},
{ (char *)"svn_client_status_t_versioned_set", _wrap_svn_client_status_t_versioned_set, METH_VARARGS, (char *)"svn_client_status_t_versioned_set(svn_client_status_t self, svn_boolean_t versioned)"},
@@ -29019,28 +31597,28 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_client_status_t_wc_is_locked_get", _wrap_svn_client_status_t_wc_is_locked_get, METH_VARARGS, (char *)"svn_client_status_t_wc_is_locked_get(svn_client_status_t self) -> svn_boolean_t"},
{ (char *)"svn_client_status_t_copied_set", _wrap_svn_client_status_t_copied_set, METH_VARARGS, (char *)"svn_client_status_t_copied_set(svn_client_status_t self, svn_boolean_t copied)"},
{ (char *)"svn_client_status_t_copied_get", _wrap_svn_client_status_t_copied_get, METH_VARARGS, (char *)"svn_client_status_t_copied_get(svn_client_status_t self) -> svn_boolean_t"},
- { (char *)"svn_client_status_t_repos_root_url_set", _wrap_svn_client_status_t_repos_root_url_set, METH_VARARGS, (char *)"svn_client_status_t_repos_root_url_set(svn_client_status_t self, char repos_root_url)"},
- { (char *)"svn_client_status_t_repos_root_url_get", _wrap_svn_client_status_t_repos_root_url_get, METH_VARARGS, (char *)"svn_client_status_t_repos_root_url_get(svn_client_status_t self) -> char"},
- { (char *)"svn_client_status_t_repos_uuid_set", _wrap_svn_client_status_t_repos_uuid_set, METH_VARARGS, (char *)"svn_client_status_t_repos_uuid_set(svn_client_status_t self, char repos_uuid)"},
- { (char *)"svn_client_status_t_repos_uuid_get", _wrap_svn_client_status_t_repos_uuid_get, METH_VARARGS, (char *)"svn_client_status_t_repos_uuid_get(svn_client_status_t self) -> char"},
- { (char *)"svn_client_status_t_repos_relpath_set", _wrap_svn_client_status_t_repos_relpath_set, METH_VARARGS, (char *)"svn_client_status_t_repos_relpath_set(svn_client_status_t self, char repos_relpath)"},
- { (char *)"svn_client_status_t_repos_relpath_get", _wrap_svn_client_status_t_repos_relpath_get, METH_VARARGS, (char *)"svn_client_status_t_repos_relpath_get(svn_client_status_t self) -> char"},
+ { (char *)"svn_client_status_t_repos_root_url_set", _wrap_svn_client_status_t_repos_root_url_set, METH_VARARGS, (char *)"svn_client_status_t_repos_root_url_set(svn_client_status_t self, char const * repos_root_url)"},
+ { (char *)"svn_client_status_t_repos_root_url_get", _wrap_svn_client_status_t_repos_root_url_get, METH_VARARGS, (char *)"svn_client_status_t_repos_root_url_get(svn_client_status_t self) -> char const *"},
+ { (char *)"svn_client_status_t_repos_uuid_set", _wrap_svn_client_status_t_repos_uuid_set, METH_VARARGS, (char *)"svn_client_status_t_repos_uuid_set(svn_client_status_t self, char const * repos_uuid)"},
+ { (char *)"svn_client_status_t_repos_uuid_get", _wrap_svn_client_status_t_repos_uuid_get, METH_VARARGS, (char *)"svn_client_status_t_repos_uuid_get(svn_client_status_t self) -> char const *"},
+ { (char *)"svn_client_status_t_repos_relpath_set", _wrap_svn_client_status_t_repos_relpath_set, METH_VARARGS, (char *)"svn_client_status_t_repos_relpath_set(svn_client_status_t self, char const * repos_relpath)"},
+ { (char *)"svn_client_status_t_repos_relpath_get", _wrap_svn_client_status_t_repos_relpath_get, METH_VARARGS, (char *)"svn_client_status_t_repos_relpath_get(svn_client_status_t self) -> char const *"},
{ (char *)"svn_client_status_t_revision_set", _wrap_svn_client_status_t_revision_set, METH_VARARGS, (char *)"svn_client_status_t_revision_set(svn_client_status_t self, svn_revnum_t revision)"},
{ (char *)"svn_client_status_t_revision_get", _wrap_svn_client_status_t_revision_get, METH_VARARGS, (char *)"svn_client_status_t_revision_get(svn_client_status_t self) -> svn_revnum_t"},
{ (char *)"svn_client_status_t_changed_rev_set", _wrap_svn_client_status_t_changed_rev_set, METH_VARARGS, (char *)"svn_client_status_t_changed_rev_set(svn_client_status_t self, svn_revnum_t changed_rev)"},
{ (char *)"svn_client_status_t_changed_rev_get", _wrap_svn_client_status_t_changed_rev_get, METH_VARARGS, (char *)"svn_client_status_t_changed_rev_get(svn_client_status_t self) -> svn_revnum_t"},
{ (char *)"svn_client_status_t_changed_date_set", _wrap_svn_client_status_t_changed_date_set, METH_VARARGS, (char *)"svn_client_status_t_changed_date_set(svn_client_status_t self, apr_time_t changed_date)"},
{ (char *)"svn_client_status_t_changed_date_get", _wrap_svn_client_status_t_changed_date_get, METH_VARARGS, (char *)"svn_client_status_t_changed_date_get(svn_client_status_t self) -> apr_time_t"},
- { (char *)"svn_client_status_t_changed_author_set", _wrap_svn_client_status_t_changed_author_set, METH_VARARGS, (char *)"svn_client_status_t_changed_author_set(svn_client_status_t self, char changed_author)"},
- { (char *)"svn_client_status_t_changed_author_get", _wrap_svn_client_status_t_changed_author_get, METH_VARARGS, (char *)"svn_client_status_t_changed_author_get(svn_client_status_t self) -> char"},
+ { (char *)"svn_client_status_t_changed_author_set", _wrap_svn_client_status_t_changed_author_set, METH_VARARGS, (char *)"svn_client_status_t_changed_author_set(svn_client_status_t self, char const * changed_author)"},
+ { (char *)"svn_client_status_t_changed_author_get", _wrap_svn_client_status_t_changed_author_get, METH_VARARGS, (char *)"svn_client_status_t_changed_author_get(svn_client_status_t self) -> char const *"},
{ (char *)"svn_client_status_t_switched_set", _wrap_svn_client_status_t_switched_set, METH_VARARGS, (char *)"svn_client_status_t_switched_set(svn_client_status_t self, svn_boolean_t switched)"},
{ (char *)"svn_client_status_t_switched_get", _wrap_svn_client_status_t_switched_get, METH_VARARGS, (char *)"svn_client_status_t_switched_get(svn_client_status_t self) -> svn_boolean_t"},
{ (char *)"svn_client_status_t_file_external_set", _wrap_svn_client_status_t_file_external_set, METH_VARARGS, (char *)"svn_client_status_t_file_external_set(svn_client_status_t self, svn_boolean_t file_external)"},
{ (char *)"svn_client_status_t_file_external_get", _wrap_svn_client_status_t_file_external_get, METH_VARARGS, (char *)"svn_client_status_t_file_external_get(svn_client_status_t self) -> svn_boolean_t"},
{ (char *)"svn_client_status_t_lock_set", _wrap_svn_client_status_t_lock_set, METH_VARARGS, (char *)"svn_client_status_t_lock_set(svn_client_status_t self, svn_lock_t lock)"},
{ (char *)"svn_client_status_t_lock_get", _wrap_svn_client_status_t_lock_get, METH_VARARGS, (char *)"svn_client_status_t_lock_get(svn_client_status_t self) -> svn_lock_t"},
- { (char *)"svn_client_status_t_changelist_set", _wrap_svn_client_status_t_changelist_set, METH_VARARGS, (char *)"svn_client_status_t_changelist_set(svn_client_status_t self, char changelist)"},
- { (char *)"svn_client_status_t_changelist_get", _wrap_svn_client_status_t_changelist_get, METH_VARARGS, (char *)"svn_client_status_t_changelist_get(svn_client_status_t self) -> char"},
+ { (char *)"svn_client_status_t_changelist_set", _wrap_svn_client_status_t_changelist_set, METH_VARARGS, (char *)"svn_client_status_t_changelist_set(svn_client_status_t self, char const * changelist)"},
+ { (char *)"svn_client_status_t_changelist_get", _wrap_svn_client_status_t_changelist_get, METH_VARARGS, (char *)"svn_client_status_t_changelist_get(svn_client_status_t self) -> char const *"},
{ (char *)"svn_client_status_t_depth_set", _wrap_svn_client_status_t_depth_set, METH_VARARGS, (char *)"svn_client_status_t_depth_set(svn_client_status_t self, svn_depth_t depth)"},
{ (char *)"svn_client_status_t_depth_get", _wrap_svn_client_status_t_depth_get, METH_VARARGS, (char *)"svn_client_status_t_depth_get(svn_client_status_t self) -> svn_depth_t"},
{ (char *)"svn_client_status_t_ood_kind_set", _wrap_svn_client_status_t_ood_kind_set, METH_VARARGS, (char *)"svn_client_status_t_ood_kind_set(svn_client_status_t self, svn_node_kind_t ood_kind)"},
@@ -29057,404 +31635,358 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_client_status_t_ood_changed_rev_get", _wrap_svn_client_status_t_ood_changed_rev_get, METH_VARARGS, (char *)"svn_client_status_t_ood_changed_rev_get(svn_client_status_t self) -> svn_revnum_t"},
{ (char *)"svn_client_status_t_ood_changed_date_set", _wrap_svn_client_status_t_ood_changed_date_set, METH_VARARGS, (char *)"svn_client_status_t_ood_changed_date_set(svn_client_status_t self, apr_time_t ood_changed_date)"},
{ (char *)"svn_client_status_t_ood_changed_date_get", _wrap_svn_client_status_t_ood_changed_date_get, METH_VARARGS, (char *)"svn_client_status_t_ood_changed_date_get(svn_client_status_t self) -> apr_time_t"},
- { (char *)"svn_client_status_t_ood_changed_author_set", _wrap_svn_client_status_t_ood_changed_author_set, METH_VARARGS, (char *)"svn_client_status_t_ood_changed_author_set(svn_client_status_t self, char ood_changed_author)"},
- { (char *)"svn_client_status_t_ood_changed_author_get", _wrap_svn_client_status_t_ood_changed_author_get, METH_VARARGS, (char *)"svn_client_status_t_ood_changed_author_get(svn_client_status_t self) -> char"},
- { (char *)"svn_client_status_t_backwards_compatibility_baton_set", _wrap_svn_client_status_t_backwards_compatibility_baton_set, METH_VARARGS, (char *)"svn_client_status_t_backwards_compatibility_baton_set(svn_client_status_t self, void backwards_compatibility_baton)"},
- { (char *)"svn_client_status_t_backwards_compatibility_baton_get", _wrap_svn_client_status_t_backwards_compatibility_baton_get, METH_VARARGS, (char *)"svn_client_status_t_backwards_compatibility_baton_get(svn_client_status_t self) -> void"},
+ { (char *)"svn_client_status_t_ood_changed_author_set", _wrap_svn_client_status_t_ood_changed_author_set, METH_VARARGS, (char *)"svn_client_status_t_ood_changed_author_set(svn_client_status_t self, char const * ood_changed_author)"},
+ { (char *)"svn_client_status_t_ood_changed_author_get", _wrap_svn_client_status_t_ood_changed_author_get, METH_VARARGS, (char *)"svn_client_status_t_ood_changed_author_get(svn_client_status_t self) -> char const *"},
+ { (char *)"svn_client_status_t_backwards_compatibility_baton_set", _wrap_svn_client_status_t_backwards_compatibility_baton_set, METH_VARARGS, (char *)"svn_client_status_t_backwards_compatibility_baton_set(svn_client_status_t self, void const * backwards_compatibility_baton)"},
+ { (char *)"svn_client_status_t_backwards_compatibility_baton_get", _wrap_svn_client_status_t_backwards_compatibility_baton_get, METH_VARARGS, (char *)"svn_client_status_t_backwards_compatibility_baton_get(svn_client_status_t self) -> void const *"},
+ { (char *)"svn_client_status_t_moved_from_abspath_set", _wrap_svn_client_status_t_moved_from_abspath_set, METH_VARARGS, (char *)"svn_client_status_t_moved_from_abspath_set(svn_client_status_t self, char const * moved_from_abspath)"},
+ { (char *)"svn_client_status_t_moved_from_abspath_get", _wrap_svn_client_status_t_moved_from_abspath_get, METH_VARARGS, (char *)"svn_client_status_t_moved_from_abspath_get(svn_client_status_t self) -> char const *"},
+ { (char *)"svn_client_status_t_moved_to_abspath_set", _wrap_svn_client_status_t_moved_to_abspath_set, METH_VARARGS, (char *)"svn_client_status_t_moved_to_abspath_set(svn_client_status_t self, char const * moved_to_abspath)"},
+ { (char *)"svn_client_status_t_moved_to_abspath_get", _wrap_svn_client_status_t_moved_to_abspath_get, METH_VARARGS, (char *)"svn_client_status_t_moved_to_abspath_get(svn_client_status_t self) -> char const *"},
{ (char *)"new_svn_client_status_t", _wrap_new_svn_client_status_t, METH_VARARGS, (char *)"new_svn_client_status_t() -> svn_client_status_t"},
{ (char *)"delete_svn_client_status_t", _wrap_delete_svn_client_status_t, METH_VARARGS, (char *)"delete_svn_client_status_t(svn_client_status_t self)"},
{ (char *)"svn_client_status_t_swigregister", svn_client_status_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_client_status_dup", _wrap_svn_client_status_dup, METH_VARARGS, (char *)"svn_client_status_dup(svn_client_status_t status, apr_pool_t result_pool) -> svn_client_status_t"},
{ (char *)"svn_client_status5", _wrap_svn_client_status5, METH_VARARGS, (char *)"\n"
- "svn_client_status5(svn_client_ctx_t ctx, char path, svn_opt_revision_t revision, \n"
- " svn_depth_t depth, svn_boolean_t get_all, \n"
- " svn_boolean_t update, svn_boolean_t no_ignore, \n"
- " svn_boolean_t ignore_externals, svn_boolean_t depth_as_sticky, \n"
- " apr_array_header_t changelists, \n"
- " svn_client_status_func_t status_func, \n"
- " void status_baton, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_client_status5(svn_client_ctx_t ctx, char const * path, svn_opt_revision_t revision, svn_depth_t depth, \n"
+ " svn_boolean_t get_all, svn_boolean_t update, svn_boolean_t no_ignore, \n"
+ " svn_boolean_t ignore_externals, svn_boolean_t depth_as_sticky, apr_array_header_t changelists, \n"
+ " svn_client_status_func_t status_func, void * status_baton, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_status4", _wrap_svn_client_status4, METH_VARARGS, (char *)"\n"
- "svn_client_status4(char path, svn_opt_revision_t revision, svn_wc_status_func3_t status_func, \n"
- " void status_baton, svn_depth_t depth, \n"
- " svn_boolean_t get_all, svn_boolean_t update, \n"
- " svn_boolean_t no_ignore, svn_boolean_t ignore_externals, \n"
- " apr_array_header_t changelists, \n"
+ "svn_client_status4(char const * path, svn_opt_revision_t revision, svn_wc_status_func3_t status_func, \n"
+ " void * status_baton, svn_depth_t depth, svn_boolean_t get_all, svn_boolean_t update, \n"
+ " svn_boolean_t no_ignore, svn_boolean_t ignore_externals, apr_array_header_t changelists, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_status3", _wrap_svn_client_status3, METH_VARARGS, (char *)"\n"
- "svn_client_status3(char path, svn_opt_revision_t revision, svn_wc_status_func2_t status_func, \n"
- " svn_depth_t depth, svn_boolean_t get_all, \n"
- " svn_boolean_t update, svn_boolean_t no_ignore, \n"
- " svn_boolean_t ignore_externals, \n"
- " apr_array_header_t changelists, svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_status3(char const * path, svn_opt_revision_t revision, svn_wc_status_func2_t status_func, \n"
+ " svn_depth_t depth, svn_boolean_t get_all, svn_boolean_t update, svn_boolean_t no_ignore, \n"
+ " svn_boolean_t ignore_externals, apr_array_header_t changelists, \n"
+ " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_status2", _wrap_svn_client_status2, METH_VARARGS, (char *)"\n"
- "svn_client_status2(char path, svn_opt_revision_t revision, svn_wc_status_func2_t status_func, \n"
- " svn_boolean_t recurse, \n"
- " svn_boolean_t get_all, svn_boolean_t update, \n"
- " svn_boolean_t no_ignore, svn_boolean_t ignore_externals, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_status2(char const * path, svn_opt_revision_t revision, svn_wc_status_func2_t status_func, \n"
+ " svn_boolean_t recurse, svn_boolean_t get_all, svn_boolean_t update, svn_boolean_t no_ignore, \n"
+ " svn_boolean_t ignore_externals, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_status", _wrap_svn_client_status, METH_VARARGS, (char *)"\n"
- "svn_client_status(char path, svn_opt_revision_t revision, svn_wc_status_func_t status_func, \n"
- " svn_boolean_t recurse, \n"
- " svn_boolean_t get_all, svn_boolean_t update, \n"
- " svn_boolean_t no_ignore, svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_status(char const * path, svn_opt_revision_t revision, svn_wc_status_func_t status_func, \n"
+ " svn_boolean_t recurse, svn_boolean_t get_all, svn_boolean_t update, svn_boolean_t no_ignore, \n"
+ " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_log5", _wrap_svn_client_log5, METH_VARARGS, (char *)"\n"
- "svn_client_log5(apr_array_header_t targets, svn_opt_revision_t peg_revision, \n"
- " apr_array_header_t revision_ranges, \n"
- " int limit, svn_boolean_t discover_changed_paths, \n"
- " svn_boolean_t strict_node_history, svn_boolean_t include_merged_revisions, \n"
- " apr_array_header_t revprops, \n"
- " svn_log_entry_receiver_t receiver, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_log5(apr_array_header_t targets, svn_opt_revision_t peg_revision, apr_array_header_t revision_ranges, \n"
+ " int limit, svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history, \n"
+ " svn_boolean_t include_merged_revisions, apr_array_header_t revprops, \n"
+ " svn_log_entry_receiver_t receiver, svn_client_ctx_t ctx, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_log4", _wrap_svn_client_log4, METH_VARARGS, (char *)"\n"
- "svn_client_log4(apr_array_header_t targets, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t start, svn_opt_revision_t end, \n"
- " int limit, svn_boolean_t discover_changed_paths, \n"
- " svn_boolean_t strict_node_history, \n"
- " svn_boolean_t include_merged_revisions, \n"
- " apr_array_header_t revprops, svn_log_entry_receiver_t receiver, \n"
- " svn_client_ctx_t ctx, \n"
+ "svn_client_log4(apr_array_header_t targets, svn_opt_revision_t peg_revision, svn_opt_revision_t start, \n"
+ " svn_opt_revision_t end, int limit, svn_boolean_t discover_changed_paths, \n"
+ " svn_boolean_t strict_node_history, svn_boolean_t include_merged_revisions, \n"
+ " apr_array_header_t revprops, svn_log_entry_receiver_t receiver, svn_client_ctx_t ctx, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_log3", _wrap_svn_client_log3, METH_VARARGS, (char *)"\n"
- "svn_client_log3(apr_array_header_t targets, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t start, svn_opt_revision_t end, \n"
- " int limit, svn_boolean_t discover_changed_paths, \n"
- " svn_boolean_t strict_node_history, \n"
- " svn_log_message_receiver_t receiver, \n"
+ "svn_client_log3(apr_array_header_t targets, svn_opt_revision_t peg_revision, svn_opt_revision_t start, \n"
+ " svn_opt_revision_t end, int limit, svn_boolean_t discover_changed_paths, \n"
+ " svn_boolean_t strict_node_history, svn_log_message_receiver_t receiver, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_log2", _wrap_svn_client_log2, METH_VARARGS, (char *)"\n"
- "svn_client_log2(apr_array_header_t targets, svn_opt_revision_t start, \n"
- " svn_opt_revision_t end, int limit, svn_boolean_t discover_changed_paths, \n"
- " svn_boolean_t strict_node_history, \n"
- " svn_log_message_receiver_t receiver, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_log2(apr_array_header_t targets, svn_opt_revision_t start, svn_opt_revision_t end, int limit, \n"
+ " svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history, \n"
+ " svn_log_message_receiver_t receiver, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_log", _wrap_svn_client_log, METH_VARARGS, (char *)"\n"
- "svn_client_log(apr_array_header_t targets, svn_opt_revision_t start, \n"
- " svn_opt_revision_t end, svn_boolean_t discover_changed_paths, \n"
- " svn_boolean_t strict_node_history, \n"
- " svn_log_message_receiver_t receiver, \n"
+ "svn_client_log(apr_array_header_t targets, svn_opt_revision_t start, svn_opt_revision_t end, svn_boolean_t discover_changed_paths, \n"
+ " svn_boolean_t strict_node_history, svn_log_message_receiver_t receiver, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_blame5", _wrap_svn_client_blame5, METH_VARARGS, (char *)"\n"
- "svn_client_blame5(char path_or_url, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t start, svn_opt_revision_t end, \n"
- " svn_diff_file_options_t diff_options, svn_boolean_t ignore_mime_type, \n"
- " svn_boolean_t include_merged_revisions, \n"
- " svn_client_blame_receiver3_t receiver, \n"
- " void receiver_baton, svn_client_ctx_t ctx, \n"
+ "svn_client_blame5(char const * path_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t start, \n"
+ " svn_opt_revision_t end, svn_diff_file_options_t const * diff_options, svn_boolean_t ignore_mime_type, \n"
+ " svn_boolean_t include_merged_revisions, svn_client_blame_receiver3_t receiver, \n"
+ " void * receiver_baton, svn_client_ctx_t ctx, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_blame4", _wrap_svn_client_blame4, METH_VARARGS, (char *)"\n"
- "svn_client_blame4(char path_or_url, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t start, svn_opt_revision_t end, \n"
- " svn_diff_file_options_t diff_options, svn_boolean_t ignore_mime_type, \n"
- " svn_boolean_t include_merged_revisions, \n"
- " svn_client_blame_receiver2_t receiver, \n"
- " void receiver_baton, svn_client_ctx_t ctx, \n"
+ "svn_client_blame4(char const * path_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t start, \n"
+ " svn_opt_revision_t end, svn_diff_file_options_t const * diff_options, svn_boolean_t ignore_mime_type, \n"
+ " svn_boolean_t include_merged_revisions, svn_client_blame_receiver2_t receiver, \n"
+ " void * receiver_baton, svn_client_ctx_t ctx, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_blame3", _wrap_svn_client_blame3, METH_VARARGS, (char *)"\n"
- "svn_client_blame3(char path_or_url, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t start, svn_opt_revision_t end, \n"
- " svn_diff_file_options_t diff_options, svn_boolean_t ignore_mime_type, \n"
- " svn_client_blame_receiver_t receiver, \n"
- " svn_client_ctx_t ctx, \n"
+ "svn_client_blame3(char const * path_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t start, \n"
+ " svn_opt_revision_t end, svn_diff_file_options_t const * diff_options, svn_boolean_t ignore_mime_type, \n"
+ " svn_client_blame_receiver_t receiver, svn_client_ctx_t ctx, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_blame2", _wrap_svn_client_blame2, METH_VARARGS, (char *)"\n"
- "svn_client_blame2(char path_or_url, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t start, svn_opt_revision_t end, \n"
- " svn_client_blame_receiver_t receiver, svn_client_ctx_t ctx, \n"
+ "svn_client_blame2(char const * path_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t start, \n"
+ " svn_opt_revision_t end, svn_client_blame_receiver_t receiver, svn_client_ctx_t ctx, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_blame", _wrap_svn_client_blame, METH_VARARGS, (char *)"\n"
- "svn_client_blame(char path_or_url, svn_opt_revision_t start, svn_opt_revision_t end, \n"
- " svn_client_blame_receiver_t receiver, \n"
+ "svn_client_blame(char const * path_or_url, svn_opt_revision_t start, svn_opt_revision_t end, svn_client_blame_receiver_t receiver, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_client_diff5", _wrap_svn_client_diff5, METH_VARARGS, (char *)"\n"
- "svn_client_diff5(apr_array_header_t diff_options, char path1, svn_opt_revision_t revision1, \n"
- " char path2, svn_opt_revision_t revision2, \n"
- " char relative_to_dir, svn_depth_t depth, \n"
- " svn_boolean_t ignore_ancestry, \n"
+ { (char *)"svn_client_diff6", _wrap_svn_client_diff6, METH_VARARGS, (char *)"\n"
+ "svn_client_diff6(apr_array_header_t diff_options, char const * path_or_url1, svn_opt_revision_t revision1, \n"
+ " char const * path_or_url2, svn_opt_revision_t revision2, char const * relative_to_dir, \n"
+ " svn_depth_t depth, svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_added, \n"
" svn_boolean_t no_diff_deleted, svn_boolean_t show_copies_as_adds, \n"
- " svn_boolean_t ignore_content_type, \n"
- " svn_boolean_t use_git_diff_format, \n"
- " char header_encoding, apr_file_t outfile, \n"
- " apr_file_t errfile, apr_array_header_t changelists, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ " svn_boolean_t ignore_content_type, svn_boolean_t ignore_properties, \n"
+ " svn_boolean_t properties_only, svn_boolean_t use_git_diff_format, \n"
+ " char const * header_encoding, svn_stream_t * outstream, svn_stream_t * errstream, \n"
+ " apr_array_header_t changelists, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ ""},
+ { (char *)"svn_client_diff5", _wrap_svn_client_diff5, METH_VARARGS, (char *)"\n"
+ "svn_client_diff5(apr_array_header_t diff_options, char const * path1, svn_opt_revision_t revision1, \n"
+ " char const * path2, svn_opt_revision_t revision2, char const * relative_to_dir, \n"
+ " svn_depth_t depth, svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted, \n"
+ " svn_boolean_t show_copies_as_adds, svn_boolean_t ignore_content_type, \n"
+ " svn_boolean_t use_git_diff_format, char const * header_encoding, apr_file_t outfile, \n"
+ " apr_file_t errfile, apr_array_header_t changelists, svn_client_ctx_t ctx, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_diff4", _wrap_svn_client_diff4, METH_VARARGS, (char *)"\n"
- "svn_client_diff4(apr_array_header_t diff_options, char path1, svn_opt_revision_t revision1, \n"
- " char path2, svn_opt_revision_t revision2, \n"
- " char relative_to_dir, svn_depth_t depth, \n"
- " svn_boolean_t ignore_ancestry, \n"
- " svn_boolean_t no_diff_deleted, svn_boolean_t ignore_content_type, \n"
- " char header_encoding, \n"
+ "svn_client_diff4(apr_array_header_t diff_options, char const * path1, svn_opt_revision_t revision1, \n"
+ " char const * path2, svn_opt_revision_t revision2, char const * relative_to_dir, \n"
+ " svn_depth_t depth, svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted, \n"
+ " svn_boolean_t ignore_content_type, char const * header_encoding, \n"
" apr_file_t outfile, apr_file_t errfile, apr_array_header_t changelists, \n"
- " svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_diff3", _wrap_svn_client_diff3, METH_VARARGS, (char *)"\n"
- "svn_client_diff3(apr_array_header_t diff_options, char path1, svn_opt_revision_t revision1, \n"
- " char path2, svn_opt_revision_t revision2, \n"
- " svn_boolean_t recurse, svn_boolean_t ignore_ancestry, \n"
- " svn_boolean_t no_diff_deleted, \n"
- " svn_boolean_t ignore_content_type, \n"
- " char header_encoding, apr_file_t outfile, \n"
- " apr_file_t errfile, svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_diff3(apr_array_header_t diff_options, char const * path1, svn_opt_revision_t revision1, \n"
+ " char const * path2, svn_opt_revision_t revision2, svn_boolean_t recurse, \n"
+ " svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted, svn_boolean_t ignore_content_type, \n"
+ " char const * header_encoding, apr_file_t outfile, apr_file_t errfile, \n"
+ " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_diff2", _wrap_svn_client_diff2, METH_VARARGS, (char *)"\n"
- "svn_client_diff2(apr_array_header_t diff_options, char path1, svn_opt_revision_t revision1, \n"
- " char path2, svn_opt_revision_t revision2, \n"
- " svn_boolean_t recurse, svn_boolean_t ignore_ancestry, \n"
- " svn_boolean_t no_diff_deleted, \n"
- " svn_boolean_t ignore_content_type, \n"
- " apr_file_t outfile, apr_file_t errfile, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_diff2(apr_array_header_t diff_options, char const * path1, svn_opt_revision_t revision1, \n"
+ " char const * path2, svn_opt_revision_t revision2, svn_boolean_t recurse, \n"
+ " svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted, svn_boolean_t ignore_content_type, \n"
+ " apr_file_t outfile, apr_file_t errfile, svn_client_ctx_t ctx, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_diff", _wrap_svn_client_diff, METH_VARARGS, (char *)"\n"
- "svn_client_diff(apr_array_header_t diff_options, char path1, svn_opt_revision_t revision1, \n"
- " char path2, svn_opt_revision_t revision2, \n"
- " svn_boolean_t recurse, svn_boolean_t ignore_ancestry, \n"
- " svn_boolean_t no_diff_deleted, \n"
- " apr_file_t outfile, apr_file_t errfile, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_diff(apr_array_header_t diff_options, char const * path1, svn_opt_revision_t revision1, \n"
+ " char const * path2, svn_opt_revision_t revision2, svn_boolean_t recurse, \n"
+ " svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted, apr_file_t outfile, \n"
+ " apr_file_t errfile, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ ""},
+ { (char *)"svn_client_diff_peg6", _wrap_svn_client_diff_peg6, METH_VARARGS, (char *)"\n"
+ "svn_client_diff_peg6(apr_array_header_t diff_options, char const * path_or_url, svn_opt_revision_t peg_revision, \n"
+ " svn_opt_revision_t start_revision, svn_opt_revision_t end_revision, \n"
+ " char const * relative_to_dir, svn_depth_t depth, svn_boolean_t ignore_ancestry, \n"
+ " svn_boolean_t no_diff_added, svn_boolean_t no_diff_deleted, svn_boolean_t show_copies_as_adds, \n"
+ " svn_boolean_t ignore_content_type, svn_boolean_t ignore_properties, \n"
+ " svn_boolean_t properties_only, svn_boolean_t use_git_diff_format, \n"
+ " char const * header_encoding, svn_stream_t * outstream, svn_stream_t * errstream, \n"
+ " apr_array_header_t changelists, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_diff_peg5", _wrap_svn_client_diff_peg5, METH_VARARGS, (char *)"\n"
- "svn_client_diff_peg5(apr_array_header_t diff_options, char path, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t start_revision, \n"
- " svn_opt_revision_t end_revision, \n"
- " char relative_to_dir, svn_depth_t depth, \n"
- " svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted, \n"
- " svn_boolean_t show_copies_as_adds, \n"
- " svn_boolean_t ignore_content_type, svn_boolean_t use_git_diff_format, \n"
- " char header_encoding, \n"
- " apr_file_t outfile, apr_file_t errfile, \n"
- " apr_array_header_t changelists, svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_diff_peg5(apr_array_header_t diff_options, char const * path, svn_opt_revision_t peg_revision, \n"
+ " svn_opt_revision_t start_revision, svn_opt_revision_t end_revision, char const * relative_to_dir, \n"
+ " svn_depth_t depth, svn_boolean_t ignore_ancestry, \n"
+ " svn_boolean_t no_diff_deleted, svn_boolean_t show_copies_as_adds, svn_boolean_t ignore_content_type, \n"
+ " svn_boolean_t use_git_diff_format, char const * header_encoding, \n"
+ " apr_file_t outfile, apr_file_t errfile, apr_array_header_t changelists, \n"
+ " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_diff_peg4", _wrap_svn_client_diff_peg4, METH_VARARGS, (char *)"\n"
- "svn_client_diff_peg4(apr_array_header_t diff_options, char path, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t start_revision, \n"
- " svn_opt_revision_t end_revision, \n"
- " char relative_to_dir, svn_depth_t depth, \n"
- " svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted, \n"
- " svn_boolean_t ignore_content_type, \n"
- " char header_encoding, apr_file_t outfile, \n"
- " apr_file_t errfile, apr_array_header_t changelists, \n"
+ "svn_client_diff_peg4(apr_array_header_t diff_options, char const * path, svn_opt_revision_t peg_revision, \n"
+ " svn_opt_revision_t start_revision, svn_opt_revision_t end_revision, char const * relative_to_dir, \n"
+ " svn_depth_t depth, svn_boolean_t ignore_ancestry, \n"
+ " svn_boolean_t no_diff_deleted, svn_boolean_t ignore_content_type, char const * header_encoding, \n"
+ " apr_file_t outfile, apr_file_t errfile, apr_array_header_t changelists, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_diff_peg3", _wrap_svn_client_diff_peg3, METH_VARARGS, (char *)"\n"
- "svn_client_diff_peg3(apr_array_header_t diff_options, char path, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t start_revision, \n"
- " svn_opt_revision_t end_revision, \n"
- " svn_boolean_t recurse, svn_boolean_t ignore_ancestry, \n"
- " svn_boolean_t no_diff_deleted, svn_boolean_t ignore_content_type, \n"
- " char header_encoding, \n"
- " apr_file_t outfile, apr_file_t errfile, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_diff_peg3(apr_array_header_t diff_options, char const * path, svn_opt_revision_t peg_revision, \n"
+ " svn_opt_revision_t start_revision, svn_opt_revision_t end_revision, svn_boolean_t recurse, \n"
+ " svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted, \n"
+ " svn_boolean_t ignore_content_type, char const * header_encoding, apr_file_t outfile, \n"
+ " apr_file_t errfile, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_diff_peg2", _wrap_svn_client_diff_peg2, METH_VARARGS, (char *)"\n"
- "svn_client_diff_peg2(apr_array_header_t diff_options, char path, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t start_revision, \n"
- " svn_opt_revision_t end_revision, \n"
- " svn_boolean_t recurse, svn_boolean_t ignore_ancestry, \n"
- " svn_boolean_t no_diff_deleted, svn_boolean_t ignore_content_type, \n"
- " apr_file_t outfile, \n"
- " apr_file_t errfile, svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_diff_peg2(apr_array_header_t diff_options, char const * path, svn_opt_revision_t peg_revision, \n"
+ " svn_opt_revision_t start_revision, svn_opt_revision_t end_revision, svn_boolean_t recurse, \n"
+ " svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted, \n"
+ " svn_boolean_t ignore_content_type, apr_file_t outfile, apr_file_t errfile, \n"
+ " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_diff_peg", _wrap_svn_client_diff_peg, METH_VARARGS, (char *)"\n"
- "svn_client_diff_peg(apr_array_header_t diff_options, char path, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t start_revision, \n"
- " svn_opt_revision_t end_revision, \n"
- " svn_boolean_t recurse, svn_boolean_t ignore_ancestry, \n"
- " svn_boolean_t no_diff_deleted, apr_file_t outfile, \n"
- " apr_file_t errfile, svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_diff_peg(apr_array_header_t diff_options, char const * path, svn_opt_revision_t peg_revision, \n"
+ " svn_opt_revision_t start_revision, svn_opt_revision_t end_revision, svn_boolean_t recurse, \n"
+ " svn_boolean_t ignore_ancestry, svn_boolean_t no_diff_deleted, \n"
+ " apr_file_t outfile, apr_file_t errfile, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_diff_summarize2", _wrap_svn_client_diff_summarize2, METH_VARARGS, (char *)"\n"
- "svn_client_diff_summarize2(char path1, svn_opt_revision_t revision1, char path2, \n"
- " svn_opt_revision_t revision2, svn_depth_t depth, \n"
- " svn_boolean_t ignore_ancestry, apr_array_header_t changelists, \n"
- " svn_client_diff_summarize_func_t summarize_func, \n"
- " void summarize_baton, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_diff_summarize2(char const * path_or_url1, svn_opt_revision_t revision1, char const * path_or_url2, \n"
+ " svn_opt_revision_t revision2, svn_depth_t depth, svn_boolean_t ignore_ancestry, \n"
+ " apr_array_header_t changelists, svn_client_diff_summarize_func_t summarize_func, \n"
+ " void * summarize_baton, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_diff_summarize", _wrap_svn_client_diff_summarize, METH_VARARGS, (char *)"\n"
- "svn_client_diff_summarize(char path1, svn_opt_revision_t revision1, char path2, \n"
- " svn_opt_revision_t revision2, svn_boolean_t recurse, \n"
- " svn_boolean_t ignore_ancestry, svn_client_diff_summarize_func_t summarize_func, \n"
- " void summarize_baton, \n"
- " svn_client_ctx_t ctx, \n"
+ "svn_client_diff_summarize(char const * path1, svn_opt_revision_t revision1, char const * path2, svn_opt_revision_t revision2, \n"
+ " svn_boolean_t recurse, svn_boolean_t ignore_ancestry, svn_client_diff_summarize_func_t summarize_func, \n"
+ " void * summarize_baton, svn_client_ctx_t ctx, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_diff_summarize_peg2", _wrap_svn_client_diff_summarize_peg2, METH_VARARGS, (char *)"\n"
- "svn_client_diff_summarize_peg2(char path, svn_opt_revision_t peg_revision, svn_opt_revision_t start_revision, \n"
- " svn_opt_revision_t end_revision, \n"
- " svn_depth_t depth, svn_boolean_t ignore_ancestry, \n"
- " apr_array_header_t changelists, \n"
- " svn_client_diff_summarize_func_t summarize_func, \n"
- " void summarize_baton, svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_diff_summarize_peg2(char const * path_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t start_revision, \n"
+ " svn_opt_revision_t end_revision, svn_depth_t depth, svn_boolean_t ignore_ancestry, \n"
+ " apr_array_header_t changelists, svn_client_diff_summarize_func_t summarize_func, \n"
+ " void * summarize_baton, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_diff_summarize_peg", _wrap_svn_client_diff_summarize_peg, METH_VARARGS, (char *)"\n"
- "svn_client_diff_summarize_peg(char path, svn_opt_revision_t peg_revision, svn_opt_revision_t start_revision, \n"
- " svn_opt_revision_t end_revision, \n"
- " svn_boolean_t recurse, svn_boolean_t ignore_ancestry, \n"
- " svn_client_diff_summarize_func_t summarize_func, \n"
- " void summarize_baton, \n"
+ "svn_client_diff_summarize_peg(char const * path, svn_opt_revision_t peg_revision, svn_opt_revision_t start_revision, \n"
+ " svn_opt_revision_t end_revision, svn_boolean_t recurse, svn_boolean_t ignore_ancestry, \n"
+ " svn_client_diff_summarize_func_t summarize_func, void * summarize_baton, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_client_get_merging_summary", _wrap_svn_client_get_merging_summary, METH_VARARGS, (char *)"\n"
+ "svn_client_get_merging_summary(char const * source_path_or_url, svn_opt_revision_t source_revision, char const * target_path_or_url, \n"
+ " svn_opt_revision_t target_revision, svn_client_ctx_t ctx, \n"
+ " apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t\n"
+ ""},
+ { (char *)"svn_client_merge5", _wrap_svn_client_merge5, METH_VARARGS, (char *)"\n"
+ "svn_client_merge5(char const * source1, svn_opt_revision_t revision1, char const * source2, svn_opt_revision_t revision2, \n"
+ " char const * target_wcpath, svn_depth_t depth, svn_boolean_t ignore_mergeinfo, \n"
+ " svn_boolean_t diff_ignore_ancestry, svn_boolean_t force_delete, \n"
+ " svn_boolean_t record_only, svn_boolean_t dry_run, svn_boolean_t allow_mixed_rev, \n"
+ " apr_array_header_t merge_options, svn_client_ctx_t ctx, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
+ ""},
{ (char *)"svn_client_merge4", _wrap_svn_client_merge4, METH_VARARGS, (char *)"\n"
- "svn_client_merge4(char source1, svn_opt_revision_t revision1, char source2, \n"
- " svn_opt_revision_t revision2, char target_wcpath, \n"
- " svn_depth_t depth, svn_boolean_t ignore_ancestry, \n"
- " svn_boolean_t force, svn_boolean_t record_only, \n"
- " svn_boolean_t dry_run, svn_boolean_t allow_mixed_rev, \n"
- " apr_array_header_t merge_options, \n"
+ "svn_client_merge4(char const * source1, svn_opt_revision_t revision1, char const * source2, svn_opt_revision_t revision2, \n"
+ " char const * target_wcpath, svn_depth_t depth, svn_boolean_t ignore_ancestry, \n"
+ " svn_boolean_t force_delete, svn_boolean_t record_only, \n"
+ " svn_boolean_t dry_run, svn_boolean_t allow_mixed_rev, apr_array_header_t merge_options, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_merge3", _wrap_svn_client_merge3, METH_VARARGS, (char *)"\n"
- "svn_client_merge3(char source1, svn_opt_revision_t revision1, char source2, \n"
- " svn_opt_revision_t revision2, char target_wcpath, \n"
- " svn_depth_t depth, svn_boolean_t ignore_ancestry, \n"
- " svn_boolean_t force, svn_boolean_t record_only, \n"
- " svn_boolean_t dry_run, apr_array_header_t merge_options, \n"
- " svn_client_ctx_t ctx, \n"
+ "svn_client_merge3(char const * source1, svn_opt_revision_t revision1, char const * source2, svn_opt_revision_t revision2, \n"
+ " char const * target_wcpath, svn_depth_t depth, svn_boolean_t ignore_ancestry, \n"
+ " svn_boolean_t force, svn_boolean_t record_only, svn_boolean_t dry_run, \n"
+ " apr_array_header_t merge_options, svn_client_ctx_t ctx, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_merge2", _wrap_svn_client_merge2, METH_VARARGS, (char *)"\n"
- "svn_client_merge2(char source1, svn_opt_revision_t revision1, char source2, \n"
- " svn_opt_revision_t revision2, char target_wcpath, \n"
- " svn_boolean_t recurse, svn_boolean_t ignore_ancestry, \n"
- " svn_boolean_t force, svn_boolean_t dry_run, \n"
- " apr_array_header_t merge_options, \n"
+ "svn_client_merge2(char const * source1, svn_opt_revision_t revision1, char const * source2, svn_opt_revision_t revision2, \n"
+ " char const * target_wcpath, svn_boolean_t recurse, svn_boolean_t ignore_ancestry, \n"
+ " svn_boolean_t force, svn_boolean_t dry_run, apr_array_header_t merge_options, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_merge", _wrap_svn_client_merge, METH_VARARGS, (char *)"\n"
- "svn_client_merge(char source1, svn_opt_revision_t revision1, char source2, \n"
- " svn_opt_revision_t revision2, char target_wcpath, \n"
- " svn_boolean_t recurse, svn_boolean_t ignore_ancestry, \n"
- " svn_boolean_t force, svn_boolean_t dry_run, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_merge(char const * source1, svn_opt_revision_t revision1, char const * source2, svn_opt_revision_t revision2, \n"
+ " char const * target_wcpath, svn_boolean_t recurse, svn_boolean_t ignore_ancestry, \n"
+ " svn_boolean_t force, svn_boolean_t dry_run, svn_client_ctx_t ctx, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_merge_reintegrate", _wrap_svn_client_merge_reintegrate, METH_VARARGS, (char *)"\n"
- "svn_client_merge_reintegrate(char source, svn_opt_revision_t peg_revision, char target_wcpath, \n"
+ "svn_client_merge_reintegrate(char const * source_path_or_url, svn_opt_revision_t source_peg_revision, char const * target_wcpath, \n"
" svn_boolean_t dry_run, apr_array_header_t merge_options, \n"
- " svn_client_ctx_t ctx, \n"
+ " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ ""},
+ { (char *)"svn_client_merge_peg5", _wrap_svn_client_merge_peg5, METH_VARARGS, (char *)"\n"
+ "svn_client_merge_peg5(char const * source_path_or_url, apr_array_header_t ranges_to_merge, svn_opt_revision_t source_peg_revision, \n"
+ " char const * target_wcpath, svn_depth_t depth, \n"
+ " svn_boolean_t ignore_mergeinfo, svn_boolean_t diff_ignore_ancestry, svn_boolean_t force_delete, \n"
+ " svn_boolean_t record_only, svn_boolean_t dry_run, svn_boolean_t allow_mixed_rev, \n"
+ " apr_array_header_t merge_options, svn_client_ctx_t ctx, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_merge_peg4", _wrap_svn_client_merge_peg4, METH_VARARGS, (char *)"\n"
- "svn_client_merge_peg4(char source, apr_array_header_t ranges_to_merge, svn_opt_revision_t peg_revision, \n"
- " char target_wcpath, \n"
- " svn_depth_t depth, svn_boolean_t ignore_ancestry, \n"
- " svn_boolean_t force, svn_boolean_t record_only, \n"
- " svn_boolean_t dry_run, svn_boolean_t allow_mixed_rev, \n"
- " apr_array_header_t merge_options, \n"
+ "svn_client_merge_peg4(char const * source_path_or_url, apr_array_header_t ranges_to_merge, svn_opt_revision_t source_peg_revision, \n"
+ " char const * target_wcpath, svn_depth_t depth, \n"
+ " svn_boolean_t ignore_ancestry, svn_boolean_t force_delete, svn_boolean_t record_only, \n"
+ " svn_boolean_t dry_run, svn_boolean_t allow_mixed_rev, apr_array_header_t merge_options, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_merge_peg3", _wrap_svn_client_merge_peg3, METH_VARARGS, (char *)"\n"
- "svn_client_merge_peg3(char source, apr_array_header_t ranges_to_merge, svn_opt_revision_t peg_revision, \n"
- " char target_wcpath, \n"
- " svn_depth_t depth, svn_boolean_t ignore_ancestry, \n"
- " svn_boolean_t force, svn_boolean_t record_only, \n"
- " svn_boolean_t dry_run, apr_array_header_t merge_options, \n"
- " svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_merge_peg3(char const * source, apr_array_header_t ranges_to_merge, svn_opt_revision_t peg_revision, \n"
+ " char const * target_wcpath, svn_depth_t depth, svn_boolean_t ignore_ancestry, \n"
+ " svn_boolean_t force, svn_boolean_t record_only, svn_boolean_t dry_run, \n"
+ " apr_array_header_t merge_options, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_merge_peg2", _wrap_svn_client_merge_peg2, METH_VARARGS, (char *)"\n"
- "svn_client_merge_peg2(char source, svn_opt_revision_t revision1, svn_opt_revision_t revision2, \n"
- " svn_opt_revision_t peg_revision, \n"
- " char target_wcpath, svn_boolean_t recurse, \n"
- " svn_boolean_t ignore_ancestry, svn_boolean_t force, \n"
- " svn_boolean_t dry_run, apr_array_header_t merge_options, \n"
- " svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_merge_peg2(char const * source, svn_opt_revision_t revision1, svn_opt_revision_t revision2, \n"
+ " svn_opt_revision_t peg_revision, char const * target_wcpath, svn_boolean_t recurse, \n"
+ " svn_boolean_t ignore_ancestry, svn_boolean_t force, svn_boolean_t dry_run, \n"
+ " apr_array_header_t merge_options, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_merge_peg", _wrap_svn_client_merge_peg, METH_VARARGS, (char *)"\n"
- "svn_client_merge_peg(char source, svn_opt_revision_t revision1, svn_opt_revision_t revision2, \n"
- " svn_opt_revision_t peg_revision, \n"
- " char target_wcpath, svn_boolean_t recurse, \n"
- " svn_boolean_t ignore_ancestry, svn_boolean_t force, \n"
- " svn_boolean_t dry_run, svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_merge_peg(char const * source, svn_opt_revision_t revision1, svn_opt_revision_t revision2, \n"
+ " svn_opt_revision_t peg_revision, char const * target_wcpath, svn_boolean_t recurse, \n"
+ " svn_boolean_t ignore_ancestry, svn_boolean_t force, svn_boolean_t dry_run, \n"
+ " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_suggest_merge_sources", _wrap_svn_client_suggest_merge_sources, METH_VARARGS, (char *)"\n"
- "svn_client_suggest_merge_sources(char path_or_url, svn_opt_revision_t peg_revision, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_suggest_merge_sources(char const * path_or_url, svn_opt_revision_t peg_revision, svn_client_ctx_t ctx, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_mergeinfo_get_merged", _wrap_svn_client_mergeinfo_get_merged, METH_VARARGS, (char *)"\n"
- "svn_client_mergeinfo_get_merged(char path_or_url, svn_opt_revision_t peg_revision, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_mergeinfo_get_merged(char const * path_or_url, svn_opt_revision_t peg_revision, svn_client_ctx_t ctx, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
+ ""},
+ { (char *)"svn_client_mergeinfo_log2", _wrap_svn_client_mergeinfo_log2, METH_VARARGS, (char *)"\n"
+ "svn_client_mergeinfo_log2(svn_boolean_t finding_merged, char const * target_path_or_url, svn_opt_revision_t target_peg_revision, \n"
+ " char const * source_path_or_url, svn_opt_revision_t source_peg_revision, \n"
+ " svn_opt_revision_t source_start_revision, svn_opt_revision_t source_end_revision, \n"
+ " svn_log_entry_receiver_t receiver, svn_boolean_t discover_changed_paths, \n"
+ " svn_depth_t depth, apr_array_header_t revprops, svn_client_ctx_t ctx, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_mergeinfo_log", _wrap_svn_client_mergeinfo_log, METH_VARARGS, (char *)"\n"
- "svn_client_mergeinfo_log(svn_boolean_t finding_merged, char path_or_url, svn_opt_revision_t peg_revision, \n"
- " char merge_source_path_or_url, \n"
- " svn_opt_revision_t src_peg_revision, \n"
+ "svn_client_mergeinfo_log(svn_boolean_t finding_merged, char const * target_path_or_url, svn_opt_revision_t target_peg_revision, \n"
+ " char const * source_path_or_url, svn_opt_revision_t source_peg_revision, \n"
" svn_log_entry_receiver_t receiver, svn_boolean_t discover_changed_paths, \n"
- " svn_depth_t depth, \n"
- " apr_array_header_t revprops, svn_client_ctx_t ctx, \n"
+ " svn_depth_t depth, apr_array_header_t revprops, svn_client_ctx_t ctx, \n"
" apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_mergeinfo_log_merged", _wrap_svn_client_mergeinfo_log_merged, METH_VARARGS, (char *)"\n"
- "svn_client_mergeinfo_log_merged(char path_or_url, svn_opt_revision_t peg_revision, \n"
- " char merge_source_path_or_url, svn_opt_revision_t src_peg_revision, \n"
- " svn_log_entry_receiver_t receiver, \n"
- " svn_boolean_t discover_changed_paths, \n"
- " apr_array_header_t revprops, svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_mergeinfo_log_merged(char const * path_or_url, svn_opt_revision_t peg_revision, char const * merge_source_path_or_url, \n"
+ " svn_opt_revision_t src_peg_revision, svn_log_entry_receiver_t receiver, \n"
+ " svn_boolean_t discover_changed_paths, apr_array_header_t revprops, \n"
+ " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_mergeinfo_log_eligible", _wrap_svn_client_mergeinfo_log_eligible, METH_VARARGS, (char *)"\n"
- "svn_client_mergeinfo_log_eligible(char path_or_url, svn_opt_revision_t peg_revision, \n"
- " char merge_source_path_or_url, svn_opt_revision_t src_peg_revision, \n"
- " svn_log_entry_receiver_t receiver, \n"
- " svn_boolean_t discover_changed_paths, \n"
- " apr_array_header_t revprops, svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_mergeinfo_log_eligible(char const * path_or_url, svn_opt_revision_t peg_revision, char const * merge_source_path_or_url, \n"
+ " svn_opt_revision_t src_peg_revision, svn_log_entry_receiver_t receiver, \n"
+ " svn_boolean_t discover_changed_paths, apr_array_header_t revprops, \n"
+ " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_client_cleanup", _wrap_svn_client_cleanup, METH_VARARGS, (char *)"svn_client_cleanup(char dir, svn_client_ctx_t ctx, apr_pool_t scratch_pool) -> svn_error_t"},
- { (char *)"svn_client_upgrade", _wrap_svn_client_upgrade, METH_VARARGS, (char *)"svn_client_upgrade(char wcroot_dir, svn_client_ctx_t ctx, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_client_cleanup", _wrap_svn_client_cleanup, METH_VARARGS, (char *)"svn_client_cleanup(char const * dir, svn_client_ctx_t ctx, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_client_upgrade", _wrap_svn_client_upgrade, METH_VARARGS, (char *)"svn_client_upgrade(char const * wcroot_dir, svn_client_ctx_t ctx, apr_pool_t scratch_pool) -> svn_error_t"},
{ (char *)"svn_client_relocate2", _wrap_svn_client_relocate2, METH_VARARGS, (char *)"\n"
- "svn_client_relocate2(char wcroot_dir, char from_prefix, char to_prefix, \n"
- " svn_boolean_t ignore_externals, svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_relocate2(char const * wcroot_dir, char const * from_prefix, char const * to_prefix, svn_boolean_t ignore_externals, \n"
+ " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_relocate", _wrap_svn_client_relocate, METH_VARARGS, (char *)"\n"
- "svn_client_relocate(char dir, char from_prefix, char to_prefix, svn_boolean_t recurse, \n"
+ "svn_client_relocate(char const * dir, char const * from_prefix, char const * to_prefix, svn_boolean_t recurse, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_revert2", _wrap_svn_client_revert2, METH_VARARGS, (char *)"\n"
- "svn_client_revert2(apr_array_header_t paths, svn_depth_t depth, apr_array_header_t changelists, \n"
- " svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_client_revert", _wrap_svn_client_revert, METH_VARARGS, (char *)"\n"
- "svn_client_revert(apr_array_header_t paths, svn_boolean_t recursive, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_client_resolved", _wrap_svn_client_resolved, METH_VARARGS, (char *)"\n"
- "svn_client_resolved(char path, svn_boolean_t recursive, svn_client_ctx_t ctx, \n"
+ "svn_client_revert2(apr_array_header_t paths, svn_depth_t depth, apr_array_header_t changelists, svn_client_ctx_t ctx, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_client_revert", _wrap_svn_client_revert, METH_VARARGS, (char *)"svn_client_revert(apr_array_header_t paths, svn_boolean_t recursive, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_client_resolved", _wrap_svn_client_resolved, METH_VARARGS, (char *)"svn_client_resolved(char const * path, svn_boolean_t recursive, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_client_resolve", _wrap_svn_client_resolve, METH_VARARGS, (char *)"\n"
- "svn_client_resolve(char path, svn_depth_t depth, svn_wc_conflict_choice_t conflict_choice, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_resolve(char const * path, svn_depth_t depth, svn_wc_conflict_choice_t conflict_choice, svn_client_ctx_t ctx, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_client_copy_source_t_path_set", _wrap_svn_client_copy_source_t_path_set, METH_VARARGS, (char *)"svn_client_copy_source_t_path_set(svn_client_copy_source_t self, char path)"},
- { (char *)"svn_client_copy_source_t_path_get", _wrap_svn_client_copy_source_t_path_get, METH_VARARGS, (char *)"svn_client_copy_source_t_path_get(svn_client_copy_source_t self) -> char"},
+ { (char *)"svn_client_copy_source_t_path_set", _wrap_svn_client_copy_source_t_path_set, METH_VARARGS, (char *)"svn_client_copy_source_t_path_set(svn_client_copy_source_t self, char const * path)"},
+ { (char *)"svn_client_copy_source_t_path_get", _wrap_svn_client_copy_source_t_path_get, METH_VARARGS, (char *)"svn_client_copy_source_t_path_get(svn_client_copy_source_t self) -> char const *"},
{ (char *)"svn_client_copy_source_t_revision_set", _wrap_svn_client_copy_source_t_revision_set, METH_VARARGS, (char *)"svn_client_copy_source_t_revision_set(svn_client_copy_source_t self, svn_opt_revision_t revision)"},
{ (char *)"svn_client_copy_source_t_revision_get", _wrap_svn_client_copy_source_t_revision_get, METH_VARARGS, (char *)"svn_client_copy_source_t_revision_get(svn_client_copy_source_t self) -> svn_opt_revision_t"},
{ (char *)"svn_client_copy_source_t_peg_revision_set", _wrap_svn_client_copy_source_t_peg_revision_set, METH_VARARGS, (char *)"svn_client_copy_source_t_peg_revision_set(svn_client_copy_source_t self, svn_opt_revision_t peg_revision)"},
@@ -29463,288 +31995,267 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"delete_svn_client_copy_source_t", _wrap_delete_svn_client_copy_source_t, METH_VARARGS, (char *)"delete_svn_client_copy_source_t(svn_client_copy_source_t self)"},
{ (char *)"svn_client_copy_source_t_swigregister", svn_client_copy_source_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_client_copy6", _wrap_svn_client_copy6, METH_VARARGS, (char *)"\n"
- "svn_client_copy6(apr_array_header_t sources, char dst_path, svn_boolean_t copy_as_child, \n"
- " svn_boolean_t make_parents, \n"
+ "svn_client_copy6(apr_array_header_t sources, char const * dst_path, svn_boolean_t copy_as_child, svn_boolean_t make_parents, \n"
" svn_boolean_t ignore_externals, apr_hash_t revprop_table, \n"
- " svn_commit_callback2_t commit_callback, \n"
- " void commit_baton, svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ " svn_commit_callback2_t commit_callback, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_copy5", _wrap_svn_client_copy5, METH_VARARGS, (char *)"\n"
- "svn_client_copy5(apr_array_header_t sources, char dst_path, svn_boolean_t copy_as_child, \n"
- " svn_boolean_t make_parents, \n"
+ "svn_client_copy5(apr_array_header_t sources, char const * dst_path, svn_boolean_t copy_as_child, svn_boolean_t make_parents, \n"
" svn_boolean_t ignore_externals, apr_hash_t revprop_table, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_copy4", _wrap_svn_client_copy4, METH_VARARGS, (char *)"\n"
- "svn_client_copy4(apr_array_header_t sources, char dst_path, svn_boolean_t copy_as_child, \n"
- " svn_boolean_t make_parents, \n"
+ "svn_client_copy4(apr_array_header_t sources, char const * dst_path, svn_boolean_t copy_as_child, svn_boolean_t make_parents, \n"
" apr_hash_t revprop_table, svn_client_ctx_t ctx, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_copy3", _wrap_svn_client_copy3, METH_VARARGS, (char *)"\n"
- "svn_client_copy3(char src_path, svn_opt_revision_t src_revision, char dst_path, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_copy3(char const * src_path, svn_opt_revision_t src_revision, char const * dst_path, svn_client_ctx_t ctx, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_copy2", _wrap_svn_client_copy2, METH_VARARGS, (char *)"\n"
- "svn_client_copy2(char src_path, svn_opt_revision_t src_revision, char dst_path, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_copy2(char const * src_path, svn_opt_revision_t src_revision, char const * dst_path, svn_client_ctx_t ctx, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_copy", _wrap_svn_client_copy, METH_VARARGS, (char *)"\n"
- "svn_client_copy(char src_path, svn_opt_revision_t src_revision, char dst_path, \n"
+ "svn_client_copy(char const * src_path, svn_opt_revision_t src_revision, char const * dst_path, svn_client_ctx_t ctx, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
+ ""},
+ { (char *)"svn_client_move7", _wrap_svn_client_move7, METH_VARARGS, (char *)"\n"
+ "svn_client_move7(apr_array_header_t src_paths, char const * dst_path, svn_boolean_t move_as_child, \n"
+ " svn_boolean_t make_parents, svn_boolean_t allow_mixed_revisions, svn_boolean_t metadata_only, \n"
+ " apr_hash_t revprop_table, svn_commit_callback2_t commit_callback, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_move6", _wrap_svn_client_move6, METH_VARARGS, (char *)"\n"
- "svn_client_move6(apr_array_header_t src_paths, char dst_path, svn_boolean_t move_as_child, \n"
- " svn_boolean_t make_parents, \n"
- " apr_hash_t revprop_table, svn_commit_callback2_t commit_callback, \n"
- " void commit_baton, \n"
+ "svn_client_move6(apr_array_header_t src_paths, char const * dst_path, svn_boolean_t move_as_child, \n"
+ " svn_boolean_t make_parents, apr_hash_t revprop_table, svn_commit_callback2_t commit_callback, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_move5", _wrap_svn_client_move5, METH_VARARGS, (char *)"\n"
- "svn_client_move5(apr_array_header_t src_paths, char dst_path, svn_boolean_t force, \n"
- " svn_boolean_t move_as_child, svn_boolean_t make_parents, \n"
- " apr_hash_t revprop_table, \n"
+ "svn_client_move5(apr_array_header_t src_paths, char const * dst_path, svn_boolean_t force, svn_boolean_t move_as_child, \n"
+ " svn_boolean_t make_parents, apr_hash_t revprop_table, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_move4", _wrap_svn_client_move4, METH_VARARGS, (char *)"\n"
- "svn_client_move4(char src_path, char dst_path, svn_boolean_t force, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_move4(char const * src_path, char const * dst_path, svn_boolean_t force, svn_client_ctx_t ctx, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_move3", _wrap_svn_client_move3, METH_VARARGS, (char *)"\n"
- "svn_client_move3(char src_path, char dst_path, svn_boolean_t force, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_move3(char const * src_path, char const * dst_path, svn_boolean_t force, svn_client_ctx_t ctx, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_move2", _wrap_svn_client_move2, METH_VARARGS, (char *)"\n"
- "svn_client_move2(char src_path, char dst_path, svn_boolean_t force, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_move2(char const * src_path, char const * dst_path, svn_boolean_t force, svn_client_ctx_t ctx, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_move", _wrap_svn_client_move, METH_VARARGS, (char *)"\n"
- "svn_client_move(char src_path, svn_opt_revision_t src_revision, char dst_path, \n"
- " svn_boolean_t force, svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_move(char const * src_path, svn_opt_revision_t src_revision, char const * dst_path, svn_boolean_t force, \n"
+ " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_propset_remote", _wrap_svn_client_propset_remote, METH_VARARGS, (char *)"\n"
- "svn_client_propset_remote(char propname, svn_string_t propval, char url, svn_boolean_t skip_checks, \n"
- " svn_revnum_t base_revision_for_url, \n"
- " apr_hash_t revprop_table, svn_commit_callback2_t commit_callback, \n"
- " void commit_baton, \n"
- " svn_client_ctx_t ctx, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_client_propset_remote(char const * propname, svn_string_t const * propval, char const * url, svn_boolean_t skip_checks, \n"
+ " svn_revnum_t base_revision_for_url, apr_hash_t revprop_table, \n"
+ " svn_commit_callback2_t commit_callback, svn_client_ctx_t ctx, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_propset_local", _wrap_svn_client_propset_local, METH_VARARGS, (char *)"\n"
- "svn_client_propset_local(char propname, svn_string_t propval, apr_array_header_t targets, \n"
- " svn_depth_t depth, svn_boolean_t skip_checks, \n"
- " apr_array_header_t changelists, \n"
+ "svn_client_propset_local(char const * propname, svn_string_t const * propval, apr_array_header_t targets, \n"
+ " svn_depth_t depth, svn_boolean_t skip_checks, apr_array_header_t changelists, \n"
" svn_client_ctx_t ctx, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_propset3", _wrap_svn_client_propset3, METH_VARARGS, (char *)"\n"
- "svn_client_propset3(char propname, svn_string_t propval, char target, svn_depth_t depth, \n"
- " svn_boolean_t skip_checks, \n"
- " svn_revnum_t base_revision_for_url, apr_array_header_t changelists, \n"
- " apr_hash_t revprop_table, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_propset3(char const * propname, svn_string_t const * propval, char const * target, svn_depth_t depth, \n"
+ " svn_boolean_t skip_checks, svn_revnum_t base_revision_for_url, \n"
+ " apr_array_header_t changelists, apr_hash_t revprop_table, svn_client_ctx_t ctx, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_propset2", _wrap_svn_client_propset2, METH_VARARGS, (char *)"\n"
- "svn_client_propset2(char propname, svn_string_t propval, char target, svn_boolean_t recurse, \n"
- " svn_boolean_t skip_checks, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_propset2(char const * propname, svn_string_t const * propval, char const * target, svn_boolean_t recurse, \n"
+ " svn_boolean_t skip_checks, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_propset", _wrap_svn_client_propset, METH_VARARGS, (char *)"\n"
- "svn_client_propset(char propname, svn_string_t propval, char target, svn_boolean_t recurse, \n"
+ "svn_client_propset(char const * propname, svn_string_t const * propval, char const * target, svn_boolean_t recurse, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_revprop_set2", _wrap_svn_client_revprop_set2, METH_VARARGS, (char *)"\n"
- "svn_client_revprop_set2(char propname, svn_string_t propval, svn_string_t original_propval, \n"
- " char URL, svn_opt_revision_t revision, \n"
- " svn_boolean_t force, svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_revprop_set2(char const * propname, svn_string_t const * propval, svn_string_t const * original_propval, \n"
+ " char const * URL, svn_opt_revision_t revision, svn_boolean_t force, \n"
+ " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_revprop_set", _wrap_svn_client_revprop_set, METH_VARARGS, (char *)"\n"
- "svn_client_revprop_set(char propname, svn_string_t propval, char URL, svn_opt_revision_t revision, \n"
- " svn_boolean_t force, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_revprop_set(char const * propname, svn_string_t const * propval, char const * URL, svn_opt_revision_t revision, \n"
+ " svn_boolean_t force, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ ""},
+ { (char *)"svn_client_propget5", _wrap_svn_client_propget5, METH_VARARGS, (char *)"\n"
+ "svn_client_propget5(char const * propname, char const * target, svn_opt_revision_t peg_revision, svn_opt_revision_t revision, \n"
+ " svn_depth_t depth, apr_array_header_t changelists, \n"
+ " svn_client_ctx_t ctx, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_propget4", _wrap_svn_client_propget4, METH_VARARGS, (char *)"\n"
- "svn_client_propget4(char propname, char target, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t revision, svn_depth_t depth, \n"
- " apr_array_header_t changelists, \n"
- " svn_client_ctx_t ctx, apr_pool_t result_pool, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_client_propget4(char const * propname, char const * target, svn_opt_revision_t peg_revision, svn_opt_revision_t revision, \n"
+ " svn_depth_t depth, apr_array_header_t changelists, \n"
+ " svn_client_ctx_t ctx, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_propget3", _wrap_svn_client_propget3, METH_VARARGS, (char *)"\n"
- "svn_client_propget3(char propname, char target, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t revision, svn_depth_t depth, \n"
- " apr_array_header_t changelists, \n"
+ "svn_client_propget3(char const * propname, char const * target, svn_opt_revision_t peg_revision, svn_opt_revision_t revision, \n"
+ " svn_depth_t depth, apr_array_header_t changelists, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_propget2", _wrap_svn_client_propget2, METH_VARARGS, (char *)"\n"
- "svn_client_propget2(char propname, char target, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t revision, svn_boolean_t recurse, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_propget2(char const * propname, char const * target, svn_opt_revision_t peg_revision, svn_opt_revision_t revision, \n"
+ " svn_boolean_t recurse, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_propget", _wrap_svn_client_propget, METH_VARARGS, (char *)"\n"
- "svn_client_propget(char propname, char target, svn_opt_revision_t revision, \n"
- " svn_boolean_t recurse, svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_propget(char const * propname, char const * target, svn_opt_revision_t revision, svn_boolean_t recurse, \n"
+ " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_revprop_get", _wrap_svn_client_revprop_get, METH_VARARGS, (char *)"\n"
- "svn_client_revprop_get(char propname, char URL, svn_opt_revision_t revision, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_revprop_get(char const * propname, char const * URL, svn_opt_revision_t revision, svn_client_ctx_t ctx, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
+ ""},
+ { (char *)"svn_client_proplist4", _wrap_svn_client_proplist4, METH_VARARGS, (char *)"\n"
+ "svn_client_proplist4(char const * target, svn_opt_revision_t peg_revision, svn_opt_revision_t revision, \n"
+ " svn_depth_t depth, apr_array_header_t changelists, svn_boolean_t get_target_inherited_props, \n"
+ " svn_proplist_receiver2_t receiver, svn_client_ctx_t ctx, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_proplist3", _wrap_svn_client_proplist3, METH_VARARGS, (char *)"\n"
- "svn_client_proplist3(char target, svn_opt_revision_t peg_revision, svn_opt_revision_t revision, \n"
- " svn_depth_t depth, apr_array_header_t changelists, \n"
- " svn_proplist_receiver_t receiver, \n"
- " void receiver_baton, svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_proplist3(char const * target, svn_opt_revision_t peg_revision, svn_opt_revision_t revision, \n"
+ " svn_depth_t depth, apr_array_header_t changelists, svn_proplist_receiver_t receiver, \n"
+ " void * receiver_baton, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_proplist2", _wrap_svn_client_proplist2, METH_VARARGS, (char *)"\n"
- "svn_client_proplist2(char target, svn_opt_revision_t peg_revision, svn_opt_revision_t revision, \n"
- " svn_boolean_t recurse, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_proplist2(char const * target, svn_opt_revision_t peg_revision, svn_opt_revision_t revision, \n"
+ " svn_boolean_t recurse, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_proplist", _wrap_svn_client_proplist, METH_VARARGS, (char *)"\n"
- "svn_client_proplist(char target, svn_opt_revision_t revision, svn_boolean_t recurse, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_client_revprop_list", _wrap_svn_client_revprop_list, METH_VARARGS, (char *)"\n"
- "svn_client_revprop_list(char URL, svn_opt_revision_t revision, svn_client_ctx_t ctx, \n"
+ "svn_client_proplist(char const * target, svn_opt_revision_t revision, svn_boolean_t recurse, svn_client_ctx_t ctx, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_client_revprop_list", _wrap_svn_client_revprop_list, METH_VARARGS, (char *)"svn_client_revprop_list(char const * URL, svn_opt_revision_t revision, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_client_export5", _wrap_svn_client_export5, METH_VARARGS, (char *)"\n"
- "svn_client_export5(char from_path_or_url, char to_path, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t revision, \n"
- " svn_boolean_t overwrite, svn_boolean_t ignore_externals, \n"
- " svn_boolean_t ignore_keywords, \n"
- " svn_depth_t depth, char native_eol, svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_export5(char const * from_path_or_url, char const * to_path, svn_opt_revision_t peg_revision, \n"
+ " svn_opt_revision_t revision, svn_boolean_t overwrite, svn_boolean_t ignore_externals, \n"
+ " svn_boolean_t ignore_keywords, svn_depth_t depth, char const * native_eol, \n"
+ " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_export4", _wrap_svn_client_export4, METH_VARARGS, (char *)"\n"
- "svn_client_export4(char from_path_or_url, char to_path, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t revision, \n"
- " svn_boolean_t overwrite, svn_boolean_t ignore_externals, \n"
- " svn_depth_t depth, char native_eol, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_export4(char const * from_path_or_url, char const * to_path, svn_opt_revision_t peg_revision, \n"
+ " svn_opt_revision_t revision, svn_boolean_t overwrite, svn_boolean_t ignore_externals, \n"
+ " svn_depth_t depth, char const * native_eol, svn_client_ctx_t ctx, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_export3", _wrap_svn_client_export3, METH_VARARGS, (char *)"\n"
- "svn_client_export3(char from_path_or_url, char to_path, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t revision, \n"
- " svn_boolean_t overwrite, svn_boolean_t ignore_externals, \n"
- " svn_boolean_t recurse, char native_eol, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_export3(char const * from_path_or_url, char const * to_path, svn_opt_revision_t peg_revision, \n"
+ " svn_opt_revision_t revision, svn_boolean_t overwrite, svn_boolean_t ignore_externals, \n"
+ " svn_boolean_t recurse, char const * native_eol, svn_client_ctx_t ctx, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_export2", _wrap_svn_client_export2, METH_VARARGS, (char *)"\n"
- "svn_client_export2(char from_path_or_url, char to_path, svn_opt_revision_t revision, \n"
- " svn_boolean_t force, char native_eol, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_export2(char const * from_path_or_url, char const * to_path, svn_opt_revision_t revision, \n"
+ " svn_boolean_t force, char const * native_eol, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_export", _wrap_svn_client_export, METH_VARARGS, (char *)"\n"
- "svn_client_export(char from_path_or_url, char to_path, svn_opt_revision_t revision, \n"
- " svn_boolean_t force, svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_export(char const * from_path_or_url, char const * to_path, svn_opt_revision_t revision, \n"
+ " svn_boolean_t force, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ ""},
+ { (char *)"svn_client_list3", _wrap_svn_client_list3, METH_VARARGS, (char *)"\n"
+ "svn_client_list3(char const * path_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t revision, \n"
+ " svn_depth_t depth, apr_uint32_t dirent_fields, svn_boolean_t fetch_locks, \n"
+ " svn_boolean_t include_externals, svn_client_list_func2_t list_func, void * baton, \n"
+ " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_list2", _wrap_svn_client_list2, METH_VARARGS, (char *)"\n"
- "svn_client_list2(char path_or_url, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t revision, svn_depth_t depth, \n"
- " apr_uint32_t dirent_fields, svn_boolean_t fetch_locks, \n"
- " svn_client_list_func_t list_func, \n"
- " void baton, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_list2(char const * path_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t revision, \n"
+ " svn_depth_t depth, apr_uint32_t dirent_fields, svn_boolean_t fetch_locks, \n"
+ " svn_client_list_func_t list_func, void * baton, svn_client_ctx_t ctx, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_list", _wrap_svn_client_list, METH_VARARGS, (char *)"\n"
- "svn_client_list(char path_or_url, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t revision, svn_boolean_t recurse, \n"
- " apr_uint32_t dirent_fields, svn_boolean_t fetch_locks, \n"
- " svn_client_list_func_t list_func, \n"
- " void baton, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_list(char const * path_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t revision, \n"
+ " svn_boolean_t recurse, apr_uint32_t dirent_fields, svn_boolean_t fetch_locks, \n"
+ " svn_client_list_func_t list_func, void * baton, svn_client_ctx_t ctx, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_ls3", _wrap_svn_client_ls3, METH_VARARGS, (char *)"\n"
- "svn_client_ls3(char path_or_url, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t revision, svn_boolean_t recurse, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_ls3(char const * path_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t revision, \n"
+ " svn_boolean_t recurse, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_ls2", _wrap_svn_client_ls2, METH_VARARGS, (char *)"\n"
- "svn_client_ls2(char path_or_url, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t revision, svn_boolean_t recurse, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_ls2(char const * path_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t revision, \n"
+ " svn_boolean_t recurse, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_ls", _wrap_svn_client_ls, METH_VARARGS, (char *)"\n"
- "svn_client_ls(char path_or_url, svn_opt_revision_t revision, svn_boolean_t recurse, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_ls(char const * path_or_url, svn_opt_revision_t revision, svn_boolean_t recurse, svn_client_ctx_t ctx, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_cat2", _wrap_svn_client_cat2, METH_VARARGS, (char *)"\n"
- "svn_client_cat2(svn_stream_t out, char path_or_url, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t revision, \n"
+ "svn_client_cat2(svn_stream_t * out, char const * path_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t revision, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_cat", _wrap_svn_client_cat, METH_VARARGS, (char *)"\n"
- "svn_client_cat(svn_stream_t out, char path_or_url, svn_opt_revision_t revision, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_cat(svn_stream_t * out, char const * path_or_url, svn_opt_revision_t revision, svn_client_ctx_t ctx, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_add_to_changelist", _wrap_svn_client_add_to_changelist, METH_VARARGS, (char *)"\n"
- "svn_client_add_to_changelist(apr_array_header_t paths, char changelist, svn_depth_t depth, \n"
- " apr_array_header_t changelists, svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_add_to_changelist(apr_array_header_t paths, char const * changelist, svn_depth_t depth, apr_array_header_t changelists, \n"
+ " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_remove_from_changelists", _wrap_svn_client_remove_from_changelists, METH_VARARGS, (char *)"\n"
- "svn_client_remove_from_changelists(apr_array_header_t paths, svn_depth_t depth, apr_array_header_t changelists, \n"
- " svn_client_ctx_t ctx, \n"
+ "svn_client_remove_from_changelists(apr_array_header_t paths, svn_depth_t depth, apr_array_header_t changelists, svn_client_ctx_t ctx, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_get_changelists", _wrap_svn_client_get_changelists, METH_VARARGS, (char *)"\n"
- "svn_client_get_changelists(char path, apr_array_header_t changelists, svn_depth_t depth, \n"
- " svn_changelist_receiver_t callback_func, \n"
+ "svn_client_get_changelists(char const * path, apr_array_header_t changelists, svn_depth_t depth, svn_changelist_receiver_t callback_func, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_lock", _wrap_svn_client_lock, METH_VARARGS, (char *)"\n"
- "svn_client_lock(apr_array_header_t targets, char comment, svn_boolean_t steal_lock, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_client_unlock", _wrap_svn_client_unlock, METH_VARARGS, (char *)"\n"
- "svn_client_unlock(apr_array_header_t targets, svn_boolean_t break_lock, \n"
- " svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_lock(apr_array_header_t targets, char const * comment, svn_boolean_t steal_lock, svn_client_ctx_t ctx, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_info_t_URL_set", _wrap_svn_info_t_URL_set, METH_VARARGS, (char *)"svn_info_t_URL_set(svn_info_t self, char URL)"},
- { (char *)"svn_info_t_URL_get", _wrap_svn_info_t_URL_get, METH_VARARGS, (char *)"svn_info_t_URL_get(svn_info_t self) -> char"},
+ { (char *)"svn_client_unlock", _wrap_svn_client_unlock, METH_VARARGS, (char *)"svn_client_unlock(apr_array_header_t targets, svn_boolean_t break_lock, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_info_t_URL_set", _wrap_svn_info_t_URL_set, METH_VARARGS, (char *)"svn_info_t_URL_set(svn_info_t self, char const * URL)"},
+ { (char *)"svn_info_t_URL_get", _wrap_svn_info_t_URL_get, METH_VARARGS, (char *)"svn_info_t_URL_get(svn_info_t self) -> char const *"},
{ (char *)"svn_info_t_rev_set", _wrap_svn_info_t_rev_set, METH_VARARGS, (char *)"svn_info_t_rev_set(svn_info_t self, svn_revnum_t rev)"},
{ (char *)"svn_info_t_rev_get", _wrap_svn_info_t_rev_get, METH_VARARGS, (char *)"svn_info_t_rev_get(svn_info_t self) -> svn_revnum_t"},
{ (char *)"svn_info_t_kind_set", _wrap_svn_info_t_kind_set, METH_VARARGS, (char *)"svn_info_t_kind_set(svn_info_t self, svn_node_kind_t kind)"},
{ (char *)"svn_info_t_kind_get", _wrap_svn_info_t_kind_get, METH_VARARGS, (char *)"svn_info_t_kind_get(svn_info_t self) -> svn_node_kind_t"},
- { (char *)"svn_info_t_repos_root_URL_set", _wrap_svn_info_t_repos_root_URL_set, METH_VARARGS, (char *)"svn_info_t_repos_root_URL_set(svn_info_t self, char repos_root_URL)"},
- { (char *)"svn_info_t_repos_root_URL_get", _wrap_svn_info_t_repos_root_URL_get, METH_VARARGS, (char *)"svn_info_t_repos_root_URL_get(svn_info_t self) -> char"},
- { (char *)"svn_info_t_repos_UUID_set", _wrap_svn_info_t_repos_UUID_set, METH_VARARGS, (char *)"svn_info_t_repos_UUID_set(svn_info_t self, char repos_UUID)"},
- { (char *)"svn_info_t_repos_UUID_get", _wrap_svn_info_t_repos_UUID_get, METH_VARARGS, (char *)"svn_info_t_repos_UUID_get(svn_info_t self) -> char"},
+ { (char *)"svn_info_t_repos_root_URL_set", _wrap_svn_info_t_repos_root_URL_set, METH_VARARGS, (char *)"svn_info_t_repos_root_URL_set(svn_info_t self, char const * repos_root_URL)"},
+ { (char *)"svn_info_t_repos_root_URL_get", _wrap_svn_info_t_repos_root_URL_get, METH_VARARGS, (char *)"svn_info_t_repos_root_URL_get(svn_info_t self) -> char const *"},
+ { (char *)"svn_info_t_repos_UUID_set", _wrap_svn_info_t_repos_UUID_set, METH_VARARGS, (char *)"svn_info_t_repos_UUID_set(svn_info_t self, char const * repos_UUID)"},
+ { (char *)"svn_info_t_repos_UUID_get", _wrap_svn_info_t_repos_UUID_get, METH_VARARGS, (char *)"svn_info_t_repos_UUID_get(svn_info_t self) -> char const *"},
{ (char *)"svn_info_t_last_changed_rev_set", _wrap_svn_info_t_last_changed_rev_set, METH_VARARGS, (char *)"svn_info_t_last_changed_rev_set(svn_info_t self, svn_revnum_t last_changed_rev)"},
{ (char *)"svn_info_t_last_changed_rev_get", _wrap_svn_info_t_last_changed_rev_get, METH_VARARGS, (char *)"svn_info_t_last_changed_rev_get(svn_info_t self) -> svn_revnum_t"},
{ (char *)"svn_info_t_last_changed_date_set", _wrap_svn_info_t_last_changed_date_set, METH_VARARGS, (char *)"svn_info_t_last_changed_date_set(svn_info_t self, apr_time_t last_changed_date)"},
{ (char *)"svn_info_t_last_changed_date_get", _wrap_svn_info_t_last_changed_date_get, METH_VARARGS, (char *)"svn_info_t_last_changed_date_get(svn_info_t self) -> apr_time_t"},
- { (char *)"svn_info_t_last_changed_author_set", _wrap_svn_info_t_last_changed_author_set, METH_VARARGS, (char *)"svn_info_t_last_changed_author_set(svn_info_t self, char last_changed_author)"},
- { (char *)"svn_info_t_last_changed_author_get", _wrap_svn_info_t_last_changed_author_get, METH_VARARGS, (char *)"svn_info_t_last_changed_author_get(svn_info_t self) -> char"},
+ { (char *)"svn_info_t_last_changed_author_set", _wrap_svn_info_t_last_changed_author_set, METH_VARARGS, (char *)"svn_info_t_last_changed_author_set(svn_info_t self, char const * last_changed_author)"},
+ { (char *)"svn_info_t_last_changed_author_get", _wrap_svn_info_t_last_changed_author_get, METH_VARARGS, (char *)"svn_info_t_last_changed_author_get(svn_info_t self) -> char const *"},
{ (char *)"svn_info_t_lock_set", _wrap_svn_info_t_lock_set, METH_VARARGS, (char *)"svn_info_t_lock_set(svn_info_t self, svn_lock_t lock)"},
{ (char *)"svn_info_t_lock_get", _wrap_svn_info_t_lock_get, METH_VARARGS, (char *)"svn_info_t_lock_get(svn_info_t self) -> svn_lock_t"},
{ (char *)"svn_info_t_has_wc_info_set", _wrap_svn_info_t_has_wc_info_set, METH_VARARGS, (char *)"svn_info_t_has_wc_info_set(svn_info_t self, svn_boolean_t has_wc_info)"},
{ (char *)"svn_info_t_has_wc_info_get", _wrap_svn_info_t_has_wc_info_get, METH_VARARGS, (char *)"svn_info_t_has_wc_info_get(svn_info_t self) -> svn_boolean_t"},
{ (char *)"svn_info_t_schedule_set", _wrap_svn_info_t_schedule_set, METH_VARARGS, (char *)"svn_info_t_schedule_set(svn_info_t self, svn_wc_schedule_t schedule)"},
{ (char *)"svn_info_t_schedule_get", _wrap_svn_info_t_schedule_get, METH_VARARGS, (char *)"svn_info_t_schedule_get(svn_info_t self) -> svn_wc_schedule_t"},
- { (char *)"svn_info_t_copyfrom_url_set", _wrap_svn_info_t_copyfrom_url_set, METH_VARARGS, (char *)"svn_info_t_copyfrom_url_set(svn_info_t self, char copyfrom_url)"},
- { (char *)"svn_info_t_copyfrom_url_get", _wrap_svn_info_t_copyfrom_url_get, METH_VARARGS, (char *)"svn_info_t_copyfrom_url_get(svn_info_t self) -> char"},
+ { (char *)"svn_info_t_copyfrom_url_set", _wrap_svn_info_t_copyfrom_url_set, METH_VARARGS, (char *)"svn_info_t_copyfrom_url_set(svn_info_t self, char const * copyfrom_url)"},
+ { (char *)"svn_info_t_copyfrom_url_get", _wrap_svn_info_t_copyfrom_url_get, METH_VARARGS, (char *)"svn_info_t_copyfrom_url_get(svn_info_t self) -> char const *"},
{ (char *)"svn_info_t_copyfrom_rev_set", _wrap_svn_info_t_copyfrom_rev_set, METH_VARARGS, (char *)"svn_info_t_copyfrom_rev_set(svn_info_t self, svn_revnum_t copyfrom_rev)"},
{ (char *)"svn_info_t_copyfrom_rev_get", _wrap_svn_info_t_copyfrom_rev_get, METH_VARARGS, (char *)"svn_info_t_copyfrom_rev_get(svn_info_t self) -> svn_revnum_t"},
{ (char *)"svn_info_t_text_time_set", _wrap_svn_info_t_text_time_set, METH_VARARGS, (char *)"svn_info_t_text_time_set(svn_info_t self, apr_time_t text_time)"},
{ (char *)"svn_info_t_text_time_get", _wrap_svn_info_t_text_time_get, METH_VARARGS, (char *)"svn_info_t_text_time_get(svn_info_t self) -> apr_time_t"},
{ (char *)"svn_info_t_prop_time_set", _wrap_svn_info_t_prop_time_set, METH_VARARGS, (char *)"svn_info_t_prop_time_set(svn_info_t self, apr_time_t prop_time)"},
{ (char *)"svn_info_t_prop_time_get", _wrap_svn_info_t_prop_time_get, METH_VARARGS, (char *)"svn_info_t_prop_time_get(svn_info_t self) -> apr_time_t"},
- { (char *)"svn_info_t_checksum_set", _wrap_svn_info_t_checksum_set, METH_VARARGS, (char *)"svn_info_t_checksum_set(svn_info_t self, char checksum)"},
- { (char *)"svn_info_t_checksum_get", _wrap_svn_info_t_checksum_get, METH_VARARGS, (char *)"svn_info_t_checksum_get(svn_info_t self) -> char"},
- { (char *)"svn_info_t_conflict_old_set", _wrap_svn_info_t_conflict_old_set, METH_VARARGS, (char *)"svn_info_t_conflict_old_set(svn_info_t self, char conflict_old)"},
- { (char *)"svn_info_t_conflict_old_get", _wrap_svn_info_t_conflict_old_get, METH_VARARGS, (char *)"svn_info_t_conflict_old_get(svn_info_t self) -> char"},
- { (char *)"svn_info_t_conflict_new_set", _wrap_svn_info_t_conflict_new_set, METH_VARARGS, (char *)"svn_info_t_conflict_new_set(svn_info_t self, char conflict_new)"},
- { (char *)"svn_info_t_conflict_new_get", _wrap_svn_info_t_conflict_new_get, METH_VARARGS, (char *)"svn_info_t_conflict_new_get(svn_info_t self) -> char"},
- { (char *)"svn_info_t_conflict_wrk_set", _wrap_svn_info_t_conflict_wrk_set, METH_VARARGS, (char *)"svn_info_t_conflict_wrk_set(svn_info_t self, char conflict_wrk)"},
- { (char *)"svn_info_t_conflict_wrk_get", _wrap_svn_info_t_conflict_wrk_get, METH_VARARGS, (char *)"svn_info_t_conflict_wrk_get(svn_info_t self) -> char"},
- { (char *)"svn_info_t_prejfile_set", _wrap_svn_info_t_prejfile_set, METH_VARARGS, (char *)"svn_info_t_prejfile_set(svn_info_t self, char prejfile)"},
- { (char *)"svn_info_t_prejfile_get", _wrap_svn_info_t_prejfile_get, METH_VARARGS, (char *)"svn_info_t_prejfile_get(svn_info_t self) -> char"},
- { (char *)"svn_info_t_changelist_set", _wrap_svn_info_t_changelist_set, METH_VARARGS, (char *)"svn_info_t_changelist_set(svn_info_t self, char changelist)"},
- { (char *)"svn_info_t_changelist_get", _wrap_svn_info_t_changelist_get, METH_VARARGS, (char *)"svn_info_t_changelist_get(svn_info_t self) -> char"},
+ { (char *)"svn_info_t_checksum_set", _wrap_svn_info_t_checksum_set, METH_VARARGS, (char *)"svn_info_t_checksum_set(svn_info_t self, char const * checksum)"},
+ { (char *)"svn_info_t_checksum_get", _wrap_svn_info_t_checksum_get, METH_VARARGS, (char *)"svn_info_t_checksum_get(svn_info_t self) -> char const *"},
+ { (char *)"svn_info_t_conflict_old_set", _wrap_svn_info_t_conflict_old_set, METH_VARARGS, (char *)"svn_info_t_conflict_old_set(svn_info_t self, char const * conflict_old)"},
+ { (char *)"svn_info_t_conflict_old_get", _wrap_svn_info_t_conflict_old_get, METH_VARARGS, (char *)"svn_info_t_conflict_old_get(svn_info_t self) -> char const *"},
+ { (char *)"svn_info_t_conflict_new_set", _wrap_svn_info_t_conflict_new_set, METH_VARARGS, (char *)"svn_info_t_conflict_new_set(svn_info_t self, char const * conflict_new)"},
+ { (char *)"svn_info_t_conflict_new_get", _wrap_svn_info_t_conflict_new_get, METH_VARARGS, (char *)"svn_info_t_conflict_new_get(svn_info_t self) -> char const *"},
+ { (char *)"svn_info_t_conflict_wrk_set", _wrap_svn_info_t_conflict_wrk_set, METH_VARARGS, (char *)"svn_info_t_conflict_wrk_set(svn_info_t self, char const * conflict_wrk)"},
+ { (char *)"svn_info_t_conflict_wrk_get", _wrap_svn_info_t_conflict_wrk_get, METH_VARARGS, (char *)"svn_info_t_conflict_wrk_get(svn_info_t self) -> char const *"},
+ { (char *)"svn_info_t_prejfile_set", _wrap_svn_info_t_prejfile_set, METH_VARARGS, (char *)"svn_info_t_prejfile_set(svn_info_t self, char const * prejfile)"},
+ { (char *)"svn_info_t_prejfile_get", _wrap_svn_info_t_prejfile_get, METH_VARARGS, (char *)"svn_info_t_prejfile_get(svn_info_t self) -> char const *"},
+ { (char *)"svn_info_t_changelist_set", _wrap_svn_info_t_changelist_set, METH_VARARGS, (char *)"svn_info_t_changelist_set(svn_info_t self, char const * changelist)"},
+ { (char *)"svn_info_t_changelist_get", _wrap_svn_info_t_changelist_get, METH_VARARGS, (char *)"svn_info_t_changelist_get(svn_info_t self) -> char const *"},
{ (char *)"svn_info_t_depth_set", _wrap_svn_info_t_depth_set, METH_VARARGS, (char *)"svn_info_t_depth_set(svn_info_t self, svn_depth_t depth)"},
{ (char *)"svn_info_t_depth_get", _wrap_svn_info_t_depth_get, METH_VARARGS, (char *)"svn_info_t_depth_get(svn_info_t self) -> svn_depth_t"},
{ (char *)"svn_info_t_working_size_set", _wrap_svn_info_t_working_size_set, METH_VARARGS, (char *)"svn_info_t_working_size_set(svn_info_t self, apr_size_t working_size)"},
@@ -29761,14 +32272,14 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"delete_svn_info_t", _wrap_delete_svn_info_t, METH_VARARGS, (char *)"delete_svn_info_t(svn_info_t self)"},
{ (char *)"svn_info_t_swigregister", svn_info_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_info_dup", _wrap_svn_info_dup, METH_VARARGS, (char *)"svn_info_dup(svn_info_t info, apr_pool_t pool) -> svn_info_t"},
- { (char *)"svn_client_info2_t_URL_set", _wrap_svn_client_info2_t_URL_set, METH_VARARGS, (char *)"svn_client_info2_t_URL_set(svn_client_info2_t self, char URL)"},
- { (char *)"svn_client_info2_t_URL_get", _wrap_svn_client_info2_t_URL_get, METH_VARARGS, (char *)"svn_client_info2_t_URL_get(svn_client_info2_t self) -> char"},
+ { (char *)"svn_client_info2_t_URL_set", _wrap_svn_client_info2_t_URL_set, METH_VARARGS, (char *)"svn_client_info2_t_URL_set(svn_client_info2_t self, char const * URL)"},
+ { (char *)"svn_client_info2_t_URL_get", _wrap_svn_client_info2_t_URL_get, METH_VARARGS, (char *)"svn_client_info2_t_URL_get(svn_client_info2_t self) -> char const *"},
{ (char *)"svn_client_info2_t_rev_set", _wrap_svn_client_info2_t_rev_set, METH_VARARGS, (char *)"svn_client_info2_t_rev_set(svn_client_info2_t self, svn_revnum_t rev)"},
{ (char *)"svn_client_info2_t_rev_get", _wrap_svn_client_info2_t_rev_get, METH_VARARGS, (char *)"svn_client_info2_t_rev_get(svn_client_info2_t self) -> svn_revnum_t"},
- { (char *)"svn_client_info2_t_repos_root_URL_set", _wrap_svn_client_info2_t_repos_root_URL_set, METH_VARARGS, (char *)"svn_client_info2_t_repos_root_URL_set(svn_client_info2_t self, char repos_root_URL)"},
- { (char *)"svn_client_info2_t_repos_root_URL_get", _wrap_svn_client_info2_t_repos_root_URL_get, METH_VARARGS, (char *)"svn_client_info2_t_repos_root_URL_get(svn_client_info2_t self) -> char"},
- { (char *)"svn_client_info2_t_repos_UUID_set", _wrap_svn_client_info2_t_repos_UUID_set, METH_VARARGS, (char *)"svn_client_info2_t_repos_UUID_set(svn_client_info2_t self, char repos_UUID)"},
- { (char *)"svn_client_info2_t_repos_UUID_get", _wrap_svn_client_info2_t_repos_UUID_get, METH_VARARGS, (char *)"svn_client_info2_t_repos_UUID_get(svn_client_info2_t self) -> char"},
+ { (char *)"svn_client_info2_t_repos_root_URL_set", _wrap_svn_client_info2_t_repos_root_URL_set, METH_VARARGS, (char *)"svn_client_info2_t_repos_root_URL_set(svn_client_info2_t self, char const * repos_root_URL)"},
+ { (char *)"svn_client_info2_t_repos_root_URL_get", _wrap_svn_client_info2_t_repos_root_URL_get, METH_VARARGS, (char *)"svn_client_info2_t_repos_root_URL_get(svn_client_info2_t self) -> char const *"},
+ { (char *)"svn_client_info2_t_repos_UUID_set", _wrap_svn_client_info2_t_repos_UUID_set, METH_VARARGS, (char *)"svn_client_info2_t_repos_UUID_set(svn_client_info2_t self, char const * repos_UUID)"},
+ { (char *)"svn_client_info2_t_repos_UUID_get", _wrap_svn_client_info2_t_repos_UUID_get, METH_VARARGS, (char *)"svn_client_info2_t_repos_UUID_get(svn_client_info2_t self) -> char const *"},
{ (char *)"svn_client_info2_t_kind_set", _wrap_svn_client_info2_t_kind_set, METH_VARARGS, (char *)"svn_client_info2_t_kind_set(svn_client_info2_t self, svn_node_kind_t kind)"},
{ (char *)"svn_client_info2_t_kind_get", _wrap_svn_client_info2_t_kind_get, METH_VARARGS, (char *)"svn_client_info2_t_kind_get(svn_client_info2_t self) -> svn_node_kind_t"},
{ (char *)"svn_client_info2_t_size_set", _wrap_svn_client_info2_t_size_set, METH_VARARGS, (char *)"svn_client_info2_t_size_set(svn_client_info2_t self, svn_filesize_t size)"},
@@ -29777,8 +32288,8 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_client_info2_t_last_changed_rev_get", _wrap_svn_client_info2_t_last_changed_rev_get, METH_VARARGS, (char *)"svn_client_info2_t_last_changed_rev_get(svn_client_info2_t self) -> svn_revnum_t"},
{ (char *)"svn_client_info2_t_last_changed_date_set", _wrap_svn_client_info2_t_last_changed_date_set, METH_VARARGS, (char *)"svn_client_info2_t_last_changed_date_set(svn_client_info2_t self, apr_time_t last_changed_date)"},
{ (char *)"svn_client_info2_t_last_changed_date_get", _wrap_svn_client_info2_t_last_changed_date_get, METH_VARARGS, (char *)"svn_client_info2_t_last_changed_date_get(svn_client_info2_t self) -> apr_time_t"},
- { (char *)"svn_client_info2_t_last_changed_author_set", _wrap_svn_client_info2_t_last_changed_author_set, METH_VARARGS, (char *)"svn_client_info2_t_last_changed_author_set(svn_client_info2_t self, char last_changed_author)"},
- { (char *)"svn_client_info2_t_last_changed_author_get", _wrap_svn_client_info2_t_last_changed_author_get, METH_VARARGS, (char *)"svn_client_info2_t_last_changed_author_get(svn_client_info2_t self) -> char"},
+ { (char *)"svn_client_info2_t_last_changed_author_set", _wrap_svn_client_info2_t_last_changed_author_set, METH_VARARGS, (char *)"svn_client_info2_t_last_changed_author_set(svn_client_info2_t self, char const * last_changed_author)"},
+ { (char *)"svn_client_info2_t_last_changed_author_get", _wrap_svn_client_info2_t_last_changed_author_get, METH_VARARGS, (char *)"svn_client_info2_t_last_changed_author_get(svn_client_info2_t self) -> char const *"},
{ (char *)"svn_client_info2_t_lock_set", _wrap_svn_client_info2_t_lock_set, METH_VARARGS, (char *)"svn_client_info2_t_lock_set(svn_client_info2_t self, svn_lock_t lock)"},
{ (char *)"svn_client_info2_t_lock_get", _wrap_svn_client_info2_t_lock_get, METH_VARARGS, (char *)"svn_client_info2_t_lock_get(svn_client_info2_t self) -> svn_lock_t"},
{ (char *)"svn_client_info2_t_wc_info_set", _wrap_svn_client_info2_t_wc_info_set, METH_VARARGS, (char *)"svn_client_info2_t_wc_info_set(svn_client_info2_t self, svn_wc_info_t wc_info)"},
@@ -29788,121 +32299,108 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_client_info2_t_swigregister", svn_client_info2_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_client_info2_dup", _wrap_svn_client_info2_dup, METH_VARARGS, (char *)"svn_client_info2_dup(svn_client_info2_t info, apr_pool_t pool) -> svn_client_info2_t"},
{ (char *)"svn_client_info3", _wrap_svn_client_info3, METH_VARARGS, (char *)"\n"
- "svn_client_info3(char abspath_or_url, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t revision, svn_depth_t depth, \n"
- " svn_boolean_t fetch_excluded, svn_boolean_t fetch_actual_only, \n"
- " apr_array_header_t changelists, \n"
- " svn_client_info_receiver2_t receiver, \n"
- " void receiver_baton, svn_client_ctx_t ctx, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_client_info3(char const * abspath_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t revision, \n"
+ " svn_depth_t depth, svn_boolean_t fetch_excluded, svn_boolean_t fetch_actual_only, \n"
+ " apr_array_header_t changelists, svn_client_info_receiver2_t receiver, \n"
+ " void * receiver_baton, svn_client_ctx_t ctx, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_info2", _wrap_svn_client_info2, METH_VARARGS, (char *)"\n"
- "svn_client_info2(char path_or_url, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t revision, svn_info_receiver_t receiver, \n"
- " svn_depth_t depth, apr_array_header_t changelists, \n"
+ "svn_client_info2(char const * path_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t revision, \n"
+ " svn_info_receiver_t receiver, svn_depth_t depth, apr_array_header_t changelists, \n"
" svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_info", _wrap_svn_client_info, METH_VARARGS, (char *)"\n"
- "svn_client_info(char path_or_url, svn_opt_revision_t peg_revision, \n"
- " svn_opt_revision_t revision, svn_info_receiver_t receiver, \n"
- " svn_boolean_t recurse, svn_client_ctx_t ctx, \n"
+ "svn_client_info(char const * path_or_url, svn_opt_revision_t peg_revision, svn_opt_revision_t revision, \n"
+ " svn_info_receiver_t receiver, svn_boolean_t recurse, svn_client_ctx_t ctx, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_client_get_wc_root", _wrap_svn_client_get_wc_root, METH_VARARGS, (char *)"\n"
- "svn_client_get_wc_root(char local_abspath, svn_client_ctx_t ctx, apr_pool_t result_pool, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_client_min_max_revisions", _wrap_svn_client_min_max_revisions, METH_VARARGS, (char *)"\n"
- "svn_client_min_max_revisions(char local_abspath, svn_boolean_t committed, svn_client_ctx_t ctx, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
- ""},
+ { (char *)"svn_client_get_wc_root", _wrap_svn_client_get_wc_root, METH_VARARGS, (char *)"svn_client_get_wc_root(char const * local_abspath, svn_client_ctx_t ctx, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_client_min_max_revisions", _wrap_svn_client_min_max_revisions, METH_VARARGS, (char *)"svn_client_min_max_revisions(char const * local_abspath, svn_boolean_t committed, svn_client_ctx_t ctx, apr_pool_t scratch_pool) -> svn_error_t"},
{ (char *)"svn_client_patch", _wrap_svn_client_patch, METH_VARARGS, (char *)"\n"
- "svn_client_patch(char patch_abspath, char wc_dir_abspath, svn_boolean_t dry_run, \n"
- " int strip_count, svn_boolean_t reverse, \n"
- " svn_boolean_t ignore_whitespace, svn_boolean_t remove_tempfiles, \n"
- " svn_client_patch_func_t patch_func, \n"
- " void patch_baton, svn_client_ctx_t ctx, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_client_url_from_path2", _wrap_svn_client_url_from_path2, METH_VARARGS, (char *)"\n"
- "svn_client_url_from_path2(char path_or_url, svn_client_ctx_t ctx, apr_pool_t result_pool, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_client_patch(char const * patch_abspath, char const * wc_dir_abspath, svn_boolean_t dry_run, int strip_count, \n"
+ " svn_boolean_t reverse, svn_boolean_t ignore_whitespace, svn_boolean_t remove_tempfiles, \n"
+ " svn_client_patch_func_t patch_func, void * patch_baton, \n"
+ " svn_client_ctx_t ctx, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
- { (char *)"svn_client_url_from_path", _wrap_svn_client_url_from_path, METH_VARARGS, (char *)"svn_client_url_from_path(char path_or_url, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_client_root_url_from_path", _wrap_svn_client_root_url_from_path, METH_VARARGS, (char *)"svn_client_root_url_from_path(char path_or_url, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_client_uuid_from_url", _wrap_svn_client_uuid_from_url, METH_VARARGS, (char *)"svn_client_uuid_from_url(char url, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_client_uuid_from_path2", _wrap_svn_client_uuid_from_path2, METH_VARARGS, (char *)"\n"
- "svn_client_uuid_from_path2(char local_abspath, svn_client_ctx_t ctx, apr_pool_t result_pool, \n"
+ { (char *)"svn_client_url_from_path2", _wrap_svn_client_url_from_path2, METH_VARARGS, (char *)"svn_client_url_from_path2(char const * path_or_url, svn_client_ctx_t ctx, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_client_url_from_path", _wrap_svn_client_url_from_path, METH_VARARGS, (char *)"svn_client_url_from_path(char const * path_or_url, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_client_get_repos_root", _wrap_svn_client_get_repos_root, METH_VARARGS, (char *)"svn_client_get_repos_root(char const * abspath_or_url, svn_client_ctx_t ctx, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_client_root_url_from_path", _wrap_svn_client_root_url_from_path, METH_VARARGS, (char *)"svn_client_root_url_from_path(char const * path_or_url, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_client_uuid_from_url", _wrap_svn_client_uuid_from_url, METH_VARARGS, (char *)"svn_client_uuid_from_url(char const * url, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_client_uuid_from_path2", _wrap_svn_client_uuid_from_path2, METH_VARARGS, (char *)"svn_client_uuid_from_path2(char const * local_abspath, svn_client_ctx_t ctx, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_client_uuid_from_path", _wrap_svn_client_uuid_from_path, METH_VARARGS, (char *)"svn_client_uuid_from_path(char const * path, svn_wc_adm_access_t * adm_access, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_client_open_ra_session2", _wrap_svn_client_open_ra_session2, METH_VARARGS, (char *)"\n"
+ "svn_client_open_ra_session2(char const * url, char const * wri_abspath, svn_client_ctx_t ctx, apr_pool_t result_pool, \n"
" apr_pool_t scratch_pool) -> svn_error_t\n"
""},
- { (char *)"svn_client_uuid_from_path", _wrap_svn_client_uuid_from_path, METH_VARARGS, (char *)"\n"
- "svn_client_uuid_from_path(char path, svn_wc_adm_access_t adm_access, svn_client_ctx_t ctx, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ { (char *)"svn_client_open_ra_session", _wrap_svn_client_open_ra_session, METH_VARARGS, (char *)"svn_client_open_ra_session(char const * url, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_proplist_invoke_receiver2", _wrap_svn_proplist_invoke_receiver2, METH_VARARGS, (char *)"\n"
+ "svn_proplist_invoke_receiver2(svn_proplist_receiver2_t _obj, void * baton, char const * path, apr_hash_t prop_hash, \n"
+ " apr_array_header_t inherited_props, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
- { (char *)"svn_client_open_ra_session", _wrap_svn_client_open_ra_session, METH_VARARGS, (char *)"svn_client_open_ra_session(char url, svn_client_ctx_t ctx, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_proplist_invoke_receiver", _wrap_svn_proplist_invoke_receiver, METH_VARARGS, (char *)"\n"
- "svn_proplist_invoke_receiver(svn_proplist_receiver_t _obj, void baton, char path, \n"
- " apr_hash_t prop_hash, apr_pool_t pool) -> svn_error_t\n"
+ "svn_proplist_invoke_receiver(svn_proplist_receiver_t _obj, void * baton, char const * path, apr_hash_t prop_hash, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_invoke_get_commit_log3", _wrap_svn_client_invoke_get_commit_log3, METH_VARARGS, (char *)"\n"
- "svn_client_invoke_get_commit_log3(svn_client_get_commit_log3_t _obj, apr_array_header_t commit_items, \n"
- " void baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_invoke_get_commit_log3(svn_client_get_commit_log3_t _obj, apr_array_header_t commit_items, void * baton, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_invoke_get_commit_log2", _wrap_svn_client_invoke_get_commit_log2, METH_VARARGS, (char *)"\n"
- "svn_client_invoke_get_commit_log2(svn_client_get_commit_log2_t _obj, apr_array_header_t commit_items, \n"
- " void baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_invoke_get_commit_log2(svn_client_get_commit_log2_t _obj, apr_array_header_t commit_items, void * baton, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_invoke_get_commit_log", _wrap_svn_client_invoke_get_commit_log, METH_VARARGS, (char *)"\n"
- "svn_client_invoke_get_commit_log(svn_client_get_commit_log_t _obj, apr_array_header_t commit_items, \n"
- " void baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_invoke_get_commit_log(svn_client_get_commit_log_t _obj, apr_array_header_t commit_items, void * baton, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_invoke_blame_receiver3", _wrap_svn_client_invoke_blame_receiver3, METH_VARARGS, (char *)"\n"
- "svn_client_invoke_blame_receiver3(svn_client_blame_receiver3_t _obj, void baton, svn_revnum_t start_revnum, \n"
- " svn_revnum_t end_revnum, \n"
- " apr_int64_t line_no, svn_revnum_t revision, \n"
- " apr_hash_t rev_props, svn_revnum_t merged_revision, \n"
- " apr_hash_t merged_rev_props, char merged_path, \n"
- " char line, svn_boolean_t local_change, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_invoke_blame_receiver3(svn_client_blame_receiver3_t _obj, void * baton, svn_revnum_t start_revnum, svn_revnum_t end_revnum, \n"
+ " apr_int64_t line_no, svn_revnum_t revision, apr_hash_t rev_props, \n"
+ " svn_revnum_t merged_revision, apr_hash_t merged_rev_props, char const * merged_path, \n"
+ " char const * line, svn_boolean_t local_change, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_invoke_blame_receiver2", _wrap_svn_client_invoke_blame_receiver2, METH_VARARGS, (char *)"\n"
- "svn_client_invoke_blame_receiver2(svn_client_blame_receiver2_t _obj, void baton, apr_int64_t line_no, \n"
- " svn_revnum_t revision, char author, \n"
- " char date, svn_revnum_t merged_revision, \n"
- " char merged_author, char merged_date, char merged_path, \n"
- " char line, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_invoke_blame_receiver2(svn_client_blame_receiver2_t _obj, void * baton, apr_int64_t line_no, svn_revnum_t revision, \n"
+ " char const * author, char const * date, svn_revnum_t merged_revision, \n"
+ " char const * merged_author, char const * merged_date, char const * merged_path, \n"
+ " char const * line, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_invoke_blame_receiver", _wrap_svn_client_invoke_blame_receiver, METH_VARARGS, (char *)"\n"
- "svn_client_invoke_blame_receiver(svn_client_blame_receiver_t _obj, void baton, apr_int64_t line_no, \n"
- " svn_revnum_t revision, char author, \n"
- " char date, char line, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_invoke_blame_receiver(svn_client_blame_receiver_t _obj, void * baton, apr_int64_t line_no, svn_revnum_t revision, \n"
+ " char const * author, char const * date, char const * line, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_invoke_diff_summarize_func", _wrap_svn_client_invoke_diff_summarize_func, METH_VARARGS, (char *)"\n"
- "svn_client_invoke_diff_summarize_func(svn_client_diff_summarize_func_t _obj, svn_client_diff_summarize_t diff, \n"
- " void baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_client_invoke_diff_summarize_func(svn_client_diff_summarize_func_t _obj, svn_client_diff_summarize_t diff, void * baton, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
+ ""},
+ { (char *)"svn_client_invoke_import_filter_func", _wrap_svn_client_invoke_import_filter_func, METH_VARARGS, (char *)"\n"
+ "svn_client_invoke_import_filter_func(svn_client_import_filter_func_t _obj, void * baton, char const * local_abspath, svn_io_dirent2_t dirent, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_invoke_status_func", _wrap_svn_client_invoke_status_func, METH_VARARGS, (char *)"\n"
- "svn_client_invoke_status_func(svn_client_status_func_t _obj, void baton, char path, \n"
- " svn_client_status_t status, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_client_invoke_status_func(svn_client_status_func_t _obj, void * baton, char const * path, svn_client_status_t status, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
- { (char *)"svn_client_invoke_list_func", _wrap_svn_client_invoke_list_func, METH_VARARGS, (char *)"\n"
- "svn_client_invoke_list_func(svn_client_list_func_t _obj, void baton, char path, \n"
- " svn_dirent_t dirent, svn_lock_t lock, char abs_path, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ { (char *)"svn_client_invoke_list_func2", _wrap_svn_client_invoke_list_func2, METH_VARARGS, (char *)"\n"
+ "svn_client_invoke_list_func2(svn_client_list_func2_t _obj, void * baton, char const * path, svn_dirent_t dirent, \n"
+ " svn_lock_t lock, char const * abs_path, char const * external_parent_url, \n"
+ " char const * external_target, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
- { (char *)"svn_info_invoke_receiver", _wrap_svn_info_invoke_receiver, METH_VARARGS, (char *)"\n"
- "svn_info_invoke_receiver(svn_info_receiver_t _obj, void baton, char path, svn_info_t info, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ { (char *)"svn_client_invoke_list_func", _wrap_svn_client_invoke_list_func, METH_VARARGS, (char *)"\n"
+ "svn_client_invoke_list_func(svn_client_list_func_t _obj, void * baton, char const * path, svn_dirent_t dirent, \n"
+ " svn_lock_t lock, char const * abs_path, apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_info_invoke_receiver", _wrap_svn_info_invoke_receiver, METH_VARARGS, (char *)"svn_info_invoke_receiver(svn_info_receiver_t _obj, void * baton, char const * path, svn_info_t info, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_client_invoke_info_receiver2", _wrap_svn_client_invoke_info_receiver2, METH_VARARGS, (char *)"\n"
- "svn_client_invoke_info_receiver2(svn_client_info_receiver2_t _obj, void baton, char abspath_or_url, \n"
- " svn_client_info2_t info, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_client_invoke_info_receiver2(svn_client_info_receiver2_t _obj, void * baton, char const * abspath_or_url, svn_client_info2_t info, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_client_invoke_patch_func", _wrap_svn_client_invoke_patch_func, METH_VARARGS, (char *)"\n"
- "svn_client_invoke_patch_func(svn_client_patch_func_t _obj, void baton, char canon_path_from_patchfile, \n"
- " char patch_abspath, char reject_abspath, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_client_invoke_patch_func(svn_client_patch_func_t _obj, void * baton, char const * canon_path_from_patchfile, \n"
+ " char const * patch_abspath, char const * reject_abspath, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
+ { (char *)"svn_proplist_receiver2_t_swigregister", svn_proplist_receiver2_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_proplist_receiver_t_swigregister", svn_proplist_receiver_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_client_get_commit_log3_t_swigregister", svn_client_get_commit_log3_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_client_get_commit_log2_t_swigregister", svn_client_get_commit_log2_t_swigregister, METH_VARARGS, NULL},
@@ -29911,7 +32409,9 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_client_blame_receiver2_t_swigregister", svn_client_blame_receiver2_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_client_blame_receiver_t_swigregister", svn_client_blame_receiver_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_client_diff_summarize_func_t_swigregister", svn_client_diff_summarize_func_t_swigregister, METH_VARARGS, NULL},
+ { (char *)"svn_client_import_filter_func_t_swigregister", svn_client_import_filter_func_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_client_status_func_t_swigregister", svn_client_status_func_t_swigregister, METH_VARARGS, NULL},
+ { (char *)"svn_client_list_func2_t_swigregister", svn_client_list_func2_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_client_list_func_t_swigregister", svn_client_list_func_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_info_receiver_t_swigregister", svn_info_receiver_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_client_info_receiver2_t_swigregister", svn_client_info_receiver2_t_swigregister, METH_VARARGS, NULL},
@@ -29922,7 +32422,7 @@ static PyMethodDef SwigMethods[] = {
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
-static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *|svn_rangelist_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_file_t = {"_p_apr_file_t", "apr_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_getopt_t = {"_p_apr_getopt_t", "apr_getopt_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_hash_t = {"_p_apr_hash_t", "apr_hash_t *", 0, 0, (void*)0, 0};
@@ -29948,17 +32448,20 @@ static swig_type_info _swigt__p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__cha
static swig_type_info _swigt__p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t", "svn_client_blame_receiver2_t|struct svn_error_t *(*)(void *,apr_int64_t,svn_revnum_t,char const *,char const *,svn_revnum_t,char const *,char const *,char const *,char const *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,apr_hash_t *,svn_revnum_t,char const *,char const *,char const *,apr_pool_t *)|svn_log_message_receiver_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void = {"_p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void", "void (*)(void *,char const *,enum svn_wc_notify_action_t,enum svn_node_kind_t,char const *,enum svn_wc_notify_state_t,enum svn_wc_notify_state_t,long)|svn_wc_notify_func_t", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,apr_hash_t *,apr_array_header_t *,apr_pool_t *)|svn_proplist_receiver2_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,apr_hash_t *,apr_pool_t *)|svn_proplist_receiver_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,char const *,apr_pool_t *)|svn_changelist_receiver_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t", "svn_client_info_receiver2_t|struct svn_error_t *(*)(void *,char const *,svn_client_info2_t const *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t", "svn_client_status_func_t|struct svn_error_t *(*)(void *,char const *,svn_client_status_t const *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,svn_dirent_t const *,svn_lock_t const *,char const *,apr_pool_t *)|svn_client_list_func_t", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,svn_dirent_t const *,svn_lock_t const *,char const *,char const *,char const *,apr_pool_t *)|svn_client_list_func2_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,svn_info_t const *,apr_pool_t *)|svn_info_receiver_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void = {"_p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void", "void (*)(void *,char const *,struct svn_wc_status2_t *)|svn_wc_status_func2_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_struct_svn_wc_status_t__void = {"_p_f_p_void_p_q_const__char_p_struct_svn_wc_status_t__void", "void (*)(void *,char const *,struct svn_wc_status_t *)|svn_wc_status_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,svn_wc_status2_t *,apr_pool_t *)|svn_wc_status_func3_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void = {"_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void", "svn_wc_notify_func2_t|void (*)(void *,struct svn_wc_notify_t const *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,svn_boolean_t *,char const *,char const *,char const *,apr_pool_t *)|svn_client_patch_func_t", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,svn_boolean_t *,char const *,svn_io_dirent2_t const *,apr_pool_t *)|svn_client_import_filter_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,svn_log_entry_t *,apr_pool_t *)|svn_log_entry_receiver_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,svn_revnum_t,svn_revnum_t,apr_int64_t,svn_revnum_t,apr_hash_t *,svn_revnum_t,apr_hash_t *,char const *,char const *,svn_boolean_t,apr_pool_t *)|svn_client_blame_receiver3_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_int = {"_p_int", "int *|svn_boolean_t *|apr_status_t *", 0, 0, (void*)0, 0};
@@ -29972,19 +32475,21 @@ static swig_type_info _swigt__p_p_f_p_p_q_const__char_p_p_q_const__char_p_q_cons
static swig_type_info _swigt__p_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description2_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description2_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(svn_wc_conflict_result_t **,svn_wc_conflict_description2_t const *,void *,apr_pool_t *,apr_pool_t *)|svn_wc_conflict_resolver_func2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description_t_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(svn_wc_conflict_result_t **,svn_wc_conflict_description_t const *,void *,apr_pool_t *)|svn_wc_conflict_resolver_func_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_q_const__svn_client_diff_summarize_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_q_const__svn_client_diff_summarize_t_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(svn_client_diff_summarize_t const *,void *,apr_pool_t *)|svn_client_diff_summarize_func_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(svn_commit_info_t const *,void *,apr_pool_t *)|svn_commit_callback2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void__p_svn_error_t = {"_p_p_f_p_void__p_svn_error_t", "svn_cancel_func_t *|struct svn_error_t *(**)(void *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(void *,apr_int64_t,svn_revnum_t,char const *,char const *,char const *,apr_pool_t *)|svn_client_blame_receiver_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(void *,apr_int64_t,svn_revnum_t,char const *,char const *,svn_revnum_t,char const *,char const *,char const *,char const *,apr_pool_t *)|svn_client_blame_receiver2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void = {"_p_p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void", "void (**)(void *,char const *,enum svn_wc_notify_action_t,enum svn_node_kind_t,char const *,enum svn_wc_notify_state_t,enum svn_wc_notify_state_t,long)|svn_wc_notify_func_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(void *,char const *,apr_hash_t *,apr_array_header_t *,apr_pool_t *)|svn_proplist_receiver2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(void *,char const *,apr_hash_t *,apr_pool_t *)|svn_proplist_receiver_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(void *,char const *,svn_client_info2_t const *,apr_pool_t *)|svn_client_info_receiver2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(void *,char const *,svn_client_status_t const *,apr_pool_t *)|svn_client_status_func_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(void *,char const *,svn_dirent_t const *,svn_lock_t const *,char const *,apr_pool_t *)|svn_client_list_func_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(void *,char const *,svn_dirent_t const *,svn_lock_t const *,char const *,char const *,char const *,apr_pool_t *)|svn_client_list_func2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t", "svn_info_receiver_t *|struct svn_error_t *(**)(void *,char const *,svn_info_t const *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t", "svn_wc_status_func3_t *|struct svn_error_t *(**)(void *,char const *,svn_wc_status2_t *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void = {"_p_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void", "void (**)(void *,struct svn_wc_notify_t const *,apr_pool_t *)|svn_wc_notify_func2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(void *,svn_boolean_t *,char const *,char const *,char const *,apr_pool_t *)|svn_client_patch_func_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(void *,svn_boolean_t *,char const *,svn_io_dirent2_t const *,apr_pool_t *)|svn_client_import_filter_func_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(void *,svn_revnum_t,svn_revnum_t,apr_int64_t,svn_revnum_t,apr_hash_t *,svn_revnum_t,apr_hash_t *,char const *,char const *,svn_boolean_t,apr_pool_t *)|svn_client_blame_receiver3_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_auth_provider_object_t = {"_p_p_svn_auth_provider_object_t", "struct svn_auth_provider_object_t **|svn_auth_provider_object_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_client_commit_info_t = {"_p_p_svn_client_commit_info_t", "struct svn_client_commit_info_t **|svn_client_commit_info_t **", 0, 0, (void*)0, 0};
@@ -30003,6 +32508,9 @@ static swig_type_info _swigt__p_svn_auth_iterstate_t = {"_p_svn_auth_iterstate_t
static swig_type_info _swigt__p_svn_auth_provider_object_t = {"_p_svn_auth_provider_object_t", "struct svn_auth_provider_object_t *|svn_auth_provider_object_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_provider_t = {"_p_svn_auth_provider_t", "struct svn_auth_provider_t *|svn_auth_provider_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_ssl_server_cert_info_t = {"_p_svn_auth_ssl_server_cert_info_t", "struct svn_auth_ssl_server_cert_info_t *|svn_auth_ssl_server_cert_info_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_ctx_t = {"_p_svn_checksum_ctx_t", "struct svn_checksum_ctx_t *|svn_checksum_ctx_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "enum svn_checksum_kind_t *|svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "struct svn_checksum_t *|svn_checksum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_client_commit_info_t = {"_p_svn_client_commit_info_t", "struct svn_client_commit_info_t *|svn_client_commit_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_client_commit_item2_t = {"_p_svn_client_commit_item2_t", "struct svn_client_commit_item2_t *|svn_client_commit_item2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_client_commit_item3_t = {"_p_svn_client_commit_item3_t", "struct svn_client_commit_item3_t *|svn_client_commit_item3_t *", 0, 0, (void*)0, 0};
@@ -30039,6 +32547,7 @@ static swig_type_info _swigt__p_svn_opt_revision_t = {"_p_svn_opt_revision_t", "
static swig_type_info _swigt__p_svn_opt_revision_value_t = {"_p_svn_opt_revision_value_t", "union svn_opt_revision_value_t *|svn_opt_revision_value_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_opt_subcommand_desc2_t = {"_p_svn_opt_subcommand_desc2_t", "struct svn_opt_subcommand_desc2_t *|svn_opt_subcommand_desc2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_opt_subcommand_desc_t = {"_p_svn_opt_subcommand_desc_t", "struct svn_opt_subcommand_desc_t *|svn_opt_subcommand_desc_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_prop_inherited_item_t = {"_p_svn_prop_inherited_item_t", "struct svn_prop_inherited_item_t *|svn_prop_inherited_item_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_kind = {"_p_svn_prop_kind", "svn_prop_kind_t *|enum svn_prop_kind *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_ra_callbacks2_t = {"_p_svn_ra_callbacks2_t", "struct svn_ra_callbacks2_t *|svn_ra_callbacks2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_ra_callbacks_t = {"_p_svn_ra_callbacks_t", "struct svn_ra_callbacks_t *|svn_ra_callbacks_t *", 0, 0, (void*)0, 0};
@@ -30056,6 +32565,9 @@ static swig_type_info _swigt__p_svn_txdelta_op_t = {"_p_svn_txdelta_op_t", "stru
static swig_type_info _swigt__p_svn_txdelta_stream_t = {"_p_svn_txdelta_stream_t", "struct svn_txdelta_stream_t *|svn_txdelta_stream_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_txdelta_window_t = {"_p_svn_txdelta_window_t", "struct svn_txdelta_window_t *|svn_txdelta_window_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_checklist_t = {"_p_svn_version_checklist_t", "struct svn_version_checklist_t *|svn_version_checklist_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_linked_lib_t = {"_p_svn_version_ext_linked_lib_t", "struct svn_version_ext_linked_lib_t *|svn_version_ext_linked_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_loaded_lib_t = {"_p_svn_version_ext_loaded_lib_t", "struct svn_version_ext_loaded_lib_t *|svn_version_ext_loaded_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_extended_t = {"_p_svn_version_extended_t", "struct svn_version_extended_t *|svn_version_extended_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_t = {"_p_svn_version_t", "struct svn_version_t *|svn_version_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_wc_adm_access_t = {"_p_svn_wc_adm_access_t", "struct svn_wc_adm_access_t *|svn_wc_adm_access_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_wc_committed_queue_t = {"_p_svn_wc_committed_queue_t", "struct svn_wc_committed_queue_t *|svn_wc_committed_queue_t *", 0, 0, (void*)0, 0};
@@ -30120,17 +32632,20 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void,
+ &_swigt__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void,
&_swigt__p_f_p_void_p_q_const__char_p_struct_svn_wc_status_t__void,
&_swigt__p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void,
&_swigt__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_int,
@@ -30144,19 +32659,21 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description2_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_q_const__svn_client_diff_summarize_t_p_void_p_apr_pool_t__p_svn_error_t,
- &_swigt__p_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_void__p_svn_error_t,
&_swigt__p_p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void,
+ &_swigt__p_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void,
&_swigt__p_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_svn_auth_provider_object_t,
&_swigt__p_p_svn_client_commit_info_t,
@@ -30175,6 +32692,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_auth_provider_object_t,
&_swigt__p_svn_auth_provider_t,
&_swigt__p_svn_auth_ssl_server_cert_info_t,
+ &_swigt__p_svn_checksum_ctx_t,
+ &_swigt__p_svn_checksum_kind_t,
+ &_swigt__p_svn_checksum_t,
&_swigt__p_svn_client_commit_info_t,
&_swigt__p_svn_client_commit_item2_t,
&_swigt__p_svn_client_commit_item3_t,
@@ -30211,6 +32731,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_opt_revision_value_t,
&_swigt__p_svn_opt_subcommand_desc2_t,
&_swigt__p_svn_opt_subcommand_desc_t,
+ &_swigt__p_svn_prop_inherited_item_t,
&_swigt__p_svn_prop_kind,
&_swigt__p_svn_ra_callbacks2_t,
&_swigt__p_svn_ra_callbacks_t,
@@ -30228,6 +32749,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_txdelta_stream_t,
&_swigt__p_svn_txdelta_window_t,
&_swigt__p_svn_version_checklist_t,
+ &_swigt__p_svn_version_ext_linked_lib_t,
+ &_swigt__p_svn_version_ext_loaded_lib_t,
+ &_swigt__p_svn_version_extended_t,
&_swigt__p_svn_version_t,
&_swigt__p_svn_wc_adm_access_t,
&_swigt__p_svn_wc_committed_queue_t,
@@ -30292,17 +32816,20 @@ static swig_cast_info _swigc__p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__cha
static swig_cast_info _swigc__p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void[] = { {&_swigt__p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void[] = { {&_swigt__p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_struct_svn_wc_status_t__void[] = { {&_swigt__p_f_p_void_p_q_const__char_p_struct_svn_wc_status_t__void, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void[] = { {&_swigt__p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_int[] = { {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}};
@@ -30316,19 +32843,21 @@ static swig_cast_info _swigc__p_p_f_p_p_q_const__char_p_p_q_const__char_p_q_cons
static swig_cast_info _swigc__p_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description2_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description2_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_q_const__svn_client_diff_summarize_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_q_const__svn_client_diff_summarize_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void__p_svn_error_t[] = { {&_swigt__p_p_f_p_void__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void[] = { {&_swigt__p_p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void[] = { {&_swigt__p_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_auth_provider_object_t[] = { {&_swigt__p_p_svn_auth_provider_object_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_client_commit_info_t[] = { {&_swigt__p_p_svn_client_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -30347,6 +32876,9 @@ static swig_cast_info _swigc__p_svn_auth_iterstate_t[] = { {&_swigt__p_svn_auth
static swig_cast_info _swigc__p_svn_auth_provider_object_t[] = { {&_swigt__p_svn_auth_provider_object_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_provider_t[] = { {&_swigt__p_svn_auth_provider_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_ssl_server_cert_info_t[] = { {&_swigt__p_svn_auth_ssl_server_cert_info_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_ctx_t[] = { {&_swigt__p_svn_checksum_ctx_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_kind_t[] = { {&_swigt__p_svn_checksum_kind_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_t[] = { {&_swigt__p_svn_checksum_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_client_commit_info_t[] = { {&_swigt__p_svn_client_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_client_commit_item2_t[] = { {&_swigt__p_svn_client_commit_item2_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_client_commit_item3_t[] = { {&_swigt__p_svn_client_commit_item3_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -30383,6 +32915,7 @@ static swig_cast_info _swigc__p_svn_opt_revision_t[] = { {&_swigt__p_svn_opt_re
static swig_cast_info _swigc__p_svn_opt_revision_value_t[] = { {&_swigt__p_svn_opt_revision_value_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_opt_subcommand_desc2_t[] = { {&_swigt__p_svn_opt_subcommand_desc2_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_opt_subcommand_desc_t[] = { {&_swigt__p_svn_opt_subcommand_desc_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_prop_inherited_item_t[] = { {&_swigt__p_svn_prop_inherited_item_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_kind[] = { {&_swigt__p_svn_prop_kind, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_ra_callbacks2_t[] = { {&_swigt__p_svn_ra_callbacks2_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_ra_callbacks_t[] = { {&_swigt__p_svn_ra_callbacks_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -30400,6 +32933,9 @@ static swig_cast_info _swigc__p_svn_txdelta_op_t[] = { {&_swigt__p_svn_txdelta_
static swig_cast_info _swigc__p_svn_txdelta_stream_t[] = { {&_swigt__p_svn_txdelta_stream_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_txdelta_window_t[] = { {&_swigt__p_svn_txdelta_window_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_checklist_t[] = { {&_swigt__p_svn_version_checklist_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_linked_lib_t[] = { {&_swigt__p_svn_version_ext_linked_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_loaded_lib_t[] = { {&_swigt__p_svn_version_ext_loaded_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_extended_t[] = { {&_swigt__p_svn_version_extended_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_t[] = { {&_swigt__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_wc_adm_access_t[] = { {&_swigt__p_svn_wc_adm_access_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_wc_committed_queue_t[] = { {&_swigt__p_svn_wc_committed_queue_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -30464,17 +33000,20 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void,
+ _swigc__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void,
_swigc__p_f_p_void_p_q_const__char_p_struct_svn_wc_status_t__void,
_swigc__p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void,
_swigc__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_int,
@@ -30488,19 +33027,21 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description2_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_q_const__svn_client_diff_summarize_t_p_void_p_apr_pool_t__p_svn_error_t,
- _swigc__p_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_void__p_svn_error_t,
_swigc__p_p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void,
+ _swigc__p_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void,
_swigc__p_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_svn_auth_provider_object_t,
_swigc__p_p_svn_client_commit_info_t,
@@ -30519,6 +33060,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_auth_provider_object_t,
_swigc__p_svn_auth_provider_t,
_swigc__p_svn_auth_ssl_server_cert_info_t,
+ _swigc__p_svn_checksum_ctx_t,
+ _swigc__p_svn_checksum_kind_t,
+ _swigc__p_svn_checksum_t,
_swigc__p_svn_client_commit_info_t,
_swigc__p_svn_client_commit_item2_t,
_swigc__p_svn_client_commit_item3_t,
@@ -30555,6 +33099,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_opt_revision_value_t,
_swigc__p_svn_opt_subcommand_desc2_t,
_swigc__p_svn_opt_subcommand_desc_t,
+ _swigc__p_svn_prop_inherited_item_t,
_swigc__p_svn_prop_kind,
_swigc__p_svn_ra_callbacks2_t,
_swigc__p_svn_ra_callbacks_t,
@@ -30572,6 +33117,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_txdelta_stream_t,
_swigc__p_svn_txdelta_window_t,
_swigc__p_svn_version_checklist_t,
+ _swigc__p_svn_version_ext_linked_lib_t,
+ _swigc__p_svn_version_ext_loaded_lib_t,
+ _swigc__p_svn_version_extended_t,
_swigc__p_svn_version_t,
_swigc__p_svn_wc_adm_access_t,
_swigc__p_svn_wc_committed_queue_t,
@@ -30616,7 +33164,8 @@ static swig_cast_info *swig_cast_initial[] = {
static swig_const_info swig_const_table[] = {
{ SWIG_PY_POINTER, (char*)"svn_swig_py_cancel_func", 0, 0, (void *)(svn_swig_py_cancel_func), &SWIGTYPE_p_f_p_void__p_svn_error_t },
{ SWIG_PY_POINTER, (char*)"svn_swig_py_get_commit_log_func", 0, 0, (void *)(svn_swig_py_get_commit_log_func), &SWIGTYPE_p_f_p_p_q_const__char_p_p_q_const__char_p_q_const__apr_array_header_t_p_void_p_apr_pool_t__p_svn_error_t },
-{ SWIG_PY_POINTER, (char*)"svn_swig_py_notify_func", 0, 0, (void *)(svn_swig_py_notify_func), &SWIGTYPE_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void },
+{ SWIG_PY_POINTER, (char*)"svn_swig_py_notify_func", 0, 0, (void *)(svn_swig_py_notify_func), &SWIGTYPE_p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void },
+{ SWIG_PY_POINTER, (char*)"svn_swig_py_notify_func2", 0, 0, (void *)(svn_swig_py_notify_func2), &SWIGTYPE_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void },
{0, 0, 0, 0.0, 0, 0}};
#ifdef __cplusplus
@@ -30681,8 +33230,6 @@ SWIG_InitializeModule(void *clientdata) {
swig_module_info *module_head, *iter;
int found, init;
- clientdata = clientdata;
-
/* check to see if the circular list has been setup, if not, set it up */
if (swig_module.next==0) {
/* Initialize the swig_module */
@@ -31255,6 +33802,7 @@ SWIG_init(void) {
m = Py_InitModule((char *) SWIG_name, SwigMethods);
#endif
md = d = PyModule_GetDict(m);
+ (void)md;
SWIG_InitializeModule(0);
@@ -31302,6 +33850,7 @@ SWIG_init(void) {
SWIG_Python_SetConstant(d, "SVN_CLIENT_COMMIT_ITEM_PROP_MODS",SWIG_From_long((long)(0x08)));
SWIG_Python_SetConstant(d, "SVN_CLIENT_COMMIT_ITEM_IS_COPY",SWIG_From_long((long)(0x10)));
SWIG_Python_SetConstant(d, "SVN_CLIENT_COMMIT_ITEM_LOCK_TOKEN",SWIG_From_long((long)(0x20)));
+ SWIG_Python_SetConstant(d, "SVN_CLIENT_COMMIT_ITEM_MOVED_HERE",SWIG_From_long((long)(0x40)));
SWIG_Python_SetConstant(d, "svn_client_diff_summarize_kind_normal",SWIG_From_long((long)(svn_client_diff_summarize_kind_normal)));
SWIG_Python_SetConstant(d, "svn_client_diff_summarize_kind_added",SWIG_From_long((long)(svn_client_diff_summarize_kind_added)));
SWIG_Python_SetConstant(d, "svn_client_diff_summarize_kind_modified",SWIG_From_long((long)(svn_client_diff_summarize_kind_modified)));
@@ -31328,10 +33877,19 @@ SWIG_init(void) {
}
{
+ svn_wc_notify_func_t * tmp = malloc(sizeof(svn_wc_notify_func_t));
+ *tmp = (svn_wc_notify_func_t) svn_swig_py_notify_func;
+
+ SWIG_Python_SetConstant(d, "svn_swig_py_notify_func",svn_swig_NewPointerObj(tmp, SWIGTYPE_p_p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void, NULL, NULL))
+
+ ;
+
+ }
+ {
svn_wc_notify_func2_t * tmp = malloc(sizeof(svn_wc_notify_func2_t));
- *tmp = (svn_wc_notify_func2_t) svn_swig_py_notify_func;
+ *tmp = (svn_wc_notify_func2_t) svn_swig_py_notify_func2;
- SWIG_Python_SetConstant(d, "svn_swig_py_notify_func",svn_swig_NewPointerObj(tmp, SWIGTYPE_p_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void, NULL, NULL))
+ SWIG_Python_SetConstant(d, "svn_swig_py_notify_func2",svn_swig_NewPointerObj(tmp, SWIGTYPE_p_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void, NULL, NULL))
;
diff --git a/subversion/bindings/swig/python/svn_delta.c b/subversion/bindings/swig/python/svn_delta.c
index f3b1dc9..2c66025 100644
--- a/subversion/bindings/swig/python/svn_delta.c
+++ b/subversion/bindings/swig/python/svn_delta.c
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -733,6 +733,7 @@ SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) {
#define PyInt_Check(x) PyLong_Check(x)
#define PyInt_AsLong(x) PyLong_AsLong(x)
#define PyInt_FromLong(x) PyLong_FromLong(x)
+#define PyInt_FromSize_t(x) PyLong_FromSize_t(x)
#define PyString_Check(name) PyBytes_Check(name)
#define PyString_FromString(x) PyUnicode_FromString(x)
#define PyString_Format(fmt, args) PyUnicode_Format(fmt, args)
@@ -902,6 +903,10 @@ static long PyNumber_AsSsize_t (PyObject *x, void *SWIGUNUSEDPARM(exc))
}
#endif
+#if PY_VERSION_HEX < 0x02050000
+#define PyInt_FromSize_t(x) PyInt_FromLong((long)x)
+#endif
+
#if PY_VERSION_HEX < 0x02040000
#define Py_VISIT(op) \
do { \
@@ -1173,7 +1178,7 @@ SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self),
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Python_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Python_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Python_SetModule(pointer)
#define SWIG_NewClientData(obj) SwigPyClientData_New(obj)
@@ -1199,7 +1204,7 @@ SWIG_Python_SetErrorObj(PyObject *errtype, PyObject *obj) {
SWIGINTERN void
SWIG_Python_SetErrorMsg(PyObject *errtype, const char *msg) {
SWIG_PYTHON_THREAD_BEGIN_BLOCK;
- PyErr_SetString(errtype, (char *) msg);
+ PyErr_SetString(errtype, msg);
SWIG_PYTHON_THREAD_END_BLOCK;
}
@@ -1218,7 +1223,11 @@ SwigPyBuiltin_AddPublicSymbol(PyObject *seq, const char *key) {
SWIGINTERN void
SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *name, PyObject *obj) {
+#if PY_VERSION_HEX < 0x02030000
PyDict_SetItemString(d, (char *)name, obj);
+#else
+ PyDict_SetItemString(d, name, obj);
+#endif
Py_DECREF(obj);
if (public_interface)
SwigPyBuiltin_AddPublicSymbol(public_interface, name);
@@ -1228,7 +1237,11 @@ SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *nam
SWIGINTERN void
SWIG_Python_SetConstant(PyObject *d, const char *name, PyObject *obj) {
+#if PY_VERSION_HEX < 0x02030000
PyDict_SetItemString(d, (char *)name, obj);
+#else
+ PyDict_SetItemString(d, name, obj);
+#endif
Py_DECREF(obj);
}
@@ -1549,7 +1562,7 @@ SwigPyObject_repr(SwigPyObject *v, PyObject *args)
#endif
{
const char *name = SWIG_TypePrettyName(v->ty);
- PyObject *repr = SWIG_Python_str_FromFormat("<Swig Object of type '%s' at %p>", name, (void *)v);
+ PyObject *repr = SWIG_Python_str_FromFormat("<Swig Object of type '%s' at %p>", (name ? name : "unknown"), (void *)v);
if (v->next) {
# ifdef METH_NOARGS
PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next);
@@ -1753,8 +1766,10 @@ SwigPyObject_own(PyObject *v, PyObject *args)
PyObject *val = 0;
#if (PY_VERSION_HEX < 0x02020000)
if (!PyArg_ParseTuple(args,(char *)"|O:own",&val))
-#else
+#elif (PY_VERSION_HEX < 0x02050000)
if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val))
+#else
+ if (!PyArg_UnpackTuple(args, "own", 0, 1, &val))
#endif
{
return NULL;
@@ -2449,23 +2464,29 @@ SWIG_Python_NewShadowInstance(SwigPyClientData *data, PyObject *swig_this)
} else {
#if PY_VERSION_HEX >= 0x03000000
inst = PyBaseObject_Type.tp_new((PyTypeObject*) data->newargs, Py_None, Py_None);
- PyObject_SetAttr(inst, SWIG_This(), swig_this);
- Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG;
+ if (inst) {
+ PyObject_SetAttr(inst, SWIG_This(), swig_this);
+ Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG;
+ }
#else
PyObject *dict = PyDict_New();
- PyDict_SetItem(dict, SWIG_This(), swig_this);
- inst = PyInstance_NewRaw(data->newargs, dict);
- Py_DECREF(dict);
+ if (dict) {
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ inst = PyInstance_NewRaw(data->newargs, dict);
+ Py_DECREF(dict);
+ }
#endif
}
return inst;
#else
#if (PY_VERSION_HEX >= 0x02010000)
- PyObject *inst;
+ PyObject *inst = 0;
PyObject *dict = PyDict_New();
- PyDict_SetItem(dict, SWIG_This(), swig_this);
- inst = PyInstance_NewRaw(data->newargs, dict);
- Py_DECREF(dict);
+ if (dict) {
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ inst = PyInstance_NewRaw(data->newargs, dict);
+ Py_DECREF(dict);
+ }
return (PyObject *) inst;
#else
PyInstanceObject *inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type);
@@ -2516,7 +2537,7 @@ SWIG_Python_SetSwigThis(PyObject *inst, PyObject *swig_this)
SWIGINTERN PyObject *
SWIG_Python_InitShadowInstance(PyObject *args) {
PyObject *obj[2];
- if (!SWIG_Python_UnpackTuple(args,(char*)"swiginit", 2, 2, obj)) {
+ if (!SWIG_Python_UnpackTuple(args, "swiginit", 2, 2, obj)) {
return NULL;
} else {
SwigPyObject *sthis = SWIG_Python_GetSwigThis(obj[0]);
@@ -2572,12 +2593,10 @@ SWIG_Python_NewPointerObj(PyObject *self, void *ptr, swig_type_info *type, int f
assert(!(flags & SWIG_BUILTIN_TP_INIT));
robj = SwigPyObject_New(ptr, type, own);
- if (clientdata && !(flags & SWIG_POINTER_NOSHADOW)) {
+ if (robj && clientdata && !(flags & SWIG_POINTER_NOSHADOW)) {
PyObject *inst = SWIG_Python_NewShadowInstance(clientdata, robj);
- if (inst) {
- Py_DECREF(robj);
- robj = inst;
- }
+ Py_DECREF(robj);
+ robj = inst;
}
return robj;
}
@@ -2598,7 +2617,7 @@ void *SWIG_ReturnGlobalTypeList(void *);
#endif
SWIGRUNTIME swig_module_info *
-SWIG_Python_GetModule(void) {
+SWIG_Python_GetModule(void *SWIGUNUSEDPARM(clientdata)) {
static void *type_pointer = (void *)0;
/* first check if module already created */
if (!type_pointer) {
@@ -2724,7 +2743,7 @@ SWIG_Python_TypeQuery(const char *type)
descriptor = (swig_type_info *) PyCObject_AsVoidPtr(obj);
#endif
} else {
- swig_module_info *swig_module = SWIG_Python_GetModule();
+ swig_module_info *swig_module = SWIG_GetModule(0);
descriptor = SWIG_TypeQueryModule(swig_module, swig_module, type);
if (descriptor) {
#ifdef SWIGPY_USE_CAPSULE
@@ -2792,7 +2811,7 @@ SwigPyObject_GetDesc(PyObject *self)
{
SwigPyObject *v = (SwigPyObject *)self;
swig_type_info *ty = v ? v->ty : 0;
- return ty ? ty->str : (char*)"";
+ return ty ? ty->str : "";
}
SWIGRUNTIME void
@@ -2849,6 +2868,7 @@ SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int SWIGUNUSEDPARM(arg
return result;
}
+#ifdef SWIGPYTHON_BUILTIN
SWIGRUNTIME int
SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
PyTypeObject *tp = obj->ob_type;
@@ -2857,15 +2877,15 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
descrsetfunc f;
int res;
-#ifdef Py_USING_UNICODE
+# ifdef Py_USING_UNICODE
if (PyString_Check(name)) {
name = PyUnicode_Decode(PyString_AsString(name), PyString_Size(name), NULL, NULL);
if (!name)
return -1;
} else if (!PyUnicode_Check(name))
-#else
+# else
if (!PyString_Check(name))
-#endif
+# endif
{
PyErr_Format(PyExc_TypeError, "attribute name must be string, not '%.200s'", name->ob_type->tp_name);
return -1;
@@ -2900,6 +2920,7 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
Py_DECREF(name);
return res;
}
+#endif
#ifdef __cplusplus
@@ -2955,59 +2976,67 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
#define SWIGTYPE_p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[33]
#define SWIGTYPE_p_p_svn_checksum_t swig_types[34]
#define SWIGTYPE_p_p_svn_delta_editor_t swig_types[35]
-#define SWIGTYPE_p_p_svn_txdelta_stream_t swig_types[36]
-#define SWIGTYPE_p_p_svn_txdelta_window_t swig_types[37]
-#define SWIGTYPE_p_p_void swig_types[38]
-#define SWIGTYPE_p_svn_auth_baton_t swig_types[39]
-#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[40]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[41]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[42]
-#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[43]
-#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[44]
-#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[45]
-#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[46]
-#define SWIGTYPE_p_svn_auth_provider_t swig_types[47]
-#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[48]
-#define SWIGTYPE_p_svn_checksum_kind_t swig_types[49]
-#define SWIGTYPE_p_svn_commit_info_t swig_types[50]
-#define SWIGTYPE_p_svn_config_t swig_types[51]
-#define SWIGTYPE_p_svn_delta_editor_t swig_types[52]
-#define SWIGTYPE_p_svn_depth_t swig_types[53]
-#define SWIGTYPE_p_svn_dirent_t swig_types[54]
-#define SWIGTYPE_p_svn_errno_t swig_types[55]
-#define SWIGTYPE_p_svn_error_t swig_types[56]
-#define SWIGTYPE_p_svn_io_dirent2_t swig_types[57]
-#define SWIGTYPE_p_svn_io_dirent_t swig_types[58]
-#define SWIGTYPE_p_svn_io_file_del_t swig_types[59]
-#define SWIGTYPE_p_svn_location_segment_t swig_types[60]
-#define SWIGTYPE_p_svn_lock_t swig_types[61]
-#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[62]
-#define SWIGTYPE_p_svn_log_changed_path_t swig_types[63]
-#define SWIGTYPE_p_svn_log_entry_t swig_types[64]
-#define SWIGTYPE_p_svn_merge_range_t swig_types[65]
-#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[66]
-#define SWIGTYPE_p_svn_node_kind_t swig_types[67]
-#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[68]
-#define SWIGTYPE_p_svn_opt_revision_t swig_types[69]
-#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[70]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[71]
-#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[72]
-#define SWIGTYPE_p_svn_prop_kind swig_types[73]
-#define SWIGTYPE_p_svn_stream_mark_t swig_types[74]
-#define SWIGTYPE_p_svn_stream_t swig_types[75]
-#define SWIGTYPE_p_svn_string_t swig_types[76]
-#define SWIGTYPE_p_svn_stringbuf_t swig_types[77]
-#define SWIGTYPE_p_svn_tristate_t swig_types[78]
-#define SWIGTYPE_p_svn_txdelta_op_t swig_types[79]
-#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[80]
-#define SWIGTYPE_p_svn_txdelta_window_t swig_types[81]
-#define SWIGTYPE_p_svn_version_checklist_t swig_types[82]
-#define SWIGTYPE_p_svn_version_t swig_types[83]
-#define SWIGTYPE_p_unsigned_char swig_types[84]
-#define SWIGTYPE_p_unsigned_long swig_types[85]
-#define SWIGTYPE_p_void swig_types[86]
-static swig_type_info *swig_types[88];
-static swig_module_info swig_module = {swig_types, 87, 0, 0, 0, 0};
+#define SWIGTYPE_p_p_svn_txdelta_op_t swig_types[36]
+#define SWIGTYPE_p_p_svn_txdelta_stream_t swig_types[37]
+#define SWIGTYPE_p_p_svn_txdelta_window_t swig_types[38]
+#define SWIGTYPE_p_p_void swig_types[39]
+#define SWIGTYPE_p_svn_auth_baton_t swig_types[40]
+#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[41]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[42]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[43]
+#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[44]
+#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[45]
+#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[46]
+#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[47]
+#define SWIGTYPE_p_svn_auth_provider_t swig_types[48]
+#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[49]
+#define SWIGTYPE_p_svn_checksum_ctx_t swig_types[50]
+#define SWIGTYPE_p_svn_checksum_kind_t swig_types[51]
+#define SWIGTYPE_p_svn_checksum_t swig_types[52]
+#define SWIGTYPE_p_svn_commit_info_t swig_types[53]
+#define SWIGTYPE_p_svn_config_t swig_types[54]
+#define SWIGTYPE_p_svn_delta_editor_t swig_types[55]
+#define SWIGTYPE_p_svn_depth_t swig_types[56]
+#define SWIGTYPE_p_svn_dirent_t swig_types[57]
+#define SWIGTYPE_p_svn_errno_t swig_types[58]
+#define SWIGTYPE_p_svn_error_t swig_types[59]
+#define SWIGTYPE_p_svn_io_dirent2_t swig_types[60]
+#define SWIGTYPE_p_svn_io_dirent_t swig_types[61]
+#define SWIGTYPE_p_svn_io_file_del_t swig_types[62]
+#define SWIGTYPE_p_svn_location_segment_t swig_types[63]
+#define SWIGTYPE_p_svn_lock_t swig_types[64]
+#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[65]
+#define SWIGTYPE_p_svn_log_changed_path_t swig_types[66]
+#define SWIGTYPE_p_svn_log_entry_t swig_types[67]
+#define SWIGTYPE_p_svn_merge_range_t swig_types[68]
+#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[69]
+#define SWIGTYPE_p_svn_node_kind_t swig_types[70]
+#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[71]
+#define SWIGTYPE_p_svn_opt_revision_t swig_types[72]
+#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[73]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[74]
+#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[75]
+#define SWIGTYPE_p_svn_prop_inherited_item_t swig_types[76]
+#define SWIGTYPE_p_svn_prop_kind swig_types[77]
+#define SWIGTYPE_p_svn_stream_mark_t swig_types[78]
+#define SWIGTYPE_p_svn_stream_t swig_types[79]
+#define SWIGTYPE_p_svn_string_t swig_types[80]
+#define SWIGTYPE_p_svn_stringbuf_t swig_types[81]
+#define SWIGTYPE_p_svn_tristate_t swig_types[82]
+#define SWIGTYPE_p_svn_txdelta_op_t swig_types[83]
+#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[84]
+#define SWIGTYPE_p_svn_txdelta_window_t swig_types[85]
+#define SWIGTYPE_p_svn_version_checklist_t swig_types[86]
+#define SWIGTYPE_p_svn_version_ext_linked_lib_t swig_types[87]
+#define SWIGTYPE_p_svn_version_ext_loaded_lib_t swig_types[88]
+#define SWIGTYPE_p_svn_version_extended_t swig_types[89]
+#define SWIGTYPE_p_svn_version_t swig_types[90]
+#define SWIGTYPE_p_svn_wc_external_item2_t swig_types[91]
+#define SWIGTYPE_p_unsigned_char swig_types[92]
+#define SWIGTYPE_p_unsigned_long swig_types[93]
+#define SWIGTYPE_p_void swig_types[94]
+static swig_type_info *swig_types[96];
+static swig_module_info swig_module = {swig_types, 95, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@@ -3031,7 +3060,7 @@ static swig_module_info swig_module = {swig_types, 87, 0, 0, 0, 0};
#endif
#define SWIG_name "_delta"
-#define SWIGVERSION 0x020004
+#define SWIGVERSION 0x020009
#define SWIG_VERSION SWIGVERSION
@@ -3095,61 +3124,10 @@ static PyObject * _global_py_pool = NULL;
#include "svn_md5.h"
-static PyObject *
-svn_txdelta_window_t_ops_get(PyObject *window_ob)
-{
- void *window;
- PyObject *ops_list, *window_pool;
- int status;
-
- /* Kludge alert!
- Normally, these kinds of conversions would belong in a typemap.
- However, typemaps won't allow us to change the result type to an array,
- so we have to make this custom accessor function.
- A cleaner approach would be to use something like:
-
- %extend svn_txdelta_window_t { void get_ops(apr_array_header_t ** ops); }
-
- But that means unnecessary copying, plus more hacks to get the pool for the
- array and for wrapping the individual op objects. So we just don't bother.
- */
-
- /* Note: the standard svn-python typemap releases the GIL while calling the
- wrapped function, but this function does Python stuff, so we have to
- reacquire it again. */
- svn_swig_py_acquire_py_lock();
- status = svn_swig_ConvertPtr(window_ob, &window,
- SWIG_TypeQuery("svn_txdelta_window_t *"));
-
- if (status != 0)
- {
- PyErr_SetString(PyExc_TypeError,
- "expected an svn_txdelta_window_t* proxy");
- svn_swig_py_release_py_lock();
- return NULL;
- }
-
- window_pool = PyObject_GetAttrString(window_ob, "_parent_pool");
-
- if (window_pool == NULL)
- {
- svn_swig_py_release_py_lock();
- return NULL;
- }
-
- ops_list = svn_swig_py_txdelta_window_t_ops_get(window,
- SWIG_TypeQuery("svn_txdelta_op_t *"), window_pool);
-
- svn_swig_py_release_py_lock();
-
- return ops_list;
-}
-
-
#include "svn_delta.h"
- #define SWIG_From_long PyInt_FromLong
+ #define SWIG_From_long PyLong_FromLong
SWIGINTERN int
@@ -3290,6 +3268,7 @@ SWIG_As_long (PyObject* obj)
SWIGINTERN int
SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val)
{
+#if PY_VERSION_HEX < 0x03000000
if (PyInt_Check(obj)) {
long v = PyInt_AsLong(obj);
if (v >= 0) {
@@ -3298,7 +3277,9 @@ SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val)
} else {
return SWIG_OverflowError;
}
- } else if (PyLong_Check(obj)) {
+ } else
+#endif
+ if (PyLong_Check(obj)) {
unsigned long v = PyLong_AsUnsignedLong(obj);
if (!PyErr_Occurred()) {
if (val) *val = v;
@@ -3351,9 +3332,13 @@ SWIGINTERNINLINE PyObject*
SWIG_From_unsigned_SS_long (unsigned long value)
{
return (value > LONG_MAX) ?
- PyLong_FromUnsignedLong(value) : PyInt_FromLong((long)(value));
+ PyLong_FromUnsignedLong(value) : PyLong_FromLong((long)(value));
}
+SWIGINTERN void svn_txdelta_window_t__ops_get(struct svn_txdelta_window_t *self,int *num_ops,svn_txdelta_op_t **ops){
+ *num_ops = self->num_ops;
+ *ops = self->ops;
+}
SWIGINTERN swig_type_info*
SWIG_pchar_descriptor(void)
@@ -3623,29 +3608,6 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_txdelta_window_t_ops_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
- PyObject *resultobj = 0;
- PyObject *arg1 = (PyObject *) 0 ;
- PyObject * obj0 = 0 ;
- PyObject *result = 0 ;
-
- if (!PyArg_ParseTuple(args,(char *)"O:svn_txdelta_window_t_ops_get",&obj0)) SWIG_fail;
- arg1 = obj0;
- {
- svn_swig_py_release_py_lock();
-
- result = (PyObject *)svn_txdelta_window_t_ops_get(arg1);
-
- svn_swig_py_acquire_py_lock();
-
- }
- resultobj = result;
- return resultobj;
-fail:
- return NULL;
-}
-
-
SWIGINTERN PyObject *_wrap_svn_delta_version(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_version_t *result = 0 ;
@@ -3669,14 +3631,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_txdelta_op_t_action_code_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_txdelta_op_t *arg1 = (svn_txdelta_op_t *) 0 ;
+ struct svn_txdelta_op_t *arg1 = (struct svn_txdelta_op_t *) 0 ;
enum svn_delta_action arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_txdelta_op_t_action_code_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_txdelta_op_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_op_t, svn_argnum_obj0);
+ arg1 = (struct svn_txdelta_op_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_op_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3697,13 +3659,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_txdelta_op_t_action_code_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_txdelta_op_t *arg1 = (svn_txdelta_op_t *) 0 ;
+ struct svn_txdelta_op_t *arg1 = (struct svn_txdelta_op_t *) 0 ;
PyObject * obj0 = 0 ;
enum svn_delta_action result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_txdelta_op_t_action_code_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_txdelta_op_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_op_t, svn_argnum_obj0);
+ arg1 = (struct svn_txdelta_op_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_op_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3718,14 +3680,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_txdelta_op_t_offset_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_txdelta_op_t *arg1 = (svn_txdelta_op_t *) 0 ;
+ struct svn_txdelta_op_t *arg1 = (struct svn_txdelta_op_t *) 0 ;
apr_size_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_txdelta_op_t_offset_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_txdelta_op_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_op_t, svn_argnum_obj0);
+ arg1 = (struct svn_txdelta_op_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_op_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3746,13 +3708,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_txdelta_op_t_offset_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_txdelta_op_t *arg1 = (svn_txdelta_op_t *) 0 ;
+ struct svn_txdelta_op_t *arg1 = (struct svn_txdelta_op_t *) 0 ;
PyObject * obj0 = 0 ;
apr_size_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_txdelta_op_t_offset_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_txdelta_op_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_op_t, svn_argnum_obj0);
+ arg1 = (struct svn_txdelta_op_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_op_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3767,14 +3729,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_txdelta_op_t_length_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_txdelta_op_t *arg1 = (svn_txdelta_op_t *) 0 ;
+ struct svn_txdelta_op_t *arg1 = (struct svn_txdelta_op_t *) 0 ;
apr_size_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_txdelta_op_t_length_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_txdelta_op_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_op_t, svn_argnum_obj0);
+ arg1 = (struct svn_txdelta_op_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_op_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3795,13 +3757,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_txdelta_op_t_length_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_txdelta_op_t *arg1 = (svn_txdelta_op_t *) 0 ;
+ struct svn_txdelta_op_t *arg1 = (struct svn_txdelta_op_t *) 0 ;
PyObject * obj0 = 0 ;
apr_size_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_txdelta_op_t_length_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_txdelta_op_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_op_t, svn_argnum_obj0);
+ arg1 = (struct svn_txdelta_op_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_op_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3816,13 +3778,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_txdelta_op_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_txdelta_op_t *result = 0 ;
+ struct svn_txdelta_op_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_txdelta_op_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_txdelta_op_t *)calloc(1, sizeof(svn_txdelta_op_t));
+ result = (struct svn_txdelta_op_t *)calloc(1, sizeof(struct svn_txdelta_op_t));
svn_swig_py_acquire_py_lock();
@@ -3837,12 +3799,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_txdelta_op_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_txdelta_op_t *arg1 = (svn_txdelta_op_t *) 0 ;
+ struct svn_txdelta_op_t *arg1 = (struct svn_txdelta_op_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_txdelta_op_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_txdelta_op_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_op_t, svn_argnum_obj0);
+ arg1 = (struct svn_txdelta_op_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_op_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3871,14 +3833,14 @@ SWIGINTERN PyObject *svn_txdelta_op_t_swigregister(PyObject *SWIGUNUSEDPARM(self
SWIGINTERN PyObject *_wrap_svn_txdelta_window_t_sview_offset_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
svn_filesize_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_txdelta_window_t_sview_offset_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_txdelta_window_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_window_t, svn_argnum_obj0);
+ arg1 = (struct svn_txdelta_window_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_window_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3894,13 +3856,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_txdelta_window_t_sview_offset_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
PyObject * obj0 = 0 ;
svn_filesize_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_txdelta_window_t_sview_offset_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_txdelta_window_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_window_t, svn_argnum_obj0);
+ arg1 = (struct svn_txdelta_window_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_window_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3915,14 +3877,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_txdelta_window_t_sview_len_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
apr_size_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_txdelta_window_t_sview_len_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_txdelta_window_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_window_t, svn_argnum_obj0);
+ arg1 = (struct svn_txdelta_window_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_window_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3943,13 +3905,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_txdelta_window_t_sview_len_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
PyObject * obj0 = 0 ;
apr_size_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_txdelta_window_t_sview_len_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_txdelta_window_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_window_t, svn_argnum_obj0);
+ arg1 = (struct svn_txdelta_window_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_window_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3964,14 +3926,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_txdelta_window_t_tview_len_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
apr_size_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_txdelta_window_t_tview_len_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_txdelta_window_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_window_t, svn_argnum_obj0);
+ arg1 = (struct svn_txdelta_window_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_window_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3992,13 +3954,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_txdelta_window_t_tview_len_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
PyObject * obj0 = 0 ;
apr_size_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_txdelta_window_t_tview_len_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_txdelta_window_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_window_t, svn_argnum_obj0);
+ arg1 = (struct svn_txdelta_window_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_window_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4013,14 +3975,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_txdelta_window_t_num_ops_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
int arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_txdelta_window_t_num_ops_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_txdelta_window_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_window_t, svn_argnum_obj0);
+ arg1 = (struct svn_txdelta_window_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_window_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4041,13 +4003,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_txdelta_window_t_num_ops_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
PyObject * obj0 = 0 ;
int result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_txdelta_window_t_num_ops_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_txdelta_window_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_window_t, svn_argnum_obj0);
+ arg1 = (struct svn_txdelta_window_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_window_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4062,14 +4024,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_txdelta_window_t_src_ops_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
int arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_txdelta_window_t_src_ops_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_txdelta_window_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_window_t, svn_argnum_obj0);
+ arg1 = (struct svn_txdelta_window_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_window_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4090,13 +4052,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_txdelta_window_t_src_ops_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
PyObject * obj0 = 0 ;
int result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_txdelta_window_t_src_ops_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_txdelta_window_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_window_t, svn_argnum_obj0);
+ arg1 = (struct svn_txdelta_window_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_window_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4111,13 +4073,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_txdelta_window_t_new_data_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
PyObject * obj0 = 0 ;
svn_string_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_txdelta_window_t_new_data_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_txdelta_window_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_window_t, svn_argnum_obj0);
+ arg1 = (struct svn_txdelta_window_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_window_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4132,15 +4094,65 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_txdelta_window_t__ops_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
+ int *arg2 = (int *) 0 ;
+ svn_txdelta_op_t **arg3 = (svn_txdelta_op_t **) 0 ;
+ int temp2 ;
+ int res2 = SWIG_TMPOBJ ;
+ svn_txdelta_op_t *temp3 ;
+ PyObject * obj0 = 0 ;
+
+ arg2 = &temp2;
+ arg3 = &temp3;
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_txdelta_window_t__ops_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_txdelta_window_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_window_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ svn_txdelta_window_t__ops_get(arg1,arg2,arg3);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_Py_Void();
+ {
+ apr_pool_t *parent_pool;
+ PyObject *parent_py_pool;
+ PyObject *ops_list;
+
+ if (svn_swig_py_get_parent_pool(args, SWIGTYPE_p_apr_pool_t,
+ &parent_py_pool, &parent_pool))
+ SWIG_fail;
+
+ ops_list = svn_swig_py_convert_txdelta_op_c_array(*arg2, *arg3,
+ SWIGTYPE_p_svn_txdelta_op_t, parent_py_pool);
+
+ if (!ops_list) SWIG_fail;
+
+ resultobj = SWIG_Python_AppendOutput(resultobj, ops_list);
+ }
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_new_svn_txdelta_window_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_txdelta_window_t *result = 0 ;
+ struct svn_txdelta_window_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_txdelta_window_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_txdelta_window_t *)calloc(1, sizeof(svn_txdelta_window_t));
+ result = (struct svn_txdelta_window_t *)calloc(1, sizeof(struct svn_txdelta_window_t));
svn_swig_py_acquire_py_lock();
@@ -4155,12 +4167,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_txdelta_window_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_txdelta_window_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_txdelta_window_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_window_t, svn_argnum_obj0);
+ arg1 = (struct svn_txdelta_window_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_txdelta_window_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4350,8 +4362,6 @@ SWIGINTERN PyObject *_wrap_svn_txdelta_run(PyObject *SWIGUNUSEDPARM(self), PyObj
apr_pool_t *arg10 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool = NULL ;
PyObject *_global_py_pool = NULL ;
- void *argp5 ;
- int res5 = 0 ;
svn_checksum_t *temp6 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
@@ -4396,14 +4406,9 @@ SWIGINTERN PyObject *_wrap_svn_txdelta_run(PyObject *SWIGUNUSEDPARM(self), PyObj
}
}
{
- res5 = SWIG_ConvertPtr(obj4, &argp5, SWIGTYPE_p_svn_checksum_kind_t, 0 );
- if (!SWIG_IsOK(res5)) {
- SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "svn_txdelta_run" "', argument " "5"" of type '" "svn_checksum_kind_t""'");
- }
- if (!argp5) {
- SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "svn_txdelta_run" "', argument " "5"" of type '" "svn_checksum_kind_t""'");
- } else {
- arg5 = *((svn_checksum_kind_t *)(argp5));
+ arg5 = (svn_checksum_kind_t)SWIG_As_long (obj4);
+ if (SWIG_arg_fail(svn_argnum_obj4)) {
+ SWIG_fail;
}
}
{
@@ -4643,6 +4648,74 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_txdelta2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_txdelta_stream_t **arg1 = (svn_txdelta_stream_t **) 0 ;
+ svn_stream_t *arg2 = (svn_stream_t *) 0 ;
+ svn_stream_t *arg3 = (svn_stream_t *) 0 ;
+ svn_boolean_t arg4 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_txdelta_stream_t *temp1 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg5 = _global_pool;
+ arg1 = &temp1;
+ if (!PyArg_ParseTuple(args,(char *)"OOO|O:svn_txdelta2",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+ {
+ arg2 = svn_swig_py_make_stream (obj0, _global_pool);
+ }
+ {
+ arg3 = svn_swig_py_make_stream (obj1, _global_pool);
+ }
+ {
+ arg4 = (svn_boolean_t)SWIG_As_long (obj2);
+ if (SWIG_arg_fail(svn_argnum_obj2)) {
+ SWIG_fail;
+ }
+ }
+ if (obj3) {
+ /* Verify that the user supplied a valid pool */
+ if (obj3 != Py_None && obj3 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj3);
+ SWIG_arg_fail(svn_argnum_obj3);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ svn_txdelta2(arg1,arg2,arg3,arg4,arg5);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_Py_Void();
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg1, SWIGTYPE_p_svn_txdelta_stream_t,
+ _global_py_pool, args))
+
+ ;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_txdelta(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_txdelta_stream_t **arg1 = (svn_txdelta_stream_t **) 0 ;
@@ -5022,6 +5095,94 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_txdelta_send_contents(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ unsigned char *arg1 = (unsigned char *) 0 ;
+ apr_size_t arg2 ;
+ svn_txdelta_window_handler_t arg3 = (svn_txdelta_window_handler_t) 0 ;
+ void *arg4 = (void *) 0 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg5 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OOOO|O:svn_txdelta_send_contents",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+ {
+ arg1 = (unsigned char *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_unsigned_char, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg2 = (apr_size_t)SWIG_As_unsigned_SS_long (obj1);
+ if (SWIG_arg_fail(svn_argnum_obj1)) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_txdelta_window_handler_t * tmp =
+ svn_swig_MustGetPtr(obj2, SWIGTYPE_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t, svn_argnum_obj2);
+ if (tmp == NULL || PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ arg3 = *tmp;
+ }
+ {
+ if (obj3 == Py_None) {
+ arg4 = NULL;
+ } else if (SWIG_ConvertPtr(obj3, (void **) &arg4, 0, 0) == -1) {
+ arg4 = (void *) obj3;
+ PyErr_Clear();
+ }
+ }
+ if (obj4) {
+ /* Verify that the user supplied a valid pool */
+ if (obj4 != Py_None && obj4 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj4);
+ SWIG_arg_fail(svn_argnum_obj4);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_txdelta_send_contents((unsigned char const *)arg1,arg2,arg3,arg4,arg5);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_txdelta_apply(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_stream_t *arg1 = (svn_stream_t *) 0 ;
@@ -5556,14 +5717,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_set_target_revision_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_revnum_t,apr_pool_t *) = (svn_error_t *(*)(void *,svn_revnum_t,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_delta_editor_t_set_target_revision_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5584,13 +5745,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_set_target_revision_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,svn_revnum_t,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_delta_editor_t_set_target_revision_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5605,14 +5766,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_open_root_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_revnum_t,apr_pool_t *,void **) = (svn_error_t *(*)(void *,svn_revnum_t,apr_pool_t *,void **)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_delta_editor_t_open_root_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5633,13 +5794,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_open_root_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,svn_revnum_t,apr_pool_t *,void **) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_delta_editor_t_open_root_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5654,14 +5815,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_delete_entry_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(char const *,svn_revnum_t,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,svn_revnum_t,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_delta_editor_t_delete_entry_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5682,13 +5843,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_delete_entry_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(char const *,svn_revnum_t,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_delta_editor_t_delete_entry_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5703,14 +5864,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_add_directory_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(char const *,void *,char const *,svn_revnum_t,apr_pool_t *,void **) = (svn_error_t *(*)(char const *,void *,char const *,svn_revnum_t,apr_pool_t *,void **)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_delta_editor_t_add_directory_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5731,13 +5892,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_add_directory_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(char const *,void *,char const *,svn_revnum_t,apr_pool_t *,void **) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_delta_editor_t_add_directory_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5752,14 +5913,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_open_directory_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(char const *,void *,svn_revnum_t,apr_pool_t *,void **) = (svn_error_t *(*)(char const *,void *,svn_revnum_t,apr_pool_t *,void **)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_delta_editor_t_open_directory_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5780,13 +5941,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_open_directory_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(char const *,void *,svn_revnum_t,apr_pool_t *,void **) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_delta_editor_t_open_directory_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5801,14 +5962,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_change_dir_prop_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_string_t const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_string_t const *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_delta_editor_t_change_dir_prop_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5829,13 +5990,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_change_dir_prop_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,char const *,svn_string_t const *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_delta_editor_t_change_dir_prop_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5850,14 +6011,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_close_directory_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_delta_editor_t_close_directory_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5878,13 +6039,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_close_directory_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_delta_editor_t_close_directory_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5899,14 +6060,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_absent_directory_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(char const *,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_delta_editor_t_absent_directory_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5927,13 +6088,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_absent_directory_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(char const *,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_delta_editor_t_absent_directory_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5948,14 +6109,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_add_file_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(char const *,void *,char const *,svn_revnum_t,apr_pool_t *,void **) = (svn_error_t *(*)(char const *,void *,char const *,svn_revnum_t,apr_pool_t *,void **)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_delta_editor_t_add_file_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5976,13 +6137,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_add_file_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(char const *,void *,char const *,svn_revnum_t,apr_pool_t *,void **) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_delta_editor_t_add_file_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5997,14 +6158,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_open_file_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(char const *,void *,svn_revnum_t,apr_pool_t *,void **) = (svn_error_t *(*)(char const *,void *,svn_revnum_t,apr_pool_t *,void **)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_delta_editor_t_open_file_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6025,13 +6186,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_open_file_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(char const *,void *,svn_revnum_t,apr_pool_t *,void **) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_delta_editor_t_open_file_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6046,14 +6207,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_apply_textdelta_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,apr_pool_t *,svn_txdelta_window_handler_t *,void **) = (svn_error_t *(*)(void *,char const *,apr_pool_t *,svn_txdelta_window_handler_t *,void **)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_delta_editor_t_apply_textdelta_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6074,13 +6235,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_apply_textdelta_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,char const *,apr_pool_t *,svn_txdelta_window_handler_t *,void **) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_delta_editor_t_apply_textdelta_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6095,14 +6256,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_change_file_prop_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_string_t const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_string_t const *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_delta_editor_t_change_file_prop_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6123,13 +6284,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_change_file_prop_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,char const *,svn_string_t const *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_delta_editor_t_change_file_prop_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6144,14 +6305,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_close_file_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_delta_editor_t_close_file_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6172,13 +6333,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_close_file_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,char const *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_delta_editor_t_close_file_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6193,14 +6354,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_absent_file_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(char const *,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_delta_editor_t_absent_file_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6221,13 +6382,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_absent_file_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(char const *,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_delta_editor_t_absent_file_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6242,14 +6403,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_close_edit_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_delta_editor_t_close_edit_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6270,13 +6431,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_close_edit_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_delta_editor_t_close_edit_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6291,14 +6452,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_abort_edit_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_delta_editor_t_abort_edit_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6319,13 +6480,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_delta_editor_t_abort_edit_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_delta_editor_t_abort_edit_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6340,13 +6501,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_delta_editor_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *result = 0 ;
+ struct svn_delta_editor_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_delta_editor_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_delta_editor_t *)calloc(1, sizeof(svn_delta_editor_t));
+ result = (struct svn_delta_editor_t *)calloc(1, sizeof(struct svn_delta_editor_t));
svn_swig_py_acquire_py_lock();
@@ -6361,12 +6522,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_delta_editor_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_delta_editor_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ arg1 = (struct svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6683,6 +6844,102 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_delta_path_driver2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ void *arg2 = (void *) 0 ;
+ apr_array_header_t *arg3 = (apr_array_header_t *) 0 ;
+ svn_boolean_t arg4 ;
+ svn_delta_path_driver_cb_func_t arg5 = (svn_delta_path_driver_cb_func_t) 0 ;
+ void *arg6 = (void *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj5 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg7 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OOOOO|O:svn_delta_path_driver2",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+ {
+ arg1 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ if (obj1 == Py_None) {
+ arg2 = NULL;
+ } else if (SWIG_ConvertPtr(obj1, (void **) &arg2, 0, 0) == -1) {
+ arg2 = (void *) obj1;
+ PyErr_Clear();
+ }
+ }
+ {
+ arg3 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj2,
+ sizeof(const char *),
+ svn_swig_py_unwrap_string,
+ NULL,
+ _global_pool);
+ if (PyErr_Occurred())
+ SWIG_fail;
+ }
+ {
+ arg4 = (svn_boolean_t)SWIG_As_long (obj3);
+ if (SWIG_arg_fail(svn_argnum_obj3)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg5 = svn_swig_py_delta_path_driver_cb_func;
+ arg6 = obj4;
+ }
+ if (obj5) {
+ /* Verify that the user supplied a valid pool */
+ if (obj5 != Py_None && obj5 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj5);
+ SWIG_arg_fail(svn_argnum_obj5);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_delta_path_driver2((struct svn_delta_editor_t const *)arg1,arg2,(apr_array_header_t const *)arg3,arg4,arg5,arg6,arg7);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_delta_path_driver(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
@@ -8738,9 +8995,8 @@ SWIGINTERN PyObject *svn_file_rev_handler_old_t_swigregister(PyObject *SWIGUNUSE
static PyMethodDef SwigMethods[] = {
{ (char *)"SWIG_PyInstanceMethod_New", (PyCFunction)SWIG_PyInstanceMethod_New, METH_O, NULL},
- { (char *)"svn_swig_py_make_editor", _wrap_svn_swig_py_make_editor, METH_VARARGS, (char *)"svn_swig_py_make_editor(PyObject py_editor, apr_pool_t pool)"},
- { (char *)"svn_txdelta_window_t_ops_get", _wrap_svn_txdelta_window_t_ops_get, METH_VARARGS, (char *)"svn_txdelta_window_t_ops_get(PyObject window_ob) -> PyObject"},
- { (char *)"svn_delta_version", _wrap_svn_delta_version, METH_VARARGS, (char *)"svn_delta_version() -> svn_version_t"},
+ { (char *)"svn_swig_py_make_editor", _wrap_svn_swig_py_make_editor, METH_VARARGS, (char *)"svn_swig_py_make_editor(PyObject * py_editor, apr_pool_t pool)"},
+ { (char *)"svn_delta_version", _wrap_svn_delta_version, METH_VARARGS, (char *)"svn_delta_version() -> svn_version_t const *"},
{ (char *)"svn_txdelta_op_t_action_code_set", _wrap_svn_txdelta_op_t_action_code_set, METH_VARARGS, (char *)"svn_txdelta_op_t_action_code_set(svn_txdelta_op_t self, enum svn_delta_action action_code)"},
{ (char *)"svn_txdelta_op_t_action_code_get", _wrap_svn_txdelta_op_t_action_code_get, METH_VARARGS, (char *)"svn_txdelta_op_t_action_code_get(svn_txdelta_op_t self) -> enum svn_delta_action"},
{ (char *)"svn_txdelta_op_t_offset_set", _wrap_svn_txdelta_op_t_offset_set, METH_VARARGS, (char *)"svn_txdelta_op_t_offset_set(svn_txdelta_op_t self, apr_size_t offset)"},
@@ -8760,195 +9016,164 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_txdelta_window_t_num_ops_get", _wrap_svn_txdelta_window_t_num_ops_get, METH_VARARGS, (char *)"svn_txdelta_window_t_num_ops_get(svn_txdelta_window_t self) -> int"},
{ (char *)"svn_txdelta_window_t_src_ops_set", _wrap_svn_txdelta_window_t_src_ops_set, METH_VARARGS, (char *)"svn_txdelta_window_t_src_ops_set(svn_txdelta_window_t self, int src_ops)"},
{ (char *)"svn_txdelta_window_t_src_ops_get", _wrap_svn_txdelta_window_t_src_ops_get, METH_VARARGS, (char *)"svn_txdelta_window_t_src_ops_get(svn_txdelta_window_t self) -> int"},
- { (char *)"svn_txdelta_window_t_new_data_get", _wrap_svn_txdelta_window_t_new_data_get, METH_VARARGS, (char *)"svn_txdelta_window_t_new_data_get(svn_txdelta_window_t self) -> svn_string_t"},
+ { (char *)"svn_txdelta_window_t_new_data_get", _wrap_svn_txdelta_window_t_new_data_get, METH_VARARGS, (char *)"svn_txdelta_window_t_new_data_get(svn_txdelta_window_t self) -> svn_string_t const *"},
+ { (char *)"svn_txdelta_window_t__ops_get", _wrap_svn_txdelta_window_t__ops_get, METH_VARARGS, (char *)"svn_txdelta_window_t__ops_get(svn_txdelta_window_t self)"},
{ (char *)"new_svn_txdelta_window_t", _wrap_new_svn_txdelta_window_t, METH_VARARGS, (char *)"new_svn_txdelta_window_t() -> svn_txdelta_window_t"},
{ (char *)"delete_svn_txdelta_window_t", _wrap_delete_svn_txdelta_window_t, METH_VARARGS, (char *)"delete_svn_txdelta_window_t(svn_txdelta_window_t self)"},
{ (char *)"svn_txdelta_window_t_swigregister", svn_txdelta_window_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_txdelta_window_dup", _wrap_svn_txdelta_window_dup, METH_VARARGS, (char *)"svn_txdelta_window_dup(svn_txdelta_window_t window, apr_pool_t pool) -> svn_txdelta_window_t"},
- { (char *)"svn_txdelta_compose_windows", _wrap_svn_txdelta_compose_windows, METH_VARARGS, (char *)"\n"
- "svn_txdelta_compose_windows(svn_txdelta_window_t window_A, svn_txdelta_window_t window_B, \n"
- " apr_pool_t pool) -> svn_txdelta_window_t\n"
- ""},
- { (char *)"svn_txdelta_apply_instructions", _wrap_svn_txdelta_apply_instructions, METH_VARARGS, (char *)"svn_txdelta_apply_instructions(svn_txdelta_window_t window, char sbuf, char tbuf)"},
+ { (char *)"svn_txdelta_compose_windows", _wrap_svn_txdelta_compose_windows, METH_VARARGS, (char *)"svn_txdelta_compose_windows(svn_txdelta_window_t window_A, svn_txdelta_window_t window_B, apr_pool_t pool) -> svn_txdelta_window_t"},
+ { (char *)"svn_txdelta_apply_instructions", _wrap_svn_txdelta_apply_instructions, METH_VARARGS, (char *)"svn_txdelta_apply_instructions(svn_txdelta_window_t window, char const * sbuf, char * tbuf)"},
{ (char *)"svn_txdelta_run", _wrap_svn_txdelta_run, METH_VARARGS, (char *)"\n"
- "svn_txdelta_run(svn_stream_t source, svn_stream_t target, svn_txdelta_window_handler_t handler, \n"
- " void handler_baton, \n"
- " svn_checksum_kind_t checksum_kind, svn_cancel_func_t cancel_func, \n"
- " apr_pool_t result_pool, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_txdelta_run(svn_stream_t * source, svn_stream_t * target, svn_txdelta_window_handler_t handler, \n"
+ " void * handler_baton, svn_checksum_kind_t checksum_kind, svn_cancel_func_t cancel_func, \n"
+ " apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_txdelta_stream_create", _wrap_svn_txdelta_stream_create, METH_VARARGS, (char *)"\n"
- "svn_txdelta_stream_create(void baton, svn_txdelta_next_window_fn_t next_window, \n"
- " svn_txdelta_md5_digest_fn_t md5_digest, apr_pool_t pool) -> svn_txdelta_stream_t\n"
+ "svn_txdelta_stream_create(void * baton, svn_txdelta_next_window_fn_t next_window, svn_txdelta_md5_digest_fn_t md5_digest, \n"
+ " apr_pool_t pool) -> svn_txdelta_stream_t *\n"
""},
- { (char *)"svn_txdelta_next_window", _wrap_svn_txdelta_next_window, METH_VARARGS, (char *)"svn_txdelta_next_window(svn_txdelta_stream_t stream, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_txdelta_md5_digest", _wrap_svn_txdelta_md5_digest, METH_VARARGS, (char *)"svn_txdelta_md5_digest(svn_txdelta_stream_t stream) -> unsigned char"},
- { (char *)"svn_txdelta", _wrap_svn_txdelta, METH_VARARGS, (char *)"svn_txdelta(svn_stream_t source, svn_stream_t target, apr_pool_t pool)"},
+ { (char *)"svn_txdelta_next_window", _wrap_svn_txdelta_next_window, METH_VARARGS, (char *)"svn_txdelta_next_window(svn_txdelta_stream_t * stream, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_txdelta_md5_digest", _wrap_svn_txdelta_md5_digest, METH_VARARGS, (char *)"svn_txdelta_md5_digest(svn_txdelta_stream_t * stream) -> unsigned char const *"},
+ { (char *)"svn_txdelta2", _wrap_svn_txdelta2, METH_VARARGS, (char *)"svn_txdelta2(svn_stream_t * source, svn_stream_t * target, svn_boolean_t calculate_checksum, apr_pool_t pool)"},
+ { (char *)"svn_txdelta", _wrap_svn_txdelta, METH_VARARGS, (char *)"svn_txdelta(svn_stream_t * source, svn_stream_t * target, apr_pool_t pool)"},
{ (char *)"svn_txdelta_target_push", _wrap_svn_txdelta_target_push, METH_VARARGS, (char *)"\n"
- "svn_txdelta_target_push(svn_txdelta_window_handler_t handler, void handler_baton, \n"
- " svn_stream_t source, apr_pool_t pool) -> svn_stream_t\n"
+ "svn_txdelta_target_push(svn_txdelta_window_handler_t handler, void * handler_baton, svn_stream_t * source, \n"
+ " apr_pool_t pool) -> svn_stream_t *\n"
""},
{ (char *)"svn_txdelta_send_string", _wrap_svn_txdelta_send_string, METH_VARARGS, (char *)"\n"
- "svn_txdelta_send_string(svn_string_t string, svn_txdelta_window_handler_t handler, \n"
- " void handler_baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_txdelta_send_string(svn_string_t const * string, svn_txdelta_window_handler_t handler, void * handler_baton, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_txdelta_send_stream", _wrap_svn_txdelta_send_stream, METH_VARARGS, (char *)"\n"
- "svn_txdelta_send_stream(svn_stream_t stream, svn_txdelta_window_handler_t handler, \n"
- " void handler_baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_txdelta_send_stream(svn_stream_t * stream, svn_txdelta_window_handler_t handler, void * handler_baton, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_txdelta_send_txstream", _wrap_svn_txdelta_send_txstream, METH_VARARGS, (char *)"\n"
- "svn_txdelta_send_txstream(svn_txdelta_stream_t txstream, svn_txdelta_window_handler_t handler, \n"
- " void handler_baton, apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_txdelta_apply", _wrap_svn_txdelta_apply, METH_VARARGS, (char *)"\n"
- "svn_txdelta_apply(svn_stream_t source, svn_stream_t target, char error_info, \n"
- " apr_pool_t pool)\n"
+ "svn_txdelta_send_txstream(svn_txdelta_stream_t * txstream, svn_txdelta_window_handler_t handler, void * handler_baton, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_txdelta_to_svndiff3", _wrap_svn_txdelta_to_svndiff3, METH_VARARGS, (char *)"\n"
- "svn_txdelta_to_svndiff3(svn_stream_t output, int svndiff_version, int compression_level, \n"
- " apr_pool_t pool)\n"
+ { (char *)"svn_txdelta_send_contents", _wrap_svn_txdelta_send_contents, METH_VARARGS, (char *)"\n"
+ "svn_txdelta_send_contents(unsigned char const * contents, apr_size_t len, svn_txdelta_window_handler_t handler, \n"
+ " void * handler_baton, apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_txdelta_to_svndiff2", _wrap_svn_txdelta_to_svndiff2, METH_VARARGS, (char *)"svn_txdelta_to_svndiff2(svn_stream_t output, int svndiff_version, apr_pool_t pool)"},
- { (char *)"svn_txdelta_to_svndiff", _wrap_svn_txdelta_to_svndiff, METH_VARARGS, (char *)"svn_txdelta_to_svndiff(svn_stream_t output, apr_pool_t pool)"},
+ { (char *)"svn_txdelta_apply", _wrap_svn_txdelta_apply, METH_VARARGS, (char *)"svn_txdelta_apply(svn_stream_t * source, svn_stream_t * target, char const * error_info, apr_pool_t pool)"},
+ { (char *)"svn_txdelta_to_svndiff3", _wrap_svn_txdelta_to_svndiff3, METH_VARARGS, (char *)"svn_txdelta_to_svndiff3(svn_stream_t * output, int svndiff_version, int compression_level, apr_pool_t pool)"},
+ { (char *)"svn_txdelta_to_svndiff2", _wrap_svn_txdelta_to_svndiff2, METH_VARARGS, (char *)"svn_txdelta_to_svndiff2(svn_stream_t * output, int svndiff_version, apr_pool_t pool)"},
+ { (char *)"svn_txdelta_to_svndiff", _wrap_svn_txdelta_to_svndiff, METH_VARARGS, (char *)"svn_txdelta_to_svndiff(svn_stream_t * output, apr_pool_t pool)"},
{ (char *)"svn_txdelta_parse_svndiff", _wrap_svn_txdelta_parse_svndiff, METH_VARARGS, (char *)"\n"
- "svn_txdelta_parse_svndiff(svn_txdelta_window_handler_t handler, void handler_baton, \n"
- " svn_boolean_t error_on_early_close, apr_pool_t pool) -> svn_stream_t\n"
+ "svn_txdelta_parse_svndiff(svn_txdelta_window_handler_t handler, void * handler_baton, svn_boolean_t error_on_early_close, \n"
+ " apr_pool_t pool) -> svn_stream_t *\n"
""},
- { (char *)"svn_txdelta_read_svndiff_window", _wrap_svn_txdelta_read_svndiff_window, METH_VARARGS, (char *)"svn_txdelta_read_svndiff_window(svn_stream_t stream, int svndiff_version, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_txdelta_read_svndiff_window", _wrap_svn_txdelta_read_svndiff_window, METH_VARARGS, (char *)"svn_txdelta_read_svndiff_window(svn_stream_t * stream, int svndiff_version, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_txdelta_skip_svndiff_window", _wrap_svn_txdelta_skip_svndiff_window, METH_VARARGS, (char *)"svn_txdelta_skip_svndiff_window(apr_file_t file, int svndiff_version, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_delta_editor_t_set_target_revision_set", _wrap_svn_delta_editor_t_set_target_revision_set, METH_VARARGS, (char *)"svn_delta_editor_t_set_target_revision_set(svn_delta_editor_t self, svn_error_t set_target_revision)"},
- { (char *)"svn_delta_editor_t_set_target_revision_get", _wrap_svn_delta_editor_t_set_target_revision_get, METH_VARARGS, (char *)"svn_delta_editor_t_set_target_revision_get(svn_delta_editor_t self) -> svn_error_t"},
- { (char *)"svn_delta_editor_t_open_root_set", _wrap_svn_delta_editor_t_open_root_set, METH_VARARGS, (char *)"svn_delta_editor_t_open_root_set(svn_delta_editor_t self, svn_error_t open_root)"},
- { (char *)"svn_delta_editor_t_open_root_get", _wrap_svn_delta_editor_t_open_root_get, METH_VARARGS, (char *)"svn_delta_editor_t_open_root_get(svn_delta_editor_t self) -> svn_error_t"},
- { (char *)"svn_delta_editor_t_delete_entry_set", _wrap_svn_delta_editor_t_delete_entry_set, METH_VARARGS, (char *)"svn_delta_editor_t_delete_entry_set(svn_delta_editor_t self, svn_error_t delete_entry)"},
- { (char *)"svn_delta_editor_t_delete_entry_get", _wrap_svn_delta_editor_t_delete_entry_get, METH_VARARGS, (char *)"svn_delta_editor_t_delete_entry_get(svn_delta_editor_t self) -> svn_error_t"},
- { (char *)"svn_delta_editor_t_add_directory_set", _wrap_svn_delta_editor_t_add_directory_set, METH_VARARGS, (char *)"svn_delta_editor_t_add_directory_set(svn_delta_editor_t self, svn_error_t add_directory)"},
- { (char *)"svn_delta_editor_t_add_directory_get", _wrap_svn_delta_editor_t_add_directory_get, METH_VARARGS, (char *)"svn_delta_editor_t_add_directory_get(svn_delta_editor_t self) -> svn_error_t"},
- { (char *)"svn_delta_editor_t_open_directory_set", _wrap_svn_delta_editor_t_open_directory_set, METH_VARARGS, (char *)"svn_delta_editor_t_open_directory_set(svn_delta_editor_t self, svn_error_t open_directory)"},
- { (char *)"svn_delta_editor_t_open_directory_get", _wrap_svn_delta_editor_t_open_directory_get, METH_VARARGS, (char *)"svn_delta_editor_t_open_directory_get(svn_delta_editor_t self) -> svn_error_t"},
- { (char *)"svn_delta_editor_t_change_dir_prop_set", _wrap_svn_delta_editor_t_change_dir_prop_set, METH_VARARGS, (char *)"svn_delta_editor_t_change_dir_prop_set(svn_delta_editor_t self, svn_error_t change_dir_prop)"},
- { (char *)"svn_delta_editor_t_change_dir_prop_get", _wrap_svn_delta_editor_t_change_dir_prop_get, METH_VARARGS, (char *)"svn_delta_editor_t_change_dir_prop_get(svn_delta_editor_t self) -> svn_error_t"},
- { (char *)"svn_delta_editor_t_close_directory_set", _wrap_svn_delta_editor_t_close_directory_set, METH_VARARGS, (char *)"svn_delta_editor_t_close_directory_set(svn_delta_editor_t self, svn_error_t close_directory)"},
- { (char *)"svn_delta_editor_t_close_directory_get", _wrap_svn_delta_editor_t_close_directory_get, METH_VARARGS, (char *)"svn_delta_editor_t_close_directory_get(svn_delta_editor_t self) -> svn_error_t"},
- { (char *)"svn_delta_editor_t_absent_directory_set", _wrap_svn_delta_editor_t_absent_directory_set, METH_VARARGS, (char *)"svn_delta_editor_t_absent_directory_set(svn_delta_editor_t self, svn_error_t absent_directory)"},
- { (char *)"svn_delta_editor_t_absent_directory_get", _wrap_svn_delta_editor_t_absent_directory_get, METH_VARARGS, (char *)"svn_delta_editor_t_absent_directory_get(svn_delta_editor_t self) -> svn_error_t"},
- { (char *)"svn_delta_editor_t_add_file_set", _wrap_svn_delta_editor_t_add_file_set, METH_VARARGS, (char *)"svn_delta_editor_t_add_file_set(svn_delta_editor_t self, svn_error_t add_file)"},
- { (char *)"svn_delta_editor_t_add_file_get", _wrap_svn_delta_editor_t_add_file_get, METH_VARARGS, (char *)"svn_delta_editor_t_add_file_get(svn_delta_editor_t self) -> svn_error_t"},
- { (char *)"svn_delta_editor_t_open_file_set", _wrap_svn_delta_editor_t_open_file_set, METH_VARARGS, (char *)"svn_delta_editor_t_open_file_set(svn_delta_editor_t self, svn_error_t open_file)"},
- { (char *)"svn_delta_editor_t_open_file_get", _wrap_svn_delta_editor_t_open_file_get, METH_VARARGS, (char *)"svn_delta_editor_t_open_file_get(svn_delta_editor_t self) -> svn_error_t"},
- { (char *)"svn_delta_editor_t_apply_textdelta_set", _wrap_svn_delta_editor_t_apply_textdelta_set, METH_VARARGS, (char *)"svn_delta_editor_t_apply_textdelta_set(svn_delta_editor_t self, svn_error_t apply_textdelta)"},
- { (char *)"svn_delta_editor_t_apply_textdelta_get", _wrap_svn_delta_editor_t_apply_textdelta_get, METH_VARARGS, (char *)"svn_delta_editor_t_apply_textdelta_get(svn_delta_editor_t self) -> svn_error_t"},
- { (char *)"svn_delta_editor_t_change_file_prop_set", _wrap_svn_delta_editor_t_change_file_prop_set, METH_VARARGS, (char *)"svn_delta_editor_t_change_file_prop_set(svn_delta_editor_t self, svn_error_t change_file_prop)"},
- { (char *)"svn_delta_editor_t_change_file_prop_get", _wrap_svn_delta_editor_t_change_file_prop_get, METH_VARARGS, (char *)"svn_delta_editor_t_change_file_prop_get(svn_delta_editor_t self) -> svn_error_t"},
- { (char *)"svn_delta_editor_t_close_file_set", _wrap_svn_delta_editor_t_close_file_set, METH_VARARGS, (char *)"svn_delta_editor_t_close_file_set(svn_delta_editor_t self, svn_error_t close_file)"},
- { (char *)"svn_delta_editor_t_close_file_get", _wrap_svn_delta_editor_t_close_file_get, METH_VARARGS, (char *)"svn_delta_editor_t_close_file_get(svn_delta_editor_t self) -> svn_error_t"},
- { (char *)"svn_delta_editor_t_absent_file_set", _wrap_svn_delta_editor_t_absent_file_set, METH_VARARGS, (char *)"svn_delta_editor_t_absent_file_set(svn_delta_editor_t self, svn_error_t absent_file)"},
- { (char *)"svn_delta_editor_t_absent_file_get", _wrap_svn_delta_editor_t_absent_file_get, METH_VARARGS, (char *)"svn_delta_editor_t_absent_file_get(svn_delta_editor_t self) -> svn_error_t"},
- { (char *)"svn_delta_editor_t_close_edit_set", _wrap_svn_delta_editor_t_close_edit_set, METH_VARARGS, (char *)"svn_delta_editor_t_close_edit_set(svn_delta_editor_t self, svn_error_t close_edit)"},
- { (char *)"svn_delta_editor_t_close_edit_get", _wrap_svn_delta_editor_t_close_edit_get, METH_VARARGS, (char *)"svn_delta_editor_t_close_edit_get(svn_delta_editor_t self) -> svn_error_t"},
- { (char *)"svn_delta_editor_t_abort_edit_set", _wrap_svn_delta_editor_t_abort_edit_set, METH_VARARGS, (char *)"svn_delta_editor_t_abort_edit_set(svn_delta_editor_t self, svn_error_t abort_edit)"},
- { (char *)"svn_delta_editor_t_abort_edit_get", _wrap_svn_delta_editor_t_abort_edit_get, METH_VARARGS, (char *)"svn_delta_editor_t_abort_edit_get(svn_delta_editor_t self) -> svn_error_t"},
+ { (char *)"svn_delta_editor_t_set_target_revision_set", _wrap_svn_delta_editor_t_set_target_revision_set, METH_VARARGS, (char *)"svn_delta_editor_t_set_target_revision_set(svn_delta_editor_t self, svn_error_t *(*)(void *,svn_revnum_t,apr_pool_t *) set_target_revision)"},
+ { (char *)"svn_delta_editor_t_set_target_revision_get", _wrap_svn_delta_editor_t_set_target_revision_get, METH_VARARGS, (char *)"svn_delta_editor_t_set_target_revision_get(svn_delta_editor_t self) -> svn_error_t *(*)(void *,svn_revnum_t,apr_pool_t *)"},
+ { (char *)"svn_delta_editor_t_open_root_set", _wrap_svn_delta_editor_t_open_root_set, METH_VARARGS, (char *)"svn_delta_editor_t_open_root_set(svn_delta_editor_t self, svn_error_t *(*)(void *,svn_revnum_t,apr_pool_t *,void **) open_root)"},
+ { (char *)"svn_delta_editor_t_open_root_get", _wrap_svn_delta_editor_t_open_root_get, METH_VARARGS, (char *)"svn_delta_editor_t_open_root_get(svn_delta_editor_t self) -> svn_error_t *(*)(void *,svn_revnum_t,apr_pool_t *,void **)"},
+ { (char *)"svn_delta_editor_t_delete_entry_set", _wrap_svn_delta_editor_t_delete_entry_set, METH_VARARGS, (char *)"svn_delta_editor_t_delete_entry_set(svn_delta_editor_t self, svn_error_t *(*)(char const *,svn_revnum_t,void *,apr_pool_t *) delete_entry)"},
+ { (char *)"svn_delta_editor_t_delete_entry_get", _wrap_svn_delta_editor_t_delete_entry_get, METH_VARARGS, (char *)"svn_delta_editor_t_delete_entry_get(svn_delta_editor_t self) -> svn_error_t *(*)(char const *,svn_revnum_t,void *,apr_pool_t *)"},
+ { (char *)"svn_delta_editor_t_add_directory_set", _wrap_svn_delta_editor_t_add_directory_set, METH_VARARGS, (char *)"svn_delta_editor_t_add_directory_set(svn_delta_editor_t self, svn_error_t *(*)(char const *,void *,char const *,svn_revnum_t,apr_pool_t *,void **) add_directory)"},
+ { (char *)"svn_delta_editor_t_add_directory_get", _wrap_svn_delta_editor_t_add_directory_get, METH_VARARGS, (char *)"svn_delta_editor_t_add_directory_get(svn_delta_editor_t self) -> svn_error_t *(*)(char const *,void *,char const *,svn_revnum_t,apr_pool_t *,void **)"},
+ { (char *)"svn_delta_editor_t_open_directory_set", _wrap_svn_delta_editor_t_open_directory_set, METH_VARARGS, (char *)"svn_delta_editor_t_open_directory_set(svn_delta_editor_t self, svn_error_t *(*)(char const *,void *,svn_revnum_t,apr_pool_t *,void **) open_directory)"},
+ { (char *)"svn_delta_editor_t_open_directory_get", _wrap_svn_delta_editor_t_open_directory_get, METH_VARARGS, (char *)"svn_delta_editor_t_open_directory_get(svn_delta_editor_t self) -> svn_error_t *(*)(char const *,void *,svn_revnum_t,apr_pool_t *,void **)"},
+ { (char *)"svn_delta_editor_t_change_dir_prop_set", _wrap_svn_delta_editor_t_change_dir_prop_set, METH_VARARGS, (char *)"svn_delta_editor_t_change_dir_prop_set(svn_delta_editor_t self, svn_error_t *(*)(void *,char const *,svn_string_t const *,apr_pool_t *) change_dir_prop)"},
+ { (char *)"svn_delta_editor_t_change_dir_prop_get", _wrap_svn_delta_editor_t_change_dir_prop_get, METH_VARARGS, (char *)"svn_delta_editor_t_change_dir_prop_get(svn_delta_editor_t self) -> svn_error_t *(*)(void *,char const *,svn_string_t const *,apr_pool_t *)"},
+ { (char *)"svn_delta_editor_t_close_directory_set", _wrap_svn_delta_editor_t_close_directory_set, METH_VARARGS, (char *)"svn_delta_editor_t_close_directory_set(svn_delta_editor_t self, svn_error_t *(*)(void *,apr_pool_t *) close_directory)"},
+ { (char *)"svn_delta_editor_t_close_directory_get", _wrap_svn_delta_editor_t_close_directory_get, METH_VARARGS, (char *)"svn_delta_editor_t_close_directory_get(svn_delta_editor_t self) -> svn_error_t *(*)(void *,apr_pool_t *)"},
+ { (char *)"svn_delta_editor_t_absent_directory_set", _wrap_svn_delta_editor_t_absent_directory_set, METH_VARARGS, (char *)"svn_delta_editor_t_absent_directory_set(svn_delta_editor_t self, svn_error_t *(*)(char const *,void *,apr_pool_t *) absent_directory)"},
+ { (char *)"svn_delta_editor_t_absent_directory_get", _wrap_svn_delta_editor_t_absent_directory_get, METH_VARARGS, (char *)"svn_delta_editor_t_absent_directory_get(svn_delta_editor_t self) -> svn_error_t *(*)(char const *,void *,apr_pool_t *)"},
+ { (char *)"svn_delta_editor_t_add_file_set", _wrap_svn_delta_editor_t_add_file_set, METH_VARARGS, (char *)"svn_delta_editor_t_add_file_set(svn_delta_editor_t self, svn_error_t *(*)(char const *,void *,char const *,svn_revnum_t,apr_pool_t *,void **) add_file)"},
+ { (char *)"svn_delta_editor_t_add_file_get", _wrap_svn_delta_editor_t_add_file_get, METH_VARARGS, (char *)"svn_delta_editor_t_add_file_get(svn_delta_editor_t self) -> svn_error_t *(*)(char const *,void *,char const *,svn_revnum_t,apr_pool_t *,void **)"},
+ { (char *)"svn_delta_editor_t_open_file_set", _wrap_svn_delta_editor_t_open_file_set, METH_VARARGS, (char *)"svn_delta_editor_t_open_file_set(svn_delta_editor_t self, svn_error_t *(*)(char const *,void *,svn_revnum_t,apr_pool_t *,void **) open_file)"},
+ { (char *)"svn_delta_editor_t_open_file_get", _wrap_svn_delta_editor_t_open_file_get, METH_VARARGS, (char *)"svn_delta_editor_t_open_file_get(svn_delta_editor_t self) -> svn_error_t *(*)(char const *,void *,svn_revnum_t,apr_pool_t *,void **)"},
+ { (char *)"svn_delta_editor_t_apply_textdelta_set", _wrap_svn_delta_editor_t_apply_textdelta_set, METH_VARARGS, (char *)"svn_delta_editor_t_apply_textdelta_set(svn_delta_editor_t self, svn_error_t *(*)(void *,char const *,apr_pool_t *,svn_txdelta_window_handler_t *,void **) apply_textdelta)"},
+ { (char *)"svn_delta_editor_t_apply_textdelta_get", _wrap_svn_delta_editor_t_apply_textdelta_get, METH_VARARGS, (char *)"svn_delta_editor_t_apply_textdelta_get(svn_delta_editor_t self) -> svn_error_t *(*)(void *,char const *,apr_pool_t *,svn_txdelta_window_handler_t *,void **)"},
+ { (char *)"svn_delta_editor_t_change_file_prop_set", _wrap_svn_delta_editor_t_change_file_prop_set, METH_VARARGS, (char *)"svn_delta_editor_t_change_file_prop_set(svn_delta_editor_t self, svn_error_t *(*)(void *,char const *,svn_string_t const *,apr_pool_t *) change_file_prop)"},
+ { (char *)"svn_delta_editor_t_change_file_prop_get", _wrap_svn_delta_editor_t_change_file_prop_get, METH_VARARGS, (char *)"svn_delta_editor_t_change_file_prop_get(svn_delta_editor_t self) -> svn_error_t *(*)(void *,char const *,svn_string_t const *,apr_pool_t *)"},
+ { (char *)"svn_delta_editor_t_close_file_set", _wrap_svn_delta_editor_t_close_file_set, METH_VARARGS, (char *)"svn_delta_editor_t_close_file_set(svn_delta_editor_t self, svn_error_t *(*)(void *,char const *,apr_pool_t *) close_file)"},
+ { (char *)"svn_delta_editor_t_close_file_get", _wrap_svn_delta_editor_t_close_file_get, METH_VARARGS, (char *)"svn_delta_editor_t_close_file_get(svn_delta_editor_t self) -> svn_error_t *(*)(void *,char const *,apr_pool_t *)"},
+ { (char *)"svn_delta_editor_t_absent_file_set", _wrap_svn_delta_editor_t_absent_file_set, METH_VARARGS, (char *)"svn_delta_editor_t_absent_file_set(svn_delta_editor_t self, svn_error_t *(*)(char const *,void *,apr_pool_t *) absent_file)"},
+ { (char *)"svn_delta_editor_t_absent_file_get", _wrap_svn_delta_editor_t_absent_file_get, METH_VARARGS, (char *)"svn_delta_editor_t_absent_file_get(svn_delta_editor_t self) -> svn_error_t *(*)(char const *,void *,apr_pool_t *)"},
+ { (char *)"svn_delta_editor_t_close_edit_set", _wrap_svn_delta_editor_t_close_edit_set, METH_VARARGS, (char *)"svn_delta_editor_t_close_edit_set(svn_delta_editor_t self, svn_error_t *(*)(void *,apr_pool_t *) close_edit)"},
+ { (char *)"svn_delta_editor_t_close_edit_get", _wrap_svn_delta_editor_t_close_edit_get, METH_VARARGS, (char *)"svn_delta_editor_t_close_edit_get(svn_delta_editor_t self) -> svn_error_t *(*)(void *,apr_pool_t *)"},
+ { (char *)"svn_delta_editor_t_abort_edit_set", _wrap_svn_delta_editor_t_abort_edit_set, METH_VARARGS, (char *)"svn_delta_editor_t_abort_edit_set(svn_delta_editor_t self, svn_error_t *(*)(void *,apr_pool_t *) abort_edit)"},
+ { (char *)"svn_delta_editor_t_abort_edit_get", _wrap_svn_delta_editor_t_abort_edit_get, METH_VARARGS, (char *)"svn_delta_editor_t_abort_edit_get(svn_delta_editor_t self) -> svn_error_t *(*)(void *,apr_pool_t *)"},
{ (char *)"new_svn_delta_editor_t", _wrap_new_svn_delta_editor_t, METH_VARARGS, (char *)"new_svn_delta_editor_t() -> svn_delta_editor_t"},
{ (char *)"delete_svn_delta_editor_t", _wrap_delete_svn_delta_editor_t, METH_VARARGS, (char *)"delete_svn_delta_editor_t(svn_delta_editor_t self)"},
{ (char *)"svn_delta_editor_t_swigregister", svn_delta_editor_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_delta_default_editor", _wrap_svn_delta_default_editor, METH_VARARGS, (char *)"svn_delta_default_editor(apr_pool_t pool) -> svn_delta_editor_t"},
- { (char *)"svn_delta_noop_window_handler", _wrap_svn_delta_noop_window_handler, METH_VARARGS, (char *)"svn_delta_noop_window_handler(svn_txdelta_window_t window, void baton) -> svn_error_t"},
+ { (char *)"svn_delta_noop_window_handler", _wrap_svn_delta_noop_window_handler, METH_VARARGS, (char *)"svn_delta_noop_window_handler(svn_txdelta_window_t window, void * baton) -> svn_error_t"},
{ (char *)"svn_delta_get_cancellation_editor", _wrap_svn_delta_get_cancellation_editor, METH_VARARGS, (char *)"\n"
- "svn_delta_get_cancellation_editor(svn_cancel_func_t cancel_func, svn_delta_editor_t wrapped_editor, \n"
- " void wrapped_baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_delta_get_cancellation_editor(svn_cancel_func_t cancel_func, svn_delta_editor_t wrapped_editor, void * wrapped_baton, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_delta_depth_filter_editor", _wrap_svn_delta_depth_filter_editor, METH_VARARGS, (char *)"\n"
- "svn_delta_depth_filter_editor(svn_delta_editor_t wrapped_editor, void wrapped_edit_baton, \n"
- " svn_depth_t requested_depth, svn_boolean_t has_target, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_delta_depth_filter_editor(svn_delta_editor_t wrapped_editor, void * wrapped_edit_baton, svn_depth_t requested_depth, \n"
+ " svn_boolean_t has_target, apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_delta_path_driver", _wrap_svn_delta_path_driver, METH_VARARGS, (char *)"\n"
- "svn_delta_path_driver(svn_delta_editor_t editor, void edit_baton, svn_revnum_t revision, \n"
- " apr_array_header_t paths, svn_delta_path_driver_cb_func_t callback_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ { (char *)"svn_delta_path_driver2", _wrap_svn_delta_path_driver2, METH_VARARGS, (char *)"\n"
+ "svn_delta_path_driver2(svn_delta_editor_t editor, void * edit_baton, apr_array_header_t paths, svn_boolean_t sort_paths, \n"
+ " svn_delta_path_driver_cb_func_t callback_func, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
- { (char *)"svn_compat_wrap_file_rev_handler", _wrap_svn_compat_wrap_file_rev_handler, METH_VARARGS, (char *)"\n"
- "svn_compat_wrap_file_rev_handler(svn_file_rev_handler_old_t handler, void handler_baton, \n"
- " apr_pool_t pool)\n"
+ { (char *)"svn_delta_path_driver", _wrap_svn_delta_path_driver, METH_VARARGS, (char *)"\n"
+ "svn_delta_path_driver(svn_delta_editor_t editor, void * edit_baton, svn_revnum_t revision, apr_array_header_t paths, \n"
+ " svn_delta_path_driver_cb_func_t callback_func, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
+ { (char *)"svn_compat_wrap_file_rev_handler", _wrap_svn_compat_wrap_file_rev_handler, METH_VARARGS, (char *)"svn_compat_wrap_file_rev_handler(svn_file_rev_handler_old_t handler, void * handler_baton, apr_pool_t pool)"},
{ (char *)"svn_txdelta_stream_t_swigregister", svn_txdelta_stream_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_delta_editor_invoke_set_target_revision", _wrap_svn_delta_editor_invoke_set_target_revision, METH_VARARGS, (char *)"\n"
- "svn_delta_editor_invoke_set_target_revision(svn_delta_editor_t _obj, void edit_baton, svn_revnum_t target_revision, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_delta_editor_invoke_open_root", _wrap_svn_delta_editor_invoke_open_root, METH_VARARGS, (char *)"\n"
- "svn_delta_editor_invoke_open_root(svn_delta_editor_t _obj, void edit_baton, svn_revnum_t base_revision, \n"
- " apr_pool_t result_pool) -> svn_error_t\n"
- ""},
+ { (char *)"svn_delta_editor_invoke_set_target_revision", _wrap_svn_delta_editor_invoke_set_target_revision, METH_VARARGS, (char *)"svn_delta_editor_invoke_set_target_revision(svn_delta_editor_t _obj, void * edit_baton, svn_revnum_t target_revision, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_delta_editor_invoke_open_root", _wrap_svn_delta_editor_invoke_open_root, METH_VARARGS, (char *)"svn_delta_editor_invoke_open_root(svn_delta_editor_t _obj, void * edit_baton, svn_revnum_t base_revision, apr_pool_t result_pool) -> svn_error_t"},
{ (char *)"svn_delta_editor_invoke_delete_entry", _wrap_svn_delta_editor_invoke_delete_entry, METH_VARARGS, (char *)"\n"
- "svn_delta_editor_invoke_delete_entry(svn_delta_editor_t _obj, char path, svn_revnum_t revision, \n"
- " void parent_baton, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_delta_editor_invoke_delete_entry(svn_delta_editor_t _obj, char const * path, svn_revnum_t revision, void * parent_baton, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_delta_editor_invoke_add_directory", _wrap_svn_delta_editor_invoke_add_directory, METH_VARARGS, (char *)"\n"
- "svn_delta_editor_invoke_add_directory(svn_delta_editor_t _obj, char path, void parent_baton, \n"
- " char copyfrom_path, svn_revnum_t copyfrom_revision, \n"
- " apr_pool_t result_pool) -> svn_error_t\n"
+ "svn_delta_editor_invoke_add_directory(svn_delta_editor_t _obj, char const * path, void * parent_baton, char const * copyfrom_path, \n"
+ " svn_revnum_t copyfrom_revision, apr_pool_t result_pool) -> svn_error_t\n"
""},
{ (char *)"svn_delta_editor_invoke_open_directory", _wrap_svn_delta_editor_invoke_open_directory, METH_VARARGS, (char *)"\n"
- "svn_delta_editor_invoke_open_directory(svn_delta_editor_t _obj, char path, void parent_baton, \n"
- " svn_revnum_t base_revision, apr_pool_t result_pool) -> svn_error_t\n"
+ "svn_delta_editor_invoke_open_directory(svn_delta_editor_t _obj, char const * path, void * parent_baton, svn_revnum_t base_revision, \n"
+ " apr_pool_t result_pool) -> svn_error_t\n"
""},
{ (char *)"svn_delta_editor_invoke_change_dir_prop", _wrap_svn_delta_editor_invoke_change_dir_prop, METH_VARARGS, (char *)"\n"
- "svn_delta_editor_invoke_change_dir_prop(svn_delta_editor_t _obj, void dir_baton, char name, \n"
- " svn_string_t value, apr_pool_t scratch_pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_delta_editor_invoke_close_directory", _wrap_svn_delta_editor_invoke_close_directory, METH_VARARGS, (char *)"svn_delta_editor_invoke_close_directory(svn_delta_editor_t _obj, void dir_baton, apr_pool_t scratch_pool) -> svn_error_t"},
- { (char *)"svn_delta_editor_invoke_absent_directory", _wrap_svn_delta_editor_invoke_absent_directory, METH_VARARGS, (char *)"\n"
- "svn_delta_editor_invoke_absent_directory(svn_delta_editor_t _obj, char path, void parent_baton, \n"
+ "svn_delta_editor_invoke_change_dir_prop(svn_delta_editor_t _obj, void * dir_baton, char const * name, svn_string_t const * value, \n"
" apr_pool_t scratch_pool) -> svn_error_t\n"
""},
+ { (char *)"svn_delta_editor_invoke_close_directory", _wrap_svn_delta_editor_invoke_close_directory, METH_VARARGS, (char *)"svn_delta_editor_invoke_close_directory(svn_delta_editor_t _obj, void * dir_baton, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_delta_editor_invoke_absent_directory", _wrap_svn_delta_editor_invoke_absent_directory, METH_VARARGS, (char *)"svn_delta_editor_invoke_absent_directory(svn_delta_editor_t _obj, char const * path, void * parent_baton, apr_pool_t scratch_pool) -> svn_error_t"},
{ (char *)"svn_delta_editor_invoke_add_file", _wrap_svn_delta_editor_invoke_add_file, METH_VARARGS, (char *)"\n"
- "svn_delta_editor_invoke_add_file(svn_delta_editor_t _obj, char path, void parent_baton, \n"
- " char copyfrom_path, svn_revnum_t copyfrom_revision, \n"
- " apr_pool_t result_pool) -> svn_error_t\n"
+ "svn_delta_editor_invoke_add_file(svn_delta_editor_t _obj, char const * path, void * parent_baton, char const * copyfrom_path, \n"
+ " svn_revnum_t copyfrom_revision, apr_pool_t result_pool) -> svn_error_t\n"
""},
{ (char *)"svn_delta_editor_invoke_open_file", _wrap_svn_delta_editor_invoke_open_file, METH_VARARGS, (char *)"\n"
- "svn_delta_editor_invoke_open_file(svn_delta_editor_t _obj, char path, void parent_baton, \n"
- " svn_revnum_t base_revision, apr_pool_t result_pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_delta_editor_invoke_apply_textdelta", _wrap_svn_delta_editor_invoke_apply_textdelta, METH_VARARGS, (char *)"\n"
- "svn_delta_editor_invoke_apply_textdelta(svn_delta_editor_t _obj, void file_baton, char base_checksum, \n"
+ "svn_delta_editor_invoke_open_file(svn_delta_editor_t _obj, char const * path, void * parent_baton, svn_revnum_t base_revision, \n"
" apr_pool_t result_pool) -> svn_error_t\n"
""},
+ { (char *)"svn_delta_editor_invoke_apply_textdelta", _wrap_svn_delta_editor_invoke_apply_textdelta, METH_VARARGS, (char *)"svn_delta_editor_invoke_apply_textdelta(svn_delta_editor_t _obj, void * file_baton, char const * base_checksum, apr_pool_t result_pool) -> svn_error_t"},
{ (char *)"svn_delta_editor_invoke_change_file_prop", _wrap_svn_delta_editor_invoke_change_file_prop, METH_VARARGS, (char *)"\n"
- "svn_delta_editor_invoke_change_file_prop(svn_delta_editor_t _obj, void file_baton, char name, \n"
- " svn_string_t value, apr_pool_t scratch_pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_delta_editor_invoke_close_file", _wrap_svn_delta_editor_invoke_close_file, METH_VARARGS, (char *)"\n"
- "svn_delta_editor_invoke_close_file(svn_delta_editor_t _obj, void file_baton, char text_checksum, \n"
+ "svn_delta_editor_invoke_change_file_prop(svn_delta_editor_t _obj, void * file_baton, char const * name, svn_string_t const * value, \n"
" apr_pool_t scratch_pool) -> svn_error_t\n"
""},
- { (char *)"svn_delta_editor_invoke_absent_file", _wrap_svn_delta_editor_invoke_absent_file, METH_VARARGS, (char *)"\n"
- "svn_delta_editor_invoke_absent_file(svn_delta_editor_t _obj, char path, void parent_baton, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_delta_editor_invoke_close_edit", _wrap_svn_delta_editor_invoke_close_edit, METH_VARARGS, (char *)"svn_delta_editor_invoke_close_edit(svn_delta_editor_t _obj, void edit_baton, apr_pool_t scratch_pool) -> svn_error_t"},
- { (char *)"svn_delta_editor_invoke_abort_edit", _wrap_svn_delta_editor_invoke_abort_edit, METH_VARARGS, (char *)"svn_delta_editor_invoke_abort_edit(svn_delta_editor_t _obj, void edit_baton, apr_pool_t scratch_pool) -> svn_error_t"},
- { (char *)"svn_txdelta_invoke_window_handler", _wrap_svn_txdelta_invoke_window_handler, METH_VARARGS, (char *)"\n"
- "svn_txdelta_invoke_window_handler(svn_txdelta_window_handler_t _obj, svn_txdelta_window_t window, \n"
- " void baton) -> svn_error_t\n"
- ""},
- { (char *)"svn_txdelta_invoke_next_window_fn", _wrap_svn_txdelta_invoke_next_window_fn, METH_VARARGS, (char *)"svn_txdelta_invoke_next_window_fn(svn_txdelta_next_window_fn_t _obj, void baton, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_txdelta_invoke_md5_digest_fn", _wrap_svn_txdelta_invoke_md5_digest_fn, METH_VARARGS, (char *)"svn_txdelta_invoke_md5_digest_fn(svn_txdelta_md5_digest_fn_t _obj, void baton) -> unsigned char"},
+ { (char *)"svn_delta_editor_invoke_close_file", _wrap_svn_delta_editor_invoke_close_file, METH_VARARGS, (char *)"svn_delta_editor_invoke_close_file(svn_delta_editor_t _obj, void * file_baton, char const * text_checksum, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_delta_editor_invoke_absent_file", _wrap_svn_delta_editor_invoke_absent_file, METH_VARARGS, (char *)"svn_delta_editor_invoke_absent_file(svn_delta_editor_t _obj, char const * path, void * parent_baton, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_delta_editor_invoke_close_edit", _wrap_svn_delta_editor_invoke_close_edit, METH_VARARGS, (char *)"svn_delta_editor_invoke_close_edit(svn_delta_editor_t _obj, void * edit_baton, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_delta_editor_invoke_abort_edit", _wrap_svn_delta_editor_invoke_abort_edit, METH_VARARGS, (char *)"svn_delta_editor_invoke_abort_edit(svn_delta_editor_t _obj, void * edit_baton, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_txdelta_invoke_window_handler", _wrap_svn_txdelta_invoke_window_handler, METH_VARARGS, (char *)"svn_txdelta_invoke_window_handler(svn_txdelta_window_handler_t _obj, svn_txdelta_window_t window, void * baton) -> svn_error_t"},
+ { (char *)"svn_txdelta_invoke_next_window_fn", _wrap_svn_txdelta_invoke_next_window_fn, METH_VARARGS, (char *)"svn_txdelta_invoke_next_window_fn(svn_txdelta_next_window_fn_t _obj, void * baton, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_txdelta_invoke_md5_digest_fn", _wrap_svn_txdelta_invoke_md5_digest_fn, METH_VARARGS, (char *)"svn_txdelta_invoke_md5_digest_fn(svn_txdelta_md5_digest_fn_t _obj, void * baton) -> unsigned char const *"},
{ (char *)"svn_delta_invoke_path_driver_cb_func", _wrap_svn_delta_invoke_path_driver_cb_func, METH_VARARGS, (char *)"\n"
- "svn_delta_invoke_path_driver_cb_func(svn_delta_path_driver_cb_func_t _obj, void parent_baton, \n"
- " void callback_baton, char path, apr_pool_t pool) -> svn_error_t\n"
+ "svn_delta_invoke_path_driver_cb_func(svn_delta_path_driver_cb_func_t _obj, void * parent_baton, void * callback_baton, \n"
+ " char const * path, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_file_invoke_rev_handler", _wrap_svn_file_invoke_rev_handler, METH_VARARGS, (char *)"\n"
- "svn_file_invoke_rev_handler(svn_file_rev_handler_t _obj, void baton, char path, \n"
- " svn_revnum_t rev, apr_hash_t rev_props, svn_boolean_t result_of_merge, \n"
- " apr_array_header_t prop_diffs, \n"
+ "svn_file_invoke_rev_handler(svn_file_rev_handler_t _obj, void * baton, char const * path, svn_revnum_t rev, apr_hash_t rev_props, \n"
+ " svn_boolean_t result_of_merge, apr_array_header_t prop_diffs, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_file_invoke_rev_handler_old", _wrap_svn_file_invoke_rev_handler_old, METH_VARARGS, (char *)"\n"
- "svn_file_invoke_rev_handler_old(svn_file_rev_handler_old_t _obj, void baton, char path, \n"
- " svn_revnum_t rev, apr_hash_t rev_props, \n"
- " apr_array_header_t prop_diffs, apr_pool_t pool) -> svn_error_t\n"
+ "svn_file_invoke_rev_handler_old(svn_file_rev_handler_old_t _obj, void * baton, char const * path, svn_revnum_t rev, \n"
+ " apr_hash_t rev_props, apr_array_header_t prop_diffs, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_txdelta_window_handler_t_swigregister", svn_txdelta_window_handler_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_txdelta_next_window_fn_t_swigregister", svn_txdelta_next_window_fn_t_swigregister, METH_VARARGS, NULL},
@@ -8962,7 +9187,7 @@ static PyMethodDef SwigMethods[] = {
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
-static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *|svn_rangelist_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_file_t = {"_p_apr_file_t", "apr_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_hash_t = {"_p_apr_hash_t", "apr_hash_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int32_t = {"_p_apr_int32_t", "apr_int32_t *|time_t *", 0, 0, (void*)0, 0};
@@ -8996,8 +9221,9 @@ static swig_type_info _swigt__p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t
static swig_type_info _swigt__p_p_f_p_void__p_unsigned_char = {"_p_p_f_p_void__p_unsigned_char", "svn_txdelta_md5_digest_fn_t *|unsigned char *(**)(void *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(void *,char const *,svn_revnum_t,apr_hash_t *,svn_txdelta_window_handler_t *,void **,apr_array_header_t *,apr_pool_t *)|svn_file_rev_handler_old_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(void *,char const *,svn_revnum_t,apr_hash_t *,svn_boolean_t,svn_txdelta_window_handler_t *,void **,apr_array_header_t *,apr_pool_t *)|svn_file_rev_handler_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_p_svn_checksum_t = {"_p_p_svn_checksum_t", "svn_checksum_t **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_svn_checksum_t = {"_p_p_svn_checksum_t", "struct svn_checksum_t **|svn_checksum_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_delta_editor_t = {"_p_p_svn_delta_editor_t", "struct svn_delta_editor_t **|svn_delta_editor_t **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_svn_txdelta_op_t = {"_p_p_svn_txdelta_op_t", "struct svn_txdelta_op_t **|svn_txdelta_op_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_txdelta_stream_t = {"_p_p_svn_txdelta_stream_t", "struct svn_txdelta_stream_t **|svn_txdelta_stream_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_txdelta_window_t = {"_p_p_svn_txdelta_window_t", "struct svn_txdelta_window_t **|svn_txdelta_window_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_void = {"_p_p_void", "void **", 0, 0, (void*)0, 0};
@@ -9011,7 +9237,9 @@ static swig_type_info _swigt__p_svn_auth_iterstate_t = {"_p_svn_auth_iterstate_t
static swig_type_info _swigt__p_svn_auth_provider_object_t = {"_p_svn_auth_provider_object_t", "struct svn_auth_provider_object_t *|svn_auth_provider_object_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_provider_t = {"_p_svn_auth_provider_t", "struct svn_auth_provider_t *|svn_auth_provider_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_ssl_server_cert_info_t = {"_p_svn_auth_ssl_server_cert_info_t", "struct svn_auth_ssl_server_cert_info_t *|svn_auth_ssl_server_cert_info_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_ctx_t = {"_p_svn_checksum_ctx_t", "struct svn_checksum_ctx_t *|svn_checksum_ctx_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "enum svn_checksum_kind_t *|svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "struct svn_checksum_t *|svn_checksum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_commit_info_t = {"_p_svn_commit_info_t", "struct svn_commit_info_t *|svn_commit_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_config_t = {"_p_svn_config_t", "struct svn_config_t *|svn_config_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_delta_editor_t = {"_p_svn_delta_editor_t", "struct svn_delta_editor_t *|svn_delta_editor_t *", 0, 0, (void*)0, 0};
@@ -9035,6 +9263,7 @@ static swig_type_info _swigt__p_svn_opt_revision_t = {"_p_svn_opt_revision_t", "
static swig_type_info _swigt__p_svn_opt_revision_value_t = {"_p_svn_opt_revision_value_t", "union svn_opt_revision_value_t *|svn_opt_revision_value_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_opt_subcommand_desc2_t = {"_p_svn_opt_subcommand_desc2_t", "struct svn_opt_subcommand_desc2_t *|svn_opt_subcommand_desc2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_opt_subcommand_desc_t = {"_p_svn_opt_subcommand_desc_t", "struct svn_opt_subcommand_desc_t *|svn_opt_subcommand_desc_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_prop_inherited_item_t = {"_p_svn_prop_inherited_item_t", "struct svn_prop_inherited_item_t *|svn_prop_inherited_item_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_kind = {"_p_svn_prop_kind", "svn_prop_kind_t *|enum svn_prop_kind *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_stream_mark_t = {"_p_svn_stream_mark_t", "struct svn_stream_mark_t *|svn_stream_mark_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_stream_t = {"_p_svn_stream_t", "struct svn_stream_t *|svn_stream_t *", 0, 0, (void*)0, 0};
@@ -9045,7 +9274,11 @@ static swig_type_info _swigt__p_svn_txdelta_op_t = {"_p_svn_txdelta_op_t", "stru
static swig_type_info _swigt__p_svn_txdelta_stream_t = {"_p_svn_txdelta_stream_t", "struct svn_txdelta_stream_t *|svn_txdelta_stream_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_txdelta_window_t = {"_p_svn_txdelta_window_t", "struct svn_txdelta_window_t *|svn_txdelta_window_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_checklist_t = {"_p_svn_version_checklist_t", "struct svn_version_checklist_t *|svn_version_checklist_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_linked_lib_t = {"_p_svn_version_ext_linked_lib_t", "struct svn_version_ext_linked_lib_t *|svn_version_ext_linked_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_loaded_lib_t = {"_p_svn_version_ext_loaded_lib_t", "struct svn_version_ext_loaded_lib_t *|svn_version_ext_loaded_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_extended_t = {"_p_svn_version_extended_t", "struct svn_version_extended_t *|svn_version_extended_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_t = {"_p_svn_version_t", "struct svn_version_t *|svn_version_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_wc_external_item2_t = {"_p_svn_wc_external_item2_t", "svn_wc_external_item2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_char = {"_p_unsigned_char", "unsigned char *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_long = {"_p_unsigned_long", "unsigned long *|svn_linenum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_void = {"_p_void", "void *", 0, 0, (void*)0, 0};
@@ -9087,6 +9320,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_svn_checksum_t,
&_swigt__p_p_svn_delta_editor_t,
+ &_swigt__p_p_svn_txdelta_op_t,
&_swigt__p_p_svn_txdelta_stream_t,
&_swigt__p_p_svn_txdelta_window_t,
&_swigt__p_p_void,
@@ -9100,7 +9334,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_auth_provider_object_t,
&_swigt__p_svn_auth_provider_t,
&_swigt__p_svn_auth_ssl_server_cert_info_t,
+ &_swigt__p_svn_checksum_ctx_t,
&_swigt__p_svn_checksum_kind_t,
+ &_swigt__p_svn_checksum_t,
&_swigt__p_svn_commit_info_t,
&_swigt__p_svn_config_t,
&_swigt__p_svn_delta_editor_t,
@@ -9124,6 +9360,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_opt_revision_value_t,
&_swigt__p_svn_opt_subcommand_desc2_t,
&_swigt__p_svn_opt_subcommand_desc_t,
+ &_swigt__p_svn_prop_inherited_item_t,
&_swigt__p_svn_prop_kind,
&_swigt__p_svn_stream_mark_t,
&_swigt__p_svn_stream_t,
@@ -9134,7 +9371,11 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_txdelta_stream_t,
&_swigt__p_svn_txdelta_window_t,
&_swigt__p_svn_version_checklist_t,
+ &_swigt__p_svn_version_ext_linked_lib_t,
+ &_swigt__p_svn_version_ext_loaded_lib_t,
+ &_swigt__p_svn_version_extended_t,
&_swigt__p_svn_version_t,
+ &_swigt__p_svn_wc_external_item2_t,
&_swigt__p_unsigned_char,
&_swigt__p_unsigned_long,
&_swigt__p_void,
@@ -9176,6 +9417,7 @@ static swig_cast_info _swigc__p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_ha
static swig_cast_info _swigc__p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_checksum_t[] = { {&_swigt__p_p_svn_checksum_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_delta_editor_t[] = { {&_swigt__p_p_svn_delta_editor_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_svn_txdelta_op_t[] = { {&_swigt__p_p_svn_txdelta_op_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_txdelta_stream_t[] = { {&_swigt__p_p_svn_txdelta_stream_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_txdelta_window_t[] = { {&_swigt__p_p_svn_txdelta_window_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_void[] = { {&_swigt__p_p_void, 0, 0, 0},{0, 0, 0, 0}};
@@ -9189,7 +9431,9 @@ static swig_cast_info _swigc__p_svn_auth_iterstate_t[] = { {&_swigt__p_svn_auth
static swig_cast_info _swigc__p_svn_auth_provider_object_t[] = { {&_swigt__p_svn_auth_provider_object_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_provider_t[] = { {&_swigt__p_svn_auth_provider_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_ssl_server_cert_info_t[] = { {&_swigt__p_svn_auth_ssl_server_cert_info_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_ctx_t[] = { {&_swigt__p_svn_checksum_ctx_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_checksum_kind_t[] = { {&_swigt__p_svn_checksum_kind_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_t[] = { {&_swigt__p_svn_checksum_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_commit_info_t[] = { {&_swigt__p_svn_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_config_t[] = { {&_swigt__p_svn_config_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_delta_editor_t[] = { {&_swigt__p_svn_delta_editor_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -9213,6 +9457,7 @@ static swig_cast_info _swigc__p_svn_opt_revision_t[] = { {&_swigt__p_svn_opt_re
static swig_cast_info _swigc__p_svn_opt_revision_value_t[] = { {&_swigt__p_svn_opt_revision_value_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_opt_subcommand_desc2_t[] = { {&_swigt__p_svn_opt_subcommand_desc2_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_opt_subcommand_desc_t[] = { {&_swigt__p_svn_opt_subcommand_desc_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_prop_inherited_item_t[] = { {&_swigt__p_svn_prop_inherited_item_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_kind[] = { {&_swigt__p_svn_prop_kind, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_stream_mark_t[] = { {&_swigt__p_svn_stream_mark_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_stream_t[] = { {&_swigt__p_svn_stream_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -9223,7 +9468,11 @@ static swig_cast_info _swigc__p_svn_txdelta_op_t[] = { {&_swigt__p_svn_txdelta_
static swig_cast_info _swigc__p_svn_txdelta_stream_t[] = { {&_swigt__p_svn_txdelta_stream_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_txdelta_window_t[] = { {&_swigt__p_svn_txdelta_window_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_checklist_t[] = { {&_swigt__p_svn_version_checklist_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_linked_lib_t[] = { {&_swigt__p_svn_version_ext_linked_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_loaded_lib_t[] = { {&_swigt__p_svn_version_ext_loaded_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_extended_t[] = { {&_swigt__p_svn_version_extended_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_t[] = { {&_swigt__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_wc_external_item2_t[] = { {&_swigt__p_svn_wc_external_item2_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_char[] = { {&_swigt__p_unsigned_char, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_long[] = { {&_swigt__p_unsigned_long, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_void[] = { {&_swigt__p_void, 0, 0, 0},{0, 0, 0, 0}};
@@ -9265,6 +9514,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_svn_checksum_t,
_swigc__p_p_svn_delta_editor_t,
+ _swigc__p_p_svn_txdelta_op_t,
_swigc__p_p_svn_txdelta_stream_t,
_swigc__p_p_svn_txdelta_window_t,
_swigc__p_p_void,
@@ -9278,7 +9528,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_auth_provider_object_t,
_swigc__p_svn_auth_provider_t,
_swigc__p_svn_auth_ssl_server_cert_info_t,
+ _swigc__p_svn_checksum_ctx_t,
_swigc__p_svn_checksum_kind_t,
+ _swigc__p_svn_checksum_t,
_swigc__p_svn_commit_info_t,
_swigc__p_svn_config_t,
_swigc__p_svn_delta_editor_t,
@@ -9302,6 +9554,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_opt_revision_value_t,
_swigc__p_svn_opt_subcommand_desc2_t,
_swigc__p_svn_opt_subcommand_desc_t,
+ _swigc__p_svn_prop_inherited_item_t,
_swigc__p_svn_prop_kind,
_swigc__p_svn_stream_mark_t,
_swigc__p_svn_stream_t,
@@ -9312,7 +9565,11 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_txdelta_stream_t,
_swigc__p_svn_txdelta_window_t,
_swigc__p_svn_version_checklist_t,
+ _swigc__p_svn_version_ext_linked_lib_t,
+ _swigc__p_svn_version_ext_loaded_lib_t,
+ _swigc__p_svn_version_extended_t,
_swigc__p_svn_version_t,
+ _swigc__p_svn_wc_external_item2_t,
_swigc__p_unsigned_char,
_swigc__p_unsigned_long,
_swigc__p_void,
@@ -9386,8 +9643,6 @@ SWIG_InitializeModule(void *clientdata) {
swig_module_info *module_head, *iter;
int found, init;
- clientdata = clientdata;
-
/* check to see if the circular list has been setup, if not, set it up */
if (swig_module.next==0) {
/* Initialize the swig_module */
@@ -9960,6 +10215,7 @@ SWIG_init(void) {
m = Py_InitModule((char *) SWIG_name, SwigMethods);
#endif
md = d = PyModule_GetDict(m);
+ (void)md;
SWIG_InitializeModule(0);
diff --git a/subversion/bindings/swig/python/svn_diff.c b/subversion/bindings/swig/python/svn_diff.c
index f5aeffb..044eef8 100644
--- a/subversion/bindings/swig/python/svn_diff.c
+++ b/subversion/bindings/swig/python/svn_diff.c
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -733,6 +733,7 @@ SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) {
#define PyInt_Check(x) PyLong_Check(x)
#define PyInt_AsLong(x) PyLong_AsLong(x)
#define PyInt_FromLong(x) PyLong_FromLong(x)
+#define PyInt_FromSize_t(x) PyLong_FromSize_t(x)
#define PyString_Check(name) PyBytes_Check(name)
#define PyString_FromString(x) PyUnicode_FromString(x)
#define PyString_Format(fmt, args) PyUnicode_Format(fmt, args)
@@ -902,6 +903,10 @@ static long PyNumber_AsSsize_t (PyObject *x, void *SWIGUNUSEDPARM(exc))
}
#endif
+#if PY_VERSION_HEX < 0x02050000
+#define PyInt_FromSize_t(x) PyInt_FromLong((long)x)
+#endif
+
#if PY_VERSION_HEX < 0x02040000
#define Py_VISIT(op) \
do { \
@@ -1173,7 +1178,7 @@ SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self),
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Python_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Python_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Python_SetModule(pointer)
#define SWIG_NewClientData(obj) SwigPyClientData_New(obj)
@@ -1199,7 +1204,7 @@ SWIG_Python_SetErrorObj(PyObject *errtype, PyObject *obj) {
SWIGINTERN void
SWIG_Python_SetErrorMsg(PyObject *errtype, const char *msg) {
SWIG_PYTHON_THREAD_BEGIN_BLOCK;
- PyErr_SetString(errtype, (char *) msg);
+ PyErr_SetString(errtype, msg);
SWIG_PYTHON_THREAD_END_BLOCK;
}
@@ -1218,7 +1223,11 @@ SwigPyBuiltin_AddPublicSymbol(PyObject *seq, const char *key) {
SWIGINTERN void
SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *name, PyObject *obj) {
+#if PY_VERSION_HEX < 0x02030000
PyDict_SetItemString(d, (char *)name, obj);
+#else
+ PyDict_SetItemString(d, name, obj);
+#endif
Py_DECREF(obj);
if (public_interface)
SwigPyBuiltin_AddPublicSymbol(public_interface, name);
@@ -1228,7 +1237,11 @@ SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *nam
SWIGINTERN void
SWIG_Python_SetConstant(PyObject *d, const char *name, PyObject *obj) {
+#if PY_VERSION_HEX < 0x02030000
PyDict_SetItemString(d, (char *)name, obj);
+#else
+ PyDict_SetItemString(d, name, obj);
+#endif
Py_DECREF(obj);
}
@@ -1549,7 +1562,7 @@ SwigPyObject_repr(SwigPyObject *v, PyObject *args)
#endif
{
const char *name = SWIG_TypePrettyName(v->ty);
- PyObject *repr = SWIG_Python_str_FromFormat("<Swig Object of type '%s' at %p>", name, (void *)v);
+ PyObject *repr = SWIG_Python_str_FromFormat("<Swig Object of type '%s' at %p>", (name ? name : "unknown"), (void *)v);
if (v->next) {
# ifdef METH_NOARGS
PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next);
@@ -1753,8 +1766,10 @@ SwigPyObject_own(PyObject *v, PyObject *args)
PyObject *val = 0;
#if (PY_VERSION_HEX < 0x02020000)
if (!PyArg_ParseTuple(args,(char *)"|O:own",&val))
-#else
+#elif (PY_VERSION_HEX < 0x02050000)
if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val))
+#else
+ if (!PyArg_UnpackTuple(args, "own", 0, 1, &val))
#endif
{
return NULL;
@@ -2449,23 +2464,29 @@ SWIG_Python_NewShadowInstance(SwigPyClientData *data, PyObject *swig_this)
} else {
#if PY_VERSION_HEX >= 0x03000000
inst = PyBaseObject_Type.tp_new((PyTypeObject*) data->newargs, Py_None, Py_None);
- PyObject_SetAttr(inst, SWIG_This(), swig_this);
- Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG;
+ if (inst) {
+ PyObject_SetAttr(inst, SWIG_This(), swig_this);
+ Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG;
+ }
#else
PyObject *dict = PyDict_New();
- PyDict_SetItem(dict, SWIG_This(), swig_this);
- inst = PyInstance_NewRaw(data->newargs, dict);
- Py_DECREF(dict);
+ if (dict) {
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ inst = PyInstance_NewRaw(data->newargs, dict);
+ Py_DECREF(dict);
+ }
#endif
}
return inst;
#else
#if (PY_VERSION_HEX >= 0x02010000)
- PyObject *inst;
+ PyObject *inst = 0;
PyObject *dict = PyDict_New();
- PyDict_SetItem(dict, SWIG_This(), swig_this);
- inst = PyInstance_NewRaw(data->newargs, dict);
- Py_DECREF(dict);
+ if (dict) {
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ inst = PyInstance_NewRaw(data->newargs, dict);
+ Py_DECREF(dict);
+ }
return (PyObject *) inst;
#else
PyInstanceObject *inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type);
@@ -2516,7 +2537,7 @@ SWIG_Python_SetSwigThis(PyObject *inst, PyObject *swig_this)
SWIGINTERN PyObject *
SWIG_Python_InitShadowInstance(PyObject *args) {
PyObject *obj[2];
- if (!SWIG_Python_UnpackTuple(args,(char*)"swiginit", 2, 2, obj)) {
+ if (!SWIG_Python_UnpackTuple(args, "swiginit", 2, 2, obj)) {
return NULL;
} else {
SwigPyObject *sthis = SWIG_Python_GetSwigThis(obj[0]);
@@ -2572,12 +2593,10 @@ SWIG_Python_NewPointerObj(PyObject *self, void *ptr, swig_type_info *type, int f
assert(!(flags & SWIG_BUILTIN_TP_INIT));
robj = SwigPyObject_New(ptr, type, own);
- if (clientdata && !(flags & SWIG_POINTER_NOSHADOW)) {
+ if (robj && clientdata && !(flags & SWIG_POINTER_NOSHADOW)) {
PyObject *inst = SWIG_Python_NewShadowInstance(clientdata, robj);
- if (inst) {
- Py_DECREF(robj);
- robj = inst;
- }
+ Py_DECREF(robj);
+ robj = inst;
}
return robj;
}
@@ -2598,7 +2617,7 @@ void *SWIG_ReturnGlobalTypeList(void *);
#endif
SWIGRUNTIME swig_module_info *
-SWIG_Python_GetModule(void) {
+SWIG_Python_GetModule(void *SWIGUNUSEDPARM(clientdata)) {
static void *type_pointer = (void *)0;
/* first check if module already created */
if (!type_pointer) {
@@ -2724,7 +2743,7 @@ SWIG_Python_TypeQuery(const char *type)
descriptor = (swig_type_info *) PyCObject_AsVoidPtr(obj);
#endif
} else {
- swig_module_info *swig_module = SWIG_Python_GetModule();
+ swig_module_info *swig_module = SWIG_GetModule(0);
descriptor = SWIG_TypeQueryModule(swig_module, swig_module, type);
if (descriptor) {
#ifdef SWIGPY_USE_CAPSULE
@@ -2792,7 +2811,7 @@ SwigPyObject_GetDesc(PyObject *self)
{
SwigPyObject *v = (SwigPyObject *)self;
swig_type_info *ty = v ? v->ty : 0;
- return ty ? ty->str : (char*)"";
+ return ty ? ty->str : "";
}
SWIGRUNTIME void
@@ -2849,6 +2868,7 @@ SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int SWIGUNUSEDPARM(arg
return result;
}
+#ifdef SWIGPYTHON_BUILTIN
SWIGRUNTIME int
SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
PyTypeObject *tp = obj->ob_type;
@@ -2857,15 +2877,15 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
descrsetfunc f;
int res;
-#ifdef Py_USING_UNICODE
+# ifdef Py_USING_UNICODE
if (PyString_Check(name)) {
name = PyUnicode_Decode(PyString_AsString(name), PyString_Size(name), NULL, NULL);
if (!name)
return -1;
} else if (!PyUnicode_Check(name))
-#else
+# else
if (!PyString_Check(name))
-#endif
+# endif
{
PyErr_Format(PyExc_TypeError, "attribute name must be string, not '%.200s'", name->ob_type->tp_name);
return -1;
@@ -2900,6 +2920,7 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
Py_DECREF(name);
return res;
}
+#endif
#ifdef __cplusplus
@@ -2954,53 +2975,61 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[32]
#define SWIGTYPE_p_svn_auth_provider_t swig_types[33]
#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[34]
-#define SWIGTYPE_p_svn_commit_info_t swig_types[35]
-#define SWIGTYPE_p_svn_config_t swig_types[36]
-#define SWIGTYPE_p_svn_depth_t swig_types[37]
-#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[38]
-#define SWIGTYPE_p_svn_diff_datasource_e swig_types[39]
-#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[40]
-#define SWIGTYPE_p_svn_diff_file_options_t swig_types[41]
-#define SWIGTYPE_p_svn_diff_fns2_t swig_types[42]
-#define SWIGTYPE_p_svn_diff_fns_t swig_types[43]
-#define SWIGTYPE_p_svn_diff_hunk_t swig_types[44]
-#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[45]
-#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[46]
-#define SWIGTYPE_p_svn_diff_t swig_types[47]
-#define SWIGTYPE_p_svn_dirent_t swig_types[48]
-#define SWIGTYPE_p_svn_errno_t swig_types[49]
-#define SWIGTYPE_p_svn_error_t swig_types[50]
-#define SWIGTYPE_p_svn_io_dirent2_t swig_types[51]
-#define SWIGTYPE_p_svn_io_dirent_t swig_types[52]
-#define SWIGTYPE_p_svn_io_file_del_t swig_types[53]
-#define SWIGTYPE_p_svn_location_segment_t swig_types[54]
-#define SWIGTYPE_p_svn_lock_t swig_types[55]
-#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[56]
-#define SWIGTYPE_p_svn_log_changed_path_t swig_types[57]
-#define SWIGTYPE_p_svn_log_entry_t swig_types[58]
-#define SWIGTYPE_p_svn_merge_range_t swig_types[59]
-#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[60]
-#define SWIGTYPE_p_svn_node_kind_t swig_types[61]
-#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[62]
-#define SWIGTYPE_p_svn_opt_revision_t swig_types[63]
-#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[64]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[65]
-#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[66]
-#define SWIGTYPE_p_svn_patch_file_t swig_types[67]
-#define SWIGTYPE_p_svn_patch_t swig_types[68]
-#define SWIGTYPE_p_svn_prop_kind swig_types[69]
-#define SWIGTYPE_p_svn_prop_patch_t swig_types[70]
-#define SWIGTYPE_p_svn_stream_mark_t swig_types[71]
-#define SWIGTYPE_p_svn_stream_t swig_types[72]
-#define SWIGTYPE_p_svn_string_t swig_types[73]
-#define SWIGTYPE_p_svn_stringbuf_t swig_types[74]
-#define SWIGTYPE_p_svn_tristate_t swig_types[75]
-#define SWIGTYPE_p_svn_version_checklist_t swig_types[76]
-#define SWIGTYPE_p_svn_version_t swig_types[77]
-#define SWIGTYPE_p_unsigned_long swig_types[78]
-#define SWIGTYPE_p_void swig_types[79]
-static swig_type_info *swig_types[81];
-static swig_module_info swig_module = {swig_types, 80, 0, 0, 0, 0};
+#define SWIGTYPE_p_svn_checksum_ctx_t swig_types[35]
+#define SWIGTYPE_p_svn_checksum_kind_t swig_types[36]
+#define SWIGTYPE_p_svn_checksum_t swig_types[37]
+#define SWIGTYPE_p_svn_commit_info_t swig_types[38]
+#define SWIGTYPE_p_svn_config_t swig_types[39]
+#define SWIGTYPE_p_svn_depth_t swig_types[40]
+#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[41]
+#define SWIGTYPE_p_svn_diff_datasource_e swig_types[42]
+#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[43]
+#define SWIGTYPE_p_svn_diff_file_options_t swig_types[44]
+#define SWIGTYPE_p_svn_diff_fns2_t swig_types[45]
+#define SWIGTYPE_p_svn_diff_fns_t swig_types[46]
+#define SWIGTYPE_p_svn_diff_hunk_t swig_types[47]
+#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[48]
+#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[49]
+#define SWIGTYPE_p_svn_diff_t swig_types[50]
+#define SWIGTYPE_p_svn_dirent_t swig_types[51]
+#define SWIGTYPE_p_svn_errno_t swig_types[52]
+#define SWIGTYPE_p_svn_error_t swig_types[53]
+#define SWIGTYPE_p_svn_io_dirent2_t swig_types[54]
+#define SWIGTYPE_p_svn_io_dirent_t swig_types[55]
+#define SWIGTYPE_p_svn_io_file_del_t swig_types[56]
+#define SWIGTYPE_p_svn_location_segment_t swig_types[57]
+#define SWIGTYPE_p_svn_lock_t swig_types[58]
+#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[59]
+#define SWIGTYPE_p_svn_log_changed_path_t swig_types[60]
+#define SWIGTYPE_p_svn_log_entry_t swig_types[61]
+#define SWIGTYPE_p_svn_merge_range_t swig_types[62]
+#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[63]
+#define SWIGTYPE_p_svn_node_kind_t swig_types[64]
+#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[65]
+#define SWIGTYPE_p_svn_opt_revision_t swig_types[66]
+#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[67]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[68]
+#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[69]
+#define SWIGTYPE_p_svn_patch_file_t swig_types[70]
+#define SWIGTYPE_p_svn_patch_t swig_types[71]
+#define SWIGTYPE_p_svn_prop_inherited_item_t swig_types[72]
+#define SWIGTYPE_p_svn_prop_kind swig_types[73]
+#define SWIGTYPE_p_svn_prop_patch_t swig_types[74]
+#define SWIGTYPE_p_svn_stream_mark_t swig_types[75]
+#define SWIGTYPE_p_svn_stream_t swig_types[76]
+#define SWIGTYPE_p_svn_string_t swig_types[77]
+#define SWIGTYPE_p_svn_stringbuf_t swig_types[78]
+#define SWIGTYPE_p_svn_tristate_t swig_types[79]
+#define SWIGTYPE_p_svn_version_checklist_t swig_types[80]
+#define SWIGTYPE_p_svn_version_ext_linked_lib_t swig_types[81]
+#define SWIGTYPE_p_svn_version_ext_loaded_lib_t swig_types[82]
+#define SWIGTYPE_p_svn_version_extended_t swig_types[83]
+#define SWIGTYPE_p_svn_version_t swig_types[84]
+#define SWIGTYPE_p_svn_wc_external_item2_t swig_types[85]
+#define SWIGTYPE_p_unsigned_long swig_types[86]
+#define SWIGTYPE_p_void swig_types[87]
+static swig_type_info *swig_types[89];
+static swig_module_info swig_module = {swig_types, 88, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@@ -3024,7 +3053,7 @@ static swig_module_info swig_module = {swig_types, 80, 0, 0, 0, 0};
#endif
#define SWIG_name "_diff"
-#define SWIGVERSION 0x020004
+#define SWIGVERSION 0x020009
#define SWIG_VERSION SWIGVERSION
@@ -3087,7 +3116,7 @@ static PyObject * _global_py_pool = NULL;
#include "svn_diff.h"
- #define SWIG_From_long PyInt_FromLong
+ #define SWIG_From_long PyLong_FromLong
SWIGINTERN int
@@ -3317,10 +3346,10 @@ SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc)
-SWIGINTERNINLINE PyObject *
-SWIG_From_int (int value)
-{
- return SWIG_From_long (value);
+SWIGINTERNINLINE PyObject*
+ SWIG_From_int (int value)
+{
+ return PyInt_FromLong((long) value);
}
@@ -3328,7 +3357,7 @@ SWIGINTERNINLINE PyObject*
SWIG_From_unsigned_SS_long (unsigned long value)
{
return (value > LONG_MAX) ?
- PyLong_FromUnsignedLong(value) : PyInt_FromLong((long)(value));
+ PyLong_FromUnsignedLong(value) : PyLong_FromLong((long)(value));
}
@@ -3450,6 +3479,7 @@ static svn_error_t * svn_diff_output_fns_invoke_output_conflict(
SWIGINTERN int
SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val)
{
+#if PY_VERSION_HEX < 0x03000000
if (PyInt_Check(obj)) {
long v = PyInt_AsLong(obj);
if (v >= 0) {
@@ -3458,7 +3488,9 @@ SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val)
} else {
return SWIG_OverflowError;
}
- } else if (PyLong_Check(obj)) {
+ } else
+#endif
+ if (PyLong_Check(obj)) {
unsigned long v = PyLong_AsUnsignedLong(obj);
if (!PyErr_Occurred()) {
if (val) *val = v;
@@ -3532,14 +3564,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_fns2_t_datasources_open_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_off_t *,apr_off_t *,svn_diff_datasource_e const *,apr_size_t) = (svn_error_t *(*)(void *,apr_off_t *,apr_off_t *,svn_diff_datasource_e const *,apr_size_t)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_diff_fns2_t_datasources_open_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_diff_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3560,13 +3592,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_fns2_t_datasources_open_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,apr_off_t *,apr_off_t *,svn_diff_datasource_e const *,apr_size_t) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_diff_fns2_t_datasources_open_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_diff_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3581,14 +3613,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_fns2_t_datasource_close_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_diff_datasource_e) = (svn_error_t *(*)(void *,svn_diff_datasource_e)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_diff_fns2_t_datasource_close_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_diff_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3609,13 +3641,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_fns2_t_datasource_close_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,svn_diff_datasource_e) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_diff_fns2_t_datasource_close_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_diff_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3630,14 +3662,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_fns2_t_datasource_get_next_token_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
svn_error_t *(*arg2)(apr_uint32_t *,void **,void *,svn_diff_datasource_e) = (svn_error_t *(*)(apr_uint32_t *,void **,void *,svn_diff_datasource_e)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_diff_fns2_t_datasource_get_next_token_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_diff_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3658,13 +3690,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_fns2_t_datasource_get_next_token_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(apr_uint32_t *,void **,void *,svn_diff_datasource_e) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_diff_fns2_t_datasource_get_next_token_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_diff_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3679,14 +3711,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_fns2_t_token_compare_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
svn_error_t *(*arg2)(void *,void *,void *,int *) = (svn_error_t *(*)(void *,void *,void *,int *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_diff_fns2_t_token_compare_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_diff_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3707,13 +3739,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_fns2_t_token_compare_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,void *,void *,int *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_diff_fns2_t_token_compare_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_diff_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3728,14 +3760,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_fns2_t_token_discard_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
void (*arg2)(void *,void *) = (void (*)(void *,void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_diff_fns2_t_token_discard_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_diff_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3756,13 +3788,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_fns2_t_token_discard_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
PyObject * obj0 = 0 ;
void (*result)(void *,void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_diff_fns2_t_token_discard_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_diff_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3777,14 +3809,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_fns2_t_token_discard_all_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
void (*arg2)(void *) = (void (*)(void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_diff_fns2_t_token_discard_all_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_diff_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3805,13 +3837,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_fns2_t_token_discard_all_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
PyObject * obj0 = 0 ;
void (*result)(void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_diff_fns2_t_token_discard_all_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_diff_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3826,13 +3858,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_diff_fns2_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns2_t *result = 0 ;
+ struct svn_diff_fns2_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_diff_fns2_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_diff_fns2_t *)calloc(1, sizeof(svn_diff_fns2_t));
+ result = (struct svn_diff_fns2_t *)calloc(1, sizeof(struct svn_diff_fns2_t));
svn_swig_py_acquire_py_lock();
@@ -3847,12 +3879,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_diff_fns2_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_diff_fns2_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_diff_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3881,14 +3913,14 @@ SWIGINTERN PyObject *svn_diff_fns2_t_swigregister(PyObject *SWIGUNUSEDPARM(self)
SWIGINTERN PyObject *_wrap_svn_diff_fns_t_datasource_open_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_diff_datasource_e) = (svn_error_t *(*)(void *,svn_diff_datasource_e)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_diff_fns_t_datasource_open_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_diff_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3909,13 +3941,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_fns_t_datasource_open_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,svn_diff_datasource_e) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_diff_fns_t_datasource_open_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_diff_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3930,14 +3962,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_fns_t_datasource_close_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_diff_datasource_e) = (svn_error_t *(*)(void *,svn_diff_datasource_e)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_diff_fns_t_datasource_close_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_diff_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3958,13 +3990,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_fns_t_datasource_close_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,svn_diff_datasource_e) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_diff_fns_t_datasource_close_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_diff_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3979,14 +4011,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_fns_t_datasource_get_next_token_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
svn_error_t *(*arg2)(apr_uint32_t *,void **,void *,svn_diff_datasource_e) = (svn_error_t *(*)(apr_uint32_t *,void **,void *,svn_diff_datasource_e)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_diff_fns_t_datasource_get_next_token_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_diff_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4007,13 +4039,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_fns_t_datasource_get_next_token_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(apr_uint32_t *,void **,void *,svn_diff_datasource_e) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_diff_fns_t_datasource_get_next_token_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_diff_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4028,14 +4060,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_fns_t_token_compare_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,void *,void *,int *) = (svn_error_t *(*)(void *,void *,void *,int *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_diff_fns_t_token_compare_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_diff_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4056,13 +4088,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_fns_t_token_compare_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,void *,void *,int *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_diff_fns_t_token_compare_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_diff_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4077,14 +4109,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_fns_t_token_discard_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
void (*arg2)(void *,void *) = (void (*)(void *,void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_diff_fns_t_token_discard_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_diff_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4105,13 +4137,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_fns_t_token_discard_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
PyObject * obj0 = 0 ;
void (*result)(void *,void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_diff_fns_t_token_discard_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_diff_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4126,14 +4158,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_fns_t_token_discard_all_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
void (*arg2)(void *) = (void (*)(void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_diff_fns_t_token_discard_all_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_diff_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4154,13 +4186,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_fns_t_token_discard_all_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
PyObject * obj0 = 0 ;
void (*result)(void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_diff_fns_t_token_discard_all_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_diff_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4175,13 +4207,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_diff_fns_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns_t *result = 0 ;
+ struct svn_diff_fns_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_diff_fns_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_diff_fns_t *)calloc(1, sizeof(svn_diff_fns_t));
+ result = (struct svn_diff_fns_t *)calloc(1, sizeof(struct svn_diff_fns_t));
svn_swig_py_acquire_py_lock();
@@ -4196,12 +4228,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_diff_fns_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_diff_fns_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_diff_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4760,14 +4792,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_output_fns_t_output_common_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t) = (svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_diff_output_fns_t_output_common_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_diff_output_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_output_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_output_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_output_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4788,13 +4820,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_output_fns_t_output_common_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_diff_output_fns_t_output_common_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_diff_output_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_output_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_output_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_output_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4809,14 +4841,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_output_fns_t_output_diff_modified_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t) = (svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_diff_output_fns_t_output_diff_modified_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_diff_output_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_output_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_output_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_output_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4837,13 +4869,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_output_fns_t_output_diff_modified_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_diff_output_fns_t_output_diff_modified_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_diff_output_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_output_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_output_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_output_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4858,14 +4890,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_output_fns_t_output_diff_latest_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t) = (svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_diff_output_fns_t_output_diff_latest_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_diff_output_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_output_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_output_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_output_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4886,13 +4918,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_output_fns_t_output_diff_latest_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_diff_output_fns_t_output_diff_latest_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_diff_output_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_output_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_output_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_output_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4907,14 +4939,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_output_fns_t_output_diff_common_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t) = (svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_diff_output_fns_t_output_diff_common_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_diff_output_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_output_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_output_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_output_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4935,13 +4967,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_output_fns_t_output_diff_common_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_diff_output_fns_t_output_diff_common_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_diff_output_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_output_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_output_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_output_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4956,14 +4988,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_output_fns_t_output_conflict_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,svn_diff_t *) = (svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,svn_diff_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_diff_output_fns_t_output_conflict_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_diff_output_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_output_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_output_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_output_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4984,13 +5016,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_output_fns_t_output_conflict_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,svn_diff_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_diff_output_fns_t_output_conflict_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_diff_output_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_output_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_output_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_output_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5005,13 +5037,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_diff_output_fns_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_output_fns_t *result = 0 ;
+ struct svn_diff_output_fns_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_diff_output_fns_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_diff_output_fns_t *)calloc(1, sizeof(svn_diff_output_fns_t));
+ result = (struct svn_diff_output_fns_t *)calloc(1, sizeof(struct svn_diff_output_fns_t));
svn_swig_py_acquire_py_lock();
@@ -5026,12 +5058,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_diff_output_fns_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_diff_output_fns_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_diff_output_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_output_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_output_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_output_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5116,14 +5148,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_file_options_t_ignore_space_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_file_options_t *arg1 = (svn_diff_file_options_t *) 0 ;
+ struct svn_diff_file_options_t *arg1 = (struct svn_diff_file_options_t *) 0 ;
svn_diff_file_ignore_space_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_diff_file_options_t_ignore_space_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_diff_file_options_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_file_options_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_file_options_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_file_options_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5144,13 +5176,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_file_options_t_ignore_space_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_file_options_t *arg1 = (svn_diff_file_options_t *) 0 ;
+ struct svn_diff_file_options_t *arg1 = (struct svn_diff_file_options_t *) 0 ;
PyObject * obj0 = 0 ;
svn_diff_file_ignore_space_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_diff_file_options_t_ignore_space_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_diff_file_options_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_file_options_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_file_options_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_file_options_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5165,14 +5197,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_file_options_t_ignore_eol_style_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_file_options_t *arg1 = (svn_diff_file_options_t *) 0 ;
+ struct svn_diff_file_options_t *arg1 = (struct svn_diff_file_options_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_diff_file_options_t_ignore_eol_style_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_diff_file_options_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_file_options_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_file_options_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_file_options_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5193,13 +5225,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_file_options_t_ignore_eol_style_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_file_options_t *arg1 = (svn_diff_file_options_t *) 0 ;
+ struct svn_diff_file_options_t *arg1 = (struct svn_diff_file_options_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_diff_file_options_t_ignore_eol_style_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_diff_file_options_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_file_options_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_file_options_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_file_options_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5214,14 +5246,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_file_options_t_show_c_function_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_file_options_t *arg1 = (svn_diff_file_options_t *) 0 ;
+ struct svn_diff_file_options_t *arg1 = (struct svn_diff_file_options_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_diff_file_options_t_show_c_function_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_diff_file_options_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_file_options_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_file_options_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_file_options_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5242,13 +5274,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_diff_file_options_t_show_c_function_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_file_options_t *arg1 = (svn_diff_file_options_t *) 0 ;
+ struct svn_diff_file_options_t *arg1 = (struct svn_diff_file_options_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_diff_file_options_t_show_c_function_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_diff_file_options_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_file_options_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_file_options_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_file_options_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5263,13 +5295,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_diff_file_options_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_file_options_t *result = 0 ;
+ struct svn_diff_file_options_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_diff_file_options_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_diff_file_options_t *)calloc(1, sizeof(svn_diff_file_options_t));
+ result = (struct svn_diff_file_options_t *)calloc(1, sizeof(struct svn_diff_file_options_t));
svn_swig_py_acquire_py_lock();
@@ -5284,12 +5316,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_diff_file_options_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_diff_file_options_t *arg1 = (svn_diff_file_options_t *) 0 ;
+ struct svn_diff_file_options_t *arg1 = (struct svn_diff_file_options_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_diff_file_options_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_diff_file_options_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_file_options_t, svn_argnum_obj0);
+ arg1 = (struct svn_diff_file_options_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_diff_file_options_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7659,13 +7691,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_prop_patch_t_name_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_prop_patch_t *arg1 = (svn_prop_patch_t *) 0 ;
+ struct svn_prop_patch_t *arg1 = (struct svn_prop_patch_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_prop_patch_t_name_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_prop_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_prop_patch_t, svn_argnum_obj0);
+ arg1 = (struct svn_prop_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_prop_patch_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7687,13 +7719,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_prop_patch_t_name_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_prop_patch_t *arg1 = (svn_prop_patch_t *) 0 ;
+ struct svn_prop_patch_t *arg1 = (struct svn_prop_patch_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_prop_patch_t_name_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_prop_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_prop_patch_t, svn_argnum_obj0);
+ arg1 = (struct svn_prop_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_prop_patch_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7708,14 +7740,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_prop_patch_t_operation_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_prop_patch_t *arg1 = (svn_prop_patch_t *) 0 ;
+ struct svn_prop_patch_t *arg1 = (struct svn_prop_patch_t *) 0 ;
svn_diff_operation_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_prop_patch_t_operation_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_prop_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_prop_patch_t, svn_argnum_obj0);
+ arg1 = (struct svn_prop_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_prop_patch_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7736,13 +7768,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_prop_patch_t_operation_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_prop_patch_t *arg1 = (svn_prop_patch_t *) 0 ;
+ struct svn_prop_patch_t *arg1 = (struct svn_prop_patch_t *) 0 ;
PyObject * obj0 = 0 ;
svn_diff_operation_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_prop_patch_t_operation_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_prop_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_prop_patch_t, svn_argnum_obj0);
+ arg1 = (struct svn_prop_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_prop_patch_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7757,14 +7789,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_prop_patch_t_hunks_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_prop_patch_t *arg1 = (svn_prop_patch_t *) 0 ;
+ struct svn_prop_patch_t *arg1 = (struct svn_prop_patch_t *) 0 ;
apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_prop_patch_t_hunks_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_prop_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_prop_patch_t, svn_argnum_obj0);
+ arg1 = (struct svn_prop_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_prop_patch_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7785,13 +7817,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_prop_patch_t_hunks_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_prop_patch_t *arg1 = (svn_prop_patch_t *) 0 ;
+ struct svn_prop_patch_t *arg1 = (struct svn_prop_patch_t *) 0 ;
PyObject * obj0 = 0 ;
apr_array_header_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_prop_patch_t_hunks_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_prop_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_prop_patch_t, svn_argnum_obj0);
+ arg1 = (struct svn_prop_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_prop_patch_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7807,13 +7839,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_prop_patch_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_prop_patch_t *result = 0 ;
+ struct svn_prop_patch_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_prop_patch_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_prop_patch_t *)calloc(1, sizeof(svn_prop_patch_t));
+ result = (struct svn_prop_patch_t *)calloc(1, sizeof(struct svn_prop_patch_t));
svn_swig_py_acquire_py_lock();
@@ -7828,12 +7860,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_prop_patch_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_prop_patch_t *arg1 = (svn_prop_patch_t *) 0 ;
+ struct svn_prop_patch_t *arg1 = (struct svn_prop_patch_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_prop_patch_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_prop_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_prop_patch_t, svn_argnum_obj0);
+ arg1 = (struct svn_prop_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_prop_patch_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7862,13 +7894,13 @@ SWIGINTERN PyObject *svn_prop_patch_t_swigregister(PyObject *SWIGUNUSEDPARM(self
SWIGINTERN PyObject *_wrap_svn_patch_t_old_filename_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_patch_t_old_filename_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_patch_t, svn_argnum_obj0);
+ arg1 = (struct svn_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_patch_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7890,13 +7922,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_patch_t_old_filename_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_patch_t_old_filename_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_patch_t, svn_argnum_obj0);
+ arg1 = (struct svn_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_patch_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7911,13 +7943,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_patch_t_new_filename_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_patch_t_new_filename_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_patch_t, svn_argnum_obj0);
+ arg1 = (struct svn_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_patch_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7939,13 +7971,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_patch_t_new_filename_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_patch_t_new_filename_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_patch_t, svn_argnum_obj0);
+ arg1 = (struct svn_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_patch_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7960,14 +7992,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_patch_t_hunks_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_patch_t_hunks_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_patch_t, svn_argnum_obj0);
+ arg1 = (struct svn_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_patch_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7988,13 +8020,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_patch_t_hunks_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
PyObject * obj0 = 0 ;
apr_array_header_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_patch_t_hunks_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_patch_t, svn_argnum_obj0);
+ arg1 = (struct svn_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_patch_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8010,14 +8042,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_patch_t_prop_patches_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
apr_hash_t *arg2 = (apr_hash_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_patch_t_prop_patches_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_patch_t, svn_argnum_obj0);
+ arg1 = (struct svn_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_patch_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8038,13 +8070,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_patch_t_prop_patches_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
PyObject * obj0 = 0 ;
apr_hash_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_patch_t_prop_patches_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_patch_t, svn_argnum_obj0);
+ arg1 = (struct svn_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_patch_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8060,14 +8092,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_patch_t_operation_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
svn_diff_operation_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_patch_t_operation_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_patch_t, svn_argnum_obj0);
+ arg1 = (struct svn_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_patch_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8088,13 +8120,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_patch_t_operation_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
PyObject * obj0 = 0 ;
svn_diff_operation_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_patch_t_operation_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_patch_t, svn_argnum_obj0);
+ arg1 = (struct svn_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_patch_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8109,14 +8141,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_patch_t_reverse_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_patch_t_reverse_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_patch_t, svn_argnum_obj0);
+ arg1 = (struct svn_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_patch_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8137,13 +8169,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_patch_t_reverse_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_patch_t_reverse_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_patch_t, svn_argnum_obj0);
+ arg1 = (struct svn_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_patch_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8158,13 +8190,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_patch_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_patch_t *result = 0 ;
+ struct svn_patch_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_patch_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_patch_t *)calloc(1, sizeof(svn_patch_t));
+ result = (struct svn_patch_t *)calloc(1, sizeof(struct svn_patch_t));
svn_swig_py_acquire_py_lock();
@@ -8179,12 +8211,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_patch_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_patch_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_patch_t, svn_argnum_obj0);
+ arg1 = (struct svn_patch_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_patch_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8256,13 +8288,10 @@ SWIGINTERN PyObject *_wrap_svn_diff_open_patch_file(PyObject *SWIGUNUSEDPARM(sel
resultobj = Py_None;
}
{
- /* FIXME: Missing argout typemap: svn_diff_open_patch_file arg 1 (svn_patch_file_t **) */
-
-
-
-
- SWIG_exception(SWIG_ValueError, "svn_diff_open_patch_file is not implemented yet");
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg1, SWIGTYPE_p_svn_patch_file_t,
+ _global_py_pool, args))
+ ;
}
{
Py_XDECREF(_global_py_pool);
@@ -8358,13 +8387,10 @@ SWIGINTERN PyObject *_wrap_svn_diff_parse_next_patch(PyObject *SWIGUNUSEDPARM(se
resultobj = Py_None;
}
{
- /* FIXME: Missing argout typemap: svn_diff_parse_next_patch arg 1 (svn_patch_t **) */
-
-
-
-
- SWIG_exception(SWIG_ValueError, "svn_diff_parse_next_patch is not implemented yet");
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg1, SWIGTYPE_p_svn_patch_t,
+ _global_py_pool, args))
+ ;
}
{
Py_XDECREF(_global_py_pool);
@@ -9515,59 +9541,59 @@ fail:
static PyMethodDef SwigMethods[] = {
{ (char *)"SWIG_PyInstanceMethod_New", (PyCFunction)SWIG_PyInstanceMethod_New, METH_O, NULL},
- { (char *)"svn_diff_version", _wrap_svn_diff_version, METH_VARARGS, (char *)"svn_diff_version() -> svn_version_t"},
- { (char *)"svn_diff_fns2_t_datasources_open_set", _wrap_svn_diff_fns2_t_datasources_open_set, METH_VARARGS, (char *)"svn_diff_fns2_t_datasources_open_set(svn_diff_fns2_t self, svn_error_t datasources_open)"},
- { (char *)"svn_diff_fns2_t_datasources_open_get", _wrap_svn_diff_fns2_t_datasources_open_get, METH_VARARGS, (char *)"svn_diff_fns2_t_datasources_open_get(svn_diff_fns2_t self) -> svn_error_t"},
- { (char *)"svn_diff_fns2_t_datasource_close_set", _wrap_svn_diff_fns2_t_datasource_close_set, METH_VARARGS, (char *)"svn_diff_fns2_t_datasource_close_set(svn_diff_fns2_t self, svn_error_t datasource_close)"},
- { (char *)"svn_diff_fns2_t_datasource_close_get", _wrap_svn_diff_fns2_t_datasource_close_get, METH_VARARGS, (char *)"svn_diff_fns2_t_datasource_close_get(svn_diff_fns2_t self) -> svn_error_t"},
- { (char *)"svn_diff_fns2_t_datasource_get_next_token_set", _wrap_svn_diff_fns2_t_datasource_get_next_token_set, METH_VARARGS, (char *)"svn_diff_fns2_t_datasource_get_next_token_set(svn_diff_fns2_t self, svn_error_t datasource_get_next_token)"},
- { (char *)"svn_diff_fns2_t_datasource_get_next_token_get", _wrap_svn_diff_fns2_t_datasource_get_next_token_get, METH_VARARGS, (char *)"svn_diff_fns2_t_datasource_get_next_token_get(svn_diff_fns2_t self) -> svn_error_t"},
- { (char *)"svn_diff_fns2_t_token_compare_set", _wrap_svn_diff_fns2_t_token_compare_set, METH_VARARGS, (char *)"svn_diff_fns2_t_token_compare_set(svn_diff_fns2_t self, svn_error_t token_compare)"},
- { (char *)"svn_diff_fns2_t_token_compare_get", _wrap_svn_diff_fns2_t_token_compare_get, METH_VARARGS, (char *)"svn_diff_fns2_t_token_compare_get(svn_diff_fns2_t self) -> svn_error_t"},
- { (char *)"svn_diff_fns2_t_token_discard_set", _wrap_svn_diff_fns2_t_token_discard_set, METH_VARARGS, (char *)"svn_diff_fns2_t_token_discard_set(svn_diff_fns2_t self, void token_discard)"},
- { (char *)"svn_diff_fns2_t_token_discard_get", _wrap_svn_diff_fns2_t_token_discard_get, METH_VARARGS, (char *)"svn_diff_fns2_t_token_discard_get(svn_diff_fns2_t self) -> void"},
- { (char *)"svn_diff_fns2_t_token_discard_all_set", _wrap_svn_diff_fns2_t_token_discard_all_set, METH_VARARGS, (char *)"svn_diff_fns2_t_token_discard_all_set(svn_diff_fns2_t self, void token_discard_all)"},
- { (char *)"svn_diff_fns2_t_token_discard_all_get", _wrap_svn_diff_fns2_t_token_discard_all_get, METH_VARARGS, (char *)"svn_diff_fns2_t_token_discard_all_get(svn_diff_fns2_t self) -> void"},
+ { (char *)"svn_diff_version", _wrap_svn_diff_version, METH_VARARGS, (char *)"svn_diff_version() -> svn_version_t const *"},
+ { (char *)"svn_diff_fns2_t_datasources_open_set", _wrap_svn_diff_fns2_t_datasources_open_set, METH_VARARGS, (char *)"svn_diff_fns2_t_datasources_open_set(svn_diff_fns2_t self, svn_error_t *(*)(void *,apr_off_t *,apr_off_t *,svn_diff_datasource_e const *,apr_size_t) datasources_open)"},
+ { (char *)"svn_diff_fns2_t_datasources_open_get", _wrap_svn_diff_fns2_t_datasources_open_get, METH_VARARGS, (char *)"svn_diff_fns2_t_datasources_open_get(svn_diff_fns2_t self) -> svn_error_t *(*)(void *,apr_off_t *,apr_off_t *,svn_diff_datasource_e const *,apr_size_t)"},
+ { (char *)"svn_diff_fns2_t_datasource_close_set", _wrap_svn_diff_fns2_t_datasource_close_set, METH_VARARGS, (char *)"svn_diff_fns2_t_datasource_close_set(svn_diff_fns2_t self, svn_error_t *(*)(void *,svn_diff_datasource_e) datasource_close)"},
+ { (char *)"svn_diff_fns2_t_datasource_close_get", _wrap_svn_diff_fns2_t_datasource_close_get, METH_VARARGS, (char *)"svn_diff_fns2_t_datasource_close_get(svn_diff_fns2_t self) -> svn_error_t *(*)(void *,svn_diff_datasource_e)"},
+ { (char *)"svn_diff_fns2_t_datasource_get_next_token_set", _wrap_svn_diff_fns2_t_datasource_get_next_token_set, METH_VARARGS, (char *)"svn_diff_fns2_t_datasource_get_next_token_set(svn_diff_fns2_t self, svn_error_t *(*)(apr_uint32_t *,void **,void *,svn_diff_datasource_e) datasource_get_next_token)"},
+ { (char *)"svn_diff_fns2_t_datasource_get_next_token_get", _wrap_svn_diff_fns2_t_datasource_get_next_token_get, METH_VARARGS, (char *)"svn_diff_fns2_t_datasource_get_next_token_get(svn_diff_fns2_t self) -> svn_error_t *(*)(apr_uint32_t *,void **,void *,svn_diff_datasource_e)"},
+ { (char *)"svn_diff_fns2_t_token_compare_set", _wrap_svn_diff_fns2_t_token_compare_set, METH_VARARGS, (char *)"svn_diff_fns2_t_token_compare_set(svn_diff_fns2_t self, svn_error_t *(*)(void *,void *,void *,int *) token_compare)"},
+ { (char *)"svn_diff_fns2_t_token_compare_get", _wrap_svn_diff_fns2_t_token_compare_get, METH_VARARGS, (char *)"svn_diff_fns2_t_token_compare_get(svn_diff_fns2_t self) -> svn_error_t *(*)(void *,void *,void *,int *)"},
+ { (char *)"svn_diff_fns2_t_token_discard_set", _wrap_svn_diff_fns2_t_token_discard_set, METH_VARARGS, (char *)"svn_diff_fns2_t_token_discard_set(svn_diff_fns2_t self, void (*)(void *,void *) token_discard)"},
+ { (char *)"svn_diff_fns2_t_token_discard_get", _wrap_svn_diff_fns2_t_token_discard_get, METH_VARARGS, (char *)"svn_diff_fns2_t_token_discard_get(svn_diff_fns2_t self) -> void (*)(void *,void *)"},
+ { (char *)"svn_diff_fns2_t_token_discard_all_set", _wrap_svn_diff_fns2_t_token_discard_all_set, METH_VARARGS, (char *)"svn_diff_fns2_t_token_discard_all_set(svn_diff_fns2_t self, void (*)(void *) token_discard_all)"},
+ { (char *)"svn_diff_fns2_t_token_discard_all_get", _wrap_svn_diff_fns2_t_token_discard_all_get, METH_VARARGS, (char *)"svn_diff_fns2_t_token_discard_all_get(svn_diff_fns2_t self) -> void (*)(void *)"},
{ (char *)"new_svn_diff_fns2_t", _wrap_new_svn_diff_fns2_t, METH_VARARGS, (char *)"new_svn_diff_fns2_t() -> svn_diff_fns2_t"},
{ (char *)"delete_svn_diff_fns2_t", _wrap_delete_svn_diff_fns2_t, METH_VARARGS, (char *)"delete_svn_diff_fns2_t(svn_diff_fns2_t self)"},
{ (char *)"svn_diff_fns2_t_swigregister", svn_diff_fns2_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_diff_fns_t_datasource_open_set", _wrap_svn_diff_fns_t_datasource_open_set, METH_VARARGS, (char *)"svn_diff_fns_t_datasource_open_set(svn_diff_fns_t self, svn_error_t datasource_open)"},
- { (char *)"svn_diff_fns_t_datasource_open_get", _wrap_svn_diff_fns_t_datasource_open_get, METH_VARARGS, (char *)"svn_diff_fns_t_datasource_open_get(svn_diff_fns_t self) -> svn_error_t"},
- { (char *)"svn_diff_fns_t_datasource_close_set", _wrap_svn_diff_fns_t_datasource_close_set, METH_VARARGS, (char *)"svn_diff_fns_t_datasource_close_set(svn_diff_fns_t self, svn_error_t datasource_close)"},
- { (char *)"svn_diff_fns_t_datasource_close_get", _wrap_svn_diff_fns_t_datasource_close_get, METH_VARARGS, (char *)"svn_diff_fns_t_datasource_close_get(svn_diff_fns_t self) -> svn_error_t"},
- { (char *)"svn_diff_fns_t_datasource_get_next_token_set", _wrap_svn_diff_fns_t_datasource_get_next_token_set, METH_VARARGS, (char *)"svn_diff_fns_t_datasource_get_next_token_set(svn_diff_fns_t self, svn_error_t datasource_get_next_token)"},
- { (char *)"svn_diff_fns_t_datasource_get_next_token_get", _wrap_svn_diff_fns_t_datasource_get_next_token_get, METH_VARARGS, (char *)"svn_diff_fns_t_datasource_get_next_token_get(svn_diff_fns_t self) -> svn_error_t"},
- { (char *)"svn_diff_fns_t_token_compare_set", _wrap_svn_diff_fns_t_token_compare_set, METH_VARARGS, (char *)"svn_diff_fns_t_token_compare_set(svn_diff_fns_t self, svn_error_t token_compare)"},
- { (char *)"svn_diff_fns_t_token_compare_get", _wrap_svn_diff_fns_t_token_compare_get, METH_VARARGS, (char *)"svn_diff_fns_t_token_compare_get(svn_diff_fns_t self) -> svn_error_t"},
- { (char *)"svn_diff_fns_t_token_discard_set", _wrap_svn_diff_fns_t_token_discard_set, METH_VARARGS, (char *)"svn_diff_fns_t_token_discard_set(svn_diff_fns_t self, void token_discard)"},
- { (char *)"svn_diff_fns_t_token_discard_get", _wrap_svn_diff_fns_t_token_discard_get, METH_VARARGS, (char *)"svn_diff_fns_t_token_discard_get(svn_diff_fns_t self) -> void"},
- { (char *)"svn_diff_fns_t_token_discard_all_set", _wrap_svn_diff_fns_t_token_discard_all_set, METH_VARARGS, (char *)"svn_diff_fns_t_token_discard_all_set(svn_diff_fns_t self, void token_discard_all)"},
- { (char *)"svn_diff_fns_t_token_discard_all_get", _wrap_svn_diff_fns_t_token_discard_all_get, METH_VARARGS, (char *)"svn_diff_fns_t_token_discard_all_get(svn_diff_fns_t self) -> void"},
+ { (char *)"svn_diff_fns_t_datasource_open_set", _wrap_svn_diff_fns_t_datasource_open_set, METH_VARARGS, (char *)"svn_diff_fns_t_datasource_open_set(svn_diff_fns_t self, svn_error_t *(*)(void *,svn_diff_datasource_e) datasource_open)"},
+ { (char *)"svn_diff_fns_t_datasource_open_get", _wrap_svn_diff_fns_t_datasource_open_get, METH_VARARGS, (char *)"svn_diff_fns_t_datasource_open_get(svn_diff_fns_t self) -> svn_error_t *(*)(void *,svn_diff_datasource_e)"},
+ { (char *)"svn_diff_fns_t_datasource_close_set", _wrap_svn_diff_fns_t_datasource_close_set, METH_VARARGS, (char *)"svn_diff_fns_t_datasource_close_set(svn_diff_fns_t self, svn_error_t *(*)(void *,svn_diff_datasource_e) datasource_close)"},
+ { (char *)"svn_diff_fns_t_datasource_close_get", _wrap_svn_diff_fns_t_datasource_close_get, METH_VARARGS, (char *)"svn_diff_fns_t_datasource_close_get(svn_diff_fns_t self) -> svn_error_t *(*)(void *,svn_diff_datasource_e)"},
+ { (char *)"svn_diff_fns_t_datasource_get_next_token_set", _wrap_svn_diff_fns_t_datasource_get_next_token_set, METH_VARARGS, (char *)"svn_diff_fns_t_datasource_get_next_token_set(svn_diff_fns_t self, svn_error_t *(*)(apr_uint32_t *,void **,void *,svn_diff_datasource_e) datasource_get_next_token)"},
+ { (char *)"svn_diff_fns_t_datasource_get_next_token_get", _wrap_svn_diff_fns_t_datasource_get_next_token_get, METH_VARARGS, (char *)"svn_diff_fns_t_datasource_get_next_token_get(svn_diff_fns_t self) -> svn_error_t *(*)(apr_uint32_t *,void **,void *,svn_diff_datasource_e)"},
+ { (char *)"svn_diff_fns_t_token_compare_set", _wrap_svn_diff_fns_t_token_compare_set, METH_VARARGS, (char *)"svn_diff_fns_t_token_compare_set(svn_diff_fns_t self, svn_error_t *(*)(void *,void *,void *,int *) token_compare)"},
+ { (char *)"svn_diff_fns_t_token_compare_get", _wrap_svn_diff_fns_t_token_compare_get, METH_VARARGS, (char *)"svn_diff_fns_t_token_compare_get(svn_diff_fns_t self) -> svn_error_t *(*)(void *,void *,void *,int *)"},
+ { (char *)"svn_diff_fns_t_token_discard_set", _wrap_svn_diff_fns_t_token_discard_set, METH_VARARGS, (char *)"svn_diff_fns_t_token_discard_set(svn_diff_fns_t self, void (*)(void *,void *) token_discard)"},
+ { (char *)"svn_diff_fns_t_token_discard_get", _wrap_svn_diff_fns_t_token_discard_get, METH_VARARGS, (char *)"svn_diff_fns_t_token_discard_get(svn_diff_fns_t self) -> void (*)(void *,void *)"},
+ { (char *)"svn_diff_fns_t_token_discard_all_set", _wrap_svn_diff_fns_t_token_discard_all_set, METH_VARARGS, (char *)"svn_diff_fns_t_token_discard_all_set(svn_diff_fns_t self, void (*)(void *) token_discard_all)"},
+ { (char *)"svn_diff_fns_t_token_discard_all_get", _wrap_svn_diff_fns_t_token_discard_all_get, METH_VARARGS, (char *)"svn_diff_fns_t_token_discard_all_get(svn_diff_fns_t self) -> void (*)(void *)"},
{ (char *)"new_svn_diff_fns_t", _wrap_new_svn_diff_fns_t, METH_VARARGS, (char *)"new_svn_diff_fns_t() -> svn_diff_fns_t"},
{ (char *)"delete_svn_diff_fns_t", _wrap_delete_svn_diff_fns_t, METH_VARARGS, (char *)"delete_svn_diff_fns_t(svn_diff_fns_t self)"},
{ (char *)"svn_diff_fns_t_swigregister", svn_diff_fns_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_diff_diff_2", _wrap_svn_diff_diff_2, METH_VARARGS, (char *)"svn_diff_diff_2(void diff_baton, svn_diff_fns2_t diff_fns, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_diff_diff", _wrap_svn_diff_diff, METH_VARARGS, (char *)"svn_diff_diff(void diff_baton, svn_diff_fns_t diff_fns, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_diff_diff3_2", _wrap_svn_diff_diff3_2, METH_VARARGS, (char *)"svn_diff_diff3_2(void diff_baton, svn_diff_fns2_t diff_fns, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_diff_diff3", _wrap_svn_diff_diff3, METH_VARARGS, (char *)"svn_diff_diff3(void diff_baton, svn_diff_fns_t diff_fns, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_diff_diff4_2", _wrap_svn_diff_diff4_2, METH_VARARGS, (char *)"svn_diff_diff4_2(void diff_baton, svn_diff_fns2_t diff_fns, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_diff_diff4", _wrap_svn_diff_diff4, METH_VARARGS, (char *)"svn_diff_diff4(void diff_baton, svn_diff_fns_t diff_fns, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_diff_contains_conflicts", _wrap_svn_diff_contains_conflicts, METH_VARARGS, (char *)"svn_diff_contains_conflicts(svn_diff_t diff) -> svn_boolean_t"},
- { (char *)"svn_diff_contains_diffs", _wrap_svn_diff_contains_diffs, METH_VARARGS, (char *)"svn_diff_contains_diffs(svn_diff_t diff) -> svn_boolean_t"},
- { (char *)"svn_diff_output_fns_t_output_common_set", _wrap_svn_diff_output_fns_t_output_common_set, METH_VARARGS, (char *)"svn_diff_output_fns_t_output_common_set(svn_diff_output_fns_t self, svn_error_t output_common)"},
- { (char *)"svn_diff_output_fns_t_output_common_get", _wrap_svn_diff_output_fns_t_output_common_get, METH_VARARGS, (char *)"svn_diff_output_fns_t_output_common_get(svn_diff_output_fns_t self) -> svn_error_t"},
- { (char *)"svn_diff_output_fns_t_output_diff_modified_set", _wrap_svn_diff_output_fns_t_output_diff_modified_set, METH_VARARGS, (char *)"svn_diff_output_fns_t_output_diff_modified_set(svn_diff_output_fns_t self, svn_error_t output_diff_modified)"},
- { (char *)"svn_diff_output_fns_t_output_diff_modified_get", _wrap_svn_diff_output_fns_t_output_diff_modified_get, METH_VARARGS, (char *)"svn_diff_output_fns_t_output_diff_modified_get(svn_diff_output_fns_t self) -> svn_error_t"},
- { (char *)"svn_diff_output_fns_t_output_diff_latest_set", _wrap_svn_diff_output_fns_t_output_diff_latest_set, METH_VARARGS, (char *)"svn_diff_output_fns_t_output_diff_latest_set(svn_diff_output_fns_t self, svn_error_t output_diff_latest)"},
- { (char *)"svn_diff_output_fns_t_output_diff_latest_get", _wrap_svn_diff_output_fns_t_output_diff_latest_get, METH_VARARGS, (char *)"svn_diff_output_fns_t_output_diff_latest_get(svn_diff_output_fns_t self) -> svn_error_t"},
- { (char *)"svn_diff_output_fns_t_output_diff_common_set", _wrap_svn_diff_output_fns_t_output_diff_common_set, METH_VARARGS, (char *)"svn_diff_output_fns_t_output_diff_common_set(svn_diff_output_fns_t self, svn_error_t output_diff_common)"},
- { (char *)"svn_diff_output_fns_t_output_diff_common_get", _wrap_svn_diff_output_fns_t_output_diff_common_get, METH_VARARGS, (char *)"svn_diff_output_fns_t_output_diff_common_get(svn_diff_output_fns_t self) -> svn_error_t"},
- { (char *)"svn_diff_output_fns_t_output_conflict_set", _wrap_svn_diff_output_fns_t_output_conflict_set, METH_VARARGS, (char *)"svn_diff_output_fns_t_output_conflict_set(svn_diff_output_fns_t self, svn_error_t output_conflict)"},
- { (char *)"svn_diff_output_fns_t_output_conflict_get", _wrap_svn_diff_output_fns_t_output_conflict_get, METH_VARARGS, (char *)"svn_diff_output_fns_t_output_conflict_get(svn_diff_output_fns_t self) -> svn_error_t"},
+ { (char *)"svn_diff_diff_2", _wrap_svn_diff_diff_2, METH_VARARGS, (char *)"svn_diff_diff_2(void * diff_baton, svn_diff_fns2_t diff_fns, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_diff_diff", _wrap_svn_diff_diff, METH_VARARGS, (char *)"svn_diff_diff(void * diff_baton, svn_diff_fns_t diff_fns, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_diff_diff3_2", _wrap_svn_diff_diff3_2, METH_VARARGS, (char *)"svn_diff_diff3_2(void * diff_baton, svn_diff_fns2_t diff_fns, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_diff_diff3", _wrap_svn_diff_diff3, METH_VARARGS, (char *)"svn_diff_diff3(void * diff_baton, svn_diff_fns_t diff_fns, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_diff_diff4_2", _wrap_svn_diff_diff4_2, METH_VARARGS, (char *)"svn_diff_diff4_2(void * diff_baton, svn_diff_fns2_t diff_fns, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_diff_diff4", _wrap_svn_diff_diff4, METH_VARARGS, (char *)"svn_diff_diff4(void * diff_baton, svn_diff_fns_t diff_fns, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_diff_contains_conflicts", _wrap_svn_diff_contains_conflicts, METH_VARARGS, (char *)"svn_diff_contains_conflicts(svn_diff_t * diff) -> svn_boolean_t"},
+ { (char *)"svn_diff_contains_diffs", _wrap_svn_diff_contains_diffs, METH_VARARGS, (char *)"svn_diff_contains_diffs(svn_diff_t * diff) -> svn_boolean_t"},
+ { (char *)"svn_diff_output_fns_t_output_common_set", _wrap_svn_diff_output_fns_t_output_common_set, METH_VARARGS, (char *)"svn_diff_output_fns_t_output_common_set(svn_diff_output_fns_t self, svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t) output_common)"},
+ { (char *)"svn_diff_output_fns_t_output_common_get", _wrap_svn_diff_output_fns_t_output_common_get, METH_VARARGS, (char *)"svn_diff_output_fns_t_output_common_get(svn_diff_output_fns_t self) -> svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t)"},
+ { (char *)"svn_diff_output_fns_t_output_diff_modified_set", _wrap_svn_diff_output_fns_t_output_diff_modified_set, METH_VARARGS, (char *)"svn_diff_output_fns_t_output_diff_modified_set(svn_diff_output_fns_t self, svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t) output_diff_modified)"},
+ { (char *)"svn_diff_output_fns_t_output_diff_modified_get", _wrap_svn_diff_output_fns_t_output_diff_modified_get, METH_VARARGS, (char *)"svn_diff_output_fns_t_output_diff_modified_get(svn_diff_output_fns_t self) -> svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t)"},
+ { (char *)"svn_diff_output_fns_t_output_diff_latest_set", _wrap_svn_diff_output_fns_t_output_diff_latest_set, METH_VARARGS, (char *)"svn_diff_output_fns_t_output_diff_latest_set(svn_diff_output_fns_t self, svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t) output_diff_latest)"},
+ { (char *)"svn_diff_output_fns_t_output_diff_latest_get", _wrap_svn_diff_output_fns_t_output_diff_latest_get, METH_VARARGS, (char *)"svn_diff_output_fns_t_output_diff_latest_get(svn_diff_output_fns_t self) -> svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t)"},
+ { (char *)"svn_diff_output_fns_t_output_diff_common_set", _wrap_svn_diff_output_fns_t_output_diff_common_set, METH_VARARGS, (char *)"svn_diff_output_fns_t_output_diff_common_set(svn_diff_output_fns_t self, svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t) output_diff_common)"},
+ { (char *)"svn_diff_output_fns_t_output_diff_common_get", _wrap_svn_diff_output_fns_t_output_diff_common_get, METH_VARARGS, (char *)"svn_diff_output_fns_t_output_diff_common_get(svn_diff_output_fns_t self) -> svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t)"},
+ { (char *)"svn_diff_output_fns_t_output_conflict_set", _wrap_svn_diff_output_fns_t_output_conflict_set, METH_VARARGS, (char *)"svn_diff_output_fns_t_output_conflict_set(svn_diff_output_fns_t self, svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,svn_diff_t *) output_conflict)"},
+ { (char *)"svn_diff_output_fns_t_output_conflict_get", _wrap_svn_diff_output_fns_t_output_conflict_get, METH_VARARGS, (char *)"svn_diff_output_fns_t_output_conflict_get(svn_diff_output_fns_t self) -> svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,svn_diff_t *)"},
{ (char *)"new_svn_diff_output_fns_t", _wrap_new_svn_diff_output_fns_t, METH_VARARGS, (char *)"new_svn_diff_output_fns_t() -> svn_diff_output_fns_t"},
{ (char *)"delete_svn_diff_output_fns_t", _wrap_delete_svn_diff_output_fns_t, METH_VARARGS, (char *)"delete_svn_diff_output_fns_t(svn_diff_output_fns_t self)"},
{ (char *)"svn_diff_output_fns_t_swigregister", svn_diff_output_fns_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_diff_output", _wrap_svn_diff_output, METH_VARARGS, (char *)"svn_diff_output(svn_diff_t diff, void output_baton, svn_diff_output_fns_t output_fns) -> svn_error_t"},
+ { (char *)"svn_diff_output", _wrap_svn_diff_output, METH_VARARGS, (char *)"svn_diff_output(svn_diff_t * diff, void * output_baton, svn_diff_output_fns_t output_fns) -> svn_error_t"},
{ (char *)"svn_diff_file_options_t_ignore_space_set", _wrap_svn_diff_file_options_t_ignore_space_set, METH_VARARGS, (char *)"svn_diff_file_options_t_ignore_space_set(svn_diff_file_options_t self, svn_diff_file_ignore_space_t ignore_space)"},
{ (char *)"svn_diff_file_options_t_ignore_space_get", _wrap_svn_diff_file_options_t_ignore_space_get, METH_VARARGS, (char *)"svn_diff_file_options_t_ignore_space_get(svn_diff_file_options_t self) -> svn_diff_file_ignore_space_t"},
{ (char *)"svn_diff_file_options_t_ignore_eol_style_set", _wrap_svn_diff_file_options_t_ignore_eol_style_set, METH_VARARGS, (char *)"svn_diff_file_options_t_ignore_eol_style_set(svn_diff_file_options_t self, svn_boolean_t ignore_eol_style)"},
@@ -9578,205 +9604,173 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"delete_svn_diff_file_options_t", _wrap_delete_svn_diff_file_options_t, METH_VARARGS, (char *)"delete_svn_diff_file_options_t(svn_diff_file_options_t self)"},
{ (char *)"svn_diff_file_options_t_swigregister", svn_diff_file_options_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_diff_file_options_create", _wrap_svn_diff_file_options_create, METH_VARARGS, (char *)"svn_diff_file_options_create(apr_pool_t pool) -> svn_diff_file_options_t"},
- { (char *)"svn_diff_file_options_parse", _wrap_svn_diff_file_options_parse, METH_VARARGS, (char *)"\n"
- "svn_diff_file_options_parse(svn_diff_file_options_t options, apr_array_header_t args, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_diff_file_diff_2", _wrap_svn_diff_file_diff_2, METH_VARARGS, (char *)"\n"
- "svn_diff_file_diff_2(char original, char modified, svn_diff_file_options_t options, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_diff_file_diff", _wrap_svn_diff_file_diff, METH_VARARGS, (char *)"svn_diff_file_diff(char original, char modified, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_diff_file_options_parse", _wrap_svn_diff_file_options_parse, METH_VARARGS, (char *)"svn_diff_file_options_parse(svn_diff_file_options_t options, apr_array_header_t args, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_diff_file_diff_2", _wrap_svn_diff_file_diff_2, METH_VARARGS, (char *)"svn_diff_file_diff_2(char const * original, char const * modified, svn_diff_file_options_t options, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_diff_file_diff", _wrap_svn_diff_file_diff, METH_VARARGS, (char *)"svn_diff_file_diff(char const * original, char const * modified, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_diff_file_diff3_2", _wrap_svn_diff_file_diff3_2, METH_VARARGS, (char *)"\n"
- "svn_diff_file_diff3_2(char original, char modified, char latest, svn_diff_file_options_t options, \n"
+ "svn_diff_file_diff3_2(char const * original, char const * modified, char const * latest, svn_diff_file_options_t options, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_diff_file_diff3", _wrap_svn_diff_file_diff3, METH_VARARGS, (char *)"svn_diff_file_diff3(char original, char modified, char latest, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_diff_file_diff3", _wrap_svn_diff_file_diff3, METH_VARARGS, (char *)"svn_diff_file_diff3(char const * original, char const * modified, char const * latest, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_diff_file_diff4_2", _wrap_svn_diff_file_diff4_2, METH_VARARGS, (char *)"\n"
- "svn_diff_file_diff4_2(char original, char modified, char latest, char ancestor, \n"
+ "svn_diff_file_diff4_2(char const * original, char const * modified, char const * latest, char const * ancestor, \n"
" svn_diff_file_options_t options, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_diff_file_diff4", _wrap_svn_diff_file_diff4, METH_VARARGS, (char *)"\n"
- "svn_diff_file_diff4(char original, char modified, char latest, char ancestor, \n"
+ "svn_diff_file_diff4(char const * original, char const * modified, char const * latest, char const * ancestor, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_diff_file_output_unified3", _wrap_svn_diff_file_output_unified3, METH_VARARGS, (char *)"\n"
- "svn_diff_file_output_unified3(svn_stream_t output_stream, svn_diff_t diff, char original_path, \n"
- " char modified_path, char original_header, \n"
- " char modified_header, char header_encoding, \n"
- " char relative_to_dir, svn_boolean_t show_c_function, \n"
+ "svn_diff_file_output_unified3(svn_stream_t * output_stream, svn_diff_t * diff, char const * original_path, char const * modified_path, \n"
+ " char const * original_header, char const * modified_header, \n"
+ " char const * header_encoding, char const * relative_to_dir, svn_boolean_t show_c_function, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_diff_file_output_unified2", _wrap_svn_diff_file_output_unified2, METH_VARARGS, (char *)"\n"
- "svn_diff_file_output_unified2(svn_stream_t output_stream, svn_diff_t diff, char original_path, \n"
- " char modified_path, char original_header, \n"
- " char modified_header, char header_encoding, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_diff_file_output_unified2(svn_stream_t * output_stream, svn_diff_t * diff, char const * original_path, char const * modified_path, \n"
+ " char const * original_header, char const * modified_header, \n"
+ " char const * header_encoding, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_diff_file_output_unified", _wrap_svn_diff_file_output_unified, METH_VARARGS, (char *)"\n"
- "svn_diff_file_output_unified(svn_stream_t output_stream, svn_diff_t diff, char original_path, \n"
- " char modified_path, char original_header, \n"
- " char modified_header, apr_pool_t pool) -> svn_error_t\n"
+ "svn_diff_file_output_unified(svn_stream_t * output_stream, svn_diff_t * diff, char const * original_path, char const * modified_path, \n"
+ " char const * original_header, char const * modified_header, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_diff_file_output_merge2", _wrap_svn_diff_file_output_merge2, METH_VARARGS, (char *)"\n"
- "svn_diff_file_output_merge2(svn_stream_t output_stream, svn_diff_t diff, char original_path, \n"
- " char modified_path, char latest_path, \n"
- " char conflict_original, char conflict_modified, \n"
- " char conflict_latest, char conflict_separator, \n"
+ "svn_diff_file_output_merge2(svn_stream_t * output_stream, svn_diff_t * diff, char const * original_path, char const * modified_path, \n"
+ " char const * latest_path, char const * conflict_original, \n"
+ " char const * conflict_modified, char const * conflict_latest, char const * conflict_separator, \n"
" svn_diff_conflict_display_style_t conflict_style, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_diff_file_output_merge", _wrap_svn_diff_file_output_merge, METH_VARARGS, (char *)"\n"
- "svn_diff_file_output_merge(svn_stream_t output_stream, svn_diff_t diff, char original_path, \n"
- " char modified_path, char latest_path, \n"
- " char conflict_original, char conflict_modified, \n"
- " char conflict_latest, char conflict_separator, \n"
- " svn_boolean_t display_original_in_conflict, \n"
- " svn_boolean_t display_resolved_conflicts, \n"
+ "svn_diff_file_output_merge(svn_stream_t * output_stream, svn_diff_t * diff, char const * original_path, char const * modified_path, \n"
+ " char const * latest_path, char const * conflict_original, \n"
+ " char const * conflict_modified, char const * conflict_latest, char const * conflict_separator, \n"
+ " svn_boolean_t display_original_in_conflict, svn_boolean_t display_resolved_conflicts, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_diff_mem_string_diff", _wrap_svn_diff_mem_string_diff, METH_VARARGS, (char *)"\n"
- "svn_diff_mem_string_diff(svn_string_t original, svn_string_t modified, svn_diff_file_options_t options, \n"
+ "svn_diff_mem_string_diff(svn_string_t const * original, svn_string_t const * modified, svn_diff_file_options_t options, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_diff_mem_string_diff3", _wrap_svn_diff_mem_string_diff3, METH_VARARGS, (char *)"\n"
- "svn_diff_mem_string_diff3(svn_string_t original, svn_string_t modified, svn_string_t latest, \n"
- " svn_diff_file_options_t options, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_diff_mem_string_diff3(svn_string_t const * original, svn_string_t const * modified, svn_string_t const * latest, \n"
+ " svn_diff_file_options_t options, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_diff_mem_string_diff4", _wrap_svn_diff_mem_string_diff4, METH_VARARGS, (char *)"\n"
- "svn_diff_mem_string_diff4(svn_string_t original, svn_string_t modified, svn_string_t latest, \n"
- " svn_string_t ancestor, svn_diff_file_options_t options, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_diff_mem_string_diff4(svn_string_t const * original, svn_string_t const * modified, svn_string_t const * latest, \n"
+ " svn_string_t const * ancestor, svn_diff_file_options_t options, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_diff_mem_string_output_unified2", _wrap_svn_diff_mem_string_output_unified2, METH_VARARGS, (char *)"\n"
- "svn_diff_mem_string_output_unified2(svn_stream_t output_stream, svn_diff_t diff, svn_boolean_t with_diff_header, \n"
- " char hunk_delimiter, \n"
- " char original_header, char modified_header, \n"
- " char header_encoding, svn_string_t original, \n"
- " svn_string_t modified, apr_pool_t pool) -> svn_error_t\n"
+ "svn_diff_mem_string_output_unified2(svn_stream_t * output_stream, svn_diff_t * diff, svn_boolean_t with_diff_header, \n"
+ " char const * hunk_delimiter, char const * original_header, char const * modified_header, \n"
+ " char const * header_encoding, svn_string_t const * original, \n"
+ " svn_string_t const * modified, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_diff_mem_string_output_unified", _wrap_svn_diff_mem_string_output_unified, METH_VARARGS, (char *)"\n"
- "svn_diff_mem_string_output_unified(svn_stream_t output_stream, svn_diff_t diff, char original_header, \n"
- " char modified_header, char header_encoding, \n"
- " svn_string_t original, svn_string_t modified, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_diff_mem_string_output_unified(svn_stream_t * output_stream, svn_diff_t * diff, char const * original_header, char const * modified_header, \n"
+ " char const * header_encoding, svn_string_t const * original, \n"
+ " svn_string_t const * modified, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_diff_mem_string_output_merge2", _wrap_svn_diff_mem_string_output_merge2, METH_VARARGS, (char *)"\n"
- "svn_diff_mem_string_output_merge2(svn_stream_t output_stream, svn_diff_t diff, svn_string_t original, \n"
- " svn_string_t modified, svn_string_t latest, \n"
- " char conflict_original, char conflict_modified, \n"
- " char conflict_latest, char conflict_separator, \n"
- " svn_diff_conflict_display_style_t style, \n"
+ "svn_diff_mem_string_output_merge2(svn_stream_t * output_stream, svn_diff_t * diff, svn_string_t const * original, svn_string_t const * modified, \n"
+ " svn_string_t const * latest, char const * conflict_original, \n"
+ " char const * conflict_modified, char const * conflict_latest, \n"
+ " char const * conflict_separator, svn_diff_conflict_display_style_t style, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_diff_mem_string_output_merge", _wrap_svn_diff_mem_string_output_merge, METH_VARARGS, (char *)"\n"
- "svn_diff_mem_string_output_merge(svn_stream_t output_stream, svn_diff_t diff, svn_string_t original, \n"
- " svn_string_t modified, svn_string_t latest, \n"
- " char conflict_original, char conflict_modified, \n"
- " char conflict_latest, char conflict_separator, \n"
- " svn_boolean_t display_original_in_conflict, \n"
- " svn_boolean_t display_resolved_conflicts, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_diff_mem_string_output_merge(svn_stream_t * output_stream, svn_diff_t * diff, svn_string_t const * original, svn_string_t const * modified, \n"
+ " svn_string_t const * latest, char const * conflict_original, \n"
+ " char const * conflict_modified, char const * conflict_latest, \n"
+ " char const * conflict_separator, svn_boolean_t display_original_in_conflict, \n"
+ " svn_boolean_t display_resolved_conflicts, apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_diff_hunk_readline_diff_text", _wrap_svn_diff_hunk_readline_diff_text, METH_VARARGS, (char *)"svn_diff_hunk_readline_diff_text(svn_diff_hunk_t hunk, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
- { (char *)"svn_diff_hunk_readline_original_text", _wrap_svn_diff_hunk_readline_original_text, METH_VARARGS, (char *)"svn_diff_hunk_readline_original_text(svn_diff_hunk_t hunk, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
- { (char *)"svn_diff_hunk_readline_modified_text", _wrap_svn_diff_hunk_readline_modified_text, METH_VARARGS, (char *)"svn_diff_hunk_readline_modified_text(svn_diff_hunk_t hunk, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
- { (char *)"svn_diff_hunk_reset_diff_text", _wrap_svn_diff_hunk_reset_diff_text, METH_VARARGS, (char *)"svn_diff_hunk_reset_diff_text(svn_diff_hunk_t hunk)"},
- { (char *)"svn_diff_hunk_reset_original_text", _wrap_svn_diff_hunk_reset_original_text, METH_VARARGS, (char *)"svn_diff_hunk_reset_original_text(svn_diff_hunk_t hunk)"},
- { (char *)"svn_diff_hunk_reset_modified_text", _wrap_svn_diff_hunk_reset_modified_text, METH_VARARGS, (char *)"svn_diff_hunk_reset_modified_text(svn_diff_hunk_t hunk)"},
- { (char *)"svn_diff_hunk_get_original_start", _wrap_svn_diff_hunk_get_original_start, METH_VARARGS, (char *)"svn_diff_hunk_get_original_start(svn_diff_hunk_t hunk) -> svn_linenum_t"},
- { (char *)"svn_diff_hunk_get_original_length", _wrap_svn_diff_hunk_get_original_length, METH_VARARGS, (char *)"svn_diff_hunk_get_original_length(svn_diff_hunk_t hunk) -> svn_linenum_t"},
- { (char *)"svn_diff_hunk_get_modified_start", _wrap_svn_diff_hunk_get_modified_start, METH_VARARGS, (char *)"svn_diff_hunk_get_modified_start(svn_diff_hunk_t hunk) -> svn_linenum_t"},
- { (char *)"svn_diff_hunk_get_modified_length", _wrap_svn_diff_hunk_get_modified_length, METH_VARARGS, (char *)"svn_diff_hunk_get_modified_length(svn_diff_hunk_t hunk) -> svn_linenum_t"},
- { (char *)"svn_diff_hunk_get_leading_context", _wrap_svn_diff_hunk_get_leading_context, METH_VARARGS, (char *)"svn_diff_hunk_get_leading_context(svn_diff_hunk_t hunk) -> svn_linenum_t"},
- { (char *)"svn_diff_hunk_get_trailing_context", _wrap_svn_diff_hunk_get_trailing_context, METH_VARARGS, (char *)"svn_diff_hunk_get_trailing_context(svn_diff_hunk_t hunk) -> svn_linenum_t"},
- { (char *)"svn_prop_patch_t_name_set", _wrap_svn_prop_patch_t_name_set, METH_VARARGS, (char *)"svn_prop_patch_t_name_set(svn_prop_patch_t self, char name)"},
- { (char *)"svn_prop_patch_t_name_get", _wrap_svn_prop_patch_t_name_get, METH_VARARGS, (char *)"svn_prop_patch_t_name_get(svn_prop_patch_t self) -> char"},
- { (char *)"svn_prop_patch_t_operation_set", _wrap_svn_prop_patch_t_operation_set, METH_VARARGS, (char *)"svn_prop_patch_t_operation_set(svn_prop_patch_t self, operation)"},
- { (char *)"svn_prop_patch_t_operation_get", _wrap_svn_prop_patch_t_operation_get, METH_VARARGS, (char *)"svn_prop_patch_t_operation_get(svn_prop_patch_t self)"},
+ { (char *)"svn_diff_hunk_readline_diff_text", _wrap_svn_diff_hunk_readline_diff_text, METH_VARARGS, (char *)"svn_diff_hunk_readline_diff_text(svn_diff_hunk_t * hunk, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_diff_hunk_readline_original_text", _wrap_svn_diff_hunk_readline_original_text, METH_VARARGS, (char *)"svn_diff_hunk_readline_original_text(svn_diff_hunk_t * hunk, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_diff_hunk_readline_modified_text", _wrap_svn_diff_hunk_readline_modified_text, METH_VARARGS, (char *)"svn_diff_hunk_readline_modified_text(svn_diff_hunk_t * hunk, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_diff_hunk_reset_diff_text", _wrap_svn_diff_hunk_reset_diff_text, METH_VARARGS, (char *)"svn_diff_hunk_reset_diff_text(svn_diff_hunk_t * hunk)"},
+ { (char *)"svn_diff_hunk_reset_original_text", _wrap_svn_diff_hunk_reset_original_text, METH_VARARGS, (char *)"svn_diff_hunk_reset_original_text(svn_diff_hunk_t * hunk)"},
+ { (char *)"svn_diff_hunk_reset_modified_text", _wrap_svn_diff_hunk_reset_modified_text, METH_VARARGS, (char *)"svn_diff_hunk_reset_modified_text(svn_diff_hunk_t * hunk)"},
+ { (char *)"svn_diff_hunk_get_original_start", _wrap_svn_diff_hunk_get_original_start, METH_VARARGS, (char *)"svn_diff_hunk_get_original_start(svn_diff_hunk_t const * hunk) -> svn_linenum_t"},
+ { (char *)"svn_diff_hunk_get_original_length", _wrap_svn_diff_hunk_get_original_length, METH_VARARGS, (char *)"svn_diff_hunk_get_original_length(svn_diff_hunk_t const * hunk) -> svn_linenum_t"},
+ { (char *)"svn_diff_hunk_get_modified_start", _wrap_svn_diff_hunk_get_modified_start, METH_VARARGS, (char *)"svn_diff_hunk_get_modified_start(svn_diff_hunk_t const * hunk) -> svn_linenum_t"},
+ { (char *)"svn_diff_hunk_get_modified_length", _wrap_svn_diff_hunk_get_modified_length, METH_VARARGS, (char *)"svn_diff_hunk_get_modified_length(svn_diff_hunk_t const * hunk) -> svn_linenum_t"},
+ { (char *)"svn_diff_hunk_get_leading_context", _wrap_svn_diff_hunk_get_leading_context, METH_VARARGS, (char *)"svn_diff_hunk_get_leading_context(svn_diff_hunk_t const * hunk) -> svn_linenum_t"},
+ { (char *)"svn_diff_hunk_get_trailing_context", _wrap_svn_diff_hunk_get_trailing_context, METH_VARARGS, (char *)"svn_diff_hunk_get_trailing_context(svn_diff_hunk_t const * hunk) -> svn_linenum_t"},
+ { (char *)"svn_prop_patch_t_name_set", _wrap_svn_prop_patch_t_name_set, METH_VARARGS, (char *)"svn_prop_patch_t_name_set(svn_prop_patch_t self, char const * name)"},
+ { (char *)"svn_prop_patch_t_name_get", _wrap_svn_prop_patch_t_name_get, METH_VARARGS, (char *)"svn_prop_patch_t_name_get(svn_prop_patch_t self) -> char const *"},
+ { (char *)"svn_prop_patch_t_operation_set", _wrap_svn_prop_patch_t_operation_set, METH_VARARGS, (char *)"svn_prop_patch_t_operation_set(svn_prop_patch_t self, svn_diff_operation_kind_t operation)"},
+ { (char *)"svn_prop_patch_t_operation_get", _wrap_svn_prop_patch_t_operation_get, METH_VARARGS, (char *)"svn_prop_patch_t_operation_get(svn_prop_patch_t self) -> svn_diff_operation_kind_t"},
{ (char *)"svn_prop_patch_t_hunks_set", _wrap_svn_prop_patch_t_hunks_set, METH_VARARGS, (char *)"svn_prop_patch_t_hunks_set(svn_prop_patch_t self, apr_array_header_t hunks)"},
{ (char *)"svn_prop_patch_t_hunks_get", _wrap_svn_prop_patch_t_hunks_get, METH_VARARGS, (char *)"svn_prop_patch_t_hunks_get(svn_prop_patch_t self) -> apr_array_header_t"},
{ (char *)"new_svn_prop_patch_t", _wrap_new_svn_prop_patch_t, METH_VARARGS, (char *)"new_svn_prop_patch_t() -> svn_prop_patch_t"},
{ (char *)"delete_svn_prop_patch_t", _wrap_delete_svn_prop_patch_t, METH_VARARGS, (char *)"delete_svn_prop_patch_t(svn_prop_patch_t self)"},
{ (char *)"svn_prop_patch_t_swigregister", svn_prop_patch_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_patch_t_old_filename_set", _wrap_svn_patch_t_old_filename_set, METH_VARARGS, (char *)"svn_patch_t_old_filename_set(svn_patch_t self, char old_filename)"},
- { (char *)"svn_patch_t_old_filename_get", _wrap_svn_patch_t_old_filename_get, METH_VARARGS, (char *)"svn_patch_t_old_filename_get(svn_patch_t self) -> char"},
- { (char *)"svn_patch_t_new_filename_set", _wrap_svn_patch_t_new_filename_set, METH_VARARGS, (char *)"svn_patch_t_new_filename_set(svn_patch_t self, char new_filename)"},
- { (char *)"svn_patch_t_new_filename_get", _wrap_svn_patch_t_new_filename_get, METH_VARARGS, (char *)"svn_patch_t_new_filename_get(svn_patch_t self) -> char"},
+ { (char *)"svn_patch_t_old_filename_set", _wrap_svn_patch_t_old_filename_set, METH_VARARGS, (char *)"svn_patch_t_old_filename_set(svn_patch_t self, char const * old_filename)"},
+ { (char *)"svn_patch_t_old_filename_get", _wrap_svn_patch_t_old_filename_get, METH_VARARGS, (char *)"svn_patch_t_old_filename_get(svn_patch_t self) -> char const *"},
+ { (char *)"svn_patch_t_new_filename_set", _wrap_svn_patch_t_new_filename_set, METH_VARARGS, (char *)"svn_patch_t_new_filename_set(svn_patch_t self, char const * new_filename)"},
+ { (char *)"svn_patch_t_new_filename_get", _wrap_svn_patch_t_new_filename_get, METH_VARARGS, (char *)"svn_patch_t_new_filename_get(svn_patch_t self) -> char const *"},
{ (char *)"svn_patch_t_hunks_set", _wrap_svn_patch_t_hunks_set, METH_VARARGS, (char *)"svn_patch_t_hunks_set(svn_patch_t self, apr_array_header_t hunks)"},
{ (char *)"svn_patch_t_hunks_get", _wrap_svn_patch_t_hunks_get, METH_VARARGS, (char *)"svn_patch_t_hunks_get(svn_patch_t self) -> apr_array_header_t"},
{ (char *)"svn_patch_t_prop_patches_set", _wrap_svn_patch_t_prop_patches_set, METH_VARARGS, (char *)"svn_patch_t_prop_patches_set(svn_patch_t self, apr_hash_t prop_patches)"},
{ (char *)"svn_patch_t_prop_patches_get", _wrap_svn_patch_t_prop_patches_get, METH_VARARGS, (char *)"svn_patch_t_prop_patches_get(svn_patch_t self) -> apr_hash_t"},
- { (char *)"svn_patch_t_operation_set", _wrap_svn_patch_t_operation_set, METH_VARARGS, (char *)"svn_patch_t_operation_set(svn_patch_t self, operation)"},
- { (char *)"svn_patch_t_operation_get", _wrap_svn_patch_t_operation_get, METH_VARARGS, (char *)"svn_patch_t_operation_get(svn_patch_t self)"},
+ { (char *)"svn_patch_t_operation_set", _wrap_svn_patch_t_operation_set, METH_VARARGS, (char *)"svn_patch_t_operation_set(svn_patch_t self, svn_diff_operation_kind_t operation)"},
+ { (char *)"svn_patch_t_operation_get", _wrap_svn_patch_t_operation_get, METH_VARARGS, (char *)"svn_patch_t_operation_get(svn_patch_t self) -> svn_diff_operation_kind_t"},
{ (char *)"svn_patch_t_reverse_set", _wrap_svn_patch_t_reverse_set, METH_VARARGS, (char *)"svn_patch_t_reverse_set(svn_patch_t self, svn_boolean_t reverse)"},
{ (char *)"svn_patch_t_reverse_get", _wrap_svn_patch_t_reverse_get, METH_VARARGS, (char *)"svn_patch_t_reverse_get(svn_patch_t self) -> svn_boolean_t"},
{ (char *)"new_svn_patch_t", _wrap_new_svn_patch_t, METH_VARARGS, (char *)"new_svn_patch_t() -> svn_patch_t"},
{ (char *)"delete_svn_patch_t", _wrap_delete_svn_patch_t, METH_VARARGS, (char *)"delete_svn_patch_t(svn_patch_t self)"},
{ (char *)"svn_patch_t_swigregister", svn_patch_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_diff_open_patch_file", _wrap_svn_diff_open_patch_file, METH_VARARGS, (char *)"svn_diff_open_patch_file(char local_abspath, apr_pool_t result_pool) -> svn_error_t"},
+ { (char *)"svn_diff_open_patch_file", _wrap_svn_diff_open_patch_file, METH_VARARGS, (char *)"svn_diff_open_patch_file(char const * local_abspath, apr_pool_t result_pool) -> svn_error_t"},
{ (char *)"svn_diff_parse_next_patch", _wrap_svn_diff_parse_next_patch, METH_VARARGS, (char *)"\n"
- "svn_diff_parse_next_patch(svn_patch_file_t patch_file, svn_boolean_t reverse, \n"
- " svn_boolean_t ignore_whitespace, apr_pool_t result_pool, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_diff_parse_next_patch(svn_patch_file_t * patch_file, svn_boolean_t reverse, svn_boolean_t ignore_whitespace, \n"
+ " apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
- { (char *)"svn_diff_close_patch_file", _wrap_svn_diff_close_patch_file, METH_VARARGS, (char *)"svn_diff_close_patch_file(svn_patch_file_t patch_file, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_diff_close_patch_file", _wrap_svn_diff_close_patch_file, METH_VARARGS, (char *)"svn_diff_close_patch_file(svn_patch_file_t * patch_file, apr_pool_t scratch_pool) -> svn_error_t"},
{ (char *)"svn_diff_t_swigregister", svn_diff_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_diff_hunk_t_swigregister", svn_diff_hunk_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_patch_file_t_swigregister", svn_patch_file_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_diff_fns2_invoke_datasources_open", _wrap_svn_diff_fns2_invoke_datasources_open, METH_VARARGS, (char *)"\n"
- "svn_diff_fns2_invoke_datasources_open(svn_diff_fns2_t _obj, void diff_baton, apr_off_t prefix_lines, \n"
- " apr_off_t suffix_lines, svn_diff_datasource_e datasources, \n"
- " apr_size_t datasources_len) -> svn_error_t\n"
- ""},
- { (char *)"svn_diff_fns2_invoke_datasource_close", _wrap_svn_diff_fns2_invoke_datasource_close, METH_VARARGS, (char *)"svn_diff_fns2_invoke_datasource_close(svn_diff_fns2_t _obj, void diff_baton, svn_diff_datasource_e datasource) -> svn_error_t"},
- { (char *)"svn_diff_fns2_invoke_datasource_get_next_token", _wrap_svn_diff_fns2_invoke_datasource_get_next_token, METH_VARARGS, (char *)"svn_diff_fns2_invoke_datasource_get_next_token(svn_diff_fns2_t _obj, void diff_baton, svn_diff_datasource_e datasource) -> svn_error_t"},
- { (char *)"svn_diff_fns2_invoke_token_compare", _wrap_svn_diff_fns2_invoke_token_compare, METH_VARARGS, (char *)"\n"
- "svn_diff_fns2_invoke_token_compare(svn_diff_fns2_t _obj, void diff_baton, void ltoken, \n"
- " void rtoken) -> svn_error_t\n"
+ "svn_diff_fns2_invoke_datasources_open(svn_diff_fns2_t _obj, void * diff_baton, apr_off_t * prefix_lines, apr_off_t * suffix_lines, \n"
+ " svn_diff_datasource_e const * datasources, apr_size_t datasources_len) -> svn_error_t\n"
""},
- { (char *)"svn_diff_fns2_invoke_token_discard", _wrap_svn_diff_fns2_invoke_token_discard, METH_VARARGS, (char *)"svn_diff_fns2_invoke_token_discard(svn_diff_fns2_t _obj, void diff_baton, void token)"},
- { (char *)"svn_diff_fns2_invoke_token_discard_all", _wrap_svn_diff_fns2_invoke_token_discard_all, METH_VARARGS, (char *)"svn_diff_fns2_invoke_token_discard_all(svn_diff_fns2_t _obj, void diff_baton)"},
- { (char *)"svn_diff_fns_invoke_datasource_open", _wrap_svn_diff_fns_invoke_datasource_open, METH_VARARGS, (char *)"svn_diff_fns_invoke_datasource_open(svn_diff_fns_t _obj, void diff_baton, svn_diff_datasource_e datasource) -> svn_error_t"},
- { (char *)"svn_diff_fns_invoke_datasource_close", _wrap_svn_diff_fns_invoke_datasource_close, METH_VARARGS, (char *)"svn_diff_fns_invoke_datasource_close(svn_diff_fns_t _obj, void diff_baton, svn_diff_datasource_e datasource) -> svn_error_t"},
- { (char *)"svn_diff_fns_invoke_datasource_get_next_token", _wrap_svn_diff_fns_invoke_datasource_get_next_token, METH_VARARGS, (char *)"svn_diff_fns_invoke_datasource_get_next_token(svn_diff_fns_t _obj, void diff_baton, svn_diff_datasource_e datasource) -> svn_error_t"},
- { (char *)"svn_diff_fns_invoke_token_compare", _wrap_svn_diff_fns_invoke_token_compare, METH_VARARGS, (char *)"\n"
- "svn_diff_fns_invoke_token_compare(svn_diff_fns_t _obj, void diff_baton, void ltoken, \n"
- " void rtoken) -> svn_error_t\n"
- ""},
- { (char *)"svn_diff_fns_invoke_token_discard", _wrap_svn_diff_fns_invoke_token_discard, METH_VARARGS, (char *)"svn_diff_fns_invoke_token_discard(svn_diff_fns_t _obj, void diff_baton, void token)"},
- { (char *)"svn_diff_fns_invoke_token_discard_all", _wrap_svn_diff_fns_invoke_token_discard_all, METH_VARARGS, (char *)"svn_diff_fns_invoke_token_discard_all(svn_diff_fns_t _obj, void diff_baton)"},
+ { (char *)"svn_diff_fns2_invoke_datasource_close", _wrap_svn_diff_fns2_invoke_datasource_close, METH_VARARGS, (char *)"svn_diff_fns2_invoke_datasource_close(svn_diff_fns2_t _obj, void * diff_baton, svn_diff_datasource_e datasource) -> svn_error_t"},
+ { (char *)"svn_diff_fns2_invoke_datasource_get_next_token", _wrap_svn_diff_fns2_invoke_datasource_get_next_token, METH_VARARGS, (char *)"svn_diff_fns2_invoke_datasource_get_next_token(svn_diff_fns2_t _obj, void * diff_baton, svn_diff_datasource_e datasource) -> svn_error_t"},
+ { (char *)"svn_diff_fns2_invoke_token_compare", _wrap_svn_diff_fns2_invoke_token_compare, METH_VARARGS, (char *)"svn_diff_fns2_invoke_token_compare(svn_diff_fns2_t _obj, void * diff_baton, void * ltoken, void * rtoken) -> svn_error_t"},
+ { (char *)"svn_diff_fns2_invoke_token_discard", _wrap_svn_diff_fns2_invoke_token_discard, METH_VARARGS, (char *)"svn_diff_fns2_invoke_token_discard(svn_diff_fns2_t _obj, void * diff_baton, void * token)"},
+ { (char *)"svn_diff_fns2_invoke_token_discard_all", _wrap_svn_diff_fns2_invoke_token_discard_all, METH_VARARGS, (char *)"svn_diff_fns2_invoke_token_discard_all(svn_diff_fns2_t _obj, void * diff_baton)"},
+ { (char *)"svn_diff_fns_invoke_datasource_open", _wrap_svn_diff_fns_invoke_datasource_open, METH_VARARGS, (char *)"svn_diff_fns_invoke_datasource_open(svn_diff_fns_t _obj, void * diff_baton, svn_diff_datasource_e datasource) -> svn_error_t"},
+ { (char *)"svn_diff_fns_invoke_datasource_close", _wrap_svn_diff_fns_invoke_datasource_close, METH_VARARGS, (char *)"svn_diff_fns_invoke_datasource_close(svn_diff_fns_t _obj, void * diff_baton, svn_diff_datasource_e datasource) -> svn_error_t"},
+ { (char *)"svn_diff_fns_invoke_datasource_get_next_token", _wrap_svn_diff_fns_invoke_datasource_get_next_token, METH_VARARGS, (char *)"svn_diff_fns_invoke_datasource_get_next_token(svn_diff_fns_t _obj, void * diff_baton, svn_diff_datasource_e datasource) -> svn_error_t"},
+ { (char *)"svn_diff_fns_invoke_token_compare", _wrap_svn_diff_fns_invoke_token_compare, METH_VARARGS, (char *)"svn_diff_fns_invoke_token_compare(svn_diff_fns_t _obj, void * diff_baton, void * ltoken, void * rtoken) -> svn_error_t"},
+ { (char *)"svn_diff_fns_invoke_token_discard", _wrap_svn_diff_fns_invoke_token_discard, METH_VARARGS, (char *)"svn_diff_fns_invoke_token_discard(svn_diff_fns_t _obj, void * diff_baton, void * token)"},
+ { (char *)"svn_diff_fns_invoke_token_discard_all", _wrap_svn_diff_fns_invoke_token_discard_all, METH_VARARGS, (char *)"svn_diff_fns_invoke_token_discard_all(svn_diff_fns_t _obj, void * diff_baton)"},
{ (char *)"svn_diff_output_fns_invoke_output_common", _wrap_svn_diff_output_fns_invoke_output_common, METH_VARARGS, (char *)"\n"
- "svn_diff_output_fns_invoke_output_common(svn_diff_output_fns_t _obj, void output_baton, apr_off_t original_start, \n"
- " apr_off_t original_length, \n"
- " apr_off_t modified_start, apr_off_t modified_length, \n"
- " apr_off_t latest_start, apr_off_t latest_length) -> svn_error_t\n"
+ "svn_diff_output_fns_invoke_output_common(svn_diff_output_fns_t _obj, void * output_baton, apr_off_t original_start, apr_off_t original_length, \n"
+ " apr_off_t modified_start, apr_off_t modified_length, apr_off_t latest_start, \n"
+ " apr_off_t latest_length) -> svn_error_t\n"
""},
{ (char *)"svn_diff_output_fns_invoke_output_diff_modified", _wrap_svn_diff_output_fns_invoke_output_diff_modified, METH_VARARGS, (char *)"\n"
- "svn_diff_output_fns_invoke_output_diff_modified(svn_diff_output_fns_t _obj, void output_baton, apr_off_t original_start, \n"
- " apr_off_t original_length, \n"
- " apr_off_t modified_start, apr_off_t modified_length, \n"
- " apr_off_t latest_start, apr_off_t latest_length) -> svn_error_t\n"
+ "svn_diff_output_fns_invoke_output_diff_modified(svn_diff_output_fns_t _obj, void * output_baton, apr_off_t original_start, apr_off_t original_length, \n"
+ " apr_off_t modified_start, apr_off_t modified_length, apr_off_t latest_start, \n"
+ " apr_off_t latest_length) -> svn_error_t\n"
""},
{ (char *)"svn_diff_output_fns_invoke_output_diff_latest", _wrap_svn_diff_output_fns_invoke_output_diff_latest, METH_VARARGS, (char *)"\n"
- "svn_diff_output_fns_invoke_output_diff_latest(svn_diff_output_fns_t _obj, void output_baton, apr_off_t original_start, \n"
- " apr_off_t original_length, \n"
- " apr_off_t modified_start, apr_off_t modified_length, \n"
- " apr_off_t latest_start, apr_off_t latest_length) -> svn_error_t\n"
+ "svn_diff_output_fns_invoke_output_diff_latest(svn_diff_output_fns_t _obj, void * output_baton, apr_off_t original_start, apr_off_t original_length, \n"
+ " apr_off_t modified_start, apr_off_t modified_length, apr_off_t latest_start, \n"
+ " apr_off_t latest_length) -> svn_error_t\n"
""},
{ (char *)"svn_diff_output_fns_invoke_output_diff_common", _wrap_svn_diff_output_fns_invoke_output_diff_common, METH_VARARGS, (char *)"\n"
- "svn_diff_output_fns_invoke_output_diff_common(svn_diff_output_fns_t _obj, void output_baton, apr_off_t original_start, \n"
- " apr_off_t original_length, \n"
- " apr_off_t modified_start, apr_off_t modified_length, \n"
- " apr_off_t latest_start, apr_off_t latest_length) -> svn_error_t\n"
+ "svn_diff_output_fns_invoke_output_diff_common(svn_diff_output_fns_t _obj, void * output_baton, apr_off_t original_start, apr_off_t original_length, \n"
+ " apr_off_t modified_start, apr_off_t modified_length, apr_off_t latest_start, \n"
+ " apr_off_t latest_length) -> svn_error_t\n"
""},
{ (char *)"svn_diff_output_fns_invoke_output_conflict", _wrap_svn_diff_output_fns_invoke_output_conflict, METH_VARARGS, (char *)"\n"
- "svn_diff_output_fns_invoke_output_conflict(svn_diff_output_fns_t _obj, void output_baton, apr_off_t original_start, \n"
- " apr_off_t original_length, \n"
- " apr_off_t modified_start, apr_off_t modified_length, \n"
- " apr_off_t latest_start, apr_off_t latest_length, \n"
- " svn_diff_t resolved_diff) -> svn_error_t\n"
+ "svn_diff_output_fns_invoke_output_conflict(svn_diff_output_fns_t _obj, void * output_baton, apr_off_t original_start, apr_off_t original_length, \n"
+ " apr_off_t modified_start, apr_off_t modified_length, apr_off_t latest_start, \n"
+ " apr_off_t latest_length, svn_diff_t * resolved_diff) -> svn_error_t\n"
""},
{ NULL, NULL, 0, NULL }
};
@@ -9784,7 +9778,7 @@ static PyMethodDef SwigMethods[] = {
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
-static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *|svn_rangelist_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_hash_t = {"_p_apr_hash_t", "apr_hash_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int32_t = {"_p_apr_int32_t", "apr_int32_t *|time_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int64_t = {"_p_apr_int64_t", "apr_int64_t *|svn_filesize_t *|apr_time_t *", 0, 0, (void*)0, 0};
@@ -9819,6 +9813,9 @@ static swig_type_info _swigt__p_svn_auth_iterstate_t = {"_p_svn_auth_iterstate_t
static swig_type_info _swigt__p_svn_auth_provider_object_t = {"_p_svn_auth_provider_object_t", "struct svn_auth_provider_object_t *|svn_auth_provider_object_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_provider_t = {"_p_svn_auth_provider_t", "struct svn_auth_provider_t *|svn_auth_provider_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_ssl_server_cert_info_t = {"_p_svn_auth_ssl_server_cert_info_t", "struct svn_auth_ssl_server_cert_info_t *|svn_auth_ssl_server_cert_info_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_ctx_t = {"_p_svn_checksum_ctx_t", "struct svn_checksum_ctx_t *|svn_checksum_ctx_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "enum svn_checksum_kind_t *|svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "struct svn_checksum_t *|svn_checksum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_commit_info_t = {"_p_svn_commit_info_t", "struct svn_commit_info_t *|svn_commit_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_config_t = {"_p_svn_config_t", "struct svn_config_t *|svn_config_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_depth_t = {"_p_svn_depth_t", "enum svn_depth_t *|svn_depth_t *", 0, 0, (void*)0, 0};
@@ -9853,6 +9850,7 @@ static swig_type_info _swigt__p_svn_opt_subcommand_desc2_t = {"_p_svn_opt_subcom
static swig_type_info _swigt__p_svn_opt_subcommand_desc_t = {"_p_svn_opt_subcommand_desc_t", "struct svn_opt_subcommand_desc_t *|svn_opt_subcommand_desc_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_file_t = {"_p_svn_patch_file_t", "struct svn_patch_file_t *|svn_patch_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_t = {"_p_svn_patch_t", "struct svn_patch_t *|svn_patch_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_prop_inherited_item_t = {"_p_svn_prop_inherited_item_t", "struct svn_prop_inherited_item_t *|svn_prop_inherited_item_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_kind = {"_p_svn_prop_kind", "svn_prop_kind_t *|enum svn_prop_kind *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_patch_t = {"_p_svn_prop_patch_t", "struct svn_prop_patch_t *|svn_prop_patch_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_stream_mark_t = {"_p_svn_stream_mark_t", "struct svn_stream_mark_t *|svn_stream_mark_t *", 0, 0, (void*)0, 0};
@@ -9861,7 +9859,11 @@ static swig_type_info _swigt__p_svn_string_t = {"_p_svn_string_t", "struct svn_s
static swig_type_info _swigt__p_svn_stringbuf_t = {"_p_svn_stringbuf_t", "struct svn_stringbuf_t *|svn_stringbuf_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_tristate_t = {"_p_svn_tristate_t", "enum svn_tristate_t *|svn_tristate_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_checklist_t = {"_p_svn_version_checklist_t", "struct svn_version_checklist_t *|svn_version_checklist_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_linked_lib_t = {"_p_svn_version_ext_linked_lib_t", "struct svn_version_ext_linked_lib_t *|svn_version_ext_linked_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_loaded_lib_t = {"_p_svn_version_ext_loaded_lib_t", "struct svn_version_ext_loaded_lib_t *|svn_version_ext_loaded_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_extended_t = {"_p_svn_version_extended_t", "struct svn_version_extended_t *|svn_version_extended_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_t = {"_p_svn_version_t", "struct svn_version_t *|svn_version_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_wc_external_item2_t = {"_p_svn_wc_external_item2_t", "svn_wc_external_item2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_long = {"_p_unsigned_long", "unsigned long *|svn_linenum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_void = {"_p_void", "void *", 0, 0, (void*)0, 0};
@@ -9901,6 +9903,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_auth_provider_object_t,
&_swigt__p_svn_auth_provider_t,
&_swigt__p_svn_auth_ssl_server_cert_info_t,
+ &_swigt__p_svn_checksum_ctx_t,
+ &_swigt__p_svn_checksum_kind_t,
+ &_swigt__p_svn_checksum_t,
&_swigt__p_svn_commit_info_t,
&_swigt__p_svn_config_t,
&_swigt__p_svn_depth_t,
@@ -9935,6 +9940,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_opt_subcommand_desc_t,
&_swigt__p_svn_patch_file_t,
&_swigt__p_svn_patch_t,
+ &_swigt__p_svn_prop_inherited_item_t,
&_swigt__p_svn_prop_kind,
&_swigt__p_svn_prop_patch_t,
&_swigt__p_svn_stream_mark_t,
@@ -9943,7 +9949,11 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_stringbuf_t,
&_swigt__p_svn_tristate_t,
&_swigt__p_svn_version_checklist_t,
+ &_swigt__p_svn_version_ext_linked_lib_t,
+ &_swigt__p_svn_version_ext_loaded_lib_t,
+ &_swigt__p_svn_version_extended_t,
&_swigt__p_svn_version_t,
+ &_swigt__p_svn_wc_external_item2_t,
&_swigt__p_unsigned_long,
&_swigt__p_void,
};
@@ -9983,6 +9993,9 @@ static swig_cast_info _swigc__p_svn_auth_iterstate_t[] = { {&_swigt__p_svn_auth
static swig_cast_info _swigc__p_svn_auth_provider_object_t[] = { {&_swigt__p_svn_auth_provider_object_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_provider_t[] = { {&_swigt__p_svn_auth_provider_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_ssl_server_cert_info_t[] = { {&_swigt__p_svn_auth_ssl_server_cert_info_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_ctx_t[] = { {&_swigt__p_svn_checksum_ctx_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_kind_t[] = { {&_swigt__p_svn_checksum_kind_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_t[] = { {&_swigt__p_svn_checksum_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_commit_info_t[] = { {&_swigt__p_svn_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_config_t[] = { {&_swigt__p_svn_config_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_depth_t[] = { {&_swigt__p_svn_depth_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -10017,6 +10030,7 @@ static swig_cast_info _swigc__p_svn_opt_subcommand_desc2_t[] = { {&_swigt__p_sv
static swig_cast_info _swigc__p_svn_opt_subcommand_desc_t[] = { {&_swigt__p_svn_opt_subcommand_desc_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_file_t[] = { {&_swigt__p_svn_patch_file_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_t[] = { {&_swigt__p_svn_patch_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_prop_inherited_item_t[] = { {&_swigt__p_svn_prop_inherited_item_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_kind[] = { {&_swigt__p_svn_prop_kind, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_patch_t[] = { {&_swigt__p_svn_prop_patch_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_stream_mark_t[] = { {&_swigt__p_svn_stream_mark_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -10025,7 +10039,11 @@ static swig_cast_info _swigc__p_svn_string_t[] = { {&_swigt__p_svn_string_t, 0,
static swig_cast_info _swigc__p_svn_stringbuf_t[] = { {&_swigt__p_svn_stringbuf_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_tristate_t[] = { {&_swigt__p_svn_tristate_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_checklist_t[] = { {&_swigt__p_svn_version_checklist_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_linked_lib_t[] = { {&_swigt__p_svn_version_ext_linked_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_loaded_lib_t[] = { {&_swigt__p_svn_version_ext_loaded_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_extended_t[] = { {&_swigt__p_svn_version_extended_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_t[] = { {&_swigt__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_wc_external_item2_t[] = { {&_swigt__p_svn_wc_external_item2_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_long[] = { {&_swigt__p_unsigned_long, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_void[] = { {&_swigt__p_void, 0, 0, 0},{0, 0, 0, 0}};
@@ -10065,6 +10083,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_auth_provider_object_t,
_swigc__p_svn_auth_provider_t,
_swigc__p_svn_auth_ssl_server_cert_info_t,
+ _swigc__p_svn_checksum_ctx_t,
+ _swigc__p_svn_checksum_kind_t,
+ _swigc__p_svn_checksum_t,
_swigc__p_svn_commit_info_t,
_swigc__p_svn_config_t,
_swigc__p_svn_depth_t,
@@ -10099,6 +10120,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_opt_subcommand_desc_t,
_swigc__p_svn_patch_file_t,
_swigc__p_svn_patch_t,
+ _swigc__p_svn_prop_inherited_item_t,
_swigc__p_svn_prop_kind,
_swigc__p_svn_prop_patch_t,
_swigc__p_svn_stream_mark_t,
@@ -10107,7 +10129,11 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_stringbuf_t,
_swigc__p_svn_tristate_t,
_swigc__p_svn_version_checklist_t,
+ _swigc__p_svn_version_ext_linked_lib_t,
+ _swigc__p_svn_version_ext_loaded_lib_t,
+ _swigc__p_svn_version_extended_t,
_swigc__p_svn_version_t,
+ _swigc__p_svn_wc_external_item2_t,
_swigc__p_unsigned_long,
_swigc__p_void,
};
@@ -10180,8 +10206,6 @@ SWIG_InitializeModule(void *clientdata) {
swig_module_info *module_head, *iter;
int found, init;
- clientdata = clientdata;
-
/* check to see if the circular list has been setup, if not, set it up */
if (swig_module.next==0) {
/* Initialize the swig_module */
@@ -10754,6 +10778,7 @@ SWIG_init(void) {
m = Py_InitModule((char *) SWIG_name, SwigMethods);
#endif
md = d = PyModule_GetDict(m);
+ (void)md;
SWIG_InitializeModule(0);
diff --git a/subversion/bindings/swig/python/svn_fs.c b/subversion/bindings/swig/python/svn_fs.c
index a551c38..1667fb0 100644
--- a/subversion/bindings/swig/python/svn_fs.c
+++ b/subversion/bindings/swig/python/svn_fs.c
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -733,6 +733,7 @@ SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) {
#define PyInt_Check(x) PyLong_Check(x)
#define PyInt_AsLong(x) PyLong_AsLong(x)
#define PyInt_FromLong(x) PyLong_FromLong(x)
+#define PyInt_FromSize_t(x) PyLong_FromSize_t(x)
#define PyString_Check(name) PyBytes_Check(name)
#define PyString_FromString(x) PyUnicode_FromString(x)
#define PyString_Format(fmt, args) PyUnicode_Format(fmt, args)
@@ -902,6 +903,10 @@ static long PyNumber_AsSsize_t (PyObject *x, void *SWIGUNUSEDPARM(exc))
}
#endif
+#if PY_VERSION_HEX < 0x02050000
+#define PyInt_FromSize_t(x) PyInt_FromLong((long)x)
+#endif
+
#if PY_VERSION_HEX < 0x02040000
#define Py_VISIT(op) \
do { \
@@ -1173,7 +1178,7 @@ SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self),
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Python_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Python_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Python_SetModule(pointer)
#define SWIG_NewClientData(obj) SwigPyClientData_New(obj)
@@ -1199,7 +1204,7 @@ SWIG_Python_SetErrorObj(PyObject *errtype, PyObject *obj) {
SWIGINTERN void
SWIG_Python_SetErrorMsg(PyObject *errtype, const char *msg) {
SWIG_PYTHON_THREAD_BEGIN_BLOCK;
- PyErr_SetString(errtype, (char *) msg);
+ PyErr_SetString(errtype, msg);
SWIG_PYTHON_THREAD_END_BLOCK;
}
@@ -1218,7 +1223,11 @@ SwigPyBuiltin_AddPublicSymbol(PyObject *seq, const char *key) {
SWIGINTERN void
SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *name, PyObject *obj) {
+#if PY_VERSION_HEX < 0x02030000
PyDict_SetItemString(d, (char *)name, obj);
+#else
+ PyDict_SetItemString(d, name, obj);
+#endif
Py_DECREF(obj);
if (public_interface)
SwigPyBuiltin_AddPublicSymbol(public_interface, name);
@@ -1228,7 +1237,11 @@ SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *nam
SWIGINTERN void
SWIG_Python_SetConstant(PyObject *d, const char *name, PyObject *obj) {
+#if PY_VERSION_HEX < 0x02030000
PyDict_SetItemString(d, (char *)name, obj);
+#else
+ PyDict_SetItemString(d, name, obj);
+#endif
Py_DECREF(obj);
}
@@ -1549,7 +1562,7 @@ SwigPyObject_repr(SwigPyObject *v, PyObject *args)
#endif
{
const char *name = SWIG_TypePrettyName(v->ty);
- PyObject *repr = SWIG_Python_str_FromFormat("<Swig Object of type '%s' at %p>", name, (void *)v);
+ PyObject *repr = SWIG_Python_str_FromFormat("<Swig Object of type '%s' at %p>", (name ? name : "unknown"), (void *)v);
if (v->next) {
# ifdef METH_NOARGS
PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next);
@@ -1753,8 +1766,10 @@ SwigPyObject_own(PyObject *v, PyObject *args)
PyObject *val = 0;
#if (PY_VERSION_HEX < 0x02020000)
if (!PyArg_ParseTuple(args,(char *)"|O:own",&val))
-#else
+#elif (PY_VERSION_HEX < 0x02050000)
if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val))
+#else
+ if (!PyArg_UnpackTuple(args, "own", 0, 1, &val))
#endif
{
return NULL;
@@ -2449,23 +2464,29 @@ SWIG_Python_NewShadowInstance(SwigPyClientData *data, PyObject *swig_this)
} else {
#if PY_VERSION_HEX >= 0x03000000
inst = PyBaseObject_Type.tp_new((PyTypeObject*) data->newargs, Py_None, Py_None);
- PyObject_SetAttr(inst, SWIG_This(), swig_this);
- Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG;
+ if (inst) {
+ PyObject_SetAttr(inst, SWIG_This(), swig_this);
+ Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG;
+ }
#else
PyObject *dict = PyDict_New();
- PyDict_SetItem(dict, SWIG_This(), swig_this);
- inst = PyInstance_NewRaw(data->newargs, dict);
- Py_DECREF(dict);
+ if (dict) {
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ inst = PyInstance_NewRaw(data->newargs, dict);
+ Py_DECREF(dict);
+ }
#endif
}
return inst;
#else
#if (PY_VERSION_HEX >= 0x02010000)
- PyObject *inst;
+ PyObject *inst = 0;
PyObject *dict = PyDict_New();
- PyDict_SetItem(dict, SWIG_This(), swig_this);
- inst = PyInstance_NewRaw(data->newargs, dict);
- Py_DECREF(dict);
+ if (dict) {
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ inst = PyInstance_NewRaw(data->newargs, dict);
+ Py_DECREF(dict);
+ }
return (PyObject *) inst;
#else
PyInstanceObject *inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type);
@@ -2516,7 +2537,7 @@ SWIG_Python_SetSwigThis(PyObject *inst, PyObject *swig_this)
SWIGINTERN PyObject *
SWIG_Python_InitShadowInstance(PyObject *args) {
PyObject *obj[2];
- if (!SWIG_Python_UnpackTuple(args,(char*)"swiginit", 2, 2, obj)) {
+ if (!SWIG_Python_UnpackTuple(args, "swiginit", 2, 2, obj)) {
return NULL;
} else {
SwigPyObject *sthis = SWIG_Python_GetSwigThis(obj[0]);
@@ -2572,12 +2593,10 @@ SWIG_Python_NewPointerObj(PyObject *self, void *ptr, swig_type_info *type, int f
assert(!(flags & SWIG_BUILTIN_TP_INIT));
robj = SwigPyObject_New(ptr, type, own);
- if (clientdata && !(flags & SWIG_POINTER_NOSHADOW)) {
+ if (robj && clientdata && !(flags & SWIG_POINTER_NOSHADOW)) {
PyObject *inst = SWIG_Python_NewShadowInstance(clientdata, robj);
- if (inst) {
- Py_DECREF(robj);
- robj = inst;
- }
+ Py_DECREF(robj);
+ robj = inst;
}
return robj;
}
@@ -2598,7 +2617,7 @@ void *SWIG_ReturnGlobalTypeList(void *);
#endif
SWIGRUNTIME swig_module_info *
-SWIG_Python_GetModule(void) {
+SWIG_Python_GetModule(void *SWIGUNUSEDPARM(clientdata)) {
static void *type_pointer = (void *)0;
/* first check if module already created */
if (!type_pointer) {
@@ -2724,7 +2743,7 @@ SWIG_Python_TypeQuery(const char *type)
descriptor = (swig_type_info *) PyCObject_AsVoidPtr(obj);
#endif
} else {
- swig_module_info *swig_module = SWIG_Python_GetModule();
+ swig_module_info *swig_module = SWIG_GetModule(0);
descriptor = SWIG_TypeQueryModule(swig_module, swig_module, type);
if (descriptor) {
#ifdef SWIGPY_USE_CAPSULE
@@ -2792,7 +2811,7 @@ SwigPyObject_GetDesc(PyObject *self)
{
SwigPyObject *v = (SwigPyObject *)self;
swig_type_info *ty = v ? v->ty : 0;
- return ty ? ty->str : (char*)"";
+ return ty ? ty->str : "";
}
SWIGRUNTIME void
@@ -2849,6 +2868,7 @@ SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int SWIGUNUSEDPARM(arg
return result;
}
+#ifdef SWIGPYTHON_BUILTIN
SWIGRUNTIME int
SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
PyTypeObject *tp = obj->ob_type;
@@ -2857,15 +2877,15 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
descrsetfunc f;
int res;
-#ifdef Py_USING_UNICODE
+# ifdef Py_USING_UNICODE
if (PyString_Check(name)) {
name = PyUnicode_Decode(PyString_AsString(name), PyString_Size(name), NULL, NULL);
if (!name)
return -1;
} else if (!PyUnicode_Check(name))
-#else
+# else
if (!PyString_Check(name))
-#endif
+# endif
{
PyErr_Format(PyExc_TypeError, "attribute name must be string, not '%.200s'", name->ob_type->tp_name);
return -1;
@@ -2900,6 +2920,7 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
Py_DECREF(name);
return res;
}
+#endif
#ifdef __cplusplus
@@ -2925,93 +2946,106 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
#define SWIGTYPE_p_apr_int64_t swig_types[3]
#define SWIGTYPE_p_apr_pool_t swig_types[4]
#define SWIGTYPE_p_char swig_types[5]
-#define SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[6]
-#define SWIGTYPE_p_f_p_void__p_svn_error_t swig_types[7]
-#define SWIGTYPE_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t swig_types[8]
-#define SWIGTYPE_p_f_p_void_p_struct_svn_error_t__void swig_types[9]
-#define SWIGTYPE_p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t swig_types[10]
-#define SWIGTYPE_p_int swig_types[11]
-#define SWIGTYPE_p_long swig_types[12]
-#define SWIGTYPE_p_p_apr_array_header_t swig_types[13]
-#define SWIGTYPE_p_p_apr_hash_t swig_types[14]
-#define SWIGTYPE_p_p_char swig_types[15]
-#define SWIGTYPE_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t swig_types[16]
-#define SWIGTYPE_p_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t swig_types[17]
-#define SWIGTYPE_p_p_f_p_void_p_struct_svn_error_t__void swig_types[18]
-#define SWIGTYPE_p_p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t swig_types[19]
-#define SWIGTYPE_p_p_svn_checksum_t swig_types[20]
-#define SWIGTYPE_p_p_svn_fs_access_t swig_types[21]
-#define SWIGTYPE_p_p_svn_fs_history_t swig_types[22]
-#define SWIGTYPE_p_p_svn_fs_id_t swig_types[23]
-#define SWIGTYPE_p_p_svn_fs_root_t swig_types[24]
-#define SWIGTYPE_p_p_svn_fs_t swig_types[25]
-#define SWIGTYPE_p_p_svn_fs_txn_t swig_types[26]
-#define SWIGTYPE_p_p_svn_lock_t swig_types[27]
-#define SWIGTYPE_p_p_svn_stream_t swig_types[28]
-#define SWIGTYPE_p_p_svn_string_t swig_types[29]
-#define SWIGTYPE_p_p_svn_txdelta_stream_t swig_types[30]
-#define SWIGTYPE_p_p_void swig_types[31]
-#define SWIGTYPE_p_svn_auth_baton_t swig_types[32]
-#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[33]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[34]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[35]
-#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[36]
-#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[37]
-#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[38]
-#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[39]
-#define SWIGTYPE_p_svn_auth_provider_t swig_types[40]
-#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[41]
-#define SWIGTYPE_p_svn_checksum_kind_t swig_types[42]
-#define SWIGTYPE_p_svn_commit_info_t swig_types[43]
-#define SWIGTYPE_p_svn_config_t swig_types[44]
-#define SWIGTYPE_p_svn_delta_editor_t swig_types[45]
-#define SWIGTYPE_p_svn_depth_t swig_types[46]
-#define SWIGTYPE_p_svn_dirent_t swig_types[47]
-#define SWIGTYPE_p_svn_errno_t swig_types[48]
-#define SWIGTYPE_p_svn_error_t swig_types[49]
-#define SWIGTYPE_p_svn_fs_access_t swig_types[50]
-#define SWIGTYPE_p_svn_fs_dirent_t swig_types[51]
-#define SWIGTYPE_p_svn_fs_history_t swig_types[52]
-#define SWIGTYPE_p_svn_fs_id_t swig_types[53]
-#define SWIGTYPE_p_svn_fs_pack_notify_action_t swig_types[54]
-#define SWIGTYPE_p_svn_fs_path_change2_t swig_types[55]
-#define SWIGTYPE_p_svn_fs_path_change_kind_t swig_types[56]
-#define SWIGTYPE_p_svn_fs_path_change_t swig_types[57]
-#define SWIGTYPE_p_svn_fs_root_t swig_types[58]
-#define SWIGTYPE_p_svn_fs_t swig_types[59]
-#define SWIGTYPE_p_svn_fs_txn_t swig_types[60]
-#define SWIGTYPE_p_svn_io_dirent2_t swig_types[61]
-#define SWIGTYPE_p_svn_io_dirent_t swig_types[62]
-#define SWIGTYPE_p_svn_io_file_del_t swig_types[63]
-#define SWIGTYPE_p_svn_location_segment_t swig_types[64]
-#define SWIGTYPE_p_svn_lock_t swig_types[65]
-#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[66]
-#define SWIGTYPE_p_svn_log_changed_path_t swig_types[67]
-#define SWIGTYPE_p_svn_log_entry_t swig_types[68]
-#define SWIGTYPE_p_svn_merge_range_t swig_types[69]
-#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[70]
-#define SWIGTYPE_p_svn_node_kind_t swig_types[71]
-#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[72]
-#define SWIGTYPE_p_svn_opt_revision_t swig_types[73]
-#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[74]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[75]
-#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[76]
-#define SWIGTYPE_p_svn_prop_kind swig_types[77]
-#define SWIGTYPE_p_svn_stream_mark_t swig_types[78]
-#define SWIGTYPE_p_svn_stream_t swig_types[79]
-#define SWIGTYPE_p_svn_string_t swig_types[80]
-#define SWIGTYPE_p_svn_stringbuf_t swig_types[81]
-#define SWIGTYPE_p_svn_tristate_t swig_types[82]
-#define SWIGTYPE_p_svn_txdelta_op_t swig_types[83]
-#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[84]
-#define SWIGTYPE_p_svn_txdelta_window_t swig_types[85]
-#define SWIGTYPE_p_svn_version_checklist_t swig_types[86]
-#define SWIGTYPE_p_svn_version_t swig_types[87]
-#define SWIGTYPE_p_unsigned_char swig_types[88]
-#define SWIGTYPE_p_unsigned_long swig_types[89]
-#define SWIGTYPE_p_void swig_types[90]
-static swig_type_info *swig_types[92];
-static swig_module_info swig_module = {swig_types, 91, 0, 0, 0, 0};
+#define SWIGTYPE_p_f_long_p_void_p_apr_pool_t__void swig_types[6]
+#define SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[7]
+#define SWIGTYPE_p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[8]
+#define SWIGTYPE_p_f_p_void__p_svn_error_t swig_types[9]
+#define SWIGTYPE_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t swig_types[10]
+#define SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t swig_types[11]
+#define SWIGTYPE_p_f_p_void_p_struct_svn_error_t__void swig_types[12]
+#define SWIGTYPE_p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t swig_types[13]
+#define SWIGTYPE_p_int swig_types[14]
+#define SWIGTYPE_p_long swig_types[15]
+#define SWIGTYPE_p_p_apr_array_header_t swig_types[16]
+#define SWIGTYPE_p_p_apr_hash_t swig_types[17]
+#define SWIGTYPE_p_p_char swig_types[18]
+#define SWIGTYPE_p_p_f_long_p_void_p_apr_pool_t__void swig_types[19]
+#define SWIGTYPE_p_p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[20]
+#define SWIGTYPE_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t swig_types[21]
+#define SWIGTYPE_p_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t swig_types[22]
+#define SWIGTYPE_p_p_f_p_void_p_apr_pool_t__p_svn_error_t swig_types[23]
+#define SWIGTYPE_p_p_f_p_void_p_struct_svn_error_t__void swig_types[24]
+#define SWIGTYPE_p_p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t swig_types[25]
+#define SWIGTYPE_p_p_svn_checksum_t swig_types[26]
+#define SWIGTYPE_p_p_svn_fs_access_t swig_types[27]
+#define SWIGTYPE_p_p_svn_fs_history_t swig_types[28]
+#define SWIGTYPE_p_p_svn_fs_id_t swig_types[29]
+#define SWIGTYPE_p_p_svn_fs_root_t swig_types[30]
+#define SWIGTYPE_p_p_svn_fs_t swig_types[31]
+#define SWIGTYPE_p_p_svn_fs_txn_t swig_types[32]
+#define SWIGTYPE_p_p_svn_lock_t swig_types[33]
+#define SWIGTYPE_p_p_svn_stream_t swig_types[34]
+#define SWIGTYPE_p_p_svn_string_t swig_types[35]
+#define SWIGTYPE_p_p_svn_txdelta_stream_t swig_types[36]
+#define SWIGTYPE_p_p_void swig_types[37]
+#define SWIGTYPE_p_svn_auth_baton_t swig_types[38]
+#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[39]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[40]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[41]
+#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[42]
+#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[43]
+#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[44]
+#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[45]
+#define SWIGTYPE_p_svn_auth_provider_t swig_types[46]
+#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[47]
+#define SWIGTYPE_p_svn_checksum_ctx_t swig_types[48]
+#define SWIGTYPE_p_svn_checksum_kind_t swig_types[49]
+#define SWIGTYPE_p_svn_checksum_t swig_types[50]
+#define SWIGTYPE_p_svn_commit_info_t swig_types[51]
+#define SWIGTYPE_p_svn_config_t swig_types[52]
+#define SWIGTYPE_p_svn_delta_editor_t swig_types[53]
+#define SWIGTYPE_p_svn_depth_t swig_types[54]
+#define SWIGTYPE_p_svn_dirent_t swig_types[55]
+#define SWIGTYPE_p_svn_errno_t swig_types[56]
+#define SWIGTYPE_p_svn_error_t swig_types[57]
+#define SWIGTYPE_p_svn_fs_access_t swig_types[58]
+#define SWIGTYPE_p_svn_fs_dirent_t swig_types[59]
+#define SWIGTYPE_p_svn_fs_history_t swig_types[60]
+#define SWIGTYPE_p_svn_fs_id_t swig_types[61]
+#define SWIGTYPE_p_svn_fs_pack_notify_action_t swig_types[62]
+#define SWIGTYPE_p_svn_fs_path_change2_t swig_types[63]
+#define SWIGTYPE_p_svn_fs_path_change_kind_t swig_types[64]
+#define SWIGTYPE_p_svn_fs_path_change_t swig_types[65]
+#define SWIGTYPE_p_svn_fs_root_t swig_types[66]
+#define SWIGTYPE_p_svn_fs_t swig_types[67]
+#define SWIGTYPE_p_svn_fs_txn_t swig_types[68]
+#define SWIGTYPE_p_svn_io_dirent2_t swig_types[69]
+#define SWIGTYPE_p_svn_io_dirent_t swig_types[70]
+#define SWIGTYPE_p_svn_io_file_del_t swig_types[71]
+#define SWIGTYPE_p_svn_location_segment_t swig_types[72]
+#define SWIGTYPE_p_svn_lock_t swig_types[73]
+#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[74]
+#define SWIGTYPE_p_svn_log_changed_path_t swig_types[75]
+#define SWIGTYPE_p_svn_log_entry_t swig_types[76]
+#define SWIGTYPE_p_svn_merge_range_t swig_types[77]
+#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[78]
+#define SWIGTYPE_p_svn_node_kind_t swig_types[79]
+#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[80]
+#define SWIGTYPE_p_svn_opt_revision_t swig_types[81]
+#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[82]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[83]
+#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[84]
+#define SWIGTYPE_p_svn_prop_inherited_item_t swig_types[85]
+#define SWIGTYPE_p_svn_prop_kind swig_types[86]
+#define SWIGTYPE_p_svn_stream_mark_t swig_types[87]
+#define SWIGTYPE_p_svn_stream_t swig_types[88]
+#define SWIGTYPE_p_svn_string_t swig_types[89]
+#define SWIGTYPE_p_svn_stringbuf_t swig_types[90]
+#define SWIGTYPE_p_svn_tristate_t swig_types[91]
+#define SWIGTYPE_p_svn_txdelta_op_t swig_types[92]
+#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[93]
+#define SWIGTYPE_p_svn_txdelta_window_t swig_types[94]
+#define SWIGTYPE_p_svn_version_checklist_t swig_types[95]
+#define SWIGTYPE_p_svn_version_ext_linked_lib_t swig_types[96]
+#define SWIGTYPE_p_svn_version_ext_loaded_lib_t swig_types[97]
+#define SWIGTYPE_p_svn_version_extended_t swig_types[98]
+#define SWIGTYPE_p_svn_version_t swig_types[99]
+#define SWIGTYPE_p_svn_wc_external_item2_t swig_types[100]
+#define SWIGTYPE_p_unsigned_char swig_types[101]
+#define SWIGTYPE_p_unsigned_long swig_types[102]
+#define SWIGTYPE_p_void swig_types[103]
+static swig_type_info *swig_types[105];
+static swig_module_info swig_module = {swig_types, 104, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@@ -3035,7 +3069,7 @@ static swig_module_info swig_module = {swig_types, 91, 0, 0, 0, 0};
#endif
#define SWIG_name "_fs"
-#define SWIGVERSION 0x020004
+#define SWIGVERSION 0x020009
#define SWIG_VERSION SWIGVERSION
@@ -3357,12 +3391,13 @@ SWIG_As_long (PyObject* obj)
}
- #define SWIG_From_long PyInt_FromLong
+ #define SWIG_From_long PyLong_FromLong
SWIGINTERN int
SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val)
{
+#if PY_VERSION_HEX < 0x03000000
if (PyInt_Check(obj)) {
long v = PyInt_AsLong(obj);
if (v >= 0) {
@@ -3371,7 +3406,9 @@ SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val)
} else {
return SWIG_OverflowError;
}
- } else if (PyLong_Check(obj)) {
+ } else
+#endif
+ if (PyLong_Check(obj)) {
unsigned long v = PyLong_AsUnsignedLong(obj);
if (!PyErr_Occurred()) {
if (val) *val = v;
@@ -3420,10 +3457,10 @@ SWIG_As_unsigned_SS_long (PyObject* obj)
}
-SWIGINTERNINLINE PyObject *
-SWIG_From_int (int value)
-{
- return SWIG_From_long (value);
+SWIGINTERNINLINE PyObject*
+ SWIG_From_int (int value)
+{
+ return PyInt_FromLong((long) value);
}
@@ -3432,6 +3469,21 @@ static void svn_fs_invoke_warning_callback(
_obj(baton, err);
}
+static void svn_fs_invoke_progress_notify_func(
+ svn_fs_progress_notify_func_t _obj, svn_revnum_t revision, void *baton, apr_pool_t *pool) {
+ _obj(revision, baton, pool);
+}
+
+static svn_error_t * svn_fs_invoke_freeze_func(
+ svn_fs_freeze_func_t _obj, void *baton, apr_pool_t *pool) {
+ return _obj(baton, pool);
+}
+
+static svn_error_t * svn_fs_invoke_process_contents_func(
+ svn_fs_process_contents_func_t _obj, const unsigned char *contents, apr_size_t len, void *baton, apr_pool_t *scratch_pool) {
+ return _obj(contents, len, baton, scratch_pool);
+}
+
static svn_error_t * svn_fs_invoke_get_locks_callback(
svn_fs_get_locks_callback_t _obj, void *baton, svn_lock_t *lock, apr_pool_t *pool) {
return _obj(baton, lock, pool);
@@ -3519,53 +3571,6 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_fs_set_warning_func(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
- PyObject *resultobj = 0;
- svn_fs_t *arg1 = (svn_fs_t *) 0 ;
- svn_fs_warning_callback_t arg2 = (svn_fs_warning_callback_t) 0 ;
- void *arg3 = (void *) 0 ;
- PyObject * obj0 = 0 ;
- PyObject * obj1 = 0 ;
- PyObject * obj2 = 0 ;
-
- if (!PyArg_ParseTuple(args,(char *)"OOO:svn_fs_set_warning_func",&obj0,&obj1,&obj2)) SWIG_fail;
- {
- arg1 = (svn_fs_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_t, svn_argnum_obj0);
- if (PyErr_Occurred()) {
- SWIG_fail;
- }
- }
- {
- svn_fs_warning_callback_t * tmp =
- svn_swig_MustGetPtr(obj1, SWIGTYPE_p_p_f_p_void_p_struct_svn_error_t__void, svn_argnum_obj1);
- if (tmp == NULL || PyErr_Occurred()) {
- SWIG_fail;
- }
- arg2 = *tmp;
- }
- {
- if (obj2 == Py_None) {
- arg3 = NULL;
- } else if (SWIG_ConvertPtr(obj2, (void **) &arg3, 0, 0) == -1) {
- arg3 = (void *) obj2;
- PyErr_Clear();
- }
- }
- {
- svn_swig_py_release_py_lock();
-
- svn_fs_set_warning_func(arg1,arg2,arg3);
-
- svn_swig_py_acquire_py_lock();
-
- }
- resultobj = SWIG_Py_Void();
- return resultobj;
-fail:
- return NULL;
-}
-
-
SWIGINTERN PyObject *_wrap_svn_fs_create(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_fs_t **arg1 = (svn_fs_t **) 0 ;
@@ -3874,6 +3879,57 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_fs_config(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_fs_t *arg1 = (svn_fs_t *) 0 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ apr_hash_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg2 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"O|O:svn_fs_config",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (svn_fs_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj1) {
+ /* Verify that the user supplied a valid pool */
+ if (obj1 != Py_None && obj1 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj1);
+ SWIG_arg_fail(svn_argnum_obj1);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (apr_hash_t *)svn_fs_config(arg1,arg2);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = svn_swig_NewPointerObj((void*)(result), SWIGTYPE_p_apr_hash_t,
+ _global_py_pool, args);
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_fs_delete_fs(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
char *arg1 = (char *) 0 ;
@@ -3927,6 +3983,83 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_fs_hotcopy2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ char *arg1 = (char *) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ svn_cancel_func_t arg5 = (svn_cancel_func_t) 0 ;
+ void *arg6 = (void *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj5 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg7 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"ssOOO|O:svn_fs_hotcopy2",&arg1,&arg2,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+ {
+ arg3 = (svn_boolean_t)SWIG_As_long (obj2);
+ if (SWIG_arg_fail(svn_argnum_obj2)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg4 = (svn_boolean_t)SWIG_As_long (obj3);
+ if (SWIG_arg_fail(svn_argnum_obj3)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg5 = svn_swig_py_cancel_func;
+ arg6 = obj4; /* our function is the baton. */
+ }
+ if (obj5) {
+ /* Verify that the user supplied a valid pool */
+ if (obj5 != Py_None && obj5 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj5);
+ SWIG_arg_fail(svn_argnum_obj5);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_fs_hotcopy2((char const *)arg1,(char const *)arg2,arg3,arg4,arg5,arg6,arg7);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_fs_hotcopy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
char *arg1 = (char *) 0 ;
@@ -4049,6 +4182,73 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_fs_freeze(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_fs_t *arg1 = (svn_fs_t *) 0 ;
+ svn_fs_freeze_func_t arg2 = (svn_fs_freeze_func_t) 0 ;
+ void *arg3 = (void *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg4 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OO|O:svn_fs_freeze",&obj0,&obj1,&obj2)) SWIG_fail;
+ {
+ arg1 = (svn_fs_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg2 = svn_swig_py_fs_freeze_func;
+ arg3 = (void *)obj1;
+ }
+ if (obj2) {
+ /* Verify that the user supplied a valid pool */
+ if (obj2 != Py_None && obj2 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj2);
+ SWIG_arg_fail(svn_argnum_obj2);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_fs_freeze(arg1,arg2,arg3,arg4);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_fs_berkeley_logfiles(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
@@ -4477,7 +4677,7 @@ SWIGINTERN PyObject *_wrap_svn_fs_create_access(PyObject *SWIGUNUSEDPARM(self),
SWIG_fail;
arg3 = _global_pool;
arg1 = &temp1;
- if (!PyArg_ParseTuple(args,(char *)"s|O:svn_fs_create_access",&arg2,&obj1)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"z|O:svn_fs_create_access",&arg2,&obj1)) SWIG_fail;
if (obj1) {
/* Verify that the user supplied a valid pool */
if (obj1 != Py_None && obj1 != _global_py_pool) {
@@ -6177,14 +6377,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_path_change2_t_node_rev_id_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
svn_fs_id_t *arg2 = (svn_fs_id_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_fs_path_change2_t_node_rev_id_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6205,13 +6405,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_path_change2_t_node_rev_id_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_fs_id_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_fs_path_change2_t_node_rev_id_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6227,14 +6427,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_path_change2_t_change_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
svn_fs_path_change_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_fs_path_change2_t_change_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6255,13 +6455,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_path_change2_t_change_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_fs_path_change_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_fs_path_change2_t_change_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6276,14 +6476,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_path_change2_t_text_mod_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_fs_path_change2_t_text_mod_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6304,13 +6504,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_path_change2_t_text_mod_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_fs_path_change2_t_text_mod_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6325,14 +6525,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_path_change2_t_prop_mod_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_fs_path_change2_t_prop_mod_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6353,13 +6553,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_path_change2_t_prop_mod_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_fs_path_change2_t_prop_mod_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6374,14 +6574,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_path_change2_t_node_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
svn_node_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_fs_path_change2_t_node_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6402,13 +6602,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_path_change2_t_node_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_node_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_fs_path_change2_t_node_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6423,14 +6623,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_path_change2_t_copyfrom_known_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_fs_path_change2_t_copyfrom_known_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6451,13 +6651,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_path_change2_t_copyfrom_known_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_fs_path_change2_t_copyfrom_known_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6472,14 +6672,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_path_change2_t_copyfrom_rev_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_fs_path_change2_t_copyfrom_rev_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6500,13 +6700,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_path_change2_t_copyfrom_rev_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_fs_path_change2_t_copyfrom_rev_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6521,13 +6721,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_path_change2_t_copyfrom_path_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Oz:svn_fs_path_change2_t_copyfrom_path_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6549,13 +6749,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_path_change2_t_copyfrom_path_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_fs_path_change2_t_copyfrom_path_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_path_change2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6577,14 +6777,14 @@ SWIGINTERN PyObject *svn_fs_path_change2_t_swigregister(PyObject *SWIGUNUSEDPARM
SWIGINTERN PyObject *_wrap_svn_fs_path_change_t_node_rev_id_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_path_change_t *arg1 = (svn_fs_path_change_t *) 0 ;
+ struct svn_fs_path_change_t *arg1 = (struct svn_fs_path_change_t *) 0 ;
svn_fs_id_t *arg2 = (svn_fs_id_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_fs_path_change_t_node_rev_id_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_fs_path_change_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_path_change_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6605,13 +6805,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_path_change_t_node_rev_id_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_path_change_t *arg1 = (svn_fs_path_change_t *) 0 ;
+ struct svn_fs_path_change_t *arg1 = (struct svn_fs_path_change_t *) 0 ;
PyObject * obj0 = 0 ;
svn_fs_id_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_fs_path_change_t_node_rev_id_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_fs_path_change_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_path_change_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6627,14 +6827,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_path_change_t_change_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_path_change_t *arg1 = (svn_fs_path_change_t *) 0 ;
+ struct svn_fs_path_change_t *arg1 = (struct svn_fs_path_change_t *) 0 ;
svn_fs_path_change_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_fs_path_change_t_change_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_fs_path_change_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_path_change_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6655,13 +6855,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_path_change_t_change_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_path_change_t *arg1 = (svn_fs_path_change_t *) 0 ;
+ struct svn_fs_path_change_t *arg1 = (struct svn_fs_path_change_t *) 0 ;
PyObject * obj0 = 0 ;
svn_fs_path_change_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_fs_path_change_t_change_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_fs_path_change_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_path_change_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6676,14 +6876,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_path_change_t_text_mod_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_path_change_t *arg1 = (svn_fs_path_change_t *) 0 ;
+ struct svn_fs_path_change_t *arg1 = (struct svn_fs_path_change_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_fs_path_change_t_text_mod_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_fs_path_change_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_path_change_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6704,13 +6904,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_path_change_t_text_mod_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_path_change_t *arg1 = (svn_fs_path_change_t *) 0 ;
+ struct svn_fs_path_change_t *arg1 = (struct svn_fs_path_change_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_fs_path_change_t_text_mod_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_fs_path_change_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_path_change_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6725,14 +6925,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_path_change_t_prop_mod_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_path_change_t *arg1 = (svn_fs_path_change_t *) 0 ;
+ struct svn_fs_path_change_t *arg1 = (struct svn_fs_path_change_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_fs_path_change_t_prop_mod_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_fs_path_change_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_path_change_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6753,13 +6953,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_path_change_t_prop_mod_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_path_change_t *arg1 = (svn_fs_path_change_t *) 0 ;
+ struct svn_fs_path_change_t *arg1 = (struct svn_fs_path_change_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_fs_path_change_t_prop_mod_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_fs_path_change_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_path_change_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_path_change_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8193,6 +8393,136 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_fs_get_mergeinfo2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_mergeinfo_catalog_t *arg1 = (svn_mergeinfo_catalog_t *) 0 ;
+ svn_fs_root_t *arg2 = (svn_fs_root_t *) 0 ;
+ apr_array_header_t *arg3 = (apr_array_header_t *) 0 ;
+ svn_mergeinfo_inheritance_t arg4 ;
+ svn_boolean_t arg5 ;
+ svn_boolean_t arg6 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg8 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_mergeinfo_catalog_t temp1 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj5 = 0 ;
+ PyObject * obj6 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg7 = _global_pool;
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg8 = _global_pool;
+ arg1 = &temp1;
+ if (!PyArg_ParseTuple(args,(char *)"OOOOO|OO:svn_fs_get_mergeinfo2",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+ {
+ arg2 = (svn_fs_root_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_root_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg3 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj1,
+ sizeof(const char *),
+ svn_swig_py_unwrap_string,
+ NULL,
+ _global_pool);
+ if (PyErr_Occurred())
+ SWIG_fail;
+ }
+ {
+ arg4 = (svn_mergeinfo_inheritance_t)SWIG_As_long (obj2);
+ if (SWIG_arg_fail(svn_argnum_obj2)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg5 = (svn_boolean_t)SWIG_As_long (obj3);
+ if (SWIG_arg_fail(svn_argnum_obj3)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg6 = (svn_boolean_t)SWIG_As_long (obj4);
+ if (SWIG_arg_fail(svn_argnum_obj4)) {
+ SWIG_fail;
+ }
+ }
+ if (obj5) {
+ /* Verify that the user supplied a valid pool */
+ if (obj5 != Py_None && obj5 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj5);
+ SWIG_arg_fail(svn_argnum_obj5);
+ SWIG_fail;
+ }
+ }
+ if (obj6) {
+ /* Verify that the user supplied a valid pool */
+ if (obj6 != Py_None && obj6 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj6);
+ SWIG_arg_fail(svn_argnum_obj6);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_fs_get_mergeinfo2(arg1,arg2,(apr_array_header_t const *)arg3,arg4,arg5,arg6,arg7,arg8);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_py_mergeinfo_catalog_to_dict(*arg1,
+ SWIGTYPE_p_svn_merge_range_t,
+ _global_py_pool))
+
+
+
+ ;
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_fs_get_mergeinfo(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_mergeinfo_catalog_t *arg1 = (svn_mergeinfo_catalog_t *) 0 ;
@@ -8392,13 +8722,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_dirent_t_name_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_dirent_t *arg1 = (svn_fs_dirent_t *) 0 ;
+ struct svn_fs_dirent_t *arg1 = (struct svn_fs_dirent_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_fs_dirent_t_name_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_fs_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_dirent_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_dirent_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8420,13 +8750,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_dirent_t_name_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_dirent_t *arg1 = (svn_fs_dirent_t *) 0 ;
+ struct svn_fs_dirent_t *arg1 = (struct svn_fs_dirent_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_fs_dirent_t_name_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_fs_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_dirent_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_dirent_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8441,14 +8771,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_dirent_t_id_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_dirent_t *arg1 = (svn_fs_dirent_t *) 0 ;
+ struct svn_fs_dirent_t *arg1 = (struct svn_fs_dirent_t *) 0 ;
svn_fs_id_t *arg2 = (svn_fs_id_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_fs_dirent_t_id_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_fs_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_dirent_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_dirent_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8469,13 +8799,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_dirent_t_id_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_dirent_t *arg1 = (svn_fs_dirent_t *) 0 ;
+ struct svn_fs_dirent_t *arg1 = (struct svn_fs_dirent_t *) 0 ;
PyObject * obj0 = 0 ;
svn_fs_id_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_fs_dirent_t_id_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_fs_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_dirent_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_dirent_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8491,14 +8821,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_dirent_t_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_dirent_t *arg1 = (svn_fs_dirent_t *) 0 ;
+ struct svn_fs_dirent_t *arg1 = (struct svn_fs_dirent_t *) 0 ;
svn_node_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_fs_dirent_t_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_fs_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_dirent_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_dirent_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8519,13 +8849,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_fs_dirent_t_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_fs_dirent_t *arg1 = (svn_fs_dirent_t *) 0 ;
+ struct svn_fs_dirent_t *arg1 = (struct svn_fs_dirent_t *) 0 ;
PyObject * obj0 = 0 ;
svn_node_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_fs_dirent_t_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_fs_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_dirent_t, svn_argnum_obj0);
+ arg1 = (struct svn_fs_dirent_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_dirent_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8957,8 +9287,6 @@ SWIGINTERN PyObject *_wrap_svn_fs_file_checksum(PyObject *SWIGUNUSEDPARM(self),
apr_pool_t *_global_pool = NULL ;
PyObject *_global_py_pool = NULL ;
svn_checksum_t *temp1 ;
- void *argp2 ;
- int res2 = 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
PyObject * obj3 = 0 ;
@@ -8972,14 +9300,9 @@ SWIGINTERN PyObject *_wrap_svn_fs_file_checksum(PyObject *SWIGUNUSEDPARM(self),
arg1 = &temp1;
if (!PyArg_ParseTuple(args,(char *)"OOsO|O:svn_fs_file_checksum",&obj0,&obj1,&arg4,&obj3,&obj4)) SWIG_fail;
{
- res2 = SWIG_ConvertPtr(obj0, &argp2, SWIGTYPE_p_svn_checksum_kind_t, 0 );
- if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "svn_fs_file_checksum" "', argument " "2"" of type '" "svn_checksum_kind_t""'");
- }
- if (!argp2) {
- SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "svn_fs_file_checksum" "', argument " "2"" of type '" "svn_checksum_kind_t""'");
- } else {
- arg2 = *((svn_checksum_kind_t *)(argp2));
+ arg2 = (svn_checksum_kind_t)SWIG_As_long (obj0);
+ if (SWIG_arg_fail(svn_argnum_obj0)) {
+ SWIG_fail;
}
}
{
@@ -9179,6 +9502,97 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_fs_try_process_file_contents(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_boolean_t *arg1 = (svn_boolean_t *) 0 ;
+ svn_fs_root_t *arg2 = (svn_fs_root_t *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_fs_process_contents_func_t arg4 = (svn_fs_process_contents_func_t) 0 ;
+ void *arg5 = (void *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_boolean_t temp1 ;
+ int res1 = SWIG_TMPOBJ ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg6 = _global_pool;
+ arg1 = &temp1;
+ if (!PyArg_ParseTuple(args,(char *)"OsOO|O:svn_fs_try_process_file_contents",&obj0,&arg3,&obj2,&obj3,&obj4)) SWIG_fail;
+ {
+ arg2 = (svn_fs_root_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_root_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_fs_process_contents_func_t * tmp =
+ svn_swig_MustGetPtr(obj2, SWIGTYPE_p_p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t, svn_argnum_obj2);
+ if (tmp == NULL || PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ arg4 = *tmp;
+ }
+ {
+ if (obj3 == Py_None) {
+ arg5 = NULL;
+ } else if (SWIG_ConvertPtr(obj3, (void **) &arg5, 0, 0) == -1) {
+ arg5 = (void *) obj3;
+ PyErr_Clear();
+ }
+ }
+ if (obj4) {
+ /* Verify that the user supplied a valid pool */
+ if (obj4 != Py_None && obj4 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj4);
+ SWIG_arg_fail(svn_argnum_obj4);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_fs_try_process_file_contents(arg1,arg2,(char const *)arg3,arg4,arg5,arg6);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ if (SWIG_IsTmpObj(res1)) {
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg1)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res1) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_int, new_flags));
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_fs_make_file(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_fs_root_t *arg1 = (svn_fs_root_t *) 0 ;
@@ -10787,6 +11201,168 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_fs_verify(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ char *arg1 = (char *) 0 ;
+ apr_hash_t *arg2 = (apr_hash_t *) 0 ;
+ svn_revnum_t arg3 ;
+ svn_revnum_t arg4 ;
+ svn_fs_progress_notify_func_t arg5 = (svn_fs_progress_notify_func_t) 0 ;
+ void *arg6 = (void *) 0 ;
+ svn_cancel_func_t arg7 = (svn_cancel_func_t) 0 ;
+ void *arg8 = (void *) 0 ;
+ apr_pool_t *arg9 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj5 = 0 ;
+ PyObject * obj6 = 0 ;
+ PyObject * obj7 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg9 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"sOOOOOO|O:svn_fs_verify",&arg1,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7)) SWIG_fail;
+ {
+ /* PYTHON-FIXME: Handle None -> NULL. */
+ arg2 = svn_swig_py_stringhash_from_dict(obj1, _global_pool);
+ }
+ {
+ arg3 = (svn_revnum_t)SWIG_As_long (obj2);
+ if (SWIG_arg_fail(svn_argnum_obj2)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg4 = (svn_revnum_t)SWIG_As_long (obj3);
+ if (SWIG_arg_fail(svn_argnum_obj3)) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_fs_progress_notify_func_t * tmp =
+ svn_swig_MustGetPtr(obj4, SWIGTYPE_p_p_f_long_p_void_p_apr_pool_t__void, svn_argnum_obj4);
+ if (tmp == NULL || PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ arg5 = *tmp;
+ }
+ {
+ if (obj5 == Py_None) {
+ arg6 = NULL;
+ } else if (SWIG_ConvertPtr(obj5, (void **) &arg6, 0, 0) == -1) {
+ arg6 = (void *) obj5;
+ PyErr_Clear();
+ }
+ }
+ {
+ arg7 = svn_swig_py_cancel_func;
+ arg8 = obj6; /* our function is the baton. */
+ }
+ if (obj7) {
+ /* Verify that the user supplied a valid pool */
+ if (obj7 != Py_None && obj7 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj7);
+ SWIG_arg_fail(svn_argnum_obj7);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_fs_verify((char const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_fs_verify_root(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_fs_root_t *arg1 = (svn_fs_root_t *) 0 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg2 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"O|O:svn_fs_verify_root",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (svn_fs_root_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_root_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj1) {
+ /* Verify that the user supplied a valid pool */
+ if (obj1 != Py_None && obj1 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj1);
+ SWIG_arg_fail(svn_argnum_obj1);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_fs_verify_root(arg1,arg2);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *svn_fs_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *obj;
if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
@@ -10876,6 +11452,235 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_fs_invoke_progress_notify_func(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_fs_progress_notify_func_t arg1 = (svn_fs_progress_notify_func_t) 0 ;
+ svn_revnum_t arg2 ;
+ void *arg3 = (void *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg4 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OOO|O:svn_fs_invoke_progress_notify_func",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+ {
+ svn_fs_progress_notify_func_t * tmp =
+ svn_swig_MustGetPtr(obj0, SWIGTYPE_p_p_f_long_p_void_p_apr_pool_t__void, svn_argnum_obj0);
+ if (tmp == NULL || PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ arg1 = *tmp;
+ }
+ {
+ arg2 = (svn_revnum_t)SWIG_As_long (obj1);
+ if (SWIG_arg_fail(svn_argnum_obj1)) {
+ SWIG_fail;
+ }
+ }
+ {
+ if (obj2 == Py_None) {
+ arg3 = NULL;
+ } else if (SWIG_ConvertPtr(obj2, (void **) &arg3, 0, 0) == -1) {
+ arg3 = (void *) obj2;
+ PyErr_Clear();
+ }
+ }
+ if (obj3) {
+ /* Verify that the user supplied a valid pool */
+ if (obj3 != Py_None && obj3 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj3);
+ SWIG_arg_fail(svn_argnum_obj3);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ svn_fs_invoke_progress_notify_func(arg1,arg2,arg3,arg4);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = SWIG_Py_Void();
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_fs_invoke_freeze_func(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_fs_freeze_func_t arg1 = (svn_fs_freeze_func_t) 0 ;
+ void *arg2 = (void *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg3 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OO|O:svn_fs_invoke_freeze_func",&obj0,&obj1,&obj2)) SWIG_fail;
+ {
+ svn_fs_freeze_func_t * tmp =
+ svn_swig_MustGetPtr(obj0, SWIGTYPE_p_p_f_p_void_p_apr_pool_t__p_svn_error_t, svn_argnum_obj0);
+ if (tmp == NULL || PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ arg1 = *tmp;
+ }
+ {
+ if (obj1 == Py_None) {
+ arg2 = NULL;
+ } else if (SWIG_ConvertPtr(obj1, (void **) &arg2, 0, 0) == -1) {
+ arg2 = (void *) obj1;
+ PyErr_Clear();
+ }
+ }
+ if (obj2) {
+ /* Verify that the user supplied a valid pool */
+ if (obj2 != Py_None && obj2 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj2);
+ SWIG_arg_fail(svn_argnum_obj2);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_fs_invoke_freeze_func(arg1,arg2,arg3);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_fs_invoke_process_contents_func(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_fs_process_contents_func_t arg1 = (svn_fs_process_contents_func_t) 0 ;
+ unsigned char *arg2 = (unsigned char *) 0 ;
+ apr_size_t arg3 ;
+ void *arg4 = (void *) 0 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg5 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OOOO|O:svn_fs_invoke_process_contents_func",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+ {
+ svn_fs_process_contents_func_t * tmp =
+ svn_swig_MustGetPtr(obj0, SWIGTYPE_p_p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t, svn_argnum_obj0);
+ if (tmp == NULL || PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ arg1 = *tmp;
+ }
+ {
+ arg2 = (unsigned char *)svn_swig_MustGetPtr(obj1, SWIGTYPE_p_unsigned_char, svn_argnum_obj1);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg3 = (apr_size_t)SWIG_As_unsigned_SS_long (obj2);
+ if (SWIG_arg_fail(svn_argnum_obj2)) {
+ SWIG_fail;
+ }
+ }
+ {
+ if (obj3 == Py_None) {
+ arg4 = NULL;
+ } else if (SWIG_ConvertPtr(obj3, (void **) &arg4, 0, 0) == -1) {
+ arg4 = (void *) obj3;
+ PyErr_Clear();
+ }
+ }
+ if (obj4) {
+ /* Verify that the user supplied a valid pool */
+ if (obj4 != Py_None && obj4 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj4);
+ SWIG_arg_fail(svn_argnum_obj4);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_fs_invoke_process_contents_func(arg1,(unsigned char const *)arg2,arg3,arg4,arg5);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_fs_invoke_get_locks_callback(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_fs_get_locks_callback_t arg1 = (svn_fs_get_locks_callback_t) 0 ;
@@ -11046,6 +11851,27 @@ SWIGINTERN PyObject *svn_fs_warning_callback_t_swigregister(PyObject *SWIGUNUSED
return SWIG_Py_Void();
}
+SWIGINTERN PyObject *svn_fs_progress_notify_func_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *obj;
+ if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+ SWIG_TypeNewClientData(SWIGTYPE_p_p_f_long_p_void_p_apr_pool_t__void, SWIG_NewClientData(obj));
+ return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *svn_fs_freeze_func_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *obj;
+ if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+ SWIG_TypeNewClientData(SWIGTYPE_p_p_f_p_void_p_apr_pool_t__p_svn_error_t, SWIG_NewClientData(obj));
+ return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *svn_fs_process_contents_func_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *obj;
+ if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+ SWIG_TypeNewClientData(SWIGTYPE_p_p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t, SWIG_NewClientData(obj));
+ return SWIG_Py_Void();
+}
+
SWIGINTERN PyObject *svn_fs_get_locks_callback_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *obj;
if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
@@ -11062,68 +11888,64 @@ SWIGINTERN PyObject *svn_fs_pack_notify_t_swigregister(PyObject *SWIGUNUSEDPARM(
static PyMethodDef SwigMethods[] = {
{ (char *)"SWIG_PyInstanceMethod_New", (PyCFunction)SWIG_PyInstanceMethod_New, METH_O, NULL},
- { (char *)"svn_fs_version", _wrap_svn_fs_version, METH_VARARGS, (char *)"svn_fs_version() -> svn_version_t"},
+ { (char *)"svn_fs_version", _wrap_svn_fs_version, METH_VARARGS, (char *)"svn_fs_version() -> svn_version_t const *"},
{ (char *)"svn_fs_initialize", _wrap_svn_fs_initialize, METH_VARARGS, (char *)"svn_fs_initialize(apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_set_warning_func", _wrap_svn_fs_set_warning_func, METH_VARARGS, (char *)"svn_fs_set_warning_func(svn_fs_t fs, svn_fs_warning_callback_t warning, void warning_baton)"},
- { (char *)"svn_fs_create", _wrap_svn_fs_create, METH_VARARGS, (char *)"svn_fs_create(char path, apr_hash_t fs_config, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_open", _wrap_svn_fs_open, METH_VARARGS, (char *)"svn_fs_open(char path, apr_hash_t fs_config, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_upgrade", _wrap_svn_fs_upgrade, METH_VARARGS, (char *)"svn_fs_upgrade(char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_type", _wrap_svn_fs_type, METH_VARARGS, (char *)"svn_fs_type(char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_path", _wrap_svn_fs_path, METH_VARARGS, (char *)"svn_fs_path(svn_fs_t fs, apr_pool_t pool) -> char"},
- { (char *)"svn_fs_delete_fs", _wrap_svn_fs_delete_fs, METH_VARARGS, (char *)"svn_fs_delete_fs(char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_hotcopy", _wrap_svn_fs_hotcopy, METH_VARARGS, (char *)"\n"
- "svn_fs_hotcopy(char src_path, char dest_path, svn_boolean_t clean, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_fs_recover", _wrap_svn_fs_recover, METH_VARARGS, (char *)"svn_fs_recover(char path, svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_berkeley_logfiles", _wrap_svn_fs_berkeley_logfiles, METH_VARARGS, (char *)"svn_fs_berkeley_logfiles(char path, svn_boolean_t only_unused, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_new", _wrap_svn_fs_new, METH_VARARGS, (char *)"svn_fs_new(apr_hash_t fs_config, apr_pool_t pool) -> svn_fs_t"},
- { (char *)"svn_fs_create_berkeley", _wrap_svn_fs_create_berkeley, METH_VARARGS, (char *)"svn_fs_create_berkeley(svn_fs_t fs, char path) -> svn_error_t"},
- { (char *)"svn_fs_open_berkeley", _wrap_svn_fs_open_berkeley, METH_VARARGS, (char *)"svn_fs_open_berkeley(svn_fs_t fs, char path) -> svn_error_t"},
- { (char *)"svn_fs_berkeley_path", _wrap_svn_fs_berkeley_path, METH_VARARGS, (char *)"svn_fs_berkeley_path(svn_fs_t fs, apr_pool_t pool) -> char"},
- { (char *)"svn_fs_delete_berkeley", _wrap_svn_fs_delete_berkeley, METH_VARARGS, (char *)"svn_fs_delete_berkeley(char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_hotcopy_berkeley", _wrap_svn_fs_hotcopy_berkeley, METH_VARARGS, (char *)"\n"
- "svn_fs_hotcopy_berkeley(char src_path, char dest_path, svn_boolean_t clean_logs, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_fs_berkeley_recover", _wrap_svn_fs_berkeley_recover, METH_VARARGS, (char *)"svn_fs_berkeley_recover(char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_create_access", _wrap_svn_fs_create_access, METH_VARARGS, (char *)"svn_fs_create_access(char username, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_set_access", _wrap_svn_fs_set_access, METH_VARARGS, (char *)"svn_fs_set_access(svn_fs_t fs, svn_fs_access_t access_ctx) -> svn_error_t"},
- { (char *)"svn_fs_get_access", _wrap_svn_fs_get_access, METH_VARARGS, (char *)"svn_fs_get_access(svn_fs_t fs) -> svn_error_t"},
- { (char *)"svn_fs_access_get_username", _wrap_svn_fs_access_get_username, METH_VARARGS, (char *)"svn_fs_access_get_username(svn_fs_access_t access_ctx) -> svn_error_t"},
- { (char *)"svn_fs_access_add_lock_token2", _wrap_svn_fs_access_add_lock_token2, METH_VARARGS, (char *)"svn_fs_access_add_lock_token2(svn_fs_access_t access_ctx, char path, char token) -> svn_error_t"},
- { (char *)"svn_fs_access_add_lock_token", _wrap_svn_fs_access_add_lock_token, METH_VARARGS, (char *)"svn_fs_access_add_lock_token(svn_fs_access_t access_ctx, char token) -> svn_error_t"},
- { (char *)"svn_fs_compare_ids", _wrap_svn_fs_compare_ids, METH_VARARGS, (char *)"svn_fs_compare_ids(svn_fs_id_t a, svn_fs_id_t b) -> int"},
- { (char *)"svn_fs_check_related", _wrap_svn_fs_check_related, METH_VARARGS, (char *)"svn_fs_check_related(svn_fs_id_t id1, svn_fs_id_t id2) -> svn_boolean_t"},
- { (char *)"svn_fs_parse_id", _wrap_svn_fs_parse_id, METH_VARARGS, (char *)"svn_fs_parse_id(char data, apr_pool_t pool) -> svn_fs_id_t"},
- { (char *)"svn_fs_unparse_id", _wrap_svn_fs_unparse_id, METH_VARARGS, (char *)"svn_fs_unparse_id(svn_fs_id_t id, apr_pool_t pool) -> svn_string_t"},
- { (char *)"svn_fs_begin_txn2", _wrap_svn_fs_begin_txn2, METH_VARARGS, (char *)"\n"
- "svn_fs_begin_txn2(svn_fs_t fs, svn_revnum_t rev, apr_uint32_t flags, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ { (char *)"svn_fs_create", _wrap_svn_fs_create, METH_VARARGS, (char *)"svn_fs_create(char const * path, apr_hash_t fs_config, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_open", _wrap_svn_fs_open, METH_VARARGS, (char *)"svn_fs_open(char const * path, apr_hash_t fs_config, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_upgrade", _wrap_svn_fs_upgrade, METH_VARARGS, (char *)"svn_fs_upgrade(char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_type", _wrap_svn_fs_type, METH_VARARGS, (char *)"svn_fs_type(char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_path", _wrap_svn_fs_path, METH_VARARGS, (char *)"svn_fs_path(svn_fs_t * fs, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_fs_config", _wrap_svn_fs_config, METH_VARARGS, (char *)"svn_fs_config(svn_fs_t * fs, apr_pool_t pool) -> apr_hash_t"},
+ { (char *)"svn_fs_delete_fs", _wrap_svn_fs_delete_fs, METH_VARARGS, (char *)"svn_fs_delete_fs(char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_hotcopy2", _wrap_svn_fs_hotcopy2, METH_VARARGS, (char *)"\n"
+ "svn_fs_hotcopy2(char const * src_path, char const * dest_path, svn_boolean_t clean, svn_boolean_t incremental, \n"
+ " svn_cancel_func_t cancel_func, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
- { (char *)"svn_fs_begin_txn", _wrap_svn_fs_begin_txn, METH_VARARGS, (char *)"svn_fs_begin_txn(svn_fs_t fs, svn_revnum_t rev, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_commit_txn", _wrap_svn_fs_commit_txn, METH_VARARGS, (char *)"svn_fs_commit_txn(svn_fs_txn_t txn, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_abort_txn", _wrap_svn_fs_abort_txn, METH_VARARGS, (char *)"svn_fs_abort_txn(svn_fs_txn_t txn, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_purge_txn", _wrap_svn_fs_purge_txn, METH_VARARGS, (char *)"svn_fs_purge_txn(svn_fs_t fs, char txn_id, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_txn_name", _wrap_svn_fs_txn_name, METH_VARARGS, (char *)"svn_fs_txn_name(svn_fs_txn_t txn, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_txn_base_revision", _wrap_svn_fs_txn_base_revision, METH_VARARGS, (char *)"svn_fs_txn_base_revision(svn_fs_txn_t txn) -> svn_revnum_t"},
- { (char *)"svn_fs_open_txn", _wrap_svn_fs_open_txn, METH_VARARGS, (char *)"svn_fs_open_txn(svn_fs_t fs, char name, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_list_transactions", _wrap_svn_fs_list_transactions, METH_VARARGS, (char *)"svn_fs_list_transactions(svn_fs_t fs, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_txn_prop", _wrap_svn_fs_txn_prop, METH_VARARGS, (char *)"svn_fs_txn_prop(svn_fs_txn_t txn, char propname, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_txn_proplist", _wrap_svn_fs_txn_proplist, METH_VARARGS, (char *)"svn_fs_txn_proplist(svn_fs_txn_t txn, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_change_txn_prop", _wrap_svn_fs_change_txn_prop, METH_VARARGS, (char *)"svn_fs_change_txn_prop(svn_fs_txn_t txn, char name, svn_string_t value, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_change_txn_props", _wrap_svn_fs_change_txn_props, METH_VARARGS, (char *)"svn_fs_change_txn_props(svn_fs_txn_t txn, apr_array_header_t props, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_revision_root", _wrap_svn_fs_revision_root, METH_VARARGS, (char *)"svn_fs_revision_root(svn_fs_t fs, svn_revnum_t rev, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_txn_root", _wrap_svn_fs_txn_root, METH_VARARGS, (char *)"svn_fs_txn_root(svn_fs_txn_t txn, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_close_root", _wrap_svn_fs_close_root, METH_VARARGS, (char *)"svn_fs_close_root(svn_fs_root_t root)"},
- { (char *)"svn_fs_root_fs", _wrap_svn_fs_root_fs, METH_VARARGS, (char *)"svn_fs_root_fs(svn_fs_root_t root) -> svn_fs_t"},
- { (char *)"svn_fs_is_txn_root", _wrap_svn_fs_is_txn_root, METH_VARARGS, (char *)"svn_fs_is_txn_root(svn_fs_root_t root) -> svn_boolean_t"},
- { (char *)"svn_fs_is_revision_root", _wrap_svn_fs_is_revision_root, METH_VARARGS, (char *)"svn_fs_is_revision_root(svn_fs_root_t root) -> svn_boolean_t"},
- { (char *)"svn_fs_txn_root_name", _wrap_svn_fs_txn_root_name, METH_VARARGS, (char *)"svn_fs_txn_root_name(svn_fs_root_t root, apr_pool_t pool) -> char"},
- { (char *)"svn_fs_txn_root_base_revision", _wrap_svn_fs_txn_root_base_revision, METH_VARARGS, (char *)"svn_fs_txn_root_base_revision(svn_fs_root_t root) -> svn_revnum_t"},
- { (char *)"svn_fs_revision_root_revision", _wrap_svn_fs_revision_root_revision, METH_VARARGS, (char *)"svn_fs_revision_root_revision(svn_fs_root_t root) -> svn_revnum_t"},
- { (char *)"svn_fs_path_change2_t_node_rev_id_set", _wrap_svn_fs_path_change2_t_node_rev_id_set, METH_VARARGS, (char *)"svn_fs_path_change2_t_node_rev_id_set(svn_fs_path_change2_t self, svn_fs_id_t node_rev_id)"},
- { (char *)"svn_fs_path_change2_t_node_rev_id_get", _wrap_svn_fs_path_change2_t_node_rev_id_get, METH_VARARGS, (char *)"svn_fs_path_change2_t_node_rev_id_get(svn_fs_path_change2_t self) -> svn_fs_id_t"},
+ { (char *)"svn_fs_hotcopy", _wrap_svn_fs_hotcopy, METH_VARARGS, (char *)"svn_fs_hotcopy(char const * src_path, char const * dest_path, svn_boolean_t clean, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_recover", _wrap_svn_fs_recover, METH_VARARGS, (char *)"svn_fs_recover(char const * path, svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_freeze", _wrap_svn_fs_freeze, METH_VARARGS, (char *)"svn_fs_freeze(svn_fs_t * fs, svn_fs_freeze_func_t freeze_func, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_berkeley_logfiles", _wrap_svn_fs_berkeley_logfiles, METH_VARARGS, (char *)"svn_fs_berkeley_logfiles(char const * path, svn_boolean_t only_unused, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_new", _wrap_svn_fs_new, METH_VARARGS, (char *)"svn_fs_new(apr_hash_t fs_config, apr_pool_t pool) -> svn_fs_t *"},
+ { (char *)"svn_fs_create_berkeley", _wrap_svn_fs_create_berkeley, METH_VARARGS, (char *)"svn_fs_create_berkeley(svn_fs_t * fs, char const * path) -> svn_error_t"},
+ { (char *)"svn_fs_open_berkeley", _wrap_svn_fs_open_berkeley, METH_VARARGS, (char *)"svn_fs_open_berkeley(svn_fs_t * fs, char const * path) -> svn_error_t"},
+ { (char *)"svn_fs_berkeley_path", _wrap_svn_fs_berkeley_path, METH_VARARGS, (char *)"svn_fs_berkeley_path(svn_fs_t * fs, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_fs_delete_berkeley", _wrap_svn_fs_delete_berkeley, METH_VARARGS, (char *)"svn_fs_delete_berkeley(char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_hotcopy_berkeley", _wrap_svn_fs_hotcopy_berkeley, METH_VARARGS, (char *)"svn_fs_hotcopy_berkeley(char const * src_path, char const * dest_path, svn_boolean_t clean_logs, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_berkeley_recover", _wrap_svn_fs_berkeley_recover, METH_VARARGS, (char *)"svn_fs_berkeley_recover(char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_create_access", _wrap_svn_fs_create_access, METH_VARARGS, (char *)"svn_fs_create_access(char const * username, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_set_access", _wrap_svn_fs_set_access, METH_VARARGS, (char *)"svn_fs_set_access(svn_fs_t * fs, svn_fs_access_t * access_ctx) -> svn_error_t"},
+ { (char *)"svn_fs_get_access", _wrap_svn_fs_get_access, METH_VARARGS, (char *)"svn_fs_get_access(svn_fs_t * fs) -> svn_error_t"},
+ { (char *)"svn_fs_access_get_username", _wrap_svn_fs_access_get_username, METH_VARARGS, (char *)"svn_fs_access_get_username(svn_fs_access_t * access_ctx) -> svn_error_t"},
+ { (char *)"svn_fs_access_add_lock_token2", _wrap_svn_fs_access_add_lock_token2, METH_VARARGS, (char *)"svn_fs_access_add_lock_token2(svn_fs_access_t * access_ctx, char const * path, char const * token) -> svn_error_t"},
+ { (char *)"svn_fs_access_add_lock_token", _wrap_svn_fs_access_add_lock_token, METH_VARARGS, (char *)"svn_fs_access_add_lock_token(svn_fs_access_t * access_ctx, char const * token) -> svn_error_t"},
+ { (char *)"svn_fs_compare_ids", _wrap_svn_fs_compare_ids, METH_VARARGS, (char *)"svn_fs_compare_ids(svn_fs_id_t const * a, svn_fs_id_t const * b) -> int"},
+ { (char *)"svn_fs_check_related", _wrap_svn_fs_check_related, METH_VARARGS, (char *)"svn_fs_check_related(svn_fs_id_t const * id1, svn_fs_id_t const * id2) -> svn_boolean_t"},
+ { (char *)"svn_fs_parse_id", _wrap_svn_fs_parse_id, METH_VARARGS, (char *)"svn_fs_parse_id(char const * data, apr_pool_t pool) -> svn_fs_id_t *"},
+ { (char *)"svn_fs_unparse_id", _wrap_svn_fs_unparse_id, METH_VARARGS, (char *)"svn_fs_unparse_id(svn_fs_id_t const * id, apr_pool_t pool) -> svn_string_t *"},
+ { (char *)"svn_fs_begin_txn2", _wrap_svn_fs_begin_txn2, METH_VARARGS, (char *)"svn_fs_begin_txn2(svn_fs_t * fs, svn_revnum_t rev, apr_uint32_t flags, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_begin_txn", _wrap_svn_fs_begin_txn, METH_VARARGS, (char *)"svn_fs_begin_txn(svn_fs_t * fs, svn_revnum_t rev, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_commit_txn", _wrap_svn_fs_commit_txn, METH_VARARGS, (char *)"svn_fs_commit_txn(svn_fs_txn_t * txn, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_abort_txn", _wrap_svn_fs_abort_txn, METH_VARARGS, (char *)"svn_fs_abort_txn(svn_fs_txn_t * txn, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_purge_txn", _wrap_svn_fs_purge_txn, METH_VARARGS, (char *)"svn_fs_purge_txn(svn_fs_t * fs, char const * txn_id, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_txn_name", _wrap_svn_fs_txn_name, METH_VARARGS, (char *)"svn_fs_txn_name(svn_fs_txn_t * txn, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_txn_base_revision", _wrap_svn_fs_txn_base_revision, METH_VARARGS, (char *)"svn_fs_txn_base_revision(svn_fs_txn_t * txn) -> svn_revnum_t"},
+ { (char *)"svn_fs_open_txn", _wrap_svn_fs_open_txn, METH_VARARGS, (char *)"svn_fs_open_txn(svn_fs_t * fs, char const * name, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_list_transactions", _wrap_svn_fs_list_transactions, METH_VARARGS, (char *)"svn_fs_list_transactions(svn_fs_t * fs, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_txn_prop", _wrap_svn_fs_txn_prop, METH_VARARGS, (char *)"svn_fs_txn_prop(svn_fs_txn_t * txn, char const * propname, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_txn_proplist", _wrap_svn_fs_txn_proplist, METH_VARARGS, (char *)"svn_fs_txn_proplist(svn_fs_txn_t * txn, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_change_txn_prop", _wrap_svn_fs_change_txn_prop, METH_VARARGS, (char *)"svn_fs_change_txn_prop(svn_fs_txn_t * txn, char const * name, svn_string_t const * value, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_change_txn_props", _wrap_svn_fs_change_txn_props, METH_VARARGS, (char *)"svn_fs_change_txn_props(svn_fs_txn_t * txn, apr_array_header_t props, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_revision_root", _wrap_svn_fs_revision_root, METH_VARARGS, (char *)"svn_fs_revision_root(svn_fs_t * fs, svn_revnum_t rev, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_txn_root", _wrap_svn_fs_txn_root, METH_VARARGS, (char *)"svn_fs_txn_root(svn_fs_txn_t * txn, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_close_root", _wrap_svn_fs_close_root, METH_VARARGS, (char *)"svn_fs_close_root(svn_fs_root_t * root)"},
+ { (char *)"svn_fs_root_fs", _wrap_svn_fs_root_fs, METH_VARARGS, (char *)"svn_fs_root_fs(svn_fs_root_t * root) -> svn_fs_t *"},
+ { (char *)"svn_fs_is_txn_root", _wrap_svn_fs_is_txn_root, METH_VARARGS, (char *)"svn_fs_is_txn_root(svn_fs_root_t * root) -> svn_boolean_t"},
+ { (char *)"svn_fs_is_revision_root", _wrap_svn_fs_is_revision_root, METH_VARARGS, (char *)"svn_fs_is_revision_root(svn_fs_root_t * root) -> svn_boolean_t"},
+ { (char *)"svn_fs_txn_root_name", _wrap_svn_fs_txn_root_name, METH_VARARGS, (char *)"svn_fs_txn_root_name(svn_fs_root_t * root, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_fs_txn_root_base_revision", _wrap_svn_fs_txn_root_base_revision, METH_VARARGS, (char *)"svn_fs_txn_root_base_revision(svn_fs_root_t * root) -> svn_revnum_t"},
+ { (char *)"svn_fs_revision_root_revision", _wrap_svn_fs_revision_root_revision, METH_VARARGS, (char *)"svn_fs_revision_root_revision(svn_fs_root_t * root) -> svn_revnum_t"},
+ { (char *)"svn_fs_path_change2_t_node_rev_id_set", _wrap_svn_fs_path_change2_t_node_rev_id_set, METH_VARARGS, (char *)"svn_fs_path_change2_t_node_rev_id_set(svn_fs_path_change2_t self, svn_fs_id_t const * node_rev_id)"},
+ { (char *)"svn_fs_path_change2_t_node_rev_id_get", _wrap_svn_fs_path_change2_t_node_rev_id_get, METH_VARARGS, (char *)"svn_fs_path_change2_t_node_rev_id_get(svn_fs_path_change2_t self) -> svn_fs_id_t const *"},
{ (char *)"svn_fs_path_change2_t_change_kind_set", _wrap_svn_fs_path_change2_t_change_kind_set, METH_VARARGS, (char *)"svn_fs_path_change2_t_change_kind_set(svn_fs_path_change2_t self, svn_fs_path_change_kind_t change_kind)"},
{ (char *)"svn_fs_path_change2_t_change_kind_get", _wrap_svn_fs_path_change2_t_change_kind_get, METH_VARARGS, (char *)"svn_fs_path_change2_t_change_kind_get(svn_fs_path_change2_t self) -> svn_fs_path_change_kind_t"},
{ (char *)"svn_fs_path_change2_t_text_mod_set", _wrap_svn_fs_path_change2_t_text_mod_set, METH_VARARGS, (char *)"svn_fs_path_change2_t_text_mod_set(svn_fs_path_change2_t self, svn_boolean_t text_mod)"},
@@ -11136,11 +11958,11 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_fs_path_change2_t_copyfrom_known_get", _wrap_svn_fs_path_change2_t_copyfrom_known_get, METH_VARARGS, (char *)"svn_fs_path_change2_t_copyfrom_known_get(svn_fs_path_change2_t self) -> svn_boolean_t"},
{ (char *)"svn_fs_path_change2_t_copyfrom_rev_set", _wrap_svn_fs_path_change2_t_copyfrom_rev_set, METH_VARARGS, (char *)"svn_fs_path_change2_t_copyfrom_rev_set(svn_fs_path_change2_t self, svn_revnum_t copyfrom_rev)"},
{ (char *)"svn_fs_path_change2_t_copyfrom_rev_get", _wrap_svn_fs_path_change2_t_copyfrom_rev_get, METH_VARARGS, (char *)"svn_fs_path_change2_t_copyfrom_rev_get(svn_fs_path_change2_t self) -> svn_revnum_t"},
- { (char *)"svn_fs_path_change2_t_copyfrom_path_set", _wrap_svn_fs_path_change2_t_copyfrom_path_set, METH_VARARGS, (char *)"svn_fs_path_change2_t_copyfrom_path_set(svn_fs_path_change2_t self, char copyfrom_path)"},
- { (char *)"svn_fs_path_change2_t_copyfrom_path_get", _wrap_svn_fs_path_change2_t_copyfrom_path_get, METH_VARARGS, (char *)"svn_fs_path_change2_t_copyfrom_path_get(svn_fs_path_change2_t self) -> char"},
+ { (char *)"svn_fs_path_change2_t_copyfrom_path_set", _wrap_svn_fs_path_change2_t_copyfrom_path_set, METH_VARARGS, (char *)"svn_fs_path_change2_t_copyfrom_path_set(svn_fs_path_change2_t self, char const * copyfrom_path)"},
+ { (char *)"svn_fs_path_change2_t_copyfrom_path_get", _wrap_svn_fs_path_change2_t_copyfrom_path_get, METH_VARARGS, (char *)"svn_fs_path_change2_t_copyfrom_path_get(svn_fs_path_change2_t self) -> char const *"},
{ (char *)"svn_fs_path_change2_t_swigregister", svn_fs_path_change2_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_fs_path_change_t_node_rev_id_set", _wrap_svn_fs_path_change_t_node_rev_id_set, METH_VARARGS, (char *)"svn_fs_path_change_t_node_rev_id_set(svn_fs_path_change_t self, svn_fs_id_t node_rev_id)"},
- { (char *)"svn_fs_path_change_t_node_rev_id_get", _wrap_svn_fs_path_change_t_node_rev_id_get, METH_VARARGS, (char *)"svn_fs_path_change_t_node_rev_id_get(svn_fs_path_change_t self) -> svn_fs_id_t"},
+ { (char *)"svn_fs_path_change_t_node_rev_id_set", _wrap_svn_fs_path_change_t_node_rev_id_set, METH_VARARGS, (char *)"svn_fs_path_change_t_node_rev_id_set(svn_fs_path_change_t self, svn_fs_id_t const * node_rev_id)"},
+ { (char *)"svn_fs_path_change_t_node_rev_id_get", _wrap_svn_fs_path_change_t_node_rev_id_get, METH_VARARGS, (char *)"svn_fs_path_change_t_node_rev_id_get(svn_fs_path_change_t self) -> svn_fs_id_t const *"},
{ (char *)"svn_fs_path_change_t_change_kind_set", _wrap_svn_fs_path_change_t_change_kind_set, METH_VARARGS, (char *)"svn_fs_path_change_t_change_kind_set(svn_fs_path_change_t self, svn_fs_path_change_kind_t change_kind)"},
{ (char *)"svn_fs_path_change_t_change_kind_get", _wrap_svn_fs_path_change_t_change_kind_get, METH_VARARGS, (char *)"svn_fs_path_change_t_change_kind_get(svn_fs_path_change_t self) -> svn_fs_path_change_kind_t"},
{ (char *)"svn_fs_path_change_t_text_mod_set", _wrap_svn_fs_path_change_t_text_mod_set, METH_VARARGS, (char *)"svn_fs_path_change_t_text_mod_set(svn_fs_path_change_t self, svn_boolean_t text_mod)"},
@@ -11148,145 +11970,142 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_fs_path_change_t_prop_mod_set", _wrap_svn_fs_path_change_t_prop_mod_set, METH_VARARGS, (char *)"svn_fs_path_change_t_prop_mod_set(svn_fs_path_change_t self, svn_boolean_t prop_mod)"},
{ (char *)"svn_fs_path_change_t_prop_mod_get", _wrap_svn_fs_path_change_t_prop_mod_get, METH_VARARGS, (char *)"svn_fs_path_change_t_prop_mod_get(svn_fs_path_change_t self) -> svn_boolean_t"},
{ (char *)"svn_fs_path_change_t_swigregister", svn_fs_path_change_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_fs_path_change2_create", _wrap_svn_fs_path_change2_create, METH_VARARGS, (char *)"\n"
- "svn_fs_path_change2_create(svn_fs_id_t node_rev_id, svn_fs_path_change_kind_t change_kind, \n"
- " apr_pool_t pool) -> svn_fs_path_change2_t\n"
- ""},
- { (char *)"svn_fs_paths_changed2", _wrap_svn_fs_paths_changed2, METH_VARARGS, (char *)"svn_fs_paths_changed2(svn_fs_root_t root, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_paths_changed", _wrap_svn_fs_paths_changed, METH_VARARGS, (char *)"svn_fs_paths_changed(svn_fs_root_t root, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_check_path", _wrap_svn_fs_check_path, METH_VARARGS, (char *)"svn_fs_check_path(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_node_history", _wrap_svn_fs_node_history, METH_VARARGS, (char *)"svn_fs_node_history(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_history_prev", _wrap_svn_fs_history_prev, METH_VARARGS, (char *)"\n"
- "svn_fs_history_prev(svn_fs_history_t history, svn_boolean_t cross_copies, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_fs_history_location", _wrap_svn_fs_history_location, METH_VARARGS, (char *)"svn_fs_history_location(svn_fs_history_t history, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_is_dir", _wrap_svn_fs_is_dir, METH_VARARGS, (char *)"svn_fs_is_dir(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_is_file", _wrap_svn_fs_is_file, METH_VARARGS, (char *)"svn_fs_is_file(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_node_id", _wrap_svn_fs_node_id, METH_VARARGS, (char *)"svn_fs_node_id(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_node_created_rev", _wrap_svn_fs_node_created_rev, METH_VARARGS, (char *)"svn_fs_node_created_rev(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_node_origin_rev", _wrap_svn_fs_node_origin_rev, METH_VARARGS, (char *)"svn_fs_node_origin_rev(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_node_created_path", _wrap_svn_fs_node_created_path, METH_VARARGS, (char *)"svn_fs_node_created_path(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_node_prop", _wrap_svn_fs_node_prop, METH_VARARGS, (char *)"svn_fs_node_prop(svn_fs_root_t root, char path, char propname, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_node_proplist", _wrap_svn_fs_node_proplist, METH_VARARGS, (char *)"svn_fs_node_proplist(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_path_change2_create", _wrap_svn_fs_path_change2_create, METH_VARARGS, (char *)"svn_fs_path_change2_create(svn_fs_id_t const * node_rev_id, svn_fs_path_change_kind_t change_kind, apr_pool_t pool) -> svn_fs_path_change2_t"},
+ { (char *)"svn_fs_paths_changed2", _wrap_svn_fs_paths_changed2, METH_VARARGS, (char *)"svn_fs_paths_changed2(svn_fs_root_t * root, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_paths_changed", _wrap_svn_fs_paths_changed, METH_VARARGS, (char *)"svn_fs_paths_changed(svn_fs_root_t * root, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_check_path", _wrap_svn_fs_check_path, METH_VARARGS, (char *)"svn_fs_check_path(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_node_history", _wrap_svn_fs_node_history, METH_VARARGS, (char *)"svn_fs_node_history(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_history_prev", _wrap_svn_fs_history_prev, METH_VARARGS, (char *)"svn_fs_history_prev(svn_fs_history_t * history, svn_boolean_t cross_copies, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_history_location", _wrap_svn_fs_history_location, METH_VARARGS, (char *)"svn_fs_history_location(svn_fs_history_t * history, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_is_dir", _wrap_svn_fs_is_dir, METH_VARARGS, (char *)"svn_fs_is_dir(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_is_file", _wrap_svn_fs_is_file, METH_VARARGS, (char *)"svn_fs_is_file(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_node_id", _wrap_svn_fs_node_id, METH_VARARGS, (char *)"svn_fs_node_id(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_node_created_rev", _wrap_svn_fs_node_created_rev, METH_VARARGS, (char *)"svn_fs_node_created_rev(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_node_origin_rev", _wrap_svn_fs_node_origin_rev, METH_VARARGS, (char *)"svn_fs_node_origin_rev(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_node_created_path", _wrap_svn_fs_node_created_path, METH_VARARGS, (char *)"svn_fs_node_created_path(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_node_prop", _wrap_svn_fs_node_prop, METH_VARARGS, (char *)"svn_fs_node_prop(svn_fs_root_t * root, char const * path, char const * propname, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_node_proplist", _wrap_svn_fs_node_proplist, METH_VARARGS, (char *)"svn_fs_node_proplist(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_fs_change_node_prop", _wrap_svn_fs_change_node_prop, METH_VARARGS, (char *)"\n"
- "svn_fs_change_node_prop(svn_fs_root_t root, char path, char name, svn_string_t value, \n"
+ "svn_fs_change_node_prop(svn_fs_root_t * root, char const * path, char const * name, svn_string_t const * value, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_fs_props_changed", _wrap_svn_fs_props_changed, METH_VARARGS, (char *)"\n"
- "svn_fs_props_changed(svn_fs_root_t root1, char path1, svn_fs_root_t root2, \n"
- " char path2, apr_pool_t pool) -> svn_error_t\n"
+ "svn_fs_props_changed(svn_fs_root_t * root1, char const * path1, svn_fs_root_t * root2, char const * path2, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
+ ""},
+ { (char *)"svn_fs_copied_from", _wrap_svn_fs_copied_from, METH_VARARGS, (char *)"svn_fs_copied_from(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_closest_copy", _wrap_svn_fs_closest_copy, METH_VARARGS, (char *)"svn_fs_closest_copy(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_get_mergeinfo2", _wrap_svn_fs_get_mergeinfo2, METH_VARARGS, (char *)"\n"
+ "svn_fs_get_mergeinfo2(svn_fs_root_t * root, apr_array_header_t paths, svn_mergeinfo_inheritance_t inherit, \n"
+ " svn_boolean_t include_descendants, svn_boolean_t adjust_inherited_mergeinfo, \n"
+ " apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
- { (char *)"svn_fs_copied_from", _wrap_svn_fs_copied_from, METH_VARARGS, (char *)"svn_fs_copied_from(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_closest_copy", _wrap_svn_fs_closest_copy, METH_VARARGS, (char *)"svn_fs_closest_copy(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_fs_get_mergeinfo", _wrap_svn_fs_get_mergeinfo, METH_VARARGS, (char *)"\n"
- "svn_fs_get_mergeinfo(svn_fs_root_t root, apr_array_header_t paths, svn_mergeinfo_inheritance_t inherit, \n"
- " svn_boolean_t include_descendants, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_fs_get_mergeinfo(svn_fs_root_t * root, apr_array_header_t paths, svn_mergeinfo_inheritance_t inherit, \n"
+ " svn_boolean_t include_descendants, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_fs_merge", _wrap_svn_fs_merge, METH_VARARGS, (char *)"\n"
- "svn_fs_merge(svn_fs_root_t source_root, char source_path, svn_fs_root_t target_root, \n"
- " char target_path, svn_fs_root_t ancestor_root, \n"
- " char ancestor_path, apr_pool_t pool) -> svn_error_t\n"
+ "svn_fs_merge(svn_fs_root_t * source_root, char const * source_path, svn_fs_root_t * target_root, \n"
+ " char const * target_path, svn_fs_root_t * ancestor_root, char const * ancestor_path, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_fs_dirent_t_name_set", _wrap_svn_fs_dirent_t_name_set, METH_VARARGS, (char *)"svn_fs_dirent_t_name_set(svn_fs_dirent_t self, char name)"},
- { (char *)"svn_fs_dirent_t_name_get", _wrap_svn_fs_dirent_t_name_get, METH_VARARGS, (char *)"svn_fs_dirent_t_name_get(svn_fs_dirent_t self) -> char"},
- { (char *)"svn_fs_dirent_t_id_set", _wrap_svn_fs_dirent_t_id_set, METH_VARARGS, (char *)"svn_fs_dirent_t_id_set(svn_fs_dirent_t self, svn_fs_id_t id)"},
- { (char *)"svn_fs_dirent_t_id_get", _wrap_svn_fs_dirent_t_id_get, METH_VARARGS, (char *)"svn_fs_dirent_t_id_get(svn_fs_dirent_t self) -> svn_fs_id_t"},
+ { (char *)"svn_fs_dirent_t_name_set", _wrap_svn_fs_dirent_t_name_set, METH_VARARGS, (char *)"svn_fs_dirent_t_name_set(svn_fs_dirent_t self, char const * name)"},
+ { (char *)"svn_fs_dirent_t_name_get", _wrap_svn_fs_dirent_t_name_get, METH_VARARGS, (char *)"svn_fs_dirent_t_name_get(svn_fs_dirent_t self) -> char const *"},
+ { (char *)"svn_fs_dirent_t_id_set", _wrap_svn_fs_dirent_t_id_set, METH_VARARGS, (char *)"svn_fs_dirent_t_id_set(svn_fs_dirent_t self, svn_fs_id_t const * id)"},
+ { (char *)"svn_fs_dirent_t_id_get", _wrap_svn_fs_dirent_t_id_get, METH_VARARGS, (char *)"svn_fs_dirent_t_id_get(svn_fs_dirent_t self) -> svn_fs_id_t const *"},
{ (char *)"svn_fs_dirent_t_kind_set", _wrap_svn_fs_dirent_t_kind_set, METH_VARARGS, (char *)"svn_fs_dirent_t_kind_set(svn_fs_dirent_t self, svn_node_kind_t kind)"},
{ (char *)"svn_fs_dirent_t_kind_get", _wrap_svn_fs_dirent_t_kind_get, METH_VARARGS, (char *)"svn_fs_dirent_t_kind_get(svn_fs_dirent_t self) -> svn_node_kind_t"},
{ (char *)"svn_fs_dirent_t_swigregister", svn_fs_dirent_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_fs_dir_entries", _wrap_svn_fs_dir_entries, METH_VARARGS, (char *)"svn_fs_dir_entries(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_make_dir", _wrap_svn_fs_make_dir, METH_VARARGS, (char *)"svn_fs_make_dir(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_delete", _wrap_svn_fs_delete, METH_VARARGS, (char *)"svn_fs_delete(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_dir_entries", _wrap_svn_fs_dir_entries, METH_VARARGS, (char *)"svn_fs_dir_entries(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_make_dir", _wrap_svn_fs_make_dir, METH_VARARGS, (char *)"svn_fs_make_dir(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_delete", _wrap_svn_fs_delete, METH_VARARGS, (char *)"svn_fs_delete(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_fs_copy", _wrap_svn_fs_copy, METH_VARARGS, (char *)"\n"
- "svn_fs_copy(svn_fs_root_t from_root, char from_path, svn_fs_root_t to_root, \n"
- " char to_path, apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_fs_revision_link", _wrap_svn_fs_revision_link, METH_VARARGS, (char *)"\n"
- "svn_fs_revision_link(svn_fs_root_t from_root, svn_fs_root_t to_root, char path, \n"
+ "svn_fs_copy(svn_fs_root_t * from_root, char const * from_path, svn_fs_root_t * to_root, char const * to_path, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_fs_file_length", _wrap_svn_fs_file_length, METH_VARARGS, (char *)"svn_fs_file_length(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_revision_link", _wrap_svn_fs_revision_link, METH_VARARGS, (char *)"svn_fs_revision_link(svn_fs_root_t * from_root, svn_fs_root_t * to_root, char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_file_length", _wrap_svn_fs_file_length, METH_VARARGS, (char *)"svn_fs_file_length(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_fs_file_checksum", _wrap_svn_fs_file_checksum, METH_VARARGS, (char *)"\n"
- "svn_fs_file_checksum(svn_checksum_kind_t kind, svn_fs_root_t root, char path, \n"
- " svn_boolean_t force, apr_pool_t pool) -> svn_error_t\n"
+ "svn_fs_file_checksum(svn_checksum_kind_t kind, svn_fs_root_t * root, char const * path, svn_boolean_t force, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_fs_file_md5_checksum", _wrap_svn_fs_file_md5_checksum, METH_VARARGS, (char *)"svn_fs_file_md5_checksum(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_file_contents", _wrap_svn_fs_file_contents, METH_VARARGS, (char *)"svn_fs_file_contents(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_make_file", _wrap_svn_fs_make_file, METH_VARARGS, (char *)"svn_fs_make_file(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_apply_textdelta", _wrap_svn_fs_apply_textdelta, METH_VARARGS, (char *)"\n"
- "svn_fs_apply_textdelta(svn_fs_root_t root, char path, char base_checksum, \n"
- " char result_checksum, apr_pool_t pool) -> svn_error_t\n"
+ { (char *)"svn_fs_file_md5_checksum", _wrap_svn_fs_file_md5_checksum, METH_VARARGS, (char *)"svn_fs_file_md5_checksum(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_file_contents", _wrap_svn_fs_file_contents, METH_VARARGS, (char *)"svn_fs_file_contents(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_try_process_file_contents", _wrap_svn_fs_try_process_file_contents, METH_VARARGS, (char *)"\n"
+ "svn_fs_try_process_file_contents(svn_fs_root_t * root, char const * path, svn_fs_process_contents_func_t processor, \n"
+ " void * baton, apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_fs_apply_text", _wrap_svn_fs_apply_text, METH_VARARGS, (char *)"\n"
- "svn_fs_apply_text(svn_fs_root_t root, char path, char result_checksum, \n"
+ { (char *)"svn_fs_make_file", _wrap_svn_fs_make_file, METH_VARARGS, (char *)"svn_fs_make_file(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_apply_textdelta", _wrap_svn_fs_apply_textdelta, METH_VARARGS, (char *)"\n"
+ "svn_fs_apply_textdelta(svn_fs_root_t * root, char const * path, char const * base_checksum, char const * result_checksum, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_fs_apply_text", _wrap_svn_fs_apply_text, METH_VARARGS, (char *)"svn_fs_apply_text(svn_fs_root_t * root, char const * path, char const * result_checksum, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_fs_contents_changed", _wrap_svn_fs_contents_changed, METH_VARARGS, (char *)"\n"
- "svn_fs_contents_changed(svn_fs_root_t root1, char path1, svn_fs_root_t root2, \n"
- " char path2, apr_pool_t pool) -> svn_error_t\n"
+ "svn_fs_contents_changed(svn_fs_root_t * root1, char const * path1, svn_fs_root_t * root2, char const * path2, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_fs_youngest_rev", _wrap_svn_fs_youngest_rev, METH_VARARGS, (char *)"svn_fs_youngest_rev(svn_fs_t fs, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_deltify_revision", _wrap_svn_fs_deltify_revision, METH_VARARGS, (char *)"svn_fs_deltify_revision(svn_fs_t fs, svn_revnum_t revision, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_revision_prop", _wrap_svn_fs_revision_prop, METH_VARARGS, (char *)"svn_fs_revision_prop(svn_fs_t fs, svn_revnum_t rev, char propname, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_revision_proplist", _wrap_svn_fs_revision_proplist, METH_VARARGS, (char *)"svn_fs_revision_proplist(svn_fs_t fs, svn_revnum_t rev, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_youngest_rev", _wrap_svn_fs_youngest_rev, METH_VARARGS, (char *)"svn_fs_youngest_rev(svn_fs_t * fs, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_deltify_revision", _wrap_svn_fs_deltify_revision, METH_VARARGS, (char *)"svn_fs_deltify_revision(svn_fs_t * fs, svn_revnum_t revision, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_revision_prop", _wrap_svn_fs_revision_prop, METH_VARARGS, (char *)"svn_fs_revision_prop(svn_fs_t * fs, svn_revnum_t rev, char const * propname, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_revision_proplist", _wrap_svn_fs_revision_proplist, METH_VARARGS, (char *)"svn_fs_revision_proplist(svn_fs_t * fs, svn_revnum_t rev, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_fs_change_rev_prop2", _wrap_svn_fs_change_rev_prop2, METH_VARARGS, (char *)"\n"
- "svn_fs_change_rev_prop2(svn_fs_t fs, svn_revnum_t rev, char name, svn_string_t old_value_p, \n"
- " svn_string_t value, apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_fs_change_rev_prop", _wrap_svn_fs_change_rev_prop, METH_VARARGS, (char *)"\n"
- "svn_fs_change_rev_prop(svn_fs_t fs, svn_revnum_t rev, char name, svn_string_t value, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_fs_change_rev_prop2(svn_fs_t * fs, svn_revnum_t rev, char const * name, svn_string_t const *const * old_value_p, \n"
+ " svn_string_t const * value, apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_fs_change_rev_prop", _wrap_svn_fs_change_rev_prop, METH_VARARGS, (char *)"svn_fs_change_rev_prop(svn_fs_t * fs, svn_revnum_t rev, char const * name, svn_string_t const * value, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_fs_get_file_delta_stream", _wrap_svn_fs_get_file_delta_stream, METH_VARARGS, (char *)"\n"
- "svn_fs_get_file_delta_stream(svn_fs_root_t source_root, char source_path, svn_fs_root_t target_root, \n"
- " char target_path, apr_pool_t pool) -> svn_error_t\n"
+ "svn_fs_get_file_delta_stream(svn_fs_root_t * source_root, char const * source_path, svn_fs_root_t * target_root, \n"
+ " char const * target_path, apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_fs_get_uuid", _wrap_svn_fs_get_uuid, METH_VARARGS, (char *)"svn_fs_get_uuid(svn_fs_t fs, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_set_uuid", _wrap_svn_fs_set_uuid, METH_VARARGS, (char *)"svn_fs_set_uuid(svn_fs_t fs, char uuid, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_get_uuid", _wrap_svn_fs_get_uuid, METH_VARARGS, (char *)"svn_fs_get_uuid(svn_fs_t * fs, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_set_uuid", _wrap_svn_fs_set_uuid, METH_VARARGS, (char *)"svn_fs_set_uuid(svn_fs_t * fs, char const * uuid, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_fs_lock", _wrap_svn_fs_lock, METH_VARARGS, (char *)"\n"
- "svn_fs_lock(svn_fs_t fs, char path, char token, char comment, svn_boolean_t is_dav_comment, \n"
- " apr_time_t expiration_date, \n"
- " svn_revnum_t current_rev, svn_boolean_t steal_lock, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_fs_generate_lock_token", _wrap_svn_fs_generate_lock_token, METH_VARARGS, (char *)"svn_fs_generate_lock_token(svn_fs_t fs, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_fs_unlock", _wrap_svn_fs_unlock, METH_VARARGS, (char *)"\n"
- "svn_fs_unlock(svn_fs_t fs, char path, char token, svn_boolean_t break_lock, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_fs_lock(svn_fs_t * fs, char const * path, char const * token, char const * comment, svn_boolean_t is_dav_comment, \n"
+ " apr_time_t expiration_date, svn_revnum_t current_rev, \n"
+ " svn_boolean_t steal_lock, apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_fs_get_lock", _wrap_svn_fs_get_lock, METH_VARARGS, (char *)"svn_fs_get_lock(svn_fs_t fs, char path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_generate_lock_token", _wrap_svn_fs_generate_lock_token, METH_VARARGS, (char *)"svn_fs_generate_lock_token(svn_fs_t * fs, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_unlock", _wrap_svn_fs_unlock, METH_VARARGS, (char *)"svn_fs_unlock(svn_fs_t * fs, char const * path, char const * token, svn_boolean_t break_lock, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_get_lock", _wrap_svn_fs_get_lock, METH_VARARGS, (char *)"svn_fs_get_lock(svn_fs_t * fs, char const * path, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_fs_get_locks2", _wrap_svn_fs_get_locks2, METH_VARARGS, (char *)"\n"
- "svn_fs_get_locks2(svn_fs_t fs, char path, svn_depth_t depth, svn_fs_get_locks_callback_t get_locks_func, \n"
+ "svn_fs_get_locks2(svn_fs_t * fs, char const * path, svn_depth_t depth, svn_fs_get_locks_callback_t get_locks_func, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_fs_get_locks", _wrap_svn_fs_get_locks, METH_VARARGS, (char *)"\n"
- "svn_fs_get_locks(svn_fs_t fs, char path, svn_fs_get_locks_callback_t get_locks_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_fs_print_modules", _wrap_svn_fs_print_modules, METH_VARARGS, (char *)"svn_fs_print_modules(svn_stringbuf_t output, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_get_locks", _wrap_svn_fs_get_locks, METH_VARARGS, (char *)"svn_fs_get_locks(svn_fs_t * fs, char const * path, svn_fs_get_locks_callback_t get_locks_func, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_print_modules", _wrap_svn_fs_print_modules, METH_VARARGS, (char *)"svn_fs_print_modules(svn_stringbuf_t * output, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_fs_pack", _wrap_svn_fs_pack, METH_VARARGS, (char *)"\n"
- "svn_fs_pack(char db_path, svn_fs_pack_notify_t notify_func, void notify_baton, \n"
- " svn_cancel_func_t cancel_func, \n"
+ "svn_fs_pack(char const * db_path, svn_fs_pack_notify_t notify_func, void * notify_baton, svn_cancel_func_t cancel_func, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_fs_verify", _wrap_svn_fs_verify, METH_VARARGS, (char *)"\n"
+ "svn_fs_verify(char const * path, apr_hash_t fs_config, svn_revnum_t start, svn_revnum_t end, svn_fs_progress_notify_func_t notify_func, \n"
+ " void * notify_baton, svn_cancel_func_t cancel_func, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
+ ""},
+ { (char *)"svn_fs_verify_root", _wrap_svn_fs_verify_root, METH_VARARGS, (char *)"svn_fs_verify_root(svn_fs_root_t * root, apr_pool_t scratch_pool) -> svn_error_t"},
{ (char *)"svn_fs_t_swigregister", svn_fs_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_fs_access_t_swigregister", svn_fs_access_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_fs_id_t_swigregister", svn_fs_id_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_fs_txn_t_swigregister", svn_fs_txn_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_fs_root_t_swigregister", svn_fs_root_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_fs_history_t_swigregister", svn_fs_history_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_fs_invoke_warning_callback", _wrap_svn_fs_invoke_warning_callback, METH_VARARGS, (char *)"svn_fs_invoke_warning_callback(svn_fs_warning_callback_t _obj, void baton, svn_error_t err)"},
- { (char *)"svn_fs_invoke_get_locks_callback", _wrap_svn_fs_invoke_get_locks_callback, METH_VARARGS, (char *)"\n"
- "svn_fs_invoke_get_locks_callback(svn_fs_get_locks_callback_t _obj, void baton, svn_lock_t lock, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ { (char *)"svn_fs_invoke_warning_callback", _wrap_svn_fs_invoke_warning_callback, METH_VARARGS, (char *)"svn_fs_invoke_warning_callback(svn_fs_warning_callback_t _obj, void * baton, svn_error_t err)"},
+ { (char *)"svn_fs_invoke_progress_notify_func", _wrap_svn_fs_invoke_progress_notify_func, METH_VARARGS, (char *)"svn_fs_invoke_progress_notify_func(svn_fs_progress_notify_func_t _obj, svn_revnum_t revision, void * baton, apr_pool_t pool)"},
+ { (char *)"svn_fs_invoke_freeze_func", _wrap_svn_fs_invoke_freeze_func, METH_VARARGS, (char *)"svn_fs_invoke_freeze_func(svn_fs_freeze_func_t _obj, void * baton, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_fs_invoke_process_contents_func", _wrap_svn_fs_invoke_process_contents_func, METH_VARARGS, (char *)"\n"
+ "svn_fs_invoke_process_contents_func(svn_fs_process_contents_func_t _obj, unsigned char const * contents, apr_size_t len, \n"
+ " void * baton, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
+ { (char *)"svn_fs_invoke_get_locks_callback", _wrap_svn_fs_invoke_get_locks_callback, METH_VARARGS, (char *)"svn_fs_invoke_get_locks_callback(svn_fs_get_locks_callback_t _obj, void * baton, svn_lock_t lock, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_fs_invoke_pack_notify", _wrap_svn_fs_invoke_pack_notify, METH_VARARGS, (char *)"\n"
- "svn_fs_invoke_pack_notify(svn_fs_pack_notify_t _obj, void baton, apr_int64_t shard, \n"
- " svn_fs_pack_notify_action_t action, apr_pool_t pool) -> svn_error_t\n"
+ "svn_fs_invoke_pack_notify(svn_fs_pack_notify_t _obj, void * baton, apr_int64_t shard, svn_fs_pack_notify_action_t action, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_fs_warning_callback_t_swigregister", svn_fs_warning_callback_t_swigregister, METH_VARARGS, NULL},
+ { (char *)"svn_fs_progress_notify_func_t_swigregister", svn_fs_progress_notify_func_t_swigregister, METH_VARARGS, NULL},
+ { (char *)"svn_fs_freeze_func_t_swigregister", svn_fs_freeze_func_t_swigregister, METH_VARARGS, NULL},
+ { (char *)"svn_fs_process_contents_func_t_swigregister", svn_fs_process_contents_func_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_fs_get_locks_callback_t_swigregister", svn_fs_get_locks_callback_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_fs_pack_notify_t_swigregister", svn_fs_pack_notify_t_swigregister, METH_VARARGS, NULL},
{ NULL, NULL, 0, NULL }
@@ -11295,15 +12114,18 @@ static PyMethodDef SwigMethods[] = {
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
-static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *|svn_rangelist_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_hash_t = {"_p_apr_hash_t", "apr_hash_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int32_t = {"_p_apr_int32_t", "apr_int32_t *|time_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int64_t = {"_p_apr_int64_t", "apr_int64_t *|svn_filesize_t *|apr_time_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_pool_t = {"_p_apr_pool_t", "apr_pool_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_long_p_void_p_apr_pool_t__void = {"_p_f_long_p_void_p_apr_pool_t__void", "void (*)(long,void *,apr_pool_t *)|svn_fs_progress_notify_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_opt_subcommand_t *|struct svn_error_t *(*)(apr_getopt_t *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_fs_process_contents_func_t|struct svn_error_t *(*)(unsigned char const *,apr_size_t,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void__p_svn_error_t = {"_p_f_p_void__p_svn_error_t", "svn_cancel_func_t|struct svn_error_t *(*)(void *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,apr_int64_t,svn_fs_pack_notify_action_t,apr_pool_t *)|svn_fs_pack_notify_t", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,apr_pool_t *)|svn_fs_freeze_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_struct_svn_error_t__void = {"_p_f_p_void_p_struct_svn_error_t__void", "void (*)(void *,struct svn_error_t *)|svn_fs_warning_callback_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,svn_lock_t *,apr_pool_t *)|svn_fs_get_locks_callback_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_int = {"_p_int", "int *|svn_boolean_t *|apr_status_t *", 0, 0, (void*)0, 0};
@@ -11311,11 +12133,14 @@ static swig_type_info _swigt__p_long = {"_p_long", "long *|svn_revnum_t *", 0, 0
static swig_type_info _swigt__p_p_apr_array_header_t = {"_p_p_apr_array_header_t", "apr_array_header_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_apr_hash_t = {"_p_p_apr_hash_t", "apr_hash_t **|svn_mergeinfo_catalog_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_f_long_p_void_p_apr_pool_t__void = {"_p_p_f_long_p_void_p_apr_pool_t__void", "void (**)(long,void *,apr_pool_t *)|svn_fs_progress_notify_func_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(unsigned char const *,apr_size_t,void *,apr_pool_t *)|svn_fs_process_contents_func_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t = {"_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t", "svn_txdelta_window_handler_t *|struct svn_error_t *(**)(svn_txdelta_window_t *,void *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(void *,apr_int64_t,svn_fs_pack_notify_action_t,apr_pool_t *)|svn_fs_pack_notify_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_f_p_void_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(void *,apr_pool_t *)|svn_fs_freeze_func_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_p_struct_svn_error_t__void = {"_p_p_f_p_void_p_struct_svn_error_t__void", "void (**)(void *,struct svn_error_t *)|svn_fs_warning_callback_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t", "svn_fs_get_locks_callback_t *|struct svn_error_t *(**)(void *,svn_lock_t *,apr_pool_t *)", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_p_svn_checksum_t = {"_p_p_svn_checksum_t", "svn_checksum_t **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_svn_checksum_t = {"_p_p_svn_checksum_t", "struct svn_checksum_t **|svn_checksum_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_fs_access_t = {"_p_p_svn_fs_access_t", "struct svn_fs_access_t **|svn_fs_access_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_fs_history_t = {"_p_p_svn_fs_history_t", "struct svn_fs_history_t **|svn_fs_history_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_fs_id_t = {"_p_p_svn_fs_id_t", "struct svn_fs_id_t **|svn_fs_id_t **", 0, 0, (void*)0, 0};
@@ -11337,7 +12162,9 @@ static swig_type_info _swigt__p_svn_auth_iterstate_t = {"_p_svn_auth_iterstate_t
static swig_type_info _swigt__p_svn_auth_provider_object_t = {"_p_svn_auth_provider_object_t", "struct svn_auth_provider_object_t *|svn_auth_provider_object_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_provider_t = {"_p_svn_auth_provider_t", "struct svn_auth_provider_t *|svn_auth_provider_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_ssl_server_cert_info_t = {"_p_svn_auth_ssl_server_cert_info_t", "struct svn_auth_ssl_server_cert_info_t *|svn_auth_ssl_server_cert_info_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_ctx_t = {"_p_svn_checksum_ctx_t", "struct svn_checksum_ctx_t *|svn_checksum_ctx_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "enum svn_checksum_kind_t *|svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "struct svn_checksum_t *|svn_checksum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_commit_info_t = {"_p_svn_commit_info_t", "struct svn_commit_info_t *|svn_commit_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_config_t = {"_p_svn_config_t", "struct svn_config_t *|svn_config_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_delta_editor_t = {"_p_svn_delta_editor_t", "struct svn_delta_editor_t *|svn_delta_editor_t *", 0, 0, (void*)0, 0};
@@ -11372,6 +12199,7 @@ static swig_type_info _swigt__p_svn_opt_revision_t = {"_p_svn_opt_revision_t", "
static swig_type_info _swigt__p_svn_opt_revision_value_t = {"_p_svn_opt_revision_value_t", "union svn_opt_revision_value_t *|svn_opt_revision_value_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_opt_subcommand_desc2_t = {"_p_svn_opt_subcommand_desc2_t", "struct svn_opt_subcommand_desc2_t *|svn_opt_subcommand_desc2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_opt_subcommand_desc_t = {"_p_svn_opt_subcommand_desc_t", "struct svn_opt_subcommand_desc_t *|svn_opt_subcommand_desc_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_prop_inherited_item_t = {"_p_svn_prop_inherited_item_t", "struct svn_prop_inherited_item_t *|svn_prop_inherited_item_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_kind = {"_p_svn_prop_kind", "svn_prop_kind_t *|enum svn_prop_kind *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_stream_mark_t = {"_p_svn_stream_mark_t", "struct svn_stream_mark_t *|svn_stream_mark_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_stream_t = {"_p_svn_stream_t", "struct svn_stream_t *|svn_stream_t *", 0, 0, (void*)0, 0};
@@ -11382,7 +12210,11 @@ static swig_type_info _swigt__p_svn_txdelta_op_t = {"_p_svn_txdelta_op_t", "stru
static swig_type_info _swigt__p_svn_txdelta_stream_t = {"_p_svn_txdelta_stream_t", "struct svn_txdelta_stream_t *|svn_txdelta_stream_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_txdelta_window_t = {"_p_svn_txdelta_window_t", "struct svn_txdelta_window_t *|svn_txdelta_window_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_checklist_t = {"_p_svn_version_checklist_t", "struct svn_version_checklist_t *|svn_version_checklist_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_linked_lib_t = {"_p_svn_version_ext_linked_lib_t", "struct svn_version_ext_linked_lib_t *|svn_version_ext_linked_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_loaded_lib_t = {"_p_svn_version_ext_loaded_lib_t", "struct svn_version_ext_loaded_lib_t *|svn_version_ext_loaded_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_extended_t = {"_p_svn_version_extended_t", "struct svn_version_extended_t *|svn_version_extended_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_t = {"_p_svn_version_t", "struct svn_version_t *|svn_version_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_wc_external_item2_t = {"_p_svn_wc_external_item2_t", "svn_wc_external_item2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_char = {"_p_unsigned_char", "unsigned char *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_long = {"_p_unsigned_long", "unsigned long *|svn_linenum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_void = {"_p_void", "void *", 0, 0, (void*)0, 0};
@@ -11394,9 +12226,12 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_apr_int64_t,
&_swigt__p_apr_pool_t,
&_swigt__p_char,
+ &_swigt__p_f_long_p_void_p_apr_pool_t__void,
&_swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void__p_svn_error_t,
&_swigt__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_f_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_struct_svn_error_t__void,
&_swigt__p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_int,
@@ -11404,8 +12239,11 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_p_apr_array_header_t,
&_swigt__p_p_apr_hash_t,
&_swigt__p_p_char,
+ &_swigt__p_p_f_long_p_void_p_apr_pool_t__void,
+ &_swigt__p_p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t,
&_swigt__p_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_p_f_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_void_p_struct_svn_error_t__void,
&_swigt__p_p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_svn_checksum_t,
@@ -11430,7 +12268,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_auth_provider_object_t,
&_swigt__p_svn_auth_provider_t,
&_swigt__p_svn_auth_ssl_server_cert_info_t,
+ &_swigt__p_svn_checksum_ctx_t,
&_swigt__p_svn_checksum_kind_t,
+ &_swigt__p_svn_checksum_t,
&_swigt__p_svn_commit_info_t,
&_swigt__p_svn_config_t,
&_swigt__p_svn_delta_editor_t,
@@ -11465,6 +12305,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_opt_revision_value_t,
&_swigt__p_svn_opt_subcommand_desc2_t,
&_swigt__p_svn_opt_subcommand_desc_t,
+ &_swigt__p_svn_prop_inherited_item_t,
&_swigt__p_svn_prop_kind,
&_swigt__p_svn_stream_mark_t,
&_swigt__p_svn_stream_t,
@@ -11475,7 +12316,11 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_txdelta_stream_t,
&_swigt__p_svn_txdelta_window_t,
&_swigt__p_svn_version_checklist_t,
+ &_swigt__p_svn_version_ext_linked_lib_t,
+ &_swigt__p_svn_version_ext_loaded_lib_t,
+ &_swigt__p_svn_version_extended_t,
&_swigt__p_svn_version_t,
+ &_swigt__p_svn_wc_external_item2_t,
&_swigt__p_unsigned_char,
&_swigt__p_unsigned_long,
&_swigt__p_void,
@@ -11487,9 +12332,12 @@ static swig_cast_info _swigc__p_apr_int32_t[] = { {&_swigt__p_apr_int32_t, 0, 0
static swig_cast_info _swigc__p_apr_int64_t[] = { {&_swigt__p_apr_int64_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_apr_pool_t[] = { {&_swigt__p_apr_pool_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_long_p_void_p_apr_pool_t__void[] = { {&_swigt__p_f_long_p_void_p_apr_pool_t__void, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void__p_svn_error_t[] = { {&_swigt__p_f_p_void__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_struct_svn_error_t__void[] = { {&_swigt__p_f_p_void_p_struct_svn_error_t__void, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_int[] = { {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}};
@@ -11497,8 +12345,11 @@ static swig_cast_info _swigc__p_long[] = { {&_swigt__p_long, 0, 0, 0},{0, 0, 0,
static swig_cast_info _swigc__p_p_apr_array_header_t[] = { {&_swigt__p_p_apr_array_header_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_apr_hash_t[] = { {&_swigt__p_p_apr_hash_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_char[] = { {&_swigt__p_p_char, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_f_long_p_void_p_apr_pool_t__void[] = { {&_swigt__p_p_f_long_p_void_p_apr_pool_t__void, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t[] = { {&_swigt__p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_f_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void_p_struct_svn_error_t__void[] = { {&_swigt__p_p_f_p_void_p_struct_svn_error_t__void, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_checksum_t[] = { {&_swigt__p_p_svn_checksum_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -11523,7 +12374,9 @@ static swig_cast_info _swigc__p_svn_auth_iterstate_t[] = { {&_swigt__p_svn_auth
static swig_cast_info _swigc__p_svn_auth_provider_object_t[] = { {&_swigt__p_svn_auth_provider_object_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_provider_t[] = { {&_swigt__p_svn_auth_provider_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_ssl_server_cert_info_t[] = { {&_swigt__p_svn_auth_ssl_server_cert_info_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_ctx_t[] = { {&_swigt__p_svn_checksum_ctx_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_checksum_kind_t[] = { {&_swigt__p_svn_checksum_kind_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_t[] = { {&_swigt__p_svn_checksum_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_commit_info_t[] = { {&_swigt__p_svn_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_config_t[] = { {&_swigt__p_svn_config_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_delta_editor_t[] = { {&_swigt__p_svn_delta_editor_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -11558,6 +12411,7 @@ static swig_cast_info _swigc__p_svn_opt_revision_t[] = { {&_swigt__p_svn_opt_re
static swig_cast_info _swigc__p_svn_opt_revision_value_t[] = { {&_swigt__p_svn_opt_revision_value_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_opt_subcommand_desc2_t[] = { {&_swigt__p_svn_opt_subcommand_desc2_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_opt_subcommand_desc_t[] = { {&_swigt__p_svn_opt_subcommand_desc_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_prop_inherited_item_t[] = { {&_swigt__p_svn_prop_inherited_item_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_kind[] = { {&_swigt__p_svn_prop_kind, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_stream_mark_t[] = { {&_swigt__p_svn_stream_mark_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_stream_t[] = { {&_swigt__p_svn_stream_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -11568,7 +12422,11 @@ static swig_cast_info _swigc__p_svn_txdelta_op_t[] = { {&_swigt__p_svn_txdelta_
static swig_cast_info _swigc__p_svn_txdelta_stream_t[] = { {&_swigt__p_svn_txdelta_stream_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_txdelta_window_t[] = { {&_swigt__p_svn_txdelta_window_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_checklist_t[] = { {&_swigt__p_svn_version_checklist_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_linked_lib_t[] = { {&_swigt__p_svn_version_ext_linked_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_loaded_lib_t[] = { {&_swigt__p_svn_version_ext_loaded_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_extended_t[] = { {&_swigt__p_svn_version_extended_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_t[] = { {&_swigt__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_wc_external_item2_t[] = { {&_swigt__p_svn_wc_external_item2_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_char[] = { {&_swigt__p_unsigned_char, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_long[] = { {&_swigt__p_unsigned_long, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_void[] = { {&_swigt__p_void, 0, 0, 0},{0, 0, 0, 0}};
@@ -11580,9 +12438,12 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_apr_int64_t,
_swigc__p_apr_pool_t,
_swigc__p_char,
+ _swigc__p_f_long_p_void_p_apr_pool_t__void,
_swigc__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void__p_svn_error_t,
_swigc__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_f_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_struct_svn_error_t__void,
_swigc__p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_int,
@@ -11590,8 +12451,11 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_p_apr_array_header_t,
_swigc__p_p_apr_hash_t,
_swigc__p_p_char,
+ _swigc__p_p_f_long_p_void_p_apr_pool_t__void,
+ _swigc__p_p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t,
_swigc__p_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_p_f_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_void_p_struct_svn_error_t__void,
_swigc__p_p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_svn_checksum_t,
@@ -11616,7 +12480,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_auth_provider_object_t,
_swigc__p_svn_auth_provider_t,
_swigc__p_svn_auth_ssl_server_cert_info_t,
+ _swigc__p_svn_checksum_ctx_t,
_swigc__p_svn_checksum_kind_t,
+ _swigc__p_svn_checksum_t,
_swigc__p_svn_commit_info_t,
_swigc__p_svn_config_t,
_swigc__p_svn_delta_editor_t,
@@ -11651,6 +12517,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_opt_revision_value_t,
_swigc__p_svn_opt_subcommand_desc2_t,
_swigc__p_svn_opt_subcommand_desc_t,
+ _swigc__p_svn_prop_inherited_item_t,
_swigc__p_svn_prop_kind,
_swigc__p_svn_stream_mark_t,
_swigc__p_svn_stream_t,
@@ -11661,7 +12528,11 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_txdelta_stream_t,
_swigc__p_svn_txdelta_window_t,
_swigc__p_svn_version_checklist_t,
+ _swigc__p_svn_version_ext_linked_lib_t,
+ _swigc__p_svn_version_ext_loaded_lib_t,
+ _swigc__p_svn_version_extended_t,
_swigc__p_svn_version_t,
+ _swigc__p_svn_wc_external_item2_t,
_swigc__p_unsigned_char,
_swigc__p_unsigned_long,
_swigc__p_void,
@@ -11735,8 +12606,6 @@ SWIG_InitializeModule(void *clientdata) {
swig_module_info *module_head, *iter;
int found, init;
- clientdata = clientdata;
-
/* check to see if the circular list has been setup, if not, set it up */
if (swig_module.next==0) {
/* Initialize the swig_module */
@@ -12309,6 +13178,7 @@ SWIG_init(void) {
m = Py_InitModule((char *) SWIG_name, SwigMethods);
#endif
md = d = PyModule_GetDict(m);
+ (void)md;
SWIG_InitializeModule(0);
@@ -12354,12 +13224,15 @@ SWIG_init(void) {
SWIG_Python_SetConstant(d, "SVN_FS_CONFIG_BDB_LOG_AUTOREMOVE",SWIG_FromCharPtr("bdb-log-autoremove"));
SWIG_Python_SetConstant(d, "SVN_FS_CONFIG_FSFS_CACHE_DELTAS",SWIG_FromCharPtr("fsfs-cache-deltas"));
SWIG_Python_SetConstant(d, "SVN_FS_CONFIG_FSFS_CACHE_FULLTEXTS",SWIG_FromCharPtr("fsfs-cache-fulltexts"));
+ SWIG_Python_SetConstant(d, "SVN_FS_CONFIG_FSFS_CACHE_REVPROPS",SWIG_FromCharPtr("fsfs-cache-revprops"));
+ SWIG_Python_SetConstant(d, "SVN_FS_CONFIG_FSFS_CACHE_NS",SWIG_FromCharPtr("fsfs-cache-namespace"));
SWIG_Python_SetConstant(d, "SVN_FS_CONFIG_FS_TYPE",SWIG_FromCharPtr("fs-type"));
SWIG_Python_SetConstant(d, "SVN_FS_TYPE_BDB",SWIG_FromCharPtr("bdb"));
SWIG_Python_SetConstant(d, "SVN_FS_TYPE_FSFS",SWIG_FromCharPtr("fsfs"));
SWIG_Python_SetConstant(d, "SVN_FS_CONFIG_PRE_1_4_COMPATIBLE",SWIG_FromCharPtr("pre-1.4-compatible"));
SWIG_Python_SetConstant(d, "SVN_FS_CONFIG_PRE_1_5_COMPATIBLE",SWIG_FromCharPtr("pre-1.5-compatible"));
SWIG_Python_SetConstant(d, "SVN_FS_CONFIG_PRE_1_6_COMPATIBLE",SWIG_FromCharPtr("pre-1.6-compatible"));
+ SWIG_Python_SetConstant(d, "SVN_FS_CONFIG_PRE_1_8_COMPATIBLE",SWIG_FromCharPtr("pre-1.8-compatible"));
SWIG_Python_SetConstant(d, "SVN_FS_TXN_CHECK_OOD",SWIG_From_long((long)(0x00001)));
SWIG_Python_SetConstant(d, "SVN_FS_TXN_CHECK_LOCKS",SWIG_From_long((long)(0x00002)));
SWIG_Python_SetConstant(d, "svn_fs_path_change_modify",SWIG_From_long((long)(svn_fs_path_change_modify)));
diff --git a/subversion/bindings/swig/python/svn_ra.c b/subversion/bindings/swig/python/svn_ra.c
index 3066437..153741c 100644
--- a/subversion/bindings/swig/python/svn_ra.c
+++ b/subversion/bindings/swig/python/svn_ra.c
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -733,6 +733,7 @@ SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) {
#define PyInt_Check(x) PyLong_Check(x)
#define PyInt_AsLong(x) PyLong_AsLong(x)
#define PyInt_FromLong(x) PyLong_FromLong(x)
+#define PyInt_FromSize_t(x) PyLong_FromSize_t(x)
#define PyString_Check(name) PyBytes_Check(name)
#define PyString_FromString(x) PyUnicode_FromString(x)
#define PyString_Format(fmt, args) PyUnicode_Format(fmt, args)
@@ -902,6 +903,10 @@ static long PyNumber_AsSsize_t (PyObject *x, void *SWIGUNUSEDPARM(exc))
}
#endif
+#if PY_VERSION_HEX < 0x02050000
+#define PyInt_FromSize_t(x) PyInt_FromLong((long)x)
+#endif
+
#if PY_VERSION_HEX < 0x02040000
#define Py_VISIT(op) \
do { \
@@ -1173,7 +1178,7 @@ SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self),
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Python_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Python_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Python_SetModule(pointer)
#define SWIG_NewClientData(obj) SwigPyClientData_New(obj)
@@ -1199,7 +1204,7 @@ SWIG_Python_SetErrorObj(PyObject *errtype, PyObject *obj) {
SWIGINTERN void
SWIG_Python_SetErrorMsg(PyObject *errtype, const char *msg) {
SWIG_PYTHON_THREAD_BEGIN_BLOCK;
- PyErr_SetString(errtype, (char *) msg);
+ PyErr_SetString(errtype, msg);
SWIG_PYTHON_THREAD_END_BLOCK;
}
@@ -1218,7 +1223,11 @@ SwigPyBuiltin_AddPublicSymbol(PyObject *seq, const char *key) {
SWIGINTERN void
SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *name, PyObject *obj) {
+#if PY_VERSION_HEX < 0x02030000
PyDict_SetItemString(d, (char *)name, obj);
+#else
+ PyDict_SetItemString(d, name, obj);
+#endif
Py_DECREF(obj);
if (public_interface)
SwigPyBuiltin_AddPublicSymbol(public_interface, name);
@@ -1228,7 +1237,11 @@ SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *nam
SWIGINTERN void
SWIG_Python_SetConstant(PyObject *d, const char *name, PyObject *obj) {
+#if PY_VERSION_HEX < 0x02030000
PyDict_SetItemString(d, (char *)name, obj);
+#else
+ PyDict_SetItemString(d, name, obj);
+#endif
Py_DECREF(obj);
}
@@ -1549,7 +1562,7 @@ SwigPyObject_repr(SwigPyObject *v, PyObject *args)
#endif
{
const char *name = SWIG_TypePrettyName(v->ty);
- PyObject *repr = SWIG_Python_str_FromFormat("<Swig Object of type '%s' at %p>", name, (void *)v);
+ PyObject *repr = SWIG_Python_str_FromFormat("<Swig Object of type '%s' at %p>", (name ? name : "unknown"), (void *)v);
if (v->next) {
# ifdef METH_NOARGS
PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next);
@@ -1753,8 +1766,10 @@ SwigPyObject_own(PyObject *v, PyObject *args)
PyObject *val = 0;
#if (PY_VERSION_HEX < 0x02020000)
if (!PyArg_ParseTuple(args,(char *)"|O:own",&val))
-#else
+#elif (PY_VERSION_HEX < 0x02050000)
if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val))
+#else
+ if (!PyArg_UnpackTuple(args, "own", 0, 1, &val))
#endif
{
return NULL;
@@ -2449,23 +2464,29 @@ SWIG_Python_NewShadowInstance(SwigPyClientData *data, PyObject *swig_this)
} else {
#if PY_VERSION_HEX >= 0x03000000
inst = PyBaseObject_Type.tp_new((PyTypeObject*) data->newargs, Py_None, Py_None);
- PyObject_SetAttr(inst, SWIG_This(), swig_this);
- Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG;
+ if (inst) {
+ PyObject_SetAttr(inst, SWIG_This(), swig_this);
+ Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG;
+ }
#else
PyObject *dict = PyDict_New();
- PyDict_SetItem(dict, SWIG_This(), swig_this);
- inst = PyInstance_NewRaw(data->newargs, dict);
- Py_DECREF(dict);
+ if (dict) {
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ inst = PyInstance_NewRaw(data->newargs, dict);
+ Py_DECREF(dict);
+ }
#endif
}
return inst;
#else
#if (PY_VERSION_HEX >= 0x02010000)
- PyObject *inst;
+ PyObject *inst = 0;
PyObject *dict = PyDict_New();
- PyDict_SetItem(dict, SWIG_This(), swig_this);
- inst = PyInstance_NewRaw(data->newargs, dict);
- Py_DECREF(dict);
+ if (dict) {
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ inst = PyInstance_NewRaw(data->newargs, dict);
+ Py_DECREF(dict);
+ }
return (PyObject *) inst;
#else
PyInstanceObject *inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type);
@@ -2516,7 +2537,7 @@ SWIG_Python_SetSwigThis(PyObject *inst, PyObject *swig_this)
SWIGINTERN PyObject *
SWIG_Python_InitShadowInstance(PyObject *args) {
PyObject *obj[2];
- if (!SWIG_Python_UnpackTuple(args,(char*)"swiginit", 2, 2, obj)) {
+ if (!SWIG_Python_UnpackTuple(args, "swiginit", 2, 2, obj)) {
return NULL;
} else {
SwigPyObject *sthis = SWIG_Python_GetSwigThis(obj[0]);
@@ -2572,12 +2593,10 @@ SWIG_Python_NewPointerObj(PyObject *self, void *ptr, swig_type_info *type, int f
assert(!(flags & SWIG_BUILTIN_TP_INIT));
robj = SwigPyObject_New(ptr, type, own);
- if (clientdata && !(flags & SWIG_POINTER_NOSHADOW)) {
+ if (robj && clientdata && !(flags & SWIG_POINTER_NOSHADOW)) {
PyObject *inst = SWIG_Python_NewShadowInstance(clientdata, robj);
- if (inst) {
- Py_DECREF(robj);
- robj = inst;
- }
+ Py_DECREF(robj);
+ robj = inst;
}
return robj;
}
@@ -2598,7 +2617,7 @@ void *SWIG_ReturnGlobalTypeList(void *);
#endif
SWIGRUNTIME swig_module_info *
-SWIG_Python_GetModule(void) {
+SWIG_Python_GetModule(void *SWIGUNUSEDPARM(clientdata)) {
static void *type_pointer = (void *)0;
/* first check if module already created */
if (!type_pointer) {
@@ -2724,7 +2743,7 @@ SWIG_Python_TypeQuery(const char *type)
descriptor = (swig_type_info *) PyCObject_AsVoidPtr(obj);
#endif
} else {
- swig_module_info *swig_module = SWIG_Python_GetModule();
+ swig_module_info *swig_module = SWIG_GetModule(0);
descriptor = SWIG_TypeQueryModule(swig_module, swig_module, type);
if (descriptor) {
#ifdef SWIGPY_USE_CAPSULE
@@ -2792,7 +2811,7 @@ SwigPyObject_GetDesc(PyObject *self)
{
SwigPyObject *v = (SwigPyObject *)self;
swig_type_info *ty = v ? v->ty : 0;
- return ty ? ty->str : (char*)"";
+ return ty ? ty->str : "";
}
SWIGRUNTIME void
@@ -2849,6 +2868,7 @@ SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int SWIGUNUSEDPARM(arg
return result;
}
+#ifdef SWIGPYTHON_BUILTIN
SWIGRUNTIME int
SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
PyTypeObject *tp = obj->ob_type;
@@ -2857,15 +2877,15 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
descrsetfunc f;
int res;
-#ifdef Py_USING_UNICODE
+# ifdef Py_USING_UNICODE
if (PyString_Check(name)) {
name = PyUnicode_Decode(PyString_AsString(name), PyString_Size(name), NULL, NULL);
if (!name)
return -1;
} else if (!PyUnicode_Check(name))
-#else
+# else
if (!PyString_Check(name))
-#endif
+# endif
{
PyErr_Format(PyExc_TypeError, "attribute name must be string, not '%.200s'", name->ob_type->tp_name);
return -1;
@@ -2900,6 +2920,7 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
Py_DECREF(name);
return res;
}
+#endif
#ifdef __cplusplus
@@ -2944,121 +2965,133 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
#define SWIGTYPE_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[22]
#define SWIGTYPE_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[23]
#define SWIGTYPE_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[24]
-#define SWIGTYPE_p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[25]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[26]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[27]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[28]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[29]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[30]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[31]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_depth_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[32]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_boolean_t_p_q_const__svn_lock_t_p_svn_error_t_p_apr_pool_t__p_svn_error_t swig_types[33]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[34]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[35]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_p_apr_hash_t_p_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[36]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_svn_node_kind_t_p_apr_pool_t__p_svn_error_t swig_types[37]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_svn_stream_t_p_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[38]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[39]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[40]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_depth_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[41]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_revnum_t_svn_ra_file_rev_handler_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[42]
-#define SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t swig_types[43]
-#define SWIGTYPE_p_f_p_void_p_svn_revnum_t__p_svn_error_t swig_types[44]
-#define SWIGTYPE_p_f_p_void_p_svn_revnum_t_apr_time_t_p_apr_pool_t__p_svn_error_t swig_types[45]
-#define SWIGTYPE_p_f_p_void_p_svn_revnum_t_p_apr_pool_t__p_svn_error_t swig_types[46]
-#define SWIGTYPE_p_f_p_void_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[47]
-#define SWIGTYPE_p_f_p_void_svn_revnum_t_p_q_const__char_p_p_svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[48]
-#define SWIGTYPE_p_f_p_void_svn_revnum_t_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[49]
-#define SWIGTYPE_p_f_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t swig_types[50]
-#define SWIGTYPE_p_f_svn_revnum_t_p_void_p_p_q_const__svn_delta_editor_t_p_p_void_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[51]
-#define SWIGTYPE_p_f_svn_revnum_t_p_void_p_q_const__svn_delta_editor_t_p_void_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[52]
-#define SWIGTYPE_p_f_void__p_svn_version_t swig_types[53]
-#define SWIGTYPE_p_int swig_types[54]
-#define SWIGTYPE_p_long swig_types[55]
-#define SWIGTYPE_p_p_apr_file_t swig_types[56]
-#define SWIGTYPE_p_p_apr_hash_t swig_types[57]
-#define SWIGTYPE_p_p_char swig_types[58]
-#define SWIGTYPE_p_p_f_apr_off_t_apr_off_t_p_void_p_apr_pool_t__void swig_types[59]
-#define SWIGTYPE_p_p_f_int_p_apr_pool_t_p_apr_hash_t__p_svn_error_t swig_types[60]
-#define SWIGTYPE_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t swig_types[61]
-#define SWIGTYPE_p_p_f_p_void__p_svn_error_t swig_types[62]
-#define SWIGTYPE_p_p_f_p_void_p_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[63]
-#define SWIGTYPE_p_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[64]
-#define SWIGTYPE_p_p_f_p_void_p_q_const__char_p_q_const__char_p_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[65]
-#define SWIGTYPE_p_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[66]
-#define SWIGTYPE_p_p_f_p_void_p_q_const__char_svn_boolean_t_p_q_const__svn_lock_t_p_svn_error_t_p_apr_pool_t__p_svn_error_t swig_types[67]
-#define SWIGTYPE_p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[68]
-#define SWIGTYPE_p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[69]
-#define SWIGTYPE_p_p_f_p_void_p_svn_revnum_t__p_svn_error_t swig_types[70]
-#define SWIGTYPE_p_p_f_svn_revnum_t_p_void_p_p_q_const__svn_delta_editor_t_p_p_void_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[71]
-#define SWIGTYPE_p_p_f_svn_revnum_t_p_void_p_q_const__svn_delta_editor_t_p_void_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[72]
-#define SWIGTYPE_p_p_svn_delta_editor_t swig_types[73]
-#define SWIGTYPE_p_p_svn_dirent_t swig_types[74]
-#define SWIGTYPE_p_p_svn_lock_t swig_types[75]
-#define SWIGTYPE_p_p_svn_ra_callbacks2_t swig_types[76]
-#define SWIGTYPE_p_p_svn_ra_plugin_t swig_types[77]
-#define SWIGTYPE_p_p_svn_ra_reporter2_t swig_types[78]
-#define SWIGTYPE_p_p_svn_ra_reporter3_t swig_types[79]
-#define SWIGTYPE_p_p_svn_ra_reporter_t swig_types[80]
-#define SWIGTYPE_p_p_svn_ra_session_t swig_types[81]
-#define SWIGTYPE_p_p_svn_string_t swig_types[82]
-#define SWIGTYPE_p_p_svn_stringbuf_t swig_types[83]
-#define SWIGTYPE_p_p_void swig_types[84]
-#define SWIGTYPE_p_svn_auth_baton_t swig_types[85]
-#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[86]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[87]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[88]
-#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[89]
-#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[90]
-#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[91]
-#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[92]
-#define SWIGTYPE_p_svn_auth_provider_t swig_types[93]
-#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[94]
-#define SWIGTYPE_p_svn_commit_info_t swig_types[95]
-#define SWIGTYPE_p_svn_config_t swig_types[96]
-#define SWIGTYPE_p_svn_delta_editor_t swig_types[97]
-#define SWIGTYPE_p_svn_depth_t swig_types[98]
-#define SWIGTYPE_p_svn_dirent_t swig_types[99]
-#define SWIGTYPE_p_svn_errno_t swig_types[100]
-#define SWIGTYPE_p_svn_error_t swig_types[101]
-#define SWIGTYPE_p_svn_io_dirent2_t swig_types[102]
-#define SWIGTYPE_p_svn_io_dirent_t swig_types[103]
-#define SWIGTYPE_p_svn_io_file_del_t swig_types[104]
-#define SWIGTYPE_p_svn_location_segment_t swig_types[105]
-#define SWIGTYPE_p_svn_lock_t swig_types[106]
-#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[107]
-#define SWIGTYPE_p_svn_log_changed_path_t swig_types[108]
-#define SWIGTYPE_p_svn_log_entry_t swig_types[109]
-#define SWIGTYPE_p_svn_merge_range_t swig_types[110]
-#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[111]
-#define SWIGTYPE_p_svn_node_kind_t swig_types[112]
-#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[113]
-#define SWIGTYPE_p_svn_opt_revision_t swig_types[114]
-#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[115]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[116]
-#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[117]
-#define SWIGTYPE_p_svn_prop_kind swig_types[118]
-#define SWIGTYPE_p_svn_ra_callbacks2_t swig_types[119]
-#define SWIGTYPE_p_svn_ra_callbacks_t swig_types[120]
-#define SWIGTYPE_p_svn_ra_plugin_t swig_types[121]
-#define SWIGTYPE_p_svn_ra_reporter2_t swig_types[122]
-#define SWIGTYPE_p_svn_ra_reporter3_t swig_types[123]
-#define SWIGTYPE_p_svn_ra_reporter_t swig_types[124]
-#define SWIGTYPE_p_svn_ra_session_t swig_types[125]
-#define SWIGTYPE_p_svn_stream_mark_t swig_types[126]
-#define SWIGTYPE_p_svn_stream_t swig_types[127]
-#define SWIGTYPE_p_svn_string_t swig_types[128]
-#define SWIGTYPE_p_svn_stringbuf_t swig_types[129]
-#define SWIGTYPE_p_svn_tristate_t swig_types[130]
-#define SWIGTYPE_p_svn_txdelta_op_t swig_types[131]
-#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[132]
-#define SWIGTYPE_p_svn_txdelta_window_t swig_types[133]
-#define SWIGTYPE_p_svn_version_checklist_t swig_types[134]
-#define SWIGTYPE_p_svn_version_t swig_types[135]
-#define SWIGTYPE_p_unsigned_long swig_types[136]
-#define SWIGTYPE_p_void swig_types[137]
-static swig_type_info *swig_types[139];
-static swig_module_info swig_module = {swig_types, 138, 0, 0, 0, 0};
+#define SWIGTYPE_p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t swig_types[25]
+#define SWIGTYPE_p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[26]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[27]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[28]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[29]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[30]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[31]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[32]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_depth_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[33]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_boolean_t_p_q_const__svn_lock_t_p_svn_error_t_p_apr_pool_t__p_svn_error_t swig_types[34]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[35]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[36]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_p_apr_hash_t_p_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[37]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_svn_node_kind_t_p_apr_pool_t__p_svn_error_t swig_types[38]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_svn_stream_t_p_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[39]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[40]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[41]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_depth_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[42]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_revnum_t_svn_ra_file_rev_handler_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[43]
+#define SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t swig_types[44]
+#define SWIGTYPE_p_f_p_void_p_svn_revnum_t__p_svn_error_t swig_types[45]
+#define SWIGTYPE_p_f_p_void_p_svn_revnum_t_apr_time_t_p_apr_pool_t__p_svn_error_t swig_types[46]
+#define SWIGTYPE_p_f_p_void_p_svn_revnum_t_p_apr_pool_t__p_svn_error_t swig_types[47]
+#define SWIGTYPE_p_f_p_void_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[48]
+#define SWIGTYPE_p_f_p_void_svn_revnum_t_p_q_const__char_p_p_svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[49]
+#define SWIGTYPE_p_f_p_void_svn_revnum_t_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[50]
+#define SWIGTYPE_p_f_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t swig_types[51]
+#define SWIGTYPE_p_f_svn_revnum_t_p_void_p_p_q_const__svn_delta_editor_t_p_p_void_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[52]
+#define SWIGTYPE_p_f_svn_revnum_t_p_void_p_q_const__svn_delta_editor_t_p_void_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[53]
+#define SWIGTYPE_p_f_void__p_svn_version_t swig_types[54]
+#define SWIGTYPE_p_int swig_types[55]
+#define SWIGTYPE_p_long swig_types[56]
+#define SWIGTYPE_p_p_apr_array_header_t swig_types[57]
+#define SWIGTYPE_p_p_apr_file_t swig_types[58]
+#define SWIGTYPE_p_p_apr_hash_t swig_types[59]
+#define SWIGTYPE_p_p_char swig_types[60]
+#define SWIGTYPE_p_p_f_apr_off_t_apr_off_t_p_void_p_apr_pool_t__void swig_types[61]
+#define SWIGTYPE_p_p_f_int_p_apr_pool_t_p_apr_hash_t__p_svn_error_t swig_types[62]
+#define SWIGTYPE_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t swig_types[63]
+#define SWIGTYPE_p_p_f_p_void__p_svn_error_t swig_types[64]
+#define SWIGTYPE_p_p_f_p_void_p_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[65]
+#define SWIGTYPE_p_p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t swig_types[66]
+#define SWIGTYPE_p_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[67]
+#define SWIGTYPE_p_p_f_p_void_p_q_const__char_p_q_const__char_p_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[68]
+#define SWIGTYPE_p_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[69]
+#define SWIGTYPE_p_p_f_p_void_p_q_const__char_svn_boolean_t_p_q_const__svn_lock_t_p_svn_error_t_p_apr_pool_t__p_svn_error_t swig_types[70]
+#define SWIGTYPE_p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[71]
+#define SWIGTYPE_p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[72]
+#define SWIGTYPE_p_p_f_p_void_p_svn_revnum_t__p_svn_error_t swig_types[73]
+#define SWIGTYPE_p_p_f_svn_revnum_t_p_void_p_p_q_const__svn_delta_editor_t_p_p_void_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[74]
+#define SWIGTYPE_p_p_f_svn_revnum_t_p_void_p_q_const__svn_delta_editor_t_p_void_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[75]
+#define SWIGTYPE_p_p_svn_delta_editor_t swig_types[76]
+#define SWIGTYPE_p_p_svn_dirent_t swig_types[77]
+#define SWIGTYPE_p_p_svn_lock_t swig_types[78]
+#define SWIGTYPE_p_p_svn_ra_callbacks2_t swig_types[79]
+#define SWIGTYPE_p_p_svn_ra_plugin_t swig_types[80]
+#define SWIGTYPE_p_p_svn_ra_reporter2_t swig_types[81]
+#define SWIGTYPE_p_p_svn_ra_reporter3_t swig_types[82]
+#define SWIGTYPE_p_p_svn_ra_reporter_t swig_types[83]
+#define SWIGTYPE_p_p_svn_ra_session_t swig_types[84]
+#define SWIGTYPE_p_p_svn_stream_t swig_types[85]
+#define SWIGTYPE_p_p_svn_string_t swig_types[86]
+#define SWIGTYPE_p_p_svn_stringbuf_t swig_types[87]
+#define SWIGTYPE_p_p_void swig_types[88]
+#define SWIGTYPE_p_svn_auth_baton_t swig_types[89]
+#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[90]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[91]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[92]
+#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[93]
+#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[94]
+#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[95]
+#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[96]
+#define SWIGTYPE_p_svn_auth_provider_t swig_types[97]
+#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[98]
+#define SWIGTYPE_p_svn_checksum_ctx_t swig_types[99]
+#define SWIGTYPE_p_svn_checksum_kind_t swig_types[100]
+#define SWIGTYPE_p_svn_checksum_t swig_types[101]
+#define SWIGTYPE_p_svn_commit_info_t swig_types[102]
+#define SWIGTYPE_p_svn_config_t swig_types[103]
+#define SWIGTYPE_p_svn_delta_editor_t swig_types[104]
+#define SWIGTYPE_p_svn_depth_t swig_types[105]
+#define SWIGTYPE_p_svn_dirent_t swig_types[106]
+#define SWIGTYPE_p_svn_errno_t swig_types[107]
+#define SWIGTYPE_p_svn_error_t swig_types[108]
+#define SWIGTYPE_p_svn_io_dirent2_t swig_types[109]
+#define SWIGTYPE_p_svn_io_dirent_t swig_types[110]
+#define SWIGTYPE_p_svn_io_file_del_t swig_types[111]
+#define SWIGTYPE_p_svn_location_segment_t swig_types[112]
+#define SWIGTYPE_p_svn_lock_t swig_types[113]
+#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[114]
+#define SWIGTYPE_p_svn_log_changed_path_t swig_types[115]
+#define SWIGTYPE_p_svn_log_entry_t swig_types[116]
+#define SWIGTYPE_p_svn_merge_range_t swig_types[117]
+#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[118]
+#define SWIGTYPE_p_svn_node_kind_t swig_types[119]
+#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[120]
+#define SWIGTYPE_p_svn_opt_revision_t swig_types[121]
+#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[122]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[123]
+#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[124]
+#define SWIGTYPE_p_svn_prop_inherited_item_t swig_types[125]
+#define SWIGTYPE_p_svn_prop_kind swig_types[126]
+#define SWIGTYPE_p_svn_ra_callbacks2_t swig_types[127]
+#define SWIGTYPE_p_svn_ra_callbacks_t swig_types[128]
+#define SWIGTYPE_p_svn_ra_plugin_t swig_types[129]
+#define SWIGTYPE_p_svn_ra_reporter2_t swig_types[130]
+#define SWIGTYPE_p_svn_ra_reporter3_t swig_types[131]
+#define SWIGTYPE_p_svn_ra_reporter_t swig_types[132]
+#define SWIGTYPE_p_svn_ra_session_t swig_types[133]
+#define SWIGTYPE_p_svn_stream_mark_t swig_types[134]
+#define SWIGTYPE_p_svn_stream_t swig_types[135]
+#define SWIGTYPE_p_svn_string_t swig_types[136]
+#define SWIGTYPE_p_svn_stringbuf_t swig_types[137]
+#define SWIGTYPE_p_svn_tristate_t swig_types[138]
+#define SWIGTYPE_p_svn_txdelta_op_t swig_types[139]
+#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[140]
+#define SWIGTYPE_p_svn_txdelta_window_t swig_types[141]
+#define SWIGTYPE_p_svn_version_checklist_t swig_types[142]
+#define SWIGTYPE_p_svn_version_ext_linked_lib_t swig_types[143]
+#define SWIGTYPE_p_svn_version_ext_loaded_lib_t swig_types[144]
+#define SWIGTYPE_p_svn_version_extended_t swig_types[145]
+#define SWIGTYPE_p_svn_version_t swig_types[146]
+#define SWIGTYPE_p_svn_wc_external_item2_t swig_types[147]
+#define SWIGTYPE_p_unsigned_long swig_types[148]
+#define SWIGTYPE_p_void swig_types[149]
+static swig_type_info *swig_types[151];
+static swig_module_info swig_module = {swig_types, 150, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@@ -3082,7 +3115,7 @@ static swig_module_info swig_module = {swig_types, 138, 0, 0, 0, 0};
#endif
#define SWIG_name "_ra"
-#define SWIGVERSION 0x020004
+#define SWIGVERSION 0x020009
#define SWIG_VERSION SWIGVERSION
@@ -3237,7 +3270,7 @@ SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc)
- #define SWIG_From_long PyInt_FromLong
+ #define SWIG_From_long PyLong_FromLong
SWIGINTERN int
@@ -3378,6 +3411,7 @@ SWIG_As_long (PyObject* obj)
SWIGINTERN int
SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val)
{
+#if PY_VERSION_HEX < 0x03000000
if (PyInt_Check(obj)) {
long v = PyInt_AsLong(obj);
if (v >= 0) {
@@ -3386,7 +3420,9 @@ SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val)
} else {
return SWIG_OverflowError;
}
- } else if (PyLong_Check(obj)) {
+ } else
+#endif
+ if (PyLong_Check(obj)) {
unsigned long v = PyLong_AsUnsignedLong(obj);
if (!PyErr_Occurred()) {
if (val) *val = v;
@@ -3435,10 +3471,10 @@ SWIG_As_unsigned_SS_long (PyObject* obj)
}
-SWIGINTERNINLINE PyObject *
-SWIG_From_int (int value)
-{
- return SWIG_From_long (value);
+SWIGINTERNINLINE PyObject*
+ SWIG_From_int (int value)
+{
+ return PyInt_FromLong((long) value);
}
@@ -3675,6 +3711,11 @@ static svn_error_t * svn_ra_invoke_invalidate_wc_props_func(
return _obj(baton, path, name, pool);
}
+static svn_error_t * svn_ra_invoke_get_wc_contents_func(
+ svn_ra_get_wc_contents_func_t _obj, void *baton, svn_stream_t **contents, const svn_checksum_t *checksum, apr_pool_t *pool) {
+ return _obj(baton, contents, checksum, pool);
+}
+
static svn_error_t * svn_ra_invoke_get_latest_revnum_func(
svn_ra_get_latest_revnum_func_t _obj, void *session_baton, svn_revnum_t *latest_revnum) {
return _obj(session_baton, latest_revnum);
@@ -3742,14 +3783,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter3_t_set_path_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_revnum_t,svn_depth_t,svn_boolean_t,char const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_depth_t,svn_boolean_t,char const *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_reporter3_t_set_path_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_reporter3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter3_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3770,13 +3811,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter3_t_set_path_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,char const *,svn_revnum_t,svn_depth_t,svn_boolean_t,char const *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_reporter3_t_set_path_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_reporter3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter3_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3791,14 +3832,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter3_t_delete_path_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_reporter3_t_delete_path_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_reporter3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter3_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3819,13 +3860,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter3_t_delete_path_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,char const *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_reporter3_t_delete_path_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_reporter3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter3_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3840,14 +3881,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter3_t_link_path_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,char const *,svn_revnum_t,svn_depth_t,svn_boolean_t,char const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,char const *,svn_revnum_t,svn_depth_t,svn_boolean_t,char const *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_reporter3_t_link_path_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_reporter3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter3_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3868,13 +3909,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter3_t_link_path_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,char const *,char const *,svn_revnum_t,svn_depth_t,svn_boolean_t,char const *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_reporter3_t_link_path_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_reporter3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter3_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3889,14 +3930,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter3_t_finish_report_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_reporter3_t_finish_report_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_reporter3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter3_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3917,13 +3958,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter3_t_finish_report_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_reporter3_t_finish_report_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_reporter3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter3_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3938,14 +3979,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter3_t_abort_report_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_reporter3_t_abort_report_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_reporter3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter3_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3966,13 +4007,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter3_t_abort_report_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_reporter3_t_abort_report_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_reporter3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter3_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3987,13 +4028,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_ra_reporter3_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter3_t *result = 0 ;
+ struct svn_ra_reporter3_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_ra_reporter3_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_ra_reporter3_t *)calloc(1, sizeof(svn_ra_reporter3_t));
+ result = (struct svn_ra_reporter3_t *)calloc(1, sizeof(struct svn_ra_reporter3_t));
svn_swig_py_acquire_py_lock();
@@ -4008,12 +4049,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_ra_reporter3_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_ra_reporter3_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_reporter3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter3_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4042,14 +4083,14 @@ SWIGINTERN PyObject *svn_ra_reporter3_t_swigregister(PyObject *SWIGUNUSEDPARM(se
SWIGINTERN PyObject *_wrap_svn_ra_reporter2_t_set_path_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_revnum_t,svn_boolean_t,char const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_boolean_t,char const *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_reporter2_t_set_path_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_reporter2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4070,13 +4111,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter2_t_set_path_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,char const *,svn_revnum_t,svn_boolean_t,char const *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_reporter2_t_set_path_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_reporter2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4091,14 +4132,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter2_t_delete_path_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_reporter2_t_delete_path_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_reporter2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4119,13 +4160,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter2_t_delete_path_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,char const *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_reporter2_t_delete_path_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_reporter2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4140,14 +4181,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter2_t_link_path_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,char const *,svn_revnum_t,svn_boolean_t,char const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,char const *,svn_revnum_t,svn_boolean_t,char const *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_reporter2_t_link_path_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_reporter2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4168,13 +4209,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter2_t_link_path_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,char const *,char const *,svn_revnum_t,svn_boolean_t,char const *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_reporter2_t_link_path_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_reporter2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4189,14 +4230,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter2_t_finish_report_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_reporter2_t_finish_report_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_reporter2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4217,13 +4258,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter2_t_finish_report_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_reporter2_t_finish_report_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_reporter2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4238,14 +4279,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter2_t_abort_report_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_reporter2_t_abort_report_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_reporter2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4266,13 +4307,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter2_t_abort_report_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_reporter2_t_abort_report_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_reporter2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4287,13 +4328,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_ra_reporter2_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter2_t *result = 0 ;
+ struct svn_ra_reporter2_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_ra_reporter2_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_ra_reporter2_t *)calloc(1, sizeof(svn_ra_reporter2_t));
+ result = (struct svn_ra_reporter2_t *)calloc(1, sizeof(struct svn_ra_reporter2_t));
svn_swig_py_acquire_py_lock();
@@ -4308,12 +4349,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_ra_reporter2_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_ra_reporter2_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_reporter2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4342,14 +4383,14 @@ SWIGINTERN PyObject *svn_ra_reporter2_t_swigregister(PyObject *SWIGUNUSEDPARM(se
SWIGINTERN PyObject *_wrap_svn_ra_reporter_t_set_path_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_revnum_t,svn_boolean_t,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_boolean_t,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_reporter_t_set_path_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_reporter_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4370,13 +4411,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter_t_set_path_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,char const *,svn_revnum_t,svn_boolean_t,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_reporter_t_set_path_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_reporter_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4391,14 +4432,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter_t_delete_path_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_reporter_t_delete_path_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_reporter_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4419,13 +4460,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter_t_delete_path_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,char const *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_reporter_t_delete_path_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_reporter_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4440,14 +4481,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter_t_link_path_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,char const *,svn_revnum_t,svn_boolean_t,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,char const *,svn_revnum_t,svn_boolean_t,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_reporter_t_link_path_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_reporter_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4468,13 +4509,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter_t_link_path_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,char const *,char const *,svn_revnum_t,svn_boolean_t,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_reporter_t_link_path_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_reporter_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4489,14 +4530,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter_t_finish_report_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_reporter_t_finish_report_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_reporter_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4517,13 +4558,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter_t_finish_report_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_reporter_t_finish_report_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_reporter_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4538,14 +4579,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter_t_abort_report_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_reporter_t_abort_report_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_reporter_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4566,13 +4607,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_reporter_t_abort_report_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_reporter_t_abort_report_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_reporter_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4587,13 +4628,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_ra_reporter_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter_t *result = 0 ;
+ struct svn_ra_reporter_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_ra_reporter_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_ra_reporter_t *)calloc(1, sizeof(svn_ra_reporter_t));
+ result = (struct svn_ra_reporter_t *)calloc(1, sizeof(struct svn_ra_reporter_t));
svn_swig_py_acquire_py_lock();
@@ -4608,12 +4649,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_ra_reporter_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_ra_reporter_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_reporter_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_reporter_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_reporter_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4642,14 +4683,14 @@ SWIGINTERN PyObject *svn_ra_reporter_t_swigregister(PyObject *SWIGUNUSEDPARM(sel
SWIGINTERN PyObject *_wrap_svn_ra_callbacks2_t_open_tmp_file_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(apr_file_t **,void *,apr_pool_t *) = (svn_error_t *(*)(apr_file_t **,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_callbacks2_t_open_tmp_file_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4670,13 +4711,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks2_t_open_tmp_file_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(apr_file_t **,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_callbacks2_t_open_tmp_file_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4691,14 +4732,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks2_t_auth_baton_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_auth_baton_t *arg2 = (svn_auth_baton_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_callbacks2_t_auth_baton_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4719,13 +4760,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks2_t_auth_baton_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_auth_baton_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_callbacks2_t_auth_baton_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4741,14 +4782,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks2_t_get_wc_prop_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_ra_get_wc_prop_func_t arg2 = (svn_ra_get_wc_prop_func_t) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_callbacks2_t_get_wc_prop_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4771,13 +4812,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks2_t_get_wc_prop_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_ra_get_wc_prop_func_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_callbacks2_t_get_wc_prop_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4811,14 +4852,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks2_t_set_wc_prop_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_ra_set_wc_prop_func_t arg2 = (svn_ra_set_wc_prop_func_t) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_callbacks2_t_set_wc_prop_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4841,13 +4882,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks2_t_set_wc_prop_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_ra_set_wc_prop_func_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_callbacks2_t_set_wc_prop_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4881,14 +4922,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks2_t_push_wc_prop_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_ra_push_wc_prop_func_t arg2 = (svn_ra_push_wc_prop_func_t) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_callbacks2_t_push_wc_prop_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4911,13 +4952,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks2_t_push_wc_prop_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_ra_push_wc_prop_func_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_callbacks2_t_push_wc_prop_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4951,14 +4992,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks2_t_invalidate_wc_props_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_ra_invalidate_wc_props_func_t arg2 = (svn_ra_invalidate_wc_props_func_t) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_callbacks2_t_invalidate_wc_props_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4981,13 +5022,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks2_t_invalidate_wc_props_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_ra_invalidate_wc_props_func_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_callbacks2_t_invalidate_wc_props_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5021,14 +5062,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks2_t_progress_func_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_ra_progress_notify_func_t arg2 = (svn_ra_progress_notify_func_t) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_callbacks2_t_progress_func_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5051,13 +5092,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks2_t_progress_func_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_ra_progress_notify_func_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_callbacks2_t_progress_func_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5091,14 +5132,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks2_t_progress_baton_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
void *arg2 = (void *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_callbacks2_t_progress_baton_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5121,13 +5162,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks2_t_progress_baton_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
PyObject * obj0 = 0 ;
void *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_callbacks2_t_progress_baton_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5166,14 +5207,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks2_t_cancel_func_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_cancel_func_t arg2 = (svn_cancel_func_t) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_callbacks2_t_cancel_func_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5196,13 +5237,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks2_t_cancel_func_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_cancel_func_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_callbacks2_t_cancel_func_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5236,14 +5277,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks2_t_get_client_string_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_ra_get_client_string_func_t arg2 = (svn_ra_get_client_string_func_t) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_callbacks2_t_get_client_string_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5266,13 +5307,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks2_t_get_client_string_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_ra_get_client_string_func_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_callbacks2_t_get_client_string_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5304,15 +5345,85 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_ra_callbacks2_t_get_wc_contents_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
+ svn_ra_get_wc_contents_func_t arg2 = (svn_ra_get_wc_contents_func_t) 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_callbacks2_t_get_wc_contents_set",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (struct svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_ra_get_wc_contents_func_t * tmp =
+ svn_swig_MustGetPtr(obj1, SWIGTYPE_p_p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t, svn_argnum_obj1);
+ if (tmp == NULL || PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ arg2 = *tmp;
+ }
+ if (arg1) (arg1)->get_wc_contents = arg2;
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_ra_callbacks2_t_get_wc_contents_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ svn_ra_get_wc_contents_func_t result;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_callbacks2_t_get_wc_contents_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (svn_ra_get_wc_contents_func_t) ((arg1)->get_wc_contents);
+ {
+ PyObject *py_pool = NULL;
+ apr_pool_t *pool = NULL;
+
+ if (svn_swig_py_get_parent_pool(args, SWIGTYPE_p_apr_pool_t,
+ &py_pool, &pool))
+ SWIG_fail;
+ if (result == NULL) {
+ resultobj = Py_None;
+ Py_INCREF(resultobj);
+ } else {
+ svn_ra_get_wc_contents_func_t * tmp = apr_palloc(pool, sizeof(svn_ra_get_wc_contents_func_t));
+ if (tmp == NULL) {
+ SWIG_fail;
+ }
+ *tmp = (svn_ra_get_wc_contents_func_t) result;
+ resultobj = svn_swig_NewPointerObj(tmp, SWIGTYPE_p_p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t,
+ py_pool, args);
+ }
+ }
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_new_svn_ra_callbacks2_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks2_t *result = 0 ;
+ struct svn_ra_callbacks2_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_ra_callbacks2_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_ra_callbacks2_t *)calloc(1, sizeof(svn_ra_callbacks2_t));
+ result = (struct svn_ra_callbacks2_t *)calloc(1, sizeof(struct svn_ra_callbacks2_t));
svn_swig_py_acquire_py_lock();
@@ -5327,12 +5438,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_ra_callbacks2_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_ra_callbacks2_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5361,14 +5472,14 @@ SWIGINTERN PyObject *svn_ra_callbacks2_t_swigregister(PyObject *SWIGUNUSEDPARM(s
SWIGINTERN PyObject *_wrap_svn_ra_callbacks_t_open_tmp_file_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
svn_error_t *(*arg2)(apr_file_t **,void *,apr_pool_t *) = (svn_error_t *(*)(apr_file_t **,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_callbacks_t_open_tmp_file_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5389,13 +5500,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks_t_open_tmp_file_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(apr_file_t **,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_callbacks_t_open_tmp_file_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5410,14 +5521,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks_t_auth_baton_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
svn_auth_baton_t *arg2 = (svn_auth_baton_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_callbacks_t_auth_baton_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5438,13 +5549,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks_t_auth_baton_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
PyObject * obj0 = 0 ;
svn_auth_baton_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_callbacks_t_auth_baton_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5460,14 +5571,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks_t_get_wc_prop_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
svn_ra_get_wc_prop_func_t arg2 = (svn_ra_get_wc_prop_func_t) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_callbacks_t_get_wc_prop_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5490,13 +5601,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks_t_get_wc_prop_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
PyObject * obj0 = 0 ;
svn_ra_get_wc_prop_func_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_callbacks_t_get_wc_prop_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5530,14 +5641,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks_t_set_wc_prop_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
svn_ra_set_wc_prop_func_t arg2 = (svn_ra_set_wc_prop_func_t) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_callbacks_t_set_wc_prop_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5560,13 +5671,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks_t_set_wc_prop_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
PyObject * obj0 = 0 ;
svn_ra_set_wc_prop_func_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_callbacks_t_set_wc_prop_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5600,14 +5711,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks_t_push_wc_prop_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
svn_ra_push_wc_prop_func_t arg2 = (svn_ra_push_wc_prop_func_t) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_callbacks_t_push_wc_prop_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5630,13 +5741,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks_t_push_wc_prop_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
PyObject * obj0 = 0 ;
svn_ra_push_wc_prop_func_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_callbacks_t_push_wc_prop_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5670,14 +5781,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks_t_invalidate_wc_props_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
svn_ra_invalidate_wc_props_func_t arg2 = (svn_ra_invalidate_wc_props_func_t) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_callbacks_t_invalidate_wc_props_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5700,13 +5811,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_callbacks_t_invalidate_wc_props_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
PyObject * obj0 = 0 ;
svn_ra_invalidate_wc_props_func_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_callbacks_t_invalidate_wc_props_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5740,13 +5851,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_ra_callbacks_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks_t *result = 0 ;
+ struct svn_ra_callbacks_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_ra_callbacks_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_ra_callbacks_t *)calloc(1, sizeof(svn_ra_callbacks_t));
+ result = (struct svn_ra_callbacks_t *)calloc(1, sizeof(struct svn_ra_callbacks_t));
svn_swig_py_acquire_py_lock();
@@ -5761,12 +5872,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_ra_callbacks_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_ra_callbacks_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7783,6 +7894,155 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_ra_do_update3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_ra_session_t *arg1 = (svn_ra_session_t *) 0 ;
+ svn_ra_reporter3_t **arg2 = (svn_ra_reporter3_t **) 0 ;
+ void **arg3 = (void **) 0 ;
+ svn_revnum_t arg4 ;
+ char *arg5 = (char *) 0 ;
+ svn_depth_t arg6 ;
+ svn_boolean_t arg7 ;
+ svn_boolean_t arg8 ;
+ svn_delta_editor_t *arg9 = (svn_delta_editor_t *) 0 ;
+ void *arg10 = (void *) 0 ;
+ apr_pool_t *arg11 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg12 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_ra_reporter3_t *temp2 ;
+ void *temp3 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj5 = 0 ;
+ PyObject * obj6 = 0 ;
+ PyObject * obj7 = 0 ;
+ PyObject * obj8 = 0 ;
+ PyObject * obj9 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg11 = _global_pool;
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg12 = _global_pool;
+ arg2 = &temp2;
+ arg3 = &temp3;
+ if (!PyArg_ParseTuple(args,(char *)"OOsOOOOO|OO:svn_ra_do_update3",&obj0,&obj1,&arg5,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9)) SWIG_fail;
+ {
+ arg1 = (svn_ra_session_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_session_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg4 = (svn_revnum_t)SWIG_As_long (obj1);
+ if (SWIG_arg_fail(svn_argnum_obj1)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg6 = (svn_depth_t)SWIG_As_long (obj3);
+ if (SWIG_arg_fail(svn_argnum_obj3)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg7 = (svn_boolean_t)SWIG_As_long (obj4);
+ if (SWIG_arg_fail(svn_argnum_obj4)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg8 = (svn_boolean_t)SWIG_As_long (obj5);
+ if (SWIG_arg_fail(svn_argnum_obj5)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg9 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj6, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj6);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ if (obj7 == Py_None) {
+ arg10 = NULL;
+ } else if (SWIG_ConvertPtr(obj7, (void **) &arg10, 0, 0) == -1) {
+ arg10 = (void *) obj7;
+ PyErr_Clear();
+ }
+ }
+ if (obj8) {
+ /* Verify that the user supplied a valid pool */
+ if (obj8 != Py_None && obj8 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj8);
+ SWIG_arg_fail(svn_argnum_obj8);
+ SWIG_fail;
+ }
+ }
+ if (obj9) {
+ /* Verify that the user supplied a valid pool */
+ if (obj9 != Py_None && obj9 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj9);
+ SWIG_arg_fail(svn_argnum_obj9);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_ra_do_update3(arg1,(struct svn_ra_reporter3_t const **)arg2,arg3,arg4,(char const *)arg5,arg6,arg7,arg8,(struct svn_delta_editor_t const *)arg9,arg10,arg11,arg12);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg2, SWIGTYPE_p_svn_ra_reporter3_t,
+ _global_py_pool, args))
+
+ ;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg3, SWIGTYPE_p_void,
+ _global_py_pool, args))
+
+ ;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_ra_do_update2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_ra_session_t *arg1 = (svn_ra_session_t *) 0 ;
@@ -8017,6 +8277,156 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_ra_do_switch3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_ra_session_t *arg1 = (svn_ra_session_t *) 0 ;
+ svn_ra_reporter3_t **arg2 = (svn_ra_reporter3_t **) 0 ;
+ void **arg3 = (void **) 0 ;
+ svn_revnum_t arg4 ;
+ char *arg5 = (char *) 0 ;
+ svn_depth_t arg6 ;
+ char *arg7 = (char *) 0 ;
+ svn_boolean_t arg8 ;
+ svn_boolean_t arg9 ;
+ svn_delta_editor_t *arg10 = (svn_delta_editor_t *) 0 ;
+ void *arg11 = (void *) 0 ;
+ apr_pool_t *arg12 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg13 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_ra_reporter3_t *temp2 ;
+ void *temp3 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj5 = 0 ;
+ PyObject * obj6 = 0 ;
+ PyObject * obj7 = 0 ;
+ PyObject * obj8 = 0 ;
+ PyObject * obj9 = 0 ;
+ PyObject * obj10 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg12 = _global_pool;
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg13 = _global_pool;
+ arg2 = &temp2;
+ arg3 = &temp3;
+ if (!PyArg_ParseTuple(args,(char *)"OOsOsOOOO|OO:svn_ra_do_switch3",&obj0,&obj1,&arg5,&obj3,&arg7,&obj5,&obj6,&obj7,&obj8,&obj9,&obj10)) SWIG_fail;
+ {
+ arg1 = (svn_ra_session_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_session_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg4 = (svn_revnum_t)SWIG_As_long (obj1);
+ if (SWIG_arg_fail(svn_argnum_obj1)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg6 = (svn_depth_t)SWIG_As_long (obj3);
+ if (SWIG_arg_fail(svn_argnum_obj3)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg8 = (svn_boolean_t)SWIG_As_long (obj5);
+ if (SWIG_arg_fail(svn_argnum_obj5)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg9 = (svn_boolean_t)SWIG_As_long (obj6);
+ if (SWIG_arg_fail(svn_argnum_obj6)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg10 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj7, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj7);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ if (obj8 == Py_None) {
+ arg11 = NULL;
+ } else if (SWIG_ConvertPtr(obj8, (void **) &arg11, 0, 0) == -1) {
+ arg11 = (void *) obj8;
+ PyErr_Clear();
+ }
+ }
+ if (obj9) {
+ /* Verify that the user supplied a valid pool */
+ if (obj9 != Py_None && obj9 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj9);
+ SWIG_arg_fail(svn_argnum_obj9);
+ SWIG_fail;
+ }
+ }
+ if (obj10) {
+ /* Verify that the user supplied a valid pool */
+ if (obj10 != Py_None && obj10 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj10);
+ SWIG_arg_fail(svn_argnum_obj10);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_ra_do_switch3(arg1,(struct svn_ra_reporter3_t const **)arg2,arg3,arg4,(char const *)arg5,arg6,(char const *)arg7,arg8,arg9,(struct svn_delta_editor_t const *)arg10,arg11,arg12,arg13);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg2, SWIGTYPE_p_svn_ra_reporter3_t,
+ _global_py_pool, args))
+
+ ;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg3, SWIGTYPE_p_void,
+ _global_py_pool, args))
+
+ ;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_ra_do_switch2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_ra_session_t *arg1 = (svn_ra_session_t *) 0 ;
@@ -8949,7 +9359,7 @@ SWIGINTERN PyObject *_wrap_svn_ra_get_log2(PyObject *SWIGUNUSEDPARM(self), PyObj
}
{
arg10 = svn_swig_py_log_entry_receiver;
- arg11 = (void *)obj9;
+ arg11 = obj9;
}
if (obj10) {
/* Verify that the user supplied a valid pool */
@@ -9067,7 +9477,7 @@ SWIGINTERN PyObject *_wrap_svn_ra_get_log(PyObject *SWIGUNUSEDPARM(self), PyObje
}
{
arg8 = svn_swig_py_log_receiver;
- arg9 = (void *)obj7;
+ arg9 = obj7;
}
if (obj8) {
/* Verify that the user supplied a valid pool */
@@ -10632,6 +11042,101 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_ra_get_inherited_props(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_ra_session_t *arg1 = (svn_ra_session_t *) 0 ;
+ apr_array_header_t **arg2 = (apr_array_header_t **) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_revnum_t arg4 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ apr_array_header_t *temp2 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg5 = _global_pool;
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg6 = _global_pool;
+ arg2 = &temp2;
+ if (!PyArg_ParseTuple(args,(char *)"OsO|OO:svn_ra_get_inherited_props",&obj0,&arg3,&obj2,&obj3,&obj4)) SWIG_fail;
+ {
+ arg1 = (svn_ra_session_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_session_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg4 = (svn_revnum_t)SWIG_As_long (obj2);
+ if (SWIG_arg_fail(svn_argnum_obj2)) {
+ SWIG_fail;
+ }
+ }
+ if (obj3) {
+ /* Verify that the user supplied a valid pool */
+ if (obj3 != Py_None && obj3 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj3);
+ SWIG_arg_fail(svn_argnum_obj3);
+ SWIG_fail;
+ }
+ }
+ if (obj4) {
+ /* Verify that the user supplied a valid pool */
+ if (obj4 != Py_None && obj4 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj4);
+ SWIG_arg_fail(svn_argnum_obj4);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_ra_get_inherited_props(arg1,arg2,(char const *)arg3,arg4,arg5,arg6);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_py_propinheriteditemarray_to_dict(*arg2));
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_ra_has_capability(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_ra_session_t *arg1 = (svn_ra_session_t *) 0 ;
@@ -10847,13 +11352,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_name_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_ra_plugin_t_name_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10875,13 +11380,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_name_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_plugin_t_name_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10896,13 +11401,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_description_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_ra_plugin_t_description_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10924,13 +11429,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_description_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_plugin_t_description_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10945,14 +11450,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_open_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void **,char const *,svn_ra_callbacks_t const *,void *,apr_hash_t *,apr_pool_t *) = (svn_error_t *(*)(void **,char const *,svn_ra_callbacks_t const *,void *,apr_hash_t *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_plugin_t_open_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10973,13 +11478,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_open_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void **,char const *,svn_ra_callbacks_t const *,void *,apr_hash_t *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_plugin_t_open_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10994,14 +11499,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_get_latest_revnum_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_revnum_t *,apr_pool_t *) = (svn_error_t *(*)(void *,svn_revnum_t *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_plugin_t_get_latest_revnum_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11022,13 +11527,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_get_latest_revnum_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,svn_revnum_t *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_plugin_t_get_latest_revnum_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11043,14 +11548,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_get_dated_revision_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_revnum_t *,apr_time_t,apr_pool_t *) = (svn_error_t *(*)(void *,svn_revnum_t *,apr_time_t,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_plugin_t_get_dated_revision_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11071,13 +11576,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_get_dated_revision_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,svn_revnum_t *,apr_time_t,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_plugin_t_get_dated_revision_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11092,14 +11597,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_change_rev_prop_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_revnum_t,char const *,svn_string_t const *,apr_pool_t *) = (svn_error_t *(*)(void *,svn_revnum_t,char const *,svn_string_t const *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_plugin_t_change_rev_prop_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11120,13 +11625,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_change_rev_prop_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,svn_revnum_t,char const *,svn_string_t const *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_plugin_t_change_rev_prop_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11141,14 +11646,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_rev_proplist_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_revnum_t,apr_hash_t **,apr_pool_t *) = (svn_error_t *(*)(void *,svn_revnum_t,apr_hash_t **,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_plugin_t_rev_proplist_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11169,13 +11674,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_rev_proplist_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,svn_revnum_t,apr_hash_t **,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_plugin_t_rev_proplist_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11190,14 +11695,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_rev_prop_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_revnum_t,char const *,svn_string_t **,apr_pool_t *) = (svn_error_t *(*)(void *,svn_revnum_t,char const *,svn_string_t **,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_plugin_t_rev_prop_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11218,13 +11723,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_rev_prop_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,svn_revnum_t,char const *,svn_string_t **,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_plugin_t_rev_prop_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11239,14 +11744,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_get_commit_editor_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_delta_editor_t const **,void **,char const *,svn_commit_callback_t,void *,apr_pool_t *) = (svn_error_t *(*)(void *,svn_delta_editor_t const **,void **,char const *,svn_commit_callback_t,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_plugin_t_get_commit_editor_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11267,13 +11772,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_get_commit_editor_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,svn_delta_editor_t const **,void **,char const *,svn_commit_callback_t,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_plugin_t_get_commit_editor_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11288,14 +11793,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_get_file_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_revnum_t,svn_stream_t *,svn_revnum_t *,apr_hash_t **,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_stream_t *,svn_revnum_t *,apr_hash_t **,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_plugin_t_get_file_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11316,13 +11821,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_get_file_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,char const *,svn_revnum_t,svn_stream_t *,svn_revnum_t *,apr_hash_t **,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_plugin_t_get_file_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11337,14 +11842,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_get_dir_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_revnum_t,apr_hash_t **,svn_revnum_t *,apr_hash_t **,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_revnum_t,apr_hash_t **,svn_revnum_t *,apr_hash_t **,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_plugin_t_get_dir_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11365,13 +11870,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_get_dir_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,char const *,svn_revnum_t,apr_hash_t **,svn_revnum_t *,apr_hash_t **,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_plugin_t_get_dir_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11386,14 +11891,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_do_update_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *) = (svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_plugin_t_do_update_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11414,13 +11919,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_do_update_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_plugin_t_do_update_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11435,14 +11940,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_do_switch_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *) = (svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_plugin_t_do_switch_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11463,13 +11968,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_do_switch_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_plugin_t_do_switch_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11484,14 +11989,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_do_status_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_ra_reporter_t const **,void **,char const *,svn_revnum_t,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *) = (svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,char const *,svn_revnum_t,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_plugin_t_do_status_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11512,13 +12017,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_do_status_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,svn_ra_reporter_t const **,void **,char const *,svn_revnum_t,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_plugin_t_do_status_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11533,14 +12038,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_do_diff_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *) = (svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_plugin_t_do_diff_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11561,13 +12066,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_do_diff_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_plugin_t_do_diff_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11582,14 +12087,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_get_log_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_array_header_t const *,svn_revnum_t,svn_revnum_t,svn_boolean_t,svn_boolean_t,svn_log_message_receiver_t,void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_array_header_t const *,svn_revnum_t,svn_revnum_t,svn_boolean_t,svn_boolean_t,svn_log_message_receiver_t,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_plugin_t_get_log_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11610,13 +12115,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_get_log_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,apr_array_header_t const *,svn_revnum_t,svn_revnum_t,svn_boolean_t,svn_boolean_t,svn_log_message_receiver_t,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_plugin_t_get_log_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11631,14 +12136,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_check_path_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_revnum_t,svn_node_kind_t *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_node_kind_t *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_plugin_t_check_path_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11659,13 +12164,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_check_path_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,char const *,svn_revnum_t,svn_node_kind_t *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_plugin_t_check_path_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11680,14 +12185,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_get_uuid_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,char const **,apr_pool_t *) = (svn_error_t *(*)(void *,char const **,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_plugin_t_get_uuid_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11708,13 +12213,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_get_uuid_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,char const **,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_plugin_t_get_uuid_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11729,14 +12234,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_get_repos_root_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,char const **,apr_pool_t *) = (svn_error_t *(*)(void *,char const **,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_plugin_t_get_repos_root_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11757,13 +12262,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_get_repos_root_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,char const **,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_plugin_t_get_repos_root_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11778,14 +12283,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_get_locations_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_hash_t **,char const *,svn_revnum_t,apr_array_header_t *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_hash_t **,char const *,svn_revnum_t,apr_array_header_t *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_plugin_t_get_locations_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11806,13 +12311,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_get_locations_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,apr_hash_t **,char const *,svn_revnum_t,apr_array_header_t *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_plugin_t_get_locations_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11827,14 +12332,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_get_file_revs_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_revnum_t,svn_revnum_t,svn_ra_file_rev_handler_t,void *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_revnum_t,svn_ra_file_rev_handler_t,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_plugin_t_get_file_revs_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11855,13 +12360,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_get_file_revs_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,char const *,svn_revnum_t,svn_revnum_t,svn_ra_file_rev_handler_t,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_plugin_t_get_file_revs_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11876,14 +12381,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_get_version_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_version_t *(*arg2)(void) = (svn_version_t *(*)(void)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_ra_plugin_t_get_version_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11904,13 +12409,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_ra_plugin_t_get_version_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
PyObject * obj0 = 0 ;
svn_version_t *(*result)(void) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_ra_plugin_t_get_version_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11925,13 +12430,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_ra_plugin_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *result = 0 ;
+ struct svn_ra_plugin_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_ra_plugin_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_ra_plugin_t *)calloc(1, sizeof(svn_ra_plugin_t));
+ result = (struct svn_ra_plugin_t *)calloc(1, sizeof(struct svn_ra_plugin_t));
svn_swig_py_acquire_py_lock();
@@ -11946,12 +12451,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_ra_plugin_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_ra_plugin_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
+ arg1 = (struct svn_ra_plugin_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_ra_plugin_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14878,7 +15383,7 @@ SWIGINTERN PyObject *_wrap_svn_ra_plugin_invoke_get_log(PyObject *SWIGUNUSEDPARM
}
{
arg8 = svn_swig_py_log_receiver;
- arg9 = (void *)obj7;
+ arg9 = obj7;
}
if (obj8) {
/* Verify that the user supplied a valid pool */
@@ -15743,6 +16248,95 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_ra_invoke_get_wc_contents_func(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_ra_get_wc_contents_func_t arg1 = (svn_ra_get_wc_contents_func_t) 0 ;
+ void *arg2 = (void *) 0 ;
+ svn_stream_t **arg3 = (svn_stream_t **) 0 ;
+ svn_checksum_t *arg4 = (svn_checksum_t *) 0 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_stream_t *temp3 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg5 = _global_pool;
+ arg3 = &temp3;
+ if (!PyArg_ParseTuple(args,(char *)"OOO|O:svn_ra_invoke_get_wc_contents_func",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+ {
+ svn_ra_get_wc_contents_func_t * tmp =
+ svn_swig_MustGetPtr(obj0, SWIGTYPE_p_p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t, svn_argnum_obj0);
+ if (tmp == NULL || PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ arg1 = *tmp;
+ }
+ {
+ if (obj1 == Py_None) {
+ arg2 = NULL;
+ } else if (SWIG_ConvertPtr(obj1, (void **) &arg2, 0, 0) == -1) {
+ arg2 = (void *) obj1;
+ PyErr_Clear();
+ }
+ }
+ {
+ arg4 = (svn_checksum_t *)svn_swig_MustGetPtr(obj2, SWIGTYPE_p_svn_checksum_t, svn_argnum_obj2);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj3) {
+ /* Verify that the user supplied a valid pool */
+ if (obj3 != Py_None && obj3 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj3);
+ SWIG_arg_fail(svn_argnum_obj3);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_ra_invoke_get_wc_contents_func(arg1,arg2,arg3,(struct svn_checksum_t const *)arg4,arg5);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg3, SWIGTYPE_p_svn_stream_t,
+ _global_py_pool, args))
+
+ ;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_ra_invoke_get_latest_revnum_func(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_ra_get_latest_revnum_func_t arg1 = (svn_ra_get_latest_revnum_func_t) 0 ;
@@ -16505,6 +17099,13 @@ SWIGINTERN PyObject *svn_ra_invalidate_wc_props_func_t_swigregister(PyObject *SW
return SWIG_Py_Void();
}
+SWIGINTERN PyObject *svn_ra_get_wc_contents_func_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *obj;
+ if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+ SWIG_TypeNewClientData(SWIGTYPE_p_p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t, SWIG_NewClientData(obj));
+ return SWIG_Py_Void();
+}
+
SWIGINTERN PyObject *svn_ra_get_latest_revnum_func_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *obj;
if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
@@ -16563,50 +17164,50 @@ SWIGINTERN PyObject *svn_ra_init_func_t_swigregister(PyObject *SWIGUNUSEDPARM(se
static PyMethodDef SwigMethods[] = {
{ (char *)"SWIG_PyInstanceMethod_New", (PyCFunction)SWIG_PyInstanceMethod_New, METH_O, NULL},
- { (char *)"svn_ra_version", _wrap_svn_ra_version, METH_VARARGS, (char *)"svn_ra_version() -> svn_version_t"},
- { (char *)"svn_ra_reporter3_t_set_path_set", _wrap_svn_ra_reporter3_t_set_path_set, METH_VARARGS, (char *)"svn_ra_reporter3_t_set_path_set(svn_ra_reporter3_t self, svn_error_t set_path)"},
- { (char *)"svn_ra_reporter3_t_set_path_get", _wrap_svn_ra_reporter3_t_set_path_get, METH_VARARGS, (char *)"svn_ra_reporter3_t_set_path_get(svn_ra_reporter3_t self) -> svn_error_t"},
- { (char *)"svn_ra_reporter3_t_delete_path_set", _wrap_svn_ra_reporter3_t_delete_path_set, METH_VARARGS, (char *)"svn_ra_reporter3_t_delete_path_set(svn_ra_reporter3_t self, svn_error_t delete_path)"},
- { (char *)"svn_ra_reporter3_t_delete_path_get", _wrap_svn_ra_reporter3_t_delete_path_get, METH_VARARGS, (char *)"svn_ra_reporter3_t_delete_path_get(svn_ra_reporter3_t self) -> svn_error_t"},
- { (char *)"svn_ra_reporter3_t_link_path_set", _wrap_svn_ra_reporter3_t_link_path_set, METH_VARARGS, (char *)"svn_ra_reporter3_t_link_path_set(svn_ra_reporter3_t self, svn_error_t link_path)"},
- { (char *)"svn_ra_reporter3_t_link_path_get", _wrap_svn_ra_reporter3_t_link_path_get, METH_VARARGS, (char *)"svn_ra_reporter3_t_link_path_get(svn_ra_reporter3_t self) -> svn_error_t"},
- { (char *)"svn_ra_reporter3_t_finish_report_set", _wrap_svn_ra_reporter3_t_finish_report_set, METH_VARARGS, (char *)"svn_ra_reporter3_t_finish_report_set(svn_ra_reporter3_t self, svn_error_t finish_report)"},
- { (char *)"svn_ra_reporter3_t_finish_report_get", _wrap_svn_ra_reporter3_t_finish_report_get, METH_VARARGS, (char *)"svn_ra_reporter3_t_finish_report_get(svn_ra_reporter3_t self) -> svn_error_t"},
- { (char *)"svn_ra_reporter3_t_abort_report_set", _wrap_svn_ra_reporter3_t_abort_report_set, METH_VARARGS, (char *)"svn_ra_reporter3_t_abort_report_set(svn_ra_reporter3_t self, svn_error_t abort_report)"},
- { (char *)"svn_ra_reporter3_t_abort_report_get", _wrap_svn_ra_reporter3_t_abort_report_get, METH_VARARGS, (char *)"svn_ra_reporter3_t_abort_report_get(svn_ra_reporter3_t self) -> svn_error_t"},
+ { (char *)"svn_ra_version", _wrap_svn_ra_version, METH_VARARGS, (char *)"svn_ra_version() -> svn_version_t const *"},
+ { (char *)"svn_ra_reporter3_t_set_path_set", _wrap_svn_ra_reporter3_t_set_path_set, METH_VARARGS, (char *)"svn_ra_reporter3_t_set_path_set(svn_ra_reporter3_t self, svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_depth_t,svn_boolean_t,char const *,apr_pool_t *) set_path)"},
+ { (char *)"svn_ra_reporter3_t_set_path_get", _wrap_svn_ra_reporter3_t_set_path_get, METH_VARARGS, (char *)"svn_ra_reporter3_t_set_path_get(svn_ra_reporter3_t self) -> svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_depth_t,svn_boolean_t,char const *,apr_pool_t *)"},
+ { (char *)"svn_ra_reporter3_t_delete_path_set", _wrap_svn_ra_reporter3_t_delete_path_set, METH_VARARGS, (char *)"svn_ra_reporter3_t_delete_path_set(svn_ra_reporter3_t self, svn_error_t *(*)(void *,char const *,apr_pool_t *) delete_path)"},
+ { (char *)"svn_ra_reporter3_t_delete_path_get", _wrap_svn_ra_reporter3_t_delete_path_get, METH_VARARGS, (char *)"svn_ra_reporter3_t_delete_path_get(svn_ra_reporter3_t self) -> svn_error_t *(*)(void *,char const *,apr_pool_t *)"},
+ { (char *)"svn_ra_reporter3_t_link_path_set", _wrap_svn_ra_reporter3_t_link_path_set, METH_VARARGS, (char *)"svn_ra_reporter3_t_link_path_set(svn_ra_reporter3_t self, svn_error_t *(*)(void *,char const *,char const *,svn_revnum_t,svn_depth_t,svn_boolean_t,char const *,apr_pool_t *) link_path)"},
+ { (char *)"svn_ra_reporter3_t_link_path_get", _wrap_svn_ra_reporter3_t_link_path_get, METH_VARARGS, (char *)"svn_ra_reporter3_t_link_path_get(svn_ra_reporter3_t self) -> svn_error_t *(*)(void *,char const *,char const *,svn_revnum_t,svn_depth_t,svn_boolean_t,char const *,apr_pool_t *)"},
+ { (char *)"svn_ra_reporter3_t_finish_report_set", _wrap_svn_ra_reporter3_t_finish_report_set, METH_VARARGS, (char *)"svn_ra_reporter3_t_finish_report_set(svn_ra_reporter3_t self, svn_error_t *(*)(void *,apr_pool_t *) finish_report)"},
+ { (char *)"svn_ra_reporter3_t_finish_report_get", _wrap_svn_ra_reporter3_t_finish_report_get, METH_VARARGS, (char *)"svn_ra_reporter3_t_finish_report_get(svn_ra_reporter3_t self) -> svn_error_t *(*)(void *,apr_pool_t *)"},
+ { (char *)"svn_ra_reporter3_t_abort_report_set", _wrap_svn_ra_reporter3_t_abort_report_set, METH_VARARGS, (char *)"svn_ra_reporter3_t_abort_report_set(svn_ra_reporter3_t self, svn_error_t *(*)(void *,apr_pool_t *) abort_report)"},
+ { (char *)"svn_ra_reporter3_t_abort_report_get", _wrap_svn_ra_reporter3_t_abort_report_get, METH_VARARGS, (char *)"svn_ra_reporter3_t_abort_report_get(svn_ra_reporter3_t self) -> svn_error_t *(*)(void *,apr_pool_t *)"},
{ (char *)"new_svn_ra_reporter3_t", _wrap_new_svn_ra_reporter3_t, METH_VARARGS, (char *)"new_svn_ra_reporter3_t() -> svn_ra_reporter3_t"},
{ (char *)"delete_svn_ra_reporter3_t", _wrap_delete_svn_ra_reporter3_t, METH_VARARGS, (char *)"delete_svn_ra_reporter3_t(svn_ra_reporter3_t self)"},
{ (char *)"svn_ra_reporter3_t_swigregister", svn_ra_reporter3_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_ra_reporter2_t_set_path_set", _wrap_svn_ra_reporter2_t_set_path_set, METH_VARARGS, (char *)"svn_ra_reporter2_t_set_path_set(svn_ra_reporter2_t self, svn_error_t set_path)"},
- { (char *)"svn_ra_reporter2_t_set_path_get", _wrap_svn_ra_reporter2_t_set_path_get, METH_VARARGS, (char *)"svn_ra_reporter2_t_set_path_get(svn_ra_reporter2_t self) -> svn_error_t"},
- { (char *)"svn_ra_reporter2_t_delete_path_set", _wrap_svn_ra_reporter2_t_delete_path_set, METH_VARARGS, (char *)"svn_ra_reporter2_t_delete_path_set(svn_ra_reporter2_t self, svn_error_t delete_path)"},
- { (char *)"svn_ra_reporter2_t_delete_path_get", _wrap_svn_ra_reporter2_t_delete_path_get, METH_VARARGS, (char *)"svn_ra_reporter2_t_delete_path_get(svn_ra_reporter2_t self) -> svn_error_t"},
- { (char *)"svn_ra_reporter2_t_link_path_set", _wrap_svn_ra_reporter2_t_link_path_set, METH_VARARGS, (char *)"svn_ra_reporter2_t_link_path_set(svn_ra_reporter2_t self, svn_error_t link_path)"},
- { (char *)"svn_ra_reporter2_t_link_path_get", _wrap_svn_ra_reporter2_t_link_path_get, METH_VARARGS, (char *)"svn_ra_reporter2_t_link_path_get(svn_ra_reporter2_t self) -> svn_error_t"},
- { (char *)"svn_ra_reporter2_t_finish_report_set", _wrap_svn_ra_reporter2_t_finish_report_set, METH_VARARGS, (char *)"svn_ra_reporter2_t_finish_report_set(svn_ra_reporter2_t self, svn_error_t finish_report)"},
- { (char *)"svn_ra_reporter2_t_finish_report_get", _wrap_svn_ra_reporter2_t_finish_report_get, METH_VARARGS, (char *)"svn_ra_reporter2_t_finish_report_get(svn_ra_reporter2_t self) -> svn_error_t"},
- { (char *)"svn_ra_reporter2_t_abort_report_set", _wrap_svn_ra_reporter2_t_abort_report_set, METH_VARARGS, (char *)"svn_ra_reporter2_t_abort_report_set(svn_ra_reporter2_t self, svn_error_t abort_report)"},
- { (char *)"svn_ra_reporter2_t_abort_report_get", _wrap_svn_ra_reporter2_t_abort_report_get, METH_VARARGS, (char *)"svn_ra_reporter2_t_abort_report_get(svn_ra_reporter2_t self) -> svn_error_t"},
+ { (char *)"svn_ra_reporter2_t_set_path_set", _wrap_svn_ra_reporter2_t_set_path_set, METH_VARARGS, (char *)"svn_ra_reporter2_t_set_path_set(svn_ra_reporter2_t self, svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_boolean_t,char const *,apr_pool_t *) set_path)"},
+ { (char *)"svn_ra_reporter2_t_set_path_get", _wrap_svn_ra_reporter2_t_set_path_get, METH_VARARGS, (char *)"svn_ra_reporter2_t_set_path_get(svn_ra_reporter2_t self) -> svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_boolean_t,char const *,apr_pool_t *)"},
+ { (char *)"svn_ra_reporter2_t_delete_path_set", _wrap_svn_ra_reporter2_t_delete_path_set, METH_VARARGS, (char *)"svn_ra_reporter2_t_delete_path_set(svn_ra_reporter2_t self, svn_error_t *(*)(void *,char const *,apr_pool_t *) delete_path)"},
+ { (char *)"svn_ra_reporter2_t_delete_path_get", _wrap_svn_ra_reporter2_t_delete_path_get, METH_VARARGS, (char *)"svn_ra_reporter2_t_delete_path_get(svn_ra_reporter2_t self) -> svn_error_t *(*)(void *,char const *,apr_pool_t *)"},
+ { (char *)"svn_ra_reporter2_t_link_path_set", _wrap_svn_ra_reporter2_t_link_path_set, METH_VARARGS, (char *)"svn_ra_reporter2_t_link_path_set(svn_ra_reporter2_t self, svn_error_t *(*)(void *,char const *,char const *,svn_revnum_t,svn_boolean_t,char const *,apr_pool_t *) link_path)"},
+ { (char *)"svn_ra_reporter2_t_link_path_get", _wrap_svn_ra_reporter2_t_link_path_get, METH_VARARGS, (char *)"svn_ra_reporter2_t_link_path_get(svn_ra_reporter2_t self) -> svn_error_t *(*)(void *,char const *,char const *,svn_revnum_t,svn_boolean_t,char const *,apr_pool_t *)"},
+ { (char *)"svn_ra_reporter2_t_finish_report_set", _wrap_svn_ra_reporter2_t_finish_report_set, METH_VARARGS, (char *)"svn_ra_reporter2_t_finish_report_set(svn_ra_reporter2_t self, svn_error_t *(*)(void *,apr_pool_t *) finish_report)"},
+ { (char *)"svn_ra_reporter2_t_finish_report_get", _wrap_svn_ra_reporter2_t_finish_report_get, METH_VARARGS, (char *)"svn_ra_reporter2_t_finish_report_get(svn_ra_reporter2_t self) -> svn_error_t *(*)(void *,apr_pool_t *)"},
+ { (char *)"svn_ra_reporter2_t_abort_report_set", _wrap_svn_ra_reporter2_t_abort_report_set, METH_VARARGS, (char *)"svn_ra_reporter2_t_abort_report_set(svn_ra_reporter2_t self, svn_error_t *(*)(void *,apr_pool_t *) abort_report)"},
+ { (char *)"svn_ra_reporter2_t_abort_report_get", _wrap_svn_ra_reporter2_t_abort_report_get, METH_VARARGS, (char *)"svn_ra_reporter2_t_abort_report_get(svn_ra_reporter2_t self) -> svn_error_t *(*)(void *,apr_pool_t *)"},
{ (char *)"new_svn_ra_reporter2_t", _wrap_new_svn_ra_reporter2_t, METH_VARARGS, (char *)"new_svn_ra_reporter2_t() -> svn_ra_reporter2_t"},
{ (char *)"delete_svn_ra_reporter2_t", _wrap_delete_svn_ra_reporter2_t, METH_VARARGS, (char *)"delete_svn_ra_reporter2_t(svn_ra_reporter2_t self)"},
{ (char *)"svn_ra_reporter2_t_swigregister", svn_ra_reporter2_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_ra_reporter_t_set_path_set", _wrap_svn_ra_reporter_t_set_path_set, METH_VARARGS, (char *)"svn_ra_reporter_t_set_path_set(svn_ra_reporter_t self, svn_error_t set_path)"},
- { (char *)"svn_ra_reporter_t_set_path_get", _wrap_svn_ra_reporter_t_set_path_get, METH_VARARGS, (char *)"svn_ra_reporter_t_set_path_get(svn_ra_reporter_t self) -> svn_error_t"},
- { (char *)"svn_ra_reporter_t_delete_path_set", _wrap_svn_ra_reporter_t_delete_path_set, METH_VARARGS, (char *)"svn_ra_reporter_t_delete_path_set(svn_ra_reporter_t self, svn_error_t delete_path)"},
- { (char *)"svn_ra_reporter_t_delete_path_get", _wrap_svn_ra_reporter_t_delete_path_get, METH_VARARGS, (char *)"svn_ra_reporter_t_delete_path_get(svn_ra_reporter_t self) -> svn_error_t"},
- { (char *)"svn_ra_reporter_t_link_path_set", _wrap_svn_ra_reporter_t_link_path_set, METH_VARARGS, (char *)"svn_ra_reporter_t_link_path_set(svn_ra_reporter_t self, svn_error_t link_path)"},
- { (char *)"svn_ra_reporter_t_link_path_get", _wrap_svn_ra_reporter_t_link_path_get, METH_VARARGS, (char *)"svn_ra_reporter_t_link_path_get(svn_ra_reporter_t self) -> svn_error_t"},
- { (char *)"svn_ra_reporter_t_finish_report_set", _wrap_svn_ra_reporter_t_finish_report_set, METH_VARARGS, (char *)"svn_ra_reporter_t_finish_report_set(svn_ra_reporter_t self, svn_error_t finish_report)"},
- { (char *)"svn_ra_reporter_t_finish_report_get", _wrap_svn_ra_reporter_t_finish_report_get, METH_VARARGS, (char *)"svn_ra_reporter_t_finish_report_get(svn_ra_reporter_t self) -> svn_error_t"},
- { (char *)"svn_ra_reporter_t_abort_report_set", _wrap_svn_ra_reporter_t_abort_report_set, METH_VARARGS, (char *)"svn_ra_reporter_t_abort_report_set(svn_ra_reporter_t self, svn_error_t abort_report)"},
- { (char *)"svn_ra_reporter_t_abort_report_get", _wrap_svn_ra_reporter_t_abort_report_get, METH_VARARGS, (char *)"svn_ra_reporter_t_abort_report_get(svn_ra_reporter_t self) -> svn_error_t"},
+ { (char *)"svn_ra_reporter_t_set_path_set", _wrap_svn_ra_reporter_t_set_path_set, METH_VARARGS, (char *)"svn_ra_reporter_t_set_path_set(svn_ra_reporter_t self, svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_boolean_t,apr_pool_t *) set_path)"},
+ { (char *)"svn_ra_reporter_t_set_path_get", _wrap_svn_ra_reporter_t_set_path_get, METH_VARARGS, (char *)"svn_ra_reporter_t_set_path_get(svn_ra_reporter_t self) -> svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_boolean_t,apr_pool_t *)"},
+ { (char *)"svn_ra_reporter_t_delete_path_set", _wrap_svn_ra_reporter_t_delete_path_set, METH_VARARGS, (char *)"svn_ra_reporter_t_delete_path_set(svn_ra_reporter_t self, svn_error_t *(*)(void *,char const *,apr_pool_t *) delete_path)"},
+ { (char *)"svn_ra_reporter_t_delete_path_get", _wrap_svn_ra_reporter_t_delete_path_get, METH_VARARGS, (char *)"svn_ra_reporter_t_delete_path_get(svn_ra_reporter_t self) -> svn_error_t *(*)(void *,char const *,apr_pool_t *)"},
+ { (char *)"svn_ra_reporter_t_link_path_set", _wrap_svn_ra_reporter_t_link_path_set, METH_VARARGS, (char *)"svn_ra_reporter_t_link_path_set(svn_ra_reporter_t self, svn_error_t *(*)(void *,char const *,char const *,svn_revnum_t,svn_boolean_t,apr_pool_t *) link_path)"},
+ { (char *)"svn_ra_reporter_t_link_path_get", _wrap_svn_ra_reporter_t_link_path_get, METH_VARARGS, (char *)"svn_ra_reporter_t_link_path_get(svn_ra_reporter_t self) -> svn_error_t *(*)(void *,char const *,char const *,svn_revnum_t,svn_boolean_t,apr_pool_t *)"},
+ { (char *)"svn_ra_reporter_t_finish_report_set", _wrap_svn_ra_reporter_t_finish_report_set, METH_VARARGS, (char *)"svn_ra_reporter_t_finish_report_set(svn_ra_reporter_t self, svn_error_t *(*)(void *,apr_pool_t *) finish_report)"},
+ { (char *)"svn_ra_reporter_t_finish_report_get", _wrap_svn_ra_reporter_t_finish_report_get, METH_VARARGS, (char *)"svn_ra_reporter_t_finish_report_get(svn_ra_reporter_t self) -> svn_error_t *(*)(void *,apr_pool_t *)"},
+ { (char *)"svn_ra_reporter_t_abort_report_set", _wrap_svn_ra_reporter_t_abort_report_set, METH_VARARGS, (char *)"svn_ra_reporter_t_abort_report_set(svn_ra_reporter_t self, svn_error_t *(*)(void *,apr_pool_t *) abort_report)"},
+ { (char *)"svn_ra_reporter_t_abort_report_get", _wrap_svn_ra_reporter_t_abort_report_get, METH_VARARGS, (char *)"svn_ra_reporter_t_abort_report_get(svn_ra_reporter_t self) -> svn_error_t *(*)(void *,apr_pool_t *)"},
{ (char *)"new_svn_ra_reporter_t", _wrap_new_svn_ra_reporter_t, METH_VARARGS, (char *)"new_svn_ra_reporter_t() -> svn_ra_reporter_t"},
{ (char *)"delete_svn_ra_reporter_t", _wrap_delete_svn_ra_reporter_t, METH_VARARGS, (char *)"delete_svn_ra_reporter_t(svn_ra_reporter_t self)"},
{ (char *)"svn_ra_reporter_t_swigregister", svn_ra_reporter_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_ra_callbacks2_t_open_tmp_file_set", _wrap_svn_ra_callbacks2_t_open_tmp_file_set, METH_VARARGS, (char *)"svn_ra_callbacks2_t_open_tmp_file_set(svn_ra_callbacks2_t self, svn_error_t open_tmp_file)"},
- { (char *)"svn_ra_callbacks2_t_open_tmp_file_get", _wrap_svn_ra_callbacks2_t_open_tmp_file_get, METH_VARARGS, (char *)"svn_ra_callbacks2_t_open_tmp_file_get(svn_ra_callbacks2_t self) -> svn_error_t"},
- { (char *)"svn_ra_callbacks2_t_auth_baton_set", _wrap_svn_ra_callbacks2_t_auth_baton_set, METH_VARARGS, (char *)"svn_ra_callbacks2_t_auth_baton_set(svn_ra_callbacks2_t self, svn_auth_baton_t auth_baton)"},
- { (char *)"svn_ra_callbacks2_t_auth_baton_get", _wrap_svn_ra_callbacks2_t_auth_baton_get, METH_VARARGS, (char *)"svn_ra_callbacks2_t_auth_baton_get(svn_ra_callbacks2_t self) -> svn_auth_baton_t"},
+ { (char *)"svn_ra_callbacks2_t_open_tmp_file_set", _wrap_svn_ra_callbacks2_t_open_tmp_file_set, METH_VARARGS, (char *)"svn_ra_callbacks2_t_open_tmp_file_set(svn_ra_callbacks2_t self, svn_error_t *(*)(apr_file_t **,void *,apr_pool_t *) open_tmp_file)"},
+ { (char *)"svn_ra_callbacks2_t_open_tmp_file_get", _wrap_svn_ra_callbacks2_t_open_tmp_file_get, METH_VARARGS, (char *)"svn_ra_callbacks2_t_open_tmp_file_get(svn_ra_callbacks2_t self) -> svn_error_t *(*)(apr_file_t **,void *,apr_pool_t *)"},
+ { (char *)"svn_ra_callbacks2_t_auth_baton_set", _wrap_svn_ra_callbacks2_t_auth_baton_set, METH_VARARGS, (char *)"svn_ra_callbacks2_t_auth_baton_set(svn_ra_callbacks2_t self, svn_auth_baton_t * auth_baton)"},
+ { (char *)"svn_ra_callbacks2_t_auth_baton_get", _wrap_svn_ra_callbacks2_t_auth_baton_get, METH_VARARGS, (char *)"svn_ra_callbacks2_t_auth_baton_get(svn_ra_callbacks2_t self) -> svn_auth_baton_t *"},
{ (char *)"svn_ra_callbacks2_t_get_wc_prop_set", _wrap_svn_ra_callbacks2_t_get_wc_prop_set, METH_VARARGS, (char *)"svn_ra_callbacks2_t_get_wc_prop_set(svn_ra_callbacks2_t self, svn_ra_get_wc_prop_func_t get_wc_prop)"},
{ (char *)"svn_ra_callbacks2_t_get_wc_prop_get", _wrap_svn_ra_callbacks2_t_get_wc_prop_get, METH_VARARGS, (char *)"svn_ra_callbacks2_t_get_wc_prop_get(svn_ra_callbacks2_t self) -> svn_ra_get_wc_prop_func_t"},
{ (char *)"svn_ra_callbacks2_t_set_wc_prop_set", _wrap_svn_ra_callbacks2_t_set_wc_prop_set, METH_VARARGS, (char *)"svn_ra_callbacks2_t_set_wc_prop_set(svn_ra_callbacks2_t self, svn_ra_set_wc_prop_func_t set_wc_prop)"},
@@ -16617,19 +17218,21 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_ra_callbacks2_t_invalidate_wc_props_get", _wrap_svn_ra_callbacks2_t_invalidate_wc_props_get, METH_VARARGS, (char *)"svn_ra_callbacks2_t_invalidate_wc_props_get(svn_ra_callbacks2_t self) -> svn_ra_invalidate_wc_props_func_t"},
{ (char *)"svn_ra_callbacks2_t_progress_func_set", _wrap_svn_ra_callbacks2_t_progress_func_set, METH_VARARGS, (char *)"svn_ra_callbacks2_t_progress_func_set(svn_ra_callbacks2_t self, svn_ra_progress_notify_func_t progress_func)"},
{ (char *)"svn_ra_callbacks2_t_progress_func_get", _wrap_svn_ra_callbacks2_t_progress_func_get, METH_VARARGS, (char *)"svn_ra_callbacks2_t_progress_func_get(svn_ra_callbacks2_t self) -> svn_ra_progress_notify_func_t"},
- { (char *)"svn_ra_callbacks2_t_progress_baton_set", _wrap_svn_ra_callbacks2_t_progress_baton_set, METH_VARARGS, (char *)"svn_ra_callbacks2_t_progress_baton_set(svn_ra_callbacks2_t self, void progress_baton)"},
- { (char *)"svn_ra_callbacks2_t_progress_baton_get", _wrap_svn_ra_callbacks2_t_progress_baton_get, METH_VARARGS, (char *)"svn_ra_callbacks2_t_progress_baton_get(svn_ra_callbacks2_t self) -> void"},
+ { (char *)"svn_ra_callbacks2_t_progress_baton_set", _wrap_svn_ra_callbacks2_t_progress_baton_set, METH_VARARGS, (char *)"svn_ra_callbacks2_t_progress_baton_set(svn_ra_callbacks2_t self, void * progress_baton)"},
+ { (char *)"svn_ra_callbacks2_t_progress_baton_get", _wrap_svn_ra_callbacks2_t_progress_baton_get, METH_VARARGS, (char *)"svn_ra_callbacks2_t_progress_baton_get(svn_ra_callbacks2_t self) -> void *"},
{ (char *)"svn_ra_callbacks2_t_cancel_func_set", _wrap_svn_ra_callbacks2_t_cancel_func_set, METH_VARARGS, (char *)"svn_ra_callbacks2_t_cancel_func_set(svn_ra_callbacks2_t self, svn_cancel_func_t cancel_func)"},
{ (char *)"svn_ra_callbacks2_t_cancel_func_get", _wrap_svn_ra_callbacks2_t_cancel_func_get, METH_VARARGS, (char *)"svn_ra_callbacks2_t_cancel_func_get(svn_ra_callbacks2_t self) -> svn_cancel_func_t"},
{ (char *)"svn_ra_callbacks2_t_get_client_string_set", _wrap_svn_ra_callbacks2_t_get_client_string_set, METH_VARARGS, (char *)"svn_ra_callbacks2_t_get_client_string_set(svn_ra_callbacks2_t self, svn_ra_get_client_string_func_t get_client_string)"},
{ (char *)"svn_ra_callbacks2_t_get_client_string_get", _wrap_svn_ra_callbacks2_t_get_client_string_get, METH_VARARGS, (char *)"svn_ra_callbacks2_t_get_client_string_get(svn_ra_callbacks2_t self) -> svn_ra_get_client_string_func_t"},
+ { (char *)"svn_ra_callbacks2_t_get_wc_contents_set", _wrap_svn_ra_callbacks2_t_get_wc_contents_set, METH_VARARGS, (char *)"svn_ra_callbacks2_t_get_wc_contents_set(svn_ra_callbacks2_t self, svn_ra_get_wc_contents_func_t get_wc_contents)"},
+ { (char *)"svn_ra_callbacks2_t_get_wc_contents_get", _wrap_svn_ra_callbacks2_t_get_wc_contents_get, METH_VARARGS, (char *)"svn_ra_callbacks2_t_get_wc_contents_get(svn_ra_callbacks2_t self) -> svn_ra_get_wc_contents_func_t"},
{ (char *)"new_svn_ra_callbacks2_t", _wrap_new_svn_ra_callbacks2_t, METH_VARARGS, (char *)"new_svn_ra_callbacks2_t() -> svn_ra_callbacks2_t"},
{ (char *)"delete_svn_ra_callbacks2_t", _wrap_delete_svn_ra_callbacks2_t, METH_VARARGS, (char *)"delete_svn_ra_callbacks2_t(svn_ra_callbacks2_t self)"},
{ (char *)"svn_ra_callbacks2_t_swigregister", svn_ra_callbacks2_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_ra_callbacks_t_open_tmp_file_set", _wrap_svn_ra_callbacks_t_open_tmp_file_set, METH_VARARGS, (char *)"svn_ra_callbacks_t_open_tmp_file_set(svn_ra_callbacks_t self, svn_error_t open_tmp_file)"},
- { (char *)"svn_ra_callbacks_t_open_tmp_file_get", _wrap_svn_ra_callbacks_t_open_tmp_file_get, METH_VARARGS, (char *)"svn_ra_callbacks_t_open_tmp_file_get(svn_ra_callbacks_t self) -> svn_error_t"},
- { (char *)"svn_ra_callbacks_t_auth_baton_set", _wrap_svn_ra_callbacks_t_auth_baton_set, METH_VARARGS, (char *)"svn_ra_callbacks_t_auth_baton_set(svn_ra_callbacks_t self, svn_auth_baton_t auth_baton)"},
- { (char *)"svn_ra_callbacks_t_auth_baton_get", _wrap_svn_ra_callbacks_t_auth_baton_get, METH_VARARGS, (char *)"svn_ra_callbacks_t_auth_baton_get(svn_ra_callbacks_t self) -> svn_auth_baton_t"},
+ { (char *)"svn_ra_callbacks_t_open_tmp_file_set", _wrap_svn_ra_callbacks_t_open_tmp_file_set, METH_VARARGS, (char *)"svn_ra_callbacks_t_open_tmp_file_set(svn_ra_callbacks_t self, svn_error_t *(*)(apr_file_t **,void *,apr_pool_t *) open_tmp_file)"},
+ { (char *)"svn_ra_callbacks_t_open_tmp_file_get", _wrap_svn_ra_callbacks_t_open_tmp_file_get, METH_VARARGS, (char *)"svn_ra_callbacks_t_open_tmp_file_get(svn_ra_callbacks_t self) -> svn_error_t *(*)(apr_file_t **,void *,apr_pool_t *)"},
+ { (char *)"svn_ra_callbacks_t_auth_baton_set", _wrap_svn_ra_callbacks_t_auth_baton_set, METH_VARARGS, (char *)"svn_ra_callbacks_t_auth_baton_set(svn_ra_callbacks_t self, svn_auth_baton_t * auth_baton)"},
+ { (char *)"svn_ra_callbacks_t_auth_baton_get", _wrap_svn_ra_callbacks_t_auth_baton_get, METH_VARARGS, (char *)"svn_ra_callbacks_t_auth_baton_get(svn_ra_callbacks_t self) -> svn_auth_baton_t *"},
{ (char *)"svn_ra_callbacks_t_get_wc_prop_set", _wrap_svn_ra_callbacks_t_get_wc_prop_set, METH_VARARGS, (char *)"svn_ra_callbacks_t_get_wc_prop_set(svn_ra_callbacks_t self, svn_ra_get_wc_prop_func_t get_wc_prop)"},
{ (char *)"svn_ra_callbacks_t_get_wc_prop_get", _wrap_svn_ra_callbacks_t_get_wc_prop_get, METH_VARARGS, (char *)"svn_ra_callbacks_t_get_wc_prop_get(svn_ra_callbacks_t self) -> svn_ra_get_wc_prop_func_t"},
{ (char *)"svn_ra_callbacks_t_set_wc_prop_set", _wrap_svn_ra_callbacks_t_set_wc_prop_set, METH_VARARGS, (char *)"svn_ra_callbacks_t_set_wc_prop_set(svn_ra_callbacks_t self, svn_ra_set_wc_prop_func_t set_wc_prop)"},
@@ -16644,457 +17247,383 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_ra_initialize", _wrap_svn_ra_initialize, METH_VARARGS, (char *)"svn_ra_initialize(apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_ra_create_callbacks", _wrap_svn_ra_create_callbacks, METH_VARARGS, (char *)"svn_ra_create_callbacks(apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_ra_open4", _wrap_svn_ra_open4, METH_VARARGS, (char *)"\n"
- "svn_ra_open4(char repos_URL, char uuid, svn_ra_callbacks2_t callbacks, \n"
- " apr_hash_t config, apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_open4(char const * repos_URL, char const * uuid, svn_ra_callbacks2_t callbacks, apr_hash_t config, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_open3", _wrap_svn_ra_open3, METH_VARARGS, (char *)"\n"
- "svn_ra_open3(char repos_URL, char uuid, svn_ra_callbacks2_t callbacks, \n"
- " apr_hash_t config, apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_ra_open2", _wrap_svn_ra_open2, METH_VARARGS, (char *)"\n"
- "svn_ra_open2(char repos_URL, svn_ra_callbacks2_t callbacks, apr_hash_t config, \n"
+ "svn_ra_open3(char const * repos_URL, char const * uuid, svn_ra_callbacks2_t callbacks, apr_hash_t config, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_ra_open2", _wrap_svn_ra_open2, METH_VARARGS, (char *)"svn_ra_open2(char const * repos_URL, svn_ra_callbacks2_t callbacks, apr_hash_t config, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_ra_open", _wrap_svn_ra_open, METH_VARARGS, (char *)"\n"
- "svn_ra_open(char repos_URL, svn_ra_callbacks_t callbacks, void callback_baton, \n"
- " apr_hash_t config, apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_open(char const * repos_URL, svn_ra_callbacks_t callbacks, void * callback_baton, apr_hash_t config, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_ra_reparent", _wrap_svn_ra_reparent, METH_VARARGS, (char *)"svn_ra_reparent(svn_ra_session_t ra_session, char url, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_ra_get_session_url", _wrap_svn_ra_get_session_url, METH_VARARGS, (char *)"svn_ra_get_session_url(svn_ra_session_t ra_session, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_ra_get_path_relative_to_session", _wrap_svn_ra_get_path_relative_to_session, METH_VARARGS, (char *)"svn_ra_get_path_relative_to_session(svn_ra_session_t ra_session, char url, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_ra_get_path_relative_to_root", _wrap_svn_ra_get_path_relative_to_root, METH_VARARGS, (char *)"svn_ra_get_path_relative_to_root(svn_ra_session_t ra_session, char url, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_ra_get_latest_revnum", _wrap_svn_ra_get_latest_revnum, METH_VARARGS, (char *)"svn_ra_get_latest_revnum(svn_ra_session_t session, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_ra_get_dated_revision", _wrap_svn_ra_get_dated_revision, METH_VARARGS, (char *)"svn_ra_get_dated_revision(svn_ra_session_t session, apr_time_t tm, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_reparent", _wrap_svn_ra_reparent, METH_VARARGS, (char *)"svn_ra_reparent(svn_ra_session_t * ra_session, char const * url, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_get_session_url", _wrap_svn_ra_get_session_url, METH_VARARGS, (char *)"svn_ra_get_session_url(svn_ra_session_t * ra_session, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_get_path_relative_to_session", _wrap_svn_ra_get_path_relative_to_session, METH_VARARGS, (char *)"svn_ra_get_path_relative_to_session(svn_ra_session_t * ra_session, char const * url, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_get_path_relative_to_root", _wrap_svn_ra_get_path_relative_to_root, METH_VARARGS, (char *)"svn_ra_get_path_relative_to_root(svn_ra_session_t * ra_session, char const * url, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_get_latest_revnum", _wrap_svn_ra_get_latest_revnum, METH_VARARGS, (char *)"svn_ra_get_latest_revnum(svn_ra_session_t * session, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_get_dated_revision", _wrap_svn_ra_get_dated_revision, METH_VARARGS, (char *)"svn_ra_get_dated_revision(svn_ra_session_t * session, apr_time_t tm, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_ra_change_rev_prop2", _wrap_svn_ra_change_rev_prop2, METH_VARARGS, (char *)"\n"
- "svn_ra_change_rev_prop2(svn_ra_session_t session, svn_revnum_t rev, char name, \n"
- " svn_string_t old_value_p, svn_string_t value, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_change_rev_prop2(svn_ra_session_t * session, svn_revnum_t rev, char const * name, svn_string_t const *const * old_value_p, \n"
+ " svn_string_t const * value, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_change_rev_prop", _wrap_svn_ra_change_rev_prop, METH_VARARGS, (char *)"\n"
- "svn_ra_change_rev_prop(svn_ra_session_t session, svn_revnum_t rev, char name, \n"
- " svn_string_t value, apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_ra_rev_proplist", _wrap_svn_ra_rev_proplist, METH_VARARGS, (char *)"svn_ra_rev_proplist(svn_ra_session_t session, svn_revnum_t rev, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_ra_rev_prop", _wrap_svn_ra_rev_prop, METH_VARARGS, (char *)"\n"
- "svn_ra_rev_prop(svn_ra_session_t session, svn_revnum_t rev, char name, \n"
+ "svn_ra_change_rev_prop(svn_ra_session_t * session, svn_revnum_t rev, char const * name, svn_string_t const * value, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_ra_rev_proplist", _wrap_svn_ra_rev_proplist, METH_VARARGS, (char *)"svn_ra_rev_proplist(svn_ra_session_t * session, svn_revnum_t rev, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_rev_prop", _wrap_svn_ra_rev_prop, METH_VARARGS, (char *)"svn_ra_rev_prop(svn_ra_session_t * session, svn_revnum_t rev, char const * name, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_ra_get_commit_editor3", _wrap_svn_ra_get_commit_editor3, METH_VARARGS, (char *)"\n"
- "svn_ra_get_commit_editor3(svn_ra_session_t session, apr_hash_t revprop_table, \n"
- " svn_commit_callback2_t callback, apr_hash_t lock_tokens, \n"
- " svn_boolean_t keep_locks, apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_get_commit_editor3(svn_ra_session_t * session, apr_hash_t revprop_table, svn_commit_callback2_t commit_callback, \n"
+ " apr_hash_t lock_tokens, svn_boolean_t keep_locks, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_get_commit_editor2", _wrap_svn_ra_get_commit_editor2, METH_VARARGS, (char *)"\n"
- "svn_ra_get_commit_editor2(svn_ra_session_t session, char log_msg, svn_commit_callback2_t callback, \n"
- " apr_hash_t lock_tokens, \n"
- " svn_boolean_t keep_locks, apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_get_commit_editor2(svn_ra_session_t * session, char const * log_msg, svn_commit_callback2_t commit_callback, \n"
+ " apr_hash_t lock_tokens, svn_boolean_t keep_locks, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_get_commit_editor", _wrap_svn_ra_get_commit_editor, METH_VARARGS, (char *)"\n"
- "svn_ra_get_commit_editor(svn_ra_session_t session, char log_msg, svn_commit_callback_t callback, \n"
- " apr_hash_t lock_tokens, \n"
- " svn_boolean_t keep_locks, apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_get_commit_editor(svn_ra_session_t * session, char const * log_msg, svn_commit_callback_t callback, \n"
+ " apr_hash_t lock_tokens, svn_boolean_t keep_locks, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_get_file", _wrap_svn_ra_get_file, METH_VARARGS, (char *)"\n"
- "svn_ra_get_file(svn_ra_session_t session, char path, svn_revnum_t revision, \n"
- " svn_stream_t stream, apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_get_file(svn_ra_session_t * session, char const * path, svn_revnum_t revision, svn_stream_t * stream, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_get_dir2", _wrap_svn_ra_get_dir2, METH_VARARGS, (char *)"\n"
- "svn_ra_get_dir2(svn_ra_session_t session, char path, svn_revnum_t revision, \n"
- " apr_uint32_t dirent_fields, apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_ra_get_dir", _wrap_svn_ra_get_dir, METH_VARARGS, (char *)"\n"
- "svn_ra_get_dir(svn_ra_session_t session, char path, svn_revnum_t revision, \n"
+ "svn_ra_get_dir2(svn_ra_session_t * session, char const * path, svn_revnum_t revision, apr_uint32_t dirent_fields, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_ra_get_dir", _wrap_svn_ra_get_dir, METH_VARARGS, (char *)"svn_ra_get_dir(svn_ra_session_t * session, char const * path, svn_revnum_t revision, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_ra_get_mergeinfo", _wrap_svn_ra_get_mergeinfo, METH_VARARGS, (char *)"\n"
- "svn_ra_get_mergeinfo(svn_ra_session_t session, apr_array_header_t paths, \n"
- " svn_revnum_t revision, svn_mergeinfo_inheritance_t inherit, \n"
- " svn_boolean_t include_descendants, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_get_mergeinfo(svn_ra_session_t * session, apr_array_header_t paths, svn_revnum_t revision, svn_mergeinfo_inheritance_t inherit, \n"
+ " svn_boolean_t include_descendants, apr_pool_t pool) -> svn_error_t\n"
+ ""},
+ { (char *)"svn_ra_do_update3", _wrap_svn_ra_do_update3, METH_VARARGS, (char *)"\n"
+ "svn_ra_do_update3(svn_ra_session_t * session, svn_revnum_t revision_to_update_to, char const * update_target, \n"
+ " svn_depth_t depth, svn_boolean_t send_copyfrom_args, svn_boolean_t ignore_ancestry, \n"
+ " svn_delta_editor_t update_editor, void * update_baton, \n"
+ " apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_do_update2", _wrap_svn_ra_do_update2, METH_VARARGS, (char *)"\n"
- "svn_ra_do_update2(svn_ra_session_t session, svn_revnum_t revision_to_update_to, \n"
- " char update_target, svn_depth_t depth, \n"
- " svn_boolean_t send_copyfrom_args, svn_delta_editor_t update_editor, \n"
- " void update_baton, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_do_update2(svn_ra_session_t * session, svn_revnum_t revision_to_update_to, char const * update_target, \n"
+ " svn_depth_t depth, svn_boolean_t send_copyfrom_args, svn_delta_editor_t update_editor, \n"
+ " void * update_baton, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_do_update", _wrap_svn_ra_do_update, METH_VARARGS, (char *)"\n"
- "svn_ra_do_update(svn_ra_session_t session, svn_revnum_t revision_to_update_to, \n"
- " char update_target, svn_boolean_t recurse, \n"
- " svn_delta_editor_t update_editor, void update_baton, \n"
+ "svn_ra_do_update(svn_ra_session_t * session, svn_revnum_t revision_to_update_to, char const * update_target, \n"
+ " svn_boolean_t recurse, svn_delta_editor_t update_editor, void * update_baton, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_ra_do_switch3", _wrap_svn_ra_do_switch3, METH_VARARGS, (char *)"\n"
+ "svn_ra_do_switch3(svn_ra_session_t * session, svn_revnum_t revision_to_switch_to, char const * switch_target, \n"
+ " svn_depth_t depth, char const * switch_url, svn_boolean_t send_copyfrom_args, \n"
+ " svn_boolean_t ignore_ancestry, svn_delta_editor_t switch_editor, \n"
+ " void * switch_baton, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t\n"
+ ""},
{ (char *)"svn_ra_do_switch2", _wrap_svn_ra_do_switch2, METH_VARARGS, (char *)"\n"
- "svn_ra_do_switch2(svn_ra_session_t session, svn_revnum_t revision_to_switch_to, \n"
- " char switch_target, svn_depth_t depth, \n"
- " char switch_url, svn_delta_editor_t switch_editor, \n"
- " void switch_baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_do_switch2(svn_ra_session_t * session, svn_revnum_t revision_to_switch_to, char const * switch_target, \n"
+ " svn_depth_t depth, char const * switch_url, svn_delta_editor_t switch_editor, \n"
+ " void * switch_baton, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_do_switch", _wrap_svn_ra_do_switch, METH_VARARGS, (char *)"\n"
- "svn_ra_do_switch(svn_ra_session_t session, svn_revnum_t revision_to_switch_to, \n"
- " char switch_target, svn_boolean_t recurse, \n"
- " char switch_url, svn_delta_editor_t switch_editor, \n"
- " void switch_baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_do_switch(svn_ra_session_t * session, svn_revnum_t revision_to_switch_to, char const * switch_target, \n"
+ " svn_boolean_t recurse, char const * switch_url, svn_delta_editor_t switch_editor, \n"
+ " void * switch_baton, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_do_status2", _wrap_svn_ra_do_status2, METH_VARARGS, (char *)"\n"
- "svn_ra_do_status2(svn_ra_session_t session, char status_target, svn_revnum_t revision, \n"
- " svn_depth_t depth, svn_delta_editor_t status_editor, \n"
- " void status_baton, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_do_status2(svn_ra_session_t * session, char const * status_target, svn_revnum_t revision, svn_depth_t depth, \n"
+ " svn_delta_editor_t status_editor, void * status_baton, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_do_status", _wrap_svn_ra_do_status, METH_VARARGS, (char *)"\n"
- "svn_ra_do_status(svn_ra_session_t session, char status_target, svn_revnum_t revision, \n"
- " svn_boolean_t recurse, svn_delta_editor_t status_editor, \n"
- " void status_baton, \n"
+ "svn_ra_do_status(svn_ra_session_t * session, char const * status_target, svn_revnum_t revision, svn_boolean_t recurse, \n"
+ " svn_delta_editor_t status_editor, void * status_baton, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_do_diff3", _wrap_svn_ra_do_diff3, METH_VARARGS, (char *)"\n"
- "svn_ra_do_diff3(svn_ra_session_t session, svn_revnum_t revision, char diff_target, \n"
- " svn_depth_t depth, svn_boolean_t ignore_ancestry, \n"
- " svn_boolean_t text_deltas, \n"
- " char versus_url, svn_delta_editor_t diff_editor, \n"
- " void diff_baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_do_diff3(svn_ra_session_t * session, svn_revnum_t revision, char const * diff_target, svn_depth_t depth, \n"
+ " svn_boolean_t ignore_ancestry, svn_boolean_t text_deltas, char const * versus_url, \n"
+ " svn_delta_editor_t diff_editor, void * diff_baton, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_do_diff2", _wrap_svn_ra_do_diff2, METH_VARARGS, (char *)"\n"
- "svn_ra_do_diff2(svn_ra_session_t session, svn_revnum_t revision, char diff_target, \n"
- " svn_boolean_t recurse, svn_boolean_t ignore_ancestry, \n"
- " svn_boolean_t text_deltas, \n"
- " char versus_url, svn_delta_editor_t diff_editor, \n"
- " void diff_baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_do_diff2(svn_ra_session_t * session, svn_revnum_t revision, char const * diff_target, svn_boolean_t recurse, \n"
+ " svn_boolean_t ignore_ancestry, svn_boolean_t text_deltas, \n"
+ " char const * versus_url, svn_delta_editor_t diff_editor, void * diff_baton, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_do_diff", _wrap_svn_ra_do_diff, METH_VARARGS, (char *)"\n"
- "svn_ra_do_diff(svn_ra_session_t session, svn_revnum_t revision, char diff_target, \n"
- " svn_boolean_t recurse, svn_boolean_t ignore_ancestry, \n"
- " char versus_url, svn_delta_editor_t diff_editor, \n"
- " void diff_baton, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_do_diff(svn_ra_session_t * session, svn_revnum_t revision, char const * diff_target, svn_boolean_t recurse, \n"
+ " svn_boolean_t ignore_ancestry, char const * versus_url, \n"
+ " svn_delta_editor_t diff_editor, void * diff_baton, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_get_log2", _wrap_svn_ra_get_log2, METH_VARARGS, (char *)"\n"
- "svn_ra_get_log2(svn_ra_session_t session, apr_array_header_t paths, \n"
- " svn_revnum_t start, svn_revnum_t end, int limit, \n"
- " svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history, \n"
- " svn_boolean_t include_merged_revisions, \n"
- " apr_array_header_t revprops, \n"
- " svn_log_entry_receiver_t receiver, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_get_log2(svn_ra_session_t * session, apr_array_header_t paths, svn_revnum_t start, svn_revnum_t end, \n"
+ " int limit, svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history, \n"
+ " svn_boolean_t include_merged_revisions, apr_array_header_t revprops, \n"
+ " svn_log_entry_receiver_t receiver, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_get_log", _wrap_svn_ra_get_log, METH_VARARGS, (char *)"\n"
- "svn_ra_get_log(svn_ra_session_t session, apr_array_header_t paths, \n"
- " svn_revnum_t start, svn_revnum_t end, int limit, \n"
- " svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history, \n"
- " svn_log_message_receiver_t receiver, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_get_log(svn_ra_session_t * session, apr_array_header_t paths, svn_revnum_t start, svn_revnum_t end, \n"
+ " int limit, svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history, \n"
+ " svn_log_message_receiver_t receiver, apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_ra_check_path", _wrap_svn_ra_check_path, METH_VARARGS, (char *)"\n"
- "svn_ra_check_path(svn_ra_session_t session, char path, svn_revnum_t revision, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_ra_stat", _wrap_svn_ra_stat, METH_VARARGS, (char *)"\n"
- "svn_ra_stat(svn_ra_session_t session, char path, svn_revnum_t revision, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_ra_get_uuid2", _wrap_svn_ra_get_uuid2, METH_VARARGS, (char *)"svn_ra_get_uuid2(svn_ra_session_t session, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_ra_get_uuid", _wrap_svn_ra_get_uuid, METH_VARARGS, (char *)"svn_ra_get_uuid(svn_ra_session_t session, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_ra_get_repos_root2", _wrap_svn_ra_get_repos_root2, METH_VARARGS, (char *)"svn_ra_get_repos_root2(svn_ra_session_t session, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_ra_get_repos_root", _wrap_svn_ra_get_repos_root, METH_VARARGS, (char *)"svn_ra_get_repos_root(svn_ra_session_t session, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_check_path", _wrap_svn_ra_check_path, METH_VARARGS, (char *)"svn_ra_check_path(svn_ra_session_t * session, char const * path, svn_revnum_t revision, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_stat", _wrap_svn_ra_stat, METH_VARARGS, (char *)"svn_ra_stat(svn_ra_session_t * session, char const * path, svn_revnum_t revision, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_get_uuid2", _wrap_svn_ra_get_uuid2, METH_VARARGS, (char *)"svn_ra_get_uuid2(svn_ra_session_t * session, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_get_uuid", _wrap_svn_ra_get_uuid, METH_VARARGS, (char *)"svn_ra_get_uuid(svn_ra_session_t * session, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_get_repos_root2", _wrap_svn_ra_get_repos_root2, METH_VARARGS, (char *)"svn_ra_get_repos_root2(svn_ra_session_t * session, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_get_repos_root", _wrap_svn_ra_get_repos_root, METH_VARARGS, (char *)"svn_ra_get_repos_root(svn_ra_session_t * session, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_ra_get_locations", _wrap_svn_ra_get_locations, METH_VARARGS, (char *)"\n"
- "svn_ra_get_locations(svn_ra_session_t session, char path, svn_revnum_t peg_revision, \n"
- " apr_array_header_t location_revisions, \n"
+ "svn_ra_get_locations(svn_ra_session_t * session, char const * path, svn_revnum_t peg_revision, apr_array_header_t location_revisions, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_get_location_segments", _wrap_svn_ra_get_location_segments, METH_VARARGS, (char *)"\n"
- "svn_ra_get_location_segments(svn_ra_session_t session, char path, svn_revnum_t peg_revision, \n"
- " svn_revnum_t start_rev, svn_revnum_t end_rev, \n"
- " svn_location_segment_receiver_t receiver, \n"
+ "svn_ra_get_location_segments(svn_ra_session_t * session, char const * path, svn_revnum_t peg_revision, svn_revnum_t start_rev, \n"
+ " svn_revnum_t end_rev, svn_location_segment_receiver_t receiver, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_get_file_revs2", _wrap_svn_ra_get_file_revs2, METH_VARARGS, (char *)"\n"
- "svn_ra_get_file_revs2(svn_ra_session_t session, char path, svn_revnum_t start, \n"
- " svn_revnum_t end, svn_boolean_t include_merged_revisions, \n"
- " svn_file_rev_handler_t handler, \n"
- " void handler_baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_get_file_revs2(svn_ra_session_t * session, char const * path, svn_revnum_t start, svn_revnum_t end, \n"
+ " svn_boolean_t include_merged_revisions, svn_file_rev_handler_t handler, \n"
+ " void * handler_baton, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_get_file_revs", _wrap_svn_ra_get_file_revs, METH_VARARGS, (char *)"\n"
- "svn_ra_get_file_revs(svn_ra_session_t session, char path, svn_revnum_t start, \n"
- " svn_revnum_t end, svn_ra_file_rev_handler_t handler, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_get_file_revs(svn_ra_session_t * session, char const * path, svn_revnum_t start, svn_revnum_t end, \n"
+ " svn_ra_file_rev_handler_t handler, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_lock", _wrap_svn_ra_lock, METH_VARARGS, (char *)"\n"
- "svn_ra_lock(svn_ra_session_t session, apr_hash_t path_revs, char comment, \n"
- " svn_boolean_t steal_lock, svn_ra_lock_callback_t lock_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_lock(svn_ra_session_t * session, apr_hash_t path_revs, char const * comment, svn_boolean_t steal_lock, \n"
+ " svn_ra_lock_callback_t lock_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_unlock", _wrap_svn_ra_unlock, METH_VARARGS, (char *)"\n"
- "svn_ra_unlock(svn_ra_session_t session, apr_hash_t path_tokens, svn_boolean_t break_lock, \n"
- " svn_ra_lock_callback_t lock_func, \n"
+ "svn_ra_unlock(svn_ra_session_t * session, apr_hash_t path_tokens, svn_boolean_t break_lock, svn_ra_lock_callback_t lock_func, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_ra_get_lock", _wrap_svn_ra_get_lock, METH_VARARGS, (char *)"svn_ra_get_lock(svn_ra_session_t session, char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_ra_get_locks2", _wrap_svn_ra_get_locks2, METH_VARARGS, (char *)"\n"
- "svn_ra_get_locks2(svn_ra_session_t session, char path, svn_depth_t depth, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_ra_get_locks", _wrap_svn_ra_get_locks, METH_VARARGS, (char *)"svn_ra_get_locks(svn_ra_session_t session, char path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_get_lock", _wrap_svn_ra_get_lock, METH_VARARGS, (char *)"svn_ra_get_lock(svn_ra_session_t * session, char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_get_locks2", _wrap_svn_ra_get_locks2, METH_VARARGS, (char *)"svn_ra_get_locks2(svn_ra_session_t * session, char const * path, svn_depth_t depth, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_get_locks", _wrap_svn_ra_get_locks, METH_VARARGS, (char *)"svn_ra_get_locks(svn_ra_session_t * session, char const * path, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_ra_replay_range", _wrap_svn_ra_replay_range, METH_VARARGS, (char *)"\n"
- "svn_ra_replay_range(svn_ra_session_t session, svn_revnum_t start_revision, \n"
- " svn_revnum_t end_revision, svn_revnum_t low_water_mark, \n"
- " svn_boolean_t send_deltas, svn_ra_replay_revstart_callback_t revstart_func, \n"
+ "svn_ra_replay_range(svn_ra_session_t * session, svn_revnum_t start_revision, svn_revnum_t end_revision, \n"
+ " svn_revnum_t low_water_mark, svn_boolean_t send_deltas, svn_ra_replay_revstart_callback_t revstart_func, \n"
" svn_ra_replay_revfinish_callback_t revfinish_func, \n"
- " void replay_baton, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ " void * replay_baton, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_replay", _wrap_svn_ra_replay, METH_VARARGS, (char *)"\n"
- "svn_ra_replay(svn_ra_session_t session, svn_revnum_t revision, svn_revnum_t low_water_mark, \n"
- " svn_boolean_t send_deltas, \n"
- " svn_delta_editor_t editor, void edit_baton, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_replay(svn_ra_session_t * session, svn_revnum_t revision, svn_revnum_t low_water_mark, svn_boolean_t send_deltas, \n"
+ " svn_delta_editor_t editor, void * edit_baton, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_get_deleted_rev", _wrap_svn_ra_get_deleted_rev, METH_VARARGS, (char *)"\n"
- "svn_ra_get_deleted_rev(svn_ra_session_t session, char path, svn_revnum_t peg_revision, \n"
- " svn_revnum_t end_revision, apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_get_deleted_rev(svn_ra_session_t * session, char const * path, svn_revnum_t peg_revision, svn_revnum_t end_revision, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
+ ""},
+ { (char *)"svn_ra_get_inherited_props", _wrap_svn_ra_get_inherited_props, METH_VARARGS, (char *)"\n"
+ "svn_ra_get_inherited_props(svn_ra_session_t * session, char const * path, svn_revnum_t revision, apr_pool_t result_pool, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
- { (char *)"svn_ra_has_capability", _wrap_svn_ra_has_capability, METH_VARARGS, (char *)"svn_ra_has_capability(svn_ra_session_t session, char capability, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_ra_print_modules", _wrap_svn_ra_print_modules, METH_VARARGS, (char *)"svn_ra_print_modules(svn_stringbuf_t output, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_ra_print_ra_libraries", _wrap_svn_ra_print_ra_libraries, METH_VARARGS, (char *)"svn_ra_print_ra_libraries(void ra_baton, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_ra_plugin_t_name_set", _wrap_svn_ra_plugin_t_name_set, METH_VARARGS, (char *)"svn_ra_plugin_t_name_set(svn_ra_plugin_t self, char name)"},
- { (char *)"svn_ra_plugin_t_name_get", _wrap_svn_ra_plugin_t_name_get, METH_VARARGS, (char *)"svn_ra_plugin_t_name_get(svn_ra_plugin_t self) -> char"},
- { (char *)"svn_ra_plugin_t_description_set", _wrap_svn_ra_plugin_t_description_set, METH_VARARGS, (char *)"svn_ra_plugin_t_description_set(svn_ra_plugin_t self, char description)"},
- { (char *)"svn_ra_plugin_t_description_get", _wrap_svn_ra_plugin_t_description_get, METH_VARARGS, (char *)"svn_ra_plugin_t_description_get(svn_ra_plugin_t self) -> char"},
- { (char *)"svn_ra_plugin_t_open_set", _wrap_svn_ra_plugin_t_open_set, METH_VARARGS, (char *)"svn_ra_plugin_t_open_set(svn_ra_plugin_t self, svn_error_t open)"},
- { (char *)"svn_ra_plugin_t_open_get", _wrap_svn_ra_plugin_t_open_get, METH_VARARGS, (char *)"svn_ra_plugin_t_open_get(svn_ra_plugin_t self) -> svn_error_t"},
- { (char *)"svn_ra_plugin_t_get_latest_revnum_set", _wrap_svn_ra_plugin_t_get_latest_revnum_set, METH_VARARGS, (char *)"svn_ra_plugin_t_get_latest_revnum_set(svn_ra_plugin_t self, svn_error_t get_latest_revnum)"},
- { (char *)"svn_ra_plugin_t_get_latest_revnum_get", _wrap_svn_ra_plugin_t_get_latest_revnum_get, METH_VARARGS, (char *)"svn_ra_plugin_t_get_latest_revnum_get(svn_ra_plugin_t self) -> svn_error_t"},
- { (char *)"svn_ra_plugin_t_get_dated_revision_set", _wrap_svn_ra_plugin_t_get_dated_revision_set, METH_VARARGS, (char *)"svn_ra_plugin_t_get_dated_revision_set(svn_ra_plugin_t self, svn_error_t get_dated_revision)"},
- { (char *)"svn_ra_plugin_t_get_dated_revision_get", _wrap_svn_ra_plugin_t_get_dated_revision_get, METH_VARARGS, (char *)"svn_ra_plugin_t_get_dated_revision_get(svn_ra_plugin_t self) -> svn_error_t"},
- { (char *)"svn_ra_plugin_t_change_rev_prop_set", _wrap_svn_ra_plugin_t_change_rev_prop_set, METH_VARARGS, (char *)"svn_ra_plugin_t_change_rev_prop_set(svn_ra_plugin_t self, svn_error_t change_rev_prop)"},
- { (char *)"svn_ra_plugin_t_change_rev_prop_get", _wrap_svn_ra_plugin_t_change_rev_prop_get, METH_VARARGS, (char *)"svn_ra_plugin_t_change_rev_prop_get(svn_ra_plugin_t self) -> svn_error_t"},
- { (char *)"svn_ra_plugin_t_rev_proplist_set", _wrap_svn_ra_plugin_t_rev_proplist_set, METH_VARARGS, (char *)"svn_ra_plugin_t_rev_proplist_set(svn_ra_plugin_t self, svn_error_t rev_proplist)"},
- { (char *)"svn_ra_plugin_t_rev_proplist_get", _wrap_svn_ra_plugin_t_rev_proplist_get, METH_VARARGS, (char *)"svn_ra_plugin_t_rev_proplist_get(svn_ra_plugin_t self) -> svn_error_t"},
- { (char *)"svn_ra_plugin_t_rev_prop_set", _wrap_svn_ra_plugin_t_rev_prop_set, METH_VARARGS, (char *)"svn_ra_plugin_t_rev_prop_set(svn_ra_plugin_t self, svn_error_t rev_prop)"},
- { (char *)"svn_ra_plugin_t_rev_prop_get", _wrap_svn_ra_plugin_t_rev_prop_get, METH_VARARGS, (char *)"svn_ra_plugin_t_rev_prop_get(svn_ra_plugin_t self) -> svn_error_t"},
- { (char *)"svn_ra_plugin_t_get_commit_editor_set", _wrap_svn_ra_plugin_t_get_commit_editor_set, METH_VARARGS, (char *)"svn_ra_plugin_t_get_commit_editor_set(svn_ra_plugin_t self, svn_error_t get_commit_editor)"},
- { (char *)"svn_ra_plugin_t_get_commit_editor_get", _wrap_svn_ra_plugin_t_get_commit_editor_get, METH_VARARGS, (char *)"svn_ra_plugin_t_get_commit_editor_get(svn_ra_plugin_t self) -> svn_error_t"},
- { (char *)"svn_ra_plugin_t_get_file_set", _wrap_svn_ra_plugin_t_get_file_set, METH_VARARGS, (char *)"svn_ra_plugin_t_get_file_set(svn_ra_plugin_t self, svn_error_t get_file)"},
- { (char *)"svn_ra_plugin_t_get_file_get", _wrap_svn_ra_plugin_t_get_file_get, METH_VARARGS, (char *)"svn_ra_plugin_t_get_file_get(svn_ra_plugin_t self) -> svn_error_t"},
- { (char *)"svn_ra_plugin_t_get_dir_set", _wrap_svn_ra_plugin_t_get_dir_set, METH_VARARGS, (char *)"svn_ra_plugin_t_get_dir_set(svn_ra_plugin_t self, svn_error_t get_dir)"},
- { (char *)"svn_ra_plugin_t_get_dir_get", _wrap_svn_ra_plugin_t_get_dir_get, METH_VARARGS, (char *)"svn_ra_plugin_t_get_dir_get(svn_ra_plugin_t self) -> svn_error_t"},
- { (char *)"svn_ra_plugin_t_do_update_set", _wrap_svn_ra_plugin_t_do_update_set, METH_VARARGS, (char *)"svn_ra_plugin_t_do_update_set(svn_ra_plugin_t self, svn_error_t do_update)"},
- { (char *)"svn_ra_plugin_t_do_update_get", _wrap_svn_ra_plugin_t_do_update_get, METH_VARARGS, (char *)"svn_ra_plugin_t_do_update_get(svn_ra_plugin_t self) -> svn_error_t"},
- { (char *)"svn_ra_plugin_t_do_switch_set", _wrap_svn_ra_plugin_t_do_switch_set, METH_VARARGS, (char *)"svn_ra_plugin_t_do_switch_set(svn_ra_plugin_t self, svn_error_t do_switch)"},
- { (char *)"svn_ra_plugin_t_do_switch_get", _wrap_svn_ra_plugin_t_do_switch_get, METH_VARARGS, (char *)"svn_ra_plugin_t_do_switch_get(svn_ra_plugin_t self) -> svn_error_t"},
- { (char *)"svn_ra_plugin_t_do_status_set", _wrap_svn_ra_plugin_t_do_status_set, METH_VARARGS, (char *)"svn_ra_plugin_t_do_status_set(svn_ra_plugin_t self, svn_error_t do_status)"},
- { (char *)"svn_ra_plugin_t_do_status_get", _wrap_svn_ra_plugin_t_do_status_get, METH_VARARGS, (char *)"svn_ra_plugin_t_do_status_get(svn_ra_plugin_t self) -> svn_error_t"},
- { (char *)"svn_ra_plugin_t_do_diff_set", _wrap_svn_ra_plugin_t_do_diff_set, METH_VARARGS, (char *)"svn_ra_plugin_t_do_diff_set(svn_ra_plugin_t self, svn_error_t do_diff)"},
- { (char *)"svn_ra_plugin_t_do_diff_get", _wrap_svn_ra_plugin_t_do_diff_get, METH_VARARGS, (char *)"svn_ra_plugin_t_do_diff_get(svn_ra_plugin_t self) -> svn_error_t"},
- { (char *)"svn_ra_plugin_t_get_log_set", _wrap_svn_ra_plugin_t_get_log_set, METH_VARARGS, (char *)"svn_ra_plugin_t_get_log_set(svn_ra_plugin_t self, svn_error_t get_log)"},
- { (char *)"svn_ra_plugin_t_get_log_get", _wrap_svn_ra_plugin_t_get_log_get, METH_VARARGS, (char *)"svn_ra_plugin_t_get_log_get(svn_ra_plugin_t self) -> svn_error_t"},
- { (char *)"svn_ra_plugin_t_check_path_set", _wrap_svn_ra_plugin_t_check_path_set, METH_VARARGS, (char *)"svn_ra_plugin_t_check_path_set(svn_ra_plugin_t self, svn_error_t check_path)"},
- { (char *)"svn_ra_plugin_t_check_path_get", _wrap_svn_ra_plugin_t_check_path_get, METH_VARARGS, (char *)"svn_ra_plugin_t_check_path_get(svn_ra_plugin_t self) -> svn_error_t"},
- { (char *)"svn_ra_plugin_t_get_uuid_set", _wrap_svn_ra_plugin_t_get_uuid_set, METH_VARARGS, (char *)"svn_ra_plugin_t_get_uuid_set(svn_ra_plugin_t self, svn_error_t get_uuid)"},
- { (char *)"svn_ra_plugin_t_get_uuid_get", _wrap_svn_ra_plugin_t_get_uuid_get, METH_VARARGS, (char *)"svn_ra_plugin_t_get_uuid_get(svn_ra_plugin_t self) -> svn_error_t"},
- { (char *)"svn_ra_plugin_t_get_repos_root_set", _wrap_svn_ra_plugin_t_get_repos_root_set, METH_VARARGS, (char *)"svn_ra_plugin_t_get_repos_root_set(svn_ra_plugin_t self, svn_error_t get_repos_root)"},
- { (char *)"svn_ra_plugin_t_get_repos_root_get", _wrap_svn_ra_plugin_t_get_repos_root_get, METH_VARARGS, (char *)"svn_ra_plugin_t_get_repos_root_get(svn_ra_plugin_t self) -> svn_error_t"},
- { (char *)"svn_ra_plugin_t_get_locations_set", _wrap_svn_ra_plugin_t_get_locations_set, METH_VARARGS, (char *)"svn_ra_plugin_t_get_locations_set(svn_ra_plugin_t self, svn_error_t get_locations)"},
- { (char *)"svn_ra_plugin_t_get_locations_get", _wrap_svn_ra_plugin_t_get_locations_get, METH_VARARGS, (char *)"svn_ra_plugin_t_get_locations_get(svn_ra_plugin_t self) -> svn_error_t"},
- { (char *)"svn_ra_plugin_t_get_file_revs_set", _wrap_svn_ra_plugin_t_get_file_revs_set, METH_VARARGS, (char *)"svn_ra_plugin_t_get_file_revs_set(svn_ra_plugin_t self, svn_error_t get_file_revs)"},
- { (char *)"svn_ra_plugin_t_get_file_revs_get", _wrap_svn_ra_plugin_t_get_file_revs_get, METH_VARARGS, (char *)"svn_ra_plugin_t_get_file_revs_get(svn_ra_plugin_t self) -> svn_error_t"},
- { (char *)"svn_ra_plugin_t_get_version_set", _wrap_svn_ra_plugin_t_get_version_set, METH_VARARGS, (char *)"svn_ra_plugin_t_get_version_set(svn_ra_plugin_t self, svn_version_t get_version)"},
- { (char *)"svn_ra_plugin_t_get_version_get", _wrap_svn_ra_plugin_t_get_version_get, METH_VARARGS, (char *)"svn_ra_plugin_t_get_version_get(svn_ra_plugin_t self) -> svn_version_t"},
+ { (char *)"svn_ra_has_capability", _wrap_svn_ra_has_capability, METH_VARARGS, (char *)"svn_ra_has_capability(svn_ra_session_t * session, char const * capability, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_print_modules", _wrap_svn_ra_print_modules, METH_VARARGS, (char *)"svn_ra_print_modules(svn_stringbuf_t * output, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_print_ra_libraries", _wrap_svn_ra_print_ra_libraries, METH_VARARGS, (char *)"svn_ra_print_ra_libraries(void * ra_baton, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_plugin_t_name_set", _wrap_svn_ra_plugin_t_name_set, METH_VARARGS, (char *)"svn_ra_plugin_t_name_set(svn_ra_plugin_t self, char const * name)"},
+ { (char *)"svn_ra_plugin_t_name_get", _wrap_svn_ra_plugin_t_name_get, METH_VARARGS, (char *)"svn_ra_plugin_t_name_get(svn_ra_plugin_t self) -> char const *"},
+ { (char *)"svn_ra_plugin_t_description_set", _wrap_svn_ra_plugin_t_description_set, METH_VARARGS, (char *)"svn_ra_plugin_t_description_set(svn_ra_plugin_t self, char const * description)"},
+ { (char *)"svn_ra_plugin_t_description_get", _wrap_svn_ra_plugin_t_description_get, METH_VARARGS, (char *)"svn_ra_plugin_t_description_get(svn_ra_plugin_t self) -> char const *"},
+ { (char *)"svn_ra_plugin_t_open_set", _wrap_svn_ra_plugin_t_open_set, METH_VARARGS, (char *)"svn_ra_plugin_t_open_set(svn_ra_plugin_t self, svn_error_t *(*)(void **,char const *,svn_ra_callbacks_t const *,void *,apr_hash_t *,apr_pool_t *) open)"},
+ { (char *)"svn_ra_plugin_t_open_get", _wrap_svn_ra_plugin_t_open_get, METH_VARARGS, (char *)"svn_ra_plugin_t_open_get(svn_ra_plugin_t self) -> svn_error_t *(*)(void **,char const *,svn_ra_callbacks_t const *,void *,apr_hash_t *,apr_pool_t *)"},
+ { (char *)"svn_ra_plugin_t_get_latest_revnum_set", _wrap_svn_ra_plugin_t_get_latest_revnum_set, METH_VARARGS, (char *)"svn_ra_plugin_t_get_latest_revnum_set(svn_ra_plugin_t self, svn_error_t *(*)(void *,svn_revnum_t *,apr_pool_t *) get_latest_revnum)"},
+ { (char *)"svn_ra_plugin_t_get_latest_revnum_get", _wrap_svn_ra_plugin_t_get_latest_revnum_get, METH_VARARGS, (char *)"svn_ra_plugin_t_get_latest_revnum_get(svn_ra_plugin_t self) -> svn_error_t *(*)(void *,svn_revnum_t *,apr_pool_t *)"},
+ { (char *)"svn_ra_plugin_t_get_dated_revision_set", _wrap_svn_ra_plugin_t_get_dated_revision_set, METH_VARARGS, (char *)"svn_ra_plugin_t_get_dated_revision_set(svn_ra_plugin_t self, svn_error_t *(*)(void *,svn_revnum_t *,apr_time_t,apr_pool_t *) get_dated_revision)"},
+ { (char *)"svn_ra_plugin_t_get_dated_revision_get", _wrap_svn_ra_plugin_t_get_dated_revision_get, METH_VARARGS, (char *)"svn_ra_plugin_t_get_dated_revision_get(svn_ra_plugin_t self) -> svn_error_t *(*)(void *,svn_revnum_t *,apr_time_t,apr_pool_t *)"},
+ { (char *)"svn_ra_plugin_t_change_rev_prop_set", _wrap_svn_ra_plugin_t_change_rev_prop_set, METH_VARARGS, (char *)"svn_ra_plugin_t_change_rev_prop_set(svn_ra_plugin_t self, svn_error_t *(*)(void *,svn_revnum_t,char const *,svn_string_t const *,apr_pool_t *) change_rev_prop)"},
+ { (char *)"svn_ra_plugin_t_change_rev_prop_get", _wrap_svn_ra_plugin_t_change_rev_prop_get, METH_VARARGS, (char *)"svn_ra_plugin_t_change_rev_prop_get(svn_ra_plugin_t self) -> svn_error_t *(*)(void *,svn_revnum_t,char const *,svn_string_t const *,apr_pool_t *)"},
+ { (char *)"svn_ra_plugin_t_rev_proplist_set", _wrap_svn_ra_plugin_t_rev_proplist_set, METH_VARARGS, (char *)"svn_ra_plugin_t_rev_proplist_set(svn_ra_plugin_t self, svn_error_t *(*)(void *,svn_revnum_t,apr_hash_t **,apr_pool_t *) rev_proplist)"},
+ { (char *)"svn_ra_plugin_t_rev_proplist_get", _wrap_svn_ra_plugin_t_rev_proplist_get, METH_VARARGS, (char *)"svn_ra_plugin_t_rev_proplist_get(svn_ra_plugin_t self) -> svn_error_t *(*)(void *,svn_revnum_t,apr_hash_t **,apr_pool_t *)"},
+ { (char *)"svn_ra_plugin_t_rev_prop_set", _wrap_svn_ra_plugin_t_rev_prop_set, METH_VARARGS, (char *)"svn_ra_plugin_t_rev_prop_set(svn_ra_plugin_t self, svn_error_t *(*)(void *,svn_revnum_t,char const *,svn_string_t **,apr_pool_t *) rev_prop)"},
+ { (char *)"svn_ra_plugin_t_rev_prop_get", _wrap_svn_ra_plugin_t_rev_prop_get, METH_VARARGS, (char *)"svn_ra_plugin_t_rev_prop_get(svn_ra_plugin_t self) -> svn_error_t *(*)(void *,svn_revnum_t,char const *,svn_string_t **,apr_pool_t *)"},
+ { (char *)"svn_ra_plugin_t_get_commit_editor_set", _wrap_svn_ra_plugin_t_get_commit_editor_set, METH_VARARGS, (char *)"svn_ra_plugin_t_get_commit_editor_set(svn_ra_plugin_t self, svn_error_t *(*)(void *,svn_delta_editor_t const **,void **,char const *,svn_commit_callback_t,void *,apr_pool_t *) get_commit_editor)"},
+ { (char *)"svn_ra_plugin_t_get_commit_editor_get", _wrap_svn_ra_plugin_t_get_commit_editor_get, METH_VARARGS, (char *)"svn_ra_plugin_t_get_commit_editor_get(svn_ra_plugin_t self) -> svn_error_t *(*)(void *,svn_delta_editor_t const **,void **,char const *,svn_commit_callback_t,void *,apr_pool_t *)"},
+ { (char *)"svn_ra_plugin_t_get_file_set", _wrap_svn_ra_plugin_t_get_file_set, METH_VARARGS, (char *)"svn_ra_plugin_t_get_file_set(svn_ra_plugin_t self, svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_stream_t *,svn_revnum_t *,apr_hash_t **,apr_pool_t *) get_file)"},
+ { (char *)"svn_ra_plugin_t_get_file_get", _wrap_svn_ra_plugin_t_get_file_get, METH_VARARGS, (char *)"svn_ra_plugin_t_get_file_get(svn_ra_plugin_t self) -> svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_stream_t *,svn_revnum_t *,apr_hash_t **,apr_pool_t *)"},
+ { (char *)"svn_ra_plugin_t_get_dir_set", _wrap_svn_ra_plugin_t_get_dir_set, METH_VARARGS, (char *)"svn_ra_plugin_t_get_dir_set(svn_ra_plugin_t self, svn_error_t *(*)(void *,char const *,svn_revnum_t,apr_hash_t **,svn_revnum_t *,apr_hash_t **,apr_pool_t *) get_dir)"},
+ { (char *)"svn_ra_plugin_t_get_dir_get", _wrap_svn_ra_plugin_t_get_dir_get, METH_VARARGS, (char *)"svn_ra_plugin_t_get_dir_get(svn_ra_plugin_t self) -> svn_error_t *(*)(void *,char const *,svn_revnum_t,apr_hash_t **,svn_revnum_t *,apr_hash_t **,apr_pool_t *)"},
+ { (char *)"svn_ra_plugin_t_do_update_set", _wrap_svn_ra_plugin_t_do_update_set, METH_VARARGS, (char *)"svn_ra_plugin_t_do_update_set(svn_ra_plugin_t self, svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *) do_update)"},
+ { (char *)"svn_ra_plugin_t_do_update_get", _wrap_svn_ra_plugin_t_do_update_get, METH_VARARGS, (char *)"svn_ra_plugin_t_do_update_get(svn_ra_plugin_t self) -> svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *)"},
+ { (char *)"svn_ra_plugin_t_do_switch_set", _wrap_svn_ra_plugin_t_do_switch_set, METH_VARARGS, (char *)"svn_ra_plugin_t_do_switch_set(svn_ra_plugin_t self, svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *) do_switch)"},
+ { (char *)"svn_ra_plugin_t_do_switch_get", _wrap_svn_ra_plugin_t_do_switch_get, METH_VARARGS, (char *)"svn_ra_plugin_t_do_switch_get(svn_ra_plugin_t self) -> svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *)"},
+ { (char *)"svn_ra_plugin_t_do_status_set", _wrap_svn_ra_plugin_t_do_status_set, METH_VARARGS, (char *)"svn_ra_plugin_t_do_status_set(svn_ra_plugin_t self, svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,char const *,svn_revnum_t,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *) do_status)"},
+ { (char *)"svn_ra_plugin_t_do_status_get", _wrap_svn_ra_plugin_t_do_status_get, METH_VARARGS, (char *)"svn_ra_plugin_t_do_status_get(svn_ra_plugin_t self) -> svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,char const *,svn_revnum_t,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *)"},
+ { (char *)"svn_ra_plugin_t_do_diff_set", _wrap_svn_ra_plugin_t_do_diff_set, METH_VARARGS, (char *)"svn_ra_plugin_t_do_diff_set(svn_ra_plugin_t self, svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *) do_diff)"},
+ { (char *)"svn_ra_plugin_t_do_diff_get", _wrap_svn_ra_plugin_t_do_diff_get, METH_VARARGS, (char *)"svn_ra_plugin_t_do_diff_get(svn_ra_plugin_t self) -> svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *)"},
+ { (char *)"svn_ra_plugin_t_get_log_set", _wrap_svn_ra_plugin_t_get_log_set, METH_VARARGS, (char *)"svn_ra_plugin_t_get_log_set(svn_ra_plugin_t self, svn_error_t *(*)(void *,apr_array_header_t const *,svn_revnum_t,svn_revnum_t,svn_boolean_t,svn_boolean_t,svn_log_message_receiver_t,void *,apr_pool_t *) get_log)"},
+ { (char *)"svn_ra_plugin_t_get_log_get", _wrap_svn_ra_plugin_t_get_log_get, METH_VARARGS, (char *)"svn_ra_plugin_t_get_log_get(svn_ra_plugin_t self) -> svn_error_t *(*)(void *,apr_array_header_t const *,svn_revnum_t,svn_revnum_t,svn_boolean_t,svn_boolean_t,svn_log_message_receiver_t,void *,apr_pool_t *)"},
+ { (char *)"svn_ra_plugin_t_check_path_set", _wrap_svn_ra_plugin_t_check_path_set, METH_VARARGS, (char *)"svn_ra_plugin_t_check_path_set(svn_ra_plugin_t self, svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_node_kind_t *,apr_pool_t *) check_path)"},
+ { (char *)"svn_ra_plugin_t_check_path_get", _wrap_svn_ra_plugin_t_check_path_get, METH_VARARGS, (char *)"svn_ra_plugin_t_check_path_get(svn_ra_plugin_t self) -> svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_node_kind_t *,apr_pool_t *)"},
+ { (char *)"svn_ra_plugin_t_get_uuid_set", _wrap_svn_ra_plugin_t_get_uuid_set, METH_VARARGS, (char *)"svn_ra_plugin_t_get_uuid_set(svn_ra_plugin_t self, svn_error_t *(*)(void *,char const **,apr_pool_t *) get_uuid)"},
+ { (char *)"svn_ra_plugin_t_get_uuid_get", _wrap_svn_ra_plugin_t_get_uuid_get, METH_VARARGS, (char *)"svn_ra_plugin_t_get_uuid_get(svn_ra_plugin_t self) -> svn_error_t *(*)(void *,char const **,apr_pool_t *)"},
+ { (char *)"svn_ra_plugin_t_get_repos_root_set", _wrap_svn_ra_plugin_t_get_repos_root_set, METH_VARARGS, (char *)"svn_ra_plugin_t_get_repos_root_set(svn_ra_plugin_t self, svn_error_t *(*)(void *,char const **,apr_pool_t *) get_repos_root)"},
+ { (char *)"svn_ra_plugin_t_get_repos_root_get", _wrap_svn_ra_plugin_t_get_repos_root_get, METH_VARARGS, (char *)"svn_ra_plugin_t_get_repos_root_get(svn_ra_plugin_t self) -> svn_error_t *(*)(void *,char const **,apr_pool_t *)"},
+ { (char *)"svn_ra_plugin_t_get_locations_set", _wrap_svn_ra_plugin_t_get_locations_set, METH_VARARGS, (char *)"svn_ra_plugin_t_get_locations_set(svn_ra_plugin_t self, svn_error_t *(*)(void *,apr_hash_t **,char const *,svn_revnum_t,apr_array_header_t *,apr_pool_t *) get_locations)"},
+ { (char *)"svn_ra_plugin_t_get_locations_get", _wrap_svn_ra_plugin_t_get_locations_get, METH_VARARGS, (char *)"svn_ra_plugin_t_get_locations_get(svn_ra_plugin_t self) -> svn_error_t *(*)(void *,apr_hash_t **,char const *,svn_revnum_t,apr_array_header_t *,apr_pool_t *)"},
+ { (char *)"svn_ra_plugin_t_get_file_revs_set", _wrap_svn_ra_plugin_t_get_file_revs_set, METH_VARARGS, (char *)"svn_ra_plugin_t_get_file_revs_set(svn_ra_plugin_t self, svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_revnum_t,svn_ra_file_rev_handler_t,void *,apr_pool_t *) get_file_revs)"},
+ { (char *)"svn_ra_plugin_t_get_file_revs_get", _wrap_svn_ra_plugin_t_get_file_revs_get, METH_VARARGS, (char *)"svn_ra_plugin_t_get_file_revs_get(svn_ra_plugin_t self) -> svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_revnum_t,svn_ra_file_rev_handler_t,void *,apr_pool_t *)"},
+ { (char *)"svn_ra_plugin_t_get_version_set", _wrap_svn_ra_plugin_t_get_version_set, METH_VARARGS, (char *)"svn_ra_plugin_t_get_version_set(svn_ra_plugin_t self, svn_version_t const *(*)(void) get_version)"},
+ { (char *)"svn_ra_plugin_t_get_version_get", _wrap_svn_ra_plugin_t_get_version_get, METH_VARARGS, (char *)"svn_ra_plugin_t_get_version_get(svn_ra_plugin_t self) -> svn_version_t const *(*)(void)"},
{ (char *)"new_svn_ra_plugin_t", _wrap_new_svn_ra_plugin_t, METH_VARARGS, (char *)"new_svn_ra_plugin_t() -> svn_ra_plugin_t"},
{ (char *)"delete_svn_ra_plugin_t", _wrap_delete_svn_ra_plugin_t, METH_VARARGS, (char *)"delete_svn_ra_plugin_t(svn_ra_plugin_t self)"},
{ (char *)"svn_ra_plugin_t_swigregister", svn_ra_plugin_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_ra_init_ra_libs", _wrap_svn_ra_init_ra_libs, METH_VARARGS, (char *)"svn_ra_init_ra_libs(apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_ra_get_ra_library", _wrap_svn_ra_get_ra_library, METH_VARARGS, (char *)"svn_ra_get_ra_library(void ra_baton, char url, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_get_ra_library", _wrap_svn_ra_get_ra_library, METH_VARARGS, (char *)"svn_ra_get_ra_library(void * ra_baton, char const * url, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_ra_session_t_swigregister", svn_ra_session_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_ra_reporter3_invoke_set_path", _wrap_svn_ra_reporter3_invoke_set_path, METH_VARARGS, (char *)"\n"
- "svn_ra_reporter3_invoke_set_path(svn_ra_reporter3_t _obj, void report_baton, char path, \n"
- " svn_revnum_t revision, svn_depth_t depth, \n"
- " svn_boolean_t start_empty, char lock_token, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_ra_reporter3_invoke_delete_path", _wrap_svn_ra_reporter3_invoke_delete_path, METH_VARARGS, (char *)"\n"
- "svn_ra_reporter3_invoke_delete_path(svn_ra_reporter3_t _obj, void report_baton, char path, \n"
+ "svn_ra_reporter3_invoke_set_path(svn_ra_reporter3_t _obj, void * report_baton, char const * path, svn_revnum_t revision, \n"
+ " svn_depth_t depth, svn_boolean_t start_empty, char const * lock_token, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_ra_reporter3_invoke_delete_path", _wrap_svn_ra_reporter3_invoke_delete_path, METH_VARARGS, (char *)"svn_ra_reporter3_invoke_delete_path(svn_ra_reporter3_t _obj, void * report_baton, char const * path, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_ra_reporter3_invoke_link_path", _wrap_svn_ra_reporter3_invoke_link_path, METH_VARARGS, (char *)"\n"
- "svn_ra_reporter3_invoke_link_path(svn_ra_reporter3_t _obj, void report_baton, char path, \n"
- " char url, svn_revnum_t revision, svn_depth_t depth, \n"
- " svn_boolean_t start_empty, char lock_token, \n"
+ "svn_ra_reporter3_invoke_link_path(svn_ra_reporter3_t _obj, void * report_baton, char const * path, char const * url, \n"
+ " svn_revnum_t revision, svn_depth_t depth, svn_boolean_t start_empty, char const * lock_token, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_ra_reporter3_invoke_finish_report", _wrap_svn_ra_reporter3_invoke_finish_report, METH_VARARGS, (char *)"svn_ra_reporter3_invoke_finish_report(svn_ra_reporter3_t _obj, void report_baton, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_ra_reporter3_invoke_abort_report", _wrap_svn_ra_reporter3_invoke_abort_report, METH_VARARGS, (char *)"svn_ra_reporter3_invoke_abort_report(svn_ra_reporter3_t _obj, void report_baton, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_reporter3_invoke_finish_report", _wrap_svn_ra_reporter3_invoke_finish_report, METH_VARARGS, (char *)"svn_ra_reporter3_invoke_finish_report(svn_ra_reporter3_t _obj, void * report_baton, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_reporter3_invoke_abort_report", _wrap_svn_ra_reporter3_invoke_abort_report, METH_VARARGS, (char *)"svn_ra_reporter3_invoke_abort_report(svn_ra_reporter3_t _obj, void * report_baton, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_ra_reporter2_invoke_set_path", _wrap_svn_ra_reporter2_invoke_set_path, METH_VARARGS, (char *)"\n"
- "svn_ra_reporter2_invoke_set_path(svn_ra_reporter2_t _obj, void report_baton, char path, \n"
- " svn_revnum_t revision, svn_boolean_t start_empty, \n"
- " char lock_token, apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_ra_reporter2_invoke_delete_path", _wrap_svn_ra_reporter2_invoke_delete_path, METH_VARARGS, (char *)"\n"
- "svn_ra_reporter2_invoke_delete_path(svn_ra_reporter2_t _obj, void report_baton, char path, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_reporter2_invoke_set_path(svn_ra_reporter2_t _obj, void * report_baton, char const * path, svn_revnum_t revision, \n"
+ " svn_boolean_t start_empty, char const * lock_token, apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_ra_reporter2_invoke_delete_path", _wrap_svn_ra_reporter2_invoke_delete_path, METH_VARARGS, (char *)"svn_ra_reporter2_invoke_delete_path(svn_ra_reporter2_t _obj, void * report_baton, char const * path, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_ra_reporter2_invoke_link_path", _wrap_svn_ra_reporter2_invoke_link_path, METH_VARARGS, (char *)"\n"
- "svn_ra_reporter2_invoke_link_path(svn_ra_reporter2_t _obj, void report_baton, char path, \n"
- " char url, svn_revnum_t revision, svn_boolean_t start_empty, \n"
- " char lock_token, apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_ra_reporter2_invoke_finish_report", _wrap_svn_ra_reporter2_invoke_finish_report, METH_VARARGS, (char *)"svn_ra_reporter2_invoke_finish_report(svn_ra_reporter2_t _obj, void report_baton, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_ra_reporter2_invoke_abort_report", _wrap_svn_ra_reporter2_invoke_abort_report, METH_VARARGS, (char *)"svn_ra_reporter2_invoke_abort_report(svn_ra_reporter2_t _obj, void report_baton, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_ra_reporter_invoke_set_path", _wrap_svn_ra_reporter_invoke_set_path, METH_VARARGS, (char *)"\n"
- "svn_ra_reporter_invoke_set_path(svn_ra_reporter_t _obj, void report_baton, char path, \n"
- " svn_revnum_t revision, svn_boolean_t start_empty, \n"
+ "svn_ra_reporter2_invoke_link_path(svn_ra_reporter2_t _obj, void * report_baton, char const * path, char const * url, \n"
+ " svn_revnum_t revision, svn_boolean_t start_empty, char const * lock_token, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_ra_reporter_invoke_delete_path", _wrap_svn_ra_reporter_invoke_delete_path, METH_VARARGS, (char *)"\n"
- "svn_ra_reporter_invoke_delete_path(svn_ra_reporter_t _obj, void report_baton, char path, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ { (char *)"svn_ra_reporter2_invoke_finish_report", _wrap_svn_ra_reporter2_invoke_finish_report, METH_VARARGS, (char *)"svn_ra_reporter2_invoke_finish_report(svn_ra_reporter2_t _obj, void * report_baton, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_reporter2_invoke_abort_report", _wrap_svn_ra_reporter2_invoke_abort_report, METH_VARARGS, (char *)"svn_ra_reporter2_invoke_abort_report(svn_ra_reporter2_t _obj, void * report_baton, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_reporter_invoke_set_path", _wrap_svn_ra_reporter_invoke_set_path, METH_VARARGS, (char *)"\n"
+ "svn_ra_reporter_invoke_set_path(svn_ra_reporter_t _obj, void * report_baton, char const * path, svn_revnum_t revision, \n"
+ " svn_boolean_t start_empty, apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_ra_reporter_invoke_delete_path", _wrap_svn_ra_reporter_invoke_delete_path, METH_VARARGS, (char *)"svn_ra_reporter_invoke_delete_path(svn_ra_reporter_t _obj, void * report_baton, char const * path, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_ra_reporter_invoke_link_path", _wrap_svn_ra_reporter_invoke_link_path, METH_VARARGS, (char *)"\n"
- "svn_ra_reporter_invoke_link_path(svn_ra_reporter_t _obj, void report_baton, char path, \n"
- " char url, svn_revnum_t revision, svn_boolean_t start_empty, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_reporter_invoke_link_path(svn_ra_reporter_t _obj, void * report_baton, char const * path, char const * url, \n"
+ " svn_revnum_t revision, svn_boolean_t start_empty, apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_ra_reporter_invoke_finish_report", _wrap_svn_ra_reporter_invoke_finish_report, METH_VARARGS, (char *)"svn_ra_reporter_invoke_finish_report(svn_ra_reporter_t _obj, void report_baton, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_ra_reporter_invoke_abort_report", _wrap_svn_ra_reporter_invoke_abort_report, METH_VARARGS, (char *)"svn_ra_reporter_invoke_abort_report(svn_ra_reporter_t _obj, void report_baton, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_ra_callbacks2_invoke_open_tmp_file", _wrap_svn_ra_callbacks2_invoke_open_tmp_file, METH_VARARGS, (char *)"svn_ra_callbacks2_invoke_open_tmp_file(svn_ra_callbacks2_t _obj, void callback_baton, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_ra_callbacks_invoke_open_tmp_file", _wrap_svn_ra_callbacks_invoke_open_tmp_file, METH_VARARGS, (char *)"svn_ra_callbacks_invoke_open_tmp_file(svn_ra_callbacks_t _obj, void callback_baton, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_reporter_invoke_finish_report", _wrap_svn_ra_reporter_invoke_finish_report, METH_VARARGS, (char *)"svn_ra_reporter_invoke_finish_report(svn_ra_reporter_t _obj, void * report_baton, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_reporter_invoke_abort_report", _wrap_svn_ra_reporter_invoke_abort_report, METH_VARARGS, (char *)"svn_ra_reporter_invoke_abort_report(svn_ra_reporter_t _obj, void * report_baton, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_callbacks2_invoke_open_tmp_file", _wrap_svn_ra_callbacks2_invoke_open_tmp_file, METH_VARARGS, (char *)"svn_ra_callbacks2_invoke_open_tmp_file(svn_ra_callbacks2_t _obj, void * callback_baton, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_callbacks_invoke_open_tmp_file", _wrap_svn_ra_callbacks_invoke_open_tmp_file, METH_VARARGS, (char *)"svn_ra_callbacks_invoke_open_tmp_file(svn_ra_callbacks_t _obj, void * callback_baton, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_ra_plugin_invoke_open", _wrap_svn_ra_plugin_invoke_open, METH_VARARGS, (char *)"\n"
- "svn_ra_plugin_invoke_open(svn_ra_plugin_t _obj, char repos_URL, svn_ra_callbacks_t callbacks, \n"
- " void callback_baton, apr_hash_t config, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_ra_plugin_invoke_get_latest_revnum", _wrap_svn_ra_plugin_invoke_get_latest_revnum, METH_VARARGS, (char *)"svn_ra_plugin_invoke_get_latest_revnum(svn_ra_plugin_t _obj, void session_baton, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_ra_plugin_invoke_get_dated_revision", _wrap_svn_ra_plugin_invoke_get_dated_revision, METH_VARARGS, (char *)"\n"
- "svn_ra_plugin_invoke_get_dated_revision(svn_ra_plugin_t _obj, void session_baton, apr_time_t tm, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_plugin_invoke_open(svn_ra_plugin_t _obj, char const * repos_URL, svn_ra_callbacks_t callbacks, void * callback_baton, \n"
+ " apr_hash_t config, apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_ra_plugin_invoke_get_latest_revnum", _wrap_svn_ra_plugin_invoke_get_latest_revnum, METH_VARARGS, (char *)"svn_ra_plugin_invoke_get_latest_revnum(svn_ra_plugin_t _obj, void * session_baton, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_plugin_invoke_get_dated_revision", _wrap_svn_ra_plugin_invoke_get_dated_revision, METH_VARARGS, (char *)"svn_ra_plugin_invoke_get_dated_revision(svn_ra_plugin_t _obj, void * session_baton, apr_time_t tm, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_ra_plugin_invoke_change_rev_prop", _wrap_svn_ra_plugin_invoke_change_rev_prop, METH_VARARGS, (char *)"\n"
- "svn_ra_plugin_invoke_change_rev_prop(svn_ra_plugin_t _obj, void session_baton, svn_revnum_t rev, \n"
- " char name, svn_string_t value, apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_ra_plugin_invoke_rev_proplist", _wrap_svn_ra_plugin_invoke_rev_proplist, METH_VARARGS, (char *)"\n"
- "svn_ra_plugin_invoke_rev_proplist(svn_ra_plugin_t _obj, void session_baton, svn_revnum_t rev, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_plugin_invoke_change_rev_prop(svn_ra_plugin_t _obj, void * session_baton, svn_revnum_t rev, char const * name, \n"
+ " svn_string_t const * value, apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_ra_plugin_invoke_rev_proplist", _wrap_svn_ra_plugin_invoke_rev_proplist, METH_VARARGS, (char *)"svn_ra_plugin_invoke_rev_proplist(svn_ra_plugin_t _obj, void * session_baton, svn_revnum_t rev, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_ra_plugin_invoke_rev_prop", _wrap_svn_ra_plugin_invoke_rev_prop, METH_VARARGS, (char *)"\n"
- "svn_ra_plugin_invoke_rev_prop(svn_ra_plugin_t _obj, void session_baton, svn_revnum_t rev, \n"
- " char name, apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_plugin_invoke_rev_prop(svn_ra_plugin_t _obj, void * session_baton, svn_revnum_t rev, char const * name, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_plugin_invoke_get_commit_editor", _wrap_svn_ra_plugin_invoke_get_commit_editor, METH_VARARGS, (char *)"\n"
- "svn_ra_plugin_invoke_get_commit_editor(svn_ra_plugin_t _obj, void session_baton, char log_msg, \n"
- " svn_commit_callback_t callback, apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_plugin_invoke_get_commit_editor(svn_ra_plugin_t _obj, void * session_baton, char const * log_msg, svn_commit_callback_t callback, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_plugin_invoke_get_file", _wrap_svn_ra_plugin_invoke_get_file, METH_VARARGS, (char *)"\n"
- "svn_ra_plugin_invoke_get_file(svn_ra_plugin_t _obj, void session_baton, char path, \n"
- " svn_revnum_t revision, svn_stream_t stream, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_plugin_invoke_get_file(svn_ra_plugin_t _obj, void * session_baton, char const * path, svn_revnum_t revision, \n"
+ " svn_stream_t * stream, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_plugin_invoke_get_dir", _wrap_svn_ra_plugin_invoke_get_dir, METH_VARARGS, (char *)"\n"
- "svn_ra_plugin_invoke_get_dir(svn_ra_plugin_t _obj, void session_baton, char path, \n"
- " svn_revnum_t revision, apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_plugin_invoke_get_dir(svn_ra_plugin_t _obj, void * session_baton, char const * path, svn_revnum_t revision, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_plugin_invoke_do_update", _wrap_svn_ra_plugin_invoke_do_update, METH_VARARGS, (char *)"\n"
- "svn_ra_plugin_invoke_do_update(svn_ra_plugin_t _obj, void session_baton, svn_revnum_t revision_to_update_to, \n"
- " char update_target, \n"
+ "svn_ra_plugin_invoke_do_update(svn_ra_plugin_t _obj, void * session_baton, svn_revnum_t revision_to_update_to, char const * update_target, \n"
" svn_boolean_t recurse, svn_delta_editor_t update_editor, \n"
- " void update_baton, apr_pool_t pool) -> svn_error_t\n"
+ " void * update_baton, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_plugin_invoke_do_switch", _wrap_svn_ra_plugin_invoke_do_switch, METH_VARARGS, (char *)"\n"
- "svn_ra_plugin_invoke_do_switch(svn_ra_plugin_t _obj, void session_baton, svn_revnum_t revision_to_switch_to, \n"
- " char switch_target, \n"
- " svn_boolean_t recurse, char switch_url, svn_delta_editor_t switch_editor, \n"
- " void switch_baton, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_plugin_invoke_do_switch(svn_ra_plugin_t _obj, void * session_baton, svn_revnum_t revision_to_switch_to, char const * switch_target, \n"
+ " svn_boolean_t recurse, char const * switch_url, \n"
+ " svn_delta_editor_t switch_editor, void * switch_baton, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_plugin_invoke_do_status", _wrap_svn_ra_plugin_invoke_do_status, METH_VARARGS, (char *)"\n"
- "svn_ra_plugin_invoke_do_status(svn_ra_plugin_t _obj, void session_baton, char status_target, \n"
- " svn_revnum_t revision, svn_boolean_t recurse, \n"
- " svn_delta_editor_t status_editor, \n"
- " void status_baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_plugin_invoke_do_status(svn_ra_plugin_t _obj, void * session_baton, char const * status_target, svn_revnum_t revision, \n"
+ " svn_boolean_t recurse, svn_delta_editor_t status_editor, void * status_baton, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_plugin_invoke_do_diff", _wrap_svn_ra_plugin_invoke_do_diff, METH_VARARGS, (char *)"\n"
- "svn_ra_plugin_invoke_do_diff(svn_ra_plugin_t _obj, void session_baton, svn_revnum_t revision, \n"
- " char diff_target, svn_boolean_t recurse, \n"
- " svn_boolean_t ignore_ancestry, char versus_url, \n"
- " svn_delta_editor_t diff_editor, \n"
- " void diff_baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_plugin_invoke_do_diff(svn_ra_plugin_t _obj, void * session_baton, svn_revnum_t revision, char const * diff_target, \n"
+ " svn_boolean_t recurse, svn_boolean_t ignore_ancestry, char const * versus_url, \n"
+ " svn_delta_editor_t diff_editor, void * diff_baton, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_plugin_invoke_get_log", _wrap_svn_ra_plugin_invoke_get_log, METH_VARARGS, (char *)"\n"
- "svn_ra_plugin_invoke_get_log(svn_ra_plugin_t _obj, void session_baton, apr_array_header_t paths, \n"
- " svn_revnum_t start, svn_revnum_t end, \n"
- " svn_boolean_t discover_changed_paths, \n"
- " svn_boolean_t strict_node_history, svn_log_message_receiver_t receiver, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_plugin_invoke_get_log(svn_ra_plugin_t _obj, void * session_baton, apr_array_header_t paths, svn_revnum_t start, \n"
+ " svn_revnum_t end, svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history, \n"
+ " svn_log_message_receiver_t receiver, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_plugin_invoke_check_path", _wrap_svn_ra_plugin_invoke_check_path, METH_VARARGS, (char *)"\n"
- "svn_ra_plugin_invoke_check_path(svn_ra_plugin_t _obj, void session_baton, char path, \n"
- " svn_revnum_t revision, apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_plugin_invoke_check_path(svn_ra_plugin_t _obj, void * session_baton, char const * path, svn_revnum_t revision, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_ra_plugin_invoke_get_uuid", _wrap_svn_ra_plugin_invoke_get_uuid, METH_VARARGS, (char *)"svn_ra_plugin_invoke_get_uuid(svn_ra_plugin_t _obj, void session_baton, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_ra_plugin_invoke_get_repos_root", _wrap_svn_ra_plugin_invoke_get_repos_root, METH_VARARGS, (char *)"svn_ra_plugin_invoke_get_repos_root(svn_ra_plugin_t _obj, void session_baton, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_plugin_invoke_get_uuid", _wrap_svn_ra_plugin_invoke_get_uuid, METH_VARARGS, (char *)"svn_ra_plugin_invoke_get_uuid(svn_ra_plugin_t _obj, void * session_baton, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_plugin_invoke_get_repos_root", _wrap_svn_ra_plugin_invoke_get_repos_root, METH_VARARGS, (char *)"svn_ra_plugin_invoke_get_repos_root(svn_ra_plugin_t _obj, void * session_baton, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_ra_plugin_invoke_get_locations", _wrap_svn_ra_plugin_invoke_get_locations, METH_VARARGS, (char *)"\n"
- "svn_ra_plugin_invoke_get_locations(svn_ra_plugin_t _obj, void session_baton, char path, \n"
- " svn_revnum_t peg_revision, apr_array_header_t location_revisions, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_plugin_invoke_get_locations(svn_ra_plugin_t _obj, void * session_baton, char const * path, svn_revnum_t peg_revision, \n"
+ " apr_array_header_t location_revisions, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_plugin_invoke_get_file_revs", _wrap_svn_ra_plugin_invoke_get_file_revs, METH_VARARGS, (char *)"\n"
- "svn_ra_plugin_invoke_get_file_revs(svn_ra_plugin_t _obj, void session_baton, char path, \n"
- " svn_revnum_t start, svn_revnum_t end, svn_ra_file_rev_handler_t handler, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_plugin_invoke_get_file_revs(svn_ra_plugin_t _obj, void * session_baton, char const * path, svn_revnum_t start, \n"
+ " svn_revnum_t end, svn_ra_file_rev_handler_t handler, apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_ra_plugin_invoke_get_version", _wrap_svn_ra_plugin_invoke_get_version, METH_VARARGS, (char *)"svn_ra_plugin_invoke_get_version(svn_ra_plugin_t _obj) -> svn_version_t"},
+ { (char *)"svn_ra_plugin_invoke_get_version", _wrap_svn_ra_plugin_invoke_get_version, METH_VARARGS, (char *)"svn_ra_plugin_invoke_get_version(svn_ra_plugin_t _obj) -> svn_version_t const *"},
{ (char *)"svn_ra_invoke_get_wc_prop_func", _wrap_svn_ra_invoke_get_wc_prop_func, METH_VARARGS, (char *)"\n"
- "svn_ra_invoke_get_wc_prop_func(svn_ra_get_wc_prop_func_t _obj, void baton, char path, \n"
- " char name, apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_invoke_get_wc_prop_func(svn_ra_get_wc_prop_func_t _obj, void * baton, char const * path, char const * name, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_invoke_set_wc_prop_func", _wrap_svn_ra_invoke_set_wc_prop_func, METH_VARARGS, (char *)"\n"
- "svn_ra_invoke_set_wc_prop_func(svn_ra_set_wc_prop_func_t _obj, void baton, char path, \n"
- " char name, svn_string_t value, apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_invoke_set_wc_prop_func(svn_ra_set_wc_prop_func_t _obj, void * baton, char const * path, char const * name, \n"
+ " svn_string_t const * value, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_invoke_push_wc_prop_func", _wrap_svn_ra_invoke_push_wc_prop_func, METH_VARARGS, (char *)"\n"
- "svn_ra_invoke_push_wc_prop_func(svn_ra_push_wc_prop_func_t _obj, void baton, char path, \n"
- " char name, svn_string_t value, apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_invoke_push_wc_prop_func(svn_ra_push_wc_prop_func_t _obj, void * baton, char const * path, char const * name, \n"
+ " svn_string_t const * value, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_invoke_invalidate_wc_props_func", _wrap_svn_ra_invoke_invalidate_wc_props_func, METH_VARARGS, (char *)"\n"
- "svn_ra_invoke_invalidate_wc_props_func(svn_ra_invalidate_wc_props_func_t _obj, void baton, \n"
- " char path, char name, apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_invoke_invalidate_wc_props_func(svn_ra_invalidate_wc_props_func_t _obj, void * baton, char const * path, char const * name, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_ra_invoke_get_latest_revnum_func", _wrap_svn_ra_invoke_get_latest_revnum_func, METH_VARARGS, (char *)"svn_ra_invoke_get_latest_revnum_func(svn_ra_get_latest_revnum_func_t _obj, void session_baton) -> svn_error_t"},
- { (char *)"svn_ra_invoke_get_client_string_func", _wrap_svn_ra_invoke_get_client_string_func, METH_VARARGS, (char *)"svn_ra_invoke_get_client_string_func(svn_ra_get_client_string_func_t _obj, void baton, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_invoke_get_wc_contents_func", _wrap_svn_ra_invoke_get_wc_contents_func, METH_VARARGS, (char *)"svn_ra_invoke_get_wc_contents_func(svn_ra_get_wc_contents_func_t _obj, void * baton, svn_checksum_t checksum, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_ra_invoke_get_latest_revnum_func", _wrap_svn_ra_invoke_get_latest_revnum_func, METH_VARARGS, (char *)"svn_ra_invoke_get_latest_revnum_func(svn_ra_get_latest_revnum_func_t _obj, void * session_baton) -> svn_error_t"},
+ { (char *)"svn_ra_invoke_get_client_string_func", _wrap_svn_ra_invoke_get_client_string_func, METH_VARARGS, (char *)"svn_ra_invoke_get_client_string_func(svn_ra_get_client_string_func_t _obj, void * baton, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_ra_invoke_file_rev_handler", _wrap_svn_ra_invoke_file_rev_handler, METH_VARARGS, (char *)"\n"
- "svn_ra_invoke_file_rev_handler(svn_ra_file_rev_handler_t _obj, void baton, char path, \n"
- " svn_revnum_t rev, apr_hash_t rev_props, apr_array_header_t prop_diffs, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_invoke_file_rev_handler(svn_ra_file_rev_handler_t _obj, void * baton, char const * path, svn_revnum_t rev, \n"
+ " apr_hash_t rev_props, apr_array_header_t prop_diffs, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_invoke_lock_callback", _wrap_svn_ra_invoke_lock_callback, METH_VARARGS, (char *)"\n"
- "svn_ra_invoke_lock_callback(svn_ra_lock_callback_t _obj, void baton, char path, \n"
- " svn_boolean_t do_lock, svn_lock_t lock, svn_error_t ra_err, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_invoke_lock_callback(svn_ra_lock_callback_t _obj, void * baton, char const * path, svn_boolean_t do_lock, \n"
+ " svn_lock_t lock, svn_error_t ra_err, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_invoke_progress_notify_func", _wrap_svn_ra_invoke_progress_notify_func, METH_VARARGS, (char *)"\n"
- "svn_ra_invoke_progress_notify_func(svn_ra_progress_notify_func_t _obj, apr_off_t progress, \n"
- " apr_off_t total, void baton, apr_pool_t pool)\n"
+ "svn_ra_invoke_progress_notify_func(svn_ra_progress_notify_func_t _obj, apr_off_t progress, apr_off_t total, void * baton, \n"
+ " apr_pool_t pool)\n"
""},
{ (char *)"svn_ra_invoke_replay_revstart_callback", _wrap_svn_ra_invoke_replay_revstart_callback, METH_VARARGS, (char *)"\n"
- "svn_ra_invoke_replay_revstart_callback(svn_ra_replay_revstart_callback_t _obj, svn_revnum_t revision, \n"
- " void replay_baton, apr_hash_t rev_props, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_ra_invoke_replay_revstart_callback(svn_ra_replay_revstart_callback_t _obj, svn_revnum_t revision, void * replay_baton, \n"
+ " apr_hash_t rev_props, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_ra_invoke_replay_revfinish_callback", _wrap_svn_ra_invoke_replay_revfinish_callback, METH_VARARGS, (char *)"\n"
- "svn_ra_invoke_replay_revfinish_callback(svn_ra_replay_revfinish_callback_t _obj, svn_revnum_t revision, \n"
- " void replay_baton, svn_delta_editor_t editor, \n"
- " void edit_baton, apr_hash_t rev_props, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_ra_invoke_init_func", _wrap_svn_ra_invoke_init_func, METH_VARARGS, (char *)"\n"
- "svn_ra_invoke_init_func(svn_ra_init_func_t _obj, int abi_version, apr_pool_t pool, \n"
- " apr_hash_t hash) -> svn_error_t\n"
+ "svn_ra_invoke_replay_revfinish_callback(svn_ra_replay_revfinish_callback_t _obj, svn_revnum_t revision, void * replay_baton, \n"
+ " svn_delta_editor_t editor, void * edit_baton, apr_hash_t rev_props, apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_ra_invoke_init_func", _wrap_svn_ra_invoke_init_func, METH_VARARGS, (char *)"svn_ra_invoke_init_func(svn_ra_init_func_t _obj, int abi_version, apr_pool_t pool, apr_hash_t hash) -> svn_error_t"},
{ (char *)"svn_ra_get_wc_prop_func_t_swigregister", svn_ra_get_wc_prop_func_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_ra_set_wc_prop_func_t_swigregister", svn_ra_set_wc_prop_func_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_ra_push_wc_prop_func_t_swigregister", svn_ra_push_wc_prop_func_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_ra_invalidate_wc_props_func_t_swigregister", svn_ra_invalidate_wc_props_func_t_swigregister, METH_VARARGS, NULL},
+ { (char *)"svn_ra_get_wc_contents_func_t_swigregister", svn_ra_get_wc_contents_func_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_ra_get_latest_revnum_func_t_swigregister", svn_ra_get_latest_revnum_func_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_ra_get_client_string_func_t_swigregister", svn_ra_get_client_string_func_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_ra_file_rev_handler_t_swigregister", svn_ra_file_rev_handler_t_swigregister, METH_VARARGS, NULL},
@@ -17109,7 +17638,7 @@ static PyMethodDef SwigMethods[] = {
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
-static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *|svn_rangelist_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_file_t = {"_p_apr_file_t", "apr_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_hash_t = {"_p_apr_hash_t", "apr_hash_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int32_t = {"_p_apr_int32_t", "apr_int32_t *|time_t *", 0, 0, (void*)0, 0};
@@ -17134,6 +17663,7 @@ static swig_type_info _swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void
static swig_type_info _swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *)|struct svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *)|struct svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *)|struct svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,svn_stream_t **,svn_checksum_t const *,apr_pool_t *)|svn_ra_get_wc_contents_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_error_t *(*)(void *,apr_array_header_t const *,svn_revnum_t,svn_revnum_t,svn_boolean_t,svn_boolean_t,svn_log_message_receiver_t,void *,apr_pool_t *)|struct svn_error_t *(*)(void *,apr_array_header_t const *,svn_revnum_t,svn_revnum_t,svn_boolean_t,svn_boolean_t,svn_log_message_receiver_t,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t", "svn_error_t *(*)(void *,char const *,apr_pool_t *)|struct svn_error_t *(*)(void *,char const *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,char const *,apr_pool_t *)|svn_ra_invalidate_wc_props_func_t", 0, 0, (void*)0, 0};
@@ -17165,6 +17695,7 @@ static swig_type_info _swigt__p_f_svn_revnum_t_p_void_p_q_const__svn_delta_edito
static swig_type_info _swigt__p_f_void__p_svn_version_t = {"_p_f_void__p_svn_version_t", "struct svn_version_t *(*)(void)|svn_version_t *(*)(void)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_int = {"_p_int", "int *|svn_boolean_t *|apr_status_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_long = {"_p_long", "long *|svn_revnum_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_apr_array_header_t = {"_p_p_apr_array_header_t", "apr_array_header_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_apr_file_t = {"_p_p_apr_file_t", "apr_file_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_apr_hash_t = {"_p_p_apr_hash_t", "apr_hash_t **|svn_mergeinfo_catalog_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0};
@@ -17173,6 +17704,7 @@ static swig_type_info _swigt__p_p_f_int_p_apr_pool_t_p_apr_hash_t__p_svn_error_t
static swig_type_info _swigt__p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t = {"_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t", "svn_txdelta_window_handler_t *|struct svn_error_t *(**)(svn_txdelta_window_t *,void *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void__p_svn_error_t = {"_p_p_f_p_void__p_svn_error_t", "svn_cancel_func_t *|struct svn_error_t *(**)(void *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_p_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_p_p_q_const__char_p_apr_pool_t__p_svn_error_t", "svn_ra_get_client_string_func_t *|struct svn_error_t *(**)(void *,char const **,apr_pool_t *)", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(void *,svn_stream_t **,svn_checksum_t const *,apr_pool_t *)|svn_ra_get_wc_contents_func_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(void *,char const *,char const *,apr_pool_t *)|svn_ra_invalidate_wc_props_func_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_p_q_const__char_p_q_const__char_p_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_p_q_const__char_p_q_const__char_p_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(void *,char const *,char const *,svn_string_t const **,apr_pool_t *)|svn_ra_get_wc_prop_func_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(void *,char const *,char const *,svn_string_t const *,apr_pool_t *)|svn_ra_set_wc_prop_func_t *|svn_ra_push_wc_prop_func_t *", 0, 0, (void*)0, 0};
@@ -17191,6 +17723,7 @@ static swig_type_info _swigt__p_p_svn_ra_reporter2_t = {"_p_p_svn_ra_reporter2_t
static swig_type_info _swigt__p_p_svn_ra_reporter3_t = {"_p_p_svn_ra_reporter3_t", "struct svn_ra_reporter3_t **|svn_ra_reporter3_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_ra_reporter_t = {"_p_p_svn_ra_reporter_t", "struct svn_ra_reporter_t **|svn_ra_reporter_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_ra_session_t = {"_p_p_svn_ra_session_t", "struct svn_ra_session_t **|svn_ra_session_t **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_svn_stream_t = {"_p_p_svn_stream_t", "struct svn_stream_t **|svn_stream_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_string_t = {"_p_p_svn_string_t", "struct svn_string_t **|svn_string_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_stringbuf_t = {"_p_p_svn_stringbuf_t", "struct svn_stringbuf_t **|svn_stringbuf_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_void = {"_p_p_void", "void **", 0, 0, (void*)0, 0};
@@ -17204,6 +17737,9 @@ static swig_type_info _swigt__p_svn_auth_iterstate_t = {"_p_svn_auth_iterstate_t
static swig_type_info _swigt__p_svn_auth_provider_object_t = {"_p_svn_auth_provider_object_t", "struct svn_auth_provider_object_t *|svn_auth_provider_object_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_provider_t = {"_p_svn_auth_provider_t", "struct svn_auth_provider_t *|svn_auth_provider_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_ssl_server_cert_info_t = {"_p_svn_auth_ssl_server_cert_info_t", "struct svn_auth_ssl_server_cert_info_t *|svn_auth_ssl_server_cert_info_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_ctx_t = {"_p_svn_checksum_ctx_t", "struct svn_checksum_ctx_t *|svn_checksum_ctx_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "enum svn_checksum_kind_t *|svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "struct svn_checksum_t *|svn_checksum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_commit_info_t = {"_p_svn_commit_info_t", "struct svn_commit_info_t *|svn_commit_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_config_t = {"_p_svn_config_t", "struct svn_config_t *|svn_config_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_delta_editor_t = {"_p_svn_delta_editor_t", "struct svn_delta_editor_t *|svn_delta_editor_t *", 0, 0, (void*)0, 0};
@@ -17227,6 +17763,7 @@ static swig_type_info _swigt__p_svn_opt_revision_t = {"_p_svn_opt_revision_t", "
static swig_type_info _swigt__p_svn_opt_revision_value_t = {"_p_svn_opt_revision_value_t", "union svn_opt_revision_value_t *|svn_opt_revision_value_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_opt_subcommand_desc2_t = {"_p_svn_opt_subcommand_desc2_t", "struct svn_opt_subcommand_desc2_t *|svn_opt_subcommand_desc2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_opt_subcommand_desc_t = {"_p_svn_opt_subcommand_desc_t", "struct svn_opt_subcommand_desc_t *|svn_opt_subcommand_desc_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_prop_inherited_item_t = {"_p_svn_prop_inherited_item_t", "struct svn_prop_inherited_item_t *|svn_prop_inherited_item_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_kind = {"_p_svn_prop_kind", "svn_prop_kind_t *|enum svn_prop_kind *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_ra_callbacks2_t = {"_p_svn_ra_callbacks2_t", "struct svn_ra_callbacks2_t *|svn_ra_callbacks2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_ra_callbacks_t = {"_p_svn_ra_callbacks_t", "struct svn_ra_callbacks_t *|svn_ra_callbacks_t *", 0, 0, (void*)0, 0};
@@ -17244,7 +17781,11 @@ static swig_type_info _swigt__p_svn_txdelta_op_t = {"_p_svn_txdelta_op_t", "stru
static swig_type_info _swigt__p_svn_txdelta_stream_t = {"_p_svn_txdelta_stream_t", "struct svn_txdelta_stream_t *|svn_txdelta_stream_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_txdelta_window_t = {"_p_svn_txdelta_window_t", "struct svn_txdelta_window_t *|svn_txdelta_window_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_checklist_t = {"_p_svn_version_checklist_t", "struct svn_version_checklist_t *|svn_version_checklist_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_linked_lib_t = {"_p_svn_version_ext_linked_lib_t", "struct svn_version_ext_linked_lib_t *|svn_version_ext_linked_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_loaded_lib_t = {"_p_svn_version_ext_loaded_lib_t", "struct svn_version_ext_loaded_lib_t *|svn_version_ext_loaded_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_extended_t = {"_p_svn_version_extended_t", "struct svn_version_extended_t *|svn_version_extended_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_t = {"_p_svn_version_t", "struct svn_version_t *|svn_version_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_wc_external_item2_t = {"_p_svn_wc_external_item2_t", "svn_wc_external_item2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_long = {"_p_unsigned_long", "unsigned long *|svn_linenum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_void = {"_p_void", "void *", 0, 0, (void*)0, 0};
@@ -17274,6 +17815,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
@@ -17305,6 +17847,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_f_void__p_svn_version_t,
&_swigt__p_int,
&_swigt__p_long,
+ &_swigt__p_p_apr_array_header_t,
&_swigt__p_p_apr_file_t,
&_swigt__p_p_apr_hash_t,
&_swigt__p_p_char,
@@ -17313,6 +17856,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t,
&_swigt__p_p_f_p_void__p_svn_error_t,
&_swigt__p_p_f_p_void_p_p_q_const__char_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_void_p_q_const__char_p_q_const__char_p_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t,
@@ -17331,6 +17875,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_p_svn_ra_reporter3_t,
&_swigt__p_p_svn_ra_reporter_t,
&_swigt__p_p_svn_ra_session_t,
+ &_swigt__p_p_svn_stream_t,
&_swigt__p_p_svn_string_t,
&_swigt__p_p_svn_stringbuf_t,
&_swigt__p_p_void,
@@ -17344,6 +17889,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_auth_provider_object_t,
&_swigt__p_svn_auth_provider_t,
&_swigt__p_svn_auth_ssl_server_cert_info_t,
+ &_swigt__p_svn_checksum_ctx_t,
+ &_swigt__p_svn_checksum_kind_t,
+ &_swigt__p_svn_checksum_t,
&_swigt__p_svn_commit_info_t,
&_swigt__p_svn_config_t,
&_swigt__p_svn_delta_editor_t,
@@ -17367,6 +17915,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_opt_revision_value_t,
&_swigt__p_svn_opt_subcommand_desc2_t,
&_swigt__p_svn_opt_subcommand_desc_t,
+ &_swigt__p_svn_prop_inherited_item_t,
&_swigt__p_svn_prop_kind,
&_swigt__p_svn_ra_callbacks2_t,
&_swigt__p_svn_ra_callbacks_t,
@@ -17384,7 +17933,11 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_txdelta_stream_t,
&_swigt__p_svn_txdelta_window_t,
&_swigt__p_svn_version_checklist_t,
+ &_swigt__p_svn_version_ext_linked_lib_t,
+ &_swigt__p_svn_version_ext_loaded_lib_t,
+ &_swigt__p_svn_version_extended_t,
&_swigt__p_svn_version_t,
+ &_swigt__p_svn_wc_external_item2_t,
&_swigt__p_unsigned_long,
&_swigt__p_void,
};
@@ -17414,6 +17967,7 @@ static swig_cast_info _swigc__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void
static swig_cast_info _swigc__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -17445,6 +17999,7 @@ static swig_cast_info _swigc__p_f_svn_revnum_t_p_void_p_q_const__svn_delta_edito
static swig_cast_info _swigc__p_f_void__p_svn_version_t[] = { {&_swigt__p_f_void__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_int[] = { {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_long[] = { {&_swigt__p_long, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_apr_array_header_t[] = { {&_swigt__p_p_apr_array_header_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_apr_file_t[] = { {&_swigt__p_p_apr_file_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_apr_hash_t[] = { {&_swigt__p_p_apr_hash_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_char[] = { {&_swigt__p_p_char, 0, 0, 0},{0, 0, 0, 0}};
@@ -17453,6 +18008,7 @@ static swig_cast_info _swigc__p_p_f_int_p_apr_pool_t_p_apr_hash_t__p_svn_error_t
static swig_cast_info _swigc__p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t[] = { {&_swigt__p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void__p_svn_error_t[] = { {&_swigt__p_p_f_p_void__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void_p_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_p_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void_p_q_const__char_p_q_const__char_p_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_p_q_const__char_p_q_const__char_p_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -17471,6 +18027,7 @@ static swig_cast_info _swigc__p_p_svn_ra_reporter2_t[] = { {&_swigt__p_p_svn_ra
static swig_cast_info _swigc__p_p_svn_ra_reporter3_t[] = { {&_swigt__p_p_svn_ra_reporter3_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_ra_reporter_t[] = { {&_swigt__p_p_svn_ra_reporter_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_ra_session_t[] = { {&_swigt__p_p_svn_ra_session_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_svn_stream_t[] = { {&_swigt__p_p_svn_stream_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_string_t[] = { {&_swigt__p_p_svn_string_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_stringbuf_t[] = { {&_swigt__p_p_svn_stringbuf_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_void[] = { {&_swigt__p_p_void, 0, 0, 0},{0, 0, 0, 0}};
@@ -17484,6 +18041,9 @@ static swig_cast_info _swigc__p_svn_auth_iterstate_t[] = { {&_swigt__p_svn_auth
static swig_cast_info _swigc__p_svn_auth_provider_object_t[] = { {&_swigt__p_svn_auth_provider_object_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_provider_t[] = { {&_swigt__p_svn_auth_provider_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_ssl_server_cert_info_t[] = { {&_swigt__p_svn_auth_ssl_server_cert_info_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_ctx_t[] = { {&_swigt__p_svn_checksum_ctx_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_kind_t[] = { {&_swigt__p_svn_checksum_kind_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_t[] = { {&_swigt__p_svn_checksum_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_commit_info_t[] = { {&_swigt__p_svn_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_config_t[] = { {&_swigt__p_svn_config_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_delta_editor_t[] = { {&_swigt__p_svn_delta_editor_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -17507,6 +18067,7 @@ static swig_cast_info _swigc__p_svn_opt_revision_t[] = { {&_swigt__p_svn_opt_re
static swig_cast_info _swigc__p_svn_opt_revision_value_t[] = { {&_swigt__p_svn_opt_revision_value_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_opt_subcommand_desc2_t[] = { {&_swigt__p_svn_opt_subcommand_desc2_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_opt_subcommand_desc_t[] = { {&_swigt__p_svn_opt_subcommand_desc_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_prop_inherited_item_t[] = { {&_swigt__p_svn_prop_inherited_item_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_kind[] = { {&_swigt__p_svn_prop_kind, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_ra_callbacks2_t[] = { {&_swigt__p_svn_ra_callbacks2_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_ra_callbacks_t[] = { {&_swigt__p_svn_ra_callbacks_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -17524,7 +18085,11 @@ static swig_cast_info _swigc__p_svn_txdelta_op_t[] = { {&_swigt__p_svn_txdelta_
static swig_cast_info _swigc__p_svn_txdelta_stream_t[] = { {&_swigt__p_svn_txdelta_stream_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_txdelta_window_t[] = { {&_swigt__p_svn_txdelta_window_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_checklist_t[] = { {&_swigt__p_svn_version_checklist_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_linked_lib_t[] = { {&_swigt__p_svn_version_ext_linked_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_loaded_lib_t[] = { {&_swigt__p_svn_version_ext_loaded_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_extended_t[] = { {&_swigt__p_svn_version_extended_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_t[] = { {&_swigt__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_wc_external_item2_t[] = { {&_swigt__p_svn_wc_external_item2_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_long[] = { {&_swigt__p_unsigned_long, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_void[] = { {&_swigt__p_void, 0, 0, 0},{0, 0, 0, 0}};
@@ -17554,6 +18119,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
@@ -17585,6 +18151,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_f_void__p_svn_version_t,
_swigc__p_int,
_swigc__p_long,
+ _swigc__p_p_apr_array_header_t,
_swigc__p_p_apr_file_t,
_swigc__p_p_apr_hash_t,
_swigc__p_p_char,
@@ -17593,6 +18160,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t,
_swigc__p_p_f_p_void__p_svn_error_t,
_swigc__p_p_f_p_void_p_p_q_const__char_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_void_p_q_const__char_p_q_const__char_p_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t,
@@ -17611,6 +18179,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_p_svn_ra_reporter3_t,
_swigc__p_p_svn_ra_reporter_t,
_swigc__p_p_svn_ra_session_t,
+ _swigc__p_p_svn_stream_t,
_swigc__p_p_svn_string_t,
_swigc__p_p_svn_stringbuf_t,
_swigc__p_p_void,
@@ -17624,6 +18193,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_auth_provider_object_t,
_swigc__p_svn_auth_provider_t,
_swigc__p_svn_auth_ssl_server_cert_info_t,
+ _swigc__p_svn_checksum_ctx_t,
+ _swigc__p_svn_checksum_kind_t,
+ _swigc__p_svn_checksum_t,
_swigc__p_svn_commit_info_t,
_swigc__p_svn_config_t,
_swigc__p_svn_delta_editor_t,
@@ -17647,6 +18219,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_opt_revision_value_t,
_swigc__p_svn_opt_subcommand_desc2_t,
_swigc__p_svn_opt_subcommand_desc_t,
+ _swigc__p_svn_prop_inherited_item_t,
_swigc__p_svn_prop_kind,
_swigc__p_svn_ra_callbacks2_t,
_swigc__p_svn_ra_callbacks_t,
@@ -17664,7 +18237,11 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_txdelta_stream_t,
_swigc__p_svn_txdelta_window_t,
_swigc__p_svn_version_checklist_t,
+ _swigc__p_svn_version_ext_linked_lib_t,
+ _swigc__p_svn_version_ext_loaded_lib_t,
+ _swigc__p_svn_version_extended_t,
_swigc__p_svn_version_t,
+ _swigc__p_svn_wc_external_item2_t,
_swigc__p_unsigned_long,
_swigc__p_void,
};
@@ -17737,8 +18314,6 @@ SWIG_InitializeModule(void *clientdata) {
swig_module_info *module_head, *iter;
int found, init;
- clientdata = clientdata;
-
/* check to see if the circular list has been setup, if not, set it up */
if (swig_module.next==0) {
/* Initialize the swig_module */
@@ -18311,6 +18886,7 @@ SWIG_init(void) {
m = Py_InitModule((char *) SWIG_name, SwigMethods);
#endif
md = d = PyModule_GetDict(m);
+ (void)md;
SWIG_InitializeModule(0);
@@ -18358,6 +18934,9 @@ SWIG_init(void) {
SWIG_Python_SetConstant(d, "SVN_RA_CAPABILITY_PARTIAL_REPLAY",SWIG_FromCharPtr("partial-replay"));
SWIG_Python_SetConstant(d, "SVN_RA_CAPABILITY_COMMIT_REVPROPS",SWIG_FromCharPtr("commit-revprops"));
SWIG_Python_SetConstant(d, "SVN_RA_CAPABILITY_ATOMIC_REVPROPS",SWIG_FromCharPtr("atomic-revprops"));
+ SWIG_Python_SetConstant(d, "SVN_RA_CAPABILITY_INHERITED_PROPS",SWIG_FromCharPtr("inherited-props"));
+ SWIG_Python_SetConstant(d, "SVN_RA_CAPABILITY_EPHEMERAL_TXNPROPS",SWIG_FromCharPtr("ephemeral-txnprops"));
+ SWIG_Python_SetConstant(d, "SVN_RA_CAPABILITY_GET_FILE_REVS_REVERSE",SWIG_FromCharPtr("get-file-revs-reversed"));
SWIG_Python_SetConstant(d, "SVN_RA_ABI_VERSION",SWIG_From_long((long)(2)));
#if PY_VERSION_HEX >= 0x03000000
return m;
diff --git a/subversion/bindings/swig/python/svn_repos.c b/subversion/bindings/swig/python/svn_repos.c
index b207167..68d4278 100644
--- a/subversion/bindings/swig/python/svn_repos.c
+++ b/subversion/bindings/swig/python/svn_repos.c
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -733,6 +733,7 @@ SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) {
#define PyInt_Check(x) PyLong_Check(x)
#define PyInt_AsLong(x) PyLong_AsLong(x)
#define PyInt_FromLong(x) PyLong_FromLong(x)
+#define PyInt_FromSize_t(x) PyLong_FromSize_t(x)
#define PyString_Check(name) PyBytes_Check(name)
#define PyString_FromString(x) PyUnicode_FromString(x)
#define PyString_Format(fmt, args) PyUnicode_Format(fmt, args)
@@ -902,6 +903,10 @@ static long PyNumber_AsSsize_t (PyObject *x, void *SWIGUNUSEDPARM(exc))
}
#endif
+#if PY_VERSION_HEX < 0x02050000
+#define PyInt_FromSize_t(x) PyInt_FromLong((long)x)
+#endif
+
#if PY_VERSION_HEX < 0x02040000
#define Py_VISIT(op) \
do { \
@@ -1173,7 +1178,7 @@ SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self),
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Python_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Python_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Python_SetModule(pointer)
#define SWIG_NewClientData(obj) SwigPyClientData_New(obj)
@@ -1199,7 +1204,7 @@ SWIG_Python_SetErrorObj(PyObject *errtype, PyObject *obj) {
SWIGINTERN void
SWIG_Python_SetErrorMsg(PyObject *errtype, const char *msg) {
SWIG_PYTHON_THREAD_BEGIN_BLOCK;
- PyErr_SetString(errtype, (char *) msg);
+ PyErr_SetString(errtype, msg);
SWIG_PYTHON_THREAD_END_BLOCK;
}
@@ -1218,7 +1223,11 @@ SwigPyBuiltin_AddPublicSymbol(PyObject *seq, const char *key) {
SWIGINTERN void
SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *name, PyObject *obj) {
+#if PY_VERSION_HEX < 0x02030000
PyDict_SetItemString(d, (char *)name, obj);
+#else
+ PyDict_SetItemString(d, name, obj);
+#endif
Py_DECREF(obj);
if (public_interface)
SwigPyBuiltin_AddPublicSymbol(public_interface, name);
@@ -1228,7 +1237,11 @@ SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *nam
SWIGINTERN void
SWIG_Python_SetConstant(PyObject *d, const char *name, PyObject *obj) {
+#if PY_VERSION_HEX < 0x02030000
PyDict_SetItemString(d, (char *)name, obj);
+#else
+ PyDict_SetItemString(d, name, obj);
+#endif
Py_DECREF(obj);
}
@@ -1549,7 +1562,7 @@ SwigPyObject_repr(SwigPyObject *v, PyObject *args)
#endif
{
const char *name = SWIG_TypePrettyName(v->ty);
- PyObject *repr = SWIG_Python_str_FromFormat("<Swig Object of type '%s' at %p>", name, (void *)v);
+ PyObject *repr = SWIG_Python_str_FromFormat("<Swig Object of type '%s' at %p>", (name ? name : "unknown"), (void *)v);
if (v->next) {
# ifdef METH_NOARGS
PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next);
@@ -1753,8 +1766,10 @@ SwigPyObject_own(PyObject *v, PyObject *args)
PyObject *val = 0;
#if (PY_VERSION_HEX < 0x02020000)
if (!PyArg_ParseTuple(args,(char *)"|O:own",&val))
-#else
+#elif (PY_VERSION_HEX < 0x02050000)
if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val))
+#else
+ if (!PyArg_UnpackTuple(args, "own", 0, 1, &val))
#endif
{
return NULL;
@@ -2449,23 +2464,29 @@ SWIG_Python_NewShadowInstance(SwigPyClientData *data, PyObject *swig_this)
} else {
#if PY_VERSION_HEX >= 0x03000000
inst = PyBaseObject_Type.tp_new((PyTypeObject*) data->newargs, Py_None, Py_None);
- PyObject_SetAttr(inst, SWIG_This(), swig_this);
- Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG;
+ if (inst) {
+ PyObject_SetAttr(inst, SWIG_This(), swig_this);
+ Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG;
+ }
#else
PyObject *dict = PyDict_New();
- PyDict_SetItem(dict, SWIG_This(), swig_this);
- inst = PyInstance_NewRaw(data->newargs, dict);
- Py_DECREF(dict);
+ if (dict) {
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ inst = PyInstance_NewRaw(data->newargs, dict);
+ Py_DECREF(dict);
+ }
#endif
}
return inst;
#else
#if (PY_VERSION_HEX >= 0x02010000)
- PyObject *inst;
+ PyObject *inst = 0;
PyObject *dict = PyDict_New();
- PyDict_SetItem(dict, SWIG_This(), swig_this);
- inst = PyInstance_NewRaw(data->newargs, dict);
- Py_DECREF(dict);
+ if (dict) {
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ inst = PyInstance_NewRaw(data->newargs, dict);
+ Py_DECREF(dict);
+ }
return (PyObject *) inst;
#else
PyInstanceObject *inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type);
@@ -2516,7 +2537,7 @@ SWIG_Python_SetSwigThis(PyObject *inst, PyObject *swig_this)
SWIGINTERN PyObject *
SWIG_Python_InitShadowInstance(PyObject *args) {
PyObject *obj[2];
- if (!SWIG_Python_UnpackTuple(args,(char*)"swiginit", 2, 2, obj)) {
+ if (!SWIG_Python_UnpackTuple(args, "swiginit", 2, 2, obj)) {
return NULL;
} else {
SwigPyObject *sthis = SWIG_Python_GetSwigThis(obj[0]);
@@ -2572,12 +2593,10 @@ SWIG_Python_NewPointerObj(PyObject *self, void *ptr, swig_type_info *type, int f
assert(!(flags & SWIG_BUILTIN_TP_INIT));
robj = SwigPyObject_New(ptr, type, own);
- if (clientdata && !(flags & SWIG_POINTER_NOSHADOW)) {
+ if (robj && clientdata && !(flags & SWIG_POINTER_NOSHADOW)) {
PyObject *inst = SWIG_Python_NewShadowInstance(clientdata, robj);
- if (inst) {
- Py_DECREF(robj);
- robj = inst;
- }
+ Py_DECREF(robj);
+ robj = inst;
}
return robj;
}
@@ -2598,7 +2617,7 @@ void *SWIG_ReturnGlobalTypeList(void *);
#endif
SWIGRUNTIME swig_module_info *
-SWIG_Python_GetModule(void) {
+SWIG_Python_GetModule(void *SWIGUNUSEDPARM(clientdata)) {
static void *type_pointer = (void *)0;
/* first check if module already created */
if (!type_pointer) {
@@ -2724,7 +2743,7 @@ SWIG_Python_TypeQuery(const char *type)
descriptor = (swig_type_info *) PyCObject_AsVoidPtr(obj);
#endif
} else {
- swig_module_info *swig_module = SWIG_Python_GetModule();
+ swig_module_info *swig_module = SWIG_GetModule(0);
descriptor = SWIG_TypeQueryModule(swig_module, swig_module, type);
if (descriptor) {
#ifdef SWIGPY_USE_CAPSULE
@@ -2792,7 +2811,7 @@ SwigPyObject_GetDesc(PyObject *self)
{
SwigPyObject *v = (SwigPyObject *)self;
swig_type_info *ty = v ? v->ty : 0;
- return ty ? ty->str : (char*)"";
+ return ty ? ty->str : "";
}
SWIGRUNTIME void
@@ -2849,6 +2868,7 @@ SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int SWIGUNUSEDPARM(arg
return result;
}
+#ifdef SWIGPYTHON_BUILTIN
SWIGRUNTIME int
SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
PyTypeObject *tp = obj->ob_type;
@@ -2857,15 +2877,15 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
descrsetfunc f;
int res;
-#ifdef Py_USING_UNICODE
+# ifdef Py_USING_UNICODE
if (PyString_Check(name)) {
name = PyUnicode_Decode(PyString_AsString(name), PyString_Size(name), NULL, NULL);
if (!name)
return -1;
} else if (!PyUnicode_Check(name))
-#else
+# else
if (!PyString_Check(name))
-#endif
+# endif
{
PyErr_Format(PyExc_TypeError, "attribute name must be string, not '%.200s'", name->ob_type->tp_name);
return -1;
@@ -2900,6 +2920,7 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
Py_DECREF(name);
return res;
}
+#endif
#ifdef __cplusplus
@@ -2925,120 +2946,133 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
#define SWIGTYPE_p_apr_int64_t swig_types[3]
#define SWIGTYPE_p_apr_pool_t swig_types[4]
#define SWIGTYPE_p_char swig_types[5]
-#define SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[6]
-#define SWIGTYPE_p_f_p_p_svn_stream_t_p_void__p_svn_error_t swig_types[7]
-#define SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[8]
-#define SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[9]
-#define SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[10]
-#define SWIGTYPE_p_f_p_svn_boolean_t_p_svn_fs_root_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[11]
-#define SWIGTYPE_p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[12]
-#define SWIGTYPE_p_f_p_svn_txdelta_window_handler_t_p_p_void_p_void__p_svn_error_t swig_types[13]
-#define SWIGTYPE_p_f_p_void__p_svn_error_t swig_types[14]
-#define SWIGTYPE_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t swig_types[15]
-#define SWIGTYPE_p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[16]
-#define SWIGTYPE_p_f_p_void_p_q_const__char__p_svn_error_t swig_types[17]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t swig_types[18]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[19]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[20]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_pool_t__p_svn_error_t swig_types[21]
-#define SWIGTYPE_p_f_p_void_p_q_const__struct_svn_repos_notify_t_p_apr_pool_t__void swig_types[22]
-#define SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t swig_types[23]
-#define SWIGTYPE_p_f_svn_repos_authz_access_t_p_svn_boolean_t_p_svn_fs_root_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[24]
-#define SWIGTYPE_p_f_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t swig_types[25]
-#define SWIGTYPE_p_int swig_types[26]
-#define SWIGTYPE_p_long swig_types[27]
-#define SWIGTYPE_p_p_apr_array_header_t swig_types[28]
-#define SWIGTYPE_p_p_apr_hash_t swig_types[29]
-#define SWIGTYPE_p_p_char swig_types[30]
-#define SWIGTYPE_p_p_f_p_svn_boolean_t_p_svn_fs_root_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[31]
-#define SWIGTYPE_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t swig_types[32]
-#define SWIGTYPE_p_p_f_p_void__p_svn_error_t swig_types[33]
-#define SWIGTYPE_p_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t swig_types[34]
-#define SWIGTYPE_p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[35]
-#define SWIGTYPE_p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[36]
-#define SWIGTYPE_p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_pool_t__p_svn_error_t swig_types[37]
-#define SWIGTYPE_p_p_f_p_void_p_q_const__struct_svn_repos_notify_t_p_apr_pool_t__void swig_types[38]
-#define SWIGTYPE_p_p_f_svn_repos_authz_access_t_p_svn_boolean_t_p_svn_fs_root_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[39]
-#define SWIGTYPE_p_p_svn_authz_t swig_types[40]
-#define SWIGTYPE_p_p_svn_delta_editor_t swig_types[41]
-#define SWIGTYPE_p_p_svn_dirent_t swig_types[42]
-#define SWIGTYPE_p_p_svn_fs_txn_t swig_types[43]
-#define SWIGTYPE_p_p_svn_lock_t swig_types[44]
-#define SWIGTYPE_p_p_svn_repos_parse_fns2_t swig_types[45]
-#define SWIGTYPE_p_p_svn_repos_parse_fns_t swig_types[46]
-#define SWIGTYPE_p_p_svn_repos_t swig_types[47]
-#define SWIGTYPE_p_p_svn_stream_t swig_types[48]
-#define SWIGTYPE_p_p_svn_string_t swig_types[49]
-#define SWIGTYPE_p_p_void swig_types[50]
-#define SWIGTYPE_p_svn_auth_baton_t swig_types[51]
-#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[52]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[53]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[54]
-#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[55]
-#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[56]
-#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[57]
-#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[58]
-#define SWIGTYPE_p_svn_auth_provider_t swig_types[59]
-#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[60]
-#define SWIGTYPE_p_svn_authz_t swig_types[61]
-#define SWIGTYPE_p_svn_commit_info_t swig_types[62]
-#define SWIGTYPE_p_svn_config_t swig_types[63]
-#define SWIGTYPE_p_svn_delta_editor_t swig_types[64]
-#define SWIGTYPE_p_svn_depth_t swig_types[65]
-#define SWIGTYPE_p_svn_dirent_t swig_types[66]
-#define SWIGTYPE_p_svn_errno_t swig_types[67]
-#define SWIGTYPE_p_svn_error_t swig_types[68]
-#define SWIGTYPE_p_svn_fs_access_t swig_types[69]
-#define SWIGTYPE_p_svn_fs_dirent_t swig_types[70]
-#define SWIGTYPE_p_svn_fs_history_t swig_types[71]
-#define SWIGTYPE_p_svn_fs_id_t swig_types[72]
-#define SWIGTYPE_p_svn_fs_pack_notify_action_t swig_types[73]
-#define SWIGTYPE_p_svn_fs_path_change2_t swig_types[74]
-#define SWIGTYPE_p_svn_fs_path_change_kind_t swig_types[75]
-#define SWIGTYPE_p_svn_fs_path_change_t swig_types[76]
-#define SWIGTYPE_p_svn_fs_root_t swig_types[77]
-#define SWIGTYPE_p_svn_fs_t swig_types[78]
-#define SWIGTYPE_p_svn_fs_txn_t swig_types[79]
-#define SWIGTYPE_p_svn_io_dirent2_t swig_types[80]
-#define SWIGTYPE_p_svn_io_dirent_t swig_types[81]
-#define SWIGTYPE_p_svn_io_file_del_t swig_types[82]
-#define SWIGTYPE_p_svn_location_segment_t swig_types[83]
-#define SWIGTYPE_p_svn_lock_t swig_types[84]
-#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[85]
-#define SWIGTYPE_p_svn_log_changed_path_t swig_types[86]
-#define SWIGTYPE_p_svn_log_entry_t swig_types[87]
-#define SWIGTYPE_p_svn_merge_range_t swig_types[88]
-#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[89]
-#define SWIGTYPE_p_svn_node_kind_t swig_types[90]
-#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[91]
-#define SWIGTYPE_p_svn_opt_revision_t swig_types[92]
-#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[93]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[94]
-#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[95]
-#define SWIGTYPE_p_svn_prop_kind swig_types[96]
-#define SWIGTYPE_p_svn_repos_authz_access_t swig_types[97]
-#define SWIGTYPE_p_svn_repos_node_t swig_types[98]
-#define SWIGTYPE_p_svn_repos_notify_action_t swig_types[99]
-#define SWIGTYPE_p_svn_repos_notify_t swig_types[100]
-#define SWIGTYPE_p_svn_repos_notify_warning_t swig_types[101]
-#define SWIGTYPE_p_svn_repos_parse_fns2_t swig_types[102]
-#define SWIGTYPE_p_svn_repos_parse_fns_t swig_types[103]
-#define SWIGTYPE_p_svn_repos_revision_access_level_t swig_types[104]
-#define SWIGTYPE_p_svn_repos_t swig_types[105]
-#define SWIGTYPE_p_svn_stream_mark_t swig_types[106]
-#define SWIGTYPE_p_svn_stream_t swig_types[107]
-#define SWIGTYPE_p_svn_string_t swig_types[108]
-#define SWIGTYPE_p_svn_stringbuf_t swig_types[109]
-#define SWIGTYPE_p_svn_tristate_t swig_types[110]
-#define SWIGTYPE_p_svn_txdelta_op_t swig_types[111]
-#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[112]
-#define SWIGTYPE_p_svn_txdelta_window_t swig_types[113]
-#define SWIGTYPE_p_svn_version_checklist_t swig_types[114]
-#define SWIGTYPE_p_svn_version_t swig_types[115]
-#define SWIGTYPE_p_unsigned_long swig_types[116]
-#define SWIGTYPE_p_void swig_types[117]
-static swig_type_info *swig_types[119];
-static swig_module_info swig_module = {swig_types, 118, 0, 0, 0, 0};
+#define SWIGTYPE_p_f_int_p_void_p_apr_pool_t__p_svn_error_t swig_types[6]
+#define SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[7]
+#define SWIGTYPE_p_f_p_p_svn_stream_t_p_void__p_svn_error_t swig_types[8]
+#define SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[9]
+#define SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[10]
+#define SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[11]
+#define SWIGTYPE_p_f_p_svn_boolean_t_p_svn_fs_root_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[12]
+#define SWIGTYPE_p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[13]
+#define SWIGTYPE_p_f_p_svn_txdelta_window_handler_t_p_p_void_p_void__p_svn_error_t swig_types[14]
+#define SWIGTYPE_p_f_p_void__p_svn_error_t swig_types[15]
+#define SWIGTYPE_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t swig_types[16]
+#define SWIGTYPE_p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[17]
+#define SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t swig_types[18]
+#define SWIGTYPE_p_f_p_void_p_q_const__char__p_svn_error_t swig_types[19]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t swig_types[20]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[21]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[22]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_pool_t__p_svn_error_t swig_types[23]
+#define SWIGTYPE_p_f_p_void_p_q_const__struct_svn_repos_notify_t_p_apr_pool_t__void swig_types[24]
+#define SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t swig_types[25]
+#define SWIGTYPE_p_f_svn_repos_authz_access_t_p_svn_boolean_t_p_svn_fs_root_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[26]
+#define SWIGTYPE_p_f_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t swig_types[27]
+#define SWIGTYPE_p_int swig_types[28]
+#define SWIGTYPE_p_long swig_types[29]
+#define SWIGTYPE_p_p_apr_array_header_t swig_types[30]
+#define SWIGTYPE_p_p_apr_hash_t swig_types[31]
+#define SWIGTYPE_p_p_char swig_types[32]
+#define SWIGTYPE_p_p_f_p_svn_boolean_t_p_svn_fs_root_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[33]
+#define SWIGTYPE_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t swig_types[34]
+#define SWIGTYPE_p_p_f_p_void__p_svn_error_t swig_types[35]
+#define SWIGTYPE_p_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t swig_types[36]
+#define SWIGTYPE_p_p_f_p_void_p_apr_pool_t__p_svn_error_t swig_types[37]
+#define SWIGTYPE_p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[38]
+#define SWIGTYPE_p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[39]
+#define SWIGTYPE_p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_pool_t__p_svn_error_t swig_types[40]
+#define SWIGTYPE_p_p_f_p_void_p_q_const__struct_svn_repos_notify_t_p_apr_pool_t__void swig_types[41]
+#define SWIGTYPE_p_p_f_svn_repos_authz_access_t_p_svn_boolean_t_p_svn_fs_root_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[42]
+#define SWIGTYPE_p_p_svn_authz_t swig_types[43]
+#define SWIGTYPE_p_p_svn_delta_editor_t swig_types[44]
+#define SWIGTYPE_p_p_svn_dirent_t swig_types[45]
+#define SWIGTYPE_p_p_svn_fs_txn_t swig_types[46]
+#define SWIGTYPE_p_p_svn_lock_t swig_types[47]
+#define SWIGTYPE_p_p_svn_repos_parse_fns2_t swig_types[48]
+#define SWIGTYPE_p_p_svn_repos_parse_fns3_t swig_types[49]
+#define SWIGTYPE_p_p_svn_repos_parse_fns_t swig_types[50]
+#define SWIGTYPE_p_p_svn_repos_t swig_types[51]
+#define SWIGTYPE_p_p_svn_stream_t swig_types[52]
+#define SWIGTYPE_p_p_svn_string_t swig_types[53]
+#define SWIGTYPE_p_p_void swig_types[54]
+#define SWIGTYPE_p_svn_auth_baton_t swig_types[55]
+#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[56]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[57]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[58]
+#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[59]
+#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[60]
+#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[61]
+#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[62]
+#define SWIGTYPE_p_svn_auth_provider_t swig_types[63]
+#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[64]
+#define SWIGTYPE_p_svn_authz_t swig_types[65]
+#define SWIGTYPE_p_svn_checksum_ctx_t swig_types[66]
+#define SWIGTYPE_p_svn_checksum_kind_t swig_types[67]
+#define SWIGTYPE_p_svn_checksum_t swig_types[68]
+#define SWIGTYPE_p_svn_commit_info_t swig_types[69]
+#define SWIGTYPE_p_svn_config_t swig_types[70]
+#define SWIGTYPE_p_svn_delta_editor_t swig_types[71]
+#define SWIGTYPE_p_svn_depth_t swig_types[72]
+#define SWIGTYPE_p_svn_dirent_t swig_types[73]
+#define SWIGTYPE_p_svn_errno_t swig_types[74]
+#define SWIGTYPE_p_svn_error_t swig_types[75]
+#define SWIGTYPE_p_svn_fs_access_t swig_types[76]
+#define SWIGTYPE_p_svn_fs_dirent_t swig_types[77]
+#define SWIGTYPE_p_svn_fs_history_t swig_types[78]
+#define SWIGTYPE_p_svn_fs_id_t swig_types[79]
+#define SWIGTYPE_p_svn_fs_pack_notify_action_t swig_types[80]
+#define SWIGTYPE_p_svn_fs_path_change2_t swig_types[81]
+#define SWIGTYPE_p_svn_fs_path_change_kind_t swig_types[82]
+#define SWIGTYPE_p_svn_fs_path_change_t swig_types[83]
+#define SWIGTYPE_p_svn_fs_root_t swig_types[84]
+#define SWIGTYPE_p_svn_fs_t swig_types[85]
+#define SWIGTYPE_p_svn_fs_txn_t swig_types[86]
+#define SWIGTYPE_p_svn_io_dirent2_t swig_types[87]
+#define SWIGTYPE_p_svn_io_dirent_t swig_types[88]
+#define SWIGTYPE_p_svn_io_file_del_t swig_types[89]
+#define SWIGTYPE_p_svn_location_segment_t swig_types[90]
+#define SWIGTYPE_p_svn_lock_t swig_types[91]
+#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[92]
+#define SWIGTYPE_p_svn_log_changed_path_t swig_types[93]
+#define SWIGTYPE_p_svn_log_entry_t swig_types[94]
+#define SWIGTYPE_p_svn_merge_range_t swig_types[95]
+#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[96]
+#define SWIGTYPE_p_svn_node_kind_t swig_types[97]
+#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[98]
+#define SWIGTYPE_p_svn_opt_revision_t swig_types[99]
+#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[100]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[101]
+#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[102]
+#define SWIGTYPE_p_svn_prop_inherited_item_t swig_types[103]
+#define SWIGTYPE_p_svn_prop_kind swig_types[104]
+#define SWIGTYPE_p_svn_repos_authz_access_t swig_types[105]
+#define SWIGTYPE_p_svn_repos_node_t swig_types[106]
+#define SWIGTYPE_p_svn_repos_notify_action_t swig_types[107]
+#define SWIGTYPE_p_svn_repos_notify_t swig_types[108]
+#define SWIGTYPE_p_svn_repos_notify_warning_t swig_types[109]
+#define SWIGTYPE_p_svn_repos_parse_fns2_t swig_types[110]
+#define SWIGTYPE_p_svn_repos_parse_fns3_t swig_types[111]
+#define SWIGTYPE_p_svn_repos_parse_fns_t swig_types[112]
+#define SWIGTYPE_p_svn_repos_revision_access_level_t swig_types[113]
+#define SWIGTYPE_p_svn_repos_t swig_types[114]
+#define SWIGTYPE_p_svn_stream_mark_t swig_types[115]
+#define SWIGTYPE_p_svn_stream_t swig_types[116]
+#define SWIGTYPE_p_svn_string_t swig_types[117]
+#define SWIGTYPE_p_svn_stringbuf_t swig_types[118]
+#define SWIGTYPE_p_svn_tristate_t swig_types[119]
+#define SWIGTYPE_p_svn_txdelta_op_t swig_types[120]
+#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[121]
+#define SWIGTYPE_p_svn_txdelta_window_t swig_types[122]
+#define SWIGTYPE_p_svn_version_checklist_t swig_types[123]
+#define SWIGTYPE_p_svn_version_ext_linked_lib_t swig_types[124]
+#define SWIGTYPE_p_svn_version_ext_loaded_lib_t swig_types[125]
+#define SWIGTYPE_p_svn_version_extended_t swig_types[126]
+#define SWIGTYPE_p_svn_version_t swig_types[127]
+#define SWIGTYPE_p_svn_wc_external_item2_t swig_types[128]
+#define SWIGTYPE_p_unsigned_long swig_types[129]
+#define SWIGTYPE_p_void swig_types[130]
+static swig_type_info *swig_types[132];
+static swig_module_info swig_module = {swig_types, 131, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@@ -3062,7 +3096,7 @@ static swig_module_info swig_module = {swig_types, 118, 0, 0, 0, 0};
#endif
#define SWIG_name "_repos"
-#define SWIGVERSION 0x020004
+#define SWIGVERSION 0x020009
#define SWIG_VERSION SWIGVERSION
@@ -3125,7 +3159,7 @@ static PyObject * _global_py_pool = NULL;
#include "svn_repos.h"
- #define SWIG_From_long PyInt_FromLong
+ #define SWIG_From_long PyLong_FromLong
SWIGINTERN int
@@ -3383,10 +3417,73 @@ SWIG_FromCharPtr(const char *cptr)
}
-SWIGINTERNINLINE PyObject *
-SWIG_From_int (int value)
-{
- return SWIG_From_long (value);
+SWIGINTERNINLINE PyObject*
+ SWIG_From_int (int value)
+{
+ return PyInt_FromLong((long) value);
+}
+
+
+SWIGINTERN int
+SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val)
+{
+#if PY_VERSION_HEX < 0x03000000
+ if (PyInt_Check(obj)) {
+ long v = PyInt_AsLong(obj);
+ if (v >= 0) {
+ if (val) *val = v;
+ return SWIG_OK;
+ } else {
+ return SWIG_OverflowError;
+ }
+ } else
+#endif
+ if (PyLong_Check(obj)) {
+ unsigned long v = PyLong_AsUnsignedLong(obj);
+ if (!PyErr_Occurred()) {
+ if (val) *val = v;
+ return SWIG_OK;
+ } else {
+ PyErr_Clear();
+ }
+ }
+#ifdef SWIG_PYTHON_CAST_MODE
+ {
+ int dispatch = 0;
+ unsigned long v = PyLong_AsUnsignedLong(obj);
+ if (!PyErr_Occurred()) {
+ if (val) *val = v;
+ return SWIG_AddCast(SWIG_OK);
+ } else {
+ PyErr_Clear();
+ }
+ if (!dispatch) {
+ double d;
+ int res = SWIG_AddCast(SWIG_AsVal_double (obj,&d));
+ if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, 0, ULONG_MAX)) {
+ if (val) *val = (unsigned long)(d);
+ return res;
+ }
+ }
+ }
+#endif
+ return SWIG_TypeError;
+}
+
+
+SWIGINTERNINLINE unsigned long
+SWIG_As_unsigned_SS_long (PyObject* obj)
+{
+ unsigned long v;
+ int res = SWIG_AsVal_unsigned_SS_long (obj, &v);
+ if (!SWIG_IsOK(res)) {
+ /*
+ this is needed to make valgrind/purify happier.
+ */
+ memset((void*)&v, 0, sizeof(unsigned long));
+ SWIG_Error(res, "");
+ }
+ return v;
}
@@ -3450,6 +3547,66 @@ SWIG_From_char (char c)
}
+static svn_error_t * svn_repos_parse_fns3_invoke_magic_header_record(
+ svn_repos_parse_fns3_t * _obj, int version, void *parse_baton, apr_pool_t *pool) {
+ return (_obj->magic_header_record)(version, parse_baton, pool);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_uuid_record(
+ svn_repos_parse_fns3_t * _obj, const char *uuid, void *parse_baton, apr_pool_t *pool) {
+ return (_obj->uuid_record)(uuid, parse_baton, pool);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_new_revision_record(
+ svn_repos_parse_fns3_t * _obj, void **revision_baton, apr_hash_t *headers, void *parse_baton, apr_pool_t *pool) {
+ return (_obj->new_revision_record)(revision_baton, headers, parse_baton, pool);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_new_node_record(
+ svn_repos_parse_fns3_t * _obj, void **node_baton, apr_hash_t *headers, void *revision_baton, apr_pool_t *pool) {
+ return (_obj->new_node_record)(node_baton, headers, revision_baton, pool);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_set_revision_property(
+ svn_repos_parse_fns3_t * _obj, void *revision_baton, const char *name, const svn_string_t *value) {
+ return (_obj->set_revision_property)(revision_baton, name, value);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_set_node_property(
+ svn_repos_parse_fns3_t * _obj, void *node_baton, const char *name, const svn_string_t *value) {
+ return (_obj->set_node_property)(node_baton, name, value);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_delete_node_property(
+ svn_repos_parse_fns3_t * _obj, void *node_baton, const char *name) {
+ return (_obj->delete_node_property)(node_baton, name);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_remove_node_props(
+ svn_repos_parse_fns3_t * _obj, void *node_baton) {
+ return (_obj->remove_node_props)(node_baton);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_set_fulltext(
+ svn_repos_parse_fns3_t * _obj, svn_stream_t **stream, void *node_baton) {
+ return (_obj->set_fulltext)(stream, node_baton);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_apply_textdelta(
+ svn_repos_parse_fns3_t * _obj, svn_txdelta_window_handler_t *handler, void **handler_baton, void *node_baton) {
+ return (_obj->apply_textdelta)(handler, handler_baton, node_baton);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_close_node(
+ svn_repos_parse_fns3_t * _obj, void *node_baton) {
+ return (_obj->close_node)(node_baton);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_close_revision(
+ svn_repos_parse_fns3_t * _obj, void *revision_baton) {
+ return (_obj->close_revision)(revision_baton);
+}
+
static svn_error_t * svn_repos_parse_fns2_invoke_new_revision_record(
svn_repos_parse_fns2_t * _obj, void **revision_baton, apr_hash_t *headers, void *parse_baton, apr_pool_t *pool) {
return (_obj->new_revision_record)(revision_baton, headers, parse_baton, pool);
@@ -3525,6 +3682,11 @@ static void svn_repos_invoke_notify_func(
_obj(baton, notify, scratch_pool);
}
+static svn_error_t * svn_repos_invoke_freeze_func(
+ svn_repos_freeze_func_t _obj, void *baton, apr_pool_t *pool) {
+ return _obj(baton, pool);
+}
+
static svn_error_t * svn_repos_invoke_history_func(
svn_repos_history_func_t _obj, void *baton, const char *path, svn_revnum_t revision, apr_pool_t *pool) {
return _obj(baton, path, revision, pool);
@@ -3557,14 +3719,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_notify_t_action_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
svn_repos_notify_action_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_notify_t_action_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3585,13 +3747,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_notify_t_action_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
PyObject * obj0 = 0 ;
svn_repos_notify_action_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_notify_t_action_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3606,14 +3768,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_notify_t_revision_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_notify_t_revision_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3634,13 +3796,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_notify_t_revision_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_notify_t_revision_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3655,13 +3817,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_notify_t_warning_str_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_repos_notify_t_warning_str_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3683,13 +3845,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_notify_t_warning_str_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_notify_t_warning_str_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3704,14 +3866,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_notify_t_warning_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
svn_repos_notify_warning_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_notify_t_warning_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3732,13 +3894,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_notify_t_warning_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
PyObject * obj0 = 0 ;
svn_repos_notify_warning_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_notify_t_warning_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3753,14 +3915,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_notify_t_shard_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
apr_int64_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_notify_t_shard_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3776,13 +3938,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_notify_t_shard_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
PyObject * obj0 = 0 ;
apr_int64_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_notify_t_shard_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3797,14 +3959,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_notify_t_new_revision_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_notify_t_new_revision_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3825,13 +3987,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_notify_t_new_revision_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_notify_t_new_revision_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3846,14 +4008,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_notify_t_old_revision_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_notify_t_old_revision_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3874,13 +4036,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_notify_t_old_revision_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_notify_t_old_revision_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3895,14 +4057,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_notify_t_node_action_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
enum svn_node_action arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_notify_t_node_action_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3923,13 +4085,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_notify_t_node_action_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
PyObject * obj0 = 0 ;
enum svn_node_action result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_notify_t_node_action_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3944,13 +4106,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_notify_t_path_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_repos_notify_t_path_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -3972,13 +4134,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_notify_t_path_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_notify_t_path_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -4620,6 +4782,83 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_repos_hotcopy2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ char *arg1 = (char *) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ svn_cancel_func_t arg5 = (svn_cancel_func_t) 0 ;
+ void *arg6 = (void *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj5 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg7 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"ssOOO|O:svn_repos_hotcopy2",&arg1,&arg2,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+ {
+ arg3 = (svn_boolean_t)SWIG_As_long (obj2);
+ if (SWIG_arg_fail(svn_argnum_obj2)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg4 = (svn_boolean_t)SWIG_As_long (obj3);
+ if (SWIG_arg_fail(svn_argnum_obj3)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg5 = svn_swig_py_cancel_func;
+ arg6 = obj4; /* our function is the baton. */
+ }
+ if (obj5) {
+ /* Verify that the user supplied a valid pool */
+ if (obj5 != Py_None && obj5 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj5);
+ SWIG_arg_fail(svn_argnum_obj5);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_repos_hotcopy2((char const *)arg1,(char const *)arg2,arg3,arg4,arg5,arg6,arg7);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_repos_hotcopy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
char *arg1 = (char *) 0 ;
@@ -5162,6 +5401,76 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_repos_freeze(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
+ svn_repos_freeze_func_t arg2 = (svn_repos_freeze_func_t) 0 ;
+ void *arg3 = (void *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg4 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OO|O:svn_repos_freeze",&obj0,&obj1,&obj2)) SWIG_fail;
+ {
+ arg1 = (apr_array_header_t *) svn_swig_py_seq_to_array(obj0,
+ sizeof(const char *),
+ svn_swig_py_unwrap_string,
+ NULL,
+ _global_pool);
+ if (PyErr_Occurred())
+ SWIG_fail;
+ }
+ {
+ arg2 = svn_swig_py_repos_freeze_func;
+ arg3 = (void *)obj1;
+ }
+ if (obj2) {
+ /* Verify that the user supplied a valid pool */
+ if (obj2 != Py_None && obj2 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj2);
+ SWIG_arg_fail(svn_argnum_obj2);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_repos_freeze(arg1,arg2,arg3,arg4);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_repos_db_logfiles(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
@@ -6079,6 +6388,213 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_repos_hooks_setenv(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_repos_t *arg1 = (svn_repos_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj2 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg3 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"Os|O:svn_repos_hooks_setenv",&obj0,&arg2,&obj2)) SWIG_fail;
+ {
+ arg1 = (svn_repos_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj2) {
+ /* Verify that the user supplied a valid pool */
+ if (obj2 != Py_None && obj2 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj2);
+ SWIG_arg_fail(svn_argnum_obj2);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_repos_hooks_setenv(arg1,(char const *)arg2,arg3);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_begin_report3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ void **arg1 = (void **) 0 ;
+ svn_revnum_t arg2 ;
+ svn_repos_t *arg3 = (svn_repos_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ char *arg5 = (char *) 0 ;
+ char *arg6 = (char *) 0 ;
+ svn_boolean_t arg7 ;
+ svn_depth_t arg8 ;
+ svn_boolean_t arg9 ;
+ svn_boolean_t arg10 ;
+ svn_delta_editor_t *arg11 = (svn_delta_editor_t *) 0 ;
+ void *arg12 = (void *) 0 ;
+ svn_repos_authz_func_t arg13 = (svn_repos_authz_func_t) 0 ;
+ void *arg14 = (void *) 0 ;
+ apr_size_t arg15 ;
+ apr_pool_t *arg16 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ void *temp1 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj5 = 0 ;
+ PyObject * obj6 = 0 ;
+ PyObject * obj7 = 0 ;
+ PyObject * obj8 = 0 ;
+ PyObject * obj9 = 0 ;
+ PyObject * obj10 = 0 ;
+ PyObject * obj11 = 0 ;
+ PyObject * obj12 = 0 ;
+ PyObject * obj13 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg16 = _global_pool;
+ arg1 = &temp1;
+ if (!PyArg_ParseTuple(args,(char *)"OOsszOOOOOOOO|O:svn_repos_begin_report3",&obj0,&obj1,&arg4,&arg5,&arg6,&obj5,&obj6,&obj7,&obj8,&obj9,&obj10,&obj11,&obj12,&obj13)) SWIG_fail;
+ {
+ arg2 = (svn_revnum_t)SWIG_As_long (obj0);
+ if (SWIG_arg_fail(svn_argnum_obj0)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg3 = (svn_repos_t *)svn_swig_MustGetPtr(obj1, SWIGTYPE_p_svn_repos_t, svn_argnum_obj1);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg7 = (svn_boolean_t)SWIG_As_long (obj5);
+ if (SWIG_arg_fail(svn_argnum_obj5)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg8 = (svn_depth_t)SWIG_As_long (obj6);
+ if (SWIG_arg_fail(svn_argnum_obj6)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg9 = (svn_boolean_t)SWIG_As_long (obj7);
+ if (SWIG_arg_fail(svn_argnum_obj7)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg10 = (svn_boolean_t)SWIG_As_long (obj8);
+ if (SWIG_arg_fail(svn_argnum_obj8)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg11 = (svn_delta_editor_t *)svn_swig_MustGetPtr(obj9, SWIGTYPE_p_svn_delta_editor_t, svn_argnum_obj9);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ if (obj10 == Py_None) {
+ arg12 = NULL;
+ } else if (SWIG_ConvertPtr(obj10, (void **) &arg12, 0, 0) == -1) {
+ arg12 = (void *) obj10;
+ PyErr_Clear();
+ }
+ }
+ {
+ /* FIXME: Handle the NULL case. */
+ arg13 = svn_swig_py_repos_authz_func;
+ arg14 = obj11;
+ }
+ {
+ arg15 = (apr_size_t)SWIG_As_unsigned_SS_long (obj12);
+ if (SWIG_arg_fail(svn_argnum_obj12)) {
+ SWIG_fail;
+ }
+ }
+ if (obj13) {
+ /* Verify that the user supplied a valid pool */
+ if (obj13 != Py_None && obj13 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj13);
+ SWIG_arg_fail(svn_argnum_obj13);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_repos_begin_report3(arg1,arg2,arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,arg7,arg8,arg9,arg10,(struct svn_delta_editor_t const *)arg11,arg12,arg13,arg14,arg15,arg16);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg1, SWIGTYPE_p_void,
+ _global_py_pool, args))
+
+ ;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_repos_begin_report2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
void **arg1 = (void **) 0 ;
@@ -6253,7 +6769,7 @@ SWIGINTERN PyObject *_wrap_svn_repos_begin_report(PyObject *SWIGUNUSEDPARM(self)
SWIG_fail;
arg15 = _global_pool;
arg1 = &temp1;
- if (!PyArg_ParseTuple(args,(char *)"OsOsszOOOOOO|O:svn_repos_begin_report",&obj0,&arg3,&obj2,&arg5,&arg6,&arg7,&obj6,&obj7,&obj8,&obj9,&obj10,&obj11,&obj12)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"OzOsszOOOOOO|O:svn_repos_begin_report",&obj0,&arg3,&obj2,&arg5,&arg6,&arg7,&obj6,&obj7,&obj8,&obj9,&obj10,&obj11,&obj12)) SWIG_fail;
{
arg2 = (svn_revnum_t)SWIG_As_long (obj0);
if (SWIG_arg_fail(svn_argnum_obj0)) {
@@ -8844,7 +9360,7 @@ SWIGINTERN PyObject *_wrap_svn_repos_get_logs4(PyObject *SWIGUNUSEDPARM(self), P
}
{
arg12 = svn_swig_py_log_entry_receiver;
- arg13 = (void *)obj10;
+ arg13 = obj10;
}
if (obj11) {
/* Verify that the user supplied a valid pool */
@@ -8970,7 +9486,7 @@ SWIGINTERN PyObject *_wrap_svn_repos_get_logs3(PyObject *SWIGUNUSEDPARM(self), P
}
{
arg10 = svn_swig_py_log_receiver;
- arg11 = (void *)obj8;
+ arg11 = obj8;
}
if (obj9) {
/* Verify that the user supplied a valid pool */
@@ -9088,7 +9604,7 @@ SWIGINTERN PyObject *_wrap_svn_repos_get_logs2(PyObject *SWIGUNUSEDPARM(self), P
}
{
arg9 = svn_swig_py_log_receiver;
- arg10 = (void *)obj7;
+ arg10 = obj7;
}
if (obj8) {
/* Verify that the user supplied a valid pool */
@@ -9198,7 +9714,7 @@ SWIGINTERN PyObject *_wrap_svn_repos_get_logs(PyObject *SWIGUNUSEDPARM(self), Py
}
{
arg7 = svn_swig_py_log_receiver;
- arg8 = (void *)obj6;
+ arg8 = obj6;
}
if (obj7) {
/* Verify that the user supplied a valid pool */
@@ -11078,14 +11594,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_node_t_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
svn_node_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_node_t_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11106,13 +11622,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_node_t_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
PyObject * obj0 = 0 ;
svn_node_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_node_t_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11127,13 +11643,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_node_t_action_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
char arg2 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Oc:svn_repos_node_t_action_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11148,13 +11664,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_node_t_action_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
PyObject * obj0 = 0 ;
char result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_node_t_action_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11169,14 +11685,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_node_t_text_mod_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_node_t_text_mod_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11197,13 +11713,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_node_t_text_mod_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_node_t_text_mod_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11218,14 +11734,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_node_t_prop_mod_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_node_t_prop_mod_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11246,13 +11762,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_node_t_prop_mod_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_node_t_prop_mod_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11267,13 +11783,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_node_t_name_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_repos_node_t_name_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11295,13 +11811,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_node_t_name_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_node_t_name_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11316,14 +11832,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_node_t_copyfrom_rev_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_node_t_copyfrom_rev_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11344,13 +11860,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_node_t_copyfrom_rev_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_node_t_copyfrom_rev_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11365,13 +11881,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_node_t_copyfrom_path_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Oz:svn_repos_node_t_copyfrom_path_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11393,13 +11909,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_node_t_copyfrom_path_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_node_t_copyfrom_path_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11414,14 +11930,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_node_t_sibling_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
struct svn_repos_node_t *arg2 = (struct svn_repos_node_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_node_t_sibling_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11442,13 +11958,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_node_t_sibling_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
PyObject * obj0 = 0 ;
struct svn_repos_node_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_node_t_sibling_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11464,14 +11980,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_node_t_child_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
struct svn_repos_node_t *arg2 = (struct svn_repos_node_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_node_t_child_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11492,13 +12008,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_node_t_child_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
PyObject * obj0 = 0 ;
struct svn_repos_node_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_node_t_child_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11514,14 +12030,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_node_t_parent_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
struct svn_repos_node_t *arg2 = (struct svn_repos_node_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_node_t_parent_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11542,13 +12058,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_node_t_parent_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
PyObject * obj0 = 0 ;
struct svn_repos_node_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_node_t_parent_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_node_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_node_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12252,6 +12768,147 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_repos_load_fs4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_repos_t *arg1 = (svn_repos_t *) 0 ;
+ svn_stream_t *arg2 = (svn_stream_t *) 0 ;
+ svn_revnum_t arg3 ;
+ svn_revnum_t arg4 ;
+ enum svn_repos_load_uuid arg5 ;
+ char *arg6 = (char *) 0 ;
+ svn_boolean_t arg7 ;
+ svn_boolean_t arg8 ;
+ svn_boolean_t arg9 ;
+ svn_repos_notify_func_t arg10 = (svn_repos_notify_func_t) 0 ;
+ void *arg11 = (void *) 0 ;
+ svn_cancel_func_t arg12 = (svn_cancel_func_t) 0 ;
+ void *arg13 = (void *) 0 ;
+ apr_pool_t *arg14 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj6 = 0 ;
+ PyObject * obj7 = 0 ;
+ PyObject * obj8 = 0 ;
+ PyObject * obj9 = 0 ;
+ PyObject * obj10 = 0 ;
+ PyObject * obj11 = 0 ;
+ PyObject * obj12 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg14 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OOOOOzOOOOOO|O:svn_repos_load_fs4",&obj0,&obj1,&obj2,&obj3,&obj4,&arg6,&obj6,&obj7,&obj8,&obj9,&obj10,&obj11,&obj12)) SWIG_fail;
+ {
+ arg1 = (svn_repos_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg2 = svn_swig_py_make_stream (obj1, _global_pool);
+ }
+ {
+ arg3 = (svn_revnum_t)SWIG_As_long (obj2);
+ if (SWIG_arg_fail(svn_argnum_obj2)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg4 = (svn_revnum_t)SWIG_As_long (obj3);
+ if (SWIG_arg_fail(svn_argnum_obj3)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg5 = (enum svn_repos_load_uuid)SWIG_As_long (obj4);
+ if (SWIG_arg_fail(svn_argnum_obj4)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg7 = (svn_boolean_t)SWIG_As_long (obj6);
+ if (SWIG_arg_fail(svn_argnum_obj6)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg8 = (svn_boolean_t)SWIG_As_long (obj7);
+ if (SWIG_arg_fail(svn_argnum_obj7)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg9 = (svn_boolean_t)SWIG_As_long (obj8);
+ if (SWIG_arg_fail(svn_argnum_obj8)) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_repos_notify_func_t * tmp =
+ svn_swig_MustGetPtr(obj9, SWIGTYPE_p_p_f_p_void_p_q_const__struct_svn_repos_notify_t_p_apr_pool_t__void, svn_argnum_obj9);
+ if (tmp == NULL || PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ arg10 = *tmp;
+ }
+ {
+ if (obj10 == Py_None) {
+ arg11 = NULL;
+ } else if (SWIG_ConvertPtr(obj10, (void **) &arg11, 0, 0) == -1) {
+ arg11 = (void *) obj10;
+ PyErr_Clear();
+ }
+ }
+ {
+ arg12 = svn_swig_py_cancel_func;
+ arg13 = obj11; /* our function is the baton. */
+ }
+ if (obj12) {
+ /* Verify that the user supplied a valid pool */
+ if (obj12 != Py_None && obj12 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj12);
+ SWIG_arg_fail(svn_argnum_obj12);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_repos_load_fs4(arg1,arg2,arg3,arg4,arg5,(char const *)arg6,arg7,arg8,arg9,arg10,arg11,arg12,arg13,arg14);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_repos_load_fs3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_repos_t *arg1 = (svn_repos_t *) 0 ;
@@ -12565,27 +13222,27 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_new_revision_record_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_t_magic_header_record_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
- svn_error_t *(*arg2)(void **,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
+ svn_error_t *(*arg2)(int,void *,apr_pool_t *) = (svn_error_t *(*)(int,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns2_t_new_revision_record_set",&obj0,&obj1)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns3_t_magic_header_record_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
}
{
- int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
+ int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_int_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_new_revision_record_set" "', argument " "2"" of type '" "svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)""'");
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns3_t_magic_header_record_set" "', argument " "2"" of type '" "svn_error_t *(*)(int,void *,apr_pool_t *)""'");
}
}
- if (arg1) (arg1)->new_revision_record = arg2;
+ if (arg1) (arg1)->magic_header_record = arg2;
resultobj = SWIG_Py_Void();
return resultobj;
fail:
@@ -12593,37 +13250,37 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_new_revision_record_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_t_magic_header_record_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
PyObject * obj0 = 0 ;
- svn_error_t *(*result)(void **,apr_hash_t *,void *,apr_pool_t *) = 0 ;
+ svn_error_t *(*result)(int,void *,apr_pool_t *) = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns2_t_new_revision_record_get",&obj0)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns3_t_magic_header_record_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
}
- result = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) ((arg1)->new_revision_record);
- resultobj = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
+ result = (svn_error_t *(*)(int,void *,apr_pool_t *)) ((arg1)->magic_header_record);
+ resultobj = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_int_p_void_p_apr_pool_t__p_svn_error_t);
return resultobj;
fail:
return NULL;
}
-SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_uuid_record_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_t_uuid_record_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(char const *,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns2_t_uuid_record_set",&obj0,&obj1)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns3_t_uuid_record_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12631,7 +13288,7 @@ SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_uuid_record_set(PyObject *SWIG
{
int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_uuid_record_set" "', argument " "2"" of type '" "svn_error_t *(*)(char const *,void *,apr_pool_t *)""'");
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns3_t_uuid_record_set" "', argument " "2"" of type '" "svn_error_t *(*)(char const *,void *,apr_pool_t *)""'");
}
}
if (arg1) (arg1)->uuid_record = arg2;
@@ -12642,15 +13299,15 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_uuid_record_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_t_uuid_record_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(char const *,void *,apr_pool_t *) = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns2_t_uuid_record_get",&obj0)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns3_t_uuid_record_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12663,16 +13320,16 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_new_node_record_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_t_new_revision_record_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(void **,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns2_t_new_node_record_set",&obj0,&obj1)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns3_t_new_revision_record_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12680,7 +13337,56 @@ SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_new_node_record_set(PyObject *
{
int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_new_node_record_set" "', argument " "2"" of type '" "svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)""'");
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns3_t_new_revision_record_set" "', argument " "2"" of type '" "svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)""'");
+ }
+ }
+ if (arg1) (arg1)->new_revision_record = arg2;
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_t_new_revision_record_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ svn_error_t *(*result)(void **,apr_hash_t *,void *,apr_pool_t *) = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns3_t_new_revision_record_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) ((arg1)->new_revision_record);
+ resultobj = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_t_new_node_record_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
+ svn_error_t *(*arg2)(void **,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns3_t_new_node_record_set",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (struct svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns3_t_new_node_record_set" "', argument " "2"" of type '" "svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)""'");
}
}
if (arg1) (arg1)->new_node_record = arg2;
@@ -12691,15 +13397,15 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_new_node_record_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_t_new_node_record_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void **,apr_hash_t *,void *,apr_pool_t *) = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns2_t_new_node_record_get",&obj0)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns3_t_new_node_record_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12712,16 +13418,16 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_set_revision_property_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_t_set_revision_property_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_string_t const *) = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns2_t_set_revision_property_set",&obj0,&obj1)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns3_t_set_revision_property_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12729,7 +13435,7 @@ SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_set_revision_property_set(PyOb
{
int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_set_revision_property_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *,char const *,svn_string_t const *)""'");
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns3_t_set_revision_property_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *,char const *,svn_string_t const *)""'");
}
}
if (arg1) (arg1)->set_revision_property = arg2;
@@ -12740,15 +13446,15 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_set_revision_property_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_t_set_revision_property_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,char const *,svn_string_t const *) = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns2_t_set_revision_property_get",&obj0)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns3_t_set_revision_property_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12761,16 +13467,16 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_set_node_property_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_t_set_node_property_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_string_t const *) = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns2_t_set_node_property_set",&obj0,&obj1)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns3_t_set_node_property_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12778,7 +13484,7 @@ SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_set_node_property_set(PyObject
{
int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_set_node_property_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *,char const *,svn_string_t const *)""'");
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns3_t_set_node_property_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *,char const *,svn_string_t const *)""'");
}
}
if (arg1) (arg1)->set_node_property = arg2;
@@ -12789,15 +13495,15 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_set_node_property_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_t_set_node_property_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,char const *,svn_string_t const *) = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns2_t_set_node_property_get",&obj0)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns3_t_set_node_property_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12810,16 +13516,16 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_delete_node_property_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_t_delete_node_property_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *) = (svn_error_t *(*)(void *,char const *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns2_t_delete_node_property_set",&obj0,&obj1)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns3_t_delete_node_property_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12827,7 +13533,7 @@ SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_delete_node_property_set(PyObj
{
int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char__p_svn_error_t);
if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_delete_node_property_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *,char const *)""'");
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns3_t_delete_node_property_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *,char const *)""'");
}
}
if (arg1) (arg1)->delete_node_property = arg2;
@@ -12838,15 +13544,15 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_delete_node_property_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_t_delete_node_property_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,char const *) = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns2_t_delete_node_property_get",&obj0)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns3_t_delete_node_property_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12859,16 +13565,16 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_remove_node_props_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_t_remove_node_props_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns2_t_remove_node_props_set",&obj0,&obj1)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns3_t_remove_node_props_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12876,7 +13582,7 @@ SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_remove_node_props_set(PyObject
{
int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_remove_node_props_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *)""'");
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns3_t_remove_node_props_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *)""'");
}
}
if (arg1) (arg1)->remove_node_props = arg2;
@@ -12887,15 +13593,15 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_remove_node_props_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_t_remove_node_props_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *) = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns2_t_remove_node_props_get",&obj0)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns3_t_remove_node_props_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12908,16 +13614,16 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_set_fulltext_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_t_set_fulltext_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(svn_stream_t **,void *) = (svn_error_t *(*)(svn_stream_t **,void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns2_t_set_fulltext_set",&obj0,&obj1)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns3_t_set_fulltext_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12925,7 +13631,7 @@ SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_set_fulltext_set(PyObject *SWI
{
int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_p_p_svn_stream_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_set_fulltext_set" "', argument " "2"" of type '" "svn_error_t *(*)(svn_stream_t **,void *)""'");
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns3_t_set_fulltext_set" "', argument " "2"" of type '" "svn_error_t *(*)(svn_stream_t **,void *)""'");
}
}
if (arg1) (arg1)->set_fulltext = arg2;
@@ -12936,15 +13642,15 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_set_fulltext_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_t_set_fulltext_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_stream_t **,void *) = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns2_t_set_fulltext_get",&obj0)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns3_t_set_fulltext_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12957,16 +13663,16 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_apply_textdelta_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_t_apply_textdelta_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(svn_txdelta_window_handler_t *,void **,void *) = (svn_error_t *(*)(svn_txdelta_window_handler_t *,void **,void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns2_t_apply_textdelta_set",&obj0,&obj1)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns3_t_apply_textdelta_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12974,7 +13680,7 @@ SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_apply_textdelta_set(PyObject *
{
int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_p_svn_txdelta_window_handler_t_p_p_void_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_apply_textdelta_set" "', argument " "2"" of type '" "svn_error_t *(*)(svn_txdelta_window_handler_t *,void **,void *)""'");
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns3_t_apply_textdelta_set" "', argument " "2"" of type '" "svn_error_t *(*)(svn_txdelta_window_handler_t *,void **,void *)""'");
}
}
if (arg1) (arg1)->apply_textdelta = arg2;
@@ -12985,15 +13691,15 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_apply_textdelta_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_t_apply_textdelta_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_txdelta_window_handler_t *,void **,void *) = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns2_t_apply_textdelta_get",&obj0)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns3_t_apply_textdelta_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13006,16 +13712,16 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_close_node_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_t_close_node_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns2_t_close_node_set",&obj0,&obj1)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns3_t_close_node_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13023,7 +13729,7 @@ SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_close_node_set(PyObject *SWIGU
{
int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_close_node_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *)""'");
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns3_t_close_node_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *)""'");
}
}
if (arg1) (arg1)->close_node = arg2;
@@ -13034,15 +13740,15 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_close_node_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_t_close_node_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *) = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns2_t_close_node_get",&obj0)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns3_t_close_node_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13055,16 +13761,16 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_close_revision_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_t_close_revision_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns2_t_close_revision_set",&obj0,&obj1)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns3_t_close_revision_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13072,7 +13778,7 @@ SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_close_revision_set(PyObject *S
{
int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_close_revision_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *)""'");
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns3_t_close_revision_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *)""'");
}
}
if (arg1) (arg1)->close_revision = arg2;
@@ -13083,15 +13789,15 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_close_revision_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_t_close_revision_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *) = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns2_t_close_revision_get",&obj0)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns3_t_close_revision_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13104,21 +13810,22 @@ fail:
}
-SWIGINTERN PyObject *svn_repos_parse_fns2_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *svn_repos_parse_fns3_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *obj;
if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
- SWIG_TypeNewClientData(SWIGTYPE_p_svn_repos_parse_fns2_t, SWIG_NewClientData(obj));
+ SWIG_TypeNewClientData(SWIGTYPE_p_svn_repos_parse_fns3_t, SWIG_NewClientData(obj));
return SWIG_Py_Void();
}
-SWIGINTERN PyObject *_wrap_svn_repos_parse_dumpstream2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_svn_repos_parse_dumpstream3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_stream_t *arg1 = (svn_stream_t *) 0 ;
- svn_repos_parse_fns2_t *arg2 = (svn_repos_parse_fns2_t *) 0 ;
+ svn_repos_parse_fns3_t *arg2 = (svn_repos_parse_fns3_t *) 0 ;
void *arg3 = (void *) 0 ;
- svn_cancel_func_t arg4 = (svn_cancel_func_t) 0 ;
- void *arg5 = (void *) 0 ;
- apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ svn_boolean_t arg4 ;
+ svn_cancel_func_t arg5 = (svn_cancel_func_t) 0 ;
+ void *arg6 = (void *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool = NULL ;
PyObject *_global_py_pool = NULL ;
PyObject * obj0 = 0 ;
@@ -13126,18 +13833,19 @@ SWIGINTERN PyObject *_wrap_svn_repos_parse_dumpstream2(PyObject *SWIGUNUSEDPARM(
PyObject * obj2 = 0 ;
PyObject * obj3 = 0 ;
PyObject * obj4 = 0 ;
+ PyObject * obj5 = 0 ;
svn_error_t *result = 0 ;
if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
&_global_py_pool, &_global_pool))
SWIG_fail;
- arg6 = _global_pool;
- if (!PyArg_ParseTuple(args,(char *)"OOOO|O:svn_repos_parse_dumpstream2",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+ arg7 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OOOOO|O:svn_repos_parse_dumpstream3",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
{
arg1 = svn_swig_py_make_stream (obj0, _global_pool);
}
{
- arg2 = (svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj1, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj1);
+ arg2 = (svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj1, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj1);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13151,21 +13859,27 @@ SWIGINTERN PyObject *_wrap_svn_repos_parse_dumpstream2(PyObject *SWIGUNUSEDPARM(
}
}
{
- arg4 = svn_swig_py_cancel_func;
- arg5 = obj3; /* our function is the baton. */
+ arg4 = (svn_boolean_t)SWIG_As_long (obj3);
+ if (SWIG_arg_fail(svn_argnum_obj3)) {
+ SWIG_fail;
+ }
}
- if (obj4) {
+ {
+ arg5 = svn_swig_py_cancel_func;
+ arg6 = obj4; /* our function is the baton. */
+ }
+ if (obj5) {
/* Verify that the user supplied a valid pool */
- if (obj4 != Py_None && obj4 != _global_py_pool) {
- SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj4);
- SWIG_arg_fail(svn_argnum_obj4);
+ if (obj5 != Py_None && obj5 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj5);
+ SWIG_arg_fail(svn_argnum_obj5);
SWIG_fail;
}
}
{
svn_swig_py_release_py_lock();
- result = (svn_error_t *)svn_repos_parse_dumpstream2(arg1,(struct svn_repos_parse_fns2_t const *)arg2,arg3,arg4,arg5,arg6);
+ result = (svn_error_t *)svn_repos_parse_dumpstream3(arg1,(struct svn_repos_parse_fns3_t const *)arg2,arg3,arg4,arg5,arg6,arg7);
svn_swig_py_acquire_py_lock();
@@ -13193,38 +13907,42 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_repos_get_fs_build_parser3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_svn_repos_get_fs_build_parser4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parse_fns2_t **arg1 = (svn_repos_parse_fns2_t **) 0 ;
+ svn_repos_parse_fns3_t **arg1 = (svn_repos_parse_fns3_t **) 0 ;
void **arg2 = (void **) 0 ;
svn_repos_t *arg3 = (svn_repos_t *) 0 ;
- svn_boolean_t arg4 ;
- svn_boolean_t arg5 ;
- enum svn_repos_load_uuid arg6 ;
- char *arg7 = (char *) 0 ;
- svn_repos_notify_func_t arg8 = (svn_repos_notify_func_t) 0 ;
- void *arg9 = (void *) 0 ;
- apr_pool_t *arg10 = (apr_pool_t *) 0 ;
+ svn_revnum_t arg4 ;
+ svn_revnum_t arg5 ;
+ svn_boolean_t arg6 ;
+ svn_boolean_t arg7 ;
+ enum svn_repos_load_uuid arg8 ;
+ char *arg9 = (char *) 0 ;
+ svn_repos_notify_func_t arg10 = (svn_repos_notify_func_t) 0 ;
+ void *arg11 = (void *) 0 ;
+ apr_pool_t *arg12 = (apr_pool_t *) 0 ;
apr_pool_t *_global_pool = NULL ;
PyObject *_global_py_pool = NULL ;
- svn_repos_parse_fns2_t *temp1 ;
+ svn_repos_parse_fns3_t *temp1 ;
void *temp2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
PyObject * obj2 = 0 ;
PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
PyObject * obj5 = 0 ;
- PyObject * obj6 = 0 ;
PyObject * obj7 = 0 ;
+ PyObject * obj8 = 0 ;
+ PyObject * obj9 = 0 ;
svn_error_t *result = 0 ;
if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
&_global_py_pool, &_global_pool))
SWIG_fail;
- arg10 = _global_pool;
+ arg12 = _global_pool;
arg1 = &temp1;
arg2 = &temp2;
- if (!PyArg_ParseTuple(args,(char *)"OOOOzOO|O:svn_repos_get_fs_build_parser3",&obj0,&obj1,&obj2,&obj3,&arg7,&obj5,&obj6,&obj7)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"OOOOOOzOO|O:svn_repos_get_fs_build_parser4",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&arg9,&obj7,&obj8,&obj9)) SWIG_fail;
{
arg3 = (svn_repos_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
@@ -13232,51 +13950,63 @@ SWIGINTERN PyObject *_wrap_svn_repos_get_fs_build_parser3(PyObject *SWIGUNUSEDPA
}
}
{
- arg4 = (svn_boolean_t)SWIG_As_long (obj1);
+ arg4 = (svn_revnum_t)SWIG_As_long (obj1);
if (SWIG_arg_fail(svn_argnum_obj1)) {
SWIG_fail;
}
}
{
- arg5 = (svn_boolean_t)SWIG_As_long (obj2);
+ arg5 = (svn_revnum_t)SWIG_As_long (obj2);
if (SWIG_arg_fail(svn_argnum_obj2)) {
SWIG_fail;
}
}
{
- arg6 = (enum svn_repos_load_uuid)SWIG_As_long (obj3);
+ arg6 = (svn_boolean_t)SWIG_As_long (obj3);
if (SWIG_arg_fail(svn_argnum_obj3)) {
SWIG_fail;
}
}
{
+ arg7 = (svn_boolean_t)SWIG_As_long (obj4);
+ if (SWIG_arg_fail(svn_argnum_obj4)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg8 = (enum svn_repos_load_uuid)SWIG_As_long (obj5);
+ if (SWIG_arg_fail(svn_argnum_obj5)) {
+ SWIG_fail;
+ }
+ }
+ {
svn_repos_notify_func_t * tmp =
- svn_swig_MustGetPtr(obj5, SWIGTYPE_p_p_f_p_void_p_q_const__struct_svn_repos_notify_t_p_apr_pool_t__void, svn_argnum_obj5);
+ svn_swig_MustGetPtr(obj7, SWIGTYPE_p_p_f_p_void_p_q_const__struct_svn_repos_notify_t_p_apr_pool_t__void, svn_argnum_obj7);
if (tmp == NULL || PyErr_Occurred()) {
SWIG_fail;
}
- arg8 = *tmp;
+ arg10 = *tmp;
}
{
- if (obj6 == Py_None) {
- arg9 = NULL;
- } else if (SWIG_ConvertPtr(obj6, (void **) &arg9, 0, 0) == -1) {
- arg9 = (void *) obj6;
+ if (obj8 == Py_None) {
+ arg11 = NULL;
+ } else if (SWIG_ConvertPtr(obj8, (void **) &arg11, 0, 0) == -1) {
+ arg11 = (void *) obj8;
PyErr_Clear();
}
}
- if (obj7) {
+ if (obj9) {
/* Verify that the user supplied a valid pool */
- if (obj7 != Py_None && obj7 != _global_py_pool) {
- SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj7);
- SWIG_arg_fail(svn_argnum_obj7);
+ if (obj9 != Py_None && obj9 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj9);
+ SWIG_arg_fail(svn_argnum_obj9);
SWIG_fail;
}
}
{
svn_swig_py_release_py_lock();
- result = (svn_error_t *)svn_repos_get_fs_build_parser3((struct svn_repos_parse_fns2_t const **)arg1,arg2,arg3,arg4,arg5,arg6,(char const *)arg7,arg8,arg9,arg10);
+ result = (svn_error_t *)svn_repos_get_fs_build_parser4((struct svn_repos_parse_fns3_t const **)arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,(char const *)arg9,arg10,arg11,arg12);
svn_swig_py_acquire_py_lock();
@@ -13293,10 +14023,13 @@ SWIGINTERN PyObject *_wrap_svn_repos_get_fs_build_parser3(PyObject *SWIGUNUSEDPA
resultobj = Py_None;
}
{
- resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg1, SWIGTYPE_p_svn_repos_parse_fns2_t,
- _global_py_pool, args))
+ /* FIXME: Missing argout typemap: svn_repos_get_fs_build_parser4 arg 1 (svn_repos_parse_fns3_t const **) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_repos_get_fs_build_parser4 is not implemented yet");
- ;
}
{
resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg2, SWIGTYPE_p_void,
@@ -13316,116 +14049,562 @@ fail:
}
-SWIGINTERN PyObject *_wrap_svn_repos_get_fs_build_parser2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_new_revision_record_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parse_fns2_t **arg1 = (svn_repos_parse_fns2_t **) 0 ;
- void **arg2 = (void **) 0 ;
- svn_repos_t *arg3 = (svn_repos_t *) 0 ;
- svn_boolean_t arg4 ;
- enum svn_repos_load_uuid arg5 ;
- svn_stream_t *arg6 = (svn_stream_t *) 0 ;
- char *arg7 = (char *) 0 ;
- apr_pool_t *arg8 = (apr_pool_t *) 0 ;
- apr_pool_t *_global_pool = NULL ;
- PyObject *_global_py_pool = NULL ;
- svn_repos_parse_fns2_t *temp1 ;
- void *temp2 ;
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(void **,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
- PyObject * obj2 = 0 ;
- PyObject * obj3 = 0 ;
- PyObject * obj5 = 0 ;
- svn_error_t *result = 0 ;
- if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
- &_global_py_pool, &_global_pool))
- SWIG_fail;
- arg8 = _global_pool;
- arg1 = &temp1;
- arg2 = &temp2;
- if (!PyArg_ParseTuple(args,(char *)"OOOOz|O:svn_repos_get_fs_build_parser2",&obj0,&obj1,&obj2,&obj3,&arg7,&obj5)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns2_t_new_revision_record_set",&obj0,&obj1)) SWIG_fail;
{
- arg3 = (svn_repos_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
}
{
- arg4 = (svn_boolean_t)SWIG_As_long (obj1);
- if (SWIG_arg_fail(svn_argnum_obj1)) {
+ int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_new_revision_record_set" "', argument " "2"" of type '" "svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)""'");
+ }
+ }
+ if (arg1) (arg1)->new_revision_record = arg2;
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_new_revision_record_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ svn_error_t *(*result)(void **,apr_hash_t *,void *,apr_pool_t *) = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns2_t_new_revision_record_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
SWIG_fail;
}
}
+ result = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) ((arg1)->new_revision_record);
+ resultobj = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_uuid_record_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(char const *,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,void *,apr_pool_t *)) 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns2_t_uuid_record_set",&obj0,&obj1)) SWIG_fail;
{
- arg5 = (enum svn_repos_load_uuid)SWIG_As_long (obj2);
- if (SWIG_arg_fail(svn_argnum_obj2)) {
+ arg1 = (struct svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
SWIG_fail;
}
}
{
- arg6 = svn_swig_py_make_stream (obj3, _global_pool);
+ int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_uuid_record_set" "', argument " "2"" of type '" "svn_error_t *(*)(char const *,void *,apr_pool_t *)""'");
+ }
}
- if (obj5) {
- /* Verify that the user supplied a valid pool */
- if (obj5 != Py_None && obj5 != _global_py_pool) {
- SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj5);
- SWIG_arg_fail(svn_argnum_obj5);
+ if (arg1) (arg1)->uuid_record = arg2;
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_uuid_record_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ svn_error_t *(*result)(char const *,void *,apr_pool_t *) = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns2_t_uuid_record_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
SWIG_fail;
}
}
+ result = (svn_error_t *(*)(char const *,void *,apr_pool_t *)) ((arg1)->uuid_record);
+ resultobj = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_new_node_record_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(void **,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns2_t_new_node_record_set",&obj0,&obj1)) SWIG_fail;
{
- svn_swig_py_release_py_lock();
-
- result = (svn_error_t *)svn_repos_get_fs_build_parser2((struct svn_repos_parse_fns2_t const **)arg1,arg2,arg3,arg4,arg5,arg6,(char const *)arg7,arg8);
-
- svn_swig_py_acquire_py_lock();
-
+ arg1 = (struct svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
}
{
- if (result != NULL) {
- if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
- svn_swig_py_svn_exception(result);
- else
- svn_error_clear(result);
+ int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_new_node_record_set" "', argument " "2"" of type '" "svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)""'");
+ }
+ }
+ if (arg1) (arg1)->new_node_record = arg2;
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_new_node_record_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ svn_error_t *(*result)(void **,apr_hash_t *,void *,apr_pool_t *) = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns2_t_new_node_record_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
SWIG_fail;
}
- Py_INCREF(Py_None);
- resultobj = Py_None;
}
+ result = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) ((arg1)->new_node_record);
+ resultobj = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_set_revision_property_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(void *,char const *,svn_string_t const *) = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns2_t_set_revision_property_set",&obj0,&obj1)) SWIG_fail;
{
- resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg1, SWIGTYPE_p_svn_repos_parse_fns2_t,
- _global_py_pool, args))
-
- ;
+ arg1 = (struct svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
}
{
- resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg2, SWIGTYPE_p_void,
- _global_py_pool, args))
-
- ;
+ int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_set_revision_property_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *,char const *,svn_string_t const *)""'");
+ }
}
+ if (arg1) (arg1)->set_revision_property = arg2;
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_set_revision_property_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ svn_error_t *(*result)(void *,char const *,svn_string_t const *) = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns2_t_set_revision_property_get",&obj0)) SWIG_fail;
{
- Py_XDECREF(_global_py_pool);
+ arg1 = (struct svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
}
+ result = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) ((arg1)->set_revision_property);
+ resultobj = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t);
return resultobj;
fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_set_node_property_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(void *,char const *,svn_string_t const *) = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns2_t_set_node_property_set",&obj0,&obj1)) SWIG_fail;
{
- Py_XDECREF(_global_py_pool);
+ arg1 = (struct svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_set_node_property_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *,char const *,svn_string_t const *)""'");
+ }
+ }
+ if (arg1) (arg1)->set_node_property = arg2;
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_set_node_property_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ svn_error_t *(*result)(void *,char const *,svn_string_t const *) = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns2_t_set_node_property_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) ((arg1)->set_node_property);
+ resultobj = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_delete_node_property_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(void *,char const *) = (svn_error_t *(*)(void *,char const *)) 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns2_t_delete_node_property_set",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (struct svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_delete_node_property_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *,char const *)""'");
+ }
+ }
+ if (arg1) (arg1)->delete_node_property = arg2;
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_delete_node_property_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ svn_error_t *(*result)(void *,char const *) = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns2_t_delete_node_property_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (svn_error_t *(*)(void *,char const *)) ((arg1)->delete_node_property);
+ resultobj = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char__p_svn_error_t);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_remove_node_props_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns2_t_remove_node_props_set",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (struct svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_remove_node_props_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *)""'");
+ }
+ }
+ if (arg1) (arg1)->remove_node_props = arg2;
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_remove_node_props_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ svn_error_t *(*result)(void *) = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns2_t_remove_node_props_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (svn_error_t *(*)(void *)) ((arg1)->remove_node_props);
+ resultobj = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__p_svn_error_t);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_set_fulltext_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(svn_stream_t **,void *) = (svn_error_t *(*)(svn_stream_t **,void *)) 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns2_t_set_fulltext_set",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (struct svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_p_p_svn_stream_t_p_void__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_set_fulltext_set" "', argument " "2"" of type '" "svn_error_t *(*)(svn_stream_t **,void *)""'");
+ }
+ }
+ if (arg1) (arg1)->set_fulltext = arg2;
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_set_fulltext_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ svn_error_t *(*result)(svn_stream_t **,void *) = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns2_t_set_fulltext_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (svn_error_t *(*)(svn_stream_t **,void *)) ((arg1)->set_fulltext);
+ resultobj = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_svn_stream_t_p_void__p_svn_error_t);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_apply_textdelta_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(svn_txdelta_window_handler_t *,void **,void *) = (svn_error_t *(*)(svn_txdelta_window_handler_t *,void **,void *)) 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns2_t_apply_textdelta_set",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (struct svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_p_svn_txdelta_window_handler_t_p_p_void_p_void__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_apply_textdelta_set" "', argument " "2"" of type '" "svn_error_t *(*)(svn_txdelta_window_handler_t *,void **,void *)""'");
+ }
+ }
+ if (arg1) (arg1)->apply_textdelta = arg2;
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_apply_textdelta_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ svn_error_t *(*result)(svn_txdelta_window_handler_t *,void **,void *) = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns2_t_apply_textdelta_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (svn_error_t *(*)(svn_txdelta_window_handler_t *,void **,void *)) ((arg1)->apply_textdelta);
+ resultobj = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_txdelta_window_handler_t_p_p_void_p_void__p_svn_error_t);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_close_node_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns2_t_close_node_set",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (struct svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
}
+ {
+ int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_close_node_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *)""'");
+ }
+ }
+ if (arg1) (arg1)->close_node = arg2;
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
return NULL;
}
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_close_node_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ svn_error_t *(*result)(void *) = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns2_t_close_node_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (svn_error_t *(*)(void *)) ((arg1)->close_node);
+ resultobj = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__p_svn_error_t);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_close_revision_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns2_t_close_revision_set",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (struct svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), "in method '" "svn_repos_parse_fns2_t_close_revision_set" "', argument " "2"" of type '" "svn_error_t *(*)(void *)""'");
+ }
+ }
+ if (arg1) (arg1)->close_revision = arg2;
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_t_close_revision_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ svn_error_t *(*result)(void *) = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parse_fns2_t_close_revision_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_repos_parse_fns2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (svn_error_t *(*)(void *)) ((arg1)->close_revision);
+ resultobj = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__p_svn_error_t);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *svn_repos_parse_fns2_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *obj;
+ if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+ SWIG_TypeNewClientData(SWIGTYPE_p_svn_repos_parse_fns2_t, SWIG_NewClientData(obj));
+ return SWIG_Py_Void();
+}
+
SWIGINTERN PyObject *_wrap_svn_repos_parser_fns_t_new_revision_record_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(void **,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parser_fns_t_new_revision_record_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_parser_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13446,13 +14625,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_parser_fns_t_new_revision_record_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void **,apr_hash_t *,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parser_fns_t_new_revision_record_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_parser_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13467,14 +14646,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_parser_fns_t_uuid_record_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(char const *,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parser_fns_t_uuid_record_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_parser_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13495,13 +14674,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_parser_fns_t_uuid_record_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(char const *,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parser_fns_t_uuid_record_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_parser_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13516,14 +14695,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_parser_fns_t_new_node_record_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(void **,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parser_fns_t_new_node_record_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_parser_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13544,13 +14723,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_parser_fns_t_new_node_record_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void **,apr_hash_t *,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parser_fns_t_new_node_record_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_parser_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13565,14 +14744,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_parser_fns_t_set_revision_property_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_string_t const *) = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parser_fns_t_set_revision_property_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_parser_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13593,13 +14772,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_parser_fns_t_set_revision_property_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,char const *,svn_string_t const *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parser_fns_t_set_revision_property_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_parser_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13614,14 +14793,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_parser_fns_t_set_node_property_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_string_t const *) = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parser_fns_t_set_node_property_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_parser_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13642,13 +14821,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_parser_fns_t_set_node_property_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *,char const *,svn_string_t const *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parser_fns_t_set_node_property_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_parser_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13663,14 +14842,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_parser_fns_t_remove_node_props_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parser_fns_t_remove_node_props_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_parser_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13691,13 +14870,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_parser_fns_t_remove_node_props_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parser_fns_t_remove_node_props_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_parser_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13712,14 +14891,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_parser_fns_t_set_fulltext_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(svn_stream_t **,void *) = (svn_error_t *(*)(svn_stream_t **,void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parser_fns_t_set_fulltext_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_parser_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13740,13 +14919,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_parser_fns_t_set_fulltext_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_stream_t **,void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parser_fns_t_set_fulltext_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_parser_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13761,14 +14940,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_parser_fns_t_close_node_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parser_fns_t_close_node_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_parser_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13789,13 +14968,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_parser_fns_t_close_node_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parser_fns_t_close_node_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_parser_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13810,14 +14989,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_parser_fns_t_close_revision_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parser_fns_t_close_revision_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_repos_parser_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13838,13 +15017,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_repos_parser_fns_t_close_revision_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_repos_parser_fns_t_close_revision_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_repos_parser_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
+ arg1 = (struct svn_repos_parse_fns_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13864,6 +15043,88 @@ SWIGINTERN PyObject *svn_repos_parser_fns_t_swigregister(PyObject *SWIGUNUSEDPAR
return SWIG_Py_Void();
}
+SWIGINTERN PyObject *_wrap_svn_repos_parse_dumpstream2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_stream_t *arg1 = (svn_stream_t *) 0 ;
+ svn_repos_parser_fns2_t *arg2 = (svn_repos_parser_fns2_t *) 0 ;
+ void *arg3 = (void *) 0 ;
+ svn_cancel_func_t arg4 = (svn_cancel_func_t) 0 ;
+ void *arg5 = (void *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg6 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OOOO|O:svn_repos_parse_dumpstream2",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+ {
+ arg1 = svn_swig_py_make_stream (obj0, _global_pool);
+ }
+ {
+ arg2 = (svn_repos_parser_fns2_t *)svn_swig_MustGetPtr(obj1, SWIGTYPE_p_svn_repos_parse_fns2_t, svn_argnum_obj1);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ if (obj2 == Py_None) {
+ arg3 = NULL;
+ } else if (SWIG_ConvertPtr(obj2, (void **) &arg3, 0, 0) == -1) {
+ arg3 = (void *) obj2;
+ PyErr_Clear();
+ }
+ }
+ {
+ arg4 = svn_swig_py_cancel_func;
+ arg5 = obj3; /* our function is the baton. */
+ }
+ if (obj4) {
+ /* Verify that the user supplied a valid pool */
+ if (obj4 != Py_None && obj4 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj4);
+ SWIG_arg_fail(svn_argnum_obj4);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_repos_parse_dumpstream2(arg1,(struct svn_repos_parse_fns2_t const *)arg2,arg3,arg4,arg5,arg6);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_repos_parse_dumpstream(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_stream_t *arg1 = (svn_stream_t *) 0 ;
@@ -13946,6 +15207,229 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_repos_get_fs_build_parser3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_repos_parse_fns2_t **arg1 = (svn_repos_parse_fns2_t **) 0 ;
+ void **arg2 = (void **) 0 ;
+ svn_repos_t *arg3 = (svn_repos_t *) 0 ;
+ svn_boolean_t arg4 ;
+ svn_boolean_t arg5 ;
+ enum svn_repos_load_uuid arg6 ;
+ char *arg7 = (char *) 0 ;
+ svn_repos_notify_func_t arg8 = (svn_repos_notify_func_t) 0 ;
+ void *arg9 = (void *) 0 ;
+ apr_pool_t *arg10 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_repos_parse_fns2_t *temp1 ;
+ void *temp2 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj5 = 0 ;
+ PyObject * obj6 = 0 ;
+ PyObject * obj7 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg10 = _global_pool;
+ arg1 = &temp1;
+ arg2 = &temp2;
+ if (!PyArg_ParseTuple(args,(char *)"OOOOzOO|O:svn_repos_get_fs_build_parser3",&obj0,&obj1,&obj2,&obj3,&arg7,&obj5,&obj6,&obj7)) SWIG_fail;
+ {
+ arg3 = (svn_repos_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg4 = (svn_boolean_t)SWIG_As_long (obj1);
+ if (SWIG_arg_fail(svn_argnum_obj1)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg5 = (svn_boolean_t)SWIG_As_long (obj2);
+ if (SWIG_arg_fail(svn_argnum_obj2)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg6 = (enum svn_repos_load_uuid)SWIG_As_long (obj3);
+ if (SWIG_arg_fail(svn_argnum_obj3)) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_repos_notify_func_t * tmp =
+ svn_swig_MustGetPtr(obj5, SWIGTYPE_p_p_f_p_void_p_q_const__struct_svn_repos_notify_t_p_apr_pool_t__void, svn_argnum_obj5);
+ if (tmp == NULL || PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ arg8 = *tmp;
+ }
+ {
+ if (obj6 == Py_None) {
+ arg9 = NULL;
+ } else if (SWIG_ConvertPtr(obj6, (void **) &arg9, 0, 0) == -1) {
+ arg9 = (void *) obj6;
+ PyErr_Clear();
+ }
+ }
+ if (obj7) {
+ /* Verify that the user supplied a valid pool */
+ if (obj7 != Py_None && obj7 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj7);
+ SWIG_arg_fail(svn_argnum_obj7);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_repos_get_fs_build_parser3((struct svn_repos_parse_fns2_t const **)arg1,arg2,arg3,arg4,arg5,arg6,(char const *)arg7,arg8,arg9,arg10);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg1, SWIGTYPE_p_svn_repos_parse_fns2_t,
+ _global_py_pool, args))
+
+ ;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg2, SWIGTYPE_p_void,
+ _global_py_pool, args))
+
+ ;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_get_fs_build_parser2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_repos_parse_fns2_t **arg1 = (svn_repos_parse_fns2_t **) 0 ;
+ void **arg2 = (void **) 0 ;
+ svn_repos_t *arg3 = (svn_repos_t *) 0 ;
+ svn_boolean_t arg4 ;
+ enum svn_repos_load_uuid arg5 ;
+ svn_stream_t *arg6 = (svn_stream_t *) 0 ;
+ char *arg7 = (char *) 0 ;
+ apr_pool_t *arg8 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_repos_parse_fns2_t *temp1 ;
+ void *temp2 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj5 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg8 = _global_pool;
+ arg1 = &temp1;
+ arg2 = &temp2;
+ if (!PyArg_ParseTuple(args,(char *)"OOOOz|O:svn_repos_get_fs_build_parser2",&obj0,&obj1,&obj2,&obj3,&arg7,&obj5)) SWIG_fail;
+ {
+ arg3 = (svn_repos_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg4 = (svn_boolean_t)SWIG_As_long (obj1);
+ if (SWIG_arg_fail(svn_argnum_obj1)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg5 = (enum svn_repos_load_uuid)SWIG_As_long (obj2);
+ if (SWIG_arg_fail(svn_argnum_obj2)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg6 = svn_swig_py_make_stream (obj3, _global_pool);
+ }
+ if (obj5) {
+ /* Verify that the user supplied a valid pool */
+ if (obj5 != Py_None && obj5 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj5);
+ SWIG_arg_fail(svn_argnum_obj5);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_repos_get_fs_build_parser2((struct svn_repos_parse_fns2_t const **)arg1,arg2,arg3,arg4,arg5,arg6,(char const *)arg7,arg8);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg1, SWIGTYPE_p_svn_repos_parse_fns2_t,
+ _global_py_pool, args))
+
+ ;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg2, SWIGTYPE_p_void,
+ _global_py_pool, args))
+
+ ;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_repos_get_fs_build_parser(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_repos_parser_fns_t **arg1 = (svn_repos_parser_fns_t **) 0 ;
@@ -14046,6 +15530,77 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_repos_authz_read2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_authz_t **arg1 = (svn_authz_t **) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_boolean_t arg4 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_authz_t *temp1 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg5 = _global_pool;
+ arg1 = &temp1;
+ if (!PyArg_ParseTuple(args,(char *)"ssO|O:svn_repos_authz_read2",&arg2,&arg3,&obj2,&obj3)) SWIG_fail;
+ {
+ arg4 = (svn_boolean_t)SWIG_As_long (obj2);
+ if (SWIG_arg_fail(svn_argnum_obj2)) {
+ SWIG_fail;
+ }
+ }
+ if (obj3) {
+ /* Verify that the user supplied a valid pool */
+ if (obj3 != Py_None && obj3 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj3);
+ SWIG_arg_fail(svn_argnum_obj3);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_repos_authz_read2(arg1,(char const *)arg2,(char const *)arg3,arg4,arg5);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg1, SWIGTYPE_p_svn_authz_t,
+ _global_py_pool, args))
+
+ ;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_repos_authz_read(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_authz_t **arg1 = (svn_authz_t **) 0 ;
@@ -14116,6 +15671,77 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_repos_authz_parse(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_authz_t **arg1 = (svn_authz_t **) 0 ;
+ svn_stream_t *arg2 = (svn_stream_t *) 0 ;
+ svn_stream_t *arg3 = (svn_stream_t *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_authz_t *temp1 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg4 = _global_pool;
+ arg1 = &temp1;
+ if (!PyArg_ParseTuple(args,(char *)"OO|O:svn_repos_authz_parse",&obj0,&obj1,&obj2)) SWIG_fail;
+ {
+ arg2 = svn_swig_py_make_stream (obj0, _global_pool);
+ }
+ {
+ arg3 = svn_swig_py_make_stream (obj1, _global_pool);
+ }
+ if (obj2) {
+ /* Verify that the user supplied a valid pool */
+ if (obj2 != Py_None && obj2 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj2);
+ SWIG_arg_fail(svn_argnum_obj2);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_repos_authz_parse(arg1,arg2,arg3,arg4);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg1, SWIGTYPE_p_svn_authz_t,
+ _global_py_pool, args))
+
+ ;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_repos_authz_check_access(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_authz_t *arg1 = (svn_authz_t *) 0 ;
@@ -14281,6 +15907,102 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_repos_fs_get_inherited_props(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
+ svn_fs_root_t *arg2 = (svn_fs_root_t *) 0 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+ svn_repos_authz_func_t arg5 = (svn_repos_authz_func_t) 0 ;
+ void *arg6 = (void *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg8 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ apr_array_header_t *temp1 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj5 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg7 = _global_pool;
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg8 = _global_pool;
+ arg1 = &temp1;
+ if (!PyArg_ParseTuple(args,(char *)"OssO|OO:svn_repos_fs_get_inherited_props",&obj0,&arg3,&arg4,&obj3,&obj4,&obj5)) SWIG_fail;
+ {
+ arg2 = (svn_fs_root_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_fs_root_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ /* FIXME: Handle the NULL case. */
+ arg5 = svn_swig_py_repos_authz_func;
+ arg6 = obj3;
+ }
+ if (obj4) {
+ /* Verify that the user supplied a valid pool */
+ if (obj4 != Py_None && obj4 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj4);
+ SWIG_arg_fail(svn_argnum_obj4);
+ SWIG_fail;
+ }
+ }
+ if (obj5) {
+ /* Verify that the user supplied a valid pool */
+ if (obj5 != Py_None && obj5 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj5);
+ SWIG_arg_fail(svn_argnum_obj5);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_repos_fs_get_inherited_props(arg1,arg2,(char const *)arg3,(char const *)arg4,arg5,arg6,arg7,arg8);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_py_propinheriteditemarray_to_dict(*arg1));
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_repos_remember_client_capabilities(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_repos_t *arg1 = (svn_repos_t *) 0 ;
@@ -14341,6 +16063,785 @@ SWIGINTERN PyObject *svn_authz_t_swigregister(PyObject *SWIGUNUSEDPARM(self), Py
return SWIG_Py_Void();
}
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_invoke_magic_header_record(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ int arg2 ;
+ void *arg3 = (void *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg4 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OOO|O:svn_repos_parse_fns3_invoke_magic_header_record",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+ {
+ arg1 = (svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg2 = (int)SWIG_As_long (obj1);
+ if (SWIG_arg_fail(svn_argnum_obj1)) {
+ SWIG_fail;
+ }
+ }
+ {
+ if (obj2 == Py_None) {
+ arg3 = NULL;
+ } else if (SWIG_ConvertPtr(obj2, (void **) &arg3, 0, 0) == -1) {
+ arg3 = (void *) obj2;
+ PyErr_Clear();
+ }
+ }
+ if (obj3) {
+ /* Verify that the user supplied a valid pool */
+ if (obj3 != Py_None && obj3 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj3);
+ SWIG_arg_fail(svn_argnum_obj3);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_magic_header_record(arg1,arg2,arg3,arg4);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_invoke_uuid_record(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *arg3 = (void *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg4 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OzO|O:svn_repos_parse_fns3_invoke_uuid_record",&obj0,&arg2,&obj2,&obj3)) SWIG_fail;
+ {
+ arg1 = (svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ if (obj2 == Py_None) {
+ arg3 = NULL;
+ } else if (SWIG_ConvertPtr(obj2, (void **) &arg3, 0, 0) == -1) {
+ arg3 = (void *) obj2;
+ PyErr_Clear();
+ }
+ }
+ if (obj3) {
+ /* Verify that the user supplied a valid pool */
+ if (obj3 != Py_None && obj3 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj3);
+ SWIG_arg_fail(svn_argnum_obj3);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_uuid_record(arg1,(char const *)arg2,arg3,arg4);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_invoke_new_revision_record(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ void **arg2 = (void **) 0 ;
+ apr_hash_t *arg3 = (apr_hash_t *) 0 ;
+ void *arg4 = (void *) 0 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ void *temp2 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg5 = _global_pool;
+ arg2 = &temp2;
+ if (!PyArg_ParseTuple(args,(char *)"OOO|O:svn_repos_parse_fns3_invoke_new_revision_record",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+ {
+ arg1 = (svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg3 = (apr_hash_t *)svn_swig_MustGetPtr(obj1, SWIGTYPE_p_apr_hash_t, svn_argnum_obj1);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ if (obj2 == Py_None) {
+ arg4 = NULL;
+ } else if (SWIG_ConvertPtr(obj2, (void **) &arg4, 0, 0) == -1) {
+ arg4 = (void *) obj2;
+ PyErr_Clear();
+ }
+ }
+ if (obj3) {
+ /* Verify that the user supplied a valid pool */
+ if (obj3 != Py_None && obj3 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj3);
+ SWIG_arg_fail(svn_argnum_obj3);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_new_revision_record(arg1,arg2,arg3,arg4,arg5);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg2, SWIGTYPE_p_void,
+ _global_py_pool, args))
+
+ ;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_invoke_new_node_record(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ void **arg2 = (void **) 0 ;
+ apr_hash_t *arg3 = (apr_hash_t *) 0 ;
+ void *arg4 = (void *) 0 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ void *temp2 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg5 = _global_pool;
+ arg2 = &temp2;
+ if (!PyArg_ParseTuple(args,(char *)"OOO|O:svn_repos_parse_fns3_invoke_new_node_record",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+ {
+ arg1 = (svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg3 = (apr_hash_t *)svn_swig_MustGetPtr(obj1, SWIGTYPE_p_apr_hash_t, svn_argnum_obj1);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ if (obj2 == Py_None) {
+ arg4 = NULL;
+ } else if (SWIG_ConvertPtr(obj2, (void **) &arg4, 0, 0) == -1) {
+ arg4 = (void *) obj2;
+ PyErr_Clear();
+ }
+ }
+ if (obj3) {
+ /* Verify that the user supplied a valid pool */
+ if (obj3 != Py_None && obj3 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj3);
+ SWIG_arg_fail(svn_argnum_obj3);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_new_node_record(arg1,arg2,arg3,arg4,arg5);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg2, SWIGTYPE_p_void,
+ _global_py_pool, args))
+
+ ;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_invoke_set_revision_property(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ void *arg2 = (void *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_string_t *arg4 = (svn_string_t *) 0 ;
+ svn_string_t value4 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj3 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OOsO:svn_repos_parse_fns3_invoke_set_revision_property",&obj0,&obj1,&arg3,&obj3)) SWIG_fail;
+ {
+ arg1 = (svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ if (obj1 == Py_None) {
+ arg2 = NULL;
+ } else if (SWIG_ConvertPtr(obj1, (void **) &arg2, 0, 0) == -1) {
+ arg2 = (void *) obj1;
+ PyErr_Clear();
+ }
+ }
+ {
+ if (obj3 == Py_None)
+ arg4 = NULL;
+ else {
+ if (!PyString_Check(obj3)) {
+ PyErr_SetString(PyExc_TypeError, "not a string");
+ SWIG_fail;
+ }
+ value4.data = PyString_AS_STRING(obj3);
+ value4.len = PyString_GET_SIZE(obj3);
+ arg4 = &value4;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_set_revision_property(arg1,arg2,(char const *)arg3,(struct svn_string_t const *)arg4);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_invoke_set_node_property(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ void *arg2 = (void *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_string_t *arg4 = (svn_string_t *) 0 ;
+ svn_string_t value4 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj3 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OOsO:svn_repos_parse_fns3_invoke_set_node_property",&obj0,&obj1,&arg3,&obj3)) SWIG_fail;
+ {
+ arg1 = (svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ if (obj1 == Py_None) {
+ arg2 = NULL;
+ } else if (SWIG_ConvertPtr(obj1, (void **) &arg2, 0, 0) == -1) {
+ arg2 = (void *) obj1;
+ PyErr_Clear();
+ }
+ }
+ {
+ if (obj3 == Py_None)
+ arg4 = NULL;
+ else {
+ if (!PyString_Check(obj3)) {
+ PyErr_SetString(PyExc_TypeError, "not a string");
+ SWIG_fail;
+ }
+ value4.data = PyString_AS_STRING(obj3);
+ value4.len = PyString_GET_SIZE(obj3);
+ arg4 = &value4;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_set_node_property(arg1,arg2,(char const *)arg3,(struct svn_string_t const *)arg4);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_invoke_delete_node_property(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ void *arg2 = (void *) 0 ;
+ char *arg3 = (char *) 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OOs:svn_repos_parse_fns3_invoke_delete_node_property",&obj0,&obj1,&arg3)) SWIG_fail;
+ {
+ arg1 = (svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ if (obj1 == Py_None) {
+ arg2 = NULL;
+ } else if (SWIG_ConvertPtr(obj1, (void **) &arg2, 0, 0) == -1) {
+ arg2 = (void *) obj1;
+ PyErr_Clear();
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_delete_node_property(arg1,arg2,(char const *)arg3);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_invoke_remove_node_props(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ void *arg2 = (void *) 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns3_invoke_remove_node_props",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ if (obj1 == Py_None) {
+ arg2 = NULL;
+ } else if (SWIG_ConvertPtr(obj1, (void **) &arg2, 0, 0) == -1) {
+ arg2 = (void *) obj1;
+ PyErr_Clear();
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_remove_node_props(arg1,arg2);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_invoke_set_fulltext(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ svn_stream_t **arg2 = (svn_stream_t **) 0 ;
+ void *arg3 = (void *) 0 ;
+ svn_stream_t *temp2 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ svn_error_t *result = 0 ;
+
+ arg2 = &temp2;
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns3_invoke_set_fulltext",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ if (obj1 == Py_None) {
+ arg3 = NULL;
+ } else if (SWIG_ConvertPtr(obj1, (void **) &arg3, 0, 0) == -1) {
+ arg3 = (void *) obj1;
+ PyErr_Clear();
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_set_fulltext(arg1,arg2,arg3);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg2, SWIGTYPE_p_svn_stream_t,
+ _global_py_pool, args))
+
+ ;
+ }
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_invoke_apply_textdelta(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ svn_txdelta_window_handler_t *arg2 = (svn_txdelta_window_handler_t *) 0 ;
+ void **arg3 = (void **) 0 ;
+ void *arg4 = (void *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ void *temp3 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ svn_error_t *result = 0 ;
+
+ {
+ if (_global_pool == NULL)
+ {
+ if (svn_swig_py_get_parent_pool(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ }
+ arg2 = (svn_txdelta_window_handler_t *) apr_pcalloc(_global_pool, sizeof(svn_txdelta_window_handler_t));
+ if (arg2 == NULL) SWIG_fail;
+ }
+ arg3 = &temp3;
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns3_invoke_apply_textdelta",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ if (obj1 == Py_None) {
+ arg4 = NULL;
+ } else if (SWIG_ConvertPtr(obj1, (void **) &arg4, 0, 0) == -1) {
+ arg4 = (void *) obj1;
+ PyErr_Clear();
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_apply_textdelta(arg1,arg2,arg3,arg4);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(arg2, SWIGTYPE_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t,
+ _global_py_pool, args))
+
+ ;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg3, SWIGTYPE_p_void,
+ _global_py_pool, args))
+
+ ;
+ }
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_invoke_close_node(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ void *arg2 = (void *) 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns3_invoke_close_node",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ if (obj1 == Py_None) {
+ arg2 = NULL;
+ } else if (SWIG_ConvertPtr(obj1, (void **) &arg2, 0, 0) == -1) {
+ arg2 = (void *) obj1;
+ PyErr_Clear();
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_close_node(arg1,arg2);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_repos_parse_fns3_invoke_close_revision(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ void *arg2 = (void *) 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_repos_parse_fns3_invoke_close_revision",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (svn_repos_parse_fns3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_repos_parse_fns3_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ if (obj1 == Py_None) {
+ arg2 = NULL;
+ } else if (SWIG_ConvertPtr(obj1, (void **) &arg2, 0, 0) == -1) {
+ arg2 = (void *) obj1;
+ PyErr_Clear();
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_close_revision(arg1,arg2);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_repos_parse_fns2_invoke_new_revision_record(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
@@ -15424,6 +17925,78 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_repos_invoke_freeze_func(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_repos_freeze_func_t arg1 = (svn_repos_freeze_func_t) 0 ;
+ void *arg2 = (void *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg3 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OO|O:svn_repos_invoke_freeze_func",&obj0,&obj1,&obj2)) SWIG_fail;
+ {
+ svn_repos_freeze_func_t * tmp =
+ svn_swig_MustGetPtr(obj0, SWIGTYPE_p_p_f_p_void_p_apr_pool_t__p_svn_error_t, svn_argnum_obj0);
+ if (tmp == NULL || PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ arg1 = *tmp;
+ }
+ {
+ if (obj1 == Py_None) {
+ arg2 = NULL;
+ } else if (SWIG_ConvertPtr(obj1, (void **) &arg2, 0, 0) == -1) {
+ arg2 = (void *) obj1;
+ PyErr_Clear();
+ }
+ }
+ if (obj2) {
+ /* Verify that the user supplied a valid pool */
+ if (obj2 != Py_None && obj2 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj2);
+ SWIG_arg_fail(svn_argnum_obj2);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_repos_invoke_freeze_func(arg1,arg2,arg3);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_repos_invoke_history_func(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_repos_history_func_t arg1 = (svn_repos_history_func_t) 0 ;
@@ -15533,6 +18106,13 @@ SWIGINTERN PyObject *svn_repos_notify_func_t_swigregister(PyObject *SWIGUNUSEDPA
return SWIG_Py_Void();
}
+SWIGINTERN PyObject *svn_repos_freeze_func_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *obj;
+ if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+ SWIG_TypeNewClientData(SWIGTYPE_p_p_f_p_void_p_apr_pool_t__p_svn_error_t, SWIG_NewClientData(obj));
+ return SWIG_Py_Void();
+}
+
SWIGINTERN PyObject *svn_repos_history_func_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *obj;
if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
@@ -15542,13 +18122,13 @@ SWIGINTERN PyObject *svn_repos_history_func_t_swigregister(PyObject *SWIGUNUSEDP
static PyMethodDef SwigMethods[] = {
{ (char *)"SWIG_PyInstanceMethod_New", (PyCFunction)SWIG_PyInstanceMethod_New, METH_O, NULL},
- { (char *)"svn_repos_version", _wrap_svn_repos_version, METH_VARARGS, (char *)"svn_repos_version() -> svn_version_t"},
+ { (char *)"svn_repos_version", _wrap_svn_repos_version, METH_VARARGS, (char *)"svn_repos_version() -> svn_version_t const *"},
{ (char *)"svn_repos_notify_t_action_set", _wrap_svn_repos_notify_t_action_set, METH_VARARGS, (char *)"svn_repos_notify_t_action_set(svn_repos_notify_t self, svn_repos_notify_action_t action)"},
{ (char *)"svn_repos_notify_t_action_get", _wrap_svn_repos_notify_t_action_get, METH_VARARGS, (char *)"svn_repos_notify_t_action_get(svn_repos_notify_t self) -> svn_repos_notify_action_t"},
{ (char *)"svn_repos_notify_t_revision_set", _wrap_svn_repos_notify_t_revision_set, METH_VARARGS, (char *)"svn_repos_notify_t_revision_set(svn_repos_notify_t self, svn_revnum_t revision)"},
{ (char *)"svn_repos_notify_t_revision_get", _wrap_svn_repos_notify_t_revision_get, METH_VARARGS, (char *)"svn_repos_notify_t_revision_get(svn_repos_notify_t self) -> svn_revnum_t"},
- { (char *)"svn_repos_notify_t_warning_str_set", _wrap_svn_repos_notify_t_warning_str_set, METH_VARARGS, (char *)"svn_repos_notify_t_warning_str_set(svn_repos_notify_t self, char warning_str)"},
- { (char *)"svn_repos_notify_t_warning_str_get", _wrap_svn_repos_notify_t_warning_str_get, METH_VARARGS, (char *)"svn_repos_notify_t_warning_str_get(svn_repos_notify_t self) -> char"},
+ { (char *)"svn_repos_notify_t_warning_str_set", _wrap_svn_repos_notify_t_warning_str_set, METH_VARARGS, (char *)"svn_repos_notify_t_warning_str_set(svn_repos_notify_t self, char const * warning_str)"},
+ { (char *)"svn_repos_notify_t_warning_str_get", _wrap_svn_repos_notify_t_warning_str_get, METH_VARARGS, (char *)"svn_repos_notify_t_warning_str_get(svn_repos_notify_t self) -> char const *"},
{ (char *)"svn_repos_notify_t_warning_set", _wrap_svn_repos_notify_t_warning_set, METH_VARARGS, (char *)"svn_repos_notify_t_warning_set(svn_repos_notify_t self, svn_repos_notify_warning_t warning)"},
{ (char *)"svn_repos_notify_t_warning_get", _wrap_svn_repos_notify_t_warning_get, METH_VARARGS, (char *)"svn_repos_notify_t_warning_get(svn_repos_notify_t self) -> svn_repos_notify_warning_t"},
{ (char *)"svn_repos_notify_t_shard_set", _wrap_svn_repos_notify_t_shard_set, METH_VARARGS, (char *)"svn_repos_notify_t_shard_set(svn_repos_notify_t self, apr_int64_t shard)"},
@@ -15559,329 +18139,279 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_repos_notify_t_old_revision_get", _wrap_svn_repos_notify_t_old_revision_get, METH_VARARGS, (char *)"svn_repos_notify_t_old_revision_get(svn_repos_notify_t self) -> svn_revnum_t"},
{ (char *)"svn_repos_notify_t_node_action_set", _wrap_svn_repos_notify_t_node_action_set, METH_VARARGS, (char *)"svn_repos_notify_t_node_action_set(svn_repos_notify_t self, enum svn_node_action node_action)"},
{ (char *)"svn_repos_notify_t_node_action_get", _wrap_svn_repos_notify_t_node_action_get, METH_VARARGS, (char *)"svn_repos_notify_t_node_action_get(svn_repos_notify_t self) -> enum svn_node_action"},
- { (char *)"svn_repos_notify_t_path_set", _wrap_svn_repos_notify_t_path_set, METH_VARARGS, (char *)"svn_repos_notify_t_path_set(svn_repos_notify_t self, char path)"},
- { (char *)"svn_repos_notify_t_path_get", _wrap_svn_repos_notify_t_path_get, METH_VARARGS, (char *)"svn_repos_notify_t_path_get(svn_repos_notify_t self) -> char"},
+ { (char *)"svn_repos_notify_t_path_set", _wrap_svn_repos_notify_t_path_set, METH_VARARGS, (char *)"svn_repos_notify_t_path_set(svn_repos_notify_t self, char const * path)"},
+ { (char *)"svn_repos_notify_t_path_get", _wrap_svn_repos_notify_t_path_get, METH_VARARGS, (char *)"svn_repos_notify_t_path_get(svn_repos_notify_t self) -> char const *"},
{ (char *)"svn_repos_notify_t_swigregister", svn_repos_notify_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_repos_notify_create", _wrap_svn_repos_notify_create, METH_VARARGS, (char *)"svn_repos_notify_create(svn_repos_notify_action_t action, apr_pool_t result_pool) -> svn_repos_notify_t"},
- { (char *)"svn_repos_find_root_path", _wrap_svn_repos_find_root_path, METH_VARARGS, (char *)"svn_repos_find_root_path(char path, apr_pool_t pool) -> char"},
- { (char *)"svn_repos_open2", _wrap_svn_repos_open2, METH_VARARGS, (char *)"svn_repos_open2(char path, apr_hash_t fs_config, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_repos_open", _wrap_svn_repos_open, METH_VARARGS, (char *)"svn_repos_open(char path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_find_root_path", _wrap_svn_repos_find_root_path, METH_VARARGS, (char *)"svn_repos_find_root_path(char const * path, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_repos_open2", _wrap_svn_repos_open2, METH_VARARGS, (char *)"svn_repos_open2(char const * path, apr_hash_t fs_config, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_open", _wrap_svn_repos_open, METH_VARARGS, (char *)"svn_repos_open(char const * path, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_repos_create", _wrap_svn_repos_create, METH_VARARGS, (char *)"\n"
- "svn_repos_create(char path, char unused_1, char unused_2, apr_hash_t config, \n"
+ "svn_repos_create(char const * path, char const * unused_1, char const * unused_2, apr_hash_t config, \n"
" apr_hash_t fs_config, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_upgrade2", _wrap_svn_repos_upgrade2, METH_VARARGS, (char *)"\n"
- "svn_repos_upgrade2(char path, svn_boolean_t nonblocking, svn_repos_notify_func_t notify_func, \n"
- " void notify_baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_upgrade2(char const * path, svn_boolean_t nonblocking, svn_repos_notify_func_t notify_func, \n"
+ " void * notify_baton, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_upgrade", _wrap_svn_repos_upgrade, METH_VARARGS, (char *)"\n"
- "svn_repos_upgrade(char path, svn_boolean_t nonblocking, svn_error_t start_callback, \n"
- " void start_callback_baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_upgrade(char const * path, svn_boolean_t nonblocking, svn_error_t *(*)(void *) start_callback, \n"
+ " void * start_callback_baton, apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_repos_delete", _wrap_svn_repos_delete, METH_VARARGS, (char *)"svn_repos_delete(char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_repos_has_capability", _wrap_svn_repos_has_capability, METH_VARARGS, (char *)"svn_repos_has_capability(svn_repos_t repos, char capability, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_repos_fs", _wrap_svn_repos_fs, METH_VARARGS, (char *)"svn_repos_fs(svn_repos_t repos) -> svn_fs_t"},
- { (char *)"svn_repos_hotcopy", _wrap_svn_repos_hotcopy, METH_VARARGS, (char *)"\n"
- "svn_repos_hotcopy(char src_path, char dst_path, svn_boolean_t clean_logs, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ { (char *)"svn_repos_delete", _wrap_svn_repos_delete, METH_VARARGS, (char *)"svn_repos_delete(char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_has_capability", _wrap_svn_repos_has_capability, METH_VARARGS, (char *)"svn_repos_has_capability(svn_repos_t * repos, char const * capability, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_fs", _wrap_svn_repos_fs, METH_VARARGS, (char *)"svn_repos_fs(svn_repos_t * repos) -> svn_fs_t *"},
+ { (char *)"svn_repos_hotcopy2", _wrap_svn_repos_hotcopy2, METH_VARARGS, (char *)"\n"
+ "svn_repos_hotcopy2(char const * src_path, char const * dst_path, svn_boolean_t clean_logs, svn_boolean_t incremental, \n"
+ " svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_repos_hotcopy", _wrap_svn_repos_hotcopy, METH_VARARGS, (char *)"svn_repos_hotcopy(char const * src_path, char const * dst_path, svn_boolean_t clean_logs, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_repos_fs_pack2", _wrap_svn_repos_fs_pack2, METH_VARARGS, (char *)"\n"
- "svn_repos_fs_pack2(svn_repos_t repos, svn_repos_notify_func_t notify_func, \n"
- " void notify_baton, svn_cancel_func_t cancel_func, \n"
+ "svn_repos_fs_pack2(svn_repos_t * repos, svn_repos_notify_func_t notify_func, void * notify_baton, svn_cancel_func_t cancel_func, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_fs_pack", _wrap_svn_repos_fs_pack, METH_VARARGS, (char *)"\n"
- "svn_repos_fs_pack(svn_repos_t repos, svn_fs_pack_notify_t notify_func, \n"
- " void notify_baton, svn_cancel_func_t cancel_func, \n"
+ "svn_repos_fs_pack(svn_repos_t * repos, svn_fs_pack_notify_t notify_func, void * notify_baton, svn_cancel_func_t cancel_func, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_recover4", _wrap_svn_repos_recover4, METH_VARARGS, (char *)"\n"
- "svn_repos_recover4(char path, svn_boolean_t nonblocking, svn_repos_notify_func_t notify_func, \n"
- " void notify_baton, svn_cancel_func_t cancel_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_recover4(char const * path, svn_boolean_t nonblocking, svn_repos_notify_func_t notify_func, \n"
+ " void * notify_baton, svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_recover3", _wrap_svn_repos_recover3, METH_VARARGS, (char *)"\n"
- "svn_repos_recover3(char path, svn_boolean_t nonblocking, svn_error_t start_callback, \n"
- " void start_callback_baton, svn_cancel_func_t cancel_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_recover3(char const * path, svn_boolean_t nonblocking, svn_error_t *(*)(void *) start_callback, \n"
+ " void * start_callback_baton, svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_recover2", _wrap_svn_repos_recover2, METH_VARARGS, (char *)"\n"
- "svn_repos_recover2(char path, svn_boolean_t nonblocking, svn_error_t start_callback, \n"
- " void start_callback_baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_recover2(char const * path, svn_boolean_t nonblocking, svn_error_t *(*)(void *) start_callback, \n"
+ " void * start_callback_baton, apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_repos_recover", _wrap_svn_repos_recover, METH_VARARGS, (char *)"svn_repos_recover(char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_repos_db_logfiles", _wrap_svn_repos_db_logfiles, METH_VARARGS, (char *)"svn_repos_db_logfiles(char path, svn_boolean_t only_unused, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_repos_path", _wrap_svn_repos_path, METH_VARARGS, (char *)"svn_repos_path(svn_repos_t repos, apr_pool_t pool) -> char"},
- { (char *)"svn_repos_db_env", _wrap_svn_repos_db_env, METH_VARARGS, (char *)"svn_repos_db_env(svn_repos_t repos, apr_pool_t pool) -> char"},
- { (char *)"svn_repos_conf_dir", _wrap_svn_repos_conf_dir, METH_VARARGS, (char *)"svn_repos_conf_dir(svn_repos_t repos, apr_pool_t pool) -> char"},
- { (char *)"svn_repos_svnserve_conf", _wrap_svn_repos_svnserve_conf, METH_VARARGS, (char *)"svn_repos_svnserve_conf(svn_repos_t repos, apr_pool_t pool) -> char"},
- { (char *)"svn_repos_lock_dir", _wrap_svn_repos_lock_dir, METH_VARARGS, (char *)"svn_repos_lock_dir(svn_repos_t repos, apr_pool_t pool) -> char"},
- { (char *)"svn_repos_db_lockfile", _wrap_svn_repos_db_lockfile, METH_VARARGS, (char *)"svn_repos_db_lockfile(svn_repos_t repos, apr_pool_t pool) -> char"},
- { (char *)"svn_repos_db_logs_lockfile", _wrap_svn_repos_db_logs_lockfile, METH_VARARGS, (char *)"svn_repos_db_logs_lockfile(svn_repos_t repos, apr_pool_t pool) -> char"},
- { (char *)"svn_repos_hook_dir", _wrap_svn_repos_hook_dir, METH_VARARGS, (char *)"svn_repos_hook_dir(svn_repos_t repos, apr_pool_t pool) -> char"},
- { (char *)"svn_repos_start_commit_hook", _wrap_svn_repos_start_commit_hook, METH_VARARGS, (char *)"svn_repos_start_commit_hook(svn_repos_t repos, apr_pool_t pool) -> char"},
- { (char *)"svn_repos_pre_commit_hook", _wrap_svn_repos_pre_commit_hook, METH_VARARGS, (char *)"svn_repos_pre_commit_hook(svn_repos_t repos, apr_pool_t pool) -> char"},
- { (char *)"svn_repos_post_commit_hook", _wrap_svn_repos_post_commit_hook, METH_VARARGS, (char *)"svn_repos_post_commit_hook(svn_repos_t repos, apr_pool_t pool) -> char"},
- { (char *)"svn_repos_pre_revprop_change_hook", _wrap_svn_repos_pre_revprop_change_hook, METH_VARARGS, (char *)"svn_repos_pre_revprop_change_hook(svn_repos_t repos, apr_pool_t pool) -> char"},
- { (char *)"svn_repos_post_revprop_change_hook", _wrap_svn_repos_post_revprop_change_hook, METH_VARARGS, (char *)"svn_repos_post_revprop_change_hook(svn_repos_t repos, apr_pool_t pool) -> char"},
- { (char *)"svn_repos_pre_lock_hook", _wrap_svn_repos_pre_lock_hook, METH_VARARGS, (char *)"svn_repos_pre_lock_hook(svn_repos_t repos, apr_pool_t pool) -> char"},
- { (char *)"svn_repos_post_lock_hook", _wrap_svn_repos_post_lock_hook, METH_VARARGS, (char *)"svn_repos_post_lock_hook(svn_repos_t repos, apr_pool_t pool) -> char"},
- { (char *)"svn_repos_pre_unlock_hook", _wrap_svn_repos_pre_unlock_hook, METH_VARARGS, (char *)"svn_repos_pre_unlock_hook(svn_repos_t repos, apr_pool_t pool) -> char"},
- { (char *)"svn_repos_post_unlock_hook", _wrap_svn_repos_post_unlock_hook, METH_VARARGS, (char *)"svn_repos_post_unlock_hook(svn_repos_t repos, apr_pool_t pool) -> char"},
- { (char *)"svn_repos_begin_report2", _wrap_svn_repos_begin_report2, METH_VARARGS, (char *)"\n"
- "svn_repos_begin_report2(svn_revnum_t revnum, svn_repos_t repos, char fs_base, \n"
- " char target, char tgt_path, svn_boolean_t text_deltas, \n"
- " svn_depth_t depth, svn_boolean_t ignore_ancestry, \n"
- " svn_boolean_t send_copyfrom_args, \n"
- " svn_delta_editor_t editor, void edit_baton, \n"
- " svn_repos_authz_func_t authz_read_func, \n"
+ { (char *)"svn_repos_recover", _wrap_svn_repos_recover, METH_VARARGS, (char *)"svn_repos_recover(char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_freeze", _wrap_svn_repos_freeze, METH_VARARGS, (char *)"svn_repos_freeze(apr_array_header_t paths, svn_repos_freeze_func_t freeze_func, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_db_logfiles", _wrap_svn_repos_db_logfiles, METH_VARARGS, (char *)"svn_repos_db_logfiles(char const * path, svn_boolean_t only_unused, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_path", _wrap_svn_repos_path, METH_VARARGS, (char *)"svn_repos_path(svn_repos_t * repos, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_repos_db_env", _wrap_svn_repos_db_env, METH_VARARGS, (char *)"svn_repos_db_env(svn_repos_t * repos, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_repos_conf_dir", _wrap_svn_repos_conf_dir, METH_VARARGS, (char *)"svn_repos_conf_dir(svn_repos_t * repos, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_repos_svnserve_conf", _wrap_svn_repos_svnserve_conf, METH_VARARGS, (char *)"svn_repos_svnserve_conf(svn_repos_t * repos, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_repos_lock_dir", _wrap_svn_repos_lock_dir, METH_VARARGS, (char *)"svn_repos_lock_dir(svn_repos_t * repos, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_repos_db_lockfile", _wrap_svn_repos_db_lockfile, METH_VARARGS, (char *)"svn_repos_db_lockfile(svn_repos_t * repos, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_repos_db_logs_lockfile", _wrap_svn_repos_db_logs_lockfile, METH_VARARGS, (char *)"svn_repos_db_logs_lockfile(svn_repos_t * repos, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_repos_hook_dir", _wrap_svn_repos_hook_dir, METH_VARARGS, (char *)"svn_repos_hook_dir(svn_repos_t * repos, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_repos_start_commit_hook", _wrap_svn_repos_start_commit_hook, METH_VARARGS, (char *)"svn_repos_start_commit_hook(svn_repos_t * repos, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_repos_pre_commit_hook", _wrap_svn_repos_pre_commit_hook, METH_VARARGS, (char *)"svn_repos_pre_commit_hook(svn_repos_t * repos, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_repos_post_commit_hook", _wrap_svn_repos_post_commit_hook, METH_VARARGS, (char *)"svn_repos_post_commit_hook(svn_repos_t * repos, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_repos_pre_revprop_change_hook", _wrap_svn_repos_pre_revprop_change_hook, METH_VARARGS, (char *)"svn_repos_pre_revprop_change_hook(svn_repos_t * repos, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_repos_post_revprop_change_hook", _wrap_svn_repos_post_revprop_change_hook, METH_VARARGS, (char *)"svn_repos_post_revprop_change_hook(svn_repos_t * repos, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_repos_pre_lock_hook", _wrap_svn_repos_pre_lock_hook, METH_VARARGS, (char *)"svn_repos_pre_lock_hook(svn_repos_t * repos, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_repos_post_lock_hook", _wrap_svn_repos_post_lock_hook, METH_VARARGS, (char *)"svn_repos_post_lock_hook(svn_repos_t * repos, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_repos_pre_unlock_hook", _wrap_svn_repos_pre_unlock_hook, METH_VARARGS, (char *)"svn_repos_pre_unlock_hook(svn_repos_t * repos, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_repos_post_unlock_hook", _wrap_svn_repos_post_unlock_hook, METH_VARARGS, (char *)"svn_repos_post_unlock_hook(svn_repos_t * repos, apr_pool_t pool) -> char const *"},
+ { (char *)"svn_repos_hooks_setenv", _wrap_svn_repos_hooks_setenv, METH_VARARGS, (char *)"svn_repos_hooks_setenv(svn_repos_t * repos, char const * hooks_env_path, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_repos_begin_report3", _wrap_svn_repos_begin_report3, METH_VARARGS, (char *)"\n"
+ "svn_repos_begin_report3(svn_revnum_t revnum, svn_repos_t * repos, char const * fs_base, char const * target, \n"
+ " char const * tgt_path, svn_boolean_t text_deltas, svn_depth_t depth, svn_boolean_t ignore_ancestry, \n"
+ " svn_boolean_t send_copyfrom_args, svn_delta_editor_t editor, \n"
+ " void * edit_baton, svn_repos_authz_func_t authz_read_func, apr_size_t zero_copy_limit, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_repos_begin_report2", _wrap_svn_repos_begin_report2, METH_VARARGS, (char *)"\n"
+ "svn_repos_begin_report2(svn_revnum_t revnum, svn_repos_t * repos, char const * fs_base, char const * target, \n"
+ " char const * tgt_path, svn_boolean_t text_deltas, svn_depth_t depth, svn_boolean_t ignore_ancestry, \n"
+ " svn_boolean_t send_copyfrom_args, svn_delta_editor_t editor, \n"
+ " void * edit_baton, svn_repos_authz_func_t authz_read_func, apr_pool_t pool) -> svn_error_t\n"
+ ""},
{ (char *)"svn_repos_begin_report", _wrap_svn_repos_begin_report, METH_VARARGS, (char *)"\n"
- "svn_repos_begin_report(svn_revnum_t revnum, char username, svn_repos_t repos, \n"
- " char fs_base, char target, char tgt_path, \n"
- " svn_boolean_t text_deltas, svn_boolean_t recurse, \n"
- " svn_boolean_t ignore_ancestry, svn_delta_editor_t editor, \n"
- " void edit_baton, svn_repos_authz_func_t authz_read_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_begin_report(svn_revnum_t revnum, char const * username, svn_repos_t * repos, char const * fs_base, \n"
+ " char const * target, char const * tgt_path, svn_boolean_t text_deltas, \n"
+ " svn_boolean_t recurse, svn_boolean_t ignore_ancestry, svn_delta_editor_t editor, \n"
+ " void * edit_baton, svn_repos_authz_func_t authz_read_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_set_path3", _wrap_svn_repos_set_path3, METH_VARARGS, (char *)"\n"
- "svn_repos_set_path3(void report_baton, char path, svn_revnum_t revision, \n"
- " svn_depth_t depth, svn_boolean_t start_empty, \n"
- " char lock_token, apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_set_path3(void * report_baton, char const * path, svn_revnum_t revision, svn_depth_t depth, \n"
+ " svn_boolean_t start_empty, char const * lock_token, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_set_path2", _wrap_svn_repos_set_path2, METH_VARARGS, (char *)"\n"
- "svn_repos_set_path2(void report_baton, char path, svn_revnum_t revision, \n"
- " svn_boolean_t start_empty, char lock_token, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_set_path2(void * report_baton, char const * path, svn_revnum_t revision, svn_boolean_t start_empty, \n"
+ " char const * lock_token, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_set_path", _wrap_svn_repos_set_path, METH_VARARGS, (char *)"\n"
- "svn_repos_set_path(void report_baton, char path, svn_revnum_t revision, \n"
- " svn_boolean_t start_empty, apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_set_path(void * report_baton, char const * path, svn_revnum_t revision, svn_boolean_t start_empty, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_link_path3", _wrap_svn_repos_link_path3, METH_VARARGS, (char *)"\n"
- "svn_repos_link_path3(void report_baton, char path, char link_path, svn_revnum_t revision, \n"
- " svn_depth_t depth, svn_boolean_t start_empty, \n"
- " char lock_token, apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_link_path3(void * report_baton, char const * path, char const * link_path, svn_revnum_t revision, \n"
+ " svn_depth_t depth, svn_boolean_t start_empty, char const * lock_token, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_link_path2", _wrap_svn_repos_link_path2, METH_VARARGS, (char *)"\n"
- "svn_repos_link_path2(void report_baton, char path, char link_path, svn_revnum_t revision, \n"
- " svn_boolean_t start_empty, \n"
- " char lock_token, apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_link_path2(void * report_baton, char const * path, char const * link_path, svn_revnum_t revision, \n"
+ " svn_boolean_t start_empty, char const * lock_token, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_link_path", _wrap_svn_repos_link_path, METH_VARARGS, (char *)"\n"
- "svn_repos_link_path(void report_baton, char path, char link_path, svn_revnum_t revision, \n"
- " svn_boolean_t start_empty, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_link_path(void * report_baton, char const * path, char const * link_path, svn_revnum_t revision, \n"
+ " svn_boolean_t start_empty, apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_repos_delete_path", _wrap_svn_repos_delete_path, METH_VARARGS, (char *)"svn_repos_delete_path(void report_baton, char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_repos_finish_report", _wrap_svn_repos_finish_report, METH_VARARGS, (char *)"svn_repos_finish_report(void report_baton, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_repos_abort_report", _wrap_svn_repos_abort_report, METH_VARARGS, (char *)"svn_repos_abort_report(void report_baton, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_delete_path", _wrap_svn_repos_delete_path, METH_VARARGS, (char *)"svn_repos_delete_path(void * report_baton, char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_finish_report", _wrap_svn_repos_finish_report, METH_VARARGS, (char *)"svn_repos_finish_report(void * report_baton, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_abort_report", _wrap_svn_repos_abort_report, METH_VARARGS, (char *)"svn_repos_abort_report(void * report_baton, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_repos_dir_delta2", _wrap_svn_repos_dir_delta2, METH_VARARGS, (char *)"\n"
- "svn_repos_dir_delta2(svn_fs_root_t src_root, char src_parent_dir, char src_entry, \n"
- " svn_fs_root_t tgt_root, char tgt_path, \n"
- " svn_delta_editor_t editor, void edit_baton, \n"
+ "svn_repos_dir_delta2(svn_fs_root_t * src_root, char const * src_parent_dir, char const * src_entry, svn_fs_root_t * tgt_root, \n"
+ " char const * tgt_path, svn_delta_editor_t editor, void * edit_baton, \n"
" svn_repos_authz_func_t authz_read_func, svn_boolean_t text_deltas, \n"
- " svn_depth_t depth, svn_boolean_t entry_props, \n"
- " svn_boolean_t ignore_ancestry, \n"
+ " svn_depth_t depth, svn_boolean_t entry_props, svn_boolean_t ignore_ancestry, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_dir_delta", _wrap_svn_repos_dir_delta, METH_VARARGS, (char *)"\n"
- "svn_repos_dir_delta(svn_fs_root_t src_root, char src_parent_dir, char src_entry, \n"
- " svn_fs_root_t tgt_root, char tgt_path, \n"
- " svn_delta_editor_t editor, void edit_baton, \n"
+ "svn_repos_dir_delta(svn_fs_root_t * src_root, char const * src_parent_dir, char const * src_entry, svn_fs_root_t * tgt_root, \n"
+ " char const * tgt_path, svn_delta_editor_t editor, void * edit_baton, \n"
" svn_repos_authz_func_t authz_read_func, svn_boolean_t text_deltas, \n"
- " svn_boolean_t recurse, \n"
- " svn_boolean_t entry_props, svn_boolean_t ignore_ancestry, \n"
+ " svn_boolean_t recurse, svn_boolean_t entry_props, svn_boolean_t ignore_ancestry, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_replay2", _wrap_svn_repos_replay2, METH_VARARGS, (char *)"\n"
- "svn_repos_replay2(svn_fs_root_t root, char base_dir, svn_revnum_t low_water_mark, \n"
- " svn_boolean_t send_deltas, svn_delta_editor_t editor, \n"
- " void edit_baton, svn_repos_authz_func_t authz_read_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_repos_replay", _wrap_svn_repos_replay, METH_VARARGS, (char *)"\n"
- "svn_repos_replay(svn_fs_root_t root, svn_delta_editor_t editor, void edit_baton, \n"
+ "svn_repos_replay2(svn_fs_root_t * root, char const * base_dir, svn_revnum_t low_water_mark, svn_boolean_t send_deltas, \n"
+ " svn_delta_editor_t editor, void * edit_baton, svn_repos_authz_func_t authz_read_func, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_repos_replay", _wrap_svn_repos_replay, METH_VARARGS, (char *)"svn_repos_replay(svn_fs_root_t * root, svn_delta_editor_t editor, void * edit_baton, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_repos_get_commit_editor5", _wrap_svn_repos_get_commit_editor5, METH_VARARGS, (char *)"\n"
- "svn_repos_get_commit_editor5(svn_repos_t repos, svn_fs_txn_t txn, char repos_url, \n"
- " char base_path, apr_hash_t revprop_table, svn_commit_callback2_t callback, \n"
- " svn_repos_authz_callback_t authz_callback, \n"
- " void authz_baton, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_get_commit_editor5(svn_repos_t * repos, svn_fs_txn_t * txn, char const * repos_url, char const * base_path, \n"
+ " apr_hash_t revprop_table, svn_commit_callback2_t commit_callback, svn_repos_authz_callback_t authz_callback, \n"
+ " void * authz_baton, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_get_commit_editor4", _wrap_svn_repos_get_commit_editor4, METH_VARARGS, (char *)"\n"
- "svn_repos_get_commit_editor4(svn_repos_t repos, svn_fs_txn_t txn, char repos_url, \n"
- " char base_path, char user, char log_msg, svn_commit_callback2_t callback, \n"
- " svn_repos_authz_callback_t authz_callback, \n"
- " void authz_baton, \n"
+ "svn_repos_get_commit_editor4(svn_repos_t * repos, svn_fs_txn_t * txn, char const * repos_url, char const * base_path, \n"
+ " char const * user, char const * log_msg, svn_commit_callback2_t commit_callback, \n"
+ " svn_repos_authz_callback_t authz_callback, void * authz_baton, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_get_commit_editor3", _wrap_svn_repos_get_commit_editor3, METH_VARARGS, (char *)"\n"
- "svn_repos_get_commit_editor3(svn_repos_t repos, svn_fs_txn_t txn, char repos_url, \n"
- " char base_path, char user, char log_msg, svn_commit_callback_t callback, \n"
- " svn_repos_authz_callback_t authz_callback, \n"
- " void authz_baton, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_get_commit_editor3(svn_repos_t * repos, svn_fs_txn_t * txn, char const * repos_url, char const * base_path, \n"
+ " char const * user, char const * log_msg, svn_commit_callback_t callback, \n"
+ " svn_repos_authz_callback_t authz_callback, void * authz_baton, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_get_commit_editor2", _wrap_svn_repos_get_commit_editor2, METH_VARARGS, (char *)"\n"
- "svn_repos_get_commit_editor2(svn_repos_t repos, svn_fs_txn_t txn, char repos_url, \n"
- " char base_path, char user, char log_msg, svn_commit_callback_t callback, \n"
+ "svn_repos_get_commit_editor2(svn_repos_t * repos, svn_fs_txn_t * txn, char const * repos_url, char const * base_path, \n"
+ " char const * user, char const * log_msg, svn_commit_callback_t callback, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_get_commit_editor", _wrap_svn_repos_get_commit_editor, METH_VARARGS, (char *)"\n"
- "svn_repos_get_commit_editor(svn_repos_t repos, char repos_url, char base_path, \n"
- " char user, char log_msg, svn_commit_callback_t callback, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_repos_dated_revision", _wrap_svn_repos_dated_revision, METH_VARARGS, (char *)"svn_repos_dated_revision(svn_repos_t repos, apr_time_t tm, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_repos_get_committed_info", _wrap_svn_repos_get_committed_info, METH_VARARGS, (char *)"svn_repos_get_committed_info(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_repos_stat", _wrap_svn_repos_stat, METH_VARARGS, (char *)"svn_repos_stat(svn_fs_root_t root, char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_repos_deleted_rev", _wrap_svn_repos_deleted_rev, METH_VARARGS, (char *)"\n"
- "svn_repos_deleted_rev(svn_fs_t fs, char path, svn_revnum_t start, svn_revnum_t end, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_get_commit_editor(svn_repos_t * repos, char const * repos_url, char const * base_path, char const * user, \n"
+ " char const * log_msg, svn_commit_callback_t callback, apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_repos_dated_revision", _wrap_svn_repos_dated_revision, METH_VARARGS, (char *)"svn_repos_dated_revision(svn_repos_t * repos, apr_time_t tm, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_get_committed_info", _wrap_svn_repos_get_committed_info, METH_VARARGS, (char *)"svn_repos_get_committed_info(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_stat", _wrap_svn_repos_stat, METH_VARARGS, (char *)"svn_repos_stat(svn_fs_root_t * root, char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_deleted_rev", _wrap_svn_repos_deleted_rev, METH_VARARGS, (char *)"svn_repos_deleted_rev(svn_fs_t * fs, char const * path, svn_revnum_t start, svn_revnum_t end, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_repos_history2", _wrap_svn_repos_history2, METH_VARARGS, (char *)"\n"
- "svn_repos_history2(svn_fs_t fs, char path, svn_repos_history_func_t history_func, \n"
- " svn_repos_authz_func_t authz_read_func, \n"
- " svn_revnum_t start, svn_revnum_t end, \n"
- " svn_boolean_t cross_copies, apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_history2(svn_fs_t * fs, char const * path, svn_repos_history_func_t history_func, svn_repos_authz_func_t authz_read_func, \n"
+ " svn_revnum_t start, svn_revnum_t end, svn_boolean_t cross_copies, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_history", _wrap_svn_repos_history, METH_VARARGS, (char *)"\n"
- "svn_repos_history(svn_fs_t fs, char path, svn_repos_history_func_t history_func, \n"
- " svn_revnum_t start, svn_revnum_t end, \n"
- " svn_boolean_t cross_copies, apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_history(svn_fs_t * fs, char const * path, svn_repos_history_func_t history_func, svn_revnum_t start, \n"
+ " svn_revnum_t end, svn_boolean_t cross_copies, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_trace_node_locations", _wrap_svn_repos_trace_node_locations, METH_VARARGS, (char *)"\n"
- "svn_repos_trace_node_locations(svn_fs_t fs, char fs_path, svn_revnum_t peg_revision, \n"
- " apr_array_header_t location_revisions, svn_repos_authz_func_t authz_read_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_trace_node_locations(svn_fs_t * fs, char const * fs_path, svn_revnum_t peg_revision, apr_array_header_t location_revisions, \n"
+ " svn_repos_authz_func_t authz_read_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_node_location_segments", _wrap_svn_repos_node_location_segments, METH_VARARGS, (char *)"\n"
- "svn_repos_node_location_segments(svn_repos_t repos, char path, svn_revnum_t peg_revision, \n"
- " svn_revnum_t start_rev, svn_revnum_t end_rev, \n"
- " svn_location_segment_receiver_t receiver, \n"
- " svn_repos_authz_func_t authz_read_func, apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_node_location_segments(svn_repos_t * repos, char const * path, svn_revnum_t peg_revision, svn_revnum_t start_rev, \n"
+ " svn_revnum_t end_rev, svn_location_segment_receiver_t receiver, svn_repos_authz_func_t authz_read_func, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_get_logs4", _wrap_svn_repos_get_logs4, METH_VARARGS, (char *)"\n"
- "svn_repos_get_logs4(svn_repos_t repos, apr_array_header_t paths, svn_revnum_t start, \n"
- " svn_revnum_t end, int limit, svn_boolean_t discover_changed_paths, \n"
- " svn_boolean_t strict_node_history, \n"
- " svn_boolean_t include_merged_revisions, \n"
- " apr_array_header_t revprops, \n"
- " svn_repos_authz_func_t authz_read_func, \n"
- " svn_log_entry_receiver_t receiver, apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_get_logs4(svn_repos_t * repos, apr_array_header_t paths, svn_revnum_t start, svn_revnum_t end, \n"
+ " int limit, svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history, \n"
+ " svn_boolean_t include_merged_revisions, apr_array_header_t revprops, \n"
+ " svn_repos_authz_func_t authz_read_func, svn_log_entry_receiver_t receiver, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_get_logs3", _wrap_svn_repos_get_logs3, METH_VARARGS, (char *)"\n"
- "svn_repos_get_logs3(svn_repos_t repos, apr_array_header_t paths, svn_revnum_t start, \n"
- " svn_revnum_t end, int limit, svn_boolean_t discover_changed_paths, \n"
- " svn_boolean_t strict_node_history, \n"
- " svn_repos_authz_func_t authz_read_func, \n"
- " svn_log_message_receiver_t receiver, \n"
+ "svn_repos_get_logs3(svn_repos_t * repos, apr_array_header_t paths, svn_revnum_t start, svn_revnum_t end, \n"
+ " int limit, svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history, \n"
+ " svn_repos_authz_func_t authz_read_func, svn_log_message_receiver_t receiver, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_get_logs2", _wrap_svn_repos_get_logs2, METH_VARARGS, (char *)"\n"
- "svn_repos_get_logs2(svn_repos_t repos, apr_array_header_t paths, svn_revnum_t start, \n"
- " svn_revnum_t end, svn_boolean_t discover_changed_paths, \n"
- " svn_boolean_t strict_node_history, \n"
- " svn_repos_authz_func_t authz_read_func, \n"
- " svn_log_message_receiver_t receiver, \n"
+ "svn_repos_get_logs2(svn_repos_t * repos, apr_array_header_t paths, svn_revnum_t start, svn_revnum_t end, \n"
+ " svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history, \n"
+ " svn_repos_authz_func_t authz_read_func, svn_log_message_receiver_t receiver, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_get_logs", _wrap_svn_repos_get_logs, METH_VARARGS, (char *)"\n"
- "svn_repos_get_logs(svn_repos_t repos, apr_array_header_t paths, svn_revnum_t start, \n"
- " svn_revnum_t end, svn_boolean_t discover_changed_paths, \n"
- " svn_boolean_t strict_node_history, \n"
- " svn_log_message_receiver_t receiver, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_get_logs(svn_repos_t * repos, apr_array_header_t paths, svn_revnum_t start, svn_revnum_t end, \n"
+ " svn_boolean_t discover_changed_paths, svn_boolean_t strict_node_history, \n"
+ " svn_log_message_receiver_t receiver, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_fs_get_mergeinfo", _wrap_svn_repos_fs_get_mergeinfo, METH_VARARGS, (char *)"\n"
- "svn_repos_fs_get_mergeinfo(svn_repos_t repos, apr_array_header_t paths, svn_revnum_t revision, \n"
- " svn_mergeinfo_inheritance_t inherit, \n"
+ "svn_repos_fs_get_mergeinfo(svn_repos_t * repos, apr_array_header_t paths, svn_revnum_t revision, svn_mergeinfo_inheritance_t inherit, \n"
" svn_boolean_t include_descendants, svn_repos_authz_func_t authz_read_func, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_get_file_revs2", _wrap_svn_repos_get_file_revs2, METH_VARARGS, (char *)"\n"
- "svn_repos_get_file_revs2(svn_repos_t repos, char path, svn_revnum_t start, svn_revnum_t end, \n"
- " svn_boolean_t include_merged_revisions, \n"
+ "svn_repos_get_file_revs2(svn_repos_t * repos, char const * path, svn_revnum_t start, svn_revnum_t end, svn_boolean_t include_merged_revisions, \n"
" svn_repos_authz_func_t authz_read_func, \n"
- " svn_file_rev_handler_t handler, void handler_baton, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ " svn_file_rev_handler_t handler, void * handler_baton, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_get_file_revs", _wrap_svn_repos_get_file_revs, METH_VARARGS, (char *)"\n"
- "svn_repos_get_file_revs(svn_repos_t repos, char path, svn_revnum_t start, svn_revnum_t end, \n"
- " svn_repos_authz_func_t authz_read_func, \n"
+ "svn_repos_get_file_revs(svn_repos_t * repos, char const * path, svn_revnum_t start, svn_revnum_t end, svn_repos_authz_func_t authz_read_func, \n"
" svn_repos_file_rev_handler_t handler, \n"
- " void handler_baton, apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_repos_fs_commit_txn", _wrap_svn_repos_fs_commit_txn, METH_VARARGS, (char *)"svn_repos_fs_commit_txn(svn_repos_t repos, svn_fs_txn_t txn, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_repos_fs_begin_txn_for_commit2", _wrap_svn_repos_fs_begin_txn_for_commit2, METH_VARARGS, (char *)"\n"
- "svn_repos_fs_begin_txn_for_commit2(svn_repos_t repos, svn_revnum_t rev, apr_hash_t revprop_table, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ " void * handler_baton, apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_repos_fs_commit_txn", _wrap_svn_repos_fs_commit_txn, METH_VARARGS, (char *)"svn_repos_fs_commit_txn(svn_repos_t * repos, svn_fs_txn_t * txn, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_fs_begin_txn_for_commit2", _wrap_svn_repos_fs_begin_txn_for_commit2, METH_VARARGS, (char *)"svn_repos_fs_begin_txn_for_commit2(svn_repos_t * repos, svn_revnum_t rev, apr_hash_t revprop_table, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_repos_fs_begin_txn_for_commit", _wrap_svn_repos_fs_begin_txn_for_commit, METH_VARARGS, (char *)"\n"
- "svn_repos_fs_begin_txn_for_commit(svn_repos_t repos, svn_revnum_t rev, char author, char log_msg, \n"
+ "svn_repos_fs_begin_txn_for_commit(svn_repos_t * repos, svn_revnum_t rev, char const * author, char const * log_msg, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_repos_fs_begin_txn_for_update", _wrap_svn_repos_fs_begin_txn_for_update, METH_VARARGS, (char *)"svn_repos_fs_begin_txn_for_update(svn_repos_t repos, svn_revnum_t rev, char author, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_fs_begin_txn_for_update", _wrap_svn_repos_fs_begin_txn_for_update, METH_VARARGS, (char *)"svn_repos_fs_begin_txn_for_update(svn_repos_t * repos, svn_revnum_t rev, char const * author, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_repos_fs_lock", _wrap_svn_repos_fs_lock, METH_VARARGS, (char *)"\n"
- "svn_repos_fs_lock(svn_repos_t repos, char path, char token, char comment, \n"
- " svn_boolean_t is_dav_comment, apr_time_t expiration_date, \n"
- " svn_revnum_t current_rev, svn_boolean_t steal_lock, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_fs_lock(svn_repos_t * repos, char const * path, char const * token, char const * comment, \n"
+ " svn_boolean_t is_dav_comment, apr_time_t expiration_date, svn_revnum_t current_rev, \n"
+ " svn_boolean_t steal_lock, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_fs_unlock", _wrap_svn_repos_fs_unlock, METH_VARARGS, (char *)"\n"
- "svn_repos_fs_unlock(svn_repos_t repos, char path, char token, svn_boolean_t break_lock, \n"
+ "svn_repos_fs_unlock(svn_repos_t * repos, char const * path, char const * token, svn_boolean_t break_lock, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_fs_get_locks2", _wrap_svn_repos_fs_get_locks2, METH_VARARGS, (char *)"\n"
- "svn_repos_fs_get_locks2(svn_repos_t repos, char path, svn_depth_t depth, svn_repos_authz_func_t authz_read_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_repos_fs_get_locks", _wrap_svn_repos_fs_get_locks, METH_VARARGS, (char *)"\n"
- "svn_repos_fs_get_locks(svn_repos_t repos, char path, svn_repos_authz_func_t authz_read_func, \n"
+ "svn_repos_fs_get_locks2(svn_repos_t * repos, char const * path, svn_depth_t depth, svn_repos_authz_func_t authz_read_func, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_repos_fs_get_locks", _wrap_svn_repos_fs_get_locks, METH_VARARGS, (char *)"svn_repos_fs_get_locks(svn_repos_t * repos, char const * path, svn_repos_authz_func_t authz_read_func, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_repos_fs_change_rev_prop4", _wrap_svn_repos_fs_change_rev_prop4, METH_VARARGS, (char *)"\n"
- "svn_repos_fs_change_rev_prop4(svn_repos_t repos, svn_revnum_t rev, char author, char name, \n"
- " svn_string_t old_value_p, svn_string_t new_value, \n"
- " svn_boolean_t use_pre_revprop_change_hook, \n"
+ "svn_repos_fs_change_rev_prop4(svn_repos_t * repos, svn_revnum_t rev, char const * author, char const * name, svn_string_t const *const * old_value_p, \n"
+ " svn_string_t const * new_value, svn_boolean_t use_pre_revprop_change_hook, \n"
" svn_boolean_t use_post_revprop_change_hook, \n"
- " svn_repos_authz_func_t authz_read_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ " svn_repos_authz_func_t authz_read_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_fs_change_rev_prop3", _wrap_svn_repos_fs_change_rev_prop3, METH_VARARGS, (char *)"\n"
- "svn_repos_fs_change_rev_prop3(svn_repos_t repos, svn_revnum_t rev, char author, char name, \n"
- " svn_string_t new_value, svn_boolean_t use_pre_revprop_change_hook, \n"
- " svn_boolean_t use_post_revprop_change_hook, \n"
+ "svn_repos_fs_change_rev_prop3(svn_repos_t * repos, svn_revnum_t rev, char const * author, char const * name, svn_string_t const * new_value, \n"
+ " svn_boolean_t use_pre_revprop_change_hook, svn_boolean_t use_post_revprop_change_hook, \n"
" svn_repos_authz_func_t authz_read_func, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_fs_change_rev_prop2", _wrap_svn_repos_fs_change_rev_prop2, METH_VARARGS, (char *)"\n"
- "svn_repos_fs_change_rev_prop2(svn_repos_t repos, svn_revnum_t rev, char author, char name, \n"
- " svn_string_t new_value, svn_repos_authz_func_t authz_read_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_fs_change_rev_prop2(svn_repos_t * repos, svn_revnum_t rev, char const * author, char const * name, svn_string_t const * new_value, \n"
+ " svn_repos_authz_func_t authz_read_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_fs_change_rev_prop", _wrap_svn_repos_fs_change_rev_prop, METH_VARARGS, (char *)"\n"
- "svn_repos_fs_change_rev_prop(svn_repos_t repos, svn_revnum_t rev, char author, char name, \n"
- " svn_string_t new_value, apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_fs_change_rev_prop(svn_repos_t * repos, svn_revnum_t rev, char const * author, char const * name, svn_string_t const * new_value, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_fs_revision_prop", _wrap_svn_repos_fs_revision_prop, METH_VARARGS, (char *)"\n"
- "svn_repos_fs_revision_prop(svn_repos_t repos, svn_revnum_t rev, char propname, \n"
- " svn_repos_authz_func_t authz_read_func, apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_repos_fs_revision_proplist", _wrap_svn_repos_fs_revision_proplist, METH_VARARGS, (char *)"\n"
- "svn_repos_fs_revision_proplist(svn_repos_t repos, svn_revnum_t rev, svn_repos_authz_func_t authz_read_func, \n"
+ "svn_repos_fs_revision_prop(svn_repos_t * repos, svn_revnum_t rev, char const * propname, svn_repos_authz_func_t authz_read_func, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_repos_fs_revision_proplist", _wrap_svn_repos_fs_revision_proplist, METH_VARARGS, (char *)"svn_repos_fs_revision_proplist(svn_repos_t * repos, svn_revnum_t rev, svn_repos_authz_func_t authz_read_func, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_repos_fs_change_node_prop", _wrap_svn_repos_fs_change_node_prop, METH_VARARGS, (char *)"\n"
- "svn_repos_fs_change_node_prop(svn_fs_root_t root, char path, char name, svn_string_t value, \n"
+ "svn_repos_fs_change_node_prop(svn_fs_root_t * root, char const * path, char const * name, svn_string_t const * value, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_repos_fs_change_txn_prop", _wrap_svn_repos_fs_change_txn_prop, METH_VARARGS, (char *)"svn_repos_fs_change_txn_prop(svn_fs_txn_t txn, char name, svn_string_t value, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_repos_fs_change_txn_props", _wrap_svn_repos_fs_change_txn_props, METH_VARARGS, (char *)"svn_repos_fs_change_txn_props(svn_fs_txn_t txn, apr_array_header_t props, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_fs_change_txn_prop", _wrap_svn_repos_fs_change_txn_prop, METH_VARARGS, (char *)"svn_repos_fs_change_txn_prop(svn_fs_txn_t * txn, char const * name, svn_string_t const * value, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_fs_change_txn_props", _wrap_svn_repos_fs_change_txn_props, METH_VARARGS, (char *)"svn_repos_fs_change_txn_props(svn_fs_txn_t * txn, apr_array_header_t props, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_repos_node_t_kind_set", _wrap_svn_repos_node_t_kind_set, METH_VARARGS, (char *)"svn_repos_node_t_kind_set(svn_repos_node_t self, svn_node_kind_t kind)"},
{ (char *)"svn_repos_node_t_kind_get", _wrap_svn_repos_node_t_kind_get, METH_VARARGS, (char *)"svn_repos_node_t_kind_get(svn_repos_node_t self) -> svn_node_kind_t"},
{ (char *)"svn_repos_node_t_action_set", _wrap_svn_repos_node_t_action_set, METH_VARARGS, (char *)"svn_repos_node_t_action_set(svn_repos_node_t self, char action)"},
@@ -15890,212 +18420,235 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_repos_node_t_text_mod_get", _wrap_svn_repos_node_t_text_mod_get, METH_VARARGS, (char *)"svn_repos_node_t_text_mod_get(svn_repos_node_t self) -> svn_boolean_t"},
{ (char *)"svn_repos_node_t_prop_mod_set", _wrap_svn_repos_node_t_prop_mod_set, METH_VARARGS, (char *)"svn_repos_node_t_prop_mod_set(svn_repos_node_t self, svn_boolean_t prop_mod)"},
{ (char *)"svn_repos_node_t_prop_mod_get", _wrap_svn_repos_node_t_prop_mod_get, METH_VARARGS, (char *)"svn_repos_node_t_prop_mod_get(svn_repos_node_t self) -> svn_boolean_t"},
- { (char *)"svn_repos_node_t_name_set", _wrap_svn_repos_node_t_name_set, METH_VARARGS, (char *)"svn_repos_node_t_name_set(svn_repos_node_t self, char name)"},
- { (char *)"svn_repos_node_t_name_get", _wrap_svn_repos_node_t_name_get, METH_VARARGS, (char *)"svn_repos_node_t_name_get(svn_repos_node_t self) -> char"},
+ { (char *)"svn_repos_node_t_name_set", _wrap_svn_repos_node_t_name_set, METH_VARARGS, (char *)"svn_repos_node_t_name_set(svn_repos_node_t self, char const * name)"},
+ { (char *)"svn_repos_node_t_name_get", _wrap_svn_repos_node_t_name_get, METH_VARARGS, (char *)"svn_repos_node_t_name_get(svn_repos_node_t self) -> char const *"},
{ (char *)"svn_repos_node_t_copyfrom_rev_set", _wrap_svn_repos_node_t_copyfrom_rev_set, METH_VARARGS, (char *)"svn_repos_node_t_copyfrom_rev_set(svn_repos_node_t self, svn_revnum_t copyfrom_rev)"},
{ (char *)"svn_repos_node_t_copyfrom_rev_get", _wrap_svn_repos_node_t_copyfrom_rev_get, METH_VARARGS, (char *)"svn_repos_node_t_copyfrom_rev_get(svn_repos_node_t self) -> svn_revnum_t"},
- { (char *)"svn_repos_node_t_copyfrom_path_set", _wrap_svn_repos_node_t_copyfrom_path_set, METH_VARARGS, (char *)"svn_repos_node_t_copyfrom_path_set(svn_repos_node_t self, char copyfrom_path)"},
- { (char *)"svn_repos_node_t_copyfrom_path_get", _wrap_svn_repos_node_t_copyfrom_path_get, METH_VARARGS, (char *)"svn_repos_node_t_copyfrom_path_get(svn_repos_node_t self) -> char"},
- { (char *)"svn_repos_node_t_sibling_set", _wrap_svn_repos_node_t_sibling_set, METH_VARARGS, (char *)"svn_repos_node_t_sibling_set(svn_repos_node_t self, struct svn_repos_node_t sibling)"},
- { (char *)"svn_repos_node_t_sibling_get", _wrap_svn_repos_node_t_sibling_get, METH_VARARGS, (char *)"svn_repos_node_t_sibling_get(svn_repos_node_t self) -> struct svn_repos_node_t"},
- { (char *)"svn_repos_node_t_child_set", _wrap_svn_repos_node_t_child_set, METH_VARARGS, (char *)"svn_repos_node_t_child_set(svn_repos_node_t self, struct svn_repos_node_t child)"},
- { (char *)"svn_repos_node_t_child_get", _wrap_svn_repos_node_t_child_get, METH_VARARGS, (char *)"svn_repos_node_t_child_get(svn_repos_node_t self) -> struct svn_repos_node_t"},
- { (char *)"svn_repos_node_t_parent_set", _wrap_svn_repos_node_t_parent_set, METH_VARARGS, (char *)"svn_repos_node_t_parent_set(svn_repos_node_t self, struct svn_repos_node_t parent)"},
- { (char *)"svn_repos_node_t_parent_get", _wrap_svn_repos_node_t_parent_get, METH_VARARGS, (char *)"svn_repos_node_t_parent_get(svn_repos_node_t self) -> struct svn_repos_node_t"},
+ { (char *)"svn_repos_node_t_copyfrom_path_set", _wrap_svn_repos_node_t_copyfrom_path_set, METH_VARARGS, (char *)"svn_repos_node_t_copyfrom_path_set(svn_repos_node_t self, char const * copyfrom_path)"},
+ { (char *)"svn_repos_node_t_copyfrom_path_get", _wrap_svn_repos_node_t_copyfrom_path_get, METH_VARARGS, (char *)"svn_repos_node_t_copyfrom_path_get(svn_repos_node_t self) -> char const *"},
+ { (char *)"svn_repos_node_t_sibling_set", _wrap_svn_repos_node_t_sibling_set, METH_VARARGS, (char *)"svn_repos_node_t_sibling_set(svn_repos_node_t self, svn_repos_node_t sibling)"},
+ { (char *)"svn_repos_node_t_sibling_get", _wrap_svn_repos_node_t_sibling_get, METH_VARARGS, (char *)"svn_repos_node_t_sibling_get(svn_repos_node_t self) -> svn_repos_node_t"},
+ { (char *)"svn_repos_node_t_child_set", _wrap_svn_repos_node_t_child_set, METH_VARARGS, (char *)"svn_repos_node_t_child_set(svn_repos_node_t self, svn_repos_node_t child)"},
+ { (char *)"svn_repos_node_t_child_get", _wrap_svn_repos_node_t_child_get, METH_VARARGS, (char *)"svn_repos_node_t_child_get(svn_repos_node_t self) -> svn_repos_node_t"},
+ { (char *)"svn_repos_node_t_parent_set", _wrap_svn_repos_node_t_parent_set, METH_VARARGS, (char *)"svn_repos_node_t_parent_set(svn_repos_node_t self, svn_repos_node_t parent)"},
+ { (char *)"svn_repos_node_t_parent_get", _wrap_svn_repos_node_t_parent_get, METH_VARARGS, (char *)"svn_repos_node_t_parent_get(svn_repos_node_t self) -> svn_repos_node_t"},
{ (char *)"svn_repos_node_t_swigregister", svn_repos_node_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_repos_node_editor", _wrap_svn_repos_node_editor, METH_VARARGS, (char *)"\n"
- "svn_repos_node_editor(svn_repos_t repos, svn_fs_root_t base_root, svn_fs_root_t root, \n"
- " apr_pool_t node_pool, apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_node_editor(svn_repos_t * repos, svn_fs_root_t * base_root, svn_fs_root_t * root, apr_pool_t node_pool, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_repos_node_from_baton", _wrap_svn_repos_node_from_baton, METH_VARARGS, (char *)"svn_repos_node_from_baton(void edit_baton) -> svn_repos_node_t"},
+ { (char *)"svn_repos_node_from_baton", _wrap_svn_repos_node_from_baton, METH_VARARGS, (char *)"svn_repos_node_from_baton(void * edit_baton) -> svn_repos_node_t"},
{ (char *)"svn_repos_verify_fs2", _wrap_svn_repos_verify_fs2, METH_VARARGS, (char *)"\n"
- "svn_repos_verify_fs2(svn_repos_t repos, svn_revnum_t start_rev, svn_revnum_t end_rev, \n"
- " svn_repos_notify_func_t notify_func, \n"
- " void notify_baton, svn_cancel_func_t cancel, \n"
- " void cancel_baton, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_repos_verify_fs2(svn_repos_t * repos, svn_revnum_t start_rev, svn_revnum_t end_rev, svn_repos_notify_func_t notify_func, \n"
+ " void * notify_baton, svn_cancel_func_t cancel, void * cancel_baton, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_verify_fs", _wrap_svn_repos_verify_fs, METH_VARARGS, (char *)"\n"
- "svn_repos_verify_fs(svn_repos_t repos, svn_stream_t feedback_stream, svn_revnum_t start_rev, \n"
- " svn_revnum_t end_rev, svn_cancel_func_t cancel_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_verify_fs(svn_repos_t * repos, svn_stream_t * feedback_stream, svn_revnum_t start_rev, svn_revnum_t end_rev, \n"
+ " svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_dump_fs3", _wrap_svn_repos_dump_fs3, METH_VARARGS, (char *)"\n"
- "svn_repos_dump_fs3(svn_repos_t repos, svn_stream_t dumpstream, svn_revnum_t start_rev, \n"
- " svn_revnum_t end_rev, svn_boolean_t incremental, \n"
- " svn_boolean_t use_deltas, \n"
- " svn_repos_notify_func_t notify_func, void notify_baton, \n"
- " svn_cancel_func_t cancel_func, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_repos_dump_fs3(svn_repos_t * repos, svn_stream_t * dumpstream, svn_revnum_t start_rev, svn_revnum_t end_rev, \n"
+ " svn_boolean_t incremental, svn_boolean_t use_deltas, svn_repos_notify_func_t notify_func, \n"
+ " void * notify_baton, svn_cancel_func_t cancel_func, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_dump_fs2", _wrap_svn_repos_dump_fs2, METH_VARARGS, (char *)"\n"
- "svn_repos_dump_fs2(svn_repos_t repos, svn_stream_t dumpstream, svn_stream_t feedback_stream, \n"
- " svn_revnum_t start_rev, \n"
- " svn_revnum_t end_rev, svn_boolean_t incremental, \n"
- " svn_boolean_t use_deltas, svn_cancel_func_t cancel_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_dump_fs2(svn_repos_t * repos, svn_stream_t * dumpstream, svn_stream_t * feedback_stream, svn_revnum_t start_rev, \n"
+ " svn_revnum_t end_rev, svn_boolean_t incremental, svn_boolean_t use_deltas, \n"
+ " svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_dump_fs", _wrap_svn_repos_dump_fs, METH_VARARGS, (char *)"\n"
- "svn_repos_dump_fs(svn_repos_t repos, svn_stream_t dumpstream, svn_stream_t feedback_stream, \n"
- " svn_revnum_t start_rev, \n"
- " svn_revnum_t end_rev, svn_boolean_t incremental, \n"
+ "svn_repos_dump_fs(svn_repos_t * repos, svn_stream_t * dumpstream, svn_stream_t * feedback_stream, svn_revnum_t start_rev, \n"
+ " svn_revnum_t end_rev, svn_boolean_t incremental, svn_cancel_func_t cancel_func, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
+ ""},
+ { (char *)"svn_repos_load_fs4", _wrap_svn_repos_load_fs4, METH_VARARGS, (char *)"\n"
+ "svn_repos_load_fs4(svn_repos_t * repos, svn_stream_t * dumpstream, svn_revnum_t start_rev, svn_revnum_t end_rev, \n"
+ " enum svn_repos_load_uuid uuid_action, char const * parent_dir, \n"
+ " svn_boolean_t use_pre_commit_hook, svn_boolean_t use_post_commit_hook, svn_boolean_t validate_props, \n"
+ " svn_repos_notify_func_t notify_func, void * notify_baton, \n"
" svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_load_fs3", _wrap_svn_repos_load_fs3, METH_VARARGS, (char *)"\n"
- "svn_repos_load_fs3(svn_repos_t repos, svn_stream_t dumpstream, enum svn_repos_load_uuid uuid_action, \n"
- " char parent_dir, \n"
- " svn_boolean_t use_pre_commit_hook, svn_boolean_t use_post_commit_hook, \n"
- " svn_boolean_t validate_props, \n"
- " svn_repos_notify_func_t notify_func, \n"
- " void notify_baton, svn_cancel_func_t cancel_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_load_fs3(svn_repos_t * repos, svn_stream_t * dumpstream, enum svn_repos_load_uuid uuid_action, \n"
+ " char const * parent_dir, svn_boolean_t use_pre_commit_hook, svn_boolean_t use_post_commit_hook, \n"
+ " svn_boolean_t validate_props, svn_repos_notify_func_t notify_func, \n"
+ " void * notify_baton, svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_load_fs2", _wrap_svn_repos_load_fs2, METH_VARARGS, (char *)"\n"
- "svn_repos_load_fs2(svn_repos_t repos, svn_stream_t dumpstream, svn_stream_t feedback_stream, \n"
- " enum svn_repos_load_uuid uuid_action, \n"
- " char parent_dir, svn_boolean_t use_pre_commit_hook, \n"
- " svn_boolean_t use_post_commit_hook, \n"
- " svn_cancel_func_t cancel_func, \n"
+ "svn_repos_load_fs2(svn_repos_t * repos, svn_stream_t * dumpstream, svn_stream_t * feedback_stream, enum svn_repos_load_uuid uuid_action, \n"
+ " char const * parent_dir, svn_boolean_t use_pre_commit_hook, \n"
+ " svn_boolean_t use_post_commit_hook, svn_cancel_func_t cancel_func, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_load_fs", _wrap_svn_repos_load_fs, METH_VARARGS, (char *)"\n"
- "svn_repos_load_fs(svn_repos_t repos, svn_stream_t dumpstream, svn_stream_t feedback_stream, \n"
- " enum svn_repos_load_uuid uuid_action, \n"
- " char parent_dir, svn_cancel_func_t cancel_func, \n"
+ "svn_repos_load_fs(svn_repos_t * repos, svn_stream_t * dumpstream, svn_stream_t * feedback_stream, enum svn_repos_load_uuid uuid_action, \n"
+ " char const * parent_dir, svn_cancel_func_t cancel_func, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
+ ""},
+ { (char *)"svn_repos_parse_fns3_t_magic_header_record_set", _wrap_svn_repos_parse_fns3_t_magic_header_record_set, METH_VARARGS, (char *)"svn_repos_parse_fns3_t_magic_header_record_set(svn_repos_parse_fns3_t self, svn_error_t *(*)(int,void *,apr_pool_t *) magic_header_record)"},
+ { (char *)"svn_repos_parse_fns3_t_magic_header_record_get", _wrap_svn_repos_parse_fns3_t_magic_header_record_get, METH_VARARGS, (char *)"svn_repos_parse_fns3_t_magic_header_record_get(svn_repos_parse_fns3_t self) -> svn_error_t *(*)(int,void *,apr_pool_t *)"},
+ { (char *)"svn_repos_parse_fns3_t_uuid_record_set", _wrap_svn_repos_parse_fns3_t_uuid_record_set, METH_VARARGS, (char *)"svn_repos_parse_fns3_t_uuid_record_set(svn_repos_parse_fns3_t self, svn_error_t *(*)(char const *,void *,apr_pool_t *) uuid_record)"},
+ { (char *)"svn_repos_parse_fns3_t_uuid_record_get", _wrap_svn_repos_parse_fns3_t_uuid_record_get, METH_VARARGS, (char *)"svn_repos_parse_fns3_t_uuid_record_get(svn_repos_parse_fns3_t self) -> svn_error_t *(*)(char const *,void *,apr_pool_t *)"},
+ { (char *)"svn_repos_parse_fns3_t_new_revision_record_set", _wrap_svn_repos_parse_fns3_t_new_revision_record_set, METH_VARARGS, (char *)"svn_repos_parse_fns3_t_new_revision_record_set(svn_repos_parse_fns3_t self, svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *) new_revision_record)"},
+ { (char *)"svn_repos_parse_fns3_t_new_revision_record_get", _wrap_svn_repos_parse_fns3_t_new_revision_record_get, METH_VARARGS, (char *)"svn_repos_parse_fns3_t_new_revision_record_get(svn_repos_parse_fns3_t self) -> svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)"},
+ { (char *)"svn_repos_parse_fns3_t_new_node_record_set", _wrap_svn_repos_parse_fns3_t_new_node_record_set, METH_VARARGS, (char *)"svn_repos_parse_fns3_t_new_node_record_set(svn_repos_parse_fns3_t self, svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *) new_node_record)"},
+ { (char *)"svn_repos_parse_fns3_t_new_node_record_get", _wrap_svn_repos_parse_fns3_t_new_node_record_get, METH_VARARGS, (char *)"svn_repos_parse_fns3_t_new_node_record_get(svn_repos_parse_fns3_t self) -> svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)"},
+ { (char *)"svn_repos_parse_fns3_t_set_revision_property_set", _wrap_svn_repos_parse_fns3_t_set_revision_property_set, METH_VARARGS, (char *)"svn_repos_parse_fns3_t_set_revision_property_set(svn_repos_parse_fns3_t self, svn_error_t *(*)(void *,char const *,svn_string_t const *) set_revision_property)"},
+ { (char *)"svn_repos_parse_fns3_t_set_revision_property_get", _wrap_svn_repos_parse_fns3_t_set_revision_property_get, METH_VARARGS, (char *)"svn_repos_parse_fns3_t_set_revision_property_get(svn_repos_parse_fns3_t self) -> svn_error_t *(*)(void *,char const *,svn_string_t const *)"},
+ { (char *)"svn_repos_parse_fns3_t_set_node_property_set", _wrap_svn_repos_parse_fns3_t_set_node_property_set, METH_VARARGS, (char *)"svn_repos_parse_fns3_t_set_node_property_set(svn_repos_parse_fns3_t self, svn_error_t *(*)(void *,char const *,svn_string_t const *) set_node_property)"},
+ { (char *)"svn_repos_parse_fns3_t_set_node_property_get", _wrap_svn_repos_parse_fns3_t_set_node_property_get, METH_VARARGS, (char *)"svn_repos_parse_fns3_t_set_node_property_get(svn_repos_parse_fns3_t self) -> svn_error_t *(*)(void *,char const *,svn_string_t const *)"},
+ { (char *)"svn_repos_parse_fns3_t_delete_node_property_set", _wrap_svn_repos_parse_fns3_t_delete_node_property_set, METH_VARARGS, (char *)"svn_repos_parse_fns3_t_delete_node_property_set(svn_repos_parse_fns3_t self, svn_error_t *(*)(void *,char const *) delete_node_property)"},
+ { (char *)"svn_repos_parse_fns3_t_delete_node_property_get", _wrap_svn_repos_parse_fns3_t_delete_node_property_get, METH_VARARGS, (char *)"svn_repos_parse_fns3_t_delete_node_property_get(svn_repos_parse_fns3_t self) -> svn_error_t *(*)(void *,char const *)"},
+ { (char *)"svn_repos_parse_fns3_t_remove_node_props_set", _wrap_svn_repos_parse_fns3_t_remove_node_props_set, METH_VARARGS, (char *)"svn_repos_parse_fns3_t_remove_node_props_set(svn_repos_parse_fns3_t self, svn_error_t *(*)(void *) remove_node_props)"},
+ { (char *)"svn_repos_parse_fns3_t_remove_node_props_get", _wrap_svn_repos_parse_fns3_t_remove_node_props_get, METH_VARARGS, (char *)"svn_repos_parse_fns3_t_remove_node_props_get(svn_repos_parse_fns3_t self) -> svn_error_t *(*)(void *)"},
+ { (char *)"svn_repos_parse_fns3_t_set_fulltext_set", _wrap_svn_repos_parse_fns3_t_set_fulltext_set, METH_VARARGS, (char *)"svn_repos_parse_fns3_t_set_fulltext_set(svn_repos_parse_fns3_t self, svn_error_t *(*)(svn_stream_t **,void *) set_fulltext)"},
+ { (char *)"svn_repos_parse_fns3_t_set_fulltext_get", _wrap_svn_repos_parse_fns3_t_set_fulltext_get, METH_VARARGS, (char *)"svn_repos_parse_fns3_t_set_fulltext_get(svn_repos_parse_fns3_t self) -> svn_error_t *(*)(svn_stream_t **,void *)"},
+ { (char *)"svn_repos_parse_fns3_t_apply_textdelta_set", _wrap_svn_repos_parse_fns3_t_apply_textdelta_set, METH_VARARGS, (char *)"svn_repos_parse_fns3_t_apply_textdelta_set(svn_repos_parse_fns3_t self, svn_error_t *(*)(svn_txdelta_window_handler_t *,void **,void *) apply_textdelta)"},
+ { (char *)"svn_repos_parse_fns3_t_apply_textdelta_get", _wrap_svn_repos_parse_fns3_t_apply_textdelta_get, METH_VARARGS, (char *)"svn_repos_parse_fns3_t_apply_textdelta_get(svn_repos_parse_fns3_t self) -> svn_error_t *(*)(svn_txdelta_window_handler_t *,void **,void *)"},
+ { (char *)"svn_repos_parse_fns3_t_close_node_set", _wrap_svn_repos_parse_fns3_t_close_node_set, METH_VARARGS, (char *)"svn_repos_parse_fns3_t_close_node_set(svn_repos_parse_fns3_t self, svn_error_t *(*)(void *) close_node)"},
+ { (char *)"svn_repos_parse_fns3_t_close_node_get", _wrap_svn_repos_parse_fns3_t_close_node_get, METH_VARARGS, (char *)"svn_repos_parse_fns3_t_close_node_get(svn_repos_parse_fns3_t self) -> svn_error_t *(*)(void *)"},
+ { (char *)"svn_repos_parse_fns3_t_close_revision_set", _wrap_svn_repos_parse_fns3_t_close_revision_set, METH_VARARGS, (char *)"svn_repos_parse_fns3_t_close_revision_set(svn_repos_parse_fns3_t self, svn_error_t *(*)(void *) close_revision)"},
+ { (char *)"svn_repos_parse_fns3_t_close_revision_get", _wrap_svn_repos_parse_fns3_t_close_revision_get, METH_VARARGS, (char *)"svn_repos_parse_fns3_t_close_revision_get(svn_repos_parse_fns3_t self) -> svn_error_t *(*)(void *)"},
+ { (char *)"svn_repos_parse_fns3_t_swigregister", svn_repos_parse_fns3_t_swigregister, METH_VARARGS, NULL},
+ { (char *)"svn_repos_parse_dumpstream3", _wrap_svn_repos_parse_dumpstream3, METH_VARARGS, (char *)"\n"
+ "svn_repos_parse_dumpstream3(svn_stream_t * stream, svn_repos_parse_fns3_t parse_fns, void * parse_baton, svn_boolean_t deltas_are_text, \n"
+ " svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
+ ""},
+ { (char *)"svn_repos_get_fs_build_parser4", _wrap_svn_repos_get_fs_build_parser4, METH_VARARGS, (char *)"\n"
+ "svn_repos_get_fs_build_parser4(svn_repos_t * repos, svn_revnum_t start_rev, svn_revnum_t end_rev, svn_boolean_t use_history, \n"
+ " svn_boolean_t validate_props, enum svn_repos_load_uuid uuid_action, \n"
+ " char const * parent_dir, svn_repos_notify_func_t notify_func, void * notify_baton, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_repos_parse_fns2_t_new_revision_record_set", _wrap_svn_repos_parse_fns2_t_new_revision_record_set, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_new_revision_record_set(svn_repos_parse_fns2_t self, svn_error_t new_revision_record)"},
- { (char *)"svn_repos_parse_fns2_t_new_revision_record_get", _wrap_svn_repos_parse_fns2_t_new_revision_record_get, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_new_revision_record_get(svn_repos_parse_fns2_t self) -> svn_error_t"},
- { (char *)"svn_repos_parse_fns2_t_uuid_record_set", _wrap_svn_repos_parse_fns2_t_uuid_record_set, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_uuid_record_set(svn_repos_parse_fns2_t self, svn_error_t uuid_record)"},
- { (char *)"svn_repos_parse_fns2_t_uuid_record_get", _wrap_svn_repos_parse_fns2_t_uuid_record_get, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_uuid_record_get(svn_repos_parse_fns2_t self) -> svn_error_t"},
- { (char *)"svn_repos_parse_fns2_t_new_node_record_set", _wrap_svn_repos_parse_fns2_t_new_node_record_set, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_new_node_record_set(svn_repos_parse_fns2_t self, svn_error_t new_node_record)"},
- { (char *)"svn_repos_parse_fns2_t_new_node_record_get", _wrap_svn_repos_parse_fns2_t_new_node_record_get, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_new_node_record_get(svn_repos_parse_fns2_t self) -> svn_error_t"},
- { (char *)"svn_repos_parse_fns2_t_set_revision_property_set", _wrap_svn_repos_parse_fns2_t_set_revision_property_set, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_set_revision_property_set(svn_repos_parse_fns2_t self, svn_error_t set_revision_property)"},
- { (char *)"svn_repos_parse_fns2_t_set_revision_property_get", _wrap_svn_repos_parse_fns2_t_set_revision_property_get, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_set_revision_property_get(svn_repos_parse_fns2_t self) -> svn_error_t"},
- { (char *)"svn_repos_parse_fns2_t_set_node_property_set", _wrap_svn_repos_parse_fns2_t_set_node_property_set, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_set_node_property_set(svn_repos_parse_fns2_t self, svn_error_t set_node_property)"},
- { (char *)"svn_repos_parse_fns2_t_set_node_property_get", _wrap_svn_repos_parse_fns2_t_set_node_property_get, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_set_node_property_get(svn_repos_parse_fns2_t self) -> svn_error_t"},
- { (char *)"svn_repos_parse_fns2_t_delete_node_property_set", _wrap_svn_repos_parse_fns2_t_delete_node_property_set, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_delete_node_property_set(svn_repos_parse_fns2_t self, svn_error_t delete_node_property)"},
- { (char *)"svn_repos_parse_fns2_t_delete_node_property_get", _wrap_svn_repos_parse_fns2_t_delete_node_property_get, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_delete_node_property_get(svn_repos_parse_fns2_t self) -> svn_error_t"},
- { (char *)"svn_repos_parse_fns2_t_remove_node_props_set", _wrap_svn_repos_parse_fns2_t_remove_node_props_set, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_remove_node_props_set(svn_repos_parse_fns2_t self, svn_error_t remove_node_props)"},
- { (char *)"svn_repos_parse_fns2_t_remove_node_props_get", _wrap_svn_repos_parse_fns2_t_remove_node_props_get, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_remove_node_props_get(svn_repos_parse_fns2_t self) -> svn_error_t"},
- { (char *)"svn_repos_parse_fns2_t_set_fulltext_set", _wrap_svn_repos_parse_fns2_t_set_fulltext_set, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_set_fulltext_set(svn_repos_parse_fns2_t self, svn_error_t set_fulltext)"},
- { (char *)"svn_repos_parse_fns2_t_set_fulltext_get", _wrap_svn_repos_parse_fns2_t_set_fulltext_get, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_set_fulltext_get(svn_repos_parse_fns2_t self) -> svn_error_t"},
- { (char *)"svn_repos_parse_fns2_t_apply_textdelta_set", _wrap_svn_repos_parse_fns2_t_apply_textdelta_set, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_apply_textdelta_set(svn_repos_parse_fns2_t self, svn_error_t apply_textdelta)"},
- { (char *)"svn_repos_parse_fns2_t_apply_textdelta_get", _wrap_svn_repos_parse_fns2_t_apply_textdelta_get, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_apply_textdelta_get(svn_repos_parse_fns2_t self) -> svn_error_t"},
- { (char *)"svn_repos_parse_fns2_t_close_node_set", _wrap_svn_repos_parse_fns2_t_close_node_set, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_close_node_set(svn_repos_parse_fns2_t self, svn_error_t close_node)"},
- { (char *)"svn_repos_parse_fns2_t_close_node_get", _wrap_svn_repos_parse_fns2_t_close_node_get, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_close_node_get(svn_repos_parse_fns2_t self) -> svn_error_t"},
- { (char *)"svn_repos_parse_fns2_t_close_revision_set", _wrap_svn_repos_parse_fns2_t_close_revision_set, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_close_revision_set(svn_repos_parse_fns2_t self, svn_error_t close_revision)"},
- { (char *)"svn_repos_parse_fns2_t_close_revision_get", _wrap_svn_repos_parse_fns2_t_close_revision_get, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_close_revision_get(svn_repos_parse_fns2_t self) -> svn_error_t"},
+ { (char *)"svn_repos_parse_fns2_t_new_revision_record_set", _wrap_svn_repos_parse_fns2_t_new_revision_record_set, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_new_revision_record_set(svn_repos_parse_fns2_t self, svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *) new_revision_record)"},
+ { (char *)"svn_repos_parse_fns2_t_new_revision_record_get", _wrap_svn_repos_parse_fns2_t_new_revision_record_get, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_new_revision_record_get(svn_repos_parse_fns2_t self) -> svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)"},
+ { (char *)"svn_repos_parse_fns2_t_uuid_record_set", _wrap_svn_repos_parse_fns2_t_uuid_record_set, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_uuid_record_set(svn_repos_parse_fns2_t self, svn_error_t *(*)(char const *,void *,apr_pool_t *) uuid_record)"},
+ { (char *)"svn_repos_parse_fns2_t_uuid_record_get", _wrap_svn_repos_parse_fns2_t_uuid_record_get, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_uuid_record_get(svn_repos_parse_fns2_t self) -> svn_error_t *(*)(char const *,void *,apr_pool_t *)"},
+ { (char *)"svn_repos_parse_fns2_t_new_node_record_set", _wrap_svn_repos_parse_fns2_t_new_node_record_set, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_new_node_record_set(svn_repos_parse_fns2_t self, svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *) new_node_record)"},
+ { (char *)"svn_repos_parse_fns2_t_new_node_record_get", _wrap_svn_repos_parse_fns2_t_new_node_record_get, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_new_node_record_get(svn_repos_parse_fns2_t self) -> svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)"},
+ { (char *)"svn_repos_parse_fns2_t_set_revision_property_set", _wrap_svn_repos_parse_fns2_t_set_revision_property_set, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_set_revision_property_set(svn_repos_parse_fns2_t self, svn_error_t *(*)(void *,char const *,svn_string_t const *) set_revision_property)"},
+ { (char *)"svn_repos_parse_fns2_t_set_revision_property_get", _wrap_svn_repos_parse_fns2_t_set_revision_property_get, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_set_revision_property_get(svn_repos_parse_fns2_t self) -> svn_error_t *(*)(void *,char const *,svn_string_t const *)"},
+ { (char *)"svn_repos_parse_fns2_t_set_node_property_set", _wrap_svn_repos_parse_fns2_t_set_node_property_set, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_set_node_property_set(svn_repos_parse_fns2_t self, svn_error_t *(*)(void *,char const *,svn_string_t const *) set_node_property)"},
+ { (char *)"svn_repos_parse_fns2_t_set_node_property_get", _wrap_svn_repos_parse_fns2_t_set_node_property_get, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_set_node_property_get(svn_repos_parse_fns2_t self) -> svn_error_t *(*)(void *,char const *,svn_string_t const *)"},
+ { (char *)"svn_repos_parse_fns2_t_delete_node_property_set", _wrap_svn_repos_parse_fns2_t_delete_node_property_set, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_delete_node_property_set(svn_repos_parse_fns2_t self, svn_error_t *(*)(void *,char const *) delete_node_property)"},
+ { (char *)"svn_repos_parse_fns2_t_delete_node_property_get", _wrap_svn_repos_parse_fns2_t_delete_node_property_get, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_delete_node_property_get(svn_repos_parse_fns2_t self) -> svn_error_t *(*)(void *,char const *)"},
+ { (char *)"svn_repos_parse_fns2_t_remove_node_props_set", _wrap_svn_repos_parse_fns2_t_remove_node_props_set, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_remove_node_props_set(svn_repos_parse_fns2_t self, svn_error_t *(*)(void *) remove_node_props)"},
+ { (char *)"svn_repos_parse_fns2_t_remove_node_props_get", _wrap_svn_repos_parse_fns2_t_remove_node_props_get, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_remove_node_props_get(svn_repos_parse_fns2_t self) -> svn_error_t *(*)(void *)"},
+ { (char *)"svn_repos_parse_fns2_t_set_fulltext_set", _wrap_svn_repos_parse_fns2_t_set_fulltext_set, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_set_fulltext_set(svn_repos_parse_fns2_t self, svn_error_t *(*)(svn_stream_t **,void *) set_fulltext)"},
+ { (char *)"svn_repos_parse_fns2_t_set_fulltext_get", _wrap_svn_repos_parse_fns2_t_set_fulltext_get, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_set_fulltext_get(svn_repos_parse_fns2_t self) -> svn_error_t *(*)(svn_stream_t **,void *)"},
+ { (char *)"svn_repos_parse_fns2_t_apply_textdelta_set", _wrap_svn_repos_parse_fns2_t_apply_textdelta_set, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_apply_textdelta_set(svn_repos_parse_fns2_t self, svn_error_t *(*)(svn_txdelta_window_handler_t *,void **,void *) apply_textdelta)"},
+ { (char *)"svn_repos_parse_fns2_t_apply_textdelta_get", _wrap_svn_repos_parse_fns2_t_apply_textdelta_get, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_apply_textdelta_get(svn_repos_parse_fns2_t self) -> svn_error_t *(*)(svn_txdelta_window_handler_t *,void **,void *)"},
+ { (char *)"svn_repos_parse_fns2_t_close_node_set", _wrap_svn_repos_parse_fns2_t_close_node_set, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_close_node_set(svn_repos_parse_fns2_t self, svn_error_t *(*)(void *) close_node)"},
+ { (char *)"svn_repos_parse_fns2_t_close_node_get", _wrap_svn_repos_parse_fns2_t_close_node_get, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_close_node_get(svn_repos_parse_fns2_t self) -> svn_error_t *(*)(void *)"},
+ { (char *)"svn_repos_parse_fns2_t_close_revision_set", _wrap_svn_repos_parse_fns2_t_close_revision_set, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_close_revision_set(svn_repos_parse_fns2_t self, svn_error_t *(*)(void *) close_revision)"},
+ { (char *)"svn_repos_parse_fns2_t_close_revision_get", _wrap_svn_repos_parse_fns2_t_close_revision_get, METH_VARARGS, (char *)"svn_repos_parse_fns2_t_close_revision_get(svn_repos_parse_fns2_t self) -> svn_error_t *(*)(void *)"},
{ (char *)"svn_repos_parse_fns2_t_swigregister", svn_repos_parse_fns2_t_swigregister, METH_VARARGS, NULL},
+ { (char *)"svn_repos_parser_fns_t_new_revision_record_set", _wrap_svn_repos_parser_fns_t_new_revision_record_set, METH_VARARGS, (char *)"svn_repos_parser_fns_t_new_revision_record_set(svn_repos_parser_fns_t self, svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *) new_revision_record)"},
+ { (char *)"svn_repos_parser_fns_t_new_revision_record_get", _wrap_svn_repos_parser_fns_t_new_revision_record_get, METH_VARARGS, (char *)"svn_repos_parser_fns_t_new_revision_record_get(svn_repos_parser_fns_t self) -> svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)"},
+ { (char *)"svn_repos_parser_fns_t_uuid_record_set", _wrap_svn_repos_parser_fns_t_uuid_record_set, METH_VARARGS, (char *)"svn_repos_parser_fns_t_uuid_record_set(svn_repos_parser_fns_t self, svn_error_t *(*)(char const *,void *,apr_pool_t *) uuid_record)"},
+ { (char *)"svn_repos_parser_fns_t_uuid_record_get", _wrap_svn_repos_parser_fns_t_uuid_record_get, METH_VARARGS, (char *)"svn_repos_parser_fns_t_uuid_record_get(svn_repos_parser_fns_t self) -> svn_error_t *(*)(char const *,void *,apr_pool_t *)"},
+ { (char *)"svn_repos_parser_fns_t_new_node_record_set", _wrap_svn_repos_parser_fns_t_new_node_record_set, METH_VARARGS, (char *)"svn_repos_parser_fns_t_new_node_record_set(svn_repos_parser_fns_t self, svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *) new_node_record)"},
+ { (char *)"svn_repos_parser_fns_t_new_node_record_get", _wrap_svn_repos_parser_fns_t_new_node_record_get, METH_VARARGS, (char *)"svn_repos_parser_fns_t_new_node_record_get(svn_repos_parser_fns_t self) -> svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)"},
+ { (char *)"svn_repos_parser_fns_t_set_revision_property_set", _wrap_svn_repos_parser_fns_t_set_revision_property_set, METH_VARARGS, (char *)"svn_repos_parser_fns_t_set_revision_property_set(svn_repos_parser_fns_t self, svn_error_t *(*)(void *,char const *,svn_string_t const *) set_revision_property)"},
+ { (char *)"svn_repos_parser_fns_t_set_revision_property_get", _wrap_svn_repos_parser_fns_t_set_revision_property_get, METH_VARARGS, (char *)"svn_repos_parser_fns_t_set_revision_property_get(svn_repos_parser_fns_t self) -> svn_error_t *(*)(void *,char const *,svn_string_t const *)"},
+ { (char *)"svn_repos_parser_fns_t_set_node_property_set", _wrap_svn_repos_parser_fns_t_set_node_property_set, METH_VARARGS, (char *)"svn_repos_parser_fns_t_set_node_property_set(svn_repos_parser_fns_t self, svn_error_t *(*)(void *,char const *,svn_string_t const *) set_node_property)"},
+ { (char *)"svn_repos_parser_fns_t_set_node_property_get", _wrap_svn_repos_parser_fns_t_set_node_property_get, METH_VARARGS, (char *)"svn_repos_parser_fns_t_set_node_property_get(svn_repos_parser_fns_t self) -> svn_error_t *(*)(void *,char const *,svn_string_t const *)"},
+ { (char *)"svn_repos_parser_fns_t_remove_node_props_set", _wrap_svn_repos_parser_fns_t_remove_node_props_set, METH_VARARGS, (char *)"svn_repos_parser_fns_t_remove_node_props_set(svn_repos_parser_fns_t self, svn_error_t *(*)(void *) remove_node_props)"},
+ { (char *)"svn_repos_parser_fns_t_remove_node_props_get", _wrap_svn_repos_parser_fns_t_remove_node_props_get, METH_VARARGS, (char *)"svn_repos_parser_fns_t_remove_node_props_get(svn_repos_parser_fns_t self) -> svn_error_t *(*)(void *)"},
+ { (char *)"svn_repos_parser_fns_t_set_fulltext_set", _wrap_svn_repos_parser_fns_t_set_fulltext_set, METH_VARARGS, (char *)"svn_repos_parser_fns_t_set_fulltext_set(svn_repos_parser_fns_t self, svn_error_t *(*)(svn_stream_t **,void *) set_fulltext)"},
+ { (char *)"svn_repos_parser_fns_t_set_fulltext_get", _wrap_svn_repos_parser_fns_t_set_fulltext_get, METH_VARARGS, (char *)"svn_repos_parser_fns_t_set_fulltext_get(svn_repos_parser_fns_t self) -> svn_error_t *(*)(svn_stream_t **,void *)"},
+ { (char *)"svn_repos_parser_fns_t_close_node_set", _wrap_svn_repos_parser_fns_t_close_node_set, METH_VARARGS, (char *)"svn_repos_parser_fns_t_close_node_set(svn_repos_parser_fns_t self, svn_error_t *(*)(void *) close_node)"},
+ { (char *)"svn_repos_parser_fns_t_close_node_get", _wrap_svn_repos_parser_fns_t_close_node_get, METH_VARARGS, (char *)"svn_repos_parser_fns_t_close_node_get(svn_repos_parser_fns_t self) -> svn_error_t *(*)(void *)"},
+ { (char *)"svn_repos_parser_fns_t_close_revision_set", _wrap_svn_repos_parser_fns_t_close_revision_set, METH_VARARGS, (char *)"svn_repos_parser_fns_t_close_revision_set(svn_repos_parser_fns_t self, svn_error_t *(*)(void *) close_revision)"},
+ { (char *)"svn_repos_parser_fns_t_close_revision_get", _wrap_svn_repos_parser_fns_t_close_revision_get, METH_VARARGS, (char *)"svn_repos_parser_fns_t_close_revision_get(svn_repos_parser_fns_t self) -> svn_error_t *(*)(void *)"},
+ { (char *)"svn_repos_parser_fns_t_swigregister", svn_repos_parser_fns_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_repos_parse_dumpstream2", _wrap_svn_repos_parse_dumpstream2, METH_VARARGS, (char *)"\n"
- "svn_repos_parse_dumpstream2(svn_stream_t stream, svn_repos_parse_fns2_t parse_fns, \n"
- " void parse_baton, svn_cancel_func_t cancel_func, \n"
+ "svn_repos_parse_dumpstream2(svn_stream_t * stream, svn_repos_parse_fns2_t parse_fns, void * parse_baton, svn_cancel_func_t cancel_func, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_repos_get_fs_build_parser3", _wrap_svn_repos_get_fs_build_parser3, METH_VARARGS, (char *)"\n"
- "svn_repos_get_fs_build_parser3(svn_repos_t repos, svn_boolean_t use_history, svn_boolean_t validate_props, \n"
- " enum svn_repos_load_uuid uuid_action, \n"
- " char parent_dir, svn_repos_notify_func_t notify_func, \n"
- " void notify_baton, \n"
+ { (char *)"svn_repos_parse_dumpstream", _wrap_svn_repos_parse_dumpstream, METH_VARARGS, (char *)"\n"
+ "svn_repos_parse_dumpstream(svn_stream_t * stream, svn_repos_parser_fns_t parse_fns, void * parse_baton, svn_cancel_func_t cancel_func, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_repos_get_fs_build_parser2", _wrap_svn_repos_get_fs_build_parser2, METH_VARARGS, (char *)"\n"
- "svn_repos_get_fs_build_parser2(svn_repos_t repos, svn_boolean_t use_history, enum svn_repos_load_uuid uuid_action, \n"
- " svn_stream_t outstream, \n"
- " char parent_dir, apr_pool_t pool) -> svn_error_t\n"
+ { (char *)"svn_repos_get_fs_build_parser3", _wrap_svn_repos_get_fs_build_parser3, METH_VARARGS, (char *)"\n"
+ "svn_repos_get_fs_build_parser3(svn_repos_t * repos, svn_boolean_t use_history, svn_boolean_t validate_props, enum svn_repos_load_uuid uuid_action, \n"
+ " char const * parent_dir, svn_repos_notify_func_t notify_func, \n"
+ " void * notify_baton, apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_repos_parser_fns_t_new_revision_record_set", _wrap_svn_repos_parser_fns_t_new_revision_record_set, METH_VARARGS, (char *)"svn_repos_parser_fns_t_new_revision_record_set( self, svn_error_t new_revision_record)"},
- { (char *)"svn_repos_parser_fns_t_new_revision_record_get", _wrap_svn_repos_parser_fns_t_new_revision_record_get, METH_VARARGS, (char *)"svn_repos_parser_fns_t_new_revision_record_get( self) -> svn_error_t"},
- { (char *)"svn_repos_parser_fns_t_uuid_record_set", _wrap_svn_repos_parser_fns_t_uuid_record_set, METH_VARARGS, (char *)"svn_repos_parser_fns_t_uuid_record_set( self, svn_error_t uuid_record)"},
- { (char *)"svn_repos_parser_fns_t_uuid_record_get", _wrap_svn_repos_parser_fns_t_uuid_record_get, METH_VARARGS, (char *)"svn_repos_parser_fns_t_uuid_record_get( self) -> svn_error_t"},
- { (char *)"svn_repos_parser_fns_t_new_node_record_set", _wrap_svn_repos_parser_fns_t_new_node_record_set, METH_VARARGS, (char *)"svn_repos_parser_fns_t_new_node_record_set( self, svn_error_t new_node_record)"},
- { (char *)"svn_repos_parser_fns_t_new_node_record_get", _wrap_svn_repos_parser_fns_t_new_node_record_get, METH_VARARGS, (char *)"svn_repos_parser_fns_t_new_node_record_get( self) -> svn_error_t"},
- { (char *)"svn_repos_parser_fns_t_set_revision_property_set", _wrap_svn_repos_parser_fns_t_set_revision_property_set, METH_VARARGS, (char *)"svn_repos_parser_fns_t_set_revision_property_set( self, svn_error_t set_revision_property)"},
- { (char *)"svn_repos_parser_fns_t_set_revision_property_get", _wrap_svn_repos_parser_fns_t_set_revision_property_get, METH_VARARGS, (char *)"svn_repos_parser_fns_t_set_revision_property_get( self) -> svn_error_t"},
- { (char *)"svn_repos_parser_fns_t_set_node_property_set", _wrap_svn_repos_parser_fns_t_set_node_property_set, METH_VARARGS, (char *)"svn_repos_parser_fns_t_set_node_property_set( self, svn_error_t set_node_property)"},
- { (char *)"svn_repos_parser_fns_t_set_node_property_get", _wrap_svn_repos_parser_fns_t_set_node_property_get, METH_VARARGS, (char *)"svn_repos_parser_fns_t_set_node_property_get( self) -> svn_error_t"},
- { (char *)"svn_repos_parser_fns_t_remove_node_props_set", _wrap_svn_repos_parser_fns_t_remove_node_props_set, METH_VARARGS, (char *)"svn_repos_parser_fns_t_remove_node_props_set( self, svn_error_t remove_node_props)"},
- { (char *)"svn_repos_parser_fns_t_remove_node_props_get", _wrap_svn_repos_parser_fns_t_remove_node_props_get, METH_VARARGS, (char *)"svn_repos_parser_fns_t_remove_node_props_get( self) -> svn_error_t"},
- { (char *)"svn_repos_parser_fns_t_set_fulltext_set", _wrap_svn_repos_parser_fns_t_set_fulltext_set, METH_VARARGS, (char *)"svn_repos_parser_fns_t_set_fulltext_set( self, svn_error_t set_fulltext)"},
- { (char *)"svn_repos_parser_fns_t_set_fulltext_get", _wrap_svn_repos_parser_fns_t_set_fulltext_get, METH_VARARGS, (char *)"svn_repos_parser_fns_t_set_fulltext_get( self) -> svn_error_t"},
- { (char *)"svn_repos_parser_fns_t_close_node_set", _wrap_svn_repos_parser_fns_t_close_node_set, METH_VARARGS, (char *)"svn_repos_parser_fns_t_close_node_set( self, svn_error_t close_node)"},
- { (char *)"svn_repos_parser_fns_t_close_node_get", _wrap_svn_repos_parser_fns_t_close_node_get, METH_VARARGS, (char *)"svn_repos_parser_fns_t_close_node_get( self) -> svn_error_t"},
- { (char *)"svn_repos_parser_fns_t_close_revision_set", _wrap_svn_repos_parser_fns_t_close_revision_set, METH_VARARGS, (char *)"svn_repos_parser_fns_t_close_revision_set( self, svn_error_t close_revision)"},
- { (char *)"svn_repos_parser_fns_t_close_revision_get", _wrap_svn_repos_parser_fns_t_close_revision_get, METH_VARARGS, (char *)"svn_repos_parser_fns_t_close_revision_get( self) -> svn_error_t"},
- { (char *)"svn_repos_parser_fns_t_swigregister", svn_repos_parser_fns_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_repos_parse_dumpstream", _wrap_svn_repos_parse_dumpstream, METH_VARARGS, (char *)"\n"
- "svn_repos_parse_dumpstream(svn_stream_t stream, parse_fns, void parse_baton, \n"
- " svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
+ { (char *)"svn_repos_get_fs_build_parser2", _wrap_svn_repos_get_fs_build_parser2, METH_VARARGS, (char *)"\n"
+ "svn_repos_get_fs_build_parser2(svn_repos_t * repos, svn_boolean_t use_history, enum svn_repos_load_uuid uuid_action, \n"
+ " svn_stream_t * outstream, char const * parent_dir, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_get_fs_build_parser", _wrap_svn_repos_get_fs_build_parser, METH_VARARGS, (char *)"\n"
- "svn_repos_get_fs_build_parser(svn_repos_t repos, svn_boolean_t use_history, enum svn_repos_load_uuid uuid_action, \n"
- " svn_stream_t outstream, \n"
- " char parent_dir, apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_get_fs_build_parser(svn_repos_t * repos, svn_boolean_t use_history, enum svn_repos_load_uuid uuid_action, \n"
+ " svn_stream_t * outstream, char const * parent_dir, apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_repos_authz_read", _wrap_svn_repos_authz_read, METH_VARARGS, (char *)"svn_repos_authz_read(char file, svn_boolean_t must_exist, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_authz_read2", _wrap_svn_repos_authz_read2, METH_VARARGS, (char *)"svn_repos_authz_read2(char const * path, char const * groups_path, svn_boolean_t must_exist, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_authz_read", _wrap_svn_repos_authz_read, METH_VARARGS, (char *)"svn_repos_authz_read(char const * file, svn_boolean_t must_exist, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_authz_parse", _wrap_svn_repos_authz_parse, METH_VARARGS, (char *)"svn_repos_authz_parse(svn_stream_t * stream, svn_stream_t * groups_stream, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_repos_authz_check_access", _wrap_svn_repos_authz_check_access, METH_VARARGS, (char *)"\n"
- "svn_repos_authz_check_access(svn_authz_t authz, char repos_name, char path, char user, \n"
- " svn_repos_authz_access_t required_access, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_authz_check_access(svn_authz_t * authz, char const * repos_name, char const * path, char const * user, \n"
+ " svn_repos_authz_access_t required_access, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_check_revision_access", _wrap_svn_repos_check_revision_access, METH_VARARGS, (char *)"\n"
- "svn_repos_check_revision_access(svn_repos_revision_access_level_t access_level, svn_repos_t repos, \n"
- " svn_revnum_t revision, svn_repos_authz_func_t authz_read_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_check_revision_access(svn_repos_revision_access_level_t * access_level, svn_repos_t * repos, svn_revnum_t revision, \n"
+ " svn_repos_authz_func_t authz_read_func, apr_pool_t pool) -> svn_error_t\n"
+ ""},
+ { (char *)"svn_repos_fs_get_inherited_props", _wrap_svn_repos_fs_get_inherited_props, METH_VARARGS, (char *)"\n"
+ "svn_repos_fs_get_inherited_props(svn_fs_root_t * root, char const * path, char const * propname, svn_repos_authz_func_t authz_read_func, \n"
+ " apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
- { (char *)"svn_repos_remember_client_capabilities", _wrap_svn_repos_remember_client_capabilities, METH_VARARGS, (char *)"svn_repos_remember_client_capabilities(svn_repos_t repos, apr_array_header_t capabilities) -> svn_error_t"},
+ { (char *)"svn_repos_remember_client_capabilities", _wrap_svn_repos_remember_client_capabilities, METH_VARARGS, (char *)"svn_repos_remember_client_capabilities(svn_repos_t * repos, apr_array_header_t capabilities) -> svn_error_t"},
{ (char *)"svn_repos_t_swigregister", svn_repos_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_authz_t_swigregister", svn_authz_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_repos_parse_fns2_invoke_new_revision_record", _wrap_svn_repos_parse_fns2_invoke_new_revision_record, METH_VARARGS, (char *)"\n"
- "svn_repos_parse_fns2_invoke_new_revision_record(svn_repos_parse_fns2_t _obj, apr_hash_t headers, void parse_baton, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_repos_parse_fns2_invoke_uuid_record", _wrap_svn_repos_parse_fns2_invoke_uuid_record, METH_VARARGS, (char *)"\n"
- "svn_repos_parse_fns2_invoke_uuid_record(svn_repos_parse_fns2_t _obj, char uuid, void parse_baton, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_repos_parse_fns2_invoke_new_node_record", _wrap_svn_repos_parse_fns2_invoke_new_node_record, METH_VARARGS, (char *)"\n"
- "svn_repos_parse_fns2_invoke_new_node_record(svn_repos_parse_fns2_t _obj, apr_hash_t headers, void revision_baton, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_repos_parse_fns2_invoke_set_revision_property", _wrap_svn_repos_parse_fns2_invoke_set_revision_property, METH_VARARGS, (char *)"\n"
- "svn_repos_parse_fns2_invoke_set_revision_property(svn_repos_parse_fns2_t _obj, void revision_baton, char name, \n"
- " svn_string_t value) -> svn_error_t\n"
- ""},
- { (char *)"svn_repos_parse_fns2_invoke_set_node_property", _wrap_svn_repos_parse_fns2_invoke_set_node_property, METH_VARARGS, (char *)"\n"
- "svn_repos_parse_fns2_invoke_set_node_property(svn_repos_parse_fns2_t _obj, void node_baton, char name, \n"
- " svn_string_t value) -> svn_error_t\n"
- ""},
- { (char *)"svn_repos_parse_fns2_invoke_delete_node_property", _wrap_svn_repos_parse_fns2_invoke_delete_node_property, METH_VARARGS, (char *)"svn_repos_parse_fns2_invoke_delete_node_property(svn_repos_parse_fns2_t _obj, void node_baton, char name) -> svn_error_t"},
- { (char *)"svn_repos_parse_fns2_invoke_remove_node_props", _wrap_svn_repos_parse_fns2_invoke_remove_node_props, METH_VARARGS, (char *)"svn_repos_parse_fns2_invoke_remove_node_props(svn_repos_parse_fns2_t _obj, void node_baton) -> svn_error_t"},
- { (char *)"svn_repos_parse_fns2_invoke_set_fulltext", _wrap_svn_repos_parse_fns2_invoke_set_fulltext, METH_VARARGS, (char *)"svn_repos_parse_fns2_invoke_set_fulltext(svn_repos_parse_fns2_t _obj, void node_baton) -> svn_error_t"},
- { (char *)"svn_repos_parse_fns2_invoke_apply_textdelta", _wrap_svn_repos_parse_fns2_invoke_apply_textdelta, METH_VARARGS, (char *)"svn_repos_parse_fns2_invoke_apply_textdelta(svn_repos_parse_fns2_t _obj, void node_baton) -> svn_error_t"},
- { (char *)"svn_repos_parse_fns2_invoke_close_node", _wrap_svn_repos_parse_fns2_invoke_close_node, METH_VARARGS, (char *)"svn_repos_parse_fns2_invoke_close_node(svn_repos_parse_fns2_t _obj, void node_baton) -> svn_error_t"},
- { (char *)"svn_repos_parse_fns2_invoke_close_revision", _wrap_svn_repos_parse_fns2_invoke_close_revision, METH_VARARGS, (char *)"svn_repos_parse_fns2_invoke_close_revision(svn_repos_parse_fns2_t _obj, void revision_baton) -> svn_error_t"},
+ { (char *)"svn_repos_parse_fns3_invoke_magic_header_record", _wrap_svn_repos_parse_fns3_invoke_magic_header_record, METH_VARARGS, (char *)"svn_repos_parse_fns3_invoke_magic_header_record(svn_repos_parse_fns3_t _obj, int version, void * parse_baton, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_parse_fns3_invoke_uuid_record", _wrap_svn_repos_parse_fns3_invoke_uuid_record, METH_VARARGS, (char *)"svn_repos_parse_fns3_invoke_uuid_record(svn_repos_parse_fns3_t _obj, char const * uuid, void * parse_baton, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_parse_fns3_invoke_new_revision_record", _wrap_svn_repos_parse_fns3_invoke_new_revision_record, METH_VARARGS, (char *)"svn_repos_parse_fns3_invoke_new_revision_record(svn_repos_parse_fns3_t _obj, apr_hash_t headers, void * parse_baton, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_parse_fns3_invoke_new_node_record", _wrap_svn_repos_parse_fns3_invoke_new_node_record, METH_VARARGS, (char *)"svn_repos_parse_fns3_invoke_new_node_record(svn_repos_parse_fns3_t _obj, apr_hash_t headers, void * revision_baton, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_parse_fns3_invoke_set_revision_property", _wrap_svn_repos_parse_fns3_invoke_set_revision_property, METH_VARARGS, (char *)"svn_repos_parse_fns3_invoke_set_revision_property(svn_repos_parse_fns3_t _obj, void * revision_baton, char const * name, svn_string_t const * value) -> svn_error_t"},
+ { (char *)"svn_repos_parse_fns3_invoke_set_node_property", _wrap_svn_repos_parse_fns3_invoke_set_node_property, METH_VARARGS, (char *)"svn_repos_parse_fns3_invoke_set_node_property(svn_repos_parse_fns3_t _obj, void * node_baton, char const * name, svn_string_t const * value) -> svn_error_t"},
+ { (char *)"svn_repos_parse_fns3_invoke_delete_node_property", _wrap_svn_repos_parse_fns3_invoke_delete_node_property, METH_VARARGS, (char *)"svn_repos_parse_fns3_invoke_delete_node_property(svn_repos_parse_fns3_t _obj, void * node_baton, char const * name) -> svn_error_t"},
+ { (char *)"svn_repos_parse_fns3_invoke_remove_node_props", _wrap_svn_repos_parse_fns3_invoke_remove_node_props, METH_VARARGS, (char *)"svn_repos_parse_fns3_invoke_remove_node_props(svn_repos_parse_fns3_t _obj, void * node_baton) -> svn_error_t"},
+ { (char *)"svn_repos_parse_fns3_invoke_set_fulltext", _wrap_svn_repos_parse_fns3_invoke_set_fulltext, METH_VARARGS, (char *)"svn_repos_parse_fns3_invoke_set_fulltext(svn_repos_parse_fns3_t _obj, void * node_baton) -> svn_error_t"},
+ { (char *)"svn_repos_parse_fns3_invoke_apply_textdelta", _wrap_svn_repos_parse_fns3_invoke_apply_textdelta, METH_VARARGS, (char *)"svn_repos_parse_fns3_invoke_apply_textdelta(svn_repos_parse_fns3_t _obj, void * node_baton) -> svn_error_t"},
+ { (char *)"svn_repos_parse_fns3_invoke_close_node", _wrap_svn_repos_parse_fns3_invoke_close_node, METH_VARARGS, (char *)"svn_repos_parse_fns3_invoke_close_node(svn_repos_parse_fns3_t _obj, void * node_baton) -> svn_error_t"},
+ { (char *)"svn_repos_parse_fns3_invoke_close_revision", _wrap_svn_repos_parse_fns3_invoke_close_revision, METH_VARARGS, (char *)"svn_repos_parse_fns3_invoke_close_revision(svn_repos_parse_fns3_t _obj, void * revision_baton) -> svn_error_t"},
+ { (char *)"svn_repos_parse_fns2_invoke_new_revision_record", _wrap_svn_repos_parse_fns2_invoke_new_revision_record, METH_VARARGS, (char *)"svn_repos_parse_fns2_invoke_new_revision_record(svn_repos_parse_fns2_t _obj, apr_hash_t headers, void * parse_baton, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_parse_fns2_invoke_uuid_record", _wrap_svn_repos_parse_fns2_invoke_uuid_record, METH_VARARGS, (char *)"svn_repos_parse_fns2_invoke_uuid_record(svn_repos_parse_fns2_t _obj, char const * uuid, void * parse_baton, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_parse_fns2_invoke_new_node_record", _wrap_svn_repos_parse_fns2_invoke_new_node_record, METH_VARARGS, (char *)"svn_repos_parse_fns2_invoke_new_node_record(svn_repos_parse_fns2_t _obj, apr_hash_t headers, void * revision_baton, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_repos_parse_fns2_invoke_set_revision_property", _wrap_svn_repos_parse_fns2_invoke_set_revision_property, METH_VARARGS, (char *)"svn_repos_parse_fns2_invoke_set_revision_property(svn_repos_parse_fns2_t _obj, void * revision_baton, char const * name, svn_string_t const * value) -> svn_error_t"},
+ { (char *)"svn_repos_parse_fns2_invoke_set_node_property", _wrap_svn_repos_parse_fns2_invoke_set_node_property, METH_VARARGS, (char *)"svn_repos_parse_fns2_invoke_set_node_property(svn_repos_parse_fns2_t _obj, void * node_baton, char const * name, svn_string_t const * value) -> svn_error_t"},
+ { (char *)"svn_repos_parse_fns2_invoke_delete_node_property", _wrap_svn_repos_parse_fns2_invoke_delete_node_property, METH_VARARGS, (char *)"svn_repos_parse_fns2_invoke_delete_node_property(svn_repos_parse_fns2_t _obj, void * node_baton, char const * name) -> svn_error_t"},
+ { (char *)"svn_repos_parse_fns2_invoke_remove_node_props", _wrap_svn_repos_parse_fns2_invoke_remove_node_props, METH_VARARGS, (char *)"svn_repos_parse_fns2_invoke_remove_node_props(svn_repos_parse_fns2_t _obj, void * node_baton) -> svn_error_t"},
+ { (char *)"svn_repos_parse_fns2_invoke_set_fulltext", _wrap_svn_repos_parse_fns2_invoke_set_fulltext, METH_VARARGS, (char *)"svn_repos_parse_fns2_invoke_set_fulltext(svn_repos_parse_fns2_t _obj, void * node_baton) -> svn_error_t"},
+ { (char *)"svn_repos_parse_fns2_invoke_apply_textdelta", _wrap_svn_repos_parse_fns2_invoke_apply_textdelta, METH_VARARGS, (char *)"svn_repos_parse_fns2_invoke_apply_textdelta(svn_repos_parse_fns2_t _obj, void * node_baton) -> svn_error_t"},
+ { (char *)"svn_repos_parse_fns2_invoke_close_node", _wrap_svn_repos_parse_fns2_invoke_close_node, METH_VARARGS, (char *)"svn_repos_parse_fns2_invoke_close_node(svn_repos_parse_fns2_t _obj, void * node_baton) -> svn_error_t"},
+ { (char *)"svn_repos_parse_fns2_invoke_close_revision", _wrap_svn_repos_parse_fns2_invoke_close_revision, METH_VARARGS, (char *)"svn_repos_parse_fns2_invoke_close_revision(svn_repos_parse_fns2_t _obj, void * revision_baton) -> svn_error_t"},
{ (char *)"svn_repos_invoke_authz_func", _wrap_svn_repos_invoke_authz_func, METH_VARARGS, (char *)"\n"
- "svn_repos_invoke_authz_func(svn_repos_authz_func_t _obj, svn_fs_root_t root, char path, \n"
- " void baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_invoke_authz_func(svn_repos_authz_func_t _obj, svn_fs_root_t * root, char const * path, void * baton, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_invoke_authz_callback", _wrap_svn_repos_invoke_authz_callback, METH_VARARGS, (char *)"\n"
- "svn_repos_invoke_authz_callback(svn_repos_authz_callback_t _obj, svn_repos_authz_access_t required, \n"
- " svn_fs_root_t root, char path, \n"
- " void baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_invoke_authz_callback(svn_repos_authz_callback_t _obj, svn_repos_authz_access_t required, svn_fs_root_t * root, \n"
+ " char const * path, void * baton, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_invoke_file_rev_handler", _wrap_svn_repos_invoke_file_rev_handler, METH_VARARGS, (char *)"\n"
- "svn_repos_invoke_file_rev_handler(svn_repos_file_rev_handler_t _obj, void baton, char path, \n"
- " svn_revnum_t rev, apr_hash_t rev_props, \n"
- " apr_array_header_t prop_diffs, apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_repos_invoke_notify_func", _wrap_svn_repos_invoke_notify_func, METH_VARARGS, (char *)"\n"
- "svn_repos_invoke_notify_func(svn_repos_notify_func_t _obj, void baton, svn_repos_notify_t notify, \n"
- " apr_pool_t scratch_pool)\n"
+ "svn_repos_invoke_file_rev_handler(svn_repos_file_rev_handler_t _obj, void * baton, char const * path, svn_revnum_t rev, \n"
+ " apr_hash_t rev_props, apr_array_header_t prop_diffs, apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_repos_invoke_notify_func", _wrap_svn_repos_invoke_notify_func, METH_VARARGS, (char *)"svn_repos_invoke_notify_func(svn_repos_notify_func_t _obj, void * baton, svn_repos_notify_t notify, apr_pool_t scratch_pool)"},
+ { (char *)"svn_repos_invoke_freeze_func", _wrap_svn_repos_invoke_freeze_func, METH_VARARGS, (char *)"svn_repos_invoke_freeze_func(svn_repos_freeze_func_t _obj, void * baton, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_repos_invoke_history_func", _wrap_svn_repos_invoke_history_func, METH_VARARGS, (char *)"\n"
- "svn_repos_invoke_history_func(svn_repos_history_func_t _obj, void baton, char path, \n"
- " svn_revnum_t revision, apr_pool_t pool) -> svn_error_t\n"
+ "svn_repos_invoke_history_func(svn_repos_history_func_t _obj, void * baton, char const * path, svn_revnum_t revision, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_repos_authz_func_t_swigregister", svn_repos_authz_func_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_repos_authz_callback_t_swigregister", svn_repos_authz_callback_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_repos_file_rev_handler_t_swigregister", svn_repos_file_rev_handler_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_repos_notify_func_t_swigregister", svn_repos_notify_func_t_swigregister, METH_VARARGS, NULL},
+ { (char *)"svn_repos_freeze_func_t_swigregister", svn_repos_freeze_func_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_repos_history_func_t_swigregister", svn_repos_history_func_t_swigregister, METH_VARARGS, NULL},
{ NULL, NULL, 0, NULL }
};
@@ -16103,12 +18656,13 @@ static PyMethodDef SwigMethods[] = {
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
-static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *|svn_rangelist_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_hash_t = {"_p_apr_hash_t", "apr_hash_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int32_t = {"_p_apr_int32_t", "apr_int32_t *|time_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int64_t = {"_p_apr_int64_t", "apr_int64_t *|svn_filesize_t *|apr_time_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_pool_t = {"_p_apr_pool_t", "apr_pool_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_int_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_int_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(int,void *,apr_pool_t *)|svn_error_t *(*)(int,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_opt_subcommand_t *|struct svn_error_t *(*)(apr_getopt_t *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_svn_stream_t_p_void__p_svn_error_t = {"_p_f_p_p_svn_stream_t_p_void__p_svn_error_t", "struct svn_error_t *(*)(svn_stream_t **,void *)|svn_error_t *(*)(svn_stream_t **,void *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)|svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
@@ -16120,6 +18674,7 @@ static swig_type_info _swigt__p_f_p_svn_txdelta_window_handler_t_p_p_void_p_void
static swig_type_info _swigt__p_f_p_void__p_svn_error_t = {"_p_f_p_void__p_svn_error_t", "svn_cancel_func_t|struct svn_error_t *(*)(void *)|svn_error_t *(*)(void *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,apr_int64_t,svn_fs_pack_notify_action_t,apr_pool_t *)|svn_fs_pack_notify_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,apr_hash_t *,svn_revnum_t,char const *,char const *,char const *,apr_pool_t *)|svn_log_message_receiver_t", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,apr_pool_t *)|svn_repos_freeze_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char__p_svn_error_t = {"_p_f_p_void_p_q_const__char__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *)|svn_error_t *(*)(void *,char const *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,svn_string_t const *)|svn_error_t *(*)(void *,char const *,svn_string_t const *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,svn_revnum_t,apr_hash_t *,svn_txdelta_window_handler_t *,void **,apr_array_header_t *,apr_pool_t *)|svn_repos_file_rev_handler_t", 0, 0, (void*)0, 0};
@@ -16138,6 +18693,7 @@ static swig_type_info _swigt__p_p_f_p_svn_boolean_t_p_svn_fs_root_t_p_q_const__c
static swig_type_info _swigt__p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t = {"_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t", "svn_txdelta_window_handler_t *|struct svn_error_t *(**)(svn_txdelta_window_t *,void *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void__p_svn_error_t = {"_p_p_f_p_void__p_svn_error_t", "svn_cancel_func_t *|struct svn_error_t *(**)(void *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(void *,apr_int64_t,svn_fs_pack_notify_action_t,apr_pool_t *)|svn_fs_pack_notify_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_f_p_void_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(void *,apr_pool_t *)|svn_repos_freeze_func_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(void *,char const *,svn_revnum_t,apr_hash_t *,svn_txdelta_window_handler_t *,void **,apr_array_header_t *,apr_pool_t *)|svn_repos_file_rev_handler_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(void *,char const *,svn_revnum_t,apr_hash_t *,svn_boolean_t,svn_txdelta_window_handler_t *,void **,apr_array_header_t *,apr_pool_t *)|svn_file_rev_handler_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(void *,char const *,svn_revnum_t,apr_pool_t *)|svn_repos_history_func_t *", 0, 0, (void*)0, 0};
@@ -16149,6 +18705,7 @@ static swig_type_info _swigt__p_p_svn_dirent_t = {"_p_p_svn_dirent_t", "struct s
static swig_type_info _swigt__p_p_svn_fs_txn_t = {"_p_p_svn_fs_txn_t", "struct svn_fs_txn_t **|svn_fs_txn_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_lock_t = {"_p_p_svn_lock_t", "struct svn_lock_t **|svn_lock_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_repos_parse_fns2_t = {"_p_p_svn_repos_parse_fns2_t", "struct svn_repos_parse_fns2_t **|svn_repos_parse_fns2_t **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_svn_repos_parse_fns3_t = {"_p_p_svn_repos_parse_fns3_t", "struct svn_repos_parse_fns3_t **|svn_repos_parse_fns3_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_repos_parse_fns_t = {"_p_p_svn_repos_parse_fns_t", "struct svn_repos_parse_fns_t **|svn_repos_parser_fns_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_repos_t = {"_p_p_svn_repos_t", "struct svn_repos_t **|svn_repos_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_stream_t = {"_p_p_svn_stream_t", "struct svn_stream_t **|svn_stream_t **", 0, 0, (void*)0, 0};
@@ -16165,6 +18722,9 @@ static swig_type_info _swigt__p_svn_auth_provider_object_t = {"_p_svn_auth_provi
static swig_type_info _swigt__p_svn_auth_provider_t = {"_p_svn_auth_provider_t", "struct svn_auth_provider_t *|svn_auth_provider_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_ssl_server_cert_info_t = {"_p_svn_auth_ssl_server_cert_info_t", "struct svn_auth_ssl_server_cert_info_t *|svn_auth_ssl_server_cert_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_authz_t = {"_p_svn_authz_t", "struct svn_authz_t *|svn_authz_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_ctx_t = {"_p_svn_checksum_ctx_t", "struct svn_checksum_ctx_t *|svn_checksum_ctx_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "enum svn_checksum_kind_t *|svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "struct svn_checksum_t *|svn_checksum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_commit_info_t = {"_p_svn_commit_info_t", "struct svn_commit_info_t *|svn_commit_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_config_t = {"_p_svn_config_t", "struct svn_config_t *|svn_config_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_delta_editor_t = {"_p_svn_delta_editor_t", "struct svn_delta_editor_t *|svn_delta_editor_t *", 0, 0, (void*)0, 0};
@@ -16199,6 +18759,7 @@ static swig_type_info _swigt__p_svn_opt_revision_t = {"_p_svn_opt_revision_t", "
static swig_type_info _swigt__p_svn_opt_revision_value_t = {"_p_svn_opt_revision_value_t", "union svn_opt_revision_value_t *|svn_opt_revision_value_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_opt_subcommand_desc2_t = {"_p_svn_opt_subcommand_desc2_t", "struct svn_opt_subcommand_desc2_t *|svn_opt_subcommand_desc2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_opt_subcommand_desc_t = {"_p_svn_opt_subcommand_desc_t", "struct svn_opt_subcommand_desc_t *|svn_opt_subcommand_desc_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_prop_inherited_item_t = {"_p_svn_prop_inherited_item_t", "struct svn_prop_inherited_item_t *|svn_prop_inherited_item_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_kind = {"_p_svn_prop_kind", "svn_prop_kind_t *|enum svn_prop_kind *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_repos_authz_access_t = {"_p_svn_repos_authz_access_t", "enum svn_repos_authz_access_t *|svn_repos_authz_access_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_repos_node_t = {"_p_svn_repos_node_t", "struct svn_repos_node_t *|svn_repos_node_t *", 0, 0, (void*)0, 0};
@@ -16206,7 +18767,8 @@ static swig_type_info _swigt__p_svn_repos_notify_action_t = {"_p_svn_repos_notif
static swig_type_info _swigt__p_svn_repos_notify_t = {"_p_svn_repos_notify_t", "struct svn_repos_notify_t *|svn_repos_notify_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_repos_notify_warning_t = {"_p_svn_repos_notify_warning_t", "enum svn_repos_notify_warning_t *|svn_repos_notify_warning_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_repos_parse_fns2_t = {"_p_svn_repos_parse_fns2_t", "struct svn_repos_parse_fns2_t *|svn_repos_parse_fns2_t *|svn_repos_parser_fns2_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_svn_repos_parse_fns_t = {"_p_svn_repos_parse_fns_t", "struct svn_repos_parse_fns_t *|svn_repos_parser_fns_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_repos_parse_fns3_t = {"_p_svn_repos_parse_fns3_t", "struct svn_repos_parse_fns3_t *|svn_repos_parse_fns3_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_repos_parse_fns_t = {"_p_svn_repos_parse_fns_t", "struct svn_repos_parse_fns_t *|svn_repos_parse_fns_t *|svn_repos_parser_fns_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_repos_revision_access_level_t = {"_p_svn_repos_revision_access_level_t", "enum svn_repos_revision_access_level_t *|svn_repos_revision_access_level_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_repos_t = {"_p_svn_repos_t", "struct svn_repos_t *|svn_repos_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_stream_mark_t = {"_p_svn_stream_mark_t", "struct svn_stream_mark_t *|svn_stream_mark_t *", 0, 0, (void*)0, 0};
@@ -16218,7 +18780,11 @@ static swig_type_info _swigt__p_svn_txdelta_op_t = {"_p_svn_txdelta_op_t", "stru
static swig_type_info _swigt__p_svn_txdelta_stream_t = {"_p_svn_txdelta_stream_t", "struct svn_txdelta_stream_t *|svn_txdelta_stream_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_txdelta_window_t = {"_p_svn_txdelta_window_t", "struct svn_txdelta_window_t *|svn_txdelta_window_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_checklist_t = {"_p_svn_version_checklist_t", "struct svn_version_checklist_t *|svn_version_checklist_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_linked_lib_t = {"_p_svn_version_ext_linked_lib_t", "struct svn_version_ext_linked_lib_t *|svn_version_ext_linked_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_loaded_lib_t = {"_p_svn_version_ext_loaded_lib_t", "struct svn_version_ext_loaded_lib_t *|svn_version_ext_loaded_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_extended_t = {"_p_svn_version_extended_t", "struct svn_version_extended_t *|svn_version_extended_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_t = {"_p_svn_version_t", "struct svn_version_t *|svn_version_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_wc_external_item2_t = {"_p_svn_wc_external_item2_t", "svn_wc_external_item2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_long = {"_p_unsigned_long", "unsigned long *|svn_linenum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_void = {"_p_void", "void *", 0, 0, (void*)0, 0};
@@ -16229,6 +18795,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_apr_int64_t,
&_swigt__p_apr_pool_t,
&_swigt__p_char,
+ &_swigt__p_f_int_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_p_svn_stream_t_p_void__p_svn_error_t,
&_swigt__p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t,
@@ -16240,6 +18807,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_f_p_void__p_svn_error_t,
&_swigt__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_f_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t,
@@ -16258,6 +18826,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t,
&_swigt__p_p_f_p_void__p_svn_error_t,
&_swigt__p_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_p_f_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_pool_t__p_svn_error_t,
@@ -16269,6 +18838,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_p_svn_fs_txn_t,
&_swigt__p_p_svn_lock_t,
&_swigt__p_p_svn_repos_parse_fns2_t,
+ &_swigt__p_p_svn_repos_parse_fns3_t,
&_swigt__p_p_svn_repos_parse_fns_t,
&_swigt__p_p_svn_repos_t,
&_swigt__p_p_svn_stream_t,
@@ -16285,6 +18855,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_auth_provider_t,
&_swigt__p_svn_auth_ssl_server_cert_info_t,
&_swigt__p_svn_authz_t,
+ &_swigt__p_svn_checksum_ctx_t,
+ &_swigt__p_svn_checksum_kind_t,
+ &_swigt__p_svn_checksum_t,
&_swigt__p_svn_commit_info_t,
&_swigt__p_svn_config_t,
&_swigt__p_svn_delta_editor_t,
@@ -16319,6 +18892,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_opt_revision_value_t,
&_swigt__p_svn_opt_subcommand_desc2_t,
&_swigt__p_svn_opt_subcommand_desc_t,
+ &_swigt__p_svn_prop_inherited_item_t,
&_swigt__p_svn_prop_kind,
&_swigt__p_svn_repos_authz_access_t,
&_swigt__p_svn_repos_node_t,
@@ -16326,6 +18900,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_repos_notify_t,
&_swigt__p_svn_repos_notify_warning_t,
&_swigt__p_svn_repos_parse_fns2_t,
+ &_swigt__p_svn_repos_parse_fns3_t,
&_swigt__p_svn_repos_parse_fns_t,
&_swigt__p_svn_repos_revision_access_level_t,
&_swigt__p_svn_repos_t,
@@ -16338,7 +18913,11 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_txdelta_stream_t,
&_swigt__p_svn_txdelta_window_t,
&_swigt__p_svn_version_checklist_t,
+ &_swigt__p_svn_version_ext_linked_lib_t,
+ &_swigt__p_svn_version_ext_loaded_lib_t,
+ &_swigt__p_svn_version_extended_t,
&_swigt__p_svn_version_t,
+ &_swigt__p_svn_wc_external_item2_t,
&_swigt__p_unsigned_long,
&_swigt__p_void,
};
@@ -16349,6 +18928,7 @@ static swig_cast_info _swigc__p_apr_int32_t[] = { {&_swigt__p_apr_int32_t, 0, 0
static swig_cast_info _swigc__p_apr_int64_t[] = { {&_swigt__p_apr_int64_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_apr_pool_t[] = { {&_swigt__p_apr_pool_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_int_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_int_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_svn_stream_t_p_void__p_svn_error_t[] = { {&_swigt__p_f_p_p_svn_stream_t_p_void__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -16360,6 +18940,7 @@ static swig_cast_info _swigc__p_f_p_svn_txdelta_window_handler_t_p_p_void_p_void
static swig_cast_info _swigc__p_f_p_void__p_svn_error_t[] = { {&_swigt__p_f_p_void__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -16378,6 +18959,7 @@ static swig_cast_info _swigc__p_p_f_p_svn_boolean_t_p_svn_fs_root_t_p_q_const__c
static swig_cast_info _swigc__p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t[] = { {&_swigt__p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void__p_svn_error_t[] = { {&_swigt__p_p_f_p_void__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_f_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -16389,6 +18971,7 @@ static swig_cast_info _swigc__p_p_svn_dirent_t[] = { {&_swigt__p_p_svn_dirent_t
static swig_cast_info _swigc__p_p_svn_fs_txn_t[] = { {&_swigt__p_p_svn_fs_txn_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_lock_t[] = { {&_swigt__p_p_svn_lock_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_repos_parse_fns2_t[] = { {&_swigt__p_p_svn_repos_parse_fns2_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_svn_repos_parse_fns3_t[] = { {&_swigt__p_p_svn_repos_parse_fns3_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_repos_parse_fns_t[] = { {&_swigt__p_p_svn_repos_parse_fns_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_repos_t[] = { {&_swigt__p_p_svn_repos_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_stream_t[] = { {&_swigt__p_p_svn_stream_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -16405,6 +18988,9 @@ static swig_cast_info _swigc__p_svn_auth_provider_object_t[] = { {&_swigt__p_sv
static swig_cast_info _swigc__p_svn_auth_provider_t[] = { {&_swigt__p_svn_auth_provider_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_ssl_server_cert_info_t[] = { {&_swigt__p_svn_auth_ssl_server_cert_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_authz_t[] = { {&_swigt__p_svn_authz_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_ctx_t[] = { {&_swigt__p_svn_checksum_ctx_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_kind_t[] = { {&_swigt__p_svn_checksum_kind_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_t[] = { {&_swigt__p_svn_checksum_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_commit_info_t[] = { {&_swigt__p_svn_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_config_t[] = { {&_swigt__p_svn_config_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_delta_editor_t[] = { {&_swigt__p_svn_delta_editor_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -16439,6 +19025,7 @@ static swig_cast_info _swigc__p_svn_opt_revision_t[] = { {&_swigt__p_svn_opt_re
static swig_cast_info _swigc__p_svn_opt_revision_value_t[] = { {&_swigt__p_svn_opt_revision_value_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_opt_subcommand_desc2_t[] = { {&_swigt__p_svn_opt_subcommand_desc2_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_opt_subcommand_desc_t[] = { {&_swigt__p_svn_opt_subcommand_desc_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_prop_inherited_item_t[] = { {&_swigt__p_svn_prop_inherited_item_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_kind[] = { {&_swigt__p_svn_prop_kind, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_repos_authz_access_t[] = { {&_swigt__p_svn_repos_authz_access_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_repos_node_t[] = { {&_swigt__p_svn_repos_node_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -16446,6 +19033,7 @@ static swig_cast_info _swigc__p_svn_repos_notify_action_t[] = { {&_swigt__p_svn
static swig_cast_info _swigc__p_svn_repos_notify_t[] = { {&_swigt__p_svn_repos_notify_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_repos_notify_warning_t[] = { {&_swigt__p_svn_repos_notify_warning_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_repos_parse_fns2_t[] = { {&_swigt__p_svn_repos_parse_fns2_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_repos_parse_fns3_t[] = { {&_swigt__p_svn_repos_parse_fns3_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_repos_parse_fns_t[] = { {&_swigt__p_svn_repos_parse_fns_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_repos_revision_access_level_t[] = { {&_swigt__p_svn_repos_revision_access_level_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_repos_t[] = { {&_swigt__p_svn_repos_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -16458,7 +19046,11 @@ static swig_cast_info _swigc__p_svn_txdelta_op_t[] = { {&_swigt__p_svn_txdelta_
static swig_cast_info _swigc__p_svn_txdelta_stream_t[] = { {&_swigt__p_svn_txdelta_stream_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_txdelta_window_t[] = { {&_swigt__p_svn_txdelta_window_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_checklist_t[] = { {&_swigt__p_svn_version_checklist_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_linked_lib_t[] = { {&_swigt__p_svn_version_ext_linked_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_loaded_lib_t[] = { {&_swigt__p_svn_version_ext_loaded_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_extended_t[] = { {&_swigt__p_svn_version_extended_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_t[] = { {&_swigt__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_wc_external_item2_t[] = { {&_swigt__p_svn_wc_external_item2_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_long[] = { {&_swigt__p_unsigned_long, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_void[] = { {&_swigt__p_void, 0, 0, 0},{0, 0, 0, 0}};
@@ -16469,6 +19061,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_apr_int64_t,
_swigc__p_apr_pool_t,
_swigc__p_char,
+ _swigc__p_f_int_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_p_svn_stream_t_p_void__p_svn_error_t,
_swigc__p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t,
@@ -16480,6 +19073,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_f_p_void__p_svn_error_t,
_swigc__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_f_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t,
@@ -16498,6 +19092,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t,
_swigc__p_p_f_p_void__p_svn_error_t,
_swigc__p_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_p_f_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_pool_t__p_svn_error_t,
@@ -16509,6 +19104,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_p_svn_fs_txn_t,
_swigc__p_p_svn_lock_t,
_swigc__p_p_svn_repos_parse_fns2_t,
+ _swigc__p_p_svn_repos_parse_fns3_t,
_swigc__p_p_svn_repos_parse_fns_t,
_swigc__p_p_svn_repos_t,
_swigc__p_p_svn_stream_t,
@@ -16525,6 +19121,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_auth_provider_t,
_swigc__p_svn_auth_ssl_server_cert_info_t,
_swigc__p_svn_authz_t,
+ _swigc__p_svn_checksum_ctx_t,
+ _swigc__p_svn_checksum_kind_t,
+ _swigc__p_svn_checksum_t,
_swigc__p_svn_commit_info_t,
_swigc__p_svn_config_t,
_swigc__p_svn_delta_editor_t,
@@ -16559,6 +19158,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_opt_revision_value_t,
_swigc__p_svn_opt_subcommand_desc2_t,
_swigc__p_svn_opt_subcommand_desc_t,
+ _swigc__p_svn_prop_inherited_item_t,
_swigc__p_svn_prop_kind,
_swigc__p_svn_repos_authz_access_t,
_swigc__p_svn_repos_node_t,
@@ -16566,6 +19166,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_repos_notify_t,
_swigc__p_svn_repos_notify_warning_t,
_swigc__p_svn_repos_parse_fns2_t,
+ _swigc__p_svn_repos_parse_fns3_t,
_swigc__p_svn_repos_parse_fns_t,
_swigc__p_svn_repos_revision_access_level_t,
_swigc__p_svn_repos_t,
@@ -16578,7 +19179,11 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_txdelta_stream_t,
_swigc__p_svn_txdelta_window_t,
_swigc__p_svn_version_checklist_t,
+ _swigc__p_svn_version_ext_linked_lib_t,
+ _swigc__p_svn_version_ext_loaded_lib_t,
+ _swigc__p_svn_version_extended_t,
_swigc__p_svn_version_t,
+ _swigc__p_svn_wc_external_item2_t,
_swigc__p_unsigned_long,
_swigc__p_void,
};
@@ -16651,8 +19256,6 @@ SWIG_InitializeModule(void *clientdata) {
swig_module_info *module_head, *iter;
int found, init;
- clientdata = clientdata;
-
/* check to see if the circular list has been setup, if not, set it up */
if (swig_module.next==0) {
/* Initialize the swig_module */
@@ -17225,6 +19828,7 @@ SWIG_init(void) {
m = Py_InitModule((char *) SWIG_name, SwigMethods);
#endif
md = d = PyModule_GetDict(m);
+ (void)md;
SWIG_InitializeModule(0);
@@ -17295,12 +19899,15 @@ SWIG_init(void) {
SWIG_Python_SetConstant(d, "svn_repos_notify_mutex_acquired",SWIG_From_long((long)(svn_repos_notify_mutex_acquired)));
SWIG_Python_SetConstant(d, "svn_repos_notify_recover_start",SWIG_From_long((long)(svn_repos_notify_recover_start)));
SWIG_Python_SetConstant(d, "svn_repos_notify_upgrade_start",SWIG_From_long((long)(svn_repos_notify_upgrade_start)));
+ SWIG_Python_SetConstant(d, "svn_repos_notify_load_skipped_rev",SWIG_From_long((long)(svn_repos_notify_load_skipped_rev)));
+ SWIG_Python_SetConstant(d, "svn_repos_notify_verify_rev_structure",SWIG_From_long((long)(svn_repos_notify_verify_rev_structure)));
SWIG_Python_SetConstant(d, "svn_repos_notify_warning_found_old_reference",SWIG_From_long((long)(svn_repos_notify_warning_found_old_reference)));
SWIG_Python_SetConstant(d, "svn_repos_notify_warning_found_old_mergeinfo",SWIG_From_long((long)(svn_repos_notify_warning_found_old_mergeinfo)));
SWIG_Python_SetConstant(d, "svn_repos_notify_warning_invalid_fspath",SWIG_From_long((long)(svn_repos_notify_warning_invalid_fspath)));
SWIG_Python_SetConstant(d, "SVN_REPOS_CAPABILITY_MERGEINFO",SWIG_FromCharPtr("mergeinfo"));
SWIG_Python_SetConstant(d, "SVN_REPOS_DUMPFILE_MAGIC_HEADER",SWIG_FromCharPtr("SVN-fs-dump-format-version"));
SWIG_Python_SetConstant(d, "SVN_REPOS_DUMPFILE_FORMAT_VERSION",SWIG_From_long((long)(3)));
+ SWIG_Python_SetConstant(d, "SVN_REPOS_DUMPFILE_FORMAT_VERSION_DELTAS",SWIG_From_long((long)(3)));
SWIG_Python_SetConstant(d, "SVN_REPOS_DUMPFILE_UUID",SWIG_FromCharPtr("UUID"));
SWIG_Python_SetConstant(d, "SVN_REPOS_DUMPFILE_CONTENT_LENGTH",SWIG_FromCharPtr("Content-length"));
SWIG_Python_SetConstant(d, "SVN_REPOS_DUMPFILE_REVISION_NUMBER",SWIG_FromCharPtr("Revision-number"));
diff --git a/subversion/bindings/swig/python/svn_wc.c b/subversion/bindings/swig/python/svn_wc.c
index 1c6b435..818dcf5 100644
--- a/subversion/bindings/swig/python/svn_wc.c
+++ b/subversion/bindings/swig/python/svn_wc.c
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -733,6 +733,7 @@ SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) {
#define PyInt_Check(x) PyLong_Check(x)
#define PyInt_AsLong(x) PyLong_AsLong(x)
#define PyInt_FromLong(x) PyLong_FromLong(x)
+#define PyInt_FromSize_t(x) PyLong_FromSize_t(x)
#define PyString_Check(name) PyBytes_Check(name)
#define PyString_FromString(x) PyUnicode_FromString(x)
#define PyString_Format(fmt, args) PyUnicode_Format(fmt, args)
@@ -902,6 +903,10 @@ static long PyNumber_AsSsize_t (PyObject *x, void *SWIGUNUSEDPARM(exc))
}
#endif
+#if PY_VERSION_HEX < 0x02050000
+#define PyInt_FromSize_t(x) PyInt_FromLong((long)x)
+#endif
+
#if PY_VERSION_HEX < 0x02040000
#define Py_VISIT(op) \
do { \
@@ -1173,7 +1178,7 @@ SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self),
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Python_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Python_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Python_SetModule(pointer)
#define SWIG_NewClientData(obj) SwigPyClientData_New(obj)
@@ -1199,7 +1204,7 @@ SWIG_Python_SetErrorObj(PyObject *errtype, PyObject *obj) {
SWIGINTERN void
SWIG_Python_SetErrorMsg(PyObject *errtype, const char *msg) {
SWIG_PYTHON_THREAD_BEGIN_BLOCK;
- PyErr_SetString(errtype, (char *) msg);
+ PyErr_SetString(errtype, msg);
SWIG_PYTHON_THREAD_END_BLOCK;
}
@@ -1218,7 +1223,11 @@ SwigPyBuiltin_AddPublicSymbol(PyObject *seq, const char *key) {
SWIGINTERN void
SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *name, PyObject *obj) {
+#if PY_VERSION_HEX < 0x02030000
PyDict_SetItemString(d, (char *)name, obj);
+#else
+ PyDict_SetItemString(d, name, obj);
+#endif
Py_DECREF(obj);
if (public_interface)
SwigPyBuiltin_AddPublicSymbol(public_interface, name);
@@ -1228,7 +1237,11 @@ SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *nam
SWIGINTERN void
SWIG_Python_SetConstant(PyObject *d, const char *name, PyObject *obj) {
+#if PY_VERSION_HEX < 0x02030000
PyDict_SetItemString(d, (char *)name, obj);
+#else
+ PyDict_SetItemString(d, name, obj);
+#endif
Py_DECREF(obj);
}
@@ -1549,7 +1562,7 @@ SwigPyObject_repr(SwigPyObject *v, PyObject *args)
#endif
{
const char *name = SWIG_TypePrettyName(v->ty);
- PyObject *repr = SWIG_Python_str_FromFormat("<Swig Object of type '%s' at %p>", name, (void *)v);
+ PyObject *repr = SWIG_Python_str_FromFormat("<Swig Object of type '%s' at %p>", (name ? name : "unknown"), (void *)v);
if (v->next) {
# ifdef METH_NOARGS
PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next);
@@ -1753,8 +1766,10 @@ SwigPyObject_own(PyObject *v, PyObject *args)
PyObject *val = 0;
#if (PY_VERSION_HEX < 0x02020000)
if (!PyArg_ParseTuple(args,(char *)"|O:own",&val))
-#else
+#elif (PY_VERSION_HEX < 0x02050000)
if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val))
+#else
+ if (!PyArg_UnpackTuple(args, "own", 0, 1, &val))
#endif
{
return NULL;
@@ -2449,23 +2464,29 @@ SWIG_Python_NewShadowInstance(SwigPyClientData *data, PyObject *swig_this)
} else {
#if PY_VERSION_HEX >= 0x03000000
inst = PyBaseObject_Type.tp_new((PyTypeObject*) data->newargs, Py_None, Py_None);
- PyObject_SetAttr(inst, SWIG_This(), swig_this);
- Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG;
+ if (inst) {
+ PyObject_SetAttr(inst, SWIG_This(), swig_this);
+ Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG;
+ }
#else
PyObject *dict = PyDict_New();
- PyDict_SetItem(dict, SWIG_This(), swig_this);
- inst = PyInstance_NewRaw(data->newargs, dict);
- Py_DECREF(dict);
+ if (dict) {
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ inst = PyInstance_NewRaw(data->newargs, dict);
+ Py_DECREF(dict);
+ }
#endif
}
return inst;
#else
#if (PY_VERSION_HEX >= 0x02010000)
- PyObject *inst;
+ PyObject *inst = 0;
PyObject *dict = PyDict_New();
- PyDict_SetItem(dict, SWIG_This(), swig_this);
- inst = PyInstance_NewRaw(data->newargs, dict);
- Py_DECREF(dict);
+ if (dict) {
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ inst = PyInstance_NewRaw(data->newargs, dict);
+ Py_DECREF(dict);
+ }
return (PyObject *) inst;
#else
PyInstanceObject *inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type);
@@ -2516,7 +2537,7 @@ SWIG_Python_SetSwigThis(PyObject *inst, PyObject *swig_this)
SWIGINTERN PyObject *
SWIG_Python_InitShadowInstance(PyObject *args) {
PyObject *obj[2];
- if (!SWIG_Python_UnpackTuple(args,(char*)"swiginit", 2, 2, obj)) {
+ if (!SWIG_Python_UnpackTuple(args, "swiginit", 2, 2, obj)) {
return NULL;
} else {
SwigPyObject *sthis = SWIG_Python_GetSwigThis(obj[0]);
@@ -2572,12 +2593,10 @@ SWIG_Python_NewPointerObj(PyObject *self, void *ptr, swig_type_info *type, int f
assert(!(flags & SWIG_BUILTIN_TP_INIT));
robj = SwigPyObject_New(ptr, type, own);
- if (clientdata && !(flags & SWIG_POINTER_NOSHADOW)) {
+ if (robj && clientdata && !(flags & SWIG_POINTER_NOSHADOW)) {
PyObject *inst = SWIG_Python_NewShadowInstance(clientdata, robj);
- if (inst) {
- Py_DECREF(robj);
- robj = inst;
- }
+ Py_DECREF(robj);
+ robj = inst;
}
return robj;
}
@@ -2598,7 +2617,7 @@ void *SWIG_ReturnGlobalTypeList(void *);
#endif
SWIGRUNTIME swig_module_info *
-SWIG_Python_GetModule(void) {
+SWIG_Python_GetModule(void *SWIGUNUSEDPARM(clientdata)) {
static void *type_pointer = (void *)0;
/* first check if module already created */
if (!type_pointer) {
@@ -2724,7 +2743,7 @@ SWIG_Python_TypeQuery(const char *type)
descriptor = (swig_type_info *) PyCObject_AsVoidPtr(obj);
#endif
} else {
- swig_module_info *swig_module = SWIG_Python_GetModule();
+ swig_module_info *swig_module = SWIG_GetModule(0);
descriptor = SWIG_TypeQueryModule(swig_module, swig_module, type);
if (descriptor) {
#ifdef SWIGPY_USE_CAPSULE
@@ -2792,7 +2811,7 @@ SwigPyObject_GetDesc(PyObject *self)
{
SwigPyObject *v = (SwigPyObject *)self;
swig_type_info *ty = v ? v->ty : 0;
- return ty ? ty->str : (char*)"";
+ return ty ? ty->str : "";
}
SWIGRUNTIME void
@@ -2849,6 +2868,7 @@ SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int SWIGUNUSEDPARM(arg
return result;
}
+#ifdef SWIGPYTHON_BUILTIN
SWIGRUNTIME int
SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
PyTypeObject *tp = obj->ob_type;
@@ -2857,15 +2877,15 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
descrsetfunc f;
int res;
-#ifdef Py_USING_UNICODE
+# ifdef Py_USING_UNICODE
if (PyString_Check(name)) {
name = PyUnicode_Decode(PyString_AsString(name), PyString_Size(name), NULL, NULL);
if (!name)
return -1;
} else if (!PyUnicode_Check(name))
-#else
+# else
if (!PyString_Check(name))
-#endif
+# endif
{
PyErr_Format(PyExc_TypeError, "attribute name must be string, not '%.200s'", name->ob_type->tp_name);
return -1;
@@ -2900,6 +2920,7 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
Py_DECREF(name);
return res;
}
+#endif
#ifdef __cplusplus
@@ -3019,86 +3040,92 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[97]
#define SWIGTYPE_p_svn_auth_provider_t swig_types[98]
#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[99]
-#define SWIGTYPE_p_svn_checksum_t swig_types[100]
-#define SWIGTYPE_p_svn_commit_info_t swig_types[101]
-#define SWIGTYPE_p_svn_config_t swig_types[102]
-#define SWIGTYPE_p_svn_delta_editor_t swig_types[103]
-#define SWIGTYPE_p_svn_depth_t swig_types[104]
-#define SWIGTYPE_p_svn_dirent_t swig_types[105]
-#define SWIGTYPE_p_svn_errno_t swig_types[106]
-#define SWIGTYPE_p_svn_error_t swig_types[107]
-#define SWIGTYPE_p_svn_io_dirent2_t swig_types[108]
-#define SWIGTYPE_p_svn_io_dirent_t swig_types[109]
-#define SWIGTYPE_p_svn_io_file_del_t swig_types[110]
-#define SWIGTYPE_p_svn_location_segment_t swig_types[111]
-#define SWIGTYPE_p_svn_lock_t swig_types[112]
-#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[113]
-#define SWIGTYPE_p_svn_log_changed_path_t swig_types[114]
-#define SWIGTYPE_p_svn_log_entry_t swig_types[115]
-#define SWIGTYPE_p_svn_merge_range_t swig_types[116]
-#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[117]
-#define SWIGTYPE_p_svn_node_kind_t swig_types[118]
-#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[119]
-#define SWIGTYPE_p_svn_opt_revision_t swig_types[120]
-#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[121]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[122]
-#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[123]
-#define SWIGTYPE_p_svn_prop_kind swig_types[124]
-#define SWIGTYPE_p_svn_ra_callbacks2_t swig_types[125]
-#define SWIGTYPE_p_svn_ra_callbacks_t swig_types[126]
-#define SWIGTYPE_p_svn_ra_plugin_t swig_types[127]
-#define SWIGTYPE_p_svn_ra_reporter2_t swig_types[128]
-#define SWIGTYPE_p_svn_ra_reporter3_t swig_types[129]
-#define SWIGTYPE_p_svn_ra_reporter_t swig_types[130]
-#define SWIGTYPE_p_svn_ra_session_t swig_types[131]
-#define SWIGTYPE_p_svn_stream_mark_t swig_types[132]
-#define SWIGTYPE_p_svn_stream_t swig_types[133]
-#define SWIGTYPE_p_svn_string_t swig_types[134]
-#define SWIGTYPE_p_svn_stringbuf_t swig_types[135]
-#define SWIGTYPE_p_svn_tristate_t swig_types[136]
-#define SWIGTYPE_p_svn_txdelta_op_t swig_types[137]
-#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[138]
-#define SWIGTYPE_p_svn_txdelta_window_t swig_types[139]
-#define SWIGTYPE_p_svn_version_checklist_t swig_types[140]
-#define SWIGTYPE_p_svn_version_t swig_types[141]
-#define SWIGTYPE_p_svn_wc_adm_access_t swig_types[142]
-#define SWIGTYPE_p_svn_wc_committed_queue_t swig_types[143]
-#define SWIGTYPE_p_svn_wc_conflict_action_t swig_types[144]
-#define SWIGTYPE_p_svn_wc_conflict_choice_t swig_types[145]
-#define SWIGTYPE_p_svn_wc_conflict_description2_t swig_types[146]
-#define SWIGTYPE_p_svn_wc_conflict_description_t swig_types[147]
-#define SWIGTYPE_p_svn_wc_conflict_kind_t swig_types[148]
-#define SWIGTYPE_p_svn_wc_conflict_reason_t swig_types[149]
-#define SWIGTYPE_p_svn_wc_conflict_result_t swig_types[150]
-#define SWIGTYPE_p_svn_wc_conflict_version_t swig_types[151]
-#define SWIGTYPE_p_svn_wc_context_t swig_types[152]
-#define SWIGTYPE_p_svn_wc_diff_callbacks2_t swig_types[153]
-#define SWIGTYPE_p_svn_wc_diff_callbacks3_t swig_types[154]
-#define SWIGTYPE_p_svn_wc_diff_callbacks4_t swig_types[155]
-#define SWIGTYPE_p_svn_wc_diff_callbacks_t swig_types[156]
-#define SWIGTYPE_p_svn_wc_entry_callbacks2_t swig_types[157]
-#define SWIGTYPE_p_svn_wc_entry_callbacks_t swig_types[158]
-#define SWIGTYPE_p_svn_wc_entry_t swig_types[159]
-#define SWIGTYPE_p_svn_wc_external_item2_t swig_types[160]
-#define SWIGTYPE_p_svn_wc_external_item_t swig_types[161]
-#define SWIGTYPE_p_svn_wc_info_t swig_types[162]
-#define SWIGTYPE_p_svn_wc_merge_outcome_t swig_types[163]
-#define SWIGTYPE_p_svn_wc_notify_action_t swig_types[164]
-#define SWIGTYPE_p_svn_wc_notify_lock_state_t swig_types[165]
-#define SWIGTYPE_p_svn_wc_notify_state_t swig_types[166]
-#define SWIGTYPE_p_svn_wc_notify_t swig_types[167]
-#define SWIGTYPE_p_svn_wc_operation_t swig_types[168]
-#define SWIGTYPE_p_svn_wc_revision_status_t swig_types[169]
-#define SWIGTYPE_p_svn_wc_schedule_t swig_types[170]
-#define SWIGTYPE_p_svn_wc_status2_t swig_types[171]
-#define SWIGTYPE_p_svn_wc_status3_t swig_types[172]
-#define SWIGTYPE_p_svn_wc_status_t swig_types[173]
-#define SWIGTYPE_p_svn_wc_traversal_info_t swig_types[174]
-#define SWIGTYPE_p_unsigned_char swig_types[175]
-#define SWIGTYPE_p_unsigned_long swig_types[176]
-#define SWIGTYPE_p_void swig_types[177]
-static swig_type_info *swig_types[179];
-static swig_module_info swig_module = {swig_types, 178, 0, 0, 0, 0};
+#define SWIGTYPE_p_svn_checksum_ctx_t swig_types[100]
+#define SWIGTYPE_p_svn_checksum_kind_t swig_types[101]
+#define SWIGTYPE_p_svn_checksum_t swig_types[102]
+#define SWIGTYPE_p_svn_commit_info_t swig_types[103]
+#define SWIGTYPE_p_svn_config_t swig_types[104]
+#define SWIGTYPE_p_svn_delta_editor_t swig_types[105]
+#define SWIGTYPE_p_svn_depth_t swig_types[106]
+#define SWIGTYPE_p_svn_dirent_t swig_types[107]
+#define SWIGTYPE_p_svn_errno_t swig_types[108]
+#define SWIGTYPE_p_svn_error_t swig_types[109]
+#define SWIGTYPE_p_svn_io_dirent2_t swig_types[110]
+#define SWIGTYPE_p_svn_io_dirent_t swig_types[111]
+#define SWIGTYPE_p_svn_io_file_del_t swig_types[112]
+#define SWIGTYPE_p_svn_location_segment_t swig_types[113]
+#define SWIGTYPE_p_svn_lock_t swig_types[114]
+#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[115]
+#define SWIGTYPE_p_svn_log_changed_path_t swig_types[116]
+#define SWIGTYPE_p_svn_log_entry_t swig_types[117]
+#define SWIGTYPE_p_svn_merge_range_t swig_types[118]
+#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[119]
+#define SWIGTYPE_p_svn_node_kind_t swig_types[120]
+#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[121]
+#define SWIGTYPE_p_svn_opt_revision_t swig_types[122]
+#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[123]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[124]
+#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[125]
+#define SWIGTYPE_p_svn_prop_inherited_item_t swig_types[126]
+#define SWIGTYPE_p_svn_prop_kind swig_types[127]
+#define SWIGTYPE_p_svn_ra_callbacks2_t swig_types[128]
+#define SWIGTYPE_p_svn_ra_callbacks_t swig_types[129]
+#define SWIGTYPE_p_svn_ra_plugin_t swig_types[130]
+#define SWIGTYPE_p_svn_ra_reporter2_t swig_types[131]
+#define SWIGTYPE_p_svn_ra_reporter3_t swig_types[132]
+#define SWIGTYPE_p_svn_ra_reporter_t swig_types[133]
+#define SWIGTYPE_p_svn_ra_session_t swig_types[134]
+#define SWIGTYPE_p_svn_stream_mark_t swig_types[135]
+#define SWIGTYPE_p_svn_stream_t swig_types[136]
+#define SWIGTYPE_p_svn_string_t swig_types[137]
+#define SWIGTYPE_p_svn_stringbuf_t swig_types[138]
+#define SWIGTYPE_p_svn_tristate_t swig_types[139]
+#define SWIGTYPE_p_svn_txdelta_op_t swig_types[140]
+#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[141]
+#define SWIGTYPE_p_svn_txdelta_window_t swig_types[142]
+#define SWIGTYPE_p_svn_version_checklist_t swig_types[143]
+#define SWIGTYPE_p_svn_version_ext_linked_lib_t swig_types[144]
+#define SWIGTYPE_p_svn_version_ext_loaded_lib_t swig_types[145]
+#define SWIGTYPE_p_svn_version_extended_t swig_types[146]
+#define SWIGTYPE_p_svn_version_t swig_types[147]
+#define SWIGTYPE_p_svn_wc_adm_access_t swig_types[148]
+#define SWIGTYPE_p_svn_wc_committed_queue_t swig_types[149]
+#define SWIGTYPE_p_svn_wc_conflict_action_t swig_types[150]
+#define SWIGTYPE_p_svn_wc_conflict_choice_t swig_types[151]
+#define SWIGTYPE_p_svn_wc_conflict_description2_t swig_types[152]
+#define SWIGTYPE_p_svn_wc_conflict_description_t swig_types[153]
+#define SWIGTYPE_p_svn_wc_conflict_kind_t swig_types[154]
+#define SWIGTYPE_p_svn_wc_conflict_reason_t swig_types[155]
+#define SWIGTYPE_p_svn_wc_conflict_result_t swig_types[156]
+#define SWIGTYPE_p_svn_wc_conflict_version_t swig_types[157]
+#define SWIGTYPE_p_svn_wc_context_t swig_types[158]
+#define SWIGTYPE_p_svn_wc_diff_callbacks2_t swig_types[159]
+#define SWIGTYPE_p_svn_wc_diff_callbacks3_t swig_types[160]
+#define SWIGTYPE_p_svn_wc_diff_callbacks4_t swig_types[161]
+#define SWIGTYPE_p_svn_wc_diff_callbacks_t swig_types[162]
+#define SWIGTYPE_p_svn_wc_entry_callbacks2_t swig_types[163]
+#define SWIGTYPE_p_svn_wc_entry_callbacks_t swig_types[164]
+#define SWIGTYPE_p_svn_wc_entry_t swig_types[165]
+#define SWIGTYPE_p_svn_wc_external_item2_t swig_types[166]
+#define SWIGTYPE_p_svn_wc_external_item_t swig_types[167]
+#define SWIGTYPE_p_svn_wc_info_t swig_types[168]
+#define SWIGTYPE_p_svn_wc_merge_outcome_t swig_types[169]
+#define SWIGTYPE_p_svn_wc_notify_action_t swig_types[170]
+#define SWIGTYPE_p_svn_wc_notify_lock_state_t swig_types[171]
+#define SWIGTYPE_p_svn_wc_notify_state_t swig_types[172]
+#define SWIGTYPE_p_svn_wc_notify_t swig_types[173]
+#define SWIGTYPE_p_svn_wc_operation_t swig_types[174]
+#define SWIGTYPE_p_svn_wc_revision_status_t swig_types[175]
+#define SWIGTYPE_p_svn_wc_schedule_t swig_types[176]
+#define SWIGTYPE_p_svn_wc_status2_t swig_types[177]
+#define SWIGTYPE_p_svn_wc_status3_t swig_types[178]
+#define SWIGTYPE_p_svn_wc_status_t swig_types[179]
+#define SWIGTYPE_p_svn_wc_traversal_info_t swig_types[180]
+#define SWIGTYPE_p_unsigned_char swig_types[181]
+#define SWIGTYPE_p_unsigned_long swig_types[182]
+#define SWIGTYPE_p_void swig_types[183]
+static swig_type_info *swig_types[185];
+static swig_module_info swig_module = {swig_types, 184, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@@ -3122,7 +3149,7 @@ static swig_module_info swig_module = {swig_types, 178, 0, 0, 0, 0};
#endif
#define SWIG_name "_wc"
-#define SWIGVERSION 0x020004
+#define SWIGVERSION 0x020009
#define SWIG_VERSION SWIGVERSION
@@ -3189,7 +3216,7 @@ static PyObject * _global_py_pool = NULL;
#include "svn_wc.h"
- #define SWIG_From_long PyInt_FromLong
+ #define SWIG_From_long PyLong_FromLong
SWIGINTERN int
@@ -3447,16 +3474,17 @@ SWIG_FromCharPtr(const char *cptr)
}
-SWIGINTERNINLINE PyObject *
-SWIG_From_int (int value)
-{
- return SWIG_From_long (value);
+SWIGINTERNINLINE PyObject*
+ SWIG_From_int (int value)
+{
+ return PyInt_FromLong((long) value);
}
SWIGINTERN int
SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val)
{
+#if PY_VERSION_HEX < 0x03000000
if (PyInt_Check(obj)) {
long v = PyInt_AsLong(obj);
if (v >= 0) {
@@ -3465,7 +3493,9 @@ SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val)
} else {
return SWIG_OverflowError;
}
- } else if (PyLong_Check(obj)) {
+ } else
+#endif
+ if (PyLong_Check(obj)) {
unsigned long v = PyLong_AsUnsignedLong(obj);
if (!PyErr_Occurred()) {
if (val) *val = v;
@@ -3518,7 +3548,7 @@ SWIGINTERNINLINE PyObject*
SWIG_From_unsigned_SS_long (unsigned long value)
{
return (value > LONG_MAX) ?
- PyLong_FromUnsignedLong(value) : PyInt_FromLong((long)(value));
+ PyLong_FromUnsignedLong(value) : PyLong_FromLong((long)(value));
}
@@ -5560,13 +5590,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_external_item2_t_target_dir_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_external_item2_t_target_dir_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_external_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_external_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5588,13 +5618,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_external_item2_t_target_dir_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_external_item2_t_target_dir_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_external_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_external_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5609,13 +5639,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_external_item2_t_url_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_external_item2_t_url_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_external_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_external_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5637,13 +5667,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_external_item2_t_url_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_external_item2_t_url_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_external_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_external_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5658,14 +5688,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_external_item2_t_revision_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_external_item2_t_revision_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_external_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_external_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5686,13 +5716,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_external_item2_t_revision_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_opt_revision_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_external_item2_t_revision_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_external_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_external_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5708,14 +5738,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_external_item2_t_peg_revision_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_external_item2_t_peg_revision_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_external_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_external_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5736,13 +5766,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_external_item2_t_peg_revision_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_opt_revision_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_external_item2_t_peg_revision_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_external_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_external_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5758,13 +5788,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_wc_external_item2_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_external_item2_t *result = 0 ;
+ struct svn_wc_external_item2_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_wc_external_item2_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_wc_external_item2_t *)calloc(1, sizeof(svn_wc_external_item2_t));
+ result = (struct svn_wc_external_item2_t *)calloc(1, sizeof(struct svn_wc_external_item2_t));
svn_swig_py_acquire_py_lock();
@@ -5779,12 +5809,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_wc_external_item2_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_wc_external_item2_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_external_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_external_item2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5811,6 +5841,67 @@ SWIGINTERN PyObject *svn_wc_external_item2_t_swigregister(PyObject *SWIGUNUSEDPA
return SWIG_Py_Void();
}
+SWIGINTERN PyObject *_wrap_svn_wc_external_item2_create(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_wc_external_item2_t **arg1 = (svn_wc_external_item2_t **) 0 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_wc_external_item2_t *temp1 ;
+ PyObject * obj0 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg2 = _global_pool;
+ arg1 = &temp1;
+ if (!PyArg_ParseTuple(args,(char *)"|O:svn_wc_external_item2_create",&obj0)) SWIG_fail;
+ if (obj0) {
+ /* Verify that the user supplied a valid pool */
+ if (obj0 != Py_None && obj0 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj0);
+ SWIG_arg_fail(svn_argnum_obj0);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_wc_external_item2_create(arg1,arg2);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_NewPointerObj(*arg1, SWIGTYPE_p_svn_wc_external_item2_t,
+ _global_py_pool, args))
+
+ ;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_wc_external_item_create(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_wc_external_item2_t **arg1 = (svn_wc_external_item2_t **) 0 ;
@@ -5925,13 +6016,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_external_item_t_target_dir_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_external_item_t *arg1 = (svn_wc_external_item_t *) 0 ;
+ struct svn_wc_external_item_t *arg1 = (struct svn_wc_external_item_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_external_item_t_target_dir_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_external_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_external_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5953,13 +6044,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_external_item_t_target_dir_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_external_item_t *arg1 = (svn_wc_external_item_t *) 0 ;
+ struct svn_wc_external_item_t *arg1 = (struct svn_wc_external_item_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_external_item_t_target_dir_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_external_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_external_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -5974,13 +6065,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_external_item_t_url_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_external_item_t *arg1 = (svn_wc_external_item_t *) 0 ;
+ struct svn_wc_external_item_t *arg1 = (struct svn_wc_external_item_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_external_item_t_url_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_external_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_external_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6002,13 +6093,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_external_item_t_url_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_external_item_t *arg1 = (svn_wc_external_item_t *) 0 ;
+ struct svn_wc_external_item_t *arg1 = (struct svn_wc_external_item_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_external_item_t_url_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_external_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_external_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6023,14 +6114,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_external_item_t_revision_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_external_item_t *arg1 = (svn_wc_external_item_t *) 0 ;
+ struct svn_wc_external_item_t *arg1 = (struct svn_wc_external_item_t *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_external_item_t_revision_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_external_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_external_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6051,13 +6142,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_external_item_t_revision_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_external_item_t *arg1 = (svn_wc_external_item_t *) 0 ;
+ struct svn_wc_external_item_t *arg1 = (struct svn_wc_external_item_t *) 0 ;
PyObject * obj0 = 0 ;
svn_opt_revision_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_external_item_t_revision_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_external_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_external_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6073,13 +6164,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_wc_external_item_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_external_item_t *result = 0 ;
+ struct svn_wc_external_item_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_wc_external_item_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_wc_external_item_t *)calloc(1, sizeof(svn_wc_external_item_t));
+ result = (struct svn_wc_external_item_t *)calloc(1, sizeof(struct svn_wc_external_item_t));
svn_swig_py_acquire_py_lock();
@@ -6094,12 +6185,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_wc_external_item_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_external_item_t *arg1 = (svn_wc_external_item_t *) 0 ;
+ struct svn_wc_external_item_t *arg1 = (struct svn_wc_external_item_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_wc_external_item_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_external_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_external_item_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_external_item_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6231,13 +6322,14 @@ SWIGINTERN PyObject *_wrap_svn_wc_parse_externals_description3(PyObject *SWIGUNU
resultobj = Py_None;
}
{
- /* FIXME: Missing argout typemap: svn_wc_parse_externals_description3 arg 1 (apr_array_header_t **) */
-
-
-
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_py_pointerlist_to_list(*arg1, SWIGTYPE_p_svn_wc_external_item2_t,
+ _global_py_pool))
- SWIG_exception(SWIG_ValueError, "svn_wc_parse_externals_description3 is not implemented yet");
+ ;
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
}
{
Py_XDECREF(_global_py_pool);
@@ -6297,13 +6389,14 @@ SWIGINTERN PyObject *_wrap_svn_wc_parse_externals_description2(PyObject *SWIGUNU
resultobj = Py_None;
}
{
- /* FIXME: Missing argout typemap: svn_wc_parse_externals_description2 arg 1 (apr_array_header_t **) */
-
-
-
+ resultobj = SWIG_Python_AppendOutput(resultobj, svn_swig_py_pointerlist_to_list(*arg1, SWIGTYPE_p_svn_wc_external_item2_t,
+ _global_py_pool))
- SWIG_exception(SWIG_ValueError, "svn_wc_parse_externals_description2 is not implemented yet");
+ ;
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
}
{
Py_XDECREF(_global_py_pool);
@@ -6385,13 +6478,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_path_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_notify_t_path_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6413,13 +6506,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_path_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_notify_t_path_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6434,14 +6527,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_action_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_wc_notify_action_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_notify_t_action_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6462,13 +6555,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_action_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_notify_action_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_notify_t_action_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6483,14 +6576,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_node_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_notify_t_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6511,13 +6604,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
PyObject * obj0 = 0 ;
svn_node_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_notify_t_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6532,13 +6625,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_mime_type_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_notify_t_mime_type_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6560,13 +6653,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_mime_type_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_notify_t_mime_type_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6581,14 +6674,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_lock_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_lock_t *arg2 = (svn_lock_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_notify_t_lock_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6609,13 +6702,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_lock_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
PyObject * obj0 = 0 ;
svn_lock_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_notify_t_lock_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6631,14 +6724,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_err_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_error_t *arg2 = (svn_error_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_notify_t_err_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6659,13 +6752,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_err_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_notify_t_err_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6690,14 +6783,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_content_state_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_wc_notify_state_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_notify_t_content_state_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6718,13 +6811,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_content_state_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_notify_state_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_notify_t_content_state_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6739,14 +6832,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_prop_state_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_wc_notify_state_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_notify_t_prop_state_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6767,13 +6860,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_prop_state_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_notify_state_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_notify_t_prop_state_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6788,14 +6881,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_lock_state_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_wc_notify_lock_state_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_notify_t_lock_state_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6816,13 +6909,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_lock_state_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_notify_lock_state_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_notify_t_lock_state_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6837,14 +6930,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_revision_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_notify_t_revision_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6865,13 +6958,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_revision_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_notify_t_revision_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6886,13 +6979,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_changelist_name_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_notify_t_changelist_name_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6914,13 +7007,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_changelist_name_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_notify_t_changelist_name_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6935,14 +7028,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_merge_range_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_merge_range_t *arg2 = (svn_merge_range_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_notify_t_merge_range_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6963,13 +7056,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_merge_range_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
PyObject * obj0 = 0 ;
svn_merge_range_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_notify_t_merge_range_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -6985,13 +7078,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_url_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_notify_t_url_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7013,13 +7106,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_url_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_notify_t_url_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7034,13 +7127,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_path_prefix_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_notify_t_path_prefix_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7062,13 +7155,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_path_prefix_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_notify_t_path_prefix_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7083,13 +7176,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_prop_name_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_notify_t_prop_name_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7111,13 +7204,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_prop_name_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_notify_t_prop_name_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7132,14 +7225,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_rev_props_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
apr_hash_t *arg2 = (apr_hash_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_notify_t_rev_props_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7160,13 +7253,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_rev_props_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
PyObject * obj0 = 0 ;
apr_hash_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_notify_t_rev_props_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7182,14 +7275,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_old_revision_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_notify_t_old_revision_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7210,13 +7303,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_old_revision_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_notify_t_old_revision_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7231,14 +7324,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_hunk_original_start_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_linenum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_notify_t_hunk_original_start_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7259,13 +7352,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_hunk_original_start_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
PyObject * obj0 = 0 ;
svn_linenum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_notify_t_hunk_original_start_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7280,14 +7373,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_hunk_original_length_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_linenum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_notify_t_hunk_original_length_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7308,13 +7401,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_hunk_original_length_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
PyObject * obj0 = 0 ;
svn_linenum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_notify_t_hunk_original_length_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7329,14 +7422,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_hunk_modified_start_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_linenum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_notify_t_hunk_modified_start_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7357,13 +7450,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_hunk_modified_start_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
PyObject * obj0 = 0 ;
svn_linenum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_notify_t_hunk_modified_start_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7378,14 +7471,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_hunk_modified_length_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_linenum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_notify_t_hunk_modified_length_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7406,13 +7499,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_hunk_modified_length_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
PyObject * obj0 = 0 ;
svn_linenum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_notify_t_hunk_modified_length_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7427,14 +7520,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_hunk_matched_line_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_linenum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_notify_t_hunk_matched_line_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7455,13 +7548,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_hunk_matched_line_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
PyObject * obj0 = 0 ;
svn_linenum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_notify_t_hunk_matched_line_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7476,14 +7569,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_hunk_fuzz_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_linenum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_notify_t_hunk_fuzz_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7504,13 +7597,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_notify_t_hunk_fuzz_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
PyObject * obj0 = 0 ;
svn_linenum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_notify_t_hunk_fuzz_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7525,13 +7618,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_wc_notify_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *result = 0 ;
+ struct svn_wc_notify_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_wc_notify_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_wc_notify_t *)calloc(1, sizeof(svn_wc_notify_t));
+ result = (struct svn_wc_notify_t *)calloc(1, sizeof(struct svn_wc_notify_t));
svn_swig_py_acquire_py_lock();
@@ -7546,12 +7639,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_wc_notify_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_wc_notify_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_notify_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7735,13 +7828,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_version_t_repos_url_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_version_t *arg1 = (svn_wc_conflict_version_t *) 0 ;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_conflict_version_t_repos_url_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_version_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_version_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_version_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_version_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7763,13 +7856,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_version_t_repos_url_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_version_t *arg1 = (svn_wc_conflict_version_t *) 0 ;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_version_t_repos_url_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_version_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_version_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_version_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_version_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7784,14 +7877,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_version_t_peg_rev_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_version_t *arg1 = (svn_wc_conflict_version_t *) 0 ;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_conflict_version_t_peg_rev_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_version_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_version_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_version_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_version_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7812,13 +7905,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_version_t_peg_rev_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_version_t *arg1 = (svn_wc_conflict_version_t *) 0 ;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_version_t_peg_rev_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_version_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_version_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_version_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_version_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7833,13 +7926,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_version_t_path_in_repos_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_version_t *arg1 = (svn_wc_conflict_version_t *) 0 ;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_conflict_version_t_path_in_repos_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_version_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_version_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_version_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_version_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7861,13 +7954,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_version_t_path_in_repos_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_version_t *arg1 = (svn_wc_conflict_version_t *) 0 ;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_version_t_path_in_repos_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_version_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_version_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_version_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_version_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7882,14 +7975,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_version_t_node_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_version_t *arg1 = (svn_wc_conflict_version_t *) 0 ;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
svn_node_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_conflict_version_t_node_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_version_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_version_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_version_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_version_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7910,13 +8003,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_version_t_node_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_version_t *arg1 = (svn_wc_conflict_version_t *) 0 ;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
PyObject * obj0 = 0 ;
svn_node_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_version_t_node_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_version_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_version_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_version_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_version_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7929,15 +8022,64 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_wc_conflict_version_t_repos_uuid_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_conflict_version_t_repos_uuid_set",&obj0,&arg2)) SWIG_fail;
+ {
+ arg1 = (struct svn_wc_conflict_version_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_version_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->repos_uuid) free((char *)arg1->repos_uuid);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->repos_uuid = copied;
+ }
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_wc_conflict_version_t_repos_uuid_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ char *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_version_t_repos_uuid_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_wc_conflict_version_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_version_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (char *) ((arg1)->repos_uuid);
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_new_svn_wc_conflict_version_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_version_t *result = 0 ;
+ struct svn_wc_conflict_version_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_wc_conflict_version_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_wc_conflict_version_t *)calloc(1, sizeof(svn_wc_conflict_version_t));
+ result = (struct svn_wc_conflict_version_t *)calloc(1, sizeof(struct svn_wc_conflict_version_t));
svn_swig_py_acquire_py_lock();
@@ -7952,12 +8094,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_wc_conflict_version_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_version_t *arg1 = (svn_wc_conflict_version_t *) 0 ;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_wc_conflict_version_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_version_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_version_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_version_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_version_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -7984,6 +8126,68 @@ SWIGINTERN PyObject *svn_wc_conflict_version_t_swigregister(PyObject *SWIGUNUSED
return SWIG_Py_Void();
}
+SWIGINTERN PyObject *_wrap_svn_wc_conflict_version_create2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ char *arg1 = (char *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_revnum_t arg4 ;
+ svn_node_kind_t arg5 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ PyObject * obj5 = 0 ;
+ svn_wc_conflict_version_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg6 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"sssOO|O:svn_wc_conflict_version_create2",&arg1,&arg2,&arg3,&obj3,&obj4,&obj5)) SWIG_fail;
+ {
+ arg4 = (svn_revnum_t)SWIG_As_long (obj3);
+ if (SWIG_arg_fail(svn_argnum_obj3)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg5 = (svn_node_kind_t)SWIG_As_long (obj4);
+ if (SWIG_arg_fail(svn_argnum_obj4)) {
+ SWIG_fail;
+ }
+ }
+ if (obj5) {
+ /* Verify that the user supplied a valid pool */
+ if (obj5 != Py_None && obj5 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj5);
+ SWIG_arg_fail(svn_argnum_obj5);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_wc_conflict_version_t *)svn_wc_conflict_version_create2((char const *)arg1,(char const *)arg2,(char const *)arg3,arg4,arg5,arg6);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ resultobj = svn_swig_NewPointerObj((void*)(result), SWIGTYPE_p_svn_wc_conflict_version_t,
+ _global_py_pool, args);
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_wc_conflict_version_create(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
char *arg1 = (char *) 0 ;
@@ -8098,13 +8302,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_local_abspath_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_conflict_description2_t_local_abspath_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8126,13 +8330,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_local_abspath_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description2_t_local_abspath_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8147,14 +8351,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_node_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
svn_node_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_conflict_description2_t_node_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8175,13 +8379,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_node_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_node_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description2_t_node_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8196,14 +8400,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
svn_wc_conflict_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_conflict_description2_t_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8224,13 +8428,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_conflict_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description2_t_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8245,13 +8449,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_property_name_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_conflict_description2_t_property_name_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8273,13 +8477,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_property_name_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description2_t_property_name_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8294,14 +8498,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_is_binary_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_conflict_description2_t_is_binary_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8322,13 +8526,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_is_binary_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description2_t_is_binary_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8343,13 +8547,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_mime_type_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_conflict_description2_t_mime_type_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8371,13 +8575,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_mime_type_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description2_t_mime_type_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8392,14 +8596,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_action_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
svn_wc_conflict_action_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_conflict_description2_t_action_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8420,13 +8624,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_action_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_conflict_action_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description2_t_action_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8441,14 +8645,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_reason_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
svn_wc_conflict_reason_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_conflict_description2_t_reason_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8469,13 +8673,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_reason_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_conflict_reason_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description2_t_reason_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8490,13 +8694,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_base_abspath_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_conflict_description2_t_base_abspath_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8518,13 +8722,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_base_abspath_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description2_t_base_abspath_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8539,13 +8743,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_their_abspath_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_conflict_description2_t_their_abspath_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8567,13 +8771,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_their_abspath_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description2_t_their_abspath_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8588,13 +8792,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_my_abspath_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_conflict_description2_t_my_abspath_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8616,13 +8820,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_my_abspath_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description2_t_my_abspath_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8637,13 +8841,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_merged_file_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_conflict_description2_t_merged_file_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8665,13 +8869,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_merged_file_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description2_t_merged_file_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8686,14 +8890,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_operation_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
svn_wc_operation_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_conflict_description2_t_operation_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8714,13 +8918,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_operation_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_operation_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description2_t_operation_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8735,14 +8939,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_src_left_version_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
svn_wc_conflict_version_t *arg2 = (svn_wc_conflict_version_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_conflict_description2_t_src_left_version_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8763,13 +8967,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_src_left_version_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_conflict_version_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description2_t_src_left_version_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8785,14 +8989,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_src_right_version_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
svn_wc_conflict_version_t *arg2 = (svn_wc_conflict_version_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_conflict_description2_t_src_right_version_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8813,13 +9017,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description2_t_src_right_version_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_conflict_version_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description2_t_src_right_version_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8835,13 +9039,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_wc_conflict_description2_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *result = 0 ;
+ struct svn_wc_conflict_description2_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_wc_conflict_description2_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_wc_conflict_description2_t *)calloc(1, sizeof(svn_wc_conflict_description2_t));
+ result = (struct svn_wc_conflict_description2_t *)calloc(1, sizeof(struct svn_wc_conflict_description2_t));
svn_swig_py_acquire_py_lock();
@@ -8856,12 +9060,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_wc_conflict_description2_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_wc_conflict_description2_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8890,13 +9094,13 @@ SWIGINTERN PyObject *svn_wc_conflict_description2_t_swigregister(PyObject *SWIGU
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_path_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_conflict_description_t_path_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8918,13 +9122,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_path_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description_t_path_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8939,14 +9143,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_node_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_node_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_conflict_description_t_node_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8967,13 +9171,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_node_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
PyObject * obj0 = 0 ;
svn_node_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description_t_node_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -8988,14 +9192,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_wc_conflict_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_conflict_description_t_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9016,13 +9220,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_conflict_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description_t_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9037,13 +9241,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_property_name_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_conflict_description_t_property_name_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9065,13 +9269,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_property_name_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description_t_property_name_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9086,14 +9290,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_is_binary_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_conflict_description_t_is_binary_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9114,13 +9318,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_is_binary_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description_t_is_binary_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9135,13 +9339,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_mime_type_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_conflict_description_t_mime_type_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9163,13 +9367,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_mime_type_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description_t_mime_type_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9184,14 +9388,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_access_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_wc_adm_access_t *arg2 = (svn_wc_adm_access_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_conflict_description_t_access_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9212,13 +9416,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_access_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_adm_access_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description_t_access_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9234,14 +9438,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_action_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_wc_conflict_action_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_conflict_description_t_action_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9262,13 +9466,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_action_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_conflict_action_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description_t_action_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9283,14 +9487,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_reason_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_wc_conflict_reason_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_conflict_description_t_reason_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9311,13 +9515,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_reason_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_conflict_reason_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description_t_reason_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9332,13 +9536,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_base_file_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_conflict_description_t_base_file_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9360,13 +9564,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_base_file_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description_t_base_file_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9381,13 +9585,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_their_file_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_conflict_description_t_their_file_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9409,13 +9613,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_their_file_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description_t_their_file_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9430,13 +9634,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_my_file_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_conflict_description_t_my_file_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9458,13 +9662,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_my_file_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description_t_my_file_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9479,13 +9683,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_merged_file_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_conflict_description_t_merged_file_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9507,13 +9711,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_merged_file_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description_t_merged_file_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9528,14 +9732,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_operation_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_wc_operation_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_conflict_description_t_operation_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9556,13 +9760,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_operation_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_operation_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description_t_operation_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9577,14 +9781,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_src_left_version_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_wc_conflict_version_t *arg2 = (svn_wc_conflict_version_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_conflict_description_t_src_left_version_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9605,13 +9809,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_src_left_version_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_conflict_version_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description_t_src_left_version_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9627,14 +9831,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_src_right_version_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_wc_conflict_version_t *arg2 = (svn_wc_conflict_version_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_conflict_description_t_src_right_version_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9655,13 +9859,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_description_t_src_right_version_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_conflict_version_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_description_t_src_right_version_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -9677,13 +9881,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_wc_conflict_description_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *result = 0 ;
+ struct svn_wc_conflict_description_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_wc_conflict_description_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_wc_conflict_description_t *)calloc(1, sizeof(svn_wc_conflict_description_t));
+ result = (struct svn_wc_conflict_description_t *)calloc(1, sizeof(struct svn_wc_conflict_description_t));
svn_swig_py_acquire_py_lock();
@@ -9698,12 +9902,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_wc_conflict_description_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_wc_conflict_description_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_description_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_description_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10153,14 +10357,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_result_t_choice_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_result_t *arg1 = (svn_wc_conflict_result_t *) 0 ;
+ struct svn_wc_conflict_result_t *arg1 = (struct svn_wc_conflict_result_t *) 0 ;
svn_wc_conflict_choice_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_conflict_result_t_choice_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_result_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_result_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_result_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_result_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10181,13 +10385,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_result_t_choice_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_result_t *arg1 = (svn_wc_conflict_result_t *) 0 ;
+ struct svn_wc_conflict_result_t *arg1 = (struct svn_wc_conflict_result_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_conflict_choice_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_result_t_choice_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_result_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_result_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_result_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_result_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10202,13 +10406,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_result_t_merged_file_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_result_t *arg1 = (svn_wc_conflict_result_t *) 0 ;
+ struct svn_wc_conflict_result_t *arg1 = (struct svn_wc_conflict_result_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_conflict_result_t_merged_file_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_result_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_result_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_result_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_result_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10230,13 +10434,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_result_t_merged_file_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_result_t *arg1 = (svn_wc_conflict_result_t *) 0 ;
+ struct svn_wc_conflict_result_t *arg1 = (struct svn_wc_conflict_result_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_result_t_merged_file_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_result_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_result_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_result_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_result_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10251,14 +10455,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_result_t_save_merged_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_result_t *arg1 = (svn_wc_conflict_result_t *) 0 ;
+ struct svn_wc_conflict_result_t *arg1 = (struct svn_wc_conflict_result_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_conflict_result_t_save_merged_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_result_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_result_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_result_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_result_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10279,13 +10483,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_conflict_result_t_save_merged_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_result_t *arg1 = (svn_wc_conflict_result_t *) 0 ;
+ struct svn_wc_conflict_result_t *arg1 = (struct svn_wc_conflict_result_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_conflict_result_t_save_merged_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_result_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_result_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_result_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_result_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10300,13 +10504,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_wc_conflict_result_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_result_t *result = 0 ;
+ struct svn_wc_conflict_result_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_wc_conflict_result_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_wc_conflict_result_t *)calloc(1, sizeof(svn_wc_conflict_result_t));
+ result = (struct svn_wc_conflict_result_t *)calloc(1, sizeof(struct svn_wc_conflict_result_t));
svn_swig_py_acquire_py_lock();
@@ -10321,12 +10525,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_wc_conflict_result_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_conflict_result_t *arg1 = (svn_wc_conflict_result_t *) 0 ;
+ struct svn_wc_conflict_result_t *arg1 = (struct svn_wc_conflict_result_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_wc_conflict_result_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_conflict_result_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_result_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_conflict_result_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_conflict_result_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10407,14 +10611,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks4_t_file_opened_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,void *,apr_pool_t *) = (svn_error_t *(*)(svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks4_t_file_opened_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10435,13 +10639,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks4_t_file_opened_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks4_t_file_opened_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10456,14 +10660,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks4_t_file_changed_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks4_t_file_changed_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10484,13 +10688,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks4_t_file_changed_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks4_t_file_changed_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10505,14 +10709,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks4_t_file_added_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,char const *,svn_revnum_t,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,char const *,svn_revnum_t,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks4_t_file_added_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10533,13 +10737,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks4_t_file_added_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,char const *,svn_revnum_t,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks4_t_file_added_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10554,14 +10758,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks4_t_file_deleted_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks4_t_file_deleted_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10582,13 +10786,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks4_t_file_deleted_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks4_t_file_deleted_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10603,14 +10807,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks4_t_dir_deleted_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *,apr_pool_t *) = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks4_t_dir_deleted_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10631,13 +10835,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks4_t_dir_deleted_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks4_t_dir_deleted_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10652,14 +10856,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks4_t_dir_opened_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_boolean_t *,svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,void *,apr_pool_t *) = (svn_error_t *(*)(svn_boolean_t *,svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks4_t_dir_opened_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10680,13 +10884,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks4_t_dir_opened_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_boolean_t *,svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks4_t_dir_opened_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10701,14 +10905,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks4_t_dir_added_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_notify_state_t *,svn_boolean_t *,svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,char const *,svn_revnum_t,void *,apr_pool_t *) = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,char const *,svn_revnum_t,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks4_t_dir_added_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10729,13 +10933,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks4_t_dir_added_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_notify_state_t *,svn_boolean_t *,svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,char const *,svn_revnum_t,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks4_t_dir_added_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10750,14 +10954,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks4_t_dir_props_changed_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_boolean_t,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_boolean_t,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks4_t_dir_props_changed_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10778,13 +10982,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks4_t_dir_props_changed_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_boolean_t,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks4_t_dir_props_changed_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10799,14 +11003,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks4_t_dir_closed_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_boolean_t,void *,apr_pool_t *) = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_boolean_t,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks4_t_dir_closed_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10827,13 +11031,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks4_t_dir_closed_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_boolean_t,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks4_t_dir_closed_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10848,13 +11052,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_wc_diff_callbacks4_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks4_t *result = 0 ;
+ struct svn_wc_diff_callbacks4_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_wc_diff_callbacks4_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_wc_diff_callbacks4_t *)calloc(1, sizeof(svn_wc_diff_callbacks4_t));
+ result = (struct svn_wc_diff_callbacks4_t *)calloc(1, sizeof(struct svn_wc_diff_callbacks4_t));
svn_swig_py_acquire_py_lock();
@@ -10869,12 +11073,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_wc_diff_callbacks4_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_wc_diff_callbacks4_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks4_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10903,14 +11107,14 @@ SWIGINTERN PyObject *svn_wc_diff_callbacks4_t_swigregister(PyObject *SWIGUNUSEDP
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks3_t_file_changed_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks3_t_file_changed_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10931,13 +11135,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks3_t_file_changed_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks3_t_file_changed_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10952,14 +11156,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks3_t_file_added_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks3_t_file_added_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -10980,13 +11184,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks3_t_file_added_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks3_t_file_added_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11001,14 +11205,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks3_t_file_deleted_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks3_t_file_deleted_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11029,13 +11233,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks3_t_file_deleted_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks3_t_file_deleted_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11050,14 +11254,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks3_t_dir_added_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_revnum_t,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_revnum_t,void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks3_t_dir_added_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11078,13 +11282,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks3_t_dir_added_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_revnum_t,void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks3_t_dir_added_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11099,14 +11303,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks3_t_dir_deleted_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks3_t_dir_deleted_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11127,13 +11331,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks3_t_dir_deleted_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks3_t_dir_deleted_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11148,14 +11352,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks3_t_dir_props_changed_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks3_t_dir_props_changed_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11176,13 +11380,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks3_t_dir_props_changed_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks3_t_dir_props_changed_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11197,14 +11401,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks3_t_dir_opened_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_boolean_t *,char const *,svn_revnum_t,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_boolean_t *,char const *,svn_revnum_t,void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks3_t_dir_opened_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11225,13 +11429,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks3_t_dir_opened_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_boolean_t *,char const *,svn_revnum_t,void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks3_t_dir_opened_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11246,14 +11450,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks3_t_dir_closed_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks3_t_dir_closed_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11274,13 +11478,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks3_t_dir_closed_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks3_t_dir_closed_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11295,13 +11499,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_wc_diff_callbacks3_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks3_t *result = 0 ;
+ struct svn_wc_diff_callbacks3_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_wc_diff_callbacks3_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_wc_diff_callbacks3_t *)calloc(1, sizeof(svn_wc_diff_callbacks3_t));
+ result = (struct svn_wc_diff_callbacks3_t *)calloc(1, sizeof(struct svn_wc_diff_callbacks3_t));
svn_swig_py_acquire_py_lock();
@@ -11316,12 +11520,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_wc_diff_callbacks3_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_wc_diff_callbacks3_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11350,14 +11554,14 @@ SWIGINTERN PyObject *svn_wc_diff_callbacks3_t_swigregister(PyObject *SWIGUNUSEDP
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks2_t_file_changed_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks2_t_file_changed_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11378,13 +11582,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks2_t_file_changed_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks2_t_file_changed_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11399,14 +11603,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks2_t_file_added_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks2_t_file_added_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11427,13 +11631,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks2_t_file_added_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks2_t_file_added_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11448,14 +11652,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks2_t_file_deleted_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks2_t_file_deleted_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11476,13 +11680,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks2_t_file_deleted_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks2_t_file_deleted_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11497,14 +11701,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks2_t_dir_added_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,svn_revnum_t,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,svn_revnum_t,void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks2_t_dir_added_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11525,13 +11729,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks2_t_dir_added_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,svn_revnum_t,void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks2_t_dir_added_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11546,14 +11750,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks2_t_dir_deleted_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks2_t_dir_deleted_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11574,13 +11778,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks2_t_dir_deleted_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks2_t_dir_deleted_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11595,14 +11799,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks2_t_dir_props_changed_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks2_t_dir_props_changed_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11623,13 +11827,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks2_t_dir_props_changed_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks2_t_dir_props_changed_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11644,13 +11848,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_wc_diff_callbacks2_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks2_t *result = 0 ;
+ struct svn_wc_diff_callbacks2_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_wc_diff_callbacks2_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_wc_diff_callbacks2_t *)calloc(1, sizeof(svn_wc_diff_callbacks2_t));
+ result = (struct svn_wc_diff_callbacks2_t *)calloc(1, sizeof(struct svn_wc_diff_callbacks2_t));
svn_swig_py_acquire_py_lock();
@@ -11665,12 +11869,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_wc_diff_callbacks2_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_wc_diff_callbacks2_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11699,14 +11903,14 @@ SWIGINTERN PyObject *svn_wc_diff_callbacks2_t_swigregister(PyObject *SWIGUNUSEDP
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks_t_file_changed_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks_t_file_changed_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11727,13 +11931,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks_t_file_changed_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks_t_file_changed_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11748,14 +11952,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks_t_file_added_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks_t_file_added_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11776,13 +11980,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks_t_file_added_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks_t_file_added_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11797,14 +12001,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks_t_file_deleted_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,char const *,char const *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,char const *,char const *,void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks_t_file_deleted_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11825,13 +12029,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks_t_file_deleted_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,char const *,char const *,void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks_t_file_deleted_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11846,14 +12050,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks_t_dir_added_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,svn_revnum_t,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,svn_revnum_t,void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks_t_dir_added_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11874,13 +12078,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks_t_dir_added_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,svn_revnum_t,void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks_t_dir_added_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11895,14 +12099,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks_t_dir_deleted_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks_t_dir_deleted_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11923,13 +12127,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks_t_dir_deleted_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks_t_dir_deleted_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11944,14 +12148,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks_t_props_changed_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_diff_callbacks_t_props_changed_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11972,13 +12176,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_diff_callbacks_t_props_changed_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_diff_callbacks_t_props_changed_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -11993,13 +12197,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_wc_diff_callbacks_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks_t *result = 0 ;
+ struct svn_wc_diff_callbacks_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_wc_diff_callbacks_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_wc_diff_callbacks_t *)calloc(1, sizeof(svn_wc_diff_callbacks_t));
+ result = (struct svn_wc_diff_callbacks_t *)calloc(1, sizeof(struct svn_wc_diff_callbacks_t));
svn_swig_py_acquire_py_lock();
@@ -12014,12 +12218,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_wc_diff_callbacks_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_wc_diff_callbacks_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_diff_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_diff_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_diff_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12553,13 +12757,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_name_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_entry_t_name_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12581,13 +12785,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_name_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_name_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12602,14 +12806,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_revision_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_entry_t_revision_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12630,13 +12834,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_revision_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_revision_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12651,13 +12855,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_url_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_entry_t_url_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12679,13 +12883,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_url_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_url_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12700,13 +12904,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_repos_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Oz:svn_wc_entry_t_repos_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12728,13 +12932,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_repos_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_repos_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12749,13 +12953,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_uuid_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Oz:svn_wc_entry_t_uuid_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12777,13 +12981,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_uuid_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_uuid_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12798,14 +13002,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_node_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_entry_t_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12826,13 +13030,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
svn_node_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12847,14 +13051,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_schedule_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_wc_schedule_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_entry_t_schedule_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12875,13 +13079,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_schedule_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_schedule_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_schedule_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12896,14 +13100,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_copied_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_entry_t_copied_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12924,13 +13128,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_copied_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_copied_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12945,14 +13149,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_deleted_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_entry_t_deleted_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12973,13 +13177,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_deleted_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_deleted_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -12994,14 +13198,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_absent_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_entry_t_absent_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13022,13 +13226,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_absent_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_absent_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13043,14 +13247,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_incomplete_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_entry_t_incomplete_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13071,13 +13275,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_incomplete_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_incomplete_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13092,13 +13296,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_copyfrom_url_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Oz:svn_wc_entry_t_copyfrom_url_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13120,13 +13324,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_copyfrom_url_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_copyfrom_url_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13141,14 +13345,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_copyfrom_rev_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_entry_t_copyfrom_rev_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13169,13 +13373,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_copyfrom_rev_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_copyfrom_rev_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13190,13 +13394,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_conflict_old_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_entry_t_conflict_old_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13218,13 +13422,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_conflict_old_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_conflict_old_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13239,13 +13443,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_conflict_new_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_entry_t_conflict_new_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13267,13 +13471,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_conflict_new_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_conflict_new_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13288,13 +13492,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_conflict_wrk_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_entry_t_conflict_wrk_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13316,13 +13520,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_conflict_wrk_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_conflict_wrk_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13337,13 +13541,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_prejfile_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_entry_t_prejfile_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13365,13 +13569,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_prejfile_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_prejfile_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13386,14 +13590,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_text_time_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
apr_time_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_entry_t_text_time_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13409,13 +13613,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_text_time_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
apr_time_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_text_time_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13430,14 +13634,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_prop_time_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
apr_time_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_entry_t_prop_time_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13453,13 +13657,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_prop_time_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
apr_time_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_prop_time_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13474,13 +13678,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_checksum_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_entry_t_checksum_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13502,13 +13706,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_checksum_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_checksum_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13523,14 +13727,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_cmt_rev_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_entry_t_cmt_rev_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13551,13 +13755,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_cmt_rev_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_cmt_rev_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13572,14 +13776,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_cmt_date_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
apr_time_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_entry_t_cmt_date_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13595,13 +13799,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_cmt_date_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
apr_time_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_cmt_date_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13616,13 +13820,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_cmt_author_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_entry_t_cmt_author_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13644,13 +13848,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_cmt_author_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_cmt_author_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13665,13 +13869,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_lock_token_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Oz:svn_wc_entry_t_lock_token_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13693,13 +13897,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_lock_token_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_lock_token_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13714,13 +13918,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_lock_owner_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_entry_t_lock_owner_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13742,13 +13946,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_lock_owner_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_lock_owner_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13763,13 +13967,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_lock_comment_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_entry_t_lock_comment_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13791,13 +13995,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_lock_comment_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_lock_comment_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13812,14 +14016,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_lock_creation_date_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
apr_time_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_entry_t_lock_creation_date_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13835,13 +14039,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_lock_creation_date_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
apr_time_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_lock_creation_date_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13856,14 +14060,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_has_props_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_entry_t_has_props_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13884,13 +14088,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_has_props_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_has_props_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13905,14 +14109,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_has_prop_mods_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_entry_t_has_prop_mods_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13933,13 +14137,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_has_prop_mods_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_has_prop_mods_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13954,13 +14158,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_cachable_props_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_entry_t_cachable_props_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -13982,13 +14186,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_cachable_props_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_cachable_props_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14003,13 +14207,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_present_props_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_entry_t_present_props_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14031,13 +14235,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_present_props_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_present_props_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14052,13 +14256,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_changelist_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_entry_t_changelist_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14080,13 +14284,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_changelist_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_changelist_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14101,14 +14305,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_working_size_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
apr_off_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_entry_t_working_size_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14124,13 +14328,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_working_size_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
apr_off_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_working_size_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14145,14 +14349,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_keep_local_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_entry_t_keep_local_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14173,13 +14377,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_keep_local_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_keep_local_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14194,14 +14398,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_depth_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_depth_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_entry_t_depth_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14222,13 +14426,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_depth_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
svn_depth_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_depth_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14243,13 +14447,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_tree_conflict_data_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_entry_t_tree_conflict_data_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14271,13 +14475,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_tree_conflict_data_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_tree_conflict_data_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14292,13 +14496,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_file_external_path_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_entry_t_file_external_path_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14320,13 +14524,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_file_external_path_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_file_external_path_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14341,14 +14545,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_file_external_peg_rev_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_entry_t_file_external_peg_rev_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14369,13 +14573,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_file_external_peg_rev_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
svn_opt_revision_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_file_external_peg_rev_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14391,14 +14595,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_file_external_rev_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_entry_t_file_external_rev_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14419,13 +14623,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_t_file_external_rev_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
svn_opt_revision_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_t_file_external_rev_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14441,13 +14645,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_wc_entry_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *result = 0 ;
+ struct svn_wc_entry_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_wc_entry_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_wc_entry_t *)calloc(1, sizeof(svn_wc_entry_t));
+ result = (struct svn_wc_entry_t *)calloc(1, sizeof(struct svn_wc_entry_t));
svn_swig_py_acquire_py_lock();
@@ -14462,12 +14666,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_wc_entry_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_wc_entry_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14705,14 +14909,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_info_t_schedule_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
svn_wc_schedule_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_info_t_schedule_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14733,13 +14937,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_info_t_schedule_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_schedule_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_info_t_schedule_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14754,13 +14958,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_info_t_copyfrom_url_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Oz:svn_wc_info_t_copyfrom_url_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14782,13 +14986,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_info_t_copyfrom_url_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_info_t_copyfrom_url_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14803,14 +15007,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_info_t_copyfrom_rev_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_info_t_copyfrom_rev_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14831,13 +15035,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_info_t_copyfrom_rev_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_info_t_copyfrom_rev_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14852,14 +15056,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_info_t_checksum_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
svn_checksum_t *arg2 = (svn_checksum_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_info_t_checksum_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14880,13 +15084,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_info_t_checksum_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
PyObject * obj0 = 0 ;
svn_checksum_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_info_t_checksum_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14902,13 +15106,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_info_t_changelist_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_info_t_changelist_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14930,13 +15134,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_info_t_changelist_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_info_t_changelist_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14951,14 +15155,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_info_t_depth_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
svn_depth_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_info_t_depth_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -14979,13 +15183,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_info_t_depth_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
PyObject * obj0 = 0 ;
svn_depth_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_info_t_depth_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -15000,14 +15204,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_info_t_recorded_size_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
svn_filesize_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_info_t_recorded_size_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -15023,13 +15227,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_info_t_recorded_size_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
PyObject * obj0 = 0 ;
svn_filesize_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_info_t_recorded_size_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -15044,14 +15248,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_info_t_recorded_time_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
apr_time_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_info_t_recorded_time_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -15067,13 +15271,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_info_t_recorded_time_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
PyObject * obj0 = 0 ;
apr_time_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_info_t_recorded_time_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -15088,14 +15292,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_info_t_conflicts_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_info_t_conflicts_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -15116,13 +15320,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_info_t_conflicts_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
PyObject * obj0 = 0 ;
apr_array_header_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_info_t_conflicts_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -15138,13 +15342,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_info_t_wcroot_abspath_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_info_t_wcroot_abspath_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -15166,13 +15370,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_info_t_wcroot_abspath_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_info_t_wcroot_abspath_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -15185,15 +15389,113 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_wc_info_t_moved_from_abspath_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_info_t_moved_from_abspath_set",&obj0,&arg2)) SWIG_fail;
+ {
+ arg1 = (struct svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->moved_from_abspath) free((char *)arg1->moved_from_abspath);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->moved_from_abspath = copied;
+ }
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_wc_info_t_moved_from_abspath_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ char *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_info_t_moved_from_abspath_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (char *) ((arg1)->moved_from_abspath);
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_wc_info_t_moved_to_abspath_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_info_t_moved_to_abspath_set",&obj0,&arg2)) SWIG_fail;
+ {
+ arg1 = (struct svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->moved_to_abspath) free((char *)arg1->moved_to_abspath);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->moved_to_abspath = copied;
+ }
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_wc_info_t_moved_to_abspath_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ char *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_info_t_moved_to_abspath_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (char *) ((arg1)->moved_to_abspath);
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_new_svn_wc_info_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_info_t *result = 0 ;
+ struct svn_wc_info_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_wc_info_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_wc_info_t *)calloc(1, sizeof(svn_wc_info_t));
+ result = (struct svn_wc_info_t *)calloc(1, sizeof(struct svn_wc_info_t));
svn_swig_py_acquire_py_lock();
@@ -15208,12 +15510,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_wc_info_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_wc_info_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_info_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_info_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -15643,14 +15945,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_callbacks2_t_found_entry_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_callbacks2_t *arg1 = (svn_wc_entry_callbacks2_t *) 0 ;
+ struct svn_wc_entry_callbacks2_t *arg1 = (struct svn_wc_entry_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(char const *,svn_wc_entry_t const *,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,svn_wc_entry_t const *,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_entry_callbacks2_t_found_entry_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_entry_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -15671,13 +15973,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_callbacks2_t_found_entry_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_callbacks2_t *arg1 = (svn_wc_entry_callbacks2_t *) 0 ;
+ struct svn_wc_entry_callbacks2_t *arg1 = (struct svn_wc_entry_callbacks2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(char const *,svn_wc_entry_t const *,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_callbacks2_t_found_entry_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -15692,14 +15994,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_callbacks2_t_handle_error_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_callbacks2_t *arg1 = (svn_wc_entry_callbacks2_t *) 0 ;
+ struct svn_wc_entry_callbacks2_t *arg1 = (struct svn_wc_entry_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(char const *,svn_error_t *,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,svn_error_t *,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_entry_callbacks2_t_handle_error_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_entry_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -15720,13 +16022,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_callbacks2_t_handle_error_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_callbacks2_t *arg1 = (svn_wc_entry_callbacks2_t *) 0 ;
+ struct svn_wc_entry_callbacks2_t *arg1 = (struct svn_wc_entry_callbacks2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(char const *,svn_error_t *,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_callbacks2_t_handle_error_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -15741,13 +16043,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_wc_entry_callbacks2_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_callbacks2_t *result = 0 ;
+ struct svn_wc_entry_callbacks2_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_wc_entry_callbacks2_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_wc_entry_callbacks2_t *)calloc(1, sizeof(svn_wc_entry_callbacks2_t));
+ result = (struct svn_wc_entry_callbacks2_t *)calloc(1, sizeof(struct svn_wc_entry_callbacks2_t));
svn_swig_py_acquire_py_lock();
@@ -15762,12 +16064,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_wc_entry_callbacks2_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_callbacks2_t *arg1 = (svn_wc_entry_callbacks2_t *) 0 ;
+ struct svn_wc_entry_callbacks2_t *arg1 = (struct svn_wc_entry_callbacks2_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_wc_entry_callbacks2_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_callbacks2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_callbacks2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_callbacks2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -15796,14 +16098,14 @@ SWIGINTERN PyObject *svn_wc_entry_callbacks2_t_swigregister(PyObject *SWIGUNUSED
SWIGINTERN PyObject *_wrap_svn_wc_entry_callbacks_t_found_entry_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_callbacks_t *arg1 = (svn_wc_entry_callbacks_t *) 0 ;
+ struct svn_wc_entry_callbacks_t *arg1 = (struct svn_wc_entry_callbacks_t *) 0 ;
svn_error_t *(*arg2)(char const *,svn_wc_entry_t const *,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,svn_wc_entry_t const *,void *,apr_pool_t *)) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_entry_callbacks_t_found_entry_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_entry_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -15824,13 +16126,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_entry_callbacks_t_found_entry_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_callbacks_t *arg1 = (svn_wc_entry_callbacks_t *) 0 ;
+ struct svn_wc_entry_callbacks_t *arg1 = (struct svn_wc_entry_callbacks_t *) 0 ;
PyObject * obj0 = 0 ;
svn_error_t *(*result)(char const *,svn_wc_entry_t const *,void *,apr_pool_t *) = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_entry_callbacks_t_found_entry_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -15845,13 +16147,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_wc_entry_callbacks_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_callbacks_t *result = 0 ;
+ struct svn_wc_entry_callbacks_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_wc_entry_callbacks_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_wc_entry_callbacks_t *)calloc(1, sizeof(svn_wc_entry_callbacks_t));
+ result = (struct svn_wc_entry_callbacks_t *)calloc(1, sizeof(struct svn_wc_entry_callbacks_t));
svn_swig_py_acquire_py_lock();
@@ -15866,12 +16168,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_wc_entry_callbacks_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_entry_callbacks_t *arg1 = (svn_wc_entry_callbacks_t *) 0 ;
+ struct svn_wc_entry_callbacks_t *arg1 = (struct svn_wc_entry_callbacks_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_wc_entry_callbacks_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_entry_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_callbacks_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_entry_callbacks_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_entry_callbacks_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -16585,14 +16887,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_node_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status3_t_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -16613,13 +16915,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_node_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -16634,14 +16936,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_depth_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_depth_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status3_t_depth_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -16662,13 +16964,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_depth_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_depth_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_depth_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -16683,14 +16985,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_filesize_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_filesize_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status3_t_filesize_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -16706,13 +17008,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_filesize_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_filesize_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_filesize_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -16727,14 +17029,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_versioned_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status3_t_versioned_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -16755,13 +17057,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_versioned_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_versioned_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -16776,14 +17078,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_conflicted_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status3_t_conflicted_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -16804,13 +17106,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_conflicted_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_conflicted_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -16825,14 +17127,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_node_status_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
enum svn_wc_status_kind arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status3_t_node_status_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -16853,13 +17155,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_node_status_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
enum svn_wc_status_kind result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_node_status_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -16874,14 +17176,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_text_status_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
enum svn_wc_status_kind arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status3_t_text_status_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -16902,13 +17204,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_text_status_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
enum svn_wc_status_kind result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_text_status_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -16923,14 +17225,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_prop_status_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
enum svn_wc_status_kind arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status3_t_prop_status_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -16951,13 +17253,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_prop_status_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
enum svn_wc_status_kind result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_prop_status_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -16972,14 +17274,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_copied_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status3_t_copied_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17000,13 +17302,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_copied_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_copied_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17021,14 +17323,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_revision_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status3_t_revision_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17049,13 +17351,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_revision_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_revision_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17070,14 +17372,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_changed_rev_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status3_t_changed_rev_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17098,13 +17400,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_changed_rev_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_changed_rev_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17119,14 +17421,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_changed_date_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
apr_time_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status3_t_changed_date_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17142,13 +17444,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_changed_date_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
apr_time_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_changed_date_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17163,13 +17465,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_changed_author_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_status3_t_changed_author_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17191,13 +17493,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_changed_author_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_changed_author_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17212,13 +17514,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_repos_root_url_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_status3_t_repos_root_url_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17240,13 +17542,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_repos_root_url_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_repos_root_url_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17261,13 +17563,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_repos_uuid_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_status3_t_repos_uuid_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17289,13 +17591,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_repos_uuid_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_repos_uuid_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17310,13 +17612,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_repos_relpath_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_status3_t_repos_relpath_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17338,13 +17640,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_repos_relpath_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_repos_relpath_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17359,14 +17661,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_switched_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status3_t_switched_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17387,13 +17689,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_switched_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_switched_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17408,14 +17710,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_locked_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status3_t_locked_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17436,13 +17738,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_locked_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_locked_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17457,14 +17759,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_lock_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_lock_t *arg2 = (svn_lock_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status3_t_lock_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17485,13 +17787,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_lock_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_lock_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_lock_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17507,13 +17809,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_changelist_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_status3_t_changelist_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17535,13 +17837,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_changelist_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_changelist_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17556,14 +17858,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_ood_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_node_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status3_t_ood_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17584,13 +17886,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_ood_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_node_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_ood_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17605,14 +17907,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_repos_node_status_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
enum svn_wc_status_kind arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status3_t_repos_node_status_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17633,13 +17935,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_repos_node_status_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
enum svn_wc_status_kind result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_repos_node_status_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17654,14 +17956,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_repos_text_status_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
enum svn_wc_status_kind arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status3_t_repos_text_status_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17682,13 +17984,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_repos_text_status_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
enum svn_wc_status_kind result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_repos_text_status_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17703,14 +18005,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_repos_prop_status_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
enum svn_wc_status_kind arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status3_t_repos_prop_status_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17731,13 +18033,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_repos_prop_status_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
enum svn_wc_status_kind result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_repos_prop_status_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17752,14 +18054,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_repos_lock_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_lock_t *arg2 = (svn_lock_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status3_t_repos_lock_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17780,13 +18082,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_repos_lock_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_lock_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_repos_lock_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17802,14 +18104,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_ood_changed_rev_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status3_t_ood_changed_rev_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17830,13 +18132,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_ood_changed_rev_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_ood_changed_rev_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17851,14 +18153,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_ood_changed_date_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
apr_time_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status3_t_ood_changed_date_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17874,13 +18176,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_ood_changed_date_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
apr_time_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_ood_changed_date_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17895,13 +18197,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_ood_changed_author_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_status3_t_ood_changed_author_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17923,13 +18225,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status3_t_ood_changed_author_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_ood_changed_author_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17942,15 +18244,162 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_wc_status3_t_moved_from_abspath_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_status3_t_moved_from_abspath_set",&obj0,&arg2)) SWIG_fail;
+ {
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->moved_from_abspath) free((char *)arg1->moved_from_abspath);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->moved_from_abspath = copied;
+ }
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_wc_status3_t_moved_from_abspath_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ char *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_moved_from_abspath_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (char *) ((arg1)->moved_from_abspath);
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_wc_status3_t_moved_to_abspath_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ PyObject * obj0 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_status3_t_moved_to_abspath_set",&obj0,&arg2)) SWIG_fail;
+ {
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->moved_to_abspath) free((char *)arg1->moved_to_abspath);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->moved_to_abspath = copied;
+ }
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_wc_status3_t_moved_to_abspath_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ char *result = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_moved_to_abspath_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (char *) ((arg1)->moved_to_abspath);
+ resultobj = SWIG_FromCharPtr((const char *)result);
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_wc_status3_t_file_external_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
+ svn_boolean_t arg2 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status3_t_file_external_set",&obj0,&obj1)) SWIG_fail;
+ {
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg2 = (svn_boolean_t)SWIG_As_long (obj1);
+ if (SWIG_arg_fail(svn_argnum_obj1)) {
+ SWIG_fail;
+ }
+ }
+ if (arg1) (arg1)->file_external = arg2;
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_svn_wc_status3_t_file_external_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
+ PyObject * obj0 = 0 ;
+ svn_boolean_t result;
+
+ if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status3_t_file_external_get",&obj0)) SWIG_fail;
+ {
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ result = (svn_boolean_t) ((arg1)->file_external);
+ resultobj = SWIG_From_long((long)(result));
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_new_svn_wc_status3_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *result = 0 ;
+ struct svn_wc_status3_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_wc_status3_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_wc_status3_t *)calloc(1, sizeof(svn_wc_status3_t));
+ result = (struct svn_wc_status3_t *)calloc(1, sizeof(struct svn_wc_status3_t));
svn_swig_py_acquire_py_lock();
@@ -17965,12 +18414,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_wc_status3_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_wc_status3_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status3_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status3_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -17999,14 +18448,14 @@ SWIGINTERN PyObject *svn_wc_status3_t_swigregister(PyObject *SWIGUNUSEDPARM(self
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_entry_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_wc_entry_t *arg2 = (svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status2_t_entry_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18027,13 +18476,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_entry_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_entry_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status2_t_entry_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18049,14 +18498,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_text_status_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
enum svn_wc_status_kind arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status2_t_text_status_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18077,13 +18526,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_text_status_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
PyObject * obj0 = 0 ;
enum svn_wc_status_kind result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status2_t_text_status_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18098,14 +18547,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_prop_status_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
enum svn_wc_status_kind arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status2_t_prop_status_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18126,13 +18575,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_prop_status_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
PyObject * obj0 = 0 ;
enum svn_wc_status_kind result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status2_t_prop_status_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18147,14 +18596,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_locked_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status2_t_locked_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18175,13 +18624,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_locked_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status2_t_locked_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18196,14 +18645,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_copied_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status2_t_copied_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18224,13 +18673,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_copied_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status2_t_copied_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18245,14 +18694,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_switched_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status2_t_switched_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18273,13 +18722,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_switched_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status2_t_switched_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18294,14 +18743,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_repos_text_status_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
enum svn_wc_status_kind arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status2_t_repos_text_status_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18322,13 +18771,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_repos_text_status_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
PyObject * obj0 = 0 ;
enum svn_wc_status_kind result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status2_t_repos_text_status_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18343,14 +18792,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_repos_prop_status_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
enum svn_wc_status_kind arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status2_t_repos_prop_status_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18371,13 +18820,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_repos_prop_status_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
PyObject * obj0 = 0 ;
enum svn_wc_status_kind result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status2_t_repos_prop_status_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18392,14 +18841,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_repos_lock_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_lock_t *arg2 = (svn_lock_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status2_t_repos_lock_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18420,13 +18869,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_repos_lock_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_lock_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status2_t_repos_lock_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18442,13 +18891,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_url_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_status2_t_url_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18470,13 +18919,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_url_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status2_t_url_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18491,14 +18940,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_ood_last_cmt_rev_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status2_t_ood_last_cmt_rev_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18519,13 +18968,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_ood_last_cmt_rev_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status2_t_ood_last_cmt_rev_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18540,14 +18989,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_ood_last_cmt_date_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
apr_time_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status2_t_ood_last_cmt_date_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18563,13 +19012,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_ood_last_cmt_date_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
PyObject * obj0 = 0 ;
apr_time_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status2_t_ood_last_cmt_date_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18584,14 +19033,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_ood_kind_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_node_kind_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status2_t_ood_kind_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18612,13 +19061,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_ood_kind_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_node_kind_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status2_t_ood_kind_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18633,13 +19082,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_ood_last_cmt_author_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
char *arg2 = (char *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"Os:svn_wc_status2_t_ood_last_cmt_author_set",&obj0,&arg2)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18661,13 +19110,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_ood_last_cmt_author_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
PyObject * obj0 = 0 ;
char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status2_t_ood_last_cmt_author_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18682,14 +19131,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_tree_conflict_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_wc_conflict_description_t *arg2 = (svn_wc_conflict_description_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status2_t_tree_conflict_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18710,13 +19159,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_tree_conflict_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_conflict_description_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status2_t_tree_conflict_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18732,14 +19181,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_file_external_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status2_t_file_external_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18760,13 +19209,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_file_external_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status2_t_file_external_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18781,14 +19230,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_pristine_text_status_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
enum svn_wc_status_kind arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status2_t_pristine_text_status_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18809,13 +19258,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_pristine_text_status_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
PyObject * obj0 = 0 ;
enum svn_wc_status_kind result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status2_t_pristine_text_status_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18830,14 +19279,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_pristine_prop_status_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
enum svn_wc_status_kind arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status2_t_pristine_prop_status_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18858,13 +19307,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status2_t_pristine_prop_status_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
PyObject * obj0 = 0 ;
enum svn_wc_status_kind result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status2_t_pristine_prop_status_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18879,13 +19328,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_wc_status2_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *result = 0 ;
+ struct svn_wc_status2_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_wc_status2_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_wc_status2_t *)calloc(1, sizeof(svn_wc_status2_t));
+ result = (struct svn_wc_status2_t *)calloc(1, sizeof(struct svn_wc_status2_t));
svn_swig_py_acquire_py_lock();
@@ -18900,12 +19349,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_wc_status2_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_wc_status2_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status2_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status2_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18934,14 +19383,14 @@ SWIGINTERN PyObject *svn_wc_status2_t_swigregister(PyObject *SWIGUNUSEDPARM(self
SWIGINTERN PyObject *_wrap_svn_wc_status_t_entry_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
svn_wc_entry_t *arg2 = (svn_wc_entry_t *) 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status_t_entry_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18962,13 +19411,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status_t_entry_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
PyObject * obj0 = 0 ;
svn_wc_entry_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status_t_entry_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -18984,14 +19433,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status_t_text_status_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status_t_text_status_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -19012,13 +19461,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status_t_text_status_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
PyObject * obj0 = 0 ;
enum svn_wc_status_kind result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status_t_text_status_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -19033,14 +19482,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status_t_prop_status_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status_t_prop_status_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -19061,13 +19510,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status_t_prop_status_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
PyObject * obj0 = 0 ;
enum svn_wc_status_kind result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status_t_prop_status_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -19082,14 +19531,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status_t_locked_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status_t_locked_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -19110,13 +19559,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status_t_locked_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status_t_locked_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -19131,14 +19580,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status_t_copied_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status_t_copied_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -19159,13 +19608,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status_t_copied_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status_t_copied_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -19180,14 +19629,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status_t_switched_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status_t_switched_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -19208,13 +19657,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status_t_switched_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status_t_switched_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -19229,14 +19678,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status_t_repos_text_status_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status_t_repos_text_status_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -19257,13 +19706,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status_t_repos_text_status_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
PyObject * obj0 = 0 ;
enum svn_wc_status_kind result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status_t_repos_text_status_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -19278,14 +19727,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status_t_repos_prop_status_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_status_t_repos_prop_status_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -19306,13 +19755,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_status_t_repos_prop_status_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
PyObject * obj0 = 0 ;
enum svn_wc_status_kind result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_status_t_repos_prop_status_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -19327,13 +19776,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_wc_status_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status_t *result = 0 ;
+ struct svn_wc_status_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_wc_status_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_wc_status_t *)calloc(1, sizeof(svn_wc_status_t));
+ result = (struct svn_wc_status_t *)calloc(1, sizeof(struct svn_wc_status_t));
svn_swig_py_acquire_py_lock();
@@ -19348,12 +19797,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_wc_status_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_wc_status_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -21429,6 +21878,89 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_wc_add_from_disk2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_wc_context_t *arg1 = (svn_wc_context_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ apr_hash_t *arg3 = (apr_hash_t *) 0 ;
+ svn_wc_notify_func2_t arg4 = (svn_wc_notify_func2_t) 0 ;
+ void *arg5 = (void *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg6 = _global_pool;
+ if (!PyArg_ParseTuple(args,(char *)"OsOO|O:svn_wc_add_from_disk2",&obj0,&arg2,&obj2,&obj3,&obj4)) SWIG_fail;
+ {
+ arg1 = (svn_wc_context_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_context_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ if (_global_pool == NULL)
+ {
+ if (svn_swig_py_get_parent_pool(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ }
+
+ arg3 = svn_swig_py_prophash_from_dict(obj2, _global_pool);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg4 = svn_swig_py_notify_func2;
+ arg5 = obj3;
+ }
+ if (obj4) {
+ /* Verify that the user supplied a valid pool */
+ if (obj4 != Py_None && obj4 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj4);
+ SWIG_arg_fail(svn_argnum_obj4);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_wc_add_from_disk2(arg1,(char const *)arg2,(apr_hash_t const *)arg3,arg4,arg5,arg6);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_wc_add_from_disk(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_wc_context_t *arg1 = (svn_wc_context_t *) 0 ;
@@ -23098,7 +23630,7 @@ SWIGINTERN PyObject *_wrap_svn_wc_queue_committed3(PyObject *SWIGUNUSEDPARM(self
{
svn_swig_py_release_py_lock();
- result = (svn_error_t *)svn_wc_queue_committed3(arg1,arg2,(char const *)arg3,arg4,(apr_array_header_t const *)arg5,arg6,arg7,(svn_checksum_t const *)arg8,arg9);
+ result = (svn_error_t *)svn_wc_queue_committed3(arg1,arg2,(char const *)arg3,arg4,(apr_array_header_t const *)arg5,arg6,arg7,(struct svn_checksum_t const *)arg8,arg9);
svn_swig_py_acquire_py_lock();
@@ -23214,7 +23746,7 @@ SWIGINTERN PyObject *_wrap_svn_wc_queue_committed2(PyObject *SWIGUNUSEDPARM(self
{
svn_swig_py_release_py_lock();
- result = (svn_error_t *)svn_wc_queue_committed2(arg1,(char const *)arg2,arg3,arg4,(apr_array_header_t const *)arg5,arg6,arg7,(svn_checksum_t const *)arg8,arg9);
+ result = (svn_error_t *)svn_wc_queue_committed2(arg1,(char const *)arg2,arg3,arg4,(apr_array_header_t const *)arg5,arg6,arg7,(struct svn_checksum_t const *)arg8,arg9);
svn_swig_py_acquire_py_lock();
@@ -24573,6 +25105,97 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_wc_check_root(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_boolean_t *arg1 = (svn_boolean_t *) 0 ;
+ svn_boolean_t *arg2 = (svn_boolean_t *) 0 ;
+ svn_node_kind_t *arg3 = (svn_node_kind_t *) 0 ;
+ svn_wc_context_t *arg4 = (svn_wc_context_t *) 0 ;
+ char *arg5 = (char *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_boolean_t temp1 ;
+ int res1 = SWIG_TMPOBJ ;
+ svn_boolean_t temp2 ;
+ int res2 = SWIG_TMPOBJ ;
+ svn_node_kind_t temp3 ;
+ int res3 = SWIG_TMPOBJ ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj2 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg6 = _global_pool;
+ arg1 = &temp1;
+ arg2 = &temp2;
+ arg3 = &temp3;
+ if (!PyArg_ParseTuple(args,(char *)"Os|O:svn_wc_check_root",&obj0,&arg5,&obj2)) SWIG_fail;
+ {
+ arg4 = (svn_wc_context_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_context_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ if (obj2) {
+ /* Verify that the user supplied a valid pool */
+ if (obj2 != Py_None && obj2 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj2);
+ SWIG_arg_fail(svn_argnum_obj2);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_wc_check_root(arg1,arg2,arg3,arg4,(char const *)arg5,arg6);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ if (SWIG_IsTmpObj(res1)) {
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg1)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res1) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_int, new_flags));
+ }
+ if (SWIG_IsTmpObj(res2)) {
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags));
+ }
+ if (SWIG_IsTmpObj(res3)) {
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_long((*arg3)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_svn_node_kind_t, new_flags));
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_wc_is_wc_root2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_boolean_t *arg1 = (svn_boolean_t *) 0 ;
@@ -28874,6 +29497,166 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_wc_merge5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ enum svn_wc_merge_outcome_t *arg1 = (enum svn_wc_merge_outcome_t *) 0 ;
+ enum svn_wc_notify_state_t *arg2 = (enum svn_wc_notify_state_t *) 0 ;
+ svn_wc_context_t *arg3 = (svn_wc_context_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ char *arg5 = (char *) 0 ;
+ char *arg6 = (char *) 0 ;
+ char *arg7 = (char *) 0 ;
+ char *arg8 = (char *) 0 ;
+ char *arg9 = (char *) 0 ;
+ svn_wc_conflict_version_t *arg10 = (svn_wc_conflict_version_t *) 0 ;
+ svn_wc_conflict_version_t *arg11 = (svn_wc_conflict_version_t *) 0 ;
+ svn_boolean_t arg12 ;
+ char *arg13 = (char *) 0 ;
+ apr_array_header_t *arg14 = (apr_array_header_t *) 0 ;
+ apr_hash_t *arg15 = (apr_hash_t *) 0 ;
+ apr_array_header_t *arg16 = (apr_array_header_t *) 0 ;
+ svn_wc_conflict_resolver_func2_t arg17 = (svn_wc_conflict_resolver_func2_t) 0 ;
+ void *arg18 = (void *) 0 ;
+ svn_cancel_func_t arg19 = (svn_cancel_func_t) 0 ;
+ void *arg20 = (void *) 0 ;
+ apr_pool_t *arg21 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ enum svn_wc_merge_outcome_t temp1 ;
+ int res1 = SWIG_TMPOBJ ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj8 = 0 ;
+ PyObject * obj9 = 0 ;
+ PyObject * obj10 = 0 ;
+ PyObject * obj12 = 0 ;
+ PyObject * obj13 = 0 ;
+ PyObject * obj14 = 0 ;
+ PyObject * obj15 = 0 ;
+ PyObject * obj16 = 0 ;
+ PyObject * obj17 = 0 ;
+ PyObject * obj18 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg21 = _global_pool;
+ arg1 = &temp1;
+ if (!PyArg_ParseTuple(args,(char *)"OOssssssOOOzOOOOOO|O:svn_wc_merge5",&obj0,&obj1,&arg4,&arg5,&arg6,&arg7,&arg8,&arg9,&obj8,&obj9,&obj10,&arg13,&obj12,&obj13,&obj14,&obj15,&obj16,&obj17,&obj18)) SWIG_fail;
+ {
+ arg2 = (enum svn_wc_notify_state_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_notify_state_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg3 = (svn_wc_context_t *)svn_swig_MustGetPtr(obj1, SWIGTYPE_p_svn_wc_context_t, svn_argnum_obj1);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg10 = (svn_wc_conflict_version_t *)svn_swig_MustGetPtr(obj8, SWIGTYPE_p_svn_wc_conflict_version_t, svn_argnum_obj8);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg11 = (svn_wc_conflict_version_t *)svn_swig_MustGetPtr(obj9, SWIGTYPE_p_svn_wc_conflict_version_t, svn_argnum_obj9);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg12 = (svn_boolean_t)SWIG_As_long (obj10);
+ if (SWIG_arg_fail(svn_argnum_obj10)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg14 = (apr_array_header_t *)svn_swig_MustGetPtr(obj12, SWIGTYPE_p_apr_array_header_t, svn_argnum_obj12);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg15 = (apr_hash_t *)svn_swig_MustGetPtr(obj13, SWIGTYPE_p_apr_hash_t, svn_argnum_obj13);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg16 = (apr_array_header_t *)svn_swig_MustGetPtr(obj14, SWIGTYPE_p_apr_array_header_t, svn_argnum_obj14);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ svn_wc_conflict_resolver_func2_t * tmp =
+ svn_swig_MustGetPtr(obj15, SWIGTYPE_p_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description2_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t, svn_argnum_obj15);
+ if (tmp == NULL || PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ arg17 = *tmp;
+ }
+ {
+ if (obj16 == Py_None) {
+ arg18 = NULL;
+ } else if (SWIG_ConvertPtr(obj16, (void **) &arg18, 0, 0) == -1) {
+ arg18 = (void *) obj16;
+ PyErr_Clear();
+ }
+ }
+ {
+ arg19 = svn_swig_py_cancel_func;
+ arg20 = obj17; /* our function is the baton. */
+ }
+ if (obj18) {
+ /* Verify that the user supplied a valid pool */
+ if (obj18 != Py_None && obj18 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj18);
+ SWIG_arg_fail(svn_argnum_obj18);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_wc_merge5(arg1,arg2,arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,(char const *)arg7,(char const *)arg8,(char const *)arg9,(struct svn_wc_conflict_version_t const *)arg10,(struct svn_wc_conflict_version_t const *)arg11,arg12,(char const *)arg13,(apr_array_header_t const *)arg14,arg15,(apr_array_header_t const *)arg16,arg17,arg18,arg19,arg20,arg21);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ if (SWIG_IsTmpObj(res1)) {
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg1)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res1) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_svn_wc_merge_outcome_t, new_flags));
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_wc_merge4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
enum svn_wc_merge_outcome_t *arg1 = (enum svn_wc_merge_outcome_t *) 0 ;
@@ -31613,7 +32396,7 @@ SWIGINTERN PyObject *_wrap_svn_wc_transmit_text_deltas3(PyObject *SWIGUNUSEDPARM
{
svn_swig_py_release_py_lock();
- result = (svn_error_t *)svn_wc_transmit_text_deltas3((svn_checksum_t const **)arg1,(svn_checksum_t const **)arg2,arg3,(char const *)arg4,arg5,(struct svn_delta_editor_t const *)arg6,arg7,arg8,arg9);
+ result = (svn_error_t *)svn_wc_transmit_text_deltas3((struct svn_checksum_t const **)arg1,(struct svn_checksum_t const **)arg2,arg3,(char const *)arg4,arg5,(struct svn_delta_editor_t const *)arg6,arg7,arg8,arg9);
svn_swig_py_acquire_py_lock();
@@ -32631,14 +33414,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_revision_status_t_min_rev_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_revision_status_t_min_rev_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_revision_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_revision_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_revision_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_revision_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -32659,13 +33442,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_revision_status_t_min_rev_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_revision_status_t_min_rev_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_revision_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_revision_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_revision_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_revision_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -32680,14 +33463,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_revision_status_t_max_rev_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
svn_revnum_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_revision_status_t_max_rev_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_revision_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_revision_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_revision_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_revision_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -32708,13 +33491,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_revision_status_t_max_rev_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
PyObject * obj0 = 0 ;
svn_revnum_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_revision_status_t_max_rev_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_revision_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_revision_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_revision_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_revision_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -32729,14 +33512,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_revision_status_t_switched_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_revision_status_t_switched_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_revision_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_revision_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_revision_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_revision_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -32757,13 +33540,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_revision_status_t_switched_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_revision_status_t_switched_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_revision_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_revision_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_revision_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_revision_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -32778,14 +33561,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_revision_status_t_modified_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_revision_status_t_modified_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_revision_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_revision_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_revision_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_revision_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -32806,13 +33589,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_revision_status_t_modified_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_revision_status_t_modified_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_revision_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_revision_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_revision_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_revision_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -32827,14 +33610,14 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_revision_status_t_sparse_checkout_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
svn_boolean_t arg2 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:svn_wc_revision_status_t_sparse_checkout_set",&obj0,&obj1)) SWIG_fail;
{
- arg1 = (svn_wc_revision_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_revision_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_revision_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_revision_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -32855,13 +33638,13 @@ fail:
SWIGINTERN PyObject *_wrap_svn_wc_revision_status_t_sparse_checkout_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
PyObject * obj0 = 0 ;
svn_boolean_t result;
if (!PyArg_ParseTuple(args,(char *)"O:svn_wc_revision_status_t_sparse_checkout_get",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_revision_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_revision_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_revision_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_revision_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -32876,13 +33659,13 @@ fail:
SWIGINTERN PyObject *_wrap_new_svn_wc_revision_status_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_revision_status_t *result = 0 ;
+ struct svn_wc_revision_status_t *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_svn_wc_revision_status_t")) SWIG_fail;
{
svn_swig_py_release_py_lock();
- result = (svn_wc_revision_status_t *)calloc(1, sizeof(svn_wc_revision_status_t));
+ result = (struct svn_wc_revision_status_t *)calloc(1, sizeof(struct svn_wc_revision_status_t));
svn_swig_py_acquire_py_lock();
@@ -32897,12 +33680,12 @@ fail:
SWIGINTERN PyObject *_wrap_delete_svn_wc_revision_status_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_svn_wc_revision_status_t",&obj0)) SWIG_fail;
{
- arg1 = (svn_wc_revision_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_revision_status_t, svn_argnum_obj0);
+ arg1 = (struct svn_wc_revision_status_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_revision_status_t, svn_argnum_obj0);
if (PyErr_Occurred()) {
SWIG_fail;
}
@@ -33626,6 +34409,93 @@ fail:
}
+SWIGINTERN PyObject *_wrap_svn_wc_read_kind2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ svn_node_kind_t *arg1 = (svn_node_kind_t *) 0 ;
+ svn_wc_context_t *arg2 = (svn_wc_context_t *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_boolean_t arg4 ;
+ svn_boolean_t arg5 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *_global_pool = NULL ;
+ PyObject *_global_py_pool = NULL ;
+ svn_node_kind_t temp1 ;
+ int res1 = SWIG_TMPOBJ ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+ svn_error_t *result = 0 ;
+
+ if (svn_swig_py_get_pool_arg(args, SWIGTYPE_p_apr_pool_t,
+ &_global_py_pool, &_global_pool))
+ SWIG_fail;
+ arg6 = _global_pool;
+ arg1 = &temp1;
+ if (!PyArg_ParseTuple(args,(char *)"OsOO|O:svn_wc_read_kind2",&obj0,&arg3,&obj2,&obj3,&obj4)) SWIG_fail;
+ {
+ arg2 = (svn_wc_context_t *)svn_swig_MustGetPtr(obj0, SWIGTYPE_p_svn_wc_context_t, svn_argnum_obj0);
+ if (PyErr_Occurred()) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg4 = (svn_boolean_t)SWIG_As_long (obj2);
+ if (SWIG_arg_fail(svn_argnum_obj2)) {
+ SWIG_fail;
+ }
+ }
+ {
+ arg5 = (svn_boolean_t)SWIG_As_long (obj3);
+ if (SWIG_arg_fail(svn_argnum_obj3)) {
+ SWIG_fail;
+ }
+ }
+ if (obj4) {
+ /* Verify that the user supplied a valid pool */
+ if (obj4 != Py_None && obj4 != _global_py_pool) {
+ SWIG_Python_TypeError(SWIG_TypePrettyName(SWIGTYPE_p_apr_pool_t), obj4);
+ SWIG_arg_fail(svn_argnum_obj4);
+ SWIG_fail;
+ }
+ }
+ {
+ svn_swig_py_release_py_lock();
+
+ result = (svn_error_t *)svn_wc_read_kind2(arg1,arg2,(char const *)arg3,arg4,arg5,arg6);
+
+ svn_swig_py_acquire_py_lock();
+
+ }
+ {
+ if (result != NULL) {
+ if (result->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
+ svn_swig_py_svn_exception(result);
+ else
+ svn_error_clear(result);
+ SWIG_fail;
+ }
+ Py_INCREF(Py_None);
+ resultobj = Py_None;
+ }
+ if (SWIG_IsTmpObj(res1)) {
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_long((*arg1)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res1) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_svn_node_kind_t, new_flags));
+ }
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return resultobj;
+fail:
+ {
+ Py_XDECREF(_global_py_pool);
+ }
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_svn_wc_read_kind(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
svn_node_kind_t *arg1 = (svn_node_kind_t *) 0 ;
@@ -38298,71 +39168,68 @@ fail:
static PyMethodDef SwigMethods[] = {
{ (char *)"SWIG_PyInstanceMethod_New", (PyCFunction)SWIG_PyInstanceMethod_New, METH_O, NULL},
- { (char *)"svn_wc_version", _wrap_svn_wc_version, METH_VARARGS, (char *)"svn_wc_version() -> svn_version_t"},
- { (char *)"svn_wc_context_create", _wrap_svn_wc_context_create, METH_VARARGS, (char *)"svn_wc_context_create(svn_config_t config, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
- { (char *)"svn_wc_context_destroy", _wrap_svn_wc_context_destroy, METH_VARARGS, (char *)"svn_wc_context_destroy(svn_wc_context_t wc_ctx) -> svn_error_t"},
+ { (char *)"svn_wc_version", _wrap_svn_wc_version, METH_VARARGS, (char *)"svn_wc_version() -> svn_version_t const *"},
+ { (char *)"svn_wc_context_create", _wrap_svn_wc_context_create, METH_VARARGS, (char *)"svn_wc_context_create(svn_config_t const * config, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_wc_context_destroy", _wrap_svn_wc_context_destroy, METH_VARARGS, (char *)"svn_wc_context_destroy(svn_wc_context_t * wc_ctx) -> svn_error_t"},
{ (char *)"svn_wc_adm_open3", _wrap_svn_wc_adm_open3, METH_VARARGS, (char *)"\n"
- "svn_wc_adm_open3(svn_wc_adm_access_t associated, char path, svn_boolean_t write_lock, \n"
- " int levels_to_lock, svn_cancel_func_t cancel_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_adm_open3(svn_wc_adm_access_t * associated, char const * path, svn_boolean_t write_lock, int levels_to_lock, \n"
+ " svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_adm_open2", _wrap_svn_wc_adm_open2, METH_VARARGS, (char *)"\n"
- "svn_wc_adm_open2(svn_wc_adm_access_t associated, char path, svn_boolean_t write_lock, \n"
- " int levels_to_lock, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_adm_open2(svn_wc_adm_access_t * associated, char const * path, svn_boolean_t write_lock, int levels_to_lock, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_adm_open", _wrap_svn_wc_adm_open, METH_VARARGS, (char *)"\n"
- "svn_wc_adm_open(svn_wc_adm_access_t associated, char path, svn_boolean_t write_lock, \n"
- " svn_boolean_t tree_lock, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_adm_open(svn_wc_adm_access_t * associated, char const * path, svn_boolean_t write_lock, svn_boolean_t tree_lock, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_adm_probe_open3", _wrap_svn_wc_adm_probe_open3, METH_VARARGS, (char *)"\n"
- "svn_wc_adm_probe_open3(svn_wc_adm_access_t associated, char path, svn_boolean_t write_lock, \n"
- " int levels_to_lock, svn_cancel_func_t cancel_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_adm_probe_open3(svn_wc_adm_access_t * associated, char const * path, svn_boolean_t write_lock, int levels_to_lock, \n"
+ " svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_adm_probe_open2", _wrap_svn_wc_adm_probe_open2, METH_VARARGS, (char *)"\n"
- "svn_wc_adm_probe_open2(svn_wc_adm_access_t associated, char path, svn_boolean_t write_lock, \n"
- " int levels_to_lock, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_adm_probe_open2(svn_wc_adm_access_t * associated, char const * path, svn_boolean_t write_lock, int levels_to_lock, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_adm_probe_open", _wrap_svn_wc_adm_probe_open, METH_VARARGS, (char *)"\n"
- "svn_wc_adm_probe_open(svn_wc_adm_access_t associated, char path, svn_boolean_t write_lock, \n"
- " svn_boolean_t tree_lock, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_adm_probe_open(svn_wc_adm_access_t * associated, char const * path, svn_boolean_t write_lock, svn_boolean_t tree_lock, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_adm_open_anchor", _wrap_svn_wc_adm_open_anchor, METH_VARARGS, (char *)"\n"
- "svn_wc_adm_open_anchor(char path, svn_boolean_t write_lock, int levels_to_lock, \n"
- " svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_adm_open_anchor(char const * path, svn_boolean_t write_lock, int levels_to_lock, svn_cancel_func_t cancel_func, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_wc_adm_retrieve", _wrap_svn_wc_adm_retrieve, METH_VARARGS, (char *)"svn_wc_adm_retrieve(svn_wc_adm_access_t associated, char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_wc_adm_probe_retrieve", _wrap_svn_wc_adm_probe_retrieve, METH_VARARGS, (char *)"svn_wc_adm_probe_retrieve(svn_wc_adm_access_t associated, char path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_adm_retrieve", _wrap_svn_wc_adm_retrieve, METH_VARARGS, (char *)"svn_wc_adm_retrieve(svn_wc_adm_access_t * associated, char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_adm_probe_retrieve", _wrap_svn_wc_adm_probe_retrieve, METH_VARARGS, (char *)"svn_wc_adm_probe_retrieve(svn_wc_adm_access_t * associated, char const * path, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_wc_adm_probe_try3", _wrap_svn_wc_adm_probe_try3, METH_VARARGS, (char *)"\n"
- "svn_wc_adm_probe_try3(svn_wc_adm_access_t associated, char path, svn_boolean_t write_lock, \n"
- " int levels_to_lock, svn_cancel_func_t cancel_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_adm_probe_try3(svn_wc_adm_access_t * associated, char const * path, svn_boolean_t write_lock, int levels_to_lock, \n"
+ " svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_adm_probe_try2", _wrap_svn_wc_adm_probe_try2, METH_VARARGS, (char *)"\n"
- "svn_wc_adm_probe_try2(svn_wc_adm_access_t associated, char path, svn_boolean_t write_lock, \n"
- " int levels_to_lock, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_adm_probe_try2(svn_wc_adm_access_t * associated, char const * path, svn_boolean_t write_lock, int levels_to_lock, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_adm_probe_try", _wrap_svn_wc_adm_probe_try, METH_VARARGS, (char *)"\n"
- "svn_wc_adm_probe_try(svn_wc_adm_access_t associated, char path, svn_boolean_t write_lock, \n"
- " svn_boolean_t tree_lock, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_adm_probe_try(svn_wc_adm_access_t * associated, char const * path, svn_boolean_t write_lock, svn_boolean_t tree_lock, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_wc_adm_close2", _wrap_svn_wc_adm_close2, METH_VARARGS, (char *)"svn_wc_adm_close2(svn_wc_adm_access_t adm_access, apr_pool_t scratch_pool) -> svn_error_t"},
- { (char *)"svn_wc_adm_close", _wrap_svn_wc_adm_close, METH_VARARGS, (char *)"svn_wc_adm_close(svn_wc_adm_access_t adm_access) -> svn_error_t"},
- { (char *)"svn_wc_adm_access_path", _wrap_svn_wc_adm_access_path, METH_VARARGS, (char *)"svn_wc_adm_access_path(svn_wc_adm_access_t adm_access) -> char"},
- { (char *)"svn_wc_adm_access_pool", _wrap_svn_wc_adm_access_pool, METH_VARARGS, (char *)"svn_wc_adm_access_pool(svn_wc_adm_access_t adm_access) -> apr_pool_t"},
- { (char *)"svn_wc_adm_locked", _wrap_svn_wc_adm_locked, METH_VARARGS, (char *)"svn_wc_adm_locked(svn_wc_adm_access_t adm_access) -> svn_boolean_t"},
- { (char *)"svn_wc_locked2", _wrap_svn_wc_locked2, METH_VARARGS, (char *)"svn_wc_locked2(svn_wc_context_t wc_ctx, char local_abspath, apr_pool_t scratch_pool) -> svn_error_t"},
- { (char *)"svn_wc_locked", _wrap_svn_wc_locked, METH_VARARGS, (char *)"svn_wc_locked(char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_wc_is_adm_dir", _wrap_svn_wc_is_adm_dir, METH_VARARGS, (char *)"svn_wc_is_adm_dir(char name, apr_pool_t pool) -> svn_boolean_t"},
- { (char *)"svn_wc_get_adm_dir", _wrap_svn_wc_get_adm_dir, METH_VARARGS, (char *)"svn_wc_get_adm_dir(apr_pool_t pool) -> char"},
- { (char *)"svn_wc_set_adm_dir", _wrap_svn_wc_set_adm_dir, METH_VARARGS, (char *)"svn_wc_set_adm_dir(char name, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_wc_init_traversal_info", _wrap_svn_wc_init_traversal_info, METH_VARARGS, (char *)"svn_wc_init_traversal_info(apr_pool_t pool) -> svn_wc_traversal_info_t"},
- { (char *)"svn_wc_edited_externals", _wrap_svn_wc_edited_externals, METH_VARARGS, (char *)"svn_wc_edited_externals(svn_wc_traversal_info_t traversal_info)"},
- { (char *)"svn_wc_traversed_depths", _wrap_svn_wc_traversed_depths, METH_VARARGS, (char *)"svn_wc_traversed_depths(svn_wc_traversal_info_t traversal_info)"},
- { (char *)"svn_wc_external_item2_t_target_dir_set", _wrap_svn_wc_external_item2_t_target_dir_set, METH_VARARGS, (char *)"svn_wc_external_item2_t_target_dir_set(svn_wc_external_item2_t self, char target_dir)"},
- { (char *)"svn_wc_external_item2_t_target_dir_get", _wrap_svn_wc_external_item2_t_target_dir_get, METH_VARARGS, (char *)"svn_wc_external_item2_t_target_dir_get(svn_wc_external_item2_t self) -> char"},
- { (char *)"svn_wc_external_item2_t_url_set", _wrap_svn_wc_external_item2_t_url_set, METH_VARARGS, (char *)"svn_wc_external_item2_t_url_set(svn_wc_external_item2_t self, char url)"},
- { (char *)"svn_wc_external_item2_t_url_get", _wrap_svn_wc_external_item2_t_url_get, METH_VARARGS, (char *)"svn_wc_external_item2_t_url_get(svn_wc_external_item2_t self) -> char"},
+ { (char *)"svn_wc_adm_close2", _wrap_svn_wc_adm_close2, METH_VARARGS, (char *)"svn_wc_adm_close2(svn_wc_adm_access_t * adm_access, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_wc_adm_close", _wrap_svn_wc_adm_close, METH_VARARGS, (char *)"svn_wc_adm_close(svn_wc_adm_access_t * adm_access) -> svn_error_t"},
+ { (char *)"svn_wc_adm_access_path", _wrap_svn_wc_adm_access_path, METH_VARARGS, (char *)"svn_wc_adm_access_path(svn_wc_adm_access_t const * adm_access) -> char const *"},
+ { (char *)"svn_wc_adm_access_pool", _wrap_svn_wc_adm_access_pool, METH_VARARGS, (char *)"svn_wc_adm_access_pool(svn_wc_adm_access_t const * adm_access) -> apr_pool_t"},
+ { (char *)"svn_wc_adm_locked", _wrap_svn_wc_adm_locked, METH_VARARGS, (char *)"svn_wc_adm_locked(svn_wc_adm_access_t const * adm_access) -> svn_boolean_t"},
+ { (char *)"svn_wc_locked2", _wrap_svn_wc_locked2, METH_VARARGS, (char *)"svn_wc_locked2(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_wc_locked", _wrap_svn_wc_locked, METH_VARARGS, (char *)"svn_wc_locked(char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_is_adm_dir", _wrap_svn_wc_is_adm_dir, METH_VARARGS, (char *)"svn_wc_is_adm_dir(char const * name, apr_pool_t pool) -> svn_boolean_t"},
+ { (char *)"svn_wc_get_adm_dir", _wrap_svn_wc_get_adm_dir, METH_VARARGS, (char *)"svn_wc_get_adm_dir(apr_pool_t pool) -> char const *"},
+ { (char *)"svn_wc_set_adm_dir", _wrap_svn_wc_set_adm_dir, METH_VARARGS, (char *)"svn_wc_set_adm_dir(char const * name, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_init_traversal_info", _wrap_svn_wc_init_traversal_info, METH_VARARGS, (char *)"svn_wc_init_traversal_info(apr_pool_t pool) -> svn_wc_traversal_info_t *"},
+ { (char *)"svn_wc_edited_externals", _wrap_svn_wc_edited_externals, METH_VARARGS, (char *)"svn_wc_edited_externals(svn_wc_traversal_info_t * traversal_info)"},
+ { (char *)"svn_wc_traversed_depths", _wrap_svn_wc_traversed_depths, METH_VARARGS, (char *)"svn_wc_traversed_depths(svn_wc_traversal_info_t * traversal_info)"},
+ { (char *)"svn_wc_external_item2_t_target_dir_set", _wrap_svn_wc_external_item2_t_target_dir_set, METH_VARARGS, (char *)"svn_wc_external_item2_t_target_dir_set(svn_wc_external_item2_t self, char const * target_dir)"},
+ { (char *)"svn_wc_external_item2_t_target_dir_get", _wrap_svn_wc_external_item2_t_target_dir_get, METH_VARARGS, (char *)"svn_wc_external_item2_t_target_dir_get(svn_wc_external_item2_t self) -> char const *"},
+ { (char *)"svn_wc_external_item2_t_url_set", _wrap_svn_wc_external_item2_t_url_set, METH_VARARGS, (char *)"svn_wc_external_item2_t_url_set(svn_wc_external_item2_t self, char const * url)"},
+ { (char *)"svn_wc_external_item2_t_url_get", _wrap_svn_wc_external_item2_t_url_get, METH_VARARGS, (char *)"svn_wc_external_item2_t_url_get(svn_wc_external_item2_t self) -> char const *"},
{ (char *)"svn_wc_external_item2_t_revision_set", _wrap_svn_wc_external_item2_t_revision_set, METH_VARARGS, (char *)"svn_wc_external_item2_t_revision_set(svn_wc_external_item2_t self, svn_opt_revision_t revision)"},
{ (char *)"svn_wc_external_item2_t_revision_get", _wrap_svn_wc_external_item2_t_revision_get, METH_VARARGS, (char *)"svn_wc_external_item2_t_revision_get(svn_wc_external_item2_t self) -> svn_opt_revision_t"},
{ (char *)"svn_wc_external_item2_t_peg_revision_set", _wrap_svn_wc_external_item2_t_peg_revision_set, METH_VARARGS, (char *)"svn_wc_external_item2_t_peg_revision_set(svn_wc_external_item2_t self, svn_opt_revision_t peg_revision)"},
@@ -38370,12 +39237,13 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"new_svn_wc_external_item2_t", _wrap_new_svn_wc_external_item2_t, METH_VARARGS, (char *)"new_svn_wc_external_item2_t() -> svn_wc_external_item2_t"},
{ (char *)"delete_svn_wc_external_item2_t", _wrap_delete_svn_wc_external_item2_t, METH_VARARGS, (char *)"delete_svn_wc_external_item2_t(svn_wc_external_item2_t self)"},
{ (char *)"svn_wc_external_item2_t_swigregister", svn_wc_external_item2_t_swigregister, METH_VARARGS, NULL},
+ { (char *)"svn_wc_external_item2_create", _wrap_svn_wc_external_item2_create, METH_VARARGS, (char *)"svn_wc_external_item2_create(apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_wc_external_item_create", _wrap_svn_wc_external_item_create, METH_VARARGS, (char *)"svn_wc_external_item_create(apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_wc_external_item2_dup", _wrap_svn_wc_external_item2_dup, METH_VARARGS, (char *)"svn_wc_external_item2_dup(svn_wc_external_item2_t item, apr_pool_t pool) -> svn_wc_external_item2_t"},
- { (char *)"svn_wc_external_item_t_target_dir_set", _wrap_svn_wc_external_item_t_target_dir_set, METH_VARARGS, (char *)"svn_wc_external_item_t_target_dir_set(svn_wc_external_item_t self, char target_dir)"},
- { (char *)"svn_wc_external_item_t_target_dir_get", _wrap_svn_wc_external_item_t_target_dir_get, METH_VARARGS, (char *)"svn_wc_external_item_t_target_dir_get(svn_wc_external_item_t self) -> char"},
- { (char *)"svn_wc_external_item_t_url_set", _wrap_svn_wc_external_item_t_url_set, METH_VARARGS, (char *)"svn_wc_external_item_t_url_set(svn_wc_external_item_t self, char url)"},
- { (char *)"svn_wc_external_item_t_url_get", _wrap_svn_wc_external_item_t_url_get, METH_VARARGS, (char *)"svn_wc_external_item_t_url_get(svn_wc_external_item_t self) -> char"},
+ { (char *)"svn_wc_external_item_t_target_dir_set", _wrap_svn_wc_external_item_t_target_dir_set, METH_VARARGS, (char *)"svn_wc_external_item_t_target_dir_set(svn_wc_external_item_t self, char const * target_dir)"},
+ { (char *)"svn_wc_external_item_t_target_dir_get", _wrap_svn_wc_external_item_t_target_dir_get, METH_VARARGS, (char *)"svn_wc_external_item_t_target_dir_get(svn_wc_external_item_t self) -> char const *"},
+ { (char *)"svn_wc_external_item_t_url_set", _wrap_svn_wc_external_item_t_url_set, METH_VARARGS, (char *)"svn_wc_external_item_t_url_set(svn_wc_external_item_t self, char const * url)"},
+ { (char *)"svn_wc_external_item_t_url_get", _wrap_svn_wc_external_item_t_url_get, METH_VARARGS, (char *)"svn_wc_external_item_t_url_get(svn_wc_external_item_t self) -> char const *"},
{ (char *)"svn_wc_external_item_t_revision_set", _wrap_svn_wc_external_item_t_revision_set, METH_VARARGS, (char *)"svn_wc_external_item_t_revision_set(svn_wc_external_item_t self, svn_opt_revision_t revision)"},
{ (char *)"svn_wc_external_item_t_revision_get", _wrap_svn_wc_external_item_t_revision_get, METH_VARARGS, (char *)"svn_wc_external_item_t_revision_get(svn_wc_external_item_t self) -> svn_opt_revision_t"},
{ (char *)"new_svn_wc_external_item_t", _wrap_new_svn_wc_external_item_t, METH_VARARGS, (char *)"new_svn_wc_external_item_t() -> svn_wc_external_item_t"},
@@ -38383,19 +39251,19 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_wc_external_item_t_swigregister", svn_wc_external_item_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_wc_external_item_dup", _wrap_svn_wc_external_item_dup, METH_VARARGS, (char *)"svn_wc_external_item_dup(svn_wc_external_item_t item, apr_pool_t pool) -> svn_wc_external_item_t"},
{ (char *)"svn_wc_parse_externals_description3", _wrap_svn_wc_parse_externals_description3, METH_VARARGS, (char *)"\n"
- "svn_wc_parse_externals_description3(char parent_directory, char desc, svn_boolean_t canonicalize_url, \n"
+ "svn_wc_parse_externals_description3(char const * parent_directory, char const * desc, svn_boolean_t canonicalize_url, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_wc_parse_externals_description2", _wrap_svn_wc_parse_externals_description2, METH_VARARGS, (char *)"svn_wc_parse_externals_description2(char parent_directory, char desc, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_wc_parse_externals_description", _wrap_svn_wc_parse_externals_description, METH_VARARGS, (char *)"svn_wc_parse_externals_description(char parent_directory, char desc, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_wc_notify_t_path_set", _wrap_svn_wc_notify_t_path_set, METH_VARARGS, (char *)"svn_wc_notify_t_path_set(svn_wc_notify_t self, char path)"},
- { (char *)"svn_wc_notify_t_path_get", _wrap_svn_wc_notify_t_path_get, METH_VARARGS, (char *)"svn_wc_notify_t_path_get(svn_wc_notify_t self) -> char"},
+ { (char *)"svn_wc_parse_externals_description2", _wrap_svn_wc_parse_externals_description2, METH_VARARGS, (char *)"svn_wc_parse_externals_description2(char const * parent_directory, char const * desc, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_parse_externals_description", _wrap_svn_wc_parse_externals_description, METH_VARARGS, (char *)"svn_wc_parse_externals_description(char const * parent_directory, char const * desc, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_notify_t_path_set", _wrap_svn_wc_notify_t_path_set, METH_VARARGS, (char *)"svn_wc_notify_t_path_set(svn_wc_notify_t self, char const * path)"},
+ { (char *)"svn_wc_notify_t_path_get", _wrap_svn_wc_notify_t_path_get, METH_VARARGS, (char *)"svn_wc_notify_t_path_get(svn_wc_notify_t self) -> char const *"},
{ (char *)"svn_wc_notify_t_action_set", _wrap_svn_wc_notify_t_action_set, METH_VARARGS, (char *)"svn_wc_notify_t_action_set(svn_wc_notify_t self, svn_wc_notify_action_t action)"},
{ (char *)"svn_wc_notify_t_action_get", _wrap_svn_wc_notify_t_action_get, METH_VARARGS, (char *)"svn_wc_notify_t_action_get(svn_wc_notify_t self) -> svn_wc_notify_action_t"},
{ (char *)"svn_wc_notify_t_kind_set", _wrap_svn_wc_notify_t_kind_set, METH_VARARGS, (char *)"svn_wc_notify_t_kind_set(svn_wc_notify_t self, svn_node_kind_t kind)"},
{ (char *)"svn_wc_notify_t_kind_get", _wrap_svn_wc_notify_t_kind_get, METH_VARARGS, (char *)"svn_wc_notify_t_kind_get(svn_wc_notify_t self) -> svn_node_kind_t"},
- { (char *)"svn_wc_notify_t_mime_type_set", _wrap_svn_wc_notify_t_mime_type_set, METH_VARARGS, (char *)"svn_wc_notify_t_mime_type_set(svn_wc_notify_t self, char mime_type)"},
- { (char *)"svn_wc_notify_t_mime_type_get", _wrap_svn_wc_notify_t_mime_type_get, METH_VARARGS, (char *)"svn_wc_notify_t_mime_type_get(svn_wc_notify_t self) -> char"},
+ { (char *)"svn_wc_notify_t_mime_type_set", _wrap_svn_wc_notify_t_mime_type_set, METH_VARARGS, (char *)"svn_wc_notify_t_mime_type_set(svn_wc_notify_t self, char const * mime_type)"},
+ { (char *)"svn_wc_notify_t_mime_type_get", _wrap_svn_wc_notify_t_mime_type_get, METH_VARARGS, (char *)"svn_wc_notify_t_mime_type_get(svn_wc_notify_t self) -> char const *"},
{ (char *)"svn_wc_notify_t_lock_set", _wrap_svn_wc_notify_t_lock_set, METH_VARARGS, (char *)"svn_wc_notify_t_lock_set(svn_wc_notify_t self, svn_lock_t lock)"},
{ (char *)"svn_wc_notify_t_lock_get", _wrap_svn_wc_notify_t_lock_get, METH_VARARGS, (char *)"svn_wc_notify_t_lock_get(svn_wc_notify_t self) -> svn_lock_t"},
{ (char *)"svn_wc_notify_t_err_set", _wrap_svn_wc_notify_t_err_set, METH_VARARGS, (char *)"svn_wc_notify_t_err_set(svn_wc_notify_t self, svn_error_t err)"},
@@ -38408,16 +39276,16 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_wc_notify_t_lock_state_get", _wrap_svn_wc_notify_t_lock_state_get, METH_VARARGS, (char *)"svn_wc_notify_t_lock_state_get(svn_wc_notify_t self) -> svn_wc_notify_lock_state_t"},
{ (char *)"svn_wc_notify_t_revision_set", _wrap_svn_wc_notify_t_revision_set, METH_VARARGS, (char *)"svn_wc_notify_t_revision_set(svn_wc_notify_t self, svn_revnum_t revision)"},
{ (char *)"svn_wc_notify_t_revision_get", _wrap_svn_wc_notify_t_revision_get, METH_VARARGS, (char *)"svn_wc_notify_t_revision_get(svn_wc_notify_t self) -> svn_revnum_t"},
- { (char *)"svn_wc_notify_t_changelist_name_set", _wrap_svn_wc_notify_t_changelist_name_set, METH_VARARGS, (char *)"svn_wc_notify_t_changelist_name_set(svn_wc_notify_t self, char changelist_name)"},
- { (char *)"svn_wc_notify_t_changelist_name_get", _wrap_svn_wc_notify_t_changelist_name_get, METH_VARARGS, (char *)"svn_wc_notify_t_changelist_name_get(svn_wc_notify_t self) -> char"},
+ { (char *)"svn_wc_notify_t_changelist_name_set", _wrap_svn_wc_notify_t_changelist_name_set, METH_VARARGS, (char *)"svn_wc_notify_t_changelist_name_set(svn_wc_notify_t self, char const * changelist_name)"},
+ { (char *)"svn_wc_notify_t_changelist_name_get", _wrap_svn_wc_notify_t_changelist_name_get, METH_VARARGS, (char *)"svn_wc_notify_t_changelist_name_get(svn_wc_notify_t self) -> char const *"},
{ (char *)"svn_wc_notify_t_merge_range_set", _wrap_svn_wc_notify_t_merge_range_set, METH_VARARGS, (char *)"svn_wc_notify_t_merge_range_set(svn_wc_notify_t self, svn_merge_range_t merge_range)"},
{ (char *)"svn_wc_notify_t_merge_range_get", _wrap_svn_wc_notify_t_merge_range_get, METH_VARARGS, (char *)"svn_wc_notify_t_merge_range_get(svn_wc_notify_t self) -> svn_merge_range_t"},
- { (char *)"svn_wc_notify_t_url_set", _wrap_svn_wc_notify_t_url_set, METH_VARARGS, (char *)"svn_wc_notify_t_url_set(svn_wc_notify_t self, char url)"},
- { (char *)"svn_wc_notify_t_url_get", _wrap_svn_wc_notify_t_url_get, METH_VARARGS, (char *)"svn_wc_notify_t_url_get(svn_wc_notify_t self) -> char"},
- { (char *)"svn_wc_notify_t_path_prefix_set", _wrap_svn_wc_notify_t_path_prefix_set, METH_VARARGS, (char *)"svn_wc_notify_t_path_prefix_set(svn_wc_notify_t self, char path_prefix)"},
- { (char *)"svn_wc_notify_t_path_prefix_get", _wrap_svn_wc_notify_t_path_prefix_get, METH_VARARGS, (char *)"svn_wc_notify_t_path_prefix_get(svn_wc_notify_t self) -> char"},
- { (char *)"svn_wc_notify_t_prop_name_set", _wrap_svn_wc_notify_t_prop_name_set, METH_VARARGS, (char *)"svn_wc_notify_t_prop_name_set(svn_wc_notify_t self, char prop_name)"},
- { (char *)"svn_wc_notify_t_prop_name_get", _wrap_svn_wc_notify_t_prop_name_get, METH_VARARGS, (char *)"svn_wc_notify_t_prop_name_get(svn_wc_notify_t self) -> char"},
+ { (char *)"svn_wc_notify_t_url_set", _wrap_svn_wc_notify_t_url_set, METH_VARARGS, (char *)"svn_wc_notify_t_url_set(svn_wc_notify_t self, char const * url)"},
+ { (char *)"svn_wc_notify_t_url_get", _wrap_svn_wc_notify_t_url_get, METH_VARARGS, (char *)"svn_wc_notify_t_url_get(svn_wc_notify_t self) -> char const *"},
+ { (char *)"svn_wc_notify_t_path_prefix_set", _wrap_svn_wc_notify_t_path_prefix_set, METH_VARARGS, (char *)"svn_wc_notify_t_path_prefix_set(svn_wc_notify_t self, char const * path_prefix)"},
+ { (char *)"svn_wc_notify_t_path_prefix_get", _wrap_svn_wc_notify_t_path_prefix_get, METH_VARARGS, (char *)"svn_wc_notify_t_path_prefix_get(svn_wc_notify_t self) -> char const *"},
+ { (char *)"svn_wc_notify_t_prop_name_set", _wrap_svn_wc_notify_t_prop_name_set, METH_VARARGS, (char *)"svn_wc_notify_t_prop_name_set(svn_wc_notify_t self, char const * prop_name)"},
+ { (char *)"svn_wc_notify_t_prop_name_get", _wrap_svn_wc_notify_t_prop_name_get, METH_VARARGS, (char *)"svn_wc_notify_t_prop_name_get(svn_wc_notify_t self) -> char const *"},
{ (char *)"svn_wc_notify_t_rev_props_set", _wrap_svn_wc_notify_t_rev_props_set, METH_VARARGS, (char *)"svn_wc_notify_t_rev_props_set(svn_wc_notify_t self, apr_hash_t rev_props)"},
{ (char *)"svn_wc_notify_t_rev_props_get", _wrap_svn_wc_notify_t_rev_props_get, METH_VARARGS, (char *)"svn_wc_notify_t_rev_props_get(svn_wc_notify_t self) -> apr_hash_t"},
{ (char *)"svn_wc_notify_t_old_revision_set", _wrap_svn_wc_notify_t_old_revision_set, METH_VARARGS, (char *)"svn_wc_notify_t_old_revision_set(svn_wc_notify_t self, svn_revnum_t old_revision)"},
@@ -38437,49 +39305,55 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"new_svn_wc_notify_t", _wrap_new_svn_wc_notify_t, METH_VARARGS, (char *)"new_svn_wc_notify_t() -> svn_wc_notify_t"},
{ (char *)"delete_svn_wc_notify_t", _wrap_delete_svn_wc_notify_t, METH_VARARGS, (char *)"delete_svn_wc_notify_t(svn_wc_notify_t self)"},
{ (char *)"svn_wc_notify_t_swigregister", svn_wc_notify_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_wc_create_notify", _wrap_svn_wc_create_notify, METH_VARARGS, (char *)"svn_wc_create_notify(char path, svn_wc_notify_action_t action, apr_pool_t pool) -> svn_wc_notify_t"},
- { (char *)"svn_wc_create_notify_url", _wrap_svn_wc_create_notify_url, METH_VARARGS, (char *)"svn_wc_create_notify_url(char url, svn_wc_notify_action_t action, apr_pool_t pool) -> svn_wc_notify_t"},
+ { (char *)"svn_wc_create_notify", _wrap_svn_wc_create_notify, METH_VARARGS, (char *)"svn_wc_create_notify(char const * path, svn_wc_notify_action_t action, apr_pool_t pool) -> svn_wc_notify_t"},
+ { (char *)"svn_wc_create_notify_url", _wrap_svn_wc_create_notify_url, METH_VARARGS, (char *)"svn_wc_create_notify_url(char const * url, svn_wc_notify_action_t action, apr_pool_t pool) -> svn_wc_notify_t"},
{ (char *)"svn_wc_dup_notify", _wrap_svn_wc_dup_notify, METH_VARARGS, (char *)"svn_wc_dup_notify(svn_wc_notify_t notify, apr_pool_t pool) -> svn_wc_notify_t"},
- { (char *)"svn_wc_conflict_version_t_repos_url_set", _wrap_svn_wc_conflict_version_t_repos_url_set, METH_VARARGS, (char *)"svn_wc_conflict_version_t_repos_url_set(svn_wc_conflict_version_t self, char repos_url)"},
- { (char *)"svn_wc_conflict_version_t_repos_url_get", _wrap_svn_wc_conflict_version_t_repos_url_get, METH_VARARGS, (char *)"svn_wc_conflict_version_t_repos_url_get(svn_wc_conflict_version_t self) -> char"},
+ { (char *)"svn_wc_conflict_version_t_repos_url_set", _wrap_svn_wc_conflict_version_t_repos_url_set, METH_VARARGS, (char *)"svn_wc_conflict_version_t_repos_url_set(svn_wc_conflict_version_t self, char const * repos_url)"},
+ { (char *)"svn_wc_conflict_version_t_repos_url_get", _wrap_svn_wc_conflict_version_t_repos_url_get, METH_VARARGS, (char *)"svn_wc_conflict_version_t_repos_url_get(svn_wc_conflict_version_t self) -> char const *"},
{ (char *)"svn_wc_conflict_version_t_peg_rev_set", _wrap_svn_wc_conflict_version_t_peg_rev_set, METH_VARARGS, (char *)"svn_wc_conflict_version_t_peg_rev_set(svn_wc_conflict_version_t self, svn_revnum_t peg_rev)"},
{ (char *)"svn_wc_conflict_version_t_peg_rev_get", _wrap_svn_wc_conflict_version_t_peg_rev_get, METH_VARARGS, (char *)"svn_wc_conflict_version_t_peg_rev_get(svn_wc_conflict_version_t self) -> svn_revnum_t"},
- { (char *)"svn_wc_conflict_version_t_path_in_repos_set", _wrap_svn_wc_conflict_version_t_path_in_repos_set, METH_VARARGS, (char *)"svn_wc_conflict_version_t_path_in_repos_set(svn_wc_conflict_version_t self, char path_in_repos)"},
- { (char *)"svn_wc_conflict_version_t_path_in_repos_get", _wrap_svn_wc_conflict_version_t_path_in_repos_get, METH_VARARGS, (char *)"svn_wc_conflict_version_t_path_in_repos_get(svn_wc_conflict_version_t self) -> char"},
+ { (char *)"svn_wc_conflict_version_t_path_in_repos_set", _wrap_svn_wc_conflict_version_t_path_in_repos_set, METH_VARARGS, (char *)"svn_wc_conflict_version_t_path_in_repos_set(svn_wc_conflict_version_t self, char const * path_in_repos)"},
+ { (char *)"svn_wc_conflict_version_t_path_in_repos_get", _wrap_svn_wc_conflict_version_t_path_in_repos_get, METH_VARARGS, (char *)"svn_wc_conflict_version_t_path_in_repos_get(svn_wc_conflict_version_t self) -> char const *"},
{ (char *)"svn_wc_conflict_version_t_node_kind_set", _wrap_svn_wc_conflict_version_t_node_kind_set, METH_VARARGS, (char *)"svn_wc_conflict_version_t_node_kind_set(svn_wc_conflict_version_t self, svn_node_kind_t node_kind)"},
{ (char *)"svn_wc_conflict_version_t_node_kind_get", _wrap_svn_wc_conflict_version_t_node_kind_get, METH_VARARGS, (char *)"svn_wc_conflict_version_t_node_kind_get(svn_wc_conflict_version_t self) -> svn_node_kind_t"},
+ { (char *)"svn_wc_conflict_version_t_repos_uuid_set", _wrap_svn_wc_conflict_version_t_repos_uuid_set, METH_VARARGS, (char *)"svn_wc_conflict_version_t_repos_uuid_set(svn_wc_conflict_version_t self, char const * repos_uuid)"},
+ { (char *)"svn_wc_conflict_version_t_repos_uuid_get", _wrap_svn_wc_conflict_version_t_repos_uuid_get, METH_VARARGS, (char *)"svn_wc_conflict_version_t_repos_uuid_get(svn_wc_conflict_version_t self) -> char const *"},
{ (char *)"new_svn_wc_conflict_version_t", _wrap_new_svn_wc_conflict_version_t, METH_VARARGS, (char *)"new_svn_wc_conflict_version_t() -> svn_wc_conflict_version_t"},
{ (char *)"delete_svn_wc_conflict_version_t", _wrap_delete_svn_wc_conflict_version_t, METH_VARARGS, (char *)"delete_svn_wc_conflict_version_t(svn_wc_conflict_version_t self)"},
{ (char *)"svn_wc_conflict_version_t_swigregister", svn_wc_conflict_version_t_swigregister, METH_VARARGS, NULL},
+ { (char *)"svn_wc_conflict_version_create2", _wrap_svn_wc_conflict_version_create2, METH_VARARGS, (char *)"\n"
+ "svn_wc_conflict_version_create2(char const * repos_root_url, char const * repos_uuid, char const * repos_relpath, \n"
+ " svn_revnum_t revision, svn_node_kind_t kind, apr_pool_t result_pool) -> svn_wc_conflict_version_t\n"
+ ""},
{ (char *)"svn_wc_conflict_version_create", _wrap_svn_wc_conflict_version_create, METH_VARARGS, (char *)"\n"
- "svn_wc_conflict_version_create(char repos_url, char path_in_repos, svn_revnum_t peg_rev, \n"
- " svn_node_kind_t node_kind, apr_pool_t pool) -> svn_wc_conflict_version_t\n"
+ "svn_wc_conflict_version_create(char const * repos_url, char const * path_in_repos, svn_revnum_t peg_rev, svn_node_kind_t node_kind, \n"
+ " apr_pool_t pool) -> svn_wc_conflict_version_t\n"
""},
{ (char *)"svn_wc_conflict_version_dup", _wrap_svn_wc_conflict_version_dup, METH_VARARGS, (char *)"svn_wc_conflict_version_dup(svn_wc_conflict_version_t version, apr_pool_t pool) -> svn_wc_conflict_version_t"},
- { (char *)"svn_wc_conflict_description2_t_local_abspath_set", _wrap_svn_wc_conflict_description2_t_local_abspath_set, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_local_abspath_set(svn_wc_conflict_description2_t self, char local_abspath)"},
- { (char *)"svn_wc_conflict_description2_t_local_abspath_get", _wrap_svn_wc_conflict_description2_t_local_abspath_get, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_local_abspath_get(svn_wc_conflict_description2_t self) -> char"},
+ { (char *)"svn_wc_conflict_description2_t_local_abspath_set", _wrap_svn_wc_conflict_description2_t_local_abspath_set, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_local_abspath_set(svn_wc_conflict_description2_t self, char const * local_abspath)"},
+ { (char *)"svn_wc_conflict_description2_t_local_abspath_get", _wrap_svn_wc_conflict_description2_t_local_abspath_get, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_local_abspath_get(svn_wc_conflict_description2_t self) -> char const *"},
{ (char *)"svn_wc_conflict_description2_t_node_kind_set", _wrap_svn_wc_conflict_description2_t_node_kind_set, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_node_kind_set(svn_wc_conflict_description2_t self, svn_node_kind_t node_kind)"},
{ (char *)"svn_wc_conflict_description2_t_node_kind_get", _wrap_svn_wc_conflict_description2_t_node_kind_get, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_node_kind_get(svn_wc_conflict_description2_t self) -> svn_node_kind_t"},
{ (char *)"svn_wc_conflict_description2_t_kind_set", _wrap_svn_wc_conflict_description2_t_kind_set, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_kind_set(svn_wc_conflict_description2_t self, svn_wc_conflict_kind_t kind)"},
{ (char *)"svn_wc_conflict_description2_t_kind_get", _wrap_svn_wc_conflict_description2_t_kind_get, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_kind_get(svn_wc_conflict_description2_t self) -> svn_wc_conflict_kind_t"},
- { (char *)"svn_wc_conflict_description2_t_property_name_set", _wrap_svn_wc_conflict_description2_t_property_name_set, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_property_name_set(svn_wc_conflict_description2_t self, char property_name)"},
- { (char *)"svn_wc_conflict_description2_t_property_name_get", _wrap_svn_wc_conflict_description2_t_property_name_get, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_property_name_get(svn_wc_conflict_description2_t self) -> char"},
+ { (char *)"svn_wc_conflict_description2_t_property_name_set", _wrap_svn_wc_conflict_description2_t_property_name_set, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_property_name_set(svn_wc_conflict_description2_t self, char const * property_name)"},
+ { (char *)"svn_wc_conflict_description2_t_property_name_get", _wrap_svn_wc_conflict_description2_t_property_name_get, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_property_name_get(svn_wc_conflict_description2_t self) -> char const *"},
{ (char *)"svn_wc_conflict_description2_t_is_binary_set", _wrap_svn_wc_conflict_description2_t_is_binary_set, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_is_binary_set(svn_wc_conflict_description2_t self, svn_boolean_t is_binary)"},
{ (char *)"svn_wc_conflict_description2_t_is_binary_get", _wrap_svn_wc_conflict_description2_t_is_binary_get, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_is_binary_get(svn_wc_conflict_description2_t self) -> svn_boolean_t"},
- { (char *)"svn_wc_conflict_description2_t_mime_type_set", _wrap_svn_wc_conflict_description2_t_mime_type_set, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_mime_type_set(svn_wc_conflict_description2_t self, char mime_type)"},
- { (char *)"svn_wc_conflict_description2_t_mime_type_get", _wrap_svn_wc_conflict_description2_t_mime_type_get, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_mime_type_get(svn_wc_conflict_description2_t self) -> char"},
+ { (char *)"svn_wc_conflict_description2_t_mime_type_set", _wrap_svn_wc_conflict_description2_t_mime_type_set, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_mime_type_set(svn_wc_conflict_description2_t self, char const * mime_type)"},
+ { (char *)"svn_wc_conflict_description2_t_mime_type_get", _wrap_svn_wc_conflict_description2_t_mime_type_get, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_mime_type_get(svn_wc_conflict_description2_t self) -> char const *"},
{ (char *)"svn_wc_conflict_description2_t_action_set", _wrap_svn_wc_conflict_description2_t_action_set, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_action_set(svn_wc_conflict_description2_t self, svn_wc_conflict_action_t action)"},
{ (char *)"svn_wc_conflict_description2_t_action_get", _wrap_svn_wc_conflict_description2_t_action_get, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_action_get(svn_wc_conflict_description2_t self) -> svn_wc_conflict_action_t"},
{ (char *)"svn_wc_conflict_description2_t_reason_set", _wrap_svn_wc_conflict_description2_t_reason_set, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_reason_set(svn_wc_conflict_description2_t self, svn_wc_conflict_reason_t reason)"},
{ (char *)"svn_wc_conflict_description2_t_reason_get", _wrap_svn_wc_conflict_description2_t_reason_get, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_reason_get(svn_wc_conflict_description2_t self) -> svn_wc_conflict_reason_t"},
- { (char *)"svn_wc_conflict_description2_t_base_abspath_set", _wrap_svn_wc_conflict_description2_t_base_abspath_set, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_base_abspath_set(svn_wc_conflict_description2_t self, char base_abspath)"},
- { (char *)"svn_wc_conflict_description2_t_base_abspath_get", _wrap_svn_wc_conflict_description2_t_base_abspath_get, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_base_abspath_get(svn_wc_conflict_description2_t self) -> char"},
- { (char *)"svn_wc_conflict_description2_t_their_abspath_set", _wrap_svn_wc_conflict_description2_t_their_abspath_set, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_their_abspath_set(svn_wc_conflict_description2_t self, char their_abspath)"},
- { (char *)"svn_wc_conflict_description2_t_their_abspath_get", _wrap_svn_wc_conflict_description2_t_their_abspath_get, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_their_abspath_get(svn_wc_conflict_description2_t self) -> char"},
- { (char *)"svn_wc_conflict_description2_t_my_abspath_set", _wrap_svn_wc_conflict_description2_t_my_abspath_set, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_my_abspath_set(svn_wc_conflict_description2_t self, char my_abspath)"},
- { (char *)"svn_wc_conflict_description2_t_my_abspath_get", _wrap_svn_wc_conflict_description2_t_my_abspath_get, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_my_abspath_get(svn_wc_conflict_description2_t self) -> char"},
- { (char *)"svn_wc_conflict_description2_t_merged_file_set", _wrap_svn_wc_conflict_description2_t_merged_file_set, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_merged_file_set(svn_wc_conflict_description2_t self, char merged_file)"},
- { (char *)"svn_wc_conflict_description2_t_merged_file_get", _wrap_svn_wc_conflict_description2_t_merged_file_get, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_merged_file_get(svn_wc_conflict_description2_t self) -> char"},
+ { (char *)"svn_wc_conflict_description2_t_base_abspath_set", _wrap_svn_wc_conflict_description2_t_base_abspath_set, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_base_abspath_set(svn_wc_conflict_description2_t self, char const * base_abspath)"},
+ { (char *)"svn_wc_conflict_description2_t_base_abspath_get", _wrap_svn_wc_conflict_description2_t_base_abspath_get, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_base_abspath_get(svn_wc_conflict_description2_t self) -> char const *"},
+ { (char *)"svn_wc_conflict_description2_t_their_abspath_set", _wrap_svn_wc_conflict_description2_t_their_abspath_set, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_their_abspath_set(svn_wc_conflict_description2_t self, char const * their_abspath)"},
+ { (char *)"svn_wc_conflict_description2_t_their_abspath_get", _wrap_svn_wc_conflict_description2_t_their_abspath_get, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_their_abspath_get(svn_wc_conflict_description2_t self) -> char const *"},
+ { (char *)"svn_wc_conflict_description2_t_my_abspath_set", _wrap_svn_wc_conflict_description2_t_my_abspath_set, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_my_abspath_set(svn_wc_conflict_description2_t self, char const * my_abspath)"},
+ { (char *)"svn_wc_conflict_description2_t_my_abspath_get", _wrap_svn_wc_conflict_description2_t_my_abspath_get, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_my_abspath_get(svn_wc_conflict_description2_t self) -> char const *"},
+ { (char *)"svn_wc_conflict_description2_t_merged_file_set", _wrap_svn_wc_conflict_description2_t_merged_file_set, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_merged_file_set(svn_wc_conflict_description2_t self, char const * merged_file)"},
+ { (char *)"svn_wc_conflict_description2_t_merged_file_get", _wrap_svn_wc_conflict_description2_t_merged_file_get, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_merged_file_get(svn_wc_conflict_description2_t self) -> char const *"},
{ (char *)"svn_wc_conflict_description2_t_operation_set", _wrap_svn_wc_conflict_description2_t_operation_set, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_operation_set(svn_wc_conflict_description2_t self, svn_wc_operation_t operation)"},
{ (char *)"svn_wc_conflict_description2_t_operation_get", _wrap_svn_wc_conflict_description2_t_operation_get, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_operation_get(svn_wc_conflict_description2_t self) -> svn_wc_operation_t"},
{ (char *)"svn_wc_conflict_description2_t_src_left_version_set", _wrap_svn_wc_conflict_description2_t_src_left_version_set, METH_VARARGS, (char *)"svn_wc_conflict_description2_t_src_left_version_set(svn_wc_conflict_description2_t self, svn_wc_conflict_version_t src_left_version)"},
@@ -38489,32 +39363,32 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"new_svn_wc_conflict_description2_t", _wrap_new_svn_wc_conflict_description2_t, METH_VARARGS, (char *)"new_svn_wc_conflict_description2_t() -> svn_wc_conflict_description2_t"},
{ (char *)"delete_svn_wc_conflict_description2_t", _wrap_delete_svn_wc_conflict_description2_t, METH_VARARGS, (char *)"delete_svn_wc_conflict_description2_t(svn_wc_conflict_description2_t self)"},
{ (char *)"svn_wc_conflict_description2_t_swigregister", svn_wc_conflict_description2_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_wc_conflict_description_t_path_set", _wrap_svn_wc_conflict_description_t_path_set, METH_VARARGS, (char *)"svn_wc_conflict_description_t_path_set(svn_wc_conflict_description_t self, char path)"},
- { (char *)"svn_wc_conflict_description_t_path_get", _wrap_svn_wc_conflict_description_t_path_get, METH_VARARGS, (char *)"svn_wc_conflict_description_t_path_get(svn_wc_conflict_description_t self) -> char"},
+ { (char *)"svn_wc_conflict_description_t_path_set", _wrap_svn_wc_conflict_description_t_path_set, METH_VARARGS, (char *)"svn_wc_conflict_description_t_path_set(svn_wc_conflict_description_t self, char const * path)"},
+ { (char *)"svn_wc_conflict_description_t_path_get", _wrap_svn_wc_conflict_description_t_path_get, METH_VARARGS, (char *)"svn_wc_conflict_description_t_path_get(svn_wc_conflict_description_t self) -> char const *"},
{ (char *)"svn_wc_conflict_description_t_node_kind_set", _wrap_svn_wc_conflict_description_t_node_kind_set, METH_VARARGS, (char *)"svn_wc_conflict_description_t_node_kind_set(svn_wc_conflict_description_t self, svn_node_kind_t node_kind)"},
{ (char *)"svn_wc_conflict_description_t_node_kind_get", _wrap_svn_wc_conflict_description_t_node_kind_get, METH_VARARGS, (char *)"svn_wc_conflict_description_t_node_kind_get(svn_wc_conflict_description_t self) -> svn_node_kind_t"},
{ (char *)"svn_wc_conflict_description_t_kind_set", _wrap_svn_wc_conflict_description_t_kind_set, METH_VARARGS, (char *)"svn_wc_conflict_description_t_kind_set(svn_wc_conflict_description_t self, svn_wc_conflict_kind_t kind)"},
{ (char *)"svn_wc_conflict_description_t_kind_get", _wrap_svn_wc_conflict_description_t_kind_get, METH_VARARGS, (char *)"svn_wc_conflict_description_t_kind_get(svn_wc_conflict_description_t self) -> svn_wc_conflict_kind_t"},
- { (char *)"svn_wc_conflict_description_t_property_name_set", _wrap_svn_wc_conflict_description_t_property_name_set, METH_VARARGS, (char *)"svn_wc_conflict_description_t_property_name_set(svn_wc_conflict_description_t self, char property_name)"},
- { (char *)"svn_wc_conflict_description_t_property_name_get", _wrap_svn_wc_conflict_description_t_property_name_get, METH_VARARGS, (char *)"svn_wc_conflict_description_t_property_name_get(svn_wc_conflict_description_t self) -> char"},
+ { (char *)"svn_wc_conflict_description_t_property_name_set", _wrap_svn_wc_conflict_description_t_property_name_set, METH_VARARGS, (char *)"svn_wc_conflict_description_t_property_name_set(svn_wc_conflict_description_t self, char const * property_name)"},
+ { (char *)"svn_wc_conflict_description_t_property_name_get", _wrap_svn_wc_conflict_description_t_property_name_get, METH_VARARGS, (char *)"svn_wc_conflict_description_t_property_name_get(svn_wc_conflict_description_t self) -> char const *"},
{ (char *)"svn_wc_conflict_description_t_is_binary_set", _wrap_svn_wc_conflict_description_t_is_binary_set, METH_VARARGS, (char *)"svn_wc_conflict_description_t_is_binary_set(svn_wc_conflict_description_t self, svn_boolean_t is_binary)"},
{ (char *)"svn_wc_conflict_description_t_is_binary_get", _wrap_svn_wc_conflict_description_t_is_binary_get, METH_VARARGS, (char *)"svn_wc_conflict_description_t_is_binary_get(svn_wc_conflict_description_t self) -> svn_boolean_t"},
- { (char *)"svn_wc_conflict_description_t_mime_type_set", _wrap_svn_wc_conflict_description_t_mime_type_set, METH_VARARGS, (char *)"svn_wc_conflict_description_t_mime_type_set(svn_wc_conflict_description_t self, char mime_type)"},
- { (char *)"svn_wc_conflict_description_t_mime_type_get", _wrap_svn_wc_conflict_description_t_mime_type_get, METH_VARARGS, (char *)"svn_wc_conflict_description_t_mime_type_get(svn_wc_conflict_description_t self) -> char"},
- { (char *)"svn_wc_conflict_description_t_access_set", _wrap_svn_wc_conflict_description_t_access_set, METH_VARARGS, (char *)"svn_wc_conflict_description_t_access_set(svn_wc_conflict_description_t self, svn_wc_adm_access_t access)"},
- { (char *)"svn_wc_conflict_description_t_access_get", _wrap_svn_wc_conflict_description_t_access_get, METH_VARARGS, (char *)"svn_wc_conflict_description_t_access_get(svn_wc_conflict_description_t self) -> svn_wc_adm_access_t"},
+ { (char *)"svn_wc_conflict_description_t_mime_type_set", _wrap_svn_wc_conflict_description_t_mime_type_set, METH_VARARGS, (char *)"svn_wc_conflict_description_t_mime_type_set(svn_wc_conflict_description_t self, char const * mime_type)"},
+ { (char *)"svn_wc_conflict_description_t_mime_type_get", _wrap_svn_wc_conflict_description_t_mime_type_get, METH_VARARGS, (char *)"svn_wc_conflict_description_t_mime_type_get(svn_wc_conflict_description_t self) -> char const *"},
+ { (char *)"svn_wc_conflict_description_t_access_set", _wrap_svn_wc_conflict_description_t_access_set, METH_VARARGS, (char *)"svn_wc_conflict_description_t_access_set(svn_wc_conflict_description_t self, svn_wc_adm_access_t * access)"},
+ { (char *)"svn_wc_conflict_description_t_access_get", _wrap_svn_wc_conflict_description_t_access_get, METH_VARARGS, (char *)"svn_wc_conflict_description_t_access_get(svn_wc_conflict_description_t self) -> svn_wc_adm_access_t *"},
{ (char *)"svn_wc_conflict_description_t_action_set", _wrap_svn_wc_conflict_description_t_action_set, METH_VARARGS, (char *)"svn_wc_conflict_description_t_action_set(svn_wc_conflict_description_t self, svn_wc_conflict_action_t action)"},
{ (char *)"svn_wc_conflict_description_t_action_get", _wrap_svn_wc_conflict_description_t_action_get, METH_VARARGS, (char *)"svn_wc_conflict_description_t_action_get(svn_wc_conflict_description_t self) -> svn_wc_conflict_action_t"},
{ (char *)"svn_wc_conflict_description_t_reason_set", _wrap_svn_wc_conflict_description_t_reason_set, METH_VARARGS, (char *)"svn_wc_conflict_description_t_reason_set(svn_wc_conflict_description_t self, svn_wc_conflict_reason_t reason)"},
{ (char *)"svn_wc_conflict_description_t_reason_get", _wrap_svn_wc_conflict_description_t_reason_get, METH_VARARGS, (char *)"svn_wc_conflict_description_t_reason_get(svn_wc_conflict_description_t self) -> svn_wc_conflict_reason_t"},
- { (char *)"svn_wc_conflict_description_t_base_file_set", _wrap_svn_wc_conflict_description_t_base_file_set, METH_VARARGS, (char *)"svn_wc_conflict_description_t_base_file_set(svn_wc_conflict_description_t self, char base_file)"},
- { (char *)"svn_wc_conflict_description_t_base_file_get", _wrap_svn_wc_conflict_description_t_base_file_get, METH_VARARGS, (char *)"svn_wc_conflict_description_t_base_file_get(svn_wc_conflict_description_t self) -> char"},
- { (char *)"svn_wc_conflict_description_t_their_file_set", _wrap_svn_wc_conflict_description_t_their_file_set, METH_VARARGS, (char *)"svn_wc_conflict_description_t_their_file_set(svn_wc_conflict_description_t self, char their_file)"},
- { (char *)"svn_wc_conflict_description_t_their_file_get", _wrap_svn_wc_conflict_description_t_their_file_get, METH_VARARGS, (char *)"svn_wc_conflict_description_t_their_file_get(svn_wc_conflict_description_t self) -> char"},
- { (char *)"svn_wc_conflict_description_t_my_file_set", _wrap_svn_wc_conflict_description_t_my_file_set, METH_VARARGS, (char *)"svn_wc_conflict_description_t_my_file_set(svn_wc_conflict_description_t self, char my_file)"},
- { (char *)"svn_wc_conflict_description_t_my_file_get", _wrap_svn_wc_conflict_description_t_my_file_get, METH_VARARGS, (char *)"svn_wc_conflict_description_t_my_file_get(svn_wc_conflict_description_t self) -> char"},
- { (char *)"svn_wc_conflict_description_t_merged_file_set", _wrap_svn_wc_conflict_description_t_merged_file_set, METH_VARARGS, (char *)"svn_wc_conflict_description_t_merged_file_set(svn_wc_conflict_description_t self, char merged_file)"},
- { (char *)"svn_wc_conflict_description_t_merged_file_get", _wrap_svn_wc_conflict_description_t_merged_file_get, METH_VARARGS, (char *)"svn_wc_conflict_description_t_merged_file_get(svn_wc_conflict_description_t self) -> char"},
+ { (char *)"svn_wc_conflict_description_t_base_file_set", _wrap_svn_wc_conflict_description_t_base_file_set, METH_VARARGS, (char *)"svn_wc_conflict_description_t_base_file_set(svn_wc_conflict_description_t self, char const * base_file)"},
+ { (char *)"svn_wc_conflict_description_t_base_file_get", _wrap_svn_wc_conflict_description_t_base_file_get, METH_VARARGS, (char *)"svn_wc_conflict_description_t_base_file_get(svn_wc_conflict_description_t self) -> char const *"},
+ { (char *)"svn_wc_conflict_description_t_their_file_set", _wrap_svn_wc_conflict_description_t_their_file_set, METH_VARARGS, (char *)"svn_wc_conflict_description_t_their_file_set(svn_wc_conflict_description_t self, char const * their_file)"},
+ { (char *)"svn_wc_conflict_description_t_their_file_get", _wrap_svn_wc_conflict_description_t_their_file_get, METH_VARARGS, (char *)"svn_wc_conflict_description_t_their_file_get(svn_wc_conflict_description_t self) -> char const *"},
+ { (char *)"svn_wc_conflict_description_t_my_file_set", _wrap_svn_wc_conflict_description_t_my_file_set, METH_VARARGS, (char *)"svn_wc_conflict_description_t_my_file_set(svn_wc_conflict_description_t self, char const * my_file)"},
+ { (char *)"svn_wc_conflict_description_t_my_file_get", _wrap_svn_wc_conflict_description_t_my_file_get, METH_VARARGS, (char *)"svn_wc_conflict_description_t_my_file_get(svn_wc_conflict_description_t self) -> char const *"},
+ { (char *)"svn_wc_conflict_description_t_merged_file_set", _wrap_svn_wc_conflict_description_t_merged_file_set, METH_VARARGS, (char *)"svn_wc_conflict_description_t_merged_file_set(svn_wc_conflict_description_t self, char const * merged_file)"},
+ { (char *)"svn_wc_conflict_description_t_merged_file_get", _wrap_svn_wc_conflict_description_t_merged_file_get, METH_VARARGS, (char *)"svn_wc_conflict_description_t_merged_file_get(svn_wc_conflict_description_t self) -> char const *"},
{ (char *)"svn_wc_conflict_description_t_operation_set", _wrap_svn_wc_conflict_description_t_operation_set, METH_VARARGS, (char *)"svn_wc_conflict_description_t_operation_set(svn_wc_conflict_description_t self, svn_wc_operation_t operation)"},
{ (char *)"svn_wc_conflict_description_t_operation_get", _wrap_svn_wc_conflict_description_t_operation_get, METH_VARARGS, (char *)"svn_wc_conflict_description_t_operation_get(svn_wc_conflict_description_t self) -> svn_wc_operation_t"},
{ (char *)"svn_wc_conflict_description_t_src_left_version_set", _wrap_svn_wc_conflict_description_t_src_left_version_set, METH_VARARGS, (char *)"svn_wc_conflict_description_t_src_left_version_set(svn_wc_conflict_description_t self, svn_wc_conflict_version_t src_left_version)"},
@@ -38524,136 +39398,127 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"new_svn_wc_conflict_description_t", _wrap_new_svn_wc_conflict_description_t, METH_VARARGS, (char *)"new_svn_wc_conflict_description_t() -> svn_wc_conflict_description_t"},
{ (char *)"delete_svn_wc_conflict_description_t", _wrap_delete_svn_wc_conflict_description_t, METH_VARARGS, (char *)"delete_svn_wc_conflict_description_t(svn_wc_conflict_description_t self)"},
{ (char *)"svn_wc_conflict_description_t_swigregister", svn_wc_conflict_description_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_wc_conflict_description_create_text2", _wrap_svn_wc_conflict_description_create_text2, METH_VARARGS, (char *)"svn_wc_conflict_description_create_text2(char local_abspath, apr_pool_t result_pool) -> svn_wc_conflict_description2_t"},
- { (char *)"svn_wc_conflict_description_create_text", _wrap_svn_wc_conflict_description_create_text, METH_VARARGS, (char *)"svn_wc_conflict_description_create_text(char path, svn_wc_adm_access_t adm_access, apr_pool_t pool) -> svn_wc_conflict_description_t"},
+ { (char *)"svn_wc_conflict_description_create_text2", _wrap_svn_wc_conflict_description_create_text2, METH_VARARGS, (char *)"svn_wc_conflict_description_create_text2(char const * local_abspath, apr_pool_t result_pool) -> svn_wc_conflict_description2_t"},
+ { (char *)"svn_wc_conflict_description_create_text", _wrap_svn_wc_conflict_description_create_text, METH_VARARGS, (char *)"svn_wc_conflict_description_create_text(char const * path, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_wc_conflict_description_t"},
{ (char *)"svn_wc_conflict_description_create_prop2", _wrap_svn_wc_conflict_description_create_prop2, METH_VARARGS, (char *)"\n"
- "svn_wc_conflict_description_create_prop2(char local_abspath, svn_node_kind_t node_kind, char property_name, \n"
+ "svn_wc_conflict_description_create_prop2(char const * local_abspath, svn_node_kind_t node_kind, char const * property_name, \n"
" apr_pool_t result_pool) -> svn_wc_conflict_description2_t\n"
""},
{ (char *)"svn_wc_conflict_description_create_prop", _wrap_svn_wc_conflict_description_create_prop, METH_VARARGS, (char *)"\n"
- "svn_wc_conflict_description_create_prop(char path, svn_wc_adm_access_t adm_access, svn_node_kind_t node_kind, \n"
- " char property_name, apr_pool_t pool) -> svn_wc_conflict_description_t\n"
+ "svn_wc_conflict_description_create_prop(char const * path, svn_wc_adm_access_t * adm_access, svn_node_kind_t node_kind, char const * property_name, \n"
+ " apr_pool_t pool) -> svn_wc_conflict_description_t\n"
""},
{ (char *)"svn_wc_conflict_description_create_tree2", _wrap_svn_wc_conflict_description_create_tree2, METH_VARARGS, (char *)"\n"
- "svn_wc_conflict_description_create_tree2(char local_abspath, svn_node_kind_t node_kind, svn_wc_operation_t operation, \n"
- " svn_wc_conflict_version_t src_left_version, \n"
- " svn_wc_conflict_version_t src_right_version, \n"
+ "svn_wc_conflict_description_create_tree2(char const * local_abspath, svn_node_kind_t node_kind, svn_wc_operation_t operation, \n"
+ " svn_wc_conflict_version_t src_left_version, svn_wc_conflict_version_t src_right_version, \n"
" apr_pool_t result_pool) -> svn_wc_conflict_description2_t\n"
""},
{ (char *)"svn_wc_conflict_description_create_tree", _wrap_svn_wc_conflict_description_create_tree, METH_VARARGS, (char *)"\n"
- "svn_wc_conflict_description_create_tree(char path, svn_wc_adm_access_t adm_access, svn_node_kind_t node_kind, \n"
- " svn_wc_operation_t operation, \n"
- " svn_wc_conflict_version_t src_left_version, \n"
- " svn_wc_conflict_version_t src_right_version, \n"
+ "svn_wc_conflict_description_create_tree(char const * path, svn_wc_adm_access_t * adm_access, svn_node_kind_t node_kind, svn_wc_operation_t operation, \n"
+ " svn_wc_conflict_version_t src_left_version, svn_wc_conflict_version_t src_right_version, \n"
" apr_pool_t pool) -> svn_wc_conflict_description_t\n"
""},
{ (char *)"svn_wc__conflict_description2_dup", _wrap_svn_wc__conflict_description2_dup, METH_VARARGS, (char *)"svn_wc__conflict_description2_dup(svn_wc_conflict_description2_t conflict, apr_pool_t result_pool) -> svn_wc_conflict_description2_t"},
{ (char *)"svn_wc_conflict_result_t_choice_set", _wrap_svn_wc_conflict_result_t_choice_set, METH_VARARGS, (char *)"svn_wc_conflict_result_t_choice_set(svn_wc_conflict_result_t self, svn_wc_conflict_choice_t choice)"},
{ (char *)"svn_wc_conflict_result_t_choice_get", _wrap_svn_wc_conflict_result_t_choice_get, METH_VARARGS, (char *)"svn_wc_conflict_result_t_choice_get(svn_wc_conflict_result_t self) -> svn_wc_conflict_choice_t"},
- { (char *)"svn_wc_conflict_result_t_merged_file_set", _wrap_svn_wc_conflict_result_t_merged_file_set, METH_VARARGS, (char *)"svn_wc_conflict_result_t_merged_file_set(svn_wc_conflict_result_t self, char merged_file)"},
- { (char *)"svn_wc_conflict_result_t_merged_file_get", _wrap_svn_wc_conflict_result_t_merged_file_get, METH_VARARGS, (char *)"svn_wc_conflict_result_t_merged_file_get(svn_wc_conflict_result_t self) -> char"},
+ { (char *)"svn_wc_conflict_result_t_merged_file_set", _wrap_svn_wc_conflict_result_t_merged_file_set, METH_VARARGS, (char *)"svn_wc_conflict_result_t_merged_file_set(svn_wc_conflict_result_t self, char const * merged_file)"},
+ { (char *)"svn_wc_conflict_result_t_merged_file_get", _wrap_svn_wc_conflict_result_t_merged_file_get, METH_VARARGS, (char *)"svn_wc_conflict_result_t_merged_file_get(svn_wc_conflict_result_t self) -> char const *"},
{ (char *)"svn_wc_conflict_result_t_save_merged_set", _wrap_svn_wc_conflict_result_t_save_merged_set, METH_VARARGS, (char *)"svn_wc_conflict_result_t_save_merged_set(svn_wc_conflict_result_t self, svn_boolean_t save_merged)"},
{ (char *)"svn_wc_conflict_result_t_save_merged_get", _wrap_svn_wc_conflict_result_t_save_merged_get, METH_VARARGS, (char *)"svn_wc_conflict_result_t_save_merged_get(svn_wc_conflict_result_t self) -> svn_boolean_t"},
{ (char *)"new_svn_wc_conflict_result_t", _wrap_new_svn_wc_conflict_result_t, METH_VARARGS, (char *)"new_svn_wc_conflict_result_t() -> svn_wc_conflict_result_t"},
{ (char *)"delete_svn_wc_conflict_result_t", _wrap_delete_svn_wc_conflict_result_t, METH_VARARGS, (char *)"delete_svn_wc_conflict_result_t(svn_wc_conflict_result_t self)"},
{ (char *)"svn_wc_conflict_result_t_swigregister", svn_wc_conflict_result_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_wc_create_conflict_result", _wrap_svn_wc_create_conflict_result, METH_VARARGS, (char *)"\n"
- "svn_wc_create_conflict_result(svn_wc_conflict_choice_t choice, char merged_file, \n"
- " apr_pool_t pool) -> svn_wc_conflict_result_t\n"
- ""},
- { (char *)"svn_wc_diff_callbacks4_t_file_opened_set", _wrap_svn_wc_diff_callbacks4_t_file_opened_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_file_opened_set(svn_wc_diff_callbacks4_t self, svn_error_t file_opened)"},
- { (char *)"svn_wc_diff_callbacks4_t_file_opened_get", _wrap_svn_wc_diff_callbacks4_t_file_opened_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_file_opened_get(svn_wc_diff_callbacks4_t self) -> svn_error_t"},
- { (char *)"svn_wc_diff_callbacks4_t_file_changed_set", _wrap_svn_wc_diff_callbacks4_t_file_changed_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_file_changed_set(svn_wc_diff_callbacks4_t self, svn_error_t file_changed)"},
- { (char *)"svn_wc_diff_callbacks4_t_file_changed_get", _wrap_svn_wc_diff_callbacks4_t_file_changed_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_file_changed_get(svn_wc_diff_callbacks4_t self) -> svn_error_t"},
- { (char *)"svn_wc_diff_callbacks4_t_file_added_set", _wrap_svn_wc_diff_callbacks4_t_file_added_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_file_added_set(svn_wc_diff_callbacks4_t self, svn_error_t file_added)"},
- { (char *)"svn_wc_diff_callbacks4_t_file_added_get", _wrap_svn_wc_diff_callbacks4_t_file_added_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_file_added_get(svn_wc_diff_callbacks4_t self) -> svn_error_t"},
- { (char *)"svn_wc_diff_callbacks4_t_file_deleted_set", _wrap_svn_wc_diff_callbacks4_t_file_deleted_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_file_deleted_set(svn_wc_diff_callbacks4_t self, svn_error_t file_deleted)"},
- { (char *)"svn_wc_diff_callbacks4_t_file_deleted_get", _wrap_svn_wc_diff_callbacks4_t_file_deleted_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_file_deleted_get(svn_wc_diff_callbacks4_t self) -> svn_error_t"},
- { (char *)"svn_wc_diff_callbacks4_t_dir_deleted_set", _wrap_svn_wc_diff_callbacks4_t_dir_deleted_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_dir_deleted_set(svn_wc_diff_callbacks4_t self, svn_error_t dir_deleted)"},
- { (char *)"svn_wc_diff_callbacks4_t_dir_deleted_get", _wrap_svn_wc_diff_callbacks4_t_dir_deleted_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_dir_deleted_get(svn_wc_diff_callbacks4_t self) -> svn_error_t"},
- { (char *)"svn_wc_diff_callbacks4_t_dir_opened_set", _wrap_svn_wc_diff_callbacks4_t_dir_opened_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_dir_opened_set(svn_wc_diff_callbacks4_t self, svn_error_t dir_opened)"},
- { (char *)"svn_wc_diff_callbacks4_t_dir_opened_get", _wrap_svn_wc_diff_callbacks4_t_dir_opened_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_dir_opened_get(svn_wc_diff_callbacks4_t self) -> svn_error_t"},
- { (char *)"svn_wc_diff_callbacks4_t_dir_added_set", _wrap_svn_wc_diff_callbacks4_t_dir_added_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_dir_added_set(svn_wc_diff_callbacks4_t self, svn_error_t dir_added)"},
- { (char *)"svn_wc_diff_callbacks4_t_dir_added_get", _wrap_svn_wc_diff_callbacks4_t_dir_added_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_dir_added_get(svn_wc_diff_callbacks4_t self) -> svn_error_t"},
- { (char *)"svn_wc_diff_callbacks4_t_dir_props_changed_set", _wrap_svn_wc_diff_callbacks4_t_dir_props_changed_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_dir_props_changed_set(svn_wc_diff_callbacks4_t self, svn_error_t dir_props_changed)"},
- { (char *)"svn_wc_diff_callbacks4_t_dir_props_changed_get", _wrap_svn_wc_diff_callbacks4_t_dir_props_changed_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_dir_props_changed_get(svn_wc_diff_callbacks4_t self) -> svn_error_t"},
- { (char *)"svn_wc_diff_callbacks4_t_dir_closed_set", _wrap_svn_wc_diff_callbacks4_t_dir_closed_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_dir_closed_set(svn_wc_diff_callbacks4_t self, svn_error_t dir_closed)"},
- { (char *)"svn_wc_diff_callbacks4_t_dir_closed_get", _wrap_svn_wc_diff_callbacks4_t_dir_closed_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_dir_closed_get(svn_wc_diff_callbacks4_t self) -> svn_error_t"},
+ { (char *)"svn_wc_create_conflict_result", _wrap_svn_wc_create_conflict_result, METH_VARARGS, (char *)"svn_wc_create_conflict_result(svn_wc_conflict_choice_t choice, char const * merged_file, apr_pool_t pool) -> svn_wc_conflict_result_t"},
+ { (char *)"svn_wc_diff_callbacks4_t_file_opened_set", _wrap_svn_wc_diff_callbacks4_t_file_opened_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_file_opened_set(svn_wc_diff_callbacks4_t self, svn_error_t *(*)(svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,void *,apr_pool_t *) file_opened)"},
+ { (char *)"svn_wc_diff_callbacks4_t_file_opened_get", _wrap_svn_wc_diff_callbacks4_t_file_opened_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_file_opened_get(svn_wc_diff_callbacks4_t self) -> svn_error_t *(*)(svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,void *,apr_pool_t *)"},
+ { (char *)"svn_wc_diff_callbacks4_t_file_changed_set", _wrap_svn_wc_diff_callbacks4_t_file_changed_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_file_changed_set(svn_wc_diff_callbacks4_t self, svn_error_t *(*)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *) file_changed)"},
+ { (char *)"svn_wc_diff_callbacks4_t_file_changed_get", _wrap_svn_wc_diff_callbacks4_t_file_changed_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_file_changed_get(svn_wc_diff_callbacks4_t self) -> svn_error_t *(*)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *)"},
+ { (char *)"svn_wc_diff_callbacks4_t_file_added_set", _wrap_svn_wc_diff_callbacks4_t_file_added_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_file_added_set(svn_wc_diff_callbacks4_t self, svn_error_t *(*)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,char const *,svn_revnum_t,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *) file_added)"},
+ { (char *)"svn_wc_diff_callbacks4_t_file_added_get", _wrap_svn_wc_diff_callbacks4_t_file_added_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_file_added_get(svn_wc_diff_callbacks4_t self) -> svn_error_t *(*)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,char const *,svn_revnum_t,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *)"},
+ { (char *)"svn_wc_diff_callbacks4_t_file_deleted_set", _wrap_svn_wc_diff_callbacks4_t_file_deleted_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_file_deleted_set(svn_wc_diff_callbacks4_t self, svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *,apr_pool_t *) file_deleted)"},
+ { (char *)"svn_wc_diff_callbacks4_t_file_deleted_get", _wrap_svn_wc_diff_callbacks4_t_file_deleted_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_file_deleted_get(svn_wc_diff_callbacks4_t self) -> svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *,apr_pool_t *)"},
+ { (char *)"svn_wc_diff_callbacks4_t_dir_deleted_set", _wrap_svn_wc_diff_callbacks4_t_dir_deleted_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_dir_deleted_set(svn_wc_diff_callbacks4_t self, svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *,apr_pool_t *) dir_deleted)"},
+ { (char *)"svn_wc_diff_callbacks4_t_dir_deleted_get", _wrap_svn_wc_diff_callbacks4_t_dir_deleted_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_dir_deleted_get(svn_wc_diff_callbacks4_t self) -> svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *,apr_pool_t *)"},
+ { (char *)"svn_wc_diff_callbacks4_t_dir_opened_set", _wrap_svn_wc_diff_callbacks4_t_dir_opened_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_dir_opened_set(svn_wc_diff_callbacks4_t self, svn_error_t *(*)(svn_boolean_t *,svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,void *,apr_pool_t *) dir_opened)"},
+ { (char *)"svn_wc_diff_callbacks4_t_dir_opened_get", _wrap_svn_wc_diff_callbacks4_t_dir_opened_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_dir_opened_get(svn_wc_diff_callbacks4_t self) -> svn_error_t *(*)(svn_boolean_t *,svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,void *,apr_pool_t *)"},
+ { (char *)"svn_wc_diff_callbacks4_t_dir_added_set", _wrap_svn_wc_diff_callbacks4_t_dir_added_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_dir_added_set(svn_wc_diff_callbacks4_t self, svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,char const *,svn_revnum_t,void *,apr_pool_t *) dir_added)"},
+ { (char *)"svn_wc_diff_callbacks4_t_dir_added_get", _wrap_svn_wc_diff_callbacks4_t_dir_added_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_dir_added_get(svn_wc_diff_callbacks4_t self) -> svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,char const *,svn_revnum_t,void *,apr_pool_t *)"},
+ { (char *)"svn_wc_diff_callbacks4_t_dir_props_changed_set", _wrap_svn_wc_diff_callbacks4_t_dir_props_changed_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_dir_props_changed_set(svn_wc_diff_callbacks4_t self, svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_boolean_t,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *) dir_props_changed)"},
+ { (char *)"svn_wc_diff_callbacks4_t_dir_props_changed_get", _wrap_svn_wc_diff_callbacks4_t_dir_props_changed_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_dir_props_changed_get(svn_wc_diff_callbacks4_t self) -> svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_boolean_t,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *)"},
+ { (char *)"svn_wc_diff_callbacks4_t_dir_closed_set", _wrap_svn_wc_diff_callbacks4_t_dir_closed_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_dir_closed_set(svn_wc_diff_callbacks4_t self, svn_error_t *(*)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_boolean_t,void *,apr_pool_t *) dir_closed)"},
+ { (char *)"svn_wc_diff_callbacks4_t_dir_closed_get", _wrap_svn_wc_diff_callbacks4_t_dir_closed_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks4_t_dir_closed_get(svn_wc_diff_callbacks4_t self) -> svn_error_t *(*)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_boolean_t,void *,apr_pool_t *)"},
{ (char *)"new_svn_wc_diff_callbacks4_t", _wrap_new_svn_wc_diff_callbacks4_t, METH_VARARGS, (char *)"new_svn_wc_diff_callbacks4_t() -> svn_wc_diff_callbacks4_t"},
{ (char *)"delete_svn_wc_diff_callbacks4_t", _wrap_delete_svn_wc_diff_callbacks4_t, METH_VARARGS, (char *)"delete_svn_wc_diff_callbacks4_t(svn_wc_diff_callbacks4_t self)"},
{ (char *)"svn_wc_diff_callbacks4_t_swigregister", svn_wc_diff_callbacks4_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_wc_diff_callbacks3_t_file_changed_set", _wrap_svn_wc_diff_callbacks3_t_file_changed_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_file_changed_set(svn_wc_diff_callbacks3_t self, svn_error_t file_changed)"},
- { (char *)"svn_wc_diff_callbacks3_t_file_changed_get", _wrap_svn_wc_diff_callbacks3_t_file_changed_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_file_changed_get(svn_wc_diff_callbacks3_t self) -> svn_error_t"},
- { (char *)"svn_wc_diff_callbacks3_t_file_added_set", _wrap_svn_wc_diff_callbacks3_t_file_added_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_file_added_set(svn_wc_diff_callbacks3_t self, svn_error_t file_added)"},
- { (char *)"svn_wc_diff_callbacks3_t_file_added_get", _wrap_svn_wc_diff_callbacks3_t_file_added_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_file_added_get(svn_wc_diff_callbacks3_t self) -> svn_error_t"},
- { (char *)"svn_wc_diff_callbacks3_t_file_deleted_set", _wrap_svn_wc_diff_callbacks3_t_file_deleted_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_file_deleted_set(svn_wc_diff_callbacks3_t self, svn_error_t file_deleted)"},
- { (char *)"svn_wc_diff_callbacks3_t_file_deleted_get", _wrap_svn_wc_diff_callbacks3_t_file_deleted_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_file_deleted_get(svn_wc_diff_callbacks3_t self) -> svn_error_t"},
- { (char *)"svn_wc_diff_callbacks3_t_dir_added_set", _wrap_svn_wc_diff_callbacks3_t_dir_added_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_dir_added_set(svn_wc_diff_callbacks3_t self, svn_error_t dir_added)"},
- { (char *)"svn_wc_diff_callbacks3_t_dir_added_get", _wrap_svn_wc_diff_callbacks3_t_dir_added_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_dir_added_get(svn_wc_diff_callbacks3_t self) -> svn_error_t"},
- { (char *)"svn_wc_diff_callbacks3_t_dir_deleted_set", _wrap_svn_wc_diff_callbacks3_t_dir_deleted_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_dir_deleted_set(svn_wc_diff_callbacks3_t self, svn_error_t dir_deleted)"},
- { (char *)"svn_wc_diff_callbacks3_t_dir_deleted_get", _wrap_svn_wc_diff_callbacks3_t_dir_deleted_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_dir_deleted_get(svn_wc_diff_callbacks3_t self) -> svn_error_t"},
- { (char *)"svn_wc_diff_callbacks3_t_dir_props_changed_set", _wrap_svn_wc_diff_callbacks3_t_dir_props_changed_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_dir_props_changed_set(svn_wc_diff_callbacks3_t self, svn_error_t dir_props_changed)"},
- { (char *)"svn_wc_diff_callbacks3_t_dir_props_changed_get", _wrap_svn_wc_diff_callbacks3_t_dir_props_changed_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_dir_props_changed_get(svn_wc_diff_callbacks3_t self) -> svn_error_t"},
- { (char *)"svn_wc_diff_callbacks3_t_dir_opened_set", _wrap_svn_wc_diff_callbacks3_t_dir_opened_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_dir_opened_set(svn_wc_diff_callbacks3_t self, svn_error_t dir_opened)"},
- { (char *)"svn_wc_diff_callbacks3_t_dir_opened_get", _wrap_svn_wc_diff_callbacks3_t_dir_opened_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_dir_opened_get(svn_wc_diff_callbacks3_t self) -> svn_error_t"},
- { (char *)"svn_wc_diff_callbacks3_t_dir_closed_set", _wrap_svn_wc_diff_callbacks3_t_dir_closed_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_dir_closed_set(svn_wc_diff_callbacks3_t self, svn_error_t dir_closed)"},
- { (char *)"svn_wc_diff_callbacks3_t_dir_closed_get", _wrap_svn_wc_diff_callbacks3_t_dir_closed_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_dir_closed_get(svn_wc_diff_callbacks3_t self) -> svn_error_t"},
+ { (char *)"svn_wc_diff_callbacks3_t_file_changed_set", _wrap_svn_wc_diff_callbacks3_t_file_changed_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_file_changed_set(svn_wc_diff_callbacks3_t self, svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *) file_changed)"},
+ { (char *)"svn_wc_diff_callbacks3_t_file_changed_get", _wrap_svn_wc_diff_callbacks3_t_file_changed_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_file_changed_get(svn_wc_diff_callbacks3_t self) -> svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *)"},
+ { (char *)"svn_wc_diff_callbacks3_t_file_added_set", _wrap_svn_wc_diff_callbacks3_t_file_added_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_file_added_set(svn_wc_diff_callbacks3_t self, svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *) file_added)"},
+ { (char *)"svn_wc_diff_callbacks3_t_file_added_get", _wrap_svn_wc_diff_callbacks3_t_file_added_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_file_added_get(svn_wc_diff_callbacks3_t self) -> svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *)"},
+ { (char *)"svn_wc_diff_callbacks3_t_file_deleted_set", _wrap_svn_wc_diff_callbacks3_t_file_deleted_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_file_deleted_set(svn_wc_diff_callbacks3_t self, svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *) file_deleted)"},
+ { (char *)"svn_wc_diff_callbacks3_t_file_deleted_get", _wrap_svn_wc_diff_callbacks3_t_file_deleted_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_file_deleted_get(svn_wc_diff_callbacks3_t self) -> svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *)"},
+ { (char *)"svn_wc_diff_callbacks3_t_dir_added_set", _wrap_svn_wc_diff_callbacks3_t_dir_added_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_dir_added_set(svn_wc_diff_callbacks3_t self, svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_revnum_t,void *) dir_added)"},
+ { (char *)"svn_wc_diff_callbacks3_t_dir_added_get", _wrap_svn_wc_diff_callbacks3_t_dir_added_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_dir_added_get(svn_wc_diff_callbacks3_t self) -> svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_revnum_t,void *)"},
+ { (char *)"svn_wc_diff_callbacks3_t_dir_deleted_set", _wrap_svn_wc_diff_callbacks3_t_dir_deleted_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_dir_deleted_set(svn_wc_diff_callbacks3_t self, svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *) dir_deleted)"},
+ { (char *)"svn_wc_diff_callbacks3_t_dir_deleted_get", _wrap_svn_wc_diff_callbacks3_t_dir_deleted_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_dir_deleted_get(svn_wc_diff_callbacks3_t self) -> svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *)"},
+ { (char *)"svn_wc_diff_callbacks3_t_dir_props_changed_set", _wrap_svn_wc_diff_callbacks3_t_dir_props_changed_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_dir_props_changed_set(svn_wc_diff_callbacks3_t self, svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *) dir_props_changed)"},
+ { (char *)"svn_wc_diff_callbacks3_t_dir_props_changed_get", _wrap_svn_wc_diff_callbacks3_t_dir_props_changed_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_dir_props_changed_get(svn_wc_diff_callbacks3_t self) -> svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *)"},
+ { (char *)"svn_wc_diff_callbacks3_t_dir_opened_set", _wrap_svn_wc_diff_callbacks3_t_dir_opened_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_dir_opened_set(svn_wc_diff_callbacks3_t self, svn_error_t *(*)(svn_wc_adm_access_t *,svn_boolean_t *,char const *,svn_revnum_t,void *) dir_opened)"},
+ { (char *)"svn_wc_diff_callbacks3_t_dir_opened_get", _wrap_svn_wc_diff_callbacks3_t_dir_opened_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_dir_opened_get(svn_wc_diff_callbacks3_t self) -> svn_error_t *(*)(svn_wc_adm_access_t *,svn_boolean_t *,char const *,svn_revnum_t,void *)"},
+ { (char *)"svn_wc_diff_callbacks3_t_dir_closed_set", _wrap_svn_wc_diff_callbacks3_t_dir_closed_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_dir_closed_set(svn_wc_diff_callbacks3_t self, svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *) dir_closed)"},
+ { (char *)"svn_wc_diff_callbacks3_t_dir_closed_get", _wrap_svn_wc_diff_callbacks3_t_dir_closed_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks3_t_dir_closed_get(svn_wc_diff_callbacks3_t self) -> svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *)"},
{ (char *)"new_svn_wc_diff_callbacks3_t", _wrap_new_svn_wc_diff_callbacks3_t, METH_VARARGS, (char *)"new_svn_wc_diff_callbacks3_t() -> svn_wc_diff_callbacks3_t"},
{ (char *)"delete_svn_wc_diff_callbacks3_t", _wrap_delete_svn_wc_diff_callbacks3_t, METH_VARARGS, (char *)"delete_svn_wc_diff_callbacks3_t(svn_wc_diff_callbacks3_t self)"},
{ (char *)"svn_wc_diff_callbacks3_t_swigregister", svn_wc_diff_callbacks3_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_wc_diff_callbacks2_t_file_changed_set", _wrap_svn_wc_diff_callbacks2_t_file_changed_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks2_t_file_changed_set(svn_wc_diff_callbacks2_t self, svn_error_t file_changed)"},
- { (char *)"svn_wc_diff_callbacks2_t_file_changed_get", _wrap_svn_wc_diff_callbacks2_t_file_changed_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks2_t_file_changed_get(svn_wc_diff_callbacks2_t self) -> svn_error_t"},
- { (char *)"svn_wc_diff_callbacks2_t_file_added_set", _wrap_svn_wc_diff_callbacks2_t_file_added_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks2_t_file_added_set(svn_wc_diff_callbacks2_t self, svn_error_t file_added)"},
- { (char *)"svn_wc_diff_callbacks2_t_file_added_get", _wrap_svn_wc_diff_callbacks2_t_file_added_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks2_t_file_added_get(svn_wc_diff_callbacks2_t self) -> svn_error_t"},
- { (char *)"svn_wc_diff_callbacks2_t_file_deleted_set", _wrap_svn_wc_diff_callbacks2_t_file_deleted_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks2_t_file_deleted_set(svn_wc_diff_callbacks2_t self, svn_error_t file_deleted)"},
- { (char *)"svn_wc_diff_callbacks2_t_file_deleted_get", _wrap_svn_wc_diff_callbacks2_t_file_deleted_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks2_t_file_deleted_get(svn_wc_diff_callbacks2_t self) -> svn_error_t"},
- { (char *)"svn_wc_diff_callbacks2_t_dir_added_set", _wrap_svn_wc_diff_callbacks2_t_dir_added_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks2_t_dir_added_set(svn_wc_diff_callbacks2_t self, svn_error_t dir_added)"},
- { (char *)"svn_wc_diff_callbacks2_t_dir_added_get", _wrap_svn_wc_diff_callbacks2_t_dir_added_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks2_t_dir_added_get(svn_wc_diff_callbacks2_t self) -> svn_error_t"},
- { (char *)"svn_wc_diff_callbacks2_t_dir_deleted_set", _wrap_svn_wc_diff_callbacks2_t_dir_deleted_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks2_t_dir_deleted_set(svn_wc_diff_callbacks2_t self, svn_error_t dir_deleted)"},
- { (char *)"svn_wc_diff_callbacks2_t_dir_deleted_get", _wrap_svn_wc_diff_callbacks2_t_dir_deleted_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks2_t_dir_deleted_get(svn_wc_diff_callbacks2_t self) -> svn_error_t"},
- { (char *)"svn_wc_diff_callbacks2_t_dir_props_changed_set", _wrap_svn_wc_diff_callbacks2_t_dir_props_changed_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks2_t_dir_props_changed_set(svn_wc_diff_callbacks2_t self, svn_error_t dir_props_changed)"},
- { (char *)"svn_wc_diff_callbacks2_t_dir_props_changed_get", _wrap_svn_wc_diff_callbacks2_t_dir_props_changed_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks2_t_dir_props_changed_get(svn_wc_diff_callbacks2_t self) -> svn_error_t"},
+ { (char *)"svn_wc_diff_callbacks2_t_file_changed_set", _wrap_svn_wc_diff_callbacks2_t_file_changed_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks2_t_file_changed_set(svn_wc_diff_callbacks2_t self, svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *) file_changed)"},
+ { (char *)"svn_wc_diff_callbacks2_t_file_changed_get", _wrap_svn_wc_diff_callbacks2_t_file_changed_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks2_t_file_changed_get(svn_wc_diff_callbacks2_t self) -> svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *)"},
+ { (char *)"svn_wc_diff_callbacks2_t_file_added_set", _wrap_svn_wc_diff_callbacks2_t_file_added_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks2_t_file_added_set(svn_wc_diff_callbacks2_t self, svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *) file_added)"},
+ { (char *)"svn_wc_diff_callbacks2_t_file_added_get", _wrap_svn_wc_diff_callbacks2_t_file_added_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks2_t_file_added_get(svn_wc_diff_callbacks2_t self) -> svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *)"},
+ { (char *)"svn_wc_diff_callbacks2_t_file_deleted_set", _wrap_svn_wc_diff_callbacks2_t_file_deleted_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks2_t_file_deleted_set(svn_wc_diff_callbacks2_t self, svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *) file_deleted)"},
+ { (char *)"svn_wc_diff_callbacks2_t_file_deleted_get", _wrap_svn_wc_diff_callbacks2_t_file_deleted_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks2_t_file_deleted_get(svn_wc_diff_callbacks2_t self) -> svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *)"},
+ { (char *)"svn_wc_diff_callbacks2_t_dir_added_set", _wrap_svn_wc_diff_callbacks2_t_dir_added_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks2_t_dir_added_set(svn_wc_diff_callbacks2_t self, svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,svn_revnum_t,void *) dir_added)"},
+ { (char *)"svn_wc_diff_callbacks2_t_dir_added_get", _wrap_svn_wc_diff_callbacks2_t_dir_added_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks2_t_dir_added_get(svn_wc_diff_callbacks2_t self) -> svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,svn_revnum_t,void *)"},
+ { (char *)"svn_wc_diff_callbacks2_t_dir_deleted_set", _wrap_svn_wc_diff_callbacks2_t_dir_deleted_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks2_t_dir_deleted_set(svn_wc_diff_callbacks2_t self, svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,void *) dir_deleted)"},
+ { (char *)"svn_wc_diff_callbacks2_t_dir_deleted_get", _wrap_svn_wc_diff_callbacks2_t_dir_deleted_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks2_t_dir_deleted_get(svn_wc_diff_callbacks2_t self) -> svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,void *)"},
+ { (char *)"svn_wc_diff_callbacks2_t_dir_props_changed_set", _wrap_svn_wc_diff_callbacks2_t_dir_props_changed_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks2_t_dir_props_changed_set(svn_wc_diff_callbacks2_t self, svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *) dir_props_changed)"},
+ { (char *)"svn_wc_diff_callbacks2_t_dir_props_changed_get", _wrap_svn_wc_diff_callbacks2_t_dir_props_changed_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks2_t_dir_props_changed_get(svn_wc_diff_callbacks2_t self) -> svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *)"},
{ (char *)"new_svn_wc_diff_callbacks2_t", _wrap_new_svn_wc_diff_callbacks2_t, METH_VARARGS, (char *)"new_svn_wc_diff_callbacks2_t() -> svn_wc_diff_callbacks2_t"},
{ (char *)"delete_svn_wc_diff_callbacks2_t", _wrap_delete_svn_wc_diff_callbacks2_t, METH_VARARGS, (char *)"delete_svn_wc_diff_callbacks2_t(svn_wc_diff_callbacks2_t self)"},
{ (char *)"svn_wc_diff_callbacks2_t_swigregister", svn_wc_diff_callbacks2_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_wc_diff_callbacks_t_file_changed_set", _wrap_svn_wc_diff_callbacks_t_file_changed_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks_t_file_changed_set(svn_wc_diff_callbacks_t self, svn_error_t file_changed)"},
- { (char *)"svn_wc_diff_callbacks_t_file_changed_get", _wrap_svn_wc_diff_callbacks_t_file_changed_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks_t_file_changed_get(svn_wc_diff_callbacks_t self) -> svn_error_t"},
- { (char *)"svn_wc_diff_callbacks_t_file_added_set", _wrap_svn_wc_diff_callbacks_t_file_added_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks_t_file_added_set(svn_wc_diff_callbacks_t self, svn_error_t file_added)"},
- { (char *)"svn_wc_diff_callbacks_t_file_added_get", _wrap_svn_wc_diff_callbacks_t_file_added_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks_t_file_added_get(svn_wc_diff_callbacks_t self) -> svn_error_t"},
- { (char *)"svn_wc_diff_callbacks_t_file_deleted_set", _wrap_svn_wc_diff_callbacks_t_file_deleted_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks_t_file_deleted_set(svn_wc_diff_callbacks_t self, svn_error_t file_deleted)"},
- { (char *)"svn_wc_diff_callbacks_t_file_deleted_get", _wrap_svn_wc_diff_callbacks_t_file_deleted_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks_t_file_deleted_get(svn_wc_diff_callbacks_t self) -> svn_error_t"},
- { (char *)"svn_wc_diff_callbacks_t_dir_added_set", _wrap_svn_wc_diff_callbacks_t_dir_added_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks_t_dir_added_set(svn_wc_diff_callbacks_t self, svn_error_t dir_added)"},
- { (char *)"svn_wc_diff_callbacks_t_dir_added_get", _wrap_svn_wc_diff_callbacks_t_dir_added_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks_t_dir_added_get(svn_wc_diff_callbacks_t self) -> svn_error_t"},
- { (char *)"svn_wc_diff_callbacks_t_dir_deleted_set", _wrap_svn_wc_diff_callbacks_t_dir_deleted_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks_t_dir_deleted_set(svn_wc_diff_callbacks_t self, svn_error_t dir_deleted)"},
- { (char *)"svn_wc_diff_callbacks_t_dir_deleted_get", _wrap_svn_wc_diff_callbacks_t_dir_deleted_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks_t_dir_deleted_get(svn_wc_diff_callbacks_t self) -> svn_error_t"},
- { (char *)"svn_wc_diff_callbacks_t_props_changed_set", _wrap_svn_wc_diff_callbacks_t_props_changed_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks_t_props_changed_set(svn_wc_diff_callbacks_t self, svn_error_t props_changed)"},
- { (char *)"svn_wc_diff_callbacks_t_props_changed_get", _wrap_svn_wc_diff_callbacks_t_props_changed_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks_t_props_changed_get(svn_wc_diff_callbacks_t self) -> svn_error_t"},
+ { (char *)"svn_wc_diff_callbacks_t_file_changed_set", _wrap_svn_wc_diff_callbacks_t_file_changed_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks_t_file_changed_set(svn_wc_diff_callbacks_t self, svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,void *) file_changed)"},
+ { (char *)"svn_wc_diff_callbacks_t_file_changed_get", _wrap_svn_wc_diff_callbacks_t_file_changed_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks_t_file_changed_get(svn_wc_diff_callbacks_t self) -> svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,void *)"},
+ { (char *)"svn_wc_diff_callbacks_t_file_added_set", _wrap_svn_wc_diff_callbacks_t_file_added_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks_t_file_added_set(svn_wc_diff_callbacks_t self, svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,void *) file_added)"},
+ { (char *)"svn_wc_diff_callbacks_t_file_added_get", _wrap_svn_wc_diff_callbacks_t_file_added_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks_t_file_added_get(svn_wc_diff_callbacks_t self) -> svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,void *)"},
+ { (char *)"svn_wc_diff_callbacks_t_file_deleted_set", _wrap_svn_wc_diff_callbacks_t_file_deleted_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks_t_file_deleted_set(svn_wc_diff_callbacks_t self, svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,char const *,char const *,void *) file_deleted)"},
+ { (char *)"svn_wc_diff_callbacks_t_file_deleted_get", _wrap_svn_wc_diff_callbacks_t_file_deleted_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks_t_file_deleted_get(svn_wc_diff_callbacks_t self) -> svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,char const *,char const *,void *)"},
+ { (char *)"svn_wc_diff_callbacks_t_dir_added_set", _wrap_svn_wc_diff_callbacks_t_dir_added_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks_t_dir_added_set(svn_wc_diff_callbacks_t self, svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,svn_revnum_t,void *) dir_added)"},
+ { (char *)"svn_wc_diff_callbacks_t_dir_added_get", _wrap_svn_wc_diff_callbacks_t_dir_added_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks_t_dir_added_get(svn_wc_diff_callbacks_t self) -> svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,svn_revnum_t,void *)"},
+ { (char *)"svn_wc_diff_callbacks_t_dir_deleted_set", _wrap_svn_wc_diff_callbacks_t_dir_deleted_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks_t_dir_deleted_set(svn_wc_diff_callbacks_t self, svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,void *) dir_deleted)"},
+ { (char *)"svn_wc_diff_callbacks_t_dir_deleted_get", _wrap_svn_wc_diff_callbacks_t_dir_deleted_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks_t_dir_deleted_get(svn_wc_diff_callbacks_t self) -> svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,void *)"},
+ { (char *)"svn_wc_diff_callbacks_t_props_changed_set", _wrap_svn_wc_diff_callbacks_t_props_changed_set, METH_VARARGS, (char *)"svn_wc_diff_callbacks_t_props_changed_set(svn_wc_diff_callbacks_t self, svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *) props_changed)"},
+ { (char *)"svn_wc_diff_callbacks_t_props_changed_get", _wrap_svn_wc_diff_callbacks_t_props_changed_get, METH_VARARGS, (char *)"svn_wc_diff_callbacks_t_props_changed_get(svn_wc_diff_callbacks_t self) -> svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *)"},
{ (char *)"new_svn_wc_diff_callbacks_t", _wrap_new_svn_wc_diff_callbacks_t, METH_VARARGS, (char *)"new_svn_wc_diff_callbacks_t() -> svn_wc_diff_callbacks_t"},
{ (char *)"delete_svn_wc_diff_callbacks_t", _wrap_delete_svn_wc_diff_callbacks_t, METH_VARARGS, (char *)"delete_svn_wc_diff_callbacks_t(svn_wc_diff_callbacks_t self)"},
{ (char *)"svn_wc_diff_callbacks_t_swigregister", svn_wc_diff_callbacks_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_wc_check_wc2", _wrap_svn_wc_check_wc2, METH_VARARGS, (char *)"svn_wc_check_wc2(svn_wc_context_t wc_ctx, char local_abspath, apr_pool_t scratch_pool) -> svn_error_t"},
- { (char *)"svn_wc_check_wc", _wrap_svn_wc_check_wc, METH_VARARGS, (char *)"svn_wc_check_wc(char path, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_wc_has_binary_prop", _wrap_svn_wc_has_binary_prop, METH_VARARGS, (char *)"svn_wc_has_binary_prop(char path, svn_wc_adm_access_t adm_access, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_wc_text_modified_p2", _wrap_svn_wc_text_modified_p2, METH_VARARGS, (char *)"\n"
- "svn_wc_text_modified_p2(svn_wc_context_t wc_ctx, char local_abspath, svn_boolean_t force_comparison, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
- ""},
+ { (char *)"svn_wc_check_wc2", _wrap_svn_wc_check_wc2, METH_VARARGS, (char *)"svn_wc_check_wc2(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_wc_check_wc", _wrap_svn_wc_check_wc, METH_VARARGS, (char *)"svn_wc_check_wc(char const * path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_has_binary_prop", _wrap_svn_wc_has_binary_prop, METH_VARARGS, (char *)"svn_wc_has_binary_prop(char const * path, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_text_modified_p2", _wrap_svn_wc_text_modified_p2, METH_VARARGS, (char *)"svn_wc_text_modified_p2(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_boolean_t unused, apr_pool_t scratch_pool) -> svn_error_t"},
{ (char *)"svn_wc_text_modified_p", _wrap_svn_wc_text_modified_p, METH_VARARGS, (char *)"\n"
- "svn_wc_text_modified_p(char filename, svn_boolean_t force_comparison, svn_wc_adm_access_t adm_access, \n"
+ "svn_wc_text_modified_p(char const * filename, svn_boolean_t force_comparison, svn_wc_adm_access_t * adm_access, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_wc_props_modified_p2", _wrap_svn_wc_props_modified_p2, METH_VARARGS, (char *)"svn_wc_props_modified_p2(svn_wc_context_t wc_ctx, char local_abspath, apr_pool_t scratch_pool) -> svn_error_t"},
- { (char *)"svn_wc_props_modified_p", _wrap_svn_wc_props_modified_p, METH_VARARGS, (char *)"svn_wc_props_modified_p(char path, svn_wc_adm_access_t adm_access, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_wc_entry_t_name_set", _wrap_svn_wc_entry_t_name_set, METH_VARARGS, (char *)"svn_wc_entry_t_name_set(svn_wc_entry_t self, char name)"},
- { (char *)"svn_wc_entry_t_name_get", _wrap_svn_wc_entry_t_name_get, METH_VARARGS, (char *)"svn_wc_entry_t_name_get(svn_wc_entry_t self) -> char"},
+ { (char *)"svn_wc_props_modified_p2", _wrap_svn_wc_props_modified_p2, METH_VARARGS, (char *)"svn_wc_props_modified_p2(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_wc_props_modified_p", _wrap_svn_wc_props_modified_p, METH_VARARGS, (char *)"svn_wc_props_modified_p(char const * path, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_entry_t_name_set", _wrap_svn_wc_entry_t_name_set, METH_VARARGS, (char *)"svn_wc_entry_t_name_set(svn_wc_entry_t self, char const * name)"},
+ { (char *)"svn_wc_entry_t_name_get", _wrap_svn_wc_entry_t_name_get, METH_VARARGS, (char *)"svn_wc_entry_t_name_get(svn_wc_entry_t self) -> char const *"},
{ (char *)"svn_wc_entry_t_revision_set", _wrap_svn_wc_entry_t_revision_set, METH_VARARGS, (char *)"svn_wc_entry_t_revision_set(svn_wc_entry_t self, svn_revnum_t revision)"},
{ (char *)"svn_wc_entry_t_revision_get", _wrap_svn_wc_entry_t_revision_get, METH_VARARGS, (char *)"svn_wc_entry_t_revision_get(svn_wc_entry_t self) -> svn_revnum_t"},
- { (char *)"svn_wc_entry_t_url_set", _wrap_svn_wc_entry_t_url_set, METH_VARARGS, (char *)"svn_wc_entry_t_url_set(svn_wc_entry_t self, char url)"},
- { (char *)"svn_wc_entry_t_url_get", _wrap_svn_wc_entry_t_url_get, METH_VARARGS, (char *)"svn_wc_entry_t_url_get(svn_wc_entry_t self) -> char"},
- { (char *)"svn_wc_entry_t_repos_set", _wrap_svn_wc_entry_t_repos_set, METH_VARARGS, (char *)"svn_wc_entry_t_repos_set(svn_wc_entry_t self, char repos)"},
- { (char *)"svn_wc_entry_t_repos_get", _wrap_svn_wc_entry_t_repos_get, METH_VARARGS, (char *)"svn_wc_entry_t_repos_get(svn_wc_entry_t self) -> char"},
- { (char *)"svn_wc_entry_t_uuid_set", _wrap_svn_wc_entry_t_uuid_set, METH_VARARGS, (char *)"svn_wc_entry_t_uuid_set(svn_wc_entry_t self, char uuid)"},
- { (char *)"svn_wc_entry_t_uuid_get", _wrap_svn_wc_entry_t_uuid_get, METH_VARARGS, (char *)"svn_wc_entry_t_uuid_get(svn_wc_entry_t self) -> char"},
+ { (char *)"svn_wc_entry_t_url_set", _wrap_svn_wc_entry_t_url_set, METH_VARARGS, (char *)"svn_wc_entry_t_url_set(svn_wc_entry_t self, char const * url)"},
+ { (char *)"svn_wc_entry_t_url_get", _wrap_svn_wc_entry_t_url_get, METH_VARARGS, (char *)"svn_wc_entry_t_url_get(svn_wc_entry_t self) -> char const *"},
+ { (char *)"svn_wc_entry_t_repos_set", _wrap_svn_wc_entry_t_repos_set, METH_VARARGS, (char *)"svn_wc_entry_t_repos_set(svn_wc_entry_t self, char const * repos)"},
+ { (char *)"svn_wc_entry_t_repos_get", _wrap_svn_wc_entry_t_repos_get, METH_VARARGS, (char *)"svn_wc_entry_t_repos_get(svn_wc_entry_t self) -> char const *"},
+ { (char *)"svn_wc_entry_t_uuid_set", _wrap_svn_wc_entry_t_uuid_set, METH_VARARGS, (char *)"svn_wc_entry_t_uuid_set(svn_wc_entry_t self, char const * uuid)"},
+ { (char *)"svn_wc_entry_t_uuid_get", _wrap_svn_wc_entry_t_uuid_get, METH_VARARGS, (char *)"svn_wc_entry_t_uuid_get(svn_wc_entry_t self) -> char const *"},
{ (char *)"svn_wc_entry_t_kind_set", _wrap_svn_wc_entry_t_kind_set, METH_VARARGS, (char *)"svn_wc_entry_t_kind_set(svn_wc_entry_t self, svn_node_kind_t kind)"},
{ (char *)"svn_wc_entry_t_kind_get", _wrap_svn_wc_entry_t_kind_get, METH_VARARGS, (char *)"svn_wc_entry_t_kind_get(svn_wc_entry_t self) -> svn_node_kind_t"},
{ (char *)"svn_wc_entry_t_schedule_set", _wrap_svn_wc_entry_t_schedule_set, METH_VARARGS, (char *)"svn_wc_entry_t_schedule_set(svn_wc_entry_t self, svn_wc_schedule_t schedule)"},
@@ -38666,58 +39531,58 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_wc_entry_t_absent_get", _wrap_svn_wc_entry_t_absent_get, METH_VARARGS, (char *)"svn_wc_entry_t_absent_get(svn_wc_entry_t self) -> svn_boolean_t"},
{ (char *)"svn_wc_entry_t_incomplete_set", _wrap_svn_wc_entry_t_incomplete_set, METH_VARARGS, (char *)"svn_wc_entry_t_incomplete_set(svn_wc_entry_t self, svn_boolean_t incomplete)"},
{ (char *)"svn_wc_entry_t_incomplete_get", _wrap_svn_wc_entry_t_incomplete_get, METH_VARARGS, (char *)"svn_wc_entry_t_incomplete_get(svn_wc_entry_t self) -> svn_boolean_t"},
- { (char *)"svn_wc_entry_t_copyfrom_url_set", _wrap_svn_wc_entry_t_copyfrom_url_set, METH_VARARGS, (char *)"svn_wc_entry_t_copyfrom_url_set(svn_wc_entry_t self, char copyfrom_url)"},
- { (char *)"svn_wc_entry_t_copyfrom_url_get", _wrap_svn_wc_entry_t_copyfrom_url_get, METH_VARARGS, (char *)"svn_wc_entry_t_copyfrom_url_get(svn_wc_entry_t self) -> char"},
+ { (char *)"svn_wc_entry_t_copyfrom_url_set", _wrap_svn_wc_entry_t_copyfrom_url_set, METH_VARARGS, (char *)"svn_wc_entry_t_copyfrom_url_set(svn_wc_entry_t self, char const * copyfrom_url)"},
+ { (char *)"svn_wc_entry_t_copyfrom_url_get", _wrap_svn_wc_entry_t_copyfrom_url_get, METH_VARARGS, (char *)"svn_wc_entry_t_copyfrom_url_get(svn_wc_entry_t self) -> char const *"},
{ (char *)"svn_wc_entry_t_copyfrom_rev_set", _wrap_svn_wc_entry_t_copyfrom_rev_set, METH_VARARGS, (char *)"svn_wc_entry_t_copyfrom_rev_set(svn_wc_entry_t self, svn_revnum_t copyfrom_rev)"},
{ (char *)"svn_wc_entry_t_copyfrom_rev_get", _wrap_svn_wc_entry_t_copyfrom_rev_get, METH_VARARGS, (char *)"svn_wc_entry_t_copyfrom_rev_get(svn_wc_entry_t self) -> svn_revnum_t"},
- { (char *)"svn_wc_entry_t_conflict_old_set", _wrap_svn_wc_entry_t_conflict_old_set, METH_VARARGS, (char *)"svn_wc_entry_t_conflict_old_set(svn_wc_entry_t self, char conflict_old)"},
- { (char *)"svn_wc_entry_t_conflict_old_get", _wrap_svn_wc_entry_t_conflict_old_get, METH_VARARGS, (char *)"svn_wc_entry_t_conflict_old_get(svn_wc_entry_t self) -> char"},
- { (char *)"svn_wc_entry_t_conflict_new_set", _wrap_svn_wc_entry_t_conflict_new_set, METH_VARARGS, (char *)"svn_wc_entry_t_conflict_new_set(svn_wc_entry_t self, char conflict_new)"},
- { (char *)"svn_wc_entry_t_conflict_new_get", _wrap_svn_wc_entry_t_conflict_new_get, METH_VARARGS, (char *)"svn_wc_entry_t_conflict_new_get(svn_wc_entry_t self) -> char"},
- { (char *)"svn_wc_entry_t_conflict_wrk_set", _wrap_svn_wc_entry_t_conflict_wrk_set, METH_VARARGS, (char *)"svn_wc_entry_t_conflict_wrk_set(svn_wc_entry_t self, char conflict_wrk)"},
- { (char *)"svn_wc_entry_t_conflict_wrk_get", _wrap_svn_wc_entry_t_conflict_wrk_get, METH_VARARGS, (char *)"svn_wc_entry_t_conflict_wrk_get(svn_wc_entry_t self) -> char"},
- { (char *)"svn_wc_entry_t_prejfile_set", _wrap_svn_wc_entry_t_prejfile_set, METH_VARARGS, (char *)"svn_wc_entry_t_prejfile_set(svn_wc_entry_t self, char prejfile)"},
- { (char *)"svn_wc_entry_t_prejfile_get", _wrap_svn_wc_entry_t_prejfile_get, METH_VARARGS, (char *)"svn_wc_entry_t_prejfile_get(svn_wc_entry_t self) -> char"},
+ { (char *)"svn_wc_entry_t_conflict_old_set", _wrap_svn_wc_entry_t_conflict_old_set, METH_VARARGS, (char *)"svn_wc_entry_t_conflict_old_set(svn_wc_entry_t self, char const * conflict_old)"},
+ { (char *)"svn_wc_entry_t_conflict_old_get", _wrap_svn_wc_entry_t_conflict_old_get, METH_VARARGS, (char *)"svn_wc_entry_t_conflict_old_get(svn_wc_entry_t self) -> char const *"},
+ { (char *)"svn_wc_entry_t_conflict_new_set", _wrap_svn_wc_entry_t_conflict_new_set, METH_VARARGS, (char *)"svn_wc_entry_t_conflict_new_set(svn_wc_entry_t self, char const * conflict_new)"},
+ { (char *)"svn_wc_entry_t_conflict_new_get", _wrap_svn_wc_entry_t_conflict_new_get, METH_VARARGS, (char *)"svn_wc_entry_t_conflict_new_get(svn_wc_entry_t self) -> char const *"},
+ { (char *)"svn_wc_entry_t_conflict_wrk_set", _wrap_svn_wc_entry_t_conflict_wrk_set, METH_VARARGS, (char *)"svn_wc_entry_t_conflict_wrk_set(svn_wc_entry_t self, char const * conflict_wrk)"},
+ { (char *)"svn_wc_entry_t_conflict_wrk_get", _wrap_svn_wc_entry_t_conflict_wrk_get, METH_VARARGS, (char *)"svn_wc_entry_t_conflict_wrk_get(svn_wc_entry_t self) -> char const *"},
+ { (char *)"svn_wc_entry_t_prejfile_set", _wrap_svn_wc_entry_t_prejfile_set, METH_VARARGS, (char *)"svn_wc_entry_t_prejfile_set(svn_wc_entry_t self, char const * prejfile)"},
+ { (char *)"svn_wc_entry_t_prejfile_get", _wrap_svn_wc_entry_t_prejfile_get, METH_VARARGS, (char *)"svn_wc_entry_t_prejfile_get(svn_wc_entry_t self) -> char const *"},
{ (char *)"svn_wc_entry_t_text_time_set", _wrap_svn_wc_entry_t_text_time_set, METH_VARARGS, (char *)"svn_wc_entry_t_text_time_set(svn_wc_entry_t self, apr_time_t text_time)"},
{ (char *)"svn_wc_entry_t_text_time_get", _wrap_svn_wc_entry_t_text_time_get, METH_VARARGS, (char *)"svn_wc_entry_t_text_time_get(svn_wc_entry_t self) -> apr_time_t"},
{ (char *)"svn_wc_entry_t_prop_time_set", _wrap_svn_wc_entry_t_prop_time_set, METH_VARARGS, (char *)"svn_wc_entry_t_prop_time_set(svn_wc_entry_t self, apr_time_t prop_time)"},
{ (char *)"svn_wc_entry_t_prop_time_get", _wrap_svn_wc_entry_t_prop_time_get, METH_VARARGS, (char *)"svn_wc_entry_t_prop_time_get(svn_wc_entry_t self) -> apr_time_t"},
- { (char *)"svn_wc_entry_t_checksum_set", _wrap_svn_wc_entry_t_checksum_set, METH_VARARGS, (char *)"svn_wc_entry_t_checksum_set(svn_wc_entry_t self, char checksum)"},
- { (char *)"svn_wc_entry_t_checksum_get", _wrap_svn_wc_entry_t_checksum_get, METH_VARARGS, (char *)"svn_wc_entry_t_checksum_get(svn_wc_entry_t self) -> char"},
+ { (char *)"svn_wc_entry_t_checksum_set", _wrap_svn_wc_entry_t_checksum_set, METH_VARARGS, (char *)"svn_wc_entry_t_checksum_set(svn_wc_entry_t self, char const * checksum)"},
+ { (char *)"svn_wc_entry_t_checksum_get", _wrap_svn_wc_entry_t_checksum_get, METH_VARARGS, (char *)"svn_wc_entry_t_checksum_get(svn_wc_entry_t self) -> char const *"},
{ (char *)"svn_wc_entry_t_cmt_rev_set", _wrap_svn_wc_entry_t_cmt_rev_set, METH_VARARGS, (char *)"svn_wc_entry_t_cmt_rev_set(svn_wc_entry_t self, svn_revnum_t cmt_rev)"},
{ (char *)"svn_wc_entry_t_cmt_rev_get", _wrap_svn_wc_entry_t_cmt_rev_get, METH_VARARGS, (char *)"svn_wc_entry_t_cmt_rev_get(svn_wc_entry_t self) -> svn_revnum_t"},
{ (char *)"svn_wc_entry_t_cmt_date_set", _wrap_svn_wc_entry_t_cmt_date_set, METH_VARARGS, (char *)"svn_wc_entry_t_cmt_date_set(svn_wc_entry_t self, apr_time_t cmt_date)"},
{ (char *)"svn_wc_entry_t_cmt_date_get", _wrap_svn_wc_entry_t_cmt_date_get, METH_VARARGS, (char *)"svn_wc_entry_t_cmt_date_get(svn_wc_entry_t self) -> apr_time_t"},
- { (char *)"svn_wc_entry_t_cmt_author_set", _wrap_svn_wc_entry_t_cmt_author_set, METH_VARARGS, (char *)"svn_wc_entry_t_cmt_author_set(svn_wc_entry_t self, char cmt_author)"},
- { (char *)"svn_wc_entry_t_cmt_author_get", _wrap_svn_wc_entry_t_cmt_author_get, METH_VARARGS, (char *)"svn_wc_entry_t_cmt_author_get(svn_wc_entry_t self) -> char"},
- { (char *)"svn_wc_entry_t_lock_token_set", _wrap_svn_wc_entry_t_lock_token_set, METH_VARARGS, (char *)"svn_wc_entry_t_lock_token_set(svn_wc_entry_t self, char lock_token)"},
- { (char *)"svn_wc_entry_t_lock_token_get", _wrap_svn_wc_entry_t_lock_token_get, METH_VARARGS, (char *)"svn_wc_entry_t_lock_token_get(svn_wc_entry_t self) -> char"},
- { (char *)"svn_wc_entry_t_lock_owner_set", _wrap_svn_wc_entry_t_lock_owner_set, METH_VARARGS, (char *)"svn_wc_entry_t_lock_owner_set(svn_wc_entry_t self, char lock_owner)"},
- { (char *)"svn_wc_entry_t_lock_owner_get", _wrap_svn_wc_entry_t_lock_owner_get, METH_VARARGS, (char *)"svn_wc_entry_t_lock_owner_get(svn_wc_entry_t self) -> char"},
- { (char *)"svn_wc_entry_t_lock_comment_set", _wrap_svn_wc_entry_t_lock_comment_set, METH_VARARGS, (char *)"svn_wc_entry_t_lock_comment_set(svn_wc_entry_t self, char lock_comment)"},
- { (char *)"svn_wc_entry_t_lock_comment_get", _wrap_svn_wc_entry_t_lock_comment_get, METH_VARARGS, (char *)"svn_wc_entry_t_lock_comment_get(svn_wc_entry_t self) -> char"},
+ { (char *)"svn_wc_entry_t_cmt_author_set", _wrap_svn_wc_entry_t_cmt_author_set, METH_VARARGS, (char *)"svn_wc_entry_t_cmt_author_set(svn_wc_entry_t self, char const * cmt_author)"},
+ { (char *)"svn_wc_entry_t_cmt_author_get", _wrap_svn_wc_entry_t_cmt_author_get, METH_VARARGS, (char *)"svn_wc_entry_t_cmt_author_get(svn_wc_entry_t self) -> char const *"},
+ { (char *)"svn_wc_entry_t_lock_token_set", _wrap_svn_wc_entry_t_lock_token_set, METH_VARARGS, (char *)"svn_wc_entry_t_lock_token_set(svn_wc_entry_t self, char const * lock_token)"},
+ { (char *)"svn_wc_entry_t_lock_token_get", _wrap_svn_wc_entry_t_lock_token_get, METH_VARARGS, (char *)"svn_wc_entry_t_lock_token_get(svn_wc_entry_t self) -> char const *"},
+ { (char *)"svn_wc_entry_t_lock_owner_set", _wrap_svn_wc_entry_t_lock_owner_set, METH_VARARGS, (char *)"svn_wc_entry_t_lock_owner_set(svn_wc_entry_t self, char const * lock_owner)"},
+ { (char *)"svn_wc_entry_t_lock_owner_get", _wrap_svn_wc_entry_t_lock_owner_get, METH_VARARGS, (char *)"svn_wc_entry_t_lock_owner_get(svn_wc_entry_t self) -> char const *"},
+ { (char *)"svn_wc_entry_t_lock_comment_set", _wrap_svn_wc_entry_t_lock_comment_set, METH_VARARGS, (char *)"svn_wc_entry_t_lock_comment_set(svn_wc_entry_t self, char const * lock_comment)"},
+ { (char *)"svn_wc_entry_t_lock_comment_get", _wrap_svn_wc_entry_t_lock_comment_get, METH_VARARGS, (char *)"svn_wc_entry_t_lock_comment_get(svn_wc_entry_t self) -> char const *"},
{ (char *)"svn_wc_entry_t_lock_creation_date_set", _wrap_svn_wc_entry_t_lock_creation_date_set, METH_VARARGS, (char *)"svn_wc_entry_t_lock_creation_date_set(svn_wc_entry_t self, apr_time_t lock_creation_date)"},
{ (char *)"svn_wc_entry_t_lock_creation_date_get", _wrap_svn_wc_entry_t_lock_creation_date_get, METH_VARARGS, (char *)"svn_wc_entry_t_lock_creation_date_get(svn_wc_entry_t self) -> apr_time_t"},
{ (char *)"svn_wc_entry_t_has_props_set", _wrap_svn_wc_entry_t_has_props_set, METH_VARARGS, (char *)"svn_wc_entry_t_has_props_set(svn_wc_entry_t self, svn_boolean_t has_props)"},
{ (char *)"svn_wc_entry_t_has_props_get", _wrap_svn_wc_entry_t_has_props_get, METH_VARARGS, (char *)"svn_wc_entry_t_has_props_get(svn_wc_entry_t self) -> svn_boolean_t"},
{ (char *)"svn_wc_entry_t_has_prop_mods_set", _wrap_svn_wc_entry_t_has_prop_mods_set, METH_VARARGS, (char *)"svn_wc_entry_t_has_prop_mods_set(svn_wc_entry_t self, svn_boolean_t has_prop_mods)"},
{ (char *)"svn_wc_entry_t_has_prop_mods_get", _wrap_svn_wc_entry_t_has_prop_mods_get, METH_VARARGS, (char *)"svn_wc_entry_t_has_prop_mods_get(svn_wc_entry_t self) -> svn_boolean_t"},
- { (char *)"svn_wc_entry_t_cachable_props_set", _wrap_svn_wc_entry_t_cachable_props_set, METH_VARARGS, (char *)"svn_wc_entry_t_cachable_props_set(svn_wc_entry_t self, char cachable_props)"},
- { (char *)"svn_wc_entry_t_cachable_props_get", _wrap_svn_wc_entry_t_cachable_props_get, METH_VARARGS, (char *)"svn_wc_entry_t_cachable_props_get(svn_wc_entry_t self) -> char"},
- { (char *)"svn_wc_entry_t_present_props_set", _wrap_svn_wc_entry_t_present_props_set, METH_VARARGS, (char *)"svn_wc_entry_t_present_props_set(svn_wc_entry_t self, char present_props)"},
- { (char *)"svn_wc_entry_t_present_props_get", _wrap_svn_wc_entry_t_present_props_get, METH_VARARGS, (char *)"svn_wc_entry_t_present_props_get(svn_wc_entry_t self) -> char"},
- { (char *)"svn_wc_entry_t_changelist_set", _wrap_svn_wc_entry_t_changelist_set, METH_VARARGS, (char *)"svn_wc_entry_t_changelist_set(svn_wc_entry_t self, char changelist)"},
- { (char *)"svn_wc_entry_t_changelist_get", _wrap_svn_wc_entry_t_changelist_get, METH_VARARGS, (char *)"svn_wc_entry_t_changelist_get(svn_wc_entry_t self) -> char"},
+ { (char *)"svn_wc_entry_t_cachable_props_set", _wrap_svn_wc_entry_t_cachable_props_set, METH_VARARGS, (char *)"svn_wc_entry_t_cachable_props_set(svn_wc_entry_t self, char const * cachable_props)"},
+ { (char *)"svn_wc_entry_t_cachable_props_get", _wrap_svn_wc_entry_t_cachable_props_get, METH_VARARGS, (char *)"svn_wc_entry_t_cachable_props_get(svn_wc_entry_t self) -> char const *"},
+ { (char *)"svn_wc_entry_t_present_props_set", _wrap_svn_wc_entry_t_present_props_set, METH_VARARGS, (char *)"svn_wc_entry_t_present_props_set(svn_wc_entry_t self, char const * present_props)"},
+ { (char *)"svn_wc_entry_t_present_props_get", _wrap_svn_wc_entry_t_present_props_get, METH_VARARGS, (char *)"svn_wc_entry_t_present_props_get(svn_wc_entry_t self) -> char const *"},
+ { (char *)"svn_wc_entry_t_changelist_set", _wrap_svn_wc_entry_t_changelist_set, METH_VARARGS, (char *)"svn_wc_entry_t_changelist_set(svn_wc_entry_t self, char const * changelist)"},
+ { (char *)"svn_wc_entry_t_changelist_get", _wrap_svn_wc_entry_t_changelist_get, METH_VARARGS, (char *)"svn_wc_entry_t_changelist_get(svn_wc_entry_t self) -> char const *"},
{ (char *)"svn_wc_entry_t_working_size_set", _wrap_svn_wc_entry_t_working_size_set, METH_VARARGS, (char *)"svn_wc_entry_t_working_size_set(svn_wc_entry_t self, apr_off_t working_size)"},
{ (char *)"svn_wc_entry_t_working_size_get", _wrap_svn_wc_entry_t_working_size_get, METH_VARARGS, (char *)"svn_wc_entry_t_working_size_get(svn_wc_entry_t self) -> apr_off_t"},
{ (char *)"svn_wc_entry_t_keep_local_set", _wrap_svn_wc_entry_t_keep_local_set, METH_VARARGS, (char *)"svn_wc_entry_t_keep_local_set(svn_wc_entry_t self, svn_boolean_t keep_local)"},
{ (char *)"svn_wc_entry_t_keep_local_get", _wrap_svn_wc_entry_t_keep_local_get, METH_VARARGS, (char *)"svn_wc_entry_t_keep_local_get(svn_wc_entry_t self) -> svn_boolean_t"},
{ (char *)"svn_wc_entry_t_depth_set", _wrap_svn_wc_entry_t_depth_set, METH_VARARGS, (char *)"svn_wc_entry_t_depth_set(svn_wc_entry_t self, svn_depth_t depth)"},
{ (char *)"svn_wc_entry_t_depth_get", _wrap_svn_wc_entry_t_depth_get, METH_VARARGS, (char *)"svn_wc_entry_t_depth_get(svn_wc_entry_t self) -> svn_depth_t"},
- { (char *)"svn_wc_entry_t_tree_conflict_data_set", _wrap_svn_wc_entry_t_tree_conflict_data_set, METH_VARARGS, (char *)"svn_wc_entry_t_tree_conflict_data_set(svn_wc_entry_t self, char tree_conflict_data)"},
- { (char *)"svn_wc_entry_t_tree_conflict_data_get", _wrap_svn_wc_entry_t_tree_conflict_data_get, METH_VARARGS, (char *)"svn_wc_entry_t_tree_conflict_data_get(svn_wc_entry_t self) -> char"},
- { (char *)"svn_wc_entry_t_file_external_path_set", _wrap_svn_wc_entry_t_file_external_path_set, METH_VARARGS, (char *)"svn_wc_entry_t_file_external_path_set(svn_wc_entry_t self, char file_external_path)"},
- { (char *)"svn_wc_entry_t_file_external_path_get", _wrap_svn_wc_entry_t_file_external_path_get, METH_VARARGS, (char *)"svn_wc_entry_t_file_external_path_get(svn_wc_entry_t self) -> char"},
+ { (char *)"svn_wc_entry_t_tree_conflict_data_set", _wrap_svn_wc_entry_t_tree_conflict_data_set, METH_VARARGS, (char *)"svn_wc_entry_t_tree_conflict_data_set(svn_wc_entry_t self, char const * tree_conflict_data)"},
+ { (char *)"svn_wc_entry_t_tree_conflict_data_get", _wrap_svn_wc_entry_t_tree_conflict_data_get, METH_VARARGS, (char *)"svn_wc_entry_t_tree_conflict_data_get(svn_wc_entry_t self) -> char const *"},
+ { (char *)"svn_wc_entry_t_file_external_path_set", _wrap_svn_wc_entry_t_file_external_path_set, METH_VARARGS, (char *)"svn_wc_entry_t_file_external_path_set(svn_wc_entry_t self, char const * file_external_path)"},
+ { (char *)"svn_wc_entry_t_file_external_path_get", _wrap_svn_wc_entry_t_file_external_path_get, METH_VARARGS, (char *)"svn_wc_entry_t_file_external_path_get(svn_wc_entry_t self) -> char const *"},
{ (char *)"svn_wc_entry_t_file_external_peg_rev_set", _wrap_svn_wc_entry_t_file_external_peg_rev_set, METH_VARARGS, (char *)"svn_wc_entry_t_file_external_peg_rev_set(svn_wc_entry_t self, svn_opt_revision_t file_external_peg_rev)"},
{ (char *)"svn_wc_entry_t_file_external_peg_rev_get", _wrap_svn_wc_entry_t_file_external_peg_rev_get, METH_VARARGS, (char *)"svn_wc_entry_t_file_external_peg_rev_get(svn_wc_entry_t self) -> svn_opt_revision_t"},
{ (char *)"svn_wc_entry_t_file_external_rev_set", _wrap_svn_wc_entry_t_file_external_rev_set, METH_VARARGS, (char *)"svn_wc_entry_t_file_external_rev_set(svn_wc_entry_t self, svn_opt_revision_t file_external_rev)"},
@@ -38725,25 +39590,19 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"new_svn_wc_entry_t", _wrap_new_svn_wc_entry_t, METH_VARARGS, (char *)"new_svn_wc_entry_t() -> svn_wc_entry_t"},
{ (char *)"delete_svn_wc_entry_t", _wrap_delete_svn_wc_entry_t, METH_VARARGS, (char *)"delete_svn_wc_entry_t(svn_wc_entry_t self)"},
{ (char *)"svn_wc_entry_t_swigregister", svn_wc_entry_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_wc_entry", _wrap_svn_wc_entry, METH_VARARGS, (char *)"\n"
- "svn_wc_entry(char path, svn_wc_adm_access_t adm_access, svn_boolean_t show_hidden, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_wc_entries_read", _wrap_svn_wc_entries_read, METH_VARARGS, (char *)"\n"
- "svn_wc_entries_read(svn_wc_adm_access_t adm_access, svn_boolean_t show_hidden, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
+ { (char *)"svn_wc_entry", _wrap_svn_wc_entry, METH_VARARGS, (char *)"svn_wc_entry(char const * path, svn_wc_adm_access_t * adm_access, svn_boolean_t show_hidden, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_entries_read", _wrap_svn_wc_entries_read, METH_VARARGS, (char *)"svn_wc_entries_read(svn_wc_adm_access_t * adm_access, svn_boolean_t show_hidden, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_wc_entry_dup", _wrap_svn_wc_entry_dup, METH_VARARGS, (char *)"svn_wc_entry_dup(svn_wc_entry_t entry, apr_pool_t pool) -> svn_wc_entry_t"},
{ (char *)"svn_wc_info_t_schedule_set", _wrap_svn_wc_info_t_schedule_set, METH_VARARGS, (char *)"svn_wc_info_t_schedule_set(svn_wc_info_t self, svn_wc_schedule_t schedule)"},
{ (char *)"svn_wc_info_t_schedule_get", _wrap_svn_wc_info_t_schedule_get, METH_VARARGS, (char *)"svn_wc_info_t_schedule_get(svn_wc_info_t self) -> svn_wc_schedule_t"},
- { (char *)"svn_wc_info_t_copyfrom_url_set", _wrap_svn_wc_info_t_copyfrom_url_set, METH_VARARGS, (char *)"svn_wc_info_t_copyfrom_url_set(svn_wc_info_t self, char copyfrom_url)"},
- { (char *)"svn_wc_info_t_copyfrom_url_get", _wrap_svn_wc_info_t_copyfrom_url_get, METH_VARARGS, (char *)"svn_wc_info_t_copyfrom_url_get(svn_wc_info_t self) -> char"},
+ { (char *)"svn_wc_info_t_copyfrom_url_set", _wrap_svn_wc_info_t_copyfrom_url_set, METH_VARARGS, (char *)"svn_wc_info_t_copyfrom_url_set(svn_wc_info_t self, char const * copyfrom_url)"},
+ { (char *)"svn_wc_info_t_copyfrom_url_get", _wrap_svn_wc_info_t_copyfrom_url_get, METH_VARARGS, (char *)"svn_wc_info_t_copyfrom_url_get(svn_wc_info_t self) -> char const *"},
{ (char *)"svn_wc_info_t_copyfrom_rev_set", _wrap_svn_wc_info_t_copyfrom_rev_set, METH_VARARGS, (char *)"svn_wc_info_t_copyfrom_rev_set(svn_wc_info_t self, svn_revnum_t copyfrom_rev)"},
{ (char *)"svn_wc_info_t_copyfrom_rev_get", _wrap_svn_wc_info_t_copyfrom_rev_get, METH_VARARGS, (char *)"svn_wc_info_t_copyfrom_rev_get(svn_wc_info_t self) -> svn_revnum_t"},
{ (char *)"svn_wc_info_t_checksum_set", _wrap_svn_wc_info_t_checksum_set, METH_VARARGS, (char *)"svn_wc_info_t_checksum_set(svn_wc_info_t self, svn_checksum_t checksum)"},
{ (char *)"svn_wc_info_t_checksum_get", _wrap_svn_wc_info_t_checksum_get, METH_VARARGS, (char *)"svn_wc_info_t_checksum_get(svn_wc_info_t self) -> svn_checksum_t"},
- { (char *)"svn_wc_info_t_changelist_set", _wrap_svn_wc_info_t_changelist_set, METH_VARARGS, (char *)"svn_wc_info_t_changelist_set(svn_wc_info_t self, char changelist)"},
- { (char *)"svn_wc_info_t_changelist_get", _wrap_svn_wc_info_t_changelist_get, METH_VARARGS, (char *)"svn_wc_info_t_changelist_get(svn_wc_info_t self) -> char"},
+ { (char *)"svn_wc_info_t_changelist_set", _wrap_svn_wc_info_t_changelist_set, METH_VARARGS, (char *)"svn_wc_info_t_changelist_set(svn_wc_info_t self, char const * changelist)"},
+ { (char *)"svn_wc_info_t_changelist_get", _wrap_svn_wc_info_t_changelist_get, METH_VARARGS, (char *)"svn_wc_info_t_changelist_get(svn_wc_info_t self) -> char const *"},
{ (char *)"svn_wc_info_t_depth_set", _wrap_svn_wc_info_t_depth_set, METH_VARARGS, (char *)"svn_wc_info_t_depth_set(svn_wc_info_t self, svn_depth_t depth)"},
{ (char *)"svn_wc_info_t_depth_get", _wrap_svn_wc_info_t_depth_get, METH_VARARGS, (char *)"svn_wc_info_t_depth_get(svn_wc_info_t self) -> svn_depth_t"},
{ (char *)"svn_wc_info_t_recorded_size_set", _wrap_svn_wc_info_t_recorded_size_set, METH_VARARGS, (char *)"svn_wc_info_t_recorded_size_set(svn_wc_info_t self, svn_filesize_t recorded_size)"},
@@ -38752,67 +39611,62 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_wc_info_t_recorded_time_get", _wrap_svn_wc_info_t_recorded_time_get, METH_VARARGS, (char *)"svn_wc_info_t_recorded_time_get(svn_wc_info_t self) -> apr_time_t"},
{ (char *)"svn_wc_info_t_conflicts_set", _wrap_svn_wc_info_t_conflicts_set, METH_VARARGS, (char *)"svn_wc_info_t_conflicts_set(svn_wc_info_t self, apr_array_header_t conflicts)"},
{ (char *)"svn_wc_info_t_conflicts_get", _wrap_svn_wc_info_t_conflicts_get, METH_VARARGS, (char *)"svn_wc_info_t_conflicts_get(svn_wc_info_t self) -> apr_array_header_t"},
- { (char *)"svn_wc_info_t_wcroot_abspath_set", _wrap_svn_wc_info_t_wcroot_abspath_set, METH_VARARGS, (char *)"svn_wc_info_t_wcroot_abspath_set(svn_wc_info_t self, char wcroot_abspath)"},
- { (char *)"svn_wc_info_t_wcroot_abspath_get", _wrap_svn_wc_info_t_wcroot_abspath_get, METH_VARARGS, (char *)"svn_wc_info_t_wcroot_abspath_get(svn_wc_info_t self) -> char"},
+ { (char *)"svn_wc_info_t_wcroot_abspath_set", _wrap_svn_wc_info_t_wcroot_abspath_set, METH_VARARGS, (char *)"svn_wc_info_t_wcroot_abspath_set(svn_wc_info_t self, char const * wcroot_abspath)"},
+ { (char *)"svn_wc_info_t_wcroot_abspath_get", _wrap_svn_wc_info_t_wcroot_abspath_get, METH_VARARGS, (char *)"svn_wc_info_t_wcroot_abspath_get(svn_wc_info_t self) -> char const *"},
+ { (char *)"svn_wc_info_t_moved_from_abspath_set", _wrap_svn_wc_info_t_moved_from_abspath_set, METH_VARARGS, (char *)"svn_wc_info_t_moved_from_abspath_set(svn_wc_info_t self, char const * moved_from_abspath)"},
+ { (char *)"svn_wc_info_t_moved_from_abspath_get", _wrap_svn_wc_info_t_moved_from_abspath_get, METH_VARARGS, (char *)"svn_wc_info_t_moved_from_abspath_get(svn_wc_info_t self) -> char const *"},
+ { (char *)"svn_wc_info_t_moved_to_abspath_set", _wrap_svn_wc_info_t_moved_to_abspath_set, METH_VARARGS, (char *)"svn_wc_info_t_moved_to_abspath_set(svn_wc_info_t self, char const * moved_to_abspath)"},
+ { (char *)"svn_wc_info_t_moved_to_abspath_get", _wrap_svn_wc_info_t_moved_to_abspath_get, METH_VARARGS, (char *)"svn_wc_info_t_moved_to_abspath_get(svn_wc_info_t self) -> char const *"},
{ (char *)"new_svn_wc_info_t", _wrap_new_svn_wc_info_t, METH_VARARGS, (char *)"new_svn_wc_info_t() -> svn_wc_info_t"},
{ (char *)"delete_svn_wc_info_t", _wrap_delete_svn_wc_info_t, METH_VARARGS, (char *)"delete_svn_wc_info_t(svn_wc_info_t self)"},
{ (char *)"svn_wc_info_t_swigregister", svn_wc_info_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_wc_info_dup", _wrap_svn_wc_info_dup, METH_VARARGS, (char *)"svn_wc_info_dup(svn_wc_info_t info, apr_pool_t pool) -> svn_wc_info_t"},
- { (char *)"svn_wc_conflicted_p3", _wrap_svn_wc_conflicted_p3, METH_VARARGS, (char *)"svn_wc_conflicted_p3(svn_wc_context_t wc_ctx, char local_abspath, apr_pool_t scratch_pool) -> svn_error_t"},
- { (char *)"svn_wc_conflicted_p2", _wrap_svn_wc_conflicted_p2, METH_VARARGS, (char *)"svn_wc_conflicted_p2(char path, svn_wc_adm_access_t adm_access, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_wc_conflicted_p", _wrap_svn_wc_conflicted_p, METH_VARARGS, (char *)"svn_wc_conflicted_p(char dir_path, svn_wc_entry_t entry, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_wc_get_ancestry", _wrap_svn_wc_get_ancestry, METH_VARARGS, (char *)"svn_wc_get_ancestry(char path, svn_wc_adm_access_t adm_access, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_wc_entry_callbacks2_t_found_entry_set", _wrap_svn_wc_entry_callbacks2_t_found_entry_set, METH_VARARGS, (char *)"svn_wc_entry_callbacks2_t_found_entry_set(svn_wc_entry_callbacks2_t self, svn_error_t found_entry)"},
- { (char *)"svn_wc_entry_callbacks2_t_found_entry_get", _wrap_svn_wc_entry_callbacks2_t_found_entry_get, METH_VARARGS, (char *)"svn_wc_entry_callbacks2_t_found_entry_get(svn_wc_entry_callbacks2_t self) -> svn_error_t"},
- { (char *)"svn_wc_entry_callbacks2_t_handle_error_set", _wrap_svn_wc_entry_callbacks2_t_handle_error_set, METH_VARARGS, (char *)"svn_wc_entry_callbacks2_t_handle_error_set(svn_wc_entry_callbacks2_t self, svn_error_t handle_error)"},
- { (char *)"svn_wc_entry_callbacks2_t_handle_error_get", _wrap_svn_wc_entry_callbacks2_t_handle_error_get, METH_VARARGS, (char *)"svn_wc_entry_callbacks2_t_handle_error_get(svn_wc_entry_callbacks2_t self) -> svn_error_t"},
+ { (char *)"svn_wc_conflicted_p3", _wrap_svn_wc_conflicted_p3, METH_VARARGS, (char *)"svn_wc_conflicted_p3(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_wc_conflicted_p2", _wrap_svn_wc_conflicted_p2, METH_VARARGS, (char *)"svn_wc_conflicted_p2(char const * path, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_conflicted_p", _wrap_svn_wc_conflicted_p, METH_VARARGS, (char *)"svn_wc_conflicted_p(char const * dir_path, svn_wc_entry_t entry, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_get_ancestry", _wrap_svn_wc_get_ancestry, METH_VARARGS, (char *)"svn_wc_get_ancestry(char const * path, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_entry_callbacks2_t_found_entry_set", _wrap_svn_wc_entry_callbacks2_t_found_entry_set, METH_VARARGS, (char *)"svn_wc_entry_callbacks2_t_found_entry_set(svn_wc_entry_callbacks2_t self, svn_error_t *(*)(char const *,svn_wc_entry_t const *,void *,apr_pool_t *) found_entry)"},
+ { (char *)"svn_wc_entry_callbacks2_t_found_entry_get", _wrap_svn_wc_entry_callbacks2_t_found_entry_get, METH_VARARGS, (char *)"svn_wc_entry_callbacks2_t_found_entry_get(svn_wc_entry_callbacks2_t self) -> svn_error_t *(*)(char const *,svn_wc_entry_t const *,void *,apr_pool_t *)"},
+ { (char *)"svn_wc_entry_callbacks2_t_handle_error_set", _wrap_svn_wc_entry_callbacks2_t_handle_error_set, METH_VARARGS, (char *)"svn_wc_entry_callbacks2_t_handle_error_set(svn_wc_entry_callbacks2_t self, svn_error_t *(*)(char const *,svn_error_t *,void *,apr_pool_t *) handle_error)"},
+ { (char *)"svn_wc_entry_callbacks2_t_handle_error_get", _wrap_svn_wc_entry_callbacks2_t_handle_error_get, METH_VARARGS, (char *)"svn_wc_entry_callbacks2_t_handle_error_get(svn_wc_entry_callbacks2_t self) -> svn_error_t *(*)(char const *,svn_error_t *,void *,apr_pool_t *)"},
{ (char *)"new_svn_wc_entry_callbacks2_t", _wrap_new_svn_wc_entry_callbacks2_t, METH_VARARGS, (char *)"new_svn_wc_entry_callbacks2_t() -> svn_wc_entry_callbacks2_t"},
{ (char *)"delete_svn_wc_entry_callbacks2_t", _wrap_delete_svn_wc_entry_callbacks2_t, METH_VARARGS, (char *)"delete_svn_wc_entry_callbacks2_t(svn_wc_entry_callbacks2_t self)"},
{ (char *)"svn_wc_entry_callbacks2_t_swigregister", svn_wc_entry_callbacks2_t_swigregister, METH_VARARGS, NULL},
- { (char *)"svn_wc_entry_callbacks_t_found_entry_set", _wrap_svn_wc_entry_callbacks_t_found_entry_set, METH_VARARGS, (char *)"svn_wc_entry_callbacks_t_found_entry_set(svn_wc_entry_callbacks_t self, svn_error_t found_entry)"},
- { (char *)"svn_wc_entry_callbacks_t_found_entry_get", _wrap_svn_wc_entry_callbacks_t_found_entry_get, METH_VARARGS, (char *)"svn_wc_entry_callbacks_t_found_entry_get(svn_wc_entry_callbacks_t self) -> svn_error_t"},
+ { (char *)"svn_wc_entry_callbacks_t_found_entry_set", _wrap_svn_wc_entry_callbacks_t_found_entry_set, METH_VARARGS, (char *)"svn_wc_entry_callbacks_t_found_entry_set(svn_wc_entry_callbacks_t self, svn_error_t *(*)(char const *,svn_wc_entry_t const *,void *,apr_pool_t *) found_entry)"},
+ { (char *)"svn_wc_entry_callbacks_t_found_entry_get", _wrap_svn_wc_entry_callbacks_t_found_entry_get, METH_VARARGS, (char *)"svn_wc_entry_callbacks_t_found_entry_get(svn_wc_entry_callbacks_t self) -> svn_error_t *(*)(char const *,svn_wc_entry_t const *,void *,apr_pool_t *)"},
{ (char *)"new_svn_wc_entry_callbacks_t", _wrap_new_svn_wc_entry_callbacks_t, METH_VARARGS, (char *)"new_svn_wc_entry_callbacks_t() -> svn_wc_entry_callbacks_t"},
{ (char *)"delete_svn_wc_entry_callbacks_t", _wrap_delete_svn_wc_entry_callbacks_t, METH_VARARGS, (char *)"delete_svn_wc_entry_callbacks_t(svn_wc_entry_callbacks_t self)"},
{ (char *)"svn_wc_entry_callbacks_t_swigregister", svn_wc_entry_callbacks_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_wc_walk_entries3", _wrap_svn_wc_walk_entries3, METH_VARARGS, (char *)"\n"
- "svn_wc_walk_entries3(char path, svn_wc_adm_access_t adm_access, svn_wc_entry_callbacks2_t walk_callbacks, \n"
- " void walk_baton, \n"
- " svn_depth_t depth, svn_boolean_t show_hidden, \n"
+ "svn_wc_walk_entries3(char const * path, svn_wc_adm_access_t * adm_access, svn_wc_entry_callbacks2_t walk_callbacks, \n"
+ " void * walk_baton, svn_depth_t depth, svn_boolean_t show_hidden, \n"
" svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_walk_entries2", _wrap_svn_wc_walk_entries2, METH_VARARGS, (char *)"\n"
- "svn_wc_walk_entries2(char path, svn_wc_adm_access_t adm_access, svn_wc_entry_callbacks_t walk_callbacks, \n"
- " void walk_baton, \n"
- " svn_boolean_t show_hidden, svn_cancel_func_t cancel_func, \n"
+ "svn_wc_walk_entries2(char const * path, svn_wc_adm_access_t * adm_access, svn_wc_entry_callbacks_t walk_callbacks, \n"
+ " void * walk_baton, svn_boolean_t show_hidden, svn_cancel_func_t cancel_func, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_walk_entries", _wrap_svn_wc_walk_entries, METH_VARARGS, (char *)"\n"
- "svn_wc_walk_entries(char path, svn_wc_adm_access_t adm_access, svn_wc_entry_callbacks_t walk_callbacks, \n"
- " void walk_baton, \n"
- " svn_boolean_t show_hidden, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_walk_entries(char const * path, svn_wc_adm_access_t * adm_access, svn_wc_entry_callbacks_t walk_callbacks, \n"
+ " void * walk_baton, svn_boolean_t show_hidden, apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_wc_mark_missing_deleted", _wrap_svn_wc_mark_missing_deleted, METH_VARARGS, (char *)"svn_wc_mark_missing_deleted(char path, svn_wc_adm_access_t parent, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_mark_missing_deleted", _wrap_svn_wc_mark_missing_deleted, METH_VARARGS, (char *)"svn_wc_mark_missing_deleted(char const * path, svn_wc_adm_access_t * parent, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_wc_ensure_adm4", _wrap_svn_wc_ensure_adm4, METH_VARARGS, (char *)"\n"
- "svn_wc_ensure_adm4(svn_wc_context_t wc_ctx, char local_abspath, char url, \n"
- " char repos_root_url, char repos_uuid, svn_revnum_t revision, \n"
- " svn_depth_t depth, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_ensure_adm4(svn_wc_context_t * wc_ctx, char const * local_abspath, char const * url, char const * repos_root_url, \n"
+ " char const * repos_uuid, svn_revnum_t revision, svn_depth_t depth, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_ensure_adm3", _wrap_svn_wc_ensure_adm3, METH_VARARGS, (char *)"\n"
- "svn_wc_ensure_adm3(char path, char uuid, char url, char repos, svn_revnum_t revision, \n"
+ "svn_wc_ensure_adm3(char const * path, char const * uuid, char const * url, char const * repos, svn_revnum_t revision, \n"
" svn_depth_t depth, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_ensure_adm2", _wrap_svn_wc_ensure_adm2, METH_VARARGS, (char *)"\n"
- "svn_wc_ensure_adm2(char path, char uuid, char url, char repos, svn_revnum_t revision, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_wc_ensure_adm", _wrap_svn_wc_ensure_adm, METH_VARARGS, (char *)"\n"
- "svn_wc_ensure_adm(char path, char uuid, char url, svn_revnum_t revision, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_wc_maybe_set_repos_root", _wrap_svn_wc_maybe_set_repos_root, METH_VARARGS, (char *)"\n"
- "svn_wc_maybe_set_repos_root(svn_wc_adm_access_t adm_access, char path, char repos, \n"
+ "svn_wc_ensure_adm2(char const * path, char const * uuid, char const * url, char const * repos, svn_revnum_t revision, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_wc_ensure_adm", _wrap_svn_wc_ensure_adm, METH_VARARGS, (char *)"svn_wc_ensure_adm(char const * path, char const * uuid, char const * url, svn_revnum_t revision, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_maybe_set_repos_root", _wrap_svn_wc_maybe_set_repos_root, METH_VARARGS, (char *)"svn_wc_maybe_set_repos_root(svn_wc_adm_access_t * adm_access, char const * path, char const * repos, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_wc_status3_t_kind_set", _wrap_svn_wc_status3_t_kind_set, METH_VARARGS, (char *)"svn_wc_status3_t_kind_set(svn_wc_status3_t self, svn_node_kind_t kind)"},
{ (char *)"svn_wc_status3_t_kind_get", _wrap_svn_wc_status3_t_kind_get, METH_VARARGS, (char *)"svn_wc_status3_t_kind_get(svn_wc_status3_t self) -> svn_node_kind_t"},
{ (char *)"svn_wc_status3_t_depth_set", _wrap_svn_wc_status3_t_depth_set, METH_VARARGS, (char *)"svn_wc_status3_t_depth_set(svn_wc_status3_t self, svn_depth_t depth)"},
@@ -38837,22 +39691,22 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_wc_status3_t_changed_rev_get", _wrap_svn_wc_status3_t_changed_rev_get, METH_VARARGS, (char *)"svn_wc_status3_t_changed_rev_get(svn_wc_status3_t self) -> svn_revnum_t"},
{ (char *)"svn_wc_status3_t_changed_date_set", _wrap_svn_wc_status3_t_changed_date_set, METH_VARARGS, (char *)"svn_wc_status3_t_changed_date_set(svn_wc_status3_t self, apr_time_t changed_date)"},
{ (char *)"svn_wc_status3_t_changed_date_get", _wrap_svn_wc_status3_t_changed_date_get, METH_VARARGS, (char *)"svn_wc_status3_t_changed_date_get(svn_wc_status3_t self) -> apr_time_t"},
- { (char *)"svn_wc_status3_t_changed_author_set", _wrap_svn_wc_status3_t_changed_author_set, METH_VARARGS, (char *)"svn_wc_status3_t_changed_author_set(svn_wc_status3_t self, char changed_author)"},
- { (char *)"svn_wc_status3_t_changed_author_get", _wrap_svn_wc_status3_t_changed_author_get, METH_VARARGS, (char *)"svn_wc_status3_t_changed_author_get(svn_wc_status3_t self) -> char"},
- { (char *)"svn_wc_status3_t_repos_root_url_set", _wrap_svn_wc_status3_t_repos_root_url_set, METH_VARARGS, (char *)"svn_wc_status3_t_repos_root_url_set(svn_wc_status3_t self, char repos_root_url)"},
- { (char *)"svn_wc_status3_t_repos_root_url_get", _wrap_svn_wc_status3_t_repos_root_url_get, METH_VARARGS, (char *)"svn_wc_status3_t_repos_root_url_get(svn_wc_status3_t self) -> char"},
- { (char *)"svn_wc_status3_t_repos_uuid_set", _wrap_svn_wc_status3_t_repos_uuid_set, METH_VARARGS, (char *)"svn_wc_status3_t_repos_uuid_set(svn_wc_status3_t self, char repos_uuid)"},
- { (char *)"svn_wc_status3_t_repos_uuid_get", _wrap_svn_wc_status3_t_repos_uuid_get, METH_VARARGS, (char *)"svn_wc_status3_t_repos_uuid_get(svn_wc_status3_t self) -> char"},
- { (char *)"svn_wc_status3_t_repos_relpath_set", _wrap_svn_wc_status3_t_repos_relpath_set, METH_VARARGS, (char *)"svn_wc_status3_t_repos_relpath_set(svn_wc_status3_t self, char repos_relpath)"},
- { (char *)"svn_wc_status3_t_repos_relpath_get", _wrap_svn_wc_status3_t_repos_relpath_get, METH_VARARGS, (char *)"svn_wc_status3_t_repos_relpath_get(svn_wc_status3_t self) -> char"},
+ { (char *)"svn_wc_status3_t_changed_author_set", _wrap_svn_wc_status3_t_changed_author_set, METH_VARARGS, (char *)"svn_wc_status3_t_changed_author_set(svn_wc_status3_t self, char const * changed_author)"},
+ { (char *)"svn_wc_status3_t_changed_author_get", _wrap_svn_wc_status3_t_changed_author_get, METH_VARARGS, (char *)"svn_wc_status3_t_changed_author_get(svn_wc_status3_t self) -> char const *"},
+ { (char *)"svn_wc_status3_t_repos_root_url_set", _wrap_svn_wc_status3_t_repos_root_url_set, METH_VARARGS, (char *)"svn_wc_status3_t_repos_root_url_set(svn_wc_status3_t self, char const * repos_root_url)"},
+ { (char *)"svn_wc_status3_t_repos_root_url_get", _wrap_svn_wc_status3_t_repos_root_url_get, METH_VARARGS, (char *)"svn_wc_status3_t_repos_root_url_get(svn_wc_status3_t self) -> char const *"},
+ { (char *)"svn_wc_status3_t_repos_uuid_set", _wrap_svn_wc_status3_t_repos_uuid_set, METH_VARARGS, (char *)"svn_wc_status3_t_repos_uuid_set(svn_wc_status3_t self, char const * repos_uuid)"},
+ { (char *)"svn_wc_status3_t_repos_uuid_get", _wrap_svn_wc_status3_t_repos_uuid_get, METH_VARARGS, (char *)"svn_wc_status3_t_repos_uuid_get(svn_wc_status3_t self) -> char const *"},
+ { (char *)"svn_wc_status3_t_repos_relpath_set", _wrap_svn_wc_status3_t_repos_relpath_set, METH_VARARGS, (char *)"svn_wc_status3_t_repos_relpath_set(svn_wc_status3_t self, char const * repos_relpath)"},
+ { (char *)"svn_wc_status3_t_repos_relpath_get", _wrap_svn_wc_status3_t_repos_relpath_get, METH_VARARGS, (char *)"svn_wc_status3_t_repos_relpath_get(svn_wc_status3_t self) -> char const *"},
{ (char *)"svn_wc_status3_t_switched_set", _wrap_svn_wc_status3_t_switched_set, METH_VARARGS, (char *)"svn_wc_status3_t_switched_set(svn_wc_status3_t self, svn_boolean_t switched)"},
{ (char *)"svn_wc_status3_t_switched_get", _wrap_svn_wc_status3_t_switched_get, METH_VARARGS, (char *)"svn_wc_status3_t_switched_get(svn_wc_status3_t self) -> svn_boolean_t"},
{ (char *)"svn_wc_status3_t_locked_set", _wrap_svn_wc_status3_t_locked_set, METH_VARARGS, (char *)"svn_wc_status3_t_locked_set(svn_wc_status3_t self, svn_boolean_t locked)"},
{ (char *)"svn_wc_status3_t_locked_get", _wrap_svn_wc_status3_t_locked_get, METH_VARARGS, (char *)"svn_wc_status3_t_locked_get(svn_wc_status3_t self) -> svn_boolean_t"},
{ (char *)"svn_wc_status3_t_lock_set", _wrap_svn_wc_status3_t_lock_set, METH_VARARGS, (char *)"svn_wc_status3_t_lock_set(svn_wc_status3_t self, svn_lock_t lock)"},
{ (char *)"svn_wc_status3_t_lock_get", _wrap_svn_wc_status3_t_lock_get, METH_VARARGS, (char *)"svn_wc_status3_t_lock_get(svn_wc_status3_t self) -> svn_lock_t"},
- { (char *)"svn_wc_status3_t_changelist_set", _wrap_svn_wc_status3_t_changelist_set, METH_VARARGS, (char *)"svn_wc_status3_t_changelist_set(svn_wc_status3_t self, char changelist)"},
- { (char *)"svn_wc_status3_t_changelist_get", _wrap_svn_wc_status3_t_changelist_get, METH_VARARGS, (char *)"svn_wc_status3_t_changelist_get(svn_wc_status3_t self) -> char"},
+ { (char *)"svn_wc_status3_t_changelist_set", _wrap_svn_wc_status3_t_changelist_set, METH_VARARGS, (char *)"svn_wc_status3_t_changelist_set(svn_wc_status3_t self, char const * changelist)"},
+ { (char *)"svn_wc_status3_t_changelist_get", _wrap_svn_wc_status3_t_changelist_get, METH_VARARGS, (char *)"svn_wc_status3_t_changelist_get(svn_wc_status3_t self) -> char const *"},
{ (char *)"svn_wc_status3_t_ood_kind_set", _wrap_svn_wc_status3_t_ood_kind_set, METH_VARARGS, (char *)"svn_wc_status3_t_ood_kind_set(svn_wc_status3_t self, svn_node_kind_t ood_kind)"},
{ (char *)"svn_wc_status3_t_ood_kind_get", _wrap_svn_wc_status3_t_ood_kind_get, METH_VARARGS, (char *)"svn_wc_status3_t_ood_kind_get(svn_wc_status3_t self) -> svn_node_kind_t"},
{ (char *)"svn_wc_status3_t_repos_node_status_set", _wrap_svn_wc_status3_t_repos_node_status_set, METH_VARARGS, (char *)"svn_wc_status3_t_repos_node_status_set(svn_wc_status3_t self, enum svn_wc_status_kind repos_node_status)"},
@@ -38867,8 +39721,14 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_wc_status3_t_ood_changed_rev_get", _wrap_svn_wc_status3_t_ood_changed_rev_get, METH_VARARGS, (char *)"svn_wc_status3_t_ood_changed_rev_get(svn_wc_status3_t self) -> svn_revnum_t"},
{ (char *)"svn_wc_status3_t_ood_changed_date_set", _wrap_svn_wc_status3_t_ood_changed_date_set, METH_VARARGS, (char *)"svn_wc_status3_t_ood_changed_date_set(svn_wc_status3_t self, apr_time_t ood_changed_date)"},
{ (char *)"svn_wc_status3_t_ood_changed_date_get", _wrap_svn_wc_status3_t_ood_changed_date_get, METH_VARARGS, (char *)"svn_wc_status3_t_ood_changed_date_get(svn_wc_status3_t self) -> apr_time_t"},
- { (char *)"svn_wc_status3_t_ood_changed_author_set", _wrap_svn_wc_status3_t_ood_changed_author_set, METH_VARARGS, (char *)"svn_wc_status3_t_ood_changed_author_set(svn_wc_status3_t self, char ood_changed_author)"},
- { (char *)"svn_wc_status3_t_ood_changed_author_get", _wrap_svn_wc_status3_t_ood_changed_author_get, METH_VARARGS, (char *)"svn_wc_status3_t_ood_changed_author_get(svn_wc_status3_t self) -> char"},
+ { (char *)"svn_wc_status3_t_ood_changed_author_set", _wrap_svn_wc_status3_t_ood_changed_author_set, METH_VARARGS, (char *)"svn_wc_status3_t_ood_changed_author_set(svn_wc_status3_t self, char const * ood_changed_author)"},
+ { (char *)"svn_wc_status3_t_ood_changed_author_get", _wrap_svn_wc_status3_t_ood_changed_author_get, METH_VARARGS, (char *)"svn_wc_status3_t_ood_changed_author_get(svn_wc_status3_t self) -> char const *"},
+ { (char *)"svn_wc_status3_t_moved_from_abspath_set", _wrap_svn_wc_status3_t_moved_from_abspath_set, METH_VARARGS, (char *)"svn_wc_status3_t_moved_from_abspath_set(svn_wc_status3_t self, char const * moved_from_abspath)"},
+ { (char *)"svn_wc_status3_t_moved_from_abspath_get", _wrap_svn_wc_status3_t_moved_from_abspath_get, METH_VARARGS, (char *)"svn_wc_status3_t_moved_from_abspath_get(svn_wc_status3_t self) -> char const *"},
+ { (char *)"svn_wc_status3_t_moved_to_abspath_set", _wrap_svn_wc_status3_t_moved_to_abspath_set, METH_VARARGS, (char *)"svn_wc_status3_t_moved_to_abspath_set(svn_wc_status3_t self, char const * moved_to_abspath)"},
+ { (char *)"svn_wc_status3_t_moved_to_abspath_get", _wrap_svn_wc_status3_t_moved_to_abspath_get, METH_VARARGS, (char *)"svn_wc_status3_t_moved_to_abspath_get(svn_wc_status3_t self) -> char const *"},
+ { (char *)"svn_wc_status3_t_file_external_set", _wrap_svn_wc_status3_t_file_external_set, METH_VARARGS, (char *)"svn_wc_status3_t_file_external_set(svn_wc_status3_t self, svn_boolean_t file_external)"},
+ { (char *)"svn_wc_status3_t_file_external_get", _wrap_svn_wc_status3_t_file_external_get, METH_VARARGS, (char *)"svn_wc_status3_t_file_external_get(svn_wc_status3_t self) -> svn_boolean_t"},
{ (char *)"new_svn_wc_status3_t", _wrap_new_svn_wc_status3_t, METH_VARARGS, (char *)"new_svn_wc_status3_t() -> svn_wc_status3_t"},
{ (char *)"delete_svn_wc_status3_t", _wrap_delete_svn_wc_status3_t, METH_VARARGS, (char *)"delete_svn_wc_status3_t(svn_wc_status3_t self)"},
{ (char *)"svn_wc_status3_t_swigregister", svn_wc_status3_t_swigregister, METH_VARARGS, NULL},
@@ -38890,16 +39750,16 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_wc_status2_t_repos_prop_status_get", _wrap_svn_wc_status2_t_repos_prop_status_get, METH_VARARGS, (char *)"svn_wc_status2_t_repos_prop_status_get(svn_wc_status2_t self) -> enum svn_wc_status_kind"},
{ (char *)"svn_wc_status2_t_repos_lock_set", _wrap_svn_wc_status2_t_repos_lock_set, METH_VARARGS, (char *)"svn_wc_status2_t_repos_lock_set(svn_wc_status2_t self, svn_lock_t repos_lock)"},
{ (char *)"svn_wc_status2_t_repos_lock_get", _wrap_svn_wc_status2_t_repos_lock_get, METH_VARARGS, (char *)"svn_wc_status2_t_repos_lock_get(svn_wc_status2_t self) -> svn_lock_t"},
- { (char *)"svn_wc_status2_t_url_set", _wrap_svn_wc_status2_t_url_set, METH_VARARGS, (char *)"svn_wc_status2_t_url_set(svn_wc_status2_t self, char url)"},
- { (char *)"svn_wc_status2_t_url_get", _wrap_svn_wc_status2_t_url_get, METH_VARARGS, (char *)"svn_wc_status2_t_url_get(svn_wc_status2_t self) -> char"},
+ { (char *)"svn_wc_status2_t_url_set", _wrap_svn_wc_status2_t_url_set, METH_VARARGS, (char *)"svn_wc_status2_t_url_set(svn_wc_status2_t self, char const * url)"},
+ { (char *)"svn_wc_status2_t_url_get", _wrap_svn_wc_status2_t_url_get, METH_VARARGS, (char *)"svn_wc_status2_t_url_get(svn_wc_status2_t self) -> char const *"},
{ (char *)"svn_wc_status2_t_ood_last_cmt_rev_set", _wrap_svn_wc_status2_t_ood_last_cmt_rev_set, METH_VARARGS, (char *)"svn_wc_status2_t_ood_last_cmt_rev_set(svn_wc_status2_t self, svn_revnum_t ood_last_cmt_rev)"},
{ (char *)"svn_wc_status2_t_ood_last_cmt_rev_get", _wrap_svn_wc_status2_t_ood_last_cmt_rev_get, METH_VARARGS, (char *)"svn_wc_status2_t_ood_last_cmt_rev_get(svn_wc_status2_t self) -> svn_revnum_t"},
{ (char *)"svn_wc_status2_t_ood_last_cmt_date_set", _wrap_svn_wc_status2_t_ood_last_cmt_date_set, METH_VARARGS, (char *)"svn_wc_status2_t_ood_last_cmt_date_set(svn_wc_status2_t self, apr_time_t ood_last_cmt_date)"},
{ (char *)"svn_wc_status2_t_ood_last_cmt_date_get", _wrap_svn_wc_status2_t_ood_last_cmt_date_get, METH_VARARGS, (char *)"svn_wc_status2_t_ood_last_cmt_date_get(svn_wc_status2_t self) -> apr_time_t"},
{ (char *)"svn_wc_status2_t_ood_kind_set", _wrap_svn_wc_status2_t_ood_kind_set, METH_VARARGS, (char *)"svn_wc_status2_t_ood_kind_set(svn_wc_status2_t self, svn_node_kind_t ood_kind)"},
{ (char *)"svn_wc_status2_t_ood_kind_get", _wrap_svn_wc_status2_t_ood_kind_get, METH_VARARGS, (char *)"svn_wc_status2_t_ood_kind_get(svn_wc_status2_t self) -> svn_node_kind_t"},
- { (char *)"svn_wc_status2_t_ood_last_cmt_author_set", _wrap_svn_wc_status2_t_ood_last_cmt_author_set, METH_VARARGS, (char *)"svn_wc_status2_t_ood_last_cmt_author_set(svn_wc_status2_t self, char ood_last_cmt_author)"},
- { (char *)"svn_wc_status2_t_ood_last_cmt_author_get", _wrap_svn_wc_status2_t_ood_last_cmt_author_get, METH_VARARGS, (char *)"svn_wc_status2_t_ood_last_cmt_author_get(svn_wc_status2_t self) -> char"},
+ { (char *)"svn_wc_status2_t_ood_last_cmt_author_set", _wrap_svn_wc_status2_t_ood_last_cmt_author_set, METH_VARARGS, (char *)"svn_wc_status2_t_ood_last_cmt_author_set(svn_wc_status2_t self, char const * ood_last_cmt_author)"},
+ { (char *)"svn_wc_status2_t_ood_last_cmt_author_get", _wrap_svn_wc_status2_t_ood_last_cmt_author_get, METH_VARARGS, (char *)"svn_wc_status2_t_ood_last_cmt_author_get(svn_wc_status2_t self) -> char const *"},
{ (char *)"svn_wc_status2_t_tree_conflict_set", _wrap_svn_wc_status2_t_tree_conflict_set, METH_VARARGS, (char *)"svn_wc_status2_t_tree_conflict_set(svn_wc_status2_t self, svn_wc_conflict_description_t tree_conflict)"},
{ (char *)"svn_wc_status2_t_tree_conflict_get", _wrap_svn_wc_status2_t_tree_conflict_get, METH_VARARGS, (char *)"svn_wc_status2_t_tree_conflict_get(svn_wc_status2_t self) -> svn_wc_conflict_description_t"},
{ (char *)"svn_wc_status2_t_file_external_set", _wrap_svn_wc_status2_t_file_external_set, METH_VARARGS, (char *)"svn_wc_status2_t_file_external_set(svn_wc_status2_t self, svn_boolean_t file_external)"},
@@ -38933,743 +39793,582 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"svn_wc_dup_status3", _wrap_svn_wc_dup_status3, METH_VARARGS, (char *)"svn_wc_dup_status3(svn_wc_status3_t orig_stat, apr_pool_t pool) -> svn_wc_status3_t"},
{ (char *)"svn_wc_dup_status2", _wrap_svn_wc_dup_status2, METH_VARARGS, (char *)"svn_wc_dup_status2(svn_wc_status2_t orig_stat, apr_pool_t pool) -> svn_wc_status2_t"},
{ (char *)"svn_wc_dup_status", _wrap_svn_wc_dup_status, METH_VARARGS, (char *)"svn_wc_dup_status(svn_wc_status_t orig_stat, apr_pool_t pool) -> svn_wc_status_t"},
- { (char *)"svn_wc_status3", _wrap_svn_wc_status3, METH_VARARGS, (char *)"\n"
- "svn_wc_status3(svn_wc_context_t wc_ctx, char local_abspath, apr_pool_t result_pool, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_wc_status2", _wrap_svn_wc_status2, METH_VARARGS, (char *)"svn_wc_status2(char path, svn_wc_adm_access_t adm_access, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_wc_status", _wrap_svn_wc_status, METH_VARARGS, (char *)"svn_wc_status(char path, svn_wc_adm_access_t adm_access, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_status3", _wrap_svn_wc_status3, METH_VARARGS, (char *)"svn_wc_status3(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_wc_status2", _wrap_svn_wc_status2, METH_VARARGS, (char *)"svn_wc_status2(char const * path, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_status", _wrap_svn_wc_status, METH_VARARGS, (char *)"svn_wc_status(char const * path, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_wc_walk_status", _wrap_svn_wc_walk_status, METH_VARARGS, (char *)"\n"
- "svn_wc_walk_status(svn_wc_context_t wc_ctx, char local_abspath, svn_depth_t depth, \n"
- " svn_boolean_t get_all, svn_boolean_t no_ignore, \n"
- " svn_boolean_t ignore_text_mods, \n"
- " apr_array_header_t ignore_patterns, svn_wc_status_func4_t status_func, \n"
- " void status_baton, \n"
+ "svn_wc_walk_status(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_depth_t depth, svn_boolean_t get_all, \n"
+ " svn_boolean_t no_ignore, svn_boolean_t ignore_text_mods, apr_array_header_t ignore_patterns, \n"
+ " svn_wc_status_func4_t status_func, void * status_baton, \n"
" svn_cancel_func_t cancel_func, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_get_status_editor5", _wrap_svn_wc_get_status_editor5, METH_VARARGS, (char *)"\n"
- "svn_wc_get_status_editor5(svn_wc_context_t wc_ctx, char anchor_abspath, char target_basename, \n"
- " svn_depth_t depth, svn_boolean_t get_all, \n"
- " svn_boolean_t no_ignore, svn_boolean_t depth_as_sticky, \n"
- " svn_boolean_t server_performs_filtering, \n"
- " apr_array_header_t ignore_patterns, \n"
- " svn_wc_status_func4_t status_func, \n"
- " void status_baton, svn_cancel_func_t cancel_func, \n"
- " apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_get_status_editor5(svn_wc_context_t * wc_ctx, char const * anchor_abspath, char const * target_basename, \n"
+ " svn_depth_t depth, svn_boolean_t get_all, svn_boolean_t no_ignore, svn_boolean_t depth_as_sticky, \n"
+ " svn_boolean_t server_performs_filtering, apr_array_header_t ignore_patterns, \n"
+ " svn_wc_status_func4_t status_func, void * status_baton, \n"
+ " svn_cancel_func_t cancel_func, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_get_status_editor4", _wrap_svn_wc_get_status_editor4, METH_VARARGS, (char *)"\n"
- "svn_wc_get_status_editor4(svn_wc_adm_access_t anchor, char target, svn_depth_t depth, \n"
- " svn_boolean_t get_all, svn_boolean_t no_ignore, \n"
- " apr_array_header_t ignore_patterns, \n"
- " svn_wc_status_func3_t status_func, void status_baton, \n"
- " svn_cancel_func_t cancel_func, svn_wc_traversal_info_t traversal_info, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_get_status_editor4(svn_wc_adm_access_t * anchor, char const * target, svn_depth_t depth, svn_boolean_t get_all, \n"
+ " svn_boolean_t no_ignore, apr_array_header_t ignore_patterns, svn_wc_status_func3_t status_func, \n"
+ " void * status_baton, svn_cancel_func_t cancel_func, \n"
+ " svn_wc_traversal_info_t * traversal_info, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_get_status_editor3", _wrap_svn_wc_get_status_editor3, METH_VARARGS, (char *)"\n"
- "svn_wc_get_status_editor3(svn_wc_adm_access_t anchor, char target, svn_depth_t depth, \n"
- " svn_boolean_t get_all, svn_boolean_t no_ignore, \n"
- " apr_array_header_t ignore_patterns, \n"
- " svn_wc_status_func2_t status_func, svn_cancel_func_t cancel_func, \n"
- " svn_wc_traversal_info_t traversal_info, \n"
+ "svn_wc_get_status_editor3(svn_wc_adm_access_t * anchor, char const * target, svn_depth_t depth, svn_boolean_t get_all, \n"
+ " svn_boolean_t no_ignore, apr_array_header_t ignore_patterns, svn_wc_status_func2_t status_func, \n"
+ " svn_cancel_func_t cancel_func, svn_wc_traversal_info_t * traversal_info, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_get_status_editor2", _wrap_svn_wc_get_status_editor2, METH_VARARGS, (char *)"\n"
- "svn_wc_get_status_editor2(svn_wc_adm_access_t anchor, char target, apr_hash_t config, \n"
- " svn_boolean_t recurse, svn_boolean_t get_all, \n"
- " svn_boolean_t no_ignore, svn_wc_status_func2_t status_func, \n"
- " svn_cancel_func_t cancel_func, \n"
- " svn_wc_traversal_info_t traversal_info, \n"
+ "svn_wc_get_status_editor2(svn_wc_adm_access_t * anchor, char const * target, apr_hash_t config, svn_boolean_t recurse, \n"
+ " svn_boolean_t get_all, svn_boolean_t no_ignore, svn_wc_status_func2_t status_func, \n"
+ " svn_cancel_func_t cancel_func, svn_wc_traversal_info_t * traversal_info, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_get_status_editor", _wrap_svn_wc_get_status_editor, METH_VARARGS, (char *)"\n"
- "svn_wc_get_status_editor(svn_wc_adm_access_t anchor, char target, apr_hash_t config, \n"
- " svn_boolean_t recurse, svn_boolean_t get_all, \n"
- " svn_boolean_t no_ignore, svn_wc_status_func_t status_func, \n"
- " svn_cancel_func_t cancel_func, \n"
- " svn_wc_traversal_info_t traversal_info, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_wc_status_set_repos_locks", _wrap_svn_wc_status_set_repos_locks, METH_VARARGS, (char *)"\n"
- "svn_wc_status_set_repos_locks(void set_locks_baton, apr_hash_t locks, char repos_root, \n"
+ "svn_wc_get_status_editor(svn_wc_adm_access_t * anchor, char const * target, apr_hash_t config, svn_boolean_t recurse, \n"
+ " svn_boolean_t get_all, svn_boolean_t no_ignore, svn_wc_status_func_t status_func, \n"
+ " svn_cancel_func_t cancel_func, svn_wc_traversal_info_t * traversal_info, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_wc_status_set_repos_locks", _wrap_svn_wc_status_set_repos_locks, METH_VARARGS, (char *)"svn_wc_status_set_repos_locks(void * set_locks_baton, apr_hash_t locks, char const * repos_root, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_wc_copy3", _wrap_svn_wc_copy3, METH_VARARGS, (char *)"\n"
- "svn_wc_copy3(svn_wc_context_t wc_ctx, char src_abspath, char dst_abspath, \n"
- " svn_boolean_t metadata_only, svn_cancel_func_t cancel_func, \n"
- " svn_wc_notify_func2_t notify_func, \n"
+ "svn_wc_copy3(svn_wc_context_t * wc_ctx, char const * src_abspath, char const * dst_abspath, svn_boolean_t metadata_only, \n"
+ " svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func, \n"
" apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_copy2", _wrap_svn_wc_copy2, METH_VARARGS, (char *)"\n"
- "svn_wc_copy2(char src, svn_wc_adm_access_t dst_parent, char dst_basename, \n"
- " svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_copy2(char const * src, svn_wc_adm_access_t * dst_parent, char const * dst_basename, svn_cancel_func_t cancel_func, \n"
+ " svn_wc_notify_func2_t notify_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_copy", _wrap_svn_wc_copy, METH_VARARGS, (char *)"\n"
- "svn_wc_copy(char src, svn_wc_adm_access_t dst_parent, char dst_basename, \n"
- " svn_cancel_func_t cancel_func, svn_wc_notify_func_t notify_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_copy(char const * src, svn_wc_adm_access_t * dst_parent, char const * dst_basename, svn_cancel_func_t cancel_func, \n"
+ " svn_wc_notify_func_t notify_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_move", _wrap_svn_wc_move, METH_VARARGS, (char *)"\n"
- "svn_wc_move(svn_wc_context_t wc_ctx, char src_abspath, char dst_abspath, \n"
- " svn_boolean_t metadata_only, svn_cancel_func_t cancel_func, \n"
- " svn_wc_notify_func2_t notify_func, \n"
+ "svn_wc_move(svn_wc_context_t * wc_ctx, char const * src_abspath, char const * dst_abspath, svn_boolean_t metadata_only, \n"
+ " svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func, \n"
" apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_delete4", _wrap_svn_wc_delete4, METH_VARARGS, (char *)"\n"
- "svn_wc_delete4(svn_wc_context_t wc_ctx, char local_abspath, svn_boolean_t keep_local, \n"
- " svn_boolean_t delete_unversioned_target, \n"
- " svn_cancel_func_t cancel_func, \n"
- " svn_wc_notify_func2_t notify_func, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_delete4(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_boolean_t keep_local, \n"
+ " svn_boolean_t delete_unversioned_target, svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_delete3", _wrap_svn_wc_delete3, METH_VARARGS, (char *)"\n"
- "svn_wc_delete3(char path, svn_wc_adm_access_t adm_access, svn_cancel_func_t cancel_func, \n"
- " svn_wc_notify_func2_t notify_func, \n"
- " svn_boolean_t keep_local, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_delete3(char const * path, svn_wc_adm_access_t * adm_access, svn_cancel_func_t cancel_func, \n"
+ " svn_wc_notify_func2_t notify_func, svn_boolean_t keep_local, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_delete2", _wrap_svn_wc_delete2, METH_VARARGS, (char *)"\n"
- "svn_wc_delete2(char path, svn_wc_adm_access_t adm_access, svn_cancel_func_t cancel_func, \n"
- " svn_wc_notify_func2_t notify_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_delete2(char const * path, svn_wc_adm_access_t * adm_access, svn_cancel_func_t cancel_func, \n"
+ " svn_wc_notify_func2_t notify_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_delete", _wrap_svn_wc_delete, METH_VARARGS, (char *)"\n"
- "svn_wc_delete(char path, svn_wc_adm_access_t adm_access, svn_cancel_func_t cancel_func, \n"
- " svn_wc_notify_func_t notify_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_delete(char const * path, svn_wc_adm_access_t * adm_access, svn_cancel_func_t cancel_func, \n"
+ " svn_wc_notify_func_t notify_func, apr_pool_t pool) -> svn_error_t\n"
+ ""},
+ { (char *)"svn_wc_add_from_disk2", _wrap_svn_wc_add_from_disk2, METH_VARARGS, (char *)"\n"
+ "svn_wc_add_from_disk2(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_hash_t props, svn_wc_notify_func2_t notify_func, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_add_from_disk", _wrap_svn_wc_add_from_disk, METH_VARARGS, (char *)"\n"
- "svn_wc_add_from_disk(svn_wc_context_t wc_ctx, char local_abspath, svn_wc_notify_func2_t notify_func, \n"
+ "svn_wc_add_from_disk(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_wc_notify_func2_t notify_func, \n"
" apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_add4", _wrap_svn_wc_add4, METH_VARARGS, (char *)"\n"
- "svn_wc_add4(svn_wc_context_t wc_ctx, char local_abspath, svn_depth_t depth, \n"
- " char copyfrom_url, svn_revnum_t copyfrom_rev, \n"
- " svn_cancel_func_t cancel_func, \n"
+ "svn_wc_add4(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_depth_t depth, char const * copyfrom_url, \n"
+ " svn_revnum_t copyfrom_rev, svn_cancel_func_t cancel_func, \n"
" svn_wc_notify_func2_t notify_func, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_add3", _wrap_svn_wc_add3, METH_VARARGS, (char *)"\n"
- "svn_wc_add3(char path, svn_wc_adm_access_t parent_access, svn_depth_t depth, \n"
- " char copyfrom_url, svn_revnum_t copyfrom_rev, \n"
- " svn_cancel_func_t cancel_func, \n"
+ "svn_wc_add3(char const * path, svn_wc_adm_access_t * parent_access, svn_depth_t depth, char const * copyfrom_url, \n"
+ " svn_revnum_t copyfrom_rev, svn_cancel_func_t cancel_func, \n"
" svn_wc_notify_func2_t notify_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_add2", _wrap_svn_wc_add2, METH_VARARGS, (char *)"\n"
- "svn_wc_add2(char path, svn_wc_adm_access_t parent_access, char copyfrom_url, \n"
- " svn_revnum_t copyfrom_rev, svn_cancel_func_t cancel_func, \n"
- " svn_wc_notify_func2_t notify_func, \n"
+ "svn_wc_add2(char const * path, svn_wc_adm_access_t * parent_access, char const * copyfrom_url, \n"
+ " svn_revnum_t copyfrom_rev, svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_add", _wrap_svn_wc_add, METH_VARARGS, (char *)"\n"
- "svn_wc_add(char path, svn_wc_adm_access_t parent_access, char copyfrom_url, \n"
- " svn_revnum_t copyfrom_rev, svn_cancel_func_t cancel_func, \n"
- " svn_wc_notify_func_t notify_func, \n"
+ "svn_wc_add(char const * path, svn_wc_adm_access_t * parent_access, char const * copyfrom_url, \n"
+ " svn_revnum_t copyfrom_rev, svn_cancel_func_t cancel_func, svn_wc_notify_func_t notify_func, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_add_repos_file4", _wrap_svn_wc_add_repos_file4, METH_VARARGS, (char *)"\n"
- "svn_wc_add_repos_file4(svn_wc_context_t wc_ctx, char local_abspath, svn_stream_t new_base_contents, \n"
- " svn_stream_t new_contents, \n"
- " apr_hash_t new_base_props, apr_hash_t new_props, \n"
- " char copyfrom_url, svn_revnum_t copyfrom_rev, \n"
- " svn_cancel_func_t cancel_func, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_add_repos_file4(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_stream_t * new_base_contents, \n"
+ " svn_stream_t * new_contents, apr_hash_t new_base_props, apr_hash_t new_props, \n"
+ " char const * copyfrom_url, svn_revnum_t copyfrom_rev, svn_cancel_func_t cancel_func, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_add_repos_file3", _wrap_svn_wc_add_repos_file3, METH_VARARGS, (char *)"\n"
- "svn_wc_add_repos_file3(char dst_path, svn_wc_adm_access_t adm_access, svn_stream_t new_base_contents, \n"
- " svn_stream_t new_contents, \n"
- " apr_hash_t new_base_props, apr_hash_t new_props, \n"
- " char copyfrom_url, svn_revnum_t copyfrom_rev, \n"
- " svn_cancel_func_t cancel_func, \n"
+ "svn_wc_add_repos_file3(char const * dst_path, svn_wc_adm_access_t * adm_access, svn_stream_t * new_base_contents, \n"
+ " svn_stream_t * new_contents, apr_hash_t new_base_props, apr_hash_t new_props, \n"
+ " char const * copyfrom_url, svn_revnum_t copyfrom_rev, svn_cancel_func_t cancel_func, \n"
" svn_wc_notify_func2_t notify_func, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_add_repos_file2", _wrap_svn_wc_add_repos_file2, METH_VARARGS, (char *)"\n"
- "svn_wc_add_repos_file2(char dst_path, svn_wc_adm_access_t adm_access, char new_text_base_path, \n"
- " char new_text_path, apr_hash_t new_base_props, \n"
- " apr_hash_t new_props, \n"
- " char copyfrom_url, svn_revnum_t copyfrom_rev, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_add_repos_file2(char const * dst_path, svn_wc_adm_access_t * adm_access, char const * new_text_base_path, \n"
+ " char const * new_text_path, apr_hash_t new_base_props, apr_hash_t new_props, \n"
+ " char const * copyfrom_url, svn_revnum_t copyfrom_rev, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_add_repos_file", _wrap_svn_wc_add_repos_file, METH_VARARGS, (char *)"\n"
- "svn_wc_add_repos_file(char dst_path, svn_wc_adm_access_t adm_access, char new_text_path, \n"
- " apr_hash_t new_props, char copyfrom_url, \n"
- " svn_revnum_t copyfrom_rev, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_add_repos_file(char const * dst_path, svn_wc_adm_access_t * adm_access, char const * new_text_path, \n"
+ " apr_hash_t new_props, char const * copyfrom_url, svn_revnum_t copyfrom_rev, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_remove_from_revision_control2", _wrap_svn_wc_remove_from_revision_control2, METH_VARARGS, (char *)"\n"
- "svn_wc_remove_from_revision_control2(svn_wc_context_t wc_ctx, char local_abspath, svn_boolean_t destroy_wf, \n"
- " svn_boolean_t instant_error, \n"
- " svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_remove_from_revision_control2(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_boolean_t destroy_wf, \n"
+ " svn_boolean_t instant_error, svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_remove_from_revision_control", _wrap_svn_wc_remove_from_revision_control, METH_VARARGS, (char *)"\n"
- "svn_wc_remove_from_revision_control(svn_wc_adm_access_t adm_access, char name, svn_boolean_t destroy_wf, \n"
- " svn_boolean_t instant_error, \n"
+ "svn_wc_remove_from_revision_control(svn_wc_adm_access_t * adm_access, char const * name, svn_boolean_t destroy_wf, svn_boolean_t instant_error, \n"
" svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_resolved_conflict5", _wrap_svn_wc_resolved_conflict5, METH_VARARGS, (char *)"\n"
- "svn_wc_resolved_conflict5(svn_wc_context_t wc_ctx, char local_abspath, svn_depth_t depth, \n"
- " svn_boolean_t resolve_text, char resolve_prop, \n"
- " svn_boolean_t resolve_tree, svn_wc_conflict_choice_t conflict_choice, \n"
- " svn_cancel_func_t cancel_func, \n"
- " svn_wc_notify_func2_t notify_func, \n"
+ "svn_wc_resolved_conflict5(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_depth_t depth, svn_boolean_t resolve_text, \n"
+ " char const * resolve_prop, svn_boolean_t resolve_tree, \n"
+ " svn_wc_conflict_choice_t conflict_choice, svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func, \n"
" apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_resolved_conflict4", _wrap_svn_wc_resolved_conflict4, METH_VARARGS, (char *)"\n"
- "svn_wc_resolved_conflict4(char path, svn_wc_adm_access_t adm_access, svn_boolean_t resolve_text, \n"
- " svn_boolean_t resolve_props, \n"
- " svn_boolean_t resolve_tree, svn_depth_t depth, \n"
- " svn_wc_conflict_choice_t conflict_choice, \n"
- " svn_wc_notify_func2_t notify_func, svn_cancel_func_t cancel_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_resolved_conflict4(char const * path, svn_wc_adm_access_t * adm_access, svn_boolean_t resolve_text, \n"
+ " svn_boolean_t resolve_props, svn_boolean_t resolve_tree, svn_depth_t depth, \n"
+ " svn_wc_conflict_choice_t conflict_choice, svn_wc_notify_func2_t notify_func, \n"
+ " svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_resolved_conflict3", _wrap_svn_wc_resolved_conflict3, METH_VARARGS, (char *)"\n"
- "svn_wc_resolved_conflict3(char path, svn_wc_adm_access_t adm_access, svn_boolean_t resolve_text, \n"
- " svn_boolean_t resolve_props, \n"
- " svn_depth_t depth, svn_wc_conflict_choice_t conflict_choice, \n"
- " svn_wc_notify_func2_t notify_func, \n"
- " svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_resolved_conflict3(char const * path, svn_wc_adm_access_t * adm_access, svn_boolean_t resolve_text, \n"
+ " svn_boolean_t resolve_props, svn_depth_t depth, svn_wc_conflict_choice_t conflict_choice, \n"
+ " svn_wc_notify_func2_t notify_func, svn_cancel_func_t cancel_func, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_resolved_conflict2", _wrap_svn_wc_resolved_conflict2, METH_VARARGS, (char *)"\n"
- "svn_wc_resolved_conflict2(char path, svn_wc_adm_access_t adm_access, svn_boolean_t resolve_text, \n"
- " svn_boolean_t resolve_props, \n"
- " svn_boolean_t recurse, svn_wc_notify_func2_t notify_func, \n"
- " svn_cancel_func_t cancel_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_resolved_conflict2(char const * path, svn_wc_adm_access_t * adm_access, svn_boolean_t resolve_text, \n"
+ " svn_boolean_t resolve_props, svn_boolean_t recurse, svn_wc_notify_func2_t notify_func, \n"
+ " svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_resolved_conflict", _wrap_svn_wc_resolved_conflict, METH_VARARGS, (char *)"\n"
- "svn_wc_resolved_conflict(char path, svn_wc_adm_access_t adm_access, svn_boolean_t resolve_text, \n"
- " svn_boolean_t resolve_props, \n"
- " svn_boolean_t recurse, svn_wc_notify_func_t notify_func, \n"
+ "svn_wc_resolved_conflict(char const * path, svn_wc_adm_access_t * adm_access, svn_boolean_t resolve_text, \n"
+ " svn_boolean_t resolve_props, svn_boolean_t recurse, svn_wc_notify_func_t notify_func, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_wc_committed_queue_create", _wrap_svn_wc_committed_queue_create, METH_VARARGS, (char *)"svn_wc_committed_queue_create(apr_pool_t pool) -> svn_wc_committed_queue_t"},
+ { (char *)"svn_wc_committed_queue_create", _wrap_svn_wc_committed_queue_create, METH_VARARGS, (char *)"svn_wc_committed_queue_create(apr_pool_t pool) -> svn_wc_committed_queue_t *"},
{ (char *)"svn_wc_queue_committed3", _wrap_svn_wc_queue_committed3, METH_VARARGS, (char *)"\n"
- "svn_wc_queue_committed3(svn_wc_committed_queue_t queue, svn_wc_context_t wc_ctx, \n"
- " char local_abspath, svn_boolean_t recurse, \n"
- " apr_array_header_t wcprop_changes, svn_boolean_t remove_lock, \n"
- " svn_boolean_t remove_changelist, \n"
- " svn_checksum_t sha1_checksum, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_queue_committed3(svn_wc_committed_queue_t * queue, svn_wc_context_t * wc_ctx, char const * local_abspath, \n"
+ " svn_boolean_t recurse, apr_array_header_t wcprop_changes, svn_boolean_t remove_lock, \n"
+ " svn_boolean_t remove_changelist, svn_checksum_t sha1_checksum, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_queue_committed2", _wrap_svn_wc_queue_committed2, METH_VARARGS, (char *)"\n"
- "svn_wc_queue_committed2(svn_wc_committed_queue_t queue, char path, svn_wc_adm_access_t adm_access, \n"
- " svn_boolean_t recurse, \n"
- " apr_array_header_t wcprop_changes, svn_boolean_t remove_lock, \n"
- " svn_boolean_t remove_changelist, \n"
- " svn_checksum_t md5_checksum, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_queue_committed2(svn_wc_committed_queue_t * queue, char const * path, svn_wc_adm_access_t * adm_access, \n"
+ " svn_boolean_t recurse, apr_array_header_t wcprop_changes, svn_boolean_t remove_lock, \n"
+ " svn_boolean_t remove_changelist, svn_checksum_t md5_checksum, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_queue_committed", _wrap_svn_wc_queue_committed, METH_VARARGS, (char *)"\n"
- "svn_wc_queue_committed(char path, svn_wc_adm_access_t adm_access, svn_boolean_t recurse, \n"
- " apr_array_header_t wcprop_changes, \n"
+ "svn_wc_queue_committed(char const * path, svn_wc_adm_access_t * adm_access, svn_boolean_t recurse, apr_array_header_t wcprop_changes, \n"
" svn_boolean_t remove_lock, svn_boolean_t remove_changelist, \n"
- " unsigned char digest, apr_pool_t pool) -> svn_error_t\n"
+ " unsigned char const * digest, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_process_committed_queue2", _wrap_svn_wc_process_committed_queue2, METH_VARARGS, (char *)"\n"
- "svn_wc_process_committed_queue2(svn_wc_committed_queue_t queue, svn_wc_context_t wc_ctx, \n"
- " svn_revnum_t new_revnum, char rev_date, \n"
- " char rev_author, svn_cancel_func_t cancel_func, \n"
+ "svn_wc_process_committed_queue2(svn_wc_committed_queue_t * queue, svn_wc_context_t * wc_ctx, svn_revnum_t new_revnum, \n"
+ " char const * rev_date, char const * rev_author, svn_cancel_func_t cancel_func, \n"
" apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_process_committed_queue", _wrap_svn_wc_process_committed_queue, METH_VARARGS, (char *)"\n"
- "svn_wc_process_committed_queue(svn_wc_committed_queue_t queue, svn_wc_adm_access_t adm_access, \n"
- " svn_revnum_t new_revnum, char rev_date, \n"
- " char rev_author, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_process_committed_queue(svn_wc_committed_queue_t * queue, svn_wc_adm_access_t * adm_access, svn_revnum_t new_revnum, \n"
+ " char const * rev_date, char const * rev_author, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_process_committed4", _wrap_svn_wc_process_committed4, METH_VARARGS, (char *)"\n"
- "svn_wc_process_committed4(char path, svn_wc_adm_access_t adm_access, svn_boolean_t recurse, \n"
- " svn_revnum_t new_revnum, char rev_date, \n"
- " char rev_author, apr_array_header_t wcprop_changes, \n"
+ "svn_wc_process_committed4(char const * path, svn_wc_adm_access_t * adm_access, svn_boolean_t recurse, svn_revnum_t new_revnum, \n"
+ " char const * rev_date, char const * rev_author, apr_array_header_t wcprop_changes, \n"
" svn_boolean_t remove_lock, svn_boolean_t remove_changelist, \n"
- " unsigned char digest, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ " unsigned char const * digest, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_process_committed3", _wrap_svn_wc_process_committed3, METH_VARARGS, (char *)"\n"
- "svn_wc_process_committed3(char path, svn_wc_adm_access_t adm_access, svn_boolean_t recurse, \n"
- " svn_revnum_t new_revnum, char rev_date, \n"
- " char rev_author, apr_array_header_t wcprop_changes, \n"
- " svn_boolean_t remove_lock, unsigned char digest, \n"
+ "svn_wc_process_committed3(char const * path, svn_wc_adm_access_t * adm_access, svn_boolean_t recurse, svn_revnum_t new_revnum, \n"
+ " char const * rev_date, char const * rev_author, apr_array_header_t wcprop_changes, \n"
+ " svn_boolean_t remove_lock, unsigned char const * digest, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_process_committed2", _wrap_svn_wc_process_committed2, METH_VARARGS, (char *)"\n"
- "svn_wc_process_committed2(char path, svn_wc_adm_access_t adm_access, svn_boolean_t recurse, \n"
- " svn_revnum_t new_revnum, char rev_date, \n"
- " char rev_author, apr_array_header_t wcprop_changes, \n"
+ "svn_wc_process_committed2(char const * path, svn_wc_adm_access_t * adm_access, svn_boolean_t recurse, svn_revnum_t new_revnum, \n"
+ " char const * rev_date, char const * rev_author, apr_array_header_t wcprop_changes, \n"
" svn_boolean_t remove_lock, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_process_committed", _wrap_svn_wc_process_committed, METH_VARARGS, (char *)"\n"
- "svn_wc_process_committed(char path, svn_wc_adm_access_t adm_access, svn_boolean_t recurse, \n"
- " svn_revnum_t new_revnum, char rev_date, \n"
- " char rev_author, apr_array_header_t wcprop_changes, \n"
+ "svn_wc_process_committed(char const * path, svn_wc_adm_access_t * adm_access, svn_boolean_t recurse, svn_revnum_t new_revnum, \n"
+ " char const * rev_date, char const * rev_author, apr_array_header_t wcprop_changes, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_crawl_revisions5", _wrap_svn_wc_crawl_revisions5, METH_VARARGS, (char *)"\n"
- "svn_wc_crawl_revisions5(svn_wc_context_t wc_ctx, char local_abspath, svn_ra_reporter3_t reporter, \n"
- " void report_baton, svn_boolean_t restore_files, \n"
- " svn_depth_t depth, \n"
- " svn_boolean_t honor_depth_exclude, svn_boolean_t depth_compatibility_trick, \n"
- " svn_boolean_t use_commit_times, \n"
- " svn_cancel_func_t cancel_func, \n"
- " svn_wc_notify_func2_t notify_func, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_crawl_revisions5(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_ra_reporter3_t reporter, \n"
+ " void * report_baton, svn_boolean_t restore_files, svn_depth_t depth, svn_boolean_t honor_depth_exclude, \n"
+ " svn_boolean_t depth_compatibility_trick, svn_boolean_t use_commit_times, \n"
+ " svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_crawl_revisions4", _wrap_svn_wc_crawl_revisions4, METH_VARARGS, (char *)"\n"
- "svn_wc_crawl_revisions4(char path, svn_wc_adm_access_t adm_access, svn_ra_reporter3_t reporter, \n"
- " void report_baton, svn_boolean_t restore_files, \n"
- " svn_depth_t depth, svn_boolean_t honor_depth_exclude, \n"
- " svn_boolean_t depth_compatibility_trick, \n"
- " svn_boolean_t use_commit_times, \n"
- " svn_wc_notify_func2_t notify_func, \n"
- " svn_wc_traversal_info_t traversal_info, \n"
+ "svn_wc_crawl_revisions4(char const * path, svn_wc_adm_access_t * adm_access, svn_ra_reporter3_t reporter, \n"
+ " void * report_baton, svn_boolean_t restore_files, svn_depth_t depth, svn_boolean_t honor_depth_exclude, \n"
+ " svn_boolean_t depth_compatibility_trick, svn_boolean_t use_commit_times, \n"
+ " svn_wc_notify_func2_t notify_func, svn_wc_traversal_info_t * traversal_info, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_crawl_revisions3", _wrap_svn_wc_crawl_revisions3, METH_VARARGS, (char *)"\n"
- "svn_wc_crawl_revisions3(char path, svn_wc_adm_access_t adm_access, svn_ra_reporter3_t reporter, \n"
- " void report_baton, svn_boolean_t restore_files, \n"
- " svn_depth_t depth, svn_boolean_t depth_compatibility_trick, \n"
- " svn_boolean_t use_commit_times, \n"
- " svn_wc_notify_func2_t notify_func, \n"
- " svn_wc_traversal_info_t traversal_info, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_crawl_revisions3(char const * path, svn_wc_adm_access_t * adm_access, svn_ra_reporter3_t reporter, \n"
+ " void * report_baton, svn_boolean_t restore_files, svn_depth_t depth, svn_boolean_t depth_compatibility_trick, \n"
+ " svn_boolean_t use_commit_times, svn_wc_notify_func2_t notify_func, \n"
+ " svn_wc_traversal_info_t * traversal_info, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_crawl_revisions2", _wrap_svn_wc_crawl_revisions2, METH_VARARGS, (char *)"\n"
- "svn_wc_crawl_revisions2(char path, svn_wc_adm_access_t adm_access, svn_ra_reporter2_t reporter, \n"
- " svn_boolean_t restore_files, \n"
- " svn_boolean_t recurse, svn_boolean_t use_commit_times, \n"
- " svn_wc_notify_func2_t notify_func, \n"
- " svn_wc_traversal_info_t traversal_info, \n"
+ "svn_wc_crawl_revisions2(char const * path, svn_wc_adm_access_t * adm_access, svn_ra_reporter2_t reporter, \n"
+ " svn_boolean_t restore_files, svn_boolean_t recurse, svn_boolean_t use_commit_times, \n"
+ " svn_wc_notify_func2_t notify_func, svn_wc_traversal_info_t * traversal_info, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_crawl_revisions", _wrap_svn_wc_crawl_revisions, METH_VARARGS, (char *)"\n"
- "svn_wc_crawl_revisions(char path, svn_wc_adm_access_t adm_access, svn_ra_reporter_t reporter, \n"
- " void report_baton, svn_boolean_t restore_files, \n"
- " svn_boolean_t recurse, \n"
- " svn_boolean_t use_commit_times, svn_wc_notify_func_t notify_func, \n"
- " svn_wc_traversal_info_t traversal_info, \n"
+ "svn_wc_crawl_revisions(char const * path, svn_wc_adm_access_t * adm_access, svn_ra_reporter_t reporter, \n"
+ " void * report_baton, svn_boolean_t restore_files, svn_boolean_t recurse, svn_boolean_t use_commit_times, \n"
+ " svn_wc_notify_func_t notify_func, svn_wc_traversal_info_t * traversal_info, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_wc_is_wc_root2", _wrap_svn_wc_is_wc_root2, METH_VARARGS, (char *)"svn_wc_is_wc_root2(svn_wc_context_t wc_ctx, char local_abspath, apr_pool_t scratch_pool) -> svn_error_t"},
- { (char *)"svn_wc_is_wc_root", _wrap_svn_wc_is_wc_root, METH_VARARGS, (char *)"svn_wc_is_wc_root(char path, svn_wc_adm_access_t adm_access, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_wc_get_actual_target2", _wrap_svn_wc_get_actual_target2, METH_VARARGS, (char *)"\n"
- "svn_wc_get_actual_target2(svn_wc_context_t wc_ctx, char path, apr_pool_t result_pool, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_wc_get_actual_target", _wrap_svn_wc_get_actual_target, METH_VARARGS, (char *)"svn_wc_get_actual_target(char path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_check_root", _wrap_svn_wc_check_root, METH_VARARGS, (char *)"svn_wc_check_root(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_wc_is_wc_root2", _wrap_svn_wc_is_wc_root2, METH_VARARGS, (char *)"svn_wc_is_wc_root2(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_wc_is_wc_root", _wrap_svn_wc_is_wc_root, METH_VARARGS, (char *)"svn_wc_is_wc_root(char const * path, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_get_actual_target2", _wrap_svn_wc_get_actual_target2, METH_VARARGS, (char *)"svn_wc_get_actual_target2(svn_wc_context_t * wc_ctx, char const * path, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_wc_get_actual_target", _wrap_svn_wc_get_actual_target, METH_VARARGS, (char *)"svn_wc_get_actual_target(char const * path, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_wc_get_update_editor4", _wrap_svn_wc_get_update_editor4, METH_VARARGS, (char *)"\n"
- "svn_wc_get_update_editor4(svn_wc_context_t wc_ctx, char anchor_abspath, char target_basename, \n"
- " svn_boolean_t use_commit_times, \n"
- " svn_depth_t depth, svn_boolean_t depth_is_sticky, \n"
- " svn_boolean_t allow_unver_obstructions, \n"
- " svn_boolean_t adds_as_modification, svn_boolean_t server_performs_filtering, \n"
- " svn_boolean_t clean_checkout, \n"
- " char diff3_cmd, apr_array_header_t preserved_exts, \n"
- " svn_wc_dirents_func_t fetch_dirents_func, \n"
- " void fetch_dirents_baton, \n"
- " svn_wc_conflict_resolver_func2_t conflict_func, \n"
- " void conflict_baton, svn_wc_external_update_t external_func, \n"
- " void external_baton, \n"
- " svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func, \n"
- " apr_pool_t result_pool, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_get_update_editor4(svn_wc_context_t * wc_ctx, char const * anchor_abspath, char const * target_basename, \n"
+ " svn_boolean_t use_commit_times, svn_depth_t depth, svn_boolean_t depth_is_sticky, \n"
+ " svn_boolean_t allow_unver_obstructions, svn_boolean_t adds_as_modification, \n"
+ " svn_boolean_t server_performs_filtering, svn_boolean_t clean_checkout, \n"
+ " char const * diff3_cmd, apr_array_header_t preserved_exts, svn_wc_dirents_func_t fetch_dirents_func, \n"
+ " void * fetch_dirents_baton, svn_wc_conflict_resolver_func2_t conflict_func, \n"
+ " void * conflict_baton, svn_wc_external_update_t external_func, \n"
+ " void * external_baton, svn_cancel_func_t cancel_func, \n"
+ " svn_wc_notify_func2_t notify_func, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_get_update_editor3", _wrap_svn_wc_get_update_editor3, METH_VARARGS, (char *)"\n"
- "svn_wc_get_update_editor3(svn_wc_adm_access_t anchor, char target, svn_boolean_t use_commit_times, \n"
- " svn_depth_t depth, svn_boolean_t depth_is_sticky, \n"
- " svn_boolean_t allow_unver_obstructions, \n"
- " svn_wc_notify_func2_t notify_func, \n"
- " svn_cancel_func_t cancel_func, svn_wc_conflict_resolver_func_t conflict_func, \n"
- " void conflict_baton, \n"
- " svn_wc_get_file_t fetch_func, \n"
- " void fetch_baton, char diff3_cmd, apr_array_header_t preserved_exts, \n"
- " svn_wc_traversal_info_t ti, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_get_update_editor3(svn_wc_adm_access_t * anchor, char const * target, svn_boolean_t use_commit_times, \n"
+ " svn_depth_t depth, svn_boolean_t depth_is_sticky, svn_boolean_t allow_unver_obstructions, \n"
+ " svn_wc_notify_func2_t notify_func, svn_cancel_func_t cancel_func, \n"
+ " svn_wc_conflict_resolver_func_t conflict_func, void * conflict_baton, \n"
+ " svn_wc_get_file_t fetch_func, void * fetch_baton, char const * diff3_cmd, \n"
+ " apr_array_header_t preserved_exts, svn_wc_traversal_info_t * ti, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_get_update_editor2", _wrap_svn_wc_get_update_editor2, METH_VARARGS, (char *)"\n"
- "svn_wc_get_update_editor2(svn_wc_adm_access_t anchor, char target, svn_boolean_t use_commit_times, \n"
- " svn_boolean_t recurse, \n"
- " svn_wc_notify_func2_t notify_func, svn_cancel_func_t cancel_func, \n"
- " char diff3_cmd, svn_wc_traversal_info_t ti, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_get_update_editor2(svn_wc_adm_access_t * anchor, char const * target, svn_boolean_t use_commit_times, \n"
+ " svn_boolean_t recurse, svn_wc_notify_func2_t notify_func, svn_cancel_func_t cancel_func, \n"
+ " char const * diff3_cmd, svn_wc_traversal_info_t * ti, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_get_update_editor", _wrap_svn_wc_get_update_editor, METH_VARARGS, (char *)"\n"
- "svn_wc_get_update_editor(svn_wc_adm_access_t anchor, char target, svn_boolean_t use_commit_times, \n"
- " svn_boolean_t recurse, \n"
- " svn_wc_notify_func_t notify_func, svn_cancel_func_t cancel_func, \n"
- " char diff3_cmd, svn_wc_traversal_info_t ti, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_get_update_editor(svn_wc_adm_access_t * anchor, char const * target, svn_boolean_t use_commit_times, \n"
+ " svn_boolean_t recurse, svn_wc_notify_func_t notify_func, svn_cancel_func_t cancel_func, \n"
+ " char const * diff3_cmd, svn_wc_traversal_info_t * ti, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_get_switch_editor4", _wrap_svn_wc_get_switch_editor4, METH_VARARGS, (char *)"\n"
- "svn_wc_get_switch_editor4(svn_wc_context_t wc_ctx, char anchor_abspath, char target_basename, \n"
- " char switch_url, svn_boolean_t use_commit_times, \n"
- " svn_depth_t depth, svn_boolean_t depth_is_sticky, \n"
- " svn_boolean_t allow_unver_obstructions, \n"
- " svn_boolean_t server_performs_filtering, \n"
- " char diff3_cmd, apr_array_header_t preserved_exts, \n"
- " svn_wc_dirents_func_t fetch_dirents_func, \n"
- " void fetch_dirents_baton, \n"
- " svn_wc_conflict_resolver_func2_t conflict_func, \n"
- " void conflict_baton, svn_wc_external_update_t external_func, \n"
- " void external_baton, svn_cancel_func_t cancel_func, \n"
- " svn_wc_notify_func2_t notify_func, \n"
- " apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_get_switch_editor4(svn_wc_context_t * wc_ctx, char const * anchor_abspath, char const * target_basename, \n"
+ " char const * switch_url, svn_boolean_t use_commit_times, svn_depth_t depth, \n"
+ " svn_boolean_t depth_is_sticky, svn_boolean_t allow_unver_obstructions, \n"
+ " svn_boolean_t server_performs_filtering, char const * diff3_cmd, apr_array_header_t preserved_exts, \n"
+ " svn_wc_dirents_func_t fetch_dirents_func, void * fetch_dirents_baton, \n"
+ " svn_wc_conflict_resolver_func2_t conflict_func, void * conflict_baton, \n"
+ " svn_wc_external_update_t external_func, void * external_baton, \n"
+ " svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func, apr_pool_t result_pool, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_get_switch_editor3", _wrap_svn_wc_get_switch_editor3, METH_VARARGS, (char *)"\n"
- "svn_wc_get_switch_editor3(svn_wc_adm_access_t anchor, char target, char switch_url, \n"
- " svn_boolean_t use_commit_times, svn_depth_t depth, \n"
- " svn_boolean_t depth_is_sticky, svn_boolean_t allow_unver_obstructions, \n"
- " svn_wc_notify_func2_t notify_func, \n"
- " svn_cancel_func_t cancel_func, \n"
- " svn_wc_conflict_resolver_func_t conflict_func, \n"
- " void conflict_baton, char diff3_cmd, \n"
- " apr_array_header_t preserved_exts, svn_wc_traversal_info_t ti, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_get_switch_editor3(svn_wc_adm_access_t * anchor, char const * target, char const * switch_url, svn_boolean_t use_commit_times, \n"
+ " svn_depth_t depth, svn_boolean_t depth_is_sticky, \n"
+ " svn_boolean_t allow_unver_obstructions, svn_wc_notify_func2_t notify_func, \n"
+ " svn_cancel_func_t cancel_func, svn_wc_conflict_resolver_func_t conflict_func, \n"
+ " void * conflict_baton, char const * diff3_cmd, apr_array_header_t preserved_exts, \n"
+ " svn_wc_traversal_info_t * ti, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_get_switch_editor2", _wrap_svn_wc_get_switch_editor2, METH_VARARGS, (char *)"\n"
- "svn_wc_get_switch_editor2(svn_wc_adm_access_t anchor, char target, char switch_url, \n"
- " svn_boolean_t use_commit_times, svn_boolean_t recurse, \n"
- " svn_wc_notify_func2_t notify_func, \n"
- " svn_cancel_func_t cancel_func, char diff3_cmd, \n"
- " svn_wc_traversal_info_t ti, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_get_switch_editor2(svn_wc_adm_access_t * anchor, char const * target, char const * switch_url, svn_boolean_t use_commit_times, \n"
+ " svn_boolean_t recurse, svn_wc_notify_func2_t notify_func, \n"
+ " svn_cancel_func_t cancel_func, char const * diff3_cmd, svn_wc_traversal_info_t * ti, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_get_switch_editor", _wrap_svn_wc_get_switch_editor, METH_VARARGS, (char *)"\n"
- "svn_wc_get_switch_editor(svn_wc_adm_access_t anchor, char target, char switch_url, \n"
- " svn_boolean_t use_commit_times, svn_boolean_t recurse, \n"
- " svn_wc_notify_func_t notify_func, \n"
- " svn_cancel_func_t cancel_func, char diff3_cmd, \n"
- " svn_wc_traversal_info_t ti, apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_wc_prop_list2", _wrap_svn_wc_prop_list2, METH_VARARGS, (char *)"\n"
- "svn_wc_prop_list2(svn_wc_context_t wc_ctx, char local_abspath, apr_pool_t result_pool, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_wc_prop_list", _wrap_svn_wc_prop_list, METH_VARARGS, (char *)"svn_wc_prop_list(char path, svn_wc_adm_access_t adm_access, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_wc_get_pristine_props", _wrap_svn_wc_get_pristine_props, METH_VARARGS, (char *)"\n"
- "svn_wc_get_pristine_props(svn_wc_context_t wc_ctx, char local_abspath, apr_pool_t result_pool, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_get_switch_editor(svn_wc_adm_access_t * anchor, char const * target, char const * switch_url, svn_boolean_t use_commit_times, \n"
+ " svn_boolean_t recurse, svn_wc_notify_func_t notify_func, \n"
+ " svn_cancel_func_t cancel_func, char const * diff3_cmd, svn_wc_traversal_info_t * ti, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_wc_prop_list2", _wrap_svn_wc_prop_list2, METH_VARARGS, (char *)"svn_wc_prop_list2(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_wc_prop_list", _wrap_svn_wc_prop_list, METH_VARARGS, (char *)"svn_wc_prop_list(char const * path, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_get_pristine_props", _wrap_svn_wc_get_pristine_props, METH_VARARGS, (char *)"svn_wc_get_pristine_props(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
{ (char *)"svn_wc_prop_get2", _wrap_svn_wc_prop_get2, METH_VARARGS, (char *)"\n"
- "svn_wc_prop_get2(svn_wc_context_t wc_ctx, char local_abspath, char name, \n"
- " apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_wc_prop_get", _wrap_svn_wc_prop_get, METH_VARARGS, (char *)"\n"
- "svn_wc_prop_get(char name, char path, svn_wc_adm_access_t adm_access, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_prop_get2(svn_wc_context_t * wc_ctx, char const * local_abspath, char const * name, apr_pool_t result_pool, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
+ { (char *)"svn_wc_prop_get", _wrap_svn_wc_prop_get, METH_VARARGS, (char *)"svn_wc_prop_get(char const * name, char const * path, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_wc_prop_set4", _wrap_svn_wc_prop_set4, METH_VARARGS, (char *)"\n"
- "svn_wc_prop_set4(svn_wc_context_t wc_ctx, char local_abspath, char name, \n"
- " svn_string_t value, svn_depth_t depth, svn_boolean_t skip_checks, \n"
- " apr_array_header_t changelist_filter, \n"
- " svn_cancel_func_t cancel_func, \n"
- " svn_wc_notify_func2_t notify_func, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_prop_set4(svn_wc_context_t * wc_ctx, char const * local_abspath, char const * name, svn_string_t const * value, \n"
+ " svn_depth_t depth, svn_boolean_t skip_checks, apr_array_header_t changelist_filter, \n"
+ " svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_prop_set3", _wrap_svn_wc_prop_set3, METH_VARARGS, (char *)"\n"
- "svn_wc_prop_set3(char name, svn_string_t value, char path, svn_wc_adm_access_t adm_access, \n"
- " svn_boolean_t skip_checks, \n"
- " svn_wc_notify_func2_t notify_func, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_prop_set3(char const * name, svn_string_t const * value, char const * path, svn_wc_adm_access_t * adm_access, \n"
+ " svn_boolean_t skip_checks, svn_wc_notify_func2_t notify_func, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_prop_set2", _wrap_svn_wc_prop_set2, METH_VARARGS, (char *)"\n"
- "svn_wc_prop_set2(char name, svn_string_t value, char path, svn_wc_adm_access_t adm_access, \n"
- " svn_boolean_t skip_checks, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_prop_set2(char const * name, svn_string_t const * value, char const * path, svn_wc_adm_access_t * adm_access, \n"
+ " svn_boolean_t skip_checks, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_prop_set", _wrap_svn_wc_prop_set, METH_VARARGS, (char *)"\n"
- "svn_wc_prop_set(char name, svn_string_t value, char path, svn_wc_adm_access_t adm_access, \n"
+ "svn_wc_prop_set(char const * name, svn_string_t const * value, char const * path, svn_wc_adm_access_t * adm_access, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_wc_is_normal_prop", _wrap_svn_wc_is_normal_prop, METH_VARARGS, (char *)"svn_wc_is_normal_prop(char name) -> svn_boolean_t"},
- { (char *)"svn_wc_is_wc_prop", _wrap_svn_wc_is_wc_prop, METH_VARARGS, (char *)"svn_wc_is_wc_prop(char name) -> svn_boolean_t"},
- { (char *)"svn_wc_is_entry_prop", _wrap_svn_wc_is_entry_prop, METH_VARARGS, (char *)"svn_wc_is_entry_prop(char name) -> svn_boolean_t"},
+ { (char *)"svn_wc_is_normal_prop", _wrap_svn_wc_is_normal_prop, METH_VARARGS, (char *)"svn_wc_is_normal_prop(char const * name) -> svn_boolean_t"},
+ { (char *)"svn_wc_is_wc_prop", _wrap_svn_wc_is_wc_prop, METH_VARARGS, (char *)"svn_wc_is_wc_prop(char const * name) -> svn_boolean_t"},
+ { (char *)"svn_wc_is_entry_prop", _wrap_svn_wc_is_entry_prop, METH_VARARGS, (char *)"svn_wc_is_entry_prop(char const * name) -> svn_boolean_t"},
{ (char *)"svn_wc_canonicalize_svn_prop", _wrap_svn_wc_canonicalize_svn_prop, METH_VARARGS, (char *)"\n"
- "svn_wc_canonicalize_svn_prop(char propname, svn_string_t propval, char path, svn_node_kind_t kind, \n"
- " svn_boolean_t skip_some_checks, \n"
- " svn_wc_canonicalize_svn_prop_get_file_t prop_getter, \n"
- " void getter_baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_canonicalize_svn_prop(char const * propname, svn_string_t const * propval, char const * path, svn_node_kind_t kind, \n"
+ " svn_boolean_t skip_some_checks, svn_wc_canonicalize_svn_prop_get_file_t prop_getter, \n"
+ " void * getter_baton, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_get_diff_editor6", _wrap_svn_wc_get_diff_editor6, METH_VARARGS, (char *)"\n"
- "svn_wc_get_diff_editor6(svn_wc_context_t wc_ctx, char anchor_abspath, char target, \n"
- " svn_depth_t depth, svn_boolean_t ignore_ancestry, \n"
- " svn_boolean_t show_copies_as_adds, \n"
- " svn_boolean_t use_git_diff_format, svn_boolean_t use_text_base, \n"
- " svn_boolean_t reverse_order, \n"
- " svn_boolean_t server_performs_filtering, \n"
- " apr_array_header_t changelist_filter, svn_wc_diff_callbacks4_t callbacks, \n"
- " void callback_baton, \n"
- " svn_cancel_func_t cancel_func, apr_pool_t result_pool, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_get_diff_editor6(svn_wc_context_t * wc_ctx, char const * anchor_abspath, char const * target, svn_depth_t depth, \n"
+ " svn_boolean_t ignore_ancestry, svn_boolean_t show_copies_as_adds, \n"
+ " svn_boolean_t use_git_diff_format, svn_boolean_t use_text_base, svn_boolean_t reverse_order, \n"
+ " svn_boolean_t server_performs_filtering, apr_array_header_t changelist_filter, \n"
+ " svn_wc_diff_callbacks4_t callbacks, void * callback_baton, \n"
+ " svn_cancel_func_t cancel_func, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_get_diff_editor5", _wrap_svn_wc_get_diff_editor5, METH_VARARGS, (char *)"\n"
- "svn_wc_get_diff_editor5(svn_wc_adm_access_t anchor, char target, svn_wc_diff_callbacks3_t callbacks, \n"
- " void callback_baton, \n"
- " svn_depth_t depth, svn_boolean_t ignore_ancestry, \n"
- " svn_boolean_t use_text_base, svn_boolean_t reverse_order, \n"
- " svn_cancel_func_t cancel_func, \n"
+ "svn_wc_get_diff_editor5(svn_wc_adm_access_t * anchor, char const * target, svn_wc_diff_callbacks3_t callbacks, \n"
+ " void * callback_baton, svn_depth_t depth, svn_boolean_t ignore_ancestry, \n"
+ " svn_boolean_t use_text_base, svn_boolean_t reverse_order, svn_cancel_func_t cancel_func, \n"
" apr_array_header_t changelist_filter, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_get_diff_editor4", _wrap_svn_wc_get_diff_editor4, METH_VARARGS, (char *)"\n"
- "svn_wc_get_diff_editor4(svn_wc_adm_access_t anchor, char target, svn_wc_diff_callbacks2_t callbacks, \n"
- " svn_depth_t depth, \n"
- " svn_boolean_t ignore_ancestry, svn_boolean_t use_text_base, \n"
- " svn_boolean_t reverse_order, svn_cancel_func_t cancel_func, \n"
- " apr_array_header_t changelist_filter, \n"
+ "svn_wc_get_diff_editor4(svn_wc_adm_access_t * anchor, char const * target, svn_wc_diff_callbacks2_t callbacks, \n"
+ " svn_depth_t depth, svn_boolean_t ignore_ancestry, svn_boolean_t use_text_base, \n"
+ " svn_boolean_t reverse_order, svn_cancel_func_t cancel_func, apr_array_header_t changelist_filter, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_get_diff_editor3", _wrap_svn_wc_get_diff_editor3, METH_VARARGS, (char *)"\n"
- "svn_wc_get_diff_editor3(svn_wc_adm_access_t anchor, char target, svn_wc_diff_callbacks2_t callbacks, \n"
- " svn_boolean_t recurse, \n"
- " svn_boolean_t ignore_ancestry, svn_boolean_t use_text_base, \n"
- " svn_boolean_t reverse_order, \n"
- " svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_get_diff_editor3(svn_wc_adm_access_t * anchor, char const * target, svn_wc_diff_callbacks2_t callbacks, \n"
+ " svn_boolean_t recurse, svn_boolean_t ignore_ancestry, svn_boolean_t use_text_base, \n"
+ " svn_boolean_t reverse_order, svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_get_diff_editor2", _wrap_svn_wc_get_diff_editor2, METH_VARARGS, (char *)"\n"
- "svn_wc_get_diff_editor2(svn_wc_adm_access_t anchor, char target, svn_wc_diff_callbacks_t callbacks, \n"
- " void callback_baton, \n"
- " svn_boolean_t recurse, svn_boolean_t ignore_ancestry, \n"
- " svn_boolean_t use_text_base, svn_boolean_t reverse_order, \n"
- " svn_cancel_func_t cancel_func, \n"
+ "svn_wc_get_diff_editor2(svn_wc_adm_access_t * anchor, char const * target, svn_wc_diff_callbacks_t callbacks, \n"
+ " void * callback_baton, svn_boolean_t recurse, svn_boolean_t ignore_ancestry, \n"
+ " svn_boolean_t use_text_base, svn_boolean_t reverse_order, svn_cancel_func_t cancel_func, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_get_diff_editor", _wrap_svn_wc_get_diff_editor, METH_VARARGS, (char *)"\n"
- "svn_wc_get_diff_editor(svn_wc_adm_access_t anchor, char target, svn_wc_diff_callbacks_t callbacks, \n"
- " void callback_baton, \n"
- " svn_boolean_t recurse, svn_boolean_t use_text_base, \n"
- " svn_boolean_t reverse_order, svn_cancel_func_t cancel_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_get_diff_editor(svn_wc_adm_access_t * anchor, char const * target, svn_wc_diff_callbacks_t callbacks, \n"
+ " void * callback_baton, svn_boolean_t recurse, svn_boolean_t use_text_base, \n"
+ " svn_boolean_t reverse_order, svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff6", _wrap_svn_wc_diff6, METH_VARARGS, (char *)"\n"
- "svn_wc_diff6(svn_wc_context_t wc_ctx, char target_abspath, svn_wc_diff_callbacks4_t callbacks, \n"
- " void callback_baton, \n"
- " svn_depth_t depth, svn_boolean_t ignore_ancestry, \n"
- " svn_boolean_t show_copies_as_adds, \n"
- " svn_boolean_t use_git_diff_format, apr_array_header_t changelist_filter, \n"
- " svn_cancel_func_t cancel_func, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_diff6(svn_wc_context_t * wc_ctx, char const * target_abspath, svn_wc_diff_callbacks4_t callbacks, \n"
+ " void * callback_baton, svn_depth_t depth, svn_boolean_t ignore_ancestry, \n"
+ " svn_boolean_t show_copies_as_adds, svn_boolean_t use_git_diff_format, \n"
+ " apr_array_header_t changelist_filter, svn_cancel_func_t cancel_func, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff5", _wrap_svn_wc_diff5, METH_VARARGS, (char *)"\n"
- "svn_wc_diff5(svn_wc_adm_access_t anchor, char target, svn_wc_diff_callbacks3_t callbacks, \n"
- " void callback_baton, \n"
- " svn_depth_t depth, svn_boolean_t ignore_ancestry, \n"
- " apr_array_header_t changelist_filter, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_diff5(svn_wc_adm_access_t * anchor, char const * target, svn_wc_diff_callbacks3_t callbacks, \n"
+ " void * callback_baton, svn_depth_t depth, svn_boolean_t ignore_ancestry, \n"
+ " apr_array_header_t changelist_filter, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff4", _wrap_svn_wc_diff4, METH_VARARGS, (char *)"\n"
- "svn_wc_diff4(svn_wc_adm_access_t anchor, char target, svn_wc_diff_callbacks2_t callbacks, \n"
- " svn_depth_t depth, \n"
- " svn_boolean_t ignore_ancestry, apr_array_header_t changelist_filter, \n"
+ "svn_wc_diff4(svn_wc_adm_access_t * anchor, char const * target, svn_wc_diff_callbacks2_t callbacks, \n"
+ " svn_depth_t depth, svn_boolean_t ignore_ancestry, apr_array_header_t changelist_filter, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff3", _wrap_svn_wc_diff3, METH_VARARGS, (char *)"\n"
- "svn_wc_diff3(svn_wc_adm_access_t anchor, char target, svn_wc_diff_callbacks2_t callbacks, \n"
- " svn_boolean_t recurse, \n"
- " svn_boolean_t ignore_ancestry, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_diff3(svn_wc_adm_access_t * anchor, char const * target, svn_wc_diff_callbacks2_t callbacks, \n"
+ " svn_boolean_t recurse, svn_boolean_t ignore_ancestry, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff2", _wrap_svn_wc_diff2, METH_VARARGS, (char *)"\n"
- "svn_wc_diff2(svn_wc_adm_access_t anchor, char target, svn_wc_diff_callbacks_t callbacks, \n"
- " void callback_baton, \n"
- " svn_boolean_t recurse, svn_boolean_t ignore_ancestry, \n"
+ "svn_wc_diff2(svn_wc_adm_access_t * anchor, char const * target, svn_wc_diff_callbacks_t callbacks, \n"
+ " void * callback_baton, svn_boolean_t recurse, svn_boolean_t ignore_ancestry, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff", _wrap_svn_wc_diff, METH_VARARGS, (char *)"\n"
- "svn_wc_diff(svn_wc_adm_access_t anchor, char target, svn_wc_diff_callbacks_t callbacks, \n"
- " void callback_baton, \n"
- " svn_boolean_t recurse, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_diff(svn_wc_adm_access_t * anchor, char const * target, svn_wc_diff_callbacks_t callbacks, \n"
+ " void * callback_baton, svn_boolean_t recurse, apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_wc_get_prop_diffs2", _wrap_svn_wc_get_prop_diffs2, METH_VARARGS, (char *)"\n"
- "svn_wc_get_prop_diffs2(svn_wc_context_t wc_ctx, char local_abspath, apr_pool_t result_pool, \n"
+ { (char *)"svn_wc_get_prop_diffs2", _wrap_svn_wc_get_prop_diffs2, METH_VARARGS, (char *)"svn_wc_get_prop_diffs2(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_wc_get_prop_diffs", _wrap_svn_wc_get_prop_diffs, METH_VARARGS, (char *)"svn_wc_get_prop_diffs(char const * path, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_merge5", _wrap_svn_wc_merge5, METH_VARARGS, (char *)"\n"
+ "svn_wc_merge5(enum svn_wc_notify_state_t * merge_props_state, svn_wc_context_t * wc_ctx, char const * left_abspath, \n"
+ " char const * right_abspath, char const * target_abspath, \n"
+ " char const * left_label, char const * right_label, char const * target_label, \n"
+ " svn_wc_conflict_version_t left_version, svn_wc_conflict_version_t right_version, \n"
+ " svn_boolean_t dry_run, char const * diff3_cmd, apr_array_header_t merge_options, \n"
+ " apr_hash_t original_props, apr_array_header_t prop_diff, \n"
+ " svn_wc_conflict_resolver_func2_t conflict_func, void * conflict_baton, svn_cancel_func_t cancel_func, \n"
" apr_pool_t scratch_pool) -> svn_error_t\n"
""},
- { (char *)"svn_wc_get_prop_diffs", _wrap_svn_wc_get_prop_diffs, METH_VARARGS, (char *)"svn_wc_get_prop_diffs(char path, svn_wc_adm_access_t adm_access, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_wc_merge4", _wrap_svn_wc_merge4, METH_VARARGS, (char *)"\n"
- "svn_wc_merge4(svn_wc_context_t wc_ctx, char left_abspath, char right_abspath, \n"
- " char target_abspath, char left_label, \n"
- " char right_label, char target_label, svn_wc_conflict_version_t left_version, \n"
- " svn_wc_conflict_version_t right_version, \n"
- " svn_boolean_t dry_run, \n"
- " char diff3_cmd, apr_array_header_t merge_options, \n"
- " apr_array_header_t prop_diff, \n"
- " svn_wc_conflict_resolver_func2_t conflict_func, \n"
- " void conflict_baton, svn_cancel_func_t cancel_func, \n"
+ "svn_wc_merge4(svn_wc_context_t * wc_ctx, char const * left_abspath, char const * right_abspath, \n"
+ " char const * target_abspath, char const * left_label, char const * right_label, \n"
+ " char const * target_label, svn_wc_conflict_version_t left_version, svn_wc_conflict_version_t right_version, \n"
+ " svn_boolean_t dry_run, char const * diff3_cmd, \n"
+ " apr_array_header_t merge_options, apr_array_header_t prop_diff, \n"
+ " svn_wc_conflict_resolver_func2_t conflict_func, void * conflict_baton, svn_cancel_func_t cancel_func, \n"
" apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_merge3", _wrap_svn_wc_merge3, METH_VARARGS, (char *)"\n"
- "svn_wc_merge3(char left, char right, char merge_target, svn_wc_adm_access_t adm_access, \n"
- " char left_label, char right_label, \n"
- " char target_label, svn_boolean_t dry_run, \n"
- " char diff3_cmd, apr_array_header_t merge_options, \n"
- " apr_array_header_t prop_diff, \n"
- " svn_wc_conflict_resolver_func_t conflict_func, \n"
- " void conflict_baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_merge3(char const * left, char const * right, char const * merge_target, svn_wc_adm_access_t * adm_access, \n"
+ " char const * left_label, char const * right_label, char const * target_label, \n"
+ " svn_boolean_t dry_run, char const * diff3_cmd, apr_array_header_t merge_options, \n"
+ " apr_array_header_t prop_diff, svn_wc_conflict_resolver_func_t conflict_func, \n"
+ " void * conflict_baton, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_merge2", _wrap_svn_wc_merge2, METH_VARARGS, (char *)"\n"
- "svn_wc_merge2(char left, char right, char merge_target, svn_wc_adm_access_t adm_access, \n"
- " char left_label, char right_label, \n"
- " char target_label, svn_boolean_t dry_run, \n"
- " char diff3_cmd, apr_array_header_t merge_options, \n"
+ "svn_wc_merge2(char const * left, char const * right, char const * merge_target, svn_wc_adm_access_t * adm_access, \n"
+ " char const * left_label, char const * right_label, char const * target_label, \n"
+ " svn_boolean_t dry_run, char const * diff3_cmd, apr_array_header_t merge_options, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_merge", _wrap_svn_wc_merge, METH_VARARGS, (char *)"\n"
- "svn_wc_merge(char left, char right, char merge_target, svn_wc_adm_access_t adm_access, \n"
- " char left_label, char right_label, \n"
- " char target_label, svn_boolean_t dry_run, \n"
- " char diff3_cmd, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_merge(char const * left, char const * right, char const * merge_target, svn_wc_adm_access_t * adm_access, \n"
+ " char const * left_label, char const * right_label, char const * target_label, \n"
+ " svn_boolean_t dry_run, char const * diff3_cmd, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_merge_props3", _wrap_svn_wc_merge_props3, METH_VARARGS, (char *)"\n"
- "svn_wc_merge_props3(svn_wc_notify_state_t state, svn_wc_context_t wc_ctx, \n"
- " char local_abspath, svn_wc_conflict_version_t left_version, \n"
- " svn_wc_conflict_version_t right_version, \n"
- " apr_hash_t baseprops, apr_array_header_t propchanges, \n"
- " svn_boolean_t dry_run, \n"
- " svn_wc_conflict_resolver_func2_t conflict_func, \n"
- " void conflict_baton, svn_cancel_func_t cancel_func, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_merge_props3(svn_wc_notify_state_t * state, svn_wc_context_t * wc_ctx, char const * local_abspath, \n"
+ " svn_wc_conflict_version_t left_version, svn_wc_conflict_version_t right_version, \n"
+ " apr_hash_t baseprops, apr_array_header_t propchanges, svn_boolean_t dry_run, \n"
+ " svn_wc_conflict_resolver_func2_t conflict_func, void * conflict_baton, \n"
+ " svn_cancel_func_t cancel_func, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_merge_props2", _wrap_svn_wc_merge_props2, METH_VARARGS, (char *)"\n"
- "svn_wc_merge_props2(svn_wc_notify_state_t state, char path, svn_wc_adm_access_t adm_access, \n"
- " apr_hash_t baseprops, apr_array_header_t propchanges, \n"
- " svn_boolean_t base_merge, \n"
+ "svn_wc_merge_props2(svn_wc_notify_state_t * state, char const * path, svn_wc_adm_access_t * adm_access, \n"
+ " apr_hash_t baseprops, apr_array_header_t propchanges, svn_boolean_t base_merge, \n"
" svn_boolean_t dry_run, svn_wc_conflict_resolver_func_t conflict_func, \n"
- " void conflict_baton, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ " void * conflict_baton, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_merge_props", _wrap_svn_wc_merge_props, METH_VARARGS, (char *)"\n"
- "svn_wc_merge_props(svn_wc_notify_state_t state, char path, svn_wc_adm_access_t adm_access, \n"
- " apr_hash_t baseprops, apr_array_header_t propchanges, \n"
- " svn_boolean_t base_merge, \n"
+ "svn_wc_merge_props(svn_wc_notify_state_t * state, char const * path, svn_wc_adm_access_t * adm_access, \n"
+ " apr_hash_t baseprops, apr_array_header_t propchanges, svn_boolean_t base_merge, \n"
" svn_boolean_t dry_run, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_merge_prop_diffs", _wrap_svn_wc_merge_prop_diffs, METH_VARARGS, (char *)"\n"
- "svn_wc_merge_prop_diffs(svn_wc_notify_state_t state, char path, svn_wc_adm_access_t adm_access, \n"
- " apr_array_header_t propchanges, \n"
- " svn_boolean_t base_merge, svn_boolean_t dry_run, \n"
+ "svn_wc_merge_prop_diffs(svn_wc_notify_state_t * state, char const * path, svn_wc_adm_access_t * adm_access, \n"
+ " apr_array_header_t propchanges, svn_boolean_t base_merge, svn_boolean_t dry_run, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_wc_get_pristine_contents2", _wrap_svn_wc_get_pristine_contents2, METH_VARARGS, (char *)"\n"
- "svn_wc_get_pristine_contents2(svn_wc_context_t wc_ctx, char local_abspath, apr_pool_t result_pool, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_wc_get_pristine_contents", _wrap_svn_wc_get_pristine_contents, METH_VARARGS, (char *)"svn_wc_get_pristine_contents(char path, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
- { (char *)"svn_wc_get_pristine_copy_path", _wrap_svn_wc_get_pristine_copy_path, METH_VARARGS, (char *)"svn_wc_get_pristine_copy_path(char path, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_get_pristine_contents2", _wrap_svn_wc_get_pristine_contents2, METH_VARARGS, (char *)"svn_wc_get_pristine_contents2(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_wc_get_pristine_contents", _wrap_svn_wc_get_pristine_contents, METH_VARARGS, (char *)"svn_wc_get_pristine_contents(char const * path, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_wc_get_pristine_copy_path", _wrap_svn_wc_get_pristine_copy_path, METH_VARARGS, (char *)"svn_wc_get_pristine_copy_path(char const * path, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_wc_cleanup3", _wrap_svn_wc_cleanup3, METH_VARARGS, (char *)"\n"
- "svn_wc_cleanup3(svn_wc_context_t wc_ctx, char local_abspath, svn_cancel_func_t cancel_func, \n"
+ "svn_wc_cleanup3(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_cancel_func_t cancel_func, \n"
" apr_pool_t scratch_pool) -> svn_error_t\n"
""},
- { (char *)"svn_wc_cleanup2", _wrap_svn_wc_cleanup2, METH_VARARGS, (char *)"\n"
- "svn_wc_cleanup2(char path, char diff3_cmd, svn_cancel_func_t cancel_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
+ { (char *)"svn_wc_cleanup2", _wrap_svn_wc_cleanup2, METH_VARARGS, (char *)"svn_wc_cleanup2(char const * path, char const * diff3_cmd, svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_wc_cleanup", _wrap_svn_wc_cleanup, METH_VARARGS, (char *)"\n"
- "svn_wc_cleanup(char path, svn_wc_adm_access_t optional_adm_access, \n"
- " char diff3_cmd, svn_cancel_func_t cancel_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_cleanup(char const * path, svn_wc_adm_access_t * optional_adm_access, char const * diff3_cmd, \n"
+ " svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_upgrade", _wrap_svn_wc_upgrade, METH_VARARGS, (char *)"\n"
- "svn_wc_upgrade(svn_wc_context_t wc_ctx, char local_abspath, svn_wc_upgrade_get_repos_info_t repos_info_func, \n"
- " void repos_info_baton, \n"
- " svn_cancel_func_t cancel_func, \n"
+ "svn_wc_upgrade(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_wc_upgrade_get_repos_info_t repos_info_func, \n"
+ " void * repos_info_baton, svn_cancel_func_t cancel_func, \n"
" svn_wc_notify_func2_t notify_func, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_relocate4", _wrap_svn_wc_relocate4, METH_VARARGS, (char *)"\n"
- "svn_wc_relocate4(svn_wc_context_t wc_ctx, char wcroot_abspath, char _from, \n"
- " char to, svn_wc_relocation_validator3_t validator, \n"
- " void validator_baton, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_relocate4(svn_wc_context_t * wc_ctx, char const * wcroot_abspath, char const * _from, char const * to, \n"
+ " svn_wc_relocation_validator3_t validator, void * validator_baton, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_relocate3", _wrap_svn_wc_relocate3, METH_VARARGS, (char *)"\n"
- "svn_wc_relocate3(char path, svn_wc_adm_access_t adm_access, char _from, \n"
- " char to, svn_boolean_t recurse, svn_wc_relocation_validator3_t validator, \n"
- " void validator_baton, \n"
+ "svn_wc_relocate3(char const * path, svn_wc_adm_access_t * adm_access, char const * _from, char const * to, \n"
+ " svn_boolean_t recurse, svn_wc_relocation_validator3_t validator, void * validator_baton, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_relocate2", _wrap_svn_wc_relocate2, METH_VARARGS, (char *)"\n"
- "svn_wc_relocate2(char path, svn_wc_adm_access_t adm_access, char _from, \n"
- " char to, svn_boolean_t recurse, svn_wc_relocation_validator2_t validator, \n"
- " void validator_baton, \n"
+ "svn_wc_relocate2(char const * path, svn_wc_adm_access_t * adm_access, char const * _from, char const * to, \n"
+ " svn_boolean_t recurse, svn_wc_relocation_validator2_t validator, void * validator_baton, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_relocate", _wrap_svn_wc_relocate, METH_VARARGS, (char *)"\n"
- "svn_wc_relocate(char path, svn_wc_adm_access_t adm_access, char _from, \n"
- " char to, svn_boolean_t recurse, svn_wc_relocation_validator_t validator, \n"
- " void validator_baton, \n"
+ "svn_wc_relocate(char const * path, svn_wc_adm_access_t * adm_access, char const * _from, char const * to, \n"
+ " svn_boolean_t recurse, svn_wc_relocation_validator_t validator, void * validator_baton, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_revert4", _wrap_svn_wc_revert4, METH_VARARGS, (char *)"\n"
- "svn_wc_revert4(svn_wc_context_t wc_ctx, char local_abspath, svn_depth_t depth, \n"
- " svn_boolean_t use_commit_times, \n"
+ "svn_wc_revert4(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_depth_t depth, svn_boolean_t use_commit_times, \n"
" apr_array_header_t changelist_filter, svn_cancel_func_t cancel_func, \n"
- " svn_wc_notify_func2_t notify_func, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
+ " svn_wc_notify_func2_t notify_func, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_revert3", _wrap_svn_wc_revert3, METH_VARARGS, (char *)"\n"
- "svn_wc_revert3(char path, svn_wc_adm_access_t parent_access, svn_depth_t depth, \n"
- " svn_boolean_t use_commit_times, \n"
+ "svn_wc_revert3(char const * path, svn_wc_adm_access_t * parent_access, svn_depth_t depth, svn_boolean_t use_commit_times, \n"
" apr_array_header_t changelist_filter, svn_cancel_func_t cancel_func, \n"
- " svn_wc_notify_func2_t notify_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ " svn_wc_notify_func2_t notify_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_revert2", _wrap_svn_wc_revert2, METH_VARARGS, (char *)"\n"
- "svn_wc_revert2(char path, svn_wc_adm_access_t parent_access, svn_boolean_t recursive, \n"
- " svn_boolean_t use_commit_times, \n"
- " svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func, \n"
+ "svn_wc_revert2(char const * path, svn_wc_adm_access_t * parent_access, svn_boolean_t recursive, \n"
+ " svn_boolean_t use_commit_times, svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_revert", _wrap_svn_wc_revert, METH_VARARGS, (char *)"\n"
- "svn_wc_revert(char path, svn_wc_adm_access_t parent_access, svn_boolean_t recursive, \n"
- " svn_boolean_t use_commit_times, \n"
- " svn_cancel_func_t cancel_func, svn_wc_notify_func_t notify_func, \n"
+ "svn_wc_revert(char const * path, svn_wc_adm_access_t * parent_access, svn_boolean_t recursive, \n"
+ " svn_boolean_t use_commit_times, svn_cancel_func_t cancel_func, svn_wc_notify_func_t notify_func, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_restore", _wrap_svn_wc_restore, METH_VARARGS, (char *)"\n"
- "svn_wc_restore(svn_wc_context_t wc_ctx, char local_abspath, svn_boolean_t use_commit_times, \n"
+ "svn_wc_restore(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_boolean_t use_commit_times, \n"
" apr_pool_t scratch_pool) -> svn_error_t\n"
""},
- { (char *)"svn_wc_create_tmp_file2", _wrap_svn_wc_create_tmp_file2, METH_VARARGS, (char *)"svn_wc_create_tmp_file2(char path, svn_io_file_del_t delete_when, apr_pool_t pool) -> svn_error_t"},
- { (char *)"svn_wc_create_tmp_file", _wrap_svn_wc_create_tmp_file, METH_VARARGS, (char *)"svn_wc_create_tmp_file(char path, svn_boolean_t delete_on_close, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_create_tmp_file2", _wrap_svn_wc_create_tmp_file2, METH_VARARGS, (char *)"svn_wc_create_tmp_file2(char const * path, svn_io_file_del_t delete_when, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_create_tmp_file", _wrap_svn_wc_create_tmp_file, METH_VARARGS, (char *)"svn_wc_create_tmp_file(char const * path, svn_boolean_t delete_on_close, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_wc_translated_file2", _wrap_svn_wc_translated_file2, METH_VARARGS, (char *)"\n"
- "svn_wc_translated_file2(char src, char versioned_file, svn_wc_adm_access_t adm_access, \n"
+ "svn_wc_translated_file2(char const * src, char const * versioned_file, svn_wc_adm_access_t * adm_access, \n"
" apr_uint32_t flags, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_translated_file", _wrap_svn_wc_translated_file, METH_VARARGS, (char *)"\n"
- "svn_wc_translated_file(char vfile, svn_wc_adm_access_t adm_access, svn_boolean_t force_repair, \n"
+ "svn_wc_translated_file(char const * vfile, svn_wc_adm_access_t * adm_access, svn_boolean_t force_repair, \n"
" apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_translated_stream", _wrap_svn_wc_translated_stream, METH_VARARGS, (char *)"\n"
- "svn_wc_translated_stream(char path, char versioned_file, svn_wc_adm_access_t adm_access, \n"
+ "svn_wc_translated_stream(char const * path, char const * versioned_file, svn_wc_adm_access_t * adm_access, \n"
" apr_uint32_t flags, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_transmit_text_deltas3", _wrap_svn_wc_transmit_text_deltas3, METH_VARARGS, (char *)"\n"
- "svn_wc_transmit_text_deltas3(svn_wc_context_t wc_ctx, char local_abspath, svn_boolean_t fulltext, \n"
- " svn_delta_editor_t editor, \n"
- " void file_baton, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_transmit_text_deltas3(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_boolean_t fulltext, svn_delta_editor_t editor, \n"
+ " void * file_baton, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_transmit_text_deltas2", _wrap_svn_wc_transmit_text_deltas2, METH_VARARGS, (char *)"\n"
- "svn_wc_transmit_text_deltas2(char path, svn_wc_adm_access_t adm_access, svn_boolean_t fulltext, \n"
- " svn_delta_editor_t editor, void file_baton, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_transmit_text_deltas2(char const * path, svn_wc_adm_access_t * adm_access, svn_boolean_t fulltext, svn_delta_editor_t editor, \n"
+ " void * file_baton, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_transmit_text_deltas", _wrap_svn_wc_transmit_text_deltas, METH_VARARGS, (char *)"\n"
- "svn_wc_transmit_text_deltas(char path, svn_wc_adm_access_t adm_access, svn_boolean_t fulltext, \n"
- " svn_delta_editor_t editor, void file_baton, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_transmit_text_deltas(char const * path, svn_wc_adm_access_t * adm_access, svn_boolean_t fulltext, svn_delta_editor_t editor, \n"
+ " void * file_baton, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_transmit_prop_deltas2", _wrap_svn_wc_transmit_prop_deltas2, METH_VARARGS, (char *)"\n"
- "svn_wc_transmit_prop_deltas2(svn_wc_context_t wc_ctx, char local_abspath, svn_delta_editor_t editor, \n"
- " void baton, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_transmit_prop_deltas2(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_delta_editor_t editor, \n"
+ " void * baton, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_transmit_prop_deltas", _wrap_svn_wc_transmit_prop_deltas, METH_VARARGS, (char *)"\n"
- "svn_wc_transmit_prop_deltas(char path, svn_wc_adm_access_t adm_access, svn_wc_entry_t entry, \n"
- " svn_delta_editor_t editor, void baton, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_transmit_prop_deltas(char const * path, svn_wc_adm_access_t * adm_access, svn_wc_entry_t entry, svn_delta_editor_t editor, \n"
+ " void * baton, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_get_default_ignores", _wrap_svn_wc_get_default_ignores, METH_VARARGS, (char *)"svn_wc_get_default_ignores(apr_hash_t config, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_wc_get_ignores2", _wrap_svn_wc_get_ignores2, METH_VARARGS, (char *)"\n"
- "svn_wc_get_ignores2(svn_wc_context_t wc_ctx, char local_abspath, apr_hash_t config, \n"
- " apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_wc_get_ignores", _wrap_svn_wc_get_ignores, METH_VARARGS, (char *)"\n"
- "svn_wc_get_ignores(apr_hash_t config, svn_wc_adm_access_t adm_access, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_wc_match_ignore_list", _wrap_svn_wc_match_ignore_list, METH_VARARGS, (char *)"svn_wc_match_ignore_list(char str, apr_array_header_t list, apr_pool_t pool) -> svn_boolean_t"},
- { (char *)"svn_wc_add_lock2", _wrap_svn_wc_add_lock2, METH_VARARGS, (char *)"\n"
- "svn_wc_add_lock2(svn_wc_context_t wc_ctx, char abspath, svn_lock_t lock, \n"
+ "svn_wc_get_ignores2(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_hash_t config, apr_pool_t result_pool, \n"
" apr_pool_t scratch_pool) -> svn_error_t\n"
""},
- { (char *)"svn_wc_add_lock", _wrap_svn_wc_add_lock, METH_VARARGS, (char *)"\n"
- "svn_wc_add_lock(char path, svn_lock_t lock, svn_wc_adm_access_t adm_access, \n"
- " apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_wc_remove_lock2", _wrap_svn_wc_remove_lock2, METH_VARARGS, (char *)"svn_wc_remove_lock2(svn_wc_context_t wc_ctx, char local_abspath, apr_pool_t scratch_pool) -> svn_error_t"},
- { (char *)"svn_wc_remove_lock", _wrap_svn_wc_remove_lock, METH_VARARGS, (char *)"svn_wc_remove_lock(char path, svn_wc_adm_access_t adm_access, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_get_ignores", _wrap_svn_wc_get_ignores, METH_VARARGS, (char *)"svn_wc_get_ignores(apr_hash_t config, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_match_ignore_list", _wrap_svn_wc_match_ignore_list, METH_VARARGS, (char *)"svn_wc_match_ignore_list(char const * str, apr_array_header_t list, apr_pool_t pool) -> svn_boolean_t"},
+ { (char *)"svn_wc_add_lock2", _wrap_svn_wc_add_lock2, METH_VARARGS, (char *)"svn_wc_add_lock2(svn_wc_context_t * wc_ctx, char const * abspath, svn_lock_t lock, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_wc_add_lock", _wrap_svn_wc_add_lock, METH_VARARGS, (char *)"svn_wc_add_lock(char const * path, svn_lock_t lock, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_error_t"},
+ { (char *)"svn_wc_remove_lock2", _wrap_svn_wc_remove_lock2, METH_VARARGS, (char *)"svn_wc_remove_lock2(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_pool_t scratch_pool) -> svn_error_t"},
+ { (char *)"svn_wc_remove_lock", _wrap_svn_wc_remove_lock, METH_VARARGS, (char *)"svn_wc_remove_lock(char const * path, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_error_t"},
{ (char *)"svn_wc_revision_status_t_min_rev_set", _wrap_svn_wc_revision_status_t_min_rev_set, METH_VARARGS, (char *)"svn_wc_revision_status_t_min_rev_set(svn_wc_revision_status_t self, svn_revnum_t min_rev)"},
{ (char *)"svn_wc_revision_status_t_min_rev_get", _wrap_svn_wc_revision_status_t_min_rev_get, METH_VARARGS, (char *)"svn_wc_revision_status_t_min_rev_get(svn_wc_revision_status_t self) -> svn_revnum_t"},
{ (char *)"svn_wc_revision_status_t_max_rev_set", _wrap_svn_wc_revision_status_t_max_rev_set, METH_VARARGS, (char *)"svn_wc_revision_status_t_max_rev_set(svn_wc_revision_status_t self, svn_revnum_t max_rev)"},
@@ -39684,321 +40383,269 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"delete_svn_wc_revision_status_t", _wrap_delete_svn_wc_revision_status_t, METH_VARARGS, (char *)"delete_svn_wc_revision_status_t(svn_wc_revision_status_t self)"},
{ (char *)"svn_wc_revision_status_t_swigregister", svn_wc_revision_status_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_wc_revision_status2", _wrap_svn_wc_revision_status2, METH_VARARGS, (char *)"\n"
- "svn_wc_revision_status2(svn_wc_context_t wc_ctx, char local_abspath, char trail_url, \n"
- " svn_boolean_t committed, svn_cancel_func_t cancel_func, \n"
- " apr_pool_t result_pool, \n"
+ "svn_wc_revision_status2(svn_wc_context_t * wc_ctx, char const * local_abspath, char const * trail_url, svn_boolean_t committed, \n"
+ " svn_cancel_func_t cancel_func, apr_pool_t result_pool, \n"
" apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_revision_status", _wrap_svn_wc_revision_status, METH_VARARGS, (char *)"\n"
- "svn_wc_revision_status(char wc_path, char trail_url, svn_boolean_t committed, \n"
- " svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_revision_status(char const * wc_path, char const * trail_url, svn_boolean_t committed, svn_cancel_func_t cancel_func, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_set_changelist2", _wrap_svn_wc_set_changelist2, METH_VARARGS, (char *)"\n"
- "svn_wc_set_changelist2(svn_wc_context_t wc_ctx, char local_abspath, char changelist, \n"
- " svn_depth_t depth, apr_array_header_t changelist_filter, \n"
- " svn_cancel_func_t cancel_func, \n"
+ "svn_wc_set_changelist2(svn_wc_context_t * wc_ctx, char const * local_abspath, char const * changelist, svn_depth_t depth, \n"
+ " apr_array_header_t changelist_filter, svn_cancel_func_t cancel_func, \n"
" svn_wc_notify_func2_t notify_func, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_set_changelist", _wrap_svn_wc_set_changelist, METH_VARARGS, (char *)"\n"
- "svn_wc_set_changelist(char path, char changelist, svn_wc_adm_access_t adm_access, \n"
- " svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_set_changelist(char const * path, char const * changelist, svn_wc_adm_access_t * adm_access, svn_cancel_func_t cancel_func, \n"
+ " svn_wc_notify_func2_t notify_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_get_changelists", _wrap_svn_wc_get_changelists, METH_VARARGS, (char *)"\n"
- "svn_wc_get_changelists(svn_wc_context_t wc_ctx, char local_abspath, svn_depth_t depth, \n"
- " apr_array_header_t changelist_filter, \n"
- " svn_changelist_receiver_t callback_func, \n"
- " void callback_baton, svn_cancel_func_t cancel_func, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_get_changelists(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_depth_t depth, apr_array_header_t changelist_filter, \n"
+ " svn_changelist_receiver_t callback_func, void * callback_baton, \n"
+ " svn_cancel_func_t cancel_func, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_crop_tree2", _wrap_svn_wc_crop_tree2, METH_VARARGS, (char *)"\n"
- "svn_wc_crop_tree2(svn_wc_context_t wc_ctx, char local_abspath, svn_depth_t depth, \n"
- " svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_crop_tree2(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_depth_t depth, svn_cancel_func_t cancel_func, \n"
+ " svn_wc_notify_func2_t notify_func, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_crop_tree", _wrap_svn_wc_crop_tree, METH_VARARGS, (char *)"\n"
- "svn_wc_crop_tree(svn_wc_adm_access_t anchor, char target, svn_depth_t depth, \n"
- " svn_wc_notify_func2_t notify_func, svn_cancel_func_t cancel_func, \n"
- " apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_crop_tree(svn_wc_adm_access_t * anchor, char const * target, svn_depth_t depth, svn_wc_notify_func2_t notify_func, \n"
+ " svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_exclude", _wrap_svn_wc_exclude, METH_VARARGS, (char *)"\n"
- "svn_wc_exclude(svn_wc_context_t wc_ctx, char local_abspath, svn_cancel_func_t cancel_func, \n"
- " svn_wc_notify_func2_t notify_func, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_exclude(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_cancel_func_t cancel_func, \n"
+ " svn_wc_notify_func2_t notify_func, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
- { (char *)"svn_wc_read_kind", _wrap_svn_wc_read_kind, METH_VARARGS, (char *)"\n"
- "svn_wc_read_kind(svn_wc_context_t wc_ctx, char abspath, svn_boolean_t show_hidden, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
+ { (char *)"svn_wc_read_kind2", _wrap_svn_wc_read_kind2, METH_VARARGS, (char *)"\n"
+ "svn_wc_read_kind2(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_boolean_t show_deleted, \n"
+ " svn_boolean_t show_hidden, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
+ { (char *)"svn_wc_read_kind", _wrap_svn_wc_read_kind, METH_VARARGS, (char *)"svn_wc_read_kind(svn_wc_context_t * wc_ctx, char const * abspath, svn_boolean_t show_hidden, apr_pool_t scratch_pool) -> svn_error_t"},
{ (char *)"svn_wc_context_t_swigregister", svn_wc_context_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_wc_adm_access_t_swigregister", svn_wc_adm_access_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_wc_traversal_info_t_swigregister", svn_wc_traversal_info_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_wc_committed_queue_t_swigregister", svn_wc_committed_queue_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_wc_diff_callbacks4_invoke_file_opened", _wrap_svn_wc_diff_callbacks4_invoke_file_opened, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks4_invoke_file_opened(svn_wc_diff_callbacks4_t _obj, char path, svn_revnum_t rev, \n"
- " void diff_baton, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_diff_callbacks4_invoke_file_opened(svn_wc_diff_callbacks4_t _obj, char const * path, svn_revnum_t rev, void * diff_baton, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks4_invoke_file_changed", _wrap_svn_wc_diff_callbacks4_invoke_file_changed, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks4_invoke_file_changed(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t contentstate, \n"
- " svn_wc_notify_state_t propstate, \n"
- " char path, char tmpfile1, char tmpfile2, \n"
- " svn_revnum_t rev1, svn_revnum_t rev2, char mimetype1, \n"
- " char mimetype2, apr_array_header_t propchanges, \n"
- " apr_hash_t originalprops, void diff_baton, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_diff_callbacks4_invoke_file_changed(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t * contentstate, svn_wc_notify_state_t * propstate, \n"
+ " char const * path, char const * tmpfile1, char const * tmpfile2, \n"
+ " svn_revnum_t rev1, svn_revnum_t rev2, char const * mimetype1, \n"
+ " char const * mimetype2, apr_array_header_t propchanges, apr_hash_t originalprops, \n"
+ " void * diff_baton, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks4_invoke_file_added", _wrap_svn_wc_diff_callbacks4_invoke_file_added, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks4_invoke_file_added(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t contentstate, \n"
- " svn_wc_notify_state_t propstate, \n"
- " char path, char tmpfile1, char tmpfile2, \n"
- " svn_revnum_t rev1, svn_revnum_t rev2, char mimetype1, \n"
- " char mimetype2, char copyfrom_path, \n"
- " svn_revnum_t copyfrom_revision, apr_array_header_t propchanges, \n"
- " apr_hash_t originalprops, \n"
- " void diff_baton, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_diff_callbacks4_invoke_file_added(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t * contentstate, svn_wc_notify_state_t * propstate, \n"
+ " char const * path, char const * tmpfile1, char const * tmpfile2, \n"
+ " svn_revnum_t rev1, svn_revnum_t rev2, char const * mimetype1, \n"
+ " char const * mimetype2, char const * copyfrom_path, svn_revnum_t copyfrom_revision, \n"
+ " apr_array_header_t propchanges, apr_hash_t originalprops, void * diff_baton, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks4_invoke_file_deleted", _wrap_svn_wc_diff_callbacks4_invoke_file_deleted, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks4_invoke_file_deleted(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t state, \n"
- " char path, char tmpfile1, char tmpfile2, \n"
- " char mimetype1, char mimetype2, apr_hash_t originalprops, \n"
- " void diff_baton, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_diff_callbacks4_invoke_file_deleted(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t * state, char const * path, \n"
+ " char const * tmpfile1, char const * tmpfile2, char const * mimetype1, char const * mimetype2, \n"
+ " apr_hash_t originalprops, void * diff_baton, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks4_invoke_dir_deleted", _wrap_svn_wc_diff_callbacks4_invoke_dir_deleted, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks4_invoke_dir_deleted(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t state, \n"
- " char path, void diff_baton, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_diff_callbacks4_invoke_dir_deleted(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t * state, char const * path, \n"
+ " void * diff_baton, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks4_invoke_dir_opened", _wrap_svn_wc_diff_callbacks4_invoke_dir_opened, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks4_invoke_dir_opened(svn_wc_diff_callbacks4_t _obj, char path, svn_revnum_t rev, \n"
- " void diff_baton, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_diff_callbacks4_invoke_dir_opened(svn_wc_diff_callbacks4_t _obj, char const * path, svn_revnum_t rev, void * diff_baton, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks4_invoke_dir_added", _wrap_svn_wc_diff_callbacks4_invoke_dir_added, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks4_invoke_dir_added(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t state, \n"
- " char path, svn_revnum_t rev, char copyfrom_path, \n"
- " svn_revnum_t copyfrom_revision, \n"
- " void diff_baton, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_diff_callbacks4_invoke_dir_added(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t * state, char const * path, \n"
+ " svn_revnum_t rev, char const * copyfrom_path, svn_revnum_t copyfrom_revision, \n"
+ " void * diff_baton, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks4_invoke_dir_props_changed", _wrap_svn_wc_diff_callbacks4_invoke_dir_props_changed, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks4_invoke_dir_props_changed(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t propstate, \n"
- " char path, svn_boolean_t dir_was_added, \n"
- " apr_array_header_t propchanges, apr_hash_t original_props, \n"
- " void diff_baton, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_diff_callbacks4_invoke_dir_props_changed(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t * propstate, char const * path, \n"
+ " svn_boolean_t dir_was_added, apr_array_header_t propchanges, apr_hash_t original_props, \n"
+ " void * diff_baton, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks4_invoke_dir_closed", _wrap_svn_wc_diff_callbacks4_invoke_dir_closed, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks4_invoke_dir_closed(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t contentstate, \n"
- " svn_wc_notify_state_t propstate, \n"
- " char path, svn_boolean_t dir_was_added, void diff_baton, \n"
+ "svn_wc_diff_callbacks4_invoke_dir_closed(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t * contentstate, svn_wc_notify_state_t * propstate, \n"
+ " char const * path, svn_boolean_t dir_was_added, void * diff_baton, \n"
" apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks3_invoke_file_changed", _wrap_svn_wc_diff_callbacks3_invoke_file_changed, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks3_invoke_file_changed(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t adm_access, \n"
- " svn_wc_notify_state_t contentstate, \n"
- " svn_wc_notify_state_t propstate, char path, \n"
- " char tmpfile1, char tmpfile2, svn_revnum_t rev1, \n"
- " svn_revnum_t rev2, char mimetype1, char mimetype2, \n"
- " apr_array_header_t propchanges, apr_hash_t originalprops, \n"
- " void diff_baton) -> svn_error_t\n"
+ "svn_wc_diff_callbacks3_invoke_file_changed(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * contentstate, \n"
+ " svn_wc_notify_state_t * propstate, char const * path, \n"
+ " char const * tmpfile1, char const * tmpfile2, svn_revnum_t rev1, svn_revnum_t rev2, \n"
+ " char const * mimetype1, char const * mimetype2, apr_array_header_t propchanges, \n"
+ " apr_hash_t originalprops, void * diff_baton) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks3_invoke_file_added", _wrap_svn_wc_diff_callbacks3_invoke_file_added, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks3_invoke_file_added(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t adm_access, \n"
- " svn_wc_notify_state_t contentstate, \n"
- " svn_wc_notify_state_t propstate, char path, \n"
- " char tmpfile1, char tmpfile2, svn_revnum_t rev1, \n"
- " svn_revnum_t rev2, char mimetype1, char mimetype2, \n"
- " apr_array_header_t propchanges, apr_hash_t originalprops, \n"
- " void diff_baton) -> svn_error_t\n"
+ "svn_wc_diff_callbacks3_invoke_file_added(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * contentstate, \n"
+ " svn_wc_notify_state_t * propstate, char const * path, \n"
+ " char const * tmpfile1, char const * tmpfile2, svn_revnum_t rev1, svn_revnum_t rev2, \n"
+ " char const * mimetype1, char const * mimetype2, apr_array_header_t propchanges, \n"
+ " apr_hash_t originalprops, void * diff_baton) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks3_invoke_file_deleted", _wrap_svn_wc_diff_callbacks3_invoke_file_deleted, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks3_invoke_file_deleted(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t adm_access, \n"
- " svn_wc_notify_state_t state, char path, \n"
- " char tmpfile1, char tmpfile2, char mimetype1, \n"
- " char mimetype2, apr_hash_t originalprops, \n"
- " void diff_baton) -> svn_error_t\n"
+ "svn_wc_diff_callbacks3_invoke_file_deleted(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * state, \n"
+ " char const * path, char const * tmpfile1, char const * tmpfile2, \n"
+ " char const * mimetype1, char const * mimetype2, apr_hash_t originalprops, \n"
+ " void * diff_baton) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks3_invoke_dir_added", _wrap_svn_wc_diff_callbacks3_invoke_dir_added, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks3_invoke_dir_added(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t adm_access, \n"
- " svn_wc_notify_state_t state, char path, \n"
- " svn_revnum_t rev, void diff_baton) -> svn_error_t\n"
+ "svn_wc_diff_callbacks3_invoke_dir_added(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * state, \n"
+ " char const * path, svn_revnum_t rev, void * diff_baton) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks3_invoke_dir_deleted", _wrap_svn_wc_diff_callbacks3_invoke_dir_deleted, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks3_invoke_dir_deleted(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t adm_access, \n"
- " svn_wc_notify_state_t state, char path, \n"
- " void diff_baton) -> svn_error_t\n"
+ "svn_wc_diff_callbacks3_invoke_dir_deleted(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * state, \n"
+ " char const * path, void * diff_baton) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks3_invoke_dir_props_changed", _wrap_svn_wc_diff_callbacks3_invoke_dir_props_changed, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks3_invoke_dir_props_changed(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t adm_access, \n"
- " svn_wc_notify_state_t propstate, \n"
- " char path, apr_array_header_t propchanges, apr_hash_t original_props, \n"
- " void diff_baton) -> svn_error_t\n"
+ "svn_wc_diff_callbacks3_invoke_dir_props_changed(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * propstate, \n"
+ " char const * path, apr_array_header_t propchanges, apr_hash_t original_props, \n"
+ " void * diff_baton) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks3_invoke_dir_opened", _wrap_svn_wc_diff_callbacks3_invoke_dir_opened, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks3_invoke_dir_opened(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t adm_access, \n"
- " char path, svn_revnum_t rev, void diff_baton) -> svn_error_t\n"
+ "svn_wc_diff_callbacks3_invoke_dir_opened(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t * adm_access, char const * path, \n"
+ " svn_revnum_t rev, void * diff_baton) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks3_invoke_dir_closed", _wrap_svn_wc_diff_callbacks3_invoke_dir_closed, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks3_invoke_dir_closed(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t adm_access, \n"
- " svn_wc_notify_state_t contentstate, \n"
- " svn_wc_notify_state_t propstate, char path, \n"
- " void diff_baton) -> svn_error_t\n"
+ "svn_wc_diff_callbacks3_invoke_dir_closed(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * contentstate, \n"
+ " svn_wc_notify_state_t * propstate, char const * path, \n"
+ " void * diff_baton) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks2_invoke_file_changed", _wrap_svn_wc_diff_callbacks2_invoke_file_changed, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks2_invoke_file_changed(svn_wc_diff_callbacks2_t _obj, svn_wc_adm_access_t adm_access, \n"
- " svn_wc_notify_state_t contentstate, \n"
- " svn_wc_notify_state_t propstate, char path, \n"
- " char tmpfile1, char tmpfile2, svn_revnum_t rev1, \n"
- " svn_revnum_t rev2, char mimetype1, char mimetype2, \n"
- " apr_array_header_t propchanges, apr_hash_t originalprops, \n"
- " void diff_baton) -> svn_error_t\n"
+ "svn_wc_diff_callbacks2_invoke_file_changed(svn_wc_diff_callbacks2_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * contentstate, \n"
+ " svn_wc_notify_state_t * propstate, char const * path, \n"
+ " char const * tmpfile1, char const * tmpfile2, svn_revnum_t rev1, svn_revnum_t rev2, \n"
+ " char const * mimetype1, char const * mimetype2, apr_array_header_t propchanges, \n"
+ " apr_hash_t originalprops, void * diff_baton) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks2_invoke_file_added", _wrap_svn_wc_diff_callbacks2_invoke_file_added, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks2_invoke_file_added(svn_wc_diff_callbacks2_t _obj, svn_wc_adm_access_t adm_access, \n"
- " svn_wc_notify_state_t contentstate, \n"
- " svn_wc_notify_state_t propstate, char path, \n"
- " char tmpfile1, char tmpfile2, svn_revnum_t rev1, \n"
- " svn_revnum_t rev2, char mimetype1, char mimetype2, \n"
- " apr_array_header_t propchanges, apr_hash_t originalprops, \n"
- " void diff_baton) -> svn_error_t\n"
+ "svn_wc_diff_callbacks2_invoke_file_added(svn_wc_diff_callbacks2_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * contentstate, \n"
+ " svn_wc_notify_state_t * propstate, char const * path, \n"
+ " char const * tmpfile1, char const * tmpfile2, svn_revnum_t rev1, svn_revnum_t rev2, \n"
+ " char const * mimetype1, char const * mimetype2, apr_array_header_t propchanges, \n"
+ " apr_hash_t originalprops, void * diff_baton) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks2_invoke_file_deleted", _wrap_svn_wc_diff_callbacks2_invoke_file_deleted, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks2_invoke_file_deleted(svn_wc_diff_callbacks2_t _obj, svn_wc_adm_access_t adm_access, \n"
- " svn_wc_notify_state_t state, char path, \n"
- " char tmpfile1, char tmpfile2, char mimetype1, \n"
- " char mimetype2, apr_hash_t originalprops, \n"
- " void diff_baton) -> svn_error_t\n"
+ "svn_wc_diff_callbacks2_invoke_file_deleted(svn_wc_diff_callbacks2_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * state, \n"
+ " char const * path, char const * tmpfile1, char const * tmpfile2, \n"
+ " char const * mimetype1, char const * mimetype2, apr_hash_t originalprops, \n"
+ " void * diff_baton) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks2_invoke_dir_added", _wrap_svn_wc_diff_callbacks2_invoke_dir_added, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks2_invoke_dir_added(svn_wc_diff_callbacks2_t _obj, svn_wc_adm_access_t adm_access, \n"
- " svn_wc_notify_state_t state, char path, \n"
- " svn_revnum_t rev, void diff_baton) -> svn_error_t\n"
+ "svn_wc_diff_callbacks2_invoke_dir_added(svn_wc_diff_callbacks2_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * state, \n"
+ " char const * path, svn_revnum_t rev, void * diff_baton) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks2_invoke_dir_deleted", _wrap_svn_wc_diff_callbacks2_invoke_dir_deleted, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks2_invoke_dir_deleted(svn_wc_diff_callbacks2_t _obj, svn_wc_adm_access_t adm_access, \n"
- " svn_wc_notify_state_t state, char path, \n"
- " void diff_baton) -> svn_error_t\n"
+ "svn_wc_diff_callbacks2_invoke_dir_deleted(svn_wc_diff_callbacks2_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * state, \n"
+ " char const * path, void * diff_baton) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks2_invoke_dir_props_changed", _wrap_svn_wc_diff_callbacks2_invoke_dir_props_changed, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks2_invoke_dir_props_changed(svn_wc_diff_callbacks2_t _obj, svn_wc_adm_access_t adm_access, \n"
- " svn_wc_notify_state_t state, char path, \n"
- " apr_array_header_t propchanges, apr_hash_t original_props, \n"
- " void diff_baton) -> svn_error_t\n"
+ "svn_wc_diff_callbacks2_invoke_dir_props_changed(svn_wc_diff_callbacks2_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * state, \n"
+ " char const * path, apr_array_header_t propchanges, apr_hash_t original_props, \n"
+ " void * diff_baton) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks_invoke_file_changed", _wrap_svn_wc_diff_callbacks_invoke_file_changed, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks_invoke_file_changed(svn_wc_diff_callbacks_t _obj, svn_wc_adm_access_t adm_access, \n"
- " svn_wc_notify_state_t state, char path, \n"
- " char tmpfile1, char tmpfile2, svn_revnum_t rev1, \n"
- " svn_revnum_t rev2, char mimetype1, \n"
- " char mimetype2, void diff_baton) -> svn_error_t\n"
+ "svn_wc_diff_callbacks_invoke_file_changed(svn_wc_diff_callbacks_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * state, \n"
+ " char const * path, char const * tmpfile1, char const * tmpfile2, \n"
+ " svn_revnum_t rev1, svn_revnum_t rev2, char const * mimetype1, char const * mimetype2, \n"
+ " void * diff_baton) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks_invoke_file_added", _wrap_svn_wc_diff_callbacks_invoke_file_added, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks_invoke_file_added(svn_wc_diff_callbacks_t _obj, svn_wc_adm_access_t adm_access, \n"
- " svn_wc_notify_state_t state, char path, \n"
- " char tmpfile1, char tmpfile2, svn_revnum_t rev1, \n"
- " svn_revnum_t rev2, char mimetype1, \n"
- " char mimetype2, void diff_baton) -> svn_error_t\n"
+ "svn_wc_diff_callbacks_invoke_file_added(svn_wc_diff_callbacks_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * state, \n"
+ " char const * path, char const * tmpfile1, char const * tmpfile2, \n"
+ " svn_revnum_t rev1, svn_revnum_t rev2, char const * mimetype1, char const * mimetype2, \n"
+ " void * diff_baton) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks_invoke_file_deleted", _wrap_svn_wc_diff_callbacks_invoke_file_deleted, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks_invoke_file_deleted(svn_wc_diff_callbacks_t _obj, svn_wc_adm_access_t adm_access, \n"
- " svn_wc_notify_state_t state, char path, \n"
- " char tmpfile1, char tmpfile2, char mimetype1, \n"
- " char mimetype2, void diff_baton) -> svn_error_t\n"
+ "svn_wc_diff_callbacks_invoke_file_deleted(svn_wc_diff_callbacks_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * state, \n"
+ " char const * path, char const * tmpfile1, char const * tmpfile2, \n"
+ " char const * mimetype1, char const * mimetype2, void * diff_baton) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks_invoke_dir_added", _wrap_svn_wc_diff_callbacks_invoke_dir_added, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks_invoke_dir_added(svn_wc_diff_callbacks_t _obj, svn_wc_adm_access_t adm_access, \n"
- " svn_wc_notify_state_t state, char path, \n"
- " svn_revnum_t rev, void diff_baton) -> svn_error_t\n"
+ "svn_wc_diff_callbacks_invoke_dir_added(svn_wc_diff_callbacks_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * state, \n"
+ " char const * path, svn_revnum_t rev, void * diff_baton) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks_invoke_dir_deleted", _wrap_svn_wc_diff_callbacks_invoke_dir_deleted, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks_invoke_dir_deleted(svn_wc_diff_callbacks_t _obj, svn_wc_adm_access_t adm_access, \n"
- " svn_wc_notify_state_t state, char path, \n"
- " void diff_baton) -> svn_error_t\n"
+ "svn_wc_diff_callbacks_invoke_dir_deleted(svn_wc_diff_callbacks_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * state, \n"
+ " char const * path, void * diff_baton) -> svn_error_t\n"
""},
{ (char *)"svn_wc_diff_callbacks_invoke_props_changed", _wrap_svn_wc_diff_callbacks_invoke_props_changed, METH_VARARGS, (char *)"\n"
- "svn_wc_diff_callbacks_invoke_props_changed(svn_wc_diff_callbacks_t _obj, svn_wc_adm_access_t adm_access, \n"
- " svn_wc_notify_state_t state, char path, \n"
- " apr_array_header_t propchanges, apr_hash_t original_props, \n"
- " void diff_baton) -> svn_error_t\n"
+ "svn_wc_diff_callbacks_invoke_props_changed(svn_wc_diff_callbacks_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * state, \n"
+ " char const * path, apr_array_header_t propchanges, apr_hash_t original_props, \n"
+ " void * diff_baton) -> svn_error_t\n"
""},
{ (char *)"svn_wc_entry_callbacks2_invoke_found_entry", _wrap_svn_wc_entry_callbacks2_invoke_found_entry, METH_VARARGS, (char *)"\n"
- "svn_wc_entry_callbacks2_invoke_found_entry(svn_wc_entry_callbacks2_t _obj, char path, svn_wc_entry_t entry, \n"
- " void walk_baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_entry_callbacks2_invoke_found_entry(svn_wc_entry_callbacks2_t _obj, char const * path, svn_wc_entry_t entry, void * walk_baton, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_entry_callbacks2_invoke_handle_error", _wrap_svn_wc_entry_callbacks2_invoke_handle_error, METH_VARARGS, (char *)"\n"
- "svn_wc_entry_callbacks2_invoke_handle_error(svn_wc_entry_callbacks2_t _obj, char path, svn_error_t err, \n"
- " void walk_baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_entry_callbacks2_invoke_handle_error(svn_wc_entry_callbacks2_t _obj, char const * path, svn_error_t err, void * walk_baton, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_entry_callbacks_invoke_found_entry", _wrap_svn_wc_entry_callbacks_invoke_found_entry, METH_VARARGS, (char *)"\n"
- "svn_wc_entry_callbacks_invoke_found_entry(svn_wc_entry_callbacks_t _obj, char path, svn_wc_entry_t entry, \n"
- " void walk_baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_entry_callbacks_invoke_found_entry(svn_wc_entry_callbacks_t _obj, char const * path, svn_wc_entry_t entry, void * walk_baton, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_invoke_external_update", _wrap_svn_wc_invoke_external_update, METH_VARARGS, (char *)"\n"
- "svn_wc_invoke_external_update(svn_wc_external_update_t _obj, void baton, char local_abspath, \n"
- " svn_string_t old_val, svn_string_t new_val, \n"
- " svn_depth_t depth, apr_pool_t scratch_pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_wc_invoke_notify_func2", _wrap_svn_wc_invoke_notify_func2, METH_VARARGS, (char *)"\n"
- "svn_wc_invoke_notify_func2(svn_wc_notify_func2_t _obj, void baton, svn_wc_notify_t notify, \n"
- " apr_pool_t pool)\n"
+ "svn_wc_invoke_external_update(svn_wc_external_update_t _obj, void * baton, char const * local_abspath, svn_string_t const * old_val, \n"
+ " svn_string_t const * new_val, svn_depth_t depth, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
+ { (char *)"svn_wc_invoke_notify_func2", _wrap_svn_wc_invoke_notify_func2, METH_VARARGS, (char *)"svn_wc_invoke_notify_func2(svn_wc_notify_func2_t _obj, void * baton, svn_wc_notify_t notify, apr_pool_t pool)"},
{ (char *)"svn_wc_invoke_notify_func", _wrap_svn_wc_invoke_notify_func, METH_VARARGS, (char *)"\n"
- "svn_wc_invoke_notify_func(svn_wc_notify_func_t _obj, void baton, char path, svn_wc_notify_action_t action, \n"
- " svn_node_kind_t kind, \n"
- " char mime_type, svn_wc_notify_state_t content_state, \n"
- " svn_wc_notify_state_t prop_state, \n"
- " svn_revnum_t revision)\n"
+ "svn_wc_invoke_notify_func(svn_wc_notify_func_t _obj, void * baton, char const * path, svn_wc_notify_action_t action, \n"
+ " svn_node_kind_t kind, char const * mime_type, svn_wc_notify_state_t content_state, \n"
+ " svn_wc_notify_state_t prop_state, svn_revnum_t revision)\n"
""},
{ (char *)"svn_wc_invoke_conflict_resolver_func2", _wrap_svn_wc_invoke_conflict_resolver_func2, METH_VARARGS, (char *)"\n"
"svn_wc_invoke_conflict_resolver_func2(svn_wc_conflict_resolver_func2_t _obj, svn_wc_conflict_description2_t description, \n"
- " void baton, apr_pool_t result_pool, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
+ " void * baton, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_invoke_conflict_resolver_func", _wrap_svn_wc_invoke_conflict_resolver_func, METH_VARARGS, (char *)"\n"
"svn_wc_invoke_conflict_resolver_func(svn_wc_conflict_resolver_func_t _obj, svn_wc_conflict_description_t description, \n"
- " void baton, apr_pool_t pool) -> svn_error_t\n"
+ " void * baton, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_invoke_status_func4", _wrap_svn_wc_invoke_status_func4, METH_VARARGS, (char *)"\n"
- "svn_wc_invoke_status_func4(svn_wc_status_func4_t _obj, void baton, char local_abspath, \n"
- " svn_wc_status3_t status, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_invoke_status_func4(svn_wc_status_func4_t _obj, void * baton, char const * local_abspath, svn_wc_status3_t status, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_invoke_status_func3", _wrap_svn_wc_invoke_status_func3, METH_VARARGS, (char *)"\n"
- "svn_wc_invoke_status_func3(svn_wc_status_func3_t _obj, void baton, char path, \n"
- " svn_wc_status2_t status, apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_wc_invoke_status_func2", _wrap_svn_wc_invoke_status_func2, METH_VARARGS, (char *)"\n"
- "svn_wc_invoke_status_func2(svn_wc_status_func2_t _obj, void baton, char path, \n"
- " svn_wc_status2_t status)\n"
+ "svn_wc_invoke_status_func3(svn_wc_status_func3_t _obj, void * baton, char const * path, svn_wc_status2_t status, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
- { (char *)"svn_wc_invoke_status_func", _wrap_svn_wc_invoke_status_func, METH_VARARGS, (char *)"svn_wc_invoke_status_func(svn_wc_status_func_t _obj, void baton, char path, svn_wc_status_t status)"},
+ { (char *)"svn_wc_invoke_status_func2", _wrap_svn_wc_invoke_status_func2, METH_VARARGS, (char *)"svn_wc_invoke_status_func2(svn_wc_status_func2_t _obj, void * baton, char const * path, svn_wc_status2_t status)"},
+ { (char *)"svn_wc_invoke_status_func", _wrap_svn_wc_invoke_status_func, METH_VARARGS, (char *)"svn_wc_invoke_status_func(svn_wc_status_func_t _obj, void * baton, char const * path, svn_wc_status_t status)"},
{ (char *)"svn_wc_invoke_get_file", _wrap_svn_wc_invoke_get_file, METH_VARARGS, (char *)"\n"
- "svn_wc_invoke_get_file(svn_wc_get_file_t _obj, void baton, char path, svn_revnum_t revision, \n"
- " svn_stream_t stream, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_invoke_get_file(svn_wc_get_file_t _obj, void * baton, char const * path, svn_revnum_t revision, svn_stream_t * stream, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_invoke_dirents_func", _wrap_svn_wc_invoke_dirents_func, METH_VARARGS, (char *)"\n"
- "svn_wc_invoke_dirents_func(svn_wc_dirents_func_t _obj, void baton, char repos_root_url, \n"
- " char repos_relpath, apr_pool_t result_pool, \n"
- " apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_invoke_dirents_func(svn_wc_dirents_func_t _obj, void * baton, char const * repos_root_url, char const * repos_relpath, \n"
+ " apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_invoke_canonicalize_svn_prop_get_file", _wrap_svn_wc_invoke_canonicalize_svn_prop_get_file, METH_VARARGS, (char *)"\n"
- "svn_wc_invoke_canonicalize_svn_prop_get_file(svn_wc_canonicalize_svn_prop_get_file_t _obj, svn_stream_t stream, \n"
- " void baton, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_invoke_canonicalize_svn_prop_get_file(svn_wc_canonicalize_svn_prop_get_file_t _obj, svn_stream_t * stream, void * baton, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_invoke_upgrade_get_repos_info", _wrap_svn_wc_invoke_upgrade_get_repos_info, METH_VARARGS, (char *)"\n"
- "svn_wc_invoke_upgrade_get_repos_info(svn_wc_upgrade_get_repos_info_t _obj, void baton, char url, \n"
- " apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t\n"
+ "svn_wc_invoke_upgrade_get_repos_info(svn_wc_upgrade_get_repos_info_t _obj, void * baton, char const * url, apr_pool_t result_pool, \n"
+ " apr_pool_t scratch_pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_invoke_relocation_validator3", _wrap_svn_wc_invoke_relocation_validator3, METH_VARARGS, (char *)"\n"
- "svn_wc_invoke_relocation_validator3(svn_wc_relocation_validator3_t _obj, void baton, char uuid, \n"
- " char url, char root_url, apr_pool_t pool) -> svn_error_t\n"
+ "svn_wc_invoke_relocation_validator3(svn_wc_relocation_validator3_t _obj, void * baton, char const * uuid, char const * url, \n"
+ " char const * root_url, apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_invoke_relocation_validator2", _wrap_svn_wc_invoke_relocation_validator2, METH_VARARGS, (char *)"\n"
- "svn_wc_invoke_relocation_validator2(svn_wc_relocation_validator2_t _obj, void baton, char uuid, \n"
- " char url, svn_boolean_t root, apr_pool_t pool) -> svn_error_t\n"
- ""},
- { (char *)"svn_wc_invoke_relocation_validator", _wrap_svn_wc_invoke_relocation_validator, METH_VARARGS, (char *)"\n"
- "svn_wc_invoke_relocation_validator(svn_wc_relocation_validator_t _obj, void baton, char uuid, \n"
- " char url) -> svn_error_t\n"
+ "svn_wc_invoke_relocation_validator2(svn_wc_relocation_validator2_t _obj, void * baton, char const * uuid, char const * url, \n"
+ " svn_boolean_t root, apr_pool_t pool) -> svn_error_t\n"
""},
+ { (char *)"svn_wc_invoke_relocation_validator", _wrap_svn_wc_invoke_relocation_validator, METH_VARARGS, (char *)"svn_wc_invoke_relocation_validator(svn_wc_relocation_validator_t _obj, void * baton, char const * uuid, char const * url) -> svn_error_t"},
{ (char *)"svn_changelist_invoke_receiver", _wrap_svn_changelist_invoke_receiver, METH_VARARGS, (char *)"\n"
- "svn_changelist_invoke_receiver(svn_changelist_receiver_t _obj, void baton, char path, \n"
- " char changelist, apr_pool_t pool) -> svn_error_t\n"
+ "svn_changelist_invoke_receiver(svn_changelist_receiver_t _obj, void * baton, char const * path, char const * changelist, \n"
+ " apr_pool_t pool) -> svn_error_t\n"
""},
{ (char *)"svn_wc_external_update_t_swigregister", svn_wc_external_update_t_swigregister, METH_VARARGS, NULL},
{ (char *)"svn_wc_notify_func2_t_swigregister", svn_wc_notify_func2_t_swigregister, METH_VARARGS, NULL},
@@ -40024,7 +40671,7 @@ static PyMethodDef SwigMethods[] = {
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
-static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *|svn_rangelist_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_file_t = {"_p_apr_file_t", "apr_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_hash_t = {"_p_apr_hash_t", "apr_hash_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int32_t = {"_p_apr_int32_t", "apr_int32_t *|time_t *", 0, 0, (void*)0, 0};
@@ -40099,7 +40746,7 @@ static swig_type_info _swigt__p_p_f_p_void_p_q_const__char_p_struct_svn_wc_statu
static swig_type_info _swigt__p_p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t", "svn_wc_status_func3_t *|struct svn_error_t *(**)(void *,char const *,svn_wc_status2_t *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_p_q_const__char_svn_revnum_t_p_svn_stream_t_p_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t = {"_p_p_f_p_void_p_q_const__char_svn_revnum_t_p_svn_stream_t_p_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(**)(void *,char const *,svn_revnum_t,svn_stream_t *,svn_revnum_t *,apr_hash_t **,apr_pool_t *)|svn_wc_get_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void = {"_p_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void", "void (**)(void *,struct svn_wc_notify_t const *,apr_pool_t *)|svn_wc_notify_func2_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_p_svn_checksum_t = {"_p_p_svn_checksum_t", "svn_checksum_t **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_svn_checksum_t = {"_p_p_svn_checksum_t", "struct svn_checksum_t **|svn_checksum_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_delta_editor_t = {"_p_p_svn_delta_editor_t", "struct svn_delta_editor_t **|svn_delta_editor_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_stream_t = {"_p_p_svn_stream_t", "struct svn_stream_t **|svn_stream_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_string_t = {"_p_p_svn_string_t", "struct svn_string_t **|svn_string_t **", 0, 0, (void*)0, 0};
@@ -40124,7 +40771,9 @@ static swig_type_info _swigt__p_svn_auth_iterstate_t = {"_p_svn_auth_iterstate_t
static swig_type_info _swigt__p_svn_auth_provider_object_t = {"_p_svn_auth_provider_object_t", "struct svn_auth_provider_object_t *|svn_auth_provider_object_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_provider_t = {"_p_svn_auth_provider_t", "struct svn_auth_provider_t *|svn_auth_provider_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_ssl_server_cert_info_t = {"_p_svn_auth_ssl_server_cert_info_t", "struct svn_auth_ssl_server_cert_info_t *|svn_auth_ssl_server_cert_info_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "svn_checksum_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_ctx_t = {"_p_svn_checksum_ctx_t", "struct svn_checksum_ctx_t *|svn_checksum_ctx_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "enum svn_checksum_kind_t *|svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "struct svn_checksum_t *|svn_checksum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_commit_info_t = {"_p_svn_commit_info_t", "struct svn_commit_info_t *|svn_commit_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_config_t = {"_p_svn_config_t", "struct svn_config_t *|svn_config_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_delta_editor_t = {"_p_svn_delta_editor_t", "struct svn_delta_editor_t *|svn_delta_editor_t *", 0, 0, (void*)0, 0};
@@ -40148,6 +40797,7 @@ static swig_type_info _swigt__p_svn_opt_revision_t = {"_p_svn_opt_revision_t", "
static swig_type_info _swigt__p_svn_opt_revision_value_t = {"_p_svn_opt_revision_value_t", "union svn_opt_revision_value_t *|svn_opt_revision_value_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_opt_subcommand_desc2_t = {"_p_svn_opt_subcommand_desc2_t", "struct svn_opt_subcommand_desc2_t *|svn_opt_subcommand_desc2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_opt_subcommand_desc_t = {"_p_svn_opt_subcommand_desc_t", "struct svn_opt_subcommand_desc_t *|svn_opt_subcommand_desc_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_prop_inherited_item_t = {"_p_svn_prop_inherited_item_t", "struct svn_prop_inherited_item_t *|svn_prop_inherited_item_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_kind = {"_p_svn_prop_kind", "svn_prop_kind_t *|enum svn_prop_kind *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_ra_callbacks2_t = {"_p_svn_ra_callbacks2_t", "struct svn_ra_callbacks2_t *|svn_ra_callbacks2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_ra_callbacks_t = {"_p_svn_ra_callbacks_t", "struct svn_ra_callbacks_t *|svn_ra_callbacks_t *", 0, 0, (void*)0, 0};
@@ -40165,6 +40815,9 @@ static swig_type_info _swigt__p_svn_txdelta_op_t = {"_p_svn_txdelta_op_t", "stru
static swig_type_info _swigt__p_svn_txdelta_stream_t = {"_p_svn_txdelta_stream_t", "struct svn_txdelta_stream_t *|svn_txdelta_stream_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_txdelta_window_t = {"_p_svn_txdelta_window_t", "struct svn_txdelta_window_t *|svn_txdelta_window_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_checklist_t = {"_p_svn_version_checklist_t", "struct svn_version_checklist_t *|svn_version_checklist_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_linked_lib_t = {"_p_svn_version_ext_linked_lib_t", "struct svn_version_ext_linked_lib_t *|svn_version_ext_linked_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_loaded_lib_t = {"_p_svn_version_ext_loaded_lib_t", "struct svn_version_ext_loaded_lib_t *|svn_version_ext_loaded_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_extended_t = {"_p_svn_version_extended_t", "struct svn_version_extended_t *|svn_version_extended_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_t = {"_p_svn_version_t", "struct svn_version_t *|svn_version_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_wc_adm_access_t = {"_p_svn_wc_adm_access_t", "struct svn_wc_adm_access_t *|svn_wc_adm_access_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_wc_committed_queue_t = {"_p_svn_wc_committed_queue_t", "struct svn_wc_committed_queue_t *|svn_wc_committed_queue_t *", 0, 0, (void*)0, 0};
@@ -40304,6 +40957,8 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_auth_provider_object_t,
&_swigt__p_svn_auth_provider_t,
&_swigt__p_svn_auth_ssl_server_cert_info_t,
+ &_swigt__p_svn_checksum_ctx_t,
+ &_swigt__p_svn_checksum_kind_t,
&_swigt__p_svn_checksum_t,
&_swigt__p_svn_commit_info_t,
&_swigt__p_svn_config_t,
@@ -40328,6 +40983,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_opt_revision_value_t,
&_swigt__p_svn_opt_subcommand_desc2_t,
&_swigt__p_svn_opt_subcommand_desc_t,
+ &_swigt__p_svn_prop_inherited_item_t,
&_swigt__p_svn_prop_kind,
&_swigt__p_svn_ra_callbacks2_t,
&_swigt__p_svn_ra_callbacks_t,
@@ -40345,6 +41001,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_txdelta_stream_t,
&_swigt__p_svn_txdelta_window_t,
&_swigt__p_svn_version_checklist_t,
+ &_swigt__p_svn_version_ext_linked_lib_t,
+ &_swigt__p_svn_version_ext_loaded_lib_t,
+ &_swigt__p_svn_version_extended_t,
&_swigt__p_svn_version_t,
&_swigt__p_svn_wc_adm_access_t,
&_swigt__p_svn_wc_committed_queue_t,
@@ -40484,6 +41143,8 @@ static swig_cast_info _swigc__p_svn_auth_iterstate_t[] = { {&_swigt__p_svn_auth
static swig_cast_info _swigc__p_svn_auth_provider_object_t[] = { {&_swigt__p_svn_auth_provider_object_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_provider_t[] = { {&_swigt__p_svn_auth_provider_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_ssl_server_cert_info_t[] = { {&_swigt__p_svn_auth_ssl_server_cert_info_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_ctx_t[] = { {&_swigt__p_svn_checksum_ctx_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_kind_t[] = { {&_swigt__p_svn_checksum_kind_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_checksum_t[] = { {&_swigt__p_svn_checksum_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_commit_info_t[] = { {&_swigt__p_svn_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_config_t[] = { {&_swigt__p_svn_config_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -40508,6 +41169,7 @@ static swig_cast_info _swigc__p_svn_opt_revision_t[] = { {&_swigt__p_svn_opt_re
static swig_cast_info _swigc__p_svn_opt_revision_value_t[] = { {&_swigt__p_svn_opt_revision_value_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_opt_subcommand_desc2_t[] = { {&_swigt__p_svn_opt_subcommand_desc2_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_opt_subcommand_desc_t[] = { {&_swigt__p_svn_opt_subcommand_desc_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_prop_inherited_item_t[] = { {&_swigt__p_svn_prop_inherited_item_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_kind[] = { {&_swigt__p_svn_prop_kind, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_ra_callbacks2_t[] = { {&_swigt__p_svn_ra_callbacks2_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_ra_callbacks_t[] = { {&_swigt__p_svn_ra_callbacks_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -40525,6 +41187,9 @@ static swig_cast_info _swigc__p_svn_txdelta_op_t[] = { {&_swigt__p_svn_txdelta_
static swig_cast_info _swigc__p_svn_txdelta_stream_t[] = { {&_swigt__p_svn_txdelta_stream_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_txdelta_window_t[] = { {&_swigt__p_svn_txdelta_window_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_checklist_t[] = { {&_swigt__p_svn_version_checklist_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_linked_lib_t[] = { {&_swigt__p_svn_version_ext_linked_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_loaded_lib_t[] = { {&_swigt__p_svn_version_ext_loaded_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_extended_t[] = { {&_swigt__p_svn_version_extended_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_t[] = { {&_swigt__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_wc_adm_access_t[] = { {&_swigt__p_svn_wc_adm_access_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_wc_committed_queue_t[] = { {&_swigt__p_svn_wc_committed_queue_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -40664,6 +41329,8 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_auth_provider_object_t,
_swigc__p_svn_auth_provider_t,
_swigc__p_svn_auth_ssl_server_cert_info_t,
+ _swigc__p_svn_checksum_ctx_t,
+ _swigc__p_svn_checksum_kind_t,
_swigc__p_svn_checksum_t,
_swigc__p_svn_commit_info_t,
_swigc__p_svn_config_t,
@@ -40688,6 +41355,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_opt_revision_value_t,
_swigc__p_svn_opt_subcommand_desc2_t,
_swigc__p_svn_opt_subcommand_desc_t,
+ _swigc__p_svn_prop_inherited_item_t,
_swigc__p_svn_prop_kind,
_swigc__p_svn_ra_callbacks2_t,
_swigc__p_svn_ra_callbacks_t,
@@ -40705,6 +41373,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_txdelta_stream_t,
_swigc__p_svn_txdelta_window_t,
_swigc__p_svn_version_checklist_t,
+ _swigc__p_svn_version_ext_linked_lib_t,
+ _swigc__p_svn_version_ext_loaded_lib_t,
+ _swigc__p_svn_version_extended_t,
_swigc__p_svn_version_t,
_swigc__p_svn_wc_adm_access_t,
_swigc__p_svn_wc_committed_queue_t,
@@ -40812,8 +41483,6 @@ SWIG_InitializeModule(void *clientdata) {
swig_module_info *module_head, *iter;
int found, init;
- clientdata = clientdata;
-
/* check to see if the circular list has been setup, if not, set it up */
if (swig_module.next==0) {
/* Initialize the swig_module */
@@ -41386,6 +42055,7 @@ SWIG_init(void) {
m = Py_InitModule((char *) SWIG_name, SwigMethods);
#endif
md = d = PyModule_GetDict(m);
+ (void)md;
SWIG_InitializeModule(0);
@@ -41503,6 +42173,13 @@ SWIG_init(void) {
SWIG_Python_SetConstant(d, "svn_wc_notify_failed_locked",SWIG_From_long((long)(svn_wc_notify_failed_locked)));
SWIG_Python_SetConstant(d, "svn_wc_notify_failed_forbidden_by_server",SWIG_From_long((long)(svn_wc_notify_failed_forbidden_by_server)));
SWIG_Python_SetConstant(d, "svn_wc_notify_skip_conflicted",SWIG_From_long((long)(svn_wc_notify_skip_conflicted)));
+ SWIG_Python_SetConstant(d, "svn_wc_notify_update_broken_lock",SWIG_From_long((long)(svn_wc_notify_update_broken_lock)));
+ SWIG_Python_SetConstant(d, "svn_wc_notify_failed_obstruction",SWIG_From_long((long)(svn_wc_notify_failed_obstruction)));
+ SWIG_Python_SetConstant(d, "svn_wc_notify_conflict_resolver_starting",SWIG_From_long((long)(svn_wc_notify_conflict_resolver_starting)));
+ SWIG_Python_SetConstant(d, "svn_wc_notify_conflict_resolver_done",SWIG_From_long((long)(svn_wc_notify_conflict_resolver_done)));
+ SWIG_Python_SetConstant(d, "svn_wc_notify_left_local_modifications",SWIG_From_long((long)(svn_wc_notify_left_local_modifications)));
+ SWIG_Python_SetConstant(d, "svn_wc_notify_foreign_copy_begin",SWIG_From_long((long)(svn_wc_notify_foreign_copy_begin)));
+ SWIG_Python_SetConstant(d, "svn_wc_notify_move_broken",SWIG_From_long((long)(svn_wc_notify_move_broken)));
SWIG_Python_SetConstant(d, "svn_wc_notify_state_inapplicable",SWIG_From_long((long)(svn_wc_notify_state_inapplicable)));
SWIG_Python_SetConstant(d, "svn_wc_notify_state_unknown",SWIG_From_long((long)(svn_wc_notify_state_unknown)));
SWIG_Python_SetConstant(d, "svn_wc_notify_state_unchanged",SWIG_From_long((long)(svn_wc_notify_state_unchanged)));
@@ -41528,6 +42205,8 @@ SWIG_init(void) {
SWIG_Python_SetConstant(d, "svn_wc_conflict_reason_unversioned",SWIG_From_long((long)(svn_wc_conflict_reason_unversioned)));
SWIG_Python_SetConstant(d, "svn_wc_conflict_reason_added",SWIG_From_long((long)(svn_wc_conflict_reason_added)));
SWIG_Python_SetConstant(d, "svn_wc_conflict_reason_replaced",SWIG_From_long((long)(svn_wc_conflict_reason_replaced)));
+ SWIG_Python_SetConstant(d, "svn_wc_conflict_reason_moved_away",SWIG_From_long((long)(svn_wc_conflict_reason_moved_away)));
+ SWIG_Python_SetConstant(d, "svn_wc_conflict_reason_moved_here",SWIG_From_long((long)(svn_wc_conflict_reason_moved_here)));
SWIG_Python_SetConstant(d, "svn_wc_conflict_kind_text",SWIG_From_long((long)(svn_wc_conflict_kind_text)));
SWIG_Python_SetConstant(d, "svn_wc_conflict_kind_property",SWIG_From_long((long)(svn_wc_conflict_kind_property)));
SWIG_Python_SetConstant(d, "svn_wc_conflict_kind_tree",SWIG_From_long((long)(svn_wc_conflict_kind_tree)));
@@ -41542,6 +42221,7 @@ SWIG_init(void) {
SWIG_Python_SetConstant(d, "svn_wc_conflict_choose_theirs_conflict",SWIG_From_long((long)(svn_wc_conflict_choose_theirs_conflict)));
SWIG_Python_SetConstant(d, "svn_wc_conflict_choose_mine_conflict",SWIG_From_long((long)(svn_wc_conflict_choose_mine_conflict)));
SWIG_Python_SetConstant(d, "svn_wc_conflict_choose_merged",SWIG_From_long((long)(svn_wc_conflict_choose_merged)));
+ SWIG_Python_SetConstant(d, "svn_wc_conflict_choose_unspecified",SWIG_From_long((long)(svn_wc_conflict_choose_unspecified)));
SWIG_Python_SetConstant(d, "svn_wc_schedule_normal",SWIG_From_long((long)(svn_wc_schedule_normal)));
SWIG_Python_SetConstant(d, "svn_wc_schedule_add",SWIG_From_long((long)(svn_wc_schedule_add)));
SWIG_Python_SetConstant(d, "svn_wc_schedule_delete",SWIG_From_long((long)(svn_wc_schedule_delete)));
diff --git a/subversion/bindings/swig/python/tests/checksum.py b/subversion/bindings/swig/python/tests/checksum.py
new file mode 100644
index 0000000..83da28c
--- /dev/null
+++ b/subversion/bindings/swig/python/tests/checksum.py
@@ -0,0 +1,48 @@
+#
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+#
+import unittest, setup_path
+import svn.core
+
+class ChecksumTestCases(unittest.TestCase):
+ def test_checksum(self):
+ # Checking primarily the return type for the svn_checksum_create
+ # function
+ kind, expected_length = svn.core.svn_checksum_md5, 128/8
+ val = svn.core.svn_checksum_create(kind)
+ check_val = svn.core.svn_checksum_to_cstring_display(val)
+
+ self.assertTrue(isinstance(check_val, str),
+ "Type of digest not string")
+ self.assertEqual(len(check_val), 2*expected_length,
+ "Length of digest does not match kind")
+ self.assertEqual(int(check_val), 0,
+ "Value of initialized digest is not 0")
+
+def suite():
+ return unittest.defaultTestLoader.loadTestsFromTestCase(ChecksumTestCases)
+
+if __name__ == '__main__':
+ runner = unittest.TextTestRunner()
+ runner.run(suite())
+
+
+
+
diff --git a/subversion/bindings/swig/python/tests/client.py b/subversion/bindings/swig/python/tests/client.py
index 0905557..07fb773 100644
--- a/subversion/bindings/swig/python/tests/client.py
+++ b/subversion/bindings/swig/python/tests/client.py
@@ -382,6 +382,124 @@ class SubversionClientTestCase(unittest.TestCase):
not isinstance(x, core.svn_auth_provider_object_t),
providers))
+ def testGnomeKeyring(self):
+ if not hasattr(core, 'svn_auth_set_gnome_keyring_unlock_prompt_func'):
+ # gnome-keying not compiled in, do nothing
+ return
+
+ # This tests setting the gnome-keyring unlock prompt function as an
+ # auth baton parameter. It doesn't actually call gnome-keyring
+ # stuff, since that would require having a gnome-keyring running. We
+ # just test if this doesn't error out, there's not even a return
+ # value to test.
+ def prompt_func(realm_string, pool):
+ return "Foo"
+
+ core.svn_auth_set_gnome_keyring_unlock_prompt_func(self.client_ctx.auth_baton, prompt_func)
+
+ def proplist_receiver_trunk(self, path, props, iprops, pool):
+ self.assertEquals(props['svn:global-ignores'], '*.q\n')
+ self.proplist_receiver_trunk_calls += 1
+
+ def proplist_receiver_dir1(self, path, props, iprops, pool):
+ self.assertEquals(iprops[self.proplist_receiver_dir1_key],
+ {'svn:global-ignores':'*.q\n'})
+ self.proplist_receiver_dir1_calls += 1
+
+ def test_inherited_props(self):
+ """Test inherited props"""
+
+ trunk_url = self.repos_uri + '/trunk'
+ client.propset_remote('svn:global-ignores', '*.q', trunk_url,
+ False, 12, {}, None, self.client_ctx)
+
+ head = core.svn_opt_revision_t()
+ head.kind = core.svn_opt_revision_head
+ props, iprops, rev = client.propget5('svn:global-ignores', trunk_url,
+ head, head, core.svn_depth_infinity,
+ None, self.client_ctx)
+ self.assertEquals(props[trunk_url], '*.q\n')
+
+ dir1_url = trunk_url + '/dir1'
+ props, iprops, rev = client.propget5('svn:global-ignores', dir1_url,
+ head, head, core.svn_depth_infinity,
+ None, self.client_ctx)
+ self.assertEquals(iprops[trunk_url], {'svn:global-ignores':'*.q\n'})
+
+ self.proplist_receiver_trunk_calls = 0
+ client.proplist4(trunk_url, head, head, core.svn_depth_empty, None, True,
+ self.proplist_receiver_trunk, self.client_ctx)
+ self.assertEquals(self.proplist_receiver_trunk_calls, 1)
+
+ self.proplist_receiver_dir1_calls = 0
+ self.proplist_receiver_dir1_key = trunk_url
+ client.proplist4(dir1_url, head, head, core.svn_depth_empty, None, True,
+ self.proplist_receiver_dir1, self.client_ctx)
+ self.assertEquals(self.proplist_receiver_dir1_calls, 1)
+
+ def test_update4(self):
+ """Test update and the notify function callbacks"""
+
+ rev = core.svn_opt_revision_t()
+ rev.kind = core.svn_opt_revision_number
+ rev.value.number = 0
+
+ path = self.temper.alloc_empty_dir('-update')
+
+ self.assertRaises(ValueError, client.checkout2,
+ self.repos_uri, path, None, None, True, True,
+ self.client_ctx)
+
+ client.checkout2(self.repos_uri, path, rev, rev, True, True,
+ self.client_ctx)
+
+ def notify_func(path, action, kind, mime_type, content_state, prop_state, rev):
+ self.notified_paths.append(path)
+
+ self.client_ctx.notify_func = client.svn_swig_py_notify_func
+ self.client_ctx.notify_baton = notify_func
+ rev.value.number = 1
+ self.notified_paths = []
+ client.update4((path,), rev, core.svn_depth_unknown, True, False, False,
+ False, False, self.client_ctx)
+ expected_paths = [
+ path,
+ os.path.join(path, 'branches'),
+ os.path.join(path, 'tags'),
+ os.path.join(path, 'trunk'),
+ path,
+ path
+ ]
+ # All normal subversion apis process paths in Subversion's canonical format,
+ # which isn't the platform specific format
+ expected_paths = [x.replace(os.path.sep, '/') for x in expected_paths]
+ self.notified_paths.sort()
+ expected_paths.sort()
+
+ self.assertEquals(self.notified_paths, expected_paths)
+
+ def notify_func2(notify, pool):
+ self.notified_paths.append(notify.path)
+
+ self.client_ctx.notify_func2 = client.svn_swig_py_notify_func2
+ self.client_ctx.notify_baton2 = notify_func2
+ rev.value.number = 2
+ self.notified_paths = []
+ expected_paths = [
+ path,
+ os.path.join(path, 'trunk', 'README.txt'),
+ os.path.join(path, 'trunk'),
+ path,
+ path
+ ]
+ expected_paths = [x.replace(os.path.sep, '/') for x in expected_paths]
+ client.update4((path,), rev, core.svn_depth_unknown, True, False, False,
+ False, False, self.client_ctx)
+ self.notified_paths.sort()
+ expected_paths.sort()
+ self.assertEquals(self.notified_paths, expected_paths)
+
+
def suite():
return unittest.defaultTestLoader.loadTestsFromTestCase(
SubversionClientTestCase)
diff --git a/subversion/bindings/swig/python/tests/core.py b/subversion/bindings/swig/python/tests/core.py
index 68eacfb..ab7d01f 100644
--- a/subversion/bindings/swig/python/tests/core.py
+++ b/subversion/bindings/swig/python/tests/core.py
@@ -97,7 +97,7 @@ class SubversionCoreTestCase(unittest.TestCase):
# will be passed through.
rec.e = svn.core.SubversionException("No fields except message.")
# e.apr_err is None but should be an int
- self.assertRaises(TypeError, svn.client.info2, args)
+ self.assertRaises(TypeError, svn.client.info2, *args)
finally:
# This would happen without the finally block as well, but we expliticly
# order the operations so that the cleanup is not hindered by any open
@@ -105,6 +105,71 @@ class SubversionCoreTestCase(unittest.TestCase):
del ctx
t.cleanup()
+ def test_config_enumerate2(self):
+ cfg = svn.core.svn_config_create(False)
+ entries = {
+ 'one': 'one-value',
+ 'two': 'two-value',
+ 'three': 'three-value'
+ }
+
+ for (name, value) in entries.iteritems():
+ svn.core.svn_config_set(cfg, "section", name, value)
+
+ received_entries = {}
+ def enumerator(name, value, pool):
+ received_entries[name] = value
+ return len(received_entries) < 2
+
+ svn.core.svn_config_enumerate2(cfg, "section", enumerator)
+
+ self.assertEqual(len(received_entries), 2)
+ for (name, value) in received_entries.iteritems():
+ self.assert_(name in entries)
+ self.assertEqual(value, entries[name])
+
+ def test_config_enumerate2_exception(self):
+ cfg = svn.core.svn_config_create(False)
+ svn.core.svn_config_set(cfg, "section", "one", "one-value")
+ svn.core.svn_config_set(cfg, "section", "two", "two-value")
+
+ def enumerator(name, value, pool):
+ raise Exception
+
+ # the exception will be swallowed, but enumeration must be stopped
+ self.assertEqual(
+ svn.core.svn_config_enumerate2(cfg, "section", enumerator), 1)
+
+ def test_config_enumerate_sections2(self):
+ cfg = svn.core.svn_config_create(False)
+ sections = ['section-one', 'section-two', 'section-three']
+
+ for section in sections:
+ svn.core.svn_config_set(cfg, section, "name", "value")
+
+ received_sections = []
+ def enumerator(section, pool):
+ received_sections.append(section)
+ return len(received_sections) < 2
+
+ svn.core.svn_config_enumerate_sections2(cfg, enumerator)
+
+ self.assertEqual(len(received_sections), 2)
+ for section in received_sections:
+ self.assert_(section in sections)
+
+ def test_config_enumerate_sections2_exception(self):
+ cfg = svn.core.svn_config_create(False)
+ svn.core.svn_config_set(cfg, "section-one", "name", "value")
+ svn.core.svn_config_set(cfg, "section-two", "name", "value")
+
+ def enumerator(section, pool):
+ raise Exception
+
+ # the exception will be swallowed, but enumeration must be stopped
+ self.assertEqual(
+ svn.core.svn_config_enumerate_sections2(cfg, enumerator), 1)
+
def suite():
return unittest.defaultTestLoader.loadTestsFromTestCase(
SubversionCoreTestCase)
diff --git a/subversion/bindings/swig/python/tests/pool.py b/subversion/bindings/swig/python/tests/pool.py
index 3454dc1..bd67987 100644
--- a/subversion/bindings/swig/python/tests/pool.py
+++ b/subversion/bindings/swig/python/tests/pool.py
@@ -56,17 +56,7 @@ class PoolTestCase(unittest.TestCase):
def test_object_hash_struct_members(self):
"""Check that struct members which are hashes of objects work correctly"""
- # Get an empty config
- (cfg_fd, cfg_name) = tempfile.mkstemp(prefix="conf-")
- os.close(cfg_fd)
-
- try:
- cfg = svn.core.svn_config_read(
- svn.core.svn_dirent_internal_style(cfg_name),
- False)
- finally:
- os.remove(cfg_name)
-
+ cfg = svn.core.svn_config_create(False)
client_ctx = svn.client.svn_client_create_context()
category = svn.core.SVN_CONFIG_CATEGORY_SERVERS
client_ctx.config = { category: cfg }
@@ -195,10 +185,10 @@ class PoolTestCase(unittest.TestCase):
self.assertNone(anonymous_pool_ref())
# Try to cause a segfault using apr_terminate
- apr_terminate()
- apr_initialize()
- apr_terminate()
- apr_terminate()
+ svn.core.apr_terminate()
+ svn.core.apr_initialize()
+ svn.core.apr_terminate()
+ svn.core.apr_terminate()
# Destroy the application pool
svn_pool_destroy(libsvn.core.application_pool)
diff --git a/subversion/bindings/swig/python/tests/ra.py b/subversion/bindings/swig/python/tests/ra.py
index e611428..d38bbb8 100644
--- a/subversion/bindings/swig/python/tests/ra.py
+++ b/subversion/bindings/swig/python/tests/ra.py
@@ -375,8 +375,9 @@ class SubversionRepositoryAccessTestCase(unittest.TestCase):
reporter.finish_report(reporter_baton)
def test_namestring(self):
- # Only ra-{neon,serf} support this right now.
- if self.repos_uri.startswith('http'):
+ # Only ra-{svn,serf} support this right now.
+ uri = self.repos_uri
+ if uri.startswith('http') or uri.startswith('svn'):
called = [False]
def cb(pool):
called[0] = True
diff --git a/subversion/bindings/swig/python/tests/repository.py b/subversion/bindings/swig/python/tests/repository.py
index 8c8f55b..68e6c91 100644
--- a/subversion/bindings/swig/python/tests/repository.py
+++ b/subversion/bindings/swig/python/tests/repository.py
@@ -54,7 +54,7 @@ class SubversionRepositoryTestCase(unittest.TestCase):
def setUp(self):
"""Load a Subversion repository"""
self.temper = utils.Temper()
- (self.repos, _, _) = self.temper.alloc_known_repo(
+ (self.repos, self.repos_path, _) = self.temper.alloc_known_repo(
'trac/versioncontrol/tests/svnrepos.dump', suffix='-repository')
self.fs = repos.fs(self.repos)
self.rev = fs.youngest_rev(self.fs)
@@ -198,6 +198,16 @@ class SubversionRepositoryTestCase(unittest.TestCase):
_authz_callback),
"Youngest revision")
+ def freeze_body(self, pool):
+ self.freeze_invoked += 1
+
+ def test_freeze(self):
+ """Test repository freeze"""
+
+ self.freeze_invoked = 0
+ repos.freeze([self.repos_path], self.freeze_body)
+ self.assertEqual(self.freeze_invoked, 1)
+
def suite():
return unittest.defaultTestLoader.loadTestsFromTestCase(
SubversionRepositoryTestCase)
diff --git a/subversion/bindings/swig/python/tests/run_all.py b/subversion/bindings/swig/python/tests/run_all.py
index 9118f00..d382e14 100644
--- a/subversion/bindings/swig/python/tests/run_all.py
+++ b/subversion/bindings/swig/python/tests/run_all.py
@@ -19,8 +19,8 @@
#
#
import unittest, setup_path
-import mergeinfo, core, client, delta, pool, ra, wc, repository, auth, \
- trac.versioncontrol.tests
+import mergeinfo, core, client, delta, checksum, pool, ra, wc, repository, \
+ auth, trac.versioncontrol.tests
# Run all tests
@@ -28,6 +28,7 @@ def suite():
"""Run all tests"""
s = unittest.TestSuite()
s.addTest(core.suite())
+ s.addTest(checksum.suite())
s.addTest(mergeinfo.suite())
s.addTest(client.suite())
s.addTest(delta.suite())
diff --git a/subversion/bindings/swig/python/wc.py b/subversion/bindings/swig/python/wc.py
index 9b0eecb..54dc5ad 100644
--- a/subversion/bindings/swig/python/wc.py
+++ b/subversion/bindings/swig/python/wc.py
@@ -1,5 +1,5 @@
# This file was automatically generated by SWIG (http://www.swig.org).
-# Version 2.0.4
+# Version 2.0.9
#
# Do not make changes to this file unless you know what you are doing--modify
# the SWIG interface file instead.
@@ -84,12 +84,12 @@ def _assert_valid_deep(value):
if hasattr(value, "assert_valid"):
value.assert_valid()
-import core
-import delta
-import ra
+import libsvn.core
+import libsvn.delta
+import libsvn.ra
def svn_wc_version():
- """svn_wc_version() -> svn_version_t"""
+ """svn_wc_version() -> svn_version_t const *"""
return _wc.svn_wc_version()
SVN_WC_TRANSLATE_FROM_NF = _wc.SVN_WC_TRANSLATE_FROM_NF
SVN_WC_TRANSLATE_TO_NF = _wc.SVN_WC_TRANSLATE_TO_NF
@@ -99,145 +99,142 @@ SVN_WC_TRANSLATE_FORCE_COPY = _wc.SVN_WC_TRANSLATE_FORCE_COPY
SVN_WC_TRANSLATE_USE_GLOBAL_TMP = _wc.SVN_WC_TRANSLATE_USE_GLOBAL_TMP
def svn_wc_context_create(*args):
- """svn_wc_context_create(svn_config_t config, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
+ """svn_wc_context_create(svn_config_t const * config, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
return _wc.svn_wc_context_create(*args)
def svn_wc_context_destroy(*args):
- """svn_wc_context_destroy(svn_wc_context_t wc_ctx) -> svn_error_t"""
+ """svn_wc_context_destroy(svn_wc_context_t * wc_ctx) -> svn_error_t"""
return _wc.svn_wc_context_destroy(*args)
def svn_wc_adm_open3(*args):
"""
- svn_wc_adm_open3(svn_wc_adm_access_t associated, char path, svn_boolean_t write_lock,
- int levels_to_lock, svn_cancel_func_t cancel_func,
- apr_pool_t pool) -> svn_error_t
+ svn_wc_adm_open3(svn_wc_adm_access_t * associated, char const * path, svn_boolean_t write_lock, int levels_to_lock,
+ svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_adm_open3(*args)
def svn_wc_adm_open2(*args):
"""
- svn_wc_adm_open2(svn_wc_adm_access_t associated, char path, svn_boolean_t write_lock,
- int levels_to_lock, apr_pool_t pool) -> svn_error_t
+ svn_wc_adm_open2(svn_wc_adm_access_t * associated, char const * path, svn_boolean_t write_lock, int levels_to_lock,
+ apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_adm_open2(*args)
def svn_wc_adm_open(*args):
"""
- svn_wc_adm_open(svn_wc_adm_access_t associated, char path, svn_boolean_t write_lock,
- svn_boolean_t tree_lock, apr_pool_t pool) -> svn_error_t
+ svn_wc_adm_open(svn_wc_adm_access_t * associated, char const * path, svn_boolean_t write_lock, svn_boolean_t tree_lock,
+ apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_adm_open(*args)
def svn_wc_adm_probe_open3(*args):
"""
- svn_wc_adm_probe_open3(svn_wc_adm_access_t associated, char path, svn_boolean_t write_lock,
- int levels_to_lock, svn_cancel_func_t cancel_func,
- apr_pool_t pool) -> svn_error_t
+ svn_wc_adm_probe_open3(svn_wc_adm_access_t * associated, char const * path, svn_boolean_t write_lock, int levels_to_lock,
+ svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_adm_probe_open3(*args)
def svn_wc_adm_probe_open2(*args):
"""
- svn_wc_adm_probe_open2(svn_wc_adm_access_t associated, char path, svn_boolean_t write_lock,
- int levels_to_lock, apr_pool_t pool) -> svn_error_t
+ svn_wc_adm_probe_open2(svn_wc_adm_access_t * associated, char const * path, svn_boolean_t write_lock, int levels_to_lock,
+ apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_adm_probe_open2(*args)
def svn_wc_adm_probe_open(*args):
"""
- svn_wc_adm_probe_open(svn_wc_adm_access_t associated, char path, svn_boolean_t write_lock,
- svn_boolean_t tree_lock, apr_pool_t pool) -> svn_error_t
+ svn_wc_adm_probe_open(svn_wc_adm_access_t * associated, char const * path, svn_boolean_t write_lock, svn_boolean_t tree_lock,
+ apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_adm_probe_open(*args)
def svn_wc_adm_open_anchor(*args):
"""
- svn_wc_adm_open_anchor(char path, svn_boolean_t write_lock, int levels_to_lock,
- svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
+ svn_wc_adm_open_anchor(char const * path, svn_boolean_t write_lock, int levels_to_lock, svn_cancel_func_t cancel_func,
+ apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_adm_open_anchor(*args)
def svn_wc_adm_retrieve(*args):
- """svn_wc_adm_retrieve(svn_wc_adm_access_t associated, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_wc_adm_retrieve(svn_wc_adm_access_t * associated, char const * path, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_adm_retrieve(*args)
def svn_wc_adm_probe_retrieve(*args):
- """svn_wc_adm_probe_retrieve(svn_wc_adm_access_t associated, char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_wc_adm_probe_retrieve(svn_wc_adm_access_t * associated, char const * path, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_adm_probe_retrieve(*args)
def svn_wc_adm_probe_try3(*args):
"""
- svn_wc_adm_probe_try3(svn_wc_adm_access_t associated, char path, svn_boolean_t write_lock,
- int levels_to_lock, svn_cancel_func_t cancel_func,
- apr_pool_t pool) -> svn_error_t
+ svn_wc_adm_probe_try3(svn_wc_adm_access_t * associated, char const * path, svn_boolean_t write_lock, int levels_to_lock,
+ svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_adm_probe_try3(*args)
def svn_wc_adm_probe_try2(*args):
"""
- svn_wc_adm_probe_try2(svn_wc_adm_access_t associated, char path, svn_boolean_t write_lock,
- int levels_to_lock, apr_pool_t pool) -> svn_error_t
+ svn_wc_adm_probe_try2(svn_wc_adm_access_t * associated, char const * path, svn_boolean_t write_lock, int levels_to_lock,
+ apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_adm_probe_try2(*args)
def svn_wc_adm_probe_try(*args):
"""
- svn_wc_adm_probe_try(svn_wc_adm_access_t associated, char path, svn_boolean_t write_lock,
- svn_boolean_t tree_lock, apr_pool_t pool) -> svn_error_t
+ svn_wc_adm_probe_try(svn_wc_adm_access_t * associated, char const * path, svn_boolean_t write_lock, svn_boolean_t tree_lock,
+ apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_adm_probe_try(*args)
def svn_wc_adm_close2(*args):
- """svn_wc_adm_close2(svn_wc_adm_access_t adm_access, apr_pool_t scratch_pool) -> svn_error_t"""
+ """svn_wc_adm_close2(svn_wc_adm_access_t * adm_access, apr_pool_t scratch_pool) -> svn_error_t"""
return _wc.svn_wc_adm_close2(*args)
def svn_wc_adm_close(*args):
- """svn_wc_adm_close(svn_wc_adm_access_t adm_access) -> svn_error_t"""
+ """svn_wc_adm_close(svn_wc_adm_access_t * adm_access) -> svn_error_t"""
return _wc.svn_wc_adm_close(*args)
def svn_wc_adm_access_path(*args):
- """svn_wc_adm_access_path(svn_wc_adm_access_t adm_access) -> char"""
+ """svn_wc_adm_access_path(svn_wc_adm_access_t const * adm_access) -> char const *"""
return _wc.svn_wc_adm_access_path(*args)
def svn_wc_adm_access_pool(*args):
- """svn_wc_adm_access_pool(svn_wc_adm_access_t adm_access) -> apr_pool_t"""
+ """svn_wc_adm_access_pool(svn_wc_adm_access_t const * adm_access) -> apr_pool_t"""
return _wc.svn_wc_adm_access_pool(*args)
def svn_wc_adm_locked(*args):
- """svn_wc_adm_locked(svn_wc_adm_access_t adm_access) -> svn_boolean_t"""
+ """svn_wc_adm_locked(svn_wc_adm_access_t const * adm_access) -> svn_boolean_t"""
return _wc.svn_wc_adm_locked(*args)
def svn_wc_locked2(*args):
- """svn_wc_locked2(svn_wc_context_t wc_ctx, char local_abspath, apr_pool_t scratch_pool) -> svn_error_t"""
+ """svn_wc_locked2(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_pool_t scratch_pool) -> svn_error_t"""
return _wc.svn_wc_locked2(*args)
def svn_wc_locked(*args):
- """svn_wc_locked(char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_wc_locked(char const * path, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_locked(*args)
SVN_WC_ADM_DIR_NAME = _wc.SVN_WC_ADM_DIR_NAME
def svn_wc_is_adm_dir(*args):
- """svn_wc_is_adm_dir(char name, apr_pool_t pool) -> svn_boolean_t"""
+ """svn_wc_is_adm_dir(char const * name, apr_pool_t pool) -> svn_boolean_t"""
return _wc.svn_wc_is_adm_dir(*args)
def svn_wc_get_adm_dir(*args):
- """svn_wc_get_adm_dir(apr_pool_t pool) -> char"""
+ """svn_wc_get_adm_dir(apr_pool_t pool) -> char const *"""
return _wc.svn_wc_get_adm_dir(*args)
def svn_wc_set_adm_dir(*args):
- """svn_wc_set_adm_dir(char name, apr_pool_t pool) -> svn_error_t"""
+ """svn_wc_set_adm_dir(char const * name, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_set_adm_dir(*args)
def svn_wc_init_traversal_info(*args):
- """svn_wc_init_traversal_info(apr_pool_t pool) -> svn_wc_traversal_info_t"""
+ """svn_wc_init_traversal_info(apr_pool_t pool) -> svn_wc_traversal_info_t *"""
return _wc.svn_wc_init_traversal_info(*args)
def svn_wc_edited_externals(*args):
- """svn_wc_edited_externals(svn_wc_traversal_info_t traversal_info)"""
+ """svn_wc_edited_externals(svn_wc_traversal_info_t * traversal_info)"""
return _wc.svn_wc_edited_externals(*args)
def svn_wc_traversed_depths(*args):
- """svn_wc_traversed_depths(svn_wc_traversal_info_t traversal_info)"""
+ """svn_wc_traversed_depths(svn_wc_traversal_info_t * traversal_info)"""
return _wc.svn_wc_traversed_depths(*args)
class svn_wc_external_item2_t:
"""Proxy of C svn_wc_external_item2_t struct"""
@@ -297,7 +294,7 @@ class svn_wc_external_item2_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_wc_external_item2_t"""
+ """__init__(svn_wc_external_item2_t self) -> svn_wc_external_item2_t"""
this = _wc.new_svn_wc_external_item2_t()
try: self.this.append(this)
except: self.this = this
@@ -307,6 +304,10 @@ svn_wc_external_item2_t_swigregister = _wc.svn_wc_external_item2_t_swigregister
svn_wc_external_item2_t_swigregister(svn_wc_external_item2_t)
+def svn_wc_external_item2_create(*args):
+ """svn_wc_external_item2_create(apr_pool_t pool) -> svn_error_t"""
+ return _wc.svn_wc_external_item2_create(*args)
+
def svn_wc_external_item_create(*args):
"""svn_wc_external_item_create(apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_external_item_create(*args)
@@ -370,7 +371,7 @@ class svn_wc_external_item_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_wc_external_item_t"""
+ """__init__(svn_wc_external_item_t self) -> svn_wc_external_item_t"""
this = _wc.new_svn_wc_external_item_t()
try: self.this.append(this)
except: self.this = this
@@ -386,17 +387,17 @@ def svn_wc_external_item_dup(*args):
def svn_wc_parse_externals_description3(*args):
"""
- svn_wc_parse_externals_description3(char parent_directory, char desc, svn_boolean_t canonicalize_url,
+ svn_wc_parse_externals_description3(char const * parent_directory, char const * desc, svn_boolean_t canonicalize_url,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_parse_externals_description3(*args)
def svn_wc_parse_externals_description2(*args):
- """svn_wc_parse_externals_description2(char parent_directory, char desc, apr_pool_t pool) -> svn_error_t"""
+ """svn_wc_parse_externals_description2(char const * parent_directory, char const * desc, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_parse_externals_description2(*args)
def svn_wc_parse_externals_description(*args):
- """svn_wc_parse_externals_description(char parent_directory, char desc, apr_pool_t pool) -> svn_error_t"""
+ """svn_wc_parse_externals_description(char const * parent_directory, char const * desc, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_parse_externals_description(*args)
svn_wc_notify_add = _wc.svn_wc_notify_add
svn_wc_notify_copy = _wc.svn_wc_notify_copy
@@ -467,6 +468,13 @@ svn_wc_notify_failed_no_parent = _wc.svn_wc_notify_failed_no_parent
svn_wc_notify_failed_locked = _wc.svn_wc_notify_failed_locked
svn_wc_notify_failed_forbidden_by_server = _wc.svn_wc_notify_failed_forbidden_by_server
svn_wc_notify_skip_conflicted = _wc.svn_wc_notify_skip_conflicted
+svn_wc_notify_update_broken_lock = _wc.svn_wc_notify_update_broken_lock
+svn_wc_notify_failed_obstruction = _wc.svn_wc_notify_failed_obstruction
+svn_wc_notify_conflict_resolver_starting = _wc.svn_wc_notify_conflict_resolver_starting
+svn_wc_notify_conflict_resolver_done = _wc.svn_wc_notify_conflict_resolver_done
+svn_wc_notify_left_local_modifications = _wc.svn_wc_notify_left_local_modifications
+svn_wc_notify_foreign_copy_begin = _wc.svn_wc_notify_foreign_copy_begin
+svn_wc_notify_move_broken = _wc.svn_wc_notify_move_broken
svn_wc_notify_state_inapplicable = _wc.svn_wc_notify_state_inapplicable
svn_wc_notify_state_unknown = _wc.svn_wc_notify_state_unknown
svn_wc_notify_state_unchanged = _wc.svn_wc_notify_state_unchanged
@@ -577,7 +585,7 @@ class svn_wc_notify_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_wc_notify_t"""
+ """__init__(svn_wc_notify_t self) -> svn_wc_notify_t"""
this = _wc.new_svn_wc_notify_t()
try: self.this.append(this)
except: self.this = this
@@ -588,11 +596,11 @@ svn_wc_notify_t_swigregister(svn_wc_notify_t)
def svn_wc_create_notify(*args):
- """svn_wc_create_notify(char path, svn_wc_notify_action_t action, apr_pool_t pool) -> svn_wc_notify_t"""
+ """svn_wc_create_notify(char const * path, svn_wc_notify_action_t action, apr_pool_t pool) -> svn_wc_notify_t"""
return _wc.svn_wc_create_notify(*args)
def svn_wc_create_notify_url(*args):
- """svn_wc_create_notify_url(char url, svn_wc_notify_action_t action, apr_pool_t pool) -> svn_wc_notify_t"""
+ """svn_wc_create_notify_url(char const * url, svn_wc_notify_action_t action, apr_pool_t pool) -> svn_wc_notify_t"""
return _wc.svn_wc_create_notify_url(*args)
def svn_wc_dup_notify(*args):
@@ -609,6 +617,8 @@ svn_wc_conflict_reason_missing = _wc.svn_wc_conflict_reason_missing
svn_wc_conflict_reason_unversioned = _wc.svn_wc_conflict_reason_unversioned
svn_wc_conflict_reason_added = _wc.svn_wc_conflict_reason_added
svn_wc_conflict_reason_replaced = _wc.svn_wc_conflict_reason_replaced
+svn_wc_conflict_reason_moved_away = _wc.svn_wc_conflict_reason_moved_away
+svn_wc_conflict_reason_moved_here = _wc.svn_wc_conflict_reason_moved_here
svn_wc_conflict_kind_text = _wc.svn_wc_conflict_kind_text
svn_wc_conflict_kind_property = _wc.svn_wc_conflict_kind_property
svn_wc_conflict_kind_tree = _wc.svn_wc_conflict_kind_tree
@@ -631,6 +641,8 @@ class svn_wc_conflict_version_t:
__swig_getmethods__["path_in_repos"] = _wc.svn_wc_conflict_version_t_path_in_repos_get
__swig_setmethods__["node_kind"] = _wc.svn_wc_conflict_version_t_node_kind_set
__swig_getmethods__["node_kind"] = _wc.svn_wc_conflict_version_t_node_kind_get
+ __swig_setmethods__["repos_uuid"] = _wc.svn_wc_conflict_version_t_repos_uuid_set
+ __swig_getmethods__["repos_uuid"] = _wc.svn_wc_conflict_version_t_repos_uuid_get
def set_parent_pool(self, parent_pool=None):
"""Create a new proxy object for svn_wc_conflict_version_t"""
import libsvn.core, weakref
@@ -674,7 +686,7 @@ class svn_wc_conflict_version_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_wc_conflict_version_t"""
+ """__init__(svn_wc_conflict_version_t self) -> svn_wc_conflict_version_t"""
this = _wc.new_svn_wc_conflict_version_t()
try: self.this.append(this)
except: self.this = this
@@ -684,10 +696,17 @@ svn_wc_conflict_version_t_swigregister = _wc.svn_wc_conflict_version_t_swigregis
svn_wc_conflict_version_t_swigregister(svn_wc_conflict_version_t)
+def svn_wc_conflict_version_create2(*args):
+ """
+ svn_wc_conflict_version_create2(char const * repos_root_url, char const * repos_uuid, char const * repos_relpath,
+ svn_revnum_t revision, svn_node_kind_t kind, apr_pool_t result_pool) -> svn_wc_conflict_version_t
+ """
+ return _wc.svn_wc_conflict_version_create2(*args)
+
def svn_wc_conflict_version_create(*args):
"""
- svn_wc_conflict_version_create(char repos_url, char path_in_repos, svn_revnum_t peg_rev,
- svn_node_kind_t node_kind, apr_pool_t pool) -> svn_wc_conflict_version_t
+ svn_wc_conflict_version_create(char const * repos_url, char const * path_in_repos, svn_revnum_t peg_rev, svn_node_kind_t node_kind,
+ apr_pool_t pool) -> svn_wc_conflict_version_t
"""
return _wc.svn_wc_conflict_version_create(*args)
@@ -774,7 +793,7 @@ class svn_wc_conflict_description2_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_wc_conflict_description2_t"""
+ """__init__(svn_wc_conflict_description2_t self) -> svn_wc_conflict_description2_t"""
this = _wc.new_svn_wc_conflict_description2_t()
try: self.this.append(this)
except: self.this = this
@@ -865,7 +884,7 @@ class svn_wc_conflict_description_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_wc_conflict_description_t"""
+ """__init__(svn_wc_conflict_description_t self) -> svn_wc_conflict_description_t"""
this = _wc.new_svn_wc_conflict_description_t()
try: self.this.append(this)
except: self.this = this
@@ -876,42 +895,39 @@ svn_wc_conflict_description_t_swigregister(svn_wc_conflict_description_t)
def svn_wc_conflict_description_create_text2(*args):
- """svn_wc_conflict_description_create_text2(char local_abspath, apr_pool_t result_pool) -> svn_wc_conflict_description2_t"""
+ """svn_wc_conflict_description_create_text2(char const * local_abspath, apr_pool_t result_pool) -> svn_wc_conflict_description2_t"""
return _wc.svn_wc_conflict_description_create_text2(*args)
def svn_wc_conflict_description_create_text(*args):
- """svn_wc_conflict_description_create_text(char path, svn_wc_adm_access_t adm_access, apr_pool_t pool) -> svn_wc_conflict_description_t"""
+ """svn_wc_conflict_description_create_text(char const * path, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_wc_conflict_description_t"""
return _wc.svn_wc_conflict_description_create_text(*args)
def svn_wc_conflict_description_create_prop2(*args):
"""
- svn_wc_conflict_description_create_prop2(char local_abspath, svn_node_kind_t node_kind, char property_name,
+ svn_wc_conflict_description_create_prop2(char const * local_abspath, svn_node_kind_t node_kind, char const * property_name,
apr_pool_t result_pool) -> svn_wc_conflict_description2_t
"""
return _wc.svn_wc_conflict_description_create_prop2(*args)
def svn_wc_conflict_description_create_prop(*args):
"""
- svn_wc_conflict_description_create_prop(char path, svn_wc_adm_access_t adm_access, svn_node_kind_t node_kind,
- char property_name, apr_pool_t pool) -> svn_wc_conflict_description_t
+ svn_wc_conflict_description_create_prop(char const * path, svn_wc_adm_access_t * adm_access, svn_node_kind_t node_kind, char const * property_name,
+ apr_pool_t pool) -> svn_wc_conflict_description_t
"""
return _wc.svn_wc_conflict_description_create_prop(*args)
def svn_wc_conflict_description_create_tree2(*args):
"""
- svn_wc_conflict_description_create_tree2(char local_abspath, svn_node_kind_t node_kind, svn_wc_operation_t operation,
- svn_wc_conflict_version_t src_left_version,
- svn_wc_conflict_version_t src_right_version,
+ svn_wc_conflict_description_create_tree2(char const * local_abspath, svn_node_kind_t node_kind, svn_wc_operation_t operation,
+ svn_wc_conflict_version_t src_left_version, svn_wc_conflict_version_t src_right_version,
apr_pool_t result_pool) -> svn_wc_conflict_description2_t
"""
return _wc.svn_wc_conflict_description_create_tree2(*args)
def svn_wc_conflict_description_create_tree(*args):
"""
- svn_wc_conflict_description_create_tree(char path, svn_wc_adm_access_t adm_access, svn_node_kind_t node_kind,
- svn_wc_operation_t operation,
- svn_wc_conflict_version_t src_left_version,
- svn_wc_conflict_version_t src_right_version,
+ svn_wc_conflict_description_create_tree(char const * path, svn_wc_adm_access_t * adm_access, svn_node_kind_t node_kind, svn_wc_operation_t operation,
+ svn_wc_conflict_version_t src_left_version, svn_wc_conflict_version_t src_right_version,
apr_pool_t pool) -> svn_wc_conflict_description_t
"""
return _wc.svn_wc_conflict_description_create_tree(*args)
@@ -926,6 +942,7 @@ svn_wc_conflict_choose_mine_full = _wc.svn_wc_conflict_choose_mine_full
svn_wc_conflict_choose_theirs_conflict = _wc.svn_wc_conflict_choose_theirs_conflict
svn_wc_conflict_choose_mine_conflict = _wc.svn_wc_conflict_choose_mine_conflict
svn_wc_conflict_choose_merged = _wc.svn_wc_conflict_choose_merged
+svn_wc_conflict_choose_unspecified = _wc.svn_wc_conflict_choose_unspecified
class svn_wc_conflict_result_t:
"""Proxy of C svn_wc_conflict_result_t struct"""
__swig_setmethods__ = {}
@@ -982,7 +999,7 @@ class svn_wc_conflict_result_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_wc_conflict_result_t"""
+ """__init__(svn_wc_conflict_result_t self) -> svn_wc_conflict_result_t"""
this = _wc.new_svn_wc_conflict_result_t()
try: self.this.append(this)
except: self.this = this
@@ -993,10 +1010,7 @@ svn_wc_conflict_result_t_swigregister(svn_wc_conflict_result_t)
def svn_wc_create_conflict_result(*args):
- """
- svn_wc_create_conflict_result(svn_wc_conflict_choice_t choice, char merged_file,
- apr_pool_t pool) -> svn_wc_conflict_result_t
- """
+ """svn_wc_create_conflict_result(svn_wc_conflict_choice_t choice, char const * merged_file, apr_pool_t pool) -> svn_wc_conflict_result_t"""
return _wc.svn_wc_create_conflict_result(*args)
class svn_wc_diff_callbacks4_t:
"""Proxy of C svn_wc_diff_callbacks4_t struct"""
@@ -1093,7 +1107,7 @@ class svn_wc_diff_callbacks4_t:
return svn_wc_diff_callbacks4_invoke_dir_closed(self, *args)
def __init__(self):
- """__init__(self) -> svn_wc_diff_callbacks4_t"""
+ """__init__(svn_wc_diff_callbacks4_t self) -> svn_wc_diff_callbacks4_t"""
this = _wc.new_svn_wc_diff_callbacks4_t()
try: self.this.append(this)
except: self.this = this
@@ -1192,7 +1206,7 @@ class svn_wc_diff_callbacks3_t:
return svn_wc_diff_callbacks3_invoke_dir_closed(self, *args)
def __init__(self):
- """__init__(self) -> svn_wc_diff_callbacks3_t"""
+ """__init__(svn_wc_diff_callbacks3_t self) -> svn_wc_diff_callbacks3_t"""
this = _wc.new_svn_wc_diff_callbacks3_t()
try: self.this.append(this)
except: self.this = this
@@ -1281,7 +1295,7 @@ class svn_wc_diff_callbacks2_t:
return svn_wc_diff_callbacks2_invoke_dir_props_changed(self, *args)
def __init__(self):
- """__init__(self) -> svn_wc_diff_callbacks2_t"""
+ """__init__(svn_wc_diff_callbacks2_t self) -> svn_wc_diff_callbacks2_t"""
this = _wc.new_svn_wc_diff_callbacks2_t()
try: self.this.append(this)
except: self.this = this
@@ -1370,7 +1384,7 @@ class svn_wc_diff_callbacks_t:
return svn_wc_diff_callbacks_invoke_props_changed(self, *args)
def __init__(self):
- """__init__(self) -> svn_wc_diff_callbacks_t"""
+ """__init__(svn_wc_diff_callbacks_t self) -> svn_wc_diff_callbacks_t"""
this = _wc.new_svn_wc_diff_callbacks_t()
try: self.this.append(this)
except: self.this = this
@@ -1381,37 +1395,34 @@ svn_wc_diff_callbacks_t_swigregister(svn_wc_diff_callbacks_t)
def svn_wc_check_wc2(*args):
- """svn_wc_check_wc2(svn_wc_context_t wc_ctx, char local_abspath, apr_pool_t scratch_pool) -> svn_error_t"""
+ """svn_wc_check_wc2(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_pool_t scratch_pool) -> svn_error_t"""
return _wc.svn_wc_check_wc2(*args)
def svn_wc_check_wc(*args):
- """svn_wc_check_wc(char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_wc_check_wc(char const * path, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_check_wc(*args)
def svn_wc_has_binary_prop(*args):
- """svn_wc_has_binary_prop(char path, svn_wc_adm_access_t adm_access, apr_pool_t pool) -> svn_error_t"""
+ """svn_wc_has_binary_prop(char const * path, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_has_binary_prop(*args)
def svn_wc_text_modified_p2(*args):
- """
- svn_wc_text_modified_p2(svn_wc_context_t wc_ctx, char local_abspath, svn_boolean_t force_comparison,
- apr_pool_t scratch_pool) -> svn_error_t
- """
+ """svn_wc_text_modified_p2(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_boolean_t unused, apr_pool_t scratch_pool) -> svn_error_t"""
return _wc.svn_wc_text_modified_p2(*args)
def svn_wc_text_modified_p(*args):
"""
- svn_wc_text_modified_p(char filename, svn_boolean_t force_comparison, svn_wc_adm_access_t adm_access,
+ svn_wc_text_modified_p(char const * filename, svn_boolean_t force_comparison, svn_wc_adm_access_t * adm_access,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_text_modified_p(*args)
def svn_wc_props_modified_p2(*args):
- """svn_wc_props_modified_p2(svn_wc_context_t wc_ctx, char local_abspath, apr_pool_t scratch_pool) -> svn_error_t"""
+ """svn_wc_props_modified_p2(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_pool_t scratch_pool) -> svn_error_t"""
return _wc.svn_wc_props_modified_p2(*args)
def svn_wc_props_modified_p(*args):
- """svn_wc_props_modified_p(char path, svn_wc_adm_access_t adm_access, apr_pool_t pool) -> svn_error_t"""
+ """svn_wc_props_modified_p(char const * path, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_props_modified_p(*args)
svn_wc_schedule_normal = _wc.svn_wc_schedule_normal
svn_wc_schedule_add = _wc.svn_wc_schedule_add
@@ -1546,7 +1557,7 @@ class svn_wc_entry_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_wc_entry_t"""
+ """__init__(svn_wc_entry_t self) -> svn_wc_entry_t"""
this = _wc.new_svn_wc_entry_t()
try: self.this.append(this)
except: self.this = this
@@ -1558,17 +1569,11 @@ svn_wc_entry_t_swigregister(svn_wc_entry_t)
SVN_WC_ENTRY_THIS_DIR = _wc.SVN_WC_ENTRY_THIS_DIR
def svn_wc_entry(*args):
- """
- svn_wc_entry(char path, svn_wc_adm_access_t adm_access, svn_boolean_t show_hidden,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_wc_entry(char const * path, svn_wc_adm_access_t * adm_access, svn_boolean_t show_hidden, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_entry(*args)
def svn_wc_entries_read(*args):
- """
- svn_wc_entries_read(svn_wc_adm_access_t adm_access, svn_boolean_t show_hidden,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_wc_entries_read(svn_wc_adm_access_t * adm_access, svn_boolean_t show_hidden, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_entries_read(*args)
def svn_wc_entry_dup(*args):
@@ -1601,6 +1606,10 @@ class svn_wc_info_t:
__swig_getmethods__["conflicts"] = _wc.svn_wc_info_t_conflicts_get
__swig_setmethods__["wcroot_abspath"] = _wc.svn_wc_info_t_wcroot_abspath_set
__swig_getmethods__["wcroot_abspath"] = _wc.svn_wc_info_t_wcroot_abspath_get
+ __swig_setmethods__["moved_from_abspath"] = _wc.svn_wc_info_t_moved_from_abspath_set
+ __swig_getmethods__["moved_from_abspath"] = _wc.svn_wc_info_t_moved_from_abspath_get
+ __swig_setmethods__["moved_to_abspath"] = _wc.svn_wc_info_t_moved_to_abspath_set
+ __swig_getmethods__["moved_to_abspath"] = _wc.svn_wc_info_t_moved_to_abspath_get
def set_parent_pool(self, parent_pool=None):
"""Create a new proxy object for svn_wc_info_t"""
import libsvn.core, weakref
@@ -1644,7 +1653,7 @@ class svn_wc_info_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_wc_info_t"""
+ """__init__(svn_wc_info_t self) -> svn_wc_info_t"""
this = _wc.new_svn_wc_info_t()
try: self.this.append(this)
except: self.this = this
@@ -1659,19 +1668,19 @@ def svn_wc_info_dup(*args):
return _wc.svn_wc_info_dup(*args)
def svn_wc_conflicted_p3(*args):
- """svn_wc_conflicted_p3(svn_wc_context_t wc_ctx, char local_abspath, apr_pool_t scratch_pool) -> svn_error_t"""
+ """svn_wc_conflicted_p3(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_pool_t scratch_pool) -> svn_error_t"""
return _wc.svn_wc_conflicted_p3(*args)
def svn_wc_conflicted_p2(*args):
- """svn_wc_conflicted_p2(char path, svn_wc_adm_access_t adm_access, apr_pool_t pool) -> svn_error_t"""
+ """svn_wc_conflicted_p2(char const * path, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_conflicted_p2(*args)
def svn_wc_conflicted_p(*args):
- """svn_wc_conflicted_p(char dir_path, svn_wc_entry_t entry, apr_pool_t pool) -> svn_error_t"""
+ """svn_wc_conflicted_p(char const * dir_path, svn_wc_entry_t entry, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_conflicted_p(*args)
def svn_wc_get_ancestry(*args):
- """svn_wc_get_ancestry(char path, svn_wc_adm_access_t adm_access, apr_pool_t pool) -> svn_error_t"""
+ """svn_wc_get_ancestry(char const * path, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_get_ancestry(*args)
class svn_wc_entry_callbacks2_t:
"""Proxy of C svn_wc_entry_callbacks2_t struct"""
@@ -1733,7 +1742,7 @@ class svn_wc_entry_callbacks2_t:
return svn_wc_entry_callbacks2_invoke_handle_error(self, *args)
def __init__(self):
- """__init__(self) -> svn_wc_entry_callbacks2_t"""
+ """__init__(svn_wc_entry_callbacks2_t self) -> svn_wc_entry_callbacks2_t"""
this = _wc.new_svn_wc_entry_callbacks2_t()
try: self.this.append(this)
except: self.this = this
@@ -1797,7 +1806,7 @@ class svn_wc_entry_callbacks_t:
return svn_wc_entry_callbacks_invoke_found_entry(self, *args)
def __init__(self):
- """__init__(self) -> svn_wc_entry_callbacks_t"""
+ """__init__(svn_wc_entry_callbacks_t self) -> svn_wc_entry_callbacks_t"""
this = _wc.new_svn_wc_entry_callbacks_t()
try: self.this.append(this)
except: self.this = this
@@ -1809,68 +1818,59 @@ svn_wc_entry_callbacks_t_swigregister(svn_wc_entry_callbacks_t)
def svn_wc_walk_entries3(*args):
"""
- svn_wc_walk_entries3(char path, svn_wc_adm_access_t adm_access, svn_wc_entry_callbacks2_t walk_callbacks,
- void walk_baton,
- svn_depth_t depth, svn_boolean_t show_hidden,
+ svn_wc_walk_entries3(char const * path, svn_wc_adm_access_t * adm_access, svn_wc_entry_callbacks2_t walk_callbacks,
+ void * walk_baton, svn_depth_t depth, svn_boolean_t show_hidden,
svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_walk_entries3(*args)
def svn_wc_walk_entries2(*args):
"""
- svn_wc_walk_entries2(char path, svn_wc_adm_access_t adm_access, svn_wc_entry_callbacks_t walk_callbacks,
- void walk_baton,
- svn_boolean_t show_hidden, svn_cancel_func_t cancel_func,
+ svn_wc_walk_entries2(char const * path, svn_wc_adm_access_t * adm_access, svn_wc_entry_callbacks_t walk_callbacks,
+ void * walk_baton, svn_boolean_t show_hidden, svn_cancel_func_t cancel_func,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_walk_entries2(*args)
def svn_wc_walk_entries(*args):
"""
- svn_wc_walk_entries(char path, svn_wc_adm_access_t adm_access, svn_wc_entry_callbacks_t walk_callbacks,
- void walk_baton,
- svn_boolean_t show_hidden, apr_pool_t pool) -> svn_error_t
+ svn_wc_walk_entries(char const * path, svn_wc_adm_access_t * adm_access, svn_wc_entry_callbacks_t walk_callbacks,
+ void * walk_baton, svn_boolean_t show_hidden, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_walk_entries(*args)
def svn_wc_mark_missing_deleted(*args):
- """svn_wc_mark_missing_deleted(char path, svn_wc_adm_access_t parent, apr_pool_t pool) -> svn_error_t"""
+ """svn_wc_mark_missing_deleted(char const * path, svn_wc_adm_access_t * parent, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_mark_missing_deleted(*args)
def svn_wc_ensure_adm4(*args):
"""
- svn_wc_ensure_adm4(svn_wc_context_t wc_ctx, char local_abspath, char url,
- char repos_root_url, char repos_uuid, svn_revnum_t revision,
- svn_depth_t depth, apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_ensure_adm4(svn_wc_context_t * wc_ctx, char const * local_abspath, char const * url, char const * repos_root_url,
+ char const * repos_uuid, svn_revnum_t revision, svn_depth_t depth,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_ensure_adm4(*args)
def svn_wc_ensure_adm3(*args):
"""
- svn_wc_ensure_adm3(char path, char uuid, char url, char repos, svn_revnum_t revision,
+ svn_wc_ensure_adm3(char const * path, char const * uuid, char const * url, char const * repos, svn_revnum_t revision,
svn_depth_t depth, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_ensure_adm3(*args)
def svn_wc_ensure_adm2(*args):
"""
- svn_wc_ensure_adm2(char path, char uuid, char url, char repos, svn_revnum_t revision,
+ svn_wc_ensure_adm2(char const * path, char const * uuid, char const * url, char const * repos, svn_revnum_t revision,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_ensure_adm2(*args)
def svn_wc_ensure_adm(*args):
- """
- svn_wc_ensure_adm(char path, char uuid, char url, svn_revnum_t revision,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_wc_ensure_adm(char const * path, char const * uuid, char const * url, svn_revnum_t revision, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_ensure_adm(*args)
def svn_wc_maybe_set_repos_root(*args):
- """
- svn_wc_maybe_set_repos_root(svn_wc_adm_access_t adm_access, char path, char repos,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_wc_maybe_set_repos_root(svn_wc_adm_access_t * adm_access, char const * path, char const * repos, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_maybe_set_repos_root(*args)
svn_wc_status_none = _wc.svn_wc_status_none
svn_wc_status_unversioned = _wc.svn_wc_status_unversioned
@@ -1949,6 +1949,12 @@ class svn_wc_status3_t:
__swig_getmethods__["ood_changed_date"] = _wc.svn_wc_status3_t_ood_changed_date_get
__swig_setmethods__["ood_changed_author"] = _wc.svn_wc_status3_t_ood_changed_author_set
__swig_getmethods__["ood_changed_author"] = _wc.svn_wc_status3_t_ood_changed_author_get
+ __swig_setmethods__["moved_from_abspath"] = _wc.svn_wc_status3_t_moved_from_abspath_set
+ __swig_getmethods__["moved_from_abspath"] = _wc.svn_wc_status3_t_moved_from_abspath_get
+ __swig_setmethods__["moved_to_abspath"] = _wc.svn_wc_status3_t_moved_to_abspath_set
+ __swig_getmethods__["moved_to_abspath"] = _wc.svn_wc_status3_t_moved_to_abspath_get
+ __swig_setmethods__["file_external"] = _wc.svn_wc_status3_t_file_external_set
+ __swig_getmethods__["file_external"] = _wc.svn_wc_status3_t_file_external_get
def set_parent_pool(self, parent_pool=None):
"""Create a new proxy object for svn_wc_status3_t"""
import libsvn.core, weakref
@@ -1992,7 +1998,7 @@ class svn_wc_status3_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_wc_status3_t"""
+ """__init__(svn_wc_status3_t self) -> svn_wc_status3_t"""
this = _wc.new_svn_wc_status3_t()
try: self.this.append(this)
except: self.this = this
@@ -2087,7 +2093,7 @@ class svn_wc_status2_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_wc_status2_t"""
+ """__init__(svn_wc_status2_t self) -> svn_wc_status2_t"""
this = _wc.new_svn_wc_status2_t()
try: self.this.append(this)
except: self.this = this
@@ -2162,7 +2168,7 @@ class svn_wc_status_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_wc_status_t"""
+ """__init__(svn_wc_status_t self) -> svn_wc_status_t"""
this = _wc.new_svn_wc_status_t()
try: self.this.append(this)
except: self.this = this
@@ -2185,1089 +2191,946 @@ def svn_wc_dup_status(*args):
return _wc.svn_wc_dup_status(*args)
def svn_wc_status3(*args):
- """
- svn_wc_status3(svn_wc_context_t wc_ctx, char local_abspath, apr_pool_t result_pool,
- apr_pool_t scratch_pool) -> svn_error_t
- """
+ """svn_wc_status3(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
return _wc.svn_wc_status3(*args)
def svn_wc_status2(*args):
- """svn_wc_status2(char path, svn_wc_adm_access_t adm_access, apr_pool_t pool) -> svn_error_t"""
+ """svn_wc_status2(char const * path, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_status2(*args)
def svn_wc_status(*args):
- """svn_wc_status(char path, svn_wc_adm_access_t adm_access, apr_pool_t pool) -> svn_error_t"""
+ """svn_wc_status(char const * path, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_status(*args)
def svn_wc_walk_status(*args):
"""
- svn_wc_walk_status(svn_wc_context_t wc_ctx, char local_abspath, svn_depth_t depth,
- svn_boolean_t get_all, svn_boolean_t no_ignore,
- svn_boolean_t ignore_text_mods,
- apr_array_header_t ignore_patterns, svn_wc_status_func4_t status_func,
- void status_baton,
+ svn_wc_walk_status(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_depth_t depth, svn_boolean_t get_all,
+ svn_boolean_t no_ignore, svn_boolean_t ignore_text_mods, apr_array_header_t ignore_patterns,
+ svn_wc_status_func4_t status_func, void * status_baton,
svn_cancel_func_t cancel_func, apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_walk_status(*args)
def svn_wc_get_status_editor5(*args):
"""
- svn_wc_get_status_editor5(svn_wc_context_t wc_ctx, char anchor_abspath, char target_basename,
- svn_depth_t depth, svn_boolean_t get_all,
- svn_boolean_t no_ignore, svn_boolean_t depth_as_sticky,
- svn_boolean_t server_performs_filtering,
- apr_array_header_t ignore_patterns,
- svn_wc_status_func4_t status_func,
- void status_baton, svn_cancel_func_t cancel_func,
- apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_get_status_editor5(svn_wc_context_t * wc_ctx, char const * anchor_abspath, char const * target_basename,
+ svn_depth_t depth, svn_boolean_t get_all, svn_boolean_t no_ignore, svn_boolean_t depth_as_sticky,
+ svn_boolean_t server_performs_filtering, apr_array_header_t ignore_patterns,
+ svn_wc_status_func4_t status_func, void * status_baton,
+ svn_cancel_func_t cancel_func, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_get_status_editor5(*args)
def svn_wc_get_status_editor4(*args):
"""
- svn_wc_get_status_editor4(svn_wc_adm_access_t anchor, char target, svn_depth_t depth,
- svn_boolean_t get_all, svn_boolean_t no_ignore,
- apr_array_header_t ignore_patterns,
- svn_wc_status_func3_t status_func, void status_baton,
- svn_cancel_func_t cancel_func, svn_wc_traversal_info_t traversal_info,
- apr_pool_t pool) -> svn_error_t
+ svn_wc_get_status_editor4(svn_wc_adm_access_t * anchor, char const * target, svn_depth_t depth, svn_boolean_t get_all,
+ svn_boolean_t no_ignore, apr_array_header_t ignore_patterns, svn_wc_status_func3_t status_func,
+ void * status_baton, svn_cancel_func_t cancel_func,
+ svn_wc_traversal_info_t * traversal_info, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_get_status_editor4(*args)
def svn_wc_get_status_editor3(*args):
"""
- svn_wc_get_status_editor3(svn_wc_adm_access_t anchor, char target, svn_depth_t depth,
- svn_boolean_t get_all, svn_boolean_t no_ignore,
- apr_array_header_t ignore_patterns,
- svn_wc_status_func2_t status_func, svn_cancel_func_t cancel_func,
- svn_wc_traversal_info_t traversal_info,
+ svn_wc_get_status_editor3(svn_wc_adm_access_t * anchor, char const * target, svn_depth_t depth, svn_boolean_t get_all,
+ svn_boolean_t no_ignore, apr_array_header_t ignore_patterns, svn_wc_status_func2_t status_func,
+ svn_cancel_func_t cancel_func, svn_wc_traversal_info_t * traversal_info,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_get_status_editor3(*args)
def svn_wc_get_status_editor2(*args):
"""
- svn_wc_get_status_editor2(svn_wc_adm_access_t anchor, char target, apr_hash_t config,
- svn_boolean_t recurse, svn_boolean_t get_all,
- svn_boolean_t no_ignore, svn_wc_status_func2_t status_func,
- svn_cancel_func_t cancel_func,
- svn_wc_traversal_info_t traversal_info,
+ svn_wc_get_status_editor2(svn_wc_adm_access_t * anchor, char const * target, apr_hash_t config, svn_boolean_t recurse,
+ svn_boolean_t get_all, svn_boolean_t no_ignore, svn_wc_status_func2_t status_func,
+ svn_cancel_func_t cancel_func, svn_wc_traversal_info_t * traversal_info,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_get_status_editor2(*args)
def svn_wc_get_status_editor(*args):
"""
- svn_wc_get_status_editor(svn_wc_adm_access_t anchor, char target, apr_hash_t config,
- svn_boolean_t recurse, svn_boolean_t get_all,
- svn_boolean_t no_ignore, svn_wc_status_func_t status_func,
- svn_cancel_func_t cancel_func,
- svn_wc_traversal_info_t traversal_info,
+ svn_wc_get_status_editor(svn_wc_adm_access_t * anchor, char const * target, apr_hash_t config, svn_boolean_t recurse,
+ svn_boolean_t get_all, svn_boolean_t no_ignore, svn_wc_status_func_t status_func,
+ svn_cancel_func_t cancel_func, svn_wc_traversal_info_t * traversal_info,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_get_status_editor(*args)
def svn_wc_status_set_repos_locks(*args):
- """
- svn_wc_status_set_repos_locks(void set_locks_baton, apr_hash_t locks, char repos_root,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_wc_status_set_repos_locks(void * set_locks_baton, apr_hash_t locks, char const * repos_root, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_status_set_repos_locks(*args)
def svn_wc_copy3(*args):
"""
- svn_wc_copy3(svn_wc_context_t wc_ctx, char src_abspath, char dst_abspath,
- svn_boolean_t metadata_only, svn_cancel_func_t cancel_func,
- svn_wc_notify_func2_t notify_func,
+ svn_wc_copy3(svn_wc_context_t * wc_ctx, char const * src_abspath, char const * dst_abspath, svn_boolean_t metadata_only,
+ svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func,
apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_copy3(*args)
def svn_wc_copy2(*args):
"""
- svn_wc_copy2(char src, svn_wc_adm_access_t dst_parent, char dst_basename,
- svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func,
- apr_pool_t pool) -> svn_error_t
+ svn_wc_copy2(char const * src, svn_wc_adm_access_t * dst_parent, char const * dst_basename, svn_cancel_func_t cancel_func,
+ svn_wc_notify_func2_t notify_func, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_copy2(*args)
def svn_wc_copy(*args):
"""
- svn_wc_copy(char src, svn_wc_adm_access_t dst_parent, char dst_basename,
- svn_cancel_func_t cancel_func, svn_wc_notify_func_t notify_func,
- apr_pool_t pool) -> svn_error_t
+ svn_wc_copy(char const * src, svn_wc_adm_access_t * dst_parent, char const * dst_basename, svn_cancel_func_t cancel_func,
+ svn_wc_notify_func_t notify_func, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_copy(*args)
def svn_wc_move(*args):
"""
- svn_wc_move(svn_wc_context_t wc_ctx, char src_abspath, char dst_abspath,
- svn_boolean_t metadata_only, svn_cancel_func_t cancel_func,
- svn_wc_notify_func2_t notify_func,
+ svn_wc_move(svn_wc_context_t * wc_ctx, char const * src_abspath, char const * dst_abspath, svn_boolean_t metadata_only,
+ svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func,
apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_move(*args)
def svn_wc_delete4(*args):
"""
- svn_wc_delete4(svn_wc_context_t wc_ctx, char local_abspath, svn_boolean_t keep_local,
- svn_boolean_t delete_unversioned_target,
- svn_cancel_func_t cancel_func,
- svn_wc_notify_func2_t notify_func, apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_delete4(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_boolean_t keep_local,
+ svn_boolean_t delete_unversioned_target, svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_delete4(*args)
def svn_wc_delete3(*args):
"""
- svn_wc_delete3(char path, svn_wc_adm_access_t adm_access, svn_cancel_func_t cancel_func,
- svn_wc_notify_func2_t notify_func,
- svn_boolean_t keep_local, apr_pool_t pool) -> svn_error_t
+ svn_wc_delete3(char const * path, svn_wc_adm_access_t * adm_access, svn_cancel_func_t cancel_func,
+ svn_wc_notify_func2_t notify_func, svn_boolean_t keep_local, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_delete3(*args)
def svn_wc_delete2(*args):
"""
- svn_wc_delete2(char path, svn_wc_adm_access_t adm_access, svn_cancel_func_t cancel_func,
- svn_wc_notify_func2_t notify_func,
- apr_pool_t pool) -> svn_error_t
+ svn_wc_delete2(char const * path, svn_wc_adm_access_t * adm_access, svn_cancel_func_t cancel_func,
+ svn_wc_notify_func2_t notify_func, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_delete2(*args)
def svn_wc_delete(*args):
"""
- svn_wc_delete(char path, svn_wc_adm_access_t adm_access, svn_cancel_func_t cancel_func,
- svn_wc_notify_func_t notify_func,
- apr_pool_t pool) -> svn_error_t
+ svn_wc_delete(char const * path, svn_wc_adm_access_t * adm_access, svn_cancel_func_t cancel_func,
+ svn_wc_notify_func_t notify_func, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_delete(*args)
+def svn_wc_add_from_disk2(*args):
+ """
+ svn_wc_add_from_disk2(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_hash_t props, svn_wc_notify_func2_t notify_func,
+ apr_pool_t scratch_pool) -> svn_error_t
+ """
+ return _wc.svn_wc_add_from_disk2(*args)
+
def svn_wc_add_from_disk(*args):
"""
- svn_wc_add_from_disk(svn_wc_context_t wc_ctx, char local_abspath, svn_wc_notify_func2_t notify_func,
+ svn_wc_add_from_disk(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_wc_notify_func2_t notify_func,
apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_add_from_disk(*args)
def svn_wc_add4(*args):
"""
- svn_wc_add4(svn_wc_context_t wc_ctx, char local_abspath, svn_depth_t depth,
- char copyfrom_url, svn_revnum_t copyfrom_rev,
- svn_cancel_func_t cancel_func,
+ svn_wc_add4(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_depth_t depth, char const * copyfrom_url,
+ svn_revnum_t copyfrom_rev, svn_cancel_func_t cancel_func,
svn_wc_notify_func2_t notify_func, apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_add4(*args)
def svn_wc_add3(*args):
"""
- svn_wc_add3(char path, svn_wc_adm_access_t parent_access, svn_depth_t depth,
- char copyfrom_url, svn_revnum_t copyfrom_rev,
- svn_cancel_func_t cancel_func,
+ svn_wc_add3(char const * path, svn_wc_adm_access_t * parent_access, svn_depth_t depth, char const * copyfrom_url,
+ svn_revnum_t copyfrom_rev, svn_cancel_func_t cancel_func,
svn_wc_notify_func2_t notify_func, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_add3(*args)
def svn_wc_add2(*args):
"""
- svn_wc_add2(char path, svn_wc_adm_access_t parent_access, char copyfrom_url,
- svn_revnum_t copyfrom_rev, svn_cancel_func_t cancel_func,
- svn_wc_notify_func2_t notify_func,
+ svn_wc_add2(char const * path, svn_wc_adm_access_t * parent_access, char const * copyfrom_url,
+ svn_revnum_t copyfrom_rev, svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_add2(*args)
def svn_wc_add(*args):
"""
- svn_wc_add(char path, svn_wc_adm_access_t parent_access, char copyfrom_url,
- svn_revnum_t copyfrom_rev, svn_cancel_func_t cancel_func,
- svn_wc_notify_func_t notify_func,
+ svn_wc_add(char const * path, svn_wc_adm_access_t * parent_access, char const * copyfrom_url,
+ svn_revnum_t copyfrom_rev, svn_cancel_func_t cancel_func, svn_wc_notify_func_t notify_func,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_add(*args)
def svn_wc_add_repos_file4(*args):
"""
- svn_wc_add_repos_file4(svn_wc_context_t wc_ctx, char local_abspath, svn_stream_t new_base_contents,
- svn_stream_t new_contents,
- apr_hash_t new_base_props, apr_hash_t new_props,
- char copyfrom_url, svn_revnum_t copyfrom_rev,
- svn_cancel_func_t cancel_func, apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_add_repos_file4(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_stream_t * new_base_contents,
+ svn_stream_t * new_contents, apr_hash_t new_base_props, apr_hash_t new_props,
+ char const * copyfrom_url, svn_revnum_t copyfrom_rev, svn_cancel_func_t cancel_func,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_add_repos_file4(*args)
def svn_wc_add_repos_file3(*args):
"""
- svn_wc_add_repos_file3(char dst_path, svn_wc_adm_access_t adm_access, svn_stream_t new_base_contents,
- svn_stream_t new_contents,
- apr_hash_t new_base_props, apr_hash_t new_props,
- char copyfrom_url, svn_revnum_t copyfrom_rev,
- svn_cancel_func_t cancel_func,
+ svn_wc_add_repos_file3(char const * dst_path, svn_wc_adm_access_t * adm_access, svn_stream_t * new_base_contents,
+ svn_stream_t * new_contents, apr_hash_t new_base_props, apr_hash_t new_props,
+ char const * copyfrom_url, svn_revnum_t copyfrom_rev, svn_cancel_func_t cancel_func,
svn_wc_notify_func2_t notify_func, apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_add_repos_file3(*args)
def svn_wc_add_repos_file2(*args):
"""
- svn_wc_add_repos_file2(char dst_path, svn_wc_adm_access_t adm_access, char new_text_base_path,
- char new_text_path, apr_hash_t new_base_props,
- apr_hash_t new_props,
- char copyfrom_url, svn_revnum_t copyfrom_rev,
- apr_pool_t pool) -> svn_error_t
+ svn_wc_add_repos_file2(char const * dst_path, svn_wc_adm_access_t * adm_access, char const * new_text_base_path,
+ char const * new_text_path, apr_hash_t new_base_props, apr_hash_t new_props,
+ char const * copyfrom_url, svn_revnum_t copyfrom_rev, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_add_repos_file2(*args)
def svn_wc_add_repos_file(*args):
"""
- svn_wc_add_repos_file(char dst_path, svn_wc_adm_access_t adm_access, char new_text_path,
- apr_hash_t new_props, char copyfrom_url,
- svn_revnum_t copyfrom_rev, apr_pool_t pool) -> svn_error_t
+ svn_wc_add_repos_file(char const * dst_path, svn_wc_adm_access_t * adm_access, char const * new_text_path,
+ apr_hash_t new_props, char const * copyfrom_url, svn_revnum_t copyfrom_rev,
+ apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_add_repos_file(*args)
def svn_wc_remove_from_revision_control2(*args):
"""
- svn_wc_remove_from_revision_control2(svn_wc_context_t wc_ctx, char local_abspath, svn_boolean_t destroy_wf,
- svn_boolean_t instant_error,
- svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
+ svn_wc_remove_from_revision_control2(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_boolean_t destroy_wf,
+ svn_boolean_t instant_error, svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_remove_from_revision_control2(*args)
def svn_wc_remove_from_revision_control(*args):
"""
- svn_wc_remove_from_revision_control(svn_wc_adm_access_t adm_access, char name, svn_boolean_t destroy_wf,
- svn_boolean_t instant_error,
+ svn_wc_remove_from_revision_control(svn_wc_adm_access_t * adm_access, char const * name, svn_boolean_t destroy_wf, svn_boolean_t instant_error,
svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_remove_from_revision_control(*args)
def svn_wc_resolved_conflict5(*args):
"""
- svn_wc_resolved_conflict5(svn_wc_context_t wc_ctx, char local_abspath, svn_depth_t depth,
- svn_boolean_t resolve_text, char resolve_prop,
- svn_boolean_t resolve_tree, svn_wc_conflict_choice_t conflict_choice,
- svn_cancel_func_t cancel_func,
- svn_wc_notify_func2_t notify_func,
+ svn_wc_resolved_conflict5(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_depth_t depth, svn_boolean_t resolve_text,
+ char const * resolve_prop, svn_boolean_t resolve_tree,
+ svn_wc_conflict_choice_t conflict_choice, svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func,
apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_resolved_conflict5(*args)
def svn_wc_resolved_conflict4(*args):
"""
- svn_wc_resolved_conflict4(char path, svn_wc_adm_access_t adm_access, svn_boolean_t resolve_text,
- svn_boolean_t resolve_props,
- svn_boolean_t resolve_tree, svn_depth_t depth,
- svn_wc_conflict_choice_t conflict_choice,
- svn_wc_notify_func2_t notify_func, svn_cancel_func_t cancel_func,
- apr_pool_t pool) -> svn_error_t
+ svn_wc_resolved_conflict4(char const * path, svn_wc_adm_access_t * adm_access, svn_boolean_t resolve_text,
+ svn_boolean_t resolve_props, svn_boolean_t resolve_tree, svn_depth_t depth,
+ svn_wc_conflict_choice_t conflict_choice, svn_wc_notify_func2_t notify_func,
+ svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_resolved_conflict4(*args)
def svn_wc_resolved_conflict3(*args):
"""
- svn_wc_resolved_conflict3(char path, svn_wc_adm_access_t adm_access, svn_boolean_t resolve_text,
- svn_boolean_t resolve_props,
- svn_depth_t depth, svn_wc_conflict_choice_t conflict_choice,
- svn_wc_notify_func2_t notify_func,
- svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
+ svn_wc_resolved_conflict3(char const * path, svn_wc_adm_access_t * adm_access, svn_boolean_t resolve_text,
+ svn_boolean_t resolve_props, svn_depth_t depth, svn_wc_conflict_choice_t conflict_choice,
+ svn_wc_notify_func2_t notify_func, svn_cancel_func_t cancel_func,
+ apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_resolved_conflict3(*args)
def svn_wc_resolved_conflict2(*args):
"""
- svn_wc_resolved_conflict2(char path, svn_wc_adm_access_t adm_access, svn_boolean_t resolve_text,
- svn_boolean_t resolve_props,
- svn_boolean_t recurse, svn_wc_notify_func2_t notify_func,
- svn_cancel_func_t cancel_func,
- apr_pool_t pool) -> svn_error_t
+ svn_wc_resolved_conflict2(char const * path, svn_wc_adm_access_t * adm_access, svn_boolean_t resolve_text,
+ svn_boolean_t resolve_props, svn_boolean_t recurse, svn_wc_notify_func2_t notify_func,
+ svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_resolved_conflict2(*args)
def svn_wc_resolved_conflict(*args):
"""
- svn_wc_resolved_conflict(char path, svn_wc_adm_access_t adm_access, svn_boolean_t resolve_text,
- svn_boolean_t resolve_props,
- svn_boolean_t recurse, svn_wc_notify_func_t notify_func,
+ svn_wc_resolved_conflict(char const * path, svn_wc_adm_access_t * adm_access, svn_boolean_t resolve_text,
+ svn_boolean_t resolve_props, svn_boolean_t recurse, svn_wc_notify_func_t notify_func,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_resolved_conflict(*args)
def svn_wc_committed_queue_create(*args):
- """svn_wc_committed_queue_create(apr_pool_t pool) -> svn_wc_committed_queue_t"""
+ """svn_wc_committed_queue_create(apr_pool_t pool) -> svn_wc_committed_queue_t *"""
return _wc.svn_wc_committed_queue_create(*args)
def svn_wc_queue_committed3(*args):
"""
- svn_wc_queue_committed3(svn_wc_committed_queue_t queue, svn_wc_context_t wc_ctx,
- char local_abspath, svn_boolean_t recurse,
- apr_array_header_t wcprop_changes, svn_boolean_t remove_lock,
- svn_boolean_t remove_changelist,
- svn_checksum_t sha1_checksum, apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_queue_committed3(svn_wc_committed_queue_t * queue, svn_wc_context_t * wc_ctx, char const * local_abspath,
+ svn_boolean_t recurse, apr_array_header_t wcprop_changes, svn_boolean_t remove_lock,
+ svn_boolean_t remove_changelist, svn_checksum_t sha1_checksum,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_queue_committed3(*args)
def svn_wc_queue_committed2(*args):
"""
- svn_wc_queue_committed2(svn_wc_committed_queue_t queue, char path, svn_wc_adm_access_t adm_access,
- svn_boolean_t recurse,
- apr_array_header_t wcprop_changes, svn_boolean_t remove_lock,
- svn_boolean_t remove_changelist,
- svn_checksum_t md5_checksum, apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_queue_committed2(svn_wc_committed_queue_t * queue, char const * path, svn_wc_adm_access_t * adm_access,
+ svn_boolean_t recurse, apr_array_header_t wcprop_changes, svn_boolean_t remove_lock,
+ svn_boolean_t remove_changelist, svn_checksum_t md5_checksum,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_queue_committed2(*args)
def svn_wc_queue_committed(*args):
"""
- svn_wc_queue_committed(char path, svn_wc_adm_access_t adm_access, svn_boolean_t recurse,
- apr_array_header_t wcprop_changes,
+ svn_wc_queue_committed(char const * path, svn_wc_adm_access_t * adm_access, svn_boolean_t recurse, apr_array_header_t wcprop_changes,
svn_boolean_t remove_lock, svn_boolean_t remove_changelist,
- unsigned char digest, apr_pool_t pool) -> svn_error_t
+ unsigned char const * digest, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_queue_committed(*args)
def svn_wc_process_committed_queue2(*args):
"""
- svn_wc_process_committed_queue2(svn_wc_committed_queue_t queue, svn_wc_context_t wc_ctx,
- svn_revnum_t new_revnum, char rev_date,
- char rev_author, svn_cancel_func_t cancel_func,
+ svn_wc_process_committed_queue2(svn_wc_committed_queue_t * queue, svn_wc_context_t * wc_ctx, svn_revnum_t new_revnum,
+ char const * rev_date, char const * rev_author, svn_cancel_func_t cancel_func,
apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_process_committed_queue2(*args)
def svn_wc_process_committed_queue(*args):
"""
- svn_wc_process_committed_queue(svn_wc_committed_queue_t queue, svn_wc_adm_access_t adm_access,
- svn_revnum_t new_revnum, char rev_date,
- char rev_author, apr_pool_t pool) -> svn_error_t
+ svn_wc_process_committed_queue(svn_wc_committed_queue_t * queue, svn_wc_adm_access_t * adm_access, svn_revnum_t new_revnum,
+ char const * rev_date, char const * rev_author, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_process_committed_queue(*args)
def svn_wc_process_committed4(*args):
"""
- svn_wc_process_committed4(char path, svn_wc_adm_access_t adm_access, svn_boolean_t recurse,
- svn_revnum_t new_revnum, char rev_date,
- char rev_author, apr_array_header_t wcprop_changes,
+ svn_wc_process_committed4(char const * path, svn_wc_adm_access_t * adm_access, svn_boolean_t recurse, svn_revnum_t new_revnum,
+ char const * rev_date, char const * rev_author, apr_array_header_t wcprop_changes,
svn_boolean_t remove_lock, svn_boolean_t remove_changelist,
- unsigned char digest,
- apr_pool_t pool) -> svn_error_t
+ unsigned char const * digest, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_process_committed4(*args)
def svn_wc_process_committed3(*args):
"""
- svn_wc_process_committed3(char path, svn_wc_adm_access_t adm_access, svn_boolean_t recurse,
- svn_revnum_t new_revnum, char rev_date,
- char rev_author, apr_array_header_t wcprop_changes,
- svn_boolean_t remove_lock, unsigned char digest,
+ svn_wc_process_committed3(char const * path, svn_wc_adm_access_t * adm_access, svn_boolean_t recurse, svn_revnum_t new_revnum,
+ char const * rev_date, char const * rev_author, apr_array_header_t wcprop_changes,
+ svn_boolean_t remove_lock, unsigned char const * digest,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_process_committed3(*args)
def svn_wc_process_committed2(*args):
"""
- svn_wc_process_committed2(char path, svn_wc_adm_access_t adm_access, svn_boolean_t recurse,
- svn_revnum_t new_revnum, char rev_date,
- char rev_author, apr_array_header_t wcprop_changes,
+ svn_wc_process_committed2(char const * path, svn_wc_adm_access_t * adm_access, svn_boolean_t recurse, svn_revnum_t new_revnum,
+ char const * rev_date, char const * rev_author, apr_array_header_t wcprop_changes,
svn_boolean_t remove_lock, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_process_committed2(*args)
def svn_wc_process_committed(*args):
"""
- svn_wc_process_committed(char path, svn_wc_adm_access_t adm_access, svn_boolean_t recurse,
- svn_revnum_t new_revnum, char rev_date,
- char rev_author, apr_array_header_t wcprop_changes,
+ svn_wc_process_committed(char const * path, svn_wc_adm_access_t * adm_access, svn_boolean_t recurse, svn_revnum_t new_revnum,
+ char const * rev_date, char const * rev_author, apr_array_header_t wcprop_changes,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_process_committed(*args)
def svn_wc_crawl_revisions5(*args):
"""
- svn_wc_crawl_revisions5(svn_wc_context_t wc_ctx, char local_abspath, svn_ra_reporter3_t reporter,
- void report_baton, svn_boolean_t restore_files,
- svn_depth_t depth,
- svn_boolean_t honor_depth_exclude, svn_boolean_t depth_compatibility_trick,
- svn_boolean_t use_commit_times,
- svn_cancel_func_t cancel_func,
- svn_wc_notify_func2_t notify_func, apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_crawl_revisions5(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_ra_reporter3_t reporter,
+ void * report_baton, svn_boolean_t restore_files, svn_depth_t depth, svn_boolean_t honor_depth_exclude,
+ svn_boolean_t depth_compatibility_trick, svn_boolean_t use_commit_times,
+ svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_crawl_revisions5(*args)
def svn_wc_crawl_revisions4(*args):
"""
- svn_wc_crawl_revisions4(char path, svn_wc_adm_access_t adm_access, svn_ra_reporter3_t reporter,
- void report_baton, svn_boolean_t restore_files,
- svn_depth_t depth, svn_boolean_t honor_depth_exclude,
- svn_boolean_t depth_compatibility_trick,
- svn_boolean_t use_commit_times,
- svn_wc_notify_func2_t notify_func,
- svn_wc_traversal_info_t traversal_info,
+ svn_wc_crawl_revisions4(char const * path, svn_wc_adm_access_t * adm_access, svn_ra_reporter3_t reporter,
+ void * report_baton, svn_boolean_t restore_files, svn_depth_t depth, svn_boolean_t honor_depth_exclude,
+ svn_boolean_t depth_compatibility_trick, svn_boolean_t use_commit_times,
+ svn_wc_notify_func2_t notify_func, svn_wc_traversal_info_t * traversal_info,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_crawl_revisions4(*args)
def svn_wc_crawl_revisions3(*args):
"""
- svn_wc_crawl_revisions3(char path, svn_wc_adm_access_t adm_access, svn_ra_reporter3_t reporter,
- void report_baton, svn_boolean_t restore_files,
- svn_depth_t depth, svn_boolean_t depth_compatibility_trick,
- svn_boolean_t use_commit_times,
- svn_wc_notify_func2_t notify_func,
- svn_wc_traversal_info_t traversal_info,
- apr_pool_t pool) -> svn_error_t
+ svn_wc_crawl_revisions3(char const * path, svn_wc_adm_access_t * adm_access, svn_ra_reporter3_t reporter,
+ void * report_baton, svn_boolean_t restore_files, svn_depth_t depth, svn_boolean_t depth_compatibility_trick,
+ svn_boolean_t use_commit_times, svn_wc_notify_func2_t notify_func,
+ svn_wc_traversal_info_t * traversal_info, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_crawl_revisions3(*args)
def svn_wc_crawl_revisions2(*args):
"""
- svn_wc_crawl_revisions2(char path, svn_wc_adm_access_t adm_access, svn_ra_reporter2_t reporter,
- svn_boolean_t restore_files,
- svn_boolean_t recurse, svn_boolean_t use_commit_times,
- svn_wc_notify_func2_t notify_func,
- svn_wc_traversal_info_t traversal_info,
+ svn_wc_crawl_revisions2(char const * path, svn_wc_adm_access_t * adm_access, svn_ra_reporter2_t reporter,
+ svn_boolean_t restore_files, svn_boolean_t recurse, svn_boolean_t use_commit_times,
+ svn_wc_notify_func2_t notify_func, svn_wc_traversal_info_t * traversal_info,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_crawl_revisions2(*args)
def svn_wc_crawl_revisions(*args):
"""
- svn_wc_crawl_revisions(char path, svn_wc_adm_access_t adm_access, svn_ra_reporter_t reporter,
- void report_baton, svn_boolean_t restore_files,
- svn_boolean_t recurse,
- svn_boolean_t use_commit_times, svn_wc_notify_func_t notify_func,
- svn_wc_traversal_info_t traversal_info,
+ svn_wc_crawl_revisions(char const * path, svn_wc_adm_access_t * adm_access, svn_ra_reporter_t reporter,
+ void * report_baton, svn_boolean_t restore_files, svn_boolean_t recurse, svn_boolean_t use_commit_times,
+ svn_wc_notify_func_t notify_func, svn_wc_traversal_info_t * traversal_info,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_crawl_revisions(*args)
+def svn_wc_check_root(*args):
+ """svn_wc_check_root(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_pool_t scratch_pool) -> svn_error_t"""
+ return _wc.svn_wc_check_root(*args)
+
def svn_wc_is_wc_root2(*args):
- """svn_wc_is_wc_root2(svn_wc_context_t wc_ctx, char local_abspath, apr_pool_t scratch_pool) -> svn_error_t"""
+ """svn_wc_is_wc_root2(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_pool_t scratch_pool) -> svn_error_t"""
return _wc.svn_wc_is_wc_root2(*args)
def svn_wc_is_wc_root(*args):
- """svn_wc_is_wc_root(char path, svn_wc_adm_access_t adm_access, apr_pool_t pool) -> svn_error_t"""
+ """svn_wc_is_wc_root(char const * path, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_is_wc_root(*args)
def svn_wc_get_actual_target2(*args):
- """
- svn_wc_get_actual_target2(svn_wc_context_t wc_ctx, char path, apr_pool_t result_pool,
- apr_pool_t scratch_pool) -> svn_error_t
- """
+ """svn_wc_get_actual_target2(svn_wc_context_t * wc_ctx, char const * path, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
return _wc.svn_wc_get_actual_target2(*args)
def svn_wc_get_actual_target(*args):
- """svn_wc_get_actual_target(char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_wc_get_actual_target(char const * path, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_get_actual_target(*args)
def svn_wc_get_update_editor4(*args):
"""
- svn_wc_get_update_editor4(svn_wc_context_t wc_ctx, char anchor_abspath, char target_basename,
- svn_boolean_t use_commit_times,
- svn_depth_t depth, svn_boolean_t depth_is_sticky,
- svn_boolean_t allow_unver_obstructions,
- svn_boolean_t adds_as_modification, svn_boolean_t server_performs_filtering,
- svn_boolean_t clean_checkout,
- char diff3_cmd, apr_array_header_t preserved_exts,
- svn_wc_dirents_func_t fetch_dirents_func,
- void fetch_dirents_baton,
- svn_wc_conflict_resolver_func2_t conflict_func,
- void conflict_baton, svn_wc_external_update_t external_func,
- void external_baton,
- svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func,
- apr_pool_t result_pool,
- apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_get_update_editor4(svn_wc_context_t * wc_ctx, char const * anchor_abspath, char const * target_basename,
+ svn_boolean_t use_commit_times, svn_depth_t depth, svn_boolean_t depth_is_sticky,
+ svn_boolean_t allow_unver_obstructions, svn_boolean_t adds_as_modification,
+ svn_boolean_t server_performs_filtering, svn_boolean_t clean_checkout,
+ char const * diff3_cmd, apr_array_header_t preserved_exts, svn_wc_dirents_func_t fetch_dirents_func,
+ void * fetch_dirents_baton, svn_wc_conflict_resolver_func2_t conflict_func,
+ void * conflict_baton, svn_wc_external_update_t external_func,
+ void * external_baton, svn_cancel_func_t cancel_func,
+ svn_wc_notify_func2_t notify_func, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_get_update_editor4(*args)
def svn_wc_get_update_editor3(*args):
"""
- svn_wc_get_update_editor3(svn_wc_adm_access_t anchor, char target, svn_boolean_t use_commit_times,
- svn_depth_t depth, svn_boolean_t depth_is_sticky,
- svn_boolean_t allow_unver_obstructions,
- svn_wc_notify_func2_t notify_func,
- svn_cancel_func_t cancel_func, svn_wc_conflict_resolver_func_t conflict_func,
- void conflict_baton,
- svn_wc_get_file_t fetch_func,
- void fetch_baton, char diff3_cmd, apr_array_header_t preserved_exts,
- svn_wc_traversal_info_t ti,
- apr_pool_t pool) -> svn_error_t
+ svn_wc_get_update_editor3(svn_wc_adm_access_t * anchor, char const * target, svn_boolean_t use_commit_times,
+ svn_depth_t depth, svn_boolean_t depth_is_sticky, svn_boolean_t allow_unver_obstructions,
+ svn_wc_notify_func2_t notify_func, svn_cancel_func_t cancel_func,
+ svn_wc_conflict_resolver_func_t conflict_func, void * conflict_baton,
+ svn_wc_get_file_t fetch_func, void * fetch_baton, char const * diff3_cmd,
+ apr_array_header_t preserved_exts, svn_wc_traversal_info_t * ti, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_get_update_editor3(*args)
def svn_wc_get_update_editor2(*args):
"""
- svn_wc_get_update_editor2(svn_wc_adm_access_t anchor, char target, svn_boolean_t use_commit_times,
- svn_boolean_t recurse,
- svn_wc_notify_func2_t notify_func, svn_cancel_func_t cancel_func,
- char diff3_cmd, svn_wc_traversal_info_t ti,
- apr_pool_t pool) -> svn_error_t
+ svn_wc_get_update_editor2(svn_wc_adm_access_t * anchor, char const * target, svn_boolean_t use_commit_times,
+ svn_boolean_t recurse, svn_wc_notify_func2_t notify_func, svn_cancel_func_t cancel_func,
+ char const * diff3_cmd, svn_wc_traversal_info_t * ti, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_get_update_editor2(*args)
def svn_wc_get_update_editor(*args):
"""
- svn_wc_get_update_editor(svn_wc_adm_access_t anchor, char target, svn_boolean_t use_commit_times,
- svn_boolean_t recurse,
- svn_wc_notify_func_t notify_func, svn_cancel_func_t cancel_func,
- char diff3_cmd, svn_wc_traversal_info_t ti,
- apr_pool_t pool) -> svn_error_t
+ svn_wc_get_update_editor(svn_wc_adm_access_t * anchor, char const * target, svn_boolean_t use_commit_times,
+ svn_boolean_t recurse, svn_wc_notify_func_t notify_func, svn_cancel_func_t cancel_func,
+ char const * diff3_cmd, svn_wc_traversal_info_t * ti, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_get_update_editor(*args)
def svn_wc_get_switch_editor4(*args):
"""
- svn_wc_get_switch_editor4(svn_wc_context_t wc_ctx, char anchor_abspath, char target_basename,
- char switch_url, svn_boolean_t use_commit_times,
- svn_depth_t depth, svn_boolean_t depth_is_sticky,
- svn_boolean_t allow_unver_obstructions,
- svn_boolean_t server_performs_filtering,
- char diff3_cmd, apr_array_header_t preserved_exts,
- svn_wc_dirents_func_t fetch_dirents_func,
- void fetch_dirents_baton,
- svn_wc_conflict_resolver_func2_t conflict_func,
- void conflict_baton, svn_wc_external_update_t external_func,
- void external_baton, svn_cancel_func_t cancel_func,
- svn_wc_notify_func2_t notify_func,
- apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_get_switch_editor4(svn_wc_context_t * wc_ctx, char const * anchor_abspath, char const * target_basename,
+ char const * switch_url, svn_boolean_t use_commit_times, svn_depth_t depth,
+ svn_boolean_t depth_is_sticky, svn_boolean_t allow_unver_obstructions,
+ svn_boolean_t server_performs_filtering, char const * diff3_cmd, apr_array_header_t preserved_exts,
+ svn_wc_dirents_func_t fetch_dirents_func, void * fetch_dirents_baton,
+ svn_wc_conflict_resolver_func2_t conflict_func, void * conflict_baton,
+ svn_wc_external_update_t external_func, void * external_baton,
+ svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func, apr_pool_t result_pool,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_get_switch_editor4(*args)
def svn_wc_get_switch_editor3(*args):
"""
- svn_wc_get_switch_editor3(svn_wc_adm_access_t anchor, char target, char switch_url,
- svn_boolean_t use_commit_times, svn_depth_t depth,
- svn_boolean_t depth_is_sticky, svn_boolean_t allow_unver_obstructions,
- svn_wc_notify_func2_t notify_func,
- svn_cancel_func_t cancel_func,
- svn_wc_conflict_resolver_func_t conflict_func,
- void conflict_baton, char diff3_cmd,
- apr_array_header_t preserved_exts, svn_wc_traversal_info_t ti,
- apr_pool_t pool) -> svn_error_t
+ svn_wc_get_switch_editor3(svn_wc_adm_access_t * anchor, char const * target, char const * switch_url, svn_boolean_t use_commit_times,
+ svn_depth_t depth, svn_boolean_t depth_is_sticky,
+ svn_boolean_t allow_unver_obstructions, svn_wc_notify_func2_t notify_func,
+ svn_cancel_func_t cancel_func, svn_wc_conflict_resolver_func_t conflict_func,
+ void * conflict_baton, char const * diff3_cmd, apr_array_header_t preserved_exts,
+ svn_wc_traversal_info_t * ti, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_get_switch_editor3(*args)
def svn_wc_get_switch_editor2(*args):
"""
- svn_wc_get_switch_editor2(svn_wc_adm_access_t anchor, char target, char switch_url,
- svn_boolean_t use_commit_times, svn_boolean_t recurse,
- svn_wc_notify_func2_t notify_func,
- svn_cancel_func_t cancel_func, char diff3_cmd,
- svn_wc_traversal_info_t ti, apr_pool_t pool) -> svn_error_t
+ svn_wc_get_switch_editor2(svn_wc_adm_access_t * anchor, char const * target, char const * switch_url, svn_boolean_t use_commit_times,
+ svn_boolean_t recurse, svn_wc_notify_func2_t notify_func,
+ svn_cancel_func_t cancel_func, char const * diff3_cmd, svn_wc_traversal_info_t * ti,
+ apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_get_switch_editor2(*args)
def svn_wc_get_switch_editor(*args):
"""
- svn_wc_get_switch_editor(svn_wc_adm_access_t anchor, char target, char switch_url,
- svn_boolean_t use_commit_times, svn_boolean_t recurse,
- svn_wc_notify_func_t notify_func,
- svn_cancel_func_t cancel_func, char diff3_cmd,
- svn_wc_traversal_info_t ti, apr_pool_t pool) -> svn_error_t
+ svn_wc_get_switch_editor(svn_wc_adm_access_t * anchor, char const * target, char const * switch_url, svn_boolean_t use_commit_times,
+ svn_boolean_t recurse, svn_wc_notify_func_t notify_func,
+ svn_cancel_func_t cancel_func, char const * diff3_cmd, svn_wc_traversal_info_t * ti,
+ apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_get_switch_editor(*args)
def svn_wc_prop_list2(*args):
- """
- svn_wc_prop_list2(svn_wc_context_t wc_ctx, char local_abspath, apr_pool_t result_pool,
- apr_pool_t scratch_pool) -> svn_error_t
- """
+ """svn_wc_prop_list2(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
return _wc.svn_wc_prop_list2(*args)
def svn_wc_prop_list(*args):
- """svn_wc_prop_list(char path, svn_wc_adm_access_t adm_access, apr_pool_t pool) -> svn_error_t"""
+ """svn_wc_prop_list(char const * path, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_prop_list(*args)
def svn_wc_get_pristine_props(*args):
- """
- svn_wc_get_pristine_props(svn_wc_context_t wc_ctx, char local_abspath, apr_pool_t result_pool,
- apr_pool_t scratch_pool) -> svn_error_t
- """
+ """svn_wc_get_pristine_props(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
return _wc.svn_wc_get_pristine_props(*args)
def svn_wc_prop_get2(*args):
"""
- svn_wc_prop_get2(svn_wc_context_t wc_ctx, char local_abspath, char name,
- apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_prop_get2(svn_wc_context_t * wc_ctx, char const * local_abspath, char const * name, apr_pool_t result_pool,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_prop_get2(*args)
def svn_wc_prop_get(*args):
- """
- svn_wc_prop_get(char name, char path, svn_wc_adm_access_t adm_access,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_wc_prop_get(char const * name, char const * path, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_prop_get(*args)
def svn_wc_prop_set4(*args):
"""
- svn_wc_prop_set4(svn_wc_context_t wc_ctx, char local_abspath, char name,
- svn_string_t value, svn_depth_t depth, svn_boolean_t skip_checks,
- apr_array_header_t changelist_filter,
- svn_cancel_func_t cancel_func,
- svn_wc_notify_func2_t notify_func, apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_prop_set4(svn_wc_context_t * wc_ctx, char const * local_abspath, char const * name, svn_string_t const * value,
+ svn_depth_t depth, svn_boolean_t skip_checks, apr_array_header_t changelist_filter,
+ svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_prop_set4(*args)
def svn_wc_prop_set3(*args):
"""
- svn_wc_prop_set3(char name, svn_string_t value, char path, svn_wc_adm_access_t adm_access,
- svn_boolean_t skip_checks,
- svn_wc_notify_func2_t notify_func, apr_pool_t pool) -> svn_error_t
+ svn_wc_prop_set3(char const * name, svn_string_t const * value, char const * path, svn_wc_adm_access_t * adm_access,
+ svn_boolean_t skip_checks, svn_wc_notify_func2_t notify_func,
+ apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_prop_set3(*args)
def svn_wc_prop_set2(*args):
"""
- svn_wc_prop_set2(char name, svn_string_t value, char path, svn_wc_adm_access_t adm_access,
- svn_boolean_t skip_checks,
- apr_pool_t pool) -> svn_error_t
+ svn_wc_prop_set2(char const * name, svn_string_t const * value, char const * path, svn_wc_adm_access_t * adm_access,
+ svn_boolean_t skip_checks, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_prop_set2(*args)
def svn_wc_prop_set(*args):
"""
- svn_wc_prop_set(char name, svn_string_t value, char path, svn_wc_adm_access_t adm_access,
+ svn_wc_prop_set(char const * name, svn_string_t const * value, char const * path, svn_wc_adm_access_t * adm_access,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_prop_set(*args)
def svn_wc_is_normal_prop(*args):
- """svn_wc_is_normal_prop(char name) -> svn_boolean_t"""
+ """svn_wc_is_normal_prop(char const * name) -> svn_boolean_t"""
return _wc.svn_wc_is_normal_prop(*args)
def svn_wc_is_wc_prop(*args):
- """svn_wc_is_wc_prop(char name) -> svn_boolean_t"""
+ """svn_wc_is_wc_prop(char const * name) -> svn_boolean_t"""
return _wc.svn_wc_is_wc_prop(*args)
def svn_wc_is_entry_prop(*args):
- """svn_wc_is_entry_prop(char name) -> svn_boolean_t"""
+ """svn_wc_is_entry_prop(char const * name) -> svn_boolean_t"""
return _wc.svn_wc_is_entry_prop(*args)
def svn_wc_canonicalize_svn_prop(*args):
"""
- svn_wc_canonicalize_svn_prop(char propname, svn_string_t propval, char path, svn_node_kind_t kind,
- svn_boolean_t skip_some_checks,
- svn_wc_canonicalize_svn_prop_get_file_t prop_getter,
- void getter_baton, apr_pool_t pool) -> svn_error_t
+ svn_wc_canonicalize_svn_prop(char const * propname, svn_string_t const * propval, char const * path, svn_node_kind_t kind,
+ svn_boolean_t skip_some_checks, svn_wc_canonicalize_svn_prop_get_file_t prop_getter,
+ void * getter_baton, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_canonicalize_svn_prop(*args)
def svn_wc_get_diff_editor6(*args):
"""
- svn_wc_get_diff_editor6(svn_wc_context_t wc_ctx, char anchor_abspath, char target,
- svn_depth_t depth, svn_boolean_t ignore_ancestry,
- svn_boolean_t show_copies_as_adds,
- svn_boolean_t use_git_diff_format, svn_boolean_t use_text_base,
- svn_boolean_t reverse_order,
- svn_boolean_t server_performs_filtering,
- apr_array_header_t changelist_filter, svn_wc_diff_callbacks4_t callbacks,
- void callback_baton,
- svn_cancel_func_t cancel_func, apr_pool_t result_pool,
- apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_get_diff_editor6(svn_wc_context_t * wc_ctx, char const * anchor_abspath, char const * target, svn_depth_t depth,
+ svn_boolean_t ignore_ancestry, svn_boolean_t show_copies_as_adds,
+ svn_boolean_t use_git_diff_format, svn_boolean_t use_text_base, svn_boolean_t reverse_order,
+ svn_boolean_t server_performs_filtering, apr_array_header_t changelist_filter,
+ svn_wc_diff_callbacks4_t callbacks, void * callback_baton,
+ svn_cancel_func_t cancel_func, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_get_diff_editor6(*args)
def svn_wc_get_diff_editor5(*args):
"""
- svn_wc_get_diff_editor5(svn_wc_adm_access_t anchor, char target, svn_wc_diff_callbacks3_t callbacks,
- void callback_baton,
- svn_depth_t depth, svn_boolean_t ignore_ancestry,
- svn_boolean_t use_text_base, svn_boolean_t reverse_order,
- svn_cancel_func_t cancel_func,
+ svn_wc_get_diff_editor5(svn_wc_adm_access_t * anchor, char const * target, svn_wc_diff_callbacks3_t callbacks,
+ void * callback_baton, svn_depth_t depth, svn_boolean_t ignore_ancestry,
+ svn_boolean_t use_text_base, svn_boolean_t reverse_order, svn_cancel_func_t cancel_func,
apr_array_header_t changelist_filter, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_get_diff_editor5(*args)
def svn_wc_get_diff_editor4(*args):
"""
- svn_wc_get_diff_editor4(svn_wc_adm_access_t anchor, char target, svn_wc_diff_callbacks2_t callbacks,
- svn_depth_t depth,
- svn_boolean_t ignore_ancestry, svn_boolean_t use_text_base,
- svn_boolean_t reverse_order, svn_cancel_func_t cancel_func,
- apr_array_header_t changelist_filter,
+ svn_wc_get_diff_editor4(svn_wc_adm_access_t * anchor, char const * target, svn_wc_diff_callbacks2_t callbacks,
+ svn_depth_t depth, svn_boolean_t ignore_ancestry, svn_boolean_t use_text_base,
+ svn_boolean_t reverse_order, svn_cancel_func_t cancel_func, apr_array_header_t changelist_filter,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_get_diff_editor4(*args)
def svn_wc_get_diff_editor3(*args):
"""
- svn_wc_get_diff_editor3(svn_wc_adm_access_t anchor, char target, svn_wc_diff_callbacks2_t callbacks,
- svn_boolean_t recurse,
- svn_boolean_t ignore_ancestry, svn_boolean_t use_text_base,
- svn_boolean_t reverse_order,
- svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
+ svn_wc_get_diff_editor3(svn_wc_adm_access_t * anchor, char const * target, svn_wc_diff_callbacks2_t callbacks,
+ svn_boolean_t recurse, svn_boolean_t ignore_ancestry, svn_boolean_t use_text_base,
+ svn_boolean_t reverse_order, svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_get_diff_editor3(*args)
def svn_wc_get_diff_editor2(*args):
"""
- svn_wc_get_diff_editor2(svn_wc_adm_access_t anchor, char target, svn_wc_diff_callbacks_t callbacks,
- void callback_baton,
- svn_boolean_t recurse, svn_boolean_t ignore_ancestry,
- svn_boolean_t use_text_base, svn_boolean_t reverse_order,
- svn_cancel_func_t cancel_func,
+ svn_wc_get_diff_editor2(svn_wc_adm_access_t * anchor, char const * target, svn_wc_diff_callbacks_t callbacks,
+ void * callback_baton, svn_boolean_t recurse, svn_boolean_t ignore_ancestry,
+ svn_boolean_t use_text_base, svn_boolean_t reverse_order, svn_cancel_func_t cancel_func,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_get_diff_editor2(*args)
def svn_wc_get_diff_editor(*args):
"""
- svn_wc_get_diff_editor(svn_wc_adm_access_t anchor, char target, svn_wc_diff_callbacks_t callbacks,
- void callback_baton,
- svn_boolean_t recurse, svn_boolean_t use_text_base,
- svn_boolean_t reverse_order, svn_cancel_func_t cancel_func,
- apr_pool_t pool) -> svn_error_t
+ svn_wc_get_diff_editor(svn_wc_adm_access_t * anchor, char const * target, svn_wc_diff_callbacks_t callbacks,
+ void * callback_baton, svn_boolean_t recurse, svn_boolean_t use_text_base,
+ svn_boolean_t reverse_order, svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_get_diff_editor(*args)
def svn_wc_diff6(*args):
"""
- svn_wc_diff6(svn_wc_context_t wc_ctx, char target_abspath, svn_wc_diff_callbacks4_t callbacks,
- void callback_baton,
- svn_depth_t depth, svn_boolean_t ignore_ancestry,
- svn_boolean_t show_copies_as_adds,
- svn_boolean_t use_git_diff_format, apr_array_header_t changelist_filter,
- svn_cancel_func_t cancel_func,
- apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_diff6(svn_wc_context_t * wc_ctx, char const * target_abspath, svn_wc_diff_callbacks4_t callbacks,
+ void * callback_baton, svn_depth_t depth, svn_boolean_t ignore_ancestry,
+ svn_boolean_t show_copies_as_adds, svn_boolean_t use_git_diff_format,
+ apr_array_header_t changelist_filter, svn_cancel_func_t cancel_func, apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_diff6(*args)
def svn_wc_diff5(*args):
"""
- svn_wc_diff5(svn_wc_adm_access_t anchor, char target, svn_wc_diff_callbacks3_t callbacks,
- void callback_baton,
- svn_depth_t depth, svn_boolean_t ignore_ancestry,
- apr_array_header_t changelist_filter,
- apr_pool_t pool) -> svn_error_t
+ svn_wc_diff5(svn_wc_adm_access_t * anchor, char const * target, svn_wc_diff_callbacks3_t callbacks,
+ void * callback_baton, svn_depth_t depth, svn_boolean_t ignore_ancestry,
+ apr_array_header_t changelist_filter, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_diff5(*args)
def svn_wc_diff4(*args):
"""
- svn_wc_diff4(svn_wc_adm_access_t anchor, char target, svn_wc_diff_callbacks2_t callbacks,
- svn_depth_t depth,
- svn_boolean_t ignore_ancestry, apr_array_header_t changelist_filter,
+ svn_wc_diff4(svn_wc_adm_access_t * anchor, char const * target, svn_wc_diff_callbacks2_t callbacks,
+ svn_depth_t depth, svn_boolean_t ignore_ancestry, apr_array_header_t changelist_filter,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_diff4(*args)
def svn_wc_diff3(*args):
"""
- svn_wc_diff3(svn_wc_adm_access_t anchor, char target, svn_wc_diff_callbacks2_t callbacks,
- svn_boolean_t recurse,
- svn_boolean_t ignore_ancestry, apr_pool_t pool) -> svn_error_t
+ svn_wc_diff3(svn_wc_adm_access_t * anchor, char const * target, svn_wc_diff_callbacks2_t callbacks,
+ svn_boolean_t recurse, svn_boolean_t ignore_ancestry, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_diff3(*args)
def svn_wc_diff2(*args):
"""
- svn_wc_diff2(svn_wc_adm_access_t anchor, char target, svn_wc_diff_callbacks_t callbacks,
- void callback_baton,
- svn_boolean_t recurse, svn_boolean_t ignore_ancestry,
+ svn_wc_diff2(svn_wc_adm_access_t * anchor, char const * target, svn_wc_diff_callbacks_t callbacks,
+ void * callback_baton, svn_boolean_t recurse, svn_boolean_t ignore_ancestry,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_diff2(*args)
def svn_wc_diff(*args):
"""
- svn_wc_diff(svn_wc_adm_access_t anchor, char target, svn_wc_diff_callbacks_t callbacks,
- void callback_baton,
- svn_boolean_t recurse, apr_pool_t pool) -> svn_error_t
+ svn_wc_diff(svn_wc_adm_access_t * anchor, char const * target, svn_wc_diff_callbacks_t callbacks,
+ void * callback_baton, svn_boolean_t recurse, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_diff(*args)
def svn_wc_get_prop_diffs2(*args):
- """
- svn_wc_get_prop_diffs2(svn_wc_context_t wc_ctx, char local_abspath, apr_pool_t result_pool,
- apr_pool_t scratch_pool) -> svn_error_t
- """
+ """svn_wc_get_prop_diffs2(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
return _wc.svn_wc_get_prop_diffs2(*args)
def svn_wc_get_prop_diffs(*args):
- """svn_wc_get_prop_diffs(char path, svn_wc_adm_access_t adm_access, apr_pool_t pool) -> svn_error_t"""
+ """svn_wc_get_prop_diffs(char const * path, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_get_prop_diffs(*args)
svn_wc_merge_unchanged = _wc.svn_wc_merge_unchanged
svn_wc_merge_merged = _wc.svn_wc_merge_merged
svn_wc_merge_conflict = _wc.svn_wc_merge_conflict
svn_wc_merge_no_merge = _wc.svn_wc_merge_no_merge
+def svn_wc_merge5(*args):
+ """
+ svn_wc_merge5(enum svn_wc_notify_state_t * merge_props_state, svn_wc_context_t * wc_ctx, char const * left_abspath,
+ char const * right_abspath, char const * target_abspath,
+ char const * left_label, char const * right_label, char const * target_label,
+ svn_wc_conflict_version_t left_version, svn_wc_conflict_version_t right_version,
+ svn_boolean_t dry_run, char const * diff3_cmd, apr_array_header_t merge_options,
+ apr_hash_t original_props, apr_array_header_t prop_diff,
+ svn_wc_conflict_resolver_func2_t conflict_func, void * conflict_baton, svn_cancel_func_t cancel_func,
+ apr_pool_t scratch_pool) -> svn_error_t
+ """
+ return _wc.svn_wc_merge5(*args)
+
def svn_wc_merge4(*args):
"""
- svn_wc_merge4(svn_wc_context_t wc_ctx, char left_abspath, char right_abspath,
- char target_abspath, char left_label,
- char right_label, char target_label, svn_wc_conflict_version_t left_version,
- svn_wc_conflict_version_t right_version,
- svn_boolean_t dry_run,
- char diff3_cmd, apr_array_header_t merge_options,
- apr_array_header_t prop_diff,
- svn_wc_conflict_resolver_func2_t conflict_func,
- void conflict_baton, svn_cancel_func_t cancel_func,
+ svn_wc_merge4(svn_wc_context_t * wc_ctx, char const * left_abspath, char const * right_abspath,
+ char const * target_abspath, char const * left_label, char const * right_label,
+ char const * target_label, svn_wc_conflict_version_t left_version, svn_wc_conflict_version_t right_version,
+ svn_boolean_t dry_run, char const * diff3_cmd,
+ apr_array_header_t merge_options, apr_array_header_t prop_diff,
+ svn_wc_conflict_resolver_func2_t conflict_func, void * conflict_baton, svn_cancel_func_t cancel_func,
apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_merge4(*args)
def svn_wc_merge3(*args):
"""
- svn_wc_merge3(char left, char right, char merge_target, svn_wc_adm_access_t adm_access,
- char left_label, char right_label,
- char target_label, svn_boolean_t dry_run,
- char diff3_cmd, apr_array_header_t merge_options,
- apr_array_header_t prop_diff,
- svn_wc_conflict_resolver_func_t conflict_func,
- void conflict_baton, apr_pool_t pool) -> svn_error_t
+ svn_wc_merge3(char const * left, char const * right, char const * merge_target, svn_wc_adm_access_t * adm_access,
+ char const * left_label, char const * right_label, char const * target_label,
+ svn_boolean_t dry_run, char const * diff3_cmd, apr_array_header_t merge_options,
+ apr_array_header_t prop_diff, svn_wc_conflict_resolver_func_t conflict_func,
+ void * conflict_baton, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_merge3(*args)
def svn_wc_merge2(*args):
"""
- svn_wc_merge2(char left, char right, char merge_target, svn_wc_adm_access_t adm_access,
- char left_label, char right_label,
- char target_label, svn_boolean_t dry_run,
- char diff3_cmd, apr_array_header_t merge_options,
+ svn_wc_merge2(char const * left, char const * right, char const * merge_target, svn_wc_adm_access_t * adm_access,
+ char const * left_label, char const * right_label, char const * target_label,
+ svn_boolean_t dry_run, char const * diff3_cmd, apr_array_header_t merge_options,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_merge2(*args)
def svn_wc_merge(*args):
"""
- svn_wc_merge(char left, char right, char merge_target, svn_wc_adm_access_t adm_access,
- char left_label, char right_label,
- char target_label, svn_boolean_t dry_run,
- char diff3_cmd, apr_pool_t pool) -> svn_error_t
+ svn_wc_merge(char const * left, char const * right, char const * merge_target, svn_wc_adm_access_t * adm_access,
+ char const * left_label, char const * right_label, char const * target_label,
+ svn_boolean_t dry_run, char const * diff3_cmd, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_merge(*args)
def svn_wc_merge_props3(*args):
"""
- svn_wc_merge_props3(svn_wc_notify_state_t state, svn_wc_context_t wc_ctx,
- char local_abspath, svn_wc_conflict_version_t left_version,
- svn_wc_conflict_version_t right_version,
- apr_hash_t baseprops, apr_array_header_t propchanges,
- svn_boolean_t dry_run,
- svn_wc_conflict_resolver_func2_t conflict_func,
- void conflict_baton, svn_cancel_func_t cancel_func,
- apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_merge_props3(svn_wc_notify_state_t * state, svn_wc_context_t * wc_ctx, char const * local_abspath,
+ svn_wc_conflict_version_t left_version, svn_wc_conflict_version_t right_version,
+ apr_hash_t baseprops, apr_array_header_t propchanges, svn_boolean_t dry_run,
+ svn_wc_conflict_resolver_func2_t conflict_func, void * conflict_baton,
+ svn_cancel_func_t cancel_func, apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_merge_props3(*args)
def svn_wc_merge_props2(*args):
"""
- svn_wc_merge_props2(svn_wc_notify_state_t state, char path, svn_wc_adm_access_t adm_access,
- apr_hash_t baseprops, apr_array_header_t propchanges,
- svn_boolean_t base_merge,
+ svn_wc_merge_props2(svn_wc_notify_state_t * state, char const * path, svn_wc_adm_access_t * adm_access,
+ apr_hash_t baseprops, apr_array_header_t propchanges, svn_boolean_t base_merge,
svn_boolean_t dry_run, svn_wc_conflict_resolver_func_t conflict_func,
- void conflict_baton,
- apr_pool_t pool) -> svn_error_t
+ void * conflict_baton, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_merge_props2(*args)
def svn_wc_merge_props(*args):
"""
- svn_wc_merge_props(svn_wc_notify_state_t state, char path, svn_wc_adm_access_t adm_access,
- apr_hash_t baseprops, apr_array_header_t propchanges,
- svn_boolean_t base_merge,
+ svn_wc_merge_props(svn_wc_notify_state_t * state, char const * path, svn_wc_adm_access_t * adm_access,
+ apr_hash_t baseprops, apr_array_header_t propchanges, svn_boolean_t base_merge,
svn_boolean_t dry_run, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_merge_props(*args)
def svn_wc_merge_prop_diffs(*args):
"""
- svn_wc_merge_prop_diffs(svn_wc_notify_state_t state, char path, svn_wc_adm_access_t adm_access,
- apr_array_header_t propchanges,
- svn_boolean_t base_merge, svn_boolean_t dry_run,
+ svn_wc_merge_prop_diffs(svn_wc_notify_state_t * state, char const * path, svn_wc_adm_access_t * adm_access,
+ apr_array_header_t propchanges, svn_boolean_t base_merge, svn_boolean_t dry_run,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_merge_prop_diffs(*args)
def svn_wc_get_pristine_contents2(*args):
- """
- svn_wc_get_pristine_contents2(svn_wc_context_t wc_ctx, char local_abspath, apr_pool_t result_pool,
- apr_pool_t scratch_pool) -> svn_error_t
- """
+ """svn_wc_get_pristine_contents2(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
return _wc.svn_wc_get_pristine_contents2(*args)
def svn_wc_get_pristine_contents(*args):
- """svn_wc_get_pristine_contents(char path, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
+ """svn_wc_get_pristine_contents(char const * path, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t"""
return _wc.svn_wc_get_pristine_contents(*args)
def svn_wc_get_pristine_copy_path(*args):
- """svn_wc_get_pristine_copy_path(char path, apr_pool_t pool) -> svn_error_t"""
+ """svn_wc_get_pristine_copy_path(char const * path, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_get_pristine_copy_path(*args)
def svn_wc_cleanup3(*args):
"""
- svn_wc_cleanup3(svn_wc_context_t wc_ctx, char local_abspath, svn_cancel_func_t cancel_func,
+ svn_wc_cleanup3(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_cancel_func_t cancel_func,
apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_cleanup3(*args)
def svn_wc_cleanup2(*args):
- """
- svn_wc_cleanup2(char path, char diff3_cmd, svn_cancel_func_t cancel_func,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_wc_cleanup2(char const * path, char const * diff3_cmd, svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_cleanup2(*args)
def svn_wc_cleanup(*args):
"""
- svn_wc_cleanup(char path, svn_wc_adm_access_t optional_adm_access,
- char diff3_cmd, svn_cancel_func_t cancel_func,
- apr_pool_t pool) -> svn_error_t
+ svn_wc_cleanup(char const * path, svn_wc_adm_access_t * optional_adm_access, char const * diff3_cmd,
+ svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_cleanup(*args)
def svn_wc_upgrade(*args):
"""
- svn_wc_upgrade(svn_wc_context_t wc_ctx, char local_abspath, svn_wc_upgrade_get_repos_info_t repos_info_func,
- void repos_info_baton,
- svn_cancel_func_t cancel_func,
+ svn_wc_upgrade(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_wc_upgrade_get_repos_info_t repos_info_func,
+ void * repos_info_baton, svn_cancel_func_t cancel_func,
svn_wc_notify_func2_t notify_func, apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_upgrade(*args)
def svn_wc_relocate4(*args):
"""
- svn_wc_relocate4(svn_wc_context_t wc_ctx, char wcroot_abspath, char _from,
- char to, svn_wc_relocation_validator3_t validator,
- void validator_baton, apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_relocate4(svn_wc_context_t * wc_ctx, char const * wcroot_abspath, char const * _from, char const * to,
+ svn_wc_relocation_validator3_t validator, void * validator_baton,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_relocate4(*args)
def svn_wc_relocate3(*args):
"""
- svn_wc_relocate3(char path, svn_wc_adm_access_t adm_access, char _from,
- char to, svn_boolean_t recurse, svn_wc_relocation_validator3_t validator,
- void validator_baton,
+ svn_wc_relocate3(char const * path, svn_wc_adm_access_t * adm_access, char const * _from, char const * to,
+ svn_boolean_t recurse, svn_wc_relocation_validator3_t validator, void * validator_baton,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_relocate3(*args)
def svn_wc_relocate2(*args):
"""
- svn_wc_relocate2(char path, svn_wc_adm_access_t adm_access, char _from,
- char to, svn_boolean_t recurse, svn_wc_relocation_validator2_t validator,
- void validator_baton,
+ svn_wc_relocate2(char const * path, svn_wc_adm_access_t * adm_access, char const * _from, char const * to,
+ svn_boolean_t recurse, svn_wc_relocation_validator2_t validator, void * validator_baton,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_relocate2(*args)
def svn_wc_relocate(*args):
"""
- svn_wc_relocate(char path, svn_wc_adm_access_t adm_access, char _from,
- char to, svn_boolean_t recurse, svn_wc_relocation_validator_t validator,
- void validator_baton,
+ svn_wc_relocate(char const * path, svn_wc_adm_access_t * adm_access, char const * _from, char const * to,
+ svn_boolean_t recurse, svn_wc_relocation_validator_t validator, void * validator_baton,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_relocate(*args)
def svn_wc_revert4(*args):
"""
- svn_wc_revert4(svn_wc_context_t wc_ctx, char local_abspath, svn_depth_t depth,
- svn_boolean_t use_commit_times,
+ svn_wc_revert4(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_depth_t depth, svn_boolean_t use_commit_times,
apr_array_header_t changelist_filter, svn_cancel_func_t cancel_func,
- svn_wc_notify_func2_t notify_func,
- apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_notify_func2_t notify_func, apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_revert4(*args)
def svn_wc_revert3(*args):
"""
- svn_wc_revert3(char path, svn_wc_adm_access_t parent_access, svn_depth_t depth,
- svn_boolean_t use_commit_times,
+ svn_wc_revert3(char const * path, svn_wc_adm_access_t * parent_access, svn_depth_t depth, svn_boolean_t use_commit_times,
apr_array_header_t changelist_filter, svn_cancel_func_t cancel_func,
- svn_wc_notify_func2_t notify_func,
- apr_pool_t pool) -> svn_error_t
+ svn_wc_notify_func2_t notify_func, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_revert3(*args)
def svn_wc_revert2(*args):
"""
- svn_wc_revert2(char path, svn_wc_adm_access_t parent_access, svn_boolean_t recursive,
- svn_boolean_t use_commit_times,
- svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func,
+ svn_wc_revert2(char const * path, svn_wc_adm_access_t * parent_access, svn_boolean_t recursive,
+ svn_boolean_t use_commit_times, svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_revert2(*args)
def svn_wc_revert(*args):
"""
- svn_wc_revert(char path, svn_wc_adm_access_t parent_access, svn_boolean_t recursive,
- svn_boolean_t use_commit_times,
- svn_cancel_func_t cancel_func, svn_wc_notify_func_t notify_func,
+ svn_wc_revert(char const * path, svn_wc_adm_access_t * parent_access, svn_boolean_t recursive,
+ svn_boolean_t use_commit_times, svn_cancel_func_t cancel_func, svn_wc_notify_func_t notify_func,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_revert(*args)
def svn_wc_restore(*args):
"""
- svn_wc_restore(svn_wc_context_t wc_ctx, char local_abspath, svn_boolean_t use_commit_times,
+ svn_wc_restore(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_boolean_t use_commit_times,
apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_restore(*args)
def svn_wc_create_tmp_file2(*args):
- """svn_wc_create_tmp_file2(char path, svn_io_file_del_t delete_when, apr_pool_t pool) -> svn_error_t"""
+ """svn_wc_create_tmp_file2(char const * path, svn_io_file_del_t delete_when, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_create_tmp_file2(*args)
def svn_wc_create_tmp_file(*args):
- """svn_wc_create_tmp_file(char path, svn_boolean_t delete_on_close, apr_pool_t pool) -> svn_error_t"""
+ """svn_wc_create_tmp_file(char const * path, svn_boolean_t delete_on_close, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_create_tmp_file(*args)
def svn_wc_translated_file2(*args):
"""
- svn_wc_translated_file2(char src, char versioned_file, svn_wc_adm_access_t adm_access,
+ svn_wc_translated_file2(char const * src, char const * versioned_file, svn_wc_adm_access_t * adm_access,
apr_uint32_t flags, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_translated_file2(*args)
def svn_wc_translated_file(*args):
"""
- svn_wc_translated_file(char vfile, svn_wc_adm_access_t adm_access, svn_boolean_t force_repair,
+ svn_wc_translated_file(char const * vfile, svn_wc_adm_access_t * adm_access, svn_boolean_t force_repair,
apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_translated_file(*args)
def svn_wc_translated_stream(*args):
"""
- svn_wc_translated_stream(char path, char versioned_file, svn_wc_adm_access_t adm_access,
+ svn_wc_translated_stream(char const * path, char const * versioned_file, svn_wc_adm_access_t * adm_access,
apr_uint32_t flags, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_translated_stream(*args)
def svn_wc_transmit_text_deltas3(*args):
"""
- svn_wc_transmit_text_deltas3(svn_wc_context_t wc_ctx, char local_abspath, svn_boolean_t fulltext,
- svn_delta_editor_t editor,
- void file_baton, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_transmit_text_deltas3(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_boolean_t fulltext, svn_delta_editor_t editor,
+ void * file_baton, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_transmit_text_deltas3(*args)
def svn_wc_transmit_text_deltas2(*args):
"""
- svn_wc_transmit_text_deltas2(char path, svn_wc_adm_access_t adm_access, svn_boolean_t fulltext,
- svn_delta_editor_t editor, void file_baton,
- apr_pool_t pool) -> svn_error_t
+ svn_wc_transmit_text_deltas2(char const * path, svn_wc_adm_access_t * adm_access, svn_boolean_t fulltext, svn_delta_editor_t editor,
+ void * file_baton, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_transmit_text_deltas2(*args)
def svn_wc_transmit_text_deltas(*args):
"""
- svn_wc_transmit_text_deltas(char path, svn_wc_adm_access_t adm_access, svn_boolean_t fulltext,
- svn_delta_editor_t editor, void file_baton,
- apr_pool_t pool) -> svn_error_t
+ svn_wc_transmit_text_deltas(char const * path, svn_wc_adm_access_t * adm_access, svn_boolean_t fulltext, svn_delta_editor_t editor,
+ void * file_baton, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_transmit_text_deltas(*args)
def svn_wc_transmit_prop_deltas2(*args):
"""
- svn_wc_transmit_prop_deltas2(svn_wc_context_t wc_ctx, char local_abspath, svn_delta_editor_t editor,
- void baton, apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_transmit_prop_deltas2(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_delta_editor_t editor,
+ void * baton, apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_transmit_prop_deltas2(*args)
def svn_wc_transmit_prop_deltas(*args):
"""
- svn_wc_transmit_prop_deltas(char path, svn_wc_adm_access_t adm_access, svn_wc_entry_t entry,
- svn_delta_editor_t editor, void baton,
- apr_pool_t pool) -> svn_error_t
+ svn_wc_transmit_prop_deltas(char const * path, svn_wc_adm_access_t * adm_access, svn_wc_entry_t entry, svn_delta_editor_t editor,
+ void * baton, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_transmit_prop_deltas(*args)
@@ -3277,42 +3140,33 @@ def svn_wc_get_default_ignores(*args):
def svn_wc_get_ignores2(*args):
"""
- svn_wc_get_ignores2(svn_wc_context_t wc_ctx, char local_abspath, apr_hash_t config,
- apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_get_ignores2(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_hash_t config, apr_pool_t result_pool,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_get_ignores2(*args)
def svn_wc_get_ignores(*args):
- """
- svn_wc_get_ignores(apr_hash_t config, svn_wc_adm_access_t adm_access,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_wc_get_ignores(apr_hash_t config, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_get_ignores(*args)
def svn_wc_match_ignore_list(*args):
- """svn_wc_match_ignore_list(char str, apr_array_header_t list, apr_pool_t pool) -> svn_boolean_t"""
+ """svn_wc_match_ignore_list(char const * str, apr_array_header_t list, apr_pool_t pool) -> svn_boolean_t"""
return _wc.svn_wc_match_ignore_list(*args)
def svn_wc_add_lock2(*args):
- """
- svn_wc_add_lock2(svn_wc_context_t wc_ctx, char abspath, svn_lock_t lock,
- apr_pool_t scratch_pool) -> svn_error_t
- """
+ """svn_wc_add_lock2(svn_wc_context_t * wc_ctx, char const * abspath, svn_lock_t lock, apr_pool_t scratch_pool) -> svn_error_t"""
return _wc.svn_wc_add_lock2(*args)
def svn_wc_add_lock(*args):
- """
- svn_wc_add_lock(char path, svn_lock_t lock, svn_wc_adm_access_t adm_access,
- apr_pool_t pool) -> svn_error_t
- """
+ """svn_wc_add_lock(char const * path, svn_lock_t lock, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_add_lock(*args)
def svn_wc_remove_lock2(*args):
- """svn_wc_remove_lock2(svn_wc_context_t wc_ctx, char local_abspath, apr_pool_t scratch_pool) -> svn_error_t"""
+ """svn_wc_remove_lock2(svn_wc_context_t * wc_ctx, char const * local_abspath, apr_pool_t scratch_pool) -> svn_error_t"""
return _wc.svn_wc_remove_lock2(*args)
def svn_wc_remove_lock(*args):
- """svn_wc_remove_lock(char path, svn_wc_adm_access_t adm_access, apr_pool_t pool) -> svn_error_t"""
+ """svn_wc_remove_lock(char const * path, svn_wc_adm_access_t * adm_access, apr_pool_t pool) -> svn_error_t"""
return _wc.svn_wc_remove_lock(*args)
class svn_wc_revision_status_t:
"""Proxy of C svn_wc_revision_status_t struct"""
@@ -3374,7 +3228,7 @@ class svn_wc_revision_status_t:
return _swig_setattr(self, self.__class__, name, value)
def __init__(self):
- """__init__(self) -> svn_wc_revision_status_t"""
+ """__init__(svn_wc_revision_status_t self) -> svn_wc_revision_status_t"""
this = _wc.new_svn_wc_revision_status_t()
try: self.this.append(this)
except: self.this = this
@@ -3386,76 +3240,72 @@ svn_wc_revision_status_t_swigregister(svn_wc_revision_status_t)
def svn_wc_revision_status2(*args):
"""
- svn_wc_revision_status2(svn_wc_context_t wc_ctx, char local_abspath, char trail_url,
- svn_boolean_t committed, svn_cancel_func_t cancel_func,
- apr_pool_t result_pool,
+ svn_wc_revision_status2(svn_wc_context_t * wc_ctx, char const * local_abspath, char const * trail_url, svn_boolean_t committed,
+ svn_cancel_func_t cancel_func, apr_pool_t result_pool,
apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_revision_status2(*args)
def svn_wc_revision_status(*args):
"""
- svn_wc_revision_status(char wc_path, char trail_url, svn_boolean_t committed,
- svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
+ svn_wc_revision_status(char const * wc_path, char const * trail_url, svn_boolean_t committed, svn_cancel_func_t cancel_func,
+ apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_revision_status(*args)
def svn_wc_set_changelist2(*args):
"""
- svn_wc_set_changelist2(svn_wc_context_t wc_ctx, char local_abspath, char changelist,
- svn_depth_t depth, apr_array_header_t changelist_filter,
- svn_cancel_func_t cancel_func,
+ svn_wc_set_changelist2(svn_wc_context_t * wc_ctx, char const * local_abspath, char const * changelist, svn_depth_t depth,
+ apr_array_header_t changelist_filter, svn_cancel_func_t cancel_func,
svn_wc_notify_func2_t notify_func, apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_set_changelist2(*args)
def svn_wc_set_changelist(*args):
"""
- svn_wc_set_changelist(char path, char changelist, svn_wc_adm_access_t adm_access,
- svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func,
- apr_pool_t pool) -> svn_error_t
+ svn_wc_set_changelist(char const * path, char const * changelist, svn_wc_adm_access_t * adm_access, svn_cancel_func_t cancel_func,
+ svn_wc_notify_func2_t notify_func, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_set_changelist(*args)
def svn_wc_get_changelists(*args):
"""
- svn_wc_get_changelists(svn_wc_context_t wc_ctx, char local_abspath, svn_depth_t depth,
- apr_array_header_t changelist_filter,
- svn_changelist_receiver_t callback_func,
- void callback_baton, svn_cancel_func_t cancel_func,
- apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_get_changelists(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_depth_t depth, apr_array_header_t changelist_filter,
+ svn_changelist_receiver_t callback_func, void * callback_baton,
+ svn_cancel_func_t cancel_func, apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_get_changelists(*args)
def svn_wc_crop_tree2(*args):
"""
- svn_wc_crop_tree2(svn_wc_context_t wc_ctx, char local_abspath, svn_depth_t depth,
- svn_cancel_func_t cancel_func, svn_wc_notify_func2_t notify_func,
- apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_crop_tree2(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_depth_t depth, svn_cancel_func_t cancel_func,
+ svn_wc_notify_func2_t notify_func, apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_crop_tree2(*args)
def svn_wc_crop_tree(*args):
"""
- svn_wc_crop_tree(svn_wc_adm_access_t anchor, char target, svn_depth_t depth,
- svn_wc_notify_func2_t notify_func, svn_cancel_func_t cancel_func,
- apr_pool_t pool) -> svn_error_t
+ svn_wc_crop_tree(svn_wc_adm_access_t * anchor, char const * target, svn_depth_t depth, svn_wc_notify_func2_t notify_func,
+ svn_cancel_func_t cancel_func, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_crop_tree(*args)
def svn_wc_exclude(*args):
"""
- svn_wc_exclude(svn_wc_context_t wc_ctx, char local_abspath, svn_cancel_func_t cancel_func,
- svn_wc_notify_func2_t notify_func,
- apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_exclude(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_cancel_func_t cancel_func,
+ svn_wc_notify_func2_t notify_func, apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_exclude(*args)
-def svn_wc_read_kind(*args):
+def svn_wc_read_kind2(*args):
"""
- svn_wc_read_kind(svn_wc_context_t wc_ctx, char abspath, svn_boolean_t show_hidden,
- apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_read_kind2(svn_wc_context_t * wc_ctx, char const * local_abspath, svn_boolean_t show_deleted,
+ svn_boolean_t show_hidden, apr_pool_t scratch_pool) -> svn_error_t
"""
+ return _wc.svn_wc_read_kind2(*args)
+
+def svn_wc_read_kind(*args):
+ """svn_wc_read_kind(svn_wc_context_t * wc_ctx, char const * abspath, svn_boolean_t show_hidden, apr_pool_t scratch_pool) -> svn_error_t"""
return _wc.svn_wc_read_kind(*args)
class svn_wc_context_t:
"""Proxy of C svn_wc_context_t struct"""
@@ -3672,414 +3522,369 @@ svn_wc_committed_queue_t_swigregister(svn_wc_committed_queue_t)
def svn_wc_diff_callbacks4_invoke_file_opened(*args):
"""
- svn_wc_diff_callbacks4_invoke_file_opened(svn_wc_diff_callbacks4_t _obj, char path, svn_revnum_t rev,
- void diff_baton, apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_diff_callbacks4_invoke_file_opened(svn_wc_diff_callbacks4_t _obj, char const * path, svn_revnum_t rev, void * diff_baton,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks4_invoke_file_opened(*args)
def svn_wc_diff_callbacks4_invoke_file_changed(*args):
"""
- svn_wc_diff_callbacks4_invoke_file_changed(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t contentstate,
- svn_wc_notify_state_t propstate,
- char path, char tmpfile1, char tmpfile2,
- svn_revnum_t rev1, svn_revnum_t rev2, char mimetype1,
- char mimetype2, apr_array_header_t propchanges,
- apr_hash_t originalprops, void diff_baton,
- apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_diff_callbacks4_invoke_file_changed(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t * contentstate, svn_wc_notify_state_t * propstate,
+ char const * path, char const * tmpfile1, char const * tmpfile2,
+ svn_revnum_t rev1, svn_revnum_t rev2, char const * mimetype1,
+ char const * mimetype2, apr_array_header_t propchanges, apr_hash_t originalprops,
+ void * diff_baton, apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks4_invoke_file_changed(*args)
def svn_wc_diff_callbacks4_invoke_file_added(*args):
"""
- svn_wc_diff_callbacks4_invoke_file_added(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t contentstate,
- svn_wc_notify_state_t propstate,
- char path, char tmpfile1, char tmpfile2,
- svn_revnum_t rev1, svn_revnum_t rev2, char mimetype1,
- char mimetype2, char copyfrom_path,
- svn_revnum_t copyfrom_revision, apr_array_header_t propchanges,
- apr_hash_t originalprops,
- void diff_baton, apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_diff_callbacks4_invoke_file_added(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t * contentstate, svn_wc_notify_state_t * propstate,
+ char const * path, char const * tmpfile1, char const * tmpfile2,
+ svn_revnum_t rev1, svn_revnum_t rev2, char const * mimetype1,
+ char const * mimetype2, char const * copyfrom_path, svn_revnum_t copyfrom_revision,
+ apr_array_header_t propchanges, apr_hash_t originalprops, void * diff_baton,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks4_invoke_file_added(*args)
def svn_wc_diff_callbacks4_invoke_file_deleted(*args):
"""
- svn_wc_diff_callbacks4_invoke_file_deleted(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t state,
- char path, char tmpfile1, char tmpfile2,
- char mimetype1, char mimetype2, apr_hash_t originalprops,
- void diff_baton, apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_diff_callbacks4_invoke_file_deleted(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t * state, char const * path,
+ char const * tmpfile1, char const * tmpfile2, char const * mimetype1, char const * mimetype2,
+ apr_hash_t originalprops, void * diff_baton, apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks4_invoke_file_deleted(*args)
def svn_wc_diff_callbacks4_invoke_dir_deleted(*args):
"""
- svn_wc_diff_callbacks4_invoke_dir_deleted(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t state,
- char path, void diff_baton, apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_diff_callbacks4_invoke_dir_deleted(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t * state, char const * path,
+ void * diff_baton, apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks4_invoke_dir_deleted(*args)
def svn_wc_diff_callbacks4_invoke_dir_opened(*args):
"""
- svn_wc_diff_callbacks4_invoke_dir_opened(svn_wc_diff_callbacks4_t _obj, char path, svn_revnum_t rev,
- void diff_baton, apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_diff_callbacks4_invoke_dir_opened(svn_wc_diff_callbacks4_t _obj, char const * path, svn_revnum_t rev, void * diff_baton,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks4_invoke_dir_opened(*args)
def svn_wc_diff_callbacks4_invoke_dir_added(*args):
"""
- svn_wc_diff_callbacks4_invoke_dir_added(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t state,
- char path, svn_revnum_t rev, char copyfrom_path,
- svn_revnum_t copyfrom_revision,
- void diff_baton, apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_diff_callbacks4_invoke_dir_added(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t * state, char const * path,
+ svn_revnum_t rev, char const * copyfrom_path, svn_revnum_t copyfrom_revision,
+ void * diff_baton, apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks4_invoke_dir_added(*args)
def svn_wc_diff_callbacks4_invoke_dir_props_changed(*args):
"""
- svn_wc_diff_callbacks4_invoke_dir_props_changed(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t propstate,
- char path, svn_boolean_t dir_was_added,
- apr_array_header_t propchanges, apr_hash_t original_props,
- void diff_baton, apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_diff_callbacks4_invoke_dir_props_changed(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t * propstate, char const * path,
+ svn_boolean_t dir_was_added, apr_array_header_t propchanges, apr_hash_t original_props,
+ void * diff_baton, apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks4_invoke_dir_props_changed(*args)
def svn_wc_diff_callbacks4_invoke_dir_closed(*args):
"""
- svn_wc_diff_callbacks4_invoke_dir_closed(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t contentstate,
- svn_wc_notify_state_t propstate,
- char path, svn_boolean_t dir_was_added, void diff_baton,
+ svn_wc_diff_callbacks4_invoke_dir_closed(svn_wc_diff_callbacks4_t _obj, svn_wc_notify_state_t * contentstate, svn_wc_notify_state_t * propstate,
+ char const * path, svn_boolean_t dir_was_added, void * diff_baton,
apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks4_invoke_dir_closed(*args)
def svn_wc_diff_callbacks3_invoke_file_changed(*args):
"""
- svn_wc_diff_callbacks3_invoke_file_changed(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t adm_access,
- svn_wc_notify_state_t contentstate,
- svn_wc_notify_state_t propstate, char path,
- char tmpfile1, char tmpfile2, svn_revnum_t rev1,
- svn_revnum_t rev2, char mimetype1, char mimetype2,
- apr_array_header_t propchanges, apr_hash_t originalprops,
- void diff_baton) -> svn_error_t
+ svn_wc_diff_callbacks3_invoke_file_changed(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * contentstate,
+ svn_wc_notify_state_t * propstate, char const * path,
+ char const * tmpfile1, char const * tmpfile2, svn_revnum_t rev1, svn_revnum_t rev2,
+ char const * mimetype1, char const * mimetype2, apr_array_header_t propchanges,
+ apr_hash_t originalprops, void * diff_baton) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks3_invoke_file_changed(*args)
def svn_wc_diff_callbacks3_invoke_file_added(*args):
"""
- svn_wc_diff_callbacks3_invoke_file_added(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t adm_access,
- svn_wc_notify_state_t contentstate,
- svn_wc_notify_state_t propstate, char path,
- char tmpfile1, char tmpfile2, svn_revnum_t rev1,
- svn_revnum_t rev2, char mimetype1, char mimetype2,
- apr_array_header_t propchanges, apr_hash_t originalprops,
- void diff_baton) -> svn_error_t
+ svn_wc_diff_callbacks3_invoke_file_added(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * contentstate,
+ svn_wc_notify_state_t * propstate, char const * path,
+ char const * tmpfile1, char const * tmpfile2, svn_revnum_t rev1, svn_revnum_t rev2,
+ char const * mimetype1, char const * mimetype2, apr_array_header_t propchanges,
+ apr_hash_t originalprops, void * diff_baton) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks3_invoke_file_added(*args)
def svn_wc_diff_callbacks3_invoke_file_deleted(*args):
"""
- svn_wc_diff_callbacks3_invoke_file_deleted(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t adm_access,
- svn_wc_notify_state_t state, char path,
- char tmpfile1, char tmpfile2, char mimetype1,
- char mimetype2, apr_hash_t originalprops,
- void diff_baton) -> svn_error_t
+ svn_wc_diff_callbacks3_invoke_file_deleted(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * state,
+ char const * path, char const * tmpfile1, char const * tmpfile2,
+ char const * mimetype1, char const * mimetype2, apr_hash_t originalprops,
+ void * diff_baton) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks3_invoke_file_deleted(*args)
def svn_wc_diff_callbacks3_invoke_dir_added(*args):
"""
- svn_wc_diff_callbacks3_invoke_dir_added(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t adm_access,
- svn_wc_notify_state_t state, char path,
- svn_revnum_t rev, void diff_baton) -> svn_error_t
+ svn_wc_diff_callbacks3_invoke_dir_added(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * state,
+ char const * path, svn_revnum_t rev, void * diff_baton) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks3_invoke_dir_added(*args)
def svn_wc_diff_callbacks3_invoke_dir_deleted(*args):
"""
- svn_wc_diff_callbacks3_invoke_dir_deleted(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t adm_access,
- svn_wc_notify_state_t state, char path,
- void diff_baton) -> svn_error_t
+ svn_wc_diff_callbacks3_invoke_dir_deleted(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * state,
+ char const * path, void * diff_baton) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks3_invoke_dir_deleted(*args)
def svn_wc_diff_callbacks3_invoke_dir_props_changed(*args):
"""
- svn_wc_diff_callbacks3_invoke_dir_props_changed(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t adm_access,
- svn_wc_notify_state_t propstate,
- char path, apr_array_header_t propchanges, apr_hash_t original_props,
- void diff_baton) -> svn_error_t
+ svn_wc_diff_callbacks3_invoke_dir_props_changed(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * propstate,
+ char const * path, apr_array_header_t propchanges, apr_hash_t original_props,
+ void * diff_baton) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks3_invoke_dir_props_changed(*args)
def svn_wc_diff_callbacks3_invoke_dir_opened(*args):
"""
- svn_wc_diff_callbacks3_invoke_dir_opened(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t adm_access,
- char path, svn_revnum_t rev, void diff_baton) -> svn_error_t
+ svn_wc_diff_callbacks3_invoke_dir_opened(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t * adm_access, char const * path,
+ svn_revnum_t rev, void * diff_baton) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks3_invoke_dir_opened(*args)
def svn_wc_diff_callbacks3_invoke_dir_closed(*args):
"""
- svn_wc_diff_callbacks3_invoke_dir_closed(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t adm_access,
- svn_wc_notify_state_t contentstate,
- svn_wc_notify_state_t propstate, char path,
- void diff_baton) -> svn_error_t
+ svn_wc_diff_callbacks3_invoke_dir_closed(svn_wc_diff_callbacks3_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * contentstate,
+ svn_wc_notify_state_t * propstate, char const * path,
+ void * diff_baton) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks3_invoke_dir_closed(*args)
def svn_wc_diff_callbacks2_invoke_file_changed(*args):
"""
- svn_wc_diff_callbacks2_invoke_file_changed(svn_wc_diff_callbacks2_t _obj, svn_wc_adm_access_t adm_access,
- svn_wc_notify_state_t contentstate,
- svn_wc_notify_state_t propstate, char path,
- char tmpfile1, char tmpfile2, svn_revnum_t rev1,
- svn_revnum_t rev2, char mimetype1, char mimetype2,
- apr_array_header_t propchanges, apr_hash_t originalprops,
- void diff_baton) -> svn_error_t
+ svn_wc_diff_callbacks2_invoke_file_changed(svn_wc_diff_callbacks2_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * contentstate,
+ svn_wc_notify_state_t * propstate, char const * path,
+ char const * tmpfile1, char const * tmpfile2, svn_revnum_t rev1, svn_revnum_t rev2,
+ char const * mimetype1, char const * mimetype2, apr_array_header_t propchanges,
+ apr_hash_t originalprops, void * diff_baton) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks2_invoke_file_changed(*args)
def svn_wc_diff_callbacks2_invoke_file_added(*args):
"""
- svn_wc_diff_callbacks2_invoke_file_added(svn_wc_diff_callbacks2_t _obj, svn_wc_adm_access_t adm_access,
- svn_wc_notify_state_t contentstate,
- svn_wc_notify_state_t propstate, char path,
- char tmpfile1, char tmpfile2, svn_revnum_t rev1,
- svn_revnum_t rev2, char mimetype1, char mimetype2,
- apr_array_header_t propchanges, apr_hash_t originalprops,
- void diff_baton) -> svn_error_t
+ svn_wc_diff_callbacks2_invoke_file_added(svn_wc_diff_callbacks2_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * contentstate,
+ svn_wc_notify_state_t * propstate, char const * path,
+ char const * tmpfile1, char const * tmpfile2, svn_revnum_t rev1, svn_revnum_t rev2,
+ char const * mimetype1, char const * mimetype2, apr_array_header_t propchanges,
+ apr_hash_t originalprops, void * diff_baton) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks2_invoke_file_added(*args)
def svn_wc_diff_callbacks2_invoke_file_deleted(*args):
"""
- svn_wc_diff_callbacks2_invoke_file_deleted(svn_wc_diff_callbacks2_t _obj, svn_wc_adm_access_t adm_access,
- svn_wc_notify_state_t state, char path,
- char tmpfile1, char tmpfile2, char mimetype1,
- char mimetype2, apr_hash_t originalprops,
- void diff_baton) -> svn_error_t
+ svn_wc_diff_callbacks2_invoke_file_deleted(svn_wc_diff_callbacks2_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * state,
+ char const * path, char const * tmpfile1, char const * tmpfile2,
+ char const * mimetype1, char const * mimetype2, apr_hash_t originalprops,
+ void * diff_baton) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks2_invoke_file_deleted(*args)
def svn_wc_diff_callbacks2_invoke_dir_added(*args):
"""
- svn_wc_diff_callbacks2_invoke_dir_added(svn_wc_diff_callbacks2_t _obj, svn_wc_adm_access_t adm_access,
- svn_wc_notify_state_t state, char path,
- svn_revnum_t rev, void diff_baton) -> svn_error_t
+ svn_wc_diff_callbacks2_invoke_dir_added(svn_wc_diff_callbacks2_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * state,
+ char const * path, svn_revnum_t rev, void * diff_baton) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks2_invoke_dir_added(*args)
def svn_wc_diff_callbacks2_invoke_dir_deleted(*args):
"""
- svn_wc_diff_callbacks2_invoke_dir_deleted(svn_wc_diff_callbacks2_t _obj, svn_wc_adm_access_t adm_access,
- svn_wc_notify_state_t state, char path,
- void diff_baton) -> svn_error_t
+ svn_wc_diff_callbacks2_invoke_dir_deleted(svn_wc_diff_callbacks2_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * state,
+ char const * path, void * diff_baton) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks2_invoke_dir_deleted(*args)
def svn_wc_diff_callbacks2_invoke_dir_props_changed(*args):
"""
- svn_wc_diff_callbacks2_invoke_dir_props_changed(svn_wc_diff_callbacks2_t _obj, svn_wc_adm_access_t adm_access,
- svn_wc_notify_state_t state, char path,
- apr_array_header_t propchanges, apr_hash_t original_props,
- void diff_baton) -> svn_error_t
+ svn_wc_diff_callbacks2_invoke_dir_props_changed(svn_wc_diff_callbacks2_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * state,
+ char const * path, apr_array_header_t propchanges, apr_hash_t original_props,
+ void * diff_baton) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks2_invoke_dir_props_changed(*args)
def svn_wc_diff_callbacks_invoke_file_changed(*args):
"""
- svn_wc_diff_callbacks_invoke_file_changed(svn_wc_diff_callbacks_t _obj, svn_wc_adm_access_t adm_access,
- svn_wc_notify_state_t state, char path,
- char tmpfile1, char tmpfile2, svn_revnum_t rev1,
- svn_revnum_t rev2, char mimetype1,
- char mimetype2, void diff_baton) -> svn_error_t
+ svn_wc_diff_callbacks_invoke_file_changed(svn_wc_diff_callbacks_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * state,
+ char const * path, char const * tmpfile1, char const * tmpfile2,
+ svn_revnum_t rev1, svn_revnum_t rev2, char const * mimetype1, char const * mimetype2,
+ void * diff_baton) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks_invoke_file_changed(*args)
def svn_wc_diff_callbacks_invoke_file_added(*args):
"""
- svn_wc_diff_callbacks_invoke_file_added(svn_wc_diff_callbacks_t _obj, svn_wc_adm_access_t adm_access,
- svn_wc_notify_state_t state, char path,
- char tmpfile1, char tmpfile2, svn_revnum_t rev1,
- svn_revnum_t rev2, char mimetype1,
- char mimetype2, void diff_baton) -> svn_error_t
+ svn_wc_diff_callbacks_invoke_file_added(svn_wc_diff_callbacks_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * state,
+ char const * path, char const * tmpfile1, char const * tmpfile2,
+ svn_revnum_t rev1, svn_revnum_t rev2, char const * mimetype1, char const * mimetype2,
+ void * diff_baton) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks_invoke_file_added(*args)
def svn_wc_diff_callbacks_invoke_file_deleted(*args):
"""
- svn_wc_diff_callbacks_invoke_file_deleted(svn_wc_diff_callbacks_t _obj, svn_wc_adm_access_t adm_access,
- svn_wc_notify_state_t state, char path,
- char tmpfile1, char tmpfile2, char mimetype1,
- char mimetype2, void diff_baton) -> svn_error_t
+ svn_wc_diff_callbacks_invoke_file_deleted(svn_wc_diff_callbacks_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * state,
+ char const * path, char const * tmpfile1, char const * tmpfile2,
+ char const * mimetype1, char const * mimetype2, void * diff_baton) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks_invoke_file_deleted(*args)
def svn_wc_diff_callbacks_invoke_dir_added(*args):
"""
- svn_wc_diff_callbacks_invoke_dir_added(svn_wc_diff_callbacks_t _obj, svn_wc_adm_access_t adm_access,
- svn_wc_notify_state_t state, char path,
- svn_revnum_t rev, void diff_baton) -> svn_error_t
+ svn_wc_diff_callbacks_invoke_dir_added(svn_wc_diff_callbacks_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * state,
+ char const * path, svn_revnum_t rev, void * diff_baton) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks_invoke_dir_added(*args)
def svn_wc_diff_callbacks_invoke_dir_deleted(*args):
"""
- svn_wc_diff_callbacks_invoke_dir_deleted(svn_wc_diff_callbacks_t _obj, svn_wc_adm_access_t adm_access,
- svn_wc_notify_state_t state, char path,
- void diff_baton) -> svn_error_t
+ svn_wc_diff_callbacks_invoke_dir_deleted(svn_wc_diff_callbacks_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * state,
+ char const * path, void * diff_baton) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks_invoke_dir_deleted(*args)
def svn_wc_diff_callbacks_invoke_props_changed(*args):
"""
- svn_wc_diff_callbacks_invoke_props_changed(svn_wc_diff_callbacks_t _obj, svn_wc_adm_access_t adm_access,
- svn_wc_notify_state_t state, char path,
- apr_array_header_t propchanges, apr_hash_t original_props,
- void diff_baton) -> svn_error_t
+ svn_wc_diff_callbacks_invoke_props_changed(svn_wc_diff_callbacks_t _obj, svn_wc_adm_access_t * adm_access, svn_wc_notify_state_t * state,
+ char const * path, apr_array_header_t propchanges, apr_hash_t original_props,
+ void * diff_baton) -> svn_error_t
"""
return _wc.svn_wc_diff_callbacks_invoke_props_changed(*args)
def svn_wc_entry_callbacks2_invoke_found_entry(*args):
"""
- svn_wc_entry_callbacks2_invoke_found_entry(svn_wc_entry_callbacks2_t _obj, char path, svn_wc_entry_t entry,
- void walk_baton, apr_pool_t pool) -> svn_error_t
+ svn_wc_entry_callbacks2_invoke_found_entry(svn_wc_entry_callbacks2_t _obj, char const * path, svn_wc_entry_t entry, void * walk_baton,
+ apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_entry_callbacks2_invoke_found_entry(*args)
def svn_wc_entry_callbacks2_invoke_handle_error(*args):
"""
- svn_wc_entry_callbacks2_invoke_handle_error(svn_wc_entry_callbacks2_t _obj, char path, svn_error_t err,
- void walk_baton, apr_pool_t pool) -> svn_error_t
+ svn_wc_entry_callbacks2_invoke_handle_error(svn_wc_entry_callbacks2_t _obj, char const * path, svn_error_t err, void * walk_baton,
+ apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_entry_callbacks2_invoke_handle_error(*args)
def svn_wc_entry_callbacks_invoke_found_entry(*args):
"""
- svn_wc_entry_callbacks_invoke_found_entry(svn_wc_entry_callbacks_t _obj, char path, svn_wc_entry_t entry,
- void walk_baton, apr_pool_t pool) -> svn_error_t
+ svn_wc_entry_callbacks_invoke_found_entry(svn_wc_entry_callbacks_t _obj, char const * path, svn_wc_entry_t entry, void * walk_baton,
+ apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_entry_callbacks_invoke_found_entry(*args)
def svn_wc_invoke_external_update(*args):
"""
- svn_wc_invoke_external_update(svn_wc_external_update_t _obj, void baton, char local_abspath,
- svn_string_t old_val, svn_string_t new_val,
- svn_depth_t depth, apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_invoke_external_update(svn_wc_external_update_t _obj, void * baton, char const * local_abspath, svn_string_t const * old_val,
+ svn_string_t const * new_val, svn_depth_t depth, apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_invoke_external_update(*args)
def svn_wc_invoke_notify_func2(*args):
- """
- svn_wc_invoke_notify_func2(svn_wc_notify_func2_t _obj, void baton, svn_wc_notify_t notify,
- apr_pool_t pool)
- """
+ """svn_wc_invoke_notify_func2(svn_wc_notify_func2_t _obj, void * baton, svn_wc_notify_t notify, apr_pool_t pool)"""
return _wc.svn_wc_invoke_notify_func2(*args)
def svn_wc_invoke_notify_func(*args):
"""
- svn_wc_invoke_notify_func(svn_wc_notify_func_t _obj, void baton, char path, svn_wc_notify_action_t action,
- svn_node_kind_t kind,
- char mime_type, svn_wc_notify_state_t content_state,
- svn_wc_notify_state_t prop_state,
- svn_revnum_t revision)
+ svn_wc_invoke_notify_func(svn_wc_notify_func_t _obj, void * baton, char const * path, svn_wc_notify_action_t action,
+ svn_node_kind_t kind, char const * mime_type, svn_wc_notify_state_t content_state,
+ svn_wc_notify_state_t prop_state, svn_revnum_t revision)
"""
return _wc.svn_wc_invoke_notify_func(*args)
def svn_wc_invoke_conflict_resolver_func2(*args):
"""
svn_wc_invoke_conflict_resolver_func2(svn_wc_conflict_resolver_func2_t _obj, svn_wc_conflict_description2_t description,
- void baton, apr_pool_t result_pool,
- apr_pool_t scratch_pool) -> svn_error_t
+ void * baton, apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_invoke_conflict_resolver_func2(*args)
def svn_wc_invoke_conflict_resolver_func(*args):
"""
svn_wc_invoke_conflict_resolver_func(svn_wc_conflict_resolver_func_t _obj, svn_wc_conflict_description_t description,
- void baton, apr_pool_t pool) -> svn_error_t
+ void * baton, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_invoke_conflict_resolver_func(*args)
def svn_wc_invoke_status_func4(*args):
"""
- svn_wc_invoke_status_func4(svn_wc_status_func4_t _obj, void baton, char local_abspath,
- svn_wc_status3_t status, apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_invoke_status_func4(svn_wc_status_func4_t _obj, void * baton, char const * local_abspath, svn_wc_status3_t status,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_invoke_status_func4(*args)
def svn_wc_invoke_status_func3(*args):
"""
- svn_wc_invoke_status_func3(svn_wc_status_func3_t _obj, void baton, char path,
- svn_wc_status2_t status, apr_pool_t pool) -> svn_error_t
+ svn_wc_invoke_status_func3(svn_wc_status_func3_t _obj, void * baton, char const * path, svn_wc_status2_t status,
+ apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_invoke_status_func3(*args)
def svn_wc_invoke_status_func2(*args):
- """
- svn_wc_invoke_status_func2(svn_wc_status_func2_t _obj, void baton, char path,
- svn_wc_status2_t status)
- """
+ """svn_wc_invoke_status_func2(svn_wc_status_func2_t _obj, void * baton, char const * path, svn_wc_status2_t status)"""
return _wc.svn_wc_invoke_status_func2(*args)
def svn_wc_invoke_status_func(*args):
- """svn_wc_invoke_status_func(svn_wc_status_func_t _obj, void baton, char path, svn_wc_status_t status)"""
+ """svn_wc_invoke_status_func(svn_wc_status_func_t _obj, void * baton, char const * path, svn_wc_status_t status)"""
return _wc.svn_wc_invoke_status_func(*args)
def svn_wc_invoke_get_file(*args):
"""
- svn_wc_invoke_get_file(svn_wc_get_file_t _obj, void baton, char path, svn_revnum_t revision,
- svn_stream_t stream, apr_pool_t pool) -> svn_error_t
+ svn_wc_invoke_get_file(svn_wc_get_file_t _obj, void * baton, char const * path, svn_revnum_t revision, svn_stream_t * stream,
+ apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_invoke_get_file(*args)
def svn_wc_invoke_dirents_func(*args):
"""
- svn_wc_invoke_dirents_func(svn_wc_dirents_func_t _obj, void baton, char repos_root_url,
- char repos_relpath, apr_pool_t result_pool,
- apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_invoke_dirents_func(svn_wc_dirents_func_t _obj, void * baton, char const * repos_root_url, char const * repos_relpath,
+ apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_invoke_dirents_func(*args)
def svn_wc_invoke_canonicalize_svn_prop_get_file(*args):
"""
- svn_wc_invoke_canonicalize_svn_prop_get_file(svn_wc_canonicalize_svn_prop_get_file_t _obj, svn_stream_t stream,
- void baton, apr_pool_t pool) -> svn_error_t
+ svn_wc_invoke_canonicalize_svn_prop_get_file(svn_wc_canonicalize_svn_prop_get_file_t _obj, svn_stream_t * stream, void * baton,
+ apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_invoke_canonicalize_svn_prop_get_file(*args)
def svn_wc_invoke_upgrade_get_repos_info(*args):
"""
- svn_wc_invoke_upgrade_get_repos_info(svn_wc_upgrade_get_repos_info_t _obj, void baton, char url,
- apr_pool_t result_pool, apr_pool_t scratch_pool) -> svn_error_t
+ svn_wc_invoke_upgrade_get_repos_info(svn_wc_upgrade_get_repos_info_t _obj, void * baton, char const * url, apr_pool_t result_pool,
+ apr_pool_t scratch_pool) -> svn_error_t
"""
return _wc.svn_wc_invoke_upgrade_get_repos_info(*args)
def svn_wc_invoke_relocation_validator3(*args):
"""
- svn_wc_invoke_relocation_validator3(svn_wc_relocation_validator3_t _obj, void baton, char uuid,
- char url, char root_url, apr_pool_t pool) -> svn_error_t
+ svn_wc_invoke_relocation_validator3(svn_wc_relocation_validator3_t _obj, void * baton, char const * uuid, char const * url,
+ char const * root_url, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_invoke_relocation_validator3(*args)
def svn_wc_invoke_relocation_validator2(*args):
"""
- svn_wc_invoke_relocation_validator2(svn_wc_relocation_validator2_t _obj, void baton, char uuid,
- char url, svn_boolean_t root, apr_pool_t pool) -> svn_error_t
+ svn_wc_invoke_relocation_validator2(svn_wc_relocation_validator2_t _obj, void * baton, char const * uuid, char const * url,
+ svn_boolean_t root, apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_wc_invoke_relocation_validator2(*args)
def svn_wc_invoke_relocation_validator(*args):
- """
- svn_wc_invoke_relocation_validator(svn_wc_relocation_validator_t _obj, void baton, char uuid,
- char url) -> svn_error_t
- """
+ """svn_wc_invoke_relocation_validator(svn_wc_relocation_validator_t _obj, void * baton, char const * uuid, char const * url) -> svn_error_t"""
return _wc.svn_wc_invoke_relocation_validator(*args)
def svn_changelist_invoke_receiver(*args):
"""
- svn_changelist_invoke_receiver(svn_changelist_receiver_t _obj, void baton, char path,
- char changelist, apr_pool_t pool) -> svn_error_t
+ svn_changelist_invoke_receiver(svn_changelist_receiver_t _obj, void * baton, char const * path, char const * changelist,
+ apr_pool_t pool) -> svn_error_t
"""
return _wc.svn_changelist_invoke_receiver(*args)
class svn_wc_external_update_t:
diff --git a/subversion/bindings/swig/ruby/core.c b/subversion/bindings/swig/ruby/core.c
index 90488c0..69fd53d 100644
--- a/subversion/bindings/swig/ruby/core.c
+++ b/subversion/bindings/swig/ruby/core.c
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -1374,7 +1374,7 @@ SWIG_Ruby_AppendOutput(VALUE target, VALUE o) {
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Ruby_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Ruby_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Ruby_SetModule(pointer)
@@ -1528,7 +1528,7 @@ SWIG_Ruby_NewPointerObj(void *ptr, swig_type_info *type, int flags)
downcast methods. */
if (obj != Qnil) {
VALUE value = rb_iv_get(obj, "@__swigtype__");
- char* type_name = RSTRING_PTR(value);
+ const char* type_name = RSTRING_PTR(value);
if (strcmp(type->name, type_name) == 0) {
return obj;
@@ -1710,7 +1710,7 @@ SWIG_Ruby_ConvertPacked(VALUE obj, void *ptr, int sz, swig_type_info *ty) {
}
SWIGRUNTIME swig_module_info *
-SWIG_Ruby_GetModule(void)
+SWIG_Ruby_GetModule(void *SWIGUNUSEDPARM(clientdata))
{
VALUE pointer;
swig_module_info *ret = 0;
@@ -1813,125 +1813,135 @@ int SWIG_Ruby_arity( VALUE proc, int minimal )
#define SWIGTYPE_p_char swig_types[18]
#define SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[19]
#define SWIGTYPE_p_f_p_apr_uint32_t_p_p_void_p_void_svn_diff_datasource_e__p_svn_error_t swig_types[20]
-#define SWIGTYPE_p_f_p_p_struct_svn_auth_provider_object_t_p_apr_pool_t__void swig_types[21]
-#define SWIGTYPE_p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[22]
-#define SWIGTYPE_p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[23]
-#define SWIGTYPE_p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[24]
-#define SWIGTYPE_p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[25]
-#define SWIGTYPE_p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[26]
-#define SWIGTYPE_p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[27]
-#define SWIGTYPE_p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[28]
-#define SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_void__int swig_types[29]
-#define SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_void_p_apr_pool_t__int swig_types[30]
-#define SWIGTYPE_p_f_p_q_const__char_p_void__int swig_types[31]
-#define SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__int swig_types[32]
-#define SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[33]
-#define SWIGTYPE_p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[34]
-#define SWIGTYPE_p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[35]
-#define SWIGTYPE_p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[36]
-#define SWIGTYPE_p_f_p_void__p_svn_error_t swig_types[37]
-#define SWIGTYPE_p_f_p_void__void swig_types[38]
-#define SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t__p_svn_error_t swig_types[39]
-#define SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_p_svn_diff_t__p_svn_error_t swig_types[40]
-#define SWIGTYPE_p_f_p_void_apr_size_t__p_svn_error_t swig_types[41]
-#define SWIGTYPE_p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[42]
-#define SWIGTYPE_p_f_p_void_p_apr_off_t_p_apr_off_t_p_q_const__svn_diff_datasource_e_apr_size_t__p_svn_error_t swig_types[43]
-#define SWIGTYPE_p_f_p_void_p_char_p_apr_size_t__p_svn_error_t swig_types[44]
-#define SWIGTYPE_p_f_p_void_p_p_svn_stream_mark_t_p_apr_pool_t__p_svn_error_t swig_types[45]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_size_t__p_svn_error_t swig_types[46]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__apr_finfo_t_p_apr_pool_t__p_svn_error_t swig_types[47]
-#define SWIGTYPE_p_f_p_void_p_q_const__svn_stream_mark_t__p_svn_error_t swig_types[48]
-#define SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t swig_types[49]
-#define SWIGTYPE_p_f_p_void_p_void__void swig_types[50]
-#define SWIGTYPE_p_f_p_void_p_void_p_void_p_int__p_svn_error_t swig_types[51]
-#define SWIGTYPE_p_f_p_void_svn_diff_datasource_e__p_svn_error_t swig_types[52]
-#define SWIGTYPE_p_f_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t swig_types[53]
-#define SWIGTYPE_p_f_void__p_svn_version_t swig_types[54]
-#define SWIGTYPE_p_int swig_types[55]
-#define SWIGTYPE_p_long swig_types[56]
-#define SWIGTYPE_p_p_apr_array_header_t swig_types[57]
-#define SWIGTYPE_p_p_apr_file_t swig_types[58]
-#define SWIGTYPE_p_p_apr_hash_t swig_types[59]
-#define SWIGTYPE_p_p_char swig_types[60]
-#define SWIGTYPE_p_p_svn_auth_cred_simple_t swig_types[61]
-#define SWIGTYPE_p_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[62]
-#define SWIGTYPE_p_p_svn_auth_cred_ssl_client_cert_t swig_types[63]
-#define SWIGTYPE_p_p_svn_auth_cred_ssl_server_trust_t swig_types[64]
-#define SWIGTYPE_p_p_svn_auth_cred_username_t swig_types[65]
-#define SWIGTYPE_p_p_svn_auth_iterstate_t swig_types[66]
-#define SWIGTYPE_p_p_svn_auth_provider_object_t swig_types[67]
-#define SWIGTYPE_p_p_svn_checksum_t swig_types[68]
-#define SWIGTYPE_p_p_svn_config_t swig_types[69]
-#define SWIGTYPE_p_p_svn_diff_t swig_types[70]
-#define SWIGTYPE_p_p_svn_io_dirent2_t swig_types[71]
-#define SWIGTYPE_p_p_svn_patch_file_t swig_types[72]
-#define SWIGTYPE_p_p_svn_patch_t swig_types[73]
-#define SWIGTYPE_p_p_svn_stream_mark_t swig_types[74]
-#define SWIGTYPE_p_p_svn_stream_t swig_types[75]
-#define SWIGTYPE_p_p_svn_string_t swig_types[76]
-#define SWIGTYPE_p_p_svn_stringbuf_t swig_types[77]
-#define SWIGTYPE_p_p_void swig_types[78]
-#define SWIGTYPE_p_svn_auth_baton_t swig_types[79]
-#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[80]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[81]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[82]
-#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[83]
-#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[84]
-#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[85]
-#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[86]
-#define SWIGTYPE_p_svn_auth_provider_t swig_types[87]
-#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[88]
-#define SWIGTYPE_p_svn_checksum_kind_t swig_types[89]
-#define SWIGTYPE_p_svn_commit_info_t swig_types[90]
-#define SWIGTYPE_p_svn_config_t swig_types[91]
-#define SWIGTYPE_p_svn_depth_t swig_types[92]
-#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[93]
-#define SWIGTYPE_p_svn_diff_datasource_e swig_types[94]
-#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[95]
-#define SWIGTYPE_p_svn_diff_file_options_t swig_types[96]
-#define SWIGTYPE_p_svn_diff_fns2_t swig_types[97]
-#define SWIGTYPE_p_svn_diff_fns_t swig_types[98]
-#define SWIGTYPE_p_svn_diff_hunk_t swig_types[99]
-#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[100]
-#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[101]
-#define SWIGTYPE_p_svn_diff_t swig_types[102]
-#define SWIGTYPE_p_svn_dirent_t swig_types[103]
-#define SWIGTYPE_p_svn_errno_t swig_types[104]
-#define SWIGTYPE_p_svn_error_t swig_types[105]
-#define SWIGTYPE_p_svn_io_dirent2_t swig_types[106]
-#define SWIGTYPE_p_svn_io_dirent_t swig_types[107]
-#define SWIGTYPE_p_svn_io_file_del_t swig_types[108]
-#define SWIGTYPE_p_svn_location_segment_t swig_types[109]
-#define SWIGTYPE_p_svn_lock_t swig_types[110]
-#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[111]
-#define SWIGTYPE_p_svn_log_changed_path_t swig_types[112]
-#define SWIGTYPE_p_svn_log_entry_t swig_types[113]
-#define SWIGTYPE_p_svn_merge_range_t swig_types[114]
-#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[115]
-#define SWIGTYPE_p_svn_node_kind_t swig_types[116]
-#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[117]
-#define SWIGTYPE_p_svn_opt_revision_t swig_types[118]
-#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[119]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[120]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t_desc_overrides swig_types[121]
-#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[122]
-#define SWIGTYPE_p_svn_patch_file_t swig_types[123]
-#define SWIGTYPE_p_svn_patch_t swig_types[124]
-#define SWIGTYPE_p_svn_prop_kind swig_types[125]
-#define SWIGTYPE_p_svn_prop_patch_t swig_types[126]
-#define SWIGTYPE_p_svn_prop_t swig_types[127]
-#define SWIGTYPE_p_svn_stream_mark_t swig_types[128]
-#define SWIGTYPE_p_svn_stream_t swig_types[129]
-#define SWIGTYPE_p_svn_string_t swig_types[130]
-#define SWIGTYPE_p_svn_stringbuf_t swig_types[131]
-#define SWIGTYPE_p_svn_tristate_t swig_types[132]
-#define SWIGTYPE_p_svn_version_checklist_t swig_types[133]
-#define SWIGTYPE_p_svn_version_t swig_types[134]
-#define SWIGTYPE_p_unsigned_char swig_types[135]
-#define SWIGTYPE_p_unsigned_long swig_types[136]
-#define SWIGTYPE_p_void swig_types[137]
-static swig_type_info *swig_types[139];
-static swig_module_info swig_module = {swig_types, 138, 0, 0, 0, 0};
+#define SWIGTYPE_p_f_p_p_char_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[21]
+#define SWIGTYPE_p_f_p_p_struct_svn_auth_provider_object_t_p_apr_pool_t__void swig_types[22]
+#define SWIGTYPE_p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[23]
+#define SWIGTYPE_p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[24]
+#define SWIGTYPE_p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[25]
+#define SWIGTYPE_p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[26]
+#define SWIGTYPE_p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[27]
+#define SWIGTYPE_p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t swig_types[28]
+#define SWIGTYPE_p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[29]
+#define SWIGTYPE_p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[30]
+#define SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_void__int swig_types[31]
+#define SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_void_p_apr_pool_t__int swig_types[32]
+#define SWIGTYPE_p_f_p_q_const__char_p_void__int swig_types[33]
+#define SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__int swig_types[34]
+#define SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[35]
+#define SWIGTYPE_p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[36]
+#define SWIGTYPE_p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[37]
+#define SWIGTYPE_p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[38]
+#define SWIGTYPE_p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[39]
+#define SWIGTYPE_p_f_p_void__p_svn_error_t swig_types[40]
+#define SWIGTYPE_p_f_p_void__void swig_types[41]
+#define SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t__p_svn_error_t swig_types[42]
+#define SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_p_svn_diff_t__p_svn_error_t swig_types[43]
+#define SWIGTYPE_p_f_p_void_apr_size_t__p_svn_error_t swig_types[44]
+#define SWIGTYPE_p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[45]
+#define SWIGTYPE_p_f_p_void_p_apr_off_t_p_apr_off_t_p_q_const__svn_diff_datasource_e_apr_size_t__p_svn_error_t swig_types[46]
+#define SWIGTYPE_p_f_p_void_p_char_p_apr_size_t__p_svn_error_t swig_types[47]
+#define SWIGTYPE_p_f_p_void_p_p_svn_stream_mark_t_p_apr_pool_t__p_svn_error_t swig_types[48]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_size_t__p_svn_error_t swig_types[49]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__apr_finfo_t_p_apr_pool_t__p_svn_error_t swig_types[50]
+#define SWIGTYPE_p_f_p_void_p_q_const__svn_stream_mark_t__p_svn_error_t swig_types[51]
+#define SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t swig_types[52]
+#define SWIGTYPE_p_f_p_void_p_void__void swig_types[53]
+#define SWIGTYPE_p_f_p_void_p_void_p_void_p_int__p_svn_error_t swig_types[54]
+#define SWIGTYPE_p_f_p_void_svn_diff_datasource_e__p_svn_error_t swig_types[55]
+#define SWIGTYPE_p_f_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t swig_types[56]
+#define SWIGTYPE_p_f_void__p_svn_version_t swig_types[57]
+#define SWIGTYPE_p_int swig_types[58]
+#define SWIGTYPE_p_long swig_types[59]
+#define SWIGTYPE_p_p_apr_array_header_t swig_types[60]
+#define SWIGTYPE_p_p_apr_file_t swig_types[61]
+#define SWIGTYPE_p_p_apr_hash_t swig_types[62]
+#define SWIGTYPE_p_p_char swig_types[63]
+#define SWIGTYPE_p_p_svn_auth_baton_t swig_types[64]
+#define SWIGTYPE_p_p_svn_auth_cred_simple_t swig_types[65]
+#define SWIGTYPE_p_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[66]
+#define SWIGTYPE_p_p_svn_auth_cred_ssl_client_cert_t swig_types[67]
+#define SWIGTYPE_p_p_svn_auth_cred_ssl_server_trust_t swig_types[68]
+#define SWIGTYPE_p_p_svn_auth_cred_username_t swig_types[69]
+#define SWIGTYPE_p_p_svn_auth_iterstate_t swig_types[70]
+#define SWIGTYPE_p_p_svn_auth_provider_object_t swig_types[71]
+#define SWIGTYPE_p_p_svn_checksum_t swig_types[72]
+#define SWIGTYPE_p_p_svn_config_t swig_types[73]
+#define SWIGTYPE_p_p_svn_diff_t swig_types[74]
+#define SWIGTYPE_p_p_svn_io_dirent2_t swig_types[75]
+#define SWIGTYPE_p_p_svn_patch_file_t swig_types[76]
+#define SWIGTYPE_p_p_svn_patch_t swig_types[77]
+#define SWIGTYPE_p_p_svn_stream_mark_t swig_types[78]
+#define SWIGTYPE_p_p_svn_stream_t swig_types[79]
+#define SWIGTYPE_p_p_svn_string_t swig_types[80]
+#define SWIGTYPE_p_p_svn_stringbuf_t swig_types[81]
+#define SWIGTYPE_p_p_void swig_types[82]
+#define SWIGTYPE_p_svn_auth_baton_t swig_types[83]
+#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[84]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[85]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[86]
+#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[87]
+#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[88]
+#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[89]
+#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[90]
+#define SWIGTYPE_p_svn_auth_provider_t swig_types[91]
+#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[92]
+#define SWIGTYPE_p_svn_checksum_ctx_t swig_types[93]
+#define SWIGTYPE_p_svn_checksum_kind_t swig_types[94]
+#define SWIGTYPE_p_svn_checksum_t swig_types[95]
+#define SWIGTYPE_p_svn_commit_info_t swig_types[96]
+#define SWIGTYPE_p_svn_config_t swig_types[97]
+#define SWIGTYPE_p_svn_depth_t swig_types[98]
+#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[99]
+#define SWIGTYPE_p_svn_diff_datasource_e swig_types[100]
+#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[101]
+#define SWIGTYPE_p_svn_diff_file_options_t swig_types[102]
+#define SWIGTYPE_p_svn_diff_fns2_t swig_types[103]
+#define SWIGTYPE_p_svn_diff_fns_t swig_types[104]
+#define SWIGTYPE_p_svn_diff_hunk_t swig_types[105]
+#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[106]
+#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[107]
+#define SWIGTYPE_p_svn_diff_t swig_types[108]
+#define SWIGTYPE_p_svn_dirent_t swig_types[109]
+#define SWIGTYPE_p_svn_errno_t swig_types[110]
+#define SWIGTYPE_p_svn_error_t swig_types[111]
+#define SWIGTYPE_p_svn_io_dirent2_t swig_types[112]
+#define SWIGTYPE_p_svn_io_dirent_t swig_types[113]
+#define SWIGTYPE_p_svn_io_file_del_t swig_types[114]
+#define SWIGTYPE_p_svn_location_segment_t swig_types[115]
+#define SWIGTYPE_p_svn_lock_t swig_types[116]
+#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[117]
+#define SWIGTYPE_p_svn_log_changed_path_t swig_types[118]
+#define SWIGTYPE_p_svn_log_entry_t swig_types[119]
+#define SWIGTYPE_p_svn_merge_range_t swig_types[120]
+#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[121]
+#define SWIGTYPE_p_svn_node_kind_t swig_types[122]
+#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[123]
+#define SWIGTYPE_p_svn_opt_revision_t swig_types[124]
+#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[125]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[126]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t_desc_overrides swig_types[127]
+#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[128]
+#define SWIGTYPE_p_svn_patch_file_t swig_types[129]
+#define SWIGTYPE_p_svn_patch_t swig_types[130]
+#define SWIGTYPE_p_svn_prop_inherited_item_t swig_types[131]
+#define SWIGTYPE_p_svn_prop_kind swig_types[132]
+#define SWIGTYPE_p_svn_prop_patch_t swig_types[133]
+#define SWIGTYPE_p_svn_prop_t swig_types[134]
+#define SWIGTYPE_p_svn_stream_mark_t swig_types[135]
+#define SWIGTYPE_p_svn_stream_t swig_types[136]
+#define SWIGTYPE_p_svn_string_t swig_types[137]
+#define SWIGTYPE_p_svn_stringbuf_t swig_types[138]
+#define SWIGTYPE_p_svn_tristate_t swig_types[139]
+#define SWIGTYPE_p_svn_version_checklist_t swig_types[140]
+#define SWIGTYPE_p_svn_version_ext_linked_lib_t swig_types[141]
+#define SWIGTYPE_p_svn_version_ext_loaded_lib_t swig_types[142]
+#define SWIGTYPE_p_svn_version_extended_t swig_types[143]
+#define SWIGTYPE_p_svn_version_t swig_types[144]
+#define SWIGTYPE_p_unsigned_char swig_types[145]
+#define SWIGTYPE_p_unsigned_long swig_types[146]
+#define SWIGTYPE_p_void swig_types[147]
+static swig_type_info *swig_types[149];
+static swig_module_info swig_module = {swig_types, 148, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@@ -1946,7 +1956,7 @@ static VALUE mCore;
#define SWIG_RUBY_THREAD_END_BLOCK
-#define SWIGVERSION 0x020004
+#define SWIGVERSION 0x020009
#define SWIG_VERSION SWIGVERSION
@@ -2052,11 +2062,7 @@ SWIGINTERN int
SWIG_AsCharPtrAndSize(VALUE obj, char** cptr, size_t* psize, int *alloc)
{
if (TYPE(obj) == T_STRING) {
- #if defined(StringValuePtr)
char *cstr = StringValuePtr(obj);
- #else
- char *cstr = STR2CSTR(obj);
- #endif
size_t size = RSTRING_LEN(obj) + 1;
if (cptr) {
if (alloc) {
@@ -2101,7 +2107,7 @@ SWIG_ruby_failed(void)
}
-/*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
+/*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
SWIGINTERN VALUE SWIG_AUX_NUM2LONG(VALUE *args)
{
VALUE obj = args[0];
@@ -2169,10 +2175,10 @@ SWIG_FromCharPtr(const char *cptr)
return SWIG_FromCharPtrAndSize(cptr, (cptr ? strlen(cptr) : 0));
}
-SWIGINTERN svn_commit_info_t *new_svn_commit_info_t(apr_pool_t *pool){
+SWIGINTERN struct svn_commit_info_t *new_svn_commit_info_t(apr_pool_t *pool){
return svn_create_commit_info(pool);
}
-SWIGINTERN svn_commit_info_t *svn_commit_info_t_dup(svn_commit_info_t *self,apr_pool_t *pool){
+SWIGINTERN svn_commit_info_t *svn_commit_info_t_dup(struct svn_commit_info_t *self,apr_pool_t *pool){
return svn_commit_info_dup(self, pool);
}
@@ -2225,7 +2231,7 @@ SWIG_From_char (char c)
return SWIG_FromCharPtrAndSize(&c,1);
}
-SWIGINTERN svn_merge_range_t *new_svn_merge_range_t(svn_revnum_t start,svn_revnum_t end,svn_boolean_t inheritable,apr_pool_t *pool){
+SWIGINTERN struct svn_merge_range_t *new_svn_merge_range_t(svn_revnum_t start,svn_revnum_t end,svn_boolean_t inheritable,apr_pool_t *pool){
svn_merge_range_t *self;
self = apr_palloc(pool, sizeof(svn_merge_range_t));
self->start = start;
@@ -2233,7 +2239,7 @@ SWIGINTERN svn_merge_range_t *new_svn_merge_range_t(svn_revnum_t start,svn_revnu
self->inheritable = inheritable;
return self;
}
-SWIGINTERN svn_merge_range_t *svn_merge_range_t_dup(svn_merge_range_t *self,apr_pool_t *pool){
+SWIGINTERN svn_merge_range_t *svn_merge_range_t_dup(struct svn_merge_range_t *self,apr_pool_t *pool){
return svn_merge_range_dup(self, pool);
}
@@ -2304,10 +2310,15 @@ typedef struct {
+#include "svn_cmdline.h"
+
+
+
+
#include "svn_auth.h"
-/*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
+/*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
SWIGINTERN VALUE SWIG_AUX_NUM2ULONG(VALUE *args)
{
VALUE obj = args[0];
@@ -2428,6 +2439,11 @@ static svn_boolean_t svn_config_invoke_enumerator2(
return _obj(name, value, baton, pool);
}
+static svn_error_t * svn_config_invoke_auth_walk_func(
+ svn_config_auth_walk_func_t _obj, svn_boolean_t *delete_cred, void *cleanup_baton, const char *cred_kind, const char *realmstring, apr_hash_t *hash, apr_pool_t *scratch_pool) {
+ return _obj(delete_cred, cleanup_baton, cred_kind, realmstring, hash, scratch_pool);
+}
+
#include "svn_utf.h"
@@ -2488,6 +2504,11 @@ static svn_error_t * svn_stream_invoke_seek_fn(
return _obj(baton, mark);
}
+static svn_error_t * svn_stream_invoke_lazyopen_func(
+ svn_stream_lazyopen_func_t _obj, svn_stream_t **stream, void *baton, apr_pool_t *result_pool, apr_pool_t *scratch_pool) {
+ return _obj(stream, baton, result_pool, scratch_pool);
+}
+
static svn_error_t * svn_io_invoke_walk_func(
svn_io_walk_func_t _obj, void *baton, const char *path, const apr_finfo_t *finfo, apr_pool_t *pool) {
return _obj(baton, path, finfo, pool);
@@ -2495,6 +2516,34 @@ static svn_error_t * svn_io_invoke_walk_func(
+#include "svn_checksum.h"
+
+
+
+
+/* Helper function to set the gnome-keyring unlock prompt function. This
+ * C function accepts an auth baton, a function and a prompt baton, but
+ * the below callback_typemap uses both the function and the prompt
+ * baton, so the resulting binding has just two arguments: The auth
+ * baton and the prompt function.
+ * The prompt function should again have two arguments: The keyring name
+ * (string) and a pool (except for the ruby version, which doesn't have
+ * the pool argument). It should return the entered password (string).
+ * This binding generated for this function generates a reference to the
+ * prompt function that was passed into this. The caller should store
+ * that reference somewhere, to prevent the function from being garbage
+ * collected...
+ */
+static void svn_auth_set_gnome_keyring_unlock_prompt_func(svn_auth_baton_t *ab,
+ svn_auth_gnome_keyring_unlock_prompt_func_t prompt_func,
+ void *prompt_baton) {
+ svn_auth_set_parameter(ab, SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_FUNC,
+ prompt_func);
+ svn_auth_set_parameter(ab, SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_BATON,
+ prompt_baton);
+}
+
+
#include "svn_md5.h"
@@ -2591,7 +2640,7 @@ SWIGINTERN struct svn_auth_baton_t *new_svn_auth_baton_t(apr_array_header_t *pro
#include "svn_diff.h"
-SWIGINTERN svn_diff_file_options_t *new_svn_diff_file_options_t(apr_pool_t *pool){
+SWIGINTERN struct svn_diff_file_options_t *new_svn_diff_file_options_t(apr_pool_t *pool){
return svn_diff_file_options_create(pool);
}
@@ -2777,15 +2826,15 @@ svn_swig_mergeinfo_sort(apr_hash_t **mergeinfo_inout, apr_pool_t *pool)
}
static svn_error_t *
-svn_swig_rangelist_merge(apr_array_header_t **rangelist_inout,
- apr_array_header_t *changes,
+svn_swig_rangelist_merge(svn_rangelist_t **rangelist_inout,
+ svn_rangelist_t *changes,
apr_pool_t *pool)
{
return svn_rangelist_merge(rangelist_inout, changes, pool);
}
static svn_error_t *
-svn_swig_rangelist_reverse(apr_array_header_t **rangelist_inout,
+svn_swig_rangelist_reverse(svn_rangelist_t **rangelist_inout,
apr_pool_t *pool)
{
return svn_rangelist_reverse(*rangelist_inout, pool);
@@ -3301,11 +3350,11 @@ fail:
}
-swig_class SwigClassSvn_error_t;
+static swig_class SwigClassSvn_error_t;
SWIGINTERN VALUE
_wrap_svn_error_t_apr_err_set(int argc, VALUE *argv, VALUE self) {
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
apr_status_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3317,9 +3366,9 @@ _wrap_svn_error_t_apr_err_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_error_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_error_t *","apr_err", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_error_t *","apr_err", 1, self ));
}
- arg1 = (svn_error_t *)(argp1);
+ arg1 = (struct svn_error_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "apr_status_t","apr_err", 2, argv[0] ));
@@ -3334,7 +3383,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_error_t_apr_err_get(int argc, VALUE *argv, VALUE self) {
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_status_t result;
@@ -3345,9 +3394,9 @@ _wrap_svn_error_t_apr_err_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_error_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_error_t *","apr_err", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_error_t *","apr_err", 1, self ));
}
- arg1 = (svn_error_t *)(argp1);
+ arg1 = (struct svn_error_t *)(argp1);
result = (apr_status_t) ((arg1)->apr_err);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -3358,7 +3407,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_error_t_message_get(int argc, VALUE *argv, VALUE self) {
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -3369,9 +3418,9 @@ _wrap_svn_error_t_message_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_error_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_error_t *","message", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_error_t *","message", 1, self ));
}
- arg1 = (svn_error_t *)(argp1);
+ arg1 = (struct svn_error_t *)(argp1);
result = (char *) ((arg1)->message);
{
if (result) {
@@ -3388,7 +3437,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_error_t_child_set(int argc, VALUE *argv, VALUE self) {
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
struct svn_error_t *arg2 = (struct svn_error_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3400,9 +3449,9 @@ _wrap_svn_error_t_child_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_error_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_error_t *","child", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_error_t *","child", 1, self ));
}
- arg1 = (svn_error_t *)(argp1);
+ arg1 = (struct svn_error_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_error_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "struct svn_error_t *","child", 2, argv[0] ));
@@ -3417,7 +3466,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_error_t_child_get(int argc, VALUE *argv, VALUE self) {
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
struct svn_error_t *result = 0 ;
@@ -3428,9 +3477,9 @@ _wrap_svn_error_t_child_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_error_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_error_t *","child", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_error_t *","child", 1, self ));
}
- arg1 = (svn_error_t *)(argp1);
+ arg1 = (struct svn_error_t *)(argp1);
result = (struct svn_error_t *) ((arg1)->child);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_error_t, 0 | 0 );
return vresult;
@@ -3441,7 +3490,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_error_t_pool_set(int argc, VALUE *argv, VALUE self) {
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
apr_pool_t *arg2 = (apr_pool_t *) 0 ;
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
@@ -3458,9 +3507,9 @@ _wrap_svn_error_t_pool_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_error_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_error_t *","pool", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_error_t *","pool", 1, self ));
}
- arg1 = (svn_error_t *)(argp1);
+ arg1 = (struct svn_error_t *)(argp1);
if (argc > 0) {
}
@@ -3487,7 +3536,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_error_t_pool_get(int argc, VALUE *argv, VALUE self) {
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_pool_t *result = 0 ;
@@ -3498,9 +3547,9 @@ _wrap_svn_error_t_pool_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_error_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_error_t *","pool", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_error_t *","pool", 1, self ));
}
- arg1 = (svn_error_t *)(argp1);
+ arg1 = (struct svn_error_t *)(argp1);
result = (apr_pool_t *) ((arg1)->pool);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_pool_t, 0 | 0 );
return vresult;
@@ -3511,7 +3560,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_error_t_file_get(int argc, VALUE *argv, VALUE self) {
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -3522,9 +3571,9 @@ _wrap_svn_error_t_file_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_error_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_error_t *","file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_error_t *","file", 1, self ));
}
- arg1 = (svn_error_t *)(argp1);
+ arg1 = (struct svn_error_t *)(argp1);
result = (char *) ((arg1)->file);
{
if (result) {
@@ -3541,7 +3590,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_error_t_line_set(int argc, VALUE *argv, VALUE self) {
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
long arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3553,9 +3602,9 @@ _wrap_svn_error_t_line_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_error_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_error_t *","line", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_error_t *","line", 1, self ));
}
- arg1 = (svn_error_t *)(argp1);
+ arg1 = (struct svn_error_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "long","line", 2, argv[0] ));
@@ -3570,7 +3619,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_error_t_line_get(int argc, VALUE *argv, VALUE self) {
- svn_error_t *arg1 = (svn_error_t *) 0 ;
+ struct svn_error_t *arg1 = (struct svn_error_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
long result;
@@ -3581,9 +3630,9 @@ _wrap_svn_error_t_line_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_error_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_error_t *","line", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_error_t *","line", 1, self ));
}
- arg1 = (svn_error_t *)(argp1);
+ arg1 = (struct svn_error_t *)(argp1);
result = (long) ((arg1)->line);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -3611,13 +3660,13 @@ _wrap_svn_error_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_error_t(int argc, VALUE *argv, VALUE self) {
- svn_error_t *result = 0 ;
+ struct svn_error_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_error_t *)calloc(1, sizeof(svn_error_t));
+ result = (struct svn_error_t *)calloc(1, sizeof(struct svn_error_t));
DATA_PTR(self) = result;
@@ -3630,7 +3679,7 @@ fail:
SWIGINTERN void
-free_svn_error_t(svn_error_t *arg1) {
+free_svn_error_t(struct svn_error_t *arg1) {
free((char *) arg1);
}
@@ -3984,11 +4033,11 @@ fail:
}
-swig_class SwigClassSvn_dirent_t;
+static swig_class SwigClassSvn_dirent_t;
SWIGINTERN VALUE
_wrap_svn_dirent_t_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4000,9 +4049,9 @@ _wrap_svn_dirent_t_kind_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_dirent_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_dirent_t *","kind", 1, self ));
}
- arg1 = (svn_dirent_t *)(argp1);
+ arg1 = (struct svn_dirent_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_node_kind_t","kind", 2, argv[0] ));
@@ -4017,7 +4066,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_dirent_t_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_node_kind_t result;
@@ -4028,9 +4077,9 @@ _wrap_svn_dirent_t_kind_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_dirent_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_dirent_t *","kind", 1, self ));
}
- arg1 = (svn_dirent_t *)(argp1);
+ arg1 = (struct svn_dirent_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -4059,7 +4108,7 @@ Size or Length of the svn_dirent_t.
*/
SWIGINTERN VALUE
_wrap_svn_dirent_t_size_set(int argc, VALUE *argv, VALUE self) {
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
svn_filesize_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4069,9 +4118,9 @@ _wrap_svn_dirent_t_size_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_dirent_t *","size", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_dirent_t *","size", 1, self ));
}
- arg1 = (svn_dirent_t *)(argp1);
+ arg1 = (struct svn_dirent_t *)(argp1);
{
arg2 = (svn_filesize_t)NUM2LL(argv[0]);
}
@@ -4084,7 +4133,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_dirent_t_size_get(int argc, VALUE *argv, VALUE self) {
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_filesize_t result;
@@ -4095,9 +4144,9 @@ _wrap_svn_dirent_t_size_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_dirent_t *","size", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_dirent_t *","size", 1, self ));
}
- arg1 = (svn_dirent_t *)(argp1);
+ arg1 = (struct svn_dirent_t *)(argp1);
result = ((arg1)->size);
{
vresult = LL2NUM((svn_filesize_t)(result));
@@ -4110,7 +4159,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_dirent_t_has_props_set(int argc, VALUE *argv, VALUE self) {
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4120,9 +4169,9 @@ _wrap_svn_dirent_t_has_props_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_dirent_t *","has_props", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_dirent_t *","has_props", 1, self ));
}
- arg1 = (svn_dirent_t *)(argp1);
+ arg1 = (struct svn_dirent_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->has_props = arg2;
return Qnil;
@@ -4133,7 +4182,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_dirent_t_has_props_get(int argc, VALUE *argv, VALUE self) {
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -4144,9 +4193,9 @@ _wrap_svn_dirent_t_has_props_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_dirent_t *","has_props", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_dirent_t *","has_props", 1, self ));
}
- arg1 = (svn_dirent_t *)(argp1);
+ arg1 = (struct svn_dirent_t *)(argp1);
result = (svn_boolean_t) ((arg1)->has_props);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -4157,7 +4206,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_dirent_t_created_rev_set(int argc, VALUE *argv, VALUE self) {
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4169,9 +4218,9 @@ _wrap_svn_dirent_t_created_rev_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_dirent_t *","created_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_dirent_t *","created_rev", 1, self ));
}
- arg1 = (svn_dirent_t *)(argp1);
+ arg1 = (struct svn_dirent_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","created_rev", 2, argv[0] ));
@@ -4186,7 +4235,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_dirent_t_created_rev_get(int argc, VALUE *argv, VALUE self) {
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -4197,9 +4246,9 @@ _wrap_svn_dirent_t_created_rev_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_dirent_t *","created_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_dirent_t *","created_rev", 1, self ));
}
- arg1 = (svn_dirent_t *)(argp1);
+ arg1 = (struct svn_dirent_t *)(argp1);
result = (svn_revnum_t) ((arg1)->created_rev);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -4210,7 +4259,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_dirent_t_time_set(int argc, VALUE *argv, VALUE self) {
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4220,9 +4269,9 @@ _wrap_svn_dirent_t_time_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_dirent_t *","time", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_dirent_t *","time", 1, self ));
}
- arg1 = (svn_dirent_t *)(argp1);
+ arg1 = (struct svn_dirent_t *)(argp1);
{
arg2 = (apr_time_t)NUM2LL(argv[0]);
}
@@ -4235,7 +4284,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_dirent_t_time_get(int argc, VALUE *argv, VALUE self) {
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_time_t result;
@@ -4246,9 +4295,9 @@ _wrap_svn_dirent_t_time_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_dirent_t *","time", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_dirent_t *","time", 1, self ));
}
- arg1 = (svn_dirent_t *)(argp1);
+ arg1 = (struct svn_dirent_t *)(argp1);
result = ((arg1)->time);
{
vresult = LL2NUM((apr_time_t)(result));
@@ -4261,7 +4310,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_dirent_t_last_author_get(int argc, VALUE *argv, VALUE self) {
- svn_dirent_t *arg1 = (svn_dirent_t *) 0 ;
+ struct svn_dirent_t *arg1 = (struct svn_dirent_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -4272,9 +4321,9 @@ _wrap_svn_dirent_t_last_author_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_dirent_t *","last_author", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_dirent_t *","last_author", 1, self ));
}
- arg1 = (svn_dirent_t *)(argp1);
+ arg1 = (struct svn_dirent_t *)(argp1);
result = (char *) ((arg1)->last_author);
{
if (result) {
@@ -4308,13 +4357,13 @@ _wrap_svn_dirent_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_dirent_t(int argc, VALUE *argv, VALUE self) {
- svn_dirent_t *result = 0 ;
+ struct svn_dirent_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_dirent_t *)calloc(1, sizeof(svn_dirent_t));
+ result = (struct svn_dirent_t *)calloc(1, sizeof(struct svn_dirent_t));
DATA_PTR(self) = result;
@@ -4327,7 +4376,7 @@ fail:
SWIGINTERN void
-free_svn_dirent_t(svn_dirent_t *arg1) {
+free_svn_dirent_t(struct svn_dirent_t *arg1) {
free((char *) arg1);
}
@@ -4385,11 +4434,57 @@ fail:
}
-swig_class SwigClassSvn_commit_info_t;
+SWIGINTERN VALUE
+_wrap_svn_dirent_create(int argc, VALUE *argv, VALUE self) {
+ apr_pool_t *arg1 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_dirent_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg1);
+ _global_pool = arg1;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 0) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ if (argc > 0) {
+
+ }
+ {
+ result = (svn_dirent_t *)svn_dirent_create(arg1);
+
+
+
+ }
+ vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_dirent_t, 0 | 0 );
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+static swig_class SwigClassSvn_commit_info_t;
SWIGINTERN VALUE
_wrap_svn_commit_info_t_revision_set(int argc, VALUE *argv, VALUE self) {
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4401,9 +4496,9 @@ _wrap_svn_commit_info_t_revision_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_commit_info_t *","revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_commit_info_t *","revision", 1, self ));
}
- arg1 = (svn_commit_info_t *)(argp1);
+ arg1 = (struct svn_commit_info_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","revision", 2, argv[0] ));
@@ -4418,7 +4513,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_commit_info_t_revision_get(int argc, VALUE *argv, VALUE self) {
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -4429,9 +4524,9 @@ _wrap_svn_commit_info_t_revision_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_commit_info_t *","revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_commit_info_t *","revision", 1, self ));
}
- arg1 = (svn_commit_info_t *)(argp1);
+ arg1 = (struct svn_commit_info_t *)(argp1);
result = (svn_revnum_t) ((arg1)->revision);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -4442,7 +4537,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_commit_info_t_date_set(int argc, VALUE *argv, VALUE self) {
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4455,9 +4550,9 @@ _wrap_svn_commit_info_t_date_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_commit_info_t *","date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_commit_info_t *","date", 1, self ));
}
- arg1 = (svn_commit_info_t *)(argp1);
+ arg1 = (struct svn_commit_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","date", 2, argv[0] ));
@@ -4481,7 +4576,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_commit_info_t_date_get(int argc, VALUE *argv, VALUE self) {
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -4492,9 +4587,9 @@ _wrap_svn_commit_info_t_date_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_commit_info_t *","date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_commit_info_t *","date", 1, self ));
}
- arg1 = (svn_commit_info_t *)(argp1);
+ arg1 = (struct svn_commit_info_t *)(argp1);
result = (char *) ((arg1)->date);
{
if (result) {
@@ -4511,7 +4606,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_commit_info_t_author_set(int argc, VALUE *argv, VALUE self) {
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4524,9 +4619,9 @@ _wrap_svn_commit_info_t_author_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_commit_info_t *","author", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_commit_info_t *","author", 1, self ));
}
- arg1 = (svn_commit_info_t *)(argp1);
+ arg1 = (struct svn_commit_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","author", 2, argv[0] ));
@@ -4550,7 +4645,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_commit_info_t_author_get(int argc, VALUE *argv, VALUE self) {
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -4561,9 +4656,9 @@ _wrap_svn_commit_info_t_author_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_commit_info_t *","author", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_commit_info_t *","author", 1, self ));
}
- arg1 = (svn_commit_info_t *)(argp1);
+ arg1 = (struct svn_commit_info_t *)(argp1);
result = (char *) ((arg1)->author);
{
if (result) {
@@ -4580,7 +4675,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_commit_info_t_post_commit_err_set(int argc, VALUE *argv, VALUE self) {
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4593,9 +4688,9 @@ _wrap_svn_commit_info_t_post_commit_err_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_commit_info_t *","post_commit_err", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_commit_info_t *","post_commit_err", 1, self ));
}
- arg1 = (svn_commit_info_t *)(argp1);
+ arg1 = (struct svn_commit_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","post_commit_err", 2, argv[0] ));
@@ -4619,7 +4714,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_commit_info_t_post_commit_err_get(int argc, VALUE *argv, VALUE self) {
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -4630,9 +4725,9 @@ _wrap_svn_commit_info_t_post_commit_err_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_commit_info_t *","post_commit_err", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_commit_info_t *","post_commit_err", 1, self ));
}
- arg1 = (svn_commit_info_t *)(argp1);
+ arg1 = (struct svn_commit_info_t *)(argp1);
result = (char *) ((arg1)->post_commit_err);
{
if (result) {
@@ -4649,7 +4744,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_commit_info_t_repos_root_set(int argc, VALUE *argv, VALUE self) {
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4662,9 +4757,9 @@ _wrap_svn_commit_info_t_repos_root_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_commit_info_t *","repos_root", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_commit_info_t *","repos_root", 1, self ));
}
- arg1 = (svn_commit_info_t *)(argp1);
+ arg1 = (struct svn_commit_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","repos_root", 2, argv[0] ));
@@ -4688,7 +4783,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_commit_info_t_repos_root_get(int argc, VALUE *argv, VALUE self) {
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -4699,9 +4794,9 @@ _wrap_svn_commit_info_t_repos_root_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_commit_info_t *","repos_root", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_commit_info_t *","repos_root", 1, self ));
}
- arg1 = (svn_commit_info_t *)(argp1);
+ arg1 = (struct svn_commit_info_t *)(argp1);
result = (char *) ((arg1)->repos_root);
{
if (result) {
@@ -4738,7 +4833,7 @@ _wrap_new_svn_commit_info_t(int argc, VALUE *argv, VALUE self) {
apr_pool_t *arg1 = (apr_pool_t *) 0 ;
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
- svn_commit_info_t *result = 0 ;
+ struct svn_commit_info_t *result = 0 ;
{
svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg1);
@@ -4752,7 +4847,7 @@ _wrap_new_svn_commit_info_t(int argc, VALUE *argv, VALUE self) {
}
{
- result = (svn_commit_info_t *)new_svn_commit_info_t(arg1);
+ result = (struct svn_commit_info_t *)new_svn_commit_info_t(arg1);
DATA_PTR(self) = result;
@@ -4778,10 +4873,10 @@ fail:
}
-SWIGINTERN void delete_svn_commit_info_t(svn_commit_info_t *self){
+SWIGINTERN void delete_svn_commit_info_t(struct svn_commit_info_t *self){
}
SWIGINTERN void
-free_svn_commit_info_t(svn_commit_info_t *arg1) {
+free_svn_commit_info_t(struct svn_commit_info_t *arg1) {
delete_svn_commit_info_t(arg1);
}
@@ -4796,7 +4891,7 @@ Create a duplicate of the class and unfreeze it if needed.
*/
SWIGINTERN VALUE
_wrap_svn_commit_info_t_dup(int argc, VALUE *argv, VALUE self) {
- svn_commit_info_t *arg1 = (svn_commit_info_t *) 0 ;
+ struct svn_commit_info_t *arg1 = (struct svn_commit_info_t *) 0 ;
apr_pool_t *arg2 = (apr_pool_t *) 0 ;
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
@@ -4815,9 +4910,9 @@ _wrap_svn_commit_info_t_dup(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_commit_info_t *","dup", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_commit_info_t *","dup", 1, self ));
}
- arg1 = (svn_commit_info_t *)(argp1);
+ arg1 = (struct svn_commit_info_t *)(argp1);
if (argc > 0) {
}
@@ -4848,11 +4943,11 @@ fail:
}
-swig_class SwigClassSvn_log_changed_path2_t;
+static swig_class SwigClassSvn_log_changed_path2_t;
SWIGINTERN VALUE
_wrap_svn_log_changed_path2_t_action_set(int argc, VALUE *argv, VALUE self) {
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
char arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4864,9 +4959,9 @@ _wrap_svn_log_changed_path2_t_action_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_changed_path2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_changed_path2_t *","action", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_changed_path2_t *","action", 1, self ));
}
- arg1 = (svn_log_changed_path2_t *)(argp1);
+ arg1 = (struct svn_log_changed_path2_t *)(argp1);
ecode2 = SWIG_AsVal_char(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "char","action", 2, argv[0] ));
@@ -4881,7 +4976,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_changed_path2_t_action_get(int argc, VALUE *argv, VALUE self) {
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char result;
@@ -4892,9 +4987,9 @@ _wrap_svn_log_changed_path2_t_action_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_changed_path2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_changed_path2_t *","action", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_changed_path2_t *","action", 1, self ));
}
- arg1 = (svn_log_changed_path2_t *)(argp1);
+ arg1 = (struct svn_log_changed_path2_t *)(argp1);
result = (char) ((arg1)->action);
vresult = SWIG_From_char((char)(result));
return vresult;
@@ -4905,7 +5000,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_changed_path2_t_copyfrom_path_set(int argc, VALUE *argv, VALUE self) {
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4918,9 +5013,9 @@ _wrap_svn_log_changed_path2_t_copyfrom_path_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_changed_path2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_changed_path2_t *","copyfrom_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_changed_path2_t *","copyfrom_path", 1, self ));
}
- arg1 = (svn_log_changed_path2_t *)(argp1);
+ arg1 = (struct svn_log_changed_path2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","copyfrom_path", 2, argv[0] ));
@@ -4944,7 +5039,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_changed_path2_t_copyfrom_path_get(int argc, VALUE *argv, VALUE self) {
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -4955,9 +5050,9 @@ _wrap_svn_log_changed_path2_t_copyfrom_path_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_changed_path2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_changed_path2_t *","copyfrom_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_changed_path2_t *","copyfrom_path", 1, self ));
}
- arg1 = (svn_log_changed_path2_t *)(argp1);
+ arg1 = (struct svn_log_changed_path2_t *)(argp1);
result = (char *) ((arg1)->copyfrom_path);
{
if (result) {
@@ -4974,7 +5069,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_changed_path2_t_copyfrom_rev_set(int argc, VALUE *argv, VALUE self) {
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4986,9 +5081,9 @@ _wrap_svn_log_changed_path2_t_copyfrom_rev_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_changed_path2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_changed_path2_t *","copyfrom_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_changed_path2_t *","copyfrom_rev", 1, self ));
}
- arg1 = (svn_log_changed_path2_t *)(argp1);
+ arg1 = (struct svn_log_changed_path2_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","copyfrom_rev", 2, argv[0] ));
@@ -5003,7 +5098,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_changed_path2_t_copyfrom_rev_get(int argc, VALUE *argv, VALUE self) {
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -5014,9 +5109,9 @@ _wrap_svn_log_changed_path2_t_copyfrom_rev_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_changed_path2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_changed_path2_t *","copyfrom_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_changed_path2_t *","copyfrom_rev", 1, self ));
}
- arg1 = (svn_log_changed_path2_t *)(argp1);
+ arg1 = (struct svn_log_changed_path2_t *)(argp1);
result = (svn_revnum_t) ((arg1)->copyfrom_rev);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -5027,7 +5122,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_changed_path2_t_node_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5039,9 +5134,9 @@ _wrap_svn_log_changed_path2_t_node_kind_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_changed_path2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_changed_path2_t *","node_kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_changed_path2_t *","node_kind", 1, self ));
}
- arg1 = (svn_log_changed_path2_t *)(argp1);
+ arg1 = (struct svn_log_changed_path2_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_node_kind_t","node_kind", 2, argv[0] ));
@@ -5056,7 +5151,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_changed_path2_t_node_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_node_kind_t result;
@@ -5067,9 +5162,9 @@ _wrap_svn_log_changed_path2_t_node_kind_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_changed_path2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_changed_path2_t *","node_kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_changed_path2_t *","node_kind", 1, self ));
}
- arg1 = (svn_log_changed_path2_t *)(argp1);
+ arg1 = (struct svn_log_changed_path2_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->node_kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -5080,7 +5175,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_changed_path2_t_text_modified_set(int argc, VALUE *argv, VALUE self) {
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
svn_tristate_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5092,9 +5187,9 @@ _wrap_svn_log_changed_path2_t_text_modified_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_changed_path2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_changed_path2_t *","text_modified", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_changed_path2_t *","text_modified", 1, self ));
}
- arg1 = (svn_log_changed_path2_t *)(argp1);
+ arg1 = (struct svn_log_changed_path2_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_tristate_t","text_modified", 2, argv[0] ));
@@ -5109,7 +5204,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_changed_path2_t_text_modified_get(int argc, VALUE *argv, VALUE self) {
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_tristate_t result;
@@ -5120,9 +5215,9 @@ _wrap_svn_log_changed_path2_t_text_modified_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_changed_path2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_changed_path2_t *","text_modified", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_changed_path2_t *","text_modified", 1, self ));
}
- arg1 = (svn_log_changed_path2_t *)(argp1);
+ arg1 = (struct svn_log_changed_path2_t *)(argp1);
result = (svn_tristate_t) ((arg1)->text_modified);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -5133,7 +5228,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_changed_path2_t_props_modified_set(int argc, VALUE *argv, VALUE self) {
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
svn_tristate_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5145,9 +5240,9 @@ _wrap_svn_log_changed_path2_t_props_modified_set(int argc, VALUE *argv, VALUE se
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_changed_path2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_changed_path2_t *","props_modified", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_changed_path2_t *","props_modified", 1, self ));
}
- arg1 = (svn_log_changed_path2_t *)(argp1);
+ arg1 = (struct svn_log_changed_path2_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_tristate_t","props_modified", 2, argv[0] ));
@@ -5162,7 +5257,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_changed_path2_t_props_modified_get(int argc, VALUE *argv, VALUE self) {
- svn_log_changed_path2_t *arg1 = (svn_log_changed_path2_t *) 0 ;
+ struct svn_log_changed_path2_t *arg1 = (struct svn_log_changed_path2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_tristate_t result;
@@ -5173,9 +5268,9 @@ _wrap_svn_log_changed_path2_t_props_modified_get(int argc, VALUE *argv, VALUE se
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_changed_path2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_changed_path2_t *","props_modified", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_changed_path2_t *","props_modified", 1, self ));
}
- arg1 = (svn_log_changed_path2_t *)(argp1);
+ arg1 = (struct svn_log_changed_path2_t *)(argp1);
result = (svn_tristate_t) ((arg1)->props_modified);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -5203,13 +5298,13 @@ _wrap_svn_log_changed_path2_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_log_changed_path2_t(int argc, VALUE *argv, VALUE self) {
- svn_log_changed_path2_t *result = 0 ;
+ struct svn_log_changed_path2_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_log_changed_path2_t *)calloc(1, sizeof(svn_log_changed_path2_t));
+ result = (struct svn_log_changed_path2_t *)calloc(1, sizeof(struct svn_log_changed_path2_t));
DATA_PTR(self) = result;
@@ -5222,7 +5317,7 @@ fail:
SWIGINTERN void
-free_svn_log_changed_path2_t(svn_log_changed_path2_t *arg1) {
+free_svn_log_changed_path2_t(struct svn_log_changed_path2_t *arg1) {
free((char *) arg1);
}
@@ -5326,11 +5421,11 @@ fail:
}
-swig_class SwigClassSvn_log_changed_path_t;
+static swig_class SwigClassSvn_log_changed_path_t;
SWIGINTERN VALUE
_wrap_svn_log_changed_path_t_action_set(int argc, VALUE *argv, VALUE self) {
- svn_log_changed_path_t *arg1 = (svn_log_changed_path_t *) 0 ;
+ struct svn_log_changed_path_t *arg1 = (struct svn_log_changed_path_t *) 0 ;
char arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5342,9 +5437,9 @@ _wrap_svn_log_changed_path_t_action_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_changed_path_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_changed_path_t *","action", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_changed_path_t *","action", 1, self ));
}
- arg1 = (svn_log_changed_path_t *)(argp1);
+ arg1 = (struct svn_log_changed_path_t *)(argp1);
ecode2 = SWIG_AsVal_char(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "char","action", 2, argv[0] ));
@@ -5359,7 +5454,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_changed_path_t_action_get(int argc, VALUE *argv, VALUE self) {
- svn_log_changed_path_t *arg1 = (svn_log_changed_path_t *) 0 ;
+ struct svn_log_changed_path_t *arg1 = (struct svn_log_changed_path_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char result;
@@ -5370,9 +5465,9 @@ _wrap_svn_log_changed_path_t_action_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_changed_path_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_changed_path_t *","action", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_changed_path_t *","action", 1, self ));
}
- arg1 = (svn_log_changed_path_t *)(argp1);
+ arg1 = (struct svn_log_changed_path_t *)(argp1);
result = (char) ((arg1)->action);
vresult = SWIG_From_char((char)(result));
return vresult;
@@ -5383,7 +5478,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_changed_path_t_copyfrom_path_get(int argc, VALUE *argv, VALUE self) {
- svn_log_changed_path_t *arg1 = (svn_log_changed_path_t *) 0 ;
+ struct svn_log_changed_path_t *arg1 = (struct svn_log_changed_path_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -5394,9 +5489,9 @@ _wrap_svn_log_changed_path_t_copyfrom_path_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_changed_path_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_changed_path_t *","copyfrom_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_changed_path_t *","copyfrom_path", 1, self ));
}
- arg1 = (svn_log_changed_path_t *)(argp1);
+ arg1 = (struct svn_log_changed_path_t *)(argp1);
result = (char *) ((arg1)->copyfrom_path);
{
if (result) {
@@ -5413,7 +5508,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_changed_path_t_copyfrom_rev_set(int argc, VALUE *argv, VALUE self) {
- svn_log_changed_path_t *arg1 = (svn_log_changed_path_t *) 0 ;
+ struct svn_log_changed_path_t *arg1 = (struct svn_log_changed_path_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5425,9 +5520,9 @@ _wrap_svn_log_changed_path_t_copyfrom_rev_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_changed_path_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_changed_path_t *","copyfrom_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_changed_path_t *","copyfrom_rev", 1, self ));
}
- arg1 = (svn_log_changed_path_t *)(argp1);
+ arg1 = (struct svn_log_changed_path_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","copyfrom_rev", 2, argv[0] ));
@@ -5442,7 +5537,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_changed_path_t_copyfrom_rev_get(int argc, VALUE *argv, VALUE self) {
- svn_log_changed_path_t *arg1 = (svn_log_changed_path_t *) 0 ;
+ struct svn_log_changed_path_t *arg1 = (struct svn_log_changed_path_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -5453,9 +5548,9 @@ _wrap_svn_log_changed_path_t_copyfrom_rev_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_changed_path_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_changed_path_t *","copyfrom_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_changed_path_t *","copyfrom_rev", 1, self ));
}
- arg1 = (svn_log_changed_path_t *)(argp1);
+ arg1 = (struct svn_log_changed_path_t *)(argp1);
result = (svn_revnum_t) ((arg1)->copyfrom_rev);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -5483,13 +5578,13 @@ _wrap_svn_log_changed_path_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_log_changed_path_t(int argc, VALUE *argv, VALUE self) {
- svn_log_changed_path_t *result = 0 ;
+ struct svn_log_changed_path_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_log_changed_path_t *)calloc(1, sizeof(svn_log_changed_path_t));
+ result = (struct svn_log_changed_path_t *)calloc(1, sizeof(struct svn_log_changed_path_t));
DATA_PTR(self) = result;
@@ -5502,7 +5597,7 @@ fail:
SWIGINTERN void
-free_svn_log_changed_path_t(svn_log_changed_path_t *arg1) {
+free_svn_log_changed_path_t(struct svn_log_changed_path_t *arg1) {
free((char *) arg1);
}
@@ -5560,11 +5655,11 @@ fail:
}
-swig_class SwigClassSvn_log_entry_t;
+static swig_class SwigClassSvn_log_entry_t;
SWIGINTERN VALUE
_wrap_svn_log_entry_t_changed_paths_set(int argc, VALUE *argv, VALUE self) {
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
apr_hash_t *arg2 = (apr_hash_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5576,9 +5671,9 @@ _wrap_svn_log_entry_t_changed_paths_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_entry_t *","changed_paths", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_entry_t *","changed_paths", 1, self ));
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_apr_hash_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "apr_hash_t *","changed_paths", 2, argv[0] ));
@@ -5593,7 +5688,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_entry_t_changed_paths_get(int argc, VALUE *argv, VALUE self) {
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_hash_t *result = 0 ;
@@ -5604,9 +5699,9 @@ _wrap_svn_log_entry_t_changed_paths_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_entry_t *","changed_paths", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_entry_t *","changed_paths", 1, self ));
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
result = (apr_hash_t *) ((arg1)->changed_paths);
{
VALUE rb_changed_path_hash;
@@ -5622,7 +5717,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_entry_t_revision_set(int argc, VALUE *argv, VALUE self) {
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5634,9 +5729,9 @@ _wrap_svn_log_entry_t_revision_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_entry_t *","revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_entry_t *","revision", 1, self ));
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","revision", 2, argv[0] ));
@@ -5651,7 +5746,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_entry_t_revision_get(int argc, VALUE *argv, VALUE self) {
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -5662,9 +5757,9 @@ _wrap_svn_log_entry_t_revision_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_entry_t *","revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_entry_t *","revision", 1, self ));
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
result = (svn_revnum_t) ((arg1)->revision);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -5675,7 +5770,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_entry_t_revprops_set(int argc, VALUE *argv, VALUE self) {
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
apr_hash_t *arg2 = (apr_hash_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5685,9 +5780,9 @@ _wrap_svn_log_entry_t_revprops_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_entry_t *","revprops", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_entry_t *","revprops", 1, self ));
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
{
VALUE rb_pool = Qnil;
if (!_global_pool) {
@@ -5714,7 +5809,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_entry_t_revprops_get(int argc, VALUE *argv, VALUE self) {
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_hash_t *result = 0 ;
@@ -5725,9 +5820,9 @@ _wrap_svn_log_entry_t_revprops_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_entry_t *","revprops", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_entry_t *","revprops", 1, self ));
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
result = (apr_hash_t *) ((arg1)->revprops);
{
vresult = SWIG_Ruby_AppendOutput(vresult, svn_swig_rb_apr_hash_to_hash_svn_string(result));
@@ -5740,7 +5835,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_entry_t_has_children_set(int argc, VALUE *argv, VALUE self) {
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5750,9 +5845,9 @@ _wrap_svn_log_entry_t_has_children_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_entry_t *","has_children", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_entry_t *","has_children", 1, self ));
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->has_children = arg2;
return Qnil;
@@ -5763,7 +5858,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_entry_t_has_children_get(int argc, VALUE *argv, VALUE self) {
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -5774,9 +5869,9 @@ _wrap_svn_log_entry_t_has_children_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_entry_t *","has_children", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_entry_t *","has_children", 1, self ));
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
result = (svn_boolean_t) ((arg1)->has_children);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -5787,7 +5882,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_entry_t_changed_paths2_set(int argc, VALUE *argv, VALUE self) {
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
apr_hash_t *arg2 = (apr_hash_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5799,9 +5894,9 @@ _wrap_svn_log_entry_t_changed_paths2_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_entry_t *","changed_paths2", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_entry_t *","changed_paths2", 1, self ));
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_apr_hash_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "apr_hash_t *","changed_paths2", 2, argv[0] ));
@@ -5816,7 +5911,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_entry_t_changed_paths2_get(int argc, VALUE *argv, VALUE self) {
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_hash_t *result = 0 ;
@@ -5827,9 +5922,9 @@ _wrap_svn_log_entry_t_changed_paths2_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_entry_t *","changed_paths2", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_entry_t *","changed_paths2", 1, self ));
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
result = (apr_hash_t *) ((arg1)->changed_paths2);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_hash_t, 0 | 0 );
return vresult;
@@ -5840,7 +5935,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_entry_t_non_inheritable_set(int argc, VALUE *argv, VALUE self) {
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5850,9 +5945,9 @@ _wrap_svn_log_entry_t_non_inheritable_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_entry_t *","non_inheritable", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_entry_t *","non_inheritable", 1, self ));
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->non_inheritable = arg2;
return Qnil;
@@ -5863,7 +5958,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_entry_t_non_inheritable_get(int argc, VALUE *argv, VALUE self) {
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -5874,9 +5969,9 @@ _wrap_svn_log_entry_t_non_inheritable_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_entry_t *","non_inheritable", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_entry_t *","non_inheritable", 1, self ));
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
result = (svn_boolean_t) ((arg1)->non_inheritable);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -5887,7 +5982,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_entry_t_subtractive_merge_set(int argc, VALUE *argv, VALUE self) {
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5897,9 +5992,9 @@ _wrap_svn_log_entry_t_subtractive_merge_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_entry_t *","subtractive_merge", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_entry_t *","subtractive_merge", 1, self ));
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->subtractive_merge = arg2;
return Qnil;
@@ -5910,7 +6005,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_log_entry_t_subtractive_merge_get(int argc, VALUE *argv, VALUE self) {
- svn_log_entry_t *arg1 = (svn_log_entry_t *) 0 ;
+ struct svn_log_entry_t *arg1 = (struct svn_log_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -5921,9 +6016,9 @@ _wrap_svn_log_entry_t_subtractive_merge_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_log_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_log_entry_t *","subtractive_merge", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_log_entry_t *","subtractive_merge", 1, self ));
}
- arg1 = (svn_log_entry_t *)(argp1);
+ arg1 = (struct svn_log_entry_t *)(argp1);
result = (svn_boolean_t) ((arg1)->subtractive_merge);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -5951,13 +6046,13 @@ _wrap_svn_log_entry_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_log_entry_t(int argc, VALUE *argv, VALUE self) {
- svn_log_entry_t *result = 0 ;
+ struct svn_log_entry_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_log_entry_t *)calloc(1, sizeof(svn_log_entry_t));
+ result = (struct svn_log_entry_t *)calloc(1, sizeof(struct svn_log_entry_t));
DATA_PTR(self) = result;
@@ -5970,7 +6065,7 @@ fail:
SWIGINTERN void
-free_svn_log_entry_t(svn_log_entry_t *arg1) {
+free_svn_log_entry_t(struct svn_log_entry_t *arg1) {
free((char *) arg1);
}
@@ -6170,11 +6265,11 @@ fail:
}
-swig_class SwigClassSvn_lock_t;
+static swig_class SwigClassSvn_lock_t;
SWIGINTERN VALUE
_wrap_svn_lock_t_path_set(int argc, VALUE *argv, VALUE self) {
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6187,9 +6282,9 @@ _wrap_svn_lock_t_path_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_lock_t *","path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_lock_t *","path", 1, self ));
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","path", 2, argv[0] ));
@@ -6213,7 +6308,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_lock_t_path_get(int argc, VALUE *argv, VALUE self) {
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -6224,9 +6319,9 @@ _wrap_svn_lock_t_path_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_lock_t *","path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_lock_t *","path", 1, self ));
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
result = (char *) ((arg1)->path);
{
if (result) {
@@ -6243,7 +6338,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_lock_t_token_set(int argc, VALUE *argv, VALUE self) {
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6256,9 +6351,9 @@ _wrap_svn_lock_t_token_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_lock_t *","token", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_lock_t *","token", 1, self ));
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","token", 2, argv[0] ));
@@ -6282,7 +6377,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_lock_t_token_get(int argc, VALUE *argv, VALUE self) {
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -6293,9 +6388,9 @@ _wrap_svn_lock_t_token_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_lock_t *","token", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_lock_t *","token", 1, self ));
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
result = (char *) ((arg1)->token);
{
if (result) {
@@ -6312,7 +6407,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_lock_t_owner_set(int argc, VALUE *argv, VALUE self) {
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6325,9 +6420,9 @@ _wrap_svn_lock_t_owner_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_lock_t *","owner", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_lock_t *","owner", 1, self ));
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","owner", 2, argv[0] ));
@@ -6351,7 +6446,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_lock_t_owner_get(int argc, VALUE *argv, VALUE self) {
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -6362,9 +6457,9 @@ _wrap_svn_lock_t_owner_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_lock_t *","owner", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_lock_t *","owner", 1, self ));
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
result = (char *) ((arg1)->owner);
{
if (result) {
@@ -6381,7 +6476,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_lock_t_comment_set(int argc, VALUE *argv, VALUE self) {
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6394,9 +6489,9 @@ _wrap_svn_lock_t_comment_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_lock_t *","comment", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_lock_t *","comment", 1, self ));
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","comment", 2, argv[0] ));
@@ -6420,7 +6515,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_lock_t_comment_get(int argc, VALUE *argv, VALUE self) {
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -6431,9 +6526,9 @@ _wrap_svn_lock_t_comment_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_lock_t *","comment", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_lock_t *","comment", 1, self ));
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
result = (char *) ((arg1)->comment);
{
if (result) {
@@ -6450,7 +6545,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_lock_t_is_dav_comment_set(int argc, VALUE *argv, VALUE self) {
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6460,9 +6555,9 @@ _wrap_svn_lock_t_is_dav_comment_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_lock_t *","is_dav_comment", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_lock_t *","is_dav_comment", 1, self ));
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->is_dav_comment = arg2;
return Qnil;
@@ -6473,7 +6568,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_lock_t_is_dav_comment_get(int argc, VALUE *argv, VALUE self) {
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -6484,9 +6579,9 @@ _wrap_svn_lock_t_is_dav_comment_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_lock_t *","is_dav_comment", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_lock_t *","is_dav_comment", 1, self ));
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
result = (svn_boolean_t) ((arg1)->is_dav_comment);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -6497,7 +6592,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_lock_t_creation_date_set(int argc, VALUE *argv, VALUE self) {
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6507,9 +6602,9 @@ _wrap_svn_lock_t_creation_date_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_lock_t *","creation_date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_lock_t *","creation_date", 1, self ));
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
{
arg2 = (apr_time_t)NUM2LL(argv[0]);
}
@@ -6522,7 +6617,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_lock_t_creation_date_get(int argc, VALUE *argv, VALUE self) {
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_time_t result;
@@ -6533,9 +6628,9 @@ _wrap_svn_lock_t_creation_date_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_lock_t *","creation_date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_lock_t *","creation_date", 1, self ));
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
result = ((arg1)->creation_date);
{
vresult = LL2NUM((apr_time_t)(result));
@@ -6548,7 +6643,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_lock_t_expiration_date_set(int argc, VALUE *argv, VALUE self) {
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6558,9 +6653,9 @@ _wrap_svn_lock_t_expiration_date_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_lock_t *","expiration_date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_lock_t *","expiration_date", 1, self ));
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
{
arg2 = (apr_time_t)NUM2LL(argv[0]);
}
@@ -6573,7 +6668,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_lock_t_expiration_date_get(int argc, VALUE *argv, VALUE self) {
- svn_lock_t *arg1 = (svn_lock_t *) 0 ;
+ struct svn_lock_t *arg1 = (struct svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_time_t result;
@@ -6584,9 +6679,9 @@ _wrap_svn_lock_t_expiration_date_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_lock_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_lock_t *","expiration_date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_lock_t *","expiration_date", 1, self ));
}
- arg1 = (svn_lock_t *)(argp1);
+ arg1 = (struct svn_lock_t *)(argp1);
result = ((arg1)->expiration_date);
{
vresult = LL2NUM((apr_time_t)(result));
@@ -6616,13 +6711,13 @@ _wrap_svn_lock_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_lock_t(int argc, VALUE *argv, VALUE self) {
- svn_lock_t *result = 0 ;
+ struct svn_lock_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_lock_t *)calloc(1, sizeof(svn_lock_t));
+ result = (struct svn_lock_t *)calloc(1, sizeof(struct svn_lock_t));
DATA_PTR(self) = result;
@@ -6635,7 +6730,7 @@ fail:
SWIGINTERN void
-free_svn_lock_t(svn_lock_t *arg1) {
+free_svn_lock_t(struct svn_lock_t *arg1) {
free((char *) arg1);
}
@@ -6791,11 +6886,11 @@ fail:
}
-swig_class SwigClassSvn_merge_range_t;
+static swig_class SwigClassSvn_merge_range_t;
SWIGINTERN VALUE
_wrap_svn_merge_range_t_start_set(int argc, VALUE *argv, VALUE self) {
- svn_merge_range_t *arg1 = (svn_merge_range_t *) 0 ;
+ struct svn_merge_range_t *arg1 = (struct svn_merge_range_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6807,9 +6902,9 @@ _wrap_svn_merge_range_t_start_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_merge_range_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_merge_range_t *","start", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_merge_range_t *","start", 1, self ));
}
- arg1 = (svn_merge_range_t *)(argp1);
+ arg1 = (struct svn_merge_range_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","start", 2, argv[0] ));
@@ -6824,7 +6919,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_merge_range_t_start_get(int argc, VALUE *argv, VALUE self) {
- svn_merge_range_t *arg1 = (svn_merge_range_t *) 0 ;
+ struct svn_merge_range_t *arg1 = (struct svn_merge_range_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -6835,9 +6930,9 @@ _wrap_svn_merge_range_t_start_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_merge_range_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_merge_range_t *","start", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_merge_range_t *","start", 1, self ));
}
- arg1 = (svn_merge_range_t *)(argp1);
+ arg1 = (struct svn_merge_range_t *)(argp1);
result = (svn_revnum_t) ((arg1)->start);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -6848,7 +6943,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_merge_range_t_end_set(int argc, VALUE *argv, VALUE self) {
- svn_merge_range_t *arg1 = (svn_merge_range_t *) 0 ;
+ struct svn_merge_range_t *arg1 = (struct svn_merge_range_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6860,9 +6955,9 @@ _wrap_svn_merge_range_t_end_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_merge_range_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_merge_range_t *","end", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_merge_range_t *","end", 1, self ));
}
- arg1 = (svn_merge_range_t *)(argp1);
+ arg1 = (struct svn_merge_range_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","end", 2, argv[0] ));
@@ -6877,7 +6972,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_merge_range_t_end_get(int argc, VALUE *argv, VALUE self) {
- svn_merge_range_t *arg1 = (svn_merge_range_t *) 0 ;
+ struct svn_merge_range_t *arg1 = (struct svn_merge_range_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -6888,9 +6983,9 @@ _wrap_svn_merge_range_t_end_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_merge_range_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_merge_range_t *","end", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_merge_range_t *","end", 1, self ));
}
- arg1 = (svn_merge_range_t *)(argp1);
+ arg1 = (struct svn_merge_range_t *)(argp1);
result = (svn_revnum_t) ((arg1)->end);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -6901,7 +6996,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_merge_range_t_inheritable_set(int argc, VALUE *argv, VALUE self) {
- svn_merge_range_t *arg1 = (svn_merge_range_t *) 0 ;
+ struct svn_merge_range_t *arg1 = (struct svn_merge_range_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6911,9 +7006,9 @@ _wrap_svn_merge_range_t_inheritable_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_merge_range_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_merge_range_t *","inheritable", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_merge_range_t *","inheritable", 1, self ));
}
- arg1 = (svn_merge_range_t *)(argp1);
+ arg1 = (struct svn_merge_range_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->inheritable = arg2;
return Qnil;
@@ -6924,7 +7019,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_merge_range_t_inheritable_get(int argc, VALUE *argv, VALUE self) {
- svn_merge_range_t *arg1 = (svn_merge_range_t *) 0 ;
+ struct svn_merge_range_t *arg1 = (struct svn_merge_range_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -6935,9 +7030,9 @@ _wrap_svn_merge_range_t_inheritable_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_merge_range_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_merge_range_t *","inheritable", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_merge_range_t *","inheritable", 1, self ));
}
- arg1 = (svn_merge_range_t *)(argp1);
+ arg1 = (struct svn_merge_range_t *)(argp1);
result = (svn_boolean_t) ((arg1)->inheritable);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -6975,7 +7070,7 @@ _wrap_new_svn_merge_range_t(int argc, VALUE *argv, VALUE self) {
int ecode1 = 0 ;
long val2 ;
int ecode2 = 0 ;
- svn_merge_range_t *result = 0 ;
+ struct svn_merge_range_t *result = 0 ;
{
svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg4);
@@ -7000,7 +7095,7 @@ _wrap_new_svn_merge_range_t(int argc, VALUE *argv, VALUE self) {
}
{
- result = (svn_merge_range_t *)new_svn_merge_range_t(arg1,arg2,arg3,arg4);
+ result = (struct svn_merge_range_t *)new_svn_merge_range_t(arg1,arg2,arg3,arg4);
DATA_PTR(self) = result;
@@ -7026,10 +7121,10 @@ fail:
}
-SWIGINTERN void delete_svn_merge_range_t(svn_merge_range_t *self){
+SWIGINTERN void delete_svn_merge_range_t(struct svn_merge_range_t *self){
}
SWIGINTERN void
-free_svn_merge_range_t(svn_merge_range_t *arg1) {
+free_svn_merge_range_t(struct svn_merge_range_t *arg1) {
delete_svn_merge_range_t(arg1);
}
@@ -7044,7 +7139,7 @@ Create a duplicate of the class and unfreeze it if needed.
*/
SWIGINTERN VALUE
_wrap_svn_merge_range_t_dup(int argc, VALUE *argv, VALUE self) {
- svn_merge_range_t *arg1 = (svn_merge_range_t *) 0 ;
+ struct svn_merge_range_t *arg1 = (struct svn_merge_range_t *) 0 ;
apr_pool_t *arg2 = (apr_pool_t *) 0 ;
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
@@ -7063,9 +7158,9 @@ _wrap_svn_merge_range_t_dup(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_merge_range_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_merge_range_t *","dup", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_merge_range_t *","dup", 1, self ));
}
- arg1 = (svn_merge_range_t *)(argp1);
+ arg1 = (struct svn_merge_range_t *)(argp1);
if (argc > 0) {
}
@@ -7187,11 +7282,11 @@ fail:
}
-swig_class SwigClassSvn_location_segment_t;
+static swig_class SwigClassSvn_location_segment_t;
SWIGINTERN VALUE
_wrap_svn_location_segment_t_range_start_set(int argc, VALUE *argv, VALUE self) {
- svn_location_segment_t *arg1 = (svn_location_segment_t *) 0 ;
+ struct svn_location_segment_t *arg1 = (struct svn_location_segment_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7203,9 +7298,9 @@ _wrap_svn_location_segment_t_range_start_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_location_segment_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_location_segment_t *","range_start", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_location_segment_t *","range_start", 1, self ));
}
- arg1 = (svn_location_segment_t *)(argp1);
+ arg1 = (struct svn_location_segment_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","range_start", 2, argv[0] ));
@@ -7220,7 +7315,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_location_segment_t_range_start_get(int argc, VALUE *argv, VALUE self) {
- svn_location_segment_t *arg1 = (svn_location_segment_t *) 0 ;
+ struct svn_location_segment_t *arg1 = (struct svn_location_segment_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -7231,9 +7326,9 @@ _wrap_svn_location_segment_t_range_start_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_location_segment_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_location_segment_t *","range_start", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_location_segment_t *","range_start", 1, self ));
}
- arg1 = (svn_location_segment_t *)(argp1);
+ arg1 = (struct svn_location_segment_t *)(argp1);
result = (svn_revnum_t) ((arg1)->range_start);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -7244,7 +7339,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_location_segment_t_range_end_set(int argc, VALUE *argv, VALUE self) {
- svn_location_segment_t *arg1 = (svn_location_segment_t *) 0 ;
+ struct svn_location_segment_t *arg1 = (struct svn_location_segment_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7256,9 +7351,9 @@ _wrap_svn_location_segment_t_range_end_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_location_segment_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_location_segment_t *","range_end", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_location_segment_t *","range_end", 1, self ));
}
- arg1 = (svn_location_segment_t *)(argp1);
+ arg1 = (struct svn_location_segment_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","range_end", 2, argv[0] ));
@@ -7273,7 +7368,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_location_segment_t_range_end_get(int argc, VALUE *argv, VALUE self) {
- svn_location_segment_t *arg1 = (svn_location_segment_t *) 0 ;
+ struct svn_location_segment_t *arg1 = (struct svn_location_segment_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -7284,9 +7379,9 @@ _wrap_svn_location_segment_t_range_end_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_location_segment_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_location_segment_t *","range_end", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_location_segment_t *","range_end", 1, self ));
}
- arg1 = (svn_location_segment_t *)(argp1);
+ arg1 = (struct svn_location_segment_t *)(argp1);
result = (svn_revnum_t) ((arg1)->range_end);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -7297,7 +7392,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_location_segment_t_path_set(int argc, VALUE *argv, VALUE self) {
- svn_location_segment_t *arg1 = (svn_location_segment_t *) 0 ;
+ struct svn_location_segment_t *arg1 = (struct svn_location_segment_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7310,9 +7405,9 @@ _wrap_svn_location_segment_t_path_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_location_segment_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_location_segment_t *","path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_location_segment_t *","path", 1, self ));
}
- arg1 = (svn_location_segment_t *)(argp1);
+ arg1 = (struct svn_location_segment_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","path", 2, argv[0] ));
@@ -7336,7 +7431,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_location_segment_t_path_get(int argc, VALUE *argv, VALUE self) {
- svn_location_segment_t *arg1 = (svn_location_segment_t *) 0 ;
+ struct svn_location_segment_t *arg1 = (struct svn_location_segment_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -7347,9 +7442,9 @@ _wrap_svn_location_segment_t_path_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_location_segment_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_location_segment_t *","path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_location_segment_t *","path", 1, self ));
}
- arg1 = (svn_location_segment_t *)(argp1);
+ arg1 = (struct svn_location_segment_t *)(argp1);
result = (char *) ((arg1)->path);
{
if (result) {
@@ -7383,13 +7478,13 @@ _wrap_svn_location_segment_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_location_segment_t(int argc, VALUE *argv, VALUE self) {
- svn_location_segment_t *result = 0 ;
+ struct svn_location_segment_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_location_segment_t *)calloc(1, sizeof(svn_location_segment_t));
+ result = (struct svn_location_segment_t *)calloc(1, sizeof(struct svn_location_segment_t));
DATA_PTR(self) = result;
@@ -7402,7 +7497,7 @@ fail:
SWIGINTERN void
-free_svn_location_segment_t(svn_location_segment_t *arg1) {
+free_svn_location_segment_t(struct svn_location_segment_t *arg1) {
free((char *) arg1);
}
@@ -7951,7 +8046,30 @@ fail:
}
-swig_class SwigClassSvn_version_t;
+SWIGINTERN VALUE
+_wrap_svn_pool_create_allocator(int argc, VALUE *argv, VALUE self) {
+ svn_boolean_t arg1 ;
+ apr_allocator_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ arg1 = RTEST(argv[0]);
+ {
+ result = (apr_allocator_t *)svn_pool_create_allocator(arg1);
+
+
+
+ }
+ vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_allocator_t, 0 | 0 );
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+static swig_class SwigClassSvn_version_t;
SWIGINTERN VALUE
_wrap_svn_version_t_major_set(int argc, VALUE *argv, VALUE self) {
@@ -8297,11 +8415,11 @@ fail:
}
-swig_class SwigClassSvn_version_checklist_t;
+static swig_class SwigClassSvn_version_checklist_t;
SWIGINTERN VALUE
_wrap_svn_version_checklist_t_label_set(int argc, VALUE *argv, VALUE self) {
- svn_version_checklist_t *arg1 = (svn_version_checklist_t *) 0 ;
+ struct svn_version_checklist_t *arg1 = (struct svn_version_checklist_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8314,9 +8432,9 @@ _wrap_svn_version_checklist_t_label_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_version_checklist_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_version_checklist_t *","label", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_version_checklist_t *","label", 1, self ));
}
- arg1 = (svn_version_checklist_t *)(argp1);
+ arg1 = (struct svn_version_checklist_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","label", 2, argv[0] ));
@@ -8340,7 +8458,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_version_checklist_t_label_get(int argc, VALUE *argv, VALUE self) {
- svn_version_checklist_t *arg1 = (svn_version_checklist_t *) 0 ;
+ struct svn_version_checklist_t *arg1 = (struct svn_version_checklist_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -8351,9 +8469,9 @@ _wrap_svn_version_checklist_t_label_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_version_checklist_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_version_checklist_t *","label", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_version_checklist_t *","label", 1, self ));
}
- arg1 = (svn_version_checklist_t *)(argp1);
+ arg1 = (struct svn_version_checklist_t *)(argp1);
result = (char *) ((arg1)->label);
{
if (result) {
@@ -8370,7 +8488,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_version_checklist_t_version_query_set(int argc, VALUE *argv, VALUE self) {
- svn_version_checklist_t *arg1 = (svn_version_checklist_t *) 0 ;
+ struct svn_version_checklist_t *arg1 = (struct svn_version_checklist_t *) 0 ;
svn_version_t *(*arg2)(void) = (svn_version_t *(*)(void)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8380,9 +8498,9 @@ _wrap_svn_version_checklist_t_version_query_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_version_checklist_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_version_checklist_t *","version_query", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_version_checklist_t *","version_query", 1, self ));
}
- arg1 = (svn_version_checklist_t *)(argp1);
+ arg1 = (struct svn_version_checklist_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_void__p_svn_version_t);
if (!SWIG_IsOK(res)) {
@@ -8398,7 +8516,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_version_checklist_t_version_query_get(int argc, VALUE *argv, VALUE self) {
- svn_version_checklist_t *arg1 = (svn_version_checklist_t *) 0 ;
+ struct svn_version_checklist_t *arg1 = (struct svn_version_checklist_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_version_t *(*result)(void) = 0 ;
@@ -8409,9 +8527,9 @@ _wrap_svn_version_checklist_t_version_query_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_version_checklist_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_version_checklist_t *","version_query", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_version_checklist_t *","version_query", 1, self ));
}
- arg1 = (svn_version_checklist_t *)(argp1);
+ arg1 = (struct svn_version_checklist_t *)(argp1);
result = (svn_version_t *(*)(void)) ((arg1)->version_query);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_void__p_svn_version_t);
return vresult;
@@ -8439,13 +8557,13 @@ _wrap_svn_version_checklist_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_version_checklist_t(int argc, VALUE *argv, VALUE self) {
- svn_version_checklist_t *result = 0 ;
+ struct svn_version_checklist_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_version_checklist_t *)calloc(1, sizeof(svn_version_checklist_t));
+ result = (struct svn_version_checklist_t *)calloc(1, sizeof(struct svn_version_checklist_t));
DATA_PTR(self) = result;
@@ -8458,7 +8576,7 @@ fail:
SWIGINTERN void
-free_svn_version_checklist_t(svn_version_checklist_t *arg1) {
+free_svn_version_checklist_t(struct svn_version_checklist_t *arg1) {
free((char *) arg1);
}
@@ -8528,6 +8646,755 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_version_extended(int argc, VALUE *argv, VALUE self) {
+ svn_boolean_t arg1 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_version_extended_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg2);
+ _global_pool = arg2;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 1) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ arg1 = RTEST(argv[0]);
+ if (argc > 1) {
+
+ }
+ {
+ result = (svn_version_extended_t *)svn_version_extended(arg1,arg2);
+
+
+
+ }
+ vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_version_extended_t, 0 | 0 );
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_version_ext_build_date(int argc, VALUE *argv, VALUE self) {
+ svn_version_extended_t *arg1 = (svn_version_extended_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ char *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_version_extended_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_version_extended_t const *","svn_version_ext_build_date", 1, argv[0] ));
+ }
+ arg1 = (svn_version_extended_t *)(argp1);
+ {
+ result = (char *)svn_version_ext_build_date((struct svn_version_extended_t const *)arg1);
+
+
+
+ }
+ {
+ if (result) {
+ vresult = rb_str_new2(result);
+ } else {
+ vresult = Qnil;
+ }
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_version_ext_build_time(int argc, VALUE *argv, VALUE self) {
+ svn_version_extended_t *arg1 = (svn_version_extended_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ char *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_version_extended_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_version_extended_t const *","svn_version_ext_build_time", 1, argv[0] ));
+ }
+ arg1 = (svn_version_extended_t *)(argp1);
+ {
+ result = (char *)svn_version_ext_build_time((struct svn_version_extended_t const *)arg1);
+
+
+
+ }
+ {
+ if (result) {
+ vresult = rb_str_new2(result);
+ } else {
+ vresult = Qnil;
+ }
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_version_ext_build_host(int argc, VALUE *argv, VALUE self) {
+ svn_version_extended_t *arg1 = (svn_version_extended_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ char *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_version_extended_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_version_extended_t const *","svn_version_ext_build_host", 1, argv[0] ));
+ }
+ arg1 = (svn_version_extended_t *)(argp1);
+ {
+ result = (char *)svn_version_ext_build_host((struct svn_version_extended_t const *)arg1);
+
+
+
+ }
+ {
+ if (result) {
+ vresult = rb_str_new2(result);
+ } else {
+ vresult = Qnil;
+ }
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_version_ext_copyright(int argc, VALUE *argv, VALUE self) {
+ svn_version_extended_t *arg1 = (svn_version_extended_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ char *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_version_extended_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_version_extended_t const *","svn_version_ext_copyright", 1, argv[0] ));
+ }
+ arg1 = (svn_version_extended_t *)(argp1);
+ {
+ result = (char *)svn_version_ext_copyright((struct svn_version_extended_t const *)arg1);
+
+
+
+ }
+ {
+ if (result) {
+ vresult = rb_str_new2(result);
+ } else {
+ vresult = Qnil;
+ }
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_version_ext_runtime_host(int argc, VALUE *argv, VALUE self) {
+ svn_version_extended_t *arg1 = (svn_version_extended_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ char *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_version_extended_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_version_extended_t const *","svn_version_ext_runtime_host", 1, argv[0] ));
+ }
+ arg1 = (svn_version_extended_t *)(argp1);
+ {
+ result = (char *)svn_version_ext_runtime_host((struct svn_version_extended_t const *)arg1);
+
+
+
+ }
+ {
+ if (result) {
+ vresult = rb_str_new2(result);
+ } else {
+ vresult = Qnil;
+ }
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_version_ext_runtime_osname(int argc, VALUE *argv, VALUE self) {
+ svn_version_extended_t *arg1 = (svn_version_extended_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ char *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_version_extended_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_version_extended_t const *","svn_version_ext_runtime_osname", 1, argv[0] ));
+ }
+ arg1 = (svn_version_extended_t *)(argp1);
+ {
+ result = (char *)svn_version_ext_runtime_osname((struct svn_version_extended_t const *)arg1);
+
+
+
+ }
+ {
+ if (result) {
+ vresult = rb_str_new2(result);
+ } else {
+ vresult = Qnil;
+ }
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+static swig_class SwigClassSvn_version_ext_linked_lib_t;
+
+SWIGINTERN VALUE
+_wrap_svn_version_ext_linked_lib_t_name_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_version_ext_linked_lib_t *arg1 = (struct svn_version_ext_linked_lib_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_version_ext_linked_lib_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_version_ext_linked_lib_t *","name", 1, self ));
+ }
+ arg1 = (struct svn_version_ext_linked_lib_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","name", 2, argv[0] ));
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->name) free((char *)arg1->name);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->name = copied;
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_version_ext_linked_lib_t_name_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_version_ext_linked_lib_t *arg1 = (struct svn_version_ext_linked_lib_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ char *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_version_ext_linked_lib_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_version_ext_linked_lib_t *","name", 1, self ));
+ }
+ arg1 = (struct svn_version_ext_linked_lib_t *)(argp1);
+ result = (char *) ((arg1)->name);
+ {
+ if (result) {
+ vresult = rb_str_new2(result);
+ } else {
+ vresult = Qnil;
+ }
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_version_ext_linked_lib_t_compiled_version_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_version_ext_linked_lib_t *arg1 = (struct svn_version_ext_linked_lib_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_version_ext_linked_lib_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_version_ext_linked_lib_t *","compiled_version", 1, self ));
+ }
+ arg1 = (struct svn_version_ext_linked_lib_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","compiled_version", 2, argv[0] ));
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->compiled_version) free((char *)arg1->compiled_version);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->compiled_version = copied;
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_version_ext_linked_lib_t_compiled_version_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_version_ext_linked_lib_t *arg1 = (struct svn_version_ext_linked_lib_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ char *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_version_ext_linked_lib_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_version_ext_linked_lib_t *","compiled_version", 1, self ));
+ }
+ arg1 = (struct svn_version_ext_linked_lib_t *)(argp1);
+ result = (char *) ((arg1)->compiled_version);
+ {
+ if (result) {
+ vresult = rb_str_new2(result);
+ } else {
+ vresult = Qnil;
+ }
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_version_ext_linked_lib_t_runtime_version_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_version_ext_linked_lib_t *arg1 = (struct svn_version_ext_linked_lib_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_version_ext_linked_lib_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_version_ext_linked_lib_t *","runtime_version", 1, self ));
+ }
+ arg1 = (struct svn_version_ext_linked_lib_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","runtime_version", 2, argv[0] ));
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->runtime_version) free((char *)arg1->runtime_version);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->runtime_version = copied;
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_version_ext_linked_lib_t_runtime_version_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_version_ext_linked_lib_t *arg1 = (struct svn_version_ext_linked_lib_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ char *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_version_ext_linked_lib_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_version_ext_linked_lib_t *","runtime_version", 1, self ));
+ }
+ arg1 = (struct svn_version_ext_linked_lib_t *)(argp1);
+ result = (char *) ((arg1)->runtime_version);
+ {
+ if (result) {
+ vresult = rb_str_new2(result);
+ } else {
+ vresult = Qnil;
+ }
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+#ifdef HAVE_RB_DEFINE_ALLOC_FUNC
+SWIGINTERN VALUE
+_wrap_svn_version_ext_linked_lib_t_allocate(VALUE self) {
+#else
+ SWIGINTERN VALUE
+ _wrap_svn_version_ext_linked_lib_t_allocate(int argc, VALUE *argv, VALUE self) {
+#endif
+
+
+ VALUE vresult = SWIG_NewClassInstance(self, SWIGTYPE_p_svn_version_ext_linked_lib_t);
+#ifndef HAVE_RB_DEFINE_ALLOC_FUNC
+ rb_obj_call_init(vresult, argc, argv);
+#endif
+ return vresult;
+ }
+
+
+SWIGINTERN VALUE
+_wrap_new_svn_version_ext_linked_lib_t(int argc, VALUE *argv, VALUE self) {
+ struct svn_version_ext_linked_lib_t *result = 0 ;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ {
+ result = (struct svn_version_ext_linked_lib_t *)calloc(1, sizeof(struct svn_version_ext_linked_lib_t));
+ DATA_PTR(self) = result;
+
+
+
+ }
+ return self;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN void
+free_svn_version_ext_linked_lib_t(struct svn_version_ext_linked_lib_t *arg1) {
+ free((char *) arg1);
+}
+
+SWIGINTERN VALUE
+_wrap_svn_version_ext_linked_libs(int argc, VALUE *argv, VALUE self) {
+ svn_version_extended_t *arg1 = (svn_version_extended_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ apr_array_header_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_version_extended_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_version_extended_t const *","svn_version_ext_linked_libs", 1, argv[0] ));
+ }
+ arg1 = (svn_version_extended_t *)(argp1);
+ {
+ result = (apr_array_header_t *)svn_version_ext_linked_libs((struct svn_version_extended_t const *)arg1);
+
+
+
+ }
+ vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_array_header_t, 0 | 0 );
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+static swig_class SwigClassSvn_version_ext_loaded_lib_t;
+
+SWIGINTERN VALUE
+_wrap_svn_version_ext_loaded_lib_t_name_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_version_ext_loaded_lib_t *arg1 = (struct svn_version_ext_loaded_lib_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_version_ext_loaded_lib_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_version_ext_loaded_lib_t *","name", 1, self ));
+ }
+ arg1 = (struct svn_version_ext_loaded_lib_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","name", 2, argv[0] ));
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->name) free((char *)arg1->name);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->name = copied;
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_version_ext_loaded_lib_t_name_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_version_ext_loaded_lib_t *arg1 = (struct svn_version_ext_loaded_lib_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ char *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_version_ext_loaded_lib_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_version_ext_loaded_lib_t *","name", 1, self ));
+ }
+ arg1 = (struct svn_version_ext_loaded_lib_t *)(argp1);
+ result = (char *) ((arg1)->name);
+ {
+ if (result) {
+ vresult = rb_str_new2(result);
+ } else {
+ vresult = Qnil;
+ }
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_version_ext_loaded_lib_t_version_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_version_ext_loaded_lib_t *arg1 = (struct svn_version_ext_loaded_lib_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_version_ext_loaded_lib_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_version_ext_loaded_lib_t *","version", 1, self ));
+ }
+ arg1 = (struct svn_version_ext_loaded_lib_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","version", 2, argv[0] ));
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->version) free((char *)arg1->version);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->version = copied;
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_version_ext_loaded_lib_t_version_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_version_ext_loaded_lib_t *arg1 = (struct svn_version_ext_loaded_lib_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ char *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_version_ext_loaded_lib_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_version_ext_loaded_lib_t *","version", 1, self ));
+ }
+ arg1 = (struct svn_version_ext_loaded_lib_t *)(argp1);
+ result = (char *) ((arg1)->version);
+ {
+ if (result) {
+ vresult = rb_str_new2(result);
+ } else {
+ vresult = Qnil;
+ }
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+#ifdef HAVE_RB_DEFINE_ALLOC_FUNC
+SWIGINTERN VALUE
+_wrap_svn_version_ext_loaded_lib_t_allocate(VALUE self) {
+#else
+ SWIGINTERN VALUE
+ _wrap_svn_version_ext_loaded_lib_t_allocate(int argc, VALUE *argv, VALUE self) {
+#endif
+
+
+ VALUE vresult = SWIG_NewClassInstance(self, SWIGTYPE_p_svn_version_ext_loaded_lib_t);
+#ifndef HAVE_RB_DEFINE_ALLOC_FUNC
+ rb_obj_call_init(vresult, argc, argv);
+#endif
+ return vresult;
+ }
+
+
+SWIGINTERN VALUE
+_wrap_new_svn_version_ext_loaded_lib_t(int argc, VALUE *argv, VALUE self) {
+ struct svn_version_ext_loaded_lib_t *result = 0 ;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ {
+ result = (struct svn_version_ext_loaded_lib_t *)calloc(1, sizeof(struct svn_version_ext_loaded_lib_t));
+ DATA_PTR(self) = result;
+
+
+
+ }
+ return self;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN void
+free_svn_version_ext_loaded_lib_t(struct svn_version_ext_loaded_lib_t *arg1) {
+ free((char *) arg1);
+}
+
+SWIGINTERN VALUE
+_wrap_svn_version_ext_loaded_libs(int argc, VALUE *argv, VALUE self) {
+ svn_version_extended_t *arg1 = (svn_version_extended_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ apr_array_header_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_version_extended_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_version_extended_t const *","svn_version_ext_loaded_libs", 1, argv[0] ));
+ }
+ arg1 = (svn_version_extended_t *)(argp1);
+ {
+ result = (apr_array_header_t *)svn_version_ext_loaded_libs((struct svn_version_extended_t const *)arg1);
+
+
+
+ }
+ vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_array_header_t, 0 | 0 );
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_version_checklist_invoke_version_query(int argc, VALUE *argv, VALUE self) {
svn_version_checklist_t *arg1 = (svn_version_checklist_t *) 0 ;
void *argp1 = 0 ;
@@ -8692,6 +9559,172 @@ fail:
}
+static swig_class SwigClassSvn_prop_inherited_item_t;
+
+SWIGINTERN VALUE
+_wrap_svn_prop_inherited_item_t_path_or_url_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_prop_inherited_item_t *arg1 = (struct svn_prop_inherited_item_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_prop_inherited_item_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_prop_inherited_item_t *","path_or_url", 1, self ));
+ }
+ arg1 = (struct svn_prop_inherited_item_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","path_or_url", 2, argv[0] ));
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->path_or_url) free((char *)arg1->path_or_url);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->path_or_url = copied;
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_prop_inherited_item_t_path_or_url_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_prop_inherited_item_t *arg1 = (struct svn_prop_inherited_item_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ char *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_prop_inherited_item_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_prop_inherited_item_t *","path_or_url", 1, self ));
+ }
+ arg1 = (struct svn_prop_inherited_item_t *)(argp1);
+ result = (char *) ((arg1)->path_or_url);
+ {
+ if (result) {
+ vresult = rb_str_new2(result);
+ } else {
+ vresult = Qnil;
+ }
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_prop_inherited_item_t_prop_hash_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_prop_inherited_item_t *arg1 = (struct svn_prop_inherited_item_t *) 0 ;
+ apr_hash_t *arg2 = (apr_hash_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_prop_inherited_item_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_prop_inherited_item_t *","prop_hash", 1, self ));
+ }
+ arg1 = (struct svn_prop_inherited_item_t *)(argp1);
+ res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_apr_hash_t, SWIG_POINTER_DISOWN | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "apr_hash_t *","prop_hash", 2, argv[0] ));
+ }
+ arg2 = (apr_hash_t *)(argp2);
+ if (arg1) (arg1)->prop_hash = arg2;
+ return Qnil;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_prop_inherited_item_t_prop_hash_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_prop_inherited_item_t *arg1 = (struct svn_prop_inherited_item_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ apr_hash_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_prop_inherited_item_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_prop_inherited_item_t *","prop_hash", 1, self ));
+ }
+ arg1 = (struct svn_prop_inherited_item_t *)(argp1);
+ result = (apr_hash_t *) ((arg1)->prop_hash);
+ vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_hash_t, 0 | 0 );
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+#ifdef HAVE_RB_DEFINE_ALLOC_FUNC
+SWIGINTERN VALUE
+_wrap_svn_prop_inherited_item_t_allocate(VALUE self) {
+#else
+ SWIGINTERN VALUE
+ _wrap_svn_prop_inherited_item_t_allocate(int argc, VALUE *argv, VALUE self) {
+#endif
+
+
+ VALUE vresult = SWIG_NewClassInstance(self, SWIGTYPE_p_svn_prop_inherited_item_t);
+#ifndef HAVE_RB_DEFINE_ALLOC_FUNC
+ rb_obj_call_init(vresult, argc, argv);
+#endif
+ return vresult;
+ }
+
+
+SWIGINTERN VALUE
+_wrap_new_svn_prop_inherited_item_t(int argc, VALUE *argv, VALUE self) {
+ struct svn_prop_inherited_item_t *result = 0 ;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ {
+ result = (struct svn_prop_inherited_item_t *)calloc(1, sizeof(struct svn_prop_inherited_item_t));
+ DATA_PTR(self) = result;
+
+
+
+ }
+ return self;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN void
+free_svn_prop_inherited_item_t(struct svn_prop_inherited_item_t *arg1) {
+ free((char *) arg1);
+}
+
SWIGINTERN VALUE
_wrap_svn_prop_hash_to_array(int argc, VALUE *argv, VALUE self) {
apr_hash_t *arg1 = (apr_hash_t *) 0 ;
@@ -8730,7 +9763,7 @@ _wrap_svn_prop_hash_to_array(int argc, VALUE *argv, VALUE self) {
}
{
- result = (apr_array_header_t *)svn_prop_hash_to_array(arg1,arg2);
+ result = (apr_array_header_t *)svn_prop_hash_to_array((apr_hash_t const *)arg1,arg2);
@@ -8831,7 +9864,7 @@ _wrap_svn_prop_hash_dup(int argc, VALUE *argv, VALUE self) {
}
{
- result = (apr_hash_t *)svn_prop_hash_dup(arg1,arg2);
+ result = (apr_hash_t *)svn_prop_hash_dup((apr_hash_t const *)arg1,arg2);
@@ -8874,7 +9907,7 @@ _wrap_svn_prop_get_value(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_apr_hash_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "apr_hash_t *","svn_prop_get_value", 1, argv[0] ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "apr_hash_t const *","svn_prop_get_value", 1, argv[0] ));
}
arg1 = (apr_hash_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[1], &buf2, NULL, &alloc2);
@@ -8883,7 +9916,7 @@ _wrap_svn_prop_get_value(int argc, VALUE *argv, VALUE self) {
}
arg2 = (char *)(buf2);
{
- result = (char *)svn_prop_get_value(arg1,(char const *)arg2);
+ result = (char *)svn_prop_get_value((apr_hash_t const *)arg1,(char const *)arg2);
@@ -8904,6 +9937,38 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_property_kind2(int argc, VALUE *argv, VALUE self) {
+ char *arg1 = (char *) 0 ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ svn_prop_kind_t result;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_AsCharPtrAndSize(argv[0], &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "char const *","svn_property_kind2", 1, argv[0] ));
+ }
+ arg1 = (char *)(buf1);
+ {
+ result = (svn_prop_kind_t)svn_property_kind2((char const *)arg1);
+
+
+
+ }
+ vresult = SWIG_From_int((int)(result));
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ return vresult;
+fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_property_kind(int argc, VALUE *argv, VALUE self) {
int *arg1 = (int *) 0 ;
char *arg2 = (char *) 0 ;
@@ -9074,6 +10139,134 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_prop_is_known_svn_rev_prop(int argc, VALUE *argv, VALUE self) {
+ char *arg1 = (char *) 0 ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ svn_boolean_t result;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_AsCharPtrAndSize(argv[0], &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "char const *","svn_prop_is_known_svn_rev_prop", 1, argv[0] ));
+ }
+ arg1 = (char *)(buf1);
+ {
+ result = (svn_boolean_t)svn_prop_is_known_svn_rev_prop((char const *)arg1);
+
+
+
+ }
+ vresult = result ? Qtrue : Qfalse;
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ return vresult;
+fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_prop_is_known_svn_node_prop(int argc, VALUE *argv, VALUE self) {
+ char *arg1 = (char *) 0 ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ svn_boolean_t result;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_AsCharPtrAndSize(argv[0], &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "char const *","svn_prop_is_known_svn_node_prop", 1, argv[0] ));
+ }
+ arg1 = (char *)(buf1);
+ {
+ result = (svn_boolean_t)svn_prop_is_known_svn_node_prop((char const *)arg1);
+
+
+
+ }
+ vresult = result ? Qtrue : Qfalse;
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ return vresult;
+fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_prop_is_known_svn_file_prop(int argc, VALUE *argv, VALUE self) {
+ char *arg1 = (char *) 0 ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ svn_boolean_t result;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_AsCharPtrAndSize(argv[0], &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "char const *","svn_prop_is_known_svn_file_prop", 1, argv[0] ));
+ }
+ arg1 = (char *)(buf1);
+ {
+ result = (svn_boolean_t)svn_prop_is_known_svn_file_prop((char const *)arg1);
+
+
+
+ }
+ vresult = result ? Qtrue : Qfalse;
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ return vresult;
+fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_prop_is_known_svn_dir_prop(int argc, VALUE *argv, VALUE self) {
+ char *arg1 = (char *) 0 ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ svn_boolean_t result;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_AsCharPtrAndSize(argv[0], &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "char const *","svn_prop_is_known_svn_dir_prop", 1, argv[0] ));
+ }
+ arg1 = (char *)(buf1);
+ {
+ result = (svn_boolean_t)svn_prop_is_known_svn_dir_prop((char const *)arg1);
+
+
+
+ }
+ vresult = result ? Qtrue : Qfalse;
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ return vresult;
+fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_prop_needs_translation(int argc, VALUE *argv, VALUE self) {
char *arg1 = (char *) 0 ;
int res1 ;
@@ -9239,7 +10432,7 @@ _wrap_svn_prop_diffs(int argc, VALUE *argv, VALUE self) {
}
{
- result = (svn_error_t *)svn_prop_diffs(arg1,arg2,arg3,arg4);
+ result = (svn_error_t *)svn_prop_diffs(arg1,(apr_hash_t const *)arg2,(apr_hash_t const *)arg3,arg4);
@@ -9307,11 +10500,11 @@ fail:
}
-swig_class SwigClassSvn_opt_subcommand_desc2_t;
+static swig_class SwigClassSvn_opt_subcommand_desc2_t;
SWIGINTERN VALUE
_wrap_svn_opt_subcommand_desc2_t_name_set(int argc, VALUE *argv, VALUE self) {
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9324,9 +10517,9 @@ _wrap_svn_opt_subcommand_desc2_t_name_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_subcommand_desc2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_subcommand_desc2_t *","name", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_subcommand_desc2_t *","name", 1, self ));
}
- arg1 = (svn_opt_subcommand_desc2_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","name", 2, argv[0] ));
@@ -9350,7 +10543,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_subcommand_desc2_t_name_get(int argc, VALUE *argv, VALUE self) {
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -9361,9 +10554,9 @@ _wrap_svn_opt_subcommand_desc2_t_name_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_subcommand_desc2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_subcommand_desc2_t *","name", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_subcommand_desc2_t *","name", 1, self ));
}
- arg1 = (svn_opt_subcommand_desc2_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)(argp1);
result = (char *) ((arg1)->name);
{
if (result) {
@@ -9380,7 +10573,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_subcommand_desc2_t_cmd_func_set(int argc, VALUE *argv, VALUE self) {
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
svn_opt_subcommand_t *arg2 = (svn_opt_subcommand_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9390,9 +10583,9 @@ _wrap_svn_opt_subcommand_desc2_t_cmd_func_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_subcommand_desc2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_subcommand_desc2_t *","cmd_func", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_subcommand_desc2_t *","cmd_func", 1, self ));
}
- arg1 = (svn_opt_subcommand_desc2_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -9408,7 +10601,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_subcommand_desc2_t_cmd_func_get(int argc, VALUE *argv, VALUE self) {
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_opt_subcommand_t *result = 0 ;
@@ -9419,9 +10612,9 @@ _wrap_svn_opt_subcommand_desc2_t_cmd_func_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_subcommand_desc2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_subcommand_desc2_t *","cmd_func", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_subcommand_desc2_t *","cmd_func", 1, self ));
}
- arg1 = (svn_opt_subcommand_desc2_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)(argp1);
result = (svn_opt_subcommand_t *) ((arg1)->cmd_func);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -9432,7 +10625,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_subcommand_desc2_t_aliases_set(int argc, VALUE *argv, VALUE self) {
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
char **arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9444,9 +10637,9 @@ _wrap_svn_opt_subcommand_desc2_t_aliases_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_subcommand_desc2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_subcommand_desc2_t *","aliases", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_subcommand_desc2_t *","aliases", 1, self ));
}
- arg1 = (svn_opt_subcommand_desc2_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_p_char, 0 | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *[3]","aliases", 2, argv[0] ));
@@ -9468,7 +10661,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_subcommand_desc2_t_aliases_get(int argc, VALUE *argv, VALUE self) {
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char **result = 0 ;
@@ -9479,9 +10672,9 @@ _wrap_svn_opt_subcommand_desc2_t_aliases_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_subcommand_desc2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_subcommand_desc2_t *","aliases", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_subcommand_desc2_t *","aliases", 1, self ));
}
- arg1 = (svn_opt_subcommand_desc2_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)(argp1);
result = (char **)(char **) ((arg1)->aliases);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_p_char, 0 | 0 );
return vresult;
@@ -9492,7 +10685,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_subcommand_desc2_t_help_set(int argc, VALUE *argv, VALUE self) {
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9505,9 +10698,9 @@ _wrap_svn_opt_subcommand_desc2_t_help_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_subcommand_desc2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_subcommand_desc2_t *","help", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_subcommand_desc2_t *","help", 1, self ));
}
- arg1 = (svn_opt_subcommand_desc2_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","help", 2, argv[0] ));
@@ -9531,7 +10724,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_subcommand_desc2_t_help_get(int argc, VALUE *argv, VALUE self) {
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -9542,9 +10735,9 @@ _wrap_svn_opt_subcommand_desc2_t_help_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_subcommand_desc2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_subcommand_desc2_t *","help", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_subcommand_desc2_t *","help", 1, self ));
}
- arg1 = (svn_opt_subcommand_desc2_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)(argp1);
result = (char *) ((arg1)->help);
{
if (result) {
@@ -9561,7 +10754,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_subcommand_desc2_t_valid_options_set(int argc, VALUE *argv, VALUE self) {
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
int *arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9573,9 +10766,9 @@ _wrap_svn_opt_subcommand_desc2_t_valid_options_set(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_subcommand_desc2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_subcommand_desc2_t *","valid_options", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_subcommand_desc2_t *","valid_options", 1, self ));
}
- arg1 = (svn_opt_subcommand_desc2_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_int, 0 | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "int [50]","valid_options", 2, argv[0] ));
@@ -9597,7 +10790,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_subcommand_desc2_t_valid_options_get(int argc, VALUE *argv, VALUE self) {
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int *result = 0 ;
@@ -9608,9 +10801,9 @@ _wrap_svn_opt_subcommand_desc2_t_valid_options_get(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_subcommand_desc2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_subcommand_desc2_t *","valid_options", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_subcommand_desc2_t *","valid_options", 1, self ));
}
- arg1 = (svn_opt_subcommand_desc2_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)(argp1);
result = (int *)(int *) ((arg1)->valid_options);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_int, 0 | 0 );
return vresult;
@@ -9621,7 +10814,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_subcommand_desc2_t_desc_overrides_get(int argc, VALUE *argv, VALUE self) {
- svn_opt_subcommand_desc2_t *arg1 = (svn_opt_subcommand_desc2_t *) 0 ;
+ struct svn_opt_subcommand_desc2_t *arg1 = (struct svn_opt_subcommand_desc2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_opt_subcommand_desc2_t_desc_overrides *result = 0 ;
@@ -9632,9 +10825,9 @@ _wrap_svn_opt_subcommand_desc2_t_desc_overrides_get(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_subcommand_desc2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_subcommand_desc2_t *","desc_overrides", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_subcommand_desc2_t *","desc_overrides", 1, self ));
}
- arg1 = (svn_opt_subcommand_desc2_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc2_t *)(argp1);
result = (svn_opt_subcommand_desc2_t_desc_overrides *)(svn_opt_subcommand_desc2_t_desc_overrides *) ((arg1)->desc_overrides);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_opt_subcommand_desc2_t_desc_overrides, 0 | 0 );
return vresult;
@@ -9662,13 +10855,13 @@ _wrap_svn_opt_subcommand_desc2_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_opt_subcommand_desc2_t(int argc, VALUE *argv, VALUE self) {
- svn_opt_subcommand_desc2_t *result = 0 ;
+ struct svn_opt_subcommand_desc2_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_opt_subcommand_desc2_t *)calloc(1, sizeof(svn_opt_subcommand_desc2_t));
+ result = (struct svn_opt_subcommand_desc2_t *)calloc(1, sizeof(struct svn_opt_subcommand_desc2_t));
DATA_PTR(self) = result;
@@ -9681,11 +10874,11 @@ fail:
SWIGINTERN void
-free_svn_opt_subcommand_desc2_t(svn_opt_subcommand_desc2_t *arg1) {
+free_svn_opt_subcommand_desc2_t(struct svn_opt_subcommand_desc2_t *arg1) {
free((char *) arg1);
}
-swig_class SwigClassSvn_opt_subcommand_desc2_t_desc_overrides;
+static swig_class SwigClassSvn_opt_subcommand_desc2_t_desc_overrides;
SWIGINTERN VALUE
_wrap_svn_opt_subcommand_desc2_t_desc_overrides_optch_set(int argc, VALUE *argv, VALUE self) {
@@ -9851,11 +11044,11 @@ free_svn_opt_subcommand_desc2_t_desc_overrides(svn_opt_subcommand_desc2_t_desc_o
free((char *) arg1);
}
-swig_class SwigClassSvn_opt_subcommand_desc_t;
+static swig_class SwigClassSvn_opt_subcommand_desc_t;
SWIGINTERN VALUE
_wrap_svn_opt_subcommand_desc_t_name_set(int argc, VALUE *argv, VALUE self) {
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9868,9 +11061,9 @@ _wrap_svn_opt_subcommand_desc_t_name_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_subcommand_desc_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_subcommand_desc_t *","name", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_subcommand_desc_t *","name", 1, self ));
}
- arg1 = (svn_opt_subcommand_desc_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","name", 2, argv[0] ));
@@ -9894,7 +11087,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_subcommand_desc_t_name_get(int argc, VALUE *argv, VALUE self) {
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -9905,9 +11098,9 @@ _wrap_svn_opt_subcommand_desc_t_name_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_subcommand_desc_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_subcommand_desc_t *","name", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_subcommand_desc_t *","name", 1, self ));
}
- arg1 = (svn_opt_subcommand_desc_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc_t *)(argp1);
result = (char *) ((arg1)->name);
{
if (result) {
@@ -9924,7 +11117,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_subcommand_desc_t_cmd_func_set(int argc, VALUE *argv, VALUE self) {
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
svn_opt_subcommand_t *arg2 = (svn_opt_subcommand_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9934,9 +11127,9 @@ _wrap_svn_opt_subcommand_desc_t_cmd_func_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_subcommand_desc_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_subcommand_desc_t *","cmd_func", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_subcommand_desc_t *","cmd_func", 1, self ));
}
- arg1 = (svn_opt_subcommand_desc_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -9952,7 +11145,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_subcommand_desc_t_cmd_func_get(int argc, VALUE *argv, VALUE self) {
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_opt_subcommand_t *result = 0 ;
@@ -9963,9 +11156,9 @@ _wrap_svn_opt_subcommand_desc_t_cmd_func_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_subcommand_desc_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_subcommand_desc_t *","cmd_func", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_subcommand_desc_t *","cmd_func", 1, self ));
}
- arg1 = (svn_opt_subcommand_desc_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc_t *)(argp1);
result = (svn_opt_subcommand_t *) ((arg1)->cmd_func);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -9976,7 +11169,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_subcommand_desc_t_aliases_set(int argc, VALUE *argv, VALUE self) {
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
char **arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9988,9 +11181,9 @@ _wrap_svn_opt_subcommand_desc_t_aliases_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_subcommand_desc_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_subcommand_desc_t *","aliases", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_subcommand_desc_t *","aliases", 1, self ));
}
- arg1 = (svn_opt_subcommand_desc_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_p_char, 0 | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *[3]","aliases", 2, argv[0] ));
@@ -10012,7 +11205,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_subcommand_desc_t_aliases_get(int argc, VALUE *argv, VALUE self) {
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char **result = 0 ;
@@ -10023,9 +11216,9 @@ _wrap_svn_opt_subcommand_desc_t_aliases_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_subcommand_desc_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_subcommand_desc_t *","aliases", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_subcommand_desc_t *","aliases", 1, self ));
}
- arg1 = (svn_opt_subcommand_desc_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc_t *)(argp1);
result = (char **)(char **) ((arg1)->aliases);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_p_char, 0 | 0 );
return vresult;
@@ -10036,7 +11229,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_subcommand_desc_t_help_set(int argc, VALUE *argv, VALUE self) {
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10049,9 +11242,9 @@ _wrap_svn_opt_subcommand_desc_t_help_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_subcommand_desc_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_subcommand_desc_t *","help", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_subcommand_desc_t *","help", 1, self ));
}
- arg1 = (svn_opt_subcommand_desc_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","help", 2, argv[0] ));
@@ -10075,7 +11268,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_subcommand_desc_t_help_get(int argc, VALUE *argv, VALUE self) {
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -10086,9 +11279,9 @@ _wrap_svn_opt_subcommand_desc_t_help_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_subcommand_desc_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_subcommand_desc_t *","help", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_subcommand_desc_t *","help", 1, self ));
}
- arg1 = (svn_opt_subcommand_desc_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc_t *)(argp1);
result = (char *) ((arg1)->help);
{
if (result) {
@@ -10105,7 +11298,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_subcommand_desc_t_valid_options_set(int argc, VALUE *argv, VALUE self) {
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
int *arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10117,9 +11310,9 @@ _wrap_svn_opt_subcommand_desc_t_valid_options_set(int argc, VALUE *argv, VALUE s
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_subcommand_desc_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_subcommand_desc_t *","valid_options", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_subcommand_desc_t *","valid_options", 1, self ));
}
- arg1 = (svn_opt_subcommand_desc_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_int, 0 | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "int [50]","valid_options", 2, argv[0] ));
@@ -10141,7 +11334,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_subcommand_desc_t_valid_options_get(int argc, VALUE *argv, VALUE self) {
- svn_opt_subcommand_desc_t *arg1 = (svn_opt_subcommand_desc_t *) 0 ;
+ struct svn_opt_subcommand_desc_t *arg1 = (struct svn_opt_subcommand_desc_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int *result = 0 ;
@@ -10152,9 +11345,9 @@ _wrap_svn_opt_subcommand_desc_t_valid_options_get(int argc, VALUE *argv, VALUE s
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_subcommand_desc_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_subcommand_desc_t *","valid_options", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_subcommand_desc_t *","valid_options", 1, self ));
}
- arg1 = (svn_opt_subcommand_desc_t *)(argp1);
+ arg1 = (struct svn_opt_subcommand_desc_t *)(argp1);
result = (int *)(int *) ((arg1)->valid_options);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_int, 0 | 0 );
return vresult;
@@ -10182,13 +11375,13 @@ _wrap_svn_opt_subcommand_desc_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_opt_subcommand_desc_t(int argc, VALUE *argv, VALUE self) {
- svn_opt_subcommand_desc_t *result = 0 ;
+ struct svn_opt_subcommand_desc_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_opt_subcommand_desc_t *)calloc(1, sizeof(svn_opt_subcommand_desc_t));
+ result = (struct svn_opt_subcommand_desc_t *)calloc(1, sizeof(struct svn_opt_subcommand_desc_t));
DATA_PTR(self) = result;
@@ -10201,7 +11394,7 @@ fail:
SWIGINTERN void
-free_svn_opt_subcommand_desc_t(svn_opt_subcommand_desc_t *arg1) {
+free_svn_opt_subcommand_desc_t(struct svn_opt_subcommand_desc_t *arg1) {
free((char *) arg1);
}
@@ -10889,11 +12082,11 @@ fail:
}
-swig_class SwigClassSvn_opt_revision_value_t;
+static swig_class SwigClassSvn_opt_revision_value_t;
SWIGINTERN VALUE
_wrap_svn_opt_revision_value_t_number_set(int argc, VALUE *argv, VALUE self) {
- svn_opt_revision_value_t *arg1 = (svn_opt_revision_value_t *) 0 ;
+ union svn_opt_revision_value_t *arg1 = (union svn_opt_revision_value_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10905,9 +12098,9 @@ _wrap_svn_opt_revision_value_t_number_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_revision_value_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_revision_value_t *","number", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "union svn_opt_revision_value_t *","number", 1, self ));
}
- arg1 = (svn_opt_revision_value_t *)(argp1);
+ arg1 = (union svn_opt_revision_value_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","number", 2, argv[0] ));
@@ -10922,7 +12115,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_revision_value_t_number_get(int argc, VALUE *argv, VALUE self) {
- svn_opt_revision_value_t *arg1 = (svn_opt_revision_value_t *) 0 ;
+ union svn_opt_revision_value_t *arg1 = (union svn_opt_revision_value_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -10933,9 +12126,9 @@ _wrap_svn_opt_revision_value_t_number_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_revision_value_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_revision_value_t *","number", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "union svn_opt_revision_value_t *","number", 1, self ));
}
- arg1 = (svn_opt_revision_value_t *)(argp1);
+ arg1 = (union svn_opt_revision_value_t *)(argp1);
result = (svn_revnum_t) ((arg1)->number);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -10946,7 +12139,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_revision_value_t_date_set(int argc, VALUE *argv, VALUE self) {
- svn_opt_revision_value_t *arg1 = (svn_opt_revision_value_t *) 0 ;
+ union svn_opt_revision_value_t *arg1 = (union svn_opt_revision_value_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10956,9 +12149,9 @@ _wrap_svn_opt_revision_value_t_date_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_revision_value_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_revision_value_t *","date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "union svn_opt_revision_value_t *","date", 1, self ));
}
- arg1 = (svn_opt_revision_value_t *)(argp1);
+ arg1 = (union svn_opt_revision_value_t *)(argp1);
{
arg2 = (apr_time_t)NUM2LL(argv[0]);
}
@@ -10971,7 +12164,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_revision_value_t_date_get(int argc, VALUE *argv, VALUE self) {
- svn_opt_revision_value_t *arg1 = (svn_opt_revision_value_t *) 0 ;
+ union svn_opt_revision_value_t *arg1 = (union svn_opt_revision_value_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_time_t result;
@@ -10982,9 +12175,9 @@ _wrap_svn_opt_revision_value_t_date_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_revision_value_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_revision_value_t *","date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "union svn_opt_revision_value_t *","date", 1, self ));
}
- arg1 = (svn_opt_revision_value_t *)(argp1);
+ arg1 = (union svn_opt_revision_value_t *)(argp1);
result = ((arg1)->date);
{
vresult = LL2NUM((apr_time_t)(result));
@@ -11014,13 +12207,13 @@ _wrap_svn_opt_revision_value_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_opt_revision_value_t(int argc, VALUE *argv, VALUE self) {
- svn_opt_revision_value_t *result = 0 ;
+ union svn_opt_revision_value_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_opt_revision_value_t *)calloc(1, sizeof(svn_opt_revision_value_t));
+ result = (union svn_opt_revision_value_t *)calloc(1, sizeof(union svn_opt_revision_value_t));
DATA_PTR(self) = result;
@@ -11033,27 +12226,29 @@ fail:
SWIGINTERN void
-free_svn_opt_revision_value_t(svn_opt_revision_value_t *arg1) {
+free_svn_opt_revision_value_t(union svn_opt_revision_value_t *arg1) {
free((char *) arg1);
}
-swig_class SwigClassSvn_opt_revision_t;
+static swig_class SwigClassSvn_opt_revision_t;
SWIGINTERN VALUE
_wrap_svn_opt_revision_t_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_opt_revision_t *arg1 = (svn_opt_revision_t *) 0 ;
+ struct svn_opt_revision_t *arg1 = (struct svn_opt_revision_t *) 0 ;
enum svn_opt_revision_kind arg2 ;
- svn_opt_revision_t rev1 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
int val2 ;
int ecode2 = 0 ;
if ((argc < 1) || (argc > 1)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
}
- {
- arg1 = &rev1;
- svn_swig_rb_set_revision(&rev1, self);
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_revision_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_revision_t *","kind", 1, self ));
}
+ arg1 = (struct svn_opt_revision_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "enum svn_opt_revision_kind","kind", 2, argv[0] ));
@@ -11068,18 +12263,20 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_revision_t_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_opt_revision_t *arg1 = (svn_opt_revision_t *) 0 ;
- svn_opt_revision_t rev1 ;
+ struct svn_opt_revision_t *arg1 = (struct svn_opt_revision_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
enum svn_opt_revision_kind result;
VALUE vresult = Qnil;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
- {
- arg1 = &rev1;
- svn_swig_rb_set_revision(&rev1, self);
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_revision_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_revision_t *","kind", 1, self ));
}
+ arg1 = (struct svn_opt_revision_t *)(argp1);
result = (enum svn_opt_revision_kind) ((arg1)->kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -11090,19 +12287,21 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_revision_t_value_set(int argc, VALUE *argv, VALUE self) {
- svn_opt_revision_t *arg1 = (svn_opt_revision_t *) 0 ;
+ struct svn_opt_revision_t *arg1 = (struct svn_opt_revision_t *) 0 ;
svn_opt_revision_value_t *arg2 = (svn_opt_revision_value_t *) 0 ;
- svn_opt_revision_t rev1 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
void *argp2 = 0 ;
int res2 = 0 ;
if ((argc < 1) || (argc > 1)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
}
- {
- arg1 = &rev1;
- svn_swig_rb_set_revision(&rev1, self);
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_revision_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_revision_t *","value", 1, self ));
}
+ arg1 = (struct svn_opt_revision_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_opt_revision_value_t, 0 | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_opt_revision_value_t *","value", 2, argv[0] ));
@@ -11117,18 +12316,20 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_revision_t_value_get(int argc, VALUE *argv, VALUE self) {
- svn_opt_revision_t *arg1 = (svn_opt_revision_t *) 0 ;
- svn_opt_revision_t rev1 ;
+ struct svn_opt_revision_t *arg1 = (struct svn_opt_revision_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
svn_opt_revision_value_t *result = 0 ;
VALUE vresult = Qnil;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
- {
- arg1 = &rev1;
- svn_swig_rb_set_revision(&rev1, self);
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_revision_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_revision_t *","value", 1, self ));
}
+ arg1 = (struct svn_opt_revision_t *)(argp1);
result = (svn_opt_revision_value_t *)& ((arg1)->value);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_opt_revision_value_t, 0 | 0 );
return vresult;
@@ -11156,13 +12357,13 @@ _wrap_svn_opt_revision_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_opt_revision_t(int argc, VALUE *argv, VALUE self) {
- svn_opt_revision_t *result = 0 ;
+ struct svn_opt_revision_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_opt_revision_t *)calloc(1, sizeof(svn_opt_revision_t));
+ result = (struct svn_opt_revision_t *)calloc(1, sizeof(struct svn_opt_revision_t));
DATA_PTR(self) = result;
@@ -11175,15 +12376,15 @@ fail:
SWIGINTERN void
-free_svn_opt_revision_t(svn_opt_revision_t *arg1) {
+free_svn_opt_revision_t(struct svn_opt_revision_t *arg1) {
free((char *) arg1);
}
-swig_class SwigClassSvn_opt_revision_range_t;
+static swig_class SwigClassSvn_opt_revision_range_t;
SWIGINTERN VALUE
_wrap_svn_opt_revision_range_t_start_set(int argc, VALUE *argv, VALUE self) {
- svn_opt_revision_range_t *arg1 = (svn_opt_revision_range_t *) 0 ;
+ struct svn_opt_revision_range_t *arg1 = (struct svn_opt_revision_range_t *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11194,9 +12395,9 @@ _wrap_svn_opt_revision_range_t_start_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_revision_range_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_revision_range_t *","start", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_revision_range_t *","start", 1, self ));
}
- arg1 = (svn_opt_revision_range_t *)(argp1);
+ arg1 = (struct svn_opt_revision_range_t *)(argp1);
{
arg2 = &rev2;
svn_swig_rb_set_revision(&rev2, argv[0]);
@@ -11210,7 +12411,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_revision_range_t_start_get(int argc, VALUE *argv, VALUE self) {
- svn_opt_revision_range_t *arg1 = (svn_opt_revision_range_t *) 0 ;
+ struct svn_opt_revision_range_t *arg1 = (struct svn_opt_revision_range_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_opt_revision_t *result = 0 ;
@@ -11221,9 +12422,9 @@ _wrap_svn_opt_revision_range_t_start_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_revision_range_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_revision_range_t *","start", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_revision_range_t *","start", 1, self ));
}
- arg1 = (svn_opt_revision_range_t *)(argp1);
+ arg1 = (struct svn_opt_revision_range_t *)(argp1);
result = (svn_opt_revision_t *)& ((arg1)->start);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_opt_revision_t, 0 | 0 );
return vresult;
@@ -11234,7 +12435,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_revision_range_t_end_set(int argc, VALUE *argv, VALUE self) {
- svn_opt_revision_range_t *arg1 = (svn_opt_revision_range_t *) 0 ;
+ struct svn_opt_revision_range_t *arg1 = (struct svn_opt_revision_range_t *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11245,9 +12446,9 @@ _wrap_svn_opt_revision_range_t_end_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_revision_range_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_revision_range_t *","end", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_revision_range_t *","end", 1, self ));
}
- arg1 = (svn_opt_revision_range_t *)(argp1);
+ arg1 = (struct svn_opt_revision_range_t *)(argp1);
{
arg2 = &rev2;
svn_swig_rb_set_revision(&rev2, argv[0]);
@@ -11261,7 +12462,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_opt_revision_range_t_end_get(int argc, VALUE *argv, VALUE self) {
- svn_opt_revision_range_t *arg1 = (svn_opt_revision_range_t *) 0 ;
+ struct svn_opt_revision_range_t *arg1 = (struct svn_opt_revision_range_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_opt_revision_t *result = 0 ;
@@ -11272,9 +12473,9 @@ _wrap_svn_opt_revision_range_t_end_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_opt_revision_range_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_opt_revision_range_t *","end", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_opt_revision_range_t *","end", 1, self ));
}
- arg1 = (svn_opt_revision_range_t *)(argp1);
+ arg1 = (struct svn_opt_revision_range_t *)(argp1);
result = (svn_opt_revision_t *)& ((arg1)->end);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_opt_revision_t, 0 | 0 );
return vresult;
@@ -11302,13 +12503,13 @@ _wrap_svn_opt_revision_range_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_opt_revision_range_t(int argc, VALUE *argv, VALUE self) {
- svn_opt_revision_range_t *result = 0 ;
+ struct svn_opt_revision_range_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_opt_revision_range_t *)calloc(1, sizeof(svn_opt_revision_range_t));
+ result = (struct svn_opt_revision_range_t *)calloc(1, sizeof(struct svn_opt_revision_range_t));
DATA_PTR(self) = result;
@@ -11321,7 +12522,7 @@ fail:
SWIGINTERN void
-free_svn_opt_revision_range_t(svn_opt_revision_range_t *arg1) {
+free_svn_opt_revision_range_t(struct svn_opt_revision_range_t *arg1) {
free((char *) arg1);
}
@@ -11730,6 +12931,143 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_opt_print_help4(int argc, VALUE *argv, VALUE self) {
+ apr_getopt_t *arg1 = (apr_getopt_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ svn_boolean_t arg5 ;
+ char *arg6 = (char *) 0 ;
+ char *arg7 = (char *) 0 ;
+ svn_opt_subcommand_desc2_t *arg8 = (svn_opt_subcommand_desc2_t *) 0 ;
+ apr_getopt_option_t *arg9 = (apr_getopt_option_t *) 0 ;
+ int *arg10 = (int *) 0 ;
+ char *arg11 = (char *) 0 ;
+ apr_pool_t *arg12 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res6 ;
+ char *buf6 = 0 ;
+ int alloc6 = 0 ;
+ int res7 ;
+ char *buf7 = 0 ;
+ int alloc7 = 0 ;
+ void *argp8 = 0 ;
+ int res8 = 0 ;
+ void *argp9 = 0 ;
+ int res9 = 0 ;
+ int temp10 ;
+ int res10 = SWIG_TMPOBJ ;
+ int res11 ;
+ char *buf11 = 0 ;
+ int alloc11 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg12);
+ _global_pool = arg12;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg10 = &temp10;
+ if ((argc < 10) || (argc > 11)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 10)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_apr_getopt_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "apr_getopt_t *","svn_opt_print_help4", 1, argv[0] ));
+ }
+ arg1 = (apr_getopt_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[1], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","svn_opt_print_help4", 2, argv[1] ));
+ }
+ arg2 = (char *)(buf2);
+ arg3 = RTEST(argv[2]);
+ arg4 = RTEST(argv[3]);
+ arg5 = RTEST(argv[4]);
+ res6 = SWIG_AsCharPtrAndSize(argv[5], &buf6, NULL, &alloc6);
+ if (!SWIG_IsOK(res6)) {
+ SWIG_exception_fail(SWIG_ArgError(res6), Ruby_Format_TypeError( "", "char const *","svn_opt_print_help4", 6, argv[5] ));
+ }
+ arg6 = (char *)(buf6);
+ res7 = SWIG_AsCharPtrAndSize(argv[6], &buf7, NULL, &alloc7);
+ if (!SWIG_IsOK(res7)) {
+ SWIG_exception_fail(SWIG_ArgError(res7), Ruby_Format_TypeError( "", "char const *","svn_opt_print_help4", 7, argv[6] ));
+ }
+ arg7 = (char *)(buf7);
+ res8 = SWIG_ConvertPtr(argv[7], &argp8,SWIGTYPE_p_svn_opt_subcommand_desc2_t, 0 | 0 );
+ if (!SWIG_IsOK(res8)) {
+ SWIG_exception_fail(SWIG_ArgError(res8), Ruby_Format_TypeError( "", "svn_opt_subcommand_desc2_t const *","svn_opt_print_help4", 8, argv[7] ));
+ }
+ arg8 = (svn_opt_subcommand_desc2_t *)(argp8);
+ res9 = SWIG_ConvertPtr(argv[8], &argp9,SWIGTYPE_p_apr_getopt_option_t, 0 | 0 );
+ if (!SWIG_IsOK(res9)) {
+ SWIG_exception_fail(SWIG_ArgError(res9), Ruby_Format_TypeError( "", "apr_getopt_option_t const *","svn_opt_print_help4", 9, argv[8] ));
+ }
+ arg9 = (apr_getopt_option_t *)(argp9);
+ res11 = SWIG_AsCharPtrAndSize(argv[9], &buf11, NULL, &alloc11);
+ if (!SWIG_IsOK(res11)) {
+ SWIG_exception_fail(SWIG_ArgError(res11), Ruby_Format_TypeError( "", "char const *","svn_opt_print_help4", 11, argv[9] ));
+ }
+ arg11 = (char *)(buf11);
+ if (argc > 10) {
+
+ }
+ {
+ result = (svn_error_t *)svn_opt_print_help4(arg1,(char const *)arg2,arg3,arg4,arg5,(char const *)arg6,(char const *)arg7,(struct svn_opt_subcommand_desc2_t const *)arg8,(apr_getopt_option_t const *)arg9,(int const *)arg10,(char const *)arg11,arg12);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ if (SWIG_IsTmpObj(res10)) {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_From_int((*arg10)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res10) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj((void*)(arg10), SWIGTYPE_p_int, new_flags));
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+ if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+ if (alloc11 == SWIG_NEWOBJ) free((char*)buf11);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+ if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+ if (alloc11 == SWIG_NEWOBJ) free((char*)buf11);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_opt_print_help3(int argc, VALUE *argv, VALUE self) {
apr_getopt_t *arg1 = (apr_getopt_t *) 0 ;
char *arg2 = (char *) 0 ;
@@ -12114,11 +13452,157 @@ fail:
}
-swig_class SwigClassSvn_auth_provider_t;
+SWIGINTERN VALUE
+_wrap_svn_cmdline_init(int argc, VALUE *argv, VALUE self) {
+ char *arg1 = (char *) 0 ;
+ FILE *arg2 = (FILE *) 0 ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ int result;
+ VALUE vresult = Qnil;
+
+ if ((argc < 2) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
+ }
+ res1 = SWIG_AsCharPtrAndSize(argv[0], &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "char const *","svn_cmdline_init", 1, argv[0] ));
+ }
+ arg1 = (char *)(buf1);
+ res2 = SWIG_ConvertPtr(argv[1], &argp2,SWIGTYPE_p_FILE, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "FILE *","svn_cmdline_init", 2, argv[1] ));
+ }
+ arg2 = (FILE *)(argp2);
+ {
+ result = (int)svn_cmdline_init((char const *)arg1,arg2);
+
+
+
+ }
+ vresult = SWIG_From_int((int)(result));
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ return vresult;
+fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_cmdline_create_auth_baton(int argc, VALUE *argv, VALUE self) {
+ svn_auth_baton_t **arg1 = (svn_auth_baton_t **) 0 ;
+ svn_boolean_t arg2 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+ char *arg5 = (char *) 0 ;
+ svn_boolean_t arg6 ;
+ svn_boolean_t arg7 ;
+ svn_config_t *arg8 = (svn_config_t *) 0 ;
+ svn_cancel_func_t arg9 = (svn_cancel_func_t) 0 ;
+ void *arg10 = (void *) 0 ;
+ apr_pool_t *arg11 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_auth_baton_t *temp1 ;
+ void *argp8 = 0 ;
+ int res8 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg11);
+ _global_pool = arg11;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ if ((argc < 8) || (argc > 9)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 8)",argc); SWIG_fail;
+ }
+ arg2 = RTEST(argv[0]);
+ {
+ if (NIL_P(argv[1])) {
+ arg3 = NULL;
+ } else {
+ arg3 = StringValuePtr(argv[1]);
+ }
+ }
+ {
+ if (NIL_P(argv[2])) {
+ arg4 = NULL;
+ } else {
+ arg4 = StringValuePtr(argv[2]);
+ }
+ }
+ {
+ if (NIL_P(argv[3])) {
+ arg5 = NULL;
+ } else {
+ arg5 = StringValuePtr(argv[3]);
+ }
+ }
+ arg6 = RTEST(argv[4]);
+ arg7 = RTEST(argv[5]);
+ res8 = SWIG_ConvertPtr(argv[6], &argp8,SWIGTYPE_p_svn_config_t, 0 | 0 );
+ if (!SWIG_IsOK(res8)) {
+ SWIG_exception_fail(SWIG_ArgError(res8), Ruby_Format_TypeError( "", "svn_config_t *","svn_cmdline_create_auth_baton", 8, argv[6] ));
+ }
+ arg8 = (svn_config_t *)(argp8);
+ {
+ arg9 = svn_swig_rb_cancel_func;
+ arg10 = (void *)svn_swig_rb_make_baton(argv[7], _global_svn_swig_rb_pool);
+ }
+ if (argc > 8) {
+
+ }
+ {
+ result = (svn_error_t *)svn_cmdline_create_auth_baton(arg1,arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,arg6,arg7,arg8,arg9,arg10,arg11);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_auth_baton_t, 0));
+ }
+ {
+ svn_swig_rb_set_baton(vresult, (VALUE)arg10);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+static swig_class SwigClassSvn_auth_provider_t;
SWIGINTERN VALUE
_wrap_svn_auth_provider_t_cred_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_auth_provider_t *arg1 = (svn_auth_provider_t *) 0 ;
+ struct svn_auth_provider_t *arg1 = (struct svn_auth_provider_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12131,9 +13615,9 @@ _wrap_svn_auth_provider_t_cred_kind_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_provider_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_provider_t *","cred_kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_provider_t *","cred_kind", 1, self ));
}
- arg1 = (svn_auth_provider_t *)(argp1);
+ arg1 = (struct svn_auth_provider_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","cred_kind", 2, argv[0] ));
@@ -12157,7 +13641,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_provider_t_cred_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_auth_provider_t *arg1 = (svn_auth_provider_t *) 0 ;
+ struct svn_auth_provider_t *arg1 = (struct svn_auth_provider_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -12168,9 +13652,9 @@ _wrap_svn_auth_provider_t_cred_kind_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_provider_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_provider_t *","cred_kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_provider_t *","cred_kind", 1, self ));
}
- arg1 = (svn_auth_provider_t *)(argp1);
+ arg1 = (struct svn_auth_provider_t *)(argp1);
result = (char *) ((arg1)->cred_kind);
{
if (result) {
@@ -12187,7 +13671,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_provider_t_first_credentials_set(int argc, VALUE *argv, VALUE self) {
- svn_auth_provider_t *arg1 = (svn_auth_provider_t *) 0 ;
+ struct svn_auth_provider_t *arg1 = (struct svn_auth_provider_t *) 0 ;
svn_error_t *(*arg2)(void **,void **,void *,apr_hash_t *,char const *,apr_pool_t *) = (svn_error_t *(*)(void **,void **,void *,apr_hash_t *,char const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12197,9 +13681,9 @@ _wrap_svn_auth_provider_t_first_credentials_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_provider_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_provider_t *","first_credentials", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_provider_t *","first_credentials", 1, self ));
}
- arg1 = (svn_auth_provider_t *)(argp1);
+ arg1 = (struct svn_auth_provider_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -12215,7 +13699,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_provider_t_first_credentials_get(int argc, VALUE *argv, VALUE self) {
- svn_auth_provider_t *arg1 = (svn_auth_provider_t *) 0 ;
+ struct svn_auth_provider_t *arg1 = (struct svn_auth_provider_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void **,void **,void *,apr_hash_t *,char const *,apr_pool_t *) = 0 ;
@@ -12226,9 +13710,9 @@ _wrap_svn_auth_provider_t_first_credentials_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_provider_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_provider_t *","first_credentials", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_provider_t *","first_credentials", 1, self ));
}
- arg1 = (svn_auth_provider_t *)(argp1);
+ arg1 = (struct svn_auth_provider_t *)(argp1);
result = (svn_error_t *(*)(void **,void **,void *,apr_hash_t *,char const *,apr_pool_t *)) ((arg1)->first_credentials);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -12239,7 +13723,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_provider_t_next_credentials_set(int argc, VALUE *argv, VALUE self) {
- svn_auth_provider_t *arg1 = (svn_auth_provider_t *) 0 ;
+ struct svn_auth_provider_t *arg1 = (struct svn_auth_provider_t *) 0 ;
svn_error_t *(*arg2)(void **,void *,void *,apr_hash_t *,char const *,apr_pool_t *) = (svn_error_t *(*)(void **,void *,void *,apr_hash_t *,char const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12249,9 +13733,9 @@ _wrap_svn_auth_provider_t_next_credentials_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_provider_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_provider_t *","next_credentials", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_provider_t *","next_credentials", 1, self ));
}
- arg1 = (svn_auth_provider_t *)(argp1);
+ arg1 = (struct svn_auth_provider_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -12267,7 +13751,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_provider_t_next_credentials_get(int argc, VALUE *argv, VALUE self) {
- svn_auth_provider_t *arg1 = (svn_auth_provider_t *) 0 ;
+ struct svn_auth_provider_t *arg1 = (struct svn_auth_provider_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void **,void *,void *,apr_hash_t *,char const *,apr_pool_t *) = 0 ;
@@ -12278,9 +13762,9 @@ _wrap_svn_auth_provider_t_next_credentials_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_provider_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_provider_t *","next_credentials", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_provider_t *","next_credentials", 1, self ));
}
- arg1 = (svn_auth_provider_t *)(argp1);
+ arg1 = (struct svn_auth_provider_t *)(argp1);
result = (svn_error_t *(*)(void **,void *,void *,apr_hash_t *,char const *,apr_pool_t *)) ((arg1)->next_credentials);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -12291,7 +13775,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_provider_t_save_credentials_set(int argc, VALUE *argv, VALUE self) {
- svn_auth_provider_t *arg1 = (svn_auth_provider_t *) 0 ;
+ struct svn_auth_provider_t *arg1 = (struct svn_auth_provider_t *) 0 ;
svn_error_t *(*arg2)(svn_boolean_t *,void *,void *,apr_hash_t *,char const *,apr_pool_t *) = (svn_error_t *(*)(svn_boolean_t *,void *,void *,apr_hash_t *,char const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12301,9 +13785,9 @@ _wrap_svn_auth_provider_t_save_credentials_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_provider_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_provider_t *","save_credentials", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_provider_t *","save_credentials", 1, self ));
}
- arg1 = (svn_auth_provider_t *)(argp1);
+ arg1 = (struct svn_auth_provider_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -12319,7 +13803,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_provider_t_save_credentials_get(int argc, VALUE *argv, VALUE self) {
- svn_auth_provider_t *arg1 = (svn_auth_provider_t *) 0 ;
+ struct svn_auth_provider_t *arg1 = (struct svn_auth_provider_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_boolean_t *,void *,void *,apr_hash_t *,char const *,apr_pool_t *) = 0 ;
@@ -12330,9 +13814,9 @@ _wrap_svn_auth_provider_t_save_credentials_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_provider_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_provider_t *","save_credentials", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_provider_t *","save_credentials", 1, self ));
}
- arg1 = (svn_auth_provider_t *)(argp1);
+ arg1 = (struct svn_auth_provider_t *)(argp1);
result = (svn_error_t *(*)(svn_boolean_t *,void *,void *,apr_hash_t *,char const *,apr_pool_t *)) ((arg1)->save_credentials);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -12360,13 +13844,13 @@ _wrap_svn_auth_provider_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_auth_provider_t(int argc, VALUE *argv, VALUE self) {
- svn_auth_provider_t *result = 0 ;
+ struct svn_auth_provider_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_auth_provider_t *)calloc(1, sizeof(svn_auth_provider_t));
+ result = (struct svn_auth_provider_t *)calloc(1, sizeof(struct svn_auth_provider_t));
DATA_PTR(self) = result;
@@ -12379,15 +13863,15 @@ fail:
SWIGINTERN void
-free_svn_auth_provider_t(svn_auth_provider_t *arg1) {
+free_svn_auth_provider_t(struct svn_auth_provider_t *arg1) {
free((char *) arg1);
}
-swig_class SwigClassSvn_auth_provider_object_t;
+static swig_class SwigClassSvn_auth_provider_object_t;
SWIGINTERN VALUE
_wrap_svn_auth_provider_object_t_vtable_set(int argc, VALUE *argv, VALUE self) {
- svn_auth_provider_object_t *arg1 = (svn_auth_provider_object_t *) 0 ;
+ struct svn_auth_provider_object_t *arg1 = (struct svn_auth_provider_object_t *) 0 ;
svn_auth_provider_t *arg2 = (svn_auth_provider_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12399,9 +13883,9 @@ _wrap_svn_auth_provider_object_t_vtable_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_provider_object_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_provider_object_t *","vtable", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_provider_object_t *","vtable", 1, self ));
}
- arg1 = (svn_auth_provider_object_t *)(argp1);
+ arg1 = (struct svn_auth_provider_object_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_auth_provider_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_auth_provider_t const *","vtable", 2, argv[0] ));
@@ -12416,7 +13900,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_provider_object_t_vtable_get(int argc, VALUE *argv, VALUE self) {
- svn_auth_provider_object_t *arg1 = (svn_auth_provider_object_t *) 0 ;
+ struct svn_auth_provider_object_t *arg1 = (struct svn_auth_provider_object_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_auth_provider_t *result = 0 ;
@@ -12427,9 +13911,9 @@ _wrap_svn_auth_provider_object_t_vtable_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_provider_object_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_provider_object_t *","vtable", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_provider_object_t *","vtable", 1, self ));
}
- arg1 = (svn_auth_provider_object_t *)(argp1);
+ arg1 = (struct svn_auth_provider_object_t *)(argp1);
result = (svn_auth_provider_t *) ((arg1)->vtable);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_auth_provider_t, 0 | 0 );
return vresult;
@@ -12440,7 +13924,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_provider_object_t_provider_baton_set(int argc, VALUE *argv, VALUE self) {
- svn_auth_provider_object_t *arg1 = (svn_auth_provider_object_t *) 0 ;
+ struct svn_auth_provider_object_t *arg1 = (struct svn_auth_provider_object_t *) 0 ;
void *arg2 = (void *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12451,9 +13935,9 @@ _wrap_svn_auth_provider_object_t_provider_baton_set(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_provider_object_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_provider_object_t *","provider_baton", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_provider_object_t *","provider_baton", 1, self ));
}
- arg1 = (svn_auth_provider_object_t *)(argp1);
+ arg1 = (struct svn_auth_provider_object_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0],SWIG_as_voidptrptr(&arg2), 0, SWIG_POINTER_DISOWN);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "void *","provider_baton", 2, argv[0] ));
@@ -12467,7 +13951,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_provider_object_t_provider_baton_get(int argc, VALUE *argv, VALUE self) {
- svn_auth_provider_object_t *arg1 = (svn_auth_provider_object_t *) 0 ;
+ struct svn_auth_provider_object_t *arg1 = (struct svn_auth_provider_object_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
void *result = 0 ;
@@ -12478,9 +13962,9 @@ _wrap_svn_auth_provider_object_t_provider_baton_get(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_provider_object_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_provider_object_t *","provider_baton", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_provider_object_t *","provider_baton", 1, self ));
}
- arg1 = (svn_auth_provider_object_t *)(argp1);
+ arg1 = (struct svn_auth_provider_object_t *)(argp1);
result = (void *) ((arg1)->provider_baton);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 | 0 );
return vresult;
@@ -12508,13 +13992,13 @@ _wrap_svn_auth_provider_object_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_auth_provider_object_t(int argc, VALUE *argv, VALUE self) {
- svn_auth_provider_object_t *result = 0 ;
+ struct svn_auth_provider_object_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_auth_provider_object_t *)calloc(1, sizeof(svn_auth_provider_object_t));
+ result = (struct svn_auth_provider_object_t *)calloc(1, sizeof(struct svn_auth_provider_object_t));
DATA_PTR(self) = result;
@@ -12527,35 +14011,34 @@ fail:
SWIGINTERN void
-free_svn_auth_provider_object_t(svn_auth_provider_object_t *arg1) {
+free_svn_auth_provider_object_t(struct svn_auth_provider_object_t *arg1) {
free((char *) arg1);
}
-swig_class SwigClassSvn_auth_cred_simple_t;
+static swig_class SwigClassSvn_auth_cred_simple_t;
SWIGINTERN VALUE
_wrap_svn_auth_cred_simple_t_username_set(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_simple_t *arg1 = (svn_auth_cred_simple_t *) 0 ;
+ struct svn_auth_cred_simple_t *arg1 = (struct svn_auth_cred_simple_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- int res2 ;
- char *buf2 = 0 ;
- int alloc2 = 0 ;
if ((argc < 1) || (argc > 1)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_cred_simple_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_cred_simple_t *","username", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_cred_simple_t *","username", 1, self ));
}
- arg1 = (svn_auth_cred_simple_t *)(argp1);
- res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
- if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","username", 2, argv[0] ));
+ arg1 = (struct svn_auth_cred_simple_t *)(argp1);
+ {
+ if (NIL_P(argv[0])) {
+ arg2 = NULL;
+ } else {
+ arg2 = StringValuePtr(argv[0]);
+ }
}
- arg2 = (char *)(buf2);
{
apr_size_t len = strlen(arg2) + 1;
char *copied;
@@ -12564,17 +14047,15 @@ _wrap_svn_auth_cred_simple_t_username_set(int argc, VALUE *argv, VALUE self) {
memcpy(copied, arg2, len);
arg1->username = copied;
}
- if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
return Qnil;
fail:
- if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
return Qnil;
}
SWIGINTERN VALUE
_wrap_svn_auth_cred_simple_t_username_get(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_simple_t *arg1 = (svn_auth_cred_simple_t *) 0 ;
+ struct svn_auth_cred_simple_t *arg1 = (struct svn_auth_cred_simple_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -12585,9 +14066,9 @@ _wrap_svn_auth_cred_simple_t_username_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_cred_simple_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_cred_simple_t *","username", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_cred_simple_t *","username", 1, self ));
}
- arg1 = (svn_auth_cred_simple_t *)(argp1);
+ arg1 = (struct svn_auth_cred_simple_t *)(argp1);
result = (char *) ((arg1)->username);
{
if (result) {
@@ -12604,27 +14085,26 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_cred_simple_t_password_set(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_simple_t *arg1 = (svn_auth_cred_simple_t *) 0 ;
+ struct svn_auth_cred_simple_t *arg1 = (struct svn_auth_cred_simple_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- int res2 ;
- char *buf2 = 0 ;
- int alloc2 = 0 ;
if ((argc < 1) || (argc > 1)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_cred_simple_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_cred_simple_t *","password", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_cred_simple_t *","password", 1, self ));
}
- arg1 = (svn_auth_cred_simple_t *)(argp1);
- res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
- if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","password", 2, argv[0] ));
+ arg1 = (struct svn_auth_cred_simple_t *)(argp1);
+ {
+ if (NIL_P(argv[0])) {
+ arg2 = NULL;
+ } else {
+ arg2 = StringValuePtr(argv[0]);
+ }
}
- arg2 = (char *)(buf2);
{
apr_size_t len = strlen(arg2) + 1;
char *copied;
@@ -12633,17 +14113,15 @@ _wrap_svn_auth_cred_simple_t_password_set(int argc, VALUE *argv, VALUE self) {
memcpy(copied, arg2, len);
arg1->password = copied;
}
- if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
return Qnil;
fail:
- if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
return Qnil;
}
SWIGINTERN VALUE
_wrap_svn_auth_cred_simple_t_password_get(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_simple_t *arg1 = (svn_auth_cred_simple_t *) 0 ;
+ struct svn_auth_cred_simple_t *arg1 = (struct svn_auth_cred_simple_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -12654,9 +14132,9 @@ _wrap_svn_auth_cred_simple_t_password_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_cred_simple_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_cred_simple_t *","password", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_cred_simple_t *","password", 1, self ));
}
- arg1 = (svn_auth_cred_simple_t *)(argp1);
+ arg1 = (struct svn_auth_cred_simple_t *)(argp1);
result = (char *) ((arg1)->password);
{
if (result) {
@@ -12673,7 +14151,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_cred_simple_t_may_save_set(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_simple_t *arg1 = (svn_auth_cred_simple_t *) 0 ;
+ struct svn_auth_cred_simple_t *arg1 = (struct svn_auth_cred_simple_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12683,9 +14161,9 @@ _wrap_svn_auth_cred_simple_t_may_save_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_cred_simple_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_cred_simple_t *","may_save", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_cred_simple_t *","may_save", 1, self ));
}
- arg1 = (svn_auth_cred_simple_t *)(argp1);
+ arg1 = (struct svn_auth_cred_simple_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->may_save = arg2;
return Qnil;
@@ -12696,7 +14174,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_cred_simple_t_may_save_get(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_simple_t *arg1 = (svn_auth_cred_simple_t *) 0 ;
+ struct svn_auth_cred_simple_t *arg1 = (struct svn_auth_cred_simple_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -12707,9 +14185,9 @@ _wrap_svn_auth_cred_simple_t_may_save_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_cred_simple_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_cred_simple_t *","may_save", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_cred_simple_t *","may_save", 1, self ));
}
- arg1 = (svn_auth_cred_simple_t *)(argp1);
+ arg1 = (struct svn_auth_cred_simple_t *)(argp1);
result = (svn_boolean_t) ((arg1)->may_save);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -12737,13 +14215,13 @@ _wrap_svn_auth_cred_simple_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_auth_cred_simple_t(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_simple_t *result = 0 ;
+ struct svn_auth_cred_simple_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_auth_cred_simple_t *)calloc(1, sizeof(svn_auth_cred_simple_t));
+ result = (struct svn_auth_cred_simple_t *)calloc(1, sizeof(struct svn_auth_cred_simple_t));
DATA_PTR(self) = result;
@@ -12756,35 +14234,34 @@ fail:
SWIGINTERN void
-free_svn_auth_cred_simple_t(svn_auth_cred_simple_t *arg1) {
+free_svn_auth_cred_simple_t(struct svn_auth_cred_simple_t *arg1) {
free((char *) arg1);
}
-swig_class SwigClassSvn_auth_cred_username_t;
+static swig_class SwigClassSvn_auth_cred_username_t;
SWIGINTERN VALUE
_wrap_svn_auth_cred_username_t_username_set(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_username_t *arg1 = (svn_auth_cred_username_t *) 0 ;
+ struct svn_auth_cred_username_t *arg1 = (struct svn_auth_cred_username_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- int res2 ;
- char *buf2 = 0 ;
- int alloc2 = 0 ;
if ((argc < 1) || (argc > 1)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_cred_username_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_cred_username_t *","username", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_cred_username_t *","username", 1, self ));
}
- arg1 = (svn_auth_cred_username_t *)(argp1);
- res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
- if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","username", 2, argv[0] ));
+ arg1 = (struct svn_auth_cred_username_t *)(argp1);
+ {
+ if (NIL_P(argv[0])) {
+ arg2 = NULL;
+ } else {
+ arg2 = StringValuePtr(argv[0]);
+ }
}
- arg2 = (char *)(buf2);
{
apr_size_t len = strlen(arg2) + 1;
char *copied;
@@ -12793,17 +14270,15 @@ _wrap_svn_auth_cred_username_t_username_set(int argc, VALUE *argv, VALUE self) {
memcpy(copied, arg2, len);
arg1->username = copied;
}
- if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
return Qnil;
fail:
- if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
return Qnil;
}
SWIGINTERN VALUE
_wrap_svn_auth_cred_username_t_username_get(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_username_t *arg1 = (svn_auth_cred_username_t *) 0 ;
+ struct svn_auth_cred_username_t *arg1 = (struct svn_auth_cred_username_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -12814,9 +14289,9 @@ _wrap_svn_auth_cred_username_t_username_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_cred_username_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_cred_username_t *","username", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_cred_username_t *","username", 1, self ));
}
- arg1 = (svn_auth_cred_username_t *)(argp1);
+ arg1 = (struct svn_auth_cred_username_t *)(argp1);
result = (char *) ((arg1)->username);
{
if (result) {
@@ -12833,7 +14308,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_cred_username_t_may_save_set(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_username_t *arg1 = (svn_auth_cred_username_t *) 0 ;
+ struct svn_auth_cred_username_t *arg1 = (struct svn_auth_cred_username_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12843,9 +14318,9 @@ _wrap_svn_auth_cred_username_t_may_save_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_cred_username_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_cred_username_t *","may_save", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_cred_username_t *","may_save", 1, self ));
}
- arg1 = (svn_auth_cred_username_t *)(argp1);
+ arg1 = (struct svn_auth_cred_username_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->may_save = arg2;
return Qnil;
@@ -12856,7 +14331,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_cred_username_t_may_save_get(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_username_t *arg1 = (svn_auth_cred_username_t *) 0 ;
+ struct svn_auth_cred_username_t *arg1 = (struct svn_auth_cred_username_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -12867,9 +14342,9 @@ _wrap_svn_auth_cred_username_t_may_save_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_cred_username_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_cred_username_t *","may_save", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_cred_username_t *","may_save", 1, self ));
}
- arg1 = (svn_auth_cred_username_t *)(argp1);
+ arg1 = (struct svn_auth_cred_username_t *)(argp1);
result = (svn_boolean_t) ((arg1)->may_save);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -12897,13 +14372,13 @@ _wrap_svn_auth_cred_username_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_auth_cred_username_t(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_username_t *result = 0 ;
+ struct svn_auth_cred_username_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_auth_cred_username_t *)calloc(1, sizeof(svn_auth_cred_username_t));
+ result = (struct svn_auth_cred_username_t *)calloc(1, sizeof(struct svn_auth_cred_username_t));
DATA_PTR(self) = result;
@@ -12916,15 +14391,15 @@ fail:
SWIGINTERN void
-free_svn_auth_cred_username_t(svn_auth_cred_username_t *arg1) {
+free_svn_auth_cred_username_t(struct svn_auth_cred_username_t *arg1) {
free((char *) arg1);
}
-swig_class SwigClassSvn_auth_cred_ssl_client_cert_t;
+static swig_class SwigClassSvn_auth_cred_ssl_client_cert_t;
SWIGINTERN VALUE
_wrap_svn_auth_cred_ssl_client_cert_t_cert_file_set(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_ssl_client_cert_t *arg1 = (svn_auth_cred_ssl_client_cert_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_t *arg1 = (struct svn_auth_cred_ssl_client_cert_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12937,9 +14412,9 @@ _wrap_svn_auth_cred_ssl_client_cert_t_cert_file_set(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_cred_ssl_client_cert_t *","cert_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_cred_ssl_client_cert_t *","cert_file", 1, self ));
}
- arg1 = (svn_auth_cred_ssl_client_cert_t *)(argp1);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","cert_file", 2, argv[0] ));
@@ -12963,7 +14438,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_cred_ssl_client_cert_t_cert_file_get(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_ssl_client_cert_t *arg1 = (svn_auth_cred_ssl_client_cert_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_t *arg1 = (struct svn_auth_cred_ssl_client_cert_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -12974,9 +14449,9 @@ _wrap_svn_auth_cred_ssl_client_cert_t_cert_file_get(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_cred_ssl_client_cert_t *","cert_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_cred_ssl_client_cert_t *","cert_file", 1, self ));
}
- arg1 = (svn_auth_cred_ssl_client_cert_t *)(argp1);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_t *)(argp1);
result = (char *) ((arg1)->cert_file);
{
if (result) {
@@ -12993,7 +14468,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_cred_ssl_client_cert_t_may_save_set(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_ssl_client_cert_t *arg1 = (svn_auth_cred_ssl_client_cert_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_t *arg1 = (struct svn_auth_cred_ssl_client_cert_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13003,9 +14478,9 @@ _wrap_svn_auth_cred_ssl_client_cert_t_may_save_set(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_cred_ssl_client_cert_t *","may_save", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_cred_ssl_client_cert_t *","may_save", 1, self ));
}
- arg1 = (svn_auth_cred_ssl_client_cert_t *)(argp1);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->may_save = arg2;
return Qnil;
@@ -13016,7 +14491,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_cred_ssl_client_cert_t_may_save_get(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_ssl_client_cert_t *arg1 = (svn_auth_cred_ssl_client_cert_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_t *arg1 = (struct svn_auth_cred_ssl_client_cert_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -13027,9 +14502,9 @@ _wrap_svn_auth_cred_ssl_client_cert_t_may_save_get(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_cred_ssl_client_cert_t *","may_save", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_cred_ssl_client_cert_t *","may_save", 1, self ));
}
- arg1 = (svn_auth_cred_ssl_client_cert_t *)(argp1);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_t *)(argp1);
result = (svn_boolean_t) ((arg1)->may_save);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -13057,13 +14532,13 @@ _wrap_svn_auth_cred_ssl_client_cert_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_auth_cred_ssl_client_cert_t(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_ssl_client_cert_t *result = 0 ;
+ struct svn_auth_cred_ssl_client_cert_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_auth_cred_ssl_client_cert_t *)calloc(1, sizeof(svn_auth_cred_ssl_client_cert_t));
+ result = (struct svn_auth_cred_ssl_client_cert_t *)calloc(1, sizeof(struct svn_auth_cred_ssl_client_cert_t));
DATA_PTR(self) = result;
@@ -13076,35 +14551,34 @@ fail:
SWIGINTERN void
-free_svn_auth_cred_ssl_client_cert_t(svn_auth_cred_ssl_client_cert_t *arg1) {
+free_svn_auth_cred_ssl_client_cert_t(struct svn_auth_cred_ssl_client_cert_t *arg1) {
free((char *) arg1);
}
-swig_class SwigClassSvn_auth_cred_ssl_client_cert_pw_t;
+static swig_class SwigClassSvn_auth_cred_ssl_client_cert_pw_t;
SWIGINTERN VALUE
_wrap_svn_auth_cred_ssl_client_cert_pw_t_password_set(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_ssl_client_cert_pw_t *arg1 = (svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_pw_t *arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- int res2 ;
- char *buf2 = 0 ;
- int alloc2 = 0 ;
if ((argc < 1) || (argc > 1)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_cred_ssl_client_cert_pw_t *","password", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_cred_ssl_client_cert_pw_t *","password", 1, self ));
}
- arg1 = (svn_auth_cred_ssl_client_cert_pw_t *)(argp1);
- res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
- if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","password", 2, argv[0] ));
+ arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *)(argp1);
+ {
+ if (NIL_P(argv[0])) {
+ arg2 = NULL;
+ } else {
+ arg2 = StringValuePtr(argv[0]);
+ }
}
- arg2 = (char *)(buf2);
{
apr_size_t len = strlen(arg2) + 1;
char *copied;
@@ -13113,17 +14587,15 @@ _wrap_svn_auth_cred_ssl_client_cert_pw_t_password_set(int argc, VALUE *argv, VAL
memcpy(copied, arg2, len);
arg1->password = copied;
}
- if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
return Qnil;
fail:
- if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
return Qnil;
}
SWIGINTERN VALUE
_wrap_svn_auth_cred_ssl_client_cert_pw_t_password_get(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_ssl_client_cert_pw_t *arg1 = (svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_pw_t *arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -13134,9 +14606,9 @@ _wrap_svn_auth_cred_ssl_client_cert_pw_t_password_get(int argc, VALUE *argv, VAL
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_cred_ssl_client_cert_pw_t *","password", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_cred_ssl_client_cert_pw_t *","password", 1, self ));
}
- arg1 = (svn_auth_cred_ssl_client_cert_pw_t *)(argp1);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *)(argp1);
result = (char *) ((arg1)->password);
{
if (result) {
@@ -13153,7 +14625,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_cred_ssl_client_cert_pw_t_may_save_set(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_ssl_client_cert_pw_t *arg1 = (svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_pw_t *arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13163,9 +14635,9 @@ _wrap_svn_auth_cred_ssl_client_cert_pw_t_may_save_set(int argc, VALUE *argv, VAL
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_cred_ssl_client_cert_pw_t *","may_save", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_cred_ssl_client_cert_pw_t *","may_save", 1, self ));
}
- arg1 = (svn_auth_cred_ssl_client_cert_pw_t *)(argp1);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->may_save = arg2;
return Qnil;
@@ -13176,7 +14648,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_cred_ssl_client_cert_pw_t_may_save_get(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_ssl_client_cert_pw_t *arg1 = (svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
+ struct svn_auth_cred_ssl_client_cert_pw_t *arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -13187,9 +14659,9 @@ _wrap_svn_auth_cred_ssl_client_cert_pw_t_may_save_get(int argc, VALUE *argv, VAL
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_cred_ssl_client_cert_pw_t *","may_save", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_cred_ssl_client_cert_pw_t *","may_save", 1, self ));
}
- arg1 = (svn_auth_cred_ssl_client_cert_pw_t *)(argp1);
+ arg1 = (struct svn_auth_cred_ssl_client_cert_pw_t *)(argp1);
result = (svn_boolean_t) ((arg1)->may_save);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -13217,13 +14689,13 @@ _wrap_svn_auth_cred_ssl_client_cert_pw_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_auth_cred_ssl_client_cert_pw_t(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_ssl_client_cert_pw_t *result = 0 ;
+ struct svn_auth_cred_ssl_client_cert_pw_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_auth_cred_ssl_client_cert_pw_t *)calloc(1, sizeof(svn_auth_cred_ssl_client_cert_pw_t));
+ result = (struct svn_auth_cred_ssl_client_cert_pw_t *)calloc(1, sizeof(struct svn_auth_cred_ssl_client_cert_pw_t));
DATA_PTR(self) = result;
@@ -13236,15 +14708,15 @@ fail:
SWIGINTERN void
-free_svn_auth_cred_ssl_client_cert_pw_t(svn_auth_cred_ssl_client_cert_pw_t *arg1) {
+free_svn_auth_cred_ssl_client_cert_pw_t(struct svn_auth_cred_ssl_client_cert_pw_t *arg1) {
free((char *) arg1);
}
-swig_class SwigClassSvn_auth_ssl_server_cert_info_t;
+static swig_class SwigClassSvn_auth_ssl_server_cert_info_t;
SWIGINTERN VALUE
_wrap_svn_auth_ssl_server_cert_info_t_hostname_set(int argc, VALUE *argv, VALUE self) {
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13257,9 +14729,9 @@ _wrap_svn_auth_ssl_server_cert_info_t_hostname_set(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_ssl_server_cert_info_t *","hostname", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_ssl_server_cert_info_t *","hostname", 1, self ));
}
- arg1 = (svn_auth_ssl_server_cert_info_t *)(argp1);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","hostname", 2, argv[0] ));
@@ -13283,7 +14755,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_ssl_server_cert_info_t_hostname_get(int argc, VALUE *argv, VALUE self) {
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -13294,9 +14766,9 @@ _wrap_svn_auth_ssl_server_cert_info_t_hostname_get(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_ssl_server_cert_info_t *","hostname", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_ssl_server_cert_info_t *","hostname", 1, self ));
}
- arg1 = (svn_auth_ssl_server_cert_info_t *)(argp1);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)(argp1);
result = (char *) ((arg1)->hostname);
{
if (result) {
@@ -13313,7 +14785,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_ssl_server_cert_info_t_fingerprint_set(int argc, VALUE *argv, VALUE self) {
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13326,9 +14798,9 @@ _wrap_svn_auth_ssl_server_cert_info_t_fingerprint_set(int argc, VALUE *argv, VAL
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_ssl_server_cert_info_t *","fingerprint", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_ssl_server_cert_info_t *","fingerprint", 1, self ));
}
- arg1 = (svn_auth_ssl_server_cert_info_t *)(argp1);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","fingerprint", 2, argv[0] ));
@@ -13352,7 +14824,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_ssl_server_cert_info_t_fingerprint_get(int argc, VALUE *argv, VALUE self) {
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -13363,9 +14835,9 @@ _wrap_svn_auth_ssl_server_cert_info_t_fingerprint_get(int argc, VALUE *argv, VAL
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_ssl_server_cert_info_t *","fingerprint", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_ssl_server_cert_info_t *","fingerprint", 1, self ));
}
- arg1 = (svn_auth_ssl_server_cert_info_t *)(argp1);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)(argp1);
result = (char *) ((arg1)->fingerprint);
{
if (result) {
@@ -13382,7 +14854,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_ssl_server_cert_info_t_valid_from_set(int argc, VALUE *argv, VALUE self) {
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13395,9 +14867,9 @@ _wrap_svn_auth_ssl_server_cert_info_t_valid_from_set(int argc, VALUE *argv, VALU
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_ssl_server_cert_info_t *","valid_from", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_ssl_server_cert_info_t *","valid_from", 1, self ));
}
- arg1 = (svn_auth_ssl_server_cert_info_t *)(argp1);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","valid_from", 2, argv[0] ));
@@ -13421,7 +14893,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_ssl_server_cert_info_t_valid_from_get(int argc, VALUE *argv, VALUE self) {
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -13432,9 +14904,9 @@ _wrap_svn_auth_ssl_server_cert_info_t_valid_from_get(int argc, VALUE *argv, VALU
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_ssl_server_cert_info_t *","valid_from", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_ssl_server_cert_info_t *","valid_from", 1, self ));
}
- arg1 = (svn_auth_ssl_server_cert_info_t *)(argp1);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)(argp1);
result = (char *) ((arg1)->valid_from);
{
if (result) {
@@ -13451,7 +14923,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_ssl_server_cert_info_t_valid_until_set(int argc, VALUE *argv, VALUE self) {
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13464,9 +14936,9 @@ _wrap_svn_auth_ssl_server_cert_info_t_valid_until_set(int argc, VALUE *argv, VAL
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_ssl_server_cert_info_t *","valid_until", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_ssl_server_cert_info_t *","valid_until", 1, self ));
}
- arg1 = (svn_auth_ssl_server_cert_info_t *)(argp1);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","valid_until", 2, argv[0] ));
@@ -13490,7 +14962,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_ssl_server_cert_info_t_valid_until_get(int argc, VALUE *argv, VALUE self) {
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -13501,9 +14973,9 @@ _wrap_svn_auth_ssl_server_cert_info_t_valid_until_get(int argc, VALUE *argv, VAL
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_ssl_server_cert_info_t *","valid_until", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_ssl_server_cert_info_t *","valid_until", 1, self ));
}
- arg1 = (svn_auth_ssl_server_cert_info_t *)(argp1);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)(argp1);
result = (char *) ((arg1)->valid_until);
{
if (result) {
@@ -13520,7 +14992,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_ssl_server_cert_info_t_issuer_dname_set(int argc, VALUE *argv, VALUE self) {
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13533,9 +15005,9 @@ _wrap_svn_auth_ssl_server_cert_info_t_issuer_dname_set(int argc, VALUE *argv, VA
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_ssl_server_cert_info_t *","issuer_dname", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_ssl_server_cert_info_t *","issuer_dname", 1, self ));
}
- arg1 = (svn_auth_ssl_server_cert_info_t *)(argp1);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","issuer_dname", 2, argv[0] ));
@@ -13559,7 +15031,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_ssl_server_cert_info_t_issuer_dname_get(int argc, VALUE *argv, VALUE self) {
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -13570,9 +15042,9 @@ _wrap_svn_auth_ssl_server_cert_info_t_issuer_dname_get(int argc, VALUE *argv, VA
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_ssl_server_cert_info_t *","issuer_dname", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_ssl_server_cert_info_t *","issuer_dname", 1, self ));
}
- arg1 = (svn_auth_ssl_server_cert_info_t *)(argp1);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)(argp1);
result = (char *) ((arg1)->issuer_dname);
{
if (result) {
@@ -13589,7 +15061,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_ssl_server_cert_info_t_ascii_cert_set(int argc, VALUE *argv, VALUE self) {
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13602,9 +15074,9 @@ _wrap_svn_auth_ssl_server_cert_info_t_ascii_cert_set(int argc, VALUE *argv, VALU
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_ssl_server_cert_info_t *","ascii_cert", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_ssl_server_cert_info_t *","ascii_cert", 1, self ));
}
- arg1 = (svn_auth_ssl_server_cert_info_t *)(argp1);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","ascii_cert", 2, argv[0] ));
@@ -13628,7 +15100,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_ssl_server_cert_info_t_ascii_cert_get(int argc, VALUE *argv, VALUE self) {
- svn_auth_ssl_server_cert_info_t *arg1 = (svn_auth_ssl_server_cert_info_t *) 0 ;
+ struct svn_auth_ssl_server_cert_info_t *arg1 = (struct svn_auth_ssl_server_cert_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -13639,9 +15111,9 @@ _wrap_svn_auth_ssl_server_cert_info_t_ascii_cert_get(int argc, VALUE *argv, VALU
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_ssl_server_cert_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_ssl_server_cert_info_t *","ascii_cert", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_ssl_server_cert_info_t *","ascii_cert", 1, self ));
}
- arg1 = (svn_auth_ssl_server_cert_info_t *)(argp1);
+ arg1 = (struct svn_auth_ssl_server_cert_info_t *)(argp1);
result = (char *) ((arg1)->ascii_cert);
{
if (result) {
@@ -13675,13 +15147,13 @@ _wrap_svn_auth_ssl_server_cert_info_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_auth_ssl_server_cert_info_t(int argc, VALUE *argv, VALUE self) {
- svn_auth_ssl_server_cert_info_t *result = 0 ;
+ struct svn_auth_ssl_server_cert_info_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_auth_ssl_server_cert_info_t *)calloc(1, sizeof(svn_auth_ssl_server_cert_info_t));
+ result = (struct svn_auth_ssl_server_cert_info_t *)calloc(1, sizeof(struct svn_auth_ssl_server_cert_info_t));
DATA_PTR(self) = result;
@@ -13694,7 +15166,7 @@ fail:
SWIGINTERN void
-free_svn_auth_ssl_server_cert_info_t(svn_auth_ssl_server_cert_info_t *arg1) {
+free_svn_auth_ssl_server_cert_info_t(struct svn_auth_ssl_server_cert_info_t *arg1) {
free((char *) arg1);
}
@@ -13752,11 +15224,11 @@ fail:
}
-swig_class SwigClassSvn_auth_cred_ssl_server_trust_t;
+static swig_class SwigClassSvn_auth_cred_ssl_server_trust_t;
SWIGINTERN VALUE
_wrap_svn_auth_cred_ssl_server_trust_t_may_save_set(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_ssl_server_trust_t *arg1 = (svn_auth_cred_ssl_server_trust_t *) 0 ;
+ struct svn_auth_cred_ssl_server_trust_t *arg1 = (struct svn_auth_cred_ssl_server_trust_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13766,9 +15238,9 @@ _wrap_svn_auth_cred_ssl_server_trust_t_may_save_set(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_cred_ssl_server_trust_t *","may_save", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_cred_ssl_server_trust_t *","may_save", 1, self ));
}
- arg1 = (svn_auth_cred_ssl_server_trust_t *)(argp1);
+ arg1 = (struct svn_auth_cred_ssl_server_trust_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->may_save = arg2;
return Qnil;
@@ -13779,7 +15251,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_cred_ssl_server_trust_t_may_save_get(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_ssl_server_trust_t *arg1 = (svn_auth_cred_ssl_server_trust_t *) 0 ;
+ struct svn_auth_cred_ssl_server_trust_t *arg1 = (struct svn_auth_cred_ssl_server_trust_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -13790,9 +15262,9 @@ _wrap_svn_auth_cred_ssl_server_trust_t_may_save_get(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_cred_ssl_server_trust_t *","may_save", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_cred_ssl_server_trust_t *","may_save", 1, self ));
}
- arg1 = (svn_auth_cred_ssl_server_trust_t *)(argp1);
+ arg1 = (struct svn_auth_cred_ssl_server_trust_t *)(argp1);
result = (svn_boolean_t) ((arg1)->may_save);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -13803,7 +15275,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_cred_ssl_server_trust_t_accepted_failures_set(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_ssl_server_trust_t *arg1 = (svn_auth_cred_ssl_server_trust_t *) 0 ;
+ struct svn_auth_cred_ssl_server_trust_t *arg1 = (struct svn_auth_cred_ssl_server_trust_t *) 0 ;
apr_uint32_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13815,9 +15287,9 @@ _wrap_svn_auth_cred_ssl_server_trust_t_accepted_failures_set(int argc, VALUE *ar
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_cred_ssl_server_trust_t *","accepted_failures", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_cred_ssl_server_trust_t *","accepted_failures", 1, self ));
}
- arg1 = (svn_auth_cred_ssl_server_trust_t *)(argp1);
+ arg1 = (struct svn_auth_cred_ssl_server_trust_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "apr_uint32_t","accepted_failures", 2, argv[0] ));
@@ -13832,7 +15304,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_auth_cred_ssl_server_trust_t_accepted_failures_get(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_ssl_server_trust_t *arg1 = (svn_auth_cred_ssl_server_trust_t *) 0 ;
+ struct svn_auth_cred_ssl_server_trust_t *arg1 = (struct svn_auth_cred_ssl_server_trust_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_uint32_t result;
@@ -13843,9 +15315,9 @@ _wrap_svn_auth_cred_ssl_server_trust_t_accepted_failures_get(int argc, VALUE *ar
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_cred_ssl_server_trust_t *","accepted_failures", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_auth_cred_ssl_server_trust_t *","accepted_failures", 1, self ));
}
- arg1 = (svn_auth_cred_ssl_server_trust_t *)(argp1);
+ arg1 = (struct svn_auth_cred_ssl_server_trust_t *)(argp1);
result = ((arg1)->accepted_failures);
vresult = SWIG_From_unsigned_SS_long((unsigned long)(result));
return vresult;
@@ -13873,13 +15345,13 @@ _wrap_svn_auth_cred_ssl_server_trust_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_auth_cred_ssl_server_trust_t(int argc, VALUE *argv, VALUE self) {
- svn_auth_cred_ssl_server_trust_t *result = 0 ;
+ struct svn_auth_cred_ssl_server_trust_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_auth_cred_ssl_server_trust_t *)calloc(1, sizeof(svn_auth_cred_ssl_server_trust_t));
+ result = (struct svn_auth_cred_ssl_server_trust_t *)calloc(1, sizeof(struct svn_auth_cred_ssl_server_trust_t));
DATA_PTR(self) = result;
@@ -13892,7 +15364,7 @@ fail:
SWIGINTERN void
-free_svn_auth_cred_ssl_server_trust_t(svn_auth_cred_ssl_server_trust_t *arg1) {
+free_svn_auth_cred_ssl_server_trust_t(struct svn_auth_cred_ssl_server_trust_t *arg1) {
free((char *) arg1);
}
@@ -14217,6 +15689,89 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_auth_forget_credentials(int argc, VALUE *argv, VALUE self) {
+ svn_auth_baton_t *arg1 = (svn_auth_baton_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg4);
+ _global_pool = arg4;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 3) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_auth_baton_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_baton_t *","svn_auth_forget_credentials", 1, argv[0] ));
+ }
+ arg1 = (svn_auth_baton_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[1], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","svn_auth_forget_credentials", 2, argv[1] ));
+ }
+ arg2 = (char *)(buf2);
+ res3 = SWIG_AsCharPtrAndSize(argv[2], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","svn_auth_forget_credentials", 3, argv[2] ));
+ }
+ arg3 = (char *)(buf3);
+ if (argc > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_auth_forget_credentials(arg1,(char const *)arg2,(char const *)arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_auth_get_simple_prompt_provider(int argc, VALUE *argv, VALUE self) {
svn_auth_provider_object_t **arg1 = (svn_auth_provider_object_t **) 0 ;
svn_auth_simple_prompt_func_t arg2 = (svn_auth_simple_prompt_func_t) 0 ;
@@ -15476,9 +17031,6 @@ _wrap_svn_auth_invoke_simple_prompt_func(int argc, VALUE *argv, VALUE self) {
int res4 ;
char *buf4 = 0 ;
int alloc4 = 0 ;
- int res5 ;
- char *buf5 = 0 ;
- int alloc5 = 0 ;
svn_error_t *result = 0 ;
VALUE vresult = Qnil;
@@ -15506,11 +17058,13 @@ _wrap_svn_auth_invoke_simple_prompt_func(int argc, VALUE *argv, VALUE self) {
SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "char const *","svn_auth_invoke_simple_prompt_func", 4, argv[2] ));
}
arg4 = (char *)(buf4);
- res5 = SWIG_AsCharPtrAndSize(argv[3], &buf5, NULL, &alloc5);
- if (!SWIG_IsOK(res5)) {
- SWIG_exception_fail(SWIG_ArgError(res5), Ruby_Format_TypeError( "", "char const *","svn_auth_invoke_simple_prompt_func", 5, argv[3] ));
+ {
+ if (NIL_P(argv[3])) {
+ arg5 = NULL;
+ } else {
+ arg5 = StringValuePtr(argv[3]);
+ }
}
- arg5 = (char *)(buf5);
arg6 = RTEST(argv[4]);
if (argc > 5) {
@@ -15533,7 +17087,6 @@ _wrap_svn_auth_invoke_simple_prompt_func(int argc, VALUE *argv, VALUE self) {
vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg2, SWIGTYPE_p_svn_auth_cred_simple_t, 0));
}
if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
- if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
{
VALUE target;
target = _global_vresult_address == &vresult ? self : vresult;
@@ -15544,7 +17097,6 @@ _wrap_svn_auth_invoke_simple_prompt_func(int argc, VALUE *argv, VALUE self) {
return vresult;
fail:
if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
- if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
{
VALUE target;
target = _global_vresult_address == &vresult ? self : vresult;
@@ -16149,6 +17701,69 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_config_create2(int argc, VALUE *argv, VALUE self) {
+ svn_config_t **arg1 = (svn_config_t **) 0 ;
+ svn_boolean_t arg2 ;
+ svn_boolean_t arg3 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_config_t *temp1 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg4);
+ _global_pool = arg4;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ if ((argc < 2) || (argc > 3)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
+ }
+ arg2 = RTEST(argv[0]);
+ arg3 = RTEST(argv[1]);
+ if (argc > 2) {
+
+ }
+ {
+ result = (svn_error_t *)svn_config_create2(arg1,arg2,arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_config_t, 0));
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_config_create(int argc, VALUE *argv, VALUE self) {
svn_config_t **arg1 = (svn_config_t **) 0 ;
svn_boolean_t arg2 ;
@@ -16210,6 +17825,82 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_config_read3(int argc, VALUE *argv, VALUE self) {
+ svn_config_t **arg1 = (svn_config_t **) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ svn_boolean_t arg5 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_config_t *temp1 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg6);
+ _global_pool = arg6;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ if ((argc < 4) || (argc > 5)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 4)",argc); SWIG_fail;
+ }
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","svn_config_read3", 2, argv[0] ));
+ }
+ arg2 = (char *)(buf2);
+ arg3 = RTEST(argv[1]);
+ arg4 = RTEST(argv[2]);
+ arg5 = RTEST(argv[3]);
+ if (argc > 4) {
+
+ }
+ {
+ result = (svn_error_t *)svn_config_read3(arg1,(char const *)arg2,arg3,arg4,arg5,arg6);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_config_t, 0));
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_config_read2(int argc, VALUE *argv, VALUE self) {
svn_config_t **arg1 = (svn_config_t **) 0 ;
char *arg2 = (char *) 0 ;
@@ -16356,6 +18047,73 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_config_parse(int argc, VALUE *argv, VALUE self) {
+ svn_config_t **arg1 = (svn_config_t **) 0 ;
+ svn_stream_t *arg2 = (svn_stream_t *) 0 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_config_t *temp1 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg5);
+ _global_pool = arg5;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ if ((argc < 3) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
+ }
+ {
+ arg2 = svn_swig_rb_make_stream(argv[0]);
+ }
+ arg3 = RTEST(argv[1]);
+ arg4 = RTEST(argv[2]);
+ if (argc > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_config_parse(arg1,arg2,arg3,arg4,arg5);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_config_t, 0));
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_config_merge(int argc, VALUE *argv, VALUE self) {
svn_config_t *arg1 = (svn_config_t *) 0 ;
char *arg2 = (char *) 0 ;
@@ -16647,6 +18405,127 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_config_get_int64(int argc, VALUE *argv, VALUE self) {
+ svn_config_t *arg1 = (svn_config_t *) 0 ;
+ apr_int64_t *arg2 = (apr_int64_t *) 0 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+ apr_int64_t arg5 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ apr_int64_t temp2 ;
+ int res2 = SWIG_TMPOBJ ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ arg2 = &temp2;
+ if ((argc < 4) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 4)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_config_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_config_t *","svn_config_get_int64", 1, argv[0] ));
+ }
+ arg1 = (svn_config_t *)(argp1);
+ res3 = SWIG_AsCharPtrAndSize(argv[1], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","svn_config_get_int64", 3, argv[1] ));
+ }
+ arg3 = (char *)(buf3);
+ res4 = SWIG_AsCharPtrAndSize(argv[2], &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "char const *","svn_config_get_int64", 4, argv[2] ));
+ }
+ arg4 = (char *)(buf4);
+ {
+ arg5 = (apr_int64_t)NUM2LL(argv[3]);
+ }
+ {
+ result = (svn_error_t *)svn_config_get_int64(arg1,arg2,(char const *)arg3,(char const *)arg4,arg5);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, LL2NUM(*arg2));
+ }
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ return vresult;
+fail:
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_config_set_int64(int argc, VALUE *argv, VALUE self) {
+ svn_config_t *arg1 = (svn_config_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ apr_int64_t arg4 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+
+ if ((argc < 4) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 4)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_config_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_config_t *","svn_config_set_int64", 1, argv[0] ));
+ }
+ arg1 = (svn_config_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[1], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","svn_config_set_int64", 2, argv[1] ));
+ }
+ arg2 = (char *)(buf2);
+ res3 = SWIG_AsCharPtrAndSize(argv[2], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","svn_config_set_int64", 3, argv[2] ));
+ }
+ arg3 = (char *)(buf3);
+ {
+ arg4 = (apr_int64_t)NUM2LL(argv[3]);
+ }
+ {
+ svn_config_set_int64(arg1,(char const *)arg2,(char const *)arg3,arg4);
+
+
+
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ return Qnil;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_config_get_yes_no_ask(int argc, VALUE *argv, VALUE self) {
svn_config_t *arg1 = (svn_config_t *) 0 ;
char **arg2 = (char **) 0 ;
@@ -16723,6 +18602,91 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_config_get_tristate(int argc, VALUE *argv, VALUE self) {
+ svn_config_t *arg1 = (svn_config_t *) 0 ;
+ svn_tristate_t *arg2 = (svn_tristate_t *) 0 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+ char *arg5 = (char *) 0 ;
+ svn_tristate_t arg6 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ int res5 ;
+ char *buf5 = 0 ;
+ int alloc5 = 0 ;
+ int val6 ;
+ int ecode6 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 6) || (argc > 6)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 6)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_config_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_config_t *","svn_config_get_tristate", 1, argv[0] ));
+ }
+ arg1 = (svn_config_t *)(argp1);
+ res2 = SWIG_ConvertPtr(argv[1], &argp2,SWIGTYPE_p_svn_tristate_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_tristate_t *","svn_config_get_tristate", 2, argv[1] ));
+ }
+ arg2 = (svn_tristate_t *)(argp2);
+ res3 = SWIG_AsCharPtrAndSize(argv[2], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","svn_config_get_tristate", 3, argv[2] ));
+ }
+ arg3 = (char *)(buf3);
+ res4 = SWIG_AsCharPtrAndSize(argv[3], &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "char const *","svn_config_get_tristate", 4, argv[3] ));
+ }
+ arg4 = (char *)(buf4);
+ res5 = SWIG_AsCharPtrAndSize(argv[4], &buf5, NULL, &alloc5);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), Ruby_Format_TypeError( "", "char const *","svn_config_get_tristate", 5, argv[4] ));
+ }
+ arg5 = (char *)(buf5);
+ ecode6 = SWIG_AsVal_int(argv[5], &val6);
+ if (!SWIG_IsOK(ecode6)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode6), Ruby_Format_TypeError( "", "svn_tristate_t","svn_config_get_tristate", 6, argv[5] ));
+ }
+ arg6 = (svn_tristate_t)(val6);
+ {
+ result = (svn_error_t *)svn_config_get_tristate(arg1,arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,arg6);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ return vresult;
+fail:
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_config_enumerate_sections(int argc, VALUE *argv, VALUE self) {
svn_config_t *arg1 = (svn_config_t *) 0 ;
svn_config_section_enumerator_t arg2 = (svn_config_section_enumerator_t) 0 ;
@@ -17547,6 +19511,80 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_config_walk_auth_data(int argc, VALUE *argv, VALUE self) {
+ char *arg1 = (char *) 0 ;
+ svn_config_auth_walk_func_t arg2 = (svn_config_auth_walk_func_t) 0 ;
+ void *arg3 = (void *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int res3 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg4);
+ _global_pool = arg4;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 3) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
+ }
+ {
+ if (NIL_P(argv[0])) {
+ arg1 = NULL;
+ } else {
+ arg1 = StringValuePtr(argv[0]);
+ }
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(argv[1], (void**)(&arg2), SWIGTYPE_p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_config_auth_walk_func_t","svn_config_walk_auth_data", 2, argv[1] ));
+ }
+ }
+ res3 = SWIG_ConvertPtr(argv[2],SWIG_as_voidptrptr(&arg3), 0, 0);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "void *","svn_config_walk_auth_data", 3, argv[2] ));
+ }
+ if (argc > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_config_walk_auth_data((char const *)arg1,arg2,arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_config_get_user_config_path(int argc, VALUE *argv, VALUE self) {
char **arg1 = (char **) 0 ;
char *arg2 = (char *) 0 ;
@@ -17629,6 +19667,143 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_config_dup(int argc, VALUE *argv, VALUE self) {
+ svn_config_t **arg1 = (svn_config_t **) 0 ;
+ svn_config_t *arg2 = (svn_config_t *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_config_t *temp1 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg3);
+ _global_pool = arg3;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ if ((argc < 1) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_config_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_config_t *","svn_config_dup", 2, argv[0] ));
+ }
+ arg2 = (svn_config_t *)(argp2);
+ if (argc > 1) {
+
+ }
+ {
+ result = (svn_error_t *)svn_config_dup(arg1,arg2,arg3);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_config_t, 0));
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_config_copy_config(int argc, VALUE *argv, VALUE self) {
+ apr_hash_t **arg1 = (apr_hash_t **) 0 ;
+ apr_hash_t *arg2 = (apr_hash_t *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ apr_hash_t *temp1 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg3);
+ _global_pool = arg3;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ if ((argc < 1) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_apr_hash_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "apr_hash_t *","svn_config_copy_config", 2, argv[0] ));
+ }
+ arg2 = (apr_hash_t *)(argp2);
+ if (argc > 1) {
+
+ }
+ {
+ result = (svn_error_t *)svn_config_copy_config(arg1,arg2,arg3);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, svn_swig_rb_apr_hash_to_hash_swig_type(*arg1,
+ "svn_config_t *"))
+
+ ;
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_config_invoke_section_enumerator(int argc, VALUE *argv, VALUE self) {
svn_config_section_enumerator_t arg1 = (svn_config_section_enumerator_t) 0 ;
char *arg2 = (char *) 0 ;
@@ -17881,6 +20056,163 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_config_invoke_auth_walk_func(int argc, VALUE *argv, VALUE self) {
+ svn_config_auth_walk_func_t arg1 = (svn_config_auth_walk_func_t) 0 ;
+ svn_boolean_t *arg2 = (svn_boolean_t *) 0 ;
+ void *arg3 = (void *) 0 ;
+ char *arg4 = (char *) 0 ;
+ char *arg5 = (char *) 0 ;
+ apr_hash_t *arg6 = (apr_hash_t *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_boolean_t temp2 ;
+ int res3 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ int res5 ;
+ char *buf5 = 0 ;
+ int alloc5 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg7);
+ _global_pool = arg7;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg2 = &temp2;
+ if ((argc < 5) || (argc > 6)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 5)",argc); SWIG_fail;
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg1), SWIGTYPE_p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_config_auth_walk_func_t","svn_config_invoke_auth_walk_func", 1, argv[0] ));
+ }
+ }
+ res3 = SWIG_ConvertPtr(argv[1],SWIG_as_voidptrptr(&arg3), 0, 0);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "void *","svn_config_invoke_auth_walk_func", 3, argv[1] ));
+ }
+ res4 = SWIG_AsCharPtrAndSize(argv[2], &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "char const *","svn_config_invoke_auth_walk_func", 4, argv[2] ));
+ }
+ arg4 = (char *)(buf4);
+ res5 = SWIG_AsCharPtrAndSize(argv[3], &buf5, NULL, &alloc5);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), Ruby_Format_TypeError( "", "char const *","svn_config_invoke_auth_walk_func", 5, argv[3] ));
+ }
+ arg5 = (char *)(buf5);
+ {
+ VALUE rb_pool = Qnil;
+ if (!_global_pool) {
+ svn_swig_rb_get_pool(argc, argv, self, &rb_pool, &_global_pool);
+ svn_swig_rb_push_pool(rb_pool);
+ }
+ arg6 = svn_swig_rb_hash_to_apr_hash_svn_string(argv[4], _global_pool);
+ _global_pool = NULL;
+ if (!NIL_P(rb_pool)) {
+ if (NIL_P(arg6)) {
+ svn_swig_rb_destroy_pool(rb_pool);
+ } else {
+ svn_swig_rb_set_pool_for_no_swig_type(argv[4], rb_pool);
+ }
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ }
+ if (argc > 5) {
+
+ }
+ {
+ result = (svn_error_t *)svn_config_invoke_auth_walk_func(arg1,arg2,arg3,(char const *)arg4,(char const *)arg5,arg6,arg7);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, *arg2 ? Qtrue : Qfalse);
+ }
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_utf_initialize2(int argc, VALUE *argv, VALUE self) {
+ svn_boolean_t arg1 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg2);
+ _global_pool = arg2;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 1) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ arg1 = RTEST(argv[0]);
+ if (argc > 1) {
+
+ }
+ {
+ svn_utf_initialize2(arg1,arg2);
+
+
+
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_utf_initialize(int argc, VALUE *argv, VALUE self) {
apr_pool_t *arg1 = (apr_pool_t *) 0 ;
VALUE _global_svn_swig_rb_pool ;
@@ -18938,6 +21270,38 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_utf_cstring_utf8_width(int argc, VALUE *argv, VALUE self) {
+ char *arg1 = (char *) 0 ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ int result;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_AsCharPtrAndSize(argv[0], &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "char const *","svn_utf_cstring_utf8_width", 1, argv[0] ));
+ }
+ arg1 = (char *)(buf1);
+ {
+ result = (int)svn_utf_cstring_utf8_width((char const *)arg1);
+
+
+
+ }
+ vresult = SWIG_From_int((int)(result));
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ return vresult;
+fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_nls_init(int argc, VALUE *argv, VALUE self) {
svn_error_t *result = 0 ;
VALUE vresult = Qnil;
@@ -19641,6 +22005,186 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_path_is_repos_relative_url(int argc, VALUE *argv, VALUE self) {
+ char *arg1 = (char *) 0 ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ svn_boolean_t result;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_AsCharPtrAndSize(argv[0], &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "char const *","svn_path_is_repos_relative_url", 1, argv[0] ));
+ }
+ arg1 = (char *)(buf1);
+ {
+ result = (svn_boolean_t)svn_path_is_repos_relative_url((char const *)arg1);
+
+
+
+ }
+ vresult = result ? Qtrue : Qfalse;
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ return vresult;
+fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_path_resolve_repos_relative_url(int argc, VALUE *argv, VALUE self) {
+ char **arg1 = (char **) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ char *temp1 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg4);
+ _global_pool = arg4;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ if ((argc < 2) || (argc > 3)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
+ }
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","svn_path_resolve_repos_relative_url", 2, argv[0] ));
+ }
+ arg2 = (char *)(buf2);
+ res3 = SWIG_AsCharPtrAndSize(argv[1], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","svn_path_resolve_repos_relative_url", 3, argv[1] ));
+ }
+ arg3 = (char *)(buf3);
+ if (argc > 2) {
+
+ }
+ {
+ result = (svn_error_t *)svn_path_resolve_repos_relative_url((char const **)arg1,(char const *)arg2,(char const *)arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ if (*arg1) {
+ vresult = SWIG_Ruby_AppendOutput(vresult, rb_str_new2(*arg1));
+ } else {
+ vresult = SWIG_Ruby_AppendOutput(vresult, Qnil);
+ }
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_path_illegal_path_escape(int argc, VALUE *argv, VALUE self) {
+ char *arg1 = (char *) 0 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ char *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg2);
+ _global_pool = arg2;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 1) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_AsCharPtrAndSize(argv[0], &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "char const *","svn_path_illegal_path_escape", 1, argv[0] ));
+ }
+ arg1 = (char *)(buf1);
+ if (argc > 1) {
+
+ }
+ {
+ result = (char *)svn_path_illegal_path_escape((char const *)arg1,arg2);
+
+
+
+ }
+ {
+ if (result) {
+ vresult = rb_str_new2(result);
+ } else {
+ vresult = Qnil;
+ }
+ }
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_dirent_internal_style(int argc, VALUE *argv, VALUE self) {
char *arg1 = (char *) 0 ;
apr_pool_t *arg2 = (apr_pool_t *) 0 ;
@@ -21239,80 +23783,6 @@ fail:
SWIGINTERN VALUE
-_wrap_svn_uri__is_child(int argc, VALUE *argv, VALUE self) {
- char *arg1 = (char *) 0 ;
- char *arg2 = (char *) 0 ;
- apr_pool_t *arg3 = (apr_pool_t *) 0 ;
- VALUE _global_svn_swig_rb_pool ;
- apr_pool_t *_global_pool ;
- int res1 ;
- char *buf1 = 0 ;
- int alloc1 = 0 ;
- int res2 ;
- char *buf2 = 0 ;
- int alloc2 = 0 ;
- char *result = 0 ;
- VALUE vresult = Qnil;
-
- {
- svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg3);
- _global_pool = arg3;
- svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
- }
- if ((argc < 2) || (argc > 3)) {
- rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
- }
- res1 = SWIG_AsCharPtrAndSize(argv[0], &buf1, NULL, &alloc1);
- if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "char const *","svn_uri__is_child", 1, argv[0] ));
- }
- arg1 = (char *)(buf1);
- res2 = SWIG_AsCharPtrAndSize(argv[1], &buf2, NULL, &alloc2);
- if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","svn_uri__is_child", 2, argv[1] ));
- }
- arg2 = (char *)(buf2);
- if (argc > 2) {
-
- }
- {
- result = (char *)svn_uri__is_child((char const *)arg1,(char const *)arg2,arg3);
-
-
-
- }
- {
- if (result) {
- vresult = rb_str_new2(result);
- } else {
- vresult = Qnil;
- }
- }
- if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
- if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
- {
- VALUE target;
- target = _global_vresult_address == &vresult ? self : vresult;
- if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
- svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
- svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
- }
- return vresult;
-fail:
- if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
- if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
- {
- VALUE target;
- target = _global_vresult_address == &vresult ? self : vresult;
- if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
- svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
- svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
- }
- return Qnil;
-}
-
-
-SWIGINTERN VALUE
_wrap_svn_dirent_is_child(int argc, VALUE *argv, VALUE self) {
char *arg1 = (char *) 0 ;
char *arg2 = (char *) 0 ;
@@ -21387,80 +23857,6 @@ fail:
SWIGINTERN VALUE
-_wrap_svn_relpath__is_child(int argc, VALUE *argv, VALUE self) {
- char *arg1 = (char *) 0 ;
- char *arg2 = (char *) 0 ;
- apr_pool_t *arg3 = (apr_pool_t *) 0 ;
- VALUE _global_svn_swig_rb_pool ;
- apr_pool_t *_global_pool ;
- int res1 ;
- char *buf1 = 0 ;
- int alloc1 = 0 ;
- int res2 ;
- char *buf2 = 0 ;
- int alloc2 = 0 ;
- char *result = 0 ;
- VALUE vresult = Qnil;
-
- {
- svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg3);
- _global_pool = arg3;
- svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
- }
- if ((argc < 2) || (argc > 3)) {
- rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
- }
- res1 = SWIG_AsCharPtrAndSize(argv[0], &buf1, NULL, &alloc1);
- if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "char const *","svn_relpath__is_child", 1, argv[0] ));
- }
- arg1 = (char *)(buf1);
- res2 = SWIG_AsCharPtrAndSize(argv[1], &buf2, NULL, &alloc2);
- if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","svn_relpath__is_child", 2, argv[1] ));
- }
- arg2 = (char *)(buf2);
- if (argc > 2) {
-
- }
- {
- result = (char *)svn_relpath__is_child((char const *)arg1,(char const *)arg2,arg3);
-
-
-
- }
- {
- if (result) {
- vresult = rb_str_new2(result);
- } else {
- vresult = Qnil;
- }
- }
- if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
- if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
- {
- VALUE target;
- target = _global_vresult_address == &vresult ? self : vresult;
- if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
- svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
- svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
- }
- return vresult;
-fail:
- if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
- if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
- {
- VALUE target;
- target = _global_vresult_address == &vresult ? self : vresult;
- if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
- svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
- svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
- }
- return Qnil;
-}
-
-
-SWIGINTERN VALUE
_wrap_svn_dirent_is_ancestor(int argc, VALUE *argv, VALUE self) {
char *arg1 = (char *) 0 ;
char *arg2 = (char *) 0 ;
@@ -21504,49 +23900,6 @@ fail:
SWIGINTERN VALUE
-_wrap_svn_relpath__is_ancestor(int argc, VALUE *argv, VALUE self) {
- char *arg1 = (char *) 0 ;
- char *arg2 = (char *) 0 ;
- int res1 ;
- char *buf1 = 0 ;
- int alloc1 = 0 ;
- int res2 ;
- char *buf2 = 0 ;
- int alloc2 = 0 ;
- svn_boolean_t result;
- VALUE vresult = Qnil;
-
- if ((argc < 2) || (argc > 2)) {
- rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
- }
- res1 = SWIG_AsCharPtrAndSize(argv[0], &buf1, NULL, &alloc1);
- if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "char const *","svn_relpath__is_ancestor", 1, argv[0] ));
- }
- arg1 = (char *)(buf1);
- res2 = SWIG_AsCharPtrAndSize(argv[1], &buf2, NULL, &alloc2);
- if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","svn_relpath__is_ancestor", 2, argv[1] ));
- }
- arg2 = (char *)(buf2);
- {
- result = (svn_boolean_t)svn_relpath__is_ancestor((char const *)arg1,(char const *)arg2);
-
-
-
- }
- vresult = result ? Qtrue : Qfalse;
- if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
- if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
- return vresult;
-fail:
- if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
- if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
- return Qnil;
-}
-
-
-SWIGINTERN VALUE
_wrap_svn_uri__is_ancestor(int argc, VALUE *argv, VALUE self) {
char *arg1 = (char *) 0 ;
char *arg2 = (char *) 0 ;
@@ -21980,6 +24333,104 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_mergeinfo_diff2(int argc, VALUE *argv, VALUE self) {
+ svn_mergeinfo_t *arg1 = (svn_mergeinfo_t *) 0 ;
+ svn_mergeinfo_t *arg2 = (svn_mergeinfo_t *) 0 ;
+ svn_mergeinfo_t arg3 = (svn_mergeinfo_t) 0 ;
+ svn_mergeinfo_t arg4 = (svn_mergeinfo_t) 0 ;
+ svn_boolean_t arg5 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_mergeinfo_t temp1 ;
+ svn_mergeinfo_t temp2 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg6);
+ _global_pool = arg6;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg7);
+ _global_pool = arg7;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ arg2 = &temp2;
+ if ((argc < 3) || (argc > 5)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
+ }
+ {
+ arg3 = svn_swig_rb_hash_to_apr_hash_merge_range(argv[0], _global_pool);
+ }
+ {
+ arg4 = svn_swig_rb_hash_to_apr_hash_merge_range(argv[1], _global_pool);
+ }
+ arg5 = RTEST(argv[2]);
+ if (argc > 3) {
+
+ }
+ if (argc > 4) {
+
+ }
+ {
+ result = (svn_error_t *)svn_mergeinfo_diff2(arg1,arg2,arg3,arg4,arg5,arg6,arg7);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, svn_swig_rb_apr_hash_to_hash_merge_range(*arg1));
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, svn_swig_rb_apr_hash_to_hash_merge_range(*arg2));
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_mergeinfo_diff(int argc, VALUE *argv, VALUE self) {
svn_mergeinfo_t *arg1 = (svn_mergeinfo_t *) 0 ;
svn_mergeinfo_t *arg2 = (svn_mergeinfo_t *) 0 ;
@@ -22055,6 +24506,90 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_mergeinfo_merge2(int argc, VALUE *argv, VALUE self) {
+ svn_mergeinfo_t arg1 = (svn_mergeinfo_t) 0 ;
+ svn_mergeinfo_t arg2 = (svn_mergeinfo_t) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg3);
+ _global_pool = arg3;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg4);
+ _global_pool = arg4;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 2) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
+ }
+ {
+ arg1 = svn_swig_rb_hash_to_apr_hash_merge_range(argv[0], _global_pool);
+ }
+ {
+ arg2 = svn_swig_rb_hash_to_apr_hash_merge_range(argv[1], _global_pool);
+ }
+ if (argc > 2) {
+
+ }
+ if (argc > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_mergeinfo_merge2(arg1,arg2,arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_mergeinfo_catalog_merge(int argc, VALUE *argv, VALUE self) {
svn_mergeinfo_catalog_t arg1 = (svn_mergeinfo_catalog_t) 0 ;
svn_mergeinfo_catalog_t arg2 = (svn_mergeinfo_catalog_t) 0 ;
@@ -22307,16 +24842,16 @@ fail:
SWIGINTERN VALUE
_wrap_svn_rangelist_diff(int argc, VALUE *argv, VALUE self) {
- apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
- apr_array_header_t **arg2 = (apr_array_header_t **) 0 ;
- apr_array_header_t *arg3 = (apr_array_header_t *) 0 ;
- apr_array_header_t *arg4 = (apr_array_header_t *) 0 ;
+ svn_rangelist_t **arg1 = (svn_rangelist_t **) 0 ;
+ svn_rangelist_t **arg2 = (svn_rangelist_t **) 0 ;
+ svn_rangelist_t *arg3 = (svn_rangelist_t *) 0 ;
+ svn_rangelist_t *arg4 = (svn_rangelist_t *) 0 ;
svn_boolean_t arg5 ;
apr_pool_t *arg6 = (apr_pool_t *) 0 ;
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
- apr_array_header_t *temp1 ;
- apr_array_header_t *temp2 ;
+ svn_rangelist_t *temp1 ;
+ svn_rangelist_t *temp2 ;
svn_error_t *result = 0 ;
VALUE vresult = Qnil;
@@ -22381,15 +24916,103 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_rangelist_merge2(int argc, VALUE *argv, VALUE self) {
+ svn_rangelist_t *arg1 = (svn_rangelist_t *) 0 ;
+ svn_rangelist_t *arg2 = (svn_rangelist_t *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg3);
+ _global_pool = arg3;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg4);
+ _global_pool = arg4;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 2) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_rangelist_t *","svn_rangelist_merge2", 1, argv[0] ));
+ }
+ arg1 = (svn_rangelist_t *)(argp1);
+ {
+ arg2 = svn_swig_rb_array_to_apr_array_merge_range(argv[1], _global_pool);
+ }
+ if (argc > 2) {
+
+ }
+ if (argc > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_rangelist_merge2(arg1,(apr_array_header_t const *)arg2,arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_rangelist_remove(int argc, VALUE *argv, VALUE self) {
- apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
- apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
- apr_array_header_t *arg3 = (apr_array_header_t *) 0 ;
+ svn_rangelist_t **arg1 = (svn_rangelist_t **) 0 ;
+ svn_rangelist_t *arg2 = (svn_rangelist_t *) 0 ;
+ svn_rangelist_t *arg3 = (svn_rangelist_t *) 0 ;
svn_boolean_t arg4 ;
apr_pool_t *arg5 = (apr_pool_t *) 0 ;
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
- apr_array_header_t *temp1 ;
+ svn_rangelist_t *temp1 ;
svn_error_t *result = 0 ;
VALUE vresult = Qnil;
@@ -22626,14 +25249,14 @@ fail:
SWIGINTERN VALUE
_wrap_svn_rangelist_intersect(int argc, VALUE *argv, VALUE self) {
- apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
- apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
- apr_array_header_t *arg3 = (apr_array_header_t *) 0 ;
+ svn_rangelist_t **arg1 = (svn_rangelist_t **) 0 ;
+ svn_rangelist_t *arg2 = (svn_rangelist_t *) 0 ;
+ svn_rangelist_t *arg3 = (svn_rangelist_t *) 0 ;
svn_boolean_t arg4 ;
apr_pool_t *arg5 = (apr_pool_t *) 0 ;
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
- apr_array_header_t *temp1 ;
+ svn_rangelist_t *temp1 ;
svn_error_t *result = 0 ;
VALUE vresult = Qnil;
@@ -22696,7 +25319,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_rangelist_to_string(int argc, VALUE *argv, VALUE self) {
svn_string_t **arg1 = (svn_string_t **) 0 ;
- apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
+ svn_rangelist_t *arg2 = (svn_rangelist_t *) 0 ;
apr_pool_t *arg3 = (apr_pool_t *) 0 ;
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
@@ -22762,8 +25385,8 @@ fail:
SWIGINTERN VALUE
_wrap_svn_rangelist_inheritable2(int argc, VALUE *argv, VALUE self) {
- apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
- apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
+ svn_rangelist_t **arg1 = (svn_rangelist_t **) 0 ;
+ svn_rangelist_t *arg2 = (svn_rangelist_t *) 0 ;
svn_revnum_t arg3 ;
svn_revnum_t arg4 ;
svn_boolean_t arg5 ;
@@ -22771,7 +25394,7 @@ _wrap_svn_rangelist_inheritable2(int argc, VALUE *argv, VALUE self) {
apr_pool_t *arg7 = (apr_pool_t *) 0 ;
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
- apr_array_header_t *temp1 ;
+ svn_rangelist_t *temp1 ;
long val3 ;
int ecode3 = 0 ;
long val4 ;
@@ -22866,14 +25489,14 @@ fail:
SWIGINTERN VALUE
_wrap_svn_rangelist_inheritable(int argc, VALUE *argv, VALUE self) {
- apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
- apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
+ svn_rangelist_t **arg1 = (svn_rangelist_t **) 0 ;
+ svn_rangelist_t *arg2 = (svn_rangelist_t *) 0 ;
svn_revnum_t arg3 ;
svn_revnum_t arg4 ;
apr_pool_t *arg5 = (apr_pool_t *) 0 ;
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
- apr_array_header_t *temp1 ;
+ svn_rangelist_t *temp1 ;
long val3 ;
int ecode3 = 0 ;
long val4 ;
@@ -23321,11 +25944,11 @@ fail:
SWIGINTERN VALUE
_wrap_svn_rangelist_dup(int argc, VALUE *argv, VALUE self) {
- apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
+ svn_rangelist_t *arg1 = (svn_rangelist_t *) 0 ;
apr_pool_t *arg2 = (apr_pool_t *) 0 ;
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
- apr_array_header_t *result = 0 ;
+ svn_rangelist_t *result = 0 ;
VALUE vresult = Qnil;
{
@@ -23343,7 +25966,7 @@ _wrap_svn_rangelist_dup(int argc, VALUE *argv, VALUE self) {
}
{
- result = (apr_array_header_t *)svn_rangelist_dup((apr_array_header_t const *)arg1,arg2);
+ result = (svn_rangelist_t *)svn_rangelist_dup((apr_array_header_t const *)arg1,arg2);
@@ -23432,11 +26055,11 @@ fail:
}
-swig_class SwigClassSvn_io_dirent2_t;
+static swig_class SwigClassSvn_io_dirent2_t;
SWIGINTERN VALUE
_wrap_svn_io_dirent2_t_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_io_dirent2_t *arg1 = (svn_io_dirent2_t *) 0 ;
+ struct svn_io_dirent2_t *arg1 = (struct svn_io_dirent2_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -23448,9 +26071,9 @@ _wrap_svn_io_dirent2_t_kind_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_io_dirent2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_io_dirent2_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_io_dirent2_t *","kind", 1, self ));
}
- arg1 = (svn_io_dirent2_t *)(argp1);
+ arg1 = (struct svn_io_dirent2_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_node_kind_t","kind", 2, argv[0] ));
@@ -23465,7 +26088,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_io_dirent2_t_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_io_dirent2_t *arg1 = (svn_io_dirent2_t *) 0 ;
+ struct svn_io_dirent2_t *arg1 = (struct svn_io_dirent2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_node_kind_t result;
@@ -23476,9 +26099,9 @@ _wrap_svn_io_dirent2_t_kind_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_io_dirent2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_io_dirent2_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_io_dirent2_t *","kind", 1, self ));
}
- arg1 = (svn_io_dirent2_t *)(argp1);
+ arg1 = (struct svn_io_dirent2_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -23489,7 +26112,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_io_dirent2_t_special_set(int argc, VALUE *argv, VALUE self) {
- svn_io_dirent2_t *arg1 = (svn_io_dirent2_t *) 0 ;
+ struct svn_io_dirent2_t *arg1 = (struct svn_io_dirent2_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -23499,9 +26122,9 @@ _wrap_svn_io_dirent2_t_special_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_io_dirent2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_io_dirent2_t *","special", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_io_dirent2_t *","special", 1, self ));
}
- arg1 = (svn_io_dirent2_t *)(argp1);
+ arg1 = (struct svn_io_dirent2_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->special = arg2;
return Qnil;
@@ -23512,7 +26135,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_io_dirent2_t_special_get(int argc, VALUE *argv, VALUE self) {
- svn_io_dirent2_t *arg1 = (svn_io_dirent2_t *) 0 ;
+ struct svn_io_dirent2_t *arg1 = (struct svn_io_dirent2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -23523,9 +26146,9 @@ _wrap_svn_io_dirent2_t_special_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_io_dirent2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_io_dirent2_t *","special", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_io_dirent2_t *","special", 1, self ));
}
- arg1 = (svn_io_dirent2_t *)(argp1);
+ arg1 = (struct svn_io_dirent2_t *)(argp1);
result = (svn_boolean_t) ((arg1)->special);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -23536,7 +26159,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_io_dirent2_t_filesize_set(int argc, VALUE *argv, VALUE self) {
- svn_io_dirent2_t *arg1 = (svn_io_dirent2_t *) 0 ;
+ struct svn_io_dirent2_t *arg1 = (struct svn_io_dirent2_t *) 0 ;
svn_filesize_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -23546,9 +26169,9 @@ _wrap_svn_io_dirent2_t_filesize_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_io_dirent2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_io_dirent2_t *","filesize", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_io_dirent2_t *","filesize", 1, self ));
}
- arg1 = (svn_io_dirent2_t *)(argp1);
+ arg1 = (struct svn_io_dirent2_t *)(argp1);
{
arg2 = (svn_filesize_t)NUM2LL(argv[0]);
}
@@ -23561,7 +26184,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_io_dirent2_t_filesize_get(int argc, VALUE *argv, VALUE self) {
- svn_io_dirent2_t *arg1 = (svn_io_dirent2_t *) 0 ;
+ struct svn_io_dirent2_t *arg1 = (struct svn_io_dirent2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_filesize_t result;
@@ -23572,9 +26195,9 @@ _wrap_svn_io_dirent2_t_filesize_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_io_dirent2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_io_dirent2_t *","filesize", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_io_dirent2_t *","filesize", 1, self ));
}
- arg1 = (svn_io_dirent2_t *)(argp1);
+ arg1 = (struct svn_io_dirent2_t *)(argp1);
result = ((arg1)->filesize);
{
vresult = LL2NUM((svn_filesize_t)(result));
@@ -23587,7 +26210,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_io_dirent2_t_mtime_set(int argc, VALUE *argv, VALUE self) {
- svn_io_dirent2_t *arg1 = (svn_io_dirent2_t *) 0 ;
+ struct svn_io_dirent2_t *arg1 = (struct svn_io_dirent2_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -23597,9 +26220,9 @@ _wrap_svn_io_dirent2_t_mtime_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_io_dirent2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_io_dirent2_t *","mtime", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_io_dirent2_t *","mtime", 1, self ));
}
- arg1 = (svn_io_dirent2_t *)(argp1);
+ arg1 = (struct svn_io_dirent2_t *)(argp1);
{
arg2 = (apr_time_t)NUM2LL(argv[0]);
}
@@ -23612,7 +26235,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_io_dirent2_t_mtime_get(int argc, VALUE *argv, VALUE self) {
- svn_io_dirent2_t *arg1 = (svn_io_dirent2_t *) 0 ;
+ struct svn_io_dirent2_t *arg1 = (struct svn_io_dirent2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_time_t result;
@@ -23623,9 +26246,9 @@ _wrap_svn_io_dirent2_t_mtime_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_io_dirent2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_io_dirent2_t *","mtime", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_io_dirent2_t *","mtime", 1, self ));
}
- arg1 = (svn_io_dirent2_t *)(argp1);
+ arg1 = (struct svn_io_dirent2_t *)(argp1);
result = ((arg1)->mtime);
{
vresult = LL2NUM((apr_time_t)(result));
@@ -23655,13 +26278,13 @@ _wrap_svn_io_dirent2_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_io_dirent2_t(int argc, VALUE *argv, VALUE self) {
- svn_io_dirent2_t *result = 0 ;
+ struct svn_io_dirent2_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_io_dirent2_t *)calloc(1, sizeof(svn_io_dirent2_t));
+ result = (struct svn_io_dirent2_t *)calloc(1, sizeof(struct svn_io_dirent2_t));
DATA_PTR(self) = result;
@@ -23674,7 +26297,7 @@ fail:
SWIGINTERN void
-free_svn_io_dirent2_t(svn_io_dirent2_t *arg1) {
+free_svn_io_dirent2_t(struct svn_io_dirent2_t *arg1) {
free((char *) arg1);
}
@@ -23778,11 +26401,11 @@ fail:
}
-swig_class SwigClassSvn_io_dirent_t;
+static swig_class SwigClassSvn_io_dirent_t;
SWIGINTERN VALUE
_wrap_svn_io_dirent_t_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_io_dirent_t *arg1 = (svn_io_dirent_t *) 0 ;
+ struct svn_io_dirent_t *arg1 = (struct svn_io_dirent_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -23794,9 +26417,9 @@ _wrap_svn_io_dirent_t_kind_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_io_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_io_dirent_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_io_dirent_t *","kind", 1, self ));
}
- arg1 = (svn_io_dirent_t *)(argp1);
+ arg1 = (struct svn_io_dirent_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_node_kind_t","kind", 2, argv[0] ));
@@ -23811,7 +26434,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_io_dirent_t_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_io_dirent_t *arg1 = (svn_io_dirent_t *) 0 ;
+ struct svn_io_dirent_t *arg1 = (struct svn_io_dirent_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_node_kind_t result;
@@ -23822,9 +26445,9 @@ _wrap_svn_io_dirent_t_kind_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_io_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_io_dirent_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_io_dirent_t *","kind", 1, self ));
}
- arg1 = (svn_io_dirent_t *)(argp1);
+ arg1 = (struct svn_io_dirent_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -23835,7 +26458,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_io_dirent_t_special_set(int argc, VALUE *argv, VALUE self) {
- svn_io_dirent_t *arg1 = (svn_io_dirent_t *) 0 ;
+ struct svn_io_dirent_t *arg1 = (struct svn_io_dirent_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -23845,9 +26468,9 @@ _wrap_svn_io_dirent_t_special_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_io_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_io_dirent_t *","special", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_io_dirent_t *","special", 1, self ));
}
- arg1 = (svn_io_dirent_t *)(argp1);
+ arg1 = (struct svn_io_dirent_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->special = arg2;
return Qnil;
@@ -23858,7 +26481,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_io_dirent_t_special_get(int argc, VALUE *argv, VALUE self) {
- svn_io_dirent_t *arg1 = (svn_io_dirent_t *) 0 ;
+ struct svn_io_dirent_t *arg1 = (struct svn_io_dirent_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -23869,9 +26492,9 @@ _wrap_svn_io_dirent_t_special_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_io_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_io_dirent_t *","special", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_io_dirent_t *","special", 1, self ));
}
- arg1 = (svn_io_dirent_t *)(argp1);
+ arg1 = (struct svn_io_dirent_t *)(argp1);
result = (svn_boolean_t) ((arg1)->special);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -23899,13 +26522,13 @@ _wrap_svn_io_dirent_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_io_dirent_t(int argc, VALUE *argv, VALUE self) {
- svn_io_dirent_t *result = 0 ;
+ struct svn_io_dirent_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_io_dirent_t *)calloc(1, sizeof(svn_io_dirent_t));
+ result = (struct svn_io_dirent_t *)calloc(1, sizeof(struct svn_io_dirent_t));
DATA_PTR(self) = result;
@@ -23918,7 +26541,7 @@ fail:
SWIGINTERN void
-free_svn_io_dirent_t(svn_io_dirent_t *arg1) {
+free_svn_io_dirent_t(struct svn_io_dirent_t *arg1) {
free((char *) arg1);
}
@@ -24488,6 +27111,110 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_io_filesizes_three_different_p(int argc, VALUE *argv, VALUE self) {
+ svn_boolean_t *arg1 = (svn_boolean_t *) 0 ;
+ svn_boolean_t *arg2 = (svn_boolean_t *) 0 ;
+ svn_boolean_t *arg3 = (svn_boolean_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ char *arg5 = (char *) 0 ;
+ char *arg6 = (char *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_boolean_t temp1 ;
+ svn_boolean_t temp2 ;
+ svn_boolean_t temp3 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ int res5 ;
+ char *buf5 = 0 ;
+ int alloc5 = 0 ;
+ int res6 ;
+ char *buf6 = 0 ;
+ int alloc6 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg7);
+ _global_pool = arg7;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ arg2 = &temp2;
+ arg3 = &temp3;
+ if ((argc < 3) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
+ }
+ res4 = SWIG_AsCharPtrAndSize(argv[0], &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "char const *","svn_io_filesizes_three_different_p", 4, argv[0] ));
+ }
+ arg4 = (char *)(buf4);
+ res5 = SWIG_AsCharPtrAndSize(argv[1], &buf5, NULL, &alloc5);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), Ruby_Format_TypeError( "", "char const *","svn_io_filesizes_three_different_p", 5, argv[1] ));
+ }
+ arg5 = (char *)(buf5);
+ res6 = SWIG_AsCharPtrAndSize(argv[2], &buf6, NULL, &alloc6);
+ if (!SWIG_IsOK(res6)) {
+ SWIG_exception_fail(SWIG_ArgError(res6), Ruby_Format_TypeError( "", "char const *","svn_io_filesizes_three_different_p", 6, argv[2] ));
+ }
+ arg6 = (char *)(buf6);
+ if (argc > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_io_filesizes_three_different_p(arg1,arg2,arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,arg7);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, *arg1 ? Qtrue : Qfalse);
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, *arg2 ? Qtrue : Qfalse);
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, *arg3 ? Qtrue : Qfalse);
+ }
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_io_file_checksum2(int argc, VALUE *argv, VALUE self) {
svn_checksum_t **arg1 = (svn_checksum_t **) 0 ;
char *arg2 = (char *) 0 ;
@@ -24499,8 +27226,8 @@ _wrap_svn_io_file_checksum2(int argc, VALUE *argv, VALUE self) {
int res2 ;
char *buf2 = 0 ;
int alloc2 = 0 ;
- void *argp3 ;
- int res3 = 0 ;
+ int val3 ;
+ int ecode3 = 0 ;
svn_error_t *result = 0 ;
VALUE vresult = Qnil;
@@ -24518,17 +27245,11 @@ _wrap_svn_io_file_checksum2(int argc, VALUE *argv, VALUE self) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","svn_io_file_checksum2", 2, argv[0] ));
}
arg2 = (char *)(buf2);
- {
- res3 = SWIG_ConvertPtr(argv[1], &argp3, SWIGTYPE_p_svn_checksum_kind_t, 0 );
- if (!SWIG_IsOK(res3)) {
- SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "svn_checksum_kind_t","svn_io_file_checksum2", 3, argv[1] ));
- }
- if (!argp3) {
- SWIG_exception_fail(SWIG_ValueError, Ruby_Format_TypeError("invalid null reference ", "svn_checksum_kind_t","svn_io_file_checksum2", 3, argv[1]));
- } else {
- arg3 = *((svn_checksum_kind_t *)(argp3));
- }
- }
+ ecode3 = SWIG_AsVal_int(argv[1], &val3);
+ if (!SWIG_IsOK(ecode3)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode3), Ruby_Format_TypeError( "", "svn_checksum_kind_t","svn_io_file_checksum2", 3, argv[1] ));
+ }
+ arg3 = (svn_checksum_kind_t)(val3);
if (argc > 2) {
}
@@ -24730,6 +27451,228 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_io_files_contents_three_same_p(int argc, VALUE *argv, VALUE self) {
+ svn_boolean_t *arg1 = (svn_boolean_t *) 0 ;
+ svn_boolean_t *arg2 = (svn_boolean_t *) 0 ;
+ svn_boolean_t *arg3 = (svn_boolean_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ char *arg5 = (char *) 0 ;
+ char *arg6 = (char *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_boolean_t temp1 ;
+ svn_boolean_t temp2 ;
+ svn_boolean_t temp3 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ int res5 ;
+ char *buf5 = 0 ;
+ int alloc5 = 0 ;
+ int res6 ;
+ char *buf6 = 0 ;
+ int alloc6 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg7);
+ _global_pool = arg7;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ arg2 = &temp2;
+ arg3 = &temp3;
+ if ((argc < 3) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
+ }
+ res4 = SWIG_AsCharPtrAndSize(argv[0], &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "char const *","svn_io_files_contents_three_same_p", 4, argv[0] ));
+ }
+ arg4 = (char *)(buf4);
+ res5 = SWIG_AsCharPtrAndSize(argv[1], &buf5, NULL, &alloc5);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), Ruby_Format_TypeError( "", "char const *","svn_io_files_contents_three_same_p", 5, argv[1] ));
+ }
+ arg5 = (char *)(buf5);
+ res6 = SWIG_AsCharPtrAndSize(argv[2], &buf6, NULL, &alloc6);
+ if (!SWIG_IsOK(res6)) {
+ SWIG_exception_fail(SWIG_ArgError(res6), Ruby_Format_TypeError( "", "char const *","svn_io_files_contents_three_same_p", 6, argv[2] ));
+ }
+ arg6 = (char *)(buf6);
+ if (argc > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_io_files_contents_three_same_p(arg1,arg2,arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,arg7);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, *arg1 ? Qtrue : Qfalse);
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, *arg2 ? Qtrue : Qfalse);
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, *arg3 ? Qtrue : Qfalse);
+ }
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_io_lock_open_file(int argc, VALUE *argv, VALUE self) {
+ apr_file_t *arg1 = (apr_file_t *) 0 ;
+ svn_boolean_t arg2 ;
+ svn_boolean_t arg3 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg4);
+ _global_pool = arg4;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 3) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
+ }
+ {
+ arg1 = svn_swig_rb_make_file(argv[0], _global_pool);
+ }
+ arg2 = RTEST(argv[1]);
+ arg3 = RTEST(argv[2]);
+ if (argc > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_io_lock_open_file(arg1,arg2,arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_io_unlock_open_file(int argc, VALUE *argv, VALUE self) {
+ apr_file_t *arg1 = (apr_file_t *) 0 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg2);
+ _global_pool = arg2;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 1) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ {
+ arg1 = svn_swig_rb_make_file(argv[0], _global_pool);
+ }
+ if (argc > 1) {
+
+ }
+ {
+ result = (svn_error_t *)svn_io_unlock_open_file(arg1,arg2);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_stream_set_skip(int argc, VALUE *argv, VALUE self) {
svn_stream_t *arg1 = (svn_stream_t *) 0 ;
svn_stream_skip_fn_t arg2 = (svn_stream_skip_fn_t) 0 ;
@@ -25602,6 +28545,52 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_stream_buffered(int argc, VALUE *argv, VALUE self) {
+ apr_pool_t *arg1 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_stream_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg1);
+ _global_pool = arg1;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 0) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ if (argc > 0) {
+
+ }
+ {
+ result = (svn_stream_t *)svn_stream_buffered(arg1);
+
+
+
+ }
+ vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_stream_t, 0 | 0 );
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_stream_compressed(int argc, VALUE *argv, VALUE self) {
svn_stream_t *arg1 = (svn_stream_t *) 0 ;
apr_pool_t *arg2 = (apr_pool_t *) 0 ;
@@ -25663,8 +28652,8 @@ _wrap_svn_stream_checksummed2(int argc, VALUE *argv, VALUE self) {
apr_pool_t *_global_pool ;
svn_checksum_t *temp2 ;
svn_checksum_t *temp3 ;
- void *argp4 ;
- int res4 = 0 ;
+ int val4 ;
+ int ecode4 = 0 ;
svn_stream_t *result = 0 ;
VALUE vresult = Qnil;
@@ -25681,17 +28670,11 @@ _wrap_svn_stream_checksummed2(int argc, VALUE *argv, VALUE self) {
{
arg1 = svn_swig_rb_make_stream(argv[0]);
}
- {
- res4 = SWIG_ConvertPtr(argv[1], &argp4, SWIGTYPE_p_svn_checksum_kind_t, 0 );
- if (!SWIG_IsOK(res4)) {
- SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "svn_checksum_kind_t","svn_stream_checksummed2", 4, argv[1] ));
- }
- if (!argp4) {
- SWIG_exception_fail(SWIG_ValueError, Ruby_Format_TypeError("invalid null reference ", "svn_checksum_kind_t","svn_stream_checksummed2", 4, argv[1]));
- } else {
- arg4 = *((svn_checksum_kind_t *)(argp4));
- }
- }
+ ecode4 = SWIG_AsVal_int(argv[1], &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), Ruby_Format_TypeError( "", "svn_checksum_kind_t","svn_stream_checksummed2", 4, argv[1] ));
+ }
+ arg4 = (svn_checksum_kind_t)(val4);
arg5 = RTEST(argv[2]);
if (argc > 3) {
@@ -26121,6 +29104,49 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_stream_puts(int argc, VALUE *argv, VALUE self) {
+ svn_stream_t *arg1 = (svn_stream_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 2) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
+ }
+ {
+ arg1 = svn_swig_rb_make_stream(argv[0]);
+ }
+ res2 = SWIG_AsCharPtrAndSize(argv[1], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","svn_stream_puts", 2, argv[1] ));
+ }
+ arg2 = (char *)(buf2);
+ {
+ result = (svn_error_t *)svn_stream_puts(arg1,(char const *)arg2);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_stream_readline(int argc, VALUE *argv, VALUE self) {
svn_stream_t *arg1 = (svn_stream_t *) 0 ;
svn_stringbuf_t **arg2 = (svn_stringbuf_t **) 0 ;
@@ -26630,6 +29656,67 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_stream_lazyopen_create(int argc, VALUE *argv, VALUE self) {
+ svn_stream_lazyopen_func_t arg1 = (svn_stream_lazyopen_func_t) 0 ;
+ void *arg2 = (void *) 0 ;
+ svn_boolean_t arg3 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int res2 ;
+ svn_stream_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg4);
+ _global_pool = arg4;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 3) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg1), SWIGTYPE_p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_stream_lazyopen_func_t","svn_stream_lazyopen_create", 1, argv[0] ));
+ }
+ }
+ res2 = SWIG_ConvertPtr(argv[1],SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "void *","svn_stream_lazyopen_create", 2, argv[1] ));
+ }
+ arg3 = RTEST(argv[2]);
+ if (argc > 3) {
+
+ }
+ {
+ result = (svn_stream_t *)svn_stream_lazyopen_create(arg1,arg2,arg3,arg4);
+
+
+
+ }
+ vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_stream_t, 0 | 0 );
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_stringbuf_from_file2(int argc, VALUE *argv, VALUE self) {
svn_stringbuf_t **arg1 = (svn_stringbuf_t **) 0 ;
char *arg2 = (char *) 0 ;
@@ -27084,6 +30171,109 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_io_stat_dirent2(int argc, VALUE *argv, VALUE self) {
+ svn_io_dirent2_t **arg1 = (svn_io_dirent2_t **) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_io_dirent2_t *temp1 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg5);
+ _global_pool = arg5;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg6);
+ _global_pool = arg6;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ if ((argc < 3) || (argc > 5)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
+ }
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","svn_io_stat_dirent2", 2, argv[0] ));
+ }
+ arg2 = (char *)(buf2);
+ arg3 = RTEST(argv[1]);
+ arg4 = RTEST(argv[2]);
+ if (argc > 3) {
+
+ }
+ if (argc > 4) {
+
+ }
+ {
+ result = (svn_error_t *)svn_io_stat_dirent2((struct svn_io_dirent2_t const **)arg1,(char const *)arg2,arg3,arg4,arg5,arg6);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ /* FIXME: Missing argout typemap: svn_io_stat_dirent2 arg 1 (svn_io_dirent2_t const **) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_io_stat_dirent2 is not implemented yet");
+
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_io_stat_dirent(int argc, VALUE *argv, VALUE self) {
svn_io_dirent2_t **arg1 = (svn_io_dirent2_t **) 0 ;
char *arg2 = (char *) 0 ;
@@ -27270,6 +30460,125 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_io_start_cmd3(int argc, VALUE *argv, VALUE self) {
+ apr_proc_t *arg1 = (apr_proc_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ char **arg4 = (char **) 0 ;
+ char **arg5 = (char **) 0 ;
+ svn_boolean_t arg6 ;
+ svn_boolean_t arg7 ;
+ apr_file_t *arg8 = (apr_file_t *) 0 ;
+ svn_boolean_t arg9 ;
+ apr_file_t *arg10 = (apr_file_t *) 0 ;
+ svn_boolean_t arg11 ;
+ apr_file_t *arg12 = (apr_file_t *) 0 ;
+ apr_pool_t *arg13 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ void *argp4 = 0 ;
+ int res4 = 0 ;
+ void *argp5 = 0 ;
+ int res5 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg13);
+ _global_pool = arg13;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 12) || (argc > 13)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 12)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_apr_proc_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "apr_proc_t *","svn_io_start_cmd3", 1, argv[0] ));
+ }
+ arg1 = (apr_proc_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[1], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","svn_io_start_cmd3", 2, argv[1] ));
+ }
+ arg2 = (char *)(buf2);
+ res3 = SWIG_AsCharPtrAndSize(argv[2], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","svn_io_start_cmd3", 3, argv[2] ));
+ }
+ arg3 = (char *)(buf3);
+ res4 = SWIG_ConvertPtr(argv[3], &argp4,SWIGTYPE_p_p_char, 0 | 0 );
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "char const *const *","svn_io_start_cmd3", 4, argv[3] ));
+ }
+ arg4 = (char **)(argp4);
+ res5 = SWIG_ConvertPtr(argv[4], &argp5,SWIGTYPE_p_p_char, 0 | 0 );
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), Ruby_Format_TypeError( "", "char const *const *","svn_io_start_cmd3", 5, argv[4] ));
+ }
+ arg5 = (char **)(argp5);
+ arg6 = RTEST(argv[5]);
+ arg7 = RTEST(argv[6]);
+ {
+ arg8 = svn_swig_rb_make_file(argv[7], _global_pool);
+ }
+ arg9 = RTEST(argv[8]);
+ {
+ arg10 = svn_swig_rb_make_file(argv[9], _global_pool);
+ }
+ arg11 = RTEST(argv[10]);
+ {
+ arg12 = svn_swig_rb_make_file(argv[11], _global_pool);
+ }
+ if (argc > 12) {
+
+ }
+ {
+ result = (svn_error_t *)svn_io_start_cmd3(arg1,(char const *)arg2,(char const *)arg3,(char const *const *)arg4,(char const *const *)arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12,arg13);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_io_start_cmd2(int argc, VALUE *argv, VALUE self) {
apr_proc_t *arg1 = (apr_proc_t *) 0 ;
char *arg2 = (char *) 0 ;
@@ -28366,6 +31675,120 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_io_file_readline(int argc, VALUE *argv, VALUE self) {
+ apr_file_t *arg1 = (apr_file_t *) 0 ;
+ svn_stringbuf_t **arg2 = (svn_stringbuf_t **) 0 ;
+ char **arg3 = (char **) 0 ;
+ svn_boolean_t *arg4 = (svn_boolean_t *) 0 ;
+ apr_size_t arg5 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_stringbuf_t *temp2 ;
+ char *temp3 ;
+ svn_boolean_t temp4 ;
+ unsigned long val5 ;
+ int ecode5 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg6);
+ _global_pool = arg6;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg7);
+ _global_pool = arg7;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg2 = &temp2;
+ arg3 = &temp3;
+ arg4 = &temp4;
+ if ((argc < 2) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
+ }
+ {
+ arg1 = svn_swig_rb_make_file(argv[0], _global_pool);
+ }
+ ecode5 = SWIG_AsVal_unsigned_SS_long(argv[1], &val5);
+ if (!SWIG_IsOK(ecode5)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode5), Ruby_Format_TypeError( "", "apr_size_t","svn_io_file_readline", 5, argv[1] ));
+ }
+ arg5 = (apr_size_t)(val5);
+ if (argc > 2) {
+
+ }
+ if (argc > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_io_file_readline(arg1,arg2,(char const **)arg3,arg4,arg5,arg6,arg7);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ if (*arg2) {
+ vresult = SWIG_Ruby_AppendOutput(vresult, rb_str_new((*arg2)->data, (*arg2)->len));
+ } else {
+ vresult = SWIG_Ruby_AppendOutput(vresult, Qnil);
+ }
+ }
+ {
+ if (*arg3) {
+ vresult = SWIG_Ruby_AppendOutput(vresult, rb_str_new2(*arg3));
+ } else {
+ vresult = SWIG_Ruby_AppendOutput(vresult, Qnil);
+ }
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, *arg4 ? Qtrue : Qfalse);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_read_invoke_fn(int argc, VALUE *argv, VALUE self) {
svn_read_fn_t arg1 = (svn_read_fn_t) 0 ;
void *arg2 = (void *) 0 ;
@@ -28688,6 +32111,101 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_stream_invoke_lazyopen_func(int argc, VALUE *argv, VALUE self) {
+ svn_stream_lazyopen_func_t arg1 = (svn_stream_lazyopen_func_t) 0 ;
+ svn_stream_t **arg2 = (svn_stream_t **) 0 ;
+ void *arg3 = (void *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_stream_t *temp2 ;
+ int res3 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg4);
+ _global_pool = arg4;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg5);
+ _global_pool = arg5;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg2 = &temp2;
+ if ((argc < 2) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg1), SWIGTYPE_p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_stream_lazyopen_func_t","svn_stream_invoke_lazyopen_func", 1, argv[0] ));
+ }
+ }
+ res3 = SWIG_ConvertPtr(argv[1],SWIG_as_voidptrptr(&arg3), 0, 0);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "void *","svn_stream_invoke_lazyopen_func", 3, argv[1] ));
+ }
+ if (argc > 2) {
+
+ }
+ if (argc > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_stream_invoke_lazyopen_func(arg1,arg2,arg3,arg4,arg5);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg2, SWIGTYPE_p_svn_stream_t, 0));
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_io_invoke_walk_func(int argc, VALUE *argv, VALUE self) {
svn_io_walk_func_t arg1 = (svn_io_walk_func_t) 0 ;
void *arg2 = (void *) 0 ;
@@ -28772,6 +32290,1219 @@ fail:
}
+static swig_class SwigClassSvn_checksum_t;
+
+SWIGINTERN VALUE
+_wrap_svn_checksum_t_digest_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_checksum_t *arg1 = (struct svn_checksum_t *) 0 ;
+ unsigned char *arg2 = (unsigned char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_checksum_t *","digest", 1, self ));
+ }
+ arg1 = (struct svn_checksum_t *)(argp1);
+ {
+ if (NIL_P(argv[0])) {
+ arg2 = NULL;
+ } else if (RSTRING_LEN(argv[0]) != APR_MD5_DIGESTSIZE) {
+ rb_raise(rb_eArgError, "digest size (%d) must be %d",
+ RSTRING_LEN(argv[0]), APR_MD5_DIGESTSIZE);
+ } else {
+ arg2 = (unsigned char *)StringValuePtr(argv[0]);
+ }
+ }
+ if (arg1) (arg1)->digest = (unsigned char const *)arg2;
+
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_checksum_t_digest_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_checksum_t *arg1 = (struct svn_checksum_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ unsigned char *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_checksum_t *","digest", 1, self ));
+ }
+ arg1 = (struct svn_checksum_t *)(argp1);
+ result = (unsigned char *) ((arg1)->digest);
+ vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_unsigned_char, 0 | 0 );
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_checksum_t_kind_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_checksum_t *arg1 = (struct svn_checksum_t *) 0 ;
+ svn_checksum_kind_t arg2 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int val2 ;
+ int ecode2 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_checksum_t *","kind", 1, self ));
+ }
+ arg1 = (struct svn_checksum_t *)(argp1);
+ ecode2 = SWIG_AsVal_int(argv[0], &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_checksum_kind_t","kind", 2, argv[0] ));
+ }
+ arg2 = (svn_checksum_kind_t)(val2);
+ if (arg1) (arg1)->kind = arg2;
+ return Qnil;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_checksum_t_kind_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_checksum_t *arg1 = (struct svn_checksum_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_checksum_kind_t result;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_checksum_t *","kind", 1, self ));
+ }
+ arg1 = (struct svn_checksum_t *)(argp1);
+ result = (svn_checksum_kind_t) ((arg1)->kind);
+ vresult = SWIG_From_int((int)(result));
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+#ifdef HAVE_RB_DEFINE_ALLOC_FUNC
+SWIGINTERN VALUE
+_wrap_svn_checksum_t_allocate(VALUE self) {
+#else
+ SWIGINTERN VALUE
+ _wrap_svn_checksum_t_allocate(int argc, VALUE *argv, VALUE self) {
+#endif
+
+
+ VALUE vresult = SWIG_NewClassInstance(self, SWIGTYPE_p_svn_checksum_t);
+#ifndef HAVE_RB_DEFINE_ALLOC_FUNC
+ rb_obj_call_init(vresult, argc, argv);
+#endif
+ return vresult;
+ }
+
+
+SWIGINTERN VALUE
+_wrap_new_svn_checksum_t(int argc, VALUE *argv, VALUE self) {
+ struct svn_checksum_t *result = 0 ;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ {
+ result = (struct svn_checksum_t *)calloc(1, sizeof(struct svn_checksum_t));
+ DATA_PTR(self) = result;
+
+
+
+ }
+ return self;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN void
+free_svn_checksum_t(struct svn_checksum_t *arg1) {
+ free((char *) arg1);
+}
+
+SWIGINTERN VALUE
+_wrap_svn_checksum_create(int argc, VALUE *argv, VALUE self) {
+ svn_checksum_kind_t arg1 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int val1 ;
+ int ecode1 = 0 ;
+ svn_checksum_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg2);
+ _global_pool = arg2;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 1) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ ecode1 = SWIG_AsVal_int(argv[0], &val1);
+ if (!SWIG_IsOK(ecode1)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode1), Ruby_Format_TypeError( "", "svn_checksum_kind_t","svn_checksum_create", 1, argv[0] ));
+ }
+ arg1 = (svn_checksum_kind_t)(val1);
+ if (argc > 1) {
+
+ }
+ {
+ result = (svn_checksum_t *)svn_checksum_create(arg1,arg2);
+
+
+
+ }
+ vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_checksum_clear(int argc, VALUE *argv, VALUE self) {
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_checksum_t *","svn_checksum_clear", 1, argv[0] ));
+ }
+ arg1 = (svn_checksum_t *)(argp1);
+ {
+ result = (svn_error_t *)svn_checksum_clear(arg1);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_checksum_match(int argc, VALUE *argv, VALUE self) {
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ svn_checksum_t *arg2 = (svn_checksum_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ svn_boolean_t result;
+ VALUE vresult = Qnil;
+
+ if ((argc < 2) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_checksum_t const *","svn_checksum_match", 1, argv[0] ));
+ }
+ arg1 = (svn_checksum_t *)(argp1);
+ res2 = SWIG_ConvertPtr(argv[1], &argp2,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_checksum_t const *","svn_checksum_match", 2, argv[1] ));
+ }
+ arg2 = (svn_checksum_t *)(argp2);
+ {
+ result = (svn_boolean_t)svn_checksum_match((struct svn_checksum_t const *)arg1,(struct svn_checksum_t const *)arg2);
+
+
+
+ }
+ vresult = result ? Qtrue : Qfalse;
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_checksum_dup(int argc, VALUE *argv, VALUE self) {
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_checksum_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg2);
+ _global_pool = arg2;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 1) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_checksum_t const *","svn_checksum_dup", 1, argv[0] ));
+ }
+ arg1 = (svn_checksum_t *)(argp1);
+ if (argc > 1) {
+
+ }
+ {
+ result = (svn_checksum_t *)svn_checksum_dup((struct svn_checksum_t const *)arg1,arg2);
+
+
+
+ }
+ vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_checksum_to_cstring_display(int argc, VALUE *argv, VALUE self) {
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ char *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg2);
+ _global_pool = arg2;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 1) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_checksum_t const *","svn_checksum_to_cstring_display", 1, argv[0] ));
+ }
+ arg1 = (svn_checksum_t *)(argp1);
+ if (argc > 1) {
+
+ }
+ {
+ result = (char *)svn_checksum_to_cstring_display((struct svn_checksum_t const *)arg1,arg2);
+
+
+
+ }
+ {
+ if (result) {
+ vresult = rb_str_new2(result);
+ } else {
+ vresult = Qnil;
+ }
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_checksum_to_cstring(int argc, VALUE *argv, VALUE self) {
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ char *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg2);
+ _global_pool = arg2;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 1) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_checksum_t const *","svn_checksum_to_cstring", 1, argv[0] ));
+ }
+ arg1 = (svn_checksum_t *)(argp1);
+ if (argc > 1) {
+
+ }
+ {
+ result = (char *)svn_checksum_to_cstring((struct svn_checksum_t const *)arg1,arg2);
+
+
+
+ }
+ {
+ if (result) {
+ vresult = rb_str_new2(result);
+ } else {
+ vresult = Qnil;
+ }
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_checksum_serialize(int argc, VALUE *argv, VALUE self) {
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ char *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg2);
+ _global_pool = arg2;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg3);
+ _global_pool = arg3;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 1) || (argc > 3)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_checksum_t const *","svn_checksum_serialize", 1, argv[0] ));
+ }
+ arg1 = (svn_checksum_t *)(argp1);
+ if (argc > 1) {
+
+ }
+ if (argc > 2) {
+
+ }
+ {
+ result = (char *)svn_checksum_serialize((struct svn_checksum_t const *)arg1,arg2,arg3);
+
+
+
+ }
+ {
+ if (result) {
+ vresult = rb_str_new2(result);
+ } else {
+ vresult = Qnil;
+ }
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_checksum_deserialize(int argc, VALUE *argv, VALUE self) {
+ svn_checksum_t **arg1 = (svn_checksum_t **) 0 ;
+ char *arg2 = (char *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_checksum_t *temp1 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg3);
+ _global_pool = arg3;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg4);
+ _global_pool = arg4;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ if ((argc < 1) || (argc > 3)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","svn_checksum_deserialize", 2, argv[0] ));
+ }
+ arg2 = (char *)(buf2);
+ if (argc > 1) {
+
+ }
+ if (argc > 2) {
+
+ }
+ {
+ result = (svn_error_t *)svn_checksum_deserialize((struct svn_checksum_t const **)arg1,(char const *)arg2,arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ /* FIXME: Missing argout typemap: svn_checksum_deserialize arg 1 (svn_checksum_t const **) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_checksum_deserialize is not implemented yet");
+
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_checksum_parse_hex(int argc, VALUE *argv, VALUE self) {
+ svn_checksum_t **arg1 = (svn_checksum_t **) 0 ;
+ svn_checksum_kind_t arg2 ;
+ char *arg3 = (char *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_checksum_t *temp1 ;
+ int val2 ;
+ int ecode2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg4);
+ _global_pool = arg4;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ if ((argc < 2) || (argc > 3)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
+ }
+ ecode2 = SWIG_AsVal_int(argv[0], &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_checksum_kind_t","svn_checksum_parse_hex", 2, argv[0] ));
+ }
+ arg2 = (svn_checksum_kind_t)(val2);
+ res3 = SWIG_AsCharPtrAndSize(argv[1], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","svn_checksum_parse_hex", 3, argv[1] ));
+ }
+ arg3 = (char *)(buf3);
+ if (argc > 2) {
+
+ }
+ {
+ result = (svn_error_t *)svn_checksum_parse_hex(arg1,arg2,(char const *)arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ /* FIXME: Missing argout typemap: svn_checksum_parse_hex arg 1 (svn_checksum_t **) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_checksum_parse_hex is not implemented yet");
+
+ }
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_checksum(int argc, VALUE *argv, VALUE self) {
+ svn_checksum_t **arg1 = (svn_checksum_t **) 0 ;
+ svn_checksum_kind_t arg2 ;
+ void *arg3 = (void *) 0 ;
+ apr_size_t arg4 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_checksum_t *temp1 ;
+ int val2 ;
+ int ecode2 = 0 ;
+ int res3 ;
+ unsigned long val4 ;
+ int ecode4 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg5);
+ _global_pool = arg5;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ if ((argc < 3) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
+ }
+ ecode2 = SWIG_AsVal_int(argv[0], &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_checksum_kind_t","svn_checksum", 2, argv[0] ));
+ }
+ arg2 = (svn_checksum_kind_t)(val2);
+ res3 = SWIG_ConvertPtr(argv[1],SWIG_as_voidptrptr(&arg3), 0, 0);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "void const *","svn_checksum", 3, argv[1] ));
+ }
+ ecode4 = SWIG_AsVal_unsigned_SS_long(argv[2], &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), Ruby_Format_TypeError( "", "apr_size_t","svn_checksum", 4, argv[2] ));
+ }
+ arg4 = (apr_size_t)(val4);
+ if (argc > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_checksum(arg1,arg2,(void const *)arg3,arg4,arg5);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ /* FIXME: Missing argout typemap: svn_checksum arg 1 (svn_checksum_t **) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_checksum is not implemented yet");
+
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_checksum_empty_checksum(int argc, VALUE *argv, VALUE self) {
+ svn_checksum_kind_t arg1 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int val1 ;
+ int ecode1 = 0 ;
+ svn_checksum_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg2);
+ _global_pool = arg2;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 1) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ ecode1 = SWIG_AsVal_int(argv[0], &val1);
+ if (!SWIG_IsOK(ecode1)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode1), Ruby_Format_TypeError( "", "svn_checksum_kind_t","svn_checksum_empty_checksum", 1, argv[0] ));
+ }
+ arg1 = (svn_checksum_kind_t)(val1);
+ if (argc > 1) {
+
+ }
+ {
+ result = (svn_checksum_t *)svn_checksum_empty_checksum(arg1,arg2);
+
+
+
+ }
+ vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_checksum_ctx_create(int argc, VALUE *argv, VALUE self) {
+ svn_checksum_kind_t arg1 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int val1 ;
+ int ecode1 = 0 ;
+ svn_checksum_ctx_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg2);
+ _global_pool = arg2;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 1) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ ecode1 = SWIG_AsVal_int(argv[0], &val1);
+ if (!SWIG_IsOK(ecode1)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode1), Ruby_Format_TypeError( "", "svn_checksum_kind_t","svn_checksum_ctx_create", 1, argv[0] ));
+ }
+ arg1 = (svn_checksum_kind_t)(val1);
+ if (argc > 1) {
+
+ }
+ {
+ result = (svn_checksum_ctx_t *)svn_checksum_ctx_create(arg1,arg2);
+
+
+
+ }
+ vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_checksum_ctx_t, 0 | 0 );
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_checksum_update(int argc, VALUE *argv, VALUE self) {
+ svn_checksum_ctx_t *arg1 = (svn_checksum_ctx_t *) 0 ;
+ void *arg2 = (void *) 0 ;
+ apr_size_t arg3 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ unsigned long val3 ;
+ int ecode3 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 3) || (argc > 3)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_checksum_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_checksum_ctx_t *","svn_checksum_update", 1, argv[0] ));
+ }
+ arg1 = (svn_checksum_ctx_t *)(argp1);
+ res2 = SWIG_ConvertPtr(argv[1],SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "void const *","svn_checksum_update", 2, argv[1] ));
+ }
+ ecode3 = SWIG_AsVal_unsigned_SS_long(argv[2], &val3);
+ if (!SWIG_IsOK(ecode3)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode3), Ruby_Format_TypeError( "", "apr_size_t","svn_checksum_update", 3, argv[2] ));
+ }
+ arg3 = (apr_size_t)(val3);
+ {
+ result = (svn_error_t *)svn_checksum_update(arg1,(void const *)arg2,arg3);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_checksum_final(int argc, VALUE *argv, VALUE self) {
+ svn_checksum_t **arg1 = (svn_checksum_t **) 0 ;
+ svn_checksum_ctx_t *arg2 = (svn_checksum_ctx_t *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_checksum_t *temp1 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg3);
+ _global_pool = arg3;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ if ((argc < 1) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_checksum_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_checksum_ctx_t const *","svn_checksum_final", 2, argv[0] ));
+ }
+ arg2 = (svn_checksum_ctx_t *)(argp2);
+ if (argc > 1) {
+
+ }
+ {
+ result = (svn_error_t *)svn_checksum_final(arg1,(struct svn_checksum_ctx_t const *)arg2,arg3);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ /* FIXME: Missing argout typemap: svn_checksum_final arg 1 (svn_checksum_t **) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_checksum_final is not implemented yet");
+
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_checksum_size(int argc, VALUE *argv, VALUE self) {
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ apr_size_t result;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_checksum_t const *","svn_checksum_size", 1, argv[0] ));
+ }
+ arg1 = (svn_checksum_t *)(argp1);
+ {
+ result = svn_checksum_size((struct svn_checksum_t const *)arg1);
+
+
+
+ }
+ vresult = SWIG_From_unsigned_SS_long((unsigned long)(result));
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_checksum_is_empty_checksum(int argc, VALUE *argv, VALUE self) {
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_boolean_t result;
+ VALUE vresult = Qnil;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_checksum_t *","svn_checksum_is_empty_checksum", 1, argv[0] ));
+ }
+ arg1 = (svn_checksum_t *)(argp1);
+ {
+ result = (svn_boolean_t)svn_checksum_is_empty_checksum(arg1);
+
+
+
+ }
+ vresult = result ? Qtrue : Qfalse;
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_checksum_mismatch_err(int argc, VALUE *argv, VALUE self) {
+ svn_checksum_t *arg1 = (svn_checksum_t *) 0 ;
+ svn_checksum_t *arg2 = (svn_checksum_t *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ void *arg5 = 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg3);
+ _global_pool = arg3;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if (argc < 2) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_checksum_t const *","svn_checksum_mismatch_err", 1, argv[0] ));
+ }
+ arg1 = (svn_checksum_t *)(argp1);
+ res2 = SWIG_ConvertPtr(argv[1], &argp2,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_checksum_t const *","svn_checksum_mismatch_err", 2, argv[1] ));
+ }
+ arg2 = (svn_checksum_t *)(argp2);
+ if (argc > 2) {
+
+ }
+ if (argc > 3) {
+ res4 = SWIG_AsCharPtrAndSize(argv[3], &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "char const *","svn_checksum_mismatch_err", 4, argv[3] ));
+ }
+ arg4 = (char *)(buf4);
+ }
+ {
+ result = (svn_error_t *)svn_checksum_mismatch_err((struct svn_checksum_t const *)arg1,(struct svn_checksum_t const *)arg2,arg3,(char const *)arg4,arg5);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_auth_set_gnome_keyring_unlock_prompt_func(int argc, VALUE *argv, VALUE self) {
+ svn_auth_baton_t *arg1 = (svn_auth_baton_t *) 0 ;
+ svn_auth_gnome_keyring_unlock_prompt_func_t arg2 = (svn_auth_gnome_keyring_unlock_prompt_func_t) 0 ;
+ void *arg3 = (void *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+
+ if ((argc < 2) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_auth_baton_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_auth_baton_t *","svn_auth_set_gnome_keyring_unlock_prompt_func", 1, argv[0] ));
+ }
+ arg1 = (svn_auth_baton_t *)(argp1);
+ {
+ arg2 = svn_swig_rb_auth_gnome_keyring_unlock_prompt_func;
+ arg3 = (void *)svn_swig_rb_make_baton(argv[1], _global_svn_swig_rb_pool);
+ }
+ {
+ svn_auth_set_gnome_keyring_unlock_prompt_func(arg1,arg2,arg3);
+
+
+
+ }
+ return Qnil;
+fail:
+ return Qnil;
+}
+
+
SWIGINTERN VALUE
_wrap_svn_md5_empty_string_digest(int argc, VALUE *argv, VALUE self) {
unsigned char *result = 0 ;
@@ -28940,7 +33671,7 @@ fail:
}
-swig_class SwigClassApr_pool_wrapper_t;
+static swig_class SwigClassApr_pool_wrapper_t;
SWIGINTERN VALUE
_wrap_apr_pool_wrapper_t_destroy(int argc, VALUE *argv, VALUE self) {
@@ -29102,7 +33833,7 @@ fail:
}
-swig_class SwigClassSvn_stream_t;
+static swig_class SwigClassSvn_stream_t;
#ifdef HAVE_RB_DEFINE_ALLOC_FUNC
SWIGINTERN VALUE
@@ -29150,7 +33881,7 @@ free_svn_stream_t(struct svn_stream_t *arg1) {
delete_svn_stream_t(arg1);
}
-swig_class SwigClassSvn_auth_baton_t;
+static swig_class SwigClassSvn_auth_baton_t;
#ifdef HAVE_RB_DEFINE_ALLOC_FUNC
SWIGINTERN VALUE
@@ -29246,11 +33977,11 @@ fail:
}
-swig_class SwigClassSvn_diff_fns2_t;
+static swig_class SwigClassSvn_diff_fns2_t;
SWIGINTERN VALUE
_wrap_svn_diff_fns2_t_datasources_open_set(int argc, VALUE *argv, VALUE self) {
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_off_t *,apr_off_t *,svn_diff_datasource_e const *,apr_size_t) = (svn_error_t *(*)(void *,apr_off_t *,apr_off_t *,svn_diff_datasource_e const *,apr_size_t)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -29260,9 +33991,9 @@ _wrap_svn_diff_fns2_t_datasources_open_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_fns2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_fns2_t *","datasources_open", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_fns2_t *","datasources_open", 1, self ));
}
- arg1 = (svn_diff_fns2_t *)(argp1);
+ arg1 = (struct svn_diff_fns2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_apr_off_t_p_apr_off_t_p_q_const__svn_diff_datasource_e_apr_size_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -29278,7 +34009,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_fns2_t_datasources_open_get(int argc, VALUE *argv, VALUE self) {
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,apr_off_t *,apr_off_t *,svn_diff_datasource_e const *,apr_size_t) = 0 ;
@@ -29289,9 +34020,9 @@ _wrap_svn_diff_fns2_t_datasources_open_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_fns2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_fns2_t *","datasources_open", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_fns2_t *","datasources_open", 1, self ));
}
- arg1 = (svn_diff_fns2_t *)(argp1);
+ arg1 = (struct svn_diff_fns2_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_off_t *,apr_off_t *,svn_diff_datasource_e const *,apr_size_t)) ((arg1)->datasources_open);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_apr_off_t_p_apr_off_t_p_q_const__svn_diff_datasource_e_apr_size_t__p_svn_error_t);
return vresult;
@@ -29302,7 +34033,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_fns2_t_datasource_close_set(int argc, VALUE *argv, VALUE self) {
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_diff_datasource_e) = (svn_error_t *(*)(void *,svn_diff_datasource_e)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -29312,9 +34043,9 @@ _wrap_svn_diff_fns2_t_datasource_close_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_fns2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_fns2_t *","datasource_close", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_fns2_t *","datasource_close", 1, self ));
}
- arg1 = (svn_diff_fns2_t *)(argp1);
+ arg1 = (struct svn_diff_fns2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_svn_diff_datasource_e__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -29330,7 +34061,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_fns2_t_datasource_close_get(int argc, VALUE *argv, VALUE self) {
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,svn_diff_datasource_e) = 0 ;
@@ -29341,9 +34072,9 @@ _wrap_svn_diff_fns2_t_datasource_close_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_fns2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_fns2_t *","datasource_close", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_fns2_t *","datasource_close", 1, self ));
}
- arg1 = (svn_diff_fns2_t *)(argp1);
+ arg1 = (struct svn_diff_fns2_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_diff_datasource_e)) ((arg1)->datasource_close);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_svn_diff_datasource_e__p_svn_error_t);
return vresult;
@@ -29354,7 +34085,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_fns2_t_datasource_get_next_token_set(int argc, VALUE *argv, VALUE self) {
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
svn_error_t *(*arg2)(apr_uint32_t *,void **,void *,svn_diff_datasource_e) = (svn_error_t *(*)(apr_uint32_t *,void **,void *,svn_diff_datasource_e)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -29364,9 +34095,9 @@ _wrap_svn_diff_fns2_t_datasource_get_next_token_set(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_fns2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_fns2_t *","datasource_get_next_token", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_fns2_t *","datasource_get_next_token", 1, self ));
}
- arg1 = (svn_diff_fns2_t *)(argp1);
+ arg1 = (struct svn_diff_fns2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_apr_uint32_t_p_p_void_p_void_svn_diff_datasource_e__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -29382,7 +34113,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_fns2_t_datasource_get_next_token_get(int argc, VALUE *argv, VALUE self) {
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(apr_uint32_t *,void **,void *,svn_diff_datasource_e) = 0 ;
@@ -29393,9 +34124,9 @@ _wrap_svn_diff_fns2_t_datasource_get_next_token_get(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_fns2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_fns2_t *","datasource_get_next_token", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_fns2_t *","datasource_get_next_token", 1, self ));
}
- arg1 = (svn_diff_fns2_t *)(argp1);
+ arg1 = (struct svn_diff_fns2_t *)(argp1);
result = (svn_error_t *(*)(apr_uint32_t *,void **,void *,svn_diff_datasource_e)) ((arg1)->datasource_get_next_token);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_apr_uint32_t_p_p_void_p_void_svn_diff_datasource_e__p_svn_error_t);
return vresult;
@@ -29406,7 +34137,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_fns2_t_token_compare_set(int argc, VALUE *argv, VALUE self) {
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
svn_error_t *(*arg2)(void *,void *,void *,int *) = (svn_error_t *(*)(void *,void *,void *,int *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -29416,9 +34147,9 @@ _wrap_svn_diff_fns2_t_token_compare_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_fns2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_fns2_t *","token_compare", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_fns2_t *","token_compare", 1, self ));
}
- arg1 = (svn_diff_fns2_t *)(argp1);
+ arg1 = (struct svn_diff_fns2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_void_p_void_p_int__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -29434,7 +34165,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_fns2_t_token_compare_get(int argc, VALUE *argv, VALUE self) {
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,void *,void *,int *) = 0 ;
@@ -29445,9 +34176,9 @@ _wrap_svn_diff_fns2_t_token_compare_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_fns2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_fns2_t *","token_compare", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_fns2_t *","token_compare", 1, self ));
}
- arg1 = (svn_diff_fns2_t *)(argp1);
+ arg1 = (struct svn_diff_fns2_t *)(argp1);
result = (svn_error_t *(*)(void *,void *,void *,int *)) ((arg1)->token_compare);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_void_p_void_p_int__p_svn_error_t);
return vresult;
@@ -29458,7 +34189,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_fns2_t_token_discard_set(int argc, VALUE *argv, VALUE self) {
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
void (*arg2)(void *,void *) = (void (*)(void *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -29468,9 +34199,9 @@ _wrap_svn_diff_fns2_t_token_discard_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_fns2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_fns2_t *","token_discard", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_fns2_t *","token_discard", 1, self ));
}
- arg1 = (svn_diff_fns2_t *)(argp1);
+ arg1 = (struct svn_diff_fns2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_void__void);
if (!SWIG_IsOK(res)) {
@@ -29486,7 +34217,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_fns2_t_token_discard_get(int argc, VALUE *argv, VALUE self) {
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
void (*result)(void *,void *) = 0 ;
@@ -29497,9 +34228,9 @@ _wrap_svn_diff_fns2_t_token_discard_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_fns2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_fns2_t *","token_discard", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_fns2_t *","token_discard", 1, self ));
}
- arg1 = (svn_diff_fns2_t *)(argp1);
+ arg1 = (struct svn_diff_fns2_t *)(argp1);
result = (void (*)(void *,void *)) ((arg1)->token_discard);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_void__void);
return vresult;
@@ -29510,7 +34241,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_fns2_t_token_discard_all_set(int argc, VALUE *argv, VALUE self) {
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
void (*arg2)(void *) = (void (*)(void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -29520,9 +34251,9 @@ _wrap_svn_diff_fns2_t_token_discard_all_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_fns2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_fns2_t *","token_discard_all", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_fns2_t *","token_discard_all", 1, self ));
}
- arg1 = (svn_diff_fns2_t *)(argp1);
+ arg1 = (struct svn_diff_fns2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void__void);
if (!SWIG_IsOK(res)) {
@@ -29538,7 +34269,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_fns2_t_token_discard_all_get(int argc, VALUE *argv, VALUE self) {
- svn_diff_fns2_t *arg1 = (svn_diff_fns2_t *) 0 ;
+ struct svn_diff_fns2_t *arg1 = (struct svn_diff_fns2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
void (*result)(void *) = 0 ;
@@ -29549,9 +34280,9 @@ _wrap_svn_diff_fns2_t_token_discard_all_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_fns2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_fns2_t *","token_discard_all", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_fns2_t *","token_discard_all", 1, self ));
}
- arg1 = (svn_diff_fns2_t *)(argp1);
+ arg1 = (struct svn_diff_fns2_t *)(argp1);
result = (void (*)(void *)) ((arg1)->token_discard_all);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__void);
return vresult;
@@ -29579,13 +34310,13 @@ _wrap_svn_diff_fns2_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_diff_fns2_t(int argc, VALUE *argv, VALUE self) {
- svn_diff_fns2_t *result = 0 ;
+ struct svn_diff_fns2_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_diff_fns2_t *)calloc(1, sizeof(svn_diff_fns2_t));
+ result = (struct svn_diff_fns2_t *)calloc(1, sizeof(struct svn_diff_fns2_t));
DATA_PTR(self) = result;
@@ -29598,15 +34329,15 @@ fail:
SWIGINTERN void
-free_svn_diff_fns2_t(svn_diff_fns2_t *arg1) {
+free_svn_diff_fns2_t(struct svn_diff_fns2_t *arg1) {
free((char *) arg1);
}
-swig_class SwigClassSvn_diff_fns_t;
+static swig_class SwigClassSvn_diff_fns_t;
SWIGINTERN VALUE
_wrap_svn_diff_fns_t_datasource_open_set(int argc, VALUE *argv, VALUE self) {
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_diff_datasource_e) = (svn_error_t *(*)(void *,svn_diff_datasource_e)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -29616,9 +34347,9 @@ _wrap_svn_diff_fns_t_datasource_open_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_fns_t *","datasource_open", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_fns_t *","datasource_open", 1, self ));
}
- arg1 = (svn_diff_fns_t *)(argp1);
+ arg1 = (struct svn_diff_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_svn_diff_datasource_e__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -29634,7 +34365,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_fns_t_datasource_open_get(int argc, VALUE *argv, VALUE self) {
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,svn_diff_datasource_e) = 0 ;
@@ -29645,9 +34376,9 @@ _wrap_svn_diff_fns_t_datasource_open_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_fns_t *","datasource_open", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_fns_t *","datasource_open", 1, self ));
}
- arg1 = (svn_diff_fns_t *)(argp1);
+ arg1 = (struct svn_diff_fns_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_diff_datasource_e)) ((arg1)->datasource_open);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_svn_diff_datasource_e__p_svn_error_t);
return vresult;
@@ -29658,7 +34389,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_fns_t_datasource_close_set(int argc, VALUE *argv, VALUE self) {
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_diff_datasource_e) = (svn_error_t *(*)(void *,svn_diff_datasource_e)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -29668,9 +34399,9 @@ _wrap_svn_diff_fns_t_datasource_close_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_fns_t *","datasource_close", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_fns_t *","datasource_close", 1, self ));
}
- arg1 = (svn_diff_fns_t *)(argp1);
+ arg1 = (struct svn_diff_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_svn_diff_datasource_e__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -29686,7 +34417,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_fns_t_datasource_close_get(int argc, VALUE *argv, VALUE self) {
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,svn_diff_datasource_e) = 0 ;
@@ -29697,9 +34428,9 @@ _wrap_svn_diff_fns_t_datasource_close_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_fns_t *","datasource_close", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_fns_t *","datasource_close", 1, self ));
}
- arg1 = (svn_diff_fns_t *)(argp1);
+ arg1 = (struct svn_diff_fns_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_diff_datasource_e)) ((arg1)->datasource_close);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_svn_diff_datasource_e__p_svn_error_t);
return vresult;
@@ -29710,7 +34441,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_fns_t_datasource_get_next_token_set(int argc, VALUE *argv, VALUE self) {
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
svn_error_t *(*arg2)(apr_uint32_t *,void **,void *,svn_diff_datasource_e) = (svn_error_t *(*)(apr_uint32_t *,void **,void *,svn_diff_datasource_e)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -29720,9 +34451,9 @@ _wrap_svn_diff_fns_t_datasource_get_next_token_set(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_fns_t *","datasource_get_next_token", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_fns_t *","datasource_get_next_token", 1, self ));
}
- arg1 = (svn_diff_fns_t *)(argp1);
+ arg1 = (struct svn_diff_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_apr_uint32_t_p_p_void_p_void_svn_diff_datasource_e__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -29738,7 +34469,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_fns_t_datasource_get_next_token_get(int argc, VALUE *argv, VALUE self) {
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(apr_uint32_t *,void **,void *,svn_diff_datasource_e) = 0 ;
@@ -29749,9 +34480,9 @@ _wrap_svn_diff_fns_t_datasource_get_next_token_get(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_fns_t *","datasource_get_next_token", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_fns_t *","datasource_get_next_token", 1, self ));
}
- arg1 = (svn_diff_fns_t *)(argp1);
+ arg1 = (struct svn_diff_fns_t *)(argp1);
result = (svn_error_t *(*)(apr_uint32_t *,void **,void *,svn_diff_datasource_e)) ((arg1)->datasource_get_next_token);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_apr_uint32_t_p_p_void_p_void_svn_diff_datasource_e__p_svn_error_t);
return vresult;
@@ -29762,7 +34493,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_fns_t_token_compare_set(int argc, VALUE *argv, VALUE self) {
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,void *,void *,int *) = (svn_error_t *(*)(void *,void *,void *,int *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -29772,9 +34503,9 @@ _wrap_svn_diff_fns_t_token_compare_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_fns_t *","token_compare", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_fns_t *","token_compare", 1, self ));
}
- arg1 = (svn_diff_fns_t *)(argp1);
+ arg1 = (struct svn_diff_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_void_p_void_p_int__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -29790,7 +34521,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_fns_t_token_compare_get(int argc, VALUE *argv, VALUE self) {
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,void *,void *,int *) = 0 ;
@@ -29801,9 +34532,9 @@ _wrap_svn_diff_fns_t_token_compare_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_fns_t *","token_compare", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_fns_t *","token_compare", 1, self ));
}
- arg1 = (svn_diff_fns_t *)(argp1);
+ arg1 = (struct svn_diff_fns_t *)(argp1);
result = (svn_error_t *(*)(void *,void *,void *,int *)) ((arg1)->token_compare);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_void_p_void_p_int__p_svn_error_t);
return vresult;
@@ -29814,7 +34545,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_fns_t_token_discard_set(int argc, VALUE *argv, VALUE self) {
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
void (*arg2)(void *,void *) = (void (*)(void *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -29824,9 +34555,9 @@ _wrap_svn_diff_fns_t_token_discard_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_fns_t *","token_discard", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_fns_t *","token_discard", 1, self ));
}
- arg1 = (svn_diff_fns_t *)(argp1);
+ arg1 = (struct svn_diff_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_void__void);
if (!SWIG_IsOK(res)) {
@@ -29842,7 +34573,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_fns_t_token_discard_get(int argc, VALUE *argv, VALUE self) {
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
void (*result)(void *,void *) = 0 ;
@@ -29853,9 +34584,9 @@ _wrap_svn_diff_fns_t_token_discard_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_fns_t *","token_discard", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_fns_t *","token_discard", 1, self ));
}
- arg1 = (svn_diff_fns_t *)(argp1);
+ arg1 = (struct svn_diff_fns_t *)(argp1);
result = (void (*)(void *,void *)) ((arg1)->token_discard);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_void__void);
return vresult;
@@ -29866,7 +34597,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_fns_t_token_discard_all_set(int argc, VALUE *argv, VALUE self) {
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
void (*arg2)(void *) = (void (*)(void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -29876,9 +34607,9 @@ _wrap_svn_diff_fns_t_token_discard_all_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_fns_t *","token_discard_all", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_fns_t *","token_discard_all", 1, self ));
}
- arg1 = (svn_diff_fns_t *)(argp1);
+ arg1 = (struct svn_diff_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void__void);
if (!SWIG_IsOK(res)) {
@@ -29894,7 +34625,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_fns_t_token_discard_all_get(int argc, VALUE *argv, VALUE self) {
- svn_diff_fns_t *arg1 = (svn_diff_fns_t *) 0 ;
+ struct svn_diff_fns_t *arg1 = (struct svn_diff_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
void (*result)(void *) = 0 ;
@@ -29905,9 +34636,9 @@ _wrap_svn_diff_fns_t_token_discard_all_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_fns_t *","token_discard_all", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_fns_t *","token_discard_all", 1, self ));
}
- arg1 = (svn_diff_fns_t *)(argp1);
+ arg1 = (struct svn_diff_fns_t *)(argp1);
result = (void (*)(void *)) ((arg1)->token_discard_all);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__void);
return vresult;
@@ -29935,13 +34666,13 @@ _wrap_svn_diff_fns_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_diff_fns_t(int argc, VALUE *argv, VALUE self) {
- svn_diff_fns_t *result = 0 ;
+ struct svn_diff_fns_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_diff_fns_t *)calloc(1, sizeof(svn_diff_fns_t));
+ result = (struct svn_diff_fns_t *)calloc(1, sizeof(struct svn_diff_fns_t));
DATA_PTR(self) = result;
@@ -29954,7 +34685,7 @@ fail:
SWIGINTERN void
-free_svn_diff_fns_t(svn_diff_fns_t *arg1) {
+free_svn_diff_fns_t(struct svn_diff_fns_t *arg1) {
free((char *) arg1);
}
@@ -30454,11 +35185,11 @@ fail:
}
-swig_class SwigClassSvn_diff_output_fns_t;
+static swig_class SwigClassSvn_diff_output_fns_t;
SWIGINTERN VALUE
_wrap_svn_diff_output_fns_t_output_common_set(int argc, VALUE *argv, VALUE self) {
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t) = (svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -30468,9 +35199,9 @@ _wrap_svn_diff_output_fns_t_output_common_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_output_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_output_fns_t *","output_common", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_output_fns_t *","output_common", 1, self ));
}
- arg1 = (svn_diff_output_fns_t *)(argp1);
+ arg1 = (struct svn_diff_output_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -30486,7 +35217,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_output_fns_t_output_common_get(int argc, VALUE *argv, VALUE self) {
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t) = 0 ;
@@ -30497,9 +35228,9 @@ _wrap_svn_diff_output_fns_t_output_common_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_output_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_output_fns_t *","output_common", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_output_fns_t *","output_common", 1, self ));
}
- arg1 = (svn_diff_output_fns_t *)(argp1);
+ arg1 = (struct svn_diff_output_fns_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t)) ((arg1)->output_common);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t__p_svn_error_t);
return vresult;
@@ -30510,7 +35241,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_output_fns_t_output_diff_modified_set(int argc, VALUE *argv, VALUE self) {
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t) = (svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -30520,9 +35251,9 @@ _wrap_svn_diff_output_fns_t_output_diff_modified_set(int argc, VALUE *argv, VALU
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_output_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_output_fns_t *","output_diff_modified", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_output_fns_t *","output_diff_modified", 1, self ));
}
- arg1 = (svn_diff_output_fns_t *)(argp1);
+ arg1 = (struct svn_diff_output_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -30538,7 +35269,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_output_fns_t_output_diff_modified_get(int argc, VALUE *argv, VALUE self) {
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t) = 0 ;
@@ -30549,9 +35280,9 @@ _wrap_svn_diff_output_fns_t_output_diff_modified_get(int argc, VALUE *argv, VALU
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_output_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_output_fns_t *","output_diff_modified", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_output_fns_t *","output_diff_modified", 1, self ));
}
- arg1 = (svn_diff_output_fns_t *)(argp1);
+ arg1 = (struct svn_diff_output_fns_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t)) ((arg1)->output_diff_modified);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t__p_svn_error_t);
return vresult;
@@ -30562,7 +35293,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_output_fns_t_output_diff_latest_set(int argc, VALUE *argv, VALUE self) {
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t) = (svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -30572,9 +35303,9 @@ _wrap_svn_diff_output_fns_t_output_diff_latest_set(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_output_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_output_fns_t *","output_diff_latest", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_output_fns_t *","output_diff_latest", 1, self ));
}
- arg1 = (svn_diff_output_fns_t *)(argp1);
+ arg1 = (struct svn_diff_output_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -30590,7 +35321,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_output_fns_t_output_diff_latest_get(int argc, VALUE *argv, VALUE self) {
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t) = 0 ;
@@ -30601,9 +35332,9 @@ _wrap_svn_diff_output_fns_t_output_diff_latest_get(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_output_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_output_fns_t *","output_diff_latest", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_output_fns_t *","output_diff_latest", 1, self ));
}
- arg1 = (svn_diff_output_fns_t *)(argp1);
+ arg1 = (struct svn_diff_output_fns_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t)) ((arg1)->output_diff_latest);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t__p_svn_error_t);
return vresult;
@@ -30614,7 +35345,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_output_fns_t_output_diff_common_set(int argc, VALUE *argv, VALUE self) {
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t) = (svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -30624,9 +35355,9 @@ _wrap_svn_diff_output_fns_t_output_diff_common_set(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_output_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_output_fns_t *","output_diff_common", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_output_fns_t *","output_diff_common", 1, self ));
}
- arg1 = (svn_diff_output_fns_t *)(argp1);
+ arg1 = (struct svn_diff_output_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -30642,7 +35373,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_output_fns_t_output_diff_common_get(int argc, VALUE *argv, VALUE self) {
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t) = 0 ;
@@ -30653,9 +35384,9 @@ _wrap_svn_diff_output_fns_t_output_diff_common_get(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_output_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_output_fns_t *","output_diff_common", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_output_fns_t *","output_diff_common", 1, self ));
}
- arg1 = (svn_diff_output_fns_t *)(argp1);
+ arg1 = (struct svn_diff_output_fns_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t)) ((arg1)->output_diff_common);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t__p_svn_error_t);
return vresult;
@@ -30666,7 +35397,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_output_fns_t_output_conflict_set(int argc, VALUE *argv, VALUE self) {
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,svn_diff_t *) = (svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,svn_diff_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -30676,9 +35407,9 @@ _wrap_svn_diff_output_fns_t_output_conflict_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_output_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_output_fns_t *","output_conflict", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_output_fns_t *","output_conflict", 1, self ));
}
- arg1 = (svn_diff_output_fns_t *)(argp1);
+ arg1 = (struct svn_diff_output_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_p_svn_diff_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -30694,7 +35425,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_output_fns_t_output_conflict_get(int argc, VALUE *argv, VALUE self) {
- svn_diff_output_fns_t *arg1 = (svn_diff_output_fns_t *) 0 ;
+ struct svn_diff_output_fns_t *arg1 = (struct svn_diff_output_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,svn_diff_t *) = 0 ;
@@ -30705,9 +35436,9 @@ _wrap_svn_diff_output_fns_t_output_conflict_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_output_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_output_fns_t *","output_conflict", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_output_fns_t *","output_conflict", 1, self ));
}
- arg1 = (svn_diff_output_fns_t *)(argp1);
+ arg1 = (struct svn_diff_output_fns_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,apr_off_t,svn_diff_t *)) ((arg1)->output_conflict);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_apr_off_t_p_svn_diff_t__p_svn_error_t);
return vresult;
@@ -30735,13 +35466,13 @@ _wrap_svn_diff_output_fns_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_diff_output_fns_t(int argc, VALUE *argv, VALUE self) {
- svn_diff_output_fns_t *result = 0 ;
+ struct svn_diff_output_fns_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_diff_output_fns_t *)calloc(1, sizeof(svn_diff_output_fns_t));
+ result = (struct svn_diff_output_fns_t *)calloc(1, sizeof(struct svn_diff_output_fns_t));
DATA_PTR(self) = result;
@@ -30754,7 +35485,7 @@ fail:
SWIGINTERN void
-free_svn_diff_output_fns_t(svn_diff_output_fns_t *arg1) {
+free_svn_diff_output_fns_t(struct svn_diff_output_fns_t *arg1) {
free((char *) arg1);
}
@@ -30808,11 +35539,11 @@ fail:
}
-swig_class SwigClassSvn_diff_file_options_t;
+static swig_class SwigClassSvn_diff_file_options_t;
SWIGINTERN VALUE
_wrap_svn_diff_file_options_t_ignore_space_set(int argc, VALUE *argv, VALUE self) {
- svn_diff_file_options_t *arg1 = (svn_diff_file_options_t *) 0 ;
+ struct svn_diff_file_options_t *arg1 = (struct svn_diff_file_options_t *) 0 ;
svn_diff_file_ignore_space_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -30824,9 +35555,9 @@ _wrap_svn_diff_file_options_t_ignore_space_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_file_options_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_file_options_t *","ignore_space", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_file_options_t *","ignore_space", 1, self ));
}
- arg1 = (svn_diff_file_options_t *)(argp1);
+ arg1 = (struct svn_diff_file_options_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_diff_file_ignore_space_t","ignore_space", 2, argv[0] ));
@@ -30841,7 +35572,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_file_options_t_ignore_space_get(int argc, VALUE *argv, VALUE self) {
- svn_diff_file_options_t *arg1 = (svn_diff_file_options_t *) 0 ;
+ struct svn_diff_file_options_t *arg1 = (struct svn_diff_file_options_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_diff_file_ignore_space_t result;
@@ -30852,9 +35583,9 @@ _wrap_svn_diff_file_options_t_ignore_space_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_file_options_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_file_options_t *","ignore_space", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_file_options_t *","ignore_space", 1, self ));
}
- arg1 = (svn_diff_file_options_t *)(argp1);
+ arg1 = (struct svn_diff_file_options_t *)(argp1);
result = (svn_diff_file_ignore_space_t) ((arg1)->ignore_space);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -30865,7 +35596,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_file_options_t_ignore_eol_style_set(int argc, VALUE *argv, VALUE self) {
- svn_diff_file_options_t *arg1 = (svn_diff_file_options_t *) 0 ;
+ struct svn_diff_file_options_t *arg1 = (struct svn_diff_file_options_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -30875,9 +35606,9 @@ _wrap_svn_diff_file_options_t_ignore_eol_style_set(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_file_options_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_file_options_t *","ignore_eol_style", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_file_options_t *","ignore_eol_style", 1, self ));
}
- arg1 = (svn_diff_file_options_t *)(argp1);
+ arg1 = (struct svn_diff_file_options_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->ignore_eol_style = arg2;
return Qnil;
@@ -30888,7 +35619,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_file_options_t_ignore_eol_style_get(int argc, VALUE *argv, VALUE self) {
- svn_diff_file_options_t *arg1 = (svn_diff_file_options_t *) 0 ;
+ struct svn_diff_file_options_t *arg1 = (struct svn_diff_file_options_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -30899,9 +35630,9 @@ _wrap_svn_diff_file_options_t_ignore_eol_style_get(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_file_options_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_file_options_t *","ignore_eol_style", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_file_options_t *","ignore_eol_style", 1, self ));
}
- arg1 = (svn_diff_file_options_t *)(argp1);
+ arg1 = (struct svn_diff_file_options_t *)(argp1);
result = (svn_boolean_t) ((arg1)->ignore_eol_style);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -30912,7 +35643,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_file_options_t_show_c_function_set(int argc, VALUE *argv, VALUE self) {
- svn_diff_file_options_t *arg1 = (svn_diff_file_options_t *) 0 ;
+ struct svn_diff_file_options_t *arg1 = (struct svn_diff_file_options_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -30922,9 +35653,9 @@ _wrap_svn_diff_file_options_t_show_c_function_set(int argc, VALUE *argv, VALUE s
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_file_options_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_file_options_t *","show_c_function", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_file_options_t *","show_c_function", 1, self ));
}
- arg1 = (svn_diff_file_options_t *)(argp1);
+ arg1 = (struct svn_diff_file_options_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->show_c_function = arg2;
return Qnil;
@@ -30935,7 +35666,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_diff_file_options_t_show_c_function_get(int argc, VALUE *argv, VALUE self) {
- svn_diff_file_options_t *arg1 = (svn_diff_file_options_t *) 0 ;
+ struct svn_diff_file_options_t *arg1 = (struct svn_diff_file_options_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -30946,9 +35677,9 @@ _wrap_svn_diff_file_options_t_show_c_function_get(int argc, VALUE *argv, VALUE s
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_diff_file_options_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_diff_file_options_t *","show_c_function", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_diff_file_options_t *","show_c_function", 1, self ));
}
- arg1 = (svn_diff_file_options_t *)(argp1);
+ arg1 = (struct svn_diff_file_options_t *)(argp1);
result = (svn_boolean_t) ((arg1)->show_c_function);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -30979,7 +35710,7 @@ _wrap_new_svn_diff_file_options_t(int argc, VALUE *argv, VALUE self) {
apr_pool_t *arg1 = (apr_pool_t *) 0 ;
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
- svn_diff_file_options_t *result = 0 ;
+ struct svn_diff_file_options_t *result = 0 ;
{
svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg1);
@@ -30993,7 +35724,7 @@ _wrap_new_svn_diff_file_options_t(int argc, VALUE *argv, VALUE self) {
}
{
- result = (svn_diff_file_options_t *)new_svn_diff_file_options_t(arg1);
+ result = (struct svn_diff_file_options_t *)new_svn_diff_file_options_t(arg1);
DATA_PTR(self) = result;
@@ -31019,10 +35750,10 @@ fail:
}
-SWIGINTERN void delete_svn_diff_file_options_t(svn_diff_file_options_t *self){
+SWIGINTERN void delete_svn_diff_file_options_t(struct svn_diff_file_options_t *self){
}
SWIGINTERN void
-free_svn_diff_file_options_t(svn_diff_file_options_t *arg1) {
+free_svn_diff_file_options_t(struct svn_diff_file_options_t *arg1) {
delete_svn_diff_file_options_t(arg1);
}
@@ -33740,11 +38471,11 @@ fail:
}
-swig_class SwigClassSvn_prop_patch_t;
+static swig_class SwigClassSvn_prop_patch_t;
SWIGINTERN VALUE
_wrap_svn_prop_patch_t_name_set(int argc, VALUE *argv, VALUE self) {
- svn_prop_patch_t *arg1 = (svn_prop_patch_t *) 0 ;
+ struct svn_prop_patch_t *arg1 = (struct svn_prop_patch_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -33757,9 +38488,9 @@ _wrap_svn_prop_patch_t_name_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_prop_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_prop_patch_t *","name", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_prop_patch_t *","name", 1, self ));
}
- arg1 = (svn_prop_patch_t *)(argp1);
+ arg1 = (struct svn_prop_patch_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","name", 2, argv[0] ));
@@ -33783,7 +38514,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_prop_patch_t_name_get(int argc, VALUE *argv, VALUE self) {
- svn_prop_patch_t *arg1 = (svn_prop_patch_t *) 0 ;
+ struct svn_prop_patch_t *arg1 = (struct svn_prop_patch_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -33794,9 +38525,9 @@ _wrap_svn_prop_patch_t_name_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_prop_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_prop_patch_t *","name", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_prop_patch_t *","name", 1, self ));
}
- arg1 = (svn_prop_patch_t *)(argp1);
+ arg1 = (struct svn_prop_patch_t *)(argp1);
result = (char *) ((arg1)->name);
{
if (result) {
@@ -33813,7 +38544,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_prop_patch_t_operation_set(int argc, VALUE *argv, VALUE self) {
- svn_prop_patch_t *arg1 = (svn_prop_patch_t *) 0 ;
+ struct svn_prop_patch_t *arg1 = (struct svn_prop_patch_t *) 0 ;
svn_diff_operation_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -33825,9 +38556,9 @@ _wrap_svn_prop_patch_t_operation_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_prop_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_prop_patch_t *","operation", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_prop_patch_t *","operation", 1, self ));
}
- arg1 = (svn_prop_patch_t *)(argp1);
+ arg1 = (struct svn_prop_patch_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_diff_operation_kind_t","operation", 2, argv[0] ));
@@ -33842,7 +38573,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_prop_patch_t_operation_get(int argc, VALUE *argv, VALUE self) {
- svn_prop_patch_t *arg1 = (svn_prop_patch_t *) 0 ;
+ struct svn_prop_patch_t *arg1 = (struct svn_prop_patch_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_diff_operation_kind_t result;
@@ -33853,9 +38584,9 @@ _wrap_svn_prop_patch_t_operation_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_prop_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_prop_patch_t *","operation", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_prop_patch_t *","operation", 1, self ));
}
- arg1 = (svn_prop_patch_t *)(argp1);
+ arg1 = (struct svn_prop_patch_t *)(argp1);
result = (svn_diff_operation_kind_t) ((arg1)->operation);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -33866,7 +38597,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_prop_patch_t_hunks_set(int argc, VALUE *argv, VALUE self) {
- svn_prop_patch_t *arg1 = (svn_prop_patch_t *) 0 ;
+ struct svn_prop_patch_t *arg1 = (struct svn_prop_patch_t *) 0 ;
apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -33878,9 +38609,9 @@ _wrap_svn_prop_patch_t_hunks_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_prop_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_prop_patch_t *","hunks", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_prop_patch_t *","hunks", 1, self ));
}
- arg1 = (svn_prop_patch_t *)(argp1);
+ arg1 = (struct svn_prop_patch_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_apr_array_header_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "apr_array_header_t *","hunks", 2, argv[0] ));
@@ -33895,7 +38626,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_prop_patch_t_hunks_get(int argc, VALUE *argv, VALUE self) {
- svn_prop_patch_t *arg1 = (svn_prop_patch_t *) 0 ;
+ struct svn_prop_patch_t *arg1 = (struct svn_prop_patch_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_array_header_t *result = 0 ;
@@ -33906,9 +38637,9 @@ _wrap_svn_prop_patch_t_hunks_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_prop_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_prop_patch_t *","hunks", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_prop_patch_t *","hunks", 1, self ));
}
- arg1 = (svn_prop_patch_t *)(argp1);
+ arg1 = (struct svn_prop_patch_t *)(argp1);
result = (apr_array_header_t *) ((arg1)->hunks);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_array_header_t, 0 | 0 );
return vresult;
@@ -33936,13 +38667,13 @@ _wrap_svn_prop_patch_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_prop_patch_t(int argc, VALUE *argv, VALUE self) {
- svn_prop_patch_t *result = 0 ;
+ struct svn_prop_patch_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_prop_patch_t *)calloc(1, sizeof(svn_prop_patch_t));
+ result = (struct svn_prop_patch_t *)calloc(1, sizeof(struct svn_prop_patch_t));
DATA_PTR(self) = result;
@@ -33955,15 +38686,15 @@ fail:
SWIGINTERN void
-free_svn_prop_patch_t(svn_prop_patch_t *arg1) {
+free_svn_prop_patch_t(struct svn_prop_patch_t *arg1) {
free((char *) arg1);
}
-swig_class SwigClassSvn_patch_t;
+static swig_class SwigClassSvn_patch_t;
SWIGINTERN VALUE
_wrap_svn_patch_t_old_filename_set(int argc, VALUE *argv, VALUE self) {
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -33976,9 +38707,9 @@ _wrap_svn_patch_t_old_filename_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_patch_t *","old_filename", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_patch_t *","old_filename", 1, self ));
}
- arg1 = (svn_patch_t *)(argp1);
+ arg1 = (struct svn_patch_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","old_filename", 2, argv[0] ));
@@ -34002,7 +38733,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_patch_t_old_filename_get(int argc, VALUE *argv, VALUE self) {
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -34013,9 +38744,9 @@ _wrap_svn_patch_t_old_filename_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_patch_t *","old_filename", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_patch_t *","old_filename", 1, self ));
}
- arg1 = (svn_patch_t *)(argp1);
+ arg1 = (struct svn_patch_t *)(argp1);
result = (char *) ((arg1)->old_filename);
{
if (result) {
@@ -34032,7 +38763,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_patch_t_new_filename_set(int argc, VALUE *argv, VALUE self) {
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -34045,9 +38776,9 @@ _wrap_svn_patch_t_new_filename_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_patch_t *","new_filename", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_patch_t *","new_filename", 1, self ));
}
- arg1 = (svn_patch_t *)(argp1);
+ arg1 = (struct svn_patch_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","new_filename", 2, argv[0] ));
@@ -34071,7 +38802,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_patch_t_new_filename_get(int argc, VALUE *argv, VALUE self) {
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -34082,9 +38813,9 @@ _wrap_svn_patch_t_new_filename_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_patch_t *","new_filename", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_patch_t *","new_filename", 1, self ));
}
- arg1 = (svn_patch_t *)(argp1);
+ arg1 = (struct svn_patch_t *)(argp1);
result = (char *) ((arg1)->new_filename);
{
if (result) {
@@ -34101,7 +38832,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_patch_t_hunks_set(int argc, VALUE *argv, VALUE self) {
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -34113,9 +38844,9 @@ _wrap_svn_patch_t_hunks_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_patch_t *","hunks", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_patch_t *","hunks", 1, self ));
}
- arg1 = (svn_patch_t *)(argp1);
+ arg1 = (struct svn_patch_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_apr_array_header_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "apr_array_header_t *","hunks", 2, argv[0] ));
@@ -34130,7 +38861,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_patch_t_hunks_get(int argc, VALUE *argv, VALUE self) {
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_array_header_t *result = 0 ;
@@ -34141,9 +38872,9 @@ _wrap_svn_patch_t_hunks_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_patch_t *","hunks", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_patch_t *","hunks", 1, self ));
}
- arg1 = (svn_patch_t *)(argp1);
+ arg1 = (struct svn_patch_t *)(argp1);
result = (apr_array_header_t *) ((arg1)->hunks);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_array_header_t, 0 | 0 );
return vresult;
@@ -34154,7 +38885,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_patch_t_prop_patches_set(int argc, VALUE *argv, VALUE self) {
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
apr_hash_t *arg2 = (apr_hash_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -34166,9 +38897,9 @@ _wrap_svn_patch_t_prop_patches_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_patch_t *","prop_patches", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_patch_t *","prop_patches", 1, self ));
}
- arg1 = (svn_patch_t *)(argp1);
+ arg1 = (struct svn_patch_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_apr_hash_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "apr_hash_t *","prop_patches", 2, argv[0] ));
@@ -34183,7 +38914,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_patch_t_prop_patches_get(int argc, VALUE *argv, VALUE self) {
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_hash_t *result = 0 ;
@@ -34194,9 +38925,9 @@ _wrap_svn_patch_t_prop_patches_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_patch_t *","prop_patches", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_patch_t *","prop_patches", 1, self ));
}
- arg1 = (svn_patch_t *)(argp1);
+ arg1 = (struct svn_patch_t *)(argp1);
result = (apr_hash_t *) ((arg1)->prop_patches);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_hash_t, 0 | 0 );
return vresult;
@@ -34207,7 +38938,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_patch_t_operation_set(int argc, VALUE *argv, VALUE self) {
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
svn_diff_operation_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -34219,9 +38950,9 @@ _wrap_svn_patch_t_operation_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_patch_t *","operation", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_patch_t *","operation", 1, self ));
}
- arg1 = (svn_patch_t *)(argp1);
+ arg1 = (struct svn_patch_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_diff_operation_kind_t","operation", 2, argv[0] ));
@@ -34236,7 +38967,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_patch_t_operation_get(int argc, VALUE *argv, VALUE self) {
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_diff_operation_kind_t result;
@@ -34247,9 +38978,9 @@ _wrap_svn_patch_t_operation_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_patch_t *","operation", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_patch_t *","operation", 1, self ));
}
- arg1 = (svn_patch_t *)(argp1);
+ arg1 = (struct svn_patch_t *)(argp1);
result = (svn_diff_operation_kind_t) ((arg1)->operation);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -34260,7 +38991,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_patch_t_reverse_set(int argc, VALUE *argv, VALUE self) {
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -34270,9 +39001,9 @@ _wrap_svn_patch_t_reverse_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_patch_t *","reverse", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_patch_t *","reverse", 1, self ));
}
- arg1 = (svn_patch_t *)(argp1);
+ arg1 = (struct svn_patch_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->reverse = arg2;
return Qnil;
@@ -34283,7 +39014,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_patch_t_reverse_get(int argc, VALUE *argv, VALUE self) {
- svn_patch_t *arg1 = (svn_patch_t *) 0 ;
+ struct svn_patch_t *arg1 = (struct svn_patch_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -34294,9 +39025,9 @@ _wrap_svn_patch_t_reverse_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_patch_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_patch_t *","reverse", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_patch_t *","reverse", 1, self ));
}
- arg1 = (svn_patch_t *)(argp1);
+ arg1 = (struct svn_patch_t *)(argp1);
result = (svn_boolean_t) ((arg1)->reverse);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -34324,13 +39055,13 @@ _wrap_svn_patch_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_patch_t(int argc, VALUE *argv, VALUE self) {
- svn_patch_t *result = 0 ;
+ struct svn_patch_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_patch_t *)calloc(1, sizeof(svn_patch_t));
+ result = (struct svn_patch_t *)calloc(1, sizeof(struct svn_patch_t));
DATA_PTR(self) = result;
@@ -34343,7 +39074,7 @@ fail:
SWIGINTERN void
-free_svn_patch_t(svn_patch_t *arg1) {
+free_svn_patch_t(struct svn_patch_t *arg1) {
free((char *) arg1);
}
@@ -34393,13 +39124,7 @@ _wrap_svn_diff_open_patch_file(int argc, VALUE *argv, VALUE self) {
vresult = Qnil;
}
{
- /* FIXME: Missing argout typemap: svn_diff_open_patch_file arg 1 (svn_patch_file_t **) */
-
-
-
-
- SWIG_exception(SWIG_ValueError, "svn_diff_open_patch_file is not implemented yet");
-
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_patch_file_t, 0));
}
if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
{
@@ -34481,13 +39206,7 @@ _wrap_svn_diff_parse_next_patch(int argc, VALUE *argv, VALUE self) {
vresult = Qnil;
}
{
- /* FIXME: Missing argout typemap: svn_diff_parse_next_patch arg 1 (svn_patch_t **) */
-
-
-
-
- SWIG_exception(SWIG_ValueError, "svn_diff_parse_next_patch is not implemented yet");
-
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_patch_t, 0));
}
{
VALUE target;
@@ -36040,12 +40759,12 @@ fail:
SWIGINTERN VALUE
_wrap_svn_swig_rangelist_merge(int argc, VALUE *argv, VALUE self) {
- apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
- apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
+ svn_rangelist_t **arg1 = (svn_rangelist_t **) 0 ;
+ svn_rangelist_t *arg2 = (svn_rangelist_t *) 0 ;
apr_pool_t *arg3 = (apr_pool_t *) 0 ;
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
- apr_array_header_t *temp1 ;
+ svn_rangelist_t *temp1 ;
svn_error_t *result = 0 ;
VALUE vresult = Qnil;
@@ -36106,11 +40825,11 @@ fail:
SWIGINTERN VALUE
_wrap_svn_swig_rangelist_reverse(int argc, VALUE *argv, VALUE self) {
- apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
+ svn_rangelist_t **arg1 = (svn_rangelist_t **) 0 ;
apr_pool_t *arg2 = (apr_pool_t *) 0 ;
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
- apr_array_header_t *temp1 ;
+ svn_rangelist_t *temp1 ;
svn_error_t *result = 0 ;
VALUE vresult = Qnil;
@@ -36171,7 +40890,7 @@ fail:
static swig_type_info _swigt__p_FILE = {"_p_FILE", "FILE *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_allocator_t = {"_p_apr_allocator_t", "apr_allocator_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *|svn_rangelist_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_dir_t = {"_p_apr_dir_t", "apr_dir_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_file_t = {"_p_apr_file_t", "apr_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_finfo_t = {"_p_apr_finfo_t", "apr_finfo_t *", 0, 0, (void*)0, 0};
@@ -36190,12 +40909,14 @@ static swig_type_info _swigt__p_apr_uint32_t = {"_p_apr_uint32_t", "apr_uint32_t
static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_opt_subcommand_t *|struct svn_error_t *(*)(apr_getopt_t *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_apr_uint32_t_p_p_void_p_void_svn_diff_datasource_e__p_svn_error_t = {"_p_f_p_apr_uint32_t_p_p_void_p_void_svn_diff_datasource_e__p_svn_error_t", "struct svn_error_t *(*)(apr_uint32_t *,void **,void *,svn_diff_datasource_e)|svn_error_t *(*)(apr_uint32_t *,void **,void *,svn_diff_datasource_e)", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_p_char_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_char_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t", "svn_auth_gnome_keyring_unlock_prompt_func_t|struct svn_error_t *(*)(char **,char const *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_struct_svn_auth_provider_object_t_p_apr_pool_t__void = {"_p_f_p_p_struct_svn_auth_provider_object_t_p_apr_pool_t__void", "svn_auth_simple_provider_func_t|svn_auth_ssl_client_cert_pw_provider_func_t|void (*)(struct svn_auth_provider_object_t **,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t", "svn_auth_simple_prompt_func_t|struct svn_error_t *(*)(svn_auth_cred_simple_t **,void *,char const *,char const *,svn_boolean_t,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t", "svn_auth_ssl_client_cert_pw_prompt_func_t|struct svn_error_t *(*)(svn_auth_cred_ssl_client_cert_pw_t **,void *,char const *,svn_boolean_t,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t", "svn_auth_ssl_client_cert_prompt_func_t|struct svn_error_t *(*)(svn_auth_cred_ssl_client_cert_t **,void *,char const *,svn_boolean_t,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(svn_auth_cred_ssl_server_trust_t **,void *,char const *,apr_uint32_t,svn_auth_ssl_server_cert_info_t const *,svn_boolean_t,apr_pool_t *)|svn_auth_ssl_server_trust_prompt_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(svn_auth_cred_username_t **,void *,char const *,svn_boolean_t,apr_pool_t *)|svn_auth_username_prompt_func_t", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(svn_stream_t **,void *,apr_pool_t *,apr_pool_t *)|svn_stream_lazyopen_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void **,void **,void *,apr_hash_t *,char const *,apr_pool_t *)|svn_error_t *(*)(void **,void **,void *,apr_hash_t *,char const *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t", "svn_error_t *(*)(void **,void *,void *,apr_hash_t *,char const *,apr_pool_t *)|struct svn_error_t *(*)(void **,void *,void *,apr_hash_t *,char const *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_q_const__char_p_q_const__char_p_void__int = {"_p_f_p_q_const__char_p_q_const__char_p_void__int", "svn_config_enumerator_t|int (*)(char const *,char const *,void *)", 0, 0, (void*)0, 0};
@@ -36204,6 +40925,7 @@ static swig_type_info _swigt__p_f_p_q_const__char_p_void__int = {"_p_f_p_q_const
static swig_type_info _swigt__p_f_p_q_const__char_p_void_p_apr_pool_t__int = {"_p_f_p_q_const__char_p_void_p_apr_pool_t__int", "int (*)(char const *,void *,apr_pool_t *)|svn_config_section_enumerator2_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_commit_callback2_t|struct svn_error_t *(*)(svn_commit_info_t const *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(svn_boolean_t *,char const *,void *,apr_pool_t *)|svn_auth_plaintext_prompt_func_t|svn_auth_plaintext_passphrase_prompt_func_t", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(svn_boolean_t *,void *,char const *,char const *,apr_hash_t *,apr_pool_t *)|svn_config_auth_walk_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t", "svn_error_t *(*)(svn_boolean_t *,void *,void *,apr_hash_t *,char const *,apr_pool_t *)|struct svn_error_t *(*)(svn_boolean_t *,void *,void *,apr_hash_t *,char const *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(svn_location_segment_t *,void *,apr_pool_t *)|svn_location_segment_receiver_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void__p_svn_error_t = {"_p_f_p_void__p_svn_error_t", "svn_cancel_func_t|svn_close_fn_t|struct svn_error_t *(*)(void *)", 0, 0, (void*)0, 0};
@@ -36226,10 +40948,11 @@ static swig_type_info _swigt__p_f_svn_revnum_t_p_q_const__char_p_q_const__char_p
static swig_type_info _swigt__p_f_void__p_svn_version_t = {"_p_f_void__p_svn_version_t", "svn_version_func_t|struct svn_version_t *(*)(void)|svn_version_t *(*)(void)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_int = {"_p_int", "int *|svn_boolean_t *|apr_status_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_long = {"_p_long", "long *|svn_revnum_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_p_apr_array_header_t = {"_p_p_apr_array_header_t", "apr_array_header_t **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_apr_array_header_t = {"_p_p_apr_array_header_t", "apr_array_header_t **|svn_rangelist_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_apr_file_t = {"_p_p_apr_file_t", "apr_file_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_apr_hash_t = {"_p_p_apr_hash_t", "apr_hash_t **|svn_mergeinfo_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_svn_auth_baton_t = {"_p_p_svn_auth_baton_t", "struct svn_auth_baton_t **|svn_auth_baton_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_auth_cred_simple_t = {"_p_p_svn_auth_cred_simple_t", "struct svn_auth_cred_simple_t **|svn_auth_cred_simple_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_auth_cred_ssl_client_cert_pw_t = {"_p_p_svn_auth_cred_ssl_client_cert_pw_t", "struct svn_auth_cred_ssl_client_cert_pw_t **|svn_auth_cred_ssl_client_cert_pw_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_auth_cred_ssl_client_cert_t = {"_p_p_svn_auth_cred_ssl_client_cert_t", "struct svn_auth_cred_ssl_client_cert_t **|svn_auth_cred_ssl_client_cert_t **", 0, 0, (void*)0, 0};
@@ -36237,7 +40960,7 @@ static swig_type_info _swigt__p_p_svn_auth_cred_ssl_server_trust_t = {"_p_p_svn_
static swig_type_info _swigt__p_p_svn_auth_cred_username_t = {"_p_p_svn_auth_cred_username_t", "struct svn_auth_cred_username_t **|svn_auth_cred_username_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_auth_iterstate_t = {"_p_p_svn_auth_iterstate_t", "struct svn_auth_iterstate_t **|svn_auth_iterstate_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_auth_provider_object_t = {"_p_p_svn_auth_provider_object_t", "struct svn_auth_provider_object_t **|svn_auth_provider_object_t **", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_p_svn_checksum_t = {"_p_p_svn_checksum_t", "svn_checksum_t **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_svn_checksum_t = {"_p_p_svn_checksum_t", "struct svn_checksum_t **|svn_checksum_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_config_t = {"_p_p_svn_config_t", "struct svn_config_t **|svn_config_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_diff_t = {"_p_p_svn_diff_t", "struct svn_diff_t **|svn_diff_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_io_dirent2_t = {"_p_p_svn_io_dirent2_t", "struct svn_io_dirent2_t **|svn_io_dirent2_t **", 0, 0, (void*)0, 0};
@@ -36258,7 +40981,9 @@ static swig_type_info _swigt__p_svn_auth_iterstate_t = {"_p_svn_auth_iterstate_t
static swig_type_info _swigt__p_svn_auth_provider_object_t = {"_p_svn_auth_provider_object_t", "struct svn_auth_provider_object_t *|svn_auth_provider_object_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_provider_t = {"_p_svn_auth_provider_t", "struct svn_auth_provider_t *|svn_auth_provider_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_ssl_server_cert_info_t = {"_p_svn_auth_ssl_server_cert_info_t", "struct svn_auth_ssl_server_cert_info_t *|svn_auth_ssl_server_cert_info_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_ctx_t = {"_p_svn_checksum_ctx_t", "struct svn_checksum_ctx_t *|svn_checksum_ctx_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "enum svn_checksum_kind_t *|svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "struct svn_checksum_t *|svn_checksum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_commit_info_t = {"_p_svn_commit_info_t", "struct svn_commit_info_t *|svn_commit_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_config_t = {"_p_svn_config_t", "struct svn_config_t *|svn_config_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_depth_t = {"_p_svn_depth_t", "enum svn_depth_t *|svn_depth_t *", 0, 0, (void*)0, 0};
@@ -36294,6 +41019,7 @@ static swig_type_info _swigt__p_svn_opt_subcommand_desc2_t_desc_overrides = {"_p
static swig_type_info _swigt__p_svn_opt_subcommand_desc_t = {"_p_svn_opt_subcommand_desc_t", "struct svn_opt_subcommand_desc_t *|svn_opt_subcommand_desc_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_file_t = {"_p_svn_patch_file_t", "struct svn_patch_file_t *|svn_patch_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_t = {"_p_svn_patch_t", "struct svn_patch_t *|svn_patch_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_prop_inherited_item_t = {"_p_svn_prop_inherited_item_t", "struct svn_prop_inherited_item_t *|svn_prop_inherited_item_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_kind = {"_p_svn_prop_kind", "svn_prop_kind_t *|enum svn_prop_kind *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_patch_t = {"_p_svn_prop_patch_t", "struct svn_prop_patch_t *|svn_prop_patch_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_t = {"_p_svn_prop_t", "struct svn_prop_t *|svn_prop_t *", 0, 0, (void*)0, 0};
@@ -36303,6 +41029,9 @@ static swig_type_info _swigt__p_svn_string_t = {"_p_svn_string_t", "struct svn_s
static swig_type_info _swigt__p_svn_stringbuf_t = {"_p_svn_stringbuf_t", "struct svn_stringbuf_t *|svn_stringbuf_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_tristate_t = {"_p_svn_tristate_t", "enum svn_tristate_t *|svn_tristate_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_checklist_t = {"_p_svn_version_checklist_t", "struct svn_version_checklist_t *|svn_version_checklist_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_linked_lib_t = {"_p_svn_version_ext_linked_lib_t", "struct svn_version_ext_linked_lib_t *|svn_version_ext_linked_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_loaded_lib_t = {"_p_svn_version_ext_loaded_lib_t", "struct svn_version_ext_loaded_lib_t *|svn_version_ext_loaded_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_extended_t = {"_p_svn_version_extended_t", "struct svn_version_extended_t *|svn_version_extended_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_t = {"_p_svn_version_t", "struct svn_version_t *|svn_version_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_char = {"_p_unsigned_char", "unsigned char *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_long = {"_p_unsigned_long", "unsigned long *|svn_linenum_t *", 0, 0, (void*)0, 0};
@@ -36330,12 +41059,14 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_char,
&_swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_apr_uint32_t_p_p_void_p_void_svn_diff_datasource_e__p_svn_error_t,
+ &_swigt__p_f_p_p_char_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_p_struct_svn_auth_provider_object_t_p_apr_pool_t__void,
&_swigt__p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_q_const__char_p_q_const__char_p_void__int,
@@ -36344,6 +41075,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_f_p_q_const__char_p_void_p_apr_pool_t__int,
&_swigt__p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void__p_svn_error_t,
@@ -36370,6 +41102,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_p_apr_file_t,
&_swigt__p_p_apr_hash_t,
&_swigt__p_p_char,
+ &_swigt__p_p_svn_auth_baton_t,
&_swigt__p_p_svn_auth_cred_simple_t,
&_swigt__p_p_svn_auth_cred_ssl_client_cert_pw_t,
&_swigt__p_p_svn_auth_cred_ssl_client_cert_t,
@@ -36398,7 +41131,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_auth_provider_object_t,
&_swigt__p_svn_auth_provider_t,
&_swigt__p_svn_auth_ssl_server_cert_info_t,
+ &_swigt__p_svn_checksum_ctx_t,
&_swigt__p_svn_checksum_kind_t,
+ &_swigt__p_svn_checksum_t,
&_swigt__p_svn_commit_info_t,
&_swigt__p_svn_config_t,
&_swigt__p_svn_depth_t,
@@ -36434,6 +41169,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_opt_subcommand_desc_t,
&_swigt__p_svn_patch_file_t,
&_swigt__p_svn_patch_t,
+ &_swigt__p_svn_prop_inherited_item_t,
&_swigt__p_svn_prop_kind,
&_swigt__p_svn_prop_patch_t,
&_swigt__p_svn_prop_t,
@@ -36443,6 +41179,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_stringbuf_t,
&_swigt__p_svn_tristate_t,
&_swigt__p_svn_version_checklist_t,
+ &_swigt__p_svn_version_ext_linked_lib_t,
+ &_swigt__p_svn_version_ext_loaded_lib_t,
+ &_swigt__p_svn_version_extended_t,
&_swigt__p_svn_version_t,
&_swigt__p_unsigned_char,
&_swigt__p_unsigned_long,
@@ -36470,12 +41209,14 @@ static swig_cast_info _swigc__p_apr_uint32_t[] = { {&_swigt__p_apr_uint32_t, 0,
static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_apr_uint32_t_p_p_void_p_void_svn_diff_datasource_e__p_svn_error_t[] = { {&_swigt__p_f_p_apr_uint32_t_p_p_void_p_void_svn_diff_datasource_e__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_p_char_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_char_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_struct_svn_auth_provider_object_t_p_apr_pool_t__void[] = { {&_swigt__p_f_p_p_struct_svn_auth_provider_object_t_p_apr_pool_t__void, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_q_const__char_p_q_const__char_p_void__int[] = { {&_swigt__p_f_p_q_const__char_p_q_const__char_p_void__int, 0, 0, 0},{0, 0, 0, 0}};
@@ -36484,6 +41225,7 @@ static swig_cast_info _swigc__p_f_p_q_const__char_p_void__int[] = { {&_swigt__p
static swig_cast_info _swigc__p_f_p_q_const__char_p_void_p_apr_pool_t__int[] = { {&_swigt__p_f_p_q_const__char_p_void_p_apr_pool_t__int, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void__p_svn_error_t[] = { {&_swigt__p_f_p_void__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -36510,6 +41252,7 @@ static swig_cast_info _swigc__p_p_apr_array_header_t[] = { {&_swigt__p_p_apr_ar
static swig_cast_info _swigc__p_p_apr_file_t[] = { {&_swigt__p_p_apr_file_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_apr_hash_t[] = { {&_swigt__p_p_apr_hash_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_char[] = { {&_swigt__p_p_char, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_svn_auth_baton_t[] = { {&_swigt__p_p_svn_auth_baton_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_auth_cred_simple_t[] = { {&_swigt__p_p_svn_auth_cred_simple_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_auth_cred_ssl_client_cert_pw_t[] = { {&_swigt__p_p_svn_auth_cred_ssl_client_cert_pw_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_auth_cred_ssl_client_cert_t[] = { {&_swigt__p_p_svn_auth_cred_ssl_client_cert_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -36538,7 +41281,9 @@ static swig_cast_info _swigc__p_svn_auth_iterstate_t[] = { {&_swigt__p_svn_auth
static swig_cast_info _swigc__p_svn_auth_provider_object_t[] = { {&_swigt__p_svn_auth_provider_object_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_provider_t[] = { {&_swigt__p_svn_auth_provider_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_ssl_server_cert_info_t[] = { {&_swigt__p_svn_auth_ssl_server_cert_info_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_ctx_t[] = { {&_swigt__p_svn_checksum_ctx_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_checksum_kind_t[] = { {&_swigt__p_svn_checksum_kind_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_t[] = { {&_swigt__p_svn_checksum_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_commit_info_t[] = { {&_swigt__p_svn_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_config_t[] = { {&_swigt__p_svn_config_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_depth_t[] = { {&_swigt__p_svn_depth_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -36574,6 +41319,7 @@ static swig_cast_info _swigc__p_svn_opt_subcommand_desc2_t_desc_overrides[] = {
static swig_cast_info _swigc__p_svn_opt_subcommand_desc_t[] = { {&_swigt__p_svn_opt_subcommand_desc_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_file_t[] = { {&_swigt__p_svn_patch_file_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_t[] = { {&_swigt__p_svn_patch_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_prop_inherited_item_t[] = { {&_swigt__p_svn_prop_inherited_item_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_kind[] = { {&_swigt__p_svn_prop_kind, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_patch_t[] = { {&_swigt__p_svn_prop_patch_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_t[] = { {&_swigt__p_svn_prop_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -36583,6 +41329,9 @@ static swig_cast_info _swigc__p_svn_string_t[] = { {&_swigt__p_svn_string_t, 0,
static swig_cast_info _swigc__p_svn_stringbuf_t[] = { {&_swigt__p_svn_stringbuf_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_tristate_t[] = { {&_swigt__p_svn_tristate_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_checklist_t[] = { {&_swigt__p_svn_version_checklist_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_linked_lib_t[] = { {&_swigt__p_svn_version_ext_linked_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_loaded_lib_t[] = { {&_swigt__p_svn_version_ext_loaded_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_extended_t[] = { {&_swigt__p_svn_version_extended_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_t[] = { {&_swigt__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_char[] = { {&_swigt__p_unsigned_char, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_long[] = { {&_swigt__p_unsigned_long, 0, 0, 0},{0, 0, 0, 0}};
@@ -36610,12 +41359,14 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_char,
_swigc__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_apr_uint32_t_p_p_void_p_void_svn_diff_datasource_e__p_svn_error_t,
+ _swigc__p_f_p_p_char_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_p_struct_svn_auth_provider_object_t_p_apr_pool_t__void,
_swigc__p_f_p_p_svn_auth_cred_simple_t_p_void_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_p_svn_auth_cred_ssl_client_cert_pw_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_p_svn_auth_cred_ssl_client_cert_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_p_svn_auth_cred_ssl_server_trust_t_p_void_p_q_const__char_apr_uint32_t_p_q_const__svn_auth_ssl_server_cert_info_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_p_svn_auth_cred_username_t_p_void_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_f_p_p_svn_stream_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_p_void_p_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_p_void_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_q_const__char_p_q_const__char_p_void__int,
@@ -36624,6 +41375,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_f_p_q_const__char_p_void_p_apr_pool_t__int,
_swigc__p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_f_p_svn_boolean_t_p_void_p_q_const__char_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_svn_boolean_t_p_void_p_void_p_apr_hash_t_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void__p_svn_error_t,
@@ -36650,6 +41402,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_p_apr_file_t,
_swigc__p_p_apr_hash_t,
_swigc__p_p_char,
+ _swigc__p_p_svn_auth_baton_t,
_swigc__p_p_svn_auth_cred_simple_t,
_swigc__p_p_svn_auth_cred_ssl_client_cert_pw_t,
_swigc__p_p_svn_auth_cred_ssl_client_cert_t,
@@ -36678,7 +41431,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_auth_provider_object_t,
_swigc__p_svn_auth_provider_t,
_swigc__p_svn_auth_ssl_server_cert_info_t,
+ _swigc__p_svn_checksum_ctx_t,
_swigc__p_svn_checksum_kind_t,
+ _swigc__p_svn_checksum_t,
_swigc__p_svn_commit_info_t,
_swigc__p_svn_config_t,
_swigc__p_svn_depth_t,
@@ -36714,6 +41469,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_opt_subcommand_desc_t,
_swigc__p_svn_patch_file_t,
_swigc__p_svn_patch_t,
+ _swigc__p_svn_prop_inherited_item_t,
_swigc__p_svn_prop_kind,
_swigc__p_svn_prop_patch_t,
_swigc__p_svn_prop_t,
@@ -36723,6 +41479,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_stringbuf_t,
_swigc__p_svn_tristate_t,
_swigc__p_svn_version_checklist_t,
+ _swigc__p_svn_version_ext_linked_lib_t,
+ _swigc__p_svn_version_ext_loaded_lib_t,
+ _swigc__p_svn_version_extended_t,
_swigc__p_svn_version_t,
_swigc__p_unsigned_char,
_swigc__p_unsigned_long,
@@ -36791,8 +41550,6 @@ SWIG_InitializeModule(void *clientdata) {
swig_module_info *module_head, *iter;
int found, init;
- clientdata = clientdata;
-
/* check to see if the circular list has been setup, if not, set it up */
if (swig_module.next==0) {
/* Initialize the swig_module */
@@ -37015,6 +41772,7 @@ SWIGEXPORT void Init_core(void) {
rb_define_const(mCore, "SVN_ERR_BAD_CHECKSUM_PARSE", SWIG_From_int((int)(SVN_ERR_BAD_CHECKSUM_PARSE)));
rb_define_const(mCore, "SVN_ERR_BAD_TOKEN", SWIG_From_int((int)(SVN_ERR_BAD_TOKEN)));
rb_define_const(mCore, "SVN_ERR_BAD_CHANGELIST_NAME", SWIG_From_int((int)(SVN_ERR_BAD_CHANGELIST_NAME)));
+ rb_define_const(mCore, "SVN_ERR_BAD_ATOMIC", SWIG_From_int((int)(SVN_ERR_BAD_ATOMIC)));
rb_define_const(mCore, "SVN_ERR_XML_ATTRIB_NOT_FOUND", SWIG_From_int((int)(SVN_ERR_XML_ATTRIB_NOT_FOUND)));
rb_define_const(mCore, "SVN_ERR_XML_MISSING_ANCESTRY", SWIG_From_int((int)(SVN_ERR_XML_MISSING_ANCESTRY)));
rb_define_const(mCore, "SVN_ERR_XML_UNKNOWN_ENCODING", SWIG_From_int((int)(SVN_ERR_XML_UNKNOWN_ENCODING)));
@@ -37081,6 +41839,8 @@ SWIGEXPORT void Init_core(void) {
rb_define_const(mCore, "SVN_ERR_WC_CLEANUP_REQUIRED", SWIG_From_int((int)(SVN_ERR_WC_CLEANUP_REQUIRED)));
rb_define_const(mCore, "SVN_ERR_WC_INVALID_OPERATION_DEPTH", SWIG_From_int((int)(SVN_ERR_WC_INVALID_OPERATION_DEPTH)));
rb_define_const(mCore, "SVN_ERR_WC_PATH_ACCESS_DENIED", SWIG_From_int((int)(SVN_ERR_WC_PATH_ACCESS_DENIED)));
+ rb_define_const(mCore, "SVN_ERR_WC_MIXED_REVISIONS", SWIG_From_int((int)(SVN_ERR_WC_MIXED_REVISIONS)));
+ rb_define_const(mCore, "SVN_ERR_WC_DUPLICATE_EXTERNALS_TARGET", SWIG_From_int((int)(SVN_ERR_WC_DUPLICATE_EXTERNALS_TARGET)));
rb_define_const(mCore, "SVN_ERR_FS_GENERAL", SWIG_From_int((int)(SVN_ERR_FS_GENERAL)));
rb_define_const(mCore, "SVN_ERR_FS_CLEANUP", SWIG_From_int((int)(SVN_ERR_FS_CLEANUP)));
rb_define_const(mCore, "SVN_ERR_FS_ALREADY_OPEN", SWIG_From_int((int)(SVN_ERR_FS_ALREADY_OPEN)));
@@ -37131,6 +41891,9 @@ SWIGEXPORT void Init_core(void) {
rb_define_const(mCore, "SVN_ERR_FS_UNSUPPORTED_UPGRADE", SWIG_From_int((int)(SVN_ERR_FS_UNSUPPORTED_UPGRADE)));
rb_define_const(mCore, "SVN_ERR_FS_NO_SUCH_CHECKSUM_REP", SWIG_From_int((int)(SVN_ERR_FS_NO_SUCH_CHECKSUM_REP)));
rb_define_const(mCore, "SVN_ERR_FS_PROP_BASEVALUE_MISMATCH", SWIG_From_int((int)(SVN_ERR_FS_PROP_BASEVALUE_MISMATCH)));
+ rb_define_const(mCore, "SVN_ERR_FS_INCORRECT_EDITOR_COMPLETION", SWIG_From_int((int)(SVN_ERR_FS_INCORRECT_EDITOR_COMPLETION)));
+ rb_define_const(mCore, "SVN_ERR_FS_PACKED_REVPROP_READ_FAILURE", SWIG_From_int((int)(SVN_ERR_FS_PACKED_REVPROP_READ_FAILURE)));
+ rb_define_const(mCore, "SVN_ERR_FS_REVPROP_CACHE_INIT_FAILURE", SWIG_From_int((int)(SVN_ERR_FS_REVPROP_CACHE_INIT_FAILURE)));
rb_define_const(mCore, "SVN_ERR_REPOS_LOCKED", SWIG_From_int((int)(SVN_ERR_REPOS_LOCKED)));
rb_define_const(mCore, "SVN_ERR_REPOS_HOOK_FAILURE", SWIG_From_int((int)(SVN_ERR_REPOS_HOOK_FAILURE)));
rb_define_const(mCore, "SVN_ERR_REPOS_BAD_ARGS", SWIG_From_int((int)(SVN_ERR_REPOS_BAD_ARGS)));
@@ -37154,6 +41917,7 @@ SWIGEXPORT void Init_core(void) {
rb_define_const(mCore, "SVN_ERR_RA_UUID_MISMATCH", SWIG_From_int((int)(SVN_ERR_RA_UUID_MISMATCH)));
rb_define_const(mCore, "SVN_ERR_RA_REPOS_ROOT_URL_MISMATCH", SWIG_From_int((int)(SVN_ERR_RA_REPOS_ROOT_URL_MISMATCH)));
rb_define_const(mCore, "SVN_ERR_RA_SESSION_URL_MISMATCH", SWIG_From_int((int)(SVN_ERR_RA_SESSION_URL_MISMATCH)));
+ rb_define_const(mCore, "SVN_ERR_RA_CANNOT_CREATE_TUNNEL", SWIG_From_int((int)(SVN_ERR_RA_CANNOT_CREATE_TUNNEL)));
rb_define_const(mCore, "SVN_ERR_RA_DAV_SOCK_INIT", SWIG_From_int((int)(SVN_ERR_RA_DAV_SOCK_INIT)));
rb_define_const(mCore, "SVN_ERR_RA_DAV_CREATING_REQUEST", SWIG_From_int((int)(SVN_ERR_RA_DAV_CREATING_REQUEST)));
rb_define_const(mCore, "SVN_ERR_RA_DAV_REQUEST_FAILED", SWIG_From_int((int)(SVN_ERR_RA_DAV_REQUEST_FAILED)));
@@ -37170,36 +41934,12 @@ SWIGEXPORT void Init_core(void) {
rb_define_const(mCore, "SVN_ERR_RA_DAV_FORBIDDEN", SWIG_From_int((int)(SVN_ERR_RA_DAV_FORBIDDEN)));
rb_define_const(mCore, "SVN_ERR_RA_LOCAL_REPOS_NOT_FOUND", SWIG_From_int((int)(SVN_ERR_RA_LOCAL_REPOS_NOT_FOUND)));
rb_define_const(mCore, "SVN_ERR_RA_LOCAL_REPOS_OPEN_FAILED", SWIG_From_int((int)(SVN_ERR_RA_LOCAL_REPOS_OPEN_FAILED)));
- rb_define_const(mCore, "SVN_ERR_RA_SVN_CMD_ERR", SWIG_From_int((int)(SVN_ERR_RA_SVN_CMD_ERR)));
- rb_define_const(mCore, "SVN_ERR_RA_SVN_UNKNOWN_CMD", SWIG_From_int((int)(SVN_ERR_RA_SVN_UNKNOWN_CMD)));
- rb_define_const(mCore, "SVN_ERR_RA_SVN_CONNECTION_CLOSED", SWIG_From_int((int)(SVN_ERR_RA_SVN_CONNECTION_CLOSED)));
- rb_define_const(mCore, "SVN_ERR_RA_SVN_IO_ERROR", SWIG_From_int((int)(SVN_ERR_RA_SVN_IO_ERROR)));
- rb_define_const(mCore, "SVN_ERR_RA_SVN_MALFORMED_DATA", SWIG_From_int((int)(SVN_ERR_RA_SVN_MALFORMED_DATA)));
- rb_define_const(mCore, "SVN_ERR_RA_SVN_REPOS_NOT_FOUND", SWIG_From_int((int)(SVN_ERR_RA_SVN_REPOS_NOT_FOUND)));
- rb_define_const(mCore, "SVN_ERR_RA_SVN_BAD_VERSION", SWIG_From_int((int)(SVN_ERR_RA_SVN_BAD_VERSION)));
- rb_define_const(mCore, "SVN_ERR_RA_SVN_NO_MECHANISMS", SWIG_From_int((int)(SVN_ERR_RA_SVN_NO_MECHANISMS)));
- rb_define_const(mCore, "SVN_ERR_RA_SVN_EDIT_ABORTED", SWIG_From_int((int)(SVN_ERR_RA_SVN_EDIT_ABORTED)));
- rb_define_const(mCore, "SVN_ERR_RA_SERF_SSPI_INITIALISATION_FAILED", SWIG_From_int((int)(SVN_ERR_RA_SERF_SSPI_INITIALISATION_FAILED)));
- rb_define_const(mCore, "SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED", SWIG_From_int((int)(SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED)));
- rb_define_const(mCore, "SVN_ERR_RA_SERF_GSSAPI_INITIALISATION_FAILED", SWIG_From_int((int)(SVN_ERR_RA_SERF_GSSAPI_INITIALISATION_FAILED)));
- rb_define_const(mCore, "SVN_ERR_RA_SERF_WRAPPED_ERROR", SWIG_From_int((int)(SVN_ERR_RA_SERF_WRAPPED_ERROR)));
- rb_define_const(mCore, "SVN_ERR_AUTHN_CREDS_UNAVAILABLE", SWIG_From_int((int)(SVN_ERR_AUTHN_CREDS_UNAVAILABLE)));
- rb_define_const(mCore, "SVN_ERR_AUTHN_NO_PROVIDER", SWIG_From_int((int)(SVN_ERR_AUTHN_NO_PROVIDER)));
- rb_define_const(mCore, "SVN_ERR_AUTHN_PROVIDERS_EXHAUSTED", SWIG_From_int((int)(SVN_ERR_AUTHN_PROVIDERS_EXHAUSTED)));
- rb_define_const(mCore, "SVN_ERR_AUTHN_CREDS_NOT_SAVED", SWIG_From_int((int)(SVN_ERR_AUTHN_CREDS_NOT_SAVED)));
- rb_define_const(mCore, "SVN_ERR_AUTHN_FAILED", SWIG_From_int((int)(SVN_ERR_AUTHN_FAILED)));
- rb_define_const(mCore, "SVN_ERR_AUTHZ_ROOT_UNREADABLE", SWIG_From_int((int)(SVN_ERR_AUTHZ_ROOT_UNREADABLE)));
- rb_define_const(mCore, "SVN_ERR_AUTHZ_UNREADABLE", SWIG_From_int((int)(SVN_ERR_AUTHZ_UNREADABLE)));
- rb_define_const(mCore, "SVN_ERR_AUTHZ_PARTIALLY_READABLE", SWIG_From_int((int)(SVN_ERR_AUTHZ_PARTIALLY_READABLE)));
- rb_define_const(mCore, "SVN_ERR_AUTHZ_INVALID_CONFIG", SWIG_From_int((int)(SVN_ERR_AUTHZ_INVALID_CONFIG)));
- rb_define_const(mCore, "SVN_ERR_AUTHZ_UNWRITABLE", SWIG_From_int((int)(SVN_ERR_AUTHZ_UNWRITABLE)));
rb_define_const(mCore, "SVN_ERR_SVNDIFF_INVALID_HEADER", SWIG_From_int((int)(SVN_ERR_SVNDIFF_INVALID_HEADER)));
rb_define_const(mCore, "SVN_ERR_SVNDIFF_CORRUPT_WINDOW", SWIG_From_int((int)(SVN_ERR_SVNDIFF_CORRUPT_WINDOW)));
rb_define_const(mCore, "SVN_ERR_SVNDIFF_BACKWARD_VIEW", SWIG_From_int((int)(SVN_ERR_SVNDIFF_BACKWARD_VIEW)));
rb_define_const(mCore, "SVN_ERR_SVNDIFF_INVALID_OPS", SWIG_From_int((int)(SVN_ERR_SVNDIFF_INVALID_OPS)));
rb_define_const(mCore, "SVN_ERR_SVNDIFF_UNEXPECTED_END", SWIG_From_int((int)(SVN_ERR_SVNDIFF_UNEXPECTED_END)));
rb_define_const(mCore, "SVN_ERR_SVNDIFF_INVALID_COMPRESSED_DATA", SWIG_From_int((int)(SVN_ERR_SVNDIFF_INVALID_COMPRESSED_DATA)));
- rb_define_const(mCore, "SVN_ERR_DIFF_DATASOURCE_MODIFIED", SWIG_From_int((int)(SVN_ERR_DIFF_DATASOURCE_MODIFIED)));
rb_define_const(mCore, "SVN_ERR_APMOD_MISSING_PATH_TO_FS", SWIG_From_int((int)(SVN_ERR_APMOD_MISSING_PATH_TO_FS)));
rb_define_const(mCore, "SVN_ERR_APMOD_MALFORMED_URI", SWIG_From_int((int)(SVN_ERR_APMOD_MALFORMED_URI)));
rb_define_const(mCore, "SVN_ERR_APMOD_ACTIVITY_NOT_FOUND", SWIG_From_int((int)(SVN_ERR_APMOD_ACTIVITY_NOT_FOUND)));
@@ -37265,6 +42005,9 @@ SWIGEXPORT void Init_core(void) {
rb_define_const(mCore, "SVN_ERR_SQLITE_BUSY", SWIG_From_int((int)(SVN_ERR_SQLITE_BUSY)));
rb_define_const(mCore, "SVN_ERR_SQLITE_RESETTING_FOR_ROLLBACK", SWIG_From_int((int)(SVN_ERR_SQLITE_RESETTING_FOR_ROLLBACK)));
rb_define_const(mCore, "SVN_ERR_SQLITE_CONSTRAINT", SWIG_From_int((int)(SVN_ERR_SQLITE_CONSTRAINT)));
+ rb_define_const(mCore, "SVN_ERR_TOO_MANY_MEMCACHED_SERVERS", SWIG_From_int((int)(SVN_ERR_TOO_MANY_MEMCACHED_SERVERS)));
+ rb_define_const(mCore, "SVN_ERR_MALFORMED_VERSION_STRING", SWIG_From_int((int)(SVN_ERR_MALFORMED_VERSION_STRING)));
+ rb_define_const(mCore, "SVN_ERR_CORRUPTED_ATOMIC_STORAGE", SWIG_From_int((int)(SVN_ERR_CORRUPTED_ATOMIC_STORAGE)));
rb_define_const(mCore, "SVN_ERR_CL_ARG_PARSING_ERROR", SWIG_From_int((int)(SVN_ERR_CL_ARG_PARSING_ERROR)));
rb_define_const(mCore, "SVN_ERR_CL_INSUFFICIENT_ARGS", SWIG_From_int((int)(SVN_ERR_CL_INSUFFICIENT_ARGS)));
rb_define_const(mCore, "SVN_ERR_CL_MUTUALLY_EXCLUSIVE_ARGS", SWIG_From_int((int)(SVN_ERR_CL_MUTUALLY_EXCLUSIVE_ARGS)));
@@ -37277,6 +42020,30 @@ SWIGEXPORT void Init_core(void) {
rb_define_const(mCore, "SVN_ERR_CL_UNNECESSARY_LOG_MESSAGE", SWIG_From_int((int)(SVN_ERR_CL_UNNECESSARY_LOG_MESSAGE)));
rb_define_const(mCore, "SVN_ERR_CL_NO_EXTERNAL_MERGE_TOOL", SWIG_From_int((int)(SVN_ERR_CL_NO_EXTERNAL_MERGE_TOOL)));
rb_define_const(mCore, "SVN_ERR_CL_ERROR_PROCESSING_EXTERNALS", SWIG_From_int((int)(SVN_ERR_CL_ERROR_PROCESSING_EXTERNALS)));
+ rb_define_const(mCore, "SVN_ERR_RA_SVN_CMD_ERR", SWIG_From_int((int)(SVN_ERR_RA_SVN_CMD_ERR)));
+ rb_define_const(mCore, "SVN_ERR_RA_SVN_UNKNOWN_CMD", SWIG_From_int((int)(SVN_ERR_RA_SVN_UNKNOWN_CMD)));
+ rb_define_const(mCore, "SVN_ERR_RA_SVN_CONNECTION_CLOSED", SWIG_From_int((int)(SVN_ERR_RA_SVN_CONNECTION_CLOSED)));
+ rb_define_const(mCore, "SVN_ERR_RA_SVN_IO_ERROR", SWIG_From_int((int)(SVN_ERR_RA_SVN_IO_ERROR)));
+ rb_define_const(mCore, "SVN_ERR_RA_SVN_MALFORMED_DATA", SWIG_From_int((int)(SVN_ERR_RA_SVN_MALFORMED_DATA)));
+ rb_define_const(mCore, "SVN_ERR_RA_SVN_REPOS_NOT_FOUND", SWIG_From_int((int)(SVN_ERR_RA_SVN_REPOS_NOT_FOUND)));
+ rb_define_const(mCore, "SVN_ERR_RA_SVN_BAD_VERSION", SWIG_From_int((int)(SVN_ERR_RA_SVN_BAD_VERSION)));
+ rb_define_const(mCore, "SVN_ERR_RA_SVN_NO_MECHANISMS", SWIG_From_int((int)(SVN_ERR_RA_SVN_NO_MECHANISMS)));
+ rb_define_const(mCore, "SVN_ERR_RA_SVN_EDIT_ABORTED", SWIG_From_int((int)(SVN_ERR_RA_SVN_EDIT_ABORTED)));
+ rb_define_const(mCore, "SVN_ERR_AUTHN_CREDS_UNAVAILABLE", SWIG_From_int((int)(SVN_ERR_AUTHN_CREDS_UNAVAILABLE)));
+ rb_define_const(mCore, "SVN_ERR_AUTHN_NO_PROVIDER", SWIG_From_int((int)(SVN_ERR_AUTHN_NO_PROVIDER)));
+ rb_define_const(mCore, "SVN_ERR_AUTHN_PROVIDERS_EXHAUSTED", SWIG_From_int((int)(SVN_ERR_AUTHN_PROVIDERS_EXHAUSTED)));
+ rb_define_const(mCore, "SVN_ERR_AUTHN_CREDS_NOT_SAVED", SWIG_From_int((int)(SVN_ERR_AUTHN_CREDS_NOT_SAVED)));
+ rb_define_const(mCore, "SVN_ERR_AUTHN_FAILED", SWIG_From_int((int)(SVN_ERR_AUTHN_FAILED)));
+ rb_define_const(mCore, "SVN_ERR_AUTHZ_ROOT_UNREADABLE", SWIG_From_int((int)(SVN_ERR_AUTHZ_ROOT_UNREADABLE)));
+ rb_define_const(mCore, "SVN_ERR_AUTHZ_UNREADABLE", SWIG_From_int((int)(SVN_ERR_AUTHZ_UNREADABLE)));
+ rb_define_const(mCore, "SVN_ERR_AUTHZ_PARTIALLY_READABLE", SWIG_From_int((int)(SVN_ERR_AUTHZ_PARTIALLY_READABLE)));
+ rb_define_const(mCore, "SVN_ERR_AUTHZ_INVALID_CONFIG", SWIG_From_int((int)(SVN_ERR_AUTHZ_INVALID_CONFIG)));
+ rb_define_const(mCore, "SVN_ERR_AUTHZ_UNWRITABLE", SWIG_From_int((int)(SVN_ERR_AUTHZ_UNWRITABLE)));
+ rb_define_const(mCore, "SVN_ERR_DIFF_DATASOURCE_MODIFIED", SWIG_From_int((int)(SVN_ERR_DIFF_DATASOURCE_MODIFIED)));
+ rb_define_const(mCore, "SVN_ERR_RA_SERF_SSPI_INITIALISATION_FAILED", SWIG_From_int((int)(SVN_ERR_RA_SERF_SSPI_INITIALISATION_FAILED)));
+ rb_define_const(mCore, "SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED", SWIG_From_int((int)(SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED)));
+ rb_define_const(mCore, "SVN_ERR_RA_SERF_GSSAPI_INITIALISATION_FAILED", SWIG_From_int((int)(SVN_ERR_RA_SERF_GSSAPI_INITIALISATION_FAILED)));
+ rb_define_const(mCore, "SVN_ERR_RA_SERF_WRAPPED_ERROR", SWIG_From_int((int)(SVN_ERR_RA_SERF_WRAPPED_ERROR)));
rb_define_const(mCore, "SVN_ERR_ASSERTION_FAIL", SWIG_From_int((int)(SVN_ERR_ASSERTION_FAIL)));
rb_define_const(mCore, "SVN_ERR_ASSERTION_ONLY_TRACING_LINKS", SWIG_From_int((int)(SVN_ERR_ASSERTION_ONLY_TRACING_LINKS)));
rb_define_const(mCore, "SVN_ERR_LAST", SWIG_From_int((int)(SVN_ERR_LAST)));
@@ -37286,6 +42053,8 @@ SWIGEXPORT void Init_core(void) {
rb_define_module_function(mCore, "svn_parse_date", _wrap_svn_parse_date, -1);
rb_define_module_function(mCore, "svn_sleep_for_timestamps", _wrap_svn_sleep_for_timestamps, -1);
rb_define_const(mCore, "SVN_UNALIGNED_ACCESS_IS_OK", SWIG_From_int((int)(0)));
+ rb_define_const(mCore, "TRUE", SWIG_From_int((int)(1)));
+ rb_define_const(mCore, "FALSE", SWIG_From_int((int)(0)));
SwigClassSvn_error_t.klass = rb_define_class_under(mCore, "Svn_error_t", rb_cObject);
SWIG_TypeClientData(SWIGTYPE_p_svn_error_t, (void *) &SwigClassSvn_error_t);
@@ -37311,6 +42080,7 @@ SWIGEXPORT void Init_core(void) {
rb_define_const(mCore, "Svn_node_file", SWIG_From_int((int)(svn_node_file)));
rb_define_const(mCore, "Svn_node_dir", SWIG_From_int((int)(svn_node_dir)));
rb_define_const(mCore, "Svn_node_unknown", SWIG_From_int((int)(svn_node_unknown)));
+ rb_define_const(mCore, "Svn_node_symlink", SWIG_From_int((int)(svn_node_symlink)));
rb_define_module_function(mCore, "svn_node_kind_to_word", _wrap_svn_node_kind_to_word, -1);
rb_define_module_function(mCore, "svn_node_kind_from_word", _wrap_svn_node_kind_from_word, -1);
rb_define_const(mCore, "Svn_tristate_false", SWIG_From_int((int)(svn_tristate_false)));
@@ -37320,8 +42090,6 @@ SWIGEXPORT void Init_core(void) {
rb_define_module_function(mCore, "svn_tristate__from_word", _wrap_svn_tristate__from_word, -1);
rb_define_module_function(mCore, "svn_revnum_parse", _wrap_svn_revnum_parse, -1);
rb_define_const(mCore, "SVN_REVNUM_T_FMT", SWIG_FromCharPtr("ld"));
- rb_define_const(mCore, "TRUE", SWIG_From_int((int)(1)));
- rb_define_const(mCore, "FALSE", SWIG_From_int((int)(0)));
rb_define_const(mCore, "Svn_nonrecursive", SWIG_From_int((int)(svn_nonrecursive)));
rb_define_const(mCore, "Svn_recursive", SWIG_From_int((int)(svn_recursive)));
rb_define_const(mCore, "Svn_depth_unknown", SWIG_From_int((int)(svn_depth_unknown)));
@@ -37358,6 +42126,7 @@ SWIGEXPORT void Init_core(void) {
SwigClassSvn_dirent_t.destroy = (void (*)(void *)) free_svn_dirent_t;
SwigClassSvn_dirent_t.trackObjects = 0;
rb_define_module_function(mCore, "svn_dirent_dup", _wrap_svn_dirent_dup, -1);
+ rb_define_module_function(mCore, "svn_dirent_create", _wrap_svn_dirent_create, -1);
rb_define_const(mCore, "SVN_KEYWORD_MAX_LEN", SWIG_From_int((int)(255)));
rb_define_const(mCore, "SVN_KEYWORD_REVISION_LONG", SWIG_FromCharPtr("LastChangedRevision"));
rb_define_const(mCore, "SVN_KEYWORD_REVISION_SHORT", SWIG_FromCharPtr("Rev"));
@@ -37518,17 +42287,18 @@ SWIGEXPORT void Init_core(void) {
rb_define_module_function(mCore, "svn_location_invoke_segment_receiver", _wrap_svn_location_invoke_segment_receiver, -1);
rb_define_const(mCore, "SVN_ALLOCATOR_RECOMMENDED_MAX_FREE", SWIG_From_int((int)((4096*1024))));
rb_define_module_function(mCore, "svn_pool_create", _wrap_svn_pool_create, -1);
+ rb_define_module_function(mCore, "svn_pool_create_allocator", _wrap_svn_pool_create_allocator, -1);
rb_define_const(mCore, "SVN_VER_MAJOR", SWIG_From_int((int)(1)));
- rb_define_const(mCore, "SVN_VER_MINOR", SWIG_From_int((int)(7)));
- rb_define_const(mCore, "SVN_VER_PATCH", SWIG_From_int((int)(6)));
- rb_define_const(mCore, "SVN_VER_MICRO", SWIG_From_int((int)(6)));
+ rb_define_const(mCore, "SVN_VER_MINOR", SWIG_From_int((int)(8)));
+ rb_define_const(mCore, "SVN_VER_PATCH", SWIG_From_int((int)(13)));
+ rb_define_const(mCore, "SVN_VER_MICRO", SWIG_From_int((int)(13)));
rb_define_const(mCore, "SVN_VER_LIBRARY", SWIG_From_int((int)(1)));
- rb_define_const(mCore, "SVN_VER_TAG", SWIG_FromCharPtr(" (r1370777)"));
+ rb_define_const(mCore, "SVN_VER_TAG", SWIG_FromCharPtr(" (r1667537)"));
rb_define_const(mCore, "SVN_VER_NUMTAG", SWIG_FromCharPtr(""));
- rb_define_const(mCore, "SVN_VER_REVISION", SWIG_From_int((int)(1370777)));
- rb_define_const(mCore, "SVN_VER_NUM", SWIG_FromCharPtr("1.7.6"));
- rb_define_const(mCore, "SVN_VER_NUMBER", SWIG_FromCharPtr("1.7.6"));
- rb_define_const(mCore, "SVN_VERSION", SWIG_FromCharPtr("1.7.6 (r1370777)"));
+ rb_define_const(mCore, "SVN_VER_REVISION", SWIG_From_int((int)(1667537)));
+ rb_define_const(mCore, "SVN_VER_NUM", SWIG_FromCharPtr("1.8.13"));
+ rb_define_const(mCore, "SVN_VER_NUMBER", SWIG_FromCharPtr("1.8.13"));
+ rb_define_const(mCore, "SVN_VERSION", SWIG_FromCharPtr("1.8.13 (r1667537)"));
SwigClassSvn_version_t.klass = rb_define_class_under(mCore, "Svn_version_t", rb_cObject);
SWIG_TypeClientData(SWIGTYPE_p_svn_version_t, (void *) &SwigClassSvn_version_t);
@@ -37561,10 +42331,57 @@ SWIGEXPORT void Init_core(void) {
SwigClassSvn_version_checklist_t.trackObjects = 0;
rb_define_module_function(mCore, "svn_ver_check_list", _wrap_svn_ver_check_list, -1);
rb_define_module_function(mCore, "svn_subr_version", _wrap_svn_subr_version, -1);
+ rb_define_module_function(mCore, "svn_version_extended", _wrap_svn_version_extended, -1);
+ rb_define_module_function(mCore, "svn_version_ext_build_date", _wrap_svn_version_ext_build_date, -1);
+ rb_define_module_function(mCore, "svn_version_ext_build_time", _wrap_svn_version_ext_build_time, -1);
+ rb_define_module_function(mCore, "svn_version_ext_build_host", _wrap_svn_version_ext_build_host, -1);
+ rb_define_module_function(mCore, "svn_version_ext_copyright", _wrap_svn_version_ext_copyright, -1);
+ rb_define_module_function(mCore, "svn_version_ext_runtime_host", _wrap_svn_version_ext_runtime_host, -1);
+ rb_define_module_function(mCore, "svn_version_ext_runtime_osname", _wrap_svn_version_ext_runtime_osname, -1);
+
+ SwigClassSvn_version_ext_linked_lib_t.klass = rb_define_class_under(mCore, "Svn_version_ext_linked_lib_t", rb_cObject);
+ SWIG_TypeClientData(SWIGTYPE_p_svn_version_ext_linked_lib_t, (void *) &SwigClassSvn_version_ext_linked_lib_t);
+ rb_define_alloc_func(SwigClassSvn_version_ext_linked_lib_t.klass, _wrap_svn_version_ext_linked_lib_t_allocate);
+ rb_define_method(SwigClassSvn_version_ext_linked_lib_t.klass, "initialize", _wrap_new_svn_version_ext_linked_lib_t, -1);
+ rb_define_method(SwigClassSvn_version_ext_linked_lib_t.klass, "name=", _wrap_svn_version_ext_linked_lib_t_name_set, -1);
+ rb_define_method(SwigClassSvn_version_ext_linked_lib_t.klass, "name", _wrap_svn_version_ext_linked_lib_t_name_get, -1);
+ rb_define_method(SwigClassSvn_version_ext_linked_lib_t.klass, "compiled_version=", _wrap_svn_version_ext_linked_lib_t_compiled_version_set, -1);
+ rb_define_method(SwigClassSvn_version_ext_linked_lib_t.klass, "compiled_version", _wrap_svn_version_ext_linked_lib_t_compiled_version_get, -1);
+ rb_define_method(SwigClassSvn_version_ext_linked_lib_t.klass, "runtime_version=", _wrap_svn_version_ext_linked_lib_t_runtime_version_set, -1);
+ rb_define_method(SwigClassSvn_version_ext_linked_lib_t.klass, "runtime_version", _wrap_svn_version_ext_linked_lib_t_runtime_version_get, -1);
+ SwigClassSvn_version_ext_linked_lib_t.mark = 0;
+ SwigClassSvn_version_ext_linked_lib_t.destroy = (void (*)(void *)) free_svn_version_ext_linked_lib_t;
+ SwigClassSvn_version_ext_linked_lib_t.trackObjects = 0;
+ rb_define_module_function(mCore, "svn_version_ext_linked_libs", _wrap_svn_version_ext_linked_libs, -1);
+
+ SwigClassSvn_version_ext_loaded_lib_t.klass = rb_define_class_under(mCore, "Svn_version_ext_loaded_lib_t", rb_cObject);
+ SWIG_TypeClientData(SWIGTYPE_p_svn_version_ext_loaded_lib_t, (void *) &SwigClassSvn_version_ext_loaded_lib_t);
+ rb_define_alloc_func(SwigClassSvn_version_ext_loaded_lib_t.klass, _wrap_svn_version_ext_loaded_lib_t_allocate);
+ rb_define_method(SwigClassSvn_version_ext_loaded_lib_t.klass, "initialize", _wrap_new_svn_version_ext_loaded_lib_t, -1);
+ rb_define_method(SwigClassSvn_version_ext_loaded_lib_t.klass, "name=", _wrap_svn_version_ext_loaded_lib_t_name_set, -1);
+ rb_define_method(SwigClassSvn_version_ext_loaded_lib_t.klass, "name", _wrap_svn_version_ext_loaded_lib_t_name_get, -1);
+ rb_define_method(SwigClassSvn_version_ext_loaded_lib_t.klass, "version=", _wrap_svn_version_ext_loaded_lib_t_version_set, -1);
+ rb_define_method(SwigClassSvn_version_ext_loaded_lib_t.klass, "version", _wrap_svn_version_ext_loaded_lib_t_version_get, -1);
+ SwigClassSvn_version_ext_loaded_lib_t.mark = 0;
+ SwigClassSvn_version_ext_loaded_lib_t.destroy = (void (*)(void *)) free_svn_version_ext_loaded_lib_t;
+ SwigClassSvn_version_ext_loaded_lib_t.trackObjects = 0;
+ rb_define_module_function(mCore, "svn_version_ext_loaded_libs", _wrap_svn_version_ext_loaded_libs, -1);
rb_define_module_function(mCore, "svn_version_checklist_invoke_version_query", _wrap_svn_version_checklist_invoke_version_query, -1);
rb_define_module_function(mCore, "svn_version_invoke_func", _wrap_svn_version_invoke_func, -1);
rb_define_module_function(mCore, "svn_prop_dup", _wrap_svn_prop_dup, -1);
rb_define_module_function(mCore, "svn_prop_array_dup", _wrap_svn_prop_array_dup, -1);
+
+ SwigClassSvn_prop_inherited_item_t.klass = rb_define_class_under(mCore, "Svn_prop_inherited_item_t", rb_cObject);
+ SWIG_TypeClientData(SWIGTYPE_p_svn_prop_inherited_item_t, (void *) &SwigClassSvn_prop_inherited_item_t);
+ rb_define_alloc_func(SwigClassSvn_prop_inherited_item_t.klass, _wrap_svn_prop_inherited_item_t_allocate);
+ rb_define_method(SwigClassSvn_prop_inherited_item_t.klass, "initialize", _wrap_new_svn_prop_inherited_item_t, -1);
+ rb_define_method(SwigClassSvn_prop_inherited_item_t.klass, "path_or_url=", _wrap_svn_prop_inherited_item_t_path_or_url_set, -1);
+ rb_define_method(SwigClassSvn_prop_inherited_item_t.klass, "path_or_url", _wrap_svn_prop_inherited_item_t_path_or_url_get, -1);
+ rb_define_method(SwigClassSvn_prop_inherited_item_t.klass, "prop_hash=", _wrap_svn_prop_inherited_item_t_prop_hash_set, -1);
+ rb_define_method(SwigClassSvn_prop_inherited_item_t.klass, "prop_hash", _wrap_svn_prop_inherited_item_t_prop_hash_get, -1);
+ SwigClassSvn_prop_inherited_item_t.mark = 0;
+ SwigClassSvn_prop_inherited_item_t.destroy = (void (*)(void *)) free_svn_prop_inherited_item_t;
+ SwigClassSvn_prop_inherited_item_t.trackObjects = 0;
rb_define_module_function(mCore, "svn_prop_hash_to_array", _wrap_svn_prop_hash_to_array, -1);
rb_define_module_function(mCore, "svn_prop_array_to_hash", _wrap_svn_prop_array_to_hash, -1);
rb_define_module_function(mCore, "svn_prop_hash_dup", _wrap_svn_prop_hash_dup, -1);
@@ -37572,10 +42389,15 @@ SWIGEXPORT void Init_core(void) {
rb_define_const(mCore, "Svn_prop_entry_kind", SWIG_From_int((int)(svn_prop_entry_kind)));
rb_define_const(mCore, "Svn_prop_wc_kind", SWIG_From_int((int)(svn_prop_wc_kind)));
rb_define_const(mCore, "Svn_prop_regular_kind", SWIG_From_int((int)(svn_prop_regular_kind)));
+ rb_define_module_function(mCore, "svn_property_kind2", _wrap_svn_property_kind2, -1);
rb_define_module_function(mCore, "svn_property_kind", _wrap_svn_property_kind, -1);
rb_define_module_function(mCore, "svn_prop_is_svn_prop", _wrap_svn_prop_is_svn_prop, -1);
rb_define_module_function(mCore, "svn_prop_has_svn_prop", _wrap_svn_prop_has_svn_prop, -1);
rb_define_module_function(mCore, "svn_prop_is_boolean", _wrap_svn_prop_is_boolean, -1);
+ rb_define_module_function(mCore, "svn_prop_is_known_svn_rev_prop", _wrap_svn_prop_is_known_svn_rev_prop, -1);
+ rb_define_module_function(mCore, "svn_prop_is_known_svn_node_prop", _wrap_svn_prop_is_known_svn_node_prop, -1);
+ rb_define_module_function(mCore, "svn_prop_is_known_svn_file_prop", _wrap_svn_prop_is_known_svn_file_prop, -1);
+ rb_define_module_function(mCore, "svn_prop_is_known_svn_dir_prop", _wrap_svn_prop_is_known_svn_dir_prop, -1);
rb_define_module_function(mCore, "svn_prop_needs_translation", _wrap_svn_prop_needs_translation, -1);
rb_define_module_function(mCore, "svn_categorize_props", _wrap_svn_categorize_props, -1);
rb_define_module_function(mCore, "svn_prop_diffs", _wrap_svn_prop_diffs, -1);
@@ -37594,6 +42416,8 @@ SWIGEXPORT void Init_core(void) {
rb_define_const(mCore, "SVN_PROP_SPECIAL_VALUE", SWIG_FromCharPtr("*"));
rb_define_const(mCore, "SVN_PROP_EXTERNALS", SWIG_FromCharPtr("svn:externals"));
rb_define_const(mCore, "SVN_PROP_MERGEINFO", SWIG_FromCharPtr("svn:mergeinfo"));
+ rb_define_const(mCore, "SVN_PROP_INHERITABLE_AUTO_PROPS", SWIG_FromCharPtr("svn:auto-props"));
+ rb_define_const(mCore, "SVN_PROP_INHERITABLE_IGNORES", SWIG_FromCharPtr("svn:global-ignores"));
rb_define_const(mCore, "SVN_PROP_TEXT_TIME", SWIG_FromCharPtr("svn:text-time"));
rb_define_const(mCore, "SVN_PROP_OWNER", SWIG_FromCharPtr("svn:owner"));
rb_define_const(mCore, "SVN_PROP_GROUP", SWIG_FromCharPtr("svn:group"));
@@ -37617,6 +42441,10 @@ SWIGEXPORT void Init_core(void) {
rb_define_const(mCore, "SVNSYNC_PROP_FROM_UUID", SWIG_FromCharPtr("svn:sync-from-uuid"));
rb_define_const(mCore, "SVNSYNC_PROP_LAST_MERGED_REV", SWIG_FromCharPtr("svn:sync-last-merged-rev"));
rb_define_const(mCore, "SVNSYNC_PROP_CURRENTLY_COPYING", SWIG_FromCharPtr("svn:sync-currently-copying"));
+ rb_define_const(mCore, "SVN_PROP_TXN_PREFIX", SWIG_FromCharPtr("svn:txn-"));
+ rb_define_const(mCore, "SVN_PROP_TXN_CLIENT_COMPAT_VERSION", SWIG_FromCharPtr("svn:txn-client-compat-version"));
+ rb_define_const(mCore, "SVN_PROP_TXN_USER_AGENT", SWIG_FromCharPtr("svn:txn-user-agent"));
+ rb_define_const(mCore, "SVN_PROP_REVISION_PREFIX", SWIG_FromCharPtr("svn:revision-"));
rb_define_const(mCore, "SVN_OPT_MAX_ALIASES", SWIG_From_int((int)(3)));
rb_define_const(mCore, "SVN_OPT_MAX_OPTIONS", SWIG_From_int((int)(50)));
rb_define_const(mCore, "SVN_OPT_FIRST_LONGOPT_ID", SWIG_From_int((int)(256)));
@@ -37731,9 +42559,12 @@ SWIGEXPORT void Init_core(void) {
rb_define_module_function(mCore, "svn_opt_parse_revprop", _wrap_svn_opt_parse_revprop, -1);
rb_define_module_function(mCore, "svn_opt_push_implicit_dot_target", _wrap_svn_opt_push_implicit_dot_target, -1);
rb_define_module_function(mCore, "svn_opt_parse_path", _wrap_svn_opt_parse_path, -1);
+ rb_define_module_function(mCore, "svn_opt_print_help4", _wrap_svn_opt_print_help4, -1);
rb_define_module_function(mCore, "svn_opt_print_help3", _wrap_svn_opt_print_help3, -1);
rb_define_module_function(mCore, "svn_opt_print_help2", _wrap_svn_opt_print_help2, -1);
rb_define_module_function(mCore, "svn_opt_print_help", _wrap_svn_opt_print_help, -1);
+ rb_define_module_function(mCore, "svn_cmdline_init", _wrap_svn_cmdline_init, -1);
+ rb_define_module_function(mCore, "svn_cmdline_create_auth_baton", _wrap_svn_cmdline_create_auth_baton, -1);
SwigClassSvn_auth_provider_t.klass = rb_define_class_under(mCore, "Svn_auth_provider_t", rb_cObject);
SWIG_TypeClientData(SWIGTYPE_p_svn_auth_provider_t, (void *) &SwigClassSvn_auth_provider_t);
@@ -37876,6 +42707,7 @@ SWIGEXPORT void Init_core(void) {
rb_define_module_function(mCore, "svn_auth_first_credentials", _wrap_svn_auth_first_credentials, -1);
rb_define_module_function(mCore, "svn_auth_next_credentials", _wrap_svn_auth_next_credentials, -1);
rb_define_module_function(mCore, "svn_auth_save_credentials", _wrap_svn_auth_save_credentials, -1);
+ rb_define_module_function(mCore, "svn_auth_forget_credentials", _wrap_svn_auth_forget_credentials, -1);
rb_define_module_function(mCore, "svn_auth_get_simple_prompt_provider", _wrap_svn_auth_get_simple_prompt_provider, -1);
rb_define_module_function(mCore, "svn_auth_get_username_prompt_provider", _wrap_svn_auth_get_username_prompt_provider, -1);
rb_define_module_function(mCore, "svn_auth_get_simple_provider2", _wrap_svn_auth_get_simple_provider2, -1);
@@ -37928,11 +42760,14 @@ SWIGEXPORT void Init_core(void) {
rb_define_const(mCore, "SVN_CONFIG_OPTION_STORE_SSL_CLIENT_CERT_PP", SWIG_FromCharPtr("store-ssl-client-cert-pp"));
rb_define_const(mCore, "SVN_CONFIG_OPTION_STORE_SSL_CLIENT_CERT_PP_PLAINTEXT", SWIG_FromCharPtr("store-ssl-client-cert-pp-plaintext"));
rb_define_const(mCore, "SVN_CONFIG_OPTION_USERNAME", SWIG_FromCharPtr("username"));
+ rb_define_const(mCore, "SVN_CONFIG_OPTION_HTTP_BULK_UPDATES", SWIG_FromCharPtr("http-bulk-updates"));
+ rb_define_const(mCore, "SVN_CONFIG_OPTION_HTTP_MAX_CONNECTIONS", SWIG_FromCharPtr("http-max-connections"));
rb_define_const(mCore, "SVN_CONFIG_CATEGORY_CONFIG", SWIG_FromCharPtr("config"));
rb_define_const(mCore, "SVN_CONFIG_SECTION_AUTH", SWIG_FromCharPtr("auth"));
rb_define_const(mCore, "SVN_CONFIG_OPTION_PASSWORD_STORES", SWIG_FromCharPtr("password-stores"));
rb_define_const(mCore, "SVN_CONFIG_OPTION_KWALLET_WALLET", SWIG_FromCharPtr("kwallet-wallet"));
rb_define_const(mCore, "SVN_CONFIG_OPTION_KWALLET_SVN_APPLICATION_NAME_WITH_PID", SWIG_FromCharPtr("kwallet-svn-application-name-with-pid"));
+ rb_define_const(mCore, "SVN_CONFIG_OPTION_SSL_CLIENT_CERT_FILE_PROMPT", SWIG_FromCharPtr("ssl-client-cert-file-prompt"));
rb_define_const(mCore, "SVN_CONFIG_SECTION_HELPERS", SWIG_FromCharPtr("helpers"));
rb_define_const(mCore, "SVN_CONFIG_OPTION_EDITOR_CMD", SWIG_FromCharPtr("editor-cmd"));
rb_define_const(mCore, "SVN_CONFIG_OPTION_DIFF_CMD", SWIG_FromCharPtr("diff-cmd"));
@@ -37953,21 +42788,26 @@ SWIGEXPORT void Init_core(void) {
rb_define_const(mCore, "SVN_CONFIG_OPTION_MEMORY_CACHE_SIZE", SWIG_FromCharPtr("memory-cache-size"));
rb_define_const(mCore, "SVN_CONFIG_SECTION_TUNNELS", SWIG_FromCharPtr("tunnels"));
rb_define_const(mCore, "SVN_CONFIG_SECTION_AUTO_PROPS", SWIG_FromCharPtr("auto-props"));
+ rb_define_const(mCore, "SVN_CONFIG_SECTION_WORKING_COPY", SWIG_FromCharPtr("working-copy"));
+ rb_define_const(mCore, "SVN_CONFIG_OPTION_SQLITE_EXCLUSIVE", SWIG_FromCharPtr("exclusive-locking"));
+ rb_define_const(mCore, "SVN_CONFIG_OPTION_SQLITE_EXCLUSIVE_CLIENTS", SWIG_FromCharPtr("exclusive-locking-clients"));
rb_define_const(mCore, "SVN_CONFIG_SECTION_GENERAL", SWIG_FromCharPtr("general"));
rb_define_const(mCore, "SVN_CONFIG_OPTION_ANON_ACCESS", SWIG_FromCharPtr("anon-access"));
rb_define_const(mCore, "SVN_CONFIG_OPTION_AUTH_ACCESS", SWIG_FromCharPtr("auth-access"));
rb_define_const(mCore, "SVN_CONFIG_OPTION_PASSWORD_DB", SWIG_FromCharPtr("password-db"));
rb_define_const(mCore, "SVN_CONFIG_OPTION_REALM", SWIG_FromCharPtr("realm"));
rb_define_const(mCore, "SVN_CONFIG_OPTION_AUTHZ_DB", SWIG_FromCharPtr("authz-db"));
+ rb_define_const(mCore, "SVN_CONFIG_OPTION_GROUPS_DB", SWIG_FromCharPtr("groups-db"));
rb_define_const(mCore, "SVN_CONFIG_OPTION_FORCE_USERNAME_CASE", SWIG_FromCharPtr("force-username-case"));
+ rb_define_const(mCore, "SVN_CONFIG_OPTION_HOOKS_ENV", SWIG_FromCharPtr("hooks-env"));
rb_define_const(mCore, "SVN_CONFIG_SECTION_SASL", SWIG_FromCharPtr("sasl"));
rb_define_const(mCore, "SVN_CONFIG_OPTION_USE_SASL", SWIG_FromCharPtr("use-sasl"));
rb_define_const(mCore, "SVN_CONFIG_OPTION_MIN_SSF", SWIG_FromCharPtr("min-encryption"));
rb_define_const(mCore, "SVN_CONFIG_OPTION_MAX_SSF", SWIG_FromCharPtr("max-encryption"));
rb_define_const(mCore, "SVN_CONFIG_SECTION_USERS", SWIG_FromCharPtr("users"));
- rb_define_const(mCore, "SVN_CONFIG__DEFAULT_GLOBAL_IGNORES_LINE_1", SWIG_FromCharPtr("*.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo"));
+ rb_define_const(mCore, "SVN_CONFIG__DEFAULT_GLOBAL_IGNORES_LINE_1", SWIG_FromCharPtr("*.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo __pycache__"));
rb_define_const(mCore, "SVN_CONFIG__DEFAULT_GLOBAL_IGNORES_LINE_2", SWIG_FromCharPtr("*.rej *~ #*# .#* .*.swp .DS_Store"));
- rb_define_const(mCore, "SVN_CONFIG_DEFAULT_GLOBAL_IGNORES", SWIG_FromCharPtr("*.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo *.rej *~ #*# .#* .*.swp .DS_Store"));
+ rb_define_const(mCore, "SVN_CONFIG_DEFAULT_GLOBAL_IGNORES", SWIG_FromCharPtr("*.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo __pycache__ *.rej *~ #*# .#* .*.swp .DS_Store"));
rb_define_const(mCore, "SVN_CONFIG_TRUE", SWIG_FromCharPtr("TRUE"));
rb_define_const(mCore, "SVN_CONFIG_FALSE", SWIG_FromCharPtr("FALSE"));
rb_define_const(mCore, "SVN_CONFIG_ASK", SWIG_FromCharPtr("ASK"));
@@ -37976,16 +42816,23 @@ SWIGEXPORT void Init_core(void) {
rb_define_const(mCore, "SVN_CONFIG_DEFAULT_OPTION_STORE_AUTH_CREDS", SWIG_From_int((int)(1)));
rb_define_const(mCore, "SVN_CONFIG_DEFAULT_OPTION_STORE_SSL_CLIENT_CERT_PP", SWIG_From_int((int)(1)));
rb_define_const(mCore, "SVN_CONFIG_DEFAULT_OPTION_STORE_SSL_CLIENT_CERT_PP_PLAINTEXT", SWIG_FromCharPtr("ASK"));
+ rb_define_const(mCore, "SVN_CONFIG_DEFAULT_OPTION_HTTP_MAX_CONNECTIONS", SWIG_From_int((int)(4)));
rb_define_module_function(mCore, "svn_config_get_config", _wrap_svn_config_get_config, -1);
+ rb_define_module_function(mCore, "svn_config_create2", _wrap_svn_config_create2, -1);
rb_define_module_function(mCore, "svn_config_create", _wrap_svn_config_create, -1);
+ rb_define_module_function(mCore, "svn_config_read3", _wrap_svn_config_read3, -1);
rb_define_module_function(mCore, "svn_config_read2", _wrap_svn_config_read2, -1);
rb_define_module_function(mCore, "svn_config_read", _wrap_svn_config_read, -1);
+ rb_define_module_function(mCore, "svn_config_parse", _wrap_svn_config_parse, -1);
rb_define_module_function(mCore, "svn_config_merge", _wrap_svn_config_merge, -1);
rb_define_module_function(mCore, "svn_config_get", _wrap_svn_config_get, -1);
rb_define_module_function(mCore, "svn_config_set", _wrap_svn_config_set, -1);
rb_define_module_function(mCore, "svn_config_get_bool", _wrap_svn_config_get_bool, -1);
rb_define_module_function(mCore, "svn_config_set_bool", _wrap_svn_config_set_bool, -1);
+ rb_define_module_function(mCore, "svn_config_get_int64", _wrap_svn_config_get_int64, -1);
+ rb_define_module_function(mCore, "svn_config_set_int64", _wrap_svn_config_set_int64, -1);
rb_define_module_function(mCore, "svn_config_get_yes_no_ask", _wrap_svn_config_get_yes_no_ask, -1);
+ rb_define_module_function(mCore, "svn_config_get_tristate", _wrap_svn_config_get_tristate, -1);
rb_define_module_function(mCore, "svn_config_enumerate_sections", _wrap_svn_config_enumerate_sections, -1);
rb_define_module_function(mCore, "svn_config_enumerate_sections2", _wrap_svn_config_enumerate_sections2, -1);
rb_define_module_function(mCore, "svn_config_enumerate", _wrap_svn_config_enumerate, -1);
@@ -37999,11 +42846,16 @@ SWIGEXPORT void Init_core(void) {
rb_define_const(mCore, "SVN_CONFIG_REALMSTRING_KEY", SWIG_FromCharPtr("svn:realmstring"));
rb_define_module_function(mCore, "svn_config_read_auth_data", _wrap_svn_config_read_auth_data, -1);
rb_define_module_function(mCore, "svn_config_write_auth_data", _wrap_svn_config_write_auth_data, -1);
+ rb_define_module_function(mCore, "svn_config_walk_auth_data", _wrap_svn_config_walk_auth_data, -1);
rb_define_module_function(mCore, "svn_config_get_user_config_path", _wrap_svn_config_get_user_config_path, -1);
+ rb_define_module_function(mCore, "svn_config_dup", _wrap_svn_config_dup, -1);
+ rb_define_module_function(mCore, "svn_config_copy_config", _wrap_svn_config_copy_config, -1);
rb_define_module_function(mCore, "svn_config_invoke_section_enumerator", _wrap_svn_config_invoke_section_enumerator, -1);
rb_define_module_function(mCore, "svn_config_invoke_section_enumerator2", _wrap_svn_config_invoke_section_enumerator2, -1);
rb_define_module_function(mCore, "svn_config_invoke_enumerator", _wrap_svn_config_invoke_enumerator, -1);
rb_define_module_function(mCore, "svn_config_invoke_enumerator2", _wrap_svn_config_invoke_enumerator2, -1);
+ rb_define_module_function(mCore, "svn_config_invoke_auth_walk_func", _wrap_svn_config_invoke_auth_walk_func, -1);
+ rb_define_module_function(mCore, "svn_utf_initialize2", _wrap_svn_utf_initialize2, -1);
rb_define_module_function(mCore, "svn_utf_initialize", _wrap_svn_utf_initialize, -1);
rb_define_module_function(mCore, "svn_utf_stringbuf_to_utf8", _wrap_svn_utf_stringbuf_to_utf8, -1);
rb_define_module_function(mCore, "svn_utf_string_to_utf8", _wrap_svn_utf_string_to_utf8, -1);
@@ -38018,6 +42870,7 @@ SWIGEXPORT void Init_core(void) {
rb_define_module_function(mCore, "svn_utf_cstring_from_utf8_fuzzy", _wrap_svn_utf_cstring_from_utf8_fuzzy, -1);
rb_define_module_function(mCore, "svn_utf_cstring_from_utf8_stringbuf", _wrap_svn_utf_cstring_from_utf8_stringbuf, -1);
rb_define_module_function(mCore, "svn_utf_cstring_from_utf8_string", _wrap_svn_utf_cstring_from_utf8_string, -1);
+ rb_define_module_function(mCore, "svn_utf_cstring_utf8_width", _wrap_svn_utf_cstring_utf8_width, -1);
rb_define_module_function(mCore, "svn_nls_init", _wrap_svn_nls_init, -1);
rb_define_module_function(mCore, "svn_path_internal_style", _wrap_svn_path_internal_style, -1);
rb_define_module_function(mCore, "svn_path_local_style", _wrap_svn_path_local_style, -1);
@@ -38032,6 +42885,9 @@ SWIGEXPORT void Init_core(void) {
rb_define_module_function(mCore, "svn_path_is_url", _wrap_svn_path_is_url, -1);
rb_define_module_function(mCore, "svn_path_is_uri_safe", _wrap_svn_path_is_uri_safe, -1);
rb_define_module_function(mCore, "svn_path_url_add_component2", _wrap_svn_path_url_add_component2, -1);
+ rb_define_module_function(mCore, "svn_path_is_repos_relative_url", _wrap_svn_path_is_repos_relative_url, -1);
+ rb_define_module_function(mCore, "svn_path_resolve_repos_relative_url", _wrap_svn_path_resolve_repos_relative_url, -1);
+ rb_define_module_function(mCore, "svn_path_illegal_path_escape", _wrap_svn_path_illegal_path_escape, -1);
rb_define_module_function(mCore, "svn_dirent_internal_style", _wrap_svn_dirent_internal_style, -1);
rb_define_module_function(mCore, "svn_dirent_local_style", _wrap_svn_dirent_local_style, -1);
rb_define_module_function(mCore, "svn_relpath__internal_style", _wrap_svn_relpath__internal_style, -1);
@@ -38058,11 +42914,8 @@ SWIGEXPORT void Init_core(void) {
rb_define_module_function(mCore, "svn_relpath_get_longest_ancestor", _wrap_svn_relpath_get_longest_ancestor, -1);
rb_define_module_function(mCore, "svn_uri_get_longest_ancestor", _wrap_svn_uri_get_longest_ancestor, -1);
rb_define_module_function(mCore, "svn_dirent_get_absolute", _wrap_svn_dirent_get_absolute, -1);
- rb_define_module_function(mCore, "svn_uri__is_child", _wrap_svn_uri__is_child, -1);
rb_define_module_function(mCore, "svn_dirent_is_child", _wrap_svn_dirent_is_child, -1);
- rb_define_module_function(mCore, "svn_relpath__is_child", _wrap_svn_relpath__is_child, -1);
rb_define_module_function(mCore, "svn_dirent_is_ancestor", _wrap_svn_dirent_is_ancestor, -1);
- rb_define_module_function(mCore, "svn_relpath__is_ancestor", _wrap_svn_relpath__is_ancestor, -1);
rb_define_module_function(mCore, "svn_uri__is_ancestor", _wrap_svn_uri__is_ancestor, -1);
rb_define_module_function(mCore, "svn_dirent_skip_ancestor", _wrap_svn_dirent_skip_ancestor, -1);
rb_define_module_function(mCore, "svn_relpath_skip_ancestor", _wrap_svn_relpath_skip_ancestor, -1);
@@ -38071,11 +42924,14 @@ SWIGEXPORT void Init_core(void) {
rb_define_module_function(mCore, "svn_uri_get_file_url_from_dirent", _wrap_svn_uri_get_file_url_from_dirent, -1);
rb_define_const(mCore, "SVN_MERGEINFO_NONINHERITABLE_STR", SWIG_FromCharPtr("*"));
rb_define_module_function(mCore, "svn_mergeinfo_parse", _wrap_svn_mergeinfo_parse, -1);
+ rb_define_module_function(mCore, "svn_mergeinfo_diff2", _wrap_svn_mergeinfo_diff2, -1);
rb_define_module_function(mCore, "svn_mergeinfo_diff", _wrap_svn_mergeinfo_diff, -1);
+ rb_define_module_function(mCore, "svn_mergeinfo_merge2", _wrap_svn_mergeinfo_merge2, -1);
rb_define_module_function(mCore, "svn_mergeinfo_catalog_merge", _wrap_svn_mergeinfo_catalog_merge, -1);
rb_define_module_function(mCore, "svn_mergeinfo_remove", _wrap_svn_mergeinfo_remove, -1);
rb_define_module_function(mCore, "svn_mergeinfo_remove2", _wrap_svn_mergeinfo_remove2, -1);
rb_define_module_function(mCore, "svn_rangelist_diff", _wrap_svn_rangelist_diff, -1);
+ rb_define_module_function(mCore, "svn_rangelist_merge2", _wrap_svn_rangelist_merge2, -1);
rb_define_module_function(mCore, "svn_rangelist_remove", _wrap_svn_rangelist_remove, -1);
rb_define_module_function(mCore, "svn_mergeinfo_intersect2", _wrap_svn_mergeinfo_intersect2, -1);
rb_define_module_function(mCore, "svn_mergeinfo_intersect", _wrap_svn_mergeinfo_intersect, -1);
@@ -38133,9 +42989,13 @@ SWIGEXPORT void Init_core(void) {
rb_define_module_function(mCore, "svn_io_open_unique_file", _wrap_svn_io_open_unique_file, -1);
rb_define_module_function(mCore, "svn_io_copy_perms", _wrap_svn_io_copy_perms, -1);
rb_define_module_function(mCore, "svn_io_sleep_for_timestamps", _wrap_svn_io_sleep_for_timestamps, -1);
+ rb_define_module_function(mCore, "svn_io_filesizes_three_different_p", _wrap_svn_io_filesizes_three_different_p, -1);
rb_define_module_function(mCore, "svn_io_file_checksum2", _wrap_svn_io_file_checksum2, -1);
rb_define_module_function(mCore, "svn_io_file_checksum", _wrap_svn_io_file_checksum, -1);
rb_define_module_function(mCore, "svn_io_files_contents_same_p", _wrap_svn_io_files_contents_same_p, -1);
+ rb_define_module_function(mCore, "svn_io_files_contents_three_same_p", _wrap_svn_io_files_contents_three_same_p, -1);
+ rb_define_module_function(mCore, "svn_io_lock_open_file", _wrap_svn_io_lock_open_file, -1);
+ rb_define_module_function(mCore, "svn_io_unlock_open_file", _wrap_svn_io_unlock_open_file, -1);
rb_define_module_function(mCore, "svn_stream_set_skip", _wrap_svn_stream_set_skip, -1);
rb_define_module_function(mCore, "svn_stream_set_mark", _wrap_svn_stream_set_mark, -1);
rb_define_module_function(mCore, "svn_stream_set_seek", _wrap_svn_stream_set_seek, -1);
@@ -38151,6 +43011,7 @@ SWIGEXPORT void Init_core(void) {
rb_define_module_function(mCore, "svn_stream_for_stdout", _wrap_svn_stream_for_stdout, -1);
rb_define_module_function(mCore, "svn_stream_from_stringbuf", _wrap_svn_stream_from_stringbuf, -1);
rb_define_module_function(mCore, "svn_stream_from_string", _wrap_svn_stream_from_string, -1);
+ rb_define_module_function(mCore, "svn_stream_buffered", _wrap_svn_stream_buffered, -1);
rb_define_module_function(mCore, "svn_stream_compressed", _wrap_svn_stream_compressed, -1);
rb_define_module_function(mCore, "svn_stream_checksummed2", _wrap_svn_stream_checksummed2, -1);
rb_define_module_function(mCore, "svn_stream_read", _wrap_svn_stream_read, -1);
@@ -38162,6 +43023,7 @@ SWIGEXPORT void Init_core(void) {
rb_define_module_function(mCore, "svn_stream_mark", _wrap_svn_stream_mark, -1);
rb_define_module_function(mCore, "svn_stream_seek", _wrap_svn_stream_seek, -1);
rb_define_module_function(mCore, "svn_stream_tee", _wrap_svn_stream_tee, -1);
+ rb_define_module_function(mCore, "svn_stream_puts", _wrap_svn_stream_puts, -1);
rb_define_module_function(mCore, "svn_stream_readline", _wrap_svn_stream_readline, -1);
rb_define_module_function(mCore, "svn_stream_copy3", _wrap_svn_stream_copy3, -1);
rb_define_module_function(mCore, "svn_stream_copy2", _wrap_svn_stream_copy2, -1);
@@ -38169,14 +43031,17 @@ SWIGEXPORT void Init_core(void) {
rb_define_module_function(mCore, "svn_stream_contents_same2", _wrap_svn_stream_contents_same2, -1);
rb_define_module_function(mCore, "svn_stream_contents_same", _wrap_svn_stream_contents_same, -1);
rb_define_module_function(mCore, "svn_string_from_stream", _wrap_svn_string_from_stream, -1);
+ rb_define_module_function(mCore, "svn_stream_lazyopen_create", _wrap_svn_stream_lazyopen_create, -1);
rb_define_module_function(mCore, "svn_stringbuf_from_file2", _wrap_svn_stringbuf_from_file2, -1);
rb_define_module_function(mCore, "svn_stringbuf_from_file", _wrap_svn_stringbuf_from_file, -1);
rb_define_module_function(mCore, "svn_stringbuf_from_aprfile", _wrap_svn_stringbuf_from_aprfile, -1);
rb_define_module_function(mCore, "svn_io_remove_file2", _wrap_svn_io_remove_file2, -1);
rb_define_module_function(mCore, "svn_io_remove_dir2", _wrap_svn_io_remove_dir2, -1);
rb_define_module_function(mCore, "svn_io_get_dirents3", _wrap_svn_io_get_dirents3, -1);
+ rb_define_module_function(mCore, "svn_io_stat_dirent2", _wrap_svn_io_stat_dirent2, -1);
rb_define_module_function(mCore, "svn_io_stat_dirent", _wrap_svn_io_stat_dirent, -1);
rb_define_module_function(mCore, "svn_io_dir_walk2", _wrap_svn_io_dir_walk2, -1);
+ rb_define_module_function(mCore, "svn_io_start_cmd3", _wrap_svn_io_start_cmd3, -1);
rb_define_module_function(mCore, "svn_io_start_cmd2", _wrap_svn_io_start_cmd2, -1);
rb_define_module_function(mCore, "svn_io_run_diff2", _wrap_svn_io_run_diff2, -1);
rb_define_module_function(mCore, "svn_io_run_diff3_3", _wrap_svn_io_run_diff3_3, -1);
@@ -38190,13 +43055,47 @@ SWIGEXPORT void Init_core(void) {
rb_define_module_function(mCore, "svn_io_file_trunc", _wrap_svn_io_file_trunc, -1);
rb_define_module_function(mCore, "svn_io_dir_close", _wrap_svn_io_dir_close, -1);
rb_define_module_function(mCore, "svn_io_file_name_get", _wrap_svn_io_file_name_get, -1);
+ rb_define_module_function(mCore, "svn_io_file_readline", _wrap_svn_io_file_readline, -1);
rb_define_module_function(mCore, "svn_read_invoke_fn", _wrap_svn_read_invoke_fn, -1);
rb_define_module_function(mCore, "svn_stream_invoke_skip_fn", _wrap_svn_stream_invoke_skip_fn, -1);
rb_define_module_function(mCore, "svn_write_invoke_fn", _wrap_svn_write_invoke_fn, -1);
rb_define_module_function(mCore, "svn_close_invoke_fn", _wrap_svn_close_invoke_fn, -1);
rb_define_module_function(mCore, "svn_stream_invoke_mark_fn", _wrap_svn_stream_invoke_mark_fn, -1);
rb_define_module_function(mCore, "svn_stream_invoke_seek_fn", _wrap_svn_stream_invoke_seek_fn, -1);
+ rb_define_module_function(mCore, "svn_stream_invoke_lazyopen_func", _wrap_svn_stream_invoke_lazyopen_func, -1);
rb_define_module_function(mCore, "svn_io_invoke_walk_func", _wrap_svn_io_invoke_walk_func, -1);
+ rb_define_const(mCore, "Svn_checksum_md5", SWIG_From_int((int)(svn_checksum_md5)));
+ rb_define_const(mCore, "Svn_checksum_sha1", SWIG_From_int((int)(svn_checksum_sha1)));
+
+ SwigClassSvn_checksum_t.klass = rb_define_class_under(mCore, "Svn_checksum_t", rb_cObject);
+ SWIG_TypeClientData(SWIGTYPE_p_svn_checksum_t, (void *) &SwigClassSvn_checksum_t);
+ rb_define_alloc_func(SwigClassSvn_checksum_t.klass, _wrap_svn_checksum_t_allocate);
+ rb_define_method(SwigClassSvn_checksum_t.klass, "initialize", _wrap_new_svn_checksum_t, -1);
+ rb_define_method(SwigClassSvn_checksum_t.klass, "digest=", _wrap_svn_checksum_t_digest_set, -1);
+ rb_define_method(SwigClassSvn_checksum_t.klass, "digest", _wrap_svn_checksum_t_digest_get, -1);
+ rb_define_method(SwigClassSvn_checksum_t.klass, "kind=", _wrap_svn_checksum_t_kind_set, -1);
+ rb_define_method(SwigClassSvn_checksum_t.klass, "kind", _wrap_svn_checksum_t_kind_get, -1);
+ SwigClassSvn_checksum_t.mark = 0;
+ SwigClassSvn_checksum_t.destroy = (void (*)(void *)) free_svn_checksum_t;
+ SwigClassSvn_checksum_t.trackObjects = 0;
+ rb_define_module_function(mCore, "svn_checksum_create", _wrap_svn_checksum_create, -1);
+ rb_define_module_function(mCore, "svn_checksum_clear", _wrap_svn_checksum_clear, -1);
+ rb_define_module_function(mCore, "svn_checksum_match", _wrap_svn_checksum_match, -1);
+ rb_define_module_function(mCore, "svn_checksum_dup", _wrap_svn_checksum_dup, -1);
+ rb_define_module_function(mCore, "svn_checksum_to_cstring_display", _wrap_svn_checksum_to_cstring_display, -1);
+ rb_define_module_function(mCore, "svn_checksum_to_cstring", _wrap_svn_checksum_to_cstring, -1);
+ rb_define_module_function(mCore, "svn_checksum_serialize", _wrap_svn_checksum_serialize, -1);
+ rb_define_module_function(mCore, "svn_checksum_deserialize", _wrap_svn_checksum_deserialize, -1);
+ rb_define_module_function(mCore, "svn_checksum_parse_hex", _wrap_svn_checksum_parse_hex, -1);
+ rb_define_module_function(mCore, "svn_checksum", _wrap_svn_checksum, -1);
+ rb_define_module_function(mCore, "svn_checksum_empty_checksum", _wrap_svn_checksum_empty_checksum, -1);
+ rb_define_module_function(mCore, "svn_checksum_ctx_create", _wrap_svn_checksum_ctx_create, -1);
+ rb_define_module_function(mCore, "svn_checksum_update", _wrap_svn_checksum_update, -1);
+ rb_define_module_function(mCore, "svn_checksum_final", _wrap_svn_checksum_final, -1);
+ rb_define_module_function(mCore, "svn_checksum_size", _wrap_svn_checksum_size, -1);
+ rb_define_module_function(mCore, "svn_checksum_is_empty_checksum", _wrap_svn_checksum_is_empty_checksum, -1);
+ rb_define_module_function(mCore, "svn_checksum_mismatch_err", _wrap_svn_checksum_mismatch_err, -1);
+ rb_define_module_function(mCore, "svn_auth_set_gnome_keyring_unlock_prompt_func", _wrap_svn_auth_set_gnome_keyring_unlock_prompt_func, -1);
rb_define_module_function(mCore, "svn_md5_empty_string_digest", _wrap_svn_md5_empty_string_digest, -1);
rb_define_module_function(mCore, "svn_md5_digest_to_cstring_display", _wrap_svn_md5_digest_to_cstring_display, -1);
rb_define_module_function(mCore, "svn_md5_digest_to_cstring", _wrap_svn_md5_digest_to_cstring, -1);
diff --git a/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c b/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c
index fb90370..136d35c 100644
--- a/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c
+++ b/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c
@@ -53,6 +53,7 @@
#include <locale.h>
#include <math.h>
+#include "svn_hash.h"
#include "svn_nls.h"
#include "svn_pools.h"
#include "svn_props.h"
@@ -734,7 +735,9 @@ svn_swig_rb_get_pool(int argc, VALUE *argv, VALUE self,
static svn_boolean_t
rb_set_pool_if_swig_type_object(VALUE target, VALUE pool)
{
- VALUE targets[1] = {target};
+ VALUE targets[1];
+
+ targets[0] = target;
if (!NIL_P(find_swig_type_object(1, targets))) {
rb_set_pool(target, pool);
@@ -1189,6 +1192,7 @@ DEFINE_DUP(auth_ssl_server_cert_info)
DEFINE_DUP(wc_entry)
DEFINE_DUP(client_diff_summarize)
DEFINE_DUP(dirent)
+DEFINE_DUP(log_entry)
DEFINE_DUP_NO_CONVENIENCE(client_commit_item3)
DEFINE_DUP_NO_CONVENIENCE(client_proplist_item)
DEFINE_DUP_NO_CONVENIENCE(wc_external_item2)
@@ -1219,7 +1223,7 @@ r2c_svn_string(VALUE value, void *ctx, apr_pool_t *pool)
}
void *
-svn_swig_rb_to_swig_type(VALUE value, void *ctx, apr_pool_t *pool)
+svn_swig_rb_to_swig_type(VALUE value, const void *ctx, apr_pool_t *pool)
{
void **result = NULL;
result = apr_palloc(pool, sizeof(void *));
@@ -1516,10 +1520,8 @@ r2c_hash_i(VALUE key, VALUE value, hash_to_apr_hash_data_t *data)
{
if (key != Qundef) {
void *val = data->func(value, data->ctx, data->pool);
- apr_hash_set(data->apr_hash,
- apr_pstrdup(data->pool, StringValuePtr(key)),
- APR_HASH_KEY_STRING,
- val);
+ svn_hash_sets(data->apr_hash, apr_pstrdup(data->pool, StringValuePtr(key)),
+ val);
}
return ST_CONTINUE;
}
@@ -1531,15 +1533,14 @@ r2c_hash(VALUE hash, r2c_func func, void *ctx, apr_pool_t *pool)
return NULL;
} else {
apr_hash_t *apr_hash;
- hash_to_apr_hash_data_t data = {
- NULL,
- func,
- ctx,
- pool
- };
+ hash_to_apr_hash_data_t data;
apr_hash = apr_hash_make(pool);
data.apr_hash = apr_hash;
+ data.ctx = ctx;
+ data.func = func;
+ data.pool = pool;
+
rb_hash_foreach(hash, r2c_hash_i, (VALUE)&data);
return apr_hash;
@@ -1638,8 +1639,9 @@ invoke_callback(VALUE baton, VALUE pool)
{
callback_baton_t *cbb = (callback_baton_t *)baton;
VALUE sub_pool;
- VALUE argv[] = {pool};
+ VALUE argv[1];
+ argv[0] = pool;
svn_swig_rb_get_pool(1, argv, Qnil, &sub_pool, NULL);
cbb->pool = sub_pool;
return rb_ensure(callback, baton, callback_ensure, sub_pool);
@@ -2154,9 +2156,7 @@ svn_swig_rb_log_entry_receiver(void *baton,
cbb.receiver = proc;
cbb.message = id_call;
- cbb.args = rb_ary_new3(1,
- c2r_swig_type((void *)entry,
- (void *)"svn_log_entry_t *"));
+ cbb.args = rb_ary_new3(1, c2r_log_entry__dup(entry));
invoke_callback_handle_error((VALUE)(&cbb), rb_pool, &err);
}
return err;
@@ -2963,6 +2963,41 @@ svn_swig_rb_auth_simple_prompt_func(svn_auth_cred_simple_t **cred,
}
svn_error_t *
+svn_swig_rb_auth_gnome_keyring_unlock_prompt_func(char **keyring_passwd,
+ const char *keyring_name,
+ void *baton,
+ apr_pool_t *pool)
+{
+ svn_error_t *err = SVN_NO_ERROR;
+ VALUE proc, rb_pool;
+ *keyring_passwd = NULL;
+
+ svn_swig_rb_from_baton((VALUE)baton, &proc, &rb_pool);
+
+ if (!NIL_P(proc)) {
+ char error_message[] =
+ "svn_auth_gnome_keyring_unlock_prompt_func_t should"
+ "return a string, not '%s'.";
+
+ callback_baton_t cbb;
+ VALUE result;
+
+ cbb.receiver = proc;
+ cbb.message = id_call;
+ cbb.args = rb_ary_new3(1, c2r_string2(keyring_name));
+ result = invoke_callback_handle_error((VALUE)(&cbb), rb_pool, &err);
+
+ if (!NIL_P(result)) {
+ if (!RTEST(rb_obj_is_kind_of(result, rb_cString)))
+ rb_raise(rb_eTypeError, error_message, r2c_inspect(result));
+ *keyring_passwd = (char *)r2c_string(result, NULL, pool);
+ }
+ }
+
+ return err;
+}
+
+svn_error_t *
svn_swig_rb_auth_username_prompt_func(svn_auth_cred_username_t **cred,
void *baton,
const char *realm,
diff --git a/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h b/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h
index e7a1530..1098c80 100644
--- a/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h
+++ b/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h
@@ -74,7 +74,12 @@
extern "C" {
#endif /* __cplusplus */
+/* Ruby 1.9 changed the file name of this header */
+#ifdef HAVE_RUBY_IO_H
+#include <ruby/io.h>
+#else
#include <rubyio.h>
+#endif
typedef struct apr_pool_wrapper_t
{
@@ -112,7 +117,7 @@ SVN_RB_SWIG_SWIGUTIL_EXPORT
void svn_swig_rb_handle_svn_error(svn_error_t *error);
SVN_RB_SWIG_SWIGUTIL_EXPORT
-void *svn_swig_rb_to_swig_type(VALUE value, void *ctx, apr_pool_t *pool);
+void *svn_swig_rb_to_swig_type(VALUE value, const void *ctx, apr_pool_t *pool);
SVN_RB_SWIG_SWIGUTIL_EXPORT
VALUE svn_swig_rb_from_swig_type(void *value, void *ctx);
@@ -380,6 +385,13 @@ svn_error_t *svn_swig_rb_wc_relocation_validator3(void *baton,
/* auth provider callbacks */
SVN_RB_SWIG_SWIGUTIL_EXPORT
+svn_error_t * svn_swig_rb_auth_gnome_keyring_unlock_prompt_func(
+ char **keyring_passwd,
+ const char *keyring_name,
+ void *baton,
+ apr_pool_t *pool);
+
+SVN_RB_SWIG_SWIGUTIL_EXPORT
svn_error_t *svn_swig_rb_auth_simple_prompt_func(
svn_auth_cred_simple_t **cred,
void *baton,
diff --git a/subversion/bindings/swig/ruby/svn/fs.rb b/subversion/bindings/swig/ruby/svn/fs.rb
index e9f5132..aac95b5 100644
--- a/subversion/bindings/swig/ruby/svn/fs.rb
+++ b/subversion/bindings/swig/ruby/svn/fs.rb
@@ -415,7 +415,7 @@ module Svn
ignore_ancestry)
end
- def replay(editor, base_dir=nil, low_water_mark=nil, send_deltas=false,
+ def replay(editor, base_dir=nil, low_water_mark=nil, send_deltas=true,
&callback)
base_dir ||= ""
low_water_mark ||= Core::INVALID_REVNUM
diff --git a/subversion/bindings/swig/ruby/svn/info.rb b/subversion/bindings/swig/ruby/svn/info.rb
index d20f4fa..5175cb8 100644
--- a/subversion/bindings/swig/ruby/svn/info.rb
+++ b/subversion/bindings/swig/ruby/svn/info.rb
@@ -229,7 +229,9 @@ module Svn
def parse_diff_unified(entry)
in_content = false
- entry.body.each do |line|
+ # ruby 1.8 and ruby 1.9 compat
+ each_meth = entry.body.respond_to?(:each_line) ? :each_line : :each
+ entry.body.send(each_meth) do |line|
case line
when /^@@/
in_content = true
diff --git a/subversion/bindings/swig/ruby/svn/util.rb b/subversion/bindings/swig/ruby/svn/util.rb
index caf523a..8e05367 100644
--- a/subversion/bindings/swig/ruby/svn/util.rb
+++ b/subversion/bindings/swig/ruby/svn/util.rb
@@ -36,7 +36,7 @@ module Svn
module Util #:nodoc:
module_function
def to_ruby_class_name(name)
- name.split("_").collect do |x|
+ name.to_s.split("_").collect do |x|
"#{x[0,1].upcase}#{x[1..-1].downcase}"
end.join("")
end
diff --git a/subversion/bindings/swig/ruby/svn_client.c b/subversion/bindings/swig/ruby/svn_client.c
index d4fc4a8..f9ac920 100644
--- a/subversion/bindings/swig/ruby/svn_client.c
+++ b/subversion/bindings/swig/ruby/svn_client.c
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -1374,7 +1374,7 @@ SWIG_Ruby_AppendOutput(VALUE target, VALUE o) {
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Ruby_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Ruby_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Ruby_SetModule(pointer)
@@ -1528,7 +1528,7 @@ SWIG_Ruby_NewPointerObj(void *ptr, swig_type_info *type, int flags)
downcast methods. */
if (obj != Qnil) {
VALUE value = rb_iv_get(obj, "@__swigtype__");
- char* type_name = RSTRING_PTR(value);
+ const char* type_name = RSTRING_PTR(value);
if (strcmp(type->name, type_name) == 0) {
return obj;
@@ -1710,7 +1710,7 @@ SWIG_Ruby_ConvertPacked(VALUE obj, void *ptr, int sz, swig_type_info *ty) {
}
SWIGRUNTIME swig_module_info *
-SWIG_Ruby_GetModule(void)
+SWIG_Ruby_GetModule(void *SWIGUNUSEDPARM(clientdata))
{
VALUE pointer;
swig_module_info *ret = 0;
@@ -1818,142 +1818,153 @@ int SWIG_Ruby_arity( VALUE proc, int minimal )
#define SWIGTYPE_p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[23]
#define SWIGTYPE_p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[24]
#define SWIGTYPE_p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void swig_types[25]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[26]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[27]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t swig_types[28]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t swig_types[29]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[30]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t swig_types[31]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void swig_types[32]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_struct_svn_wc_status_t__void swig_types[33]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t swig_types[34]
-#define SWIGTYPE_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void swig_types[35]
-#define SWIGTYPE_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[36]
-#define SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t swig_types[37]
-#define SWIGTYPE_p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[38]
-#define SWIGTYPE_p_int swig_types[39]
-#define SWIGTYPE_p_long swig_types[40]
-#define SWIGTYPE_p_p_apr_array_header_t swig_types[41]
-#define SWIGTYPE_p_p_apr_hash_t swig_types[42]
-#define SWIGTYPE_p_p_char swig_types[43]
-#define SWIGTYPE_p_p_svn_auth_provider_object_t swig_types[44]
-#define SWIGTYPE_p_p_svn_client_commit_info_t swig_types[45]
-#define SWIGTYPE_p_p_svn_commit_info_t swig_types[46]
-#define SWIGTYPE_p_p_svn_ra_session_t swig_types[47]
-#define SWIGTYPE_p_p_svn_string_t swig_types[48]
-#define SWIGTYPE_p_svn_auth_baton_t swig_types[49]
-#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[50]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[51]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[52]
-#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[53]
-#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[54]
-#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[55]
-#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[56]
-#define SWIGTYPE_p_svn_auth_provider_t swig_types[57]
-#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[58]
-#define SWIGTYPE_p_svn_client_commit_info_t swig_types[59]
-#define SWIGTYPE_p_svn_client_commit_item2_t swig_types[60]
-#define SWIGTYPE_p_svn_client_commit_item3_t swig_types[61]
-#define SWIGTYPE_p_svn_client_commit_item_t swig_types[62]
-#define SWIGTYPE_p_svn_client_copy_source_t swig_types[63]
-#define SWIGTYPE_p_svn_client_ctx_t swig_types[64]
-#define SWIGTYPE_p_svn_client_diff_summarize_kind_t swig_types[65]
-#define SWIGTYPE_p_svn_client_diff_summarize_t swig_types[66]
-#define SWIGTYPE_p_svn_client_info2_t swig_types[67]
-#define SWIGTYPE_p_svn_client_proplist_item_t swig_types[68]
-#define SWIGTYPE_p_svn_client_status_t swig_types[69]
-#define SWIGTYPE_p_svn_commit_info_t swig_types[70]
-#define SWIGTYPE_p_svn_config_t swig_types[71]
-#define SWIGTYPE_p_svn_delta_editor_t swig_types[72]
-#define SWIGTYPE_p_svn_depth_t swig_types[73]
-#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[74]
-#define SWIGTYPE_p_svn_diff_datasource_e swig_types[75]
-#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[76]
-#define SWIGTYPE_p_svn_diff_file_options_t swig_types[77]
-#define SWIGTYPE_p_svn_diff_fns2_t swig_types[78]
-#define SWIGTYPE_p_svn_diff_fns_t swig_types[79]
-#define SWIGTYPE_p_svn_diff_hunk_t swig_types[80]
-#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[81]
-#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[82]
-#define SWIGTYPE_p_svn_diff_t swig_types[83]
-#define SWIGTYPE_p_svn_dirent_t swig_types[84]
-#define SWIGTYPE_p_svn_errno_t swig_types[85]
-#define SWIGTYPE_p_svn_error_t swig_types[86]
-#define SWIGTYPE_p_svn_info_t swig_types[87]
-#define SWIGTYPE_p_svn_io_dirent2_t swig_types[88]
-#define SWIGTYPE_p_svn_io_dirent_t swig_types[89]
-#define SWIGTYPE_p_svn_io_file_del_t swig_types[90]
-#define SWIGTYPE_p_svn_location_segment_t swig_types[91]
-#define SWIGTYPE_p_svn_lock_t swig_types[92]
-#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[93]
-#define SWIGTYPE_p_svn_log_changed_path_t swig_types[94]
-#define SWIGTYPE_p_svn_log_entry_t swig_types[95]
-#define SWIGTYPE_p_svn_merge_range_t swig_types[96]
-#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[97]
-#define SWIGTYPE_p_svn_node_kind_t swig_types[98]
-#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[99]
-#define SWIGTYPE_p_svn_opt_revision_t swig_types[100]
-#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[101]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[102]
-#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[103]
-#define SWIGTYPE_p_svn_patch_file_t swig_types[104]
-#define SWIGTYPE_p_svn_patch_t swig_types[105]
-#define SWIGTYPE_p_svn_prop_kind swig_types[106]
-#define SWIGTYPE_p_svn_prop_patch_t swig_types[107]
-#define SWIGTYPE_p_svn_ra_callbacks2_t swig_types[108]
-#define SWIGTYPE_p_svn_ra_callbacks_t swig_types[109]
-#define SWIGTYPE_p_svn_ra_plugin_t swig_types[110]
-#define SWIGTYPE_p_svn_ra_reporter2_t swig_types[111]
-#define SWIGTYPE_p_svn_ra_reporter3_t swig_types[112]
-#define SWIGTYPE_p_svn_ra_reporter_t swig_types[113]
-#define SWIGTYPE_p_svn_ra_session_t swig_types[114]
-#define SWIGTYPE_p_svn_stream_mark_t swig_types[115]
-#define SWIGTYPE_p_svn_stream_t swig_types[116]
-#define SWIGTYPE_p_svn_string_t swig_types[117]
-#define SWIGTYPE_p_svn_stringbuf_t swig_types[118]
-#define SWIGTYPE_p_svn_tristate_t swig_types[119]
-#define SWIGTYPE_p_svn_txdelta_op_t swig_types[120]
-#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[121]
-#define SWIGTYPE_p_svn_txdelta_window_t swig_types[122]
-#define SWIGTYPE_p_svn_version_checklist_t swig_types[123]
-#define SWIGTYPE_p_svn_version_t swig_types[124]
-#define SWIGTYPE_p_svn_wc_adm_access_t swig_types[125]
-#define SWIGTYPE_p_svn_wc_committed_queue_t swig_types[126]
-#define SWIGTYPE_p_svn_wc_conflict_action_t swig_types[127]
-#define SWIGTYPE_p_svn_wc_conflict_choice_t swig_types[128]
-#define SWIGTYPE_p_svn_wc_conflict_description2_t swig_types[129]
-#define SWIGTYPE_p_svn_wc_conflict_description_t swig_types[130]
-#define SWIGTYPE_p_svn_wc_conflict_kind_t swig_types[131]
-#define SWIGTYPE_p_svn_wc_conflict_reason_t swig_types[132]
-#define SWIGTYPE_p_svn_wc_conflict_result_t swig_types[133]
-#define SWIGTYPE_p_svn_wc_conflict_version_t swig_types[134]
-#define SWIGTYPE_p_svn_wc_context_t swig_types[135]
-#define SWIGTYPE_p_svn_wc_diff_callbacks2_t swig_types[136]
-#define SWIGTYPE_p_svn_wc_diff_callbacks3_t swig_types[137]
-#define SWIGTYPE_p_svn_wc_diff_callbacks4_t swig_types[138]
-#define SWIGTYPE_p_svn_wc_diff_callbacks_t swig_types[139]
-#define SWIGTYPE_p_svn_wc_entry_callbacks2_t swig_types[140]
-#define SWIGTYPE_p_svn_wc_entry_callbacks_t swig_types[141]
-#define SWIGTYPE_p_svn_wc_entry_t swig_types[142]
-#define SWIGTYPE_p_svn_wc_external_item2_t swig_types[143]
-#define SWIGTYPE_p_svn_wc_external_item_t swig_types[144]
-#define SWIGTYPE_p_svn_wc_info_t swig_types[145]
-#define SWIGTYPE_p_svn_wc_merge_outcome_t swig_types[146]
-#define SWIGTYPE_p_svn_wc_notify_action_t swig_types[147]
-#define SWIGTYPE_p_svn_wc_notify_lock_state_t swig_types[148]
-#define SWIGTYPE_p_svn_wc_notify_state_t swig_types[149]
-#define SWIGTYPE_p_svn_wc_notify_t swig_types[150]
-#define SWIGTYPE_p_svn_wc_operation_t swig_types[151]
-#define SWIGTYPE_p_svn_wc_revision_status_t swig_types[152]
-#define SWIGTYPE_p_svn_wc_schedule_t swig_types[153]
-#define SWIGTYPE_p_svn_wc_status2_t swig_types[154]
-#define SWIGTYPE_p_svn_wc_status3_t swig_types[155]
-#define SWIGTYPE_p_svn_wc_status_t swig_types[156]
-#define SWIGTYPE_p_svn_wc_traversal_info_t swig_types[157]
-#define SWIGTYPE_p_unsigned_long swig_types[158]
-#define SWIGTYPE_p_void swig_types[159]
-static swig_type_info *swig_types[161];
-static swig_module_info swig_module = {swig_types, 160, 0, 0, 0, 0};
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[26]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[27]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[28]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t swig_types[29]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t swig_types[30]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[31]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[32]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t swig_types[33]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void swig_types[34]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_struct_svn_wc_status_t__void swig_types[35]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t swig_types[36]
+#define SWIGTYPE_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void swig_types[37]
+#define SWIGTYPE_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[38]
+#define SWIGTYPE_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t swig_types[39]
+#define SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t swig_types[40]
+#define SWIGTYPE_p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[41]
+#define SWIGTYPE_p_int swig_types[42]
+#define SWIGTYPE_p_long swig_types[43]
+#define SWIGTYPE_p_p_apr_array_header_t swig_types[44]
+#define SWIGTYPE_p_p_apr_hash_t swig_types[45]
+#define SWIGTYPE_p_p_char swig_types[46]
+#define SWIGTYPE_p_p_svn_auth_provider_object_t swig_types[47]
+#define SWIGTYPE_p_p_svn_client_commit_info_t swig_types[48]
+#define SWIGTYPE_p_p_svn_client_ctx_t swig_types[49]
+#define SWIGTYPE_p_p_svn_commit_info_t swig_types[50]
+#define SWIGTYPE_p_p_svn_ra_session_t swig_types[51]
+#define SWIGTYPE_p_p_svn_string_t swig_types[52]
+#define SWIGTYPE_p_svn_auth_baton_t swig_types[53]
+#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[54]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[55]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[56]
+#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[57]
+#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[58]
+#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[59]
+#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[60]
+#define SWIGTYPE_p_svn_auth_provider_t swig_types[61]
+#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[62]
+#define SWIGTYPE_p_svn_checksum_ctx_t swig_types[63]
+#define SWIGTYPE_p_svn_checksum_kind_t swig_types[64]
+#define SWIGTYPE_p_svn_checksum_t swig_types[65]
+#define SWIGTYPE_p_svn_client_commit_info_t swig_types[66]
+#define SWIGTYPE_p_svn_client_commit_item2_t swig_types[67]
+#define SWIGTYPE_p_svn_client_commit_item3_t swig_types[68]
+#define SWIGTYPE_p_svn_client_commit_item_t swig_types[69]
+#define SWIGTYPE_p_svn_client_copy_source_t swig_types[70]
+#define SWIGTYPE_p_svn_client_ctx_t swig_types[71]
+#define SWIGTYPE_p_svn_client_diff_summarize_kind_t swig_types[72]
+#define SWIGTYPE_p_svn_client_diff_summarize_t swig_types[73]
+#define SWIGTYPE_p_svn_client_info2_t swig_types[74]
+#define SWIGTYPE_p_svn_client_proplist_item_t swig_types[75]
+#define SWIGTYPE_p_svn_client_status_t swig_types[76]
+#define SWIGTYPE_p_svn_commit_info_t swig_types[77]
+#define SWIGTYPE_p_svn_config_t swig_types[78]
+#define SWIGTYPE_p_svn_delta_editor_t swig_types[79]
+#define SWIGTYPE_p_svn_depth_t swig_types[80]
+#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[81]
+#define SWIGTYPE_p_svn_diff_datasource_e swig_types[82]
+#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[83]
+#define SWIGTYPE_p_svn_diff_file_options_t swig_types[84]
+#define SWIGTYPE_p_svn_diff_fns2_t swig_types[85]
+#define SWIGTYPE_p_svn_diff_fns_t swig_types[86]
+#define SWIGTYPE_p_svn_diff_hunk_t swig_types[87]
+#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[88]
+#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[89]
+#define SWIGTYPE_p_svn_diff_t swig_types[90]
+#define SWIGTYPE_p_svn_dirent_t swig_types[91]
+#define SWIGTYPE_p_svn_errno_t swig_types[92]
+#define SWIGTYPE_p_svn_error_t swig_types[93]
+#define SWIGTYPE_p_svn_info_t swig_types[94]
+#define SWIGTYPE_p_svn_io_dirent2_t swig_types[95]
+#define SWIGTYPE_p_svn_io_dirent_t swig_types[96]
+#define SWIGTYPE_p_svn_io_file_del_t swig_types[97]
+#define SWIGTYPE_p_svn_location_segment_t swig_types[98]
+#define SWIGTYPE_p_svn_lock_t swig_types[99]
+#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[100]
+#define SWIGTYPE_p_svn_log_changed_path_t swig_types[101]
+#define SWIGTYPE_p_svn_log_entry_t swig_types[102]
+#define SWIGTYPE_p_svn_merge_range_t swig_types[103]
+#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[104]
+#define SWIGTYPE_p_svn_node_kind_t swig_types[105]
+#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[106]
+#define SWIGTYPE_p_svn_opt_revision_t swig_types[107]
+#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[108]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[109]
+#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[110]
+#define SWIGTYPE_p_svn_patch_file_t swig_types[111]
+#define SWIGTYPE_p_svn_patch_t swig_types[112]
+#define SWIGTYPE_p_svn_prop_inherited_item_t swig_types[113]
+#define SWIGTYPE_p_svn_prop_kind swig_types[114]
+#define SWIGTYPE_p_svn_prop_patch_t swig_types[115]
+#define SWIGTYPE_p_svn_ra_callbacks2_t swig_types[116]
+#define SWIGTYPE_p_svn_ra_callbacks_t swig_types[117]
+#define SWIGTYPE_p_svn_ra_plugin_t swig_types[118]
+#define SWIGTYPE_p_svn_ra_reporter2_t swig_types[119]
+#define SWIGTYPE_p_svn_ra_reporter3_t swig_types[120]
+#define SWIGTYPE_p_svn_ra_reporter_t swig_types[121]
+#define SWIGTYPE_p_svn_ra_session_t swig_types[122]
+#define SWIGTYPE_p_svn_stream_mark_t swig_types[123]
+#define SWIGTYPE_p_svn_stream_t swig_types[124]
+#define SWIGTYPE_p_svn_string_t swig_types[125]
+#define SWIGTYPE_p_svn_stringbuf_t swig_types[126]
+#define SWIGTYPE_p_svn_tristate_t swig_types[127]
+#define SWIGTYPE_p_svn_txdelta_op_t swig_types[128]
+#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[129]
+#define SWIGTYPE_p_svn_txdelta_window_t swig_types[130]
+#define SWIGTYPE_p_svn_version_checklist_t swig_types[131]
+#define SWIGTYPE_p_svn_version_ext_linked_lib_t swig_types[132]
+#define SWIGTYPE_p_svn_version_ext_loaded_lib_t swig_types[133]
+#define SWIGTYPE_p_svn_version_extended_t swig_types[134]
+#define SWIGTYPE_p_svn_version_t swig_types[135]
+#define SWIGTYPE_p_svn_wc_adm_access_t swig_types[136]
+#define SWIGTYPE_p_svn_wc_committed_queue_t swig_types[137]
+#define SWIGTYPE_p_svn_wc_conflict_action_t swig_types[138]
+#define SWIGTYPE_p_svn_wc_conflict_choice_t swig_types[139]
+#define SWIGTYPE_p_svn_wc_conflict_description2_t swig_types[140]
+#define SWIGTYPE_p_svn_wc_conflict_description_t swig_types[141]
+#define SWIGTYPE_p_svn_wc_conflict_kind_t swig_types[142]
+#define SWIGTYPE_p_svn_wc_conflict_reason_t swig_types[143]
+#define SWIGTYPE_p_svn_wc_conflict_result_t swig_types[144]
+#define SWIGTYPE_p_svn_wc_conflict_version_t swig_types[145]
+#define SWIGTYPE_p_svn_wc_context_t swig_types[146]
+#define SWIGTYPE_p_svn_wc_diff_callbacks2_t swig_types[147]
+#define SWIGTYPE_p_svn_wc_diff_callbacks3_t swig_types[148]
+#define SWIGTYPE_p_svn_wc_diff_callbacks4_t swig_types[149]
+#define SWIGTYPE_p_svn_wc_diff_callbacks_t swig_types[150]
+#define SWIGTYPE_p_svn_wc_entry_callbacks2_t swig_types[151]
+#define SWIGTYPE_p_svn_wc_entry_callbacks_t swig_types[152]
+#define SWIGTYPE_p_svn_wc_entry_t swig_types[153]
+#define SWIGTYPE_p_svn_wc_external_item2_t swig_types[154]
+#define SWIGTYPE_p_svn_wc_external_item_t swig_types[155]
+#define SWIGTYPE_p_svn_wc_info_t swig_types[156]
+#define SWIGTYPE_p_svn_wc_merge_outcome_t swig_types[157]
+#define SWIGTYPE_p_svn_wc_notify_action_t swig_types[158]
+#define SWIGTYPE_p_svn_wc_notify_lock_state_t swig_types[159]
+#define SWIGTYPE_p_svn_wc_notify_state_t swig_types[160]
+#define SWIGTYPE_p_svn_wc_notify_t swig_types[161]
+#define SWIGTYPE_p_svn_wc_operation_t swig_types[162]
+#define SWIGTYPE_p_svn_wc_revision_status_t swig_types[163]
+#define SWIGTYPE_p_svn_wc_schedule_t swig_types[164]
+#define SWIGTYPE_p_svn_wc_status2_t swig_types[165]
+#define SWIGTYPE_p_svn_wc_status3_t swig_types[166]
+#define SWIGTYPE_p_svn_wc_status_t swig_types[167]
+#define SWIGTYPE_p_svn_wc_traversal_info_t swig_types[168]
+#define SWIGTYPE_p_unsigned_long swig_types[169]
+#define SWIGTYPE_p_void swig_types[170]
+static swig_type_info *swig_types[172];
+static swig_module_info swig_module = {swig_types, 171, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@@ -1968,7 +1979,7 @@ static VALUE mClient;
#define SWIG_RUBY_THREAD_END_BLOCK
-#define SWIGVERSION 0x020004
+#define SWIGVERSION 0x020009
#define SWIG_VERSION SWIGVERSION
@@ -2041,7 +2052,7 @@ SWIG_ruby_failed(void)
}
-/*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
+/*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
SWIGINTERN VALUE SWIG_AUX_NUM2LONG(VALUE *args)
{
VALUE obj = args[0];
@@ -2106,11 +2117,7 @@ SWIGINTERN int
SWIG_AsCharPtrAndSize(VALUE obj, char** cptr, size_t* psize, int *alloc)
{
if (TYPE(obj) == T_STRING) {
- #if defined(StringValuePtr)
char *cstr = StringValuePtr(obj);
- #else
- char *cstr = STR2CSTR(obj);
- #endif
size_t size = RSTRING_LEN(obj) + 1;
if (cptr) {
if (alloc) {
@@ -2150,7 +2157,7 @@ SWIG_From_int (int value)
}
-/*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
+/*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
SWIGINTERN VALUE SWIG_AUX_NUM2ULONG(VALUE *args)
{
VALUE obj = args[0];
@@ -2185,7 +2192,7 @@ SWIG_From_unsigned_SS_long (unsigned long value)
return ULONG2NUM(value);
}
-SWIGINTERN svn_client_commit_item3_t *new_svn_client_commit_item3_t(apr_pool_t *pool){
+SWIGINTERN struct svn_client_commit_item3_t *new_svn_client_commit_item3_t(apr_pool_t *pool){
svn_error_t *err;
const svn_client_commit_item3_t *self;
err = svn_client_commit_item_create(&self, pool);
@@ -2193,13 +2200,19 @@ SWIGINTERN svn_client_commit_item3_t *new_svn_client_commit_item3_t(apr_pool_t *
svn_swig_rb_handle_svn_error(err);
return (svn_client_commit_item3_t *)self;
}
-SWIGINTERN svn_client_commit_item3_t *svn_client_commit_item3_t_dup(svn_client_commit_item3_t *self,apr_pool_t *pool){
+SWIGINTERN svn_client_commit_item3_t *svn_client_commit_item3_t_dup(struct svn_client_commit_item3_t *self,apr_pool_t *pool){
return svn_client_commit_item3_dup(self, pool);
}
-SWIGINTERN svn_client_ctx_t *new_svn_client_ctx_t(apr_pool_t *pool){
+SWIGINTERN struct svn_client_ctx_t *new_svn_client_ctx_t(apr_pool_t *pool){
svn_error_t *err;
svn_client_ctx_t *self;
- err = svn_client_create_context(&self, pool);
+ apr_hash_t *cfg_hash;
+
+ err = svn_config_get_config(&cfg_hash, NULL, pool);
+ if (err)
+ svn_swig_rb_handle_svn_error(err);
+
+ err = svn_client_create_context2(&self, cfg_hash, pool);
if (err)
svn_swig_rb_handle_svn_error(err);
return self;
@@ -2228,7 +2241,7 @@ SWIG_FromCharPtr(const char *cptr)
return SWIG_FromCharPtrAndSize(cptr, (cptr ? strlen(cptr) : 0));
}
-SWIGINTERN svn_client_copy_source_t *new_svn_client_copy_source_t(char const *path,svn_opt_revision_t const *rev,svn_opt_revision_t const *peg_rev,apr_pool_t *pool){
+SWIGINTERN struct svn_client_copy_source_t *new_svn_client_copy_source_t(char const *path,svn_opt_revision_t const *rev,svn_opt_revision_t const *peg_rev,apr_pool_t *pool){
svn_client_copy_source_t *self;
svn_opt_revision_t *revision;
svn_opt_revision_t *peg_revision;
@@ -2250,16 +2263,21 @@ SWIGINTERN svn_client_copy_source_t *new_svn_client_copy_source_t(char const *pa
return self;
}
-SWIGINTERN char const *svn_client_copy_source_t__path(svn_client_copy_source_t *self){
+SWIGINTERN char const *svn_client_copy_source_t__path(struct svn_client_copy_source_t *self){
return self->path;
}
-SWIGINTERN svn_opt_revision_t const *svn_client_copy_source_t__revision(svn_client_copy_source_t *self){
+SWIGINTERN svn_opt_revision_t const *svn_client_copy_source_t__revision(struct svn_client_copy_source_t *self){
return self->revision;
}
-SWIGINTERN svn_opt_revision_t const *svn_client_copy_source_t__peg_revision(svn_client_copy_source_t *self){
+SWIGINTERN svn_opt_revision_t const *svn_client_copy_source_t__peg_revision(struct svn_client_copy_source_t *self){
return self->peg_revision;
}
+static svn_error_t * svn_proplist_invoke_receiver2(
+ svn_proplist_receiver2_t _obj, void *baton, const char *path, apr_hash_t *prop_hash, apr_array_header_t *inherited_props, apr_pool_t *scratch_pool) {
+ return _obj(baton, path, prop_hash, inherited_props, scratch_pool);
+}
+
static svn_error_t * svn_proplist_invoke_receiver(
svn_proplist_receiver_t _obj, void *baton, const char *path, apr_hash_t *prop_hash, apr_pool_t *pool) {
return _obj(baton, path, prop_hash, pool);
@@ -2300,11 +2318,21 @@ static svn_error_t * svn_client_invoke_diff_summarize_func(
return _obj(diff, baton, pool);
}
+static svn_error_t * svn_client_invoke_import_filter_func(
+ svn_client_import_filter_func_t _obj, void *baton, svn_boolean_t *filtered, const char *local_abspath, const svn_io_dirent2_t *dirent, apr_pool_t *scratch_pool) {
+ return _obj(baton, filtered, local_abspath, dirent, scratch_pool);
+}
+
static svn_error_t * svn_client_invoke_status_func(
svn_client_status_func_t _obj, void *baton, const char *path, const svn_client_status_t *status, apr_pool_t *scratch_pool) {
return _obj(baton, path, status, scratch_pool);
}
+static svn_error_t * svn_client_invoke_list_func2(
+ svn_client_list_func2_t _obj, void *baton, const char *path, const svn_dirent_t *dirent, const svn_lock_t *lock, const char *abs_path, const char *external_parent_url, const char *external_target, apr_pool_t *scratch_pool) {
+ return _obj(baton, path, dirent, lock, abs_path, external_parent_url, external_target, scratch_pool);
+}
+
static svn_error_t * svn_client_invoke_list_func(
svn_client_list_func_t _obj, void *baton, const char *path, const svn_dirent_t *dirent, const svn_lock_t *lock, const char *abs_path, apr_pool_t *pool) {
return _obj(baton, path, dirent, lock, abs_path, pool);
@@ -2366,7 +2394,13 @@ svn_client_set_config(svn_client_ctx_t *ctx,
apr_hash_t *config,
apr_pool_t *pool)
{
- ctx->config = config;
+ svn_error_t *err;
+
+ apr_hash_clear(ctx->config);
+ err = svn_config_copy_config(&ctx->config, config,
+ apr_hash_pool_get(ctx->config));
+ if (err)
+ svn_swig_rb_handle_svn_error(err);
return Qnil;
}
@@ -2962,11 +2996,11 @@ fail:
}
-swig_class SwigClassSvn_client_proplist_item_t;
+static swig_class SwigClassSvn_client_proplist_item_t;
SWIGINTERN VALUE
_wrap_svn_client_proplist_item_t_node_name_set(int argc, VALUE *argv, VALUE self) {
- svn_client_proplist_item_t *arg1 = (svn_client_proplist_item_t *) 0 ;
+ struct svn_client_proplist_item_t *arg1 = (struct svn_client_proplist_item_t *) 0 ;
svn_stringbuf_t *arg2 = (svn_stringbuf_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2976,9 +3010,9 @@ _wrap_svn_client_proplist_item_t_node_name_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_proplist_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_proplist_item_t *","node_name", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_proplist_item_t *","node_name", 1, self ));
}
- arg1 = (svn_client_proplist_item_t *)(argp1);
+ arg1 = (struct svn_client_proplist_item_t *)(argp1);
{
if (NIL_P(argv[0])) {
arg2 = NULL;
@@ -3002,7 +3036,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_proplist_item_t_node_name_get(int argc, VALUE *argv, VALUE self) {
- svn_client_proplist_item_t *arg1 = (svn_client_proplist_item_t *) 0 ;
+ struct svn_client_proplist_item_t *arg1 = (struct svn_client_proplist_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_stringbuf_t *result = 0 ;
@@ -3013,9 +3047,9 @@ _wrap_svn_client_proplist_item_t_node_name_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_proplist_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_proplist_item_t *","node_name", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_proplist_item_t *","node_name", 1, self ));
}
- arg1 = (svn_client_proplist_item_t *)(argp1);
+ arg1 = (struct svn_client_proplist_item_t *)(argp1);
result = (svn_stringbuf_t *) ((arg1)->node_name);
{
vresult = rb_str_new(result->data, result->len);
@@ -3028,7 +3062,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_proplist_item_t_prop_hash_set(int argc, VALUE *argv, VALUE self) {
- svn_client_proplist_item_t *arg1 = (svn_client_proplist_item_t *) 0 ;
+ struct svn_client_proplist_item_t *arg1 = (struct svn_client_proplist_item_t *) 0 ;
apr_hash_t *arg2 = (apr_hash_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3040,9 +3074,9 @@ _wrap_svn_client_proplist_item_t_prop_hash_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_proplist_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_proplist_item_t *","prop_hash", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_proplist_item_t *","prop_hash", 1, self ));
}
- arg1 = (svn_client_proplist_item_t *)(argp1);
+ arg1 = (struct svn_client_proplist_item_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_apr_hash_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "apr_hash_t *","prop_hash", 2, argv[0] ));
@@ -3057,7 +3091,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_proplist_item_t_prop_hash_get(int argc, VALUE *argv, VALUE self) {
- svn_client_proplist_item_t *arg1 = (svn_client_proplist_item_t *) 0 ;
+ struct svn_client_proplist_item_t *arg1 = (struct svn_client_proplist_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_hash_t *result = 0 ;
@@ -3068,9 +3102,9 @@ _wrap_svn_client_proplist_item_t_prop_hash_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_proplist_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_proplist_item_t *","prop_hash", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_proplist_item_t *","prop_hash", 1, self ));
}
- arg1 = (svn_client_proplist_item_t *)(argp1);
+ arg1 = (struct svn_client_proplist_item_t *)(argp1);
result = (apr_hash_t *) ((arg1)->prop_hash);
{
vresult = svn_swig_rb_prop_hash_to_hash(result);
@@ -3100,13 +3134,13 @@ _wrap_svn_client_proplist_item_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_client_proplist_item_t(int argc, VALUE *argv, VALUE self) {
- svn_client_proplist_item_t *result = 0 ;
+ struct svn_client_proplist_item_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_client_proplist_item_t *)calloc(1, sizeof(svn_client_proplist_item_t));
+ result = (struct svn_client_proplist_item_t *)calloc(1, sizeof(struct svn_client_proplist_item_t));
DATA_PTR(self) = result;
@@ -3119,7 +3153,7 @@ fail:
SWIGINTERN void
-free_svn_client_proplist_item_t(svn_client_proplist_item_t *arg1) {
+free_svn_client_proplist_item_t(struct svn_client_proplist_item_t *arg1) {
free((char *) arg1);
}
@@ -3177,11 +3211,11 @@ fail:
}
-swig_class SwigClassSvn_client_commit_info_t;
+static swig_class SwigClassSvn_client_commit_info_t;
SWIGINTERN VALUE
_wrap_svn_client_commit_info_t_revision_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_info_t *arg1 = (svn_client_commit_info_t *) 0 ;
+ struct svn_client_commit_info_t *arg1 = (struct svn_client_commit_info_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3193,9 +3227,9 @@ _wrap_svn_client_commit_info_t_revision_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_info_t *","revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_info_t *","revision", 1, self ));
}
- arg1 = (svn_client_commit_info_t *)(argp1);
+ arg1 = (struct svn_client_commit_info_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","revision", 2, argv[0] ));
@@ -3210,7 +3244,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_info_t_revision_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_info_t *arg1 = (svn_client_commit_info_t *) 0 ;
+ struct svn_client_commit_info_t *arg1 = (struct svn_client_commit_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -3221,9 +3255,9 @@ _wrap_svn_client_commit_info_t_revision_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_info_t *","revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_info_t *","revision", 1, self ));
}
- arg1 = (svn_client_commit_info_t *)(argp1);
+ arg1 = (struct svn_client_commit_info_t *)(argp1);
result = (svn_revnum_t) ((arg1)->revision);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -3234,7 +3268,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_info_t_date_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_info_t *arg1 = (svn_client_commit_info_t *) 0 ;
+ struct svn_client_commit_info_t *arg1 = (struct svn_client_commit_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3247,9 +3281,9 @@ _wrap_svn_client_commit_info_t_date_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_info_t *","date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_info_t *","date", 1, self ));
}
- arg1 = (svn_client_commit_info_t *)(argp1);
+ arg1 = (struct svn_client_commit_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","date", 2, argv[0] ));
@@ -3273,7 +3307,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_info_t_date_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_info_t *arg1 = (svn_client_commit_info_t *) 0 ;
+ struct svn_client_commit_info_t *arg1 = (struct svn_client_commit_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -3284,9 +3318,9 @@ _wrap_svn_client_commit_info_t_date_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_info_t *","date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_info_t *","date", 1, self ));
}
- arg1 = (svn_client_commit_info_t *)(argp1);
+ arg1 = (struct svn_client_commit_info_t *)(argp1);
result = (char *) ((arg1)->date);
{
if (result) {
@@ -3303,7 +3337,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_info_t_author_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_info_t *arg1 = (svn_client_commit_info_t *) 0 ;
+ struct svn_client_commit_info_t *arg1 = (struct svn_client_commit_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3316,9 +3350,9 @@ _wrap_svn_client_commit_info_t_author_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_info_t *","author", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_info_t *","author", 1, self ));
}
- arg1 = (svn_client_commit_info_t *)(argp1);
+ arg1 = (struct svn_client_commit_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","author", 2, argv[0] ));
@@ -3342,7 +3376,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_info_t_author_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_info_t *arg1 = (svn_client_commit_info_t *) 0 ;
+ struct svn_client_commit_info_t *arg1 = (struct svn_client_commit_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -3353,9 +3387,9 @@ _wrap_svn_client_commit_info_t_author_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_info_t *","author", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_info_t *","author", 1, self ));
}
- arg1 = (svn_client_commit_info_t *)(argp1);
+ arg1 = (struct svn_client_commit_info_t *)(argp1);
result = (char *) ((arg1)->author);
{
if (result) {
@@ -3389,13 +3423,13 @@ _wrap_svn_client_commit_info_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_client_commit_info_t(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_info_t *result = 0 ;
+ struct svn_client_commit_info_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_client_commit_info_t *)calloc(1, sizeof(svn_client_commit_info_t));
+ result = (struct svn_client_commit_info_t *)calloc(1, sizeof(struct svn_client_commit_info_t));
DATA_PTR(self) = result;
@@ -3408,15 +3442,15 @@ fail:
SWIGINTERN void
-free_svn_client_commit_info_t(svn_client_commit_info_t *arg1) {
+free_svn_client_commit_info_t(struct svn_client_commit_info_t *arg1) {
free((char *) arg1);
}
-swig_class SwigClassSvn_client_commit_item3_t;
+static swig_class SwigClassSvn_client_commit_item3_t;
SWIGINTERN VALUE
_wrap_svn_client_commit_item3_t_path_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3429,9 +3463,9 @@ _wrap_svn_client_commit_item3_t_path_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item3_t *","path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item3_t *","path", 1, self ));
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","path", 2, argv[0] ));
@@ -3455,7 +3489,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item3_t_path_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -3466,9 +3500,9 @@ _wrap_svn_client_commit_item3_t_path_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item3_t *","path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item3_t *","path", 1, self ));
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
result = (char *) ((arg1)->path);
{
if (result) {
@@ -3485,7 +3519,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item3_t_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3497,9 +3531,9 @@ _wrap_svn_client_commit_item3_t_kind_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item3_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item3_t *","kind", 1, self ));
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_node_kind_t","kind", 2, argv[0] ));
@@ -3514,7 +3548,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item3_t_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_node_kind_t result;
@@ -3525,9 +3559,9 @@ _wrap_svn_client_commit_item3_t_kind_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item3_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item3_t *","kind", 1, self ));
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -3538,7 +3572,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item3_t_url_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3551,9 +3585,9 @@ _wrap_svn_client_commit_item3_t_url_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item3_t *","url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item3_t *","url", 1, self ));
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","url", 2, argv[0] ));
@@ -3577,7 +3611,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item3_t_url_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -3588,9 +3622,9 @@ _wrap_svn_client_commit_item3_t_url_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item3_t *","url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item3_t *","url", 1, self ));
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
result = (char *) ((arg1)->url);
{
if (result) {
@@ -3607,7 +3641,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item3_t_revision_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3619,9 +3653,9 @@ _wrap_svn_client_commit_item3_t_revision_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item3_t *","revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item3_t *","revision", 1, self ));
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","revision", 2, argv[0] ));
@@ -3636,7 +3670,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item3_t_revision_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -3647,9 +3681,9 @@ _wrap_svn_client_commit_item3_t_revision_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item3_t *","revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item3_t *","revision", 1, self ));
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
result = (svn_revnum_t) ((arg1)->revision);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -3660,7 +3694,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item3_t_copyfrom_url_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3670,9 +3704,9 @@ _wrap_svn_client_commit_item3_t_copyfrom_url_set(int argc, VALUE *argv, VALUE se
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item3_t *","copyfrom_url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item3_t *","copyfrom_url", 1, self ));
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
{
if (NIL_P(argv[0])) {
arg2 = NULL;
@@ -3696,7 +3730,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item3_t_copyfrom_url_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -3707,9 +3741,9 @@ _wrap_svn_client_commit_item3_t_copyfrom_url_get(int argc, VALUE *argv, VALUE se
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item3_t *","copyfrom_url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item3_t *","copyfrom_url", 1, self ));
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
result = (char *) ((arg1)->copyfrom_url);
{
if (result) {
@@ -3726,7 +3760,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item3_t_copyfrom_rev_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3738,9 +3772,9 @@ _wrap_svn_client_commit_item3_t_copyfrom_rev_set(int argc, VALUE *argv, VALUE se
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item3_t *","copyfrom_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item3_t *","copyfrom_rev", 1, self ));
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","copyfrom_rev", 2, argv[0] ));
@@ -3755,7 +3789,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item3_t_copyfrom_rev_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -3766,9 +3800,9 @@ _wrap_svn_client_commit_item3_t_copyfrom_rev_get(int argc, VALUE *argv, VALUE se
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item3_t *","copyfrom_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item3_t *","copyfrom_rev", 1, self ));
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
result = (svn_revnum_t) ((arg1)->copyfrom_rev);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -3779,7 +3813,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item3_t_state_flags_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
apr_byte_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3791,9 +3825,9 @@ _wrap_svn_client_commit_item3_t_state_flags_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item3_t *","state_flags", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item3_t *","state_flags", 1, self ));
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "apr_byte_t","state_flags", 2, argv[0] ));
@@ -3808,7 +3842,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item3_t_state_flags_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_byte_t result;
@@ -3819,9 +3853,9 @@ _wrap_svn_client_commit_item3_t_state_flags_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item3_t *","state_flags", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item3_t *","state_flags", 1, self ));
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
result = ((arg1)->state_flags);
vresult = SWIG_From_unsigned_SS_long((unsigned long)(result));
return vresult;
@@ -3832,7 +3866,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item3_t_incoming_prop_changes_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3842,9 +3876,9 @@ _wrap_svn_client_commit_item3_t_incoming_prop_changes_set(int argc, VALUE *argv,
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item3_t *","incoming_prop_changes", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item3_t *","incoming_prop_changes", 1, self ));
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
{
if (NIL_P(argv[0])) {
arg2 = NULL;
@@ -3865,7 +3899,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item3_t_incoming_prop_changes_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_array_header_t *result = 0 ;
@@ -3876,9 +3910,9 @@ _wrap_svn_client_commit_item3_t_incoming_prop_changes_get(int argc, VALUE *argv,
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item3_t *","incoming_prop_changes", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item3_t *","incoming_prop_changes", 1, self ));
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
result = (apr_array_header_t *) ((arg1)->incoming_prop_changes);
{
vresult = SWIG_Ruby_AppendOutput(vresult, result ? svn_swig_rb_prop_apr_array_to_hash_prop(result) : Qnil);
@@ -3891,7 +3925,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item3_t_outgoing_prop_changes_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3901,9 +3935,9 @@ _wrap_svn_client_commit_item3_t_outgoing_prop_changes_set(int argc, VALUE *argv,
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item3_t *","outgoing_prop_changes", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item3_t *","outgoing_prop_changes", 1, self ));
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
{
if (NIL_P(argv[0])) {
arg2 = NULL;
@@ -3924,7 +3958,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item3_t_outgoing_prop_changes_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_array_header_t *result = 0 ;
@@ -3935,9 +3969,9 @@ _wrap_svn_client_commit_item3_t_outgoing_prop_changes_get(int argc, VALUE *argv,
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item3_t *","outgoing_prop_changes", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item3_t *","outgoing_prop_changes", 1, self ));
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
result = (apr_array_header_t *) ((arg1)->outgoing_prop_changes);
{
vresult = SWIG_Ruby_AppendOutput(vresult, result ? svn_swig_rb_prop_apr_array_to_hash_prop(result) : Qnil);
@@ -3950,7 +3984,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item3_t_session_relpath_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3963,9 +3997,9 @@ _wrap_svn_client_commit_item3_t_session_relpath_set(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item3_t *","session_relpath", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item3_t *","session_relpath", 1, self ));
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","session_relpath", 2, argv[0] ));
@@ -3989,7 +4023,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item3_t_session_relpath_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -4000,9 +4034,9 @@ _wrap_svn_client_commit_item3_t_session_relpath_get(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item3_t *","session_relpath", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item3_t *","session_relpath", 1, self ));
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
result = (char *) ((arg1)->session_relpath);
{
if (result) {
@@ -4017,6 +4051,75 @@ fail:
}
+SWIGINTERN VALUE
+_wrap_svn_client_commit_item3_t_moved_from_abspath_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item3_t *","moved_from_abspath", 1, self ));
+ }
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","moved_from_abspath", 2, argv[0] ));
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->moved_from_abspath) free((char *)arg1->moved_from_abspath);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->moved_from_abspath = copied;
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_client_commit_item3_t_moved_from_abspath_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ char *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item3_t *","moved_from_abspath", 1, self ));
+ }
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
+ result = (char *) ((arg1)->moved_from_abspath);
+ {
+ if (result) {
+ vresult = rb_str_new2(result);
+ } else {
+ vresult = Qnil;
+ }
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
#ifdef HAVE_RB_DEFINE_ALLOC_FUNC
SWIGINTERN VALUE
_wrap_svn_client_commit_item3_t_allocate(VALUE self) {
@@ -4039,7 +4142,7 @@ _wrap_new_svn_client_commit_item3_t(int argc, VALUE *argv, VALUE self) {
apr_pool_t *arg1 = (apr_pool_t *) 0 ;
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
- svn_client_commit_item3_t *result = 0 ;
+ struct svn_client_commit_item3_t *result = 0 ;
{
svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg1);
@@ -4053,7 +4156,7 @@ _wrap_new_svn_client_commit_item3_t(int argc, VALUE *argv, VALUE self) {
}
{
- result = (svn_client_commit_item3_t *)new_svn_client_commit_item3_t(arg1);
+ result = (struct svn_client_commit_item3_t *)new_svn_client_commit_item3_t(arg1);
DATA_PTR(self) = result;
@@ -4079,10 +4182,10 @@ fail:
}
-SWIGINTERN void delete_svn_client_commit_item3_t(svn_client_commit_item3_t *self){
+SWIGINTERN void delete_svn_client_commit_item3_t(struct svn_client_commit_item3_t *self){
}
SWIGINTERN void
-free_svn_client_commit_item3_t(svn_client_commit_item3_t *arg1) {
+free_svn_client_commit_item3_t(struct svn_client_commit_item3_t *arg1) {
delete_svn_client_commit_item3_t(arg1);
}
@@ -4097,7 +4200,7 @@ Create a duplicate of the class and unfreeze it if needed.
*/
SWIGINTERN VALUE
_wrap_svn_client_commit_item3_t_dup(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item3_t *arg1 = (svn_client_commit_item3_t *) 0 ;
+ struct svn_client_commit_item3_t *arg1 = (struct svn_client_commit_item3_t *) 0 ;
apr_pool_t *arg2 = (apr_pool_t *) 0 ;
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
@@ -4116,9 +4219,9 @@ _wrap_svn_client_commit_item3_t_dup(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item3_t *","dup", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item3_t *","dup", 1, self ));
}
- arg1 = (svn_client_commit_item3_t *)(argp1);
+ arg1 = (struct svn_client_commit_item3_t *)(argp1);
if (argc > 0) {
}
@@ -4149,11 +4252,11 @@ fail:
}
-swig_class SwigClassSvn_client_commit_item2_t;
+static swig_class SwigClassSvn_client_commit_item2_t;
SWIGINTERN VALUE
_wrap_svn_client_commit_item2_t_path_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4166,9 +4269,9 @@ _wrap_svn_client_commit_item2_t_path_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item2_t *","path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item2_t *","path", 1, self ));
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","path", 2, argv[0] ));
@@ -4192,7 +4295,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item2_t_path_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -4203,9 +4306,9 @@ _wrap_svn_client_commit_item2_t_path_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item2_t *","path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item2_t *","path", 1, self ));
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
result = (char *) ((arg1)->path);
{
if (result) {
@@ -4222,7 +4325,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item2_t_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4234,9 +4337,9 @@ _wrap_svn_client_commit_item2_t_kind_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item2_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item2_t *","kind", 1, self ));
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_node_kind_t","kind", 2, argv[0] ));
@@ -4251,7 +4354,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item2_t_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_node_kind_t result;
@@ -4262,9 +4365,9 @@ _wrap_svn_client_commit_item2_t_kind_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item2_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item2_t *","kind", 1, self ));
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -4275,7 +4378,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item2_t_url_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4288,9 +4391,9 @@ _wrap_svn_client_commit_item2_t_url_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item2_t *","url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item2_t *","url", 1, self ));
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","url", 2, argv[0] ));
@@ -4314,7 +4417,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item2_t_url_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -4325,9 +4428,9 @@ _wrap_svn_client_commit_item2_t_url_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item2_t *","url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item2_t *","url", 1, self ));
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
result = (char *) ((arg1)->url);
{
if (result) {
@@ -4344,7 +4447,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item2_t_revision_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4356,9 +4459,9 @@ _wrap_svn_client_commit_item2_t_revision_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item2_t *","revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item2_t *","revision", 1, self ));
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","revision", 2, argv[0] ));
@@ -4373,7 +4476,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item2_t_revision_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -4384,9 +4487,9 @@ _wrap_svn_client_commit_item2_t_revision_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item2_t *","revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item2_t *","revision", 1, self ));
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
result = (svn_revnum_t) ((arg1)->revision);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -4397,7 +4500,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item2_t_copyfrom_url_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4407,9 +4510,9 @@ _wrap_svn_client_commit_item2_t_copyfrom_url_set(int argc, VALUE *argv, VALUE se
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item2_t *","copyfrom_url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item2_t *","copyfrom_url", 1, self ));
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
{
if (NIL_P(argv[0])) {
arg2 = NULL;
@@ -4433,7 +4536,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item2_t_copyfrom_url_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -4444,9 +4547,9 @@ _wrap_svn_client_commit_item2_t_copyfrom_url_get(int argc, VALUE *argv, VALUE se
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item2_t *","copyfrom_url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item2_t *","copyfrom_url", 1, self ));
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
result = (char *) ((arg1)->copyfrom_url);
{
if (result) {
@@ -4463,7 +4566,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item2_t_copyfrom_rev_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4475,9 +4578,9 @@ _wrap_svn_client_commit_item2_t_copyfrom_rev_set(int argc, VALUE *argv, VALUE se
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item2_t *","copyfrom_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item2_t *","copyfrom_rev", 1, self ));
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","copyfrom_rev", 2, argv[0] ));
@@ -4492,7 +4595,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item2_t_copyfrom_rev_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -4503,9 +4606,9 @@ _wrap_svn_client_commit_item2_t_copyfrom_rev_get(int argc, VALUE *argv, VALUE se
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item2_t *","copyfrom_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item2_t *","copyfrom_rev", 1, self ));
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
result = (svn_revnum_t) ((arg1)->copyfrom_rev);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -4516,7 +4619,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item2_t_state_flags_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
apr_byte_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4528,9 +4631,9 @@ _wrap_svn_client_commit_item2_t_state_flags_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item2_t *","state_flags", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item2_t *","state_flags", 1, self ));
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "apr_byte_t","state_flags", 2, argv[0] ));
@@ -4545,7 +4648,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item2_t_state_flags_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_byte_t result;
@@ -4556,9 +4659,9 @@ _wrap_svn_client_commit_item2_t_state_flags_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item2_t *","state_flags", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item2_t *","state_flags", 1, self ));
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
result = ((arg1)->state_flags);
vresult = SWIG_From_unsigned_SS_long((unsigned long)(result));
return vresult;
@@ -4569,7 +4672,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item2_t_wcprop_changes_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4579,9 +4682,9 @@ _wrap_svn_client_commit_item2_t_wcprop_changes_set(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item2_t *","wcprop_changes", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item2_t *","wcprop_changes", 1, self ));
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
{
VALUE rb_pool;
apr_pool_t *pool;
@@ -4599,7 +4702,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item2_t_wcprop_changes_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item2_t *arg1 = (svn_client_commit_item2_t *) 0 ;
+ struct svn_client_commit_item2_t *arg1 = (struct svn_client_commit_item2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_array_header_t *result = 0 ;
@@ -4610,9 +4713,9 @@ _wrap_svn_client_commit_item2_t_wcprop_changes_get(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item2_t *","wcprop_changes", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item2_t *","wcprop_changes", 1, self ));
}
- arg1 = (svn_client_commit_item2_t *)(argp1);
+ arg1 = (struct svn_client_commit_item2_t *)(argp1);
result = (apr_array_header_t *) ((arg1)->wcprop_changes);
{
vresult = SWIG_Ruby_AppendOutput(vresult, svn_swig_rb_prop_apr_array_to_hash_prop(result));
@@ -4642,13 +4745,13 @@ _wrap_svn_client_commit_item2_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_client_commit_item2_t(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item2_t *result = 0 ;
+ struct svn_client_commit_item2_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_client_commit_item2_t *)calloc(1, sizeof(svn_client_commit_item2_t));
+ result = (struct svn_client_commit_item2_t *)calloc(1, sizeof(struct svn_client_commit_item2_t));
DATA_PTR(self) = result;
@@ -4661,15 +4764,15 @@ fail:
SWIGINTERN void
-free_svn_client_commit_item2_t(svn_client_commit_item2_t *arg1) {
+free_svn_client_commit_item2_t(struct svn_client_commit_item2_t *arg1) {
free((char *) arg1);
}
-swig_class SwigClassSvn_client_commit_item_t;
+static swig_class SwigClassSvn_client_commit_item_t;
SWIGINTERN VALUE
_wrap_svn_client_commit_item_t_path_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4682,9 +4785,9 @@ _wrap_svn_client_commit_item_t_path_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item_t *","path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item_t *","path", 1, self ));
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","path", 2, argv[0] ));
@@ -4708,7 +4811,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item_t_path_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -4719,9 +4822,9 @@ _wrap_svn_client_commit_item_t_path_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item_t *","path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item_t *","path", 1, self ));
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
result = (char *) ((arg1)->path);
{
if (result) {
@@ -4738,7 +4841,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item_t_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4750,9 +4853,9 @@ _wrap_svn_client_commit_item_t_kind_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item_t *","kind", 1, self ));
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_node_kind_t","kind", 2, argv[0] ));
@@ -4767,7 +4870,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item_t_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_node_kind_t result;
@@ -4778,9 +4881,9 @@ _wrap_svn_client_commit_item_t_kind_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item_t *","kind", 1, self ));
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -4791,7 +4894,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item_t_url_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4804,9 +4907,9 @@ _wrap_svn_client_commit_item_t_url_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item_t *","url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item_t *","url", 1, self ));
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","url", 2, argv[0] ));
@@ -4830,7 +4933,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item_t_url_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -4841,9 +4944,9 @@ _wrap_svn_client_commit_item_t_url_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item_t *","url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item_t *","url", 1, self ));
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
result = (char *) ((arg1)->url);
{
if (result) {
@@ -4860,7 +4963,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item_t_revision_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4872,9 +4975,9 @@ _wrap_svn_client_commit_item_t_revision_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item_t *","revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item_t *","revision", 1, self ));
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","revision", 2, argv[0] ));
@@ -4889,7 +4992,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item_t_revision_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -4900,9 +5003,9 @@ _wrap_svn_client_commit_item_t_revision_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item_t *","revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item_t *","revision", 1, self ));
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
result = (svn_revnum_t) ((arg1)->revision);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -4913,7 +5016,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item_t_copyfrom_url_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4923,9 +5026,9 @@ _wrap_svn_client_commit_item_t_copyfrom_url_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item_t *","copyfrom_url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item_t *","copyfrom_url", 1, self ));
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
{
if (NIL_P(argv[0])) {
arg2 = NULL;
@@ -4949,7 +5052,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item_t_copyfrom_url_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -4960,9 +5063,9 @@ _wrap_svn_client_commit_item_t_copyfrom_url_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item_t *","copyfrom_url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item_t *","copyfrom_url", 1, self ));
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
result = (char *) ((arg1)->copyfrom_url);
{
if (result) {
@@ -4979,7 +5082,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item_t_state_flags_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
apr_byte_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4991,9 +5094,9 @@ _wrap_svn_client_commit_item_t_state_flags_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item_t *","state_flags", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item_t *","state_flags", 1, self ));
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "apr_byte_t","state_flags", 2, argv[0] ));
@@ -5008,7 +5111,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item_t_state_flags_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_byte_t result;
@@ -5019,9 +5122,9 @@ _wrap_svn_client_commit_item_t_state_flags_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item_t *","state_flags", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item_t *","state_flags", 1, self ));
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
result = ((arg1)->state_flags);
vresult = SWIG_From_unsigned_SS_long((unsigned long)(result));
return vresult;
@@ -5032,7 +5135,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item_t_wcprop_changes_set(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5042,9 +5145,9 @@ _wrap_svn_client_commit_item_t_wcprop_changes_set(int argc, VALUE *argv, VALUE s
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item_t *","wcprop_changes", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item_t *","wcprop_changes", 1, self ));
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
{
VALUE rb_pool;
apr_pool_t *pool;
@@ -5062,7 +5165,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_commit_item_t_wcprop_changes_get(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item_t *arg1 = (svn_client_commit_item_t *) 0 ;
+ struct svn_client_commit_item_t *arg1 = (struct svn_client_commit_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_array_header_t *result = 0 ;
@@ -5073,9 +5176,9 @@ _wrap_svn_client_commit_item_t_wcprop_changes_get(int argc, VALUE *argv, VALUE s
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_commit_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_commit_item_t *","wcprop_changes", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_commit_item_t *","wcprop_changes", 1, self ));
}
- arg1 = (svn_client_commit_item_t *)(argp1);
+ arg1 = (struct svn_client_commit_item_t *)(argp1);
result = (apr_array_header_t *) ((arg1)->wcprop_changes);
{
vresult = SWIG_Ruby_AppendOutput(vresult, svn_swig_rb_prop_apr_array_to_hash_prop(result));
@@ -5105,13 +5208,13 @@ _wrap_svn_client_commit_item_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_client_commit_item_t(int argc, VALUE *argv, VALUE self) {
- svn_client_commit_item_t *result = 0 ;
+ struct svn_client_commit_item_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_client_commit_item_t *)calloc(1, sizeof(svn_client_commit_item_t));
+ result = (struct svn_client_commit_item_t *)calloc(1, sizeof(struct svn_client_commit_item_t));
DATA_PTR(self) = result;
@@ -5124,7 +5227,7 @@ fail:
SWIGINTERN void
-free_svn_client_commit_item_t(svn_client_commit_item_t *arg1) {
+free_svn_client_commit_item_t(struct svn_client_commit_item_t *arg1) {
free((char *) arg1);
}
@@ -5174,11 +5277,11 @@ fail:
}
-swig_class SwigClassSvn_client_diff_summarize_t;
+static swig_class SwigClassSvn_client_diff_summarize_t;
SWIGINTERN VALUE
_wrap_svn_client_diff_summarize_t_path_set(int argc, VALUE *argv, VALUE self) {
- svn_client_diff_summarize_t *arg1 = (svn_client_diff_summarize_t *) 0 ;
+ struct svn_client_diff_summarize_t *arg1 = (struct svn_client_diff_summarize_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5191,9 +5294,9 @@ _wrap_svn_client_diff_summarize_t_path_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_diff_summarize_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_diff_summarize_t *","path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_diff_summarize_t *","path", 1, self ));
}
- arg1 = (svn_client_diff_summarize_t *)(argp1);
+ arg1 = (struct svn_client_diff_summarize_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","path", 2, argv[0] ));
@@ -5217,7 +5320,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_diff_summarize_t_path_get(int argc, VALUE *argv, VALUE self) {
- svn_client_diff_summarize_t *arg1 = (svn_client_diff_summarize_t *) 0 ;
+ struct svn_client_diff_summarize_t *arg1 = (struct svn_client_diff_summarize_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -5228,9 +5331,9 @@ _wrap_svn_client_diff_summarize_t_path_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_diff_summarize_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_diff_summarize_t *","path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_diff_summarize_t *","path", 1, self ));
}
- arg1 = (svn_client_diff_summarize_t *)(argp1);
+ arg1 = (struct svn_client_diff_summarize_t *)(argp1);
result = (char *) ((arg1)->path);
{
if (result) {
@@ -5247,7 +5350,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_diff_summarize_t_summarize_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_client_diff_summarize_t *arg1 = (svn_client_diff_summarize_t *) 0 ;
+ struct svn_client_diff_summarize_t *arg1 = (struct svn_client_diff_summarize_t *) 0 ;
svn_client_diff_summarize_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5259,9 +5362,9 @@ _wrap_svn_client_diff_summarize_t_summarize_kind_set(int argc, VALUE *argv, VALU
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_diff_summarize_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_diff_summarize_t *","summarize_kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_diff_summarize_t *","summarize_kind", 1, self ));
}
- arg1 = (svn_client_diff_summarize_t *)(argp1);
+ arg1 = (struct svn_client_diff_summarize_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_client_diff_summarize_kind_t","summarize_kind", 2, argv[0] ));
@@ -5276,7 +5379,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_diff_summarize_t_summarize_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_client_diff_summarize_t *arg1 = (svn_client_diff_summarize_t *) 0 ;
+ struct svn_client_diff_summarize_t *arg1 = (struct svn_client_diff_summarize_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_client_diff_summarize_kind_t result;
@@ -5287,9 +5390,9 @@ _wrap_svn_client_diff_summarize_t_summarize_kind_get(int argc, VALUE *argv, VALU
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_diff_summarize_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_diff_summarize_t *","summarize_kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_diff_summarize_t *","summarize_kind", 1, self ));
}
- arg1 = (svn_client_diff_summarize_t *)(argp1);
+ arg1 = (struct svn_client_diff_summarize_t *)(argp1);
result = (svn_client_diff_summarize_kind_t) ((arg1)->summarize_kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -5300,7 +5403,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_diff_summarize_t_prop_changed_set(int argc, VALUE *argv, VALUE self) {
- svn_client_diff_summarize_t *arg1 = (svn_client_diff_summarize_t *) 0 ;
+ struct svn_client_diff_summarize_t *arg1 = (struct svn_client_diff_summarize_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5310,9 +5413,9 @@ _wrap_svn_client_diff_summarize_t_prop_changed_set(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_diff_summarize_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_diff_summarize_t *","prop_changed", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_diff_summarize_t *","prop_changed", 1, self ));
}
- arg1 = (svn_client_diff_summarize_t *)(argp1);
+ arg1 = (struct svn_client_diff_summarize_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->prop_changed = arg2;
return Qnil;
@@ -5323,7 +5426,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_diff_summarize_t_prop_changed_get(int argc, VALUE *argv, VALUE self) {
- svn_client_diff_summarize_t *arg1 = (svn_client_diff_summarize_t *) 0 ;
+ struct svn_client_diff_summarize_t *arg1 = (struct svn_client_diff_summarize_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -5334,9 +5437,9 @@ _wrap_svn_client_diff_summarize_t_prop_changed_get(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_diff_summarize_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_diff_summarize_t *","prop_changed", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_diff_summarize_t *","prop_changed", 1, self ));
}
- arg1 = (svn_client_diff_summarize_t *)(argp1);
+ arg1 = (struct svn_client_diff_summarize_t *)(argp1);
result = (svn_boolean_t) ((arg1)->prop_changed);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -5347,7 +5450,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_diff_summarize_t_node_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_client_diff_summarize_t *arg1 = (svn_client_diff_summarize_t *) 0 ;
+ struct svn_client_diff_summarize_t *arg1 = (struct svn_client_diff_summarize_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5359,9 +5462,9 @@ _wrap_svn_client_diff_summarize_t_node_kind_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_diff_summarize_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_diff_summarize_t *","node_kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_diff_summarize_t *","node_kind", 1, self ));
}
- arg1 = (svn_client_diff_summarize_t *)(argp1);
+ arg1 = (struct svn_client_diff_summarize_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_node_kind_t","node_kind", 2, argv[0] ));
@@ -5376,7 +5479,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_diff_summarize_t_node_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_client_diff_summarize_t *arg1 = (svn_client_diff_summarize_t *) 0 ;
+ struct svn_client_diff_summarize_t *arg1 = (struct svn_client_diff_summarize_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_node_kind_t result;
@@ -5387,9 +5490,9 @@ _wrap_svn_client_diff_summarize_t_node_kind_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_diff_summarize_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_diff_summarize_t *","node_kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_diff_summarize_t *","node_kind", 1, self ));
}
- arg1 = (svn_client_diff_summarize_t *)(argp1);
+ arg1 = (struct svn_client_diff_summarize_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->node_kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -5417,13 +5520,13 @@ _wrap_svn_client_diff_summarize_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_client_diff_summarize_t(int argc, VALUE *argv, VALUE self) {
- svn_client_diff_summarize_t *result = 0 ;
+ struct svn_client_diff_summarize_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_client_diff_summarize_t *)calloc(1, sizeof(svn_client_diff_summarize_t));
+ result = (struct svn_client_diff_summarize_t *)calloc(1, sizeof(struct svn_client_diff_summarize_t));
DATA_PTR(self) = result;
@@ -5436,7 +5539,7 @@ fail:
SWIGINTERN void
-free_svn_client_diff_summarize_t(svn_client_diff_summarize_t *arg1) {
+free_svn_client_diff_summarize_t(struct svn_client_diff_summarize_t *arg1) {
free((char *) arg1);
}
@@ -5494,11 +5597,11 @@ fail:
}
-swig_class SwigClassSvn_client_ctx_t;
+static swig_class SwigClassSvn_client_ctx_t;
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_auth_baton_set(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_auth_baton_t *arg2 = (svn_auth_baton_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5510,9 +5613,9 @@ _wrap_svn_client_ctx_t_auth_baton_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","auth_baton", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","auth_baton", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_auth_baton_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_auth_baton_t *","auth_baton", 2, argv[0] ));
@@ -5527,7 +5630,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_auth_baton_get(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_auth_baton_t *result = 0 ;
@@ -5538,9 +5641,9 @@ _wrap_svn_client_ctx_t_auth_baton_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","auth_baton", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","auth_baton", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (svn_auth_baton_t *) ((arg1)->auth_baton);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_auth_baton_t, 0 | 0 );
return vresult;
@@ -5551,7 +5654,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_notify_func_set(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_wc_notify_func_t arg2 = (svn_wc_notify_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5561,9 +5664,9 @@ _wrap_svn_client_ctx_t_notify_func_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","notify_func", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","notify_func", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void);
if (!SWIG_IsOK(res)) {
@@ -5579,7 +5682,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_notify_func_get(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_notify_func_t result;
@@ -5590,9 +5693,9 @@ _wrap_svn_client_ctx_t_notify_func_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","notify_func", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","notify_func", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (svn_wc_notify_func_t) ((arg1)->notify_func);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void);
return vresult;
@@ -5603,7 +5706,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_notify_baton_set(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5614,9 +5717,9 @@ _wrap_svn_client_ctx_t_notify_baton_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","notify_baton", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","notify_baton", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0],SWIG_as_voidptrptr(&arg2), 0, SWIG_POINTER_DISOWN);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "void *","notify_baton", 2, argv[0] ));
@@ -5630,7 +5733,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_notify_baton_get(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
void *result = 0 ;
@@ -5641,9 +5744,9 @@ _wrap_svn_client_ctx_t_notify_baton_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","notify_baton", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","notify_baton", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (void *) ((arg1)->notify_baton);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 | 0 );
return vresult;
@@ -5654,7 +5757,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_log_msg_func_set(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_client_get_commit_log_t arg2 = (svn_client_get_commit_log_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5664,9 +5767,9 @@ _wrap_svn_client_ctx_t_log_msg_func_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","log_msg_func", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","log_msg_func", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_p_q_const__char_p_p_q_const__char_p_apr_array_header_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -5682,7 +5785,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_log_msg_func_get(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_client_get_commit_log_t result;
@@ -5693,9 +5796,9 @@ _wrap_svn_client_ctx_t_log_msg_func_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","log_msg_func", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","log_msg_func", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (svn_client_get_commit_log_t) ((arg1)->log_msg_func);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_q_const__char_p_p_q_const__char_p_apr_array_header_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -5706,7 +5809,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_log_msg_baton_set(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5717,9 +5820,9 @@ _wrap_svn_client_ctx_t_log_msg_baton_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","log_msg_baton", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","log_msg_baton", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0],SWIG_as_voidptrptr(&arg2), 0, SWIG_POINTER_DISOWN);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "void *","log_msg_baton", 2, argv[0] ));
@@ -5733,7 +5836,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_log_msg_baton_get(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
void *result = 0 ;
@@ -5744,9 +5847,9 @@ _wrap_svn_client_ctx_t_log_msg_baton_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","log_msg_baton", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","log_msg_baton", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (void *) ((arg1)->log_msg_baton);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 | 0 );
return vresult;
@@ -5757,7 +5860,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_cancel_func_set(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_cancel_func_t arg2 = (svn_cancel_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5767,9 +5870,9 @@ _wrap_svn_client_ctx_t_cancel_func_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","cancel_func", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","cancel_func", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -5785,7 +5888,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_cancel_func_get(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_cancel_func_t result;
@@ -5796,9 +5899,9 @@ _wrap_svn_client_ctx_t_cancel_func_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","cancel_func", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","cancel_func", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (svn_cancel_func_t) ((arg1)->cancel_func);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__p_svn_error_t);
return vresult;
@@ -5809,7 +5912,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_cancel_baton_set(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5819,9 +5922,9 @@ _wrap_svn_client_ctx_t_cancel_baton_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","cancel_baton", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","cancel_baton", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
arg2 = (void *)argv[0];
}
@@ -5834,7 +5937,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_cancel_baton_get(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
void *result = 0 ;
@@ -5845,9 +5948,9 @@ _wrap_svn_client_ctx_t_cancel_baton_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","cancel_baton", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","cancel_baton", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (void *) ((arg1)->cancel_baton);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 | 0 );
return vresult;
@@ -5858,7 +5961,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_notify_func2_set(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_wc_notify_func2_t arg2 = (svn_wc_notify_func2_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5868,9 +5971,9 @@ _wrap_svn_client_ctx_t_notify_func2_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","notify_func2", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","notify_func2", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void);
if (!SWIG_IsOK(res)) {
@@ -5886,7 +5989,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_notify_func2_get(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_notify_func2_t result;
@@ -5897,9 +6000,9 @@ _wrap_svn_client_ctx_t_notify_func2_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","notify_func2", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","notify_func2", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (svn_wc_notify_func2_t) ((arg1)->notify_func2);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void);
return vresult;
@@ -5910,7 +6013,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_notify_baton2_set(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5920,9 +6023,9 @@ _wrap_svn_client_ctx_t_notify_baton2_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","notify_baton2", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","notify_baton2", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
arg2 = (void *)argv[0];
}
@@ -5935,7 +6038,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_notify_baton2_get(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
void *result = 0 ;
@@ -5946,9 +6049,9 @@ _wrap_svn_client_ctx_t_notify_baton2_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","notify_baton2", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","notify_baton2", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (void *) ((arg1)->notify_baton2);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 | 0 );
return vresult;
@@ -5959,7 +6062,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_log_msg_func2_set(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_client_get_commit_log2_t arg2 = (svn_client_get_commit_log2_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5969,9 +6072,9 @@ _wrap_svn_client_ctx_t_log_msg_func2_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","log_msg_func2", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","log_msg_func2", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_p_q_const__char_p_p_q_const__char_p_q_const__apr_array_header_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -5987,7 +6090,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_log_msg_func2_get(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_client_get_commit_log2_t result;
@@ -5998,9 +6101,9 @@ _wrap_svn_client_ctx_t_log_msg_func2_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","log_msg_func2", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","log_msg_func2", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (svn_client_get_commit_log2_t) ((arg1)->log_msg_func2);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_q_const__char_p_p_q_const__char_p_q_const__apr_array_header_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -6011,7 +6114,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_log_msg_baton2_set(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6022,9 +6125,9 @@ _wrap_svn_client_ctx_t_log_msg_baton2_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","log_msg_baton2", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","log_msg_baton2", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0],SWIG_as_voidptrptr(&arg2), 0, SWIG_POINTER_DISOWN);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "void *","log_msg_baton2", 2, argv[0] ));
@@ -6038,7 +6141,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_log_msg_baton2_get(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
void *result = 0 ;
@@ -6049,9 +6152,9 @@ _wrap_svn_client_ctx_t_log_msg_baton2_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","log_msg_baton2", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","log_msg_baton2", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (void *) ((arg1)->log_msg_baton2);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 | 0 );
return vresult;
@@ -6062,7 +6165,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_progress_func_set(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_ra_progress_notify_func_t arg2 = (svn_ra_progress_notify_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6072,9 +6175,9 @@ _wrap_svn_client_ctx_t_progress_func_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","progress_func", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","progress_func", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_apr_off_t_apr_off_t_p_void_p_apr_pool_t__void);
if (!SWIG_IsOK(res)) {
@@ -6090,7 +6193,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_progress_func_get(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_ra_progress_notify_func_t result;
@@ -6101,9 +6204,9 @@ _wrap_svn_client_ctx_t_progress_func_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","progress_func", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","progress_func", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (svn_ra_progress_notify_func_t) ((arg1)->progress_func);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_apr_off_t_apr_off_t_p_void_p_apr_pool_t__void);
return vresult;
@@ -6114,7 +6217,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_progress_baton_set(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6125,9 +6228,9 @@ _wrap_svn_client_ctx_t_progress_baton_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","progress_baton", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","progress_baton", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0],SWIG_as_voidptrptr(&arg2), 0, SWIG_POINTER_DISOWN);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "void *","progress_baton", 2, argv[0] ));
@@ -6141,7 +6244,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_progress_baton_get(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
void *result = 0 ;
@@ -6152,9 +6255,9 @@ _wrap_svn_client_ctx_t_progress_baton_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","progress_baton", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","progress_baton", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (void *) ((arg1)->progress_baton);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 | 0 );
return vresult;
@@ -6165,7 +6268,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_log_msg_func3_set(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_client_get_commit_log3_t arg2 = (svn_client_get_commit_log3_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6175,9 +6278,9 @@ _wrap_svn_client_ctx_t_log_msg_func3_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","log_msg_func3", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","log_msg_func3", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_p_q_const__char_p_p_q_const__char_p_q_const__apr_array_header_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -6193,7 +6296,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_log_msg_func3_get(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_client_get_commit_log3_t result;
@@ -6204,9 +6307,9 @@ _wrap_svn_client_ctx_t_log_msg_func3_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","log_msg_func3", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","log_msg_func3", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (svn_client_get_commit_log3_t) ((arg1)->log_msg_func3);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_q_const__char_p_p_q_const__char_p_q_const__apr_array_header_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -6217,7 +6320,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_log_msg_baton3_set(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6227,9 +6330,9 @@ _wrap_svn_client_ctx_t_log_msg_baton3_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","log_msg_baton3", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","log_msg_baton3", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
arg2 = (void *)argv[0];
}
@@ -6242,7 +6345,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_log_msg_baton3_get(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
void *result = 0 ;
@@ -6253,9 +6356,9 @@ _wrap_svn_client_ctx_t_log_msg_baton3_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","log_msg_baton3", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","log_msg_baton3", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (void *) ((arg1)->log_msg_baton3);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 | 0 );
return vresult;
@@ -6266,7 +6369,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_mimetypes_map_set(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
apr_hash_t *arg2 = (apr_hash_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6276,9 +6379,9 @@ _wrap_svn_client_ctx_t_mimetypes_map_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","mimetypes_map", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","mimetypes_map", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
VALUE rb_pool = Qnil;
if (!_global_pool) {
@@ -6306,7 +6409,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_mimetypes_map_get(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_hash_t *result = 0 ;
@@ -6317,9 +6420,9 @@ _wrap_svn_client_ctx_t_mimetypes_map_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","mimetypes_map", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","mimetypes_map", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (apr_hash_t *) ((arg1)->mimetypes_map);
{
vresult = result ? svn_swig_rb_apr_hash_to_hash_string(result) : Qnil;
@@ -6332,7 +6435,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_conflict_func_set(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_wc_conflict_resolver_func_t arg2 = (svn_wc_conflict_resolver_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6342,9 +6445,9 @@ _wrap_svn_client_ctx_t_conflict_func_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","conflict_func", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","conflict_func", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -6360,7 +6463,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_conflict_func_get(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_conflict_resolver_func_t result;
@@ -6371,9 +6474,9 @@ _wrap_svn_client_ctx_t_conflict_func_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","conflict_func", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","conflict_func", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (svn_wc_conflict_resolver_func_t) ((arg1)->conflict_func);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -6384,7 +6487,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_conflict_baton_set(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6395,9 +6498,9 @@ _wrap_svn_client_ctx_t_conflict_baton_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","conflict_baton", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","conflict_baton", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0],SWIG_as_voidptrptr(&arg2), 0, SWIG_POINTER_DISOWN);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "void *","conflict_baton", 2, argv[0] ));
@@ -6411,7 +6514,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_conflict_baton_get(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
void *result = 0 ;
@@ -6422,9 +6525,9 @@ _wrap_svn_client_ctx_t_conflict_baton_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","conflict_baton", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","conflict_baton", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (void *) ((arg1)->conflict_baton);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 | 0 );
return vresult;
@@ -6435,7 +6538,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_client_name_set(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6448,9 +6551,9 @@ _wrap_svn_client_ctx_t_client_name_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","client_name", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","client_name", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","client_name", 2, argv[0] ));
@@ -6474,7 +6577,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_client_name_get(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -6485,9 +6588,9 @@ _wrap_svn_client_ctx_t_client_name_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","client_name", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","client_name", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (char *) ((arg1)->client_name);
{
if (result) {
@@ -6504,7 +6607,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_conflict_func2_set(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_wc_conflict_resolver_func2_t arg2 = (svn_wc_conflict_resolver_func2_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6514,9 +6617,9 @@ _wrap_svn_client_ctx_t_conflict_func2_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","conflict_func2", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","conflict_func2", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description2_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -6532,7 +6635,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_conflict_func2_get(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_conflict_resolver_func2_t result;
@@ -6543,9 +6646,9 @@ _wrap_svn_client_ctx_t_conflict_func2_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","conflict_func2", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","conflict_func2", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (svn_wc_conflict_resolver_func2_t) ((arg1)->conflict_func2);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description2_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -6556,7 +6659,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_conflict_baton2_set(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *arg2 = (void *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6567,9 +6670,9 @@ _wrap_svn_client_ctx_t_conflict_baton2_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","conflict_baton2", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","conflict_baton2", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0],SWIG_as_voidptrptr(&arg2), 0, SWIG_POINTER_DISOWN);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "void *","conflict_baton2", 2, argv[0] ));
@@ -6583,7 +6686,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_conflict_baton2_get(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
void *result = 0 ;
@@ -6594,9 +6697,9 @@ _wrap_svn_client_ctx_t_conflict_baton2_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","conflict_baton2", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","conflict_baton2", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (void *) ((arg1)->conflict_baton2);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 | 0 );
return vresult;
@@ -6607,7 +6710,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_wc_ctx_set(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
svn_wc_context_t *arg2 = (svn_wc_context_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6619,9 +6722,9 @@ _wrap_svn_client_ctx_t_wc_ctx_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","wc_ctx", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","wc_ctx", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_wc_context_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_wc_context_t *","wc_ctx", 2, argv[0] ));
@@ -6636,7 +6739,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_ctx_t_wc_ctx_get(int argc, VALUE *argv, VALUE self) {
- svn_client_ctx_t *arg1 = (svn_client_ctx_t *) 0 ;
+ struct svn_client_ctx_t *arg1 = (struct svn_client_ctx_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_context_t *result = 0 ;
@@ -6647,9 +6750,9 @@ _wrap_svn_client_ctx_t_wc_ctx_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_ctx_t *","wc_ctx", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_ctx_t *","wc_ctx", 1, self ));
}
- arg1 = (svn_client_ctx_t *)(argp1);
+ arg1 = (struct svn_client_ctx_t *)(argp1);
result = (svn_wc_context_t *) ((arg1)->wc_ctx);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_wc_context_t, 0 | 0 );
return vresult;
@@ -6680,7 +6783,7 @@ _wrap_new_svn_client_ctx_t(int argc, VALUE *argv, VALUE self) {
apr_pool_t *arg1 = (apr_pool_t *) 0 ;
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
- svn_client_ctx_t *result = 0 ;
+ struct svn_client_ctx_t *result = 0 ;
{
svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg1);
@@ -6694,7 +6797,7 @@ _wrap_new_svn_client_ctx_t(int argc, VALUE *argv, VALUE self) {
}
{
- result = (svn_client_ctx_t *)new_svn_client_ctx_t(arg1);
+ result = (struct svn_client_ctx_t *)new_svn_client_ctx_t(arg1);
DATA_PTR(self) = result;
@@ -6720,14 +6823,81 @@ fail:
}
-SWIGINTERN void delete_svn_client_ctx_t(svn_client_ctx_t *self){
+SWIGINTERN void delete_svn_client_ctx_t(struct svn_client_ctx_t *self){
}
SWIGINTERN void
-free_svn_client_ctx_t(svn_client_ctx_t *arg1) {
+free_svn_client_ctx_t(struct svn_client_ctx_t *arg1) {
delete_svn_client_ctx_t(arg1);
}
SWIGINTERN VALUE
+_wrap_svn_client_create_context2(int argc, VALUE *argv, VALUE self) {
+ svn_client_ctx_t **arg1 = (svn_client_ctx_t **) 0 ;
+ apr_hash_t *arg2 = (apr_hash_t *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_client_ctx_t *temp1 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg3);
+ _global_pool = arg3;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ if ((argc < 1) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_apr_hash_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "apr_hash_t *","svn_client_create_context2", 2, argv[0] ));
+ }
+ arg2 = (apr_hash_t *)(argp2);
+ if (argc > 1) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_create_context2(arg1,arg2,arg3);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_client_ctx_t, 0));
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_client_args_to_target_array2(int argc, VALUE *argv, VALUE self) {
apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
apr_getopt_t *arg2 = (apr_getopt_t *) 0 ;
@@ -8059,6 +8229,90 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_client_add5(int argc, VALUE *argv, VALUE self) {
+ char *arg1 = (char *) 0 ;
+ svn_depth_t arg2 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ svn_boolean_t arg5 ;
+ svn_boolean_t arg6 ;
+ svn_client_ctx_t *arg7 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg8 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ void *argp7 = 0 ;
+ int res7 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg8);
+ _global_pool = arg8;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 7) || (argc > 8)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 7)",argc); SWIG_fail;
+ }
+ res1 = SWIG_AsCharPtrAndSize(argv[0], &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "char const *","svn_client_add5", 1, argv[0] ));
+ }
+ arg1 = (char *)(buf1);
+ {
+ arg2 = svn_swig_rb_to_depth(argv[1]);
+ }
+ arg3 = RTEST(argv[2]);
+ arg4 = RTEST(argv[3]);
+ arg5 = RTEST(argv[4]);
+ arg6 = RTEST(argv[5]);
+ res7 = SWIG_ConvertPtr(argv[6], &argp7,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res7)) {
+ SWIG_exception_fail(SWIG_ArgError(res7), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_add5", 7, argv[6] ));
+ }
+ arg7 = (svn_client_ctx_t *)(argp7);
+ if (argc > 7) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_add5((char const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_client_add4(int argc, VALUE *argv, VALUE self) {
char *arg1 = (char *) 0 ;
svn_depth_t arg2 ;
@@ -8411,7 +8665,6 @@ _wrap_svn_client_mkdir4(int argc, VALUE *argv, VALUE self) {
apr_pool_t *arg7 = (apr_pool_t *) 0 ;
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
- int res5 ;
void *argp6 = 0 ;
int res6 = 0 ;
svn_error_t *result = 0 ;
@@ -8428,8 +8681,8 @@ _wrap_svn_client_mkdir4(int argc, VALUE *argv, VALUE self) {
_global_pool = arg7;
svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
}
- if ((argc < 5) || (argc > 7)) {
- rb_raise(rb_eArgError, "wrong # of arguments(%d for 5)",argc); SWIG_fail;
+ if ((argc < 4) || (argc > 6)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 4)",argc); SWIG_fail;
}
{
arg1 = svn_swig_rb_strings_to_apr_array(argv[0], _global_pool);
@@ -8453,23 +8706,17 @@ _wrap_svn_client_mkdir4(int argc, VALUE *argv, VALUE self) {
}
}
{
- int res = SWIG_ConvertFunctionPtr(argv[3], (void**)(&arg4), SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_commit_callback2_t","svn_client_mkdir4", 4, argv[3] ));
- }
- }
- res5 = SWIG_ConvertPtr(argv[4],SWIG_as_voidptrptr(&arg5), 0, 0);
- if (!SWIG_IsOK(res5)) {
- SWIG_exception_fail(SWIG_ArgError(res5), Ruby_Format_TypeError( "", "void *","svn_client_mkdir4", 5, argv[4] ));
+ arg4 = svn_swig_rb_commit_callback2;
+ arg5 = (void *)svn_swig_rb_make_baton(argv[3], _global_svn_swig_rb_pool);
}
- if (argc > 5) {
- res6 = SWIG_ConvertPtr(argv[5], &argp6,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (argc > 4) {
+ res6 = SWIG_ConvertPtr(argv[4], &argp6,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res6)) {
- SWIG_exception_fail(SWIG_ArgError(res6), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_mkdir4", 6, argv[5] ));
+ SWIG_exception_fail(SWIG_ArgError(res6), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_mkdir4", 6, argv[4] ));
}
arg6 = (svn_client_ctx_t *)(argp6);
}
- if (argc > 6) {
+ if (argc > 5) {
}
{
@@ -8487,6 +8734,9 @@ _wrap_svn_client_mkdir4(int argc, VALUE *argv, VALUE self) {
vresult = Qnil;
}
{
+ svn_swig_rb_set_baton(vresult, (VALUE)arg5);
+ }
+ {
VALUE target;
target = _global_vresult_address == &vresult ? self : vresult;
if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
@@ -8775,7 +9025,6 @@ _wrap_svn_client_delete4(int argc, VALUE *argv, VALUE self) {
apr_pool_t *arg8 = (apr_pool_t *) 0 ;
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
- int res6 ;
void *argp7 = 0 ;
int res7 = 0 ;
svn_error_t *result = 0 ;
@@ -8792,8 +9041,8 @@ _wrap_svn_client_delete4(int argc, VALUE *argv, VALUE self) {
_global_pool = arg8;
svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
}
- if ((argc < 6) || (argc > 8)) {
- rb_raise(rb_eArgError, "wrong # of arguments(%d for 6)",argc); SWIG_fail;
+ if ((argc < 5) || (argc > 7)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 5)",argc); SWIG_fail;
}
{
arg1 = svn_swig_rb_strings_to_apr_array(argv[0], _global_pool);
@@ -8818,23 +9067,17 @@ _wrap_svn_client_delete4(int argc, VALUE *argv, VALUE self) {
}
}
{
- int res = SWIG_ConvertFunctionPtr(argv[4], (void**)(&arg5), SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_commit_callback2_t","svn_client_delete4", 5, argv[4] ));
- }
- }
- res6 = SWIG_ConvertPtr(argv[5],SWIG_as_voidptrptr(&arg6), 0, 0);
- if (!SWIG_IsOK(res6)) {
- SWIG_exception_fail(SWIG_ArgError(res6), Ruby_Format_TypeError( "", "void *","svn_client_delete4", 6, argv[5] ));
+ arg5 = svn_swig_rb_commit_callback2;
+ arg6 = (void *)svn_swig_rb_make_baton(argv[4], _global_svn_swig_rb_pool);
}
- if (argc > 6) {
- res7 = SWIG_ConvertPtr(argv[6], &argp7,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (argc > 5) {
+ res7 = SWIG_ConvertPtr(argv[5], &argp7,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res7)) {
- SWIG_exception_fail(SWIG_ArgError(res7), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_delete4", 7, argv[6] ));
+ SWIG_exception_fail(SWIG_ArgError(res7), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_delete4", 7, argv[5] ));
}
arg7 = (svn_client_ctx_t *)(argp7);
}
- if (argc > 7) {
+ if (argc > 6) {
}
{
@@ -8852,6 +9095,9 @@ _wrap_svn_client_delete4(int argc, VALUE *argv, VALUE self) {
vresult = Qnil;
}
{
+ svn_swig_rb_set_baton(vresult, (VALUE)arg6);
+ }
+ {
VALUE target;
target = _global_vresult_address == &vresult ? self : vresult;
if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
@@ -9135,6 +9381,139 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_client_import5(int argc, VALUE *argv, VALUE self) {
+ char *arg1 = (char *) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_depth_t arg3 ;
+ svn_boolean_t arg4 ;
+ svn_boolean_t arg5 ;
+ svn_boolean_t arg6 ;
+ apr_hash_t *arg7 = (apr_hash_t *) 0 ;
+ svn_client_import_filter_func_t arg8 = (svn_client_import_filter_func_t) 0 ;
+ void *arg9 = (void *) 0 ;
+ svn_commit_callback2_t arg10 = (svn_commit_callback2_t) 0 ;
+ void *arg11 = (void *) 0 ;
+ svn_client_ctx_t *arg12 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg13 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res9 ;
+ void *argp12 = 0 ;
+ int res12 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg13);
+ _global_pool = arg13;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 11) || (argc > 12)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 11)",argc); SWIG_fail;
+ }
+ res1 = SWIG_AsCharPtrAndSize(argv[0], &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "char const *","svn_client_import5", 1, argv[0] ));
+ }
+ arg1 = (char *)(buf1);
+ res2 = SWIG_AsCharPtrAndSize(argv[1], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","svn_client_import5", 2, argv[1] ));
+ }
+ arg2 = (char *)(buf2);
+ {
+ arg3 = svn_swig_rb_to_depth(argv[2]);
+ }
+ arg4 = RTEST(argv[3]);
+ arg5 = RTEST(argv[4]);
+ arg6 = RTEST(argv[5]);
+ {
+ VALUE rb_pool = Qnil;
+ if (!_global_pool) {
+ svn_swig_rb_get_pool(argc, argv, self, &rb_pool, &_global_pool);
+ svn_swig_rb_push_pool(rb_pool);
+ }
+ arg7 = svn_swig_rb_hash_to_apr_hash_svn_string(argv[6], _global_pool);
+ _global_pool = NULL;
+ if (!NIL_P(rb_pool)) {
+ if (NIL_P(arg7)) {
+ svn_swig_rb_destroy_pool(rb_pool);
+ } else {
+ svn_swig_rb_set_pool_for_no_swig_type(argv[6], rb_pool);
+ }
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(argv[7], (void**)(&arg8), SWIGTYPE_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_client_import_filter_func_t","svn_client_import5", 8, argv[7] ));
+ }
+ }
+ res9 = SWIG_ConvertPtr(argv[8],SWIG_as_voidptrptr(&arg9), 0, 0);
+ if (!SWIG_IsOK(res9)) {
+ SWIG_exception_fail(SWIG_ArgError(res9), Ruby_Format_TypeError( "", "void *","svn_client_import5", 9, argv[8] ));
+ }
+ {
+ arg10 = svn_swig_rb_commit_callback2;
+ arg11 = (void *)svn_swig_rb_make_baton(argv[9], _global_svn_swig_rb_pool);
+ }
+ res12 = SWIG_ConvertPtr(argv[10], &argp12,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res12)) {
+ SWIG_exception_fail(SWIG_ArgError(res12), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_import5", 12, argv[10] ));
+ }
+ arg12 = (svn_client_ctx_t *)(argp12);
+ if (argc > 11) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_import5((char const *)arg1,(char const *)arg2,arg3,arg4,arg5,arg6,(apr_hash_t const *)arg7,arg8,arg9,arg10,arg11,arg12,arg13);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ svn_swig_rb_set_baton(vresult, (VALUE)arg11);
+ }
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_client_import4(int argc, VALUE *argv, VALUE self) {
char *arg1 = (char *) 0 ;
char *arg2 = (char *) 0 ;
@@ -9154,7 +9533,6 @@ _wrap_svn_client_import4(int argc, VALUE *argv, VALUE self) {
int res2 ;
char *buf2 = 0 ;
int alloc2 = 0 ;
- int res8 ;
void *argp9 = 0 ;
int res9 = 0 ;
svn_error_t *result = 0 ;
@@ -9171,8 +9549,8 @@ _wrap_svn_client_import4(int argc, VALUE *argv, VALUE self) {
_global_pool = arg10;
svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
}
- if ((argc < 8) || (argc > 10)) {
- rb_raise(rb_eArgError, "wrong # of arguments(%d for 8)",argc); SWIG_fail;
+ if ((argc < 7) || (argc > 9)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 7)",argc); SWIG_fail;
}
res1 = SWIG_AsCharPtrAndSize(argv[0], &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
@@ -9207,23 +9585,17 @@ _wrap_svn_client_import4(int argc, VALUE *argv, VALUE self) {
}
}
{
- int res = SWIG_ConvertFunctionPtr(argv[6], (void**)(&arg7), SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_commit_callback2_t","svn_client_import4", 7, argv[6] ));
- }
- }
- res8 = SWIG_ConvertPtr(argv[7],SWIG_as_voidptrptr(&arg8), 0, 0);
- if (!SWIG_IsOK(res8)) {
- SWIG_exception_fail(SWIG_ArgError(res8), Ruby_Format_TypeError( "", "void *","svn_client_import4", 8, argv[7] ));
+ arg7 = svn_swig_rb_commit_callback2;
+ arg8 = (void *)svn_swig_rb_make_baton(argv[6], _global_svn_swig_rb_pool);
}
- if (argc > 8) {
- res9 = SWIG_ConvertPtr(argv[8], &argp9,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (argc > 7) {
+ res9 = SWIG_ConvertPtr(argv[7], &argp9,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res9)) {
- SWIG_exception_fail(SWIG_ArgError(res9), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_import4", 9, argv[8] ));
+ SWIG_exception_fail(SWIG_ArgError(res9), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_import4", 9, argv[7] ));
}
arg9 = (svn_client_ctx_t *)(argp9);
}
- if (argc > 9) {
+ if (argc > 8) {
}
{
@@ -9240,6 +9612,9 @@ _wrap_svn_client_import4(int argc, VALUE *argv, VALUE self) {
}
vresult = Qnil;
}
+ {
+ svn_swig_rb_set_baton(vresult, (VALUE)arg8);
+ }
if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
{
@@ -9588,6 +9963,125 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_client_commit6(int argc, VALUE *argv, VALUE self) {
+ apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
+ svn_depth_t arg2 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ svn_boolean_t arg5 ;
+ svn_boolean_t arg6 ;
+ svn_boolean_t arg7 ;
+ apr_array_header_t *arg8 = (apr_array_header_t *) 0 ;
+ apr_hash_t *arg9 = (apr_hash_t *) 0 ;
+ svn_commit_callback2_t arg10 = (svn_commit_callback2_t) 0 ;
+ void *arg11 = (void *) 0 ;
+ svn_client_ctx_t *arg12 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg13 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *argp12 = 0 ;
+ int res12 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ int adjusted_argc = argc;
+ VALUE *adjusted_argv = argv;
+
+ svn_swig_rb_adjust_arg_for_client_ctx_and_pool(&adjusted_argc,
+ &adjusted_argv);
+ svn_swig_rb_get_pool(adjusted_argc, adjusted_argv, self,
+ &_global_svn_swig_rb_pool, &arg13);
+ _global_pool = arg13;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 10) || (argc > 12)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 10)",argc); SWIG_fail;
+ }
+ {
+ arg1 = svn_swig_rb_strings_to_apr_array(argv[0], _global_pool);
+ }
+ {
+ arg2 = svn_swig_rb_to_depth(argv[1]);
+ }
+ arg3 = RTEST(argv[2]);
+ arg4 = RTEST(argv[3]);
+ arg5 = RTEST(argv[4]);
+ arg6 = RTEST(argv[5]);
+ arg7 = RTEST(argv[6]);
+ {
+ arg8 = (NIL_P(argv[7])) ? NULL :
+ svn_swig_rb_strings_to_apr_array(argv[7], _global_pool);
+ }
+ {
+ VALUE rb_pool = Qnil;
+ if (!_global_pool) {
+ svn_swig_rb_get_pool(argc, argv, self, &rb_pool, &_global_pool);
+ svn_swig_rb_push_pool(rb_pool);
+ }
+ arg9 = svn_swig_rb_hash_to_apr_hash_svn_string(argv[8], _global_pool);
+ _global_pool = NULL;
+ if (!NIL_P(rb_pool)) {
+ if (NIL_P(arg9)) {
+ svn_swig_rb_destroy_pool(rb_pool);
+ } else {
+ svn_swig_rb_set_pool_for_no_swig_type(argv[8], rb_pool);
+ }
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ }
+ {
+ arg10 = svn_swig_rb_commit_callback2;
+ arg11 = (void *)svn_swig_rb_make_baton(argv[9], _global_svn_swig_rb_pool);
+ }
+ if (argc > 10) {
+ res12 = SWIG_ConvertPtr(argv[10], &argp12,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res12)) {
+ SWIG_exception_fail(SWIG_ArgError(res12), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_commit6", 12, argv[10] ));
+ }
+ arg12 = (svn_client_ctx_t *)(argp12);
+ }
+ if (argc > 11) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_commit6((apr_array_header_t const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7,(apr_array_header_t const *)arg8,(apr_hash_t const *)arg9,arg10,arg11,arg12,arg13);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ svn_swig_rb_set_baton(vresult, (VALUE)arg11);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_client_commit5(int argc, VALUE *argv, VALUE self) {
apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
svn_depth_t arg2 ;
@@ -9602,7 +10096,6 @@ _wrap_svn_client_commit5(int argc, VALUE *argv, VALUE self) {
apr_pool_t *arg11 = (apr_pool_t *) 0 ;
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
- int res9 ;
void *argp10 = 0 ;
int res10 = 0 ;
svn_error_t *result = 0 ;
@@ -9619,8 +10112,8 @@ _wrap_svn_client_commit5(int argc, VALUE *argv, VALUE self) {
_global_pool = arg11;
svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
}
- if ((argc < 9) || (argc > 11)) {
- rb_raise(rb_eArgError, "wrong # of arguments(%d for 9)",argc); SWIG_fail;
+ if ((argc < 8) || (argc > 10)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 8)",argc); SWIG_fail;
}
{
arg1 = svn_swig_rb_strings_to_apr_array(argv[0], _global_pool);
@@ -9653,23 +10146,17 @@ _wrap_svn_client_commit5(int argc, VALUE *argv, VALUE self) {
}
}
{
- int res = SWIG_ConvertFunctionPtr(argv[7], (void**)(&arg8), SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_commit_callback2_t","svn_client_commit5", 8, argv[7] ));
- }
- }
- res9 = SWIG_ConvertPtr(argv[8],SWIG_as_voidptrptr(&arg9), 0, 0);
- if (!SWIG_IsOK(res9)) {
- SWIG_exception_fail(SWIG_ArgError(res9), Ruby_Format_TypeError( "", "void *","svn_client_commit5", 9, argv[8] ));
+ arg8 = svn_swig_rb_commit_callback2;
+ arg9 = (void *)svn_swig_rb_make_baton(argv[7], _global_svn_swig_rb_pool);
}
- if (argc > 9) {
- res10 = SWIG_ConvertPtr(argv[9], &argp10,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (argc > 8) {
+ res10 = SWIG_ConvertPtr(argv[8], &argp10,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res10)) {
- SWIG_exception_fail(SWIG_ArgError(res10), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_commit5", 10, argv[9] ));
+ SWIG_exception_fail(SWIG_ArgError(res10), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_commit5", 10, argv[8] ));
}
arg10 = (svn_client_ctx_t *)(argp10);
}
- if (argc > 10) {
+ if (argc > 9) {
}
{
@@ -9687,6 +10174,9 @@ _wrap_svn_client_commit5(int argc, VALUE *argv, VALUE self) {
vresult = Qnil;
}
{
+ svn_swig_rb_set_baton(vresult, (VALUE)arg9);
+ }
+ {
VALUE target;
target = _global_vresult_address == &vresult ? self : vresult;
if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
@@ -10063,11 +10553,11 @@ fail:
}
-swig_class SwigClassSvn_client_status_t;
+static swig_class SwigClassSvn_client_status_t;
SWIGINTERN VALUE
_wrap_svn_client_status_t_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10079,9 +10569,9 @@ _wrap_svn_client_status_t_kind_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","kind", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_node_kind_t","kind", 2, argv[0] ));
@@ -10096,7 +10586,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_node_kind_t result;
@@ -10107,9 +10597,9 @@ _wrap_svn_client_status_t_kind_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","kind", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -10120,7 +10610,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_local_abspath_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10133,9 +10623,9 @@ _wrap_svn_client_status_t_local_abspath_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","local_abspath", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","local_abspath", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","local_abspath", 2, argv[0] ));
@@ -10159,7 +10649,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_local_abspath_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -10170,9 +10660,9 @@ _wrap_svn_client_status_t_local_abspath_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","local_abspath", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","local_abspath", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (char *) ((arg1)->local_abspath);
{
if (result) {
@@ -10189,7 +10679,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_filesize_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_filesize_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10199,9 +10689,9 @@ _wrap_svn_client_status_t_filesize_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","filesize", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","filesize", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
{
arg2 = (svn_filesize_t)NUM2LL(argv[0]);
}
@@ -10214,7 +10704,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_filesize_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_filesize_t result;
@@ -10225,9 +10715,9 @@ _wrap_svn_client_status_t_filesize_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","filesize", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","filesize", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = ((arg1)->filesize);
{
vresult = LL2NUM((svn_filesize_t)(result));
@@ -10240,7 +10730,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_versioned_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10250,9 +10740,9 @@ _wrap_svn_client_status_t_versioned_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","versioned", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","versioned", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->versioned = arg2;
return Qnil;
@@ -10263,7 +10753,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_versioned_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -10274,9 +10764,9 @@ _wrap_svn_client_status_t_versioned_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","versioned", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","versioned", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_boolean_t) ((arg1)->versioned);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -10287,7 +10777,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_conflicted_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10297,9 +10787,9 @@ _wrap_svn_client_status_t_conflicted_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","conflicted", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","conflicted", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->conflicted = arg2;
return Qnil;
@@ -10310,7 +10800,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_conflicted_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -10321,9 +10811,9 @@ _wrap_svn_client_status_t_conflicted_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","conflicted", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","conflicted", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_boolean_t) ((arg1)->conflicted);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -10334,7 +10824,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_node_status_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10346,9 +10836,9 @@ _wrap_svn_client_status_t_node_status_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","node_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","node_status", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "enum svn_wc_status_kind","node_status", 2, argv[0] ));
@@ -10363,7 +10853,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_node_status_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
enum svn_wc_status_kind result;
@@ -10374,9 +10864,9 @@ _wrap_svn_client_status_t_node_status_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","node_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","node_status", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->node_status);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -10387,7 +10877,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_text_status_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10399,9 +10889,9 @@ _wrap_svn_client_status_t_text_status_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","text_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","text_status", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "enum svn_wc_status_kind","text_status", 2, argv[0] ));
@@ -10416,7 +10906,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_text_status_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
enum svn_wc_status_kind result;
@@ -10427,9 +10917,9 @@ _wrap_svn_client_status_t_text_status_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","text_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","text_status", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->text_status);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -10440,7 +10930,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_prop_status_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10452,9 +10942,9 @@ _wrap_svn_client_status_t_prop_status_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","prop_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","prop_status", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "enum svn_wc_status_kind","prop_status", 2, argv[0] ));
@@ -10469,7 +10959,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_prop_status_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
enum svn_wc_status_kind result;
@@ -10480,9 +10970,9 @@ _wrap_svn_client_status_t_prop_status_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","prop_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","prop_status", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->prop_status);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -10493,7 +10983,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_wc_is_locked_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10503,9 +10993,9 @@ _wrap_svn_client_status_t_wc_is_locked_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","wc_is_locked", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","wc_is_locked", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->wc_is_locked = arg2;
return Qnil;
@@ -10516,7 +11006,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_wc_is_locked_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -10527,9 +11017,9 @@ _wrap_svn_client_status_t_wc_is_locked_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","wc_is_locked", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","wc_is_locked", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_boolean_t) ((arg1)->wc_is_locked);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -10540,7 +11030,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_copied_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10550,9 +11040,9 @@ _wrap_svn_client_status_t_copied_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","copied", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","copied", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->copied = arg2;
return Qnil;
@@ -10563,7 +11053,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_copied_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -10574,9 +11064,9 @@ _wrap_svn_client_status_t_copied_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","copied", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","copied", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_boolean_t) ((arg1)->copied);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -10587,7 +11077,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_repos_root_url_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10600,9 +11090,9 @@ _wrap_svn_client_status_t_repos_root_url_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","repos_root_url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","repos_root_url", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","repos_root_url", 2, argv[0] ));
@@ -10626,7 +11116,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_repos_root_url_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -10637,9 +11127,9 @@ _wrap_svn_client_status_t_repos_root_url_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","repos_root_url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","repos_root_url", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (char *) ((arg1)->repos_root_url);
{
if (result) {
@@ -10656,7 +11146,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_repos_uuid_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10669,9 +11159,9 @@ _wrap_svn_client_status_t_repos_uuid_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","repos_uuid", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","repos_uuid", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","repos_uuid", 2, argv[0] ));
@@ -10695,7 +11185,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_repos_uuid_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -10706,9 +11196,9 @@ _wrap_svn_client_status_t_repos_uuid_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","repos_uuid", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","repos_uuid", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (char *) ((arg1)->repos_uuid);
{
if (result) {
@@ -10725,7 +11215,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_repos_relpath_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10738,9 +11228,9 @@ _wrap_svn_client_status_t_repos_relpath_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","repos_relpath", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","repos_relpath", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","repos_relpath", 2, argv[0] ));
@@ -10764,7 +11254,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_repos_relpath_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -10775,9 +11265,9 @@ _wrap_svn_client_status_t_repos_relpath_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","repos_relpath", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","repos_relpath", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (char *) ((arg1)->repos_relpath);
{
if (result) {
@@ -10794,7 +11284,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_revision_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10806,9 +11296,9 @@ _wrap_svn_client_status_t_revision_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","revision", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","revision", 2, argv[0] ));
@@ -10823,7 +11313,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_revision_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -10834,9 +11324,9 @@ _wrap_svn_client_status_t_revision_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","revision", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_revnum_t) ((arg1)->revision);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -10847,7 +11337,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_changed_rev_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10859,9 +11349,9 @@ _wrap_svn_client_status_t_changed_rev_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","changed_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","changed_rev", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","changed_rev", 2, argv[0] ));
@@ -10876,7 +11366,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_changed_rev_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -10887,9 +11377,9 @@ _wrap_svn_client_status_t_changed_rev_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","changed_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","changed_rev", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_revnum_t) ((arg1)->changed_rev);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -10900,7 +11390,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_changed_date_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10910,9 +11400,9 @@ _wrap_svn_client_status_t_changed_date_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","changed_date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","changed_date", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
{
arg2 = (apr_time_t)NUM2LL(argv[0]);
}
@@ -10925,7 +11415,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_changed_date_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_time_t result;
@@ -10936,9 +11426,9 @@ _wrap_svn_client_status_t_changed_date_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","changed_date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","changed_date", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = ((arg1)->changed_date);
{
vresult = LL2NUM((apr_time_t)(result));
@@ -10951,7 +11441,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_changed_author_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10964,9 +11454,9 @@ _wrap_svn_client_status_t_changed_author_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","changed_author", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","changed_author", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","changed_author", 2, argv[0] ));
@@ -10990,7 +11480,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_changed_author_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -11001,9 +11491,9 @@ _wrap_svn_client_status_t_changed_author_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","changed_author", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","changed_author", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (char *) ((arg1)->changed_author);
{
if (result) {
@@ -11020,7 +11510,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_switched_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11030,9 +11520,9 @@ _wrap_svn_client_status_t_switched_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","switched", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","switched", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->switched = arg2;
return Qnil;
@@ -11043,7 +11533,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_switched_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -11054,9 +11544,9 @@ _wrap_svn_client_status_t_switched_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","switched", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","switched", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_boolean_t) ((arg1)->switched);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -11067,7 +11557,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_file_external_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11077,9 +11567,9 @@ _wrap_svn_client_status_t_file_external_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","file_external", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","file_external", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->file_external = arg2;
return Qnil;
@@ -11090,7 +11580,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_file_external_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -11101,9 +11591,9 @@ _wrap_svn_client_status_t_file_external_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","file_external", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","file_external", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_boolean_t) ((arg1)->file_external);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -11114,7 +11604,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_lock_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_lock_t *arg2 = (svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11126,9 +11616,9 @@ _wrap_svn_client_status_t_lock_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","lock", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","lock", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_lock_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_lock_t const *","lock", 2, argv[0] ));
@@ -11143,7 +11633,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_lock_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_lock_t *result = 0 ;
@@ -11154,9 +11644,9 @@ _wrap_svn_client_status_t_lock_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","lock", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","lock", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_lock_t *) ((arg1)->lock);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_lock_t, 0 | 0 );
return vresult;
@@ -11167,7 +11657,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_changelist_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11177,9 +11667,9 @@ _wrap_svn_client_status_t_changelist_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","changelist", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","changelist", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
{
arg2 = StringValueCStr(argv[0]);
}
@@ -11199,7 +11689,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_changelist_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -11210,9 +11700,9 @@ _wrap_svn_client_status_t_changelist_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","changelist", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","changelist", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (char *) ((arg1)->changelist);
{
if (result) {
@@ -11229,7 +11719,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_depth_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_depth_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11239,9 +11729,9 @@ _wrap_svn_client_status_t_depth_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","depth", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","depth", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
{
arg2 = svn_swig_rb_to_depth(argv[0]);
}
@@ -11254,7 +11744,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_depth_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_depth_t result;
@@ -11265,9 +11755,9 @@ _wrap_svn_client_status_t_depth_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","depth", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","depth", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_depth_t) ((arg1)->depth);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -11278,7 +11768,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_ood_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11290,9 +11780,9 @@ _wrap_svn_client_status_t_ood_kind_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","ood_kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","ood_kind", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_node_kind_t","ood_kind", 2, argv[0] ));
@@ -11307,7 +11797,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_ood_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_node_kind_t result;
@@ -11318,9 +11808,9 @@ _wrap_svn_client_status_t_ood_kind_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","ood_kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","ood_kind", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->ood_kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -11331,7 +11821,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_repos_node_status_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11343,9 +11833,9 @@ _wrap_svn_client_status_t_repos_node_status_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","repos_node_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","repos_node_status", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "enum svn_wc_status_kind","repos_node_status", 2, argv[0] ));
@@ -11360,7 +11850,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_repos_node_status_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
enum svn_wc_status_kind result;
@@ -11371,9 +11861,9 @@ _wrap_svn_client_status_t_repos_node_status_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","repos_node_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","repos_node_status", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->repos_node_status);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -11384,7 +11874,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_repos_text_status_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11396,9 +11886,9 @@ _wrap_svn_client_status_t_repos_text_status_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","repos_text_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","repos_text_status", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "enum svn_wc_status_kind","repos_text_status", 2, argv[0] ));
@@ -11413,7 +11903,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_repos_text_status_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
enum svn_wc_status_kind result;
@@ -11424,9 +11914,9 @@ _wrap_svn_client_status_t_repos_text_status_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","repos_text_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","repos_text_status", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->repos_text_status);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -11437,7 +11927,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_repos_prop_status_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11449,9 +11939,9 @@ _wrap_svn_client_status_t_repos_prop_status_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","repos_prop_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","repos_prop_status", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "enum svn_wc_status_kind","repos_prop_status", 2, argv[0] ));
@@ -11466,7 +11956,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_repos_prop_status_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
enum svn_wc_status_kind result;
@@ -11477,9 +11967,9 @@ _wrap_svn_client_status_t_repos_prop_status_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","repos_prop_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","repos_prop_status", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->repos_prop_status);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -11490,7 +11980,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_repos_lock_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_lock_t *arg2 = (svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11502,9 +11992,9 @@ _wrap_svn_client_status_t_repos_lock_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","repos_lock", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","repos_lock", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_lock_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_lock_t const *","repos_lock", 2, argv[0] ));
@@ -11519,7 +12009,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_repos_lock_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_lock_t *result = 0 ;
@@ -11530,9 +12020,9 @@ _wrap_svn_client_status_t_repos_lock_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","repos_lock", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","repos_lock", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_lock_t *) ((arg1)->repos_lock);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_lock_t, 0 | 0 );
return vresult;
@@ -11543,7 +12033,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_ood_changed_rev_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11555,9 +12045,9 @@ _wrap_svn_client_status_t_ood_changed_rev_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","ood_changed_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","ood_changed_rev", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","ood_changed_rev", 2, argv[0] ));
@@ -11572,7 +12062,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_ood_changed_rev_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -11583,9 +12073,9 @@ _wrap_svn_client_status_t_ood_changed_rev_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","ood_changed_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","ood_changed_rev", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (svn_revnum_t) ((arg1)->ood_changed_rev);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -11596,7 +12086,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_ood_changed_date_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11606,9 +12096,9 @@ _wrap_svn_client_status_t_ood_changed_date_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","ood_changed_date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","ood_changed_date", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
{
arg2 = (apr_time_t)NUM2LL(argv[0]);
}
@@ -11621,7 +12111,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_ood_changed_date_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_time_t result;
@@ -11632,9 +12122,9 @@ _wrap_svn_client_status_t_ood_changed_date_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","ood_changed_date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","ood_changed_date", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = ((arg1)->ood_changed_date);
{
vresult = LL2NUM((apr_time_t)(result));
@@ -11647,7 +12137,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_ood_changed_author_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11660,9 +12150,9 @@ _wrap_svn_client_status_t_ood_changed_author_set(int argc, VALUE *argv, VALUE se
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","ood_changed_author", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","ood_changed_author", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","ood_changed_author", 2, argv[0] ));
@@ -11686,7 +12176,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_ood_changed_author_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -11697,9 +12187,9 @@ _wrap_svn_client_status_t_ood_changed_author_get(int argc, VALUE *argv, VALUE se
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","ood_changed_author", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","ood_changed_author", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (char *) ((arg1)->ood_changed_author);
{
if (result) {
@@ -11716,7 +12206,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_backwards_compatibility_baton_set(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *arg2 = (void *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11727,9 +12217,9 @@ _wrap_svn_client_status_t_backwards_compatibility_baton_set(int argc, VALUE *arg
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","backwards_compatibility_baton", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","backwards_compatibility_baton", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0],SWIG_as_voidptrptr(&arg2), 0, SWIG_POINTER_DISOWN);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "void const *","backwards_compatibility_baton", 2, argv[0] ));
@@ -11743,7 +12233,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_status_t_backwards_compatibility_baton_get(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *arg1 = (svn_client_status_t *) 0 ;
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
void *result = 0 ;
@@ -11754,9 +12244,9 @@ _wrap_svn_client_status_t_backwards_compatibility_baton_get(int argc, VALUE *arg
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_status_t *","backwards_compatibility_baton", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","backwards_compatibility_baton", 1, self ));
}
- arg1 = (svn_client_status_t *)(argp1);
+ arg1 = (struct svn_client_status_t *)(argp1);
result = (void *) ((arg1)->backwards_compatibility_baton);
{
char *value = result;
@@ -11772,6 +12262,144 @@ fail:
}
+SWIGINTERN VALUE
+_wrap_svn_client_status_t_moved_from_abspath_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","moved_from_abspath", 1, self ));
+ }
+ arg1 = (struct svn_client_status_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","moved_from_abspath", 2, argv[0] ));
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->moved_from_abspath) free((char *)arg1->moved_from_abspath);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->moved_from_abspath = copied;
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_client_status_t_moved_from_abspath_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ char *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","moved_from_abspath", 1, self ));
+ }
+ arg1 = (struct svn_client_status_t *)(argp1);
+ result = (char *) ((arg1)->moved_from_abspath);
+ {
+ if (result) {
+ vresult = rb_str_new2(result);
+ } else {
+ vresult = Qnil;
+ }
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_client_status_t_moved_to_abspath_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","moved_to_abspath", 1, self ));
+ }
+ arg1 = (struct svn_client_status_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","moved_to_abspath", 2, argv[0] ));
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->moved_to_abspath) free((char *)arg1->moved_to_abspath);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->moved_to_abspath = copied;
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_client_status_t_moved_to_abspath_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_client_status_t *arg1 = (struct svn_client_status_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ char *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_status_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_status_t *","moved_to_abspath", 1, self ));
+ }
+ arg1 = (struct svn_client_status_t *)(argp1);
+ result = (char *) ((arg1)->moved_to_abspath);
+ {
+ if (result) {
+ vresult = rb_str_new2(result);
+ } else {
+ vresult = Qnil;
+ }
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
#ifdef HAVE_RB_DEFINE_ALLOC_FUNC
SWIGINTERN VALUE
_wrap_svn_client_status_t_allocate(VALUE self) {
@@ -11791,13 +12419,13 @@ _wrap_svn_client_status_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_client_status_t(int argc, VALUE *argv, VALUE self) {
- svn_client_status_t *result = 0 ;
+ struct svn_client_status_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_client_status_t *)calloc(1, sizeof(svn_client_status_t));
+ result = (struct svn_client_status_t *)calloc(1, sizeof(struct svn_client_status_t));
DATA_PTR(self) = result;
@@ -11810,7 +12438,7 @@ fail:
SWIGINTERN void
-free_svn_client_status_t(svn_client_status_t *arg1) {
+free_svn_client_status_t(struct svn_client_status_t *arg1) {
free((char *) arg1);
}
@@ -13611,6 +14239,173 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_client_diff6(int argc, VALUE *argv, VALUE self) {
+ apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_opt_revision_t *arg3 = (svn_opt_revision_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ svn_opt_revision_t *arg5 = (svn_opt_revision_t *) 0 ;
+ char *arg6 = (char *) 0 ;
+ svn_depth_t arg7 ;
+ svn_boolean_t arg8 ;
+ svn_boolean_t arg9 ;
+ svn_boolean_t arg10 ;
+ svn_boolean_t arg11 ;
+ svn_boolean_t arg12 ;
+ svn_boolean_t arg13 ;
+ svn_boolean_t arg14 ;
+ svn_boolean_t arg15 ;
+ char *arg16 = (char *) 0 ;
+ svn_stream_t *arg17 = (svn_stream_t *) 0 ;
+ svn_stream_t *arg18 = (svn_stream_t *) 0 ;
+ apr_array_header_t *arg19 = (apr_array_header_t *) 0 ;
+ svn_client_ctx_t *arg20 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg21 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ svn_opt_revision_t rev3 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ svn_opt_revision_t rev5 ;
+ void *argp20 = 0 ;
+ int res20 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ int adjusted_argc = argc;
+ VALUE *adjusted_argv = argv;
+
+ svn_swig_rb_adjust_arg_for_client_ctx_and_pool(&adjusted_argc,
+ &adjusted_argv);
+ svn_swig_rb_get_pool(adjusted_argc, adjusted_argv, self,
+ &_global_svn_swig_rb_pool, &arg21);
+ _global_pool = arg21;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 19) || (argc > 21)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 19)",argc); SWIG_fail;
+ }
+ {
+ arg1 = svn_swig_rb_strings_to_apr_array(argv[0], _global_pool);
+ }
+ res2 = SWIG_AsCharPtrAndSize(argv[1], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","svn_client_diff6", 2, argv[1] ));
+ }
+ arg2 = (char *)(buf2);
+ {
+ arg3 = &rev3;
+ svn_swig_rb_set_revision(&rev3, argv[2]);
+ }
+ res4 = SWIG_AsCharPtrAndSize(argv[3], &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "char const *","svn_client_diff6", 4, argv[3] ));
+ }
+ arg4 = (char *)(buf4);
+ {
+ arg5 = &rev5;
+ svn_swig_rb_set_revision(&rev5, argv[4]);
+ }
+ {
+ if (NIL_P(argv[5])) {
+ arg6 = NULL;
+ } else {
+ arg6 = StringValuePtr(argv[5]);
+ }
+ }
+ {
+ arg7 = svn_swig_rb_to_depth(argv[6]);
+ }
+ arg8 = RTEST(argv[7]);
+ arg9 = RTEST(argv[8]);
+ arg10 = RTEST(argv[9]);
+ arg11 = RTEST(argv[10]);
+ arg12 = RTEST(argv[11]);
+ arg13 = RTEST(argv[12]);
+ arg14 = RTEST(argv[13]);
+ arg15 = RTEST(argv[14]);
+ {
+ arg16 = NULL;
+
+ if (NIL_P(argv[15])) {
+
+ } else if (TYPE(argv[15]) == T_FIXNUM) {
+ arg16 = (char *)NUM2INT(argv[15]);
+ if (!(arg16 == APR_LOCALE_CHARSET || arg16 == APR_DEFAULT_CHARSET)) {
+ arg16 = NULL;
+ }
+ } else {
+ arg16 = StringValuePtr(argv[15]);
+ }
+
+ if (!arg16) {
+ arg16 = (char *)APR_LOCALE_CHARSET;
+ }
+ }
+ {
+ arg17 = svn_swig_rb_make_stream(argv[16]);
+ }
+ {
+ arg18 = svn_swig_rb_make_stream(argv[17]);
+ }
+ {
+ arg19 = (NIL_P(argv[18])) ? NULL :
+ svn_swig_rb_strings_to_apr_array(argv[18], _global_pool);
+ }
+ if (argc > 19) {
+ res20 = SWIG_ConvertPtr(argv[19], &argp20,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res20)) {
+ SWIG_exception_fail(SWIG_ArgError(res20), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_diff6", 20, argv[19] ));
+ }
+ arg20 = (svn_client_ctx_t *)(argp20);
+ }
+ if (argc > 20) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_diff6((apr_array_header_t const *)arg1,(char const *)arg2,(struct svn_opt_revision_t const *)arg3,(char const *)arg4,(struct svn_opt_revision_t const *)arg5,(char const *)arg6,arg7,arg8,arg9,arg10,arg11,arg12,arg13,arg14,arg15,(char const *)arg16,arg17,arg18,(apr_array_header_t const *)arg19,arg20,arg21);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_client_diff5(int argc, VALUE *argv, VALUE self) {
apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
char *arg2 = (char *) 0 ;
@@ -14315,6 +15110,173 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_client_diff_peg6(int argc, VALUE *argv, VALUE self) {
+ apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_opt_revision_t *arg3 = (svn_opt_revision_t *) 0 ;
+ svn_opt_revision_t *arg4 = (svn_opt_revision_t *) 0 ;
+ svn_opt_revision_t *arg5 = (svn_opt_revision_t *) 0 ;
+ char *arg6 = (char *) 0 ;
+ svn_depth_t arg7 ;
+ svn_boolean_t arg8 ;
+ svn_boolean_t arg9 ;
+ svn_boolean_t arg10 ;
+ svn_boolean_t arg11 ;
+ svn_boolean_t arg12 ;
+ svn_boolean_t arg13 ;
+ svn_boolean_t arg14 ;
+ svn_boolean_t arg15 ;
+ char *arg16 = (char *) 0 ;
+ svn_stream_t *arg17 = (svn_stream_t *) 0 ;
+ svn_stream_t *arg18 = (svn_stream_t *) 0 ;
+ apr_array_header_t *arg19 = (apr_array_header_t *) 0 ;
+ svn_client_ctx_t *arg20 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg21 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ svn_opt_revision_t rev3 ;
+ svn_opt_revision_t rev4 ;
+ svn_opt_revision_t rev5 ;
+ void *argp20 = 0 ;
+ int res20 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ int adjusted_argc = argc;
+ VALUE *adjusted_argv = argv;
+
+ svn_swig_rb_adjust_arg_for_client_ctx_and_pool(&adjusted_argc,
+ &adjusted_argv);
+ svn_swig_rb_get_pool(adjusted_argc, adjusted_argv, self,
+ &_global_svn_swig_rb_pool, &arg21);
+ _global_pool = arg21;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 19) || (argc > 21)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 19)",argc); SWIG_fail;
+ }
+ {
+ arg1 = svn_swig_rb_strings_to_apr_array(argv[0], _global_pool);
+ }
+ res2 = SWIG_AsCharPtrAndSize(argv[1], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","svn_client_diff_peg6", 2, argv[1] ));
+ }
+ arg2 = (char *)(buf2);
+ {
+ arg3 = &rev3;
+ svn_swig_rb_set_revision(&rev3, argv[2]);
+ }
+ {
+ arg4 = &rev4;
+ svn_swig_rb_set_revision(&rev4, argv[3]);
+ }
+ {
+ arg5 = &rev5;
+ svn_swig_rb_set_revision(&rev5, argv[4]);
+ }
+ {
+ if (NIL_P(argv[5])) {
+ arg6 = NULL;
+ } else {
+ arg6 = StringValuePtr(argv[5]);
+ }
+ }
+ {
+ arg7 = svn_swig_rb_to_depth(argv[6]);
+ }
+ arg8 = RTEST(argv[7]);
+ arg9 = RTEST(argv[8]);
+ arg10 = RTEST(argv[9]);
+ arg11 = RTEST(argv[10]);
+ arg12 = RTEST(argv[11]);
+ arg13 = RTEST(argv[12]);
+ arg14 = RTEST(argv[13]);
+ arg15 = RTEST(argv[14]);
+ {
+ arg16 = NULL;
+
+ if (NIL_P(argv[15])) {
+
+ } else if (TYPE(argv[15]) == T_FIXNUM) {
+ arg16 = (char *)NUM2INT(argv[15]);
+ if (!(arg16 == APR_LOCALE_CHARSET || arg16 == APR_DEFAULT_CHARSET)) {
+ arg16 = NULL;
+ }
+ } else {
+ arg16 = StringValuePtr(argv[15]);
+ }
+
+ if (!arg16) {
+ arg16 = (char *)APR_LOCALE_CHARSET;
+ }
+ }
+ {
+ arg17 = svn_swig_rb_make_stream(argv[16]);
+ }
+ {
+ arg18 = svn_swig_rb_make_stream(argv[17]);
+ }
+ {
+ arg19 = (NIL_P(argv[18])) ? NULL :
+ svn_swig_rb_strings_to_apr_array(argv[18], _global_pool);
+ }
+ if (argc > 19) {
+ res20 = SWIG_ConvertPtr(argv[19], &argp20,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res20)) {
+ SWIG_exception_fail(SWIG_ArgError(res20), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_diff_peg6", 20, argv[19] ));
+ }
+ arg20 = (svn_client_ctx_t *)(argp20);
+ }
+ if (argc > 20) {
+
+ }
+ {
+ if (!arg3) {
+ SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
+ }
+ }
+ {
+ result = (svn_error_t *)svn_client_diff_peg6((apr_array_header_t const *)arg1,(char const *)arg2,(struct svn_opt_revision_t const *)arg3,(struct svn_opt_revision_t const *)arg4,(struct svn_opt_revision_t const *)arg5,(char const *)arg6,arg7,arg8,arg9,arg10,arg11,arg12,arg13,arg14,arg15,(char const *)arg16,arg17,arg18,(apr_array_header_t const *)arg19,arg20,arg21);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_client_diff_peg5(int argc, VALUE *argv, VALUE self) {
apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
char *arg2 = (char *) 0 ;
@@ -15485,6 +16447,362 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_client_get_merging_summary(int argc, VALUE *argv, VALUE self) {
+ svn_boolean_t *arg1 = (svn_boolean_t *) 0 ;
+ char **arg2 = (char **) 0 ;
+ svn_revnum_t *arg3 = (svn_revnum_t *) 0 ;
+ char **arg4 = (char **) 0 ;
+ svn_revnum_t *arg5 = (svn_revnum_t *) 0 ;
+ char **arg6 = (char **) 0 ;
+ svn_revnum_t *arg7 = (svn_revnum_t *) 0 ;
+ char **arg8 = (char **) 0 ;
+ svn_revnum_t *arg9 = (svn_revnum_t *) 0 ;
+ char **arg10 = (char **) 0 ;
+ char *arg11 = (char *) 0 ;
+ svn_opt_revision_t *arg12 = (svn_opt_revision_t *) 0 ;
+ char *arg13 = (char *) 0 ;
+ svn_opt_revision_t *arg14 = (svn_opt_revision_t *) 0 ;
+ svn_client_ctx_t *arg15 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg16 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg17 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_boolean_t temp1 ;
+ char *temp2 ;
+ svn_revnum_t temp3 ;
+ int res3 = SWIG_TMPOBJ ;
+ char *temp4 ;
+ svn_revnum_t temp5 ;
+ int res5 = SWIG_TMPOBJ ;
+ char *temp6 ;
+ svn_revnum_t temp7 ;
+ int res7 = SWIG_TMPOBJ ;
+ char *temp8 ;
+ svn_revnum_t temp9 ;
+ int res9 = SWIG_TMPOBJ ;
+ char *temp10 ;
+ int res11 ;
+ char *buf11 = 0 ;
+ int alloc11 = 0 ;
+ svn_opt_revision_t rev12 ;
+ int res13 ;
+ char *buf13 = 0 ;
+ int alloc13 = 0 ;
+ svn_opt_revision_t rev14 ;
+ void *argp15 = 0 ;
+ int res15 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg16);
+ _global_pool = arg16;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg17);
+ _global_pool = arg17;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ arg2 = &temp2;
+ arg3 = &temp3;
+ arg4 = &temp4;
+ arg5 = &temp5;
+ arg6 = &temp6;
+ arg7 = &temp7;
+ arg8 = &temp8;
+ arg9 = &temp9;
+ arg10 = &temp10;
+ if ((argc < 5) || (argc > 7)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 5)",argc); SWIG_fail;
+ }
+ res11 = SWIG_AsCharPtrAndSize(argv[0], &buf11, NULL, &alloc11);
+ if (!SWIG_IsOK(res11)) {
+ SWIG_exception_fail(SWIG_ArgError(res11), Ruby_Format_TypeError( "", "char const *","svn_client_get_merging_summary", 11, argv[0] ));
+ }
+ arg11 = (char *)(buf11);
+ {
+ arg12 = &rev12;
+ svn_swig_rb_set_revision(&rev12, argv[1]);
+ }
+ res13 = SWIG_AsCharPtrAndSize(argv[2], &buf13, NULL, &alloc13);
+ if (!SWIG_IsOK(res13)) {
+ SWIG_exception_fail(SWIG_ArgError(res13), Ruby_Format_TypeError( "", "char const *","svn_client_get_merging_summary", 13, argv[2] ));
+ }
+ arg13 = (char *)(buf13);
+ {
+ arg14 = &rev14;
+ svn_swig_rb_set_revision(&rev14, argv[3]);
+ }
+ res15 = SWIG_ConvertPtr(argv[4], &argp15,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res15)) {
+ SWIG_exception_fail(SWIG_ArgError(res15), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_get_merging_summary", 15, argv[4] ));
+ }
+ arg15 = (svn_client_ctx_t *)(argp15);
+ if (argc > 5) {
+
+ }
+ if (argc > 6) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_get_merging_summary(arg1,(char const **)arg2,arg3,(char const **)arg4,arg5,(char const **)arg6,arg7,(char const **)arg8,arg9,(char const **)arg10,(char const *)arg11,(struct svn_opt_revision_t const *)arg12,(char const *)arg13,(struct svn_opt_revision_t const *)arg14,arg15,arg16,arg17);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, *arg1 ? Qtrue : Qfalse);
+ }
+ {
+ if (*arg2) {
+ vresult = SWIG_Ruby_AppendOutput(vresult, rb_str_new2(*arg2));
+ } else {
+ vresult = SWIG_Ruby_AppendOutput(vresult, Qnil);
+ }
+ }
+ if (SWIG_IsTmpObj(res3)) {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_From_long((*arg3)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_long, new_flags));
+ }
+ {
+ if (*arg4) {
+ vresult = SWIG_Ruby_AppendOutput(vresult, rb_str_new2(*arg4));
+ } else {
+ vresult = SWIG_Ruby_AppendOutput(vresult, Qnil);
+ }
+ }
+ if (SWIG_IsTmpObj(res5)) {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_From_long((*arg5)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res5) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj((void*)(arg5), SWIGTYPE_p_long, new_flags));
+ }
+ {
+ if (*arg6) {
+ vresult = SWIG_Ruby_AppendOutput(vresult, rb_str_new2(*arg6));
+ } else {
+ vresult = SWIG_Ruby_AppendOutput(vresult, Qnil);
+ }
+ }
+ if (SWIG_IsTmpObj(res7)) {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_From_long((*arg7)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res7) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj((void*)(arg7), SWIGTYPE_p_long, new_flags));
+ }
+ {
+ if (*arg8) {
+ vresult = SWIG_Ruby_AppendOutput(vresult, rb_str_new2(*arg8));
+ } else {
+ vresult = SWIG_Ruby_AppendOutput(vresult, Qnil);
+ }
+ }
+ if (SWIG_IsTmpObj(res9)) {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_From_long((*arg9)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res9) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj((void*)(arg9), SWIGTYPE_p_long, new_flags));
+ }
+ {
+ if (*arg10) {
+ vresult = SWIG_Ruby_AppendOutput(vresult, rb_str_new2(*arg10));
+ } else {
+ vresult = SWIG_Ruby_AppendOutput(vresult, Qnil);
+ }
+ }
+ if (alloc11 == SWIG_NEWOBJ) free((char*)buf11);
+ if (alloc13 == SWIG_NEWOBJ) free((char*)buf13);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc11 == SWIG_NEWOBJ) free((char*)buf11);
+ if (alloc13 == SWIG_NEWOBJ) free((char*)buf13);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_client_merge5(int argc, VALUE *argv, VALUE self) {
+ char *arg1 = (char *) 0 ;
+ svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_opt_revision_t *arg4 = (svn_opt_revision_t *) 0 ;
+ char *arg5 = (char *) 0 ;
+ svn_depth_t arg6 ;
+ svn_boolean_t arg7 ;
+ svn_boolean_t arg8 ;
+ svn_boolean_t arg9 ;
+ svn_boolean_t arg10 ;
+ svn_boolean_t arg11 ;
+ svn_boolean_t arg12 ;
+ apr_array_header_t *arg13 = (apr_array_header_t *) 0 ;
+ svn_client_ctx_t *arg14 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg15 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ svn_opt_revision_t rev2 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ svn_opt_revision_t rev4 ;
+ int res5 ;
+ char *buf5 = 0 ;
+ int alloc5 = 0 ;
+ void *argp14 = 0 ;
+ int res14 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ int adjusted_argc = argc;
+ VALUE *adjusted_argv = argv;
+
+ svn_swig_rb_adjust_arg_for_client_ctx_and_pool(&adjusted_argc,
+ &adjusted_argv);
+ svn_swig_rb_get_pool(adjusted_argc, adjusted_argv, self,
+ &_global_svn_swig_rb_pool, &arg15);
+ _global_pool = arg15;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 13) || (argc > 15)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 13)",argc); SWIG_fail;
+ }
+ res1 = SWIG_AsCharPtrAndSize(argv[0], &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "char const *","svn_client_merge5", 1, argv[0] ));
+ }
+ arg1 = (char *)(buf1);
+ {
+ arg2 = &rev2;
+ svn_swig_rb_set_revision(&rev2, argv[1]);
+ }
+ res3 = SWIG_AsCharPtrAndSize(argv[2], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","svn_client_merge5", 3, argv[2] ));
+ }
+ arg3 = (char *)(buf3);
+ {
+ arg4 = &rev4;
+ svn_swig_rb_set_revision(&rev4, argv[3]);
+ }
+ res5 = SWIG_AsCharPtrAndSize(argv[4], &buf5, NULL, &alloc5);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), Ruby_Format_TypeError( "", "char const *","svn_client_merge5", 5, argv[4] ));
+ }
+ arg5 = (char *)(buf5);
+ {
+ arg6 = svn_swig_rb_to_depth(argv[5]);
+ }
+ arg7 = RTEST(argv[6]);
+ arg8 = RTEST(argv[7]);
+ arg9 = RTEST(argv[8]);
+ arg10 = RTEST(argv[9]);
+ arg11 = RTEST(argv[10]);
+ arg12 = RTEST(argv[11]);
+ {
+ if (NIL_P(argv[12])) {
+ arg13 = NULL;
+ } else {
+ VALUE rb_pool;
+ apr_pool_t *pool;
+
+ svn_swig_rb_get_pool(argc, argv, self, &rb_pool, &pool);
+ arg13 = svn_swig_rb_to_apr_array_prop(argv[12], pool);
+ }
+ }
+ if (argc > 13) {
+ res14 = SWIG_ConvertPtr(argv[13], &argp14,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res14)) {
+ SWIG_exception_fail(SWIG_ArgError(res14), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_merge5", 14, argv[13] ));
+ }
+ arg14 = (svn_client_ctx_t *)(argp14);
+ }
+ if (argc > 14) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_merge5((char const *)arg1,(struct svn_opt_revision_t const *)arg2,(char const *)arg3,(struct svn_opt_revision_t const *)arg4,(char const *)arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12,(apr_array_header_t const *)arg13,arg14,arg15);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_client_merge4(int argc, VALUE *argv, VALUE self) {
char *arg1 = (char *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
@@ -16092,11 +17410,6 @@ _wrap_svn_client_merge_reintegrate(int argc, VALUE *argv, VALUE self) {
}
{
- if (!arg2) {
- SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
- }
- }
- {
result = (svn_error_t *)svn_client_merge_reintegrate((char const *)arg1,(struct svn_opt_revision_t const *)arg2,(char const *)arg3,arg4,(apr_array_header_t const *)arg5,arg6,arg7);
@@ -16135,6 +17448,135 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_client_merge_peg5(int argc, VALUE *argv, VALUE self) {
+ char *arg1 = (char *) 0 ;
+ apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
+ svn_opt_revision_t *arg3 = (svn_opt_revision_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ svn_depth_t arg5 ;
+ svn_boolean_t arg6 ;
+ svn_boolean_t arg7 ;
+ svn_boolean_t arg8 ;
+ svn_boolean_t arg9 ;
+ svn_boolean_t arg10 ;
+ svn_boolean_t arg11 ;
+ apr_array_header_t *arg12 = (apr_array_header_t *) 0 ;
+ svn_client_ctx_t *arg13 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg14 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ svn_opt_revision_t rev3 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ void *argp13 = 0 ;
+ int res13 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ int adjusted_argc = argc;
+ VALUE *adjusted_argv = argv;
+
+ svn_swig_rb_adjust_arg_for_client_ctx_and_pool(&adjusted_argc,
+ &adjusted_argv);
+ svn_swig_rb_get_pool(adjusted_argc, adjusted_argv, self,
+ &_global_svn_swig_rb_pool, &arg14);
+ _global_pool = arg14;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 12) || (argc > 14)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 12)",argc); SWIG_fail;
+ }
+ res1 = SWIG_AsCharPtrAndSize(argv[0], &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "char const *","svn_client_merge_peg5", 1, argv[0] ));
+ }
+ arg1 = (char *)(buf1);
+ {
+ arg2 = svn_swig_rb_array_to_apr_array_revision_range(argv[1], _global_pool);
+ }
+ {
+ arg3 = &rev3;
+ svn_swig_rb_set_revision(&rev3, argv[2]);
+ }
+ res4 = SWIG_AsCharPtrAndSize(argv[3], &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "char const *","svn_client_merge_peg5", 4, argv[3] ));
+ }
+ arg4 = (char *)(buf4);
+ {
+ arg5 = svn_swig_rb_to_depth(argv[4]);
+ }
+ arg6 = RTEST(argv[5]);
+ arg7 = RTEST(argv[6]);
+ arg8 = RTEST(argv[7]);
+ arg9 = RTEST(argv[8]);
+ arg10 = RTEST(argv[9]);
+ arg11 = RTEST(argv[10]);
+ {
+ if (NIL_P(argv[11])) {
+ arg12 = NULL;
+ } else {
+ VALUE rb_pool;
+ apr_pool_t *pool;
+
+ svn_swig_rb_get_pool(argc, argv, self, &rb_pool, &pool);
+ arg12 = svn_swig_rb_to_apr_array_prop(argv[11], pool);
+ }
+ }
+ if (argc > 12) {
+ res13 = SWIG_ConvertPtr(argv[12], &argp13,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res13)) {
+ SWIG_exception_fail(SWIG_ArgError(res13), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_merge_peg5", 13, argv[12] ));
+ }
+ arg13 = (svn_client_ctx_t *)(argp13);
+ }
+ if (argc > 13) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_merge_peg5((char const *)arg1,(apr_array_header_t const *)arg2,(struct svn_opt_revision_t const *)arg3,(char const *)arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,(apr_array_header_t const *)arg12,arg13,arg14);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_client_merge_peg4(int argc, VALUE *argv, VALUE self) {
char *arg1 = (char *) 0 ;
apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
@@ -16224,11 +17666,6 @@ _wrap_svn_client_merge_peg4(int argc, VALUE *argv, VALUE self) {
}
{
- if (!arg3) {
- SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
- }
- }
- {
result = (svn_error_t *)svn_client_merge_peg4((char const *)arg1,(apr_array_header_t const *)arg2,(struct svn_opt_revision_t const *)arg3,(char const *)arg4,arg5,arg6,arg7,arg8,arg9,arg10,(apr_array_header_t const *)arg11,arg12,arg13);
@@ -16847,6 +18284,132 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_client_mergeinfo_log2(int argc, VALUE *argv, VALUE self) {
+ svn_boolean_t arg1 ;
+ char *arg2 = (char *) 0 ;
+ svn_opt_revision_t *arg3 = (svn_opt_revision_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ svn_opt_revision_t *arg5 = (svn_opt_revision_t *) 0 ;
+ svn_opt_revision_t *arg6 = (svn_opt_revision_t *) 0 ;
+ svn_opt_revision_t *arg7 = (svn_opt_revision_t *) 0 ;
+ svn_log_entry_receiver_t arg8 = (svn_log_entry_receiver_t) 0 ;
+ void *arg9 = (void *) 0 ;
+ svn_boolean_t arg10 ;
+ svn_depth_t arg11 ;
+ apr_array_header_t *arg12 = (apr_array_header_t *) 0 ;
+ svn_client_ctx_t *arg13 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg14 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ svn_opt_revision_t rev3 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ svn_opt_revision_t rev5 ;
+ svn_opt_revision_t rev6 ;
+ svn_opt_revision_t rev7 ;
+ void *argp13 = 0 ;
+ int res13 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg14);
+ _global_pool = arg14;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 12) || (argc > 13)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 12)",argc); SWIG_fail;
+ }
+ arg1 = RTEST(argv[0]);
+ res2 = SWIG_AsCharPtrAndSize(argv[1], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","svn_client_mergeinfo_log2", 2, argv[1] ));
+ }
+ arg2 = (char *)(buf2);
+ {
+ arg3 = &rev3;
+ svn_swig_rb_set_revision(&rev3, argv[2]);
+ }
+ res4 = SWIG_AsCharPtrAndSize(argv[3], &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "char const *","svn_client_mergeinfo_log2", 4, argv[3] ));
+ }
+ arg4 = (char *)(buf4);
+ {
+ arg5 = &rev5;
+ svn_swig_rb_set_revision(&rev5, argv[4]);
+ }
+ {
+ arg6 = &rev6;
+ svn_swig_rb_set_revision(&rev6, argv[5]);
+ }
+ {
+ arg7 = &rev7;
+ svn_swig_rb_set_revision(&rev7, argv[6]);
+ }
+ {
+ arg8 = svn_swig_rb_log_entry_receiver;
+ arg9 = (void *)svn_swig_rb_make_baton(argv[7], _global_svn_swig_rb_pool);
+ }
+ arg10 = RTEST(argv[8]);
+ {
+ arg11 = svn_swig_rb_to_depth(argv[9]);
+ }
+ {
+ arg12 = (NIL_P(argv[10])) ? NULL :
+ svn_swig_rb_strings_to_apr_array(argv[10], _global_pool);
+ }
+ res13 = SWIG_ConvertPtr(argv[11], &argp13,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res13)) {
+ SWIG_exception_fail(SWIG_ArgError(res13), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_mergeinfo_log2", 13, argv[11] ));
+ }
+ arg13 = (svn_client_ctx_t *)(argp13);
+ if (argc > 12) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_mergeinfo_log2(arg1,(char const *)arg2,(struct svn_opt_revision_t const *)arg3,(char const *)arg4,(struct svn_opt_revision_t const *)arg5,(struct svn_opt_revision_t const *)arg6,(struct svn_opt_revision_t const *)arg7,arg8,arg9,arg10,arg11,(apr_array_header_t const *)arg12,arg13,arg14);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_client_mergeinfo_log(int argc, VALUE *argv, VALUE self) {
svn_boolean_t arg1 ;
char *arg2 = (char *) 0 ;
@@ -16923,11 +18486,6 @@ _wrap_svn_client_mergeinfo_log(int argc, VALUE *argv, VALUE self) {
}
{
- if (!arg3) {
- SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
- }
- }
- {
result = (svn_error_t *)svn_client_mergeinfo_log(arg1,(char const *)arg2,(struct svn_opt_revision_t const *)arg3,(char const *)arg4,(struct svn_opt_revision_t const *)arg5,arg6,arg7,arg8,arg9,(apr_array_header_t const *)arg10,arg11,arg12);
@@ -17890,7 +19448,7 @@ fail:
}
-swig_class SwigClassSvn_client_copy_source_t;
+static swig_class SwigClassSvn_client_copy_source_t;
#ifdef HAVE_RB_DEFINE_ALLOC_FUNC
SWIGINTERN VALUE
@@ -17922,7 +19480,7 @@ _wrap_new_svn_client_copy_source_t(int argc, VALUE *argv, VALUE self) {
int alloc1 = 0 ;
svn_opt_revision_t rev2 ;
svn_opt_revision_t rev3 ;
- svn_client_copy_source_t *result = 0 ;
+ struct svn_client_copy_source_t *result = 0 ;
{
svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg4);
@@ -17949,7 +19507,7 @@ _wrap_new_svn_client_copy_source_t(int argc, VALUE *argv, VALUE self) {
}
{
- result = (svn_client_copy_source_t *)new_svn_client_copy_source_t((char const *)arg1,(struct svn_opt_revision_t const *)arg2,(struct svn_opt_revision_t const *)arg3,arg4);
+ result = (struct svn_client_copy_source_t *)new_svn_client_copy_source_t((char const *)arg1,(struct svn_opt_revision_t const *)arg2,(struct svn_opt_revision_t const *)arg3,arg4);
DATA_PTR(self) = result;
@@ -17977,16 +19535,16 @@ fail:
}
-SWIGINTERN void delete_svn_client_copy_source_t(svn_client_copy_source_t *self){
+SWIGINTERN void delete_svn_client_copy_source_t(struct svn_client_copy_source_t *self){
}
SWIGINTERN void
-free_svn_client_copy_source_t(svn_client_copy_source_t *arg1) {
+free_svn_client_copy_source_t(struct svn_client_copy_source_t *arg1) {
delete_svn_client_copy_source_t(arg1);
}
SWIGINTERN VALUE
_wrap_svn_client_copy_source_t_path(int argc, VALUE *argv, VALUE self) {
- svn_client_copy_source_t *arg1 = (svn_client_copy_source_t *) 0 ;
+ struct svn_client_copy_source_t *arg1 = (struct svn_client_copy_source_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -17997,9 +19555,9 @@ _wrap_svn_client_copy_source_t_path(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_copy_source_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_copy_source_t *","_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_copy_source_t *","_path", 1, self ));
}
- arg1 = (svn_client_copy_source_t *)(argp1);
+ arg1 = (struct svn_client_copy_source_t *)(argp1);
{
result = (char *)svn_client_copy_source_t__path(arg1);
@@ -18021,7 +19579,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_copy_source_t_revision(int argc, VALUE *argv, VALUE self) {
- svn_client_copy_source_t *arg1 = (svn_client_copy_source_t *) 0 ;
+ struct svn_client_copy_source_t *arg1 = (struct svn_client_copy_source_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_opt_revision_t *result = 0 ;
@@ -18032,9 +19590,9 @@ _wrap_svn_client_copy_source_t_revision(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_copy_source_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_copy_source_t *","_revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_copy_source_t *","_revision", 1, self ));
}
- arg1 = (svn_client_copy_source_t *)(argp1);
+ arg1 = (struct svn_client_copy_source_t *)(argp1);
{
result = (svn_opt_revision_t *)svn_client_copy_source_t__revision(arg1);
@@ -18050,7 +19608,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_copy_source_t_peg_revision(int argc, VALUE *argv, VALUE self) {
- svn_client_copy_source_t *arg1 = (svn_client_copy_source_t *) 0 ;
+ struct svn_client_copy_source_t *arg1 = (struct svn_client_copy_source_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_opt_revision_t *result = 0 ;
@@ -18061,9 +19619,9 @@ _wrap_svn_client_copy_source_t_peg_revision(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_copy_source_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_copy_source_t *","_peg_revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_copy_source_t *","_peg_revision", 1, self ));
}
- arg1 = (svn_client_copy_source_t *)(argp1);
+ arg1 = (struct svn_client_copy_source_t *)(argp1);
{
result = (svn_opt_revision_t *)svn_client_copy_source_t__peg_revision(arg1);
@@ -18094,7 +19652,6 @@ _wrap_svn_client_copy6(int argc, VALUE *argv, VALUE self) {
int res2 ;
char *buf2 = 0 ;
int alloc2 = 0 ;
- int res8 ;
void *argp9 = 0 ;
int res9 = 0 ;
svn_error_t *result = 0 ;
@@ -18111,8 +19668,8 @@ _wrap_svn_client_copy6(int argc, VALUE *argv, VALUE self) {
_global_pool = arg10;
svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
}
- if ((argc < 8) || (argc > 10)) {
- rb_raise(rb_eArgError, "wrong # of arguments(%d for 8)",argc); SWIG_fail;
+ if ((argc < 7) || (argc > 9)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 7)",argc); SWIG_fail;
}
{
arg1 = svn_swig_rb_array_to_apr_array_copy_source(argv[0], _global_pool);
@@ -18143,23 +19700,17 @@ _wrap_svn_client_copy6(int argc, VALUE *argv, VALUE self) {
}
}
{
- int res = SWIG_ConvertFunctionPtr(argv[6], (void**)(&arg7), SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_commit_callback2_t","svn_client_copy6", 7, argv[6] ));
- }
- }
- res8 = SWIG_ConvertPtr(argv[7],SWIG_as_voidptrptr(&arg8), 0, 0);
- if (!SWIG_IsOK(res8)) {
- SWIG_exception_fail(SWIG_ArgError(res8), Ruby_Format_TypeError( "", "void *","svn_client_copy6", 8, argv[7] ));
+ arg7 = svn_swig_rb_commit_callback2;
+ arg8 = (void *)svn_swig_rb_make_baton(argv[6], _global_svn_swig_rb_pool);
}
- if (argc > 8) {
- res9 = SWIG_ConvertPtr(argv[8], &argp9,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (argc > 7) {
+ res9 = SWIG_ConvertPtr(argv[7], &argp9,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res9)) {
- SWIG_exception_fail(SWIG_ArgError(res9), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_copy6", 9, argv[8] ));
+ SWIG_exception_fail(SWIG_ArgError(res9), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_copy6", 9, argv[7] ));
}
arg9 = (svn_client_ctx_t *)(argp9);
}
- if (argc > 9) {
+ if (argc > 8) {
}
{
@@ -18176,6 +19727,9 @@ _wrap_svn_client_copy6(int argc, VALUE *argv, VALUE self) {
}
vresult = Qnil;
}
+ {
+ svn_swig_rb_set_baton(vresult, (VALUE)arg8);
+ }
if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
{
VALUE target;
@@ -18734,6 +20288,125 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_client_move7(int argc, VALUE *argv, VALUE self) {
+ apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ svn_boolean_t arg5 ;
+ svn_boolean_t arg6 ;
+ apr_hash_t *arg7 = (apr_hash_t *) 0 ;
+ svn_commit_callback2_t arg8 = (svn_commit_callback2_t) 0 ;
+ void *arg9 = (void *) 0 ;
+ svn_client_ctx_t *arg10 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg11 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ void *argp10 = 0 ;
+ int res10 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ int adjusted_argc = argc;
+ VALUE *adjusted_argv = argv;
+
+ svn_swig_rb_adjust_arg_for_client_ctx_and_pool(&adjusted_argc,
+ &adjusted_argv);
+ svn_swig_rb_get_pool(adjusted_argc, adjusted_argv, self,
+ &_global_svn_swig_rb_pool, &arg11);
+ _global_pool = arg11;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 8) || (argc > 10)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 8)",argc); SWIG_fail;
+ }
+ {
+ arg1 = svn_swig_rb_strings_to_apr_array(argv[0], _global_pool);
+ }
+ res2 = SWIG_AsCharPtrAndSize(argv[1], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","svn_client_move7", 2, argv[1] ));
+ }
+ arg2 = (char *)(buf2);
+ arg3 = RTEST(argv[2]);
+ arg4 = RTEST(argv[3]);
+ arg5 = RTEST(argv[4]);
+ arg6 = RTEST(argv[5]);
+ {
+ VALUE rb_pool = Qnil;
+ if (!_global_pool) {
+ svn_swig_rb_get_pool(argc, argv, self, &rb_pool, &_global_pool);
+ svn_swig_rb_push_pool(rb_pool);
+ }
+ arg7 = svn_swig_rb_hash_to_apr_hash_svn_string(argv[6], _global_pool);
+ _global_pool = NULL;
+ if (!NIL_P(rb_pool)) {
+ if (NIL_P(arg7)) {
+ svn_swig_rb_destroy_pool(rb_pool);
+ } else {
+ svn_swig_rb_set_pool_for_no_swig_type(argv[6], rb_pool);
+ }
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ }
+ {
+ arg8 = svn_swig_rb_commit_callback2;
+ arg9 = (void *)svn_swig_rb_make_baton(argv[7], _global_svn_swig_rb_pool);
+ }
+ if (argc > 8) {
+ res10 = SWIG_ConvertPtr(argv[8], &argp10,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res10)) {
+ SWIG_exception_fail(SWIG_ArgError(res10), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_move7", 10, argv[8] ));
+ }
+ arg10 = (svn_client_ctx_t *)(argp10);
+ }
+ if (argc > 9) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_move7((apr_array_header_t const *)arg1,(char const *)arg2,arg3,arg4,arg5,arg6,(apr_hash_t const *)arg7,arg8,arg9,arg10,arg11);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ svn_swig_rb_set_baton(vresult, (VALUE)arg9);
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_client_move6(int argc, VALUE *argv, VALUE self) {
apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
char *arg2 = (char *) 0 ;
@@ -18749,7 +20422,6 @@ _wrap_svn_client_move6(int argc, VALUE *argv, VALUE self) {
int res2 ;
char *buf2 = 0 ;
int alloc2 = 0 ;
- int res7 ;
void *argp8 = 0 ;
int res8 = 0 ;
svn_error_t *result = 0 ;
@@ -18766,8 +20438,8 @@ _wrap_svn_client_move6(int argc, VALUE *argv, VALUE self) {
_global_pool = arg9;
svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
}
- if ((argc < 7) || (argc > 9)) {
- rb_raise(rb_eArgError, "wrong # of arguments(%d for 7)",argc); SWIG_fail;
+ if ((argc < 6) || (argc > 8)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 6)",argc); SWIG_fail;
}
{
arg1 = svn_swig_rb_strings_to_apr_array(argv[0], _global_pool);
@@ -18797,23 +20469,17 @@ _wrap_svn_client_move6(int argc, VALUE *argv, VALUE self) {
}
}
{
- int res = SWIG_ConvertFunctionPtr(argv[5], (void**)(&arg6), SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_commit_callback2_t","svn_client_move6", 6, argv[5] ));
- }
- }
- res7 = SWIG_ConvertPtr(argv[6],SWIG_as_voidptrptr(&arg7), 0, 0);
- if (!SWIG_IsOK(res7)) {
- SWIG_exception_fail(SWIG_ArgError(res7), Ruby_Format_TypeError( "", "void *","svn_client_move6", 7, argv[6] ));
+ arg6 = svn_swig_rb_commit_callback2;
+ arg7 = (void *)svn_swig_rb_make_baton(argv[5], _global_svn_swig_rb_pool);
}
- if (argc > 7) {
- res8 = SWIG_ConvertPtr(argv[7], &argp8,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (argc > 6) {
+ res8 = SWIG_ConvertPtr(argv[6], &argp8,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res8)) {
- SWIG_exception_fail(SWIG_ArgError(res8), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_move6", 8, argv[7] ));
+ SWIG_exception_fail(SWIG_ArgError(res8), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_move6", 8, argv[6] ));
}
arg8 = (svn_client_ctx_t *)(argp8);
}
- if (argc > 8) {
+ if (argc > 7) {
}
{
@@ -18830,6 +20496,9 @@ _wrap_svn_client_move6(int argc, VALUE *argv, VALUE self) {
}
vresult = Qnil;
}
+ {
+ svn_swig_rb_set_baton(vresult, (VALUE)arg7);
+ }
if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
{
VALUE target;
@@ -19391,7 +21060,6 @@ _wrap_svn_client_propset_remote(int argc, VALUE *argv, VALUE self) {
int alloc3 = 0 ;
long val5 ;
int ecode5 = 0 ;
- int res8 ;
void *argp9 = 0 ;
int res9 = 0 ;
svn_error_t *result = 0 ;
@@ -19402,8 +21070,8 @@ _wrap_svn_client_propset_remote(int argc, VALUE *argv, VALUE self) {
_global_pool = arg10;
svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
}
- if ((argc < 9) || (argc > 10)) {
- rb_raise(rb_eArgError, "wrong # of arguments(%d for 9)",argc); SWIG_fail;
+ if ((argc < 8) || (argc > 9)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 8)",argc); SWIG_fail;
}
res1 = SWIG_AsCharPtrAndSize(argv[0], &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) {
@@ -19448,21 +21116,15 @@ _wrap_svn_client_propset_remote(int argc, VALUE *argv, VALUE self) {
}
}
{
- int res = SWIG_ConvertFunctionPtr(argv[6], (void**)(&arg7), SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t);
- if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_commit_callback2_t","svn_client_propset_remote", 7, argv[6] ));
- }
- }
- res8 = SWIG_ConvertPtr(argv[7],SWIG_as_voidptrptr(&arg8), 0, 0);
- if (!SWIG_IsOK(res8)) {
- SWIG_exception_fail(SWIG_ArgError(res8), Ruby_Format_TypeError( "", "void *","svn_client_propset_remote", 8, argv[7] ));
+ arg7 = svn_swig_rb_commit_callback2;
+ arg8 = (void *)svn_swig_rb_make_baton(argv[6], _global_svn_swig_rb_pool);
}
- res9 = SWIG_ConvertPtr(argv[8], &argp9,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ res9 = SWIG_ConvertPtr(argv[7], &argp9,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
if (!SWIG_IsOK(res9)) {
- SWIG_exception_fail(SWIG_ArgError(res9), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_propset_remote", 9, argv[8] ));
+ SWIG_exception_fail(SWIG_ArgError(res9), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_propset_remote", 9, argv[7] ));
}
arg9 = (svn_client_ctx_t *)(argp9);
- if (argc > 9) {
+ if (argc > 8) {
}
{
@@ -19479,6 +21141,9 @@ _wrap_svn_client_propset_remote(int argc, VALUE *argv, VALUE self) {
}
vresult = Qnil;
}
+ {
+ svn_swig_rb_set_baton(vresult, (VALUE)arg8);
+ }
if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
{
@@ -20202,6 +21867,171 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_client_propget5(int argc, VALUE *argv, VALUE self) {
+ apr_hash_t **arg1 = (apr_hash_t **) 0 ;
+ apr_array_header_t **arg2 = (apr_array_header_t **) 0 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+ svn_opt_revision_t *arg5 = (svn_opt_revision_t *) 0 ;
+ svn_opt_revision_t *arg6 = (svn_opt_revision_t *) 0 ;
+ svn_revnum_t *arg7 = (svn_revnum_t *) 0 ;
+ svn_depth_t arg8 ;
+ apr_array_header_t *arg9 = (apr_array_header_t *) 0 ;
+ svn_client_ctx_t *arg10 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg11 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg12 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ apr_hash_t *temp1 ;
+ apr_array_header_t *temp2 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ svn_opt_revision_t rev5 ;
+ svn_opt_revision_t rev6 ;
+ svn_revnum_t temp7 ;
+ int res7 = SWIG_TMPOBJ ;
+ void *argp10 = 0 ;
+ int res10 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg11);
+ _global_pool = arg11;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg12);
+ _global_pool = arg12;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ arg2 = &temp2;
+ arg7 = &temp7;
+ if ((argc < 7) || (argc > 9)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 7)",argc); SWIG_fail;
+ }
+ res3 = SWIG_AsCharPtrAndSize(argv[0], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","svn_client_propget5", 3, argv[0] ));
+ }
+ arg3 = (char *)(buf3);
+ res4 = SWIG_AsCharPtrAndSize(argv[1], &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "char const *","svn_client_propget5", 4, argv[1] ));
+ }
+ arg4 = (char *)(buf4);
+ {
+ arg5 = &rev5;
+ svn_swig_rb_set_revision(&rev5, argv[2]);
+ }
+ {
+ arg6 = &rev6;
+ svn_swig_rb_set_revision(&rev6, argv[3]);
+ }
+ {
+ arg8 = svn_swig_rb_to_depth(argv[4]);
+ }
+ {
+ arg9 = (NIL_P(argv[5])) ? NULL :
+ svn_swig_rb_strings_to_apr_array(argv[5], _global_pool);
+ }
+ res10 = SWIG_ConvertPtr(argv[6], &argp10,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res10)) {
+ SWIG_exception_fail(SWIG_ArgError(res10), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_propget5", 10, argv[6] ));
+ }
+ arg10 = (svn_client_ctx_t *)(argp10);
+ if (argc > 7) {
+
+ }
+ if (argc > 8) {
+
+ }
+ {
+ if (!arg5) {
+ SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
+ }
+ }
+ {
+ if (!arg6) {
+ SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
+ }
+ }
+ {
+ result = (svn_error_t *)svn_client_propget5(arg1,arg2,(char const *)arg3,(char const *)arg4,(struct svn_opt_revision_t const *)arg5,(struct svn_opt_revision_t const *)arg6,arg7,arg8,(apr_array_header_t const *)arg9,arg10,arg11,arg12);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, svn_swig_rb_apr_hash_to_hash_svn_string(*arg1));
+ }
+ {
+ /* FIXME: Missing argout typemap: svn_client_propget5 arg 2 (apr_array_header_t **) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_client_propget5 is not implemented yet");
+
+ }
+ if (SWIG_IsTmpObj(res7)) {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_From_long((*arg7)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res7) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj((void*)(arg7), SWIGTYPE_p_long, new_flags));
+ }
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_client_propget4(int argc, VALUE *argv, VALUE self) {
apr_hash_t **arg1 = (apr_hash_t **) 0 ;
char *arg2 = (char *) 0 ;
@@ -20846,6 +22676,124 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_client_proplist4(int argc, VALUE *argv, VALUE self) {
+ char *arg1 = (char *) 0 ;
+ svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
+ svn_opt_revision_t *arg3 = (svn_opt_revision_t *) 0 ;
+ svn_depth_t arg4 ;
+ apr_array_header_t *arg5 = (apr_array_header_t *) 0 ;
+ svn_boolean_t arg6 ;
+ svn_proplist_receiver2_t arg7 = (svn_proplist_receiver2_t) 0 ;
+ void *arg8 = (void *) 0 ;
+ svn_client_ctx_t *arg9 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg10 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ svn_opt_revision_t rev2 ;
+ svn_opt_revision_t rev3 ;
+ int res8 ;
+ void *argp9 = 0 ;
+ int res9 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg10);
+ _global_pool = arg10;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 9) || (argc > 10)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 9)",argc); SWIG_fail;
+ }
+ res1 = SWIG_AsCharPtrAndSize(argv[0], &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "char const *","svn_client_proplist4", 1, argv[0] ));
+ }
+ arg1 = (char *)(buf1);
+ {
+ arg2 = &rev2;
+ svn_swig_rb_set_revision(&rev2, argv[1]);
+ }
+ {
+ arg3 = &rev3;
+ svn_swig_rb_set_revision(&rev3, argv[2]);
+ }
+ {
+ arg4 = svn_swig_rb_to_depth(argv[3]);
+ }
+ {
+ arg5 = (NIL_P(argv[4])) ? NULL :
+ svn_swig_rb_strings_to_apr_array(argv[4], _global_pool);
+ }
+ arg6 = RTEST(argv[5]);
+ {
+ int res = SWIG_ConvertFunctionPtr(argv[6], (void**)(&arg7), SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_proplist_receiver2_t","svn_client_proplist4", 7, argv[6] ));
+ }
+ }
+ res8 = SWIG_ConvertPtr(argv[7],SWIG_as_voidptrptr(&arg8), 0, 0);
+ if (!SWIG_IsOK(res8)) {
+ SWIG_exception_fail(SWIG_ArgError(res8), Ruby_Format_TypeError( "", "void *","svn_client_proplist4", 8, argv[7] ));
+ }
+ res9 = SWIG_ConvertPtr(argv[8], &argp9,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res9)) {
+ SWIG_exception_fail(SWIG_ArgError(res9), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_proplist4", 9, argv[8] ));
+ }
+ arg9 = (svn_client_ctx_t *)(argp9);
+ if (argc > 9) {
+
+ }
+ {
+ if (!arg2) {
+ SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
+ }
+ }
+ {
+ if (!arg3) {
+ SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
+ }
+ }
+ {
+ result = (svn_error_t *)svn_client_proplist4((char const *)arg1,(struct svn_opt_revision_t const *)arg2,(struct svn_opt_revision_t const *)arg3,arg4,(apr_array_header_t const *)arg5,arg6,arg7,arg8,arg9,arg10);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_client_proplist3(int argc, VALUE *argv, VALUE self) {
char *arg1 = (char *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
@@ -21922,6 +23870,137 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_client_list3(int argc, VALUE *argv, VALUE self) {
+ char *arg1 = (char *) 0 ;
+ svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
+ svn_opt_revision_t *arg3 = (svn_opt_revision_t *) 0 ;
+ svn_depth_t arg4 ;
+ apr_uint32_t arg5 ;
+ svn_boolean_t arg6 ;
+ svn_boolean_t arg7 ;
+ svn_client_list_func2_t arg8 = (svn_client_list_func2_t) 0 ;
+ void *arg9 = (void *) 0 ;
+ svn_client_ctx_t *arg10 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg11 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ svn_opt_revision_t rev2 ;
+ svn_opt_revision_t rev3 ;
+ unsigned long val5 ;
+ int ecode5 = 0 ;
+ int res9 ;
+ void *argp10 = 0 ;
+ int res10 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ int adjusted_argc = argc;
+ VALUE *adjusted_argv = argv;
+
+ svn_swig_rb_adjust_arg_for_client_ctx_and_pool(&adjusted_argc,
+ &adjusted_argv);
+ svn_swig_rb_get_pool(adjusted_argc, adjusted_argv, self,
+ &_global_svn_swig_rb_pool, &arg11);
+ _global_pool = arg11;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 9) || (argc > 11)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 9)",argc); SWIG_fail;
+ }
+ res1 = SWIG_AsCharPtrAndSize(argv[0], &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "char const *","svn_client_list3", 1, argv[0] ));
+ }
+ arg1 = (char *)(buf1);
+ {
+ arg2 = &rev2;
+ svn_swig_rb_set_revision(&rev2, argv[1]);
+ }
+ {
+ arg3 = &rev3;
+ svn_swig_rb_set_revision(&rev3, argv[2]);
+ }
+ {
+ arg4 = svn_swig_rb_to_depth(argv[3]);
+ }
+ ecode5 = SWIG_AsVal_unsigned_SS_long(argv[4], &val5);
+ if (!SWIG_IsOK(ecode5)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode5), Ruby_Format_TypeError( "", "apr_uint32_t","svn_client_list3", 5, argv[4] ));
+ }
+ arg5 = (apr_uint32_t)(val5);
+ arg6 = RTEST(argv[5]);
+ arg7 = RTEST(argv[6]);
+ {
+ int res = SWIG_ConvertFunctionPtr(argv[7], (void**)(&arg8), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_client_list_func2_t","svn_client_list3", 8, argv[7] ));
+ }
+ }
+ res9 = SWIG_ConvertPtr(argv[8],SWIG_as_voidptrptr(&arg9), 0, 0);
+ if (!SWIG_IsOK(res9)) {
+ SWIG_exception_fail(SWIG_ArgError(res9), Ruby_Format_TypeError( "", "void *","svn_client_list3", 9, argv[8] ));
+ }
+ if (argc > 9) {
+ res10 = SWIG_ConvertPtr(argv[9], &argp10,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res10)) {
+ SWIG_exception_fail(SWIG_ArgError(res10), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_list3", 10, argv[9] ));
+ }
+ arg10 = (svn_client_ctx_t *)(argp10);
+ }
+ if (argc > 10) {
+
+ }
+ {
+ if (!arg2) {
+ SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
+ }
+ }
+ {
+ if (!arg3) {
+ SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
+ }
+ }
+ {
+ result = (svn_error_t *)svn_client_list3((char const *)arg1,(struct svn_opt_revision_t const *)arg2,(struct svn_opt_revision_t const *)arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_client_list2(int argc, VALUE *argv, VALUE self) {
char *arg1 = (char *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
@@ -23117,11 +25196,11 @@ fail:
}
-swig_class SwigClassSvn_info_t;
+static swig_class SwigClassSvn_info_t;
SWIGINTERN VALUE
_wrap_svn_info_t_URL_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -23134,9 +25213,9 @@ _wrap_svn_info_t_URL_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","URL", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","URL", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","URL", 2, argv[0] ));
@@ -23160,7 +25239,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_URL_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -23171,9 +25250,9 @@ _wrap_svn_info_t_URL_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","URL", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","URL", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (char *) ((arg1)->URL);
{
if (result) {
@@ -23190,7 +25269,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_rev_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -23202,9 +25281,9 @@ _wrap_svn_info_t_rev_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","rev", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","rev", 2, argv[0] ));
@@ -23219,7 +25298,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_rev_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -23230,9 +25309,9 @@ _wrap_svn_info_t_rev_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","rev", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (svn_revnum_t) ((arg1)->rev);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -23243,7 +25322,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -23255,9 +25334,9 @@ _wrap_svn_info_t_kind_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","kind", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_node_kind_t","kind", 2, argv[0] ));
@@ -23272,7 +25351,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_node_kind_t result;
@@ -23283,9 +25362,9 @@ _wrap_svn_info_t_kind_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","kind", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -23296,7 +25375,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_repos_root_URL_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -23309,9 +25388,9 @@ _wrap_svn_info_t_repos_root_URL_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","repos_root_URL", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","repos_root_URL", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","repos_root_URL", 2, argv[0] ));
@@ -23335,7 +25414,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_repos_root_URL_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -23346,9 +25425,9 @@ _wrap_svn_info_t_repos_root_URL_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","repos_root_URL", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","repos_root_URL", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (char *) ((arg1)->repos_root_URL);
{
if (result) {
@@ -23365,7 +25444,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_repos_UUID_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -23378,9 +25457,9 @@ _wrap_svn_info_t_repos_UUID_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","repos_UUID", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","repos_UUID", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","repos_UUID", 2, argv[0] ));
@@ -23404,7 +25483,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_repos_UUID_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -23415,9 +25494,9 @@ _wrap_svn_info_t_repos_UUID_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","repos_UUID", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","repos_UUID", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (char *) ((arg1)->repos_UUID);
{
if (result) {
@@ -23434,7 +25513,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_last_changed_rev_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -23446,9 +25525,9 @@ _wrap_svn_info_t_last_changed_rev_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","last_changed_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","last_changed_rev", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","last_changed_rev", 2, argv[0] ));
@@ -23463,7 +25542,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_last_changed_rev_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -23474,9 +25553,9 @@ _wrap_svn_info_t_last_changed_rev_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","last_changed_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","last_changed_rev", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (svn_revnum_t) ((arg1)->last_changed_rev);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -23487,7 +25566,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_last_changed_date_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -23497,9 +25576,9 @@ _wrap_svn_info_t_last_changed_date_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","last_changed_date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","last_changed_date", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
{
arg2 = (apr_time_t)NUM2LL(argv[0]);
}
@@ -23512,7 +25591,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_last_changed_date_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_time_t result;
@@ -23523,9 +25602,9 @@ _wrap_svn_info_t_last_changed_date_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","last_changed_date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","last_changed_date", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = ((arg1)->last_changed_date);
{
vresult = LL2NUM((apr_time_t)(result));
@@ -23538,7 +25617,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_last_changed_author_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -23551,9 +25630,9 @@ _wrap_svn_info_t_last_changed_author_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","last_changed_author", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","last_changed_author", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","last_changed_author", 2, argv[0] ));
@@ -23577,7 +25656,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_last_changed_author_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -23588,9 +25667,9 @@ _wrap_svn_info_t_last_changed_author_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","last_changed_author", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","last_changed_author", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (char *) ((arg1)->last_changed_author);
{
if (result) {
@@ -23607,7 +25686,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_lock_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_lock_t *arg2 = (svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -23619,9 +25698,9 @@ _wrap_svn_info_t_lock_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","lock", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","lock", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_lock_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_lock_t *","lock", 2, argv[0] ));
@@ -23636,7 +25715,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_lock_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_lock_t *result = 0 ;
@@ -23647,9 +25726,9 @@ _wrap_svn_info_t_lock_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","lock", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","lock", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (svn_lock_t *) ((arg1)->lock);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_lock_t, 0 | 0 );
return vresult;
@@ -23660,7 +25739,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_has_wc_info_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -23670,9 +25749,9 @@ _wrap_svn_info_t_has_wc_info_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","has_wc_info", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","has_wc_info", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->has_wc_info = arg2;
return Qnil;
@@ -23683,7 +25762,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_has_wc_info_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -23694,9 +25773,9 @@ _wrap_svn_info_t_has_wc_info_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","has_wc_info", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","has_wc_info", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (svn_boolean_t) ((arg1)->has_wc_info);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -23707,7 +25786,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_schedule_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_wc_schedule_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -23719,9 +25798,9 @@ _wrap_svn_info_t_schedule_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","schedule", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","schedule", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_wc_schedule_t","schedule", 2, argv[0] ));
@@ -23736,7 +25815,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_schedule_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_schedule_t result;
@@ -23747,9 +25826,9 @@ _wrap_svn_info_t_schedule_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","schedule", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","schedule", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (svn_wc_schedule_t) ((arg1)->schedule);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -23760,7 +25839,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_copyfrom_url_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -23770,9 +25849,9 @@ _wrap_svn_info_t_copyfrom_url_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","copyfrom_url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","copyfrom_url", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
{
if (NIL_P(argv[0])) {
arg2 = NULL;
@@ -23796,7 +25875,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_copyfrom_url_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -23807,9 +25886,9 @@ _wrap_svn_info_t_copyfrom_url_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","copyfrom_url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","copyfrom_url", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (char *) ((arg1)->copyfrom_url);
{
if (result) {
@@ -23826,7 +25905,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_copyfrom_rev_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -23838,9 +25917,9 @@ _wrap_svn_info_t_copyfrom_rev_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","copyfrom_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","copyfrom_rev", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","copyfrom_rev", 2, argv[0] ));
@@ -23855,7 +25934,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_copyfrom_rev_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -23866,9 +25945,9 @@ _wrap_svn_info_t_copyfrom_rev_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","copyfrom_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","copyfrom_rev", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (svn_revnum_t) ((arg1)->copyfrom_rev);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -23879,7 +25958,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_text_time_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -23889,9 +25968,9 @@ _wrap_svn_info_t_text_time_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","text_time", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","text_time", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
{
arg2 = (apr_time_t)NUM2LL(argv[0]);
}
@@ -23904,7 +25983,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_text_time_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_time_t result;
@@ -23915,9 +25994,9 @@ _wrap_svn_info_t_text_time_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","text_time", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","text_time", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = ((arg1)->text_time);
{
vresult = LL2NUM((apr_time_t)(result));
@@ -23930,7 +26009,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_prop_time_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -23940,9 +26019,9 @@ _wrap_svn_info_t_prop_time_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","prop_time", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","prop_time", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
{
arg2 = (apr_time_t)NUM2LL(argv[0]);
}
@@ -23955,7 +26034,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_prop_time_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_time_t result;
@@ -23966,9 +26045,9 @@ _wrap_svn_info_t_prop_time_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","prop_time", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","prop_time", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = ((arg1)->prop_time);
{
vresult = LL2NUM((apr_time_t)(result));
@@ -23981,7 +26060,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_checksum_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -23994,9 +26073,9 @@ _wrap_svn_info_t_checksum_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","checksum", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","checksum", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","checksum", 2, argv[0] ));
@@ -24020,7 +26099,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_checksum_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -24031,9 +26110,9 @@ _wrap_svn_info_t_checksum_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","checksum", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","checksum", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (char *) ((arg1)->checksum);
{
if (result) {
@@ -24050,7 +26129,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_conflict_old_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -24063,9 +26142,9 @@ _wrap_svn_info_t_conflict_old_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","conflict_old", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","conflict_old", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","conflict_old", 2, argv[0] ));
@@ -24089,7 +26168,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_conflict_old_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -24100,9 +26179,9 @@ _wrap_svn_info_t_conflict_old_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","conflict_old", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","conflict_old", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (char *) ((arg1)->conflict_old);
{
if (result) {
@@ -24119,7 +26198,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_conflict_new_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -24132,9 +26211,9 @@ _wrap_svn_info_t_conflict_new_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","conflict_new", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","conflict_new", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","conflict_new", 2, argv[0] ));
@@ -24158,7 +26237,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_conflict_new_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -24169,9 +26248,9 @@ _wrap_svn_info_t_conflict_new_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","conflict_new", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","conflict_new", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (char *) ((arg1)->conflict_new);
{
if (result) {
@@ -24188,7 +26267,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_conflict_wrk_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -24201,9 +26280,9 @@ _wrap_svn_info_t_conflict_wrk_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","conflict_wrk", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","conflict_wrk", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","conflict_wrk", 2, argv[0] ));
@@ -24227,7 +26306,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_conflict_wrk_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -24238,9 +26317,9 @@ _wrap_svn_info_t_conflict_wrk_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","conflict_wrk", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","conflict_wrk", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (char *) ((arg1)->conflict_wrk);
{
if (result) {
@@ -24257,7 +26336,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_prejfile_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -24270,9 +26349,9 @@ _wrap_svn_info_t_prejfile_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","prejfile", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","prejfile", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","prejfile", 2, argv[0] ));
@@ -24296,7 +26375,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_prejfile_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -24307,9 +26386,9 @@ _wrap_svn_info_t_prejfile_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","prejfile", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","prejfile", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (char *) ((arg1)->prejfile);
{
if (result) {
@@ -24326,7 +26405,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_changelist_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -24336,9 +26415,9 @@ _wrap_svn_info_t_changelist_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","changelist", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","changelist", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
{
arg2 = StringValueCStr(argv[0]);
}
@@ -24358,7 +26437,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_changelist_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -24369,9 +26448,9 @@ _wrap_svn_info_t_changelist_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","changelist", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","changelist", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (char *) ((arg1)->changelist);
{
if (result) {
@@ -24388,7 +26467,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_depth_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_depth_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -24398,9 +26477,9 @@ _wrap_svn_info_t_depth_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","depth", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","depth", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
{
arg2 = svn_swig_rb_to_depth(argv[0]);
}
@@ -24413,7 +26492,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_depth_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_depth_t result;
@@ -24424,9 +26503,9 @@ _wrap_svn_info_t_depth_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","depth", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","depth", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (svn_depth_t) ((arg1)->depth);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -24437,7 +26516,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_working_size_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
apr_size_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -24449,9 +26528,9 @@ _wrap_svn_info_t_working_size_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","working_size", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","working_size", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "apr_size_t","working_size", 2, argv[0] ));
@@ -24466,7 +26545,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_working_size_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_size_t result;
@@ -24477,9 +26556,9 @@ _wrap_svn_info_t_working_size_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","working_size", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","working_size", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = ((arg1)->working_size);
vresult = SWIG_From_unsigned_SS_long((unsigned long)(result));
return vresult;
@@ -24508,7 +26587,7 @@ Size or Length of the svn_info_t.
*/
SWIGINTERN VALUE
_wrap_svn_info_t_size_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
apr_size_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -24520,9 +26599,9 @@ _wrap_svn_info_t_size_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","size", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","size", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "apr_size_t","size", 2, argv[0] ));
@@ -24537,7 +26616,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_size_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_size_t result;
@@ -24548,9 +26627,9 @@ _wrap_svn_info_t_size_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","size", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","size", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = ((arg1)->size);
vresult = SWIG_From_unsigned_SS_long((unsigned long)(result));
return vresult;
@@ -24561,7 +26640,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_size64_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_filesize_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -24571,9 +26650,9 @@ _wrap_svn_info_t_size64_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","size64", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","size64", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
{
arg2 = (svn_filesize_t)NUM2LL(argv[0]);
}
@@ -24586,7 +26665,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_size64_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_filesize_t result;
@@ -24597,9 +26676,9 @@ _wrap_svn_info_t_size64_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","size64", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","size64", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = ((arg1)->size64);
{
vresult = LL2NUM((svn_filesize_t)(result));
@@ -24612,7 +26691,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_working_size64_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_filesize_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -24622,9 +26701,9 @@ _wrap_svn_info_t_working_size64_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","working_size64", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","working_size64", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
{
arg2 = (svn_filesize_t)NUM2LL(argv[0]);
}
@@ -24637,7 +26716,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_working_size64_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_filesize_t result;
@@ -24648,9 +26727,9 @@ _wrap_svn_info_t_working_size64_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","working_size64", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","working_size64", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = ((arg1)->working_size64);
{
vresult = LL2NUM((svn_filesize_t)(result));
@@ -24663,7 +26742,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_tree_conflict_set(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
svn_wc_conflict_description_t *arg2 = (svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -24675,9 +26754,9 @@ _wrap_svn_info_t_tree_conflict_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","tree_conflict", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","tree_conflict", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_wc_conflict_description_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","tree_conflict", 2, argv[0] ));
@@ -24692,7 +26771,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_info_t_tree_conflict_get(int argc, VALUE *argv, VALUE self) {
- svn_info_t *arg1 = (svn_info_t *) 0 ;
+ struct svn_info_t *arg1 = (struct svn_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_conflict_description_t *result = 0 ;
@@ -24703,9 +26782,9 @@ _wrap_svn_info_t_tree_conflict_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_info_t *","tree_conflict", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_info_t *","tree_conflict", 1, self ));
}
- arg1 = (svn_info_t *)(argp1);
+ arg1 = (struct svn_info_t *)(argp1);
result = (svn_wc_conflict_description_t *) ((arg1)->tree_conflict);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
return vresult;
@@ -24733,13 +26812,13 @@ _wrap_svn_info_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_info_t(int argc, VALUE *argv, VALUE self) {
- svn_info_t *result = 0 ;
+ struct svn_info_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_info_t *)calloc(1, sizeof(svn_info_t));
+ result = (struct svn_info_t *)calloc(1, sizeof(struct svn_info_t));
DATA_PTR(self) = result;
@@ -24752,7 +26831,7 @@ fail:
SWIGINTERN void
-free_svn_info_t(svn_info_t *arg1) {
+free_svn_info_t(struct svn_info_t *arg1) {
free((char *) arg1);
}
@@ -24810,11 +26889,11 @@ fail:
}
-swig_class SwigClassSvn_client_info2_t;
+static swig_class SwigClassSvn_client_info2_t;
SWIGINTERN VALUE
_wrap_svn_client_info2_t_URL_set(int argc, VALUE *argv, VALUE self) {
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -24827,9 +26906,9 @@ _wrap_svn_client_info2_t_URL_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_info2_t *","URL", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_info2_t *","URL", 1, self ));
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","URL", 2, argv[0] ));
@@ -24853,7 +26932,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_info2_t_URL_get(int argc, VALUE *argv, VALUE self) {
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -24864,9 +26943,9 @@ _wrap_svn_client_info2_t_URL_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_info2_t *","URL", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_info2_t *","URL", 1, self ));
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
result = (char *) ((arg1)->URL);
{
if (result) {
@@ -24883,7 +26962,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_info2_t_rev_set(int argc, VALUE *argv, VALUE self) {
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -24895,9 +26974,9 @@ _wrap_svn_client_info2_t_rev_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_info2_t *","rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_info2_t *","rev", 1, self ));
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","rev", 2, argv[0] ));
@@ -24912,7 +26991,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_info2_t_rev_get(int argc, VALUE *argv, VALUE self) {
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -24923,9 +27002,9 @@ _wrap_svn_client_info2_t_rev_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_info2_t *","rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_info2_t *","rev", 1, self ));
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
result = (svn_revnum_t) ((arg1)->rev);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -24936,7 +27015,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_info2_t_repos_root_URL_set(int argc, VALUE *argv, VALUE self) {
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -24949,9 +27028,9 @@ _wrap_svn_client_info2_t_repos_root_URL_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_info2_t *","repos_root_URL", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_info2_t *","repos_root_URL", 1, self ));
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","repos_root_URL", 2, argv[0] ));
@@ -24975,7 +27054,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_info2_t_repos_root_URL_get(int argc, VALUE *argv, VALUE self) {
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -24986,9 +27065,9 @@ _wrap_svn_client_info2_t_repos_root_URL_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_info2_t *","repos_root_URL", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_info2_t *","repos_root_URL", 1, self ));
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
result = (char *) ((arg1)->repos_root_URL);
{
if (result) {
@@ -25005,7 +27084,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_info2_t_repos_UUID_set(int argc, VALUE *argv, VALUE self) {
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -25018,9 +27097,9 @@ _wrap_svn_client_info2_t_repos_UUID_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_info2_t *","repos_UUID", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_info2_t *","repos_UUID", 1, self ));
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","repos_UUID", 2, argv[0] ));
@@ -25044,7 +27123,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_info2_t_repos_UUID_get(int argc, VALUE *argv, VALUE self) {
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -25055,9 +27134,9 @@ _wrap_svn_client_info2_t_repos_UUID_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_info2_t *","repos_UUID", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_info2_t *","repos_UUID", 1, self ));
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
result = (char *) ((arg1)->repos_UUID);
{
if (result) {
@@ -25074,7 +27153,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_info2_t_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -25086,9 +27165,9 @@ _wrap_svn_client_info2_t_kind_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_info2_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_info2_t *","kind", 1, self ));
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_node_kind_t","kind", 2, argv[0] ));
@@ -25103,7 +27182,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_info2_t_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_node_kind_t result;
@@ -25114,9 +27193,9 @@ _wrap_svn_client_info2_t_kind_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_info2_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_info2_t *","kind", 1, self ));
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -25145,7 +27224,7 @@ Size or Length of the svn_client_info2_t.
*/
SWIGINTERN VALUE
_wrap_svn_client_info2_t_size_set(int argc, VALUE *argv, VALUE self) {
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
svn_filesize_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -25155,9 +27234,9 @@ _wrap_svn_client_info2_t_size_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_info2_t *","size", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_info2_t *","size", 1, self ));
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
{
arg2 = (svn_filesize_t)NUM2LL(argv[0]);
}
@@ -25170,7 +27249,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_info2_t_size_get(int argc, VALUE *argv, VALUE self) {
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_filesize_t result;
@@ -25181,9 +27260,9 @@ _wrap_svn_client_info2_t_size_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_info2_t *","size", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_info2_t *","size", 1, self ));
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
result = ((arg1)->size);
{
vresult = LL2NUM((svn_filesize_t)(result));
@@ -25196,7 +27275,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_info2_t_last_changed_rev_set(int argc, VALUE *argv, VALUE self) {
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -25208,9 +27287,9 @@ _wrap_svn_client_info2_t_last_changed_rev_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_info2_t *","last_changed_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_info2_t *","last_changed_rev", 1, self ));
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","last_changed_rev", 2, argv[0] ));
@@ -25225,7 +27304,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_info2_t_last_changed_rev_get(int argc, VALUE *argv, VALUE self) {
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -25236,9 +27315,9 @@ _wrap_svn_client_info2_t_last_changed_rev_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_info2_t *","last_changed_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_info2_t *","last_changed_rev", 1, self ));
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
result = (svn_revnum_t) ((arg1)->last_changed_rev);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -25249,7 +27328,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_info2_t_last_changed_date_set(int argc, VALUE *argv, VALUE self) {
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -25259,9 +27338,9 @@ _wrap_svn_client_info2_t_last_changed_date_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_info2_t *","last_changed_date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_info2_t *","last_changed_date", 1, self ));
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
{
arg2 = (apr_time_t)NUM2LL(argv[0]);
}
@@ -25274,7 +27353,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_info2_t_last_changed_date_get(int argc, VALUE *argv, VALUE self) {
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_time_t result;
@@ -25285,9 +27364,9 @@ _wrap_svn_client_info2_t_last_changed_date_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_info2_t *","last_changed_date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_info2_t *","last_changed_date", 1, self ));
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
result = ((arg1)->last_changed_date);
{
vresult = LL2NUM((apr_time_t)(result));
@@ -25300,7 +27379,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_info2_t_last_changed_author_set(int argc, VALUE *argv, VALUE self) {
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -25313,9 +27392,9 @@ _wrap_svn_client_info2_t_last_changed_author_set(int argc, VALUE *argv, VALUE se
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_info2_t *","last_changed_author", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_info2_t *","last_changed_author", 1, self ));
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","last_changed_author", 2, argv[0] ));
@@ -25339,7 +27418,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_info2_t_last_changed_author_get(int argc, VALUE *argv, VALUE self) {
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -25350,9 +27429,9 @@ _wrap_svn_client_info2_t_last_changed_author_get(int argc, VALUE *argv, VALUE se
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_info2_t *","last_changed_author", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_info2_t *","last_changed_author", 1, self ));
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
result = (char *) ((arg1)->last_changed_author);
{
if (result) {
@@ -25369,7 +27448,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_info2_t_lock_set(int argc, VALUE *argv, VALUE self) {
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
svn_lock_t *arg2 = (svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -25381,9 +27460,9 @@ _wrap_svn_client_info2_t_lock_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_info2_t *","lock", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_info2_t *","lock", 1, self ));
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_lock_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_lock_t const *","lock", 2, argv[0] ));
@@ -25398,7 +27477,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_info2_t_lock_get(int argc, VALUE *argv, VALUE self) {
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_lock_t *result = 0 ;
@@ -25409,9 +27488,9 @@ _wrap_svn_client_info2_t_lock_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_info2_t *","lock", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_info2_t *","lock", 1, self ));
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
result = (svn_lock_t *) ((arg1)->lock);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_lock_t, 0 | 0 );
return vresult;
@@ -25422,7 +27501,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_info2_t_wc_info_set(int argc, VALUE *argv, VALUE self) {
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
svn_wc_info_t *arg2 = (svn_wc_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -25434,9 +27513,9 @@ _wrap_svn_client_info2_t_wc_info_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_info2_t *","wc_info", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_info2_t *","wc_info", 1, self ));
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_wc_info_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_wc_info_t const *","wc_info", 2, argv[0] ));
@@ -25451,7 +27530,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_client_info2_t_wc_info_get(int argc, VALUE *argv, VALUE self) {
- svn_client_info2_t *arg1 = (svn_client_info2_t *) 0 ;
+ struct svn_client_info2_t *arg1 = (struct svn_client_info2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_info_t *result = 0 ;
@@ -25462,9 +27541,9 @@ _wrap_svn_client_info2_t_wc_info_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_client_info2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_client_info2_t *","wc_info", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_client_info2_t *","wc_info", 1, self ));
}
- arg1 = (svn_client_info2_t *)(argp1);
+ arg1 = (struct svn_client_info2_t *)(argp1);
result = (svn_wc_info_t *) ((arg1)->wc_info);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
return vresult;
@@ -25492,13 +27571,13 @@ _wrap_svn_client_info2_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_client_info2_t(int argc, VALUE *argv, VALUE self) {
- svn_client_info2_t *result = 0 ;
+ struct svn_client_info2_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_client_info2_t *)calloc(1, sizeof(svn_client_info2_t));
+ result = (struct svn_client_info2_t *)calloc(1, sizeof(struct svn_client_info2_t));
DATA_PTR(self) = result;
@@ -25511,7 +27590,7 @@ fail:
SWIGINTERN void
-free_svn_client_info2_t(svn_client_info2_t *arg1) {
+free_svn_client_info2_t(struct svn_client_info2_t *arg1) {
free((char *) arg1);
}
@@ -26407,6 +28486,121 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_client_get_repos_root(int argc, VALUE *argv, VALUE self) {
+ char **arg1 = (char **) 0 ;
+ char **arg2 = (char **) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_client_ctx_t *arg4 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ char *temp1 ;
+ char *temp2 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ void *argp4 = 0 ;
+ int res4 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg5);
+ _global_pool = arg5;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg6);
+ _global_pool = arg6;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ arg2 = &temp2;
+ if ((argc < 2) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
+ }
+ res3 = SWIG_AsCharPtrAndSize(argv[0], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","svn_client_get_repos_root", 3, argv[0] ));
+ }
+ arg3 = (char *)(buf3);
+ res4 = SWIG_ConvertPtr(argv[1], &argp4,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_get_repos_root", 4, argv[1] ));
+ }
+ arg4 = (svn_client_ctx_t *)(argp4);
+ if (argc > 2) {
+
+ }
+ if (argc > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_get_repos_root((char const **)arg1,(char const **)arg2,(char const *)arg3,arg4,arg5,arg6);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ if (*arg1) {
+ vresult = SWIG_Ruby_AppendOutput(vresult, rb_str_new2(*arg1));
+ } else {
+ vresult = SWIG_Ruby_AppendOutput(vresult, Qnil);
+ }
+ }
+ {
+ if (*arg2) {
+ vresult = SWIG_Ruby_AppendOutput(vresult, rb_str_new2(*arg2));
+ } else {
+ vresult = SWIG_Ruby_AppendOutput(vresult, Qnil);
+ }
+ }
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_client_root_url_from_path(int argc, VALUE *argv, VALUE self) {
char **arg1 = (char **) 0 ;
char *arg2 = (char *) 0 ;
@@ -26790,6 +28984,118 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_client_open_ra_session2(int argc, VALUE *argv, VALUE self) {
+ svn_ra_session_t **arg1 = (svn_ra_session_t **) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_client_ctx_t *arg4 = (svn_client_ctx_t *) 0 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_ra_session_t *temp1 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ void *argp4 = 0 ;
+ int res4 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg5);
+ _global_pool = arg5;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg6);
+ _global_pool = arg6;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ if ((argc < 3) || (argc > 5)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
+ }
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","svn_client_open_ra_session2", 2, argv[0] ));
+ }
+ arg2 = (char *)(buf2);
+ res3 = SWIG_AsCharPtrAndSize(argv[1], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","svn_client_open_ra_session2", 3, argv[1] ));
+ }
+ arg3 = (char *)(buf3);
+ res4 = SWIG_ConvertPtr(argv[2], &argp4,SWIGTYPE_p_svn_client_ctx_t, 0 | 0 );
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "svn_client_ctx_t *","svn_client_open_ra_session2", 4, argv[2] ));
+ }
+ arg4 = (svn_client_ctx_t *)(argp4);
+ if (argc > 3) {
+
+ }
+ if (argc > 4) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_open_ra_session2(arg1,(char const *)arg2,(char const *)arg3,arg4,arg5,arg6);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_ra_session_t, 0));
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_client_open_ra_session(int argc, VALUE *argv, VALUE self) {
svn_ra_session_t **arg1 = (svn_ra_session_t **) 0 ;
char *arg2 = (char *) 0 ;
@@ -26876,6 +29182,99 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_proplist_invoke_receiver2(int argc, VALUE *argv, VALUE self) {
+ svn_proplist_receiver2_t arg1 = (svn_proplist_receiver2_t) 0 ;
+ void *arg2 = (void *) 0 ;
+ char *arg3 = (char *) 0 ;
+ apr_hash_t *arg4 = (apr_hash_t *) 0 ;
+ apr_array_header_t *arg5 = (apr_array_header_t *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int res2 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ void *argp4 = 0 ;
+ int res4 = 0 ;
+ void *argp5 = 0 ;
+ int res5 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg6);
+ _global_pool = arg6;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 5) || (argc > 6)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 5)",argc); SWIG_fail;
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg1), SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_proplist_receiver2_t","svn_proplist_invoke_receiver2", 1, argv[0] ));
+ }
+ }
+ res2 = SWIG_ConvertPtr(argv[1],SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "void *","svn_proplist_invoke_receiver2", 2, argv[1] ));
+ }
+ res3 = SWIG_AsCharPtrAndSize(argv[2], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","svn_proplist_invoke_receiver2", 3, argv[2] ));
+ }
+ arg3 = (char *)(buf3);
+ res4 = SWIG_ConvertPtr(argv[3], &argp4,SWIGTYPE_p_apr_hash_t, 0 | 0 );
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "apr_hash_t *","svn_proplist_invoke_receiver2", 4, argv[3] ));
+ }
+ arg4 = (apr_hash_t *)(argp4);
+ res5 = SWIG_ConvertPtr(argv[4], &argp5,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), Ruby_Format_TypeError( "", "apr_array_header_t *","svn_proplist_invoke_receiver2", 5, argv[4] ));
+ }
+ arg5 = (apr_array_header_t *)(argp5);
+ if (argc > 5) {
+
+ }
+ {
+ result = (svn_error_t *)svn_proplist_invoke_receiver2(arg1,arg2,(char const *)arg3,arg4,arg5,arg6);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_proplist_invoke_receiver(int argc, VALUE *argv, VALUE self) {
svn_proplist_receiver_t arg1 = (svn_proplist_receiver_t) 0 ;
void *arg2 = (void *) 0 ;
@@ -27722,6 +30121,97 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_client_invoke_import_filter_func(int argc, VALUE *argv, VALUE self) {
+ svn_client_import_filter_func_t arg1 = (svn_client_import_filter_func_t) 0 ;
+ void *arg2 = (void *) 0 ;
+ svn_boolean_t *arg3 = (svn_boolean_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ svn_io_dirent2_t *arg5 = (svn_io_dirent2_t *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int res2 ;
+ svn_boolean_t temp3 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ void *argp5 = 0 ;
+ int res5 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg6);
+ _global_pool = arg6;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg3 = &temp3;
+ if ((argc < 4) || (argc > 5)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 4)",argc); SWIG_fail;
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg1), SWIGTYPE_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_client_import_filter_func_t","svn_client_invoke_import_filter_func", 1, argv[0] ));
+ }
+ }
+ res2 = SWIG_ConvertPtr(argv[1],SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "void *","svn_client_invoke_import_filter_func", 2, argv[1] ));
+ }
+ res4 = SWIG_AsCharPtrAndSize(argv[2], &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "char const *","svn_client_invoke_import_filter_func", 4, argv[2] ));
+ }
+ arg4 = (char *)(buf4);
+ res5 = SWIG_ConvertPtr(argv[3], &argp5,SWIGTYPE_p_svn_io_dirent2_t, 0 | 0 );
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), Ruby_Format_TypeError( "", "svn_io_dirent2_t const *","svn_client_invoke_import_filter_func", 5, argv[3] ));
+ }
+ arg5 = (svn_io_dirent2_t *)(argp5);
+ if (argc > 4) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_invoke_import_filter_func(arg1,arg2,arg3,(char const *)arg4,(struct svn_io_dirent2_t const *)arg5,arg6);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, *arg3 ? Qtrue : Qfalse);
+ }
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_client_invoke_status_func(int argc, VALUE *argv, VALUE self) {
svn_client_status_func_t arg1 = (svn_client_status_func_t) 0 ;
void *arg2 = (void *) 0 ;
@@ -27807,6 +30297,132 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_client_invoke_list_func2(int argc, VALUE *argv, VALUE self) {
+ svn_client_list_func2_t arg1 = (svn_client_list_func2_t) 0 ;
+ void *arg2 = (void *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_dirent_t *arg4 = (svn_dirent_t *) 0 ;
+ svn_lock_t *arg5 = (svn_lock_t *) 0 ;
+ char *arg6 = (char *) 0 ;
+ char *arg7 = (char *) 0 ;
+ char *arg8 = (char *) 0 ;
+ apr_pool_t *arg9 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int res2 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ void *argp4 = 0 ;
+ int res4 = 0 ;
+ void *argp5 = 0 ;
+ int res5 = 0 ;
+ int res6 ;
+ char *buf6 = 0 ;
+ int alloc6 = 0 ;
+ int res7 ;
+ char *buf7 = 0 ;
+ int alloc7 = 0 ;
+ int res8 ;
+ char *buf8 = 0 ;
+ int alloc8 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg9);
+ _global_pool = arg9;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 8) || (argc > 9)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 8)",argc); SWIG_fail;
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg1), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_client_list_func2_t","svn_client_invoke_list_func2", 1, argv[0] ));
+ }
+ }
+ res2 = SWIG_ConvertPtr(argv[1],SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "void *","svn_client_invoke_list_func2", 2, argv[1] ));
+ }
+ res3 = SWIG_AsCharPtrAndSize(argv[2], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","svn_client_invoke_list_func2", 3, argv[2] ));
+ }
+ arg3 = (char *)(buf3);
+ res4 = SWIG_ConvertPtr(argv[3], &argp4,SWIGTYPE_p_svn_dirent_t, 0 | 0 );
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "svn_dirent_t const *","svn_client_invoke_list_func2", 4, argv[3] ));
+ }
+ arg4 = (svn_dirent_t *)(argp4);
+ res5 = SWIG_ConvertPtr(argv[4], &argp5,SWIGTYPE_p_svn_lock_t, 0 | 0 );
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), Ruby_Format_TypeError( "", "svn_lock_t const *","svn_client_invoke_list_func2", 5, argv[4] ));
+ }
+ arg5 = (svn_lock_t *)(argp5);
+ res6 = SWIG_AsCharPtrAndSize(argv[5], &buf6, NULL, &alloc6);
+ if (!SWIG_IsOK(res6)) {
+ SWIG_exception_fail(SWIG_ArgError(res6), Ruby_Format_TypeError( "", "char const *","svn_client_invoke_list_func2", 6, argv[5] ));
+ }
+ arg6 = (char *)(buf6);
+ res7 = SWIG_AsCharPtrAndSize(argv[6], &buf7, NULL, &alloc7);
+ if (!SWIG_IsOK(res7)) {
+ SWIG_exception_fail(SWIG_ArgError(res7), Ruby_Format_TypeError( "", "char const *","svn_client_invoke_list_func2", 7, argv[6] ));
+ }
+ arg7 = (char *)(buf7);
+ res8 = SWIG_AsCharPtrAndSize(argv[7], &buf8, NULL, &alloc8);
+ if (!SWIG_IsOK(res8)) {
+ SWIG_exception_fail(SWIG_ArgError(res8), Ruby_Format_TypeError( "", "char const *","svn_client_invoke_list_func2", 8, argv[7] ));
+ }
+ arg8 = (char *)(buf8);
+ if (argc > 8) {
+
+ }
+ {
+ result = (svn_error_t *)svn_client_invoke_list_func2(arg1,arg2,(char const *)arg3,(struct svn_dirent_t const *)arg4,(struct svn_lock_t const *)arg5,(char const *)arg6,(char const *)arg7,(char const *)arg8,arg9);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+ if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+ if (alloc8 == SWIG_NEWOBJ) free((char*)buf8);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+ if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+ if (alloc8 == SWIG_NEWOBJ) free((char*)buf8);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_client_invoke_list_func(int argc, VALUE *argv, VALUE self) {
svn_client_list_func_t arg1 = (svn_client_list_func_t) 0 ;
void *arg2 = (void *) 0 ;
@@ -28503,7 +31119,7 @@ fail:
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
-static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *|svn_rangelist_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_file_t = {"_p_apr_file_t", "apr_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_getopt_t = {"_p_apr_getopt_t", "apr_getopt_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_hash_t = {"_p_apr_hash_t", "apr_hash_t *", 0, 0, (void*)0, 0};
@@ -28529,17 +31145,20 @@ static swig_type_info _swigt__p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__cha
static swig_type_info _swigt__p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t", "svn_client_blame_receiver2_t|struct svn_error_t *(*)(void *,apr_int64_t,svn_revnum_t,char const *,char const *,svn_revnum_t,char const *,char const *,char const *,char const *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,apr_hash_t *,svn_revnum_t,char const *,char const *,char const *,apr_pool_t *)|svn_log_message_receiver_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void = {"_p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void", "void (*)(void *,char const *,enum svn_wc_notify_action_t,enum svn_node_kind_t,char const *,enum svn_wc_notify_state_t,enum svn_wc_notify_state_t,long)|svn_wc_notify_func_t", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,apr_hash_t *,apr_array_header_t *,apr_pool_t *)|svn_proplist_receiver2_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,apr_hash_t *,apr_pool_t *)|svn_proplist_receiver_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,char const *,apr_pool_t *)|svn_changelist_receiver_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t", "svn_client_info_receiver2_t|struct svn_error_t *(*)(void *,char const *,svn_client_info2_t const *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t", "svn_client_status_func_t|struct svn_error_t *(*)(void *,char const *,svn_client_status_t const *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,svn_dirent_t const *,svn_lock_t const *,char const *,apr_pool_t *)|svn_client_list_func_t", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,svn_dirent_t const *,svn_lock_t const *,char const *,char const *,char const *,apr_pool_t *)|svn_client_list_func2_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,svn_info_t const *,apr_pool_t *)|svn_info_receiver_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void = {"_p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void", "void (*)(void *,char const *,struct svn_wc_status2_t *)|svn_wc_status_func2_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_struct_svn_wc_status_t__void = {"_p_f_p_void_p_q_const__char_p_struct_svn_wc_status_t__void", "void (*)(void *,char const *,struct svn_wc_status_t *)|svn_wc_status_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,svn_wc_status2_t *,apr_pool_t *)|svn_wc_status_func3_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void = {"_p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void", "svn_wc_notify_func2_t|void (*)(void *,struct svn_wc_notify_t const *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,svn_boolean_t *,char const *,char const *,char const *,apr_pool_t *)|svn_client_patch_func_t", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,svn_boolean_t *,char const *,svn_io_dirent2_t const *,apr_pool_t *)|svn_client_import_filter_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,svn_log_entry_t *,apr_pool_t *)|svn_log_entry_receiver_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,svn_revnum_t,svn_revnum_t,apr_int64_t,svn_revnum_t,apr_hash_t *,svn_revnum_t,apr_hash_t *,char const *,char const *,svn_boolean_t,apr_pool_t *)|svn_client_blame_receiver3_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_int = {"_p_int", "int *|svn_boolean_t *|apr_status_t *", 0, 0, (void*)0, 0};
@@ -28549,6 +31168,7 @@ static swig_type_info _swigt__p_p_apr_hash_t = {"_p_p_apr_hash_t", "apr_hash_t *
static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_auth_provider_object_t = {"_p_p_svn_auth_provider_object_t", "struct svn_auth_provider_object_t **|svn_auth_provider_object_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_client_commit_info_t = {"_p_p_svn_client_commit_info_t", "struct svn_client_commit_info_t **|svn_client_commit_info_t **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_svn_client_ctx_t = {"_p_p_svn_client_ctx_t", "struct svn_client_ctx_t **|svn_client_ctx_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_commit_info_t = {"_p_p_svn_commit_info_t", "struct svn_commit_info_t **|svn_commit_info_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_ra_session_t = {"_p_p_svn_ra_session_t", "struct svn_ra_session_t **|svn_ra_session_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_string_t = {"_p_p_svn_string_t", "struct svn_string_t **|svn_string_t **", 0, 0, (void*)0, 0};
@@ -28562,6 +31182,9 @@ static swig_type_info _swigt__p_svn_auth_iterstate_t = {"_p_svn_auth_iterstate_t
static swig_type_info _swigt__p_svn_auth_provider_object_t = {"_p_svn_auth_provider_object_t", "struct svn_auth_provider_object_t *|svn_auth_provider_object_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_provider_t = {"_p_svn_auth_provider_t", "struct svn_auth_provider_t *|svn_auth_provider_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_ssl_server_cert_info_t = {"_p_svn_auth_ssl_server_cert_info_t", "struct svn_auth_ssl_server_cert_info_t *|svn_auth_ssl_server_cert_info_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_ctx_t = {"_p_svn_checksum_ctx_t", "struct svn_checksum_ctx_t *|svn_checksum_ctx_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "enum svn_checksum_kind_t *|svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "struct svn_checksum_t *|svn_checksum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_client_commit_info_t = {"_p_svn_client_commit_info_t", "struct svn_client_commit_info_t *|svn_client_commit_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_client_commit_item2_t = {"_p_svn_client_commit_item2_t", "struct svn_client_commit_item2_t *|svn_client_commit_item2_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_client_commit_item3_t = {"_p_svn_client_commit_item3_t", "struct svn_client_commit_item3_t *|svn_client_commit_item3_t *", 0, 0, (void*)0, 0};
@@ -28609,6 +31232,7 @@ static swig_type_info _swigt__p_svn_opt_subcommand_desc2_t = {"_p_svn_opt_subcom
static swig_type_info _swigt__p_svn_opt_subcommand_desc_t = {"_p_svn_opt_subcommand_desc_t", "struct svn_opt_subcommand_desc_t *|svn_opt_subcommand_desc_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_file_t = {"_p_svn_patch_file_t", "struct svn_patch_file_t *|svn_patch_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_t = {"_p_svn_patch_t", "struct svn_patch_t *|svn_patch_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_prop_inherited_item_t = {"_p_svn_prop_inherited_item_t", "struct svn_prop_inherited_item_t *|svn_prop_inherited_item_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_kind = {"_p_svn_prop_kind", "svn_prop_kind_t *|enum svn_prop_kind *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_patch_t = {"_p_svn_prop_patch_t", "struct svn_prop_patch_t *|svn_prop_patch_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_ra_callbacks2_t = {"_p_svn_ra_callbacks2_t", "struct svn_ra_callbacks2_t *|svn_ra_callbacks2_t *", 0, 0, (void*)0, 0};
@@ -28627,6 +31251,9 @@ static swig_type_info _swigt__p_svn_txdelta_op_t = {"_p_svn_txdelta_op_t", "stru
static swig_type_info _swigt__p_svn_txdelta_stream_t = {"_p_svn_txdelta_stream_t", "struct svn_txdelta_stream_t *|svn_txdelta_stream_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_txdelta_window_t = {"_p_svn_txdelta_window_t", "struct svn_txdelta_window_t *|svn_txdelta_window_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_checklist_t = {"_p_svn_version_checklist_t", "struct svn_version_checklist_t *|svn_version_checklist_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_linked_lib_t = {"_p_svn_version_ext_linked_lib_t", "struct svn_version_ext_linked_lib_t *|svn_version_ext_linked_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_loaded_lib_t = {"_p_svn_version_ext_loaded_lib_t", "struct svn_version_ext_loaded_lib_t *|svn_version_ext_loaded_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_extended_t = {"_p_svn_version_extended_t", "struct svn_version_extended_t *|svn_version_extended_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_t = {"_p_svn_version_t", "struct svn_version_t *|svn_version_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_wc_adm_access_t = {"_p_svn_wc_adm_access_t", "struct svn_wc_adm_access_t *|svn_wc_adm_access_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_wc_committed_queue_t = {"_p_svn_wc_committed_queue_t", "struct svn_wc_committed_queue_t *|svn_wc_committed_queue_t *", 0, 0, (void*)0, 0};
@@ -28691,17 +31318,20 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void,
+ &_swigt__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void,
&_swigt__p_f_p_void_p_q_const__char_p_struct_svn_wc_status_t__void,
&_swigt__p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void,
&_swigt__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_int,
@@ -28711,6 +31341,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_p_char,
&_swigt__p_p_svn_auth_provider_object_t,
&_swigt__p_p_svn_client_commit_info_t,
+ &_swigt__p_p_svn_client_ctx_t,
&_swigt__p_p_svn_commit_info_t,
&_swigt__p_p_svn_ra_session_t,
&_swigt__p_p_svn_string_t,
@@ -28724,6 +31355,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_auth_provider_object_t,
&_swigt__p_svn_auth_provider_t,
&_swigt__p_svn_auth_ssl_server_cert_info_t,
+ &_swigt__p_svn_checksum_ctx_t,
+ &_swigt__p_svn_checksum_kind_t,
+ &_swigt__p_svn_checksum_t,
&_swigt__p_svn_client_commit_info_t,
&_swigt__p_svn_client_commit_item2_t,
&_swigt__p_svn_client_commit_item3_t,
@@ -28771,6 +31405,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_opt_subcommand_desc_t,
&_swigt__p_svn_patch_file_t,
&_swigt__p_svn_patch_t,
+ &_swigt__p_svn_prop_inherited_item_t,
&_swigt__p_svn_prop_kind,
&_swigt__p_svn_prop_patch_t,
&_swigt__p_svn_ra_callbacks2_t,
@@ -28789,6 +31424,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_txdelta_stream_t,
&_swigt__p_svn_txdelta_window_t,
&_swigt__p_svn_version_checklist_t,
+ &_swigt__p_svn_version_ext_linked_lib_t,
+ &_swigt__p_svn_version_ext_loaded_lib_t,
+ &_swigt__p_svn_version_extended_t,
&_swigt__p_svn_version_t,
&_swigt__p_svn_wc_adm_access_t,
&_swigt__p_svn_wc_committed_queue_t,
@@ -28853,17 +31491,20 @@ static swig_cast_info _swigc__p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__cha
static swig_cast_info _swigc__p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void[] = { {&_swigt__p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void[] = { {&_swigt__p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_struct_svn_wc_status_t__void[] = { {&_swigt__p_f_p_void_p_q_const__char_p_struct_svn_wc_status_t__void, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void[] = { {&_swigt__p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_int[] = { {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}};
@@ -28873,6 +31514,7 @@ static swig_cast_info _swigc__p_p_apr_hash_t[] = { {&_swigt__p_p_apr_hash_t, 0,
static swig_cast_info _swigc__p_p_char[] = { {&_swigt__p_p_char, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_auth_provider_object_t[] = { {&_swigt__p_p_svn_auth_provider_object_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_client_commit_info_t[] = { {&_swigt__p_p_svn_client_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_svn_client_ctx_t[] = { {&_swigt__p_p_svn_client_ctx_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_commit_info_t[] = { {&_swigt__p_p_svn_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_ra_session_t[] = { {&_swigt__p_p_svn_ra_session_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_string_t[] = { {&_swigt__p_p_svn_string_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -28886,6 +31528,9 @@ static swig_cast_info _swigc__p_svn_auth_iterstate_t[] = { {&_swigt__p_svn_auth
static swig_cast_info _swigc__p_svn_auth_provider_object_t[] = { {&_swigt__p_svn_auth_provider_object_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_provider_t[] = { {&_swigt__p_svn_auth_provider_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_ssl_server_cert_info_t[] = { {&_swigt__p_svn_auth_ssl_server_cert_info_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_ctx_t[] = { {&_swigt__p_svn_checksum_ctx_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_kind_t[] = { {&_swigt__p_svn_checksum_kind_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_t[] = { {&_swigt__p_svn_checksum_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_client_commit_info_t[] = { {&_swigt__p_svn_client_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_client_commit_item2_t[] = { {&_swigt__p_svn_client_commit_item2_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_client_commit_item3_t[] = { {&_swigt__p_svn_client_commit_item3_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -28933,6 +31578,7 @@ static swig_cast_info _swigc__p_svn_opt_subcommand_desc2_t[] = { {&_swigt__p_sv
static swig_cast_info _swigc__p_svn_opt_subcommand_desc_t[] = { {&_swigt__p_svn_opt_subcommand_desc_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_file_t[] = { {&_swigt__p_svn_patch_file_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_t[] = { {&_swigt__p_svn_patch_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_prop_inherited_item_t[] = { {&_swigt__p_svn_prop_inherited_item_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_kind[] = { {&_swigt__p_svn_prop_kind, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_patch_t[] = { {&_swigt__p_svn_prop_patch_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_ra_callbacks2_t[] = { {&_swigt__p_svn_ra_callbacks2_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -28951,6 +31597,9 @@ static swig_cast_info _swigc__p_svn_txdelta_op_t[] = { {&_swigt__p_svn_txdelta_
static swig_cast_info _swigc__p_svn_txdelta_stream_t[] = { {&_swigt__p_svn_txdelta_stream_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_txdelta_window_t[] = { {&_swigt__p_svn_txdelta_window_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_checklist_t[] = { {&_swigt__p_svn_version_checklist_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_linked_lib_t[] = { {&_swigt__p_svn_version_ext_linked_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_loaded_lib_t[] = { {&_swigt__p_svn_version_ext_loaded_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_extended_t[] = { {&_swigt__p_svn_version_extended_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_t[] = { {&_swigt__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_wc_adm_access_t[] = { {&_swigt__p_svn_wc_adm_access_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_wc_committed_queue_t[] = { {&_swigt__p_svn_wc_committed_queue_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -29015,17 +31664,20 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_f_p_void_apr_int64_t_svn_revnum_t_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_enum_svn_wc_notify_action_t_enum_svn_node_kind_t_p_q_const__char_enum_svn_wc_notify_state_t_enum_svn_wc_notify_state_t_long__void,
+ _swigc__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_apr_hash_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_q_const__svn_client_info2_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_q_const__svn_client_status_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_f_p_void_p_q_const__char_p_q_const__svn_dirent_t_p_q_const__svn_lock_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_q_const__svn_info_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_struct_svn_wc_status2_t__void,
_swigc__p_f_p_void_p_q_const__char_p_struct_svn_wc_status_t__void,
_swigc__p_f_p_void_p_q_const__char_p_svn_wc_status2_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__struct_svn_wc_notify_t_p_apr_pool_t__void,
_swigc__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_f_p_void_p_svn_boolean_t_p_q_const__char_p_q_const__svn_io_dirent2_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_svn_revnum_t_svn_revnum_t_apr_int64_t_svn_revnum_t_p_apr_hash_t_svn_revnum_t_p_apr_hash_t_p_q_const__char_p_q_const__char_svn_boolean_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_int,
@@ -29035,6 +31687,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_p_char,
_swigc__p_p_svn_auth_provider_object_t,
_swigc__p_p_svn_client_commit_info_t,
+ _swigc__p_p_svn_client_ctx_t,
_swigc__p_p_svn_commit_info_t,
_swigc__p_p_svn_ra_session_t,
_swigc__p_p_svn_string_t,
@@ -29048,6 +31701,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_auth_provider_object_t,
_swigc__p_svn_auth_provider_t,
_swigc__p_svn_auth_ssl_server_cert_info_t,
+ _swigc__p_svn_checksum_ctx_t,
+ _swigc__p_svn_checksum_kind_t,
+ _swigc__p_svn_checksum_t,
_swigc__p_svn_client_commit_info_t,
_swigc__p_svn_client_commit_item2_t,
_swigc__p_svn_client_commit_item3_t,
@@ -29095,6 +31751,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_opt_subcommand_desc_t,
_swigc__p_svn_patch_file_t,
_swigc__p_svn_patch_t,
+ _swigc__p_svn_prop_inherited_item_t,
_swigc__p_svn_prop_kind,
_swigc__p_svn_prop_patch_t,
_swigc__p_svn_ra_callbacks2_t,
@@ -29113,6 +31770,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_txdelta_stream_t,
_swigc__p_svn_txdelta_window_t,
_swigc__p_svn_version_checklist_t,
+ _swigc__p_svn_version_ext_linked_lib_t,
+ _swigc__p_svn_version_ext_loaded_lib_t,
+ _swigc__p_svn_version_extended_t,
_swigc__p_svn_version_t,
_swigc__p_svn_wc_adm_access_t,
_swigc__p_svn_wc_committed_queue_t,
@@ -29213,8 +31873,6 @@ SWIG_InitializeModule(void *clientdata) {
swig_module_info *module_head, *iter;
int found, init;
- clientdata = clientdata;
-
/* check to see if the circular list has been setup, if not, set it up */
if (swig_module.next==0) {
/* Initialize the swig_module */
@@ -29459,6 +32117,7 @@ SWIGEXPORT void Init_client(void) {
rb_define_const(mClient, "SVN_CLIENT_COMMIT_ITEM_PROP_MODS", SWIG_From_int((int)(0x08)));
rb_define_const(mClient, "SVN_CLIENT_COMMIT_ITEM_IS_COPY", SWIG_From_int((int)(0x10)));
rb_define_const(mClient, "SVN_CLIENT_COMMIT_ITEM_LOCK_TOKEN", SWIG_From_int((int)(0x20)));
+ rb_define_const(mClient, "SVN_CLIENT_COMMIT_ITEM_MOVED_HERE", SWIG_From_int((int)(0x40)));
SwigClassSvn_client_commit_item3_t.klass = rb_define_class_under(mClient, "Svn_client_commit_item3_t", rb_cObject);
SWIG_TypeClientData(SWIGTYPE_p_svn_client_commit_item3_t, (void *) &SwigClassSvn_client_commit_item3_t);
@@ -29484,6 +32143,8 @@ SWIGEXPORT void Init_client(void) {
rb_define_method(SwigClassSvn_client_commit_item3_t.klass, "outgoing_prop_changes", _wrap_svn_client_commit_item3_t_outgoing_prop_changes_get, -1);
rb_define_method(SwigClassSvn_client_commit_item3_t.klass, "session_relpath=", _wrap_svn_client_commit_item3_t_session_relpath_set, -1);
rb_define_method(SwigClassSvn_client_commit_item3_t.klass, "session_relpath", _wrap_svn_client_commit_item3_t_session_relpath_get, -1);
+ rb_define_method(SwigClassSvn_client_commit_item3_t.klass, "moved_from_abspath=", _wrap_svn_client_commit_item3_t_moved_from_abspath_set, -1);
+ rb_define_method(SwigClassSvn_client_commit_item3_t.klass, "moved_from_abspath", _wrap_svn_client_commit_item3_t_moved_from_abspath_get, -1);
rb_define_method(SwigClassSvn_client_commit_item3_t.klass, "dup", _wrap_svn_client_commit_item3_t_dup, -1);
SwigClassSvn_client_commit_item3_t.mark = 0;
SwigClassSvn_client_commit_item3_t.destroy = (void (*)(void *)) free_svn_client_commit_item3_t;
@@ -29608,6 +32269,7 @@ SWIGEXPORT void Init_client(void) {
SwigClassSvn_client_ctx_t.mark = 0;
SwigClassSvn_client_ctx_t.destroy = (void (*)(void *)) free_svn_client_ctx_t;
SwigClassSvn_client_ctx_t.trackObjects = 0;
+ rb_define_module_function(mClient, "svn_client_create_context2", _wrap_svn_client_create_context2, -1);
rb_define_const(mClient, "SVN_CLIENT_AUTH_USERNAME", SWIG_FromCharPtr("username"));
rb_define_const(mClient, "SVN_CLIENT_AUTH_PASSWORD", SWIG_FromCharPtr("password"));
rb_define_module_function(mClient, "svn_client_args_to_target_array2", _wrap_svn_client_args_to_target_array2, -1);
@@ -29622,6 +32284,7 @@ SWIGEXPORT void Init_client(void) {
rb_define_module_function(mClient, "svn_client_switch3", _wrap_svn_client_switch3, -1);
rb_define_module_function(mClient, "svn_client_switch2", _wrap_svn_client_switch2, -1);
rb_define_module_function(mClient, "svn_client_switch", _wrap_svn_client_switch, -1);
+ rb_define_module_function(mClient, "svn_client_add5", _wrap_svn_client_add5, -1);
rb_define_module_function(mClient, "svn_client_add4", _wrap_svn_client_add4, -1);
rb_define_module_function(mClient, "svn_client_add3", _wrap_svn_client_add3, -1);
rb_define_module_function(mClient, "svn_client_add2", _wrap_svn_client_add2, -1);
@@ -29634,10 +32297,12 @@ SWIGEXPORT void Init_client(void) {
rb_define_module_function(mClient, "svn_client_delete3", _wrap_svn_client_delete3, -1);
rb_define_module_function(mClient, "svn_client_delete2", _wrap_svn_client_delete2, -1);
rb_define_module_function(mClient, "svn_client_delete", _wrap_svn_client_delete, -1);
+ rb_define_module_function(mClient, "svn_client_import5", _wrap_svn_client_import5, -1);
rb_define_module_function(mClient, "svn_client_import4", _wrap_svn_client_import4, -1);
rb_define_module_function(mClient, "svn_client_import3", _wrap_svn_client_import3, -1);
rb_define_module_function(mClient, "svn_client_import2", _wrap_svn_client_import2, -1);
rb_define_module_function(mClient, "svn_client_import", _wrap_svn_client_import, -1);
+ rb_define_module_function(mClient, "svn_client_commit6", _wrap_svn_client_commit6, -1);
rb_define_module_function(mClient, "svn_client_commit5", _wrap_svn_client_commit5, -1);
rb_define_module_function(mClient, "svn_client_commit4", _wrap_svn_client_commit4, -1);
rb_define_module_function(mClient, "svn_client_commit3", _wrap_svn_client_commit3, -1);
@@ -29710,6 +32375,10 @@ SWIGEXPORT void Init_client(void) {
rb_define_method(SwigClassSvn_client_status_t.klass, "ood_changed_author", _wrap_svn_client_status_t_ood_changed_author_get, -1);
rb_define_method(SwigClassSvn_client_status_t.klass, "backwards_compatibility_baton=", _wrap_svn_client_status_t_backwards_compatibility_baton_set, -1);
rb_define_method(SwigClassSvn_client_status_t.klass, "backwards_compatibility_baton", _wrap_svn_client_status_t_backwards_compatibility_baton_get, -1);
+ rb_define_method(SwigClassSvn_client_status_t.klass, "moved_from_abspath=", _wrap_svn_client_status_t_moved_from_abspath_set, -1);
+ rb_define_method(SwigClassSvn_client_status_t.klass, "moved_from_abspath", _wrap_svn_client_status_t_moved_from_abspath_get, -1);
+ rb_define_method(SwigClassSvn_client_status_t.klass, "moved_to_abspath=", _wrap_svn_client_status_t_moved_to_abspath_set, -1);
+ rb_define_method(SwigClassSvn_client_status_t.klass, "moved_to_abspath", _wrap_svn_client_status_t_moved_to_abspath_get, -1);
SwigClassSvn_client_status_t.mark = 0;
SwigClassSvn_client_status_t.destroy = (void (*)(void *)) free_svn_client_status_t;
SwigClassSvn_client_status_t.trackObjects = 0;
@@ -29729,11 +32398,13 @@ SWIGEXPORT void Init_client(void) {
rb_define_module_function(mClient, "svn_client_blame3", _wrap_svn_client_blame3, -1);
rb_define_module_function(mClient, "svn_client_blame2", _wrap_svn_client_blame2, -1);
rb_define_module_function(mClient, "svn_client_blame", _wrap_svn_client_blame, -1);
+ rb_define_module_function(mClient, "svn_client_diff6", _wrap_svn_client_diff6, -1);
rb_define_module_function(mClient, "svn_client_diff5", _wrap_svn_client_diff5, -1);
rb_define_module_function(mClient, "svn_client_diff4", _wrap_svn_client_diff4, -1);
rb_define_module_function(mClient, "svn_client_diff3", _wrap_svn_client_diff3, -1);
rb_define_module_function(mClient, "svn_client_diff2", _wrap_svn_client_diff2, -1);
rb_define_module_function(mClient, "svn_client_diff", _wrap_svn_client_diff, -1);
+ rb_define_module_function(mClient, "svn_client_diff_peg6", _wrap_svn_client_diff_peg6, -1);
rb_define_module_function(mClient, "svn_client_diff_peg5", _wrap_svn_client_diff_peg5, -1);
rb_define_module_function(mClient, "svn_client_diff_peg4", _wrap_svn_client_diff_peg4, -1);
rb_define_module_function(mClient, "svn_client_diff_peg3", _wrap_svn_client_diff_peg3, -1);
@@ -29743,17 +32414,21 @@ SWIGEXPORT void Init_client(void) {
rb_define_module_function(mClient, "svn_client_diff_summarize", _wrap_svn_client_diff_summarize, -1);
rb_define_module_function(mClient, "svn_client_diff_summarize_peg2", _wrap_svn_client_diff_summarize_peg2, -1);
rb_define_module_function(mClient, "svn_client_diff_summarize_peg", _wrap_svn_client_diff_summarize_peg, -1);
+ rb_define_module_function(mClient, "svn_client_get_merging_summary", _wrap_svn_client_get_merging_summary, -1);
+ rb_define_module_function(mClient, "svn_client_merge5", _wrap_svn_client_merge5, -1);
rb_define_module_function(mClient, "svn_client_merge4", _wrap_svn_client_merge4, -1);
rb_define_module_function(mClient, "svn_client_merge3", _wrap_svn_client_merge3, -1);
rb_define_module_function(mClient, "svn_client_merge2", _wrap_svn_client_merge2, -1);
rb_define_module_function(mClient, "svn_client_merge", _wrap_svn_client_merge, -1);
rb_define_module_function(mClient, "svn_client_merge_reintegrate", _wrap_svn_client_merge_reintegrate, -1);
+ rb_define_module_function(mClient, "svn_client_merge_peg5", _wrap_svn_client_merge_peg5, -1);
rb_define_module_function(mClient, "svn_client_merge_peg4", _wrap_svn_client_merge_peg4, -1);
rb_define_module_function(mClient, "svn_client_merge_peg3", _wrap_svn_client_merge_peg3, -1);
rb_define_module_function(mClient, "svn_client_merge_peg2", _wrap_svn_client_merge_peg2, -1);
rb_define_module_function(mClient, "svn_client_merge_peg", _wrap_svn_client_merge_peg, -1);
rb_define_module_function(mClient, "svn_client_suggest_merge_sources", _wrap_svn_client_suggest_merge_sources, -1);
rb_define_module_function(mClient, "svn_client_mergeinfo_get_merged", _wrap_svn_client_mergeinfo_get_merged, -1);
+ rb_define_module_function(mClient, "svn_client_mergeinfo_log2", _wrap_svn_client_mergeinfo_log2, -1);
rb_define_module_function(mClient, "svn_client_mergeinfo_log", _wrap_svn_client_mergeinfo_log, -1);
rb_define_module_function(mClient, "svn_client_mergeinfo_log_merged", _wrap_svn_client_mergeinfo_log_merged, -1);
rb_define_module_function(mClient, "svn_client_mergeinfo_log_eligible", _wrap_svn_client_mergeinfo_log_eligible, -1);
@@ -29782,6 +32457,7 @@ SWIGEXPORT void Init_client(void) {
rb_define_module_function(mClient, "svn_client_copy3", _wrap_svn_client_copy3, -1);
rb_define_module_function(mClient, "svn_client_copy2", _wrap_svn_client_copy2, -1);
rb_define_module_function(mClient, "svn_client_copy", _wrap_svn_client_copy, -1);
+ rb_define_module_function(mClient, "svn_client_move7", _wrap_svn_client_move7, -1);
rb_define_module_function(mClient, "svn_client_move6", _wrap_svn_client_move6, -1);
rb_define_module_function(mClient, "svn_client_move5", _wrap_svn_client_move5, -1);
rb_define_module_function(mClient, "svn_client_move4", _wrap_svn_client_move4, -1);
@@ -29795,11 +32471,13 @@ SWIGEXPORT void Init_client(void) {
rb_define_module_function(mClient, "svn_client_propset", _wrap_svn_client_propset, -1);
rb_define_module_function(mClient, "svn_client_revprop_set2", _wrap_svn_client_revprop_set2, -1);
rb_define_module_function(mClient, "svn_client_revprop_set", _wrap_svn_client_revprop_set, -1);
+ rb_define_module_function(mClient, "svn_client_propget5", _wrap_svn_client_propget5, -1);
rb_define_module_function(mClient, "svn_client_propget4", _wrap_svn_client_propget4, -1);
rb_define_module_function(mClient, "svn_client_propget3", _wrap_svn_client_propget3, -1);
rb_define_module_function(mClient, "svn_client_propget2", _wrap_svn_client_propget2, -1);
rb_define_module_function(mClient, "svn_client_propget", _wrap_svn_client_propget, -1);
rb_define_module_function(mClient, "svn_client_revprop_get", _wrap_svn_client_revprop_get, -1);
+ rb_define_module_function(mClient, "svn_client_proplist4", _wrap_svn_client_proplist4, -1);
rb_define_module_function(mClient, "svn_client_proplist3", _wrap_svn_client_proplist3, -1);
rb_define_module_function(mClient, "svn_client_proplist2", _wrap_svn_client_proplist2, -1);
rb_define_module_function(mClient, "svn_client_proplist", _wrap_svn_client_proplist, -1);
@@ -29809,6 +32487,7 @@ SWIGEXPORT void Init_client(void) {
rb_define_module_function(mClient, "svn_client_export3", _wrap_svn_client_export3, -1);
rb_define_module_function(mClient, "svn_client_export2", _wrap_svn_client_export2, -1);
rb_define_module_function(mClient, "svn_client_export", _wrap_svn_client_export, -1);
+ rb_define_module_function(mClient, "svn_client_list3", _wrap_svn_client_list3, -1);
rb_define_module_function(mClient, "svn_client_list2", _wrap_svn_client_list2, -1);
rb_define_module_function(mClient, "svn_client_list", _wrap_svn_client_list, -1);
rb_define_module_function(mClient, "svn_client_ls3", _wrap_svn_client_ls3, -1);
@@ -29923,11 +32602,14 @@ SWIGEXPORT void Init_client(void) {
rb_define_module_function(mClient, "svn_client_patch", _wrap_svn_client_patch, -1);
rb_define_module_function(mClient, "svn_client_url_from_path2", _wrap_svn_client_url_from_path2, -1);
rb_define_module_function(mClient, "svn_client_url_from_path", _wrap_svn_client_url_from_path, -1);
+ rb_define_module_function(mClient, "svn_client_get_repos_root", _wrap_svn_client_get_repos_root, -1);
rb_define_module_function(mClient, "svn_client_root_url_from_path", _wrap_svn_client_root_url_from_path, -1);
rb_define_module_function(mClient, "svn_client_uuid_from_url", _wrap_svn_client_uuid_from_url, -1);
rb_define_module_function(mClient, "svn_client_uuid_from_path2", _wrap_svn_client_uuid_from_path2, -1);
rb_define_module_function(mClient, "svn_client_uuid_from_path", _wrap_svn_client_uuid_from_path, -1);
+ rb_define_module_function(mClient, "svn_client_open_ra_session2", _wrap_svn_client_open_ra_session2, -1);
rb_define_module_function(mClient, "svn_client_open_ra_session", _wrap_svn_client_open_ra_session, -1);
+ rb_define_module_function(mClient, "svn_proplist_invoke_receiver2", _wrap_svn_proplist_invoke_receiver2, -1);
rb_define_module_function(mClient, "svn_proplist_invoke_receiver", _wrap_svn_proplist_invoke_receiver, -1);
rb_define_module_function(mClient, "svn_client_invoke_get_commit_log3", _wrap_svn_client_invoke_get_commit_log3, -1);
rb_define_module_function(mClient, "svn_client_invoke_get_commit_log2", _wrap_svn_client_invoke_get_commit_log2, -1);
@@ -29936,7 +32618,9 @@ SWIGEXPORT void Init_client(void) {
rb_define_module_function(mClient, "svn_client_invoke_blame_receiver2", _wrap_svn_client_invoke_blame_receiver2, -1);
rb_define_module_function(mClient, "svn_client_invoke_blame_receiver", _wrap_svn_client_invoke_blame_receiver, -1);
rb_define_module_function(mClient, "svn_client_invoke_diff_summarize_func", _wrap_svn_client_invoke_diff_summarize_func, -1);
+ rb_define_module_function(mClient, "svn_client_invoke_import_filter_func", _wrap_svn_client_invoke_import_filter_func, -1);
rb_define_module_function(mClient, "svn_client_invoke_status_func", _wrap_svn_client_invoke_status_func, -1);
+ rb_define_module_function(mClient, "svn_client_invoke_list_func2", _wrap_svn_client_invoke_list_func2, -1);
rb_define_module_function(mClient, "svn_client_invoke_list_func", _wrap_svn_client_invoke_list_func, -1);
rb_define_module_function(mClient, "svn_info_invoke_receiver", _wrap_svn_info_invoke_receiver, -1);
rb_define_module_function(mClient, "svn_client_invoke_info_receiver2", _wrap_svn_client_invoke_info_receiver2, -1);
diff --git a/subversion/bindings/swig/ruby/svn_delta.c b/subversion/bindings/swig/ruby/svn_delta.c
index b317b44..ba4a469 100644
--- a/subversion/bindings/swig/ruby/svn_delta.c
+++ b/subversion/bindings/swig/ruby/svn_delta.c
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -1374,7 +1374,7 @@ SWIG_Ruby_AppendOutput(VALUE target, VALUE o) {
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Ruby_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Ruby_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Ruby_SetModule(pointer)
@@ -1528,7 +1528,7 @@ SWIG_Ruby_NewPointerObj(void *ptr, swig_type_info *type, int flags)
downcast methods. */
if (obj != Qnil) {
VALUE value = rb_iv_get(obj, "@__swigtype__");
- char* type_name = RSTRING_PTR(value);
+ const char* type_name = RSTRING_PTR(value);
if (strcmp(type->name, type_name) == 0) {
return obj;
@@ -1710,7 +1710,7 @@ SWIG_Ruby_ConvertPacked(VALUE obj, void *ptr, int sz, swig_type_info *ty) {
}
SWIGRUNTIME swig_module_info *
-SWIG_Ruby_GetModule(void)
+SWIG_Ruby_GetModule(void *SWIGUNUSEDPARM(clientdata))
{
VALUE pointer;
swig_module_info *ret = 0;
@@ -1836,59 +1836,65 @@ int SWIG_Ruby_arity( VALUE proc, int minimal )
#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[41]
#define SWIGTYPE_p_svn_auth_provider_t swig_types[42]
#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[43]
-#define SWIGTYPE_p_svn_checksum_kind_t swig_types[44]
-#define SWIGTYPE_p_svn_commit_info_t swig_types[45]
-#define SWIGTYPE_p_svn_config_t swig_types[46]
-#define SWIGTYPE_p_svn_delta_editor_t swig_types[47]
-#define SWIGTYPE_p_svn_depth_t swig_types[48]
-#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[49]
-#define SWIGTYPE_p_svn_diff_datasource_e swig_types[50]
-#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[51]
-#define SWIGTYPE_p_svn_diff_file_options_t swig_types[52]
-#define SWIGTYPE_p_svn_diff_fns2_t swig_types[53]
-#define SWIGTYPE_p_svn_diff_fns_t swig_types[54]
-#define SWIGTYPE_p_svn_diff_hunk_t swig_types[55]
-#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[56]
-#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[57]
-#define SWIGTYPE_p_svn_diff_t swig_types[58]
-#define SWIGTYPE_p_svn_dirent_t swig_types[59]
-#define SWIGTYPE_p_svn_errno_t swig_types[60]
-#define SWIGTYPE_p_svn_error_t swig_types[61]
-#define SWIGTYPE_p_svn_io_dirent2_t swig_types[62]
-#define SWIGTYPE_p_svn_io_dirent_t swig_types[63]
-#define SWIGTYPE_p_svn_io_file_del_t swig_types[64]
-#define SWIGTYPE_p_svn_location_segment_t swig_types[65]
-#define SWIGTYPE_p_svn_lock_t swig_types[66]
-#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[67]
-#define SWIGTYPE_p_svn_log_changed_path_t swig_types[68]
-#define SWIGTYPE_p_svn_log_entry_t swig_types[69]
-#define SWIGTYPE_p_svn_merge_range_t swig_types[70]
-#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[71]
-#define SWIGTYPE_p_svn_node_kind_t swig_types[72]
-#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[73]
-#define SWIGTYPE_p_svn_opt_revision_t swig_types[74]
-#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[75]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[76]
-#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[77]
-#define SWIGTYPE_p_svn_patch_file_t swig_types[78]
-#define SWIGTYPE_p_svn_patch_t swig_types[79]
-#define SWIGTYPE_p_svn_prop_kind swig_types[80]
-#define SWIGTYPE_p_svn_prop_patch_t swig_types[81]
-#define SWIGTYPE_p_svn_stream_mark_t swig_types[82]
-#define SWIGTYPE_p_svn_stream_t swig_types[83]
-#define SWIGTYPE_p_svn_string_t swig_types[84]
-#define SWIGTYPE_p_svn_stringbuf_t swig_types[85]
-#define SWIGTYPE_p_svn_tristate_t swig_types[86]
-#define SWIGTYPE_p_svn_txdelta_op_t swig_types[87]
-#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[88]
-#define SWIGTYPE_p_svn_txdelta_window_t swig_types[89]
-#define SWIGTYPE_p_svn_version_checklist_t swig_types[90]
-#define SWIGTYPE_p_svn_version_t swig_types[91]
-#define SWIGTYPE_p_unsigned_char swig_types[92]
-#define SWIGTYPE_p_unsigned_long swig_types[93]
-#define SWIGTYPE_p_void swig_types[94]
-static swig_type_info *swig_types[96];
-static swig_module_info swig_module = {swig_types, 95, 0, 0, 0, 0};
+#define SWIGTYPE_p_svn_checksum_ctx_t swig_types[44]
+#define SWIGTYPE_p_svn_checksum_kind_t swig_types[45]
+#define SWIGTYPE_p_svn_checksum_t swig_types[46]
+#define SWIGTYPE_p_svn_commit_info_t swig_types[47]
+#define SWIGTYPE_p_svn_config_t swig_types[48]
+#define SWIGTYPE_p_svn_delta_editor_t swig_types[49]
+#define SWIGTYPE_p_svn_depth_t swig_types[50]
+#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[51]
+#define SWIGTYPE_p_svn_diff_datasource_e swig_types[52]
+#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[53]
+#define SWIGTYPE_p_svn_diff_file_options_t swig_types[54]
+#define SWIGTYPE_p_svn_diff_fns2_t swig_types[55]
+#define SWIGTYPE_p_svn_diff_fns_t swig_types[56]
+#define SWIGTYPE_p_svn_diff_hunk_t swig_types[57]
+#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[58]
+#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[59]
+#define SWIGTYPE_p_svn_diff_t swig_types[60]
+#define SWIGTYPE_p_svn_dirent_t swig_types[61]
+#define SWIGTYPE_p_svn_errno_t swig_types[62]
+#define SWIGTYPE_p_svn_error_t swig_types[63]
+#define SWIGTYPE_p_svn_io_dirent2_t swig_types[64]
+#define SWIGTYPE_p_svn_io_dirent_t swig_types[65]
+#define SWIGTYPE_p_svn_io_file_del_t swig_types[66]
+#define SWIGTYPE_p_svn_location_segment_t swig_types[67]
+#define SWIGTYPE_p_svn_lock_t swig_types[68]
+#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[69]
+#define SWIGTYPE_p_svn_log_changed_path_t swig_types[70]
+#define SWIGTYPE_p_svn_log_entry_t swig_types[71]
+#define SWIGTYPE_p_svn_merge_range_t swig_types[72]
+#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[73]
+#define SWIGTYPE_p_svn_node_kind_t swig_types[74]
+#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[75]
+#define SWIGTYPE_p_svn_opt_revision_t swig_types[76]
+#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[77]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[78]
+#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[79]
+#define SWIGTYPE_p_svn_patch_file_t swig_types[80]
+#define SWIGTYPE_p_svn_patch_t swig_types[81]
+#define SWIGTYPE_p_svn_prop_inherited_item_t swig_types[82]
+#define SWIGTYPE_p_svn_prop_kind swig_types[83]
+#define SWIGTYPE_p_svn_prop_patch_t swig_types[84]
+#define SWIGTYPE_p_svn_stream_mark_t swig_types[85]
+#define SWIGTYPE_p_svn_stream_t swig_types[86]
+#define SWIGTYPE_p_svn_string_t swig_types[87]
+#define SWIGTYPE_p_svn_stringbuf_t swig_types[88]
+#define SWIGTYPE_p_svn_tristate_t swig_types[89]
+#define SWIGTYPE_p_svn_txdelta_op_t swig_types[90]
+#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[91]
+#define SWIGTYPE_p_svn_txdelta_window_t swig_types[92]
+#define SWIGTYPE_p_svn_version_checklist_t swig_types[93]
+#define SWIGTYPE_p_svn_version_ext_linked_lib_t swig_types[94]
+#define SWIGTYPE_p_svn_version_ext_loaded_lib_t swig_types[95]
+#define SWIGTYPE_p_svn_version_extended_t swig_types[96]
+#define SWIGTYPE_p_svn_version_t swig_types[97]
+#define SWIGTYPE_p_unsigned_char swig_types[98]
+#define SWIGTYPE_p_unsigned_long swig_types[99]
+#define SWIGTYPE_p_void swig_types[100]
+static swig_type_info *swig_types[102];
+static swig_module_info swig_module = {swig_types, 101, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@@ -1903,7 +1909,7 @@ static VALUE mDelta;
#define SWIG_RUBY_THREAD_END_BLOCK
-#define SWIGVERSION 0x020004
+#define SWIGVERSION 0x020009
#define SWIG_VERSION SWIGVERSION
@@ -1993,7 +1999,7 @@ SWIG_ruby_failed(void)
}
-/*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
+/*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
SWIGINTERN VALUE SWIG_AUX_NUM2LONG(VALUE *args)
{
VALUE obj = args[0];
@@ -2038,7 +2044,7 @@ SWIG_AsVal_int (VALUE obj, int *val)
}
-/*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
+/*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
SWIGINTERN VALUE SWIG_AUX_NUM2ULONG(VALUE *args)
{
VALUE obj = args[0];
@@ -2091,11 +2097,7 @@ SWIGINTERN int
SWIG_AsCharPtrAndSize(VALUE obj, char** cptr, size_t* psize, int *alloc)
{
if (TYPE(obj) == T_STRING) {
- #if defined(StringValuePtr)
char *cstr = StringValuePtr(obj);
- #else
- char *cstr = STR2CSTR(obj);
- #endif
size_t size = RSTRING_LEN(obj) + 1;
if (cptr) {
if (alloc) {
@@ -2454,11 +2456,11 @@ fail:
}
-swig_class SwigClassSvn_txdelta_op_t;
+static swig_class SwigClassSvn_txdelta_op_t;
SWIGINTERN VALUE
_wrap_svn_txdelta_op_t_action_code_set(int argc, VALUE *argv, VALUE self) {
- svn_txdelta_op_t *arg1 = (svn_txdelta_op_t *) 0 ;
+ struct svn_txdelta_op_t *arg1 = (struct svn_txdelta_op_t *) 0 ;
enum svn_delta_action arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2470,9 +2472,9 @@ _wrap_svn_txdelta_op_t_action_code_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_txdelta_op_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_txdelta_op_t *","action_code", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_txdelta_op_t *","action_code", 1, self ));
}
- arg1 = (svn_txdelta_op_t *)(argp1);
+ arg1 = (struct svn_txdelta_op_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "enum svn_delta_action","action_code", 2, argv[0] ));
@@ -2487,7 +2489,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_txdelta_op_t_action_code_get(int argc, VALUE *argv, VALUE self) {
- svn_txdelta_op_t *arg1 = (svn_txdelta_op_t *) 0 ;
+ struct svn_txdelta_op_t *arg1 = (struct svn_txdelta_op_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
enum svn_delta_action result;
@@ -2498,9 +2500,9 @@ _wrap_svn_txdelta_op_t_action_code_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_txdelta_op_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_txdelta_op_t *","action_code", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_txdelta_op_t *","action_code", 1, self ));
}
- arg1 = (svn_txdelta_op_t *)(argp1);
+ arg1 = (struct svn_txdelta_op_t *)(argp1);
result = (enum svn_delta_action) ((arg1)->action_code);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -2511,7 +2513,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_txdelta_op_t_offset_set(int argc, VALUE *argv, VALUE self) {
- svn_txdelta_op_t *arg1 = (svn_txdelta_op_t *) 0 ;
+ struct svn_txdelta_op_t *arg1 = (struct svn_txdelta_op_t *) 0 ;
apr_size_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2523,9 +2525,9 @@ _wrap_svn_txdelta_op_t_offset_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_txdelta_op_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_txdelta_op_t *","offset", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_txdelta_op_t *","offset", 1, self ));
}
- arg1 = (svn_txdelta_op_t *)(argp1);
+ arg1 = (struct svn_txdelta_op_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "apr_size_t","offset", 2, argv[0] ));
@@ -2540,7 +2542,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_txdelta_op_t_offset_get(int argc, VALUE *argv, VALUE self) {
- svn_txdelta_op_t *arg1 = (svn_txdelta_op_t *) 0 ;
+ struct svn_txdelta_op_t *arg1 = (struct svn_txdelta_op_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_size_t result;
@@ -2551,9 +2553,9 @@ _wrap_svn_txdelta_op_t_offset_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_txdelta_op_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_txdelta_op_t *","offset", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_txdelta_op_t *","offset", 1, self ));
}
- arg1 = (svn_txdelta_op_t *)(argp1);
+ arg1 = (struct svn_txdelta_op_t *)(argp1);
result = ((arg1)->offset);
vresult = SWIG_From_unsigned_SS_long((unsigned long)(result));
return vresult;
@@ -2564,7 +2566,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_txdelta_op_t_length_set(int argc, VALUE *argv, VALUE self) {
- svn_txdelta_op_t *arg1 = (svn_txdelta_op_t *) 0 ;
+ struct svn_txdelta_op_t *arg1 = (struct svn_txdelta_op_t *) 0 ;
apr_size_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2576,9 +2578,9 @@ _wrap_svn_txdelta_op_t_length_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_txdelta_op_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_txdelta_op_t *","length", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_txdelta_op_t *","length", 1, self ));
}
- arg1 = (svn_txdelta_op_t *)(argp1);
+ arg1 = (struct svn_txdelta_op_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "apr_size_t","length", 2, argv[0] ));
@@ -2593,7 +2595,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_txdelta_op_t_length_get(int argc, VALUE *argv, VALUE self) {
- svn_txdelta_op_t *arg1 = (svn_txdelta_op_t *) 0 ;
+ struct svn_txdelta_op_t *arg1 = (struct svn_txdelta_op_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_size_t result;
@@ -2604,9 +2606,9 @@ _wrap_svn_txdelta_op_t_length_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_txdelta_op_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_txdelta_op_t *","length", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_txdelta_op_t *","length", 1, self ));
}
- arg1 = (svn_txdelta_op_t *)(argp1);
+ arg1 = (struct svn_txdelta_op_t *)(argp1);
result = ((arg1)->length);
vresult = SWIG_From_unsigned_SS_long((unsigned long)(result));
return vresult;
@@ -2634,13 +2636,13 @@ _wrap_svn_txdelta_op_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_txdelta_op_t(int argc, VALUE *argv, VALUE self) {
- svn_txdelta_op_t *result = 0 ;
+ struct svn_txdelta_op_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_txdelta_op_t *)calloc(1, sizeof(svn_txdelta_op_t));
+ result = (struct svn_txdelta_op_t *)calloc(1, sizeof(struct svn_txdelta_op_t));
DATA_PTR(self) = result;
@@ -2653,15 +2655,15 @@ fail:
SWIGINTERN void
-free_svn_txdelta_op_t(svn_txdelta_op_t *arg1) {
+free_svn_txdelta_op_t(struct svn_txdelta_op_t *arg1) {
free((char *) arg1);
}
-swig_class SwigClassSvn_txdelta_window_t;
+static swig_class SwigClassSvn_txdelta_window_t;
SWIGINTERN VALUE
_wrap_svn_txdelta_window_t_sview_offset_set(int argc, VALUE *argv, VALUE self) {
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
svn_filesize_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2671,9 +2673,9 @@ _wrap_svn_txdelta_window_t_sview_offset_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_txdelta_window_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_txdelta_window_t *","sview_offset", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_txdelta_window_t *","sview_offset", 1, self ));
}
- arg1 = (svn_txdelta_window_t *)(argp1);
+ arg1 = (struct svn_txdelta_window_t *)(argp1);
{
arg2 = (svn_filesize_t)NUM2LL(argv[0]);
}
@@ -2686,7 +2688,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_txdelta_window_t_sview_offset_get(int argc, VALUE *argv, VALUE self) {
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_filesize_t result;
@@ -2697,9 +2699,9 @@ _wrap_svn_txdelta_window_t_sview_offset_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_txdelta_window_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_txdelta_window_t *","sview_offset", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_txdelta_window_t *","sview_offset", 1, self ));
}
- arg1 = (svn_txdelta_window_t *)(argp1);
+ arg1 = (struct svn_txdelta_window_t *)(argp1);
result = ((arg1)->sview_offset);
{
vresult = LL2NUM((svn_filesize_t)(result));
@@ -2712,7 +2714,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_txdelta_window_t_sview_len_set(int argc, VALUE *argv, VALUE self) {
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
apr_size_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2724,9 +2726,9 @@ _wrap_svn_txdelta_window_t_sview_len_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_txdelta_window_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_txdelta_window_t *","sview_len", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_txdelta_window_t *","sview_len", 1, self ));
}
- arg1 = (svn_txdelta_window_t *)(argp1);
+ arg1 = (struct svn_txdelta_window_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "apr_size_t","sview_len", 2, argv[0] ));
@@ -2741,7 +2743,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_txdelta_window_t_sview_len_get(int argc, VALUE *argv, VALUE self) {
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_size_t result;
@@ -2752,9 +2754,9 @@ _wrap_svn_txdelta_window_t_sview_len_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_txdelta_window_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_txdelta_window_t *","sview_len", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_txdelta_window_t *","sview_len", 1, self ));
}
- arg1 = (svn_txdelta_window_t *)(argp1);
+ arg1 = (struct svn_txdelta_window_t *)(argp1);
result = ((arg1)->sview_len);
vresult = SWIG_From_unsigned_SS_long((unsigned long)(result));
return vresult;
@@ -2765,7 +2767,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_txdelta_window_t_tview_len_set(int argc, VALUE *argv, VALUE self) {
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
apr_size_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2777,9 +2779,9 @@ _wrap_svn_txdelta_window_t_tview_len_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_txdelta_window_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_txdelta_window_t *","tview_len", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_txdelta_window_t *","tview_len", 1, self ));
}
- arg1 = (svn_txdelta_window_t *)(argp1);
+ arg1 = (struct svn_txdelta_window_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "apr_size_t","tview_len", 2, argv[0] ));
@@ -2794,7 +2796,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_txdelta_window_t_tview_len_get(int argc, VALUE *argv, VALUE self) {
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_size_t result;
@@ -2805,9 +2807,9 @@ _wrap_svn_txdelta_window_t_tview_len_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_txdelta_window_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_txdelta_window_t *","tview_len", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_txdelta_window_t *","tview_len", 1, self ));
}
- arg1 = (svn_txdelta_window_t *)(argp1);
+ arg1 = (struct svn_txdelta_window_t *)(argp1);
result = ((arg1)->tview_len);
vresult = SWIG_From_unsigned_SS_long((unsigned long)(result));
return vresult;
@@ -2818,7 +2820,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_txdelta_window_t_num_ops_set(int argc, VALUE *argv, VALUE self) {
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
int arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2830,9 +2832,9 @@ _wrap_svn_txdelta_window_t_num_ops_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_txdelta_window_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_txdelta_window_t *","num_ops", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_txdelta_window_t *","num_ops", 1, self ));
}
- arg1 = (svn_txdelta_window_t *)(argp1);
+ arg1 = (struct svn_txdelta_window_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "int","num_ops", 2, argv[0] ));
@@ -2847,7 +2849,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_txdelta_window_t_num_ops_get(int argc, VALUE *argv, VALUE self) {
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int result;
@@ -2858,9 +2860,9 @@ _wrap_svn_txdelta_window_t_num_ops_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_txdelta_window_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_txdelta_window_t *","num_ops", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_txdelta_window_t *","num_ops", 1, self ));
}
- arg1 = (svn_txdelta_window_t *)(argp1);
+ arg1 = (struct svn_txdelta_window_t *)(argp1);
result = (int) ((arg1)->num_ops);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -2871,7 +2873,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_txdelta_window_t_src_ops_set(int argc, VALUE *argv, VALUE self) {
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
int arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2883,9 +2885,9 @@ _wrap_svn_txdelta_window_t_src_ops_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_txdelta_window_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_txdelta_window_t *","src_ops", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_txdelta_window_t *","src_ops", 1, self ));
}
- arg1 = (svn_txdelta_window_t *)(argp1);
+ arg1 = (struct svn_txdelta_window_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "int","src_ops", 2, argv[0] ));
@@ -2900,7 +2902,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_txdelta_window_t_src_ops_get(int argc, VALUE *argv, VALUE self) {
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int result;
@@ -2911,9 +2913,9 @@ _wrap_svn_txdelta_window_t_src_ops_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_txdelta_window_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_txdelta_window_t *","src_ops", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_txdelta_window_t *","src_ops", 1, self ));
}
- arg1 = (svn_txdelta_window_t *)(argp1);
+ arg1 = (struct svn_txdelta_window_t *)(argp1);
result = (int) ((arg1)->src_ops);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -2924,7 +2926,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_txdelta_window_t_new_data_get(int argc, VALUE *argv, VALUE self) {
- svn_txdelta_window_t *arg1 = (svn_txdelta_window_t *) 0 ;
+ struct svn_txdelta_window_t *arg1 = (struct svn_txdelta_window_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_string_t *result = 0 ;
@@ -2935,9 +2937,9 @@ _wrap_svn_txdelta_window_t_new_data_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_txdelta_window_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_txdelta_window_t *","new_data", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_txdelta_window_t *","new_data", 1, self ));
}
- arg1 = (svn_txdelta_window_t *)(argp1);
+ arg1 = (struct svn_txdelta_window_t *)(argp1);
result = (svn_string_t *) ((arg1)->new_data);
{
if (result) {
@@ -2971,13 +2973,13 @@ _wrap_svn_txdelta_window_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_txdelta_window_t(int argc, VALUE *argv, VALUE self) {
- svn_txdelta_window_t *result = 0 ;
+ struct svn_txdelta_window_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_txdelta_window_t *)calloc(1, sizeof(svn_txdelta_window_t));
+ result = (struct svn_txdelta_window_t *)calloc(1, sizeof(struct svn_txdelta_window_t));
DATA_PTR(self) = result;
@@ -2990,7 +2992,7 @@ fail:
SWIGINTERN void
-free_svn_txdelta_window_t(svn_txdelta_window_t *arg1) {
+free_svn_txdelta_window_t(struct svn_txdelta_window_t *arg1) {
free((char *) arg1);
}
@@ -3183,8 +3185,8 @@ _wrap_svn_txdelta_run(int argc, VALUE *argv, VALUE self) {
apr_pool_t *arg10 = (apr_pool_t *) 0 ;
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
- void *argp5 ;
- int res5 = 0 ;
+ int val5 ;
+ int ecode5 = 0 ;
svn_checksum_t *temp6 ;
svn_error_t *result = 0 ;
VALUE vresult = Qnil;
@@ -3222,17 +3224,11 @@ _wrap_svn_txdelta_run(int argc, VALUE *argv, VALUE self) {
arg4 = (void *)svn_swig_rb_make_baton(argv[2], _global_svn_swig_rb_pool);
}
}
- {
- res5 = SWIG_ConvertPtr(argv[3], &argp5, SWIGTYPE_p_svn_checksum_kind_t, 0 );
- if (!SWIG_IsOK(res5)) {
- SWIG_exception_fail(SWIG_ArgError(res5), Ruby_Format_TypeError( "", "svn_checksum_kind_t","svn_txdelta_run", 5, argv[3] ));
- }
- if (!argp5) {
- SWIG_exception_fail(SWIG_ValueError, Ruby_Format_TypeError("invalid null reference ", "svn_checksum_kind_t","svn_txdelta_run", 5, argv[3]));
- } else {
- arg5 = *((svn_checksum_kind_t *)(argp5));
- }
- }
+ ecode5 = SWIG_AsVal_int(argv[3], &val5);
+ if (!SWIG_IsOK(ecode5)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode5), Ruby_Format_TypeError( "", "svn_checksum_kind_t","svn_txdelta_run", 5, argv[3] ));
+ }
+ arg5 = (svn_checksum_kind_t)(val5);
{
arg7 = svn_swig_rb_cancel_func;
arg8 = (void *)svn_swig_rb_make_baton(argv[4], _global_svn_swig_rb_pool);
@@ -3466,6 +3462,66 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_txdelta2(int argc, VALUE *argv, VALUE self) {
+ svn_txdelta_stream_t **arg1 = (svn_txdelta_stream_t **) 0 ;
+ svn_stream_t *arg2 = (svn_stream_t *) 0 ;
+ svn_stream_t *arg3 = (svn_stream_t *) 0 ;
+ svn_boolean_t arg4 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_txdelta_stream_t *temp1 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg5);
+ _global_pool = arg5;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ if ((argc < 3) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
+ }
+ {
+ arg2 = svn_swig_rb_make_stream(argv[0]);
+ }
+ {
+ arg3 = svn_swig_rb_make_stream(argv[1]);
+ }
+ arg4 = RTEST(argv[2]);
+ if (argc > 3) {
+
+ }
+ {
+ svn_txdelta2(arg1,arg2,arg3,arg4,arg5);
+
+
+
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_txdelta_stream_t, 0));
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_txdelta(int argc, VALUE *argv, VALUE self) {
svn_txdelta_stream_t **arg1 = (svn_txdelta_stream_t **) 0 ;
svn_stream_t *arg2 = (svn_stream_t *) 0 ;
@@ -3823,6 +3879,90 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_txdelta_send_contents(int argc, VALUE *argv, VALUE self) {
+ unsigned char *arg1 = (unsigned char *) 0 ;
+ apr_size_t arg2 ;
+ svn_txdelta_window_handler_t arg3 = (svn_txdelta_window_handler_t) 0 ;
+ void *arg4 = (void *) 0 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ unsigned long val2 ;
+ int ecode2 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg5);
+ _global_pool = arg5;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 3) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_unsigned_char, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "unsigned char const *","svn_txdelta_send_contents", 1, argv[0] ));
+ }
+ arg1 = (unsigned char *)(argp1);
+ ecode2 = SWIG_AsVal_unsigned_SS_long(argv[1], &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "apr_size_t","svn_txdelta_send_contents", 2, argv[1] ));
+ }
+ arg2 = (apr_size_t)(val2);
+ {
+ if (RTEST(rb_obj_is_kind_of(argv[2],
+ svn_swig_rb_svn_delta_text_delta_window_handler()))) {
+ arg3 = svn_swig_rb_to_swig_type(argv[2],
+ "svn_txdelta_window_handler_t",
+ _global_pool);
+ arg4 = svn_swig_rb_to_swig_type(rb_funcall(argv[2], rb_intern("baton"), 0),
+ "void *", _global_pool);
+ } else {
+ arg3 = svn_swig_rb_txdelta_window_handler;
+ arg4 = (void *)svn_swig_rb_make_baton(argv[2], _global_svn_swig_rb_pool);
+ }
+ }
+ if (argc > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_txdelta_send_contents((unsigned char const *)arg1,arg2,arg3,arg4,arg5);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_txdelta_apply(int argc, VALUE *argv, VALUE self) {
svn_stream_t *arg1 = (svn_stream_t *) 0 ;
svn_stream_t *arg2 = (svn_stream_t *) 0 ;
@@ -4303,11 +4443,11 @@ fail:
}
-swig_class SwigClassSvn_delta_editor_t;
+static swig_class SwigClassSvn_delta_editor_t;
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_set_target_revision_set(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_revnum_t,apr_pool_t *) = (svn_error_t *(*)(void *,svn_revnum_t,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4317,9 +4457,9 @@ _wrap_svn_delta_editor_t_set_target_revision_set(int argc, VALUE *argv, VALUE se
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","set_target_revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","set_target_revision", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_svn_revnum_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4335,7 +4475,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_set_target_revision_get(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,svn_revnum_t,apr_pool_t *) = 0 ;
@@ -4346,9 +4486,9 @@ _wrap_svn_delta_editor_t_set_target_revision_get(int argc, VALUE *argv, VALUE se
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","set_target_revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","set_target_revision", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_revnum_t,apr_pool_t *)) ((arg1)->set_target_revision);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_svn_revnum_t_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -4359,7 +4499,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_open_root_set(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_revnum_t,apr_pool_t *,void **) = (svn_error_t *(*)(void *,svn_revnum_t,apr_pool_t *,void **)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4369,9 +4509,9 @@ _wrap_svn_delta_editor_t_open_root_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","open_root", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","open_root", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_svn_revnum_t_p_apr_pool_t_p_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4387,7 +4527,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_open_root_get(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,svn_revnum_t,apr_pool_t *,void **) = 0 ;
@@ -4398,9 +4538,9 @@ _wrap_svn_delta_editor_t_open_root_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","open_root", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","open_root", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_revnum_t,apr_pool_t *,void **)) ((arg1)->open_root);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_svn_revnum_t_p_apr_pool_t_p_p_void__p_svn_error_t);
return vresult;
@@ -4411,7 +4551,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_delete_entry_set(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(char const *,svn_revnum_t,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,svn_revnum_t,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4421,9 +4561,9 @@ _wrap_svn_delta_editor_t_delete_entry_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","delete_entry", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","delete_entry", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_svn_revnum_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4439,7 +4579,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_delete_entry_get(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(char const *,svn_revnum_t,void *,apr_pool_t *) = 0 ;
@@ -4450,9 +4590,9 @@ _wrap_svn_delta_editor_t_delete_entry_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","delete_entry", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","delete_entry", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(char const *,svn_revnum_t,void *,apr_pool_t *)) ((arg1)->delete_entry);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_svn_revnum_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -4463,7 +4603,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_add_directory_set(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(char const *,void *,char const *,svn_revnum_t,apr_pool_t *,void **) = (svn_error_t *(*)(char const *,void *,char const *,svn_revnum_t,apr_pool_t *,void **)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4473,9 +4613,9 @@ _wrap_svn_delta_editor_t_add_directory_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","add_directory", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","add_directory", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_p_void_p_q_const__char_svn_revnum_t_p_apr_pool_t_p_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4491,7 +4631,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_add_directory_get(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(char const *,void *,char const *,svn_revnum_t,apr_pool_t *,void **) = 0 ;
@@ -4502,9 +4642,9 @@ _wrap_svn_delta_editor_t_add_directory_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","add_directory", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","add_directory", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(char const *,void *,char const *,svn_revnum_t,apr_pool_t *,void **)) ((arg1)->add_directory);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_p_void_p_q_const__char_svn_revnum_t_p_apr_pool_t_p_p_void__p_svn_error_t);
return vresult;
@@ -4515,7 +4655,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_open_directory_set(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(char const *,void *,svn_revnum_t,apr_pool_t *,void **) = (svn_error_t *(*)(char const *,void *,svn_revnum_t,apr_pool_t *,void **)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4525,9 +4665,9 @@ _wrap_svn_delta_editor_t_open_directory_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","open_directory", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","open_directory", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_p_void_svn_revnum_t_p_apr_pool_t_p_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4543,7 +4683,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_open_directory_get(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(char const *,void *,svn_revnum_t,apr_pool_t *,void **) = 0 ;
@@ -4554,9 +4694,9 @@ _wrap_svn_delta_editor_t_open_directory_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","open_directory", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","open_directory", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(char const *,void *,svn_revnum_t,apr_pool_t *,void **)) ((arg1)->open_directory);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_p_void_svn_revnum_t_p_apr_pool_t_p_p_void__p_svn_error_t);
return vresult;
@@ -4567,7 +4707,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_change_dir_prop_set(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_string_t const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_string_t const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4577,9 +4717,9 @@ _wrap_svn_delta_editor_t_change_dir_prop_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","change_dir_prop", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","change_dir_prop", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4595,7 +4735,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_change_dir_prop_get(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,char const *,svn_string_t const *,apr_pool_t *) = 0 ;
@@ -4606,9 +4746,9 @@ _wrap_svn_delta_editor_t_change_dir_prop_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","change_dir_prop", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","change_dir_prop", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,svn_string_t const *,apr_pool_t *)) ((arg1)->change_dir_prop);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -4619,7 +4759,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_close_directory_set(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4629,9 +4769,9 @@ _wrap_svn_delta_editor_t_close_directory_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","close_directory", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","close_directory", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4647,7 +4787,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_close_directory_get(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,apr_pool_t *) = 0 ;
@@ -4658,9 +4798,9 @@ _wrap_svn_delta_editor_t_close_directory_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","close_directory", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","close_directory", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_pool_t *)) ((arg1)->close_directory);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -4671,7 +4811,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_absent_directory_set(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(char const *,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4681,9 +4821,9 @@ _wrap_svn_delta_editor_t_absent_directory_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","absent_directory", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","absent_directory", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4699,7 +4839,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_absent_directory_get(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(char const *,void *,apr_pool_t *) = 0 ;
@@ -4710,9 +4850,9 @@ _wrap_svn_delta_editor_t_absent_directory_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","absent_directory", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","absent_directory", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(char const *,void *,apr_pool_t *)) ((arg1)->absent_directory);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -4723,7 +4863,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_add_file_set(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(char const *,void *,char const *,svn_revnum_t,apr_pool_t *,void **) = (svn_error_t *(*)(char const *,void *,char const *,svn_revnum_t,apr_pool_t *,void **)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4733,9 +4873,9 @@ _wrap_svn_delta_editor_t_add_file_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","add_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","add_file", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_p_void_p_q_const__char_svn_revnum_t_p_apr_pool_t_p_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4751,7 +4891,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_add_file_get(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(char const *,void *,char const *,svn_revnum_t,apr_pool_t *,void **) = 0 ;
@@ -4762,9 +4902,9 @@ _wrap_svn_delta_editor_t_add_file_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","add_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","add_file", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(char const *,void *,char const *,svn_revnum_t,apr_pool_t *,void **)) ((arg1)->add_file);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_p_void_p_q_const__char_svn_revnum_t_p_apr_pool_t_p_p_void__p_svn_error_t);
return vresult;
@@ -4775,7 +4915,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_open_file_set(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(char const *,void *,svn_revnum_t,apr_pool_t *,void **) = (svn_error_t *(*)(char const *,void *,svn_revnum_t,apr_pool_t *,void **)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4785,9 +4925,9 @@ _wrap_svn_delta_editor_t_open_file_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","open_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","open_file", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_p_void_svn_revnum_t_p_apr_pool_t_p_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4803,7 +4943,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_open_file_get(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(char const *,void *,svn_revnum_t,apr_pool_t *,void **) = 0 ;
@@ -4814,9 +4954,9 @@ _wrap_svn_delta_editor_t_open_file_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","open_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","open_file", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(char const *,void *,svn_revnum_t,apr_pool_t *,void **)) ((arg1)->open_file);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_p_void_svn_revnum_t_p_apr_pool_t_p_p_void__p_svn_error_t);
return vresult;
@@ -4827,7 +4967,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_apply_textdelta_set(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,apr_pool_t *,svn_txdelta_window_handler_t *,void **) = (svn_error_t *(*)(void *,char const *,apr_pool_t *,svn_txdelta_window_handler_t *,void **)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4837,9 +4977,9 @@ _wrap_svn_delta_editor_t_apply_textdelta_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","apply_textdelta", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","apply_textdelta", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_pool_t_p_svn_txdelta_window_handler_t_p_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4855,7 +4995,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_apply_textdelta_get(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,char const *,apr_pool_t *,svn_txdelta_window_handler_t *,void **) = 0 ;
@@ -4866,9 +5006,9 @@ _wrap_svn_delta_editor_t_apply_textdelta_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","apply_textdelta", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","apply_textdelta", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,apr_pool_t *,svn_txdelta_window_handler_t *,void **)) ((arg1)->apply_textdelta);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_pool_t_p_svn_txdelta_window_handler_t_p_p_void__p_svn_error_t);
return vresult;
@@ -4879,7 +5019,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_change_file_prop_set(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_string_t const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_string_t const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4889,9 +5029,9 @@ _wrap_svn_delta_editor_t_change_file_prop_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","change_file_prop", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","change_file_prop", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4907,7 +5047,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_change_file_prop_get(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,char const *,svn_string_t const *,apr_pool_t *) = 0 ;
@@ -4918,9 +5058,9 @@ _wrap_svn_delta_editor_t_change_file_prop_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","change_file_prop", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","change_file_prop", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,svn_string_t const *,apr_pool_t *)) ((arg1)->change_file_prop);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -4931,7 +5071,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_close_file_set(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4941,9 +5081,9 @@ _wrap_svn_delta_editor_t_close_file_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","close_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","close_file", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4959,7 +5099,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_close_file_get(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,char const *,apr_pool_t *) = 0 ;
@@ -4970,9 +5110,9 @@ _wrap_svn_delta_editor_t_close_file_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","close_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","close_file", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,apr_pool_t *)) ((arg1)->close_file);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -4983,7 +5123,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_absent_file_set(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(char const *,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4993,9 +5133,9 @@ _wrap_svn_delta_editor_t_absent_file_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","absent_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","absent_file", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -5011,7 +5151,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_absent_file_get(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(char const *,void *,apr_pool_t *) = 0 ;
@@ -5022,9 +5162,9 @@ _wrap_svn_delta_editor_t_absent_file_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","absent_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","absent_file", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(char const *,void *,apr_pool_t *)) ((arg1)->absent_file);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -5035,7 +5175,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_close_edit_set(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5045,9 +5185,9 @@ _wrap_svn_delta_editor_t_close_edit_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","close_edit", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","close_edit", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -5063,7 +5203,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_close_edit_get(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,apr_pool_t *) = 0 ;
@@ -5074,9 +5214,9 @@ _wrap_svn_delta_editor_t_close_edit_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","close_edit", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","close_edit", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_pool_t *)) ((arg1)->close_edit);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -5087,7 +5227,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_abort_edit_set(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5097,9 +5237,9 @@ _wrap_svn_delta_editor_t_abort_edit_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","abort_edit", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","abort_edit", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -5115,7 +5255,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_delta_editor_t_abort_edit_get(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ struct svn_delta_editor_t *arg1 = (struct svn_delta_editor_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,apr_pool_t *) = 0 ;
@@ -5126,9 +5266,9 @@ _wrap_svn_delta_editor_t_abort_edit_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_delta_editor_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_delta_editor_t *","abort_edit", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_delta_editor_t *","abort_edit", 1, self ));
}
- arg1 = (svn_delta_editor_t *)(argp1);
+ arg1 = (struct svn_delta_editor_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_pool_t *)) ((arg1)->abort_edit);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -5156,13 +5296,13 @@ _wrap_svn_delta_editor_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_delta_editor_t(int argc, VALUE *argv, VALUE self) {
- svn_delta_editor_t *result = 0 ;
+ struct svn_delta_editor_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_delta_editor_t *)calloc(1, sizeof(svn_delta_editor_t));
+ result = (struct svn_delta_editor_t *)calloc(1, sizeof(struct svn_delta_editor_t));
DATA_PTR(self) = result;
@@ -5175,7 +5315,7 @@ fail:
SWIGINTERN void
-free_svn_delta_editor_t(svn_delta_editor_t *arg1) {
+free_svn_delta_editor_t(struct svn_delta_editor_t *arg1) {
free((char *) arg1);
}
@@ -5441,6 +5581,85 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_delta_path_driver2(int argc, VALUE *argv, VALUE self) {
+ svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
+ void *arg2 = (void *) 0 ;
+ apr_array_header_t *arg3 = (apr_array_header_t *) 0 ;
+ svn_boolean_t arg4 ;
+ svn_delta_path_driver_cb_func_t arg5 = (svn_delta_path_driver_cb_func_t) 0 ;
+ void *arg6 = (void *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg7);
+ _global_pool = arg7;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 4) || (argc > 5)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 4)",argc); SWIG_fail;
+ }
+ {
+ if (RTEST(rb_obj_is_kind_of(argv[0],
+ svn_swig_rb_svn_delta_editor()))) {
+ arg1 = svn_swig_rb_to_swig_type(argv[0],
+ "svn_delta_editor_t *",
+ _global_pool);
+ arg2 = svn_swig_rb_to_swig_type(rb_funcall(argv[0], rb_intern("baton"), 0),
+ "void *", _global_pool);
+ } else {
+ svn_swig_rb_make_delta_editor(&arg1, &arg2, argv[0], _global_pool);
+ }
+ }
+ {
+ arg3 = svn_swig_rb_strings_to_apr_array(argv[1], _global_pool);
+ }
+ arg4 = RTEST(argv[2]);
+ {
+ arg5 = svn_swig_rb_delta_path_driver_cb_func;
+ arg6 = (void *)svn_swig_rb_make_baton(argv[3], _global_svn_swig_rb_pool);
+ }
+ if (argc > 4) {
+
+ }
+ {
+ result = (svn_error_t *)svn_delta_path_driver2((struct svn_delta_editor_t const *)arg1,arg2,(apr_array_header_t const *)arg3,arg4,arg5,arg6,arg7);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_delta_path_driver(int argc, VALUE *argv, VALUE self) {
svn_delta_editor_t *arg1 = (svn_delta_editor_t *) 0 ;
void *arg2 = (void *) 0 ;
@@ -8199,7 +8418,7 @@ fail:
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
-static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *|svn_rangelist_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_file_t = {"_p_apr_file_t", "apr_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_hash_t = {"_p_apr_hash_t", "apr_hash_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int32_t = {"_p_apr_int32_t", "apr_int32_t *|time_t *", 0, 0, (void*)0, 0};
@@ -8228,7 +8447,7 @@ static swig_type_info _swigt__p_f_p_void_svn_revnum_t_p_apr_pool_t_p_p_void__p_s
static swig_type_info _swigt__p_int = {"_p_int", "int *|svn_boolean_t *|apr_status_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_long = {"_p_long", "long *|svn_revnum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t = {"_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t", "svn_txdelta_window_handler_t *|struct svn_error_t *(**)(svn_txdelta_window_t *,void *)", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_p_svn_checksum_t = {"_p_p_svn_checksum_t", "svn_checksum_t **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_svn_checksum_t = {"_p_p_svn_checksum_t", "struct svn_checksum_t **|svn_checksum_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_delta_editor_t = {"_p_p_svn_delta_editor_t", "struct svn_delta_editor_t **|svn_delta_editor_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_txdelta_stream_t = {"_p_p_svn_txdelta_stream_t", "struct svn_txdelta_stream_t **|svn_txdelta_stream_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_txdelta_window_t = {"_p_p_svn_txdelta_window_t", "struct svn_txdelta_window_t **|svn_txdelta_window_t **", 0, 0, (void*)0, 0};
@@ -8243,7 +8462,9 @@ static swig_type_info _swigt__p_svn_auth_iterstate_t = {"_p_svn_auth_iterstate_t
static swig_type_info _swigt__p_svn_auth_provider_object_t = {"_p_svn_auth_provider_object_t", "struct svn_auth_provider_object_t *|svn_auth_provider_object_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_provider_t = {"_p_svn_auth_provider_t", "struct svn_auth_provider_t *|svn_auth_provider_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_ssl_server_cert_info_t = {"_p_svn_auth_ssl_server_cert_info_t", "struct svn_auth_ssl_server_cert_info_t *|svn_auth_ssl_server_cert_info_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_ctx_t = {"_p_svn_checksum_ctx_t", "struct svn_checksum_ctx_t *|svn_checksum_ctx_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "enum svn_checksum_kind_t *|svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "struct svn_checksum_t *|svn_checksum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_commit_info_t = {"_p_svn_commit_info_t", "struct svn_commit_info_t *|svn_commit_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_config_t = {"_p_svn_config_t", "struct svn_config_t *|svn_config_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_delta_editor_t = {"_p_svn_delta_editor_t", "struct svn_delta_editor_t *|svn_delta_editor_t *", 0, 0, (void*)0, 0};
@@ -8279,6 +8500,7 @@ static swig_type_info _swigt__p_svn_opt_subcommand_desc2_t = {"_p_svn_opt_subcom
static swig_type_info _swigt__p_svn_opt_subcommand_desc_t = {"_p_svn_opt_subcommand_desc_t", "struct svn_opt_subcommand_desc_t *|svn_opt_subcommand_desc_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_file_t = {"_p_svn_patch_file_t", "struct svn_patch_file_t *|svn_patch_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_t = {"_p_svn_patch_t", "struct svn_patch_t *|svn_patch_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_prop_inherited_item_t = {"_p_svn_prop_inherited_item_t", "struct svn_prop_inherited_item_t *|svn_prop_inherited_item_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_kind = {"_p_svn_prop_kind", "svn_prop_kind_t *|enum svn_prop_kind *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_patch_t = {"_p_svn_prop_patch_t", "struct svn_prop_patch_t *|svn_prop_patch_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_stream_mark_t = {"_p_svn_stream_mark_t", "struct svn_stream_mark_t *|svn_stream_mark_t *", 0, 0, (void*)0, 0};
@@ -8290,6 +8512,9 @@ static swig_type_info _swigt__p_svn_txdelta_op_t = {"_p_svn_txdelta_op_t", "stru
static swig_type_info _swigt__p_svn_txdelta_stream_t = {"_p_svn_txdelta_stream_t", "struct svn_txdelta_stream_t *|svn_txdelta_stream_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_txdelta_window_t = {"_p_svn_txdelta_window_t", "struct svn_txdelta_window_t *|svn_txdelta_window_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_checklist_t = {"_p_svn_version_checklist_t", "struct svn_version_checklist_t *|svn_version_checklist_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_linked_lib_t = {"_p_svn_version_ext_linked_lib_t", "struct svn_version_ext_linked_lib_t *|svn_version_ext_linked_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_loaded_lib_t = {"_p_svn_version_ext_loaded_lib_t", "struct svn_version_ext_loaded_lib_t *|svn_version_ext_loaded_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_extended_t = {"_p_svn_version_extended_t", "struct svn_version_extended_t *|svn_version_extended_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_t = {"_p_svn_version_t", "struct svn_version_t *|svn_version_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_char = {"_p_unsigned_char", "unsigned char *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_long = {"_p_unsigned_long", "unsigned long *|svn_linenum_t *", 0, 0, (void*)0, 0};
@@ -8340,7 +8565,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_auth_provider_object_t,
&_swigt__p_svn_auth_provider_t,
&_swigt__p_svn_auth_ssl_server_cert_info_t,
+ &_swigt__p_svn_checksum_ctx_t,
&_swigt__p_svn_checksum_kind_t,
+ &_swigt__p_svn_checksum_t,
&_swigt__p_svn_commit_info_t,
&_swigt__p_svn_config_t,
&_swigt__p_svn_delta_editor_t,
@@ -8376,6 +8603,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_opt_subcommand_desc_t,
&_swigt__p_svn_patch_file_t,
&_swigt__p_svn_patch_t,
+ &_swigt__p_svn_prop_inherited_item_t,
&_swigt__p_svn_prop_kind,
&_swigt__p_svn_prop_patch_t,
&_swigt__p_svn_stream_mark_t,
@@ -8387,6 +8615,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_txdelta_stream_t,
&_swigt__p_svn_txdelta_window_t,
&_swigt__p_svn_version_checklist_t,
+ &_swigt__p_svn_version_ext_linked_lib_t,
+ &_swigt__p_svn_version_ext_loaded_lib_t,
+ &_swigt__p_svn_version_extended_t,
&_swigt__p_svn_version_t,
&_swigt__p_unsigned_char,
&_swigt__p_unsigned_long,
@@ -8437,7 +8668,9 @@ static swig_cast_info _swigc__p_svn_auth_iterstate_t[] = { {&_swigt__p_svn_auth
static swig_cast_info _swigc__p_svn_auth_provider_object_t[] = { {&_swigt__p_svn_auth_provider_object_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_provider_t[] = { {&_swigt__p_svn_auth_provider_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_ssl_server_cert_info_t[] = { {&_swigt__p_svn_auth_ssl_server_cert_info_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_ctx_t[] = { {&_swigt__p_svn_checksum_ctx_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_checksum_kind_t[] = { {&_swigt__p_svn_checksum_kind_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_t[] = { {&_swigt__p_svn_checksum_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_commit_info_t[] = { {&_swigt__p_svn_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_config_t[] = { {&_swigt__p_svn_config_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_delta_editor_t[] = { {&_swigt__p_svn_delta_editor_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -8473,6 +8706,7 @@ static swig_cast_info _swigc__p_svn_opt_subcommand_desc2_t[] = { {&_swigt__p_sv
static swig_cast_info _swigc__p_svn_opt_subcommand_desc_t[] = { {&_swigt__p_svn_opt_subcommand_desc_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_file_t[] = { {&_swigt__p_svn_patch_file_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_t[] = { {&_swigt__p_svn_patch_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_prop_inherited_item_t[] = { {&_swigt__p_svn_prop_inherited_item_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_kind[] = { {&_swigt__p_svn_prop_kind, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_patch_t[] = { {&_swigt__p_svn_prop_patch_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_stream_mark_t[] = { {&_swigt__p_svn_stream_mark_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -8484,6 +8718,9 @@ static swig_cast_info _swigc__p_svn_txdelta_op_t[] = { {&_swigt__p_svn_txdelta_
static swig_cast_info _swigc__p_svn_txdelta_stream_t[] = { {&_swigt__p_svn_txdelta_stream_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_txdelta_window_t[] = { {&_swigt__p_svn_txdelta_window_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_checklist_t[] = { {&_swigt__p_svn_version_checklist_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_linked_lib_t[] = { {&_swigt__p_svn_version_ext_linked_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_loaded_lib_t[] = { {&_swigt__p_svn_version_ext_loaded_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_extended_t[] = { {&_swigt__p_svn_version_extended_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_t[] = { {&_swigt__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_char[] = { {&_swigt__p_unsigned_char, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_long[] = { {&_swigt__p_unsigned_long, 0, 0, 0},{0, 0, 0, 0}};
@@ -8534,7 +8771,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_auth_provider_object_t,
_swigc__p_svn_auth_provider_t,
_swigc__p_svn_auth_ssl_server_cert_info_t,
+ _swigc__p_svn_checksum_ctx_t,
_swigc__p_svn_checksum_kind_t,
+ _swigc__p_svn_checksum_t,
_swigc__p_svn_commit_info_t,
_swigc__p_svn_config_t,
_swigc__p_svn_delta_editor_t,
@@ -8570,6 +8809,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_opt_subcommand_desc_t,
_swigc__p_svn_patch_file_t,
_swigc__p_svn_patch_t,
+ _swigc__p_svn_prop_inherited_item_t,
_swigc__p_svn_prop_kind,
_swigc__p_svn_prop_patch_t,
_swigc__p_svn_stream_mark_t,
@@ -8581,6 +8821,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_txdelta_stream_t,
_swigc__p_svn_txdelta_window_t,
_swigc__p_svn_version_checklist_t,
+ _swigc__p_svn_version_ext_linked_lib_t,
+ _swigc__p_svn_version_ext_loaded_lib_t,
+ _swigc__p_svn_version_extended_t,
_swigc__p_svn_version_t,
_swigc__p_unsigned_char,
_swigc__p_unsigned_long,
@@ -8649,8 +8892,6 @@ SWIG_InitializeModule(void *clientdata) {
swig_module_info *module_head, *iter;
int found, init;
- clientdata = clientdata;
-
/* check to see if the circular list has been setup, if not, set it up */
if (swig_module.next==0) {
/* Initialize the swig_module */
@@ -8896,11 +9137,13 @@ SWIGEXPORT void Init_delta(void) {
rb_define_module_function(mDelta, "svn_txdelta_stream_create", _wrap_svn_txdelta_stream_create, -1);
rb_define_module_function(mDelta, "svn_txdelta_next_window", _wrap_svn_txdelta_next_window, -1);
rb_define_module_function(mDelta, "svn_txdelta_md5_digest", _wrap_svn_txdelta_md5_digest, -1);
+ rb_define_module_function(mDelta, "svn_txdelta2", _wrap_svn_txdelta2, -1);
rb_define_module_function(mDelta, "svn_txdelta", _wrap_svn_txdelta, -1);
rb_define_module_function(mDelta, "svn_txdelta_target_push", _wrap_svn_txdelta_target_push, -1);
rb_define_module_function(mDelta, "svn_txdelta_send_string", _wrap_svn_txdelta_send_string, -1);
rb_define_module_function(mDelta, "svn_txdelta_send_stream", _wrap_svn_txdelta_send_stream, -1);
rb_define_module_function(mDelta, "svn_txdelta_send_txstream", _wrap_svn_txdelta_send_txstream, -1);
+ rb_define_module_function(mDelta, "svn_txdelta_send_contents", _wrap_svn_txdelta_send_contents, -1);
rb_define_module_function(mDelta, "svn_txdelta_apply", _wrap_svn_txdelta_apply, -1);
rb_define_module_function(mDelta, "svn_txdelta_to_svndiff3", _wrap_svn_txdelta_to_svndiff3, -1);
rb_define_module_function(mDelta, "svn_txdelta_to_svndiff2", _wrap_svn_txdelta_to_svndiff2, -1);
@@ -8952,6 +9195,7 @@ SWIGEXPORT void Init_delta(void) {
rb_define_module_function(mDelta, "svn_delta_noop_window_handler", _wrap_svn_delta_noop_window_handler, -1);
rb_define_module_function(mDelta, "svn_delta_get_cancellation_editor", _wrap_svn_delta_get_cancellation_editor, -1);
rb_define_module_function(mDelta, "svn_delta_depth_filter_editor", _wrap_svn_delta_depth_filter_editor, -1);
+ rb_define_module_function(mDelta, "svn_delta_path_driver2", _wrap_svn_delta_path_driver2, -1);
rb_define_module_function(mDelta, "svn_delta_path_driver", _wrap_svn_delta_path_driver, -1);
rb_define_module_function(mDelta, "svn_delta_editor_invoke_set_target_revision", _wrap_svn_delta_editor_invoke_set_target_revision, -1);
rb_define_module_function(mDelta, "svn_delta_editor_invoke_open_root", _wrap_svn_delta_editor_invoke_open_root, -1);
diff --git a/subversion/bindings/swig/ruby/svn_diff.c b/subversion/bindings/swig/ruby/svn_diff.c
index bc4d96b..c1876e6 100644
--- a/subversion/bindings/swig/ruby/svn_diff.c
+++ b/subversion/bindings/swig/ruby/svn_diff.c
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -1374,7 +1374,7 @@ SWIG_Ruby_AppendOutput(VALUE target, VALUE o) {
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Ruby_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Ruby_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Ruby_SetModule(pointer)
@@ -1528,7 +1528,7 @@ SWIG_Ruby_NewPointerObj(void *ptr, swig_type_info *type, int flags)
downcast methods. */
if (obj != Qnil) {
VALUE value = rb_iv_get(obj, "@__swigtype__");
- char* type_name = RSTRING_PTR(value);
+ const char* type_name = RSTRING_PTR(value);
if (strcmp(type->name, type_name) == 0) {
return obj;
@@ -1710,7 +1710,7 @@ SWIG_Ruby_ConvertPacked(VALUE obj, void *ptr, int sz, swig_type_info *ty) {
}
SWIGRUNTIME swig_module_info *
-SWIG_Ruby_GetModule(void)
+SWIG_Ruby_GetModule(void *SWIGUNUSEDPARM(clientdata))
{
VALUE pointer;
swig_module_info *ret = 0;
@@ -1792,68 +1792,76 @@ int SWIG_Ruby_arity( VALUE proc, int minimal )
/* -------- TYPES TABLE (BEGIN) -------- */
-#define SWIGTYPE_p_apr_int32_t swig_types[0]
-#define SWIGTYPE_p_apr_int64_t swig_types[1]
-#define SWIGTYPE_p_char swig_types[2]
-#define SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[3]
-#define SWIGTYPE_p_int swig_types[4]
-#define SWIGTYPE_p_long swig_types[5]
-#define SWIGTYPE_p_svn_auth_baton_t swig_types[6]
-#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[7]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[8]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[9]
-#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[10]
-#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[11]
-#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[12]
-#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[13]
-#define SWIGTYPE_p_svn_auth_provider_t swig_types[14]
-#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[15]
-#define SWIGTYPE_p_svn_commit_info_t swig_types[16]
-#define SWIGTYPE_p_svn_config_t swig_types[17]
-#define SWIGTYPE_p_svn_depth_t swig_types[18]
-#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[19]
-#define SWIGTYPE_p_svn_diff_datasource_e swig_types[20]
-#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[21]
-#define SWIGTYPE_p_svn_diff_file_options_t swig_types[22]
-#define SWIGTYPE_p_svn_diff_fns2_t swig_types[23]
-#define SWIGTYPE_p_svn_diff_fns_t swig_types[24]
-#define SWIGTYPE_p_svn_diff_hunk_t swig_types[25]
-#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[26]
-#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[27]
-#define SWIGTYPE_p_svn_diff_t swig_types[28]
-#define SWIGTYPE_p_svn_dirent_t swig_types[29]
-#define SWIGTYPE_p_svn_errno_t swig_types[30]
-#define SWIGTYPE_p_svn_error_t swig_types[31]
-#define SWIGTYPE_p_svn_io_dirent2_t swig_types[32]
-#define SWIGTYPE_p_svn_io_dirent_t swig_types[33]
-#define SWIGTYPE_p_svn_io_file_del_t swig_types[34]
-#define SWIGTYPE_p_svn_location_segment_t swig_types[35]
-#define SWIGTYPE_p_svn_lock_t swig_types[36]
-#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[37]
-#define SWIGTYPE_p_svn_log_changed_path_t swig_types[38]
-#define SWIGTYPE_p_svn_log_entry_t swig_types[39]
-#define SWIGTYPE_p_svn_merge_range_t swig_types[40]
-#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[41]
-#define SWIGTYPE_p_svn_node_kind_t swig_types[42]
-#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[43]
-#define SWIGTYPE_p_svn_opt_revision_t swig_types[44]
-#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[45]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[46]
-#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[47]
-#define SWIGTYPE_p_svn_patch_file_t swig_types[48]
-#define SWIGTYPE_p_svn_patch_t swig_types[49]
-#define SWIGTYPE_p_svn_prop_kind swig_types[50]
-#define SWIGTYPE_p_svn_prop_patch_t swig_types[51]
-#define SWIGTYPE_p_svn_stream_mark_t swig_types[52]
-#define SWIGTYPE_p_svn_stream_t swig_types[53]
-#define SWIGTYPE_p_svn_string_t swig_types[54]
-#define SWIGTYPE_p_svn_stringbuf_t swig_types[55]
-#define SWIGTYPE_p_svn_tristate_t swig_types[56]
-#define SWIGTYPE_p_svn_version_checklist_t swig_types[57]
-#define SWIGTYPE_p_svn_version_t swig_types[58]
-#define SWIGTYPE_p_unsigned_long swig_types[59]
-static swig_type_info *swig_types[61];
-static swig_module_info swig_module = {swig_types, 60, 0, 0, 0, 0};
+#define SWIGTYPE_p_apr_array_header_t swig_types[0]
+#define SWIGTYPE_p_apr_int32_t swig_types[1]
+#define SWIGTYPE_p_apr_int64_t swig_types[2]
+#define SWIGTYPE_p_char swig_types[3]
+#define SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[4]
+#define SWIGTYPE_p_int swig_types[5]
+#define SWIGTYPE_p_long swig_types[6]
+#define SWIGTYPE_p_svn_auth_baton_t swig_types[7]
+#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[8]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[9]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[10]
+#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[11]
+#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[12]
+#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[13]
+#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[14]
+#define SWIGTYPE_p_svn_auth_provider_t swig_types[15]
+#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[16]
+#define SWIGTYPE_p_svn_checksum_ctx_t swig_types[17]
+#define SWIGTYPE_p_svn_checksum_kind_t swig_types[18]
+#define SWIGTYPE_p_svn_checksum_t swig_types[19]
+#define SWIGTYPE_p_svn_commit_info_t swig_types[20]
+#define SWIGTYPE_p_svn_config_t swig_types[21]
+#define SWIGTYPE_p_svn_depth_t swig_types[22]
+#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[23]
+#define SWIGTYPE_p_svn_diff_datasource_e swig_types[24]
+#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[25]
+#define SWIGTYPE_p_svn_diff_file_options_t swig_types[26]
+#define SWIGTYPE_p_svn_diff_fns2_t swig_types[27]
+#define SWIGTYPE_p_svn_diff_fns_t swig_types[28]
+#define SWIGTYPE_p_svn_diff_hunk_t swig_types[29]
+#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[30]
+#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[31]
+#define SWIGTYPE_p_svn_diff_t swig_types[32]
+#define SWIGTYPE_p_svn_dirent_t swig_types[33]
+#define SWIGTYPE_p_svn_errno_t swig_types[34]
+#define SWIGTYPE_p_svn_error_t swig_types[35]
+#define SWIGTYPE_p_svn_io_dirent2_t swig_types[36]
+#define SWIGTYPE_p_svn_io_dirent_t swig_types[37]
+#define SWIGTYPE_p_svn_io_file_del_t swig_types[38]
+#define SWIGTYPE_p_svn_location_segment_t swig_types[39]
+#define SWIGTYPE_p_svn_lock_t swig_types[40]
+#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[41]
+#define SWIGTYPE_p_svn_log_changed_path_t swig_types[42]
+#define SWIGTYPE_p_svn_log_entry_t swig_types[43]
+#define SWIGTYPE_p_svn_merge_range_t swig_types[44]
+#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[45]
+#define SWIGTYPE_p_svn_node_kind_t swig_types[46]
+#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[47]
+#define SWIGTYPE_p_svn_opt_revision_t swig_types[48]
+#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[49]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[50]
+#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[51]
+#define SWIGTYPE_p_svn_patch_file_t swig_types[52]
+#define SWIGTYPE_p_svn_patch_t swig_types[53]
+#define SWIGTYPE_p_svn_prop_inherited_item_t swig_types[54]
+#define SWIGTYPE_p_svn_prop_kind swig_types[55]
+#define SWIGTYPE_p_svn_prop_patch_t swig_types[56]
+#define SWIGTYPE_p_svn_stream_mark_t swig_types[57]
+#define SWIGTYPE_p_svn_stream_t swig_types[58]
+#define SWIGTYPE_p_svn_string_t swig_types[59]
+#define SWIGTYPE_p_svn_stringbuf_t swig_types[60]
+#define SWIGTYPE_p_svn_tristate_t swig_types[61]
+#define SWIGTYPE_p_svn_version_checklist_t swig_types[62]
+#define SWIGTYPE_p_svn_version_ext_linked_lib_t swig_types[63]
+#define SWIGTYPE_p_svn_version_ext_loaded_lib_t swig_types[64]
+#define SWIGTYPE_p_svn_version_extended_t swig_types[65]
+#define SWIGTYPE_p_svn_version_t swig_types[66]
+#define SWIGTYPE_p_unsigned_long swig_types[67]
+static swig_type_info *swig_types[69];
+static swig_module_info swig_module = {swig_types, 68, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@@ -1868,7 +1876,7 @@ static VALUE mDiff;
#define SWIG_RUBY_THREAD_END_BLOCK
-#define SWIGVERSION 0x020004
+#define SWIGVERSION 0x020009
#define SWIG_VERSION SWIGVERSION
@@ -1919,6 +1927,7 @@ static VALUE *_global_vresult_address = &vresult;
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
+static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *|svn_rangelist_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int32_t = {"_p_apr_int32_t", "apr_int32_t *|time_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int64_t = {"_p_apr_int64_t", "apr_int64_t *|svn_filesize_t *|apr_time_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
@@ -1935,6 +1944,9 @@ static swig_type_info _swigt__p_svn_auth_iterstate_t = {"_p_svn_auth_iterstate_t
static swig_type_info _swigt__p_svn_auth_provider_object_t = {"_p_svn_auth_provider_object_t", "struct svn_auth_provider_object_t *|svn_auth_provider_object_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_provider_t = {"_p_svn_auth_provider_t", "struct svn_auth_provider_t *|svn_auth_provider_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_ssl_server_cert_info_t = {"_p_svn_auth_ssl_server_cert_info_t", "struct svn_auth_ssl_server_cert_info_t *|svn_auth_ssl_server_cert_info_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_ctx_t = {"_p_svn_checksum_ctx_t", "struct svn_checksum_ctx_t *|svn_checksum_ctx_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "enum svn_checksum_kind_t *|svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "struct svn_checksum_t *|svn_checksum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_commit_info_t = {"_p_svn_commit_info_t", "struct svn_commit_info_t *|svn_commit_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_config_t = {"_p_svn_config_t", "struct svn_config_t *|svn_config_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_depth_t = {"_p_svn_depth_t", "enum svn_depth_t *|svn_depth_t *", 0, 0, (void*)0, 0};
@@ -1969,6 +1981,7 @@ static swig_type_info _swigt__p_svn_opt_subcommand_desc2_t = {"_p_svn_opt_subcom
static swig_type_info _swigt__p_svn_opt_subcommand_desc_t = {"_p_svn_opt_subcommand_desc_t", "struct svn_opt_subcommand_desc_t *|svn_opt_subcommand_desc_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_file_t = {"_p_svn_patch_file_t", "struct svn_patch_file_t *|svn_patch_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_t = {"_p_svn_patch_t", "struct svn_patch_t *|svn_patch_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_prop_inherited_item_t = {"_p_svn_prop_inherited_item_t", "struct svn_prop_inherited_item_t *|svn_prop_inherited_item_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_kind = {"_p_svn_prop_kind", "svn_prop_kind_t *|enum svn_prop_kind *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_patch_t = {"_p_svn_prop_patch_t", "struct svn_prop_patch_t *|svn_prop_patch_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_stream_mark_t = {"_p_svn_stream_mark_t", "struct svn_stream_mark_t *|svn_stream_mark_t *", 0, 0, (void*)0, 0};
@@ -1977,10 +1990,14 @@ static swig_type_info _swigt__p_svn_string_t = {"_p_svn_string_t", "struct svn_s
static swig_type_info _swigt__p_svn_stringbuf_t = {"_p_svn_stringbuf_t", "struct svn_stringbuf_t *|svn_stringbuf_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_tristate_t = {"_p_svn_tristate_t", "enum svn_tristate_t *|svn_tristate_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_checklist_t = {"_p_svn_version_checklist_t", "struct svn_version_checklist_t *|svn_version_checklist_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_linked_lib_t = {"_p_svn_version_ext_linked_lib_t", "struct svn_version_ext_linked_lib_t *|svn_version_ext_linked_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_loaded_lib_t = {"_p_svn_version_ext_loaded_lib_t", "struct svn_version_ext_loaded_lib_t *|svn_version_ext_loaded_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_extended_t = {"_p_svn_version_extended_t", "struct svn_version_extended_t *|svn_version_extended_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_t = {"_p_svn_version_t", "struct svn_version_t *|svn_version_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_long = {"_p_unsigned_long", "unsigned long *|svn_linenum_t *", 0, 0, (void*)0, 0};
static swig_type_info *swig_type_initial[] = {
+ &_swigt__p_apr_array_header_t,
&_swigt__p_apr_int32_t,
&_swigt__p_apr_int64_t,
&_swigt__p_char,
@@ -1997,6 +2014,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_auth_provider_object_t,
&_swigt__p_svn_auth_provider_t,
&_swigt__p_svn_auth_ssl_server_cert_info_t,
+ &_swigt__p_svn_checksum_ctx_t,
+ &_swigt__p_svn_checksum_kind_t,
+ &_swigt__p_svn_checksum_t,
&_swigt__p_svn_commit_info_t,
&_swigt__p_svn_config_t,
&_swigt__p_svn_depth_t,
@@ -2031,6 +2051,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_opt_subcommand_desc_t,
&_swigt__p_svn_patch_file_t,
&_swigt__p_svn_patch_t,
+ &_swigt__p_svn_prop_inherited_item_t,
&_swigt__p_svn_prop_kind,
&_swigt__p_svn_prop_patch_t,
&_swigt__p_svn_stream_mark_t,
@@ -2039,10 +2060,14 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_stringbuf_t,
&_swigt__p_svn_tristate_t,
&_swigt__p_svn_version_checklist_t,
+ &_swigt__p_svn_version_ext_linked_lib_t,
+ &_swigt__p_svn_version_ext_loaded_lib_t,
+ &_swigt__p_svn_version_extended_t,
&_swigt__p_svn_version_t,
&_swigt__p_unsigned_long,
};
+static swig_cast_info _swigc__p_apr_array_header_t[] = { {&_swigt__p_apr_array_header_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_apr_int32_t[] = { {&_swigt__p_apr_int32_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_apr_int64_t[] = { {&_swigt__p_apr_int64_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
@@ -2059,6 +2084,9 @@ static swig_cast_info _swigc__p_svn_auth_iterstate_t[] = { {&_swigt__p_svn_auth
static swig_cast_info _swigc__p_svn_auth_provider_object_t[] = { {&_swigt__p_svn_auth_provider_object_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_provider_t[] = { {&_swigt__p_svn_auth_provider_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_ssl_server_cert_info_t[] = { {&_swigt__p_svn_auth_ssl_server_cert_info_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_ctx_t[] = { {&_swigt__p_svn_checksum_ctx_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_kind_t[] = { {&_swigt__p_svn_checksum_kind_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_t[] = { {&_swigt__p_svn_checksum_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_commit_info_t[] = { {&_swigt__p_svn_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_config_t[] = { {&_swigt__p_svn_config_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_depth_t[] = { {&_swigt__p_svn_depth_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -2093,6 +2121,7 @@ static swig_cast_info _swigc__p_svn_opt_subcommand_desc2_t[] = { {&_swigt__p_sv
static swig_cast_info _swigc__p_svn_opt_subcommand_desc_t[] = { {&_swigt__p_svn_opt_subcommand_desc_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_file_t[] = { {&_swigt__p_svn_patch_file_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_t[] = { {&_swigt__p_svn_patch_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_prop_inherited_item_t[] = { {&_swigt__p_svn_prop_inherited_item_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_kind[] = { {&_swigt__p_svn_prop_kind, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_patch_t[] = { {&_swigt__p_svn_prop_patch_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_stream_mark_t[] = { {&_swigt__p_svn_stream_mark_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -2101,10 +2130,14 @@ static swig_cast_info _swigc__p_svn_string_t[] = { {&_swigt__p_svn_string_t, 0,
static swig_cast_info _swigc__p_svn_stringbuf_t[] = { {&_swigt__p_svn_stringbuf_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_tristate_t[] = { {&_swigt__p_svn_tristate_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_checklist_t[] = { {&_swigt__p_svn_version_checklist_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_linked_lib_t[] = { {&_swigt__p_svn_version_ext_linked_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_loaded_lib_t[] = { {&_swigt__p_svn_version_ext_loaded_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_extended_t[] = { {&_swigt__p_svn_version_extended_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_t[] = { {&_swigt__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_long[] = { {&_swigt__p_unsigned_long, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info *swig_cast_initial[] = {
+ _swigc__p_apr_array_header_t,
_swigc__p_apr_int32_t,
_swigc__p_apr_int64_t,
_swigc__p_char,
@@ -2121,6 +2154,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_auth_provider_object_t,
_swigc__p_svn_auth_provider_t,
_swigc__p_svn_auth_ssl_server_cert_info_t,
+ _swigc__p_svn_checksum_ctx_t,
+ _swigc__p_svn_checksum_kind_t,
+ _swigc__p_svn_checksum_t,
_swigc__p_svn_commit_info_t,
_swigc__p_svn_config_t,
_swigc__p_svn_depth_t,
@@ -2155,6 +2191,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_opt_subcommand_desc_t,
_swigc__p_svn_patch_file_t,
_swigc__p_svn_patch_t,
+ _swigc__p_svn_prop_inherited_item_t,
_swigc__p_svn_prop_kind,
_swigc__p_svn_prop_patch_t,
_swigc__p_svn_stream_mark_t,
@@ -2163,6 +2200,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_stringbuf_t,
_swigc__p_svn_tristate_t,
_swigc__p_svn_version_checklist_t,
+ _swigc__p_svn_version_ext_linked_lib_t,
+ _swigc__p_svn_version_ext_loaded_lib_t,
+ _swigc__p_svn_version_extended_t,
_swigc__p_svn_version_t,
_swigc__p_unsigned_long,
};
@@ -2229,8 +2269,6 @@ SWIG_InitializeModule(void *clientdata) {
swig_module_info *module_head, *iter;
int found, init;
- clientdata = clientdata;
-
/* check to see if the circular list has been setup, if not, set it up */
if (swig_module.next==0) {
/* Initialize the swig_module */
diff --git a/subversion/bindings/swig/ruby/svn_fs.c b/subversion/bindings/swig/ruby/svn_fs.c
index effb10e..6fd03dc 100644
--- a/subversion/bindings/swig/ruby/svn_fs.c
+++ b/subversion/bindings/swig/ruby/svn_fs.c
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -1374,7 +1374,7 @@ SWIG_Ruby_AppendOutput(VALUE target, VALUE o) {
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Ruby_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Ruby_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Ruby_SetModule(pointer)
@@ -1528,7 +1528,7 @@ SWIG_Ruby_NewPointerObj(void *ptr, swig_type_info *type, int flags)
downcast methods. */
if (obj != Qnil) {
VALUE value = rb_iv_get(obj, "@__swigtype__");
- char* type_name = RSTRING_PTR(value);
+ const char* type_name = RSTRING_PTR(value);
if (strcmp(type->name, type_name) == 0) {
return obj;
@@ -1710,7 +1710,7 @@ SWIG_Ruby_ConvertPacked(VALUE obj, void *ptr, int sz, swig_type_info *ty) {
}
SWIGRUNTIME swig_module_info *
-SWIG_Ruby_GetModule(void)
+SWIG_Ruby_GetModule(void *SWIGUNUSEDPARM(clientdata))
{
VALUE pointer;
swig_module_info *ret = 0;
@@ -1798,104 +1798,113 @@ int SWIG_Ruby_arity( VALUE proc, int minimal )
#define SWIGTYPE_p_apr_int64_t swig_types[3]
#define SWIGTYPE_p_apr_pool_t swig_types[4]
#define SWIGTYPE_p_char swig_types[5]
-#define SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[6]
-#define SWIGTYPE_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t swig_types[7]
-#define SWIGTYPE_p_f_p_void__p_svn_error_t swig_types[8]
-#define SWIGTYPE_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t swig_types[9]
-#define SWIGTYPE_p_f_p_void_p_struct_svn_error_t__void swig_types[10]
-#define SWIGTYPE_p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t swig_types[11]
-#define SWIGTYPE_p_int swig_types[12]
-#define SWIGTYPE_p_long swig_types[13]
-#define SWIGTYPE_p_p_apr_array_header_t swig_types[14]
-#define SWIGTYPE_p_p_apr_hash_t swig_types[15]
-#define SWIGTYPE_p_p_char swig_types[16]
-#define SWIGTYPE_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t swig_types[17]
-#define SWIGTYPE_p_p_svn_checksum_t swig_types[18]
-#define SWIGTYPE_p_p_svn_fs_access_t swig_types[19]
-#define SWIGTYPE_p_p_svn_fs_history_t swig_types[20]
-#define SWIGTYPE_p_p_svn_fs_id_t swig_types[21]
-#define SWIGTYPE_p_p_svn_fs_root_t swig_types[22]
-#define SWIGTYPE_p_p_svn_fs_t swig_types[23]
-#define SWIGTYPE_p_p_svn_fs_txn_t swig_types[24]
-#define SWIGTYPE_p_p_svn_lock_t swig_types[25]
-#define SWIGTYPE_p_p_svn_stream_t swig_types[26]
-#define SWIGTYPE_p_p_svn_string_t swig_types[27]
-#define SWIGTYPE_p_p_svn_txdelta_stream_t swig_types[28]
-#define SWIGTYPE_p_p_void swig_types[29]
-#define SWIGTYPE_p_svn_auth_baton_t swig_types[30]
-#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[31]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[32]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[33]
-#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[34]
-#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[35]
-#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[36]
-#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[37]
-#define SWIGTYPE_p_svn_auth_provider_t swig_types[38]
-#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[39]
-#define SWIGTYPE_p_svn_checksum_kind_t swig_types[40]
-#define SWIGTYPE_p_svn_commit_info_t swig_types[41]
-#define SWIGTYPE_p_svn_config_t swig_types[42]
-#define SWIGTYPE_p_svn_delta_editor_t swig_types[43]
-#define SWIGTYPE_p_svn_depth_t swig_types[44]
-#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[45]
-#define SWIGTYPE_p_svn_diff_datasource_e swig_types[46]
-#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[47]
-#define SWIGTYPE_p_svn_diff_file_options_t swig_types[48]
-#define SWIGTYPE_p_svn_diff_fns2_t swig_types[49]
-#define SWIGTYPE_p_svn_diff_fns_t swig_types[50]
-#define SWIGTYPE_p_svn_diff_hunk_t swig_types[51]
-#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[52]
-#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[53]
-#define SWIGTYPE_p_svn_diff_t swig_types[54]
-#define SWIGTYPE_p_svn_dirent_t swig_types[55]
-#define SWIGTYPE_p_svn_errno_t swig_types[56]
-#define SWIGTYPE_p_svn_error_t swig_types[57]
-#define SWIGTYPE_p_svn_fs_access_t swig_types[58]
-#define SWIGTYPE_p_svn_fs_dirent_t swig_types[59]
-#define SWIGTYPE_p_svn_fs_history_t swig_types[60]
-#define SWIGTYPE_p_svn_fs_id_t swig_types[61]
-#define SWIGTYPE_p_svn_fs_pack_notify_action_t swig_types[62]
-#define SWIGTYPE_p_svn_fs_path_change2_t swig_types[63]
-#define SWIGTYPE_p_svn_fs_path_change_kind_t swig_types[64]
-#define SWIGTYPE_p_svn_fs_path_change_t swig_types[65]
-#define SWIGTYPE_p_svn_fs_root_t swig_types[66]
-#define SWIGTYPE_p_svn_fs_t swig_types[67]
-#define SWIGTYPE_p_svn_fs_txn_t swig_types[68]
-#define SWIGTYPE_p_svn_io_dirent2_t swig_types[69]
-#define SWIGTYPE_p_svn_io_dirent_t swig_types[70]
-#define SWIGTYPE_p_svn_io_file_del_t swig_types[71]
-#define SWIGTYPE_p_svn_location_segment_t swig_types[72]
-#define SWIGTYPE_p_svn_lock_t swig_types[73]
-#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[74]
-#define SWIGTYPE_p_svn_log_changed_path_t swig_types[75]
-#define SWIGTYPE_p_svn_log_entry_t swig_types[76]
-#define SWIGTYPE_p_svn_merge_range_t swig_types[77]
-#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[78]
-#define SWIGTYPE_p_svn_node_kind_t swig_types[79]
-#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[80]
-#define SWIGTYPE_p_svn_opt_revision_t swig_types[81]
-#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[82]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[83]
-#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[84]
-#define SWIGTYPE_p_svn_patch_file_t swig_types[85]
-#define SWIGTYPE_p_svn_patch_t swig_types[86]
-#define SWIGTYPE_p_svn_prop_kind swig_types[87]
-#define SWIGTYPE_p_svn_prop_patch_t swig_types[88]
-#define SWIGTYPE_p_svn_stream_mark_t swig_types[89]
-#define SWIGTYPE_p_svn_stream_t swig_types[90]
-#define SWIGTYPE_p_svn_string_t swig_types[91]
-#define SWIGTYPE_p_svn_stringbuf_t swig_types[92]
-#define SWIGTYPE_p_svn_tristate_t swig_types[93]
-#define SWIGTYPE_p_svn_txdelta_op_t swig_types[94]
-#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[95]
-#define SWIGTYPE_p_svn_txdelta_window_t swig_types[96]
-#define SWIGTYPE_p_svn_version_checklist_t swig_types[97]
-#define SWIGTYPE_p_svn_version_t swig_types[98]
-#define SWIGTYPE_p_unsigned_char swig_types[99]
-#define SWIGTYPE_p_unsigned_long swig_types[100]
-#define SWIGTYPE_p_void swig_types[101]
-static swig_type_info *swig_types[103];
-static swig_module_info swig_module = {swig_types, 102, 0, 0, 0, 0};
+#define SWIGTYPE_p_f_long_p_void_p_apr_pool_t__void swig_types[6]
+#define SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[7]
+#define SWIGTYPE_p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[8]
+#define SWIGTYPE_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t swig_types[9]
+#define SWIGTYPE_p_f_p_void__p_svn_error_t swig_types[10]
+#define SWIGTYPE_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t swig_types[11]
+#define SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t swig_types[12]
+#define SWIGTYPE_p_f_p_void_p_struct_svn_error_t__void swig_types[13]
+#define SWIGTYPE_p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t swig_types[14]
+#define SWIGTYPE_p_int swig_types[15]
+#define SWIGTYPE_p_long swig_types[16]
+#define SWIGTYPE_p_p_apr_array_header_t swig_types[17]
+#define SWIGTYPE_p_p_apr_hash_t swig_types[18]
+#define SWIGTYPE_p_p_char swig_types[19]
+#define SWIGTYPE_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t swig_types[20]
+#define SWIGTYPE_p_p_svn_checksum_t swig_types[21]
+#define SWIGTYPE_p_p_svn_fs_access_t swig_types[22]
+#define SWIGTYPE_p_p_svn_fs_history_t swig_types[23]
+#define SWIGTYPE_p_p_svn_fs_id_t swig_types[24]
+#define SWIGTYPE_p_p_svn_fs_root_t swig_types[25]
+#define SWIGTYPE_p_p_svn_fs_t swig_types[26]
+#define SWIGTYPE_p_p_svn_fs_txn_t swig_types[27]
+#define SWIGTYPE_p_p_svn_lock_t swig_types[28]
+#define SWIGTYPE_p_p_svn_stream_t swig_types[29]
+#define SWIGTYPE_p_p_svn_string_t swig_types[30]
+#define SWIGTYPE_p_p_svn_txdelta_stream_t swig_types[31]
+#define SWIGTYPE_p_p_void swig_types[32]
+#define SWIGTYPE_p_svn_auth_baton_t swig_types[33]
+#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[34]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[35]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[36]
+#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[37]
+#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[38]
+#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[39]
+#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[40]
+#define SWIGTYPE_p_svn_auth_provider_t swig_types[41]
+#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[42]
+#define SWIGTYPE_p_svn_checksum_ctx_t swig_types[43]
+#define SWIGTYPE_p_svn_checksum_kind_t swig_types[44]
+#define SWIGTYPE_p_svn_checksum_t swig_types[45]
+#define SWIGTYPE_p_svn_commit_info_t swig_types[46]
+#define SWIGTYPE_p_svn_config_t swig_types[47]
+#define SWIGTYPE_p_svn_delta_editor_t swig_types[48]
+#define SWIGTYPE_p_svn_depth_t swig_types[49]
+#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[50]
+#define SWIGTYPE_p_svn_diff_datasource_e swig_types[51]
+#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[52]
+#define SWIGTYPE_p_svn_diff_file_options_t swig_types[53]
+#define SWIGTYPE_p_svn_diff_fns2_t swig_types[54]
+#define SWIGTYPE_p_svn_diff_fns_t swig_types[55]
+#define SWIGTYPE_p_svn_diff_hunk_t swig_types[56]
+#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[57]
+#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[58]
+#define SWIGTYPE_p_svn_diff_t swig_types[59]
+#define SWIGTYPE_p_svn_dirent_t swig_types[60]
+#define SWIGTYPE_p_svn_errno_t swig_types[61]
+#define SWIGTYPE_p_svn_error_t swig_types[62]
+#define SWIGTYPE_p_svn_fs_access_t swig_types[63]
+#define SWIGTYPE_p_svn_fs_dirent_t swig_types[64]
+#define SWIGTYPE_p_svn_fs_history_t swig_types[65]
+#define SWIGTYPE_p_svn_fs_id_t swig_types[66]
+#define SWIGTYPE_p_svn_fs_pack_notify_action_t swig_types[67]
+#define SWIGTYPE_p_svn_fs_path_change2_t swig_types[68]
+#define SWIGTYPE_p_svn_fs_path_change_kind_t swig_types[69]
+#define SWIGTYPE_p_svn_fs_path_change_t swig_types[70]
+#define SWIGTYPE_p_svn_fs_root_t swig_types[71]
+#define SWIGTYPE_p_svn_fs_t swig_types[72]
+#define SWIGTYPE_p_svn_fs_txn_t swig_types[73]
+#define SWIGTYPE_p_svn_io_dirent2_t swig_types[74]
+#define SWIGTYPE_p_svn_io_dirent_t swig_types[75]
+#define SWIGTYPE_p_svn_io_file_del_t swig_types[76]
+#define SWIGTYPE_p_svn_location_segment_t swig_types[77]
+#define SWIGTYPE_p_svn_lock_t swig_types[78]
+#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[79]
+#define SWIGTYPE_p_svn_log_changed_path_t swig_types[80]
+#define SWIGTYPE_p_svn_log_entry_t swig_types[81]
+#define SWIGTYPE_p_svn_merge_range_t swig_types[82]
+#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[83]
+#define SWIGTYPE_p_svn_node_kind_t swig_types[84]
+#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[85]
+#define SWIGTYPE_p_svn_opt_revision_t swig_types[86]
+#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[87]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[88]
+#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[89]
+#define SWIGTYPE_p_svn_patch_file_t swig_types[90]
+#define SWIGTYPE_p_svn_patch_t swig_types[91]
+#define SWIGTYPE_p_svn_prop_inherited_item_t swig_types[92]
+#define SWIGTYPE_p_svn_prop_kind swig_types[93]
+#define SWIGTYPE_p_svn_prop_patch_t swig_types[94]
+#define SWIGTYPE_p_svn_stream_mark_t swig_types[95]
+#define SWIGTYPE_p_svn_stream_t swig_types[96]
+#define SWIGTYPE_p_svn_string_t swig_types[97]
+#define SWIGTYPE_p_svn_stringbuf_t swig_types[98]
+#define SWIGTYPE_p_svn_tristate_t swig_types[99]
+#define SWIGTYPE_p_svn_txdelta_op_t swig_types[100]
+#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[101]
+#define SWIGTYPE_p_svn_txdelta_window_t swig_types[102]
+#define SWIGTYPE_p_svn_version_checklist_t swig_types[103]
+#define SWIGTYPE_p_svn_version_ext_linked_lib_t swig_types[104]
+#define SWIGTYPE_p_svn_version_ext_loaded_lib_t swig_types[105]
+#define SWIGTYPE_p_svn_version_extended_t swig_types[106]
+#define SWIGTYPE_p_svn_version_t swig_types[107]
+#define SWIGTYPE_p_unsigned_char swig_types[108]
+#define SWIGTYPE_p_unsigned_long swig_types[109]
+#define SWIGTYPE_p_void swig_types[110]
+static swig_type_info *swig_types[112];
+static swig_module_info swig_module = {swig_types, 111, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@@ -1910,7 +1919,7 @@ static VALUE mFs;
#define SWIG_RUBY_THREAD_END_BLOCK
-#define SWIGVERSION 0x020004
+#define SWIGVERSION 0x020009
#define SWIG_VERSION SWIGVERSION
@@ -2023,11 +2032,7 @@ SWIGINTERN int
SWIG_AsCharPtrAndSize(VALUE obj, char** cptr, size_t* psize, int *alloc)
{
if (TYPE(obj) == T_STRING) {
- #if defined(StringValuePtr)
char *cstr = StringValuePtr(obj);
- #else
- char *cstr = STR2CSTR(obj);
- #endif
size_t size = RSTRING_LEN(obj) + 1;
if (cptr) {
if (alloc) {
@@ -2077,7 +2082,7 @@ SWIG_ruby_failed(void)
}
-/*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
+/*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
SWIGINTERN VALUE SWIG_AUX_NUM2LONG(VALUE *args)
{
VALUE obj = args[0];
@@ -2132,7 +2137,7 @@ SWIG_From_int (int value)
}
-/*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
+/*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
SWIGINTERN VALUE SWIG_AUX_NUM2ULONG(VALUE *args)
{
VALUE obj = args[0];
@@ -2166,6 +2171,21 @@ static void svn_fs_invoke_warning_callback(
_obj(baton, err);
}
+static void svn_fs_invoke_progress_notify_func(
+ svn_fs_progress_notify_func_t _obj, svn_revnum_t revision, void *baton, apr_pool_t *pool) {
+ _obj(revision, baton, pool);
+}
+
+static svn_error_t * svn_fs_invoke_freeze_func(
+ svn_fs_freeze_func_t _obj, void *baton, apr_pool_t *pool) {
+ return _obj(baton, pool);
+}
+
+static svn_error_t * svn_fs_invoke_process_contents_func(
+ svn_fs_process_contents_func_t _obj, const unsigned char *contents, apr_size_t len, void *baton, apr_pool_t *scratch_pool) {
+ return _obj(contents, len, baton, scratch_pool);
+}
+
static svn_error_t * svn_fs_invoke_get_locks_callback(
svn_fs_get_locks_callback_t _obj, void *baton, svn_lock_t *lock, apr_pool_t *pool) {
return _obj(baton, lock, pool);
@@ -2787,6 +2807,65 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_fs_config(int argc, VALUE *argv, VALUE self) {
+ svn_fs_t *arg1 = (svn_fs_t *) 0 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ apr_hash_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg2);
+ _global_pool = arg2;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 1) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_fs_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_t *","svn_fs_config", 1, argv[0] ));
+ }
+ arg1 = (svn_fs_t *)(argp1);
+ if (argc > 1) {
+
+ }
+ {
+ if (!arg1) {
+ svn_swig_rb_raise_svn_fs_already_close();
+ }
+ }
+ {
+ result = (apr_hash_t *)svn_fs_config(arg1,arg2);
+
+
+
+ }
+ vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_hash_t, 0 | 0 );
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_fs_delete_fs(int argc, VALUE *argv, VALUE self) {
char *arg1 = (char *) 0 ;
apr_pool_t *arg2 = (apr_pool_t *) 0 ;
@@ -2851,6 +2930,94 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_fs_hotcopy2(int argc, VALUE *argv, VALUE self) {
+ char *arg1 = (char *) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ svn_cancel_func_t arg5 = (svn_cancel_func_t) 0 ;
+ void *arg6 = (void *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg7);
+ _global_pool = arg7;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 5) || (argc > 6)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 5)",argc); SWIG_fail;
+ }
+ res1 = SWIG_AsCharPtrAndSize(argv[0], &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "char const *","svn_fs_hotcopy2", 1, argv[0] ));
+ }
+ arg1 = (char *)(buf1);
+ res2 = SWIG_AsCharPtrAndSize(argv[1], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","svn_fs_hotcopy2", 2, argv[1] ));
+ }
+ arg2 = (char *)(buf2);
+ arg3 = RTEST(argv[2]);
+ arg4 = RTEST(argv[3]);
+ {
+ arg5 = svn_swig_rb_cancel_func;
+ arg6 = (void *)svn_swig_rb_make_baton(argv[4], _global_svn_swig_rb_pool);
+ }
+ if (argc > 5) {
+
+ }
+ {
+ result = (svn_error_t *)svn_fs_hotcopy2((char const *)arg1,(char const *)arg2,arg3,arg4,arg5,arg6,arg7);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ svn_swig_rb_set_baton(vresult, (VALUE)arg6);
+ }
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_fs_hotcopy(int argc, VALUE *argv, VALUE self) {
char *arg1 = (char *) 0 ;
char *arg2 = (char *) 0 ;
@@ -3001,6 +3168,85 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_fs_freeze(int argc, VALUE *argv, VALUE self) {
+ svn_fs_t *arg1 = (svn_fs_t *) 0 ;
+ svn_fs_freeze_func_t arg2 = (svn_fs_freeze_func_t) 0 ;
+ void *arg3 = (void *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res3 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg4);
+ _global_pool = arg4;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 3) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_fs_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_t *","svn_fs_freeze", 1, argv[0] ));
+ }
+ arg1 = (svn_fs_t *)(argp1);
+ {
+ int res = SWIG_ConvertFunctionPtr(argv[1], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_fs_freeze_func_t","svn_fs_freeze", 2, argv[1] ));
+ }
+ }
+ res3 = SWIG_ConvertPtr(argv[2],SWIG_as_voidptrptr(&arg3), 0, 0);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "void *","svn_fs_freeze", 3, argv[2] ));
+ }
+ if (argc > 3) {
+
+ }
+ {
+ if (!arg1) {
+ svn_swig_rb_raise_svn_fs_already_close();
+ }
+ }
+ {
+ result = (svn_error_t *)svn_fs_freeze(arg1,arg2,arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_fs_berkeley_logfiles(int argc, VALUE *argv, VALUE self) {
apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
char *arg2 = (char *) 0 ;
@@ -3519,9 +3765,6 @@ _wrap_svn_fs_create_access(int argc, VALUE *argv, VALUE self) {
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
svn_fs_access_t *temp1 ;
- int res2 ;
- char *buf2 = 0 ;
- int alloc2 = 0 ;
svn_error_t *result = 0 ;
VALUE vresult = Qnil;
@@ -3534,11 +3777,13 @@ _wrap_svn_fs_create_access(int argc, VALUE *argv, VALUE self) {
if ((argc < 1) || (argc > 2)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
}
- res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
- if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","svn_fs_create_access", 2, argv[0] ));
+ {
+ if (NIL_P(argv[0])) {
+ arg2 = NULL;
+ } else {
+ arg2 = StringValuePtr(argv[0]);
+ }
}
- arg2 = (char *)(buf2);
if (argc > 1) {
}
@@ -3559,7 +3804,6 @@ _wrap_svn_fs_create_access(int argc, VALUE *argv, VALUE self) {
{
vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_fs_access_t, 0));
}
- if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
{
VALUE target;
target = _global_vresult_address == &vresult ? self : vresult;
@@ -3569,7 +3813,6 @@ _wrap_svn_fs_create_access(int argc, VALUE *argv, VALUE self) {
}
return vresult;
fail:
- if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
{
VALUE target;
target = _global_vresult_address == &vresult ? self : vresult;
@@ -5303,11 +5546,11 @@ fail:
}
-swig_class SwigClassSvn_fs_path_change2_t;
+static swig_class SwigClassSvn_fs_path_change2_t;
SWIGINTERN VALUE
_wrap_svn_fs_path_change2_t_node_rev_id_set(int argc, VALUE *argv, VALUE self) {
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
svn_fs_id_t *arg2 = (svn_fs_id_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5319,9 +5562,9 @@ _wrap_svn_fs_path_change2_t_node_rev_id_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_path_change2_t *","node_rev_id", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_path_change2_t *","node_rev_id", 1, self ));
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_fs_id_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_fs_id_t const *","node_rev_id", 2, argv[0] ));
@@ -5336,7 +5579,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_path_change2_t_node_rev_id_get(int argc, VALUE *argv, VALUE self) {
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_fs_id_t *result = 0 ;
@@ -5347,9 +5590,9 @@ _wrap_svn_fs_path_change2_t_node_rev_id_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_path_change2_t *","node_rev_id", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_path_change2_t *","node_rev_id", 1, self ));
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
result = (svn_fs_id_t *) ((arg1)->node_rev_id);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_fs_id_t, 0 | 0 );
return vresult;
@@ -5360,7 +5603,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_path_change2_t_change_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
svn_fs_path_change_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5372,9 +5615,9 @@ _wrap_svn_fs_path_change2_t_change_kind_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_path_change2_t *","change_kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_path_change2_t *","change_kind", 1, self ));
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_fs_path_change_kind_t","change_kind", 2, argv[0] ));
@@ -5389,7 +5632,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_path_change2_t_change_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_fs_path_change_kind_t result;
@@ -5400,9 +5643,9 @@ _wrap_svn_fs_path_change2_t_change_kind_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_path_change2_t *","change_kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_path_change2_t *","change_kind", 1, self ));
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
result = (svn_fs_path_change_kind_t) ((arg1)->change_kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -5413,7 +5656,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_path_change2_t_text_mod_set(int argc, VALUE *argv, VALUE self) {
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5423,9 +5666,9 @@ _wrap_svn_fs_path_change2_t_text_mod_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_path_change2_t *","text_mod", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_path_change2_t *","text_mod", 1, self ));
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->text_mod = arg2;
return Qnil;
@@ -5436,7 +5679,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_path_change2_t_text_mod_get(int argc, VALUE *argv, VALUE self) {
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -5447,9 +5690,9 @@ _wrap_svn_fs_path_change2_t_text_mod_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_path_change2_t *","text_mod", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_path_change2_t *","text_mod", 1, self ));
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
result = (svn_boolean_t) ((arg1)->text_mod);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -5460,7 +5703,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_path_change2_t_prop_mod_set(int argc, VALUE *argv, VALUE self) {
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5470,9 +5713,9 @@ _wrap_svn_fs_path_change2_t_prop_mod_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_path_change2_t *","prop_mod", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_path_change2_t *","prop_mod", 1, self ));
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->prop_mod = arg2;
return Qnil;
@@ -5483,7 +5726,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_path_change2_t_prop_mod_get(int argc, VALUE *argv, VALUE self) {
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -5494,9 +5737,9 @@ _wrap_svn_fs_path_change2_t_prop_mod_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_path_change2_t *","prop_mod", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_path_change2_t *","prop_mod", 1, self ));
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
result = (svn_boolean_t) ((arg1)->prop_mod);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -5507,7 +5750,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_path_change2_t_node_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5519,9 +5762,9 @@ _wrap_svn_fs_path_change2_t_node_kind_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_path_change2_t *","node_kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_path_change2_t *","node_kind", 1, self ));
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_node_kind_t","node_kind", 2, argv[0] ));
@@ -5536,7 +5779,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_path_change2_t_node_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_node_kind_t result;
@@ -5547,9 +5790,9 @@ _wrap_svn_fs_path_change2_t_node_kind_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_path_change2_t *","node_kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_path_change2_t *","node_kind", 1, self ));
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->node_kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -5560,7 +5803,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_path_change2_t_copyfrom_known_set(int argc, VALUE *argv, VALUE self) {
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5570,9 +5813,9 @@ _wrap_svn_fs_path_change2_t_copyfrom_known_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_path_change2_t *","copyfrom_known", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_path_change2_t *","copyfrom_known", 1, self ));
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->copyfrom_known = arg2;
return Qnil;
@@ -5583,7 +5826,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_path_change2_t_copyfrom_known_get(int argc, VALUE *argv, VALUE self) {
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -5594,9 +5837,9 @@ _wrap_svn_fs_path_change2_t_copyfrom_known_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_path_change2_t *","copyfrom_known", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_path_change2_t *","copyfrom_known", 1, self ));
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
result = (svn_boolean_t) ((arg1)->copyfrom_known);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -5607,7 +5850,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_path_change2_t_copyfrom_rev_set(int argc, VALUE *argv, VALUE self) {
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5619,9 +5862,9 @@ _wrap_svn_fs_path_change2_t_copyfrom_rev_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_path_change2_t *","copyfrom_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_path_change2_t *","copyfrom_rev", 1, self ));
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","copyfrom_rev", 2, argv[0] ));
@@ -5636,7 +5879,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_path_change2_t_copyfrom_rev_get(int argc, VALUE *argv, VALUE self) {
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -5647,9 +5890,9 @@ _wrap_svn_fs_path_change2_t_copyfrom_rev_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_path_change2_t *","copyfrom_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_path_change2_t *","copyfrom_rev", 1, self ));
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
result = (svn_revnum_t) ((arg1)->copyfrom_rev);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -5660,7 +5903,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_path_change2_t_copyfrom_path_set(int argc, VALUE *argv, VALUE self) {
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5670,9 +5913,9 @@ _wrap_svn_fs_path_change2_t_copyfrom_path_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_path_change2_t *","copyfrom_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_path_change2_t *","copyfrom_path", 1, self ));
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
{
if (NIL_P(argv[0])) {
arg2 = NULL;
@@ -5696,7 +5939,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_path_change2_t_copyfrom_path_get(int argc, VALUE *argv, VALUE self) {
- svn_fs_path_change2_t *arg1 = (svn_fs_path_change2_t *) 0 ;
+ struct svn_fs_path_change2_t *arg1 = (struct svn_fs_path_change2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -5707,9 +5950,9 @@ _wrap_svn_fs_path_change2_t_copyfrom_path_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_path_change2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_path_change2_t *","copyfrom_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_path_change2_t *","copyfrom_path", 1, self ));
}
- arg1 = (svn_fs_path_change2_t *)(argp1);
+ arg1 = (struct svn_fs_path_change2_t *)(argp1);
result = (char *) ((arg1)->copyfrom_path);
{
if (result) {
@@ -5724,11 +5967,11 @@ fail:
}
-swig_class SwigClassSvn_fs_path_change_t;
+static swig_class SwigClassSvn_fs_path_change_t;
SWIGINTERN VALUE
_wrap_svn_fs_path_change_t_node_rev_id_set(int argc, VALUE *argv, VALUE self) {
- svn_fs_path_change_t *arg1 = (svn_fs_path_change_t *) 0 ;
+ struct svn_fs_path_change_t *arg1 = (struct svn_fs_path_change_t *) 0 ;
svn_fs_id_t *arg2 = (svn_fs_id_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5740,9 +5983,9 @@ _wrap_svn_fs_path_change_t_node_rev_id_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_path_change_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_path_change_t *","node_rev_id", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_path_change_t *","node_rev_id", 1, self ));
}
- arg1 = (svn_fs_path_change_t *)(argp1);
+ arg1 = (struct svn_fs_path_change_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_fs_id_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_fs_id_t const *","node_rev_id", 2, argv[0] ));
@@ -5757,7 +6000,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_path_change_t_node_rev_id_get(int argc, VALUE *argv, VALUE self) {
- svn_fs_path_change_t *arg1 = (svn_fs_path_change_t *) 0 ;
+ struct svn_fs_path_change_t *arg1 = (struct svn_fs_path_change_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_fs_id_t *result = 0 ;
@@ -5768,9 +6011,9 @@ _wrap_svn_fs_path_change_t_node_rev_id_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_path_change_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_path_change_t *","node_rev_id", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_path_change_t *","node_rev_id", 1, self ));
}
- arg1 = (svn_fs_path_change_t *)(argp1);
+ arg1 = (struct svn_fs_path_change_t *)(argp1);
result = (svn_fs_id_t *) ((arg1)->node_rev_id);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_fs_id_t, 0 | 0 );
return vresult;
@@ -5781,7 +6024,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_path_change_t_change_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_fs_path_change_t *arg1 = (svn_fs_path_change_t *) 0 ;
+ struct svn_fs_path_change_t *arg1 = (struct svn_fs_path_change_t *) 0 ;
svn_fs_path_change_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5793,9 +6036,9 @@ _wrap_svn_fs_path_change_t_change_kind_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_path_change_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_path_change_t *","change_kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_path_change_t *","change_kind", 1, self ));
}
- arg1 = (svn_fs_path_change_t *)(argp1);
+ arg1 = (struct svn_fs_path_change_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_fs_path_change_kind_t","change_kind", 2, argv[0] ));
@@ -5810,7 +6053,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_path_change_t_change_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_fs_path_change_t *arg1 = (svn_fs_path_change_t *) 0 ;
+ struct svn_fs_path_change_t *arg1 = (struct svn_fs_path_change_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_fs_path_change_kind_t result;
@@ -5821,9 +6064,9 @@ _wrap_svn_fs_path_change_t_change_kind_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_path_change_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_path_change_t *","change_kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_path_change_t *","change_kind", 1, self ));
}
- arg1 = (svn_fs_path_change_t *)(argp1);
+ arg1 = (struct svn_fs_path_change_t *)(argp1);
result = (svn_fs_path_change_kind_t) ((arg1)->change_kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -5834,7 +6077,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_path_change_t_text_mod_set(int argc, VALUE *argv, VALUE self) {
- svn_fs_path_change_t *arg1 = (svn_fs_path_change_t *) 0 ;
+ struct svn_fs_path_change_t *arg1 = (struct svn_fs_path_change_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5844,9 +6087,9 @@ _wrap_svn_fs_path_change_t_text_mod_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_path_change_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_path_change_t *","text_mod", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_path_change_t *","text_mod", 1, self ));
}
- arg1 = (svn_fs_path_change_t *)(argp1);
+ arg1 = (struct svn_fs_path_change_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->text_mod = arg2;
return Qnil;
@@ -5857,7 +6100,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_path_change_t_text_mod_get(int argc, VALUE *argv, VALUE self) {
- svn_fs_path_change_t *arg1 = (svn_fs_path_change_t *) 0 ;
+ struct svn_fs_path_change_t *arg1 = (struct svn_fs_path_change_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -5868,9 +6111,9 @@ _wrap_svn_fs_path_change_t_text_mod_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_path_change_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_path_change_t *","text_mod", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_path_change_t *","text_mod", 1, self ));
}
- arg1 = (svn_fs_path_change_t *)(argp1);
+ arg1 = (struct svn_fs_path_change_t *)(argp1);
result = (svn_boolean_t) ((arg1)->text_mod);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -5881,7 +6124,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_path_change_t_prop_mod_set(int argc, VALUE *argv, VALUE self) {
- svn_fs_path_change_t *arg1 = (svn_fs_path_change_t *) 0 ;
+ struct svn_fs_path_change_t *arg1 = (struct svn_fs_path_change_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5891,9 +6134,9 @@ _wrap_svn_fs_path_change_t_prop_mod_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_path_change_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_path_change_t *","prop_mod", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_path_change_t *","prop_mod", 1, self ));
}
- arg1 = (svn_fs_path_change_t *)(argp1);
+ arg1 = (struct svn_fs_path_change_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->prop_mod = arg2;
return Qnil;
@@ -5904,7 +6147,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_path_change_t_prop_mod_get(int argc, VALUE *argv, VALUE self) {
- svn_fs_path_change_t *arg1 = (svn_fs_path_change_t *) 0 ;
+ struct svn_fs_path_change_t *arg1 = (struct svn_fs_path_change_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -5915,9 +6158,9 @@ _wrap_svn_fs_path_change_t_prop_mod_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_path_change_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_path_change_t *","prop_mod", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_path_change_t *","prop_mod", 1, self ));
}
- arg1 = (svn_fs_path_change_t *)(argp1);
+ arg1 = (struct svn_fs_path_change_t *)(argp1);
result = (svn_boolean_t) ((arg1)->prop_mod);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -7461,6 +7704,108 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_fs_get_mergeinfo2(int argc, VALUE *argv, VALUE self) {
+ svn_mergeinfo_catalog_t *arg1 = (svn_mergeinfo_catalog_t *) 0 ;
+ svn_fs_root_t *arg2 = (svn_fs_root_t *) 0 ;
+ apr_array_header_t *arg3 = (apr_array_header_t *) 0 ;
+ svn_mergeinfo_inheritance_t arg4 ;
+ svn_boolean_t arg5 ;
+ svn_boolean_t arg6 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg8 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_mergeinfo_catalog_t temp1 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg7);
+ _global_pool = arg7;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg8);
+ _global_pool = arg8;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ if ((argc < 5) || (argc > 7)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 5)",argc); SWIG_fail;
+ }
+ res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_fs_root_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_fs_root_t *","svn_fs_get_mergeinfo2", 2, argv[0] ));
+ }
+ arg2 = (svn_fs_root_t *)(argp2);
+ {
+ arg3 = svn_swig_rb_strings_to_apr_array(argv[1], _global_pool);
+ }
+ {
+ arg4 = svn_swig_rb_to_mergeinfo_inheritance(argv[2]);
+ }
+ arg5 = RTEST(argv[3]);
+ arg6 = RTEST(argv[4]);
+ if (argc > 5) {
+
+ }
+ if (argc > 6) {
+
+ }
+ {
+ result = (svn_error_t *)svn_fs_get_mergeinfo2(arg1,arg2,(apr_array_header_t const *)arg3,arg4,arg5,arg6,arg7,arg8);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, svn_swig_rb_apr_hash_to_hash_merge_range_hash(*arg1));
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_fs_get_mergeinfo(int argc, VALUE *argv, VALUE self) {
svn_mergeinfo_catalog_t *arg1 = (svn_mergeinfo_catalog_t *) 0 ;
svn_fs_root_t *arg2 = (svn_fs_root_t *) 0 ;
@@ -7657,11 +8002,11 @@ fail:
}
-swig_class SwigClassSvn_fs_dirent_t;
+static swig_class SwigClassSvn_fs_dirent_t;
SWIGINTERN VALUE
_wrap_svn_fs_dirent_t_name_set(int argc, VALUE *argv, VALUE self) {
- svn_fs_dirent_t *arg1 = (svn_fs_dirent_t *) 0 ;
+ struct svn_fs_dirent_t *arg1 = (struct svn_fs_dirent_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7674,9 +8019,9 @@ _wrap_svn_fs_dirent_t_name_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_dirent_t *","name", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_dirent_t *","name", 1, self ));
}
- arg1 = (svn_fs_dirent_t *)(argp1);
+ arg1 = (struct svn_fs_dirent_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","name", 2, argv[0] ));
@@ -7700,7 +8045,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_dirent_t_name_get(int argc, VALUE *argv, VALUE self) {
- svn_fs_dirent_t *arg1 = (svn_fs_dirent_t *) 0 ;
+ struct svn_fs_dirent_t *arg1 = (struct svn_fs_dirent_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -7711,9 +8056,9 @@ _wrap_svn_fs_dirent_t_name_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_dirent_t *","name", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_dirent_t *","name", 1, self ));
}
- arg1 = (svn_fs_dirent_t *)(argp1);
+ arg1 = (struct svn_fs_dirent_t *)(argp1);
result = (char *) ((arg1)->name);
{
if (result) {
@@ -7730,7 +8075,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_dirent_t_id_set(int argc, VALUE *argv, VALUE self) {
- svn_fs_dirent_t *arg1 = (svn_fs_dirent_t *) 0 ;
+ struct svn_fs_dirent_t *arg1 = (struct svn_fs_dirent_t *) 0 ;
svn_fs_id_t *arg2 = (svn_fs_id_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7742,9 +8087,9 @@ _wrap_svn_fs_dirent_t_id_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_dirent_t *","id", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_dirent_t *","id", 1, self ));
}
- arg1 = (svn_fs_dirent_t *)(argp1);
+ arg1 = (struct svn_fs_dirent_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_fs_id_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_fs_id_t const *","id", 2, argv[0] ));
@@ -7759,7 +8104,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_dirent_t_id_get(int argc, VALUE *argv, VALUE self) {
- svn_fs_dirent_t *arg1 = (svn_fs_dirent_t *) 0 ;
+ struct svn_fs_dirent_t *arg1 = (struct svn_fs_dirent_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_fs_id_t *result = 0 ;
@@ -7770,9 +8115,9 @@ _wrap_svn_fs_dirent_t_id_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_dirent_t *","id", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_dirent_t *","id", 1, self ));
}
- arg1 = (svn_fs_dirent_t *)(argp1);
+ arg1 = (struct svn_fs_dirent_t *)(argp1);
result = (svn_fs_id_t *) ((arg1)->id);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_fs_id_t, 0 | 0 );
return vresult;
@@ -7783,7 +8128,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_dirent_t_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_fs_dirent_t *arg1 = (svn_fs_dirent_t *) 0 ;
+ struct svn_fs_dirent_t *arg1 = (struct svn_fs_dirent_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7795,9 +8140,9 @@ _wrap_svn_fs_dirent_t_kind_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_dirent_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_dirent_t *","kind", 1, self ));
}
- arg1 = (svn_fs_dirent_t *)(argp1);
+ arg1 = (struct svn_fs_dirent_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_node_kind_t","kind", 2, argv[0] ));
@@ -7812,7 +8157,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_fs_dirent_t_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_fs_dirent_t *arg1 = (svn_fs_dirent_t *) 0 ;
+ struct svn_fs_dirent_t *arg1 = (struct svn_fs_dirent_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_node_kind_t result;
@@ -7823,9 +8168,9 @@ _wrap_svn_fs_dirent_t_kind_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_fs_dirent_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_dirent_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_fs_dirent_t *","kind", 1, self ));
}
- arg1 = (svn_fs_dirent_t *)(argp1);
+ arg1 = (struct svn_fs_dirent_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -8320,8 +8665,8 @@ _wrap_svn_fs_file_checksum(int argc, VALUE *argv, VALUE self) {
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
svn_checksum_t *temp1 ;
- void *argp2 ;
- int res2 = 0 ;
+ int val2 ;
+ int ecode2 = 0 ;
void *argp3 = 0 ;
int res3 = 0 ;
int res4 ;
@@ -8339,17 +8684,11 @@ _wrap_svn_fs_file_checksum(int argc, VALUE *argv, VALUE self) {
if ((argc < 4) || (argc > 5)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 4)",argc); SWIG_fail;
}
- {
- res2 = SWIG_ConvertPtr(argv[0], &argp2, SWIGTYPE_p_svn_checksum_kind_t, 0 );
- if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_checksum_kind_t","svn_fs_file_checksum", 2, argv[0] ));
- }
- if (!argp2) {
- SWIG_exception_fail(SWIG_ValueError, Ruby_Format_TypeError("invalid null reference ", "svn_checksum_kind_t","svn_fs_file_checksum", 2, argv[0]));
- } else {
- arg2 = *((svn_checksum_kind_t *)(argp2));
- }
- }
+ ecode2 = SWIG_AsVal_int(argv[0], &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_checksum_kind_t","svn_fs_file_checksum", 2, argv[0] ));
+ }
+ arg2 = (svn_checksum_kind_t)(val2);
res3 = SWIG_ConvertPtr(argv[1], &argp3,SWIGTYPE_p_svn_fs_root_t, 0 | 0 );
if (!SWIG_IsOK(res3)) {
SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "svn_fs_root_t *","svn_fs_file_checksum", 3, argv[1] ));
@@ -8567,6 +8906,97 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_fs_try_process_file_contents(int argc, VALUE *argv, VALUE self) {
+ svn_boolean_t *arg1 = (svn_boolean_t *) 0 ;
+ svn_fs_root_t *arg2 = (svn_fs_root_t *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_fs_process_contents_func_t arg4 = (svn_fs_process_contents_func_t) 0 ;
+ void *arg5 = (void *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_boolean_t temp1 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int res5 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg6);
+ _global_pool = arg6;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ if ((argc < 4) || (argc > 5)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 4)",argc); SWIG_fail;
+ }
+ res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_fs_root_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_fs_root_t *","svn_fs_try_process_file_contents", 2, argv[0] ));
+ }
+ arg2 = (svn_fs_root_t *)(argp2);
+ res3 = SWIG_AsCharPtrAndSize(argv[1], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","svn_fs_try_process_file_contents", 3, argv[1] ));
+ }
+ arg3 = (char *)(buf3);
+ {
+ int res = SWIG_ConvertFunctionPtr(argv[2], (void**)(&arg4), SWIGTYPE_p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_fs_process_contents_func_t","svn_fs_try_process_file_contents", 4, argv[2] ));
+ }
+ }
+ res5 = SWIG_ConvertPtr(argv[3],SWIG_as_voidptrptr(&arg5), 0, 0);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), Ruby_Format_TypeError( "", "void *","svn_fs_try_process_file_contents", 5, argv[3] ));
+ }
+ if (argc > 4) {
+
+ }
+ {
+ result = (svn_error_t *)svn_fs_try_process_file_contents(arg1,arg2,(char const *)arg3,arg4,arg5,arg6);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, *arg1 ? Qtrue : Qfalse);
+ }
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_fs_make_file(int argc, VALUE *argv, VALUE self) {
svn_fs_root_t *arg1 = (svn_fs_root_t *) 0 ;
char *arg2 = (char *) 0 ;
@@ -10384,6 +10814,188 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_fs_verify(int argc, VALUE *argv, VALUE self) {
+ char *arg1 = (char *) 0 ;
+ apr_hash_t *arg2 = (apr_hash_t *) 0 ;
+ svn_revnum_t arg3 ;
+ svn_revnum_t arg4 ;
+ svn_fs_progress_notify_func_t arg5 = (svn_fs_progress_notify_func_t) 0 ;
+ void *arg6 = (void *) 0 ;
+ svn_cancel_func_t arg7 = (svn_cancel_func_t) 0 ;
+ void *arg8 = (void *) 0 ;
+ apr_pool_t *arg9 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ long val3 ;
+ int ecode3 = 0 ;
+ long val4 ;
+ int ecode4 = 0 ;
+ int res6 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg9);
+ _global_pool = arg9;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 7) || (argc > 8)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 7)",argc); SWIG_fail;
+ }
+ res1 = SWIG_AsCharPtrAndSize(argv[0], &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "char const *","svn_fs_verify", 1, argv[0] ));
+ }
+ arg1 = (char *)(buf1);
+ {
+ VALUE rb_pool = Qnil;
+ if (!_global_pool) {
+ svn_swig_rb_get_pool(argc, argv, self, &rb_pool, &_global_pool);
+ svn_swig_rb_push_pool(rb_pool);
+ }
+ arg2 = (NIL_P(argv[1])) ? NULL :
+ svn_swig_rb_hash_to_apr_hash_string(argv[1], _global_pool);
+ _global_pool = NULL;
+ if (!NIL_P(rb_pool)) {
+ if (NIL_P(arg2)) {
+ svn_swig_rb_destroy_pool(rb_pool);
+ } else {
+ svn_swig_rb_set_pool_for_no_swig_type(argv[1], rb_pool);
+ }
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ }
+ ecode3 = SWIG_AsVal_long(argv[2], &val3);
+ if (!SWIG_IsOK(ecode3)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode3), Ruby_Format_TypeError( "", "svn_revnum_t","svn_fs_verify", 3, argv[2] ));
+ }
+ arg3 = (svn_revnum_t)(val3);
+ ecode4 = SWIG_AsVal_long(argv[3], &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), Ruby_Format_TypeError( "", "svn_revnum_t","svn_fs_verify", 4, argv[3] ));
+ }
+ arg4 = (svn_revnum_t)(val4);
+ {
+ int res = SWIG_ConvertFunctionPtr(argv[4], (void**)(&arg5), SWIGTYPE_p_f_long_p_void_p_apr_pool_t__void);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_fs_progress_notify_func_t","svn_fs_verify", 5, argv[4] ));
+ }
+ }
+ res6 = SWIG_ConvertPtr(argv[5],SWIG_as_voidptrptr(&arg6), 0, 0);
+ if (!SWIG_IsOK(res6)) {
+ SWIG_exception_fail(SWIG_ArgError(res6), Ruby_Format_TypeError( "", "void *","svn_fs_verify", 6, argv[5] ));
+ }
+ {
+ arg7 = svn_swig_rb_cancel_func;
+ arg8 = (void *)svn_swig_rb_make_baton(argv[6], _global_svn_swig_rb_pool);
+ }
+ if (argc > 7) {
+
+ }
+ {
+ result = (svn_error_t *)svn_fs_verify((char const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ svn_swig_rb_set_baton(vresult, (VALUE)arg8);
+ }
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_fs_verify_root(int argc, VALUE *argv, VALUE self) {
+ svn_fs_root_t *arg1 = (svn_fs_root_t *) 0 ;
+ apr_pool_t *arg2 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg2);
+ _global_pool = arg2;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 1) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_fs_root_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_fs_root_t *","svn_fs_verify_root", 1, argv[0] ));
+ }
+ arg1 = (svn_fs_root_t *)(argp1);
+ if (argc > 1) {
+
+ }
+ {
+ result = (svn_error_t *)svn_fs_verify_root(arg1,arg2);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_fs_invoke_warning_callback(int argc, VALUE *argv, VALUE self) {
svn_fs_warning_callback_t arg1 = (svn_fs_warning_callback_t) 0 ;
void *arg2 = (void *) 0 ;
@@ -10423,6 +11035,218 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_fs_invoke_progress_notify_func(int argc, VALUE *argv, VALUE self) {
+ svn_fs_progress_notify_func_t arg1 = (svn_fs_progress_notify_func_t) 0 ;
+ svn_revnum_t arg2 ;
+ void *arg3 = (void *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ long val2 ;
+ int ecode2 = 0 ;
+ int res3 ;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg4);
+ _global_pool = arg4;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 3) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg1), SWIGTYPE_p_f_long_p_void_p_apr_pool_t__void);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_fs_progress_notify_func_t","svn_fs_invoke_progress_notify_func", 1, argv[0] ));
+ }
+ }
+ ecode2 = SWIG_AsVal_long(argv[1], &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","svn_fs_invoke_progress_notify_func", 2, argv[1] ));
+ }
+ arg2 = (svn_revnum_t)(val2);
+ res3 = SWIG_ConvertPtr(argv[2],SWIG_as_voidptrptr(&arg3), 0, 0);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "void *","svn_fs_invoke_progress_notify_func", 3, argv[2] ));
+ }
+ if (argc > 3) {
+
+ }
+ {
+ svn_fs_invoke_progress_notify_func(arg1,arg2,arg3,arg4);
+
+
+
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_fs_invoke_freeze_func(int argc, VALUE *argv, VALUE self) {
+ svn_fs_freeze_func_t arg1 = (svn_fs_freeze_func_t) 0 ;
+ void *arg2 = (void *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int res2 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg3);
+ _global_pool = arg3;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 2) || (argc > 3)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg1), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_fs_freeze_func_t","svn_fs_invoke_freeze_func", 1, argv[0] ));
+ }
+ }
+ res2 = SWIG_ConvertPtr(argv[1],SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "void *","svn_fs_invoke_freeze_func", 2, argv[1] ));
+ }
+ if (argc > 2) {
+
+ }
+ {
+ result = (svn_error_t *)svn_fs_invoke_freeze_func(arg1,arg2,arg3);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_fs_invoke_process_contents_func(int argc, VALUE *argv, VALUE self) {
+ svn_fs_process_contents_func_t arg1 = (svn_fs_process_contents_func_t) 0 ;
+ unsigned char *arg2 = (unsigned char *) 0 ;
+ apr_size_t arg3 ;
+ void *arg4 = (void *) 0 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ unsigned long val3 ;
+ int ecode3 = 0 ;
+ int res4 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg5);
+ _global_pool = arg5;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 4) || (argc > 5)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 4)",argc); SWIG_fail;
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg1), SWIGTYPE_p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_fs_process_contents_func_t","svn_fs_invoke_process_contents_func", 1, argv[0] ));
+ }
+ }
+ res2 = SWIG_ConvertPtr(argv[1], &argp2,SWIGTYPE_p_unsigned_char, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "unsigned char const *","svn_fs_invoke_process_contents_func", 2, argv[1] ));
+ }
+ arg2 = (unsigned char *)(argp2);
+ ecode3 = SWIG_AsVal_unsigned_SS_long(argv[2], &val3);
+ if (!SWIG_IsOK(ecode3)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode3), Ruby_Format_TypeError( "", "apr_size_t","svn_fs_invoke_process_contents_func", 3, argv[2] ));
+ }
+ arg3 = (apr_size_t)(val3);
+ res4 = SWIG_ConvertPtr(argv[3],SWIG_as_voidptrptr(&arg4), 0, 0);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "void *","svn_fs_invoke_process_contents_func", 4, argv[3] ));
+ }
+ if (argc > 4) {
+
+ }
+ {
+ result = (svn_error_t *)svn_fs_invoke_process_contents_func(arg1,(unsigned char const *)arg2,arg3,arg4,arg5);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_fs_invoke_get_locks_callback(int argc, VALUE *argv, VALUE self) {
svn_fs_get_locks_callback_t arg1 = (svn_fs_get_locks_callback_t) 0 ;
void *arg2 = (void *) 0 ;
@@ -10577,16 +11401,19 @@ fail:
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
-static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *|svn_rangelist_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_hash_t = {"_p_apr_hash_t", "apr_hash_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int32_t = {"_p_apr_int32_t", "apr_int32_t *|time_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int64_t = {"_p_apr_int64_t", "apr_int64_t *|svn_filesize_t *|apr_time_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_pool_t = {"_p_apr_pool_t", "apr_pool_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_long_p_void_p_apr_pool_t__void = {"_p_f_long_p_void_p_apr_pool_t__void", "void (*)(long,void *,apr_pool_t *)|svn_fs_progress_notify_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_opt_subcommand_t *|struct svn_error_t *(*)(apr_getopt_t *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_fs_process_contents_func_t|struct svn_error_t *(*)(unsigned char const *,apr_size_t,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t = {"_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t", "struct svn_error_t *(*)(svn_txdelta_window_t *,void *)|svn_txdelta_window_handler_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void__p_svn_error_t = {"_p_f_p_void__p_svn_error_t", "svn_cancel_func_t|struct svn_error_t *(*)(void *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,apr_int64_t,svn_fs_pack_notify_action_t,apr_pool_t *)|svn_fs_pack_notify_t", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,apr_pool_t *)|svn_fs_freeze_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_struct_svn_error_t__void = {"_p_f_p_void_p_struct_svn_error_t__void", "void (*)(void *,struct svn_error_t *)|svn_fs_warning_callback_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,svn_lock_t *,apr_pool_t *)|svn_fs_get_locks_callback_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_int = {"_p_int", "int *|svn_boolean_t *|apr_status_t *", 0, 0, (void*)0, 0};
@@ -10595,7 +11422,7 @@ static swig_type_info _swigt__p_p_apr_array_header_t = {"_p_p_apr_array_header_t
static swig_type_info _swigt__p_p_apr_hash_t = {"_p_p_apr_hash_t", "apr_hash_t **|svn_mergeinfo_catalog_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t = {"_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t", "svn_txdelta_window_handler_t *|struct svn_error_t *(**)(svn_txdelta_window_t *,void *)", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_p_svn_checksum_t = {"_p_p_svn_checksum_t", "svn_checksum_t **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_svn_checksum_t = {"_p_p_svn_checksum_t", "struct svn_checksum_t **|svn_checksum_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_fs_access_t = {"_p_p_svn_fs_access_t", "struct svn_fs_access_t **|svn_fs_access_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_fs_history_t = {"_p_p_svn_fs_history_t", "struct svn_fs_history_t **|svn_fs_history_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_fs_id_t = {"_p_p_svn_fs_id_t", "struct svn_fs_id_t **|svn_fs_id_t **", 0, 0, (void*)0, 0};
@@ -10617,7 +11444,9 @@ static swig_type_info _swigt__p_svn_auth_iterstate_t = {"_p_svn_auth_iterstate_t
static swig_type_info _swigt__p_svn_auth_provider_object_t = {"_p_svn_auth_provider_object_t", "struct svn_auth_provider_object_t *|svn_auth_provider_object_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_provider_t = {"_p_svn_auth_provider_t", "struct svn_auth_provider_t *|svn_auth_provider_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_ssl_server_cert_info_t = {"_p_svn_auth_ssl_server_cert_info_t", "struct svn_auth_ssl_server_cert_info_t *|svn_auth_ssl_server_cert_info_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_ctx_t = {"_p_svn_checksum_ctx_t", "struct svn_checksum_ctx_t *|svn_checksum_ctx_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "enum svn_checksum_kind_t *|svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "struct svn_checksum_t *|svn_checksum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_commit_info_t = {"_p_svn_commit_info_t", "struct svn_commit_info_t *|svn_commit_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_config_t = {"_p_svn_config_t", "struct svn_config_t *|svn_config_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_delta_editor_t = {"_p_svn_delta_editor_t", "struct svn_delta_editor_t *|svn_delta_editor_t *", 0, 0, (void*)0, 0};
@@ -10664,6 +11493,7 @@ static swig_type_info _swigt__p_svn_opt_subcommand_desc2_t = {"_p_svn_opt_subcom
static swig_type_info _swigt__p_svn_opt_subcommand_desc_t = {"_p_svn_opt_subcommand_desc_t", "struct svn_opt_subcommand_desc_t *|svn_opt_subcommand_desc_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_file_t = {"_p_svn_patch_file_t", "struct svn_patch_file_t *|svn_patch_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_t = {"_p_svn_patch_t", "struct svn_patch_t *|svn_patch_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_prop_inherited_item_t = {"_p_svn_prop_inherited_item_t", "struct svn_prop_inherited_item_t *|svn_prop_inherited_item_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_kind = {"_p_svn_prop_kind", "svn_prop_kind_t *|enum svn_prop_kind *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_patch_t = {"_p_svn_prop_patch_t", "struct svn_prop_patch_t *|svn_prop_patch_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_stream_mark_t = {"_p_svn_stream_mark_t", "struct svn_stream_mark_t *|svn_stream_mark_t *", 0, 0, (void*)0, 0};
@@ -10675,6 +11505,9 @@ static swig_type_info _swigt__p_svn_txdelta_op_t = {"_p_svn_txdelta_op_t", "stru
static swig_type_info _swigt__p_svn_txdelta_stream_t = {"_p_svn_txdelta_stream_t", "struct svn_txdelta_stream_t *|svn_txdelta_stream_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_txdelta_window_t = {"_p_svn_txdelta_window_t", "struct svn_txdelta_window_t *|svn_txdelta_window_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_checklist_t = {"_p_svn_version_checklist_t", "struct svn_version_checklist_t *|svn_version_checklist_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_linked_lib_t = {"_p_svn_version_ext_linked_lib_t", "struct svn_version_ext_linked_lib_t *|svn_version_ext_linked_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_loaded_lib_t = {"_p_svn_version_ext_loaded_lib_t", "struct svn_version_ext_loaded_lib_t *|svn_version_ext_loaded_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_extended_t = {"_p_svn_version_extended_t", "struct svn_version_extended_t *|svn_version_extended_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_t = {"_p_svn_version_t", "struct svn_version_t *|svn_version_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_char = {"_p_unsigned_char", "unsigned char *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_long = {"_p_unsigned_long", "unsigned long *|svn_linenum_t *", 0, 0, (void*)0, 0};
@@ -10687,10 +11520,13 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_apr_int64_t,
&_swigt__p_apr_pool_t,
&_swigt__p_char,
+ &_swigt__p_f_long_p_void_p_apr_pool_t__void,
&_swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t,
&_swigt__p_f_p_void__p_svn_error_t,
&_swigt__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_f_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_struct_svn_error_t__void,
&_swigt__p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_int,
@@ -10721,7 +11557,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_auth_provider_object_t,
&_swigt__p_svn_auth_provider_t,
&_swigt__p_svn_auth_ssl_server_cert_info_t,
+ &_swigt__p_svn_checksum_ctx_t,
&_swigt__p_svn_checksum_kind_t,
+ &_swigt__p_svn_checksum_t,
&_swigt__p_svn_commit_info_t,
&_swigt__p_svn_config_t,
&_swigt__p_svn_delta_editor_t,
@@ -10768,6 +11606,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_opt_subcommand_desc_t,
&_swigt__p_svn_patch_file_t,
&_swigt__p_svn_patch_t,
+ &_swigt__p_svn_prop_inherited_item_t,
&_swigt__p_svn_prop_kind,
&_swigt__p_svn_prop_patch_t,
&_swigt__p_svn_stream_mark_t,
@@ -10779,6 +11618,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_txdelta_stream_t,
&_swigt__p_svn_txdelta_window_t,
&_swigt__p_svn_version_checklist_t,
+ &_swigt__p_svn_version_ext_linked_lib_t,
+ &_swigt__p_svn_version_ext_loaded_lib_t,
+ &_swigt__p_svn_version_extended_t,
&_swigt__p_svn_version_t,
&_swigt__p_unsigned_char,
&_swigt__p_unsigned_long,
@@ -10791,10 +11633,13 @@ static swig_cast_info _swigc__p_apr_int32_t[] = { {&_swigt__p_apr_int32_t, 0, 0
static swig_cast_info _swigc__p_apr_int64_t[] = { {&_swigt__p_apr_int64_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_apr_pool_t[] = { {&_swigt__p_apr_pool_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_long_p_void_p_apr_pool_t__void[] = { {&_swigt__p_f_long_p_void_p_apr_pool_t__void, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t[] = { {&_swigt__p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void__p_svn_error_t[] = { {&_swigt__p_f_p_void__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_struct_svn_error_t__void[] = { {&_swigt__p_f_p_void_p_struct_svn_error_t__void, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_int[] = { {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}};
@@ -10825,7 +11670,9 @@ static swig_cast_info _swigc__p_svn_auth_iterstate_t[] = { {&_swigt__p_svn_auth
static swig_cast_info _swigc__p_svn_auth_provider_object_t[] = { {&_swigt__p_svn_auth_provider_object_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_provider_t[] = { {&_swigt__p_svn_auth_provider_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_ssl_server_cert_info_t[] = { {&_swigt__p_svn_auth_ssl_server_cert_info_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_ctx_t[] = { {&_swigt__p_svn_checksum_ctx_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_checksum_kind_t[] = { {&_swigt__p_svn_checksum_kind_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_t[] = { {&_swigt__p_svn_checksum_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_commit_info_t[] = { {&_swigt__p_svn_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_config_t[] = { {&_swigt__p_svn_config_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_delta_editor_t[] = { {&_swigt__p_svn_delta_editor_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -10872,6 +11719,7 @@ static swig_cast_info _swigc__p_svn_opt_subcommand_desc2_t[] = { {&_swigt__p_sv
static swig_cast_info _swigc__p_svn_opt_subcommand_desc_t[] = { {&_swigt__p_svn_opt_subcommand_desc_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_file_t[] = { {&_swigt__p_svn_patch_file_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_t[] = { {&_swigt__p_svn_patch_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_prop_inherited_item_t[] = { {&_swigt__p_svn_prop_inherited_item_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_kind[] = { {&_swigt__p_svn_prop_kind, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_patch_t[] = { {&_swigt__p_svn_prop_patch_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_stream_mark_t[] = { {&_swigt__p_svn_stream_mark_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -10883,6 +11731,9 @@ static swig_cast_info _swigc__p_svn_txdelta_op_t[] = { {&_swigt__p_svn_txdelta_
static swig_cast_info _swigc__p_svn_txdelta_stream_t[] = { {&_swigt__p_svn_txdelta_stream_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_txdelta_window_t[] = { {&_swigt__p_svn_txdelta_window_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_checklist_t[] = { {&_swigt__p_svn_version_checklist_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_linked_lib_t[] = { {&_swigt__p_svn_version_ext_linked_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_loaded_lib_t[] = { {&_swigt__p_svn_version_ext_loaded_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_extended_t[] = { {&_swigt__p_svn_version_extended_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_t[] = { {&_swigt__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_char[] = { {&_swigt__p_unsigned_char, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_long[] = { {&_swigt__p_unsigned_long, 0, 0, 0},{0, 0, 0, 0}};
@@ -10895,10 +11746,13 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_apr_int64_t,
_swigc__p_apr_pool_t,
_swigc__p_char,
+ _swigc__p_f_long_p_void_p_apr_pool_t__void,
_swigc__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_f_p_q_const__unsigned_char_apr_size_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t,
_swigc__p_f_p_void__p_svn_error_t,
_swigc__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_f_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_struct_svn_error_t__void,
_swigc__p_f_p_void_p_svn_lock_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_int,
@@ -10929,7 +11783,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_auth_provider_object_t,
_swigc__p_svn_auth_provider_t,
_swigc__p_svn_auth_ssl_server_cert_info_t,
+ _swigc__p_svn_checksum_ctx_t,
_swigc__p_svn_checksum_kind_t,
+ _swigc__p_svn_checksum_t,
_swigc__p_svn_commit_info_t,
_swigc__p_svn_config_t,
_swigc__p_svn_delta_editor_t,
@@ -10976,6 +11832,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_opt_subcommand_desc_t,
_swigc__p_svn_patch_file_t,
_swigc__p_svn_patch_t,
+ _swigc__p_svn_prop_inherited_item_t,
_swigc__p_svn_prop_kind,
_swigc__p_svn_prop_patch_t,
_swigc__p_svn_stream_mark_t,
@@ -10987,6 +11844,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_txdelta_stream_t,
_swigc__p_svn_txdelta_window_t,
_swigc__p_svn_version_checklist_t,
+ _swigc__p_svn_version_ext_linked_lib_t,
+ _swigc__p_svn_version_ext_loaded_lib_t,
+ _swigc__p_svn_version_extended_t,
_swigc__p_svn_version_t,
_swigc__p_unsigned_char,
_swigc__p_unsigned_long,
@@ -11055,8 +11915,6 @@ SWIG_InitializeModule(void *clientdata) {
swig_module_info *module_head, *iter;
int found, init;
- clientdata = clientdata;
-
/* check to see if the circular list has been setup, if not, set it up */
if (swig_module.next==0) {
/* Initialize the swig_module */
@@ -11262,21 +12120,27 @@ SWIGEXPORT void Init_fs(void) {
rb_define_const(mFs, "SVN_FS_CONFIG_BDB_LOG_AUTOREMOVE", SWIG_FromCharPtr("bdb-log-autoremove"));
rb_define_const(mFs, "SVN_FS_CONFIG_FSFS_CACHE_DELTAS", SWIG_FromCharPtr("fsfs-cache-deltas"));
rb_define_const(mFs, "SVN_FS_CONFIG_FSFS_CACHE_FULLTEXTS", SWIG_FromCharPtr("fsfs-cache-fulltexts"));
+ rb_define_const(mFs, "SVN_FS_CONFIG_FSFS_CACHE_REVPROPS", SWIG_FromCharPtr("fsfs-cache-revprops"));
+ rb_define_const(mFs, "SVN_FS_CONFIG_FSFS_CACHE_NS", SWIG_FromCharPtr("fsfs-cache-namespace"));
rb_define_const(mFs, "SVN_FS_CONFIG_FS_TYPE", SWIG_FromCharPtr("fs-type"));
rb_define_const(mFs, "SVN_FS_TYPE_BDB", SWIG_FromCharPtr("bdb"));
rb_define_const(mFs, "SVN_FS_TYPE_FSFS", SWIG_FromCharPtr("fsfs"));
rb_define_const(mFs, "SVN_FS_CONFIG_PRE_1_4_COMPATIBLE", SWIG_FromCharPtr("pre-1.4-compatible"));
rb_define_const(mFs, "SVN_FS_CONFIG_PRE_1_5_COMPATIBLE", SWIG_FromCharPtr("pre-1.5-compatible"));
rb_define_const(mFs, "SVN_FS_CONFIG_PRE_1_6_COMPATIBLE", SWIG_FromCharPtr("pre-1.6-compatible"));
+ rb_define_const(mFs, "SVN_FS_CONFIG_PRE_1_8_COMPATIBLE", SWIG_FromCharPtr("pre-1.8-compatible"));
rb_define_module_function(mFs, "svn_fs_initialize", _wrap_svn_fs_initialize, -1);
rb_define_module_function(mFs, "svn_fs_create", _wrap_svn_fs_create, -1);
rb_define_module_function(mFs, "svn_fs_open", _wrap_svn_fs_open, -1);
rb_define_module_function(mFs, "svn_fs_upgrade", _wrap_svn_fs_upgrade, -1);
rb_define_module_function(mFs, "svn_fs_type", _wrap_svn_fs_type, -1);
rb_define_module_function(mFs, "svn_fs_path", _wrap_svn_fs_path, -1);
+ rb_define_module_function(mFs, "svn_fs_config", _wrap_svn_fs_config, -1);
rb_define_module_function(mFs, "svn_fs_delete_fs", _wrap_svn_fs_delete_fs, -1);
+ rb_define_module_function(mFs, "svn_fs_hotcopy2", _wrap_svn_fs_hotcopy2, -1);
rb_define_module_function(mFs, "svn_fs_hotcopy", _wrap_svn_fs_hotcopy, -1);
rb_define_module_function(mFs, "svn_fs_recover", _wrap_svn_fs_recover, -1);
+ rb_define_module_function(mFs, "svn_fs_freeze", _wrap_svn_fs_freeze, -1);
rb_define_module_function(mFs, "svn_fs_berkeley_logfiles", _wrap_svn_fs_berkeley_logfiles, -1);
rb_define_module_function(mFs, "svn_fs_new", _wrap_svn_fs_new, -1);
rb_define_module_function(mFs, "svn_fs_create_berkeley", _wrap_svn_fs_create_berkeley, -1);
@@ -11378,6 +12242,7 @@ SWIGEXPORT void Init_fs(void) {
rb_define_module_function(mFs, "svn_fs_props_changed", _wrap_svn_fs_props_changed, -1);
rb_define_module_function(mFs, "svn_fs_copied_from", _wrap_svn_fs_copied_from, -1);
rb_define_module_function(mFs, "svn_fs_closest_copy", _wrap_svn_fs_closest_copy, -1);
+ rb_define_module_function(mFs, "svn_fs_get_mergeinfo2", _wrap_svn_fs_get_mergeinfo2, -1);
rb_define_module_function(mFs, "svn_fs_get_mergeinfo", _wrap_svn_fs_get_mergeinfo, -1);
rb_define_module_function(mFs, "svn_fs_merge", _wrap_svn_fs_merge, -1);
@@ -11401,6 +12266,7 @@ SWIGEXPORT void Init_fs(void) {
rb_define_module_function(mFs, "svn_fs_file_checksum", _wrap_svn_fs_file_checksum, -1);
rb_define_module_function(mFs, "svn_fs_file_md5_checksum", _wrap_svn_fs_file_md5_checksum, -1);
rb_define_module_function(mFs, "svn_fs_file_contents", _wrap_svn_fs_file_contents, -1);
+ rb_define_module_function(mFs, "svn_fs_try_process_file_contents", _wrap_svn_fs_try_process_file_contents, -1);
rb_define_module_function(mFs, "svn_fs_make_file", _wrap_svn_fs_make_file, -1);
rb_define_module_function(mFs, "svn_fs_apply_textdelta", _wrap_svn_fs_apply_textdelta, -1);
rb_define_module_function(mFs, "svn_fs_apply_text", _wrap_svn_fs_apply_text, -1);
@@ -11426,7 +12292,12 @@ SWIGEXPORT void Init_fs(void) {
rb_define_const(mFs, "Svn_fs_pack_notify_start_revprop", SWIG_From_int((int)(svn_fs_pack_notify_start_revprop)));
rb_define_const(mFs, "Svn_fs_pack_notify_end_revprop", SWIG_From_int((int)(svn_fs_pack_notify_end_revprop)));
rb_define_module_function(mFs, "svn_fs_pack", _wrap_svn_fs_pack, -1);
+ rb_define_module_function(mFs, "svn_fs_verify", _wrap_svn_fs_verify, -1);
+ rb_define_module_function(mFs, "svn_fs_verify_root", _wrap_svn_fs_verify_root, -1);
rb_define_module_function(mFs, "svn_fs_invoke_warning_callback", _wrap_svn_fs_invoke_warning_callback, -1);
+ rb_define_module_function(mFs, "svn_fs_invoke_progress_notify_func", _wrap_svn_fs_invoke_progress_notify_func, -1);
+ rb_define_module_function(mFs, "svn_fs_invoke_freeze_func", _wrap_svn_fs_invoke_freeze_func, -1);
+ rb_define_module_function(mFs, "svn_fs_invoke_process_contents_func", _wrap_svn_fs_invoke_process_contents_func, -1);
rb_define_module_function(mFs, "svn_fs_invoke_get_locks_callback", _wrap_svn_fs_invoke_get_locks_callback, -1);
rb_define_module_function(mFs, "svn_fs_invoke_pack_notify", _wrap_svn_fs_invoke_pack_notify, -1);
diff --git a/subversion/bindings/swig/ruby/svn_ra.c b/subversion/bindings/swig/ruby/svn_ra.c
index 6d18f09..5d953ff 100644
--- a/subversion/bindings/swig/ruby/svn_ra.c
+++ b/subversion/bindings/swig/ruby/svn_ra.c
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -1374,7 +1374,7 @@ SWIG_Ruby_AppendOutput(VALUE target, VALUE o) {
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Ruby_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Ruby_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Ruby_SetModule(pointer)
@@ -1528,7 +1528,7 @@ SWIG_Ruby_NewPointerObj(void *ptr, swig_type_info *type, int flags)
downcast methods. */
if (obj != Qnil) {
VALUE value = rb_iv_get(obj, "@__swigtype__");
- char* type_name = RSTRING_PTR(value);
+ const char* type_name = RSTRING_PTR(value);
if (strcmp(type->name, type_name) == 0) {
return obj;
@@ -1710,7 +1710,7 @@ SWIG_Ruby_ConvertPacked(VALUE obj, void *ptr, int sz, swig_type_info *ty) {
}
SWIGRUNTIME swig_module_info *
-SWIG_Ruby_GetModule(void)
+SWIG_Ruby_GetModule(void *SWIGUNUSEDPARM(clientdata))
{
VALUE pointer;
swig_module_info *ret = 0;
@@ -1818,121 +1818,131 @@ int SWIG_Ruby_arity( VALUE proc, int minimal )
#define SWIGTYPE_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[23]
#define SWIGTYPE_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[24]
#define SWIGTYPE_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[25]
-#define SWIGTYPE_p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[26]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[27]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[28]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[29]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[30]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[31]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[32]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_depth_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[33]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_boolean_t_p_q_const__svn_lock_t_p_svn_error_t_p_apr_pool_t__p_svn_error_t swig_types[34]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[35]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[36]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_p_apr_hash_t_p_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[37]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_svn_node_kind_t_p_apr_pool_t__p_svn_error_t swig_types[38]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_svn_stream_t_p_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[39]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[40]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[41]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_depth_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[42]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_revnum_t_svn_ra_file_rev_handler_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[43]
-#define SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t swig_types[44]
-#define SWIGTYPE_p_f_p_void_p_svn_revnum_t__p_svn_error_t swig_types[45]
-#define SWIGTYPE_p_f_p_void_p_svn_revnum_t_apr_time_t_p_apr_pool_t__p_svn_error_t swig_types[46]
-#define SWIGTYPE_p_f_p_void_p_svn_revnum_t_p_apr_pool_t__p_svn_error_t swig_types[47]
-#define SWIGTYPE_p_f_p_void_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[48]
-#define SWIGTYPE_p_f_p_void_svn_revnum_t_p_q_const__char_p_p_svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[49]
-#define SWIGTYPE_p_f_p_void_svn_revnum_t_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[50]
-#define SWIGTYPE_p_f_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t swig_types[51]
-#define SWIGTYPE_p_f_svn_revnum_t_p_void_p_p_q_const__svn_delta_editor_t_p_p_void_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[52]
-#define SWIGTYPE_p_f_svn_revnum_t_p_void_p_q_const__svn_delta_editor_t_p_void_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[53]
-#define SWIGTYPE_p_f_void__p_svn_version_t swig_types[54]
-#define SWIGTYPE_p_int swig_types[55]
-#define SWIGTYPE_p_long swig_types[56]
-#define SWIGTYPE_p_p_apr_file_t swig_types[57]
-#define SWIGTYPE_p_p_apr_hash_t swig_types[58]
-#define SWIGTYPE_p_p_char swig_types[59]
-#define SWIGTYPE_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t swig_types[60]
-#define SWIGTYPE_p_p_svn_delta_editor_t swig_types[61]
-#define SWIGTYPE_p_p_svn_dirent_t swig_types[62]
-#define SWIGTYPE_p_p_svn_lock_t swig_types[63]
-#define SWIGTYPE_p_p_svn_ra_callbacks2_t swig_types[64]
-#define SWIGTYPE_p_p_svn_ra_plugin_t swig_types[65]
-#define SWIGTYPE_p_p_svn_ra_reporter2_t swig_types[66]
-#define SWIGTYPE_p_p_svn_ra_reporter3_t swig_types[67]
-#define SWIGTYPE_p_p_svn_ra_reporter_t swig_types[68]
-#define SWIGTYPE_p_p_svn_ra_session_t swig_types[69]
-#define SWIGTYPE_p_p_svn_string_t swig_types[70]
-#define SWIGTYPE_p_p_svn_stringbuf_t swig_types[71]
-#define SWIGTYPE_p_p_void swig_types[72]
-#define SWIGTYPE_p_svn_auth_baton_t swig_types[73]
-#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[74]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[75]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[76]
-#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[77]
-#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[78]
-#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[79]
-#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[80]
-#define SWIGTYPE_p_svn_auth_provider_t swig_types[81]
-#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[82]
-#define SWIGTYPE_p_svn_commit_info_t swig_types[83]
-#define SWIGTYPE_p_svn_config_t swig_types[84]
-#define SWIGTYPE_p_svn_delta_editor_t swig_types[85]
-#define SWIGTYPE_p_svn_depth_t swig_types[86]
-#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[87]
-#define SWIGTYPE_p_svn_diff_datasource_e swig_types[88]
-#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[89]
-#define SWIGTYPE_p_svn_diff_file_options_t swig_types[90]
-#define SWIGTYPE_p_svn_diff_fns2_t swig_types[91]
-#define SWIGTYPE_p_svn_diff_fns_t swig_types[92]
-#define SWIGTYPE_p_svn_diff_hunk_t swig_types[93]
-#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[94]
-#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[95]
-#define SWIGTYPE_p_svn_diff_t swig_types[96]
-#define SWIGTYPE_p_svn_dirent_t swig_types[97]
-#define SWIGTYPE_p_svn_errno_t swig_types[98]
-#define SWIGTYPE_p_svn_error_t swig_types[99]
-#define SWIGTYPE_p_svn_io_dirent2_t swig_types[100]
-#define SWIGTYPE_p_svn_io_dirent_t swig_types[101]
-#define SWIGTYPE_p_svn_io_file_del_t swig_types[102]
-#define SWIGTYPE_p_svn_location_segment_t swig_types[103]
-#define SWIGTYPE_p_svn_lock_t swig_types[104]
-#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[105]
-#define SWIGTYPE_p_svn_log_changed_path_t swig_types[106]
-#define SWIGTYPE_p_svn_log_entry_t swig_types[107]
-#define SWIGTYPE_p_svn_merge_range_t swig_types[108]
-#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[109]
-#define SWIGTYPE_p_svn_node_kind_t swig_types[110]
-#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[111]
-#define SWIGTYPE_p_svn_opt_revision_t swig_types[112]
-#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[113]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[114]
-#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[115]
-#define SWIGTYPE_p_svn_patch_file_t swig_types[116]
-#define SWIGTYPE_p_svn_patch_t swig_types[117]
-#define SWIGTYPE_p_svn_prop_kind swig_types[118]
-#define SWIGTYPE_p_svn_prop_patch_t swig_types[119]
-#define SWIGTYPE_p_svn_ra_callbacks2_t swig_types[120]
-#define SWIGTYPE_p_svn_ra_callbacks_t swig_types[121]
-#define SWIGTYPE_p_svn_ra_plugin_t swig_types[122]
-#define SWIGTYPE_p_svn_ra_reporter2_t swig_types[123]
-#define SWIGTYPE_p_svn_ra_reporter3_t swig_types[124]
-#define SWIGTYPE_p_svn_ra_reporter_t swig_types[125]
-#define SWIGTYPE_p_svn_ra_session_t swig_types[126]
-#define SWIGTYPE_p_svn_stream_mark_t swig_types[127]
-#define SWIGTYPE_p_svn_stream_t swig_types[128]
-#define SWIGTYPE_p_svn_string_t swig_types[129]
-#define SWIGTYPE_p_svn_stringbuf_t swig_types[130]
-#define SWIGTYPE_p_svn_tristate_t swig_types[131]
-#define SWIGTYPE_p_svn_txdelta_op_t swig_types[132]
-#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[133]
-#define SWIGTYPE_p_svn_txdelta_window_t swig_types[134]
-#define SWIGTYPE_p_svn_version_checklist_t swig_types[135]
-#define SWIGTYPE_p_svn_version_t swig_types[136]
-#define SWIGTYPE_p_unsigned_long swig_types[137]
-#define SWIGTYPE_p_void swig_types[138]
-static swig_type_info *swig_types[140];
-static swig_module_info swig_module = {swig_types, 139, 0, 0, 0, 0};
+#define SWIGTYPE_p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t swig_types[26]
+#define SWIGTYPE_p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[27]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[28]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[29]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[30]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[31]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[32]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[33]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_depth_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[34]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_boolean_t_p_q_const__svn_lock_t_p_svn_error_t_p_apr_pool_t__p_svn_error_t swig_types[35]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[36]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[37]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_p_apr_hash_t_p_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[38]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_svn_node_kind_t_p_apr_pool_t__p_svn_error_t swig_types[39]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_svn_stream_t_p_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[40]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t swig_types[41]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[42]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_depth_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[43]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_revnum_t_svn_ra_file_rev_handler_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[44]
+#define SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t swig_types[45]
+#define SWIGTYPE_p_f_p_void_p_svn_revnum_t__p_svn_error_t swig_types[46]
+#define SWIGTYPE_p_f_p_void_p_svn_revnum_t_apr_time_t_p_apr_pool_t__p_svn_error_t swig_types[47]
+#define SWIGTYPE_p_f_p_void_p_svn_revnum_t_p_apr_pool_t__p_svn_error_t swig_types[48]
+#define SWIGTYPE_p_f_p_void_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[49]
+#define SWIGTYPE_p_f_p_void_svn_revnum_t_p_q_const__char_p_p_svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[50]
+#define SWIGTYPE_p_f_p_void_svn_revnum_t_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t swig_types[51]
+#define SWIGTYPE_p_f_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t swig_types[52]
+#define SWIGTYPE_p_f_svn_revnum_t_p_void_p_p_q_const__svn_delta_editor_t_p_p_void_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[53]
+#define SWIGTYPE_p_f_svn_revnum_t_p_void_p_q_const__svn_delta_editor_t_p_void_p_apr_hash_t_p_apr_pool_t__p_svn_error_t swig_types[54]
+#define SWIGTYPE_p_f_void__p_svn_version_t swig_types[55]
+#define SWIGTYPE_p_int swig_types[56]
+#define SWIGTYPE_p_long swig_types[57]
+#define SWIGTYPE_p_p_apr_array_header_t swig_types[58]
+#define SWIGTYPE_p_p_apr_file_t swig_types[59]
+#define SWIGTYPE_p_p_apr_hash_t swig_types[60]
+#define SWIGTYPE_p_p_char swig_types[61]
+#define SWIGTYPE_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t swig_types[62]
+#define SWIGTYPE_p_p_svn_delta_editor_t swig_types[63]
+#define SWIGTYPE_p_p_svn_dirent_t swig_types[64]
+#define SWIGTYPE_p_p_svn_lock_t swig_types[65]
+#define SWIGTYPE_p_p_svn_ra_callbacks2_t swig_types[66]
+#define SWIGTYPE_p_p_svn_ra_plugin_t swig_types[67]
+#define SWIGTYPE_p_p_svn_ra_reporter2_t swig_types[68]
+#define SWIGTYPE_p_p_svn_ra_reporter3_t swig_types[69]
+#define SWIGTYPE_p_p_svn_ra_reporter_t swig_types[70]
+#define SWIGTYPE_p_p_svn_ra_session_t swig_types[71]
+#define SWIGTYPE_p_p_svn_stream_t swig_types[72]
+#define SWIGTYPE_p_p_svn_string_t swig_types[73]
+#define SWIGTYPE_p_p_svn_stringbuf_t swig_types[74]
+#define SWIGTYPE_p_p_void swig_types[75]
+#define SWIGTYPE_p_svn_auth_baton_t swig_types[76]
+#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[77]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[78]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[79]
+#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[80]
+#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[81]
+#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[82]
+#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[83]
+#define SWIGTYPE_p_svn_auth_provider_t swig_types[84]
+#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[85]
+#define SWIGTYPE_p_svn_checksum_ctx_t swig_types[86]
+#define SWIGTYPE_p_svn_checksum_kind_t swig_types[87]
+#define SWIGTYPE_p_svn_checksum_t swig_types[88]
+#define SWIGTYPE_p_svn_commit_info_t swig_types[89]
+#define SWIGTYPE_p_svn_config_t swig_types[90]
+#define SWIGTYPE_p_svn_delta_editor_t swig_types[91]
+#define SWIGTYPE_p_svn_depth_t swig_types[92]
+#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[93]
+#define SWIGTYPE_p_svn_diff_datasource_e swig_types[94]
+#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[95]
+#define SWIGTYPE_p_svn_diff_file_options_t swig_types[96]
+#define SWIGTYPE_p_svn_diff_fns2_t swig_types[97]
+#define SWIGTYPE_p_svn_diff_fns_t swig_types[98]
+#define SWIGTYPE_p_svn_diff_hunk_t swig_types[99]
+#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[100]
+#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[101]
+#define SWIGTYPE_p_svn_diff_t swig_types[102]
+#define SWIGTYPE_p_svn_dirent_t swig_types[103]
+#define SWIGTYPE_p_svn_errno_t swig_types[104]
+#define SWIGTYPE_p_svn_error_t swig_types[105]
+#define SWIGTYPE_p_svn_io_dirent2_t swig_types[106]
+#define SWIGTYPE_p_svn_io_dirent_t swig_types[107]
+#define SWIGTYPE_p_svn_io_file_del_t swig_types[108]
+#define SWIGTYPE_p_svn_location_segment_t swig_types[109]
+#define SWIGTYPE_p_svn_lock_t swig_types[110]
+#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[111]
+#define SWIGTYPE_p_svn_log_changed_path_t swig_types[112]
+#define SWIGTYPE_p_svn_log_entry_t swig_types[113]
+#define SWIGTYPE_p_svn_merge_range_t swig_types[114]
+#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[115]
+#define SWIGTYPE_p_svn_node_kind_t swig_types[116]
+#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[117]
+#define SWIGTYPE_p_svn_opt_revision_t swig_types[118]
+#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[119]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[120]
+#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[121]
+#define SWIGTYPE_p_svn_patch_file_t swig_types[122]
+#define SWIGTYPE_p_svn_patch_t swig_types[123]
+#define SWIGTYPE_p_svn_prop_inherited_item_t swig_types[124]
+#define SWIGTYPE_p_svn_prop_kind swig_types[125]
+#define SWIGTYPE_p_svn_prop_patch_t swig_types[126]
+#define SWIGTYPE_p_svn_ra_callbacks2_t swig_types[127]
+#define SWIGTYPE_p_svn_ra_callbacks_t swig_types[128]
+#define SWIGTYPE_p_svn_ra_plugin_t swig_types[129]
+#define SWIGTYPE_p_svn_ra_reporter2_t swig_types[130]
+#define SWIGTYPE_p_svn_ra_reporter3_t swig_types[131]
+#define SWIGTYPE_p_svn_ra_reporter_t swig_types[132]
+#define SWIGTYPE_p_svn_ra_session_t swig_types[133]
+#define SWIGTYPE_p_svn_stream_mark_t swig_types[134]
+#define SWIGTYPE_p_svn_stream_t swig_types[135]
+#define SWIGTYPE_p_svn_string_t swig_types[136]
+#define SWIGTYPE_p_svn_stringbuf_t swig_types[137]
+#define SWIGTYPE_p_svn_tristate_t swig_types[138]
+#define SWIGTYPE_p_svn_txdelta_op_t swig_types[139]
+#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[140]
+#define SWIGTYPE_p_svn_txdelta_window_t swig_types[141]
+#define SWIGTYPE_p_svn_version_checklist_t swig_types[142]
+#define SWIGTYPE_p_svn_version_ext_linked_lib_t swig_types[143]
+#define SWIGTYPE_p_svn_version_ext_loaded_lib_t swig_types[144]
+#define SWIGTYPE_p_svn_version_extended_t swig_types[145]
+#define SWIGTYPE_p_svn_version_t swig_types[146]
+#define SWIGTYPE_p_unsigned_long swig_types[147]
+#define SWIGTYPE_p_void swig_types[148]
+static swig_type_info *swig_types[150];
+static swig_module_info swig_module = {swig_types, 149, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@@ -1947,7 +1957,7 @@ static VALUE mRa;
#define SWIG_RUBY_THREAD_END_BLOCK
-#define SWIGVERSION 0x020004
+#define SWIGVERSION 0x020009
#define SWIG_VERSION SWIGVERSION
@@ -2016,11 +2026,7 @@ SWIGINTERN int
SWIG_AsCharPtrAndSize(VALUE obj, char** cptr, size_t* psize, int *alloc)
{
if (TYPE(obj) == T_STRING) {
- #if defined(StringValuePtr)
char *cstr = StringValuePtr(obj);
- #else
- char *cstr = STR2CSTR(obj);
- #endif
size_t size = RSTRING_LEN(obj) + 1;
if (cptr) {
if (alloc) {
@@ -2073,7 +2079,7 @@ SWIG_ruby_failed(void)
}
-/*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
+/*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
SWIGINTERN VALUE SWIG_AUX_NUM2LONG(VALUE *args)
{
VALUE obj = args[0];
@@ -2118,7 +2124,7 @@ SWIG_AsVal_int (VALUE obj, int *val)
}
-/*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
+/*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
SWIGINTERN VALUE SWIG_AUX_NUM2ULONG(VALUE *args)
{
VALUE obj = args[0];
@@ -2383,6 +2389,11 @@ static svn_error_t * svn_ra_invoke_invalidate_wc_props_func(
return _obj(baton, path, name, pool);
}
+static svn_error_t * svn_ra_invoke_get_wc_contents_func(
+ svn_ra_get_wc_contents_func_t _obj, void *baton, svn_stream_t **contents, const svn_checksum_t *checksum, apr_pool_t *pool) {
+ return _obj(baton, contents, checksum, pool);
+}
+
static svn_error_t * svn_ra_invoke_get_latest_revnum_func(
svn_ra_get_latest_revnum_func_t _obj, void *session_baton, svn_revnum_t *latest_revnum) {
return _obj(session_baton, latest_revnum);
@@ -2445,11 +2456,11 @@ fail:
}
-swig_class SwigClassSvn_ra_reporter3_t;
+static swig_class SwigClassSvn_ra_reporter3_t;
SWIGINTERN VALUE
_wrap_svn_ra_reporter3_t_set_path_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_revnum_t,svn_depth_t,svn_boolean_t,char const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_depth_t,svn_boolean_t,char const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2459,9 +2470,9 @@ _wrap_svn_ra_reporter3_t_set_path_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter3_t *","set_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter3_t *","set_path", 1, self ));
}
- arg1 = (svn_ra_reporter3_t *)(argp1);
+ arg1 = (struct svn_ra_reporter3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_depth_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -2477,7 +2488,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter3_t_set_path_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,char const *,svn_revnum_t,svn_depth_t,svn_boolean_t,char const *,apr_pool_t *) = 0 ;
@@ -2488,9 +2499,9 @@ _wrap_svn_ra_reporter3_t_set_path_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter3_t *","set_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter3_t *","set_path", 1, self ));
}
- arg1 = (svn_ra_reporter3_t *)(argp1);
+ arg1 = (struct svn_ra_reporter3_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_depth_t,svn_boolean_t,char const *,apr_pool_t *)) ((arg1)->set_path);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_depth_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -2501,7 +2512,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter3_t_delete_path_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2511,9 +2522,9 @@ _wrap_svn_ra_reporter3_t_delete_path_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter3_t *","delete_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter3_t *","delete_path", 1, self ));
}
- arg1 = (svn_ra_reporter3_t *)(argp1);
+ arg1 = (struct svn_ra_reporter3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -2529,7 +2540,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter3_t_delete_path_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,char const *,apr_pool_t *) = 0 ;
@@ -2540,9 +2551,9 @@ _wrap_svn_ra_reporter3_t_delete_path_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter3_t *","delete_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter3_t *","delete_path", 1, self ));
}
- arg1 = (svn_ra_reporter3_t *)(argp1);
+ arg1 = (struct svn_ra_reporter3_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,apr_pool_t *)) ((arg1)->delete_path);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -2553,7 +2564,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter3_t_link_path_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,char const *,svn_revnum_t,svn_depth_t,svn_boolean_t,char const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,char const *,svn_revnum_t,svn_depth_t,svn_boolean_t,char const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2563,9 +2574,9 @@ _wrap_svn_ra_reporter3_t_link_path_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter3_t *","link_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter3_t *","link_path", 1, self ));
}
- arg1 = (svn_ra_reporter3_t *)(argp1);
+ arg1 = (struct svn_ra_reporter3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_depth_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -2581,7 +2592,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter3_t_link_path_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,char const *,char const *,svn_revnum_t,svn_depth_t,svn_boolean_t,char const *,apr_pool_t *) = 0 ;
@@ -2592,9 +2603,9 @@ _wrap_svn_ra_reporter3_t_link_path_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter3_t *","link_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter3_t *","link_path", 1, self ));
}
- arg1 = (svn_ra_reporter3_t *)(argp1);
+ arg1 = (struct svn_ra_reporter3_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,char const *,svn_revnum_t,svn_depth_t,svn_boolean_t,char const *,apr_pool_t *)) ((arg1)->link_path);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_depth_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -2605,7 +2616,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter3_t_finish_report_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2615,9 +2626,9 @@ _wrap_svn_ra_reporter3_t_finish_report_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter3_t *","finish_report", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter3_t *","finish_report", 1, self ));
}
- arg1 = (svn_ra_reporter3_t *)(argp1);
+ arg1 = (struct svn_ra_reporter3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -2633,7 +2644,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter3_t_finish_report_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,apr_pool_t *) = 0 ;
@@ -2644,9 +2655,9 @@ _wrap_svn_ra_reporter3_t_finish_report_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter3_t *","finish_report", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter3_t *","finish_report", 1, self ));
}
- arg1 = (svn_ra_reporter3_t *)(argp1);
+ arg1 = (struct svn_ra_reporter3_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_pool_t *)) ((arg1)->finish_report);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -2657,7 +2668,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter3_t_abort_report_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2667,9 +2678,9 @@ _wrap_svn_ra_reporter3_t_abort_report_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter3_t *","abort_report", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter3_t *","abort_report", 1, self ));
}
- arg1 = (svn_ra_reporter3_t *)(argp1);
+ arg1 = (struct svn_ra_reporter3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -2685,7 +2696,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter3_t_abort_report_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter3_t *arg1 = (svn_ra_reporter3_t *) 0 ;
+ struct svn_ra_reporter3_t *arg1 = (struct svn_ra_reporter3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,apr_pool_t *) = 0 ;
@@ -2696,9 +2707,9 @@ _wrap_svn_ra_reporter3_t_abort_report_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter3_t *","abort_report", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter3_t *","abort_report", 1, self ));
}
- arg1 = (svn_ra_reporter3_t *)(argp1);
+ arg1 = (struct svn_ra_reporter3_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_pool_t *)) ((arg1)->abort_report);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -2726,13 +2737,13 @@ _wrap_svn_ra_reporter3_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_ra_reporter3_t(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter3_t *result = 0 ;
+ struct svn_ra_reporter3_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_ra_reporter3_t *)calloc(1, sizeof(svn_ra_reporter3_t));
+ result = (struct svn_ra_reporter3_t *)calloc(1, sizeof(struct svn_ra_reporter3_t));
DATA_PTR(self) = result;
@@ -2745,15 +2756,15 @@ fail:
SWIGINTERN void
-free_svn_ra_reporter3_t(svn_ra_reporter3_t *arg1) {
+free_svn_ra_reporter3_t(struct svn_ra_reporter3_t *arg1) {
free((char *) arg1);
}
-swig_class SwigClassSvn_ra_reporter2_t;
+static swig_class SwigClassSvn_ra_reporter2_t;
SWIGINTERN VALUE
_wrap_svn_ra_reporter2_t_set_path_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_revnum_t,svn_boolean_t,char const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_boolean_t,char const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2763,9 +2774,9 @@ _wrap_svn_ra_reporter2_t_set_path_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter2_t *","set_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter2_t *","set_path", 1, self ));
}
- arg1 = (svn_ra_reporter2_t *)(argp1);
+ arg1 = (struct svn_ra_reporter2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -2781,7 +2792,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter2_t_set_path_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,char const *,svn_revnum_t,svn_boolean_t,char const *,apr_pool_t *) = 0 ;
@@ -2792,9 +2803,9 @@ _wrap_svn_ra_reporter2_t_set_path_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter2_t *","set_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter2_t *","set_path", 1, self ));
}
- arg1 = (svn_ra_reporter2_t *)(argp1);
+ arg1 = (struct svn_ra_reporter2_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_boolean_t,char const *,apr_pool_t *)) ((arg1)->set_path);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -2805,7 +2816,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter2_t_delete_path_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2815,9 +2826,9 @@ _wrap_svn_ra_reporter2_t_delete_path_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter2_t *","delete_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter2_t *","delete_path", 1, self ));
}
- arg1 = (svn_ra_reporter2_t *)(argp1);
+ arg1 = (struct svn_ra_reporter2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -2833,7 +2844,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter2_t_delete_path_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,char const *,apr_pool_t *) = 0 ;
@@ -2844,9 +2855,9 @@ _wrap_svn_ra_reporter2_t_delete_path_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter2_t *","delete_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter2_t *","delete_path", 1, self ));
}
- arg1 = (svn_ra_reporter2_t *)(argp1);
+ arg1 = (struct svn_ra_reporter2_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,apr_pool_t *)) ((arg1)->delete_path);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -2857,7 +2868,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter2_t_link_path_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,char const *,svn_revnum_t,svn_boolean_t,char const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,char const *,svn_revnum_t,svn_boolean_t,char const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2867,9 +2878,9 @@ _wrap_svn_ra_reporter2_t_link_path_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter2_t *","link_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter2_t *","link_path", 1, self ));
}
- arg1 = (svn_ra_reporter2_t *)(argp1);
+ arg1 = (struct svn_ra_reporter2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -2885,7 +2896,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter2_t_link_path_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,char const *,char const *,svn_revnum_t,svn_boolean_t,char const *,apr_pool_t *) = 0 ;
@@ -2896,9 +2907,9 @@ _wrap_svn_ra_reporter2_t_link_path_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter2_t *","link_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter2_t *","link_path", 1, self ));
}
- arg1 = (svn_ra_reporter2_t *)(argp1);
+ arg1 = (struct svn_ra_reporter2_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,char const *,svn_revnum_t,svn_boolean_t,char const *,apr_pool_t *)) ((arg1)->link_path);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_boolean_t_p_q_const__char_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -2909,7 +2920,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter2_t_finish_report_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2919,9 +2930,9 @@ _wrap_svn_ra_reporter2_t_finish_report_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter2_t *","finish_report", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter2_t *","finish_report", 1, self ));
}
- arg1 = (svn_ra_reporter2_t *)(argp1);
+ arg1 = (struct svn_ra_reporter2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -2937,7 +2948,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter2_t_finish_report_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,apr_pool_t *) = 0 ;
@@ -2948,9 +2959,9 @@ _wrap_svn_ra_reporter2_t_finish_report_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter2_t *","finish_report", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter2_t *","finish_report", 1, self ));
}
- arg1 = (svn_ra_reporter2_t *)(argp1);
+ arg1 = (struct svn_ra_reporter2_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_pool_t *)) ((arg1)->finish_report);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -2961,7 +2972,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter2_t_abort_report_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2971,9 +2982,9 @@ _wrap_svn_ra_reporter2_t_abort_report_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter2_t *","abort_report", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter2_t *","abort_report", 1, self ));
}
- arg1 = (svn_ra_reporter2_t *)(argp1);
+ arg1 = (struct svn_ra_reporter2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -2989,7 +3000,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter2_t_abort_report_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter2_t *arg1 = (svn_ra_reporter2_t *) 0 ;
+ struct svn_ra_reporter2_t *arg1 = (struct svn_ra_reporter2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,apr_pool_t *) = 0 ;
@@ -3000,9 +3011,9 @@ _wrap_svn_ra_reporter2_t_abort_report_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter2_t *","abort_report", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter2_t *","abort_report", 1, self ));
}
- arg1 = (svn_ra_reporter2_t *)(argp1);
+ arg1 = (struct svn_ra_reporter2_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_pool_t *)) ((arg1)->abort_report);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -3030,13 +3041,13 @@ _wrap_svn_ra_reporter2_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_ra_reporter2_t(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter2_t *result = 0 ;
+ struct svn_ra_reporter2_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_ra_reporter2_t *)calloc(1, sizeof(svn_ra_reporter2_t));
+ result = (struct svn_ra_reporter2_t *)calloc(1, sizeof(struct svn_ra_reporter2_t));
DATA_PTR(self) = result;
@@ -3049,15 +3060,15 @@ fail:
SWIGINTERN void
-free_svn_ra_reporter2_t(svn_ra_reporter2_t *arg1) {
+free_svn_ra_reporter2_t(struct svn_ra_reporter2_t *arg1) {
free((char *) arg1);
}
-swig_class SwigClassSvn_ra_reporter_t;
+static swig_class SwigClassSvn_ra_reporter_t;
SWIGINTERN VALUE
_wrap_svn_ra_reporter_t_set_path_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_revnum_t,svn_boolean_t,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_boolean_t,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3067,9 +3078,9 @@ _wrap_svn_ra_reporter_t_set_path_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter_t *","set_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter_t *","set_path", 1, self ));
}
- arg1 = (svn_ra_reporter_t *)(argp1);
+ arg1 = (struct svn_ra_reporter_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -3085,7 +3096,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter_t_set_path_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,char const *,svn_revnum_t,svn_boolean_t,apr_pool_t *) = 0 ;
@@ -3096,9 +3107,9 @@ _wrap_svn_ra_reporter_t_set_path_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter_t *","set_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter_t *","set_path", 1, self ));
}
- arg1 = (svn_ra_reporter_t *)(argp1);
+ arg1 = (struct svn_ra_reporter_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_boolean_t,apr_pool_t *)) ((arg1)->set_path);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -3109,7 +3120,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter_t_delete_path_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3119,9 +3130,9 @@ _wrap_svn_ra_reporter_t_delete_path_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter_t *","delete_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter_t *","delete_path", 1, self ));
}
- arg1 = (svn_ra_reporter_t *)(argp1);
+ arg1 = (struct svn_ra_reporter_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -3137,7 +3148,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter_t_delete_path_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,char const *,apr_pool_t *) = 0 ;
@@ -3148,9 +3159,9 @@ _wrap_svn_ra_reporter_t_delete_path_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter_t *","delete_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter_t *","delete_path", 1, self ));
}
- arg1 = (svn_ra_reporter_t *)(argp1);
+ arg1 = (struct svn_ra_reporter_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,apr_pool_t *)) ((arg1)->delete_path);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -3161,7 +3172,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter_t_link_path_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,char const *,svn_revnum_t,svn_boolean_t,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,char const *,svn_revnum_t,svn_boolean_t,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3171,9 +3182,9 @@ _wrap_svn_ra_reporter_t_link_path_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter_t *","link_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter_t *","link_path", 1, self ));
}
- arg1 = (svn_ra_reporter_t *)(argp1);
+ arg1 = (struct svn_ra_reporter_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -3189,7 +3200,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter_t_link_path_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,char const *,char const *,svn_revnum_t,svn_boolean_t,apr_pool_t *) = 0 ;
@@ -3200,9 +3211,9 @@ _wrap_svn_ra_reporter_t_link_path_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter_t *","link_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter_t *","link_path", 1, self ));
}
- arg1 = (svn_ra_reporter_t *)(argp1);
+ arg1 = (struct svn_ra_reporter_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,char const *,svn_revnum_t,svn_boolean_t,apr_pool_t *)) ((arg1)->link_path);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_svn_revnum_t_svn_boolean_t_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -3213,7 +3224,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter_t_finish_report_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3223,9 +3234,9 @@ _wrap_svn_ra_reporter_t_finish_report_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter_t *","finish_report", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter_t *","finish_report", 1, self ));
}
- arg1 = (svn_ra_reporter_t *)(argp1);
+ arg1 = (struct svn_ra_reporter_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -3241,7 +3252,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter_t_finish_report_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,apr_pool_t *) = 0 ;
@@ -3252,9 +3263,9 @@ _wrap_svn_ra_reporter_t_finish_report_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter_t *","finish_report", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter_t *","finish_report", 1, self ));
}
- arg1 = (svn_ra_reporter_t *)(argp1);
+ arg1 = (struct svn_ra_reporter_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_pool_t *)) ((arg1)->finish_report);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -3265,7 +3276,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter_t_abort_report_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3275,9 +3286,9 @@ _wrap_svn_ra_reporter_t_abort_report_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter_t *","abort_report", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter_t *","abort_report", 1, self ));
}
- arg1 = (svn_ra_reporter_t *)(argp1);
+ arg1 = (struct svn_ra_reporter_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -3293,7 +3304,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_reporter_t_abort_report_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter_t *arg1 = (svn_ra_reporter_t *) 0 ;
+ struct svn_ra_reporter_t *arg1 = (struct svn_ra_reporter_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,apr_pool_t *) = 0 ;
@@ -3304,9 +3315,9 @@ _wrap_svn_ra_reporter_t_abort_report_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_reporter_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_reporter_t *","abort_report", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_reporter_t *","abort_report", 1, self ));
}
- arg1 = (svn_ra_reporter_t *)(argp1);
+ arg1 = (struct svn_ra_reporter_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_pool_t *)) ((arg1)->abort_report);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -3334,13 +3345,13 @@ _wrap_svn_ra_reporter_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_ra_reporter_t(int argc, VALUE *argv, VALUE self) {
- svn_ra_reporter_t *result = 0 ;
+ struct svn_ra_reporter_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_ra_reporter_t *)calloc(1, sizeof(svn_ra_reporter_t));
+ result = (struct svn_ra_reporter_t *)calloc(1, sizeof(struct svn_ra_reporter_t));
DATA_PTR(self) = result;
@@ -3353,15 +3364,15 @@ fail:
SWIGINTERN void
-free_svn_ra_reporter_t(svn_ra_reporter_t *arg1) {
+free_svn_ra_reporter_t(struct svn_ra_reporter_t *arg1) {
free((char *) arg1);
}
-swig_class SwigClassSvn_ra_callbacks2_t;
+static swig_class SwigClassSvn_ra_callbacks2_t;
SWIGINTERN VALUE
_wrap_svn_ra_callbacks2_t_open_tmp_file_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(apr_file_t **,void *,apr_pool_t *) = (svn_error_t *(*)(apr_file_t **,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3371,9 +3382,9 @@ _wrap_svn_ra_callbacks2_t_open_tmp_file_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks2_t *","open_tmp_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks2_t *","open_tmp_file", 1, self ));
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_p_apr_file_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -3389,7 +3400,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks2_t_open_tmp_file_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(apr_file_t **,void *,apr_pool_t *) = 0 ;
@@ -3400,9 +3411,9 @@ _wrap_svn_ra_callbacks2_t_open_tmp_file_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks2_t *","open_tmp_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks2_t *","open_tmp_file", 1, self ));
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
result = (svn_error_t *(*)(apr_file_t **,void *,apr_pool_t *)) ((arg1)->open_tmp_file);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_apr_file_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -3413,7 +3424,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks2_t_auth_baton_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_auth_baton_t *arg2 = (svn_auth_baton_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3425,9 +3436,9 @@ _wrap_svn_ra_callbacks2_t_auth_baton_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks2_t *","auth_baton", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks2_t *","auth_baton", 1, self ));
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_auth_baton_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_auth_baton_t *","auth_baton", 2, argv[0] ));
@@ -3442,7 +3453,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks2_t_auth_baton_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_auth_baton_t *result = 0 ;
@@ -3453,9 +3464,9 @@ _wrap_svn_ra_callbacks2_t_auth_baton_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks2_t *","auth_baton", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks2_t *","auth_baton", 1, self ));
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
result = (svn_auth_baton_t *) ((arg1)->auth_baton);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_auth_baton_t, 0 | 0 );
return vresult;
@@ -3466,7 +3477,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks2_t_get_wc_prop_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_ra_get_wc_prop_func_t arg2 = (svn_ra_get_wc_prop_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3476,9 +3487,9 @@ _wrap_svn_ra_callbacks2_t_get_wc_prop_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks2_t *","get_wc_prop", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks2_t *","get_wc_prop", 1, self ));
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -3494,7 +3505,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks2_t_get_wc_prop_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_ra_get_wc_prop_func_t result;
@@ -3505,9 +3516,9 @@ _wrap_svn_ra_callbacks2_t_get_wc_prop_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks2_t *","get_wc_prop", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks2_t *","get_wc_prop", 1, self ));
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
result = (svn_ra_get_wc_prop_func_t) ((arg1)->get_wc_prop);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -3518,7 +3529,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks2_t_set_wc_prop_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_ra_set_wc_prop_func_t arg2 = (svn_ra_set_wc_prop_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3528,9 +3539,9 @@ _wrap_svn_ra_callbacks2_t_set_wc_prop_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks2_t *","set_wc_prop", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks2_t *","set_wc_prop", 1, self ));
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -3546,7 +3557,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks2_t_set_wc_prop_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_ra_set_wc_prop_func_t result;
@@ -3557,9 +3568,9 @@ _wrap_svn_ra_callbacks2_t_set_wc_prop_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks2_t *","set_wc_prop", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks2_t *","set_wc_prop", 1, self ));
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
result = (svn_ra_set_wc_prop_func_t) ((arg1)->set_wc_prop);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -3570,7 +3581,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks2_t_push_wc_prop_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_ra_push_wc_prop_func_t arg2 = (svn_ra_push_wc_prop_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3580,9 +3591,9 @@ _wrap_svn_ra_callbacks2_t_push_wc_prop_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks2_t *","push_wc_prop", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks2_t *","push_wc_prop", 1, self ));
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -3598,7 +3609,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks2_t_push_wc_prop_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_ra_push_wc_prop_func_t result;
@@ -3609,9 +3620,9 @@ _wrap_svn_ra_callbacks2_t_push_wc_prop_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks2_t *","push_wc_prop", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks2_t *","push_wc_prop", 1, self ));
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
result = (svn_ra_push_wc_prop_func_t) ((arg1)->push_wc_prop);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -3622,7 +3633,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks2_t_invalidate_wc_props_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_ra_invalidate_wc_props_func_t arg2 = (svn_ra_invalidate_wc_props_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3632,9 +3643,9 @@ _wrap_svn_ra_callbacks2_t_invalidate_wc_props_set(int argc, VALUE *argv, VALUE s
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks2_t *","invalidate_wc_props", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks2_t *","invalidate_wc_props", 1, self ));
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -3650,7 +3661,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks2_t_invalidate_wc_props_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_ra_invalidate_wc_props_func_t result;
@@ -3661,9 +3672,9 @@ _wrap_svn_ra_callbacks2_t_invalidate_wc_props_get(int argc, VALUE *argv, VALUE s
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks2_t *","invalidate_wc_props", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks2_t *","invalidate_wc_props", 1, self ));
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
result = (svn_ra_invalidate_wc_props_func_t) ((arg1)->invalidate_wc_props);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -3674,7 +3685,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks2_t_progress_func_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_ra_progress_notify_func_t arg2 = (svn_ra_progress_notify_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3684,9 +3695,9 @@ _wrap_svn_ra_callbacks2_t_progress_func_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks2_t *","progress_func", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks2_t *","progress_func", 1, self ));
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_apr_off_t_apr_off_t_p_void_p_apr_pool_t__void);
if (!SWIG_IsOK(res)) {
@@ -3702,7 +3713,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks2_t_progress_func_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_ra_progress_notify_func_t result;
@@ -3713,9 +3724,9 @@ _wrap_svn_ra_callbacks2_t_progress_func_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks2_t *","progress_func", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks2_t *","progress_func", 1, self ));
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
result = (svn_ra_progress_notify_func_t) ((arg1)->progress_func);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_apr_off_t_apr_off_t_p_void_p_apr_pool_t__void);
return vresult;
@@ -3726,7 +3737,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks2_t_progress_baton_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
void *arg2 = (void *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3737,9 +3748,9 @@ _wrap_svn_ra_callbacks2_t_progress_baton_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks2_t *","progress_baton", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks2_t *","progress_baton", 1, self ));
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0],SWIG_as_voidptrptr(&arg2), 0, SWIG_POINTER_DISOWN);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "void *","progress_baton", 2, argv[0] ));
@@ -3753,7 +3764,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks2_t_progress_baton_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
void *result = 0 ;
@@ -3764,9 +3775,9 @@ _wrap_svn_ra_callbacks2_t_progress_baton_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks2_t *","progress_baton", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks2_t *","progress_baton", 1, self ));
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
result = (void *) ((arg1)->progress_baton);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 | 0 );
return vresult;
@@ -3777,7 +3788,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks2_t_cancel_func_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_cancel_func_t arg2 = (svn_cancel_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3787,9 +3798,9 @@ _wrap_svn_ra_callbacks2_t_cancel_func_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks2_t *","cancel_func", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks2_t *","cancel_func", 1, self ));
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -3805,7 +3816,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks2_t_cancel_func_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_cancel_func_t result;
@@ -3816,9 +3827,9 @@ _wrap_svn_ra_callbacks2_t_cancel_func_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks2_t *","cancel_func", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks2_t *","cancel_func", 1, self ));
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
result = (svn_cancel_func_t) ((arg1)->cancel_func);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__p_svn_error_t);
return vresult;
@@ -3829,7 +3840,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks2_t_get_client_string_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
svn_ra_get_client_string_func_t arg2 = (svn_ra_get_client_string_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3839,9 +3850,9 @@ _wrap_svn_ra_callbacks2_t_get_client_string_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks2_t *","get_client_string", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks2_t *","get_client_string", 1, self ));
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -3857,7 +3868,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks2_t_get_client_string_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks2_t *arg1 = (svn_ra_callbacks2_t *) 0 ;
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_ra_get_client_string_func_t result;
@@ -3868,9 +3879,9 @@ _wrap_svn_ra_callbacks2_t_get_client_string_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks2_t *","get_client_string", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks2_t *","get_client_string", 1, self ));
}
- arg1 = (svn_ra_callbacks2_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
result = (svn_ra_get_client_string_func_t) ((arg1)->get_client_string);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_p_q_const__char_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -3879,6 +3890,58 @@ fail:
}
+SWIGINTERN VALUE
+_wrap_svn_ra_callbacks2_t_get_wc_contents_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
+ svn_ra_get_wc_contents_func_t arg2 = (svn_ra_get_wc_contents_func_t) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks2_t *","get_wc_contents", 1, self ));
+ }
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
+ {
+ int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_ra_get_wc_contents_func_t","get_wc_contents", 2, argv[0] ));
+ }
+ }
+ if (arg1) (arg1)->get_wc_contents = arg2;
+ return Qnil;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_ra_callbacks2_t_get_wc_contents_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_ra_callbacks2_t *arg1 = (struct svn_ra_callbacks2_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_ra_get_wc_contents_func_t result;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks2_t *","get_wc_contents", 1, self ));
+ }
+ arg1 = (struct svn_ra_callbacks2_t *)(argp1);
+ result = (svn_ra_get_wc_contents_func_t) ((arg1)->get_wc_contents);
+ vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t);
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
#ifdef HAVE_RB_DEFINE_ALLOC_FUNC
SWIGINTERN VALUE
_wrap_svn_ra_callbacks2_t_allocate(VALUE self) {
@@ -3898,13 +3961,13 @@ _wrap_svn_ra_callbacks2_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_ra_callbacks2_t(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks2_t *result = 0 ;
+ struct svn_ra_callbacks2_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_ra_callbacks2_t *)calloc(1, sizeof(svn_ra_callbacks2_t));
+ result = (struct svn_ra_callbacks2_t *)calloc(1, sizeof(struct svn_ra_callbacks2_t));
DATA_PTR(self) = result;
@@ -3917,15 +3980,15 @@ fail:
SWIGINTERN void
-free_svn_ra_callbacks2_t(svn_ra_callbacks2_t *arg1) {
+free_svn_ra_callbacks2_t(struct svn_ra_callbacks2_t *arg1) {
free((char *) arg1);
}
-swig_class SwigClassSvn_ra_callbacks_t;
+static swig_class SwigClassSvn_ra_callbacks_t;
SWIGINTERN VALUE
_wrap_svn_ra_callbacks_t_open_tmp_file_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
svn_error_t *(*arg2)(apr_file_t **,void *,apr_pool_t *) = (svn_error_t *(*)(apr_file_t **,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3935,9 +3998,9 @@ _wrap_svn_ra_callbacks_t_open_tmp_file_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks_t *","open_tmp_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks_t *","open_tmp_file", 1, self ));
}
- arg1 = (svn_ra_callbacks_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_p_apr_file_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -3953,7 +4016,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks_t_open_tmp_file_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(apr_file_t **,void *,apr_pool_t *) = 0 ;
@@ -3964,9 +4027,9 @@ _wrap_svn_ra_callbacks_t_open_tmp_file_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks_t *","open_tmp_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks_t *","open_tmp_file", 1, self ));
}
- arg1 = (svn_ra_callbacks_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks_t *)(argp1);
result = (svn_error_t *(*)(apr_file_t **,void *,apr_pool_t *)) ((arg1)->open_tmp_file);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_apr_file_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -3977,7 +4040,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks_t_auth_baton_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
svn_auth_baton_t *arg2 = (svn_auth_baton_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3989,9 +4052,9 @@ _wrap_svn_ra_callbacks_t_auth_baton_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks_t *","auth_baton", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks_t *","auth_baton", 1, self ));
}
- arg1 = (svn_ra_callbacks_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_auth_baton_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_auth_baton_t *","auth_baton", 2, argv[0] ));
@@ -4006,7 +4069,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks_t_auth_baton_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_auth_baton_t *result = 0 ;
@@ -4017,9 +4080,9 @@ _wrap_svn_ra_callbacks_t_auth_baton_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks_t *","auth_baton", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks_t *","auth_baton", 1, self ));
}
- arg1 = (svn_ra_callbacks_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks_t *)(argp1);
result = (svn_auth_baton_t *) ((arg1)->auth_baton);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_auth_baton_t, 0 | 0 );
return vresult;
@@ -4030,7 +4093,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks_t_get_wc_prop_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
svn_ra_get_wc_prop_func_t arg2 = (svn_ra_get_wc_prop_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4040,9 +4103,9 @@ _wrap_svn_ra_callbacks_t_get_wc_prop_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks_t *","get_wc_prop", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks_t *","get_wc_prop", 1, self ));
}
- arg1 = (svn_ra_callbacks_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4058,7 +4121,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks_t_get_wc_prop_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_ra_get_wc_prop_func_t result;
@@ -4069,9 +4132,9 @@ _wrap_svn_ra_callbacks_t_get_wc_prop_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks_t *","get_wc_prop", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks_t *","get_wc_prop", 1, self ));
}
- arg1 = (svn_ra_callbacks_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks_t *)(argp1);
result = (svn_ra_get_wc_prop_func_t) ((arg1)->get_wc_prop);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -4082,7 +4145,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks_t_set_wc_prop_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
svn_ra_set_wc_prop_func_t arg2 = (svn_ra_set_wc_prop_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4092,9 +4155,9 @@ _wrap_svn_ra_callbacks_t_set_wc_prop_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks_t *","set_wc_prop", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks_t *","set_wc_prop", 1, self ));
}
- arg1 = (svn_ra_callbacks_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4110,7 +4173,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks_t_set_wc_prop_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_ra_set_wc_prop_func_t result;
@@ -4121,9 +4184,9 @@ _wrap_svn_ra_callbacks_t_set_wc_prop_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks_t *","set_wc_prop", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks_t *","set_wc_prop", 1, self ));
}
- arg1 = (svn_ra_callbacks_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks_t *)(argp1);
result = (svn_ra_set_wc_prop_func_t) ((arg1)->set_wc_prop);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -4134,7 +4197,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks_t_push_wc_prop_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
svn_ra_push_wc_prop_func_t arg2 = (svn_ra_push_wc_prop_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4144,9 +4207,9 @@ _wrap_svn_ra_callbacks_t_push_wc_prop_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks_t *","push_wc_prop", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks_t *","push_wc_prop", 1, self ));
}
- arg1 = (svn_ra_callbacks_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4162,7 +4225,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks_t_push_wc_prop_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_ra_push_wc_prop_func_t result;
@@ -4173,9 +4236,9 @@ _wrap_svn_ra_callbacks_t_push_wc_prop_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks_t *","push_wc_prop", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks_t *","push_wc_prop", 1, self ));
}
- arg1 = (svn_ra_callbacks_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks_t *)(argp1);
result = (svn_ra_push_wc_prop_func_t) ((arg1)->push_wc_prop);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -4186,7 +4249,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks_t_invalidate_wc_props_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
svn_ra_invalidate_wc_props_func_t arg2 = (svn_ra_invalidate_wc_props_func_t) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4196,9 +4259,9 @@ _wrap_svn_ra_callbacks_t_invalidate_wc_props_set(int argc, VALUE *argv, VALUE se
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks_t *","invalidate_wc_props", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks_t *","invalidate_wc_props", 1, self ));
}
- arg1 = (svn_ra_callbacks_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -4214,7 +4277,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_callbacks_t_invalidate_wc_props_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks_t *arg1 = (svn_ra_callbacks_t *) 0 ;
+ struct svn_ra_callbacks_t *arg1 = (struct svn_ra_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_ra_invalidate_wc_props_func_t result;
@@ -4225,9 +4288,9 @@ _wrap_svn_ra_callbacks_t_invalidate_wc_props_get(int argc, VALUE *argv, VALUE se
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_callbacks_t *","invalidate_wc_props", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_callbacks_t *","invalidate_wc_props", 1, self ));
}
- arg1 = (svn_ra_callbacks_t *)(argp1);
+ arg1 = (struct svn_ra_callbacks_t *)(argp1);
result = (svn_ra_invalidate_wc_props_func_t) ((arg1)->invalidate_wc_props);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -4255,13 +4318,13 @@ _wrap_svn_ra_callbacks_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_ra_callbacks_t(int argc, VALUE *argv, VALUE self) {
- svn_ra_callbacks_t *result = 0 ;
+ struct svn_ra_callbacks_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_ra_callbacks_t *)calloc(1, sizeof(svn_ra_callbacks_t));
+ result = (struct svn_ra_callbacks_t *)calloc(1, sizeof(struct svn_ra_callbacks_t));
DATA_PTR(self) = result;
@@ -4274,7 +4337,7 @@ fail:
SWIGINTERN void
-free_svn_ra_callbacks_t(svn_ra_callbacks_t *arg1) {
+free_svn_ra_callbacks_t(struct svn_ra_callbacks_t *arg1) {
free((char *) arg1);
}
@@ -6346,6 +6409,143 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_ra_do_update3(int argc, VALUE *argv, VALUE self) {
+ svn_ra_session_t *arg1 = (svn_ra_session_t *) 0 ;
+ svn_ra_reporter3_t **arg2 = (svn_ra_reporter3_t **) 0 ;
+ void **arg3 = (void **) 0 ;
+ svn_revnum_t arg4 ;
+ char *arg5 = (char *) 0 ;
+ svn_depth_t arg6 ;
+ svn_boolean_t arg7 ;
+ svn_boolean_t arg8 ;
+ svn_delta_editor_t *arg9 = (svn_delta_editor_t *) 0 ;
+ void *arg10 = (void *) 0 ;
+ apr_pool_t *arg11 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg12 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_ra_reporter3_t *temp2 ;
+ void *temp3 ;
+ long val4 ;
+ int ecode4 = 0 ;
+ int res5 ;
+ char *buf5 = 0 ;
+ int alloc5 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg11);
+ _global_pool = arg11;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg12);
+ _global_pool = arg12;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg2 = &temp2;
+ arg3 = &temp3;
+ if ((argc < 7) || (argc > 9)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 7)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_ra_session_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_session_t *","svn_ra_do_update3", 1, argv[0] ));
+ }
+ arg1 = (svn_ra_session_t *)(argp1);
+ ecode4 = SWIG_AsVal_long(argv[1], &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), Ruby_Format_TypeError( "", "svn_revnum_t","svn_ra_do_update3", 4, argv[1] ));
+ }
+ arg4 = (svn_revnum_t)(val4);
+ res5 = SWIG_AsCharPtrAndSize(argv[2], &buf5, NULL, &alloc5);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), Ruby_Format_TypeError( "", "char const *","svn_ra_do_update3", 5, argv[2] ));
+ }
+ arg5 = (char *)(buf5);
+ {
+ arg6 = svn_swig_rb_to_depth(argv[3]);
+ }
+ arg7 = RTEST(argv[4]);
+ arg8 = RTEST(argv[5]);
+ {
+ if (RTEST(rb_obj_is_kind_of(argv[6],
+ svn_swig_rb_svn_delta_editor()))) {
+ arg9 = svn_swig_rb_to_swig_type(argv[6],
+ "svn_delta_editor_t *",
+ _global_pool);
+ arg10 = svn_swig_rb_to_swig_type(rb_funcall(argv[6], rb_intern("baton"), 0),
+ "void *", _global_pool);
+ } else {
+ svn_swig_rb_make_delta_editor(&arg9, &arg10, argv[6], _global_pool);
+ }
+ }
+ if (argc > 7) {
+
+ }
+ if (argc > 8) {
+
+ }
+ {
+ result = (svn_error_t *)svn_ra_do_update3(arg1,(struct svn_ra_reporter3_t const **)arg2,arg3,arg4,(char const *)arg5,arg6,arg7,arg8,(struct svn_delta_editor_t const *)arg9,arg10,arg11,arg12);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg2, SWIGTYPE_p_svn_ra_reporter3_t, 0));
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg3, SWIGTYPE_p_void, 0));
+ }
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_ra_do_update2(int argc, VALUE *argv, VALUE self) {
svn_ra_session_t *arg1 = (svn_ra_session_t *) 0 ;
svn_ra_reporter3_t **arg2 = (svn_ra_reporter3_t **) 0 ;
@@ -6566,6 +6766,154 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_ra_do_switch3(int argc, VALUE *argv, VALUE self) {
+ svn_ra_session_t *arg1 = (svn_ra_session_t *) 0 ;
+ svn_ra_reporter3_t **arg2 = (svn_ra_reporter3_t **) 0 ;
+ void **arg3 = (void **) 0 ;
+ svn_revnum_t arg4 ;
+ char *arg5 = (char *) 0 ;
+ svn_depth_t arg6 ;
+ char *arg7 = (char *) 0 ;
+ svn_boolean_t arg8 ;
+ svn_boolean_t arg9 ;
+ svn_delta_editor_t *arg10 = (svn_delta_editor_t *) 0 ;
+ void *arg11 = (void *) 0 ;
+ apr_pool_t *arg12 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg13 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_ra_reporter3_t *temp2 ;
+ void *temp3 ;
+ long val4 ;
+ int ecode4 = 0 ;
+ int res5 ;
+ char *buf5 = 0 ;
+ int alloc5 = 0 ;
+ int res7 ;
+ char *buf7 = 0 ;
+ int alloc7 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg12);
+ _global_pool = arg12;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg13);
+ _global_pool = arg13;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg2 = &temp2;
+ arg3 = &temp3;
+ if ((argc < 8) || (argc > 10)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 8)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_ra_session_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_session_t *","svn_ra_do_switch3", 1, argv[0] ));
+ }
+ arg1 = (svn_ra_session_t *)(argp1);
+ ecode4 = SWIG_AsVal_long(argv[1], &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), Ruby_Format_TypeError( "", "svn_revnum_t","svn_ra_do_switch3", 4, argv[1] ));
+ }
+ arg4 = (svn_revnum_t)(val4);
+ res5 = SWIG_AsCharPtrAndSize(argv[2], &buf5, NULL, &alloc5);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), Ruby_Format_TypeError( "", "char const *","svn_ra_do_switch3", 5, argv[2] ));
+ }
+ arg5 = (char *)(buf5);
+ {
+ arg6 = svn_swig_rb_to_depth(argv[3]);
+ }
+ res7 = SWIG_AsCharPtrAndSize(argv[4], &buf7, NULL, &alloc7);
+ if (!SWIG_IsOK(res7)) {
+ SWIG_exception_fail(SWIG_ArgError(res7), Ruby_Format_TypeError( "", "char const *","svn_ra_do_switch3", 7, argv[4] ));
+ }
+ arg7 = (char *)(buf7);
+ arg8 = RTEST(argv[5]);
+ arg9 = RTEST(argv[6]);
+ {
+ if (RTEST(rb_obj_is_kind_of(argv[7],
+ svn_swig_rb_svn_delta_editor()))) {
+ arg10 = svn_swig_rb_to_swig_type(argv[7],
+ "svn_delta_editor_t *",
+ _global_pool);
+ arg11 = svn_swig_rb_to_swig_type(rb_funcall(argv[7], rb_intern("baton"), 0),
+ "void *", _global_pool);
+ } else {
+ svn_swig_rb_make_delta_editor(&arg10, &arg11, argv[7], _global_pool);
+ }
+ }
+ if (argc > 8) {
+
+ }
+ if (argc > 9) {
+
+ }
+ {
+ result = (svn_error_t *)svn_ra_do_switch3(arg1,(struct svn_ra_reporter3_t const **)arg2,arg3,arg4,(char const *)arg5,arg6,(char const *)arg7,arg8,arg9,(struct svn_delta_editor_t const *)arg10,arg11,arg12,arg13);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg2, SWIGTYPE_p_svn_ra_reporter3_t, 0));
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg3, SWIGTYPE_p_void, 0));
+ }
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_ra_do_switch2(int argc, VALUE *argv, VALUE self) {
svn_ra_session_t *arg1 = (svn_ra_session_t *) 0 ;
svn_ra_reporter3_t **arg2 = (svn_ra_reporter3_t **) 0 ;
@@ -9150,6 +9498,121 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_ra_get_inherited_props(int argc, VALUE *argv, VALUE self) {
+ svn_ra_session_t *arg1 = (svn_ra_session_t *) 0 ;
+ apr_array_header_t **arg2 = (apr_array_header_t **) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_revnum_t arg4 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ apr_array_header_t *temp2 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ long val4 ;
+ int ecode4 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg5);
+ _global_pool = arg5;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg6);
+ _global_pool = arg6;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg2 = &temp2;
+ if ((argc < 3) || (argc > 5)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_ra_session_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_session_t *","svn_ra_get_inherited_props", 1, argv[0] ));
+ }
+ arg1 = (svn_ra_session_t *)(argp1);
+ res3 = SWIG_AsCharPtrAndSize(argv[1], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","svn_ra_get_inherited_props", 3, argv[1] ));
+ }
+ arg3 = (char *)(buf3);
+ ecode4 = SWIG_AsVal_long(argv[2], &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), Ruby_Format_TypeError( "", "svn_revnum_t","svn_ra_get_inherited_props", 4, argv[2] ));
+ }
+ arg4 = (svn_revnum_t)(val4);
+ if (argc > 3) {
+
+ }
+ if (argc > 4) {
+
+ }
+ {
+ result = (svn_error_t *)svn_ra_get_inherited_props(arg1,arg2,(char const *)arg3,arg4,arg5,arg6);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ /* FIXME: Missing argout typemap: svn_ra_get_inherited_props arg 2 (apr_array_header_t **) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_ra_get_inherited_props is not implemented yet");
+
+ }
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_ra_has_capability(int argc, VALUE *argv, VALUE self) {
svn_ra_session_t *arg1 = (svn_ra_session_t *) 0 ;
svn_boolean_t *arg2 = (svn_boolean_t *) 0 ;
@@ -9362,11 +9825,11 @@ fail:
}
-swig_class SwigClassSvn_ra_plugin_t;
+static swig_class SwigClassSvn_ra_plugin_t;
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_name_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9379,9 +9842,9 @@ _wrap_svn_ra_plugin_t_name_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","name", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","name", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","name", 2, argv[0] ));
@@ -9405,7 +9868,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_name_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -9416,9 +9879,9 @@ _wrap_svn_ra_plugin_t_name_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","name", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","name", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (char *) ((arg1)->name);
{
if (result) {
@@ -9435,7 +9898,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_description_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9448,9 +9911,9 @@ _wrap_svn_ra_plugin_t_description_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","description", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","description", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","description", 2, argv[0] ));
@@ -9474,7 +9937,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_description_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -9485,9 +9948,9 @@ _wrap_svn_ra_plugin_t_description_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","description", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","description", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (char *) ((arg1)->description);
{
if (result) {
@@ -9504,7 +9967,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_open_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void **,char const *,svn_ra_callbacks_t const *,void *,apr_hash_t *,apr_pool_t *) = (svn_error_t *(*)(void **,char const *,svn_ra_callbacks_t const *,void *,apr_hash_t *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9514,9 +9977,9 @@ _wrap_svn_ra_plugin_t_open_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","open", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","open", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_p_void_p_q_const__char_p_q_const__svn_ra_callbacks_t_p_void_p_apr_hash_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -9532,7 +9995,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_open_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void **,char const *,svn_ra_callbacks_t const *,void *,apr_hash_t *,apr_pool_t *) = 0 ;
@@ -9543,9 +10006,9 @@ _wrap_svn_ra_plugin_t_open_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","open", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","open", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void **,char const *,svn_ra_callbacks_t const *,void *,apr_hash_t *,apr_pool_t *)) ((arg1)->open);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_void_p_q_const__char_p_q_const__svn_ra_callbacks_t_p_void_p_apr_hash_t_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -9556,7 +10019,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_get_latest_revnum_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_revnum_t *,apr_pool_t *) = (svn_error_t *(*)(void *,svn_revnum_t *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9566,9 +10029,9 @@ _wrap_svn_ra_plugin_t_get_latest_revnum_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","get_latest_revnum", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","get_latest_revnum", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_svn_revnum_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -9584,7 +10047,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_get_latest_revnum_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,svn_revnum_t *,apr_pool_t *) = 0 ;
@@ -9595,9 +10058,9 @@ _wrap_svn_ra_plugin_t_get_latest_revnum_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","get_latest_revnum", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","get_latest_revnum", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_revnum_t *,apr_pool_t *)) ((arg1)->get_latest_revnum);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_svn_revnum_t_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -9608,7 +10071,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_get_dated_revision_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_revnum_t *,apr_time_t,apr_pool_t *) = (svn_error_t *(*)(void *,svn_revnum_t *,apr_time_t,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9618,9 +10081,9 @@ _wrap_svn_ra_plugin_t_get_dated_revision_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","get_dated_revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","get_dated_revision", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_svn_revnum_t_apr_time_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -9636,7 +10099,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_get_dated_revision_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,svn_revnum_t *,apr_time_t,apr_pool_t *) = 0 ;
@@ -9647,9 +10110,9 @@ _wrap_svn_ra_plugin_t_get_dated_revision_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","get_dated_revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","get_dated_revision", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_revnum_t *,apr_time_t,apr_pool_t *)) ((arg1)->get_dated_revision);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_svn_revnum_t_apr_time_t_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -9660,7 +10123,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_change_rev_prop_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_revnum_t,char const *,svn_string_t const *,apr_pool_t *) = (svn_error_t *(*)(void *,svn_revnum_t,char const *,svn_string_t const *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9670,9 +10133,9 @@ _wrap_svn_ra_plugin_t_change_rev_prop_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","change_rev_prop", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","change_rev_prop", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_svn_revnum_t_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -9688,7 +10151,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_change_rev_prop_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,svn_revnum_t,char const *,svn_string_t const *,apr_pool_t *) = 0 ;
@@ -9699,9 +10162,9 @@ _wrap_svn_ra_plugin_t_change_rev_prop_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","change_rev_prop", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","change_rev_prop", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_revnum_t,char const *,svn_string_t const *,apr_pool_t *)) ((arg1)->change_rev_prop);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_svn_revnum_t_p_q_const__char_p_q_const__svn_string_t_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -9712,7 +10175,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_rev_proplist_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_revnum_t,apr_hash_t **,apr_pool_t *) = (svn_error_t *(*)(void *,svn_revnum_t,apr_hash_t **,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9722,9 +10185,9 @@ _wrap_svn_ra_plugin_t_rev_proplist_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","rev_proplist", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","rev_proplist", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -9740,7 +10203,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_rev_proplist_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,svn_revnum_t,apr_hash_t **,apr_pool_t *) = 0 ;
@@ -9751,9 +10214,9 @@ _wrap_svn_ra_plugin_t_rev_proplist_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","rev_proplist", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","rev_proplist", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_revnum_t,apr_hash_t **,apr_pool_t *)) ((arg1)->rev_proplist);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -9764,7 +10227,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_rev_prop_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_revnum_t,char const *,svn_string_t **,apr_pool_t *) = (svn_error_t *(*)(void *,svn_revnum_t,char const *,svn_string_t **,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9774,9 +10237,9 @@ _wrap_svn_ra_plugin_t_rev_prop_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","rev_prop", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","rev_prop", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_svn_revnum_t_p_q_const__char_p_p_svn_string_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -9792,7 +10255,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_rev_prop_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,svn_revnum_t,char const *,svn_string_t **,apr_pool_t *) = 0 ;
@@ -9803,9 +10266,9 @@ _wrap_svn_ra_plugin_t_rev_prop_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","rev_prop", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","rev_prop", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_revnum_t,char const *,svn_string_t **,apr_pool_t *)) ((arg1)->rev_prop);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_svn_revnum_t_p_q_const__char_p_p_svn_string_t_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -9816,7 +10279,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_get_commit_editor_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_delta_editor_t const **,void **,char const *,svn_commit_callback_t,void *,apr_pool_t *) = (svn_error_t *(*)(void *,svn_delta_editor_t const **,void **,char const *,svn_commit_callback_t,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9826,9 +10289,9 @@ _wrap_svn_ra_plugin_t_get_commit_editor_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","get_commit_editor", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","get_commit_editor", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_p_q_const__svn_delta_editor_t_p_p_void_p_q_const__char_svn_commit_callback_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -9844,7 +10307,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_get_commit_editor_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,svn_delta_editor_t const **,void **,char const *,svn_commit_callback_t,void *,apr_pool_t *) = 0 ;
@@ -9855,9 +10318,9 @@ _wrap_svn_ra_plugin_t_get_commit_editor_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","get_commit_editor", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","get_commit_editor", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_delta_editor_t const **,void **,char const *,svn_commit_callback_t,void *,apr_pool_t *)) ((arg1)->get_commit_editor);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_p_q_const__svn_delta_editor_t_p_p_void_p_q_const__char_svn_commit_callback_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -9868,7 +10331,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_get_file_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_revnum_t,svn_stream_t *,svn_revnum_t *,apr_hash_t **,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_stream_t *,svn_revnum_t *,apr_hash_t **,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9878,9 +10341,9 @@ _wrap_svn_ra_plugin_t_get_file_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","get_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","get_file", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_svn_stream_t_p_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -9896,7 +10359,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_get_file_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,char const *,svn_revnum_t,svn_stream_t *,svn_revnum_t *,apr_hash_t **,apr_pool_t *) = 0 ;
@@ -9907,9 +10370,9 @@ _wrap_svn_ra_plugin_t_get_file_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","get_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","get_file", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_stream_t *,svn_revnum_t *,apr_hash_t **,apr_pool_t *)) ((arg1)->get_file);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_svn_stream_t_p_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -9920,7 +10383,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_get_dir_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_revnum_t,apr_hash_t **,svn_revnum_t *,apr_hash_t **,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_revnum_t,apr_hash_t **,svn_revnum_t *,apr_hash_t **,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9930,9 +10393,9 @@ _wrap_svn_ra_plugin_t_get_dir_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","get_dir", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","get_dir", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_p_apr_hash_t_p_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -9948,7 +10411,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_get_dir_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,char const *,svn_revnum_t,apr_hash_t **,svn_revnum_t *,apr_hash_t **,apr_pool_t *) = 0 ;
@@ -9959,9 +10422,9 @@ _wrap_svn_ra_plugin_t_get_dir_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","get_dir", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","get_dir", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,svn_revnum_t,apr_hash_t **,svn_revnum_t *,apr_hash_t **,apr_pool_t *)) ((arg1)->get_dir);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_p_apr_hash_t_p_svn_revnum_t_p_p_apr_hash_t_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -9972,7 +10435,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_do_update_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *) = (svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9982,9 +10445,9 @@ _wrap_svn_ra_plugin_t_do_update_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","do_update", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","do_update", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10000,7 +10463,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_do_update_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *) = 0 ;
@@ -10011,9 +10474,9 @@ _wrap_svn_ra_plugin_t_do_update_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","do_update", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","do_update", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *)) ((arg1)->do_update);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -10024,7 +10487,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_do_switch_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *) = (svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10034,9 +10497,9 @@ _wrap_svn_ra_plugin_t_do_switch_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","do_switch", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","do_switch", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10052,7 +10515,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_do_switch_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *) = 0 ;
@@ -10063,9 +10526,9 @@ _wrap_svn_ra_plugin_t_do_switch_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","do_switch", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","do_switch", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *)) ((arg1)->do_switch);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -10076,7 +10539,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_do_status_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_ra_reporter_t const **,void **,char const *,svn_revnum_t,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *) = (svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,char const *,svn_revnum_t,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10086,9 +10549,9 @@ _wrap_svn_ra_plugin_t_do_status_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","do_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","do_status", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_p_q_const__char_svn_revnum_t_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10104,7 +10567,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_do_status_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,svn_ra_reporter_t const **,void **,char const *,svn_revnum_t,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *) = 0 ;
@@ -10115,9 +10578,9 @@ _wrap_svn_ra_plugin_t_do_status_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","do_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","do_status", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,char const *,svn_revnum_t,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *)) ((arg1)->do_status);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_p_q_const__char_svn_revnum_t_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -10128,7 +10591,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_do_diff_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *) = (svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10138,9 +10601,9 @@ _wrap_svn_ra_plugin_t_do_diff_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","do_diff", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","do_diff", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10156,7 +10619,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_do_diff_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *) = 0 ;
@@ -10167,9 +10630,9 @@ _wrap_svn_ra_plugin_t_do_diff_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","do_diff", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","do_diff", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *)) ((arg1)->do_diff);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -10180,7 +10643,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_get_log_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_array_header_t const *,svn_revnum_t,svn_revnum_t,svn_boolean_t,svn_boolean_t,svn_log_message_receiver_t,void *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_array_header_t const *,svn_revnum_t,svn_revnum_t,svn_boolean_t,svn_boolean_t,svn_log_message_receiver_t,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10190,9 +10653,9 @@ _wrap_svn_ra_plugin_t_get_log_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","get_log", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","get_log", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10208,7 +10671,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_get_log_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,apr_array_header_t const *,svn_revnum_t,svn_revnum_t,svn_boolean_t,svn_boolean_t,svn_log_message_receiver_t,void *,apr_pool_t *) = 0 ;
@@ -10219,9 +10682,9 @@ _wrap_svn_ra_plugin_t_get_log_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","get_log", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","get_log", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_array_header_t const *,svn_revnum_t,svn_revnum_t,svn_boolean_t,svn_boolean_t,svn_log_message_receiver_t,void *,apr_pool_t *)) ((arg1)->get_log);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -10232,7 +10695,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_check_path_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_revnum_t,svn_node_kind_t *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_node_kind_t *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10242,9 +10705,9 @@ _wrap_svn_ra_plugin_t_check_path_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","check_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","check_path", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_svn_node_kind_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10260,7 +10723,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_check_path_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,char const *,svn_revnum_t,svn_node_kind_t *,apr_pool_t *) = 0 ;
@@ -10271,9 +10734,9 @@ _wrap_svn_ra_plugin_t_check_path_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","check_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","check_path", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_node_kind_t *,apr_pool_t *)) ((arg1)->check_path);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_svn_node_kind_t_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -10284,7 +10747,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_get_uuid_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,char const **,apr_pool_t *) = (svn_error_t *(*)(void *,char const **,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10294,9 +10757,9 @@ _wrap_svn_ra_plugin_t_get_uuid_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","get_uuid", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","get_uuid", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10312,7 +10775,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_get_uuid_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,char const **,apr_pool_t *) = 0 ;
@@ -10323,9 +10786,9 @@ _wrap_svn_ra_plugin_t_get_uuid_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","get_uuid", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","get_uuid", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,char const **,apr_pool_t *)) ((arg1)->get_uuid);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_p_q_const__char_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -10336,7 +10799,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_get_repos_root_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,char const **,apr_pool_t *) = (svn_error_t *(*)(void *,char const **,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10346,9 +10809,9 @@ _wrap_svn_ra_plugin_t_get_repos_root_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","get_repos_root", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","get_repos_root", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_p_q_const__char_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10364,7 +10827,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_get_repos_root_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,char const **,apr_pool_t *) = 0 ;
@@ -10375,9 +10838,9 @@ _wrap_svn_ra_plugin_t_get_repos_root_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","get_repos_root", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","get_repos_root", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,char const **,apr_pool_t *)) ((arg1)->get_repos_root);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_p_q_const__char_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -10388,7 +10851,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_get_locations_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,apr_hash_t **,char const *,svn_revnum_t,apr_array_header_t *,apr_pool_t *) = (svn_error_t *(*)(void *,apr_hash_t **,char const *,svn_revnum_t,apr_array_header_t *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10398,9 +10861,9 @@ _wrap_svn_ra_plugin_t_get_locations_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","get_locations", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","get_locations", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_p_apr_hash_t_p_q_const__char_svn_revnum_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10416,7 +10879,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_get_locations_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,apr_hash_t **,char const *,svn_revnum_t,apr_array_header_t *,apr_pool_t *) = 0 ;
@@ -10427,9 +10890,9 @@ _wrap_svn_ra_plugin_t_get_locations_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","get_locations", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","get_locations", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,apr_hash_t **,char const *,svn_revnum_t,apr_array_header_t *,apr_pool_t *)) ((arg1)->get_locations);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_p_apr_hash_t_p_q_const__char_svn_revnum_t_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -10440,7 +10903,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_get_file_revs_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_revnum_t,svn_revnum_t,svn_ra_file_rev_handler_t,void *,apr_pool_t *) = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_revnum_t,svn_ra_file_rev_handler_t,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10450,9 +10913,9 @@ _wrap_svn_ra_plugin_t_get_file_revs_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","get_file_revs", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","get_file_revs", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_revnum_t_svn_ra_file_rev_handler_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10468,7 +10931,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_get_file_revs_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,char const *,svn_revnum_t,svn_revnum_t,svn_ra_file_rev_handler_t,void *,apr_pool_t *) = 0 ;
@@ -10479,9 +10942,9 @@ _wrap_svn_ra_plugin_t_get_file_revs_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","get_file_revs", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","get_file_revs", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,svn_revnum_t,svn_revnum_t,svn_ra_file_rev_handler_t,void *,apr_pool_t *)) ((arg1)->get_file_revs);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_svn_revnum_t_svn_ra_file_rev_handler_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -10492,7 +10955,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_get_version_set(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
svn_version_t *(*arg2)(void) = (svn_version_t *(*)(void)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10502,9 +10965,9 @@ _wrap_svn_ra_plugin_t_get_version_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","get_version", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","get_version", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_void__p_svn_version_t);
if (!SWIG_IsOK(res)) {
@@ -10520,7 +10983,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_ra_plugin_t_get_version_get(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *arg1 = (svn_ra_plugin_t *) 0 ;
+ struct svn_ra_plugin_t *arg1 = (struct svn_ra_plugin_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_version_t *(*result)(void) = 0 ;
@@ -10531,9 +10994,9 @@ _wrap_svn_ra_plugin_t_get_version_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_ra_plugin_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_ra_plugin_t *","get_version", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_ra_plugin_t *","get_version", 1, self ));
}
- arg1 = (svn_ra_plugin_t *)(argp1);
+ arg1 = (struct svn_ra_plugin_t *)(argp1);
result = (svn_version_t *(*)(void)) ((arg1)->get_version);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_void__p_svn_version_t);
return vresult;
@@ -10561,13 +11024,13 @@ _wrap_svn_ra_plugin_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_ra_plugin_t(int argc, VALUE *argv, VALUE self) {
- svn_ra_plugin_t *result = 0 ;
+ struct svn_ra_plugin_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_ra_plugin_t *)calloc(1, sizeof(svn_ra_plugin_t));
+ result = (struct svn_ra_plugin_t *)calloc(1, sizeof(struct svn_ra_plugin_t));
DATA_PTR(self) = result;
@@ -10580,7 +11043,7 @@ fail:
SWIGINTERN void
-free_svn_ra_plugin_t(svn_ra_plugin_t *arg1) {
+free_svn_ra_plugin_t(struct svn_ra_plugin_t *arg1) {
free((char *) arg1);
}
@@ -14387,6 +14850,86 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_ra_invoke_get_wc_contents_func(int argc, VALUE *argv, VALUE self) {
+ svn_ra_get_wc_contents_func_t arg1 = (svn_ra_get_wc_contents_func_t) 0 ;
+ void *arg2 = (void *) 0 ;
+ svn_stream_t **arg3 = (svn_stream_t **) 0 ;
+ svn_checksum_t *arg4 = (svn_checksum_t *) 0 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int res2 ;
+ svn_stream_t *temp3 ;
+ void *argp4 = 0 ;
+ int res4 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg5);
+ _global_pool = arg5;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg3 = &temp3;
+ if ((argc < 3) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg1), SWIGTYPE_p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_ra_get_wc_contents_func_t","svn_ra_invoke_get_wc_contents_func", 1, argv[0] ));
+ }
+ }
+ res2 = SWIG_ConvertPtr(argv[1],SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "void *","svn_ra_invoke_get_wc_contents_func", 2, argv[1] ));
+ }
+ res4 = SWIG_ConvertPtr(argv[2], &argp4,SWIGTYPE_p_svn_checksum_t, 0 | 0 );
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "svn_checksum_t const *","svn_ra_invoke_get_wc_contents_func", 4, argv[2] ));
+ }
+ arg4 = (svn_checksum_t *)(argp4);
+ if (argc > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_ra_invoke_get_wc_contents_func(arg1,arg2,arg3,(struct svn_checksum_t const *)arg4,arg5);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg3, SWIGTYPE_p_svn_stream_t, 0));
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_ra_invoke_get_latest_revnum_func(int argc, VALUE *argv, VALUE self) {
svn_ra_get_latest_revnum_func_t arg1 = (svn_ra_get_latest_revnum_func_t) 0 ;
void *arg2 = (void *) 0 ;
@@ -15066,7 +15609,7 @@ fail:
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
-static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *|svn_rangelist_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_file_t = {"_p_apr_file_t", "apr_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_hash_t = {"_p_apr_hash_t", "apr_hash_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int32_t = {"_p_apr_int32_t", "apr_int32_t *|time_t *", 0, 0, (void*)0, 0};
@@ -15092,6 +15635,7 @@ static swig_type_info _swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void
static swig_type_info _swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *)|struct svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *)|struct svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_delta_editor_t const *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *)|struct svn_error_t *(*)(void *,svn_ra_reporter_t const **,void **,svn_revnum_t,char const *,svn_boolean_t,svn_boolean_t,char const *,svn_delta_editor_t const *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,svn_stream_t **,svn_checksum_t const *,apr_pool_t *)|svn_ra_get_wc_contents_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_error_t *(*)(void *,apr_array_header_t const *,svn_revnum_t,svn_revnum_t,svn_boolean_t,svn_boolean_t,svn_log_message_receiver_t,void *,apr_pool_t *)|struct svn_error_t *(*)(void *,apr_array_header_t const *,svn_revnum_t,svn_revnum_t,svn_boolean_t,svn_boolean_t,svn_log_message_receiver_t,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t", "svn_error_t *(*)(void *,char const *,apr_pool_t *)|struct svn_error_t *(*)(void *,char const *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,char const *,apr_pool_t *)|svn_ra_invalidate_wc_props_func_t", 0, 0, (void*)0, 0};
@@ -15123,6 +15667,7 @@ static swig_type_info _swigt__p_f_svn_revnum_t_p_void_p_q_const__svn_delta_edito
static swig_type_info _swigt__p_f_void__p_svn_version_t = {"_p_f_void__p_svn_version_t", "struct svn_version_t *(*)(void)|svn_version_t *(*)(void)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_int = {"_p_int", "int *|svn_boolean_t *|apr_status_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_long = {"_p_long", "long *|svn_revnum_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_apr_array_header_t = {"_p_p_apr_array_header_t", "apr_array_header_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_apr_file_t = {"_p_p_apr_file_t", "apr_file_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_apr_hash_t = {"_p_p_apr_hash_t", "apr_hash_t **|svn_mergeinfo_catalog_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0};
@@ -15136,6 +15681,7 @@ static swig_type_info _swigt__p_p_svn_ra_reporter2_t = {"_p_p_svn_ra_reporter2_t
static swig_type_info _swigt__p_p_svn_ra_reporter3_t = {"_p_p_svn_ra_reporter3_t", "struct svn_ra_reporter3_t **|svn_ra_reporter3_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_ra_reporter_t = {"_p_p_svn_ra_reporter_t", "struct svn_ra_reporter_t **|svn_ra_reporter_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_ra_session_t = {"_p_p_svn_ra_session_t", "struct svn_ra_session_t **|svn_ra_session_t **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_svn_stream_t = {"_p_p_svn_stream_t", "struct svn_stream_t **|svn_stream_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_string_t = {"_p_p_svn_string_t", "struct svn_string_t **|svn_string_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_stringbuf_t = {"_p_p_svn_stringbuf_t", "struct svn_stringbuf_t **|svn_stringbuf_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_void = {"_p_p_void", "void **", 0, 0, (void*)0, 0};
@@ -15149,6 +15695,9 @@ static swig_type_info _swigt__p_svn_auth_iterstate_t = {"_p_svn_auth_iterstate_t
static swig_type_info _swigt__p_svn_auth_provider_object_t = {"_p_svn_auth_provider_object_t", "struct svn_auth_provider_object_t *|svn_auth_provider_object_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_provider_t = {"_p_svn_auth_provider_t", "struct svn_auth_provider_t *|svn_auth_provider_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_ssl_server_cert_info_t = {"_p_svn_auth_ssl_server_cert_info_t", "struct svn_auth_ssl_server_cert_info_t *|svn_auth_ssl_server_cert_info_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_ctx_t = {"_p_svn_checksum_ctx_t", "struct svn_checksum_ctx_t *|svn_checksum_ctx_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "enum svn_checksum_kind_t *|svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "struct svn_checksum_t *|svn_checksum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_commit_info_t = {"_p_svn_commit_info_t", "struct svn_commit_info_t *|svn_commit_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_config_t = {"_p_svn_config_t", "struct svn_config_t *|svn_config_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_delta_editor_t = {"_p_svn_delta_editor_t", "struct svn_delta_editor_t *|svn_delta_editor_t *", 0, 0, (void*)0, 0};
@@ -15184,6 +15733,7 @@ static swig_type_info _swigt__p_svn_opt_subcommand_desc2_t = {"_p_svn_opt_subcom
static swig_type_info _swigt__p_svn_opt_subcommand_desc_t = {"_p_svn_opt_subcommand_desc_t", "struct svn_opt_subcommand_desc_t *|svn_opt_subcommand_desc_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_file_t = {"_p_svn_patch_file_t", "struct svn_patch_file_t *|svn_patch_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_t = {"_p_svn_patch_t", "struct svn_patch_t *|svn_patch_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_prop_inherited_item_t = {"_p_svn_prop_inherited_item_t", "struct svn_prop_inherited_item_t *|svn_prop_inherited_item_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_kind = {"_p_svn_prop_kind", "svn_prop_kind_t *|enum svn_prop_kind *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_patch_t = {"_p_svn_prop_patch_t", "struct svn_prop_patch_t *|svn_prop_patch_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_ra_callbacks2_t = {"_p_svn_ra_callbacks2_t", "struct svn_ra_callbacks2_t *|svn_ra_callbacks2_t *", 0, 0, (void*)0, 0};
@@ -15202,6 +15752,9 @@ static swig_type_info _swigt__p_svn_txdelta_op_t = {"_p_svn_txdelta_op_t", "stru
static swig_type_info _swigt__p_svn_txdelta_stream_t = {"_p_svn_txdelta_stream_t", "struct svn_txdelta_stream_t *|svn_txdelta_stream_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_txdelta_window_t = {"_p_svn_txdelta_window_t", "struct svn_txdelta_window_t *|svn_txdelta_window_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_checklist_t = {"_p_svn_version_checklist_t", "struct svn_version_checklist_t *|svn_version_checklist_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_linked_lib_t = {"_p_svn_version_ext_linked_lib_t", "struct svn_version_ext_linked_lib_t *|svn_version_ext_linked_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_loaded_lib_t = {"_p_svn_version_ext_loaded_lib_t", "struct svn_version_ext_loaded_lib_t *|svn_version_ext_loaded_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_extended_t = {"_p_svn_version_extended_t", "struct svn_version_extended_t *|svn_version_extended_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_t = {"_p_svn_version_t", "struct svn_version_t *|svn_version_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_long = {"_p_unsigned_long", "unsigned long *|svn_linenum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_void = {"_p_void", "void *", 0, 0, (void*)0, 0};
@@ -15233,6 +15786,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
@@ -15264,6 +15818,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_f_void__p_svn_version_t,
&_swigt__p_int,
&_swigt__p_long,
+ &_swigt__p_p_apr_array_header_t,
&_swigt__p_p_apr_file_t,
&_swigt__p_p_apr_hash_t,
&_swigt__p_p_char,
@@ -15277,6 +15832,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_p_svn_ra_reporter3_t,
&_swigt__p_p_svn_ra_reporter_t,
&_swigt__p_p_svn_ra_session_t,
+ &_swigt__p_p_svn_stream_t,
&_swigt__p_p_svn_string_t,
&_swigt__p_p_svn_stringbuf_t,
&_swigt__p_p_void,
@@ -15290,6 +15846,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_auth_provider_object_t,
&_swigt__p_svn_auth_provider_t,
&_swigt__p_svn_auth_ssl_server_cert_info_t,
+ &_swigt__p_svn_checksum_ctx_t,
+ &_swigt__p_svn_checksum_kind_t,
+ &_swigt__p_svn_checksum_t,
&_swigt__p_svn_commit_info_t,
&_swigt__p_svn_config_t,
&_swigt__p_svn_delta_editor_t,
@@ -15325,6 +15884,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_opt_subcommand_desc_t,
&_swigt__p_svn_patch_file_t,
&_swigt__p_svn_patch_t,
+ &_swigt__p_svn_prop_inherited_item_t,
&_swigt__p_svn_prop_kind,
&_swigt__p_svn_prop_patch_t,
&_swigt__p_svn_ra_callbacks2_t,
@@ -15343,6 +15903,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_txdelta_stream_t,
&_swigt__p_svn_txdelta_window_t,
&_swigt__p_svn_version_checklist_t,
+ &_swigt__p_svn_version_ext_linked_lib_t,
+ &_swigt__p_svn_version_ext_loaded_lib_t,
+ &_swigt__p_svn_version_extended_t,
&_swigt__p_svn_version_t,
&_swigt__p_unsigned_long,
&_swigt__p_void,
@@ -15374,6 +15937,7 @@ static swig_cast_info _swigc__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void
static swig_cast_info _swigc__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -15405,6 +15969,7 @@ static swig_cast_info _swigc__p_f_svn_revnum_t_p_void_p_q_const__svn_delta_edito
static swig_cast_info _swigc__p_f_void__p_svn_version_t[] = { {&_swigt__p_f_void__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_int[] = { {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_long[] = { {&_swigt__p_long, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_apr_array_header_t[] = { {&_swigt__p_p_apr_array_header_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_apr_file_t[] = { {&_swigt__p_p_apr_file_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_apr_hash_t[] = { {&_swigt__p_p_apr_hash_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_char[] = { {&_swigt__p_p_char, 0, 0, 0},{0, 0, 0, 0}};
@@ -15418,6 +15983,7 @@ static swig_cast_info _swigc__p_p_svn_ra_reporter2_t[] = { {&_swigt__p_p_svn_ra
static swig_cast_info _swigc__p_p_svn_ra_reporter3_t[] = { {&_swigt__p_p_svn_ra_reporter3_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_ra_reporter_t[] = { {&_swigt__p_p_svn_ra_reporter_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_ra_session_t[] = { {&_swigt__p_p_svn_ra_session_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_svn_stream_t[] = { {&_swigt__p_p_svn_stream_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_string_t[] = { {&_swigt__p_p_svn_string_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_stringbuf_t[] = { {&_swigt__p_p_svn_stringbuf_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_void[] = { {&_swigt__p_p_void, 0, 0, 0},{0, 0, 0, 0}};
@@ -15431,6 +15997,9 @@ static swig_cast_info _swigc__p_svn_auth_iterstate_t[] = { {&_swigt__p_svn_auth
static swig_cast_info _swigc__p_svn_auth_provider_object_t[] = { {&_swigt__p_svn_auth_provider_object_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_provider_t[] = { {&_swigt__p_svn_auth_provider_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_ssl_server_cert_info_t[] = { {&_swigt__p_svn_auth_ssl_server_cert_info_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_ctx_t[] = { {&_swigt__p_svn_checksum_ctx_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_kind_t[] = { {&_swigt__p_svn_checksum_kind_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_t[] = { {&_swigt__p_svn_checksum_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_commit_info_t[] = { {&_swigt__p_svn_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_config_t[] = { {&_swigt__p_svn_config_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_delta_editor_t[] = { {&_swigt__p_svn_delta_editor_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -15466,6 +16035,7 @@ static swig_cast_info _swigc__p_svn_opt_subcommand_desc2_t[] = { {&_swigt__p_sv
static swig_cast_info _swigc__p_svn_opt_subcommand_desc_t[] = { {&_swigt__p_svn_opt_subcommand_desc_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_file_t[] = { {&_swigt__p_svn_patch_file_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_t[] = { {&_swigt__p_svn_patch_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_prop_inherited_item_t[] = { {&_swigt__p_svn_prop_inherited_item_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_kind[] = { {&_swigt__p_svn_prop_kind, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_patch_t[] = { {&_swigt__p_svn_prop_patch_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_ra_callbacks2_t[] = { {&_swigt__p_svn_ra_callbacks2_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -15484,6 +16054,9 @@ static swig_cast_info _swigc__p_svn_txdelta_op_t[] = { {&_swigt__p_svn_txdelta_
static swig_cast_info _swigc__p_svn_txdelta_stream_t[] = { {&_swigt__p_svn_txdelta_stream_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_txdelta_window_t[] = { {&_swigt__p_svn_txdelta_window_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_checklist_t[] = { {&_swigt__p_svn_version_checklist_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_linked_lib_t[] = { {&_swigt__p_svn_version_ext_linked_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_loaded_lib_t[] = { {&_swigt__p_svn_version_ext_loaded_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_extended_t[] = { {&_swigt__p_svn_version_extended_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_t[] = { {&_swigt__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_long[] = { {&_swigt__p_unsigned_long, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_void[] = { {&_swigt__p_void, 0, 0, 0},{0, 0, 0, 0}};
@@ -15515,6 +16088,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_p_q_const__svn_ra_reporter_t_p_p_void_svn_revnum_t_p_q_const__char_svn_boolean_t_svn_boolean_t_p_q_const__char_p_q_const__svn_delta_editor_t_p_void_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_f_p_void_p_p_svn_stream_t_p_q_const__svn_checksum_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__apr_array_header_t_svn_revnum_t_svn_revnum_t_svn_boolean_t_svn_boolean_t_svn_log_message_receiver_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
@@ -15546,6 +16120,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_f_void__p_svn_version_t,
_swigc__p_int,
_swigc__p_long,
+ _swigc__p_p_apr_array_header_t,
_swigc__p_p_apr_file_t,
_swigc__p_p_apr_hash_t,
_swigc__p_p_char,
@@ -15559,6 +16134,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_p_svn_ra_reporter3_t,
_swigc__p_p_svn_ra_reporter_t,
_swigc__p_p_svn_ra_session_t,
+ _swigc__p_p_svn_stream_t,
_swigc__p_p_svn_string_t,
_swigc__p_p_svn_stringbuf_t,
_swigc__p_p_void,
@@ -15572,6 +16148,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_auth_provider_object_t,
_swigc__p_svn_auth_provider_t,
_swigc__p_svn_auth_ssl_server_cert_info_t,
+ _swigc__p_svn_checksum_ctx_t,
+ _swigc__p_svn_checksum_kind_t,
+ _swigc__p_svn_checksum_t,
_swigc__p_svn_commit_info_t,
_swigc__p_svn_config_t,
_swigc__p_svn_delta_editor_t,
@@ -15607,6 +16186,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_opt_subcommand_desc_t,
_swigc__p_svn_patch_file_t,
_swigc__p_svn_patch_t,
+ _swigc__p_svn_prop_inherited_item_t,
_swigc__p_svn_prop_kind,
_swigc__p_svn_prop_patch_t,
_swigc__p_svn_ra_callbacks2_t,
@@ -15625,6 +16205,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_txdelta_stream_t,
_swigc__p_svn_txdelta_window_t,
_swigc__p_svn_version_checklist_t,
+ _swigc__p_svn_version_ext_linked_lib_t,
+ _swigc__p_svn_version_ext_loaded_lib_t,
+ _swigc__p_svn_version_extended_t,
_swigc__p_svn_version_t,
_swigc__p_unsigned_long,
_swigc__p_void,
@@ -15692,8 +16275,6 @@ SWIG_InitializeModule(void *clientdata) {
swig_module_info *module_head, *iter;
int found, init;
- clientdata = clientdata;
-
/* check to see if the circular list has been setup, if not, set it up */
if (swig_module.next==0) {
/* Initialize the swig_module */
@@ -15972,6 +16553,8 @@ SWIGEXPORT void Init_ra(void) {
rb_define_method(SwigClassSvn_ra_callbacks2_t.klass, "cancel_func", _wrap_svn_ra_callbacks2_t_cancel_func_get, -1);
rb_define_method(SwigClassSvn_ra_callbacks2_t.klass, "get_client_string=", _wrap_svn_ra_callbacks2_t_get_client_string_set, -1);
rb_define_method(SwigClassSvn_ra_callbacks2_t.klass, "get_client_string", _wrap_svn_ra_callbacks2_t_get_client_string_get, -1);
+ rb_define_method(SwigClassSvn_ra_callbacks2_t.klass, "get_wc_contents=", _wrap_svn_ra_callbacks2_t_get_wc_contents_set, -1);
+ rb_define_method(SwigClassSvn_ra_callbacks2_t.klass, "get_wc_contents", _wrap_svn_ra_callbacks2_t_get_wc_contents_get, -1);
SwigClassSvn_ra_callbacks2_t.mark = 0;
SwigClassSvn_ra_callbacks2_t.destroy = (void (*)(void *)) free_svn_ra_callbacks2_t;
SwigClassSvn_ra_callbacks2_t.trackObjects = 0;
@@ -16018,8 +16601,10 @@ SWIGEXPORT void Init_ra(void) {
rb_define_module_function(mRa, "svn_ra_get_dir2", _wrap_svn_ra_get_dir2, -1);
rb_define_module_function(mRa, "svn_ra_get_dir", _wrap_svn_ra_get_dir, -1);
rb_define_module_function(mRa, "svn_ra_get_mergeinfo", _wrap_svn_ra_get_mergeinfo, -1);
+ rb_define_module_function(mRa, "svn_ra_do_update3", _wrap_svn_ra_do_update3, -1);
rb_define_module_function(mRa, "svn_ra_do_update2", _wrap_svn_ra_do_update2, -1);
rb_define_module_function(mRa, "svn_ra_do_update", _wrap_svn_ra_do_update, -1);
+ rb_define_module_function(mRa, "svn_ra_do_switch3", _wrap_svn_ra_do_switch3, -1);
rb_define_module_function(mRa, "svn_ra_do_switch2", _wrap_svn_ra_do_switch2, -1);
rb_define_module_function(mRa, "svn_ra_do_switch", _wrap_svn_ra_do_switch, -1);
rb_define_module_function(mRa, "svn_ra_do_status2", _wrap_svn_ra_do_status2, -1);
@@ -16047,6 +16632,7 @@ SWIGEXPORT void Init_ra(void) {
rb_define_module_function(mRa, "svn_ra_replay_range", _wrap_svn_ra_replay_range, -1);
rb_define_module_function(mRa, "svn_ra_replay", _wrap_svn_ra_replay, -1);
rb_define_module_function(mRa, "svn_ra_get_deleted_rev", _wrap_svn_ra_get_deleted_rev, -1);
+ rb_define_module_function(mRa, "svn_ra_get_inherited_props", _wrap_svn_ra_get_inherited_props, -1);
rb_define_module_function(mRa, "svn_ra_has_capability", _wrap_svn_ra_has_capability, -1);
rb_define_const(mRa, "SVN_RA_CAPABILITY_DEPTH", SWIG_FromCharPtr("depth"));
rb_define_const(mRa, "SVN_RA_CAPABILITY_MERGEINFO", SWIG_FromCharPtr("mergeinfo"));
@@ -16054,6 +16640,9 @@ SWIGEXPORT void Init_ra(void) {
rb_define_const(mRa, "SVN_RA_CAPABILITY_PARTIAL_REPLAY", SWIG_FromCharPtr("partial-replay"));
rb_define_const(mRa, "SVN_RA_CAPABILITY_COMMIT_REVPROPS", SWIG_FromCharPtr("commit-revprops"));
rb_define_const(mRa, "SVN_RA_CAPABILITY_ATOMIC_REVPROPS", SWIG_FromCharPtr("atomic-revprops"));
+ rb_define_const(mRa, "SVN_RA_CAPABILITY_INHERITED_PROPS", SWIG_FromCharPtr("inherited-props"));
+ rb_define_const(mRa, "SVN_RA_CAPABILITY_EPHEMERAL_TXNPROPS", SWIG_FromCharPtr("ephemeral-txnprops"));
+ rb_define_const(mRa, "SVN_RA_CAPABILITY_GET_FILE_REVS_REVERSE", SWIG_FromCharPtr("get-file-revs-reversed"));
rb_define_module_function(mRa, "svn_ra_print_modules", _wrap_svn_ra_print_modules, -1);
rb_define_module_function(mRa, "svn_ra_print_ra_libraries", _wrap_svn_ra_print_ra_libraries, -1);
@@ -16152,6 +16741,7 @@ SWIGEXPORT void Init_ra(void) {
rb_define_module_function(mRa, "svn_ra_invoke_set_wc_prop_func", _wrap_svn_ra_invoke_set_wc_prop_func, -1);
rb_define_module_function(mRa, "svn_ra_invoke_push_wc_prop_func", _wrap_svn_ra_invoke_push_wc_prop_func, -1);
rb_define_module_function(mRa, "svn_ra_invoke_invalidate_wc_props_func", _wrap_svn_ra_invoke_invalidate_wc_props_func, -1);
+ rb_define_module_function(mRa, "svn_ra_invoke_get_wc_contents_func", _wrap_svn_ra_invoke_get_wc_contents_func, -1);
rb_define_module_function(mRa, "svn_ra_invoke_get_latest_revnum_func", _wrap_svn_ra_invoke_get_latest_revnum_func, -1);
rb_define_module_function(mRa, "svn_ra_invoke_get_client_string_func", _wrap_svn_ra_invoke_get_client_string_func, -1);
rb_define_module_function(mRa, "svn_ra_invoke_file_rev_handler", _wrap_svn_ra_invoke_file_rev_handler, -1);
diff --git a/subversion/bindings/swig/ruby/svn_repos.c b/subversion/bindings/swig/ruby/svn_repos.c
index 451b3d0..98c70af 100644
--- a/subversion/bindings/swig/ruby/svn_repos.c
+++ b/subversion/bindings/swig/ruby/svn_repos.c
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -1374,7 +1374,7 @@ SWIG_Ruby_AppendOutput(VALUE target, VALUE o) {
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Ruby_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Ruby_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Ruby_SetModule(pointer)
@@ -1528,7 +1528,7 @@ SWIG_Ruby_NewPointerObj(void *ptr, swig_type_info *type, int flags)
downcast methods. */
if (obj != Qnil) {
VALUE value = rb_iv_get(obj, "@__swigtype__");
- char* type_name = RSTRING_PTR(value);
+ const char* type_name = RSTRING_PTR(value);
if (strcmp(type->name, type_name) == 0) {
return obj;
@@ -1710,7 +1710,7 @@ SWIG_Ruby_ConvertPacked(VALUE obj, void *ptr, int sz, swig_type_info *ty) {
}
SWIGRUNTIME swig_module_info *
-SWIG_Ruby_GetModule(void)
+SWIG_Ruby_GetModule(void *SWIGUNUSEDPARM(clientdata))
{
VALUE pointer;
swig_module_info *ret = 0;
@@ -1798,126 +1798,137 @@ int SWIG_Ruby_arity( VALUE proc, int minimal )
#define SWIGTYPE_p_apr_int64_t swig_types[3]
#define SWIGTYPE_p_apr_pool_t swig_types[4]
#define SWIGTYPE_p_char swig_types[5]
-#define SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[6]
-#define SWIGTYPE_p_f_p_p_svn_stream_t_p_void__p_svn_error_t swig_types[7]
-#define SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[8]
-#define SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[9]
-#define SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[10]
-#define SWIGTYPE_p_f_p_svn_boolean_t_p_svn_fs_root_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[11]
-#define SWIGTYPE_p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[12]
-#define SWIGTYPE_p_f_p_svn_txdelta_window_handler_t_p_p_void_p_void__p_svn_error_t swig_types[13]
-#define SWIGTYPE_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t swig_types[14]
-#define SWIGTYPE_p_f_p_void__p_svn_error_t swig_types[15]
-#define SWIGTYPE_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t swig_types[16]
-#define SWIGTYPE_p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[17]
-#define SWIGTYPE_p_f_p_void_p_q_const__char__p_svn_error_t swig_types[18]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t swig_types[19]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[20]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[21]
-#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_pool_t__p_svn_error_t swig_types[22]
-#define SWIGTYPE_p_f_p_void_p_q_const__struct_svn_repos_notify_t_p_apr_pool_t__void swig_types[23]
-#define SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t swig_types[24]
-#define SWIGTYPE_p_f_svn_repos_authz_access_t_p_svn_boolean_t_p_svn_fs_root_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[25]
-#define SWIGTYPE_p_f_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t swig_types[26]
-#define SWIGTYPE_p_int swig_types[27]
-#define SWIGTYPE_p_long swig_types[28]
-#define SWIGTYPE_p_p_apr_array_header_t swig_types[29]
-#define SWIGTYPE_p_p_apr_hash_t swig_types[30]
-#define SWIGTYPE_p_p_char swig_types[31]
-#define SWIGTYPE_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t swig_types[32]
-#define SWIGTYPE_p_p_svn_authz_t swig_types[33]
-#define SWIGTYPE_p_p_svn_delta_editor_t swig_types[34]
-#define SWIGTYPE_p_p_svn_dirent_t swig_types[35]
-#define SWIGTYPE_p_p_svn_fs_txn_t swig_types[36]
-#define SWIGTYPE_p_p_svn_lock_t swig_types[37]
-#define SWIGTYPE_p_p_svn_repos_parse_fns2_t swig_types[38]
-#define SWIGTYPE_p_p_svn_repos_parse_fns_t swig_types[39]
-#define SWIGTYPE_p_p_svn_repos_t swig_types[40]
-#define SWIGTYPE_p_p_svn_stream_t swig_types[41]
-#define SWIGTYPE_p_p_svn_string_t swig_types[42]
-#define SWIGTYPE_p_p_void swig_types[43]
-#define SWIGTYPE_p_svn_auth_baton_t swig_types[44]
-#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[45]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[46]
-#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[47]
-#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[48]
-#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[49]
-#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[50]
-#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[51]
-#define SWIGTYPE_p_svn_auth_provider_t swig_types[52]
-#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[53]
-#define SWIGTYPE_p_svn_authz_t swig_types[54]
-#define SWIGTYPE_p_svn_commit_info_t swig_types[55]
-#define SWIGTYPE_p_svn_config_t swig_types[56]
-#define SWIGTYPE_p_svn_delta_editor_t swig_types[57]
-#define SWIGTYPE_p_svn_depth_t swig_types[58]
-#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[59]
-#define SWIGTYPE_p_svn_diff_datasource_e swig_types[60]
-#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[61]
-#define SWIGTYPE_p_svn_diff_file_options_t swig_types[62]
-#define SWIGTYPE_p_svn_diff_fns2_t swig_types[63]
-#define SWIGTYPE_p_svn_diff_fns_t swig_types[64]
-#define SWIGTYPE_p_svn_diff_hunk_t swig_types[65]
-#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[66]
-#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[67]
-#define SWIGTYPE_p_svn_diff_t swig_types[68]
-#define SWIGTYPE_p_svn_dirent_t swig_types[69]
-#define SWIGTYPE_p_svn_errno_t swig_types[70]
-#define SWIGTYPE_p_svn_error_t swig_types[71]
-#define SWIGTYPE_p_svn_fs_access_t swig_types[72]
-#define SWIGTYPE_p_svn_fs_dirent_t swig_types[73]
-#define SWIGTYPE_p_svn_fs_history_t swig_types[74]
-#define SWIGTYPE_p_svn_fs_id_t swig_types[75]
-#define SWIGTYPE_p_svn_fs_pack_notify_action_t swig_types[76]
-#define SWIGTYPE_p_svn_fs_path_change2_t swig_types[77]
-#define SWIGTYPE_p_svn_fs_path_change_kind_t swig_types[78]
-#define SWIGTYPE_p_svn_fs_path_change_t swig_types[79]
-#define SWIGTYPE_p_svn_fs_root_t swig_types[80]
-#define SWIGTYPE_p_svn_fs_t swig_types[81]
-#define SWIGTYPE_p_svn_fs_txn_t swig_types[82]
-#define SWIGTYPE_p_svn_io_dirent2_t swig_types[83]
-#define SWIGTYPE_p_svn_io_dirent_t swig_types[84]
-#define SWIGTYPE_p_svn_io_file_del_t swig_types[85]
-#define SWIGTYPE_p_svn_location_segment_t swig_types[86]
-#define SWIGTYPE_p_svn_lock_t swig_types[87]
-#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[88]
-#define SWIGTYPE_p_svn_log_changed_path_t swig_types[89]
-#define SWIGTYPE_p_svn_log_entry_t swig_types[90]
-#define SWIGTYPE_p_svn_merge_range_t swig_types[91]
-#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[92]
-#define SWIGTYPE_p_svn_node_kind_t swig_types[93]
-#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[94]
-#define SWIGTYPE_p_svn_opt_revision_t swig_types[95]
-#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[96]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[97]
-#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[98]
-#define SWIGTYPE_p_svn_patch_file_t swig_types[99]
-#define SWIGTYPE_p_svn_patch_t swig_types[100]
-#define SWIGTYPE_p_svn_prop_kind swig_types[101]
-#define SWIGTYPE_p_svn_prop_patch_t swig_types[102]
-#define SWIGTYPE_p_svn_repos_authz_access_t swig_types[103]
-#define SWIGTYPE_p_svn_repos_node_t swig_types[104]
-#define SWIGTYPE_p_svn_repos_notify_action_t swig_types[105]
-#define SWIGTYPE_p_svn_repos_notify_t swig_types[106]
-#define SWIGTYPE_p_svn_repos_notify_warning_t swig_types[107]
-#define SWIGTYPE_p_svn_repos_parse_fns2_t swig_types[108]
-#define SWIGTYPE_p_svn_repos_parse_fns_t swig_types[109]
-#define SWIGTYPE_p_svn_repos_revision_access_level_t swig_types[110]
-#define SWIGTYPE_p_svn_repos_t swig_types[111]
-#define SWIGTYPE_p_svn_stream_mark_t swig_types[112]
-#define SWIGTYPE_p_svn_stream_t swig_types[113]
-#define SWIGTYPE_p_svn_string_t swig_types[114]
-#define SWIGTYPE_p_svn_stringbuf_t swig_types[115]
-#define SWIGTYPE_p_svn_tristate_t swig_types[116]
-#define SWIGTYPE_p_svn_txdelta_op_t swig_types[117]
-#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[118]
-#define SWIGTYPE_p_svn_txdelta_window_t swig_types[119]
-#define SWIGTYPE_p_svn_version_checklist_t swig_types[120]
-#define SWIGTYPE_p_svn_version_t swig_types[121]
-#define SWIGTYPE_p_unsigned_long swig_types[122]
-#define SWIGTYPE_p_void swig_types[123]
-static swig_type_info *swig_types[125];
-static swig_module_info swig_module = {swig_types, 124, 0, 0, 0, 0};
+#define SWIGTYPE_p_f_int_p_void_p_apr_pool_t__p_svn_error_t swig_types[6]
+#define SWIGTYPE_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[7]
+#define SWIGTYPE_p_f_p_p_svn_stream_t_p_void__p_svn_error_t swig_types[8]
+#define SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[9]
+#define SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[10]
+#define SWIGTYPE_p_f_p_q_const__svn_commit_info_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[11]
+#define SWIGTYPE_p_f_p_svn_boolean_t_p_svn_fs_root_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[12]
+#define SWIGTYPE_p_f_p_svn_location_segment_t_p_void_p_apr_pool_t__p_svn_error_t swig_types[13]
+#define SWIGTYPE_p_f_p_svn_txdelta_window_handler_t_p_p_void_p_void__p_svn_error_t swig_types[14]
+#define SWIGTYPE_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t swig_types[15]
+#define SWIGTYPE_p_f_p_void__p_svn_error_t swig_types[16]
+#define SWIGTYPE_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t swig_types[17]
+#define SWIGTYPE_p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t swig_types[18]
+#define SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t swig_types[19]
+#define SWIGTYPE_p_f_p_void_p_q_const__char__p_svn_error_t swig_types[20]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t swig_types[21]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[22]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_svn_boolean_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t swig_types[23]
+#define SWIGTYPE_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_pool_t__p_svn_error_t swig_types[24]
+#define SWIGTYPE_p_f_p_void_p_q_const__struct_svn_repos_notify_t_p_apr_pool_t__void swig_types[25]
+#define SWIGTYPE_p_f_p_void_p_svn_log_entry_t_p_apr_pool_t__p_svn_error_t swig_types[26]
+#define SWIGTYPE_p_f_svn_repos_authz_access_t_p_svn_boolean_t_p_svn_fs_root_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t swig_types[27]
+#define SWIGTYPE_p_f_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t swig_types[28]
+#define SWIGTYPE_p_int swig_types[29]
+#define SWIGTYPE_p_long swig_types[30]
+#define SWIGTYPE_p_p_apr_array_header_t swig_types[31]
+#define SWIGTYPE_p_p_apr_hash_t swig_types[32]
+#define SWIGTYPE_p_p_char swig_types[33]
+#define SWIGTYPE_p_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t swig_types[34]
+#define SWIGTYPE_p_p_svn_authz_t swig_types[35]
+#define SWIGTYPE_p_p_svn_delta_editor_t swig_types[36]
+#define SWIGTYPE_p_p_svn_dirent_t swig_types[37]
+#define SWIGTYPE_p_p_svn_fs_txn_t swig_types[38]
+#define SWIGTYPE_p_p_svn_lock_t swig_types[39]
+#define SWIGTYPE_p_p_svn_repos_parse_fns2_t swig_types[40]
+#define SWIGTYPE_p_p_svn_repos_parse_fns3_t swig_types[41]
+#define SWIGTYPE_p_p_svn_repos_parse_fns_t swig_types[42]
+#define SWIGTYPE_p_p_svn_repos_t swig_types[43]
+#define SWIGTYPE_p_p_svn_stream_t swig_types[44]
+#define SWIGTYPE_p_p_svn_string_t swig_types[45]
+#define SWIGTYPE_p_p_void swig_types[46]
+#define SWIGTYPE_p_svn_auth_baton_t swig_types[47]
+#define SWIGTYPE_p_svn_auth_cred_simple_t swig_types[48]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_pw_t swig_types[49]
+#define SWIGTYPE_p_svn_auth_cred_ssl_client_cert_t swig_types[50]
+#define SWIGTYPE_p_svn_auth_cred_ssl_server_trust_t swig_types[51]
+#define SWIGTYPE_p_svn_auth_cred_username_t swig_types[52]
+#define SWIGTYPE_p_svn_auth_iterstate_t swig_types[53]
+#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[54]
+#define SWIGTYPE_p_svn_auth_provider_t swig_types[55]
+#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[56]
+#define SWIGTYPE_p_svn_authz_t swig_types[57]
+#define SWIGTYPE_p_svn_checksum_ctx_t swig_types[58]
+#define SWIGTYPE_p_svn_checksum_kind_t swig_types[59]
+#define SWIGTYPE_p_svn_checksum_t swig_types[60]
+#define SWIGTYPE_p_svn_commit_info_t swig_types[61]
+#define SWIGTYPE_p_svn_config_t swig_types[62]
+#define SWIGTYPE_p_svn_delta_editor_t swig_types[63]
+#define SWIGTYPE_p_svn_depth_t swig_types[64]
+#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[65]
+#define SWIGTYPE_p_svn_diff_datasource_e swig_types[66]
+#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[67]
+#define SWIGTYPE_p_svn_diff_file_options_t swig_types[68]
+#define SWIGTYPE_p_svn_diff_fns2_t swig_types[69]
+#define SWIGTYPE_p_svn_diff_fns_t swig_types[70]
+#define SWIGTYPE_p_svn_diff_hunk_t swig_types[71]
+#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[72]
+#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[73]
+#define SWIGTYPE_p_svn_diff_t swig_types[74]
+#define SWIGTYPE_p_svn_dirent_t swig_types[75]
+#define SWIGTYPE_p_svn_errno_t swig_types[76]
+#define SWIGTYPE_p_svn_error_t swig_types[77]
+#define SWIGTYPE_p_svn_fs_access_t swig_types[78]
+#define SWIGTYPE_p_svn_fs_dirent_t swig_types[79]
+#define SWIGTYPE_p_svn_fs_history_t swig_types[80]
+#define SWIGTYPE_p_svn_fs_id_t swig_types[81]
+#define SWIGTYPE_p_svn_fs_pack_notify_action_t swig_types[82]
+#define SWIGTYPE_p_svn_fs_path_change2_t swig_types[83]
+#define SWIGTYPE_p_svn_fs_path_change_kind_t swig_types[84]
+#define SWIGTYPE_p_svn_fs_path_change_t swig_types[85]
+#define SWIGTYPE_p_svn_fs_root_t swig_types[86]
+#define SWIGTYPE_p_svn_fs_t swig_types[87]
+#define SWIGTYPE_p_svn_fs_txn_t swig_types[88]
+#define SWIGTYPE_p_svn_io_dirent2_t swig_types[89]
+#define SWIGTYPE_p_svn_io_dirent_t swig_types[90]
+#define SWIGTYPE_p_svn_io_file_del_t swig_types[91]
+#define SWIGTYPE_p_svn_location_segment_t swig_types[92]
+#define SWIGTYPE_p_svn_lock_t swig_types[93]
+#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[94]
+#define SWIGTYPE_p_svn_log_changed_path_t swig_types[95]
+#define SWIGTYPE_p_svn_log_entry_t swig_types[96]
+#define SWIGTYPE_p_svn_merge_range_t swig_types[97]
+#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[98]
+#define SWIGTYPE_p_svn_node_kind_t swig_types[99]
+#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[100]
+#define SWIGTYPE_p_svn_opt_revision_t swig_types[101]
+#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[102]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[103]
+#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[104]
+#define SWIGTYPE_p_svn_patch_file_t swig_types[105]
+#define SWIGTYPE_p_svn_patch_t swig_types[106]
+#define SWIGTYPE_p_svn_prop_inherited_item_t swig_types[107]
+#define SWIGTYPE_p_svn_prop_kind swig_types[108]
+#define SWIGTYPE_p_svn_prop_patch_t swig_types[109]
+#define SWIGTYPE_p_svn_repos_authz_access_t swig_types[110]
+#define SWIGTYPE_p_svn_repos_node_t swig_types[111]
+#define SWIGTYPE_p_svn_repos_notify_action_t swig_types[112]
+#define SWIGTYPE_p_svn_repos_notify_t swig_types[113]
+#define SWIGTYPE_p_svn_repos_notify_warning_t swig_types[114]
+#define SWIGTYPE_p_svn_repos_parse_fns2_t swig_types[115]
+#define SWIGTYPE_p_svn_repos_parse_fns3_t swig_types[116]
+#define SWIGTYPE_p_svn_repos_parse_fns_t swig_types[117]
+#define SWIGTYPE_p_svn_repos_revision_access_level_t swig_types[118]
+#define SWIGTYPE_p_svn_repos_t swig_types[119]
+#define SWIGTYPE_p_svn_stream_mark_t swig_types[120]
+#define SWIGTYPE_p_svn_stream_t swig_types[121]
+#define SWIGTYPE_p_svn_string_t swig_types[122]
+#define SWIGTYPE_p_svn_stringbuf_t swig_types[123]
+#define SWIGTYPE_p_svn_tristate_t swig_types[124]
+#define SWIGTYPE_p_svn_txdelta_op_t swig_types[125]
+#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[126]
+#define SWIGTYPE_p_svn_txdelta_window_t swig_types[127]
+#define SWIGTYPE_p_svn_version_checklist_t swig_types[128]
+#define SWIGTYPE_p_svn_version_ext_linked_lib_t swig_types[129]
+#define SWIGTYPE_p_svn_version_ext_loaded_lib_t swig_types[130]
+#define SWIGTYPE_p_svn_version_extended_t swig_types[131]
+#define SWIGTYPE_p_svn_version_t swig_types[132]
+#define SWIGTYPE_p_unsigned_long swig_types[133]
+#define SWIGTYPE_p_void swig_types[134]
+static swig_type_info *swig_types[136];
+static swig_module_info swig_module = {swig_types, 135, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@@ -1932,7 +1943,7 @@ static VALUE mRepos;
#define SWIG_RUBY_THREAD_END_BLOCK
-#define SWIGVERSION 0x020004
+#define SWIGVERSION 0x020009
#define SWIG_VERSION SWIGVERSION
@@ -1995,7 +2006,7 @@ SWIG_ruby_failed(void)
}
-/*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
+/*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
SWIGINTERN VALUE SWIG_AUX_NUM2LONG(VALUE *args)
{
VALUE obj = args[0];
@@ -2080,11 +2091,7 @@ SWIGINTERN int
SWIG_AsCharPtrAndSize(VALUE obj, char** cptr, size_t* psize, int *alloc)
{
if (TYPE(obj) == T_STRING) {
- #if defined(StringValuePtr)
char *cstr = StringValuePtr(obj);
- #else
- char *cstr = STR2CSTR(obj);
- #endif
size_t size = RSTRING_LEN(obj) + 1;
if (cptr) {
if (alloc) {
@@ -2141,6 +2148,35 @@ SWIG_FromCharPtr(const char *cptr)
}
+/*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
+SWIGINTERN VALUE SWIG_AUX_NUM2ULONG(VALUE *args)
+{
+ VALUE obj = args[0];
+ VALUE type = TYPE(obj);
+ unsigned long *res = (unsigned long *)(args[1]);
+ *res = type == T_FIXNUM ? NUM2ULONG(obj) : rb_big2ulong(obj);
+ return obj;
+}
+/*@SWIG@*/
+
+SWIGINTERN int
+SWIG_AsVal_unsigned_SS_long (VALUE obj, unsigned long *val)
+{
+ VALUE type = TYPE(obj);
+ if ((type == T_FIXNUM) || (type == T_BIGNUM)) {
+ unsigned long v;
+ VALUE a[2];
+ a[0] = obj;
+ a[1] = (VALUE)(&v);
+ if (rb_rescue(RUBY_METHOD_FUNC(SWIG_AUX_NUM2ULONG), (VALUE)a, RUBY_METHOD_FUNC(SWIG_ruby_failed), 0) != Qnil) {
+ if (val) *val = v;
+ return SWIG_OK;
+ }
+ }
+ return SWIG_TypeError;
+}
+
+
SWIGINTERN int
SWIG_AsCharArray(VALUE obj, char *val, size_t size)
{
@@ -2191,6 +2227,66 @@ SWIG_From_char (char c)
}
+static svn_error_t * svn_repos_parse_fns3_invoke_magic_header_record(
+ svn_repos_parse_fns3_t * _obj, int version, void *parse_baton, apr_pool_t *pool) {
+ return (_obj->magic_header_record)(version, parse_baton, pool);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_uuid_record(
+ svn_repos_parse_fns3_t * _obj, const char *uuid, void *parse_baton, apr_pool_t *pool) {
+ return (_obj->uuid_record)(uuid, parse_baton, pool);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_new_revision_record(
+ svn_repos_parse_fns3_t * _obj, void **revision_baton, apr_hash_t *headers, void *parse_baton, apr_pool_t *pool) {
+ return (_obj->new_revision_record)(revision_baton, headers, parse_baton, pool);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_new_node_record(
+ svn_repos_parse_fns3_t * _obj, void **node_baton, apr_hash_t *headers, void *revision_baton, apr_pool_t *pool) {
+ return (_obj->new_node_record)(node_baton, headers, revision_baton, pool);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_set_revision_property(
+ svn_repos_parse_fns3_t * _obj, void *revision_baton, const char *name, const svn_string_t *value) {
+ return (_obj->set_revision_property)(revision_baton, name, value);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_set_node_property(
+ svn_repos_parse_fns3_t * _obj, void *node_baton, const char *name, const svn_string_t *value) {
+ return (_obj->set_node_property)(node_baton, name, value);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_delete_node_property(
+ svn_repos_parse_fns3_t * _obj, void *node_baton, const char *name) {
+ return (_obj->delete_node_property)(node_baton, name);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_remove_node_props(
+ svn_repos_parse_fns3_t * _obj, void *node_baton) {
+ return (_obj->remove_node_props)(node_baton);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_set_fulltext(
+ svn_repos_parse_fns3_t * _obj, svn_stream_t **stream, void *node_baton) {
+ return (_obj->set_fulltext)(stream, node_baton);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_apply_textdelta(
+ svn_repos_parse_fns3_t * _obj, svn_txdelta_window_handler_t *handler, void **handler_baton, void *node_baton) {
+ return (_obj->apply_textdelta)(handler, handler_baton, node_baton);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_close_node(
+ svn_repos_parse_fns3_t * _obj, void *node_baton) {
+ return (_obj->close_node)(node_baton);
+}
+
+static svn_error_t * svn_repos_parse_fns3_invoke_close_revision(
+ svn_repos_parse_fns3_t * _obj, void *revision_baton) {
+ return (_obj->close_revision)(revision_baton);
+}
+
static svn_error_t * svn_repos_parse_fns2_invoke_new_revision_record(
svn_repos_parse_fns2_t * _obj, void **revision_baton, apr_hash_t *headers, void *parse_baton, apr_pool_t *pool) {
return (_obj->new_revision_record)(revision_baton, headers, parse_baton, pool);
@@ -2266,6 +2362,11 @@ static void svn_repos_invoke_notify_func(
_obj(baton, notify, scratch_pool);
}
+static svn_error_t * svn_repos_invoke_freeze_func(
+ svn_repos_freeze_func_t _obj, void *baton, apr_pool_t *pool) {
+ return _obj(baton, pool);
+}
+
static svn_error_t * svn_repos_invoke_history_func(
svn_repos_history_func_t _obj, void *baton, const char *path, svn_revnum_t revision, apr_pool_t *pool) {
return _obj(baton, path, revision, pool);
@@ -2483,11 +2584,11 @@ fail:
}
-swig_class SwigClassSvn_repos_notify_t;
+static swig_class SwigClassSvn_repos_notify_t;
SWIGINTERN VALUE
_wrap_svn_repos_notify_t_action_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
svn_repos_notify_action_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2499,9 +2600,9 @@ _wrap_svn_repos_notify_t_action_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_notify_t *","action", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_notify_t *","action", 1, self ));
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_repos_notify_action_t","action", 2, argv[0] ));
@@ -2516,7 +2617,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_notify_t_action_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_repos_notify_action_t result;
@@ -2527,9 +2628,9 @@ _wrap_svn_repos_notify_t_action_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_notify_t *","action", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_notify_t *","action", 1, self ));
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
result = (svn_repos_notify_action_t) ((arg1)->action);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -2540,7 +2641,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_notify_t_revision_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2552,9 +2653,9 @@ _wrap_svn_repos_notify_t_revision_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_notify_t *","revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_notify_t *","revision", 1, self ));
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","revision", 2, argv[0] ));
@@ -2569,7 +2670,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_notify_t_revision_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -2580,9 +2681,9 @@ _wrap_svn_repos_notify_t_revision_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_notify_t *","revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_notify_t *","revision", 1, self ));
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
result = (svn_revnum_t) ((arg1)->revision);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -2593,7 +2694,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_notify_t_warning_str_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2606,9 +2707,9 @@ _wrap_svn_repos_notify_t_warning_str_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_notify_t *","warning_str", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_notify_t *","warning_str", 1, self ));
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","warning_str", 2, argv[0] ));
@@ -2632,7 +2733,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_notify_t_warning_str_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -2643,9 +2744,9 @@ _wrap_svn_repos_notify_t_warning_str_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_notify_t *","warning_str", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_notify_t *","warning_str", 1, self ));
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
result = (char *) ((arg1)->warning_str);
{
if (result) {
@@ -2662,7 +2763,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_notify_t_warning_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
svn_repos_notify_warning_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2674,9 +2775,9 @@ _wrap_svn_repos_notify_t_warning_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_notify_t *","warning", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_notify_t *","warning", 1, self ));
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_repos_notify_warning_t","warning", 2, argv[0] ));
@@ -2691,7 +2792,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_notify_t_warning_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_repos_notify_warning_t result;
@@ -2702,9 +2803,9 @@ _wrap_svn_repos_notify_t_warning_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_notify_t *","warning", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_notify_t *","warning", 1, self ));
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
result = (svn_repos_notify_warning_t) ((arg1)->warning);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -2715,7 +2816,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_notify_t_shard_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
apr_int64_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2725,9 +2826,9 @@ _wrap_svn_repos_notify_t_shard_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_notify_t *","shard", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_notify_t *","shard", 1, self ));
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
{
arg2 = (apr_int64_t)NUM2LL(argv[0]);
}
@@ -2740,7 +2841,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_notify_t_shard_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_int64_t result;
@@ -2751,9 +2852,9 @@ _wrap_svn_repos_notify_t_shard_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_notify_t *","shard", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_notify_t *","shard", 1, self ));
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
result = ((arg1)->shard);
{
vresult = LL2NUM((apr_int64_t)(result));
@@ -2766,7 +2867,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_notify_t_new_revision_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2778,9 +2879,9 @@ _wrap_svn_repos_notify_t_new_revision_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_notify_t *","new_revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_notify_t *","new_revision", 1, self ));
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","new_revision", 2, argv[0] ));
@@ -2795,7 +2896,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_notify_t_new_revision_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -2806,9 +2907,9 @@ _wrap_svn_repos_notify_t_new_revision_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_notify_t *","new_revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_notify_t *","new_revision", 1, self ));
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
result = (svn_revnum_t) ((arg1)->new_revision);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -2819,7 +2920,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_notify_t_old_revision_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2831,9 +2932,9 @@ _wrap_svn_repos_notify_t_old_revision_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_notify_t *","old_revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_notify_t *","old_revision", 1, self ));
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","old_revision", 2, argv[0] ));
@@ -2848,7 +2949,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_notify_t_old_revision_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -2859,9 +2960,9 @@ _wrap_svn_repos_notify_t_old_revision_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_notify_t *","old_revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_notify_t *","old_revision", 1, self ));
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
result = (svn_revnum_t) ((arg1)->old_revision);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -2872,7 +2973,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_notify_t_node_action_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
enum svn_node_action arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2884,9 +2985,9 @@ _wrap_svn_repos_notify_t_node_action_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_notify_t *","node_action", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_notify_t *","node_action", 1, self ));
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "enum svn_node_action","node_action", 2, argv[0] ));
@@ -2901,7 +3002,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_notify_t_node_action_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
enum svn_node_action result;
@@ -2912,9 +3013,9 @@ _wrap_svn_repos_notify_t_node_action_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_notify_t *","node_action", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_notify_t *","node_action", 1, self ));
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
result = (enum svn_node_action) ((arg1)->node_action);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -2925,7 +3026,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_notify_t_path_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2935,9 +3036,9 @@ _wrap_svn_repos_notify_t_path_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_notify_t *","path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_notify_t *","path", 1, self ));
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
{
arg2 = StringValueCStr(argv[0]);
}
@@ -2957,7 +3058,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_notify_t_path_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_notify_t *arg1 = (svn_repos_notify_t *) 0 ;
+ struct svn_repos_notify_t *arg1 = (struct svn_repos_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -2968,9 +3069,9 @@ _wrap_svn_repos_notify_t_path_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_notify_t *","path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_notify_t *","path", 1, self ));
}
- arg1 = (svn_repos_notify_t *)(argp1);
+ arg1 = (struct svn_repos_notify_t *)(argp1);
result = (char *) ((arg1)->path);
{
if (result) {
@@ -3648,6 +3749,94 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_repos_hotcopy2(int argc, VALUE *argv, VALUE self) {
+ char *arg1 = (char *) 0 ;
+ char *arg2 = (char *) 0 ;
+ svn_boolean_t arg3 ;
+ svn_boolean_t arg4 ;
+ svn_cancel_func_t arg5 = (svn_cancel_func_t) 0 ;
+ void *arg6 = (void *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg7);
+ _global_pool = arg7;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 5) || (argc > 6)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 5)",argc); SWIG_fail;
+ }
+ res1 = SWIG_AsCharPtrAndSize(argv[0], &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "char const *","svn_repos_hotcopy2", 1, argv[0] ));
+ }
+ arg1 = (char *)(buf1);
+ res2 = SWIG_AsCharPtrAndSize(argv[1], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","svn_repos_hotcopy2", 2, argv[1] ));
+ }
+ arg2 = (char *)(buf2);
+ arg3 = RTEST(argv[2]);
+ arg4 = RTEST(argv[3]);
+ {
+ arg5 = svn_swig_rb_cancel_func;
+ arg6 = (void *)svn_swig_rb_make_baton(argv[4], _global_svn_swig_rb_pool);
+ }
+ if (argc > 5) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_hotcopy2((char const *)arg1,(char const *)arg2,arg3,arg4,arg5,arg6,arg7);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ svn_swig_rb_set_baton(vresult, (VALUE)arg6);
+ }
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_repos_hotcopy(int argc, VALUE *argv, VALUE self) {
char *arg1 = (char *) 0 ;
char *arg2 = (char *) 0 ;
@@ -4178,6 +4367,76 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_repos_freeze(int argc, VALUE *argv, VALUE self) {
+ apr_array_header_t *arg1 = (apr_array_header_t *) 0 ;
+ svn_repos_freeze_func_t arg2 = (svn_repos_freeze_func_t) 0 ;
+ void *arg3 = (void *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int res3 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg4);
+ _global_pool = arg4;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 3) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
+ }
+ {
+ arg1 = svn_swig_rb_strings_to_apr_array(argv[0], _global_pool);
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(argv[1], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_repos_freeze_func_t","svn_repos_freeze", 2, argv[1] ));
+ }
+ }
+ res3 = SWIG_ConvertPtr(argv[2],SWIG_as_voidptrptr(&arg3), 0, 0);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "void *","svn_repos_freeze", 3, argv[2] ));
+ }
+ if (argc > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_freeze(arg1,arg2,arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_repos_db_logfiles(int argc, VALUE *argv, VALUE self) {
apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
char *arg2 = (char *) 0 ;
@@ -5348,6 +5607,231 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_repos_hooks_setenv(int argc, VALUE *argv, VALUE self) {
+ svn_repos_t *arg1 = (svn_repos_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg3);
+ _global_pool = arg3;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 2) || (argc > 3)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_repos_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_t *","svn_repos_hooks_setenv", 1, argv[0] ));
+ }
+ arg1 = (svn_repos_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[1], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","svn_repos_hooks_setenv", 2, argv[1] ));
+ }
+ arg2 = (char *)(buf2);
+ if (argc > 2) {
+
+ }
+ {
+ if (!arg1) {
+ svn_swig_rb_raise_svn_repos_already_close();
+ }
+ }
+ {
+ result = (svn_error_t *)svn_repos_hooks_setenv(arg1,(char const *)arg2,arg3);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_begin_report3(int argc, VALUE *argv, VALUE self) {
+ void **arg1 = (void **) 0 ;
+ svn_revnum_t arg2 ;
+ svn_repos_t *arg3 = (svn_repos_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ char *arg5 = (char *) 0 ;
+ char *arg6 = (char *) 0 ;
+ svn_boolean_t arg7 ;
+ svn_depth_t arg8 ;
+ svn_boolean_t arg9 ;
+ svn_boolean_t arg10 ;
+ svn_delta_editor_t *arg11 = (svn_delta_editor_t *) 0 ;
+ void *arg12 = (void *) 0 ;
+ svn_repos_authz_func_t arg13 = (svn_repos_authz_func_t) 0 ;
+ void *arg14 = (void *) 0 ;
+ apr_size_t arg15 ;
+ apr_pool_t *arg16 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *temp1 ;
+ long val2 ;
+ int ecode2 = 0 ;
+ void *argp3 = 0 ;
+ int res3 = 0 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ int res5 ;
+ char *buf5 = 0 ;
+ int alloc5 = 0 ;
+ unsigned long val15 ;
+ int ecode15 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg16);
+ _global_pool = arg16;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ if ((argc < 12) || (argc > 13)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 12)",argc); SWIG_fail;
+ }
+ ecode2 = SWIG_AsVal_long(argv[0], &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","svn_repos_begin_report3", 2, argv[0] ));
+ }
+ arg2 = (svn_revnum_t)(val2);
+ res3 = SWIG_ConvertPtr(argv[1], &argp3,SWIGTYPE_p_svn_repos_t, 0 | 0 );
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "svn_repos_t *","svn_repos_begin_report3", 3, argv[1] ));
+ }
+ arg3 = (svn_repos_t *)(argp3);
+ res4 = SWIG_AsCharPtrAndSize(argv[2], &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "char const *","svn_repos_begin_report3", 4, argv[2] ));
+ }
+ arg4 = (char *)(buf4);
+ res5 = SWIG_AsCharPtrAndSize(argv[3], &buf5, NULL, &alloc5);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), Ruby_Format_TypeError( "", "char const *","svn_repos_begin_report3", 5, argv[3] ));
+ }
+ arg5 = (char *)(buf5);
+ {
+ if (NIL_P(argv[4])) {
+ arg6 = NULL;
+ } else {
+ arg6 = StringValuePtr(argv[4]);
+ }
+ }
+ arg7 = RTEST(argv[5]);
+ {
+ arg8 = svn_swig_rb_to_depth(argv[6]);
+ }
+ arg9 = RTEST(argv[7]);
+ arg10 = RTEST(argv[8]);
+ {
+ if (RTEST(rb_obj_is_kind_of(argv[9],
+ svn_swig_rb_svn_delta_editor()))) {
+ arg11 = svn_swig_rb_to_swig_type(argv[9],
+ "svn_delta_editor_t *",
+ _global_pool);
+ arg12 = svn_swig_rb_to_swig_type(rb_funcall(argv[9], rb_intern("baton"), 0),
+ "void *", _global_pool);
+ } else {
+ svn_swig_rb_make_delta_editor(&arg11, &arg12, argv[9], _global_pool);
+ }
+ }
+ {
+ arg13 = svn_swig_rb_repos_authz_func;
+ arg14 = (void *)svn_swig_rb_make_baton(argv[10], _global_svn_swig_rb_pool);
+ }
+ ecode15 = SWIG_AsVal_unsigned_SS_long(argv[11], &val15);
+ if (!SWIG_IsOK(ecode15)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode15), Ruby_Format_TypeError( "", "apr_size_t","svn_repos_begin_report3", 15, argv[11] ));
+ }
+ arg15 = (apr_size_t)(val15);
+ if (argc > 12) {
+
+ }
+ {
+ if (!arg3) {
+ svn_swig_rb_raise_svn_repos_already_close();
+ }
+ }
+ {
+ result = (svn_error_t *)svn_repos_begin_report3(arg1,arg2,arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,arg7,arg8,arg9,arg10,(struct svn_delta_editor_t const *)arg11,arg12,arg13,arg14,arg15,arg16);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg1, SWIGTYPE_p_void, 0));
+ }
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_repos_begin_report2(int argc, VALUE *argv, VALUE self) {
void **arg1 = (void **) 0 ;
svn_revnum_t arg2 ;
@@ -5509,9 +5993,6 @@ _wrap_svn_repos_begin_report(int argc, VALUE *argv, VALUE self) {
void *temp1 ;
long val2 ;
int ecode2 = 0 ;
- int res3 ;
- char *buf3 = 0 ;
- int alloc3 = 0 ;
void *argp4 = 0 ;
int res4 = 0 ;
int res5 ;
@@ -5537,11 +6018,13 @@ _wrap_svn_repos_begin_report(int argc, VALUE *argv, VALUE self) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","svn_repos_begin_report", 2, argv[0] ));
}
arg2 = (svn_revnum_t)(val2);
- res3 = SWIG_AsCharPtrAndSize(argv[1], &buf3, NULL, &alloc3);
- if (!SWIG_IsOK(res3)) {
- SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","svn_repos_begin_report", 3, argv[1] ));
+ {
+ if (NIL_P(argv[1])) {
+ arg3 = NULL;
+ } else {
+ arg3 = StringValuePtr(argv[1]);
+ }
}
- arg3 = (char *)(buf3);
res4 = SWIG_ConvertPtr(argv[2], &argp4,SWIGTYPE_p_svn_repos_t, 0 | 0 );
if (!SWIG_IsOK(res4)) {
SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "svn_repos_t *","svn_repos_begin_report", 4, argv[2] ));
@@ -5608,7 +6091,6 @@ _wrap_svn_repos_begin_report(int argc, VALUE *argv, VALUE self) {
{
vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg1, SWIGTYPE_p_void, 0));
}
- if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
{
@@ -5620,7 +6102,6 @@ _wrap_svn_repos_begin_report(int argc, VALUE *argv, VALUE self) {
}
return vresult;
fail:
- if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
{
@@ -10541,11 +11022,11 @@ fail:
}
-swig_class SwigClassSvn_repos_node_t;
+static swig_class SwigClassSvn_repos_node_t;
SWIGINTERN VALUE
_wrap_svn_repos_node_t_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10557,9 +11038,9 @@ _wrap_svn_repos_node_t_kind_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_node_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_node_t *","kind", 1, self ));
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_node_kind_t","kind", 2, argv[0] ));
@@ -10574,7 +11055,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_node_t_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_node_kind_t result;
@@ -10585,9 +11066,9 @@ _wrap_svn_repos_node_t_kind_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_node_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_node_t *","kind", 1, self ));
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -10598,7 +11079,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_node_t_action_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
char arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10610,9 +11091,9 @@ _wrap_svn_repos_node_t_action_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_node_t *","action", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_node_t *","action", 1, self ));
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
ecode2 = SWIG_AsVal_char(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "char","action", 2, argv[0] ));
@@ -10627,7 +11108,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_node_t_action_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char result;
@@ -10638,9 +11119,9 @@ _wrap_svn_repos_node_t_action_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_node_t *","action", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_node_t *","action", 1, self ));
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
result = (char) ((arg1)->action);
vresult = SWIG_From_char((char)(result));
return vresult;
@@ -10651,7 +11132,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_node_t_text_mod_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10661,9 +11142,9 @@ _wrap_svn_repos_node_t_text_mod_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_node_t *","text_mod", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_node_t *","text_mod", 1, self ));
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->text_mod = arg2;
return Qnil;
@@ -10674,7 +11155,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_node_t_text_mod_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -10685,9 +11166,9 @@ _wrap_svn_repos_node_t_text_mod_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_node_t *","text_mod", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_node_t *","text_mod", 1, self ));
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
result = (svn_boolean_t) ((arg1)->text_mod);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -10698,7 +11179,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_node_t_prop_mod_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10708,9 +11189,9 @@ _wrap_svn_repos_node_t_prop_mod_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_node_t *","prop_mod", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_node_t *","prop_mod", 1, self ));
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->prop_mod = arg2;
return Qnil;
@@ -10721,7 +11202,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_node_t_prop_mod_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -10732,9 +11213,9 @@ _wrap_svn_repos_node_t_prop_mod_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_node_t *","prop_mod", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_node_t *","prop_mod", 1, self ));
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
result = (svn_boolean_t) ((arg1)->prop_mod);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -10745,7 +11226,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_node_t_name_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10758,9 +11239,9 @@ _wrap_svn_repos_node_t_name_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_node_t *","name", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_node_t *","name", 1, self ));
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","name", 2, argv[0] ));
@@ -10784,7 +11265,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_node_t_name_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -10795,9 +11276,9 @@ _wrap_svn_repos_node_t_name_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_node_t *","name", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_node_t *","name", 1, self ));
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
result = (char *) ((arg1)->name);
{
if (result) {
@@ -10814,7 +11295,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_node_t_copyfrom_rev_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10826,9 +11307,9 @@ _wrap_svn_repos_node_t_copyfrom_rev_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_node_t *","copyfrom_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_node_t *","copyfrom_rev", 1, self ));
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","copyfrom_rev", 2, argv[0] ));
@@ -10843,7 +11324,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_node_t_copyfrom_rev_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -10854,9 +11335,9 @@ _wrap_svn_repos_node_t_copyfrom_rev_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_node_t *","copyfrom_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_node_t *","copyfrom_rev", 1, self ));
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
result = (svn_revnum_t) ((arg1)->copyfrom_rev);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -10867,7 +11348,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_node_t_copyfrom_path_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10877,9 +11358,9 @@ _wrap_svn_repos_node_t_copyfrom_path_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_node_t *","copyfrom_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_node_t *","copyfrom_path", 1, self ));
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
{
if (NIL_P(argv[0])) {
arg2 = NULL;
@@ -10903,7 +11384,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_node_t_copyfrom_path_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -10914,9 +11395,9 @@ _wrap_svn_repos_node_t_copyfrom_path_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_node_t *","copyfrom_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_node_t *","copyfrom_path", 1, self ));
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
result = (char *) ((arg1)->copyfrom_path);
{
if (result) {
@@ -10933,7 +11414,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_node_t_sibling_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
struct svn_repos_node_t *arg2 = (struct svn_repos_node_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10945,9 +11426,9 @@ _wrap_svn_repos_node_t_sibling_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_node_t *","sibling", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_node_t *","sibling", 1, self ));
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_repos_node_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "struct svn_repos_node_t *","sibling", 2, argv[0] ));
@@ -10962,7 +11443,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_node_t_sibling_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
struct svn_repos_node_t *result = 0 ;
@@ -10973,9 +11454,9 @@ _wrap_svn_repos_node_t_sibling_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_node_t *","sibling", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_node_t *","sibling", 1, self ));
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
result = (struct svn_repos_node_t *) ((arg1)->sibling);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
return vresult;
@@ -10986,7 +11467,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_node_t_child_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
struct svn_repos_node_t *arg2 = (struct svn_repos_node_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10998,9 +11479,9 @@ _wrap_svn_repos_node_t_child_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_node_t *","child", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_node_t *","child", 1, self ));
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_repos_node_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "struct svn_repos_node_t *","child", 2, argv[0] ));
@@ -11015,7 +11496,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_node_t_child_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
struct svn_repos_node_t *result = 0 ;
@@ -11026,9 +11507,9 @@ _wrap_svn_repos_node_t_child_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_node_t *","child", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_node_t *","child", 1, self ));
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
result = (struct svn_repos_node_t *) ((arg1)->child);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
return vresult;
@@ -11039,7 +11520,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_node_t_parent_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
struct svn_repos_node_t *arg2 = (struct svn_repos_node_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11051,9 +11532,9 @@ _wrap_svn_repos_node_t_parent_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_node_t *","parent", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_node_t *","parent", 1, self ));
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_repos_node_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "struct svn_repos_node_t *","parent", 2, argv[0] ));
@@ -11068,7 +11549,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_node_t_parent_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_node_t *arg1 = (svn_repos_node_t *) 0 ;
+ struct svn_repos_node_t *arg1 = (struct svn_repos_node_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
struct svn_repos_node_t *result = 0 ;
@@ -11079,9 +11560,9 @@ _wrap_svn_repos_node_t_parent_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_node_t *","parent", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_node_t *","parent", 1, self ));
}
- arg1 = (svn_repos_node_t *)(argp1);
+ arg1 = (struct svn_repos_node_t *)(argp1);
result = (struct svn_repos_node_t *) ((arg1)->parent);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_repos_node_t, 0 | 0 );
return vresult;
@@ -11659,6 +12140,136 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_repos_load_fs4(int argc, VALUE *argv, VALUE self) {
+ svn_repos_t *arg1 = (svn_repos_t *) 0 ;
+ svn_stream_t *arg2 = (svn_stream_t *) 0 ;
+ svn_revnum_t arg3 ;
+ svn_revnum_t arg4 ;
+ enum svn_repos_load_uuid arg5 ;
+ char *arg6 = (char *) 0 ;
+ svn_boolean_t arg7 ;
+ svn_boolean_t arg8 ;
+ svn_boolean_t arg9 ;
+ svn_repos_notify_func_t arg10 = (svn_repos_notify_func_t) 0 ;
+ void *arg11 = (void *) 0 ;
+ svn_cancel_func_t arg12 = (svn_cancel_func_t) 0 ;
+ void *arg13 = (void *) 0 ;
+ apr_pool_t *arg14 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ long val3 ;
+ int ecode3 = 0 ;
+ long val4 ;
+ int ecode4 = 0 ;
+ int val5 ;
+ int ecode5 = 0 ;
+ int res11 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg14);
+ _global_pool = arg14;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 12) || (argc > 13)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 12)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_repos_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_t *","svn_repos_load_fs4", 1, argv[0] ));
+ }
+ arg1 = (svn_repos_t *)(argp1);
+ {
+ arg2 = svn_swig_rb_make_stream(argv[1]);
+ }
+ ecode3 = SWIG_AsVal_long(argv[2], &val3);
+ if (!SWIG_IsOK(ecode3)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode3), Ruby_Format_TypeError( "", "svn_revnum_t","svn_repos_load_fs4", 3, argv[2] ));
+ }
+ arg3 = (svn_revnum_t)(val3);
+ ecode4 = SWIG_AsVal_long(argv[3], &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), Ruby_Format_TypeError( "", "svn_revnum_t","svn_repos_load_fs4", 4, argv[3] ));
+ }
+ arg4 = (svn_revnum_t)(val4);
+ ecode5 = SWIG_AsVal_int(argv[4], &val5);
+ if (!SWIG_IsOK(ecode5)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode5), Ruby_Format_TypeError( "", "enum svn_repos_load_uuid","svn_repos_load_fs4", 5, argv[4] ));
+ }
+ arg5 = (enum svn_repos_load_uuid)(val5);
+ {
+ if (NIL_P(argv[5])) {
+ arg6 = NULL;
+ } else {
+ arg6 = StringValuePtr(argv[5]);
+ }
+ }
+ arg7 = RTEST(argv[6]);
+ arg8 = RTEST(argv[7]);
+ arg9 = RTEST(argv[8]);
+ {
+ int res = SWIG_ConvertFunctionPtr(argv[9], (void**)(&arg10), SWIGTYPE_p_f_p_void_p_q_const__struct_svn_repos_notify_t_p_apr_pool_t__void);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_repos_notify_func_t","svn_repos_load_fs4", 10, argv[9] ));
+ }
+ }
+ res11 = SWIG_ConvertPtr(argv[10],SWIG_as_voidptrptr(&arg11), 0, 0);
+ if (!SWIG_IsOK(res11)) {
+ SWIG_exception_fail(SWIG_ArgError(res11), Ruby_Format_TypeError( "", "void *","svn_repos_load_fs4", 11, argv[10] ));
+ }
+ {
+ arg12 = svn_swig_rb_cancel_func;
+ arg13 = (void *)svn_swig_rb_make_baton(argv[11], _global_svn_swig_rb_pool);
+ }
+ if (argc > 12) {
+
+ }
+ {
+ if (!arg1) {
+ svn_swig_rb_raise_svn_repos_already_close();
+ }
+ }
+ {
+ result = (svn_error_t *)svn_repos_load_fs4(arg1,arg2,arg3,arg4,arg5,(char const *)arg6,arg7,arg8,arg9,arg10,arg11,arg12,arg13,arg14);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ svn_swig_rb_set_baton(vresult, (VALUE)arg13);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_repos_load_fs3(int argc, VALUE *argv, VALUE self) {
svn_repos_t *arg1 = (svn_repos_t *) 0 ;
svn_stream_t *arg2 = (svn_stream_t *) 0 ;
@@ -11982,30 +12593,30 @@ fail:
}
-swig_class SwigClassSvn_repos_parse_fns2_t;
+static swig_class SwigClassSvn_repos_parse_fns3_t;
SWIGINTERN VALUE
-_wrap_svn_repos_parse_fns2_t_new_revision_record_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
- svn_error_t *(*arg2)(void **,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) 0 ;
+_wrap_svn_repos_parse_fns3_t_magic_header_record_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
+ svn_error_t *(*arg2)(int,void *,apr_pool_t *) = (svn_error_t *(*)(int,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
if ((argc < 1) || (argc > 1)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
}
- res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns2_t *","new_revision_record", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns3_t *","magic_header_record", 1, self ));
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
{
- int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
+ int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_int_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)","new_revision_record", 2, argv[0] ));
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_error_t *(*)(int,void *,apr_pool_t *)","magic_header_record", 2, argv[0] ));
}
}
- if (arg1) (arg1)->new_revision_record = arg2;
+ if (arg1) (arg1)->magic_header_record = arg2;
return Qnil;
fail:
return Qnil;
@@ -12013,23 +12624,23 @@ fail:
SWIGINTERN VALUE
-_wrap_svn_repos_parse_fns2_t_new_revision_record_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+_wrap_svn_repos_parse_fns3_t_magic_header_record_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- svn_error_t *(*result)(void **,apr_hash_t *,void *,apr_pool_t *) = 0 ;
+ svn_error_t *(*result)(int,void *,apr_pool_t *) = 0 ;
VALUE vresult = Qnil;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
- res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns2_t *","new_revision_record", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns3_t *","magic_header_record", 1, self ));
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
- result = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) ((arg1)->new_revision_record);
- vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
+ result = (svn_error_t *(*)(int,void *,apr_pool_t *)) ((arg1)->magic_header_record);
+ vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_int_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
fail:
return Qnil;
@@ -12037,8 +12648,8 @@ fail:
SWIGINTERN VALUE
-_wrap_svn_repos_parse_fns2_t_uuid_record_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+_wrap_svn_repos_parse_fns3_t_uuid_record_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(char const *,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12046,11 +12657,11 @@ _wrap_svn_repos_parse_fns2_t_uuid_record_set(int argc, VALUE *argv, VALUE self)
if ((argc < 1) || (argc > 1)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
}
- res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns2_t *","uuid_record", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns3_t *","uuid_record", 1, self ));
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -12065,8 +12676,8 @@ fail:
SWIGINTERN VALUE
-_wrap_svn_repos_parse_fns2_t_uuid_record_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+_wrap_svn_repos_parse_fns3_t_uuid_record_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(char const *,void *,apr_pool_t *) = 0 ;
@@ -12075,11 +12686,11 @@ _wrap_svn_repos_parse_fns2_t_uuid_record_get(int argc, VALUE *argv, VALUE self)
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
- res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns2_t *","uuid_record", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns3_t *","uuid_record", 1, self ));
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
result = (svn_error_t *(*)(char const *,void *,apr_pool_t *)) ((arg1)->uuid_record);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -12089,8 +12700,8 @@ fail:
SWIGINTERN VALUE
-_wrap_svn_repos_parse_fns2_t_new_node_record_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+_wrap_svn_repos_parse_fns3_t_new_revision_record_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(void **,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12098,11 +12709,63 @@ _wrap_svn_repos_parse_fns2_t_new_node_record_set(int argc, VALUE *argv, VALUE se
if ((argc < 1) || (argc > 1)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
}
- res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns2_t *","new_node_record", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns3_t *","new_revision_record", 1, self ));
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
+ {
+ int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)","new_revision_record", 2, argv[0] ));
+ }
+ }
+ if (arg1) (arg1)->new_revision_record = arg2;
+ return Qnil;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns3_t_new_revision_record_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_error_t *(*result)(void **,apr_hash_t *,void *,apr_pool_t *) = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns3_t *","new_revision_record", 1, self ));
+ }
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
+ result = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) ((arg1)->new_revision_record);
+ vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns3_t_new_node_record_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
+ svn_error_t *(*arg2)(void **,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns3_t *","new_node_record", 1, self ));
+ }
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -12117,8 +12780,8 @@ fail:
SWIGINTERN VALUE
-_wrap_svn_repos_parse_fns2_t_new_node_record_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+_wrap_svn_repos_parse_fns3_t_new_node_record_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void **,apr_hash_t *,void *,apr_pool_t *) = 0 ;
@@ -12127,11 +12790,11 @@ _wrap_svn_repos_parse_fns2_t_new_node_record_get(int argc, VALUE *argv, VALUE se
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
- res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns2_t *","new_node_record", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns3_t *","new_node_record", 1, self ));
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
result = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) ((arg1)->new_node_record);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -12141,8 +12804,8 @@ fail:
SWIGINTERN VALUE
-_wrap_svn_repos_parse_fns2_t_set_revision_property_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+_wrap_svn_repos_parse_fns3_t_set_revision_property_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_string_t const *) = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12150,11 +12813,11 @@ _wrap_svn_repos_parse_fns2_t_set_revision_property_set(int argc, VALUE *argv, VA
if ((argc < 1) || (argc > 1)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
}
- res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns2_t *","set_revision_property", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns3_t *","set_revision_property", 1, self ));
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -12169,8 +12832,8 @@ fail:
SWIGINTERN VALUE
-_wrap_svn_repos_parse_fns2_t_set_revision_property_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+_wrap_svn_repos_parse_fns3_t_set_revision_property_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,char const *,svn_string_t const *) = 0 ;
@@ -12179,11 +12842,11 @@ _wrap_svn_repos_parse_fns2_t_set_revision_property_get(int argc, VALUE *argv, VA
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
- res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns2_t *","set_revision_property", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns3_t *","set_revision_property", 1, self ));
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) ((arg1)->set_revision_property);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t);
return vresult;
@@ -12193,8 +12856,8 @@ fail:
SWIGINTERN VALUE
-_wrap_svn_repos_parse_fns2_t_set_node_property_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+_wrap_svn_repos_parse_fns3_t_set_node_property_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_string_t const *) = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12202,11 +12865,11 @@ _wrap_svn_repos_parse_fns2_t_set_node_property_set(int argc, VALUE *argv, VALUE
if ((argc < 1) || (argc > 1)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
}
- res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns2_t *","set_node_property", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns3_t *","set_node_property", 1, self ));
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -12221,8 +12884,8 @@ fail:
SWIGINTERN VALUE
-_wrap_svn_repos_parse_fns2_t_set_node_property_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+_wrap_svn_repos_parse_fns3_t_set_node_property_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,char const *,svn_string_t const *) = 0 ;
@@ -12231,11 +12894,11 @@ _wrap_svn_repos_parse_fns2_t_set_node_property_get(int argc, VALUE *argv, VALUE
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
- res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns2_t *","set_node_property", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns3_t *","set_node_property", 1, self ));
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) ((arg1)->set_node_property);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t);
return vresult;
@@ -12245,8 +12908,8 @@ fail:
SWIGINTERN VALUE
-_wrap_svn_repos_parse_fns2_t_delete_node_property_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+_wrap_svn_repos_parse_fns3_t_delete_node_property_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *) = (svn_error_t *(*)(void *,char const *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12254,11 +12917,11 @@ _wrap_svn_repos_parse_fns2_t_delete_node_property_set(int argc, VALUE *argv, VAL
if ((argc < 1) || (argc > 1)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
}
- res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns2_t *","delete_node_property", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns3_t *","delete_node_property", 1, self ));
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -12273,8 +12936,8 @@ fail:
SWIGINTERN VALUE
-_wrap_svn_repos_parse_fns2_t_delete_node_property_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+_wrap_svn_repos_parse_fns3_t_delete_node_property_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,char const *) = 0 ;
@@ -12283,11 +12946,11 @@ _wrap_svn_repos_parse_fns2_t_delete_node_property_get(int argc, VALUE *argv, VAL
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
- res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns2_t *","delete_node_property", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns3_t *","delete_node_property", 1, self ));
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *)) ((arg1)->delete_node_property);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char__p_svn_error_t);
return vresult;
@@ -12297,8 +12960,8 @@ fail:
SWIGINTERN VALUE
-_wrap_svn_repos_parse_fns2_t_remove_node_props_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+_wrap_svn_repos_parse_fns3_t_remove_node_props_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12306,11 +12969,11 @@ _wrap_svn_repos_parse_fns2_t_remove_node_props_set(int argc, VALUE *argv, VALUE
if ((argc < 1) || (argc > 1)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
}
- res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns2_t *","remove_node_props", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns3_t *","remove_node_props", 1, self ));
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -12325,8 +12988,8 @@ fail:
SWIGINTERN VALUE
-_wrap_svn_repos_parse_fns2_t_remove_node_props_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+_wrap_svn_repos_parse_fns3_t_remove_node_props_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *) = 0 ;
@@ -12335,11 +12998,11 @@ _wrap_svn_repos_parse_fns2_t_remove_node_props_get(int argc, VALUE *argv, VALUE
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
- res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns2_t *","remove_node_props", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns3_t *","remove_node_props", 1, self ));
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
result = (svn_error_t *(*)(void *)) ((arg1)->remove_node_props);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__p_svn_error_t);
return vresult;
@@ -12349,8 +13012,8 @@ fail:
SWIGINTERN VALUE
-_wrap_svn_repos_parse_fns2_t_set_fulltext_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+_wrap_svn_repos_parse_fns3_t_set_fulltext_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(svn_stream_t **,void *) = (svn_error_t *(*)(svn_stream_t **,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12358,11 +13021,11 @@ _wrap_svn_repos_parse_fns2_t_set_fulltext_set(int argc, VALUE *argv, VALUE self)
if ((argc < 1) || (argc > 1)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
}
- res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns2_t *","set_fulltext", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns3_t *","set_fulltext", 1, self ));
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_p_svn_stream_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -12377,8 +13040,8 @@ fail:
SWIGINTERN VALUE
-_wrap_svn_repos_parse_fns2_t_set_fulltext_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+_wrap_svn_repos_parse_fns3_t_set_fulltext_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_stream_t **,void *) = 0 ;
@@ -12387,11 +13050,11 @@ _wrap_svn_repos_parse_fns2_t_set_fulltext_get(int argc, VALUE *argv, VALUE self)
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
- res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns2_t *","set_fulltext", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns3_t *","set_fulltext", 1, self ));
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
result = (svn_error_t *(*)(svn_stream_t **,void *)) ((arg1)->set_fulltext);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_svn_stream_t_p_void__p_svn_error_t);
return vresult;
@@ -12401,8 +13064,8 @@ fail:
SWIGINTERN VALUE
-_wrap_svn_repos_parse_fns2_t_apply_textdelta_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+_wrap_svn_repos_parse_fns3_t_apply_textdelta_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(svn_txdelta_window_handler_t *,void **,void *) = (svn_error_t *(*)(svn_txdelta_window_handler_t *,void **,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12410,11 +13073,11 @@ _wrap_svn_repos_parse_fns2_t_apply_textdelta_set(int argc, VALUE *argv, VALUE se
if ((argc < 1) || (argc > 1)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
}
- res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns2_t *","apply_textdelta", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns3_t *","apply_textdelta", 1, self ));
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_txdelta_window_handler_t_p_p_void_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -12429,8 +13092,8 @@ fail:
SWIGINTERN VALUE
-_wrap_svn_repos_parse_fns2_t_apply_textdelta_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+_wrap_svn_repos_parse_fns3_t_apply_textdelta_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_txdelta_window_handler_t *,void **,void *) = 0 ;
@@ -12439,11 +13102,11 @@ _wrap_svn_repos_parse_fns2_t_apply_textdelta_get(int argc, VALUE *argv, VALUE se
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
- res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns2_t *","apply_textdelta", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns3_t *","apply_textdelta", 1, self ));
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
result = (svn_error_t *(*)(svn_txdelta_window_handler_t *,void **,void *)) ((arg1)->apply_textdelta);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_txdelta_window_handler_t_p_p_void_p_void__p_svn_error_t);
return vresult;
@@ -12453,8 +13116,8 @@ fail:
SWIGINTERN VALUE
-_wrap_svn_repos_parse_fns2_t_close_node_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+_wrap_svn_repos_parse_fns3_t_close_node_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12462,11 +13125,11 @@ _wrap_svn_repos_parse_fns2_t_close_node_set(int argc, VALUE *argv, VALUE self) {
if ((argc < 1) || (argc > 1)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
}
- res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns2_t *","close_node", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns3_t *","close_node", 1, self ));
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -12481,8 +13144,8 @@ fail:
SWIGINTERN VALUE
-_wrap_svn_repos_parse_fns2_t_close_node_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+_wrap_svn_repos_parse_fns3_t_close_node_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *) = 0 ;
@@ -12491,11 +13154,11 @@ _wrap_svn_repos_parse_fns2_t_close_node_get(int argc, VALUE *argv, VALUE self) {
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
- res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns2_t *","close_node", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns3_t *","close_node", 1, self ));
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
result = (svn_error_t *(*)(void *)) ((arg1)->close_node);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__p_svn_error_t);
return vresult;
@@ -12505,8 +13168,8 @@ fail:
SWIGINTERN VALUE
-_wrap_svn_repos_parse_fns2_t_close_revision_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+_wrap_svn_repos_parse_fns3_t_close_revision_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12514,11 +13177,11 @@ _wrap_svn_repos_parse_fns2_t_close_revision_set(int argc, VALUE *argv, VALUE sel
if ((argc < 1) || (argc > 1)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
}
- res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns2_t *","close_revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns3_t *","close_revision", 1, self ));
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -12533,8 +13196,8 @@ fail:
SWIGINTERN VALUE
-_wrap_svn_repos_parse_fns2_t_close_revision_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
+_wrap_svn_repos_parse_fns3_t_close_revision_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns3_t *arg1 = (struct svn_repos_parse_fns3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *) = 0 ;
@@ -12543,11 +13206,11 @@ _wrap_svn_repos_parse_fns2_t_close_revision_get(int argc, VALUE *argv, VALUE sel
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
- res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns2_t *","close_revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns3_t *","close_revision", 1, self ));
}
- arg1 = (svn_repos_parse_fns2_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns3_t *)(argp1);
result = (svn_error_t *(*)(void *)) ((arg1)->close_revision);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__p_svn_error_t);
return vresult;
@@ -12557,13 +13220,14 @@ fail:
SWIGINTERN VALUE
-_wrap_svn_repos_parse_dumpstream2(int argc, VALUE *argv, VALUE self) {
+_wrap_svn_repos_parse_dumpstream3(int argc, VALUE *argv, VALUE self) {
svn_stream_t *arg1 = (svn_stream_t *) 0 ;
- svn_repos_parse_fns2_t *arg2 = (svn_repos_parse_fns2_t *) 0 ;
+ svn_repos_parse_fns3_t *arg2 = (svn_repos_parse_fns3_t *) 0 ;
void *arg3 = (void *) 0 ;
- svn_cancel_func_t arg4 = (svn_cancel_func_t) 0 ;
- void *arg5 = (void *) 0 ;
- apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ svn_boolean_t arg4 ;
+ svn_cancel_func_t arg5 = (svn_cancel_func_t) 0 ;
+ void *arg6 = (void *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
void *argp2 = 0 ;
@@ -12573,34 +13237,35 @@ _wrap_svn_repos_parse_dumpstream2(int argc, VALUE *argv, VALUE self) {
VALUE vresult = Qnil;
{
- svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg6);
- _global_pool = arg6;
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg7);
+ _global_pool = arg7;
svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
}
- if ((argc < 4) || (argc > 5)) {
- rb_raise(rb_eArgError, "wrong # of arguments(%d for 4)",argc); SWIG_fail;
+ if ((argc < 5) || (argc > 6)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 5)",argc); SWIG_fail;
}
{
arg1 = svn_swig_rb_make_stream(argv[0]);
}
- res2 = SWIG_ConvertPtr(argv[1], &argp2,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ res2 = SWIG_ConvertPtr(argv[1], &argp2,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_repos_parse_fns2_t const *","svn_repos_parse_dumpstream2", 2, argv[1] ));
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_repos_parse_fns3_t const *","svn_repos_parse_dumpstream3", 2, argv[1] ));
}
- arg2 = (svn_repos_parse_fns2_t *)(argp2);
+ arg2 = (svn_repos_parse_fns3_t *)(argp2);
res3 = SWIG_ConvertPtr(argv[2],SWIG_as_voidptrptr(&arg3), 0, 0);
if (!SWIG_IsOK(res3)) {
- SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "void *","svn_repos_parse_dumpstream2", 3, argv[2] ));
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "void *","svn_repos_parse_dumpstream3", 3, argv[2] ));
}
+ arg4 = RTEST(argv[3]);
{
- arg4 = svn_swig_rb_cancel_func;
- arg5 = (void *)svn_swig_rb_make_baton(argv[3], _global_svn_swig_rb_pool);
+ arg5 = svn_swig_rb_cancel_func;
+ arg6 = (void *)svn_swig_rb_make_baton(argv[4], _global_svn_swig_rb_pool);
}
- if (argc > 4) {
+ if (argc > 5) {
}
{
- result = (svn_error_t *)svn_repos_parse_dumpstream2(arg1,(struct svn_repos_parse_fns2_t const *)arg2,arg3,arg4,arg5,arg6);
+ result = (svn_error_t *)svn_repos_parse_dumpstream3(arg1,(struct svn_repos_parse_fns3_t const *)arg2,arg3,arg4,arg5,arg6,arg7);
@@ -12614,7 +13279,7 @@ _wrap_svn_repos_parse_dumpstream2(int argc, VALUE *argv, VALUE self) {
vresult = Qnil;
}
{
- svn_swig_rb_set_baton(vresult, (VALUE)arg5);
+ svn_swig_rb_set_baton(vresult, (VALUE)arg6);
}
{
VALUE target;
@@ -12637,69 +13302,85 @@ fail:
SWIGINTERN VALUE
-_wrap_svn_repos_get_fs_build_parser3(int argc, VALUE *argv, VALUE self) {
- svn_repos_parse_fns2_t **arg1 = (svn_repos_parse_fns2_t **) 0 ;
+_wrap_svn_repos_get_fs_build_parser4(int argc, VALUE *argv, VALUE self) {
+ svn_repos_parse_fns3_t **arg1 = (svn_repos_parse_fns3_t **) 0 ;
void **arg2 = (void **) 0 ;
svn_repos_t *arg3 = (svn_repos_t *) 0 ;
- svn_boolean_t arg4 ;
- svn_boolean_t arg5 ;
- enum svn_repos_load_uuid arg6 ;
- char *arg7 = (char *) 0 ;
- svn_repos_notify_func_t arg8 = (svn_repos_notify_func_t) 0 ;
- void *arg9 = (void *) 0 ;
- apr_pool_t *arg10 = (apr_pool_t *) 0 ;
+ svn_revnum_t arg4 ;
+ svn_revnum_t arg5 ;
+ svn_boolean_t arg6 ;
+ svn_boolean_t arg7 ;
+ enum svn_repos_load_uuid arg8 ;
+ char *arg9 = (char *) 0 ;
+ svn_repos_notify_func_t arg10 = (svn_repos_notify_func_t) 0 ;
+ void *arg11 = (void *) 0 ;
+ apr_pool_t *arg12 = (apr_pool_t *) 0 ;
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
- svn_repos_parse_fns2_t *temp1 ;
+ svn_repos_parse_fns3_t *temp1 ;
void *temp2 ;
void *argp3 = 0 ;
int res3 = 0 ;
- int val6 ;
- int ecode6 = 0 ;
- int res9 ;
+ long val4 ;
+ int ecode4 = 0 ;
+ long val5 ;
+ int ecode5 = 0 ;
+ int val8 ;
+ int ecode8 = 0 ;
+ int res11 ;
svn_error_t *result = 0 ;
VALUE vresult = Qnil;
{
- svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg10);
- _global_pool = arg10;
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg12);
+ _global_pool = arg12;
svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
}
arg1 = &temp1;
arg2 = &temp2;
- if ((argc < 7) || (argc > 8)) {
- rb_raise(rb_eArgError, "wrong # of arguments(%d for 7)",argc); SWIG_fail;
+ if ((argc < 9) || (argc > 10)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 9)",argc); SWIG_fail;
}
res3 = SWIG_ConvertPtr(argv[0], &argp3,SWIGTYPE_p_svn_repos_t, 0 | 0 );
if (!SWIG_IsOK(res3)) {
- SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "svn_repos_t *","svn_repos_get_fs_build_parser3", 3, argv[0] ));
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "svn_repos_t *","svn_repos_get_fs_build_parser4", 3, argv[0] ));
}
arg3 = (svn_repos_t *)(argp3);
- arg4 = RTEST(argv[1]);
- arg5 = RTEST(argv[2]);
- ecode6 = SWIG_AsVal_int(argv[3], &val6);
- if (!SWIG_IsOK(ecode6)) {
- SWIG_exception_fail(SWIG_ArgError(ecode6), Ruby_Format_TypeError( "", "enum svn_repos_load_uuid","svn_repos_get_fs_build_parser3", 6, argv[3] ));
+ ecode4 = SWIG_AsVal_long(argv[1], &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), Ruby_Format_TypeError( "", "svn_revnum_t","svn_repos_get_fs_build_parser4", 4, argv[1] ));
}
- arg6 = (enum svn_repos_load_uuid)(val6);
+ arg4 = (svn_revnum_t)(val4);
+ ecode5 = SWIG_AsVal_long(argv[2], &val5);
+ if (!SWIG_IsOK(ecode5)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode5), Ruby_Format_TypeError( "", "svn_revnum_t","svn_repos_get_fs_build_parser4", 5, argv[2] ));
+ }
+ arg5 = (svn_revnum_t)(val5);
+ arg6 = RTEST(argv[3]);
+ arg7 = RTEST(argv[4]);
+ ecode8 = SWIG_AsVal_int(argv[5], &val8);
+ if (!SWIG_IsOK(ecode8)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode8), Ruby_Format_TypeError( "", "enum svn_repos_load_uuid","svn_repos_get_fs_build_parser4", 8, argv[5] ));
+ }
+ arg8 = (enum svn_repos_load_uuid)(val8);
{
- if (NIL_P(argv[4])) {
- arg7 = NULL;
+ if (NIL_P(argv[6])) {
+ arg9 = NULL;
} else {
- arg7 = StringValuePtr(argv[4]);
+ arg9 = StringValuePtr(argv[6]);
}
}
{
- int res = SWIG_ConvertFunctionPtr(argv[5], (void**)(&arg8), SWIGTYPE_p_f_p_void_p_q_const__struct_svn_repos_notify_t_p_apr_pool_t__void);
+ int res = SWIG_ConvertFunctionPtr(argv[7], (void**)(&arg10), SWIGTYPE_p_f_p_void_p_q_const__struct_svn_repos_notify_t_p_apr_pool_t__void);
if (!SWIG_IsOK(res)) {
- SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_repos_notify_func_t","svn_repos_get_fs_build_parser3", 8, argv[5] ));
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_repos_notify_func_t","svn_repos_get_fs_build_parser4", 10, argv[7] ));
}
}
- res9 = SWIG_ConvertPtr(argv[6],SWIG_as_voidptrptr(&arg9), 0, 0);
- if (!SWIG_IsOK(res9)) {
- SWIG_exception_fail(SWIG_ArgError(res9), Ruby_Format_TypeError( "", "void *","svn_repos_get_fs_build_parser3", 9, argv[6] ));
+ res11 = SWIG_ConvertPtr(argv[8],SWIG_as_voidptrptr(&arg11), 0, 0);
+ if (!SWIG_IsOK(res11)) {
+ SWIG_exception_fail(SWIG_ArgError(res11), Ruby_Format_TypeError( "", "void *","svn_repos_get_fs_build_parser4", 11, argv[8] ));
}
- if (argc > 7) {
+ if (argc > 9) {
}
{
@@ -12708,7 +13389,7 @@ _wrap_svn_repos_get_fs_build_parser3(int argc, VALUE *argv, VALUE self) {
}
}
{
- result = (svn_error_t *)svn_repos_get_fs_build_parser3((struct svn_repos_parse_fns2_t const **)arg1,arg2,arg3,arg4,arg5,arg6,(char const *)arg7,arg8,arg9,arg10);
+ result = (svn_error_t *)svn_repos_get_fs_build_parser4((struct svn_repos_parse_fns3_t const **)arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,(char const *)arg9,arg10,arg11,arg12);
@@ -12722,7 +13403,13 @@ _wrap_svn_repos_get_fs_build_parser3(int argc, VALUE *argv, VALUE self) {
vresult = Qnil;
}
{
- vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_repos_parse_fns2_t, 0));
+ /* FIXME: Missing argout typemap: svn_repos_get_fs_build_parser4 arg 1 (svn_repos_parse_fns3_t const **) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_repos_get_fs_build_parser4 is not implemented yet");
+
}
{
vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg2, SWIGTYPE_p_void, 0));
@@ -12747,111 +13434,585 @@ fail:
}
+static swig_class SwigClassSvn_repos_parse_fns2_t;
+
SWIGINTERN VALUE
-_wrap_svn_repos_get_fs_build_parser2(int argc, VALUE *argv, VALUE self) {
- svn_repos_parse_fns2_t **arg1 = (svn_repos_parse_fns2_t **) 0 ;
- void **arg2 = (void **) 0 ;
- svn_repos_t *arg3 = (svn_repos_t *) 0 ;
- svn_boolean_t arg4 ;
- enum svn_repos_load_uuid arg5 ;
- svn_stream_t *arg6 = (svn_stream_t *) 0 ;
- char *arg7 = (char *) 0 ;
- apr_pool_t *arg8 = (apr_pool_t *) 0 ;
- VALUE _global_svn_swig_rb_pool ;
- apr_pool_t *_global_pool ;
- svn_repos_parse_fns2_t *temp1 ;
- void *temp2 ;
- void *argp3 = 0 ;
- int res3 = 0 ;
- int val5 ;
- int ecode5 = 0 ;
- svn_error_t *result = 0 ;
+_wrap_svn_repos_parse_fns2_t_new_revision_record_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(void **,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns2_t *","new_revision_record", 1, self ));
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ {
+ int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)","new_revision_record", 2, argv[0] ));
+ }
+ }
+ if (arg1) (arg1)->new_revision_record = arg2;
+ return Qnil;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns2_t_new_revision_record_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_error_t *(*result)(void **,apr_hash_t *,void *,apr_pool_t *) = 0 ;
VALUE vresult = Qnil;
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns2_t *","new_revision_record", 1, self ));
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ result = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) ((arg1)->new_revision_record);
+ vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns2_t_uuid_record_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(char const *,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,void *,apr_pool_t *)) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns2_t *","uuid_record", 1, self ));
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
{
- svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg8);
- _global_pool = arg8;
- svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_error_t *(*)(char const *,void *,apr_pool_t *)","uuid_record", 2, argv[0] ));
+ }
}
- arg1 = &temp1;
- arg2 = &temp2;
- if ((argc < 5) || (argc > 6)) {
- rb_raise(rb_eArgError, "wrong # of arguments(%d for 5)",argc); SWIG_fail;
+ if (arg1) (arg1)->uuid_record = arg2;
+ return Qnil;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns2_t_uuid_record_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_error_t *(*result)(char const *,void *,apr_pool_t *) = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
- res3 = SWIG_ConvertPtr(argv[0], &argp3,SWIGTYPE_p_svn_repos_t, 0 | 0 );
- if (!SWIG_IsOK(res3)) {
- SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "svn_repos_t *","svn_repos_get_fs_build_parser2", 3, argv[0] ));
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns2_t *","uuid_record", 1, self ));
}
- arg3 = (svn_repos_t *)(argp3);
- arg4 = RTEST(argv[1]);
- ecode5 = SWIG_AsVal_int(argv[2], &val5);
- if (!SWIG_IsOK(ecode5)) {
- SWIG_exception_fail(SWIG_ArgError(ecode5), Ruby_Format_TypeError( "", "enum svn_repos_load_uuid","svn_repos_get_fs_build_parser2", 5, argv[2] ));
- }
- arg5 = (enum svn_repos_load_uuid)(val5);
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ result = (svn_error_t *(*)(char const *,void *,apr_pool_t *)) ((arg1)->uuid_record);
+ vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t);
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns2_t_new_node_record_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(void **,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns2_t *","new_node_record", 1, self ));
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
{
- arg6 = svn_swig_rb_make_stream(argv[3]);
+ int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)","new_node_record", 2, argv[0] ));
+ }
}
+ if (arg1) (arg1)->new_node_record = arg2;
+ return Qnil;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns2_t_new_node_record_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_error_t *(*result)(void **,apr_hash_t *,void *,apr_pool_t *) = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns2_t *","new_node_record", 1, self ));
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ result = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) ((arg1)->new_node_record);
+ vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns2_t_set_revision_property_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(void *,char const *,svn_string_t const *) = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns2_t *","set_revision_property", 1, self ));
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
{
- if (NIL_P(argv[4])) {
- arg7 = NULL;
- } else {
- arg7 = StringValuePtr(argv[4]);
+ int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_error_t *(*)(void *,char const *,svn_string_t const *)","set_revision_property", 2, argv[0] ));
}
}
- if (argc > 5) {
-
+ if (arg1) (arg1)->set_revision_property = arg2;
+ return Qnil;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns2_t_set_revision_property_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_error_t *(*result)(void *,char const *,svn_string_t const *) = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns2_t *","set_revision_property", 1, self ));
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ result = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) ((arg1)->set_revision_property);
+ vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t);
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns2_t_set_node_property_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(void *,char const *,svn_string_t const *) = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns2_t *","set_node_property", 1, self ));
}
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
{
- if (!arg3) {
- svn_swig_rb_raise_svn_repos_already_close();
+ int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_error_t *(*)(void *,char const *,svn_string_t const *)","set_node_property", 2, argv[0] ));
}
}
+ if (arg1) (arg1)->set_node_property = arg2;
+ return Qnil;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns2_t_set_node_property_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_error_t *(*result)(void *,char const *,svn_string_t const *) = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns2_t *","set_node_property", 1, self ));
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ result = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) ((arg1)->set_node_property);
+ vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t);
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns2_t_delete_node_property_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(void *,char const *) = (svn_error_t *(*)(void *,char const *)) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns2_t *","delete_node_property", 1, self ));
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
{
- result = (svn_error_t *)svn_repos_get_fs_build_parser2((struct svn_repos_parse_fns2_t const **)arg1,arg2,arg3,arg4,arg5,arg6,(char const *)arg7,arg8);
-
-
-
+ int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_error_t *(*)(void *,char const *)","delete_node_property", 2, argv[0] ));
+ }
+ }
+ if (arg1) (arg1)->delete_node_property = arg2;
+ return Qnil;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns2_t_delete_node_property_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_error_t *(*result)(void *,char const *) = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns2_t *","delete_node_property", 1, self ));
}
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ result = (svn_error_t *(*)(void *,char const *)) ((arg1)->delete_node_property);
+ vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char__p_svn_error_t);
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns2_t_remove_node_props_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns2_t *","remove_node_props", 1, self ));
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
{
- if (result) {
- svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
- svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
- svn_swig_rb_handle_svn_error(result);
+ int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_error_t *(*)(void *)","remove_node_props", 2, argv[0] ));
}
- vresult = Qnil;
}
+ if (arg1) (arg1)->remove_node_props = arg2;
+ return Qnil;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns2_t_remove_node_props_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_error_t *(*result)(void *) = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns2_t *","remove_node_props", 1, self ));
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ result = (svn_error_t *(*)(void *)) ((arg1)->remove_node_props);
+ vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__p_svn_error_t);
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns2_t_set_fulltext_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(svn_stream_t **,void *) = (svn_error_t *(*)(svn_stream_t **,void *)) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns2_t *","set_fulltext", 1, self ));
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
{
- vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_repos_parse_fns2_t, 0));
+ int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_p_svn_stream_t_p_void__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_error_t *(*)(svn_stream_t **,void *)","set_fulltext", 2, argv[0] ));
+ }
}
+ if (arg1) (arg1)->set_fulltext = arg2;
+ return Qnil;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns2_t_set_fulltext_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_error_t *(*result)(svn_stream_t **,void *) = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns2_t *","set_fulltext", 1, self ));
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ result = (svn_error_t *(*)(svn_stream_t **,void *)) ((arg1)->set_fulltext);
+ vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_svn_stream_t_p_void__p_svn_error_t);
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns2_t_apply_textdelta_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(svn_txdelta_window_handler_t *,void **,void *) = (svn_error_t *(*)(svn_txdelta_window_handler_t *,void **,void *)) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns2_t *","apply_textdelta", 1, self ));
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
{
- vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg2, SWIGTYPE_p_void, 0));
+ int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_txdelta_window_handler_t_p_p_void_p_void__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_error_t *(*)(svn_txdelta_window_handler_t *,void **,void *)","apply_textdelta", 2, argv[0] ));
+ }
}
+ if (arg1) (arg1)->apply_textdelta = arg2;
+ return Qnil;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns2_t_apply_textdelta_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_error_t *(*result)(svn_txdelta_window_handler_t *,void **,void *) = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns2_t *","apply_textdelta", 1, self ));
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ result = (svn_error_t *(*)(svn_txdelta_window_handler_t *,void **,void *)) ((arg1)->apply_textdelta);
+ vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_txdelta_window_handler_t_p_p_void_p_void__p_svn_error_t);
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns2_t_close_node_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns2_t *","close_node", 1, self ));
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
{
- VALUE target;
- target = _global_vresult_address == &vresult ? self : vresult;
- if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
- svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
- svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_error_t *(*)(void *)","close_node", 2, argv[0] ));
+ }
+ }
+ if (arg1) (arg1)->close_node = arg2;
+ return Qnil;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns2_t_close_node_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_error_t *(*result)(void *) = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns2_t *","close_node", 1, self ));
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ result = (svn_error_t *(*)(void *)) ((arg1)->close_node);
+ vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__p_svn_error_t);
return vresult;
fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns2_t_close_revision_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns2_t *","close_revision", 1, self ));
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
{
- VALUE target;
- target = _global_vresult_address == &vresult ? self : vresult;
- if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
- svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
- svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_error_t *(*)(void *)","close_revision", 2, argv[0] ));
+ }
+ }
+ if (arg1) (arg1)->close_revision = arg2;
+ return Qnil;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns2_t_close_revision_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_repos_parse_fns2_t *arg1 = (struct svn_repos_parse_fns2_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_error_t *(*result)(void *) = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns2_t *","close_revision", 1, self ));
+ }
+ arg1 = (struct svn_repos_parse_fns2_t *)(argp1);
+ result = (svn_error_t *(*)(void *)) ((arg1)->close_revision);
+ vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__p_svn_error_t);
+ return vresult;
+fail:
return Qnil;
}
-swig_class SwigClassSvn_repos_parser_fns_t;
+static swig_class SwigClassSvn_repos_parser_fns_t;
SWIGINTERN VALUE
_wrap_svn_repos_parser_fns_t_new_revision_record_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(void **,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12861,9 +14022,9 @@ _wrap_svn_repos_parser_fns_t_new_revision_record_set(int argc, VALUE *argv, VALU
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parser_fns_t *","new_revision_record", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns_t *","new_revision_record", 1, self ));
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -12879,7 +14040,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_parser_fns_t_new_revision_record_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void **,apr_hash_t *,void *,apr_pool_t *) = 0 ;
@@ -12890,9 +14051,9 @@ _wrap_svn_repos_parser_fns_t_new_revision_record_get(int argc, VALUE *argv, VALU
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parser_fns_t *","new_revision_record", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns_t *","new_revision_record", 1, self ));
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
result = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) ((arg1)->new_revision_record);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -12903,7 +14064,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_parser_fns_t_uuid_record_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(char const *,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12913,9 +14074,9 @@ _wrap_svn_repos_parser_fns_t_uuid_record_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parser_fns_t *","uuid_record", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns_t *","uuid_record", 1, self ));
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -12931,7 +14092,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_parser_fns_t_uuid_record_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(char const *,void *,apr_pool_t *) = 0 ;
@@ -12942,9 +14103,9 @@ _wrap_svn_repos_parser_fns_t_uuid_record_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parser_fns_t *","uuid_record", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns_t *","uuid_record", 1, self ));
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
result = (svn_error_t *(*)(char const *,void *,apr_pool_t *)) ((arg1)->uuid_record);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -12955,7 +14116,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_parser_fns_t_new_node_record_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(void **,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12965,9 +14126,9 @@ _wrap_svn_repos_parser_fns_t_new_node_record_set(int argc, VALUE *argv, VALUE se
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parser_fns_t *","new_node_record", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns_t *","new_node_record", 1, self ));
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -12983,7 +14144,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_parser_fns_t_new_node_record_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void **,apr_hash_t *,void *,apr_pool_t *) = 0 ;
@@ -12994,9 +14155,9 @@ _wrap_svn_repos_parser_fns_t_new_node_record_get(int argc, VALUE *argv, VALUE se
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parser_fns_t *","new_node_record", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns_t *","new_node_record", 1, self ));
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
result = (svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)) ((arg1)->new_node_record);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -13007,7 +14168,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_parser_fns_t_set_revision_property_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_string_t const *) = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13017,9 +14178,9 @@ _wrap_svn_repos_parser_fns_t_set_revision_property_set(int argc, VALUE *argv, VA
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parser_fns_t *","set_revision_property", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns_t *","set_revision_property", 1, self ));
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -13035,7 +14196,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_parser_fns_t_set_revision_property_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,char const *,svn_string_t const *) = 0 ;
@@ -13046,9 +14207,9 @@ _wrap_svn_repos_parser_fns_t_set_revision_property_get(int argc, VALUE *argv, VA
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parser_fns_t *","set_revision_property", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns_t *","set_revision_property", 1, self ));
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) ((arg1)->set_revision_property);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t);
return vresult;
@@ -13059,7 +14220,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_parser_fns_t_set_node_property_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(void *,char const *,svn_string_t const *) = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13069,9 +14230,9 @@ _wrap_svn_repos_parser_fns_t_set_node_property_set(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parser_fns_t *","set_node_property", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns_t *","set_node_property", 1, self ));
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -13087,7 +14248,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_parser_fns_t_set_node_property_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *,char const *,svn_string_t const *) = 0 ;
@@ -13098,9 +14259,9 @@ _wrap_svn_repos_parser_fns_t_set_node_property_get(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parser_fns_t *","set_node_property", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns_t *","set_node_property", 1, self ));
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
result = (svn_error_t *(*)(void *,char const *,svn_string_t const *)) ((arg1)->set_node_property);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t);
return vresult;
@@ -13111,7 +14272,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_parser_fns_t_remove_node_props_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13121,9 +14282,9 @@ _wrap_svn_repos_parser_fns_t_remove_node_props_set(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parser_fns_t *","remove_node_props", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns_t *","remove_node_props", 1, self ));
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -13139,7 +14300,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_parser_fns_t_remove_node_props_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *) = 0 ;
@@ -13150,9 +14311,9 @@ _wrap_svn_repos_parser_fns_t_remove_node_props_get(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parser_fns_t *","remove_node_props", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns_t *","remove_node_props", 1, self ));
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
result = (svn_error_t *(*)(void *)) ((arg1)->remove_node_props);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__p_svn_error_t);
return vresult;
@@ -13163,7 +14324,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_parser_fns_t_set_fulltext_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(svn_stream_t **,void *) = (svn_error_t *(*)(svn_stream_t **,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13173,9 +14334,9 @@ _wrap_svn_repos_parser_fns_t_set_fulltext_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parser_fns_t *","set_fulltext", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns_t *","set_fulltext", 1, self ));
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_p_svn_stream_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -13191,7 +14352,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_parser_fns_t_set_fulltext_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_stream_t **,void *) = 0 ;
@@ -13202,9 +14363,9 @@ _wrap_svn_repos_parser_fns_t_set_fulltext_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parser_fns_t *","set_fulltext", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns_t *","set_fulltext", 1, self ));
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
result = (svn_error_t *(*)(svn_stream_t **,void *)) ((arg1)->set_fulltext);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_p_svn_stream_t_p_void__p_svn_error_t);
return vresult;
@@ -13215,7 +14376,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_parser_fns_t_close_node_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13225,9 +14386,9 @@ _wrap_svn_repos_parser_fns_t_close_node_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parser_fns_t *","close_node", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns_t *","close_node", 1, self ));
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -13243,7 +14404,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_parser_fns_t_close_node_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *) = 0 ;
@@ -13254,9 +14415,9 @@ _wrap_svn_repos_parser_fns_t_close_node_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parser_fns_t *","close_node", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns_t *","close_node", 1, self ));
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
result = (svn_error_t *(*)(void *)) ((arg1)->close_node);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__p_svn_error_t);
return vresult;
@@ -13267,7 +14428,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_parser_fns_t_close_revision_set(int argc, VALUE *argv, VALUE self) {
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
svn_error_t *(*arg2)(void *) = (svn_error_t *(*)(void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13277,9 +14438,9 @@ _wrap_svn_repos_parser_fns_t_close_revision_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parser_fns_t *","close_revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns_t *","close_revision", 1, self ));
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -13295,7 +14456,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_repos_parser_fns_t_close_revision_get(int argc, VALUE *argv, VALUE self) {
- svn_repos_parser_fns_t *arg1 = (svn_repos_parser_fns_t *) 0 ;
+ struct svn_repos_parse_fns_t *arg1 = (struct svn_repos_parse_fns_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(void *) = 0 ;
@@ -13306,9 +14467,9 @@ _wrap_svn_repos_parser_fns_t_close_revision_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_repos_parse_fns_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parser_fns_t *","close_revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_repos_parse_fns_t *","close_revision", 1, self ));
}
- arg1 = (svn_repos_parser_fns_t *)(argp1);
+ arg1 = (struct svn_repos_parse_fns_t *)(argp1);
result = (svn_error_t *(*)(void *)) ((arg1)->close_revision);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_void__p_svn_error_t);
return vresult;
@@ -13318,6 +14479,86 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_repos_parse_dumpstream2(int argc, VALUE *argv, VALUE self) {
+ svn_stream_t *arg1 = (svn_stream_t *) 0 ;
+ svn_repos_parser_fns2_t *arg2 = (svn_repos_parser_fns2_t *) 0 ;
+ void *arg3 = (void *) 0 ;
+ svn_cancel_func_t arg4 = (svn_cancel_func_t) 0 ;
+ void *arg5 = (void *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ int res3 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg6);
+ _global_pool = arg6;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 4) || (argc > 5)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 4)",argc); SWIG_fail;
+ }
+ {
+ arg1 = svn_swig_rb_make_stream(argv[0]);
+ }
+ res2 = SWIG_ConvertPtr(argv[1], &argp2,SWIGTYPE_p_svn_repos_parse_fns2_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_repos_parser_fns2_t const *","svn_repos_parse_dumpstream2", 2, argv[1] ));
+ }
+ arg2 = (svn_repos_parser_fns2_t *)(argp2);
+ res3 = SWIG_ConvertPtr(argv[2],SWIG_as_voidptrptr(&arg3), 0, 0);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "void *","svn_repos_parse_dumpstream2", 3, argv[2] ));
+ }
+ {
+ arg4 = svn_swig_rb_cancel_func;
+ arg5 = (void *)svn_swig_rb_make_baton(argv[3], _global_svn_swig_rb_pool);
+ }
+ if (argc > 4) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_parse_dumpstream2(arg1,(struct svn_repos_parse_fns2_t const *)arg2,arg3,arg4,arg5,arg6);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ svn_swig_rb_set_baton(vresult, (VALUE)arg5);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_repos_parse_dumpstream(int argc, VALUE *argv, VALUE self) {
svn_stream_t *arg1 = (svn_stream_t *) 0 ;
svn_repos_parser_fns_t *arg2 = (svn_repos_parser_fns_t *) 0 ;
@@ -13398,6 +14639,217 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_repos_get_fs_build_parser3(int argc, VALUE *argv, VALUE self) {
+ svn_repos_parse_fns2_t **arg1 = (svn_repos_parse_fns2_t **) 0 ;
+ void **arg2 = (void **) 0 ;
+ svn_repos_t *arg3 = (svn_repos_t *) 0 ;
+ svn_boolean_t arg4 ;
+ svn_boolean_t arg5 ;
+ enum svn_repos_load_uuid arg6 ;
+ char *arg7 = (char *) 0 ;
+ svn_repos_notify_func_t arg8 = (svn_repos_notify_func_t) 0 ;
+ void *arg9 = (void *) 0 ;
+ apr_pool_t *arg10 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_repos_parse_fns2_t *temp1 ;
+ void *temp2 ;
+ void *argp3 = 0 ;
+ int res3 = 0 ;
+ int val6 ;
+ int ecode6 = 0 ;
+ int res9 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg10);
+ _global_pool = arg10;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ arg2 = &temp2;
+ if ((argc < 7) || (argc > 8)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 7)",argc); SWIG_fail;
+ }
+ res3 = SWIG_ConvertPtr(argv[0], &argp3,SWIGTYPE_p_svn_repos_t, 0 | 0 );
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "svn_repos_t *","svn_repos_get_fs_build_parser3", 3, argv[0] ));
+ }
+ arg3 = (svn_repos_t *)(argp3);
+ arg4 = RTEST(argv[1]);
+ arg5 = RTEST(argv[2]);
+ ecode6 = SWIG_AsVal_int(argv[3], &val6);
+ if (!SWIG_IsOK(ecode6)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode6), Ruby_Format_TypeError( "", "enum svn_repos_load_uuid","svn_repos_get_fs_build_parser3", 6, argv[3] ));
+ }
+ arg6 = (enum svn_repos_load_uuid)(val6);
+ {
+ if (NIL_P(argv[4])) {
+ arg7 = NULL;
+ } else {
+ arg7 = StringValuePtr(argv[4]);
+ }
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(argv[5], (void**)(&arg8), SWIGTYPE_p_f_p_void_p_q_const__struct_svn_repos_notify_t_p_apr_pool_t__void);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_repos_notify_func_t","svn_repos_get_fs_build_parser3", 8, argv[5] ));
+ }
+ }
+ res9 = SWIG_ConvertPtr(argv[6],SWIG_as_voidptrptr(&arg9), 0, 0);
+ if (!SWIG_IsOK(res9)) {
+ SWIG_exception_fail(SWIG_ArgError(res9), Ruby_Format_TypeError( "", "void *","svn_repos_get_fs_build_parser3", 9, argv[6] ));
+ }
+ if (argc > 7) {
+
+ }
+ {
+ if (!arg3) {
+ svn_swig_rb_raise_svn_repos_already_close();
+ }
+ }
+ {
+ result = (svn_error_t *)svn_repos_get_fs_build_parser3((struct svn_repos_parse_fns2_t const **)arg1,arg2,arg3,arg4,arg5,arg6,(char const *)arg7,arg8,arg9,arg10);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_repos_parse_fns2_t, 0));
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg2, SWIGTYPE_p_void, 0));
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_get_fs_build_parser2(int argc, VALUE *argv, VALUE self) {
+ svn_repos_parse_fns2_t **arg1 = (svn_repos_parse_fns2_t **) 0 ;
+ void **arg2 = (void **) 0 ;
+ svn_repos_t *arg3 = (svn_repos_t *) 0 ;
+ svn_boolean_t arg4 ;
+ enum svn_repos_load_uuid arg5 ;
+ svn_stream_t *arg6 = (svn_stream_t *) 0 ;
+ char *arg7 = (char *) 0 ;
+ apr_pool_t *arg8 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_repos_parse_fns2_t *temp1 ;
+ void *temp2 ;
+ void *argp3 = 0 ;
+ int res3 = 0 ;
+ int val5 ;
+ int ecode5 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg8);
+ _global_pool = arg8;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ arg2 = &temp2;
+ if ((argc < 5) || (argc > 6)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 5)",argc); SWIG_fail;
+ }
+ res3 = SWIG_ConvertPtr(argv[0], &argp3,SWIGTYPE_p_svn_repos_t, 0 | 0 );
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "svn_repos_t *","svn_repos_get_fs_build_parser2", 3, argv[0] ));
+ }
+ arg3 = (svn_repos_t *)(argp3);
+ arg4 = RTEST(argv[1]);
+ ecode5 = SWIG_AsVal_int(argv[2], &val5);
+ if (!SWIG_IsOK(ecode5)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode5), Ruby_Format_TypeError( "", "enum svn_repos_load_uuid","svn_repos_get_fs_build_parser2", 5, argv[2] ));
+ }
+ arg5 = (enum svn_repos_load_uuid)(val5);
+ {
+ arg6 = svn_swig_rb_make_stream(argv[3]);
+ }
+ {
+ if (NIL_P(argv[4])) {
+ arg7 = NULL;
+ } else {
+ arg7 = StringValuePtr(argv[4]);
+ }
+ }
+ if (argc > 5) {
+
+ }
+ {
+ if (!arg3) {
+ svn_swig_rb_raise_svn_repos_already_close();
+ }
+ }
+ {
+ result = (svn_error_t *)svn_repos_get_fs_build_parser2((struct svn_repos_parse_fns2_t const **)arg1,arg2,arg3,arg4,arg5,arg6,(char const *)arg7,arg8);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_repos_parse_fns2_t, 0));
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg2, SWIGTYPE_p_void, 0));
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_repos_get_fs_build_parser(int argc, VALUE *argv, VALUE self) {
svn_repos_parser_fns_t **arg1 = (svn_repos_parser_fns_t **) 0 ;
void **arg2 = (void **) 0 ;
@@ -13498,6 +14950,82 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_repos_authz_read2(int argc, VALUE *argv, VALUE self) {
+ svn_authz_t **arg1 = (svn_authz_t **) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_boolean_t arg4 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_authz_t *temp1 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg5);
+ _global_pool = arg5;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ if ((argc < 3) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
+ }
+ {
+ arg2 = StringValueCStr(argv[0]);
+ }
+ res3 = SWIG_AsCharPtrAndSize(argv[1], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","svn_repos_authz_read2", 3, argv[1] ));
+ }
+ arg3 = (char *)(buf3);
+ arg4 = RTEST(argv[2]);
+ if (argc > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_authz_read2(arg1,(char const *)arg2,(char const *)arg3,arg4,arg5);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_authz_t, 0));
+ }
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_repos_authz_read(int argc, VALUE *argv, VALUE self) {
svn_authz_t **arg1 = (svn_authz_t **) 0 ;
char *arg2 = (char *) 0 ;
@@ -13570,6 +15098,73 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_repos_authz_parse(int argc, VALUE *argv, VALUE self) {
+ svn_authz_t **arg1 = (svn_authz_t **) 0 ;
+ svn_stream_t *arg2 = (svn_stream_t *) 0 ;
+ svn_stream_t *arg3 = (svn_stream_t *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_authz_t *temp1 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg4);
+ _global_pool = arg4;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ if ((argc < 2) || (argc > 3)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
+ }
+ {
+ arg2 = svn_swig_rb_make_stream(argv[0]);
+ }
+ {
+ arg3 = svn_swig_rb_make_stream(argv[1]);
+ }
+ if (argc > 2) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_authz_parse(arg1,arg2,arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg1, SWIGTYPE_p_svn_authz_t, 0));
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_repos_authz_check_access(int argc, VALUE *argv, VALUE self) {
svn_authz_t *arg1 = (svn_authz_t *) 0 ;
char *arg2 = (char *) 0 ;
@@ -13756,6 +15351,123 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_repos_fs_get_inherited_props(int argc, VALUE *argv, VALUE self) {
+ apr_array_header_t **arg1 = (apr_array_header_t **) 0 ;
+ svn_fs_root_t *arg2 = (svn_fs_root_t *) 0 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+ svn_repos_authz_func_t arg5 = (svn_repos_authz_func_t) 0 ;
+ void *arg6 = (void *) 0 ;
+ apr_pool_t *arg7 = (apr_pool_t *) 0 ;
+ apr_pool_t *arg8 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ apr_array_header_t *temp1 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg7);
+ _global_pool = arg7;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg8);
+ _global_pool = arg8;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ if ((argc < 4) || (argc > 6)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 4)",argc); SWIG_fail;
+ }
+ res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_fs_root_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_fs_root_t *","svn_repos_fs_get_inherited_props", 2, argv[0] ));
+ }
+ arg2 = (svn_fs_root_t *)(argp2);
+ {
+ arg3 = StringValueCStr(argv[1]);
+ }
+ res4 = SWIG_AsCharPtrAndSize(argv[2], &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "char const *","svn_repos_fs_get_inherited_props", 4, argv[2] ));
+ }
+ arg4 = (char *)(buf4);
+ {
+ arg5 = svn_swig_rb_repos_authz_func;
+ arg6 = (void *)svn_swig_rb_make_baton(argv[3], _global_svn_swig_rb_pool);
+ }
+ if (argc > 4) {
+
+ }
+ if (argc > 5) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_fs_get_inherited_props(arg1,arg2,(char const *)arg3,(char const *)arg4,arg5,arg6,arg7,arg8);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ /* FIXME: Missing argout typemap: svn_repos_fs_get_inherited_props arg 1 (apr_array_header_t **) */
+
+
+
+
+ SWIG_exception(SWIG_ValueError, "svn_repos_fs_get_inherited_props is not implemented yet");
+
+ }
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_repos_remember_client_capabilities(int argc, VALUE *argv, VALUE self) {
svn_repos_t *arg1 = (svn_repos_t *) 0 ;
apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
@@ -13805,6 +15517,727 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns3_invoke_magic_header_record(int argc, VALUE *argv, VALUE self) {
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ int arg2 ;
+ void *arg3 = (void *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int val2 ;
+ int ecode2 = 0 ;
+ int res3 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg4);
+ _global_pool = arg4;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 3) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns3_t *","svn_repos_parse_fns3_invoke_magic_header_record", 1, argv[0] ));
+ }
+ arg1 = (svn_repos_parse_fns3_t *)(argp1);
+ ecode2 = SWIG_AsVal_int(argv[1], &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "int","svn_repos_parse_fns3_invoke_magic_header_record", 2, argv[1] ));
+ }
+ arg2 = (int)(val2);
+ res3 = SWIG_ConvertPtr(argv[2],SWIG_as_voidptrptr(&arg3), 0, 0);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "void *","svn_repos_parse_fns3_invoke_magic_header_record", 3, argv[2] ));
+ }
+ if (argc > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_magic_header_record(arg1,arg2,arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns3_invoke_uuid_record(int argc, VALUE *argv, VALUE self) {
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *arg3 = (void *) 0 ;
+ apr_pool_t *arg4 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res3 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg4);
+ _global_pool = arg4;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 3) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns3_t *","svn_repos_parse_fns3_invoke_uuid_record", 1, argv[0] ));
+ }
+ arg1 = (svn_repos_parse_fns3_t *)(argp1);
+ {
+ if (NIL_P(argv[1])) {
+ arg2 = NULL;
+ } else {
+ arg2 = StringValuePtr(argv[1]);
+ }
+ }
+ res3 = SWIG_ConvertPtr(argv[2],SWIG_as_voidptrptr(&arg3), 0, 0);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "void *","svn_repos_parse_fns3_invoke_uuid_record", 3, argv[2] ));
+ }
+ if (argc > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_uuid_record(arg1,(char const *)arg2,arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns3_invoke_new_revision_record(int argc, VALUE *argv, VALUE self) {
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ void **arg2 = (void **) 0 ;
+ apr_hash_t *arg3 = (apr_hash_t *) 0 ;
+ void *arg4 = (void *) 0 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ void *temp2 ;
+ void *argp3 = 0 ;
+ int res3 = 0 ;
+ int res4 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg5);
+ _global_pool = arg5;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg2 = &temp2;
+ if ((argc < 3) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns3_t *","svn_repos_parse_fns3_invoke_new_revision_record", 1, argv[0] ));
+ }
+ arg1 = (svn_repos_parse_fns3_t *)(argp1);
+ res3 = SWIG_ConvertPtr(argv[1], &argp3,SWIGTYPE_p_apr_hash_t, 0 | 0 );
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "apr_hash_t *","svn_repos_parse_fns3_invoke_new_revision_record", 3, argv[1] ));
+ }
+ arg3 = (apr_hash_t *)(argp3);
+ res4 = SWIG_ConvertPtr(argv[2],SWIG_as_voidptrptr(&arg4), 0, 0);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "void *","svn_repos_parse_fns3_invoke_new_revision_record", 4, argv[2] ));
+ }
+ if (argc > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_new_revision_record(arg1,arg2,arg3,arg4,arg5);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg2, SWIGTYPE_p_void, 0));
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns3_invoke_new_node_record(int argc, VALUE *argv, VALUE self) {
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ void **arg2 = (void **) 0 ;
+ apr_hash_t *arg3 = (apr_hash_t *) 0 ;
+ void *arg4 = (void *) 0 ;
+ apr_pool_t *arg5 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ void *temp2 ;
+ void *argp3 = 0 ;
+ int res3 = 0 ;
+ int res4 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg5);
+ _global_pool = arg5;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg2 = &temp2;
+ if ((argc < 3) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns3_t *","svn_repos_parse_fns3_invoke_new_node_record", 1, argv[0] ));
+ }
+ arg1 = (svn_repos_parse_fns3_t *)(argp1);
+ res3 = SWIG_ConvertPtr(argv[1], &argp3,SWIGTYPE_p_apr_hash_t, 0 | 0 );
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "apr_hash_t *","svn_repos_parse_fns3_invoke_new_node_record", 3, argv[1] ));
+ }
+ arg3 = (apr_hash_t *)(argp3);
+ res4 = SWIG_ConvertPtr(argv[2],SWIG_as_voidptrptr(&arg4), 0, 0);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "void *","svn_repos_parse_fns3_invoke_new_node_record", 4, argv[2] ));
+ }
+ if (argc > 3) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_new_node_record(arg1,arg2,arg3,arg4,arg5);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg2, SWIGTYPE_p_void, 0));
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns3_invoke_set_revision_property(int argc, VALUE *argv, VALUE self) {
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ void *arg2 = (void *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_string_t *arg4 = (svn_string_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ svn_string_t value4 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 4) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 4)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns3_t *","svn_repos_parse_fns3_invoke_set_revision_property", 1, argv[0] ));
+ }
+ arg1 = (svn_repos_parse_fns3_t *)(argp1);
+ res2 = SWIG_ConvertPtr(argv[1],SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "void *","svn_repos_parse_fns3_invoke_set_revision_property", 2, argv[1] ));
+ }
+ res3 = SWIG_AsCharPtrAndSize(argv[2], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","svn_repos_parse_fns3_invoke_set_revision_property", 3, argv[2] ));
+ }
+ arg3 = (char *)(buf3);
+ {
+ if (NIL_P(argv[3])) {
+ arg4 = NULL;
+ } else {
+ value4.data = StringValuePtr(argv[3]);
+ value4.len = RSTRING_LEN(argv[3]);
+ arg4 = &value4;
+ }
+ }
+ {
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_set_revision_property(arg1,arg2,(char const *)arg3,(struct svn_string_t const *)arg4);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ return vresult;
+fail:
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns3_invoke_set_node_property(int argc, VALUE *argv, VALUE self) {
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ void *arg2 = (void *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_string_t *arg4 = (svn_string_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ svn_string_t value4 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 4) || (argc > 4)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 4)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns3_t *","svn_repos_parse_fns3_invoke_set_node_property", 1, argv[0] ));
+ }
+ arg1 = (svn_repos_parse_fns3_t *)(argp1);
+ res2 = SWIG_ConvertPtr(argv[1],SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "void *","svn_repos_parse_fns3_invoke_set_node_property", 2, argv[1] ));
+ }
+ res3 = SWIG_AsCharPtrAndSize(argv[2], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","svn_repos_parse_fns3_invoke_set_node_property", 3, argv[2] ));
+ }
+ arg3 = (char *)(buf3);
+ {
+ if (NIL_P(argv[3])) {
+ arg4 = NULL;
+ } else {
+ value4.data = StringValuePtr(argv[3]);
+ value4.len = RSTRING_LEN(argv[3]);
+ arg4 = &value4;
+ }
+ }
+ {
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_set_node_property(arg1,arg2,(char const *)arg3,(struct svn_string_t const *)arg4);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ return vresult;
+fail:
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns3_invoke_delete_node_property(int argc, VALUE *argv, VALUE self) {
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ void *arg2 = (void *) 0 ;
+ char *arg3 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 3) || (argc > 3)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns3_t *","svn_repos_parse_fns3_invoke_delete_node_property", 1, argv[0] ));
+ }
+ arg1 = (svn_repos_parse_fns3_t *)(argp1);
+ res2 = SWIG_ConvertPtr(argv[1],SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "void *","svn_repos_parse_fns3_invoke_delete_node_property", 2, argv[1] ));
+ }
+ res3 = SWIG_AsCharPtrAndSize(argv[2], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","svn_repos_parse_fns3_invoke_delete_node_property", 3, argv[2] ));
+ }
+ arg3 = (char *)(buf3);
+ {
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_delete_node_property(arg1,arg2,(char const *)arg3);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ return vresult;
+fail:
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns3_invoke_remove_node_props(int argc, VALUE *argv, VALUE self) {
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ void *arg2 = (void *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 2) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns3_t *","svn_repos_parse_fns3_invoke_remove_node_props", 1, argv[0] ));
+ }
+ arg1 = (svn_repos_parse_fns3_t *)(argp1);
+ res2 = SWIG_ConvertPtr(argv[1],SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "void *","svn_repos_parse_fns3_invoke_remove_node_props", 2, argv[1] ));
+ }
+ {
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_remove_node_props(arg1,arg2);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns3_invoke_set_fulltext(int argc, VALUE *argv, VALUE self) {
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ svn_stream_t **arg2 = (svn_stream_t **) 0 ;
+ void *arg3 = (void *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_stream_t *temp2 ;
+ int res3 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ arg2 = &temp2;
+ if ((argc < 2) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns3_t *","svn_repos_parse_fns3_invoke_set_fulltext", 1, argv[0] ));
+ }
+ arg1 = (svn_repos_parse_fns3_t *)(argp1);
+ res3 = SWIG_ConvertPtr(argv[1],SWIG_as_voidptrptr(&arg3), 0, 0);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "void *","svn_repos_parse_fns3_invoke_set_fulltext", 3, argv[1] ));
+ }
+ {
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_set_fulltext(arg1,arg2,arg3);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg2, SWIGTYPE_p_svn_stream_t, 0));
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns3_invoke_apply_textdelta(int argc, VALUE *argv, VALUE self) {
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ svn_txdelta_window_handler_t *arg2 = (svn_txdelta_window_handler_t *) 0 ;
+ void **arg3 = (void **) 0 ;
+ void *arg4 = (void *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_txdelta_window_handler_t temp2 ;
+ void *temp3 ;
+ int res4 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ arg2 = &temp2;
+ arg3 = &temp3;
+ if ((argc < 2) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns3_t *","svn_repos_parse_fns3_invoke_apply_textdelta", 1, argv[0] ));
+ }
+ arg1 = (svn_repos_parse_fns3_t *)(argp1);
+ res4 = SWIG_ConvertPtr(argv[1],SWIG_as_voidptrptr(&arg4), 0, 0);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "void *","svn_repos_parse_fns3_invoke_apply_textdelta", 4, argv[1] ));
+ }
+ {
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_apply_textdelta(arg1,arg2,arg3,arg4);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg2, SWIGTYPE_p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t, 0));
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj(*arg3, SWIGTYPE_p_void, 0));
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns3_invoke_close_node(int argc, VALUE *argv, VALUE self) {
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ void *arg2 = (void *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 2) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns3_t *","svn_repos_parse_fns3_invoke_close_node", 1, argv[0] ));
+ }
+ arg1 = (svn_repos_parse_fns3_t *)(argp1);
+ res2 = SWIG_ConvertPtr(argv[1],SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "void *","svn_repos_parse_fns3_invoke_close_node", 2, argv[1] ));
+ }
+ {
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_close_node(arg1,arg2);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_repos_parse_fns3_invoke_close_revision(int argc, VALUE *argv, VALUE self) {
+ svn_repos_parse_fns3_t *arg1 = (svn_repos_parse_fns3_t *) 0 ;
+ void *arg2 = (void *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 2) || (argc > 2)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_repos_parse_fns3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_repos_parse_fns3_t *","svn_repos_parse_fns3_invoke_close_revision", 1, argv[0] ));
+ }
+ arg1 = (svn_repos_parse_fns3_t *)(argp1);
+ res2 = SWIG_ConvertPtr(argv[1],SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "void *","svn_repos_parse_fns3_invoke_close_revision", 2, argv[1] ));
+ }
+ {
+ result = (svn_error_t *)svn_repos_parse_fns3_invoke_close_revision(arg1,arg2);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_repos_parse_fns2_invoke_new_revision_record(int argc, VALUE *argv, VALUE self) {
svn_repos_parse_fns2_t *arg1 = (svn_repos_parse_fns2_t *) 0 ;
void **arg2 = (void **) 0 ;
@@ -14797,6 +17230,72 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_repos_invoke_freeze_func(int argc, VALUE *argv, VALUE self) {
+ svn_repos_freeze_func_t arg1 = (svn_repos_freeze_func_t) 0 ;
+ void *arg2 = (void *) 0 ;
+ apr_pool_t *arg3 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int res2 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg3);
+ _global_pool = arg3;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 2) || (argc > 3)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
+ }
+ {
+ int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg1), SWIGTYPE_p_f_p_void_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_repos_freeze_func_t","svn_repos_invoke_freeze_func", 1, argv[0] ));
+ }
+ }
+ res2 = SWIG_ConvertPtr(argv[1],SWIG_as_voidptrptr(&arg2), 0, 0);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "void *","svn_repos_invoke_freeze_func", 2, argv[1] ));
+ }
+ if (argc > 2) {
+
+ }
+ {
+ result = (svn_error_t *)svn_repos_invoke_freeze_func(arg1,arg2,arg3);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_repos_invoke_history_func(int argc, VALUE *argv, VALUE self) {
svn_repos_history_func_t arg1 = (svn_repos_history_func_t) 0 ;
void *arg2 = (void *) 0 ;
@@ -14877,12 +17376,13 @@ fail:
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
-static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *|svn_rangelist_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_hash_t = {"_p_apr_hash_t", "apr_hash_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int32_t = {"_p_apr_int32_t", "apr_int32_t *|time_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int64_t = {"_p_apr_int64_t", "apr_int64_t *|svn_filesize_t *|apr_time_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_pool_t = {"_p_apr_pool_t", "apr_pool_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_int_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_int_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(int,void *,apr_pool_t *)|svn_error_t *(*)(int,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t", "svn_opt_subcommand_t *|struct svn_error_t *(*)(apr_getopt_t *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_svn_stream_t_p_void__p_svn_error_t = {"_p_f_p_p_svn_stream_t_p_void__p_svn_error_t", "struct svn_error_t *(*)(svn_stream_t **,void *)|svn_error_t *(*)(svn_stream_t **,void *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)|svn_error_t *(*)(void **,apr_hash_t *,void *,apr_pool_t *)", 0, 0, (void*)0, 0};
@@ -14895,6 +17395,7 @@ static swig_type_info _swigt__p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t =
static swig_type_info _swigt__p_f_p_void__p_svn_error_t = {"_p_f_p_void__p_svn_error_t", "svn_cancel_func_t|struct svn_error_t *(*)(void *)|svn_error_t *(*)(void *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,apr_int64_t,svn_fs_pack_notify_action_t,apr_pool_t *)|svn_fs_pack_notify_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,apr_hash_t *,svn_revnum_t,char const *,char const *,char const *,apr_pool_t *)|svn_log_message_receiver_t", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_void_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,apr_pool_t *)|svn_repos_freeze_func_t", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char__p_svn_error_t = {"_p_f_p_void_p_q_const__char__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *)|svn_error_t *(*)(void *,char const *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,svn_string_t const *)|svn_error_t *(*)(void *,char const *,svn_string_t const *)", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t = {"_p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t", "struct svn_error_t *(*)(void *,char const *,svn_revnum_t,apr_hash_t *,svn_txdelta_window_handler_t *,void **,apr_array_header_t *,apr_pool_t *)|svn_repos_file_rev_handler_t", 0, 0, (void*)0, 0};
@@ -14916,6 +17417,7 @@ static swig_type_info _swigt__p_p_svn_dirent_t = {"_p_p_svn_dirent_t", "struct s
static swig_type_info _swigt__p_p_svn_fs_txn_t = {"_p_p_svn_fs_txn_t", "struct svn_fs_txn_t **|svn_fs_txn_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_lock_t = {"_p_p_svn_lock_t", "struct svn_lock_t **|svn_lock_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_repos_parse_fns2_t = {"_p_p_svn_repos_parse_fns2_t", "struct svn_repos_parse_fns2_t **|svn_repos_parse_fns2_t **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_svn_repos_parse_fns3_t = {"_p_p_svn_repos_parse_fns3_t", "struct svn_repos_parse_fns3_t **|svn_repos_parse_fns3_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_repos_parse_fns_t = {"_p_p_svn_repos_parse_fns_t", "struct svn_repos_parse_fns_t **|svn_repos_parser_fns_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_repos_t = {"_p_p_svn_repos_t", "struct svn_repos_t **|svn_repos_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_stream_t = {"_p_p_svn_stream_t", "struct svn_stream_t **|svn_stream_t **", 0, 0, (void*)0, 0};
@@ -14932,6 +17434,9 @@ static swig_type_info _swigt__p_svn_auth_provider_object_t = {"_p_svn_auth_provi
static swig_type_info _swigt__p_svn_auth_provider_t = {"_p_svn_auth_provider_t", "struct svn_auth_provider_t *|svn_auth_provider_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_ssl_server_cert_info_t = {"_p_svn_auth_ssl_server_cert_info_t", "struct svn_auth_ssl_server_cert_info_t *|svn_auth_ssl_server_cert_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_authz_t = {"_p_svn_authz_t", "struct svn_authz_t *|svn_authz_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_ctx_t = {"_p_svn_checksum_ctx_t", "struct svn_checksum_ctx_t *|svn_checksum_ctx_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "enum svn_checksum_kind_t *|svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "struct svn_checksum_t *|svn_checksum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_commit_info_t = {"_p_svn_commit_info_t", "struct svn_commit_info_t *|svn_commit_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_config_t = {"_p_svn_config_t", "struct svn_config_t *|svn_config_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_delta_editor_t = {"_p_svn_delta_editor_t", "struct svn_delta_editor_t *|svn_delta_editor_t *", 0, 0, (void*)0, 0};
@@ -14978,6 +17483,7 @@ static swig_type_info _swigt__p_svn_opt_subcommand_desc2_t = {"_p_svn_opt_subcom
static swig_type_info _swigt__p_svn_opt_subcommand_desc_t = {"_p_svn_opt_subcommand_desc_t", "struct svn_opt_subcommand_desc_t *|svn_opt_subcommand_desc_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_file_t = {"_p_svn_patch_file_t", "struct svn_patch_file_t *|svn_patch_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_t = {"_p_svn_patch_t", "struct svn_patch_t *|svn_patch_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_prop_inherited_item_t = {"_p_svn_prop_inherited_item_t", "struct svn_prop_inherited_item_t *|svn_prop_inherited_item_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_kind = {"_p_svn_prop_kind", "svn_prop_kind_t *|enum svn_prop_kind *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_patch_t = {"_p_svn_prop_patch_t", "struct svn_prop_patch_t *|svn_prop_patch_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_repos_authz_access_t = {"_p_svn_repos_authz_access_t", "enum svn_repos_authz_access_t *|svn_repos_authz_access_t *", 0, 0, (void*)0, 0};
@@ -14986,7 +17492,8 @@ static swig_type_info _swigt__p_svn_repos_notify_action_t = {"_p_svn_repos_notif
static swig_type_info _swigt__p_svn_repos_notify_t = {"_p_svn_repos_notify_t", "struct svn_repos_notify_t *|svn_repos_notify_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_repos_notify_warning_t = {"_p_svn_repos_notify_warning_t", "enum svn_repos_notify_warning_t *|svn_repos_notify_warning_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_repos_parse_fns2_t = {"_p_svn_repos_parse_fns2_t", "struct svn_repos_parse_fns2_t *|svn_repos_parse_fns2_t *|svn_repos_parser_fns2_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_svn_repos_parse_fns_t = {"_p_svn_repos_parse_fns_t", "struct svn_repos_parse_fns_t *|svn_repos_parser_fns_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_repos_parse_fns3_t = {"_p_svn_repos_parse_fns3_t", "struct svn_repos_parse_fns3_t *|svn_repos_parse_fns3_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_repos_parse_fns_t = {"_p_svn_repos_parse_fns_t", "svn_repos_parse_fns_t *|struct svn_repos_parse_fns_t *|svn_repos_parser_fns_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_repos_revision_access_level_t = {"_p_svn_repos_revision_access_level_t", "enum svn_repos_revision_access_level_t *|svn_repos_revision_access_level_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_repos_t = {"_p_svn_repos_t", "struct svn_repos_t *|svn_repos_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_stream_mark_t = {"_p_svn_stream_mark_t", "struct svn_stream_mark_t *|svn_stream_mark_t *", 0, 0, (void*)0, 0};
@@ -14998,6 +17505,9 @@ static swig_type_info _swigt__p_svn_txdelta_op_t = {"_p_svn_txdelta_op_t", "stru
static swig_type_info _swigt__p_svn_txdelta_stream_t = {"_p_svn_txdelta_stream_t", "struct svn_txdelta_stream_t *|svn_txdelta_stream_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_txdelta_window_t = {"_p_svn_txdelta_window_t", "struct svn_txdelta_window_t *|svn_txdelta_window_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_checklist_t = {"_p_svn_version_checklist_t", "struct svn_version_checklist_t *|svn_version_checklist_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_linked_lib_t = {"_p_svn_version_ext_linked_lib_t", "struct svn_version_ext_linked_lib_t *|svn_version_ext_linked_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_loaded_lib_t = {"_p_svn_version_ext_loaded_lib_t", "struct svn_version_ext_loaded_lib_t *|svn_version_ext_loaded_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_extended_t = {"_p_svn_version_extended_t", "struct svn_version_extended_t *|svn_version_extended_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_t = {"_p_svn_version_t", "struct svn_version_t *|svn_version_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_long = {"_p_unsigned_long", "unsigned long *|svn_linenum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_void = {"_p_void", "void *", 0, 0, (void*)0, 0};
@@ -15009,6 +17519,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_apr_int64_t,
&_swigt__p_apr_pool_t,
&_swigt__p_char,
+ &_swigt__p_f_int_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_p_svn_stream_t_p_void__p_svn_error_t,
&_swigt__p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t,
@@ -15021,6 +17532,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_f_p_void__p_svn_error_t,
&_swigt__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
+ &_swigt__p_f_p_void_p_apr_pool_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t,
&_swigt__p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t,
@@ -15042,6 +17554,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_p_svn_fs_txn_t,
&_swigt__p_p_svn_lock_t,
&_swigt__p_p_svn_repos_parse_fns2_t,
+ &_swigt__p_p_svn_repos_parse_fns3_t,
&_swigt__p_p_svn_repos_parse_fns_t,
&_swigt__p_p_svn_repos_t,
&_swigt__p_p_svn_stream_t,
@@ -15058,6 +17571,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_auth_provider_t,
&_swigt__p_svn_auth_ssl_server_cert_info_t,
&_swigt__p_svn_authz_t,
+ &_swigt__p_svn_checksum_ctx_t,
+ &_swigt__p_svn_checksum_kind_t,
+ &_swigt__p_svn_checksum_t,
&_swigt__p_svn_commit_info_t,
&_swigt__p_svn_config_t,
&_swigt__p_svn_delta_editor_t,
@@ -15104,6 +17620,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_opt_subcommand_desc_t,
&_swigt__p_svn_patch_file_t,
&_swigt__p_svn_patch_t,
+ &_swigt__p_svn_prop_inherited_item_t,
&_swigt__p_svn_prop_kind,
&_swigt__p_svn_prop_patch_t,
&_swigt__p_svn_repos_authz_access_t,
@@ -15112,6 +17629,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_repos_notify_t,
&_swigt__p_svn_repos_notify_warning_t,
&_swigt__p_svn_repos_parse_fns2_t,
+ &_swigt__p_svn_repos_parse_fns3_t,
&_swigt__p_svn_repos_parse_fns_t,
&_swigt__p_svn_repos_revision_access_level_t,
&_swigt__p_svn_repos_t,
@@ -15124,6 +17642,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_txdelta_stream_t,
&_swigt__p_svn_txdelta_window_t,
&_swigt__p_svn_version_checklist_t,
+ &_swigt__p_svn_version_ext_linked_lib_t,
+ &_swigt__p_svn_version_ext_loaded_lib_t,
+ &_swigt__p_svn_version_extended_t,
&_swigt__p_svn_version_t,
&_swigt__p_unsigned_long,
&_swigt__p_void,
@@ -15135,6 +17656,7 @@ static swig_cast_info _swigc__p_apr_int32_t[] = { {&_swigt__p_apr_int32_t, 0, 0
static swig_cast_info _swigc__p_apr_int64_t[] = { {&_swigt__p_apr_int64_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_apr_pool_t[] = { {&_swigt__p_apr_pool_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_int_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_int_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_svn_stream_t_p_void__p_svn_error_t[] = { {&_swigt__p_f_p_p_svn_stream_t_p_void__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -15147,6 +17669,7 @@ static swig_cast_info _swigc__p_f_p_svn_txdelta_window_t_p_void__p_svn_error_t[]
static swig_cast_info _swigc__p_f_p_void__p_svn_error_t[] = { {&_swigt__p_f_p_void__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_void_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t[] = { {&_swigt__p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -15168,6 +17691,7 @@ static swig_cast_info _swigc__p_p_svn_dirent_t[] = { {&_swigt__p_p_svn_dirent_t
static swig_cast_info _swigc__p_p_svn_fs_txn_t[] = { {&_swigt__p_p_svn_fs_txn_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_lock_t[] = { {&_swigt__p_p_svn_lock_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_repos_parse_fns2_t[] = { {&_swigt__p_p_svn_repos_parse_fns2_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_svn_repos_parse_fns3_t[] = { {&_swigt__p_p_svn_repos_parse_fns3_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_repos_parse_fns_t[] = { {&_swigt__p_p_svn_repos_parse_fns_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_repos_t[] = { {&_swigt__p_p_svn_repos_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_svn_stream_t[] = { {&_swigt__p_p_svn_stream_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -15184,6 +17708,9 @@ static swig_cast_info _swigc__p_svn_auth_provider_object_t[] = { {&_swigt__p_sv
static swig_cast_info _swigc__p_svn_auth_provider_t[] = { {&_swigt__p_svn_auth_provider_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_ssl_server_cert_info_t[] = { {&_swigt__p_svn_auth_ssl_server_cert_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_authz_t[] = { {&_swigt__p_svn_authz_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_ctx_t[] = { {&_swigt__p_svn_checksum_ctx_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_kind_t[] = { {&_swigt__p_svn_checksum_kind_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_t[] = { {&_swigt__p_svn_checksum_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_commit_info_t[] = { {&_swigt__p_svn_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_config_t[] = { {&_swigt__p_svn_config_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_delta_editor_t[] = { {&_swigt__p_svn_delta_editor_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -15230,6 +17757,7 @@ static swig_cast_info _swigc__p_svn_opt_subcommand_desc2_t[] = { {&_swigt__p_sv
static swig_cast_info _swigc__p_svn_opt_subcommand_desc_t[] = { {&_swigt__p_svn_opt_subcommand_desc_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_file_t[] = { {&_swigt__p_svn_patch_file_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_t[] = { {&_swigt__p_svn_patch_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_prop_inherited_item_t[] = { {&_swigt__p_svn_prop_inherited_item_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_kind[] = { {&_swigt__p_svn_prop_kind, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_patch_t[] = { {&_swigt__p_svn_prop_patch_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_repos_authz_access_t[] = { {&_swigt__p_svn_repos_authz_access_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -15238,6 +17766,7 @@ static swig_cast_info _swigc__p_svn_repos_notify_action_t[] = { {&_swigt__p_svn
static swig_cast_info _swigc__p_svn_repos_notify_t[] = { {&_swigt__p_svn_repos_notify_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_repos_notify_warning_t[] = { {&_swigt__p_svn_repos_notify_warning_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_repos_parse_fns2_t[] = { {&_swigt__p_svn_repos_parse_fns2_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_repos_parse_fns3_t[] = { {&_swigt__p_svn_repos_parse_fns3_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_repos_parse_fns_t[] = { {&_swigt__p_svn_repos_parse_fns_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_repos_revision_access_level_t[] = { {&_swigt__p_svn_repos_revision_access_level_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_repos_t[] = { {&_swigt__p_svn_repos_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -15250,6 +17779,9 @@ static swig_cast_info _swigc__p_svn_txdelta_op_t[] = { {&_swigt__p_svn_txdelta_
static swig_cast_info _swigc__p_svn_txdelta_stream_t[] = { {&_swigt__p_svn_txdelta_stream_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_txdelta_window_t[] = { {&_swigt__p_svn_txdelta_window_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_checklist_t[] = { {&_swigt__p_svn_version_checklist_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_linked_lib_t[] = { {&_swigt__p_svn_version_ext_linked_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_loaded_lib_t[] = { {&_swigt__p_svn_version_ext_loaded_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_extended_t[] = { {&_swigt__p_svn_version_extended_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_t[] = { {&_swigt__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_long[] = { {&_swigt__p_unsigned_long, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_void[] = { {&_swigt__p_void, 0, 0, 0},{0, 0, 0, 0}};
@@ -15261,6 +17793,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_apr_int64_t,
_swigc__p_apr_pool_t,
_swigc__p_char,
+ _swigc__p_f_int_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_apr_getopt_t_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_p_svn_stream_t_p_void__p_svn_error_t,
_swigc__p_f_p_p_void_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t,
@@ -15273,6 +17806,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_f_p_void__p_svn_error_t,
_swigc__p_f_p_void_apr_int64_t_svn_fs_pack_notify_action_t_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_apr_hash_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_pool_t__p_svn_error_t,
+ _swigc__p_f_p_void_p_apr_pool_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_p_q_const__svn_string_t__p_svn_error_t,
_swigc__p_f_p_void_p_q_const__char_svn_revnum_t_p_apr_hash_t_p_svn_txdelta_window_handler_t_p_p_void_p_apr_array_header_t_p_apr_pool_t__p_svn_error_t,
@@ -15294,6 +17828,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_p_svn_fs_txn_t,
_swigc__p_p_svn_lock_t,
_swigc__p_p_svn_repos_parse_fns2_t,
+ _swigc__p_p_svn_repos_parse_fns3_t,
_swigc__p_p_svn_repos_parse_fns_t,
_swigc__p_p_svn_repos_t,
_swigc__p_p_svn_stream_t,
@@ -15310,6 +17845,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_auth_provider_t,
_swigc__p_svn_auth_ssl_server_cert_info_t,
_swigc__p_svn_authz_t,
+ _swigc__p_svn_checksum_ctx_t,
+ _swigc__p_svn_checksum_kind_t,
+ _swigc__p_svn_checksum_t,
_swigc__p_svn_commit_info_t,
_swigc__p_svn_config_t,
_swigc__p_svn_delta_editor_t,
@@ -15356,6 +17894,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_opt_subcommand_desc_t,
_swigc__p_svn_patch_file_t,
_swigc__p_svn_patch_t,
+ _swigc__p_svn_prop_inherited_item_t,
_swigc__p_svn_prop_kind,
_swigc__p_svn_prop_patch_t,
_swigc__p_svn_repos_authz_access_t,
@@ -15364,6 +17903,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_repos_notify_t,
_swigc__p_svn_repos_notify_warning_t,
_swigc__p_svn_repos_parse_fns2_t,
+ _swigc__p_svn_repos_parse_fns3_t,
_swigc__p_svn_repos_parse_fns_t,
_swigc__p_svn_repos_revision_access_level_t,
_swigc__p_svn_repos_t,
@@ -15376,6 +17916,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_txdelta_stream_t,
_swigc__p_svn_txdelta_window_t,
_swigc__p_svn_version_checklist_t,
+ _swigc__p_svn_version_ext_linked_lib_t,
+ _swigc__p_svn_version_ext_loaded_lib_t,
+ _swigc__p_svn_version_extended_t,
_swigc__p_svn_version_t,
_swigc__p_unsigned_long,
_swigc__p_void,
@@ -15443,8 +17986,6 @@ SWIG_InitializeModule(void *clientdata) {
swig_module_info *module_head, *iter;
int found, init;
- clientdata = clientdata;
-
/* check to see if the circular list has been setup, if not, set it up */
if (swig_module.next==0) {
/* Initialize the swig_module */
@@ -15676,6 +18217,8 @@ SWIGEXPORT void Init_repos(void) {
rb_define_const(mRepos, "Svn_repos_notify_mutex_acquired", SWIG_From_int((int)(svn_repos_notify_mutex_acquired)));
rb_define_const(mRepos, "Svn_repos_notify_recover_start", SWIG_From_int((int)(svn_repos_notify_recover_start)));
rb_define_const(mRepos, "Svn_repos_notify_upgrade_start", SWIG_From_int((int)(svn_repos_notify_upgrade_start)));
+ rb_define_const(mRepos, "Svn_repos_notify_load_skipped_rev", SWIG_From_int((int)(svn_repos_notify_load_skipped_rev)));
+ rb_define_const(mRepos, "Svn_repos_notify_verify_rev_structure", SWIG_From_int((int)(svn_repos_notify_verify_rev_structure)));
rb_define_const(mRepos, "Svn_repos_notify_warning_found_old_reference", SWIG_From_int((int)(svn_repos_notify_warning_found_old_reference)));
rb_define_const(mRepos, "Svn_repos_notify_warning_found_old_mergeinfo", SWIG_From_int((int)(svn_repos_notify_warning_found_old_mergeinfo)));
rb_define_const(mRepos, "Svn_repos_notify_warning_invalid_fspath", SWIG_From_int((int)(svn_repos_notify_warning_invalid_fspath)));
@@ -15713,6 +18256,7 @@ SWIGEXPORT void Init_repos(void) {
rb_define_module_function(mRepos, "svn_repos_delete", _wrap_svn_repos_delete, -1);
rb_define_module_function(mRepos, "svn_repos_has_capability", _wrap_svn_repos_has_capability, -1);
rb_define_const(mRepos, "SVN_REPOS_CAPABILITY_MERGEINFO", SWIG_FromCharPtr("mergeinfo"));
+ rb_define_module_function(mRepos, "svn_repos_hotcopy2", _wrap_svn_repos_hotcopy2, -1);
rb_define_module_function(mRepos, "svn_repos_hotcopy", _wrap_svn_repos_hotcopy, -1);
rb_define_module_function(mRepos, "svn_repos_fs_pack2", _wrap_svn_repos_fs_pack2, -1);
rb_define_module_function(mRepos, "svn_repos_fs_pack", _wrap_svn_repos_fs_pack, -1);
@@ -15720,6 +18264,7 @@ SWIGEXPORT void Init_repos(void) {
rb_define_module_function(mRepos, "svn_repos_recover3", _wrap_svn_repos_recover3, -1);
rb_define_module_function(mRepos, "svn_repos_recover2", _wrap_svn_repos_recover2, -1);
rb_define_module_function(mRepos, "svn_repos_recover", _wrap_svn_repos_recover, -1);
+ rb_define_module_function(mRepos, "svn_repos_freeze", _wrap_svn_repos_freeze, -1);
rb_define_module_function(mRepos, "svn_repos_db_logfiles", _wrap_svn_repos_db_logfiles, -1);
rb_define_module_function(mRepos, "svn_repos_path", _wrap_svn_repos_path, -1);
rb_define_module_function(mRepos, "svn_repos_db_env", _wrap_svn_repos_db_env, -1);
@@ -15738,6 +18283,8 @@ SWIGEXPORT void Init_repos(void) {
rb_define_module_function(mRepos, "svn_repos_post_lock_hook", _wrap_svn_repos_post_lock_hook, -1);
rb_define_module_function(mRepos, "svn_repos_pre_unlock_hook", _wrap_svn_repos_pre_unlock_hook, -1);
rb_define_module_function(mRepos, "svn_repos_post_unlock_hook", _wrap_svn_repos_post_unlock_hook, -1);
+ rb_define_module_function(mRepos, "svn_repos_hooks_setenv", _wrap_svn_repos_hooks_setenv, -1);
+ rb_define_module_function(mRepos, "svn_repos_begin_report3", _wrap_svn_repos_begin_report3, -1);
rb_define_module_function(mRepos, "svn_repos_begin_report2", _wrap_svn_repos_begin_report2, -1);
rb_define_module_function(mRepos, "svn_repos_begin_report", _wrap_svn_repos_begin_report, -1);
rb_define_module_function(mRepos, "svn_repos_set_path3", _wrap_svn_repos_set_path3, -1);
@@ -15820,6 +18367,7 @@ SWIGEXPORT void Init_repos(void) {
rb_define_module_function(mRepos, "svn_repos_node_from_baton", _wrap_svn_repos_node_from_baton, -1);
rb_define_const(mRepos, "SVN_REPOS_DUMPFILE_MAGIC_HEADER", SWIG_FromCharPtr("SVN-fs-dump-format-version"));
rb_define_const(mRepos, "SVN_REPOS_DUMPFILE_FORMAT_VERSION", SWIG_From_int((int)(3)));
+ rb_define_const(mRepos, "SVN_REPOS_DUMPFILE_FORMAT_VERSION_DELTAS", SWIG_From_int((int)(3)));
rb_define_const(mRepos, "SVN_REPOS_DUMPFILE_UUID", SWIG_FromCharPtr("UUID"));
rb_define_const(mRepos, "SVN_REPOS_DUMPFILE_CONTENT_LENGTH", SWIG_FromCharPtr("Content-length"));
rb_define_const(mRepos, "SVN_REPOS_DUMPFILE_REVISION_NUMBER", SWIG_FromCharPtr("Revision-number"));
@@ -15845,10 +18393,43 @@ SWIGEXPORT void Init_repos(void) {
rb_define_module_function(mRepos, "svn_repos_verify_fs", _wrap_svn_repos_verify_fs, -1);
rb_define_module_function(mRepos, "svn_repos_dump_fs3", _wrap_svn_repos_dump_fs3, -1);
rb_define_module_function(mRepos, "svn_repos_dump_fs", _wrap_svn_repos_dump_fs, -1);
+ rb_define_module_function(mRepos, "svn_repos_load_fs4", _wrap_svn_repos_load_fs4, -1);
rb_define_module_function(mRepos, "svn_repos_load_fs3", _wrap_svn_repos_load_fs3, -1);
rb_define_module_function(mRepos, "svn_repos_load_fs2", _wrap_svn_repos_load_fs2, -1);
rb_define_module_function(mRepos, "svn_repos_load_fs", _wrap_svn_repos_load_fs, -1);
+ SwigClassSvn_repos_parse_fns3_t.klass = rb_define_class_under(mRepos, "Svn_repos_parse_fns3_t", rb_cObject);
+ SWIG_TypeClientData(SWIGTYPE_p_svn_repos_parse_fns3_t, (void *) &SwigClassSvn_repos_parse_fns3_t);
+ rb_undef_alloc_func(SwigClassSvn_repos_parse_fns3_t.klass);
+ rb_define_method(SwigClassSvn_repos_parse_fns3_t.klass, "magic_header_record=", _wrap_svn_repos_parse_fns3_t_magic_header_record_set, -1);
+ rb_define_method(SwigClassSvn_repos_parse_fns3_t.klass, "magic_header_record", _wrap_svn_repos_parse_fns3_t_magic_header_record_get, -1);
+ rb_define_method(SwigClassSvn_repos_parse_fns3_t.klass, "uuid_record=", _wrap_svn_repos_parse_fns3_t_uuid_record_set, -1);
+ rb_define_method(SwigClassSvn_repos_parse_fns3_t.klass, "uuid_record", _wrap_svn_repos_parse_fns3_t_uuid_record_get, -1);
+ rb_define_method(SwigClassSvn_repos_parse_fns3_t.klass, "new_revision_record=", _wrap_svn_repos_parse_fns3_t_new_revision_record_set, -1);
+ rb_define_method(SwigClassSvn_repos_parse_fns3_t.klass, "new_revision_record", _wrap_svn_repos_parse_fns3_t_new_revision_record_get, -1);
+ rb_define_method(SwigClassSvn_repos_parse_fns3_t.klass, "new_node_record=", _wrap_svn_repos_parse_fns3_t_new_node_record_set, -1);
+ rb_define_method(SwigClassSvn_repos_parse_fns3_t.klass, "new_node_record", _wrap_svn_repos_parse_fns3_t_new_node_record_get, -1);
+ rb_define_method(SwigClassSvn_repos_parse_fns3_t.klass, "set_revision_property=", _wrap_svn_repos_parse_fns3_t_set_revision_property_set, -1);
+ rb_define_method(SwigClassSvn_repos_parse_fns3_t.klass, "set_revision_property", _wrap_svn_repos_parse_fns3_t_set_revision_property_get, -1);
+ rb_define_method(SwigClassSvn_repos_parse_fns3_t.klass, "set_node_property=", _wrap_svn_repos_parse_fns3_t_set_node_property_set, -1);
+ rb_define_method(SwigClassSvn_repos_parse_fns3_t.klass, "set_node_property", _wrap_svn_repos_parse_fns3_t_set_node_property_get, -1);
+ rb_define_method(SwigClassSvn_repos_parse_fns3_t.klass, "delete_node_property=", _wrap_svn_repos_parse_fns3_t_delete_node_property_set, -1);
+ rb_define_method(SwigClassSvn_repos_parse_fns3_t.klass, "delete_node_property", _wrap_svn_repos_parse_fns3_t_delete_node_property_get, -1);
+ rb_define_method(SwigClassSvn_repos_parse_fns3_t.klass, "remove_node_props=", _wrap_svn_repos_parse_fns3_t_remove_node_props_set, -1);
+ rb_define_method(SwigClassSvn_repos_parse_fns3_t.klass, "remove_node_props", _wrap_svn_repos_parse_fns3_t_remove_node_props_get, -1);
+ rb_define_method(SwigClassSvn_repos_parse_fns3_t.klass, "set_fulltext=", _wrap_svn_repos_parse_fns3_t_set_fulltext_set, -1);
+ rb_define_method(SwigClassSvn_repos_parse_fns3_t.klass, "set_fulltext", _wrap_svn_repos_parse_fns3_t_set_fulltext_get, -1);
+ rb_define_method(SwigClassSvn_repos_parse_fns3_t.klass, "apply_textdelta=", _wrap_svn_repos_parse_fns3_t_apply_textdelta_set, -1);
+ rb_define_method(SwigClassSvn_repos_parse_fns3_t.klass, "apply_textdelta", _wrap_svn_repos_parse_fns3_t_apply_textdelta_get, -1);
+ rb_define_method(SwigClassSvn_repos_parse_fns3_t.klass, "close_node=", _wrap_svn_repos_parse_fns3_t_close_node_set, -1);
+ rb_define_method(SwigClassSvn_repos_parse_fns3_t.klass, "close_node", _wrap_svn_repos_parse_fns3_t_close_node_get, -1);
+ rb_define_method(SwigClassSvn_repos_parse_fns3_t.klass, "close_revision=", _wrap_svn_repos_parse_fns3_t_close_revision_set, -1);
+ rb_define_method(SwigClassSvn_repos_parse_fns3_t.klass, "close_revision", _wrap_svn_repos_parse_fns3_t_close_revision_get, -1);
+ SwigClassSvn_repos_parse_fns3_t.mark = 0;
+ SwigClassSvn_repos_parse_fns3_t.trackObjects = 0;
+ rb_define_module_function(mRepos, "svn_repos_parse_dumpstream3", _wrap_svn_repos_parse_dumpstream3, -1);
+ rb_define_module_function(mRepos, "svn_repos_get_fs_build_parser4", _wrap_svn_repos_get_fs_build_parser4, -1);
+
SwigClassSvn_repos_parse_fns2_t.klass = rb_define_class_under(mRepos, "Svn_repos_parse_fns2_t", rb_cObject);
SWIG_TypeClientData(SWIGTYPE_p_svn_repos_parse_fns2_t, (void *) &SwigClassSvn_repos_parse_fns2_t);
rb_undef_alloc_func(SwigClassSvn_repos_parse_fns2_t.klass);
@@ -15876,9 +18457,6 @@ SWIGEXPORT void Init_repos(void) {
rb_define_method(SwigClassSvn_repos_parse_fns2_t.klass, "close_revision", _wrap_svn_repos_parse_fns2_t_close_revision_get, -1);
SwigClassSvn_repos_parse_fns2_t.mark = 0;
SwigClassSvn_repos_parse_fns2_t.trackObjects = 0;
- rb_define_module_function(mRepos, "svn_repos_parse_dumpstream2", _wrap_svn_repos_parse_dumpstream2, -1);
- rb_define_module_function(mRepos, "svn_repos_get_fs_build_parser3", _wrap_svn_repos_get_fs_build_parser3, -1);
- rb_define_module_function(mRepos, "svn_repos_get_fs_build_parser2", _wrap_svn_repos_get_fs_build_parser2, -1);
SwigClassSvn_repos_parser_fns_t.klass = rb_define_class_under(mRepos, "Svn_repos_parser_fns_t", rb_cObject);
SWIG_TypeClientData(SWIGTYPE_p_svn_repos_parse_fns_t, (void *) &SwigClassSvn_repos_parser_fns_t);
@@ -15903,15 +18481,33 @@ SWIGEXPORT void Init_repos(void) {
rb_define_method(SwigClassSvn_repos_parser_fns_t.klass, "close_revision", _wrap_svn_repos_parser_fns_t_close_revision_get, -1);
SwigClassSvn_repos_parser_fns_t.mark = 0;
SwigClassSvn_repos_parser_fns_t.trackObjects = 0;
+ rb_define_module_function(mRepos, "svn_repos_parse_dumpstream2", _wrap_svn_repos_parse_dumpstream2, -1);
rb_define_module_function(mRepos, "svn_repos_parse_dumpstream", _wrap_svn_repos_parse_dumpstream, -1);
+ rb_define_module_function(mRepos, "svn_repos_get_fs_build_parser3", _wrap_svn_repos_get_fs_build_parser3, -1);
+ rb_define_module_function(mRepos, "svn_repos_get_fs_build_parser2", _wrap_svn_repos_get_fs_build_parser2, -1);
rb_define_module_function(mRepos, "svn_repos_get_fs_build_parser", _wrap_svn_repos_get_fs_build_parser, -1);
+ rb_define_module_function(mRepos, "svn_repos_authz_read2", _wrap_svn_repos_authz_read2, -1);
rb_define_module_function(mRepos, "svn_repos_authz_read", _wrap_svn_repos_authz_read, -1);
+ rb_define_module_function(mRepos, "svn_repos_authz_parse", _wrap_svn_repos_authz_parse, -1);
rb_define_module_function(mRepos, "svn_repos_authz_check_access", _wrap_svn_repos_authz_check_access, -1);
rb_define_const(mRepos, "Svn_repos_revision_access_none", SWIG_From_int((int)(svn_repos_revision_access_none)));
rb_define_const(mRepos, "Svn_repos_revision_access_partial", SWIG_From_int((int)(svn_repos_revision_access_partial)));
rb_define_const(mRepos, "Svn_repos_revision_access_full", SWIG_From_int((int)(svn_repos_revision_access_full)));
rb_define_module_function(mRepos, "svn_repos_check_revision_access", _wrap_svn_repos_check_revision_access, -1);
+ rb_define_module_function(mRepos, "svn_repos_fs_get_inherited_props", _wrap_svn_repos_fs_get_inherited_props, -1);
rb_define_module_function(mRepos, "svn_repos_remember_client_capabilities", _wrap_svn_repos_remember_client_capabilities, -1);
+ rb_define_module_function(mRepos, "svn_repos_parse_fns3_invoke_magic_header_record", _wrap_svn_repos_parse_fns3_invoke_magic_header_record, -1);
+ rb_define_module_function(mRepos, "svn_repos_parse_fns3_invoke_uuid_record", _wrap_svn_repos_parse_fns3_invoke_uuid_record, -1);
+ rb_define_module_function(mRepos, "svn_repos_parse_fns3_invoke_new_revision_record", _wrap_svn_repos_parse_fns3_invoke_new_revision_record, -1);
+ rb_define_module_function(mRepos, "svn_repos_parse_fns3_invoke_new_node_record", _wrap_svn_repos_parse_fns3_invoke_new_node_record, -1);
+ rb_define_module_function(mRepos, "svn_repos_parse_fns3_invoke_set_revision_property", _wrap_svn_repos_parse_fns3_invoke_set_revision_property, -1);
+ rb_define_module_function(mRepos, "svn_repos_parse_fns3_invoke_set_node_property", _wrap_svn_repos_parse_fns3_invoke_set_node_property, -1);
+ rb_define_module_function(mRepos, "svn_repos_parse_fns3_invoke_delete_node_property", _wrap_svn_repos_parse_fns3_invoke_delete_node_property, -1);
+ rb_define_module_function(mRepos, "svn_repos_parse_fns3_invoke_remove_node_props", _wrap_svn_repos_parse_fns3_invoke_remove_node_props, -1);
+ rb_define_module_function(mRepos, "svn_repos_parse_fns3_invoke_set_fulltext", _wrap_svn_repos_parse_fns3_invoke_set_fulltext, -1);
+ rb_define_module_function(mRepos, "svn_repos_parse_fns3_invoke_apply_textdelta", _wrap_svn_repos_parse_fns3_invoke_apply_textdelta, -1);
+ rb_define_module_function(mRepos, "svn_repos_parse_fns3_invoke_close_node", _wrap_svn_repos_parse_fns3_invoke_close_node, -1);
+ rb_define_module_function(mRepos, "svn_repos_parse_fns3_invoke_close_revision", _wrap_svn_repos_parse_fns3_invoke_close_revision, -1);
rb_define_module_function(mRepos, "svn_repos_parse_fns2_invoke_new_revision_record", _wrap_svn_repos_parse_fns2_invoke_new_revision_record, -1);
rb_define_module_function(mRepos, "svn_repos_parse_fns2_invoke_uuid_record", _wrap_svn_repos_parse_fns2_invoke_uuid_record, -1);
rb_define_module_function(mRepos, "svn_repos_parse_fns2_invoke_new_node_record", _wrap_svn_repos_parse_fns2_invoke_new_node_record, -1);
@@ -15927,6 +18523,7 @@ SWIGEXPORT void Init_repos(void) {
rb_define_module_function(mRepos, "svn_repos_invoke_authz_callback", _wrap_svn_repos_invoke_authz_callback, -1);
rb_define_module_function(mRepos, "svn_repos_invoke_file_rev_handler", _wrap_svn_repos_invoke_file_rev_handler, -1);
rb_define_module_function(mRepos, "svn_repos_invoke_notify_func", _wrap_svn_repos_invoke_notify_func, -1);
+ rb_define_module_function(mRepos, "svn_repos_invoke_freeze_func", _wrap_svn_repos_invoke_freeze_func, -1);
rb_define_module_function(mRepos, "svn_repos_invoke_history_func", _wrap_svn_repos_invoke_history_func, -1);
{
diff --git a/subversion/bindings/swig/ruby/svn_wc.c b/subversion/bindings/swig/ruby/svn_wc.c
index d5aacdd..beb2ad8 100644
--- a/subversion/bindings/swig/ruby/svn_wc.c
+++ b/subversion/bindings/swig/ruby/svn_wc.c
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 2.0.9
*
* This file is not intended to be easily readable and contains a number of
* coding conventions designed to improve portability and efficiency. Do not make
@@ -1374,7 +1374,7 @@ SWIG_Ruby_AppendOutput(VALUE target, VALUE o) {
/* Runtime API */
-#define SWIG_GetModule(clientdata) SWIG_Ruby_GetModule()
+#define SWIG_GetModule(clientdata) SWIG_Ruby_GetModule(clientdata)
#define SWIG_SetModule(clientdata, pointer) SWIG_Ruby_SetModule(pointer)
@@ -1528,7 +1528,7 @@ SWIG_Ruby_NewPointerObj(void *ptr, swig_type_info *type, int flags)
downcast methods. */
if (obj != Qnil) {
VALUE value = rb_iv_get(obj, "@__swigtype__");
- char* type_name = RSTRING_PTR(value);
+ const char* type_name = RSTRING_PTR(value);
if (strcmp(type->name, type_name) == 0) {
return obj;
@@ -1710,7 +1710,7 @@ SWIG_Ruby_ConvertPacked(VALUE obj, void *ptr, int sz, swig_type_info *ty) {
}
SWIGRUNTIME swig_module_info *
-SWIG_Ruby_GetModule(void)
+SWIG_Ruby_GetModule(void *SWIGUNUSEDPARM(clientdata))
{
VALUE pointer;
swig_module_info *ret = 0;
@@ -1873,99 +1873,105 @@ int SWIG_Ruby_arity( VALUE proc, int minimal )
#define SWIGTYPE_p_svn_auth_provider_object_t swig_types[78]
#define SWIGTYPE_p_svn_auth_provider_t swig_types[79]
#define SWIGTYPE_p_svn_auth_ssl_server_cert_info_t swig_types[80]
-#define SWIGTYPE_p_svn_checksum_t swig_types[81]
-#define SWIGTYPE_p_svn_commit_info_t swig_types[82]
-#define SWIGTYPE_p_svn_config_t swig_types[83]
-#define SWIGTYPE_p_svn_delta_editor_t swig_types[84]
-#define SWIGTYPE_p_svn_depth_t swig_types[85]
-#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[86]
-#define SWIGTYPE_p_svn_diff_datasource_e swig_types[87]
-#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[88]
-#define SWIGTYPE_p_svn_diff_file_options_t swig_types[89]
-#define SWIGTYPE_p_svn_diff_fns2_t swig_types[90]
-#define SWIGTYPE_p_svn_diff_fns_t swig_types[91]
-#define SWIGTYPE_p_svn_diff_hunk_t swig_types[92]
-#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[93]
-#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[94]
-#define SWIGTYPE_p_svn_diff_t swig_types[95]
-#define SWIGTYPE_p_svn_dirent_t swig_types[96]
-#define SWIGTYPE_p_svn_errno_t swig_types[97]
-#define SWIGTYPE_p_svn_error_t swig_types[98]
-#define SWIGTYPE_p_svn_io_dirent2_t swig_types[99]
-#define SWIGTYPE_p_svn_io_dirent_t swig_types[100]
-#define SWIGTYPE_p_svn_io_file_del_t swig_types[101]
-#define SWIGTYPE_p_svn_location_segment_t swig_types[102]
-#define SWIGTYPE_p_svn_lock_t swig_types[103]
-#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[104]
-#define SWIGTYPE_p_svn_log_changed_path_t swig_types[105]
-#define SWIGTYPE_p_svn_log_entry_t swig_types[106]
-#define SWIGTYPE_p_svn_merge_range_t swig_types[107]
-#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[108]
-#define SWIGTYPE_p_svn_node_kind_t swig_types[109]
-#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[110]
-#define SWIGTYPE_p_svn_opt_revision_t swig_types[111]
-#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[112]
-#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[113]
-#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[114]
-#define SWIGTYPE_p_svn_patch_file_t swig_types[115]
-#define SWIGTYPE_p_svn_patch_t swig_types[116]
-#define SWIGTYPE_p_svn_prop_kind swig_types[117]
-#define SWIGTYPE_p_svn_prop_patch_t swig_types[118]
-#define SWIGTYPE_p_svn_ra_callbacks2_t swig_types[119]
-#define SWIGTYPE_p_svn_ra_callbacks_t swig_types[120]
-#define SWIGTYPE_p_svn_ra_plugin_t swig_types[121]
-#define SWIGTYPE_p_svn_ra_reporter2_t swig_types[122]
-#define SWIGTYPE_p_svn_ra_reporter3_t swig_types[123]
-#define SWIGTYPE_p_svn_ra_reporter_t swig_types[124]
-#define SWIGTYPE_p_svn_ra_session_t swig_types[125]
-#define SWIGTYPE_p_svn_stream_mark_t swig_types[126]
-#define SWIGTYPE_p_svn_stream_t swig_types[127]
-#define SWIGTYPE_p_svn_string_t swig_types[128]
-#define SWIGTYPE_p_svn_stringbuf_t swig_types[129]
-#define SWIGTYPE_p_svn_tristate_t swig_types[130]
-#define SWIGTYPE_p_svn_txdelta_op_t swig_types[131]
-#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[132]
-#define SWIGTYPE_p_svn_txdelta_window_t swig_types[133]
-#define SWIGTYPE_p_svn_version_checklist_t swig_types[134]
-#define SWIGTYPE_p_svn_version_t swig_types[135]
-#define SWIGTYPE_p_svn_wc_adm_access_t swig_types[136]
-#define SWIGTYPE_p_svn_wc_committed_queue_t swig_types[137]
-#define SWIGTYPE_p_svn_wc_conflict_action_t swig_types[138]
-#define SWIGTYPE_p_svn_wc_conflict_choice_t swig_types[139]
-#define SWIGTYPE_p_svn_wc_conflict_description2_t swig_types[140]
-#define SWIGTYPE_p_svn_wc_conflict_description_t swig_types[141]
-#define SWIGTYPE_p_svn_wc_conflict_kind_t swig_types[142]
-#define SWIGTYPE_p_svn_wc_conflict_reason_t swig_types[143]
-#define SWIGTYPE_p_svn_wc_conflict_result_t swig_types[144]
-#define SWIGTYPE_p_svn_wc_conflict_version_t swig_types[145]
-#define SWIGTYPE_p_svn_wc_context_t swig_types[146]
-#define SWIGTYPE_p_svn_wc_diff_callbacks2_t swig_types[147]
-#define SWIGTYPE_p_svn_wc_diff_callbacks3_t swig_types[148]
-#define SWIGTYPE_p_svn_wc_diff_callbacks4_t swig_types[149]
-#define SWIGTYPE_p_svn_wc_diff_callbacks_t swig_types[150]
-#define SWIGTYPE_p_svn_wc_entry_callbacks2_t swig_types[151]
-#define SWIGTYPE_p_svn_wc_entry_callbacks_t swig_types[152]
-#define SWIGTYPE_p_svn_wc_entry_t swig_types[153]
-#define SWIGTYPE_p_svn_wc_external_item2_t swig_types[154]
-#define SWIGTYPE_p_svn_wc_external_item_t swig_types[155]
-#define SWIGTYPE_p_svn_wc_info_t swig_types[156]
-#define SWIGTYPE_p_svn_wc_merge_outcome_t swig_types[157]
-#define SWIGTYPE_p_svn_wc_notify_action_t swig_types[158]
-#define SWIGTYPE_p_svn_wc_notify_lock_state_t swig_types[159]
-#define SWIGTYPE_p_svn_wc_notify_state_t swig_types[160]
-#define SWIGTYPE_p_svn_wc_notify_t swig_types[161]
-#define SWIGTYPE_p_svn_wc_operation_t swig_types[162]
-#define SWIGTYPE_p_svn_wc_revision_status_t swig_types[163]
-#define SWIGTYPE_p_svn_wc_schedule_t swig_types[164]
-#define SWIGTYPE_p_svn_wc_status2_t swig_types[165]
-#define SWIGTYPE_p_svn_wc_status3_t swig_types[166]
-#define SWIGTYPE_p_svn_wc_status_t swig_types[167]
-#define SWIGTYPE_p_svn_wc_traversal_info_t swig_types[168]
-#define SWIGTYPE_p_unsigned_char swig_types[169]
-#define SWIGTYPE_p_unsigned_long swig_types[170]
-#define SWIGTYPE_p_void swig_types[171]
-static swig_type_info *swig_types[173];
-static swig_module_info swig_module = {swig_types, 172, 0, 0, 0, 0};
+#define SWIGTYPE_p_svn_checksum_ctx_t swig_types[81]
+#define SWIGTYPE_p_svn_checksum_kind_t swig_types[82]
+#define SWIGTYPE_p_svn_checksum_t swig_types[83]
+#define SWIGTYPE_p_svn_commit_info_t swig_types[84]
+#define SWIGTYPE_p_svn_config_t swig_types[85]
+#define SWIGTYPE_p_svn_delta_editor_t swig_types[86]
+#define SWIGTYPE_p_svn_depth_t swig_types[87]
+#define SWIGTYPE_p_svn_diff_conflict_display_style_t swig_types[88]
+#define SWIGTYPE_p_svn_diff_datasource_e swig_types[89]
+#define SWIGTYPE_p_svn_diff_file_ignore_space_t swig_types[90]
+#define SWIGTYPE_p_svn_diff_file_options_t swig_types[91]
+#define SWIGTYPE_p_svn_diff_fns2_t swig_types[92]
+#define SWIGTYPE_p_svn_diff_fns_t swig_types[93]
+#define SWIGTYPE_p_svn_diff_hunk_t swig_types[94]
+#define SWIGTYPE_p_svn_diff_operation_kind_e swig_types[95]
+#define SWIGTYPE_p_svn_diff_output_fns_t swig_types[96]
+#define SWIGTYPE_p_svn_diff_t swig_types[97]
+#define SWIGTYPE_p_svn_dirent_t swig_types[98]
+#define SWIGTYPE_p_svn_errno_t swig_types[99]
+#define SWIGTYPE_p_svn_error_t swig_types[100]
+#define SWIGTYPE_p_svn_io_dirent2_t swig_types[101]
+#define SWIGTYPE_p_svn_io_dirent_t swig_types[102]
+#define SWIGTYPE_p_svn_io_file_del_t swig_types[103]
+#define SWIGTYPE_p_svn_location_segment_t swig_types[104]
+#define SWIGTYPE_p_svn_lock_t swig_types[105]
+#define SWIGTYPE_p_svn_log_changed_path2_t swig_types[106]
+#define SWIGTYPE_p_svn_log_changed_path_t swig_types[107]
+#define SWIGTYPE_p_svn_log_entry_t swig_types[108]
+#define SWIGTYPE_p_svn_merge_range_t swig_types[109]
+#define SWIGTYPE_p_svn_mergeinfo_inheritance_t swig_types[110]
+#define SWIGTYPE_p_svn_node_kind_t swig_types[111]
+#define SWIGTYPE_p_svn_opt_revision_range_t swig_types[112]
+#define SWIGTYPE_p_svn_opt_revision_t swig_types[113]
+#define SWIGTYPE_p_svn_opt_revision_value_t swig_types[114]
+#define SWIGTYPE_p_svn_opt_subcommand_desc2_t swig_types[115]
+#define SWIGTYPE_p_svn_opt_subcommand_desc_t swig_types[116]
+#define SWIGTYPE_p_svn_patch_file_t swig_types[117]
+#define SWIGTYPE_p_svn_patch_t swig_types[118]
+#define SWIGTYPE_p_svn_prop_inherited_item_t swig_types[119]
+#define SWIGTYPE_p_svn_prop_kind swig_types[120]
+#define SWIGTYPE_p_svn_prop_patch_t swig_types[121]
+#define SWIGTYPE_p_svn_ra_callbacks2_t swig_types[122]
+#define SWIGTYPE_p_svn_ra_callbacks_t swig_types[123]
+#define SWIGTYPE_p_svn_ra_plugin_t swig_types[124]
+#define SWIGTYPE_p_svn_ra_reporter2_t swig_types[125]
+#define SWIGTYPE_p_svn_ra_reporter3_t swig_types[126]
+#define SWIGTYPE_p_svn_ra_reporter_t swig_types[127]
+#define SWIGTYPE_p_svn_ra_session_t swig_types[128]
+#define SWIGTYPE_p_svn_stream_mark_t swig_types[129]
+#define SWIGTYPE_p_svn_stream_t swig_types[130]
+#define SWIGTYPE_p_svn_string_t swig_types[131]
+#define SWIGTYPE_p_svn_stringbuf_t swig_types[132]
+#define SWIGTYPE_p_svn_tristate_t swig_types[133]
+#define SWIGTYPE_p_svn_txdelta_op_t swig_types[134]
+#define SWIGTYPE_p_svn_txdelta_stream_t swig_types[135]
+#define SWIGTYPE_p_svn_txdelta_window_t swig_types[136]
+#define SWIGTYPE_p_svn_version_checklist_t swig_types[137]
+#define SWIGTYPE_p_svn_version_ext_linked_lib_t swig_types[138]
+#define SWIGTYPE_p_svn_version_ext_loaded_lib_t swig_types[139]
+#define SWIGTYPE_p_svn_version_extended_t swig_types[140]
+#define SWIGTYPE_p_svn_version_t swig_types[141]
+#define SWIGTYPE_p_svn_wc_adm_access_t swig_types[142]
+#define SWIGTYPE_p_svn_wc_committed_queue_t swig_types[143]
+#define SWIGTYPE_p_svn_wc_conflict_action_t swig_types[144]
+#define SWIGTYPE_p_svn_wc_conflict_choice_t swig_types[145]
+#define SWIGTYPE_p_svn_wc_conflict_description2_t swig_types[146]
+#define SWIGTYPE_p_svn_wc_conflict_description_t swig_types[147]
+#define SWIGTYPE_p_svn_wc_conflict_kind_t swig_types[148]
+#define SWIGTYPE_p_svn_wc_conflict_reason_t swig_types[149]
+#define SWIGTYPE_p_svn_wc_conflict_result_t swig_types[150]
+#define SWIGTYPE_p_svn_wc_conflict_version_t swig_types[151]
+#define SWIGTYPE_p_svn_wc_context_t swig_types[152]
+#define SWIGTYPE_p_svn_wc_diff_callbacks2_t swig_types[153]
+#define SWIGTYPE_p_svn_wc_diff_callbacks3_t swig_types[154]
+#define SWIGTYPE_p_svn_wc_diff_callbacks4_t swig_types[155]
+#define SWIGTYPE_p_svn_wc_diff_callbacks_t swig_types[156]
+#define SWIGTYPE_p_svn_wc_entry_callbacks2_t swig_types[157]
+#define SWIGTYPE_p_svn_wc_entry_callbacks_t swig_types[158]
+#define SWIGTYPE_p_svn_wc_entry_t swig_types[159]
+#define SWIGTYPE_p_svn_wc_external_item2_t swig_types[160]
+#define SWIGTYPE_p_svn_wc_external_item_t swig_types[161]
+#define SWIGTYPE_p_svn_wc_info_t swig_types[162]
+#define SWIGTYPE_p_svn_wc_merge_outcome_t swig_types[163]
+#define SWIGTYPE_p_svn_wc_notify_action_t swig_types[164]
+#define SWIGTYPE_p_svn_wc_notify_lock_state_t swig_types[165]
+#define SWIGTYPE_p_svn_wc_notify_state_t swig_types[166]
+#define SWIGTYPE_p_svn_wc_notify_t swig_types[167]
+#define SWIGTYPE_p_svn_wc_operation_t swig_types[168]
+#define SWIGTYPE_p_svn_wc_revision_status_t swig_types[169]
+#define SWIGTYPE_p_svn_wc_schedule_t swig_types[170]
+#define SWIGTYPE_p_svn_wc_status2_t swig_types[171]
+#define SWIGTYPE_p_svn_wc_status3_t swig_types[172]
+#define SWIGTYPE_p_svn_wc_status_t swig_types[173]
+#define SWIGTYPE_p_svn_wc_traversal_info_t swig_types[174]
+#define SWIGTYPE_p_unsigned_char swig_types[175]
+#define SWIGTYPE_p_unsigned_long swig_types[176]
+#define SWIGTYPE_p_void swig_types[177]
+static swig_type_info *swig_types[179];
+static swig_module_info swig_module = {swig_types, 178, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@@ -1980,7 +1986,7 @@ static VALUE mWc;
#define SWIG_RUBY_THREAD_END_BLOCK
-#define SWIGVERSION 0x020004
+#define SWIGVERSION 0x020009
#define SWIG_VERSION SWIGVERSION
@@ -2073,11 +2079,7 @@ SWIGINTERN int
SWIG_AsCharPtrAndSize(VALUE obj, char** cptr, size_t* psize, int *alloc)
{
if (TYPE(obj) == T_STRING) {
- #if defined(StringValuePtr)
char *cstr = StringValuePtr(obj);
- #else
- char *cstr = STR2CSTR(obj);
- #endif
size_t size = RSTRING_LEN(obj) + 1;
if (cptr) {
if (alloc) {
@@ -2117,7 +2119,7 @@ SWIG_ruby_failed(void)
}
-/*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
+/*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
SWIGINTERN VALUE SWIG_AUX_NUM2LONG(VALUE *args)
{
VALUE obj = args[0];
@@ -2185,19 +2187,19 @@ SWIG_FromCharPtr(const char *cptr)
return SWIG_FromCharPtrAndSize(cptr, (cptr ? strlen(cptr) : 0));
}
-SWIGINTERN svn_wc_external_item2_t *new_svn_wc_external_item2_t(apr_pool_t *pool){
+SWIGINTERN struct svn_wc_external_item2_t *new_svn_wc_external_item2_t(apr_pool_t *pool){
svn_error_t *err;
- const svn_wc_external_item2_t *self;
- err = svn_wc_external_item_create(&self, pool);
+ svn_wc_external_item2_t *self;
+ err = svn_wc_external_item2_create(&self, pool);
if (err)
svn_swig_rb_handle_svn_error(err);
- return (svn_wc_external_item2_t *)self;
+ return self;
}
-SWIGINTERN svn_wc_external_item2_t *svn_wc_external_item2_t_dup(svn_wc_external_item2_t *self,apr_pool_t *pool){
+SWIGINTERN svn_wc_external_item2_t *svn_wc_external_item2_t_dup(struct svn_wc_external_item2_t *self,apr_pool_t *pool){
return svn_wc_external_item2_dup(self, pool);
}
-/*@SWIG:/home/pm/sw/subversion/release/prefix/share/swig/2.0.4/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
+/*@SWIG:/tmp/svnrm/prefix/share/swig/2.0.9/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
SWIGINTERN VALUE SWIG_AUX_NUM2ULONG(VALUE *args)
{
VALUE obj = args[0];
@@ -2232,15 +2234,15 @@ SWIG_From_unsigned_SS_long (unsigned long value)
return ULONG2NUM(value);
}
-SWIGINTERN svn_wc_notify_t *new_svn_wc_notify_t(char const *path,svn_wc_notify_action_t action,apr_pool_t *pool){
+SWIGINTERN struct svn_wc_notify_t *new_svn_wc_notify_t(char const *path,svn_wc_notify_action_t action,apr_pool_t *pool){
return svn_wc_create_notify(path, action, pool);
}
-SWIGINTERN svn_wc_entry_t *new_svn_wc_entry_t(char const *path,svn_wc_adm_access_t *adm_access,svn_boolean_t show_hidden,apr_pool_t *pool){
+SWIGINTERN struct svn_wc_entry_t *new_svn_wc_entry_t(char const *path,svn_wc_adm_access_t *adm_access,svn_boolean_t show_hidden,apr_pool_t *pool){
const svn_wc_entry_t *self;
svn_wc_entry(&self, path, adm_access, show_hidden, pool);
return (svn_wc_entry_t *)self;
}
-SWIGINTERN svn_wc_revision_status_t *new_svn_wc_revision_status_t(char const *wc_path,char const *trail_url,svn_boolean_t committed,svn_cancel_func_t cancel_func,void *cancel_baton,apr_pool_t *pool){
+SWIGINTERN struct svn_wc_revision_status_t *new_svn_wc_revision_status_t(char const *wc_path,char const *trail_url,svn_boolean_t committed,svn_cancel_func_t cancel_func,void *cancel_baton,apr_pool_t *pool){
svn_error_t *err;
svn_wc_revision_status_t *self;
err = svn_wc_revision_status(&self, wc_path, trail_url, committed,
@@ -4312,11 +4314,11 @@ fail:
}
-swig_class SwigClassSvn_wc_external_item2_t;
+static swig_class SwigClassSvn_wc_external_item2_t;
SWIGINTERN VALUE
_wrap_svn_wc_external_item2_t_target_dir_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4329,9 +4331,9 @@ _wrap_svn_wc_external_item2_t_target_dir_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_external_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_external_item2_t *","target_dir", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_external_item2_t *","target_dir", 1, self ));
}
- arg1 = (svn_wc_external_item2_t *)(argp1);
+ arg1 = (struct svn_wc_external_item2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","target_dir", 2, argv[0] ));
@@ -4355,7 +4357,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_external_item2_t_target_dir_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -4366,9 +4368,9 @@ _wrap_svn_wc_external_item2_t_target_dir_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_external_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_external_item2_t *","target_dir", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_external_item2_t *","target_dir", 1, self ));
}
- arg1 = (svn_wc_external_item2_t *)(argp1);
+ arg1 = (struct svn_wc_external_item2_t *)(argp1);
result = (char *) ((arg1)->target_dir);
{
if (result) {
@@ -4385,7 +4387,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_external_item2_t_url_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4398,9 +4400,9 @@ _wrap_svn_wc_external_item2_t_url_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_external_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_external_item2_t *","url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_external_item2_t *","url", 1, self ));
}
- arg1 = (svn_wc_external_item2_t *)(argp1);
+ arg1 = (struct svn_wc_external_item2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","url", 2, argv[0] ));
@@ -4424,7 +4426,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_external_item2_t_url_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -4435,9 +4437,9 @@ _wrap_svn_wc_external_item2_t_url_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_external_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_external_item2_t *","url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_external_item2_t *","url", 1, self ));
}
- arg1 = (svn_wc_external_item2_t *)(argp1);
+ arg1 = (struct svn_wc_external_item2_t *)(argp1);
result = (char *) ((arg1)->url);
{
if (result) {
@@ -4454,7 +4456,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_external_item2_t_revision_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4465,9 +4467,9 @@ _wrap_svn_wc_external_item2_t_revision_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_external_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_external_item2_t *","revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_external_item2_t *","revision", 1, self ));
}
- arg1 = (svn_wc_external_item2_t *)(argp1);
+ arg1 = (struct svn_wc_external_item2_t *)(argp1);
{
arg2 = &rev2;
svn_swig_rb_set_revision(&rev2, argv[0]);
@@ -4481,7 +4483,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_external_item2_t_revision_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_opt_revision_t *result = 0 ;
@@ -4492,9 +4494,9 @@ _wrap_svn_wc_external_item2_t_revision_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_external_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_external_item2_t *","revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_external_item2_t *","revision", 1, self ));
}
- arg1 = (svn_wc_external_item2_t *)(argp1);
+ arg1 = (struct svn_wc_external_item2_t *)(argp1);
result = (svn_opt_revision_t *)& ((arg1)->revision);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_opt_revision_t, 0 | 0 );
return vresult;
@@ -4505,7 +4507,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_external_item2_t_peg_revision_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4516,9 +4518,9 @@ _wrap_svn_wc_external_item2_t_peg_revision_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_external_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_external_item2_t *","peg_revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_external_item2_t *","peg_revision", 1, self ));
}
- arg1 = (svn_wc_external_item2_t *)(argp1);
+ arg1 = (struct svn_wc_external_item2_t *)(argp1);
{
arg2 = &rev2;
svn_swig_rb_set_revision(&rev2, argv[0]);
@@ -4532,7 +4534,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_external_item2_t_peg_revision_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_opt_revision_t *result = 0 ;
@@ -4543,9 +4545,9 @@ _wrap_svn_wc_external_item2_t_peg_revision_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_external_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_external_item2_t *","peg_revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_external_item2_t *","peg_revision", 1, self ));
}
- arg1 = (svn_wc_external_item2_t *)(argp1);
+ arg1 = (struct svn_wc_external_item2_t *)(argp1);
result = (svn_opt_revision_t *)& ((arg1)->peg_revision);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_opt_revision_t, 0 | 0 );
return vresult;
@@ -4576,7 +4578,7 @@ _wrap_new_svn_wc_external_item2_t(int argc, VALUE *argv, VALUE self) {
apr_pool_t *arg1 = (apr_pool_t *) 0 ;
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
- svn_wc_external_item2_t *result = 0 ;
+ struct svn_wc_external_item2_t *result = 0 ;
{
svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg1);
@@ -4590,7 +4592,7 @@ _wrap_new_svn_wc_external_item2_t(int argc, VALUE *argv, VALUE self) {
}
{
- result = (svn_wc_external_item2_t *)new_svn_wc_external_item2_t(arg1);
+ result = (struct svn_wc_external_item2_t *)new_svn_wc_external_item2_t(arg1);
DATA_PTR(self) = result;
@@ -4616,10 +4618,10 @@ fail:
}
-SWIGINTERN void delete_svn_wc_external_item2_t(svn_wc_external_item2_t *self){
+SWIGINTERN void delete_svn_wc_external_item2_t(struct svn_wc_external_item2_t *self){
}
SWIGINTERN void
-free_svn_wc_external_item2_t(svn_wc_external_item2_t *arg1) {
+free_svn_wc_external_item2_t(struct svn_wc_external_item2_t *arg1) {
delete_svn_wc_external_item2_t(arg1);
}
@@ -4634,7 +4636,7 @@ Create a duplicate of the class and unfreeze it if needed.
*/
SWIGINTERN VALUE
_wrap_svn_wc_external_item2_t_dup(int argc, VALUE *argv, VALUE self) {
- svn_wc_external_item2_t *arg1 = (svn_wc_external_item2_t *) 0 ;
+ struct svn_wc_external_item2_t *arg1 = (struct svn_wc_external_item2_t *) 0 ;
apr_pool_t *arg2 = (apr_pool_t *) 0 ;
VALUE _global_svn_swig_rb_pool ;
apr_pool_t *_global_pool ;
@@ -4653,9 +4655,9 @@ _wrap_svn_wc_external_item2_t_dup(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_external_item2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_external_item2_t *","dup", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_external_item2_t *","dup", 1, self ));
}
- arg1 = (svn_wc_external_item2_t *)(argp1);
+ arg1 = (struct svn_wc_external_item2_t *)(argp1);
if (argc > 0) {
}
@@ -4686,11 +4688,11 @@ fail:
}
-swig_class SwigClassSvn_wc_external_item_t;
+static swig_class SwigClassSvn_wc_external_item_t;
SWIGINTERN VALUE
_wrap_svn_wc_external_item_t_target_dir_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_external_item_t *arg1 = (svn_wc_external_item_t *) 0 ;
+ struct svn_wc_external_item_t *arg1 = (struct svn_wc_external_item_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4703,9 +4705,9 @@ _wrap_svn_wc_external_item_t_target_dir_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_external_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_external_item_t *","target_dir", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_external_item_t *","target_dir", 1, self ));
}
- arg1 = (svn_wc_external_item_t *)(argp1);
+ arg1 = (struct svn_wc_external_item_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","target_dir", 2, argv[0] ));
@@ -4729,7 +4731,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_external_item_t_target_dir_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_external_item_t *arg1 = (svn_wc_external_item_t *) 0 ;
+ struct svn_wc_external_item_t *arg1 = (struct svn_wc_external_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -4740,9 +4742,9 @@ _wrap_svn_wc_external_item_t_target_dir_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_external_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_external_item_t *","target_dir", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_external_item_t *","target_dir", 1, self ));
}
- arg1 = (svn_wc_external_item_t *)(argp1);
+ arg1 = (struct svn_wc_external_item_t *)(argp1);
result = (char *) ((arg1)->target_dir);
{
if (result) {
@@ -4759,7 +4761,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_external_item_t_url_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_external_item_t *arg1 = (svn_wc_external_item_t *) 0 ;
+ struct svn_wc_external_item_t *arg1 = (struct svn_wc_external_item_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4772,9 +4774,9 @@ _wrap_svn_wc_external_item_t_url_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_external_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_external_item_t *","url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_external_item_t *","url", 1, self ));
}
- arg1 = (svn_wc_external_item_t *)(argp1);
+ arg1 = (struct svn_wc_external_item_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","url", 2, argv[0] ));
@@ -4798,7 +4800,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_external_item_t_url_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_external_item_t *arg1 = (svn_wc_external_item_t *) 0 ;
+ struct svn_wc_external_item_t *arg1 = (struct svn_wc_external_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -4809,9 +4811,9 @@ _wrap_svn_wc_external_item_t_url_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_external_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_external_item_t *","url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_external_item_t *","url", 1, self ));
}
- arg1 = (svn_wc_external_item_t *)(argp1);
+ arg1 = (struct svn_wc_external_item_t *)(argp1);
result = (char *) ((arg1)->url);
{
if (result) {
@@ -4828,7 +4830,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_external_item_t_revision_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_external_item_t *arg1 = (svn_wc_external_item_t *) 0 ;
+ struct svn_wc_external_item_t *arg1 = (struct svn_wc_external_item_t *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -4839,9 +4841,9 @@ _wrap_svn_wc_external_item_t_revision_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_external_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_external_item_t *","revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_external_item_t *","revision", 1, self ));
}
- arg1 = (svn_wc_external_item_t *)(argp1);
+ arg1 = (struct svn_wc_external_item_t *)(argp1);
{
arg2 = &rev2;
svn_swig_rb_set_revision(&rev2, argv[0]);
@@ -4855,7 +4857,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_external_item_t_revision_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_external_item_t *arg1 = (svn_wc_external_item_t *) 0 ;
+ struct svn_wc_external_item_t *arg1 = (struct svn_wc_external_item_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_opt_revision_t *result = 0 ;
@@ -4866,9 +4868,9 @@ _wrap_svn_wc_external_item_t_revision_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_external_item_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_external_item_t *","revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_external_item_t *","revision", 1, self ));
}
- arg1 = (svn_wc_external_item_t *)(argp1);
+ arg1 = (struct svn_wc_external_item_t *)(argp1);
result = (svn_opt_revision_t *)& ((arg1)->revision);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_opt_revision_t, 0 | 0 );
return vresult;
@@ -4896,13 +4898,13 @@ _wrap_svn_wc_external_item_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_wc_external_item_t(int argc, VALUE *argv, VALUE self) {
- svn_wc_external_item_t *result = 0 ;
+ struct svn_wc_external_item_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_wc_external_item_t *)calloc(1, sizeof(svn_wc_external_item_t));
+ result = (struct svn_wc_external_item_t *)calloc(1, sizeof(struct svn_wc_external_item_t));
DATA_PTR(self) = result;
@@ -4915,7 +4917,7 @@ fail:
SWIGINTERN void
-free_svn_wc_external_item_t(svn_wc_external_item_t *arg1) {
+free_svn_wc_external_item_t(struct svn_wc_external_item_t *arg1) {
free((char *) arg1);
}
@@ -5167,11 +5169,11 @@ fail:
}
-swig_class SwigClassSvn_wc_notify_t;
+static swig_class SwigClassSvn_wc_notify_t;
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_path_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5184,9 +5186,9 @@ _wrap_svn_wc_notify_t_path_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","path", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","path", 2, argv[0] ));
@@ -5210,7 +5212,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_path_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -5221,9 +5223,9 @@ _wrap_svn_wc_notify_t_path_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","path", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (char *) ((arg1)->path);
{
if (result) {
@@ -5240,7 +5242,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_action_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_wc_notify_action_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5252,9 +5254,9 @@ _wrap_svn_wc_notify_t_action_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","action", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","action", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_wc_notify_action_t","action", 2, argv[0] ));
@@ -5269,7 +5271,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_action_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_notify_action_t result;
@@ -5280,9 +5282,9 @@ _wrap_svn_wc_notify_t_action_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","action", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","action", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_wc_notify_action_t) ((arg1)->action);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -5293,7 +5295,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5305,9 +5307,9 @@ _wrap_svn_wc_notify_t_kind_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","kind", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_node_kind_t","kind", 2, argv[0] ));
@@ -5322,7 +5324,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_node_kind_t result;
@@ -5333,9 +5335,9 @@ _wrap_svn_wc_notify_t_kind_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","kind", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -5346,7 +5348,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_mime_type_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5359,9 +5361,9 @@ _wrap_svn_wc_notify_t_mime_type_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","mime_type", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","mime_type", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","mime_type", 2, argv[0] ));
@@ -5385,7 +5387,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_mime_type_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -5396,9 +5398,9 @@ _wrap_svn_wc_notify_t_mime_type_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","mime_type", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","mime_type", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (char *) ((arg1)->mime_type);
{
if (result) {
@@ -5415,7 +5417,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_lock_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_lock_t *arg2 = (svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5427,9 +5429,9 @@ _wrap_svn_wc_notify_t_lock_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","lock", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","lock", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_lock_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_lock_t const *","lock", 2, argv[0] ));
@@ -5444,7 +5446,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_lock_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_lock_t *result = 0 ;
@@ -5455,9 +5457,9 @@ _wrap_svn_wc_notify_t_lock_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","lock", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","lock", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_lock_t *) ((arg1)->lock);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_lock_t, 0 | 0 );
return vresult;
@@ -5468,7 +5470,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_err_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_error_t *arg2 = (svn_error_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5480,9 +5482,9 @@ _wrap_svn_wc_notify_t_err_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","err", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","err", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_error_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_error_t *","err", 2, argv[0] ));
@@ -5497,7 +5499,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_err_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *result = 0 ;
@@ -5508,9 +5510,9 @@ _wrap_svn_wc_notify_t_err_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","err", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","err", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_error_t *) ((arg1)->err);
{
vresult = result ? svn_swig_rb_svn_error_to_rb_error(result) : Qnil;
@@ -5523,7 +5525,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_content_state_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_wc_notify_state_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5535,9 +5537,9 @@ _wrap_svn_wc_notify_t_content_state_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","content_state", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","content_state", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_wc_notify_state_t","content_state", 2, argv[0] ));
@@ -5552,7 +5554,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_content_state_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_notify_state_t result;
@@ -5563,9 +5565,9 @@ _wrap_svn_wc_notify_t_content_state_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","content_state", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","content_state", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_wc_notify_state_t) ((arg1)->content_state);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -5576,7 +5578,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_prop_state_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_wc_notify_state_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5588,9 +5590,9 @@ _wrap_svn_wc_notify_t_prop_state_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","prop_state", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","prop_state", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_wc_notify_state_t","prop_state", 2, argv[0] ));
@@ -5605,7 +5607,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_prop_state_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_notify_state_t result;
@@ -5616,9 +5618,9 @@ _wrap_svn_wc_notify_t_prop_state_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","prop_state", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","prop_state", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_wc_notify_state_t) ((arg1)->prop_state);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -5629,7 +5631,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_lock_state_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_wc_notify_lock_state_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5641,9 +5643,9 @@ _wrap_svn_wc_notify_t_lock_state_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","lock_state", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","lock_state", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_wc_notify_lock_state_t","lock_state", 2, argv[0] ));
@@ -5658,7 +5660,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_lock_state_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_notify_lock_state_t result;
@@ -5669,9 +5671,9 @@ _wrap_svn_wc_notify_t_lock_state_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","lock_state", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","lock_state", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_wc_notify_lock_state_t) ((arg1)->lock_state);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -5682,7 +5684,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_revision_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5694,9 +5696,9 @@ _wrap_svn_wc_notify_t_revision_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","revision", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","revision", 2, argv[0] ));
@@ -5711,7 +5713,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_revision_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -5722,9 +5724,9 @@ _wrap_svn_wc_notify_t_revision_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","revision", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_revnum_t) ((arg1)->revision);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -5735,7 +5737,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_changelist_name_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5748,9 +5750,9 @@ _wrap_svn_wc_notify_t_changelist_name_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","changelist_name", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","changelist_name", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","changelist_name", 2, argv[0] ));
@@ -5774,7 +5776,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_changelist_name_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -5785,9 +5787,9 @@ _wrap_svn_wc_notify_t_changelist_name_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","changelist_name", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","changelist_name", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (char *) ((arg1)->changelist_name);
{
if (result) {
@@ -5804,7 +5806,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_merge_range_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_merge_range_t *arg2 = (svn_merge_range_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5816,9 +5818,9 @@ _wrap_svn_wc_notify_t_merge_range_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","merge_range", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","merge_range", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_merge_range_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_merge_range_t *","merge_range", 2, argv[0] ));
@@ -5833,7 +5835,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_merge_range_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_merge_range_t *result = 0 ;
@@ -5844,9 +5846,9 @@ _wrap_svn_wc_notify_t_merge_range_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","merge_range", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","merge_range", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_merge_range_t *) ((arg1)->merge_range);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_merge_range_t, 0 | 0 );
return vresult;
@@ -5857,7 +5859,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_url_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5870,9 +5872,9 @@ _wrap_svn_wc_notify_t_url_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","url", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","url", 2, argv[0] ));
@@ -5896,7 +5898,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_url_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -5907,9 +5909,9 @@ _wrap_svn_wc_notify_t_url_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","url", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (char *) ((arg1)->url);
{
if (result) {
@@ -5926,7 +5928,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_path_prefix_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -5939,9 +5941,9 @@ _wrap_svn_wc_notify_t_path_prefix_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","path_prefix", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","path_prefix", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","path_prefix", 2, argv[0] ));
@@ -5965,7 +5967,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_path_prefix_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -5976,9 +5978,9 @@ _wrap_svn_wc_notify_t_path_prefix_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","path_prefix", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","path_prefix", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (char *) ((arg1)->path_prefix);
{
if (result) {
@@ -5995,7 +5997,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_prop_name_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6008,9 +6010,9 @@ _wrap_svn_wc_notify_t_prop_name_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","prop_name", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","prop_name", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","prop_name", 2, argv[0] ));
@@ -6034,7 +6036,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_prop_name_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -6045,9 +6047,9 @@ _wrap_svn_wc_notify_t_prop_name_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","prop_name", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","prop_name", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (char *) ((arg1)->prop_name);
{
if (result) {
@@ -6064,7 +6066,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_rev_props_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
apr_hash_t *arg2 = (apr_hash_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6076,9 +6078,9 @@ _wrap_svn_wc_notify_t_rev_props_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","rev_props", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","rev_props", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_apr_hash_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "apr_hash_t *","rev_props", 2, argv[0] ));
@@ -6093,7 +6095,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_rev_props_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_hash_t *result = 0 ;
@@ -6104,9 +6106,9 @@ _wrap_svn_wc_notify_t_rev_props_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","rev_props", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","rev_props", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (apr_hash_t *) ((arg1)->rev_props);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_hash_t, 0 | 0 );
return vresult;
@@ -6117,7 +6119,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_old_revision_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6129,9 +6131,9 @@ _wrap_svn_wc_notify_t_old_revision_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","old_revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","old_revision", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","old_revision", 2, argv[0] ));
@@ -6146,7 +6148,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_old_revision_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -6157,9 +6159,9 @@ _wrap_svn_wc_notify_t_old_revision_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","old_revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","old_revision", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_revnum_t) ((arg1)->old_revision);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -6170,7 +6172,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_hunk_original_start_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_linenum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6182,9 +6184,9 @@ _wrap_svn_wc_notify_t_hunk_original_start_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","hunk_original_start", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","hunk_original_start", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_linenum_t","hunk_original_start", 2, argv[0] ));
@@ -6199,7 +6201,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_hunk_original_start_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_linenum_t result;
@@ -6210,9 +6212,9 @@ _wrap_svn_wc_notify_t_hunk_original_start_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","hunk_original_start", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","hunk_original_start", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_linenum_t) ((arg1)->hunk_original_start);
vresult = SWIG_From_unsigned_SS_long((unsigned long)(result));
return vresult;
@@ -6223,7 +6225,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_hunk_original_length_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_linenum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6235,9 +6237,9 @@ _wrap_svn_wc_notify_t_hunk_original_length_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","hunk_original_length", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","hunk_original_length", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_linenum_t","hunk_original_length", 2, argv[0] ));
@@ -6252,7 +6254,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_hunk_original_length_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_linenum_t result;
@@ -6263,9 +6265,9 @@ _wrap_svn_wc_notify_t_hunk_original_length_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","hunk_original_length", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","hunk_original_length", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_linenum_t) ((arg1)->hunk_original_length);
vresult = SWIG_From_unsigned_SS_long((unsigned long)(result));
return vresult;
@@ -6276,7 +6278,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_hunk_modified_start_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_linenum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6288,9 +6290,9 @@ _wrap_svn_wc_notify_t_hunk_modified_start_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","hunk_modified_start", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","hunk_modified_start", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_linenum_t","hunk_modified_start", 2, argv[0] ));
@@ -6305,7 +6307,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_hunk_modified_start_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_linenum_t result;
@@ -6316,9 +6318,9 @@ _wrap_svn_wc_notify_t_hunk_modified_start_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","hunk_modified_start", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","hunk_modified_start", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_linenum_t) ((arg1)->hunk_modified_start);
vresult = SWIG_From_unsigned_SS_long((unsigned long)(result));
return vresult;
@@ -6329,7 +6331,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_hunk_modified_length_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_linenum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6341,9 +6343,9 @@ _wrap_svn_wc_notify_t_hunk_modified_length_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","hunk_modified_length", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","hunk_modified_length", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_linenum_t","hunk_modified_length", 2, argv[0] ));
@@ -6358,7 +6360,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_hunk_modified_length_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_linenum_t result;
@@ -6369,9 +6371,9 @@ _wrap_svn_wc_notify_t_hunk_modified_length_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","hunk_modified_length", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","hunk_modified_length", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_linenum_t) ((arg1)->hunk_modified_length);
vresult = SWIG_From_unsigned_SS_long((unsigned long)(result));
return vresult;
@@ -6382,7 +6384,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_hunk_matched_line_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_linenum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6394,9 +6396,9 @@ _wrap_svn_wc_notify_t_hunk_matched_line_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","hunk_matched_line", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","hunk_matched_line", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_linenum_t","hunk_matched_line", 2, argv[0] ));
@@ -6411,7 +6413,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_hunk_matched_line_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_linenum_t result;
@@ -6422,9 +6424,9 @@ _wrap_svn_wc_notify_t_hunk_matched_line_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","hunk_matched_line", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","hunk_matched_line", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_linenum_t) ((arg1)->hunk_matched_line);
vresult = SWIG_From_unsigned_SS_long((unsigned long)(result));
return vresult;
@@ -6435,7 +6437,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_hunk_fuzz_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
svn_linenum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6447,9 +6449,9 @@ _wrap_svn_wc_notify_t_hunk_fuzz_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","hunk_fuzz", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","hunk_fuzz", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_linenum_t","hunk_fuzz", 2, argv[0] ));
@@ -6464,7 +6466,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_notify_t_hunk_fuzz_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_notify_t *arg1 = (svn_wc_notify_t *) 0 ;
+ struct svn_wc_notify_t *arg1 = (struct svn_wc_notify_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_linenum_t result;
@@ -6475,9 +6477,9 @@ _wrap_svn_wc_notify_t_hunk_fuzz_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_notify_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_notify_t *","hunk_fuzz", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_notify_t *","hunk_fuzz", 1, self ));
}
- arg1 = (svn_wc_notify_t *)(argp1);
+ arg1 = (struct svn_wc_notify_t *)(argp1);
result = (svn_linenum_t) ((arg1)->hunk_fuzz);
vresult = SWIG_From_unsigned_SS_long((unsigned long)(result));
return vresult;
@@ -6515,7 +6517,7 @@ _wrap_new_svn_wc_notify_t(int argc, VALUE *argv, VALUE self) {
int alloc1 = 0 ;
int val2 ;
int ecode2 = 0 ;
- svn_wc_notify_t *result = 0 ;
+ struct svn_wc_notify_t *result = 0 ;
{
svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg3);
@@ -6539,7 +6541,7 @@ _wrap_new_svn_wc_notify_t(int argc, VALUE *argv, VALUE self) {
}
{
- result = (svn_wc_notify_t *)new_svn_wc_notify_t((char const *)arg1,arg2,arg3);
+ result = (struct svn_wc_notify_t *)new_svn_wc_notify_t((char const *)arg1,arg2,arg3);
DATA_PTR(self) = result;
@@ -6567,10 +6569,10 @@ fail:
}
-SWIGINTERN void delete_svn_wc_notify_t(svn_wc_notify_t *self){
+SWIGINTERN void delete_svn_wc_notify_t(struct svn_wc_notify_t *self){
}
SWIGINTERN void
-free_svn_wc_notify_t(svn_wc_notify_t *arg1) {
+free_svn_wc_notify_t(struct svn_wc_notify_t *arg1) {
delete_svn_wc_notify_t(arg1);
}
@@ -6758,11 +6760,11 @@ fail:
}
-swig_class SwigClassSvn_wc_conflict_version_t;
+static swig_class SwigClassSvn_wc_conflict_version_t;
SWIGINTERN VALUE
_wrap_svn_wc_conflict_version_t_repos_url_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_version_t *arg1 = (svn_wc_conflict_version_t *) 0 ;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6775,9 +6777,9 @@ _wrap_svn_wc_conflict_version_t_repos_url_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_version_t *","repos_url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_version_t *","repos_url", 1, self ));
}
- arg1 = (svn_wc_conflict_version_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_version_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","repos_url", 2, argv[0] ));
@@ -6801,7 +6803,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_version_t_repos_url_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_version_t *arg1 = (svn_wc_conflict_version_t *) 0 ;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -6812,9 +6814,9 @@ _wrap_svn_wc_conflict_version_t_repos_url_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_version_t *","repos_url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_version_t *","repos_url", 1, self ));
}
- arg1 = (svn_wc_conflict_version_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_version_t *)(argp1);
result = (char *) ((arg1)->repos_url);
{
if (result) {
@@ -6831,7 +6833,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_version_t_peg_rev_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_version_t *arg1 = (svn_wc_conflict_version_t *) 0 ;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6843,9 +6845,9 @@ _wrap_svn_wc_conflict_version_t_peg_rev_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_version_t *","peg_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_version_t *","peg_rev", 1, self ));
}
- arg1 = (svn_wc_conflict_version_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_version_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","peg_rev", 2, argv[0] ));
@@ -6860,7 +6862,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_version_t_peg_rev_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_version_t *arg1 = (svn_wc_conflict_version_t *) 0 ;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -6871,9 +6873,9 @@ _wrap_svn_wc_conflict_version_t_peg_rev_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_version_t *","peg_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_version_t *","peg_rev", 1, self ));
}
- arg1 = (svn_wc_conflict_version_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_version_t *)(argp1);
result = (svn_revnum_t) ((arg1)->peg_rev);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -6884,7 +6886,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_version_t_path_in_repos_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_version_t *arg1 = (svn_wc_conflict_version_t *) 0 ;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6897,9 +6899,9 @@ _wrap_svn_wc_conflict_version_t_path_in_repos_set(int argc, VALUE *argv, VALUE s
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_version_t *","path_in_repos", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_version_t *","path_in_repos", 1, self ));
}
- arg1 = (svn_wc_conflict_version_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_version_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","path_in_repos", 2, argv[0] ));
@@ -6923,7 +6925,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_version_t_path_in_repos_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_version_t *arg1 = (svn_wc_conflict_version_t *) 0 ;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -6934,9 +6936,9 @@ _wrap_svn_wc_conflict_version_t_path_in_repos_get(int argc, VALUE *argv, VALUE s
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_version_t *","path_in_repos", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_version_t *","path_in_repos", 1, self ));
}
- arg1 = (svn_wc_conflict_version_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_version_t *)(argp1);
result = (char *) ((arg1)->path_in_repos);
{
if (result) {
@@ -6953,7 +6955,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_version_t_node_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_version_t *arg1 = (svn_wc_conflict_version_t *) 0 ;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -6965,9 +6967,9 @@ _wrap_svn_wc_conflict_version_t_node_kind_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_version_t *","node_kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_version_t *","node_kind", 1, self ));
}
- arg1 = (svn_wc_conflict_version_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_version_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_node_kind_t","node_kind", 2, argv[0] ));
@@ -6982,7 +6984,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_version_t_node_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_version_t *arg1 = (svn_wc_conflict_version_t *) 0 ;
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_node_kind_t result;
@@ -6993,9 +6995,9 @@ _wrap_svn_wc_conflict_version_t_node_kind_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_version_t *","node_kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_version_t *","node_kind", 1, self ));
}
- arg1 = (svn_wc_conflict_version_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_version_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->node_kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -7004,6 +7006,75 @@ fail:
}
+SWIGINTERN VALUE
+_wrap_svn_wc_conflict_version_t_repos_uuid_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_version_t *","repos_uuid", 1, self ));
+ }
+ arg1 = (struct svn_wc_conflict_version_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","repos_uuid", 2, argv[0] ));
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->repos_uuid) free((char *)arg1->repos_uuid);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->repos_uuid = copied;
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_wc_conflict_version_t_repos_uuid_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_wc_conflict_version_t *arg1 = (struct svn_wc_conflict_version_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ char *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_version_t *","repos_uuid", 1, self ));
+ }
+ arg1 = (struct svn_wc_conflict_version_t *)(argp1);
+ result = (char *) ((arg1)->repos_uuid);
+ {
+ if (result) {
+ vresult = rb_str_new2(result);
+ } else {
+ vresult = Qnil;
+ }
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
#ifdef HAVE_RB_DEFINE_ALLOC_FUNC
SWIGINTERN VALUE
_wrap_svn_wc_conflict_version_t_allocate(VALUE self) {
@@ -7023,13 +7094,13 @@ _wrap_svn_wc_conflict_version_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_wc_conflict_version_t(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_version_t *result = 0 ;
+ struct svn_wc_conflict_version_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_wc_conflict_version_t *)calloc(1, sizeof(svn_wc_conflict_version_t));
+ result = (struct svn_wc_conflict_version_t *)calloc(1, sizeof(struct svn_wc_conflict_version_t));
DATA_PTR(self) = result;
@@ -7042,11 +7113,106 @@ fail:
SWIGINTERN void
-free_svn_wc_conflict_version_t(svn_wc_conflict_version_t *arg1) {
+free_svn_wc_conflict_version_t(struct svn_wc_conflict_version_t *arg1) {
free((char *) arg1);
}
SWIGINTERN VALUE
+_wrap_svn_wc_conflict_version_create2(int argc, VALUE *argv, VALUE self) {
+ char *arg1 = (char *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_revnum_t arg4 ;
+ svn_node_kind_t arg5 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ int res1 ;
+ char *buf1 = 0 ;
+ int alloc1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ long val4 ;
+ int ecode4 = 0 ;
+ int val5 ;
+ int ecode5 = 0 ;
+ svn_wc_conflict_version_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg6);
+ _global_pool = arg6;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 5) || (argc > 6)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 5)",argc); SWIG_fail;
+ }
+ res1 = SWIG_AsCharPtrAndSize(argv[0], &buf1, NULL, &alloc1);
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "char const *","svn_wc_conflict_version_create2", 1, argv[0] ));
+ }
+ arg1 = (char *)(buf1);
+ res2 = SWIG_AsCharPtrAndSize(argv[1], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","svn_wc_conflict_version_create2", 2, argv[1] ));
+ }
+ arg2 = (char *)(buf2);
+ res3 = SWIG_AsCharPtrAndSize(argv[2], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","svn_wc_conflict_version_create2", 3, argv[2] ));
+ }
+ arg3 = (char *)(buf3);
+ ecode4 = SWIG_AsVal_long(argv[3], &val4);
+ if (!SWIG_IsOK(ecode4)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode4), Ruby_Format_TypeError( "", "svn_revnum_t","svn_wc_conflict_version_create2", 4, argv[3] ));
+ }
+ arg4 = (svn_revnum_t)(val4);
+ ecode5 = SWIG_AsVal_int(argv[4], &val5);
+ if (!SWIG_IsOK(ecode5)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode5), Ruby_Format_TypeError( "", "svn_node_kind_t","svn_wc_conflict_version_create2", 5, argv[4] ));
+ }
+ arg5 = (svn_node_kind_t)(val5);
+ if (argc > 5) {
+
+ }
+ {
+ result = (svn_wc_conflict_version_t *)svn_wc_conflict_version_create2((char const *)arg1,(char const *)arg2,(char const *)arg3,arg4,arg5,arg6);
+
+
+
+ }
+ vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_wc_conflict_version_create(int argc, VALUE *argv, VALUE self) {
char *arg1 = (char *) 0 ;
char *arg2 = (char *) 0 ;
@@ -7184,11 +7350,11 @@ fail:
}
-swig_class SwigClassSvn_wc_conflict_description2_t;
+static swig_class SwigClassSvn_wc_conflict_description2_t;
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_local_abspath_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7201,9 +7367,9 @@ _wrap_svn_wc_conflict_description2_t_local_abspath_set(int argc, VALUE *argv, VA
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","local_abspath", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","local_abspath", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","local_abspath", 2, argv[0] ));
@@ -7227,7 +7393,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_local_abspath_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -7238,9 +7404,9 @@ _wrap_svn_wc_conflict_description2_t_local_abspath_get(int argc, VALUE *argv, VA
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","local_abspath", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","local_abspath", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (char *) ((arg1)->local_abspath);
{
if (result) {
@@ -7257,7 +7423,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_node_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7269,9 +7435,9 @@ _wrap_svn_wc_conflict_description2_t_node_kind_set(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","node_kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","node_kind", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_node_kind_t","node_kind", 2, argv[0] ));
@@ -7286,7 +7452,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_node_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_node_kind_t result;
@@ -7297,9 +7463,9 @@ _wrap_svn_wc_conflict_description2_t_node_kind_get(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","node_kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","node_kind", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->node_kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -7310,7 +7476,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
svn_wc_conflict_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7322,9 +7488,9 @@ _wrap_svn_wc_conflict_description2_t_kind_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","kind", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_wc_conflict_kind_t","kind", 2, argv[0] ));
@@ -7339,7 +7505,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_conflict_kind_t result;
@@ -7350,9 +7516,9 @@ _wrap_svn_wc_conflict_description2_t_kind_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","kind", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (svn_wc_conflict_kind_t) ((arg1)->kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -7363,7 +7529,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_property_name_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7376,9 +7542,9 @@ _wrap_svn_wc_conflict_description2_t_property_name_set(int argc, VALUE *argv, VA
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","property_name", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","property_name", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","property_name", 2, argv[0] ));
@@ -7402,7 +7568,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_property_name_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -7413,9 +7579,9 @@ _wrap_svn_wc_conflict_description2_t_property_name_get(int argc, VALUE *argv, VA
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","property_name", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","property_name", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (char *) ((arg1)->property_name);
{
if (result) {
@@ -7432,7 +7598,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_is_binary_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7442,9 +7608,9 @@ _wrap_svn_wc_conflict_description2_t_is_binary_set(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","is_binary", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","is_binary", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->is_binary = arg2;
return Qnil;
@@ -7455,7 +7621,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_is_binary_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -7466,9 +7632,9 @@ _wrap_svn_wc_conflict_description2_t_is_binary_get(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","is_binary", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","is_binary", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (svn_boolean_t) ((arg1)->is_binary);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -7479,7 +7645,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_mime_type_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7492,9 +7658,9 @@ _wrap_svn_wc_conflict_description2_t_mime_type_set(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","mime_type", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","mime_type", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","mime_type", 2, argv[0] ));
@@ -7518,7 +7684,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_mime_type_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -7529,9 +7695,9 @@ _wrap_svn_wc_conflict_description2_t_mime_type_get(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","mime_type", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","mime_type", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (char *) ((arg1)->mime_type);
{
if (result) {
@@ -7548,7 +7714,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_action_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
svn_wc_conflict_action_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7560,9 +7726,9 @@ _wrap_svn_wc_conflict_description2_t_action_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","action", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","action", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_wc_conflict_action_t","action", 2, argv[0] ));
@@ -7577,7 +7743,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_action_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_conflict_action_t result;
@@ -7588,9 +7754,9 @@ _wrap_svn_wc_conflict_description2_t_action_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","action", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","action", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (svn_wc_conflict_action_t) ((arg1)->action);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -7601,7 +7767,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_reason_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
svn_wc_conflict_reason_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7613,9 +7779,9 @@ _wrap_svn_wc_conflict_description2_t_reason_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","reason", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","reason", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_wc_conflict_reason_t","reason", 2, argv[0] ));
@@ -7630,7 +7796,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_reason_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_conflict_reason_t result;
@@ -7641,9 +7807,9 @@ _wrap_svn_wc_conflict_description2_t_reason_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","reason", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","reason", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (svn_wc_conflict_reason_t) ((arg1)->reason);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -7654,7 +7820,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_base_abspath_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7667,9 +7833,9 @@ _wrap_svn_wc_conflict_description2_t_base_abspath_set(int argc, VALUE *argv, VAL
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","base_abspath", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","base_abspath", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","base_abspath", 2, argv[0] ));
@@ -7693,7 +7859,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_base_abspath_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -7704,9 +7870,9 @@ _wrap_svn_wc_conflict_description2_t_base_abspath_get(int argc, VALUE *argv, VAL
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","base_abspath", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","base_abspath", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (char *) ((arg1)->base_abspath);
{
if (result) {
@@ -7723,7 +7889,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_their_abspath_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7736,9 +7902,9 @@ _wrap_svn_wc_conflict_description2_t_their_abspath_set(int argc, VALUE *argv, VA
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","their_abspath", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","their_abspath", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","their_abspath", 2, argv[0] ));
@@ -7762,7 +7928,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_their_abspath_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -7773,9 +7939,9 @@ _wrap_svn_wc_conflict_description2_t_their_abspath_get(int argc, VALUE *argv, VA
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","their_abspath", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","their_abspath", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (char *) ((arg1)->their_abspath);
{
if (result) {
@@ -7792,7 +7958,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_my_abspath_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7805,9 +7971,9 @@ _wrap_svn_wc_conflict_description2_t_my_abspath_set(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","my_abspath", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","my_abspath", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","my_abspath", 2, argv[0] ));
@@ -7831,7 +7997,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_my_abspath_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -7842,9 +8008,9 @@ _wrap_svn_wc_conflict_description2_t_my_abspath_get(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","my_abspath", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","my_abspath", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (char *) ((arg1)->my_abspath);
{
if (result) {
@@ -7861,7 +8027,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_merged_file_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7874,9 +8040,9 @@ _wrap_svn_wc_conflict_description2_t_merged_file_set(int argc, VALUE *argv, VALU
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","merged_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","merged_file", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","merged_file", 2, argv[0] ));
@@ -7900,7 +8066,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_merged_file_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -7911,9 +8077,9 @@ _wrap_svn_wc_conflict_description2_t_merged_file_get(int argc, VALUE *argv, VALU
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","merged_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","merged_file", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (char *) ((arg1)->merged_file);
{
if (result) {
@@ -7930,7 +8096,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_operation_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
svn_wc_operation_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7942,9 +8108,9 @@ _wrap_svn_wc_conflict_description2_t_operation_set(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","operation", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","operation", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_wc_operation_t","operation", 2, argv[0] ));
@@ -7959,7 +8125,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_operation_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_operation_t result;
@@ -7970,9 +8136,9 @@ _wrap_svn_wc_conflict_description2_t_operation_get(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","operation", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","operation", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (svn_wc_operation_t) ((arg1)->operation);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -7983,7 +8149,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_src_left_version_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
svn_wc_conflict_version_t *arg2 = (svn_wc_conflict_version_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -7995,9 +8161,9 @@ _wrap_svn_wc_conflict_description2_t_src_left_version_set(int argc, VALUE *argv,
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","src_left_version", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","src_left_version", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_wc_conflict_version_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_wc_conflict_version_t const *","src_left_version", 2, argv[0] ));
@@ -8012,7 +8178,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_src_left_version_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_conflict_version_t *result = 0 ;
@@ -8023,9 +8189,9 @@ _wrap_svn_wc_conflict_description2_t_src_left_version_get(int argc, VALUE *argv,
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","src_left_version", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","src_left_version", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (svn_wc_conflict_version_t *) ((arg1)->src_left_version);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
return vresult;
@@ -8036,7 +8202,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_src_right_version_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
svn_wc_conflict_version_t *arg2 = (svn_wc_conflict_version_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8048,9 +8214,9 @@ _wrap_svn_wc_conflict_description2_t_src_right_version_set(int argc, VALUE *argv
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","src_right_version", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","src_right_version", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_wc_conflict_version_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_wc_conflict_version_t const *","src_right_version", 2, argv[0] ));
@@ -8065,7 +8231,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description2_t_src_right_version_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *arg1 = (svn_wc_conflict_description2_t *) 0 ;
+ struct svn_wc_conflict_description2_t *arg1 = (struct svn_wc_conflict_description2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_conflict_version_t *result = 0 ;
@@ -8076,9 +8242,9 @@ _wrap_svn_wc_conflict_description2_t_src_right_version_get(int argc, VALUE *argv
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description2_t *","src_right_version", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description2_t *","src_right_version", 1, self ));
}
- arg1 = (svn_wc_conflict_description2_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description2_t *)(argp1);
result = (svn_wc_conflict_version_t *) ((arg1)->src_right_version);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
return vresult;
@@ -8106,13 +8272,13 @@ _wrap_svn_wc_conflict_description2_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_wc_conflict_description2_t(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description2_t *result = 0 ;
+ struct svn_wc_conflict_description2_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_wc_conflict_description2_t *)calloc(1, sizeof(svn_wc_conflict_description2_t));
+ result = (struct svn_wc_conflict_description2_t *)calloc(1, sizeof(struct svn_wc_conflict_description2_t));
DATA_PTR(self) = result;
@@ -8125,15 +8291,15 @@ fail:
SWIGINTERN void
-free_svn_wc_conflict_description2_t(svn_wc_conflict_description2_t *arg1) {
+free_svn_wc_conflict_description2_t(struct svn_wc_conflict_description2_t *arg1) {
free((char *) arg1);
}
-swig_class SwigClassSvn_wc_conflict_description_t;
+static swig_class SwigClassSvn_wc_conflict_description_t;
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_path_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8146,9 +8312,9 @@ _wrap_svn_wc_conflict_description_t_path_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","path", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","path", 2, argv[0] ));
@@ -8172,7 +8338,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_path_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -8183,9 +8349,9 @@ _wrap_svn_wc_conflict_description_t_path_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","path", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (char *) ((arg1)->path);
{
if (result) {
@@ -8202,7 +8368,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_node_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8214,9 +8380,9 @@ _wrap_svn_wc_conflict_description_t_node_kind_set(int argc, VALUE *argv, VALUE s
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","node_kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","node_kind", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_node_kind_t","node_kind", 2, argv[0] ));
@@ -8231,7 +8397,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_node_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_node_kind_t result;
@@ -8242,9 +8408,9 @@ _wrap_svn_wc_conflict_description_t_node_kind_get(int argc, VALUE *argv, VALUE s
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","node_kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","node_kind", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->node_kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -8255,7 +8421,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_wc_conflict_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8267,9 +8433,9 @@ _wrap_svn_wc_conflict_description_t_kind_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","kind", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_wc_conflict_kind_t","kind", 2, argv[0] ));
@@ -8284,7 +8450,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_conflict_kind_t result;
@@ -8295,9 +8461,9 @@ _wrap_svn_wc_conflict_description_t_kind_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","kind", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (svn_wc_conflict_kind_t) ((arg1)->kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -8308,7 +8474,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_property_name_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8321,9 +8487,9 @@ _wrap_svn_wc_conflict_description_t_property_name_set(int argc, VALUE *argv, VAL
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","property_name", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","property_name", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","property_name", 2, argv[0] ));
@@ -8347,7 +8513,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_property_name_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -8358,9 +8524,9 @@ _wrap_svn_wc_conflict_description_t_property_name_get(int argc, VALUE *argv, VAL
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","property_name", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","property_name", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (char *) ((arg1)->property_name);
{
if (result) {
@@ -8377,7 +8543,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_is_binary_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8387,9 +8553,9 @@ _wrap_svn_wc_conflict_description_t_is_binary_set(int argc, VALUE *argv, VALUE s
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","is_binary", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","is_binary", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->is_binary = arg2;
return Qnil;
@@ -8400,7 +8566,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_is_binary_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -8411,9 +8577,9 @@ _wrap_svn_wc_conflict_description_t_is_binary_get(int argc, VALUE *argv, VALUE s
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","is_binary", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","is_binary", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (svn_boolean_t) ((arg1)->is_binary);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -8424,7 +8590,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_mime_type_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8437,9 +8603,9 @@ _wrap_svn_wc_conflict_description_t_mime_type_set(int argc, VALUE *argv, VALUE s
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","mime_type", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","mime_type", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","mime_type", 2, argv[0] ));
@@ -8463,7 +8629,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_mime_type_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -8474,9 +8640,9 @@ _wrap_svn_wc_conflict_description_t_mime_type_get(int argc, VALUE *argv, VALUE s
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","mime_type", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","mime_type", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (char *) ((arg1)->mime_type);
{
if (result) {
@@ -8493,7 +8659,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_access_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_wc_adm_access_t *arg2 = (svn_wc_adm_access_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8505,9 +8671,9 @@ _wrap_svn_wc_conflict_description_t_access_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","access", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","access", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_wc_adm_access_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_wc_adm_access_t *","access", 2, argv[0] ));
@@ -8522,7 +8688,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_access_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_adm_access_t *result = 0 ;
@@ -8533,9 +8699,9 @@ _wrap_svn_wc_conflict_description_t_access_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","access", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","access", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (svn_wc_adm_access_t *) ((arg1)->access);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_wc_adm_access_t, 0 | 0 );
return vresult;
@@ -8546,7 +8712,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_action_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_wc_conflict_action_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8558,9 +8724,9 @@ _wrap_svn_wc_conflict_description_t_action_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","action", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","action", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_wc_conflict_action_t","action", 2, argv[0] ));
@@ -8575,7 +8741,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_action_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_conflict_action_t result;
@@ -8586,9 +8752,9 @@ _wrap_svn_wc_conflict_description_t_action_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","action", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","action", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (svn_wc_conflict_action_t) ((arg1)->action);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -8599,7 +8765,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_reason_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_wc_conflict_reason_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8611,9 +8777,9 @@ _wrap_svn_wc_conflict_description_t_reason_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","reason", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","reason", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_wc_conflict_reason_t","reason", 2, argv[0] ));
@@ -8628,7 +8794,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_reason_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_conflict_reason_t result;
@@ -8639,9 +8805,9 @@ _wrap_svn_wc_conflict_description_t_reason_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","reason", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","reason", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (svn_wc_conflict_reason_t) ((arg1)->reason);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -8652,7 +8818,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_base_file_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8665,9 +8831,9 @@ _wrap_svn_wc_conflict_description_t_base_file_set(int argc, VALUE *argv, VALUE s
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","base_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","base_file", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","base_file", 2, argv[0] ));
@@ -8691,7 +8857,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_base_file_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -8702,9 +8868,9 @@ _wrap_svn_wc_conflict_description_t_base_file_get(int argc, VALUE *argv, VALUE s
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","base_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","base_file", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (char *) ((arg1)->base_file);
{
if (result) {
@@ -8721,7 +8887,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_their_file_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8734,9 +8900,9 @@ _wrap_svn_wc_conflict_description_t_their_file_set(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","their_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","their_file", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","their_file", 2, argv[0] ));
@@ -8760,7 +8926,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_their_file_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -8771,9 +8937,9 @@ _wrap_svn_wc_conflict_description_t_their_file_get(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","their_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","their_file", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (char *) ((arg1)->their_file);
{
if (result) {
@@ -8790,7 +8956,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_my_file_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8803,9 +8969,9 @@ _wrap_svn_wc_conflict_description_t_my_file_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","my_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","my_file", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","my_file", 2, argv[0] ));
@@ -8829,7 +8995,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_my_file_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -8840,9 +9006,9 @@ _wrap_svn_wc_conflict_description_t_my_file_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","my_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","my_file", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (char *) ((arg1)->my_file);
{
if (result) {
@@ -8859,7 +9025,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_merged_file_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8872,9 +9038,9 @@ _wrap_svn_wc_conflict_description_t_merged_file_set(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","merged_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","merged_file", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","merged_file", 2, argv[0] ));
@@ -8898,7 +9064,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_merged_file_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -8909,9 +9075,9 @@ _wrap_svn_wc_conflict_description_t_merged_file_get(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","merged_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","merged_file", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (char *) ((arg1)->merged_file);
{
if (result) {
@@ -8928,7 +9094,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_operation_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_wc_operation_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8940,9 +9106,9 @@ _wrap_svn_wc_conflict_description_t_operation_set(int argc, VALUE *argv, VALUE s
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","operation", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","operation", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_wc_operation_t","operation", 2, argv[0] ));
@@ -8957,7 +9123,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_operation_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_operation_t result;
@@ -8968,9 +9134,9 @@ _wrap_svn_wc_conflict_description_t_operation_get(int argc, VALUE *argv, VALUE s
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","operation", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","operation", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (svn_wc_operation_t) ((arg1)->operation);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -8981,7 +9147,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_src_left_version_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_wc_conflict_version_t *arg2 = (svn_wc_conflict_version_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -8993,9 +9159,9 @@ _wrap_svn_wc_conflict_description_t_src_left_version_set(int argc, VALUE *argv,
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","src_left_version", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","src_left_version", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_wc_conflict_version_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_wc_conflict_version_t *","src_left_version", 2, argv[0] ));
@@ -9010,7 +9176,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_src_left_version_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_conflict_version_t *result = 0 ;
@@ -9021,9 +9187,9 @@ _wrap_svn_wc_conflict_description_t_src_left_version_get(int argc, VALUE *argv,
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","src_left_version", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","src_left_version", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (svn_wc_conflict_version_t *) ((arg1)->src_left_version);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
return vresult;
@@ -9034,7 +9200,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_src_right_version_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
svn_wc_conflict_version_t *arg2 = (svn_wc_conflict_version_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9046,9 +9212,9 @@ _wrap_svn_wc_conflict_description_t_src_right_version_set(int argc, VALUE *argv,
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","src_right_version", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","src_right_version", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_wc_conflict_version_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_wc_conflict_version_t *","src_right_version", 2, argv[0] ));
@@ -9063,7 +9229,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_description_t_src_right_version_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *arg1 = (svn_wc_conflict_description_t *) 0 ;
+ struct svn_wc_conflict_description_t *arg1 = (struct svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_conflict_version_t *result = 0 ;
@@ -9074,9 +9240,9 @@ _wrap_svn_wc_conflict_description_t_src_right_version_get(int argc, VALUE *argv,
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","src_right_version", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_description_t *","src_right_version", 1, self ));
}
- arg1 = (svn_wc_conflict_description_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_description_t *)(argp1);
result = (svn_wc_conflict_version_t *) ((arg1)->src_right_version);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
return vresult;
@@ -9104,13 +9270,13 @@ _wrap_svn_wc_conflict_description_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_wc_conflict_description_t(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_description_t *result = 0 ;
+ struct svn_wc_conflict_description_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_wc_conflict_description_t *)calloc(1, sizeof(svn_wc_conflict_description_t));
+ result = (struct svn_wc_conflict_description_t *)calloc(1, sizeof(struct svn_wc_conflict_description_t));
DATA_PTR(self) = result;
@@ -9123,7 +9289,7 @@ fail:
SWIGINTERN void
-free_svn_wc_conflict_description_t(svn_wc_conflict_description_t *arg1) {
+free_svn_wc_conflict_description_t(struct svn_wc_conflict_description_t *arg1) {
free((char *) arg1);
}
@@ -9649,11 +9815,11 @@ fail:
}
-swig_class SwigClassSvn_wc_conflict_result_t;
+static swig_class SwigClassSvn_wc_conflict_result_t;
SWIGINTERN VALUE
_wrap_svn_wc_conflict_result_t_choice_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_result_t *arg1 = (svn_wc_conflict_result_t *) 0 ;
+ struct svn_wc_conflict_result_t *arg1 = (struct svn_wc_conflict_result_t *) 0 ;
svn_wc_conflict_choice_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9665,9 +9831,9 @@ _wrap_svn_wc_conflict_result_t_choice_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_result_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_result_t *","choice", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_result_t *","choice", 1, self ));
}
- arg1 = (svn_wc_conflict_result_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_result_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_wc_conflict_choice_t","choice", 2, argv[0] ));
@@ -9682,7 +9848,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_result_t_choice_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_result_t *arg1 = (svn_wc_conflict_result_t *) 0 ;
+ struct svn_wc_conflict_result_t *arg1 = (struct svn_wc_conflict_result_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_conflict_choice_t result;
@@ -9693,9 +9859,9 @@ _wrap_svn_wc_conflict_result_t_choice_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_result_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_result_t *","choice", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_result_t *","choice", 1, self ));
}
- arg1 = (svn_wc_conflict_result_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_result_t *)(argp1);
result = (svn_wc_conflict_choice_t) ((arg1)->choice);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -9706,7 +9872,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_result_t_merged_file_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_result_t *arg1 = (svn_wc_conflict_result_t *) 0 ;
+ struct svn_wc_conflict_result_t *arg1 = (struct svn_wc_conflict_result_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9719,9 +9885,9 @@ _wrap_svn_wc_conflict_result_t_merged_file_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_result_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_result_t *","merged_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_result_t *","merged_file", 1, self ));
}
- arg1 = (svn_wc_conflict_result_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_result_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","merged_file", 2, argv[0] ));
@@ -9745,7 +9911,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_result_t_merged_file_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_result_t *arg1 = (svn_wc_conflict_result_t *) 0 ;
+ struct svn_wc_conflict_result_t *arg1 = (struct svn_wc_conflict_result_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -9756,9 +9922,9 @@ _wrap_svn_wc_conflict_result_t_merged_file_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_result_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_result_t *","merged_file", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_result_t *","merged_file", 1, self ));
}
- arg1 = (svn_wc_conflict_result_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_result_t *)(argp1);
result = (char *) ((arg1)->merged_file);
{
if (result) {
@@ -9775,7 +9941,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_result_t_save_merged_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_result_t *arg1 = (svn_wc_conflict_result_t *) 0 ;
+ struct svn_wc_conflict_result_t *arg1 = (struct svn_wc_conflict_result_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9785,9 +9951,9 @@ _wrap_svn_wc_conflict_result_t_save_merged_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_result_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_result_t *","save_merged", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_result_t *","save_merged", 1, self ));
}
- arg1 = (svn_wc_conflict_result_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_result_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->save_merged = arg2;
return Qnil;
@@ -9798,7 +9964,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_conflict_result_t_save_merged_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_result_t *arg1 = (svn_wc_conflict_result_t *) 0 ;
+ struct svn_wc_conflict_result_t *arg1 = (struct svn_wc_conflict_result_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -9809,9 +9975,9 @@ _wrap_svn_wc_conflict_result_t_save_merged_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_conflict_result_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_conflict_result_t *","save_merged", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_conflict_result_t *","save_merged", 1, self ));
}
- arg1 = (svn_wc_conflict_result_t *)(argp1);
+ arg1 = (struct svn_wc_conflict_result_t *)(argp1);
result = (svn_boolean_t) ((arg1)->save_merged);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -9839,13 +10005,13 @@ _wrap_svn_wc_conflict_result_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_wc_conflict_result_t(int argc, VALUE *argv, VALUE self) {
- svn_wc_conflict_result_t *result = 0 ;
+ struct svn_wc_conflict_result_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_wc_conflict_result_t *)calloc(1, sizeof(svn_wc_conflict_result_t));
+ result = (struct svn_wc_conflict_result_t *)calloc(1, sizeof(struct svn_wc_conflict_result_t));
DATA_PTR(self) = result;
@@ -9858,7 +10024,7 @@ fail:
SWIGINTERN void
-free_svn_wc_conflict_result_t(svn_wc_conflict_result_t *arg1) {
+free_svn_wc_conflict_result_t(struct svn_wc_conflict_result_t *arg1) {
free((char *) arg1);
}
@@ -9927,11 +10093,11 @@ fail:
}
-swig_class SwigClassSvn_wc_diff_callbacks4_t;
+static swig_class SwigClassSvn_wc_diff_callbacks4_t;
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks4_t_file_opened_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,void *,apr_pool_t *) = (svn_error_t *(*)(svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9941,9 +10107,9 @@ _wrap_svn_wc_diff_callbacks4_t_file_opened_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks4_t *","file_opened", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks4_t *","file_opened", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_boolean_t_p_svn_boolean_t_p_q_const__char_svn_revnum_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -9959,7 +10125,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks4_t_file_opened_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,void *,apr_pool_t *) = 0 ;
@@ -9970,9 +10136,9 @@ _wrap_svn_wc_diff_callbacks4_t_file_opened_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks4_t *","file_opened", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks4_t *","file_opened", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
result = (svn_error_t *(*)(svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,void *,apr_pool_t *)) ((arg1)->file_opened);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_boolean_t_p_svn_boolean_t_p_q_const__char_svn_revnum_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -9983,7 +10149,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks4_t_file_changed_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -9993,9 +10159,9 @@ _wrap_svn_wc_diff_callbacks4_t_file_changed_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks4_t *","file_changed", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks4_t *","file_changed", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10011,7 +10177,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks4_t_file_changed_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *) = 0 ;
@@ -10022,9 +10188,9 @@ _wrap_svn_wc_diff_callbacks4_t_file_changed_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks4_t *","file_changed", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks4_t *","file_changed", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *)) ((arg1)->file_changed);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -10035,7 +10201,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks4_t_file_added_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,char const *,svn_revnum_t,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,char const *,svn_revnum_t,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10045,9 +10211,9 @@ _wrap_svn_wc_diff_callbacks4_t_file_added_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks4_t *","file_added", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks4_t *","file_added", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__apr_array_header_t_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10063,7 +10229,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks4_t_file_added_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,char const *,svn_revnum_t,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *) = 0 ;
@@ -10074,9 +10240,9 @@ _wrap_svn_wc_diff_callbacks4_t_file_added_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks4_t *","file_added", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks4_t *","file_added", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,char const *,svn_revnum_t,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *)) ((arg1)->file_added);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_p_q_const__apr_array_header_t_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -10087,7 +10253,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks4_t_file_deleted_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10097,9 +10263,9 @@ _wrap_svn_wc_diff_callbacks4_t_file_deleted_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks4_t *","file_deleted", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks4_t *","file_deleted", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10115,7 +10281,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks4_t_file_deleted_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *,apr_pool_t *) = 0 ;
@@ -10126,9 +10292,9 @@ _wrap_svn_wc_diff_callbacks4_t_file_deleted_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks4_t *","file_deleted", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks4_t *","file_deleted", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *,apr_pool_t *)) ((arg1)->file_deleted);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -10139,7 +10305,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks4_t_dir_deleted_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *,apr_pool_t *) = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10149,9 +10315,9 @@ _wrap_svn_wc_diff_callbacks4_t_dir_deleted_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks4_t *","dir_deleted", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks4_t *","dir_deleted", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10167,7 +10333,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks4_t_dir_deleted_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *,apr_pool_t *) = 0 ;
@@ -10178,9 +10344,9 @@ _wrap_svn_wc_diff_callbacks4_t_dir_deleted_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks4_t *","dir_deleted", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks4_t *","dir_deleted", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *,apr_pool_t *)) ((arg1)->dir_deleted);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -10191,7 +10357,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks4_t_dir_opened_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_boolean_t *,svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,void *,apr_pool_t *) = (svn_error_t *(*)(svn_boolean_t *,svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10201,9 +10367,9 @@ _wrap_svn_wc_diff_callbacks4_t_dir_opened_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks4_t *","dir_opened", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks4_t *","dir_opened", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_boolean_t_p_svn_boolean_t_p_svn_boolean_t_p_q_const__char_svn_revnum_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10219,7 +10385,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks4_t_dir_opened_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_boolean_t *,svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,void *,apr_pool_t *) = 0 ;
@@ -10230,9 +10396,9 @@ _wrap_svn_wc_diff_callbacks4_t_dir_opened_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks4_t *","dir_opened", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks4_t *","dir_opened", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
result = (svn_error_t *(*)(svn_boolean_t *,svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,void *,apr_pool_t *)) ((arg1)->dir_opened);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_boolean_t_p_svn_boolean_t_p_svn_boolean_t_p_q_const__char_svn_revnum_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -10243,7 +10409,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks4_t_dir_added_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_notify_state_t *,svn_boolean_t *,svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,char const *,svn_revnum_t,void *,apr_pool_t *) = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,char const *,svn_revnum_t,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10253,9 +10419,9 @@ _wrap_svn_wc_diff_callbacks4_t_dir_added_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks4_t *","dir_added", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks4_t *","dir_added", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_boolean_t_p_svn_boolean_t_p_svn_boolean_t_p_q_const__char_svn_revnum_t_p_q_const__char_svn_revnum_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10271,7 +10437,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks4_t_dir_added_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_notify_state_t *,svn_boolean_t *,svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,char const *,svn_revnum_t,void *,apr_pool_t *) = 0 ;
@@ -10282,9 +10448,9 @@ _wrap_svn_wc_diff_callbacks4_t_dir_added_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks4_t *","dir_added", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks4_t *","dir_added", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,svn_boolean_t *,svn_boolean_t *,char const *,svn_revnum_t,char const *,svn_revnum_t,void *,apr_pool_t *)) ((arg1)->dir_added);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_boolean_t_p_svn_boolean_t_p_svn_boolean_t_p_q_const__char_svn_revnum_t_p_q_const__char_svn_revnum_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -10295,7 +10461,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks4_t_dir_props_changed_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_boolean_t,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *) = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_boolean_t,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10305,9 +10471,9 @@ _wrap_svn_wc_diff_callbacks4_t_dir_props_changed_set(int argc, VALUE *argv, VALU
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks4_t *","dir_props_changed", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks4_t *","dir_props_changed", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_svn_boolean_t_p_q_const__apr_array_header_t_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10323,7 +10489,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks4_t_dir_props_changed_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_boolean_t,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *) = 0 ;
@@ -10334,9 +10500,9 @@ _wrap_svn_wc_diff_callbacks4_t_dir_props_changed_get(int argc, VALUE *argv, VALU
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks4_t *","dir_props_changed", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks4_t *","dir_props_changed", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_boolean_t,apr_array_header_t const *,apr_hash_t *,void *,apr_pool_t *)) ((arg1)->dir_props_changed);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_svn_boolean_t_p_q_const__apr_array_header_t_p_apr_hash_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -10347,7 +10513,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks4_t_dir_closed_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_boolean_t,void *,apr_pool_t *) = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_boolean_t,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10357,9 +10523,9 @@ _wrap_svn_wc_diff_callbacks4_t_dir_closed_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks4_t *","dir_closed", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks4_t *","dir_closed", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_svn_boolean_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10375,7 +10541,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks4_t_dir_closed_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks4_t *arg1 = (svn_wc_diff_callbacks4_t *) 0 ;
+ struct svn_wc_diff_callbacks4_t *arg1 = (struct svn_wc_diff_callbacks4_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_boolean_t,void *,apr_pool_t *) = 0 ;
@@ -10386,9 +10552,9 @@ _wrap_svn_wc_diff_callbacks4_t_dir_closed_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks4_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks4_t *","dir_closed", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks4_t *","dir_closed", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks4_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks4_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_boolean_t,void *,apr_pool_t *)) ((arg1)->dir_closed);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_svn_boolean_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -10416,13 +10582,13 @@ _wrap_svn_wc_diff_callbacks4_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_wc_diff_callbacks4_t(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks4_t *result = 0 ;
+ struct svn_wc_diff_callbacks4_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_wc_diff_callbacks4_t *)calloc(1, sizeof(svn_wc_diff_callbacks4_t));
+ result = (struct svn_wc_diff_callbacks4_t *)calloc(1, sizeof(struct svn_wc_diff_callbacks4_t));
DATA_PTR(self) = result;
@@ -10435,15 +10601,15 @@ fail:
SWIGINTERN void
-free_svn_wc_diff_callbacks4_t(svn_wc_diff_callbacks4_t *arg1) {
+free_svn_wc_diff_callbacks4_t(struct svn_wc_diff_callbacks4_t *arg1) {
free((char *) arg1);
}
-swig_class SwigClassSvn_wc_diff_callbacks3_t;
+static swig_class SwigClassSvn_wc_diff_callbacks3_t;
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks3_t_file_changed_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10453,9 +10619,9 @@ _wrap_svn_wc_diff_callbacks3_t_file_changed_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks3_t *","file_changed", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks3_t *","file_changed", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10471,7 +10637,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks3_t_file_changed_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = 0 ;
@@ -10482,9 +10648,9 @@ _wrap_svn_wc_diff_callbacks3_t_file_changed_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks3_t *","file_changed", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks3_t *","file_changed", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) ((arg1)->file_changed);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t);
return vresult;
@@ -10495,7 +10661,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks3_t_file_added_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10505,9 +10671,9 @@ _wrap_svn_wc_diff_callbacks3_t_file_added_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks3_t *","file_added", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks3_t *","file_added", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10523,7 +10689,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks3_t_file_added_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = 0 ;
@@ -10534,9 +10700,9 @@ _wrap_svn_wc_diff_callbacks3_t_file_added_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks3_t *","file_added", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks3_t *","file_added", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) ((arg1)->file_added);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t);
return vresult;
@@ -10547,7 +10713,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks3_t_file_deleted_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10557,9 +10723,9 @@ _wrap_svn_wc_diff_callbacks3_t_file_deleted_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks3_t *","file_deleted", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks3_t *","file_deleted", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_hash_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10575,7 +10741,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks3_t_file_deleted_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *) = 0 ;
@@ -10586,9 +10752,9 @@ _wrap_svn_wc_diff_callbacks3_t_file_deleted_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks3_t *","file_deleted", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks3_t *","file_deleted", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *)) ((arg1)->file_deleted);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_hash_t_p_void__p_svn_error_t);
return vresult;
@@ -10599,7 +10765,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks3_t_dir_added_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_revnum_t,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_revnum_t,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10609,9 +10775,9 @@ _wrap_svn_wc_diff_callbacks3_t_dir_added_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks3_t *","dir_added", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks3_t *","dir_added", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_svn_revnum_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10627,7 +10793,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks3_t_dir_added_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_revnum_t,void *) = 0 ;
@@ -10638,9 +10804,9 @@ _wrap_svn_wc_diff_callbacks3_t_dir_added_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks3_t *","dir_added", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks3_t *","dir_added", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,svn_revnum_t,void *)) ((arg1)->dir_added);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_svn_revnum_t_p_void__p_svn_error_t);
return vresult;
@@ -10651,7 +10817,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks3_t_dir_deleted_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10661,9 +10827,9 @@ _wrap_svn_wc_diff_callbacks3_t_dir_deleted_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks3_t *","dir_deleted", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks3_t *","dir_deleted", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10679,7 +10845,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks3_t_dir_deleted_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *) = 0 ;
@@ -10690,9 +10856,9 @@ _wrap_svn_wc_diff_callbacks3_t_dir_deleted_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks3_t *","dir_deleted", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks3_t *","dir_deleted", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *)) ((arg1)->dir_deleted);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_void__p_svn_error_t);
return vresult;
@@ -10703,7 +10869,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks3_t_dir_props_changed_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10713,9 +10879,9 @@ _wrap_svn_wc_diff_callbacks3_t_dir_props_changed_set(int argc, VALUE *argv, VALU
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks3_t *","dir_props_changed", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks3_t *","dir_props_changed", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10731,7 +10897,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks3_t_dir_props_changed_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = 0 ;
@@ -10742,9 +10908,9 @@ _wrap_svn_wc_diff_callbacks3_t_dir_props_changed_get(int argc, VALUE *argv, VALU
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks3_t *","dir_props_changed", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks3_t *","dir_props_changed", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) ((arg1)->dir_props_changed);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t);
return vresult;
@@ -10755,7 +10921,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks3_t_dir_opened_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_boolean_t *,char const *,svn_revnum_t,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_boolean_t *,char const *,svn_revnum_t,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10765,9 +10931,9 @@ _wrap_svn_wc_diff_callbacks3_t_dir_opened_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks3_t *","dir_opened", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks3_t *","dir_opened", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_boolean_t_p_q_const__char_svn_revnum_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10783,7 +10949,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks3_t_dir_opened_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_boolean_t *,char const *,svn_revnum_t,void *) = 0 ;
@@ -10794,9 +10960,9 @@ _wrap_svn_wc_diff_callbacks3_t_dir_opened_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks3_t *","dir_opened", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks3_t *","dir_opened", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_boolean_t *,char const *,svn_revnum_t,void *)) ((arg1)->dir_opened);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_boolean_t_p_q_const__char_svn_revnum_t_p_void__p_svn_error_t);
return vresult;
@@ -10807,7 +10973,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks3_t_dir_closed_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10817,9 +10983,9 @@ _wrap_svn_wc_diff_callbacks3_t_dir_closed_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks3_t *","dir_closed", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks3_t *","dir_closed", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10835,7 +11001,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks3_t_dir_closed_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks3_t *arg1 = (svn_wc_diff_callbacks3_t *) 0 ;
+ struct svn_wc_diff_callbacks3_t *arg1 = (struct svn_wc_diff_callbacks3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *) = 0 ;
@@ -10846,9 +11012,9 @@ _wrap_svn_wc_diff_callbacks3_t_dir_closed_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks3_t *","dir_closed", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks3_t *","dir_closed", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks3_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks3_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,svn_boolean_t *,char const *,void *)) ((arg1)->dir_closed);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_svn_boolean_t_p_q_const__char_p_void__p_svn_error_t);
return vresult;
@@ -10876,13 +11042,13 @@ _wrap_svn_wc_diff_callbacks3_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_wc_diff_callbacks3_t(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks3_t *result = 0 ;
+ struct svn_wc_diff_callbacks3_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_wc_diff_callbacks3_t *)calloc(1, sizeof(svn_wc_diff_callbacks3_t));
+ result = (struct svn_wc_diff_callbacks3_t *)calloc(1, sizeof(struct svn_wc_diff_callbacks3_t));
DATA_PTR(self) = result;
@@ -10895,15 +11061,15 @@ fail:
SWIGINTERN void
-free_svn_wc_diff_callbacks3_t(svn_wc_diff_callbacks3_t *arg1) {
+free_svn_wc_diff_callbacks3_t(struct svn_wc_diff_callbacks3_t *arg1) {
free((char *) arg1);
}
-swig_class SwigClassSvn_wc_diff_callbacks2_t;
+static swig_class SwigClassSvn_wc_diff_callbacks2_t;
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks2_t_file_changed_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10913,9 +11079,9 @@ _wrap_svn_wc_diff_callbacks2_t_file_changed_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks2_t *","file_changed", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks2_t *","file_changed", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10931,7 +11097,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks2_t_file_changed_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = 0 ;
@@ -10942,9 +11108,9 @@ _wrap_svn_wc_diff_callbacks2_t_file_changed_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks2_t *","file_changed", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks2_t *","file_changed", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) ((arg1)->file_changed);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t);
return vresult;
@@ -10955,7 +11121,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks2_t_file_added_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -10965,9 +11131,9 @@ _wrap_svn_wc_diff_callbacks2_t_file_added_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks2_t *","file_added", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks2_t *","file_added", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -10983,7 +11149,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks2_t_file_added_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = 0 ;
@@ -10994,9 +11160,9 @@ _wrap_svn_wc_diff_callbacks2_t_file_added_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks2_t *","file_added", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks2_t *","file_added", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) ((arg1)->file_added);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t);
return vresult;
@@ -11007,7 +11173,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks2_t_file_deleted_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11017,9 +11183,9 @@ _wrap_svn_wc_diff_callbacks2_t_file_deleted_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks2_t *","file_deleted", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks2_t *","file_deleted", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_hash_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11035,7 +11201,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks2_t_file_deleted_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *) = 0 ;
@@ -11046,9 +11212,9 @@ _wrap_svn_wc_diff_callbacks2_t_file_deleted_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks2_t *","file_deleted", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks2_t *","file_deleted", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,char const *,char const *,apr_hash_t *,void *)) ((arg1)->file_deleted);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_apr_hash_t_p_void__p_svn_error_t);
return vresult;
@@ -11059,7 +11225,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks2_t_dir_added_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,svn_revnum_t,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,svn_revnum_t,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11069,9 +11235,9 @@ _wrap_svn_wc_diff_callbacks2_t_dir_added_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks2_t *","dir_added", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks2_t *","dir_added", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_svn_revnum_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11087,7 +11253,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks2_t_dir_added_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,svn_revnum_t,void *) = 0 ;
@@ -11098,9 +11264,9 @@ _wrap_svn_wc_diff_callbacks2_t_dir_added_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks2_t *","dir_added", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks2_t *","dir_added", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,svn_revnum_t,void *)) ((arg1)->dir_added);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_svn_revnum_t_p_void__p_svn_error_t);
return vresult;
@@ -11111,7 +11277,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks2_t_dir_deleted_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11121,9 +11287,9 @@ _wrap_svn_wc_diff_callbacks2_t_dir_deleted_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks2_t *","dir_deleted", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks2_t *","dir_deleted", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11139,7 +11305,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks2_t_dir_deleted_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,void *) = 0 ;
@@ -11150,9 +11316,9 @@ _wrap_svn_wc_diff_callbacks2_t_dir_deleted_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks2_t *","dir_deleted", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks2_t *","dir_deleted", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,void *)) ((arg1)->dir_deleted);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_void__p_svn_error_t);
return vresult;
@@ -11163,7 +11329,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks2_t_dir_props_changed_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11173,9 +11339,9 @@ _wrap_svn_wc_diff_callbacks2_t_dir_props_changed_set(int argc, VALUE *argv, VALU
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks2_t *","dir_props_changed", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks2_t *","dir_props_changed", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11191,7 +11357,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks2_t_dir_props_changed_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks2_t *arg1 = (svn_wc_diff_callbacks2_t *) 0 ;
+ struct svn_wc_diff_callbacks2_t *arg1 = (struct svn_wc_diff_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = 0 ;
@@ -11202,9 +11368,9 @@ _wrap_svn_wc_diff_callbacks2_t_dir_props_changed_get(int argc, VALUE *argv, VALU
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks2_t *","dir_props_changed", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks2_t *","dir_props_changed", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks2_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) ((arg1)->dir_props_changed);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t);
return vresult;
@@ -11232,13 +11398,13 @@ _wrap_svn_wc_diff_callbacks2_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_wc_diff_callbacks2_t(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks2_t *result = 0 ;
+ struct svn_wc_diff_callbacks2_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_wc_diff_callbacks2_t *)calloc(1, sizeof(svn_wc_diff_callbacks2_t));
+ result = (struct svn_wc_diff_callbacks2_t *)calloc(1, sizeof(struct svn_wc_diff_callbacks2_t));
DATA_PTR(self) = result;
@@ -11251,15 +11417,15 @@ fail:
SWIGINTERN void
-free_svn_wc_diff_callbacks2_t(svn_wc_diff_callbacks2_t *arg1) {
+free_svn_wc_diff_callbacks2_t(struct svn_wc_diff_callbacks2_t *arg1) {
free((char *) arg1);
}
-swig_class SwigClassSvn_wc_diff_callbacks_t;
+static swig_class SwigClassSvn_wc_diff_callbacks_t;
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks_t_file_changed_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11269,9 +11435,9 @@ _wrap_svn_wc_diff_callbacks_t_file_changed_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks_t *","file_changed", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks_t *","file_changed", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11287,7 +11453,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks_t_file_changed_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,void *) = 0 ;
@@ -11298,9 +11464,9 @@ _wrap_svn_wc_diff_callbacks_t_file_changed_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks_t *","file_changed", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks_t *","file_changed", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,void *)) ((arg1)->file_changed);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t);
return vresult;
@@ -11311,7 +11477,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks_t_file_added_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11321,9 +11487,9 @@ _wrap_svn_wc_diff_callbacks_t_file_added_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks_t *","file_added", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks_t *","file_added", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11339,7 +11505,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks_t_file_added_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,void *) = 0 ;
@@ -11350,9 +11516,9 @@ _wrap_svn_wc_diff_callbacks_t_file_added_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks_t *","file_added", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks_t *","file_added", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,svn_revnum_t,svn_revnum_t,char const *,char const *,void *)) ((arg1)->file_added);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__char_p_q_const__char_svn_revnum_t_svn_revnum_t_p_q_const__char_p_q_const__char_p_void__p_svn_error_t);
return vresult;
@@ -11363,7 +11529,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks_t_file_deleted_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,char const *,char const *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,char const *,char const *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11373,9 +11539,9 @@ _wrap_svn_wc_diff_callbacks_t_file_deleted_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks_t *","file_deleted", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks_t *","file_deleted", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11391,7 +11557,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks_t_file_deleted_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,char const *,char const *,void *) = 0 ;
@@ -11402,9 +11568,9 @@ _wrap_svn_wc_diff_callbacks_t_file_deleted_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks_t *","file_deleted", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks_t *","file_deleted", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,char const *,char const *,char const *,char const *,void *)) ((arg1)->file_deleted);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_void__p_svn_error_t);
return vresult;
@@ -11415,7 +11581,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks_t_dir_added_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,svn_revnum_t,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,svn_revnum_t,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11425,9 +11591,9 @@ _wrap_svn_wc_diff_callbacks_t_dir_added_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks_t *","dir_added", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks_t *","dir_added", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_svn_revnum_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11443,7 +11609,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks_t_dir_added_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,svn_revnum_t,void *) = 0 ;
@@ -11454,9 +11620,9 @@ _wrap_svn_wc_diff_callbacks_t_dir_added_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks_t *","dir_added", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks_t *","dir_added", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,svn_revnum_t,void *)) ((arg1)->dir_added);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_svn_revnum_t_p_void__p_svn_error_t);
return vresult;
@@ -11467,7 +11633,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks_t_dir_deleted_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11477,9 +11643,9 @@ _wrap_svn_wc_diff_callbacks_t_dir_deleted_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks_t *","dir_deleted", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks_t *","dir_deleted", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11495,7 +11661,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks_t_dir_deleted_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,void *) = 0 ;
@@ -11506,9 +11672,9 @@ _wrap_svn_wc_diff_callbacks_t_dir_deleted_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks_t *","dir_deleted", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks_t *","dir_deleted", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,void *)) ((arg1)->dir_deleted);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_void__p_svn_error_t);
return vresult;
@@ -11519,7 +11685,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks_t_props_changed_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
svn_error_t *(*arg2)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -11529,9 +11695,9 @@ _wrap_svn_wc_diff_callbacks_t_props_changed_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks_t *","props_changed", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks_t *","props_changed", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -11547,7 +11713,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_diff_callbacks_t_props_changed_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks_t *arg1 = (svn_wc_diff_callbacks_t *) 0 ;
+ struct svn_wc_diff_callbacks_t *arg1 = (struct svn_wc_diff_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *) = 0 ;
@@ -11558,9 +11724,9 @@ _wrap_svn_wc_diff_callbacks_t_props_changed_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_diff_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_diff_callbacks_t *","props_changed", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_diff_callbacks_t *","props_changed", 1, self ));
}
- arg1 = (svn_wc_diff_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_diff_callbacks_t *)(argp1);
result = (svn_error_t *(*)(svn_wc_adm_access_t *,svn_wc_notify_state_t *,char const *,apr_array_header_t const *,apr_hash_t *,void *)) ((arg1)->props_changed);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_svn_wc_adm_access_t_p_svn_wc_notify_state_t_p_q_const__char_p_q_const__apr_array_header_t_p_apr_hash_t_p_void__p_svn_error_t);
return vresult;
@@ -11588,13 +11754,13 @@ _wrap_svn_wc_diff_callbacks_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_wc_diff_callbacks_t(int argc, VALUE *argv, VALUE self) {
- svn_wc_diff_callbacks_t *result = 0 ;
+ struct svn_wc_diff_callbacks_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_wc_diff_callbacks_t *)calloc(1, sizeof(svn_wc_diff_callbacks_t));
+ result = (struct svn_wc_diff_callbacks_t *)calloc(1, sizeof(struct svn_wc_diff_callbacks_t));
DATA_PTR(self) = result;
@@ -11607,7 +11773,7 @@ fail:
SWIGINTERN void
-free_svn_wc_diff_callbacks_t(svn_wc_diff_callbacks_t *arg1) {
+free_svn_wc_diff_callbacks_t(struct svn_wc_diff_callbacks_t *arg1) {
free((char *) arg1);
}
@@ -12161,11 +12327,11 @@ fail:
}
-swig_class SwigClassSvn_wc_entry_t;
+static swig_class SwigClassSvn_wc_entry_t;
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_name_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12178,9 +12344,9 @@ _wrap_svn_wc_entry_t_name_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","name", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","name", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","name", 2, argv[0] ));
@@ -12204,7 +12370,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_name_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -12215,9 +12381,9 @@ _wrap_svn_wc_entry_t_name_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","name", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","name", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->name);
{
if (result) {
@@ -12234,7 +12400,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_revision_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12246,9 +12412,9 @@ _wrap_svn_wc_entry_t_revision_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","revision", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","revision", 2, argv[0] ));
@@ -12263,7 +12429,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_revision_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -12274,9 +12440,9 @@ _wrap_svn_wc_entry_t_revision_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","revision", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_revnum_t) ((arg1)->revision);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -12287,7 +12453,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_url_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12300,9 +12466,9 @@ _wrap_svn_wc_entry_t_url_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","url", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","url", 2, argv[0] ));
@@ -12326,7 +12492,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_url_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -12337,9 +12503,9 @@ _wrap_svn_wc_entry_t_url_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","url", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->url);
{
if (result) {
@@ -12356,7 +12522,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_repos_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12366,9 +12532,9 @@ _wrap_svn_wc_entry_t_repos_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","repos", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","repos", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
{
if (NIL_P(argv[0])) {
arg2 = NULL;
@@ -12392,7 +12558,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_repos_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -12403,9 +12569,9 @@ _wrap_svn_wc_entry_t_repos_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","repos", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","repos", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->repos);
{
if (result) {
@@ -12422,7 +12588,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_uuid_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12432,9 +12598,9 @@ _wrap_svn_wc_entry_t_uuid_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","uuid", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","uuid", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
{
if (NIL_P(argv[0])) {
arg2 = NULL;
@@ -12458,7 +12624,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_uuid_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -12469,9 +12635,9 @@ _wrap_svn_wc_entry_t_uuid_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","uuid", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","uuid", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->uuid);
{
if (result) {
@@ -12488,7 +12654,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12500,9 +12666,9 @@ _wrap_svn_wc_entry_t_kind_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","kind", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_node_kind_t","kind", 2, argv[0] ));
@@ -12517,7 +12683,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_node_kind_t result;
@@ -12528,9 +12694,9 @@ _wrap_svn_wc_entry_t_kind_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","kind", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -12541,7 +12707,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_schedule_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_wc_schedule_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12553,9 +12719,9 @@ _wrap_svn_wc_entry_t_schedule_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","schedule", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","schedule", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_wc_schedule_t","schedule", 2, argv[0] ));
@@ -12570,7 +12736,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_schedule_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_schedule_t result;
@@ -12581,9 +12747,9 @@ _wrap_svn_wc_entry_t_schedule_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","schedule", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","schedule", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_wc_schedule_t) ((arg1)->schedule);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -12594,7 +12760,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_copied_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12604,9 +12770,9 @@ _wrap_svn_wc_entry_t_copied_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","copied", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","copied", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->copied = arg2;
return Qnil;
@@ -12617,7 +12783,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_copied_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -12628,9 +12794,9 @@ _wrap_svn_wc_entry_t_copied_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","copied", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","copied", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_boolean_t) ((arg1)->copied);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -12641,7 +12807,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_deleted_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12651,9 +12817,9 @@ _wrap_svn_wc_entry_t_deleted_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","deleted", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","deleted", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->deleted = arg2;
return Qnil;
@@ -12664,7 +12830,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_deleted_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -12675,9 +12841,9 @@ _wrap_svn_wc_entry_t_deleted_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","deleted", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","deleted", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_boolean_t) ((arg1)->deleted);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -12688,7 +12854,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_absent_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12698,9 +12864,9 @@ _wrap_svn_wc_entry_t_absent_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","absent", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","absent", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->absent = arg2;
return Qnil;
@@ -12711,7 +12877,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_absent_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -12722,9 +12888,9 @@ _wrap_svn_wc_entry_t_absent_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","absent", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","absent", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_boolean_t) ((arg1)->absent);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -12735,7 +12901,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_incomplete_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12745,9 +12911,9 @@ _wrap_svn_wc_entry_t_incomplete_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","incomplete", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","incomplete", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->incomplete = arg2;
return Qnil;
@@ -12758,7 +12924,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_incomplete_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -12769,9 +12935,9 @@ _wrap_svn_wc_entry_t_incomplete_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","incomplete", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","incomplete", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_boolean_t) ((arg1)->incomplete);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -12782,7 +12948,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_copyfrom_url_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12792,9 +12958,9 @@ _wrap_svn_wc_entry_t_copyfrom_url_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","copyfrom_url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","copyfrom_url", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
{
if (NIL_P(argv[0])) {
arg2 = NULL;
@@ -12818,7 +12984,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_copyfrom_url_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -12829,9 +12995,9 @@ _wrap_svn_wc_entry_t_copyfrom_url_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","copyfrom_url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","copyfrom_url", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->copyfrom_url);
{
if (result) {
@@ -12848,7 +13014,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_copyfrom_rev_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12860,9 +13026,9 @@ _wrap_svn_wc_entry_t_copyfrom_rev_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","copyfrom_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","copyfrom_rev", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","copyfrom_rev", 2, argv[0] ));
@@ -12877,7 +13043,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_copyfrom_rev_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -12888,9 +13054,9 @@ _wrap_svn_wc_entry_t_copyfrom_rev_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","copyfrom_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","copyfrom_rev", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_revnum_t) ((arg1)->copyfrom_rev);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -12901,7 +13067,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_conflict_old_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12914,9 +13080,9 @@ _wrap_svn_wc_entry_t_conflict_old_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","conflict_old", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","conflict_old", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","conflict_old", 2, argv[0] ));
@@ -12940,7 +13106,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_conflict_old_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -12951,9 +13117,9 @@ _wrap_svn_wc_entry_t_conflict_old_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","conflict_old", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","conflict_old", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->conflict_old);
{
if (result) {
@@ -12970,7 +13136,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_conflict_new_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -12983,9 +13149,9 @@ _wrap_svn_wc_entry_t_conflict_new_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","conflict_new", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","conflict_new", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","conflict_new", 2, argv[0] ));
@@ -13009,7 +13175,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_conflict_new_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -13020,9 +13186,9 @@ _wrap_svn_wc_entry_t_conflict_new_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","conflict_new", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","conflict_new", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->conflict_new);
{
if (result) {
@@ -13039,7 +13205,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_conflict_wrk_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13052,9 +13218,9 @@ _wrap_svn_wc_entry_t_conflict_wrk_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","conflict_wrk", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","conflict_wrk", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","conflict_wrk", 2, argv[0] ));
@@ -13078,7 +13244,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_conflict_wrk_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -13089,9 +13255,9 @@ _wrap_svn_wc_entry_t_conflict_wrk_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","conflict_wrk", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","conflict_wrk", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->conflict_wrk);
{
if (result) {
@@ -13108,7 +13274,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_prejfile_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13121,9 +13287,9 @@ _wrap_svn_wc_entry_t_prejfile_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","prejfile", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","prejfile", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","prejfile", 2, argv[0] ));
@@ -13147,7 +13313,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_prejfile_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -13158,9 +13324,9 @@ _wrap_svn_wc_entry_t_prejfile_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","prejfile", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","prejfile", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->prejfile);
{
if (result) {
@@ -13177,7 +13343,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_text_time_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13187,9 +13353,9 @@ _wrap_svn_wc_entry_t_text_time_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","text_time", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","text_time", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
{
arg2 = (apr_time_t)NUM2LL(argv[0]);
}
@@ -13202,7 +13368,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_text_time_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_time_t result;
@@ -13213,9 +13379,9 @@ _wrap_svn_wc_entry_t_text_time_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","text_time", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","text_time", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = ((arg1)->text_time);
{
vresult = LL2NUM((apr_time_t)(result));
@@ -13228,7 +13394,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_prop_time_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13238,9 +13404,9 @@ _wrap_svn_wc_entry_t_prop_time_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","prop_time", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","prop_time", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
{
arg2 = (apr_time_t)NUM2LL(argv[0]);
}
@@ -13253,7 +13419,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_prop_time_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_time_t result;
@@ -13264,9 +13430,9 @@ _wrap_svn_wc_entry_t_prop_time_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","prop_time", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","prop_time", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = ((arg1)->prop_time);
{
vresult = LL2NUM((apr_time_t)(result));
@@ -13279,7 +13445,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_checksum_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13292,9 +13458,9 @@ _wrap_svn_wc_entry_t_checksum_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","checksum", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","checksum", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","checksum", 2, argv[0] ));
@@ -13318,7 +13484,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_checksum_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -13329,9 +13495,9 @@ _wrap_svn_wc_entry_t_checksum_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","checksum", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","checksum", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->checksum);
{
if (result) {
@@ -13348,7 +13514,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_cmt_rev_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13360,9 +13526,9 @@ _wrap_svn_wc_entry_t_cmt_rev_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","cmt_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","cmt_rev", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","cmt_rev", 2, argv[0] ));
@@ -13377,7 +13543,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_cmt_rev_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -13388,9 +13554,9 @@ _wrap_svn_wc_entry_t_cmt_rev_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","cmt_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","cmt_rev", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_revnum_t) ((arg1)->cmt_rev);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -13401,7 +13567,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_cmt_date_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13411,9 +13577,9 @@ _wrap_svn_wc_entry_t_cmt_date_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","cmt_date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","cmt_date", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
{
arg2 = (apr_time_t)NUM2LL(argv[0]);
}
@@ -13426,7 +13592,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_cmt_date_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_time_t result;
@@ -13437,9 +13603,9 @@ _wrap_svn_wc_entry_t_cmt_date_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","cmt_date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","cmt_date", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = ((arg1)->cmt_date);
{
vresult = LL2NUM((apr_time_t)(result));
@@ -13452,7 +13618,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_cmt_author_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13465,9 +13631,9 @@ _wrap_svn_wc_entry_t_cmt_author_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","cmt_author", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","cmt_author", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","cmt_author", 2, argv[0] ));
@@ -13491,7 +13657,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_cmt_author_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -13502,9 +13668,9 @@ _wrap_svn_wc_entry_t_cmt_author_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","cmt_author", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","cmt_author", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->cmt_author);
{
if (result) {
@@ -13521,7 +13687,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_lock_token_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13531,9 +13697,9 @@ _wrap_svn_wc_entry_t_lock_token_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","lock_token", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","lock_token", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
{
if (NIL_P(argv[0])) {
arg2 = NULL;
@@ -13557,7 +13723,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_lock_token_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -13568,9 +13734,9 @@ _wrap_svn_wc_entry_t_lock_token_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","lock_token", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","lock_token", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->lock_token);
{
if (result) {
@@ -13587,7 +13753,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_lock_owner_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13600,9 +13766,9 @@ _wrap_svn_wc_entry_t_lock_owner_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","lock_owner", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","lock_owner", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","lock_owner", 2, argv[0] ));
@@ -13626,7 +13792,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_lock_owner_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -13637,9 +13803,9 @@ _wrap_svn_wc_entry_t_lock_owner_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","lock_owner", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","lock_owner", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->lock_owner);
{
if (result) {
@@ -13656,7 +13822,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_lock_comment_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13669,9 +13835,9 @@ _wrap_svn_wc_entry_t_lock_comment_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","lock_comment", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","lock_comment", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","lock_comment", 2, argv[0] ));
@@ -13695,7 +13861,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_lock_comment_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -13706,9 +13872,9 @@ _wrap_svn_wc_entry_t_lock_comment_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","lock_comment", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","lock_comment", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->lock_comment);
{
if (result) {
@@ -13725,7 +13891,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_lock_creation_date_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13735,9 +13901,9 @@ _wrap_svn_wc_entry_t_lock_creation_date_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","lock_creation_date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","lock_creation_date", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
{
arg2 = (apr_time_t)NUM2LL(argv[0]);
}
@@ -13750,7 +13916,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_lock_creation_date_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_time_t result;
@@ -13761,9 +13927,9 @@ _wrap_svn_wc_entry_t_lock_creation_date_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","lock_creation_date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","lock_creation_date", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = ((arg1)->lock_creation_date);
{
vresult = LL2NUM((apr_time_t)(result));
@@ -13776,7 +13942,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_has_props_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13786,9 +13952,9 @@ _wrap_svn_wc_entry_t_has_props_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","has_props", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","has_props", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->has_props = arg2;
return Qnil;
@@ -13799,7 +13965,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_has_props_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -13810,9 +13976,9 @@ _wrap_svn_wc_entry_t_has_props_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","has_props", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","has_props", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_boolean_t) ((arg1)->has_props);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -13823,7 +13989,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_has_prop_mods_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13833,9 +13999,9 @@ _wrap_svn_wc_entry_t_has_prop_mods_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","has_prop_mods", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","has_prop_mods", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->has_prop_mods = arg2;
return Qnil;
@@ -13846,7 +14012,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_has_prop_mods_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -13857,9 +14023,9 @@ _wrap_svn_wc_entry_t_has_prop_mods_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","has_prop_mods", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","has_prop_mods", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_boolean_t) ((arg1)->has_prop_mods);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -13870,7 +14036,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_cachable_props_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13883,9 +14049,9 @@ _wrap_svn_wc_entry_t_cachable_props_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","cachable_props", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","cachable_props", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","cachable_props", 2, argv[0] ));
@@ -13909,7 +14075,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_cachable_props_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -13920,9 +14086,9 @@ _wrap_svn_wc_entry_t_cachable_props_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","cachable_props", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","cachable_props", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->cachable_props);
{
if (result) {
@@ -13939,7 +14105,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_present_props_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -13952,9 +14118,9 @@ _wrap_svn_wc_entry_t_present_props_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","present_props", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","present_props", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","present_props", 2, argv[0] ));
@@ -13978,7 +14144,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_present_props_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -13989,9 +14155,9 @@ _wrap_svn_wc_entry_t_present_props_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","present_props", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","present_props", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->present_props);
{
if (result) {
@@ -14008,7 +14174,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_changelist_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14018,9 +14184,9 @@ _wrap_svn_wc_entry_t_changelist_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","changelist", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","changelist", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
{
arg2 = StringValueCStr(argv[0]);
}
@@ -14040,7 +14206,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_changelist_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -14051,9 +14217,9 @@ _wrap_svn_wc_entry_t_changelist_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","changelist", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","changelist", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->changelist);
{
if (result) {
@@ -14070,7 +14236,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_working_size_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
apr_off_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14080,9 +14246,9 @@ _wrap_svn_wc_entry_t_working_size_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","working_size", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","working_size", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
{
arg2 = (apr_off_t)NUM2LL(argv[0]);
}
@@ -14095,7 +14261,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_working_size_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_off_t result;
@@ -14106,9 +14272,9 @@ _wrap_svn_wc_entry_t_working_size_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","working_size", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","working_size", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = ((arg1)->working_size);
{
vresult = LL2NUM((apr_off_t)(result));
@@ -14121,7 +14287,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_keep_local_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14131,9 +14297,9 @@ _wrap_svn_wc_entry_t_keep_local_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","keep_local", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","keep_local", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->keep_local = arg2;
return Qnil;
@@ -14144,7 +14310,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_keep_local_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -14155,9 +14321,9 @@ _wrap_svn_wc_entry_t_keep_local_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","keep_local", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","keep_local", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_boolean_t) ((arg1)->keep_local);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -14168,7 +14334,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_depth_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_depth_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14178,9 +14344,9 @@ _wrap_svn_wc_entry_t_depth_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","depth", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","depth", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
{
arg2 = svn_swig_rb_to_depth(argv[0]);
}
@@ -14193,7 +14359,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_depth_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_depth_t result;
@@ -14204,9 +14370,9 @@ _wrap_svn_wc_entry_t_depth_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","depth", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","depth", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_depth_t) ((arg1)->depth);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -14217,7 +14383,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_tree_conflict_data_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14230,9 +14396,9 @@ _wrap_svn_wc_entry_t_tree_conflict_data_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","tree_conflict_data", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","tree_conflict_data", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","tree_conflict_data", 2, argv[0] ));
@@ -14256,7 +14422,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_tree_conflict_data_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -14267,9 +14433,9 @@ _wrap_svn_wc_entry_t_tree_conflict_data_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","tree_conflict_data", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","tree_conflict_data", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->tree_conflict_data);
{
if (result) {
@@ -14286,7 +14452,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_file_external_path_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14299,9 +14465,9 @@ _wrap_svn_wc_entry_t_file_external_path_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","file_external_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","file_external_path", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","file_external_path", 2, argv[0] ));
@@ -14325,7 +14491,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_file_external_path_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -14336,9 +14502,9 @@ _wrap_svn_wc_entry_t_file_external_path_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","file_external_path", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","file_external_path", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (char *) ((arg1)->file_external_path);
{
if (result) {
@@ -14355,7 +14521,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_file_external_peg_rev_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14366,9 +14532,9 @@ _wrap_svn_wc_entry_t_file_external_peg_rev_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","file_external_peg_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","file_external_peg_rev", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
{
arg2 = &rev2;
svn_swig_rb_set_revision(&rev2, argv[0]);
@@ -14382,7 +14548,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_file_external_peg_rev_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_opt_revision_t *result = 0 ;
@@ -14393,9 +14559,9 @@ _wrap_svn_wc_entry_t_file_external_peg_rev_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","file_external_peg_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","file_external_peg_rev", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_opt_revision_t *)& ((arg1)->file_external_peg_rev);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_opt_revision_t, 0 | 0 );
return vresult;
@@ -14406,7 +14572,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_file_external_rev_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
svn_opt_revision_t *arg2 = (svn_opt_revision_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14417,9 +14583,9 @@ _wrap_svn_wc_entry_t_file_external_rev_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","file_external_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","file_external_rev", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
{
arg2 = &rev2;
svn_swig_rb_set_revision(&rev2, argv[0]);
@@ -14433,7 +14599,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_t_file_external_rev_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_t *arg1 = (svn_wc_entry_t *) 0 ;
+ struct svn_wc_entry_t *arg1 = (struct svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_opt_revision_t *result = 0 ;
@@ -14444,9 +14610,9 @@ _wrap_svn_wc_entry_t_file_external_rev_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_t *","file_external_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_t *","file_external_rev", 1, self ));
}
- arg1 = (svn_wc_entry_t *)(argp1);
+ arg1 = (struct svn_wc_entry_t *)(argp1);
result = (svn_opt_revision_t *)& ((arg1)->file_external_rev);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_opt_revision_t, 0 | 0 );
return vresult;
@@ -14485,7 +14651,7 @@ _wrap_new_svn_wc_entry_t(int argc, VALUE *argv, VALUE self) {
int alloc1 = 0 ;
void *argp2 = 0 ;
int res2 = 0 ;
- svn_wc_entry_t *result = 0 ;
+ struct svn_wc_entry_t *result = 0 ;
{
svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg4);
@@ -14510,7 +14676,7 @@ _wrap_new_svn_wc_entry_t(int argc, VALUE *argv, VALUE self) {
}
{
- result = (svn_wc_entry_t *)new_svn_wc_entry_t((char const *)arg1,arg2,arg3,arg4);
+ result = (struct svn_wc_entry_t *)new_svn_wc_entry_t((char const *)arg1,arg2,arg3,arg4);
DATA_PTR(self) = result;
@@ -14538,10 +14704,10 @@ fail:
}
-SWIGINTERN void delete_svn_wc_entry_t(svn_wc_entry_t *self){
+SWIGINTERN void delete_svn_wc_entry_t(struct svn_wc_entry_t *self){
}
SWIGINTERN void
-free_svn_wc_entry_t(svn_wc_entry_t *arg1) {
+free_svn_wc_entry_t(struct svn_wc_entry_t *arg1) {
delete_svn_wc_entry_t(arg1);
}
@@ -14671,11 +14837,11 @@ fail:
}
-swig_class SwigClassSvn_wc_info_t;
+static swig_class SwigClassSvn_wc_info_t;
SWIGINTERN VALUE
_wrap_svn_wc_info_t_schedule_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
svn_wc_schedule_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14687,9 +14853,9 @@ _wrap_svn_wc_info_t_schedule_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_info_t *","schedule", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_info_t *","schedule", 1, self ));
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_wc_schedule_t","schedule", 2, argv[0] ));
@@ -14704,7 +14870,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_info_t_schedule_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_schedule_t result;
@@ -14715,9 +14881,9 @@ _wrap_svn_wc_info_t_schedule_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_info_t *","schedule", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_info_t *","schedule", 1, self ));
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
result = (svn_wc_schedule_t) ((arg1)->schedule);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -14728,7 +14894,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_info_t_copyfrom_url_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14738,9 +14904,9 @@ _wrap_svn_wc_info_t_copyfrom_url_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_info_t *","copyfrom_url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_info_t *","copyfrom_url", 1, self ));
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
{
if (NIL_P(argv[0])) {
arg2 = NULL;
@@ -14764,7 +14930,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_info_t_copyfrom_url_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -14775,9 +14941,9 @@ _wrap_svn_wc_info_t_copyfrom_url_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_info_t *","copyfrom_url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_info_t *","copyfrom_url", 1, self ));
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
result = (char *) ((arg1)->copyfrom_url);
{
if (result) {
@@ -14794,7 +14960,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_info_t_copyfrom_rev_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14806,9 +14972,9 @@ _wrap_svn_wc_info_t_copyfrom_rev_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_info_t *","copyfrom_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_info_t *","copyfrom_rev", 1, self ));
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","copyfrom_rev", 2, argv[0] ));
@@ -14823,7 +14989,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_info_t_copyfrom_rev_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -14834,9 +15000,9 @@ _wrap_svn_wc_info_t_copyfrom_rev_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_info_t *","copyfrom_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_info_t *","copyfrom_rev", 1, self ));
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
result = (svn_revnum_t) ((arg1)->copyfrom_rev);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -14847,7 +15013,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_info_t_checksum_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
svn_checksum_t *arg2 = (svn_checksum_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14859,9 +15025,9 @@ _wrap_svn_wc_info_t_checksum_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_info_t *","checksum", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_info_t *","checksum", 1, self ));
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_checksum_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_checksum_t const *","checksum", 2, argv[0] ));
@@ -14876,7 +15042,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_info_t_checksum_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_checksum_t *result = 0 ;
@@ -14887,9 +15053,9 @@ _wrap_svn_wc_info_t_checksum_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_info_t *","checksum", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_info_t *","checksum", 1, self ));
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
result = (svn_checksum_t *) ((arg1)->checksum);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_checksum_t, 0 | 0 );
return vresult;
@@ -14900,7 +15066,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_info_t_changelist_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14910,9 +15076,9 @@ _wrap_svn_wc_info_t_changelist_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_info_t *","changelist", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_info_t *","changelist", 1, self ));
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
{
arg2 = StringValueCStr(argv[0]);
}
@@ -14932,7 +15098,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_info_t_changelist_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -14943,9 +15109,9 @@ _wrap_svn_wc_info_t_changelist_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_info_t *","changelist", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_info_t *","changelist", 1, self ));
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
result = (char *) ((arg1)->changelist);
{
if (result) {
@@ -14962,7 +15128,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_info_t_depth_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
svn_depth_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -14972,9 +15138,9 @@ _wrap_svn_wc_info_t_depth_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_info_t *","depth", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_info_t *","depth", 1, self ));
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
{
arg2 = svn_swig_rb_to_depth(argv[0]);
}
@@ -14987,7 +15153,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_info_t_depth_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_depth_t result;
@@ -14998,9 +15164,9 @@ _wrap_svn_wc_info_t_depth_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_info_t *","depth", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_info_t *","depth", 1, self ));
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
result = (svn_depth_t) ((arg1)->depth);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -15011,7 +15177,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_info_t_recorded_size_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
svn_filesize_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -15021,9 +15187,9 @@ _wrap_svn_wc_info_t_recorded_size_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_info_t *","recorded_size", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_info_t *","recorded_size", 1, self ));
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
{
arg2 = (svn_filesize_t)NUM2LL(argv[0]);
}
@@ -15036,7 +15202,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_info_t_recorded_size_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_filesize_t result;
@@ -15047,9 +15213,9 @@ _wrap_svn_wc_info_t_recorded_size_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_info_t *","recorded_size", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_info_t *","recorded_size", 1, self ));
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
result = ((arg1)->recorded_size);
{
vresult = LL2NUM((svn_filesize_t)(result));
@@ -15062,7 +15228,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_info_t_recorded_time_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -15072,9 +15238,9 @@ _wrap_svn_wc_info_t_recorded_time_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_info_t *","recorded_time", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_info_t *","recorded_time", 1, self ));
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
{
arg2 = (apr_time_t)NUM2LL(argv[0]);
}
@@ -15087,7 +15253,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_info_t_recorded_time_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_time_t result;
@@ -15098,9 +15264,9 @@ _wrap_svn_wc_info_t_recorded_time_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_info_t *","recorded_time", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_info_t *","recorded_time", 1, self ));
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
result = ((arg1)->recorded_time);
{
vresult = LL2NUM((apr_time_t)(result));
@@ -15113,7 +15279,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_info_t_conflicts_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
apr_array_header_t *arg2 = (apr_array_header_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -15125,9 +15291,9 @@ _wrap_svn_wc_info_t_conflicts_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_info_t *","conflicts", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_info_t *","conflicts", 1, self ));
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_apr_array_header_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "apr_array_header_t const *","conflicts", 2, argv[0] ));
@@ -15142,7 +15308,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_info_t_conflicts_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_array_header_t *result = 0 ;
@@ -15153,9 +15319,9 @@ _wrap_svn_wc_info_t_conflicts_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_info_t *","conflicts", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_info_t *","conflicts", 1, self ));
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
result = (apr_array_header_t *) ((arg1)->conflicts);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_apr_array_header_t, 0 | 0 );
return vresult;
@@ -15166,7 +15332,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_info_t_wcroot_abspath_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -15179,9 +15345,9 @@ _wrap_svn_wc_info_t_wcroot_abspath_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_info_t *","wcroot_abspath", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_info_t *","wcroot_abspath", 1, self ));
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","wcroot_abspath", 2, argv[0] ));
@@ -15205,7 +15371,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_info_t_wcroot_abspath_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_info_t *arg1 = (svn_wc_info_t *) 0 ;
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -15216,9 +15382,9 @@ _wrap_svn_wc_info_t_wcroot_abspath_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_info_t *","wcroot_abspath", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_info_t *","wcroot_abspath", 1, self ));
}
- arg1 = (svn_wc_info_t *)(argp1);
+ arg1 = (struct svn_wc_info_t *)(argp1);
result = (char *) ((arg1)->wcroot_abspath);
{
if (result) {
@@ -15233,6 +15399,144 @@ fail:
}
+SWIGINTERN VALUE
+_wrap_svn_wc_info_t_moved_from_abspath_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_info_t *","moved_from_abspath", 1, self ));
+ }
+ arg1 = (struct svn_wc_info_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","moved_from_abspath", 2, argv[0] ));
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->moved_from_abspath) free((char *)arg1->moved_from_abspath);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->moved_from_abspath = copied;
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_wc_info_t_moved_from_abspath_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ char *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_info_t *","moved_from_abspath", 1, self ));
+ }
+ arg1 = (struct svn_wc_info_t *)(argp1);
+ result = (char *) ((arg1)->moved_from_abspath);
+ {
+ if (result) {
+ vresult = rb_str_new2(result);
+ } else {
+ vresult = Qnil;
+ }
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_wc_info_t_moved_to_abspath_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_info_t *","moved_to_abspath", 1, self ));
+ }
+ arg1 = (struct svn_wc_info_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","moved_to_abspath", 2, argv[0] ));
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->moved_to_abspath) free((char *)arg1->moved_to_abspath);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->moved_to_abspath = copied;
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_wc_info_t_moved_to_abspath_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_wc_info_t *arg1 = (struct svn_wc_info_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ char *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_info_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_info_t *","moved_to_abspath", 1, self ));
+ }
+ arg1 = (struct svn_wc_info_t *)(argp1);
+ result = (char *) ((arg1)->moved_to_abspath);
+ {
+ if (result) {
+ vresult = rb_str_new2(result);
+ } else {
+ vresult = Qnil;
+ }
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
#ifdef HAVE_RB_DEFINE_ALLOC_FUNC
SWIGINTERN VALUE
_wrap_svn_wc_info_t_allocate(VALUE self) {
@@ -15252,13 +15556,13 @@ _wrap_svn_wc_info_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_wc_info_t(int argc, VALUE *argv, VALUE self) {
- svn_wc_info_t *result = 0 ;
+ struct svn_wc_info_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_wc_info_t *)calloc(1, sizeof(svn_wc_info_t));
+ result = (struct svn_wc_info_t *)calloc(1, sizeof(struct svn_wc_info_t));
DATA_PTR(self) = result;
@@ -15271,7 +15575,7 @@ fail:
SWIGINTERN void
-free_svn_wc_info_t(svn_wc_info_t *arg1) {
+free_svn_wc_info_t(struct svn_wc_info_t *arg1) {
free((char *) arg1);
}
@@ -15685,11 +15989,11 @@ fail:
}
-swig_class SwigClassSvn_wc_entry_callbacks2_t;
+static swig_class SwigClassSvn_wc_entry_callbacks2_t;
SWIGINTERN VALUE
_wrap_svn_wc_entry_callbacks2_t_found_entry_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_callbacks2_t *arg1 = (svn_wc_entry_callbacks2_t *) 0 ;
+ struct svn_wc_entry_callbacks2_t *arg1 = (struct svn_wc_entry_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(char const *,svn_wc_entry_t const *,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,svn_wc_entry_t const *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -15699,9 +16003,9 @@ _wrap_svn_wc_entry_callbacks2_t_found_entry_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_callbacks2_t *","found_entry", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_callbacks2_t *","found_entry", 1, self ));
}
- arg1 = (svn_wc_entry_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_entry_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_p_q_const__svn_wc_entry_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -15717,7 +16021,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_callbacks2_t_found_entry_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_callbacks2_t *arg1 = (svn_wc_entry_callbacks2_t *) 0 ;
+ struct svn_wc_entry_callbacks2_t *arg1 = (struct svn_wc_entry_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(char const *,svn_wc_entry_t const *,void *,apr_pool_t *) = 0 ;
@@ -15728,9 +16032,9 @@ _wrap_svn_wc_entry_callbacks2_t_found_entry_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_callbacks2_t *","found_entry", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_callbacks2_t *","found_entry", 1, self ));
}
- arg1 = (svn_wc_entry_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_entry_callbacks2_t *)(argp1);
result = (svn_error_t *(*)(char const *,svn_wc_entry_t const *,void *,apr_pool_t *)) ((arg1)->found_entry);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_p_q_const__svn_wc_entry_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -15741,7 +16045,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_callbacks2_t_handle_error_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_callbacks2_t *arg1 = (svn_wc_entry_callbacks2_t *) 0 ;
+ struct svn_wc_entry_callbacks2_t *arg1 = (struct svn_wc_entry_callbacks2_t *) 0 ;
svn_error_t *(*arg2)(char const *,svn_error_t *,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,svn_error_t *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -15751,9 +16055,9 @@ _wrap_svn_wc_entry_callbacks2_t_handle_error_set(int argc, VALUE *argv, VALUE se
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_callbacks2_t *","handle_error", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_callbacks2_t *","handle_error", 1, self ));
}
- arg1 = (svn_wc_entry_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_entry_callbacks2_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_p_svn_error_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -15769,7 +16073,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_callbacks2_t_handle_error_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_callbacks2_t *arg1 = (svn_wc_entry_callbacks2_t *) 0 ;
+ struct svn_wc_entry_callbacks2_t *arg1 = (struct svn_wc_entry_callbacks2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(char const *,svn_error_t *,void *,apr_pool_t *) = 0 ;
@@ -15780,9 +16084,9 @@ _wrap_svn_wc_entry_callbacks2_t_handle_error_get(int argc, VALUE *argv, VALUE se
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_callbacks2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_callbacks2_t *","handle_error", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_callbacks2_t *","handle_error", 1, self ));
}
- arg1 = (svn_wc_entry_callbacks2_t *)(argp1);
+ arg1 = (struct svn_wc_entry_callbacks2_t *)(argp1);
result = (svn_error_t *(*)(char const *,svn_error_t *,void *,apr_pool_t *)) ((arg1)->handle_error);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_p_svn_error_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -15810,13 +16114,13 @@ _wrap_svn_wc_entry_callbacks2_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_wc_entry_callbacks2_t(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_callbacks2_t *result = 0 ;
+ struct svn_wc_entry_callbacks2_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_wc_entry_callbacks2_t *)calloc(1, sizeof(svn_wc_entry_callbacks2_t));
+ result = (struct svn_wc_entry_callbacks2_t *)calloc(1, sizeof(struct svn_wc_entry_callbacks2_t));
DATA_PTR(self) = result;
@@ -15829,15 +16133,15 @@ fail:
SWIGINTERN void
-free_svn_wc_entry_callbacks2_t(svn_wc_entry_callbacks2_t *arg1) {
+free_svn_wc_entry_callbacks2_t(struct svn_wc_entry_callbacks2_t *arg1) {
free((char *) arg1);
}
-swig_class SwigClassSvn_wc_entry_callbacks_t;
+static swig_class SwigClassSvn_wc_entry_callbacks_t;
SWIGINTERN VALUE
_wrap_svn_wc_entry_callbacks_t_found_entry_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_callbacks_t *arg1 = (svn_wc_entry_callbacks_t *) 0 ;
+ struct svn_wc_entry_callbacks_t *arg1 = (struct svn_wc_entry_callbacks_t *) 0 ;
svn_error_t *(*arg2)(char const *,svn_wc_entry_t const *,void *,apr_pool_t *) = (svn_error_t *(*)(char const *,svn_wc_entry_t const *,void *,apr_pool_t *)) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -15847,9 +16151,9 @@ _wrap_svn_wc_entry_callbacks_t_found_entry_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_callbacks_t *","found_entry", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_callbacks_t *","found_entry", 1, self ));
}
- arg1 = (svn_wc_entry_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_entry_callbacks_t *)(argp1);
{
int res = SWIG_ConvertFunctionPtr(argv[0], (void**)(&arg2), SWIGTYPE_p_f_p_q_const__char_p_q_const__svn_wc_entry_t_p_void_p_apr_pool_t__p_svn_error_t);
if (!SWIG_IsOK(res)) {
@@ -15865,7 +16169,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_entry_callbacks_t_found_entry_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_callbacks_t *arg1 = (svn_wc_entry_callbacks_t *) 0 ;
+ struct svn_wc_entry_callbacks_t *arg1 = (struct svn_wc_entry_callbacks_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_error_t *(*result)(char const *,svn_wc_entry_t const *,void *,apr_pool_t *) = 0 ;
@@ -15876,9 +16180,9 @@ _wrap_svn_wc_entry_callbacks_t_found_entry_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_entry_callbacks_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_entry_callbacks_t *","found_entry", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_entry_callbacks_t *","found_entry", 1, self ));
}
- arg1 = (svn_wc_entry_callbacks_t *)(argp1);
+ arg1 = (struct svn_wc_entry_callbacks_t *)(argp1);
result = (svn_error_t *(*)(char const *,svn_wc_entry_t const *,void *,apr_pool_t *)) ((arg1)->found_entry);
vresult = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_p_q_const__char_p_q_const__svn_wc_entry_t_p_void_p_apr_pool_t__p_svn_error_t);
return vresult;
@@ -15906,13 +16210,13 @@ _wrap_svn_wc_entry_callbacks_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_wc_entry_callbacks_t(int argc, VALUE *argv, VALUE self) {
- svn_wc_entry_callbacks_t *result = 0 ;
+ struct svn_wc_entry_callbacks_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_wc_entry_callbacks_t *)calloc(1, sizeof(svn_wc_entry_callbacks_t));
+ result = (struct svn_wc_entry_callbacks_t *)calloc(1, sizeof(struct svn_wc_entry_callbacks_t));
DATA_PTR(self) = result;
@@ -15925,7 +16229,7 @@ fail:
SWIGINTERN void
-free_svn_wc_entry_callbacks_t(svn_wc_entry_callbacks_t *arg1) {
+free_svn_wc_entry_callbacks_t(struct svn_wc_entry_callbacks_t *arg1) {
free((char *) arg1);
}
@@ -16769,11 +17073,11 @@ fail:
}
-swig_class SwigClassSvn_wc_status3_t;
+static swig_class SwigClassSvn_wc_status3_t;
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -16785,9 +17089,9 @@ _wrap_svn_wc_status3_t_kind_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","kind", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_node_kind_t","kind", 2, argv[0] ));
@@ -16802,7 +17106,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_node_kind_t result;
@@ -16813,9 +17117,9 @@ _wrap_svn_wc_status3_t_kind_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","kind", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -16826,7 +17130,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_depth_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_depth_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -16836,9 +17140,9 @@ _wrap_svn_wc_status3_t_depth_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","depth", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","depth", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
{
arg2 = svn_swig_rb_to_depth(argv[0]);
}
@@ -16851,7 +17155,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_depth_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_depth_t result;
@@ -16862,9 +17166,9 @@ _wrap_svn_wc_status3_t_depth_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","depth", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","depth", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (svn_depth_t) ((arg1)->depth);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -16875,7 +17179,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_filesize_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_filesize_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -16885,9 +17189,9 @@ _wrap_svn_wc_status3_t_filesize_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","filesize", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","filesize", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
{
arg2 = (svn_filesize_t)NUM2LL(argv[0]);
}
@@ -16900,7 +17204,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_filesize_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_filesize_t result;
@@ -16911,9 +17215,9 @@ _wrap_svn_wc_status3_t_filesize_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","filesize", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","filesize", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = ((arg1)->filesize);
{
vresult = LL2NUM((svn_filesize_t)(result));
@@ -16926,7 +17230,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_versioned_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -16936,9 +17240,9 @@ _wrap_svn_wc_status3_t_versioned_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","versioned", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","versioned", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->versioned = arg2;
return Qnil;
@@ -16949,7 +17253,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_versioned_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -16960,9 +17264,9 @@ _wrap_svn_wc_status3_t_versioned_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","versioned", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","versioned", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (svn_boolean_t) ((arg1)->versioned);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -16973,7 +17277,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_conflicted_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -16983,9 +17287,9 @@ _wrap_svn_wc_status3_t_conflicted_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","conflicted", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","conflicted", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->conflicted = arg2;
return Qnil;
@@ -16996,7 +17300,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_conflicted_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -17007,9 +17311,9 @@ _wrap_svn_wc_status3_t_conflicted_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","conflicted", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","conflicted", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (svn_boolean_t) ((arg1)->conflicted);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -17020,7 +17324,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_node_status_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -17032,9 +17336,9 @@ _wrap_svn_wc_status3_t_node_status_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","node_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","node_status", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "enum svn_wc_status_kind","node_status", 2, argv[0] ));
@@ -17049,7 +17353,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_node_status_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
enum svn_wc_status_kind result;
@@ -17060,9 +17364,9 @@ _wrap_svn_wc_status3_t_node_status_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","node_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","node_status", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->node_status);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -17073,7 +17377,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_text_status_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -17085,9 +17389,9 @@ _wrap_svn_wc_status3_t_text_status_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","text_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","text_status", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "enum svn_wc_status_kind","text_status", 2, argv[0] ));
@@ -17102,7 +17406,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_text_status_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
enum svn_wc_status_kind result;
@@ -17113,9 +17417,9 @@ _wrap_svn_wc_status3_t_text_status_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","text_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","text_status", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->text_status);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -17126,7 +17430,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_prop_status_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -17138,9 +17442,9 @@ _wrap_svn_wc_status3_t_prop_status_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","prop_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","prop_status", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "enum svn_wc_status_kind","prop_status", 2, argv[0] ));
@@ -17155,7 +17459,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_prop_status_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
enum svn_wc_status_kind result;
@@ -17166,9 +17470,9 @@ _wrap_svn_wc_status3_t_prop_status_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","prop_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","prop_status", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->prop_status);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -17179,7 +17483,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_copied_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -17189,9 +17493,9 @@ _wrap_svn_wc_status3_t_copied_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","copied", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","copied", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->copied = arg2;
return Qnil;
@@ -17202,7 +17506,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_copied_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -17213,9 +17517,9 @@ _wrap_svn_wc_status3_t_copied_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","copied", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","copied", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (svn_boolean_t) ((arg1)->copied);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -17226,7 +17530,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_revision_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -17238,9 +17542,9 @@ _wrap_svn_wc_status3_t_revision_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","revision", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","revision", 2, argv[0] ));
@@ -17255,7 +17559,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_revision_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -17266,9 +17570,9 @@ _wrap_svn_wc_status3_t_revision_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","revision", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","revision", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (svn_revnum_t) ((arg1)->revision);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -17279,7 +17583,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_changed_rev_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -17291,9 +17595,9 @@ _wrap_svn_wc_status3_t_changed_rev_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","changed_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","changed_rev", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","changed_rev", 2, argv[0] ));
@@ -17308,7 +17612,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_changed_rev_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -17319,9 +17623,9 @@ _wrap_svn_wc_status3_t_changed_rev_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","changed_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","changed_rev", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (svn_revnum_t) ((arg1)->changed_rev);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -17332,7 +17636,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_changed_date_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -17342,9 +17646,9 @@ _wrap_svn_wc_status3_t_changed_date_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","changed_date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","changed_date", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
{
arg2 = (apr_time_t)NUM2LL(argv[0]);
}
@@ -17357,7 +17661,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_changed_date_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_time_t result;
@@ -17368,9 +17672,9 @@ _wrap_svn_wc_status3_t_changed_date_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","changed_date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","changed_date", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = ((arg1)->changed_date);
{
vresult = LL2NUM((apr_time_t)(result));
@@ -17383,7 +17687,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_changed_author_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -17396,9 +17700,9 @@ _wrap_svn_wc_status3_t_changed_author_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","changed_author", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","changed_author", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","changed_author", 2, argv[0] ));
@@ -17422,7 +17726,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_changed_author_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -17433,9 +17737,9 @@ _wrap_svn_wc_status3_t_changed_author_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","changed_author", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","changed_author", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (char *) ((arg1)->changed_author);
{
if (result) {
@@ -17452,7 +17756,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_repos_root_url_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -17465,9 +17769,9 @@ _wrap_svn_wc_status3_t_repos_root_url_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","repos_root_url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","repos_root_url", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","repos_root_url", 2, argv[0] ));
@@ -17491,7 +17795,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_repos_root_url_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -17502,9 +17806,9 @@ _wrap_svn_wc_status3_t_repos_root_url_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","repos_root_url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","repos_root_url", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (char *) ((arg1)->repos_root_url);
{
if (result) {
@@ -17521,7 +17825,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_repos_uuid_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -17534,9 +17838,9 @@ _wrap_svn_wc_status3_t_repos_uuid_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","repos_uuid", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","repos_uuid", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","repos_uuid", 2, argv[0] ));
@@ -17560,7 +17864,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_repos_uuid_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -17571,9 +17875,9 @@ _wrap_svn_wc_status3_t_repos_uuid_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","repos_uuid", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","repos_uuid", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (char *) ((arg1)->repos_uuid);
{
if (result) {
@@ -17590,7 +17894,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_repos_relpath_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -17603,9 +17907,9 @@ _wrap_svn_wc_status3_t_repos_relpath_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","repos_relpath", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","repos_relpath", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","repos_relpath", 2, argv[0] ));
@@ -17629,7 +17933,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_repos_relpath_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -17640,9 +17944,9 @@ _wrap_svn_wc_status3_t_repos_relpath_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","repos_relpath", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","repos_relpath", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (char *) ((arg1)->repos_relpath);
{
if (result) {
@@ -17659,7 +17963,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_switched_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -17669,9 +17973,9 @@ _wrap_svn_wc_status3_t_switched_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","switched", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","switched", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->switched = arg2;
return Qnil;
@@ -17682,7 +17986,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_switched_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -17693,9 +17997,9 @@ _wrap_svn_wc_status3_t_switched_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","switched", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","switched", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (svn_boolean_t) ((arg1)->switched);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -17706,7 +18010,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_locked_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -17716,9 +18020,9 @@ _wrap_svn_wc_status3_t_locked_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","locked", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","locked", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->locked = arg2;
return Qnil;
@@ -17729,7 +18033,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_locked_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -17740,9 +18044,9 @@ _wrap_svn_wc_status3_t_locked_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","locked", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","locked", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (svn_boolean_t) ((arg1)->locked);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -17753,7 +18057,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_lock_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_lock_t *arg2 = (svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -17765,9 +18069,9 @@ _wrap_svn_wc_status3_t_lock_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","lock", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","lock", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_lock_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_lock_t const *","lock", 2, argv[0] ));
@@ -17782,7 +18086,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_lock_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_lock_t *result = 0 ;
@@ -17793,9 +18097,9 @@ _wrap_svn_wc_status3_t_lock_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","lock", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","lock", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (svn_lock_t *) ((arg1)->lock);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_lock_t, 0 | 0 );
return vresult;
@@ -17806,7 +18110,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_changelist_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -17816,9 +18120,9 @@ _wrap_svn_wc_status3_t_changelist_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","changelist", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","changelist", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
{
arg2 = StringValueCStr(argv[0]);
}
@@ -17838,7 +18142,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_changelist_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -17849,9 +18153,9 @@ _wrap_svn_wc_status3_t_changelist_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","changelist", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","changelist", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (char *) ((arg1)->changelist);
{
if (result) {
@@ -17868,7 +18172,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_ood_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -17880,9 +18184,9 @@ _wrap_svn_wc_status3_t_ood_kind_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","ood_kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","ood_kind", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_node_kind_t","ood_kind", 2, argv[0] ));
@@ -17897,7 +18201,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_ood_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_node_kind_t result;
@@ -17908,9 +18212,9 @@ _wrap_svn_wc_status3_t_ood_kind_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","ood_kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","ood_kind", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->ood_kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -17921,7 +18225,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_repos_node_status_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -17933,9 +18237,9 @@ _wrap_svn_wc_status3_t_repos_node_status_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","repos_node_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","repos_node_status", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "enum svn_wc_status_kind","repos_node_status", 2, argv[0] ));
@@ -17950,7 +18254,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_repos_node_status_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
enum svn_wc_status_kind result;
@@ -17961,9 +18265,9 @@ _wrap_svn_wc_status3_t_repos_node_status_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","repos_node_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","repos_node_status", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->repos_node_status);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -17974,7 +18278,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_repos_text_status_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -17986,9 +18290,9 @@ _wrap_svn_wc_status3_t_repos_text_status_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","repos_text_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","repos_text_status", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "enum svn_wc_status_kind","repos_text_status", 2, argv[0] ));
@@ -18003,7 +18307,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_repos_text_status_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
enum svn_wc_status_kind result;
@@ -18014,9 +18318,9 @@ _wrap_svn_wc_status3_t_repos_text_status_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","repos_text_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","repos_text_status", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->repos_text_status);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -18027,7 +18331,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_repos_prop_status_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -18039,9 +18343,9 @@ _wrap_svn_wc_status3_t_repos_prop_status_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","repos_prop_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","repos_prop_status", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "enum svn_wc_status_kind","repos_prop_status", 2, argv[0] ));
@@ -18056,7 +18360,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_repos_prop_status_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
enum svn_wc_status_kind result;
@@ -18067,9 +18371,9 @@ _wrap_svn_wc_status3_t_repos_prop_status_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","repos_prop_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","repos_prop_status", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->repos_prop_status);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -18080,7 +18384,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_repos_lock_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_lock_t *arg2 = (svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -18092,9 +18396,9 @@ _wrap_svn_wc_status3_t_repos_lock_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","repos_lock", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","repos_lock", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_lock_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_lock_t const *","repos_lock", 2, argv[0] ));
@@ -18109,7 +18413,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_repos_lock_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_lock_t *result = 0 ;
@@ -18120,9 +18424,9 @@ _wrap_svn_wc_status3_t_repos_lock_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","repos_lock", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","repos_lock", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (svn_lock_t *) ((arg1)->repos_lock);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_lock_t, 0 | 0 );
return vresult;
@@ -18133,7 +18437,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_ood_changed_rev_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -18145,9 +18449,9 @@ _wrap_svn_wc_status3_t_ood_changed_rev_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","ood_changed_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","ood_changed_rev", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","ood_changed_rev", 2, argv[0] ));
@@ -18162,7 +18466,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_ood_changed_rev_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -18173,9 +18477,9 @@ _wrap_svn_wc_status3_t_ood_changed_rev_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","ood_changed_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","ood_changed_rev", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (svn_revnum_t) ((arg1)->ood_changed_rev);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -18186,7 +18490,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_ood_changed_date_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -18196,9 +18500,9 @@ _wrap_svn_wc_status3_t_ood_changed_date_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","ood_changed_date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","ood_changed_date", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
{
arg2 = (apr_time_t)NUM2LL(argv[0]);
}
@@ -18211,7 +18515,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_ood_changed_date_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_time_t result;
@@ -18222,9 +18526,9 @@ _wrap_svn_wc_status3_t_ood_changed_date_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","ood_changed_date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","ood_changed_date", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = ((arg1)->ood_changed_date);
{
vresult = LL2NUM((apr_time_t)(result));
@@ -18237,7 +18541,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_ood_changed_author_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -18250,9 +18554,9 @@ _wrap_svn_wc_status3_t_ood_changed_author_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","ood_changed_author", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","ood_changed_author", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","ood_changed_author", 2, argv[0] ));
@@ -18276,7 +18580,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_ood_changed_author_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *arg1 = (svn_wc_status3_t *) 0 ;
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -18287,9 +18591,9 @@ _wrap_svn_wc_status3_t_ood_changed_author_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status3_t *","ood_changed_author", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","ood_changed_author", 1, self ));
}
- arg1 = (svn_wc_status3_t *)(argp1);
+ arg1 = (struct svn_wc_status3_t *)(argp1);
result = (char *) ((arg1)->ood_changed_author);
{
if (result) {
@@ -18304,6 +18608,191 @@ fail:
}
+SWIGINTERN VALUE
+_wrap_svn_wc_status3_t_moved_from_abspath_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","moved_from_abspath", 1, self ));
+ }
+ arg1 = (struct svn_wc_status3_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","moved_from_abspath", 2, argv[0] ));
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->moved_from_abspath) free((char *)arg1->moved_from_abspath);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->moved_from_abspath = copied;
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_wc_status3_t_moved_from_abspath_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ char *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","moved_from_abspath", 1, self ));
+ }
+ arg1 = (struct svn_wc_status3_t *)(argp1);
+ result = (char *) ((arg1)->moved_from_abspath);
+ {
+ if (result) {
+ vresult = rb_str_new2(result);
+ } else {
+ vresult = Qnil;
+ }
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_wc_status3_t_moved_to_abspath_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","moved_to_abspath", 1, self ));
+ }
+ arg1 = (struct svn_wc_status3_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","moved_to_abspath", 2, argv[0] ));
+ }
+ arg2 = (char *)(buf2);
+ {
+ apr_size_t len = strlen(arg2) + 1;
+ char *copied;
+ if (arg1->moved_to_abspath) free((char *)arg1->moved_to_abspath);
+ copied = malloc(len);
+ memcpy(copied, arg2, len);
+ arg1->moved_to_abspath = copied;
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_wc_status3_t_moved_to_abspath_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ char *result = 0 ;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","moved_to_abspath", 1, self ));
+ }
+ arg1 = (struct svn_wc_status3_t *)(argp1);
+ result = (char *) ((arg1)->moved_to_abspath);
+ {
+ if (result) {
+ vresult = rb_str_new2(result);
+ } else {
+ vresult = Qnil;
+ }
+ }
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_wc_status3_t_file_external_set(int argc, VALUE *argv, VALUE self) {
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
+ svn_boolean_t arg2 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+
+ if ((argc < 1) || (argc > 1)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","file_external", 1, self ));
+ }
+ arg1 = (struct svn_wc_status3_t *)(argp1);
+ arg2 = RTEST(argv[0]);
+ if (arg1) (arg1)->file_external = arg2;
+ return Qnil;
+fail:
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
+_wrap_svn_wc_status3_t_file_external_get(int argc, VALUE *argv, VALUE self) {
+ struct svn_wc_status3_t *arg1 = (struct svn_wc_status3_t *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ svn_boolean_t result;
+ VALUE vresult = Qnil;
+
+ if ((argc < 0) || (argc > 0)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status3_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status3_t *","file_external", 1, self ));
+ }
+ arg1 = (struct svn_wc_status3_t *)(argp1);
+ result = (svn_boolean_t) ((arg1)->file_external);
+ vresult = result ? Qtrue : Qfalse;
+ return vresult;
+fail:
+ return Qnil;
+}
+
+
#ifdef HAVE_RB_DEFINE_ALLOC_FUNC
SWIGINTERN VALUE
_wrap_svn_wc_status3_t_allocate(VALUE self) {
@@ -18323,13 +18812,13 @@ _wrap_svn_wc_status3_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_wc_status3_t(int argc, VALUE *argv, VALUE self) {
- svn_wc_status3_t *result = 0 ;
+ struct svn_wc_status3_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_wc_status3_t *)calloc(1, sizeof(svn_wc_status3_t));
+ result = (struct svn_wc_status3_t *)calloc(1, sizeof(struct svn_wc_status3_t));
DATA_PTR(self) = result;
@@ -18342,15 +18831,15 @@ fail:
SWIGINTERN void
-free_svn_wc_status3_t(svn_wc_status3_t *arg1) {
+free_svn_wc_status3_t(struct svn_wc_status3_t *arg1) {
free((char *) arg1);
}
-swig_class SwigClassSvn_wc_status2_t;
+static swig_class SwigClassSvn_wc_status2_t;
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_entry_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_wc_entry_t *arg2 = (svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -18362,9 +18851,9 @@ _wrap_svn_wc_status2_t_entry_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","entry", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","entry", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_wc_entry_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_wc_entry_t const *","entry", 2, argv[0] ));
@@ -18379,7 +18868,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_entry_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_entry_t *result = 0 ;
@@ -18390,9 +18879,9 @@ _wrap_svn_wc_status2_t_entry_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","entry", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","entry", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (svn_wc_entry_t *) ((arg1)->entry);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
return vresult;
@@ -18403,7 +18892,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_text_status_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -18415,9 +18904,9 @@ _wrap_svn_wc_status2_t_text_status_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","text_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","text_status", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "enum svn_wc_status_kind","text_status", 2, argv[0] ));
@@ -18432,7 +18921,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_text_status_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
enum svn_wc_status_kind result;
@@ -18443,9 +18932,9 @@ _wrap_svn_wc_status2_t_text_status_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","text_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","text_status", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->text_status);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -18456,7 +18945,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_prop_status_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -18468,9 +18957,9 @@ _wrap_svn_wc_status2_t_prop_status_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","prop_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","prop_status", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "enum svn_wc_status_kind","prop_status", 2, argv[0] ));
@@ -18485,7 +18974,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_prop_status_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
enum svn_wc_status_kind result;
@@ -18496,9 +18985,9 @@ _wrap_svn_wc_status2_t_prop_status_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","prop_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","prop_status", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->prop_status);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -18509,7 +18998,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_locked_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -18519,9 +19008,9 @@ _wrap_svn_wc_status2_t_locked_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","locked", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","locked", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->locked = arg2;
return Qnil;
@@ -18532,7 +19021,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_locked_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -18543,9 +19032,9 @@ _wrap_svn_wc_status2_t_locked_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","locked", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","locked", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (svn_boolean_t) ((arg1)->locked);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -18556,7 +19045,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_copied_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -18566,9 +19055,9 @@ _wrap_svn_wc_status2_t_copied_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","copied", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","copied", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->copied = arg2;
return Qnil;
@@ -18579,7 +19068,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_copied_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -18590,9 +19079,9 @@ _wrap_svn_wc_status2_t_copied_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","copied", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","copied", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (svn_boolean_t) ((arg1)->copied);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -18603,7 +19092,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_switched_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -18613,9 +19102,9 @@ _wrap_svn_wc_status2_t_switched_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","switched", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","switched", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->switched = arg2;
return Qnil;
@@ -18626,7 +19115,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_switched_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -18637,9 +19126,9 @@ _wrap_svn_wc_status2_t_switched_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","switched", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","switched", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (svn_boolean_t) ((arg1)->switched);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -18650,7 +19139,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_repos_text_status_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -18662,9 +19151,9 @@ _wrap_svn_wc_status2_t_repos_text_status_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","repos_text_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","repos_text_status", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "enum svn_wc_status_kind","repos_text_status", 2, argv[0] ));
@@ -18679,7 +19168,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_repos_text_status_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
enum svn_wc_status_kind result;
@@ -18690,9 +19179,9 @@ _wrap_svn_wc_status2_t_repos_text_status_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","repos_text_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","repos_text_status", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->repos_text_status);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -18703,7 +19192,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_repos_prop_status_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -18715,9 +19204,9 @@ _wrap_svn_wc_status2_t_repos_prop_status_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","repos_prop_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","repos_prop_status", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "enum svn_wc_status_kind","repos_prop_status", 2, argv[0] ));
@@ -18732,7 +19221,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_repos_prop_status_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
enum svn_wc_status_kind result;
@@ -18743,9 +19232,9 @@ _wrap_svn_wc_status2_t_repos_prop_status_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","repos_prop_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","repos_prop_status", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->repos_prop_status);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -18756,7 +19245,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_repos_lock_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_lock_t *arg2 = (svn_lock_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -18768,9 +19257,9 @@ _wrap_svn_wc_status2_t_repos_lock_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","repos_lock", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","repos_lock", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_lock_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_lock_t *","repos_lock", 2, argv[0] ));
@@ -18785,7 +19274,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_repos_lock_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_lock_t *result = 0 ;
@@ -18796,9 +19285,9 @@ _wrap_svn_wc_status2_t_repos_lock_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","repos_lock", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","repos_lock", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (svn_lock_t *) ((arg1)->repos_lock);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_lock_t, 0 | 0 );
return vresult;
@@ -18809,7 +19298,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_url_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -18822,9 +19311,9 @@ _wrap_svn_wc_status2_t_url_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","url", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","url", 2, argv[0] ));
@@ -18848,7 +19337,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_url_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -18859,9 +19348,9 @@ _wrap_svn_wc_status2_t_url_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","url", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","url", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (char *) ((arg1)->url);
{
if (result) {
@@ -18878,7 +19367,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_ood_last_cmt_rev_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -18890,9 +19379,9 @@ _wrap_svn_wc_status2_t_ood_last_cmt_rev_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","ood_last_cmt_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","ood_last_cmt_rev", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","ood_last_cmt_rev", 2, argv[0] ));
@@ -18907,7 +19396,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_ood_last_cmt_rev_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -18918,9 +19407,9 @@ _wrap_svn_wc_status2_t_ood_last_cmt_rev_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","ood_last_cmt_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","ood_last_cmt_rev", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (svn_revnum_t) ((arg1)->ood_last_cmt_rev);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -18931,7 +19420,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_ood_last_cmt_date_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
apr_time_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -18941,9 +19430,9 @@ _wrap_svn_wc_status2_t_ood_last_cmt_date_set(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","ood_last_cmt_date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","ood_last_cmt_date", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
{
arg2 = (apr_time_t)NUM2LL(argv[0]);
}
@@ -18956,7 +19445,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_ood_last_cmt_date_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
apr_time_t result;
@@ -18967,9 +19456,9 @@ _wrap_svn_wc_status2_t_ood_last_cmt_date_get(int argc, VALUE *argv, VALUE self)
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","ood_last_cmt_date", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","ood_last_cmt_date", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = ((arg1)->ood_last_cmt_date);
{
vresult = LL2NUM((apr_time_t)(result));
@@ -18982,7 +19471,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_ood_kind_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_node_kind_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -18994,9 +19483,9 @@ _wrap_svn_wc_status2_t_ood_kind_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","ood_kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","ood_kind", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_node_kind_t","ood_kind", 2, argv[0] ));
@@ -19011,7 +19500,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_ood_kind_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_node_kind_t result;
@@ -19022,9 +19511,9 @@ _wrap_svn_wc_status2_t_ood_kind_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","ood_kind", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","ood_kind", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (svn_node_kind_t) ((arg1)->ood_kind);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -19035,7 +19524,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_ood_last_cmt_author_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
char *arg2 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19048,9 +19537,9 @@ _wrap_svn_wc_status2_t_ood_last_cmt_author_set(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","ood_last_cmt_author", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","ood_last_cmt_author", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","ood_last_cmt_author", 2, argv[0] ));
@@ -19074,7 +19563,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_ood_last_cmt_author_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
char *result = 0 ;
@@ -19085,9 +19574,9 @@ _wrap_svn_wc_status2_t_ood_last_cmt_author_get(int argc, VALUE *argv, VALUE self
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","ood_last_cmt_author", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","ood_last_cmt_author", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (char *) ((arg1)->ood_last_cmt_author);
{
if (result) {
@@ -19104,7 +19593,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_tree_conflict_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_wc_conflict_description_t *arg2 = (svn_wc_conflict_description_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19116,9 +19605,9 @@ _wrap_svn_wc_status2_t_tree_conflict_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","tree_conflict", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","tree_conflict", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_wc_conflict_description_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_wc_conflict_description_t *","tree_conflict", 2, argv[0] ));
@@ -19133,7 +19622,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_tree_conflict_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_conflict_description_t *result = 0 ;
@@ -19144,9 +19633,9 @@ _wrap_svn_wc_status2_t_tree_conflict_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","tree_conflict", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","tree_conflict", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (svn_wc_conflict_description_t *) ((arg1)->tree_conflict);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_wc_conflict_description_t, 0 | 0 );
return vresult;
@@ -19157,7 +19646,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_file_external_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19167,9 +19656,9 @@ _wrap_svn_wc_status2_t_file_external_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","file_external", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","file_external", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->file_external = arg2;
return Qnil;
@@ -19180,7 +19669,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_file_external_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -19191,9 +19680,9 @@ _wrap_svn_wc_status2_t_file_external_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","file_external", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","file_external", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (svn_boolean_t) ((arg1)->file_external);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -19204,7 +19693,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_pristine_text_status_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19216,9 +19705,9 @@ _wrap_svn_wc_status2_t_pristine_text_status_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","pristine_text_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","pristine_text_status", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "enum svn_wc_status_kind","pristine_text_status", 2, argv[0] ));
@@ -19233,7 +19722,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_pristine_text_status_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
enum svn_wc_status_kind result;
@@ -19244,9 +19733,9 @@ _wrap_svn_wc_status2_t_pristine_text_status_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","pristine_text_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","pristine_text_status", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->pristine_text_status);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -19257,7 +19746,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_pristine_prop_status_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19269,9 +19758,9 @@ _wrap_svn_wc_status2_t_pristine_prop_status_set(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","pristine_prop_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","pristine_prop_status", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "enum svn_wc_status_kind","pristine_prop_status", 2, argv[0] ));
@@ -19286,7 +19775,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status2_t_pristine_prop_status_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *arg1 = (svn_wc_status2_t *) 0 ;
+ struct svn_wc_status2_t *arg1 = (struct svn_wc_status2_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
enum svn_wc_status_kind result;
@@ -19297,9 +19786,9 @@ _wrap_svn_wc_status2_t_pristine_prop_status_get(int argc, VALUE *argv, VALUE sel
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status2_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status2_t *","pristine_prop_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status2_t *","pristine_prop_status", 1, self ));
}
- arg1 = (svn_wc_status2_t *)(argp1);
+ arg1 = (struct svn_wc_status2_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->pristine_prop_status);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -19327,13 +19816,13 @@ _wrap_svn_wc_status2_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_wc_status2_t(int argc, VALUE *argv, VALUE self) {
- svn_wc_status2_t *result = 0 ;
+ struct svn_wc_status2_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_wc_status2_t *)calloc(1, sizeof(svn_wc_status2_t));
+ result = (struct svn_wc_status2_t *)calloc(1, sizeof(struct svn_wc_status2_t));
DATA_PTR(self) = result;
@@ -19346,15 +19835,15 @@ fail:
SWIGINTERN void
-free_svn_wc_status2_t(svn_wc_status2_t *arg1) {
+free_svn_wc_status2_t(struct svn_wc_status2_t *arg1) {
free((char *) arg1);
}
-swig_class SwigClassSvn_wc_status_t;
+static swig_class SwigClassSvn_wc_status_t;
SWIGINTERN VALUE
_wrap_svn_wc_status_t_entry_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
svn_wc_entry_t *arg2 = (svn_wc_entry_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19366,9 +19855,9 @@ _wrap_svn_wc_status_t_entry_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status_t *","entry", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status_t *","entry", 1, self ));
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_wc_entry_t, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_wc_entry_t const *","entry", 2, argv[0] ));
@@ -19383,7 +19872,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status_t_entry_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_wc_entry_t *result = 0 ;
@@ -19394,9 +19883,9 @@ _wrap_svn_wc_status_t_entry_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status_t *","entry", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status_t *","entry", 1, self ));
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
result = (svn_wc_entry_t *) ((arg1)->entry);
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_svn_wc_entry_t, 0 | 0 );
return vresult;
@@ -19407,7 +19896,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status_t_text_status_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19419,9 +19908,9 @@ _wrap_svn_wc_status_t_text_status_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status_t *","text_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status_t *","text_status", 1, self ));
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "enum svn_wc_status_kind","text_status", 2, argv[0] ));
@@ -19436,7 +19925,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status_t_text_status_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
enum svn_wc_status_kind result;
@@ -19447,9 +19936,9 @@ _wrap_svn_wc_status_t_text_status_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status_t *","text_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status_t *","text_status", 1, self ));
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->text_status);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -19460,7 +19949,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status_t_prop_status_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19472,9 +19961,9 @@ _wrap_svn_wc_status_t_prop_status_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status_t *","prop_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status_t *","prop_status", 1, self ));
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "enum svn_wc_status_kind","prop_status", 2, argv[0] ));
@@ -19489,7 +19978,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status_t_prop_status_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
enum svn_wc_status_kind result;
@@ -19500,9 +19989,9 @@ _wrap_svn_wc_status_t_prop_status_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status_t *","prop_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status_t *","prop_status", 1, self ));
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->prop_status);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -19513,7 +20002,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status_t_locked_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19523,9 +20012,9 @@ _wrap_svn_wc_status_t_locked_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status_t *","locked", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status_t *","locked", 1, self ));
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->locked = arg2;
return Qnil;
@@ -19536,7 +20025,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status_t_locked_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -19547,9 +20036,9 @@ _wrap_svn_wc_status_t_locked_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status_t *","locked", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status_t *","locked", 1, self ));
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
result = (svn_boolean_t) ((arg1)->locked);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -19560,7 +20049,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status_t_copied_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19570,9 +20059,9 @@ _wrap_svn_wc_status_t_copied_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status_t *","copied", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status_t *","copied", 1, self ));
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->copied = arg2;
return Qnil;
@@ -19583,7 +20072,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status_t_copied_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -19594,9 +20083,9 @@ _wrap_svn_wc_status_t_copied_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status_t *","copied", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status_t *","copied", 1, self ));
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
result = (svn_boolean_t) ((arg1)->copied);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -19607,7 +20096,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status_t_switched_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19617,9 +20106,9 @@ _wrap_svn_wc_status_t_switched_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status_t *","switched", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status_t *","switched", 1, self ));
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->switched = arg2;
return Qnil;
@@ -19630,7 +20119,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status_t_switched_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -19641,9 +20130,9 @@ _wrap_svn_wc_status_t_switched_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status_t *","switched", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status_t *","switched", 1, self ));
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
result = (svn_boolean_t) ((arg1)->switched);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -19654,7 +20143,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status_t_repos_text_status_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19666,9 +20155,9 @@ _wrap_svn_wc_status_t_repos_text_status_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status_t *","repos_text_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status_t *","repos_text_status", 1, self ));
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "enum svn_wc_status_kind","repos_text_status", 2, argv[0] ));
@@ -19683,7 +20172,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status_t_repos_text_status_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
enum svn_wc_status_kind result;
@@ -19694,9 +20183,9 @@ _wrap_svn_wc_status_t_repos_text_status_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status_t *","repos_text_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status_t *","repos_text_status", 1, self ));
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->repos_text_status);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -19707,7 +20196,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status_t_repos_prop_status_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
enum svn_wc_status_kind arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -19719,9 +20208,9 @@ _wrap_svn_wc_status_t_repos_prop_status_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status_t *","repos_prop_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status_t *","repos_prop_status", 1, self ));
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
ecode2 = SWIG_AsVal_int(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "enum svn_wc_status_kind","repos_prop_status", 2, argv[0] ));
@@ -19736,7 +20225,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_status_t_repos_prop_status_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_status_t *arg1 = (svn_wc_status_t *) 0 ;
+ struct svn_wc_status_t *arg1 = (struct svn_wc_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
enum svn_wc_status_kind result;
@@ -19747,9 +20236,9 @@ _wrap_svn_wc_status_t_repos_prop_status_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_status_t *","repos_prop_status", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_status_t *","repos_prop_status", 1, self ));
}
- arg1 = (svn_wc_status_t *)(argp1);
+ arg1 = (struct svn_wc_status_t *)(argp1);
result = (enum svn_wc_status_kind) ((arg1)->repos_prop_status);
vresult = SWIG_From_int((int)(result));
return vresult;
@@ -19777,13 +20266,13 @@ _wrap_svn_wc_status_t_allocate(VALUE self) {
SWIGINTERN VALUE
_wrap_new_svn_wc_status_t(int argc, VALUE *argv, VALUE self) {
- svn_wc_status_t *result = 0 ;
+ struct svn_wc_status_t *result = 0 ;
if ((argc < 0) || (argc > 0)) {
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
}
{
- result = (svn_wc_status_t *)calloc(1, sizeof(svn_wc_status_t));
+ result = (struct svn_wc_status_t *)calloc(1, sizeof(struct svn_wc_status_t));
DATA_PTR(self) = result;
@@ -19796,7 +20285,7 @@ fail:
SWIGINTERN void
-free_svn_wc_status_t(svn_wc_status_t *arg1) {
+free_svn_wc_status_t(struct svn_wc_status_t *arg1) {
free((char *) arg1);
}
@@ -21916,6 +22405,102 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_wc_add_from_disk2(int argc, VALUE *argv, VALUE self) {
+ svn_wc_context_t *arg1 = (svn_wc_context_t *) 0 ;
+ char *arg2 = (char *) 0 ;
+ apr_hash_t *arg3 = (apr_hash_t *) 0 ;
+ svn_wc_notify_func2_t arg4 = (svn_wc_notify_func2_t) 0 ;
+ void *arg5 = (void *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg6);
+ _global_pool = arg6;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ if ((argc < 4) || (argc > 5)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 4)",argc); SWIG_fail;
+ }
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_svn_wc_context_t, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_context_t *","svn_wc_add_from_disk2", 1, argv[0] ));
+ }
+ arg1 = (svn_wc_context_t *)(argp1);
+ res2 = SWIG_AsCharPtrAndSize(argv[1], &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","svn_wc_add_from_disk2", 2, argv[1] ));
+ }
+ arg2 = (char *)(buf2);
+ {
+ VALUE rb_pool = Qnil;
+ if (!_global_pool) {
+ svn_swig_rb_get_pool(argc, argv, self, &rb_pool, &_global_pool);
+ svn_swig_rb_push_pool(rb_pool);
+ }
+ arg3 = svn_swig_rb_hash_to_apr_hash_svn_string(argv[2], _global_pool);
+ _global_pool = NULL;
+ if (!NIL_P(rb_pool)) {
+ if (NIL_P(arg3)) {
+ svn_swig_rb_destroy_pool(rb_pool);
+ } else {
+ svn_swig_rb_set_pool_for_no_swig_type(argv[2], rb_pool);
+ }
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ }
+ {
+ arg4 = svn_swig_rb_notify_func2;
+ arg5 = (void *)svn_swig_rb_make_baton(argv[3], _global_svn_swig_rb_pool);
+ }
+ if (argc > 4) {
+
+ }
+ {
+ result = (svn_error_t *)svn_wc_add_from_disk2(arg1,(char const *)arg2,(apr_hash_t const *)arg3,arg4,arg5,arg6);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_wc_add_from_disk(int argc, VALUE *argv, VALUE self) {
svn_wc_context_t *arg1 = (svn_wc_context_t *) 0 ;
char *arg2 = (char *) 0 ;
@@ -23709,7 +24294,7 @@ _wrap_svn_wc_queue_committed3(int argc, VALUE *argv, VALUE self) {
}
{
- result = (svn_error_t *)svn_wc_queue_committed3(arg1,arg2,(char const *)arg3,arg4,(apr_array_header_t const *)arg5,arg6,arg7,(svn_checksum_t const *)arg8,arg9);
+ result = (svn_error_t *)svn_wc_queue_committed3(arg1,arg2,(char const *)arg3,arg4,(apr_array_header_t const *)arg5,arg6,arg7,(struct svn_checksum_t const *)arg8,arg9);
@@ -23812,7 +24397,7 @@ _wrap_svn_wc_queue_committed2(int argc, VALUE *argv, VALUE self) {
}
{
- result = (svn_error_t *)svn_wc_queue_committed2(arg1,(char const *)arg2,arg3,arg4,(apr_array_header_t const *)arg5,arg6,arg7,(svn_checksum_t const *)arg8,arg9);
+ result = (svn_error_t *)svn_wc_queue_committed2(arg1,(char const *)arg2,arg3,arg4,(apr_array_header_t const *)arg5,arg6,arg7,(struct svn_checksum_t const *)arg8,arg9);
@@ -25141,6 +25726,100 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_wc_check_root(int argc, VALUE *argv, VALUE self) {
+ svn_boolean_t *arg1 = (svn_boolean_t *) 0 ;
+ svn_boolean_t *arg2 = (svn_boolean_t *) 0 ;
+ svn_node_kind_t *arg3 = (svn_node_kind_t *) 0 ;
+ svn_wc_context_t *arg4 = (svn_wc_context_t *) 0 ;
+ char *arg5 = (char *) 0 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_boolean_t temp1 ;
+ svn_boolean_t temp2 ;
+ svn_node_kind_t temp3 ;
+ int res3 = SWIG_TMPOBJ ;
+ void *argp4 = 0 ;
+ int res4 = 0 ;
+ int res5 ;
+ char *buf5 = 0 ;
+ int alloc5 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg6);
+ _global_pool = arg6;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ arg2 = &temp2;
+ arg3 = &temp3;
+ if ((argc < 2) || (argc > 3)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
+ }
+ res4 = SWIG_ConvertPtr(argv[0], &argp4,SWIGTYPE_p_svn_wc_context_t, 0 | 0 );
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "svn_wc_context_t *","svn_wc_check_root", 4, argv[0] ));
+ }
+ arg4 = (svn_wc_context_t *)(argp4);
+ res5 = SWIG_AsCharPtrAndSize(argv[1], &buf5, NULL, &alloc5);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), Ruby_Format_TypeError( "", "char const *","svn_wc_check_root", 5, argv[1] ));
+ }
+ arg5 = (char *)(buf5);
+ if (argc > 2) {
+
+ }
+ {
+ result = (svn_error_t *)svn_wc_check_root(arg1,arg2,arg3,arg4,(char const *)arg5,arg6);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, *arg1 ? Qtrue : Qfalse);
+ }
+ {
+ vresult = SWIG_Ruby_AppendOutput(vresult, *arg2 ? Qtrue : Qfalse);
+ }
+ if (SWIG_IsTmpObj(res3)) {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_From_long((*arg3)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_svn_node_kind_t, new_flags));
+ }
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_wc_is_wc_root2(int argc, VALUE *argv, VALUE self) {
svn_boolean_t *arg1 = (svn_boolean_t *) 0 ;
svn_wc_context_t *arg2 = (svn_wc_context_t *) 0 ;
@@ -29428,6 +30107,227 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_wc_merge5(int argc, VALUE *argv, VALUE self) {
+ enum svn_wc_merge_outcome_t *arg1 = (enum svn_wc_merge_outcome_t *) 0 ;
+ enum svn_wc_notify_state_t *arg2 = (enum svn_wc_notify_state_t *) 0 ;
+ svn_wc_context_t *arg3 = (svn_wc_context_t *) 0 ;
+ char *arg4 = (char *) 0 ;
+ char *arg5 = (char *) 0 ;
+ char *arg6 = (char *) 0 ;
+ char *arg7 = (char *) 0 ;
+ char *arg8 = (char *) 0 ;
+ char *arg9 = (char *) 0 ;
+ svn_wc_conflict_version_t *arg10 = (svn_wc_conflict_version_t *) 0 ;
+ svn_wc_conflict_version_t *arg11 = (svn_wc_conflict_version_t *) 0 ;
+ svn_boolean_t arg12 ;
+ char *arg13 = (char *) 0 ;
+ apr_array_header_t *arg14 = (apr_array_header_t *) 0 ;
+ apr_hash_t *arg15 = (apr_hash_t *) 0 ;
+ apr_array_header_t *arg16 = (apr_array_header_t *) 0 ;
+ svn_wc_conflict_resolver_func2_t arg17 = (svn_wc_conflict_resolver_func2_t) 0 ;
+ void *arg18 = (void *) 0 ;
+ svn_cancel_func_t arg19 = (svn_cancel_func_t) 0 ;
+ void *arg20 = (void *) 0 ;
+ apr_pool_t *arg21 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ enum svn_wc_merge_outcome_t temp1 ;
+ int res1 = SWIG_TMPOBJ ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ void *argp3 = 0 ;
+ int res3 = 0 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ int res5 ;
+ char *buf5 = 0 ;
+ int alloc5 = 0 ;
+ int res6 ;
+ char *buf6 = 0 ;
+ int alloc6 = 0 ;
+ int res7 ;
+ char *buf7 = 0 ;
+ int alloc7 = 0 ;
+ int res8 ;
+ char *buf8 = 0 ;
+ int alloc8 = 0 ;
+ int res9 ;
+ char *buf9 = 0 ;
+ int alloc9 = 0 ;
+ void *argp10 = 0 ;
+ int res10 = 0 ;
+ void *argp11 = 0 ;
+ int res11 = 0 ;
+ void *argp15 = 0 ;
+ int res15 = 0 ;
+ void *argp16 = 0 ;
+ int res16 = 0 ;
+ int res18 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg21);
+ _global_pool = arg21;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ if ((argc < 18) || (argc > 19)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 18)",argc); SWIG_fail;
+ }
+ res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_wc_notify_state_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "enum svn_wc_notify_state_t *","svn_wc_merge5", 2, argv[0] ));
+ }
+ arg2 = (enum svn_wc_notify_state_t *)(argp2);
+ res3 = SWIG_ConvertPtr(argv[1], &argp3,SWIGTYPE_p_svn_wc_context_t, 0 | 0 );
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "svn_wc_context_t *","svn_wc_merge5", 3, argv[1] ));
+ }
+ arg3 = (svn_wc_context_t *)(argp3);
+ res4 = SWIG_AsCharPtrAndSize(argv[2], &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "char const *","svn_wc_merge5", 4, argv[2] ));
+ }
+ arg4 = (char *)(buf4);
+ res5 = SWIG_AsCharPtrAndSize(argv[3], &buf5, NULL, &alloc5);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), Ruby_Format_TypeError( "", "char const *","svn_wc_merge5", 5, argv[3] ));
+ }
+ arg5 = (char *)(buf5);
+ res6 = SWIG_AsCharPtrAndSize(argv[4], &buf6, NULL, &alloc6);
+ if (!SWIG_IsOK(res6)) {
+ SWIG_exception_fail(SWIG_ArgError(res6), Ruby_Format_TypeError( "", "char const *","svn_wc_merge5", 6, argv[4] ));
+ }
+ arg6 = (char *)(buf6);
+ res7 = SWIG_AsCharPtrAndSize(argv[5], &buf7, NULL, &alloc7);
+ if (!SWIG_IsOK(res7)) {
+ SWIG_exception_fail(SWIG_ArgError(res7), Ruby_Format_TypeError( "", "char const *","svn_wc_merge5", 7, argv[5] ));
+ }
+ arg7 = (char *)(buf7);
+ res8 = SWIG_AsCharPtrAndSize(argv[6], &buf8, NULL, &alloc8);
+ if (!SWIG_IsOK(res8)) {
+ SWIG_exception_fail(SWIG_ArgError(res8), Ruby_Format_TypeError( "", "char const *","svn_wc_merge5", 8, argv[6] ));
+ }
+ arg8 = (char *)(buf8);
+ res9 = SWIG_AsCharPtrAndSize(argv[7], &buf9, NULL, &alloc9);
+ if (!SWIG_IsOK(res9)) {
+ SWIG_exception_fail(SWIG_ArgError(res9), Ruby_Format_TypeError( "", "char const *","svn_wc_merge5", 9, argv[7] ));
+ }
+ arg9 = (char *)(buf9);
+ res10 = SWIG_ConvertPtr(argv[8], &argp10,SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
+ if (!SWIG_IsOK(res10)) {
+ SWIG_exception_fail(SWIG_ArgError(res10), Ruby_Format_TypeError( "", "svn_wc_conflict_version_t const *","svn_wc_merge5", 10, argv[8] ));
+ }
+ arg10 = (svn_wc_conflict_version_t *)(argp10);
+ res11 = SWIG_ConvertPtr(argv[9], &argp11,SWIGTYPE_p_svn_wc_conflict_version_t, 0 | 0 );
+ if (!SWIG_IsOK(res11)) {
+ SWIG_exception_fail(SWIG_ArgError(res11), Ruby_Format_TypeError( "", "svn_wc_conflict_version_t const *","svn_wc_merge5", 11, argv[9] ));
+ }
+ arg11 = (svn_wc_conflict_version_t *)(argp11);
+ arg12 = RTEST(argv[10]);
+ {
+ if (NIL_P(argv[11])) {
+ arg13 = NULL;
+ } else {
+ arg13 = StringValuePtr(argv[11]);
+ }
+ }
+ {
+ if (NIL_P(argv[12])) {
+ arg14 = NULL;
+ } else {
+ VALUE rb_pool;
+ apr_pool_t *pool;
+
+ svn_swig_rb_get_pool(argc, argv, self, &rb_pool, &pool);
+ arg14 = svn_swig_rb_to_apr_array_prop(argv[12], pool);
+ }
+ }
+ res15 = SWIG_ConvertPtr(argv[13], &argp15,SWIGTYPE_p_apr_hash_t, 0 | 0 );
+ if (!SWIG_IsOK(res15)) {
+ SWIG_exception_fail(SWIG_ArgError(res15), Ruby_Format_TypeError( "", "apr_hash_t *","svn_wc_merge5", 15, argv[13] ));
+ }
+ arg15 = (apr_hash_t *)(argp15);
+ res16 = SWIG_ConvertPtr(argv[14], &argp16,SWIGTYPE_p_apr_array_header_t, 0 | 0 );
+ if (!SWIG_IsOK(res16)) {
+ SWIG_exception_fail(SWIG_ArgError(res16), Ruby_Format_TypeError( "", "apr_array_header_t const *","svn_wc_merge5", 16, argv[14] ));
+ }
+ arg16 = (apr_array_header_t *)(argp16);
+ {
+ int res = SWIG_ConvertFunctionPtr(argv[15], (void**)(&arg17), SWIGTYPE_p_f_p_p_svn_wc_conflict_result_t_p_q_const__svn_wc_conflict_description2_t_p_void_p_apr_pool_t_p_apr_pool_t__p_svn_error_t);
+ if (!SWIG_IsOK(res)) {
+ SWIG_exception_fail(SWIG_ArgError(res), Ruby_Format_TypeError( "", "svn_wc_conflict_resolver_func2_t","svn_wc_merge5", 17, argv[15] ));
+ }
+ }
+ res18 = SWIG_ConvertPtr(argv[16],SWIG_as_voidptrptr(&arg18), 0, 0);
+ if (!SWIG_IsOK(res18)) {
+ SWIG_exception_fail(SWIG_ArgError(res18), Ruby_Format_TypeError( "", "void *","svn_wc_merge5", 18, argv[16] ));
+ }
+ {
+ arg19 = svn_swig_rb_cancel_func;
+ arg20 = (void *)svn_swig_rb_make_baton(argv[17], _global_svn_swig_rb_pool);
+ }
+ if (argc > 18) {
+
+ }
+ {
+ result = (svn_error_t *)svn_wc_merge5(arg1,arg2,arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,(char const *)arg7,(char const *)arg8,(char const *)arg9,(struct svn_wc_conflict_version_t const *)arg10,(struct svn_wc_conflict_version_t const *)arg11,arg12,(char const *)arg13,(apr_array_header_t const *)arg14,arg15,(apr_array_header_t const *)arg16,arg17,arg18,arg19,arg20,arg21);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ if (SWIG_IsTmpObj(res1)) {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_From_int((*arg1)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res1) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_svn_wc_merge_outcome_t, new_flags));
+ }
+ {
+ svn_swig_rb_set_baton(vresult, (VALUE)arg20);
+ }
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+ if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+ if (alloc8 == SWIG_NEWOBJ) free((char*)buf8);
+ if (alloc9 == SWIG_NEWOBJ) free((char*)buf9);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
+ if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
+ if (alloc6 == SWIG_NEWOBJ) free((char*)buf6);
+ if (alloc7 == SWIG_NEWOBJ) free((char*)buf7);
+ if (alloc8 == SWIG_NEWOBJ) free((char*)buf8);
+ if (alloc9 == SWIG_NEWOBJ) free((char*)buf9);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_wc_merge4(int argc, VALUE *argv, VALUE self) {
enum svn_wc_merge_outcome_t *arg1 = (enum svn_wc_merge_outcome_t *) 0 ;
svn_wc_context_t *arg2 = (svn_wc_context_t *) 0 ;
@@ -32595,7 +33495,7 @@ _wrap_svn_wc_transmit_text_deltas3(int argc, VALUE *argv, VALUE self) {
}
{
- result = (svn_error_t *)svn_wc_transmit_text_deltas3((svn_checksum_t const **)arg1,(svn_checksum_t const **)arg2,arg3,(char const *)arg4,arg5,(struct svn_delta_editor_t const *)arg6,arg7,arg8,arg9);
+ result = (svn_error_t *)svn_wc_transmit_text_deltas3((struct svn_checksum_t const **)arg1,(struct svn_checksum_t const **)arg2,arg3,(char const *)arg4,arg5,(struct svn_delta_editor_t const *)arg6,arg7,arg8,arg9);
@@ -33671,11 +34571,11 @@ fail:
}
-swig_class SwigClassSvn_wc_revision_status_t;
+static swig_class SwigClassSvn_wc_revision_status_t;
SWIGINTERN VALUE
_wrap_svn_wc_revision_status_t_min_rev_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -33687,9 +34587,9 @@ _wrap_svn_wc_revision_status_t_min_rev_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_revision_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_revision_status_t *","min_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_revision_status_t *","min_rev", 1, self ));
}
- arg1 = (svn_wc_revision_status_t *)(argp1);
+ arg1 = (struct svn_wc_revision_status_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","min_rev", 2, argv[0] ));
@@ -33704,7 +34604,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_revision_status_t_min_rev_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -33715,9 +34615,9 @@ _wrap_svn_wc_revision_status_t_min_rev_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_revision_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_revision_status_t *","min_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_revision_status_t *","min_rev", 1, self ));
}
- arg1 = (svn_wc_revision_status_t *)(argp1);
+ arg1 = (struct svn_wc_revision_status_t *)(argp1);
result = (svn_revnum_t) ((arg1)->min_rev);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -33728,7 +34628,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_revision_status_t_max_rev_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
svn_revnum_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -33740,9 +34640,9 @@ _wrap_svn_wc_revision_status_t_max_rev_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_revision_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_revision_status_t *","max_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_revision_status_t *","max_rev", 1, self ));
}
- arg1 = (svn_wc_revision_status_t *)(argp1);
+ arg1 = (struct svn_wc_revision_status_t *)(argp1);
ecode2 = SWIG_AsVal_long(argv[0], &val2);
if (!SWIG_IsOK(ecode2)) {
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "svn_revnum_t","max_rev", 2, argv[0] ));
@@ -33757,7 +34657,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_revision_status_t_max_rev_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_revnum_t result;
@@ -33768,9 +34668,9 @@ _wrap_svn_wc_revision_status_t_max_rev_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_revision_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_revision_status_t *","max_rev", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_revision_status_t *","max_rev", 1, self ));
}
- arg1 = (svn_wc_revision_status_t *)(argp1);
+ arg1 = (struct svn_wc_revision_status_t *)(argp1);
result = (svn_revnum_t) ((arg1)->max_rev);
vresult = SWIG_From_long((long)(result));
return vresult;
@@ -33781,7 +34681,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_revision_status_t_switched_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -33791,9 +34691,9 @@ _wrap_svn_wc_revision_status_t_switched_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_revision_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_revision_status_t *","switched", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_revision_status_t *","switched", 1, self ));
}
- arg1 = (svn_wc_revision_status_t *)(argp1);
+ arg1 = (struct svn_wc_revision_status_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->switched = arg2;
return Qnil;
@@ -33804,7 +34704,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_revision_status_t_switched_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -33815,9 +34715,9 @@ _wrap_svn_wc_revision_status_t_switched_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_revision_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_revision_status_t *","switched", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_revision_status_t *","switched", 1, self ));
}
- arg1 = (svn_wc_revision_status_t *)(argp1);
+ arg1 = (struct svn_wc_revision_status_t *)(argp1);
result = (svn_boolean_t) ((arg1)->switched);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -33828,7 +34728,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_revision_status_t_modified_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -33838,9 +34738,9 @@ _wrap_svn_wc_revision_status_t_modified_set(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_revision_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_revision_status_t *","modified", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_revision_status_t *","modified", 1, self ));
}
- arg1 = (svn_wc_revision_status_t *)(argp1);
+ arg1 = (struct svn_wc_revision_status_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->modified = arg2;
return Qnil;
@@ -33851,7 +34751,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_revision_status_t_modified_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -33862,9 +34762,9 @@ _wrap_svn_wc_revision_status_t_modified_get(int argc, VALUE *argv, VALUE self) {
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_revision_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_revision_status_t *","modified", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_revision_status_t *","modified", 1, self ));
}
- arg1 = (svn_wc_revision_status_t *)(argp1);
+ arg1 = (struct svn_wc_revision_status_t *)(argp1);
result = (svn_boolean_t) ((arg1)->modified);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -33875,7 +34775,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_revision_status_t_sparse_checkout_set(int argc, VALUE *argv, VALUE self) {
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
svn_boolean_t arg2 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -33885,9 +34785,9 @@ _wrap_svn_wc_revision_status_t_sparse_checkout_set(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_revision_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_revision_status_t *","sparse_checkout", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_revision_status_t *","sparse_checkout", 1, self ));
}
- arg1 = (svn_wc_revision_status_t *)(argp1);
+ arg1 = (struct svn_wc_revision_status_t *)(argp1);
arg2 = RTEST(argv[0]);
if (arg1) (arg1)->sparse_checkout = arg2;
return Qnil;
@@ -33898,7 +34798,7 @@ fail:
SWIGINTERN VALUE
_wrap_svn_wc_revision_status_t_sparse_checkout_get(int argc, VALUE *argv, VALUE self) {
- svn_wc_revision_status_t *arg1 = (svn_wc_revision_status_t *) 0 ;
+ struct svn_wc_revision_status_t *arg1 = (struct svn_wc_revision_status_t *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
svn_boolean_t result;
@@ -33909,9 +34809,9 @@ _wrap_svn_wc_revision_status_t_sparse_checkout_get(int argc, VALUE *argv, VALUE
}
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_svn_wc_revision_status_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "svn_wc_revision_status_t *","sparse_checkout", 1, self ));
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "struct svn_wc_revision_status_t *","sparse_checkout", 1, self ));
}
- arg1 = (svn_wc_revision_status_t *)(argp1);
+ arg1 = (struct svn_wc_revision_status_t *)(argp1);
result = (svn_boolean_t) ((arg1)->sparse_checkout);
vresult = result ? Qtrue : Qfalse;
return vresult;
@@ -33950,7 +34850,7 @@ _wrap_new_svn_wc_revision_status_t(int argc, VALUE *argv, VALUE self) {
int res1 ;
char *buf1 = 0 ;
int alloc1 = 0 ;
- svn_wc_revision_status_t *result = 0 ;
+ struct svn_wc_revision_status_t *result = 0 ;
{
svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg6);
@@ -33981,7 +34881,7 @@ _wrap_new_svn_wc_revision_status_t(int argc, VALUE *argv, VALUE self) {
}
{
- result = (svn_wc_revision_status_t *)new_svn_wc_revision_status_t((char const *)arg1,(char const *)arg2,arg3,arg4,arg5,arg6);
+ result = (struct svn_wc_revision_status_t *)new_svn_wc_revision_status_t((char const *)arg1,(char const *)arg2,arg3,arg4,arg5,arg6);
DATA_PTR(self) = result;
@@ -34012,10 +34912,10 @@ fail:
}
-SWIGINTERN void delete_svn_wc_revision_status_t(svn_wc_revision_status_t *self){
+SWIGINTERN void delete_svn_wc_revision_status_t(struct svn_wc_revision_status_t *self){
}
SWIGINTERN void
-free_svn_wc_revision_status_t(svn_wc_revision_status_t *arg1) {
+free_svn_wc_revision_status_t(struct svn_wc_revision_status_t *arg1) {
delete_svn_wc_revision_status_t(arg1);
}
@@ -34709,6 +35609,92 @@ fail:
SWIGINTERN VALUE
+_wrap_svn_wc_read_kind2(int argc, VALUE *argv, VALUE self) {
+ svn_node_kind_t *arg1 = (svn_node_kind_t *) 0 ;
+ svn_wc_context_t *arg2 = (svn_wc_context_t *) 0 ;
+ char *arg3 = (char *) 0 ;
+ svn_boolean_t arg4 ;
+ svn_boolean_t arg5 ;
+ apr_pool_t *arg6 = (apr_pool_t *) 0 ;
+ VALUE _global_svn_swig_rb_pool ;
+ apr_pool_t *_global_pool ;
+ svn_node_kind_t temp1 ;
+ int res1 = SWIG_TMPOBJ ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ svn_error_t *result = 0 ;
+ VALUE vresult = Qnil;
+
+ {
+ svn_swig_rb_get_pool(argc, argv, self, &_global_svn_swig_rb_pool, &arg6);
+ _global_pool = arg6;
+ svn_swig_rb_push_pool(_global_svn_swig_rb_pool);
+ }
+ arg1 = &temp1;
+ if ((argc < 4) || (argc > 5)) {
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 4)",argc); SWIG_fail;
+ }
+ res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_svn_wc_context_t, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "svn_wc_context_t *","svn_wc_read_kind2", 2, argv[0] ));
+ }
+ arg2 = (svn_wc_context_t *)(argp2);
+ res3 = SWIG_AsCharPtrAndSize(argv[1], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","svn_wc_read_kind2", 3, argv[1] ));
+ }
+ arg3 = (char *)(buf3);
+ arg4 = RTEST(argv[2]);
+ arg5 = RTEST(argv[3]);
+ if (argc > 4) {
+
+ }
+ {
+ result = (svn_error_t *)svn_wc_read_kind2(arg1,arg2,(char const *)arg3,arg4,arg5,arg6);
+
+
+
+ }
+ {
+ if (result) {
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_handle_svn_error(result);
+ }
+ vresult = Qnil;
+ }
+ if (SWIG_IsTmpObj(res1)) {
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_From_long((*arg1)));
+ } else {
+ int new_flags = SWIG_IsNewObj(res1) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
+ vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_svn_node_kind_t, new_flags));
+ }
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return vresult;
+fail:
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ {
+ VALUE target;
+ target = _global_vresult_address == &vresult ? self : vresult;
+ if (!svn_swig_rb_set_pool(target, _global_svn_swig_rb_pool))
+ svn_swig_rb_destroy_pool(_global_svn_swig_rb_pool);
+ svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
+ }
+ return Qnil;
+}
+
+
+SWIGINTERN VALUE
_wrap_svn_wc_read_kind(int argc, VALUE *argv, VALUE self) {
svn_node_kind_t *arg1 = (svn_node_kind_t *) 0 ;
svn_wc_context_t *arg2 = (svn_wc_context_t *) 0 ;
@@ -39845,7 +40831,7 @@ fail:
}
-swig_class SwigClassSvn_wc_committed_queue_t;
+static swig_class SwigClassSvn_wc_committed_queue_t;
#ifdef HAVE_RB_DEFINE_ALLOC_FUNC
SWIGINTERN VALUE
@@ -39916,7 +40902,7 @@ free_svn_wc_committed_queue_t(struct svn_wc_committed_queue_t *arg1) {
delete_svn_wc_committed_queue_t(arg1);
}
-swig_class SwigClassSvn_wc_traversal_info_t;
+static swig_class SwigClassSvn_wc_traversal_info_t;
#ifdef HAVE_RB_DEFINE_ALLOC_FUNC
SWIGINTERN VALUE
@@ -39990,7 +40976,7 @@ free_svn_wc_traversal_info_t(struct svn_wc_traversal_info_t *arg1) {
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
-static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_apr_array_header_t = {"_p_apr_array_header_t", "apr_array_header_t *|svn_rangelist_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_file_t = {"_p_apr_file_t", "apr_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_hash_t = {"_p_apr_hash_t", "apr_hash_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_apr_int32_t = {"_p_apr_int32_t", "apr_int32_t *|time_t *", 0, 0, (void*)0, 0};
@@ -40048,7 +41034,7 @@ static swig_type_info _swigt__p_p_apr_array_header_t = {"_p_p_apr_array_header_t
static swig_type_info _swigt__p_p_apr_file_t = {"_p_p_apr_file_t", "apr_file_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_apr_hash_t = {"_p_p_apr_hash_t", "apr_hash_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_p_svn_checksum_t = {"_p_p_svn_checksum_t", "svn_checksum_t **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_svn_checksum_t = {"_p_p_svn_checksum_t", "struct svn_checksum_t **|svn_checksum_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_delta_editor_t = {"_p_p_svn_delta_editor_t", "struct svn_delta_editor_t **|svn_delta_editor_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_stream_t = {"_p_p_svn_stream_t", "struct svn_stream_t **|svn_stream_t **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_svn_string_t = {"_p_p_svn_string_t", "struct svn_string_t **|svn_string_t **", 0, 0, (void*)0, 0};
@@ -40071,7 +41057,9 @@ static swig_type_info _swigt__p_svn_auth_iterstate_t = {"_p_svn_auth_iterstate_t
static swig_type_info _swigt__p_svn_auth_provider_object_t = {"_p_svn_auth_provider_object_t", "struct svn_auth_provider_object_t *|svn_auth_provider_object_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_provider_t = {"_p_svn_auth_provider_t", "struct svn_auth_provider_t *|svn_auth_provider_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_auth_ssl_server_cert_info_t = {"_p_svn_auth_ssl_server_cert_info_t", "struct svn_auth_ssl_server_cert_info_t *|svn_auth_ssl_server_cert_info_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "svn_checksum_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_ctx_t = {"_p_svn_checksum_ctx_t", "struct svn_checksum_ctx_t *|svn_checksum_ctx_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_kind_t = {"_p_svn_checksum_kind_t", "enum svn_checksum_kind_t *|svn_checksum_kind_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_checksum_t = {"_p_svn_checksum_t", "struct svn_checksum_t *|svn_checksum_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_commit_info_t = {"_p_svn_commit_info_t", "struct svn_commit_info_t *|svn_commit_info_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_config_t = {"_p_svn_config_t", "struct svn_config_t *|svn_config_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_delta_editor_t = {"_p_svn_delta_editor_t", "struct svn_delta_editor_t *|svn_delta_editor_t *", 0, 0, (void*)0, 0};
@@ -40107,6 +41095,7 @@ static swig_type_info _swigt__p_svn_opt_subcommand_desc2_t = {"_p_svn_opt_subcom
static swig_type_info _swigt__p_svn_opt_subcommand_desc_t = {"_p_svn_opt_subcommand_desc_t", "struct svn_opt_subcommand_desc_t *|svn_opt_subcommand_desc_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_file_t = {"_p_svn_patch_file_t", "struct svn_patch_file_t *|svn_patch_file_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_patch_t = {"_p_svn_patch_t", "struct svn_patch_t *|svn_patch_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_prop_inherited_item_t = {"_p_svn_prop_inherited_item_t", "struct svn_prop_inherited_item_t *|svn_prop_inherited_item_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_kind = {"_p_svn_prop_kind", "svn_prop_kind_t *|enum svn_prop_kind *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_prop_patch_t = {"_p_svn_prop_patch_t", "struct svn_prop_patch_t *|svn_prop_patch_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_ra_callbacks2_t = {"_p_svn_ra_callbacks2_t", "struct svn_ra_callbacks2_t *|svn_ra_callbacks2_t *", 0, 0, (void*)0, 0};
@@ -40125,6 +41114,9 @@ static swig_type_info _swigt__p_svn_txdelta_op_t = {"_p_svn_txdelta_op_t", "stru
static swig_type_info _swigt__p_svn_txdelta_stream_t = {"_p_svn_txdelta_stream_t", "struct svn_txdelta_stream_t *|svn_txdelta_stream_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_txdelta_window_t = {"_p_svn_txdelta_window_t", "struct svn_txdelta_window_t *|svn_txdelta_window_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_checklist_t = {"_p_svn_version_checklist_t", "struct svn_version_checklist_t *|svn_version_checklist_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_linked_lib_t = {"_p_svn_version_ext_linked_lib_t", "struct svn_version_ext_linked_lib_t *|svn_version_ext_linked_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_ext_loaded_lib_t = {"_p_svn_version_ext_loaded_lib_t", "struct svn_version_ext_loaded_lib_t *|svn_version_ext_loaded_lib_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_svn_version_extended_t = {"_p_svn_version_extended_t", "struct svn_version_extended_t *|svn_version_extended_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_version_t = {"_p_svn_version_t", "struct svn_version_t *|svn_version_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_wc_adm_access_t = {"_p_svn_wc_adm_access_t", "struct svn_wc_adm_access_t *|svn_wc_adm_access_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_svn_wc_committed_queue_t = {"_p_svn_wc_committed_queue_t", "struct svn_wc_committed_queue_t *|svn_wc_committed_queue_t *", 0, 0, (void*)0, 0};
@@ -40245,6 +41237,8 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_auth_provider_object_t,
&_swigt__p_svn_auth_provider_t,
&_swigt__p_svn_auth_ssl_server_cert_info_t,
+ &_swigt__p_svn_checksum_ctx_t,
+ &_swigt__p_svn_checksum_kind_t,
&_swigt__p_svn_checksum_t,
&_swigt__p_svn_commit_info_t,
&_swigt__p_svn_config_t,
@@ -40281,6 +41275,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_opt_subcommand_desc_t,
&_swigt__p_svn_patch_file_t,
&_swigt__p_svn_patch_t,
+ &_swigt__p_svn_prop_inherited_item_t,
&_swigt__p_svn_prop_kind,
&_swigt__p_svn_prop_patch_t,
&_swigt__p_svn_ra_callbacks2_t,
@@ -40299,6 +41294,9 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_svn_txdelta_stream_t,
&_swigt__p_svn_txdelta_window_t,
&_swigt__p_svn_version_checklist_t,
+ &_swigt__p_svn_version_ext_linked_lib_t,
+ &_swigt__p_svn_version_ext_loaded_lib_t,
+ &_swigt__p_svn_version_extended_t,
&_swigt__p_svn_version_t,
&_swigt__p_svn_wc_adm_access_t,
&_swigt__p_svn_wc_committed_queue_t,
@@ -40419,6 +41417,8 @@ static swig_cast_info _swigc__p_svn_auth_iterstate_t[] = { {&_swigt__p_svn_auth
static swig_cast_info _swigc__p_svn_auth_provider_object_t[] = { {&_swigt__p_svn_auth_provider_object_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_provider_t[] = { {&_swigt__p_svn_auth_provider_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_auth_ssl_server_cert_info_t[] = { {&_swigt__p_svn_auth_ssl_server_cert_info_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_ctx_t[] = { {&_swigt__p_svn_checksum_ctx_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_checksum_kind_t[] = { {&_swigt__p_svn_checksum_kind_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_checksum_t[] = { {&_swigt__p_svn_checksum_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_commit_info_t[] = { {&_swigt__p_svn_commit_info_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_config_t[] = { {&_swigt__p_svn_config_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -40455,6 +41455,7 @@ static swig_cast_info _swigc__p_svn_opt_subcommand_desc2_t[] = { {&_swigt__p_sv
static swig_cast_info _swigc__p_svn_opt_subcommand_desc_t[] = { {&_swigt__p_svn_opt_subcommand_desc_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_file_t[] = { {&_swigt__p_svn_patch_file_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_patch_t[] = { {&_swigt__p_svn_patch_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_prop_inherited_item_t[] = { {&_swigt__p_svn_prop_inherited_item_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_kind[] = { {&_swigt__p_svn_prop_kind, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_prop_patch_t[] = { {&_swigt__p_svn_prop_patch_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_ra_callbacks2_t[] = { {&_swigt__p_svn_ra_callbacks2_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -40473,6 +41474,9 @@ static swig_cast_info _swigc__p_svn_txdelta_op_t[] = { {&_swigt__p_svn_txdelta_
static swig_cast_info _swigc__p_svn_txdelta_stream_t[] = { {&_swigt__p_svn_txdelta_stream_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_txdelta_window_t[] = { {&_swigt__p_svn_txdelta_window_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_checklist_t[] = { {&_swigt__p_svn_version_checklist_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_linked_lib_t[] = { {&_swigt__p_svn_version_ext_linked_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_ext_loaded_lib_t[] = { {&_swigt__p_svn_version_ext_loaded_lib_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_svn_version_extended_t[] = { {&_swigt__p_svn_version_extended_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_version_t[] = { {&_swigt__p_svn_version_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_wc_adm_access_t[] = { {&_swigt__p_svn_wc_adm_access_t, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_svn_wc_committed_queue_t[] = { {&_swigt__p_svn_wc_committed_queue_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -40593,6 +41597,8 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_auth_provider_object_t,
_swigc__p_svn_auth_provider_t,
_swigc__p_svn_auth_ssl_server_cert_info_t,
+ _swigc__p_svn_checksum_ctx_t,
+ _swigc__p_svn_checksum_kind_t,
_swigc__p_svn_checksum_t,
_swigc__p_svn_commit_info_t,
_swigc__p_svn_config_t,
@@ -40629,6 +41635,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_opt_subcommand_desc_t,
_swigc__p_svn_patch_file_t,
_swigc__p_svn_patch_t,
+ _swigc__p_svn_prop_inherited_item_t,
_swigc__p_svn_prop_kind,
_swigc__p_svn_prop_patch_t,
_swigc__p_svn_ra_callbacks2_t,
@@ -40647,6 +41654,9 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_svn_txdelta_stream_t,
_swigc__p_svn_txdelta_window_t,
_swigc__p_svn_version_checklist_t,
+ _swigc__p_svn_version_ext_linked_lib_t,
+ _swigc__p_svn_version_ext_loaded_lib_t,
+ _swigc__p_svn_version_extended_t,
_swigc__p_svn_version_t,
_swigc__p_svn_wc_adm_access_t,
_swigc__p_svn_wc_committed_queue_t,
@@ -40748,8 +41758,6 @@ SWIG_InitializeModule(void *clientdata) {
swig_module_info *module_head, *iter;
int found, init;
- clientdata = clientdata;
-
/* check to see if the circular list has been setup, if not, set it up */
if (swig_module.next==0) {
/* Initialize the swig_module */
@@ -41086,6 +42094,13 @@ SWIGEXPORT void Init_wc(void) {
rb_define_const(mWc, "Svn_wc_notify_failed_locked", SWIG_From_int((int)(svn_wc_notify_failed_locked)));
rb_define_const(mWc, "Svn_wc_notify_failed_forbidden_by_server", SWIG_From_int((int)(svn_wc_notify_failed_forbidden_by_server)));
rb_define_const(mWc, "Svn_wc_notify_skip_conflicted", SWIG_From_int((int)(svn_wc_notify_skip_conflicted)));
+ rb_define_const(mWc, "Svn_wc_notify_update_broken_lock", SWIG_From_int((int)(svn_wc_notify_update_broken_lock)));
+ rb_define_const(mWc, "Svn_wc_notify_failed_obstruction", SWIG_From_int((int)(svn_wc_notify_failed_obstruction)));
+ rb_define_const(mWc, "Svn_wc_notify_conflict_resolver_starting", SWIG_From_int((int)(svn_wc_notify_conflict_resolver_starting)));
+ rb_define_const(mWc, "Svn_wc_notify_conflict_resolver_done", SWIG_From_int((int)(svn_wc_notify_conflict_resolver_done)));
+ rb_define_const(mWc, "Svn_wc_notify_left_local_modifications", SWIG_From_int((int)(svn_wc_notify_left_local_modifications)));
+ rb_define_const(mWc, "Svn_wc_notify_foreign_copy_begin", SWIG_From_int((int)(svn_wc_notify_foreign_copy_begin)));
+ rb_define_const(mWc, "Svn_wc_notify_move_broken", SWIG_From_int((int)(svn_wc_notify_move_broken)));
rb_define_const(mWc, "Svn_wc_notify_state_inapplicable", SWIG_From_int((int)(svn_wc_notify_state_inapplicable)));
rb_define_const(mWc, "Svn_wc_notify_state_unknown", SWIG_From_int((int)(svn_wc_notify_state_unknown)));
rb_define_const(mWc, "Svn_wc_notify_state_unchanged", SWIG_From_int((int)(svn_wc_notify_state_unchanged)));
@@ -41168,6 +42183,8 @@ SWIGEXPORT void Init_wc(void) {
rb_define_const(mWc, "Svn_wc_conflict_reason_unversioned", SWIG_From_int((int)(svn_wc_conflict_reason_unversioned)));
rb_define_const(mWc, "Svn_wc_conflict_reason_added", SWIG_From_int((int)(svn_wc_conflict_reason_added)));
rb_define_const(mWc, "Svn_wc_conflict_reason_replaced", SWIG_From_int((int)(svn_wc_conflict_reason_replaced)));
+ rb_define_const(mWc, "Svn_wc_conflict_reason_moved_away", SWIG_From_int((int)(svn_wc_conflict_reason_moved_away)));
+ rb_define_const(mWc, "Svn_wc_conflict_reason_moved_here", SWIG_From_int((int)(svn_wc_conflict_reason_moved_here)));
rb_define_const(mWc, "Svn_wc_conflict_kind_text", SWIG_From_int((int)(svn_wc_conflict_kind_text)));
rb_define_const(mWc, "Svn_wc_conflict_kind_property", SWIG_From_int((int)(svn_wc_conflict_kind_property)));
rb_define_const(mWc, "Svn_wc_conflict_kind_tree", SWIG_From_int((int)(svn_wc_conflict_kind_tree)));
@@ -41188,9 +42205,12 @@ SWIGEXPORT void Init_wc(void) {
rb_define_method(SwigClassSvn_wc_conflict_version_t.klass, "path_in_repos", _wrap_svn_wc_conflict_version_t_path_in_repos_get, -1);
rb_define_method(SwigClassSvn_wc_conflict_version_t.klass, "node_kind=", _wrap_svn_wc_conflict_version_t_node_kind_set, -1);
rb_define_method(SwigClassSvn_wc_conflict_version_t.klass, "node_kind", _wrap_svn_wc_conflict_version_t_node_kind_get, -1);
+ rb_define_method(SwigClassSvn_wc_conflict_version_t.klass, "repos_uuid=", _wrap_svn_wc_conflict_version_t_repos_uuid_set, -1);
+ rb_define_method(SwigClassSvn_wc_conflict_version_t.klass, "repos_uuid", _wrap_svn_wc_conflict_version_t_repos_uuid_get, -1);
SwigClassSvn_wc_conflict_version_t.mark = 0;
SwigClassSvn_wc_conflict_version_t.destroy = (void (*)(void *)) free_svn_wc_conflict_version_t;
SwigClassSvn_wc_conflict_version_t.trackObjects = 0;
+ rb_define_module_function(mWc, "svn_wc_conflict_version_create2", _wrap_svn_wc_conflict_version_create2, -1);
rb_define_module_function(mWc, "svn_wc_conflict_version_create", _wrap_svn_wc_conflict_version_create, -1);
rb_define_module_function(mWc, "svn_wc_conflict_version_dup", _wrap_svn_wc_conflict_version_dup, -1);
@@ -41285,6 +42305,7 @@ SWIGEXPORT void Init_wc(void) {
rb_define_const(mWc, "Svn_wc_conflict_choose_theirs_conflict", SWIG_From_int((int)(svn_wc_conflict_choose_theirs_conflict)));
rb_define_const(mWc, "Svn_wc_conflict_choose_mine_conflict", SWIG_From_int((int)(svn_wc_conflict_choose_mine_conflict)));
rb_define_const(mWc, "Svn_wc_conflict_choose_merged", SWIG_From_int((int)(svn_wc_conflict_choose_merged)));
+ rb_define_const(mWc, "Svn_wc_conflict_choose_unspecified", SWIG_From_int((int)(svn_wc_conflict_choose_unspecified)));
SwigClassSvn_wc_conflict_result_t.klass = rb_define_class_under(mWc, "Svn_wc_conflict_result_t", rb_cObject);
SWIG_TypeClientData(SWIGTYPE_p_svn_wc_conflict_result_t, (void *) &SwigClassSvn_wc_conflict_result_t);
@@ -41516,6 +42537,10 @@ SWIGEXPORT void Init_wc(void) {
rb_define_method(SwigClassSvn_wc_info_t.klass, "conflicts", _wrap_svn_wc_info_t_conflicts_get, -1);
rb_define_method(SwigClassSvn_wc_info_t.klass, "wcroot_abspath=", _wrap_svn_wc_info_t_wcroot_abspath_set, -1);
rb_define_method(SwigClassSvn_wc_info_t.klass, "wcroot_abspath", _wrap_svn_wc_info_t_wcroot_abspath_get, -1);
+ rb_define_method(SwigClassSvn_wc_info_t.klass, "moved_from_abspath=", _wrap_svn_wc_info_t_moved_from_abspath_set, -1);
+ rb_define_method(SwigClassSvn_wc_info_t.klass, "moved_from_abspath", _wrap_svn_wc_info_t_moved_from_abspath_get, -1);
+ rb_define_method(SwigClassSvn_wc_info_t.klass, "moved_to_abspath=", _wrap_svn_wc_info_t_moved_to_abspath_set, -1);
+ rb_define_method(SwigClassSvn_wc_info_t.klass, "moved_to_abspath", _wrap_svn_wc_info_t_moved_to_abspath_get, -1);
SwigClassSvn_wc_info_t.mark = 0;
SwigClassSvn_wc_info_t.destroy = (void (*)(void *)) free_svn_wc_info_t;
SwigClassSvn_wc_info_t.trackObjects = 0;
@@ -41630,6 +42655,12 @@ SWIGEXPORT void Init_wc(void) {
rb_define_method(SwigClassSvn_wc_status3_t.klass, "ood_changed_date", _wrap_svn_wc_status3_t_ood_changed_date_get, -1);
rb_define_method(SwigClassSvn_wc_status3_t.klass, "ood_changed_author=", _wrap_svn_wc_status3_t_ood_changed_author_set, -1);
rb_define_method(SwigClassSvn_wc_status3_t.klass, "ood_changed_author", _wrap_svn_wc_status3_t_ood_changed_author_get, -1);
+ rb_define_method(SwigClassSvn_wc_status3_t.klass, "moved_from_abspath=", _wrap_svn_wc_status3_t_moved_from_abspath_set, -1);
+ rb_define_method(SwigClassSvn_wc_status3_t.klass, "moved_from_abspath", _wrap_svn_wc_status3_t_moved_from_abspath_get, -1);
+ rb_define_method(SwigClassSvn_wc_status3_t.klass, "moved_to_abspath=", _wrap_svn_wc_status3_t_moved_to_abspath_set, -1);
+ rb_define_method(SwigClassSvn_wc_status3_t.klass, "moved_to_abspath", _wrap_svn_wc_status3_t_moved_to_abspath_get, -1);
+ rb_define_method(SwigClassSvn_wc_status3_t.klass, "file_external=", _wrap_svn_wc_status3_t_file_external_set, -1);
+ rb_define_method(SwigClassSvn_wc_status3_t.klass, "file_external", _wrap_svn_wc_status3_t_file_external_get, -1);
SwigClassSvn_wc_status3_t.mark = 0;
SwigClassSvn_wc_status3_t.destroy = (void (*)(void *)) free_svn_wc_status3_t;
SwigClassSvn_wc_status3_t.trackObjects = 0;
@@ -41722,6 +42753,7 @@ SWIGEXPORT void Init_wc(void) {
rb_define_module_function(mWc, "svn_wc_delete3", _wrap_svn_wc_delete3, -1);
rb_define_module_function(mWc, "svn_wc_delete2", _wrap_svn_wc_delete2, -1);
rb_define_module_function(mWc, "svn_wc_delete", _wrap_svn_wc_delete, -1);
+ rb_define_module_function(mWc, "svn_wc_add_from_disk2", _wrap_svn_wc_add_from_disk2, -1);
rb_define_module_function(mWc, "svn_wc_add_from_disk", _wrap_svn_wc_add_from_disk, -1);
rb_define_module_function(mWc, "svn_wc_add4", _wrap_svn_wc_add4, -1);
rb_define_module_function(mWc, "svn_wc_add3", _wrap_svn_wc_add3, -1);
@@ -41752,6 +42784,7 @@ SWIGEXPORT void Init_wc(void) {
rb_define_module_function(mWc, "svn_wc_crawl_revisions3", _wrap_svn_wc_crawl_revisions3, -1);
rb_define_module_function(mWc, "svn_wc_crawl_revisions2", _wrap_svn_wc_crawl_revisions2, -1);
rb_define_module_function(mWc, "svn_wc_crawl_revisions", _wrap_svn_wc_crawl_revisions, -1);
+ rb_define_module_function(mWc, "svn_wc_check_root", _wrap_svn_wc_check_root, -1);
rb_define_module_function(mWc, "svn_wc_is_wc_root2", _wrap_svn_wc_is_wc_root2, -1);
rb_define_module_function(mWc, "svn_wc_is_wc_root", _wrap_svn_wc_is_wc_root, -1);
rb_define_module_function(mWc, "svn_wc_get_actual_target2", _wrap_svn_wc_get_actual_target2, -1);
@@ -41795,6 +42828,7 @@ SWIGEXPORT void Init_wc(void) {
rb_define_const(mWc, "Svn_wc_merge_merged", SWIG_From_int((int)(svn_wc_merge_merged)));
rb_define_const(mWc, "Svn_wc_merge_conflict", SWIG_From_int((int)(svn_wc_merge_conflict)));
rb_define_const(mWc, "Svn_wc_merge_no_merge", SWIG_From_int((int)(svn_wc_merge_no_merge)));
+ rb_define_module_function(mWc, "svn_wc_merge5", _wrap_svn_wc_merge5, -1);
rb_define_module_function(mWc, "svn_wc_merge4", _wrap_svn_wc_merge4, -1);
rb_define_module_function(mWc, "svn_wc_merge3", _wrap_svn_wc_merge3, -1);
rb_define_module_function(mWc, "svn_wc_merge2", _wrap_svn_wc_merge2, -1);
@@ -41862,6 +42896,7 @@ SWIGEXPORT void Init_wc(void) {
rb_define_module_function(mWc, "svn_wc_crop_tree2", _wrap_svn_wc_crop_tree2, -1);
rb_define_module_function(mWc, "svn_wc_crop_tree", _wrap_svn_wc_crop_tree, -1);
rb_define_module_function(mWc, "svn_wc_exclude", _wrap_svn_wc_exclude, -1);
+ rb_define_module_function(mWc, "svn_wc_read_kind2", _wrap_svn_wc_read_kind2, -1);
rb_define_module_function(mWc, "svn_wc_read_kind", _wrap_svn_wc_read_kind, -1);
rb_define_module_function(mWc, "svn_wc_diff_callbacks4_invoke_file_opened", _wrap_svn_wc_diff_callbacks4_invoke_file_opened, -1);
rb_define_module_function(mWc, "svn_wc_diff_callbacks4_invoke_file_changed", _wrap_svn_wc_diff_callbacks4_invoke_file_changed, -1);
diff --git a/subversion/bindings/swig/ruby/test/greek_tree.rb b/subversion/bindings/swig/ruby/test/greek_tree.rb
index 908d8d5..ca0f9a3 100644
--- a/subversion/bindings/swig/ruby/test/greek_tree.rb
+++ b/subversion/bindings/swig/ruby/test/greek_tree.rb
@@ -47,15 +47,16 @@ module SvnTestUtil
const_set(path.split("/").last.upcase, path)
end
- def initialize(tmp_path, wc_path, repos_uri)
+ def initialize(tmp_path, import_path, wc_path, repos_uri)
@tmp_path = tmp_path
+ @import_path = import_path
@wc_path = wc_path
@repos_uri = repos_uri
end
def setup(context)
TREE.each do |path, contents|
- entry = File.expand_path(File.join(@tmp_path, path))
+ entry = File.expand_path(File.join(@import_path, path))
if contents
File.open(entry, 'w') {|f| f.print(contents)}
else
@@ -63,7 +64,7 @@ module SvnTestUtil
end
end
- context.import(@tmp_path, @repos_uri)
+ context.import(@import_path, @repos_uri)
context.update(@wc_path)
end
diff --git a/subversion/bindings/swig/ruby/test/my-assertions.rb b/subversion/bindings/swig/ruby/test/my-assertions.rb
index 33c0970..77c42e7 100644
--- a/subversion/bindings/swig/ruby/test/my-assertions.rb
+++ b/subversion/bindings/swig/ruby/test/my-assertions.rb
@@ -24,20 +24,33 @@ module Test
module Unit
module Assertions
+ # make an intermediary assertion block handler
+ def _my_assert_block(&block)
+ if RUBY_VERSION > '1.9'
+ assert_block do
+ yield
+ end
+ else
+ _wrap_assertion do
+ yield
+ end
+ end
+ end
+
def assert_true(boolean, message=nil)
- _wrap_assertion do
+ _my_assert_block do
assert_equal(true, boolean, message)
end
end
def assert_false(boolean, message=nil)
- _wrap_assertion do
+ _my_assert_block do
assert_equal(false, boolean, message)
end
end
def assert_nested_sorted_array(expected, actual, message=nil)
- _wrap_assertion do
+ _my_assert_block do
assert_equal(expected.collect {|elem| elem.sort},
actual.collect {|elem| elem.sort},
message)
@@ -45,7 +58,7 @@ module Test
end
def assert_equal_log_entries(expected, actual, message=nil)
- _wrap_assertion do
+ _my_assert_block do
actual = actual.collect do |entry|
changed_paths = entry.changed_paths
changed_paths.each_key do |path|
diff --git a/subversion/bindings/swig/ruby/test/test-unit-ext.rb b/subversion/bindings/swig/ruby/test/test-unit-ext.rb
index 974f2f4..ce88d75 100644
--- a/subversion/bindings/swig/ruby/test/test-unit-ext.rb
+++ b/subversion/bindings/swig/ruby/test/test-unit-ext.rb
@@ -17,7 +17,7 @@
# under the License.
# ====================================================================
-require "test-unit-ext/always-show-result"
+require "test-unit-ext/always-show-result" if RUBY_VERSION < '1.9.3'
require "test-unit-ext/priority"
-require "test-unit-ext/backtrace-filter"
-require "test-unit-ext/long-display-for-emacs"
+require "test-unit-ext/backtrace-filter" if RUBY_VERSION < '1.9.3'
+require "test-unit-ext/long-display-for-emacs" if RUBY_VERSION < '1.9.3'
diff --git a/subversion/bindings/swig/ruby/test/test-unit-ext/priority.rb b/subversion/bindings/swig/ruby/test/test-unit-ext/priority.rb
index 2a746a7..6e5e9a5 100644
--- a/subversion/bindings/swig/ruby/test/test-unit-ext/priority.rb
+++ b/subversion/bindings/swig/ruby/test/test-unit-ext/priority.rb
@@ -179,7 +179,7 @@ module Test
apply_priority
!@tests.empty?
end
- end
+ end if RUBY_VERSION < '1.9.3'
class AutoRunner
alias_method :original_options, :options
diff --git a/subversion/bindings/swig/ruby/test/test_client.rb b/subversion/bindings/swig/ruby/test/test_client.rb
index 5970060..9c97567 100644
--- a/subversion/bindings/swig/ruby/test/test_client.rb
+++ b/subversion/bindings/swig/ruby/test/test_client.rb
@@ -334,7 +334,7 @@ class SvnClientTest < Test::Unit::TestCase
file = "sample.txt"
deep_dir_path = File.join(@wc_path, deep_dir)
path = File.join(deep_dir_path, file)
- tmp_deep_dir_path = File.join(@tmp_path, deep_dir)
+ tmp_deep_dir_path = File.join(@import_path, deep_dir)
tmp_path = File.join(tmp_deep_dir_path, file)
make_context(log) do |ctx|
@@ -342,7 +342,7 @@ class SvnClientTest < Test::Unit::TestCase
FileUtils.mkdir_p(tmp_deep_dir_path)
File.open(tmp_path, "w") {|f| f.print(src)}
- ctx.import(@tmp_path, @repos_uri)
+ ctx.import(@import_path, @repos_uri)
ctx.up(@wc_path)
assert_equal(src, File.open(path){|f| f.read})
@@ -356,7 +356,7 @@ class SvnClientTest < Test::Unit::TestCase
file = "sample.txt"
deep_dir_path = File.join(@wc_path, deep_dir)
path = File.join(deep_dir_path, file)
- tmp_deep_dir_path = File.join(@tmp_path, deep_dir)
+ tmp_deep_dir_path = File.join(@import_path, deep_dir)
tmp_path = File.join(tmp_deep_dir_path, file)
make_context(log) do |ctx|
@@ -364,7 +364,7 @@ class SvnClientTest < Test::Unit::TestCase
FileUtils.mkdir_p(tmp_deep_dir_path)
File.open(tmp_path, "w") {|f| f.print(src)}
- new_rev = ctx.import(@tmp_path, @repos_uri, true, false,
+ new_rev = ctx.import(@import_path, @repos_uri, true, false,
{"custom-prop" => "some-value"}).revision
assert_equal(["some-value", new_rev],
ctx.revprop_get("custom-prop", @repos_uri, new_rev))
@@ -2203,7 +2203,10 @@ class SvnClientTest < Test::Unit::TestCase
make_context(log) do |ctx|
items = nil
- ctx.set_log_msg_func do |items|
+ ctx.set_log_msg_func do |l_items|
+ # ruby 1.8 will carry the assignment of items out of the
+ # scope of this block, 1.9 will not, so we must assign.
+ items = l_items
[true, log]
end
@@ -2259,7 +2262,6 @@ class SvnClientTest < Test::Unit::TestCase
end
end
config = Svn::Core::Config.config(@config_path)
- assert_nil(ctx.config)
assert_equal(options, config[Svn::Core::CONFIG_CATEGORY_SERVERS].to_hash)
ctx.config = config
assert_equal(options,
diff --git a/subversion/bindings/swig/ruby/test/test_core.rb b/subversion/bindings/swig/ruby/test/test_core.rb
index 36d94a0..5f05448 100644
--- a/subversion/bindings/swig/ruby/test/test_core.rb
+++ b/subversion/bindings/swig/ruby/test/test_core.rb
@@ -1,3 +1,4 @@
+# encoding = utf-8
# ====================================================================
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
@@ -52,7 +53,13 @@ class SvnCoreTest < Test::Unit::TestCase
now = Time.now.gmtime
str = now.strftime("%Y-%m-%dT%H:%M:%S.") + "#{now.usec}Z"
- assert_equal(now, Time.from_svn_format(str))
+ if RUBY_VERSION > '1.9'
+ # ruby 1.9 Time comparison gets into the nano-seconds, strftime
+ # shaves these off. So we can compare epoch time instead
+ assert_equal(now.to_i, Time.from_svn_format(str).gmtime.to_i)
+ else
+ assert_equal(now, Time.from_svn_format(str).gmtime)
+ end
apr_time = now.to_i * 1000000 + now.usec
assert_equal(apr_time, now.to_apr_time)
@@ -244,7 +251,11 @@ class SvnCoreTest < Test::Unit::TestCase
config_infos << [section, name, value]
end
assert_equal(infos.sort, config_infos.sort)
- assert_equal(infos.sort, config.collect {|args| args}.sort)
+ if RUBY_VERSION > '1.9'
+ assert_equal(infos.sort, config.collect {|sect,name,val| [sect,name,val]}.sort)
+ else
+ assert_equal(infos.sort, config.collect {|args| args}.sort)
+ end
end
def test_config_find_group
@@ -532,7 +543,13 @@ EOD
date_str = now.strftime("%Y-%m-%dT%H:%M:%S")
date_str << ".#{now.usec}Z"
info.date = date_str
- assert_equal(now, info.date)
+ if RUBY_VERSION > '1.9'
+ # ruby 1.9 Time comparison gets into the nano-seconds, strftime
+ # shaves these off. So we can compare epoch time instead
+ assert_equal(now.to_i, info.date.gmtime.to_i)
+ else
+ assert_equal(now, info.date.gmtime)
+ end
end
def test_svn_prop
diff --git a/subversion/bindings/swig/ruby/test/test_delta.rb b/subversion/bindings/swig/ruby/test/test_delta.rb
index 537e058..541a4fe 100644
--- a/subversion/bindings/swig/ruby/test/test_delta.rb
+++ b/subversion/bindings/swig/ruby/test/test_delta.rb
@@ -1,3 +1,4 @@
+# encoding: UTF-8
# ====================================================================
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
@@ -17,9 +18,10 @@
# under the License.
# ====================================================================
+require "my-assertions"
require "util"
require "stringio"
-require 'md5'
+require 'digest/md5'
require 'tempfile'
require "svn/info"
@@ -46,8 +48,8 @@ class SvnDeltaTest < Test::Unit::TestCase
target = StringIO.new(t)
stream = Svn::Delta::TextDeltaStream.new(source, target)
assert_nil(stream.md5_digest)
- _wrap_assertion do
- stream.each do |window|
+ _my_assert_block do
+ ret = stream.each do |window|
window.ops.each do |op|
op_size = op.offset + op.length
case op.action_code
@@ -62,8 +64,9 @@ class SvnDeltaTest < Test::Unit::TestCase
end
end
end
+ true if RUBY_VERSION > '1.9' # this block returns nil in > ruby '1.9'
end
- assert_equal(MD5.new(t).hexdigest, stream.md5_digest)
+ assert_equal(Digest::MD5.hexdigest(t), stream.md5_digest)
end
def test_txdelta_window_compose
@@ -77,11 +80,11 @@ class SvnDeltaTest < Test::Unit::TestCase
if composed_window.nil?
composed_window = window
else
- composed_window = composed_window.compose(window)
+ composed_window = window.compose(composed_window)
end
end
- _wrap_assertion do
+ _my_assert_block do
composed_window.ops.each do |op|
op_size = op.offset + op.length
case op.action_code
@@ -161,6 +164,10 @@ class SvnDeltaTest < Test::Unit::TestCase
assert_equal(target_text * 3, apply_result.read)
end
+ def get_regex(pattern, encoding='ASCII', options=0)
+ Regexp.new(pattern.encode(encoding),options)
+ end
+
def test_svndiff
source_text = "abcde"
target_text = "abXde"
@@ -168,14 +175,22 @@ class SvnDeltaTest < Test::Unit::TestCase
target = StringIO.new(target_text)
stream = Svn::Delta::TextDeltaStream.new(source, target)
- output = StringIO.new("")
+ if RUBY_VERSION > '1.9'
+ output = StringIO.new("".encode('ASCII-8BIT'))
+ else
+ output = StringIO.new("")
+ end
handler = Svn::Delta.svndiff_handler(output)
Svn::Delta.send(target_text, handler)
output.rewind
result = output.read
- assert_match(/\ASVN.*#{target_text}\z/, result)
-
+ if RUBY_VERSION > '1.9'
+ regex = get_regex("\\ASVN.*#{target_text}\\Z".encode('utf-8'),result.encoding,16)
+ assert_match(regex, result)
+ else
+ assert_match(/\ASVN.*#{target_text}\Z/, result)
+ end
# skip svndiff window
input = StringIO.new(result[4..-1])
window = Svn::Delta.read_svndiff_window(input, 0)
diff --git a/subversion/bindings/swig/ruby/test/test_fs.rb b/subversion/bindings/swig/ruby/test/test_fs.rb
index c753f1b..2c693a1 100644
--- a/subversion/bindings/swig/ruby/test/test_fs.rb
+++ b/subversion/bindings/swig/ruby/test/test_fs.rb
@@ -20,7 +20,7 @@
require "my-assertions"
require "util"
require "time"
-require "md5"
+require "digest/md5"
require "svn/core"
require "svn/fs"
@@ -49,14 +49,15 @@ class SvnFsTest < Test::Unit::TestCase
assert(!File.exist?(path))
fs = nil
- callback = Proc.new do |fs|
+ callback = Proc.new do |t_fs|
assert(File.exist?(path))
assert_equal(fs_type, Svn::Fs.type(path))
- fs.set_warning_func do |err|
+ t_fs.set_warning_func do |err|
p err
abort
end
- assert_equal(path, fs.path)
+ assert_equal(path, t_fs.path)
+ fs = t_fs
end
yield(:create, [path, config], callback)
@@ -162,7 +163,7 @@ class SvnFsTest < Test::Unit::TestCase
assert_equal(src, @fs.root.file_contents(path_in_repos){|f| f.read})
assert_equal(src.length, @fs.root.file_length(path_in_repos))
- assert_equal(MD5.new(src).hexdigest,
+ assert_equal(Digest::MD5.hexdigest(src),
@fs.root.file_md5_checksum(path_in_repos))
assert_equal([path_in_repos], @fs.root.paths_changed.keys)
@@ -364,7 +365,7 @@ class SvnFsTest < Test::Unit::TestCase
File.open(path, "w") {|f| f.print(modified)}
@fs.transaction do |txn|
- checksum = MD5.new(normalize_line_break(result)).hexdigest
+ checksum = Digest::MD5.hexdigest(normalize_line_break(result))
stream = txn.root.apply_text(path_in_repos, checksum)
stream.write(normalize_line_break(result))
stream.close
@@ -392,8 +393,8 @@ class SvnFsTest < Test::Unit::TestCase
File.open(path, "w") {|f| f.print(modified)}
@fs.transaction do |txn|
- base_checksum = MD5.new(normalize_line_break(src)).hexdigest
- checksum = MD5.new(normalize_line_break(result)).hexdigest
+ base_checksum = Digest::MD5.hexdigest(normalize_line_break(src))
+ checksum = Digest::MD5.hexdigest(normalize_line_break(result))
handler = txn.root.apply_textdelta(path_in_repos,
base_checksum, checksum)
assert_raises(Svn::Error::ChecksumMismatch) do
diff --git a/subversion/bindings/swig/ruby/test/test_ra.rb b/subversion/bindings/swig/ruby/test/test_ra.rb
index 9f97bc9..7fbbe16 100644
--- a/subversion/bindings/swig/ruby/test/test_ra.rb
+++ b/subversion/bindings/swig/ruby/test/test_ra.rb
@@ -98,7 +98,7 @@ class SvnRaTest < Test::Unit::TestCase
entries, props = session.dir("", info.revision, Svn::Core::DIRENT_KIND)
assert_equal(Svn::Core::NODE_FILE, entries[file].kind)
entries, props = session.dir("", info.revision, 0)
- assert_equal(Svn::Core::NODE_NONE, entries[file].kind)
+ assert_equal(Svn::Core::NODE_UNKNOWN, entries[file].kind)
make_context(log2) do |ctx|
File.open(path, "w") {|f| f.print(src * 2)}
diff --git a/subversion/bindings/swig/ruby/test/test_repos.rb b/subversion/bindings/swig/ruby/test/test_repos.rb
index 901fe44..89ca8c1 100644
--- a/subversion/bindings/swig/ruby/test/test_repos.rb
+++ b/subversion/bindings/swig/ruby/test/test_repos.rb
@@ -94,15 +94,16 @@ class SvnReposTest < Test::Unit::TestCase
end
def test_create
- tmp_repos_path = File.join(@tmp_path, "repos")
+ tmp_repos_path = File.join(@tmp_path, "repos2")
fs_type = Svn::Fs::TYPE_FSFS
fs_config = {Svn::Fs::CONFIG_FS_TYPE => fs_type}
repos = nil
- Svn::Repos.create(tmp_repos_path, {}, fs_config) do |repos|
+ Svn::Repos.create(tmp_repos_path, {}, fs_config) do |t_repos|
assert(File.exist?(tmp_repos_path))
- fs_type_path = File.join(repos.fs.path, Svn::Fs::CONFIG_FS_TYPE)
+ fs_type_path = File.join(t_repos.fs.path, Svn::Fs::CONFIG_FS_TYPE)
assert_equal(fs_type, File.open(fs_type_path) {|f| f.read.chop})
- repos.fs.set_warning_func(&warning_func)
+ t_repos.fs.set_warning_func(&warning_func)
+ repos = t_repos
end
assert(repos.closed?)
diff --git a/subversion/bindings/swig/ruby/test/test_wc.rb b/subversion/bindings/swig/ruby/test/test_wc.rb
index 71b44a4..3a2aa65 100644
--- a/subversion/bindings/swig/ruby/test/test_wc.rb
+++ b/subversion/bindings/swig/ruby/test/test_wc.rb
@@ -326,12 +326,16 @@ class SvnWcTest < Test::Unit::TestCase
ignored_errors = []
callbacks.ignored_errors = ignored_errors
access.walk_entries(@wc_path, callbacks)
+ sorted_ignored_errors = ignored_errors.sort_by {|path, err| path}
+ sorted_ignored_errors = sorted_ignored_errors.collect! do |path, err|
+ [path, err.class]
+ end
assert_equal([
[@wc_path, Svn::Error::Cancelled],
[path1, Svn::Error::Cancelled],
[path2, Svn::Error::Cancelled],
],
- ignored_errors.collect {|path, err| [path, err.class]})
+ sorted_ignored_errors)
end
end
end
@@ -530,7 +534,7 @@ EOE
ctx.ci(lf_path)
Svn::Wc::AdmAccess.open(nil, @wc_path, true, 5) do |access|
- _wrap_assertion do
+ _my_assert_block do
File.open(src_path, "wb") {|f| f.print(source)}
args = [method_name, src_path, crlf_path, Svn::Wc::TRANSLATE_FROM_NF]
result = yield(access.send(*args), source)
@@ -646,10 +650,10 @@ EOE
ctx.add(path)
ctx.ci(path)
- File.open(path, "w") {|f| f.print("b")}
+ File.open(path, "w") {|f| f.print("bb")}
ctx.ci(path)
- File.open(path, "w") {|f| f.print("c")}
+ File.open(path, "w") {|f| f.print("ccc")}
rev = ctx.ci(path).revision
status = Svn::Wc::RevisionStatus.new(path, nil, true)
@@ -738,20 +742,13 @@ EOE
adm.crawl_revisions(dir_path, reporter)
property_info = {
- :dir_changed_prop_names => [
- "svn:entry:committed-date",
- "svn:entry:uuid",
- "svn:entry:last-author",
- "svn:entry:committed-rev"
- ],
:file_changed_prop_name => prop_name,
:file_changed_prop_value => prop_value,
}
sorted_result = callbacks.result.sort_by {|r| r.first.to_s}
expected_props, actual_result = yield(property_info, sorted_result)
- dir_changed_props, file_changed_props, empty_changed_props = expected_props
+ file_changed_props, empty_changed_props = expected_props
assert_equal([
- [:dir_props_changed, @wc_path, dir_changed_props],
[:file_added, path2, empty_changed_props],
[:file_changed, path1, file_changed_props],
],
@@ -763,35 +760,25 @@ EOE
def test_diff_callbacks_for_backward_compatibility
assert_diff_callbacks(:diff_editor) do |property_info, result|
- dir_changed_prop_names = property_info[:dir_changed_prop_names]
- dir_changed_props = dir_changed_prop_names.sort.collect do |name|
- Svn::Core::Prop.new(name, nil)
- end
prop_name = property_info[:file_changed_prop_name]
prop_value = property_info[:file_changed_prop_value]
file_changed_props = [Svn::Core::Prop.new(prop_name, prop_value)]
empty_changed_props = []
sorted_result = result.dup
- dir_prop_changed = sorted_result.assoc(:dir_props_changed)
- dir_prop_changed[2] = dir_prop_changed[2].sort_by {|prop| prop.name}
- [[dir_changed_props, file_changed_props, empty_changed_props],
+ [[file_changed_props, empty_changed_props],
sorted_result]
end
end
def test_diff_callbacks
assert_diff_callbacks(:diff_editor2) do |property_info, result|
- dir_changed_props = {}
- property_info[:dir_changed_prop_names].each do |name|
- dir_changed_props[name] = nil
- end
prop_name = property_info[:file_changed_prop_name]
prop_value = property_info[:file_changed_prop_value]
file_changed_props = {prop_name => prop_value}
empty_changed_props = {}
- [[dir_changed_props, file_changed_props, empty_changed_props],
+ [[file_changed_props, empty_changed_props],
result]
end
end
@@ -1085,7 +1072,11 @@ EOE
assert_not_nil context
assert_kind_of Svn::Wc::Context, context
end
- assert_nil result;
+ if RUBY_VERSION > '1.9'
+ assert_equal(result,true)
+ else
+ assert_nil result
+ end
end
end
diff --git a/subversion/bindings/swig/ruby/test/util.rb b/subversion/bindings/swig/ruby/test/util.rb
index c6e70b6..ee1a7ac 100644
--- a/subversion/bindings/swig/ruby/test/util.rb
+++ b/subversion/bindings/swig/ruby/test/util.rb
@@ -1,4 +1,4 @@
-# ====================================================================
+# ====================================================================
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
@@ -19,7 +19,41 @@
require "fileutils"
require "pathname"
-require "svn/util"
+
+# Tale of a hack...
+#
+# Here we are, %SVN-WC-ROOT%/subversion/bindings/swig/ruby/test/util.rb,
+# trying to require %SVN-WC-ROOT%/subversion/bindings/swig/ruby/svn/util.rb,
+# all the while supporting both Ruby 1.8 and 1.9. Simply using this,
+#
+# require "svn/util"
+#
+# works for Ruby 1.8 if the CWD is subversion/bindings/swig/ruby
+# when we are running the tests, e.g.:
+#
+# %SVN-WC-ROOT%/subversion/bindings/swig/ruby>ruby test\run-test.rb
+#
+# This is because the CWD is included in the load path when Ruby 1.8
+# searches for required files. But this doesn't work for Ruby 1.9,
+# which doesn't include the CWD this way, so instead we could use this:
+#
+# require "./svn/util"
+#
+# But that only works if ./svn/util is relative to the CWD (again if the
+# CWD is %SVN-WC-ROOT%/subversion/bindings/swig/ruby). However, if we run
+# the tests from a different CWD and specify
+# %SVN-WC-ROOT%/subversion/bindings/swig/ruby as an additional $LOAD_PATH
+# using the ruby -I option, then that fails on both 1.8 and 1.9 with a
+# LoadError.
+#
+# The usual solution in a case like this is to use require_relative,
+#
+# require_relative "../svn/util"
+#
+# But that's only available in Ruby 1.9. We could require the backports gem
+# but there is a simple workaround, just calculate the full path of util:
+require File.join(File.dirname(__FILE__), '../svn/util')
+
require "tmpdir"
require "my-assertions"
@@ -37,23 +71,26 @@ module SvnTestUtil
@author = ENV["USER"] || "sample-user"
@password = "sample-password"
@realm = "sample realm"
- @repos_path = "repos"
- @full_repos_path = File.expand_path(@repos_path)
- @repos_uri = "file://#{@full_repos_path.sub(/^\/?/, '/')}"
+
@svnserve_host = "127.0.0.1"
@svnserve_ports = (64152..64282).collect{|x| x.to_s}
- @wc_base_dir = File.join(Dir.tmpdir, "wc-tmp")
- @wc_path = File.join(@wc_base_dir, "wc")
- @full_wc_path = File.expand_path(@wc_path)
- @tmp_path = "tmp"
+
+ @tmp_path = Dir.mktmpdir
+ @wc_path = File.join(@tmp_path, "wc")
+ @import_path = File.join(@tmp_path, "import")
+ @repos_path = File.join(@tmp_path, "repos")
+ @full_repos_path = File.expand_path(@repos_path)
+ @repos_uri = "file://#{@full_repos_path.sub(/^\/?/, '/')}"
+
@config_path = "config"
- @greek = Greek.new(@tmp_path, @wc_path, @repos_uri)
+ @greek = Greek.new(@tmp_path, @import_path, @wc_path, @repos_uri)
end
def setup_basic(need_svnserve=false)
@need_svnserve = need_svnserve
setup_default_variables
setup_tmp
+ setup_tmp(@import_path)
setup_repository
add_hooks
setup_svnserve if @need_svnserve
@@ -140,7 +177,7 @@ module SvnTestUtil
end
def teardown_wc
- remove_recursively_with_retry(@wc_base_dir)
+ remove_recursively_with_retry(@wc_path)
end
def setup_config
diff --git a/subversion/bindings/swig/ruby/test/windows_util.rb b/subversion/bindings/swig/ruby/test/windows_util.rb
index a4a15b1..793d096 100644
--- a/subversion/bindings/swig/ruby/test/windows_util.rb
+++ b/subversion/bindings/swig/ruby/test/windows_util.rb
@@ -93,27 +93,62 @@ module SvnTestUtil
%r'^\s*#define\s+APR_MAJOR_VERSION\s+(\d+)' =~ apr_version_include.read
apr_major_version = $1 == '0' ? '' : "-#{$1}"
+ cwd = Dir.getwd
targets = %W(svnserve.exe libsvn_subr-1.dll libsvn_repos-1.dll
libsvn_fs-1.dll libsvn_delta-1.dll
libaprutil#{apr_major_version}.dll
libapr#{apr_major_version}.dll
libapriconv#{apr_major_version}.dll
- libdb44.dll libdb44d.dll)
+ libdb??.dll libdb??d.dll)
ENV["PATH"].split(";").each do |path|
+
+ # Change the cwd to path, but ignore non-existent paths.
+ begin
+ Dir.chdir(path)
+ rescue Errno::ENOENT
+ next
+ end
+
found_targets = []
targets.each do |target|
- target_path = "#{path}\\#{target}"
- if File.exists?(target_path)
- found_targets << target
- FileUtils.cp(target_path, svnserve_dir)
+ matching_paths = Dir.glob(target)
+ matching_paths.each do |target_path|
+ target_path = File.join(path.tr('\\', '/'), target_path)
+ if File.exists?(target_path)
+ found_targets << target
+ retried = 0
+ begin
+ FileUtils.cp(target_path, svnserve_dir)
+ rescue Errno::EACCES
+ # On Windows the tests frequently fail spuriously with a
+ # 'Errno::EACCES: Permission denied - svnserve.exe' error.
+ # Sleeping for a few seconds avoids this.
+ if retried > 5
+ # Give up!
+ raise
+ else
+ # Wait a sec...
+ sleep(1)
+ retried += 1
+ retry
+ end
+ end
+ end
end
end
targets -= found_targets
break if targets.empty?
end
+ Dir.chdir(cwd)
# Remove optional targets instead of raising below. If they are really
# needed, svnserve won't start anyway.
targets -= %W[libapriconv#{apr_major_version}.dll]
+ # Ditto these four, since svnserve.exe might be a static build.
+ targets -= %W[libsvn_subr-1.dll]
+ targets -= %W[libsvn_repos-1.dll]
+ targets -= %W[libsvn_fs-1.dll]
+ targets -= %W[libsvn_delta-1.dll]
+
unless targets.empty?
raise "can't find libraries to work svnserve: #{targets.join(' ')}"
end
@@ -194,7 +229,8 @@ exit 1
@gen_make_opts ||= begin
lines = []
gen_make_opts = File.join(@@top_dir, "gen-make.opts")
- lines = File.read(gen_make_opts).to_a if File.exists?(gen_make_opts)
+ lines =
+ File.read(gen_make_opts).lines.to_a if File.exists?(gen_make_opts)
config = Hash.new do |hash, key|
if /^--with-(.*)$/ =~ key
hash[key] = File.join(@@top_dir, $1)
diff --git a/subversion/bindings/swig/svn_client.i b/subversion/bindings/swig/svn_client.i
index 4889b46..432ae55 100644
--- a/subversion/bindings/swig/svn_client.i
+++ b/subversion/bindings/swig/svn_client.i
@@ -49,13 +49,7 @@
%apply const char *MAY_BE_NULL {
const char *native_eol,
const char *comment,
- const char *relative_to_dir,
- apr_hash_t *revprop_table,
- apr_array_header_t *changelists
-};
-
-%apply apr_hash_t *PROPHASH {
- apr_hash_t *revprop_table
+ const char *relative_to_dir
};
#ifdef SWIGRUBY
@@ -70,12 +64,10 @@
}
#endif
-#if defined(SWIGRUBY) || defined(SWIGPYTHON)
%apply apr_array_header_t *REVISION_RANGE_LIST {
const apr_array_header_t *ranges_to_merge,
const apr_array_header_t *revision_ranges
}
-#endif
#ifdef SWIGRUBY
%apply const char *NOT_NULL {
@@ -393,7 +385,8 @@ Callback: svn_client_diff_summarize_func_t
/* provide Python with access to some thunks. */
%constant svn_cancel_func_t svn_swig_py_cancel_func;
%constant svn_client_get_commit_log3_t svn_swig_py_get_commit_log_func;
-%constant svn_wc_notify_func2_t svn_swig_py_notify_func;
+%constant svn_wc_notify_func_t svn_swig_py_notify_func;
+%constant svn_wc_notify_func2_t svn_swig_py_notify_func2;
#endif
@@ -403,7 +396,13 @@ Callback: svn_client_diff_summarize_func_t
svn_client_ctx_t(apr_pool_t *pool) {
svn_error_t *err;
svn_client_ctx_t *self;
- err = svn_client_create_context(&self, pool);
+ apr_hash_t *cfg_hash;
+
+ err = svn_config_get_config(&cfg_hash, NULL, pool);
+ if (err)
+ svn_swig_rb_handle_svn_error(err);
+
+ err = svn_client_create_context2(&self, cfg_hash, pool);
if (err)
svn_swig_rb_handle_svn_error(err);
return self;
@@ -520,7 +519,13 @@ svn_client_set_config(svn_client_ctx_t *ctx,
apr_hash_t *config,
apr_pool_t *pool)
{
- ctx->config = config;
+ svn_error_t *err;
+
+ apr_hash_clear(ctx->config);
+ err = svn_config_copy_config(&ctx->config, config,
+ apr_hash_pool_get(ctx->config));
+ if (err)
+ svn_swig_rb_handle_svn_error(err);
return Qnil;
}
diff --git a/subversion/bindings/swig/svn_delta.i b/subversion/bindings/swig/svn_delta.i
index 6e9d306..ddcd714 100644
--- a/subversion/bindings/swig/svn_delta.i
+++ b/subversion/bindings/swig/svn_delta.i
@@ -174,61 +174,47 @@ svn_txdelta_window_t_ops_get(svn_txdelta_window_t *window)
#ifdef SWIGPYTHON
%ignore svn_txdelta_window_t::ops;
-%inline %{
-static PyObject *
-svn_txdelta_window_t_ops_get(PyObject *window_ob)
+%extend svn_txdelta_window_t {
+
+void _ops_get(int *num_ops, svn_txdelta_op_t **ops)
{
- void *window;
- PyObject *ops_list, *window_pool;
- int status;
-
- /* Kludge alert!
- Normally, these kinds of conversions would belong in a typemap.
- However, typemaps won't allow us to change the result type to an array,
- so we have to make this custom accessor function.
- A cleaner approach would be to use something like:
-
- %extend svn_txdelta_window_t { void get_ops(apr_array_header_t ** ops); }
-
- But that means unnecessary copying, plus more hacks to get the pool for the
- array and for wrapping the individual op objects. So we just don't bother.
- */
+ *num_ops = self->num_ops;
+ *ops = self->ops;
+}
+
+%pythoncode {
+ ops = property(_ops_get)
+}
+}
+
+%typemap(argout) (int *num_ops, svn_txdelta_op_t **ops) {
+ apr_pool_t *parent_pool;
+ PyObject *parent_py_pool;
+ PyObject *ops_list;
- /* Note: the standard svn-python typemap releases the GIL while calling the
- wrapped function, but this function does Python stuff, so we have to
- reacquire it again. */
- svn_swig_py_acquire_py_lock();
- status = svn_swig_ConvertPtr(window_ob, &window,
- SWIG_TypeQuery("svn_txdelta_window_t *"));
-
- if (status != 0)
- {
- PyErr_SetString(PyExc_TypeError,
- "expected an svn_txdelta_window_t* proxy");
- svn_swig_py_release_py_lock();
- return NULL;
- }
-
- window_pool = PyObject_GetAttrString(window_ob, "_parent_pool");
-
- if (window_pool == NULL)
- {
- svn_swig_py_release_py_lock();
- return NULL;
- }
-
- ops_list = svn_swig_py_txdelta_window_t_ops_get(window,
- SWIG_TypeQuery("svn_txdelta_op_t *"), window_pool);
-
- svn_swig_py_release_py_lock();
+ if (svn_swig_py_get_parent_pool(args, $descriptor(apr_pool_t *),
+ &parent_py_pool, &parent_pool))
+ SWIG_fail;
- return ops_list;
+ ops_list = svn_swig_py_convert_txdelta_op_c_array(*$1, *$2,
+ $descriptor(svn_txdelta_op_t *), parent_py_pool);
+
+ if (!ops_list) SWIG_fail;
+
+ %append_output(ops_list);
}
-%}
#endif
%include svn_delta_h.swg
+#ifdef SWIGPYTHON
+%pythoncode {
+# This function is for backwards compatibility only.
+# Use svn_txdelta_window_t.ops instead.
+svn_txdelta_window_t_ops_get = svn_txdelta_window_t._ops_get
+}
+#endif
+
#ifdef SWIGRUBY
%inline %{
static VALUE
diff --git a/subversion/bindings/swig/svn_wc.i b/subversion/bindings/swig/svn_wc.i
index ff1f47f..6137b99 100644
--- a/subversion/bindings/swig/svn_wc.i
+++ b/subversion/bindings/swig/svn_wc.i
@@ -45,6 +45,7 @@
#ifdef SWIGRUBY
%ignore svn_wc_external_item_create;
+%ignore svn_wc_external_item2_create;
%ignore svn_wc_external_item_dup;
%ignore svn_wc_external_item2_dup;
%ignore svn_wc_revision_status;
@@ -154,11 +155,16 @@
)
#endif
-#ifndef SWIGPERL
%callback_typemap(svn_wc_status_func2_t status_func, void *status_baton,
svn_swig_py_status_func2,
- ,
+ svn_swig_pl_status_func2,
svn_swig_rb_wc_status_func)
+
+#ifdef SWIGPERL
+%callback_typemap(svn_wc_status_func3_t status_func, void *status_baton,
+ ,
+ svn_swig_pl_status_func3,
+ )
#endif
#ifndef SWIGPERL
@@ -268,11 +274,11 @@ svn_wc_swig_init_asp_dot_net_hack (apr_pool_t *pool)
{
svn_wc_external_item2_t(apr_pool_t *pool) {
svn_error_t *err;
- const svn_wc_external_item2_t *self;
- err = svn_wc_external_item_create(&self, pool);
+ svn_wc_external_item2_t *self;
+ err = svn_wc_external_item2_create(&self, pool);
if (err)
svn_swig_rb_handle_svn_error(err);
- return (svn_wc_external_item2_t *)self;
+ return self;
};
~svn_wc_external_item2_t() {
diff --git a/subversion/include/mod_authz_svn.h b/subversion/include/mod_authz_svn.h
index bb8c8c8..2cf1464 100644
--- a/subversion/include/mod_authz_svn.h
+++ b/subversion/include/mod_authz_svn.h
@@ -36,9 +36,20 @@ extern "C" {
/*
* mod_dav_svn to mod_authz_svn bypass mechanism
*/
+/** Provider group for subrequest bypass */
#define AUTHZ_SVN__SUBREQ_BYPASS_PROV_GRP "dav2authz_subreq_bypass"
+/** Provider name for subrequest bypass */
#define AUTHZ_SVN__SUBREQ_BYPASS_PROV_NAME "mod_authz_svn_subreq_bypass"
+/** Provider version for subrequest bypass */
#define AUTHZ_SVN__SUBREQ_BYPASS_PROV_VER "00.00a"
+/** Provider to allow mod_dav_svn to bypass the generation of an apache
+ * request when checking GET access from "mod_dav_svn/auth.c".
+ *
+ * Uses @a r @a repos_path and @a repos_name to determine if the user
+ * making the request is authorized.
+ *
+ * If the access is allowed returns @c OK or @c HTTP_FORBIDDEN if it is not.
+ */
typedef int (*authz_svn__subreq_bypass_func_t)(request_rec *r,
const char *repos_path,
const char *repos_name);
diff --git a/subversion/include/private/ra_svn_sasl.h b/subversion/include/private/ra_svn_sasl.h
index 8ddbe82..428e20e 100644
--- a/subversion/include/private/ra_svn_sasl.h
+++ b/subversion/include/private/ra_svn_sasl.h
@@ -60,7 +60,7 @@ svn_ra_svn__default_secprops(sasl_security_properties_t *secprops);
/* This function is called by the client and the server before
calling sasl_{client, server}_init, pool is used for allocations. */
-apr_status_t
+svn_error_t *
svn_ra_svn__sasl_common_init(apr_pool_t *pool);
/* Sets local_addrport and remote_addrport to a string containing the
diff --git a/subversion/include/private/svn_auth_private.h b/subversion/include/private/svn_auth_private.h
index a2088e5..6c32688 100644
--- a/subversion/include/private/svn_auth_private.h
+++ b/subversion/include/private/svn_auth_private.h
@@ -37,6 +37,24 @@
extern "C" {
#endif /* __cplusplus */
+/** SSL server authority verification credential type.
+ *
+ * The followin auth parameters are available to the providers:
+ *
+ * - @c SVN_AUTH_PARAM_SSL_SERVER_FAILURES (@c apr_uint32_t*)
+ * - @c SVN_AUTH_PARAM_SSL_SERVER_CERT_INFO
+ * (@c svn_auth_ssl_server_cert_info_t*)
+ *
+ * The following optional auth parameters are relevant to the providers:
+ *
+ * - @c SVN_AUTH_PARAM_NO_AUTH_CACHE (@c void*)
+ *
+ * @since New in 1.9.
+ */
+#define SVN_AUTH_CRED_SSL_SERVER_AUTHORITY "svn.ssl.server.authority"
+
+
+
/* If you add a password type for a provider which stores
* passwords on disk in encrypted form, remember to update
* svn_auth__simple_save_creds_helper. Otherwise it will be
@@ -46,15 +64,19 @@ extern "C" {
#define SVN_AUTH__KEYCHAIN_PASSWORD_TYPE "keychain"
#define SVN_AUTH__KWALLET_PASSWORD_TYPE "kwallet"
#define SVN_AUTH__GNOME_KEYRING_PASSWORD_TYPE "gnome-keyring"
+#define SVN_AUTH__GPG_AGENT_PASSWORD_TYPE "gpg-agent"
/* A function that stores in *PASSWORD (potentially after decrypting it)
the user's password. It might be obtained directly from CREDS, or
from an external store, using REALMSTRING and USERNAME as keys.
(The behavior is undefined if REALMSTRING or USERNAME are NULL.)
If NON_INTERACTIVE is set, the user must not be involved in the
- retrieval process. POOL is used for any necessary allocation. */
-typedef svn_boolean_t (*svn_auth__password_get_t)
- (const char **password,
+ retrieval process. Set *DONE to TRUE if a password was stored
+ in *PASSWORD, to FALSE otherwise. POOL is used for any necessary
+ allocation. */
+typedef svn_error_t * (*svn_auth__password_get_t)
+ (svn_boolean_t *done,
+ const char **password,
apr_hash_t *creds,
const char *realmstring,
const char *username,
@@ -65,10 +87,12 @@ typedef svn_boolean_t (*svn_auth__password_get_t)
/* A function that stores PASSWORD (or some encrypted version thereof)
either directly in CREDS, or externally using REALMSTRING and USERNAME
as keys into the external store. If NON_INTERACTIVE is set, the user
- must not be involved in the storage process. POOL is used for any
- necessary allocation. */
-typedef svn_boolean_t (*svn_auth__password_set_t)
- (apr_hash_t *creds,
+ must not be involved in the storage process. Set *DONE to TRUE if the
+ password was store, to FALSE otherwise. POOL is used for any necessary
+ allocation. */
+typedef svn_error_t * (*svn_auth__password_set_t)
+ (svn_boolean_t *done,
+ apr_hash_t *creds,
const char *realmstring,
const char *username,
const char *password,
@@ -76,42 +100,52 @@ typedef svn_boolean_t (*svn_auth__password_set_t)
svn_boolean_t non_interactive,
apr_pool_t *pool);
-/* Common implementation for simple_first_creds and
- windows_simple_first_creds. Uses PARAMETERS, REALMSTRING and the
- simple auth provider's username and password cache to fill a set of
- CREDENTIALS. PASSWORD_GET is used to obtain the password value.
- PASSTYPE identifies the type of the cached password. CREDENTIALS are
- allocated from POOL. */
+/* Use PARAMETERS and REALMSTRING to set *CREDENTIALS to a set of
+ pre-cached authentication credentials pulled from the simple
+ credential cache store identified by PASSTYPE. PASSWORD_GET is
+ used to obtain the password value. Allocate *CREDENTIALS from
+ POOL.
+
+ NOTE: This function is a common implementation of code used by
+ several of the simple credential providers (the default disk cache
+ mechanism, Windows CryptoAPI, GNOME Keyring, etc.), typically in
+ their "first_creds" implementation. */
svn_error_t *
-svn_auth__simple_first_creds_helper(void **credentials,
- void **iter_baton,
- void *provider_baton,
- apr_hash_t *parameters,
- const char *realmstring,
- svn_auth__password_get_t password_get,
- const char *passtype,
- apr_pool_t *pool);
-
-/* Common implementation for simple_save_creds and
- windows_simple_save_creds. Uses PARAMETERS and REALMSTRING to save
- a set of CREDENTIALS to the simple auth provider's username and
- password cache. PASSWORD_SET is used to store the password.
- PASSTYPE identifies the type of the cached password. Allocates from POOL. */
+svn_auth__simple_creds_cache_get(void **credentials,
+ void **iter_baton,
+ void *provider_baton,
+ apr_hash_t *parameters,
+ const char *realmstring,
+ svn_auth__password_get_t password_get,
+ const char *passtype,
+ apr_pool_t *pool);
+
+/* Use PARAMETERS and REALMSTRING to save CREDENTIALS in the simple
+ credential cache store identified by PASSTYPE. PASSWORD_SET is
+ used to do the actual storage. Use POOL for necessary allocations.
+ Set *SAVED according to whether or not the credentials were
+ successfully stored.
+
+ NOTE: This function is a common implementation of code used by
+ several of the simple credential providers (the default disk cache
+ mechanism, Windows CryptoAPI, GNOME Keyring, etc.) typically in
+ their "save_creds" implementation. */
svn_error_t *
-svn_auth__simple_save_creds_helper(svn_boolean_t *saved,
- void *credentials,
- void *provider_baton,
- apr_hash_t *parameters,
- const char *realmstring,
- svn_auth__password_set_t password_set,
- const char *passtype,
- apr_pool_t *pool);
+svn_auth__simple_creds_cache_set(svn_boolean_t *saved,
+ void *credentials,
+ void *provider_baton,
+ apr_hash_t *parameters,
+ const char *realmstring,
+ svn_auth__password_set_t password_set,
+ const char *passtype,
+ apr_pool_t *pool);
/* Implementation of svn_auth__password_get_t that retrieves
the plaintext password from CREDS when USERNAME matches the stored
credentials. */
-svn_boolean_t
-svn_auth__simple_password_get(const char **password,
+svn_error_t *
+svn_auth__simple_password_get(svn_boolean_t *done,
+ const char **password,
apr_hash_t *creds,
const char *realmstring,
const char *username,
@@ -121,8 +155,9 @@ svn_auth__simple_password_get(const char **password,
/* Implementation of svn_auth__password_set_t that stores
the plaintext password in CREDS. */
-svn_boolean_t
-svn_auth__simple_password_set(apr_hash_t *creds,
+svn_error_t *
+svn_auth__simple_password_set(svn_boolean_t *done,
+ apr_hash_t *creds,
const char *realmstring,
const char *username,
const char *password,
@@ -131,45 +166,52 @@ svn_auth__simple_password_set(apr_hash_t *creds,
apr_pool_t *pool);
-/* Common implementation for ssl_client_cert_pw_file_first_credentials.
- Uses PARAMETERS, REALMSTRING and the ssl client passphrase auth provider's
- passphrase cache to fill the CREDENTIALS. PASSPHRASE_GET is used to obtain
- the passphrase value. PASSTYPE identifies the type of the cached passphrase.
- CREDENTIALS are allocated from POOL. */
-svn_error_t *
-svn_auth__ssl_client_cert_pw_file_first_creds_helper
- (void **credentials,
- void **iter_baton,
- void *provider_baton,
- apr_hash_t *parameters,
- const char *realmstring,
- svn_auth__password_get_t passphrase_get,
- const char *passtype,
- apr_pool_t *pool);
+/* Use PARAMETERS and REALMSTRING to set *CREDENTIALS to a set of
+ pre-cached authentication credentials pulled from the SSL client
+ certificate passphrase credential cache store identified by
+ PASSTYPE. PASSPHRASE_GET is used to obtain the passphrase value.
+ Allocate *CREDENTIALS from POOL.
-/* Common implementation for ssl_client_cert_pw_file_save_credentials and
- windows_ssl_client_cert_pw_file_save_credentials. Uses PARAMETERS and
- REALMSTRING to save a set of CREDENTIALS to the ssl client cert auth
- provider's passphrase cache. PASSPHRASE_SET is used to store the
- passphrase. PASSTYPE identifies the type of the cached passphrase.
- Allocates from POOL. */
+ NOTE: This function is a common implementation of code used by
+ several of the ssl client passphrase credential providers (the
+ default disk cache mechanism, Windows CryptoAPI, GNOME Keyring,
+ etc.), typically in their "first_creds" implementation. */
svn_error_t *
-svn_auth__ssl_client_cert_pw_file_save_creds_helper
- (svn_boolean_t *saved,
- void *credentials,
- void *provider_baton,
- apr_hash_t *parameters,
- const char *realmstring,
- svn_auth__password_set_t passphrase_set,
- const char *passtype,
- apr_pool_t *pool);
+svn_auth__ssl_client_cert_pw_cache_get(void **credentials,
+ void **iter_baton,
+ void *provider_baton,
+ apr_hash_t *parameters,
+ const char *realmstring,
+ svn_auth__password_get_t passphrase_get,
+ const char *passtype,
+ apr_pool_t *pool);
+
+/* Use PARAMETERS and REALMSTRING to save CREDENTIALS in the SSL
+ client certificate passphrase credential cache store identified by
+ PASSTYPE. PASSPHRASE_SET is used to do the actual storage. Use
+ POOL for necessary allocations. Set *SAVED according to whether or
+ not the credentials were successfully stored.
+ NOTE: This function is a common implementation of code used by
+ several of the simple credential providers (the default disk cache
+ mechanism, Windows CryptoAPI, GNOME Keyring, etc.) typically in
+ their "save_creds" implementation. */
+svn_error_t *
+svn_auth__ssl_client_cert_pw_cache_set(svn_boolean_t *saved,
+ void *credentials,
+ void *provider_baton,
+ apr_hash_t *parameters,
+ const char *realmstring,
+ svn_auth__password_set_t passphrase_set,
+ const char *passtype,
+ apr_pool_t *pool);
/* This implements the svn_auth__password_get_t interface.
Set **PASSPHRASE to the plaintext passphrase retrieved from CREDS;
ignore other parameters. */
-svn_boolean_t
-svn_auth__ssl_client_cert_pw_get(const char **passphrase,
+svn_error_t *
+svn_auth__ssl_client_cert_pw_get(svn_boolean_t *done,
+ const char **passphrase,
apr_hash_t *creds,
const char *realmstring,
const char *username,
@@ -179,8 +221,9 @@ svn_auth__ssl_client_cert_pw_get(const char **passphrase,
/* This implements the svn_auth__password_set_t interface.
Store PASSPHRASE in CREDS; ignore other parameters. */
-svn_boolean_t
-svn_auth__ssl_client_cert_pw_set(apr_hash_t *creds,
+svn_error_t *
+svn_auth__ssl_client_cert_pw_set(svn_boolean_t *done,
+ apr_hash_t *creds,
const char *realmstring,
const char *username,
const char *passphrase,
@@ -188,6 +231,25 @@ svn_auth__ssl_client_cert_pw_set(apr_hash_t *creds,
svn_boolean_t non_interactive,
apr_pool_t *pool);
+#if (defined(WIN32) && !defined(__MINGW32__)) || defined(DOXYGEN)
+/**
+ * Set @a *provider to an authentication provider that implements
+ * ssl authority verification via the Windows CryptoApi.
+ *
+ * This provider automatically validates authority certificates with
+ * the CryptoApi, like Internet Explorer and the Windows network API do.
+ * This allows the rollout of root certificates via Windows Domain
+ * policies, instead of Subversion specific configuration.
+ *
+ * @note This function is only available on Windows.
+ */
+void
+svn_auth__get_windows_ssl_server_authority_provider(
+ svn_auth_provider_object_t **provider,
+ apr_pool_t *pool);
+#endif
+
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/include/private/svn_cache.h b/subversion/include/private/svn_cache.h
index c3a8a71..08d2f09 100644
--- a/subversion/include/private/svn_cache.h
+++ b/subversion/include/private/svn_cache.h
@@ -55,7 +55,7 @@ extern "C" {
* i.e. modify @a data directly and return it in @a *out.
*/
typedef svn_error_t *(*svn_cache__deserialize_func_t)(void **out,
- char *data,
+ void *data,
apr_size_t data_len,
apr_pool_t *result_pool);
@@ -67,7 +67,7 @@ typedef svn_error_t *(*svn_cache__deserialize_func_t)(void **out,
* not require the whole structure to be processed.
*/
typedef svn_error_t *(*svn_cache__partial_getter_func_t)(void **out,
- const char *data,
+ const void *data,
apr_size_t data_len,
void *baton,
apr_pool_t *result_pool);
@@ -80,7 +80,7 @@ typedef svn_error_t *(*svn_cache__partial_getter_func_t)(void **out,
* values must be passed back in @a *data_len and @a *data, respectively.
* Allocations will be done from @a result_pool.
*/
-typedef svn_error_t *(*svn_cache__partial_setter_func_t)(char **data,
+typedef svn_error_t *(*svn_cache__partial_setter_func_t)(void **data,
apr_size_t *data_len,
void *baton,
apr_pool_t *result_pool);
@@ -90,7 +90,7 @@ typedef svn_error_t *(*svn_cache__partial_setter_func_t)(char **data,
* function should allocate the serialized value in @a result_pool, set
* @a *data to the serialized value, and set @a *data_len to its length.
*/
-typedef svn_error_t *(*svn_cache__serialize_func_t)(char **data,
+typedef svn_error_t *(*svn_cache__serialize_func_t)(void **data,
apr_size_t *data_len,
void *in,
apr_pool_t *result_pool);
@@ -182,6 +182,10 @@ typedef struct svn_cache__info_t
* if they are strings. Cached values will be copied in and out of
* the cache using @a serialize_func and @a deserialize_func, respectively.
*
+ * If @a deserialize_func is NULL, then the data is returned as an
+ * svn_stringbuf_t; if @a serialize_func is NULL, then the data is
+ * assumed to be an svn_stringbuf_t.
+ *
* The cache stores up to @a pages * @a items_per_page items at a
* time. The exact cache invalidation strategy is not defined here,
* but in general, a lower value for @a items_per_page means more
@@ -224,7 +228,7 @@ svn_cache__create_inprocess(svn_cache__t **cache_p,
* other caches. @a *cache_p will be allocated in @a result_pool.
*
* If @a deserialize_func is NULL, then the data is returned as an
- * svn_string_t; if @a serialize_func is NULL, then the data is
+ * svn_stringbuf_t; if @a serialize_func is NULL, then the data is
* assumed to be an svn_stringbuf_t.
*
* These caches are always thread safe.
@@ -269,16 +273,33 @@ svn_cache__make_memcache_from_config(svn_memcache_t **memcache_p,
* will generally result in higher hit rates and reduced conflict
* resolution overhead.
*
- * If access to the resulting cache object is guranteed to be serialized,
+ * The cache will be split into @a segment_count segments of equal size.
+ * A higher number reduces lock contention but also limits the maximum
+ * cachable item size. If it is not a power of two, it will be rounded
+ * down to next lower power of two. Also, there is an implementation
+ * specific upper limit and the setting will be capped there automatically.
+ * If the number is 0, a default will be derived from @a total_size.
+ *
+ * If access to the resulting cache object is guaranteed to be serialized,
* @a thread_safe may be set to @c FALSE for maximum performance.
*
+ * There is no limit on the number of threads reading a given cache segment
+ * concurrently. Writes, however, need an exclusive lock on the respective
+ * segment. @a allow_blocking_writes controls contention is handled here.
+ * If set to TRUE, writes will wait until the lock becomes available, i.e.
+ * reads should be short. If set to FALSE, write attempts will be ignored
+ * (no data being written to the cache) if some reader or another writer
+ * currently holds the segment lock.
+ *
* Allocations will be made in @a result_pool, in particular the data buffers.
*/
svn_error_t *
svn_cache__membuffer_cache_create(svn_membuffer_t **cache,
apr_size_t total_size,
apr_size_t directory_size,
+ apr_size_t segment_count,
svn_boolean_t thread_safe,
+ svn_boolean_t allow_blocking_writes,
apr_pool_t *result_pool);
/**
@@ -292,11 +313,12 @@ svn_cache__membuffer_cache_create(svn_membuffer_t **cache,
* this cache from other caches. @a *cache_p will be allocated in @a result_pool.
*
* If @a deserialize_func is NULL, then the data is returned as an
- * svn_string_t; if @a serialize_func is NULL, then the data is
+ * svn_stringbuf_t; if @a serialize_func is NULL, then the data is
* assumed to be an svn_stringbuf_t.
*
- * These caches themselves are thread safe, the shared @a memcache may
- * be not, depending on its creation parameters.
+ * If @a thread_safe is true, and APR is compiled with threads, all
+ * accesses to the cache will be protected with a mutex, if the shared
+ * @a memcache has also been created with thread_safe flag set.
*
* These caches do not support svn_cache__iter.
*/
@@ -307,6 +329,7 @@ svn_cache__create_membuffer_cache(svn_cache__t **cache_p,
svn_cache__deserialize_func_t deserialize,
apr_ssize_t klen,
const char *prefix,
+ svn_boolean_t thread_safe,
apr_pool_t *result_pool);
/**
@@ -340,9 +363,9 @@ svn_cache__is_cachable(svn_cache__t *cache,
/**
* Fetches a value indexed by @a key from @a cache into @a *value,
* setting @a *found to TRUE iff it is in the cache and FALSE if it is
- * not found. The value is copied into @a result_pool using the copy
+ * not found. @a key may be NULL in which case @a *found will be
+ * FALSE. The value is copied into @a result_pool using the deserialize
* function provided to the cache's constructor.
- * ### what copy function? there are serialize/deserialize functions, no copy functions
*/
svn_error_t *
svn_cache__get(void **value,
@@ -355,7 +378,8 @@ svn_cache__get(void **value,
* Stores the value @a value under the key @a key in @a cache. Uses @a
* scratch_pool for temporary allocations. The cache makes copies of
* @a key and @a value if necessary (that is, @a key and @a value may
- * have shorter lifetimes than the cache).
+ * have shorter lifetimes than the cache). @a key may be NULL in which
+ * case the cache will remain unchanged.
*
* If there is already a value for @a key, this will replace it. Bear
* in mind that in some circumstances this may leak memory (that is,
@@ -399,8 +423,10 @@ svn_cache__iter(svn_boolean_t *completed,
/**
* Similar to svn_cache__get() but will call a specific de-serialization
* function @a func. @a found will be set depending on whether the @a key
- * has been found. Even if that reports @c TRUE, @a values may still return
- * a @c NULL pointer depending on the logic inside @a func.
+ * has been found. Even if that reports @c TRUE, @a value may still return
+ * a @c NULL pointer depending on the logic inside @a func. For a @a NULL
+ * @a key, no data will be found. @a value will be allocated in
+ * @a result_pool.
*/
svn_error_t *
svn_cache__get_partial(void **value,
@@ -415,8 +441,8 @@ svn_cache__get_partial(void **value,
* Find the item identified by @a key in the @a cache. If it has been found,
* call @a func for it and @a baton to potentially modify the data. Changed
* data will be written back to the cache. If the item cannot be found,
- * @a func does not get called. @a scratch_pool is used for temporary
- * allocations.
+ * or if @a key is NULL, @a func does not get called. @a scratch_pool is
+ * used for temporary allocations.
*/
svn_error_t *
svn_cache__set_partial(svn_cache__t *cache,
diff --git a/subversion/include/private/svn_cert.h b/subversion/include/private/svn_cert.h
new file mode 100644
index 0000000..32e32a0
--- /dev/null
+++ b/subversion/include/private/svn_cert.h
@@ -0,0 +1,68 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ *
+ * @file svn_cert.h
+ * @brief Implementation of certificate validation functions
+ */
+
+#ifndef SVN_CERT_H
+#define SVN_CERT_H
+
+#include <apr.h>
+
+#include "svn_types.h"
+#include "svn_string.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/* Return TRUE iff @a pattern matches @a hostname as defined
+ * by the matching rules of RFC 6125. In the context of RFC
+ * 6125 the pattern is the domain name portion of the presented
+ * identifier (which comes from the Common Name or a DNSName
+ * portion of the subjectAltName of an X.509 certificate) and
+ * the hostname is the source domain (i.e. the host portion
+ * of the URI the user entered).
+ *
+ * @note With respect to wildcards we only support matching
+ * wildcards in the left-most label and as the only character
+ * in the left-most label (i.e. we support RFC 6125 § 6.4.3
+ * Rule 1 and 2 but not the optional Rule 3). This may change
+ * in the future.
+ *
+ * @note Subversion does not at current support internationalized
+ * domain names. Both values are presumed to be in NR-LDH label
+ * or A-label form (see RFC 5890 for the definition).
+ *
+ * @since New in 1.9.
+ */
+svn_boolean_t
+svn_cert__match_dns_identity(svn_string_t *pattern, svn_string_t *hostname);
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* SVN_CERT_H */
diff --git a/subversion/include/private/svn_client_private.h b/subversion/include/private/svn_client_private.h
index 2e3c715..91ea647 100644
--- a/subversion/include/private/svn_client_private.h
+++ b/subversion/include/private/svn_client_private.h
@@ -29,6 +29,7 @@
#include <apr_pools.h>
+#include "svn_ra.h"
#include "svn_client.h"
#include "svn_types.h"
@@ -37,6 +38,146 @@ extern "C" {
#endif /* __cplusplus */
+/* Return true if KIND is a revision kind that is dependent on the working
+ * copy. Otherwise, return false. */
+#define SVN_CLIENT__REVKIND_NEEDS_WC(kind) \
+ ((kind) == svn_opt_revision_base || \
+ (kind) == svn_opt_revision_previous || \
+ (kind) == svn_opt_revision_working || \
+ (kind) == svn_opt_revision_committed) \
+
+/* Return true if KIND is a revision kind that the WC can supply without
+ * contacting the repository. Otherwise, return false. */
+#define SVN_CLIENT__REVKIND_IS_LOCAL_TO_WC(kind) \
+ ((kind) == svn_opt_revision_base || \
+ (kind) == svn_opt_revision_working || \
+ (kind) == svn_opt_revision_committed)
+
+/* A location in a repository. */
+typedef struct svn_client__pathrev_t
+{
+ const char *repos_root_url;
+ const char *repos_uuid;
+ svn_revnum_t rev;
+ const char *url;
+} svn_client__pathrev_t;
+
+/* Return a new path-rev structure, allocated in RESULT_POOL,
+ * initialized with deep copies of REPOS_ROOT_URL, REPOS_UUID, REV and URL. */
+svn_client__pathrev_t *
+svn_client__pathrev_create(const char *repos_root_url,
+ const char *repos_uuid,
+ svn_revnum_t rev,
+ const char *url,
+ apr_pool_t *result_pool);
+
+/* Return a new path-rev structure, allocated in RESULT_POOL,
+ * initialized with deep copies of REPOS_ROOT_URL, REPOS_UUID, and REV,
+ * and using the repository-relative RELPATH to construct the URL. */
+svn_client__pathrev_t *
+svn_client__pathrev_create_with_relpath(const char *repos_root_url,
+ const char *repos_uuid,
+ svn_revnum_t rev,
+ const char *relpath,
+ apr_pool_t *result_pool);
+
+/* Set *PATHREV_P to a new path-rev structure, allocated in RESULT_POOL,
+ * initialized with deep copies of the repository root URL and UUID from
+ * RA_SESSION, and of REV and URL. */
+svn_error_t *
+svn_client__pathrev_create_with_session(svn_client__pathrev_t **pathrev_p,
+ svn_ra_session_t *ra_session,
+ svn_revnum_t rev,
+ const char *url,
+ apr_pool_t *result_pool);
+
+/* Return a deep copy of PATHREV, allocated in RESULT_POOL. */
+svn_client__pathrev_t *
+svn_client__pathrev_dup(const svn_client__pathrev_t *pathrev,
+ apr_pool_t *result_pool);
+
+/* Return a deep copy of PATHREV, with a URI-encoded representation of
+ * RELPATH joined on to the URL. Allocate the result in RESULT_POOL. */
+svn_client__pathrev_t *
+svn_client__pathrev_join_relpath(const svn_client__pathrev_t *pathrev,
+ const char *relpath,
+ apr_pool_t *result_pool);
+
+/* Return the repository-relative relpath of PATHREV. */
+const char *
+svn_client__pathrev_relpath(const svn_client__pathrev_t *pathrev,
+ apr_pool_t *result_pool);
+
+/* Return the repository-relative fspath of PATHREV. */
+const char *
+svn_client__pathrev_fspath(const svn_client__pathrev_t *pathrev,
+ apr_pool_t *result_pool);
+
+/* Given PATH_OR_URL, which contains either a working copy path or an
+ absolute URL, a peg revision PEG_REVISION, and a desired revision
+ REVISION, create an RA connection to that object as it exists in
+ that revision, following copy history if necessary. If REVISION is
+ younger than PEG_REVISION, then PATH_OR_URL will be checked to see
+ that it is the same node in both PEG_REVISION and REVISION. If it
+ is not, then @c SVN_ERR_CLIENT_UNRELATED_RESOURCES is returned.
+
+ BASE_DIR_ABSPATH is the working copy path the ra_session corresponds
+ to. If provided it will be used to read and dav props. So if provided
+ this directory MUST match the session anchor.
+
+ If PEG_REVISION->kind is 'unspecified', the peg revision is 'head'
+ for a URL or 'working' for a WC path. If REVISION->kind is
+ 'unspecified', the operative revision is the peg revision.
+
+ Store the resulting ra_session in *RA_SESSION_P. Store the final
+ resolved location of the object in *RESOLVED_LOC_P. RESOLVED_LOC_P
+ may be NULL if not wanted.
+
+ Use authentication baton cached in CTX to authenticate against the
+ repository.
+
+ Use POOL for all allocations. */
+svn_error_t *
+svn_client__ra_session_from_path2(svn_ra_session_t **ra_session_p,
+ svn_client__pathrev_t **resolved_loc_p,
+ const char *path_or_url,
+ const char *base_dir_abspath,
+ const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *revision,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool);
+
+/* Given PATH_OR_URL, which contains either a working copy path or an
+ absolute URL, a peg revision PEG_REVISION, and a desired revision
+ REVISION, find the path at which that object exists in REVISION,
+ following copy history if necessary. If REVISION is younger than
+ PEG_REVISION, then check that PATH_OR_URL is the same node in both
+ PEG_REVISION and REVISION, and return @c
+ SVN_ERR_CLIENT_UNRELATED_RESOURCES if it is not the same node.
+
+ If PEG_REVISION->kind is 'unspecified', the peg revision is 'head'
+ for a URL or 'working' for a WC path. If REVISION->kind is
+ 'unspecified', the operative revision is the peg revision.
+
+ Store the actual location of the object in *RESOLVED_LOC_P.
+
+ RA_SESSION should be an open RA session pointing at the URL of
+ PATH_OR_URL, or NULL, in which case this function will open its own
+ temporary session.
+
+ Use authentication baton cached in CTX to authenticate against the
+ repository.
+
+ Use POOL for all allocations. */
+svn_error_t *
+svn_client__resolve_rev_and_url(svn_client__pathrev_t **resolved_loc_p,
+ svn_ra_session_t *ra_session,
+ const char *path_or_url,
+ const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *revision,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool);
+
/** Return @c SVN_ERR_ILLEGAL_TARGET if TARGETS contains a mixture of
* URLs and paths; otherwise return SVN_NO_ERROR.
*
@@ -48,7 +189,7 @@ svn_client__assert_homogeneous_target_type(const apr_array_header_t *targets);
/* Create a svn_client_status_t structure *CST for LOCAL_ABSPATH, shallow
* copying data from *STATUS wherever possible and retrieving the other values
- * where needed. Peform temporary allocations in SCRATCH_POOL and allocate the
+ * where needed. Perform temporary allocations in SCRATCH_POOL and allocate the
* result in RESULT_POOL
*/
svn_error_t *
@@ -59,6 +200,137 @@ svn_client__create_status(svn_client_status_t **cst,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
+/* Set *ANCESTOR_URL and *ANCESTOR_REVISION to the URL and revision,
+ * respectively, of the youngest common ancestor of the two locations
+ * PATH_OR_URL1@REV1 and PATH_OR_URL2@REV2. Set *ANCESTOR_RELPATH to
+ * NULL and *ANCESTOR_REVISION to SVN_INVALID_REVNUM if they have no
+ * common ancestor. This function assumes that PATH_OR_URL1@REV1 and
+ * PATH_OR_URL2@REV2 both refer to the same repository.
+ *
+ * Use the authentication baton cached in CTX to authenticate against
+ * the repository.
+ *
+ * See also svn_client__get_youngest_common_ancestor().
+ */
+svn_error_t *
+svn_client__youngest_common_ancestor(const char **ancestor_url,
+ svn_revnum_t *ancestor_rev,
+ const char *path_or_url1,
+ const svn_opt_revision_t *revision1,
+ const char *path_or_url2,
+ const svn_opt_revision_t *revision2,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Get the repository location of the base node at LOCAL_ABSPATH.
+ *
+ * A pathrev_t wrapper around svn_wc__node_get_base().
+ *
+ * Set *BASE_P to the location that this node was checked out at or last
+ * updated/switched to, regardless of any uncommitted changes (delete,
+ * replace and/or copy-here/move-here).
+ *
+ * If there is no base node at LOCAL_ABSPATH (such as when there is a
+ * locally added/copied/moved-here node that is not part of a replace),
+ * set *BASE_P to NULL.
+ */
+svn_error_t *
+svn_client__wc_node_get_base(svn_client__pathrev_t **base_p,
+ const char *wc_abspath,
+ svn_wc_context_t *wc_ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Get the original location of the WC node at LOCAL_ABSPATH.
+ *
+ * A pathrev_t wrapper around svn_wc__node_get_origin().
+ *
+ * Set *ORIGIN_P to the origin of the WC node at WC_ABSPATH. If the node
+ * is a local copy, give the copy-from location. If the node is locally
+ * added or deleted, set *ORIGIN_P to NULL.
+ */
+svn_error_t *
+svn_client__wc_node_get_origin(svn_client__pathrev_t **origin_p,
+ const char *wc_abspath,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Produce a diff with depth DEPTH between two files or two directories at
+ * LOCAL_ABSPATH1 and LOCAL_ABSPATH2, using the provided diff callbacks to
+ * show changes in files. The files and directories involved may be part of
+ * a working copy or they may be unversioned. For versioned files, show
+ * property changes, too. */
+svn_error_t *
+svn_client__arbitrary_nodes_diff(const char *local_abspath1,
+ const char *local_abspath2,
+ svn_depth_t depth,
+ const svn_wc_diff_callbacks4_t *callbacks,
+ void *callback_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool);
+
+/* Copy the file or directory on URL in some repository to DST_ABSPATH,
+ * copying node information and properties. Resolve URL using PEG_REV and
+ * REVISION.
+ *
+ * If URL specifies a directory, create the copy using depth DEPTH.
+ *
+ * If MAKE_PARENTS is TRUE and DST_ABSPATH doesn't have an added parent
+ * create missing parent directories
+ */
+svn_error_t *
+svn_client__copy_foreign(const char *url,
+ const char *dst_abspath,
+ svn_opt_revision_t *peg_revision,
+ svn_opt_revision_t *revision,
+ svn_depth_t depth,
+ svn_boolean_t make_parents,
+ svn_boolean_t already_locked,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool);
+
+/* Same as the public svn_client_mergeinfo_log2 API, except for the addition
+ * of the TARGET_MERGEINFO_CATALOG and RESULT_POOL parameters.
+ *
+ * If TARGET_MERGEINFO_CATALOG is NULL then this acts exactly as the public
+ * API. If *TARGET_MERGEINFO_CATALOG is NULL, then *TARGET_MERGEINFO_CATALOG
+ * is set to the a mergeinfo catalog representing the mergeinfo on
+ * TARGET_PATH_OR_URL@TARGET_PEG_REVISION at DEPTH, (like the public API only
+ * depths of svn_depth_empty or svn_depth_infinity are supported) allocated in
+ * RESULT_POOL. Finally, if *TARGET_MERGEINFO_CATALOG is non-NULL, then it is
+ * assumed to be a mergeinfo catalog representing the mergeinfo on
+ * TARGET_PATH_OR_URL@TARGET_PEG_REVISION at DEPTH.
+ *
+ * The keys for the subtree mergeinfo are the repository root-relative
+ * paths of TARGET_PATH_OR_URL and/or its subtrees, regardless of whether
+ * TARGET_PATH_OR_URL is a URL or WC path.
+ *
+ * If RA_SESSION is not NULL, use it to obtain merge information instead of
+ * opening a new session. The session might be reparented after usage, so
+ * callers should reparent the session back to their original location if
+ * needed.
+ */
+svn_error_t *
+svn_client__mergeinfo_log(svn_boolean_t finding_merged,
+ const char *target_path_or_url,
+ const svn_opt_revision_t *target_peg_revision,
+ svn_mergeinfo_catalog_t *target_mergeinfo_catalog,
+ const char *source_path_or_url,
+ const svn_opt_revision_t *source_peg_revision,
+ const svn_opt_revision_t *source_start_revision,
+ const svn_opt_revision_t *source_end_revision,
+ svn_log_entry_receiver_t log_receiver,
+ void *log_receiver_baton,
+ svn_boolean_t discover_changed_paths,
+ svn_depth_t depth,
+ const apr_array_header_t *revprops,
+ svn_client_ctx_t *ctx,
+ svn_ra_session_t *ra_session,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/include/private/svn_cmdline_private.h b/subversion/include/private/svn_cmdline_private.h
index d1c4d29..ad16b66 100644
--- a/subversion/include/private/svn_cmdline_private.h
+++ b/subversion/include/private/svn_cmdline_private.h
@@ -28,9 +28,11 @@
#define SVN_CMDLINE_PRIVATE_H
#include <apr_pools.h>
+#include <apr_hash.h>
#include "svn_string.h"
#include "svn_error.h"
+#include "svn_io.h"
#ifdef __cplusplus
extern "C" {
@@ -44,12 +46,14 @@ extern "C" {
* @a propname is the property name. @a propval is the property value, which
* will be encoded if it contains unsafe bytes.
*
- * @since New in 1.6.
+ * If @a inherited_prop is TRUE then @a propname is an inherited property,
+ * otherwise @a propname is an explicit property.
*/
void
svn_cmdline__print_xml_prop(svn_stringbuf_t **outstr,
const char *propname,
svn_string_t *propval,
+ svn_boolean_t inherited_prop,
apr_pool_t *pool);
@@ -92,7 +96,7 @@ svn_cmdline__parse_config_option(apr_array_header_t *config_options,
apr_pool_t *pool);
/** Sets the config options in @a config_options, an apr array containing
- * svn_cmdline__config_argument_t* elements to the configuration in @a cfg,
+ * @c svn_cmdline__config_argument_t* elements, to the configuration in @a cfg,
* a hash mapping of <tt>const char *</tt> configuration file names to
* @c svn_config_t *'s. Write warnings to stderr.
*
@@ -106,6 +110,117 @@ svn_cmdline__apply_config_options(apr_hash_t *config,
const char *prefix,
const char *argument_name);
+/* Return a string allocated in POOL that is a copy of STR but with each
+ * line prefixed with INDENT. A line is all characters up to the first
+ * CR-LF, LF-CR, CR or LF, or the end of STR if sooner. */
+const char *
+svn_cmdline__indent_string(const char *str,
+ const char *indent,
+ apr_pool_t *pool);
+
+/* Print to stdout a hash PROP_HASH that maps property names (char *) to
+ property values (svn_string_t *). The names are assumed to be in UTF-8
+ format; the values are either in UTF-8 (the special Subversion props) or
+ plain binary values.
+
+ If OUT is not NULL, then write to it rather than stdout.
+
+ If NAMES_ONLY is true, print just names, else print names and
+ values. */
+svn_error_t *
+svn_cmdline__print_prop_hash(svn_stream_t *out,
+ apr_hash_t *prop_hash,
+ svn_boolean_t names_only,
+ apr_pool_t *pool);
+
+/* Similar to svn_cmdline__print_prop_hash(), only output xml to *OUTSTR.
+ If INHERITED_PROPS is true, then PROP_HASH contains inherited properties,
+ otherwise PROP_HASH contains explicit properties. If *OUTSTR is NULL,
+ allocate it first from POOL, otherwise append to it. */
+svn_error_t *
+svn_cmdline__print_xml_prop_hash(svn_stringbuf_t **outstr,
+ apr_hash_t *prop_hash,
+ svn_boolean_t names_only,
+ svn_boolean_t inherited_props,
+ apr_pool_t *pool);
+
+
+/* Search for a text editor command in standard environment variables,
+ and invoke it to edit PATH. Use POOL for all allocations.
+
+ If EDITOR_CMD is not NULL, it is the name of the external editor
+ command to use, overriding anything else that might determine the
+ editor.
+
+ CONFIG is a hash of svn_config_t * items keyed on a configuration
+ category (SVN_CONFIG_CATEGORY_CONFIG et al), and may be NULL. */
+svn_error_t *
+svn_cmdline__edit_file_externally(const char *path,
+ const char *editor_cmd,
+ apr_hash_t *config,
+ apr_pool_t *pool);
+
+/* Search for a text editor command in standard environment variables,
+ and invoke it to edit CONTENTS (using a temporary file created in
+ directory BASE_DIR). Return the new contents in *EDITED_CONTENTS,
+ or set *EDITED_CONTENTS to NULL if no edit was performed.
+
+ If EDITOR_CMD is not NULL, it is the name of the external editor
+ command to use, overriding anything else that might determine the
+ editor.
+
+ If TMPFILE_LEFT is NULL, the temporary file will be destroyed.
+ Else, the file will be left on disk, and its path returned in
+ *TMPFILE_LEFT.
+
+ CONFIG is a hash of svn_config_t * items keyed on a configuration
+ category (SVN_CONFIG_CATEGORY_CONFIG et al), and may be NULL.
+
+ If AS_TEXT is TRUE, recode CONTENTS and convert to native eol-style before
+ editing and back again afterwards. In this case, ENCODING determines the
+ encoding used during editing. If non-NULL, use the named encoding, else
+ use the system encoding. If AS_TEXT is FALSE, don't do any translation.
+ In that case, ENCODING is ignored.
+
+ Use POOL for all allocations. Use PREFIX as the prefix for the
+ temporary file used by the editor.
+
+ If return error, *EDITED_CONTENTS is not touched. */
+svn_error_t *
+svn_cmdline__edit_string_externally(svn_string_t **edited_contents,
+ const char **tmpfile_left,
+ const char *editor_cmd,
+ const char *base_dir,
+ const svn_string_t *contents,
+ const char *prefix,
+ apr_hash_t *config,
+ svn_boolean_t as_text,
+ const char *encoding,
+ apr_pool_t *pool);
+
+
+/** Wrapper for apr_getopt_init(), which see.
+ *
+ * @since New in 1.4.
+ */
+svn_error_t *
+svn_cmdline__getopt_init(apr_getopt_t **os,
+ int argc,
+ const char *argv[],
+ apr_pool_t *pool);
+
+/* Determine whether interactive mode should be enabled, based on whether
+ * the user passed the --non-interactive or --force-interactive options.
+ * If neither option was passed, interactivity is enabled if standard
+ * input is connected to a terminal device.
+ *
+ * @since New in 1.8.
+ */
+svn_boolean_t
+svn_cmdline__be_interactive(svn_boolean_t non_interactive,
+ svn_boolean_t force_interactive);
+
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/include/private/svn_dav_protocol.h b/subversion/include/private/svn_dav_protocol.h
index e631292..94cf069 100644
--- a/subversion/include/private/svn_dav_protocol.h
+++ b/subversion/include/private/svn_dav_protocol.h
@@ -1,7 +1,6 @@
/*
* svn_dav_protocol.h: Declarations of the protocol shared by the
- * mod_dav_svn backend for httpd's mod_dav, and its ra_neon and
- * ra_serf RA DAV clients.
+ * mod_dav_svn backend for httpd's mod_dav and its ra_serf RA DAV clients.
*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
@@ -33,6 +32,7 @@ extern "C" {
/** Names for the custom HTTP REPORTs understood by mod_dav_svn, sans
namespace. */
#define SVN_DAV__MERGEINFO_REPORT "mergeinfo-report"
+#define SVN_DAV__INHERITED_PROPS_REPORT "inherited-props-report"
/** Names for XML child elements of the custom HTTP REPORTs understood
by mod_dav_svn, sans namespace. */
@@ -45,6 +45,10 @@ extern "C" {
#define SVN_DAV__REVISION "revision"
#define SVN_DAV__INCLUDE_DESCENDANTS "include-descendants"
#define SVN_DAV__VERSION_NAME "version-name"
+#define SVN_DAV__IPROP_ITEM "iprop-item"
+#define SVN_DAV__IPROP_PATH "iprop-path"
+#define SVN_DAV__IPROP_PROPNAME "iprop-propname"
+#define SVN_DAV__IPROP_PROPVAL "iprop-propval"
/** Names of XML elements attributes and tags for svn_ra_change_rev_prop2()'s
extension of PROPPATCH. */
diff --git a/subversion/include/private/svn_debug.h b/subversion/include/private/svn_debug.h
index 2b89e4a..a596ba1 100644
--- a/subversion/include/private/svn_debug.h
+++ b/subversion/include/private/svn_debug.h
@@ -23,27 +23,41 @@
#ifndef SVN_DEBUG_H
#define SVN_DEBUG_H
-/* Only available when SVN_DEBUG is defined (ie. svn developers). Note that
- we do *not* provide replacement macros/functions for proper releases.
- The debug stuff should be removed before a commit.
-
- ### maybe we will eventually decide to allow certain debug stuff to
- ### remain in the code. at that point, we can rejigger this header. */
#ifdef SVN_DEBUG
+#define SVN_DBG__PROTOTYPES
+#endif
-#include <stdio.h>
+#ifdef SVN_DBG__PROTOTYPES
+#define APR_WANT_STDIO
+#include <apr_want.h>
+#include <apr_hash.h>
+#endif
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
-/* A couple helper functions for the macros below. */
+#ifdef SVN_DBG__PROTOTYPES
+/* A few helper functions for the macros below. */
void
svn_dbg__preamble(const char *file, long line, FILE *output);
void
svn_dbg__printf(const char *fmt, ...)
__attribute__((format(printf, 1, 2)));
+void
+svn_dbg__print_props(apr_hash_t *props,
+ const char *header_fmt,
+ ...)
+ __attribute__((format(printf, 2, 3)));
+#endif
+/* Only available when SVN_DEBUG is defined (ie. svn developers). Note that
+ we do *not* provide replacement macros/functions for proper releases.
+ The debug stuff should be removed before a commit.
+
+ ### maybe we will eventually decide to allow certain debug stuff to
+ ### remain in the code. at that point, we can rejigger this header. */
+#ifdef SVN_DEBUG
/* Print to stdout. Edit this line if you need stderr. */
#define SVN_DBG_OUTPUT stdout
@@ -55,6 +69,7 @@ svn_dbg__printf(const char *fmt, ...)
#ifdef SVN_DBG_QUIET
#define SVN_DBG(ARGS) svn_dbg__preamble(__FILE__, __LINE__, NULL)
+#define SVN_DBG_PROPS(ARGS) svn_dbg__preamble(__FILE__, __LINE__, NULL)
#else
@@ -63,7 +78,7 @@ svn_dbg__printf(const char *fmt, ...)
* usage:
*
* <pre>
- * SVN_DBG(("rev=%ld kind=%s\n", revnum, svn_kind_to_word(kind)));
+ * SVN_DBG(("rev=%ld kind=%s\n", revnum, svn_node_kind_to_word(kind)));
* </pre>
*
* outputs:
@@ -77,17 +92,16 @@ svn_dbg__printf(const char *fmt, ...)
*/
#define SVN_DBG(ARGS) (svn_dbg__preamble(__FILE__, __LINE__, SVN_DBG_OUTPUT), \
svn_dbg__printf ARGS)
+#define SVN_DBG_PROPS(ARGS) (svn_dbg__preamble(__FILE__, __LINE__, \
+ SVN_DBG_OUTPUT), \
+ svn_dbg__print_props ARGS)
#endif
+#endif /* SVN_DEBUG */
#ifdef __cplusplus
}
#endif /* __cplusplus */
-#else /* SVN_DEBUG */
-
-/* We DON'T define SVN_DBG in release mode. See top of this file. */
-
-#endif /* SVN_DEBUG */
#endif /* SVN_DEBUG_H */
diff --git a/subversion/include/private/svn_delta_private.h b/subversion/include/private/svn_delta_private.h
new file mode 100644
index 0000000..4de85a9
--- /dev/null
+++ b/subversion/include/private/svn_delta_private.h
@@ -0,0 +1,128 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ *
+ * @file svn_delta_private.h
+ * @brief The Subversion delta/diff/editor library - Internal routines
+ */
+
+#ifndef SVN_DELTA_PRIVATE_H
+#define SVN_DELTA_PRIVATE_H
+
+#include <apr_pools.h>
+
+#include "svn_types.h"
+#include "svn_error.h"
+#include "svn_delta.h"
+#include "svn_editor.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+typedef svn_error_t *(*svn_delta__start_edit_func_t)(
+ void *baton,
+ svn_revnum_t base_revision);
+
+typedef svn_error_t *(*svn_delta__target_revision_func_t)(
+ void *baton,
+ svn_revnum_t target_revision,
+ apr_pool_t *scratch_pool);
+
+typedef svn_error_t *(*svn_delta__unlock_func_t)(
+ void *baton,
+ const char *path,
+ apr_pool_t *scratch_pool);
+
+
+/* See svn_editor__insert_shims() for more information. */
+struct svn_delta__extra_baton
+{
+ svn_delta__start_edit_func_t start_edit;
+ svn_delta__target_revision_func_t target_revision;
+ void *baton;
+};
+
+
+/** A temporary API to convert from a delta editor to an Ev2 editor. */
+svn_error_t *
+svn_delta__editor_from_delta(svn_editor_t **editor_p,
+ struct svn_delta__extra_baton **exb,
+ svn_delta__unlock_func_t *unlock_func,
+ void **unlock_baton,
+ const svn_delta_editor_t *deditor,
+ void *dedit_baton,
+ svn_boolean_t *send_abs_paths,
+ const char *repos_root,
+ const char *base_relpath,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_delta_fetch_kind_func_t fetch_kind_func,
+ void *fetch_kind_baton,
+ svn_delta_fetch_props_func_t fetch_props_func,
+ void *fetch_props_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
+/** A temporary API to convert from an Ev2 editor to a delta editor. */
+svn_error_t *
+svn_delta__delta_from_editor(const svn_delta_editor_t **deditor,
+ void **dedit_baton,
+ svn_editor_t *editor,
+ svn_delta__unlock_func_t unlock_func,
+ void *unlock_baton,
+ svn_boolean_t *found_abs_paths,
+ const char *repos_root,
+ const char *base_relpath,
+ svn_delta_fetch_props_func_t fetch_props_func,
+ void *fetch_props_baton,
+ svn_delta_fetch_base_func_t fetch_base_func,
+ void *fetch_base_baton,
+ struct svn_delta__extra_baton *exb,
+ apr_pool_t *pool);
+
+/**
+ * Get the data from IN, compress it according to the specified
+ * COMPRESSION_LEVEL and write the result to OUT.
+ * SVN_DELTA_COMPRESSION_LEVEL_NONE is valid for COMPRESSION_LEVEL.
+ */
+svn_error_t *
+svn__compress(svn_string_t *in,
+ svn_stringbuf_t *out,
+ int compression_level);
+
+/**
+ * Get the compressed data from IN, decompress it and write the result to
+ * OUT. Return an error if the decompressed size is larger than LIMIT.
+ */
+svn_error_t *
+svn__decompress(svn_string_t *in,
+ svn_stringbuf_t *out,
+ apr_size_t limit);
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* SVN_DELTA_PRIVATE_H */
diff --git a/subversion/include/private/svn_dep_compat.h b/subversion/include/private/svn_dep_compat.h
index 2ce60a5..108b67c 100644
--- a/subversion/include/private/svn_dep_compat.h
+++ b/subversion/include/private/svn_dep_compat.h
@@ -62,9 +62,23 @@ extern "C" {
#define apr_array_clear(arr) (arr)->nelts = 0
#endif
+#if !APR_VERSION_AT_LEAST(1,3,0)
+/* Equivalent to the apr_hash_clear() function in APR >= 1.3.0. Used to
+ * implement the 'apr_hash_clear' macro if the version of APR that
+ * we build against does not provide the apr_hash_clear() function. */
+void svn_hash__clear(struct apr_hash_t *ht);
+
+/**
+ * If we don't have a recent enough APR, emulate the behavior of the
+ * apr_hash_clear() API.
+ */
+#define apr_hash_clear(ht) svn_hash__clear(ht)
+#endif
+
#if !APR_VERSION_AT_LEAST(1,0,0)
#define APR_UINT64_C(val) UINT64_C(val)
#define APR_FPROT_OS_DEFAULT APR_OS_DEFAULT
+#define apr_hash_make_custom(pool,hash_func) apr_hash_make(pool)
#endif
#if !APR_VERSION_AT_LEAST(1,3,0)
@@ -87,6 +101,27 @@ typedef apr_uint32_t apr_uintptr_t;
#endif /* !APR_VERSION_AT_LEAST(1,3,0) */
/**
+ * Work around a platform dependency issue. apr_thread_rwlock_trywrlock()
+ * will make APR_STATUS_IS_EBUSY() return TRUE if the lock could not be
+ * acquired under Unix. Under Windows, this will not work. So, provide
+ * a more portable substitute.
+ *
+ * @since New in 1.8.
+ */
+#ifdef WIN32
+#define SVN_LOCK_IS_BUSY(x) \
+ (APR_STATUS_IS_EBUSY(x) || (x) == APR_FROM_OS_ERROR(WAIT_TIMEOUT))
+#else
+#define SVN_LOCK_IS_BUSY(x) APR_STATUS_IS_EBUSY(x)
+#endif
+
+#if !APR_VERSION_AT_LEAST(1,4,0)
+#ifndef apr_time_from_msec
+#define apr_time_from_msec(msec) ((apr_time_t)(msec) * 1000)
+#endif
+#endif
+
+/**
* Check at compile time if the Serf version is at least a certain
* level.
* @param major The major version component of the version checked
@@ -107,6 +142,32 @@ typedef apr_uint32_t apr_uintptr_t;
#endif /* SERF_VERSION_AT_LEAST */
/**
+ * By default, if libsvn is built against one version of SQLite
+ * and then run using an older version, svn will error out:
+ *
+ * svn: Couldn't perform atomic initialization
+ * svn: SQLite compiled for 3.7.4, but running with 3.7.3
+ *
+ * That can be annoying when building on a modern system in order
+ * to deploy on a less modern one. So these constants allow one
+ * to specify how old the system being deployed on might be.
+ * For example,
+ *
+ * EXTRA_CFLAGS += -DSVN_SQLITE_MIN_VERSION_NUMBER=3007003
+ * EXTRA_CFLAGS += '-DSVN_SQLITE_MIN_VERSION="3.7.3"'
+ *
+ * turns on code that works around infelicities in older versions
+ * as far back as 3.7.3 and relaxes the check at initialization time
+ * to permit them.
+ *
+ * @since New in 1.8.
+ */
+#ifndef SVN_SQLITE_MIN_VERSION_NUMBER
+#define SVN_SQLITE_MIN_VERSION_NUMBER SQLITE_VERSION_NUMBER
+#define SVN_SQLITE_MIN_VERSION SQLITE_VERSION
+#endif /* SVN_SQLITE_MIN_VERSION_NUMBER */
+
+/**
* Check at compile time if the SQLite version is at least a certain
* level.
* @param major The major version component of the version checked
@@ -120,7 +181,7 @@ typedef apr_uint32_t apr_uintptr_t;
*/
#ifndef SQLITE_VERSION_AT_LEAST
#define SQLITE_VERSION_AT_LEAST(major,minor,patch) \
-((major*1000000 + minor*1000 + patch) <= SQLITE_VERSION_NUMBER)
+((major*1000000 + minor*1000 + patch) <= SVN_SQLITE_MIN_VERSION_NUMBER)
#endif /* SQLITE_VERSION_AT_LEAST */
#ifdef __cplusplus
diff --git a/subversion/include/private/svn_diff_private.h b/subversion/include/private/svn_diff_private.h
new file mode 100644
index 0000000..bb17c17
--- /dev/null
+++ b/subversion/include/private/svn_diff_private.h
@@ -0,0 +1,115 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ */
+
+
+#ifndef SVN_DIFF_PRIVATE_H
+#define SVN_DIFF_PRIVATE_H
+
+#include <apr_pools.h>
+#include <apr_tables.h>
+
+#include "svn_types.h"
+#include "svn_io.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+
+/* The separator string used below the "Index:" or similar line of
+ * Subversion's Unidiff-like diff format. */
+#define SVN_DIFF__EQUAL_STRING \
+ "==================================================================="
+
+/* The separator string used below the "Properties on ..." line of
+ * Subversion's Unidiff-like diff format. */
+#define SVN_DIFF__UNDER_STRING \
+ "___________________________________________________________________"
+
+/* The string used to mark a line in a hunk that doesn't end with a newline,
+ * when diffing a file. Intentionally not marked for translation, for wider
+ * interoperability with patch(1) programs. */
+#define SVN_DIFF__NO_NEWLINE_AT_END_OF_FILE \
+ "\\ No newline at end of file"
+
+/* The string used to mark a line in a hunk that doesn't end with a newline,
+ * when diffing a Subversion property. */
+#define SVN_DIFF__NO_NEWLINE_AT_END_OF_PROPERTY \
+ "\\ No newline at end of property"
+
+/* Write a unidiff "---" and "+++" header to OUTPUT_STREAM.
+ *
+ * Write "---" followed by a space and OLD_HEADER and a newline,
+ * then "+++" followed by a space and NEW_HEADER and a newline.
+ *
+ * The text will be encoded into HEADER_ENCODING.
+ */
+svn_error_t *
+svn_diff__unidiff_write_header(svn_stream_t *output_stream,
+ const char *header_encoding,
+ const char *old_header,
+ const char *new_header,
+ apr_pool_t *scratch_pool);
+
+/* Display property changes in pseudo-Unidiff format.
+ *
+ * Write to @a outstream the changes described by @a propchanges based on
+ * original properties @a original_props.
+ *
+ * Write all mark-up text (headers and so on) using the character encoding
+ * @a encoding.
+ *
+ * ### I think the idea is: we want the output to use @a encoding, and
+ * we will assume the text of the user's files and the values of any
+ * user-defined properties are already using @a encoding, so we don't
+ * want to re-code the *whole* output.
+ * So, shouldn't we also convert all prop names and all 'svn:*' prop
+ * values to @a encoding, since we know those are stored in UTF-8?
+ *
+ * @a original_props is a hash mapping (const char *) property names to
+ * (svn_string_t *) values. @a propchanges is an array of svn_prop_t
+ * representing the new values for any of the properties that changed, with
+ * a NULL value to represent deletion.
+ *
+ * If @a pretty_print_mergeinfo is true, then describe 'svn:mergeinfo'
+ * property changes in a human-readable form that says what changes were
+ * merged or reverse merged; otherwise (or if the mergeinfo property values
+ * don't parse correctly) display them just like any other property.
+ *
+ * Use @a scratch_pool for temporary allocations.
+ */
+svn_error_t *
+svn_diff__display_prop_diffs(svn_stream_t *outstream,
+ const char *encoding,
+ const apr_array_header_t *propchanges,
+ apr_hash_t *original_props,
+ svn_boolean_t pretty_print_mergeinfo,
+ apr_pool_t *scratch_pool);
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* SVN_DIFF_PRIVATE_H */
diff --git a/subversion/include/private/svn_diff_tree.h b/subversion/include/private/svn_diff_tree.h
new file mode 100644
index 0000000..8cd4c0e
--- /dev/null
+++ b/subversion/include/private/svn_diff_tree.h
@@ -0,0 +1,357 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ *
+ * @file svn_diff_tree.h
+ * @brief Generic diff handler. Replacing the old svn_wc_diff_callbacks4_t
+ * infrastructure
+ */
+
+#ifndef SVN_DIFF_TREE_H
+#define SVN_DIFF_TREE_H
+
+#include "svn_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/*
+ * About the diff tree processor.
+ *
+ * Subversion uses two kinds of editors to describe changes. One to
+ * describe changes on how to *exactly* transform one tree to another tree,
+ * as efficiently as possible and one to describe the difference between trees
+ * in order to review the changes, or to allow applying them on a third tree
+ * which is similar to those other trees.
+ *
+ * The first case was originally handled by svn_delta_editor_t and might be
+ * replaced by svn_editor_t in a future version. This diff processor handles
+ * the other case and as such forms the layer below our diff and merge
+ * handling.
+ *
+ * The major difference between this and the other editors is that this diff
+ * always provides access to the full text and/or properties in the left and
+ * right tree when applicable to allow processor implementers to decide how
+ * to interpret changes.
+ *
+ * Originally this diff processor was not formalized explicitly, but
+ * informally handled by the working copy diff callbacks. These callbacks just
+ * provided the information to drive a unified diff and a textual merge. To go
+ * one step further and allow full tree conflict detection we needed a better
+ * defined diff handling. Instead of adding yet a few more functions and
+ * arguments to the already overloaded diff callbacks the api was completely
+ * redesigned with a few points in mind.
+ *
+ * * It must be able to drive the old callbacks interface without users
+ * noticing the difference (100% compatible).
+ * (Implemented as svn_wc__wrap_diff_callbacks())
+ *
+ * * It should provide the information that was missing in the old interface,
+ * but required to close existing issues.
+ *
+ * E.g. - properties and children on deleted directories.
+ * - revision numbers and copyfrom information on directories.
+ *
+ * To cleanup the implementation and make it easier on diff processors to
+ * handle the results I also added the following constraints.
+ *
+ * * Diffs should be fully reversable: anything that is deleted should be
+ * available, just like something that is added.
+ * (Proven via svn_diff__tree_processor_reverse_create)
+ * ### Still in doubt if *_deleted() needs a copy_to argument, for the
+ * ### 99% -> 100%.
+ *
+ * * Diff processors should have an easy way to communicate that they are
+ * not interrested in certain expensive to obtain results.
+ *
+ * * Directories should have clear open and close events to allow adding them
+ * before their children, but still allowing property changes to have
+ * defined behavior.
+ *
+ * * Files and directories should be handled as similar as possible as in
+ * many cases they are just nodes in a tree.
+ *
+ * * It should be easy to create diff wrappers to apply certain transforms.
+ *
+ * During the creation an additional requirement of knowing about 'some
+ * absent' nodes was added, to allow the merge to work on just this processor
+ * api.
+ *
+ * The api describes a clean open-close walk through a tree, depending on the
+ * driver multiple siblings can be described at the same time, but when a
+ * directory is closed all descendants are done.
+ *
+ * Note that it is possible for nodes to be described as a delete followed by
+ * an add at the same place within one parent. (Iff the diff is reversed you
+ * can see an add followed by a delete!)
+ *
+ * The directory batons live between the open and close events of a directory
+ * and are thereby guaranteed to outlive the batons of their descendants.
+ */
+
+/* Describes the source of a merge */
+typedef struct svn_diff_source_t
+{
+ /* Always available */
+ svn_revnum_t revision;
+
+ /* Depending on the driver available for copyfrom */
+ const char *repos_relpath;
+} svn_diff_source_t;
+
+/**
+ * A callback vtable invoked by our diff-editors, as they receive diffs
+ * from the server. 'svn diff' and 'svn merge' implement their own versions
+ * of this vtable.
+ *
+ * All callbacks receive the processor and at least a parent baton. Forwarding
+ * the processor allows future extensions to call into the old functions without
+ * revving the entire API.
+ *
+ * Users must call svn_diff__tree_processor_create() to allow adding new
+ * callbacks later. (E.g. when we decide how to add move support) These
+ * extensions can then just call into other callbacks.
+ *
+ * @since New in 1.8.
+ */
+typedef struct svn_diff_tree_processor_t
+{
+ /** The value passed to svn_diff__tree_processor_create() as BATON.
+ */
+ void *baton; /* To avoid an additional in some places */
+
+ /* Called before a directories children are processed.
+ *
+ * Set *SKIP_CHILDREN to TRUE, to skip calling callbacks for all
+ * children.
+ *
+ * Set *SKIP to TRUE to skip calling the added, deleted, changed
+ * or closed callback for this node only.
+ */
+ svn_error_t *
+ (*dir_opened)(void **new_dir_baton,
+ svn_boolean_t *skip,
+ svn_boolean_t *skip_children,
+ const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const svn_diff_source_t *copyfrom_source,
+ void *parent_dir_baton,
+ const struct svn_diff_tree_processor_t *processor,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+ /* Called after a directory and all its children are added
+ */
+ svn_error_t *
+ (*dir_added)(const char *relpath,
+ const svn_diff_source_t *copyfrom_source,
+ const svn_diff_source_t *right_source,
+ /*const*/ apr_hash_t *copyfrom_props,
+ /*const*/ apr_hash_t *right_props,
+ void *dir_baton,
+ const struct svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool);
+
+ /* Called after all children of this node are reported as deleted.
+ *
+ * The default implementation calls dir_closed().
+ */
+ svn_error_t *
+ (*dir_deleted)(const char *relpath,
+ const svn_diff_source_t *left_source,
+ /*const*/ apr_hash_t *left_props,
+ void *dir_baton,
+ const struct svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool);
+
+ /* Called instead of dir_closed() if the properties on the directory
+ * were modified.
+ *
+ * The default implementation calls dir_closed().
+ */
+ svn_error_t *
+ (*dir_changed)(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ /*const*/ apr_hash_t *left_props,
+ /*const*/ apr_hash_t *right_props,
+ const apr_array_header_t *prop_changes,
+ void *dir_baton,
+ const struct svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool);
+
+ /* Called when a directory is closed without applying changes to
+ * the directory itself.
+ *
+ * When dir_changed or dir_deleted are handled by the default implementation
+ * they call dir_closed()
+ */
+ svn_error_t *
+ (*dir_closed)(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ void *dir_baton,
+ const struct svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool);
+
+ /* Called before file_added(), file_deleted(), file_changed() and
+ file_closed()
+ */
+ svn_error_t *
+ (*file_opened)(void **new_file_baton,
+ svn_boolean_t *skip,
+ const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const svn_diff_source_t *copyfrom_source,
+ void *dir_baton,
+ const struct svn_diff_tree_processor_t *processor,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+ /* Called after file_opened() for newly added and copied files */
+ svn_error_t *
+ (*file_added)(const char *relpath,
+ const svn_diff_source_t *copyfrom_source,
+ const svn_diff_source_t *right_source,
+ const char *copyfrom_file,
+ const char *right_file,
+ /*const*/ apr_hash_t *copyfrom_props,
+ /*const*/ apr_hash_t *right_props,
+ void *file_baton,
+ const struct svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool);
+
+ /* Called after file_opened() for deleted or moved away files */
+ svn_error_t *
+ (*file_deleted)(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const char *left_file,
+ /*const*/ apr_hash_t *left_props,
+ void *file_baton,
+ const struct svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool);
+
+ /* Called after file_opened() for changed files */
+ svn_error_t *
+ (*file_changed)(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const char *left_file,
+ const char *right_file,
+ /*const*/ apr_hash_t *left_props,
+ /*const*/ apr_hash_t *right_props,
+ svn_boolean_t file_modified,
+ const apr_array_header_t *prop_changes,
+ void *file_baton,
+ const struct svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool);
+
+ /* Called after file_opened() for unmodified files */
+ svn_error_t *
+ (*file_closed)(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ void *file_baton,
+ const struct svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool);
+
+ /* Called when encountering a marker for an absent file or directory */
+ svn_error_t *
+ (*node_absent)(const char *relpath,
+ void *dir_baton,
+ const struct svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool);
+} svn_diff_tree_processor_t;
+
+/**
+ * Create a new svn_diff_tree_processor_t instance with all functions
+ * set to a callback doing nothing but copying the parent baton to
+ * the new baton.
+ *
+ * @since New in 1.8.
+ */
+svn_diff_tree_processor_t *
+svn_diff__tree_processor_create(void *baton,
+ apr_pool_t *result_pool);
+
+/**
+ * Create a new svn_diff_tree_processor_t instance with all functions setup
+ * to call into another svn_diff_tree_processor_t processor, but with all
+ * adds and deletes inverted.
+ *
+ * @since New in 1.8.
+ */ /* Used by libsvn clients repository diff */
+const svn_diff_tree_processor_t *
+svn_diff__tree_processor_reverse_create(const svn_diff_tree_processor_t * processor,
+ const char *prefix_relpath,
+ apr_pool_t *result_pool);
+
+/**
+ * Create a new svn_diff_tree_processor_t instance with all functions setup
+ * to call into processor for all paths equal to and below prefix_relpath.
+ *
+ * @since New in 1.8.
+ */ /* Used by libsvn clients repository diff */
+const svn_diff_tree_processor_t *
+svn_diff__tree_processor_filter_create(const svn_diff_tree_processor_t *processor,
+ const char *prefix_relpath,
+ apr_pool_t *result_pool);
+
+/**
+ * Create a new svn_diff_tree_processor_t instace with all function setup
+ * to call into processor with all adds with copyfrom information transformed
+ * to simple node changes.
+ *
+ * @since New in 1.8.
+ */ /* Used by libsvn_wc diff editor */
+const svn_diff_tree_processor_t *
+svn_diff__tree_processor_copy_as_changed_create(
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *result_pool);
+
+
+/**
+ * Create a new svn_diff_tree_processor_t instance with all functions setup
+ * to first call into processor1 and then processor2.
+ *
+ * This function is mostly a debug and migration helper.
+ *
+ * @since New in 1.8.
+ */ /* Used by libsvn clients repository diff */
+const svn_diff_tree_processor_t *
+svn_diff__tree_processor_tee_create(const svn_diff_tree_processor_t *processor1,
+ const svn_diff_tree_processor_t *processor2,
+ apr_pool_t *result_pool);
+
+
+svn_diff_source_t *
+svn_diff__source_create(svn_revnum_t revision,
+ apr_pool_t *result_pool);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* SVN_DIFF_TREE_H */
+
diff --git a/subversion/include/private/svn_editor.h b/subversion/include/private/svn_editor.h
index 38c3e2b..d714bb1 100644
--- a/subversion/include/private/svn_editor.h
+++ b/subversion/include/private/svn_editor.h
@@ -32,11 +32,90 @@
#include "svn_types.h"
#include "svn_error.h"
#include "svn_io.h" /* for svn_stream_t */
+#include "svn_delta.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
+
+/*** Temporarily private stuff (should move to svn_delta.h when Editor
+ V2 is made public) ***/
+
+/** Callback to retrieve a node's entire set of properties. This is
+ * needed by the various editor shims in order to effect backwards
+ * compatibility.
+ *
+ * Implementations should set @a *props to the hash of properties
+ * associated with @a path in @a base_revision, allocating that hash
+ * and its contents in @a result_pool, and should use @a scratch_pool
+ * for temporary allocations.
+ *
+ * @a baton is an implementation-specific closure.
+ */
+typedef svn_error_t *(*svn_delta_fetch_props_func_t)(
+ apr_hash_t **props,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool
+ );
+
+/** Callback to retrieve a node's kind. This is needed by the various
+ * editor shims in order to effect backwards compatibility.
+ *
+ * Implementations should set @a *kind to the node kind of @a path in
+ * @a base_revision, using @a scratch_pool for temporary allocations.
+ *
+ * @a baton is an implementation-specific closure.
+ */
+typedef svn_error_t *(*svn_delta_fetch_kind_func_t)(
+ svn_node_kind_t *kind,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *scratch_pool
+ );
+
+/** Callback to fetch the name of a file to use as a delta base.
+ *
+ * Implementations should set @a *filename to the name of a file
+ * suitable for use as a delta base for @a path in @a base_revision
+ * (allocating @a *filename from @a result_pool), or to @c NULL if the
+ * base stream is empty. @a scratch_pool is provided for temporary
+ * allocations.
+ *
+ * @a baton is an implementation-specific closure.
+ */
+typedef svn_error_t *(*svn_delta_fetch_base_func_t)(
+ const char **filename,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool
+ );
+
+/** Collection of callbacks used for the shim code. This structure
+ * may grow additional fields in the future. Therefore, always use
+ * svn_delta_shim_callbacks_default() to allocate new instances of it.
+ */
+typedef struct svn_delta_shim_callbacks_t
+{
+ svn_delta_fetch_props_func_t fetch_props_func;
+ svn_delta_fetch_kind_func_t fetch_kind_func;
+ svn_delta_fetch_base_func_t fetch_base_func;
+ void *fetch_baton;
+} svn_delta_shim_callbacks_t;
+
+/** Return a collection of default shim functions in @a result_pool.
+ */
+svn_delta_shim_callbacks_t *
+svn_delta_shim_callbacks_default(apr_pool_t *result_pool);
+
+
+
/** Transforming trees ("editing").
*
* In Subversion, we have a number of occasions where we transform a tree
@@ -79,15 +158,15 @@ extern "C" {
* coupling between those subsystems.
*
* The set of changes, and the data necessary to describe it entirely, is
- * completely unbounded. An addition of one simple 20Gb file would be well
- * past the available memory of any machine processing these operations.
+ * completely unbounded. An addition of one simple 20 GB file might be well
+ * past the available memory of a machine processing these operations.
* As a result, the API to describe the changes is designed to be applied
* in a sequential (and relatively random-access) model. The operations
* can be streamed from the driver to the receiver, resulting in the
* receiver editing its tree to the target state defined by the driver.
*
*
- * HISTORY
+ * <h3>History</h3>
*
* Classically, Subversion had a notion of a "tree delta" which could be
* passed around as an independent entity. Theory implied this delta was an
@@ -96,7 +175,7 @@ extern "C" {
* and consumer of these tree deltas were (and are) tightly coupled. As noted
* above, the tree delta producer needed to be *totally* aware of the tree
* that it needed to edit. So rather than telling the delta consumer how to
- * edit its tree, the classic "@c svn_delta_editor_t" interface focused
+ * edit its tree, the classic #svn_delta_editor_t interface focused
* entirely on the tree delta, an intermediate (logical) data structure
* which was unusable outside of the particular, coupled pairing of producer
* and consumer. This generation of the API forgoes the logical tree delta
@@ -105,7 +184,7 @@ extern "C" {
* a set of operations describing the change, and a "receiver" accepts and
* applies them to its tree.
*
- * The classic interface was named "@c svn_delta_editor_t" and was described
+ * The classic interface was named #svn_delta_editor_t and was described
* idiomatically as the "editor interface". This generation of the interface
* retains the "editor" name for that reason. All notions of a "tree delta"
* structure are no longer part of this interface.
@@ -117,12 +196,51 @@ extern "C" {
* the most common functionality (cancellation and debugging) have been
* integrated directly into this new editor system.
*
+ *
+ * <h3>Implementation Plan</h3>
+ * @note This section can be removed after Ev2 is fully implemented.
+ *
+ * The delta editor is pretty engrained throughout Subversion, so attempting
+ * to replace it in situ is somewhat akin to performing open heart surgery
+ * while the patient is running a marathon. However, a viable plan should
+ * make things a bit easier, and help parallelize the work.
+ *
+ * In short, the following items need to be done:
+ * -# Implement backward compatibility wrappers ("shims")
+ * -# Use shims to update editor consumers to Ev2
+ * -# Update editor producers to drive Ev2
+ * - This will largely involve rewriting the RA layers to accept and
+ * send Ev2 commands
+ * -# Optimize consumers and producers to leverage the features of Ev2
+ *
+ * The shims are largely self-contained, and as of this writing, are almost
+ * complete. They can be released without much ado. However, they do add
+ * <em>significant</em> performance regressions, which make releasing code
+ * which is half-delta-editor and half-Ev2 inadvisable. As such, the updating
+ * of producers and consumers to Ev2 will probably need to wait until 1.9,
+ * though it could be largely parallelized.
+ *
+ *
* @defgroup svn_editor The editor interface
* @{
*/
/** An abstract object that edits a target tree.
*
+ * @note The term "follow" means at any later time in the editor drive.
+ * Terms such as "must", "must not", "required", "shall", "shall not",
+ * "should", "should not", "recommended", "may", and "optional" in this
+ * document are to be interpreted as described in RFC 2119.
+ *
+ * @note The editor objects are *not* reentrant. The receiver should not
+ * directly or indirectly invoke an editor API with the same object unless
+ * it has been marked as explicitly supporting reentrancy during a
+ * receiver's callback. This limitation extends to the cancellation
+ * callback, too. (This limitation is due to the scratch_pool shared by
+ * all callbacks, and cleared after each callback; a reentrant call could
+ * clear the outer call's pool). Note that the code itself is reentrant, so
+ * there is no problem using the APIs on different editor objects.
+ *
* \n
* <h3>Life-Cycle</h3>
*
@@ -146,12 +264,13 @@ extern "C" {
* svn_editor_setcb_add_file() \n
* svn_editor_setcb_add_symlink() \n
* svn_editor_setcb_add_absent() \n
- * svn_editor_setcb_set_props() \n
- * svn_editor_setcb_set_text() \n
- * svn_editor_setcb_set_target() \n
+ * svn_editor_setcb_alter_directory() \n
+ * svn_editor_setcb_alter_file() \n
+ * svn_editor_setcb_alter_symlink() \n
* svn_editor_setcb_delete() \n
* svn_editor_setcb_copy() \n
* svn_editor_setcb_move() \n
+ * svn_editor_setcb_rotate() \n
* svn_editor_setcb_complete() \n
* svn_editor_setcb_abort()
*
@@ -168,17 +287,18 @@ extern "C" {
* svn_editor_add_file() \n
* svn_editor_add_symlink() \n
* svn_editor_add_absent() \n
- * svn_editor_set_props() \n
- * svn_editor_set_text() \n
- * svn_editor_set_target() \n
+ * svn_editor_alter_directory() \n
+ * svn_editor_alter_file() \n
+ * svn_editor_alter_symlink() \n
* svn_editor_delete() \n
* svn_editor_copy() \n
- * svn_editor_move()
+ * svn_editor_move() \n
+ * svn_editor_rotate()
* \n\n
* Just before each callback invocation is carried out, the @a cancel_func
* that was passed to svn_editor_create() is invoked to poll any
* external reasons to cancel the sequence of operations. Unless it
- * overrides the cancellation (denoted by SVN_ERR_CANCELLED), the driver
+ * overrides the cancellation (denoted by #SVN_ERR_CANCELLED), the driver
* aborts the transmission by invoking the svn_editor_abort() callback.
* Exceptions to this are calls to svn_editor_complete() and
* svn_editor_abort(), which cannot be canceled externally.
@@ -205,33 +325,42 @@ extern "C" {
* In order to reduce complexity of callback receivers, the editor callbacks
* must be driven in adherence to these rules:
*
+ * - If any path is added (with add_*) or deleted/moved/rotated, then
+ * an svn_editor_alter_directory() call must be made for its parent
+ * directory with the target/eventual set of children.
+ *
* - svn_editor_add_directory() -- Another svn_editor_add_*() call must
* follow for each child mentioned in the @a children argument of any
* svn_editor_add_directory() call.
*
- * - svn_editor_add_file() -- An svn_editor_set_text() call must follow
- * for the same path (at some point).
- *
- * - svn_editor_set_props()
- * - The @a complete argument must be TRUE if no more calls will follow on
- * the same path. @a complete must always be TRUE for directories.
- * - If @a complete is FALSE, and:
- * - if @a relpath is a file, this must (at some point) be followed by
- * an svn_editor_set_text() call on the same path.
- * - if @a relpath is a symlink, this must (at some point) be followed by
- * an svn_editor_set_target() call on the same path.
- *
- * - svn_editor_set_text() and svn_editor_set_target() must always occur
- * @b after an svn_editor_set_props() or svn_editor_add_file() call on
- * the same path, if any.\n
- * In other words, if there are two calls coming in on the same path, the
- * first of them has to be either svn_editor_set_props() or
- * svn_editor_add_file().
+ * - For each node created with add_*, if its parent was created using
+ * svn_editor_add_directory(), then the new child node MUST have been
+ * mentioned in the @a children parameter of the parent's creation.
+ * This allows the parent directory to properly mark the child as
+ * "incomplete" until the child's add_* call arrives.
+ *
+ * - A path should never be referenced more than once by the add_*, alter_*,
+ * and delete operations (the "Once Rule"). The source path of a copy (and
+ * its children, if a directory) may be copied many times, and are
+ * otherwise subject to the Once Rule. The destination path of a copy
+ * or move may have alter_* operations applied, but not add_* or delete.
+ * If the destination path of a copy, move, or rotate is a directory,
+ * then its children are subject to the Once Rule. The source path of
+ * a move (and its child paths) may be referenced in add_*, or as the
+ * destination of a copy (where these new or copied nodes are subject
+ * to the Once Rule). Paths listed in a rotation are both sources and
+ * destinations, so they may not be referenced again in an add_* or a
+ * deletion; these paths may have alter_* operations applied.
+ *
+ * - The ancestor of an added, copied-here, moved-here, rotated, or
+ * modified node may not be deleted. The ancestor may not be moved
+ * (instead: perform the move, *then* the edits).
*
* - svn_editor_delete() must not be used to replace a path -- i.e.
* svn_editor_delete() must not be followed by an svn_editor_add_*() on
* the same path, nor by an svn_editor_copy() or svn_editor_move() with
* the same path as the copy/move target.
+ *
* Instead of a prior delete call, the add/copy/move callbacks should be
* called with the @a replaces_rev argument set to the revision number of
* the node at this path that is being replaced. Note that the path and
@@ -242,6 +371,13 @@ extern "C" {
* - svn_editor_delete() must not be used to move a path -- i.e.
* svn_editor_delete() must not delete the source path of a previous
* svn_editor_copy() call. Instead, svn_editor_move() must be used.
+ * Note: if the desired semantics is one (or more) copies, followed
+ * by a delete... that is fine. It is simply that svn_editor_move()
+ * should be used to describe a semantic move.
+ *
+ * - Paths mentioned in svn_editor_rotate() may have their properties
+ * and contents edited (via alter_* calls) by a previous or later call,
+ * but they may not be subject to a later move, rotate, or deletion.
*
* - One of svn_editor_complete() or svn_editor_abort() must be called
* exactly once, which must be the final call the driver invokes.
@@ -250,19 +386,16 @@ extern "C" {
* svn_editor_abort() must imply that the transformation was not completed
* successfully.
*
- * - If any callback invocation returns with an error, the driver must
- * invoke svn_editor_abort() and stop transmitting operations.
+ * - If any callback invocation (besides svn_editor_complete()) returns
+ * with an error, the driver must invoke svn_editor_abort() and stop
+ * transmitting operations.
* \n\n
*
* <h3>Receiving Restrictions</h3>
- * All callbacks must complete their handling of a path before they
- * return, except for the following pairs, where a change must be completed
- * when receiving the second callback in each pair:
- * - svn_editor_add_file() and svn_editor_set_text()
- * - svn_editor_set_props() (if @a complete is FALSE) and
- * svn_editor_set_text() (if the node is a file)
- * - svn_editor_set_props() (if @a complete is FALSE) and
- * svn_editor_set_target() (if the node is a symbolic link)
+ *
+ * All callbacks must complete their handling of a path before they return.
+ * Since future callbacks will never reference this path again (due to the
+ * Once Rule), the changes can and should be completed.
*
* This restriction is not recursive -- a directory's children may remain
* incomplete until later callback calls are received.
@@ -276,16 +409,34 @@ extern "C" {
* for these items are invoked.
* \n\n
*
+ * <h3>Timing and State</h3>
+ * The calls made by the driver to alter the state in the receiver are
+ * based on the receiver's *current* state, which includes all prior changes
+ * made during the edit.
+ *
+ * Example: copy A to B; set-props on A; copy A to C. The props on C
+ * should reflect the updated properties of A.
+ *
+ * Example: mv A@N to B; mv C@M to A. The second move cannot be marked as
+ * a "replacing" move since it is not replacing A. The node at A was moved
+ * away. The second operation is simply moving C to the now-empty path
+ * known as A.
+ *
* <h3>Paths</h3>
* Each driver/receiver implementation of this editor interface must
- * establish the expected root path for the paths sent and received via the
- * callbacks' @a relpath arguments.
- *
- * For example, during an "update", the driver has a working copy checked
- * out at a specific repository URL. The receiver sees the repository as a
- * whole. Here, the receiver could tell the driver which repository
- * URL the working copy refers to, and thus the driver could send
- * @a relpath arguments that are relative to the receiver's working copy.
+ * establish the expected root for all the paths sent and received via
+ * the callbacks' @a relpath arguments.
+ *
+ * For example, during an "update", the driver is the repository, as a
+ * whole. The receiver may have just a portion of that repository. Here,
+ * the receiver could tell the driver which repository URL the working
+ * copy refers to, and thus the driver could send @a relpath arguments
+ * that are relative to the receiver's working copy.
+ *
+ * @note Because the source of a copy may be located *anywhere* in the
+ * repository, editor drives should typically use the repository root
+ * as the negotiated root. This allows the @a src_relpath argument in
+ * svn_editor_copy() to specify any possible source.
* \n\n
*
* <h3>Pool Usage</h3>
@@ -322,16 +473,19 @@ extern "C" {
* context.
*
*
- * ### TODO @todo anything missing? -- allow text and prop change to follow
- * a move or copy. -- set_text() vs. apply_text_delta()? -- If a
- * set_props/set_text/set_target/copy/move/delete in a merge source is
- * applied to a different branch, which side will REVISION arguments reflect
- * and is there still a problem?
+ * @todo ### TODO anything missing?
*
- * @since New in 1.7.
+ * @since New in 1.8.
*/
typedef struct svn_editor_t svn_editor_t;
+/** The kind of the checksum to be used throughout the #svn_editor_t APIs.
+ *
+ * @note ### This may change before Ev2 is official released, so just like
+ * everything else in this file, please don't rely upon it until then.
+ */
+#define SVN_EDITOR_CHECKSUM_KIND svn_checksum_sha1
+
/** These function types define the callback functions a tree delta consumer
* implements.
@@ -358,7 +512,7 @@ typedef struct svn_editor_t svn_editor_t;
*/
/** @see svn_editor_add_directory(), svn_editor_t.
- * @since New in 1.7.
+ * @since New in 1.8.
*/
typedef svn_error_t *(*svn_editor_cb_add_directory_t)(
void *baton,
@@ -369,17 +523,19 @@ typedef svn_error_t *(*svn_editor_cb_add_directory_t)(
apr_pool_t *scratch_pool);
/** @see svn_editor_add_file(), svn_editor_t.
- * @since New in 1.7.
+ * @since New in 1.8.
*/
typedef svn_error_t *(*svn_editor_cb_add_file_t)(
void *baton,
const char *relpath,
+ const svn_checksum_t *checksum,
+ svn_stream_t *contents,
apr_hash_t *props,
svn_revnum_t replaces_rev,
apr_pool_t *scratch_pool);
/** @see svn_editor_add_symlink(), svn_editor_t.
- * @since New in 1.7.
+ * @since New in 1.8.
*/
typedef svn_error_t *(*svn_editor_cb_add_symlink_t)(
void *baton,
@@ -390,7 +546,7 @@ typedef svn_error_t *(*svn_editor_cb_add_symlink_t)(
apr_pool_t *scratch_pool);
/** @see svn_editor_add_absent(), svn_editor_t.
- * @since New in 1.7.
+ * @since New in 1.8.
*/
typedef svn_error_t *(*svn_editor_cb_add_absent_t)(
void *baton,
@@ -399,40 +555,42 @@ typedef svn_error_t *(*svn_editor_cb_add_absent_t)(
svn_revnum_t replaces_rev,
apr_pool_t *scratch_pool);
-/** @see svn_editor_set_props(), svn_editor_t.
- * @since New in 1.7.
+/** @see svn_editor_alter_directory(), svn_editor_t.
+ * @since New in 1.8.
*/
-typedef svn_error_t *(*svn_editor_cb_set_props_t)(
+typedef svn_error_t *(*svn_editor_cb_alter_directory_t)(
void *baton,
const char *relpath,
svn_revnum_t revision,
+ const apr_array_header_t *children,
apr_hash_t *props,
- svn_boolean_t complete,
apr_pool_t *scratch_pool);
-/** @see svn_editor_set_text(), svn_editor_t.
- * @since New in 1.7.
+/** @see svn_editor_alter_file(), svn_editor_t.
+ * @since New in 1.8.
*/
-typedef svn_error_t *(*svn_editor_cb_set_text_t)(
+typedef svn_error_t *(*svn_editor_cb_alter_file_t)(
void *baton,
const char *relpath,
svn_revnum_t revision,
+ apr_hash_t *props,
const svn_checksum_t *checksum,
svn_stream_t *contents,
apr_pool_t *scratch_pool);
-/** @see svn_editor_set_target(), svn_editor_t.
- * @since New in 1.7.
+/** @see svn_editor_alter_symlink(), svn_editor_t.
+ * @since New in 1.8.
*/
-typedef svn_error_t *(*svn_editor_cb_set_target_t)(
+typedef svn_error_t *(*svn_editor_cb_alter_symlink_t)(
void *baton,
const char *relpath,
svn_revnum_t revision,
+ apr_hash_t *props,
const char *target,
apr_pool_t *scratch_pool);
/** @see svn_editor_delete(), svn_editor_t.
- * @since New in 1.7.
+ * @since New in 1.8.
*/
typedef svn_error_t *(*svn_editor_cb_delete_t)(
void *baton,
@@ -441,7 +599,7 @@ typedef svn_error_t *(*svn_editor_cb_delete_t)(
apr_pool_t *scratch_pool);
/** @see svn_editor_copy(), svn_editor_t.
- * @since New in 1.7.
+ * @since New in 1.8.
*/
typedef svn_error_t *(*svn_editor_cb_copy_t)(
void *baton,
@@ -452,7 +610,7 @@ typedef svn_error_t *(*svn_editor_cb_copy_t)(
apr_pool_t *scratch_pool);
/** @see svn_editor_move(), svn_editor_t.
- * @since New in 1.7.
+ * @since New in 1.8.
*/
typedef svn_error_t *(*svn_editor_cb_move_t)(
void *baton,
@@ -462,15 +620,24 @@ typedef svn_error_t *(*svn_editor_cb_move_t)(
svn_revnum_t replaces_rev,
apr_pool_t *scratch_pool);
+/** @see svn_editor_rotate(), svn_editor_t.
+ * @since New in 1.8.
+ */
+typedef svn_error_t *(*svn_editor_cb_rotate_t)(
+ void *baton,
+ const apr_array_header_t *relpaths,
+ const apr_array_header_t *revisions,
+ apr_pool_t *scratch_pool);
+
/** @see svn_editor_complete(), svn_editor_t.
- * @since New in 1.7.
+ * @since New in 1.8.
*/
typedef svn_error_t *(*svn_editor_cb_complete_t)(
void *baton,
apr_pool_t *scratch_pool);
/** @see svn_editor_abort(), svn_editor_t.
- * @since New in 1.7.
+ * @since New in 1.8.
*/
typedef svn_error_t *(*svn_editor_cb_abort_t)(
void *baton,
@@ -491,7 +658,7 @@ typedef svn_error_t *(*svn_editor_cb_abort_t)(
* @a scratch_pool is used for temporary allocations (if any). Note that
* this is NOT the same @a scratch_pool that is passed to callback functions.
* @see svn_editor_t
- * @since New in 1.7.
+ * @since New in 1.8.
*/
svn_error_t *
svn_editor_create(svn_editor_t **editor,
@@ -502,11 +669,22 @@ svn_editor_create(svn_editor_t **editor,
apr_pool_t *scratch_pool);
+/** Return an editor's private baton.
+ *
+ * In some cases, the baton is required outside of the callbacks. This
+ * function returns the private baton for use.
+ *
+ * @since New in 1.8.
+ */
+void *
+svn_editor_get_baton(const svn_editor_t *editor);
+
+
/** Sets the #svn_editor_cb_add_directory_t callback in @a editor
* to @a callback.
* @a scratch_pool is used for temporary allocations (if any).
* @see also svn_editor_setcb_many().
- * @since New in 1.7.
+ * @since New in 1.8.
*/
svn_error_t *
svn_editor_setcb_add_directory(svn_editor_t *editor,
@@ -517,7 +695,7 @@ svn_editor_setcb_add_directory(svn_editor_t *editor,
* to @a callback.
* @a scratch_pool is used for temporary allocations (if any).
* @see also svn_editor_setcb_many().
- * @since New in 1.7.
+ * @since New in 1.8.
*/
svn_error_t *
svn_editor_setcb_add_file(svn_editor_t *editor,
@@ -528,7 +706,7 @@ svn_editor_setcb_add_file(svn_editor_t *editor,
* to @a callback.
* @a scratch_pool is used for temporary allocations (if any).
* @see also svn_editor_setcb_many().
- * @since New in 1.7.
+ * @since New in 1.8.
*/
svn_error_t *
svn_editor_setcb_add_symlink(svn_editor_t *editor,
@@ -539,51 +717,51 @@ svn_editor_setcb_add_symlink(svn_editor_t *editor,
* to @a callback.
* @a scratch_pool is used for temporary allocations (if any).
* @see also svn_editor_setcb_many().
- * @since New in 1.7.
+ * @since New in 1.8.
*/
svn_error_t *
svn_editor_setcb_add_absent(svn_editor_t *editor,
svn_editor_cb_add_absent_t callback,
apr_pool_t *scratch_pool);
-/** Sets the #svn_editor_cb_set_props_t callback in @a editor
+/** Sets the #svn_editor_cb_alter_directory_t callback in @a editor
* to @a callback.
* @a scratch_pool is used for temporary allocations (if any).
* @see also svn_editor_setcb_many().
- * @since New in 1.7.
+ * @since New in 1.8.
*/
svn_error_t *
-svn_editor_setcb_set_props(svn_editor_t *editor,
- svn_editor_cb_set_props_t callback,
- apr_pool_t *scratch_pool);
+svn_editor_setcb_alter_directory(svn_editor_t *editor,
+ svn_editor_cb_alter_directory_t callback,
+ apr_pool_t *scratch_pool);
-/** Sets the #svn_editor_cb_set_text_t callback in @a editor
+/** Sets the #svn_editor_cb_alter_file_t callback in @a editor
* to @a callback.
* @a scratch_pool is used for temporary allocations (if any).
* @see also svn_editor_setcb_many().
- * @since New in 1.7.
+ * @since New in 1.8.
*/
svn_error_t *
-svn_editor_setcb_set_text(svn_editor_t *editor,
- svn_editor_cb_set_text_t callback,
- apr_pool_t *scratch_pool);
+svn_editor_setcb_alter_file(svn_editor_t *editor,
+ svn_editor_cb_alter_file_t callback,
+ apr_pool_t *scratch_pool);
-/** Sets the #svn_editor_cb_set_target_t callback in @a editor
+/** Sets the #svn_editor_cb_alter_symlink_t callback in @a editor
* to @a callback.
* @a scratch_pool is used for temporary allocations (if any).
* @see also svn_editor_setcb_many().
- * @since New in 1.7.
+ * @since New in 1.8.
*/
svn_error_t *
-svn_editor_setcb_set_target(svn_editor_t *editor,
- svn_editor_cb_set_target_t callback,
- apr_pool_t *scratch_pool);
+svn_editor_setcb_alter_symlink(svn_editor_t *editor,
+ svn_editor_cb_alter_symlink_t callback,
+ apr_pool_t *scratch_pool);
/** Sets the #svn_editor_cb_delete_t callback in @a editor
* to @a callback.
* @a scratch_pool is used for temporary allocations (if any).
* @see also svn_editor_setcb_many().
- * @since New in 1.7.
+ * @since New in 1.8.
*/
svn_error_t *
svn_editor_setcb_delete(svn_editor_t *editor,
@@ -594,7 +772,7 @@ svn_editor_setcb_delete(svn_editor_t *editor,
* to @a callback.
* @a scratch_pool is used for temporary allocations (if any).
* @see also svn_editor_setcb_many().
- * @since New in 1.7.
+ * @since New in 1.8.
*/
svn_error_t *
svn_editor_setcb_copy(svn_editor_t *editor,
@@ -605,18 +783,29 @@ svn_editor_setcb_copy(svn_editor_t *editor,
* to @a callback.
* @a scratch_pool is used for temporary allocations (if any).
* @see also svn_editor_setcb_many().
- * @since New in 1.7.
+ * @since New in 1.8.
*/
svn_error_t *
svn_editor_setcb_move(svn_editor_t *editor,
svn_editor_cb_move_t callback,
apr_pool_t *scratch_pool);
+/** Sets the #svn_editor_cb_rotate_t callback in @a editor
+ * to @a callback.
+ * @a scratch_pool is used for temporary allocations (if any).
+ * @see also svn_editor_setcb_many().
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_editor_setcb_rotate(svn_editor_t *editor,
+ svn_editor_cb_rotate_t callback,
+ apr_pool_t *scratch_pool);
+
/** Sets the #svn_editor_cb_complete_t callback in @a editor
* to @a callback.
* @a scratch_pool is used for temporary allocations (if any).
* @see also svn_editor_setcb_many().
- * @since New in 1.7.
+ * @since New in 1.8.
*/
svn_error_t *
svn_editor_setcb_complete(svn_editor_t *editor,
@@ -627,7 +816,7 @@ svn_editor_setcb_complete(svn_editor_t *editor,
* to @a callback.
* @a scratch_pool is used for temporary allocations (if any).
* @see also svn_editor_setcb_many().
- * @since New in 1.7.
+ * @since New in 1.8.
*/
svn_error_t *
svn_editor_setcb_abort(svn_editor_t *editor,
@@ -638,7 +827,7 @@ svn_editor_setcb_abort(svn_editor_t *editor,
/** Lists a complete set of editor callbacks.
* This is a convenience structure.
* @see svn_editor_setcb_many(), svn_editor_create(), svn_editor_t.
- * @since New in 1.7.
+ * @since New in 1.8.
*/
typedef struct svn_editor_cb_many_t
{
@@ -646,12 +835,13 @@ typedef struct svn_editor_cb_many_t
svn_editor_cb_add_file_t cb_add_file;
svn_editor_cb_add_symlink_t cb_add_symlink;
svn_editor_cb_add_absent_t cb_add_absent;
- svn_editor_cb_set_props_t cb_set_props;
- svn_editor_cb_set_text_t cb_set_text;
- svn_editor_cb_set_target_t cb_set_target;
+ svn_editor_cb_alter_directory_t cb_alter_directory;
+ svn_editor_cb_alter_file_t cb_alter_file;
+ svn_editor_cb_alter_symlink_t cb_alter_symlink;
svn_editor_cb_delete_t cb_delete;
svn_editor_cb_copy_t cb_copy;
svn_editor_cb_move_t cb_move;
+ svn_editor_cb_rotate_t cb_rotate;
svn_editor_cb_complete_t cb_complete;
svn_editor_cb_abort_t cb_abort;
@@ -660,7 +850,7 @@ typedef struct svn_editor_cb_many_t
/** Sets all the callback functions in @a editor at once, according to the
* callback functions stored in @a many.
* @a scratch_pool is used for temporary allocations (if any).
- * @since New in 1.7.
+ * @since New in 1.8.
*/
svn_error_t *
svn_editor_setcb_many(svn_editor_t *editor,
@@ -683,21 +873,14 @@ svn_editor_setcb_many(svn_editor_t *editor,
* Create a new directory at @a relpath. The immediate parent of @a relpath
* is expected to exist.
*
- * Set the properties of the new directory to @a props, which is an
- * apr_hash_t holding key-value pairs. Each key is a const char* of a
- * property name, each value is a const svn_string_t*. If no properties are
- * being set on the new directory, @a props must be NULL.
- *
- * If this add is expected to replace a previously existing file or
- * directory at @a relpath, the revision number of the node to be replaced
- * must be given in @a replaces_rev. Otherwise, @a replaces_rev must be
- * SVN_INVALID_REVNUM. Note: it is not allowed to call a "delete" followed
- * by an "add" on the same path. Instead, an "add" with @a replaces_rev set
- * accordingly MUST be used.
+ * For descriptions of @a props and @a replaces_rev, see
+ * svn_editor_add_file().
*
* A complete listing of the immediate children of @a relpath that will be
* added subsequently is given in @a children. @a children is an array of
- * const char*s, each giving the basename of an immediate child.
+ * const char*s, each giving the basename of an immediate child. It is an
+ * error to pass NULL for @a children; use an empty array to indicate
+ * the new directory will have no children.
*
* For all restrictions on driving the editor, see #svn_editor_t.
*/
@@ -713,24 +896,30 @@ svn_editor_add_directory(svn_editor_t *editor,
* Create a new file at @a relpath. The immediate parent of @a relpath
* is expected to exist.
*
+ * The file's contents are specified in @a contents which has a checksum
+ * matching @a checksum. Both values must be non-NULL.
+ *
* Set the properties of the new file to @a props, which is an
* apr_hash_t holding key-value pairs. Each key is a const char* of a
* property name, each value is a const svn_string_t*. If no properties are
- * being set on the new file, @a props must be NULL.
+ * being set on the new file, @a props must be the empty hash. It is an
+ * error to pass NULL for @a props.
*
- * If this add is expected to replace a previously existing file or
+ * If this add is expected to replace a previously existing file, symlink or
* directory at @a relpath, the revision number of the node to be replaced
* must be given in @a replaces_rev. Otherwise, @a replaces_rev must be
- * SVN_INVALID_REVNUM. Note: it is not allowed to call a "delete" followed
+ * #SVN_INVALID_REVNUM. Note: it is not allowed to call a "delete" followed
* by an "add" on the same path. Instead, an "add" with @a replaces_rev set
* accordingly MUST be used.
*
* For all restrictions on driving the editor, see #svn_editor_t.
- * @since New in 1.7.
+ * @since New in 1.8.
*/
svn_error_t *
svn_editor_add_file(svn_editor_t *editor,
const char *relpath,
+ const svn_checksum_t *checksum,
+ svn_stream_t *contents,
apr_hash_t *props,
svn_revnum_t replaces_rev);
@@ -743,7 +932,7 @@ svn_editor_add_file(svn_editor_t *editor,
* svn_editor_add_file().
*
* For all restrictions on driving the editor, see #svn_editor_t.
- * @since New in 1.7.
+ * @since New in 1.8.
*/
svn_error_t *
svn_editor_add_symlink(svn_editor_t *editor,
@@ -757,11 +946,12 @@ svn_editor_add_symlink(svn_editor_t *editor,
* Create an "absent" node of kind @a kind at @a relpath. The immediate
* parent of @a relpath is expected to exist.
* ### TODO @todo explain "absent".
+ * ### JAF: What are the allowed values of 'kind'?
*
* For a description of @a replaces_rev, see svn_editor_add_file().
*
* For all restrictions on driving the editor, see #svn_editor_t.
- * @since New in 1.7.
+ * @since New in 1.8.
*/
svn_error_t *
svn_editor_add_absent(svn_editor_t *editor,
@@ -769,61 +959,96 @@ svn_editor_add_absent(svn_editor_t *editor,
svn_node_kind_t kind,
svn_revnum_t replaces_rev);
-/** Drive @a editor's #svn_editor_cb_set_props_t callback.
+/** Drive @a editor's #svn_editor_cb_alter_directory_t callback.
+ *
+ * Alter the properties of the directory at @a relpath.
+ *
+ * @a revision specifies the revision at which the receiver should
+ * expect to find this node. That is, @a relpath at the start of the
+ * whole edit and @a relpath at @a revision must lie within the same
+ * node-rev (aka location history segment). This information may be used
+ * to catch an attempt to alter and out-of-date directory. If the
+ * directory does not have a corresponding revision in the repository
+ * (e.g. it has not yet been committed), then @a revision should be
+ * #SVN_INVALID_REVNUM.
+ *
+ * If any changes to the set of children will be made in the future of
+ * the edit drive, then @a children MUST specify the resulting set of
+ * children. See svn_editor_add_directory() for the format of @a children.
+ * If not changes will be made, then NULL may be specified.
*
- * Set or change properties on the existing node at @a relpath.
- * ### TODO @todo Does this send *all* properties, always?
- * ### TODO @todo What is REVISION for?
- * ### what about "entry props"? will these still be handled via
- * ### the general prop function?
+ * For a description of @a props, see svn_editor_add_file(). If no changes
+ * to the properties will be made (ie. only future changes to the set of
+ * children), then @a props may be NULL.
*
- * @a complete must be FALSE if and only if
- * - @a relpath is a file and an svn_editor_set_text() call will follow on
- * the same path, or
- * - @a relpath is a symbolic link and an svn_editor_set_target() call will
- * follow on the same path.
+ * It is an error to pass NULL for both @a children and @a props.
*
* For all restrictions on driving the editor, see #svn_editor_t.
- * @since New in 1.7.
+ * @since New in 1.8.
*/
svn_error_t *
-svn_editor_set_props(svn_editor_t *editor,
- const char *relpath,
- svn_revnum_t revision,
- apr_hash_t *props,
- svn_boolean_t complete);
+svn_editor_alter_directory(svn_editor_t *editor,
+ const char *relpath,
+ svn_revnum_t revision,
+ const apr_array_header_t *children,
+ apr_hash_t *props);
-/** Drive @a editor's #svn_editor_cb_set_text_t callback.
+/** Drive @a editor's #svn_editor_cb_alter_file_t callback.
*
- * Set/change the text content of a file at @a relpath to @a contents
- * with checksum @a checksum.
- * ### TODO @todo Does this send the *complete* content, always?
- * ### TODO @todo What is REVISION for?
+ * Alter the properties and/or the contents of the file at @a relpath
+ * with @a revision as its expected revision. See svn_editor_alter_directory()
+ * for more information about @a revision.
+ *
+ * If @a props is non-NULL, then the properties will be applied.
+ *
+ * If @a contents is non-NULL, then the stream will be copied to
+ * the file, and its checksum must match @a checksum (which must also
+ * be non-NULL). If @a contents is NULL, then @a checksum must also
+ * be NULL, and no change will be applied to the file's contents.
+ *
+ * The properties and/or the contents must be changed. It is an error to
+ * pass NULL for @a props, @a checksum, and @a contents.
+ *
+ * For a description of @a checksum and @a contents see
+ * svn_editor_add_file(). This function allows @a props to be NULL, but
+ * the parameter is otherwise described by svn_editor_add_file().
*
* For all restrictions on driving the editor, see #svn_editor_t.
- * @since New in 1.7.
+ * @since New in 1.8.
*/
svn_error_t *
-svn_editor_set_text(svn_editor_t *editor,
- const char *relpath,
- svn_revnum_t revision,
- const svn_checksum_t *checksum,
- svn_stream_t *contents);
+svn_editor_alter_file(svn_editor_t *editor,
+ const char *relpath,
+ svn_revnum_t revision,
+ apr_hash_t *props,
+ const svn_checksum_t *checksum,
+ svn_stream_t *contents);
-/** Drive @a editor's #svn_editor_cb_set_target_t callback.
+/** Drive @a editor's #svn_editor_cb_alter_symlink_t callback.
+ *
+ * Alter the properties and/or the target of the symlink at @a relpath
+ * with @a revision as its expected revision. See svn_editor_alter_directory()
+ * for more information about @a revision.
+ *
+ * If @a props is non-NULL, then the properties will be applied.
+ *
+ * If @a target is non-NULL, then the symlink's target will be updated.
*
- * Set/change the link target that a symbolic link at @a relpath points at
- * to @a target.
- * ### TODO @todo What is REVISION for?
+ * The properties and/or the target must be changed. It is an error to
+ * pass NULL for @a props and @a target.
+ *
+ * This function allows @a props to be NULL, but the parameter is
+ * otherwise described by svn_editor_add_file().
*
* For all restrictions on driving the editor, see #svn_editor_t.
- * @since New in 1.7.
+ * @since New in 1.8.
*/
svn_error_t *
-svn_editor_set_target(svn_editor_t *editor,
- const char *relpath,
- svn_revnum_t revision,
- const char *target);
+svn_editor_alter_symlink(svn_editor_t *editor,
+ const char *relpath,
+ svn_revnum_t revision,
+ apr_hash_t *props,
+ const char *target);
/** Drive @a editor's #svn_editor_cb_delete_t callback.
*
@@ -831,7 +1056,7 @@ svn_editor_set_target(svn_editor_t *editor,
* revision @a revision of that path.
*
* For all restrictions on driving the editor, see #svn_editor_t.
- * @since New in 1.7.
+ * @since New in 1.8.
*/
svn_error_t *
svn_editor_delete(svn_editor_t *editor,
@@ -845,8 +1070,13 @@ svn_editor_delete(svn_editor_t *editor,
*
* For a description of @a replaces_rev, see svn_editor_add_file().
*
+ * @note See the general instructions on paths for this API. Since the
+ * @a src_relpath argument must generally be able to reference any node
+ * in the repository, the implication is that the editor's root must be
+ * the repository root.
+ *
* For all restrictions on driving the editor, see #svn_editor_t.
- * @since New in 1.7.
+ * @since New in 1.8.
*/
svn_error_t *
svn_editor_copy(svn_editor_t *editor,
@@ -856,29 +1086,22 @@ svn_editor_copy(svn_editor_t *editor,
svn_revnum_t replaces_rev);
/** Drive @a editor's #svn_editor_cb_move_t callback.
- * Move the node at @a src_relpath, expected to be identical to revision @a
- * src_revision of that path, to @a dst_relpath.
+ *
+ * Move the node at @a src_relpath to @a dst_relpath.
+ *
+ * @a src_revision specifies the revision at which the receiver should
+ * expect to find this node. That is, @a src_relpath at the start of
+ * the whole edit and @a src_relpath at @a src_revision must lie within
+ * the same node-rev (aka history-segment). This is just like the
+ * revisions specified to svn_editor_delete() and svn_editor_rotate().
*
* For a description of @a replaces_rev, see svn_editor_add_file().
*
- * ### stsp: How would I describe a merge of revision range rA-rB,
- * ### within which a file foo.c was delete in rN, re-created in rM,
- * ### and then renamed to bar.c in rX?
- * ### Would the following be valid?
- * ### svn_editor_add_file(ed, "foo.c", props, rN);
- * ### svn_editor_move(ed, "foo.c", rM, "bar.c", rN);
- * ###
- * ### gstein: no, it would be:
- * ### svn_editor_delete(e, "foo.c", rN);
- * ### svn_editor_add_file(e, "foo.c", props, SVN_INVALID_REVNUM);
- * ### svn_editor_move(e, "foo.c", rM, "bar.c", SVN_INVALID_REVNUM);
- * ###
- * ### replaces_rev is to indicate a deletion of the destination node
- * ### that occurs as part of the move. there are no replacements in
- * ### your example.
+ * ### what happens if one side of this move is not "within" the receiver's
+ * ### set of paths?
*
* For all restrictions on driving the editor, see #svn_editor_t.
- * @since New in 1.7.
+ * @since New in 1.8.
*/
svn_error_t *
svn_editor_move(svn_editor_t *editor,
@@ -887,23 +1110,53 @@ svn_editor_move(svn_editor_t *editor,
const char *dst_relpath,
svn_revnum_t replaces_rev);
+/** Drive @a editor's #svn_editor_cb_rotate_t callback.
+ *
+ * Perform a rotation among multiple nodes in the target tree.
+ *
+ * The @a relpaths and @a revisions arrays (pair-wise) specify nodes in the
+ * tree which are located at a path and expected to be at a specific
+ * revision. These nodes are simultaneously moved in a rotation pattern.
+ * For example, the node at index 0 of @a relpaths and @a revisions will
+ * be moved to the relpath specified at index 1 of @a relpaths. The node
+ * at index 1 will be moved to the location at index 2. The node at index
+ * N-1 will be moved to the relpath specified at index 0.
+ *
+ * The simplest form of this operation is to swap nodes A and B. One may
+ * think to move A to a temporary location T, then move B to A, then move
+ * T to B. However, this last move violations the Once Rule by moving T
+ * (which had already by edited by the move from A). In order to keep the
+ * restrictions against multiple moves of a single node, the rotation
+ * operation is needed for certain types of tree edits.
+ *
+ * ### what happens if one of the paths of the rotation is not "within" the
+ * ### receiver's set of paths?
+ *
+ * For all restrictions on driving the editor, see #svn_editor_t.
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_editor_rotate(svn_editor_t *editor,
+ const apr_array_header_t *relpaths,
+ const apr_array_header_t *revisions);
+
/** Drive @a editor's #svn_editor_cb_complete_t callback.
*
- * Send word that the tree delta has been completed successfully.
+ * Send word that the edit has been completed successfully.
*
* For all restrictions on driving the editor, see #svn_editor_t.
- * @since New in 1.7.
+ * @since New in 1.8.
*/
svn_error_t *
svn_editor_complete(svn_editor_t *editor);
/** Drive @a editor's #svn_editor_cb_abort_t callback.
*
- * Notify that the tree delta transmission was not successful.
+ * Notify that the edit transmission was not successful.
* ### TODO @todo Shouldn't we add a reason-for-aborting argument?
*
* For all restrictions on driving the editor, see #svn_editor_t.
- * @since New in 1.7.
+ * @since New in 1.8.
*/
svn_error_t *
svn_editor_abort(svn_editor_t *editor);
@@ -912,6 +1165,28 @@ svn_editor_abort(svn_editor_t *editor);
/** @} */
+/** A temporary API which conditionally inserts a double editor shim
+ * into the chain of delta editors. Used for testing Editor v2.
+ *
+ * Whether or not the shims are inserted is controlled by a compile-time
+ * option in libsvn_delta/compat.c.
+ *
+ * @note The use of these shims and this API will likely cause all kinds
+ * of performance degredation. (Which is actually a moot point since they
+ * don't even work properly yet anyway.)
+ */
+svn_error_t *
+svn_editor__insert_shims(const svn_delta_editor_t **deditor_out,
+ void **dedit_baton_out,
+ const svn_delta_editor_t *deditor_in,
+ void *dedit_baton_in,
+ const char *repos_root,
+ const char *base_dir,
+ svn_delta_shim_callbacks_t *shim_callbacks,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/include/private/svn_eol_private.h b/subversion/include/private/svn_eol_private.h
index c5a4952..d2cce5c 100644
--- a/subversion/include/private/svn_eol_private.h
+++ b/subversion/include/private/svn_eol_private.h
@@ -37,6 +37,20 @@
extern "C" {
#endif /* __cplusplus */
+/* Constants used by various chunky string processing functions.
+ */
+#if APR_SIZEOF_VOIDP == 8
+# define SVN__LOWER_7BITS_SET 0x7f7f7f7f7f7f7f7f
+# define SVN__BIT_7_SET 0x8080808080808080
+# define SVN__R_MASK 0x0a0a0a0a0a0a0a0a
+# define SVN__N_MASK 0x0d0d0d0d0d0d0d0d
+#else
+# define SVN__LOWER_7BITS_SET 0x7f7f7f7f
+# define SVN__BIT_7_SET 0x80808080
+# define SVN__R_MASK 0x0a0a0a0a
+# define SVN__N_MASK 0x0d0d0d0d
+#endif
+
/* Generic EOL character helper routines */
/* Look for the start of an end-of-line sequence (i.e. CR or LF)
diff --git a/subversion/include/private/svn_error_private.h b/subversion/include/private/svn_error_private.h
index 3958382..f8bd2bc 100644
--- a/subversion/include/private/svn_error_private.h
+++ b/subversion/include/private/svn_error_private.h
@@ -39,6 +39,14 @@ extern "C" {
svn_boolean_t
svn_error__is_tracing_link(svn_error_t *err);
+/**
+ * Converts a zlib error to an svn_error_t. zerr is the error code,
+ * function is the function name, message is an optional extra part
+ * of the error message and may be NULL.
+ */
+svn_error_t *
+svn_error__wrap_zlib(int zerr, const char *function, const char *message);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/include/private/svn_fs_private.h b/subversion/include/private/svn_fs_private.h
index f408386..20b70cd 100644
--- a/subversion/include/private/svn_fs_private.h
+++ b/subversion/include/private/svn_fs_private.h
@@ -26,6 +26,7 @@
#define SVN_FS_PRIVATE_H
#include "svn_fs.h"
+#include "private/svn_editor.h"
#ifdef __cplusplus
extern "C" {
@@ -67,6 +68,120 @@ svn_fs__access_get_lock_tokens(svn_fs_access_t *access_ctx);
svn_error_t *
svn_fs__path_valid(const char *path, apr_pool_t *pool);
+
+
+/** Editors
+ *
+ * ### docco
+ *
+ * @defgroup svn_fs_editor Transaction editors
+ * @{
+ */
+
+/**
+ * Create a new filesystem transaction, based on based on the youngest
+ * revision of @a fs, and return its name @a *txn_name and an @a *editor
+ * that can be used to make changes into it.
+ *
+ * @a flags determines transaction enforcement behaviors, and is composed
+ * from the constants SVN_FS_TXN_* (#SVN_FS_TXN_CHECK_OOD etc.). It is a
+ * property of the underlying transaction, and will not change if multiple
+ * editors are used to refer to that transaction (see @a autocommit, below).
+ *
+ * @note If you're building a txn for committing, you probably don't want
+ * to call this directly. Instead, call svn_repos__get_commit_ev2(), which
+ * honors the repository's hook configurations.
+ *
+ * When svn_editor_complete() is called for @a editor, internal resources
+ * will be cleaned and nothing more will happen. If you wish to commit the
+ * transaction, call svn_fs_editor_commit() instead. It is illegal to call
+ * both; the second call will return #SVN_ERR_FS_INCORRECT_EDITOR_COMPLETION.
+ *
+ * @see svn_fs_commit_txn()
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_fs__editor_create(svn_editor_t **editor,
+ const char **txn_name,
+ svn_fs_t *fs,
+ apr_uint32_t flags,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
+/**
+ * Like svn_fs__editor_create(), but open an existing transaction
+ * @a txn_name and continue editing it.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_fs__editor_create_for(svn_editor_t **editor,
+ svn_fs_t *fs,
+ const char *txn_name,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
+/**
+ * Commit the transaction represented by @a editor.
+ *
+ * If the commit to the filesystem succeeds, then @a *revision will be set
+ * to the resulting revision number. Note that further errors may occur,
+ * as described below. If the commit process does not succeed, for whatever
+ * reason, then @a *revision will be set to #SVN_INVALID_REVNUM.
+ *
+ * If a conflict occurs during the commit, then @a *conflict_path will
+ * be set to a path that caused the conflict. #SVN_NO_ERROR will be returned.
+ * Callers may want to construct an #SVN_ERR_FS_CONFLICT error with a
+ * message that incorporates @a *conflict_path.
+ *
+ * If a non-conflict error occurs during the commit, then that error will
+ * be returned.
+ * As is standard with any Subversion API, @a revision, @a post_commit_err,
+ * and @a conflict_path (the OUT parameters) have an indeterminate value if
+ * an error is returned.
+ *
+ * If the commit completes (and a revision is returned in @a *revision), then
+ * it is still possible for an error to occur during the cleanup process.
+ * Any such error will be returned in @a *post_commit_err. The caller must
+ * properly use or clear that error.
+ *
+ * If svn_editor_complete() has already been called on @a editor, then
+ * #SVN_ERR_FS_INCORRECT_EDITOR_COMPLETION will be returned.
+ *
+ * @note After calling this function, @a editor will be marked as completed
+ * and no further operations may be performed on it. The underlying
+ * transaction will either be committed or aborted once this function is
+ * called. It cannot be recovered for additional work.
+ *
+ * @a result_pool will be used to allocate space for @a conflict_path.
+ * @a scratch_pool will be used for all temporary allocations.
+ *
+ * @note To summarize, there are three possible outcomes of this function:
+ * successful commit (with or without an associated @a *post_commit_err);
+ * failed commit due to a conflict (reported via @a *conflict_path); and
+ * failed commit for some other reason (reported via the returned error.)
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_fs__editor_commit(svn_revnum_t *revision,
+ svn_error_t **post_commit_err,
+ const char **conflict_path,
+ svn_editor_t *editor,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
+/** @} */
+
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/include/private/svn_fs_util.h b/subversion/include/private/svn_fs_util.h
index ca3c71b..eb0f024 100644
--- a/subversion/include/private/svn_fs_util.h
+++ b/subversion/include/private/svn_fs_util.h
@@ -30,21 +30,29 @@
#include "svn_types.h"
#include "svn_error.h"
#include "svn_fs.h"
-#include "svn_dirent_uri.h"
-#include "svn_path.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
-/* Return a canonicalized version of a filesystem PATH, allocated in
- POOL. While the filesystem API is pretty flexible about the
- incoming paths (they must be UTF-8 with '/' as separators, but they
- don't have to begin with '/', and multiple contiguous '/'s are
- ignored) we want any paths that are physically stored in the
- underlying database to look consistent. Specifically, absolute
- filesystem paths should begin with '/', and all redundant and trailing '/'
- characters be removed. */
+/* Returns whether PATH is in canonical form as defined by
+ svn_fs__canonicalize_abspath().
+ */
+svn_boolean_t
+svn_fs__is_canonical_abspath(const char *path);
+
+/* Return a canonicalized version of a filesystem PATH, allocated in POOL.
+
+ While the filesystem API is pretty flexible about the incoming paths
+ (they must be UTF-8 with '/' as separators, but they don't have to
+ begin with '/', and multiple contiguous '/'s are ignored) we want any
+ paths that are physically stored in the underlying database to look
+ consistent. Specifically, absolute filesystem paths should begin with
+ '/', and all redundant and trailing '/' characters be removed.
+
+ This is similar to svn_fspath__canonicalize() but doesn't treat "."
+ segments as special.
+*/
const char *
svn_fs__canonicalize_abspath(const char *path, apr_pool_t *pool);
@@ -55,6 +63,13 @@ svn_fs__canonicalize_abspath(const char *path, apr_pool_t *pool);
svn_error_t *
svn_fs__check_fs(svn_fs_t *fs, svn_boolean_t expect_open);
+/* An identifier for FS to be used in the text of error messages.
+ (Not used anywhere but in this header.)
+
+ Note: we log the UUID, rather than (fs)->path, since some of these
+ errors are marshalled to the client. */
+#define svn_fs__identifier(fs) ((fs)->uuid)
+
/* Constructing nice error messages for roots. */
/* Build an SVN_ERR_FS_NOT_FOUND error, with a detailed error text,
@@ -75,17 +90,17 @@ svn_fs__check_fs(svn_fs_t *fs, svn_boolean_t expect_open);
/* Build a detailed `file already exists' message for PATH in ROOT.
ROOT is of type svn_fs_root_t *. */
-#define SVN_FS__ALREADY_EXISTS(root, path_str, pool) ( \
+#define SVN_FS__ALREADY_EXISTS(root, path_str) ( \
root->is_txn_root ? \
svn_error_createf \
(SVN_ERR_FS_ALREADY_EXISTS, 0, \
_("File already exists: filesystem '%s', transaction '%s', path '%s'"), \
- svn_dirent_local_style(root->fs->path, pool), root->txn, path_str) \
+ svn_fs__identifier(root->fs), root->txn, path_str) \
: \
svn_error_createf \
(SVN_ERR_FS_ALREADY_EXISTS, 0, \
_("File already exists: filesystem '%s', revision %ld, path '%s'"), \
- svn_dirent_local_style(root->fs->path, pool), root->rev, path_str) \
+ svn_fs__identifier(root->fs), root->rev, path_str) \
)
/* ROOT is of type svn_fs_root_t *. */
@@ -96,64 +111,64 @@ svn_fs__check_fs(svn_fs_t *fs, svn_boolean_t expect_open);
/* SVN_FS__ERR_NOT_MUTABLE: the caller attempted to change a node
outside of a transaction. FS is of type "svn_fs_t *". */
-#define SVN_FS__ERR_NOT_MUTABLE(fs, rev, path_in_repo, scratch_pool) \
+#define SVN_FS__ERR_NOT_MUTABLE(fs, rev, path_in_repo) \
svn_error_createf( \
SVN_ERR_FS_NOT_MUTABLE, 0, \
_("File is not mutable: filesystem '%s', revision %ld, path '%s'"), \
- svn_dirent_local_style(fs->path, scratch_pool), rev, path_in_repo)
+ svn_fs__identifier(fs), rev, path_in_repo)
-/* FS is of type "svn fs_t *".*/
-#define SVN_FS__ERR_NOT_DIRECTORY(fs, path_in_repo, scratch_pool) \
+/* FS is of type "svn_fs_t *".*/
+#define SVN_FS__ERR_NOT_DIRECTORY(fs, path_in_repo) \
svn_error_createf( \
SVN_ERR_FS_NOT_DIRECTORY, 0, \
_("'%s' is not a directory in filesystem '%s'"), \
- path_in_repo, svn_dirent_local_style(fs->path, scratch_pool))
+ path_in_repo, svn_fs__identifier(fs))
-/* FS is of type "svn fs_t *". */
-#define SVN_FS__ERR_NOT_FILE(fs, path_in_repo, scratch_pool) \
+/* FS is of type "svn_fs_t *". */
+#define SVN_FS__ERR_NOT_FILE(fs, path_in_repo) \
svn_error_createf( \
SVN_ERR_FS_NOT_FILE, 0, \
_("'%s' is not a file in filesystem '%s'"), \
- path_in_repo, svn_dirent_local_style(fs->path, scratch_pool))
+ path_in_repo, svn_fs__identifier(fs))
-/* FS is of type "svn fs_t *", LOCK is of type "svn_lock_t *". */
-#define SVN_FS__ERR_PATH_ALREADY_LOCKED(fs, lock, scratch_pool) \
+/* FS is of type "svn_fs_t *", LOCK is of type "svn_lock_t *". */
+#define SVN_FS__ERR_PATH_ALREADY_LOCKED(fs, lock) \
svn_error_createf( \
SVN_ERR_FS_PATH_ALREADY_LOCKED, 0, \
_("Path '%s' is already locked by user '%s' in filesystem '%s'"), \
- lock->path, lock->owner, svn_dirent_local_style(fs->path, scratch_pool))
+ (lock)->path, (lock)->owner, svn_fs__identifier(fs))
-/* FS is of type "svn fs_t *". */
-#define SVN_FS__ERR_NO_SUCH_LOCK(fs, path_in_repo, scratch_pool) \
+/* FS is of type "svn_fs_t *". */
+#define SVN_FS__ERR_NO_SUCH_LOCK(fs, path_in_repo) \
svn_error_createf( \
SVN_ERR_FS_NO_SUCH_LOCK, 0, \
_("No lock on path '%s' in filesystem '%s'"), \
- path_in_repo, svn_dirent_local_style(fs->path, scratch_pool))
+ path_in_repo, svn_fs__identifier(fs))
-/* FS is of type "svn fs_t *". */
-#define SVN_FS__ERR_LOCK_EXPIRED(fs, token, scratch_pool) \
+/* FS is of type "svn_fs_t *". */
+#define SVN_FS__ERR_LOCK_EXPIRED(fs, token) \
svn_error_createf( \
SVN_ERR_FS_LOCK_EXPIRED, 0, \
_("Lock has expired: lock-token '%s' in filesystem '%s'"), \
- token, svn_dirent_local_style(fs->path, scratch_pool))
+ token, svn_fs__identifier(fs))
-/* FS is of type "svn fs_t *". */
-#define SVN_FS__ERR_NO_USER(fs, scratch_pool) \
+/* FS is of type "svn_fs_t *". */
+#define SVN_FS__ERR_NO_USER(fs) \
svn_error_createf( \
SVN_ERR_FS_NO_USER, 0, \
_("No username is currently associated with filesystem '%s'"), \
- svn_dirent_local_style(fs->path, scratch_pool))
+ svn_fs__identifier(fs))
/* SVN_FS__ERR_LOCK_OWNER_MISMATCH: trying to use a lock whose
LOCK_OWNER doesn't match the USERNAME associated with FS.
- FS is of type "svn fs_t *". */
-#define SVN_FS__ERR_LOCK_OWNER_MISMATCH(fs, username, lock_owner, pool) \
+ FS is of type "svn_fs_t *". */
+#define SVN_FS__ERR_LOCK_OWNER_MISMATCH(fs, username, lock_owner) \
svn_error_createf( \
SVN_ERR_FS_LOCK_OWNER_MISMATCH, 0, \
_("User '%s' is trying to use a lock owned by '%s' in " \
"filesystem '%s'"), \
- username, lock_owner, svn_dirent_local_style(fs->path, pool))
+ username, lock_owner, svn_fs__identifier(fs))
/* Return a NULL-terminated copy of the first component of PATH,
allocated in POOL. If path is empty, or consists entirely of
diff --git a/subversion/include/private/svn_fspath.h b/subversion/include/private/svn_fspath.h
index 7dbabf0..01679b9 100644
--- a/subversion/include/private/svn_fspath.h
+++ b/subversion/include/private/svn_fspath.h
@@ -55,6 +55,9 @@ svn_fspath__is_canonical(const char *fspath);
* The returned fspath may be statically allocated or allocated from
* @a pool.
*
+ * This is similar to svn_fs__canonicalize_abspath() but also treats "."
+ * segments as special.
+ *
* @since New in 1.7.
*/
const char *
@@ -123,23 +126,6 @@ svn_boolean_t
svn_fspath__is_root(const char *fspath,
apr_size_t len);
-/** Test if @a child_fspath is a child of @a parent_fspath. If not, return
- * NULL. If so, return the relpath which, if joined to @a parent_fspath,
- * would yield @a child_fspath.
- *
- * If @a child_fspath is the same as @a parent_fspath, it is not considered
- * a child, so the result is NULL; an empty string is never returned.
- *
- * If @a pool is NULL, a pointer into @a child_fspath will be returned to
- * identify the remainder fspath.
- *
- * @since New in 1.7.
- */
-const char *
-svn_fspath__is_child(const char *parent_fspath,
- const char *child_fspath,
- apr_pool_t *pool);
-
/** Return the relative path part of @a child_fspath that is below
* @a parent_fspath, or just "" if @a parent_fspath is equal to
* @a child_fspath. If @a child_fspath is not below @a parent_fspath
@@ -151,15 +137,6 @@ const char *
svn_fspath__skip_ancestor(const char *parent_fspath,
const char *child_fspath);
-/** Return TRUE if @a parent_fspath is an ancestor of @a child_fspath or
- * the fspaths are equal, and FALSE otherwise.
- *
- * @since New in 1.7.
- */
-svn_boolean_t
-svn_fspath__is_ancestor(const char *parent_fspath,
- const char *child_fspath);
-
/** Return the longest common path shared by two fspaths, @a fspath1 and
* @a fspath2. If there's no common ancestor, return "/".
*
@@ -179,9 +156,7 @@ svn_fspath__get_longest_ancestor(const char *fspath1,
#define svn_urlpath__basename svn_fspath__basename
#define svn_urlpath__dirname svn_fspath__dirname
#define svn_urlpath__get_longest_ancestor svn_fspath__get_longest_ancestor
-#define svn_urlpath__is_ancestor svn_fspath__is_ancestor
#define svn_urlpath__is_canonical svn_fspath__is_canonical
-#define svn_urlpath__is_child svn_fspath__is_child
#define svn_urlpath__is_root svn_fspath__is_root
#define svn_urlpath__join svn_fspath__join
#define svn_urlpath__skip_ancestor svn_fspath__skip_ancestor
diff --git a/subversion/include/private/svn_io_private.h b/subversion/include/private/svn_io_private.h
index d85d089..239cd6e 100644
--- a/subversion/include/private/svn_io_private.h
+++ b/subversion/include/private/svn_io_private.h
@@ -81,13 +81,20 @@ svn_stream__set_is_buffered(svn_stream_t *stream,
/** Return whether this generic @a stream uses internal buffering.
* This may be used to work around subtle differences between buffered
- * an non-buffered APR files.
+ * an non-buffered APR files. A lazy-open stream cannot report the
+ * true buffering state until after the lazy open: a stream that
+ * initially reports as non-buffered may report as buffered later.
*
* @since New in 1.7.
*/
svn_boolean_t
svn_stream__is_buffered(svn_stream_t *stream);
+/** Return the underlying file, if any, associated with the stream, or
+ * NULL if not available. Accessing the file bypasses the stream.
+ */
+apr_file_t *
+svn_stream__aprfile(svn_stream_t *stream);
#ifdef __cplusplus
}
diff --git a/subversion/include/private/svn_log.h b/subversion/include/private/svn_log.h
index 922feec..bdcf32f 100644
--- a/subversion/include/private/svn_log.h
+++ b/subversion/include/private/svn_log.h
@@ -244,6 +244,15 @@ svn_log__unlock_one_path(const char *path, svn_boolean_t break_lock,
const char *
svn_log__replay(const char *path, svn_revnum_t rev, apr_pool_t *pool);
+/**
+ * Return a log string for a get-inherited-props action.
+ *
+ * @since New in 1.8.
+ */
+const char *
+svn_log__get_inherited_props(const char *path,
+ svn_revnum_t rev,
+ apr_pool_t *pool);
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/include/private/svn_mergeinfo_private.h b/subversion/include/private/svn_mergeinfo_private.h
index 78ef13f..b8748f4 100644
--- a/subversion/include/private/svn_mergeinfo_private.h
+++ b/subversion/include/private/svn_mergeinfo_private.h
@@ -41,9 +41,51 @@ extern "C" {
/* Set inheritability of all ranges in RANGELIST to INHERITABLE.
If RANGELIST is NULL do nothing. */
void
-svn_rangelist__set_inheritance(apr_array_header_t *rangelist,
+svn_rangelist__set_inheritance(svn_rangelist_t *rangelist,
svn_boolean_t inheritable);
+/* Parse a rangelist from the string STR. Set *RANGELIST to the result,
+ * allocated in RESULT_POOL. Return an error if the rangelist is not
+ * well-formed (for example, if it contains invalid characters or if
+ * R1 >= R2 in a "R1-R2" range element).
+ *
+ * Unlike svn_mergeinfo_parse(), this does not sort the ranges into order
+ * or combine adjacent and overlapping ranges.
+ *
+ * The compaction can be done with svn_rangelist__combine_adjacent_ranges().
+ */
+svn_error_t *
+svn_rangelist__parse(svn_rangelist_t **rangelist,
+ const char *str,
+ apr_pool_t *result_pool);
+
+/* In-place combines adjacent ranges in a rangelist.
+ SCRATCH_POOL is just used for providing error messages. */
+svn_error_t *
+svn_rangelist__combine_adjacent_ranges(svn_rangelist_t *rangelist,
+ apr_pool_t *scratch_pool);
+
+/** Canonicalize the @a rangelist: sort the ranges, and combine adjacent or
+ * overlapping ranges into single ranges where possible.
+ *
+ * If overlapping ranges have different inheritability, return an error.
+ *
+ * Modify @a rangelist in place. Use @a scratch_pool for temporary
+ * allocations.
+ */
+svn_error_t *
+svn_rangelist__canonicalize(svn_rangelist_t *rangelist,
+ apr_pool_t *scratch_pool);
+
+/** Canonicalize the revision range lists in the @a mergeinfo.
+ *
+ * Modify @a mergeinfo in place. Use @a scratch_pool for temporary
+ * allocations.
+ */
+svn_error_t *
+svn_mergeinfo__canonicalize_ranges(svn_mergeinfo_t mergeinfo,
+ apr_pool_t *scratch_pool);
+
/* Set inheritability of all rangelists in MERGEINFO to INHERITABLE.
If MERGEINFO is NULL do nothing. If a rangelist in MERGEINFO is
NULL leave it alone. */
@@ -87,9 +129,10 @@ svn_mergeinfo__remove_empty_rangelists(svn_mergeinfo_t mergeinfo,
/* Make a shallow (ie, mergeinfos are not duped, or altered at all;
keys share storage) copy of IN_CATALOG in *OUT_CATALOG, removing
- PREFIX_PATH (which is an absolute path) from the beginning of each
- key in the catalog (each of which is also an absolute path). It is
- illegal for any key to not start with PREFIX_PATH. The new hash
+ PREFIX_PATH from the beginning of each key in the catalog.
+ PREFIX_PATH and the keys of IN_CATALOG are absolute 'fspaths',
+ starting with '/'. It is illegal for any key to not start with
+ PREFIX_PATH. The keys of *OUT_CATALOG are relpaths. The new hash
and temporary values are allocated in POOL. (This is useful for
making the return value from svn_ra_get_mergeinfo relative to the
session root, say.) */
@@ -112,11 +155,11 @@ svn_mergeinfo__add_prefix_to_catalog(svn_mergeinfo_catalog_t *out_catalog,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
-/* Set *OUT_MERGEINFO to a deep copy of MERGEINFO with the relpath
+/* Set *OUT_MERGEINFO to a shallow copy of MERGEINFO with the relpath
SUFFIX_RELPATH added to the end of each key path.
- Allocate *OUT_MERGEINFO in RESULT_POOL. Use SCRATCH_POOL for any
- temporary allocations. */
+ Allocate *OUT_MERGEINFO and the new keys in RESULT_POOL. Use
+ SCRATCH_POOL for any temporary allocations. */
svn_error_t *
svn_mergeinfo__add_suffix_to_mergeinfo(svn_mergeinfo_t *out_mergeinfo,
svn_mergeinfo_t mergeinfo,
@@ -143,22 +186,9 @@ svn_mergeinfo__catalog_to_formatted_string(svn_string_t **output,
const char *val_prefix,
apr_pool_t *pool);
-/* Create a string representation of MERGEINFO in *OUTPUT, allocated in POOL.
- Unlike svn_mergeinfo_to_string(), NULL MERGEINFO is tolerated and results
- in *OUTPUT set to "\n". If SVN_DEBUG is true, then NULL or empty MERGEINFO
- causes *OUTPUT to be set to an appropriate newline terminated string. If
- PREFIX is not NULL then prepend PREFIX to each line in *OUTPUT.
-
- Any relative merge source paths in MERGEINFO are converted to absolute
- paths in *OUTPUT.*/
-svn_error_t *
-svn_mergeinfo__to_formatted_string(svn_string_t **output,
- svn_mergeinfo_t mergeinfo,
- const char *prefix,
- apr_pool_t *pool);
-
/* Set *YOUNGEST_REV and *OLDEST_REV to the youngest and oldest revisions
- found in the rangelists within MERGEINFO. If MERGEINFO is NULL or empty
+ found in the rangelists within MERGEINFO. Note that *OLDEST_REV is
+ exclusive and *YOUNGEST_REV is inclusive. If MERGEINFO is NULL or empty
set *YOUNGEST_REV and *OLDEST_REV to SVN_INVALID_REVNUM. */
svn_error_t *
svn_mergeinfo__get_range_endpoints(svn_revnum_t *youngest_rev,
@@ -167,9 +197,9 @@ svn_mergeinfo__get_range_endpoints(svn_revnum_t *youngest_rev,
apr_pool_t *pool);
/* Set *FILTERED_MERGEINFO to a deep copy of MERGEINFO, allocated in
- RESULT_POOL, less any rangelists that fall outside of the range
- OLDEST_REV:YOUNGEST_REV (inclusive) if INCLUDE_RANGE is true, or less
- any rangelists within the range OLDEST_REV:YOUNGEST_REV if INCLUDE_RANGE
+ RESULT_POOL, less any revision ranges that fall outside of the range
+ OLDEST_REV:YOUNGEST_REV (exclusive:inclusive) if INCLUDE_RANGE is true,
+ or less any ranges within OLDEST_REV:YOUNGEST_REV if INCLUDE_RANGE
is false. If all the rangelists mapped to a given path are filtered
then filter that path as well. If all paths are filtered or MERGEINFO is
empty or NULL then *FILTERED_MERGEINFO is set to an empty hash.
@@ -208,19 +238,10 @@ svn_boolean_t
svn_mergeinfo__is_noninheritable(svn_mergeinfo_t mergeinfo,
apr_pool_t *scratch_pool);
-/* If MERGEINFO_STR is a string representation of non-inheritable mergeinfo
- set *IS_NONINHERITABLE to TRUE, set it to FALSE otherwise. MERGEINFO_STR
- may be NULL or empty. If MERGEINFO_STR cannot be parsed return
- SVN_ERR_MERGEINFO_PARSE_ERROR. */
-svn_error_t *
-svn_mergeinfo__string_has_noninheritable(svn_boolean_t *is_noninheritable,
- const char *mergeinfo_str,
- apr_pool_t *scratch_pool);
-
/* Return a rangelist with one svn_merge_range_t * element defined by START,
END, and INHERITABLE. The rangelist and its contents are allocated in
RESULT_POOL. */
-apr_array_header_t *
+svn_rangelist_t *
svn_rangelist__initialize(svn_revnum_t start,
svn_revnum_t end,
svn_boolean_t inheritable,
@@ -252,6 +273,17 @@ svn_mergeinfo__mergeinfo_from_segments(svn_mergeinfo_t *mergeinfo_p,
const apr_array_header_t *segments,
apr_pool_t *pool);
+/* Merge every rangelist in MERGEINFO into the given MERGED_RANGELIST,
+ * ignoring the source paths of MERGEINFO. MERGED_RANGELIST may
+ * initially be empty. New elements added to RANGELIST are allocated in
+ * RESULT_POOL. See svn_rangelist_merge2() for details of inheritability
+ * etc. */
+svn_error_t *
+svn_rangelist__merge_many(svn_rangelist_t *merged_rangelist,
+ svn_mergeinfo_t mergeinfo,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/include/private/svn_mutex.h b/subversion/include/private/svn_mutex.h
new file mode 100644
index 0000000..c647697
--- /dev/null
+++ b/subversion/include/private/svn_mutex.h
@@ -0,0 +1,117 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ *
+ * @file svn_mutex.h
+ * @brief Structures and functions for mutual exclusion
+ */
+
+#ifndef SVN_MUTEX_H
+#define SVN_MUTEX_H
+
+#include <apr_thread_mutex.h>
+
+#include "svn_error.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * This is a simple wrapper around @c apr_thread_mutex_t and will be a
+ * valid identifier even if APR does not support threading.
+ */
+#if APR_HAS_THREADS
+
+/** A mutex for synchronization between threads. It may be NULL, in
+ * which case no synchronization will take place. The latter is useful
+ * when implementing some functionality with optional synchronization.
+ */
+typedef apr_thread_mutex_t svn_mutex__t;
+
+#else
+
+/** Dummy definition. The content will never be actually accessed.
+ */
+typedef void svn_mutex__t;
+
+#endif
+
+/** Initialize the @a *mutex. If @a mutex_required is TRUE, the mutex will
+ * actually be created with a lifetime defined by @a result_pool. Otherwise,
+ * the pointer will be set to @c NULL and svn_mutex__lock() as well as
+ * svn_mutex__unlock() will be no-ops.
+ *
+ * If threading is not supported by APR, this function is a no-op.
+ */
+svn_error_t *
+svn_mutex__init(svn_mutex__t **mutex,
+ svn_boolean_t mutex_required,
+ apr_pool_t *result_pool);
+
+/** Acquire the @a mutex, if that has been enabled in svn_mutex__init().
+ * Make sure to call svn_mutex__unlock() some time later in the same
+ * thread to release the mutex again. Recursive locking are not supported.
+ *
+ * @note You should use #SVN_MUTEX__WITH_LOCK instead of explicit lock
+ * acquisition and release.
+ */
+svn_error_t *
+svn_mutex__lock(svn_mutex__t *mutex);
+
+/** Release the @a mutex, previously acquired using svn_mutex__lock()
+ * that has been enabled in svn_mutex__init().
+ *
+ * Since this is often used as part of the calling function's exit
+ * sequence, we accept that function's current return code in @a err.
+ * If it is not #SVN_NO_ERROR, it will be used as the return value -
+ * irrespective of the possible internal failures during unlock. If @a err
+ * is #SVN_NO_ERROR, internal failures of this function will be
+ * reported in the return value.
+ *
+ * @note You should use #SVN_MUTEX__WITH_LOCK instead of explicit lock
+ * acquisition and release.
+ */
+svn_error_t *
+svn_mutex__unlock(svn_mutex__t *mutex,
+ svn_error_t *err);
+
+/** Acquires the @a mutex, executes the expression @a expr and finally
+ * releases the @a mutex. If any of these steps fail, the function using
+ * this macro will return an #svn_error_t. This macro guarantees that
+ * the @a mutex will always be unlocked again if it got locked successfully
+ * by the first step.
+ *
+ * @note Prefer using this macro instead of explicit lock acquisition and
+ * release.
+ */
+#define SVN_MUTEX__WITH_LOCK(mutex, expr) \
+do { \
+ svn_mutex__t *svn_mutex__m = (mutex); \
+ SVN_ERR(svn_mutex__lock(svn_mutex__m)); \
+ SVN_ERR(svn_mutex__unlock(svn_mutex__m, (expr))); \
+} while (0)
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* SVN_MUTEX_H */
diff --git a/subversion/include/private/svn_named_atomic.h b/subversion/include/private/svn_named_atomic.h
new file mode 100644
index 0000000..4efa255
--- /dev/null
+++ b/subversion/include/private/svn_named_atomic.h
@@ -0,0 +1,162 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ *
+ * @file svn_named_atomics.h
+ * @brief Structures and functions for machine-wide named atomics.
+ * These atomics store 64 bit signed integer values and provide
+ * a number of basic operations on them. Instead of an address,
+ * these atomics are identified by strings / names. We also support
+ * namespaces - mainly to separate debug from production data.
+ */
+
+#ifndef SVN_NAMED_ATOMICS_H
+#define SVN_NAMED_ATOMICS_H
+
+#include "svn_error.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/** An opaque structure that represents a namespace, i.e. a container
+ * for named atomics.
+ */
+typedef struct svn_atomic_namespace__t svn_atomic_namespace__t;
+
+/** An opaque structure that represents a named, system-wide visible
+ * 64 bit integer with atomic access routines.
+ */
+typedef struct svn_named_atomic__t svn_named_atomic__t;
+
+/** Maximum length of the name of any atomic (excluding the terminal NUL).
+ */
+#define SVN_NAMED_ATOMIC__MAX_NAME_LENGTH 30
+
+/** Returns #FALSE when named atomics are not available to our process
+ * and svn_atomic_namespace__create is likely to fail.
+ *
+ * @note The actual check will be performed only once and later
+ * changes in process privileges will not reflect in the outcome of future
+ * calls to this function.
+ */
+svn_boolean_t
+svn_named_atomic__is_supported(void);
+
+/** Returns #TRUE on platforms that don't need expensive synchronization
+ * objects to serialize access to named atomics. If this returns #FALSE,
+ * reading from or modifying a #svn_named_atomic__t may be as expensive
+ * as a file system operation.
+ */
+svn_boolean_t
+svn_named_atomic__is_efficient(void);
+
+/** Create a namespace (i.e. access object) with the given @a name and
+ * return it in @a *ns.
+ *
+ * Multiple access objects with the same name may be created. They access
+ * the same shared memory region but have independent lifetimes.
+ *
+ * The access object will be allocated in @a result_pool and atomics gotten
+ * from this object will become invalid when the pool is being cleared.
+ */
+svn_error_t *
+svn_atomic_namespace__create(svn_atomic_namespace__t **ns,
+ const char *name,
+ apr_pool_t *result_pool);
+
+/** Removes persistent data structures (files in particular) that got
+ * created for the namespace given by @a name. Use @a pool for temporary
+ * allocations.
+ *
+ * @note You must not call this while the respective namespace is still
+ * in use. Calling this multiple times for the same namespace is safe.
+ */
+svn_error_t *
+svn_atomic_namespace__cleanup(const char *name,
+ apr_pool_t *pool);
+
+/** Find the atomic with the specified @a name in namespace @a ns and
+ * return it in @a *atomic. If no object with that name can be found, the
+ * behavior depends on @a auto_create. If it is @c FALSE, @a *atomic will
+ * be set to @c NULL. Otherwise, a new atomic will be created, its value
+ * set to 0 and the access structure be returned in @a *atomic.
+ *
+ * Note that @a name must not exceed #SVN_NAMED_ATOMIC__MAX_NAME_LENGTH
+ * characters and an error will be returned if the specified name is longer
+ * than supported.
+ *
+ * @note The lifetime of the atomic object is bound to the lifetime
+ * of the @a ns object, i.e. the pool the latter was created in.
+ * The data in the namespace persists as long as at least one process
+ * holds an #svn_atomic_namespace__t object corresponding to it.
+ */
+svn_error_t *
+svn_named_atomic__get(svn_named_atomic__t **atomic,
+ svn_atomic_namespace__t *ns,
+ const char *name,
+ svn_boolean_t auto_create);
+
+/** Read the @a atomic and return its current @a *value.
+ * An error will be returned if @a atomic is @c NULL.
+ */
+svn_error_t *
+svn_named_atomic__read(apr_int64_t *value,
+ svn_named_atomic__t *atomic);
+
+/** Set the data in @a atomic to @a new_value and return its old content
+ * in @a *old_value. @a old_value may be NULL.
+ *
+ * An error will be returned if @a atomic is @c NULL.
+ */
+svn_error_t *
+svn_named_atomic__write(apr_int64_t *old_value,
+ apr_int64_t new_value,
+ svn_named_atomic__t *atomic);
+
+/** Add @a delta to the data in @a atomic and return its new value in
+ * @a *new_value. @a new_value may be null.
+ *
+ * An error will be returned if @a atomic is @c NULL.
+ */
+svn_error_t *
+svn_named_atomic__add(apr_int64_t *new_value,
+ apr_int64_t delta,
+ svn_named_atomic__t *atomic);
+
+/** If the current data in @a atomic equals @a comperand, set it to
+ * @a new_value. Return the initial value in @a *old_value.
+ * @a old_value may be NULL.
+ *
+ * An error will be returned if @a atomic is @c NULL.
+ */
+svn_error_t *
+svn_named_atomic__cmpxchg(apr_int64_t *old_value,
+ apr_int64_t new_value,
+ apr_int64_t comperand,
+ svn_named_atomic__t *atomic);
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* SVN_NAMED_ATOMICS_H */
diff --git a/subversion/include/private/svn_opt_private.h b/subversion/include/private/svn_opt_private.h
index 057de26..6ae67a5 100644
--- a/subversion/include/private/svn_opt_private.h
+++ b/subversion/include/private/svn_opt_private.h
@@ -129,6 +129,26 @@ const char *
svn_opt__revision_to_string(const svn_opt_revision_t *revision,
apr_pool_t *result_pool);
+/**
+ * Create a revision range structure from two revisions. Return a new range
+ * allocated in @a result_pool with the start and end initialized to
+ * (deep copies of) @a *start_revision and @a *end_revision.
+ */
+svn_opt_revision_range_t *
+svn_opt__revision_range_create(const svn_opt_revision_t *start_revision,
+ const svn_opt_revision_t *end_revision,
+ apr_pool_t *result_pool);
+
+/**
+ * Create a revision range structure from two revnums. Return a new range
+ * allocated in @a result_pool with the start and end kinds initialized to
+ * #svn_opt_revision_number and values @a start_revnum and @a end_revnum.
+ */
+svn_opt_revision_range_t *
+svn_opt__revision_range_from_revnums(svn_revnum_t start_revnum,
+ svn_revnum_t end_revnum,
+ apr_pool_t *result_pool);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/include/private/svn_pseudo_md5.h b/subversion/include/private/svn_pseudo_md5.h
new file mode 100644
index 0000000..34d5929
--- /dev/null
+++ b/subversion/include/private/svn_pseudo_md5.h
@@ -0,0 +1,83 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ *
+ * @file svn_pseudo_md5.h
+ * @brief Subversion hash sum calculation for runtime data (only)
+ */
+
+#ifndef SVN_PSEUDO_MD5_H
+#define SVN_PSEUDO_MD5_H
+
+#include <apr.h> /* for apr_uint32_t */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/**
+ * Calculates a hash sum for 15 bytes in @a x and returns it in @a digest.
+ * The most significant byte in @a x must be 0 (independent of being on a
+ * little or big endian machine).
+ *
+ * @note Use for runtime data hashing only.
+ *
+ * @note The output is NOT an MD5 digest shares has the same basic
+ * cryptographic properties. Collisions with proper MD5 on the same
+ * or other input data is equally unlikely as any MD5 collision.
+ */
+void svn__pseudo_md5_15(apr_uint32_t digest[4],
+ const apr_uint32_t x[4]);
+
+/**
+ * Calculates a hash sum for 31 bytes in @a x and returns it in @a digest.
+ * The most significant byte in @a x must be 0 (independent of being on a
+ * little or big endian machine).
+ *
+ * @note Use for runtime data hashing only.
+ *
+ * @note The output is NOT an MD5 digest shares has the same basic
+ * cryptographic properties. Collisions with proper MD5 on the same
+ * or other input data is equally unlikely as any MD5 collision.
+ */
+void svn__pseudo_md5_31(apr_uint32_t digest[4],
+ const apr_uint32_t x[8]);
+
+/**
+ * Calculates a hash sum for 63 bytes in @a x and returns it in @a digest.
+ * The most significant byte in @a x must be 0 (independent of being on a
+ * little or big endian machine).
+ *
+ * @note Use for runtime data hashing only.
+ *
+ * @note The output is NOT an MD5 digest shares has the same basic
+ * cryptographic properties. Collisions with proper MD5 on the same
+ * or other input data is equally unlikely as any MD5 collision.
+ */
+void svn__pseudo_md5_63(apr_uint32_t digest[4],
+ const apr_uint32_t x[16]);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* SVN_PSEUDO_MD5_H */
diff --git a/subversion/include/private/svn_ra_private.h b/subversion/include/private/svn_ra_private.h
index f059095..accca3d 100644
--- a/subversion/include/private/svn_ra_private.h
+++ b/subversion/include/private/svn_ra_private.h
@@ -31,20 +31,31 @@
#include "svn_error.h"
#include "svn_ra.h"
+#include "svn_delta.h"
+#include "svn_editor.h"
+#include "svn_io.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
-/* Return an error with code SVN_ERR_UNSUPPORTED_FEATURE, and an error
- message referencing PATH_OR_URL, if the "server" pointed to by
- RA_SESSION doesn't support Merge Tracking (e.g. is pre-1.5).
- Perform temporary allocations in POOL. */
+/* Equivalent to svn_ra__assert_capable_server()
+ for SVN_RA_CAPABILITY_MERGEINFO. */
svn_error_t *
svn_ra__assert_mergeinfo_capable_server(svn_ra_session_t *ra_session,
const char *path_or_url,
apr_pool_t *pool);
+/* Return an error with code SVN_ERR_UNSUPPORTED_FEATURE, and an error
+ message referencing PATH_OR_URL, if the "server" pointed to by
+ RA_SESSION doesn't support CAPABILITY (an SVN_RA_CAPABILITY_* constant).
+ Perform temporary allocations in POOL. */
+svn_error_t *
+svn_ra__assert_capable_server(svn_ra_session_t *ra_session,
+ const char *capability,
+ const char *path_or_url,
+ apr_pool_t *pool);
+
/*** Operational Locks ***/
@@ -116,6 +127,160 @@ svn_ra__release_operational_lock(svn_ra_session_t *session,
const svn_string_t *mylocktoken,
apr_pool_t *scratch_pool);
+/** Register CALLBACKS to be used with the Ev2 shims in RA_SESSION. */
+svn_error_t *
+svn_ra__register_editor_shim_callbacks(svn_ra_session_t *ra_session,
+ svn_delta_shim_callbacks_t *callbacks);
+
+
+/* Using information from BATON, provide the (file's) pristine contents
+ for REPOS_RELPATH. They are returned in *CONTENTS, and correspond to
+ *REVISION.
+
+ If a pristine is not available (ie. a locally-added node), then set
+ *CONTENTS to NULL; *REVISION will not be examined in this case.
+
+ These are allocated in RESULT_POOL. SCRATCH_POOL can be used
+ for temporary allocations. */
+typedef svn_error_t *(*svn_ra__provide_base_cb_t)(
+ svn_stream_t **contents,
+ svn_revnum_t *revision,
+ void *baton,
+ const char *repos_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Using information from BATON, provide the pristine properties for
+ REPOS_RELPATH. They are returned in *PROPS, and correspond to *REVISION.
+
+ If properties are not available (ie. a locally-added node), then set
+ *PROPS to NULL; *REVISION will not be examined in this case.
+
+ The properties are allocated in RESULT_POOL. SCRATCH_POOL can be used
+ for temporary allocations. */
+typedef svn_error_t *(*svn_ra__provide_props_cb_t)(
+ apr_hash_t **props,
+ svn_revnum_t *revision,
+ void *baton,
+ const char *repos_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Using information from BATON, fetch the kind of REPOS_RELPATH at revision
+ SRC_REVISION, returning it in *KIND.
+
+ If the kind cannot be determined, then set *KIND to svn_node_unknown.
+
+ Temporary allocations can be made in SCRATCH_POOL. */
+typedef svn_error_t *(*svn_ra__get_copysrc_kind_cb_t)(
+ svn_node_kind_t *kind,
+ void *baton,
+ const char *repos_relpath,
+ svn_revnum_t src_revision,
+ apr_pool_t *scratch_pool);
+
+
+/* Return an Ev2-based editor for performing commits.
+
+ The editor is associated with the given SESSION, and its implied target
+ repository.
+
+ REVPROPS contains all the revision properties that should be stored onto
+ the newly-committed revision. SVN_PROP_REVISION_AUTHOR will be set to
+ the username as determined by the session; overwriting any prior value
+ that may be present in REVPROPS.
+
+ COMMIT_CB/BATON contain the callback to receive post-commit information.
+
+ LOCK_TOKENS should contain all lock tokens necessary to modify paths
+ within the commit. If KEEP_LOCKS is FALSE, then the paths associated
+ with these tokens will be unlocked.
+ ### today, LOCK_TOKENS is session_relpath:token_value. in the future,
+ ### it should be repos_relpath:token_value.
+
+ PROVIDE_BASE_CB is a callback to fetch pristine contents, used to send
+ an svndiff over the wire to the server. This may be NULL, indicating
+ pristine contents are not available (eg. URL-based operations or import).
+
+ PROVIDE_PROPS_CB is a callback to fetch pristine properties, used to
+ send property deltas over the wire to the server. This may be NULL,
+ indicating pristine properties are not available (eg. URL-based operations
+ or an import).
+
+ GET_COPYSRC_KIND_CB is a callback to determine the kind of a copy-source.
+ This is necessary when an Ev2/Ev1 shim is required by the RA provider,
+ in order to determine whether to use delta->add_directory() or the
+ delta->add_file() vtable entry to perform the copy.
+ ### unclear on impact if this is NULL.
+ ### this callback will disappear when "everything" is running Ev2
+
+ CB_BATON is the baton used/shared by the above three callbacks.
+
+ Cancellation is handled through the callbacks provided when SESSION
+ is initially opened.
+
+ *EDITOR will be allocated in RESULT_POOL, and all temporary allocations
+ will be performed in SCRATCH_POOL.
+*/
+svn_error_t *
+svn_ra__get_commit_ev2(svn_editor_t **editor,
+ svn_ra_session_t *session,
+ apr_hash_t *revprops,
+ svn_commit_callback2_t commit_cb,
+ void *commit_baton,
+ apr_hash_t *lock_tokens,
+ svn_boolean_t keep_locks,
+ svn_ra__provide_base_cb_t provide_base_cb,
+ svn_ra__provide_props_cb_t provide_props_cb,
+ svn_ra__get_copysrc_kind_cb_t get_copysrc_kind_cb,
+ void *cb_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
+/* Similar to #svn_ra_replay_revstart_callback_t, but with an Ev2 editor. */
+typedef svn_error_t *(*svn_ra__replay_revstart_ev2_callback_t)(
+ svn_revnum_t revision,
+ void *replay_baton,
+ svn_editor_t **editor,
+ apr_hash_t *rev_props,
+ apr_pool_t *pool);
+
+/* Similar to #svn_ra_replay_revfinish_callback_t, but with an Ev2 editor. */
+typedef svn_error_t *(*svn_ra__replay_revfinish_ev2_callback_t)(
+ svn_revnum_t revision,
+ void *replay_baton,
+ svn_editor_t *editor,
+ apr_hash_t *rev_props,
+ apr_pool_t *pool);
+
+/* Similar to svn_ra_replay_range(), but uses Ev2 versions of the callback
+ functions. */
+svn_error_t *
+svn_ra__replay_range_ev2(svn_ra_session_t *session,
+ svn_revnum_t start_revision,
+ svn_revnum_t end_revision,
+ svn_revnum_t low_water_mark,
+ svn_boolean_t send_deltas,
+ svn_ra__replay_revstart_ev2_callback_t revstart_func,
+ svn_ra__replay_revfinish_ev2_callback_t revfinish_func,
+ void *replay_baton,
+ svn_ra__provide_base_cb_t provide_base_cb,
+ svn_ra__provide_props_cb_t provide_props_cb,
+ svn_ra__get_copysrc_kind_cb_t get_copysrc_kind_cb,
+ void *cb_baton,
+ apr_pool_t *scratch_pool);
+
+/* Similar to svn_ra_replay(), but with an Ev2 editor. */
+svn_error_t *
+svn_ra__replay_ev2(svn_ra_session_t *session,
+ svn_revnum_t revision,
+ svn_revnum_t low_water_mark,
+ svn_boolean_t send_deltas,
+ svn_editor_t *editor,
+ apr_pool_t *scratch_pool);
+
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/include/private/svn_ra_svn_private.h b/subversion/include/private/svn_ra_svn_private.h
new file mode 100644
index 0000000..b4294d0
--- /dev/null
+++ b/subversion/include/private/svn_ra_svn_private.h
@@ -0,0 +1,826 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ *
+ * @file svn_ra_svn_private.h
+ * @brief Functions used by the server - Internal routines
+ */
+
+#ifndef SVN_RA_SVN_PRIVATE_H
+#define SVN_RA_SVN_PRIVATE_H
+
+#include "svn_ra_svn.h"
+#include "svn_editor.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/**
+ * Set the shim callbacks to be used by @a conn to @a shim_callbacks.
+ */
+svn_error_t *
+svn_ra_svn__set_shim_callbacks(svn_ra_svn_conn_t *conn,
+ svn_delta_shim_callbacks_t *shim_callbacks);
+
+/**
+ * @defgroup ra_svn_deprecated ra_svn low-level functions
+ * @{
+ */
+
+/** Write a number over the net.
+ *
+ * Writes will be buffered until the next read or flush.
+ */
+svn_error_t *
+svn_ra_svn__write_number(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ apr_uint64_t number);
+
+/** Write a string over the net.
+ *
+ * Writes will be buffered until the next read or flush.
+ */
+svn_error_t *
+svn_ra_svn__write_string(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const svn_string_t *str);
+
+/** Write a cstring over the net.
+ *
+ * Writes will be buffered until the next read or flush.
+ */
+svn_error_t *
+svn_ra_svn__write_cstring(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *s);
+
+/** Write a word over the net.
+ *
+ * Writes will be buffered until the next read or flush.
+ */
+svn_error_t *
+svn_ra_svn__write_word(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *word);
+
+/** Write a list of properties over the net. @a props is allowed to be NULL,
+ * in which case an empty list will be written out.
+ *
+ * @since New in 1.5.
+ */
+svn_error_t *
+svn_ra_svn__write_proplist(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ apr_hash_t *props);
+
+/** Begin a list. Writes will be buffered until the next read or flush. */
+svn_error_t *
+svn_ra_svn__start_list(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool);
+
+/** End a list. Writes will be buffered until the next read or flush. */
+svn_error_t *
+svn_ra_svn__end_list(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool);
+
+/** Flush the write buffer.
+ *
+ * Normally this shouldn't be necessary, since the write buffer is flushed
+ * when a read is attempted.
+ */
+svn_error_t *
+svn_ra_svn__flush(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool);
+
+/** Write a tuple, using a printf-like interface.
+ *
+ * The format string @a fmt may contain:
+ *
+ *@verbatim
+ Spec Argument type Item type
+ ---- -------------------- ---------
+ n apr_uint64_t Number
+ r svn_revnum_t Number
+ s const svn_string_t * String
+ c const char * String
+ w const char * Word
+ b svn_boolean_t Word ("true" or "false")
+ ( Begin tuple
+ ) End tuple
+ ? Remaining elements optional
+ ! (at beginning or end) Suppress opening or closing of tuple
+ @endverbatim
+ *
+ * Inside the optional part of a tuple, 'r' values may be @c
+ * SVN_INVALID_REVNUM, 'n' values may be
+ * SVN_RA_SVN_UNSPECIFIED_NUMBER, and 's', 'c', and 'w' values may be
+ * @c NULL; in these cases no data will be written. 'b' and '(' may
+ * not appear in the optional part of a tuple. Either all or none of
+ * the optional values should be valid.
+ *
+ * (If we ever have a need for an optional boolean value, we should
+ * invent a 'B' specifier which stores a boolean into an int, using -1
+ * for unspecified. Right now there is no need for such a thing.)
+ *
+ * Use the '!' format specifier to write partial tuples when you have
+ * to transmit an array or other unusual data. For example, to write
+ * a tuple containing a revision, an array of words, and a boolean:
+ * @code
+ SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "r(!", rev));
+ for (i = 0; i < n; i++)
+ SVN_ERR(svn_ra_svn_write_word(conn, pool, words[i]));
+ SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!)b", flag)); @endcode
+ */
+svn_error_t *
+svn_ra_svn__write_tuple(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *fmt, ...);
+
+/** Read an item from the network into @a *item. */
+svn_error_t *
+svn_ra_svn__read_item(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_ra_svn_item_t **item);
+
+/** Scan data on @a conn until we find something which looks like the
+ * beginning of an svn server greeting (an open paren followed by a
+ * whitespace character). This function is appropriate for beginning
+ * a client connection opened in tunnel mode, since people's dotfiles
+ * sometimes write output to stdout. It may only be called at the
+ * beginning of a client connection.
+ */
+svn_error_t *
+svn_ra_svn__skip_leading_garbage(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool);
+
+/** Parse an array of @c svn_sort__item_t structures as a tuple, using a
+ * printf-like interface. The format string @a fmt may contain:
+ *
+ *@verbatim
+ Spec Argument type Item type
+ ---- -------------------- ---------
+ n apr_uint64_t * Number
+ r svn_revnum_t * Number
+ s svn_string_t ** String
+ c const char ** String
+ w const char ** Word
+ b svn_boolean_t * Word ("true" or "false")
+ B apr_uint64_t * Word ("true" or "false")
+ l apr_array_header_t ** List
+ ( Begin tuple
+ ) End tuple
+ ? Tuple is allowed to end here
+ @endverbatim
+ *
+ * Note that a tuple is only allowed to end precisely at a '?', or at
+ * the end of the specification. So if @a fmt is "c?cc" and @a list
+ * contains two elements, an error will result.
+ *
+ * 'B' is similar to 'b', but may be used in the optional tuple specification.
+ * It returns TRUE, FALSE, or SVN_RA_SVN_UNSPECIFIED_NUMBER.
+ *
+ * If an optional part of a tuple contains no data, 'r' values will be
+ * set to @c SVN_INVALID_REVNUM, 'n' and 'B' values will be set to
+ * SVN_RA_SVN_UNSPECIFIED_NUMBER, and 's', 'c', 'w', and 'l' values
+ * will be set to @c NULL. 'b' may not appear inside an optional
+ * tuple specification; use 'B' instead.
+ */
+svn_error_t *
+svn_ra_svn__parse_tuple(const apr_array_header_t *list,
+ apr_pool_t *pool,
+ const char *fmt, ...);
+
+/** Read a tuple from the network and parse it as a tuple, using the
+ * format string notation from svn_ra_svn_parse_tuple().
+ */
+svn_error_t *
+svn_ra_svn__read_tuple(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *fmt, ...);
+
+/** Parse an array of @c svn_ra_svn_item_t structures as a list of
+ * properties, storing the properties in a hash table.
+ *
+ * @since New in 1.5.
+ */
+svn_error_t *
+svn_ra_svn__parse_proplist(const apr_array_header_t *list,
+ apr_pool_t *pool,
+ apr_hash_t **props);
+
+/** Read a command response from the network and parse it as a tuple, using
+ * the format string notation from svn_ra_svn_parse_tuple().
+ */
+svn_error_t *
+svn_ra_svn__read_cmd_response(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *fmt, ...);
+
+/** Accept commands over the network and handle them according to @a
+ * commands. Command handlers will be passed @a conn, a subpool of @a
+ * pool (cleared after each command is handled), the parameters of the
+ * command, and @a baton. Commands will be accepted until a
+ * terminating command is received (a command with "terminate" set in
+ * the command table). If a command handler returns an error wrapped
+ * in SVN_RA_SVN_CMD_ERR (see the @c SVN_CMD_ERR macro), the error
+ * will be reported to the other side of the connection and the
+ * command loop will continue; any other kind of error (typically a
+ * network or protocol error) is passed through to the caller.
+ *
+ * @since New in 1.6.
+ *
+ */
+svn_error_t *
+svn_ra_svn__handle_commands2(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const svn_ra_svn_cmd_entry_t *commands,
+ void *baton,
+ svn_boolean_t error_on_disconnect);
+
+/** Write a successful command response over the network, using the
+ * same format string notation as svn_ra_svn_write_tuple(). Do not use
+ * partial tuples with this function; if you need to use partial
+ * tuples, just write out the "success" and argument tuple by hand.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_response(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *fmt, ...);
+
+/** Write an unsuccessful command response over the network. */
+svn_error_t *
+svn_ra_svn__write_cmd_failure(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_error_t *err);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup svn_commands sending ra_svn commands
+ * @{
+ */
+
+/** Sets the target revision of connection @a conn to @a rev. Use @a pool
+ * for allocations.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_target_rev(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_revnum_t rev);
+
+/** Send a "open-root" command over connection @a conn. Open the
+ * repository root at revision @a rev and associate it with @a token.
+ * Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_open_root(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_revnum_t rev,
+ const char *token);
+
+/** Send a "delete-entry" command over connection @a conn. Delete the
+ * @a path at optional revision @a rev below @a parent_token.
+ * Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_delete_entry(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ svn_revnum_t rev,
+ const char *parent_token);
+
+/** Send a "add-dir" command over connection @a conn. Add a new directory
+ * node named @a path under the directory identified by @a parent_token.
+ * Associate the new directory with the given @a token. * @a copy_path
+ * and @a copy_rev are optional and describe the copy source.
+ * Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_add_dir(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ const char *parent_token,
+ const char *token,
+ const char *copy_path,
+ svn_revnum_t copy_rev);
+
+/** Send a "open-dir" command over connection @a conn. Associate to
+ * @a token the directory node named @a path under the directory
+ * identified by @a parent_token in revision @a rev.
+ * Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_open_dir(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ const char *parent_token,
+ const char *token,
+ svn_revnum_t rev);
+
+/** Send a "change-dir-prop" command over connection @a conn. Set the
+ * property @a name to the optional @a value on the directory identified
+ * to @a token. Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_change_dir_prop(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *token,
+ const char *name,
+ const svn_string_t *value);
+
+/** Send a "close-dir" command over connection @a conn. Identify the node
+ * to close with @a token. The latter will then no longer be associated
+ * with that node. Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_close_dir(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *token);
+
+/** Send a "absent-dir" command over connection @a conn. Directory node
+ * named @a path under the directory identified by @a parent_token is
+ * absent. Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_absent_dir(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ const char *parent_token);
+
+/** Send a "add-file" command over connection @a conn. Add a new file
+ * node named @a path under the directory identified by @a parent_token.
+ * Associate the new file with the given @a token. * @a copy_path and
+ * @a copy_rev are optional and describe the copy source.
+ * Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_add_file(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ const char *parent_token,
+ const char *token,
+ const char *copy_path,
+ svn_revnum_t copy_rev);
+
+/** Send a "open-file" command over connection @a conn. Associate to
+ * @a token the file node named @a path under the directory identified by
+ * @a parent_token in revision @a rev.
+ * Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_open_file(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ const char *parent_token,
+ const char *token,
+ svn_revnum_t rev);
+
+/** Send a "change-file-prop" command over connection @a conn. Set the
+ * property @a name to the optional @a value on the file identified to
+ * @a token. Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_change_file_prop(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *token,
+ const char *name,
+ const svn_string_t *value);
+
+/** Send a "close-dir" command over connection @a conn. Identify the node
+ * to close with @a token and provide an optional @a check_sum. The token
+ * will then no longer be associated with that node.
+ * Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_close_file(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *token,
+ const char *text_checksum);
+
+/** Send a "absent-file" command over connection @a conn. File node
+ * named @a path in the directory identified by @a parent_token is
+ * absent. Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_absent_file(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ const char *parent_token);
+
+/** Send a "apply-textdelta" command over connection @a conn. Starts a
+ * series of text deltas to be applied to the file identified by @a token.
+ * Optionally, specify the file's current checksum in @a base_checksum.
+ * Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_apply_textdelta(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *token,
+ const char *base_checksum);
+
+/** Send a "textdelta-chunk" command over connection @a conn. Apply
+ * textdelta @a chunk to the file identified by @a token.
+ * Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_textdelta_chunk(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *token,
+ const svn_string_t *chunk);
+
+/** Send a "textdelta-end" command over connection @a conn. Ends the
+ * series of text deltas to be applied to the file identified by @a token.
+ * Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_textdelta_end(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *token);
+
+/** Send a "close-edit" command over connection @a conn. Ends the editor
+ * drive (successfully). Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_close_edit(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool);
+
+/** Send a "abort-edit" command over connection @a conn. Prematurely ends
+ * the editor drive, e.g. due to some problem on the other side.
+ * Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_abort_edit(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool);
+
+/** Send a "set-path" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see set_path() in #svn_ra_reporter3_t for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_set_path(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ svn_revnum_t rev,
+ svn_boolean_t start_empty,
+ const char *lock_token,
+ svn_depth_t depth);
+
+/** Send a "delete-path" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see delete_path() in #svn_ra_reporter3_t for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_delete_path(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path);
+
+/** Send a "link-path" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see link_path() in #svn_ra_reporter3_t for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_link_path(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ const char *url,
+ svn_revnum_t rev,
+ svn_boolean_t start_empty,
+ const char *lock_token,
+ svn_depth_t depth);
+
+/** Send a "finish-report" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see finish_report() in #svn_ra_reporter3_t for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_finish_report(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool);
+
+/** Send a "abort-report" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see abort_report() in #svn_ra_reporter3_t for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_abort_report(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool);
+
+/** Send a "reparent" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_reparent for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_reparent(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *url);
+
+/** Send a "get-latest-rev" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_get_latest_revnum for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_get_latest_rev(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool);
+
+/** Send a "get-dated-rev" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_get_dated_revision for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_get_dated_rev(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ apr_time_t tm);
+
+/** Send a "change-rev-prop2" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_change_rev_prop2 for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_change_rev_prop2(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_revnum_t rev,
+ const char *name,
+ const svn_string_t *value,
+ svn_boolean_t dont_care,
+ const svn_string_t *old_value);
+
+/** Send a "change-rev-prop" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_change_rev_prop for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_change_rev_prop(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_revnum_t rev,
+ const char *name,
+ const svn_string_t *value);
+
+/** Send a "rev-proplist" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_rev_proplist for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_rev_proplist(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_revnum_t rev);
+
+/** Send a "rev-prop" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_rev_prop for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_rev_prop(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_revnum_t rev,
+ const char *name);
+
+/** Send a "get-file" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_get_file for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_get_file(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ svn_revnum_t rev,
+ svn_boolean_t props,
+ svn_boolean_t stream);
+
+/** Send a "update" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_do_update3 for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_update(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_revnum_t rev,
+ const char *target,
+ svn_boolean_t recurse,
+ svn_depth_t depth,
+ svn_boolean_t send_copyfrom_args,
+ svn_boolean_t ignore_ancestry);
+
+/** Send a "switch" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_do_switch3 for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_switch(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_revnum_t rev,
+ const char *target,
+ svn_boolean_t recurse,
+ const char *switch_url,
+ svn_depth_t depth,
+ svn_boolean_t send_copyfrom_args,
+ svn_boolean_t ignore_ancestry);
+
+/** Send a "status" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_do_status2 for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_status(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *target,
+ svn_boolean_t recurse,
+ svn_revnum_t rev,
+ svn_depth_t depth);
+
+/** Send a "diff" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_do_diff3 for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_diff(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_revnum_t rev,
+ const char *target,
+ svn_boolean_t recurse,
+ svn_boolean_t ignore_ancestry,
+ const char *versus_url,
+ svn_boolean_t text_deltas,
+ svn_depth_t depth);
+
+/** Send a "check-path" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_check_path for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_check_path(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ svn_revnum_t rev);
+
+/** Send a "stat" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_stat for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_stat(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ svn_revnum_t rev);
+
+/** Send a "get-file-revs" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_get_file_revs2 for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_get_file_revs(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ svn_revnum_t start,
+ svn_revnum_t end,
+ svn_boolean_t include_merged_revisions);
+
+/** Send a "lock" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_lock for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_lock(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ const char *comment,
+ svn_boolean_t steal_lock,
+ svn_revnum_t revnum);
+
+/** Send a "unlock" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_unlock for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_unlock(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ const char *token,
+ svn_boolean_t break_lock);
+
+/** Send a "get-lock" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_get_lock for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_get_lock(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path);
+
+/** Send a "get-locks" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_get_locks2 for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_get_locks(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ svn_depth_t depth);
+
+/** Send a "replay" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_replay for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_replay(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_revnum_t rev,
+ svn_revnum_t low_water_mark,
+ svn_boolean_t send_deltas);
+
+/** Send a "replay-range" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_replay_range for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_replay_range(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_revnum_t start_revision,
+ svn_revnum_t end_revision,
+ svn_revnum_t low_water_mark,
+ svn_boolean_t send_deltas);
+
+/** Send a "get-deleted-rev" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_get_deleted_rev for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_get_deleted_rev(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ svn_revnum_t peg_revision,
+ svn_revnum_t end_revision);
+
+/** Send a "get-iprops" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_get_inherited_props for a description.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_get_iprops(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ svn_revnum_t revision);
+
+/** Send a "finish-replay" command over connection @a conn.
+ * Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn__write_cmd_finish_replay(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool);
+
+/**
+ * @}
+ */
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* SVN_RA_SVN_PRIVATE_H */
diff --git a/subversion/include/private/svn_repos_private.h b/subversion/include/private/svn_repos_private.h
index bf5100d..09e4037 100644
--- a/subversion/include/private/svn_repos_private.h
+++ b/subversion/include/private/svn_repos_private.h
@@ -29,8 +29,9 @@
#include <apr_pools.h>
-#include "svn_repos.h"
#include "svn_types.h"
+#include "svn_repos.h"
+#include "svn_editor.h"
#ifdef __cplusplus
extern "C" {
@@ -44,6 +45,14 @@ extern "C" {
*
* Use @a pool for temporary allocations.
*
+ * @note This function is used to implement server-side validation.
+ * Consequently, if you make this function stricter in what it accepts, you
+ * (a) break svnsync'ing of existing repositories that contain now-invalid
+ * properties, (b) do not preclude such invalid values from entering the
+ * repository via tools that use the svn_fs_* API directly (possibly
+ * including svnadmin and svnlook). This has happened before and there
+ * are known (documented, but unsupported) upgrade paths in some cases.
+ *
* @since New in 1.7.
*/
svn_error_t *
@@ -79,6 +88,36 @@ svn_repos__fs_type(const char **fs_type,
const char *repos_path,
apr_pool_t *pool);
+
+/* Create a commit editor for REPOS, based on REVISION. */
+svn_error_t *
+svn_repos__get_commit_ev2(svn_editor_t **editor,
+ svn_repos_t *repos,
+ svn_authz_t *authz,
+ const char *authz_repos_name,
+ const char *authz_user,
+ apr_hash_t *revprops,
+ svn_commit_callback2_t commit_cb,
+ void *commit_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+svn_error_t *
+svn_repos__replay_ev2(svn_fs_root_t *root,
+ const char *base_dir,
+ svn_revnum_t low_water_mark,
+ svn_editor_t *editor,
+ svn_repos_authz_func_t authz_read_func,
+ void *authz_read_baton,
+ apr_pool_t *scratch_pool);
+
+/* A private addition to svn_repos_notify_warning_t. */
+#define svn_repos__notify_warning_invalid_mergeinfo \
+ ((svn_repos_notify_warning_t)(-1))
+
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/include/private/svn_skel.h b/subversion/include/private/svn_skel.h
index a47bf89..5b17b21 100644
--- a/subversion/include/private/svn_skel.h
+++ b/subversion/include/private/svn_skel.h
@@ -133,6 +133,11 @@ svn_skel_t *svn_skel__mem_atom(const void *addr, apr_size_t len,
/* Create an empty list skel, allocated from POOL. */
svn_skel_t *svn_skel__make_empty_list(apr_pool_t *pool);
+/* Duplicates the skel structure SRC_SKEL and if DUP_DATA is true also the
+ data it references in RESULT_POOL */
+svn_skel_t *svn_skel__dup(const svn_skel_t *src_skel, svn_boolean_t dup_data,
+ apr_pool_t *result_pool);
+
/* Prepend SKEL to LIST. */
void svn_skel__prepend(svn_skel_t *skel, svn_skel_t *list);
@@ -191,6 +196,14 @@ svn_skel__parse_proplist(apr_hash_t **proplist_p,
const svn_skel_t *skel,
apr_pool_t *result_pool);
+/* Parse a `IPROPS' SKEL into a depth-first ordered array of
+ svn_prop_inherited_item_t * structures *IPROPS. Use RESULT_POOL
+ for all allocations. */
+svn_error_t *
+svn_skel__parse_iprops(apr_array_header_t **iprops,
+ const svn_skel_t *skel,
+ apr_pool_t *result_pool);
+
/* Parse a `PROPLIST' SKEL looking for PROPNAME. If PROPNAME is found
then return its value in *PROVAL, allocated in RESULT_POOL. */
svn_error_t *
@@ -200,13 +213,22 @@ svn_skel__parse_prop(svn_string_t **propval,
apr_pool_t *result_pool);
/* Unparse a PROPLIST hash (which has const char * property names and
- svn_stringbuf_t * values) into a `PROPLIST' skel *SKEL_P. Use POOL
+ svn_string_t * values) into a `PROPLIST' skel *SKEL_P. Use POOL
for all allocations. */
svn_error_t *
svn_skel__unparse_proplist(svn_skel_t **skel_p,
- apr_hash_t *proplist,
+ const apr_hash_t *proplist,
apr_pool_t *pool);
+/* Unparse INHERITED_PROPS, a depth-first ordered array of
+ svn_prop_inherited_item_t * structures, into a `IPROPS' skel *SKEL_P.
+ Use RESULT_POOL for all allocations. */
+svn_error_t *
+svn_skel__unparse_iproplist(svn_skel_t **skel_p,
+ const apr_array_header_t *inherited_props,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/include/private/svn_sqlite.h b/subversion/include/private/svn_sqlite.h
index a28fad3..4c03e19 100644
--- a/subversion/include/private/svn_sqlite.h
+++ b/subversion/include/private/svn_sqlite.h
@@ -37,6 +37,17 @@ extern "C" {
#endif /* __cplusplus */
+/* Because the SQLite code can be inlined into libsvn_subre/sqlite.c,
+ we define accessors to its compile-time and run-time version
+ numbers here. */
+
+/* Return the value that SQLITE_VERSION had at compile time. */
+const char *svn_sqlite__compiled_version(void);
+
+/* Return the value of sqlite3_libversion() at run time. */
+const char *svn_sqlite__runtime_version(void);
+
+
typedef struct svn_sqlite__db_t svn_sqlite__db_t;
typedef struct svn_sqlite__stmt_t svn_sqlite__stmt_t;
typedef struct svn_sqlite__context_t svn_sqlite__context_t;
@@ -85,13 +96,6 @@ svn_sqlite__insert(apr_int64_t *row_id, svn_sqlite__stmt_t *stmt);
svn_error_t *
svn_sqlite__update(int *affected_rows, svn_sqlite__stmt_t *stmt);
-/* Return in *VERSION the version of the schema for the database as PATH.
- Use SCRATCH_POOL for temporary allocations. */
-svn_error_t *
-svn_sqlite__get_schema_version(int *version,
- const char *path,
- apr_pool_t *scratch_pool);
-
/* Return in *VERSION the version of the schema in DB. Use SCRATCH_POOL
for temporary allocations. */
svn_error_t *
@@ -99,12 +103,6 @@ svn_sqlite__read_schema_version(int *version,
svn_sqlite__db_t *db,
apr_pool_t *scratch_pool);
-/* Set DB's schema version to VERSION. Use SCRATCH_POOL for all temporary
- allocations. */
-svn_error_t *
-svn_sqlite__set_schema_version(svn_sqlite__db_t *db,
- int version,
- apr_pool_t *scratch_pool);
/* Open a connection in *DB to the database at PATH. Validate the schema,
@@ -164,13 +162,15 @@ svn_sqlite__get_statement(svn_sqlite__stmt_t **stmt, svn_sqlite__db_t *db,
Spec Argument type Item type
---- ----------------- ---------
n <none, absent> Column assignment skip
- i apr_int64_t Number
+ d int Number
+ L apr_int64_t Number
+ i apr_int64_t Number (deprecated format spec)
s const char * String
b const void * Blob data
apr_size_t Blob length
r svn_revnum_t Revision number
- t const svn_token_t * Token mapping table
- int value Token value
+ t const svn_token_map_t * Token mapping table
+ int Token value
Each character in FMT maps to one SQL parameter, and one or two function
parameters, in the order they appear.
@@ -221,6 +221,15 @@ svn_sqlite__bind_properties(svn_sqlite__stmt_t *stmt,
const apr_hash_t *props,
apr_pool_t *scratch_pool);
+/* Bind a set of inherited properties to the given slot. If INHERITED_PROPS
+ is NULL, then no binding will occur. INHERITED_PROPS will be stored as a
+ serialized skel. */
+svn_error_t *
+svn_sqlite__bind_iprops(svn_sqlite__stmt_t *stmt,
+ int slot,
+ const apr_array_header_t *inherited_props,
+ apr_pool_t *scratch_pool);
+
/* Bind a checksum's value to the given slot. If CHECKSUM is NULL, then no
binding will occur. */
svn_error_t *
@@ -237,17 +246,25 @@ svn_sqlite__bind_checksum(svn_sqlite__stmt_t *stmt,
*/
/* Wrapper around sqlite3_column_blob and sqlite3_column_bytes. The return
- value will be NULL if the column is null. If RESULT_POOL is not NULL,
- allocate the return value (if any) in it. Otherwise, the value will
- become invalid on the next invocation of svn_sqlite__column_* */
+ value will be NULL if the column is null.
+
+ If RESULT_POOL is not NULL, allocate the return value (if any) in it.
+ If RESULT_POOL is NULL, the return value will be valid until an
+ invocation of svn_sqlite__column_* performs a data type conversion (as
+ described in the SQLite documentation) or the statement is stepped or
+ reset or finalized. */
const void *
svn_sqlite__column_blob(svn_sqlite__stmt_t *stmt, int column,
apr_size_t *len, apr_pool_t *result_pool);
/* Wrapper around sqlite3_column_text. If the column is null, then the
- return value will be NULL. If RESULT_POOL is not NULL, allocate the
- return value (if any) in it. Otherwise, the value will become invalid
- on the next invocation of svn_sqlite__column_* */
+ return value will be NULL.
+
+ If RESULT_POOL is not NULL, allocate the return value (if any) in it.
+ If RESULT_POOL is NULL, the return value will be valid until an
+ invocation of svn_sqlite__column_* performs a data type conversion (as
+ described in the SQLite documentation) or the statement is stepped or
+ reset or finalized. */
const char *
svn_sqlite__column_text(svn_sqlite__stmt_t *stmt, int column,
apr_pool_t *result_pool);
@@ -279,8 +296,17 @@ svn_sqlite__column_token(svn_sqlite__stmt_t *stmt,
int column,
const svn_token_map_t *map);
+/* Fetch the word at COLUMN, look it up in the MAP, and return its value.
+ Returns NULL_VAL if the column is null. MALFUNCTION is thrown if the
+ column contains an unknown word. */
+int
+svn_sqlite__column_token_null(svn_sqlite__stmt_t *stmt,
+ int column,
+ const svn_token_map_t *map,
+ int null_val);
+
/* Return the column as a hash of const char * => const svn_string_t *.
- If the column is null, then NULL will be stored into *PROPS. The
+ If the column is null, then set *PROPS to NULL. The
results will be allocated in RESULT_POOL, and any temporary allocations
will be made in SCRATCH_POOL. */
svn_error_t *
@@ -290,6 +316,17 @@ svn_sqlite__column_properties(apr_hash_t **props,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
+/* Return the column as an array of depth-first ordered array of
+ svn_prop_inherited_item_t * structures. If the column is null, then
+ set *IPROPS to NULL. The results will be allocated in RESULT_POOL,
+ and any temporary allocations will be made in SCRATCH_POOL. */
+svn_error_t *
+svn_sqlite__column_iprops(apr_array_header_t **iprops,
+ svn_sqlite__stmt_t *stmt,
+ int column,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
/* Return the column as a checksum. If the column is null, then NULL will
be stored into *CHECKSUM. The result will be allocated in RESULT_POOL. */
svn_error_t *
@@ -343,11 +380,58 @@ svn_sqlite__result_int64(svn_sqlite__context_t *sctx, apr_int64_t val);
svn_error_t *
svn_sqlite__finalize(svn_sqlite__stmt_t *stmt);
-/* Error-handling wrapper around sqlite3_reset. */
+/* Reset STMT by calling sqlite3_reset(), and also clear any bindings to it.
+
+ Note: svn_sqlite__get_statement() calls this function automatically if
+ the requested statement has been used and has not yet been reset. */
svn_error_t *
svn_sqlite__reset(svn_sqlite__stmt_t *stmt);
+/* Begin a transaction in DB. */
+svn_error_t *
+svn_sqlite__begin_transaction(svn_sqlite__db_t *db);
+
+/* Like svn_sqlite__begin_transaction(), but takes out a 'RESERVED' lock
+ immediately, instead of using the default deferred locking scheme. */
+svn_error_t *
+svn_sqlite__begin_immediate_transaction(svn_sqlite__db_t *db);
+
+/* Begin a savepoint in DB. */
+svn_error_t *
+svn_sqlite__begin_savepoint(svn_sqlite__db_t *db);
+
+/* Commit the current transaction in DB if ERR is SVN_NO_ERROR, otherwise
+ * roll back the transaction. Return a composition of ERR and any error
+ * that may occur during the commit or roll-back. */
+svn_error_t *
+svn_sqlite__finish_transaction(svn_sqlite__db_t *db,
+ svn_error_t *err);
+
+/* Release the current savepoint in DB if EXPR is SVN_NO_ERROR, otherwise
+ * roll back to the savepoint and then release it. Return a composition of
+ * ERR and any error that may occur during the release or roll-back. */
+svn_error_t *
+svn_sqlite__finish_savepoint(svn_sqlite__db_t *db,
+ svn_error_t *err);
+
+/* Evaluate the expression EXPR within a transaction.
+ *
+ * Begin a transaction in DB; evaluate the expression EXPR, which would
+ * typically be a function call that does some work in DB; finally commit
+ * the transaction if EXPR evaluated to SVN_NO_ERROR, otherwise roll back
+ * the transaction.
+ */
+#define SVN_SQLITE__WITH_TXN(expr, db) \
+ do { \
+ svn_sqlite__db_t *svn_sqlite__db = (db); \
+ svn_error_t *svn_sqlite__err; \
+ \
+ SVN_ERR(svn_sqlite__begin_transaction(svn_sqlite__db)); \
+ svn_sqlite__err = (expr); \
+ SVN_ERR(svn_sqlite__finish_transaction(svn_sqlite__db, svn_sqlite__err)); \
+ } while (0)
+
/* Callback function to for use with svn_sqlite__with_transaction(). */
typedef svn_error_t *(*svn_sqlite__transaction_callback_t)(
void *baton, svn_sqlite__db_t *db, apr_pool_t *scratch_pool);
@@ -362,6 +446,18 @@ svn_sqlite__with_transaction(svn_sqlite__db_t *db,
svn_sqlite__transaction_callback_t cb_func,
void *cb_baton, apr_pool_t *scratch_pool);
+/* Like SVN_SQLITE__WITH_TXN(), but takes out a 'RESERVED' lock
+ immediately, instead of using the default deferred locking scheme. */
+#define SVN_SQLITE__WITH_IMMEDIATE_TXN(expr, db) \
+ do { \
+ svn_sqlite__db_t *svn_sqlite__db = (db); \
+ svn_error_t *svn_sqlite__err; \
+ \
+ SVN_ERR(svn_sqlite__begin_immediate_transaction(svn_sqlite__db)); \
+ svn_sqlite__err = (expr); \
+ SVN_ERR(svn_sqlite__finish_transaction(svn_sqlite__db, svn_sqlite__err)); \
+ } while (0)
+
/* Like svn_sqlite__with_transaction(), but takes out a 'RESERVED' lock
immediately, instead of using the default deferred locking scheme. */
svn_error_t *
@@ -370,16 +466,58 @@ svn_sqlite__with_immediate_transaction(svn_sqlite__db_t *db,
void *cb_baton,
apr_pool_t *scratch_pool);
+/* Evaluate the expression EXPR within a 'savepoint'. Savepoints can be
+ * nested.
+ *
+ * Begin a savepoint in DB; evaluate the expression EXPR, which would
+ * typically be a function call that does some work in DB; finally release
+ * the savepoint if EXPR evaluated to SVN_NO_ERROR, otherwise roll back
+ * to the savepoint and then release it.
+ */
+#define SVN_SQLITE__WITH_LOCK(expr, db) \
+ do { \
+ svn_sqlite__db_t *svn_sqlite__db = (db); \
+ svn_error_t *svn_sqlite__err; \
+ \
+ SVN_ERR(svn_sqlite__begin_savepoint(svn_sqlite__db)); \
+ svn_sqlite__err = (expr); \
+ SVN_ERR(svn_sqlite__finish_savepoint(svn_sqlite__db, svn_sqlite__err)); \
+ } while (0)
+
+/* Evaluate the expression EXPR1..EXPR4 within a 'savepoint'. Savepoints can
+ * be nested.
+ *
+ * Begin a savepoint in DB; evaluate the expression EXPR1, which would
+ * typically be a function call that does some work in DB; if no error occurred,
+ * run EXPR2; if no error occurred EXPR3; ... and finally release
+ * the savepoint if EXPR evaluated to SVN_NO_ERROR, otherwise roll back
+ * to the savepoint and then release it.
+ */
+#define SVN_SQLITE__WITH_LOCK4(expr1, expr2, expr3, expr4, db) \
+ do { \
+ svn_sqlite__db_t *svn_sqlite__db = (db); \
+ svn_error_t *svn_sqlite__err; \
+ \
+ SVN_ERR(svn_sqlite__begin_savepoint(svn_sqlite__db)); \
+ svn_sqlite__err = (expr1); \
+ if (!svn_sqlite__err) \
+ svn_sqlite__err = (expr2); \
+ if (!svn_sqlite__err) \
+ svn_sqlite__err = (expr3); \
+ if (!svn_sqlite__err) \
+ svn_sqlite__err = (expr4); \
+ SVN_ERR(svn_sqlite__finish_savepoint(svn_sqlite__db, svn_sqlite__err)); \
+ } while (0)
+
/* Helper function to handle several SQLite operations inside a shared lock.
This callback is similar to svn_sqlite__with_transaction(), but can be
- nested (even with a transaction) and changes in the callback are always
- committed when this function returns.
+ nested (even with a transaction).
- For SQLite 3.6.8 and later using this function as a wrapper around a group
- of operations can give a *huge* performance boost as the shared-read lock
- will be shared over multiple statements, instead of being reobtained
- everytime, which requires disk and/or network io.
+ Using this function as a wrapper around a group of operations can give a
+ *huge* performance boost as the shared-read lock will be shared over
+ multiple statements, instead of being reobtained every time, which may
+ require disk and/or network io, depending on SQLite's locking strategy.
SCRATCH_POOL will be passed to the callback (NULL is valid).
diff --git a/subversion/include/private/svn_string_private.h b/subversion/include/private/svn_string_private.h
index 64e59e8..8579f4d 100644
--- a/subversion/include/private/svn_string_private.h
+++ b/subversion/include/private/svn_string_private.h
@@ -46,6 +46,83 @@ extern "C" {
* @{
*/
+
+/** A self-contained memory buffer of known size.
+ *
+ * Intended to be used where a single variable-sized buffer is needed
+ * within an iteration, a scratch pool is available and we want to
+ * avoid the cost of creating another pool just for the iteration.
+ */
+typedef struct svn_membuf_t
+{
+ /** The a pool from which this buffer was originally allocated, and is not
+ * necessarily specific to this buffer. This is used only for allocating
+ * more memory from when the buffer needs to grow.
+ */
+ apr_pool_t *pool;
+
+ /** pointer to the memory */
+ void *data;
+
+ /** total size of buffer allocated */
+ apr_size_t size;
+} svn_membuf_t;
+
+
+/* Initialize a memory buffer of the given size */
+void
+svn_membuf__create(svn_membuf_t *membuf, apr_size_t size, apr_pool_t *pool);
+
+/* Ensure that the given memory buffer has at least the given size */
+void
+svn_membuf__ensure(svn_membuf_t *membuf, apr_size_t size);
+
+/* Resize the given memory buffer, preserving its contents. */
+void
+svn_membuf__resize(svn_membuf_t *membuf, apr_size_t size);
+
+/* Zero-fill the given memory */
+void
+svn_membuf__zero(svn_membuf_t *membuf);
+
+/* Zero-fill the given memory buffer up to the smaller of SIZE and the
+ current buffer size. */
+void
+svn_membuf__nzero(svn_membuf_t *membuf, apr_size_t size);
+
+/* Inline implementation of svn_membuf__zero.
+ * Note that PMEMBUF is evaluated only once.
+ */
+#define SVN_MEMBUF__ZERO(pmembuf) \
+ do \
+ { \
+ svn_membuf_t *const _m_b_f_ = (pmembuf); \
+ memset(_m_b_f_->data, 0, _m_b_f_->size); \
+ } \
+ while(0)
+
+/* Inline implementation of svn_membuf__nzero
+ * Note that PMEMBUF and PSIZE are evaluated only once.
+ */
+#define SVN_MEMBUF__NZERO(pmembuf, psize) \
+ do \
+ { \
+ svn_membuf_t *const _m_b_f_ = (pmembuf); \
+ const apr_size_t _s_z_ = (psize); \
+ if (_s_z_ > _m_b_f_->size) \
+ memset(_m_b_f_->data, 0, _m_b_f_->size); \
+ else \
+ memset(_m_b_f_->data, 0, _s_z_); \
+ } \
+ while(0)
+
+#ifndef SVN_DEBUG
+/* In non-debug mode, just use these inlie replacements */
+#define svn_membuf__zero(B) SVN_MEMBUF__ZERO((B))
+#define svn_membuf__nzero(B, S) SVN_MEMBUF__NZERO((B), (S))
+#endif
+
+
/** Returns the #svn_string_t information contained in the data and
* len members of @a strbuf. This is effectively a typecast, converting
* @a strbuf into an #svn_string_t. This first will become invalid and must
@@ -58,6 +135,81 @@ svn_stringbuf__morph_into_string(svn_stringbuf_t *strbuf);
* with APR 0.9 */
apr_status_t
svn__strtoff(apr_off_t *offset, const char *buf, char **end, int base);
+
+/** Number of chars needed to represent signed (19 places + sign + NUL) or
+ * unsigned (20 places + NUL) integers as strings.
+ */
+#define SVN_INT64_BUFFER_SIZE 21
+
+/** Writes the @a number as string into @a dest. The latter must provide
+ * space for at least #SVN_INT64_BUFFER_SIZE characters. Returns the number
+ * chars written excluding the terminating NUL.
+ */
+apr_size_t
+svn__ui64toa(char * dest, apr_uint64_t number);
+
+/** Writes the @a number as string into @a dest. The latter must provide
+ * space for at least #SVN_INT64_BUFFER_SIZE characters. Returns the number
+ * chars written excluding the terminating NUL.
+ */
+apr_size_t
+svn__i64toa(char * dest, apr_int64_t number);
+
+/** Returns a decimal string for @a number allocated in @a pool. Put in
+ * the @a seperator at each third place.
+ */
+char *
+svn__ui64toa_sep(apr_uint64_t number, char seperator, apr_pool_t *pool);
+
+/** Returns a decimal string for @a number allocated in @a pool. Put in
+ * the @a seperator at each third place.
+ */
+char *
+svn__i64toa_sep(apr_int64_t number, char seperator, apr_pool_t *pool);
+
+/**
+ * Computes the similarity score of STRA and STRB. Returns the ratio
+ * of the length of their longest common subsequence and the average
+ * length of the strings, normalized to the range [0..1000].
+ * The result is equivalent to Python's
+ *
+ * difflib.SequenceMatcher.ratio
+ *
+ * Optionally sets *RLCS to the length of the longest common
+ * subsequence of STRA and STRB. Using BUFFER for temporary storage,
+ * requires memory proportional to the length of the shorter string.
+ *
+ * The LCS algorithm used is described in, e.g.,
+ *
+ * http://en.wikipedia.org/wiki/Longest_common_subsequence_problem
+ *
+ * Q: Why another LCS when we already have one in libsvn_diff?
+ * A: svn_diff__lcs is too heavyweight and too generic for the
+ * purposes of similarity testing. Whilst it would be possible
+ * to use a character-based tokenizer with it, we really only need
+ * the *length* of the LCS for the similarity score, not all the
+ * other information that svn_diff__lcs produces in order to
+ * make printing diffs possible.
+ *
+ * Q: Is there a limit on the length of the string parameters?
+ * A: Only available memory. But note that the LCS algorithm used
+ * has O(strlen(STRA) * strlen(STRB)) worst-case performance,
+ * so do keep a rein on your enthusiasm.
+ */
+unsigned int
+svn_cstring__similarity(const char *stra, const char *strb,
+ svn_membuf_t *buffer, apr_size_t *rlcs);
+
+/**
+ * Like svn_cstring__similarity, but accepts svn_string_t's instead
+ * of NUL-terminated character strings.
+ */
+unsigned int
+svn_string__similarity(const svn_string_t *stringa,
+ const svn_string_t *stringb,
+ svn_membuf_t *buffer, apr_size_t *rlcs);
+
+
/** @} */
/** @} */
diff --git a/subversion/include/private/svn_subr_private.h b/subversion/include/private/svn_subr_private.h
new file mode 100644
index 0000000..30fbbf2
--- /dev/null
+++ b/subversion/include/private/svn_subr_private.h
@@ -0,0 +1,353 @@
+/*
+ * svn_subr_private.h : private definitions from libsvn_subr
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#ifndef SVN_SUBR_PRIVATE_H
+#define SVN_SUBR_PRIVATE_H
+
+#include "svn_types.h"
+#include "svn_io.h"
+#include "svn_version.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/** Spill-to-file Buffers
+ *
+ * @defgroup svn_spillbuf_t Spill-to-file Buffers
+ * @{
+ */
+
+/** A buffer that collects blocks of content, possibly using a file.
+ *
+ * The spill-buffer is created with two basic parameters: the size of the
+ * blocks that will be written into the spill-buffer ("blocksize"), and
+ * the (approximate) maximum size that will be allowed in memory ("maxsize").
+ * Once the maxsize is reached, newly written content will be "spilled"
+ * into a temporary file.
+ *
+ * When writing, content will be buffered into memory unless a given write
+ * will cause the amount of in-memory content to exceed the specified
+ * maxsize. At that point, the file is created, and the content will be
+ * written to that file.
+ *
+ * To read information back out of a spill buffer, there are two approaches
+ * available to the application:
+ *
+ * *) reading blocks using svn_spillbuf_read() (a "pull" model)
+ * *) having blocks passed to a callback via svn_spillbuf_process()
+ * (a "push" model to your application)
+ *
+ * In both cases, the spill-buffer will provide you with a block of N bytes
+ * that you must fully consume before asking for more data. The callback
+ * style provides for a "stop" parameter to temporarily pause the reading
+ * until another read is desired. The two styles of reading may be mixed,
+ * as the caller desires. Generally, N will be the blocksize, and will be
+ * less when the end of the content is reached.
+ *
+ * For a more stream-oriented style of reading, where the caller specifies
+ * the number of bytes to read into a caller-provided buffer, please see
+ * svn_spillbuf_reader_t. That overlaid type will cause more memory copies
+ * to be performed (whereas the bare spill-buffer type hands you a buffer
+ * to consume).
+ *
+ * Writes may be interleaved with reading, and content will be returned
+ * in a FIFO manner. Thus, if content has been placed into the spill-buffer
+ * you will always read the earliest-written data, and any newly-written
+ * content will be appended to the buffer.
+ *
+ * Note: the file is created in the same pool where the spill-buffer was
+ * created. If the content is completely read from that file, it will be
+ * closed and deleted. Should writing further content cause another spill
+ * file to be created, that will increase the size of the pool. There is
+ * no bound on the amount of file-related resources that may be consumed
+ * from the pool. It is entirely related to the read/write pattern and
+ * whether spill files are repeatedly created.
+ */
+typedef struct svn_spillbuf_t svn_spillbuf_t;
+
+
+/* Create a spill buffer. */
+svn_spillbuf_t *
+svn_spillbuf__create(apr_size_t blocksize,
+ apr_size_t maxsize,
+ apr_pool_t *result_pool);
+
+
+/* Determine how much content is stored in the spill buffer. */
+svn_filesize_t
+svn_spillbuf__get_size(const svn_spillbuf_t *buf);
+
+
+/* Write some data into the spill buffer. */
+svn_error_t *
+svn_spillbuf__write(svn_spillbuf_t *buf,
+ const char *data,
+ apr_size_t len,
+ apr_pool_t *scratch_pool);
+
+
+/* Read a block of memory from the spill buffer. @a *data will be set to
+ NULL if no content remains. Otherwise, @a data and @a len will point to
+ data that must be fully-consumed by the caller. This data will remain
+ valid until another call to svn_spillbuf_write(), svn_spillbuf_read(),
+ or svn_spillbuf_process(), or if the spill buffer's pool is cleared. */
+svn_error_t *
+svn_spillbuf__read(const char **data,
+ apr_size_t *len,
+ svn_spillbuf_t *buf,
+ apr_pool_t *scratch_pool);
+
+
+/* Callback for reading content out of the spill buffer. Set @a stop if
+ you want to stop the processing (and will call svn_spillbuf_process
+ again, at a later time). */
+typedef svn_error_t * (*svn_spillbuf_read_t)(svn_boolean_t *stop,
+ void *baton,
+ const char *data,
+ apr_size_t len,
+ apr_pool_t *scratch_pool);
+
+
+/* Process the content stored in the spill buffer. @a exhausted will be
+ set to TRUE if all of the content is processed by @a read_func. This
+ function may return early if the callback returns TRUE for its 'stop'
+ parameter. */
+svn_error_t *
+svn_spillbuf__process(svn_boolean_t *exhausted,
+ svn_spillbuf_t *buf,
+ svn_spillbuf_read_t read_func,
+ void *read_baton,
+ apr_pool_t *scratch_pool);
+
+
+/** Classic stream reading layer on top of spill-buffers.
+ *
+ * This type layers upon a spill-buffer to enable a caller to read a
+ * specified number of bytes into the caller's provided buffer. This
+ * implies more memory copies than the standard spill-buffer reading
+ * interface, but is sometimes required by spill-buffer users.
+ */
+typedef struct svn_spillbuf_reader_t svn_spillbuf_reader_t;
+
+
+/* Create a spill-buffer and a reader for it. */
+svn_spillbuf_reader_t *
+svn_spillbuf__reader_create(apr_size_t blocksize,
+ apr_size_t maxsize,
+ apr_pool_t *result_pool);
+
+
+/* Read @a len bytes from @a reader into @a data. The number of bytes
+ actually read is stored in @a amt. If the content is exhausted, then
+ @a amt is set to zero. It will always be non-zero if the spill-buffer
+ contains content.
+
+ If @a len is zero, then SVN_ERR_INCORRECT_PARAMS is returned. */
+svn_error_t *
+svn_spillbuf__reader_read(apr_size_t *amt,
+ svn_spillbuf_reader_t *reader,
+ char *data,
+ apr_size_t len,
+ apr_pool_t *scratch_pool);
+
+
+/* Read a single character from @a reader, and place it in @a c. If there
+ is no content in the spill-buffer, then SVN_ERR_STREAM_UNEXPECTED_EOF
+ is returned. */
+svn_error_t *
+svn_spillbuf__reader_getc(char *c,
+ svn_spillbuf_reader_t *reader,
+ apr_pool_t *scratch_pool);
+
+
+/* Write @a len bytes from @a data into the spill-buffer in @a reader. */
+svn_error_t *
+svn_spillbuf__reader_write(svn_spillbuf_reader_t *reader,
+ const char *data,
+ apr_size_t len,
+ apr_pool_t *scratch_pool);
+
+
+/* Return a stream built on top of a spillbuf, using the same arguments as
+ svn_spillbuf__create(). This stream can be used for reading and writing,
+ but implements the same basic sematics of a spillbuf for the underlying
+ storage. */
+svn_stream_t *
+svn_stream__from_spillbuf(apr_size_t blocksize,
+ apr_size_t maxsize,
+ apr_pool_t *result_pool);
+
+/** @} */
+
+/**
+ * Internal function for creating a MD5 checksum from a binary digest.
+ *
+ * @since New in 1.8
+ */
+svn_checksum_t *
+svn_checksum__from_digest_md5(const unsigned char *digest,
+ apr_pool_t *result_pool);
+
+/**
+ * Internal function for creating a SHA1 checksum from a binary
+ * digest.
+ *
+ * @since New in 1.8
+ */
+svn_checksum_t *
+svn_checksum__from_digest_sha1(const unsigned char *digest,
+ apr_pool_t *result_pool);
+
+
+/**
+ * @defgroup svn_hash_support Hash table serialization support
+ * @{
+ */
+
+/*----------------------------------------------------*/
+
+/**
+ * @defgroup svn_hash_misc Miscellaneous hash APIs
+ * @{
+ */
+
+/** @} */
+
+
+/**
+ * @defgroup svn_hash_getters Specialized getter APIs for hashes
+ * @{
+ */
+
+/** Find the value of a @a key in @a hash, return the value.
+ *
+ * If @a hash is @c NULL or if the @a key cannot be found, the
+ * @a default_value will be returned.
+ *
+ * @since New in 1.7.
+ */
+const char *
+svn_hash__get_cstring(apr_hash_t *hash,
+ const char *key,
+ const char *default_value);
+
+/** Like svn_hash_get_cstring(), but for boolean values.
+ *
+ * Parses the value as a boolean value. The recognized representations
+ * are 'TRUE'/'FALSE', 'yes'/'no', 'on'/'off', '1'/'0'; case does not
+ * matter.
+ *
+ * @since New in 1.7.
+ */
+svn_boolean_t
+svn_hash__get_bool(apr_hash_t *hash,
+ const char *key,
+ svn_boolean_t default_value);
+
+/** @} */
+
+/**
+ * @defgroup svn_hash_create Create optimized APR hash tables
+ * @{
+ */
+
+/** Returns a hash table, allocated in @a pool, with the same ordering of
+ * elements as APR 1.4.5 or earlier (using apr_hashfunc_default) but uses
+ * a faster hash function implementation.
+ *
+ * @since New in 1.8.
+ */
+apr_hash_t *
+svn_hash__make(apr_pool_t *pool);
+
+/** @} */
+
+/** @} */
+
+
+/** Apply the changes described by @a prop_changes to @a original_props and
+ * return the result. The inverse of svn_prop_diffs().
+ *
+ * Allocate the resulting hash from @a pool, but allocate its keys and
+ * values from @a pool and/or by reference to the storage of the inputs.
+ *
+ * Note: some other APIs use an array of pointers to svn_prop_t.
+ *
+ * @since New in 1.8.
+ */
+apr_hash_t *
+svn_prop__patch(const apr_hash_t *original_props,
+ const apr_array_header_t *prop_changes,
+ apr_pool_t *pool);
+
+
+/**
+ * @defgroup svn_version Version number dotted triplet parsing
+ * @{
+ */
+
+/* Set @a *version to a version structure parsed from the version
+ * string representation in @a version_string. Return
+ * @c SVN_ERR_MALFORMED_VERSION_STRING if the string fails to parse
+ * cleanly.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_version__parse_version_string(svn_version_t **version,
+ const char *version_string,
+ apr_pool_t *result_pool);
+
+/* Return true iff @a version represents a version number of at least
+ * the level represented by @a major, @a minor, and @a patch.
+ *
+ * @since New in 1.8.
+ */
+svn_boolean_t
+svn_version__at_least(svn_version_t *version,
+ int major,
+ int minor,
+ int patch);
+
+/** Like svn_ver_check_list(), but with a @a comparator parameter.
+ * Private backport of svn_ver_check_list2() from trunk.
+ */
+svn_error_t *
+svn_ver__check_list2(const svn_version_t *my_version,
+ const svn_version_checklist_t *checklist,
+ svn_boolean_t (*comparator)(const svn_version_t *,
+ const svn_version_t *));
+
+/** To minimize merge churn in callers, alias the trunk name privately. */
+#define svn_ver_check_list2 svn_ver__check_list2
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* SVN_SUBR_PRIVATE_H */
diff --git a/subversion/include/private/svn_temp_serializer.h b/subversion/include/private/svn_temp_serializer.h
index 3dd217b..7a007c3 100644
--- a/subversion/include/private/svn_temp_serializer.h
+++ b/subversion/include/private/svn_temp_serializer.h
@@ -31,8 +31,7 @@
#ifndef SVN_TEMP_SERIALIZER_H
#define SVN_TEMP_SERIALIZER_H
-#include <apr.h>
-#include "svn_types.h"
+#include "svn_string.h"
#ifdef __cplusplus
extern "C" {
@@ -42,6 +41,14 @@ extern "C" {
struct svn_stringbuf_t;
/**
+ * The amount of extra memory allocated by #svn_temp_serializer__init for
+ * the internal buffer in addition to its suggested_buffer_size parameter.
+ * To allocate a 512 buffer, including overhead, just specify a size of
+ * 512 - SVN_TEMP_SERIALIZER__OVERHEAD.
+ */
+#define SVN_TEMP_SERIALIZER__OVERHEAD (sizeof(svn_stringbuf_t) + 1)
+
+/**
* Opaque structure controlling the serialization process and holding the
* intermediate as well as final results.
*/
@@ -68,7 +75,7 @@ typedef struct svn_temp_serializer__context_t svn_temp_serializer__context_t;
* serialized. This scheme allows only for tree-like, i.e. non-circular
* data structures.
*
- * @return the serization context.
+ * @return the serialization context.
*/
svn_temp_serializer__context_t *
svn_temp_serializer__init(const void *source_struct,
@@ -94,7 +101,7 @@ svn_temp_serializer__init(const void *source_struct,
* @a source_struct first, get the result from svn_temp_serializer__get()
* and call svn_temp_serializer__init_append for the next part.
*
- * @return the serization context.
+ * @return the serialization context.
*/
svn_temp_serializer__context_t *
svn_temp_serializer__init_append(void *buffer,
@@ -126,7 +133,7 @@ svn_temp_serializer__push(svn_temp_serializer__context_t *context,
/**
* End the serialization of the current sub-structure. The serialization
- * @a context will be focussed back on the parent structure. You may then
+ * @a context will be focused back on the parent structure. You may then
* add further sub-structures starting from that level.
*
* It is not necessary to call this function just for symmetry at the end
@@ -179,7 +186,7 @@ svn_temp_serializer__get(svn_temp_serializer__context_t *context);
* automatically) and resolve all pointers to sub-structures.
*
* To do the latter, call this function for each of these pointers, giving
- * the start address of the copyied buffer in @a buffer and a reference to
+ * the start address of the copied buffer in @a buffer and a reference to
* the pointer to resolve in @a ptr.
*/
void
@@ -188,10 +195,10 @@ svn_temp_deserializer__resolve(void *buffer, void **ptr);
/**
* Similar to svn_temp_deserializer__resolve() but instead of modifying
* the buffer content, the resulting pointer is passed back to the caller
- * a the return value.
+ * as the return value.
*/
const void *
-svn_temp_deserializer__ptr(const void *buffer, const void **ptr);
+svn_temp_deserializer__ptr(const void *buffer, const void *const *ptr);
#ifdef __cplusplus
}
diff --git a/subversion/include/private/svn_wc_private.h b/subversion/include/private/svn_wc_private.h
index 48039ca..fce42b0 100644
--- a/subversion/include/private/svn_wc_private.h
+++ b/subversion/include/private/svn_wc_private.h
@@ -39,6 +39,7 @@
#include "svn_types.h"
#include "svn_wc.h"
+#include "private/svn_diff_tree.h"
#ifdef __cplusplus
extern "C" {
@@ -55,7 +56,14 @@ svn_wc__changelist_match(svn_wc_context_t *wc_ctx,
apr_pool_t *scratch_pool);
/* Like svn_wc_get_update_editorX and svn_wc_get_status_editorX, but only
- allows updating a file external LOCAL_ABSPATH */
+ allows updating a file external LOCAL_ABSPATH.
+
+ Since this only deals with files, the WCROOT_IPROPS argument in
+ svn_wc_get_update_editorX and svn_wc_get_status_editorX (hashes mapping
+ const char * absolute working copy paths, which are working copy roots, to
+ depth-first ordered arrays of svn_prop_inherited_item_t * structures) is
+ simply IPROPS here, a depth-first ordered arrays of
+ svn_prop_inherited_item_t * structs. */
svn_error_t *
svn_wc__get_file_external_editor(const svn_delta_editor_t **editor,
void **edit_baton,
@@ -66,6 +74,7 @@ svn_wc__get_file_external_editor(const svn_delta_editor_t **editor,
const char *url,
const char *repos_root_url,
const char *repos_uuid,
+ apr_array_header_t *iprops,
svn_boolean_t use_commit_times,
const char *diff3_cmd,
const apr_array_header_t *preserved_exts,
@@ -105,9 +114,18 @@ svn_wc__crawl_file_external(svn_wc_context_t *wc_ctx,
If IGNORE_ENOENT, then set *external_kind to svn_node_none, when
LOCAL_ABSPATH is not an external instead of returning an error.
- ### While we are not at the SVN_WC__HAS_EXTERNALS_STORE format, roots
- ### of working copies will be identified as directory externals. The
- ### recorded information will be NULL for directory externals.
+ Here is an overview of how DEFINING_REVISION and
+ DEFINING_OPERATIONAL_REVISION would be set for which kinds of externals
+ definitions:
+
+ svn:externals line DEFINING_REV. DEFINING_OP._REV.
+
+ ^/foo@2 bar 2 2
+ -r1 ^/foo@2 bar 1 2
+ -r1 ^/foo bar 1 SVN_INVALID_REVNUM
+ ^/foo bar SVN_INVALID_REVNUM SVN_INVALID_REVNUM
+ ^/foo@HEAD bar SVN_INVALID_REVNUM SVN_INVALID_REVNUM
+ -rHEAD ^/foo bar -- not a valid externals definition --
*/
svn_error_t *
svn_wc__read_external_info(svn_node_kind_t *external_kind,
@@ -122,6 +140,55 @@ svn_wc__read_external_info(svn_node_kind_t *external_kind,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
+/** See svn_wc__committable_externals_below(). */
+typedef struct svn_wc__committable_external_info_t {
+
+ /* The local absolute path where the external should be checked out. */
+ const char *local_abspath;
+
+ /* The relpath part of the source URL the external should be checked out
+ * from. */
+ const char *repos_relpath;
+
+ /* The root URL part of the source URL the external should be checked out
+ * from. */
+ const char *repos_root_url;
+
+ /* Set to either svn_node_file or svn_node_dir. */
+ svn_node_kind_t kind;
+
+} svn_wc__committable_external_info_t;
+
+/* Add svn_wc__committable_external_info_t* items to *EXTERNALS, describing
+ * 'committable' externals checked out below LOCAL_ABSPATH. Recursively find
+ * all nested externals (externals defined inside externals).
+ *
+ * In this context, a 'committable' external belongs to the same repository as
+ * LOCAL_ABSPATH, is not revision-pegged and is currently checked out in the
+ * WC. (Local modifications are not tested for.)
+ *
+ * *EXTERNALS must be initialized either to NULL or to a pointer created with
+ * apr_array_make(..., sizeof(svn_wc__committable_external_info_t *)). If
+ * *EXTERNALS is initialized to NULL, an array will be allocated from
+ * RESULT_POOL as necessary. If no committable externals are found,
+ * *EXTERNALS is left unchanged.
+ *
+ * DEPTH limits the recursion below LOCAL_ABSPATH.
+ *
+ * This function will not find externals defined in some parent WC above
+ * LOCAL_ABSPATH's WC-root.
+ *
+ * ###TODO: Add a WRI_ABSPATH (wc root indicator) separate from LOCAL_ABSPATH,
+ * to allow searching any wc-root for externals under LOCAL_ABSPATH, not only
+ * LOCAL_ABSPATH's most immediate wc-root. */
+svn_error_t *
+svn_wc__committable_externals_below(apr_array_header_t **externals,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ svn_depth_t depth,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
/* Gets a mapping from const char * local abspaths of externals to the const
char * local abspath of where they are defined for all externals defined
at or below LOCAL_ABSPATH.
@@ -170,6 +237,9 @@ svn_wc__external_register(svn_wc_context_t *wc_ctx,
/* Remove the external at LOCAL_ABSPATH from the working copy identified by
WRI_ABSPATH using WC_CTX.
+ If DECLARATION_ONLY is TRUE, only remove the registration and leave the
+ on-disk structure untouched.
+
If not NULL, call CANCEL_FUNC with CANCEL_BATON to allow canceling while
removing the working copy files.
@@ -179,6 +249,7 @@ svn_error_t *
svn_wc__external_remove(svn_wc_context_t *wc_ctx,
const char *wri_abspath,
const char *local_abspath,
+ svn_boolean_t declaration_only,
svn_cancel_func_t cancel_func,
void *cancel_baton,
apr_pool_t *scratch_pool);
@@ -231,6 +302,12 @@ svn_wc__get_tree_conflict(const svn_wc_conflict_description2_t **tree_conflict,
/** Record the tree conflict described by @a conflict in the WC for
* @a conflict->local_abspath. Use @a scratch_pool for all temporary
* allocations.
+ *
+ * Returns an SVN_ERR_WC_PATH_UNEXPECTED_STATUS error when
+ * CONFLICT->LOCAL_ABSPATH is already tree conflicted.
+ *
+ * ### This function can't set moved_away, moved_here conflicts for
+ * any operation, except merges.
*/
svn_error_t *
svn_wc__add_tree_conflict(svn_wc_context_t *wc_ctx,
@@ -247,39 +324,29 @@ svn_wc__del_tree_conflict(svn_wc_context_t *wc_ctx,
const char *victim_abspath,
apr_pool_t *scratch_pool);
-
-/* Return a hash @a *tree_conflicts of all the children of @a
- * local_abspath that are in tree conflicts. The hash maps local
- * abspaths to pointers to svn_wc_conflict_description2_t, all
- * allocated in result pool.
- */
-svn_error_t *
-svn_wc__get_all_tree_conflicts(apr_hash_t **tree_conflicts,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-
-/** Like svn_wc_is_wc_root(), but it doesn't consider switched subdirs or
+/** Check whether LOCAL_ABSPATH has a parent directory that knows about its
+ * existence. Set *IS_WCROOT to FALSE if a parent is found, and to TRUE
+ * if there is no such parent.
+ *
+ * Like svn_wc_is_wc_root2(), but doesn't consider switched subdirs or
* deleted entries as working copy roots.
*/
svn_error_t *
-svn_wc__strictly_is_wc_root(svn_boolean_t *wc_root,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *scratch_pool);
+svn_wc__is_wcroot(svn_boolean_t *is_wcroot,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *scratch_pool);
/** Set @a *wcroot_abspath to the local abspath of the root of the
* working copy in which @a local_abspath resides.
*/
svn_error_t *
-svn_wc__get_wc_root(const char **wcroot_abspath,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
+svn_wc__get_wcroot(const char **wcroot_abspath,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
/**
* The following are temporary APIs to aid in the transition from wc-1 to
@@ -339,10 +406,10 @@ svn_wc__node_get_children_of_working_node(const apr_array_header_t **children,
apr_pool_t *scratch_pool);
/**
- * Like svn_wc__node_get_children2(), except also include any path that was
- * a child of a deleted directory that existed at @a dir_abspath, even if
- * that directory is now scheduled to be replaced by the working node at
- * @a dir_abspath.
+ * Like svn_wc__node_get_children_of_working_node(), except also include any
+ * path that was a child of a deleted directory that existed at
+ * @a dir_abspath, even if that directory is now scheduled to be replaced by
+ * the working node at @a dir_abspath.
*/
svn_error_t *
svn_wc__node_get_children(const apr_array_header_t **children,
@@ -354,16 +421,21 @@ svn_wc__node_get_children(const apr_array_header_t **children,
/**
- * Fetch the repository root information for a given @a local_abspath into
- * @a *repos_root_url and @a repos_uuid. Use @a wc_ctx to access the working copy
- * for @a local_abspath, @a scratch_pool for all temporary allocations,
- * @a result_pool for result allocations. Note: the result may be NULL if the
- * given node has no repository root associated with it (e.g. locally added).
+ * Fetch the repository information for the working version
+ * of the node at @a local_abspath into @a *revision, @a *repos_relpath,
+ * @a *repos_root_url and @a *repos_uuid. Use @a wc_ctx to access the working
+ * copy. Allocate results in @a result_pool.
+ *
+ * @a *revision will be set to SVN_INVALID_REVNUM for any shadowed node (including
+ * added and deleted nodes). All other output values will be set to the current
+ * values or those they would have after a commit.
*
- * Either input value may be NULL, indicating no interest.
+ * All output argument may be NULL, indicating no interest.
*/
svn_error_t *
-svn_wc__node_get_repos_info(const char **repos_root_url,
+svn_wc__node_get_repos_info(svn_revnum_t *revision,
+ const char **repos_relpath,
+ const char **repos_root_url,
const char **repos_uuid,
svn_wc_context_t *wc_ctx,
const char *local_abspath,
@@ -417,8 +489,9 @@ svn_wc__node_get_url(const char **url,
/**
* Retrieves the origin of the node as it is known in the repository. For
- * added nodes this retrieves where the node is copied from, and the repository
- * location for other nodes.
+ * a copied node this retrieves where the node is copied from, for an added
+ * node this returns NULL/INVALID outputs, and for any other node this
+ * retrieves the repository location.
*
* All output arguments may be NULL.
*
@@ -453,22 +526,6 @@ svn_wc__node_get_origin(svn_boolean_t *is_copy,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
-
-/**
- * Set @a *repos_relpath to the corresponding repos_relpath for @a
- * local_abspath, using @a wc_ctx. If the node is added, return the
- * repos_relpath it will have in the repository.
- *
- * If @a local_abspath is not in the working copy, return @c
- * SVN_ERR_WC_PATH_NOT_FOUND.
- * */
-svn_error_t *
-svn_wc__node_get_repos_relpath(const char **repos_relpath,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
/**
* Set @a *is_deleted to TRUE if @a local_abspath is deleted, using
* @a wc_ctx. If @a local_abspath is not in the working copy, return
@@ -482,42 +539,48 @@ svn_wc__node_is_status_deleted(svn_boolean_t *is_deleted,
apr_pool_t *scratch_pool);
/**
- * Set @a *is_server_excluded to whether @a local_abspath has been
- * excluded by the server, using @a wc_ctx. If @a local_abspath is not
- * in the working copy, return @c SVN_ERR_WC_PATH_NOT_FOUND.
+ * Set @a *deleted_ancestor_abspath to the root of the delete operation
+ * that deleted @a local_abspath. If @a local_abspath itself was deleted
+ * and has no deleted ancestor, @a *deleted_ancestor_abspath will equal
+ * @a local_abspath. If @a local_abspath was not deleted,
+ * set @a *deleted_ancestor_abspath to @c NULL.
+ *
+ * A node is considered 'deleted' if it is deleted or moved-away, and is
+ * not replaced.
+ *
+ * @a *deleted_ancestor_abspath is allocated in @a result_pool.
* Use @a scratch_pool for all temporary allocations.
*/
svn_error_t *
-svn_wc__node_is_status_server_excluded(svn_boolean_t *is_server_excluded,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *scratch_pool);
-
-/**
- * Set @a *is_not_present to whether the status of @a local_abspath is
- * #svn_wc__db_status_not_present, using @a wc_ctx.
- * If @a local_abspath is not in the working copy, return
- * @c SVN_ERR_WC_PATH_NOT_FOUND. Use @a scratch_pool for all temporary
- * allocations.
- */
-svn_error_t *
-svn_wc__node_is_status_not_present(svn_boolean_t *is_not_present,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *scratch_pool);
+svn_wc__node_get_deleted_ancestor(const char **deleted_ancestor_abspath,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
/**
- * Set @a *is_excluded to whether the status of @a local_abspath is
- * #svn_wc__db_status_excluded, using @a wc_ctx.
+ * Set @a *not_present to TRUE when @a local_abspath has status
+ * svn_wc__db_status_not_present. Set @a *user_excluded to TRUE when
+ * @a local_abspath has status svn_wc__db_status_excluded. Set
+ * @a *server_excluded to TRUE when @a local_abspath has status
+ * svn_wc__db_status_server_excluded. Otherwise set these values to FALSE.
+ * If @a base_only is TRUE then only the base node will be examined,
+ * otherwise the current base or working node will be examined.
+ *
+ * If a value is not interesting you can pass #NULL.
+ *
* If @a local_abspath is not in the working copy, return
* @c SVN_ERR_WC_PATH_NOT_FOUND. Use @a scratch_pool for all temporary
* allocations.
*/
svn_error_t *
-svn_wc__node_is_status_excluded(svn_boolean_t *is_excluded,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *scratch_pool);
+svn_wc__node_is_not_present(svn_boolean_t *not_present,
+ svn_boolean_t *user_excluded,
+ svn_boolean_t *server_excluded,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ svn_boolean_t base_only,
+ apr_pool_t *scratch_pool);
/**
* Set @a *is_added to whether @a local_abspath is added, using
@@ -551,21 +614,36 @@ svn_wc__node_has_working(svn_boolean_t *has_working,
/**
- * Get the base revision of @a local_abspath using @a wc_ctx. If
- * @a local_abspath is not in the working copy, return
- * @c SVN_ERR_WC_PATH_NOT_FOUND.
+ * Get the repository location of the base node at @a local_abspath.
+ *
+ * Set *REVISION, *REPOS_RELPATH, *REPOS_ROOT_URL *REPOS_UUID and *LOCK_TOKEN
+ * to the location that this node was checked out at or last updated/switched
+ * to, regardless of any uncommitted changes (delete, replace and/or copy-here/
+ * move-here).
*
- * In @a *base_revision, return the revision of the revert-base, i.e. the
- * revision that this node was checked out at or last updated/switched to,
- * regardless of any uncommitted changes (delete, replace and/or
- * copy-here/move-here). For a locally added/copied/moved-here node that is
- * not part of a replace, return @c SVN_INVALID_REVNUM.
+ * If there is no BASE node at @a local_abspath or if @a show_hidden is FALSE,
+ * no status 'normal' or 'incomplete' BASE node report
+ * SVN_ERR_WC_PATH_NOT_FOUND, or if @a ignore_enoent is TRUE, @a kind
+ * svn_node_unknown, @a revision SVN_INVALID_REVNUM and all other values NULL.
+ *
+ * All output arguments may be NULL.
+ *
+ * Allocate the results in @a result_pool. Perform temporary allocations in
+ * @a scratch_pool.
*/
svn_error_t *
-svn_wc__node_get_base_rev(svn_revnum_t *base_revision,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *scratch_pool);
+svn_wc__node_get_base(svn_node_kind_t *kind,
+ svn_revnum_t *revision,
+ const char **repos_relpath,
+ const char **repos_root_url,
+ const char **repos_uuid,
+ const char **lock_token,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ svn_boolean_t ignore_enoent,
+ svn_boolean_t show_hidden,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
/* Get the working revision of @a local_abspath using @a wc_ctx. If @a
@@ -601,81 +679,6 @@ svn_wc__node_get_pre_ng_status_data(svn_revnum_t *revision,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
-
-/** This whole function is for legacy, and it sucks. It does not really
- * make sense to get the copy-from revision number without the copy-from
- * URL, but higher level code currently wants that. This should go away.
- * (This function serves to get away from entry_t->revision without having to
- * change the public API.)
- *
- * Get the base revision of @a local_abspath using @a wc_ctx. If @a
- * local_abspath is not in the working copy, return @c
- * SVN_ERR_WC_PATH_NOT_FOUND.
- *
- * Return the revision number of the base for this node's next commit,
- * reflecting any local tree modifications affecting this node.
- *
- * If this node has no uncommitted changes, return the same as
- * svn_wc__node_get_base_rev().
- *
- * If this node is moved-here or copied-here (possibly as part of a replace),
- * return the revision of the copy/move source. Do the same even when the node
- * has been removed from a recursive copy (subpath excluded from the copy).
- *
- * Else, if this node is locally added, return SVN_INVALID_REVNUM, or if this
- * node is locally deleted or replaced, return the revert-base revision.
- */
-svn_error_t *
-svn_wc__node_get_commit_base_rev(svn_revnum_t *base_revision,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *scratch_pool);
-
-/**
- * Fetch lock information (if any) for @a local_abspath using @a wc_ctx:
- *
- * Set @a *lock_token to the lock token (or NULL)
- * Set @a *lock_owner to the owner of the lock (or NULL)
- * Set @a *lock_comment to the comment associated with the lock (or NULL)
- * Set @a *lock_date to the timestamp of the lock (or 0)
- *
- * Any of the aforementioned return values may be NULL to indicate
- * that the caller doesn't care about those values.
- *
- * If @a local_abspath is not in the working copy, return @c
- * SVN_ERR_WC_PATH_NOT_FOUND.
- */
-svn_error_t *
-svn_wc__node_get_lock_info(const char **lock_token,
- const char **lock_owner,
- const char **lock_comment,
- apr_time_t *lock_date,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-/**
- * A hack to remove the last entry from libsvn_client. This simply fetches an
- * some values from WC-NG, and puts the needed bits into the output parameters,
- * allocated in @a result_pool.
- *
- * All output arguments can be NULL to indicate that the
- * caller is not interested in the specific result.
- *
- * @a local_abspath and @a wc_ctx are what you think they are.
- */
-svn_error_t *
-svn_wc__node_get_conflict_info(const char **conflict_old,
- const char **conflict_new,
- const char **conflict_wrk,
- const char **prejfile,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-
/**
* Acquire a recursive write lock for @a local_abspath. If @a lock_anchor
* is true, determine if @a local_abspath has an anchor that should be locked
@@ -739,6 +742,35 @@ svn_wc__call_with_write_lock(svn_wc__with_write_lock_func_t func,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
+/** Evaluate the expression @a expr while holding a write lock on
+ * @a local_abspath.
+ *
+ * @a expr must yield an (svn_error_t *) error code. If the error code
+ * is not #SVN_NO_ERROR, cause the function using this macro to return
+ * the error to its caller.
+ *
+ * If @a lock_anchor is TRUE, determine if @a local_abspath has an anchor
+ * that should be locked instead.
+ *
+ * Use @a wc_ctx for working copy access.
+ *
+ * The lock is guaranteed to be released after evaluating @a expr.
+ */
+#define SVN_WC__CALL_WITH_WRITE_LOCK(expr, wc_ctx, local_abspath, \
+ lock_anchor, scratch_pool) \
+ do { \
+ svn_error_t *svn_wc__err1, *svn_wc__err2; \
+ const char *svn_wc__lock_root_abspath; \
+ SVN_ERR(svn_wc__acquire_write_lock(&svn_wc__lock_root_abspath, wc_ctx, \
+ local_abspath, lock_anchor, \
+ scratch_pool, scratch_pool)); \
+ svn_wc__err1 = (expr); \
+ svn_wc__err2 = svn_wc__release_write_lock( \
+ wc_ctx, svn_wc__lock_root_abspath, scratch_pool); \
+ SVN_ERR(svn_error_compose_create(svn_wc__err1, svn_wc__err2)); \
+ } while (0)
+
+
/**
* Calculates the schedule and copied status of a node as that would
* have been stored in an svn_wc_entry_t instance.
@@ -773,10 +805,6 @@ typedef svn_error_t *(*svn_wc__proplist_receiver_t)(void *baton,
* If @a propname is not NULL, the passed hash table will only contain
* the property @a propname.
*
- * If @a base_props is @c TRUE, get the unmodified BASE properties
- * from the working copy, instead of getting the current (or "WORKING")
- * properties.
- *
* If @a pristine is not @c TRUE, and @a base_props is FALSE show local
* modifications to the properties.
*
@@ -797,7 +825,6 @@ svn_wc__prop_list_recursive(svn_wc_context_t *wc_ctx,
const char *local_abspath,
const char *propname,
svn_depth_t depth,
- svn_boolean_t base_props,
svn_boolean_t pristine,
const apr_array_header_t *changelists,
svn_wc__proplist_receiver_t receiver_func,
@@ -806,6 +833,62 @@ svn_wc__prop_list_recursive(svn_wc_context_t *wc_ctx,
void *cancel_baton,
apr_pool_t *scratch_pool);
+/**
+ * Set @a *inherited_props to a depth-first ordered array of
+ * #svn_prop_inherited_item_t * structures representing the properties
+ * inherited by @a local_abspath from the ACTUAL tree above
+ * @a local_abspath (looking through to the WORKING or BASE tree as
+ * required), up to and including the root of the working copy and
+ * any cached inherited properties inherited by the root.
+ *
+ * The #svn_prop_inherited_item_t->path_or_url members of the
+ * #svn_prop_inherited_item_t * structures in @a *inherited_props are
+ * paths relative to the repository root URL for cached inherited
+ * properties and absolute working copy paths otherwise.
+ *
+ * Allocate @a *inherited_props in @a result_pool. Use @a scratch_pool
+ * for temporary allocations.
+ */
+svn_error_t *
+svn_wc__get_iprops(apr_array_header_t **inherited_props,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ const char *propname,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/** Obtain a mapping of const char * local_abspaths to const svn_string_t*
+ * property values in *VALUES, of all PROPNAME properties on LOCAL_ABSPATH
+ * and its descendants.
+ *
+ * Allocate the result in RESULT_POOL, and perform temporary allocations in
+ * SCRATCH_POOL.
+ */
+svn_error_t *
+svn_wc__prop_retrieve_recursive(apr_hash_t **values,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ const char *propname,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Set @a *iprops_paths to a hash mapping const char * absolute working
+ * copy paths to the nodes repository root relative path for each path
+ * in the working copy at or below @a local_abspath, limited by @a depth,
+ * that has cached inherited properties for the base node of the path.
+ *
+ * Allocate @a *iprop_paths
+ * in @a result_pool. Use @a scratch_pool for temporary allocations.
+ */
+svn_error_t *
+svn_wc__get_cached_iprop_children(apr_hash_t **iprop_paths,
+ svn_depth_t depth,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
/**
* For use by entries.c and entries-dump.c to read old-format working copies.
@@ -858,19 +941,6 @@ svn_wc__min_max_revisions(svn_revnum_t *min_revision,
svn_boolean_t committed,
apr_pool_t *scratch_pool);
-/* Indicate in @a *is_sparse_checkout whether any of the nodes within
- * @a local_abspath is sparse, using context @a wc_ctx.
- * Use @a scratch_pool for temporary allocations.
- *
- * This function provides a subset of the functionality of
- * svn_wc_revision_status2() and is more efficient if the caller
- * doesn't need all information returned by svn_wc_revision_status2(). */
-svn_error_t *
-svn_wc__is_sparse_checkout(svn_boolean_t *is_sparse_checkout,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *scratch_pool);
-
/* Indicate in @a is_switched whether any node beneath @a local_abspath
* is switched, using context @a wc_ctx.
* Use @a scratch_pool for temporary allocations.
@@ -891,20 +961,20 @@ svn_wc__has_switched_subtrees(svn_boolean_t *is_switched,
const char *trail_url,
apr_pool_t *scratch_pool);
-/* Set @a *server_excluded_subtrees to a hash mapping <tt>const char *</tt>
+/* Set @a *excluded_subtrees to a hash mapping <tt>const char *</tt>
* local * absolute paths to <tt>const char *</tt> local absolute paths for
- * every path at or under @a local_abspath in @a wc_ctx which are excluded
- * by the server (e.g. because of authz).
- * If no server-excluded paths are found then @a *server_excluded_subtrees
+ * every path under @a local_abspath in @a wc_ctx which are excluded
+ * by the server (e.g. because of authz) or the users.
+ * If no excluded paths are found then @a *server_excluded_subtrees
* is set to @c NULL.
* Allocate the hash and all items therein from @a result_pool.
*/
svn_error_t *
-svn_wc__get_server_excluded_subtrees(apr_hash_t **server_excluded_subtrees,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
+svn_wc__get_excluded_subtrees(apr_hash_t **server_excluded_subtrees,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
/* Indicate in @a *is_modified whether the working copy has local
* modifications, using context @a wc_ctx.
@@ -932,6 +1002,16 @@ svn_wc__rename_wc(svn_wc_context_t *wc_ctx,
const char *dst_abspath,
apr_pool_t *scratch_pool);
+/* Set *TMPDIR_ABSPATH to a directory that is suitable for temporary
+ files which may need to be moved (atomically and same-device) into
+ the working copy indicated by WRI_ABSPATH. */
+svn_error_t *
+svn_wc__get_tmpdir(const char **tmpdir_abspath,
+ svn_wc_context_t *wc_ctx,
+ const char *wri_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
/* Gets information needed by the commit harvester.
*
* ### Currently this API is work in progress and is designed for just this
@@ -939,23 +1019,13 @@ svn_wc__rename_wc(svn_wc_context_t *wc_ctx,
* ### it's caller will eventually move into a wc and maybe wc_db api.
*/
svn_error_t *
-svn_wc__node_get_commit_status(svn_node_kind_t *kind,
- svn_boolean_t *added,
+svn_wc__node_get_commit_status(svn_boolean_t *added,
svn_boolean_t *deleted,
- svn_boolean_t *replaced,
- svn_boolean_t *not_present,
- svn_boolean_t *excluded,
+ svn_boolean_t *is_replace_root,
svn_boolean_t *is_op_root,
- svn_boolean_t *symlink,
svn_revnum_t *revision,
- const char **repos_relpath,
svn_revnum_t *original_revision,
const char **original_repos_relpath,
- svn_boolean_t *conflicted,
- const char **changelist,
- svn_boolean_t *props_mod,
- svn_boolean_t *update_root,
- const char **lock_token,
svn_wc_context_t *wc_ctx,
const char *local_abspath,
apr_pool_t *result_pool,
@@ -974,6 +1044,17 @@ svn_wc__node_get_md5_from_sha1(const svn_checksum_t **md5_checksum,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
+/* Like svn_wc_get_pristine_contents2(), but keyed on the CHECKSUM
+ rather than on the local absolute path of the working file.
+ WRI_ABSPATH is any versioned path of the working copy in whose
+ pristine database we'll be looking for these contents. */
+svn_error_t *
+svn_wc__get_pristine_contents_by_checksum(svn_stream_t **contents,
+ svn_wc_context_t *wc_ctx,
+ const char *wri_abspath,
+ const svn_checksum_t *checksum,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
/* Gets an array of const char *repos_relpaths of descendants of LOCAL_ABSPATH,
* which must be the op root of an addition, copy or move. The descendants
@@ -1004,14 +1085,14 @@ svn_wc__get_not_present_descendants(const apr_array_header_t **descendants,
* If KIND is not NULL, set *KIND to the kind of node registered in the working
* copy, or SVN_NODE_NONE if the node doesn't
*
- * If ADDED is not NULL, set *ADDED to TRUE if the node is added. (Addition,
- * copy or moved).
- *
* If DELETED is not NULL, set *DELETED to TRUE if the node is marked as
* deleted in the working copy.
*
- * If CONFLICTED is not NULL, set *CONFLICTED to TRUE if the node is somehow
- * conflicted.
+ * If EXCLUDED is not NULL, set *EXCLUDED to TRUE if the node is marked as
+ * user or server excluded.
+ *
+ * If PARENT_DEPTH is not NULL, set *PARENT_DEPTH to the depth stored on the
+ * parent. (Set to svn_depth_unknown if LOCAL_ABSPATH itself exists as node)
*
* All output arguments except OBSTRUCTION_STATE can be NULL to ommit the
* result.
@@ -1021,9 +1102,9 @@ svn_wc__get_not_present_descendants(const apr_array_header_t **descendants,
svn_error_t *
svn_wc__check_for_obstructions(svn_wc_notify_state_t *obstruction_state,
svn_node_kind_t *kind,
- svn_boolean_t *added,
svn_boolean_t *deleted,
- svn_boolean_t *conflicted,
+ svn_boolean_t *excluded,
+ svn_depth_t *parent_depth,
svn_wc_context_t *wc_ctx,
const char *local_abspath,
svn_boolean_t no_wcroot_check,
@@ -1112,6 +1193,653 @@ svn_wc__get_info(svn_wc_context_t *wc_ctx,
void *cancel_baton,
apr_pool_t *scratch_pool);
+/* Alternative version of svn_wc_delete4().
+ * It can delete multiple TARGETS more efficiently (within a single sqlite
+ * transaction per working copy), but lacks support for moves.
+ *
+ * ### Inconsistency: if DELETE_UNVERSIONED_TARGET is FALSE and a target is
+ * unversioned, svn_wc__delete_many() will continue whereas
+ * svn_wc_delete4() will throw an error.
+ */
+svn_error_t *
+svn_wc__delete_many(svn_wc_context_t *wc_ctx,
+ const apr_array_header_t *targets,
+ svn_boolean_t keep_local,
+ svn_boolean_t delete_unversioned_target,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool);
+
+
+/* If the node at LOCAL_ABSPATH was moved away set *MOVED_TO_ABSPATH to
+ * the absolute path of the copied move-target node, and *COPY_OP_ROOT_ABSPATH
+ * to the absolute path of the root node of the copy operation.
+ *
+ * If the node was not moved, set *MOVED_TO_ABSPATH and *COPY_OP_ROOT_ABSPATH
+ * to NULL.
+ *
+ * Either MOVED_TO_ABSPATH or OP_ROOT_ABSPATH may be NULL to indicate
+ * that the caller is not interested in the result.
+ */
+svn_error_t *
+svn_wc__node_was_moved_away(const char **moved_to_abspath,
+ const char **copy_op_root_abspath,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* If the node at LOCAL_ABSPATH was moved here set *MOVED_FROM_ABSPATH to
+ * the absolute path of the deleted move-source node, and set
+ * *DELETE_OP_ROOT_ABSPATH to the absolute path of the root node of the
+ * delete operation.
+ *
+ * If the node was not moved, set *MOVED_FROM_ABSPATH and
+ * *DELETE_OP_ROOT_ABSPATH to NULL.
+ *
+ * Either MOVED_FROM_ABSPATH or OP_ROOT_ABSPATH may be NULL to indicate
+ * that the caller is not interested in the result.
+ */
+svn_error_t *
+svn_wc__node_was_moved_here(const char **moved_from_abspath,
+ const char **delete_op_root_abspath,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* During an upgrade to wc-ng, supply known details about an existing
+ * external. The working copy will suck in and store the information supplied
+ * about the existing external at @a local_abspath. */
+svn_error_t *
+svn_wc__upgrade_add_external_info(svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ svn_node_kind_t kind,
+ const char *def_local_abspath,
+ const char *repos_relpath,
+ const char *repos_root_url,
+ const char *repos_uuid,
+ svn_revnum_t def_peg_revision,
+ svn_revnum_t def_revision,
+ apr_pool_t *scratch_pool);
+
+/* If the URL for @a item is relative, then using the repository root
+ URL @a repos_root_url and the parent directory URL @parent_dir_url,
+ resolve it into an absolute URL and save it in @a *resolved_url.
+
+ Regardless if the URL is absolute or not, if there are no errors,
+ the URL returned in @a *resolved_url will be canonicalized.
+
+ The following relative URL formats are supported:
+
+ ../ relative to the parent directory of the external
+ ^/ relative to the repository root
+ // relative to the scheme
+ / relative to the server's hostname
+
+ The ../ and ^/ relative URLs may use .. to remove path elements up
+ to the server root.
+
+ The external URL should not be canonicalized before calling this function,
+ as otherwise the scheme relative URL '//host/some/path' would have been
+ canonicalized to '/host/some/path' and we would not be able to match on
+ the leading '//'. */
+svn_error_t *
+svn_wc__resolve_relative_external_url(const char **resolved_url,
+ const svn_wc_external_item2_t *item,
+ const char *repos_root_url,
+ const char *parent_dir_url,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
+/**
+ * Set @a *editor and @a *edit_baton to an editor that generates
+ * #svn_wc_status3_t structures and sends them through @a status_func /
+ * @a status_baton. @a anchor_abspath is a working copy directory
+ * directory which will be used as the root of our editor. If @a
+ * target_basename is not "", it represents a node in the @a anchor_abspath
+ * which is the subject of the editor drive (otherwise, the @a
+ * anchor_abspath is the subject).
+ *
+ * If @a set_locks_baton is non-@c NULL, it will be set to a baton that can
+ * be used in a call to the svn_wc_status_set_repos_locks() function.
+ *
+ * Callers drive this editor to describe working copy out-of-dateness
+ * with respect to the repository. If this information is not
+ * available or not desired, callers should simply call the
+ * close_edit() function of the @a editor vtable.
+ *
+ * If the editor driver calls @a editor's set_target_revision() vtable
+ * function, then when the edit drive is completed, @a *edit_revision
+ * will contain the revision delivered via that interface.
+ *
+ * Assuming the target is a directory, then:
+ *
+ * - If @a get_all is FALSE, then only locally-modified entries will be
+ * returned. If TRUE, then all entries will be returned.
+ *
+ * - If @a depth is #svn_depth_empty, a status structure will
+ * be returned for the target only; if #svn_depth_files, for the
+ * target and its immediate file children; if
+ * #svn_depth_immediates, for the target and its immediate
+ * children; if #svn_depth_infinity, for the target and
+ * everything underneath it, fully recursively.
+ *
+ * If @a depth is #svn_depth_unknown, take depths from the
+ * working copy and behave as above in each directory's case.
+ *
+ * If the given @a depth is incompatible with the depth found in a
+ * working copy directory, the found depth always governs.
+ *
+ * If @a no_ignore is set, statuses that would typically be ignored
+ * will instead be reported.
+ *
+ * @a ignore_patterns is an array of file patterns matching
+ * unversioned files to ignore for the purposes of status reporting,
+ * or @c NULL if the default set of ignorable file patterns should be used.
+ *
+ * If @a cancel_func is non-NULL, call it with @a cancel_baton while building
+ * the @a statushash to determine if the client has canceled the operation.
+ *
+ * If @a depth_as_sticky is set handle @a depth like when depth_is_sticky is
+ * passed for updating. This will show excluded nodes show up as added in the
+ * repository.
+ *
+ * If @a server_performs_filtering is TRUE, assume that the server handles
+ * the ambient depth filtering, so this doesn't have to be handled in the
+ * editor.
+ *
+ * Allocate the editor itself in @a result_pool, and use @a scratch_pool
+ * for temporary allocations. The editor will do its temporary allocations
+ * in a subpool of @a result_pool.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_wc__get_status_editor(const svn_delta_editor_t **editor,
+ void **edit_baton,
+ void **set_locks_baton,
+ svn_revnum_t *edit_revision,
+ svn_wc_context_t *wc_ctx,
+ const char *anchor_abspath,
+ const char *target_basename,
+ svn_depth_t depth,
+ svn_boolean_t get_all,
+ svn_boolean_t no_ignore,
+ svn_boolean_t depth_as_sticky,
+ svn_boolean_t server_performs_filtering,
+ const apr_array_header_t *ignore_patterns,
+ svn_wc_status_func4_t status_func,
+ void *status_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
+/**
+ * Set @a *editor and @a *edit_baton to an editor and baton for updating a
+ * working copy.
+ *
+ * @a anchor_abspath is a local working copy directory, with a fully recursive
+ * write lock in @a wc_ctx, which will be used as the root of our editor.
+ *
+ * @a target_basename is the entry in @a anchor_abspath that will actually be
+ * updated, or the empty string if all of @a anchor_abspath should be updated.
+ *
+ * The editor invokes @a notify_func with @a notify_baton as the update
+ * progresses, if @a notify_func is non-NULL.
+ *
+ * If @a cancel_func is non-NULL, the editor will invoke @a cancel_func with
+ * @a cancel_baton as the update progresses to see if it should continue.
+ *
+ * If @a conflict_func is non-NULL, then invoke it with @a
+ * conflict_baton whenever a conflict is encountered, giving the
+ * callback a chance to resolve the conflict before the editor takes
+ * more drastic measures (such as marking a file conflicted, or
+ * bailing out of the update).
+ *
+ * If @a external_func is non-NULL, then invoke it with @a external_baton
+ * whenever external changes are encountered, giving the callback a chance
+ * to store the external information for processing.
+ *
+ * If @a diff3_cmd is non-NULL, then use it as the diff3 command for
+ * any merging; otherwise, use the built-in merge code.
+ *
+ * @a preserved_exts is an array of filename patterns which, when
+ * matched against the extensions of versioned files, determine for
+ * which such files any related generated conflict files will preserve
+ * the original file's extension as their own. If a file's extension
+ * does not match any of the patterns in @a preserved_exts (which is
+ * certainly the case if @a preserved_exts is @c NULL or empty),
+ * generated conflict files will carry Subversion's custom extensions.
+ *
+ * @a target_revision is a pointer to a revision location which, after
+ * successful completion of the drive of this editor, will be
+ * populated with the revision to which the working copy was updated.
+ *
+ * @a wcroot_iprops is a hash mapping const char * absolute working copy
+ * paths which are working copy roots (at or under the target within the
+ * constraints dictated by @a depth) to depth-first ordered arrays of
+ * svn_prop_inherited_item_t * structures which represent the inherited
+ * properties for the base of those paths at @a target_revision. After a
+ * successful drive of this editor, the base nodes for these paths will
+ * have their inherited properties cache updated with the values from
+ * @a wcroot_iprops.
+ *
+ * If @a use_commit_times is TRUE, then all edited/added files will
+ * have their working timestamp set to the last-committed-time. If
+ * FALSE, the working files will be touched with the 'now' time.
+ *
+ * If @a allow_unver_obstructions is TRUE, then allow unversioned
+ * obstructions when adding a path.
+ *
+ * If @a adds_as_modification is TRUE, a local addition at the same path
+ * as an incoming addition of the same node kind results in a normal node
+ * with a possible local modification, instead of a tree conflict.
+ *
+ * If @a depth is #svn_depth_infinity, update fully recursively.
+ * Else if it is #svn_depth_immediates, update the uppermost
+ * directory, its file entries, and the presence or absence of
+ * subdirectories (but do not descend into the subdirectories).
+ * Else if it is #svn_depth_files, update the uppermost directory
+ * and its immediate file entries, but not subdirectories.
+ * Else if it is #svn_depth_empty, update exactly the uppermost
+ * target, and don't touch its entries.
+ *
+ * If @a depth_is_sticky is set and @a depth is not
+ * #svn_depth_unknown, then in addition to updating PATHS, also set
+ * their sticky ambient depth value to @a depth.
+ *
+ * If @a server_performs_filtering is TRUE, assume that the server handles
+ * the ambient depth filtering, so this doesn't have to be handled in the
+ * editor.
+ *
+ * If @a clean_checkout is TRUE, assume that we are checking out into an
+ * empty directory, and so bypass a number of conflict checks that are
+ * unnecessary in this case.
+ *
+ * If @a fetch_dirents_func is not NULL, the update editor may call this
+ * callback, when asked to perform a depth restricted update. It will do this
+ * before returning the editor to allow using the primary ra session for this.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_wc__get_update_editor(const svn_delta_editor_t **editor,
+ void **edit_baton,
+ svn_revnum_t *target_revision,
+ svn_wc_context_t *wc_ctx,
+ const char *anchor_abspath,
+ const char *target_basename,
+ apr_hash_t *wcroot_iprops,
+ svn_boolean_t use_commit_times,
+ svn_depth_t depth,
+ svn_boolean_t depth_is_sticky,
+ svn_boolean_t allow_unver_obstructions,
+ svn_boolean_t adds_as_modification,
+ svn_boolean_t server_performs_filtering,
+ svn_boolean_t clean_checkout,
+ const char *diff3_cmd,
+ const apr_array_header_t *preserved_exts,
+ svn_wc_dirents_func_t fetch_dirents_func,
+ void *fetch_dirents_baton,
+ svn_wc_conflict_resolver_func2_t conflict_func,
+ void *conflict_baton,
+ svn_wc_external_update_t external_func,
+ void *external_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
+/**
+ * A variant of svn_wc__get_update_editor().
+ *
+ * Set @a *editor and @a *edit_baton to an editor and baton for "switching"
+ * a working copy to a new @a switch_url. (Right now, this URL must be
+ * within the same repository that the working copy already comes
+ * from.) @a switch_url must not be @c NULL.
+ *
+ * All other parameters behave as for svn_wc__get_update_editor().
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_wc__get_switch_editor(const svn_delta_editor_t **editor,
+ void **edit_baton,
+ svn_revnum_t *target_revision,
+ svn_wc_context_t *wc_ctx,
+ const char *anchor_abspath,
+ const char *target_basename,
+ const char *switch_url,
+ apr_hash_t *wcroot_iprops,
+ svn_boolean_t use_commit_times,
+ svn_depth_t depth,
+ svn_boolean_t depth_is_sticky,
+ svn_boolean_t allow_unver_obstructions,
+ svn_boolean_t server_performs_filtering,
+ const char *diff3_cmd,
+ const apr_array_header_t *preserved_exts,
+ svn_wc_dirents_func_t fetch_dirents_func,
+ void *fetch_dirents_baton,
+ svn_wc_conflict_resolver_func2_t conflict_func,
+ void *conflict_baton,
+ svn_wc_external_update_t external_func,
+ void *external_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
+
+/**
+ * Return an @a editor/@a edit_baton for diffing a working copy against the
+ * repository. The editor is allocated in @a result_pool; temporary
+ * calculations are performed in @a scratch_pool.
+ *
+ * This editor supports diffing either the actual files and properties in the
+ * working copy (when @a use_text_base is #FALSE), or the current pristine
+ * information (when @a use_text_base is #TRUE) against the editor driver.
+ *
+ * @a anchor_abspath/@a target represent the base of the hierarchy to be
+ * compared. The diff callback paths will be relative to this path.
+ *
+ * Diffs will be reported as valid relpaths, with @a anchor_abspath being
+ * the root ("").
+ *
+ * @a callbacks/@a callback_baton is the callback table to use.
+ *
+ * If @a depth is #svn_depth_empty, just diff exactly @a target or
+ * @a anchor_path if @a target is empty. If #svn_depth_files then do the same
+ * and for top-level file entries as well (if any). If
+ * #svn_depth_immediates, do the same as #svn_depth_files but also diff
+ * top-level subdirectories at #svn_depth_empty. If #svn_depth_infinity,
+ * then diff fully recursively. If @a depth is #svn_depth_unknown, then...
+ *
+ * ### ... then the @a server_performs_filtering option is meaningful.
+ * ### But what does this depth mean exactly? Something about 'ambient'
+ * ### depth? How does it compare with depth 'infinity'?
+ *
+ * @a ignore_ancestry determines whether paths that have discontinuous node
+ * ancestry are treated as delete/add or as simple modifications. If
+ * @a ignore_ancestry is @c FALSE, then any discontinuous node ancestry will
+ * result in the diff given as a full delete followed by an add.
+ *
+ * @a show_copies_as_adds determines whether paths added with history will
+ * appear as a diff against their copy source, or whether such paths will
+ * appear as if they were newly added in their entirety.
+ *
+ * If @a use_git_diff_format is TRUE, copied paths will be treated as added
+ * if they weren't modified after being copied. This allows the callbacks
+ * to generate appropriate --git diff headers for such files.
+ *
+ * Normally, the difference from repository->working_copy is shown.
+ * If @a reverse_order is TRUE, then show working_copy->repository diffs.
+ *
+ * If @a cancel_func is non-NULL, it will be used along with @a cancel_baton
+ * to periodically check if the client has canceled the operation.
+ *
+ * @a changelist_filter is an array of <tt>const char *</tt> changelist
+ * names, used as a restrictive filter on items whose differences are
+ * reported; that is, don't generate diffs about any item unless
+ * it's a member of one of those changelists. If @a changelist_filter is
+ * empty (or altogether @c NULL), no changelist filtering occurs.
+ *
+ * If @a server_performs_filtering is TRUE, assume that the server handles
+ * the ambient depth filtering, so this doesn't have to be handled in the
+ * editor.
+ *
+ *
+ * A diagram illustrating how this function is used.
+ *
+ * Steps 1 and 2 create the chain; step 3 drives it.
+ *
+ * 1. svn_wc__get_diff_editor(diff_cbs)
+ * | ^
+ * 2. svn_ra_do_diff3(editor) | |
+ * | ^ | |
+ * v | v |
+ * +----------+ +----------+ +----------+
+ * | | | | | |
+ * +--> | reporter | ----> | editor | ----> | diff_cbs | ----> text
+ * | | | | | | | out
+ * | +----------+ +----------+ +----------+
+ * |
+ * 3. svn_wc_crawl_revisions5(WC,reporter)
+ *
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_wc__get_diff_editor(const svn_delta_editor_t **editor,
+ void **edit_baton,
+ svn_wc_context_t *wc_ctx,
+ const char *anchor_abspath,
+ const char *target,
+ svn_depth_t depth,
+ svn_boolean_t ignore_ancestry,
+ svn_boolean_t show_copies_as_adds,
+ svn_boolean_t use_git_diff_format,
+ svn_boolean_t use_text_base,
+ svn_boolean_t reverse_order,
+ svn_boolean_t server_performs_filtering,
+ const apr_array_header_t *changelist_filter,
+ const svn_wc_diff_callbacks4_t *callbacks,
+ void *callback_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/** Callback for the svn_diff_tree_processor_t wrapper, to allow handling
+ * notifications like how the repos diff in libsvn_client does.
+ *
+ * Probably only necessary while transitioning to svn_diff_tree_processor_t
+ */
+typedef svn_error_t *
+ (*svn_wc__diff_state_handle_t)(svn_boolean_t tree_conflicted,
+ svn_wc_notify_state_t *state,
+ svn_wc_notify_state_t *prop_state,
+ const char *relpath,
+ svn_node_kind_t kind,
+ svn_boolean_t before_op,
+ svn_boolean_t for_add,
+ svn_boolean_t for_delete,
+ void *state_baton,
+ apr_pool_t *scratch_pool);
+
+/** Callback for the svn_diff_tree_processor_t wrapper, to allow handling
+ * notifications like how the repos diff in libsvn_client does.
+ *
+ * Probably only necessary while transitioning to svn_diff_tree_processor_t
+ */
+typedef svn_error_t *
+ (*svn_wc__diff_state_close_t)(const char *relpath,
+ svn_node_kind_t kind,
+ void *state_baton,
+ apr_pool_t *scratch_pool);
+
+/** Callback for the svn_diff_tree_processor_t wrapper, to allow handling
+ * absent nodes.
+ *
+ * Probably only necessary while transitioning to svn_diff_tree_processor_t
+ */
+typedef svn_error_t *
+ (*svn_wc__diff_state_absent_t)(const char *relpath,
+ void *state_baton,
+ apr_pool_t *scratch_pool);
+
+/** Obtains a diff processor that will drive the diff callbacks when it
+ * is invoked.
+ */
+svn_error_t *
+svn_wc__wrap_diff_callbacks(const svn_diff_tree_processor_t **diff_processor,
+ const svn_wc_diff_callbacks4_t *callbacks,
+ void *callback_baton,
+ svn_boolean_t walk_deleted_dirs,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
+/**
+ * Assuming @a local_abspath itself or any of its children are under version
+ * control or a tree conflict victim and in a state of conflict, take these
+ * nodes out of this state.
+ *
+ * If @a resolve_text is TRUE then any text conflict is resolved,
+ * if @a resolve_tree is TRUE then any tree conflicts are resolved.
+ * If @a resolve_prop is set to "" all property conflicts are resolved,
+ * if it is set to any other string value, conflicts on that specific
+ * property are resolved and when resolve_prop is NULL, no property
+ * conflicts are resolved.
+ *
+ * If @a depth is #svn_depth_empty, act only on @a local_abspath; if
+ * #svn_depth_files, resolve @a local_abspath and its conflicted file
+ * children (if any); if #svn_depth_immediates, resolve @a local_abspath
+ * and all its immediate conflicted children (both files and directories,
+ * if any); if #svn_depth_infinity, resolve @a local_abspath and every
+ * conflicted file or directory anywhere beneath it.
+ *
+ * If @a conflict_choice is #svn_wc_conflict_choose_base, resolve the
+ * conflict with the old file contents; if
+ * #svn_wc_conflict_choose_mine_full, use the original working contents;
+ * if #svn_wc_conflict_choose_theirs_full, the new contents; and if
+ * #svn_wc_conflict_choose_merged, don't change the contents at all,
+ * just remove the conflict status, which is the pre-1.5 behavior.
+ *
+ * If @a conflict_choice is #svn_wc_conflict_choose_unspecified, invoke the
+ * @a conflict_func with the @a conflict_baton argument to obtain a
+ * resolution decision for each conflict.
+ *
+ * #svn_wc_conflict_choose_theirs_conflict and
+ * #svn_wc_conflict_choose_mine_conflict are not legal for binary
+ * files or properties.
+ *
+ * @a wc_ctx is a working copy context, with a write lock, for @a
+ * local_abspath.
+ *
+ * The implementation details are opaque, as our "conflicted" criteria
+ * might change over time. (At the moment, this routine removes the
+ * three fulltext 'backup' files and any .prej file created in a conflict,
+ * and modifies @a local_abspath's entry.)
+ *
+ * If @a local_abspath is not under version control and not a tree
+ * conflict, return #SVN_ERR_ENTRY_NOT_FOUND. If @a path isn't in a
+ * state of conflict to begin with, do nothing, and return #SVN_NO_ERROR.
+ *
+ * If @c local_abspath was successfully taken out of a state of conflict,
+ * report this information to @c notify_func (if non-@c NULL.) If only
+ * text, only property, or only tree conflict resolution was requested,
+ * and it was successful, then success gets reported.
+ *
+ * Temporary allocations will be performed in @a scratch_pool.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_wc__resolve_conflicts(svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ svn_depth_t depth,
+ svn_boolean_t resolve_text,
+ const char *resolve_prop,
+ svn_boolean_t resolve_tree,
+ svn_wc_conflict_choice_t conflict_choice,
+ svn_wc_conflict_resolver_func2_t conflict_func,
+ void *conflict_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Move @a src_abspath to @a dst_abspath, by scheduling @a dst_abspath
+ * for addition to the repository, remembering the history. Mark @a src_abspath
+ * as deleted after moving.@a wc_ctx is used for accessing the working copy and
+ * must contain a write lock for the parent directory of @a src_abspath and
+ * @a dst_abspath.
+ *
+ * If @a metadata_only is TRUE then this is a database-only operation and
+ * the working directories and files are not changed.
+ *
+ * @a src_abspath must be a file or directory under version control;
+ * the parent of @a dst_abspath must be a directory under version control
+ * in the same working copy; @a dst_abspath will be the name of the copied
+ * item, and it must not exist already if @a metadata_only is FALSE. Note that
+ * when @a src points to a versioned file, the working file doesn't
+ * necessarily exist in which case its text-base is used instead.
+ *
+ * If @a allow_mixed_revisions is @c FALSE, #SVN_ERR_WC_MIXED_REVISIONS
+ * will be raised if the move source is a mixed-revision subtree.
+ * If @a allow_mixed_revisions is TRUE, a mixed-revision move source is
+ * allowed but the move will degrade to a copy and a delete without local
+ * move tracking. This parameter should be set to FALSE except where backwards
+ * compatibility to svn_wc_move() is required.
+ *
+ * If @a cancel_func is non-NULL, call it with @a cancel_baton at
+ * various points during the operation. If it returns an error
+ * (typically #SVN_ERR_CANCELLED), return that error immediately.
+ *
+ * If @a notify_func is non-NULL, call it with @a notify_baton and the path
+ * of the root node (only) of the destination.
+ *
+ * Use @a scratch_pool for temporary allocations.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_wc__move2(svn_wc_context_t *wc_ctx,
+ const char *src_abspath,
+ const char *dst_abspath,
+ svn_boolean_t metadata_only,
+ svn_boolean_t allow_mixed_revisions,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool);
+
+
+/* During merge when we encounter added directories, we add them using
+ svn_wc_add4(), recording its original location, etc. But at that time
+ we don't have its original properties. This function allows updating the
+ BASE properties of such a special added node, but only before it receives
+ other changes.
+
+ NEW_ORIGINAL_PROPS is a new set of properties, including entry props that
+ will be applied to LOCAL_ABSPATH as pristine properties.
+
+ The copyfrom_* arguments are used to verify (some of) the assumptions of
+ this function */
+svn_error_t *
+svn_wc__complete_directory_add(svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_hash_t *new_original_props,
+ const char *copyfrom_url,
+ svn_revnum_t copyfrom_rev,
+ apr_pool_t *scratch_pool);
+
+
+/* Acquire a write lock on LOCAL_ABSPATH or an ancestor that covers
+ all possible paths affected by resolving the conflicts in the tree
+ LOCAL_ABSPATH. Set *LOCK_ROOT_ABSPATH to the path of the lock
+ obtained. */
+svn_error_t *
+svn_wc__acquire_write_lock_for_resolve(const char **lock_root_abspath,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/include/svn_auth.h b/subversion/include/svn_auth.h
index 04165aa..3e9f45e 100644
--- a/subversion/include/svn_auth.h
+++ b/subversion/include/svn_auth.h
@@ -416,8 +416,8 @@ typedef svn_error_t *(*svn_auth_username_prompt_func_t)(
#define SVN_AUTH_SSL_CNMISMATCH 0x00000004
/** @brief Certificate authority is unknown (i.e. not trusted) */
#define SVN_AUTH_SSL_UNKNOWNCA 0x00000008
-/** @brief Other failure. This can happen if neon has introduced a new
- * failure bit that we do not handle yet. */
+/** @brief Other failure. This can happen if an unknown failure occurs
+ * that we do not handle yet. */
#define SVN_AUTH_SSL_OTHER 0x40000000
/** @} */
@@ -569,11 +569,11 @@ svn_auth_get_parameter(svn_auth_baton_t *auth_baton,
/**
* @name Default credentials defines
- * Any 'default' credentials that came in through the application itself,
- * (e.g. --username and --password options). Property values are
- * const char *.
+ * Property values are const char *.
* @{ */
+/** Default username provided by the application itself (e.g. --username) */
#define SVN_AUTH_PARAM_DEFAULT_USERNAME SVN_AUTH_PARAM_PREFIX "username"
+/** Default password provided by the application itself (e.g. --password) */
#define SVN_AUTH_PARAM_DEFAULT_PASSWORD SVN_AUTH_PARAM_PREFIX "password"
/** @} */
@@ -590,19 +590,25 @@ svn_auth_get_parameter(svn_auth_baton_t *auth_baton,
/** @brief Indicates whether providers may save passwords to disk in
* plaintext. Property value can be either SVN_CONFIG_TRUE,
- * SVN_CONFIG_FALSE, or SVN_CONFIG_ASK. */
+ * SVN_CONFIG_FALSE, or SVN_CONFIG_ASK.
+ * @since New in 1.6.
+ */
#define SVN_AUTH_PARAM_STORE_PLAINTEXT_PASSWORDS SVN_AUTH_PARAM_PREFIX \
"store-plaintext-passwords"
/** @brief The application doesn't want any providers to save passphrase
* to disk. Property value is irrelevant; only property's existence
- * matters. */
+ * matters.
+ * @since New in 1.6.
+ */
#define SVN_AUTH_PARAM_DONT_STORE_SSL_CLIENT_CERT_PP \
SVN_AUTH_PARAM_PREFIX "dont-store-ssl-client-cert-pp"
/** @brief Indicates whether providers may save passphrase to disk in
* plaintext. Property value can be either SVN_CONFIG_TRUE,
- * SVN_CONFIG_FALSE, or SVN_CONFIG_ASK. */
+ * SVN_CONFIG_FALSE, or SVN_CONFIG_ASK.
+ * @since New in 1.6.
+ */
#define SVN_AUTH_PARAM_STORE_SSL_CLIENT_CERT_PP_PLAINTEXT \
SVN_AUTH_PARAM_PREFIX "store-ssl-client-cert-pp-plaintext"
@@ -622,9 +628,15 @@ svn_auth_get_parameter(svn_auth_baton_t *auth_baton,
#define SVN_AUTH_PARAM_SSL_SERVER_CERT_INFO SVN_AUTH_PARAM_PREFIX \
"ssl:cert-info"
-/** Some providers need access to the @c svn_config_t configuration. */
-#define SVN_AUTH_PARAM_CONFIG_CATEGORY_CONFIG SVN_AUTH_PARAM_PREFIX "config-category-config"
-#define SVN_AUTH_PARAM_CONFIG_CATEGORY_SERVERS SVN_AUTH_PARAM_PREFIX "config-category-servers"
+/** This provides a pointer to a @c svn_config_t containting the config
+ * category. */
+#define SVN_AUTH_PARAM_CONFIG_CATEGORY_CONFIG SVN_AUTH_PARAM_PREFIX \
+ "config-category-config"
+
+/** This provides a pointer to a @c svn_config_t containting the servers
+ * category. */
+#define SVN_AUTH_PARAM_CONFIG_CATEGORY_SERVERS SVN_AUTH_PARAM_PREFIX \
+ "config-category-servers"
/** @deprecated Provided for backward compatibility with the 1.5 API. */
#define SVN_AUTH_PARAM_CONFIG SVN_AUTH_PARAM_CONFIG_CATEGORY_SERVERS
@@ -683,6 +695,28 @@ svn_error_t *
svn_auth_save_credentials(svn_auth_iterstate_t *state,
apr_pool_t *pool);
+/** Forget a set (or all) memory-cached credentials.
+ *
+ * Remove references (if any) in @a auth_baton to credentials cached
+ * therein. If @a cred_kind and @a realmstring are non-NULL, forget
+ * only the credentials associated with those credential types and
+ * realm. Otherwise @a cred_kind and @a realmstring must both be
+ * NULL, and this function will forget all credentials cached within
+ * @a auth_baton.
+ *
+ * @note This function does not affect persisted authentication
+ * credential storage at all. It is merely a way to cause Subversion
+ * to forget about credentials already fetched from a provider,
+ * forcing them to be fetched again later should they be required.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_auth_forget_credentials(svn_auth_baton_t *auth_baton,
+ const char *cred_kind,
+ const char *realmstring,
+ apr_pool_t *pool);
+
/** @} */
/** Set @a *provider to an authentication provider of type
@@ -785,8 +819,8 @@ svn_auth_get_simple_provider(svn_auth_provider_object_t **provider,
* svn_auth_provider_object_t, or return @c NULL if the provider is not
* available for the requested platform or the requested provider is unknown.
*
- * Valid @a provider_name values are: "gnome_keyring", "keychain", "kwallet"
- * and "windows".
+ * Valid @a provider_name values are: "gnome_keyring", "keychain", "kwallet",
+ * "gpg_agent", and "windows".
*
* Valid @a provider_type values are: "simple", "ssl_client_cert_pw" and
* "ssl_server_trust".
@@ -820,7 +854,8 @@ svn_auth_get_platform_specific_provider(
* 1. gnome-keyring
* 2. kwallet
* 3. keychain
- * 4. windows-cryptoapi
+ * 4. gpg-agent
+ * 5. windows-cryptoapi
*
* @since New in 1.6.
*/
@@ -931,7 +966,10 @@ svn_auth_get_keychain_ssl_client_cert_pw_provider(
apr_pool_t *pool);
#endif /* DARWIN || DOXYGEN */
-#if (!defined(DARWIN) && !defined(WIN32)) || defined(DOXYGEN)
+/* Note that the gnome keyring unlock prompt related items below must be
+ * declared for all platforms in order to allow SWIG interfaces to be
+ * used regardless of the platform. */
+
/** A type of callback function for obtaining the GNOME Keyring password.
*
* In this callback, the client should ask the user for default keyring
@@ -961,7 +999,7 @@ typedef svn_error_t *(*svn_auth_gnome_keyring_unlock_prompt_func_t)(
* @c *SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_FUNC. */
#define SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_BATON "gnome-keyring-unlock-prompt-baton"
-
+#if (!defined(DARWIN) && !defined(WIN32)) || defined(DOXYGEN)
/**
* Get libsvn_auth_gnome_keyring version information.
*
@@ -1071,6 +1109,28 @@ svn_auth_get_kwallet_ssl_client_cert_pw_provider(
apr_pool_t *pool);
#endif /* (!DARWIN && !WIN32) || DOXYGEN */
+#if !defined(WIN32) || defined(DOXYGEN)
+/**
+ * Set @a *provider to an authentication provider of type @c
+ * svn_auth_cred_simple_t that gets/sets information from the user's
+ * ~/.subversion configuration directory.
+ *
+ * This is like svn_client_get_simple_provider(), except that the
+ * password is obtained from gpg_agent, which will keep it in
+ * a memory cache.
+ *
+ * Allocate @a *provider in @a pool.
+ *
+ * @since New in 1.8
+ * @note This function actually works only on systems with
+ * GNU Privacy Guard installed.
+ */
+void
+svn_auth_get_gpg_agent_simple_provider
+ (svn_auth_provider_object_t **provider,
+ apr_pool_t *pool);
+#endif /* !defined(WIN32) || defined(DOXYGEN) */
+
/** Set @a *provider to an authentication provider of type @c
* svn_auth_cred_username_t that gets/sets information from a user's
diff --git a/subversion/include/svn_checksum.h b/subversion/include/svn_checksum.h
index a8541ed..d3271f5 100644
--- a/subversion/include/svn_checksum.h
+++ b/subversion/include/svn_checksum.h
@@ -100,7 +100,8 @@ svn_checksum_match(const svn_checksum_t *checksum1,
/**
- * Return a deep copy of @a checksum, allocated in @a pool.
+ * Return a deep copy of @a checksum, allocated in @a pool. If @a
+ * checksum is NULL then NULL is returned.
*
* @since New in 1.6.
*/
@@ -239,6 +240,15 @@ svn_checksum_final(svn_checksum_t **checksum,
apr_size_t
svn_checksum_size(const svn_checksum_t *checksum);
+/**
+ * Return @c TRUE iff @a checksum matches the checksum for the empty
+ * string.
+ *
+ * @since New in 1.8.
+ */
+svn_boolean_t
+svn_checksum_is_empty_checksum(svn_checksum_t *checksum);
+
/**
* Return an error of type #SVN_ERR_CHECKSUM_MISMATCH for @a actual and
@@ -261,18 +271,6 @@ svn_checksum_mismatch_err(const svn_checksum_t *expected,
...)
__attribute__ ((format(printf, 4, 5)));
-
-/**
- * Internal function for creating a checksum from a binary digest.
- *
- * @since New in 1.6
- */
-svn_checksum_t *
-svn_checksum__from_digest(const unsigned char *digest,
- svn_checksum_kind_t kind,
- apr_pool_t *result_pool);
-
-
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/include/svn_client.h b/subversion/include/svn_client.h
index 517092b..5db3e16 100644
--- a/subversion/include/svn_client.h
+++ b/subversion/include/svn_client.h
@@ -355,10 +355,38 @@ typedef struct svn_client_proplist_item_t
} svn_client_proplist_item_t;
/**
- * The callback invoked by svn_client_proplist3(). Each invocation
- * provides the regular properties of @a path which is either a WC path or
- * a URL. @a prop_hash maps property names (char *) to property
- values (svn_string_t *). Use @a pool for all temporary allocation.
+ * The callback invoked by svn_client_proplist4(). Each invocation
+ * provides the regular and/or inherited properties of @a path, which is
+ * either a working copy path or a URL. If @a prop_hash is not @c NULL, then
+ * it maps explicit <tt>const char *</tt> property names to
+ * <tt>svn_string_t *</tt> explicit property values. If @a inherited_props
+ * is not @c NULL, then it is a depth-first ordered array of
+ * #svn_prop_inherited_item_t * structures representing the
+ * properties inherited by @a path. Use @a scratch_pool for all temporary
+ * allocations.
+ *
+ * The #svn_prop_inherited_item_t->path_or_url members of the
+ * #svn_prop_inherited_item_t * structures in @a inherited_props are
+ * URLs if @a path is a URL or if @a path is a working copy path but the
+ * property represented by the structure is above the working copy root (i.e.
+ * the inherited property is from the cache). In all other cases the
+ * #svn_prop_inherited_item_t->path_or_url members are absolute working copy
+ * paths.
+ *
+ * @since New in 1.8.
+ */
+typedef svn_error_t *(*svn_proplist_receiver2_t)(
+ void *baton,
+ const char *path,
+ apr_hash_t *prop_hash,
+ apr_array_header_t *inherited_props,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Similar to #svn_proplist_receiver2_t, but doesn't return inherited
+ * properties.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*
* @since New in 1.5.
*/
@@ -411,8 +439,18 @@ typedef struct svn_client_commit_info_t
#define SVN_CLIENT_COMMIT_ITEM_TEXT_MODS 0x04
#define SVN_CLIENT_COMMIT_ITEM_PROP_MODS 0x08
#define SVN_CLIENT_COMMIT_ITEM_IS_COPY 0x10
-/** @since New in 1.2. */
+/** One of the flags for a commit item. The node has a lock token that
+ * should be released after a successful commit and, if the node is also
+ * modified, transferred to the server as part of the commit process.
+ *
+ * @since New in 1.2. */
#define SVN_CLIENT_COMMIT_ITEM_LOCK_TOKEN 0x20
+/** One of the flags for a commit item. The node is the 'moved here'
+ * side of a local move. This is used to check and enforce that the
+ * other side of the move is also included in the commit.
+ *
+ * @since New in 1.8. */
+#define SVN_CLIENT_COMMIT_ITEM_MOVED_HERE 0x40
/** @} */
/** The commit candidate structure.
@@ -477,8 +515,19 @@ typedef struct svn_client_commit_item3_t
/**
* When processing the commit this contains the relative path for
* the commit session. #NULL until the commit item is preprocessed.
+ * @since New in 1.7.
*/
const char *session_relpath;
+
+ /**
+ * When committing a move, this contains the absolute path where
+ * the node was directly moved from. (If an ancestor at the original
+ * location was moved then it points to where the node itself was
+ * moved from; not the original location.)
+ * @since New in 1.8.
+ */
+ const char *moved_from_abspath;
+
} svn_client_commit_item3_t;
/** The commit candidate structure.
@@ -969,7 +1018,10 @@ typedef struct svn_client_ctx_t
/** Initialize a client context.
* Set @a *ctx to a client context object, allocated in @a pool, that
- * represents a particular instance of an svn client.
+ * represents a particular instance of an svn client. @a cfg_hash is used
+ * to initialise the config member of the returned context object and should
+ * remain valid for the lifetime of the object. @a cfg_hash may be @c NULL,
+ * in which case it is ignored.
*
* In order to avoid backwards compatibility problems, clients must
* use this function to initialize and allocate the
@@ -978,8 +1030,21 @@ typedef struct svn_client_ctx_t
*
* The current implementation never returns error, but callers should
* still check for error, for compatibility with future versions.
+ *
+ * @since New in 1.8.
*/
svn_error_t *
+svn_client_create_context2(svn_client_ctx_t **ctx,
+ apr_hash_t *cfg_hash,
+ apr_pool_t *pool);
+
+
+/** Similar to svn_client_create_context2 but passes a NULL @a cfg_hash.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ */
+SVN_DEPRECATED
+svn_error_t *
svn_client_create_context(svn_client_ctx_t **ctx,
apr_pool_t *pool);
@@ -1045,7 +1110,7 @@ svn_client_args_to_target_array2(apr_array_header_t **targets_p,
svn_boolean_t keep_last_origpath_on_truepath_collision,
apr_pool_t *pool);
-/*
+/**
* Similar to svn_client_args_to_target_array2() but with
* @a keep_last_origpath_on_truepath_collision always set to FALSE.
*
@@ -1464,16 +1529,15 @@ svn_client_switch(svn_revnum_t *result_rev,
* @a path and everything under it fully recursively.
*
* @a path's parent must be under revision control already (unless
- * @a add_parents is TRUE), but @a path is not. If @a recursive is
- * set, then assuming @a path is a directory, all of its contents will
- * be scheduled for addition as well.
+ * @a add_parents is TRUE), but @a path is not.
*
* If @a force is not set and @a path is already under version
* control, return the error #SVN_ERR_ENTRY_EXISTS. If @a force is
* set, do not error on already-versioned items. When used on a
- * directory in conjunction with the @a recursive flag, this has the
- * effect of scheduling for addition unversioned files and directories
- * scattered deep within a versioned tree.
+ * directory in conjunction with a @a depth value greater than
+ * #svn_depth_empty, this has the effect of scheduling for addition
+ * any unversioned files and directories scattered within even a
+ * versioned tree (up to @a depth).
*
* If @a ctx->notify_func2 is non-NULL, then for each added item, call
* @a ctx->notify_func2 with @a ctx->notify_baton2 and the path of the
@@ -1488,18 +1552,43 @@ svn_client_switch(svn_revnum_t *result_rev,
* behaviour only when recursing into an already versioned directory with @a
* force.)
*
+ * If @a no_autoprops is TRUE, don't set any autoprops on added files. If
+ * @a no_autoprops is FALSE then all added files have autprops set as per
+ * the auto-props list in @a ctx->config and the value of any
+ * @c SVN_PROP_INHERITABLE_AUTO_PROPS properties inherited by the nearest
+ * parents of @a path which are already under version control.
+ *
* If @a add_parents is TRUE, recurse up @a path's directory and look for
* a versioned directory. If found, add all intermediate paths between it
* and @a path. If not found, return #SVN_ERR_CLIENT_NO_VERSIONED_PARENT.
*
+ * @a scratch_pool is used for temporary allocations only.
+ *
* @par Important:
* This is a *scheduling* operation. No changes will
* happen to the repository until a commit occurs. This scheduling
* can be removed with svn_client_revert2().
*
- * @since New in 1.5.
+ * @since New in 1.8.
*/
svn_error_t *
+svn_client_add5(const char *path,
+ svn_depth_t depth,
+ svn_boolean_t force,
+ svn_boolean_t no_ignore,
+ svn_boolean_t no_autoprops,
+ svn_boolean_t add_parents,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_client_add5(), but with @a no_autoprops always set to
+ * FALSE.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ */
+SVN_DEPRECATED
+svn_error_t *
svn_client_add4(const char *path,
svn_depth_t depth,
svn_boolean_t force,
@@ -1560,6 +1649,9 @@ svn_client_add(const char *path,
/** Create a directory, either in a repository or a working copy.
*
+ * @a paths is an array of (const char *) paths, either all local WC paths
+ * or all URLs.
+ *
* If @a paths contains URLs, use the authentication baton in @a ctx
* and @a message to immediately attempt to commit the creation of the
* directories in @a paths in the repository.
@@ -1655,6 +1747,9 @@ svn_client_mkdir(svn_client_commit_info_t **commit_info_p,
/** Delete items from a repository or working copy.
*
+ * @a paths is an array of (const char *) paths, either all local WC paths
+ * or all URLs.
+ *
* If the paths in @a paths are URLs, use the authentication baton in
* @a ctx and @a ctx->log_msg_func3/@a ctx->log_msg_baton3 to
* immediately attempt to commit a deletion of the URLs from the
@@ -1761,6 +1856,31 @@ svn_client_delete(svn_client_commit_info_t **commit_info_p,
* @{
*/
+/**
+ * The callback invoked by svn_client_import5() before adding a node to the
+ * list of nodes to be imported.
+ *
+ * @a baton is the value passed to @a svn_client_import5 as filter_baton.
+ *
+ * The callback receives the @a local_abspath for each node and the @a dirent
+ * for it when walking the directory tree. Only the kind of node, including
+ * special status is available in @a dirent.
+ *
+ * Implementations can set @a *filtered to TRUE, to make the import
+ * process omit the node and (if the node is a directory) all its
+ * descendants.
+ *
+ * @a scratch_pool can be used for temporary allocations.
+ *
+ * @since New in 1.8.
+ */
+typedef svn_error_t *(*svn_client_import_filter_func_t)(
+ void *baton,
+ svn_boolean_t *filtered,
+ const char *local_abspath,
+ const svn_io_dirent2_t *dirent,
+ apr_pool_t *scratch_pool);
+
/** Import file or directory @a path into repository directory @a url at
* head, authenticating with the authentication baton cached in @a ctx,
* and using @a ctx->log_msg_func3/@a ctx->log_msg_baton3 to get a log message
@@ -1786,7 +1906,7 @@ svn_client_delete(svn_client_commit_info_t **commit_info_p,
* actions: #svn_wc_notify_commit_added,
* #svn_wc_notify_commit_postfix_txdelta.
*
- * Use @a pool for any temporary allocation.
+ * Use @a scratch_pool for any temporary allocation.
*
* If non-NULL, @a revprop_table is a hash table holding additional,
* custom revision properties (<tt>const char *</tt> names mapped to
@@ -1813,15 +1933,49 @@ svn_client_delete(svn_client_commit_info_t **commit_info_p,
* if the target is part of a WC the import ignores any existing
* properties.)
*
+ * If @a no_autoprops is TRUE, don't set any autoprops on imported files. If
+ * @a no_autoprops is FALSE then all imported files have autprops set as per
+ * the auto-props list in @a ctx->config and the value of any
+ * @c SVN_PROP_INHERITABLE_AUTO_PROPS properties inherited by and explicitly set
+ * on @a url if @a url is already under versioned control, or the nearest parents
+ * of @a path which are already under version control if not.
+ *
* If @a ignore_unknown_node_types is @c FALSE, ignore files of which the
* node type is unknown, such as device files and pipes.
*
+ * If @a filter_callback is non-NULL, call it for each node that isn't ignored
+ * for other reasons with @a filter_baton, to allow third party to ignore
+ * specific nodes during importing.
+ *
* If @a commit_callback is non-NULL, then for each successful commit, call
* @a commit_callback with @a commit_baton and a #svn_commit_info_t for
* the commit.
*
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_client_import5(const char *path,
+ const char *url,
+ svn_depth_t depth,
+ svn_boolean_t no_ignore,
+ svn_boolean_t no_autoprops,
+ svn_boolean_t ignore_unknown_node_types,
+ const apr_hash_t *revprop_table,
+ svn_client_import_filter_func_t filter_callback,
+ void *filter_baton,
+ svn_commit_callback2_t commit_callback,
+ void *commit_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_client_import5(), but without support for an optional
+ * @a filter_callback and @a no_autoprops always set to FALSE.
+ *
* @since New in 1.7.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_client_import4(const char *path,
const char *url,
@@ -1947,6 +2101,22 @@ svn_client_import(svn_client_commit_info_t **commit_info_p,
* #TRUE, changes to descendants are only committed if they are itself
* included via @a depth and targets.
*
+ * If @a include_file_externals and/or @a include_dir_externals are #TRUE,
+ * also commit all file and/or dir externals (respectively) that are reached
+ * by recursion, except for those externals which:
+ * - have a fixed revision, or
+ * - come from a different repository root URL (dir externals).
+ * These flags affect only recursion; externals that directly appear in @a
+ * targets are always included in the commit.
+ *
+ * ### TODO: currently, file externals hidden inside an unversioned dir are
+ * skipped deliberately, because we can't commit those yet.
+ * See STMT_SELECT_COMMITTABLE_EXTERNALS_BELOW.
+ *
+ * ### TODO: With @c depth_immediates, this function acts as if
+ * @a include_dir_externals was passed #FALSE, but caller expects
+ * immediate child dir externals to be included @c depth_empty.
+ *
* When @a commit_as_operations is #TRUE it is possible to delete a node and
* all its descendants by selecting just the root of the deletion. If it is
* set to #FALSE this will raise an error.
@@ -1960,8 +2130,31 @@ svn_client_import(svn_client_commit_info_t **commit_info_p,
*
* Use @a pool for any temporary allocations.
*
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_client_commit6(const apr_array_header_t *targets,
+ svn_depth_t depth,
+ svn_boolean_t keep_locks,
+ svn_boolean_t keep_changelists,
+ svn_boolean_t commit_as_operations,
+ svn_boolean_t include_file_externals,
+ svn_boolean_t include_dir_externals,
+ const apr_array_header_t *changelists,
+ const apr_hash_t *revprop_table,
+ svn_commit_callback2_t commit_callback,
+ void *commit_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_commit6(), but passes @a include_file_externals as
+ * FALSE and @a include_dir_externals as FALSE.
+ *
* @since New in 1.7.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_client_commit5(const apr_array_header_t *targets,
svn_depth_t depth,
@@ -2104,11 +2297,11 @@ typedef struct svn_client_status_t
* svn_wc_status_modified and svn_wc_status_conflicted. */
enum svn_wc_status_kind prop_status;
- /** a node can be 'locked' if a working copy update is in progress or
+ /** A node can be 'locked' if a working copy update is in progress or
* was interrupted. */
svn_boolean_t wc_is_locked;
- /** a file or directory can be 'copied' if it's scheduled for
+ /** A file or directory can be 'copied' if it's scheduled for
* addition-with-history (or part of a subtree that is scheduled as such.).
*/
svn_boolean_t copied;
@@ -2134,7 +2327,7 @@ typedef struct svn_client_status_t
/** Last commit author of this item */
const char *changed_author;
- /** a file or directory can be 'switched' if the switch command has been
+ /** A file or directory can be 'switched' if the switch command has been
* used. If this is TRUE, then file_external will be FALSE.
*/
svn_boolean_t switched;
@@ -2200,11 +2393,44 @@ typedef struct svn_client_status_t
/** @} */
- /** Reserved for libsvn_client's internal use; this value is only to be used for
- * libsvn_client backwards compatibility wrappers. This value may be NULL or
- * to other data in future versions. */
+ /** Reserved for libsvn_client's internal use; this value is only to be used
+ * for libsvn_client backwards compatibility wrappers. This value may be NULL
+ * or to other data in future versions. */
const void *backwards_compatibility_baton;
+ /** Set to the local absolute path that this node was moved from, if this
+ * file or directory has been moved here locally and is the root of that
+ * move. Otherwise set to NULL.
+ *
+ * This will be NULL for moved-here nodes that are just part of a subtree
+ * that was moved along (and are not themselves a root of a different move
+ * operation).
+ *
+ * @since New in 1.8. */
+ const char *moved_from_abspath;
+
+ /** Set to the local absolute path that this node was moved to, if this file
+ * or directory has been moved away locally and corresponds to the root
+ * of the destination side of the move. Otherwise set to NULL.
+ *
+ * Note: Saying just "root" here could be misleading. For example:
+ * svn mv A AA;
+ * svn mv AA/B BB;
+ * creates a situation where A/B is moved-to BB, but one could argue that
+ * the move source's root actually was AA/B. Note that, as far as the
+ * working copy is concerned, above case is exactly identical to:
+ * svn mv A/B BB;
+ * svn mv A AA;
+ * In both situations, @a moved_to_abspath would be set for nodes A (moved
+ * to AA) and A/B (moved to BB), only.
+ *
+ * This will be NULL for moved-away nodes that were just part of a subtree
+ * that was moved along (and are not themselves a root of a different move
+ * operation).
+ *
+ * @since New in 1.8. */
+ const char *moved_to_abspath;
+
/* NOTE! Please update svn_client_status_dup() when adding new fields here. */
} svn_client_status_t;
@@ -2227,11 +2453,6 @@ svn_client_status_dup(const svn_client_status_t *status,
*
* @a scratch_pool will be cleared between invocations to the callback.
*
- * ### we might be revamping the status infrastructure, and this callback
- * ### could totally disappear by the end of 1.7 development. however, we
- * ### need to mark the STATUS parameter as "const" so that it is easier
- * ### to reason about who/what can modify those structures.
- *
* @since New in 1.7.
*/
typedef svn_error_t *(*svn_client_status_func_t)(
@@ -2423,8 +2644,11 @@ svn_client_status(svn_revnum_t *result_rev,
* If @a limit is non-zero only invoke @a receiver on the first @a limit
* logs.
*
- * If @a discover_changed_paths is set, then the `@a changed_paths' argument
- * to @a receiver will be passed on each invocation.
+ * If @a discover_changed_paths is set, then the @c changed_paths and @c
+ * changed_paths2 fields in the @c log_entry argument to @a receiver will be
+ * populated on each invocation. @note The @c text_modified and @c
+ * props_modified fields of the changed paths structure may have the value
+ * #svn_tristate_unknown if the repository does not report that information.
*
* If @a strict_node_history is set, copy history (if any exists) will
* not be traversed while harvesting revision logs for each target.
@@ -2432,18 +2656,12 @@ svn_client_status(svn_revnum_t *result_rev,
* If @a include_merged_revisions is set, log information for revisions
* which have been merged to @a targets will also be returned.
*
- * If @a revprops is NULL, retrieve all revprops; else, retrieve only the
- * revprops named in the array (i.e. retrieve none if the array is empty).
+ * If @a revprops is NULL, retrieve all revision properties; else, retrieve
+ * only the revision properties named by the (const char *) array elements
+ * (i.e. retrieve none if the array is empty).
*
* Use @a pool for any temporary allocation.
*
- * @par Important:
- * A special case for the revision range HEAD:1, which was present
- * in svn_client_log(), has been removed from svn_client_log2(). Instead, it
- * is expected that callers will specify the range HEAD:0, to avoid a
- * #SVN_ERR_FS_NO_SUCH_REVISION error when invoked against an empty repository
- * (i.e. one not containing a revision 1).
- *
* If @a ctx->notify_func2 is non-NULL, then call @a ctx->notify_func2/baton2
* with a 'skip' signal on any unversioned targets.
*
@@ -2514,6 +2732,13 @@ svn_client_log3(const apr_array_header_t *targets,
* Similar to svn_client_log3(), but with the @c kind field of
* @a peg_revision set to #svn_opt_revision_unspecified.
*
+ * @par Important:
+ * A special case for the revision range HEAD:1, which was present
+ * in svn_client_log(), has been removed from svn_client_log2(). Instead, it
+ * is expected that callers will specify the range HEAD:0, to avoid a
+ * #SVN_ERR_FS_NO_SUCH_REVISION error when invoked against an empty repository
+ * (i.e. one not containing a revision 1).
+ *
* @deprecated Provided for compatibility with the 1.3 API.
* @since New in 1.2.
*/
@@ -2702,12 +2927,13 @@ svn_client_blame(const char *path_or_url,
/**
* Produce diff output which describes the delta between
- * @a path1/@a revision1 and @a path2/@a revision2. Print the output
- * of the diff to @a outfile, and any errors to @a errfile. @a path1
- * and @a path2 can be either working-copy paths or URLs.
+ * @a path_or_url1/@a revision1 and @a path_or_url2/@a revision2. Print
+ * the output of the diff to @a outstream, and any errors to @a
+ * errstream. @a path_or_url1 and @a path_or_url2 can be either
+ * working-copy paths or URLs.
*
- * If @a relative_to_dir is not @c NULL, the @a original_path and
- * @a modified_path will have the @a relative_to_dir stripped from the
+ * If @a relative_to_dir is not @c NULL, the original path and
+ * modified path will have the @a relative_to_dir stripped from the
* front of the respective paths. If @a relative_to_dir is @c NULL,
* paths will not be modified. If @a relative_to_dir is not
* @c NULL but @a relative_to_dir is not a parent path of the target,
@@ -2717,9 +2943,10 @@ svn_client_blame(const char *path_or_url,
* If either @a revision1 or @a revision2 has an `unspecified' or
* unrecognized `kind', return #SVN_ERR_CLIENT_BAD_REVISION.
*
- * @a path1 and @a path2 must both represent the same node kind -- that
- * is, if @a path1 is a directory, @a path2 must also be, and if @a path1
- * is a file, @a path2 must also be.
+ * @a path_or_url1 and @a path_or_url2 must both represent the same node
+ * kind -- that is, if @a path_or_url1 is a directory, @a path_or_url2
+ * must also be, and if @a path_or_url1 is a file, @a path_or_url2 must
+ * also be.
*
* If @a depth is #svn_depth_infinity, diff fully recursively.
* Else if it is #svn_depth_immediates, diff the named paths and
@@ -2736,17 +2963,29 @@ svn_client_blame(const char *path_or_url,
* and the addition of another, but if this flag is TRUE, unrelated
* items will be diffed as if they were related.
*
+ * If @a no_diff_added is TRUE, then no diff output will be generated
+ * on added files.
+ *
* If @a no_diff_deleted is TRUE, then no diff output will be
* generated on deleted files.
*
* If @a show_copies_as_adds is TRUE, then copied files will not be diffed
* against their copyfrom source, and will appear in the diff output
* in their entirety, as if they were newly added.
+ * ### BUGS: For a repos-repos diff, this is ignored. Instead, a file is
+ * diffed against its copyfrom source iff the file is the diff target
+ * and not if some parent directory is the diff target. For a repos-WC
+ * diff, this is ignored if the file is the diff target.
*
* If @a use_git_diff_format is TRUE, then the git's extended diff format
* will be used.
* ### Do we need to say more about the format? A reference perhaps?
*
+ * If @a ignore_properties is TRUE, do not show property differences.
+ * If @a properties_only is TRUE, show only property changes.
+ * The above two options are mutually exclusive. It is an error to set
+ * both to TRUE.
+ *
* Generated headers are encoded using @a header_encoding.
*
* Diff output will not be generated for binary files, unless @a
@@ -2777,8 +3016,41 @@ svn_client_blame(const char *path_or_url,
* @note @a relative_to_dir doesn't affect the path index generated by
* external diff programs.
*
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_client_diff6(const apr_array_header_t *diff_options,
+ const char *path_or_url1,
+ const svn_opt_revision_t *revision1,
+ const char *path_or_url2,
+ const svn_opt_revision_t *revision2,
+ const char *relative_to_dir,
+ svn_depth_t depth,
+ svn_boolean_t ignore_ancestry,
+ svn_boolean_t no_diff_added,
+ svn_boolean_t no_diff_deleted,
+ svn_boolean_t show_copies_as_adds,
+ svn_boolean_t ignore_content_type,
+ svn_boolean_t ignore_properties,
+ svn_boolean_t properties_only,
+ svn_boolean_t use_git_diff_format,
+ const char *header_encoding,
+ svn_stream_t *outstream,
+ svn_stream_t *errstream,
+ const apr_array_header_t *changelists,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool);
+
+/** Similar to svn_client_diff6(), but with @a outfile and @a errfile,
+ * instead of @a outstream and @a errstream, and with @a
+ * no_diff_added, @a ignore_properties, and @a properties_only always
+ * passed as @c FALSE (which means that additions and property changes
+ * are always transmitted).
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
* @since New in 1.7.
*/
+SVN_DEPRECATED
svn_error_t *
svn_client_diff5(const apr_array_header_t *diff_options,
const char *path1,
@@ -2897,19 +3169,52 @@ svn_client_diff(const apr_array_header_t *diff_options,
apr_pool_t *pool);
/**
- * Produce diff output which describes the delta between the
- * filesystem object @a path in peg revision @a peg_revision, as it
- * changed between @a start_revision and @a end_revision. @a path can
+ * Produce diff output which describes the delta between the filesystem
+ * object @a path_or_url in peg revision @a peg_revision, as it changed
+ * between @a start_revision and @a end_revision. @a path_or_url can
* be either a working-copy path or URL.
*
* If @a peg_revision is #svn_opt_revision_unspecified, behave
- * identically to svn_client_diff5(), using @a path for both of that
- * function's @a path1 and @a path2 arguments.
+ * identically to svn_client_diff6(), using @a path_or_url for both of that
+ * function's @a path_or_url1 and @a path_or_url2 arguments.
*
- * All other options are handled identically to svn_client_diff5().
+ * All other options are handled identically to svn_client_diff6().
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_client_diff_peg6(const apr_array_header_t *diff_options,
+ const char *path_or_url,
+ const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *start_revision,
+ const svn_opt_revision_t *end_revision,
+ const char *relative_to_dir,
+ svn_depth_t depth,
+ svn_boolean_t ignore_ancestry,
+ svn_boolean_t no_diff_added,
+ svn_boolean_t no_diff_deleted,
+ svn_boolean_t show_copies_as_adds,
+ svn_boolean_t ignore_content_type,
+ svn_boolean_t ignore_properties,
+ svn_boolean_t properties_only,
+ svn_boolean_t use_git_diff_format,
+ const char *header_encoding,
+ svn_stream_t *outstream,
+ svn_stream_t *errstream,
+ const apr_array_header_t *changelists,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool);
+
+/** Similar to svn_client_diff6_peg6(), but with @a outfile and @a errfile,
+ * instead of @a outstream and @a errstream, and with @a
+ * no_diff_added, @a ignore_properties, and @a properties_only always
+ * passed as @c FALSE (which means that additions and property changes
+ * are always transmitted).
*
+ * @deprecated Provided for backward compatibility with the 1.7 API.
* @since New in 1.7.
*/
+SVN_DEPRECATED
svn_error_t *
svn_client_diff_peg5(const apr_array_header_t *diff_options,
const char *path,
@@ -3029,8 +3334,9 @@ svn_client_diff_peg(const apr_array_header_t *diff_options,
/**
* Produce a diff summary which lists the changed items between
- * @a path1/@a revision1 and @a path2/@a revision2 without creating text
- * deltas. @a path1 and @a path2 can be either working-copy paths or URLs.
+ * @a path_or_url1/@a revision1 and @a path_or_url2/@a revision2 without
+ * creating text deltas. @a path_or_url1 and @a path_or_url2 can be
+ * either working-copy paths or URLs.
*
* The function may report false positives if @a ignore_ancestry is false,
* since a file might have been modified between two revisions, but still
@@ -3039,14 +3345,14 @@ svn_client_diff_peg(const apr_array_header_t *diff_options,
* Calls @a summarize_func with @a summarize_baton for each difference
* with a #svn_client_diff_summarize_t structure describing the difference.
*
- * See svn_client_diff5() for a description of the other parameters.
+ * See svn_client_diff6() for a description of the other parameters.
*
* @since New in 1.5.
*/
svn_error_t *
-svn_client_diff_summarize2(const char *path1,
+svn_client_diff_summarize2(const char *path_or_url1,
const svn_opt_revision_t *revision1,
- const char *path2,
+ const char *path_or_url2,
const svn_opt_revision_t *revision2,
svn_depth_t depth,
svn_boolean_t ignore_ancestry,
@@ -3081,13 +3387,13 @@ svn_client_diff_summarize(const char *path1,
/**
* Produce a diff summary which lists the changed items between the
- * filesystem object @a path in peg revision @a peg_revision, as it
- * changed between @a start_revision and @a end_revision. @a path can
+ * filesystem object @a path_or_url in peg revision @a peg_revision, as it
+ * changed between @a start_revision and @a end_revision. @a path_or_url can
* be either a working-copy path or URL.
*
* If @a peg_revision is #svn_opt_revision_unspecified, behave
- * identically to svn_client_diff_summarize2(), using @a path for both
- * of that function's @a path1 and @a path2 arguments.
+ * identically to svn_client_diff_summarize2(), using @a path_or_url for
+ * both of that function's @a path_or_url1 and @a path_or_url2 arguments.
*
* The function may report false positives if @a ignore_ancestry is false,
* as described in the documentation for svn_client_diff_summarize2().
@@ -3100,7 +3406,7 @@ svn_client_diff_summarize(const char *path1,
* @since New in 1.5.
*/
svn_error_t *
-svn_client_diff_summarize_peg2(const char *path,
+svn_client_diff_summarize_peg2(const char *path_or_url,
const svn_opt_revision_t *peg_revision,
const svn_opt_revision_t *start_revision,
const svn_opt_revision_t *end_revision,
@@ -3144,6 +3450,46 @@ svn_client_diff_summarize_peg(const char *path,
* @{
*/
+/** Get information about the state of merging between two branches.
+ *
+ * The source is specified by @a source_path_or_url at @a source_revision.
+ * The target is specified by @a target_path_or_url at @a target_revision,
+ * which refers to either a WC or a repository location.
+ *
+ * Set @a *needs_reintegration to true if an automatic merge from source
+ * to target would be a reintegration merge: that is, if the last automatic
+ * merge was in the opposite direction; or to false otherwise.
+ *
+ * Set @a *yca_url, @a *yca_rev, @a *base_url, @a *base_rev, @a *right_url,
+ * @a *right_rev, @a *target_url, @a *target_rev to the repository locations
+ * of, respectively: the youngest common ancestor of the branches, the base
+ * chosen for 3-way merge, the right-hand side of the source diff, and the
+ * target.
+ *
+ * Set @a repos_root_url to the URL of the repository root. This is a
+ * common prefix of all four URL outputs.
+ *
+ * Allocate the results in @a result_pool. Any of the output pointers may
+ * be NULL if not wanted.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_client_get_merging_summary(svn_boolean_t *needs_reintegration,
+ const char **yca_url, svn_revnum_t *yca_rev,
+ const char **base_url, svn_revnum_t *base_rev,
+ const char **right_url, svn_revnum_t *right_rev,
+ const char **target_url, svn_revnum_t *target_rev,
+ const char **repos_root_url,
+ const char *source_path_or_url,
+ const svn_opt_revision_t *source_revision,
+ const char *target_path_or_url,
+ const svn_opt_revision_t *target_revision,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
/** Merge changes from @a source1/@a revision1 to @a source2/@a revision2 into
* the working-copy path @a target_wcpath.
*
@@ -3171,16 +3517,19 @@ svn_client_diff_summarize_peg(const char *path,
*
* If @a depth is #svn_depth_unknown, use the depth of @a target_wcpath.
*
- * Use @a ignore_ancestry to control whether or not items being
- * diffed will be checked for relatedness first. Unrelated items
- * are typically transmitted to the editor as a deletion of one thing
- * and the addition of another, but if this flag is TRUE, unrelated
- * items will be diffed as if they were related.
+ * If @a ignore_mergeinfo is true, disable merge tracking, by treating the
+ * two sources as unrelated even if they actually have a common ancestor.
+ *
+ * If @a diff_ignore_ancestry is true, diff unrelated nodes as if related:
+ * that is, diff the 'left' and 'right' versions of a node as if they were
+ * related (if they are the same kind) even if they are not related.
+ * Otherwise, diff unrelated items as a deletion of one thing and the
+ * addition of another.
*
- * If @a force is false and the merge involves deleting a file whose
+ * If @a force_delete is false and the merge involves deleting a file whose
* content differs from the source-left version, or a locally modified
* directory, or an unversioned item, then the operation will fail. If
- * @a force is true then all such items will be deleted.
+ * @a force_delete is true then all such items will be deleted.
*
* @a merge_options (an array of <tt>const char *</tt>), if non-NULL,
* is used to pass additional command line arguments to the merge
@@ -3206,8 +3555,33 @@ svn_client_diff_summarize_peg(const char *path,
* The authentication baton cached in @a ctx is used to communicate with the
* repository.
*
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_client_merge5(const char *source1,
+ const svn_opt_revision_t *revision1,
+ const char *source2,
+ const svn_opt_revision_t *revision2,
+ const char *target_wcpath,
+ svn_depth_t depth,
+ svn_boolean_t ignore_mergeinfo,
+ svn_boolean_t diff_ignore_ancestry,
+ svn_boolean_t force_delete,
+ svn_boolean_t record_only,
+ svn_boolean_t dry_run,
+ svn_boolean_t allow_mixed_rev,
+ const apr_array_header_t *merge_options,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_merge5(), but the single @a ignore_ancestry
+ * parameter maps to both @c ignore_mergeinfo and @c diff_ignore_ancestry.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
* @since New in 1.7.
*/
+SVN_DEPRECATED
svn_error_t *
svn_client_merge4(const char *source1,
const svn_opt_revision_t *revision1,
@@ -3216,7 +3590,7 @@ svn_client_merge4(const char *source1,
const char *target_wcpath,
svn_depth_t depth,
svn_boolean_t ignore_ancestry,
- svn_boolean_t force,
+ svn_boolean_t force_delete,
svn_boolean_t record_only,
svn_boolean_t dry_run,
svn_boolean_t allow_mixed_rev,
@@ -3226,7 +3600,8 @@ svn_client_merge4(const char *source1,
/**
* Similar to svn_client_merge4(), but with @a allow_mixed_rev set to
- * @c TRUE.
+ * @c TRUE. The @a force parameter maps to the @c force_delete parameter
+ * of svn_client_merge4().
*
* @deprecated Provided for backward compatibility with the 1.6 API.
*
@@ -3294,25 +3669,26 @@ svn_client_merge(const char *source1,
apr_pool_t *pool);
-
/**
- * Perform a reintegration merge of @a source at @a peg_revision
+ * Perform a reintegration merge of @a source_path_or_url at @a source_peg_revision
* into @a target_wcpath.
* @a target_wcpath must be a single-revision, #svn_depth_infinity,
* pristine, unswitched working copy -- in other words, it must
* reflect a single revision tree, the "target". The mergeinfo on @a
- * source must reflect that all of the target has been merged into it.
- * Then this behaves like a merge with svn_client_merge3() from the
+ * source_path_or_url must reflect that all of the target has been merged into it.
+ * Then this behaves like a merge with svn_client_merge5() from the
* target's URL to the source.
*
- * All other options are handled identically to svn_client_merge3().
+ * All other options are handled identically to svn_client_merge5().
* The depth of the merge is always #svn_depth_infinity.
*
* @since New in 1.5.
+ * @deprecated Provided for backwards compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
-svn_client_merge_reintegrate(const char *source,
- const svn_opt_revision_t *peg_revision,
+svn_client_merge_reintegrate(const char *source_path_or_url,
+ const svn_opt_revision_t *source_peg_revision,
const char *target_wcpath,
svn_boolean_t dry_run,
const apr_array_header_t *merge_options,
@@ -3320,10 +3696,21 @@ svn_client_merge_reintegrate(const char *source,
apr_pool_t *pool);
/**
- * Merge the changes between the filesystem object @a source in peg
- * revision @a peg_revision, as it changed between the ranges described
- * in @a ranges_to_merge.
+ * Merge changes from the source branch identified by
+ * @a source_path_or_url in peg revision @a source_peg_revision,
+ * into the target branch working copy at @a target_wcpath.
*
+ * If @a ranges_to_merge is NULL then perform an automatic merge of
+ * all the eligible changes up to @a source_peg_revision. If the merge
+ * required is a reintegrate merge, then return an error if the WC has
+ * mixed revisions, local modifications and/or switched subtrees; if
+ * the merge is determined to be of the non-reintegrate kind, then
+ * return an error if @a allow_mixed_rev is false and the WC contains
+ * mixed revisions.
+ *
+ * If @a ranges_to_merge is not NULL then merge the changes specified
+ * by the revision ranges in @a ranges_to_merge, or, when honouring
+ * mergeinfo, only the eligible parts of those revision ranges.
* @a ranges_to_merge is an array of <tt>svn_opt_revision_range_t
* *</tt> ranges. These ranges may describe additive and/or
* subtractive merge ranges, they may overlap fully or partially,
@@ -3332,18 +3719,45 @@ svn_client_merge_reintegrate(const char *source,
* list of provided ranges has an `unspecified' or unrecognized
* `kind', return #SVN_ERR_CLIENT_BAD_REVISION.
*
- * All other options are handled identically to svn_client_merge4().
+ * If @a ranges_to_merge is an empty array, then do nothing.
+ *
+ * All other options are handled identically to svn_client_merge5().
*
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_client_merge_peg5(const char *source_path_or_url,
+ const apr_array_header_t *ranges_to_merge,
+ const svn_opt_revision_t *source_peg_revision,
+ const char *target_wcpath,
+ svn_depth_t depth,
+ svn_boolean_t ignore_mergeinfo,
+ svn_boolean_t diff_ignore_ancestry,
+ svn_boolean_t force_delete,
+ svn_boolean_t record_only,
+ svn_boolean_t dry_run,
+ svn_boolean_t allow_mixed_rev,
+ const apr_array_header_t *merge_options,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_merge_peg5(), but automatic merge is not available
+ * (@a ranges_to_merge must not be NULL), and the single @a ignore_ancestry
+ * parameter maps to both @c ignore_mergeinfo and @c diff_ignore_ancestry.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
* @since New in 1.7.
*/
+SVN_DEPRECATED
svn_error_t *
-svn_client_merge_peg4(const char *source,
+svn_client_merge_peg4(const char *source_path_or_url,
const apr_array_header_t *ranges_to_merge,
- const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *source_peg_revision,
const char *target_wcpath,
svn_depth_t depth,
svn_boolean_t ignore_ancestry,
- svn_boolean_t force,
+ svn_boolean_t force_delete,
svn_boolean_t record_only,
svn_boolean_t dry_run,
svn_boolean_t allow_mixed_rev,
@@ -3353,7 +3767,8 @@ svn_client_merge_peg4(const char *source,
/**
* Similar to svn_client_merge_peg4(), but with @a allow_mixed_rev set to
- * @c TRUE.
+ * @c TRUE. The @a force parameter maps to the @c force_delete parameter
+ * of svn_client_merge_peg4().
*
* @deprecated Provided for backward compatibility with the 1.6 API.
*
@@ -3440,9 +3855,10 @@ svn_client_suggest_merge_sources(apr_array_header_t **suggestions,
/**
- * Set @a *mergeinfo to a hash mapping <tt>const char *</tt> merge
- * source URLs to <tt>apr_array_header_t *</tt> rangelists (arrays of
- * <tt>svn_merge_range_t *</tt> ranges) describing the ranges which
+ * Get the mergeinfo for a single target node (ignoring any subtrees).
+ *
+ * Set @a *mergeinfo to a hash mapping <tt>const char *</tt> merge source
+ * URLs to <tt>svn_rangelist_t *</tt> rangelists describing the ranges which
* have been merged into @a path_or_url as of @a peg_revision, per
* @a path_or_url's explicit mergeinfo or inherited mergeinfo if no
* explicit mergeinfo if found. If no explicit or inherited mergeinfo
@@ -3469,16 +3885,37 @@ svn_client_mergeinfo_get_merged(apr_hash_t **mergeinfo,
/**
+ * Describe the revisions that either have or have not been merged from
+ * one source branch (or subtree) into another.
+ *
* If @a finding_merged is TRUE, then drive log entry callbacks
* @a receiver / @a receiver_baton with the revisions merged from
- * @a merge_source_path_or_url (as of @a src_peg_revision) into
- * @a path_or_url (as of @a peg_revision). If @a finding_merged is FALSE
- * then find the revisions eligible for merging.
+ * @a source_path_or_url (as of @a source_peg_revision) into
+ * @a target_path_or_url (as of @a target_peg_revision). If @a
+ * finding_merged is FALSE then find the revisions eligible for merging.
+ *
+ * If both @a source_start_revision and @a source_end_revision are
+ * unspecified (that is, of kind @c svn_opt_revision_unspecified),
+ * @a receiver will be called the requested revisions from 0 to
+ * @a source_peg_revision and in that order (that is, oldest to
+ * youngest). Otherwise, both @a source_start_revision and
+ * @a source_end_revision must be specified, which has two effects:
+ *
+ * - @a receiver will be called only with revisions which fall
+ * within range of @a source_start_revision to
+ * @a source_end_revision, inclusive, and
+ *
+ * - those revisions will be ordered in the same "direction" as the
+ * walk from @a source_start_revision to @a source_end_revision.
+ * (If @a source_start_revision is the younger of the two, @a
+ * receiver will be called with revisions in youngest-to-oldest
+ * order; otherwise, the reverse occurs.)
*
* If @a depth is #svn_depth_empty consider only the explicit or
- * inherited mergeinfo on @a path_or_url when calculating merged revisions
- * from @a merge_source_path_or_url. If @a depth is #svn_depth_infinity
- * then also consider the explicit subtree mergeinfo under @a path_or_url.
+ * inherited mergeinfo on @a target_path_or_url when calculating merged
+ * revisions from @a source_path_or_url. If @a depth is #svn_depth_infinity
+ * then also consider the explicit subtree mergeinfo under @a
+ * target_path_or_url.
* If a depth other than #svn_depth_empty or #svn_depth_infinity is
* requested then return a #SVN_ERR_UNSUPPORTED_FEATURE error.
*
@@ -3490,14 +3927,38 @@ svn_client_mergeinfo_get_merged(apr_hash_t **mergeinfo,
* If the server doesn't support retrieval of mergeinfo, return an
* #SVN_ERR_UNSUPPORTED_FEATURE error.
*
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_client_mergeinfo_log2(svn_boolean_t finding_merged,
+ const char *target_path_or_url,
+ const svn_opt_revision_t *target_peg_revision,
+ const char *source_path_or_url,
+ const svn_opt_revision_t *source_peg_revision,
+ const svn_opt_revision_t *source_start_revision,
+ const svn_opt_revision_t *source_end_revision,
+ svn_log_entry_receiver_t receiver,
+ void *receiver_baton,
+ svn_boolean_t discover_changed_paths,
+ svn_depth_t depth,
+ const apr_array_header_t *revprops,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_client_mergeinfo_log2(), but with @a source_start_revision
+ * and @a source_end_revision always of kind @c svn_opt_revision_unspecified;
+ *
+ * @deprecated Provided for backwards compatibility with the 1.7 API.
* @since New in 1.7.
*/
+SVN_DEPRECATED
svn_error_t *
svn_client_mergeinfo_log(svn_boolean_t finding_merged,
- const char *path_or_url,
- const svn_opt_revision_t *peg_revision,
- const char *merge_source_path_or_url,
- const svn_opt_revision_t *src_peg_revision,
+ const char *target_path_or_url,
+ const svn_opt_revision_t *target_peg_revision,
+ const char *source_path_or_url,
+ const svn_opt_revision_t *source_peg_revision,
svn_log_entry_receiver_t receiver,
void *receiver_baton,
svn_boolean_t discover_changed_paths,
@@ -3652,11 +4113,13 @@ svn_client_relocate(const char *dir,
*/
/**
- * Restore the pristine version of a working copy @a paths,
+ * Restore the pristine version of working copy @a paths,
* effectively undoing any local mods. For each path in @a paths,
* revert it if it is a file. Else if it is a directory, revert
* according to @a depth:
*
+ * @a paths is an array of (const char *) local WC paths.
+ *
* If @a depth is #svn_depth_empty, revert just the properties on
* the directory; else if #svn_depth_files, revert the properties
* and any files immediately under the directory; else if
@@ -3732,21 +4195,31 @@ svn_client_resolved(const char *path,
/** Perform automatic conflict resolution on a working copy @a path.
*
- * If @a depth is #svn_depth_empty, act only on @a path; if
- * #svn_depth_files, resolve @a path and its conflicted file
- * children (if any); if #svn_depth_immediates, resolve @a path and
- * all its immediate conflicted children (both files and directories,
- * if any); if #svn_depth_infinity, resolve @a path and every
- * conflicted file or directory anywhere beneath it.
- * Note that this operation will try to lock the parent directory of
- * @a path in order to be able to resolve tree-conflicts on @a path.
+ * If @a conflict_choice is
+ *
+ * - #svn_wc_conflict_choose_base:
+ * resolve the conflict with the old file contents
+ *
+ * - #svn_wc_conflict_choose_mine_full:
+ * use the original working contents
+ *
+ * - #svn_wc_conflict_choose_theirs_full:
+ * use the new contents
*
- * If @a conflict_choice is #svn_wc_conflict_choose_base, resolve the
- * conflict with the old file contents; if
- * #svn_wc_conflict_choose_mine_full, use the original working contents;
- * if #svn_wc_conflict_choose_theirs_full, the new contents; and if
- * #svn_wc_conflict_choose_merged, don't change the contents at all,
- * just remove the conflict status, which is the pre-1.5 behavior.
+ * - #svn_wc_conflict_choose_merged:
+ * don't change the contents at all, just remove the conflict
+ * status, which is the pre-1.5 behavior.
+ *
+ * - #svn_wc_conflict_choose_theirs_conflict
+ * ###...
+ *
+ * - #svn_wc_conflict_choose_mine_conflict
+ * ###...
+ *
+ * - svn_wc_conflict_choose_unspecified
+ * invoke @a ctx->conflict_func2 with @a ctx->conflict_baton2 to obtain
+ * a resolution decision for each conflict. This can be used to
+ * implement interactive conflict resolution.
*
* #svn_wc_conflict_choose_theirs_conflict and
* #svn_wc_conflict_choose_mine_conflict are not legal for binary
@@ -3755,6 +4228,17 @@ svn_client_resolved(const char *path,
* If @a path is not in a state of conflict to begin with, do nothing.
* If @a path's conflict state is removed and @a ctx->notify_func2 is non-NULL,
* call @a ctx->notify_func2 with @a ctx->notify_baton2 and @a path.
+ * ### with what notification parameters?
+ *
+ * If @a depth is #svn_depth_empty, act only on @a path; if
+ * #svn_depth_files, resolve @a path and its conflicted file
+ * children (if any); if #svn_depth_immediates, resolve @a path and
+ * all its immediate conflicted children (both files and directories,
+ * if any); if #svn_depth_infinity, resolve @a path and every
+ * conflicted file or directory anywhere beneath it.
+ *
+ * Note that this operation will try to lock the parent directory of
+ * @a path in order to be able to resolve tree-conflicts on @a path.
*
* @since New in 1.5.
*/
@@ -3792,20 +4276,14 @@ typedef struct svn_client_copy_source_t
const svn_opt_revision_t *peg_revision;
} svn_client_copy_source_t;
-/** Copy each @a src in @a sources to @a dst_path.
+/** Copy each source in @a sources to @a dst_path.
*
* If multiple @a sources are given, @a dst_path must be a directory,
* and @a sources will be copied as children of @a dst_path.
*
- * @a sources must be an array of elements of type
- * <tt>svn_client_copy_source_t *</tt>.
- *
- * Each @a src in @a sources must be files or directories under version control,
- * or URLs of a versioned item in the repository. If @a sources has multiple
- * items, the @a src members must be all repository URLs or all working copy
- * paths.
- *
- * The parent of @a dst_path must already exist.
+ * @a sources is an array of <tt>svn_client_copy_source_t *</tt> elements,
+ * either all referring to local WC items or all referring to versioned
+ * items in the repository.
*
* If @a sources has only one item, attempt to copy it to @a dst_path. If
* @a copy_as_child is TRUE and @a dst_path already exists, attempt to copy the
@@ -3833,7 +4311,7 @@ typedef struct svn_client_copy_source_t
* This scheduling can be removed with svn_client_revert2().
*
* If @a make_parents is TRUE, create any non-existent parent directories
- * also.
+ * also. Otherwise the parent of @a dst_path must already exist.
*
* If @a ignore_externals is set, don't process externals definitions
* as part of this operation.
@@ -3973,10 +4451,10 @@ svn_client_copy(svn_client_commit_info_t **commit_info_p,
/**
* Move @a src_paths to @a dst_path.
*
- * @a src_paths must be files or directories under version control, or
- * URLs of versioned items in the repository. All @a src_paths must be of
- * the same type. If multiple @a src_paths are given, @a dst_path must be
- * a directory and @a src_paths will be moved as children of @a dst_path.
+ * @a src_paths is an array of (const char *) paths -- either all WC paths
+ * or all URLs -- of versioned items. If multiple @a src_paths are given,
+ * @a dst_path must be a directory and @a src_paths will be moved as
+ * children of @a dst_path.
*
* If @a src_paths are repository URLs:
*
@@ -4000,8 +4478,6 @@ svn_client_copy(svn_client_commit_info_t **commit_info_p,
* is a directory it will remain in the working copy but all the files,
* and unversioned items, it contains will be removed.
*
- * The parent of @a dst_path must already exist.
- *
* If @a src_paths has only one item, attempt to move it to @a dst_path. If
* @a move_as_child is TRUE and @a dst_path already exists, attempt to move the
* item as a child of @a dst_path. If @a move_as_child is FALSE and
@@ -4019,7 +4495,20 @@ svn_client_copy(svn_client_commit_info_t **commit_info_p,
* with #SVN_ERR_CLIENT_MULTIPLE_SOURCES_DISALLOWED.
*
* If @a make_parents is TRUE, create any non-existent parent directories
- * also.
+ * also. Otherwise, the parent of @a dst_path must already exist.
+ *
+ * If @a allow_mixed_revisions is @c FALSE, #SVN_ERR_WC_MIXED_REVISIONS
+ * will be raised if the move source is a mixed-revision subtree.
+ * If @a allow_mixed_revisions is TRUE, a mixed-revision move source is
+ * allowed but the move will degrade to a copy and a delete without local
+ * move tracking. This parameter should be set to FALSE except where backwards
+ * compatibility to svn_client_move6() is required.
+ *
+ * If @a metadata_only is @c TRUE and moving a file in a working copy,
+ * everything in the metadata is updated as if the node is moved, but the
+ * actual disk move operation is not performed. This feature is useful for
+ * clients that want to keep the working copy in sync while the actual working
+ * copy is updated by some other task.
*
* If non-NULL, @a revprop_table is a hash table holding additional,
* custom revision properties (<tt>const char *</tt> names mapped to
@@ -4041,8 +4530,29 @@ svn_client_copy(svn_client_commit_info_t **commit_info_p,
* @a commit_callback with @a commit_baton and a #svn_commit_info_t for
* the commit.
*
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_client_move7(const apr_array_header_t *src_paths,
+ const char *dst_path,
+ svn_boolean_t move_as_child,
+ svn_boolean_t make_parents,
+ svn_boolean_t allow_mixed_revisions,
+ svn_boolean_t metadata_only,
+ const apr_hash_t *revprop_table,
+ svn_commit_callback2_t commit_callback,
+ void *commit_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_move7(), but with @a allow_mixed_revisions always
+ * set to @c TRUE and @a metadata_only always to @c FALSE.
+ *
* @since New in 1.7.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_client_move6(const apr_array_header_t *src_paths,
const char *dst_path,
@@ -4392,12 +4902,34 @@ svn_client_revprop_set(const char *propname,
/**
* Set @a *props to a hash table whose keys are absolute paths or URLs
- * of items on which property @a propname is set, and whose values are
- * `#svn_string_t *' representing the property value for @a propname
- * at that path.
+ * of items on which property @a propname is explicitly set, and whose
+ * values are <tt>svn_string_t *</tt> representing the property value for
+ * @a propname at that path.
+ *
+ * If @a inherited_props is not @c NULL, then set @a *inherited_props to a
+ * depth-first ordered array of #svn_prop_inherited_item_t * structures
+ * representing the properties inherited by @a target. If @a target is a
+ * working copy path, then properties inherited by @a target as far as the
+ * root of the working copy are obtained from the working copy's actual
+ * property values. Properties inherited from above the working copy root
+ * come from the inherited properties cache. If @a target is a URL, then
+ * the inherited properties come from the repository. If @a inherited_props
+ * is not @c NULL and no inheritable properties are found, then set
+ * @a *inherited_props to an empty array.
+ *
+ * The #svn_prop_inherited_item_t->path_or_url members of the
+ * #svn_prop_inherited_item_t * structures in @a *inherited_props are
+ * URLs if @a target is a URL or if @a target is a working copy path but the
+ * property represented by the structure is above the working copy root (i.e.
+ * the inherited property is from the cache). In all other cases the
+ * #svn_prop_inherited_item_t->path_or_url members are absolute working copy
+ * paths.
+ *
+ * Allocate @a *props (including keys and values) and @a *inherited_props
+ * (including its elements) in @a result_pool, use @a scratch_pool for
+ * temporary allocations.
*
- * Allocate @a *props, its keys, and its values in @a pool, use
- * @a scratch_pool for temporary allocations.
+ * @a target is a WC absolute path or a URL.
*
* Don't store any path, not even @a target, if it does not have a
* property named @a propname.
@@ -4432,12 +4964,34 @@ svn_client_revprop_set(const char *propname,
* This function returns SVN_ERR_UNVERSIONED_RESOURCE when it is called on
* unversioned nodes.
*
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_client_propget5(apr_hash_t **props,
+ apr_array_header_t **inherited_props,
+ const char *propname,
+ const char *target, /* abspath or URL */
+ const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *revision,
+ svn_revnum_t *actual_revnum,
+ svn_depth_t depth,
+ const apr_array_header_t *changelists,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_client_propget5 but with @a inherited_props always
+ * passed as NULL.
+ *
* @since New in 1.7.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_client_propget4(apr_hash_t **props,
const char *propname,
- const char *target,
+ const char *target, /* abspath or URL */
const svn_opt_revision_t *peg_revision,
const svn_opt_revision_t *revision,
svn_revnum_t *actual_revnum,
@@ -4527,20 +5081,22 @@ svn_client_revprop_get(const char *propname,
apr_pool_t *pool);
/**
- * Invoke @a receiver with @a receiver_baton to return the regular properties
- * of @a target, a URL or working copy path. @a receiver will be called
- * for each path encountered.
+ * Invoke @a receiver with @a receiver_baton to return the regular explicit, and
+ * possibly the inherited, properties of @a target, a URL or working copy path.
+ * @a receiver will be called for each path encountered.
*
- * If @a revision->kind is #svn_opt_revision_unspecified, then get
- * properties from the working copy, if @a target is a working copy
- * path, or from the repository head if @a target is a URL. Else get
- * the properties as of @a revision. The actual node revision
- * selected is determined by the path as it exists in @a peg_revision.
- * If @a peg_revision->kind is #svn_opt_revision_unspecified, then it
- * defaults to #svn_opt_revision_head for URLs or
- * #svn_opt_revision_working for WC targets. Use the authentication
- * baton cached in @a ctx for authentication if contacting the
- * repository.
+ * @a target is a WC path or a URL.
+ *
+ * If @a revision->kind is #svn_opt_revision_unspecified, then get the
+ * explicit (and possibly the inherited) properties from the working copy,
+ * if @a target is a working copy path, or from the repository head if
+ * @a target is a URL. Else get the properties as of @a revision.
+ * The actual node revision selected is determined by the path as it exists
+ * in @a peg_revision. If @a peg_revision->kind is
+ * #svn_opt_revision_unspecified, then it defaults to #svn_opt_revision_head
+ * for URLs or #svn_opt_revision_working for WC targets. Use the
+ * authentication baton cached in @a ctx for authentication if contacting
+ * the repository.
*
* If @a depth is #svn_depth_empty, list only the properties of
* @a target itself. If @a depth is #svn_depth_files, and
@@ -4558,10 +5114,41 @@ svn_client_revprop_get(const char *propname,
* of one of those changelists. If @a changelists is empty (or
* altogether @c NULL), no changelist filtering occurs.
*
+ * If @a get_target_inherited_props is true, then also return any inherited
+ * properties when @a receiver is called for @a target. If @a target is a
+ * working copy path, then properties inherited by @a target as far as the
+ * root of the working copy are obtained from the working copy's actual
+ * property values. Properties inherited from above the working copy
+ * root come from the inherited properties cache. If @a target is a URL,
+ * then the inherited properties come from the repository.
+ * If @a get_target_inherited_props is false, then no inherited properties
+ * are returned to @a receiver.
+ *
* If @a target is not found, return the error #SVN_ERR_ENTRY_NOT_FOUND.
*
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_client_proplist4(const char *target,
+ const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *revision,
+ svn_depth_t depth,
+ const apr_array_header_t *changelists,
+ svn_boolean_t get_target_inherited_props,
+ svn_proplist_receiver2_t receiver,
+ void *receiver_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_client_proplist4(), except that the @a receiver type
+ * is a #svn_proplist_receiver_t, @a get_target_inherited_props is
+ * always passed NULL, and there is no separate scratch pool.
+ *
* @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_client_proplist3(const char *target,
const svn_opt_revision_t *peg_revision,
@@ -4805,7 +5392,7 @@ svn_client_export(svn_revnum_t *result_rev,
* @{
*/
-/** The type of function invoked by svn_client_list2() to report the details
+/** The type of function invoked by svn_client_list3() to report the details
* of each directory entry being listed.
*
* @a baton is the baton that was passed to the caller. @a path is the
@@ -4815,11 +5402,45 @@ svn_client_export(svn_revnum_t *result_rev,
* the entry's lock, if it is locked and if lock information is being
* reported by the caller; otherwise @a lock is NULL. @a abs_path is the
* repository path of the top node of the list operation; it is relative to
- * the repository root and begins with "/". @a pool may be used for
- * temporary allocations.
+ * the repository root and begins with "/".
*
- * @since New in 1.4.
+ * If svn_client_list3() was called with @a include_externals set to TRUE,
+ * @a external_parent_url and @a external_target will be set.
+ * @a external_parent_url is url of the directory which has the
+ * externals definitions. @a external_target is the target subdirectory of
+ * externals definitions which is relative to the parent directory that holds
+ * the external item.
+ *
+ * If external_parent_url and external_target are defined, the item being
+ * listed is part of the external described by external_parent_url and
+ * external_target. Else, the item is not part of any external.
+ * Moreover, we will never mix items which are part of separate
+ * externals, and will always finish listing an external before listing
+ * the next one.
+ *
+ * @a scratch_pool may be used for temporary allocations.
+ *
+ * @since New in 1.8.
*/
+typedef svn_error_t *(*svn_client_list_func2_t)(
+ void *baton,
+ const char *path,
+ const svn_dirent_t *dirent,
+ const svn_lock_t *lock,
+ const char *abs_path,
+ const char *external_parent_url,
+ const char *external_target,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Similar to #svn_client_list_func2_t, but without any information about
+ * externals definitions.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ *
+ * @since New in 1.4
+ *
+ * */
typedef svn_error_t *(*svn_client_list_func_t)(void *baton,
const char *path,
const svn_dirent_t *dirent,
@@ -4843,6 +5464,10 @@ typedef svn_error_t *(*svn_client_list_func_t)(void *baton,
*
* If @a fetch_locks is TRUE, include locks when reporting directory entries.
*
+ * If @a include_externals is TRUE, also list all external items
+ * reached by recursion. @a depth value passed to the original list target
+ * applies for the externals also.
+ *
* Use @a pool for temporary allocations.
*
* Use authentication baton cached in @a ctx to authenticate against the
@@ -4859,8 +5484,30 @@ typedef svn_error_t *(*svn_client_list_func_t)(void *baton,
* otherwise simply bitwise OR together the combination of @c SVN_DIRENT_
* fields you care about.
*
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_client_list3(const char *path_or_url,
+ const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *revision,
+ svn_depth_t depth,
+ apr_uint32_t dirent_fields,
+ svn_boolean_t fetch_locks,
+ svn_boolean_t include_externals,
+ svn_client_list_func2_t list_func,
+ void *baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool);
+
+
+/** Similar to svn_client_list3(), but with @a include_externals set
+ * to FALSE, and using a #svn_client_list_func_t as callback.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.7 API.
+ *
* @since New in 1.5.
*/
+SVN_DEPRECATED
svn_error_t *
svn_client_list2(const char *path_or_url,
const svn_opt_revision_t *peg_revision,
@@ -5041,6 +5688,8 @@ svn_client_cat(svn_stream_t *out,
* @a changelist. (For now, a path cannot belong to two changelists
* at once.)
*
+ * @a paths is an array of (const char *) local WC paths.
+ *
* @a changelists is an array of <tt>const char *</tt> changelist
* names, used as a restrictive filter on items whose changelist
* assignments are adjusted; that is, don't tweak the changeset of any
@@ -5065,6 +5714,8 @@ svn_client_add_to_changelist(const apr_array_header_t *paths,
* Remove each path in @a paths (recursing to @a depth as necessary)
* from changelists to which they are currently assigned.
*
+ * @a paths is an array of (const char *) local WC paths.
+ *
* @a changelists is an array of <tt>const char *</tt> changelist
* names, used as a restrictive filter on items whose changelist
* assignments are removed; that is, don't remove from a changeset any
@@ -5094,6 +5745,8 @@ svn_client_remove_from_changelists(const apr_array_header_t *paths,
* Call @a callback_func (with @a callback_baton) each time a
* changelist-having path is discovered.
*
+ * @a path is a local WC path.
+ *
* If @a ctx->cancel_func is not @c NULL, invoke it passing @a
* ctx->cancel_baton during the recursive walk.
*
@@ -5120,8 +5773,8 @@ svn_client_get_changelists(const char *path,
/**
* Lock @a targets in the repository. @a targets is an array of
- * <tt>const char *</tt> paths - either all working copy paths or URLs. All
- * @a targets must be in the same repository.
+ * <tt>const char *</tt> paths - either all working copy paths or all URLs.
+ * All targets must be in the same repository.
*
* If a target is already locked in the repository, no lock will be
* acquired unless @a steal_lock is TRUE, in which case the locks are
@@ -5151,10 +5804,10 @@ svn_client_lock(const apr_array_header_t *targets,
/**
* Unlock @a targets in the repository. @a targets is an array of
* <tt>const char *</tt> paths - either all working copy paths or all URLs.
- * All @a targets must be in the same repository.
+ * All targets must be in the same repository.
*
* If the targets are WC paths, and @a break_lock is FALSE, the working
- * copy must contain a locks for each target.
+ * copy must contain a lock for each target.
* If this is not the case, or the working copy lock doesn't match the
* lock token in the repository, an error will be signaled.
*
@@ -5691,30 +6344,58 @@ svn_client_url_from_path(const char **url,
apr_pool_t *pool);
+
+/* Fetching a repository's root URL and UUID. */
+
+/** Set @a *repos_root_url and @a *repos_uuid, to the root URL and UUID of
+ * the repository in which @a abspath_or_url is versioned. Use the
+ * authentication baton and working copy context cached in @a ctx as
+ * necessary. @a repos_root_url and/or @a repos_uuid may be NULL if not
+ * wanted.
+ *
+ * This function will open a temporary RA session to the repository if
+ * necessary to get the information.
+ *
+ * Allocate @a *repos_root_url and @a *repos_uuid in @a result_pool.
+ * Use @a scratch_pool for temporary allocations.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_client_get_repos_root(const char **repos_root_url,
+ const char **repos_uuid,
+ const char *abspath_or_url,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
/** Set @a *url to the repository root URL of the repository in which
* @a path_or_url is versioned (or scheduled to be versioned),
* allocated in @a pool. @a ctx is required for possible repository
* authentication.
*
* @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.7 API. Use
+ * svn_client_get_repos_root() instead, with an absolute path.
*/
+SVN_DEPRECATED
svn_error_t *
svn_client_root_url_from_path(const char **url,
const char *path_or_url,
svn_client_ctx_t *ctx,
apr_pool_t *pool);
-
-
-/* Fetching repository UUIDs. */
-
/** Get repository @a uuid for @a url.
*
* Use a @a pool to open a temporary RA session to @a url, discover the
* repository uuid, and free the session. Return the uuid in @a uuid,
* allocated in @a pool. @a ctx is required for possible repository
* authentication.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API. Use
+ * svn_client_get_repos_root() instead.
*/
+SVN_DEPRECATED
svn_error_t *
svn_client_uuid_from_url(const char **uuid,
const char *url,
@@ -5729,7 +6410,10 @@ svn_client_uuid_from_url(const char **uuid,
* Use @a scratch_pool for temporary allocations.
*
* @since New in 1.7.
+ * @deprecated Provided for backward compatibility with the 1.7 API. Use
+ * svn_client_get_repos_root() instead.
*/
+SVN_DEPRECATED
svn_error_t *
svn_client_uuid_from_path2(const char **uuid,
const char *local_abspath,
@@ -5756,14 +6440,32 @@ svn_client_uuid_from_path(const char **uuid,
/** Open an RA session rooted at @a url, and return it in @a *session.
*
* Use the authentication baton stored in @a ctx for authentication.
- * @a *session is allocated in @a pool.
+ * @a *session is allocated in @a result_pool.
*
- * @since New in 1.3.
+ * If @a wri_abspath is not NULL, use the working copy identified by @a
+ * wri_abspath to potentially avoid transferring unneeded data.
*
- * @note This function is similar to svn_ra_open3(), but the caller avoids
+ * @note This function is similar to svn_ra_open4(), but the caller avoids
* having to providing its own callback functions.
+ * @since New in 1.8.
*/
svn_error_t *
+svn_client_open_ra_session2(svn_ra_session_t **session,
+ const char *url,
+ const char *wri_abspath,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/** Similar to svn_client_open_ra_session2(), but with @ wri_abspath
+ * always passed as NULL, and with the same pool used as both @a
+ * result_pool and @a scratch_pool.
+ *
+ * @since New in 1.3.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ */
+SVN_DEPRECATED
+svn_error_t *
svn_client_open_ra_session(svn_ra_session_t **session,
const char *url,
svn_client_ctx_t *ctx,
diff --git a/subversion/include/svn_cmdline.h b/subversion/include/svn_cmdline.h
index afcbc4f..80442e4 100644
--- a/subversion/include/svn_cmdline.h
+++ b/subversion/include/svn_cmdline.h
@@ -159,7 +159,7 @@ svn_cmdline_handle_exit_error(svn_error_t *error,
apr_pool_t *pool,
const char *prefix);
-/** A cancellation function/baton pair, and the path to the configuration
+/** A prompt function/baton pair, and the path to the configuration
* directory. To be passed as the baton argument to the
* @c svn_cmdline_*_prompt functions.
*
@@ -369,18 +369,6 @@ svn_cmdline_setup_auth_baton(svn_auth_baton_t **ab,
void *cancel_baton,
apr_pool_t *pool);
-/** Wrapper for apr_getopt_init(), which see.
- *
- * @since New in 1.4.
- *
- * This is a private API for Subversion's own use.
- */
-svn_error_t *
-svn_cmdline__getopt_init(apr_getopt_t **os,
- int argc,
- const char *argv[],
- apr_pool_t *pool);
-
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/include/svn_config.h b/subversion/include/svn_config.h
index b689360..a3fa9df 100644
--- a/subversion/include/svn_config.h
+++ b/subversion/include/svn_config.h
@@ -34,6 +34,7 @@
#include <apr_hash.h> /* for apr_hash_t */
#include "svn_types.h"
+#include "svn_io.h"
#ifdef __cplusplus
extern "C" {
@@ -61,6 +62,10 @@ typedef struct svn_config_t svn_config_t;
* client configuration files.
* @{
*/
+
+ /* This list of #defines is intentionally presented as a nested list
+ that matches the in-config hierarchy. */
+
#define SVN_CONFIG_CATEGORY_SERVERS "servers"
#define SVN_CONFIG_SECTION_GROUPS "groups"
#define SVN_CONFIG_SECTION_GLOBAL "global"
@@ -86,12 +91,21 @@ typedef struct svn_config_t svn_config_t;
#define SVN_CONFIG_OPTION_STORE_SSL_CLIENT_CERT_PP_PLAINTEXT \
"store-ssl-client-cert-pp-plaintext"
#define SVN_CONFIG_OPTION_USERNAME "username"
+/** @since New in 1.8. */
+#define SVN_CONFIG_OPTION_HTTP_BULK_UPDATES "http-bulk-updates"
+/** @since New in 1.8. */
+#define SVN_CONFIG_OPTION_HTTP_MAX_CONNECTIONS "http-max-connections"
#define SVN_CONFIG_CATEGORY_CONFIG "config"
#define SVN_CONFIG_SECTION_AUTH "auth"
+/** @since New in 1.6. */
#define SVN_CONFIG_OPTION_PASSWORD_STORES "password-stores"
+/** @since New in 1.6. */
#define SVN_CONFIG_OPTION_KWALLET_WALLET "kwallet-wallet"
+/** @since New in 1.6. */
#define SVN_CONFIG_OPTION_KWALLET_SVN_APPLICATION_NAME_WITH_PID "kwallet-svn-application-name-with-pid"
+/** @since New in 1.8. */
+#define SVN_CONFIG_OPTION_SSL_CLIENT_CERT_FILE_PROMPT "ssl-client-cert-file-prompt"
/* The majority of options of the "auth" section
* has been moved to SVN_CONFIG_CATEGORY_SERVERS. */
#define SVN_CONFIG_SECTION_HELPERS "helpers"
@@ -106,15 +120,24 @@ typedef struct svn_config_t svn_config_t;
#define SVN_CONFIG_OPTION_GLOBAL_IGNORES "global-ignores"
#define SVN_CONFIG_OPTION_LOG_ENCODING "log-encoding"
#define SVN_CONFIG_OPTION_USE_COMMIT_TIMES "use-commit-times"
+/** @deprecated Not used by Subversion since 2003/r847039 (well before 1.0) */
#define SVN_CONFIG_OPTION_TEMPLATE_ROOT "template-root"
#define SVN_CONFIG_OPTION_ENABLE_AUTO_PROPS "enable-auto-props"
#define SVN_CONFIG_OPTION_NO_UNLOCK "no-unlock"
#define SVN_CONFIG_OPTION_MIMETYPES_FILE "mime-types-file"
#define SVN_CONFIG_OPTION_PRESERVED_CF_EXTS "preserved-conflict-file-exts"
+/** @since New in 1.7. */
#define SVN_CONFIG_OPTION_INTERACTIVE_CONFLICTS "interactive-conflicts"
+/** @since New in 1.7. */
#define SVN_CONFIG_OPTION_MEMORY_CACHE_SIZE "memory-cache-size"
#define SVN_CONFIG_SECTION_TUNNELS "tunnels"
#define SVN_CONFIG_SECTION_AUTO_PROPS "auto-props"
+/** @since New in 1.8. */
+#define SVN_CONFIG_SECTION_WORKING_COPY "working-copy"
+/** @since New in 1.8. */
+#define SVN_CONFIG_OPTION_SQLITE_EXCLUSIVE "exclusive-locking"
+/** @since New in 1.8. */
+#define SVN_CONFIG_OPTION_SQLITE_EXCLUSIVE_CLIENTS "exclusive-locking-clients"
/** @} */
/** @name Repository conf directory configuration files strings
@@ -129,8 +152,12 @@ typedef struct svn_config_t svn_config_t;
#define SVN_CONFIG_OPTION_PASSWORD_DB "password-db"
#define SVN_CONFIG_OPTION_REALM "realm"
#define SVN_CONFIG_OPTION_AUTHZ_DB "authz-db"
+/** @since New in 1.8. */
+#define SVN_CONFIG_OPTION_GROUPS_DB "groups-db"
/** @since New in 1.7. */
#define SVN_CONFIG_OPTION_FORCE_USERNAME_CASE "force-username-case"
+/** @since New in 1.8. */
+#define SVN_CONFIG_OPTION_HOOKS_ENV "hooks-env"
#define SVN_CONFIG_SECTION_SASL "sasl"
#define SVN_CONFIG_OPTION_USE_SASL "use-sasl"
#define SVN_CONFIG_OPTION_MIN_SSF "min-encryption"
@@ -146,10 +173,12 @@ typedef struct svn_config_t svn_config_t;
/* We want this to be printed on two lines in the generated config file,
* but we don't want the # character to end up in the variable.
*/
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
#define SVN_CONFIG__DEFAULT_GLOBAL_IGNORES_LINE_1 \
- "*.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo"
+ "*.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo __pycache__"
#define SVN_CONFIG__DEFAULT_GLOBAL_IGNORES_LINE_2 \
"*.rej *~ #*# .#* .*.swp .DS_Store"
+#endif
#define SVN_CONFIG_DEFAULT_GLOBAL_IGNORES \
SVN_CONFIG__DEFAULT_GLOBAL_IGNORES_LINE_1 " " \
@@ -168,6 +197,7 @@ typedef struct svn_config_t svn_config_t;
#define SVN_CONFIG_DEFAULT_OPTION_STORE_SSL_CLIENT_CERT_PP TRUE
#define SVN_CONFIG_DEFAULT_OPTION_STORE_SSL_CLIENT_CERT_PP_PLAINTEXT \
SVN_CONFIG_ASK
+#define SVN_CONFIG_DEFAULT_OPTION_HTTP_MAX_CONNECTIONS 4
/** Read configuration information from the standard sources and merge it
* into the hash @a *cfg_hash. If @a config_dir is not NULL it specifies a
@@ -188,15 +218,30 @@ svn_config_get_config(apr_hash_t **cfg_hash,
const char *config_dir,
apr_pool_t *pool);
-
/** Set @a *cfgp to an empty @c svn_config_t structure,
* allocated in @a result_pool.
*
* Pass TRUE to @a section_names_case_sensitive if
* section names are to be populated case sensitively.
*
+ * Pass TRUE to @a option_names_case_sensitive if
+ * option names are to be populated case sensitively.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_config_create2(svn_config_t **cfgp,
+ svn_boolean_t section_names_case_sensitive,
+ svn_boolean_t option_names_case_sensitive,
+ apr_pool_t *result_pool);
+
+/** Similar to svn_config_create2, but always passes @c FALSE to
+ * @a option_names_case_sensitive.
+ *
* @since New in 1.7.
+ * @deprecated Provided for backward compatibility with 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_config_create(svn_config_t **cfgp,
svn_boolean_t section_names_case_sensitive,
@@ -208,21 +253,38 @@ svn_config_create(svn_config_t **cfgp,
* If @a file does not exist, then if @a must_exist, return an error,
* otherwise return an empty @c svn_config_t.
*
- * If @a section_names_case_sensitive is TRUE, populate section name hashes
- * case sensitively, except for the default SVN_CONFIG__DEFAULT_SECTION.
+ * If @a section_names_case_sensitive is @c TRUE, populate section name hashes
+ * case sensitively, except for the @c "DEFAULT" section.
*
- * @since New in 1.7.
+ * If @a option_names_case_sensitive is @c TRUE, populate option name hashes
+ * case sensitively.
+ *
+ * @since New in 1.8.
*/
+svn_error_t *
+svn_config_read3(svn_config_t **cfgp,
+ const char *file,
+ svn_boolean_t must_exist,
+ svn_boolean_t section_names_case_sensitive,
+ svn_boolean_t option_names_case_sensitive,
+ apr_pool_t *result_pool);
+/** Similar to svn_config_read3, but always passes @c FALSE to
+ * @a option_names_case_sensitive.
+ *
+ * @since New in 1.7.
+ * @deprecated Provided for backward compatibility with 1.7 API.
+ */
+SVN_DEPRECATED
svn_error_t *
svn_config_read2(svn_config_t **cfgp,
const char *file,
svn_boolean_t must_exist,
svn_boolean_t section_names_case_sensitive,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
-/** Similar to svn_config_read2, but always passes FALSE to
- * section_names_case_sensitive.
+/** Similar to svn_config_read2, but always passes @c FALSE to
+ * @a section_names_case_sensitive.
*
* @deprecated Provided for backward compatibility with 1.6 API.
*/
@@ -231,7 +293,26 @@ svn_error_t *
svn_config_read(svn_config_t **cfgp,
const char *file,
svn_boolean_t must_exist,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
+
+/** Read configuration data from @a stream into @a *cfgp, allocated in
+ * @a result_pool.
+ *
+ * If @a section_names_case_sensitive is @c TRUE, populate section name hashes
+ * case sensitively, except for the @c "DEFAULT" section.
+ *
+ * If @a option_names_case_sensitive is @c TRUE, populate option name hashes
+ * case sensitively.
+ *
+ * @since New in 1.8.
+ */
+
+svn_error_t *
+svn_config_parse(svn_config_t **cfgp,
+ svn_stream_t *stream,
+ svn_boolean_t section_names_case_sensitive,
+ svn_boolean_t option_names_case_sensitive,
+ apr_pool_t *result_pool);
/** Like svn_config_read(), but merges the configuration data from @a file
* (a file or registry path) into @a *cfg, which was previously returned
@@ -301,6 +382,35 @@ svn_config_set_bool(svn_config_t *cfg,
const char *option,
svn_boolean_t value);
+/** Like svn_config_get(), but for 64-bit signed integers.
+ *
+ * Parses the @a option in @a section of @a cfg as an integer value,
+ * setting @a *valuep to the result. If the option is not found, sets
+ * @a *valuep to @a default_value. If the option is found but cannot
+ * be converted to an integer, returns an error.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_config_get_int64(svn_config_t *cfg,
+ apr_int64_t *valuep,
+ const char *section,
+ const char *option,
+ apr_int64_t default_value);
+
+/** Like svn_config_set(), but for 64-bit signed integers.
+ *
+ * Sets the value of @a option in @a section of @a cfg to the signed
+ * decimal @a value.
+ *
+ * @since New in 1.8.
+ */
+void
+svn_config_set_int64(svn_config_t *cfg,
+ const char *section,
+ const char *option,
+ apr_int64_t value);
+
/** Like svn_config_get(), but only for yes/no/ask values.
*
* Parse @a option in @a section and set @a *valuep to one of
@@ -324,6 +434,27 @@ svn_config_get_yes_no_ask(svn_config_t *cfg,
const char *option,
const char* default_value);
+/** Like svn_config_get_bool(), but for tristate values.
+ *
+ * Set @a *valuep to #svn_tristate_true, #svn_tristate_false, or
+ * #svn_tristate_unknown, depending on the value of @a option in @a
+ * section of @a cfg. True and false values are the same as for
+ * svn_config_get_bool(); @a unknown_value specifies the option value
+ * allowed for third state (#svn_tristate_unknown).
+ *
+ * Use @a default_value as the default value if @a option cannot be
+ * found.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_config_get_tristate(svn_config_t *cfg,
+ svn_tristate_t *valuep,
+ const char *section,
+ const char *option,
+ const char *unknown_value,
+ svn_tristate_t default_value);
+
/** Similar to @c svn_config_section_enumerator2_t, but is not
* provided with a memory pool argument.
*
@@ -574,6 +705,69 @@ svn_config_write_auth_data(apr_hash_t *hash,
const char *config_dir,
apr_pool_t *pool);
+
+/** Callback for svn_config_walk_auth_data().
+ *
+ * Called for each credential walked by that function (and able to be
+ * fully purged) to allow perusal and selective removal of credentials.
+ *
+ * @a cred_kind and @a realmstring specify the key of the credential.
+ * @a hash contains the hash data associated with the record.
+ *
+ * Before returning set @a *delete_cred to TRUE to remove the credential from
+ * the cache; leave @a *delete_cred unchanged or set it to FALSE to keep the
+ * credential.
+ *
+ * Implementations may return #SVN_ERR_CEASE_INVOCATION to indicate
+ * that the callback should not be called again. Note that when that
+ * error is returned, the value of @a delete_cred will still be
+ * honored and action taken if necessary. (For other returned errors,
+ * @a delete_cred is ignored by svn_config_walk_auth_data().)
+ *
+ * @since New in 1.8.
+ */
+typedef svn_error_t *
+(*svn_config_auth_walk_func_t)(svn_boolean_t *delete_cred,
+ void *cleanup_baton,
+ const char *cred_kind,
+ const char *realmstring,
+ apr_hash_t *hash,
+ apr_pool_t *scratch_pool);
+
+/** Call @a walk_func with @a walk_baton and information describing
+ * each credential cached within the Subversion auth store located
+ * under @a config_dir. If the callback sets its delete_cred return
+ * flag, delete the associated credential.
+ *
+ * If @a config_dir is not NULL, it must point to an alternative
+ * config directory location. If it is NULL, the default location
+ * is used.
+ *
+ * @note @a config_dir may only be NULL in 1.8.2 and later.
+ *
+ * @note Removing credentials from the config-based disk store will
+ * not purge them from any open svn_auth_baton_t instance. Consider
+ * using svn_auth_forget_credentials() -- from the @a cleanup_func,
+ * even -- for this purpose.
+ *
+ * @note Removing credentials from the config-based disk store will
+ * not also remove any related credentials from third-party password
+ * stores. (Implementations of @a walk_func which delete credentials
+ * may wish to consult the "passtype" element of @a hash, if any, to
+ * see if a third-party store -- such as "gnome-keyring" or "kwallet"
+ * is being used to hold the most sensitive portion of the credentials
+ * for this @a cred_kind and @a realmstring.)
+ *
+ * @see svn_auth_forget_credentials()
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_config_walk_auth_data(const char *config_dir,
+ svn_config_auth_walk_func_t walk_func,
+ void *walk_baton,
+ apr_pool_t *scratch_pool);
+
/** Put the absolute path to the user's configuration directory,
* or to a file within that directory, into @a *path.
*
@@ -598,6 +792,26 @@ svn_config_get_user_config_path(const char **path,
const char *fname,
apr_pool_t *pool);
+/** Create a deep copy of the config object @a src and return
+ * it in @a cfgp, allocating the memory in @a pool.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_config_dup(svn_config_t **cfgp,
+ svn_config_t *src,
+ apr_pool_t *pool);
+
+/** Create a deep copy of the config hash @a src_hash and return
+ * it in @a cfg_hash, allocating the memory in @a pool.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_config_copy_config(apr_hash_t **cfg_hash,
+ apr_hash_t *src_hash,
+ apr_pool_t *pool);
+
/** @} */
#ifdef __cplusplus
diff --git a/subversion/include/svn_dav.h b/subversion/include/svn_dav.h
index d3eacf6..e9092d5 100644
--- a/subversion/include/svn_dav.h
+++ b/subversion/include/svn_dav.h
@@ -53,6 +53,15 @@ extern "C" {
/** This header is *TEMPORARILY* used to transmit the delta base to the
* server. It contains a version resource URL for what is on the client.
+ *
+ * @note The HTTP delta draft recommends an If-None-Match header
+ * holding an entity tag corresponding to the base copy that the
+ * client has. In Subversion, it is much more natural to use a version
+ * URL to specify that base. We'd like, then, to use the If: header
+ * to specify the URL. Unfortunately, mod_dav sees all "State-token"
+ * items as lock tokens. So we'll use this custom header until mod_dav
+ * and other backend APIs are taught to be less rigid, at which time
+ * we can switch to using an If: header to report our base version.
*/
#define SVN_DAV_DELTA_BASE_HEADER "X-SVN-VR-Base"
@@ -171,12 +180,31 @@ extern "C" {
#define SVN_DAV_TXN_NAME_HEADER "SVN-Txn-Name"
/** This header is used in the POST request, to pass a client supplied
- * alternative transaction name to the server, and in the the POST
+ * alternative transaction name to the server, and in the POST
* response, to tell the client that the alternative transaction
* resource names should be used. (HTTP protocol v2 only)
* @since New in 1.7. */
#define SVN_DAV_VTXN_NAME_HEADER "SVN-VTxn-Name"
+/** This header is used in the OPTIONS response to identify named
+ * skel-based POST request types which the server is prepared to
+ * handle. (HTTP protocol v2 only)
+ * @since New in 1.8. */
+#define SVN_DAV_SUPPORTED_POSTS_HEADER "SVN-Supported-Posts"
+
+/** This header is used in the OPTIONS response to indicate if the server
+ * wants bulk update requests (Prefer) or only accepts skelta requests (Off).
+ * If this value is On both options are allowed.
+ * @since New in 1.8. */
+#define SVN_DAV_ALLOW_BULK_UPDATES "SVN-Allow-Bulk-Updates"
+
+/** Assuming the request target is a Subversion repository resource,
+ * this header is returned in the OPTIONS response to indicate whether
+ * the repository supports the merge tracking feature ("yes") or not
+ * ("no").
+ * @since New in 1.8. */
+#define SVN_DAV_REPOSITORY_MERGEINFO "SVN-Repository-MergeInfo"
+
/**
* @name Fulltext MD5 headers
*
@@ -249,12 +277,27 @@ extern "C" {
* @name Custom (extension) values for the DAV header.
* Note that although these share the SVN_DAV_PROP_NS_DAV namespace
* prefix, they are not properties; they are header values.
+ * @{
+ */
+
+/* ##################################################################
+ *
+ * WARNING: At least some versions of Microsoft's Web Folders
+ * WebDAV client implementation are unable to handle
+ * DAV: headers with values longer than 63 characters,
+ * so please keep these strings within that limit.
*
- * @{ **/
+ * ##################################################################
+ */
+
/** Presence of this in a DAV header in an OPTIONS request or response
- * indicates that the transmitter supports @c svn_depth_t. */
-#define SVN_DAV_NS_DAV_SVN_DEPTH SVN_DAV_PROP_NS_DAV "svn/depth"
+ * indicates that the transmitter supports @c svn_depth_t.
+ *
+ * @since New in 1.5.
+ */
+#define SVN_DAV_NS_DAV_SVN_DEPTH\
+ SVN_DAV_PROP_NS_DAV "svn/depth"
/** Presence of this in a DAV header in an OPTIONS request or response
* indicates that the server knows how to handle merge-tracking
@@ -263,25 +306,86 @@ extern "C" {
* Note that this says nothing about whether the repository can handle
* mergeinfo, only whether the server does. For more information, see
* mod_dav_svn/version.c:get_vsn_options().
+ *
+ * @since New in 1.5.
*/
-#define SVN_DAV_NS_DAV_SVN_MERGEINFO SVN_DAV_PROP_NS_DAV "svn/mergeinfo"
+#define SVN_DAV_NS_DAV_SVN_MERGEINFO\
+ SVN_DAV_PROP_NS_DAV "svn/mergeinfo"
/** Presence of this in a DAV header in an OPTIONS response indicates
* that the transmitter (in this case, the server) knows how to send
- * custom revprops in log responses. */
-#define SVN_DAV_NS_DAV_SVN_LOG_REVPROPS SVN_DAV_PROP_NS_DAV "svn/log-revprops"
+ * custom revprops in log responses.
+ *
+ * @since New in 1.5.
+ */
+#define SVN_DAV_NS_DAV_SVN_LOG_REVPROPS\
+ SVN_DAV_PROP_NS_DAV "svn/log-revprops"
+
+/** Presence of this in a DAV header in an OPTIONS response indicates
+ * that the transmitter (in this case, the server) knows how to handle
+ * a replay of a directory in the repository (not root).
+ *
+ * @since New in 1.5.
+ */
+#define SVN_DAV_NS_DAV_SVN_PARTIAL_REPLAY\
+ SVN_DAV_PROP_NS_DAV "svn/partial-replay"
/** Presence of this in a DAV header in an OPTIONS response indicates
* that the transmitter (in this case, the server) knows how to enforce
- * old-value atomicity in PROPPATCH (for editing revprops). */
+ * old-value atomicity in PROPPATCH (for editing revprops).
+ *
+ * @since New in 1.7.
+ */
#define SVN_DAV_NS_DAV_SVN_ATOMIC_REVPROPS\
SVN_DAV_PROP_NS_DAV "svn/atomic-revprops"
/** Presence of this in a DAV header in an OPTIONS response indicates
+ * that the transmitter (in this case, the server) knows how to get
+ * inherited properties.
+ *
+ * @since New in 1.8.
+ */
+#define SVN_DAV_NS_DAV_SVN_INHERITED_PROPS\
+ SVN_DAV_PROP_NS_DAV "svn/inherited-props"
+
+/** Presence of this in a DAV header in an OPTIONS response indicates
+ * that the transmitter (in this case, the server) knows how to
+ * properly handle ephemeral (that is, deleted-just-before-commit) FS
+ * transaction properties.
+ *
+ * @since New in 1.8.
+ */
+#define SVN_DAV_NS_DAV_SVN_EPHEMERAL_TXNPROPS\
+ SVN_DAV_PROP_NS_DAV "svn/ephemeral-txnprops"
+
+/** Presence of this in a DAV header in an OPTIONS response indicates
+ * that the transmitter (in this case, the server) supports serving
+ * properties inline in update editor when 'send-all' is 'false'.
+ *
+ * @since New in 1.8.
+ */
+#define SVN_DAV_NS_DAV_SVN_INLINE_PROPS\
+ SVN_DAV_PROP_NS_DAV "svn/inline-props"
+
+/** Presence of this in a DAV header in an OPTIONS response indicates
* that the transmitter (in this case, the server) knows how to handle
- * a replay of a directory in the repository (not root). */
-#define SVN_DAV_NS_DAV_SVN_PARTIAL_REPLAY\
- SVN_DAV_PROP_NS_DAV "svn/partial-replay"
+ * a replay of a revision resource. Transmitters must be
+ * HTTP-v2-enabled to support this feature.
+ *
+ * @since New in 1.8.
+ */
+#define SVN_DAV_NS_DAV_SVN_REPLAY_REV_RESOURCE\
+ SVN_DAV_PROP_NS_DAV "svn/replay-rev-resource"
+
+/** Presence of this in a DAV header in an OPTIONS response indicates
+ * that the transmitter (in this case, the server) knows how to handle
+ * a reversed fetch of file versions.
+ *
+ * @since New in 1.8.
+ */
+#define SVN_DAV_NS_DAV_SVN_REVERSE_FILE_REVS\
+ SVN_DAV_PROP_NS_DAV "svn/reverse-file-revs"
+
/** @} */
diff --git a/subversion/include/svn_delta.h b/subversion/include/svn_delta.h
index b6130da..7df7f3f 100644
--- a/subversion/include/svn_delta.h
+++ b/subversion/include/svn_delta.h
@@ -366,11 +366,27 @@ svn_txdelta_md5_digest(svn_txdelta_stream_t *stream);
*
* @a source and @a target are both readable generic streams. When we call
* svn_txdelta_next_window() on @a *stream, it will read from @a source and
- * @a target to gather as much data as it needs.
+ * @a target to gather as much data as it needs. If @a calculate_checksum
+ * is set, you may call svn_txdelta_md5_digest() to get an MD5 checksum
+ * for @a target.
*
* Do any necessary allocation in a sub-pool of @a pool.
+ *
+ * @since New in 1.8.
*/
void
+svn_txdelta2(svn_txdelta_stream_t **stream,
+ svn_stream_t *source,
+ svn_stream_t *target,
+ svn_boolean_t calculate_checksum,
+ apr_pool_t *pool);
+
+/** Similar to svn_txdelta2 but always calculating the target checksum.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ */
+SVN_DEPRECATED
+void
svn_txdelta(svn_txdelta_stream_t **stream,
svn_stream_t *source,
svn_stream_t *target,
@@ -435,6 +451,20 @@ svn_txdelta_send_txstream(svn_txdelta_stream_t *txstream,
apr_pool_t *pool);
+/** Send the @a contents of length @a len as a txdelta against an empty
+ * source directly to window-handler @a handler/@a handler_baton.
+ *
+ * All temporary allocation is performed in @a pool.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_txdelta_send_contents(const unsigned char *contents,
+ apr_size_t len,
+ svn_txdelta_window_handler_t handler,
+ void *handler_baton,
+ apr_pool_t *pool);
+
/** Prepare to apply a text delta. @a source is a readable generic stream
* yielding the source data, @a target is a writable generic stream to
* write target data to, and allocation takes place in a sub-pool of
@@ -466,6 +496,7 @@ svn_txdelta_apply(svn_stream_t *source,
+
/*** Producing and consuming svndiff-format text deltas. ***/
/** Prepare to produce an svndiff-format diff from text delta windows.
@@ -649,10 +680,12 @@ svn_txdelta_skip_svndiff_window(apr_file_t *file,
*
* Each of these takes a directory baton, indicating the directory
* in which the change takes place, and a @a path argument, giving the
- * path (relative to the root of the edit) of the file,
- * subdirectory, or directory entry to change. Editors will usually
- * want to join this relative path with some base stored in the edit
- * baton (e.g. a URL, a location in the OS filesystem).
+ * path of the file, subdirectory, or directory entry to change.
+ *
+ * The @a path argument to each of the callbacks is relative to the
+ * root of the edit. Editors will usually want to join this relative
+ * path with some base stored in the edit baton (e.g. a URL, or a
+ * location in the OS filesystem).
*
* Since every call requires a parent directory baton, including
* @c add_directory and @c open_directory, where do we ever get our
@@ -789,8 +822,9 @@ svn_txdelta_skip_svndiff_window(apr_file_t *file,
* number of operations later. As a result, an editor driver must not
* assume that an error from an editing function resulted from the
* particular operation being detected. Moreover, once an editing
- * function returns an error, the edit is dead; the only further
- * operation which may be called on the editor is abort_edit.
+ * function (including @c close_edit) returns an error, the edit is
+ * dead; the only further operation which may be called on the editor
+ * is @c abort_edit.
*/
typedef struct svn_delta_editor_t
{
@@ -826,7 +860,7 @@ typedef struct svn_delta_editor_t
void **root_baton);
- /** Remove the directory entry named @a path, a child of the directory
+ /** Remove the directory entry at @a path, a child of the directory
* represented by @a parent_baton. If @a revision is a valid
* revision number, it is used as a sanity check to ensure that you
* are really removing the revision of @a path that you think you are.
@@ -847,9 +881,10 @@ typedef struct svn_delta_editor_t
apr_pool_t *scratch_pool);
- /** We are going to add a new subdirectory named @a path. We will use
+ /** We are going to add a new subdirectory at @a path, a child of
+ * the directory represented by @a parent_baton. We will use
* the value this callback stores in @a *child_baton as the
- * @a parent_baton for further changes in the new subdirectory.
+ * parent baton for further changes in the new subdirectory.
*
* If @a copyfrom_path is non-@c NULL, this add has history (i.e., is a
* copy), and the origin of the copy may be recorded as
@@ -866,10 +901,10 @@ typedef struct svn_delta_editor_t
apr_pool_t *result_pool,
void **child_baton);
- /** We are going to make changes in a subdirectory (of the directory
- * identified by @a parent_baton). The subdirectory is specified by
- * @a path. The callback must store a value in @a *child_baton that
- * should be used as the @a parent_baton for subsequent changes in this
+ /** We are going to make changes in the subdirectory at @a path, a
+ * child of the directory represented by @a parent_baton.
+ * The callback must store a value in @a *child_baton that
+ * should be used as the parent baton for subsequent changes in this
* subdirectory. If a valid revnum, @a base_revision is the current
* revision of the subdirectory.
*
@@ -912,8 +947,9 @@ typedef struct svn_delta_editor_t
/** In the directory represented by @a parent_baton, indicate that
* @a path is present as a subdirectory in the edit source, but
- * cannot be conveyed to the edit consumer (perhaps because of
- * authorization restrictions).
+ * cannot be conveyed to the edit consumer. Currently, this would
+ * only occur because of authorization restrictions, but may change
+ * in the future.
*
* Any temporary allocations may be performed in @a scratch_pool.
*/
@@ -921,7 +957,8 @@ typedef struct svn_delta_editor_t
void *parent_baton,
apr_pool_t *scratch_pool);
- /** We are going to add a new file named @a path. The callback can
+ /** We are going to add a new file at @a path, a child of the
+ * directory represented by @a parent_baton. The callback can
* store a baton for this new file in @a **file_baton; whatever value
* it stores there should be passed through to @c apply_textdelta.
*
@@ -950,8 +987,8 @@ typedef struct svn_delta_editor_t
apr_pool_t *result_pool,
void **file_baton);
- /** We are going to make change to a file named @a path, which resides
- * in the directory identified by @a parent_baton.
+ /** We are going to make changes to a file at @a path, a child of the
+ * directory represented by @a parent_baton.
*
* The callback can store a baton for this new file in @a **file_baton;
* whatever value it stores there should be passed through to
@@ -1035,8 +1072,9 @@ typedef struct svn_delta_editor_t
/** In the directory represented by @a parent_baton, indicate that
* @a path is present as a file in the edit source, but cannot be
- * conveyed to the edit consumer (perhaps because of authorization
- * restrictions).
+ * cannot be conveyed to the edit consumer. Currently, this would
+ * only occur because of authorization restrictions, but may change
+ * in the future.
*
* Any temporary allocations may be performed in @a scratch_pool.
*/
@@ -1164,7 +1202,8 @@ svn_delta_depth_filter_editor(const svn_delta_editor_t **editor,
/** Callback function type for svn_delta_path_driver().
*
* The handler of this callback is given the callback baton @a
- * callback_baton, @a path, and the @a parent_baton which represents
+ * callback_baton, @a path which is a relpath relative to the
+ * root of the edit, and the @a parent_baton which represents
* path's parent directory as created by the editor passed to
* svn_delta_path_driver().
*
@@ -1190,17 +1229,43 @@ typedef svn_error_t *(*svn_delta_path_driver_cb_func_t)(
apr_pool_t *pool);
-/** Drive @a editor (with its @a edit_baton) in such a way that
- * each path in @a paths is traversed in a depth-first fashion. As
- * each path is hit as part of the editor drive, use @a
- * callback_func and @a callback_baton to allow the caller to handle
+/** Drive @a editor (with its @a edit_baton) to visit each path in @a paths.
+ * As each path is hit as part of the editor drive, use
+ * @a callback_func and @a callback_baton to allow the caller to handle
* the portion of the editor drive related to that path.
*
- * Use @a revision as the revision number passed to intermediate
- * directory openings.
+ * Each path in @a paths is a (const char *) relpath, relative
+ * to the root path of the @a edit. The editor drive will be
+ * performed in the same order as @a paths. The paths should be sorted
+ * using something like svn_sort_compare_paths to ensure that a depth-first
+ * pattern is observed for directory/file baton creation. If @a sort_paths
+ * is set, the function will sort the paths for you. Some callers may need
+ * further customization of the order (ie. libsvn_delta/compat.c).
+ *
+ * Use @a scratch_pool for all necessary allocations.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_delta_path_driver2(const svn_delta_editor_t *editor,
+ void *edit_baton,
+ const apr_array_header_t *paths,
+ svn_boolean_t sort_paths,
+ svn_delta_path_driver_cb_func_t callback_func,
+ void *callback_baton,
+ apr_pool_t *scratch_pool);
+
+
+/** Similar to svn_delta_path_driver2, but takes an (unused) revision,
+ * and will sort the provided @a paths using svn_sort_compare_paths.
+ *
+ * @note In versions prior to 1.8, this function would modify the order
+ * of elements in @a paths, despite the 'const' marker on the parameter.
+ * This has been fixed in 1.8.
*
- * Use @a pool for all necessary allocations.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_delta_path_driver(const svn_delta_editor_t *editor,
void *edit_baton,
@@ -1208,7 +1273,7 @@ svn_delta_path_driver(const svn_delta_editor_t *editor,
const apr_array_header_t *paths,
svn_delta_path_driver_cb_func_t callback_func,
void *callback_baton,
- apr_pool_t *pool);
+ apr_pool_t *scratch_pool);
/** @} */
diff --git a/subversion/include/svn_diff.h b/subversion/include/svn_diff.h
index d9c7c88..ac9f8fc 100644
--- a/subversion/include/svn_diff.h
+++ b/subversion/include/svn_diff.h
@@ -279,6 +279,9 @@ svn_diff_contains_diffs(svn_diff_t *diff);
* Differences, similarities, and conflicts are described by lining up
* "ranges" of data.
*
+ * Any of the function pointers in this vtable may be NULL to ignore the
+ * corresponding kinds of output.
+ *
* @note These callbacks describe data ranges in units of "tokens".
* A "token" is whatever you've defined it to be in your datasource
* @c svn_diff_fns_t vtable.
@@ -477,6 +480,7 @@ svn_diff_file_options_create(apr_pool_t *pool);
* - --ignore-space-change, -b
* - --ignore-all-space, -w
* - --ignore-eol-style
+ * - --show-c-function, -p @since New in 1.5.
* - --unified, -u (for compatibility, does nothing).
*/
svn_error_t *
@@ -744,17 +748,21 @@ svn_diff_mem_string_diff4(svn_diff_t **diff,
/** Outputs the @a diff object generated by svn_diff_mem_string_diff()
* in unified diff format on @a output_stream, using @a original
* and @a modified for the text in the output.
- * A diff header is only written to the output if @a with_diff_header
- * is TRUE.
+ *
+ * If @a with_diff_header is TRUE, write a diff header ("---" and "+++"
+ * lines), using @a original_header and @a modified_header to fill the field
+ * after the "---" and "+++" markers; otherwise @a original_header and
+ * @a modified_header are ignored and may be NULL.
*
* Outputs the header and hunk delimiters in @a header_encoding.
* A @a hunk_delimiter can optionally be specified.
* If @a hunk_delimiter is NULL, use the default hunk delimiter "@@".
*
- * @a original_header and @a modified header are
- * used to fill the field after the "---" and "+++" header markers.
+ * As a special case, if the hunk delimiter is "##", then for an incomplete
+ * final line use the text "\ No newline at end of property" instead of
+ * "\ No newline at end of file".
*
- * @since New in 1.7.
+ * @since New in 1.7. Hunk delimiter "##" has the special meaning since 1.8.
*/
svn_error_t *
svn_diff_mem_string_output_unified2(svn_stream_t *output_stream,
@@ -839,7 +847,6 @@ svn_diff_mem_string_output_merge(svn_stream_t *output_stream,
apr_pool_t *pool);
-
/* Diff parsing. If you want to apply a patch to a working copy
* rather than parse it, see svn_client_patch(). */
@@ -904,8 +911,8 @@ typedef struct svn_diff_hunk_t svn_diff_hunk_t;
/**
* Allocate @a *stringbuf in @a result_pool, and read into it one line
- * of the diff text of @a hunk. The first line returned is the hunk header.
- * Any subsequent lines are unidiff data (starting with '+', '-', or ' ').
+ * of the diff text of @a hunk. The hunk header is not returned only the
+ * unidiff data lines (starting with '+', '-', or ' ') are returned.
* If the @a hunk is being interpreted in reverse (i.e. the reverse
* parameter of svn_diff_parse_next_patch() was @c TRUE), the diff
* text will be returned in reversed form.
@@ -915,6 +922,13 @@ typedef struct svn_diff_hunk_t svn_diff_hunk_t;
* hunk does not end with a newline character and @a eol is not NULL.
* Temporary allocations will be performed in @a scratch_pool.
*
+ * @note The hunk header information can be retrievied with the following
+ * functions:
+ * @see svn_diff_hunk_get_original_start()
+ * @see svn_diff_hunk_get_original_length()
+ * @see svn_diff_hunk_get_modified_start()
+ * @see svn_diff_hunk_get_modified_length()
+ *
* @since New in 1.7.
*/
svn_error_t *
@@ -1044,7 +1058,7 @@ typedef struct svn_patch_t {
const char *new_filename;
/**
- * An array containing an svn_diff_hunk_t object for each hunk parsed
+ * An array containing an svn_diff_hunk_t * for each hunk parsed
* from the patch. */
apr_array_header_t *hunks;
@@ -1062,12 +1076,12 @@ typedef struct svn_patch_t {
svn_boolean_t reverse;
} svn_patch_t;
-/* An opaque type representing an open patch file.
+/** An opaque type representing an open patch file.
*
* @since New in 1.7. */
typedef struct svn_patch_file_t svn_patch_file_t;
-/* Open @a patch_file at @a local_abspath.
+/** Open @a patch_file at @a local_abspath.
* Allocate @a patch_file in @a result_pool.
*
* @since New in 1.7. */
diff --git a/subversion/include/svn_dirent_uri.h b/subversion/include/svn_dirent_uri.h
index 31fc378..c4374d7 100644
--- a/subversion/include/svn_dirent_uri.h
+++ b/subversion/include/svn_dirent_uri.h
@@ -28,24 +28,24 @@
* - a dirent is a path on (local) disc or a UNC path (Windows) in
* either relative or absolute format.
* Examples:
- * "/foo/bar", "X:/temp", "//server/share", "A:/" (Windows only)
+ * "/foo/bar", "X:/temp", "//server/share", "A:/" (Windows only), ""
* But not:
* "http://server"
*
- * - a uri, for our purposes, is a percent-encoded, absolute path
+ * - a uri, for our purposes, is a percent-encoded, absolute path
* (URI) that starts with a schema definition. In practice, these
* tend to look like URLs, but never carry query strings.
* Examples:
* "http://server", "file:///path/to/repos",
* "svn+ssh://user@host:123/My%20Stuff/file.doc"
* But not:
- * "file", "dir/file", "A:/dir", "/My%20Stuff/file.doc"
+ * "file", "dir/file", "A:/dir", "/My%20Stuff/file.doc", ""
*
* - a relative path (relpath) is an unrooted path that can be joined
* to any other relative path, uri or dirent. A relative path is
* never rooted/prefixed by a '/'.
* Examples:
- * "file", "dir/file", "dir/subdir/../file"
+ * "file", "dir/file", "dir/subdir/../file", ""
* But not:
* "/file", "http://server/file"
*
@@ -54,6 +54,8 @@
* the path string if it's a dirent or a URI, it's up to the API user to
* make this choice. See also issue #2028.
*
+ * All incoming and outgoing paths are non-NULL unless otherwise documented.
+ *
* All of these functions expect paths passed into them to be in canonical
* form, except:
*
@@ -122,6 +124,10 @@
* source -- such as from the network -- is converted to a dirent it
* should be tested with svn_dirent_is_under_root() before you can
* assume the path to be a safe local path.
+ *
+ * MEMORY ALLOCATION: A function documented as allocating the result
+ * in a pool may instead return a static string such as "." or "". If
+ * the result is equal to an input, it will duplicate the input.
*/
#ifndef SVN_DIRENT_URI_H
@@ -141,34 +147,39 @@ extern "C" {
/** Convert @a dirent from the local style to the canonical internal style.
* "Local style" means native path separators and "." for the empty path.
*
+ * Allocate the result in @a result_pool.
+ *
* @since New in 1.6.
*/
const char *
svn_dirent_internal_style(const char *dirent,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
/** Convert @a dirent from the internal style to the local style.
* "Local style" means native path separators and "." for the empty path.
* If the input is not canonical, the output may not be canonical.
*
+ * Allocate the result in @a result_pool.
+ *
* @since New in 1.6.
*/
const char *
svn_dirent_local_style(const char *dirent,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
/** Convert @a relpath from the local style to the canonical internal style.
* "Local style" means native path separators and "." for the empty path.
*
+ * Allocate the result in @a result_pool.
+ *
* @since New in 1.7.
*/
const char *
svn_relpath__internal_style(const char *relpath,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
-/** Join a base dirent (@a base) with a component (@a component), allocated in
- * @a pool.
+/** Join a base dirent (@a base) with a component (@a component).
*
* If either @a base or @a component is the empty string, then the other
* argument will be copied and returned. If both are the empty string then
@@ -181,15 +192,17 @@ svn_relpath__internal_style(const char *relpath,
* dirents. Only for "internal" canonicalized dirents, since it uses '/'
* for the separator.
*
+ * Allocate the result in @a result_pool.
+ *
* @since New in 1.6.
*/
char *
svn_dirent_join(const char *base,
const char *component,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
-/** Join multiple components onto a @a base dirent, allocated in @a pool. The
- * components are terminated by a @c NULL.
+/** Join multiple components onto a @a base dirent. The components are
+ * terminated by a @c NULL.
*
* If any component is the empty string, it will be ignored.
*
@@ -198,26 +211,30 @@ svn_dirent_join(const char *base,
*
* See svn_dirent_join() for further notes about joining dirents.
*
+ * Allocate the result in @a result_pool.
+ *
* @since New in 1.6.
*/
char *
-svn_dirent_join_many(apr_pool_t *pool,
+svn_dirent_join_many(apr_pool_t *result_pool,
const char *base,
...);
-/** Join a base relpath (@a base) with a component (@a component), allocating
- * the result in @a pool. @a component need not be a single component.
+/** Join a base relpath (@a base) with a component (@a component).
+ * @a component need not be a single component.
*
* If either @a base or @a component is the empty path, then the other
* argument will be copied and returned. If both are the empty path the
* empty path is returned.
*
+ * Allocate the result in @a result_pool.
+ *
* @since New in 1.7.
*/
char *
svn_relpath_join(const char *base,
const char *component,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
/** Gets the name of the specified canonicalized @a dirent as it is known
* within its parent directory. If the @a dirent is root, return "". The
@@ -225,8 +242,8 @@ svn_relpath_join(const char *base,
*
* Example: svn_dirent_basename("/foo/bar") -> "bar"
*
- * The returned basename will be allocated in @a pool. If @a pool is NULL
- * a pointer to the basename in @a dirent is returned.
+ * If @a result_pool is NULL, return a pointer to the basename in @a dirent,
+ * otherwise allocate the result in @a result_pool.
*
* @note If an empty string is passed, then an empty string will be returned.
*
@@ -234,7 +251,7 @@ svn_relpath_join(const char *base,
*/
const char *
svn_dirent_basename(const char *dirent,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
/** Get the dirname of the specified canonicalized @a dirent, defined as
* the dirent with its basename removed.
@@ -242,16 +259,15 @@ svn_dirent_basename(const char *dirent,
* If @a dirent is root ("/", "X:/", "//server/share/") or "", it is returned
* unchanged.
*
- * The returned dirname will be allocated in @a pool.
+ * Allocate the result in @a result_pool.
*
* @since New in 1.6.
*/
char *
svn_dirent_dirname(const char *dirent,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
-/** Divide the canonicalized @a dirent into @a *dirpath and @a
- * *base_name, allocated in @a pool.
+/** Divide the canonicalized @a dirent into @a *dirpath and @a *base_name.
*
* If @a dirpath or @a base_name is NULL, then don't set that one.
*
@@ -272,16 +288,17 @@ svn_dirent_dirname(const char *dirent,
* - <pre>"X:foo" ==> "X:" and "foo"</pre>
* Posix: - <pre>"X:foo" ==> "" and "X:foo"</pre>
*
+ * Allocate the results in @a result_pool.
+ *
* @since New in 1.7.
*/
void
svn_dirent_split(const char **dirpath,
const char **base_name,
const char *dirent,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
-/** Divide the canonicalized @a relpath into @a *dirpath and @a
- * *base_name, allocated in @a pool.
+/** Divide the canonicalized @a relpath into @a *dirpath and @a *base_name.
*
* If @a dirpath or @a base_name is NULL, then don't set that one.
*
@@ -296,13 +313,15 @@ svn_dirent_split(const char **dirpath,
* - <pre>"bar" ==> "" and "bar"</pre>
* - <pre>"" ==> "" and ""</pre>
*
+ * Allocate the results in @a result_pool.
+ *
* @since New in 1.7.
*/
void
svn_relpath_split(const char **dirpath,
const char **base_name,
const char *relpath,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
/** Get the basename of the specified canonicalized @a relpath. The
* basename is defined as the last component of the relpath. If the @a
@@ -311,8 +330,8 @@ svn_relpath_split(const char **dirpath,
*
* Example: svn_relpath_basename("/trunk/foo/bar") -> "bar"
*
- * The returned basename will be allocated in @a pool. If @a
- * pool is NULL a pointer to the basename in @a relpath is returned.
+ * If @a result_pool is NULL, return a pointer to the basename in @a relpath,
+ * otherwise allocate the result in @a result_pool.
*
* @note If an empty string is passed, then an empty string will be returned.
*
@@ -320,24 +339,24 @@ svn_relpath_split(const char **dirpath,
*/
const char *
svn_relpath_basename(const char *relpath,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
/** Get the dirname of the specified canonicalized @a relpath, defined as
* the relpath with its basename removed.
*
* If @a relpath is empty, "" is returned.
*
- * The returned relpath will be allocated in @a pool.
+ * Allocate the result in @a result_pool.
*
* @since New in 1.7.
*/
char *
svn_relpath_dirname(const char *relpath,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
/** Divide the canonicalized @a uri into a uri @a *dirpath and a
- * (URI-decoded) relpath @a *base_name, allocated in @a pool.
+ * (URI-decoded) relpath @a *base_name.
*
* If @a dirpath or @a base_name is NULL, then don't set that one.
*
@@ -350,28 +369,30 @@ svn_relpath_dirname(const char *relpath,
* Examples:
* - <pre>"http://server/foo/bar" ==> "http://server/foo" and "bar"</pre>
*
+ * Allocate the result in @a result_pool.
+ *
* @since New in 1.7.
*/
void
svn_uri_split(const char **dirpath,
const char **base_name,
const char *uri,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
/** Get the (URI-decoded) basename of the specified canonicalized @a
* uri. The basename is defined as the last component of the uri. If
- * the @a uri is root then that is returned. Otherwise, the returned
- * value will have no slashes in it.
+ * the @a uri is root, return "". The returned value will have no
+ * slashes in it.
*
* Example: svn_uri_basename("http://server/foo/bar") -> "bar"
*
- * The returned basename will be allocated in @a pool.
+ * Allocate the result in @a result_pool.
*
* @since New in 1.7.
*/
const char *
svn_uri_basename(const char *uri,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
/** Get the dirname of the specified canonicalized @a uri, defined as
* the uri with its basename removed.
@@ -379,13 +400,13 @@ svn_uri_basename(const char *uri,
* If @a uri is root (e.g. "http://server"), it is returned
* unchanged.
*
- * The returned dirname will be allocated in @a pool.
+ * Allocate the result in @a result_pool.
*
* @since New in 1.7.
*/
char *
svn_uri_dirname(const char *uri,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
/** Return TRUE if @a dirent is considered absolute on the platform at
* hand. E.g. '/foo' on Posix platforms or 'X:/foo', '//server/share/foo'
@@ -431,13 +452,13 @@ svn_uri_is_root(const char *uri,
*
* and possibly other semantically inoperative transformations.
*
- * The returned dirent may be allocated statically or from @a pool.
+ * Allocate the result in @a result_pool.
*
* @since New in 1.6.
*/
const char *
svn_dirent_canonicalize(const char *dirent,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
/** Return a new relpath like @a relpath, but transformed such that some types
@@ -450,13 +471,13 @@ svn_dirent_canonicalize(const char *dirent,
*
* and possibly other semantically inoperative transformations.
*
- * The returned relpath may be allocated statically or from @a pool.
+ * Allocate the result in @a result_pool.
*
* @since New in 1.7.
*/
const char *
svn_relpath_canonicalize(const char *relpath,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
/** Return a new uri like @a uri, but transformed such that some types
@@ -474,16 +495,17 @@ svn_relpath_canonicalize(const char *relpath,
*
* and possibly other semantically inoperative transformations.
*
- * The returned uri may be allocated statically or from @a pool.
+ * Allocate the result in @a result_pool.
*
* @since New in 1.7.
*/
const char *
svn_uri_canonicalize(const char *uri,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
-/** Return @c TRUE iff @a dirent is canonical. Use @a pool for temporary
- * allocations.
+/** Return @c TRUE iff @a dirent is canonical.
+ *
+ * Use @a scratch_pool for temporary allocations.
*
* @note The test for canonicalization is currently defined as
* "looks exactly the same as @c svn_dirent_canonicalize() would make
@@ -494,7 +516,7 @@ svn_uri_canonicalize(const char *uri,
*/
svn_boolean_t
svn_dirent_is_canonical(const char *dirent,
- apr_pool_t *pool);
+ apr_pool_t *scratch_pool);
/** Return @c TRUE iff @a relpath is canonical.
*
@@ -504,37 +526,42 @@ svn_dirent_is_canonical(const char *dirent,
svn_boolean_t
svn_relpath_is_canonical(const char *relpath);
-/** Return @c TRUE iff @a uri is canonical. Use @a pool for temporary
- * allocations.
+/** Return @c TRUE iff @a uri is canonical.
+ *
+ * Use @a scratch_pool for temporary allocations.
*
* @see svn_uri_canonicalize()
* @since New in 1.7.
*/
svn_boolean_t
svn_uri_is_canonical(const char *uri,
- apr_pool_t *pool);
+ apr_pool_t *scratch_pool);
/** Return the longest common dirent shared by two canonicalized dirents,
* @a dirent1 and @a dirent2. If there's no common ancestor, return the
* empty path.
*
+ * Allocate the result in @a result_pool.
+ *
* @since New in 1.6.
*/
char *
svn_dirent_get_longest_ancestor(const char *dirent1,
const char *dirent2,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
/** Return the longest common path shared by two relative paths,
* @a relpath1 and @a relpath2. If there's no common ancestor, return the
* empty path.
*
+ * Allocate the result in @a result_pool.
+ *
* @since New in 1.7.
*/
char *
svn_relpath_get_longest_ancestor(const char *relpath1,
const char *relpath2,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
/** Return the longest common path shared by two canonicalized uris,
* @a uri1 and @a uri2. If there's no common ancestor, return the
@@ -544,37 +571,35 @@ svn_relpath_get_longest_ancestor(const char *relpath1,
* resources), and (b) share a common ancestor in their path
* component, i.e. 'protocol://' is not a sufficient ancestor.
*
+ * Allocate the result in @a result_pool.
+ *
* @since New in 1.7.
*/
char *
svn_uri_get_longest_ancestor(const char *uri1,
const char *uri2,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
/** Convert @a relative canonicalized dirent to an absolute dirent and
- * return the results in @a *pabsolute, allocated in @a pool.
+ * return the results in @a *pabsolute.
* Raise SVN_ERR_BAD_FILENAME if the absolute dirent cannot be determined.
*
+ * Allocate the result in @a result_pool.
+ *
* @since New in 1.6.
*/
svn_error_t *
svn_dirent_get_absolute(const char **pabsolute,
const char *relative,
- apr_pool_t *pool);
-
-/** Similar to svn_uri_skip_ancestor(), except that if @a child_uri is
- * the same as @a parent_uri, it is not considered a child, so the result
- * is @c NULL; an empty string is never returned.
- */
-const char *
-svn_uri__is_child(const char *parent_uri,
- const char *child_uri,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
/** Similar to svn_dirent_skip_ancestor(), except that if @a child_dirent is
* the same as @a parent_dirent, it is not considered a child, so the result
* is @c NULL; an empty string is never returned.
*
+ * If @a result_pool is NULL, return a pointer into @a child_dirent, otherwise
+ * allocate the result in @a result_pool.
+ *
* ### TODO: Deprecate, as the semantics are trivially
* obtainable from *_skip_ancestor().
*
@@ -583,16 +608,7 @@ svn_uri__is_child(const char *parent_uri,
const char *
svn_dirent_is_child(const char *parent_dirent,
const char *child_dirent,
- apr_pool_t *pool);
-
-/** Similar to svn_relpath_skip_ancestor(), except that if @a child_relpath is
- * the same as @a parent_relpath, it is not considered a child, so the result
- * is @c NULL; an empty string is never returned.
- */
-const char *
-svn_relpath__is_child(const char *parent_relpath,
- const char *child_relpath,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
/** Return TRUE if @a parent_dirent is an ancestor of @a child_dirent or
* the dirents are equal, and FALSE otherwise.
@@ -606,13 +622,6 @@ svn_boolean_t
svn_dirent_is_ancestor(const char *parent_dirent,
const char *child_dirent);
-/** Return TRUE if @a parent_relpath is an ancestor of @a child_relpath or
- * the relpaths are equal, and FALSE otherwise.
- */
-svn_boolean_t
-svn_relpath__is_ancestor(const char *parent_relpath,
- const char *child_relpath);
-
/** Return TRUE if @a parent_uri is an ancestor of @a child_uri or
* the uris are equal, and FALSE otherwise.
*/
@@ -637,8 +646,8 @@ svn_dirent_skip_ancestor(const char *parent_dirent,
/** Return the relative path part of @a child_relpath that is below
* @a parent_relpath, or just "" if @a parent_relpath is equal to
- * @a child_relpath. If @a child_relpath is not below or equal to
- * @a parent_relpath, return NULL.
+ * @a child_relpath. If @a child_relpath is not below @a parent_relpath,
+ * return NULL.
*
* @since New in 1.7.
*/
@@ -648,7 +657,8 @@ svn_relpath_skip_ancestor(const char *parent_relpath,
/** Return the URI-decoded relative path of @a child_uri that is below
* @a parent_uri, or just "" if @a parent_uri is equal to @a child_uri. If
- * @a child_uri is not below or equal to @a parent_uri, return NULL.
+ * @a child_uri is not below @a parent_uri, return NULL.
+ *
* Allocate the result in @a result_pool.
*
* @since New in 1.7.
@@ -686,8 +696,8 @@ svn_uri_skip_ancestor(const char *parent_uri,
* If there are no items in @a targets, set @a *pcommon and (if
* applicable) @a *pcondensed_targets to @c NULL.
*
- * Allocates @a *pcommon and @a *targets in @a result_pool. All
- * intermediate allocations will be performed in @a scratch_pool.
+ * Allocate the results in @a result_pool. Use @a scratch_pool for
+ * temporary allocations.
*
* @since New in 1.7.
*/
@@ -727,8 +737,8 @@ svn_dirent_condense_targets(const char **pcommon,
* If there are no items in @a targets, set @a *pcommon and (if
* applicable) @a *pcondensed_targets to @c NULL.
*
- * Allocate @a *pcommon and @a *targets in @a result_pool. Temporary
- * allocations will be performed in @a scratch_pool.
+ * Allocate the results in @a result_pool. Use @a scratch_pool for
+ * temporary allocations.
*
* @since New in 1.7.
*/
@@ -745,12 +755,14 @@ svn_uri_condense_targets(const char **pcommon,
* it resolves to a path above @a base_path, or if @a path is an absolute
* path, then set @a *under_root to @c FALSE. Otherwise, set @a *under_root
* to @c TRUE and, if @a result_path is not @c NULL, set @a *result_path to
- * the resulting path, allocated in @a result_pool.
+ * the resulting path.
*
* @a path need not be canonical. @a base_path must be canonical and
* @a *result_path will be canonical.
*
- * Note: Use of this function is strongly encouraged. Do not roll your own.
+ * Allocate the result in @a result_pool.
+ *
+ * @note Use of this function is strongly encouraged. Do not roll your own.
* (http://cve.mitre.org/cgi-bin/cvename.cgi?name=2007-3846)
*
* @since New in 1.7.
@@ -765,22 +777,26 @@ svn_dirent_is_under_root(svn_boolean_t *under_root,
/** Set @a *dirent to the path corresponding to the file:// URL @a url, using
* the platform-specific file:// rules.
*
+ * Allocate the result in @a result_pool.
+ *
* @since New in 1.7.
*/
svn_error_t *
svn_uri_get_dirent_from_file_url(const char **dirent,
const char *url,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
/** Set @a *url to a file:// URL, corresponding to @a dirent using the
* platform specific dirent and file:// rules.
*
+ * Allocate the result in @a result_pool.
+ *
* @since New in 1.7.
*/
svn_error_t *
svn_uri_get_file_url_from_dirent(const char **url,
const char *dirent,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
#ifdef __cplusplus
}
diff --git a/subversion/include/svn_error.h b/subversion/include/svn_error.h
index 55d27d2..3a6e4c5 100644
--- a/subversion/include/svn_error.h
+++ b/subversion/include/svn_error.h
@@ -66,6 +66,36 @@ svn_strerror(apr_status_t statcode,
apr_size_t bufsize);
+/**
+ * Return the symbolic name of an error code. If the error code
+ * is in svn_error_codes.h, return the name of the macro as a string.
+ * If the error number is not recognised, return @c NULL.
+ *
+ * An error number may not be recognised because it was defined in a future
+ * version of Subversion (e.g., a 1.9.x server may transmit a defined-in-1.9.0
+ * error number to a 1.8.x client).
+ *
+ * An error number may be recognised @em incorrectly if the @c apr_status_t
+ * value originates in another library (such as libserf) which also uses APR.
+ * (This is a theoretical concern only: the @c apr_err member of #svn_error_t
+ * should never contain a "foreign" @c apr_status_t value, and
+ * in any case Subversion and Serf use non-overlapping subsets of the
+ * @c APR_OS_START_USERERR range.)
+ *
+ * Support for error codes returned by APR itself (i.e., not in the
+ * @c APR_OS_START_USERERR range, as defined in apr_errno.h) may be implemented
+ * in the future.
+ *
+ * @note In rare cases, a single numeric code has more than one symbolic name.
+ * (For example, #SVN_ERR_WC_NOT_DIRECTORY and #SVN_ERR_WC_NOT_WORKING_COPY).
+ * In those cases, it is not guaranteed which symbolic name is returned.
+ *
+ * @since New in 1.8.
+ */
+const char *
+svn_error_symbolic_name(apr_status_t statcode);
+
+
/** If @a err has a custom error message, return that, otherwise
* store the generic error string associated with @a err->apr_err into
* @a buf (terminating with NULL) and return @a buf.
@@ -210,7 +240,7 @@ void
svn_error_clear(svn_error_t *error);
-#if defined(SVN_DEBUG)
+#if defined(SVN_ERR__TRACING)
/** Set the error location for debug mode. */
void
svn_error__locate(const char *file,
@@ -315,9 +345,10 @@ svn_handle_warning(FILE *stream,
* @since New in 1.7.
*/
#ifdef SVN_ERR__TRACING
-#define SVN_ERR__TRACED "traced call"
+svn_error_t *
+svn_error__trace(const char *file, long line, svn_error_t *err);
-#define svn_error_trace(expr) svn_error_quick_wrap((expr), SVN_ERR__TRACED)
+#define svn_error_trace(expr) svn_error__trace(__FILE__, __LINE__, (expr))
#else
#define svn_error_trace(expr) (expr)
#endif
@@ -408,7 +439,7 @@ svn_error_t *svn_error_purge_tracing(svn_error_t *err);
err->apr_err == SVN_ERR_RA_NOT_LOCKED || \
err->apr_err == SVN_ERR_FS_LOCK_EXPIRED)
-/** Evaluates to @c TRUE iff @a apr_err (of type #apr_status_t) is in the given
+/** Evaluates to @c TRUE iff @a apr_err (of type apr_status_t) is in the given
* @a category, which should be one of the @c SVN_ERR_*_CATEGORY_START
* constants.
*
@@ -460,6 +491,31 @@ svn_error_t *svn_error_purge_tracing(svn_error_t *err);
abort(); \
} while (1)
+/** Like SVN_ERR_ASSERT(), but append ERR to the returned error chain.
+ *
+ * If EXPR is false, return a malfunction error whose chain includes ERR.
+ * If EXPR is true, do nothing. (In particular, this does not clear ERR.)
+ *
+ * Types: (svn_boolean_t expr, svn_error_t *err)
+ *
+ * @since New in 1.8.
+ */
+#ifdef __clang_analyzer__
+#include <assert.h>
+/* Just ignore ERR. If the assert triggers, it'll be our least concern. */
+#define SVN_ERR_ASSERT_E(expr, err) assert((expr))
+#else
+#define SVN_ERR_ASSERT_E(expr, err) \
+ do { \
+ if (!(expr)) { \
+ return svn_error_compose_create( \
+ svn_error__malfunction(TRUE, __FILE__, __LINE__, #expr), \
+ (err)); \
+ } \
+ } while (0)
+#endif
+
+
/** Check that a condition is true: if not, report an error and possibly
* terminate the program.
*
@@ -478,12 +534,19 @@ svn_error_t *svn_error_purge_tracing(svn_error_t *err);
* evaluation of this expression is not compiled out in release-mode builds.
*
* @since New in 1.6.
+ *
+ * @see SVN_ERR_ASSERT_E()
*/
+#ifdef __clang_analyzer__
+#include <assert.h>
+#define SVN_ERR_ASSERT(expr) assert((expr))
+#else
#define SVN_ERR_ASSERT(expr) \
do { \
if (!(expr)) \
SVN_ERR(svn_error__malfunction(TRUE, __FILE__, __LINE__, #expr)); \
} while (0)
+#endif
/** Similar to SVN_ERR_ASSERT(), but without the option of returning
* an error to the calling function.
diff --git a/subversion/include/svn_error_codes.h b/subversion/include/svn_error_codes.h
index 4b378c9..222bc2b 100644
--- a/subversion/include/svn_error_codes.h
+++ b/subversion/include/svn_error_codes.h
@@ -46,6 +46,10 @@
not defined the enumerated constants yet. */
#if defined(SVN_ERROR_BUILD_ARRAY) || !defined(SVN_ERROR_ENUM_DEFINED)
+/* Note: despite lacking double underscores in its name, the macro
+ SVN_ERROR_BUILD_ARRAY is an implementation detail of Subversion and not
+ a public API. */
+
#include <apr_errno.h> /* APR's error system */
@@ -59,9 +63,9 @@ extern "C" {
#define SVN_ERROR_START \
static const err_defn error_table[] = { \
- { SVN_WARNING, "Warning" },
-#define SVN_ERRDEF(num, offset, str) { num, str },
-#define SVN_ERROR_END { 0, NULL } };
+ { SVN_WARNING, "SVN_WARNING", "Warning" },
+#define SVN_ERRDEF(num, offset, str) { num, #num, str },
+#define SVN_ERROR_END { 0, NULL, NULL } };
#elif !defined(SVN_ERROR_ENUM_DEFINED)
@@ -224,6 +228,11 @@ SVN_ERROR_START
SVN_ERR_BAD_CATEGORY_START + 14,
"Invalid changelist name")
+ /** @since New in 1.8. */
+ SVN_ERRDEF(SVN_ERR_BAD_ATOMIC,
+ SVN_ERR_BAD_CATEGORY_START + 15,
+ "Invalid atomic")
+
/* xml errors */
SVN_ERRDEF(SVN_ERR_XML_ATTRIB_NOT_FOUND,
@@ -528,13 +537,23 @@ SVN_ERROR_START
/** @since New in 1.7. */
SVN_ERRDEF(SVN_ERR_WC_INVALID_OPERATION_DEPTH,
SVN_ERR_WC_CATEGORY_START + 38,
- "The operation can not be performed with the specified depth")
+ "The operation cannot be performed with the specified depth")
/** @since New in 1.7. */
SVN_ERRDEF(SVN_ERR_WC_PATH_ACCESS_DENIED,
SVN_ERR_WC_CATEGORY_START + 39,
"Couldn't open a working copy file because access was denied")
+ /** @since New in 1.8. */
+ SVN_ERRDEF(SVN_ERR_WC_MIXED_REVISIONS,
+ SVN_ERR_WC_CATEGORY_START + 40,
+ "Mixed-revision working copy was found but not expected")
+
+ /** @since New in 1.8 */
+ SVN_ERRDEF(SVN_ERR_WC_DUPLICATE_EXTERNALS_TARGET,
+ SVN_ERR_WC_CATEGORY_START + 41,
+ "Duplicate targets in svn:externals property")
+
/* fs errors */
SVN_ERRDEF(SVN_ERR_FS_GENERAL,
@@ -762,6 +781,21 @@ SVN_ERROR_START
"Property value in filesystem differs from the provided "
"base value")
+ /** @since New in 1.8. */
+ SVN_ERRDEF(SVN_ERR_FS_INCORRECT_EDITOR_COMPLETION,
+ SVN_ERR_FS_CATEGORY_START + 50,
+ "The filesystem editor completion process was not followed")
+
+ /** @since New in 1.8. */
+ SVN_ERRDEF(SVN_ERR_FS_PACKED_REVPROP_READ_FAILURE,
+ SVN_ERR_FS_CATEGORY_START + 51,
+ "A packed revprop could not be read")
+
+ /** @since New in 1.8. */
+ SVN_ERRDEF(SVN_ERR_FS_REVPROP_CACHE_INIT_FAILURE,
+ SVN_ERR_FS_CATEGORY_START + 52,
+ "Could not initialize the revprop caching infrastructure.")
+
/* repos errors */
SVN_ERRDEF(SVN_ERR_REPOS_LOCKED,
@@ -871,6 +905,11 @@ SVN_ERROR_START
SVN_ERR_RA_CATEGORY_START + 11,
"Session URL does not match expected session URL")
+ /** @since New in 1.8. */
+ SVN_ERRDEF(SVN_ERR_RA_CANNOT_CREATE_TUNNEL,
+ SVN_ERR_RA_CATEGORY_START + 12,
+ "Can't create tunnel")
+
/* ra_dav errors */
SVN_ERRDEF(SVN_ERR_RA_DAV_SOCK_INIT,
@@ -905,7 +944,7 @@ SVN_ERROR_START
"Invalid configuration value")
/** @deprecated To improve consistency between ra layers, this error code
- is replaced in ra_{neon|serf} by SVN_ERR_FS_NOT_FOUND.
+ is replaced in ra_serf by SVN_ERR_FS_NOT_FOUND.
Slated for removal in the next major release. */
SVN_ERRDEF(SVN_ERR_RA_DAV_PATH_NOT_FOUND,
SVN_ERR_RA_DAV_CATEGORY_START + 7,
@@ -949,114 +988,6 @@ SVN_ERROR_START
SVN_ERRDEF(SVN_ERR_RA_LOCAL_REPOS_OPEN_FAILED,
SVN_ERR_RA_LOCAL_CATEGORY_START + 1,
"Couldn't open a repository")
- /* ra_svn errors */
-
- SVN_ERRDEF(SVN_ERR_RA_SVN_CMD_ERR,
- SVN_ERR_RA_SVN_CATEGORY_START + 0,
- "Special code for wrapping server errors to report to client")
-
- SVN_ERRDEF(SVN_ERR_RA_SVN_UNKNOWN_CMD,
- SVN_ERR_RA_SVN_CATEGORY_START + 1,
- "Unknown svn protocol command")
-
- SVN_ERRDEF(SVN_ERR_RA_SVN_CONNECTION_CLOSED,
- SVN_ERR_RA_SVN_CATEGORY_START + 2,
- "Network connection closed unexpectedly")
-
- SVN_ERRDEF(SVN_ERR_RA_SVN_IO_ERROR,
- SVN_ERR_RA_SVN_CATEGORY_START + 3,
- "Network read/write error")
-
- SVN_ERRDEF(SVN_ERR_RA_SVN_MALFORMED_DATA,
- SVN_ERR_RA_SVN_CATEGORY_START + 4,
- "Malformed network data")
-
- SVN_ERRDEF(SVN_ERR_RA_SVN_REPOS_NOT_FOUND,
- SVN_ERR_RA_SVN_CATEGORY_START + 5,
- "Couldn't find a repository")
-
- SVN_ERRDEF(SVN_ERR_RA_SVN_BAD_VERSION,
- SVN_ERR_RA_SVN_CATEGORY_START + 6,
- "Client/server version mismatch")
-
- /** @since New in 1.5. */
- SVN_ERRDEF(SVN_ERR_RA_SVN_NO_MECHANISMS,
- SVN_ERR_RA_SVN_CATEGORY_START + 7,
- "Cannot negotiate authentication mechanism")
-
- /** @since New in 1.7 */
- SVN_ERRDEF(SVN_ERR_RA_SVN_EDIT_ABORTED,
- SVN_ERR_RA_SVN_CATEGORY_START + 8,
- "Editor drive was aborted")
-
- /* libsvn_ra_serf errors */
- /** @since New in 1.5. */
- SVN_ERRDEF(SVN_ERR_RA_SERF_SSPI_INITIALISATION_FAILED,
- SVN_ERR_RA_SERF_CATEGORY_START + 0,
- "Initialization of SSPI library failed")
- /** @since New in 1.5. */
- SVN_ERRDEF(SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED,
- SVN_ERR_RA_SERF_CATEGORY_START + 1,
- "Server SSL certificate untrusted")
- /** @since New in 1.7. */
- SVN_ERRDEF(SVN_ERR_RA_SERF_GSSAPI_INITIALISATION_FAILED,
- SVN_ERR_RA_SERF_CATEGORY_START + 2,
- "Initialization of the GSSAPI context failed")
-
- /** @since New in 1.7. */
- SVN_ERRDEF(SVN_ERR_RA_SERF_WRAPPED_ERROR,
- SVN_ERR_RA_SERF_CATEGORY_START + 3,
- "While handling serf response:")
-
- /* libsvn_auth errors */
-
- /* this error can be used when an auth provider doesn't have
- the creds, but no other "real" error occurred. */
- SVN_ERRDEF(SVN_ERR_AUTHN_CREDS_UNAVAILABLE,
- SVN_ERR_AUTHN_CATEGORY_START + 0,
- "Credential data unavailable")
-
- SVN_ERRDEF(SVN_ERR_AUTHN_NO_PROVIDER,
- SVN_ERR_AUTHN_CATEGORY_START + 1,
- "No authentication provider available")
-
- SVN_ERRDEF(SVN_ERR_AUTHN_PROVIDERS_EXHAUSTED,
- SVN_ERR_AUTHN_CATEGORY_START + 2,
- "All authentication providers exhausted")
-
- SVN_ERRDEF(SVN_ERR_AUTHN_CREDS_NOT_SAVED,
- SVN_ERR_AUTHN_CATEGORY_START + 3,
- "Credentials not saved")
-
- /** @since New in 1.5. */
- SVN_ERRDEF(SVN_ERR_AUTHN_FAILED,
- SVN_ERR_AUTHN_CATEGORY_START + 4,
- "Authentication failed")
-
- /* authorization errors */
-
- SVN_ERRDEF(SVN_ERR_AUTHZ_ROOT_UNREADABLE,
- SVN_ERR_AUTHZ_CATEGORY_START + 0,
- "Read access denied for root of edit")
-
- /** @since New in 1.1. */
- SVN_ERRDEF(SVN_ERR_AUTHZ_UNREADABLE,
- SVN_ERR_AUTHZ_CATEGORY_START + 1,
- "Item is not readable")
-
- /** @since New in 1.1. */
- SVN_ERRDEF(SVN_ERR_AUTHZ_PARTIALLY_READABLE,
- SVN_ERR_AUTHZ_CATEGORY_START + 2,
- "Item is partially readable")
-
- SVN_ERRDEF(SVN_ERR_AUTHZ_INVALID_CONFIG,
- SVN_ERR_AUTHZ_CATEGORY_START + 3,
- "Invalid authz configuration")
-
- /** @since New in 1.3 */
- SVN_ERRDEF(SVN_ERR_AUTHZ_UNWRITABLE,
- SVN_ERR_AUTHZ_CATEGORY_START + 4,
- "Item is not writable")
/* svndiff errors */
@@ -1084,12 +1015,6 @@ SVN_ERROR_START
SVN_ERR_SVNDIFF_CATEGORY_START + 5,
"Svndiff compressed data is invalid")
- /* libsvn_diff errors */
-
- SVN_ERRDEF(SVN_ERR_DIFF_DATASOURCE_MODIFIED,
- SVN_ERR_DIFF_CATEGORY_START + 0,
- "Diff data source modified unexpectedly")
-
/* mod_dav_svn errors */
SVN_ERRDEF(SVN_ERR_APMOD_MISSING_PATH_TO_FS,
@@ -1219,7 +1144,7 @@ SVN_ERROR_START
SVN_ERR_CLIENT_CATEGORY_START + 22,
"Can't perform this operation without a valid lock token")
-/** @since New in 1.7. */
+ /** @since New in 1.7. */
SVN_ERRDEF(SVN_ERR_CLIENT_FORBIDDEN_BY_SERVER,
SVN_ERR_CLIENT_CATEGORY_START + 23,
"The operation is forbidden by the server")
@@ -1350,7 +1275,7 @@ SVN_ERROR_START
/** @since New in 1.6. */
SVN_ERRDEF(SVN_ERR_NO_APR_MEMCACHE,
SVN_ERR_MISC_CATEGORY_START + 28,
- "apr memcache library not available")
+ "APR memcache library not available")
/** @since New in 1.6. */
SVN_ERRDEF(SVN_ERR_ATOMIC_INIT_FAILURE,
@@ -1367,7 +1292,9 @@ SVN_ERROR_START
SVN_ERR_MISC_CATEGORY_START + 31,
"Attempted to write to readonly SQLite db")
- /** @since New in 1.6. */
+ /** @since New in 1.6.
+ * @deprecated the internal sqlite support code does not manage schemas
+ * any longer. */
SVN_ERRDEF(SVN_ERR_SQLITE_UNSUPPORTED_SCHEMA,
SVN_ERR_MISC_CATEGORY_START + 32,
"Unsupported schema found in SQLite db")
@@ -1388,6 +1315,21 @@ SVN_ERROR_START
SVN_ERR_MISC_CATEGORY_START + 35,
"Constraint error in SQLite db")
+ /** @since New in 1.8. */
+ SVN_ERRDEF(SVN_ERR_TOO_MANY_MEMCACHED_SERVERS,
+ SVN_ERR_MISC_CATEGORY_START + 36,
+ "Too many memcached servers configured")
+
+ /** @since New in 1.8. */
+ SVN_ERRDEF(SVN_ERR_MALFORMED_VERSION_STRING,
+ SVN_ERR_MISC_CATEGORY_START + 37,
+ "Failed to parse version number string")
+
+ /** @since New in 1.8. */
+ SVN_ERRDEF(SVN_ERR_CORRUPTED_ATOMIC_STORAGE,
+ SVN_ERR_MISC_CATEGORY_START + 38,
+ "Atomic data storage is corrupt")
+
/* command-line client errors */
SVN_ERRDEF(SVN_ERR_CL_ARG_PARSING_ERROR,
@@ -1438,6 +1380,123 @@ SVN_ERROR_START
SVN_ERR_CL_CATEGORY_START + 11,
"Failed processing one or more externals definitions")
+ /* ra_svn errors */
+
+ SVN_ERRDEF(SVN_ERR_RA_SVN_CMD_ERR,
+ SVN_ERR_RA_SVN_CATEGORY_START + 0,
+ "Special code for wrapping server errors to report to client")
+
+ SVN_ERRDEF(SVN_ERR_RA_SVN_UNKNOWN_CMD,
+ SVN_ERR_RA_SVN_CATEGORY_START + 1,
+ "Unknown svn protocol command")
+
+ SVN_ERRDEF(SVN_ERR_RA_SVN_CONNECTION_CLOSED,
+ SVN_ERR_RA_SVN_CATEGORY_START + 2,
+ "Network connection closed unexpectedly")
+
+ SVN_ERRDEF(SVN_ERR_RA_SVN_IO_ERROR,
+ SVN_ERR_RA_SVN_CATEGORY_START + 3,
+ "Network read/write error")
+
+ SVN_ERRDEF(SVN_ERR_RA_SVN_MALFORMED_DATA,
+ SVN_ERR_RA_SVN_CATEGORY_START + 4,
+ "Malformed network data")
+
+ SVN_ERRDEF(SVN_ERR_RA_SVN_REPOS_NOT_FOUND,
+ SVN_ERR_RA_SVN_CATEGORY_START + 5,
+ "Couldn't find a repository")
+
+ SVN_ERRDEF(SVN_ERR_RA_SVN_BAD_VERSION,
+ SVN_ERR_RA_SVN_CATEGORY_START + 6,
+ "Client/server version mismatch")
+
+ /** @since New in 1.5. */
+ SVN_ERRDEF(SVN_ERR_RA_SVN_NO_MECHANISMS,
+ SVN_ERR_RA_SVN_CATEGORY_START + 7,
+ "Cannot negotiate authentication mechanism")
+
+ /** @since New in 1.7 */
+ SVN_ERRDEF(SVN_ERR_RA_SVN_EDIT_ABORTED,
+ SVN_ERR_RA_SVN_CATEGORY_START + 8,
+ "Editor drive was aborted")
+
+ /* libsvn_auth errors */
+
+ /* this error can be used when an auth provider doesn't have
+ the creds, but no other "real" error occurred. */
+ SVN_ERRDEF(SVN_ERR_AUTHN_CREDS_UNAVAILABLE,
+ SVN_ERR_AUTHN_CATEGORY_START + 0,
+ "Credential data unavailable")
+
+ SVN_ERRDEF(SVN_ERR_AUTHN_NO_PROVIDER,
+ SVN_ERR_AUTHN_CATEGORY_START + 1,
+ "No authentication provider available")
+
+ SVN_ERRDEF(SVN_ERR_AUTHN_PROVIDERS_EXHAUSTED,
+ SVN_ERR_AUTHN_CATEGORY_START + 2,
+ "All authentication providers exhausted")
+
+ SVN_ERRDEF(SVN_ERR_AUTHN_CREDS_NOT_SAVED,
+ SVN_ERR_AUTHN_CATEGORY_START + 3,
+ "Credentials not saved")
+
+ /** @since New in 1.5. */
+ SVN_ERRDEF(SVN_ERR_AUTHN_FAILED,
+ SVN_ERR_AUTHN_CATEGORY_START + 4,
+ "Authentication failed")
+
+ /* authorization errors */
+
+ SVN_ERRDEF(SVN_ERR_AUTHZ_ROOT_UNREADABLE,
+ SVN_ERR_AUTHZ_CATEGORY_START + 0,
+ "Read access denied for root of edit")
+
+ /** @since New in 1.1. */
+ SVN_ERRDEF(SVN_ERR_AUTHZ_UNREADABLE,
+ SVN_ERR_AUTHZ_CATEGORY_START + 1,
+ "Item is not readable")
+
+ /** @since New in 1.1. */
+ SVN_ERRDEF(SVN_ERR_AUTHZ_PARTIALLY_READABLE,
+ SVN_ERR_AUTHZ_CATEGORY_START + 2,
+ "Item is partially readable")
+
+ SVN_ERRDEF(SVN_ERR_AUTHZ_INVALID_CONFIG,
+ SVN_ERR_AUTHZ_CATEGORY_START + 3,
+ "Invalid authz configuration")
+
+ /** @since New in 1.3 */
+ SVN_ERRDEF(SVN_ERR_AUTHZ_UNWRITABLE,
+ SVN_ERR_AUTHZ_CATEGORY_START + 4,
+ "Item is not writable")
+
+
+ /* libsvn_diff errors */
+
+ SVN_ERRDEF(SVN_ERR_DIFF_DATASOURCE_MODIFIED,
+ SVN_ERR_DIFF_CATEGORY_START + 0,
+ "Diff data source modified unexpectedly")
+
+ /* libsvn_ra_serf errors */
+ /** @since New in 1.5. */
+ SVN_ERRDEF(SVN_ERR_RA_SERF_SSPI_INITIALISATION_FAILED,
+ SVN_ERR_RA_SERF_CATEGORY_START + 0,
+ "Initialization of SSPI library failed")
+ /** @since New in 1.5. */
+ SVN_ERRDEF(SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED,
+ SVN_ERR_RA_SERF_CATEGORY_START + 1,
+ "Server SSL certificate untrusted")
+ /** @since New in 1.7.
+ @deprecated GSSAPI now handled by serf rather than libsvn_ra_serf. */
+ SVN_ERRDEF(SVN_ERR_RA_SERF_GSSAPI_INITIALISATION_FAILED,
+ SVN_ERR_RA_SERF_CATEGORY_START + 2,
+ "Initialization of the GSSAPI context failed")
+
+ /** @since New in 1.7. */
+ SVN_ERRDEF(SVN_ERR_RA_SERF_WRAPPED_ERROR,
+ SVN_ERR_RA_SERF_CATEGORY_START + 3,
+ "While handling serf response:")
+
/* malfunctions such as assertion failures */
SVN_ERRDEF(SVN_ERR_ASSERTION_FAIL,
diff --git a/subversion/include/svn_fs.h b/subversion/include/svn_fs.h
index b1b7b47..8cef9a3 100644
--- a/subversion/include/svn_fs.h
+++ b/subversion/include/svn_fs.h
@@ -85,6 +85,34 @@ typedef struct svn_fs_t svn_fs_t;
*/
#define SVN_FS_CONFIG_FSFS_CACHE_FULLTEXTS "fsfs-cache-fulltexts"
+/** Enable / disable revprop caching for a FSFS repository.
+ *
+ * "2" is allowed, too and means "enable if efficient",
+ * i.e. this will not create warning at runtime if there
+ * if no efficient support for revprop caching.
+ *
+ * @since New in 1.8.
+ */
+#define SVN_FS_CONFIG_FSFS_CACHE_REVPROPS "fsfs-cache-revprops"
+
+/** Select the cache namespace. If you potentially share the cache with
+ * another FS object for the same repository, objects read through one FS
+ * will not need to be read again for the other. In most cases, that is
+ * a very desirable behavior and the default is, therefore, an empty
+ * namespace.
+ *
+ * If you want to be sure that your FS instance will actually read all
+ * requested data at least once, you need to specify a separate namespace
+ * for it. All repository verification code, for instance, should use
+ * some GUID here that is different each time you open an FS instance.
+ *
+ * @since New in 1.8.
+ */
+#define SVN_FS_CONFIG_FSFS_CACHE_NS "fsfs-cache-namespace"
+
+/* Note to maintainers: if you add further SVN_FS_CONFIG_FSFS_CACHE_* knobs,
+ update fs_fs.c:verify_as_revision_before_current_plus_plus(). */
+
/* See also svn_fs_type(). */
/** @since New in 1.1. */
#define SVN_FS_CONFIG_FS_TYPE "fs-type"
@@ -113,6 +141,13 @@ typedef struct svn_fs_t svn_fs_t;
* @since New in 1.6.
*/
#define SVN_FS_CONFIG_PRE_1_6_COMPATIBLE "pre-1.6-compatible"
+
+/** Create repository format compatible with Subversion versions
+ * earlier than 1.8.
+ *
+ * @since New in 1.8.
+ */
+#define SVN_FS_CONFIG_PRE_1_8_COMPATIBLE "pre-1.8-compatible"
/** @} */
@@ -246,6 +281,19 @@ svn_fs_upgrade(const char *path,
apr_pool_t *pool);
/**
+ * Callback function type for progress notification.
+ *
+ * @a revision is the number of the revision currently begin processed,
+ * #SVN_INVALID_REVNUM if the current stage is not linked to any specific
+ * revision. @a baton is the callback baton.
+ *
+ * @since New in 1.8.
+ */
+typedef void (*svn_fs_progress_notify_func_t)(svn_revnum_t revision,
+ void *baton,
+ apr_pool_t *pool);
+
+/**
* Return, in @a *fs_type, a string identifying the back-end type of
* the Subversion filesystem located in @a path. Allocate @a *fs_type
* in @a pool.
@@ -277,8 +325,26 @@ svn_fs_path(svn_fs_t *fs,
apr_pool_t *pool);
/**
+ * Return a shallow copy of the configuration parameters used to open
+ * @a fs, allocated in @a pool. It may be @c NULL. The contents of the
+ * hash contents remains valid only for @a fs's lifetime.
+ *
+ * @note This is just what was passed to svn_fs_create() or svn_fs_open().
+ * You may not modify it.
+ *
+ * @since New in 1.8.
+ */
+apr_hash_t *
+svn_fs_config(svn_fs_t *fs,
+ apr_pool_t *pool);
+
+/**
* Delete the filesystem at @a path.
*
+ * @note: Deleting a filesystem that has an open svn_fs_t is not
+ * supported. Clear/destroy all pools used to create/open @a path.
+ * See issue 4264.
+ *
* @since New in 1.1.
*/
svn_error_t *
@@ -292,8 +358,32 @@ svn_fs_delete_fs(const char *path,
* means deleting copied, unused logfiles for a Berkeley DB source
* filesystem.
*
+ * If @a incremental is TRUE, make an effort to avoid re-copying
+ * information already present in the destination where possible. If
+ * incremental hotcopy is not implemented, raise
+ * #SVN_ERR_UNSUPPORTED_FEATURE.
+ *
+ * Use @a scratch_pool for temporary allocations.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_fs_hotcopy2(const char *src_path,
+ const char *dest_path,
+ svn_boolean_t clean,
+ svn_boolean_t incremental,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Like svn_fs_hotcopy2(), but with @a incremental always passed as @c
+ * TRUE and without cancellation support.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
* @since New in 1.1.
*/
+SVN_DEPRECATED
svn_error_t *
svn_fs_hotcopy(const char *src_path,
const char *dest_path,
@@ -342,6 +432,32 @@ svn_fs_recover(const char *path,
apr_pool_t *pool);
+/**
+ * Callback for svn_fs_freeze().
+ *
+ * @since New in 1.8.
+ */
+typedef svn_error_t *(*svn_fs_freeze_func_t)(void *baton, apr_pool_t *pool);
+
+/**
+ * Take an exclusive lock on @a fs to prevent commits and then invoke
+ * @a freeze_func passing @a freeze_baton.
+ *
+ * @note The BDB backend doesn't implement this feature so most
+ * callers should not call this function directly but should use the
+ * higher level svn_repos_freeze() instead.
+ *
+ * @see svn_repos_freeze()
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_fs_freeze(svn_fs_t *fs,
+ svn_fs_freeze_func_t freeze_func,
+ void *freeze_baton,
+ apr_pool_t *pool);
+
+
/** Subversion filesystems based on Berkeley DB.
*
* The following functions are specific to Berkeley DB filesystems.
@@ -755,6 +871,7 @@ typedef struct svn_fs_txn_t svn_fs_txn_t;
* if a caller tries to edit a locked item without having rights to the lock.
*/
#define SVN_FS_TXN_CHECK_LOCKS 0x00002
+
/** @} */
/**
@@ -811,7 +928,7 @@ svn_fs_begin_txn(svn_fs_txn_t **txn_p,
* If @a conflict_p is non-zero, use it to provide details on any
* conflicts encountered merging @a txn with the most recent committed
* revisions. If a conflict occurs, set @a *conflict_p to the path of
- * the conflict in @a txn, with the same lifetime as @a txn;
+ * the conflict in @a txn, allocated within @a pool;
* otherwise, set @a *conflict_p to NULL.
*
* If the commit succeeds, @a txn is invalid.
@@ -826,6 +943,25 @@ svn_fs_begin_txn(svn_fs_txn_t **txn_p,
* the value is a valid revision number, the commit was successful,
* even though a non-@c NULL function return value may indicate that
* something else went wrong in post commit FS processing.
+ *
+ * @note See api-errata/1.8/fs001.txt for information on how this
+ * function was documented in versions prior to 1.8.
+ *
+ * ### need to document this better. there are four combinations of
+ * ### return values:
+ * ### 1) err=NULL. conflict=NULL. new_rev is valid
+ * ### 2) err=SVN_ERR_FS_CONFLICT. conflict is set. new_rev=SVN_INVALID_REVNUM
+ * ### 3) err=!NULL. conflict=NULL. new_rev is valid
+ * ### 4) err=!NULL. conflict=NULL. new_rev=SVN_INVALID_REVNUM
+ * ###
+ * ### some invariants:
+ * ### *conflict_p will be non-NULL IFF SVN_ERR_FS_CONFLICT
+ * ### if *conflict_p is set (and SVN_ERR_FS_CONFLICT), then new_rev
+ * ### will always be SVN_INVALID_REVNUM
+ * ### *conflict_p will always be initialized to NULL, or to a valid
+ * ### conflict string
+ * ### *new_rev will always be initialized to SVN_INVALID_REVNUM, or
+ * ### to a valid, committed revision number
*/
svn_error_t *
svn_fs_commit_txn(const char **conflict_p,
@@ -1454,7 +1590,6 @@ svn_fs_copied_from(svn_revnum_t *rev_p,
/** Set @a *root_p and @a *path_p to the revision root and path of the
* destination of the most recent copy event that caused @a path to
* exist where it does in @a root, or to NULL if no such copy exists.
- * When non-NULL, allocate @a *root_p and @a *path_p in @a pool.
*
* @a *path_p might be a parent of @a path, rather than @a path
* itself. However, it will always be the deepest relevant path.
@@ -1462,6 +1597,9 @@ svn_fs_copied_from(svn_revnum_t *rev_p,
* this function makes sure to set @a *path_p to the longest copy
* destination path that is still a parent of or equal to @a path.
*
+ * Values returned in @a *root_p and @a *path_p will be allocated
+ * from @a pool.
+ *
* @since New in 1.3.
*/
svn_error_t *
@@ -1484,6 +1622,15 @@ svn_fs_closest_copy(svn_fs_root_t **root_p,
* @a inherit indicates whether to retrieve explicit,
* explicit-or-inherited, or only inherited mergeinfo.
*
+ * If @a adjust_inherited_mergeinfo is @c TRUE, then any inherited
+ * mergeinfo returned in @a *catalog is normalized to represent the
+ * inherited mergeinfo on the path which inherits it. If
+ * @a adjust_inherited_mergeinfo is @c FALSE, then any inherited
+ * mergeinfo is the raw explicit mergeinfo from the nearest parent
+ * of the path with explicit mergeinfo, unadjusted for the path-wise
+ * difference between the path and its parent. This may include
+ * non-inheritable mergeinfo.
+ *
* If @a include_descendants is TRUE, then additionally return the
* mergeinfo for any descendant of any element of @a paths which has
* the #SVN_PROP_MERGEINFO property explicitly set on it. (Note
@@ -1491,11 +1638,29 @@ svn_fs_closest_copy(svn_fs_root_t **root_p,
* paths; descendants of the elements in @a paths which get their
* mergeinfo via inheritance are not included in @a *catalog.)
*
- * Do any necessary temporary allocation in @a pool.
+ * Allocate @a *catalog in result_pool. Do any necessary temporary
+ * allocations in @a scratch_pool.
*
- * @since New in 1.5.
+ * @since New in 1.8.
*/
svn_error_t *
+svn_fs_get_mergeinfo2(svn_mergeinfo_catalog_t *catalog,
+ svn_fs_root_t *root,
+ const apr_array_header_t *paths,
+ svn_mergeinfo_inheritance_t inherit,
+ svn_boolean_t include_descendants,
+ svn_boolean_t adjust_inherited_mergeinfo,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Same as svn_fs_get_mergeinfo2(), but with @a adjust_inherited_mergeinfo
+ * set always set to @c TRUE and with only one pool.
+ *
+ * @deprecated Provided for backward compatibility with the 1.5 API.
+ */
+SVN_DEPRECATED
+svn_error_t *
svn_fs_get_mergeinfo(svn_mergeinfo_catalog_t *catalog,
svn_fs_root_t *root,
const apr_array_header_t *paths,
@@ -1736,6 +1901,43 @@ svn_fs_file_contents(svn_stream_t **contents,
const char *path,
apr_pool_t *pool);
+/**
+ * Callback function type used with svn_fs_try_process_file_contents()
+ * that delivers the immutable, non-NULL @a contents of @a len bytes.
+ * @a baton is an implementation-specific closure.
+ *
+ * Use @a scratch_pool for allocations.
+ *
+ * @since New in 1.8.
+ */
+typedef svn_error_t *
+(*svn_fs_process_contents_func_t)(const unsigned char *contents,
+ apr_size_t len,
+ void *baton,
+ apr_pool_t *scratch_pool);
+
+/** Efficiently deliver the contents of the file @a path in @a root
+ * via @a processor (with @a baton), setting @a *success to @c TRUE
+ * upon doing so. Use @a pool for allocations.
+ *
+ * This function is intended to support zero copy data processing. It may
+ * not be implemented for all data backends or not applicable for certain
+ * content. In that case, @a *success will always be @c FALSE. Also, this
+ * is a best-effort function which means that there is no guarantee that
+ * @a processor gets called at all for some content.
+ *
+ * @note @a processor is expected to be relatively short function with
+ * at most O(content size) runtime.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_fs_try_process_file_contents(svn_boolean_t *success,
+ svn_fs_root_t *root,
+ const char *path,
+ svn_fs_process_contents_func_t processor,
+ void* baton,
+ apr_pool_t *pool);
/** Create a new file named @a path in @a root. The file's initial contents
* are the empty string, and it has no properties. @a root must be the
@@ -2184,7 +2386,8 @@ svn_fs_get_locks(svn_fs_t *fs,
/**
* Append a textual list of all available FS modules to the stringbuf
- * @a output.
+ * @a output. Third-party modules are only included if repository
+ * access has caused them to be loaded.
*
* @since New in 1.2.
*/
@@ -2237,8 +2440,88 @@ svn_fs_pack(const char *db_path,
apr_pool_t *pool);
-/** @} */
+/**
+ * Perform backend-specific data consistency and correctness validations
+ * to the Subversion filesystem (mainly the meta-data) located in the
+ * directory @a path. Use the backend-specific configuration @a fs_config
+ * when opening the filesystem. @a NULL is valid for all backends.
+ * Use @a scratch_pool for temporary allocations.
+ *
+ * @a start and @a end define the (minimum) range of revisions to check.
+ * If @a start is #SVN_INVALID_REVNUM, it defaults to @c r0. Likewise,
+ * @a end will default to the current youngest repository revision when
+ * given as #SVN_INVALID_REVNUM. Since meta data checks may have to touch
+ * other revisions as well, you may receive notifications for revisions
+ * outside the specified range. In fact, it is perfectly legal for a FS
+ * implementation to always check all revisions.
+ *
+ * Global invariants are only guaranteed to get verified when @a r0 has
+ * been included in the range of revisions to check.
+ *
+ * The optional @a notify_func callback is only a general feedback that
+ * the operation is still in process but may be called in random revisions
+ * order and more than once for the same revision, i.e. r2, r1, r2 would
+ * be a valid sequence.
+ *
+ * The optional @a cancel_func callback will be invoked as usual to allow
+ * the user to preempt this potentially lengthy operation.
+ *
+ * @note You probably don't want to use this directly. Take a look at
+ * svn_repos_verify_fs2() instead, which does non-backend-specific
+ * verifications as well.
+ *
+ * @note To ensure a full verification using all tests and covering all
+ * revisions, you must call this function *and* #svn_fs_verify_root.
+ *
+ * @note Implementors, please do tests that can be done efficiently for
+ * a single revision in #svn_fs_verify_root. This function is meant for
+ * global checks or tests that require an expensive context setup.
+ *
+ * @see svn_repos_verify_fs2()
+ * @see svn_fs_verify_root()
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_fs_verify(const char *path,
+ apr_hash_t *fs_config,
+ svn_revnum_t start,
+ svn_revnum_t end,
+ svn_fs_progress_notify_func_t notify_func,
+ void *notify_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool);
+/**
+ * Perform backend-specific data consistency and correctness validations
+ * of @a root in the Subversion filesystem @a fs. @a root is typically
+ * a revision root (see svn_fs_revision_root()), but may be a
+ * transaction root. Use @a scratch_pool for temporary allocations.
+ *
+ * @note You probably don't want to use this directly. Take a look at
+ * svn_repos_verify_fs2() instead, which does non-backend-specific
+ * verifications as well.
+ *
+ * @note To ensure a full verification using all available tests and
+ * covering all revisions, you must call both this function and
+ * #svn_fs_verify.
+ *
+ * @note Implementors, please perform tests that cannot be done
+ * efficiently for a single revision in #svn_fs_verify. This function
+ * is intended for local checks that don't require an expensive context
+ * setup.
+ *
+ * @see svn_repos_verify_fs2()
+ * @see svn_fs_verify()
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_fs_verify_root(svn_fs_root_t *root,
+ apr_pool_t *scratch_pool);
+
+/** @} */
#ifdef __cplusplus
}
diff --git a/subversion/include/svn_hash.h b/subversion/include/svn_hash.h
index 04855ee..46b4760 100644
--- a/subversion/include/svn_hash.h
+++ b/subversion/include/svn_hash.h
@@ -240,47 +240,19 @@ svn_hash_from_cstring_keys(apr_hash_t **hash,
const apr_array_header_t *keys,
apr_pool_t *pool);
-/**
- * Clear any key/value pairs in the hash table. A wrapper for a
- * apr_hash_clear(), which isn't available until APR 1.3.0.
+/** Shortcut for apr_hash_get() with a const char * key.
*
- * @since New in 1.5.
+ * @since New in 1.8.
*/
-svn_error_t *
-svn_hash__clear(apr_hash_t *hash, apr_pool_t *pool);
-
-/** @} */
+#define svn_hash_gets(ht, key) \
+ apr_hash_get(ht, key, APR_HASH_KEY_STRING)
-
-/**
- * @defgroup svn_hash_getters Specialized getter APIs for hashes
- * @{
- */
-
-/** Find the value of a @a key in @a hash, return the value.
- *
- * If @a hash is @c NULL or if the @a key cannot be found, the
- * @a default_value will be returned.
- *
- * @since New in 1.7.
- */
-const char *
-svn_hash__get_cstring(apr_hash_t *hash,
- const char *key,
- const char *default_value);
-
-/** Like svn_hash_get_cstring(), but for boolean values.
- *
- * Parses the value as a boolean value. The recognized representations
- * are 'TRUE'/'FALSE', 'yes'/'no', 'on'/'off', '1'/'0'; case does not
- * matter.
+/** Shortcut for apr_hash_set() with a const char * key.
*
- * @since New in 1.7.
+ * @since New in 1.8.
*/
-svn_boolean_t
-svn_hash__get_bool(apr_hash_t *hash,
- const char *key,
- svn_boolean_t default_value);
+#define svn_hash_sets(ht, key, val) \
+ apr_hash_set(ht, key, APR_HASH_KEY_STRING, val)
/** @} */
diff --git a/subversion/include/svn_io.h b/subversion/include/svn_io.h
index 4845e74..0082917 100644
--- a/subversion/include/svn_io.h
+++ b/subversion/include/svn_io.h
@@ -182,9 +182,10 @@ svn_io_check_resolved_path(const char *path,
* may be @c NULL. If @a file is @c NULL, the file will be created but not
* open.
*
- * If @a delete_when is #svn_io_file_del_on_close, then the @c APR_DELONCLOSE
- * flag will be used when opening the file. The @c APR_BUFFERED flag will
- * always be used.
+ * The file will be deleted according to @a delete_when. If that is
+ * #svn_io_file_del_on_pool_cleanup, it refers to @a result_pool.
+ *
+ * The @c APR_BUFFERED flag will always be used when opening the file.
*
* The first attempt will just append @a suffix. If the result is not
* a unique name, then subsequent attempts will append a dot,
@@ -240,7 +241,7 @@ svn_io_open_uniquely_named(apr_file_t **file,
/** Create a writable file, with an arbitrary and unique name, in the
* directory @a dirpath. Set @a *temp_path to its full path, and set
* @a *file to the file handle, both allocated from @a result_pool. Either
- * @a file or @a unique_name may be @c NULL. If @a file is @c NULL, the file
+ * @a file or @a temp_path may be @c NULL. If @a file is @c NULL, the file
* will be created but not open.
*
* If @a dirpath is @c NULL, use the path returned from svn_io_temp_dir().
@@ -248,8 +249,9 @@ svn_io_open_uniquely_named(apr_file_t **file,
* be possible to atomically rename the resulting file due to cross-device
* issues.)
*
- * The file will be deleted according to @a delete_when. If @a delete_when
- * is @c svn_io_file_del_on_close and @a file is @c NULL, the file will be
+ * The file will be deleted according to @a delete_when. If that is
+ * #svn_io_file_del_on_pool_cleanup, it refers to @a result_pool. If it
+ * is #svn_io_file_del_on_close and @a file is @c NULL, the file will be
* deleted before this function returns.
*
* When passing @c svn_io_file_del_none please don't forget to eventually
@@ -592,14 +594,14 @@ svn_io_set_file_affected_time(apr_time_t apr_time,
void
svn_io_sleep_for_timestamps(const char *path, apr_pool_t *pool);
-/** Set @a *different_p to non-zero if @a file1 and @a file2 have different
- * sizes, else set to zero. Both @a file1 and @a file2 are utf8-encoded.
+/** Set @a *different_p to TRUE if @a file1 and @a file2 have different
+ * sizes, else set to FALSE. Both @a file1 and @a file2 are utf8-encoded.
*
* Setting @a *different_p to zero does not mean the files definitely
* have the same size, it merely means that the sizes are not
* definitely different. That is, if the size of one or both files
* cannot be determined, then the sizes are not known to be different,
- * so @a *different_p is set to 0.
+ * so @a *different_p is set to FALSE.
*/
svn_error_t *
svn_io_filesizes_different_p(svn_boolean_t *different_p,
@@ -607,6 +609,27 @@ svn_io_filesizes_different_p(svn_boolean_t *different_p,
const char *file2,
apr_pool_t *pool);
+/** Set @a *different_p12 to non-zero if @a file1 and @a file2 have different
+ * sizes, else set to zero. Do the similar for @a *different_p23 with
+ * @a file2 and @a file3, and @a *different_p13 for @a file1 and @a file3.
+ * The filenames @a file1, @a file2 and @a file3 are utf8-encoded.
+ *
+ * Setting @a *different_p12 to zero does not mean the files definitely
+ * have the same size, it merely means that the sizes are not
+ * definitely different. That is, if the size of one or both files
+ * cannot be determined (due to stat() returning an error), then the sizes
+ * are not known to be different, so @a *different_p12 is set to 0.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_io_filesizes_three_different_p(svn_boolean_t *different_p12,
+ svn_boolean_t *different_p23,
+ svn_boolean_t *different_p13,
+ const char *file1,
+ const char *file2,
+ const char *file3,
+ apr_pool_t *scratch_pool);
/** Return in @a *checksum the checksum of type @a kind of @a file
* Use @a pool for temporary allocations and to allocate @a *checksum.
@@ -642,6 +665,23 @@ svn_io_files_contents_same_p(svn_boolean_t *same,
const char *file2,
apr_pool_t *pool);
+/** Set @a *same12 to TRUE if @a file1 and @a file2 have the same
+ * contents, else set it to FALSE. Do the similar for @a *same23
+ * with @a file2 and @a file3, and @a *same13 for @a file1 and @a
+ * file3. The filenames @a file1, @a file2 and @a file3 are
+ * utf8-encoded. Use @a scratch_pool for temporary allocations.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_io_files_contents_three_same_p(svn_boolean_t *same12,
+ svn_boolean_t *same23,
+ svn_boolean_t *same13,
+ const char *file1,
+ const char *file2,
+ const char *file3,
+ apr_pool_t *scratch_pool);
+
/** Create file at utf8-encoded @a file with contents @a contents.
* @a file must not already exist.
* Use @a pool for memory allocations.
@@ -682,6 +722,39 @@ svn_io_file_lock2(const char *lock_file,
svn_boolean_t exclusive,
svn_boolean_t nonblocking,
apr_pool_t *pool);
+
+/**
+ * Lock the file @a lockfile_handle. If @a exclusive is TRUE,
+ * obtain exclusive lock, otherwise obtain shared lock.
+ *
+ * If @a nonblocking is TRUE, do not wait for the lock if it
+ * is not available: throw an error instead.
+ *
+ * Lock will be automatically released when @a pool is cleared or destroyed.
+ * You may also explicitly call svn_io_unlock_open_file().
+ * Use @a pool for memory allocations. @a pool must be the pool that
+ * @a lockfile_handle has been created in or one of its sub-pools.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_io_lock_open_file(apr_file_t *lockfile_handle,
+ svn_boolean_t exclusive,
+ svn_boolean_t nonblocking,
+ apr_pool_t *pool);
+
+/**
+ * Unlock the file @a lockfile_handle.
+ *
+ * Use @a pool for memory allocations. @a pool must be the pool that
+ * was passed to svn_io_lock_open_file().
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_io_unlock_open_file(apr_file_t *lockfile_handle,
+ apr_pool_t *pool);
+
/**
* Flush any unwritten data from @a file to disk. Use @a pool for
* memory allocations.
@@ -846,7 +919,7 @@ svn_stream_empty(apr_pool_t *pool);
/** Return a stream allocated in @a pool which forwards all requests
* to @a stream. Destruction is explicitly excluded from forwarding.
*
- * @see notes/destruction-of-stacked-resources
+ * @see http://subversion.apache.org/docs/community-guide/conventions.html#destruction-of-stacked-resources
*
* @since New in 1.4.
*/
@@ -901,7 +974,8 @@ svn_stream_open_writable(svn_stream_t **stream,
* be possible to atomically rename the resulting file due to cross-device
* issues.)
*
- * The file will be deleted according to @a delete_when.
+ * The file will be deleted according to @a delete_when. If that is
+ * #svn_io_file_del_on_pool_cleanup, it refers to @a result_pool.
*
* Temporary allocations will be performed in @a scratch_pool.
*
@@ -989,6 +1063,16 @@ svn_stream_t *
svn_stream_from_string(const svn_string_t *str,
apr_pool_t *pool);
+/** Return a generic stream which implements buffered reads and writes.
+ * The stream will preferentially store data in-memory, but may use
+ * disk storage as backup if the amount of data is large.
+ * Allocate the stream in @a result_pool
+ *
+ * @since New in 1.8.
+ */
+svn_stream_t *
+svn_stream_buffered(apr_pool_t *result_pool);
+
/** Return a stream that decompresses all data read and compresses all
* data written. The stream @a stream is used to read and write all
* compressed data. All compression data structures are allocated on
@@ -1064,6 +1148,8 @@ svn_stream_read(svn_stream_t *stream,
* of reads or a simple seek operation. If the stream implementation has
* not provided a skip function, this will read from the stream and
* discard the data.
+ *
+ * @since New in 1.7.
*/
svn_error_t *
svn_stream_skip(svn_stream_t *stream,
@@ -1079,9 +1165,9 @@ svn_stream_write(svn_stream_t *stream,
svn_error_t *
svn_stream_close(svn_stream_t *stream);
-/** Reset a generic stream back to its origin. E.g. On a file this would be
+/** Reset a generic stream back to its origin. (E.g. On a file this would be
* implemented as a seek to position 0). This function returns a
- * #SVN_ERR_STREAM_RESET_NOT_SUPPORTED error when the stream doesn't
+ * #SVN_ERR_STREAM_SEEK_NOT_SUPPORTED error when the stream doesn't
* implement resetting.
*
* @since New in 1.7.
@@ -1136,6 +1222,14 @@ svn_stream_tee(svn_stream_t *out1,
svn_stream_t *out2,
apr_pool_t *pool);
+/** Write NULL-terminated string @a str to @a stream.
+ *
+ * @since New in 1.8.
+ *
+ */
+svn_error_t *
+svn_stream_puts(svn_stream_t *stream,
+ const char *str);
/** Write to @a stream using a printf-style @a fmt specifier, passed through
* apr_psprintf() using memory from @a pool.
@@ -1278,6 +1372,47 @@ svn_string_from_stream(svn_string_t **result,
apr_pool_t *scratch_pool);
+/** A function type provided for use as a callback from
+ * @c svn_stream_lazyopen_create().
+ *
+ * The callback function shall open a new stream and set @a *stream to
+ * the stream object, allocated in @a result_pool. @a baton is the
+ * callback baton that was passed to svn_stream_lazyopen_create().
+ *
+ * @a result_pool is the result pool that was passed to
+ * svn_stream_lazyopen_create(). The callback function may use
+ * @a scratch_pool for temporary allocations; the caller may clear or
+ * destroy @a scratch_pool any time after the function returns.
+ *
+ * @since New in 1.8.
+ */
+typedef svn_error_t *
+(*svn_stream_lazyopen_func_t)(svn_stream_t **stream,
+ void *baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
+/** Return a generic stream which wraps another primary stream,
+ * delaying the "opening" of that stream until the first time the
+ * returned stream is accessed.
+ *
+ * @a open_func and @a open_baton are a callback function/baton pair
+ * which will be invoked upon the first access of the returned
+ * stream (read, write, mark, seek, skip, or possibly close). The
+ * callback shall open the primary stream.
+ *
+ * If the only "access" the returned stream gets is to close it
+ * then @a open_func will only be called if @a open_on_close is TRUE.
+ *
+ * @since New in 1.8.
+ */
+svn_stream_t *
+svn_stream_lazyopen_create(svn_stream_lazyopen_func_t open_func,
+ void *open_baton,
+ svn_boolean_t open_on_close,
+ apr_pool_t *result_pool);
+
/** @} */
/** Set @a *result to a string containing the contents of @a
@@ -1439,11 +1574,33 @@ svn_io_get_dirents(apr_hash_t **dirents,
/** Create a svn_io_dirent2_t instance for path. Specialized variant of
* svn_io_stat() that directly translates node_kind and special.
*
+ * If @a verify_truename is @c TRUE, an additional check is performed to
+ * verify the truename of the last path component on case insensitive
+ * filesystems. This check is expensive compared to a just a stat,
+ * but certainly cheaper than a full truename calculation using
+ * apr_filepath_merge() which verifies all path components.
+ *
* If @a ignore_enoent is set to @c TRUE, set *dirent_p->kind to
* svn_node_none instead of returning an error.
*
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_io_stat_dirent2(const svn_io_dirent2_t **dirent_p,
+ const char *path,
+ svn_boolean_t verify_truename,
+ svn_boolean_t ignore_enoent,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
+/** Similar to svn_io_stat_dirent2(), but always passes FALSE for
+ * @a verify_truename.
+ *
* @since New in 1.7.
+ * @deprecated Provided for backwards compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_io_stat_dirent(const svn_io_dirent2_t **dirent_p,
const char *path,
@@ -1518,15 +1675,44 @@ svn_io_dir_walk(const char *dirname,
*
* If @a inherit is TRUE, the invoked program inherits its environment from
* the caller and @a cmd, if not absolute, is searched for in PATH.
- * Otherwise, the invoked program runs with an empty environment and @a cmd
- * must be an absolute path.
+ *
+ * If @a inherit is FALSE @a cmd must be an absolute path and the invoked
+ * program inherits the environment defined by @a env or runs with an empty
+ * environment in @a env is NULL.
*
* @note On some platforms, failure to execute @a cmd in the child process
* will result in error output being written to @a errfile, if non-NULL, and
* a non-zero exit status being returned to the parent process.
*
+ * @note An APR bug affects Windows: passing a NULL @a env does not
+ * guarantee the invoked program to run with an empty environment when
+ * @a inherit is FALSE, the program may inherit its parent's environment.
+ * Explicitly pass an empty @a env to get an empty environment.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *svn_io_start_cmd3(apr_proc_t *cmd_proc,
+ const char *path,
+ const char *cmd,
+ const char *const *args,
+ const char *const *env,
+ svn_boolean_t inherit,
+ svn_boolean_t infile_pipe,
+ apr_file_t *infile,
+ svn_boolean_t outfile_pipe,
+ apr_file_t *outfile,
+ svn_boolean_t errfile_pipe,
+ apr_file_t *errfile,
+ apr_pool_t *pool);
+
+
+/**
+ * Similar to svn_io_start_cmd3() but with @a env always set to NULL.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API
* @since New in 1.7.
*/
+SVN_DEPRECATED
svn_error_t *svn_io_start_cmd2(apr_proc_t *cmd_proc,
const char *path,
const char *cmd,
@@ -1796,7 +1982,8 @@ svn_boolean_t
svn_io_is_binary_data(const void *buf, apr_size_t len);
-/** Wrapper for apr_file_open(). @a fname is utf8-encoded. */
+/** Wrapper for apr_file_open(). @a fname is utf8-encoded.
+ Always passed flag | APR_BINARY to apr. */
svn_error_t *
svn_io_file_open(apr_file_t **new_file,
const char *fname,
@@ -2061,6 +2248,36 @@ svn_io_write_version_file(const char *path,
int version,
apr_pool_t *pool);
+/** Read a line of text from a file, up to a specified length.
+ *
+ * Allocate @a *stringbuf in @a result_pool, and read into it one line
+ * from @a file. Reading stops either after a line-terminator was found
+ * or after @a max_len bytes have been read.
+ *
+ * If end-of-file is reached or @a max_len bytes have been read, and @a eof
+ * is not NULL, then set @a *eof to @c TRUE.
+ *
+ * The line-terminator is not stored in @a *stringbuf.
+ * The line-terminator is detected automatically and stored in @a *eol
+ * if @a eol is not NULL. If EOF is reached and @a file does not end
+ * with a newline character, and @a eol is not NULL, @ *eol is set to NULL.
+ *
+ * @a scratch_pool is used for temporary allocations.
+ *
+ * Hint: To read all data until a line-terminator is hit, pass APR_SIZE_MAX
+ * for @a max_len.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_io_file_readline(apr_file_t *file,
+ svn_stringbuf_t **stringbuf,
+ const char **eol,
+ svn_boolean_t *eof,
+ apr_size_t max_len,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
/** @} */
#ifdef __cplusplus
diff --git a/subversion/include/svn_mergeinfo.h b/subversion/include/svn_mergeinfo.h
index 77dd399..ada70a2 100644
--- a/subversion/include/svn_mergeinfo.h
+++ b/subversion/include/svn_mergeinfo.h
@@ -113,8 +113,8 @@ extern "C" {
*
* (a) Strings (@c svn_string_t *) containing "unparsed mergeinfo".
*
- * (b) A "rangelist". An array (@c apr_array_header_t *) of non-overlapping
- * merge ranges (@c svn_merge_range_t *), sorted as said by
+ * (b) @c svn_rangelist_t, called a "rangelist". An array of non-
+ * overlapping merge ranges (@c svn_merge_range_t *), sorted as said by
* @c svn_sort_compare_ranges(). An empty range list is represented by
* an empty array. Unless specifically noted otherwise, all APIs require
* rangelists that describe only forward ranges, i.e. the range's start
@@ -139,6 +139,7 @@ extern "C" {
* else, such as an RA session root.
*/
+typedef apr_array_header_t svn_rangelist_t;
typedef apr_hash_t *svn_mergeinfo_t;
typedef apr_hash_t *svn_mergeinfo_catalog_t;
@@ -166,8 +167,10 @@ svn_mergeinfo_parse(svn_mergeinfo_t *mergeinfo, const char *input,
apr_pool_t *pool);
/** Calculate the delta between two mergeinfos, @a mergefrom and @a mergeto
- * (which may be @c NULL), and place the result in @a *deleted and @a
- * *added (neither output argument may be @c NULL).
+ * (either or both of which may be @c NULL meaning an empty mergeinfo).
+ * Place the result in @a *deleted and @a *added (neither output argument
+ * may be @c NULL), both allocated in @a result_pool. The resulting
+ * @a *deleted and @a *added will not be null.
*
* @a consider_inheritance determines how the rangelists in the two
* hashes are compared for equality. If @a consider_inheritance is FALSE,
@@ -184,8 +187,21 @@ svn_mergeinfo_parse(svn_mergeinfo_t *mergeinfo, const char *input,
* '/trunk: 1,3-4*,5' == '/trunk: 1,3-4*,5'
* '/trunk: 1,3-4,5' == '/trunk: 1,3-4,5'
*
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_mergeinfo_diff2(svn_mergeinfo_t *deleted, svn_mergeinfo_t *added,
+ svn_mergeinfo_t mergefrom, svn_mergeinfo_t mergeto,
+ svn_boolean_t consider_inheritance,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/** Similar to svn_mergeinfo_diff2(), but users only one pool.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
* @since New in 1.5.
*/
+SVN_DEPRECATED
svn_error_t *
svn_mergeinfo_diff(svn_mergeinfo_t *deleted, svn_mergeinfo_t *added,
svn_mergeinfo_t mergefrom, svn_mergeinfo_t mergeto,
@@ -195,6 +211,10 @@ svn_mergeinfo_diff(svn_mergeinfo_t *deleted, svn_mergeinfo_t *added,
/** Merge a shallow copy of one mergeinfo, @a changes, into another mergeinfo
* @a mergeinfo.
*
+ * Rangelists for merge source paths common to @a changes and @a mergeinfo may
+ * result in new rangelists; these are allocated in @a result_pool.
+ * Temporary allocations are made in @a scratch_pool.
+ *
* When intersecting rangelists for a path are merged, the inheritability of
* the resulting svn_merge_range_t depends on the inheritability of the
* operands. If two non-inheritable ranges are merged the result is always
@@ -203,10 +223,22 @@ svn_mergeinfo_diff(svn_mergeinfo_t *deleted, svn_mergeinfo_t *added,
* e.g. '/A: 1,3-4' merged with '/A: 1,3,4*,5' --> '/A: 1,3-5'
* '/A: 1,3-4*' merged with '/A: 1,3,4*,5' --> '/A: 1,3,4*,5'
*
- * @since New in 1.5.
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_mergeinfo_merge2(svn_mergeinfo_t mergeinfo,
+ svn_mergeinfo_t changes,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/** Like svn_mergeinfo_merge2, but uses only one pool.
+ *
+ * @deprecated Provided for backward compatibility with the 1.5 API.
*/
+SVN_DEPRECATED
svn_error_t *
-svn_mergeinfo_merge(svn_mergeinfo_t mergeinfo, svn_mergeinfo_t changes,
+svn_mergeinfo_merge(svn_mergeinfo_t mergeinfo,
+ svn_mergeinfo_t changes,
apr_pool_t *pool);
/** Combine one mergeinfo catalog, @a changes_catalog, into another mergeinfo
@@ -264,29 +296,54 @@ svn_mergeinfo_remove2(svn_mergeinfo_t *mergeinfo,
* @since New in 1.5.
*/
svn_error_t *
-svn_rangelist_diff(apr_array_header_t **deleted, apr_array_header_t **added,
- const apr_array_header_t *from, const apr_array_header_t *to,
+svn_rangelist_diff(svn_rangelist_t **deleted, svn_rangelist_t **added,
+ const svn_rangelist_t *from, const svn_rangelist_t *to,
svn_boolean_t consider_inheritance,
apr_pool_t *pool);
/** Merge two rangelists consisting of @c svn_merge_range_t *
- * elements, @a *rangelist and @a changes, placing the results in
- * @a *rangelist. Either rangelist may be empty.
+ * elements, @a rangelist and @a changes, placing the results in
+ * @a rangelist. New elements added to @a rangelist are allocated
+ * in @a result_pool. Either rangelist may be empty.
*
* When intersecting rangelists are merged, the inheritability of
* the resulting svn_merge_range_t depends on the inheritability of the
* operands: see svn_mergeinfo_merge().
*
- * Note: @a *rangelist and @a changes must be sorted as said by @c
- * svn_sort_compare_ranges(). @a *rangelist is guaranteed to remain
+ * Note: @a rangelist and @a changes must be sorted as said by @c
+ * svn_sort_compare_ranges(). @a rangelist is guaranteed to remain
* in sorted order and be compacted to the minimal number of ranges
* needed to represent the merged result.
*
+ * If the original rangelist contains non-collapsed adjacent ranges,
+ * the final result is not guaranteed to be compacted either.
+ *
+ * Use @a scratch_pool for temporary allocations.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_rangelist_merge2(svn_rangelist_t *rangelist,
+ const svn_rangelist_t *changes,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/** Like svn_rangelist_merge2(), but with @a rangelist as an input/output
+ * argument. This function always allocates a new rangelist in @a pool and
+ * returns its result in @a *rangelist. It does not modify @a *rangelist
+ * in place. If not used carefully, this function can use up a lot of memory
+ * if called in a loop.
+ *
+ * It performs an extra adjacent range compaction round to make sure non
+ * collapsed input ranges are compacted in the result.
+ *
* @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
-svn_rangelist_merge(apr_array_header_t **rangelist,
- const apr_array_header_t *changes,
+svn_rangelist_merge(svn_rangelist_t **rangelist,
+ const svn_rangelist_t *changes,
apr_pool_t *pool);
/** Removes @a eraser (the subtrahend) from @a whiteboard (the
@@ -303,8 +360,8 @@ svn_rangelist_merge(apr_array_header_t **rangelist,
* @since New in 1.5.
*/
svn_error_t *
-svn_rangelist_remove(apr_array_header_t **output, const apr_array_header_t *eraser,
- const apr_array_header_t *whiteboard,
+svn_rangelist_remove(svn_rangelist_t **output, const svn_rangelist_t *eraser,
+ const svn_rangelist_t *whiteboard,
svn_boolean_t consider_inheritance,
apr_pool_t *pool);
@@ -345,7 +402,7 @@ svn_mergeinfo_intersect(svn_mergeinfo_t *mergeinfo,
* @a consider_inheritance determines how to account for the inheritability
* of the two rangelist's ranges when calculating the intersection,
* @see svn_mergeinfo_diff(). If @a consider_inheritance is FALSE then
- * ranges with different inheritance can intersect, but the the resulting
+ * ranges with different inheritance can intersect, but the resulting
* @a *rangelist is non-inheritable only if the corresponding ranges from
* both @a rangelist1 and @a rangelist2 are non-inheritable.
* If @a consider_inheritance is TRUE, then ranges with different
@@ -357,9 +414,9 @@ svn_mergeinfo_intersect(svn_mergeinfo_t *mergeinfo,
* @since New in 1.5.
*/
svn_error_t *
-svn_rangelist_intersect(apr_array_header_t **rangelist,
- const apr_array_header_t *rangelist1,
- const apr_array_header_t *rangelist2,
+svn_rangelist_intersect(svn_rangelist_t **rangelist,
+ const svn_rangelist_t *rangelist1,
+ const svn_rangelist_t *rangelist2,
svn_boolean_t consider_inheritance,
apr_pool_t *pool);
@@ -374,7 +431,7 @@ svn_rangelist_intersect(apr_array_header_t **rangelist,
* @since New in 1.5.
*/
svn_error_t *
-svn_rangelist_reverse(apr_array_header_t *rangelist, apr_pool_t *pool);
+svn_rangelist_reverse(svn_rangelist_t *rangelist, apr_pool_t *pool);
/** Take an array of svn_merge_range_t *'s in @a rangelist, and convert it
* back to a text format rangelist in @a output. If @a rangelist contains
@@ -384,7 +441,7 @@ svn_rangelist_reverse(apr_array_header_t *rangelist, apr_pool_t *pool);
*/
svn_error_t *
svn_rangelist_to_string(svn_string_t **output,
- const apr_array_header_t *rangelist,
+ const svn_rangelist_t *rangelist,
apr_pool_t *pool);
/** Return a deep copy of @c svn_merge_range_t *'s in @a rangelist excluding
@@ -399,8 +456,8 @@ svn_rangelist_to_string(svn_string_t **output,
* @since New in 1.7.
*/
svn_error_t *
-svn_rangelist_inheritable2(apr_array_header_t **inheritable_rangelist,
- const apr_array_header_t *rangelist,
+svn_rangelist_inheritable2(svn_rangelist_t **inheritable_rangelist,
+ const svn_rangelist_t *rangelist,
svn_revnum_t start,
svn_revnum_t end,
svn_boolean_t inheritable,
@@ -414,8 +471,8 @@ svn_rangelist_inheritable2(apr_array_header_t **inheritable_rangelist,
*/
SVN_DEPRECATED
svn_error_t *
-svn_rangelist_inheritable(apr_array_header_t **inheritable_rangelist,
- const apr_array_header_t *rangelist,
+svn_rangelist_inheritable(svn_rangelist_t **inheritable_rangelist,
+ const svn_rangelist_t *rangelist,
svn_revnum_t start,
svn_revnum_t end,
apr_pool_t *pool);
@@ -502,8 +559,8 @@ svn_mergeinfo_dup(svn_mergeinfo_t mergeinfo, apr_pool_t *pool);
*
* @since New in 1.5.
*/
-apr_array_header_t *
-svn_rangelist_dup(const apr_array_header_t *rangelist, apr_pool_t *pool);
+svn_rangelist_t *
+svn_rangelist_dup(const svn_rangelist_t *rangelist, apr_pool_t *pool);
/**
@@ -521,8 +578,9 @@ typedef enum svn_mergeinfo_inheritance_t
ancestor. */
svn_mergeinfo_inherited,
- /** Mergeinfo on target's nearest (path-wise, not history-wise)
- ancestor, regardless of whether target has explicit mergeinfo. */
+ /** Mergeinfo inherited from a target's nearest (path-wise, not
+ history-wise) ancestor, regardless of whether target has explicit
+ mergeinfo. */
svn_mergeinfo_nearest_ancestor
} svn_mergeinfo_inheritance_t;
diff --git a/subversion/include/svn_opt.h b/subversion/include/svn_opt.h
index 36b03e4..25da44f 100644
--- a/subversion/include/svn_opt.h
+++ b/subversion/include/svn_opt.h
@@ -680,7 +680,8 @@ svn_opt_parse_path(svn_opt_revision_t *rev,
* Else, if @a print_version is TRUE, then print version info, in
* brief form if @a quiet is also TRUE; if @a quiet is FALSE, then if
* @a version_footer is non-NULL, print it following the version
- * information.
+ * information. If @a verbose is TRUE, also print information about
+ * the running system and loaded shared libraries, where available.
*
* Else, if @a os is not @c NULL and does not contain arguments, print
* generic help, via svn_opt_print_generic_help2() with the @a header,
@@ -695,8 +696,30 @@ svn_opt_parse_path(svn_opt_revision_t *rev,
* --version flag *and* subcommand arguments on a help command line.
* The logic for handling such a situation should be in one place.
*
- * @since New in 1.5.
+ * @since New in 1.8.
*/
+
+svn_error_t *
+svn_opt_print_help4(apr_getopt_t *os,
+ const char *pgm_name,
+ svn_boolean_t print_version,
+ svn_boolean_t quiet,
+ svn_boolean_t verbose,
+ const char *version_footer,
+ const char *header,
+ const svn_opt_subcommand_desc2_t *cmd_table,
+ const apr_getopt_option_t *option_table,
+ const int *global_options,
+ const char *footer,
+ apr_pool_t *pool);
+
+/**
+ * Same as svn_opt_print_help4(), but with @a verbose always @c FALSE.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ */
+
+SVN_DEPRECATED
svn_error_t *
svn_opt_print_help3(apr_getopt_t *os,
const char *pgm_name,
diff --git a/subversion/include/svn_path.h b/subversion/include/svn_path.h
index 3a6511b..3478003 100644
--- a/subversion/include/svn_path.h
+++ b/subversion/include/svn_path.h
@@ -106,8 +106,8 @@ svn_path_local_style(const char *path, apr_pool_t *pool);
* for the base.
*
* @deprecated Provided for backward compatibility with the 1.6 API.
- * New code should use svn_dirent_join(), svn_uri_join(),
- * svn_relpath_join() or svn_fspath__join().
+ * New code should use svn_dirent_join(), svn_relpath_join() or
+ * svn_fspath__join().
*/
SVN_DEPRECATED
char *
@@ -296,6 +296,10 @@ svn_path_is_canonical(const char *path, apr_pool_t *pool);
/** Return an integer greater than, equal to, or less than 0, according
* as @a path1 is greater than, equal to, or less than @a path2.
+ *
+ * This function works like strcmp() except that it orders children in
+ * subdirectories directly after their parents. This allows using the
+ * given ordering for a depth first walk.
*/
int
svn_path_compare_paths(const char *path1, const char *path2);
@@ -509,8 +513,9 @@ svn_path_is_dotpath_present(const char *path);
* identify the remainder path.
*
* @deprecated Provided for backward compatibility with the 1.6 API.
- * New code should use svn_dirent_is_child(), svn_uri_is_child(),
- * svn_relpath_is_child() or svn_fspath__is_child().
+ * For replacement functionality, see svn_dirent_skip_ancestor(),
+ * svn_dirent_is_child(), svn_uri_skip_ancestor(), and
+ * svn_relpath_skip_ancestor().
*/
SVN_DEPRECATED
const char *
@@ -522,8 +527,8 @@ svn_path_is_child(const char *path1, const char *path2, apr_pool_t *pool);
* @since New in 1.3.
*
* @deprecated Provided for backward compatibility with the 1.6 API.
- * New code should use svn_dirent_is_ancestor(), svn_uri_is_ancestor(),
- * svn_relpath_is_ancestor() or svn_fspath__is_ancestor().
+ * For replacement functionality, see svn_dirent_skip_ancestor(),
+ * svn_uri_skip_ancestor(), and svn_relpath_skip_ancestor().
*/
SVN_DEPRECATED
svn_boolean_t
@@ -665,6 +670,62 @@ svn_path_cstring_to_utf8(const char **path_utf8,
/** @} */
+
+/** Repository relative URLs
+ *
+ * @defgroup svn_path_repos_relative_urls Repository relative URLs
+ * @{
+ */
+
+/**
+ * Return @c TRUE iff @a path is a repository-relative URL: specifically
+ * that it starts with the characters "^/"
+ *
+ * @a path is in UTF-8 encoding.
+ *
+ * Does not check whether @a path is a properly URI-encoded, canonical, or
+ * valid in any other way.
+ *
+ * @since New in 1.8.
+ */
+svn_boolean_t
+svn_path_is_repos_relative_url(const char *path);
+
+/**
+ * Set @a absolute_url to the absolute URL represented by @a relative_url
+ * relative to @a repos_root_url, preserving any peg revision
+ * specifier present in @a relative_url. Allocate @a absolute_url
+ * from @a pool.
+ *
+ * @a relative_url is in repository-relative syntax: "^/[REL-URL][@PEG]"
+ *
+ * @a repos_root_url is the absolute URL of the repository root.
+ *
+ * All strings are in UTF-8 encoding.
+ *
+ * @a repos_root_url and @a relative_url do not have to be properly
+ * URI-encoded, canonical, or valid in any other way. The caller is
+ * expected to perform canonicalization on @a absolute_url after the
+ * call to the function.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_path_resolve_repos_relative_url(const char **absolute_url,
+ const char *relative_url,
+ const char *repos_root_url,
+ apr_pool_t *pool);
+
+/* Return a copy of @a path, allocated from @a pool, for which control
+ * characters have been escaped using the form \NNN (where NNN is the
+ * octal representation of the byte's ordinal value).
+ *
+ * @since New in 1.8. */
+const char *
+svn_path_illegal_path_escape(const char *path, apr_pool_t *pool);
+
+/** @} */
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/include/svn_pools.h b/subversion/include/svn_pools.h
index 4dc02c6..d4c3a53 100644
--- a/subversion/include/svn_pools.h
+++ b/subversion/include/svn_pools.h
@@ -30,7 +30,7 @@
#ifndef SVN_POOLS_H
#define SVN_POOLS_H
-#include <apr_pools.h>
+#include "svn_types.h"
#ifdef __cplusplus
extern "C" {
@@ -86,6 +86,26 @@ svn_pool_create_ex_debug(pool, allocator, APR_POOL__FILE_LINE__)
*/
#define svn_pool_destroy apr_pool_destroy
+/** Return a new allocator. This function limits the unused memory in the
+ * new allocator to #SVN_ALLOCATOR_RECOMMENDED_MAX_FREE and ensures
+ * proper synchronization if the allocator is used by multiple threads.
+ *
+ * If your application uses multiple threads, creating a separate
+ * allocator for each of these threads may not be feasible. Set the
+ * @a thread_safe parameter to @c TRUE in that case; otherwise, set @a
+ * thread_safe to @c FALSE to maximize performance.
+ *
+ * @note Even if @a thread_safe is @c TRUE, pools themselves will
+ * still not be thread-safe and their access may require explicit
+ * serialization.
+ *
+ * To access the owner pool, which can also serve as the root pool for
+ * your sub-pools, call @c apr_allocator_get_owner().
+ *
+ * @since: New in 1.8
+ */
+apr_allocator_t *
+svn_pool_create_allocator(svn_boolean_t thread_safe);
#ifdef __cplusplus
}
diff --git a/subversion/include/svn_props.h b/subversion/include/svn_props.h
index a6c4010..1f2bbbf 100644
--- a/subversion/include/svn_props.h
+++ b/subversion/include/svn_props.h
@@ -85,6 +85,26 @@ svn_prop_array_dup(const apr_array_header_t *array,
apr_pool_t *pool);
+/** A structure to represent inherited properties.
+ *
+ * @since New in 1.8.
+ */
+typedef struct svn_prop_inherited_item_t
+{
+ /** The absolute working copy path, relative filesystem path, or URL
+ * from which the properties in @a prop_hash are inherited. (For
+ * details about which path specification format is in use for a
+ * particular instance of this structure, consult the documentation
+ * for the API which produced it.) */
+ const char *path_or_url;
+
+ /** A hash of (<tt>const char *</tt>) inherited property names, and
+ * (<tt>svn_string_t *</tt>) property values. */
+ apr_hash_t *prop_hash;
+
+} svn_prop_inherited_item_t;
+
+
/**
* Given a hash (keys <tt>const char *</tt> and values <tt>const
* svn_string_t</tt>) of properties, returns an array of svn_prop_t
@@ -93,7 +113,7 @@ svn_prop_array_dup(const apr_array_header_t *array,
* @since New in 1.5.
*/
apr_array_header_t *
-svn_prop_hash_to_array(apr_hash_t *hash,
+svn_prop_hash_to_array(const apr_hash_t *hash,
apr_pool_t *pool);
/**
@@ -111,12 +131,12 @@ svn_prop_array_to_hash(const apr_array_header_t *properties,
/**
* Creates a deep copy of @a hash (keys <tt>const char *</tt> and
- * values <tt>const svn_string_t</tt>) in @a pool.
+ * values <tt>const svn_string_t *</tt>) in @a pool.
*
* @since New in 1.6.
*/
apr_hash_t *
-svn_prop_hash_dup(apr_hash_t *hash,
+svn_prop_hash_dup(const apr_hash_t *hash,
apr_pool_t *pool);
/**
@@ -127,7 +147,7 @@ svn_prop_hash_dup(apr_hash_t *hash,
* @since New in 1.7.
*/
const char *
-svn_prop_get_value(apr_hash_t *properties,
+svn_prop_get_value(const apr_hash_t *properties,
const char *prop_name);
/**
@@ -150,24 +170,37 @@ typedef enum svn_prop_kind
svn_prop_regular_kind
} svn_prop_kind_t;
+/** Return the property kind of a property named @a prop_name.
+ *
+ * @since New in 1.8.
+ */
+svn_prop_kind_t
+svn_property_kind2(const char *prop_name);
+
/** Return the prop kind of a property named @a prop_name, and
* (if @a prefix_len is non-@c NULL) set @a *prefix_len to the length of
* the prefix of @a prop_name that was sufficient to distinguish its kind.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_prop_kind_t
svn_property_kind(int *prefix_len,
const char *prop_name);
/** Return @c TRUE iff @a prop_name represents the name of a Subversion
- * property.
+ * property. That is, any property name in Subversion's name space for
+ * versioned or unversioned properties, regardless whether the particular
+ * property name is recognized.
*/
svn_boolean_t
svn_prop_is_svn_prop(const char *prop_name);
/** Return @c TRUE iff @a props has at least one property whose name
- * represents the name of a Subversion property.
+ * represents the name of a Subversion property, in the sense of
+ * svn_prop_is_svn_prop().
*
* @since New in 1.5.
*/
@@ -178,11 +211,62 @@ svn_prop_has_svn_prop(const apr_hash_t *props,
/** Return @c TRUE iff @a prop_name is a Subversion property whose
* value is interpreted as a boolean.
*
- * @since New in 1.5
+ * @since New in 1.5.
*/
svn_boolean_t
svn_prop_is_boolean(const char *prop_name);
+/** Return @c TRUE iff @a prop_name is in the "svn:" name space and is a
+ * known revision property ("svn:log" or "svn:date", e.g.).
+ *
+ * This will return @c FALSE for any property name that is not known by this
+ * version of the library, even though the name may be known to other (for
+ * example, later) Subversion software.
+ *
+ * @since New in 1.8.
+ */
+svn_boolean_t
+svn_prop_is_known_svn_rev_prop(const char *prop_name);
+
+/** Return @c TRUE iff @a prop_name is in the "svn:" name space and is a
+ * known versioned property that is allowed on a file and/or on a
+ * directory ("svn:eol-style", "svn:ignore", or "svn:mergeinfo", e.g.).
+ *
+ * This will return @c FALSE for any property name that is not known
+ * by this version of the library, even though the name may be known
+ * to other (for example, later) Subversion software.
+ *
+ * @since New in 1.8.
+ */
+svn_boolean_t
+svn_prop_is_known_svn_node_prop(const char *prop_name);
+
+/** Return @c TRUE iff @a prop_name is in the "svn:" name space and is
+ * a known versioned property that is allowed on a file
+ * ("svn:eol-style" or "svn:mergeinfo", e.g.).
+ *
+ * This will return @c FALSE for any property name that is not known
+ * by this version of the library, even though the name may be known
+ * to other (for example, later) Subversion software.
+ *
+ * @since New in 1.8.
+ */
+svn_boolean_t
+svn_prop_is_known_svn_file_prop(const char *prop_name);
+
+/** Return @c TRUE iff @a prop_name is in the "svn:" name space and is
+ * a known versioned property that is allowed on a directory
+ * ("svn:ignore" or "svn:mergeinfo", e.g.).
+ *
+ * This will return @c FALSE for any property name that is not known
+ * by this version of the library, even though the name may be known
+ * to other (for example, later) Subversion software.
+ *
+ * @since New in 1.8.
+ */
+svn_boolean_t
+svn_prop_is_known_svn_dir_prop(const char *prop_name);
+
/** If @a prop_name requires that its value be stored as UTF8/LF in the
* repository, then return @c TRUE. Else return @c FALSE. This is for
* users of libsvn_client or libsvn_fs, since it their responsibility
@@ -236,8 +320,8 @@ svn_categorize_props(const apr_array_header_t *proplist,
*/
svn_error_t *
svn_prop_diffs(apr_array_header_t **propdiffs,
- apr_hash_t *target_props,
- apr_hash_t *source_props,
+ const apr_hash_t *target_props,
+ const apr_hash_t *source_props,
apr_pool_t *pool);
@@ -330,19 +414,21 @@ svn_prop_name_is_valid(const char *prop_name);
/** Describes external items to check out into this directory.
*
- * The format is a series of lines, such as:
- *
- * <pre reason="Should use 'verbatim' instead, but Doxygen v1.6.1 & v1.7.1
- * then doesn't recognize the #define; presumably a bug.">
- localdir1 http://url.for.external.source/etc/
- localdir1/foo http://url.for.external.source/foo
- localdir1/bar http://blah.blah.blah/repositories/theirproj
- localdir1/bar/baz http://blorg.blorg.blorg/basement/code
- localdir2 http://another.url/blah/blah/blah
- localdir3 http://and.so.on/and/so/forth </pre>
- *
- * The subdir names on the left side are relative to the directory on
- * which this property is set.
+ * The format is a series of lines, each in the following format:
+ * [-r REV] URL[@PEG] LOCALPATH
+ * LOCALPATH is relative to the directory having this property.
+ * REV pins the external to revision REV.
+ * URL may be a full URL or a relative URL starting with one of:
+ * ../ to the parent directory of the extracted external
+ * ^/ to the repository root
+ * / to the server root
+ * // to the URL scheme
+ * The following format is supported for interoperability with
+ * Subversion 1.4 and earlier clients:
+ * LOCALPATH [-r PEG] URL
+ * The ambiguous format 'relative_path relative_path' is taken as
+ * 'relative_url relative_path' with peg revision support.
+ * Lines starting with a '#' character are ignored.
*/
#define SVN_PROP_EXTERNALS SVN_PROP_PREFIX "externals"
@@ -357,6 +443,11 @@ svn_prop_name_is_valid(const char *prop_name);
*/
#define SVN_PROP_MERGEINFO SVN_PROP_PREFIX "mergeinfo"
+/** Property used to record inheritable configuration auto-props. */
+#define SVN_PROP_INHERITABLE_AUTO_PROPS SVN_PROP_PREFIX "auto-props"
+
+/** Property used to record inheritable configuration ignores. */
+#define SVN_PROP_INHERITABLE_IGNORES SVN_PROP_PREFIX "global-ignores"
/** Meta-data properties.
*
@@ -397,6 +488,28 @@ svn_prop_name_is_valid(const char *prop_name);
/** @} */ /* Meta-data properties */
+/**
+ * This is a list of all user-visible and -settable versioned node
+ * properties.
+ *
+ * @since New in 1.8.
+ */
+#define SVN_PROP_NODE_ALL_PROPS SVN_PROP_MIME_TYPE, \
+ SVN_PROP_IGNORE, \
+ SVN_PROP_EOL_STYLE, \
+ SVN_PROP_KEYWORDS, \
+ SVN_PROP_EXECUTABLE, \
+ SVN_PROP_NEEDS_LOCK, \
+ SVN_PROP_SPECIAL, \
+ SVN_PROP_EXTERNALS, \
+ SVN_PROP_MERGEINFO, \
+ SVN_PROP_INHERITABLE_AUTO_PROPS, \
+ SVN_PROP_INHERITABLE_IGNORES, \
+ \
+ SVN_PROP_TEXT_TIME, \
+ SVN_PROP_OWNER, \
+ SVN_PROP_GROUP, \
+ SVN_PROP_UNIX_MODE,
/** @} */
@@ -492,25 +605,37 @@ svn_prop_name_is_valid(const char *prop_name);
/* More reserved revision props in the 'svn:' namespace, used by the
svnsync tool: */
-/** Prefix for all svnsync custom properties. */
+/** Prefix for all svnsync custom properties.
+ * @since New in 1.4.
+ */
#define SVNSYNC_PROP_PREFIX SVN_PROP_PREFIX "sync-"
/* The following revision properties are set on revision 0 of
* destination repositories by svnsync:
*/
-/** Used to enforce mutually exclusive destination repository access. */
+/** Used to enforce mutually exclusive destination repository access.
+ * @since New in 1.4.
+ */
#define SVNSYNC_PROP_LOCK SVNSYNC_PROP_PREFIX "lock"
-/** Identifies the repository's source URL. */
+/** Identifies the repository's source URL.
+ * @since New in 1.4.
+ */
#define SVNSYNC_PROP_FROM_URL SVNSYNC_PROP_PREFIX "from-url"
-/** Identifies the repository's source UUID. */
+/** Identifies the repository's source UUID.
+ * @since New in 1.4.
+ */
#define SVNSYNC_PROP_FROM_UUID SVNSYNC_PROP_PREFIX "from-uuid"
-/** Identifies the last completely mirrored revision. */
+/** Identifies the last completely mirrored revision.
+ * @since New in 1.4.
+ */
#define SVNSYNC_PROP_LAST_MERGED_REV SVNSYNC_PROP_PREFIX "last-merged-rev"
-/** Identifies the revision currently being copied. */
+/** Identifies the revision currently being copied.
+ * @since New in 1.4.
+ */
#define SVNSYNC_PROP_CURRENTLY_COPYING SVNSYNC_PROP_PREFIX "currently-copying"
@@ -530,6 +655,54 @@ svn_prop_name_is_valid(const char *prop_name);
/** @} */
+/**
+ * These are reserved properties attached to a "transaction" object in
+ * the repository filesystem in advance of the pre-commit hook script
+ * running on the server, but then automatically removed from the
+ * transaction before its promotion to a new revision.
+ *
+ * @defgroup svn_props_ephemeral_txnprops Ephemeral transaction properties
+ * @{
+ */
+
+/** The prefix used for all (ephemeral) transaction properties.
+ *
+ * @since New in 1.8.
+ */
+#define SVN_PROP_TXN_PREFIX SVN_PROP_PREFIX "txn-"
+
+/** Identifies the client version compability level. For clients
+ * compiled against Subversion libraries, this is @c SVN_VER_NUMBER.
+ * Third-party implementations are advised to use similar formatting
+ * for values of this property.
+ *
+ * @since New in 1.8.
+ */
+#define SVN_PROP_TXN_CLIENT_COMPAT_VERSION \
+ SVN_PROP_TXN_PREFIX "client-compat-version"
+
+/** Identifies the client's user agent string, if any.
+ *
+ * @since New in 1.8.
+ */
+#define SVN_PROP_TXN_USER_AGENT \
+ SVN_PROP_TXN_PREFIX "user-agent"
+
+/** The prefix reserved for copies of (ephemeral) transaction
+ * properties designed to outlive the transaction. Administrators may
+ * choose to, in their pre-commit hook scripts, copy the values of one
+ * or more properties named @c SVN_PROP_TXN_PREFIX + "something"
+ * to new properties named @c SVN_PROP_REVISION_PREFIX + "something",
+ * allowing that information to survive the commit-time removal of
+ * ephemeral transaction properties.
+ *
+ * @since New in 1.8.
+ */
+#define SVN_PROP_REVISION_PREFIX SVN_PROP_PREFIX "revision-"
+
+
+/** @} */
+
/** @} */
diff --git a/subversion/include/svn_ra.h b/subversion/include/svn_ra.h
index 3315940..cf6f612 100644
--- a/subversion/include/svn_ra.h
+++ b/subversion/include/svn_ra.h
@@ -120,6 +120,19 @@ typedef svn_error_t *(*svn_ra_invalidate_wc_props_func_t)(void *baton,
const char *name,
apr_pool_t *pool);
+/** This is a function type which allows the RA layer to fetch the
+ * cached pristine file contents whose checksum is @a checksum, if
+ * any. @a *contents will be a read stream containing those contents
+ * if they are found; NULL otherwise.
+ *
+ * @since New in 1.8.
+ */
+typedef svn_error_t *
+(*svn_ra_get_wc_contents_func_t)(void *baton,
+ svn_stream_t **contents,
+ const svn_checksum_t *checksum,
+ apr_pool_t *pool);
+
/** A function type for retrieving the youngest revision from a repos. */
typedef svn_error_t *(*svn_ra_get_latest_revnum_func_t)(
@@ -138,6 +151,7 @@ typedef svn_error_t *(*svn_ra_get_client_string_func_t)(void *baton,
apr_pool_t *pool);
+
/**
* A callback function type for use in @c get_file_revs.
* @a baton is provided by the caller, @a path is the pathname of the file
@@ -516,6 +530,11 @@ typedef struct svn_ra_callbacks2_t
*/
svn_ra_get_client_string_func_t get_client_string;
+ /** Working copy file content fetching function.
+ * @since New in 1.8.
+ */
+ svn_ra_get_wc_contents_func_t get_wc_contents;
+
} svn_ra_callbacks2_t;
/** Similar to svn_ra_callbacks2_t, except that the progress
@@ -573,7 +592,7 @@ svn_ra_create_callbacks(svn_ra_callbacks2_t **callbacks,
/**
* A repository access session. This object is used to perform requests
- * to a repository, identified by an URL.
+ * to a repository, identified by a URL.
*
* @since New in 1.2.
*/
@@ -594,6 +613,17 @@ typedef struct svn_ra_session_t svn_ra_session_t;
* corrected_url is NULL, return an #SVN_ERR_RA_SESSION_URL_MISMATCH
* error. Allocate all returned items in @a pool.
*
+ * The @a repos_URL need not point to the root of the repository: subject
+ * to authorization, it may point to any path within the repository, even
+ * a path at which no node exists in the repository. The session will
+ * remember this URL as its "session URL" (also called "session root URL"),
+ * until changed by svn_ra_reparent(). Many RA functions take or return
+ * paths that are relative to the session URL.
+ *
+ * If a @a corrected_url is returned, it will point to the same path
+ * within the new repository root URL that @a repos_URL pointed to within
+ * the old repository root URL.
+ *
* Return @c SVN_ERR_RA_UUID_MISMATCH if @a uuid is non-NULL and not equal
* to the UUID of the repository at @c repos_URL.
*
@@ -602,7 +632,10 @@ typedef struct svn_ra_session_t svn_ra_session_t;
*
* @a config is a hash mapping <tt>const char *</tt> keys to
* @c svn_config_t * values. For example, the @c svn_config_t for the
- * "~/.subversion/config" file is under the key "config".
+ * "~/.subversion/config" file is under the key "config". @a config may
+ * be NULL. This function examines some config settings under the
+ * "servers" key (if present) before loading the required RA module, and
+ * the RA module may also examine any config settings.
*
* All RA requests require a session; they will continue to
* use @a pool for memory allocation.
@@ -680,7 +713,7 @@ svn_ra_reparent(svn_ra_session_t *ra_session,
const char *url,
apr_pool_t *pool);
-/** Set @a *url to the repository URL to which @a ra_session was
+/** Set @a *url to the session URL -- the URL to which @a ra_session was
* opened or most recently reparented.
*
* @since New in 1.5.
@@ -691,8 +724,8 @@ svn_ra_get_session_url(svn_ra_session_t *ra_session,
apr_pool_t *pool);
-/** Convert @a url into a path relative to the URL at which @a ra_session
- * is parented, setting @a *rel_path to that value. If @a url is not
+/** Convert @a url into a path relative to the session URL of @a ra_session,
+ * setting @a *rel_path to that value. If @a url is not
* a child of the session URL, return @c SVN_ERR_RA_ILLEGAL_URL.
*
* The returned path is uri decoded to allow using it with the ra or other
@@ -841,12 +874,12 @@ svn_ra_rev_prop(svn_ra_session_t *session,
* or @c SVN_PROP_REVISION_AUTHOR.
*
* Before @c close_edit returns, but after the commit has succeeded,
- * it will invoke @a callback (if non-NULL) with the new revision number,
- * the commit date (as a <tt>const char *</tt>), commit author (as a
- * <tt>const char *</tt>), and @a callback_baton as arguments. If
- * @a callback returns an error, that error will be returned from @c
- * close_edit, otherwise @c close_edit will return successfully
- * (unless it encountered an error before invoking @a callback).
+ * it will invoke @a commit_callback (if non-NULL) with filled-in
+ * #svn_commit_info_t *, @a commit_baton, and @a pool or some subpool
+ * thereof as arguments. If @a commit_callback returns an error, that error
+ * will be returned from @c * close_edit, otherwise @c close_edit will return
+ * successfully (unless it encountered an error before invoking
+ * @a commit_callback).
*
* The callback will not be called if the commit was a no-op
* (i.e. nothing was committed);
@@ -872,8 +905,8 @@ svn_ra_get_commit_editor3(svn_ra_session_t *session,
const svn_delta_editor_t **editor,
void **edit_baton,
apr_hash_t *revprop_table,
- svn_commit_callback2_t callback,
- void *callback_baton,
+ svn_commit_callback2_t commit_callback,
+ void *commit_baton,
apr_hash_t *lock_tokens,
svn_boolean_t keep_locks,
apr_pool_t *pool);
@@ -893,8 +926,8 @@ svn_ra_get_commit_editor2(svn_ra_session_t *session,
const svn_delta_editor_t **editor,
void **edit_baton,
const char *log_msg,
- svn_commit_callback2_t callback,
- void *callback_baton,
+ svn_commit_callback2_t commit_callback,
+ void *commit_baton,
apr_hash_t *lock_tokens,
svn_boolean_t keep_locks,
apr_pool_t *pool);
@@ -1045,7 +1078,7 @@ svn_ra_get_mergeinfo(svn_ra_session_t *session,
apr_pool_t *pool);
/**
- * Ask the RA layer to update a working copy.
+ * Ask the RA layer to update a working copy to a new revision.
*
* The client initially provides an @a update_editor/@a update_baton to the
* RA layer; this editor contains knowledge of where the change will
@@ -1071,6 +1104,12 @@ svn_ra_get_mergeinfo(svn_ra_session_t *session,
* (Note: this means that any subsequent txdeltas coming from the
* server are presumed to apply against the copied file!)
*
+ * Use @a ignore_ancestry to control whether or not items being
+ * updated will be checked for relatedness first. Unrelated items
+ * are typically transmitted to the editor as a deletion of one thing
+ * and the addition of another, but if this flag is @c TRUE,
+ * unrelated items will be diffed as if they were related.
+ *
* The working copy will be updated to @a revision_to_update_to, or the
* "latest" revision if this arg is invalid.
*
@@ -1078,7 +1117,8 @@ svn_ra_get_mergeinfo(svn_ra_session_t *session,
* finishing the report, and may not perform any RA operations using
* @a session from within the editing operations of @a update_editor.
*
- * Use @a pool for memory allocation.
+ * Allocate @a *reporter and @a *report_baton in @a result_pool. Use
+ * @a scratch_pool for temporary allocations.
*
* @note The reporter provided by this function does NOT supply copy-
* from information to the diff editor callbacks.
@@ -1087,8 +1127,36 @@ svn_ra_get_mergeinfo(svn_ra_session_t *session,
* needed, and sending too much data back, a pre-1.5 'recurse'
* directive may be sent to the server, based on @a depth.
*
+ * @note Pre Subversion 1.8 svnserve based servers never ignore ancestry.
+ *
+ * @note This differs from calling svn_ra_do_switch3() with the current
+ * URL of the target node. Update changes only the revision numbers,
+ * leaving any switched subtrees still switched, whereas switch changes
+ * every node in the tree to a child of the same URL.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_ra_do_update3(svn_ra_session_t *session,
+ const svn_ra_reporter3_t **reporter,
+ void **report_baton,
+ svn_revnum_t revision_to_update_to,
+ const char *update_target,
+ svn_depth_t depth,
+ svn_boolean_t send_copyfrom_args,
+ svn_boolean_t ignore_ancestry,
+ const svn_delta_editor_t *update_editor,
+ void *update_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_ra_do_update3(), but always ignoring ancestry.
+ *
* @since New in 1.5.
+ * @deprecated Provided for compatibility with the 1.4 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_ra_do_update2(svn_ra_session_t *session,
const svn_ra_reporter3_t **reporter,
@@ -1123,47 +1191,41 @@ svn_ra_do_update(svn_ra_session_t *session,
/**
- * Ask the RA layer to 'switch' a working copy to a new
- * @a switch_url; it's another form of svn_ra_do_update().
- *
- * The client initially provides a @a switch_editor/@a switch_baton to the RA
- * layer; this editor contains knowledge of where the change will
- * begin in the working copy (when open_root() is called).
- *
- * In return, the client receives a @a reporter/@a report_baton. The
- * client then describes its working copy by making calls into the
- * @a reporter.
- *
- * When finished, the client calls @a reporter->finish_report(). The
- * RA layer then does a complete drive of @a switch_editor, ending with
- * close_edit(), to switch the working copy.
- *
- * @a switch_target is an optional single path component will restrict
- * the scope of things affected by the switch to an entry in the
- * directory represented by the @a session's URL, or empty if the
- * entire directory is meant to be switched.
- *
- * Switch the target only as deeply as @a depth indicates.
- *
- * The working copy will be switched to @a revision_to_switch_to, or the
- * "latest" revision if this arg is invalid.
+ * Ask the RA layer to switch a working copy to a new revision and URL.
*
- * The caller may not perform any RA operations using
- * @a session before finishing the report, and may not perform
- * any RA operations using @a session from within the editing
- * operations of @a switch_editor.
+ * This is similar to svn_ra_do_update3(), but also changes the URL of
+ * every node in the target tree to a child of the @a switch_url. In
+ * contrast, update changes only the revision numbers, leaving any
+ * switched subtrees still switched.
*
- * Use @a pool for memory allocation.
- *
- * @note The reporter provided by this function does NOT supply copy-
- * from information to the diff editor callbacks.
+ * @note Pre Subversion 1.8 svnserve based servers always ignore ancestry
+ * and never send copyfrom data.
*
- * @note In order to prevent pre-1.5 servers from doing more work than
- * needed, and sending too much data back, a pre-1.5 'recurse'
- * directive may be sent to the server, based on @a depth.
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_ra_do_switch3(svn_ra_session_t *session,
+ const svn_ra_reporter3_t **reporter,
+ void **report_baton,
+ svn_revnum_t revision_to_switch_to,
+ const char *switch_target,
+ svn_depth_t depth,
+ const char *switch_url,
+ svn_boolean_t send_copyfrom_args,
+ svn_boolean_t ignore_ancestry,
+ const svn_delta_editor_t *switch_editor,
+ void *switch_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_ra_do_switch3(), but always ignoring ancestry and
+ * never sending copyfrom_args.
*
* @since New in 1.5.
+ * @deprecated Provided for compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_ra_do_switch2(svn_ra_session_t *session,
const svn_ra_reporter3_t **reporter,
@@ -1277,7 +1339,7 @@ svn_ra_do_status(svn_ra_session_t *session,
* it's another form of svn_ra_do_update2().
*
* @note This function cannot be used to diff a single file, only a
- * working copy directory. See the svn_ra_do_switch2() function
+ * working copy directory. See the svn_ra_do_switch3() function
* for more details.
*
* The client initially provides a @a diff_editor/@a diff_baton to the RA
@@ -1406,8 +1468,9 @@ svn_ra_do_diff(svn_ra_session_t *session,
*
* If @a discover_changed_paths, then each call to @a receiver passes a
* <tt>const apr_hash_t *</tt> for the receiver's @a changed_paths argument;
- * the hash's keys are all the paths committed in that revision.
- * Otherwise, each call to receiver passes NULL for @a changed_paths.
+ * the hash's keys are all the paths committed in that revision, the hash's
+ * values are <tt>const svn_log_changed_path2_t *</tt> for each committed
+ * path. Otherwise, each call to receiver passes NULL for @a changed_paths.
*
* If @a strict_node_history is set, copy history will not be traversed
* (if any exists) when harvesting the revision logs for each path.
@@ -1415,8 +1478,9 @@ svn_ra_do_diff(svn_ra_session_t *session,
* If @a include_merged_revisions is set, log information for revisions
* which have been merged to @a targets will also be returned.
*
- * If @a revprops is NULL, retrieve all revprops; else, retrieve only the
- * revprops named in the array (i.e. retrieve none if the array is empty).
+ * If @a revprops is NULL, retrieve all revision properties; else, retrieve
+ * only the revision properties named by the (const char *) array elements
+ * (i.e. retrieve none if the array is empty).
*
* If any invocation of @a receiver returns error, return that error
* immediately and without wrapping it.
@@ -1640,6 +1704,10 @@ svn_ra_get_location_segments(svn_ra_session_t *session,
* server doesn't implement it, an alternative (but much slower)
* implementation based on svn_ra_get_log2() is used.
*
+ * On subversion 1.8 and newer servers this function has been enabled
+ * to support reversion of the revision range for @a include_merged_revision
+ * @c FALSE reporting by switching @a end with @a start.
+ *
* @since New in 1.5.
*/
svn_error_t *
@@ -1672,7 +1740,8 @@ svn_ra_get_file_revs(svn_ra_session_t *session,
/**
* Lock each path in @a path_revs, which is a hash whose keys are the
* paths to be locked, and whose values are the corresponding base
- * revisions for each path.
+ * revisions for each path. The keys are (const char *) and the
+ * revisions are (svn_revnum_t *).
*
* Note that locking is never anonymous, so any server implementing
* this function will have to "pull" a username from the client, if
@@ -1886,6 +1955,33 @@ svn_ra_get_deleted_rev(svn_ra_session_t *session,
apr_pool_t *pool);
/**
+ * Set @a *inherited_props to a depth-first ordered array of
+ * #svn_prop_inherited_item_t * structures representing the properties
+ * inherited by @a path at @a revision (or the 'head' revision if
+ * @a revision is @c SVN_INVALID_REVNUM). Interpret @a path relative to
+ * the URL in @a session. Use @a pool for all allocations. If no
+ * inheritable properties are found, then set @a *inherited_props to
+ * an empty array.
+ *
+ * The #svn_prop_inherited_item_t->path_or_url members of the
+ * #svn_prop_inherited_item_t * structures in @a *inherited_props are
+ * paths relative to the repository root URL (of the repository which
+ * @a ra_session is associated).
+ *
+ * Allocate @a *inherited_props in @a result_pool. Use @a scratch_pool
+ * for temporary allocations.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_ra_get_inherited_props(svn_ra_session_t *session,
+ apr_array_header_t **inherited_props,
+ const char *path,
+ svn_revnum_t revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/**
* @defgroup Capabilities Dynamically query the server's capabilities.
*
* @{
@@ -1957,6 +2053,30 @@ svn_ra_has_capability(svn_ra_session_t *session,
*/
#define SVN_RA_CAPABILITY_ATOMIC_REVPROPS "atomic-revprops"
+/**
+ * The capability to get inherited properties.
+ *
+ * @since New in 1.8.
+ */
+#define SVN_RA_CAPABILITY_INHERITED_PROPS "inherited-props"
+
+/**
+ * The capability of a server to automatically remove transaction
+ * properties prefixed with SVN_PROP_EPHEMERAL_PREFIX.
+ *
+ * @since New in 1.8.
+ */
+#define SVN_RA_CAPABILITY_EPHEMERAL_TXNPROPS "ephemeral-txnprops"
+
+/**
+ * The capability of a server to walk revisions backwards in
+ * svn_ra_get_file_revs2
+ *
+ * @since New in 1.8.
+ */
+#define SVN_RA_CAPABILITY_GET_FILE_REVS_REVERSE "get-file-revs-reversed"
+
+
/* *** PLEASE READ THIS IF YOU ADD A NEW CAPABILITY ***
*
* RA layers generally fetch all capabilities when asked about any
@@ -2005,7 +2125,7 @@ svn_ra_print_ra_libraries(svn_stringbuf_t **descriptions,
*/
typedef struct svn_ra_plugin_t
{
- /** The proper name of the RA library, (like "ra_neon" or "ra_local") */
+ /** The proper name of the RA library, (like "ra_serf" or "ra_local") */
const char *name;
/** Short doc string printed out by `svn --version` */
@@ -2276,7 +2396,7 @@ typedef svn_error_t *(*svn_ra_init_func_t)(int abi_version,
/* Public RA implementations. */
-/** Initialize libsvn_ra_neon.
+/** Initialize libsvn_ra_serf.
*
* @deprecated Provided for backward compatibility with the 1.1 API. */
SVN_DEPRECATED
diff --git a/subversion/include/svn_ra_svn.h b/subversion/include/svn_ra_svn.h
index 65aae41..9c556b8 100644
--- a/subversion/include/svn_ra_svn.h
+++ b/subversion/include/svn_ra_svn.h
@@ -62,6 +62,13 @@ extern "C" {
#define SVN_RA_SVN_CAP_PARTIAL_REPLAY "partial-replay"
/* maps to SVN_RA_CAPABILITY_ATOMIC_REVPROPS */
#define SVN_RA_SVN_CAP_ATOMIC_REVPROPS "atomic-revprops"
+/* maps to SVN_RA_CAPABILITY_INHERITED_PROPERTIES: */
+#define SVN_RA_SVN_CAP_INHERITED_PROPS "inherited-props"
+/* maps to SVN_RA_CAPABILITY_EPHEMERAL_TXNPROPS */
+#define SVN_RA_SVN_CAP_EPHEMERAL_TXNPROPS "ephemeral-txnprops"
+/* maps to SVN_RA_CAPABILITY_GET_FILE_REVS_REVERSE */
+#define SVN_RA_SVN_CAP_GET_FILE_REVS_REVERSE "file-revs-reverse"
+
/** ra_svn passes @c svn_dirent_t fields over the wire as a list of
* words, these are the values used to represent each field.
@@ -161,11 +168,42 @@ typedef svn_error_t *(*svn_ra_svn_edit_callback)(void *baton);
* input/output files.
*
* Either @a sock or @a in_file/@a out_file must be set, not both.
- * Specify the desired network data compression level (zlib) from
- * 0 (no compression) to 9 (best but slowest).
+ * @a compression_level specifies the desired network data compression
+ * level (zlib) from 0 (no compression) to 9 (best but slowest).
+ *
+ * If @a zero_copy_limit is not 0, cached file contents smaller than the
+ * given limit may be sent directly to the network socket. Otherwise,
+ * it will be copied into a temporary buffer before being forwarded to
+ * the network stack. Since the zero-copy code path has to enforce strict
+ * time-outs, the receiver must be able to process @a zero_copy_limit
+ * bytes within one second. Even temporary failure to do so may cause
+ * the server to cancel the respective operation with a time-out error.
+ *
+ * To reduce the overhead of checking for cancellation requests from the
+ * data receiver, set @a error_check_interval to some non-zero value.
+ * It defines the number of bytes that must have been sent since the last
+ * check before the next check will be made.
+ *
+ * Allocate the result in @a pool.
+ *
+ * @since New in 1.8
+ */
+svn_ra_svn_conn_t *svn_ra_svn_create_conn3(apr_socket_t *sock,
+ apr_file_t *in_file,
+ apr_file_t *out_file,
+ int compression_level,
+ apr_size_t zero_copy_limit,
+ apr_size_t error_check_interval,
+ apr_pool_t *pool);
+
+/** Similar to svn_ra_svn_create_conn3() but disables the zero copy code
+ * path and sets the error checking interval to 0.
*
* @since New in 1.7.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_ra_svn_conn_t *
svn_ra_svn_create_conn2(apr_socket_t *sock,
apr_file_t *in_file,
@@ -173,7 +211,7 @@ svn_ra_svn_create_conn2(apr_socket_t *sock,
int compression_level,
apr_pool_t *pool);
-/** Similar to svn_ra_svn_create_conn2() but uses default
+/** Similar to svn_ra_svn_create_conn2() but uses the default
* compression level (#SVN_DELTA_COMPRESSION_LEVEL_DEFAULT) for network
* transmissions.
*
@@ -203,22 +241,104 @@ svn_boolean_t
svn_ra_svn_has_capability(svn_ra_svn_conn_t *conn,
const char *capability);
-/** Return the data compression level to use for network transmissions
+/** Return the data compression level to use for network transmissions.
*
* @since New in 1.7.
*/
int
svn_ra_svn_compression_level(svn_ra_svn_conn_t *conn);
+/** Return the zero-copy data block limit to use for network
+ * transmissions.
+ *
+ * @see http://en.wikipedia.org/wiki/Zero-copy
+ *
+ * @since New in 1.8.
+ */
+apr_size_t
+svn_ra_svn_zero_copy_limit(svn_ra_svn_conn_t *conn);
+
/** Returns the remote address of the connection as a string, if known,
* or NULL if inapplicable. */
const char *
svn_ra_svn_conn_remote_host(svn_ra_svn_conn_t *conn);
+/** Set @a *editor and @a *edit_baton to an editor which will pass editing
+ * operations over the network, using @a conn and @a pool.
+ *
+ * Upon successful completion of the edit, the editor will invoke @a callback
+ * with @a callback_baton as an argument.
+ */
+void
+svn_ra_svn_get_editor(const svn_delta_editor_t **editor,
+ void **edit_baton,
+ svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_ra_svn_edit_callback callback,
+ void *callback_baton);
+
+/** Receive edit commands over the network and use them to drive @a editor
+ * with @a edit_baton. On return, @a *aborted will be set if the edit was
+ * aborted. The drive can be terminated with a finish-replay command only
+ * if @a for_replay is TRUE.
+ *
+ * @since New in 1.4.
+ */
+svn_error_t *
+svn_ra_svn_drive_editor2(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const svn_delta_editor_t *editor,
+ void *edit_baton,
+ svn_boolean_t *aborted,
+ svn_boolean_t for_replay);
+
+/** Like svn_ra_svn_drive_editor2, but with @a for_replay always FALSE.
+ *
+ * @deprecated Provided for backward compatibility with the 1.3 API.
+ */
+SVN_DEPRECATED
+svn_error_t *
+svn_ra_svn_drive_editor(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const svn_delta_editor_t *editor,
+ void *edit_baton,
+ svn_boolean_t *aborted);
+
+/** This function is only intended for use by svnserve.
+ *
+ * Perform CRAM-MD5 password authentication. On success, return
+ * SVN_NO_ERROR with *user set to the username and *success set to
+ * TRUE. On an error which can be reported to the client, report the
+ * error and return SVN_NO_ERROR with *success set to FALSE. On
+ * communications failure, return an error.
+ */
+svn_error_t *
+svn_ra_svn_cram_server(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_config_t *pwdb,
+ const char **user,
+ svn_boolean_t *success);
+
+/**
+ * Get libsvn_ra_svn version information.
+ * @since New in 1.1.
+ */
+const svn_version_t *
+svn_ra_svn_version(void);
+
+/**
+ * @defgroup ra_svn_deprecated ra_svn low-level functions
+ * @{
+ */
+
/** Write a number over the net.
*
* Writes will be buffered until the next read or flush.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ * RA_SVN low-level functions are no longer considered public.
*/
+SVN_DEPRECATED
svn_error_t *
svn_ra_svn_write_number(svn_ra_svn_conn_t *conn,
apr_pool_t *pool,
@@ -227,7 +347,11 @@ svn_ra_svn_write_number(svn_ra_svn_conn_t *conn,
/** Write a string over the net.
*
* Writes will be buffered until the next read or flush.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ * RA_SVN low-level functions are no longer considered public.
*/
+SVN_DEPRECATED
svn_error_t *
svn_ra_svn_write_string(svn_ra_svn_conn_t *conn,
apr_pool_t *pool,
@@ -236,7 +360,11 @@ svn_ra_svn_write_string(svn_ra_svn_conn_t *conn,
/** Write a cstring over the net.
*
* Writes will be buffered until the next read or flush.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ * RA_SVN low-level functions are no longer considered public.
*/
+SVN_DEPRECATED
svn_error_t *
svn_ra_svn_write_cstring(svn_ra_svn_conn_t *conn,
apr_pool_t *pool,
@@ -245,7 +373,11 @@ svn_ra_svn_write_cstring(svn_ra_svn_conn_t *conn,
/** Write a word over the net.
*
* Writes will be buffered until the next read or flush.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ * RA_SVN low-level functions are no longer considered public.
*/
+SVN_DEPRECATED
svn_error_t *
svn_ra_svn_write_word(svn_ra_svn_conn_t *conn,
apr_pool_t *pool,
@@ -255,18 +387,32 @@ svn_ra_svn_write_word(svn_ra_svn_conn_t *conn,
* in which case an empty list will be written out.
*
* @since New in 1.5.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ * RA_SVN low-level functions are no longer considered public.
*/
+SVN_DEPRECATED
svn_error_t *
svn_ra_svn_write_proplist(svn_ra_svn_conn_t *conn,
apr_pool_t *pool,
apr_hash_t *props);
-/** Begin a list. Writes will be buffered until the next read or flush. */
+/** Begin a list. Writes will be buffered until the next read or flush.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ * RA_SVN low-level functions are no longer considered public.
+ */
+SVN_DEPRECATED
svn_error_t *
svn_ra_svn_start_list(svn_ra_svn_conn_t *conn,
apr_pool_t *pool);
-/** End a list. Writes will be buffered until the next read or flush. */
+/** End a list. Writes will be buffered until the next read or flush.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ * RA_SVN low-level functions are no longer considered public.
+ */
+SVN_DEPRECATED
svn_error_t *
svn_ra_svn_end_list(svn_ra_svn_conn_t *conn,
apr_pool_t *pool);
@@ -275,7 +421,11 @@ svn_ra_svn_end_list(svn_ra_svn_conn_t *conn,
*
* Normally this shouldn't be necessary, since the write buffer is flushed
* when a read is attempted.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ * RA_SVN low-level functions are no longer considered public.
*/
+SVN_DEPRECATED
svn_error_t *
svn_ra_svn_flush(svn_ra_svn_conn_t *conn,
apr_pool_t *pool);
@@ -318,13 +468,22 @@ svn_ra_svn_flush(svn_ra_svn_conn_t *conn,
for (i = 0; i < n; i++)
SVN_ERR(svn_ra_svn_write_word(conn, pool, words[i]));
SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!)b", flag)); @endcode
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ * RA_SVN low-level functions are no longer considered public.
*/
+SVN_DEPRECATED
svn_error_t *
svn_ra_svn_write_tuple(svn_ra_svn_conn_t *conn,
apr_pool_t *pool,
const char *fmt, ...);
-/** Read an item from the network into @a *item. */
+/** Read an item from the network into @a *item.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ * RA_SVN low-level functions are no longer considered public.
+ */
+SVN_DEPRECATED
svn_error_t *
svn_ra_svn_read_item(svn_ra_svn_conn_t *conn,
apr_pool_t *pool,
@@ -336,7 +495,11 @@ svn_ra_svn_read_item(svn_ra_svn_conn_t *conn,
* a client connection opened in tunnel mode, since people's dotfiles
* sometimes write output to stdout. It may only be called at the
* beginning of a client connection.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ * RA_SVN low-level functions are no longer considered public.
*/
+SVN_DEPRECATED
svn_error_t *
svn_ra_svn_skip_leading_garbage(svn_ra_svn_conn_t *conn,
apr_pool_t *pool);
@@ -372,7 +535,11 @@ svn_ra_svn_skip_leading_garbage(svn_ra_svn_conn_t *conn,
* SVN_RA_SVN_UNSPECIFIED_NUMBER, and 's', 'c', 'w', and 'l' values
* will be set to @c NULL. 'b' may not appear inside an optional
* tuple specification; use 'B' instead.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ * RA_SVN low-level functions are no longer considered public.
*/
+SVN_DEPRECATED
svn_error_t *
svn_ra_svn_parse_tuple(const apr_array_header_t *list,
apr_pool_t *pool,
@@ -380,7 +547,11 @@ svn_ra_svn_parse_tuple(const apr_array_header_t *list,
/** Read a tuple from the network and parse it as a tuple, using the
* format string notation from svn_ra_svn_parse_tuple().
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ * RA_SVN low-level functions are no longer considered public.
*/
+SVN_DEPRECATED
svn_error_t *
svn_ra_svn_read_tuple(svn_ra_svn_conn_t *conn,
apr_pool_t *pool,
@@ -390,7 +561,11 @@ svn_ra_svn_read_tuple(svn_ra_svn_conn_t *conn,
* properties, storing the properties in a hash table.
*
* @since New in 1.5.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ * RA_SVN low-level functions are no longer considered public.
*/
+SVN_DEPRECATED
svn_error_t *
svn_ra_svn_parse_proplist(const apr_array_header_t *list,
apr_pool_t *pool,
@@ -398,7 +573,11 @@ svn_ra_svn_parse_proplist(const apr_array_header_t *list,
/** Read a command response from the network and parse it as a tuple, using
* the format string notation from svn_ra_svn_parse_tuple().
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ * RA_SVN low-level functions are no longer considered public.
*/
+SVN_DEPRECATED
svn_error_t *
svn_ra_svn_read_cmd_response(svn_ra_svn_conn_t *conn,
apr_pool_t *pool,
@@ -417,7 +596,10 @@ svn_ra_svn_read_cmd_response(svn_ra_svn_conn_t *conn,
*
* @since New in 1.6.
*
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ * RA_SVN low-level functions are no longer considered public.
*/
+SVN_DEPRECATED
svn_error_t *
svn_ra_svn_handle_commands2(svn_ra_svn_conn_t *conn,
apr_pool_t *pool,
@@ -439,7 +621,11 @@ svn_ra_svn_handle_commands(svn_ra_svn_conn_t *conn,
/** Write a command over the network, using the same format string notation
* as svn_ra_svn_write_tuple().
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ * RA_SVN low-level functions are no longer considered public.
*/
+SVN_DEPRECATED
svn_error_t *
svn_ra_svn_write_cmd(svn_ra_svn_conn_t *conn,
apr_pool_t *pool,
@@ -450,75 +636,30 @@ svn_ra_svn_write_cmd(svn_ra_svn_conn_t *conn,
* same format string notation as svn_ra_svn_write_tuple(). Do not use
* partial tuples with this function; if you need to use partial
* tuples, just write out the "success" and argument tuple by hand.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ * RA_SVN low-level functions are no longer considered public.
*/
+SVN_DEPRECATED
svn_error_t *
svn_ra_svn_write_cmd_response(svn_ra_svn_conn_t *conn,
apr_pool_t *pool,
const char *fmt, ...);
-/** Write an unsuccessful command response over the network. */
+/** Write an unsuccessful command response over the network.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ * RA_SVN low-level functions are no longer considered public.
+ */
+SVN_DEPRECATED
svn_error_t *
svn_ra_svn_write_cmd_failure(svn_ra_svn_conn_t *conn,
apr_pool_t *pool,
svn_error_t *err);
-/** Set @a *editor and @a *edit_baton to an editor which will pass editing
- * operations over the network, using @a conn and @a pool.
- *
- * Upon successful completion of the edit, the editor will invoke @a callback
- * with @a callback_baton as an argument.
- */
-void
-svn_ra_svn_get_editor(const svn_delta_editor_t **editor,
- void **edit_baton,
- svn_ra_svn_conn_t *conn,
- apr_pool_t *pool,
- svn_ra_svn_edit_callback callback,
- void *callback_baton);
-
-/** Receive edit commands over the network and use them to drive @a editor
- * with @a edit_baton. On return, @a *aborted will be set if the edit was
- * aborted. The drive can be terminated with a finish-replay command only
- * if @a for_replay is TRUE.
- */
-svn_error_t *
-svn_ra_svn_drive_editor2(svn_ra_svn_conn_t *conn,
- apr_pool_t *pool,
- const svn_delta_editor_t *editor,
- void *edit_baton,
- svn_boolean_t *aborted,
- svn_boolean_t for_replay);
-
-/** Like svn_ra_svn_drive_editor2, but with @a for_replay always FALSE.
- */
-svn_error_t *
-svn_ra_svn_drive_editor(svn_ra_svn_conn_t *conn,
- apr_pool_t *pool,
- const svn_delta_editor_t *editor,
- void *edit_baton,
- svn_boolean_t *aborted);
-
-/** This function is only intended for use by svnserve.
- *
- * Perform CRAM-MD5 password authentication. On success, return
- * SVN_NO_ERROR with *user set to the username and *success set to
- * TRUE. On an error which can be reported to the client, report the
- * error and return SVN_NO_ERROR with *success set to FALSE. On
- * communications failure, return an error.
- */
-svn_error_t *
-svn_ra_svn_cram_server(svn_ra_svn_conn_t *conn,
- apr_pool_t *pool,
- svn_config_t *pwdb,
- const char **user,
- svn_boolean_t *success);
-
/**
- * Get libsvn_ra_svn version information.
- * @since New in 1.1.
+ * @}
*/
-const svn_version_t *
-svn_ra_svn_version(void);
#ifdef __cplusplus
}
diff --git a/subversion/include/svn_repos.h b/subversion/include/svn_repos.h
index 4a0fe32..6ffa842 100644
--- a/subversion/include/svn_repos.h
+++ b/subversion/include/svn_repos.h
@@ -69,8 +69,11 @@ enum svn_node_action
/** The different policies for processing the UUID in the dumpfile. */
enum svn_repos_load_uuid
{
+ /** only update uuid if the repos has no revisions. */
svn_repos_load_uuid_default,
+ /** never update uuid. */
svn_repos_load_uuid_ignore,
+ /** always update uuid. */
svn_repos_load_uuid_force
};
@@ -242,7 +245,13 @@ typedef enum svn_repos_notify_action_t
svn_repos_notify_recover_start,
/** Upgrade has started. */
- svn_repos_notify_upgrade_start
+ svn_repos_notify_upgrade_start,
+
+ /** A revision was skipped during loading. @since New in 1.8. */
+ svn_repos_notify_load_skipped_rev,
+
+ /** The structure of a revision is being verified. @since New in 1.8. */
+ svn_repos_notify_verify_rev_structure
} svn_repos_notify_action_t;
@@ -289,8 +298,7 @@ typedef struct svn_repos_notify_t
* the revision which just completed. */
svn_revnum_t revision;
- /** For #svn_repos_notify_warning, the warning object. Must be cleared
- by the consumer of the notification. */
+ /** For #svn_repos_notify_warning, the warning object. */
const char *warning_str;
svn_repos_notify_warning_t warning;
@@ -300,10 +308,10 @@ typedef struct svn_repos_notify_t
#svn_repos_notify_pack_shard_end_revprop, the shard processed. */
apr_int64_t shard;
- /** For #svn_repos_notify_load_committed_rev, the revision committed. */
+ /** For #svn_repos_notify_load_node_done, the revision committed. */
svn_revnum_t new_revision;
- /** For #svn_repos_notify_load_committed_rev, the source revision, if
+ /** For #svn_repos_notify_load_node_done, the source revision, if
different from @a new_revision, otherwise #SVN_INVALID_REVNUM.
For #svn_repos_notify_load_txn_start, the source revision. */
svn_revnum_t old_revision;
@@ -434,6 +442,11 @@ svn_repos_create(svn_repos_t **repos_p,
* It does *not* guarantee the most optimized repository state as a
* dump and subsequent load would.
*
+ * @note On some platforms the exclusive lock does not exclude other
+ * threads in the same process so this function should only be called
+ * by a single threaded process, or by a multi-threaded process when
+ * no other threads are accessing the repository.
+ *
* @since New in 1.7.
*/
svn_error_t *
@@ -483,6 +496,8 @@ svn_repos_has_capability(svn_repos_t *repos,
const char *capability,
apr_pool_t *pool);
+/** @} */
+
/**
* The capability of doing the right thing with merge-tracking
* information, both storing it and responding to queries about it.
@@ -497,6 +512,8 @@ svn_repos_has_capability(svn_repos_t *repos,
* colons for their own reasons. While this RA limitation has no
* direct impact on repository capabilities, there's no reason to be
* gratuitously different either.
+ *
+ * If you add a capability, update svn_repos_capabilities().
*/
@@ -513,8 +530,30 @@ svn_repos_fs(svn_repos_t *repos);
* source filesystem as part of the copy operation; currently, this
* means deleting copied, unused logfiles for a Berkeley DB source
* repository.
+ *
+ * If @a incremental is TRUE, make an effort to not re-copy information
+ * already present in the destination. If incremental hotcopy is not
+ * implemented by the filesystem backend, raise SVN_ERR_UNSUPPORTED_FEATURE.
+ *
+ * @since New in 1.8.
*/
svn_error_t *
+svn_repos_hotcopy2(const char *src_path,
+ const char *dst_path,
+ svn_boolean_t clean_logs,
+ svn_boolean_t incremental,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *pool);
+
+/**
+ * Like svn_repos_hotcopy2(), but with @a incremental always passed as
+ * @c FALSE and without cancellation support.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ */
+SVN_DEPRECATED
+svn_error_t *
svn_repos_hotcopy(const char *src_path,
const char *dst_path,
svn_boolean_t clean_logs,
@@ -628,6 +667,34 @@ svn_error_t *
svn_repos_recover(const char *path,
apr_pool_t *pool);
+/**
+ * Callback for svn_repos_freeze.
+ *
+ * @since New in 1.8.
+ */
+typedef svn_error_t *(*svn_repos_freeze_func_t)(void *baton, apr_pool_t *pool);
+
+/**
+ * Take an exclusive lock on each of the repositories in @a paths to
+ * prevent commits and then while holding all the locks invoke @a
+ * freeze_func passing @a freeze_baton. Each repository may be readable by
+ * Subversion while frozen, or may be unreadable, depending on which
+ * FS backend the repository uses. Repositories are locked in the
+ * order in which they are specified in the array.
+ *
+ * @note On some platforms the exclusive lock does not exclude other
+ * threads in the same process so this function should only be called
+ * by a single threaded process, or by a multi-threaded process when
+ * no other threads are accessing the repositories.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_repos_freeze(apr_array_header_t *paths,
+ svn_repos_freeze_func_t freeze_func,
+ void *freeze_baton,
+ apr_pool_t *pool);
+
/** This function is a wrapper around svn_fs_berkeley_logfiles(),
* returning log file paths relative to the root of the repository.
*
@@ -739,6 +806,27 @@ const char *
svn_repos_post_unlock_hook(svn_repos_t *repos,
apr_pool_t *pool);
+/** Specify that Subversion should consult the configuration file
+ * located at @a hooks_env_path to determine how to setup the
+ * environment for hook scripts invoked for the repository @a repos.
+ * As a special case, if @a hooks_env_path is @c NULL, look for the
+ * file in its default location within the repository disk structure.
+ * If @a hooks_env_path is not absolute, it specifies a path relative
+ * to the parent of the file's default location.
+ *
+ * Use @a scratch_pool for temporary allocations.
+ *
+ * If this function is not called, or if the specified configuration
+ * file does not define any environment variables, hooks will run in
+ * an empty environment.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_repos_hooks_setenv(svn_repos_t *repos,
+ const char *hooks_env_path,
+ apr_pool_t *scratch_pool);
+
/** @} */
/* ---------------------------------------------------------------*/
@@ -783,6 +871,18 @@ svn_repos_post_unlock_hook(svn_repos_t *repos,
* avoid sending data through @a editor/@a edit_baton which is not
* authorized for transmission.
*
+ * @a zero_copy_limit controls the maximum size (in bytes) at which
+ * data blocks may be sent using the zero-copy code path. On that
+ * path, a number of in-memory copy operations have been eliminated to
+ * maximize throughput. However, until the whole block has been
+ * pushed to the network stack, other clients block, so be careful
+ * when using larger values here. Pass 0 for @a zero_copy_limit to
+ * disable this optimization altogether.
+ *
+ * @a note Never activate this optimization if @a editor might access
+ * any FSFS data structures (and, hence, caches). So, it is basically
+ * safe for networked editors only.
+ *
* All allocation for the context and collected state will occur in
* @a pool.
*
@@ -815,8 +915,34 @@ svn_repos_post_unlock_hook(svn_repos_t *repos,
* than or equal to the depth of the working copy, then the editor
* operations will affect only paths at or above @a depth.
*
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_repos_begin_report3(void **report_baton,
+ svn_revnum_t revnum,
+ svn_repos_t *repos,
+ const char *fs_base,
+ const char *target,
+ const char *tgt_path,
+ svn_boolean_t text_deltas,
+ svn_depth_t depth,
+ svn_boolean_t ignore_ancestry,
+ svn_boolean_t send_copyfrom_args,
+ const svn_delta_editor_t *editor,
+ void *edit_baton,
+ svn_repos_authz_func_t authz_read_func,
+ void *authz_read_baton,
+ apr_size_t zero_copy_limit,
+ apr_pool_t *pool);
+
+/**
+ * The same as svn_repos_begin_report3(), but with @a zero_copy_limit
+ * always passed as 0.
+ *
* @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_repos_begin_report2(void **report_baton,
svn_revnum_t revnum,
@@ -867,7 +993,7 @@ svn_repos_begin_report(void **report_baton,
/**
- * Given a @a report_baton constructed by svn_repos_begin_report2(),
+ * Given a @a report_baton constructed by svn_repos_begin_report3(),
* record the presence of @a path, at @a revision with depth @a depth,
* in the current tree.
*
@@ -938,7 +1064,7 @@ svn_repos_set_path(void *report_baton,
apr_pool_t *pool);
/**
- * Given a @a report_baton constructed by svn_repos_begin_report2(),
+ * Given a @a report_baton constructed by svn_repos_begin_report3(),
* record the presence of @a path in the current tree, containing the contents
* of @a link_path at @a revision with depth @a depth.
*
@@ -1004,7 +1130,7 @@ svn_repos_link_path(void *report_baton,
svn_boolean_t start_empty,
apr_pool_t *pool);
-/** Given a @a report_baton constructed by svn_repos_begin_report2(),
+/** Given a @a report_baton constructed by svn_repos_begin_report3(),
* record the non-existence of @a path in the current tree.
*
* @a path may not be underneath a path on which svn_repos_set_path3()
@@ -1020,7 +1146,7 @@ svn_repos_delete_path(void *report_baton,
const char *path,
apr_pool_t *pool);
-/** Given a @a report_baton constructed by svn_repos_begin_report2(),
+/** Given a @a report_baton constructed by svn_repos_begin_report3(),
* finish the report and drive the editor as specified when the report
* baton was constructed.
*
@@ -1037,7 +1163,7 @@ svn_repos_finish_report(void *report_baton,
apr_pool_t *pool);
-/** Given a @a report_baton constructed by svn_repos_begin_report2(),
+/** Given a @a report_baton constructed by svn_repos_begin_report3(),
* abort the report. This function can be called anytime before
* svn_repos_finish_report() is called.
*
@@ -1111,13 +1237,15 @@ svn_repos_abort_report(void *report_baton,
* the total size of the delta.
*
* ### svn_repos_dir_delta2 is mostly superseded by the reporter
- * ### functionality (svn_repos_begin_report2 and friends).
+ * ### functionality (svn_repos_begin_report3 and friends).
* ### svn_repos_dir_delta2 does allow the roots to be transaction
* ### roots rather than just revision roots, and it has the
* ### entry_props flag. Almost all of Subversion's own code uses the
* ### reporter instead; there are some stray references to the
* ### svn_repos_dir_delta[2] in comments which should probably
* ### actually refer to the reporter.
+ *
+ * @since New in 1.5.
*/
svn_error_t *
svn_repos_dir_delta2(svn_fs_root_t *src_root,
@@ -1229,7 +1357,8 @@ svn_repos_replay(svn_fs_root_t *root,
*
* @a repos is a previously opened repository. @a repos_url is the
* decoded URL to the base of the repository, and is used to check
- * copyfrom paths. @a txn is a filesystem transaction object to use
+ * copyfrom paths. copyfrom paths passed to the editor must be full,
+ * URI-encoded, URLs. @a txn is a filesystem transaction object to use
* during the commit, or @c NULL to indicate that this function should
* create (and fully manage) a new transaction.
*
@@ -1248,14 +1377,14 @@ svn_repos_replay(svn_fs_root_t *root,
*
* Calling @a (*editor)->close_edit completes the commit.
*
- * If @a callback is non-NULL, then before @c close_edit returns (but
+ * If @a commit_callback is non-NULL, then before @c close_edit returns (but
* after the commit has succeeded) @c close_edit will invoke
- * @a callback with a filled-in #svn_commit_info_t *, @a callback_baton,
- * and @a pool or some subpool thereof as arguments. If @a callback
+ * @a commit_callback with a filled-in #svn_commit_info_t *, @a commit_baton,
+ * and @a pool or some subpool thereof as arguments. If @a commit_callback
* returns an error, that error will be returned from @c close_edit,
* otherwise if there was a post-commit hook failure, then that error
* will be returned with code SVN_ERR_REPOS_POST_COMMIT_HOOK_FAILED.
- * (Note that prior to Subversion 1.6, @a callback cannot be NULL; if
+ * (Note that prior to Subversion 1.6, @a commit_callback cannot be NULL; if
* you don't need a callback, pass a dummy function.)
*
* Calling @a (*editor)->abort_edit aborts the commit, and will also
@@ -1276,8 +1405,8 @@ svn_repos_get_commit_editor5(const svn_delta_editor_t **editor,
const char *repos_url,
const char *base_path,
apr_hash_t *revprop_table,
- svn_commit_callback2_t callback,
- void *callback_baton,
+ svn_commit_callback2_t commit_callback,
+ void *commit_baton,
svn_repos_authz_callback_t authz_callback,
void *authz_baton,
apr_pool_t *pool);
@@ -1302,8 +1431,8 @@ svn_repos_get_commit_editor4(const svn_delta_editor_t **editor,
const char *base_path,
const char *user,
const char *log_msg,
- svn_commit_callback2_t callback,
- void *callback_baton,
+ svn_commit_callback2_t commit_callback,
+ void *commit_baton,
svn_repos_authz_callback_t authz_callback,
void *authz_baton,
apr_pool_t *pool);
@@ -1628,8 +1757,9 @@ svn_repos_node_location_segments(svn_repos_t *repos,
* filesystem, as limited by @a paths. In the latter case those revisions
* are skipped and @a receiver is not invoked.
*
- * If @a revprops is NULL, retrieve all revprops; else, retrieve only the
- * revprops named in the array (i.e. retrieve none if the array is empty).
+ * If @a revprops is NULL, retrieve all revision properties; else, retrieve
+ * only the revision properties named by the (const char *) array elements
+ * (i.e. retrieve none if the array is empty).
*
* If any invocation of @a receiver returns error, return that error
* immediately and without wrapping it.
@@ -1743,6 +1873,8 @@ svn_repos_get_logs(svn_repos_t *repos,
* set @a *catalog to a catalog of this mergeinfo. @a *catalog will
* never be @c NULL but may be empty.
*
+ * The paths in @a paths, and the keys of @a catalog, start with '/'.
+ *
* @a inherit indicates whether explicit, explicit or inherited, or
* only inherited mergeinfo for @a paths is fetched.
*
@@ -1810,6 +1942,10 @@ svn_repos_fs_get_mergeinfo(svn_mergeinfo_catalog_t *catalog,
* If @a include_merged_revisions is TRUE, revisions which a included as a
* result of a merge between @a start and @a end will be included.
*
+ * Since Subversion 1.8 this function has been enabled to support reversion
+ * the revision range for @a include_merged_revision @c FALSE reporting by
+ * switching @a start with @a end.
+ *
* @since New in 1.5.
*/
svn_error_t *
@@ -1932,7 +2068,11 @@ svn_repos_fs_begin_txn_for_commit(svn_fs_txn_t **txn_p,
*
* ### Someday: before a txn is created, some kind of read-hook could
* be called here.
+ *
+ * @note This function was never fully implemented, nor used. Ignore it.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_repos_fs_begin_txn_for_update(svn_fs_txn_t **txn_p,
svn_repos_t *repos,
@@ -1941,6 +2081,8 @@ svn_repos_fs_begin_txn_for_update(svn_fs_txn_t **txn_p,
apr_pool_t *pool);
+/** @} */
+
/** @defgroup svn_repos_fs_locks Repository lock wrappers
* @{
*/
@@ -2238,7 +2380,6 @@ svn_repos_fs_change_txn_props(svn_fs_txn_t *txn,
const apr_array_header_t *props,
apr_pool_t *pool);
-/** @} */
/* ---------------------------------------------------------------*/
@@ -2248,7 +2389,7 @@ svn_repos_fs_change_txn_props(svn_fs_txn_t *txn,
* @{
*
* As it turns out, the svn_repos_replay2(), svn_repos_dir_delta2() and
- * svn_repos_begin_report2() interfaces can be extremely useful for
+ * svn_repos_begin_report3() interfaces can be extremely useful for
* examining the repository, or more exactly, changes to the repository.
* These drivers allows for differences between two trees to be
* described using an editor.
@@ -2301,7 +2442,7 @@ typedef struct svn_repos_node_t
* repos's filesystem.
*
* The editor can also be driven by svn_repos_dir_delta2() or
- * svn_repos_begin_report2(), but unless you have special needs,
+ * svn_repos_begin_report3(), but unless you have special needs,
* svn_repos_replay2() is preferred.
*
* Invoke svn_repos_node_from_baton() on @a edit_baton to obtain the root
@@ -2359,6 +2500,7 @@ svn_repos_node_from_baton(void *edit_baton);
/* The RFC822-style headers in our dumpfile format. */
#define SVN_REPOS_DUMPFILE_MAGIC_HEADER "SVN-fs-dump-format-version"
#define SVN_REPOS_DUMPFILE_FORMAT_VERSION 3
+#define SVN_REPOS_DUMPFILE_FORMAT_VERSION_DELTAS 3
#define SVN_REPOS_DUMPFILE_UUID "UUID"
#define SVN_REPOS_DUMPFILE_CONTENT_LENGTH "Content-length"
@@ -2450,7 +2592,7 @@ svn_repos_verify_fs(svn_repos_t *repos,
* revision up through @a end_rev. Use @a pool for all allocation. If
* non-@c NULL, send feedback to @a feedback_stream. If @a dumpstream is
* @c NULL, this is effectively a primitive verify. It is not complete,
- * however; see svn_fs_verify instead.
+ * however; svn_repos_verify_fs2() and svn_fs_verify().
*
* If @a start_rev is #SVN_INVALID_REVNUM, then start dumping at revision
* 0. If @a end_rev is #SVN_INVALID_REVNUM, then dump through the @c HEAD
@@ -2546,6 +2688,13 @@ svn_repos_dump_fs(svn_repos_t *repos,
* If the dumpstream contains no UUID, then @a uuid_action is
* ignored and the repository UUID is not touched.
*
+ * @a start_rev and @a end_rev act as filters, the lower and upper
+ * (inclusive) range values of revisions in @a dumpstream which will
+ * be loaded. Either both of these values are #SVN_INVALID_REVNUM (in
+ * which case no revision-based filtering occurs at all), or both are
+ * valid revisions (where @a start_rev is older than or equivalent to
+ * @a end_rev).
+ *
* If @a parent_dir is not NULL, then the parser will reparent all the
* loaded nodes, from root to @a parent_dir. The directory @a parent_dir
* must be an existing directory in the repository.
@@ -2567,8 +2716,31 @@ svn_repos_dump_fs(svn_repos_t *repos,
* @a cancel_baton as argument to see if the client wishes to cancel
* the load.
*
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_repos_load_fs4(svn_repos_t *repos,
+ svn_stream_t *dumpstream,
+ svn_revnum_t start_rev,
+ svn_revnum_t end_rev,
+ enum svn_repos_load_uuid uuid_action,
+ const char *parent_dir,
+ svn_boolean_t use_pre_commit_hook,
+ svn_boolean_t use_post_commit_hook,
+ svn_boolean_t validate_props,
+ svn_repos_notify_func_t notify_func,
+ void *notify_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *pool);
+
+/** Similar to svn_repos_load_fs4(), but with @a start_rev and @a
+ * end_rev always passed as #SVN_INVALID_REVNUM.
+ *
* @since New in 1.7.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_repos_load_fs3(svn_repos_t *repos,
svn_stream_t *dumpstream,
@@ -2623,21 +2795,17 @@ svn_repos_load_fs(svn_repos_t *repos,
/**
- * A vtable that is driven by svn_repos_parse_dumpstream2().
+ * A vtable that is driven by svn_repos_parse_dumpstream3().
*
- * @since New in 1.1.
+ * @since New in 1.8.
*/
-typedef struct svn_repos_parse_fns2_t
+typedef struct svn_repos_parse_fns3_t
{
- /** The parser has discovered a new revision record within the
- * parsing session represented by @a parse_baton. All the headers are
- * placed in @a headers (allocated in @a pool), which maps <tt>const
- * char *</tt> header-name ==> <tt>const char *</tt> header-value.
- * The @a revision_baton received back (also allocated in @a pool)
- * represents the revision.
+ /** The parser has discovered a new "magic header" record within the
+ * parsing session represented by @a parse_baton. The dump-format
+ * version number is @a version.
*/
- svn_error_t *(*new_revision_record)(void **revision_baton,
- apr_hash_t *headers,
+ svn_error_t *(*magic_header_record)(int version,
void *parse_baton,
apr_pool_t *pool);
@@ -2649,6 +2817,18 @@ typedef struct svn_repos_parse_fns2_t
void *parse_baton,
apr_pool_t *pool);
+ /** The parser has discovered a new revision record within the
+ * parsing session represented by @a parse_baton. All the headers are
+ * placed in @a headers (allocated in @a pool), which maps <tt>const
+ * char *</tt> header-name ==> <tt>const char *</tt> header-value.
+ * The @a revision_baton received back (also allocated in @a pool)
+ * represents the revision.
+ */
+ svn_error_t *(*new_revision_record)(void **revision_baton,
+ apr_hash_t *headers,
+ void *parse_baton,
+ apr_pool_t *pool);
+
/** The parser has discovered a new node record within the current
* revision represented by @a revision_baton. All the headers are
* placed in @a headers (as with @c new_revision_record), allocated in
@@ -2711,22 +2891,28 @@ typedef struct svn_repos_parse_fns2_t
*/
svn_error_t *(*close_revision)(void *revision_baton);
-} svn_repos_parse_fns2_t;
-
-/** @deprecated Provided for backward compatibility with the 1.2 API. */
-typedef svn_repos_parse_fns2_t svn_repos_parser_fns2_t;
+} svn_repos_parse_fns3_t;
/**
* Read and parse dumpfile-formatted @a stream, calling callbacks in
* @a parse_fns/@a parse_baton, and using @a pool for allocations.
*
+ * If @a deltas_are_text is @c TRUE, handle text-deltas with the @a
+ * set_fulltext callback. This is useful when manipulating a dump
+ * stream without loading it. Otherwise handle text-deltas with the
+ * @a apply_textdelta callback.
+ *
* If @a cancel_func is not @c NULL, it is called periodically with
* @a cancel_baton as argument to see if the client wishes to cancel
* the dump.
*
* This parser has built-in knowledge of the dumpfile format, but only
- * in a general sense:
+ * in a limited sense:
+ *
+ * * it recognizes the "magic" format-version header.
+ *
+ * * it recognizes the UUID header.
*
* * it recognizes revision and node records by looking for either
* a REVISION_NUMBER or NODE_PATH headers.
@@ -2738,14 +2924,16 @@ typedef svn_repos_parse_fns2_t svn_repos_parser_fns2_t;
* and text, and pass the pieces to the vtable.
*
* This is enough knowledge to make it easy on vtable implementors,
- * but still allow expansion of the format: most headers are ignored.
+ * but still allow expansion of the format: most headers do not have
+ * to be handled explicitly.
*
- * @since New in 1.1.
+ * @since New in 1.8.
*/
svn_error_t *
-svn_repos_parse_dumpstream2(svn_stream_t *stream,
- const svn_repos_parse_fns2_t *parse_fns,
+svn_repos_parse_dumpstream3(svn_stream_t *stream,
+ const svn_repos_parse_fns3_t *parse_fns,
void *parse_baton,
+ svn_boolean_t deltas_are_text,
svn_cancel_func_t cancel_func,
void *cancel_baton,
apr_pool_t *pool);
@@ -2757,6 +2945,13 @@ svn_repos_parse_dumpstream2(svn_stream_t *stream,
* UUID records in a manner consistent with @a uuid_action. Use @a pool
* to operate on the fs.
*
+ * @a start_rev and @a end_rev act as filters, the lower and upper
+ * (inclusive) range values of revisions in @a dumpstream which will
+ * be loaded. Either both of these values are #SVN_INVALID_REVNUM (in
+ * which case no revision-based filtering occurs at all), or both are
+ * valid revisions (where @a start_rev is older than or equivalent to
+ * @a end_rev).
+ *
* If @a use_history is set, then the parser will require relative
* 'copyfrom' history to exist in the repository when it encounters
* nodes that are added-with-history.
@@ -2769,14 +2964,14 @@ svn_repos_parse_dumpstream2(svn_stream_t *stream,
* loaded nodes, from root to @a parent_dir. The directory @a parent_dir
* must be an existing directory in the repository.
*
- * Print all parsing feedback to @a outstream (if non-@c NULL).
- *
- * @since New in 1.7.
+ * @since New in 1.8.
*/
svn_error_t *
-svn_repos_get_fs_build_parser3(const svn_repos_parse_fns2_t **parser,
+svn_repos_get_fs_build_parser4(const svn_repos_parse_fns3_t **parser,
void **parse_baton,
svn_repos_t *repos,
+ svn_revnum_t start_rev,
+ svn_revnum_t end_rev,
svn_boolean_t use_history,
svn_boolean_t validate_props,
enum svn_repos_load_uuid uuid_action,
@@ -2785,24 +2980,59 @@ svn_repos_get_fs_build_parser3(const svn_repos_parse_fns2_t **parser,
void *notify_baton,
apr_pool_t *pool);
+
/**
- * Similar to svn_repos_get_fs_build_parser3(), but with @a outstream
- * in place if a #svn_repos_notify_func_t and baton and with
- * @a validate_props always FALSE.
+ * A vtable that is driven by svn_repos_parse_dumpstream2().
+ * Similar to #svn_repos_parse_fns3_t except that it lacks
+ * the delete_node_property and apply_textdelta callbacks.
*
- * @since New in 1.1.
- * @deprecated Provided for backward compatibility with the 1.6 API.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
-SVN_DEPRECATED
-svn_error_t *
-svn_repos_get_fs_build_parser2(const svn_repos_parse_fns2_t **parser,
- void **parse_baton,
- svn_repos_t *repos,
- svn_boolean_t use_history,
- enum svn_repos_load_uuid uuid_action,
- svn_stream_t *outstream,
- const char *parent_dir,
- apr_pool_t *pool);
+typedef struct svn_repos_parse_fns2_t
+{
+ /** Same as #svn_repos_parse_fns3_t.new_revision_record. */
+ svn_error_t *(*new_revision_record)(void **revision_baton,
+ apr_hash_t *headers,
+ void *parse_baton,
+ apr_pool_t *pool);
+ /** Same as #svn_repos_parse_fns3_t.uuid_record. */
+ svn_error_t *(*uuid_record)(const char *uuid,
+ void *parse_baton,
+ apr_pool_t *pool);
+ /** Same as #svn_repos_parse_fns3_t.new_node_record. */
+ svn_error_t *(*new_node_record)(void **node_baton,
+ apr_hash_t *headers,
+ void *revision_baton,
+ apr_pool_t *pool);
+ /** Same as #svn_repos_parse_fns3_t.set_revision_property. */
+ svn_error_t *(*set_revision_property)(void *revision_baton,
+ const char *name,
+ const svn_string_t *value);
+ /** Same as #svn_repos_parse_fns3_t.set_node_property. */
+ svn_error_t *(*set_node_property)(void *node_baton,
+ const char *name,
+ const svn_string_t *value);
+ /** Same as #svn_repos_parse_fns3_t.delete_node_property. */
+ svn_error_t *(*delete_node_property)(void *node_baton,
+ const char *name);
+ /** Same as #svn_repos_parse_fns3_t.remove_node_props. */
+ svn_error_t *(*remove_node_props)(void *node_baton);
+ /** Same as #svn_repos_parse_fns3_t.set_fulltext. */
+ svn_error_t *(*set_fulltext)(svn_stream_t **stream,
+ void *node_baton);
+ /** Same as #svn_repos_parse_fns3_t.apply_textdelta. */
+ svn_error_t *(*apply_textdelta)(svn_txdelta_window_handler_t *handler,
+ void **handler_baton,
+ void *node_baton);
+ /** Same as #svn_repos_parse_fns3_t.close_node. */
+ svn_error_t *(*close_node)(void *node_baton);
+ /** Same as #svn_repos_parse_fns3_t.close_revision. */
+ svn_error_t *(*close_revision)(void *revision_baton);
+} svn_repos_parse_fns2_t;
+
+/** @deprecated Provided for backward compatibility with the 1.7 API. */
+typedef svn_repos_parse_fns2_t svn_repos_parser_fns2_t;
+
/**
* A vtable that is driven by svn_repos_parse_dumpstream().
@@ -2848,6 +3078,21 @@ typedef struct svn_repos_parse_fns_t
/**
+ * Similar to svn_repos_parse_dumpstream3(), but uses the more limited
+ * #svn_repos_parser_fns2_t vtable type.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ */
+SVN_DEPRECATED
+svn_error_t *
+svn_repos_parse_dumpstream2(svn_stream_t *stream,
+ const svn_repos_parser_fns2_t *parse_fns,
+ void *parse_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *pool);
+
+/**
* Similar to svn_repos_parse_dumpstream2(), but uses the more limited
* #svn_repos_parser_fns_t vtable type.
*
@@ -2862,6 +3107,45 @@ svn_repos_parse_dumpstream(svn_stream_t *stream,
void *cancel_baton,
apr_pool_t *pool);
+/**
+ * Similar to svn_repos_get_fs_build_parser4(), but with @a start_rev
+ * and @a end_rev always passed as #SVN_INVALID_REVNUM, and yielding
+ * the more limited svn_repos_parse_fns2_t.
+ *
+ * @since New in 1.7.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ */
+SVN_DEPRECATED
+svn_error_t *
+svn_repos_get_fs_build_parser3(const svn_repos_parse_fns2_t **parser,
+ void **parse_baton,
+ svn_repos_t *repos,
+ svn_boolean_t use_history,
+ svn_boolean_t validate_props,
+ enum svn_repos_load_uuid uuid_action,
+ const char *parent_dir,
+ svn_repos_notify_func_t notify_func,
+ void *notify_baton,
+ apr_pool_t *pool);
+
+/**
+ * Similar to svn_repos_get_fs_build_parser3(), but with @a outstream
+ * in place if a #svn_repos_notify_func_t and baton and with
+ * @a validate_props always FALSE.
+ *
+ * @since New in 1.1.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ */
+SVN_DEPRECATED
+svn_error_t *
+svn_repos_get_fs_build_parser2(const svn_repos_parse_fns2_t **parser,
+ void **parse_baton,
+ svn_repos_t *repos,
+ svn_boolean_t use_history,
+ enum svn_repos_load_uuid uuid_action,
+ svn_stream_t *outstream,
+ const char *parent_dir,
+ apr_pool_t *pool);
/**
* Similar to svn_repos_get_fs_build_parser2(), but yields the more
@@ -2889,16 +3173,37 @@ svn_repos_get_fs_build_parser(const svn_repos_parser_fns_t **parser,
*/
typedef struct svn_authz_t svn_authz_t;
-/** Read authz configuration data from @a file (a file or registry
- * path) into @a *authz_p, allocated in @a pool.
+/**
+ * Read authz configuration data from @a path (a dirent, an absolute file url
+ * or a registry path) into @a *authz_p, allocated in @a pool.
+ *
+ * If @a groups_path (a dirent, an absolute file url, or a registry path) is
+ * set, use the global groups parsed from it.
*
- * If @a file is not a valid authz rule file, then return
- * SVN_AUTHZ_INVALID_CONFIG. The contents of @a *authz_p is then
- * undefined. If @a must_exist is TRUE, a missing authz file is also
- * an error.
+ * If @a path or @a groups_path is not a valid authz rule file, then return
+ * #SVN_ERR_AUTHZ_INVALID_CONFIG. The contents of @a *authz_p is then
+ * undefined. If @a must_exist is TRUE, a missing authz or groups file
+ * is also an error other than #SVN_ERR_AUTHZ_INVALID_CONFIG (exact error
+ * depends on the access type).
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_repos_authz_read2(svn_authz_t **authz_p,
+ const char *path,
+ const char *groups_path,
+ svn_boolean_t must_exist,
+ apr_pool_t *pool);
+
+
+/**
+ * Similar to svn_repos_authz_read2(), but with @a groups_path and @a
+ * repos_root always passed as @c NULL.
*
* @since New in 1.3.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_repos_authz_read(svn_authz_t **authz_p,
const char *file,
@@ -2906,6 +3211,20 @@ svn_repos_authz_read(svn_authz_t **authz_p,
apr_pool_t *pool);
/**
+ * Read authz configuration data from @a stream into @a *authz_p,
+ * allocated in @a pool.
+ *
+ * If @a groups_stream is set, use the global groups parsed from it.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_repos_authz_parse(svn_authz_t **authz_p,
+ svn_stream_t *stream,
+ svn_stream_t *groups_stream,
+ apr_pool_t *pool);
+
+/**
* Check whether @a user can access @a path in the repository @a
* repos_name with the @a required_access. @a authz lists the ACLs to
* check against. Set @a *access_granted to indicate if the requested
@@ -2919,6 +3238,10 @@ svn_repos_authz_read(svn_authz_t **authz_p,
* For compatibility with 1.6, and earlier, @a repos_name can be NULL
* in which case it is equivalent to a @a repos_name of "".
*
+ * @note Presently, @a repos_name must byte-for-byte match the repos_name
+ * specified in the authz file; it is treated as an opaque string, and not
+ * as a dirent.
+ *
* @since New in 1.3.
*/
svn_error_t *
@@ -2988,8 +3311,14 @@ svn_repos_authz_check_access(svn_authz_t *authz,
*/
typedef enum svn_repos_revision_access_level_t
{
+ /** no access allowed to the revision properties and all changed-paths
+ * information. */
svn_repos_revision_access_none,
+ /** access granted to some (svn:date and svn:author) revision properties and
+ * changed-paths information on paths the read has access to. */
svn_repos_revision_access_partial,
+ /** access granted to all revision properites and changed-paths
+ * information. */
svn_repos_revision_access_full
}
svn_repos_revision_access_level_t;
@@ -3013,6 +3342,35 @@ svn_repos_check_revision_access(svn_repos_revision_access_level_t *access_level,
void *authz_read_baton,
apr_pool_t *pool);
+/**
+ * Set @a *inherited_values to a depth-first ordered array of
+ * #svn_prop_inherited_item_t * structures (the path_or_url members of
+ * which are relative filesystem paths) representing the properties
+ * inherited by @a path in @a root. If no properties are inherited,
+ * then set @a *inherited_values to an empty array.
+ *
+ * if @a propname is NULL then retrieve all explicit and/or inherited
+ * properties. Otherwise retrieve only the properties named @a propname.
+ *
+ * If optional @a authz_read_func is non-NULL, then use this function
+ * (along with optional @a authz_read_baton) to check the readability
+ * of each parent path from which properties are inherited. Silently omit
+ * properties for unreadable parent paths.
+ *
+ * Allocate @a *inherited_props in @a result_pool. Use @a scratch_pool for
+ * temporary allocations.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_repos_fs_get_inherited_props(apr_array_header_t **inherited_props,
+ svn_fs_root_t *root,
+ const char *path,
+ const char *propname,
+ svn_repos_authz_func_t authz_read_func,
+ void *authz_read_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
/** Capabilities **/
@@ -3040,7 +3398,6 @@ svn_repos_remember_client_capabilities(svn_repos_t *repos,
const apr_array_header_t *capabilities);
-
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/include/svn_sorts.h b/subversion/include/svn_sorts.h
index 5f4cd4c..b9e05e5 100644
--- a/subversion/include/svn_sorts.h
+++ b/subversion/include/svn_sorts.h
@@ -80,6 +80,13 @@ typedef struct svn_sort__item_t {
apr_array_header_t *array;
array = svn_sort__hash(hsh, svn_sort_compare_items_as_paths, pool);
@endcode
+ *
+ * This function works like svn_sort_compare_items_lexically() except that it
+ * orders children in subdirectories directly after their parents. This allows
+ * using the given ordering for a depth first walk, but at a performance
+ * penalty. Code that doesn't need this special behavior for children, e.g. when
+ * sorting files at a single directory level should use
+ * svn_sort_compare_items_lexically() instead.
*/
int
svn_sort_compare_items_as_paths(const svn_sort__item_t *a,
@@ -112,9 +119,9 @@ svn_sort_compare_revisions(const void *a,
/**
- * Compare two @c const char * paths, returning an integer greater
- * than, equal to, or less than 0, using the same comparison rules as
- * are used by svn_path_compare_paths().
+ * Compare two @c const char * paths, @a *a and @a *b, returning an
+ * integer greater than, equal to, or less than 0, using the same
+ * comparison rules as are used by svn_path_compare_paths().
*
* This function is compatible for use with qsort().
*
@@ -125,13 +132,13 @@ svn_sort_compare_paths(const void *a,
const void *b);
/**
- * Compare two @c svn_merge_range_t *'s, returning an integer greater
- * than, equal to, or less than 0 if the first range is greater than,
- * equal to, or less than, the second range.
+ * Compare two @c svn_merge_range_t *'s, @a *a and @a *b, returning an
+ * integer greater than, equal to, or less than 0 if the first range is
+ * greater than, equal to, or less than, the second range.
*
* Both @c svn_merge_range_t *'s must describe forward merge ranges.
*
- * If @a a and @a b intersect then the range with the lower start revision
+ * If @a *a and @a *b intersect then the range with the lower start revision
* is considered the lesser range. If the ranges' start revisions are
* equal then the range with the lower end revision is considered the
* lesser range.
@@ -145,7 +152,7 @@ svn_sort_compare_ranges(const void *a,
/** Sort @a ht according to its keys, return an @c apr_array_header_t
* containing @c svn_sort__item_t structures holding those keys and values
* (i.e. for each @c svn_sort__item_t @a item in the returned array,
- * @a item->key and @a item->size are the hash key, and @a item->data points to
+ * @a item->key and @a item->size are the hash key, and @a item->value points to
* the hash value).
*
* Storage is shared with the original hash, not copied.
@@ -164,34 +171,51 @@ svn_sort__hash(apr_hash_t *ht,
const svn_sort__item_t *),
apr_pool_t *pool);
-/* Return the lowest index at which the element *KEY should be inserted into
- the array ARRAY, according to the ordering defined by COMPARE_FUNC.
- The array must already be sorted in the ordering defined by COMPARE_FUNC.
- COMPARE_FUNC is defined as for the C stdlib function bsearch(). */
+/* Return the lowest index at which the element @a *key should be inserted into
+ * the array @a array, according to the ordering defined by @a compare_func.
+ * The array must already be sorted in the ordering defined by @a compare_func.
+ * @a compare_func is defined as for the C stdlib function bsearch().
+ *
+ * @note Private. For use by Subversion's own code only.
+ */
int
svn_sort__bsearch_lower_bound(const void *key,
const apr_array_header_t *array,
int (*compare_func)(const void *, const void *));
-/* Insert a shallow copy of *NEW_ELEMENT into the array ARRAY at the index
- INSERT_INDEX, growing the array and shuffling existing elements along to
- make room. */
+/* Insert a shallow copy of @a *new_element into the array @a array at the index
+ * @a insert_index, growing the array and shuffling existing elements along to
+ * make room.
+ *
+ * @note Private. For use by Subversion's own code only.
+ */
void
svn_sort__array_insert(const void *new_element,
apr_array_header_t *array,
int insert_index);
-/* Remove ELEMENTS_TO_DELETE elements starting at DELETE_INDEX from the
- array ARR. If DELETE_INDEX is not a valid element of ARR,
- ELEMENTS_TO_DELETE is not greater than zero, or
- DELETE_INDEX + ELEMENTS_TO_DELETE is greater than ARR->NELTS, then do
- nothing. */
+/* Remove @a elements_to_delete elements starting at @a delete_index from the
+ * array @a arr. If @a delete_index is not a valid element of @a arr,
+ * @a elements_to_delete is not greater than zero, or
+ * @a delete_index + @a elements_to_delete is greater than @a arr->nelts,
+ * then do nothing.
+ *
+ * @note Private. For use by Subversion's own code only.
+ */
void
svn_sort__array_delete(apr_array_header_t *arr,
int delete_index,
int elements_to_delete);
+/* Reverse the order of elements in @a array, in place.
+ *
+ * @note Private. For use by Subversion's own code only.
+ */
+void
+svn_sort__array_reverse(apr_array_header_t *array,
+ apr_pool_t *scratch_pool);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/include/svn_string.h b/subversion/include/svn_string.h
index 3df4ae0..d8ce02b 100644
--- a/subversion/include/svn_string.h
+++ b/subversion/include/svn_string.h
@@ -54,13 +54,13 @@
*
* Note that an @c svn_string(buf)_t may contain binary data,
* which means that strlen(s->data) does not have to equal @c
- * s->len. The NULL terminator is provided to make it easier to
+ * s->len. The null terminator is provided to make it easier to
* pass @c s->data to C string interfaces.
*
*
* 2. Non-NULL input:
*
- * All the functions assume their input data is non-NULL,
+ * All the functions assume their input data pointer is non-NULL,
* unless otherwise documented, and may seg fault if passed
* NULL. The input data may *contain* null bytes, of course, just
* the data pointer itself must not be NULL.
@@ -125,34 +125,46 @@ typedef struct svn_stringbuf_t
* @{
*/
-/** Create a new bytestring containing a C string (NULL-terminated). */
+/** Create a new string copied from the null-terminated C string @a cstring.
+ */
svn_string_t *
svn_string_create(const char *cstring, apr_pool_t *pool);
-/** Create a new bytestring containing a generic string of bytes
- * (NOT NULL-terminated) */
+/** Create a new, empty string.
+ *
+ * @since New in 1.8.
+ */
+svn_string_t *
+svn_string_create_empty(apr_pool_t *pool);
+
+/** Create a new string copied from a generic string of bytes, @a bytes, of
+ * length @a size bytes. @a bytes is NOT assumed to be null-terminated, but
+ * the new string will be.
+ */
svn_string_t *
svn_string_ncreate(const char *bytes, apr_size_t size, apr_pool_t *pool);
-/** Create a new string with the contents of the given stringbuf */
+/** Create a new string copied from the stringbuf @a strbuf.
+ */
svn_string_t *
svn_string_create_from_buf(const svn_stringbuf_t *strbuf, apr_pool_t *pool);
-/** Create a new bytestring by formatting @a cstring (NULL-terminated)
- * from varargs, which are as appropriate for apr_psprintf().
+/** Create a new string by printf-style formatting using @a fmt and the
+ * variable arguments, which are as appropriate for apr_psprintf().
*/
svn_string_t *
svn_string_createf(apr_pool_t *pool, const char *fmt, ...)
__attribute__((format(printf, 2, 3)));
-/** Create a new bytestring by formatting @a cstring (NULL-terminated)
- * from a @c va_list (see svn_stringbuf_createf()).
+/** Create a new string by printf-style formatting using @c fmt and @a ap.
+ * This is the same as svn_string_createf() except for the different
+ * way of passing the variable arguments.
*/
svn_string_t *
svn_string_createv(apr_pool_t *pool, const char *fmt, va_list ap)
__attribute__((format(printf, 2, 0)));
-/** Return TRUE if a bytestring is empty (has length zero). */
+/** Return TRUE if @a str is empty (has length zero). */
svn_boolean_t
svn_string_isempty(const svn_string_t *str);
@@ -184,62 +196,80 @@ svn_string_find_char_backward(const svn_string_t *str, char ch);
* @{
*/
-/** Create a new bytestring containing a C string (NULL-terminated). */
+/** Create a new stringbuf copied from the null-terminated C string
+ * @a cstring.
+ */
svn_stringbuf_t *
svn_stringbuf_create(const char *cstring, apr_pool_t *pool);
-/** Create a new bytestring containing a generic string of bytes
- * (NON-NULL-terminated)
+/** Create a new stringbuf copied from the generic string of bytes, @a bytes,
+ * of length @a size bytes. @a bytes is NOT assumed to be null-terminated,
+ * but the new stringbuf will be.
*/
svn_stringbuf_t *
svn_stringbuf_ncreate(const char *bytes, apr_size_t size, apr_pool_t *pool);
-/** Create a new empty bytestring with at least @a minimum_size bytes of
+/** Create a new, empty stringbuf.
+ *
+ * @since New in 1.8.
+ */
+svn_stringbuf_t *
+svn_stringbuf_create_empty(apr_pool_t *pool);
+
+/** Create a new, empty stringbuf with at least @a minimum_size bytes of
* space available in the memory block.
*
- * The allocated string buffer will be one byte larger than @a minimum_size
- * to account for a final '\\0'.
+ * The allocated string buffer will be at least one byte larger than
+ * @a minimum_size to account for a final '\\0'.
*
* @since New in 1.6.
*/
svn_stringbuf_t *
svn_stringbuf_create_ensure(apr_size_t minimum_size, apr_pool_t *pool);
-/** Create a new stringbuf with the contents of the given string */
+/** Create a new stringbuf copied from the string @a str.
+ */
svn_stringbuf_t *
svn_stringbuf_create_from_string(const svn_string_t *str, apr_pool_t *pool);
-/** Create a new bytestring by formatting @a cstring (NULL-terminated)
- * from varargs, which are as appropriate for apr_psprintf().
+/** Create a new stringbuf by printf-style formatting using @a fmt and the
+ * variable arguments, which are as appropriate for apr_psprintf().
*/
svn_stringbuf_t *
svn_stringbuf_createf(apr_pool_t *pool, const char *fmt, ...)
__attribute__((format(printf, 2, 3)));
-/** Create a new bytestring by formatting @a cstring (NULL-terminated)
- * from a @c va_list (see svn_stringbuf_createf()).
+/** Create a new stringbuf by printf-style formatting using @c fmt and @a ap.
+ * This is the same as svn_stringbuf_createf() except for the different
+ * way of passing the variable arguments.
*/
svn_stringbuf_t *
svn_stringbuf_createv(apr_pool_t *pool, const char *fmt, va_list ap)
__attribute__((format(printf, 2, 0)));
-/** Make sure that the string @a str has at least @a minimum_size bytes of
- * space available in the memory block.
+/** Make sure that @a str has at least @a minimum_size
+ * bytes of space available in the memory block.
+ *
+ * The allocated string buffer will be at least one byte larger than
+ * @a minimum_size to account for a final '\\0'.
*
- * (@a minimum_size should include space for the terminating NULL character.)
+ * @note: Before Subversion 1.8 this function did not ensure space for
+ * one byte more than @a minimum_size. If compatibility with pre-1.8
+ * behaviour is required callers must assume space for only
+ * @a minimum_size-1 data bytes plus a final '\\0'.
*/
void
svn_stringbuf_ensure(svn_stringbuf_t *str, apr_size_t minimum_size);
-/** Set a bytestring @a str to @a value */
+/** Set @a str to a copy of the null-terminated C string @a value. */
void
svn_stringbuf_set(svn_stringbuf_t *str, const char *value);
-/** Set a bytestring @a str to empty (0 length). */
+/** Set @a str to empty (zero length). */
void
svn_stringbuf_setempty(svn_stringbuf_t *str);
-/** Return @c TRUE if a bytestring is empty (has length zero). */
+/** Return @c TRUE if @a str is empty (has length zero). */
svn_boolean_t
svn_stringbuf_isempty(const svn_stringbuf_t *str);
@@ -247,11 +277,12 @@ svn_stringbuf_isempty(const svn_stringbuf_t *str);
void
svn_stringbuf_chop(svn_stringbuf_t *str, apr_size_t nbytes);
-/** Fill bytestring @a str with character @a c. */
+/** Fill @a str with character @a c. */
void
svn_stringbuf_fillchar(svn_stringbuf_t *str, unsigned char c);
-/** Append a single character @a byte onto @a targetstr.
+/** Append the single character @a byte onto @a targetstr.
+ *
* This is an optimized version of svn_stringbuf_appendbytes()
* that is much faster to call and execute. Gains vary with the ABI.
* The advantages extend beyond the actual call because the reduced
@@ -273,7 +304,7 @@ svn_stringbuf_appendbytes(svn_stringbuf_t *targetstr,
const char *bytes,
apr_size_t count);
-/** Append an @c svn_stringbuf_t onto @a targetstr.
+/** Append the stringbuf @c appendstr onto @a targetstr.
*
* reallocs if necessary. @a targetstr is affected, nothing else is.
*/
@@ -281,7 +312,7 @@ void
svn_stringbuf_appendstr(svn_stringbuf_t *targetstr,
const svn_stringbuf_t *appendstr);
-/** Append a C string onto @a targetstr.
+/** Append the C string @a cstr onto @a targetstr.
*
* reallocs if necessary. @a targetstr is affected, nothing else is.
*/
@@ -289,6 +320,55 @@ void
svn_stringbuf_appendcstr(svn_stringbuf_t *targetstr,
const char *cstr);
+/** Read @a count bytes from @a bytes and insert them into @a str at
+ * position @a pos and following. The resulting string will be
+ * @c count+str->len bytes long. If @c pos is larger or equal to the
+ * number of bytes currently used in @a str, simply append @a bytes.
+ *
+ * Reallocs if necessary. @a str is affected, nothing else is.
+ *
+ * @note The inserted string may be a sub-range if @a str.
+ *
+ * @since New in 1.8.
+ */
+void
+svn_stringbuf_insert(svn_stringbuf_t *str,
+ apr_size_t pos,
+ const char *bytes,
+ apr_size_t count);
+
+/** Removes @a count bytes from @a str, starting at position @a pos.
+ * If that range exceeds the current string data, @a str gets truncated
+ * at @a pos. If the latter is larger or equal to @c str->pos, this will
+ * be a no-op. Otherwise, the resulting string will be @c str->len-count
+ * bytes long.
+ *
+ * @since New in 1.8.
+ */
+void
+svn_stringbuf_remove(svn_stringbuf_t *str,
+ apr_size_t pos,
+ apr_size_t count);
+
+/** Replace in @a str the substring which starts at @a pos and is @a
+ * old_count bytes long with a new substring @a bytes (which is @a
+ * new_count bytes long).
+ *
+ * This is faster but functionally equivalent to the following sequence:
+ * @code
+ svn_stringbuf_remove(str, pos, old_count);
+ svn_stringbuf_insert(str, pos, bytes, new_count);
+ * @endcode
+ *
+ * @since New in 1.8.
+ */
+void
+svn_stringbuf_replace(svn_stringbuf_t *str,
+ apr_size_t pos,
+ apr_size_t old_count,
+ const char *bytes,
+ apr_size_t new_count);
+
/** Return a duplicate of @a original_string. */
svn_stringbuf_t *
svn_stringbuf_dup(const svn_stringbuf_t *original_string, apr_pool_t *pool);
@@ -371,6 +451,20 @@ svn_boolean_t
svn_cstring_match_list(const char *str, const apr_array_header_t *list);
/**
+ * Get the next token from @a *str interpreting any char from @a sep as a
+ * token separator. Separators at the beginning of @a str will be skipped.
+ * Returns a pointer to the beginning of the first token in @a *str or NULL
+ * if no token is left. Modifies @a str such that the next call will return
+ * the next token.
+ *
+ * @note The content of @a *str may be modified by this function.
+ *
+ * @since New in 1.8.
+ */
+char *
+svn_cstring_tokenize(const char *sep, char **str);
+
+/**
* Return the number of line breaks in @a msg, allowing any kind of newline
* termination (CR, LF, CRLF, or LFCR), even inconsistent.
*
diff --git a/subversion/include/svn_subst.h b/subversion/include/svn_subst.h
index 048b566..98aaf3e 100644
--- a/subversion/include/svn_subst.h
+++ b/subversion/include/svn_subst.h
@@ -127,17 +127,60 @@ typedef struct svn_subst_keywords_t
* Set @a *kw to a new keywords hash filled with the appropriate contents
* given a @a keywords_string (the contents of the svn:keywords
* property for the file in question), the revision @a rev, the @a url,
- * the @a date the file was committed on, and the @a author of the last
- * commit. Any of these can be @c NULL to indicate that the information is
- * not present, or @c 0 for @a date.
+ * the @a date the file was committed on, the @a author of the last
+ * commit, and the URL of the repository root @a repos_root_url.
+ *
+ * Custom keywords defined in svn:keywords properties are expanded
+ * using the provided parameters and in accordance with the following
+ * format substitutions in the @a keywords_string:
+ * %a - The author.
+ * %b - The basename of the URL.
+ * %d - Short format of the date.
+ * %D - Long format of the date.
+ * %P - The file's path, relative to the repository root URL.
+ * %r - The revision.
+ * %R - The URL to the root of the repository.
+ * %u - The URL of the file.
+ * %_ - A space (keyword definitions cannot contain a literal space).
+ * %% - A literal '%'.
+ * %H - Equivalent to %P%_%r%_%d%_%a.
+ * %I - Equivalent to %b%_%r%_%d%_%a.
+ *
+ * Custom keywords are defined by appending '=' to the keyword name, followed
+ * by a string containing any combination of the format substitutions.
+ *
+ * Any of the inputs @a rev, @a url, @a date, @a author, and @a repos_root_url
+ * can be @c NULL, or @c 0 for @a date, to indicate that the information is
+ * not present. Each piece of information that is not present expands to the
+ * empty string wherever it appears in an expanded keyword value. (This can
+ * result in multiple adjacent spaces in the expansion of a multi-valued
+ * keyword such as "Id".)
*
* Hash keys are of type <tt>const char *</tt>.
* Hash values are of type <tt>svn_string_t *</tt>.
*
* All memory is allocated out of @a pool.
*
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_subst_build_keywords3(apr_hash_t **kw,
+ const char *keywords_string,
+ const char *rev,
+ const char *url,
+ const char *repos_root_url,
+ apr_time_t date,
+ const char *author,
+ apr_pool_t *pool);
+
+/** Similar to svn_subst_build_keywords3() except that it does not accept
+ * the @a repos_root_url parameter and hence supports less substitutions,
+ * and also does not support custom keyword definitions.
+ *
* @since New in 1.3.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_subst_build_keywords2(apr_hash_t **kw,
const char *keywords_string,
diff --git a/subversion/include/svn_types.h b/subversion/include/svn_types.h
index 14d6652..1ad2194 100644
--- a/subversion/include/svn_types.h
+++ b/subversion/include/svn_types.h
@@ -29,6 +29,7 @@
/* ### this should go away, but it causes too much breakage right now */
#include <stdlib.h>
+#include <limits.h> /* for ULONG_MAX */
#include <apr.h> /* for apr_size_t, apr_int64_t, ... */
#include <apr_errno.h> /* for apr_status_t */
@@ -71,16 +72,38 @@ extern "C" {
* Unaligned access on other machines (e.g. IA64) will trigger memory
* access faults or simply misbehave.
*
+ * Note: Some platforms may only support unaligned access for integers
+ * (PowerPC). As a result this macro should only be used to determine
+ * if unaligned access is supported for integers.
+ *
* @since New in 1.7.
*/
#ifndef SVN_UNALIGNED_ACCESS_IS_OK
-# if defined(_M_IX86) || defined(_M_X64) || defined(i386) || defined(__x86_64)
+# if defined(_M_IX86) || defined(i386) \
+ || defined(_M_X64) || defined(__x86_64) \
+ || defined(__powerpc__) || defined(__ppc__)
# define SVN_UNALIGNED_ACCESS_IS_OK 1
# else
# define SVN_UNALIGNED_ACCESS_IS_OK 0
# endif
#endif
+
+
+/** YABT: Yet Another Boolean Type */
+typedef int svn_boolean_t;
+
+#ifndef TRUE
+/** uhh... true */
+#define TRUE 1
+#endif /* TRUE */
+
+#ifndef FALSE
+/** uhh... false */
+#define FALSE 0
+#endif /* FALSE */
+
+
/** Subversion error object.
*
@@ -131,9 +154,13 @@ typedef struct svn_error_t
} svn_error_t;
+
+
/* See svn_version.h.
Defined here to avoid including svn_version.h from all public headers. */
typedef struct svn_version_t svn_version_t;
+
+
/** @defgroup APR_ARRAY_compat_macros APR Array Compatibility Helper Macros
* These macros are provided by APR itself from version 1.3.
@@ -152,6 +179,8 @@ typedef struct svn_version_t svn_version_t;
#endif
/** @} */
+
+
/** @defgroup apr_hash_utilities APR Hash Table Helpers
* These functions enable the caller to dereference an APR hash table index
@@ -173,6 +202,10 @@ svn__apr_hash_index_klen(const apr_hash_index_t *hi);
void *
svn__apr_hash_index_val(const apr_hash_index_t *hi);
+/** @} */
+
+
+
/** On Windows, APR_STATUS_IS_ENOTDIR includes several kinds of
* invalid-pathname error but not ERROR_INVALID_NAME, so we include it.
* We also include ERROR_DIRECTORY as that was not included in apr versions
@@ -186,7 +219,19 @@ svn__apr_hash_index_val(const apr_hash_index_t *hi);
|| ((s) == APR_OS_START_SYSERR + ERROR_INVALID_NAME))
#endif
+/** On Windows, APR_STATUS_IS_EPIPE does not include ERROR_NO_DATA error.
+ * So we include it.*/
+/* ### These fixes should go into APR. */
+#ifndef WIN32
+#define SVN__APR_STATUS_IS_EPIPE(s) APR_STATUS_IS_EPIPE(s)
+#else
+#define SVN__APR_STATUS_IS_EPIPE(s) (APR_STATUS_IS_EPIPE(s) \
+ || ((s) == APR_OS_START_SYSERR + ERROR_NO_DATA))
+#endif
+
/** @} */
+
+
/** The various types of nodes in the Subversion filesystem. */
typedef enum svn_node_kind_t
@@ -201,7 +246,14 @@ typedef enum svn_node_kind_t
svn_node_dir,
/** something's here, but we don't know what */
- svn_node_unknown
+ svn_node_unknown,
+
+ /**
+ * symbolic link
+ * @note This value is not currently used by the public API.
+ * @since New in 1.8.
+ */
+ svn_node_symlink
} svn_node_kind_t;
/** Return a constant string expressing @a kind as an English word, e.g.,
@@ -223,6 +275,7 @@ svn_node_kind_to_word(svn_node_kind_t kind);
svn_node_kind_t
svn_node_kind_from_word(const char *word);
+
/** Generic three-state property to represent an unknown value for values
* that are just like booleans. The values have been set deliberately to
* make tristates disjoint from #svn_boolean_t.
@@ -233,8 +286,11 @@ svn_node_kind_from_word(const char *word);
* @since New in 1.7. */
typedef enum svn_tristate_t
{
+ /** state known to be false (the constant does not evaulate to false) */
svn_tristate_false = 2,
+ /** state known to be true */
svn_tristate_true,
+ /** state could be true or false */
svn_tristate_unknown
} svn_tristate_t;
@@ -256,6 +312,7 @@ svn_tristate_t
svn_tristate__from_word(const char * word);
+
/** About Special Files in Subversion
*
* Subversion denotes files that cannot be portably created or
@@ -293,6 +350,8 @@ svn_tristate__from_word(const char * word);
* routines from 1.
*/
+
+
/** A revision number. */
typedef long int svn_revnum_t;
@@ -339,6 +398,7 @@ svn_revnum_parse(svn_revnum_t *rev,
#define SVN_REVNUM_T_FMT "ld"
+
/** The size of a file in the Subversion FS. */
typedef apr_int64_t svn_filesize_t;
@@ -356,20 +416,7 @@ typedef apr_int64_t svn_filesize_t;
#endif
-/** YABT: Yet Another Boolean Type */
-typedef int svn_boolean_t;
-
-#ifndef TRUE
-/** uhh... true */
-#define TRUE 1
-#endif /* TRUE */
-
-#ifndef FALSE
-/** uhh... false */
-#define FALSE 0
-#endif /* FALSE */
-
-
+
/** An enum to indicate whether recursion is needed. */
enum svn_recurse_kind
{
@@ -427,7 +474,6 @@ typedef enum svn_depth_t
} svn_depth_t;
-
/** Return a constant string expressing @a depth as an English word,
* e.g., "infinity", "immediates", etc. The string is not localized,
* as it may be used for client<->server communications.
@@ -437,7 +483,6 @@ typedef enum svn_depth_t
const char *
svn_depth_to_word(svn_depth_t depth);
-
/** Return the appropriate depth for @a depth_str. @a word is as
* returned from svn_depth_to_word(). If @a depth_str does not
* represent a recognized depth, return #svn_depth_unknown.
@@ -447,8 +492,7 @@ svn_depth_to_word(svn_depth_t depth);
svn_depth_t
svn_depth_from_word(const char *word);
-
-/* Return #svn_depth_infinity if boolean @a recurse is TRUE, else
+/** Return #svn_depth_infinity if boolean @a recurse is TRUE, else
* return #svn_depth_files.
*
* @note New code should never need to use this, it is called only
@@ -459,8 +503,7 @@ svn_depth_from_word(const char *word);
#define SVN_DEPTH_INFINITY_OR_FILES(recurse) \
((recurse) ? svn_depth_infinity : svn_depth_files)
-
-/* Return #svn_depth_infinity if boolean @a recurse is TRUE, else
+/** Return #svn_depth_infinity if boolean @a recurse is TRUE, else
* return #svn_depth_immediates.
*
* @note New code should never need to use this, it is called only
@@ -471,8 +514,7 @@ svn_depth_from_word(const char *word);
#define SVN_DEPTH_INFINITY_OR_IMMEDIATES(recurse) \
((recurse) ? svn_depth_infinity : svn_depth_immediates)
-
-/* Return #svn_depth_infinity if boolean @a recurse is TRUE, else
+/** Return #svn_depth_infinity if boolean @a recurse is TRUE, else
* return #svn_depth_empty.
*
* @note New code should never need to use this, it is called only
@@ -483,8 +525,7 @@ svn_depth_from_word(const char *word);
#define SVN_DEPTH_INFINITY_OR_EMPTY(recurse) \
((recurse) ? svn_depth_infinity : svn_depth_empty)
-
-/* Return a recursion boolean based on @a depth.
+/** Return a recursion boolean based on @a depth.
*
* Although much code has been converted to use depth, some code still
* takes a recurse boolean. In most cases, it makes sense to treat
@@ -492,10 +533,10 @@ svn_depth_from_word(const char *word);
* non-recursive (which in turn usually translates to #svn_depth_files).
*/
#define SVN_DEPTH_IS_RECURSIVE(depth) \
- (((depth) == svn_depth_infinity || (depth) == svn_depth_unknown) \
- ? TRUE : FALSE)
+ ((depth) == svn_depth_infinity || (depth) == svn_depth_unknown)
+
/**
* It is sometimes convenient to indicate which parts of an #svn_dirent_t
* object you are actually interested in, so that calculating and sending
@@ -529,7 +570,13 @@ svn_depth_from_word(const char *word);
/** @} */
-/** A general subversion directory entry. */
+/** A general subversion directory entry.
+ *
+ * @note To allow for extending the #svn_dirent_t structure in future
+ * releases, always use svn_dirent_create() to allocate the stucture.
+ *
+ * @since New in 1.6.
+ */
typedef struct svn_dirent_t
{
/** node kind */
@@ -553,7 +600,6 @@ typedef struct svn_dirent_t
/* IMPORTANT: If you extend this struct, check svn_dirent_dup(). */
} svn_dirent_t;
-
/** Return a deep copy of @a dirent, allocated in @a pool.
*
* @since New in 1.4.
@@ -562,8 +608,16 @@ svn_dirent_t *
svn_dirent_dup(const svn_dirent_t *dirent,
apr_pool_t *pool);
-
+/**
+ * Create a new svn_dirent_t instance with all values initialized to their
+ * not-available values.
+ *
+ * @since New in 1.8.
+ */
+svn_dirent_t *
+svn_dirent_create(apr_pool_t *result_pool);
+
/** Keyword substitution.
*
* All the keywords Subversion recognizes.
@@ -640,6 +694,7 @@ svn_dirent_dup(const svn_dirent_t *dirent,
/** @} */
+
/** All information about a commit.
*
@@ -668,7 +723,6 @@ typedef struct svn_commit_info_t
} svn_commit_info_t;
-
/**
* Allocate an object of type #svn_commit_info_t in @a pool and
* return it.
@@ -686,7 +740,6 @@ typedef struct svn_commit_info_t
svn_commit_info_t *
svn_create_commit_info(apr_pool_t *pool);
-
/**
* Return a deep copy @a src_commit_info allocated in @a pool.
*
@@ -696,6 +749,7 @@ svn_commit_info_t *
svn_commit_info_dup(const svn_commit_info_t *src_commit_info,
apr_pool_t *pool);
+
/**
* A structure to represent a path that changed for a log entry.
@@ -757,7 +811,7 @@ svn_log_changed_path2_dup(const svn_log_changed_path2_t *changed_path,
/**
* A structure to represent a path that changed for a log entry. Same as
- * #svn_log_changed_path2_t, but without the node kind.
+ * the first three fields of #svn_log_changed_path2_t.
*
* @deprecated Provided for backward compatibility with the 1.5 API.
*/
@@ -774,7 +828,6 @@ typedef struct svn_log_changed_path_t
} svn_log_changed_path_t;
-
/**
* Return a deep copy of @a changed_path, allocated in @a pool.
*
@@ -810,7 +863,8 @@ typedef struct svn_log_entry_t
svn_revnum_t revision;
/** The hash of requested revision properties, which may be NULL if it
- * would contain no revprops. */
+ * would contain no revprops. Maps (const char *) property name to
+ * (svn_string_t *) property value. */
apr_hash_t *revprops;
/**
@@ -852,6 +906,10 @@ typedef struct svn_log_entry_t
* Whether @a revision should be interpreted as non-inheritable in the
* same sense of #svn_merge_range_t.
*
+ * Only set when this #svn_log_entry_t instance is returned by the
+ * libsvn_client mergeinfo apis. Currently always FALSE when the
+ * #svn_log_entry_t instance is reported by the ra layer.
+ *
* @since New in 1.7.
*/
svn_boolean_t non_inheritable;
@@ -923,7 +981,6 @@ svn_log_entry_dup(const svn_log_entry_t *log_entry, apr_pool_t *pool);
*
* @since New in 1.5.
*/
-
typedef svn_error_t *(*svn_log_entry_receiver_t)(
void *baton,
svn_log_entry_t *log_entry,
@@ -944,6 +1001,7 @@ typedef svn_error_t *(*svn_log_message_receiver_t)(
const char *message,
apr_pool_t *pool);
+
/** Callback function type for commits.
*
@@ -969,6 +1027,7 @@ typedef svn_error_t *(*svn_commit_callback_t)(
const char *author,
void *baton);
+
/** A buffer size that may be used when processing a stream of data.
*
@@ -1021,7 +1080,6 @@ svn_error_t *
svn_mime_type_validate(const char *mime_type,
apr_pool_t *pool);
-
/** Return FALSE iff @a mime_type is a textual type.
*
* All mime types that start with "text/" are textual, plus some special
@@ -1092,6 +1150,8 @@ svn_lock_create(apr_pool_t *pool);
svn_lock_t *
svn_lock_dup(const svn_lock_t *lock, apr_pool_t *pool);
+
+
/**
* Return a formatted Universal Unique IDentifier (UUID) string.
*
@@ -1100,6 +1160,8 @@ svn_lock_dup(const svn_lock_t *lock, apr_pool_t *pool);
const char *
svn_uuid_generate(apr_pool_t *pool);
+
+
/**
* Mergeinfo representing a merge of a range of revisions.
*
@@ -1146,7 +1208,7 @@ svn_merge_range_contains_rev(const svn_merge_range_t *range, svn_revnum_t rev);
* @{ */
/**
- * A representation of a segment of a object's version history with an
+ * A representation of a segment of an object's version history with an
* emphasis on the object's location in the repository as of various
* revisions.
*
@@ -1155,7 +1217,7 @@ svn_merge_range_contains_rev(const svn_merge_range_t *range, svn_revnum_t rev);
typedef struct svn_location_segment_t
{
/** The beginning (oldest) and ending (youngest) revisions for this
- segment. */
+ segment, both inclusive. */
svn_revnum_t range_start;
svn_revnum_t range_end;
@@ -1165,7 +1227,6 @@ typedef struct svn_location_segment_t
} svn_location_segment_t;
-
/**
* A callback invoked by generators of #svn_location_segment_t
* objects, used to report information about a versioned object's
@@ -1177,7 +1238,6 @@ typedef svn_error_t *(*svn_location_segment_receiver_t)(
void *baton,
apr_pool_t *pool);
-
/**
* Return a deep copy of @a segment, allocated in @a pool.
*
@@ -1189,19 +1249,22 @@ svn_location_segment_dup(const svn_location_segment_t *segment,
/** @} */
+
+
/** A line number, such as in a file or a stream.
*
* @since New in 1.7.
*/
typedef unsigned long svn_linenum_t;
-/* The maximum value of an svn_linenum_t.
+/** The maximum value of an svn_linenum_t.
*
* @since New in 1.7.
*/
#define SVN_LINENUM_MAX_VALUE ULONG_MAX
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/include/svn_utf.h b/subversion/include/svn_utf.h
index e0c3be8..4a2c137 100644
--- a/subversion/include/svn_utf.h
+++ b/subversion/include/svn_utf.h
@@ -49,13 +49,30 @@ extern "C" {
* Initialize the UTF-8 encoding/decoding routines.
* Allocate cached translation handles in a subpool of @a pool.
*
+ * If @a assume_native_utf8 is TRUE, the native character set is
+ * assumed to be UTF-8, i.e. conversion is a no-op. This is useful
+ * in contexts where the native character set is ASCII but UTF-8
+ * should be used regardless (e.g. for mod_dav_svn which runs within
+ * httpd and always uses the "C" locale).
+ *
* @note It is optional to call this function, but if it is used, no other
* svn function may be in use in other threads during the call of this
* function or when @a pool is cleared or destroyed.
* Initializing the UTF-8 routines will improve performance.
*
- * @since New in 1.1.
+ * @since New in 1.8.
+ */
+void
+svn_utf_initialize2(svn_boolean_t assume_native_utf8,
+ apr_pool_t *pool);
+
+/**
+ * Like svn_utf_initialize2() but without the ability to force the
+ * native encoding to UTF-8.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
void
svn_utf_initialize(apr_pool_t *pool);
@@ -220,6 +237,14 @@ svn_utf_cstring_from_utf8_string(const char **dest,
const svn_string_t *src,
apr_pool_t *pool);
+/** Return the display width of UTF-8-encoded C string @a cstr.
+ * If the string is not printable or invalid UTF-8, return -1.
+ *
+ * @since New in 1.8.
+ */
+int
+svn_utf_cstring_utf8_width(const char *cstr);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/include/svn_version.h b/subversion/include/svn_version.h
index 48f6790..6c34dc7 100644
--- a/subversion/include/svn_version.h
+++ b/subversion/include/svn_version.h
@@ -28,14 +28,13 @@
#define SVN_VERSION_H
/* Hack to prevent the resource compiler from including
- apr_general.h. It doesn't resolve the include paths
- correctly and blows up without this.
- */
-#ifndef APR_STRINGIFY
+ apr and other headers. */
+#ifndef SVN_WIN32_RESOURCE_COMPILATION
#include <apr_general.h>
-#endif
+#include <apr_tables.h>
#include "svn_types.h"
+#endif
#ifdef __cplusplus
extern "C" {
@@ -62,7 +61,7 @@ extern "C" {
* Modify when new functionality is added or new interfaces are
* defined, but all changes are backward compatible.
*/
-#define SVN_VER_MINOR 7
+#define SVN_VER_MINOR 8
/**
* Patch number.
@@ -71,7 +70,7 @@ extern "C" {
*
* @since New in 1.1.
*/
-#define SVN_VER_PATCH 6
+#define SVN_VER_PATCH 13
/** @deprecated Provided for backward compatibility with the 1.0 API. */
@@ -94,7 +93,7 @@ extern "C" {
*
* Always change this at the same time as SVN_VER_NUMTAG.
*/
-#define SVN_VER_TAG " (r1370777)"
+#define SVN_VER_TAG " (r1667537)"
/** Number tag: a string describing the version.
@@ -120,7 +119,7 @@ extern "C" {
* When rolling a tarball, we automatically replace it with what we
* guess to be the correct revision number.
*/
-#define SVN_VER_REVISION 1370777
+#define SVN_VER_REVISION 1667537
/* Version strings composed from the above definitions. */
@@ -256,6 +255,153 @@ const svn_version_t *
svn_subr_version(void);
+/**
+ * Extended version information, including info about the running system.
+ *
+ * @since New in 1.8.
+ */
+typedef struct svn_version_extended_t svn_version_extended_t;
+
+/**
+ * Return version information for the running program. If @a verbose
+ * is #TRUE, collect extra information that may be expensive to
+ * retrieve (for example, the OS release name, list of shared
+ * libraries, etc.). Use @a pool for all allocations.
+ *
+ * @since New in 1.8.
+ */
+const svn_version_extended_t *
+svn_version_extended(svn_boolean_t verbose,
+ apr_pool_t *pool);
+
+
+/**
+ * Accessor for svn_version_extended_t.
+ *
+ * @return The date when the libsvn_subr library was compiled, in the
+ * format defined by the C standard macro @c __DATE__.
+ *
+ * @since New in 1.8.
+ */
+const char *
+svn_version_ext_build_date(const svn_version_extended_t *ext_info);
+
+/**
+ * Accessor for svn_version_extended_t.
+ *
+ * @return The time when the libsvn_subr library was compiled, in the
+ * format defined by the C standard macro @c __TIME__.
+ *
+ * @since New in 1.8.
+ */
+const char *
+svn_version_ext_build_time(const svn_version_extended_t *ext_info);
+
+/**
+ * Accessor for svn_version_extended_t.
+ *
+ * @return The canonical host triplet (arch-vendor-osname) of the
+ * system where libsvn_subr was compiled.
+ *
+ * @note On Unix-like systems (includng Mac OS X), this string is the
+ * same as the output of the config.guess script.
+ *
+ * @since New in 1.8.
+ */
+const char *
+svn_version_ext_build_host(const svn_version_extended_t *ext_info);
+
+/**
+ * Accessor for svn_version_extended_t.
+ *
+ * @return The localized copyright notice.
+ *
+ * @since New in 1.8.
+ */
+const char *
+svn_version_ext_copyright(const svn_version_extended_t *ext_info);
+
+/**
+ * Accessor for svn_version_extended_t.
+ *
+ * @return The canonical host triplet (arch-vendor-osname) of the
+ * system where the current process is running.
+ *
+ * @note This string may not be the same as the output of config.guess
+ * on the same system.
+ *
+ * @since New in 1.8.
+ */
+const char *
+svn_version_ext_runtime_host(const svn_version_extended_t *ext_info);
+
+/**
+ * Accessor for svn_version_extended_t.
+ *
+ * @return The "commercial" release name of the running operating
+ * system, if available. Not to be confused with, e.g., the output of
+ * "uname -v" or "uname -r". The returned value may be @c NULL.
+ *
+ * @since New in 1.8.
+ */
+const char *
+svn_version_ext_runtime_osname(const svn_version_extended_t *ext_info);
+
+/**
+ * Dependent library information.
+ * Describes the name and versions of known dependencies
+ * used by libsvn_subr.
+ *
+ * @since New in 1.8.
+ */
+typedef struct svn_version_ext_linked_lib_t
+{
+ const char *name; /**< Library name */
+ const char *compiled_version; /**< Compile-time version string */
+ const char *runtime_version; /**< Run-time version string (optional) */
+} svn_version_ext_linked_lib_t;
+
+/**
+ * Accessor for svn_version_extended_t.
+ *
+ * @return Array of svn_version_ext_linked_lib_t describing dependent
+ * libraries. The returned value may be @c NULL.
+ *
+ * @since New in 1.8.
+ */
+const apr_array_header_t *
+svn_version_ext_linked_libs(const svn_version_extended_t *ext_info);
+
+
+/**
+ * Loaded shared library information.
+ * Describes the name and, where available, version of the shared libraries
+ * loaded by the running program.
+ *
+ * @since New in 1.8.
+ */
+typedef struct svn_version_ext_loaded_lib_t
+{
+ const char *name; /**< Library name */
+ const char *version; /**< Library version (optional) */
+} svn_version_ext_loaded_lib_t;
+
+
+/**
+ * Accessor for svn_version_extended_t.
+ *
+ * @return Array of svn_version_ext_loaded_lib_t describing loaded
+ * shared libraries. The returned value may be @c NULL.
+ *
+ * @note On Mac OS X, the loaded frameworks, private frameworks and
+ * system libraries will not be listed.
+ *
+ * @since New in 1.8.
+ */
+const apr_array_header_t *
+svn_version_ext_loaded_libs(const svn_version_extended_t *ext_info);
+
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/include/svn_wc.h b/subversion/include/svn_wc.h
index 280b0d4..37210ff 100644
--- a/subversion/include/svn_wc.h
+++ b/subversion/include/svn_wc.h
@@ -781,7 +781,7 @@ svn_wc_traversed_depths(apr_hash_t **depths,
* canonicalized.
*
* In order to avoid backwards compatibility problems clients should use
- * svn_wc_external_item_create() to allocate and initialize this structure
+ * svn_wc_external_item2_create() to allocate and initialize this structure
* instead of doing so themselves.
*
* @since New in 1.5.
@@ -795,7 +795,8 @@ typedef struct svn_wc_external_item2_t
field will often be redundant.) */
const char *target_dir;
- /** Where to check out from. */
+ /** Where to check out from. This is possibly a relative external URL, as
+ * allowed in externals definitions, but without the peg revision. */
const char *url;
/** What revision to check out. The only valid kinds for this are
@@ -822,8 +823,20 @@ typedef struct svn_wc_external_item2_t
* The current implementation never returns error, but callers should
* still check for error, for compatibility with future versions.
*
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_wc_external_item2_create(svn_wc_external_item2_t **item,
+ apr_pool_t *pool);
+
+/** Same as svn_wc_external_item2_create() except the pointer to the new
+ * empty item is 'const' which is stupid since the next thing you need to do
+ * is fill in its fields.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
* @since New in 1.5.
*/
+SVN_DEPRECATED
svn_error_t *
svn_wc_external_item_create(const svn_wc_external_item2_t **item,
apr_pool_t *pool);
@@ -887,8 +900,8 @@ svn_wc_external_item_dup(const svn_wc_external_item_t *item,
* of those objects. If the @a url member refers to an absolute URL,
* it will be canonicalized as URL consistent with the way URLs are
* canonicalized throughout the Subversion API. If, however, the
- * @a url member makes use of the recognized (and proprietary)
- * relative URL syntax, "canonicalization" is a less easily-defined
+ * @a url member makes use of the recognized (SVN-specific) relative
+ * URL syntax for svn:externals, "canonicalization" is an ill-defined
* concept which may even result in munging the relative URL syntax
* beyond recognition. You've been warned.
*
@@ -1119,7 +1132,7 @@ typedef enum svn_wc_notify_action_t
* @since New in 1.7. */
svn_wc_notify_update_shadowed_add,
- /** A node below an exising node was updated during update.
+ /** A node below an existing node was updated during update.
* @since New in 1.7. */
svn_wc_notify_update_shadowed_update,
@@ -1130,7 +1143,7 @@ typedef enum svn_wc_notify_action_t
/** The mergeinfo on path was updated. @since New in 1.7. */
svn_wc_notify_merge_record_info,
- /** An working copy directory was upgraded to the latest format
+ /** A working copy directory was upgraded to the latest format.
* @since New in 1.7. */
svn_wc_notify_upgraded_path,
@@ -1207,7 +1220,42 @@ typedef enum svn_wc_notify_action_t
/** The operation skipped the path because it was conflicted.
* @since New in 1.7. */
- svn_wc_notify_skip_conflicted
+ svn_wc_notify_skip_conflicted,
+
+ /** Just the lock on a file was removed during update.
+ * @since New in 1.8. */
+ svn_wc_notify_update_broken_lock,
+
+ /** Operation failed because a node is obstructed.
+ * @since New in 1.8. */
+ svn_wc_notify_failed_obstruction,
+
+ /** Conflict resolver is starting.
+ * This can be used by clients to detect when to display conflict summary
+ * information, for example.
+ * @since New in 1.8. */
+ svn_wc_notify_conflict_resolver_starting,
+
+ /** Conflict resolver is done.
+ * This can be used by clients to detect when to display conflict summary
+ * information, for example.
+ * @since New in 1.8. */
+ svn_wc_notify_conflict_resolver_done,
+
+ /** The current operation left local changes of something that was deleted
+ * The changes are available on (and below) the notified path
+ * @since New in 1.8. */
+ svn_wc_notify_left_local_modifications,
+
+ /** A copy from a foreign repository has started
+ * @since New in 1.8. */
+ svn_wc_notify_foreign_copy_begin,
+
+ /** A move in the working copy has been broken, i.e. degraded into a
+ * copy + delete. The notified path is the move source (the deleted path).
+ * ### TODO: Provide path to move destination as well?
+ * @since New in 1.8. */
+ svn_wc_notify_move_broken
} svn_wc_notify_action_t;
@@ -1271,7 +1319,7 @@ typedef enum svn_wc_notify_lock_state_t
* @c kind, @c content_state, @c prop_state and @c lock_state are from
* after @c action, not before.
*
- * @note If @c action is #svn_wc_notify_update (### what?), then @c path has
+ * @note If @c action is #svn_wc_notify_update_completed, then @c path has
* already been installed, so it is legitimate for an implementation of
* #svn_wc_notify_func2_t to examine @c path in the working copy.
*
@@ -1295,7 +1343,7 @@ typedef struct svn_wc_notify_t {
/** Path, either absolute or relative to the current working directory
* (i.e., not relative to an anchor). @c path is "." or another valid path
- * value for compatibility reasons when the real target is an url that
+ * value for compatibility reasons when the real target is a url that
* is available in @c url. */
const char *path;
@@ -1342,7 +1390,9 @@ typedef struct svn_wc_notify_t {
* In all other cases, it is @c NULL. @since New in 1.5 */
const char *changelist_name;
- /** When @c action is #svn_wc_notify_merge_begin, and both the
+ /** When @c action is #svn_wc_notify_merge_begin or
+ * #svn_wc_notify_foreign_merge_begin or
+ * #svn_wc_notify_merge_record_info_begin, and both the
* left and right sides of the merge are from the same URL. In all
* other cases, it is @c NULL. @since New in 1.5 */
svn_merge_range_t *merge_range;
@@ -1551,7 +1601,11 @@ typedef enum svn_wc_conflict_reason_t
/** Object is already added or schedule-add. @since New in 1.6. */
svn_wc_conflict_reason_added,
/** Object is already replaced. @since New in 1.7. */
- svn_wc_conflict_reason_replaced
+ svn_wc_conflict_reason_replaced,
+ /** Object is moved away. @since New in 1.8. */
+ svn_wc_conflict_reason_moved_away,
+ /** Object is moved here. @since New in 1.8. */
+ svn_wc_conflict_reason_moved_here
} svn_wc_conflict_reason_t;
@@ -1614,13 +1668,16 @@ typedef struct svn_wc_conflict_version_t
svn_revnum_t peg_rev;
/** path within repos; must not start with '/' */
+ /* ### should have been called repos_relpath, but we can't change this. */
const char *path_in_repos;
- /* @todo We may decide to add the repository UUID, to handle conflicts
- * properly during a repository move. */
/** @} */
- /** Info about this node */
- svn_node_kind_t node_kind; /* note that 'none' is a legitimate value */
+ /** The node kind. Can be any kind, including 'none' or 'unknown'. */
+ svn_node_kind_t node_kind;
+
+ /** UUID of the repository (or NULL if unknown.)
+ * @since New in 1.8. */
+ const char *repos_uuid;
/* @todo Add metadata about a local copy of the node, if and when
* we store one. */
@@ -1633,13 +1690,32 @@ typedef struct svn_wc_conflict_version_t
* Allocate an #svn_wc_conflict_version_t structure in @a pool,
* initialize to contain a conflict origin, and return it.
*
- * Set the @c repos_url field of the created struct to @a repos_url, the
- * @c path_in_repos field to @a path_in_repos, the @c peg_rev field to
- * @a peg_rev and the the @c node_kind to @c node_kind. Make only shallow
+ * Set the @c repos_url field of the created struct to @a repos_root_url,
+ * the @c path_in_repos field to @a repos_relpath, the @c peg_rev field to
+ * @a revision and the @c node_kind to @a kind. Make only shallow
* copies of the pointer arguments.
*
+ * @a repos_root_url, @a repos_relpath and @a revision must be valid,
+ * non-null values. @a repos_uuid should be a valid UUID, but can be
+ * NULL if unknown. @a kind can be any kind, even 'none' or 'unknown'.
+ *
+ * @since New in 1.8.
+ */
+svn_wc_conflict_version_t *
+svn_wc_conflict_version_create2(const char *repos_root_url,
+ const char *repos_uuid,
+ const char *repos_relpath,
+ svn_revnum_t revision,
+ svn_node_kind_t kind,
+ apr_pool_t *result_pool);
+
+/** Similar to svn_wc_conflict_version_create2(), but doesn't set all
+ * required values.
+ *
* @since New in 1.6.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_wc_conflict_version_t *
svn_wc_conflict_version_create(const char *repos_url,
const char *path_in_repos,
@@ -1669,9 +1745,9 @@ svn_wc_conflict_version_dup(const svn_wc_conflict_version_t *version,
* @note Fields may be added to the end of this structure in future
* versions. Therefore, to preserve binary compatibility, users
* should not directly allocate structures of this type but should use
- * svn_wc_create_conflict_description_text2() or
- * svn_wc_create_conflict_description_prop2() or
- * svn_wc_create_conflict_description_tree2() instead.
+ * svn_wc_conflict_description_create_text2() or
+ * svn_wc_conflict_description_create_prop2() or
+ * svn_wc_conflict_description_create_tree2() instead.
*
* @since New in 1.7.
*/
@@ -1755,7 +1831,7 @@ typedef struct svn_wc_conflict_description2_t
/** Info on the "merge-right source" or "their" version of incoming change. */
const svn_wc_conflict_version_t *src_right_version;
- /* Remember to adjust svn_wc__conflict_description_dup()
+ /* Remember to adjust svn_wc__conflict_description2_dup()
* if you add new fields to this struct. */
} svn_wc_conflict_description2_t;
@@ -1849,8 +1925,6 @@ typedef struct svn_wc_conflict_description_t
* @since New in 1.6. */
svn_wc_conflict_version_t *src_right_version;
- /* Remember to adjust svn_wc__conflict_description_dup()
- * if you add new fields to this struct. */
} svn_wc_conflict_description_t;
/**
@@ -1891,7 +1965,7 @@ svn_wc_conflict_description_create_text(const char *path,
*
* Set the @c local_abspath field of the created struct to @a local_abspath
* (which must be an absolute path), the @c kind field
- * to #svn_wc_conflict_kind_prop, the @c node_kind to @a node_kind, and
+ * to #svn_wc_conflict_kind_property, the @c node_kind to @a node_kind, and
* the @c property_name to @a property_name.
*
* @note: It is the caller's responsibility to set the other required fields
@@ -1993,7 +2067,10 @@ typedef enum svn_wc_conflict_choice_t
svn_wc_conflict_choose_mine_full, /**< own version */
svn_wc_conflict_choose_theirs_conflict, /**< incoming (for conflicted hunks) */
svn_wc_conflict_choose_mine_conflict, /**< own (for conflicted hunks) */
- svn_wc_conflict_choose_merged /**< merged version */
+ svn_wc_conflict_choose_merged, /**< merged version */
+
+ /* @since New in 1.8. */
+ svn_wc_conflict_choose_unspecified /**< undecided */
} svn_wc_conflict_choice_t;
@@ -2032,9 +2109,8 @@ typedef struct svn_wc_conflict_result_t
* Allocate an #svn_wc_conflict_result_t structure in @a pool,
* initialize and return it.
*
- * Set the @c choice field of the structure to @a choice, and @c
- * merged_file to @a merged_file. Set all other fields to their @c
- * _unknown, @c NULL or invalid value, respectively. Make only a shallow
+ * Set the @c choice field of the structure to @a choice, @c merged_file
+ * to @a merged_file, and @c save_merged to false. Make only a shallow
* copy of the pointer argument @a merged_file.
*
* @since New in 1.5.
@@ -2058,7 +2134,7 @@ svn_wc_create_conflict_result(svn_wc_conflict_choice_t choice,
*
* The values #svn_wc_conflict_choose_mine_conflict and
* #svn_wc_conflict_choose_theirs_conflict are not legal for conflicts
- * in binary files or properties.
+ * in binary files or binary properties.
*
* Implementations of this callback are free to present the conflict
* using any user interface. This may include simple contextual
@@ -2598,24 +2674,22 @@ svn_wc_has_binary_prop(svn_boolean_t *has_binary_prop,
* with regard to the base revision, else set @a *modified_p to zero.
* @a local_abspath is the absolute path to the file.
*
- * If @a force_comparison is @c TRUE, this function will not allow
- * early return mechanisms that avoid actual content comparison.
- * Instead, if there is a text base, a full byte-by-byte comparison
- * will be done, and the entry checksum verified as well. (This means
- * that if the text base is much longer than the working file, every
- * byte of the text base will still be examined.)
+ * This function uses some heuristics to avoid byte-by-byte comparisons
+ * against the base text (eg. file size and its modification time).
*
* If @a local_abspath does not exist, consider it unmodified. If it exists
* but is not under revision control (not even scheduled for
* addition), return the error #SVN_ERR_ENTRY_NOT_FOUND.
*
+ * @a unused is ignored.
+ *
* @since New in 1.7.
*/
svn_error_t *
svn_wc_text_modified_p2(svn_boolean_t *modified_p,
svn_wc_context_t *wc_ctx,
const char *local_abspath,
- svn_boolean_t force_comparison,
+ svn_boolean_t unused,
apr_pool_t *scratch_pool);
/** Similar to svn_wc_text_modified_p2(), but with a relative path and
@@ -3041,12 +3115,25 @@ svn_wc_entry_dup(const svn_wc_entry_t *entry,
*/
typedef struct svn_wc_info_t
{
- /* ### Do we still need schedule? */
+ /** The schedule of this item
+ * ### Do we still need schedule? */
svn_wc_schedule_t schedule;
+
+ /** If copied, the URL from which the copy was made, else @c NULL. */
const char *copyfrom_url;
+
+ /** If copied, the revision from which the copy was made,
+ * else #SVN_INVALID_REVNUM. */
svn_revnum_t copyfrom_rev;
+
+ /** The checksum of the node, if it is a file. */
const svn_checksum_t *checksum;
+
+ /** A changelist the item is in, @c NULL if this node is not in a
+ * changelist. */
const char *changelist;
+
+ /** The depth of the item, see #svn_depth_t */
svn_depth_t depth;
/**
@@ -3068,6 +3155,13 @@ typedef struct svn_wc_info_t
/** The local absolute path of the working copy root. */
const char *wcroot_abspath;
+ /** The path the node was moved from, if it was moved here. Else NULL.
+ * @since New in 1.8. */
+ const char *moved_from_abspath;
+
+ /** The path the node was moved to, if it was moved away. Else NULL.
+ * @since New in 1.8. */
+ const char *moved_to_abspath;
} svn_wc_info_t;
/**
@@ -3612,6 +3706,43 @@ typedef struct svn_wc_status3_t
/** @} */
+ /** Set to the local absolute path that this node was moved from, if this
+ * file or directory has been moved here locally and is the root of that
+ * move. Otherwise set to NULL.
+ *
+ * This will be NULL for moved-here nodes that are just part of a subtree
+ * that was moved along (and are not themselves a root of a different move
+ * operation).
+ *
+ * @since New in 1.8. */
+ const char *moved_from_abspath;
+
+ /** Set to the local absolute path that this node was moved to, if this file
+ * or directory has been moved away locally and corresponds to the root
+ * of the destination side of the move. Otherwise set to NULL.
+ *
+ * Note: Saying just "root" here could be misleading. For example:
+ * svn mv A AA;
+ * svn mv AA/B BB;
+ * creates a situation where A/B is moved-to BB, but one could argue that
+ * the move source's root actually was AA/B. Note that, as far as the
+ * working copy is concerned, above case is exactly identical to:
+ * svn mv A/B BB;
+ * svn mv A AA;
+ * In both situations, @a moved_to_abspath would be set for nodes A (moved
+ * to AA) and A/B (moved to BB), only.
+ *
+ * This will be NULL for moved-away nodes that were just part of a subtree
+ * that was moved along (and are not themselves a root of a different move
+ * operation).
+ *
+ * @since New in 1.8. */
+ const char *moved_to_abspath;
+
+ /** @c TRUE iff the item is a file brought in by an svn:externals definition.
+ * @since New in 1.8. */
+ svn_boolean_t file_external;
+
/* NOTE! Please update svn_wc_dup_status3() when adding new fields here. */
} svn_wc_status3_t;
@@ -3734,7 +3865,7 @@ typedef struct svn_wc_status2_t
/**
- * Same as #svn_wc_status2_t, but without the #svn_lock_t 'repos_lock' field.
+ * Same as #svn_wc_status2_t, but without the #svn_lock_t 'repos_lock', const char 'url', #svn_revnum_t 'ood_last_cmt_rev', apr_time_t 'ood_last_cmt_date', #svn_node_kind_t 'ood_kind', const char 'ood_last_cmt_author', #svn_wc_conflict_description_t 'tree_conflict', #svn_boolean_t 'file_external', #svn_wc_status_kind 'pristine_text_status', and #svn_wc_status_kind 'pristine_prop_status' fields.
*
* @deprecated Provided for backward compatibility with the 1.1 API.
*/
@@ -3872,11 +4003,6 @@ svn_wc_status(svn_wc_status_t **status,
*
* @a scratch_pool will be cleared between invocations to the callback.
*
- * ### we might be revamping the status infrastructure, and this callback
- * ### could totally disappear by the end of 1.7 development. however, we
- * ### need to mark the STATUS parameter as "const" so that it is easier
- * ### to reason about who/what can modify those structures.
- *
* @since New in 1.7.
*/
typedef svn_error_t *(*svn_wc_status_func4_t)(void *baton,
@@ -3951,6 +4077,9 @@ typedef void (*svn_wc_status_func_t)(void *baton,
* @a ignore_patterns is an array of file patterns matching
* unversioned files to ignore for the purposes of status reporting,
* or @c NULL if the default set of ignorable file patterns should be used.
+ * Patterns from #SVN_PROP_IGNORE (and, as of 1.8,
+ * #SVN_PROP_INHERITABLE_IGNORES) properties are always used, even if not
+ * specified in @a ignore_patterns.
*
* If @a cancel_func is non-NULL, call it with @a cancel_baton while walking
* to determine if the client has canceled the operation.
@@ -3974,6 +4103,10 @@ svn_wc_walk_status(svn_wc_context_t *wc_ctx,
apr_pool_t *scratch_pool);
/**
+ * DEPRECATED -- please use APIs from svn_client.h
+ *
+ * ---
+ *
* Set @a *editor and @a *edit_baton to an editor that generates
* #svn_wc_status3_t structures and sends them through @a status_func /
* @a status_baton. @a anchor_abspath is a working copy directory
@@ -4035,7 +4168,9 @@ svn_wc_walk_status(svn_wc_context_t *wc_ctx,
* in a subpool of @a result_pool.
*
* @since New in 1.7.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_wc_get_status_editor5(const svn_delta_editor_t **editor,
void **edit_baton,
@@ -4287,7 +4422,10 @@ svn_wc_copy(const char *src,
* Use @a scratch_pool for temporary allocations.
*
* @since New in 1.7.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ * @see svn_client_move7()
*/
+SVN_DEPRECATED
svn_error_t *
svn_wc_move(svn_wc_context_t *wc_ctx,
const char *src_abspath,
@@ -4403,7 +4541,16 @@ svn_wc_delete(const char *path,
/**
* Schedule the single node that exists on disk at @a local_abspath for
- * addition to the working copy. The added node will have no properties.
+ * addition to the working copy. The added node will have the properties
+ * provided in @a props, or none if that is NULL.
+ *
+ * Check and canonicalize the properties in the same way as
+ * svn_wc_prop_set4(). Return an error and don't add the node if the
+ * properties are not valid on this node. Unlike svn_wc_prop_set4()
+ * there is no option to skip some of the checks and canonicalizations.
+ *
+ * ### The error code on validity check failure should be specified, and
+ * preferably should be a single code.
*
* The versioned state of the parent path must be a modifiable directory,
* and the versioned state of @a local_abspath must be either nonexistent or
@@ -4412,14 +4559,32 @@ svn_wc_delete(const char *path,
* If @a local_abspath does not exist as file, directory or symlink, return
* #SVN_ERR_WC_PATH_NOT_FOUND.
*
- * This is a replacement for svn_wc_add4() case 2a.
+ * ### TODO: Split into add_dir, add_file, add_symlink?
*
- * ### TODO: Allow the caller to provide the node's properties?
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_wc_add_from_disk2(svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ const apr_hash_t *props,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool);
+
+
+/**
+ * Similar to svn_wc_add_from_disk2(), but always passes NULL for @a
+ * props.
*
- * ### TODO: Split into add_dir, add_file, add_symlink?
+ * This is a replacement for svn_wc_add4() case 2a (which see for
+ * details).
+
+ * @see svn_wc_add4()
*
* @since New in 1.7.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_wc_add_from_disk(svn_wc_context_t *wc_ctx,
const char *local_abspath,
@@ -4439,7 +4604,7 @@ svn_wc_add_from_disk(svn_wc_context_t *wc_ctx,
* working copy as a copy of the original location. The separate working
* copy will be integrated by this step. In this case, which is only used
* by code like that of "svn cp URL@rev path" @a copyfrom_url and
- * @a copyfrom_rev MUST BE the the url and revision of @a local_abspath
+ * @a copyfrom_rev MUST BE the url and revision of @a local_abspath
* in the separate working copy.
*
* 2a) If the node was not versioned before it will be scheduled as a local
@@ -4654,7 +4819,8 @@ svn_wc_add_repos_file(const char *dst_path,
/** Remove @a local_abspath from revision control. @a wc_ctx must
- * hold a write lock.
+ * hold a write lock on the parent of @a local_abspath, or if that is a
+ * WC root then on @a local_abspath itself.
*
* If @a local_abspath is a file, all its info will be removed from the
* administrative area. If @a local_abspath is a directory, then the
@@ -5281,25 +5447,53 @@ svn_wc_crawl_revisions(const char *path,
* @{
*/
+/** If @a is_wcroot is not @c NULL, set @a *is_wcroot to @c TRUE if @a
+ * local_abspath is the root of the working copy, otherwise to @c FALSE.
+ *
+ * If @a is_switched is not @c NULL, set @a *is_switched to @c TRUE if @a
+ * local_abspath is not the root of the working copy, and switched against its
+ * parent.
+ *
+ * If @a kind is not @c NULL, set @a *kind to the node kind of @a
+ * local_abspath.
+ *
+ * Use @a scratch_pool for any temporary allocations.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_wc_check_root(svn_boolean_t *is_wcroot,
+ svn_boolean_t *is_switched,
+ svn_node_kind_t *kind,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *scratch_pool);
+
/** Set @a *wc_root to @c TRUE if @a local_abspath represents a "working copy
* root", @c FALSE otherwise. Here, @a local_abspath is a "working copy root"
- * if its parent directory is not a WC or if its parent directory's repository
- * URL is not the parent of its own repository URL. Thus, a switched subtree is
- * considered to be a working copy root. Also, a deleted tree-conflict
- * victim is considered a "working copy root" because it has no URL.
+ * if its parent directory is not a WC or if it is switched. Also, a deleted
+ * tree-conflict victim is considered a "working copy root" because it has no
+ * URL.
*
* If @a local_abspath is not found, return the error #SVN_ERR_ENTRY_NOT_FOUND.
*
* Use @a scratch_pool for any temporary allocations.
*
+ * @note For legacy reasons only a directory can be a wc-root. However, this
+ * function will also set wc_root to @c TRUE for a switched file.
+ *
* @since New in 1.7.
+ * @deprecated Provided for backward compatibility with the 1.7 API. Consider
+ * using svn_wc_check_root() instead.
*/
+SVN_DEPRECATED
svn_error_t *
svn_wc_is_wc_root2(svn_boolean_t *wc_root,
svn_wc_context_t *wc_ctx,
const char *local_abspath,
apr_pool_t *scratch_pool);
+
/**
* Similar to svn_wc_is_wc_root2(), but with an access baton and relative
* path.
@@ -5412,6 +5606,10 @@ typedef svn_error_t *(*svn_wc_dirents_func_t)(void *baton,
/**
+ * DEPRECATED -- please use APIs from svn_client.h
+ *
+ * ---
+ *
* Set @a *editor and @a *edit_baton to an editor and baton for updating a
* working copy.
*
@@ -5480,12 +5678,18 @@ typedef svn_error_t *(*svn_wc_dirents_func_t)(void *baton,
* the ambient depth filtering, so this doesn't have to be handled in the
* editor.
*
+ * If @a clean_checkout is TRUE, assume that we are checking out into an
+ * empty directory, and so bypass a number of conflict checks that are
+ * unnecessary in this case.
+ *
* If @a fetch_dirents_func is not NULL, the update editor may call this
* callback, when asked to perform a depth restricted update. It will do this
* before returning the editor to allow using the primary ra session for this.
*
* @since New in 1.7.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_wc_get_update_editor4(const svn_delta_editor_t **editor,
void **edit_baton,
@@ -5616,6 +5820,10 @@ svn_wc_get_update_editor(svn_revnum_t *target_revision,
apr_pool_t *pool);
/**
+ * DEPRECATED -- please use APIs from svn_client.h
+ *
+ * ---
+ *
* A variant of svn_wc_get_update_editor4().
*
* Set @a *editor and @a *edit_baton to an editor and baton for "switching"
@@ -5626,7 +5834,9 @@ svn_wc_get_update_editor(svn_revnum_t *target_revision,
* All other parameters behave as for svn_wc_get_update_editor4().
*
* @since New in 1.7.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_wc_get_switch_editor4(const svn_delta_editor_t **editor,
void **edit_baton,
@@ -5759,23 +5969,6 @@ svn_wc_get_switch_editor(svn_revnum_t *target_revision,
* @{
*/
-/* A word about the implementation of working copy property storage:
- *
- * Since properties are key/val pairs, you'd think we store them in
- * some sort of Berkeley DB-ish format, and even store pending changes
- * to them that way too.
- *
- * However, we already have libsvn_subr/hashdump.c working, and it
- * uses a human-readable format. That will be very handy when we're
- * debugging, and presumably we will not be dealing with any huge
- * properties or property lists initially. Therefore, we will
- * continue to use hashdump as the internal mechanism for storing and
- * reading from property lists, but note that the interface here is
- * _not_ dependent on that. We can swap in a DB-based implementation
- * at any time and users of this library will never know the
- * difference.
- */
-
/** Set @a *props to a hash table mapping <tt>char *</tt> names onto
* <tt>svn_string_t *</tt> values for all the regular properties of
* @a local_abspath. Allocate the table, names, and values in
@@ -5884,19 +6077,29 @@ svn_wc_prop_get(const svn_string_t **value,
* NULL, remove property @a name from @a local_abspath. Use @a wc_ctx to
* access @a local_abspath.
*
- * If @a skip_checks is TRUE, do no validity checking. But if @a
- * skip_checks is FALSE, and @a name is not a valid property for @a
- * path, return an error, either #SVN_ERR_ILLEGAL_TARGET (if the
+ * @a name may be a regular property or a "wc property". If @a name is
+ * an "entry property", return the error #SVN_ERR_BAD_PROP_KIND (even if
+ * @a skip_checks is TRUE).
+ *
+ * If @a name is a "wc property", then just update the WC DAV cache for
+ * @a local_abspath with @a name and @a value. In this case, @a depth
+ * must be #svn_depth_empty.
+ *
+ * The rest of this description applies when @a name is a regular property.
+ *
+ * If @a name is a name in the reserved "svn:" name space, and @a value is
+ * non-null, then canonicalize the property value and check the property
+ * name and value as documented for svn_wc_canonicalize_svn_prop().
+ * @a skip_checks controls the level of checking as documented there.
+ *
+ * Return an error if the canonicalization or the check fails.
+ * The error will be either #SVN_ERR_ILLEGAL_TARGET (if the
* property is not appropriate for @a path), or
* #SVN_ERR_BAD_MIME_TYPE (if @a name is "svn:mime-type", but @a value
* is not a valid mime-type).
+ * ### That is not currently right -- several other errors can be raised.
*
- * @a depth follows the usual semeatic for depth. If the property is a
- * wc property, @a depth must be #svn_depth_empty.
- *
- * @a name may be a wc property or a regular property; but if it is an
- * entry property, return the error #SVN_ERR_BAD_PROP_KIND, even if
- * @a skip_checks is TRUE.
+ * @a depth follows the usual semantics for depth.
*
* @a changelist_filter is an array of <tt>const char *</tt> changelist
* names, used as a restrictive filter on items whose properties are
@@ -5914,6 +6117,14 @@ svn_wc_prop_get(const svn_string_t **value,
*
* Use @a scratch_pool for temporary allocation.
*
+ * @note If the caller is setting both svn:mime-type and svn:eol-style in
+ * separate calls, and @a skip_checks is false, there is an ordering
+ * dependency between them, as the validity check for svn:eol-style makes
+ * use of the current value of svn:mime-type.
+ *
+ * ### The error code on validity check failure should be specified, and
+ * should be a single code or a very small set of possibilities.
+ *
* @since New in 1.7.
*/
svn_error_t *
@@ -5932,7 +6143,7 @@ svn_wc_prop_set4(svn_wc_context_t *wc_ctx,
/** Similar to svn_wc_prop_set4(), but with a #svn_wc_adm_access_t /
* relative path parameter pair, no @a depth parameter, no changelist
- * filtering (for the depth-based property setting), and no cancelation.
+ * filtering (for the depth-based property setting), and no cancellation.
*
* @since New in 1.6.
* @deprecated Provided for backwards compatibility with the 1.6 API.
@@ -6016,6 +6227,8 @@ svn_wc_is_entry_prop(const char *name);
* (Currently, this is used if you are attempting to set the
* #SVN_PROP_EOL_STYLE property, to make sure that the value matches
* the mime type and contents.)
+ *
+ * @since New in 1.5.
*/
typedef svn_error_t *(*svn_wc_canonicalize_svn_prop_get_file_t)(
const svn_string_t **mime_type,
@@ -6029,19 +6242,61 @@ typedef svn_error_t *(*svn_wc_canonicalize_svn_prop_get_file_t)(
*
* If the property is not appropriate for a node of kind @a kind, or
* is otherwise invalid, throw an error. Otherwise, set @a *propval_p
- * to a canonicalized version of the property value. If @a
- * skip_some_checks is TRUE, only some validity checks are taken.
+ * to a canonicalized version of the property value.
+ *
+ * The exact set of canonicalizations and checks may vary across different
+ * versions of this API. Currently:
+ *
+ * - svn:executable
+ * - svn:needs-lock
+ * - svn:special
+ * - set the value to '*'
+ *
+ * - svn:keywords
+ * - strip leading and trailing white space
+ *
+ * - svn:ignore
+ * - svn:global-ignores
+ * - svn:auto-props
+ * - add a final a newline character if missing
*
- * Some validity checks require access to the contents and MIME type
- * of the target if it is a file; they will call @a prop_getter with @a
- * getter_baton, which then needs to set the MIME type and print the
- * contents of the file to the given stream.
+ * - svn:externals
+ * - add a final a newline character if missing
+ * - check for valid syntax
+ * - check for no duplicate entries
+ *
+ * - svn:mergeinfo
+ * - canonicalize
+ * - check for validity
+ *
+ * Also, unless @a skip_some_checks is TRUE:
+ *
+ * - svn:eol-style
+ * - strip leading and trailing white space
+ * - check value is recognized
+ * - check file content has a self-consistent EOL style
+ * (but not necessarily that it matches @a propval)
+ *
+ * - svn:mime-type
+ * - strip white space
+ * - check for reasonable syntax
+ *
+ * The EOL-style check (if not skipped) requires access to the contents and
+ * MIME type of the target if it is a file. It will call @a prop_getter with
+ * @a getter_baton. The callback must set the MIME type and/or write the
+ * contents of the file to the given stream. If @a skip_some_checks is true,
+ * then @a prop_getter is not used and may be NULL.
*
* @a path should be the path of the file in question; it is only used
* for error messages.
*
+ * ### The error code on validity check failure should be specified, and
+ * should be a single code or a very small set of possibilities.
+ *
* ### This is not actually related to the WC, but it does need to call
- * ### svn_wc_parse_externals_description2.
+ * ### svn_wc_parse_externals_description3.
+ *
+ * @since New in 1.5.
*/
svn_error_t *
svn_wc_canonicalize_svn_prop(const svn_string_t **propval_p,
@@ -6063,6 +6318,10 @@ svn_wc_canonicalize_svn_prop(const svn_string_t **propval_p,
*/
/**
+ * DEPRECATED -- please use APIs from svn_client.h
+ *
+ * ---
+ *
* Return an @a editor/@a edit_baton for diffing a working copy against the
* repository. The editor is allocated in @a result_pool; temporary
* calculations are performed in @a scratch_pool.
@@ -6094,10 +6353,13 @@ svn_wc_canonicalize_svn_prop(const svn_string_t **propval_p,
* @a show_copies_as_adds determines whether paths added with history will
* appear as a diff against their copy source, or whether such paths will
* appear as if they were newly added in their entirety.
+ * @a show_copies_as_adds implies not @a ignore_ancestry.
*
* If @a use_git_diff_format is TRUE, copied paths will be treated as added
* if they weren't modified after being copied. This allows the callbacks
* to generate appropriate --git diff headers for such files.
+ * @a use_git_diff_format implies @a show_copies_as_adds, and as such implies
+ * not @a ignore_ancestry.
*
* Normally, the difference from repository->working_copy is shown.
* If @a reverse_order is TRUE, then show working_copy->repository diffs.
@@ -6116,7 +6378,9 @@ svn_wc_canonicalize_svn_prop(const svn_string_t **propval_p,
* editor.
*
* @since New in 1.7.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_wc_get_diff_editor6(const svn_delta_editor_t **editor,
void **edit_baton,
@@ -6489,10 +6753,11 @@ typedef enum svn_wc_merge_outcome_t
* receive the changes, then translated back again.
*
* If @a target_abspath is absent, or present but not under version
- * control, then set @a *merge_outcome to #svn_wc_merge_no_merge and
+ * control, then set @a *merge_content_outcome to #svn_wc_merge_no_merge and
* return success without merging anything. (The reasoning is that if
* the file is not versioned, then it is probably unrelated to the
- * changes being considered, so they should not be merged into it.)
+ * changes being considered, so they should not be merged into it.
+ * Furthermore, merging into an unversioned file is a lossy operation.)
*
* @a dry_run determines whether the working copy is modified. When it
* is @c FALSE the merge will cause @a target_abspath to be modified, when
@@ -6506,8 +6771,16 @@ typedef enum svn_wc_merge_outcome_t
* svn_diff_file_options_parse()). @a merge_options must contain
* <tt>const char *</tt> elements.
*
- * The outcome of the merge is returned in @a *merge_outcome. If there
- * is a conflict and @a dry_run is @c FALSE, then attempt to call @a
+ * If @a merge_props_state is non-NULL, merge @a prop_diff into the
+ * working properties before merging the text. (If @a merge_props_state
+ * is NULL, do not merge any property changes; in this case, @a prop_diff
+ * is only used to help determine the text merge result.) Handle any
+ * conflicts as described for svn_wc_merge_props3(), with the parameters
+ * @a dry_run, @a conflict_func and @a conflict_baton. Return the
+ * outcome of the property merge in @a *merge_props_state.
+ *
+ * The outcome of the text merge is returned in @a *merge_content_outcome. If
+ * there is a conflict and @a dry_run is @c FALSE, then attempt to call @a
* conflict_func with @a conflict_baton (if non-NULL). If the
* conflict callback cannot resolve the conflict, then:
*
@@ -6538,12 +6811,57 @@ typedef enum svn_wc_merge_outcome_t
* begins tracking the two backup files and the version information.
*
* If @a dry_run is @c TRUE no files are changed. The outcome of the merge
- * is returned in @a *merge_outcome.
+ * is returned in @a *merge_content_outcome.
+ * ### (and what about @a *merge_props_state?)
+ *
+ * ### BH: Two kinds of outcome is not how it should be.
+ *
+ * ### For text, we report the outcome as 'merged' if there was some
+ * incoming change that we dealt with (even if we decided to no-op?)
+ * but the callers then convert this outcome into a notification
+ * of 'merged' only if there was already a local modification;
+ * otherwise they notify it as simply 'updated'. But for props
+ * we report a notify state of 'merged' here if there was an
+ * incoming change regardless of the local-mod state. Inconsistent.
*
* Use @a scratch_pool for any temporary allocation.
*
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_wc_merge5(enum svn_wc_merge_outcome_t *merge_content_outcome,
+ enum svn_wc_notify_state_t *merge_props_state,
+ svn_wc_context_t *wc_ctx,
+ const char *left_abspath,
+ const char *right_abspath,
+ const char *target_abspath,
+ const char *left_label,
+ const char *right_label,
+ const char *target_label,
+ const svn_wc_conflict_version_t *left_version,
+ const svn_wc_conflict_version_t *right_version,
+ svn_boolean_t dry_run,
+ const char *diff3_cmd,
+ const apr_array_header_t *merge_options,
+ apr_hash_t *original_props,
+ const apr_array_header_t *prop_diff,
+ svn_wc_conflict_resolver_func2_t conflict_func,
+ void *conflict_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool);
+
+/** Similar to svn_wc_merge5() but with @a merge_props_state and @a
+ * original_props always passed as NULL.
+ *
+ * Unlike svn_wc_merge5(), this function doesn't merge property
+ * changes. Callers of this function must first use
+ * svn_wc_merge_props3() to get this functionality.
+ *
* @since New in 1.7.
+ * @deprecated Provided for backwards compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_wc_merge4(enum svn_wc_merge_outcome_t *merge_outcome,
svn_wc_context_t *wc_ctx,
@@ -6565,6 +6883,7 @@ svn_wc_merge4(enum svn_wc_merge_outcome_t *merge_outcome,
void *cancel_baton,
apr_pool_t *scratch_pool);
+
/** Similar to svn_wc_merge4() but takes relative paths and an access
* baton. It doesn't support a cancel function or tracking origin version
* information.
@@ -6648,9 +6967,12 @@ svn_wc_merge(const char *left,
* If @a state is non-NULL, set @a *state to the state of the properties
* after the merge.
*
- * If conflicts are found when merging working properties, they are
- * described in a temporary .prej file (or appended to an already-existing
- * .prej file), and the entry is marked "conflicted".
+ * If a conflict is found when merging a property, and @a dry_run is
+ * false and @a conflict_func is not null, then call @a conflict_func
+ * with @a conflict_baton and a description of the conflict. If any
+ * conflicts are not resolved by such callbacks, describe the unresolved
+ * conflicts in a temporary .prej file (or append to an already-existing
+ * .prej file) and mark the path as conflicted in the WC DB.
*
* If @a cancel_func is non-NULL, invoke it with @a cancel_baton at various
* points during the operation. If it returns an error (typically
@@ -6685,8 +7007,9 @@ svn_wc_merge_props3(svn_wc_notify_state_t *state,
*
* This function has the @a base_merge parameter which (when TRUE) will
* apply @a propchanges to this node's pristine set of properties. This
- * functionality is not supported on newer APIs -- pristine information
- * should only be changed through an update editor drive.
+ * functionality is not supported since API version 1.7 and will give an
+ * error if requested (unless @a dry_run is TRUE). For details see
+ * 'notes/api-errata/1.7/wc006.txt'.
*
* Uses a svn_wc_conflict_resolver_func_t conflict resolver instead of a
* svn_wc_conflict_resolver_func2_t.
@@ -6695,7 +7018,7 @@ svn_wc_merge_props3(svn_wc_notify_state_t *state,
* #SVN_ERR_UNVERSIONED_RESOURCE, when svn_wc_merge_props3 would return either
* #SVN_ERR_WC_PATH_NOT_FOUND or #SVN_ERR_WC_PATH_UNEXPECTED_STATUS.
*
- * @since New in 1.5.
+ * @since New in 1.5. The base_merge option is not supported since 1.7.
* @deprecated Provided for backward compatibility with the 1.6 API.
*/
SVN_DEPRECATED
@@ -6716,6 +7039,7 @@ svn_wc_merge_props2(svn_wc_notify_state_t *state,
* Same as svn_wc_merge_props2(), but with a @a conflict_func (and
* baton) of NULL.
*
+ * @since New in 1.3. The base_merge option is not supported since 1.7.
* @deprecated Provided for backward compatibility with the 1.4 API.
*/
SVN_DEPRECATED
@@ -6737,7 +7061,9 @@ svn_wc_merge_props(svn_wc_notify_state_t *state,
* correct for 'svn update', it's incorrect for 'svn merge', and can
* cause flawed behavior. (See issue #2035.)
*
+ * @since The base_merge option is not supported since 1.7.
* @deprecated Provided for backward compatibility with the 1.2 API.
+ * Replaced by svn_wc_merge_props().
*/
SVN_DEPRECATED
svn_error_t *
@@ -6838,7 +7164,7 @@ svn_wc_cleanup3(svn_wc_context_t *wc_ctx,
/**
* Similar to svn_wc_cleanup3() but uses relative paths and creates its own
- * swn_wc_context_t.
+ * #svn_wc_context_t.
*
* @since New in 1.2.
* @deprecated Provided for backward compatibility with the 1.6 API.
@@ -6893,7 +7219,7 @@ typedef svn_error_t * (*svn_wc_upgrade_get_repos_info_t)(
* (typically #SVN_ERR_CANCELLED), return that error immediately.
*
* For each directory converted, @a notify_func will be called with
- * in @a notify_baton action #svn_wc_notify_upgrade_path and as path
+ * in @a notify_baton action #svn_wc_notify_upgraded_path and as path
* the path of the upgraded directory. @a notify_func may be @c NULL
* if this notification is not needed.
*
@@ -6939,7 +7265,7 @@ typedef svn_error_t *(*svn_wc_relocation_validator3_t)(void *baton,
* the @a root argument.
*
* If @a root is TRUE, then the implementation should make sure that @a url
- * is the repository root. Else, it can be an URL inside the repository.
+ * is the repository root. Else, it can be a URL inside the repository.
*
* @deprecated Provided for backwards compatibility with the 1.4 API.
*/
@@ -7679,7 +8005,8 @@ svn_wc_set_changelist(const char *path,
/**
- * The callback type used by svn_client_get_changelists().
+ * The callback type used by svn_wc_get_changelists() and
+ * svn_client_get_changelists().
*
* On each invocation, @a path is a newly discovered member of the
* changelist, and @a baton is a private function closure.
@@ -7692,7 +8019,10 @@ typedef svn_error_t *(*svn_changelist_receiver_t) (void *baton,
apr_pool_t *pool);
-/* @since New in 1.7.
+/**
+ * ### TODO: Doc string, please.
+ *
+ * @since New in 1.7.
*/
svn_error_t *
svn_wc_get_changelists(svn_wc_context_t *wc_ctx,
@@ -7797,23 +8127,46 @@ svn_wc_exclude(svn_wc_context_t *wc_ctx,
/** @} */
/**
- * Set @a kind to the #svn_node_kind_t of @a abspath. Use @a wc_ctx
- * to access the working copy, and @a scratch_pool for all temporary
- * allocations.
+ * Set @a kind to the #svn_node_kind_t of @a abspath. Use @a wc_ctx to access
+ * the working copy, and @a scratch_pool for all temporary allocations.
*
* If @a abspath is not under version control, set @a kind to #svn_node_none.
- * If it is versioned but hidden and @a show_hidden is @c FALSE, also return
- * #svn_node_none.
*
- * ### What does hidden really mean?
- * ### What happens when show_hidden is TRUE?
+ * If @a show_hidden and @a show_deleted are both @c FALSE, the kind of
+ * scheduled for delete, administrative only 'not present' and excluded
+ * nodes is reported as #svn_node_none. This is recommended as a check
+ * for 'is there a versioned file or directory here?'
+ *
+ * If @a show_deleted is FALSE, but @a show_hidden is @c TRUE then only
+ * scheduled for delete and administrative only 'not present' nodes are
+ * reported as #svn_node_none. This is recommended as check for
+ * 'Can I add a node here?'
*
- * If the node's info is incomplete, it may or may not have a known node kind
- * set. If the kind is not known (yet), set @a kind to #svn_node_unknown.
- * Otherwise return the node kind even though the node is marked incomplete.
+ * If @a show_deleted is TRUE, but @a show_hidden is FALSE, then only
+ * administrative only 'not present' nodes and excluded nodes are reported as
+ * #svn_node_none. This behavior is the behavior bescribed as 'hidden'
+ * before Subversion 1.7.
+ *
+ * If @a show_hidden and @a show_deleted are both @c TRUE all nodes are
+ * reported.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_wc_read_kind2(svn_node_kind_t *kind,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ svn_boolean_t show_deleted,
+ svn_boolean_t show_hidden,
+ apr_pool_t *scratch_pool);
+
+/** Similar to svn_wc_read_kind2() but with @a show_deleted always
+ * passed as TRUE.
*
* @since New in 1.7.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_wc_read_kind(svn_node_kind_t *kind,
svn_wc_context_t *wc_ctx,
diff --git a/subversion/include/svn_xml.h b/subversion/include/svn_xml.h
index 9826308..90969be 100644
--- a/subversion/include/svn_xml.h
+++ b/subversion/include/svn_xml.h
@@ -228,7 +228,7 @@ svn_xml_signal_bailout(svn_error_t *error,
*/
const char *
svn_xml_get_attr_value(const char *name,
- const char **atts);
+ const char *const *atts);
@@ -297,7 +297,10 @@ svn_xml_make_header2(svn_stringbuf_t **str,
const char *encoding,
apr_pool_t *pool);
-/* Like svn_xml_make_header2, but does not emit encoding information. */
+/** Like svn_xml_make_header2(), but does not emit encoding information.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ */
SVN_DEPRECATED
void
svn_xml_make_header(svn_stringbuf_t **str,
diff --git a/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c b/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c
index 407249d..030023a 100644
--- a/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c
+++ b/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c
@@ -28,18 +28,20 @@
/*** Includes. ***/
#include <apr_pools.h>
+#include <apr_strings.h>
+#include <glib.h>
+#include <gnome-keyring.h>
+
#include "svn_auth.h"
#include "svn_config.h"
#include "svn_error.h"
+#include "svn_hash.h"
#include "svn_pools.h"
#include "private/svn_auth_private.h"
#include "svn_private_config.h"
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <gnome-keyring.h>
/*-----------------------------------------------------------------------*/
@@ -47,120 +49,19 @@
/*-----------------------------------------------------------------------*/
-struct gnome_keyring_baton
-{
- const char *keyring_name;
- GnomeKeyringInfo *info;
- GMainLoop *loop;
-};
-
-
-/* Callback function to destroy gnome_keyring_baton. */
-static void
-callback_destroy_data_keyring(void *data)
-{
- struct gnome_keyring_baton *key_info = data;
-
- if (data == NULL)
- return;
-
- free((void*)key_info->keyring_name);
- key_info->keyring_name = NULL;
-
- if (key_info->info)
- {
- gnome_keyring_info_free(key_info->info);
- key_info->info = NULL;
- }
-
- return;
-}
-
-
-/* Callback function to complete the keyring operation. */
-static void
-callback_done(GnomeKeyringResult result,
- gpointer data)
-{
- struct gnome_keyring_baton *key_info = data;
-
- g_main_loop_quit(key_info->loop);
- return;
-}
-
-
-/* Callback function to get the keyring info. */
-static void
-callback_get_info_keyring(GnomeKeyringResult result,
- GnomeKeyringInfo *info,
- void *data)
-{
- struct gnome_keyring_baton *key_info = data;
-
- if (result == GNOME_KEYRING_RESULT_OK && info != NULL)
- {
- key_info->info = gnome_keyring_info_copy(info);
- }
- else
- {
- if (key_info->info != NULL)
- gnome_keyring_info_free(key_info->info);
-
- key_info->info = NULL;
- }
-
- g_main_loop_quit(key_info->loop);
-
- return;
-}
-
-
-/* Callback function to get the default keyring string name. */
-static void
-callback_default_keyring(GnomeKeyringResult result,
- const char *string,
- void *data)
-{
- struct gnome_keyring_baton *key_info = data;
-
- if (result == GNOME_KEYRING_RESULT_OK && string != NULL)
- {
- key_info->keyring_name = strdup(string);
- }
- else
- {
- free((void*)key_info->keyring_name);
- key_info->keyring_name = NULL;
- }
-
- g_main_loop_quit(key_info->loop);
-
- return;
-}
-
-/* Returns the default keyring name. */
+/* Returns the default keyring name, allocated in RESULT_POOL. */
static char*
-get_default_keyring_name(apr_pool_t *pool)
+get_default_keyring_name(apr_pool_t *result_pool)
{
- char *def = NULL;
- struct gnome_keyring_baton key_info;
+ char *name, *def;
+ GnomeKeyringResult gkr;
- key_info.info = NULL;
- key_info.keyring_name = NULL;
+ gkr = gnome_keyring_get_default_keyring_sync(&name);
+ if (gkr != GNOME_KEYRING_RESULT_OK)
+ return NULL;
- /* Finds default keyring. */
- key_info.loop = g_main_loop_new(NULL, FALSE);
- gnome_keyring_get_default_keyring(callback_default_keyring, &key_info, NULL);
- g_main_loop_run(key_info.loop);
-
- if (key_info.keyring_name == NULL)
- {
- callback_destroy_data_keyring(&key_info);
- return NULL;
- }
-
- def = strdup(key_info.keyring_name);
- callback_destroy_data_keyring(&key_info);
+ def = apr_pstrdup(result_pool, name);
+ g_free(name);
return def;
}
@@ -169,28 +70,22 @@ get_default_keyring_name(apr_pool_t *pool)
static svn_boolean_t
check_keyring_is_locked(const char *keyring_name)
{
- struct gnome_keyring_baton key_info;
+ GnomeKeyringInfo *info;
+ svn_boolean_t locked;
+ GnomeKeyringResult gkr;
- key_info.info = NULL;
- key_info.keyring_name = NULL;
+ gkr = gnome_keyring_get_info_sync(keyring_name, &info);
+ if (gkr != GNOME_KEYRING_RESULT_OK)
+ return FALSE;
- /* Get details about the default keyring. */
- key_info.loop = g_main_loop_new(NULL, FALSE);
- gnome_keyring_get_info(keyring_name, callback_get_info_keyring, &key_info,
- NULL);
- g_main_loop_run(key_info.loop);
+ if (gnome_keyring_info_get_is_locked(info))
+ locked = TRUE;
+ else
+ locked = FALSE;
- if (key_info.info == NULL)
- {
- callback_destroy_data_keyring(&key_info);
- return FALSE;
- }
+ gnome_keyring_info_free(info);
- /* Check if keyring is locked. */
- if (gnome_keyring_info_get_is_locked(key_info.info))
- return TRUE;
- else
- return FALSE;
+ return locked;
}
/* Unlock the KEYRING_NAME with the KEYRING_PASSWORD. If KEYRING was
@@ -200,40 +95,73 @@ unlock_gnome_keyring(const char *keyring_name,
const char *keyring_password,
apr_pool_t *pool)
{
- struct gnome_keyring_baton key_info;
+ GnomeKeyringInfo *info;
+ GnomeKeyringResult gkr;
+
+ gkr = gnome_keyring_get_info_sync(keyring_name, &info);
+ if (gkr != GNOME_KEYRING_RESULT_OK)
+ return FALSE;
+
+ gkr = gnome_keyring_unlock_sync(keyring_name, keyring_password);
+ gnome_keyring_info_free(info);
+ if (gkr != GNOME_KEYRING_RESULT_OK)
+ return FALSE;
- key_info.info = NULL;
- key_info.keyring_name = NULL;
+ return check_keyring_is_locked(keyring_name);
+}
- /* Get details about the default keyring. */
- key_info.loop = g_main_loop_new(NULL, FALSE);
- gnome_keyring_get_info(keyring_name, callback_get_info_keyring,
- &key_info, NULL);
- g_main_loop_run(key_info.loop);
- if (key_info.info == NULL)
+/* There is a race here: this ensures keyring is unlocked just now,
+ but will it still be unlocked when we use it? */
+static svn_error_t *
+ensure_gnome_keyring_is_unlocked(svn_boolean_t non_interactive,
+ apr_hash_t *parameters,
+ apr_pool_t *scratch_pool)
+{
+ const char *default_keyring = get_default_keyring_name(scratch_pool);
+
+ if (! non_interactive)
{
- callback_destroy_data_keyring(&key_info);
- return FALSE;
+ svn_auth_gnome_keyring_unlock_prompt_func_t unlock_prompt_func =
+ svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_FUNC);
+ void *unlock_prompt_baton =
+ svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_BATON);
+
+ char *keyring_password;
+
+ if (unlock_prompt_func && check_keyring_is_locked(default_keyring))
+ {
+ SVN_ERR((*unlock_prompt_func)(&keyring_password,
+ default_keyring,
+ unlock_prompt_baton,
+ scratch_pool));
+
+ /* If keyring is locked give up and try the next provider. */
+ if (! unlock_gnome_keyring(default_keyring, keyring_password,
+ scratch_pool))
+ return SVN_NO_ERROR;
+ }
}
else
{
- key_info.loop = g_main_loop_new(NULL, FALSE);
- gnome_keyring_unlock(keyring_name, keyring_password,
- callback_done, &key_info, NULL);
- g_main_loop_run(key_info.loop);
+ if (check_keyring_is_locked(default_keyring))
+ {
+ return svn_error_create(SVN_ERR_AUTHN_CREDS_UNAVAILABLE, NULL,
+ _("GNOME Keyring is locked and "
+ "we are non-interactive"));
+ }
}
- callback_destroy_data_keyring(&key_info);
- if (check_keyring_is_locked(keyring_name))
- return FALSE;
- return TRUE;
+ return SVN_NO_ERROR;
}
-/* Implementation of password_get_t that retrieves the password
+/* Implementation of svn_auth__password_get_t that retrieves the password
from GNOME Keyring. */
-static svn_boolean_t
-password_get_gnome_keyring(const char **password,
+static svn_error_t *
+password_get_gnome_keyring(svn_boolean_t *done,
+ const char **password,
apr_hash_t *creds,
const char *realmstring,
const char *username,
@@ -241,22 +169,14 @@ password_get_gnome_keyring(const char **password,
svn_boolean_t non_interactive,
apr_pool_t *pool)
{
- char *default_keyring = NULL;
GnomeKeyringResult result;
GList *items;
- svn_boolean_t ret = FALSE;
- if (! dbus_bus_get(DBUS_BUS_SESSION, NULL))
- return FALSE;
+ *done = FALSE;
- if (! gnome_keyring_is_available())
- return FALSE;
-
- default_keyring = get_default_keyring_name(pool);
+ SVN_ERR(ensure_gnome_keyring_is_unlocked(non_interactive, parameters, pool));
- if (! apr_hash_get(parameters,
- "gnome-keyring-opening-failed",
- APR_HASH_KEY_STRING))
+ if (! svn_hash_gets(parameters, "gnome-keyring-opening-failed"))
{
result = gnome_keyring_find_network_password_sync(username, realmstring,
NULL, NULL, NULL, NULL,
@@ -278,7 +198,7 @@ password_get_gnome_keyring(const char **password,
if (len > 0)
{
*password = apr_pstrmemdup(pool, item->password, len);
- ret = TRUE;
+ *done = TRUE;
}
}
gnome_keyring_network_password_list_free(items);
@@ -286,21 +206,17 @@ password_get_gnome_keyring(const char **password,
}
else
{
- apr_hash_set(parameters,
- "gnome-keyring-opening-failed",
- APR_HASH_KEY_STRING,
- "");
+ svn_hash_sets(parameters, "gnome-keyring-opening-failed", "");
}
- free(default_keyring);
-
- return ret;
+ return SVN_NO_ERROR;
}
-/* Implementation of password_set_t that stores the password in
+/* Implementation of svn_auth__password_set_t that stores the password in
GNOME Keyring. */
-static svn_boolean_t
-password_set_gnome_keyring(apr_hash_t *creds,
+static svn_error_t *
+password_set_gnome_keyring(svn_boolean_t *done,
+ apr_hash_t *creds,
const char *realmstring,
const char *username,
const char *password,
@@ -308,21 +224,14 @@ password_set_gnome_keyring(apr_hash_t *creds,
svn_boolean_t non_interactive,
apr_pool_t *pool)
{
- char *default_keyring = NULL;
GnomeKeyringResult result;
guint32 item_id;
- if (! dbus_bus_get(DBUS_BUS_SESSION, NULL))
- return FALSE;
-
- if (! gnome_keyring_is_available())
- return FALSE;
+ *done = FALSE;
- default_keyring = get_default_keyring_name(pool);
+ SVN_ERR(ensure_gnome_keyring_is_unlocked(non_interactive, parameters, pool));
- if (! apr_hash_get(parameters,
- "gnome-keyring-opening-failed",
- APR_HASH_KEY_STRING))
+ if (! svn_hash_gets(parameters, "gnome-keyring-opening-failed"))
{
result = gnome_keyring_set_network_password_sync(NULL, /* default keyring */
username, realmstring,
@@ -336,15 +245,11 @@ password_set_gnome_keyring(apr_hash_t *creds,
}
if (result != GNOME_KEYRING_RESULT_OK)
{
- apr_hash_set(parameters,
- "gnome-keyring-opening-failed",
- APR_HASH_KEY_STRING,
- "");
+ svn_hash_sets(parameters, "gnome-keyring-opening-failed", "");
}
- free(default_keyring);
-
- return result == GNOME_KEYRING_RESULT_OK;
+ *done = (result == GNOME_KEYRING_RESULT_OK);
+ return SVN_NO_ERROR;
}
/* Get cached encrypted credentials from the simple provider's cache. */
@@ -356,50 +261,12 @@ simple_gnome_keyring_first_creds(void **credentials,
const char *realmstring,
apr_pool_t *pool)
{
- svn_boolean_t non_interactive = apr_hash_get(parameters,
- SVN_AUTH_PARAM_NON_INTERACTIVE,
- APR_HASH_KEY_STRING) != NULL;
- const char *default_keyring = get_default_keyring_name(pool);
- if (! non_interactive)
- {
- svn_auth_gnome_keyring_unlock_prompt_func_t unlock_prompt_func =
- apr_hash_get(parameters,
- SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_FUNC,
- APR_HASH_KEY_STRING);
- void *unlock_prompt_baton =
- apr_hash_get(parameters, SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_BATON,
- APR_HASH_KEY_STRING);
-
- char *keyring_password;
-
- if (unlock_prompt_func && check_keyring_is_locked(default_keyring))
- {
- SVN_ERR((*unlock_prompt_func)(&keyring_password,
- default_keyring,
- unlock_prompt_baton,
- pool));
-
- /* If keyring is locked give up and try the next provider. */
- if (! unlock_gnome_keyring(default_keyring, keyring_password, pool))
- return SVN_NO_ERROR;
- }
- }
- else
- {
- if (check_keyring_is_locked(default_keyring))
- {
- return svn_error_create(SVN_ERR_AUTHN_CREDS_UNAVAILABLE, NULL,
- _("GNOME Keyring is locked and "
- "we are non-interactive"));
- }
- }
- return svn_auth__simple_first_creds_helper
- (credentials,
- iter_baton, provider_baton,
- parameters, realmstring,
- password_get_gnome_keyring,
- SVN_AUTH__GNOME_KEYRING_PASSWORD_TYPE,
- pool);
+ return svn_auth__simple_creds_cache_get(credentials,
+ iter_baton, provider_baton,
+ parameters, realmstring,
+ password_get_gnome_keyring,
+ SVN_AUTH__GNOME_KEYRING_PASSWORD_TYPE,
+ pool);
}
/* Save encrypted credentials to the simple provider's cache. */
@@ -411,58 +278,22 @@ simple_gnome_keyring_save_creds(svn_boolean_t *saved,
const char *realmstring,
apr_pool_t *pool)
{
- svn_boolean_t non_interactive = apr_hash_get(parameters,
- SVN_AUTH_PARAM_NON_INTERACTIVE,
- APR_HASH_KEY_STRING) != NULL;
- const char *default_keyring = get_default_keyring_name(pool);
- if (! non_interactive)
- {
- svn_auth_gnome_keyring_unlock_prompt_func_t unlock_prompt_func =
- apr_hash_get(parameters,
- SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_FUNC,
- APR_HASH_KEY_STRING);
- void *unlock_prompt_baton =
- apr_hash_get(parameters, SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_BATON,
- APR_HASH_KEY_STRING);
-
- char *keyring_password;
-
- if (unlock_prompt_func && check_keyring_is_locked(default_keyring))
- {
- SVN_ERR((*unlock_prompt_func)(&keyring_password,
- default_keyring,
- unlock_prompt_baton,
- pool));
-
- /* If keyring is locked give up and try the next provider. */
- if (! unlock_gnome_keyring(default_keyring, keyring_password, pool))
- return SVN_NO_ERROR;
- }
- }
- else
- {
- if (check_keyring_is_locked(default_keyring))
- {
- return svn_error_create(SVN_ERR_AUTHN_CREDS_NOT_SAVED, NULL,
- _("GNOME Keyring is locked and "
- "we are non-interactive"));
- }
- }
- return svn_auth__simple_save_creds_helper
- (saved, credentials,
- provider_baton, parameters,
- realmstring,
- password_set_gnome_keyring,
- SVN_AUTH__GNOME_KEYRING_PASSWORD_TYPE,
- pool);
+ return svn_auth__simple_creds_cache_set(saved, credentials,
+ provider_baton, parameters,
+ realmstring,
+ password_set_gnome_keyring,
+ SVN_AUTH__GNOME_KEYRING_PASSWORD_TYPE,
+ pool);
}
+#if GLIB_CHECK_VERSION(2,6,0)
static void
log_noop(const gchar *log_domain, GLogLevelFlags log_level,
const gchar *message, gpointer user_data)
{
/* do nothing */
}
+#endif
static void
init_gnome_keyring(void)
@@ -478,7 +309,9 @@ init_gnome_keyring(void)
suppress stderr spam for not only libgnome-keyring, but for
anything else the app is linked to that uses glib logging and
doesn't specify a log_domain. */
+#if GLIB_CHECK_VERSION(2,6,0)
g_log_set_default_handler(log_noop, NULL);
+#endif
}
static const svn_auth_provider_t gnome_keyring_simple_provider = {
@@ -518,50 +351,10 @@ ssl_client_cert_pw_gnome_keyring_first_creds(void **credentials,
const char *realmstring,
apr_pool_t *pool)
{
- svn_boolean_t non_interactive = apr_hash_get(parameters,
- SVN_AUTH_PARAM_NON_INTERACTIVE,
- APR_HASH_KEY_STRING) != NULL;
- const char *default_keyring = get_default_keyring_name(pool);
- if (! non_interactive)
- {
- svn_auth_gnome_keyring_unlock_prompt_func_t unlock_prompt_func =
- apr_hash_get(parameters,
- SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_FUNC,
- APR_HASH_KEY_STRING);
- void *unlock_prompt_baton =
- apr_hash_get(parameters, SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_BATON,
- APR_HASH_KEY_STRING);
-
- char *keyring_password;
-
- if (unlock_prompt_func && check_keyring_is_locked(default_keyring))
- {
- SVN_ERR((*unlock_prompt_func)(&keyring_password,
- default_keyring,
- unlock_prompt_baton,
- pool));
-
- /* If keyring is locked give up and try the next provider. */
- if (! unlock_gnome_keyring(default_keyring, keyring_password, pool))
- return SVN_NO_ERROR;
- }
- }
- else
- {
- if (check_keyring_is_locked(default_keyring))
- {
- return svn_error_create(SVN_ERR_AUTHN_CREDS_UNAVAILABLE, NULL,
- _("GNOME Keyring is locked and "
- "we are non-interactive"));
- }
- }
- return svn_auth__ssl_client_cert_pw_file_first_creds_helper
- (credentials,
- iter_baton, provider_baton,
- parameters, realmstring,
- password_get_gnome_keyring,
- SVN_AUTH__GNOME_KEYRING_PASSWORD_TYPE,
- pool);
+ return svn_auth__ssl_client_cert_pw_cache_get(
+ credentials, iter_baton, provider_baton, parameters, realmstring,
+ password_get_gnome_keyring, SVN_AUTH__GNOME_KEYRING_PASSWORD_TYPE,
+ pool);
}
/* Save encrypted credentials to the ssl client cert password provider's
@@ -574,50 +367,10 @@ ssl_client_cert_pw_gnome_keyring_save_creds(svn_boolean_t *saved,
const char *realmstring,
apr_pool_t *pool)
{
- svn_boolean_t non_interactive = apr_hash_get(parameters,
- SVN_AUTH_PARAM_NON_INTERACTIVE,
- APR_HASH_KEY_STRING) != NULL;
- const char *default_keyring = get_default_keyring_name(pool);
- if (! non_interactive)
- {
- svn_auth_gnome_keyring_unlock_prompt_func_t unlock_prompt_func =
- apr_hash_get(parameters,
- SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_FUNC,
- APR_HASH_KEY_STRING);
- void *unlock_prompt_baton =
- apr_hash_get(parameters, SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_BATON,
- APR_HASH_KEY_STRING);
-
- char *keyring_password;
-
- if (unlock_prompt_func && check_keyring_is_locked(default_keyring))
- {
- SVN_ERR((*unlock_prompt_func)(&keyring_password,
- default_keyring,
- unlock_prompt_baton,
- pool));
-
- /* If keyring is locked give up and try the next provider. */
- if (! unlock_gnome_keyring(default_keyring, keyring_password, pool))
- return SVN_NO_ERROR;
- }
- }
- else
- {
- if (check_keyring_is_locked(default_keyring))
- {
- return svn_error_create(SVN_ERR_AUTHN_CREDS_NOT_SAVED, NULL,
- _("GNOME Keyring is locked and "
- "we are non-interactive"));
- }
- }
- return svn_auth__ssl_client_cert_pw_file_save_creds_helper
- (saved, credentials,
- provider_baton, parameters,
- realmstring,
- password_set_gnome_keyring,
- SVN_AUTH__GNOME_KEYRING_PASSWORD_TYPE,
- pool);
+ return svn_auth__ssl_client_cert_pw_cache_set(
+ saved, credentials, provider_baton, parameters, realmstring,
+ password_set_gnome_keyring, SVN_AUTH__GNOME_KEYRING_PASSWORD_TYPE,
+ pool);
}
static const svn_auth_provider_t gnome_keyring_ssl_client_cert_pw_provider = {
diff --git a/subversion/libsvn_auth_kwallet/kwallet.cpp b/subversion/libsvn_auth_kwallet/kwallet.cpp
index f2b0d40..e1a345e 100644
--- a/subversion/libsvn_auth_kwallet/kwallet.cpp
+++ b/subversion/libsvn_auth_kwallet/kwallet.cpp
@@ -33,6 +33,17 @@
#include <apr_pools.h>
#include <apr_strings.h>
+
+#include <dbus/dbus.h>
+#include <QtCore/QCoreApplication>
+#include <QtCore/QString>
+
+#include <kaboutdata.h>
+#include <kcmdlineargs.h>
+#include <kcomponentdata.h>
+#include <klocalizedstring.h>
+#include <kwallet.h>
+
#include "svn_auth.h"
#include "svn_config.h"
#include "svn_error.h"
@@ -45,21 +56,14 @@
#include "svn_private_config.h"
-#include <dbus/dbus.h>
-#include <QtCore/QCoreApplication>
-#include <QtCore/QString>
-
-#include <kaboutdata.h>
-#include <kcmdlineargs.h>
-#include <kcomponentdata.h>
-#include <klocalizedstring.h>
-#include <kwallet.h>
-
/*-----------------------------------------------------------------------*/
/* KWallet simple provider, puts passwords in KWallet */
/*-----------------------------------------------------------------------*/
+static int q_argc = 1;
+static char q_argv0[] = "svn"; // Build non-const char * from string constant
+static char *q_argv[] = { q_argv0 };
static const char *
get_application_name(apr_hash_t *parameters,
@@ -181,8 +185,9 @@ kwallet_terminate(void *data)
/* Implementation of svn_auth__password_get_t that retrieves
the password from KWallet. */
-static svn_boolean_t
-kwallet_password_get(const char **password,
+static svn_error_t *
+kwallet_password_get(svn_boolean_t *done,
+ const char **password,
apr_hash_t *creds,
const char *realmstring,
const char *username,
@@ -190,25 +195,32 @@ kwallet_password_get(const char **password,
svn_boolean_t non_interactive,
apr_pool_t *pool)
{
- if (non_interactive)
+ QString wallet_name = get_wallet_name(parameters);
+
+ *done = FALSE;
+
+ if (! dbus_bus_get(DBUS_BUS_SESSION, NULL))
{
- return FALSE;
+ return SVN_NO_ERROR;
}
- if (! dbus_bus_get(DBUS_BUS_SESSION, NULL))
+ if (non_interactive)
{
- return FALSE;
+ if (!KWallet::Wallet::isOpen(wallet_name))
+ return SVN_NO_ERROR;
+
+ /* There is a race here: the wallet was open just now, but will
+ it still be open when we come to use it below? */
}
QCoreApplication *app;
if (! qApp)
{
- int argc = 1;
- app = new QCoreApplication(argc, (char *[1]) {(char *) "svn"});
+ int argc = q_argc;
+ app = new QCoreApplication(argc, q_argv);
}
- KCmdLineArgs::init(1,
- (char *[1]) {(char *) "svn"},
+ KCmdLineArgs::init(q_argc, q_argv,
get_application_name(parameters, pool),
"subversion",
ki18n(get_application_name(parameters, pool)),
@@ -216,8 +228,6 @@ kwallet_password_get(const char **password,
ki18n("Version control system"),
KCmdLineArgs::CmdLineArgKDE);
KComponentData component_data(KCmdLineArgs::aboutData());
- svn_boolean_t ret = FALSE;
- QString wallet_name = get_wallet_name(parameters);
QString folder = QString::fromUtf8("Subversion");
QString key =
QString::fromUtf8(username) + "@" + QString::fromUtf8(realmstring);
@@ -238,21 +248,23 @@ kwallet_password_get(const char **password,
*password = apr_pstrmemdup(pool,
q_password.toUtf8().data(),
q_password.size());
- ret = TRUE;
+ *done = TRUE;
}
}
}
}
- apr_pool_cleanup_register(pool, parameters, kwallet_terminate, NULL);
+ apr_pool_cleanup_register(pool, parameters, kwallet_terminate,
+ apr_pool_cleanup_null);
- return ret;
+ return SVN_NO_ERROR;
}
/* Implementation of svn_auth__password_set_t that stores
the password in KWallet. */
-static svn_boolean_t
-kwallet_password_set(apr_hash_t *creds,
+static svn_error_t *
+kwallet_password_set(svn_boolean_t *done,
+ apr_hash_t *creds,
const char *realmstring,
const char *username,
const char *password,
@@ -260,25 +272,32 @@ kwallet_password_set(apr_hash_t *creds,
svn_boolean_t non_interactive,
apr_pool_t *pool)
{
- if (non_interactive)
+ QString wallet_name = get_wallet_name(parameters);
+
+ *done = FALSE;
+
+ if (! dbus_bus_get(DBUS_BUS_SESSION, NULL))
{
- return FALSE;
+ return SVN_NO_ERROR;
}
- if (! dbus_bus_get(DBUS_BUS_SESSION, NULL))
+ if (non_interactive)
{
- return FALSE;
+ if (!KWallet::Wallet::isOpen(wallet_name))
+ return SVN_NO_ERROR;
+
+ /* There is a race here: the wallet was open just now, but will
+ it still be open when we come to use it below? */
}
QCoreApplication *app;
if (! qApp)
{
- int argc = 1;
- app = new QCoreApplication(argc, (char *[1]) {(char *) "svn"});
+ int argc = q_argc;
+ app = new QCoreApplication(argc, q_argv);
}
- KCmdLineArgs::init(1,
- (char *[1]) {(char *) "svn"},
+ KCmdLineArgs::init(q_argc, q_argv,
get_application_name(parameters, pool),
"subversion",
ki18n(get_application_name(parameters, pool)),
@@ -286,9 +305,7 @@ kwallet_password_set(apr_hash_t *creds,
ki18n("Version control system"),
KCmdLineArgs::CmdLineArgKDE);
KComponentData component_data(KCmdLineArgs::aboutData());
- svn_boolean_t ret = FALSE;
QString q_password = QString::fromUtf8(password);
- QString wallet_name = get_wallet_name(parameters);
QString folder = QString::fromUtf8("Subversion");
KWallet::Wallet *wallet = get_wallet(wallet_name, parameters);
if (wallet)
@@ -307,14 +324,15 @@ kwallet_password_set(apr_hash_t *creds,
+ QString::fromUtf8(realmstring);
if (wallet->writePassword(key, q_password) == 0)
{
- ret = TRUE;
+ *done = TRUE;
}
}
}
- apr_pool_cleanup_register(pool, parameters, kwallet_terminate, NULL);
+ apr_pool_cleanup_register(pool, parameters, kwallet_terminate,
+ apr_pool_cleanup_null);
- return ret;
+ return SVN_NO_ERROR;
}
/* Get cached encrypted credentials from the simple provider's cache. */
@@ -326,14 +344,14 @@ kwallet_simple_first_creds(void **credentials,
const char *realmstring,
apr_pool_t *pool)
{
- return svn_auth__simple_first_creds_helper(credentials,
- iter_baton,
- provider_baton,
- parameters,
- realmstring,
- kwallet_password_get,
- SVN_AUTH__KWALLET_PASSWORD_TYPE,
- pool);
+ return svn_auth__simple_creds_cache_get(credentials,
+ iter_baton,
+ provider_baton,
+ parameters,
+ realmstring,
+ kwallet_password_get,
+ SVN_AUTH__KWALLET_PASSWORD_TYPE,
+ pool);
}
/* Save encrypted credentials to the simple provider's cache. */
@@ -345,13 +363,13 @@ kwallet_simple_save_creds(svn_boolean_t *saved,
const char *realmstring,
apr_pool_t *pool)
{
- return svn_auth__simple_save_creds_helper(saved, credentials,
- provider_baton,
- parameters,
- realmstring,
- kwallet_password_set,
- SVN_AUTH__KWALLET_PASSWORD_TYPE,
- pool);
+ return svn_auth__simple_creds_cache_set(saved, credentials,
+ provider_baton,
+ parameters,
+ realmstring,
+ kwallet_password_set,
+ SVN_AUTH__KWALLET_PASSWORD_TYPE,
+ pool);
}
static const svn_auth_provider_t kwallet_simple_provider = {
@@ -391,13 +409,12 @@ kwallet_ssl_client_cert_pw_first_creds(void **credentials,
const char *realmstring,
apr_pool_t *pool)
{
- return svn_auth__ssl_client_cert_pw_file_first_creds_helper
- (credentials,
- iter_baton, provider_baton,
- parameters, realmstring,
- kwallet_password_get,
- SVN_AUTH__KWALLET_PASSWORD_TYPE,
- pool);
+ return svn_auth__ssl_client_cert_pw_cache_get(credentials,
+ iter_baton, provider_baton,
+ parameters, realmstring,
+ kwallet_password_get,
+ SVN_AUTH__KWALLET_PASSWORD_TYPE,
+ pool);
}
/* Save encrypted credentials to the ssl client cert password provider's
@@ -410,13 +427,12 @@ kwallet_ssl_client_cert_pw_save_creds(svn_boolean_t *saved,
const char *realmstring,
apr_pool_t *pool)
{
- return svn_auth__ssl_client_cert_pw_file_save_creds_helper
- (saved, credentials,
- provider_baton, parameters,
- realmstring,
- kwallet_password_set,
- SVN_AUTH__KWALLET_PASSWORD_TYPE,
- pool);
+ return svn_auth__ssl_client_cert_pw_cache_set(saved, credentials,
+ provider_baton, parameters,
+ realmstring,
+ kwallet_password_set,
+ SVN_AUTH__KWALLET_PASSWORD_TYPE,
+ pool);
}
static const svn_auth_provider_t kwallet_ssl_client_cert_pw_provider = {
diff --git a/subversion/libsvn_client/add.c b/subversion/libsvn_client/add.c
index 69c74ef..f121bc8 100644
--- a/subversion/libsvn_client/add.c
+++ b/subversion/libsvn_client/add.c
@@ -47,6 +47,7 @@
#include "private/svn_client_private.h"
#include "private/svn_wc_private.h"
+#include "private/svn_ra_private.h"
#include "private/svn_magic.h"
#include "svn_private_config.h"
@@ -55,27 +56,6 @@
/*** Code. ***/
-/* This structure is used as baton for enumerating the config entries
- in the auto-props section.
-*/
-typedef struct auto_props_baton_t
-{
- /* the file name for which properties are searched */
- const char *filename;
-
- /* when this flag is set the hash contains svn:executable */
- svn_boolean_t have_executable;
-
- /* when mimetype is not NULL is set the hash contains svn:mime-type */
- const char *mimetype;
-
- /* the hash table for storing the property name/value pairs */
- apr_hash_t *properties;
-
- /* a pool used for allocating memory */
- apr_pool_t *pool;
-} auto_props_baton_t;
-
/* Remove leading and trailing white space from a C string, in place. */
static void
trim_string(char **pstr)
@@ -154,114 +134,98 @@ split_props(apr_array_header_t **props,
*props = temp_props;
}
-/* For one auto-props config entry (NAME, VALUE), if the filename pattern
- NAME matches BATON->filename case insensitively then add the properties
- listed in VALUE into BATON->properties.
- BATON must point to an auto_props_baton_t.
+/* PROPVALS is a hash mapping char * property names to const char * property
+ values. PROPERTIES can be empty but not NULL.
+
+ If FILENAME doesn't match the filename pattern PATTERN case insensitively,
+ the do nothing. Otherwise for each 'name':'value' pair in PROPVALS, add
+ a new entry mappying 'name' to a svn_string_t * wrapping the 'value' in
+ PROPERTIES. The svn_string_t is allocated in the pool used to allocate
+ PROPERTIES, but the char *'s from PROPVALS are re-used in PROPERTIES.
+ If PROPVALS contains a 'svn:mime-type' mapping, then set *MIMETYPE to
+ the mapped value. Likewise if PROPVALS contains a mapping for
+ svn:executable, then set *HAVE_EXECUTABLE to TRUE.
+
+ Use SCRATCH_POOL for temporary allocations.
*/
-static svn_boolean_t
-auto_props_enumerator(const char *name,
- const char *value,
- void *baton,
- apr_pool_t *pool)
+static void
+get_auto_props_for_pattern(apr_hash_t *properties,
+ const char **mimetype,
+ svn_boolean_t *have_executable,
+ const char *filename,
+ const char *pattern,
+ apr_hash_t *propvals,
+ apr_pool_t *scratch_pool)
{
- int i;
- auto_props_baton_t *autoprops = baton;
- apr_array_header_t *props;
-
- /* nothing to do here without a value */
- if (*value == 0)
- return TRUE;
+ apr_hash_index_t *hi;
/* check if filename matches and return if it doesn't */
- if (apr_fnmatch(name, autoprops->filename, APR_FNM_CASE_BLIND) == APR_FNM_NOMATCH)
- return TRUE;
+ if (apr_fnmatch(pattern, filename,
+ APR_FNM_CASE_BLIND) == APR_FNM_NOMATCH)
+ return;
- split_props(&props, value, autoprops->pool);
-
- for (i = 0; i < props->nelts; i++)
+ for (hi = apr_hash_first(scratch_pool, propvals);
+ hi != NULL;
+ hi = apr_hash_next(hi))
{
- size_t len;
- const char *this_value;
- char *property = APR_ARRAY_IDX(props, i, char *);
- char *equal_sign = strchr(property, '=');
-
- if (equal_sign)
- {
- *equal_sign = '\0';
- equal_sign++;
- trim_string(&equal_sign);
- unquote_string(&equal_sign);
- this_value = equal_sign;
- }
- else
- {
- this_value = "";
- }
- trim_string(&property);
- len = strlen(property);
-
- if (len > 0)
- {
- svn_string_t *propval = apr_palloc(autoprops->pool,
- sizeof(*propval));
- propval->data = this_value;
- propval->len = strlen(this_value);
-
- apr_hash_set(autoprops->properties, property, len, propval);
- if (strcmp(property, SVN_PROP_MIME_TYPE) == 0)
- autoprops->mimetype = this_value;
- else if (strcmp(property, SVN_PROP_EXECUTABLE) == 0)
- autoprops->have_executable = TRUE;
- }
+ const char *propname = svn__apr_hash_index_key(hi);
+ const char *propval = svn__apr_hash_index_val(hi);
+ svn_string_t *propval_str =
+ svn_string_create_empty(apr_hash_pool_get(properties));
+
+ propval_str->data = propval;
+ propval_str->len = strlen(propval);
+
+ svn_hash_sets(properties, propname, propval_str);
+ if (strcmp(propname, SVN_PROP_MIME_TYPE) == 0)
+ *mimetype = propval;
+ else if (strcmp(propname, SVN_PROP_EXECUTABLE) == 0)
+ *have_executable = TRUE;
}
- return TRUE;
}
svn_error_t *
-svn_client__get_auto_props(apr_hash_t **properties,
- const char **mimetype,
- const char *path,
- svn_magic__cookie_t *magic_cookie,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool)
+svn_client__get_paths_auto_props(apr_hash_t **properties,
+ const char **mimetype,
+ const char *path,
+ svn_magic__cookie_t *magic_cookie,
+ apr_hash_t *autoprops,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- svn_config_t *cfg;
- svn_boolean_t use_autoprops;
- auto_props_baton_t autoprops;
-
- /* initialisation */
- autoprops.properties = apr_hash_make(pool);
- autoprops.filename = svn_dirent_basename(path, pool);
- autoprops.pool = pool;
- autoprops.mimetype = NULL;
- autoprops.have_executable = FALSE;
- *properties = autoprops.properties;
+ apr_hash_index_t *hi;
+ svn_boolean_t have_executable = FALSE;
- cfg = ctx->config ? apr_hash_get(ctx->config, SVN_CONFIG_CATEGORY_CONFIG,
- APR_HASH_KEY_STRING) : NULL;
+ *properties = apr_hash_make(result_pool);
+ *mimetype = NULL;
- /* check that auto props is enabled */
- SVN_ERR(svn_config_get_bool(cfg, &use_autoprops,
- SVN_CONFIG_SECTION_MISCELLANY,
- SVN_CONFIG_OPTION_ENABLE_AUTO_PROPS, FALSE));
+ if (autoprops)
+ {
+ for (hi = apr_hash_first(scratch_pool, autoprops);
+ hi != NULL;
+ hi = apr_hash_next(hi))
+ {
+ const char *pattern = svn__apr_hash_index_key(hi);
+ apr_hash_t *propvals = svn__apr_hash_index_val(hi);
- /* search for auto props */
- if (use_autoprops)
- svn_config_enumerate2(cfg, SVN_CONFIG_SECTION_AUTO_PROPS,
- auto_props_enumerator, &autoprops, pool);
+ get_auto_props_for_pattern(*properties, mimetype, &have_executable,
+ svn_dirent_basename(path, scratch_pool),
+ pattern, propvals, scratch_pool);
+ }
+ }
/* if mimetype has not been set check the file */
- if (! autoprops.mimetype)
+ if (! *mimetype)
{
- SVN_ERR(svn_io_detect_mimetype2(&autoprops.mimetype, path,
- ctx->mimetypes_map, pool));
+ SVN_ERR(svn_io_detect_mimetype2(mimetype, path, ctx->mimetypes_map,
+ result_pool));
/* If we got no mime-type, or if it is "application/octet-stream",
* try to get the mime-type from libmagic. */
if (magic_cookie &&
- (!autoprops.mimetype ||
- strcmp(autoprops.mimetype, "application/octet-stream") == 0))
+ (!*mimetype ||
+ strcmp(*mimetype, "application/octet-stream") == 0))
{
const char *magic_mimetype;
@@ -274,29 +238,29 @@ svn_client__get_auto_props(apr_hash_t **properties,
* returns "text/plain" for them. */
SVN_ERR(svn_magic__detect_binary_mimetype(&magic_mimetype,
path, magic_cookie,
- pool, pool));
+ result_pool,
+ scratch_pool));
if (magic_mimetype)
- autoprops.mimetype = magic_mimetype;
+ *mimetype = magic_mimetype;
}
- if (autoprops.mimetype)
- apr_hash_set(autoprops.properties, SVN_PROP_MIME_TYPE,
+ if (*mimetype)
+ apr_hash_set(*properties, SVN_PROP_MIME_TYPE,
strlen(SVN_PROP_MIME_TYPE),
- svn_string_create(autoprops.mimetype, pool));
+ svn_string_create(*mimetype, result_pool));
}
/* if executable has not been set check the file */
- if (! autoprops.have_executable)
+ if (! have_executable)
{
svn_boolean_t executable = FALSE;
- SVN_ERR(svn_io_is_file_executable(&executable, path, pool));
+ SVN_ERR(svn_io_is_file_executable(&executable, path, scratch_pool));
if (executable)
- apr_hash_set(autoprops.properties, SVN_PROP_EXECUTABLE,
+ apr_hash_set(*properties, SVN_PROP_EXECUTABLE,
strlen(SVN_PROP_EXECUTABLE),
- svn_string_create("", pool));
+ svn_string_create_empty(result_pool));
}
- *mimetype = autoprops.mimetype;
return SVN_NO_ERROR;
}
@@ -304,11 +268,12 @@ svn_client__get_auto_props(apr_hash_t **properties,
static svn_error_t *
add_file(const char *local_abspath,
svn_magic__cookie_t *magic_cookie,
+ apr_hash_t *autoprops,
+ svn_boolean_t no_autoprops,
svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
- apr_hash_t* properties;
- apr_hash_index_t *hi;
+ apr_hash_t *properties;
const char *mimetype;
svn_node_kind_t kind;
svn_boolean_t is_special;
@@ -316,105 +281,95 @@ add_file(const char *local_abspath,
/* Check to see if this is a special file. */
SVN_ERR(svn_io_check_special_path(local_abspath, &kind, &is_special, pool));
+ /* Determine the properties that the file should have */
if (is_special)
- mimetype = NULL;
+ {
+ mimetype = NULL;
+ properties = apr_hash_make(pool);
+ svn_hash_sets(properties, SVN_PROP_SPECIAL,
+ svn_string_create(SVN_PROP_BOOLEAN_TRUE, pool));
+ }
else
- /* Get automatic properties */
- /* This may fail on write-only files:
- we open them to estimate file type.
- That's why we postpone the add until after this step. */
- SVN_ERR(svn_client__get_auto_props(&properties, &mimetype, local_abspath,
- magic_cookie, ctx, pool));
-
- /* Add the file */
- SVN_ERR(svn_wc_add_from_disk(ctx->wc_ctx, local_abspath,
- NULL, NULL, pool));
+ {
+ apr_hash_t *file_autoprops = NULL;
- if (is_special)
- /* This must be a special file. */
- SVN_ERR(svn_wc_prop_set4(ctx->wc_ctx, local_abspath, SVN_PROP_SPECIAL,
- svn_string_create(SVN_PROP_BOOLEAN_TRUE, pool),
- svn_depth_empty, FALSE, NULL,
- NULL, NULL /* cancellation */,
- NULL, NULL /* notification */,
- pool));
- else if (properties)
- {
- /* loop through the hashtable and add the properties */
- for (hi = apr_hash_first(pool, properties);
- hi != NULL; hi = apr_hash_next(hi))
+ /* Get automatic properties */
+ /* If we are setting autoprops grab the inherited svn:auto-props and
+ config file auto-props for this file if we haven't already got them
+ when iterating over the file's unversioned parents. */
+ if (!no_autoprops)
{
- const char *pname = svn__apr_hash_index_key(hi);
- const svn_string_t *pval = svn__apr_hash_index_val(hi);
- svn_error_t *err;
-
- /* It's probably best to pass 0 for force, so that if
- the autoprops say to set some weird combination,
- we just error and let the user sort it out. */
- err = svn_wc_prop_set4(ctx->wc_ctx, local_abspath, pname, pval,
- svn_depth_empty, FALSE, NULL,
- NULL, NULL /* cancellation */,
- NULL, NULL /* notification */,
- pool);
- if (err)
- {
- /* Don't leave the job half-done. If we fail to set a property,
- * (try to) un-add the file. */
- svn_error_clear(svn_wc_revert4(ctx->wc_ctx,
- local_abspath,
- svn_depth_empty,
- FALSE /* use_commit_times */,
- NULL /* changelists */,
- NULL, NULL, NULL, NULL,
- pool));
- return svn_error_trace(err);
- }
+ if (autoprops == NULL)
+ SVN_ERR(svn_client__get_all_auto_props(
+ &file_autoprops, svn_dirent_dirname(local_abspath,pool),
+ ctx, pool, pool));
+ else
+ file_autoprops = autoprops;
}
- }
- /* Report the addition to the caller. */
- if (ctx->notify_func2 != NULL)
- {
- svn_wc_notify_t *notify = svn_wc_create_notify(local_abspath,
- svn_wc_notify_add, pool);
- notify->kind = svn_node_file;
- notify->mime_type = mimetype;
- (*ctx->notify_func2)(ctx->notify_baton2, notify, pool);
+ /* This may fail on write-only files:
+ we open them to estimate file type. */
+ SVN_ERR(svn_client__get_paths_auto_props(&properties, &mimetype,
+ local_abspath, magic_cookie,
+ file_autoprops, ctx, pool,
+ pool));
}
+ /* Add the file */
+ SVN_ERR(svn_wc_add_from_disk2(ctx->wc_ctx, local_abspath, properties,
+ ctx->notify_func2, ctx->notify_baton2, pool));
+
return SVN_NO_ERROR;
}
/* Schedule directory DIR_ABSPATH, and some of the tree under it, for
- * addition. DEPTH is the depth at this
- * point in the descent (it may be changed for recursive calls).
+ * addition. DEPTH is the depth at this point in the descent (it may
+ * be changed for recursive calls).
*
* If DIR_ABSPATH (or any item below DIR_ABSPATH) is already scheduled for
* addition, add will fail and return an error unless FORCE is TRUE.
*
- * Files and directories that match ignore patterns will not be added unless
- * NO_IGNORE is TRUE.
- *
* Use MAGIC_COOKIE (which may be NULL) to detect the mime-type of files
* if necessary.
*
+ * If not NULL, CONFIG_AUTOPROPS is a hash representing the config file and
+ * svn:auto-props autoprops which apply to DIR_ABSPATH. It maps
+ * const char * file patterns to another hash which maps const char *
+ * property names to const char *property values. If CONFIG_AUTOPROPS is
+ * NULL and the config file and svn:auto-props autoprops are required by this
+ * function, then such will be obtained.
+ *
+ * If IGNORES is not NULL, then it is an array of const char * ignore patterns
+ * that apply to any children of DIR_ABSPATH. If REFRESH_IGNORES is TRUE, then
+ * the passed in value of IGNORES (if any) is itself ignored and this function
+ * will gather all ignore patterns applicable to DIR_ABSPATH itself (allocated in
+ * RESULT_POOL). Any recursive calls to this function get the refreshed ignore
+ * patterns. If IGNORES is NULL and REFRESH_IGNORES is FALSE, then all children of DIR_ABSPATH
+ * are unconditionally added.
+ *
* If CTX->CANCEL_FUNC is non-null, call it with CTX->CANCEL_BATON to allow
- * the user to cancel the operation
+ * the user to cancel the operation.
+ *
+ * Use SCRATCH_POOL for temporary allocations.
*/
static svn_error_t *
add_dir_recursive(const char *dir_abspath,
svn_depth_t depth,
svn_boolean_t force,
- svn_boolean_t no_ignore,
+ svn_boolean_t no_autoprops,
svn_magic__cookie_t *magic_cookie,
+ apr_hash_t *config_autoprops,
+ svn_boolean_t refresh_ignores,
+ apr_array_header_t *ignores,
svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
svn_error_t *err;
apr_pool_t *iterpool;
- apr_array_header_t *ignores;
apr_hash_t *dirents;
apr_hash_index_t *hi;
+ svn_boolean_t entry_exists = FALSE;
/* Check cancellation; note that this catches recursive calls too. */
if (ctx->cancel_func)
@@ -423,18 +378,43 @@ add_dir_recursive(const char *dir_abspath,
iterpool = svn_pool_create(scratch_pool);
/* Add this directory to revision control. */
- err = svn_wc_add_from_disk(ctx->wc_ctx, dir_abspath,
- ctx->notify_func2, ctx->notify_baton2,
- iterpool);
- if (err && err->apr_err == SVN_ERR_ENTRY_EXISTS && force)
- svn_error_clear(err);
- else if (err)
- return svn_error_trace(err);
+ err = svn_wc_add_from_disk2(ctx->wc_ctx, dir_abspath, NULL /*props*/,
+ ctx->notify_func2, ctx->notify_baton2,
+ iterpool);
+ if (err)
+ {
+ if (err->apr_err == SVN_ERR_ENTRY_EXISTS && force)
+ {
+ svn_error_clear(err);
+ entry_exists = TRUE;
+ }
+ else if (err)
+ {
+ return svn_error_trace(err);
+ }
+ }
+
+ /* Fetch ignores after adding to handle ignores on the directory itself
+ and ancestors via the single db optimization in libsvn_wc */
+ if (refresh_ignores)
+ SVN_ERR(svn_wc_get_ignores2(&ignores, ctx->wc_ctx, dir_abspath,
+ ctx->config, result_pool, iterpool));
+
+ /* If DIR_ABSPATH is the root of an unversioned subtree then get the
+ following "autoprops":
- if (!no_ignore)
+ 1) Explicit and inherited svn:auto-props properties on
+ DIR_ABSPATH
+ 2) auto-props from the CTX->CONFIG hash
+
+ Since this set of autoprops applies to all unversioned children of
+ DIR_ABSPATH, we will pass these along to any recursive calls to
+ add_dir_recursive() and calls to add_file() below. Thus sparing
+ these callees from looking up the same information. */
+ if (!entry_exists && config_autoprops == NULL)
{
- SVN_ERR(svn_wc_get_ignores2(&ignores, ctx->wc_ctx, dir_abspath,
- ctx->config, scratch_pool, iterpool));
+ SVN_ERR(svn_client__get_all_auto_props(&config_autoprops, dir_abspath,
+ ctx, scratch_pool, iterpool));
}
SVN_ERR(svn_io_get_dirents3(&dirents, dir_abspath, TRUE, scratch_pool,
@@ -459,7 +439,8 @@ add_dir_recursive(const char *dir_abspath,
if (svn_wc_is_adm_dir(name, iterpool))
continue;
- if ((!no_ignore) && svn_wc_match_ignore_list(name, ignores, iterpool))
+ if (ignores
+ && svn_wc_match_ignore_list(name, ignores, iterpool))
continue;
/* Construct the full path of the entry. */
@@ -472,14 +453,24 @@ add_dir_recursive(const char *dir_abspath,
if (depth == svn_depth_immediates)
depth_below_here = svn_depth_empty;
+ /* When DIR_ABSPATH is the root of an unversioned subtree then
+ it and all of its children have the same set of ignores. So
+ save any recursive calls the extra work of finding the same
+ set of ignores. */
+ if (refresh_ignores && !entry_exists)
+ refresh_ignores = FALSE;
+
SVN_ERR(add_dir_recursive(abspath, depth_below_here,
- force, no_ignore, magic_cookie,
- ctx, iterpool));
+ force, no_autoprops,
+ magic_cookie, config_autoprops,
+ refresh_ignores, ignores, ctx,
+ result_pool, iterpool));
}
else if ((dirent->kind == svn_node_file || dirent->special)
&& depth >= svn_depth_files)
{
- err = add_file(abspath, magic_cookie, ctx, iterpool);
+ err = add_file(abspath, magic_cookie, config_autoprops,
+ no_autoprops, ctx, iterpool);
if (err && err->apr_err == SVN_ERR_ENTRY_EXISTS && force)
svn_error_clear(err);
else
@@ -493,32 +484,366 @@ add_dir_recursive(const char *dir_abspath,
return SVN_NO_ERROR;
}
+/* This structure is used as baton for collecting the config entries
+ in the auto-props section and any inherited svn:auto-props
+ properties.
+*/
+typedef struct collect_auto_props_baton_t
+{
+ /* the hash table for storing the property name/value pairs */
+ apr_hash_t *autoprops;
+
+ /* a pool used for allocating memory */
+ apr_pool_t *result_pool;
+} collect_auto_props_baton_t;
-struct add_with_write_lock_baton {
- const char *local_abspath;
- svn_depth_t depth;
- svn_boolean_t force;
- svn_boolean_t no_ignore;
- svn_client_ctx_t *ctx;
-
- /* Absolute path to the first existing parent directory of local_abspath.
- * If not NULL, all missing parents of local_abspath must be created
- * before local_abspath can be added. */
- const char *existing_parent_abspath;
-};
+/* Implements svn_config_enumerator2_t callback.
+
+ For one auto-props config entry (NAME, VALUE), stash a copy of
+ NAME and VALUE, allocated in BATON->POOL, in BATON->AUTOPROP.
+ BATON must point to an collect_auto_props_baton_t.
+*/
+static svn_boolean_t
+all_auto_props_collector(const char *name,
+ const char *value,
+ void *baton,
+ apr_pool_t *pool)
+{
+ collect_auto_props_baton_t *autoprops_baton = baton;
+ apr_array_header_t *autoprops;
+ int i;
+
+ /* nothing to do here without a value */
+ if (*value == 0)
+ return TRUE;
+
+ split_props(&autoprops, value, pool);
+
+ for (i = 0; i < autoprops->nelts; i ++)
+ {
+ size_t len;
+ const char *this_value;
+ char *property = APR_ARRAY_IDX(autoprops, i, char *);
+ char *equal_sign = strchr(property, '=');
+
+ if (equal_sign)
+ {
+ *equal_sign = '\0';
+ equal_sign++;
+ trim_string(&equal_sign);
+ unquote_string(&equal_sign);
+ this_value = equal_sign;
+ }
+ else
+ {
+ this_value = "";
+ }
+ trim_string(&property);
+ len = strlen(property);
+
+ if (len > 0)
+ {
+ apr_hash_t *pattern_hash = svn_hash_gets(autoprops_baton->autoprops,
+ name);
+ svn_string_t *propval;
+
+ /* Force reserved boolean property values to '*'. */
+ if (svn_prop_is_boolean(property))
+ {
+ /* SVN_PROP_EXECUTABLE, SVN_PROP_NEEDS_LOCK, SVN_PROP_SPECIAL */
+ propval = svn_string_create("*", autoprops_baton->result_pool);
+ }
+ else
+ {
+ propval = svn_string_create(this_value,
+ autoprops_baton->result_pool);
+ }
+
+ if (!pattern_hash)
+ {
+ pattern_hash = apr_hash_make(autoprops_baton->result_pool);
+ svn_hash_sets(autoprops_baton->autoprops,
+ apr_pstrdup(autoprops_baton->result_pool, name),
+ pattern_hash);
+ }
+ svn_hash_sets(pattern_hash,
+ apr_pstrdup(autoprops_baton->result_pool, property),
+ propval->data);
+ }
+ }
+ return TRUE;
+}
-/* The main logic of the public svn_client_add4. */
+/* Go up the directory tree from LOCAL_ABSPATH, looking for a versioned
+ * directory. If found, return its path in *EXISTING_PARENT_ABSPATH.
+ * Otherwise, return SVN_ERR_CLIENT_NO_VERSIONED_PARENT. */
static svn_error_t *
-add(void *baton, apr_pool_t *result_pool, apr_pool_t *scratch_pool)
+find_existing_parent(const char **existing_parent_abspath,
+ svn_client_ctx_t *ctx,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_node_kind_t kind;
+ const char *parent_abspath;
+ svn_wc_context_t *wc_ctx = ctx->wc_ctx;
+
+ SVN_ERR(svn_wc_read_kind2(&kind, wc_ctx, local_abspath,
+ FALSE, FALSE, scratch_pool));
+
+ if (kind == svn_node_dir)
+ {
+ *existing_parent_abspath = apr_pstrdup(result_pool, local_abspath);
+ return SVN_NO_ERROR;
+ }
+
+ if (svn_dirent_is_root(local_abspath, strlen(local_abspath)))
+ return svn_error_create(SVN_ERR_CLIENT_NO_VERSIONED_PARENT, NULL, NULL);
+
+ if (svn_wc_is_adm_dir(svn_dirent_basename(local_abspath, scratch_pool),
+ scratch_pool))
+ return svn_error_createf(SVN_ERR_RESERVED_FILENAME_SPECIFIED, NULL,
+ _("'%s' ends in a reserved name"),
+ svn_dirent_local_style(local_abspath,
+ scratch_pool));
+
+ parent_abspath = svn_dirent_dirname(local_abspath, scratch_pool);
+
+ if (ctx->cancel_func)
+ SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
+
+ SVN_ERR(find_existing_parent(existing_parent_abspath, ctx, parent_abspath,
+ result_pool, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_client__get_all_auto_props(apr_hash_t **autoprops,
+ const char *path_or_url,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ int i;
+ apr_array_header_t *inherited_config_auto_props;
+ apr_hash_t *props;
+ svn_opt_revision_t rev;
+ svn_string_t *config_auto_prop;
+ svn_boolean_t use_autoprops;
+ collect_auto_props_baton_t autoprops_baton;
+ svn_error_t *err = NULL;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ svn_boolean_t target_is_url = svn_path_is_url(path_or_url);
+ svn_config_t *cfg = ctx->config ? svn_hash_gets(ctx->config,
+ SVN_CONFIG_CATEGORY_CONFIG)
+ : NULL;
+ *autoprops = apr_hash_make(result_pool);
+ autoprops_baton.result_pool = result_pool;
+ autoprops_baton.autoprops = *autoprops;
+
+
+ /* Are "traditional" auto-props enabled? If so grab them from the
+ config. This is our starting set auto-props, which may be overriden
+ by svn:auto-props. */
+ SVN_ERR(svn_config_get_bool(cfg, &use_autoprops,
+ SVN_CONFIG_SECTION_MISCELLANY,
+ SVN_CONFIG_OPTION_ENABLE_AUTO_PROPS, FALSE));
+ if (use_autoprops)
+ svn_config_enumerate2(cfg, SVN_CONFIG_SECTION_AUTO_PROPS,
+ all_auto_props_collector, &autoprops_baton,
+ scratch_pool);
+
+ /* Convert the config file setting (if any) into a hash mapping file
+ patterns to as hash of prop-->val mappings. */
+ if (svn_path_is_url(path_or_url))
+ rev.kind = svn_opt_revision_head;
+ else
+ rev.kind = svn_opt_revision_working;
+
+ /* If PATH_OR_URL is a WC path, then it might be unversioned, in which case
+ we find it's nearest versioned parent. */
+ do
+ {
+ err = svn_client_propget5(&props, &inherited_config_auto_props,
+ SVN_PROP_INHERITABLE_AUTO_PROPS, path_or_url,
+ &rev, &rev, NULL, svn_depth_empty, NULL, ctx,
+ scratch_pool, iterpool);
+ if (err)
+ {
+ if (target_is_url || err->apr_err != SVN_ERR_UNVERSIONED_RESOURCE)
+ return svn_error_trace(err);
+
+ svn_error_clear(err);
+ err = NULL;
+ SVN_ERR(find_existing_parent(&path_or_url, ctx, path_or_url,
+ scratch_pool, iterpool));
+ }
+ else
+ {
+ break;
+ }
+ }
+ while (err == NULL);
+
+ /* Stash any explicit PROPS for PARENT_PATH into the inherited props array,
+ since these are actually inherited props for LOCAL_ABSPATH. */
+ config_auto_prop = svn_hash_gets(props, path_or_url);
+
+ if (config_auto_prop)
+ {
+ svn_prop_inherited_item_t *new_iprop =
+ apr_palloc(scratch_pool, sizeof(*new_iprop));
+ new_iprop->path_or_url = path_or_url;
+ new_iprop->prop_hash = apr_hash_make(scratch_pool);
+ svn_hash_sets(new_iprop->prop_hash, SVN_PROP_INHERITABLE_AUTO_PROPS,
+ config_auto_prop);
+ APR_ARRAY_PUSH(inherited_config_auto_props,
+ svn_prop_inherited_item_t *) = new_iprop;
+ }
+
+ for (i = 0; i < inherited_config_auto_props->nelts; i++)
+ {
+ apr_hash_index_t *hi;
+ svn_prop_inherited_item_t *elt = APR_ARRAY_IDX(
+ inherited_config_auto_props, i, svn_prop_inherited_item_t *);
+
+ for (hi = apr_hash_first(scratch_pool, elt->prop_hash);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ const svn_string_t *propval = svn__apr_hash_index_val(hi);
+ const char *ch = propval->data;
+ svn_stringbuf_t *config_auto_prop_pattern;
+ svn_stringbuf_t *config_auto_prop_val;
+
+ svn_pool_clear(iterpool);
+
+ config_auto_prop_pattern = svn_stringbuf_create_empty(iterpool);
+ config_auto_prop_val = svn_stringbuf_create_empty(iterpool);
+
+ /* Parse svn:auto-props value. */
+ while (*ch != '\0')
+ {
+ svn_stringbuf_setempty(config_auto_prop_pattern);
+ svn_stringbuf_setempty(config_auto_prop_val);
+
+ /* Parse the file pattern. */
+ while (*ch != '\0' && *ch != '=' && *ch != '\n')
+ {
+ svn_stringbuf_appendbyte(config_auto_prop_pattern, *ch);
+ ch++;
+ }
+
+ svn_stringbuf_strip_whitespace(config_auto_prop_pattern);
+
+ /* Parse the auto-prop group. */
+ while (*ch != '\0' && *ch != '\n')
+ {
+ svn_stringbuf_appendbyte(config_auto_prop_val, *ch);
+ ch++;
+ }
+
+ /* Strip leading '=' and whitespace from auto-prop group. */
+ if (config_auto_prop_val->data[0] == '=')
+ svn_stringbuf_remove(config_auto_prop_val, 0, 1);
+ svn_stringbuf_strip_whitespace(config_auto_prop_val);
+
+ all_auto_props_collector(config_auto_prop_pattern->data,
+ config_auto_prop_val->data,
+ &autoprops_baton,
+ scratch_pool);
+
+ /* Skip to next line if any. */
+ while (*ch != '\0' && *ch != '\n')
+ ch++;
+ if (*ch == '\n')
+ ch++;
+ }
+ }
+ }
+
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *svn_client__get_inherited_ignores(apr_array_header_t **ignores,
+ const char *path_or_url,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_opt_revision_t rev;
+ apr_hash_t *explicit_ignores;
+ apr_array_header_t *inherited_ignores;
+ svn_boolean_t target_is_url = svn_path_is_url(path_or_url);
+ svn_string_t *explicit_prop;
+ int i;
+
+ if (target_is_url)
+ rev.kind = svn_opt_revision_head;
+ else
+ rev.kind = svn_opt_revision_working;
+
+ SVN_ERR(svn_client_propget5(&explicit_ignores, &inherited_ignores,
+ SVN_PROP_INHERITABLE_IGNORES, path_or_url,
+ &rev, &rev, NULL, svn_depth_empty, NULL, ctx,
+ scratch_pool, scratch_pool));
+
+ explicit_prop = svn_hash_gets(explicit_ignores, path_or_url);
+
+ if (explicit_prop)
+ {
+ svn_prop_inherited_item_t *new_iprop =
+ apr_palloc(scratch_pool, sizeof(*new_iprop));
+ new_iprop->path_or_url = path_or_url;
+ new_iprop->prop_hash = apr_hash_make(scratch_pool);
+ svn_hash_sets(new_iprop->prop_hash, SVN_PROP_INHERITABLE_IGNORES,
+ explicit_prop);
+ APR_ARRAY_PUSH(inherited_ignores,
+ svn_prop_inherited_item_t *) = new_iprop;
+ }
+
+ *ignores = apr_array_make(result_pool, 16, sizeof(const char *));
+
+ for (i = 0; i < inherited_ignores->nelts; i++)
+ {
+ svn_prop_inherited_item_t *elt = APR_ARRAY_IDX(
+ inherited_ignores, i, svn_prop_inherited_item_t *);
+ svn_string_t *ignore_val = svn_hash_gets(elt->prop_hash,
+ SVN_PROP_INHERITABLE_IGNORES);
+ if (ignore_val)
+ svn_cstring_split_append(*ignores, ignore_val->data, "\n\r\t\v ",
+ FALSE, result_pool);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* The main logic of the public svn_client_add5.
+ *
+ * EXISTING_PARENT_ABSPATH is the absolute path to the first existing
+ * parent directory of local_abspath. If not NULL, all missing parents
+ * of LOCAL_ABSPATH must be created before LOCAL_ABSPATH can be added. */
+static svn_error_t *
+add(const char *local_abspath,
+ svn_depth_t depth,
+ svn_boolean_t force,
+ svn_boolean_t no_ignore,
+ svn_boolean_t no_autoprops,
+ const char *existing_parent_abspath,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
{
svn_node_kind_t kind;
svn_error_t *err;
- struct add_with_write_lock_baton *b = baton;
svn_magic__cookie_t *magic_cookie;
+ apr_array_header_t *ignores = NULL;
svn_magic__init(&magic_cookie, scratch_pool);
- if (b->existing_parent_abspath)
+ if (existing_parent_abspath)
{
const char *parent_abspath;
const char *child_relpath;
@@ -526,9 +851,9 @@ add(void *baton, apr_pool_t *result_pool, apr_pool_t *scratch_pool)
int i;
apr_pool_t *iterpool;
- parent_abspath = b->existing_parent_abspath;
- child_relpath = svn_dirent_is_child(b->existing_parent_abspath,
- b->local_abspath, NULL);
+ parent_abspath = existing_parent_abspath;
+ child_relpath = svn_dirent_is_child(existing_parent_abspath,
+ local_abspath, NULL);
components = svn_path_decompose(child_relpath, scratch_pool);
iterpool = svn_pool_create(scratch_pool);
for (i = 0; i < components->nelts - 1; i++)
@@ -538,8 +863,8 @@ add(void *baton, apr_pool_t *result_pool, apr_pool_t *scratch_pool)
svn_pool_clear(iterpool);
- if (b->ctx->cancel_func)
- SVN_ERR(b->ctx->cancel_func(b->ctx->cancel_baton));
+ if (ctx->cancel_func)
+ SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
component = APR_ARRAY_IDX(components, i, const char *);
parent_abspath = svn_dirent_join(parent_abspath, component,
@@ -548,29 +873,31 @@ add(void *baton, apr_pool_t *result_pool, apr_pool_t *scratch_pool)
if (disk_kind != svn_node_none && disk_kind != svn_node_dir)
return svn_error_createf(SVN_ERR_CLIENT_NO_VERSIONED_PARENT, NULL,
_("'%s' prevents creating parent of '%s'"),
- parent_abspath, b->local_abspath);
+ parent_abspath, local_abspath);
SVN_ERR(svn_io_make_dir_recursively(parent_abspath, scratch_pool));
- SVN_ERR(svn_wc_add_from_disk(b->ctx->wc_ctx, parent_abspath,
- b->ctx->notify_func2,
- b->ctx->notify_baton2,
- scratch_pool));
+ SVN_ERR(svn_wc_add_from_disk2(ctx->wc_ctx, parent_abspath,
+ NULL /*props*/,
+ ctx->notify_func2, ctx->notify_baton2,
+ scratch_pool));
}
svn_pool_destroy(iterpool);
}
- SVN_ERR(svn_io_check_path(b->local_abspath, &kind, scratch_pool));
+ SVN_ERR(svn_io_check_path(local_abspath, &kind, scratch_pool));
if (kind == svn_node_dir)
{
/* We use add_dir_recursive for all directory targets
and pass depth along no matter what it is, so that the
target's depth will be set correctly. */
- err = add_dir_recursive(b->local_abspath, b->depth,
- b->force, b->no_ignore, magic_cookie, b->ctx,
- scratch_pool);
+ err = add_dir_recursive(local_abspath, depth, force,
+ no_autoprops, magic_cookie, NULL,
+ !no_ignore, ignores, ctx,
+ scratch_pool, scratch_pool);
}
else if (kind == svn_node_file)
- err = add_file(b->local_abspath, magic_cookie, b->ctx, scratch_pool);
+ err = add_file(local_abspath, magic_cookie, NULL,
+ no_autoprops, ctx, scratch_pool);
else if (kind == svn_node_none)
{
svn_boolean_t tree_conflicted;
@@ -578,7 +905,7 @@ add(void *baton, apr_pool_t *result_pool, apr_pool_t *scratch_pool)
/* Provide a meaningful error message if the node does not exist
* on disk but is a tree conflict victim. */
err = svn_wc_conflicted_p3(NULL, NULL, &tree_conflicted,
- b->ctx->wc_ctx, b->local_abspath,
+ ctx->wc_ctx, local_abspath,
scratch_pool);
if (err)
svn_error_clear(err);
@@ -587,22 +914,22 @@ add(void *baton, apr_pool_t *result_pool, apr_pool_t *scratch_pool)
_("'%s' is an existing item in conflict; "
"please mark the conflict as resolved "
"before adding a new item here"),
- svn_dirent_local_style(b->local_abspath,
+ svn_dirent_local_style(local_abspath,
scratch_pool));
return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
_("'%s' not found"),
- svn_dirent_local_style(b->local_abspath,
+ svn_dirent_local_style(local_abspath,
scratch_pool));
}
else
return svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
_("Unsupported node kind for path '%s'"),
- svn_dirent_local_style(b->local_abspath,
+ svn_dirent_local_style(local_abspath,
scratch_pool));
/* Ignore SVN_ERR_ENTRY_EXISTS when FORCE is set. */
- if (err && err->apr_err == SVN_ERR_ENTRY_EXISTS && b->force)
+ if (err && err->apr_err == SVN_ERR_ENTRY_EXISTS && force)
{
svn_error_clear(err);
err = SVN_NO_ERROR;
@@ -611,114 +938,97 @@ add(void *baton, apr_pool_t *result_pool, apr_pool_t *scratch_pool)
}
-/* Go up the directory tree from LOCAL_ABSPATH, looking for a versioned
- * directory. If found, return its path in *EXISTING_PARENT_ABSPATH.
- * Otherwise, return SVN_ERR_CLIENT_NO_VERSIONED_PARENT. */
-static svn_error_t *
-find_existing_parent(const char **existing_parent_abspath,
- svn_client_ctx_t *ctx,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- svn_node_kind_t kind;
- const char *parent_abspath;
- svn_wc_context_t *wc_ctx = ctx->wc_ctx;
-
- SVN_ERR(svn_wc_read_kind(&kind, wc_ctx, local_abspath, FALSE, scratch_pool));
-
- if (kind == svn_node_dir)
- {
- svn_boolean_t is_deleted;
-
- SVN_ERR(svn_wc__node_is_status_deleted(&is_deleted,
- wc_ctx, local_abspath,
- scratch_pool));
- if (!is_deleted)
- {
- *existing_parent_abspath = apr_pstrdup(result_pool, local_abspath);
- return SVN_NO_ERROR;
- }
- }
-
- if (svn_dirent_is_root(local_abspath, strlen(local_abspath)))
- return svn_error_create(SVN_ERR_CLIENT_NO_VERSIONED_PARENT, NULL, NULL);
-
- if (svn_wc_is_adm_dir(svn_dirent_basename(local_abspath, scratch_pool),
- scratch_pool))
- return svn_error_createf(SVN_ERR_RESERVED_FILENAME_SPECIFIED, NULL,
- _("'%s' ends in a reserved name"),
- svn_dirent_local_style(local_abspath,
- scratch_pool));
-
- parent_abspath = svn_dirent_dirname(local_abspath, scratch_pool);
-
- if (ctx->cancel_func)
- SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
-
- SVN_ERR(find_existing_parent(existing_parent_abspath, ctx, parent_abspath,
- result_pool, scratch_pool));
-
- return SVN_NO_ERROR;
-}
-
-
svn_error_t *
-svn_client_add4(const char *path,
+svn_client_add5(const char *path,
svn_depth_t depth,
svn_boolean_t force,
svn_boolean_t no_ignore,
+ svn_boolean_t no_autoprops,
svn_boolean_t add_parents,
svn_client_ctx_t *ctx,
- apr_pool_t *pool)
+ apr_pool_t *scratch_pool)
{
const char *parent_abspath;
const char *local_abspath;
- struct add_with_write_lock_baton baton;
+ const char *existing_parent_abspath;
+ svn_boolean_t is_wc_root;
+ svn_error_t *err;
if (svn_path_is_url(path))
return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
_("'%s' is not a local path"), path);
- SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, pool));
-
- /* ### this is a hack.
- ### before we switched to absolute paths, if a user tried to do
- ### 'svn add .', PATH would be "" and PARENT_PATH would also be "",
- ### thus emulating the behavior below. Now that we are using
- ### absolute paths, svn_dirent_dirname() doesn't behave the same way
- ### w.r.t. '.', so we need to include the following hack. This
- ### behavior is tested in schedule_tests-11. */
- if (path[0] == 0)
- parent_abspath = local_abspath;
+ SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, scratch_pool));
+
+ /* See if we're being asked to add a wc-root. That's typically not
+ okay, unless we're in "force" mode. svn_wc__is_wcroot()
+ will return TRUE even if LOCAL_ABSPATH is a *symlink* to a working
+ copy root, which is a scenario we want to treat differently. */
+ err = svn_wc__is_wcroot(&is_wc_root, ctx->wc_ctx, local_abspath,
+ scratch_pool);
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND
+ && err->apr_err != SVN_ERR_WC_NOT_WORKING_COPY)
+ {
+ return svn_error_trace(err);
+ }
+
+ svn_error_clear(err);
+ err = NULL; /* SVN_NO_ERROR */
+ is_wc_root = FALSE;
+ }
+ if (is_wc_root)
+ {
+#ifdef HAVE_SYMLINK
+ svn_node_kind_t disk_kind;
+ svn_boolean_t is_special;
+
+ SVN_ERR(svn_io_check_special_path(local_abspath, &disk_kind, &is_special,
+ scratch_pool));
+
+ /* A symlink can be an unversioned target and a wcroot. Lets try to add
+ the symlink, which can't be a wcroot. */
+ if (is_special)
+ is_wc_root = FALSE;
+ else
+#endif
+ {
+ if (! force)
+ return svn_error_createf(
+ SVN_ERR_ENTRY_EXISTS, NULL,
+ _("'%s' is already under version control"),
+ svn_dirent_local_style(local_abspath,
+ scratch_pool));
+ }
+ }
+
+ if (is_wc_root)
+ parent_abspath = local_abspath; /* We will only add children */
else
- parent_abspath = svn_dirent_dirname(local_abspath, pool);
+ parent_abspath = svn_dirent_dirname(local_abspath, scratch_pool);
- baton.existing_parent_abspath = NULL;
- if (add_parents)
+ existing_parent_abspath = NULL;
+ if (add_parents && !is_wc_root)
{
apr_pool_t *subpool;
- const char *existing_parent_abspath;
+ const char *existing_parent_abspath2;
- subpool = svn_pool_create(pool);
- SVN_ERR(find_existing_parent(&existing_parent_abspath, ctx,
- parent_abspath, pool, subpool));
- if (strcmp(existing_parent_abspath, parent_abspath) != 0)
- baton.existing_parent_abspath = existing_parent_abspath;
+ subpool = svn_pool_create(scratch_pool);
+ SVN_ERR(find_existing_parent(&existing_parent_abspath2, ctx,
+ parent_abspath, scratch_pool, subpool));
+ if (strcmp(existing_parent_abspath2, parent_abspath) != 0)
+ existing_parent_abspath = existing_parent_abspath2;
svn_pool_destroy(subpool);
}
- baton.local_abspath = local_abspath;
- baton.depth = depth;
- baton.force = force;
- baton.no_ignore = no_ignore;
- baton.ctx = ctx;
- SVN_ERR(svn_wc__call_with_write_lock(add, &baton, ctx->wc_ctx,
- baton.existing_parent_abspath
- ? baton.existing_parent_abspath
- : parent_abspath,
- FALSE, pool, pool));
+ SVN_WC__CALL_WITH_WRITE_LOCK(
+ add(local_abspath, depth, force, no_ignore, no_autoprops,
+ existing_parent_abspath, ctx, scratch_pool),
+ ctx->wc_ctx, (existing_parent_abspath ? existing_parent_abspath
+ : parent_abspath),
+ FALSE /* lock_anchor */, scratch_pool);
return SVN_NO_ERROR;
}
@@ -789,9 +1099,8 @@ mkdir_urls(const apr_array_header_t *urls,
const char *first_url = APR_ARRAY_IDX(urls, 0, const char *);
apr_pool_t *iterpool = svn_pool_create(pool);
- SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL,
- first_url, NULL, NULL,
- FALSE, TRUE, ctx, pool));
+ SVN_ERR(svn_client_open_ra_session2(&ra_session, first_url, NULL,
+ ctx, pool, iterpool));
for (i = 0; i < urls->nelts; i++)
{
@@ -822,7 +1131,7 @@ mkdir_urls(const apr_array_header_t *urls,
if (*bname == '\0')
return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
- _("There is no valid uri above '%s'"),
+ _("There is no valid URI above '%s'"),
common);
}
else
@@ -849,7 +1158,7 @@ mkdir_urls(const apr_array_header_t *urls,
if (*bname == '\0')
return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
- _("There is no valid uri above '%s'"),
+ _("There is no valid URI above '%s'"),
common);
for (i = 0; i < targets->nelts; i++)
@@ -901,11 +1210,16 @@ mkdir_urls(const apr_array_header_t *urls,
/* Open an RA session for the URL. Note that we don't have a local
directory, nor a place to put temp files. */
if (!ra_session)
- SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL, common,
- NULL, NULL, FALSE, TRUE,
- ctx, pool));
+ SVN_ERR(svn_client_open_ra_session2(&ra_session, common, NULL, ctx,
+ pool, pool));
+ else
+ SVN_ERR(svn_ra_reparent(ra_session, common, pool));
+
/* Fetch RA commit editor */
+ SVN_ERR(svn_ra__register_editor_shim_callbacks(ra_session,
+ svn_client__get_shim_callbacks(ctx->wc_ctx, NULL,
+ pool)));
SVN_ERR(svn_ra_get_commit_editor3(ra_session, &editor, &edit_baton,
commit_revprops,
commit_callback,
@@ -914,14 +1228,15 @@ mkdir_urls(const apr_array_header_t *urls,
pool));
/* Call the path-based editor driver. */
- err = svn_delta_path_driver(editor, edit_baton, SVN_INVALID_REVNUM,
- targets, path_driver_cb_func,
- (void *)editor, pool);
+ err = svn_delta_path_driver2(editor, edit_baton, targets, TRUE,
+ path_driver_cb_func, (void *)editor, pool);
+
if (err)
{
/* At least try to abort the edit (and fs txn) before throwing err. */
- svn_error_clear(editor->abort_edit(edit_baton, pool));
- return svn_error_trace(err);
+ return svn_error_compose_create(
+ err,
+ editor->abort_edit(edit_baton, pool));
}
/* Close the edit. */
@@ -948,7 +1263,7 @@ svn_client__make_local_parents(const char *path,
itself is added, since it not only constraints the operation depth, but
also defines the depth of the target directory now. Moreover, the new
directory will have no children at all.*/
- err = svn_client_add4(path, svn_depth_infinity, FALSE, FALSE,
+ err = svn_client_add5(path, svn_depth_infinity, FALSE, FALSE, FALSE,
make_parents, ctx, pool);
/* If we created a new directory, but couldn't add it to version
diff --git a/subversion/libsvn_client/blame.c b/subversion/libsvn_client/blame.c
index b5c56ae..188fdd2 100644
--- a/subversion/libsvn_client/blame.c
+++ b/subversion/libsvn_client/blame.c
@@ -54,9 +54,9 @@ struct rev
/* One chunk of blame */
struct blame
{
- struct rev *rev; /* the responsible revision */
- apr_off_t start; /* the starting diff-token (line) */
- struct blame *next; /* the next chunk */
+ const struct rev *rev; /* the responsible revision */
+ apr_off_t start; /* the starting diff-token (line) */
+ struct blame *next; /* the next chunk */
};
/* A chain of blame chunks */
@@ -70,7 +70,7 @@ struct blame_chain
/* The baton use for the diff output routine. */
struct diff_baton {
struct blame_chain *chain;
- struct rev *rev;
+ const struct rev *rev;
};
/* The baton used for a file revision. */
@@ -79,13 +79,12 @@ struct file_rev_baton {
const char *target;
svn_client_ctx_t *ctx;
const svn_diff_file_options_t *diff_options;
- svn_boolean_t ignore_mime_type;
/* name of file containing the previous revision of the file */
const char *last_filename;
struct rev *rev; /* the rev for which blame is being assigned
during a diff */
struct blame_chain *chain; /* the original blame chain. */
- const char *tmp_path; /* temp file name to feed svn_io_open_unique_file */
+ const char *repos_root_url; /* To construct a url */
apr_pool_t *mainpool; /* lives during the whole sequence of calls */
apr_pool_t *lastpool; /* pool used during previous call */
apr_pool_t *currpool; /* pool used during this call */
@@ -107,7 +106,6 @@ struct delta_baton {
svn_txdelta_window_handler_t wrapped_handler;
void *wrapped_baton;
struct file_rev_baton *file_rev_baton;
- svn_stream_t *source_stream; /* the delta source */
const char *filename;
};
@@ -118,7 +116,7 @@ struct delta_baton {
at token START, and allocated in CHAIN->mainpool. */
static struct blame *
blame_create(struct blame_chain *chain,
- struct rev *rev,
+ const struct rev *rev,
apr_off_t start)
{
struct blame *blame;
@@ -217,7 +215,7 @@ blame_delete_range(struct blame_chain *chain,
at token START and continuing for LENGTH tokens */
static svn_error_t *
blame_insert_range(struct blame_chain *chain,
- struct rev *rev,
+ const struct rev *rev,
apr_off_t start,
apr_off_t length)
{
@@ -273,8 +271,8 @@ static const svn_diff_output_fns_t output_fns = {
output_diff_modified
};
-/* Add the blame for the diffs between LAST_FILE and CUR_FILE with the rev
- specified in FRB. LAST_FILE may be NULL in which
+/* Add the blame for the diffs between LAST_FILE and CUR_FILE to CHAIN,
+ for revision REV. LAST_FILE may be NULL in which
case blame is added for every line of CUR_FILE. */
static svn_error_t *
add_file_blame(const char *last_file,
@@ -306,6 +304,13 @@ add_file_blame(const char *last_file,
return SVN_NO_ERROR;
}
+/* The delta window handler for the text delta between the previously seen
+ * revision and the revision currently being handled.
+ *
+ * Record the blame information for this revision in BATON->file_rev_baton.
+ *
+ * Implements svn_txdelta_window_handler_t.
+ */
static svn_error_t *
window_handler(svn_txdelta_window_t *window, void *baton)
{
@@ -320,13 +325,6 @@ window_handler(svn_txdelta_window_t *window, void *baton)
if (window)
return SVN_NO_ERROR;
- /* Close the source file used for the delta.
- It is important to do this early, since otherwise, they will be deleted
- before all handles are closed, which leads to failures on some platforms
- when new tempfiles are to be created. */
- if (dbaton->source_stream)
- SVN_ERR(svn_stream_close(dbaton->source_stream));
-
/* If we are including merged revisions, we need to add each rev to the
merged chain. */
if (frb->include_merged_revisions)
@@ -376,29 +374,16 @@ window_handler(svn_txdelta_window_t *window, void *baton)
return SVN_NO_ERROR;
}
-/* Throw an SVN_ERR_CLIENT_IS_BINARY_FILE error if PROP_DIFFS indicates a
- binary MIME type. Else, return SVN_NO_ERROR. */
-static svn_error_t *
-check_mimetype(const apr_array_header_t *prop_diffs, const char *target,
- apr_pool_t *pool)
-{
- int i;
-
- for (i = 0; i < prop_diffs->nelts; ++i)
- {
- const svn_prop_t *prop = &APR_ARRAY_IDX(prop_diffs, i, svn_prop_t);
- if (strcmp(prop->name, SVN_PROP_MIME_TYPE) == 0
- && prop->value
- && svn_mime_type_is_binary(prop->value->data))
- return svn_error_createf
- (SVN_ERR_CLIENT_IS_BINARY_FILE, 0,
- _("Cannot calculate blame information for binary file '%s'"),
- svn_dirent_local_style(target, pool));
- }
- return SVN_NO_ERROR;
-}
-
+/* Calculate and record blame information for one revision of the file,
+ * by comparing the file content against the previously seen revision.
+ *
+ * This handler is called once for each interesting revision of the file.
+ *
+ * Record the blame information for this revision in (file_rev_baton) BATON.
+ *
+ * Implements svn_file_rev_handler_t.
+ */
static svn_error_t *
file_rev_handler(void *baton, const char *path, svn_revnum_t revnum,
apr_hash_t *rev_props,
@@ -417,14 +402,14 @@ file_rev_handler(void *baton, const char *path, svn_revnum_t revnum,
/* Clear the current pool. */
svn_pool_clear(frb->currpool);
- /* If this file has a non-textual mime-type, bail out. */
- if (! frb->ignore_mime_type)
- SVN_ERR(check_mimetype(prop_diffs, frb->target, frb->currpool));
-
if (frb->ctx->notify_func2)
{
svn_wc_notify_t *notify
- = svn_wc_create_notify(path, svn_wc_notify_blame_revision, pool);
+ = svn_wc_create_notify_url(
+ svn_path_url_add_component2(frb->repos_root_url,
+ path+1, pool),
+ svn_wc_notify_blame_revision, pool);
+ notify->path = path;
notify->kind = svn_node_none;
notify->content_state = notify->prop_state
= svn_wc_notify_state_inapplicable;
@@ -453,12 +438,10 @@ file_rev_handler(void *baton, const char *path, svn_revnum_t revnum,
/* Prepare the text delta window handler. */
if (frb->last_filename)
- SVN_ERR(svn_stream_open_readonly(&delta_baton->source_stream, frb->last_filename,
+ SVN_ERR(svn_stream_open_readonly(&last_stream, frb->last_filename,
frb->currpool, pool));
else
- /* Means empty stream below. */
- delta_baton->source_stream = NULL;
- last_stream = svn_stream_disown(delta_baton->source_stream, pool);
+ last_stream = svn_stream_empty(frb->currpool);
if (frb->include_merged_revisions && !frb->merged_revision)
filepool = frb->filepool;
@@ -467,7 +450,7 @@ file_rev_handler(void *baton, const char *path, svn_revnum_t revnum,
SVN_ERR(svn_stream_open_unique(&cur_stream, &delta_baton->filename, NULL,
svn_io_file_del_on_pool_cleanup,
- filepool, filepool));
+ filepool, pool));
/* Get window handler for applying delta. */
svn_txdelta_apply(last_stream, cur_stream, NULL, NULL,
@@ -588,8 +571,8 @@ svn_client_blame5(const char *target,
{
struct file_rev_baton frb;
svn_ra_session_t *ra_session;
- const char *url;
svn_revnum_t start_revnum, end_revnum;
+ svn_client__pathrev_t *end_loc;
struct blame *walk, *walk_merged = NULL;
apr_pool_t *iterpool;
svn_stream_t *last_stream;
@@ -607,10 +590,10 @@ svn_client_blame5(const char *target,
SVN_ERR(svn_dirent_get_absolute(&target_abspath_or_url, target, pool));
/* Get an RA plugin for this filesystem object. */
- SVN_ERR(svn_client__ra_session_from_path(&ra_session, &end_revnum,
- &url, target, NULL,
- peg_revision, end,
- ctx, pool));
+ SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &end_loc,
+ target, NULL, peg_revision, end,
+ ctx, pool));
+ end_revnum = end_loc->rev;
SVN_ERR(svn_client__get_revision_number(&start_revnum, NULL, ctx->wc_ctx,
target_abspath_or_url, ra_session,
@@ -621,12 +604,43 @@ svn_client_blame5(const char *target,
(SVN_ERR_CLIENT_BAD_REVISION, NULL,
_("Start revision must precede end revision"));
+ /* We check the mime-type of the yougest revision before getting all
+ the older revisions. */
+ if (!ignore_mime_type)
+ {
+ apr_hash_t *props;
+ apr_hash_index_t *hi;
+
+ SVN_ERR(svn_client_propget5(&props, NULL, SVN_PROP_MIME_TYPE,
+ target_abspath_or_url, peg_revision,
+ end, NULL, svn_depth_empty, NULL, ctx,
+ pool, pool));
+
+ /* props could be keyed on URLs or paths depending on the
+ peg_revision and end values so avoid using the key. */
+ hi = apr_hash_first(pool, props);
+ if (hi)
+ {
+ svn_string_t *value;
+
+ /* Should only be one value */
+ SVN_ERR_ASSERT(apr_hash_count(props) == 1);
+
+ value = svn__apr_hash_index_val(hi);
+ if (value && svn_mime_type_is_binary(value->data))
+ return svn_error_createf
+ (SVN_ERR_CLIENT_IS_BINARY_FILE, 0,
+ _("Cannot calculate blame information for binary file '%s'"),
+ (svn_path_is_url(target)
+ ? target : svn_dirent_local_style(target, pool)));
+ }
+ }
+
frb.start_rev = start_revnum;
frb.end_rev = end_revnum;
frb.target = target;
frb.ctx = ctx;
frb.diff_options = diff_options;
- frb.ignore_mime_type = ignore_mime_type;
frb.include_merged_revisions = include_merged_revisions;
frb.last_filename = NULL;
frb.last_original_filename = NULL;
@@ -642,8 +656,7 @@ svn_client_blame5(const char *target,
frb.merged_chain->pool = pool;
}
- SVN_ERR(svn_io_temp_dir(&frb.tmp_path, pool));
- frb.tmp_path = svn_dirent_join(frb.tmp_path, "tmp", pool),
+ SVN_ERR(svn_ra_get_repos_root2(ra_session, &frb.repos_root_url, pool));
frb.mainpool = pool;
/* The callback will flip the following two pools, because it needs
@@ -675,28 +688,41 @@ svn_client_blame5(const char *target,
SVN_ERR(svn_wc_status3(&status, ctx->wc_ctx, target_abspath_or_url, pool,
pool));
- if (status->text_status != svn_wc_status_normal)
+ if (status->text_status != svn_wc_status_normal
+ || (status->prop_status != svn_wc_status_normal
+ && status->prop_status != svn_wc_status_none))
{
- apr_hash_t *props;
svn_stream_t *wcfile;
- svn_string_t *keywords;
svn_stream_t *tempfile;
+ svn_opt_revision_t rev;
+ svn_boolean_t normalize_eols = FALSE;
const char *temppath;
- apr_hash_t *kw = NULL;
-
- SVN_ERR(svn_wc_prop_list2(&props, ctx->wc_ctx, target_abspath_or_url,
- pool, pool));
- SVN_ERR(svn_stream_open_readonly(&wcfile, target, pool, pool));
- keywords = apr_hash_get(props, SVN_PROP_KEYWORDS,
- APR_HASH_KEY_STRING);
-
- if (keywords)
- SVN_ERR(svn_subst_build_keywords2(&kw, keywords->data, NULL, NULL,
- 0, NULL, pool));
+ if (status->prop_status != svn_wc_status_none)
+ {
+ const svn_string_t *eol_style;
+ SVN_ERR(svn_wc_prop_get2(&eol_style, ctx->wc_ctx,
+ target_abspath_or_url,
+ SVN_PROP_EOL_STYLE,
+ pool, pool));
+
+ if (eol_style)
+ {
+ svn_subst_eol_style_t style;
+ const char *eol;
+ svn_subst_eol_style_from_value(&style, &eol, eol_style->data);
+
+ normalize_eols = (style == svn_subst_eol_style_native);
+ }
+ }
- wcfile = svn_subst_stream_translated(wcfile, "\n", TRUE, kw, FALSE,
- pool);
+ rev.kind = svn_opt_revision_working;
+ SVN_ERR(svn_client__get_normalized_stream(&wcfile, ctx->wc_ctx,
+ target_abspath_or_url, &rev,
+ FALSE, normalize_eols,
+ ctx->cancel_func,
+ ctx->cancel_baton,
+ pool, pool));
SVN_ERR(svn_stream_open_unique(&tempfile, &temppath, NULL,
svn_io_file_del_on_pool_cleanup,
diff --git a/subversion/libsvn_client/cat.c b/subversion/libsvn_client/cat.c
index 2964af7..7c58f88 100644
--- a/subversion/libsvn_client/cat.c
+++ b/subversion/libsvn_client/cat.c
@@ -27,6 +27,7 @@
/*** Includes. ***/
+#include "svn_hash.h"
#include "svn_client.h"
#include "svn_string.h"
#include "svn_error.h"
@@ -62,13 +63,14 @@ svn_client__get_normalized_stream(svn_stream_t **normal_stream,
svn_string_t *eol_style, *keywords, *special;
const char *eol = NULL;
svn_boolean_t local_mod = FALSE;
- apr_time_t tm;
svn_stream_t *input;
svn_node_kind_t kind;
SVN_ERR_ASSERT(SVN_CLIENT__REVKIND_IS_LOCAL_TO_WC(revision->kind));
- SVN_ERR(svn_wc_read_kind(&kind, wc_ctx, local_abspath, FALSE, scratch_pool));
+ SVN_ERR(svn_wc_read_kind2(&kind, wc_ctx, local_abspath,
+ (revision->kind != svn_opt_revision_working),
+ FALSE, scratch_pool));
if (kind == svn_node_unknown || kind == svn_node_none)
return svn_error_createf(SVN_ERR_UNVERSIONED_RESOURCE, NULL,
@@ -87,7 +89,7 @@ svn_client__get_normalized_stream(svn_stream_t **normal_stream,
result_pool, scratch_pool));
if (input == NULL)
return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
- _("'%s' has no base revision until it is committed"),
+ _("'%s' has no pristine version until it is committed"),
svn_dirent_local_style(local_abspath, scratch_pool));
SVN_ERR(svn_wc_get_pristine_props(&props, wc_ctx, local_abspath,
@@ -104,45 +106,36 @@ svn_client__get_normalized_stream(svn_stream_t **normal_stream,
scratch_pool));
SVN_ERR(svn_wc_status3(&status, wc_ctx, local_abspath, scratch_pool,
scratch_pool));
- if (status->text_status != svn_wc_status_normal)
+ if (status->node_status != svn_wc_status_normal)
local_mod = TRUE;
}
- eol_style = apr_hash_get(props, SVN_PROP_EOL_STYLE,
- APR_HASH_KEY_STRING);
- keywords = apr_hash_get(props, SVN_PROP_KEYWORDS,
- APR_HASH_KEY_STRING);
- special = apr_hash_get(props, SVN_PROP_SPECIAL,
- APR_HASH_KEY_STRING);
+ eol_style = svn_hash_gets(props, SVN_PROP_EOL_STYLE);
+ keywords = svn_hash_gets(props, SVN_PROP_KEYWORDS);
+ special = svn_hash_gets(props, SVN_PROP_SPECIAL);
if (eol_style)
svn_subst_eol_style_from_value(&style, &eol, eol_style->data);
- if (local_mod && (! special))
- {
- /* Use the modified time from the working copy if
- the file */
- SVN_ERR(svn_io_file_affected_time(&tm, local_abspath, scratch_pool));
- }
- else
- {
- SVN_ERR(svn_wc__node_get_changed_info(NULL, &tm, NULL, wc_ctx,
- local_abspath, scratch_pool,
- scratch_pool));
- }
-
if (keywords)
{
svn_revnum_t changed_rev;
const char *rev_str;
const char *author;
const char *url;
+ apr_time_t tm;
+ const char *repos_root_url;
+ const char *repos_relpath;
- SVN_ERR(svn_wc__node_get_changed_info(&changed_rev, NULL, &author, wc_ctx,
+ SVN_ERR(svn_wc__node_get_changed_info(&changed_rev, &tm, &author, wc_ctx,
local_abspath, scratch_pool,
scratch_pool));
- SVN_ERR(svn_wc__node_get_url(&url, wc_ctx, local_abspath, scratch_pool,
- scratch_pool));
+ SVN_ERR(svn_wc__node_get_repos_info(NULL, &repos_relpath, &repos_root_url,
+ NULL,
+ wc_ctx, local_abspath, scratch_pool,
+ scratch_pool));
+ url = svn_path_url_add_component2(repos_root_url, repos_relpath,
+ scratch_pool);
if (local_mod)
{
@@ -152,14 +145,22 @@ svn_client__get_normalized_stream(svn_stream_t **normal_stream,
current user's username */
rev_str = apr_psprintf(scratch_pool, "%ldM", changed_rev);
author = _("(local)");
+
+ if (! special)
+ {
+ /* Use the modified time from the working copy for files */
+ SVN_ERR(svn_io_file_affected_time(&tm, local_abspath,
+ scratch_pool));
+ }
}
else
{
rev_str = apr_psprintf(scratch_pool, "%ld", changed_rev);
}
- SVN_ERR(svn_subst_build_keywords2(&kw, keywords->data, rev_str, url, tm,
- author, scratch_pool));
+ SVN_ERR(svn_subst_build_keywords3(&kw, keywords->data, rev_str, url,
+ repos_root_url, tm, author,
+ scratch_pool));
}
/* Wrap the output stream if translation is needed. */
@@ -183,11 +184,11 @@ svn_client_cat2(svn_stream_t *out,
apr_pool_t *pool)
{
svn_ra_session_t *ra_session;
- svn_revnum_t rev;
+ svn_client__pathrev_t *loc;
svn_string_t *eol_style;
svn_string_t *keywords;
apr_hash_t *props;
- const char *url;
+ const char *repos_root_url;
svn_stream_t *output = out;
svn_error_t *err;
@@ -227,20 +228,24 @@ svn_client_cat2(svn_stream_t *out,
}
/* Get an RA plugin for this filesystem object. */
- SVN_ERR(svn_client__ra_session_from_path(&ra_session, &rev,
- &url, path_or_url, NULL,
- peg_revision,
- revision, ctx, pool));
+ SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &loc,
+ path_or_url, NULL,
+ peg_revision,
+ revision, ctx, pool));
+
+ /* Find the repos root URL */
+ SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root_url, pool));
/* Grab some properties we need to know in order to figure out if anything
special needs to be done with this file. */
- err = svn_ra_get_file(ra_session, "", rev, NULL, NULL, &props, pool);
+ err = svn_ra_get_file(ra_session, "", loc->rev, NULL, NULL, &props, pool);
if (err)
{
if (err->apr_err == SVN_ERR_FS_NOT_FILE)
{
return svn_error_createf(SVN_ERR_CLIENT_IS_DIRECTORY, err,
- _("URL '%s' refers to a directory"), url);
+ _("URL '%s' refers to a directory"),
+ loc->url);
}
else
{
@@ -248,8 +253,8 @@ svn_client_cat2(svn_stream_t *out,
}
}
- eol_style = apr_hash_get(props, SVN_PROP_EOL_STYLE, APR_HASH_KEY_STRING);
- keywords = apr_hash_get(props, SVN_PROP_KEYWORDS, APR_HASH_KEY_STRING);
+ eol_style = svn_hash_gets(props, SVN_PROP_EOL_STYLE);
+ keywords = svn_hash_gets(props, SVN_PROP_KEYWORDS);
if (eol_style || keywords)
{
@@ -272,22 +277,18 @@ svn_client_cat2(svn_stream_t *out,
svn_string_t *cmt_rev, *cmt_date, *cmt_author;
apr_time_t when = 0;
- cmt_rev = apr_hash_get(props, SVN_PROP_ENTRY_COMMITTED_REV,
- APR_HASH_KEY_STRING);
- cmt_date = apr_hash_get(props, SVN_PROP_ENTRY_COMMITTED_DATE,
- APR_HASH_KEY_STRING);
- cmt_author = apr_hash_get(props, SVN_PROP_ENTRY_LAST_AUTHOR,
- APR_HASH_KEY_STRING);
+ cmt_rev = svn_hash_gets(props, SVN_PROP_ENTRY_COMMITTED_REV);
+ cmt_date = svn_hash_gets(props, SVN_PROP_ENTRY_COMMITTED_DATE);
+ cmt_author = svn_hash_gets(props, SVN_PROP_ENTRY_LAST_AUTHOR);
if (cmt_date)
SVN_ERR(svn_time_from_cstring(&when, cmt_date->data, pool));
- SVN_ERR(svn_subst_build_keywords2
- (&kw, keywords->data,
- cmt_rev->data,
- url,
- when,
- cmt_author ? cmt_author->data : NULL,
- pool));
+ SVN_ERR(svn_subst_build_keywords3(&kw, keywords->data,
+ cmt_rev->data, loc->url,
+ repos_root_url, when,
+ cmt_author ?
+ cmt_author->data : NULL,
+ pool));
}
else
kw = NULL;
@@ -297,7 +298,7 @@ svn_client_cat2(svn_stream_t *out,
eol_str, FALSE, kw, TRUE, pool);
}
- SVN_ERR(svn_ra_get_file(ra_session, "", rev, output, NULL, NULL, pool));
+ SVN_ERR(svn_ra_get_file(ra_session, "", loc->rev, output, NULL, NULL, pool));
if (out != output)
/* Close the interjected stream */
diff --git a/subversion/libsvn_client/checkout.c b/subversion/libsvn_client/checkout.c
index 96e684b..41be776 100644
--- a/subversion/libsvn_client/checkout.c
+++ b/subversion/libsvn_client/checkout.c
@@ -49,10 +49,7 @@
static svn_error_t *
initialize_area(const char *local_abspath,
- const char *session_url,
- const char *repos_root,
- const char *uuid,
- svn_revnum_t revnum,
+ const svn_client__pathrev_t *pathrev,
svn_depth_t depth,
svn_client_ctx_t *ctx,
apr_pool_t *pool)
@@ -61,8 +58,9 @@ initialize_area(const char *local_abspath,
depth = svn_depth_infinity;
/* Make the unversioned directory into a versioned one. */
- SVN_ERR(svn_wc_ensure_adm4(ctx->wc_ctx, local_abspath, session_url,
- repos_root, uuid, revnum, depth, pool));
+ SVN_ERR(svn_wc_ensure_adm4(ctx->wc_ctx, local_abspath, pathrev->url,
+ pathrev->repos_root_url, pathrev->repos_uuid,
+ pathrev->rev, depth, pool));
return SVN_NO_ERROR;
}
@@ -80,17 +78,10 @@ svn_client__checkout_internal(svn_revnum_t *result_rev,
svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
- svn_error_t *err = NULL;
- svn_revnum_t revnum;
- svn_boolean_t sleep_here = FALSE;
- svn_boolean_t *use_sleep = timestamp_sleep ? timestamp_sleep : &sleep_here;
- const char *session_url;
svn_node_kind_t kind;
- const char *uuid, *repos_root;
apr_pool_t *session_pool = svn_pool_create(pool);
svn_ra_session_t *ra_session;
- svn_revnum_t tmp_revnum;
- const char *tmp_session_url;
+ svn_client__pathrev_t *pathrev;
/* Sanity check. Without these, the checkout is meaningless. */
SVN_ERR_ASSERT(local_abspath != NULL);
@@ -104,26 +95,22 @@ svn_client__checkout_internal(svn_revnum_t *result_rev,
return svn_error_create(SVN_ERR_CLIENT_BAD_REVISION, NULL, NULL);
/* Get the RA connection. */
- SVN_ERR(svn_client__ra_session_from_path(&ra_session, &tmp_revnum,
- &tmp_session_url, url, NULL,
- peg_revision, revision, ctx,
- session_pool));
+ SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &pathrev,
+ url, NULL, peg_revision, revision,
+ ctx, session_pool));
- SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root, pool));
- SVN_ERR(svn_ra_get_uuid2(ra_session, &uuid, pool));
- session_url = apr_pstrdup(pool, tmp_session_url);
- revnum = tmp_revnum;
- SVN_ERR(svn_ra_check_path(ra_session, "", revnum, &kind, pool));
+ pathrev = svn_client__pathrev_dup(pathrev, pool);
+ SVN_ERR(svn_ra_check_path(ra_session, "", pathrev->rev, &kind, pool));
svn_pool_destroy(session_pool);
if (kind == svn_node_none)
return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
- _("URL '%s' doesn't exist"), session_url);
+ _("URL '%s' doesn't exist"), pathrev->url);
else if (kind == svn_node_file)
return svn_error_createf
(SVN_ERR_UNSUPPORTED_FEATURE , NULL,
- _("URL '%s' refers to a file, not a directory"), session_url);
+ _("URL '%s' refers to a file, not a directory"), pathrev->url);
SVN_ERR(svn_io_check_path(local_abspath, &kind, pool));
@@ -133,8 +120,7 @@ svn_client__checkout_internal(svn_revnum_t *result_rev,
entries file should only have an entry for THIS_DIR with a
URL, revnum, and an 'incomplete' flag. */
SVN_ERR(svn_io_make_dir_recursively(local_abspath, pool));
- err = initialize_area(local_abspath, session_url,
- repos_root, uuid, revnum, depth, ctx, pool);
+ SVN_ERR(initialize_area(local_abspath, pathrev, depth, ctx, pool));
}
else if (kind == svn_node_dir)
{
@@ -144,8 +130,7 @@ svn_client__checkout_internal(svn_revnum_t *result_rev,
SVN_ERR(svn_wc_check_wc2(&wc_format, ctx->wc_ctx, local_abspath, pool));
if (! wc_format)
{
- err = initialize_area(local_abspath, session_url,
- repos_root, uuid, revnum, depth, ctx, pool);
+ SVN_ERR(initialize_area(local_abspath, pathrev, depth, ctx, pool));
}
else
{
@@ -156,7 +141,7 @@ svn_client__checkout_internal(svn_revnum_t *result_rev,
/* If PATH's existing URL matches the incoming one, then
just update. This allows 'svn co' to restart an
interrupted checkout. Otherwise bail out. */
- if (strcmp(entry_url, session_url) != 0)
+ if (strcmp(entry_url, pathrev->url) != 0)
return svn_error_createf(
SVN_ERR_WC_OBSTRUCTED_UPDATE, NULL,
_("'%s' is already a working copy for a"
@@ -172,28 +157,13 @@ svn_client__checkout_internal(svn_revnum_t *result_rev,
}
/* Have update fix the incompleteness. */
- if (! err)
- {
- err = svn_client__update_internal(result_rev, local_abspath,
- revision, depth, TRUE,
- ignore_externals,
- allow_unver_obstructions,
- TRUE /* adds_as_modification */,
- FALSE, FALSE,
- use_sleep, ctx, pool);
- }
-
- if (err)
- {
- /* Don't rely on the error handling to handle the sleep later, do
- it now */
- svn_io_sleep_for_timestamps(local_abspath, pool);
- return svn_error_trace(err);
- }
- *use_sleep = TRUE;
-
- if (sleep_here)
- svn_io_sleep_for_timestamps(local_abspath, pool);
+ SVN_ERR(svn_client__update_internal(result_rev, local_abspath,
+ revision, depth, TRUE,
+ ignore_externals,
+ allow_unver_obstructions,
+ TRUE /* adds_as_modification */,
+ FALSE, FALSE,
+ timestamp_sleep, ctx, pool));
return SVN_NO_ERROR;
}
@@ -211,12 +181,18 @@ svn_client_checkout3(svn_revnum_t *result_rev,
apr_pool_t *pool)
{
const char *local_abspath;
+ svn_error_t *err;
+ svn_boolean_t sleep_here = FALSE;
SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, pool));
- return svn_client__checkout_internal(result_rev, URL, local_abspath,
- peg_revision, revision, depth,
- ignore_externals,
- allow_unver_obstructions, NULL,
- ctx, pool);
+ err = svn_client__checkout_internal(result_rev, URL, local_abspath,
+ peg_revision, revision, depth,
+ ignore_externals,
+ allow_unver_obstructions, &sleep_here,
+ ctx, pool);
+ if (sleep_here)
+ svn_io_sleep_for_timestamps(local_abspath, pool);
+
+ return svn_error_trace(err);
}
diff --git a/subversion/libsvn_client/cleanup.c b/subversion/libsvn_client/cleanup.c
index 82e22e9..b15e824 100644
--- a/subversion/libsvn_client/cleanup.c
+++ b/subversion/libsvn_client/cleanup.c
@@ -38,7 +38,6 @@
#include "svn_props.h"
#include "svn_private_config.h"
-#include "private/svn_wc_private.h"
/*** Code. ***/
@@ -62,148 +61,3 @@ svn_client_cleanup(const char *path,
svn_io_sleep_for_timestamps(path, scratch_pool);
return svn_error_trace(err);
}
-
-
-/* callback baton for fetch_repos_info */
-struct repos_info_baton
-{
- apr_pool_t *state_pool;
- svn_client_ctx_t *ctx;
- const char *last_repos;
- const char *last_uuid;
-};
-
-/* svn_wc_upgrade_get_repos_info_t implementation for calling
- svn_wc_upgrade() from svn_client_upgrade() */
-static svn_error_t *
-fetch_repos_info(const char **repos_root,
- const char **repos_uuid,
- void *baton,
- const char *url,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- struct repos_info_baton *ri = baton;
- apr_pool_t *subpool;
- svn_ra_session_t *ra_session;
-
- /* The same info is likely to retrieved multiple times (e.g. externals) */
- if (ri->last_repos && svn_uri__is_child(ri->last_repos, url, scratch_pool))
- {
- *repos_root = apr_pstrdup(result_pool, ri->last_repos);
- *repos_uuid = apr_pstrdup(result_pool, ri->last_uuid);
- return SVN_NO_ERROR;
- }
-
- subpool = svn_pool_create(scratch_pool);
-
- SVN_ERR(svn_client_open_ra_session(&ra_session, url, ri->ctx, subpool));
-
- SVN_ERR(svn_ra_get_repos_root2(ra_session, repos_root, result_pool));
- SVN_ERR(svn_ra_get_uuid2(ra_session, repos_uuid, result_pool));
-
- /* Store data for further calls */
- ri->last_repos = apr_pstrdup(ri->state_pool, *repos_root);
- ri->last_uuid = apr_pstrdup(ri->state_pool, *repos_uuid);
-
- svn_pool_destroy(subpool);
-
- return SVN_NO_ERROR;
-}
-
-svn_error_t *
-svn_client_upgrade(const char *path,
- svn_client_ctx_t *ctx,
- apr_pool_t *scratch_pool)
-{
- const char *local_abspath;
- apr_hash_t *externals;
- apr_hash_index_t *hi;
- apr_pool_t *iterpool;
- apr_pool_t *iterpool2;
- svn_opt_revision_t rev = {svn_opt_revision_unspecified, {0}};
- struct repos_info_baton info_baton;
-
- info_baton.state_pool = scratch_pool;
- info_baton.ctx = ctx;
- info_baton.last_repos = NULL;
- info_baton.last_uuid = NULL;
-
- if (svn_path_is_url(path))
- return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
- _("'%s' is not a local path"), path);
-
- SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, scratch_pool));
- SVN_ERR(svn_wc_upgrade(ctx->wc_ctx, local_abspath,
- fetch_repos_info, &info_baton,
- ctx->cancel_func, ctx->cancel_baton,
- ctx->notify_func2, ctx->notify_baton2,
- scratch_pool));
-
- /* Now it's time to upgrade the externals too. We do it after the wc
- upgrade to avoid that errors in the externals causes the wc upgrade to
- fail. Thanks to caching the performance penalty of walking the wc a
- second time shouldn't be too severe */
- SVN_ERR(svn_client_propget4(&externals, SVN_PROP_EXTERNALS, local_abspath,
- &rev, &rev, NULL, svn_depth_infinity, NULL, ctx,
- scratch_pool, scratch_pool));
-
- iterpool = svn_pool_create(scratch_pool);
- iterpool2 = svn_pool_create(scratch_pool);
-
- for (hi = apr_hash_first(scratch_pool, externals); hi;
- hi = apr_hash_next(hi))
- {
- int i;
- const char *externals_parent = svn__apr_hash_index_key(hi);
- svn_string_t *external_desc = svn__apr_hash_index_val(hi);
- apr_array_header_t *externals_p;
-
- svn_pool_clear(iterpool);
- externals_p = apr_array_make(iterpool, 1,
- sizeof(svn_wc_external_item2_t*));
-
- SVN_ERR(svn_wc_parse_externals_description3(
- &externals_p, svn_dirent_dirname(path, iterpool),
- external_desc->data, TRUE, iterpool));
- for (i = 0; i < externals_p->nelts; i++)
- {
- svn_wc_external_item2_t *item;
- const char *external_abspath;
- const char *external_path;
- svn_node_kind_t kind;
- svn_error_t *err;
-
- item = APR_ARRAY_IDX(externals_p, i, svn_wc_external_item2_t*);
-
- svn_pool_clear(iterpool2);
- external_path = svn_dirent_join(externals_parent, item->target_dir,
- iterpool2);
-
- SVN_ERR(svn_dirent_get_absolute(&external_abspath, external_path,
- iterpool2));
-
- /* This is hack. We can only send dirs to svn_wc_upgrade(). This
- way we will get an exception saying that the wc must be
- upgraded if it's a dir. If it's a file then the lookup is done
- in an adm_dir belonging to the real wc and since that was
- updated before the externals no error is returned. */
- err = svn_wc_read_kind(&kind, ctx->wc_ctx, external_abspath, FALSE,
- iterpool2);
-
- if (err && err->apr_err == SVN_ERR_WC_UPGRADE_REQUIRED)
- {
- svn_error_clear(err);
-
- SVN_ERR(svn_client_upgrade(external_abspath, ctx, iterpool2));
- }
- else
- SVN_ERR(err);
- }
- }
-
- svn_pool_destroy(iterpool);
- svn_pool_destroy(iterpool2);
-
- return SVN_NO_ERROR;
-}
diff --git a/subversion/libsvn_client/client.h b/subversion/libsvn_client/client.h
index fd5eb53..f136888 100644
--- a/subversion/libsvn_client/client.h
+++ b/subversion/libsvn_client/client.h
@@ -20,7 +20,8 @@
* under the License.
* ====================================================================
*/
-
+
+
#ifndef SVN_LIBSVN_CLIENT_H
#define SVN_LIBSVN_CLIENT_H
@@ -36,6 +37,9 @@
#include "svn_client.h"
#include "private/svn_magic.h"
+#include "private/svn_client_private.h"
+#include "private/svn_diff_tree.h"
+#include "private/svn_editor.h"
#ifdef __cplusplus
extern "C" {
@@ -86,16 +90,18 @@ svn_client__get_revision_number(svn_revnum_t *revnum,
const svn_opt_revision_t *revision,
apr_pool_t *scratch_pool);
-/* Set *COPYFROM_PATH and *COPYFROM_REV to the path (without initial '/')
- and revision that served as the source of the copy from which PATH_OR_URL
- at REVISION was created, or NULL and SVN_INVALID_REVNUM (respectively) if
- PATH_OR_URL at REVISION was not the result of a copy operation. */
-svn_error_t *svn_client__get_copy_source(const char *path_or_url,
- const svn_opt_revision_t *revision,
- const char **copyfrom_path,
- svn_revnum_t *copyfrom_rev,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool);
+/* Set *ORIGINAL_REPOS_RELPATH and *ORIGINAL_REVISION to the original location
+ that served as the source of the copy from which PATH_OR_URL at REVISION was
+ created, or NULL and SVN_INVALID_REVNUM (respectively) if PATH_OR_URL at
+ REVISION was not the result of a copy operation. */
+svn_error_t *
+svn_client__get_copy_source(const char **original_repos_relpath,
+ svn_revnum_t *original_revision,
+ const char *path_or_url,
+ const svn_opt_revision_t *revision,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
/* Set *START_URL and *START_REVISION (and maybe *END_URL
and *END_REVISION) to the revisions and repository URLs of one
@@ -105,10 +111,14 @@ svn_error_t *svn_client__get_copy_source(const char *path_or_url,
specify the point(s) of interest (typically the revisions referred
to as the "operative range" for a given operation) along that history.
- END may be of kind svn_opt_revision_unspecified (in which case
+ START_REVISION and/or END_REVISION may be NULL if not wanted.
+ END may be NULL or of kind svn_opt_revision_unspecified (in either case
END_URL and END_REVISION are not touched by the function);
START and REVISION may not.
+ If PATH is a WC path and REVISION is of kind svn_opt_revision_working,
+ then look at the PATH's copy-from URL instead of its base URL.
+
RA_SESSION should be an open RA session pointing at the URL of PATH,
or NULL, in which case this function will open its own temporary session.
@@ -128,9 +138,9 @@ svn_error_t *svn_client__get_copy_source(const char *path_or_url,
Use POOL for all allocations. */
svn_error_t *
svn_client__repos_locations(const char **start_url,
- svn_opt_revision_t **start_revision,
+ svn_revnum_t *start_revision,
const char **end_url,
- svn_opt_revision_t **end_revision,
+ svn_revnum_t *end_revision,
svn_ra_session_t *ra_session,
const char *path,
const svn_opt_revision_t *revision,
@@ -139,10 +149,27 @@ svn_client__repos_locations(const char **start_url,
svn_client_ctx_t *ctx,
apr_pool_t *pool);
+/* Trace a line of history of a particular versioned resource back to a
+ * specific revision.
+ *
+ * Set *OP_LOC_P to the location that the object PEG_LOC had in
+ * revision OP_REVNUM.
+ *
+ * RA_SESSION is an open RA session to the correct repository; it may be
+ * temporarily reparented inside this function. */
+svn_error_t *
+svn_client__repos_location(svn_client__pathrev_t **op_loc_p,
+ svn_ra_session_t *ra_session,
+ const svn_client__pathrev_t *peg_loc,
+ svn_revnum_t op_revnum,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
/* Set *SEGMENTS to an array of svn_location_segment_t * objects, each
- representing a reposition location segment for the history of PATH
- (which is relative to RA_SESSION's session URL) in PEG_REVISION
+ representing a reposition location segment for the history of URL
+ in PEG_REVISION
between END_REVISION and START_REVISION, ordered from oldest
segment to youngest. *SEGMENTS may be empty but it will never
be NULL.
@@ -151,13 +178,16 @@ svn_client__repos_locations(const char **start_url,
svn_ra_get_location_segments() interface, which see for the rules
governing PEG_REVISION, START_REVISION, and END_REVISION.
+ RA_SESSION is an RA session open to the repository of URL; it may be
+ temporarily reparented within this function.
+
CTX is the client context baton.
Use POOL for all allocations. */
svn_error_t *
svn_client__repos_location_segments(apr_array_header_t **segments,
svn_ra_session_t *ra_session,
- const char *path,
+ const char *url,
svn_revnum_t peg_revision,
svn_revnum_t start_revision,
svn_revnum_t end_revision,
@@ -165,122 +195,92 @@ svn_client__repos_location_segments(apr_array_header_t **segments,
apr_pool_t *pool);
-/* Set *ANCESTOR_PATH and *ANCESTOR_REVISION to the youngest common
- ancestor path (a path relative to the root of the repository) and
- revision, respectively, of the two locations identified as
- PATH_OR_URL1@REV1 and PATH_OR_URL2@REV1. Use the authentication
- baton cached in CTX to authenticate against the repository.
- This function assumes that PATH_OR_URL1@REV1 and PATH_OR_URL2@REV1
- both refer to the same repository. Use POOL for all allocations. */
+/* Find the common ancestor of two locations in a repository.
+ Ancestry is determined by the 'copy-from' relationship and the normal
+ successor relationship.
+
+ Set *ANCESTOR_P to the location of the youngest common ancestor of
+ LOC1 and LOC2. If the locations have no common ancestor (including if
+ they don't have the same repository root URL), set *ANCESTOR_P to NULL.
+
+ If SESSION is not NULL, use it for retrieving the common ancestor instead
+ of creating a new session.
+
+ Use the authentication baton cached in CTX to authenticate against
+ the repository. Use POOL for all allocations.
+
+ See also svn_client__calc_youngest_common_ancestor() to find youngest
+ common ancestor for already fetched history-as-mergeinfo information.
+
+ See also svn_client__youngest_common_ancestor().
+*/
svn_error_t *
-svn_client__get_youngest_common_ancestor(const char **ancestor_path,
- svn_revnum_t *ancestor_revision,
- const char *path_or_url1,
- svn_revnum_t rev1,
- const char *path_or_url2,
- svn_revnum_t rev2,
+svn_client__get_youngest_common_ancestor(svn_client__pathrev_t **ancestor_p,
+ const svn_client__pathrev_t *loc1,
+ const svn_client__pathrev_t *loc2,
+ svn_ra_session_t *session,
svn_client_ctx_t *ctx,
- apr_pool_t *pool);
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
-/* Given PATH_OR_URL, which contains either a working copy path or an
- absolute URL, a peg revision PEG_REVISION, and a desired revision
- REVISION, create an RA connection to that object as it exists in
- that revision, following copy history if necessary. If REVISION is
- younger than PEG_REVISION, then PATH_OR_URL will be checked to see
- that it is the same node in both PEG_REVISION and REVISION. If it
- is not, then @c SVN_ERR_CLIENT_UNRELATED_RESOURCES is returned.
+/* Find the common ancestor of two locations in a repository using already
+ fetched history-as-mergeinfo information.
- BASE_DIR_ABSPATH is the working copy path the ra_session corresponds to,
- should only be used if PATH_OR_URL is a url.
+ Ancestry is determined by the 'copy-from' relationship and the normal
+ successor relationship.
- If PEG_REVISION's kind is svn_opt_revision_unspecified, it is
- interpreted as "head" for a URL or "working" for a working-copy path.
+ Set *ANCESTOR_P to the location of the youngest common ancestor of
+ LOC1 and LOC2. If the locations have no common ancestor (including if
+ they don't have the same repository root URL), set *ANCESTOR_P to NULL.
- Store the resulting ra_session in *RA_SESSION_P. Store the actual
- revision number of the object in *REV_P, and the final resulting
- URL in *URL_P.
+ HISTORY1, HAS_REV_ZERO_HISTORY1, HISTORY2, HAS_REV_ZERO_HISTORY2 are
+ history-as-mergeinfo information as returned by
+ svn_client__get_history_as_mergeinfo() for LOC1 and LOC2 respectively.
- Use authentication baton cached in CTX to authenticate against the
- repository.
+ See also svn_client__get_youngest_common_ancestor().
- Use POOL for all allocations. */
+*/
svn_error_t *
-svn_client__ra_session_from_path(svn_ra_session_t **ra_session_p,
- svn_revnum_t *rev_p,
- const char **url_p,
- const char *path_or_url,
- const char *base_dir_abspath,
- const svn_opt_revision_t *peg_revision,
- const svn_opt_revision_t *revision,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool);
+svn_client__calc_youngest_common_ancestor(svn_client__pathrev_t **ancestor_p,
+ const svn_client__pathrev_t *loc1,
+ apr_hash_t *history1,
+ svn_boolean_t has_rev_zero_history1,
+ const svn_client__pathrev_t *loc2,
+ apr_hash_t *history2,
+ svn_boolean_t has_rev_zero_history2,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
/* Ensure that RA_SESSION's session URL matches SESSION_URL,
- reparenting that session if necessary. If reparenting occurs,
- store the previous session URL in *OLD_SESSION_URL (so that if the
+ reparenting that session if necessary.
+ Store the previous session URL in *OLD_SESSION_URL (so that if the
reparenting is meant to be temporary, the caller can reparent the
- session back to where it was); otherwise set *OLD_SESSION_URL to
- NULL.
+ session back to where it was).
If SESSION_URL is NULL, treat this as a magic value meaning "point
- the RA session to the root of the repository". */
-svn_error_t *
-svn_client__ensure_ra_session_url(const char **old_session_url,
- svn_ra_session_t *ra_session,
- const char *session_url,
- apr_pool_t *pool);
-
-/* Set REPOS_ROOT, allocated in RESULT_POOL to the URL which represents
- the root of the repository in with ABSPATH_OR_URL is versioned.
- Use the authentication baton and working copy context cached in CTX as
- necessary.
-
- Use SCRATCH_POOL for temporary allocations. */
-svn_error_t *
-svn_client__get_repos_root(const char **repos_root,
- const char *abspath_or_url,
- svn_client_ctx_t *ctx,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
+ the RA session to the root of the repository".
-/* Return the path of ABSPATH_OR_URL relative to the repository root
- (REPOS_ROOT) in REL_PATH (URI-decoded), both allocated in RESULT_POOL.
- If INCLUDE_LEADING_SLASH is set, the returned result will have a leading
- slash; otherwise, it will not.
+ NOTE: The typical usage pattern for this functions is:
- The remaining parameters are used to procure the repository root.
- Either REPOS_ROOT or RA_SESSION -- but not both -- may be NULL.
- REPOS_ROOT should be passed when available as an optimization (in
- that order of preference).
+ const char *old_session_url;
+ SVN_ERR(svn_client__ensure_ra_session_url(&old_session_url,
+ ra_session,
+ new_session_url,
+ pool);
- CAUTION: While having a leading slash on a so-called relative path
- might work out well for functionality that interacts with
- mergeinfo, it results in a relative path that cannot be naively
- svn_path_join()'d with a repository root URL to provide a full URL.
+ [...]
- Use SCRATCH_POOL for temporary allocations.
+ SVN_ERR(svn_ra_reparent(ra_session, old_session_url, pool));
*/
svn_error_t *
-svn_client__path_relative_to_root(const char **rel_path,
- svn_wc_context_t *wc_ctx,
- const char *abspath_or_url,
- const char *repos_root,
- svn_boolean_t include_leading_slash,
+svn_client__ensure_ra_session_url(const char **old_session_url,
svn_ra_session_t *ra_session,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
+ const char *session_url,
+ apr_pool_t *pool);
-/* A default error handler for use with svn_wc_walk_entries3(). Returns
- ERR in all cases. */
-svn_error_t *
-svn_client__default_walker_error_handler(const char *path,
- svn_error_t *err,
- void *walk_baton,
- apr_pool_t *pool);
+/* ---------------------------------------------------------------- */
-/* ---------------------------------------------------------------- */
-
/*** RA callbacks ***/
@@ -299,15 +299,18 @@ svn_client__default_walker_error_handler(const char *path,
- COMMIT_ITEMS is an array of svn_client_commit_item_t *
structures, present only for working copy commits, NULL otherwise.
- - USE_ADMIN indicates that the RA layer should create tempfiles
- in the administrative area instead of in the working copy itself,
- and read properties from the administrative area.
+ - WRITE_DAV_PROPS indicates that the RA layer can clear and write
+ the DAV properties in the working copy of BASE_DIR_ABSPATH.
- - READ_ONLY_WC indicates that the RA layer should not attempt to
- modify the WC props directly.
+ - READ_DAV_PROPS indicates that the RA layer should not attempt to
+ modify the WC props directly, but is still allowed to read them.
BASE_DIR_ABSPATH may be NULL if the RA operation does not correspond to a
- working copy (in which case, USE_ADMIN should be FALSE).
+ working copy (in which case, WRITE_DAV_PROPS and READ_DAV_PROPS must be
+ FALSE.
+
+ If WRITE_DAV_PROPS and READ_DAV_PROPS are both FALSE the working copy may
+ still be used for locating pristine files via their SHA1.
The calling application's authentication baton is provided in CTX,
and allocations related to this session are performed in POOL.
@@ -320,46 +323,115 @@ svn_client__open_ra_session_internal(svn_ra_session_t **ra_session,
const char *base_url,
const char *base_dir_abspath,
const apr_array_header_t *commit_items,
- svn_boolean_t use_admin,
- svn_boolean_t read_only_wc,
+ svn_boolean_t write_dav_props,
+ svn_boolean_t read_dav_props,
svn_client_ctx_t *ctx,
- apr_pool_t *pool);
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+svn_error_t *
+svn_client__ra_provide_base(svn_stream_t **contents,
+ svn_revnum_t *revision,
+ void *baton,
+ const char *repos_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
-/* ---------------------------------------------------------------- */
-
-/*** Status ***/
-
-/* Verify that the path can be deleted without losing stuff,
- i.e. ensure that there are no modified or unversioned resources
- under PATH. This is similar to checking the output of the status
- command. CTX is used for the client's config options. POOL is
- used for all temporary allocations. */
-svn_error_t * svn_client__can_delete(const char *path,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool);
+
+svn_error_t *
+svn_client__ra_provide_props(apr_hash_t **props,
+ svn_revnum_t *revision,
+ void *baton,
+ const char *repos_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
+svn_error_t *
+svn_client__ra_get_copysrc_kind(svn_node_kind_t *kind,
+ void *baton,
+ const char *repos_relpath,
+ svn_revnum_t src_revision,
+ apr_pool_t *scratch_pool);
+void *
+svn_client__ra_make_cb_baton(svn_wc_context_t *wc_ctx,
+ apr_hash_t *relpath_map,
+ apr_pool_t *result_pool);
+
/* ---------------------------------------------------------------- */
-
-/*** Add/delete ***/
-/* Read automatic properties matching PATH from CTX->config.
- Set *PROPERTIES to a hash containing propname/value pairs
- (const char * keys mapping to svn_string_t * values), or if
- auto-props are disabled, set *PROPERTIES to NULL.
- Set *MIMETYPE to the mimetype, if any, or to NULL.
- If MAGIC_COOKIE is not NULL and no mime-type can be determined
- via CTX->config try to detect the mime-type with libmagic.
- Allocate the hash table, keys, values, and mimetype in POOL. */
-svn_error_t *svn_client__get_auto_props(apr_hash_t **properties,
- const char **mimetype,
- const char *path,
- svn_magic__cookie_t *magic_cookie,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool);
+/*** Add/delete ***/
+
+/* If AUTOPROPS is not null: Then read automatic properties matching PATH
+ from AUTOPROPS. AUTOPROPS is is a hash as per
+ svn_client__get_all_auto_props. Set *PROPERTIES to a hash containing
+ propname/value pairs (const char * keys mapping to svn_string_t * values).
+
+ If AUTOPROPS is null then set *PROPERTIES to an empty hash.
+
+ If *MIMETYPE is null or "application/octet-stream" then check AUTOPROPS
+ for a matching svn:mime-type. If AUTOPROPS is null or no match is found
+ and MAGIC_COOKIE is not NULL, then then try to detect the mime-type with
+ libmagic. If a mimetype is found then add it to *PROPERTIES and set
+ *MIMETYPE to the mimetype value or NULL otherwise.
+
+ Allocate the *PROPERTIES and its contents as well as *MIMETYPE, in
+ RESULT_POOL. Use SCRATCH_POOL for temporary allocations. */
+svn_error_t *svn_client__get_paths_auto_props(
+ apr_hash_t **properties,
+ const char **mimetype,
+ const char *path,
+ svn_magic__cookie_t *magic_cookie,
+ apr_hash_t *autoprops,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Gather all auto-props from CTX->config (or none if auto-props are
+ disabled) and all svn:auto-props explicitly set on or inherited
+ by PATH_OR_URL.
+
+ If PATH_OR_URL is an unversioned WC path then gather the
+ svn:auto-props inherited by PATH_OR_URL's nearest versioned
+ parent.
+
+ If PATH_OR_URL is a URL ask for the properties @HEAD, if it is a WC
+ path as sfor the working properties.
+
+ Store both types of auto-props in *AUTOPROPS, a hash mapping const
+ char * file patterns to another hash which maps const char * property
+ names to const char *property values.
+
+ If a given property name exists for the same pattern in both the config
+ file and in an a svn:auto-props property, the latter overrides the
+ former. If a given property name exists for the same pattern in two
+ different inherited svn:auto-props, then the closer path-wise
+ property overrides the more distant. svn:auto-props explicitly set
+ on PATH_OR_URL have the highest precedence and override inherited props
+ and config file settings.
+
+ Allocate *AUTOPROPS in RESULT_POOL. Use SCRATCH_POOL for temporary
+ allocations. */
+svn_error_t *svn_client__get_all_auto_props(apr_hash_t **autoprops,
+ const char *path_or_url,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Get a list of ignore patterns defined by the svn:global-ignores
+ properties set on, or inherited by, PATH_OR_URL. Store the collected
+ patterns as const char * elements in the array *IGNORES. Allocate
+ *IGNORES and its contents in RESULT_POOL. Use SCRATCH_POOL for
+ temporary allocations. */
+svn_error_t *svn_client__get_inherited_ignores(apr_array_header_t **ignores,
+ const char *path_or_url,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
/* The main logic for client deletion from a working copy. Deletes PATH
from CTX->WC_CTX. If PATH (or any item below a directory PATH) is
@@ -372,14 +444,28 @@ svn_error_t *svn_client__get_auto_props(apr_hash_t **properties,
If DRY_RUN is TRUE all the checks are made to ensure that the delete can
occur, but the working copy is not modified. If NOTIFY_FUNC is not
null, it is called with NOTIFY_BATON for each file or directory deleted. */
-svn_error_t * svn_client__wc_delete(const char *path,
- svn_boolean_t force,
- svn_boolean_t dry_run,
- svn_boolean_t keep_local,
- svn_wc_notify_func2_t notify_func,
- void *notify_baton,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool);
+svn_error_t *
+svn_client__wc_delete(const char *local_abspath,
+ svn_boolean_t force,
+ svn_boolean_t dry_run,
+ svn_boolean_t keep_local,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool);
+
+
+/* Like svn_client__wc_delete(), but deletes multiple TARGETS efficiently. */
+svn_error_t *
+svn_client__wc_delete_many(const apr_array_header_t *targets,
+ svn_boolean_t force,
+ svn_boolean_t dry_run,
+ svn_boolean_t keep_local,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool);
+
/* Make PATH and add it to the working copy, optionally making all the
intermediate parent directories if MAKE_PARENTS is TRUE. */
@@ -390,7 +476,8 @@ svn_client__make_local_parents(const char *path,
apr_pool_t *pool);
/* ---------------------------------------------------------------- */
-
+
+
/*** Checkout, update and switch ***/
/* Update a working copy LOCAL_ABSPATH to REVISION, and (if not NULL) set
@@ -415,11 +502,9 @@ svn_client__make_local_parents(const char *path,
If IGNORE_EXTERNALS is true, do no externals processing.
- If TIMESTAMP_SLEEP is NULL this function will sleep before
- returning to ensure timestamp integrity. If TIMESTAMP_SLEEP is not
- NULL then the function will not sleep but will set *TIMESTAMP_SLEEP
- to TRUE if a sleep is required, and will not change
- *TIMESTAMP_SLEEP if no sleep is required.
+ Set *TIMESTAMP_SLEEP to TRUE if a sleep is required; otherwise do not
+ change *TIMESTAMP_SLEEP. The output will be valid even if the function
+ returns an error.
If ALLOW_UNVER_OBSTRUCTIONS is TRUE, unversioned children of LOCAL_ABSPATH
that obstruct items added from the repos are tolerated; if FALSE,
@@ -470,11 +555,11 @@ svn_client__update_internal(svn_revnum_t *result_rev,
If IGNORE_EXTERNALS is true, do no externals processing.
- If TIMESTAMP_SLEEP is NULL this function will sleep before
- returning to ensure timestamp integrity. If TIMESTAMP_SLEEP is not
- NULL then the function will not sleep but will set *TIMESTAMP_SLEEP
- to TRUE if a sleep is required, and will not change *TIMESTAMP_SLEEP
- if no sleep is required. If ALLOW_UNVER_OBSTRUCTIONS is TRUE,
+ Set *TIMESTAMP_SLEEP to TRUE if a sleep is required; otherwise do not
+ change *TIMESTAMP_SLEEP. The output will be valid even if the function
+ returns an error.
+
+ If ALLOW_UNVER_OBSTRUCTIONS is TRUE,
unversioned children of LOCAL_ABSPATH that obstruct items added from
the repos are tolerated; if FALSE, these obstructions cause the checkout
to fail.
@@ -499,11 +584,9 @@ svn_client__checkout_internal(svn_revnum_t *result_rev,
acquired and released if not held. Only switch as deeply as DEPTH
indicates.
- If TIMESTAMP_SLEEP is NULL this function will sleep before
- returning to ensure timestamp integrity. If TIMESTAMP_SLEEP is not
- NULL then the function will not sleep but will set *TIMESTAMP_SLEEP
- to TRUE if a sleep is required, and will not change
- *TIMESTAMP_SLEEP if no sleep is required.
+ Set *TIMESTAMP_SLEEP to TRUE if a sleep is required; otherwise do not
+ change *TIMESTAMP_SLEEP. The output will be valid even if the function
+ returns an error.
If IGNORE_EXTERNALS is true, don't process externals.
@@ -533,84 +616,119 @@ svn_client__switch_internal(svn_revnum_t *result_rev,
apr_pool_t *pool);
/* ---------------------------------------------------------------- */
-
+
+
+/*** Inheritable Properties ***/
+
+/* Convert any svn_prop_inherited_item_t elements in INHERITED_PROPS which
+ have repository root relative path PATH_OR_URL structure members to URLs
+ using REPOS_ROOT_URL. Changes to the contents of INHERITED_PROPS are
+ allocated in RESULT_POOL. SCRATCH_POOL is used for temporary
+ allocations. */
+svn_error_t *
+svn_client__iprop_relpaths_to_urls(apr_array_header_t *inherited_props,
+ const char *repos_root_url,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Fetch the inherited properties for the base of LOCAL_ABSPATH as well
+ as any WC roots under LOCAL_ABSPATH (as limited by DEPTH) using
+ RA_SESSION. Store the results in *WCROOT_IPROPS, a hash mapping
+ const char * absolute working copy paths to depth-first ordered arrays
+ of svn_prop_inherited_item_t * structures.
+
+ Any svn_prop_inherited_item_t->path_or_url members returned in
+ *WCROOT_IPROPS are repository relative paths.
+
+ If LOCAL_ABSPATH has no base then do nothing.
+
+ RA_SESSION should be an open RA session pointing at the URL of PATH,
+ or NULL, in which case this function will use its own temporary session.
+
+ Allocate *WCROOT_IPROPS in RESULT_POOL, use SCRATCH_POOL for temporary
+ allocations.
+
+ If one or more of the paths are not available in the repository at the
+ specified revision, these paths will not be added to the hashtable.
+*/
+svn_error_t *
+svn_client__get_inheritable_props(apr_hash_t **wcroot_iprops,
+ const char *local_abspath,
+ svn_revnum_t revision,
+ svn_depth_t depth,
+ svn_ra_session_t *ra_session,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* ---------------------------------------------------------------- */
+
+
/*** Editor for repository diff ***/
/* Create an editor for a pure repository comparison, i.e. comparing one
repository version against the other.
- TARGET is a working-copy path, the base of the hierarchy to be
- compared. It corresponds to the URL opened in RA_SESSION below.
-
- WC_CTX is a context for the working copy and should be NULL for
- operations that do not involve a working copy.
-
- DIFF_CMD/DIFF_CMD_BATON represent the callback and callback argument that
- implement the file comparison function
+ DIFF_CALLBACKS/DIFF_CMD_BATON represent the callback that implements
+ the comparison.
DEPTH is the depth to recurse.
- DRY_RUN is set if this is a dry-run merge. It is not relevant for diff.
-
- RA_SESSION defines the additional RA session for requesting file
- contents.
+ RA_SESSION is an RA session through which this editor may fetch
+ properties, file contents and directory listings of the 'old' side of the
+ diff. It is a separate RA session from the one through which this editor
+ is being driven. REVISION is the revision number of the 'old' side of
+ the diff.
- REVISION is the start revision in the comparison.
+ If TEXT_DELTAS is FALSE, then do not expect text deltas from the edit
+ drive, nor send the 'before' and 'after' texts to the diff callbacks;
+ instead, send empty files to the diff callbacks if there was a change.
+ This must be FALSE if the edit producer is not sending text deltas,
+ otherwise the file content checksum comparisons will fail.
- If NOTIFY_FUNC is non-null, invoke it with NOTIFY_BATON for each
- file and directory operated on during the edit.
+ EDITOR/EDIT_BATON return the newly created editor and baton.
- EDITOR/EDIT_BATON return the newly created editor and baton. */
+ @since New in 1.8.
+ */
svn_error_t *
-svn_client__get_diff_editor(const svn_delta_editor_t **editor,
- void **edit_baton,
- svn_wc_context_t *wc_ctx,
- const char *target,
- svn_depth_t depth,
- svn_ra_session_t *ra_session,
- svn_revnum_t revision,
- svn_boolean_t walk_deleted_dirs,
- svn_boolean_t dry_run,
- const svn_wc_diff_callbacks4_t *diff_callbacks,
- void *diff_cmd_baton,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- svn_wc_notify_func2_t notify_func,
- void *notify_baton,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
+svn_client__get_diff_editor2(const svn_delta_editor_t **editor,
+ void **edit_baton,
+ svn_ra_session_t *ra_session,
+ svn_depth_t depth,
+ svn_revnum_t revision,
+ svn_boolean_t text_deltas,
+ const svn_diff_tree_processor_t *processor,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool);
/* ---------------------------------------------------------------- */
-
+
+
/*** Editor for diff summary ***/
-/* Create an editor for a repository diff summary, i.e. comparing one
- repository version against the other and only providing information
- about the changed items without the text deltas.
+/* Set *CALLBACKS and *CALLBACK_BATON to a set of diff callbacks that will
+ report a diff summary, i.e. only providing information about the changed
+ items without the text deltas.
- TARGET is the target of the diff, relative to the root of the edit.
+ TARGET is the target path, relative to the anchor, of the diff.
SUMMARIZE_FUNC is called with SUMMARIZE_BATON as parameter by the
- created svn_delta_editor_t for each changed item.
-
- See svn_client__get_diff_editor() for a description of the other
- parameters. */
+ created callbacks for each changed item.
+*/
svn_error_t *
-svn_client__get_diff_summarize_editor(const char *target,
- svn_client_diff_summarize_func_t
- summarize_func,
- void *summarize_baton,
- svn_ra_session_t *ra_session,
- svn_revnum_t revision,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- const svn_delta_editor_t **editor,
- void **edit_baton,
- apr_pool_t *pool);
+svn_client__get_diff_summarize_callbacks(
+ svn_wc_diff_callbacks4_t **callbacks,
+ void **callback_baton,
+ const char *target,
+ svn_boolean_t reversed,
+ svn_client_diff_summarize_func_t summarize_func,
+ void *summarize_baton,
+ apr_pool_t *pool);
/* ---------------------------------------------------------------- */
-
+
+
/*** Copy Stuff ***/
/* This structure is used to associate a specific copy or move SRC with a
@@ -651,7 +769,8 @@ typedef struct svn_client__copy_pair_t
} svn_client__copy_pair_t;
/* ---------------------------------------------------------------- */
-
+
+
/*** Commit Stuff ***/
/* WARNING: This is all new, untested, un-peer-reviewed conceptual
@@ -755,6 +874,9 @@ typedef svn_error_t *(*svn_client__check_url_kind_t)(void *baton,
as specified by DEPTH; the behavior is the same as that described
for svn_client_commit4().
+ If DEPTH_EMPTY_START is >= 0, all targets after index DEPTH_EMPTY_START
+ in TARGETS are handled as having svn_depth_empty.
+
If JUST_LOCKED is TRUE, treat unmodified items with lock tokens as
commit candidates.
@@ -771,6 +893,7 @@ svn_client__harvest_committables(svn_client__committables_t **committables,
apr_hash_t **lock_tokens,
const char *base_dir_abspath,
const apr_array_header_t *targets,
+ int depth_empty_start,
svn_depth_t depth,
svn_boolean_t just_locked,
const apr_array_header_t *changelists,
@@ -799,7 +922,7 @@ svn_client__get_copy_committables(svn_client__committables_t **committables,
apr_pool_t *scratch_pool);
/* A qsort()-compatible sort routine for sorting an array of
- svn_client_commit_item_t's by their URL member. */
+ svn_client_commit_item_t *'s by their URL member. */
int svn_client__sort_commit_item_urls(const void *a, const void *b);
@@ -817,6 +940,17 @@ svn_client__condense_commit_items(const char **base_url,
apr_pool_t *pool);
+/* Like svn_ra_stat() on the ra session root, but with a compatibility
+ hack for pre-1.2 svnserve that don't support this api. */
+svn_error_t *
+svn_client__ra_stat_compatible(svn_ra_session_t *ra_session,
+ svn_revnum_t rev,
+ svn_dirent_t **dirent_p,
+ apr_uint32_t dirent_fields,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool);
+
+
/* Commit the items in the COMMIT_ITEMS array using EDITOR/EDIT_BATON
to describe the committed local mods. Prior to this call,
COMMIT_ITEMS should have been run through (and BASE_URL generated
@@ -830,10 +964,10 @@ svn_client__condense_commit_items(const char **base_url,
NOTIFY_PATH_PREFIX will be passed to CTX->notify_func2() as the
common absolute path prefix of the committed paths. It can be NULL.
- If MD5_CHECKSUMS is not NULL, set *MD5_CHECKSUMS to a hash containing,
+ If SHA1_CHECKSUMS is not NULL, set *SHA1_CHECKSUMS to a hash containing,
for each file transmitted, a mapping from the commit-item's (const
- char *) path to the (const svn_checksum_t *) MD5 checksum of its new text
- base. Similarly for SHA1_CHECKSUMS.
+ char *) path to the (const svn_checksum_t *) SHA1 checksum of its new text
+ base.
Use RESULT_POOL for all allocating the resulting hashes and SCRATCH_POOL
for temporary allocations.
@@ -844,14 +978,14 @@ svn_client__do_commit(const char *base_url,
const svn_delta_editor_t *editor,
void *edit_baton,
const char *notify_path_prefix,
- apr_hash_t **md5_checksums,
apr_hash_t **sha1_checksums,
svn_client_ctx_t *ctx,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
-
+
+
/*** Externals (Modules) ***/
/* Handle changes to the svn:externals property described by EXTERNALS_NEW,
@@ -878,9 +1012,9 @@ svn_client__do_commit(const char *base_url,
Pass NOTIFY_FUNC with NOTIFY_BATON along to svn_client_checkout().
- *TIMESTAMP_SLEEP will be set TRUE if a sleep is required to ensure
- timestamp integrity, *TIMESTAMP_SLEEP will be unchanged if no sleep
- is required.
+ Set *TIMESTAMP_SLEEP to TRUE if a sleep is required; otherwise do not
+ change *TIMESTAMP_SLEEP. The output will be valid even if the function
+ returns an error.
Use POOL for temporary allocation. */
svn_error_t *
@@ -909,10 +1043,6 @@ svn_client__handle_externals(apr_hash_t *externals_new,
NATIVE_EOL is the value passed as NATIVE_EOL when exporting.
- *TIMESTAMP_SLEEP will be set TRUE if a sleep is required to ensure
- timestamp integrity, *TIMESTAMP_SLEEP will be unchanged if no sleep
- is required.
-
Use POOL for temporary allocation. */
svn_error_t *
svn_client__export_externals(apr_hash_t *externals,
@@ -922,51 +1052,9 @@ svn_client__export_externals(apr_hash_t *externals,
svn_depth_t requested_depth,
const char *native_eol,
svn_boolean_t ignore_keywords,
- svn_boolean_t *timestamp_sleep,
svn_client_ctx_t *ctx,
apr_pool_t *pool);
-
-/* Perform status operations on each external in EXTERNAL_MAP, a const char *
- local_abspath of all externals mapping to the const char* defining_abspath.
- All other options are the same as those passed to svn_client_status(). */
-svn_error_t *
-svn_client__do_external_status(svn_client_ctx_t *ctx,
- apr_hash_t *external_map,
- svn_depth_t depth,
- svn_boolean_t get_all,
- svn_boolean_t update,
- svn_boolean_t no_ignore,
- svn_client_status_func_t status_func,
- void *status_baton,
- apr_pool_t *pool);
-
-/* Baton type for svn_wc__external_info_gatherer(). */
-typedef struct svn_client__external_func_baton_t
-{
- apr_hash_t *externals_old; /* Hash of old externals property values,
- or NULL if the caller doesn't care. */
- apr_hash_t *externals_new; /* Hash of new externals property values,
- or NULL if the caller doesn't care. */
- apr_hash_t *ambient_depths; /* Hash of ambient depth values, or NULL
- if the caller doesn't care. */
- apr_pool_t *result_pool; /* Pool to use for all stored values. */
-
-} svn_client__external_func_baton_t;
-
-
-/* This function gets invoked whenever external changes are encountered.
- This implements the `svn_wc_external_update_t' interface, and can
- be used with an svn_client__external_func_baton_t BATON to gather
- information about changes to externals definitions. */
-svn_error_t *
-svn_client__external_info_gatherer(void *baton,
- const char *local_abspath,
- const svn_string_t *old_val,
- const svn_string_t *new_val,
- svn_depth_t depth,
- apr_pool_t *scratch_pool);
-
/* Baton for svn_client__dirent_fetcher */
struct svn_client__dirent_fetcher_baton_t
{
@@ -1031,21 +1119,11 @@ svn_client__get_normalized_stream(svn_stream_t **normal_stream,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
-
-/* Return true if KIND is a revision kind that is dependent on the working
- * copy. Otherwise, return false. */
-#define SVN_CLIENT__REVKIND_NEEDS_WC(kind) \
- ((kind) == svn_opt_revision_base || \
- (kind) == svn_opt_revision_previous || \
- (kind) == svn_opt_revision_working || \
- (kind) == svn_opt_revision_committed) \
-
-/* Return true if KIND is a revision kind that the WC can supply without
- * contacting the repository. Otherwise, return false. */
-#define SVN_CLIENT__REVKIND_IS_LOCAL_TO_WC(kind) \
- ((kind) == svn_opt_revision_base || \
- (kind) == svn_opt_revision_working || \
- (kind) == svn_opt_revision_committed)
+/* Return a set of callbacks to use with the Ev2 shims. */
+svn_delta_shim_callbacks_t *
+svn_client__get_shim_callbacks(svn_wc_context_t *wc_ctx,
+ apr_hash_t *relpath_map,
+ apr_pool_t *result_pool);
/* Return REVISION unless its kind is 'unspecified' in which case return
* a pointer to a statically allocated revision structure of kind 'head'
@@ -1067,7 +1145,20 @@ const svn_opt_revision_t *
svn_cl__rev_default_to_peg(const svn_opt_revision_t *revision,
const svn_opt_revision_t *peg_revision);
-
+/* Call the conflict resolver callback in CTX for each conflict recorded
+ * in CONFLICTED_PATHS (const char *abspath keys; ignored values). If
+ * CONFLICTS_REMAIN is not NULL, then set *CONFLICTS_REMAIN to true if
+ * there are any conflicts among CONFLICTED_PATHS remaining unresolved
+ * at the end of this operation, else set it to false.
+ */
+svn_error_t *
+svn_client__resolve_conflicts(svn_boolean_t *conflicts_remain,
+ apr_hash_t *conflicted_paths,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool);
+
+
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/libsvn_client/cmdline.c b/subversion/libsvn_client/cmdline.c
index cc3a469..a17f8c4 100644
--- a/subversion/libsvn_client/cmdline.c
+++ b/subversion/libsvn_client/cmdline.c
@@ -43,51 +43,6 @@
#define DEFAULT_ARRAY_SIZE 5
-/* Return true iff ARG is a repository-relative URL: specifically that
- * it starts with the characters "^/".
- * ARG is in UTF-8 encoding.
- * Do not check whether ARG is properly URI-encoded, canonical, or valid
- * in any other way. */
-static svn_boolean_t
-arg_is_repos_relative_url(const char *arg)
-{
- return (0 == strncmp("^/", arg, 2));
-}
-
-/* Set *ABSOLUTE_URL to the absolute URL represented by RELATIVE_URL
- * relative to REPOS_ROOT_URL.
- * *ABSOLUTE_URL will end with a peg revision specifier if RELATIVE_URL did.
- * RELATIVE_URL is in repository-relative syntax:
- * "^/[REL-URL][@PEG]",
- * REPOS_ROOT_URL is the absolute URL of the repository root.
- * All strings are in UTF-8 encoding.
- * Allocate *ABSOLUTE_URL in POOL.
- *
- * REPOS_ROOT_URL and RELATIVE_URL do not have to be properly URI-encoded,
- * canonical, or valid in any other way. The caller is expected to perform
- * canonicalization on *ABSOLUTE_URL after the call to the function.
- */
-static svn_error_t *
-resolve_repos_relative_url(const char **absolute_url,
- const char *relative_url,
- const char *repos_root_url,
- apr_pool_t *pool)
-{
- if (! arg_is_repos_relative_url(relative_url))
- return svn_error_createf(SVN_ERR_BAD_URL, NULL,
- _("Improper relative URL '%s'"),
- relative_url);
-
- /* No assumptions are made about the canonicalization of the input
- * arguments, it is presumed that the output will be canonicalized after
- * this function, which will remove any duplicate path separator.
- */
- *absolute_url = apr_pstrcat(pool, repos_root_url, relative_url + 1,
- (char *)NULL);
-
- return SVN_NO_ERROR;
-}
-
/* Attempt to find the repository root url for TARGET, possibly using CTX for
* authentication. If one is found and *ROOT_URL is not NULL, then just check
@@ -114,8 +69,8 @@ check_root_url_of_target(const char **root_url,
if (!svn_path_is_url(truepath))
SVN_ERR(svn_dirent_get_absolute(&truepath, truepath, pool));
- err = svn_client__get_repos_root(&tmp_root_url, truepath,
- ctx, pool, pool);
+ err = svn_client_get_repos_root(&tmp_root_url, NULL, truepath,
+ ctx, pool, pool);
if (err)
{
@@ -125,7 +80,7 @@ check_root_url_of_target(const char **root_url,
*
* If the target itself is a URL to a repository that does not exist,
* that's fine, too. The callers will deal with this argument in an
- * appropriate manter if it does not make any sense.
+ * appropriate manner if it does not make any sense.
*
* Also tolerate locally added targets ("bad revision" error).
*/
@@ -168,7 +123,6 @@ svn_client_args_to_target_array2(apr_array_header_t **targets_p,
int i;
svn_boolean_t rel_url_found = FALSE;
const char *root_url = NULL;
- svn_error_t *err = SVN_NO_ERROR;
apr_array_header_t *input_targets =
apr_array_make(pool, DEFAULT_ARRAY_SIZE, sizeof(const char *));
apr_array_header_t *output_targets =
@@ -190,7 +144,7 @@ svn_client_args_to_target_array2(apr_array_header_t **targets_p,
SVN_ERR(svn_utf_cstring_to_utf8(&utf8_target,
raw_target, pool));
- if (arg_is_repos_relative_url(utf8_target))
+ if (svn_path_is_repos_relative_url(utf8_target))
rel_url_found = TRUE;
APR_ARRAY_PUSH(input_targets, const char *) = utf8_target;
@@ -205,7 +159,7 @@ svn_client_args_to_target_array2(apr_array_header_t **targets_p,
const char *utf8_target = APR_ARRAY_IDX(known_targets,
i, const char *);
- if (arg_is_repos_relative_url(utf8_target))
+ if (svn_path_is_repos_relative_url(utf8_target))
rel_url_found = TRUE;
APR_ARRAY_PUSH(input_targets, const char *) = utf8_target;
@@ -221,7 +175,7 @@ svn_client_args_to_target_array2(apr_array_header_t **targets_p,
/* Relative urls will be canonicalized when they are resolved later in
* the function
*/
- if (arg_is_repos_relative_url(utf8_target))
+ if (svn_path_is_repos_relative_url(utf8_target))
{
APR_ARRAY_PUSH(output_targets, const char *) = utf8_target;
}
@@ -290,8 +244,8 @@ svn_client_args_to_target_array2(apr_array_header_t **targets_p,
SVN_ERR(svn_dirent_get_absolute(&target_abspath,
original_target, pool));
- err2 = svn_wc_read_kind(&kind, ctx->wc_ctx, target_abspath,
- FALSE, pool);
+ err2 = svn_wc_read_kind2(&kind, ctx->wc_ctx, target_abspath,
+ TRUE, FALSE, pool);
if (err2
&& (err2->apr_err == SVN_ERR_WC_NOT_WORKING_COPY
|| err2->apr_err == SVN_ERR_WC_UPGRADE_REQUIRED))
@@ -347,7 +301,12 @@ svn_client_args_to_target_array2(apr_array_header_t **targets_p,
*/
if (root_url == NULL)
{
- err = svn_client_root_url_from_path(&root_url, "", ctx, pool);
+ const char *current_abspath;
+ svn_error_t *err;
+
+ SVN_ERR(svn_dirent_get_absolute(&current_abspath, "", pool));
+ err = svn_client_get_repos_root(&root_url, NULL /* uuid */,
+ current_abspath, ctx, pool, pool);
if (err || root_url == NULL)
return svn_error_create(SVN_ERR_WC_NOT_WORKING_COPY, err,
_("Resolving '^/': no repository root "
@@ -363,7 +322,7 @@ svn_client_args_to_target_array2(apr_array_header_t **targets_p,
const char *target = APR_ARRAY_IDX(output_targets, i,
const char *);
- if (arg_is_repos_relative_url(target))
+ if (svn_path_is_repos_relative_url(target))
{
const char *abs_target;
const char *true_target;
@@ -372,8 +331,9 @@ svn_client_args_to_target_array2(apr_array_header_t **targets_p,
SVN_ERR(svn_opt__split_arg_at_peg_revision(&true_target, &peg_rev,
target, pool));
- SVN_ERR(resolve_repos_relative_url(&abs_target, true_target,
- root_url, pool));
+ SVN_ERR(svn_path_resolve_repos_relative_url(&abs_target,
+ true_target,
+ root_url, pool));
SVN_ERR(svn_opt__arg_canonicalize_url(&true_target, abs_target,
pool));
@@ -387,11 +347,17 @@ svn_client_args_to_target_array2(apr_array_header_t **targets_p,
else
*targets_p = output_targets;
- if (reserved_names && ! err)
- for (i = 0; i < reserved_names->nelts; ++i)
- err = svn_error_createf(SVN_ERR_RESERVED_FILENAME_SPECIFIED, err,
- _("'%s' ends in a reserved name"),
- APR_ARRAY_IDX(reserved_names, i, const char *));
+ if (reserved_names)
+ {
+ svn_error_t *err = SVN_NO_ERROR;
+
+ for (i = 0; i < reserved_names->nelts; ++i)
+ err = svn_error_createf(SVN_ERR_RESERVED_FILENAME_SPECIFIED, err,
+ _("'%s' ends in a reserved name"),
+ APR_ARRAY_IDX(reserved_names, i,
+ const char *));
+ return svn_error_trace(err);
+ }
- return svn_error_trace(err);
+ return SVN_NO_ERROR;
}
diff --git a/subversion/libsvn_client/commit.c b/subversion/libsvn_client/commit.c
index 13071ea..07fdce1 100644
--- a/subversion/libsvn_client/commit.c
+++ b/subversion/libsvn_client/commit.c
@@ -30,11 +30,9 @@
#include <string.h>
#include <apr_strings.h>
#include <apr_hash.h>
-#include <apr_md5.h>
+#include "svn_hash.h"
#include "svn_wc.h"
#include "svn_ra.h"
-#include "svn_delta.h"
-#include "svn_subst.h"
#include "svn_client.h"
#include "svn_string.h"
#include "svn_pools.h"
@@ -42,566 +40,14 @@
#include "svn_error_codes.h"
#include "svn_dirent_uri.h"
#include "svn_path.h"
-#include "svn_io.h"
-#include "svn_time.h"
#include "svn_sorts.h"
-#include "svn_props.h"
#include "client.h"
#include "private/svn_wc_private.h"
-#include "private/svn_magic.h"
+#include "private/svn_ra_private.h"
#include "svn_private_config.h"
-/* Import context baton.
-
- ### TODO: Add the following items to this baton:
- /` import editor/baton. `/
- const svn_delta_editor_t *editor;
- void *edit_baton;
-
- /` Client context baton `/
- svn_client_ctx_t `ctx;
-
- /` Paths (keys) excluded from the import (values ignored) `/
- apr_hash_t *excludes;
-*/
-typedef struct import_ctx_t
-{
- /* Whether any changes were made to the repository */
- svn_boolean_t repos_changed;
-
- /* A magic cookie for mime-type detection. */
- svn_magic__cookie_t *magic_cookie;
-} import_ctx_t;
-
-
-/* Apply PATH's contents (as a delta against the empty string) to
- FILE_BATON in EDITOR. Use POOL for any temporary allocation.
- PROPERTIES is the set of node properties set on this file.
-
- Fill DIGEST with the md5 checksum of the sent file; DIGEST must be
- at least APR_MD5_DIGESTSIZE bytes long. */
-
-/* ### how does this compare against svn_wc_transmit_text_deltas2() ??? */
-
-static svn_error_t *
-send_file_contents(const char *path,
- void *file_baton,
- const svn_delta_editor_t *editor,
- apr_hash_t *properties,
- unsigned char *digest,
- apr_pool_t *pool)
-{
- svn_stream_t *contents;
- svn_txdelta_window_handler_t handler;
- void *handler_baton;
- const svn_string_t *eol_style_val = NULL, *keywords_val = NULL;
- svn_boolean_t special = FALSE;
- svn_subst_eol_style_t eol_style;
- const char *eol;
- apr_hash_t *keywords;
-
- /* If there are properties, look for EOL-style and keywords ones. */
- if (properties)
- {
- eol_style_val = apr_hash_get(properties, SVN_PROP_EOL_STYLE,
- sizeof(SVN_PROP_EOL_STYLE) - 1);
- keywords_val = apr_hash_get(properties, SVN_PROP_KEYWORDS,
- sizeof(SVN_PROP_KEYWORDS) - 1);
- if (apr_hash_get(properties, SVN_PROP_SPECIAL, APR_HASH_KEY_STRING))
- special = TRUE;
- }
-
- /* Get an editor func that wants to consume the delta stream. */
- SVN_ERR(editor->apply_textdelta(file_baton, NULL, pool,
- &handler, &handler_baton));
-
- if (eol_style_val)
- svn_subst_eol_style_from_value(&eol_style, &eol, eol_style_val->data);
- else
- {
- eol = NULL;
- eol_style = svn_subst_eol_style_none;
- }
-
- if (keywords_val)
- SVN_ERR(svn_subst_build_keywords2(&keywords, keywords_val->data,
- APR_STRINGIFY(SVN_INVALID_REVNUM),
- "", 0, "", pool));
- else
- keywords = NULL;
-
- if (special)
- {
- SVN_ERR(svn_subst_read_specialfile(&contents, path, pool, pool));
- }
- else
- {
- /* Open the working copy file. */
- SVN_ERR(svn_stream_open_readonly(&contents, path, pool, pool));
-
- /* If we have EOL styles or keywords, then detranslate the file. */
- if (svn_subst_translation_required(eol_style, eol, keywords,
- FALSE, TRUE))
- {
- if (eol_style == svn_subst_eol_style_unknown)
- return svn_error_createf(SVN_ERR_IO_UNKNOWN_EOL, NULL,
- _("%s property on '%s' contains "
- "unrecognized EOL-style '%s'"),
- SVN_PROP_EOL_STYLE, path,
- eol_style_val->data);
-
- /* We're importing, so translate files with 'native' eol-style to
- * repository-normal form, not to this platform's native EOL. */
- if (eol_style == svn_subst_eol_style_native)
- eol = SVN_SUBST_NATIVE_EOL_STR;
-
- /* Wrap the working copy stream with a filter to detranslate it. */
- contents = svn_subst_stream_translated(contents,
- eol,
- TRUE /* repair */,
- keywords,
- FALSE /* expand */,
- pool);
- }
- }
-
- /* Send the file's contents to the delta-window handler. */
- return svn_error_trace(svn_txdelta_send_stream(contents, handler,
- handler_baton, digest,
- pool));
-}
-
-
-/* Import file PATH as EDIT_PATH in the repository directory indicated
- * by DIR_BATON in EDITOR.
- *
- * Accumulate file paths and their batons in FILES, which must be
- * non-null. (These are used to send postfix textdeltas later).
- *
- * If CTX->NOTIFY_FUNC is non-null, invoke it with CTX->NOTIFY_BATON
- * for each file.
- *
- * Use POOL for any temporary allocation.
- */
-static svn_error_t *
-import_file(const svn_delta_editor_t *editor,
- void *dir_baton,
- const char *path,
- const char *edit_path,
- import_ctx_t *import_ctx,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool)
-{
- void *file_baton;
- const char *mimetype = NULL;
- unsigned char digest[APR_MD5_DIGESTSIZE];
- const char *text_checksum;
- apr_hash_t* properties;
- apr_hash_index_t *hi;
- svn_node_kind_t kind;
- svn_boolean_t is_special;
-
- SVN_ERR(svn_path_check_valid(path, pool));
-
- SVN_ERR(svn_io_check_special_path(path, &kind, &is_special, pool));
-
- /* Add the file, using the pool from the FILES hash. */
- SVN_ERR(editor->add_file(edit_path, dir_baton, NULL, SVN_INVALID_REVNUM,
- pool, &file_baton));
-
- /* Remember that the repository was modified */
- import_ctx->repos_changed = TRUE;
-
- if (! is_special)
- {
- /* add automatic properties */
- SVN_ERR(svn_client__get_auto_props(&properties, &mimetype, path,
- import_ctx->magic_cookie,
- ctx, pool));
- }
- else
- properties = apr_hash_make(pool);
-
- if (properties)
- {
- for (hi = apr_hash_first(pool, properties); hi; hi = apr_hash_next(hi))
- {
- const char *pname = svn__apr_hash_index_key(hi);
- const svn_string_t *pval = svn__apr_hash_index_val(hi);
-
- SVN_ERR(editor->change_file_prop(file_baton, pname, pval, pool));
- }
- }
-
- if (ctx->notify_func2)
- {
- svn_wc_notify_t *notify
- = svn_wc_create_notify(path, svn_wc_notify_commit_added, pool);
- notify->kind = svn_node_file;
- notify->mime_type = mimetype;
- notify->content_state = notify->prop_state
- = svn_wc_notify_state_inapplicable;
- notify->lock_state = svn_wc_notify_lock_state_inapplicable;
- (*ctx->notify_func2)(ctx->notify_baton2, notify, pool);
- }
-
- /* If this is a special file, we need to set the svn:special
- property and create a temporary detranslated version in order to
- send to the server. */
- if (is_special)
- {
- apr_hash_set(properties, SVN_PROP_SPECIAL, APR_HASH_KEY_STRING,
- svn_string_create(SVN_PROP_BOOLEAN_TRUE, pool));
- SVN_ERR(editor->change_file_prop(file_baton, SVN_PROP_SPECIAL,
- apr_hash_get(properties,
- SVN_PROP_SPECIAL,
- APR_HASH_KEY_STRING),
- pool));
- }
-
- /* Now, transmit the file contents. */
- SVN_ERR(send_file_contents(path, file_baton, editor,
- properties, digest, pool));
-
- /* Finally, close the file. */
- text_checksum =
- svn_checksum_to_cstring(svn_checksum__from_digest(digest, svn_checksum_md5,
- pool), pool);
-
- return editor->close_file(file_baton, text_checksum, pool);
-}
-
-
-/* Import directory PATH into the repository directory indicated by
- * DIR_BATON in EDITOR. EDIT_PATH is the path imported as the root
- * directory, so all edits are relative to that.
- *
- * DEPTH is the depth at this point in the descent (it may be changed
- * for recursive calls).
- *
- * Accumulate file paths and their batons in FILES, which must be
- * non-null. (These are used to send postfix textdeltas later).
- *
- * EXCLUDES is a hash whose keys are absolute paths to exclude from
- * the import (values are unused).
- *
- * If NO_IGNORE is FALSE, don't import files or directories that match
- * ignore patterns.
- *
- * If CTX->NOTIFY_FUNC is non-null, invoke it with CTX->NOTIFY_BATON for each
- * directory.
- *
- * Use POOL for any temporary allocation. */
-static svn_error_t *
-import_dir(const svn_delta_editor_t *editor,
- void *dir_baton,
- const char *path,
- const char *edit_path,
- svn_depth_t depth,
- apr_hash_t *excludes,
- svn_boolean_t no_ignore,
- svn_boolean_t ignore_unknown_node_types,
- import_ctx_t *import_ctx,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool)
-{
- apr_pool_t *subpool = svn_pool_create(pool); /* iteration pool */
- apr_hash_t *dirents;
- apr_hash_index_t *hi;
- apr_array_header_t *ignores;
-
- SVN_ERR(svn_path_check_valid(path, pool));
-
- if (!no_ignore)
- SVN_ERR(svn_wc_get_default_ignores(&ignores, ctx->config, pool));
-
- SVN_ERR(svn_io_get_dirents3(&dirents, path, TRUE, pool, pool));
-
- for (hi = apr_hash_first(pool, dirents); hi; hi = apr_hash_next(hi))
- {
- const char *this_path, *this_edit_path, *abs_path;
- const char *filename = svn__apr_hash_index_key(hi);
- const svn_io_dirent_t *dirent = svn__apr_hash_index_val(hi);
-
- svn_pool_clear(subpool);
-
- if (ctx->cancel_func)
- SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
-
- if (svn_wc_is_adm_dir(filename, subpool))
- {
- /* If someone's trying to import a directory named the same
- as our administrative directories, that's probably not
- what they wanted to do. If they are importing a file
- with that name, something is bound to blow up when they
- checkout what they've imported. So, just skip items with
- that name. */
- if (ctx->notify_func2)
- {
- svn_wc_notify_t *notify
- = svn_wc_create_notify(svn_dirent_join(path, filename,
- subpool),
- svn_wc_notify_skip, subpool);
- notify->kind = svn_node_dir;
- notify->content_state = notify->prop_state
- = svn_wc_notify_state_inapplicable;
- notify->lock_state = svn_wc_notify_lock_state_inapplicable;
- (*ctx->notify_func2)(ctx->notify_baton2, notify, subpool);
- }
- continue;
- }
-
- /* Typically, we started importing from ".", in which case
- edit_path is "". So below, this_path might become "./blah",
- and this_edit_path might become "blah", for example. */
- this_path = svn_dirent_join(path, filename, subpool);
- this_edit_path = svn_relpath_join(edit_path, filename, subpool);
-
- /* If this is an excluded path, exclude it. */
- SVN_ERR(svn_dirent_get_absolute(&abs_path, this_path, subpool));
- if (apr_hash_get(excludes, abs_path, APR_HASH_KEY_STRING))
- continue;
-
- if ((!no_ignore) && svn_wc_match_ignore_list(filename, ignores,
- subpool))
- continue;
-
- if (dirent->kind == svn_node_dir && depth >= svn_depth_immediates)
- {
- void *this_dir_baton;
-
- /* Add the new subdirectory, getting a descent baton from
- the editor. */
- SVN_ERR(editor->add_directory(this_edit_path, dir_baton,
- NULL, SVN_INVALID_REVNUM, subpool,
- &this_dir_baton));
-
- /* Remember that the repository was modified */
- import_ctx->repos_changed = TRUE;
-
- /* By notifying before the recursive call below, we display
- a directory add before displaying adds underneath the
- directory. To do it the other way around, just move this
- after the recursive call. */
- if (ctx->notify_func2)
- {
- svn_wc_notify_t *notify
- = svn_wc_create_notify(this_path, svn_wc_notify_commit_added,
- subpool);
- notify->kind = svn_node_dir;
- notify->content_state = notify->prop_state
- = svn_wc_notify_state_inapplicable;
- notify->lock_state = svn_wc_notify_lock_state_inapplicable;
- (*ctx->notify_func2)(ctx->notify_baton2, notify, subpool);
- }
-
- /* Recurse. */
- {
- svn_depth_t depth_below_here = depth;
- if (depth == svn_depth_immediates)
- depth_below_here = svn_depth_empty;
-
- SVN_ERR(import_dir(editor, this_dir_baton, this_path,
- this_edit_path, depth_below_here, excludes,
- no_ignore, ignore_unknown_node_types,
- import_ctx, ctx,
- subpool));
- }
-
- /* Finally, close the sub-directory. */
- SVN_ERR(editor->close_directory(this_dir_baton, subpool));
- }
- else if (dirent->kind == svn_node_file && depth >= svn_depth_files)
- {
- SVN_ERR(import_file(editor, dir_baton, this_path,
- this_edit_path, import_ctx, ctx, subpool));
- }
- else if (dirent->kind != svn_node_dir && dirent->kind != svn_node_file)
- {
- if (ignore_unknown_node_types)
- {
- /*## warn about it*/
- if (ctx->notify_func2)
- {
- svn_wc_notify_t *notify
- = svn_wc_create_notify(this_path,
- svn_wc_notify_skip, subpool);
- notify->kind = svn_node_dir;
- notify->content_state = notify->prop_state
- = svn_wc_notify_state_inapplicable;
- notify->lock_state = svn_wc_notify_lock_state_inapplicable;
- (*ctx->notify_func2)(ctx->notify_baton2, notify, subpool);
- }
- }
- else
- return svn_error_createf
- (SVN_ERR_NODE_UNKNOWN_KIND, NULL,
- _("Unknown or unversionable type for '%s'"),
- svn_dirent_local_style(this_path, subpool));
- }
- }
-
- svn_pool_destroy(subpool);
- return SVN_NO_ERROR;
-}
-
-
-/* Recursively import PATH to a repository using EDITOR and
- * EDIT_BATON. PATH can be a file or directory.
- *
- * DEPTH is the depth at which to import PATH; it behaves as for
- * svn_client_import4().
- *
- * NEW_ENTRIES is an ordered array of path components that must be
- * created in the repository (where the ordering direction is
- * parent-to-child). If PATH is a directory, NEW_ENTRIES may be empty
- * -- the result is an import which creates as many new entries in the
- * top repository target directory as there are importable entries in
- * the top of PATH; but if NEW_ENTRIES is not empty, its last item is
- * the name of a new subdirectory in the repository to hold the
- * import. If PATH is a file, NEW_ENTRIES may not be empty, and its
- * last item is the name used for the file in the repository. If
- * NEW_ENTRIES contains more than one item, all but the last item are
- * the names of intermediate directories that are created before the
- * real import begins. NEW_ENTRIES may NOT be NULL.
- *
- * EXCLUDES is a hash whose keys are absolute paths to exclude from
- * the import (values are unused).
- *
- * If NO_IGNORE is FALSE, don't import files or directories that match
- * ignore patterns.
- *
- * If CTX->NOTIFY_FUNC is non-null, invoke it with CTX->NOTIFY_BATON for
- * each imported path, passing actions svn_wc_notify_commit_added.
- *
- * Use POOL for any temporary allocation.
- *
- * Note: the repository directory receiving the import was specified
- * when the editor was fetched. (I.e, when EDITOR->open_root() is
- * called, it returns a directory baton for that directory, which is
- * not necessarily the root.)
- */
-static svn_error_t *
-import(const char *path,
- const apr_array_header_t *new_entries,
- const svn_delta_editor_t *editor,
- void *edit_baton,
- svn_depth_t depth,
- apr_hash_t *excludes,
- svn_boolean_t no_ignore,
- svn_boolean_t ignore_unknown_node_types,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool)
-{
- void *root_baton;
- svn_node_kind_t kind;
- apr_array_header_t *ignores;
- apr_array_header_t *batons = NULL;
- const char *edit_path = "";
- import_ctx_t *import_ctx = apr_pcalloc(pool, sizeof(*import_ctx));
-
- svn_magic__init(&import_ctx->magic_cookie, pool);
-
- /* Get a root dir baton. We pass an invalid revnum to open_root
- to mean "base this on the youngest revision". Should we have an
- SVN_YOUNGEST_REVNUM defined for these purposes? */
- SVN_ERR(editor->open_root(edit_baton, SVN_INVALID_REVNUM,
- pool, &root_baton));
-
- /* Import a file or a directory tree. */
- SVN_ERR(svn_io_check_path(path, &kind, pool));
-
- /* Make the intermediate directory components necessary for properly
- rooting our import source tree. */
- if (new_entries->nelts)
- {
- int i;
-
- batons = apr_array_make(pool, new_entries->nelts, sizeof(void *));
- for (i = 0; i < new_entries->nelts; i++)
- {
- const char *component = APR_ARRAY_IDX(new_entries, i, const char *);
- edit_path = svn_relpath_join(edit_path, component, pool);
-
- /* If this is the last path component, and we're importing a
- file, then this component is the name of the file, not an
- intermediate directory. */
- if ((i == new_entries->nelts - 1) && (kind == svn_node_file))
- break;
-
- APR_ARRAY_PUSH(batons, void *) = root_baton;
- SVN_ERR(editor->add_directory(edit_path,
- root_baton,
- NULL, SVN_INVALID_REVNUM,
- pool, &root_baton));
-
- /* Remember that the repository was modified */
- import_ctx->repos_changed = TRUE;
- }
- }
- else if (kind == svn_node_file)
- {
- return svn_error_create
- (SVN_ERR_NODE_UNKNOWN_KIND, NULL,
- _("New entry name required when importing a file"));
- }
-
- /* Note that there is no need to check whether PATH's basename is
- the same name that we reserve for our administrative
- subdirectories. It would be strange -- though not illegal -- to
- import the contents of a directory of that name, because the
- directory's own name is not part of those contents. Of course,
- if something underneath it also has our reserved name, then we'll
- error. */
-
- if (kind == svn_node_file)
- {
- svn_boolean_t ignores_match = FALSE;
-
- if (!no_ignore)
- {
- SVN_ERR(svn_wc_get_default_ignores(&ignores, ctx->config, pool));
- ignores_match = svn_wc_match_ignore_list(path, ignores, pool);
- }
- if (!ignores_match)
- SVN_ERR(import_file(editor, root_baton, path, edit_path,
- import_ctx, ctx, pool));
- }
- else if (kind == svn_node_dir)
- {
- SVN_ERR(import_dir(editor, root_baton, path, edit_path,
- depth, excludes, no_ignore,
- ignore_unknown_node_types, import_ctx, ctx, pool));
-
- }
- else if (kind == svn_node_none
- || kind == svn_node_unknown)
- {
- return svn_error_createf(SVN_ERR_NODE_UNKNOWN_KIND, NULL,
- _("'%s' does not exist"),
- svn_dirent_local_style(path, pool));
- }
-
- /* Close up shop; it's time to go home. */
- SVN_ERR(editor->close_directory(root_baton, pool));
- if (batons && batons->nelts)
- {
- void **baton;
- while ((baton = (void **) apr_array_pop(batons)))
- {
- SVN_ERR(editor->close_directory(*baton, pool));
- }
- }
-
- if (import_ctx->repos_changed)
- return editor->close_edit(edit_baton, pool);
- else
- return editor->abort_edit(edit_baton, pool);
-}
-
-
struct capture_baton_t {
svn_commit_callback2_t original_callback;
void *original_baton;
@@ -628,16 +74,13 @@ capture_commit_info(const svn_commit_info_t *commit_info,
static svn_error_t *
-get_ra_editor(svn_ra_session_t **ra_session,
- const svn_delta_editor_t **editor,
+get_ra_editor(const svn_delta_editor_t **editor,
void **edit_baton,
+ svn_ra_session_t *ra_session,
svn_client_ctx_t *ctx,
- const char *base_url,
- const char *base_dir_abspath,
const char *log_msg,
const apr_array_header_t *commit_items,
const apr_hash_t *revprop_table,
- svn_boolean_t is_commit,
apr_hash_t *lock_tokens,
svn_boolean_t keep_locks,
svn_commit_callback2_t commit_callback,
@@ -645,192 +88,52 @@ get_ra_editor(svn_ra_session_t **ra_session,
apr_pool_t *pool)
{
apr_hash_t *commit_revprops;
-
- /* Open an RA session to URL. */
- SVN_ERR(svn_client__open_ra_session_internal(ra_session, NULL, base_url,
- base_dir_abspath, commit_items,
- is_commit, !is_commit,
- ctx, pool));
-
- /* If this is an import (aka, not a commit), we need to verify that
- our repository URL exists. */
- if (! is_commit)
- {
- svn_node_kind_t kind;
-
- SVN_ERR(svn_ra_check_path(*ra_session, "", SVN_INVALID_REVNUM,
- &kind, pool));
- if (kind == svn_node_none)
- return svn_error_createf(SVN_ERR_FS_NO_SUCH_ENTRY, NULL,
- _("Path '%s' does not exist"),
- base_url);
- }
+ apr_hash_t *relpath_map = NULL;
SVN_ERR(svn_client__ensure_revprop_table(&commit_revprops, revprop_table,
log_msg, ctx, pool));
- /* Fetch RA commit editor. */
- return svn_ra_get_commit_editor3(*ra_session, editor, edit_baton,
- commit_revprops, commit_callback,
- commit_baton, lock_tokens, keep_locks,
- pool);
-}
-
-
-/*** Public Interfaces. ***/
-
-svn_error_t *
-svn_client_import4(const char *path,
- const char *url,
- svn_depth_t depth,
- svn_boolean_t no_ignore,
- svn_boolean_t ignore_unknown_node_types,
- const apr_hash_t *revprop_table,
- svn_commit_callback2_t commit_callback,
- void *commit_baton,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool)
-{
- svn_error_t *err = SVN_NO_ERROR;
- const char *log_msg = "";
- const svn_delta_editor_t *editor;
- void *edit_baton;
- svn_ra_session_t *ra_session;
- apr_hash_t *excludes = apr_hash_make(pool);
- svn_node_kind_t kind;
- const char *local_abspath;
- apr_array_header_t *new_entries = apr_array_make(pool, 4,
- sizeof(const char *));
- const char *temp;
- const char *dir;
- apr_pool_t *subpool;
-
- if (svn_path_is_url(path))
- return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
- _("'%s' is not a local path"), path);
-
- SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, pool));
-
- /* Create a new commit item and add it to the array. */
- if (SVN_CLIENT__HAS_LOG_MSG_FUNC(ctx))
+#ifdef ENABLE_EV2_SHIMS
+ if (commit_items)
{
- /* If there's a log message gatherer, create a temporary commit
- item array solely to help generate the log message. The
- array is not used for the import itself. */
- svn_client_commit_item3_t *item;
- const char *tmp_file;
- apr_array_header_t *commit_items
- = apr_array_make(pool, 1, sizeof(item));
-
- item = svn_client_commit_item3_create(pool);
- item->path = apr_pstrdup(pool, path);
- item->state_flags = SVN_CLIENT_COMMIT_ITEM_ADD;
- APR_ARRAY_PUSH(commit_items, svn_client_commit_item3_t *) = item;
-
- SVN_ERR(svn_client__get_log_msg(&log_msg, &tmp_file, commit_items,
- ctx, pool));
- if (! log_msg)
- return SVN_NO_ERROR;
- if (tmp_file)
- {
- const char *abs_path;
- SVN_ERR(svn_dirent_get_absolute(&abs_path, tmp_file, pool));
- apr_hash_set(excludes, abs_path, APR_HASH_KEY_STRING, (void *)1);
- }
- }
-
- SVN_ERR(svn_io_check_path(local_abspath, &kind, pool));
-
- /* Figure out all the path components we need to create just to have
- a place to stick our imported tree. */
- subpool = svn_pool_create(pool);
- do
- {
- svn_pool_clear(subpool);
-
- /* See if the user is interested in cancelling this operation. */
- if (ctx->cancel_func)
- SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
+ int i;
+ apr_pool_t *iterpool = svn_pool_create(pool);
- if (err)
+ relpath_map = apr_hash_make(pool);
+ for (i = 0; i < commit_items->nelts; i++)
{
- /* If get_ra_editor below failed we either tried to open
- an invalid url, or else some other kind of error. In case
- the url was bad we back up a directory and try again. */
+ svn_client_commit_item3_t *item = APR_ARRAY_IDX(commit_items, i,
+ svn_client_commit_item3_t *);
+ const char *relpath;
- if (err->apr_err != SVN_ERR_FS_NO_SUCH_ENTRY)
- return err;
- else
- svn_error_clear(err);
+ if (!item->path)
+ continue;
- svn_uri_split(&temp, &dir, url, pool);
- APR_ARRAY_PUSH(new_entries, const char *) = dir;
- url = temp;
- }
- }
- while ((err = get_ra_editor(&ra_session,
- &editor, &edit_baton, ctx, url, NULL,
- log_msg, NULL, revprop_table, FALSE, NULL, TRUE,
- commit_callback, commit_baton, subpool)));
-
- /* Reverse the order of the components we added to our NEW_ENTRIES array. */
- if (new_entries->nelts)
- {
- int i, j;
- const char *component;
- for (i = 0; i < (new_entries->nelts / 2); i++)
- {
- j = new_entries->nelts - i - 1;
- component =
- APR_ARRAY_IDX(new_entries, i, const char *);
- APR_ARRAY_IDX(new_entries, i, const char *) =
- APR_ARRAY_IDX(new_entries, j, const char *);
- APR_ARRAY_IDX(new_entries, j, const char *) =
- component;
+ svn_pool_clear(iterpool);
+ SVN_ERR(svn_wc__node_get_origin(NULL, NULL, &relpath, NULL, NULL, NULL,
+ ctx->wc_ctx, item->path, FALSE, pool,
+ iterpool));
+ if (relpath)
+ svn_hash_sets(relpath_map, relpath, item->path);
}
+ svn_pool_destroy(iterpool);
}
+#endif
- /* An empty NEW_ENTRIES list the first call to get_ra_editor() above
- succeeded. That means that URL corresponds to an already
- existing filesystem entity. */
- if (kind == svn_node_file && (! new_entries->nelts))
- return svn_error_createf
- (SVN_ERR_ENTRY_EXISTS, NULL,
- _("Path '%s' already exists"), url);
-
- /* The repository doesn't know about the reserved administrative
- directory. */
- if (new_entries->nelts
- /* What's this, what's this? This assignment is here because we
- use the value to construct the error message just below. It
- may not be aesthetically pleasing, but it's less ugly than
- calling APR_ARRAY_IDX twice. */
- && svn_wc_is_adm_dir(temp = APR_ARRAY_IDX(new_entries,
- new_entries->nelts - 1,
- const char *),
- pool))
- return svn_error_createf
- (SVN_ERR_CL_ADM_DIR_RESERVED, NULL,
- _("'%s' is a reserved name and cannot be imported"),
- /* ### Is svn_path_local_style() really necessary for this? */
- svn_dirent_local_style(temp, pool));
-
-
- /* If an error occurred during the commit, abort the edit and return
- the error. We don't even care if the abort itself fails. */
- if ((err = import(path, new_entries, editor, edit_baton,
- depth, excludes, no_ignore,
- ignore_unknown_node_types, ctx, subpool)))
- {
- svn_error_clear(editor->abort_edit(edit_baton, subpool));
- return err;
- }
-
- svn_pool_destroy(subpool);
+ /* Fetch RA commit editor. */
+ SVN_ERR(svn_ra__register_editor_shim_callbacks(ra_session,
+ svn_client__get_shim_callbacks(ctx->wc_ctx,
+ relpath_map, pool)));
+ SVN_ERR(svn_ra_get_commit_editor3(ra_session, editor, edit_baton,
+ commit_revprops, commit_callback,
+ commit_baton, lock_tokens, keep_locks,
+ pool));
return SVN_NO_ERROR;
}
+
+/*** Public Interfaces. ***/
static svn_error_t *
reconcile_errors(svn_error_t *commit_err,
@@ -902,12 +205,11 @@ collect_lock_tokens(apr_hash_t **result,
{
const char *url = svn__apr_hash_index_key(hi);
const char *token = svn__apr_hash_index_val(hi);
+ const char *relpath = svn_uri_skip_ancestor(base_url, url, pool);
- if (svn_uri__is_ancestor(base_url, url))
+ if (relpath)
{
- url = svn_uri_skip_ancestor(base_url, url, pool);
-
- apr_hash_set(*result, url, APR_HASH_KEY_STRING, token);
+ svn_hash_sets(*result, relpath, token);
}
}
@@ -938,6 +240,13 @@ post_process_commit_item(svn_wc_committed_queue_t *queue,
remove_lock = (! keep_locks && (item->state_flags
& SVN_CLIENT_COMMIT_ITEM_LOCK_TOKEN));
+ /* When the node was deleted (or replaced), we need to always remove the
+ locks, as they're invalidated on the server. We cannot honor the
+ SVN_CLIENT_COMMIT_ITEM_LOCK_TOKEN flag here because it does not tell
+ us whether we have locked children. */
+ if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_DELETE)
+ remove_lock = TRUE;
+
return svn_wc_queue_committed3(queue, wc_ctx, item->path,
loop_recurse, item->incoming_prop_changes,
remove_lock, !keep_changelists,
@@ -955,8 +264,8 @@ check_nonrecursive_dir_delete(svn_wc_context_t *wc_ctx,
SVN_ERR_ASSERT(depth != svn_depth_infinity);
- SVN_ERR(svn_wc_read_kind(&kind, wc_ctx, target_abspath, FALSE,
- scratch_pool));
+ SVN_ERR(svn_wc_read_kind2(&kind, wc_ctx, target_abspath,
+ TRUE, FALSE, scratch_pool));
/* ### TODO(sd): This check is slightly too strict. It should be
@@ -1050,8 +359,8 @@ determine_lock_targets(apr_array_header_t **lock_targets,
target_abspath = svn_dirent_join(base_abspath, target_relpath,
scratch_pool);
- err = svn_wc__get_wc_root(&wcroot_abspath, wc_ctx, target_abspath,
- iterpool, iterpool);
+ err = svn_wc__get_wcroot(&wcroot_abspath, wc_ctx, target_abspath,
+ iterpool, iterpool);
if (err)
{
@@ -1063,13 +372,13 @@ determine_lock_targets(apr_array_header_t **lock_targets,
return svn_error_trace(err);
}
- wc_targets = apr_hash_get(wc_items, wcroot_abspath, APR_HASH_KEY_STRING);
+ wc_targets = svn_hash_gets(wc_items, wcroot_abspath);
if (! wc_targets)
{
wc_targets = apr_array_make(scratch_pool, 4, sizeof(const char *));
- apr_hash_set(wc_items, apr_pstrdup(scratch_pool, wcroot_abspath),
- APR_HASH_KEY_STRING, wc_targets);
+ svn_hash_sets(wc_items, apr_pstrdup(scratch_pool, wcroot_abspath),
+ wc_targets);
}
APR_ARRAY_PUSH(wc_targets, const char *) = target_abspath;
@@ -1156,8 +465,8 @@ check_url_kind(void *baton,
/* If we don't have a session or can't use the session, get one */
if (!cukb->session || !svn_uri__is_ancestor(cukb->repos_root_url, url))
{
- SVN_ERR(svn_client_open_ra_session(&cukb->session, url, cukb->ctx,
- cukb->pool));
+ SVN_ERR(svn_client_open_ra_session2(&cukb->session, url, NULL, cukb->ctx,
+ cukb->pool, scratch_pool));
SVN_ERR(svn_ra_get_repos_root2(cukb->session, &cukb->repos_root_url,
cukb->pool));
}
@@ -1169,12 +478,96 @@ check_url_kind(void *baton,
kind, scratch_pool));
}
+/* Recurse into every target in REL_TARGETS, finding committable externals
+ * nested within. Append these to REL_TARGETS itself. The paths in REL_TARGETS
+ * are assumed to be / will be created relative to BASE_ABSPATH. The remaining
+ * arguments correspond to those of svn_client_commit6(). */
+static svn_error_t*
+append_externals_as_explicit_targets(apr_array_header_t *rel_targets,
+ const char *base_abspath,
+ svn_boolean_t include_file_externals,
+ svn_boolean_t include_dir_externals,
+ svn_depth_t depth,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ int rel_targets_nelts_fixed;
+ int i;
+ apr_pool_t *iterpool;
+
+ if (! (include_file_externals || include_dir_externals))
+ return SVN_NO_ERROR;
+
+ /* Easy part of applying DEPTH to externals. */
+ if (depth == svn_depth_empty)
+ {
+ /* Don't recurse. */
+ return SVN_NO_ERROR;
+ }
+
+ /* Iterate *and* grow REL_TARGETS at the same time. */
+ rel_targets_nelts_fixed = rel_targets->nelts;
+
+ iterpool = svn_pool_create(scratch_pool);
+
+ for (i = 0; i < rel_targets_nelts_fixed; i++)
+ {
+ int j;
+ const char *target;
+ apr_array_header_t *externals = NULL;
+
+ svn_pool_clear(iterpool);
+
+ target = svn_dirent_join(base_abspath,
+ APR_ARRAY_IDX(rel_targets, i, const char *),
+ iterpool);
+
+ /* ### TODO: Possible optimization: No need to do this for file targets.
+ * ### But what's cheaper, stat'ing the file system or querying the db?
+ * ### --> future. */
+
+ SVN_ERR(svn_wc__committable_externals_below(&externals, ctx->wc_ctx,
+ target, depth,
+ iterpool, iterpool));
+
+ if (externals != NULL)
+ {
+ const char *rel_target;
+
+ for (j = 0; j < externals->nelts; j++)
+ {
+ svn_wc__committable_external_info_t *xinfo =
+ APR_ARRAY_IDX(externals, j,
+ svn_wc__committable_external_info_t *);
+
+ if ((xinfo->kind == svn_node_file && ! include_file_externals)
+ || (xinfo->kind == svn_node_dir && ! include_dir_externals))
+ continue;
+
+ rel_target = svn_dirent_skip_ancestor(base_abspath,
+ xinfo->local_abspath);
+
+ SVN_ERR_ASSERT(rel_target != NULL && *rel_target != '\0');
+
+ APR_ARRAY_PUSH(rel_targets, const char *) =
+ apr_pstrdup(result_pool, rel_target);
+ }
+ }
+ }
+
+ svn_pool_destroy(iterpool);
+ return SVN_NO_ERROR;
+}
+
svn_error_t *
-svn_client_commit5(const apr_array_header_t *targets,
+svn_client_commit6(const apr_array_header_t *targets,
svn_depth_t depth,
svn_boolean_t keep_locks,
svn_boolean_t keep_changelists,
svn_boolean_t commit_as_operations,
+ svn_boolean_t include_file_externals,
+ svn_boolean_t include_dir_externals,
const apr_array_header_t *changelists,
const apr_hash_t *revprop_table,
svn_commit_callback2_t commit_callback,
@@ -1200,10 +593,12 @@ svn_client_commit5(const apr_array_header_t *targets,
svn_error_t *bump_err = SVN_NO_ERROR;
svn_error_t *unlock_err = SVN_NO_ERROR;
svn_boolean_t commit_in_progress = FALSE;
+ svn_boolean_t timestamp_sleep = FALSE;
svn_commit_info_t *commit_info = NULL;
apr_pool_t *iterpool = svn_pool_create(pool);
const char *current_abspath;
const char *notify_prefix;
+ int depth_empty_after = -1;
int i;
SVN_ERR_ASSERT(depth != svn_depth_unknown && depth != svn_depth_exclude);
@@ -1234,6 +629,21 @@ svn_client_commit5(const apr_array_header_t *targets,
if (rel_targets->nelts == 0)
APR_ARRAY_PUSH(rel_targets, const char *) = "";
+ if (include_file_externals || include_dir_externals)
+ {
+ if (depth != svn_depth_unknown && depth != svn_depth_infinity)
+ {
+ /* All targets after this will be handled as depth empty */
+ depth_empty_after = rel_targets->nelts;
+ }
+
+ SVN_ERR(append_externals_as_explicit_targets(rel_targets, base_abspath,
+ include_file_externals,
+ include_dir_externals,
+ depth, ctx,
+ pool, pool));
+ }
+
SVN_ERR(determine_lock_targets(&lock_targets, ctx->wc_ctx, base_abspath,
rel_targets, pool, iterpool));
@@ -1298,6 +708,7 @@ svn_client_commit5(const apr_array_header_t *targets,
&lock_tokens,
base_abspath,
rel_targets,
+ depth_empty_after,
depth,
! keep_locks,
changelists,
@@ -1355,6 +766,130 @@ svn_client_commit5(const apr_array_header_t *targets,
goto cleanup;
}
+ /* For every target that was moved verify that both halves of the
+ * move are part of the commit. */
+ for (i = 0; i < commit_items->nelts; i++)
+ {
+ svn_client_commit_item3_t *item =
+ APR_ARRAY_IDX(commit_items, i, svn_client_commit_item3_t *);
+
+ svn_pool_clear(iterpool);
+
+ if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_MOVED_HERE)
+ {
+ /* ### item->moved_from_abspath contains the move origin */
+ const char *moved_from_abspath;
+ const char *delete_op_root_abspath;
+
+ cmt_err = svn_error_trace(svn_wc__node_was_moved_here(
+ &moved_from_abspath,
+ &delete_op_root_abspath,
+ ctx->wc_ctx, item->path,
+ iterpool, iterpool));
+ if (cmt_err)
+ goto cleanup;
+
+ if (moved_from_abspath && delete_op_root_abspath &&
+ strcmp(moved_from_abspath, delete_op_root_abspath) == 0)
+
+ {
+ svn_boolean_t found_delete_half =
+ (svn_hash_gets(committables->by_path, delete_op_root_abspath)
+ != NULL);
+
+ if (!found_delete_half)
+ {
+ const char *delete_half_parent_abspath;
+
+ /* The delete-half isn't in the commit target list.
+ * However, it might itself be the child of a deleted node,
+ * either because of another move or a deletion.
+ *
+ * For example, consider: mv A/B B; mv B/C C; commit;
+ * C's moved-from A/B/C is a child of the deleted A/B.
+ * A/B/C does not appear in the commit target list, but
+ * A/B does appear.
+ * (Note that moved-from information is always stored
+ * relative to the BASE tree, so we have 'C moved-from
+ * A/B/C', not 'C moved-from B/C'.)
+ *
+ * An example involving a move and a delete would be:
+ * mv A/B C; rm A; commit;
+ * Now C is moved-from A/B which does not appear in the
+ * commit target list, but A does appear.
+ */
+
+ /* Scan upwards for a deletion op-root from the
+ * delete-half's parent directory. */
+ delete_half_parent_abspath =
+ svn_dirent_dirname(delete_op_root_abspath, iterpool);
+ if (strcmp(delete_op_root_abspath,
+ delete_half_parent_abspath) != 0)
+ {
+ const char *parent_delete_op_root_abspath;
+
+ cmt_err = svn_error_trace(
+ svn_wc__node_get_deleted_ancestor(
+ &parent_delete_op_root_abspath,
+ ctx->wc_ctx, delete_half_parent_abspath,
+ iterpool, iterpool));
+ if (cmt_err)
+ goto cleanup;
+
+ if (parent_delete_op_root_abspath)
+ found_delete_half =
+ (svn_hash_gets(committables->by_path,
+ parent_delete_op_root_abspath)
+ != NULL);
+ }
+ }
+
+ if (!found_delete_half)
+ {
+ cmt_err = svn_error_createf(
+ SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("Cannot commit '%s' because it was moved from "
+ "'%s' which is not part of the commit; both "
+ "sides of the move must be committed together"),
+ svn_dirent_local_style(item->path, iterpool),
+ svn_dirent_local_style(delete_op_root_abspath,
+ iterpool));
+ goto cleanup;
+ }
+ }
+ }
+
+ if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_DELETE)
+ {
+ const char *moved_to_abspath;
+ const char *copy_op_root_abspath;
+
+ cmt_err = svn_error_trace(svn_wc__node_was_moved_away(
+ &moved_to_abspath,
+ &copy_op_root_abspath,
+ ctx->wc_ctx, item->path,
+ iterpool, iterpool));
+ if (cmt_err)
+ goto cleanup;
+
+ if (moved_to_abspath && copy_op_root_abspath &&
+ strcmp(moved_to_abspath, copy_op_root_abspath) == 0 &&
+ svn_hash_gets(committables->by_path, copy_op_root_abspath)
+ == NULL)
+ {
+ cmt_err = svn_error_createf(
+ SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("Cannot commit '%s' because it was moved to '%s' "
+ "which is not part of the commit; both sides of "
+ "the move must be committed together"),
+ svn_dirent_local_style(item->path, iterpool),
+ svn_dirent_local_style(copy_op_root_abspath,
+ iterpool));
+ goto cleanup;
+ }
+ }
+ }
+
/* Go get a log message. If an error occurs, or no log message is
specified, abort the operation. */
if (SVN_CLIENT__HAS_LOG_MSG_FUNC(ctx))
@@ -1390,12 +925,27 @@ svn_client_commit5(const apr_array_header_t *targets,
cb.info = &commit_info;
cb.pool = pool;
+ /* Get the RA editor from the first lock target, rather than BASE_ABSPATH.
+ * When committing from multiple WCs, BASE_ABSPATH might be an unrelated
+ * parent of nested working copies. We don't support commits to multiple
+ * repositories so using the first WC to get the RA session is safe. */
cmt_err = svn_error_trace(
- get_ra_editor(&ra_session, &editor, &edit_baton, ctx,
- base_url, base_abspath, log_msg,
- commit_items, revprop_table, TRUE, lock_tokens,
- keep_locks, capture_commit_info,
- &cb, pool));
+ svn_client__open_ra_session_internal(&ra_session, NULL, base_url,
+ APR_ARRAY_IDX(lock_targets,
+ 0,
+ const char *),
+ commit_items,
+ TRUE, TRUE, ctx,
+ pool, pool));
+
+ if (cmt_err)
+ goto cleanup;
+
+ cmt_err = svn_error_trace(
+ get_ra_editor(&editor, &edit_baton, ra_session, ctx,
+ log_msg, commit_items, revprop_table,
+ lock_tokens, keep_locks, capture_commit_info,
+ &cb, pool));
if (cmt_err)
goto cleanup;
@@ -1403,11 +953,16 @@ svn_client_commit5(const apr_array_header_t *targets,
/* Make a note that we have a commit-in-progress. */
commit_in_progress = TRUE;
+ /* We'll assume that, once we pass this point, we are going to need to
+ * sleep for timestamps. Really, we may not need to do unless and until
+ * we reach the point where we post-commit 'bump' the WC metadata. */
+ timestamp_sleep = TRUE;
+
/* Perform the commit. */
cmt_err = svn_error_trace(
- svn_client__do_commit(base_url, commit_items, editor, edit_baton,
- notify_prefix, NULL,
- &sha1_checksums, ctx, pool, iterpool));
+ svn_client__do_commit(base_url, commit_items, editor, edit_baton,
+ notify_prefix, &sha1_checksums, ctx, pool,
+ iterpool));
/* Handle a successful commit. */
if ((! cmt_err)
@@ -1427,9 +982,7 @@ svn_client_commit5(const apr_array_header_t *targets,
bump_err = post_process_commit_item(
queue, item, ctx->wc_ctx,
keep_changelists, keep_locks, commit_as_operations,
- apr_hash_get(sha1_checksums,
- item->path,
- APR_HASH_KEY_STRING),
+ svn_hash_gets(sha1_checksums, item->path),
iterpool);
if (bump_err)
goto cleanup;
@@ -1445,10 +998,24 @@ svn_client_commit5(const apr_array_header_t *targets,
iterpool);
}
- /* Sleep to ensure timestamp integrity. */
- svn_io_sleep_for_timestamps(base_abspath, pool);
-
cleanup:
+ /* Sleep to ensure timestamp integrity. BASE_ABSPATH may have been
+ removed by the commit or it may the common ancestor of multiple
+ working copies. */
+ if (timestamp_sleep)
+ {
+ const char *wcroot_abspath;
+ svn_error_t *err = svn_wc__get_wcroot(&wcroot_abspath, ctx->wc_ctx,
+ base_abspath, pool, pool);
+ if (err)
+ {
+ svn_error_clear(err);
+ wcroot_abspath = NULL;
+ }
+
+ svn_io_sleep_for_timestamps(wcroot_abspath, pool);
+ }
+
/* Abort the commit if it is still in progress. */
svn_pool_clear(iterpool); /* Close open handles before aborting */
if (commit_in_progress)
diff --git a/subversion/libsvn_client/commit_util.c b/subversion/libsvn_client/commit_util.c
index 2661e39..a32ec5d 100644
--- a/subversion/libsvn_client/commit_util.c
+++ b/subversion/libsvn_client/commit_util.c
@@ -44,6 +44,7 @@
#include "svn_private_config.h"
#include "private/svn_wc_private.h"
+#include "private/svn_client_private.h"
/*** Uncomment this to turn on commit driver debugging. ***/
/*
@@ -181,7 +182,11 @@ fixup_commit_error(const char *local_abspath,
/* Add a new commit candidate (described by all parameters except
`COMMITTABLES') to the COMMITTABLES hash. All of the commit item's
- members are allocated out of RESULT_POOL. */
+ members are allocated out of RESULT_POOL.
+
+ If the state flag specifies that a lock must be used, store the token in LOCK
+ in lock_tokens.
+ */
static svn_error_t *
add_committable(svn_client__committables_t *committables,
const char *local_abspath,
@@ -191,7 +196,10 @@ add_committable(svn_client__committables_t *committables,
svn_revnum_t revision,
const char *copyfrom_relpath,
svn_revnum_t copyfrom_rev,
+ const char *moved_from_abspath,
apr_byte_t state_flags,
+ apr_hash_t *lock_tokens,
+ const svn_lock_t *lock,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
@@ -205,18 +213,15 @@ add_committable(svn_client__committables_t *committables,
/* ### todo: Get the canonical repository for this item, which will
be the real key for the COMMITTABLES hash, instead of the above
bogosity. */
- array = apr_hash_get(committables->by_repository,
- repos_root_url,
- APR_HASH_KEY_STRING);
+ array = svn_hash_gets(committables->by_repository, repos_root_url);
/* E-gads! There is no array for this repository yet! Oh, no
problem, we'll just create (and add to the hash) one. */
if (array == NULL)
{
array = apr_array_make(result_pool, 1, sizeof(new_item));
- apr_hash_set(committables->by_repository,
- apr_pstrdup(result_pool, repos_root_url),
- APR_HASH_KEY_STRING, array);
+ svn_hash_sets(committables->by_repository,
+ apr_pstrdup(result_pool, repos_root_url), array);
}
/* Now update pointer values, ensuring that their allocations live
@@ -238,14 +243,23 @@ add_committable(svn_client__committables_t *committables,
new_item->incoming_prop_changes = apr_array_make(result_pool, 1,
sizeof(svn_prop_t *));
+ if (moved_from_abspath)
+ new_item->moved_from_abspath = apr_pstrdup(result_pool,
+ moved_from_abspath);
+
/* Now, add the commit item to the array. */
APR_ARRAY_PUSH(array, svn_client_commit_item3_t *) = new_item;
/* ... and to the hash. */
- apr_hash_set(committables->by_path,
- new_item->path,
- APR_HASH_KEY_STRING,
- new_item);
+ svn_hash_sets(committables->by_path, new_item->path, new_item);
+
+ if (lock
+ && lock_tokens
+ && (state_flags & SVN_CLIENT_COMMIT_ITEM_LOCK_TOKEN))
+ {
+ svn_hash_sets(lock_tokens, new_item->url,
+ apr_pstrdup(result_pool, lock->token));
+ }
return SVN_NO_ERROR;
}
@@ -258,81 +272,7 @@ look_up_committable(svn_client__committables_t *committables,
apr_pool_t *pool)
{
return (svn_client_commit_item3_t *)
- apr_hash_get(committables->by_path, path, APR_HASH_KEY_STRING);
-}
-
-/* Helper for harvest_committables().
- * If ENTRY is a dir, return an SVN_ERR_WC_FOUND_CONFLICT error when
- * encountering a tree-conflicted immediate child node. However, do
- * not consider immediate children that are outside the bounds of DEPTH.
- *
- * TODO ### WC_CTX and LOCAL_ABSPATH ...
- * ENTRY, DEPTH, CHANGELISTS and POOL are the same ones
- * originally received by harvest_committables().
- *
- * Tree-conflicts information is stored in the victim's immediate parent.
- * In some cases of an absent tree-conflicted victim, the tree-conflict
- * information in its parent dir is the only indication that the node
- * is under version control. This function is necessary for this
- * particular case. In all other cases, this simply bails out a little
- * bit earlier. */
-static svn_error_t *
-bail_on_tree_conflicted_children(svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- svn_node_kind_t kind,
- svn_depth_t depth,
- apr_hash_t *changelists,
- svn_wc_notify_func2_t notify_func,
- void *notify_baton,
- apr_pool_t *pool)
-{
- apr_hash_t *conflicts;
- apr_hash_index_t *hi;
-
- if ((depth == svn_depth_empty)
- || (kind != svn_node_dir))
- /* There can't possibly be tree-conflicts information here. */
- return SVN_NO_ERROR;
-
- SVN_ERR(svn_wc__get_all_tree_conflicts(&conflicts, wc_ctx, local_abspath,
- pool, pool));
- if (!conflicts)
- return SVN_NO_ERROR;
-
- for (hi = apr_hash_first(pool, conflicts); hi; hi = apr_hash_next(hi))
- {
- const svn_wc_conflict_description2_t *conflict =
- svn__apr_hash_index_val(hi);
-
- if ((conflict->node_kind == svn_node_dir) &&
- (depth == svn_depth_files))
- continue;
-
- /* So we've encountered a conflict that is included in DEPTH.
- Bail out. But if there are CHANGELISTS, avoid bailing out
- on an item that doesn't match the CHANGELISTS. */
- if (!svn_wc__changelist_match(wc_ctx, local_abspath, changelists, pool))
- continue;
-
- /* At this point, a conflict was found, and either there were no
- changelists, or the changelists matched. Bail out already! */
-
- if (notify_func != NULL)
- {
- notify_func(notify_baton,
- svn_wc_create_notify(local_abspath,
- svn_wc_notify_failed_conflict,
- pool),
- pool);
- }
-
- return svn_error_createf(
- SVN_ERR_WC_FOUND_CONFLICT, NULL,
- _("Aborting commit: '%s' remains in conflict"),
- svn_dirent_local_style(conflict->local_abspath, pool));
- }
-
- return SVN_NO_ERROR;
+ svn_hash_gets(committables->by_path, path);
}
/* Helper function for svn_client__harvest_committables().
@@ -347,8 +287,8 @@ bail_on_tree_conflicted_ancestor(svn_wc_context_t *wc_ctx,
{
const char *wcroot_abspath;
- SVN_ERR(svn_wc__get_wc_root(&wcroot_abspath, wc_ctx, local_abspath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__get_wcroot(&wcroot_abspath, wc_ctx, local_abspath,
+ scratch_pool, scratch_pool));
local_abspath = svn_dirent_dirname(local_abspath, scratch_pool);
@@ -402,7 +342,7 @@ bail_on_tree_conflicted_ancestor(svn_wc_context_t *wc_ctx,
If COMMIT_RELPATH is not NULL, treat not-added nodes as if it is destined to
be added as COMMIT_RELPATH, and add 'deleted' entries to COMMITTABLES as
items to delete in the copy destination. COPY_MODE_ROOT should be set TRUE
- for the first call for which COPY_MODE is TRUE, i.e. not for for the
+ for the first call for which COPY_MODE is TRUE, i.e. not for the
recursive calls, and FALSE otherwise.
If CHANGELISTS is non-NULL, it is a hash whose keys are const char *
@@ -410,6 +350,12 @@ bail_on_tree_conflicted_ancestor(svn_wc_context_t *wc_ctx,
when harvesting committables; that is, don't add a path to
COMMITTABLES unless it's a member of one of those changelists.
+ IS_EXPLICIT_TARGET should always be passed as TRUE, except when
+ harvest_committables() calls itself in recursion. This provides a way to
+ tell whether LOCAL_ABSPATH was an original target or whether it was reached
+ by recursing deeper into a dir target. (This is used to skip all file
+ externals that aren't explicit commit targets.)
+
DANGLERS is a hash table mapping const char* absolute paths of a parent
to a const char * absolute path of a child. See the comment about
danglers at the top of svn_client__harvest_committables().
@@ -419,19 +365,43 @@ bail_on_tree_conflicted_ancestor(svn_wc_context_t *wc_ctx,
Any items added to COMMITTABLES are allocated from the COMITTABLES
hash pool, not POOL. SCRATCH_POOL is used for temporary allocations. */
+
+struct harvest_baton
+{
+ /* Static data */
+ const char *root_abspath;
+ svn_client__committables_t *committables;
+ apr_hash_t *lock_tokens;
+ const char *commit_relpath; /* Valid for the harvest root */
+ svn_depth_t depth;
+ svn_boolean_t just_locked;
+ apr_hash_t *changelists;
+ apr_hash_t *danglers;
+ svn_client__check_url_kind_t check_url_func;
+ void *check_url_baton;
+ svn_wc_notify_func2_t notify_func;
+ void *notify_baton;
+ svn_wc_context_t *wc_ctx;
+ apr_pool_t *result_pool;
+
+ /* Harvester state */
+ const char *skip_below_abspath; /* If non-NULL, skip everything below */
+};
+
static svn_error_t *
-harvest_committables(svn_wc_context_t *wc_ctx,
- const char *local_abspath,
+harvest_status_callback(void *status_baton,
+ const char *local_abspath,
+ const svn_wc_status3_t *status,
+ apr_pool_t *scratch_pool);
+
+static svn_error_t *
+harvest_committables(const char *local_abspath,
svn_client__committables_t *committables,
apr_hash_t *lock_tokens,
- const char *repos_root_url,
- const char *commit_relpath,
- svn_boolean_t copy_mode_root,
+ const char *copy_mode_relpath,
svn_depth_t depth,
svn_boolean_t just_locked,
apr_hash_t *changelists,
- svn_boolean_t skip_files,
- svn_boolean_t skip_dirs,
apr_hash_t *danglers,
svn_client__check_url_kind_t check_url_func,
void *check_url_baton,
@@ -439,36 +409,223 @@ harvest_committables(svn_wc_context_t *wc_ctx,
void *cancel_baton,
svn_wc_notify_func2_t notify_func,
void *notify_baton,
+ svn_wc_context_t *wc_ctx,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- svn_boolean_t text_mod = FALSE;
- svn_boolean_t prop_mod = FALSE;
+ struct harvest_baton baton;
+
+ SVN_ERR_ASSERT((just_locked && lock_tokens) || !just_locked);
+
+ baton.root_abspath = local_abspath;
+ baton.committables = committables;
+ baton.lock_tokens = lock_tokens;
+ baton.commit_relpath = copy_mode_relpath;
+ baton.depth = depth;
+ baton.just_locked = just_locked;
+ baton.changelists = changelists;
+ baton.danglers = danglers;
+ baton.check_url_func = check_url_func;
+ baton.check_url_baton = check_url_baton;
+ baton.notify_func = notify_func;
+ baton.notify_baton = notify_baton;
+ baton.wc_ctx = wc_ctx;
+ baton.result_pool = result_pool;
+
+ baton.skip_below_abspath = NULL;
+
+ SVN_ERR(svn_wc_walk_status(wc_ctx,
+ local_abspath,
+ depth,
+ (copy_mode_relpath != NULL) /* get_all */,
+ FALSE /* no_ignore */,
+ FALSE /* ignore_text_mods */,
+ NULL /* ignore_patterns */,
+ harvest_status_callback,
+ &baton,
+ cancel_func, cancel_baton,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+harvest_not_present_for_copy(svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ svn_client__committables_t *committables,
+ const char *repos_root_url,
+ const char *commit_relpath,
+ svn_client__check_url_kind_t check_url_func,
+ void *check_url_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ const apr_array_header_t *children;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ int i;
+
+ /* A function to retrieve not present children would be nice to have */
+ SVN_ERR(svn_wc__node_get_children_of_working_node(
+ &children, wc_ctx, local_abspath, TRUE,
+ scratch_pool, iterpool));
+
+ for (i = 0; i < children->nelts; i++)
+ {
+ const char *this_abspath = APR_ARRAY_IDX(children, i, const char *);
+ const char *name = svn_dirent_basename(this_abspath, NULL);
+ const char *this_commit_relpath;
+ svn_boolean_t not_present;
+ svn_node_kind_t kind;
+
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(svn_wc__node_is_not_present(&not_present, NULL, NULL, wc_ctx,
+ this_abspath, FALSE, scratch_pool));
+
+ if (!not_present)
+ continue;
+
+ if (commit_relpath == NULL)
+ this_commit_relpath = NULL;
+ else
+ this_commit_relpath = svn_relpath_join(commit_relpath, name,
+ iterpool);
+
+ /* We should check if we should really add a delete operation */
+ if (check_url_func)
+ {
+ svn_revnum_t parent_rev;
+ const char *parent_repos_relpath;
+ const char *parent_repos_root_url;
+ const char *node_url;
+
+ /* Determine from what parent we would be the deleted child */
+ SVN_ERR(svn_wc__node_get_origin(
+ NULL, &parent_rev, &parent_repos_relpath,
+ &parent_repos_root_url, NULL, NULL,
+ wc_ctx,
+ svn_dirent_dirname(this_abspath,
+ scratch_pool),
+ FALSE, scratch_pool, scratch_pool));
+
+ node_url = svn_path_url_add_component2(
+ svn_path_url_add_component2(parent_repos_root_url,
+ parent_repos_relpath,
+ scratch_pool),
+ svn_dirent_basename(this_abspath, NULL),
+ iterpool);
+
+ SVN_ERR(check_url_func(check_url_baton, &kind,
+ node_url, parent_rev, iterpool));
+
+ if (kind == svn_node_none)
+ continue; /* This node can't be deleted */
+ }
+ else
+ SVN_ERR(svn_wc_read_kind2(&kind, wc_ctx, this_abspath,
+ TRUE, TRUE, scratch_pool));
+
+ SVN_ERR(add_committable(committables, this_abspath, kind,
+ repos_root_url,
+ this_commit_relpath,
+ SVN_INVALID_REVNUM,
+ NULL /* copyfrom_relpath */,
+ SVN_INVALID_REVNUM /* copyfrom_rev */,
+ NULL /* moved_from_abspath */,
+ SVN_CLIENT_COMMIT_ITEM_DELETE,
+ NULL, NULL,
+ result_pool, scratch_pool));
+ }
+
+ svn_pool_destroy(iterpool);
+ return SVN_NO_ERROR;
+}
+
+/* Implements svn_wc_status_func4_t */
+static svn_error_t *
+harvest_status_callback(void *status_baton,
+ const char *local_abspath,
+ const svn_wc_status3_t *status,
+ apr_pool_t *scratch_pool)
+{
apr_byte_t state_flags = 0;
- svn_node_kind_t working_kind;
- svn_node_kind_t db_kind;
- const char *node_relpath;
- const char *node_lock_token;
svn_revnum_t node_rev;
const char *cf_relpath = NULL;
svn_revnum_t cf_rev = SVN_INVALID_REVNUM;
svn_boolean_t matches_changelists;
- svn_boolean_t is_special;
svn_boolean_t is_added;
svn_boolean_t is_deleted;
svn_boolean_t is_replaced;
- svn_boolean_t is_not_present;
- svn_boolean_t is_excluded;
svn_boolean_t is_op_root;
- svn_boolean_t is_symlink;
- svn_boolean_t conflicted;
- const char *node_changelist;
- svn_boolean_t is_update_root;
svn_revnum_t original_rev;
const char *original_relpath;
- svn_boolean_t copy_mode = (commit_relpath != NULL);
+ svn_boolean_t copy_mode;
+
+ struct harvest_baton *baton = status_baton;
+ svn_boolean_t is_harvest_root =
+ (strcmp(baton->root_abspath, local_abspath) == 0);
+ svn_client__committables_t *committables = baton->committables;
+ const char *repos_root_url = status->repos_root_url;
+ const char *commit_relpath = NULL;
+ svn_boolean_t copy_mode_root = (baton->commit_relpath && is_harvest_root);
+ svn_boolean_t just_locked = baton->just_locked;
+ apr_hash_t *changelists = baton->changelists;
+ svn_wc_notify_func2_t notify_func = baton->notify_func;
+ void *notify_baton = baton->notify_baton;
+ svn_wc_context_t *wc_ctx = baton->wc_ctx;
+ apr_pool_t *result_pool = baton->result_pool;
+ const char *moved_from_abspath = NULL;
+
+ if (baton->commit_relpath)
+ commit_relpath = svn_relpath_join(
+ baton->commit_relpath,
+ svn_dirent_skip_ancestor(baton->root_abspath,
+ local_abspath),
+ scratch_pool);
+
+ copy_mode = (commit_relpath != NULL);
+
+ if (baton->skip_below_abspath
+ && svn_dirent_is_ancestor(baton->skip_below_abspath, local_abspath))
+ {
+ return SVN_NO_ERROR;
+ }
+ else
+ baton->skip_below_abspath = NULL; /* We have left the skip tree */
- SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+ /* Return early for nodes that don't have a committable status */
+ switch (status->node_status)
+ {
+ case svn_wc_status_unversioned:
+ case svn_wc_status_ignored:
+ case svn_wc_status_external:
+ case svn_wc_status_none:
+ /* Unversioned nodes aren't committable, but are reported by the status
+ walker.
+ But if the unversioned node is the root of the walk, we have a user
+ error */
+ if (is_harvest_root)
+ return svn_error_createf(
+ SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("'%s' is not under version control"),
+ svn_dirent_local_style(local_abspath, scratch_pool));
+ return SVN_NO_ERROR;
+ case svn_wc_status_normal:
+ /* Status normal nodes aren't modified, so we don't have to commit them
+ when we perform a normal commit. But if a node is conflicted we want
+ to stop the commit and if we are collecting lock tokens we want to
+ look further anyway.
+
+ When in copy mode we need to compare the revision of the node against
+ the parent node to copy mixed-revision base nodes properly */
+ if (!copy_mode && !status->conflicted
+ && !(just_locked && status->lock))
+ return SVN_NO_ERROR;
+ break;
+ default:
+ /* Fall through */
+ break;
+ }
/* Early out if the item is already marked as committable. */
if (look_up_committable(committables, local_abspath, scratch_pool))
@@ -477,118 +634,105 @@ harvest_committables(svn_wc_context_t *wc_ctx,
SVN_ERR_ASSERT((copy_mode && commit_relpath)
|| (! copy_mode && ! commit_relpath));
SVN_ERR_ASSERT((copy_mode_root && copy_mode) || ! copy_mode_root);
- SVN_ERR_ASSERT((just_locked && lock_tokens) || !just_locked);
-
- if (cancel_func)
- SVN_ERR(cancel_func(cancel_baton));
-
- /* Return error on unknown path kinds. We check both the entry and
- the node itself, since a path might have changed kind since its
- entry was written. */
- SVN_ERR(svn_wc__node_get_commit_status(&db_kind, &is_added, &is_deleted,
- &is_replaced,
- &is_not_present, &is_excluded,
- &is_op_root, &is_symlink,
- &node_rev, &node_relpath,
- &original_rev, &original_relpath,
- &conflicted,
- &node_changelist,
- &prop_mod, &is_update_root,
- &node_lock_token,
- wc_ctx, local_abspath,
- scratch_pool, scratch_pool));
-
- if ((skip_files && db_kind == svn_node_file) || is_excluded)
- return SVN_NO_ERROR;
-
- if (!node_relpath && commit_relpath)
- node_relpath = commit_relpath;
-
- SVN_ERR(svn_io_check_special_path(local_abspath, &working_kind, &is_special,
- scratch_pool));
-
- /* ### In 1.6 an obstructed dir would fail when locking before we
- got here. Locking now doesn't fail so perhaps we should do
- some sort of checking here. */
-
- if ((working_kind != svn_node_file)
- && (working_kind != svn_node_dir)
- && (working_kind != svn_node_none))
- {
- return svn_error_createf
- (SVN_ERR_NODE_UNKNOWN_KIND, NULL,
- _("Unknown entry kind for '%s'"),
- svn_dirent_local_style(local_abspath, scratch_pool));
- }
/* Save the result for reuse. */
matches_changelists = ((changelists == NULL)
- || (node_changelist != NULL
- && apr_hash_get(changelists, node_changelist,
- APR_HASH_KEY_STRING) != NULL));
+ || (status->changelist != NULL
+ && svn_hash_gets(changelists, status->changelist)
+ != NULL));
/* Early exit. */
- if (working_kind != svn_node_dir && working_kind != svn_node_none
- && ! matches_changelists)
+ if (status->kind != svn_node_dir && ! matches_changelists)
{
return SVN_NO_ERROR;
}
- /* Verify that the node's type has not changed before attempting to
- commit. */
- if ((((!is_symlink) && (is_special))
-#ifdef HAVE_SYMLINK
- || (is_symlink && (! is_special))
-#endif /* HAVE_SYMLINK */
- ) && (working_kind != svn_node_none))
+ /* If NODE is in our changelist, then examine it for conflicts. We
+ need to bail out if any conflicts exist.
+ The status walker checked for conflict marker removal. */
+ if (status->conflicted && matches_changelists)
{
- return svn_error_createf
- (SVN_ERR_NODE_UNEXPECTED_KIND, NULL,
- _("Entry '%s' has unexpectedly changed special status"),
- svn_dirent_local_style(local_abspath, scratch_pool));
- }
+ if (notify_func != NULL)
+ {
+ notify_func(notify_baton,
+ svn_wc_create_notify(local_abspath,
+ svn_wc_notify_failed_conflict,
+ scratch_pool),
+ scratch_pool);
+ }
- if (copy_mode
- && is_update_root
- && db_kind == svn_node_file)
+ return svn_error_createf(
+ SVN_ERR_WC_FOUND_CONFLICT, NULL,
+ _("Aborting commit: '%s' remains in conflict"),
+ svn_dirent_local_style(local_abspath, scratch_pool));
+ }
+ else if (status->node_status == svn_wc_status_obstructed)
{
- if (copy_mode)
- return SVN_NO_ERROR;
+ /* A node's type has changed before attempting to commit.
+ This also catches symlink vs non symlink changes */
+
+ if (notify_func != NULL)
+ {
+ notify_func(notify_baton,
+ svn_wc_create_notify(local_abspath,
+ svn_wc_notify_failed_obstruction,
+ scratch_pool),
+ scratch_pool);
+ }
+
+ return svn_error_createf(
+ SVN_ERR_NODE_UNEXPECTED_KIND, NULL,
+ _("Node '%s' has unexpectedly changed kind"),
+ svn_dirent_local_style(local_abspath, scratch_pool));
}
- /* If NODE is in our changelist, then examine it for conflicts. We
- need to bail out if any conflicts exist. */
- if (conflicted && matches_changelists)
+ if (status->conflicted && status->kind == svn_node_unknown)
+ return SVN_NO_ERROR; /* Ignore delete-delete conflict */
+
+ /* Return error on unknown path kinds. We check both the entry and
+ the node itself, since a path might have changed kind since its
+ entry was written. */
+ SVN_ERR(svn_wc__node_get_commit_status(&is_added, &is_deleted,
+ &is_replaced,
+ &is_op_root,
+ &node_rev,
+ &original_rev, &original_relpath,
+ wc_ctx, local_abspath,
+ scratch_pool, scratch_pool));
+
+ /* Hande file externals only when passed as explicit target. Note that
+ * svn_client_commit6() passes all committable externals in as explicit
+ * targets iff they count. */
+ if (status->file_external && !is_harvest_root)
{
- svn_boolean_t tc, pc, treec;
+ return SVN_NO_ERROR;
+ }
- SVN_ERR(svn_wc_conflicted_p3(&tc, &pc, &treec, wc_ctx,
- local_abspath, scratch_pool));
- if (tc || pc || treec)
+ if (status->node_status == svn_wc_status_missing && matches_changelists)
+ {
+ /* Added files and directories must exist. See issue #3198. */
+ if (is_added && is_op_root)
{
if (notify_func != NULL)
{
notify_func(notify_baton,
svn_wc_create_notify(local_abspath,
- svn_wc_notify_failed_conflict,
+ svn_wc_notify_failed_missing,
scratch_pool),
scratch_pool);
}
-
return svn_error_createf(
- SVN_ERR_WC_FOUND_CONFLICT, NULL,
- _("Aborting commit: '%s' remains in conflict"),
- svn_dirent_local_style(local_abspath, scratch_pool));
+ SVN_ERR_WC_PATH_NOT_FOUND, NULL,
+ _("'%s' is scheduled for addition, but is missing"),
+ svn_dirent_local_style(local_abspath, scratch_pool));
}
+
+ return SVN_NO_ERROR;
}
if (is_deleted && !is_op_root /* && !is_added */)
return SVN_NO_ERROR; /* Not an operational delete and not an add. */
- if (node_relpath == NULL)
- SVN_ERR(svn_wc__node_get_repos_relpath(&node_relpath,
- wc_ctx, local_abspath,
- scratch_pool, scratch_pool));
/* Check for the deletion case.
* We delete explicitly deleted nodes (duh!)
* We delete not-present children of copies
@@ -597,42 +741,6 @@ harvest_committables(svn_wc_context_t *wc_ctx,
if (is_deleted || is_replaced)
state_flags |= SVN_CLIENT_COMMIT_ITEM_DELETE;
- else if (is_not_present)
- {
- if (! copy_mode)
- return SVN_NO_ERROR;
-
- /* We should check if we should really add a delete operation */
- if (check_url_func)
- {
- svn_revnum_t revision;
- const char *repos_relpath;
- svn_node_kind_t kind;
-
- /* Determine from what parent we would be the deleted child */
- SVN_ERR(svn_wc__node_get_origin(NULL, &revision, &repos_relpath,
- NULL, NULL, NULL, wc_ctx,
- svn_dirent_dirname(local_abspath,
- scratch_pool),
- FALSE, scratch_pool, scratch_pool));
-
- repos_relpath = svn_relpath_join(repos_relpath,
- svn_dirent_basename(local_abspath,
- NULL),
- scratch_pool);
-
- SVN_ERR(check_url_func(check_url_baton, &kind,
- svn_path_url_add_component2(repos_root_url,
- repos_relpath,
- scratch_pool),
- revision, scratch_pool));
-
- if (kind == svn_node_none)
- return SVN_NO_ERROR; /* This node can't be deleted */
- }
-
- state_flags |= SVN_CLIENT_COMMIT_ITEM_DELETE;
- }
/* Check for adds and copies */
if (is_added && is_op_root)
@@ -646,142 +754,120 @@ harvest_committables(svn_wc_context_t *wc_ctx,
state_flags |= SVN_CLIENT_COMMIT_ITEM_IS_COPY;
cf_relpath = original_relpath;
cf_rev = original_rev;
+
+ if (status->moved_from_abspath && !copy_mode)
+ {
+ state_flags |= SVN_CLIENT_COMMIT_ITEM_MOVED_HERE;
+ moved_from_abspath = status->moved_from_abspath;
+ }
}
}
- /* Further additions occur in copy mode. */
- if (copy_mode
- && (!is_added || copy_mode_root)
- && !(state_flags & SVN_CLIENT_COMMIT_ITEM_DELETE))
+ /* Further copies may occur in copy mode. */
+ else if (copy_mode
+ && !(state_flags & SVN_CLIENT_COMMIT_ITEM_DELETE))
{
- svn_revnum_t dir_rev;
-
- if (!copy_mode_root)
- SVN_ERR(svn_wc__node_get_base_rev(&dir_rev, wc_ctx,
- svn_dirent_dirname(local_abspath,
- scratch_pool),
- scratch_pool));
+ svn_revnum_t dir_rev = SVN_INVALID_REVNUM;
+
+ if (!copy_mode_root && !status->switched && !is_added)
+ SVN_ERR(svn_wc__node_get_base(NULL, &dir_rev, NULL, NULL, NULL, NULL,
+ wc_ctx, svn_dirent_dirname(local_abspath,
+ scratch_pool),
+ FALSE /* ignore_enoent */,
+ FALSE /* show_hidden */,
+ scratch_pool, scratch_pool));
- if (copy_mode_root || node_rev != dir_rev)
+ if (copy_mode_root || status->switched || node_rev != dir_rev)
{
- state_flags |= SVN_CLIENT_COMMIT_ITEM_ADD;
-
- SVN_ERR(svn_wc__node_get_origin(NULL, &cf_rev,
- &cf_relpath, NULL,
- NULL, NULL,
- wc_ctx, local_abspath, FALSE,
- scratch_pool, scratch_pool));
+ state_flags |= (SVN_CLIENT_COMMIT_ITEM_ADD
+ | SVN_CLIENT_COMMIT_ITEM_IS_COPY);
- if (cf_relpath)
- state_flags |= SVN_CLIENT_COMMIT_ITEM_IS_COPY;
+ if (status->copied)
+ {
+ /* Copy from original location */
+ cf_rev = original_rev;
+ cf_relpath = original_relpath;
+ }
+ else
+ {
+ /* Copy BASE location, to represent a mixed-rev or switch copy */
+ cf_rev = status->revision;
+ cf_relpath = status->repos_relpath;
+ }
}
}
- /* If an add is scheduled to occur, dig around for some more
- information about it. */
- if (state_flags & SVN_CLIENT_COMMIT_ITEM_ADD)
+ if (!(state_flags & SVN_CLIENT_COMMIT_ITEM_DELETE)
+ || (state_flags & SVN_CLIENT_COMMIT_ITEM_ADD))
{
- /* First of all, the working file or directory must exist.
- See issue #3198. */
- if (working_kind == svn_node_none)
+ svn_boolean_t text_mod = FALSE;
+ svn_boolean_t prop_mod = FALSE;
+
+ if (status->kind == svn_node_file)
{
- if (notify_func != NULL)
+ /* Check for text modifications on files */
+ if ((state_flags & SVN_CLIENT_COMMIT_ITEM_ADD)
+ && ! (state_flags & SVN_CLIENT_COMMIT_ITEM_IS_COPY))
{
- notify_func(notify_baton,
- svn_wc_create_notify(local_abspath,
- svn_wc_notify_failed_missing,
- scratch_pool),
- scratch_pool);
+ text_mod = TRUE; /* Local added files are always modified */
}
- return svn_error_createf(
- SVN_ERR_WC_PATH_NOT_FOUND, NULL,
- _("'%s' is scheduled for addition, but is missing"),
- svn_dirent_local_style(local_abspath, scratch_pool));
- }
-
- /* Regular adds of files have text mods, but for copies we have
- to test for textual mods. Directories simply don't have text! */
- if (db_kind == svn_node_file)
- {
- /* Check for text mods. */
- if (state_flags & SVN_CLIENT_COMMIT_ITEM_IS_COPY)
- SVN_ERR(svn_wc_text_modified_p2(&text_mod, wc_ctx, local_abspath,
- FALSE, scratch_pool));
else
- text_mod = TRUE;
+ text_mod = (status->text_status != svn_wc_status_normal);
}
- }
- /* Else, if we aren't deleting this item, we'll have to look for
- local text or property mods to determine if the path might be
- committable. */
- else if (! (state_flags & SVN_CLIENT_COMMIT_ITEM_DELETE))
- {
- /* Check for text mods on files. If EOL_PROP_CHANGED is TRUE,
- then we need to force a translated byte-for-byte comparison
- against the text-base so that a timestamp comparison won't
- bail out early. Depending on how the svn:eol-style prop was
- changed, we might have to send new text to the server to
- match the new newline style. */
- if (db_kind == svn_node_file)
- SVN_ERR(svn_wc_text_modified_p2(&text_mod, wc_ctx, local_abspath,
- FALSE, scratch_pool));
- }
+ prop_mod = (status->prop_status != svn_wc_status_normal
+ && status->prop_status != svn_wc_status_none);
- /* Set text/prop modification flags accordingly. */
- if (text_mod)
- state_flags |= SVN_CLIENT_COMMIT_ITEM_TEXT_MODS;
- if (prop_mod)
- state_flags |= SVN_CLIENT_COMMIT_ITEM_PROP_MODS;
+ /* Set text/prop modification flags accordingly. */
+ if (text_mod)
+ state_flags |= SVN_CLIENT_COMMIT_ITEM_TEXT_MODS;
+ if (prop_mod)
+ state_flags |= SVN_CLIENT_COMMIT_ITEM_PROP_MODS;
+ }
/* If the entry has a lock token and it is already a commit candidate,
or the caller wants unmodified locked items to be treated as
such, note this fact. */
- if (node_lock_token && lock_tokens && (state_flags || just_locked))
+ if (status->lock && baton->lock_tokens && (state_flags || just_locked))
{
state_flags |= SVN_CLIENT_COMMIT_ITEM_LOCK_TOKEN;
}
/* Now, if this is something to commit, add it to our list. */
- if (state_flags)
+ if (matches_changelists
+ && state_flags)
{
- if (matches_changelists)
- {
- /* Finally, add the committable item. */
- SVN_ERR(add_committable(committables, local_abspath, db_kind,
- repos_root_url,
- copy_mode
+ /* Finally, add the committable item. */
+ SVN_ERR(add_committable(committables, local_abspath,
+ status->kind,
+ repos_root_url,
+ copy_mode
? commit_relpath
- : node_relpath,
- copy_mode
+ : status->repos_relpath,
+ copy_mode
? SVN_INVALID_REVNUM
: node_rev,
- cf_relpath,
- cf_rev,
- state_flags,
- result_pool, scratch_pool));
- if (state_flags & SVN_CLIENT_COMMIT_ITEM_LOCK_TOKEN)
- apr_hash_set(lock_tokens,
- svn_path_url_add_component2(
- repos_root_url, node_relpath,
- apr_hash_pool_get(lock_tokens)),
- APR_HASH_KEY_STRING,
- apr_pstrdup(apr_hash_pool_get(lock_tokens),
- node_lock_token));
- }
+ cf_relpath,
+ cf_rev,
+ moved_from_abspath,
+ state_flags,
+ baton->lock_tokens, status->lock,
+ result_pool, scratch_pool));
}
- /* Fetch lock tokens for descendants of deleted nodes. */
- if (lock_tokens
- && (state_flags & SVN_CLIENT_COMMIT_ITEM_DELETE))
+ /* Fetch lock tokens for descendants of deleted BASE nodes. */
+ if (matches_changelists
+ && (state_flags & SVN_CLIENT_COMMIT_ITEM_DELETE)
+ && !copy_mode
+ && SVN_IS_VALID_REVNUM(node_rev) /* && BASE-kind = dir */
+ && baton->lock_tokens)
{
apr_hash_t *local_relpath_tokens;
apr_hash_index_t *hi;
- apr_pool_t *token_pool = apr_hash_pool_get(lock_tokens);
SVN_ERR(svn_wc__node_get_lock_tokens_recursive(
&local_relpath_tokens, wc_ctx, local_abspath,
- token_pool, scratch_pool));
+ result_pool, scratch_pool));
/* Add tokens to existing hash. */
for (hi = apr_hash_first(scratch_pool, local_relpath_tokens);
@@ -794,22 +880,35 @@ harvest_committables(svn_wc_context_t *wc_ctx,
apr_hash_this(hi, &key, &klen, &val);
- apr_hash_set(lock_tokens, key, klen, val);
+ apr_hash_set(baton->lock_tokens, key, klen, val);
}
}
- /* Make sure we check for dangling children on additions */
- if (state_flags && is_added && danglers)
+ /* Make sure we check for dangling children on additions
+
+ We perform this operation on the harvest root, and on roots caused by
+ changelist filtering.
+ */
+ if (matches_changelists
+ && (is_harvest_root || baton->changelists)
+ && state_flags
+ && (is_added || (is_deleted && is_op_root && status->copied))
+ && baton->danglers)
{
- /* If a node is added, it's parent must exist in the repository at the
+ /* If a node is added, its parent must exist in the repository at the
time of committing */
-
+ apr_hash_t *danglers = baton->danglers;
svn_boolean_t parent_added;
const char *parent_abspath = svn_dirent_dirname(local_abspath,
scratch_pool);
- SVN_ERR(svn_wc__node_is_added(&parent_added, wc_ctx, parent_abspath,
- scratch_pool));
+ /* First check if parent is already in the list of commits
+ (Common case for GUI clients that provide a list of commit targets) */
+ if (look_up_committable(committables, parent_abspath, scratch_pool))
+ parent_added = FALSE; /* Skip all expensive checks */
+ else
+ SVN_ERR(svn_wc__node_is_added(&parent_added, wc_ctx, parent_abspath,
+ scratch_pool));
if (parent_added)
{
@@ -827,73 +926,33 @@ harvest_committables(svn_wc_context_t *wc_ctx,
if (parent_is_copy)
parent_abspath = copy_root_abspath;
- if (!apr_hash_get(danglers, parent_abspath, APR_HASH_KEY_STRING))
+ if (!svn_hash_gets(danglers, parent_abspath))
{
- apr_hash_set(danglers,
- apr_pstrdup(result_pool, parent_abspath),
- APR_HASH_KEY_STRING,
- apr_pstrdup(result_pool, local_abspath));
+ svn_hash_sets(danglers, apr_pstrdup(result_pool, parent_abspath),
+ apr_pstrdup(result_pool, local_abspath));
}
}
}
- if (db_kind != svn_node_dir || depth <= svn_depth_empty)
- return SVN_NO_ERROR;
-
- SVN_ERR(bail_on_tree_conflicted_children(wc_ctx, local_abspath,
- db_kind, depth, changelists,
- notify_func, notify_baton,
- scratch_pool));
+ if (is_deleted && !is_added)
+ {
+ /* Skip all descendants */
+ if (status->kind == svn_node_dir)
+ baton->skip_below_abspath = apr_pstrdup(baton->result_pool,
+ local_abspath);
+ return SVN_NO_ERROR;
+ }
/* Recursively handle each node according to depth, except when the
- node is only being deleted. */
- if ((! (state_flags & SVN_CLIENT_COMMIT_ITEM_DELETE))
- || (state_flags & SVN_CLIENT_COMMIT_ITEM_ADD))
+ node is only being deleted, or is in an added tree (as added trees
+ use the normal commit handling). */
+ if (copy_mode && !is_added && !is_deleted && status->kind == svn_node_dir)
{
- const apr_array_header_t *children;
- apr_pool_t *iterpool = svn_pool_create(scratch_pool);
- int i;
- svn_depth_t depth_below_here = depth;
-
- if (depth < svn_depth_infinity)
- depth_below_here = svn_depth_empty; /* Stop recursing */
-
- SVN_ERR(svn_wc__node_get_children_of_working_node(
- &children, wc_ctx, local_abspath, copy_mode,
- scratch_pool, iterpool));
- for (i = 0; i < children->nelts; i++)
- {
- const char *this_abspath = APR_ARRAY_IDX(children, i, const char *);
- const char *name = svn_dirent_basename(this_abspath, NULL);
- const char *this_commit_relpath;
-
- svn_pool_clear(iterpool);
-
- if (commit_relpath == NULL)
- this_commit_relpath = NULL;
- else
- this_commit_relpath = svn_relpath_join(commit_relpath, name,
- iterpool);
-
- SVN_ERR(harvest_committables(wc_ctx, this_abspath,
- committables, lock_tokens,
- repos_root_url,
- this_commit_relpath,
- FALSE, /* COPY_MODE_ROOT */
- depth_below_here,
- just_locked,
- changelists,
- (depth < svn_depth_files),
- (depth < svn_depth_immediates),
- NULL, /* danglers */
- check_url_func, check_url_baton,
- cancel_func, cancel_baton,
- notify_func, notify_baton,
- result_pool,
- iterpool));
- }
-
- svn_pool_destroy(iterpool);
+ SVN_ERR(harvest_not_present_for_copy(wc_ctx, local_abspath, committables,
+ repos_root_url, commit_relpath,
+ baton->check_url_func,
+ baton->check_url_baton,
+ result_pool, scratch_pool));
}
return SVN_NO_ERROR;
@@ -907,17 +966,19 @@ struct handle_descendants_baton
void *cancel_baton;
svn_client__check_url_kind_t check_url_func;
void *check_url_baton;
+ svn_client__committables_t *committables;
};
/* Helper for the commit harvesters */
static svn_error_t *
handle_descendants(void *baton,
- const void *key, apr_ssize_t klen, void *val,
- apr_pool_t *pool)
+ const void *key, apr_ssize_t klen, void *val,
+ apr_pool_t *pool)
{
struct handle_descendants_baton *hdb = baton;
apr_array_header_t *commit_items = val;
apr_pool_t *iterpool = svn_pool_create(pool);
+ const char *repos_root_url = key;
int i;
for (i = 0; i < commit_items->nelts; i++)
@@ -943,32 +1004,64 @@ handle_descendants(void *baton,
for (j = 0; j < absent_descendants->nelts; j++)
{
- int k;
- svn_boolean_t found_item = FALSE;
svn_node_kind_t kind;
+ svn_client_commit_item3_t *desc_item;
const char *relpath = APR_ARRAY_IDX(absent_descendants, j,
const char *);
const char *local_abspath = svn_dirent_join(item->path, relpath,
iterpool);
- /* If the path has a commit operation, we do nothing.
- (It will be deleted by the operation) */
- for (k = 0; k < commit_items->nelts; k++)
+ /* ### Need a sub-iterpool? */
+
+
+ /* We found a 'not present' descendant during a copy (at op_depth>0),
+ this is most commonly caused by copying some mixed revision tree.
+
+ In this case not present can imply that the node does not exist
+ in the parent revision, or that the node does. But we want to copy
+ the working copy state in which it does not exist, but might be
+ replaced. */
+
+ desc_item = svn_hash_gets(hdb->committables->by_path, local_abspath);
+
+ /* If the path has a commit operation (possibly at an higher
+ op_depth, we might want to turn an add in a replace. */
+ if (desc_item)
{
- svn_client_commit_item3_t *cmt_item =
- APR_ARRAY_IDX(commit_items, k, svn_client_commit_item3_t *);
+ const char *dir;
+ svn_boolean_t found_intermediate = FALSE;
+
+ if (desc_item->state_flags & SVN_CLIENT_COMMIT_ITEM_DELETE)
+ continue; /* We already have a delete or replace */
+ else if (!(desc_item->state_flags & SVN_CLIENT_COMMIT_ITEM_ADD))
+ continue; /* Not a copy/add, just a modification */
- if (! strcmp(cmt_item->path, local_abspath))
+ dir = svn_dirent_dirname(local_abspath, iterpool);
+
+ while (strcmp(dir, item->path))
{
- found_item = TRUE;
- break;
+ svn_client_commit_item3_t *i_item;
+
+ i_item = svn_hash_gets(hdb->committables->by_path, dir);
+
+ if (i_item)
+ {
+ if ((i_item->state_flags & SVN_CLIENT_COMMIT_ITEM_DELETE)
+ || (i_item->state_flags & SVN_CLIENT_COMMIT_ITEM_ADD))
+ {
+ found_intermediate = TRUE;
+ break;
+ }
+ }
+ dir = svn_dirent_dirname(dir, iterpool);
}
- }
- if (found_item)
- continue; /* We have an explicit delete or replace for this path */
+ if (found_intermediate)
+ continue; /* Some intermediate ancestor is an add or delete */
- /* ### Need a sub-iterpool? */
+ /* Fall through to detect if we need to turn the add in a
+ replace. */
+ }
if (hdb->check_url_func)
{
@@ -986,25 +1079,35 @@ handle_descendants(void *baton,
else
kind = svn_node_unknown; /* 'Ok' for a delete of something */
- {
- /* Add a new commit item that describes the delete */
- apr_pool_t *result_pool = commit_items->pool;
- svn_client_commit_item3_t *new_item
- = svn_client_commit_item3_create(result_pool);
-
- new_item->path = svn_dirent_join(item->path, relpath,
- result_pool);
- new_item->kind = kind;
- new_item->url = svn_path_url_add_component2(item->url, relpath,
- result_pool);
- new_item->revision = SVN_INVALID_REVNUM;
- new_item->state_flags = SVN_CLIENT_COMMIT_ITEM_DELETE;
- new_item->incoming_prop_changes = apr_array_make(result_pool, 1,
- sizeof(svn_prop_t *));
-
- APR_ARRAY_PUSH(commit_items, svn_client_commit_item3_t *)
- = new_item;
- }
+ if (desc_item)
+ {
+ /* Extend the existing add/copy item to create a replace */
+ desc_item->state_flags |= SVN_CLIENT_COMMIT_ITEM_DELETE;
+ continue;
+ }
+
+ /* Add a new commit item that describes the delete */
+
+ SVN_ERR(add_committable(hdb->committables,
+ svn_dirent_join(item->path, relpath,
+ iterpool),
+ kind,
+ repos_root_url,
+ svn_uri_skip_ancestor(
+ repos_root_url,
+ svn_path_url_add_component2(item->url,
+ relpath,
+ iterpool),
+ iterpool),
+ SVN_INVALID_REVNUM,
+ NULL /* copyfrom_relpath */,
+ SVN_INVALID_REVNUM,
+ NULL /* moved_from_abspath */,
+ SVN_CLIENT_COMMIT_ITEM_DELETE,
+ NULL /* lock tokens */,
+ NULL /* lock */,
+ commit_items->pool,
+ iterpool));
}
}
@@ -1029,6 +1132,7 @@ svn_client__harvest_committables(svn_client__committables_t **committables,
apr_hash_t **lock_tokens,
const char *base_dir_abspath,
const apr_array_header_t *targets,
+ int depth_empty_start,
svn_depth_t depth,
svn_boolean_t just_locked,
const apr_array_header_t *changelists,
@@ -1041,7 +1145,6 @@ svn_client__harvest_committables(svn_client__committables_t **committables,
int i;
apr_pool_t *iterpool = svn_pool_create(scratch_pool);
apr_hash_t *changelist_hash = NULL;
- svn_wc_context_t *wc_ctx = ctx->wc_ctx;
struct handle_descendants_baton hdb;
apr_hash_index_t *hi;
@@ -1086,8 +1189,6 @@ svn_client__harvest_committables(svn_client__committables_t **committables,
for (i = 0; i < targets->nelts; ++i)
{
const char *target_abspath;
- svn_node_kind_t kind;
- const char *repos_root_url;
svn_pool_clear(iterpool);
@@ -1096,34 +1197,6 @@ svn_client__harvest_committables(svn_client__committables_t **committables,
APR_ARRAY_IDX(targets, i, const char *),
iterpool);
- SVN_ERR(svn_wc_read_kind(&kind, wc_ctx, target_abspath,
- FALSE, /* show_hidden */
- iterpool));
- if (kind == svn_node_none)
- {
- /* If a target of the commit is a tree-conflicted node that
- * has no entry (e.g. locally deleted), issue a proper tree-
- * conflicts error instead of a "not under version control". */
- const svn_wc_conflict_description2_t *conflict;
- SVN_ERR(svn_wc__get_tree_conflict(&conflict, wc_ctx, target_abspath,
- iterpool, iterpool));
- if (conflict != NULL)
- return svn_error_createf(
- SVN_ERR_WC_FOUND_CONFLICT, NULL,
- _("Aborting commit: '%s' remains in conflict"),
- svn_dirent_local_style(conflict->local_abspath,
- iterpool));
- else
- return svn_error_createf(
- SVN_ERR_ILLEGAL_TARGET, NULL,
- _("'%s' is not under version control"),
- svn_dirent_local_style(target_abspath, iterpool));
- }
-
- SVN_ERR(svn_wc__node_get_repos_info(&repos_root_url, NULL, wc_ctx,
- target_abspath,
- result_pool, iterpool));
-
/* Handle our TARGET. */
/* Make sure this isn't inside a working copy subtree that is
* marked as tree-conflicted. */
@@ -1132,18 +1205,19 @@ svn_client__harvest_committables(svn_client__committables_t **committables,
ctx->notify_baton2,
iterpool));
- SVN_ERR(harvest_committables(ctx->wc_ctx, target_abspath,
+ /* Are the remaining items externals with depth empty? */
+ if (i == depth_empty_start)
+ depth = svn_depth_empty;
+
+ SVN_ERR(harvest_committables(target_abspath,
*committables, *lock_tokens,
- repos_root_url,
- NULL /* COMMIT_RELPATH */,
- FALSE /* COPY_MODE_ROOT */,
+ NULL /* COPY_MODE_RELPATH */,
depth, just_locked, changelist_hash,
- FALSE, FALSE,
danglers,
check_url_func, check_url_baton,
ctx->cancel_func, ctx->cancel_baton,
ctx->notify_func2, ctx->notify_baton2,
- result_pool, iterpool));
+ ctx->wc_ctx, result_pool, iterpool));
}
hdb.wc_ctx = ctx->wc_ctx;
@@ -1151,6 +1225,7 @@ svn_client__harvest_committables(svn_client__committables_t **committables,
hdb.cancel_baton = ctx->cancel_baton;
hdb.check_url_func = check_url_func;
hdb.check_url_baton = check_url_baton;
+ hdb.committables = *committables;
SVN_ERR(svn_iter_apr_hash(NULL, (*committables)->by_repository,
handle_descendants, &hdb, iterpool));
@@ -1215,7 +1290,8 @@ harvest_copy_committables(void *baton, void *item, apr_pool_t *pool)
/* Read the entry for this SRC. */
SVN_ERR_ASSERT(svn_dirent_is_absolute(pair->src_abspath_or_url));
- SVN_ERR(svn_wc__node_get_repos_info(&repos_root_url, NULL, btn->ctx->wc_ctx,
+ SVN_ERR(svn_wc__node_get_repos_info(NULL, NULL, &repos_root_url, NULL,
+ btn->ctx->wc_ctx,
pair->src_abspath_or_url,
pool, pool));
@@ -1223,16 +1299,12 @@ harvest_copy_committables(void *baton, void *item, apr_pool_t *pool)
pair->dst_abspath_or_url, pool);
/* Handle this SRC. */
- SVN_ERR(harvest_committables(btn->ctx->wc_ctx,
- pair->src_abspath_or_url,
+ SVN_ERR(harvest_committables(pair->src_abspath_or_url,
btn->committables, NULL,
- repos_root_url,
commit_relpath,
- TRUE, /* COPY_MODE_ROOT */
svn_depth_infinity,
FALSE, /* JUST_LOCKED */
- NULL,
- FALSE, FALSE, /* skip files, dirs */
+ NULL /* changelists */,
NULL,
btn->check_url_func,
btn->check_url_baton,
@@ -1240,13 +1312,14 @@ harvest_copy_committables(void *baton, void *item, apr_pool_t *pool)
btn->ctx->cancel_baton,
btn->ctx->notify_func2,
btn->ctx->notify_baton2,
- btn->result_pool, pool));
+ btn->ctx->wc_ctx, btn->result_pool, pool));
hdb.wc_ctx = btn->ctx->wc_ctx;
hdb.cancel_func = btn->ctx->cancel_func;
hdb.cancel_baton = btn->ctx->cancel_baton;
hdb.check_url_func = btn->check_url_func;
hdb.check_url_baton = btn->check_url_baton;
+ hdb.committables = btn->committables;
SVN_ERR(svn_iter_apr_hash(NULL, btn->committables->by_repository,
handle_descendants, &hdb, pool));
@@ -1357,14 +1430,9 @@ svn_client__condense_commit_items(const char **base_url,
{
svn_client_commit_item3_t *this_item
= APR_ARRAY_IDX(ci, i, svn_client_commit_item3_t *);
- size_t url_len = strlen(this_item->url);
- size_t base_url_len = strlen(*base_url);
- if (url_len > base_url_len)
- this_item->session_relpath = svn_uri__is_child(*base_url,
- this_item->url, pool);
- else
- this_item->session_relpath = "";
+ this_item->session_relpath = svn_uri_skip_ancestor(*base_url,
+ this_item->url, pool);
}
#ifdef SVN_CLIENT_COMMIT_DEBUG
/* ### TEMPORARY CODE ### */
@@ -1437,9 +1505,8 @@ do_item_commit(void **dir_baton,
apr_pool_t *pool)
{
struct item_commit_baton *icb = callback_baton;
- const svn_client_commit_item3_t *item = apr_hash_get(icb->commit_items,
- path,
- APR_HASH_KEY_STRING);
+ const svn_client_commit_item3_t *item = svn_hash_gets(icb->commit_items,
+ path);
svn_node_kind_t kind = item->kind;
void *file_baton = NULL;
apr_pool_t *file_pool = NULL;
@@ -1567,10 +1634,7 @@ do_item_commit(void **dir_baton,
parent_baton, pool);
if (err)
- return svn_error_trace(fixup_commit_error(local_abspath,
- icb->base_url,
- path, item->kind,
- err, ctx, pool));
+ goto fixup_error;
}
/* If this item is supposed to be added, do so. */
@@ -1594,10 +1658,7 @@ do_item_commit(void **dir_baton,
}
if (err)
- return svn_error_trace(fixup_commit_error(local_abspath,
- icb->base_url,
- path, kind, err,
- ctx, pool));
+ goto fixup_error;
/* Set other prop-changes, if available in the baton */
if (item->outgoing_prop_changes)
@@ -1610,14 +1671,17 @@ do_item_commit(void **dir_baton,
prop = APR_ARRAY_IDX(prop_changes, ctr, svn_prop_t *);
if (kind == svn_node_file)
{
- editor->change_file_prop(file_baton, prop->name,
- prop->value, pool);
+ err = editor->change_file_prop(file_baton, prop->name,
+ prop->value, pool);
}
else
{
- editor->change_dir_prop(*dir_baton, prop->name,
- prop->value, pool);
+ err = editor->change_dir_prop(*dir_baton, prop->name,
+ prop->value, pool);
}
+
+ if (err)
+ goto fixup_error;
}
}
}
@@ -1635,11 +1699,7 @@ do_item_commit(void **dir_baton,
file_pool, &file_baton);
if (err)
- return svn_error_trace(fixup_commit_error(local_abspath,
- icb->base_url,
- path, kind,
- err, ctx,
- pool));
+ goto fixup_error;
}
}
else
@@ -1659,11 +1719,7 @@ do_item_commit(void **dir_baton,
}
if (err)
- return svn_error_trace(fixup_commit_error(local_abspath,
- icb->base_url,
- path, kind,
- err, ctx,
- pool));
+ goto fixup_error;
}
}
@@ -1676,10 +1732,7 @@ do_item_commit(void **dir_baton,
(kind == svn_node_dir) ? *dir_baton : file_baton, pool);
if (err)
- return svn_error_trace(fixup_commit_error(local_abspath,
- icb->base_url,
- path, kind, err,
- ctx, pool));
+ goto fixup_error;
/* Make any additional client -> repository prop changes. */
if (item->outgoing_prop_changes)
@@ -1693,14 +1746,17 @@ do_item_commit(void **dir_baton,
svn_prop_t *);
if (kind == svn_node_file)
{
- editor->change_file_prop(file_baton, prop->name,
+ err = editor->change_file_prop(file_baton, prop->name,
prop->value, pool);
}
else
{
- editor->change_dir_prop(*dir_baton, prop->name,
+ err = editor->change_dir_prop(*dir_baton, prop->name,
prop->value, pool);
}
+
+ if (err)
+ goto fixup_error;
}
}
}
@@ -1721,16 +1777,13 @@ do_item_commit(void **dir_baton,
file_pool, &file_baton);
if (err)
- return svn_error_trace(fixup_commit_error(local_abspath,
- icb->base_url,
- path, kind,
- err, ctx, pool));
+ goto fixup_error;
}
/* Add this file mod to the FILE_MODS hash. */
mod->item = item;
mod->file_baton = file_baton;
- apr_hash_set(file_mods, item->session_relpath, APR_HASH_KEY_STRING, mod);
+ svn_hash_sets(file_mods, item->session_relpath, mod);
}
else if (file_baton)
{
@@ -1739,25 +1792,17 @@ do_item_commit(void **dir_baton,
err = editor->close_file(file_baton, NULL, file_pool);
if (err)
- return svn_error_trace(fixup_commit_error(local_abspath,
- icb->base_url,
- path, kind,
- err, ctx, pool));
+ goto fixup_error;
}
return SVN_NO_ERROR;
-}
-
-#ifdef SVN_CLIENT_COMMIT_DEBUG
-/* Prototype for function below */
-static svn_error_t *get_test_editor(const svn_delta_editor_t **editor,
- void **edit_baton,
- const svn_delta_editor_t *real_editor,
- void *real_eb,
- const char *base_url,
- apr_pool_t *pool);
-#endif /* SVN_CLIENT_COMMIT_DEBUG */
+fixup_error:
+ return svn_error_trace(fixup_commit_error(local_abspath,
+ icb->base_url,
+ path, kind,
+ err, ctx, pool));
+}
svn_error_t *
svn_client__do_commit(const char *base_url,
@@ -1765,7 +1810,6 @@ svn_client__do_commit(const char *base_url,
const svn_delta_editor_t *editor,
void *edit_baton,
const char *notify_path_prefix,
- apr_hash_t **md5_checksums,
apr_hash_t **sha1_checksums,
svn_client_ctx_t *ctx,
apr_pool_t *result_pool,
@@ -1780,17 +1824,7 @@ svn_client__do_commit(const char *base_url,
apr_array_header_t *paths =
apr_array_make(scratch_pool, commit_items->nelts, sizeof(const char *));
-#ifdef SVN_CLIENT_COMMIT_DEBUG
- {
- SVN_ERR(get_test_editor(&editor, &edit_baton,
- editor, edit_baton,
- base_url, scratch_pool));
- }
-#endif /* SVN_CLIENT_COMMIT_DEBUG */
-
/* Ditto for the checksums. */
- if (md5_checksums)
- *md5_checksums = apr_hash_make(result_pool);
if (sha1_checksums)
*sha1_checksums = apr_hash_make(result_pool);
@@ -1802,7 +1836,7 @@ svn_client__do_commit(const char *base_url,
svn_client_commit_item3_t *item =
APR_ARRAY_IDX(commit_items, i, svn_client_commit_item3_t *);
const char *path = item->session_relpath;
- apr_hash_set(items_hash, path, APR_HASH_KEY_STRING, item);
+ svn_hash_sets(items_hash, path, item);
APR_ARRAY_PUSH(paths, const char *) = path;
}
@@ -1816,9 +1850,8 @@ svn_client__do_commit(const char *base_url,
cb_baton.base_url = base_url;
/* Drive the commit editor! */
- SVN_ERR(svn_delta_path_driver(editor, edit_baton, SVN_INVALID_REVNUM,
- paths, do_item_commit, &cb_baton,
- scratch_pool));
+ SVN_ERR(svn_delta_path_driver2(editor, edit_baton, paths, TRUE,
+ do_item_commit, &cb_baton, scratch_pool));
/* Transmit outstanding text deltas. */
for (hi = apr_hash_first(scratch_pool, file_mods);
@@ -1870,12 +1903,8 @@ svn_client__do_commit(const char *base_url,
err, ctx, scratch_pool));
}
- if (md5_checksums)
- apr_hash_set(*md5_checksums, item->path, APR_HASH_KEY_STRING,
- new_text_base_md5_checksum);
if (sha1_checksums)
- apr_hash_set(*sha1_checksums, item->path, APR_HASH_KEY_STRING,
- new_text_base_sha1_checksum);
+ svn_hash_sets(*sha1_checksums, item->path, new_text_base_sha1_checksum);
}
svn_pool_destroy(iterpool);
@@ -1885,269 +1914,6 @@ svn_client__do_commit(const char *base_url,
}
-#ifdef SVN_CLIENT_COMMIT_DEBUG
-
-/*** Temporary test editor ***/
-
-struct edit_baton
-{
- const char *path;
-
- const svn_delta_editor_t *real_editor;
- void *real_eb;
-};
-
-struct item_baton
-{
- struct edit_baton *eb;
- void *real_baton;
-
- const char *path;
-};
-
-static struct item_baton *
-make_baton(struct edit_baton *eb,
- void *real_baton,
- const char *path,
- apr_pool_t *pool)
-{
- struct item_baton *new_baton = apr_pcalloc(pool, sizeof(*new_baton));
- new_baton->eb = eb;
- new_baton->real_baton = real_baton;
- new_baton->path = apr_pstrdup(pool, path);
- return new_baton;
-}
-
-static svn_error_t *
-set_target_revision(void *edit_baton,
- svn_revnum_t target_revision,
- apr_pool_t *pool)
-{
- struct edit_baton *eb = edit_baton;
- return (*eb->real_editor->set_target_revision)(eb->real_eb,
- target_revision,
- pool);
-}
-
-static svn_error_t *
-open_root(void *edit_baton,
- svn_revnum_t base_revision,
- apr_pool_t *dir_pool,
- void **root_baton)
-{
- struct edit_baton *eb = edit_baton;
- struct item_baton *new_baton = make_baton(eb, NULL, eb->path, dir_pool);
- fprintf(stderr, "TEST EDIT STARTED (base URL=%s)\n", eb->path);
- *root_baton = new_baton;
- return (*eb->real_editor->open_root)(eb->real_eb,
- base_revision,
- dir_pool,
- &new_baton->real_baton);
-}
-
-static svn_error_t *
-add_file(const char *path,
- void *parent_baton,
- const char *copyfrom_path,
- svn_revnum_t copyfrom_revision,
- apr_pool_t *pool,
- void **baton)
-{
- struct item_baton *db = parent_baton;
- struct item_baton *new_baton = make_baton(db->eb, NULL, path, pool);
- const char *copystuffs = "";
- if (copyfrom_path && SVN_IS_VALID_REVNUM(copyfrom_revision))
- copystuffs = apr_psprintf(pool,
- " (copied from %s:%ld)",
- copyfrom_path,
- copyfrom_revision);
- fprintf(stderr, " Adding : %s%s\n", path, copystuffs);
- *baton = new_baton;
- return (*db->eb->real_editor->add_file)(path, db->real_baton,
- copyfrom_path, copyfrom_revision,
- pool, &new_baton->real_baton);
-}
-
-static svn_error_t *
-delete_entry(const char *path,
- svn_revnum_t revision,
- void *parent_baton,
- apr_pool_t *pool)
-{
- struct item_baton *db = parent_baton;
- fprintf(stderr, " Deleting: %s\n", path);
- return (*db->eb->real_editor->delete_entry)(path, revision,
- db->real_baton, pool);
-}
-
-static svn_error_t *
-open_file(const char *path,
- void *parent_baton,
- svn_revnum_t base_revision,
- apr_pool_t *pool,
- void **baton)
-{
- struct item_baton *db = parent_baton;
- struct item_baton *new_baton = make_baton(db->eb, NULL, path, pool);
- fprintf(stderr, " Opening : %s\n", path);
- *baton = new_baton;
- return (*db->eb->real_editor->open_file)(path, db->real_baton,
- base_revision, pool,
- &new_baton->real_baton);
-}
-
-static svn_error_t *
-close_file(void *baton, const char *text_checksum, apr_pool_t *pool)
-{
- struct item_baton *fb = baton;
- fprintf(stderr, " Closing : %s\n", fb->path);
- return (*fb->eb->real_editor->close_file)(fb->real_baton,
- text_checksum, pool);
-}
-
-
-static svn_error_t *
-change_file_prop(void *file_baton,
- const char *name,
- const svn_string_t *value,
- apr_pool_t *pool)
-{
- struct item_baton *fb = file_baton;
- fprintf(stderr, " PropSet (%s=%s)\n", name, value ? value->data : "");
- return (*fb->eb->real_editor->change_file_prop)(fb->real_baton,
- name, value, pool);
-}
-
-static svn_error_t *
-apply_textdelta(void *file_baton,
- const char *base_checksum,
- apr_pool_t *pool,
- svn_txdelta_window_handler_t *handler,
- void **handler_baton)
-{
- struct item_baton *fb = file_baton;
- fprintf(stderr, " Transmitting text...\n");
- return (*fb->eb->real_editor->apply_textdelta)(fb->real_baton,
- base_checksum, pool,
- handler, handler_baton);
-}
-
-static svn_error_t *
-close_edit(void *edit_baton, apr_pool_t *pool)
-{
- struct edit_baton *eb = edit_baton;
- fprintf(stderr, "TEST EDIT COMPLETED\n");
- return (*eb->real_editor->close_edit)(eb->real_eb, pool);
-}
-
-static svn_error_t *
-add_directory(const char *path,
- void *parent_baton,
- const char *copyfrom_path,
- svn_revnum_t copyfrom_revision,
- apr_pool_t *pool,
- void **baton)
-{
- struct item_baton *db = parent_baton;
- struct item_baton *new_baton = make_baton(db->eb, NULL, path, pool);
- const char *copystuffs = "";
- if (copyfrom_path && SVN_IS_VALID_REVNUM(copyfrom_revision))
- copystuffs = apr_psprintf(pool,
- " (copied from %s:%ld)",
- copyfrom_path,
- copyfrom_revision);
- fprintf(stderr, " Adding : %s%s\n", path, copystuffs);
- *baton = new_baton;
- return (*db->eb->real_editor->add_directory)(path,
- db->real_baton,
- copyfrom_path,
- copyfrom_revision,
- pool,
- &new_baton->real_baton);
-}
-
-static svn_error_t *
-open_directory(const char *path,
- void *parent_baton,
- svn_revnum_t base_revision,
- apr_pool_t *pool,
- void **baton)
-{
- struct item_baton *db = parent_baton;
- struct item_baton *new_baton = make_baton(db->eb, NULL, path, pool);
- fprintf(stderr, " Opening : %s\n", path);
- *baton = new_baton;
- return (*db->eb->real_editor->open_directory)(path, db->real_baton,
- base_revision, pool,
- &new_baton->real_baton);
-}
-
-static svn_error_t *
-change_dir_prop(void *dir_baton,
- const char *name,
- const svn_string_t *value,
- apr_pool_t *pool)
-{
- struct item_baton *db = dir_baton;
- fprintf(stderr, " PropSet (%s=%s)\n", name, value ? value->data : "");
- return (*db->eb->real_editor->change_dir_prop)(db->real_baton,
- name, value, pool);
-}
-
-static svn_error_t *
-close_directory(void *baton, apr_pool_t *pool)
-{
- struct item_baton *db = baton;
- fprintf(stderr, " Closing : %s\n", db->path);
- return (*db->eb->real_editor->close_directory)(db->real_baton, pool);
-}
-
-static svn_error_t *
-abort_edit(void *edit_baton, apr_pool_t *pool)
-{
- struct edit_baton *eb = edit_baton;
- fprintf(stderr, "TEST EDIT ABORTED\n");
- return (*eb->real_editor->abort_edit)(eb->real_eb, pool);
-}
-
-static svn_error_t *
-get_test_editor(const svn_delta_editor_t **editor,
- void **edit_baton,
- const svn_delta_editor_t *real_editor,
- void *real_eb,
- const char *base_url,
- apr_pool_t *pool)
-{
- svn_delta_editor_t *ed = svn_delta_default_editor(pool);
- struct edit_baton *eb = apr_pcalloc(pool, sizeof(*eb));
-
- eb->path = apr_pstrdup(pool, base_url);
- eb->real_editor = real_editor;
- eb->real_eb = real_eb;
-
- /* We don't implement absent_file() or absent_directory() in this
- editor, because presumably commit would never send that. */
- ed->set_target_revision = set_target_revision;
- ed->open_root = open_root;
- ed->add_directory = add_directory;
- ed->open_directory = open_directory;
- ed->close_directory = close_directory;
- ed->add_file = add_file;
- ed->open_file = open_file;
- ed->close_file = close_file;
- ed->delete_entry = delete_entry;
- ed->apply_textdelta = apply_textdelta;
- ed->change_dir_prop = change_dir_prop;
- ed->change_file_prop = change_file_prop;
- ed->close_edit = close_edit;
- ed->abort_edit = abort_edit;
-
- *editor = ed;
- *edit_baton = eb;
- return SVN_NO_ERROR;
-}
-#endif /* SVN_CLIENT_COMMIT_DEBUG */
-
svn_error_t *
svn_client__get_log_msg(const char **log_msg,
const char **tmp_file,
@@ -2254,8 +2020,8 @@ svn_client__ensure_revprop_table(apr_hash_t **revprop_table_out,
{
new_revprop_table = apr_hash_make(pool);
}
- apr_hash_set(new_revprop_table, SVN_PROP_REVISION_LOG, APR_HASH_KEY_STRING,
- svn_string_create(log_msg, pool));
+ svn_hash_sets(new_revprop_table, SVN_PROP_REVISION_LOG,
+ svn_string_create(log_msg, pool));
*revprop_table_out = new_revprop_table;
return SVN_NO_ERROR;
}
diff --git a/subversion/libsvn_client/copy.c b/subversion/libsvn_client/copy.c
index 4efadd2..f204bbc 100644
--- a/subversion/libsvn_client/copy.c
+++ b/subversion/libsvn_client/copy.c
@@ -28,6 +28,7 @@
/*** Includes. ***/
#include <string.h>
+#include "svn_hash.h"
#include "svn_client.h"
#include "svn_error.h"
#include "svn_error_codes.h"
@@ -44,7 +45,9 @@
#include "svn_private_config.h"
#include "private/svn_wc_private.h"
+#include "private/svn_ra_private.h"
#include "private/svn_mergeinfo_private.h"
+#include "private/svn_client_private.h"
/*
@@ -68,71 +71,6 @@
/*** Code. ***/
-/* Obtain the implied mergeinfo and the existing mergeinfo of the
- source path, combine them and return the result in
- *TARGET_MERGEINFO. One of LOCAL_ABSPATH and SRC_URL must be valid,
- the other must be NULL. */
-static svn_error_t *
-calculate_target_mergeinfo(svn_ra_session_t *ra_session,
- apr_hash_t **target_mergeinfo,
- const char *local_abspath,
- const char *src_url,
- svn_revnum_t src_revnum,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool)
-{
- svn_boolean_t locally_added = FALSE;
- apr_hash_t *src_mergeinfo = NULL;
-
- SVN_ERR_ASSERT((local_abspath && !src_url) || (!local_abspath && src_url));
-
- /* If we have a schedule-add WC path (which was not copied from
- elsewhere), it doesn't have any repository mergeinfo, so don't
- bother checking. */
- if (local_abspath)
- {
- const char *repos_root_url;
- const char *repos_relpath;
-
- SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
-
- SVN_ERR(svn_wc__node_get_origin(NULL, &src_revnum,
- &repos_relpath, &repos_root_url,
- NULL, NULL,
- ctx->wc_ctx, local_abspath, FALSE,
- pool, pool));
-
- if (repos_relpath)
- {
- src_url = svn_path_url_add_component2(repos_root_url, repos_relpath,
- pool);
- }
- else
- locally_added = TRUE;
- }
-
- if (! locally_added)
- {
- /* Fetch any existing (explicit) mergeinfo. We'll temporarily
- reparent to the target URL here, just to keep the code simple.
- We could, as an alternative, first see if the target URL was a
- child of the session URL and use the relative "remainder",
- falling back to this reparenting as necessary. */
- const char *old_session_url = NULL;
- SVN_ERR(svn_client__ensure_ra_session_url(&old_session_url,
- ra_session, src_url, pool));
- SVN_ERR(svn_client__get_repos_mergeinfo(ra_session, &src_mergeinfo,
- "", src_revnum,
- svn_mergeinfo_inherited,
- TRUE, pool));
- if (old_session_url)
- SVN_ERR(svn_ra_reparent(ra_session, old_session_url, pool));
- }
-
- *target_mergeinfo = src_mergeinfo;
- return SVN_NO_ERROR;
-}
-
/* Extend the mergeinfo for the single WC path TARGET_WCPATH, adding
MERGEINFO to any mergeinfo pre-existing in the WC. */
static svn_error_t *
@@ -150,7 +88,7 @@ extend_wc_mergeinfo(const char *target_abspath,
/* Combine the provided mergeinfo with any mergeinfo from the WC. */
if (wc_mergeinfo && mergeinfo)
- SVN_ERR(svn_mergeinfo_merge(wc_mergeinfo, mergeinfo, pool));
+ SVN_ERR(svn_mergeinfo_merge2(wc_mergeinfo, mergeinfo, pool, pool));
else if (! wc_mergeinfo)
wc_mergeinfo = mergeinfo;
@@ -240,47 +178,42 @@ get_copy_pair_ancestors(const apr_array_header_t *copy_pairs,
}
-struct do_wc_to_wc_copies_with_write_lock_baton {
- const apr_array_header_t *copy_pairs;
- svn_client_ctx_t *ctx;
- const char *dst_parent;
-};
-
/* The guts of do_wc_to_wc_copies */
static svn_error_t *
-do_wc_to_wc_copies_with_write_lock(void *baton,
- apr_pool_t *result_pool,
+do_wc_to_wc_copies_with_write_lock(svn_boolean_t *timestamp_sleep,
+ const apr_array_header_t *copy_pairs,
+ const char *dst_parent,
+ svn_client_ctx_t *ctx,
apr_pool_t *scratch_pool)
{
- struct do_wc_to_wc_copies_with_write_lock_baton *b = baton;
int i;
apr_pool_t *iterpool = svn_pool_create(scratch_pool);
svn_error_t *err = SVN_NO_ERROR;
- for (i = 0; i < b->copy_pairs->nelts; i++)
+ for (i = 0; i < copy_pairs->nelts; i++)
{
const char *dst_abspath;
- svn_client__copy_pair_t *pair = APR_ARRAY_IDX(b->copy_pairs, i,
+ svn_client__copy_pair_t *pair = APR_ARRAY_IDX(copy_pairs, i,
svn_client__copy_pair_t *);
svn_pool_clear(iterpool);
/* Check for cancellation */
- if (b->ctx->cancel_func)
- SVN_ERR(b->ctx->cancel_func(b->ctx->cancel_baton));
+ if (ctx->cancel_func)
+ SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
/* Perform the copy */
dst_abspath = svn_dirent_join(pair->dst_parent_abspath, pair->base_name,
iterpool);
- err = svn_wc_copy3(b->ctx->wc_ctx, pair->src_abspath_or_url, dst_abspath,
+ *timestamp_sleep = TRUE;
+ err = svn_wc_copy3(ctx->wc_ctx, pair->src_abspath_or_url, dst_abspath,
FALSE /* metadata_only */,
- b->ctx->cancel_func, b->ctx->cancel_baton,
- b->ctx->notify_func2, b->ctx->notify_baton2, iterpool);
+ ctx->cancel_func, ctx->cancel_baton,
+ ctx->notify_func2, ctx->notify_baton2, iterpool);
if (err)
break;
}
svn_pool_destroy(iterpool);
- svn_io_sleep_for_timestamps(b->dst_parent, scratch_pool);
SVN_ERR(err);
return SVN_NO_ERROR;
}
@@ -288,12 +221,12 @@ do_wc_to_wc_copies_with_write_lock(void *baton,
/* Copy each COPY_PAIR->SRC into COPY_PAIR->DST. Use POOL for temporary
allocations. */
static svn_error_t *
-do_wc_to_wc_copies(const apr_array_header_t *copy_pairs,
+do_wc_to_wc_copies(svn_boolean_t *timestamp_sleep,
+ const apr_array_header_t *copy_pairs,
svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
const char *dst_parent, *dst_parent_abspath;
- struct do_wc_to_wc_copies_with_write_lock_baton baton;
SVN_ERR(get_copy_pair_ancestors(copy_pairs, NULL, &dst_parent, NULL, pool));
if (copy_pairs->nelts == 1)
@@ -301,59 +234,63 @@ do_wc_to_wc_copies(const apr_array_header_t *copy_pairs,
SVN_ERR(svn_dirent_get_absolute(&dst_parent_abspath, dst_parent, pool));
- baton.copy_pairs = copy_pairs;
- baton.ctx = ctx;
- baton.dst_parent = dst_parent;
- SVN_ERR(svn_wc__call_with_write_lock(do_wc_to_wc_copies_with_write_lock,
- &baton, ctx->wc_ctx, dst_parent_abspath,
- FALSE, pool, pool));
+ SVN_WC__CALL_WITH_WRITE_LOCK(
+ do_wc_to_wc_copies_with_write_lock(timestamp_sleep, copy_pairs, dst_parent,
+ ctx, pool),
+ ctx->wc_ctx, dst_parent_abspath, FALSE, pool);
return SVN_NO_ERROR;
}
-struct do_wc_to_wc_moves_with_locks_baton {
- svn_client_ctx_t *ctx;
- svn_client__copy_pair_t *pair;
- const char *dst_parent_abspath;
- svn_boolean_t lock_src;
- svn_boolean_t lock_dst;
-};
-
/* The locked bit of do_wc_to_wc_moves. */
static svn_error_t *
-do_wc_to_wc_moves_with_locks2(void *baton,
- apr_pool_t *result_pool,
+do_wc_to_wc_moves_with_locks2(svn_client__copy_pair_t *pair,
+ const char *dst_parent_abspath,
+ svn_boolean_t lock_src,
+ svn_boolean_t lock_dst,
+ svn_boolean_t allow_mixed_revisions,
+ svn_boolean_t metadata_only,
+ svn_client_ctx_t *ctx,
apr_pool_t *scratch_pool)
{
- struct do_wc_to_wc_moves_with_locks_baton *b = baton;
const char *dst_abspath;
- dst_abspath = svn_dirent_join(b->dst_parent_abspath, b->pair->base_name,
+ dst_abspath = svn_dirent_join(dst_parent_abspath, pair->base_name,
scratch_pool);
- SVN_ERR(svn_wc_move(b->ctx->wc_ctx, b->pair->src_abspath_or_url,
- dst_abspath, FALSE /* metadata_only */,
- b->ctx->cancel_func, b->ctx->cancel_baton,
- b->ctx->notify_func2, b->ctx->notify_baton2,
- scratch_pool));
+ SVN_ERR(svn_wc__move2(ctx->wc_ctx, pair->src_abspath_or_url,
+ dst_abspath, metadata_only,
+ allow_mixed_revisions,
+ ctx->cancel_func, ctx->cancel_baton,
+ ctx->notify_func2, ctx->notify_baton2,
+ scratch_pool));
return SVN_NO_ERROR;
}
/* Wrapper to add an optional second lock */
static svn_error_t *
-do_wc_to_wc_moves_with_locks1(void *baton,
- apr_pool_t *result_pool,
+do_wc_to_wc_moves_with_locks1(svn_client__copy_pair_t *pair,
+ const char *dst_parent_abspath,
+ svn_boolean_t lock_src,
+ svn_boolean_t lock_dst,
+ svn_boolean_t allow_mixed_revisions,
+ svn_boolean_t metadata_only,
+ svn_client_ctx_t *ctx,
apr_pool_t *scratch_pool)
{
- struct do_wc_to_wc_moves_with_locks_baton *b = baton;
-
- if (b->lock_dst)
- SVN_ERR(svn_wc__call_with_write_lock(do_wc_to_wc_moves_with_locks2, b,
- b->ctx->wc_ctx, b->dst_parent_abspath,
- FALSE, result_pool, scratch_pool));
+ if (lock_dst)
+ SVN_WC__CALL_WITH_WRITE_LOCK(
+ do_wc_to_wc_moves_with_locks2(pair, dst_parent_abspath, lock_src,
+ lock_dst, allow_mixed_revisions,
+ metadata_only,
+ ctx, scratch_pool),
+ ctx->wc_ctx, dst_parent_abspath, FALSE, scratch_pool);
else
- SVN_ERR(do_wc_to_wc_moves_with_locks2(b, result_pool, scratch_pool));
+ SVN_ERR(do_wc_to_wc_moves_with_locks2(pair, dst_parent_abspath, lock_src,
+ lock_dst, allow_mixed_revisions,
+ metadata_only,
+ ctx, scratch_pool));
return SVN_NO_ERROR;
}
@@ -361,8 +298,11 @@ do_wc_to_wc_moves_with_locks1(void *baton,
/* Move each COPY_PAIR->SRC into COPY_PAIR->DST, deleting COPY_PAIR->SRC
afterwards. Use POOL for temporary allocations. */
static svn_error_t *
-do_wc_to_wc_moves(const apr_array_header_t *copy_pairs,
+do_wc_to_wc_moves(svn_boolean_t *timestamp_sleep,
+ const apr_array_header_t *copy_pairs,
const char *dst_path,
+ svn_boolean_t allow_mixed_revisions,
+ svn_boolean_t metadata_only,
svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
@@ -373,7 +313,9 @@ do_wc_to_wc_moves(const apr_array_header_t *copy_pairs,
for (i = 0; i < copy_pairs->nelts; i++)
{
const char *src_parent_abspath;
- struct do_wc_to_wc_moves_with_locks_baton baton;
+ svn_boolean_t lock_src, lock_dst;
+ const char *src_wcroot_abspath;
+ const char *dst_wcroot_abspath;
svn_client__copy_pair_t *pair = APR_ARRAY_IDX(copy_pairs, i,
svn_client__copy_pair_t *);
@@ -386,6 +328,13 @@ do_wc_to_wc_moves(const apr_array_header_t *copy_pairs,
src_parent_abspath = svn_dirent_dirname(pair->src_abspath_or_url,
iterpool);
+ SVN_ERR(svn_wc__get_wcroot(&src_wcroot_abspath,
+ ctx->wc_ctx, src_parent_abspath,
+ iterpool, iterpool));
+ SVN_ERR(svn_wc__get_wcroot(&dst_wcroot_abspath,
+ ctx->wc_ctx, pair->dst_parent_abspath,
+ iterpool, iterpool));
+
/* We now need to lock the right combination of batons.
Four cases:
1) src_parent == dst_parent
@@ -394,56 +343,69 @@ do_wc_to_wc_moves(const apr_array_header_t *copy_pairs,
4) src_parent and dst_parent are disjoint
We can handle 1) as either 2) or 3) */
if (strcmp(src_parent_abspath, pair->dst_parent_abspath) == 0
- || svn_dirent_is_child(src_parent_abspath, pair->dst_parent_abspath,
- iterpool))
+ || (svn_dirent_is_child(src_parent_abspath, pair->dst_parent_abspath,
+ NULL)
+ && !svn_dirent_is_child(src_parent_abspath, dst_wcroot_abspath,
+ NULL)))
{
- baton.lock_src = TRUE;
- baton.lock_dst = FALSE;
+ lock_src = TRUE;
+ lock_dst = FALSE;
}
- else if (svn_dirent_is_child(pair->dst_parent_abspath, src_parent_abspath,
- iterpool))
+ else if (svn_dirent_is_child(pair->dst_parent_abspath,
+ src_parent_abspath, NULL)
+ && !svn_dirent_is_child(pair->dst_parent_abspath,
+ src_wcroot_abspath, NULL))
{
- baton.lock_src = FALSE;
- baton.lock_dst = TRUE;
+ lock_src = FALSE;
+ lock_dst = TRUE;
}
else
{
- baton.lock_src = TRUE;
- baton.lock_dst = TRUE;
+ lock_src = TRUE;
+ lock_dst = TRUE;
}
+ *timestamp_sleep = TRUE;
+
/* Perform the copy and then the delete. */
- baton.ctx = ctx;
- baton.pair = pair;
- baton.dst_parent_abspath = pair->dst_parent_abspath;
- if (baton.lock_src)
- SVN_ERR(svn_wc__call_with_write_lock(do_wc_to_wc_moves_with_locks1,
- &baton,
- ctx->wc_ctx, src_parent_abspath,
- FALSE, iterpool, iterpool));
+ if (lock_src)
+ SVN_WC__CALL_WITH_WRITE_LOCK(
+ do_wc_to_wc_moves_with_locks1(pair, pair->dst_parent_abspath,
+ lock_src, lock_dst,
+ allow_mixed_revisions,
+ metadata_only,
+ ctx, iterpool),
+ ctx->wc_ctx, src_parent_abspath,
+ FALSE, iterpool);
else
- SVN_ERR(do_wc_to_wc_moves_with_locks1(&baton, iterpool, iterpool));
+ SVN_ERR(do_wc_to_wc_moves_with_locks1(pair, pair->dst_parent_abspath,
+ lock_src, lock_dst,
+ allow_mixed_revisions,
+ metadata_only,
+ ctx, iterpool));
}
svn_pool_destroy(iterpool);
- svn_io_sleep_for_timestamps(dst_path, pool);
-
return svn_error_trace(err);
}
-
+/* Verify that the destinations stored in COPY_PAIRS are valid working copy
+ destinations and set pair->dst_parent_abspath and pair->base_name for each
+ item to the resulting location if they do */
static svn_error_t *
-verify_wc_srcs_and_dsts(const apr_array_header_t *copy_pairs,
- svn_boolean_t make_parents,
- svn_boolean_t is_move,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool)
+verify_wc_dsts(const apr_array_header_t *copy_pairs,
+ svn_boolean_t make_parents,
+ svn_boolean_t is_move,
+ svn_boolean_t metadata_only,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
int i;
- apr_pool_t *iterpool = svn_pool_create(pool);
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
- /* Check that all of our SRCs exist, and all the DSTs don't. */
+ /* Check that DST does not exist, but its parent does */
for (i = 0; i < copy_pairs->nelts; i++)
{
svn_client__copy_pair_t *pair = APR_ARRAY_IDX(copy_pairs, i,
@@ -452,22 +414,48 @@ verify_wc_srcs_and_dsts(const apr_array_header_t *copy_pairs,
svn_pool_clear(iterpool);
- /* Verify that SRC_PATH exists. */
- SVN_ERR(svn_io_check_path(pair->src_abspath_or_url, &pair->src_kind,
- iterpool));
- if (pair->src_kind == svn_node_none)
- return svn_error_createf(
- SVN_ERR_NODE_UNKNOWN_KIND, NULL,
- _("Path '%s' does not exist"),
- svn_dirent_local_style(pair->src_abspath_or_url, pool));
-
/* If DST_PATH does not exist, then its basename will become a new
file or dir added to its parent (possibly an implicit '.').
Else, just error out. */
- SVN_ERR(svn_io_check_path(pair->dst_abspath_or_url, &dst_kind,
+ SVN_ERR(svn_wc_read_kind2(&dst_kind, ctx->wc_ctx,
+ pair->dst_abspath_or_url,
+ FALSE /* show_deleted */,
+ TRUE /* show_hidden */,
iterpool));
if (dst_kind != svn_node_none)
{
+ svn_boolean_t is_excluded;
+ svn_boolean_t is_server_excluded;
+
+ SVN_ERR(svn_wc__node_is_not_present(NULL, &is_excluded,
+ &is_server_excluded, ctx->wc_ctx,
+ pair->dst_abspath_or_url, FALSE,
+ iterpool));
+
+ if (is_excluded || is_server_excluded)
+ {
+ return svn_error_createf(
+ SVN_ERR_WC_OBSTRUCTED_UPDATE,
+ NULL, _("Path '%s' exists, but is excluded"),
+ svn_dirent_local_style(pair->dst_abspath_or_url, iterpool));
+ }
+ else
+ return svn_error_createf(
+ SVN_ERR_ENTRY_EXISTS, NULL,
+ _("Path '%s' already exists"),
+ svn_dirent_local_style(pair->dst_abspath_or_url,
+ scratch_pool));
+ }
+
+ /* Check that there is no unversioned obstruction */
+ if (metadata_only)
+ dst_kind = svn_node_none;
+ else
+ SVN_ERR(svn_io_check_path(pair->dst_abspath_or_url, &dst_kind,
+ iterpool));
+
+ if (dst_kind != svn_node_none)
+ {
if (is_move
&& copy_pairs->nelts == 1
&& strcmp(svn_dirent_dirname(pair->src_abspath_or_url, iterpool),
@@ -483,7 +471,7 @@ verify_wc_srcs_and_dsts(const apr_array_header_t *copy_pairs,
SVN_ERR(svn_path_cstring_from_utf8(&dst,
pair->dst_abspath_or_url,
- pool));
+ scratch_pool));
apr_err = apr_filepath_merge(&dst_apr, NULL, dst,
APR_FILEPATH_TRUENAME, iterpool);
@@ -500,7 +488,7 @@ verify_wc_srcs_and_dsts(const apr_array_header_t *copy_pairs,
{
/* Ok, we have a single case only rename. Get out of here */
svn_dirent_split(&pair->dst_parent_abspath, &pair->base_name,
- pair->dst_abspath_or_url, pool);
+ pair->dst_abspath_or_url, result_pool);
svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
@@ -508,17 +496,20 @@ verify_wc_srcs_and_dsts(const apr_array_header_t *copy_pairs,
}
return svn_error_createf(
- SVN_ERR_ENTRY_EXISTS, NULL,
- _("Path '%s' already exists"),
- svn_dirent_local_style(pair->dst_abspath_or_url, pool));
+ SVN_ERR_ENTRY_EXISTS, NULL,
+ _("Path '%s' already exists as unversioned node"),
+ svn_dirent_local_style(pair->dst_abspath_or_url,
+ scratch_pool));
}
svn_dirent_split(&pair->dst_parent_abspath, &pair->base_name,
- pair->dst_abspath_or_url, pool);
+ pair->dst_abspath_or_url, result_pool);
/* Make sure the destination parent is a directory and produce a clear
error message if it is not. */
- SVN_ERR(svn_io_check_path(pair->dst_parent_abspath, &dst_parent_kind,
+ SVN_ERR(svn_wc_read_kind2(&dst_parent_kind,
+ ctx->wc_ctx, pair->dst_parent_abspath,
+ FALSE, TRUE,
iterpool));
if (make_parents && dst_parent_kind == svn_node_none)
{
@@ -527,11 +518,20 @@ verify_wc_srcs_and_dsts(const apr_array_header_t *copy_pairs,
}
else if (dst_parent_kind != svn_node_dir)
{
- return svn_error_createf(SVN_ERR_WC_NOT_WORKING_COPY, NULL,
+ return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
_("Path '%s' is not a directory"),
svn_dirent_local_style(
- pair->dst_parent_abspath, pool));
+ pair->dst_parent_abspath, scratch_pool));
}
+
+ SVN_ERR(svn_io_check_path(pair->dst_parent_abspath,
+ &dst_parent_kind, scratch_pool));
+
+ if (dst_parent_kind != svn_node_dir)
+ return svn_error_createf(SVN_ERR_WC_MISSING, NULL,
+ _("Path '%s' is not a directory"),
+ svn_dirent_local_style(
+ pair->dst_parent_abspath, scratch_pool));
}
svn_pool_destroy(iterpool);
@@ -539,6 +539,49 @@ verify_wc_srcs_and_dsts(const apr_array_header_t *copy_pairs,
return SVN_NO_ERROR;
}
+static svn_error_t *
+verify_wc_srcs_and_dsts(const apr_array_header_t *copy_pairs,
+ svn_boolean_t make_parents,
+ svn_boolean_t is_move,
+ svn_boolean_t metadata_only,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ int i;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+
+ /* Check that all of our SRCs exist. */
+ for (i = 0; i < copy_pairs->nelts; i++)
+ {
+ svn_boolean_t deleted_ok;
+ svn_client__copy_pair_t *pair = APR_ARRAY_IDX(copy_pairs, i,
+ svn_client__copy_pair_t *);
+ svn_pool_clear(iterpool);
+
+ deleted_ok = (pair->src_peg_revision.kind == svn_opt_revision_base
+ || pair->src_op_revision.kind == svn_opt_revision_base);
+
+ /* Verify that SRC_PATH exists. */
+ SVN_ERR(svn_wc_read_kind2(&pair->src_kind, ctx->wc_ctx,
+ pair->src_abspath_or_url,
+ deleted_ok, FALSE, iterpool));
+ if (pair->src_kind == svn_node_none)
+ return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
+ _("Path '%s' does not exist"),
+ svn_dirent_local_style(
+ pair->src_abspath_or_url,
+ scratch_pool));
+ }
+
+ SVN_ERR(verify_wc_dsts(copy_pairs, make_parents, is_move, metadata_only, ctx,
+ result_pool, iterpool));
+
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
/* Path-specific state used as part of path_driver_cb_baton. */
typedef struct path_driver_info_t
@@ -578,9 +621,7 @@ path_driver_cb_func(void **dir_baton,
{
struct path_driver_cb_baton *cb_baton = callback_baton;
svn_boolean_t do_delete = FALSE, do_add = FALSE;
- path_driver_info_t *path_info = apr_hash_get(cb_baton->action_hash,
- path,
- APR_HASH_KEY_STRING);
+ path_driver_info_t *path_info = svn_hash_gets(cb_baton->action_hash, path);
/* Initialize return value. */
*dir_baton = NULL;
@@ -761,8 +802,7 @@ repos_to_repos_copy(const apr_array_header_t *copy_pairs,
apr_hash_t *action_hash = apr_hash_make(pool);
apr_array_header_t *path_infos;
const char *top_url, *top_url_all, *top_url_dst;
- const char *message, *repos_root, *ignored_url;
- svn_revnum_t youngest = SVN_INVALID_REVNUM;
+ const char *message, *repos_root;
svn_ra_session_t *ra_session = NULL;
const svn_delta_editor_t *editor;
void *edit_baton;
@@ -777,10 +817,9 @@ repos_to_repos_copy(const apr_array_header_t *copy_pairs,
be verifying that every one of our copy source and destination
URLs is or is beneath this sucker's repository root URL as a form
of a cheap(ish) sanity check. */
- SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL,
- first_pair->src_abspath_or_url,
- NULL, NULL, FALSE, TRUE,
- ctx, pool));
+ SVN_ERR(svn_client_open_ra_session2(&ra_session,
+ first_pair->src_abspath_or_url, NULL,
+ ctx, pool, pool));
SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root, pool));
/* Verify that sources and destinations are all at or under
@@ -795,8 +834,6 @@ repos_to_repos_copy(const apr_array_header_t *copy_pairs,
svn_client__copy_pair_t *pair = APR_ARRAY_IDX(copy_pairs, i,
svn_client__copy_pair_t *);
apr_hash_t *mergeinfo;
- svn_opt_revision_t *src_rev, *ignored_rev, dead_end_rev;
- dead_end_rev.kind = svn_opt_revision_unspecified;
/* Are the source and destination URLs at or under REPOS_ROOT? */
if (! (svn_uri__is_ancestor(repos_root, pair->src_abspath_or_url)
@@ -806,34 +843,24 @@ repos_to_repos_copy(const apr_array_header_t *copy_pairs,
_("Source and destination URLs appear not to point to the "
"same repository."));
- /* Resolve revision keywords and such into real revision number,
- passing NULL for the path (to ensure error if trying to get a
- revision based on the working copy). */
- SVN_ERR(svn_client__get_revision_number(&pair->src_revnum, &youngest,
- ctx->wc_ctx, NULL,
- ra_session,
- &pair->src_op_revision, pool));
-
- /* Run the history function to get the source's URL in the
+ /* Run the history function to get the source's URL and revnum in the
operational revision. */
- SVN_ERR(svn_client__ensure_ra_session_url(&ignored_url, ra_session,
- pair->src_abspath_or_url,
- pool));
- SVN_ERR(svn_client__repos_locations(&pair->src_abspath_or_url, &src_rev,
- &ignored_url, &ignored_rev,
+ SVN_ERR(svn_ra_reparent(ra_session, pair->src_abspath_or_url, pool));
+ SVN_ERR(svn_client__repos_locations(&pair->src_abspath_or_url,
+ &pair->src_revnum,
+ NULL, NULL,
ra_session,
pair->src_abspath_or_url,
&pair->src_peg_revision,
- &pair->src_op_revision,
- &dead_end_rev, ctx, pool));
+ &pair->src_op_revision, NULL,
+ ctx, pool));
/* Go ahead and grab mergeinfo from the source, too. */
- SVN_ERR(svn_client__ensure_ra_session_url(&ignored_url, ra_session,
- pair->src_abspath_or_url,
- pool));
- SVN_ERR(calculate_target_mergeinfo(ra_session, &mergeinfo, NULL,
- pair->src_abspath_or_url,
- pair->src_revnum, ctx, pool));
+ SVN_ERR(svn_ra_reparent(ra_session, pair->src_abspath_or_url, pool));
+ SVN_ERR(svn_client__get_repos_mergeinfo(
+ &mergeinfo, ra_session,
+ pair->src_abspath_or_url, pair->src_revnum,
+ svn_mergeinfo_inherited, TRUE /*squelch_incapable*/, pool));
if (mergeinfo)
SVN_ERR(svn_mergeinfo_to_string(&info->mergeinfo, mergeinfo, pool));
@@ -895,16 +922,13 @@ repos_to_repos_copy(const apr_array_header_t *copy_pairs,
}
/* Point the RA session to our current TOP_URL. */
- SVN_ERR(svn_client__ensure_ra_session_url(&ignored_url, ra_session,
- top_url, pool));
+ SVN_ERR(svn_ra_reparent(ra_session, top_url, pool));
/* If we're allowed to create nonexistent parent directories of our
destinations, then make a list in NEW_DIRS of the parent
directories of the destination that don't yet exist. */
if (make_parents)
{
- const char *dir;
-
new_dirs = apr_array_make(pool, 0, sizeof(const char *));
/* If this is a move, TOP_URL is at least the common ancestor of
@@ -927,17 +951,17 @@ repos_to_repos_copy(const apr_array_header_t *copy_pairs,
svn copy --parents URL/src URL/dst
- where src exists and dst does not. The svn_uri_dirname()
- call above will produce a string equivalent to TOP_URL,
- which means svn_uri_is_child() will return NULL. In this
- case, do not try to add dst to the NEW_DIRS list since it
+ where src exists and dst does not. If the dirname of the
+ destination path is equal to TOP_URL,
+ do not try to add dst to the NEW_DIRS list since it
will be added to the commit items array later in this
function. */
- dir = svn_uri__is_child(
- top_url,
- svn_uri_dirname(first_pair->dst_abspath_or_url, pool),
- pool);
- if (dir)
+ const char *dir = svn_uri_skip_ancestor(
+ top_url,
+ svn_uri_dirname(first_pair->dst_abspath_or_url,
+ pool),
+ pool);
+ if (dir && *dir)
SVN_ERR(find_absent_parents1(ra_session, dir, new_dirs, pool));
}
/* If, however, this is *not* a move, TOP_URL only points to the
@@ -956,8 +980,9 @@ repos_to_repos_copy(const apr_array_header_t *copy_pairs,
for (i = 0; i < new_urls->nelts; i++)
{
const char *new_url = APR_ARRAY_IDX(new_urls, i, const char *);
- dir = svn_uri__is_child(top_url, new_url, pool);
- APR_ARRAY_PUSH(new_dirs, const char *) = dir ? dir : "";
+ const char *dir = svn_uri_skip_ancestor(top_url, new_url, pool);
+
+ APR_ARRAY_PUSH(new_dirs, const char *) = dir;
}
}
}
@@ -973,10 +998,12 @@ repos_to_repos_copy(const apr_array_header_t *copy_pairs,
svn_client__copy_pair_t *);
path_driver_info_t *info = APR_ARRAY_IDX(path_infos, i,
path_driver_info_t *);
+ const char *relpath = svn_uri_skip_ancestor(pair->dst_abspath_or_url,
+ pair->src_abspath_or_url,
+ pool);
if ((strcmp(pair->dst_abspath_or_url, repos_root) != 0)
- && (svn_uri__is_child(pair->dst_abspath_or_url,
- pair->src_abspath_or_url, pool) != NULL))
+ && (relpath != NULL && *relpath != '\0'))
{
info->resurrection = TRUE;
top_url = svn_uri_dirname(top_url, pool);
@@ -1000,21 +1027,15 @@ repos_to_repos_copy(const apr_array_header_t *copy_pairs,
svn_node_kind_t dst_kind;
const char *src_rel, *dst_rel;
- src_rel = svn_uri__is_child(top_url, pair->src_abspath_or_url, pool);
+ src_rel = svn_uri_skip_ancestor(top_url, pair->src_abspath_or_url, pool);
if (src_rel)
{
SVN_ERR(svn_ra_check_path(ra_session, src_rel, pair->src_revnum,
&info->src_kind, pool));
}
- else if (strcmp(pair->src_abspath_or_url, top_url) == 0)
- {
- src_rel = "";
- SVN_ERR(svn_ra_check_path(ra_session, src_rel, pair->src_revnum,
- &info->src_kind, pool));
- }
else
{
- const char *old_url = NULL;
+ const char *old_url;
src_rel = NULL;
SVN_ERR_ASSERT(! is_move);
@@ -1033,10 +1054,8 @@ repos_to_repos_copy(const apr_array_header_t *copy_pairs,
/* Figure out the basename that will result from this operation,
and ensure that we aren't trying to overwrite existing paths. */
- dst_rel = svn_uri__is_child(top_url, pair->dst_abspath_or_url, pool);
- if (! dst_rel)
- dst_rel = "";
- SVN_ERR(svn_ra_check_path(ra_session, dst_rel, youngest,
+ dst_rel = svn_uri_skip_ancestor(top_url, pair->dst_abspath_or_url, pool);
+ SVN_ERR(svn_ra_check_path(ra_session, dst_rel, SVN_INVALID_REVNUM,
&dst_kind, pool));
if (dst_kind != svn_node_none)
return svn_error_createf(SVN_ERR_FS_ALREADY_EXISTS, NULL,
@@ -1046,9 +1065,9 @@ repos_to_repos_copy(const apr_array_header_t *copy_pairs,
info->src_path = src_rel;
info->dst_path = dst_rel;
- apr_hash_set(action_hash, info->dst_path, APR_HASH_KEY_STRING, info);
+ svn_hash_sets(action_hash, info->dst_path, info);
if (is_move && (! info->resurrection))
- apr_hash_set(action_hash, info->src_path, APR_HASH_KEY_STRING, info);
+ svn_hash_sets(action_hash, info->src_path, info);
}
if (SVN_CLIENT__HAS_LOG_MSG_FUNC(ctx))
@@ -1080,14 +1099,16 @@ repos_to_repos_copy(const apr_array_header_t *copy_pairs,
path_driver_info_t *);
item = svn_client_commit_item3_create(pool);
- item->url = svn_path_url_add_component2(top_url, info->dst_path, pool);
+ item->url = svn_path_url_add_component2(top_url, info->dst_path,
+ pool);
item->state_flags = SVN_CLIENT_COMMIT_ITEM_ADD;
APR_ARRAY_PUSH(commit_items, svn_client_commit_item3_t *) = item;
if (is_move && (! info->resurrection))
{
item = apr_pcalloc(pool, sizeof(*item));
- item->url = svn_path_url_add_component2(top_url, info->src_path, pool);
+ item->url = svn_path_url_add_component2(top_url, info->src_path,
+ pool);
item->state_flags = SVN_CLIENT_COMMIT_ITEM_DELETE;
APR_ARRAY_PUSH(commit_items, svn_client_commit_item3_t *) = item;
}
@@ -1114,7 +1135,7 @@ repos_to_repos_copy(const apr_array_header_t *copy_pairs,
info->dir_add = TRUE;
APR_ARRAY_PUSH(paths, const char *) = relpath;
- apr_hash_set(action_hash, relpath, APR_HASH_KEY_STRING, info);
+ svn_hash_sets(action_hash, relpath, info);
}
}
@@ -1133,6 +1154,9 @@ repos_to_repos_copy(const apr_array_header_t *copy_pairs,
message, ctx, pool));
/* Fetch RA commit editor. */
+ SVN_ERR(svn_ra__register_editor_shim_callbacks(ra_session,
+ svn_client__get_shim_callbacks(ctx->wc_ctx,
+ NULL, pool)));
SVN_ERR(svn_ra_get_commit_editor3(ra_session, &editor, &edit_baton,
commit_revprops,
commit_callback,
@@ -1147,13 +1171,14 @@ repos_to_repos_copy(const apr_array_header_t *copy_pairs,
cb_baton.is_move = is_move;
/* Call the path-based editor driver. */
- err = svn_delta_path_driver(editor, edit_baton, youngest, paths,
- path_driver_cb_func, &cb_baton, pool);
+ err = svn_delta_path_driver2(editor, edit_baton, paths, TRUE,
+ path_driver_cb_func, &cb_baton, pool);
if (err)
{
/* At least try to abort the edit (and fs txn) before throwing err. */
- svn_error_clear(editor->abort_edit(edit_baton, pool));
- return svn_error_trace(err);
+ return svn_error_compose_create(
+ err,
+ editor->abort_edit(edit_baton, pool));
}
/* Close the edit. */
@@ -1196,7 +1221,8 @@ check_url_kind(void *baton,
/* ### Copy ...
* COMMIT_INFO_P is ...
- * COPY_PAIRS is ...
+ * COPY_PAIRS is ... such that each 'src_abspath_or_url' is a local abspath
+ * and each 'dst_abspath_or_url' is a URL.
* MAKE_PARENTS is ...
* REVPROP_TABLE is ...
* CTX is ... */
@@ -1207,7 +1233,7 @@ wc_to_repos_copy(const apr_array_header_t *copy_pairs,
svn_commit_callback2_t commit_callback,
void *commit_baton,
svn_client_ctx_t *ctx,
- apr_pool_t *pool)
+ apr_pool_t *scratch_pool)
{
const char *message;
const char *top_src_path, *top_dst_url;
@@ -1215,6 +1241,7 @@ wc_to_repos_copy(const apr_array_header_t *copy_pairs,
const char *top_src_abspath;
svn_ra_session_t *ra_session;
const svn_delta_editor_t *editor;
+ apr_hash_t *relpath_map = NULL;
void *edit_baton;
svn_client__committables_t *committables;
apr_array_header_t *commit_items;
@@ -1222,29 +1249,18 @@ wc_to_repos_copy(const apr_array_header_t *copy_pairs,
apr_array_header_t *new_dirs = NULL;
apr_hash_t *commit_revprops;
svn_client__copy_pair_t *first_pair;
+ apr_pool_t *session_pool = svn_pool_create(scratch_pool);
int i;
/* Find the common root of all the source paths */
- SVN_ERR(get_copy_pair_ancestors(copy_pairs, &top_src_path, NULL, NULL, pool));
+ SVN_ERR(get_copy_pair_ancestors(copy_pairs, &top_src_path, NULL, NULL,
+ scratch_pool));
/* Do we need to lock the working copy? 1.6 didn't take a write
lock, but what happens if the working copy changes during the copy
operation? */
- iterpool = svn_pool_create(pool);
-
- /* Verify that all the source paths exist, are versioned, etc.
- We'll do so by querying the base revisions of those things (which
- we'll need to know later anyway). */
- for (i = 0; i < copy_pairs->nelts; i++)
- {
- svn_client__copy_pair_t *pair = APR_ARRAY_IDX(copy_pairs, i,
- svn_client__copy_pair_t *);
- svn_pool_clear(iterpool);
-
- SVN_ERR(svn_wc__node_get_base_rev(&pair->src_revnum, ctx->wc_ctx,
- pair->src_abspath_or_url, iterpool));
- }
+ iterpool = svn_pool_create(scratch_pool);
/* Determine the longest common ancestor for the destinations, and open an RA
session to that location. */
@@ -1256,27 +1272,33 @@ wc_to_repos_copy(const apr_array_header_t *copy_pairs,
* It looks like the entire block of code hanging off this comment
* is redundant. */
first_pair = APR_ARRAY_IDX(copy_pairs, 0, svn_client__copy_pair_t *);
- top_dst_url = svn_uri_dirname(first_pair->dst_abspath_or_url, pool);
+ top_dst_url = svn_uri_dirname(first_pair->dst_abspath_or_url, scratch_pool);
for (i = 1; i < copy_pairs->nelts; i++)
{
svn_client__copy_pair_t *pair = APR_ARRAY_IDX(copy_pairs, i,
svn_client__copy_pair_t *);
top_dst_url = svn_uri_get_longest_ancestor(top_dst_url,
pair->dst_abspath_or_url,
- pool);
+ scratch_pool);
}
- SVN_ERR(svn_dirent_get_absolute(&top_src_abspath, top_src_path, pool));
+ SVN_ERR(svn_dirent_get_absolute(&top_src_abspath, top_src_path, scratch_pool));
+
+ /* Open a session to help while determining the exact targets */
SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL, top_dst_url,
- top_src_abspath, NULL, TRUE,
- TRUE, ctx, pool));
+ top_src_abspath, NULL,
+ FALSE /* write_dav_props */,
+ TRUE /* read_dav_props */,
+ ctx,
+ session_pool, session_pool));
/* If requested, determine the nearest existing parent of the destination,
and reparent the ra session there. */
if (make_parents)
{
- new_dirs = apr_array_make(pool, 0, sizeof(const char *));
- SVN_ERR(find_absent_parents2(ra_session, &top_dst_url, new_dirs, pool));
+ new_dirs = apr_array_make(scratch_pool, 0, sizeof(const char *));
+ SVN_ERR(find_absent_parents2(ra_session, &top_dst_url, new_dirs,
+ scratch_pool));
}
/* Figure out the basename that will result from each copy and check to make
@@ -1289,9 +1311,8 @@ wc_to_repos_copy(const apr_array_header_t *copy_pairs,
APR_ARRAY_IDX(copy_pairs, i, svn_client__copy_pair_t *);
svn_pool_clear(iterpool);
- dst_rel = svn_uri__is_child(top_dst_url,
- pair->dst_abspath_or_url,
- iterpool);
+ dst_rel = svn_uri_skip_ancestor(top_dst_url, pair->dst_abspath_or_url,
+ iterpool);
SVN_ERR(svn_ra_check_path(ra_session, dst_rel, SVN_INVALID_REVNUM,
&dst_kind, iterpool));
if (dst_kind != svn_node_none)
@@ -1308,7 +1329,8 @@ wc_to_repos_copy(const apr_array_header_t *copy_pairs,
mechanism used to acquire a log message. */
svn_client_commit_item3_t *item;
const char *tmp_file;
- commit_items = apr_array_make(pool, copy_pairs->nelts, sizeof(item));
+ commit_items = apr_array_make(scratch_pool, copy_pairs->nelts,
+ sizeof(item));
/* Add any intermediate directories to the message */
if (make_parents)
@@ -1317,7 +1339,7 @@ wc_to_repos_copy(const apr_array_header_t *copy_pairs,
{
const char *url = APR_ARRAY_IDX(new_dirs, i, const char *);
- item = svn_client_commit_item3_create(pool);
+ item = svn_client_commit_item3_create(scratch_pool);
item->url = url;
item->state_flags = SVN_CLIENT_COMMIT_ITEM_ADD;
APR_ARRAY_PUSH(commit_items, svn_client_commit_item3_t *) = item;
@@ -1329,28 +1351,26 @@ wc_to_repos_copy(const apr_array_header_t *copy_pairs,
svn_client__copy_pair_t *pair = APR_ARRAY_IDX(copy_pairs, i,
svn_client__copy_pair_t *);
- item = svn_client_commit_item3_create(pool);
+ item = svn_client_commit_item3_create(scratch_pool);
item->url = pair->dst_abspath_or_url;
item->state_flags = SVN_CLIENT_COMMIT_ITEM_ADD;
APR_ARRAY_PUSH(commit_items, svn_client_commit_item3_t *) = item;
}
SVN_ERR(svn_client__get_log_msg(&message, &tmp_file, commit_items,
- ctx, pool));
+ ctx, scratch_pool));
if (! message)
{
svn_pool_destroy(iterpool);
+ svn_pool_destroy(session_pool);
return SVN_NO_ERROR;
}
}
else
message = "";
- SVN_ERR(svn_client__ensure_revprop_table(&commit_revprops, revprop_table,
- message, ctx, pool));
-
cukb.session = ra_session;
- SVN_ERR(svn_ra_get_repos_root2(ra_session, &cukb.repos_root_url, pool));
+ SVN_ERR(svn_ra_get_repos_root2(ra_session, &cukb.repos_root_url, session_pool));
cukb.should_reparent = FALSE;
/* Crawl the working copy for commit items. */
@@ -1358,16 +1378,15 @@ wc_to_repos_copy(const apr_array_header_t *copy_pairs,
SVN_ERR(svn_client__get_copy_committables(&committables,
copy_pairs,
check_url_kind, &cukb,
- ctx, pool, pool));
+ ctx, scratch_pool, iterpool));
/* The committables are keyed by the repository root */
- commit_items = apr_hash_get(committables->by_repository,
- cukb.repos_root_url,
- APR_HASH_KEY_STRING);
+ commit_items = svn_hash_gets(committables->by_repository,
+ cukb.repos_root_url);
SVN_ERR_ASSERT(commit_items != NULL);
if (cukb.should_reparent)
- SVN_ERR(svn_ra_reparent(ra_session, top_dst_url, pool));
+ SVN_ERR(svn_ra_reparent(ra_session, top_dst_url, session_pool));
/* If we are creating intermediate directories, tack them onto the list
of committables. */
@@ -1378,10 +1397,10 @@ wc_to_repos_copy(const apr_array_header_t *copy_pairs,
const char *url = APR_ARRAY_IDX(new_dirs, i, const char *);
svn_client_commit_item3_t *item;
- item = svn_client_commit_item3_create(pool);
+ item = svn_client_commit_item3_create(scratch_pool);
item->url = url;
item->state_flags = SVN_CLIENT_COMMIT_ITEM_ADD;
- item->incoming_prop_changes = apr_array_make(pool, 1,
+ item->incoming_prop_changes = apr_array_make(scratch_pool, 1,
sizeof(svn_prop_t *));
APR_ARRAY_PUSH(commit_items, svn_client_commit_item3_t *) = item;
}
@@ -1397,22 +1416,32 @@ wc_to_repos_copy(const apr_array_header_t *copy_pairs,
svn_client__copy_pair_t *);
svn_client_commit_item3_t *item =
APR_ARRAY_IDX(commit_items, i, svn_client_commit_item3_t *);
+ svn_client__pathrev_t *src_origin;
svn_pool_clear(iterpool);
+ SVN_ERR(svn_client__wc_node_get_origin(&src_origin,
+ pair->src_abspath_or_url,
+ ctx, iterpool, iterpool));
+
/* Set the mergeinfo for the destination to the combined merge
info known to the WC and the repository. */
- item->outgoing_prop_changes = apr_array_make(pool, 1,
+ item->outgoing_prop_changes = apr_array_make(scratch_pool, 1,
sizeof(svn_prop_t *));
- SVN_ERR(calculate_target_mergeinfo(ra_session, &mergeinfo,
- pair->src_abspath_or_url,
- NULL, SVN_INVALID_REVNUM,
- ctx, iterpool));
+ /* Repository mergeinfo (or NULL if it's locally added)... */
+ if (src_origin)
+ SVN_ERR(svn_client__get_repos_mergeinfo(
+ &mergeinfo, ra_session, src_origin->url, src_origin->rev,
+ svn_mergeinfo_inherited, TRUE /*sqelch_inc.*/, iterpool));
+ else
+ mergeinfo = NULL;
+ /* ... and WC mergeinfo. */
SVN_ERR(svn_client__parse_mergeinfo(&wc_mergeinfo, ctx->wc_ctx,
pair->src_abspath_or_url,
iterpool, iterpool));
if (wc_mergeinfo && mergeinfo)
- SVN_ERR(svn_mergeinfo_merge(mergeinfo, wc_mergeinfo, iterpool));
+ SVN_ERR(svn_mergeinfo_merge2(mergeinfo, wc_mergeinfo, iterpool,
+ iterpool));
else if (! mergeinfo)
mergeinfo = wc_mergeinfo;
if (mergeinfo)
@@ -1437,32 +1466,63 @@ wc_to_repos_copy(const apr_array_header_t *copy_pairs,
/* Sort and condense our COMMIT_ITEMS. */
SVN_ERR(svn_client__condense_commit_items(&top_dst_url,
- commit_items, pool));
+ commit_items, scratch_pool));
+
+#ifdef ENABLE_EV2_SHIMS
+ if (commit_items)
+ {
+ relpath_map = apr_hash_make(pool);
+ for (i = 0; i < commit_items->nelts; i++)
+ {
+ svn_client_commit_item3_t *item = APR_ARRAY_IDX(commit_items, i,
+ svn_client_commit_item3_t *);
+ const char *relpath;
+
+ if (!item->path)
+ continue;
+
+ svn_pool_clear(iterpool);
+ SVN_ERR(svn_wc__node_get_origin(NULL, NULL, &relpath, NULL, NULL, NULL,
+ ctx->wc_ctx, item->path, FALSE,
+ scratch_pool, iterpool));
+ if (relpath)
+ svn_hash_sets(relpath_map, relpath, item->path);
+ }
+ }
+#endif
+
+ /* Close the initial session, to reopen a new session with commit handling */
+ svn_pool_clear(session_pool);
- /* Open an RA session to DST_URL. */
+ /* Open a new RA session to DST_URL. */
SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL, top_dst_url,
NULL, commit_items,
- FALSE, FALSE, ctx, pool));
+ FALSE, FALSE, ctx,
+ session_pool, session_pool));
+
+ SVN_ERR(svn_client__ensure_revprop_table(&commit_revprops, revprop_table,
+ message, ctx, session_pool));
/* Fetch RA commit editor. */
+ SVN_ERR(svn_ra__register_editor_shim_callbacks(ra_session,
+ svn_client__get_shim_callbacks(ctx->wc_ctx, relpath_map,
+ session_pool)));
SVN_ERR(svn_ra_get_commit_editor3(ra_session, &editor, &edit_baton,
commit_revprops,
commit_callback,
commit_baton, NULL,
TRUE, /* No lock tokens */
- pool));
+ session_pool));
/* Perform the commit. */
SVN_ERR_W(svn_client__do_commit(top_dst_url, commit_items,
editor, edit_baton,
0, /* ### any notify_path_offset needed? */
- NULL, NULL, ctx, pool, pool),
+ NULL, ctx, session_pool, session_pool),
_("Commit failed (details follow):"));
- /* Sleep to ensure timestamp integrity. */
- svn_io_sleep_for_timestamps(top_src_path, pool);
-
svn_pool_destroy(iterpool);
+ svn_pool_destroy(session_pool);
return SVN_NO_ERROR;
}
@@ -1501,7 +1561,8 @@ notification_adjust_func(void *baton,
Resolve PAIR->src_revnum to a real revision number if it isn't already. */
static svn_error_t *
-repos_to_wc_copy_single(svn_client__copy_pair_t *pair,
+repos_to_wc_copy_single(svn_boolean_t *timestamp_sleep,
+ svn_client__copy_pair_t *pair,
svn_boolean_t same_repositories,
svn_boolean_t ignore_externals,
svn_ra_session_t *ra_session,
@@ -1513,57 +1574,75 @@ repos_to_wc_copy_single(svn_client__copy_pair_t *pair,
SVN_ERR_ASSERT(svn_dirent_is_absolute(dst_abspath));
- if (pair->src_kind == svn_node_dir)
+ if (!same_repositories && ctx->notify_func2)
{
- svn_boolean_t sleep_needed = FALSE;
- const char *tmp_abspath;
-
- /* Find a temporary location in which to check out the copy source.
- * (This function is deprecated, but we intend to replace this whole
- * code path with something else.) */
- SVN_ERR(svn_wc_create_tmp_file2(NULL, &tmp_abspath, dst_abspath,
- svn_io_file_del_on_close, pool));
-
- /* Make a new checkout of the requested source. While doing so,
- * resolve pair->src_revnum to an actual revision number in case it
- * was until now 'invalid' meaning 'head'. Ask this function not to
- * sleep for timestamps, by passing a sleep_needed output param.
- * Send notifications for all nodes except the root node, and adjust
- * them to refer to the destination rather than this temporary path. */
- {
- svn_wc_notify_func2_t old_notify_func2 = ctx->notify_func2;
- void *old_notify_baton2 = ctx->notify_baton2;
- struct notification_adjust_baton nb;
- svn_error_t *err;
-
- nb.inner_func = ctx->notify_func2;
- nb.inner_baton = ctx->notify_baton2;
- nb.checkout_abspath = tmp_abspath;
- nb.final_abspath = dst_abspath;
- ctx->notify_func2 = notification_adjust_func;
- ctx->notify_baton2 = &nb;
-
- err = svn_client__checkout_internal(&pair->src_revnum,
- pair->src_original,
- tmp_abspath,
- &pair->src_peg_revision,
- &pair->src_op_revision,
- svn_depth_infinity,
- ignore_externals, FALSE,
- &sleep_needed, ctx, pool);
+ svn_wc_notify_t *notify;
+ notify = svn_wc_create_notify_url(
+ pair->src_abspath_or_url,
+ svn_wc_notify_foreign_copy_begin,
+ pool);
+ notify->kind = pair->src_kind;
+ ctx->notify_func2(ctx->notify_baton2, notify, pool);
- ctx->notify_func2 = old_notify_func2;
- ctx->notify_baton2 = old_notify_baton2;
+ /* Allow a theoretical cancel to get through. */
+ if (ctx->cancel_func)
+ SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
+ }
- SVN_ERR(err);
- }
+ if (pair->src_kind == svn_node_dir)
+ {
+ if (same_repositories)
+ {
+ svn_boolean_t sleep_needed = FALSE;
+ const char *tmpdir_abspath, *tmp_abspath;
+
+ /* Find a temporary location in which to check out the copy source. */
+ SVN_ERR(svn_wc__get_tmpdir(&tmpdir_abspath, ctx->wc_ctx, dst_abspath,
+ pool, pool));
+
+ SVN_ERR(svn_io_open_unique_file3(NULL, &tmp_abspath, tmpdir_abspath,
+ svn_io_file_del_on_close, pool, pool));
+
+ /* Make a new checkout of the requested source. While doing so,
+ * resolve pair->src_revnum to an actual revision number in case it
+ * was until now 'invalid' meaning 'head'. Ask this function not to
+ * sleep for timestamps, by passing a sleep_needed output param.
+ * Send notifications for all nodes except the root node, and adjust
+ * them to refer to the destination rather than this temporary path. */
+ {
+ svn_wc_notify_func2_t old_notify_func2 = ctx->notify_func2;
+ void *old_notify_baton2 = ctx->notify_baton2;
+ struct notification_adjust_baton nb;
+ svn_error_t *err;
+
+ nb.inner_func = ctx->notify_func2;
+ nb.inner_baton = ctx->notify_baton2;
+ nb.checkout_abspath = tmp_abspath;
+ nb.final_abspath = dst_abspath;
+ ctx->notify_func2 = notification_adjust_func;
+ ctx->notify_baton2 = &nb;
+
+ err = svn_client__checkout_internal(&pair->src_revnum,
+ pair->src_original,
+ tmp_abspath,
+ &pair->src_peg_revision,
+ &pair->src_op_revision,
+ svn_depth_infinity,
+ ignore_externals, FALSE,
+ &sleep_needed, ctx, pool);
+
+ ctx->notify_func2 = old_notify_func2;
+ ctx->notify_baton2 = old_notify_baton2;
+
+ SVN_ERR(err);
+ }
+
+ *timestamp_sleep = TRUE;
/* Schedule dst_path for addition in parent, with copy history.
Don't send any notification here.
Then remove the temporary checkout's .svn dir in preparation for
moving the rest of it into the final destination. */
- if (same_repositories)
- {
SVN_ERR(svn_wc_copy3(ctx->wc_ctx, tmp_abspath, dst_abspath,
TRUE /* metadata_only */,
ctx->cancel_func, ctx->cancel_baton,
@@ -1582,47 +1661,41 @@ repos_to_wc_copy_single(svn_client__copy_pair_t *pair,
}
else
{
- /* ### We want to schedule this as a simple add, or even better
- a copy from a foreign repos, but we don't yet have the
- WC APIs to do that, so we will just move the whole WC into
- place as a disjoint, nested WC. */
+ *timestamp_sleep = TRUE;
- /* Move the working copy to where it is expected. */
- SVN_ERR(svn_wc__rename_wc(ctx->wc_ctx, tmp_abspath, dst_abspath,
- pool));
-
- svn_io_sleep_for_timestamps(dst_abspath, pool);
+ SVN_ERR(svn_client__copy_foreign(pair->src_abspath_or_url,
+ dst_abspath,
+ &pair->src_peg_revision,
+ &pair->src_op_revision,
+ svn_depth_infinity,
+ FALSE /* make_parents */,
+ TRUE /* already_locked */,
+ ctx, pool));
- return svn_error_createf(
- SVN_ERR_UNSUPPORTED_FEATURE, NULL,
- _("Source URL '%s' is from foreign repository; "
- "leaving it as a disjoint WC"), pair->src_abspath_or_url);
+ return SVN_NO_ERROR;
}
} /* end directory case */
else if (pair->src_kind == svn_node_file)
{
- svn_stream_t *fstream;
- const char *new_text_path;
apr_hash_t *new_props;
const char *src_rel;
- svn_stream_t *new_base_contents;
-
- SVN_ERR(svn_stream_open_unique(&fstream, &new_text_path, NULL,
- svn_io_file_del_on_pool_cleanup, pool,
- pool));
+ svn_stream_t *new_base_contents = svn_stream_buffered(pool);
SVN_ERR(svn_ra_get_path_relative_to_session(ra_session, &src_rel,
pair->src_abspath_or_url,
pool));
/* Fetch the file content. While doing so, resolve pair->src_revnum
* to an actual revision number if it's 'invalid' meaning 'head'. */
- SVN_ERR(svn_ra_get_file(ra_session, src_rel, pair->src_revnum, fstream,
+ SVN_ERR(svn_ra_get_file(ra_session, src_rel, pair->src_revnum,
+ new_base_contents,
&pair->src_revnum, &new_props, pool));
- SVN_ERR(svn_stream_close(fstream));
- SVN_ERR(svn_stream_open_readonly(&new_base_contents, new_text_path,
- pool, pool));
+ if (new_props && ! same_repositories)
+ svn_hash_sets(new_props, SVN_PROP_MERGEINFO, NULL);
+
+ *timestamp_sleep = TRUE;
+
SVN_ERR(svn_wc_add_repos_file4(
ctx->wc_ctx, dst_abspath,
new_base_contents, NULL, new_props, NULL,
@@ -1634,9 +1707,10 @@ repos_to_wc_copy_single(svn_client__copy_pair_t *pair,
/* Record the implied mergeinfo (before the notification callback
is invoked for the root node). */
- SVN_ERR(calculate_target_mergeinfo(ra_session, &src_mergeinfo, NULL,
- pair->src_abspath_or_url,
- pair->src_revnum, ctx, pool));
+ SVN_ERR(svn_client__get_repos_mergeinfo(
+ &src_mergeinfo, ra_session,
+ pair->src_abspath_or_url, pair->src_revnum,
+ svn_mergeinfo_inherited, TRUE /*squelch_incapable*/, pool));
SVN_ERR(extend_wc_mergeinfo(dst_abspath, src_mergeinfo, ctx, pool));
/* Do our own notification for the root node, even if we could possibly
@@ -1651,13 +1725,12 @@ repos_to_wc_copy_single(svn_client__copy_pair_t *pair,
(*ctx->notify_func2)(ctx->notify_baton2, notify, pool);
}
- svn_io_sleep_for_timestamps(dst_abspath, pool);
-
return SVN_NO_ERROR;
}
-static svn_error_t*
-repos_to_wc_copy_locked(const apr_array_header_t *copy_pairs,
+static svn_error_t *
+repos_to_wc_copy_locked(svn_boolean_t *timestamp_sleep,
+ const apr_array_header_t *copy_pairs,
const char *top_dst_path,
svn_boolean_t ignore_externals,
svn_ra_session_t *ra_session,
@@ -1665,86 +1738,24 @@ repos_to_wc_copy_locked(const apr_array_header_t *copy_pairs,
apr_pool_t *scratch_pool)
{
int i;
- const char *src_uuid = NULL, *dst_uuid = NULL;
svn_boolean_t same_repositories;
apr_pool_t *iterpool = svn_pool_create(scratch_pool);
/* We've already checked for physical obstruction by a working file.
But there could also be logical obstruction by an entry whose
working file happens to be missing.*/
- for (i = 0; i < copy_pairs->nelts; i++)
- {
- svn_client__copy_pair_t *pair = APR_ARRAY_IDX(copy_pairs, i,
- svn_client__copy_pair_t *);
- svn_node_kind_t kind;
- svn_boolean_t is_excluded;
- svn_boolean_t is_server_excluded;
-
- svn_pool_clear(iterpool);
-
- SVN_ERR(svn_wc_read_kind(&kind, ctx->wc_ctx, pair->dst_abspath_or_url,
- FALSE, iterpool));
- if (kind == svn_node_none)
- continue;
-
- /* ### TODO(#2843): Rework these error report. Maybe we can
- ### simplify the conditions? */
-
- /* Hidden by client exclusion */
- SVN_ERR(svn_wc__node_is_status_excluded(&is_excluded, ctx->wc_ctx,
- pair->dst_abspath_or_url,
- iterpool));
- if (is_excluded)
- {
- return svn_error_createf
- (SVN_ERR_ENTRY_EXISTS,
- NULL, _("'%s' is already under version control"),
- svn_dirent_local_style(pair->dst_abspath_or_url, iterpool));
- }
-
- /* Hidden by server exclusion (not authorized) */
- SVN_ERR(svn_wc__node_is_status_server_excluded(&is_server_excluded,
- ctx->wc_ctx,
- pair->dst_abspath_or_url,
- iterpool));
- if (is_server_excluded)
- {
- return svn_error_createf
- (SVN_ERR_ENTRY_EXISTS,
- NULL, _("'%s' is already under version control"),
- svn_dirent_local_style(pair->dst_abspath_or_url, iterpool));
- }
-
- /* Working file missing to something other than being scheduled
- for addition or in "deleted" state. */
- if (kind != svn_node_dir)
- {
- svn_boolean_t is_deleted;
- svn_boolean_t is_not_present;
-
- SVN_ERR(svn_wc__node_is_status_deleted(&is_deleted, ctx->wc_ctx,
- pair->dst_abspath_or_url,
- iterpool));
- SVN_ERR(svn_wc__node_is_status_not_present(&is_not_present,
- ctx->wc_ctx,
- pair->dst_abspath_or_url,
- iterpool));
- if ((! is_deleted) && (! is_not_present))
- return svn_error_createf
- (SVN_ERR_WC_OBSTRUCTED_UPDATE, NULL,
- _("Entry for '%s' exists (though the working file is missing)"),
- svn_dirent_local_style(pair->dst_abspath_or_url, iterpool));
- }
- }
+ SVN_ERR(verify_wc_dsts(copy_pairs, FALSE, FALSE, FALSE /* metadata_only */,
+ ctx, scratch_pool, iterpool));
/* Decide whether the two repositories are the same or not. */
{
svn_error_t *src_err, *dst_err;
const char *parent;
const char *parent_abspath;
+ const char *src_uuid, *dst_uuid;
/* Get the repository uuid of SRC_URL */
- src_err = svn_ra_get_uuid2(ra_session, &src_uuid, scratch_pool);
+ src_err = svn_ra_get_uuid2(ra_session, &src_uuid, iterpool);
if (src_err && src_err->apr_err != SVN_ERR_RA_NO_REPOS_UUID)
return svn_error_trace(src_err);
@@ -1757,8 +1768,9 @@ repos_to_wc_copy_locked(const apr_array_header_t *copy_pairs,
parent = top_dst_path;
SVN_ERR(svn_dirent_get_absolute(&parent_abspath, parent, scratch_pool));
- dst_err = svn_client_uuid_from_path2(&dst_uuid, parent_abspath, ctx,
- scratch_pool, scratch_pool);
+ dst_err = svn_client_get_repos_root(NULL /* root_url */, &dst_uuid,
+ parent_abspath, ctx,
+ iterpool, iterpool);
if (dst_err && dst_err->apr_err != SVN_ERR_RA_NO_REPOS_UUID)
return dst_err;
@@ -1768,7 +1780,6 @@ repos_to_wc_copy_locked(const apr_array_header_t *copy_pairs,
copy-history is attempted. */
if (src_err || dst_err || (! src_uuid) || (! dst_uuid))
same_repositories = FALSE;
-
else
same_repositories = (strcmp(src_uuid, dst_uuid) == 0);
}
@@ -1782,7 +1793,8 @@ repos_to_wc_copy_locked(const apr_array_header_t *copy_pairs,
svn_pool_clear(iterpool);
- SVN_ERR(repos_to_wc_copy_single(APR_ARRAY_IDX(copy_pairs, i,
+ SVN_ERR(repos_to_wc_copy_single(timestamp_sleep,
+ APR_ARRAY_IDX(copy_pairs, i,
svn_client__copy_pair_t *),
same_repositories,
ignore_externals,
@@ -1793,31 +1805,9 @@ repos_to_wc_copy_locked(const apr_array_header_t *copy_pairs,
return SVN_NO_ERROR;
}
-struct repos_to_wc_copy_baton {
- const apr_array_header_t *copy_pairs;
- const char *top_dst_path;
- svn_boolean_t ignore_externals;
- svn_ra_session_t *ra_session;
- svn_client_ctx_t *ctx;
-};
-
-/* Implements svn_wc__with_write_lock_func_t. */
-static svn_error_t *
-repos_to_wc_copy_cb(void *baton,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- struct repos_to_wc_copy_baton *b = baton;
-
- SVN_ERR(repos_to_wc_copy_locked(b->copy_pairs, b->top_dst_path,
- b->ignore_externals, b->ra_session,
- b->ctx, scratch_pool));
-
- return SVN_NO_ERROR;
-}
-
static svn_error_t *
-repos_to_wc_copy(const apr_array_header_t *copy_pairs,
+repos_to_wc_copy(svn_boolean_t *timestamp_sleep,
+ const apr_array_header_t *copy_pairs,
svn_boolean_t make_parents,
svn_boolean_t ignore_externals,
svn_client_ctx_t *ctx,
@@ -1827,7 +1817,6 @@ repos_to_wc_copy(const apr_array_header_t *copy_pairs,
const char *top_src_url, *top_dst_path;
apr_pool_t *iterpool = svn_pool_create(pool);
const char *lock_abspath;
- struct repos_to_wc_copy_baton baton;
int i;
/* Get the real path for the source, based upon its peg revision. */
@@ -1835,19 +1824,15 @@ repos_to_wc_copy(const apr_array_header_t *copy_pairs,
{
svn_client__copy_pair_t *pair = APR_ARRAY_IDX(copy_pairs, i,
svn_client__copy_pair_t *);
- const char *src, *ignored_url;
- svn_opt_revision_t *new_rev, *ignored_rev, dead_end_rev;
+ const char *src;
svn_pool_clear(iterpool);
- dead_end_rev.kind = svn_opt_revision_unspecified;
- SVN_ERR(svn_client__repos_locations(&src, &new_rev,
- &ignored_url, &ignored_rev,
+ SVN_ERR(svn_client__repos_locations(&src, &pair->src_revnum, NULL, NULL,
NULL,
pair->src_abspath_or_url,
&pair->src_peg_revision,
- &pair->src_op_revision,
- &dead_end_rev,
+ &pair->src_op_revision, NULL,
ctx, iterpool));
pair->src_original = pair->src_abspath_or_url;
@@ -1866,21 +1851,8 @@ repos_to_wc_copy(const apr_array_header_t *copy_pairs,
/* Open a repository session to the longest common src ancestor. We do not
(yet) have a working copy, so we don't have a corresponding path and
tempfiles cannot go into the admin area. */
- SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL, top_src_url,
- NULL, NULL, FALSE, TRUE,
- ctx, pool));
-
- /* Pass null for the path, to ensure error if trying to get a
- revision based on the working copy. */
- for (i = 0; i < copy_pairs->nelts; i++)
- {
- svn_client__copy_pair_t *pair = APR_ARRAY_IDX(copy_pairs, i,
- svn_client__copy_pair_t *);
-
- SVN_ERR(svn_client__get_revision_number(&pair->src_revnum, NULL,
- ctx->wc_ctx, NULL, ra_session,
- &pair->src_op_revision, pool));
- }
+ SVN_ERR(svn_client_open_ra_session2(&ra_session, top_src_url, lock_abspath,
+ ctx, pool, pool));
/* Get the correct src path for the peg revision used, and verify that we
aren't overwriting an existing path. */
@@ -1943,15 +1915,11 @@ repos_to_wc_copy(const apr_array_header_t *copy_pairs,
}
svn_pool_destroy(iterpool);
- baton.copy_pairs = copy_pairs;
- baton.top_dst_path = top_dst_path;
- baton.ignore_externals = ignore_externals;
- baton.ra_session = ra_session;
- baton.ctx = ctx;
-
- SVN_ERR(svn_wc__call_with_write_lock(repos_to_wc_copy_cb, &baton,
- ctx->wc_ctx, lock_abspath,
- FALSE, pool, pool));
+ SVN_WC__CALL_WITH_WRITE_LOCK(
+ repos_to_wc_copy_locked(timestamp_sleep,
+ copy_pairs, top_dst_path, ignore_externals,
+ ra_session, ctx, pool),
+ ctx->wc_ctx, lock_abspath, FALSE, pool);
return SVN_NO_ERROR;
}
@@ -1959,11 +1927,21 @@ repos_to_wc_copy(const apr_array_header_t *copy_pairs,
((revision.kind != svn_opt_revision_unspecified) \
&& (revision.kind != svn_opt_revision_working))
-/* Perform all allocations in POOL. */
+/* ...
+ *
+ * Set *TIMESTAMP_SLEEP to TRUE if a sleep is required; otherwise do not
+ * change *TIMESTAMP_SLEEP. This output will be valid even if the
+ * function returns an error.
+ *
+ * Perform all allocations in POOL.
+ */
static svn_error_t *
-try_copy(const apr_array_header_t *sources,
+try_copy(svn_boolean_t *timestamp_sleep,
+ const apr_array_header_t *sources,
const char *dst_path_in,
svn_boolean_t is_move,
+ svn_boolean_t allow_mixed_revisions,
+ svn_boolean_t metadata_only,
svn_boolean_t make_parents,
svn_boolean_t ignore_externals,
const apr_hash_t *revprop_table,
@@ -2161,9 +2139,9 @@ try_copy(const apr_array_header_t *sources,
{
if (!srcs_are_urls)
{
- /* If we are doing a wc->* move, but with an operational revision
+ /* If we are doing a wc->* copy, but with an operational revision
other than the working copy revision, we are really doing a
- repo->* move, because we're going to need to get the rev from the
+ repo->* copy, because we're going to need to get the rev from the
repo. */
svn_boolean_t need_repos_op_rev = FALSE;
@@ -2249,14 +2227,22 @@ try_copy(const apr_array_header_t *sources,
if ((! srcs_are_urls) && (! dst_is_url))
{
SVN_ERR(verify_wc_srcs_and_dsts(copy_pairs, make_parents, is_move,
- ctx, pool));
+ metadata_only, ctx, pool, pool));
/* Copy or move all targets. */
if (is_move)
- return svn_error_trace(do_wc_to_wc_moves(copy_pairs, dst_path_in, ctx,
- pool));
+ return svn_error_trace(do_wc_to_wc_moves(timestamp_sleep,
+ copy_pairs, dst_path_in,
+ allow_mixed_revisions,
+ metadata_only,
+ ctx, pool));
else
- return svn_error_trace(do_wc_to_wc_copies(copy_pairs, ctx, pool));
+ {
+ /* We ignore these values, so assert the default value */
+ SVN_ERR_ASSERT(allow_mixed_revisions && !metadata_only);
+ return svn_error_trace(do_wc_to_wc_copies(timestamp_sleep,
+ copy_pairs, ctx, pool));
+ }
}
else if ((! srcs_are_urls) && (dst_is_url))
{
@@ -2267,7 +2253,8 @@ try_copy(const apr_array_header_t *sources,
else if ((srcs_are_urls) && (! dst_is_url))
{
return svn_error_trace(
- repos_to_wc_copy(copy_pairs, make_parents, ignore_externals,
+ repos_to_wc_copy(timestamp_sleep,
+ copy_pairs, make_parents, ignore_externals,
ctx, pool));
}
else
@@ -2295,14 +2282,18 @@ svn_client_copy6(const apr_array_header_t *sources,
apr_pool_t *pool)
{
svn_error_t *err;
+ svn_boolean_t timestamp_sleep = FALSE;
apr_pool_t *subpool = svn_pool_create(pool);
if (sources->nelts > 1 && !copy_as_child)
return svn_error_create(SVN_ERR_CLIENT_MULTIPLE_SOURCES_DISALLOWED,
NULL, NULL);
- err = try_copy(sources, dst_path,
+ err = try_copy(&timestamp_sleep,
+ sources, dst_path,
FALSE /* is_move */,
+ TRUE /* allow_mixed_revisions */,
+ FALSE /* metadata_only */,
make_parents,
ignore_externals,
revprop_table,
@@ -2327,13 +2318,16 @@ svn_client_copy6(const apr_array_header_t *sources,
src_basename = src_is_url ? svn_uri_basename(src_path, subpool)
: svn_dirent_basename(src_path, subpool);
+ dst_path
+ = dst_is_url ? svn_path_url_add_component2(dst_path, src_basename,
+ subpool)
+ : svn_dirent_join(dst_path, src_basename, subpool);
- err = try_copy(sources,
- dst_is_url
- ? svn_path_url_add_component2(dst_path, src_basename,
- subpool)
- : svn_dirent_join(dst_path, src_basename, subpool),
+ err = try_copy(&timestamp_sleep,
+ sources, dst_path,
FALSE /* is_move */,
+ TRUE /* allow_mixed_revisions */,
+ FALSE /* metadata_only */,
make_parents,
ignore_externals,
revprop_table,
@@ -2342,16 +2336,22 @@ svn_client_copy6(const apr_array_header_t *sources,
subpool);
}
+ /* Sleep if required. DST_PATH is not a URL in these cases. */
+ if (timestamp_sleep)
+ svn_io_sleep_for_timestamps(dst_path, subpool);
+
svn_pool_destroy(subpool);
return svn_error_trace(err);
}
svn_error_t *
-svn_client_move6(const apr_array_header_t *src_paths,
+svn_client_move7(const apr_array_header_t *src_paths,
const char *dst_path,
svn_boolean_t move_as_child,
svn_boolean_t make_parents,
+ svn_boolean_t allow_mixed_revisions,
+ svn_boolean_t metadata_only,
const apr_hash_t *revprop_table,
svn_commit_callback2_t commit_callback,
void *commit_baton,
@@ -2361,6 +2361,7 @@ svn_client_move6(const apr_array_header_t *src_paths,
const svn_opt_revision_t head_revision
= { svn_opt_revision_head, { 0 } };
svn_error_t *err;
+ svn_boolean_t timestamp_sleep = FALSE;
int i;
apr_pool_t *subpool = svn_pool_create(pool);
apr_array_header_t *sources = apr_array_make(pool, src_paths->nelts,
@@ -2383,10 +2384,13 @@ svn_client_move6(const apr_array_header_t *src_paths,
APR_ARRAY_PUSH(sources, svn_client_copy_source_t *) = copy_source;
}
- err = try_copy(sources, dst_path,
+ err = try_copy(&timestamp_sleep,
+ sources, dst_path,
TRUE /* is_move */,
+ allow_mixed_revisions,
+ metadata_only,
make_parents,
- FALSE,
+ FALSE /* ignore_externals */,
revprop_table,
commit_callback, commit_baton,
ctx,
@@ -2408,21 +2412,28 @@ svn_client_move6(const apr_array_header_t *src_paths,
src_basename = src_is_url ? svn_uri_basename(src_path, pool)
: svn_dirent_basename(src_path, pool);
+ dst_path
+ = dst_is_url ? svn_path_url_add_component2(dst_path, src_basename,
+ subpool)
+ : svn_dirent_join(dst_path, src_basename, subpool);
- err = try_copy(sources,
- dst_is_url
- ? svn_path_url_add_component2(dst_path,
- src_basename, pool)
- : svn_dirent_join(dst_path, src_basename, pool),
+ err = try_copy(&timestamp_sleep,
+ sources, dst_path,
TRUE /* is_move */,
+ allow_mixed_revisions,
+ metadata_only,
make_parents,
- FALSE,
+ FALSE /* ignore_externals */,
revprop_table,
commit_callback, commit_baton,
ctx,
subpool);
}
+ /* Sleep if required. DST_PATH is not a URL in these cases. */
+ if (timestamp_sleep)
+ svn_io_sleep_for_timestamps(dst_path, subpool);
+
svn_pool_destroy(subpool);
return svn_error_trace(err);
}
diff --git a/subversion/libsvn_client/copy_foreign.c b/subversion/libsvn_client/copy_foreign.c
new file mode 100644
index 0000000..8de8a5d
--- /dev/null
+++ b/subversion/libsvn_client/copy_foreign.c
@@ -0,0 +1,571 @@
+/*
+ * copy_foreign.c: copy from other repository support.
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+/* ==================================================================== */
+
+/*** Includes. ***/
+
+#include <string.h>
+#include "svn_hash.h"
+#include "svn_client.h"
+#include "svn_delta.h"
+#include "svn_dirent_uri.h"
+#include "svn_error.h"
+#include "svn_error_codes.h"
+#include "svn_path.h"
+#include "svn_pools.h"
+#include "svn_props.h"
+#include "svn_ra.h"
+#include "svn_wc.h"
+
+#include <apr_md5.h>
+
+#include "client.h"
+#include "private/svn_subr_private.h"
+#include "private/svn_wc_private.h"
+#include "svn_private_config.h"
+
+struct edit_baton_t
+{
+ apr_pool_t *pool;
+ const char *anchor_abspath;
+
+ svn_wc_context_t *wc_ctx;
+ svn_wc_notify_func2_t notify_func;
+ void *notify_baton;
+};
+
+struct dir_baton_t
+{
+ apr_pool_t *pool;
+
+ struct dir_baton_t *pb;
+ struct edit_baton_t *eb;
+
+ const char *local_abspath;
+
+ svn_boolean_t created;
+ apr_hash_t *properties;
+
+ int users;
+};
+
+/* svn_delta_editor_t function */
+static svn_error_t *
+edit_open(void *edit_baton,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ void **root_baton)
+{
+ struct edit_baton_t *eb = edit_baton;
+ apr_pool_t *dir_pool = svn_pool_create(eb->pool);
+ struct dir_baton_t *db = apr_pcalloc(dir_pool, sizeof(*db));
+
+ db->pool = dir_pool;
+ db->eb = eb;
+ db->users = 1;
+ db->local_abspath = eb->anchor_abspath;
+
+ SVN_ERR(svn_io_make_dir_recursively(eb->anchor_abspath, dir_pool));
+
+ *root_baton = db;
+
+ return SVN_NO_ERROR;
+}
+
+/* svn_delta_editor_t function */
+static svn_error_t *
+edit_close(void *edit_baton,
+ apr_pool_t *scratch_pool)
+{
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+dir_add(const char *path,
+ void *parent_baton,
+ const char *copyfrom_path,
+ svn_revnum_t copyfrom_revision,
+ apr_pool_t *result_pool,
+ void **child_baton)
+{
+ struct dir_baton_t *pb = parent_baton;
+ struct edit_baton_t *eb = pb->eb;
+ apr_pool_t *dir_pool = svn_pool_create(pb->pool);
+ struct dir_baton_t *db = apr_pcalloc(dir_pool, sizeof(*db));
+ svn_boolean_t under_root;
+
+ pb->users++;
+
+ db->pb = pb;
+ db->eb = pb->eb;
+ db->pool = dir_pool;
+ db->users = 1;
+
+ SVN_ERR(svn_dirent_is_under_root(&under_root, &db->local_abspath,
+ eb->anchor_abspath, path, db->pool));
+ if (! under_root)
+ {
+ return svn_error_createf(
+ SVN_ERR_WC_OBSTRUCTED_UPDATE, NULL,
+ _("Path '%s' is not in the working copy"),
+ svn_dirent_local_style(path, db->pool));
+ }
+
+ SVN_ERR(svn_io_make_dir_recursively(db->local_abspath, db->pool));
+
+ *child_baton = db;
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+dir_change_prop(void *dir_baton,
+ const char *name,
+ const svn_string_t *value,
+ apr_pool_t *scratch_pool)
+{
+ struct dir_baton_t *db = dir_baton;
+ struct edit_baton_t *eb = db->eb;
+ svn_prop_kind_t prop_kind;
+
+ prop_kind = svn_property_kind2(name);
+
+ if (prop_kind != svn_prop_regular_kind
+ || ! strcmp(name, SVN_PROP_MERGEINFO))
+ {
+ /* We can't handle DAV, ENTRY and merge specific props here */
+ return SVN_NO_ERROR;
+ }
+
+ if (! db->created)
+ {
+ /* We can still store them in the hash for immediate addition
+ with the svn_wc_add_from_disk2() call */
+ if (! db->properties)
+ db->properties = apr_hash_make(db->pool);
+
+ if (value != NULL)
+ svn_hash_sets(db->properties, apr_pstrdup(db->pool, name),
+ svn_string_dup(value, db->pool));
+ }
+ else
+ {
+ /* We have already notified for this directory, so don't do that again */
+ SVN_ERR(svn_wc_prop_set4(eb->wc_ctx, db->local_abspath, name, value,
+ svn_depth_empty, FALSE, NULL,
+ NULL, NULL, /* Cancelation */
+ NULL, NULL, /* Notification */
+ scratch_pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Releases the directory baton if there are no more users */
+static svn_error_t *
+maybe_done(struct dir_baton_t *db)
+{
+ db->users--;
+
+ if (db->users == 0)
+ {
+ struct dir_baton_t *pb = db->pb;
+
+ svn_pool_clear(db->pool);
+
+ if (pb)
+ SVN_ERR(maybe_done(pb));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+ensure_added(struct dir_baton_t *db,
+ apr_pool_t *scratch_pool)
+{
+ if (db->created)
+ return SVN_NO_ERROR;
+
+ if (db->pb)
+ SVN_ERR(ensure_added(db->pb, scratch_pool));
+
+ db->created = TRUE;
+
+ /* Add the directory with all the already collected properties */
+ SVN_ERR(svn_wc_add_from_disk2(db->eb->wc_ctx,
+ db->local_abspath,
+ db->properties,
+ db->eb->notify_func,
+ db->eb->notify_baton,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+dir_close(void *dir_baton,
+ apr_pool_t *scratch_pool)
+{
+ struct dir_baton_t *db = dir_baton;
+ /*struct edit_baton_t *eb = db->eb;*/
+
+ SVN_ERR(ensure_added(db, scratch_pool));
+
+ SVN_ERR(maybe_done(db));
+
+ return SVN_NO_ERROR;
+}
+
+struct file_baton_t
+{
+ apr_pool_t *pool;
+
+ struct dir_baton_t *pb;
+ struct edit_baton_t *eb;
+
+ const char *local_abspath;
+ apr_hash_t *properties;
+
+ svn_boolean_t writing;
+ unsigned char digest[APR_MD5_DIGESTSIZE];
+
+ const char *tmp_path;
+};
+
+static svn_error_t *
+file_add(const char *path,
+ void *parent_baton,
+ const char *copyfrom_path,
+ svn_revnum_t copyfrom_revision,
+ apr_pool_t *result_pool,
+ void **file_baton)
+{
+ struct dir_baton_t *pb = parent_baton;
+ struct edit_baton_t *eb = pb->eb;
+ apr_pool_t *file_pool = svn_pool_create(pb->pool);
+ struct file_baton_t *fb = apr_pcalloc(file_pool, sizeof(*fb));
+ svn_boolean_t under_root;
+
+ pb->users++;
+
+ fb->pool = file_pool;
+ fb->eb = eb;
+ fb->pb = pb;
+
+ SVN_ERR(svn_dirent_is_under_root(&under_root, &fb->local_abspath,
+ eb->anchor_abspath, path, fb->pool));
+ if (! under_root)
+ {
+ return svn_error_createf(
+ SVN_ERR_WC_OBSTRUCTED_UPDATE, NULL,
+ _("Path '%s' is not in the working copy"),
+ svn_dirent_local_style(path, fb->pool));
+ }
+
+ *file_baton = fb;
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+file_change_prop(void *file_baton,
+ const char *name,
+ const svn_string_t *value,
+ apr_pool_t *scratch_pool)
+{
+ struct file_baton_t *fb = file_baton;
+ svn_prop_kind_t prop_kind;
+
+ prop_kind = svn_property_kind2(name);
+
+ if (prop_kind != svn_prop_regular_kind
+ || ! strcmp(name, SVN_PROP_MERGEINFO))
+ {
+ /* We can't handle DAV, ENTRY and merge specific props here */
+ return SVN_NO_ERROR;
+ }
+
+ /* We store all properties in the hash for immediate addition
+ with the svn_wc_add_from_disk2() call */
+ if (! fb->properties)
+ fb->properties = apr_hash_make(fb->pool);
+
+ if (value != NULL)
+ svn_hash_sets(fb->properties, apr_pstrdup(fb->pool, name),
+ svn_string_dup(value, fb->pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+file_textdelta(void *file_baton,
+ const char *base_checksum,
+ apr_pool_t *result_pool,
+ svn_txdelta_window_handler_t *handler,
+ void **handler_baton)
+{
+ struct file_baton_t *fb = file_baton;
+ svn_stream_t *target;
+
+ SVN_ERR_ASSERT(! fb->writing);
+
+ SVN_ERR(svn_stream_open_writable(&target, fb->local_abspath, fb->pool,
+ fb->pool));
+
+ fb->writing = TRUE;
+ svn_txdelta_apply(svn_stream_empty(fb->pool) /* source */,
+ target,
+ fb->digest,
+ fb->local_abspath,
+ fb->pool,
+ /* Provide the handler directly */
+ handler, handler_baton);
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+file_close(void *file_baton,
+ const char *text_checksum,
+ apr_pool_t *scratch_pool)
+{
+ struct file_baton_t *fb = file_baton;
+ struct edit_baton_t *eb = fb->eb;
+ struct dir_baton_t *pb = fb->pb;
+
+ SVN_ERR(ensure_added(pb, fb->pool));
+
+ if (text_checksum)
+ {
+ svn_checksum_t *expected_checksum;
+ svn_checksum_t *actual_checksum;
+
+ SVN_ERR(svn_checksum_parse_hex(&expected_checksum, svn_checksum_md5,
+ text_checksum, fb->pool));
+ actual_checksum = svn_checksum__from_digest_md5(fb->digest, fb->pool);
+
+ if (! svn_checksum_match(expected_checksum, actual_checksum))
+ return svn_error_trace(
+ svn_checksum_mismatch_err(expected_checksum,
+ actual_checksum,
+ fb->pool,
+ _("Checksum mismatch for '%s'"),
+ svn_dirent_local_style(
+ fb->local_abspath,
+ fb->pool)));
+ }
+
+ SVN_ERR(svn_wc_add_from_disk2(eb->wc_ctx, fb->local_abspath, fb->properties,
+ eb->notify_func, eb->notify_baton,
+ fb->pool));
+
+ svn_pool_destroy(fb->pool);
+ SVN_ERR(maybe_done(pb));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+copy_foreign_dir(svn_ra_session_t *ra_session,
+ svn_client__pathrev_t *location,
+ svn_wc_context_t *wc_ctx,
+ const char *dst_abspath,
+ svn_depth_t depth,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton_t eb;
+ svn_delta_editor_t *editor = svn_delta_default_editor(scratch_pool);
+ const svn_delta_editor_t *wrapped_editor;
+ void *wrapped_baton;
+ const svn_ra_reporter3_t *reporter;
+ void *reporter_baton;
+
+ eb.pool = scratch_pool;
+ eb.anchor_abspath = dst_abspath;
+
+ eb.wc_ctx = wc_ctx;
+ eb.notify_func = notify_func;
+ eb.notify_baton = notify_baton;
+
+ editor->open_root = edit_open;
+ editor->close_edit = edit_close;
+
+ editor->add_directory = dir_add;
+ editor->change_dir_prop = dir_change_prop;
+ editor->close_directory = dir_close;
+
+ editor->add_file = file_add;
+ editor->change_file_prop = file_change_prop;
+ editor->apply_textdelta = file_textdelta;
+ editor->close_file = file_close;
+
+ SVN_ERR(svn_delta_get_cancellation_editor(cancel_func, cancel_baton,
+ editor, &eb,
+ &wrapped_editor, &wrapped_baton,
+ scratch_pool));
+
+ SVN_ERR(svn_ra_do_update3(ra_session, &reporter, &reporter_baton,
+ location->rev, "", svn_depth_infinity,
+ FALSE, FALSE, wrapped_editor, wrapped_baton,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(reporter->set_path(reporter_baton, "", location->rev, depth,
+ TRUE /* incomplete */,
+ NULL, scratch_pool));
+
+ SVN_ERR(reporter->finish_report(reporter_baton, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_client__copy_foreign(const char *url,
+ const char *dst_abspath,
+ svn_opt_revision_t *peg_revision,
+ svn_opt_revision_t *revision,
+ svn_depth_t depth,
+ svn_boolean_t make_parents,
+ svn_boolean_t already_locked,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
+{
+ svn_ra_session_t *ra_session;
+ svn_client__pathrev_t *loc;
+ svn_node_kind_t kind;
+ svn_node_kind_t wc_kind;
+ const char *dir_abspath;
+
+ SVN_ERR_ASSERT(svn_path_is_url(url));
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(dst_abspath));
+
+ /* Do we need to validate/update revisions? */
+
+ SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &loc,
+ url, NULL,
+ peg_revision,
+ revision, ctx,
+ scratch_pool));
+
+ SVN_ERR(svn_ra_check_path(ra_session, "", loc->rev, &kind, scratch_pool));
+
+ if (kind != svn_node_file && kind != svn_node_dir)
+ return svn_error_createf(
+ SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("'%s' is not a valid location inside a repository"),
+ url);
+
+ SVN_ERR(svn_wc_read_kind2(&wc_kind, ctx->wc_ctx, dst_abspath, FALSE, TRUE,
+ scratch_pool));
+
+ if (wc_kind != svn_node_none)
+ {
+ return svn_error_createf(
+ SVN_ERR_ENTRY_EXISTS, NULL,
+ _("'%s' is already under version control"),
+ svn_dirent_local_style(dst_abspath, scratch_pool));
+ }
+
+ dir_abspath = svn_dirent_dirname(dst_abspath, scratch_pool);
+ SVN_ERR(svn_wc_read_kind2(&wc_kind, ctx->wc_ctx, dir_abspath,
+ FALSE, FALSE, scratch_pool));
+
+ if (wc_kind == svn_node_none)
+ {
+ if (make_parents)
+ SVN_ERR(svn_client__make_local_parents(dir_abspath, make_parents, ctx,
+ scratch_pool));
+
+ SVN_ERR(svn_wc_read_kind2(&wc_kind, ctx->wc_ctx, dir_abspath,
+ FALSE, FALSE, scratch_pool));
+ }
+
+ if (wc_kind != svn_node_dir)
+ return svn_error_createf(
+ SVN_ERR_ENTRY_NOT_FOUND, NULL,
+ _("Can't add '%s', because no parent directory is found"),
+ svn_dirent_local_style(dst_abspath, scratch_pool));
+
+
+ if (kind == svn_node_file)
+ {
+ svn_stream_t *target;
+ apr_hash_t *props;
+ apr_hash_index_t *hi;
+ SVN_ERR(svn_stream_open_writable(&target, dst_abspath, scratch_pool,
+ scratch_pool));
+
+ SVN_ERR(svn_ra_get_file(ra_session, "", loc->rev, target, NULL, &props,
+ scratch_pool));
+
+ if (props != NULL)
+ for (hi = apr_hash_first(scratch_pool, props); hi;
+ hi = apr_hash_next(hi))
+ {
+ const char *name = svn__apr_hash_index_key(hi);
+
+ if (svn_property_kind2(name) != svn_prop_regular_kind
+ || ! strcmp(name, SVN_PROP_MERGEINFO))
+ {
+ /* We can't handle DAV, ENTRY and merge specific props here */
+ svn_hash_sets(props, name, NULL);
+ }
+ }
+
+ if (!already_locked)
+ SVN_WC__CALL_WITH_WRITE_LOCK(
+ svn_wc_add_from_disk2(ctx->wc_ctx, dst_abspath, props,
+ ctx->notify_func2, ctx->notify_baton2,
+ scratch_pool),
+ ctx->wc_ctx, dir_abspath, FALSE, scratch_pool);
+ else
+ SVN_ERR(svn_wc_add_from_disk2(ctx->wc_ctx, dst_abspath, props,
+ ctx->notify_func2, ctx->notify_baton2,
+ scratch_pool));
+ }
+ else
+ {
+ if (!already_locked)
+ SVN_WC__CALL_WITH_WRITE_LOCK(
+ copy_foreign_dir(ra_session, loc,
+ ctx->wc_ctx, dst_abspath,
+ depth,
+ ctx->notify_func2, ctx->notify_baton2,
+ ctx->cancel_func, ctx->cancel_baton,
+ scratch_pool),
+ ctx->wc_ctx, dir_abspath, FALSE, scratch_pool);
+ else
+ SVN_ERR(copy_foreign_dir(ra_session, loc,
+ ctx->wc_ctx, dst_abspath,
+ depth,
+ ctx->notify_func2, ctx->notify_baton2,
+ ctx->cancel_func, ctx->cancel_baton,
+ scratch_pool));
+ }
+
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/libsvn_client/ctx.c b/subversion/libsvn_client/ctx.c
index 38490fb..185b91e 100644
--- a/subversion/libsvn_client/ctx.c
+++ b/subversion/libsvn_client/ctx.c
@@ -28,6 +28,7 @@
/*** Includes. ***/
#include <apr_pools.h>
+#include "svn_hash.h"
#include "svn_client.h"
#include "svn_error.h"
@@ -76,9 +77,12 @@ call_conflict_func(svn_wc_conflict_result_t **result,
}
svn_error_t *
-svn_client_create_context(svn_client_ctx_t **ctx,
- apr_pool_t *pool)
+svn_client_create_context2(svn_client_ctx_t **ctx,
+ apr_hash_t *cfg_hash,
+ apr_pool_t *pool)
{
+ svn_config_t *cfg_config;
+
*ctx = apr_pcalloc(pool, sizeof(svn_client_ctx_t));
(*ctx)->notify_func2 = call_notify_func;
@@ -87,8 +91,22 @@ svn_client_create_context(svn_client_ctx_t **ctx,
(*ctx)->conflict_func2 = call_conflict_func;
(*ctx)->conflict_baton2 = *ctx;
- SVN_ERR(svn_wc_context_create(&(*ctx)->wc_ctx, NULL /* config */, pool,
+ (*ctx)->config = cfg_hash;
+
+ if (cfg_hash)
+ cfg_config = svn_hash_gets(cfg_hash, SVN_CONFIG_CATEGORY_CONFIG);
+ else
+ cfg_config = NULL;
+
+ SVN_ERR(svn_wc_context_create(&(*ctx)->wc_ctx, cfg_config, pool,
pool));
return SVN_NO_ERROR;
}
+
+svn_error_t *
+svn_client_create_context(svn_client_ctx_t **ctx,
+ apr_pool_t *pool)
+{
+ return svn_client_create_context2(ctx, NULL, pool);
+}
diff --git a/subversion/libsvn_client/delete.c b/subversion/libsvn_client/delete.c
index 4bf5d2c..803b70c 100644
--- a/subversion/libsvn_client/delete.c
+++ b/subversion/libsvn_client/delete.c
@@ -28,6 +28,7 @@
/*** Includes. ***/
#include <apr_file_io.h>
+#include "svn_hash.h"
#include "svn_types.h"
#include "svn_pools.h"
#include "svn_wc.h"
@@ -39,65 +40,82 @@
#include "private/svn_client_private.h"
#include "private/svn_wc_private.h"
+#include "private/svn_ra_private.h"
#include "svn_private_config.h"
/*** Code. ***/
+/* Baton for find_undeletables */
+struct can_delete_baton_t
+{
+ const char *root_abspath;
+ svn_boolean_t target_missing;
+};
-/* An svn_client_status_func_t callback function for finding
+/* An svn_wc_status_func4_t callback function for finding
status structures which are not safely deletable. */
static svn_error_t *
find_undeletables(void *baton,
- const char *path,
- const svn_client_status_t *status,
+ const char *local_abspath,
+ const svn_wc_status3_t *status,
apr_pool_t *pool)
{
+ if (status->node_status == svn_wc_status_missing)
+ {
+ struct can_delete_baton_t *cdt = baton;
+
+ if (strcmp(cdt->root_abspath, local_abspath) == 0)
+ cdt->target_missing = TRUE;
+ }
+
/* Check for error-ful states. */
if (status->node_status == svn_wc_status_obstructed)
return svn_error_createf(SVN_ERR_NODE_UNEXPECTED_KIND, NULL,
_("'%s' is in the way of the resource "
"actually under version control"),
- svn_dirent_local_style(path, pool));
+ svn_dirent_local_style(local_abspath, pool));
else if (! status->versioned)
return svn_error_createf(SVN_ERR_UNVERSIONED_RESOURCE, NULL,
_("'%s' is not under version control"),
- svn_dirent_local_style(path, pool));
-
- else if ((status->node_status != svn_wc_status_normal
- && status->node_status != svn_wc_status_deleted
- && status->node_status != svn_wc_status_missing)
- ||
- (status->prop_status != svn_wc_status_none
- && status->prop_status != svn_wc_status_normal))
+ svn_dirent_local_style(local_abspath, pool));
+ else if ((status->node_status == svn_wc_status_added
+ || status->node_status == svn_wc_status_replaced)
+ && status->text_status == svn_wc_status_normal
+ && (status->prop_status == svn_wc_status_normal
+ || status->prop_status == svn_wc_status_none))
+ {
+ /* Unmodified copy. Go ahead, remove it */
+ }
+ else if (status->node_status != svn_wc_status_normal
+ && status->node_status != svn_wc_status_deleted
+ && status->node_status != svn_wc_status_missing)
return svn_error_createf(SVN_ERR_CLIENT_MODIFIED, NULL,
_("'%s' has local modifications -- commit or "
"revert them first"),
- svn_dirent_local_style(path, pool));
+ svn_dirent_local_style(local_abspath, pool));
return SVN_NO_ERROR;
}
+/* Check whether LOCAL_ABSPATH is an external and raise an error if it is.
-svn_error_t *
-svn_client__can_delete(const char *path,
- svn_client_ctx_t *ctx,
- apr_pool_t *scratch_pool)
+ A file external should not be deleted since the file external is
+ implemented as a switched file and it would delete the file the
+ file external is switched to, which is not the behavior the user
+ would probably want.
+
+ A directory external should not be deleted since it is the root
+ of a different working copy. */
+static svn_error_t *
+check_external(const char *local_abspath,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
{
- svn_opt_revision_t revision;
svn_node_kind_t external_kind;
const char *defining_abspath;
- const char* local_abspath;
-
- revision.kind = svn_opt_revision_unspecified;
- SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, scratch_pool));
-
- /* A file external should not be deleted since the file external is
- implemented as a switched file and it would delete the file the
- file external is switched to, which is not the behavior the user
- would probably want. */
SVN_ERR(svn_wc__read_external_info(&external_kind, &defining_abspath, NULL,
NULL, NULL,
ctx->wc_ctx, local_abspath,
@@ -114,18 +132,50 @@ svn_client__can_delete(const char *path,
svn_dirent_local_style(defining_abspath,
scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+/* Verify that the path can be deleted without losing stuff,
+ i.e. ensure that there are no modified or unversioned resources
+ under PATH. This is similar to checking the output of the status
+ command. CTX is used for the client's config options. POOL is
+ used for all temporary allocations. */
+static svn_error_t *
+can_delete_node(svn_boolean_t *target_missing,
+ const char *local_abspath,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
+{
+ apr_array_header_t *ignores;
+ struct can_delete_baton_t cdt;
/* Use an infinite-depth status check to see if there's anything in
or under PATH which would make it unsafe for deletion. The
status callback function find_undeletables() makes the
determination, returning an error if it finds anything that shouldn't
be deleted. */
- return svn_error_trace(svn_client_status5(NULL, ctx, path, &revision,
- svn_depth_infinity, FALSE,
- FALSE, FALSE, FALSE, FALSE,
- NULL,
- find_undeletables, NULL,
- scratch_pool));
+
+ SVN_ERR(svn_wc_get_default_ignores(&ignores, ctx->config, scratch_pool));
+
+ cdt.root_abspath = local_abspath;
+ cdt.target_missing = FALSE;
+
+ SVN_ERR(svn_wc_walk_status(ctx->wc_ctx,
+ local_abspath,
+ svn_depth_infinity,
+ FALSE /* get_all */,
+ FALSE /* no_ignore */,
+ FALSE /* ignore_text_mod */,
+ ignores,
+ find_undeletables, &cdt,
+ ctx->cancel_func,
+ ctx->cancel_baton,
+ scratch_pool));
+
+ if (target_missing)
+ *target_missing = cdt.target_missing;
+
+ return SVN_NO_ERROR;
}
@@ -143,7 +193,7 @@ path_driver_cb_func(void **dir_baton,
static svn_error_t *
single_repos_delete(svn_ra_session_t *ra_session,
- const char *repos_root,
+ const char *base_uri,
const apr_array_header_t *relpaths,
const apr_hash_t *revprop_table,
svn_commit_callback2_t commit_callback,
@@ -171,7 +221,7 @@ single_repos_delete(svn_ra_session_t *ra_session,
const char *relpath = APR_ARRAY_IDX(relpaths, i, const char *);
item = svn_client_commit_item3_create(pool);
- item->url = svn_path_url_add_component2(repos_root, relpath, pool);
+ item->url = svn_path_url_add_component2(base_uri, relpath, pool);
item->state_flags = SVN_CLIENT_COMMIT_ITEM_DELETE;
APR_ARRAY_PUSH(commit_items, svn_client_commit_item3_t *) = item;
}
@@ -187,6 +237,9 @@ single_repos_delete(svn_ra_session_t *ra_session,
log_msg, ctx, pool));
/* Fetch RA commit editor */
+ SVN_ERR(svn_ra__register_editor_shim_callbacks(ra_session,
+ svn_client__get_shim_callbacks(ctx->wc_ctx,
+ NULL, pool)));
SVN_ERR(svn_ra_get_commit_editor3(ra_session, &editor, &edit_baton,
commit_revprops,
commit_callback,
@@ -195,9 +248,8 @@ single_repos_delete(svn_ra_session_t *ra_session,
pool));
/* Call the path-based editor driver. */
- err = svn_delta_path_driver(editor, edit_baton, SVN_INVALID_REVNUM,
- relpaths, path_driver_cb_func,
- (void *)editor, pool);
+ err = svn_delta_path_driver2(editor, edit_baton, relpaths, TRUE,
+ path_driver_cb_func, (void *)editor, pool);
if (err)
{
@@ -210,6 +262,16 @@ single_repos_delete(svn_ra_session_t *ra_session,
return svn_error_trace(editor->close_edit(edit_baton, pool));
}
+
+/* Structure for tracking remote delete targets associated with a
+ specific repository. */
+struct repos_deletables_t
+{
+ svn_ra_session_t *ra_session;
+ apr_array_header_t *target_uris;
+};
+
+
static svn_error_t *
delete_urls_multi_repos(const apr_array_header_t *uris,
const apr_hash_t *revprop_table,
@@ -218,97 +280,135 @@ delete_urls_multi_repos(const apr_array_header_t *uris,
svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
- apr_hash_t *sessions = apr_hash_make(pool);
- apr_hash_t *relpaths = apr_hash_make(pool);
+ apr_hash_t *deletables = apr_hash_make(pool);
+ apr_pool_t *iterpool;
apr_hash_index_t *hi;
int i;
- /* Create a hash of repos_root -> ra_session maps and repos_root -> relpaths
- maps, used to group the various targets. */
+ /* Create a hash mapping repository root URLs -> repos_deletables_t *
+ structures. */
for (i = 0; i < uris->nelts; i++)
{
const char *uri = APR_ARRAY_IDX(uris, i, const char *);
- svn_ra_session_t *ra_session = NULL;
- const char *repos_root = NULL;
- const char *repos_relpath = NULL;
- apr_array_header_t *relpaths_list;
+ struct repos_deletables_t *repos_deletables = NULL;
+ const char *repos_relpath;
svn_node_kind_t kind;
- for (hi = apr_hash_first(pool, sessions); hi; hi = apr_hash_next(hi))
+ for (hi = apr_hash_first(pool, deletables); hi; hi = apr_hash_next(hi))
{
- repos_root = svn__apr_hash_index_key(hi);
- repos_relpath = svn_uri__is_child(repos_root, uri, pool);
+ const char *repos_root = svn__apr_hash_index_key(hi);
+ repos_relpath = svn_uri_skip_ancestor(repos_root, uri, pool);
if (repos_relpath)
{
- /* Great! We've found another uri underneath this session,
- store it and move on. */
- ra_session = svn__apr_hash_index_val(hi);
- relpaths_list = apr_hash_get(relpaths, repos_root,
- APR_HASH_KEY_STRING);
-
- APR_ARRAY_PUSH(relpaths_list, const char *) = repos_relpath;
+ /* Great! We've found another URI underneath this
+ session. We'll pick out the related RA session for
+ use later, store the new target, and move on. */
+ repos_deletables = svn__apr_hash_index_val(hi);
+ APR_ARRAY_PUSH(repos_deletables->target_uris, const char *) =
+ apr_pstrdup(pool, uri);
break;
}
}
- if (!ra_session)
+ /* If we haven't created a repos_deletable structure for this
+ delete target, we need to do. That means opening up an RA
+ session and initializing its targets list. */
+ if (!repos_deletables)
{
- /* If we haven't found a session yet, we need to open one up.
- Note that we don't have a local directory, nor a place
- to put temp files. */
- SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL, uri,
- NULL, NULL, FALSE,
- TRUE, ctx, pool));
+ svn_ra_session_t *ra_session = NULL;
+ const char *repos_root;
+ apr_array_header_t *target_uris;
+
+ /* Open an RA session to (ultimately) the root of the
+ repository in which URI is found. */
+ SVN_ERR(svn_client_open_ra_session2(&ra_session, uri, NULL,
+ ctx, pool, pool));
SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root, pool));
SVN_ERR(svn_ra_reparent(ra_session, repos_root, pool));
-
- apr_hash_set(sessions, repos_root, APR_HASH_KEY_STRING, ra_session);
- repos_relpath = svn_uri__is_child(repos_root, uri, pool);
-
- relpaths_list = apr_array_make(pool, 1, sizeof(const char *));
- apr_hash_set(relpaths, repos_root, APR_HASH_KEY_STRING,
- relpaths_list);
- APR_ARRAY_PUSH(relpaths_list, const char *) = repos_relpath;
+ repos_relpath = svn_uri_skip_ancestor(repos_root, uri, pool);
+
+ /* Make a new relpaths list for this repository, and add
+ this URI's relpath to it. */
+ target_uris = apr_array_make(pool, 1, sizeof(const char *));
+ APR_ARRAY_PUSH(target_uris, const char *) = apr_pstrdup(pool, uri);
+
+ /* Build our repos_deletables_t item and stash it in the
+ hash. */
+ repos_deletables = apr_pcalloc(pool, sizeof(*repos_deletables));
+ repos_deletables->ra_session = ra_session;
+ repos_deletables->target_uris = target_uris;
+ svn_hash_sets(deletables, repos_root, repos_deletables);
}
- /* Check we identified a non-root relpath. Return an RA error
- code for 1.6 compatibility. */
+ /* If we get here, we should have been able to calculate a
+ repos_relpath for this URI. Let's make sure. (We return an
+ RA error code otherwise for 1.6 compatibility.) */
if (!repos_relpath || !*repos_relpath)
return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
"URL '%s' not within a repository", uri);
- /* Now, test to see if the thing actually exists. */
- SVN_ERR(svn_ra_check_path(ra_session, repos_relpath, SVN_INVALID_REVNUM,
- &kind, pool));
+ /* Now, test to see if the thing actually exists in HEAD. */
+ SVN_ERR(svn_ra_check_path(repos_deletables->ra_session, repos_relpath,
+ SVN_INVALID_REVNUM, &kind, pool));
if (kind == svn_node_none)
return svn_error_createf(SVN_ERR_FS_NOT_FOUND, NULL,
"URL '%s' does not exist", uri);
}
- /* At this point, we should have two hashs:
- SESSIONS maps repos_roots to ra_sessions.
- RELPATHS maps repos_roots to a list of decoded relpaths for that root.
-
- Now we iterate over the collection of sessions and do a commit for each
- one with the collected relpaths. */
- for (hi = apr_hash_first(pool, sessions); hi; hi = apr_hash_next(hi))
+ /* Now we iterate over the DELETABLES hash, issuing a commit for
+ each repository with its associated collected targets. */
+ iterpool = svn_pool_create(pool);
+ for (hi = apr_hash_first(pool, deletables); hi; hi = apr_hash_next(hi))
{
- const char *repos_root = svn__apr_hash_index_key(hi);
- svn_ra_session_t *ra_session = svn__apr_hash_index_val(hi);
- const apr_array_header_t *relpaths_list =
- apr_hash_get(relpaths, repos_root, APR_HASH_KEY_STRING);
+ struct repos_deletables_t *repos_deletables = svn__apr_hash_index_val(hi);
+ const char *base_uri;
+ apr_array_header_t *target_relpaths;
+
+ svn_pool_clear(iterpool);
+
+ /* We want to anchor the commit on the longest common path
+ across the targets for this one repository. If, however, one
+ of our targets is that longest common path, we need instead
+ anchor the commit on that path's immediate parent. Because
+ we're asking svn_uri_condense_targets() to remove
+ redundancies, this situation should be detectable by their
+ being returned either a) only a single, empty-path, target
+ relpath, or b) no target relpaths at all. */
+ SVN_ERR(svn_uri_condense_targets(&base_uri, &target_relpaths,
+ repos_deletables->target_uris,
+ TRUE, iterpool, iterpool));
+ SVN_ERR_ASSERT(!svn_path_is_empty(base_uri));
+ if (target_relpaths->nelts == 0)
+ {
+ const char *target_relpath;
- SVN_ERR(single_repos_delete(ra_session, repos_root, relpaths_list,
+ svn_uri_split(&base_uri, &target_relpath, base_uri, iterpool);
+ APR_ARRAY_PUSH(target_relpaths, const char *) = target_relpath;
+ }
+ else if ((target_relpaths->nelts == 1)
+ && (svn_path_is_empty(APR_ARRAY_IDX(target_relpaths, 0,
+ const char *))))
+ {
+ const char *target_relpath;
+
+ svn_uri_split(&base_uri, &target_relpath, base_uri, iterpool);
+ APR_ARRAY_IDX(target_relpaths, 0, const char *) = target_relpath;
+ }
+
+ SVN_ERR(svn_ra_reparent(repos_deletables->ra_session, base_uri, pool));
+ SVN_ERR(single_repos_delete(repos_deletables->ra_session, base_uri,
+ target_relpaths,
revprop_table, commit_callback,
- commit_baton, ctx, pool));
+ commit_baton, ctx, iterpool));
}
+ svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
svn_error_t *
-svn_client__wc_delete(const char *path,
+svn_client__wc_delete(const char *local_abspath,
svn_boolean_t force,
svn_boolean_t dry_run,
svn_boolean_t keep_local,
@@ -317,47 +417,80 @@ svn_client__wc_delete(const char *path,
svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
- const char *local_abspath;
+ svn_boolean_t target_missing = FALSE;
- SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, pool));
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+
+ SVN_ERR(check_external(local_abspath, ctx, pool));
if (!force && !keep_local)
/* Verify that there are no "awkward" files */
- SVN_ERR(svn_client__can_delete(local_abspath, ctx, pool));
+ SVN_ERR(can_delete_node(&target_missing, local_abspath, ctx, pool));
if (!dry_run)
/* Mark the entry for commit deletion and perform wc deletion */
return svn_error_trace(svn_wc_delete4(ctx->wc_ctx, local_abspath,
- keep_local, TRUE,
+ keep_local || target_missing
+ /*keep_local */,
+ TRUE /* delete_unversioned */,
ctx->cancel_func, ctx->cancel_baton,
notify_func, notify_baton, pool));
return SVN_NO_ERROR;
}
-/* Callback baton for delete_with_write_lock_baton. */
-struct delete_with_write_lock_baton
+svn_error_t *
+svn_client__wc_delete_many(const apr_array_header_t *targets,
+ svn_boolean_t force,
+ svn_boolean_t dry_run,
+ svn_boolean_t keep_local,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
{
- const char *path;
- svn_boolean_t force;
- svn_boolean_t keep_local;
- svn_client_ctx_t *ctx;
-};
+ int i;
+ svn_boolean_t has_non_missing = FALSE;
-/* Implements svn_wc__with_write_lock_func_t. */
-static svn_error_t *
-delete_with_write_lock_func(void *baton,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- struct delete_with_write_lock_baton *args = baton;
-
- /* Let the working copy library handle the PATH. */
- return svn_client__wc_delete(args->path, args->force,
- FALSE, args->keep_local,
- args->ctx->notify_func2,
- args->ctx->notify_baton2,
- args->ctx, scratch_pool);
+ for (i = 0; i < targets->nelts; i++)
+ {
+ const char *local_abspath = APR_ARRAY_IDX(targets, i, const char *);
+
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+
+ SVN_ERR(check_external(local_abspath, ctx, pool));
+
+ if (!force && !keep_local)
+ {
+ svn_boolean_t missing;
+ /* Verify that there are no "awkward" files */
+
+ SVN_ERR(can_delete_node(&missing, local_abspath, ctx, pool));
+
+ if (! missing)
+ has_non_missing = TRUE;
+ }
+ else
+ has_non_missing = TRUE;
+ }
+
+ if (!dry_run)
+ {
+ /* Mark the entry for commit deletion and perform wc deletion */
+
+ /* If none of the targets exists, pass keep local TRUE, to avoid
+ deleting case-different files. Detecting this in the generic case
+ from the delete code is expensive */
+ return svn_error_trace(svn_wc__delete_many(ctx->wc_ctx, targets,
+ keep_local || !has_non_missing,
+ TRUE /* delete_unversioned_target */,
+ ctx->cancel_func,
+ ctx->cancel_baton,
+ notify_func, notify_baton,
+ pool));
+ }
+
+ return SVN_NO_ERROR;
}
svn_error_t *
@@ -385,32 +518,76 @@ svn_client_delete4(const apr_array_header_t *paths,
}
else
{
- apr_pool_t *subpool = svn_pool_create(pool);
+ const char *local_abspath;
+ apr_hash_t *wcroots;
+ apr_hash_index_t *hi;
int i;
+ int j;
+ apr_pool_t *iterpool;
+ svn_boolean_t is_new_target;
+ /* Build a map of wcroots and targets within them. */
+ wcroots = apr_hash_make(pool);
+ iterpool = svn_pool_create(pool);
for (i = 0; i < paths->nelts; i++)
{
- struct delete_with_write_lock_baton dwwlb;
- const char *path = APR_ARRAY_IDX(paths, i, const char *);
- const char *local_abspath;
+ const char *wcroot_abspath;
+ apr_array_header_t *targets;
- svn_pool_clear(subpool);
+ svn_pool_clear(iterpool);
/* See if the user wants us to stop. */
if (ctx->cancel_func)
SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
- SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, subpool));
- dwwlb.path = path;
- dwwlb.force = force;
- dwwlb.keep_local = keep_local;
- dwwlb.ctx = ctx;
- SVN_ERR(svn_wc__call_with_write_lock(delete_with_write_lock_func,
- &dwwlb, ctx->wc_ctx,
- local_abspath, TRUE,
- pool, subpool));
+ SVN_ERR(svn_dirent_get_absolute(&local_abspath,
+ APR_ARRAY_IDX(paths, i,
+ const char *),
+ pool));
+ SVN_ERR(svn_wc__get_wcroot(&wcroot_abspath, ctx->wc_ctx,
+ local_abspath, pool, iterpool));
+ targets = svn_hash_gets(wcroots, wcroot_abspath);
+ if (targets == NULL)
+ {
+ targets = apr_array_make(pool, 1, sizeof(const char *));
+ svn_hash_sets(wcroots, wcroot_abspath, targets);
+ }
+
+ /* Make sure targets are unique. */
+ is_new_target = TRUE;
+ for (j = 0; j < targets->nelts; j++)
+ {
+ if (strcmp(APR_ARRAY_IDX(targets, j, const char *),
+ local_abspath) == 0)
+ {
+ is_new_target = FALSE;
+ break;
+ }
+ }
+
+ if (is_new_target)
+ APR_ARRAY_PUSH(targets, const char *) = local_abspath;
+ }
+
+ /* Delete the targets from each working copy in turn. */
+ for (hi = apr_hash_first(pool, wcroots); hi; hi = apr_hash_next(hi))
+ {
+ const char *root_abspath;
+ const apr_array_header_t *targets = svn__apr_hash_index_val(hi);
+
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(svn_dirent_condense_targets(&root_abspath, NULL, targets,
+ FALSE, iterpool, iterpool));
+
+ SVN_WC__CALL_WITH_WRITE_LOCK(
+ svn_client__wc_delete_many(targets, force, FALSE, keep_local,
+ ctx->notify_func2, ctx->notify_baton2,
+ ctx, iterpool),
+ ctx->wc_ctx, root_abspath, TRUE /* lock_anchor */,
+ iterpool);
}
- svn_pool_destroy(subpool);
+ svn_pool_destroy(iterpool);
}
return SVN_NO_ERROR;
diff --git a/subversion/libsvn_client/deprecated.c b/subversion/libsvn_client/deprecated.c
index 5c46725..a67a69b 100644
--- a/subversion/libsvn_client/deprecated.c
+++ b/subversion/libsvn_client/deprecated.c
@@ -36,13 +36,16 @@
#include "svn_client.h"
#include "svn_path.h"
#include "svn_compat.h"
+#include "svn_hash.h"
#include "svn_props.h"
#include "svn_utf.h"
#include "svn_string.h"
+#include "svn_pools.h"
#include "client.h"
#include "mergeinfo.h"
+#include "private/svn_opt_private.h"
#include "private/svn_wc_private.h"
#include "svn_private_config.h"
@@ -76,6 +79,19 @@ capture_commit_info(const svn_commit_info_t *commit_info,
/*** From add.c ***/
svn_error_t *
+svn_client_add4(const char *path,
+ svn_depth_t depth,
+ svn_boolean_t force,
+ svn_boolean_t no_ignore,
+ svn_boolean_t add_parents,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ return svn_client_add5(path, depth, force, no_ignore, FALSE, add_parents,
+ ctx, pool);
+}
+
+svn_error_t *
svn_client_add3(const char *path,
svn_boolean_t recursive,
svn_boolean_t force,
@@ -384,6 +400,27 @@ svn_client_args_to_target_array(apr_array_header_t **targets_p,
/*** From commit.c ***/
svn_error_t *
+svn_client_import4(const char *path,
+ const char *url,
+ svn_depth_t depth,
+ svn_boolean_t no_ignore,
+ svn_boolean_t ignore_unknown_node_types,
+ const apr_hash_t *revprop_table,
+ svn_commit_callback2_t commit_callback,
+ void *commit_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ return svn_error_trace(svn_client_import5(path, url, depth, no_ignore,
+ FALSE, ignore_unknown_node_types,
+ revprop_table,
+ NULL, NULL,
+ commit_callback, commit_baton,
+ ctx, pool));
+}
+
+
+svn_error_t *
svn_client_import3(svn_commit_info_t **commit_info_p,
const char *path,
const char *url,
@@ -476,6 +513,26 @@ downgrade_commit_copied_notify_func(void *baton,
b->orig_notify_func2(b->orig_notify_baton2, notify, pool);
}
+svn_error_t *
+svn_client_commit5(const apr_array_header_t *targets,
+ svn_depth_t depth,
+ svn_boolean_t keep_locks,
+ svn_boolean_t keep_changelists,
+ svn_boolean_t commit_as_operations,
+ const apr_array_header_t *changelists,
+ const apr_hash_t *revprop_table,
+ svn_commit_callback2_t commit_callback,
+ void *commit_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ return svn_client_commit6(targets, depth, keep_locks, keep_changelists,
+ commit_as_operations,
+ FALSE, /* include_file_externals */
+ FALSE, /* include_dir_externals */
+ changelists, revprop_table, commit_callback,
+ commit_baton, ctx, pool);
+}
svn_error_t *
svn_client_commit4(svn_commit_info_t **commit_info_p,
@@ -676,6 +733,26 @@ svn_client_copy(svn_client_commit_info_t **commit_info_p,
}
svn_error_t *
+svn_client_move6(const apr_array_header_t *src_paths,
+ const char *dst_path,
+ svn_boolean_t move_as_child,
+ svn_boolean_t make_parents,
+ const apr_hash_t *revprop_table,
+ svn_commit_callback2_t commit_callback,
+ void *commit_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ return svn_error_trace(svn_client_move7(src_paths, dst_path,
+ move_as_child, make_parents,
+ TRUE /* allow_mixed_revisions */,
+ FALSE /* metadata_only */,
+ revprop_table,
+ commit_callback, commit_baton,
+ ctx, pool));
+}
+
+svn_error_t *
svn_client_move5(svn_commit_info_t **commit_info_p,
const apr_array_header_t *src_paths,
const char *dst_path,
@@ -837,6 +914,39 @@ svn_client_delete(svn_client_commit_info_t **commit_info_p,
/*** From diff.c ***/
svn_error_t *
+svn_client_diff5(const apr_array_header_t *diff_options,
+ const char *path1,
+ const svn_opt_revision_t *revision1,
+ const char *path2,
+ const svn_opt_revision_t *revision2,
+ const char *relative_to_dir,
+ svn_depth_t depth,
+ svn_boolean_t ignore_ancestry,
+ svn_boolean_t no_diff_deleted,
+ svn_boolean_t show_copies_as_adds,
+ svn_boolean_t ignore_content_type,
+ svn_boolean_t use_git_diff_format,
+ const char *header_encoding,
+ apr_file_t *outfile,
+ apr_file_t *errfile,
+ const apr_array_header_t *changelists,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ svn_stream_t *outstream = svn_stream_from_aprfile2(outfile, TRUE, pool);
+ svn_stream_t *errstream = svn_stream_from_aprfile2(errfile, TRUE, pool);
+
+ return svn_client_diff6(diff_options, path1, revision1, path2,
+ revision2, relative_to_dir, depth,
+ ignore_ancestry, FALSE /* no_diff_added */,
+ no_diff_deleted, show_copies_as_adds,
+ ignore_content_type, FALSE /* ignore_properties */,
+ FALSE /* properties_only */, use_git_diff_format,
+ header_encoding,
+ outstream, errstream, changelists, ctx, pool);
+}
+
+svn_error_t *
svn_client_diff4(const apr_array_header_t *options,
const char *path1,
const svn_opt_revision_t *revision1,
@@ -926,6 +1036,52 @@ svn_client_diff(const apr_array_header_t *options,
}
svn_error_t *
+svn_client_diff_peg5(const apr_array_header_t *diff_options,
+ const char *path,
+ const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *start_revision,
+ const svn_opt_revision_t *end_revision,
+ const char *relative_to_dir,
+ svn_depth_t depth,
+ svn_boolean_t ignore_ancestry,
+ svn_boolean_t no_diff_deleted,
+ svn_boolean_t show_copies_as_adds,
+ svn_boolean_t ignore_content_type,
+ svn_boolean_t use_git_diff_format,
+ const char *header_encoding,
+ apr_file_t *outfile,
+ apr_file_t *errfile,
+ const apr_array_header_t *changelists,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ svn_stream_t *outstream = svn_stream_from_aprfile2(outfile, TRUE, pool);
+ svn_stream_t *errstream = svn_stream_from_aprfile2(errfile, TRUE, pool);
+
+ return svn_client_diff_peg6(diff_options,
+ path,
+ peg_revision,
+ start_revision,
+ end_revision,
+ relative_to_dir,
+ depth,
+ ignore_ancestry,
+ FALSE /* no_diff_added */,
+ no_diff_deleted,
+ show_copies_as_adds,
+ ignore_content_type,
+ FALSE /* ignore_properties */,
+ FALSE /* properties_only */,
+ use_git_diff_format,
+ header_encoding,
+ outstream,
+ errstream,
+ changelists,
+ ctx,
+ pool);
+}
+
+svn_error_t *
svn_client_diff_peg4(const apr_array_header_t *options,
const char *path,
const svn_opt_revision_t *peg_revision,
@@ -1151,6 +1307,77 @@ svn_client_export(svn_revnum_t *result_rev,
}
/*** From list.c ***/
+
+/* Baton for use with wrap_list_func */
+struct list_func_wrapper_baton {
+ void *list_func1_baton;
+ svn_client_list_func_t list_func1;
+};
+
+/* This implements svn_client_list_func2_t */
+static svn_error_t *
+list_func_wrapper(void *baton,
+ const char *path,
+ const svn_dirent_t *dirent,
+ const svn_lock_t *lock,
+ const char *abs_path,
+ const char *external_parent_url,
+ const char *external_target,
+ apr_pool_t *scratch_pool)
+{
+ struct list_func_wrapper_baton *lfwb = baton;
+
+ if (lfwb->list_func1)
+ return lfwb->list_func1(lfwb->list_func1_baton, path, dirent,
+ lock, abs_path, scratch_pool);
+
+ return SVN_NO_ERROR;
+}
+
+/* Helper function for svn_client_list2(). It wraps old format baton
+ and callback function in list_func_wrapper_baton and
+ returns new baton and callback to use with svn_client_list3(). */
+static void
+wrap_list_func(svn_client_list_func2_t *list_func2,
+ void **list_func2_baton,
+ svn_client_list_func_t list_func,
+ void *baton,
+ apr_pool_t *result_pool)
+{
+ struct list_func_wrapper_baton *lfwb = apr_palloc(result_pool,
+ sizeof(*lfwb));
+
+ /* Set the user provided old format callback in the baton. */
+ lfwb->list_func1_baton = baton;
+ lfwb->list_func1 = list_func;
+
+ *list_func2_baton = lfwb;
+ *list_func2 = list_func_wrapper;
+}
+
+svn_error_t *
+svn_client_list2(const char *path_or_url,
+ const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *revision,
+ svn_depth_t depth,
+ apr_uint32_t dirent_fields,
+ svn_boolean_t fetch_locks,
+ svn_client_list_func_t list_func,
+ void *baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ svn_client_list_func2_t list_func2;
+ void *list_func2_baton;
+
+ wrap_list_func(&list_func2, &list_func2_baton, list_func, baton, pool);
+
+ return svn_client_list3(path_or_url, peg_revision, revision, depth,
+ dirent_fields, fetch_locks,
+ FALSE /* include externals */,
+ list_func2, list_func2_baton, ctx, pool);
+}
+
svn_error_t *
svn_client_list(const char *path_or_url,
const svn_opt_revision_t *peg_revision,
@@ -1205,17 +1432,17 @@ store_dirent(void *baton, const char *path, const svn_dirent_t *dirent,
if (dirent->kind == svn_node_file)
{
const char *base_name = svn_path_basename(abs_path, lb->pool);
- apr_hash_set(lb->dirents, base_name, APR_HASH_KEY_STRING, dirent);
+ svn_hash_sets(lb->dirents, base_name, dirent);
if (lock)
- apr_hash_set(lb->locks, base_name, APR_HASH_KEY_STRING, lock);
+ svn_hash_sets(lb->locks, base_name, lock);
}
}
else
{
path = apr_pstrdup(lb->pool, path);
- apr_hash_set(lb->dirents, path, APR_HASH_KEY_STRING, dirent);
+ svn_hash_sets(lb->dirents, path, dirent);
if (lock)
- apr_hash_set(lb->locks, path, APR_HASH_KEY_STRING, lock);
+ svn_hash_sets(lb->locks, path, lock);
}
return SVN_NO_ERROR;
@@ -1287,16 +1514,11 @@ svn_client_log4(const apr_array_header_t *targets,
apr_pool_t *pool)
{
apr_array_header_t *revision_ranges;
- svn_opt_revision_range_t *range;
-
- range = apr_palloc(pool, sizeof(svn_opt_revision_range_t));
- range->start = *start;
- range->end = *end;
revision_ranges = apr_array_make(pool, 1,
sizeof(svn_opt_revision_range_t *));
-
- APR_ARRAY_PUSH(revision_ranges, svn_opt_revision_range_t *) = range;
+ APR_ARRAY_PUSH(revision_ranges, svn_opt_revision_range_t *)
+ = svn_opt__revision_range_create(start, end, pool);
return svn_client_log5(targets, peg_revision, revision_ranges, limit,
discover_changed_paths, strict_node_history,
@@ -1409,6 +1631,34 @@ svn_client_log(const apr_array_header_t *targets,
/*** From merge.c ***/
svn_error_t *
+svn_client_merge4(const char *source1,
+ const svn_opt_revision_t *revision1,
+ const char *source2,
+ const svn_opt_revision_t *revision2,
+ const char *target_wcpath,
+ svn_depth_t depth,
+ svn_boolean_t ignore_ancestry,
+ svn_boolean_t force_delete,
+ svn_boolean_t record_only,
+ svn_boolean_t dry_run,
+ svn_boolean_t allow_mixed_rev,
+ const apr_array_header_t *merge_options,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ SVN_ERR(svn_client_merge5(source1, revision1,
+ source2, revision2,
+ target_wcpath,
+ depth,
+ ignore_ancestry /*ignore_mergeinfo*/,
+ ignore_ancestry /*diff_ignore_ancestry*/,
+ force_delete, record_only,
+ dry_run, allow_mixed_rev,
+ merge_options, ctx, pool));
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
svn_client_merge3(const char *source1,
const svn_opt_revision_t *revision1,
const char *source2,
@@ -1469,6 +1719,34 @@ svn_client_merge(const char *source1,
}
svn_error_t *
+svn_client_merge_peg4(const char *source_path_or_url,
+ const apr_array_header_t *ranges_to_merge,
+ const svn_opt_revision_t *source_peg_revision,
+ const char *target_wcpath,
+ svn_depth_t depth,
+ svn_boolean_t ignore_ancestry,
+ svn_boolean_t force_delete,
+ svn_boolean_t record_only,
+ svn_boolean_t dry_run,
+ svn_boolean_t allow_mixed_rev,
+ const apr_array_header_t *merge_options,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ SVN_ERR(svn_client_merge_peg5(source_path_or_url,
+ ranges_to_merge,
+ source_peg_revision,
+ target_wcpath,
+ depth,
+ ignore_ancestry /*ignore_mergeinfo*/,
+ ignore_ancestry /*diff_ignore_ancestry*/,
+ force_delete, record_only,
+ dry_run, allow_mixed_rev,
+ merge_options, ctx, pool));
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
svn_client_merge_peg3(const char *source,
const apr_array_header_t *ranges_to_merge,
const svn_opt_revision_t *peg_revision,
@@ -1502,13 +1780,11 @@ svn_client_merge_peg2(const char *source,
svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
- svn_opt_revision_range_t range;
apr_array_header_t *ranges_to_merge =
apr_array_make(pool, 1, sizeof(svn_opt_revision_range_t *));
- range.start = *revision1;
- range.end = *revision2;
- APR_ARRAY_PUSH(ranges_to_merge, svn_opt_revision_range_t *) = &range;
+ APR_ARRAY_PUSH(ranges_to_merge, svn_opt_revision_range_t *)
+ = svn_opt__revision_range_create(revision1, revision2, pool);
return svn_client_merge_peg3(source, ranges_to_merge,
peg_revision,
target_wcpath,
@@ -1552,6 +1828,7 @@ svn_client_propset3(svn_commit_info_t **commit_info_p,
if (svn_path_is_url(target))
{
struct capture_baton_t cb;
+
cb.info = commit_info_p;
cb.pool = pool;
@@ -1619,6 +1896,26 @@ svn_client_revprop_set(const char *propname,
}
svn_error_t *
+svn_client_propget4(apr_hash_t **props,
+ const char *propname,
+ const char *target,
+ const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *revision,
+ svn_revnum_t *actual_revnum,
+ svn_depth_t depth,
+ const apr_array_header_t *changelists,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ return svn_error_trace(svn_client_propget5(props, NULL, propname, target,
+ peg_revision, revision,
+ actual_revnum, depth,
+ changelists, ctx,
+ result_pool, scratch_pool));
+}
+
+svn_error_t *
svn_client_propget3(apr_hash_t **props,
const char *propname,
const char *path_or_url,
@@ -1679,7 +1976,7 @@ svn_client_propget3(apr_hash_t **props,
svn_dirent_skip_ancestor(target, abspath),
pool);
- apr_hash_set(*props, relpath, APR_HASH_KEY_STRING, value);
+ svn_hash_sets(*props, relpath, value);
}
}
else
@@ -1758,6 +2055,70 @@ svn_client_proplist_item_dup(const svn_client_proplist_item_t *item,
return new_item;
}
+/* Baton for use with wrap_proplist_receiver */
+struct proplist_receiver_wrapper_baton {
+ void *baton;
+ svn_proplist_receiver_t receiver;
+};
+
+/* This implements svn_client_proplist_receiver2_t */
+static svn_error_t *
+proplist_wrapper_receiver(void *baton,
+ const char *path,
+ apr_hash_t *prop_hash,
+ apr_array_header_t *inherited_props,
+ apr_pool_t *pool)
+{
+ struct proplist_receiver_wrapper_baton *plrwb = baton;
+
+ if (plrwb->receiver)
+ return plrwb->receiver(plrwb->baton, path, prop_hash, pool);
+
+ return SVN_NO_ERROR;
+}
+
+static void
+wrap_proplist_receiver(svn_proplist_receiver2_t *receiver2,
+ void **receiver2_baton,
+ svn_proplist_receiver_t receiver,
+ void *receiver_baton,
+ apr_pool_t *pool)
+{
+ struct proplist_receiver_wrapper_baton *plrwb = apr_palloc(pool,
+ sizeof(*plrwb));
+
+ /* Set the user provided old format callback in the baton. */
+ plrwb->baton = receiver_baton;
+ plrwb->receiver = receiver;
+
+ *receiver2_baton = plrwb;
+ *receiver2 = proplist_wrapper_receiver;
+}
+
+svn_error_t *
+svn_client_proplist3(const char *target,
+ const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *revision,
+ svn_depth_t depth,
+ const apr_array_header_t *changelists,
+ svn_proplist_receiver_t receiver,
+ void *receiver_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+
+ svn_proplist_receiver2_t receiver2;
+ void *receiver2_baton;
+
+ wrap_proplist_receiver(&receiver2, &receiver2_baton, receiver, receiver_baton,
+ pool);
+
+ return svn_error_trace(svn_client_proplist4(target, peg_revision, revision,
+ depth, changelists, FALSE,
+ receiver2, receiver2_baton,
+ ctx, pool));
+}
+
/* Receiver baton used by proplist2() */
struct proplist_receiver_baton {
apr_array_header_t *props;
@@ -1867,6 +2228,7 @@ svn_client_status4(svn_revnum_t *result_rev,
apr_pool_t *pool)
{
struct status4_wrapper_baton swb;
+
swb.wc_ctx = ctx->wc_ctx;
swb.old_func = status_func;
swb.old_baton = status_baton;
@@ -2053,7 +2415,9 @@ svn_client_switch2(svn_revnum_t *result_rev,
{
return svn_client_switch3(result_rev, path, switch_url, peg_revision,
revision, depth, depth_is_sticky, ignore_externals,
- allow_unver_obstructions, TRUE, ctx, pool);
+ allow_unver_obstructions,
+ TRUE /* ignore_ancestry */,
+ ctx, pool);
}
svn_error_t *
@@ -2188,7 +2552,7 @@ info_from_info2(svn_info_t **new_info,
info->size64 = info2->size;
if (info2->size == SVN_INVALID_FILESIZE)
info->size = SVN_INFO_SIZE_UNKNOWN;
- else if (((apr_size_t)info->size64) == info->size64)
+ else if (((svn_filesize_t)(apr_size_t)info->size64) == info->size64)
info->size = (apr_size_t)info->size64;
else /* >= 4GB */
info->size = SVN_INFO_SIZE_UNKNOWN;
@@ -2214,7 +2578,7 @@ info_from_info2(svn_info_t **new_info,
info->depth = svn_depth_infinity;
info->working_size64 = info2->wc_info->recorded_size;
- if (((apr_size_t)info->working_size64) == info->working_size64)
+ if (((svn_filesize_t)(apr_size_t)info->working_size64) == info->working_size64)
info->working_size = (apr_size_t)info->working_size64;
else /* >= 4GB */
info->working_size = SVN_INFO_SIZE_UNKNOWN;
@@ -2394,6 +2758,48 @@ svn_client_revert(const apr_array_header_t *paths,
/*** From ra.c ***/
svn_error_t *
+svn_client_open_ra_session(svn_ra_session_t **session,
+ const char *url,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ return svn_error_trace(
+ svn_client_open_ra_session2(session, url,
+ NULL, ctx,
+ pool, pool));
+}
+
+svn_error_t *
+svn_client_uuid_from_url(const char **uuid,
+ const char *url,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ svn_error_t *err;
+ apr_pool_t *subpool = svn_pool_create(pool);
+
+ err = svn_client_get_repos_root(NULL, uuid, url,
+ ctx, pool, subpool);
+ /* destroy the RA session */
+ svn_pool_destroy(subpool);
+
+ return svn_error_trace(err);;
+}
+
+svn_error_t *
+svn_client_uuid_from_path2(const char **uuid,
+ const char *local_abspath,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ return svn_error_trace(
+ svn_client_get_repos_root(NULL, uuid,
+ local_abspath, ctx,
+ result_pool, scratch_pool));
+}
+
+svn_error_t *
svn_client_uuid_from_path(const char **uuid,
const char *path,
svn_wc_adm_access_t *adm_access,
@@ -2409,6 +2815,25 @@ svn_client_uuid_from_path(const char **uuid,
/*** From url.c ***/
svn_error_t *
+svn_client_root_url_from_path(const char **url,
+ const char *path_or_url,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ apr_pool_t *subpool = svn_pool_create(pool);
+ svn_error_t *err;
+ if (!svn_path_is_url(path_or_url))
+ SVN_ERR(svn_dirent_get_absolute(&path_or_url, path_or_url, pool));
+
+ err = svn_client_get_repos_root(url, NULL, path_or_url,
+ ctx, pool, subpool);
+
+ /* close ra session */
+ svn_pool_destroy(subpool);
+ return svn_error_trace(err);
+}
+
+svn_error_t *
svn_client_url_from_path(const char **url,
const char *path_or_url,
apr_pool_t *pool)
@@ -2422,6 +2847,34 @@ svn_client_url_from_path(const char **url,
/*** From mergeinfo.c ***/
svn_error_t *
+svn_client_mergeinfo_log(svn_boolean_t finding_merged,
+ const char *target_path_or_url,
+ const svn_opt_revision_t *target_peg_revision,
+ const char *source_path_or_url,
+ const svn_opt_revision_t *source_peg_revision,
+ svn_log_entry_receiver_t receiver,
+ void *receiver_baton,
+ svn_boolean_t discover_changed_paths,
+ svn_depth_t depth,
+ const apr_array_header_t *revprops,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
+{
+ svn_opt_revision_t start_revision, end_revision;
+
+ start_revision.kind = svn_opt_revision_unspecified;
+ end_revision.kind = svn_opt_revision_unspecified;
+
+ return svn_client_mergeinfo_log2(finding_merged,
+ target_path_or_url, target_peg_revision,
+ source_path_or_url, source_peg_revision,
+ &start_revision, &end_revision,
+ receiver, receiver_baton,
+ discover_changed_paths, depth, revprops,
+ ctx, scratch_pool);
+}
+
+svn_error_t *
svn_client_mergeinfo_log_merged(const char *path_or_url,
const svn_opt_revision_t *peg_revision,
const char *merge_source_path_or_url,
@@ -2510,3 +2963,4 @@ svn_client_commit_item2_dup(const svn_client_commit_item2_t *item,
return new_item;
}
+
diff --git a/subversion/libsvn_client/diff.c b/subversion/libsvn_client/diff.c
index 0161b63..26890ae 100644
--- a/subversion/libsvn_client/diff.c
+++ b/subversion/libsvn_client/diff.c
@@ -33,7 +33,6 @@
#include "svn_types.h"
#include "svn_hash.h"
#include "svn_wc.h"
-#include "svn_delta.h"
#include "svn_diff.h"
#include "svn_mergeinfo.h"
#include "svn_client.h"
@@ -46,307 +45,198 @@
#include "svn_pools.h"
#include "svn_config.h"
#include "svn_props.h"
-#include "svn_time.h"
-#include "svn_sorts.h"
#include "svn_subst.h"
#include "client.h"
#include "private/svn_wc_private.h"
+#include "private/svn_diff_private.h"
+#include "private/svn_subr_private.h"
+#include "private/svn_io_private.h"
#include "svn_private_config.h"
-/*
- * Constant separator strings
- */
-static const char equal_string[] =
- "===================================================================";
-static const char under_string[] =
- "___________________________________________________________________";
-
-
-/*-----------------------------------------------------------------*/
-
/* Utilities */
-/* Wrapper for apr_file_printf(), which see. FORMAT is a utf8-encoded
- string after it is formatted, so this function can convert it to
- ENCODING before printing. */
-static svn_error_t *
-file_printf_from_utf8(apr_file_t *fptr, const char *encoding,
- const char *format, ...)
- __attribute__ ((format(printf, 3, 4)));
-static svn_error_t *
-file_printf_from_utf8(apr_file_t *fptr, const char *encoding,
- const char *format, ...)
-{
- va_list ap;
- const char *buf, *buf_apr;
-
- va_start(ap, format);
- buf = apr_pvsprintf(apr_file_pool_get(fptr), format, ap);
- va_end(ap);
-
- SVN_ERR(svn_utf_cstring_from_utf8_ex2(&buf_apr, buf, encoding,
- apr_file_pool_get(fptr)));
-
- return svn_io_file_write_full(fptr, buf_apr, strlen(buf_apr),
- NULL, apr_file_pool_get(fptr));
-}
-
-
-/* A helper function for display_prop_diffs. Output the differences between
- the mergeinfo stored in ORIG_MERGEINFO_VAL and NEW_MERGEINFO_VAL in a
- human-readable form to FILE, using ENCODING. Use POOL for temporary
- allocations. */
-static svn_error_t *
-display_mergeinfo_diff(const char *old_mergeinfo_val,
- const char *new_mergeinfo_val,
- const char *encoding,
- apr_file_t *file,
- apr_pool_t *pool)
-{
- apr_hash_t *old_mergeinfo_hash, *new_mergeinfo_hash, *added, *deleted;
- apr_hash_index_t *hi;
-
- if (old_mergeinfo_val)
- SVN_ERR(svn_mergeinfo_parse(&old_mergeinfo_hash, old_mergeinfo_val, pool));
- else
- old_mergeinfo_hash = NULL;
-
- if (new_mergeinfo_val)
- SVN_ERR(svn_mergeinfo_parse(&new_mergeinfo_hash, new_mergeinfo_val, pool));
- else
- new_mergeinfo_hash = NULL;
-
- SVN_ERR(svn_mergeinfo_diff(&deleted, &added, old_mergeinfo_hash,
- new_mergeinfo_hash,
- TRUE, pool));
-
- for (hi = apr_hash_first(pool, deleted);
- hi; hi = apr_hash_next(hi))
- {
- const char *from_path = svn__apr_hash_index_key(hi);
- apr_array_header_t *merge_revarray = svn__apr_hash_index_val(hi);
- svn_string_t *merge_revstr;
-
- SVN_ERR(svn_rangelist_to_string(&merge_revstr, merge_revarray, pool));
-
- SVN_ERR(file_printf_from_utf8(file, encoding,
- _(" Reverse-merged %s:r%s%s"),
- from_path, merge_revstr->data,
- APR_EOL_STR));
- }
-
- for (hi = apr_hash_first(pool, added);
- hi; hi = apr_hash_next(hi))
- {
- const char *from_path = svn__apr_hash_index_key(hi);
- apr_array_header_t *merge_revarray = svn__apr_hash_index_val(hi);
- svn_string_t *merge_revstr;
-
- SVN_ERR(svn_rangelist_to_string(&merge_revstr, merge_revarray, pool));
-
- SVN_ERR(file_printf_from_utf8(file, encoding,
- _(" Merged %s:r%s%s"),
- from_path, merge_revstr->data,
- APR_EOL_STR));
- }
-
- return SVN_NO_ERROR;
-}
#define MAKE_ERR_BAD_RELATIVE_PATH(path, relative_to_dir) \
svn_error_createf(SVN_ERR_BAD_RELATIVE_PATH, NULL, \
_("Path '%s' must be an immediate child of " \
"the directory '%s'"), path, relative_to_dir)
-/* A helper function used by display_prop_diffs.
- TOKEN is a string holding a property value.
- If TOKEN is empty, or is already terminated by an EOL marker,
- return TOKEN unmodified. Else, return a new string consisting
- of the concatenation of TOKEN and the system's default EOL marker.
- The new string is allocated from POOL.
- If HAD_EOL is not NULL, indicate in *HAD_EOL if the token had a EOL. */
-static const svn_string_t *
-maybe_append_eol(const svn_string_t *token, svn_boolean_t *had_eol,
- apr_pool_t *pool)
-{
- const char *curp;
-
- if (had_eol)
- *had_eol = FALSE;
-
- if (token->len == 0)
- return token;
-
- curp = token->data + token->len - 1;
- if (*curp == '\r')
- {
- if (had_eol)
- *had_eol = TRUE;
- return token;
- }
- else if (*curp != '\n')
- {
- return svn_string_createf(pool, "%s%s", token->data, APR_EOL_STR);
- }
- else
- {
- if (had_eol)
- *had_eol = TRUE;
- return token;
- }
-}
-
-/* Adjust PATH to be relative to the repository root beneath ORIG_TARGET,
- * using RA_SESSION and WC_CTX, and return the result in *ADJUSTED_PATH.
- * ORIG_TARGET is one of the original targets passed to the diff command,
+/* Calculate the repository relative path of DIFF_RELPATH, using RA_SESSION
+ * and WC_CTX, and return the result in *REPOS_RELPATH.
+ * ORIG_TARGET is the related original target passed to the diff command,
* and may be used to derive leading path components missing from PATH.
- * WC_ROOT_ABSPATH is the absolute path to the root directory of a working
- * copy involved in a repos-wc diff, and may be NULL.
+ * ANCHOR is the local path where the diff editor is anchored.
* Do all allocations in POOL. */
static svn_error_t *
-adjust_relative_to_repos_root(const char **adjusted_path,
- const char *path,
- const char *orig_target,
- svn_ra_session_t *ra_session,
- svn_wc_context_t *wc_ctx,
- const char *wc_root_abspath,
- apr_pool_t *pool)
+make_repos_relpath(const char **repos_relpath,
+ const char *diff_relpath,
+ const char *orig_target,
+ svn_ra_session_t *ra_session,
+ svn_wc_context_t *wc_ctx,
+ const char *anchor,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
const char *local_abspath;
- const char *orig_relpath;
- const char *child_relpath;
+ const char *orig_repos_relpath = NULL;
- if (! ra_session)
+ if (! ra_session
+ || (anchor && !svn_path_is_url(orig_target)))
{
+ svn_error_t *err;
/* We're doing a WC-WC diff, so we can retrieve all information we
* need from the working copy. */
- SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, pool));
- SVN_ERR(svn_wc__node_get_repos_relpath(adjusted_path, wc_ctx,
- local_abspath, pool, pool));
- return SVN_NO_ERROR;
- }
+ SVN_ERR(svn_dirent_get_absolute(&local_abspath,
+ svn_dirent_join(anchor, diff_relpath,
+ scratch_pool),
+ scratch_pool));
+
+ err = svn_wc__node_get_repos_info(NULL, repos_relpath, NULL, NULL,
+ wc_ctx, local_abspath,
+ result_pool, scratch_pool);
+
+ if (!ra_session
+ || ! err
+ || (err && err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND))
+ {
+ return svn_error_trace(err);
+ }
- /* Now deal with the repos-repos and repos-wc diff cases.
- * We need to make PATH appear as a child of ORIG_TARGET.
- * ORIG_TARGET is either a URL or a path to a working copy. First,
- * find out what ORIG_TARGET looks like relative to the repository root.*/
- if (svn_path_is_url(orig_target))
- SVN_ERR(svn_ra_get_path_relative_to_root(ra_session,
- &orig_relpath,
- orig_target, pool));
- else
- {
- const char *orig_abspath;
+ /* The path represents a local working copy path, but does not
+ exist. Fall through to calculate an in-repository location
+ based on the ra session */
- SVN_ERR(svn_dirent_get_absolute(&orig_abspath, orig_target, pool));
- SVN_ERR(svn_wc__node_get_repos_relpath(&orig_relpath, wc_ctx,
- orig_abspath, pool, pool));
+ /* ### Maybe we should use the nearest existing ancestor instead? */
+ svn_error_clear(err);
}
- /* PATH is either a child of the working copy involved in the diff (in
- * the repos-wc diff case), or it's a relative path we can readily use
- * (in either of the repos-repos and repos-wc diff cases). */
- child_relpath = NULL;
- if (wc_root_abspath)
- {
- SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, pool));
- child_relpath = svn_dirent_is_child(wc_root_abspath, local_abspath, pool);
- }
- if (child_relpath == NULL)
- child_relpath = path;
+ {
+ const char *url;
+ const char *repos_root_url;
- *adjusted_path = svn_relpath_join(orig_relpath, child_relpath, pool);
+ /* Would be nice if the RA layer could just provide the parent
+ repos_relpath of the ra session */
+ SVN_ERR(svn_ra_get_session_url(ra_session, &url, scratch_pool));
+
+ SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root_url,
+ scratch_pool));
+
+ orig_repos_relpath = svn_uri_skip_ancestor(repos_root_url, url,
+ scratch_pool);
+
+ *repos_relpath = svn_relpath_join(orig_repos_relpath, diff_relpath,
+ result_pool);
+ }
return SVN_NO_ERROR;
}
-/* Adjust PATH, ORIG_PATH_1 and ORIG_PATH_2, representing the changed file
- * and the two original targets passed to the diff command, to handle the
+/* Adjust *INDEX_PATH, *ORIG_PATH_1 and *ORIG_PATH_2, representing the changed
+ * node and the two original targets passed to the diff command, to handle the
* case when we're dealing with different anchors. RELATIVE_TO_DIR is the
- * directory the diff target should be considered relative to. All
- * allocations are done in POOL. */
+ * directory the diff target should be considered relative to.
+ * ANCHOR is the local path where the diff editor is anchored. The resulting
+ * values are allocated in RESULT_POOL and temporary allocations are performed
+ * in SCRATCH_POOL. */
static svn_error_t *
-adjust_paths_for_diff_labels(const char **path,
+adjust_paths_for_diff_labels(const char **index_path,
const char **orig_path_1,
const char **orig_path_2,
const char *relative_to_dir,
- apr_pool_t *pool)
+ const char *anchor,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- apr_size_t len;
- const char *new_path = *path;
+ const char *new_path = *index_path;
const char *new_path1 = *orig_path_1;
const char *new_path2 = *orig_path_2;
- /* ### Holy cow. Due to anchor/target weirdness, we can't
- simply join diff_cmd_baton->orig_path_1 with path, ditto for
- orig_path_2. That will work when they're directory URLs, but
- not for file URLs. Nor can we just use anchor1 and anchor2
- from do_diff(), at least not without some more logic here.
- What a nightmare.
-
- For now, to distinguish the two paths, we'll just put the
- unique portions of the original targets in parentheses after
- the received path, with ellipses for handwaving. This makes
- the labels a bit clumsy, but at least distinctive. Better
- solutions are possible, they'll just take more thought. */
-
- len = strlen(svn_dirent_get_longest_ancestor(new_path1, new_path2, pool));
- new_path1 = new_path1 + len;
- new_path2 = new_path2 + len;
-
- /* ### Should diff labels print paths in local style? Is there
- already a standard for this? In any case, this code depends on
- a particular style, so not calling svn_dirent_local_style() on the
- paths below.*/
- if (new_path1[0] == '\0')
- new_path1 = apr_psprintf(pool, "%s", new_path);
- else if (new_path1[0] == '/')
- new_path1 = apr_psprintf(pool, "%s\t(...%s)", new_path, new_path1);
- else
- new_path1 = apr_psprintf(pool, "%s\t(.../%s)", new_path, new_path1);
-
- if (new_path2[0] == '\0')
- new_path2 = apr_psprintf(pool, "%s", new_path);
- else if (new_path2[0] == '/')
- new_path2 = apr_psprintf(pool, "%s\t(...%s)", new_path, new_path2);
- else
- new_path2 = apr_psprintf(pool, "%s\t(.../%s)", new_path, new_path2);
+ if (anchor)
+ new_path = svn_dirent_join(anchor, new_path, result_pool);
if (relative_to_dir)
{
/* Possibly adjust the paths shown in the output (see issue #2723). */
const char *child_path = svn_dirent_is_child(relative_to_dir, new_path,
- pool);
+ result_pool);
if (child_path)
new_path = child_path;
- else if (!svn_path_compare_paths(relative_to_dir, new_path))
+ else if (! strcmp(relative_to_dir, new_path))
new_path = ".";
else
return MAKE_ERR_BAD_RELATIVE_PATH(new_path, relative_to_dir);
- child_path = svn_dirent_is_child(relative_to_dir, new_path1, pool);
+ child_path = svn_dirent_is_child(relative_to_dir, new_path1,
+ result_pool);
+ }
- if (child_path)
- new_path1 = child_path;
- else if (!svn_path_compare_paths(relative_to_dir, new_path1))
- new_path1 = ".";
- else
- return MAKE_ERR_BAD_RELATIVE_PATH(new_path1, relative_to_dir);
+ {
+ apr_size_t len;
+ svn_boolean_t is_url1;
+ svn_boolean_t is_url2;
+ /* ### Holy cow. Due to anchor/target weirdness, we can't
+ simply join diff_cmd_baton->orig_path_1 with path, ditto for
+ orig_path_2. That will work when they're directory URLs, but
+ not for file URLs. Nor can we just use anchor1 and anchor2
+ from do_diff(), at least not without some more logic here.
+ What a nightmare.
+
+ For now, to distinguish the two paths, we'll just put the
+ unique portions of the original targets in parentheses after
+ the received path, with ellipses for handwaving. This makes
+ the labels a bit clumsy, but at least distinctive. Better
+ solutions are possible, they'll just take more thought. */
+
+ /* ### BH: We can now just construct the repos_relpath, etc. as the
+ anchor is available. See also make_repos_relpath() */
+
+ is_url1 = svn_path_is_url(new_path1);
+ is_url2 = svn_path_is_url(new_path2);
+
+ if (is_url1 && is_url2)
+ len = strlen(svn_uri_get_longest_ancestor(new_path1, new_path2,
+ scratch_pool));
+ else if (!is_url1 && !is_url2)
+ len = strlen(svn_dirent_get_longest_ancestor(new_path1, new_path2,
+ scratch_pool));
+ else
+ len = 0; /* Path and URL */
+
+ new_path1 += len;
+ new_path2 += len;
+ }
- child_path = svn_dirent_is_child(relative_to_dir, new_path2, pool);
+ /* ### Should diff labels print paths in local style? Is there
+ already a standard for this? In any case, this code depends on
+ a particular style, so not calling svn_dirent_local_style() on the
+ paths below.*/
- if (child_path)
- new_path2 = child_path;
- else if (!svn_path_compare_paths(relative_to_dir, new_path2))
- new_path2 = ".";
- else
- return MAKE_ERR_BAD_RELATIVE_PATH(new_path2, relative_to_dir);
- }
- *path = new_path;
+ if (new_path[0] == '\0')
+ new_path = ".";
+
+ if (new_path1[0] == '\0')
+ new_path1 = new_path;
+ else if (svn_path_is_url(new_path1))
+ new_path1 = apr_psprintf(result_pool, "%s\t(%s)", new_path, new_path1);
+ else if (new_path1[0] == '/')
+ new_path1 = apr_psprintf(result_pool, "%s\t(...%s)", new_path, new_path1);
+ else
+ new_path1 = apr_psprintf(result_pool, "%s\t(.../%s)", new_path, new_path1);
+
+ if (new_path2[0] == '\0')
+ new_path2 = new_path;
+ else if (svn_path_is_url(new_path2))
+ new_path1 = apr_psprintf(result_pool, "%s\t(%s)", new_path, new_path2);
+ else if (new_path2[0] == '/')
+ new_path2 = apr_psprintf(result_pool, "%s\t(...%s)", new_path, new_path2);
+ else
+ new_path2 = apr_psprintf(result_pool, "%s\t(.../%s)", new_path, new_path2);
+
+ *index_path = new_path;
*orig_path_1 = new_path1;
*orig_path_2 = new_path2;
@@ -409,15 +299,22 @@ print_git_diff_header_deleted(svn_stream_t *os, const char *header_encoding,
* OS using HEADER_ENCODING. All allocations are done in RESULT_POOL. */
static svn_error_t *
print_git_diff_header_copied(svn_stream_t *os, const char *header_encoding,
- const char *copyfrom_path, const char *path,
+ const char *copyfrom_path,
+ svn_revnum_t copyfrom_rev,
+ const char *path,
apr_pool_t *result_pool)
{
SVN_ERR(svn_stream_printf_from_utf8(os, header_encoding, result_pool,
"diff --git a/%s b/%s%s",
copyfrom_path, path, APR_EOL_STR));
- SVN_ERR(svn_stream_printf_from_utf8(os, header_encoding, result_pool,
- "copy from %s%s", copyfrom_path,
- APR_EOL_STR));
+ if (copyfrom_rev != SVN_INVALID_REVNUM)
+ SVN_ERR(svn_stream_printf_from_utf8(os, header_encoding, result_pool,
+ "copy from %s@%ld%s", copyfrom_path,
+ copyfrom_rev, APR_EOL_STR));
+ else
+ SVN_ERR(svn_stream_printf_from_utf8(os, header_encoding, result_pool,
+ "copy from %s%s", copyfrom_path,
+ APR_EOL_STR));
SVN_ERR(svn_stream_printf_from_utf8(os, header_encoding, result_pool,
"copy to %s%s", path, APR_EOL_STR));
return SVN_NO_ERROR;
@@ -459,11 +356,8 @@ print_git_diff_header_modified(svn_stream_t *os, const char *header_encoding,
* HEADER_ENCODING. Return suitable diff labels for the git diff in *LABEL1
* and *LABEL2. REPOS_RELPATH1 and REPOS_RELPATH2 are relative to reposroot.
* are the paths passed to the original diff command. REV1 and REV2 are
- * revisions being diffed. COPYFROM_PATH indicates where the diffed item
- * was copied from. RA_SESSION and WC_CTX are used to adjust paths in the
- * headers to be relative to the repository root.
- * WC_ROOT_ABSPATH is the absolute path to the root directory of a working
- * copy involved in a repos-wc diff, and may be NULL.
+ * revisions being diffed. COPYFROM_PATH and COPYFROM_REV indicate where the
+ * diffed item was copied from.
* Use SCRATCH_POOL for temporary allocations. */
static svn_error_t *
print_git_diff_header(svn_stream_t *os,
@@ -474,10 +368,8 @@ print_git_diff_header(svn_stream_t *os,
svn_revnum_t rev1,
svn_revnum_t rev2,
const char *copyfrom_path,
+ svn_revnum_t copyfrom_rev,
const char *header_encoding,
- svn_ra_session_t *ra_session,
- svn_wc_context_t *wc_ctx,
- const char *wc_root_abspath,
apr_pool_t *scratch_pool)
{
if (operation == svn_diff_op_deleted)
@@ -493,7 +385,8 @@ print_git_diff_header(svn_stream_t *os,
else if (operation == svn_diff_op_copied)
{
SVN_ERR(print_git_diff_header_copied(os, header_encoding,
- copyfrom_path, repos_relpath2,
+ copyfrom_path, copyfrom_rev,
+ repos_relpath2,
scratch_pool));
*label1 = diff_label(apr_psprintf(scratch_pool, "a/%s", copyfrom_path),
rev1, scratch_pool);
@@ -534,8 +427,8 @@ print_git_diff_header(svn_stream_t *os,
}
/* A helper func that writes out verbal descriptions of property diffs
- to FILE. Of course, the apr_file_t will probably be the 'outfile'
- passed to svn_client_diff5, which is probably stdout.
+ to OUTSTREAM. Of course, OUTSTREAM will probably be whatever was
+ passed to svn_client_diff6(), which is probably stdout.
### FIXME needs proper docstring
@@ -544,189 +437,91 @@ print_git_diff_header(svn_stream_t *os,
needed to normalize paths relative the repository root, and are ignored
if USE_GIT_DIFF_FORMAT is FALSE.
- WC_ROOT_ABSPATH is the absolute path to the root directory of a working
- copy involved in a repos-wc diff, and may be NULL. */
+ ANCHOR is the local path where the diff editor is anchored. */
static svn_error_t *
display_prop_diffs(const apr_array_header_t *propchanges,
apr_hash_t *original_props,
- const char *path,
+ const char *diff_relpath,
+ const char *anchor,
const char *orig_path1,
const char *orig_path2,
svn_revnum_t rev1,
svn_revnum_t rev2,
const char *encoding,
- apr_file_t *file,
+ svn_stream_t *outstream,
const char *relative_to_dir,
svn_boolean_t show_diff_header,
svn_boolean_t use_git_diff_format,
svn_ra_session_t *ra_session,
svn_wc_context_t *wc_ctx,
- const char *wc_root_abspath,
- apr_pool_t *pool)
+ apr_pool_t *scratch_pool)
{
- int i;
- const char *path1 = apr_pstrdup(pool, orig_path1);
- const char *path2 = apr_pstrdup(pool, orig_path2);
+ const char *repos_relpath1 = NULL;
+ const char *repos_relpath2 = NULL;
+ const char *index_path = diff_relpath;
+ const char *adjusted_path1 = orig_path1;
+ const char *adjusted_path2 = orig_path2;
if (use_git_diff_format)
{
- SVN_ERR(adjust_relative_to_repos_root(&path1, path, orig_path1,
- ra_session, wc_ctx,
- wc_root_abspath,
- pool));
- SVN_ERR(adjust_relative_to_repos_root(&path2, path, orig_path2,
- ra_session, wc_ctx,
- wc_root_abspath,
- pool));
+ SVN_ERR(make_repos_relpath(&repos_relpath1, diff_relpath, orig_path1,
+ ra_session, wc_ctx, anchor,
+ scratch_pool, scratch_pool));
+ SVN_ERR(make_repos_relpath(&repos_relpath2, diff_relpath, orig_path2,
+ ra_session, wc_ctx, anchor,
+ scratch_pool, scratch_pool));
}
/* If we're creating a diff on the wc root, path would be empty. */
- if (path[0] == '\0')
- path = apr_psprintf(pool, ".");
+ SVN_ERR(adjust_paths_for_diff_labels(&index_path, &adjusted_path1,
+ &adjusted_path2,
+ relative_to_dir, anchor,
+ scratch_pool, scratch_pool));
if (show_diff_header)
{
const char *label1;
const char *label2;
- const char *adjusted_path1 = apr_pstrdup(pool, path1);
- const char *adjusted_path2 = apr_pstrdup(pool, path2);
-
- SVN_ERR(adjust_paths_for_diff_labels(&path, &adjusted_path1,
- &adjusted_path2,
- relative_to_dir, pool));
- label1 = diff_label(adjusted_path1, rev1, pool);
- label2 = diff_label(adjusted_path2, rev2, pool);
+ label1 = diff_label(adjusted_path1, rev1, scratch_pool);
+ label2 = diff_label(adjusted_path2, rev2, scratch_pool);
/* ### Should we show the paths in platform specific format,
* ### diff_content_changed() does not! */
- SVN_ERR(file_printf_from_utf8(file, encoding,
- "Index: %s" APR_EOL_STR
- "%s" APR_EOL_STR,
- path, equal_string));
+ SVN_ERR(svn_stream_printf_from_utf8(outstream, encoding, scratch_pool,
+ "Index: %s" APR_EOL_STR
+ SVN_DIFF__EQUAL_STRING APR_EOL_STR,
+ index_path));
if (use_git_diff_format)
- {
- svn_stream_t *os;
-
- os = svn_stream_from_aprfile2(file, TRUE, pool);
- SVN_ERR(print_git_diff_header(os, &label1, &label2,
- svn_diff_op_modified,
- path1, path2, rev1, rev2, NULL,
- encoding, ra_session, wc_ctx,
- wc_root_abspath, pool));
- SVN_ERR(svn_stream_close(os));
- }
-
- SVN_ERR(file_printf_from_utf8(file, encoding,
- "--- %s" APR_EOL_STR
- "+++ %s" APR_EOL_STR,
- label1,
- label2));
+ SVN_ERR(print_git_diff_header(outstream, &label1, &label2,
+ svn_diff_op_modified,
+ repos_relpath1, repos_relpath2,
+ rev1, rev2, NULL,
+ SVN_INVALID_REVNUM,
+ encoding, scratch_pool));
+
+ /* --- label1
+ * +++ label2 */
+ SVN_ERR(svn_diff__unidiff_write_header(
+ outstream, encoding, label1, label2, scratch_pool));
}
- SVN_ERR(file_printf_from_utf8(file, encoding,
- _("%sProperty changes on: %s%s"),
- APR_EOL_STR,
- use_git_diff_format ? path1 : path,
- APR_EOL_STR));
-
- SVN_ERR(file_printf_from_utf8(file, encoding, "%s" APR_EOL_STR,
- under_string));
-
- for (i = 0; i < propchanges->nelts; i++)
- {
- const char *action;
- const svn_string_t *original_value;
- const svn_prop_t *propchange =
- &APR_ARRAY_IDX(propchanges, i, svn_prop_t);
-
- if (original_props)
- original_value = apr_hash_get(original_props,
- propchange->name, APR_HASH_KEY_STRING);
- else
- original_value = NULL;
-
- /* If the property doesn't exist on either side, or if it exists
- with the same value, skip it. */
- if ((! (original_value || propchange->value))
- || (original_value && propchange->value
- && svn_string_compare(original_value, propchange->value)))
- continue;
-
- if (! original_value)
- action = "Added";
- else if (! propchange->value)
- action = "Deleted";
- else
- action = "Modified";
- SVN_ERR(file_printf_from_utf8(file, encoding, "%s: %s%s", action,
- propchange->name, APR_EOL_STR));
+ SVN_ERR(svn_stream_printf_from_utf8(outstream, encoding, scratch_pool,
+ _("%sProperty changes on: %s%s"),
+ APR_EOL_STR,
+ use_git_diff_format
+ ? repos_relpath1
+ : index_path,
+ APR_EOL_STR));
- if (strcmp(propchange->name, SVN_PROP_MERGEINFO) == 0)
- {
- const char *orig = original_value ? original_value->data : NULL;
- const char *val = propchange->value ? propchange->value->data : NULL;
- svn_error_t *err = display_mergeinfo_diff(orig, val, encoding,
- file, pool);
-
- /* Issue #3896: If we can't pretty-print mergeinfo differences
- because invalid mergeinfo is present, then don't let the diff
- fail, just print the diff as any other property. */
- if (err && err->apr_err == SVN_ERR_MERGEINFO_PARSE_ERROR)
- {
- svn_error_clear(err);
- }
- else
- {
- SVN_ERR(err);
- continue;
- }
- }
+ SVN_ERR(svn_stream_printf_from_utf8(outstream, encoding, scratch_pool,
+ SVN_DIFF__UNDER_STRING APR_EOL_STR));
- {
- svn_stream_t *os = svn_stream_from_aprfile2(file, TRUE, pool);
- svn_diff_t *diff;
- svn_diff_file_options_t options = { 0 };
- const svn_string_t *tmp;
- const svn_string_t *orig;
- const svn_string_t *val;
- svn_boolean_t val_has_eol;
-
- /* The last character in a property is often not a newline.
- An eol character is appended to prevent the diff API to add a
- ' \ No newline at end of file' line. We add
- ' \ No newline at end of property' manually if needed. */
- tmp = original_value ? original_value : svn_string_create("", pool);
- orig = maybe_append_eol(tmp, NULL, pool);
-
- tmp = propchange->value ? propchange->value :
- svn_string_create("", pool);
- val = maybe_append_eol(tmp, &val_has_eol, pool);
-
- SVN_ERR(svn_diff_mem_string_diff(&diff, orig, val, &options, pool));
-
- /* UNIX patch will try to apply a diff even if the diff header
- * is missing. It tries to be helpful by asking the user for a
- * target filename when it can't determine the target filename
- * from the diff header. But there usually are no files which
- * UNIX patch could apply the property diff to, so we use "##"
- * instead of "@@" as the default hunk delimiter for property diffs.
- * We also supress the diff header. */
- SVN_ERR(svn_diff_mem_string_output_unified2(os, diff, FALSE, "##",
- svn_dirent_local_style(path, pool),
- svn_dirent_local_style(path, pool),
- encoding, orig, val, pool));
- SVN_ERR(svn_stream_close(os));
- if (!val_has_eol)
- {
- const char *s = "\\ No newline at end of property" APR_EOL_STR;
- apr_size_t len = strlen(s);
- SVN_ERR(svn_stream_write(os, s, &len));
- }
- }
- }
+ SVN_ERR(svn_diff__display_prop_diffs(
+ outstream, encoding, propchanges, original_props,
+ TRUE /* pretty_print_mergeinfo */, scratch_pool));
return SVN_NO_ERROR;
}
@@ -756,8 +551,8 @@ struct diff_cmd_baton {
} options;
apr_pool_t *pool;
- apr_file_t *outfile;
- apr_file_t *errfile;
+ svn_stream_t *outstream;
+ svn_stream_t *errstream;
const char *header_encoding;
@@ -769,7 +564,7 @@ struct diff_cmd_baton {
const char *orig_path_2;
/* These are the numeric representations of the revisions passed to
- svn_client_diff5, either may be SVN_INVALID_REVNUM. We need these
+ svn_client_diff6(), either may be SVN_INVALID_REVNUM. We need these
because some of the svn_wc_diff_callbacks4_t don't get revision
arguments.
@@ -782,102 +577,87 @@ struct diff_cmd_baton {
/* Set this if you want diff output even for binary files. */
svn_boolean_t force_binary;
- /* Set this flag if you want diff_file_changed to output diffs
- unconditionally, even if the diffs are empty. */
- svn_boolean_t force_empty;
-
/* The directory that diff target paths should be considered as
relative to for output generation (see issue #2723). */
const char *relative_to_dir;
+ /* Whether property differences are ignored. */
+ svn_boolean_t ignore_properties;
+
+ /* Whether to show only property changes. */
+ svn_boolean_t properties_only;
+
/* Whether we're producing a git-style diff. */
svn_boolean_t use_git_diff_format;
+ /* Whether addition of a file is summarized versus showing a full diff. */
+ svn_boolean_t no_diff_added;
+
+ /* Whether deletion of a file is summarized versus showing a full diff. */
+ svn_boolean_t no_diff_deleted;
+
+ /* Whether to ignore copyfrom information when showing adds */
+ svn_boolean_t no_copyfrom_on_add;
+
+ /* Empty files for creating diffs or NULL if not used yet */
+ const char *empty_file;
+
svn_wc_context_t *wc_ctx;
/* The RA session used during diffs involving the repository. */
svn_ra_session_t *ra_session;
- /* During a repos-wc diff, this is the absolute path to the root
- * directory of the working copy involved in the diff. */
- const char *wc_root_abspath;
-
/* The anchor to prefix before wc paths */
const char *anchor;
- /* A hashtable using the visited paths as keys.
- * ### This is needed for us to know if we need to print a diff header for
- * ### a path that has property changes. */
- apr_hash_t *visited_paths;
+ /* Whether the local diff target of a repos->wc diff is a copy. */
+ svn_boolean_t repos_wc_diff_target_is_copy;
};
-
-/* A helper function that marks a path as visited. It copies PATH
- * into the correct pool before referencing it from the hash table. */
-static void
-mark_path_as_visited(struct diff_cmd_baton *diff_cmd_baton, const char *path)
-{
- const char *p;
-
- p = apr_pstrdup(apr_hash_pool_get(diff_cmd_baton->visited_paths), path);
- apr_hash_set(diff_cmd_baton->visited_paths, p, APR_HASH_KEY_STRING, p);
-}
-
/* An helper for diff_dir_props_changed, diff_file_changed and diff_file_added
*/
static svn_error_t *
-diff_props_changed(svn_wc_notify_state_t *state,
- svn_boolean_t *tree_conflicted,
- const char *path,
+diff_props_changed(const char *diff_relpath,
+ svn_revnum_t rev1,
+ svn_revnum_t rev2,
svn_boolean_t dir_was_added,
const apr_array_header_t *propchanges,
apr_hash_t *original_props,
- void *diff_baton,
+ svn_boolean_t show_diff_header,
+ struct diff_cmd_baton *diff_cmd_baton,
apr_pool_t *scratch_pool)
{
- struct diff_cmd_baton *diff_cmd_baton = diff_baton;
apr_array_header_t *props;
- svn_boolean_t show_diff_header;
+
+ /* If property differences are ignored, there's nothing to do. */
+ if (diff_cmd_baton->ignore_properties)
+ return SVN_NO_ERROR;
SVN_ERR(svn_categorize_props(propchanges, NULL, NULL, &props,
scratch_pool));
- if (apr_hash_get(diff_cmd_baton->visited_paths, path, APR_HASH_KEY_STRING))
- show_diff_header = FALSE;
- else
- show_diff_header = TRUE;
-
if (props->nelts > 0)
{
/* We're using the revnums from the diff_cmd_baton since there's
* no revision argument to the svn_wc_diff_callback_t
* dir_props_changed(). */
- SVN_ERR(display_prop_diffs(props, original_props, path,
+ SVN_ERR(display_prop_diffs(props, original_props,
+ diff_relpath,
+ diff_cmd_baton->anchor,
diff_cmd_baton->orig_path_1,
diff_cmd_baton->orig_path_2,
- diff_cmd_baton->revnum1,
- diff_cmd_baton->revnum2,
+ rev1,
+ rev2,
diff_cmd_baton->header_encoding,
- diff_cmd_baton->outfile,
+ diff_cmd_baton->outstream,
diff_cmd_baton->relative_to_dir,
show_diff_header,
diff_cmd_baton->use_git_diff_format,
diff_cmd_baton->ra_session,
diff_cmd_baton->wc_ctx,
- diff_cmd_baton->wc_root_abspath,
scratch_pool));
-
- /* We've printed the diff header so now we can mark the path as
- * visited. */
- if (show_diff_header)
- mark_path_as_visited(diff_cmd_baton, path);
}
- if (state)
- *state = svn_wc_notify_state_unknown;
- if (tree_conflicted)
- *tree_conflicted = FALSE;
-
return SVN_NO_ERROR;
}
@@ -885,7 +665,7 @@ diff_props_changed(svn_wc_notify_state_t *state,
static svn_error_t *
diff_dir_props_changed(svn_wc_notify_state_t *state,
svn_boolean_t *tree_conflicted,
- const char *path,
+ const char *diff_relpath,
svn_boolean_t dir_was_added,
const apr_array_header_t *propchanges,
apr_hash_t *original_props,
@@ -894,25 +674,33 @@ diff_dir_props_changed(svn_wc_notify_state_t *state,
{
struct diff_cmd_baton *diff_cmd_baton = diff_baton;
- if (diff_cmd_baton->anchor)
- path = svn_dirent_join(diff_cmd_baton->anchor, path, scratch_pool);
-
- return svn_error_trace(diff_props_changed(state,
- tree_conflicted, path,
+ return svn_error_trace(diff_props_changed(diff_relpath,
+ /* ### These revs be filled
+ * ### with per node info */
+ dir_was_added
+ ? 0 /* Magic legacy value */
+ : diff_cmd_baton->revnum1,
+ diff_cmd_baton->revnum2,
dir_was_added,
propchanges,
original_props,
- diff_baton,
+ TRUE /* show_diff_header */,
+ diff_cmd_baton,
scratch_pool));
}
-/* Show differences between TMPFILE1 and TMPFILE2. PATH, REV1, and REV2 are
- used in the headers to indicate the file and revisions. If either
+/* Show differences between TMPFILE1 and TMPFILE2. DIFF_RELPATH, REV1, and
+ REV2 are used in the headers to indicate the file and revisions. If either
MIMETYPE1 or MIMETYPE2 indicate binary content, don't show a diff,
- but instead print a warning message. */
+ but instead print a warning message.
+
+ If FORCE_DIFF is TRUE, always write a diff, even for empty diffs.
+
+ Set *WROTE_HEADER to TRUE if a diff header was written */
static svn_error_t *
-diff_content_changed(const char *path,
+diff_content_changed(svn_boolean_t *wrote_header,
+ const char *diff_relpath,
const char *tmpfile1,
const char *tmpfile2,
svn_revnum_t rev1,
@@ -920,32 +708,33 @@ diff_content_changed(const char *path,
const char *mimetype1,
const char *mimetype2,
svn_diff_operation_kind_t operation,
+ svn_boolean_t force_diff,
const char *copyfrom_path,
- void *diff_baton)
+ svn_revnum_t copyfrom_rev,
+ struct diff_cmd_baton *diff_cmd_baton,
+ apr_pool_t *scratch_pool)
{
- struct diff_cmd_baton *diff_cmd_baton = diff_baton;
int exitcode;
- apr_pool_t *subpool = svn_pool_create(diff_cmd_baton->pool);
- svn_stream_t *os;
const char *rel_to_dir = diff_cmd_baton->relative_to_dir;
- apr_file_t *errfile = diff_cmd_baton->errfile;
+ svn_stream_t *errstream = diff_cmd_baton->errstream;
+ svn_stream_t *outstream = diff_cmd_baton->outstream;
const char *label1, *label2;
svn_boolean_t mt1_binary = FALSE, mt2_binary = FALSE;
- const char *path1, *path2;
+ const char *index_path = diff_relpath;
+ const char *path1 = diff_cmd_baton->orig_path_1;
+ const char *path2 = diff_cmd_baton->orig_path_2;
- /* Get a stream from our output file. */
- os = svn_stream_from_aprfile2(diff_cmd_baton->outfile, TRUE, subpool);
+ /* If only property differences are shown, there's nothing to do. */
+ if (diff_cmd_baton->properties_only)
+ return SVN_NO_ERROR;
/* Generate the diff headers. */
+ SVN_ERR(adjust_paths_for_diff_labels(&index_path, &path1, &path2,
+ rel_to_dir, diff_cmd_baton->anchor,
+ scratch_pool, scratch_pool));
- path1 = apr_pstrdup(subpool, diff_cmd_baton->orig_path_1);
- path2 = apr_pstrdup(subpool, diff_cmd_baton->orig_path_2);
-
- SVN_ERR(adjust_paths_for_diff_labels(&path, &path1, &path2,
- rel_to_dir, subpool));
-
- label1 = diff_label(path1, rev1, subpool);
- label2 = diff_label(path2, rev2, subpool);
+ label1 = diff_label(path1, rev1, scratch_pool);
+ label2 = diff_label(path2, rev2, scratch_pool);
/* Possible easy-out: if either mime-type is binary and force was not
specified, don't attempt to generate a viewable diff at all.
@@ -958,66 +747,115 @@ diff_content_changed(const char *path,
if (! diff_cmd_baton->force_binary && (mt1_binary || mt2_binary))
{
/* Print out the diff header. */
- SVN_ERR(svn_stream_printf_from_utf8
- (os, diff_cmd_baton->header_encoding, subpool,
- "Index: %s" APR_EOL_STR "%s" APR_EOL_STR, path, equal_string));
+ SVN_ERR(svn_stream_printf_from_utf8(outstream,
+ diff_cmd_baton->header_encoding, scratch_pool,
+ "Index: %s" APR_EOL_STR
+ SVN_DIFF__EQUAL_STRING APR_EOL_STR,
+ index_path));
/* ### Print git diff headers. */
- SVN_ERR(svn_stream_printf_from_utf8
- (os, diff_cmd_baton->header_encoding, subpool,
+ SVN_ERR(svn_stream_printf_from_utf8(outstream,
+ diff_cmd_baton->header_encoding, scratch_pool,
_("Cannot display: file marked as a binary type.%s"),
APR_EOL_STR));
if (mt1_binary && !mt2_binary)
- SVN_ERR(svn_stream_printf_from_utf8
- (os, diff_cmd_baton->header_encoding, subpool,
+ SVN_ERR(svn_stream_printf_from_utf8(outstream,
+ diff_cmd_baton->header_encoding, scratch_pool,
"svn:mime-type = %s" APR_EOL_STR, mimetype1));
else if (mt2_binary && !mt1_binary)
- SVN_ERR(svn_stream_printf_from_utf8
- (os, diff_cmd_baton->header_encoding, subpool,
+ SVN_ERR(svn_stream_printf_from_utf8(outstream,
+ diff_cmd_baton->header_encoding, scratch_pool,
"svn:mime-type = %s" APR_EOL_STR, mimetype2));
else if (mt1_binary && mt2_binary)
{
if (strcmp(mimetype1, mimetype2) == 0)
- SVN_ERR(svn_stream_printf_from_utf8
- (os, diff_cmd_baton->header_encoding, subpool,
+ SVN_ERR(svn_stream_printf_from_utf8(outstream,
+ diff_cmd_baton->header_encoding, scratch_pool,
"svn:mime-type = %s" APR_EOL_STR,
mimetype1));
else
- SVN_ERR(svn_stream_printf_from_utf8
- (os, diff_cmd_baton->header_encoding, subpool,
+ SVN_ERR(svn_stream_printf_from_utf8(outstream,
+ diff_cmd_baton->header_encoding, scratch_pool,
"svn:mime-type = (%s, %s)" APR_EOL_STR,
mimetype1, mimetype2));
}
/* Exit early. */
- svn_pool_destroy(subpool);
return SVN_NO_ERROR;
}
if (diff_cmd_baton->diff_cmd)
{
+ apr_file_t *outfile;
+ apr_file_t *errfile;
+ const char *outfilename;
+ const char *errfilename;
+ svn_stream_t *stream;
+
/* Print out the diff header. */
- SVN_ERR(svn_stream_printf_from_utf8
- (os, diff_cmd_baton->header_encoding, subpool,
- "Index: %s" APR_EOL_STR "%s" APR_EOL_STR, path, equal_string));
- /* Close the stream (flush) */
- SVN_ERR(svn_stream_close(os));
+ SVN_ERR(svn_stream_printf_from_utf8(outstream,
+ diff_cmd_baton->header_encoding, scratch_pool,
+ "Index: %s" APR_EOL_STR
+ SVN_DIFF__EQUAL_STRING APR_EOL_STR,
+ index_path));
/* ### Do we want to add git diff headers here too? I'd say no. The
* ### 'Index' and '===' line is something subversion has added. The rest
* ### is up to the external diff application. We may be dealing with
* ### a non-git compatible diff application.*/
+ /* We deal in streams, but svn_io_run_diff2() deals in file handles,
+ so we may need to make temporary files and then copy the contents
+ to our stream. */
+ outfile = svn_stream__aprfile(outstream);
+ if (outfile)
+ outfilename = NULL;
+ else
+ SVN_ERR(svn_io_open_unique_file3(&outfile, &outfilename, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ scratch_pool, scratch_pool));
+
+ errfile = svn_stream__aprfile(errstream);
+ if (errfile)
+ errfilename = NULL;
+ else
+ SVN_ERR(svn_io_open_unique_file3(&errfile, &errfilename, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ scratch_pool, scratch_pool));
+
SVN_ERR(svn_io_run_diff2(".",
diff_cmd_baton->options.for_external.argv,
diff_cmd_baton->options.for_external.argc,
label1, label2,
tmpfile1, tmpfile2,
- &exitcode, diff_cmd_baton->outfile, errfile,
- diff_cmd_baton->diff_cmd, subpool));
+ &exitcode, outfile, errfile,
+ diff_cmd_baton->diff_cmd, scratch_pool));
+
+ /* Now, open and copy our files to our output streams. */
+ if (outfilename)
+ {
+ SVN_ERR(svn_io_file_close(outfile, scratch_pool));
+ SVN_ERR(svn_stream_open_readonly(&stream, outfilename,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_stream_copy3(stream, svn_stream_disown(outstream,
+ scratch_pool),
+ NULL, NULL, scratch_pool));
+ }
+ if (errfilename)
+ {
+ SVN_ERR(svn_io_file_close(errfile, scratch_pool));
+ SVN_ERR(svn_stream_open_readonly(&stream, errfilename,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_stream_copy3(stream, svn_stream_disown(errstream,
+ scratch_pool),
+ NULL, NULL, scratch_pool));
+ }
+
+ /* We have a printed a diff for this path, mark it as visited. */
+ *wrote_header = TRUE;
}
else /* use libsvn_diff to generate the diff */
{
@@ -1025,68 +863,69 @@ diff_content_changed(const char *path,
SVN_ERR(svn_diff_file_diff_2(&diff, tmpfile1, tmpfile2,
diff_cmd_baton->options.for_internal,
- subpool));
+ scratch_pool));
- if (svn_diff_contains_diffs(diff) || diff_cmd_baton->force_empty ||
- diff_cmd_baton->use_git_diff_format)
+ if (force_diff
+ || diff_cmd_baton->use_git_diff_format
+ || svn_diff_contains_diffs(diff))
{
/* Print out the diff header. */
- SVN_ERR(svn_stream_printf_from_utf8
- (os, diff_cmd_baton->header_encoding, subpool,
- "Index: %s" APR_EOL_STR "%s" APR_EOL_STR,
- path, equal_string));
+ SVN_ERR(svn_stream_printf_from_utf8(outstream,
+ diff_cmd_baton->header_encoding, scratch_pool,
+ "Index: %s" APR_EOL_STR
+ SVN_DIFF__EQUAL_STRING APR_EOL_STR,
+ index_path));
if (diff_cmd_baton->use_git_diff_format)
{
- const char *tmp_path1, *tmp_path2;
- SVN_ERR(adjust_relative_to_repos_root(
- &tmp_path1, path, diff_cmd_baton->orig_path_1,
- diff_cmd_baton->ra_session, diff_cmd_baton->wc_ctx,
- diff_cmd_baton->wc_root_abspath, subpool));
- SVN_ERR(adjust_relative_to_repos_root(
- &tmp_path2, path, diff_cmd_baton->orig_path_2,
- diff_cmd_baton->ra_session, diff_cmd_baton->wc_ctx,
- diff_cmd_baton->wc_root_abspath, subpool));
- SVN_ERR(print_git_diff_header(os, &label1, &label2, operation,
- tmp_path1, tmp_path2, rev1, rev2,
+ const char *repos_relpath1;
+ const char *repos_relpath2;
+ SVN_ERR(make_repos_relpath(&repos_relpath1, diff_relpath,
+ diff_cmd_baton->orig_path_1,
+ diff_cmd_baton->ra_session,
+ diff_cmd_baton->wc_ctx,
+ diff_cmd_baton->anchor,
+ scratch_pool, scratch_pool));
+ SVN_ERR(make_repos_relpath(&repos_relpath2, diff_relpath,
+ diff_cmd_baton->orig_path_2,
+ diff_cmd_baton->ra_session,
+ diff_cmd_baton->wc_ctx,
+ diff_cmd_baton->anchor,
+ scratch_pool, scratch_pool));
+ SVN_ERR(print_git_diff_header(outstream, &label1, &label2,
+ operation,
+ repos_relpath1, repos_relpath2,
+ rev1, rev2,
copyfrom_path,
+ copyfrom_rev,
diff_cmd_baton->header_encoding,
- diff_cmd_baton->ra_session,
- diff_cmd_baton->wc_ctx,
- diff_cmd_baton->wc_root_abspath,
- subpool));
+ scratch_pool));
}
/* Output the actual diff */
- if (svn_diff_contains_diffs(diff) || diff_cmd_baton->force_empty)
- SVN_ERR(svn_diff_file_output_unified3
- (os, diff, tmpfile1, tmpfile2, label1, label2,
+ if (force_diff || svn_diff_contains_diffs(diff))
+ SVN_ERR(svn_diff_file_output_unified3(outstream, diff,
+ tmpfile1, tmpfile2, label1, label2,
diff_cmd_baton->header_encoding, rel_to_dir,
diff_cmd_baton->options.for_internal->show_c_function,
- subpool));
+ scratch_pool));
/* We have a printed a diff for this path, mark it as visited. */
- mark_path_as_visited(diff_cmd_baton, path);
+ *wrote_header = TRUE;
}
-
- /* Close the stream (flush) */
- SVN_ERR(svn_stream_close(os));
}
/* ### todo: someday we'll need to worry about whether we're going
to need to write a diff plug-in mechanism that makes use of the
two paths, instead of just blindly running SVN_CLIENT_DIFF. */
- /* Destroy the subpool. */
- svn_pool_destroy(subpool);
-
return SVN_NO_ERROR;
}
static svn_error_t *
diff_file_opened(svn_boolean_t *tree_conflicted,
svn_boolean_t *skip,
- const char *path,
+ const char *diff_relpath,
svn_revnum_t rev,
void *diff_baton,
apr_pool_t *scratch_pool)
@@ -1099,7 +938,7 @@ static svn_error_t *
diff_file_changed(svn_wc_notify_state_t *content_state,
svn_wc_notify_state_t *prop_state,
svn_boolean_t *tree_conflicted,
- const char *path,
+ const char *diff_relpath,
const char *tmpfile1,
const char *tmpfile2,
svn_revnum_t rev1,
@@ -1112,23 +951,33 @@ diff_file_changed(svn_wc_notify_state_t *content_state,
apr_pool_t *scratch_pool)
{
struct diff_cmd_baton *diff_cmd_baton = diff_baton;
- if (diff_cmd_baton->anchor)
- path = svn_dirent_join(diff_cmd_baton->anchor, path, scratch_pool);
+ svn_boolean_t wrote_header = FALSE;
+
+ /* During repos->wc diff of a copy revision numbers obtained
+ * from the working copy are always SVN_INVALID_REVNUM. */
+ if (diff_cmd_baton->repos_wc_diff_target_is_copy)
+ {
+ if (rev1 == SVN_INVALID_REVNUM &&
+ diff_cmd_baton->revnum1 != SVN_INVALID_REVNUM)
+ rev1 = diff_cmd_baton->revnum1;
+
+ if (rev2 == SVN_INVALID_REVNUM &&
+ diff_cmd_baton->revnum2 != SVN_INVALID_REVNUM)
+ rev2 = diff_cmd_baton->revnum2;
+ }
+
if (tmpfile1)
- SVN_ERR(diff_content_changed(path,
+ SVN_ERR(diff_content_changed(&wrote_header, diff_relpath,
tmpfile1, tmpfile2, rev1, rev2,
mimetype1, mimetype2,
- svn_diff_op_modified, NULL, diff_baton));
+ svn_diff_op_modified, FALSE,
+ NULL,
+ SVN_INVALID_REVNUM, diff_cmd_baton,
+ scratch_pool));
if (prop_changes->nelts > 0)
- SVN_ERR(diff_props_changed(prop_state, tree_conflicted,
- path, FALSE, prop_changes,
- original_props, diff_baton, scratch_pool));
- if (content_state)
- *content_state = svn_wc_notify_state_unknown;
- if (prop_state)
- *prop_state = svn_wc_notify_state_unknown;
- if (tree_conflicted)
- *tree_conflicted = FALSE;
+ SVN_ERR(diff_props_changed(diff_relpath, rev1, rev2, FALSE, prop_changes,
+ original_props, !wrote_header,
+ diff_cmd_baton, scratch_pool));
return SVN_NO_ERROR;
}
@@ -1141,7 +990,7 @@ static svn_error_t *
diff_file_added(svn_wc_notify_state_t *content_state,
svn_wc_notify_state_t *prop_state,
svn_boolean_t *tree_conflicted,
- const char *path,
+ const char *diff_relpath,
const char *tmpfile1,
const char *tmpfile2,
svn_revnum_t rev1,
@@ -1156,126 +1005,151 @@ diff_file_added(svn_wc_notify_state_t *content_state,
apr_pool_t *scratch_pool)
{
struct diff_cmd_baton *diff_cmd_baton = diff_baton;
+ svn_boolean_t wrote_header = FALSE;
- if (diff_cmd_baton->anchor)
- path = svn_dirent_join(diff_cmd_baton->anchor, path, scratch_pool);
+ /* During repos->wc diff of a copy revision numbers obtained
+ * from the working copy are always SVN_INVALID_REVNUM. */
+ if (diff_cmd_baton->repos_wc_diff_target_is_copy)
+ {
+ if (rev1 == SVN_INVALID_REVNUM &&
+ diff_cmd_baton->revnum1 != SVN_INVALID_REVNUM)
+ rev1 = diff_cmd_baton->revnum1;
+
+ if (rev2 == SVN_INVALID_REVNUM &&
+ diff_cmd_baton->revnum2 != SVN_INVALID_REVNUM)
+ rev2 = diff_cmd_baton->revnum2;
+ }
- /* We want diff_file_changed to unconditionally show diffs, even if
- the diff is empty (as would be the case if an empty file were
- added.) It's important, because 'patch' would still see an empty
- diff and create an empty file. It's also important to let the
- user see that *something* happened. */
- diff_cmd_baton->force_empty = TRUE;
+ if (diff_cmd_baton->no_copyfrom_on_add
+ && (copyfrom_path || SVN_IS_VALID_REVNUM(copyfrom_revision)))
+ {
+ apr_hash_t *empty_hash = apr_hash_make(scratch_pool);
+ apr_array_header_t *new_changes;
+
+ /* Rebase changes on having no left source. */
+ if (!diff_cmd_baton->empty_file)
+ SVN_ERR(svn_io_open_unique_file3(NULL, &diff_cmd_baton->empty_file,
+ NULL, svn_io_file_del_on_pool_cleanup,
+ diff_cmd_baton->pool, scratch_pool));
+
+ SVN_ERR(svn_prop_diffs(&new_changes,
+ svn_prop__patch(original_props, prop_changes,
+ scratch_pool),
+ empty_hash,
+ scratch_pool));
+
+ tmpfile1 = diff_cmd_baton->empty_file;
+ prop_changes = new_changes;
+ original_props = empty_hash;
+ copyfrom_revision = SVN_INVALID_REVNUM;
+ }
- if (tmpfile1 && copyfrom_path)
- SVN_ERR(diff_content_changed(path,
+ if (diff_cmd_baton->no_diff_added)
+ {
+ const char *index_path = diff_relpath;
+
+ if (diff_cmd_baton->anchor)
+ index_path = svn_dirent_join(diff_cmd_baton->anchor, diff_relpath,
+ scratch_pool);
+
+ SVN_ERR(svn_stream_printf_from_utf8(diff_cmd_baton->outstream,
+ diff_cmd_baton->header_encoding, scratch_pool,
+ "Index: %s (added)" APR_EOL_STR
+ SVN_DIFF__EQUAL_STRING APR_EOL_STR,
+ index_path));
+ wrote_header = TRUE;
+ }
+ else if (tmpfile1 && copyfrom_path)
+ SVN_ERR(diff_content_changed(&wrote_header, diff_relpath,
tmpfile1, tmpfile2, rev1, rev2,
mimetype1, mimetype2,
- svn_diff_op_copied, copyfrom_path,
- diff_baton));
+ svn_diff_op_copied,
+ TRUE /* force diff output */,
+ copyfrom_path,
+ copyfrom_revision, diff_cmd_baton,
+ scratch_pool));
else if (tmpfile1)
- SVN_ERR(diff_content_changed(path,
+ SVN_ERR(diff_content_changed(&wrote_header, diff_relpath,
tmpfile1, tmpfile2, rev1, rev2,
mimetype1, mimetype2,
- svn_diff_op_added, NULL, diff_baton));
+ svn_diff_op_added,
+ TRUE /* force diff output */,
+ NULL, SVN_INVALID_REVNUM,
+ diff_cmd_baton, scratch_pool));
+
if (prop_changes->nelts > 0)
- SVN_ERR(diff_props_changed(prop_state, tree_conflicted,
- path, FALSE, prop_changes,
- original_props, diff_baton, scratch_pool));
- if (content_state)
- *content_state = svn_wc_notify_state_unknown;
- if (prop_state)
- *prop_state = svn_wc_notify_state_unknown;
- if (tree_conflicted)
- *tree_conflicted = FALSE;
-
- diff_cmd_baton->force_empty = FALSE;
+ SVN_ERR(diff_props_changed(diff_relpath, rev1, rev2,
+ FALSE, prop_changes,
+ original_props, ! wrote_header,
+ diff_cmd_baton, scratch_pool));
return SVN_NO_ERROR;
}
/* An svn_wc_diff_callbacks4_t function. */
static svn_error_t *
-diff_file_deleted_with_diff(svn_wc_notify_state_t *state,
- svn_boolean_t *tree_conflicted,
- const char *path,
- const char *tmpfile1,
- const char *tmpfile2,
- const char *mimetype1,
- const char *mimetype2,
- apr_hash_t *original_props,
- void *diff_baton,
- apr_pool_t *scratch_pool)
+diff_file_deleted(svn_wc_notify_state_t *state,
+ svn_boolean_t *tree_conflicted,
+ const char *diff_relpath,
+ const char *tmpfile1,
+ const char *tmpfile2,
+ const char *mimetype1,
+ const char *mimetype2,
+ apr_hash_t *original_props,
+ void *diff_baton,
+ apr_pool_t *scratch_pool)
{
struct diff_cmd_baton *diff_cmd_baton = diff_baton;
- if (diff_cmd_baton->anchor)
- path = svn_dirent_join(diff_cmd_baton->anchor, path, scratch_pool);
+ if (diff_cmd_baton->no_diff_deleted)
+ {
+ const char *index_path = diff_relpath;
- if (tmpfile1)
- SVN_ERR(diff_content_changed(path,
- tmpfile1, tmpfile2, diff_cmd_baton->revnum1,
- diff_cmd_baton->revnum2,
- mimetype1, mimetype2,
- svn_diff_op_deleted, NULL, diff_baton));
+ if (diff_cmd_baton->anchor)
+ index_path = svn_dirent_join(diff_cmd_baton->anchor, diff_relpath,
+ scratch_pool);
- /* We don't list all the deleted properties. */
+ SVN_ERR(svn_stream_printf_from_utf8(diff_cmd_baton->outstream,
+ diff_cmd_baton->header_encoding, scratch_pool,
+ "Index: %s (deleted)" APR_EOL_STR
+ SVN_DIFF__EQUAL_STRING APR_EOL_STR,
+ index_path));
+ }
+ else
+ {
+ svn_boolean_t wrote_header = FALSE;
+ if (tmpfile1)
+ SVN_ERR(diff_content_changed(&wrote_header, diff_relpath,
+ tmpfile1, tmpfile2,
+ diff_cmd_baton->revnum1,
+ diff_cmd_baton->revnum2,
+ mimetype1, mimetype2,
+ svn_diff_op_deleted, FALSE,
+ NULL, SVN_INVALID_REVNUM,
+ diff_cmd_baton,
+ scratch_pool));
+
+ /* Should we also report the properties as deleted? */
+ }
- if (state)
- *state = svn_wc_notify_state_unknown;
- if (tree_conflicted)
- *tree_conflicted = FALSE;
+ /* We don't list all the deleted properties. */
return SVN_NO_ERROR;
}
/* An svn_wc_diff_callbacks4_t function. */
static svn_error_t *
-diff_file_deleted_no_diff(svn_wc_notify_state_t *state,
- svn_boolean_t *tree_conflicted,
- const char *path,
- const char *tmpfile1,
- const char *tmpfile2,
- const char *mimetype1,
- const char *mimetype2,
- apr_hash_t *original_props,
- void *diff_baton,
- apr_pool_t *scratch_pool)
-{
- struct diff_cmd_baton *diff_cmd_baton = diff_baton;
-
- if (diff_cmd_baton->anchor)
- path = svn_dirent_join(diff_cmd_baton->anchor, path, scratch_pool);
-
- if (state)
- *state = svn_wc_notify_state_unknown;
- if (tree_conflicted)
- *tree_conflicted = FALSE;
-
- return file_printf_from_utf8
- (diff_cmd_baton->outfile,
- diff_cmd_baton->header_encoding,
- "Index: %s (deleted)" APR_EOL_STR "%s" APR_EOL_STR,
- path, equal_string);
-}
-
-/* An svn_wc_diff_callbacks4_t function. */
-static svn_error_t *
diff_dir_added(svn_wc_notify_state_t *state,
svn_boolean_t *tree_conflicted,
svn_boolean_t *skip,
svn_boolean_t *skip_children,
- const char *path,
+ const char *diff_relpath,
svn_revnum_t rev,
const char *copyfrom_path,
svn_revnum_t copyfrom_revision,
void *diff_baton,
apr_pool_t *scratch_pool)
{
- /*struct diff_cmd_baton *diff_cmd_baton = diff_baton;
- if (diff_cmd_baton->anchor)
- path = svn_dirent_join(diff_cmd_baton->anchor, path, scratch_pool);*/
-
/* Do nothing. */
return SVN_NO_ERROR;
@@ -1285,14 +1159,10 @@ diff_dir_added(svn_wc_notify_state_t *state,
static svn_error_t *
diff_dir_deleted(svn_wc_notify_state_t *state,
svn_boolean_t *tree_conflicted,
- const char *path,
+ const char *diff_relpath,
void *diff_baton,
apr_pool_t *scratch_pool)
{
- /*struct diff_cmd_baton *diff_cmd_baton = diff_baton;
- if (diff_cmd_baton->anchor)
- path = svn_dirent_join(diff_cmd_baton->anchor, path, scratch_pool);*/
-
/* Do nothing. */
return SVN_NO_ERROR;
@@ -1303,15 +1173,11 @@ static svn_error_t *
diff_dir_opened(svn_boolean_t *tree_conflicted,
svn_boolean_t *skip,
svn_boolean_t *skip_children,
- const char *path,
+ const char *diff_relpath,
svn_revnum_t rev,
void *diff_baton,
apr_pool_t *scratch_pool)
{
- /*struct diff_cmd_baton *diff_cmd_baton = diff_baton;
- if (diff_cmd_baton->anchor)
- path = svn_dirent_join(diff_cmd_baton->anchor, path, scratch_pool);*/
-
/* Do nothing. */
return SVN_NO_ERROR;
@@ -1322,20 +1188,28 @@ static svn_error_t *
diff_dir_closed(svn_wc_notify_state_t *contentstate,
svn_wc_notify_state_t *propstate,
svn_boolean_t *tree_conflicted,
- const char *path,
+ const char *diff_relpath,
svn_boolean_t dir_was_added,
void *diff_baton,
apr_pool_t *scratch_pool)
{
- /*struct diff_cmd_baton *diff_cmd_baton = diff_baton;
- if (diff_cmd_baton->anchor)
- path = svn_dirent_join(diff_cmd_baton->anchor, path, scratch_pool);*/
-
/* Do nothing. */
return SVN_NO_ERROR;
}
+static const svn_wc_diff_callbacks4_t diff_callbacks =
+{
+ diff_file_opened,
+ diff_file_changed,
+ diff_file_added,
+ diff_file_deleted,
+ diff_dir_deleted,
+ diff_dir_opened,
+ diff_dir_added,
+ diff_dir_props_changed,
+ diff_dir_closed
+};
/*-----------------------------------------------------------------*/
@@ -1347,14 +1221,14 @@ diff_dir_closed(svn_wc_notify_state_t *contentstate,
this knowledge has been grokked yet.
There are five cases:
- 1. path is not an URL and start_revision != end_revision
- 2. path is not an URL and start_revision == end_revision
- 3. path is an URL and start_revision != end_revision
- 4. path is an URL and start_revision == end_revision
- 5. path is not an URL and no revisions given
+ 1. path is not a URL and start_revision != end_revision
+ 2. path is not a URL and start_revision == end_revision
+ 3. path is a URL and start_revision != end_revision
+ 4. path is a URL and start_revision == end_revision
+ 5. path is not a URL and no revisions given
With only one distinct revision the working copy provides the
- other. When path is an URL there is no working copy. Thus
+ other. When path is a URL there is no working copy. Thus
1: compare repository versions for URL coresponding to working copy
2: compare working copy against repository version
@@ -1366,47 +1240,18 @@ diff_dir_closed(svn_wc_notify_state_t *contentstate,
the user specifies two dates that resolve to the same revision. */
-
-
-/* Helper function: given a working-copy ABSPATH_OR_URL, return its
- associated url in *URL, allocated in RESULT_POOL. If ABSPATH_OR_URL is
- *already* a URL, that's fine, return ABSPATH_OR_URL allocated in
- RESULT_POOL.
-
- Use SCRATCH_POOL for temporary allocations. */
-static svn_error_t *
-convert_to_url(const char **url,
- svn_wc_context_t *wc_ctx,
- const char *abspath_or_url,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- if (svn_path_is_url(abspath_or_url))
- {
- *url = apr_pstrdup(result_pool, abspath_or_url);
- return SVN_NO_ERROR;
- }
-
- SVN_ERR(svn_wc__node_get_url(url, wc_ctx, abspath_or_url,
- result_pool, scratch_pool));
- if (! *url)
- return svn_error_createf(SVN_ERR_ENTRY_MISSING_URL, NULL,
- _("Path '%s' has no URL"),
- svn_dirent_local_style(abspath_or_url,
- scratch_pool));
- return SVN_NO_ERROR;
-}
-
-/** Check if paths PATH1 and PATH2 are urls and if the revisions REVISION1
- * and REVISION2 are local. If PEG_REVISION is not unspecified, ensure that
- * at least one of the two revisions is non-local.
- * If PATH1 can only be found in the repository, set *IS_REPOS1 to TRUE.
- * If PATH2 can only be found in the repository, set *IS_REPOS2 to TRUE. */
+/** Check if paths PATH_OR_URL1 and PATH_OR_URL2 are urls and if the
+ * revisions REVISION1 and REVISION2 are local. If PEG_REVISION is not
+ * unspecified, ensure that at least one of the two revisions is not
+ * BASE or WORKING.
+ * If PATH_OR_URL1 can only be found in the repository, set *IS_REPOS1
+ * to TRUE. If PATH_OR_URL2 can only be found in the repository, set
+ * *IS_REPOS2 to TRUE. */
static svn_error_t *
check_paths(svn_boolean_t *is_repos1,
svn_boolean_t *is_repos2,
- const char *path1,
- const char *path2,
+ const char *path_or_url1,
+ const char *path_or_url2,
const svn_opt_revision_t *revision1,
const svn_opt_revision_t *revision2,
const svn_opt_revision_t *peg_revision)
@@ -1419,8 +1264,8 @@ check_paths(svn_boolean_t *is_repos1,
return svn_error_create(SVN_ERR_CLIENT_BAD_REVISION, NULL,
_("Not all required revisions are specified"));
- /* Revisions can be said to be local or remote. BASE and WORKING,
- for example, are local. */
+ /* Revisions can be said to be local or remote.
+ * BASE and WORKING are local revisions. */
is_local_rev1 =
((revision1->kind == svn_opt_revision_base)
|| (revision1->kind == svn_opt_revision_working));
@@ -1428,25 +1273,18 @@ check_paths(svn_boolean_t *is_repos1,
((revision2->kind == svn_opt_revision_base)
|| (revision2->kind == svn_opt_revision_working));
- if (peg_revision->kind != svn_opt_revision_unspecified)
- {
- if (is_local_rev1 && is_local_rev2)
- return svn_error_create(SVN_ERR_CLIENT_BAD_REVISION, NULL,
- _("At least one revision must be non-local "
- "for a pegged diff"));
+ if (peg_revision->kind != svn_opt_revision_unspecified &&
+ is_local_rev1 && is_local_rev2)
+ return svn_error_create(SVN_ERR_CLIENT_BAD_REVISION, NULL,
+ _("At least one revision must be something other "
+ "than BASE or WORKING when diffing a URL"));
- *is_repos1 = ! is_local_rev1 || svn_path_is_url(path1);
- *is_repos2 = ! is_local_rev2 || svn_path_is_url(path2);
- }
- else
- {
- /* Working copy paths with non-local revisions get turned into
- URLs. We don't do that here, though. We simply record that it
- needs to be done, which is information that helps us choose our
- diff helper function. */
- *is_repos1 = ! is_local_rev1 || svn_path_is_url(path1);
- *is_repos2 = ! is_local_rev2 || svn_path_is_url(path2);
- }
+ /* Working copy paths with non-local revisions get turned into
+ URLs. We don't do that here, though. We simply record that it
+ needs to be done, which is information that helps us choose our
+ diff helper function. */
+ *is_repos1 = ! is_local_rev1 || svn_path_is_url(path_or_url1);
+ *is_repos2 = ! is_local_rev2 || svn_path_is_url(path_or_url2);
return SVN_NO_ERROR;
}
@@ -1491,11 +1329,52 @@ check_diff_target_exists(const char *url,
return SVN_NO_ERROR;
}
-/** Prepare a repos repos diff between PATH1 and PATH2@PEG_REVISION,
- * in the revision range REVISION1:REVISION2.
+
+/* Return in *RESOLVED_URL the URL which PATH_OR_URL@PEG_REVISION has in
+ * REVISION. If the object has no location in REVISION, set *RESOLVED_URL
+ * to NULL. */
+static svn_error_t *
+resolve_pegged_diff_target_url(const char **resolved_url,
+ svn_ra_session_t *ra_session,
+ const char *path_or_url,
+ const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *revision,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
+{
+ svn_error_t *err;
+
+ /* Check if the PATH_OR_URL exists at REVISION. */
+ err = svn_client__repos_locations(resolved_url, NULL,
+ NULL, NULL,
+ ra_session,
+ path_or_url,
+ peg_revision,
+ revision,
+ NULL,
+ ctx, scratch_pool);
+ if (err)
+ {
+ if (err->apr_err == SVN_ERR_CLIENT_UNRELATED_RESOURCES ||
+ err->apr_err == SVN_ERR_FS_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ *resolved_url = NULL;
+ }
+ else
+ return svn_error_trace(err);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/** Prepare a repos repos diff between PATH_OR_URL1 and
+ * PATH_OR_URL2@PEG_REVISION, in the revision range REVISION1:REVISION2.
* Return URLs and peg revisions in *URL1, *REV1 and in *URL2, *REV2.
* Return suitable anchors in *ANCHOR1 and *ANCHOR2, and targets in
* *TARGET1 and *TARGET2, based on *URL1 and *URL2.
+ * Indicate the corresponding node kinds in *KIND1 and *KIND2, and verify
+ * that at least one of the diff targets exists.
* Set *BASE_PATH corresponding to the URL opened in the new *RA_SESSION
* which is pointing at *ANCHOR1.
* Use client context CTX. Do all allocations in POOL. */
@@ -1509,101 +1388,108 @@ diff_prepare_repos_repos(const char **url1,
const char **anchor2,
const char **target1,
const char **target2,
+ svn_node_kind_t *kind1,
+ svn_node_kind_t *kind2,
svn_ra_session_t **ra_session,
svn_client_ctx_t *ctx,
- const char *path1,
- const char *path2,
+ const char *path_or_url1,
+ const char *path_or_url2,
const svn_opt_revision_t *revision1,
const svn_opt_revision_t *revision2,
const svn_opt_revision_t *peg_revision,
apr_pool_t *pool)
{
- svn_node_kind_t kind1, kind2;
- const char *path2_abspath;
- const char *path1_abspath;
+ const char *abspath_or_url2;
+ const char *abspath_or_url1;
+ const char *repos_root_url;
+ const char *wri_abspath = NULL;
- if (!svn_path_is_url(path2))
- SVN_ERR(svn_dirent_get_absolute(&path2_abspath, path2,
- pool));
+ if (!svn_path_is_url(path_or_url2))
+ {
+ SVN_ERR(svn_dirent_get_absolute(&abspath_or_url2, path_or_url2, pool));
+ SVN_ERR(svn_wc__node_get_url(url2, ctx->wc_ctx, abspath_or_url2,
+ pool, pool));
+ wri_abspath = abspath_or_url2;
+ }
else
- path2_abspath = path2;
+ *url2 = abspath_or_url2 = apr_pstrdup(pool, path_or_url2);
- if (!svn_path_is_url(path1))
- SVN_ERR(svn_dirent_get_absolute(&path1_abspath, path1,
- pool));
+ if (!svn_path_is_url(path_or_url1))
+ {
+ SVN_ERR(svn_dirent_get_absolute(&abspath_or_url1, path_or_url1, pool));
+ SVN_ERR(svn_wc__node_get_url(url1, ctx->wc_ctx, abspath_or_url1,
+ pool, pool));
+ wri_abspath = abspath_or_url1;
+ }
else
- path1_abspath = path1;
-
- /* Figure out URL1 and URL2. */
- SVN_ERR(convert_to_url(url1, ctx->wc_ctx, path1_abspath,
- pool, pool));
- SVN_ERR(convert_to_url(url2, ctx->wc_ctx, path2_abspath,
- pool, pool));
+ *url1 = abspath_or_url1 = apr_pstrdup(pool, path_or_url1);
/* We need exactly one BASE_PATH, so we'll let the BASE_PATH
- calculated for PATH2 override the one for PATH1 (since the diff
- will be "applied" to URL2 anyway). */
+ calculated for PATH_OR_URL2 override the one for PATH_OR_URL1
+ (since the diff will be "applied" to URL2 anyway). */
*base_path = NULL;
- if (strcmp(*url1, path1) != 0)
- *base_path = path1;
- if (strcmp(*url2, path2) != 0)
- *base_path = path2;
+ if (strcmp(*url1, path_or_url1) != 0)
+ *base_path = path_or_url1;
+ if (strcmp(*url2, path_or_url2) != 0)
+ *base_path = path_or_url2;
- SVN_ERR(svn_client__open_ra_session_internal(ra_session, NULL, *url2,
- NULL, NULL, FALSE,
- TRUE, ctx, pool));
+ SVN_ERR(svn_client_open_ra_session2(ra_session, *url2, wri_abspath,
+ ctx, pool, pool));
/* If we are performing a pegged diff, we need to find out what our
actual URLs will be. */
if (peg_revision->kind != svn_opt_revision_unspecified)
{
- svn_opt_revision_t *start_ignore, *end_ignore;
- svn_error_t *err;
-
- err = svn_client__repos_locations(url1, &start_ignore,
- url2, &end_ignore,
- *ra_session,
- path2,
- peg_revision,
- revision1,
- revision2,
- ctx, pool);
- if (err)
+ const char *resolved_url1;
+ const char *resolved_url2;
+
+ SVN_ERR(resolve_pegged_diff_target_url(&resolved_url2, *ra_session,
+ path_or_url2, peg_revision,
+ revision2, ctx, pool));
+
+ SVN_ERR(svn_ra_reparent(*ra_session, *url1, pool));
+ SVN_ERR(resolve_pegged_diff_target_url(&resolved_url1, *ra_session,
+ path_or_url1, peg_revision,
+ revision1, ctx, pool));
+
+ /* Either or both URLs might have changed as a result of resolving
+ * the PATH_OR_URL@PEG_REVISION's history. If only one of the URLs
+ * could be resolved, use the same URL for URL1 and URL2, so we can
+ * show a diff that adds or removes the object (see issue #4153). */
+ if (resolved_url2)
{
- if (err->apr_err == SVN_ERR_CLIENT_UNRELATED_RESOURCES)
- {
- /* Don't give up just yet. A missing path might translate
- * into an addition in the diff. Below, we verify that each
- * URL exists on at least one side of the diff. */
- svn_error_clear(err);
- }
- else
- return svn_error_trace(err);
+ *url2 = resolved_url2;
+ if (!resolved_url1)
+ *url1 = resolved_url2;
}
- else
+ if (resolved_url1)
{
- /* Reparent the session, since *URL2 might have changed as a result
- the above call. */
- SVN_ERR(svn_ra_reparent(*ra_session, *url2, pool));
+ *url1 = resolved_url1;
+ if (!resolved_url2)
+ *url2 = resolved_url1;
}
+
+ /* Reparent the session, since *URL2 might have changed as a result
+ the above call. */
+ SVN_ERR(svn_ra_reparent(*ra_session, *url2, pool));
}
/* Resolve revision and get path kind for the second target. */
SVN_ERR(svn_client__get_revision_number(rev2, NULL, ctx->wc_ctx,
- (path2 == *url2) ? NULL : path2_abspath,
+ (path_or_url2 == *url2) ? NULL : abspath_or_url2,
*ra_session, revision2, pool));
- SVN_ERR(svn_ra_check_path(*ra_session, "", *rev2, &kind2, pool));
+ SVN_ERR(svn_ra_check_path(*ra_session, "", *rev2, kind2, pool));
/* Do the same for the first target. */
SVN_ERR(svn_ra_reparent(*ra_session, *url1, pool));
SVN_ERR(svn_client__get_revision_number(rev1, NULL, ctx->wc_ctx,
- (strcmp(path1, *url1) == 0) ? NULL : path1_abspath,
+ (strcmp(path_or_url1, *url1) == 0) ? NULL : abspath_or_url1,
*ra_session, revision1, pool));
- SVN_ERR(svn_ra_check_path(*ra_session, "", *rev1, &kind1, pool));
+ SVN_ERR(svn_ra_check_path(*ra_session, "", *rev1, kind1, pool));
/* Either both URLs must exist at their respective revisions,
* or one of them may be missing from one side of the diff. */
- if (kind1 == svn_node_none && kind2 == svn_node_none)
+ if (*kind1 == svn_node_none && *kind2 == svn_node_none)
{
if (strcmp(*url1, *url2) == 0)
return svn_error_createf(SVN_ERR_FS_NOT_FOUND, NULL,
@@ -1612,76 +1498,33 @@ diff_prepare_repos_repos(const char **url1,
*url1, *rev1, *rev2);
else
return svn_error_createf(SVN_ERR_FS_NOT_FOUND, NULL,
- _("Diff targets '%s and '%s' were not found "
+ _("Diff targets '%s' and '%s' were not found "
"in the repository at revisions '%ld' and "
"'%ld'"),
*url1, *url2, *rev1, *rev2);
}
- else if (kind1 == svn_node_none)
+ else if (*kind1 == svn_node_none)
SVN_ERR(check_diff_target_exists(*url1, *rev2, *rev1, *ra_session, pool));
- else if (kind2 == svn_node_none)
+ else if (*kind2 == svn_node_none)
SVN_ERR(check_diff_target_exists(*url2, *rev1, *rev2, *ra_session, pool));
+ SVN_ERR(svn_ra_get_repos_root2(*ra_session, &repos_root_url, pool));
+
/* Choose useful anchors and targets for our two URLs. */
*anchor1 = *url1;
*anchor2 = *url2;
*target1 = "";
*target2 = "";
- if ((kind1 == svn_node_none) || (kind2 == svn_node_none))
- {
- svn_node_kind_t kind;
- const char *repos_root;
- const char *new_anchor;
- svn_revnum_t rev;
-
- /* The diff target does not exist on one side of the diff.
- * This can happen if the target was added or deleted within the
- * revision range being diffed.
- * However, we don't know how deep within a added/deleted subtree the
- * diff target is. Find a common parent that exists on both sides of
- * the diff and use it as anchor for the diff operation.
- *
- * ### This can fail due to authz restrictions (like in issue #3242).
- * ### But it is the only option we have right now to try to get
- * ### a usable diff in this situation. */
-
- SVN_ERR(svn_ra_get_repos_root2(*ra_session, &repos_root, pool));
-
- /* Since we already know that one of the URLs does exist,
- * look for an existing parent of the URL which doesn't exist. */
- new_anchor = (kind1 == svn_node_none ? *anchor1 : *anchor2);
- rev = (kind1 == svn_node_none ? *rev1 : *rev2);
- do
- {
- if (strcmp(new_anchor, repos_root) != 0)
- {
- new_anchor = svn_path_uri_decode(svn_uri_dirname(new_anchor,
- pool),
- pool);
- if (*base_path)
- *base_path = svn_dirent_dirname(*base_path, pool);
- }
- SVN_ERR(svn_ra_reparent(*ra_session, new_anchor, pool));
- SVN_ERR(svn_ra_check_path(*ra_session, "", rev, &kind, pool));
-
- }
- while (kind != svn_node_dir);
- *anchor1 = *anchor2 = new_anchor;
- /* Diff targets must be relative to the new anchor. */
- *target1 = svn_uri_skip_ancestor(new_anchor, *url1, pool);
- *target2 = svn_uri_skip_ancestor(new_anchor, *url2, pool);
- SVN_ERR_ASSERT(*target1 && *target2);
- if (kind1 == svn_node_none)
- kind1 = svn_node_dir;
- else
- kind2 = svn_node_dir;
- }
- else if ((kind1 == svn_node_file) || (kind2 == svn_node_file))
+ /* If none of the targets is the repository root open the parent directory
+ to allow describing replacement of the target itself */
+ if (strcmp(*url1, repos_root_url) != 0
+ && strcmp(*url2, repos_root_url) != 0)
{
svn_uri_split(anchor1, target1, *url1, pool);
svn_uri_split(anchor2, target2, *url2, pool);
- if (*base_path)
+ if (*base_path
+ && (*kind1 == svn_node_file || *kind2 == svn_node_file))
*base_path = svn_dirent_dirname(*base_path, pool);
SVN_ERR(svn_ra_reparent(*ra_session, *anchor1, pool));
}
@@ -1691,8 +1534,8 @@ diff_prepare_repos_repos(const char **url1,
/* A Theoretical Note From Ben, regarding do_diff().
- This function is really svn_client_diff5(). If you read the public
- API description for svn_client_diff5(), it sounds quite Grand. It
+ This function is really svn_client_diff6(). If you read the public
+ API description for svn_client_diff6(), it sounds quite Grand. It
sounds really generalized and abstract and beautiful: that it will
diff any two paths, be they working-copy paths or URLs, at any two
revisions.
@@ -1708,11 +1551,15 @@ diff_prepare_repos_repos(const char **url1,
- svn_client__get_diff_editor: compares some URL1@REV1 vs. URL2@REV2
+ Since Subversion 1.8 we also have a variant of svn_wc_diff called
+ svn_client__arbitrary_nodes_diff, that allows handling WORKING-WORKING
+ comparisions between nodes in the working copy.
+
So the truth of the matter is, if the caller's arguments can't be
- pigeonholed into one of these three use-cases, we currently bail
- with a friendly apology.
+ pigeonholed into one of these use-cases, we currently bail with a
+ friendly apology.
- Perhaps someday a brave soul will truly make svn_client_diff5
+ Perhaps someday a brave soul will truly make svn_client_diff6()
perfectly general. For now, we live with the 90% case. Certainly,
the commandline client only calls this function in legal ways.
When there are other users of svn_client.h, maybe this will become
@@ -1725,17 +1572,16 @@ static svn_error_t *
unsupported_diff_error(svn_error_t *child_err)
{
return svn_error_create(SVN_ERR_INCORRECT_PARAMS, child_err,
- _("Sorry, svn_client_diff5 was called in a way "
+ _("Sorry, svn_client_diff6 was called in a way "
"that is not yet supported"));
}
-
/* Perform a diff between two working-copy paths.
PATH1 and PATH2 are both working copy paths. REVISION1 and
REVISION2 are their respective revisions.
- All other options are the same as those passed to svn_client_diff5(). */
+ All other options are the same as those passed to svn_client_diff6(). */
static svn_error_t *
diff_wc_wc(const char *path1,
const svn_opt_revision_t *revision1,
@@ -1765,11 +1611,12 @@ diff_wc_wc(const char *path1,
if ((strcmp(path1, path2) != 0)
|| (! ((revision1->kind == svn_opt_revision_base)
&& (revision2->kind == svn_opt_revision_working))))
- return unsupported_diff_error
- (svn_error_create
- (SVN_ERR_INCORRECT_PARAMS, NULL,
- _("Only diffs between a path's text-base "
- "and its working files are supported at this time")));
+ return unsupported_diff_error(
+ svn_error_create(SVN_ERR_INCORRECT_PARAMS, NULL,
+ _("Only diffs between a path's text-base "
+ "and its working files are supported at this time"
+ )));
+
/* Resolve named revisions to real numbers. */
err = svn_client__get_revision_number(&callback_baton->revnum1, NULL,
@@ -1790,7 +1637,8 @@ diff_wc_wc(const char *path1,
callback_baton->revnum2 = SVN_INVALID_REVNUM; /* WC */
- SVN_ERR(svn_wc_read_kind(&kind, ctx->wc_ctx, abspath1, FALSE, pool));
+ SVN_ERR(svn_wc_read_kind2(&kind, ctx->wc_ctx, abspath1,
+ TRUE, FALSE, pool));
if (kind != svn_node_dir)
callback_baton->anchor = svn_dirent_dirname(path1, pool);
@@ -1808,22 +1656,21 @@ diff_wc_wc(const char *path1,
return SVN_NO_ERROR;
}
-
/* Perform a diff between two repository paths.
- PATH1 and PATH2 may be either URLs or the working copy paths.
+ PATH_OR_URL1 and PATH_OR_URL2 may be either URLs or the working copy paths.
REVISION1 and REVISION2 are their respective revisions.
- If PEG_REVISION is specified, PATH2 is the path at the peg revision,
+ If PEG_REVISION is specified, PATH_OR_URL2 is the path at the peg revision,
and the actual two paths compared are determined by following copy
- history from PATH2.
+ history from PATH_OR_URL2.
- All other options are the same as those passed to svn_client_diff5(). */
+ All other options are the same as those passed to svn_client_diff6(). */
static svn_error_t *
diff_repos_repos(const svn_wc_diff_callbacks4_t *callbacks,
struct diff_cmd_baton *callback_baton,
svn_client_ctx_t *ctx,
- const char *path1,
- const char *path2,
+ const char *path_or_url1,
+ const char *path_or_url2,
const svn_opt_revision_t *revision1,
const svn_opt_revision_t *revision2,
const svn_opt_revision_t *peg_revision,
@@ -1839,24 +1686,44 @@ diff_repos_repos(const svn_wc_diff_callbacks4_t *callbacks,
const svn_delta_editor_t *diff_editor;
void *diff_edit_baton;
+ const svn_diff_tree_processor_t *diff_processor;
+
const char *url1;
const char *url2;
const char *base_path;
svn_revnum_t rev1;
svn_revnum_t rev2;
+ svn_node_kind_t kind1;
+ svn_node_kind_t kind2;
const char *anchor1;
const char *anchor2;
const char *target1;
const char *target2;
svn_ra_session_t *ra_session;
+ const char *wri_abspath = NULL;
/* Prepare info for the repos repos diff. */
SVN_ERR(diff_prepare_repos_repos(&url1, &url2, &base_path, &rev1, &rev2,
&anchor1, &anchor2, &target1, &target2,
- &ra_session, ctx, path1, path2,
+ &kind1, &kind2, &ra_session,
+ ctx, path_or_url1, path_or_url2,
revision1, revision2, peg_revision,
pool));
+ /* Find a WC path for the ra session */
+ if (!svn_path_is_url(path_or_url1))
+ SVN_ERR(svn_dirent_get_absolute(&wri_abspath, path_or_url1, pool));
+ else if (!svn_path_is_url(path_or_url2))
+ SVN_ERR(svn_dirent_get_absolute(&wri_abspath, path_or_url2, pool));
+
+ /* Set up the repos_diff editor on BASE_PATH, if available.
+ Otherwise, we just use "". */
+
+ SVN_ERR(svn_wc__wrap_diff_callbacks(&diff_processor,
+ callbacks, callback_baton,
+ TRUE /* walk_deleted_dirs */,
+ pool, pool));
+
/* Get actual URLs. */
callback_baton->orig_path_1 = url1;
callback_baton->orig_path_2 = url2;
@@ -1868,51 +1735,83 @@ diff_repos_repos(const svn_wc_diff_callbacks4_t *callbacks,
callback_baton->ra_session = ra_session;
callback_baton->anchor = base_path;
+ /* The repository can bring in a new working copy, but not delete
+ everything. Luckily our new diff handler can just be reversed. */
+ if (kind2 == svn_node_none)
+ {
+ const char *str_tmp;
+ svn_revnum_t rev_tmp;
+
+ str_tmp = url2;
+ url2 = url1;
+ url1 = str_tmp;
+
+ rev_tmp = rev2;
+ rev2 = rev1;
+ rev1 = rev_tmp;
+
+ str_tmp = anchor2;
+ anchor2 = anchor1;
+ anchor1 = str_tmp;
+
+ str_tmp = target2;
+ target2 = target1;
+ target1 = str_tmp;
+
+ diff_processor = svn_diff__tree_processor_reverse_create(diff_processor,
+ NULL, pool);
+ }
+
+ /* Filter the first path component using a filter processor, until we fixed
+ the diff processing to handle this directly */
+ if ((kind1 != svn_node_file && kind2 != svn_node_file) && target1[0] != '\0')
+ {
+ diff_processor = svn_diff__tree_processor_filter_create(diff_processor,
+ target1, pool);
+ }
+
/* Now, we open an extra RA session to the correct anchor
location for URL1. This is used during the editor calls to fetch file
contents. */
- SVN_ERR(svn_client__open_ra_session_internal(&extra_ra_session, NULL,
- anchor1, NULL, NULL, FALSE,
- TRUE, ctx, pool));
+ SVN_ERR(svn_client_open_ra_session2(&extra_ra_session, anchor1, wri_abspath,
+ ctx, pool, pool));
- /* Set up the repos_diff editor on BASE_PATH, if available.
- Otherwise, we just use "". */
- SVN_ERR(svn_client__get_diff_editor(
+ SVN_ERR(svn_client__get_diff_editor2(
&diff_editor, &diff_edit_baton,
- NULL, "", depth,
- extra_ra_session, rev1, TRUE, FALSE,
- callbacks, callback_baton,
+ extra_ra_session, depth,
+ rev1,
+ TRUE /* text_deltas */,
+ diff_processor,
ctx->cancel_func, ctx->cancel_baton,
- NULL /* no notify_func */, NULL /* no notify_baton */,
- pool, pool));
+ pool));
/* We want to switch our txn into URL2 */
- SVN_ERR(svn_ra_do_diff3
- (ra_session, &reporter, &reporter_baton, rev2, target1,
- depth, ignore_ancestry, TRUE,
- url2, diff_editor, diff_edit_baton, pool));
+ SVN_ERR(svn_ra_do_diff3(ra_session, &reporter, &reporter_baton,
+ rev2, target1,
+ depth, ignore_ancestry, TRUE /* text_deltas */,
+ url2, diff_editor, diff_edit_baton, pool));
/* Drive the reporter; do the diff. */
SVN_ERR(reporter->set_path(reporter_baton, "", rev1,
svn_depth_infinity,
FALSE, NULL,
pool));
- return reporter->finish_report(reporter_baton, pool);
-}
+ return svn_error_trace(reporter->finish_report(reporter_baton, pool));
+}
/* Perform a diff between a repository path and a working-copy path.
- PATH1 may be either a URL or a working copy path. PATH2 is a
+ PATH_OR_URL1 may be either a URL or a working copy path. PATH2 is a
working copy path. REVISION1 and REVISION2 are their respective
revisions. If REVERSE is TRUE, the diff will be done in reverse.
- If PEG_REVISION is specified, then PATH1 is the path in the peg
+ If PEG_REVISION is specified, then PATH_OR_URL1 is the path in the peg
revision, and the actual repository path to be compared is
determined by following copy history.
- All other options are the same as those passed to svn_client_diff5(). */
+ All other options are the same as those passed to svn_client_diff6(). */
static svn_error_t *
-diff_repos_wc(const char *path1,
+diff_repos_wc(const char *path_or_url1,
const svn_opt_revision_t *revision1,
const svn_opt_revision_t *peg_revision,
const char *path2,
@@ -1924,10 +1823,12 @@ diff_repos_wc(const char *path1,
svn_boolean_t use_git_diff_format,
const apr_array_header_t *changelists,
const svn_wc_diff_callbacks4_t *callbacks,
- struct diff_cmd_baton *callback_baton,
+ void *callback_baton,
+ struct diff_cmd_baton *cmd_baton,
svn_client_ctx_t *ctx,
- apr_pool_t *pool)
+ apr_pool_t *scratch_pool)
{
+ apr_pool_t *pool = scratch_pool;
const char *url1, *anchor, *anchor_url, *target;
svn_revnum_t rev;
svn_ra_session_t *ra_session;
@@ -1938,22 +1839,33 @@ diff_repos_wc(const char *path1,
void *diff_edit_baton;
svn_boolean_t rev2_is_base = (revision2->kind == svn_opt_revision_base);
svn_boolean_t server_supports_depth;
- const char *abspath1;
+ const char *abspath_or_url1;
const char *abspath2;
const char *anchor_abspath;
+ svn_node_kind_t kind1;
+ svn_node_kind_t kind2;
+ svn_boolean_t is_copy;
+ svn_revnum_t cf_revision;
+ const char *cf_repos_relpath;
+ const char *cf_repos_root_url;
SVN_ERR_ASSERT(! svn_path_is_url(path2));
- if (!svn_path_is_url(path1))
- SVN_ERR(svn_dirent_get_absolute(&abspath1, path1, pool));
+ if (!svn_path_is_url(path_or_url1))
+ {
+ SVN_ERR(svn_dirent_get_absolute(&abspath_or_url1, path_or_url1, pool));
+ SVN_ERR(svn_wc__node_get_url(&url1, ctx->wc_ctx, abspath_or_url1,
+ pool, pool));
+ }
else
- abspath1 = path1;
+ {
+ url1 = path_or_url1;
+ abspath_or_url1 = path_or_url1;
+ }
SVN_ERR(svn_dirent_get_absolute(&abspath2, path2, pool));
- /* Convert path1 to a URL to feed to do_diff. */
- SVN_ERR(convert_to_url(&url1, ctx->wc_ctx, abspath1, pool, pool));
-
+ /* Convert path_or_url1 to a URL to feed to do_diff. */
SVN_ERR(svn_wc_get_actual_target2(&anchor, &target,
ctx->wc_ctx, path2,
pool, pool));
@@ -1962,63 +1874,72 @@ diff_repos_wc(const char *path1,
SVN_ERR(svn_dirent_get_absolute(&anchor_abspath, anchor, pool));
SVN_ERR(svn_wc__node_get_url(&anchor_url, ctx->wc_ctx, anchor_abspath,
pool, pool));
- if (! anchor_url)
- return svn_error_createf(SVN_ERR_ENTRY_MISSING_URL, NULL,
- _("Directory '%s' has no URL"),
- svn_dirent_local_style(anchor, pool));
+ SVN_ERR_ASSERT(anchor_url != NULL);
/* If we are performing a pegged diff, we need to find out what our
actual URLs will be. */
if (peg_revision->kind != svn_opt_revision_unspecified)
{
- svn_opt_revision_t *start_ignore, *end_ignore, end;
- const char *url_ignore;
-
- end.kind = svn_opt_revision_unspecified;
-
- SVN_ERR(svn_client__repos_locations(&url1, &start_ignore,
- &url_ignore, &end_ignore,
+ SVN_ERR(svn_client__repos_locations(&url1, NULL, NULL, NULL,
NULL,
- path1,
+ path_or_url1,
peg_revision,
- revision1, &end,
+ revision1, NULL,
ctx, pool));
if (!reverse)
{
- callback_baton->orig_path_1 = url1;
- callback_baton->orig_path_2 =
+ cmd_baton->orig_path_1 = url1;
+ cmd_baton->orig_path_2 =
svn_path_url_add_component2(anchor_url, target, pool);
}
else
{
- callback_baton->orig_path_1 =
+ cmd_baton->orig_path_1 =
svn_path_url_add_component2(anchor_url, target, pool);
- callback_baton->orig_path_2 = url1;
+ cmd_baton->orig_path_2 = url1;
}
}
- /* Establish RA session to path2's anchor */
- SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL, anchor_url,
- NULL, NULL, FALSE, TRUE,
- ctx, pool));
- callback_baton->ra_session = ra_session;
- if (use_git_diff_format)
- {
- SVN_ERR(svn_wc__get_wc_root(&callback_baton->wc_root_abspath,
- ctx->wc_ctx, anchor_abspath,
- pool, pool));
- }
- callback_baton->anchor = anchor;
+ /* Open an RA session to URL1 to figure out its node kind. */
+ SVN_ERR(svn_client_open_ra_session2(&ra_session, url1, abspath2,
+ ctx, pool, pool));
+ /* Resolve the revision to use for URL1. */
+ SVN_ERR(svn_client__get_revision_number(&rev, NULL, ctx->wc_ctx,
+ (strcmp(path_or_url1, url1) == 0)
+ ? NULL : abspath_or_url1,
+ ra_session, revision1, pool));
+ SVN_ERR(svn_ra_check_path(ra_session, "", rev, &kind1, pool));
+ /* Figure out the node kind of the local target. */
+ SVN_ERR(svn_wc_read_kind2(&kind2, ctx->wc_ctx, abspath2,
+ TRUE, FALSE, pool));
+
+ cmd_baton->ra_session = ra_session;
+ cmd_baton->anchor = anchor;
+
+ if (!reverse)
+ cmd_baton->revnum1 = rev;
+ else
+ cmd_baton->revnum2 = rev;
+
+ /* Check if our diff target is a copied node. */
+ SVN_ERR(svn_wc__node_get_origin(&is_copy,
+ &cf_revision,
+ &cf_repos_relpath,
+ &cf_repos_root_url,
+ NULL, NULL,
+ ctx->wc_ctx, abspath2,
+ FALSE, pool, pool));
+
+ /* Use the diff editor to generate the diff. */
SVN_ERR(svn_ra_has_capability(ra_session, &server_supports_depth,
SVN_RA_CAPABILITY_DEPTH, pool));
-
- SVN_ERR(svn_wc_get_diff_editor6(&diff_editor, &diff_edit_baton,
+ SVN_ERR(svn_wc__get_diff_editor(&diff_editor, &diff_edit_baton,
ctx->wc_ctx,
anchor_abspath,
target,
depth,
- ignore_ancestry,
+ ignore_ancestry || is_copy,
show_copies_as_adds,
use_git_diff_format,
rev2_is_base,
@@ -2028,54 +1949,114 @@ diff_repos_wc(const char *path1,
callbacks, callback_baton,
ctx->cancel_func, ctx->cancel_baton,
pool, pool));
-
- /* Tell the RA layer we want a delta to change our txn to URL1 */
- SVN_ERR(svn_client__get_revision_number(&rev, NULL, ctx->wc_ctx,
- (strcmp(path1, url1) == 0)
- ? NULL : abspath1,
- ra_session, revision1, pool));
-
- if (!reverse)
- callback_baton->revnum1 = rev;
- else
- callback_baton->revnum2 = rev;
+ SVN_ERR(svn_ra_reparent(ra_session, anchor_url, pool));
if (depth != svn_depth_infinity)
diff_depth = depth;
else
diff_depth = svn_depth_unknown;
- SVN_ERR(svn_ra_do_diff3(ra_session,
- &reporter, &reporter_baton,
- rev,
- target,
- diff_depth,
- ignore_ancestry,
- TRUE, /* text_deltas */
- url1,
- diff_editor, diff_edit_baton, pool));
-
- /* Create a txn mirror of path2; the diff editor will print
- diffs in reverse. :-) */
- SVN_ERR(svn_wc_crawl_revisions5(ctx->wc_ctx, abspath2,
- reporter, reporter_baton,
- FALSE, depth, TRUE, (! server_supports_depth),
- FALSE,
- ctx->cancel_func, ctx->cancel_baton,
- NULL, NULL, /* notification is N/A */
- pool));
+ if (is_copy)
+ {
+ const char *copyfrom_parent_url;
+ const char *copyfrom_basename;
+ svn_depth_t copy_depth;
+
+ cmd_baton->repos_wc_diff_target_is_copy = TRUE;
+
+ /* We're diffing a locally copied/moved node.
+ * Describe the copy source to the reporter instead of the copy itself.
+ * Doing the latter would generate a single add_directory() call to the
+ * diff editor which results in an unexpected diff (the copy would
+ * be shown as deleted). */
+
+ if (cf_repos_relpath[0] == '\0')
+ {
+ copyfrom_parent_url = cf_repos_root_url;
+ copyfrom_basename = "";
+ }
+ else
+ {
+ const char *parent_relpath;
+ svn_relpath_split(&parent_relpath, &copyfrom_basename,
+ cf_repos_relpath, scratch_pool);
+
+ copyfrom_parent_url = svn_path_url_add_component2(cf_repos_root_url,
+ parent_relpath,
+ scratch_pool);
+ }
+ SVN_ERR(svn_ra_reparent(ra_session, copyfrom_parent_url, pool));
+
+ /* Tell the RA layer we want a delta to change our txn to URL1 */
+ SVN_ERR(svn_ra_do_diff3(ra_session,
+ &reporter, &reporter_baton,
+ rev,
+ target,
+ diff_depth,
+ ignore_ancestry,
+ TRUE, /* text_deltas */
+ url1,
+ diff_editor, diff_edit_baton, pool));
+
+ /* Report the copy source. */
+ SVN_ERR(svn_wc__node_get_depth(&copy_depth, ctx->wc_ctx, abspath2,
+ pool));
+
+ if (copy_depth == svn_depth_unknown)
+ copy_depth = svn_depth_infinity;
+
+ SVN_ERR(reporter->set_path(reporter_baton, "",
+ cf_revision,
+ copy_depth, FALSE, NULL, scratch_pool));
+
+ if (strcmp(target, copyfrom_basename) != 0)
+ SVN_ERR(reporter->link_path(reporter_baton, target,
+ svn_path_url_add_component2(
+ cf_repos_root_url,
+ cf_repos_relpath,
+ scratch_pool),
+ cf_revision,
+ copy_depth, FALSE, NULL, scratch_pool));
+
+ /* Finish the report to generate the diff. */
+ SVN_ERR(reporter->finish_report(reporter_baton, pool));
+ }
+ else
+ {
+ /* Tell the RA layer we want a delta to change our txn to URL1 */
+ SVN_ERR(svn_ra_do_diff3(ra_session,
+ &reporter, &reporter_baton,
+ rev,
+ target,
+ diff_depth,
+ ignore_ancestry,
+ TRUE, /* text_deltas */
+ url1,
+ diff_editor, diff_edit_baton, pool));
+
+ /* Create a txn mirror of path2; the diff editor will print
+ diffs in reverse. :-) */
+ SVN_ERR(svn_wc_crawl_revisions5(ctx->wc_ctx, abspath2,
+ reporter, reporter_baton,
+ FALSE, depth, TRUE,
+ (! server_supports_depth),
+ FALSE,
+ ctx->cancel_func, ctx->cancel_baton,
+ NULL, NULL, /* notification is N/A */
+ pool));
+ }
return SVN_NO_ERROR;
}
-/* This is basically just the guts of svn_client_diff[_peg]5(). */
+/* This is basically just the guts of svn_client_diff[_peg]6(). */
static svn_error_t *
do_diff(const svn_wc_diff_callbacks4_t *callbacks,
struct diff_cmd_baton *callback_baton,
svn_client_ctx_t *ctx,
- const char *path1,
- const char *path2,
+ const char *path_or_url1,
+ const char *path_or_url2,
const svn_opt_revision_t *revision1,
const svn_opt_revision_t *revision2,
const svn_opt_revision_t *peg_revision,
@@ -2090,56 +2071,184 @@ do_diff(const svn_wc_diff_callbacks4_t *callbacks,
svn_boolean_t is_repos2;
/* Check if paths/revisions are urls/local. */
- SVN_ERR(check_paths(&is_repos1, &is_repos2, path1, path2,
+ SVN_ERR(check_paths(&is_repos1, &is_repos2, path_or_url1, path_or_url2,
revision1, revision2, peg_revision));
if (is_repos1)
{
if (is_repos2)
{
+ /* ### Ignores 'show_copies_as_adds'. */
SVN_ERR(diff_repos_repos(callbacks, callback_baton, ctx,
- path1, path2, revision1, revision2,
+ path_or_url1, path_or_url2,
+ revision1, revision2,
peg_revision, depth, ignore_ancestry,
pool));
}
- else /* path2 is a working copy path */
+ else /* path_or_url2 is a working copy path */
{
- SVN_ERR(diff_repos_wc(path1, revision1, peg_revision,
- path2, revision2, FALSE, depth,
+ SVN_ERR(diff_repos_wc(path_or_url1, revision1, peg_revision,
+ path_or_url2, revision2, FALSE, depth,
ignore_ancestry, show_copies_as_adds,
use_git_diff_format, changelists,
- callbacks, callback_baton, ctx, pool));
+ callbacks, callback_baton, callback_baton,
+ ctx, pool));
}
}
- else /* path1 is a working copy path */
+ else /* path_or_url1 is a working copy path */
{
if (is_repos2)
{
- SVN_ERR(diff_repos_wc(path2, revision2, peg_revision,
- path1, revision1, TRUE, depth,
+ SVN_ERR(diff_repos_wc(path_or_url2, revision2, peg_revision,
+ path_or_url1, revision1, TRUE, depth,
ignore_ancestry, show_copies_as_adds,
use_git_diff_format, changelists,
- callbacks, callback_baton, ctx, pool));
+ callbacks, callback_baton, callback_baton,
+ ctx, pool));
}
- else /* path2 is a working copy path */
+ else /* path_or_url2 is a working copy path */
{
- SVN_ERR(diff_wc_wc(path1, revision1, path2, revision2,
- depth, ignore_ancestry, show_copies_as_adds,
- use_git_diff_format, changelists,
- callbacks, callback_baton, ctx, pool));
+ if (revision1->kind == svn_opt_revision_working
+ && revision2->kind == svn_opt_revision_working)
+ {
+ const char *abspath1;
+ const char *abspath2;
+
+ SVN_ERR(svn_dirent_get_absolute(&abspath1, path_or_url1, pool));
+ SVN_ERR(svn_dirent_get_absolute(&abspath2, path_or_url2, pool));
+
+ SVN_ERR(svn_client__arbitrary_nodes_diff(abspath1, abspath2,
+ depth,
+ callbacks,
+ callback_baton,
+ ctx, pool));
+ }
+ else
+ SVN_ERR(diff_wc_wc(path_or_url1, revision1,
+ path_or_url2, revision2,
+ depth, ignore_ancestry, show_copies_as_adds,
+ use_git_diff_format, changelists,
+ callbacks, callback_baton, ctx, pool));
}
}
return SVN_NO_ERROR;
}
+/* Perform a diff between a repository path and a working-copy path.
+
+ PATH_OR_URL1 may be either a URL or a working copy path. PATH2 is a
+ working copy path. REVISION1 and REVISION2 are their respective
+ revisions. If REVERSE is TRUE, the diff will be done in reverse.
+ If PEG_REVISION is specified, then PATH_OR_URL1 is the path in the peg
+ revision, and the actual repository path to be compared is
+ determined by following copy history.
+
+ All other options are the same as those passed to svn_client_diff6(). */
+static svn_error_t *
+diff_summarize_repos_wc(svn_client_diff_summarize_func_t summarize_func,
+ void *summarize_baton,
+ const char *path_or_url1,
+ const svn_opt_revision_t *revision1,
+ const svn_opt_revision_t *peg_revision,
+ const char *path2,
+ const svn_opt_revision_t *revision2,
+ svn_boolean_t reverse,
+ svn_depth_t depth,
+ svn_boolean_t ignore_ancestry,
+ const apr_array_header_t *changelists,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ const char *anchor, *target;
+ svn_wc_diff_callbacks4_t *callbacks;
+ void *callback_baton;
+ struct diff_cmd_baton cmd_baton;
+
+ SVN_ERR_ASSERT(! svn_path_is_url(path2));
+
+ SVN_ERR(svn_wc_get_actual_target2(&anchor, &target,
+ ctx->wc_ctx, path2,
+ pool, pool));
+
+ SVN_ERR(svn_client__get_diff_summarize_callbacks(
+ &callbacks, &callback_baton, target, reverse,
+ summarize_func, summarize_baton, pool));
+
+ SVN_ERR(diff_repos_wc(path_or_url1, revision1, peg_revision,
+ path2, revision2, reverse,
+ depth, FALSE, TRUE, FALSE, changelists,
+ callbacks, callback_baton, &cmd_baton,
+ ctx, pool));
+ return SVN_NO_ERROR;
+}
+
+/* Perform a summary diff between two working-copy paths.
+
+ PATH1 and PATH2 are both working copy paths. REVISION1 and
+ REVISION2 are their respective revisions.
+
+ All other options are the same as those passed to svn_client_diff6(). */
+static svn_error_t *
+diff_summarize_wc_wc(svn_client_diff_summarize_func_t summarize_func,
+ void *summarize_baton,
+ const char *path1,
+ const svn_opt_revision_t *revision1,
+ const char *path2,
+ const svn_opt_revision_t *revision2,
+ svn_depth_t depth,
+ svn_boolean_t ignore_ancestry,
+ const apr_array_header_t *changelists,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ svn_wc_diff_callbacks4_t *callbacks;
+ void *callback_baton;
+ const char *abspath1, *target1;
+ svn_node_kind_t kind;
+
+ SVN_ERR_ASSERT(! svn_path_is_url(path1));
+ SVN_ERR_ASSERT(! svn_path_is_url(path2));
+
+ /* Currently we support only the case where path1 and path2 are the
+ same path. */
+ if ((strcmp(path1, path2) != 0)
+ || (! ((revision1->kind == svn_opt_revision_base)
+ && (revision2->kind == svn_opt_revision_working))))
+ return unsupported_diff_error
+ (svn_error_create
+ (SVN_ERR_INCORRECT_PARAMS, NULL,
+ _("Summarized diffs are only supported between a path's text-base "
+ "and its working files at this time")));
+
+ /* Find the node kind of PATH1 so that we know whether the diff drive will
+ be anchored at PATH1 or its parent dir. */
+ SVN_ERR(svn_dirent_get_absolute(&abspath1, path1, pool));
+ SVN_ERR(svn_wc_read_kind2(&kind, ctx->wc_ctx, abspath1,
+ TRUE, FALSE, pool));
+ target1 = (kind == svn_node_dir) ? "" : svn_dirent_basename(path1, pool);
+ SVN_ERR(svn_client__get_diff_summarize_callbacks(
+ &callbacks, &callback_baton, target1, FALSE,
+ summarize_func, summarize_baton, pool));
+
+ SVN_ERR(svn_wc_diff6(ctx->wc_ctx,
+ abspath1,
+ callbacks, callback_baton,
+ depth,
+ ignore_ancestry, FALSE /* show_copies_as_adds */,
+ FALSE /* use_git_diff_format */, changelists,
+ ctx->cancel_func, ctx->cancel_baton,
+ pool));
+ return SVN_NO_ERROR;
+}
+
/* Perform a diff summary between two repository paths. */
static svn_error_t *
diff_summarize_repos_repos(svn_client_diff_summarize_func_t summarize_func,
void *summarize_baton,
svn_client_ctx_t *ctx,
- const char *path1,
- const char *path2,
+ const char *path_or_url1,
+ const char *path_or_url2,
const svn_opt_revision_t *revision1,
const svn_opt_revision_t *revision2,
const svn_opt_revision_t *peg_revision,
@@ -2155,35 +2264,82 @@ diff_summarize_repos_repos(svn_client_diff_summarize_func_t summarize_func,
const svn_delta_editor_t *diff_editor;
void *diff_edit_baton;
+ const svn_diff_tree_processor_t *diff_processor;
+
const char *url1;
const char *url2;
const char *base_path;
svn_revnum_t rev1;
svn_revnum_t rev2;
+ svn_node_kind_t kind1;
+ svn_node_kind_t kind2;
const char *anchor1;
const char *anchor2;
const char *target1;
const char *target2;
svn_ra_session_t *ra_session;
+ svn_wc_diff_callbacks4_t *callbacks;
+ void *callback_baton;
/* Prepare info for the repos repos diff. */
SVN_ERR(diff_prepare_repos_repos(&url1, &url2, &base_path, &rev1, &rev2,
&anchor1, &anchor2, &target1, &target2,
- &ra_session, ctx,
- path1, path2, revision1, revision2,
+ &kind1, &kind2, &ra_session,
+ ctx, path_or_url1, path_or_url2,
+ revision1, revision2,
peg_revision, pool));
- /* Now, we open an extra RA session to the correct anchor
- location for URL1. This is used to get the kind of deleted paths. */
- SVN_ERR(svn_client__open_ra_session_internal(&extra_ra_session, NULL,
- anchor1, NULL, NULL, FALSE,
- TRUE, ctx, pool));
-
/* Set up the repos_diff editor. */
- SVN_ERR(svn_client__get_diff_summarize_editor
- (target2, summarize_func,
- summarize_baton, extra_ra_session, rev1, ctx->cancel_func,
- ctx->cancel_baton, &diff_editor, &diff_edit_baton, pool));
+ SVN_ERR(svn_client__get_diff_summarize_callbacks(
+ &callbacks, &callback_baton,
+ target1, FALSE, summarize_func, summarize_baton, pool));
+
+ SVN_ERR(svn_wc__wrap_diff_callbacks(&diff_processor,
+ callbacks, callback_baton,
+ TRUE /* walk_deleted_dirs */,
+ pool, pool));
+
+
+ /* The repository can bring in a new working copy, but not delete
+ everything. Luckily our new diff handler can just be reversed. */
+ if (kind2 == svn_node_none)
+ {
+ const char *str_tmp;
+ svn_revnum_t rev_tmp;
+
+ str_tmp = url2;
+ url2 = url1;
+ url1 = str_tmp;
+
+ rev_tmp = rev2;
+ rev2 = rev1;
+ rev1 = rev_tmp;
+
+ str_tmp = anchor2;
+ anchor2 = anchor1;
+ anchor1 = str_tmp;
+
+ str_tmp = target2;
+ target2 = target1;
+ target1 = str_tmp;
+
+ diff_processor = svn_diff__tree_processor_reverse_create(diff_processor,
+ NULL, pool);
+ }
+
+ /* Now, we open an extra RA session to the correct anchor
+ location for URL1. This is used to get deleted path information. */
+ SVN_ERR(svn_client_open_ra_session2(&extra_ra_session, anchor1, NULL,
+ ctx, pool, pool));
+
+ SVN_ERR(svn_client__get_diff_editor2(&diff_editor, &diff_edit_baton,
+ extra_ra_session,
+ depth,
+ rev1,
+ FALSE /* text_deltas */,
+ diff_processor,
+ ctx->cancel_func, ctx->cancel_baton,
+ pool));
/* We want to switch our txn into URL2 */
SVN_ERR(svn_ra_do_diff3
@@ -2196,7 +2352,7 @@ diff_summarize_repos_repos(svn_client_diff_summarize_func_t summarize_func,
SVN_ERR(reporter->set_path(reporter_baton, "", rev1,
svn_depth_infinity,
FALSE, NULL, pool));
- return reporter->finish_report(reporter_baton, pool);
+ return svn_error_trace(reporter->finish_report(reporter_baton, pool));
}
/* This is basically just the guts of svn_client_diff_summarize[_peg]2(). */
@@ -2204,31 +2360,94 @@ static svn_error_t *
do_diff_summarize(svn_client_diff_summarize_func_t summarize_func,
void *summarize_baton,
svn_client_ctx_t *ctx,
- const char *path1,
- const char *path2,
+ const char *path_or_url1,
+ const char *path_or_url2,
const svn_opt_revision_t *revision1,
const svn_opt_revision_t *revision2,
const svn_opt_revision_t *peg_revision,
svn_depth_t depth,
svn_boolean_t ignore_ancestry,
+ const apr_array_header_t *changelists,
apr_pool_t *pool)
{
svn_boolean_t is_repos1;
svn_boolean_t is_repos2;
/* Check if paths/revisions are urls/local. */
- SVN_ERR(check_paths(&is_repos1, &is_repos2, path1, path2,
+ SVN_ERR(check_paths(&is_repos1, &is_repos2, path_or_url1, path_or_url2,
revision1, revision2, peg_revision));
- if (is_repos1 && is_repos2)
- return diff_summarize_repos_repos(summarize_func, summarize_baton, ctx,
- path1, path2, revision1, revision2,
- peg_revision, depth, ignore_ancestry,
- pool);
- else
- return svn_error_create(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
- _("Summarizing diff can only compare repository "
- "to repository"));
+ if (is_repos1)
+ {
+ if (is_repos2)
+ SVN_ERR(diff_summarize_repos_repos(summarize_func, summarize_baton, ctx,
+ path_or_url1, path_or_url2,
+ revision1, revision2,
+ peg_revision, depth, ignore_ancestry,
+ pool));
+ else
+ SVN_ERR(diff_summarize_repos_wc(summarize_func, summarize_baton,
+ path_or_url1, revision1,
+ peg_revision,
+ path_or_url2, revision2,
+ FALSE, depth,
+ ignore_ancestry,
+ changelists,
+ ctx, pool));
+ }
+ else /* ! is_repos1 */
+ {
+ if (is_repos2)
+ SVN_ERR(diff_summarize_repos_wc(summarize_func, summarize_baton,
+ path_or_url2, revision2,
+ peg_revision,
+ path_or_url1, revision1,
+ TRUE, depth,
+ ignore_ancestry,
+ changelists,
+ ctx, pool));
+ else
+ {
+ if (revision1->kind == svn_opt_revision_working
+ && revision2->kind == svn_opt_revision_working)
+ {
+ const char *abspath1;
+ const char *abspath2;
+ svn_wc_diff_callbacks4_t *callbacks;
+ void *callback_baton;
+ const char *target;
+ svn_node_kind_t kind;
+
+ SVN_ERR(svn_dirent_get_absolute(&abspath1, path_or_url1, pool));
+ SVN_ERR(svn_dirent_get_absolute(&abspath2, path_or_url2, pool));
+
+ SVN_ERR(svn_io_check_resolved_path(abspath1, &kind, pool));
+
+ if (kind == svn_node_dir)
+ target = "";
+ else
+ target = svn_dirent_basename(path_or_url1, NULL);
+
+ SVN_ERR(svn_client__get_diff_summarize_callbacks(
+ &callbacks, &callback_baton, target, FALSE,
+ summarize_func, summarize_baton, pool));
+
+ SVN_ERR(svn_client__arbitrary_nodes_diff(abspath1, abspath2,
+ depth,
+ callbacks,
+ callback_baton,
+ ctx, pool));
+ }
+ else
+ SVN_ERR(diff_summarize_wc_wc(summarize_func, summarize_baton,
+ path_or_url1, revision1,
+ path_or_url2, revision2,
+ depth, ignore_ancestry,
+ changelists, ctx, pool));
+ }
+ }
+
+ return SVN_NO_ERROR;
}
@@ -2247,8 +2466,7 @@ set_up_diff_cmd_and_options(struct diff_cmd_baton *diff_cmd_baton,
/* See if there is a diff command and/or diff arguments. */
if (config)
{
- svn_config_t *cfg = apr_hash_get(config, SVN_CONFIG_CATEGORY_CONFIG,
- APR_HASH_KEY_STRING);
+ svn_config_t *cfg = svn_hash_gets(config, SVN_CONFIG_CATEGORY_CONFIG);
svn_config_get(cfg, &diff_cmd, SVN_CONFIG_SECTION_HELPERS,
SVN_CONFIG_OPTION_DIFF_CMD, NULL);
if (options == NULL)
@@ -2334,139 +2552,139 @@ set_up_diff_cmd_and_options(struct diff_cmd_baton *diff_cmd_baton,
* These cases require server communication.
*/
svn_error_t *
-svn_client_diff5(const apr_array_header_t *options,
- const char *path1,
+svn_client_diff6(const apr_array_header_t *options,
+ const char *path_or_url1,
const svn_opt_revision_t *revision1,
- const char *path2,
+ const char *path_or_url2,
const svn_opt_revision_t *revision2,
const char *relative_to_dir,
svn_depth_t depth,
svn_boolean_t ignore_ancestry,
+ svn_boolean_t no_diff_added,
svn_boolean_t no_diff_deleted,
svn_boolean_t show_copies_as_adds,
svn_boolean_t ignore_content_type,
+ svn_boolean_t ignore_properties,
+ svn_boolean_t properties_only,
svn_boolean_t use_git_diff_format,
const char *header_encoding,
- apr_file_t *outfile,
- apr_file_t *errfile,
+ svn_stream_t *outstream,
+ svn_stream_t *errstream,
const apr_array_header_t *changelists,
svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
struct diff_cmd_baton diff_cmd_baton = { 0 };
- svn_wc_diff_callbacks4_t diff_callbacks;
+ svn_opt_revision_t peg_revision;
+
+ if (ignore_properties && properties_only)
+ return svn_error_create(SVN_ERR_INCORRECT_PARAMS, NULL,
+ _("Cannot ignore properties and show only "
+ "properties at the same time"));
/* We will never do a pegged diff from here. */
- svn_opt_revision_t peg_revision;
peg_revision.kind = svn_opt_revision_unspecified;
/* setup callback and baton */
- diff_callbacks.file_opened = diff_file_opened;
- diff_callbacks.file_changed = diff_file_changed;
- diff_callbacks.file_added = diff_file_added;
- diff_callbacks.file_deleted = no_diff_deleted ? diff_file_deleted_no_diff :
- diff_file_deleted_with_diff;
- diff_callbacks.dir_added = diff_dir_added;
- diff_callbacks.dir_deleted = diff_dir_deleted;
- diff_callbacks.dir_props_changed = diff_dir_props_changed;
- diff_callbacks.dir_opened = diff_dir_opened;
- diff_callbacks.dir_closed = diff_dir_closed;
-
- diff_cmd_baton.orig_path_1 = path1;
- diff_cmd_baton.orig_path_2 = path2;
+ diff_cmd_baton.orig_path_1 = path_or_url1;
+ diff_cmd_baton.orig_path_2 = path_or_url2;
SVN_ERR(set_up_diff_cmd_and_options(&diff_cmd_baton, options,
ctx->config, pool));
diff_cmd_baton.pool = pool;
- diff_cmd_baton.outfile = outfile;
- diff_cmd_baton.errfile = errfile;
+ diff_cmd_baton.outstream = outstream;
+ diff_cmd_baton.errstream = errstream;
diff_cmd_baton.header_encoding = header_encoding;
diff_cmd_baton.revnum1 = SVN_INVALID_REVNUM;
diff_cmd_baton.revnum2 = SVN_INVALID_REVNUM;
- diff_cmd_baton.force_empty = FALSE;
diff_cmd_baton.force_binary = ignore_content_type;
+ diff_cmd_baton.ignore_properties = ignore_properties;
+ diff_cmd_baton.properties_only = properties_only;
diff_cmd_baton.relative_to_dir = relative_to_dir;
diff_cmd_baton.use_git_diff_format = use_git_diff_format;
+ diff_cmd_baton.no_diff_added = no_diff_added;
+ diff_cmd_baton.no_diff_deleted = no_diff_deleted;
+ diff_cmd_baton.no_copyfrom_on_add = show_copies_as_adds;
+
diff_cmd_baton.wc_ctx = ctx->wc_ctx;
- diff_cmd_baton.visited_paths = apr_hash_make(pool);
diff_cmd_baton.ra_session = NULL;
- diff_cmd_baton.wc_root_abspath = NULL;
diff_cmd_baton.anchor = NULL;
return do_diff(&diff_callbacks, &diff_cmd_baton, ctx,
- path1, path2, revision1, revision2, &peg_revision,
+ path_or_url1, path_or_url2, revision1, revision2,
+ &peg_revision,
depth, ignore_ancestry, show_copies_as_adds,
use_git_diff_format, changelists, pool);
}
svn_error_t *
-svn_client_diff_peg5(const apr_array_header_t *options,
- const char *path,
+svn_client_diff_peg6(const apr_array_header_t *options,
+ const char *path_or_url,
const svn_opt_revision_t *peg_revision,
const svn_opt_revision_t *start_revision,
const svn_opt_revision_t *end_revision,
const char *relative_to_dir,
svn_depth_t depth,
svn_boolean_t ignore_ancestry,
+ svn_boolean_t no_diff_added,
svn_boolean_t no_diff_deleted,
svn_boolean_t show_copies_as_adds,
svn_boolean_t ignore_content_type,
+ svn_boolean_t ignore_properties,
+ svn_boolean_t properties_only,
svn_boolean_t use_git_diff_format,
const char *header_encoding,
- apr_file_t *outfile,
- apr_file_t *errfile,
+ svn_stream_t *outstream,
+ svn_stream_t *errstream,
const apr_array_header_t *changelists,
svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
struct diff_cmd_baton diff_cmd_baton = { 0 };
- svn_wc_diff_callbacks4_t diff_callbacks;
+
+ if (ignore_properties && properties_only)
+ return svn_error_create(SVN_ERR_INCORRECT_PARAMS, NULL,
+ _("Cannot ignore properties and show only "
+ "properties at the same time"));
/* setup callback and baton */
- diff_callbacks.file_opened = diff_file_opened;
- diff_callbacks.file_changed = diff_file_changed;
- diff_callbacks.file_added = diff_file_added;
- diff_callbacks.file_deleted = no_diff_deleted ? diff_file_deleted_no_diff :
- diff_file_deleted_with_diff;
- diff_callbacks.dir_added = diff_dir_added;
- diff_callbacks.dir_deleted = diff_dir_deleted;
- diff_callbacks.dir_props_changed = diff_dir_props_changed;
- diff_callbacks.dir_opened = diff_dir_opened;
- diff_callbacks.dir_closed = diff_dir_closed;
-
- diff_cmd_baton.orig_path_1 = path;
- diff_cmd_baton.orig_path_2 = path;
+ diff_cmd_baton.orig_path_1 = path_or_url;
+ diff_cmd_baton.orig_path_2 = path_or_url;
SVN_ERR(set_up_diff_cmd_and_options(&diff_cmd_baton, options,
ctx->config, pool));
diff_cmd_baton.pool = pool;
- diff_cmd_baton.outfile = outfile;
- diff_cmd_baton.errfile = errfile;
+ diff_cmd_baton.outstream = outstream;
+ diff_cmd_baton.errstream = errstream;
diff_cmd_baton.header_encoding = header_encoding;
diff_cmd_baton.revnum1 = SVN_INVALID_REVNUM;
diff_cmd_baton.revnum2 = SVN_INVALID_REVNUM;
- diff_cmd_baton.force_empty = FALSE;
diff_cmd_baton.force_binary = ignore_content_type;
+ diff_cmd_baton.ignore_properties = ignore_properties;
+ diff_cmd_baton.properties_only = properties_only;
diff_cmd_baton.relative_to_dir = relative_to_dir;
diff_cmd_baton.use_git_diff_format = use_git_diff_format;
+ diff_cmd_baton.no_diff_added = no_diff_added;
+ diff_cmd_baton.no_diff_deleted = no_diff_deleted;
+ diff_cmd_baton.no_copyfrom_on_add = show_copies_as_adds;
+
diff_cmd_baton.wc_ctx = ctx->wc_ctx;
- diff_cmd_baton.visited_paths = apr_hash_make(pool);
diff_cmd_baton.ra_session = NULL;
- diff_cmd_baton.wc_root_abspath = NULL;
diff_cmd_baton.anchor = NULL;
return do_diff(&diff_callbacks, &diff_cmd_baton, ctx,
- path, path, start_revision, end_revision, peg_revision,
+ path_or_url, path_or_url, start_revision, end_revision,
+ peg_revision,
depth, ignore_ancestry, show_copies_as_adds,
use_git_diff_format, changelists, pool);
}
svn_error_t *
-svn_client_diff_summarize2(const char *path1,
+svn_client_diff_summarize2(const char *path_or_url1,
const svn_opt_revision_t *revision1,
- const char *path2,
+ const char *path_or_url2,
const svn_opt_revision_t *revision2,
svn_depth_t depth,
svn_boolean_t ignore_ancestry,
@@ -2480,14 +2698,14 @@ svn_client_diff_summarize2(const char *path1,
svn_opt_revision_t peg_revision;
peg_revision.kind = svn_opt_revision_unspecified;
- /* ### CHANGELISTS parameter isn't used */
return do_diff_summarize(summarize_func, summarize_baton, ctx,
- path1, path2, revision1, revision2, &peg_revision,
- depth, ignore_ancestry, pool);
+ path_or_url1, path_or_url2, revision1, revision2,
+ &peg_revision,
+ depth, ignore_ancestry, changelists, pool);
}
svn_error_t *
-svn_client_diff_summarize_peg2(const char *path,
+svn_client_diff_summarize_peg2(const char *path_or_url,
const svn_opt_revision_t *peg_revision,
const svn_opt_revision_t *start_revision,
const svn_opt_revision_t *end_revision,
@@ -2499,10 +2717,10 @@ svn_client_diff_summarize_peg2(const char *path,
svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
- /* ### CHANGELISTS parameter isn't used */
return do_diff_summarize(summarize_func, summarize_baton, ctx,
- path, path, start_revision, end_revision,
- peg_revision, depth, ignore_ancestry, pool);
+ path_or_url, path_or_url,
+ start_revision, end_revision, peg_revision,
+ depth, ignore_ancestry, changelists, pool);
}
svn_client_diff_summarize_t *
diff --git a/subversion/libsvn_client/diff_local.c b/subversion/libsvn_client/diff_local.c
new file mode 100644
index 0000000..2dd8a1b
--- /dev/null
+++ b/subversion/libsvn_client/diff_local.c
@@ -0,0 +1,639 @@
+/*
+ * diff_local.c: comparing local trees with each other
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+/* ==================================================================== */
+
+
+
+/*** Includes. ***/
+
+#include <apr_strings.h>
+#include <apr_pools.h>
+#include <apr_hash.h>
+#include "svn_hash.h"
+#include "svn_types.h"
+#include "svn_wc.h"
+#include "svn_diff.h"
+#include "svn_client.h"
+#include "svn_string.h"
+#include "svn_error.h"
+#include "svn_dirent_uri.h"
+#include "svn_io.h"
+#include "svn_pools.h"
+#include "svn_props.h"
+#include "svn_sorts.h"
+#include "svn_subst.h"
+#include "client.h"
+
+#include "private/svn_wc_private.h"
+
+#include "svn_private_config.h"
+
+
+/* Try to get properties for LOCAL_ABSPATH and return them in the property
+ * hash *PROPS. If there are no properties because LOCAL_ABSPATH is not
+ * versioned, return an empty property hash. */
+static svn_error_t *
+get_props(apr_hash_t **props,
+ const char *local_abspath,
+ svn_wc_context_t *wc_ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_error_t *err;
+
+ err = svn_wc_prop_list2(props, wc_ctx, local_abspath, result_pool,
+ scratch_pool);
+ if (err)
+ {
+ if (err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND ||
+ err->apr_err == SVN_ERR_WC_NOT_WORKING_COPY)
+ {
+ svn_error_clear(err);
+ *props = apr_hash_make(result_pool);
+
+ /* ### Apply autoprops, like 'svn add' would? */
+ }
+ else
+ return svn_error_trace(err);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Produce a diff between two arbitrary files at LOCAL_ABSPATH1 and
+ * LOCAL_ABSPATH2, using the diff callbacks from CALLBACKS.
+ * Use PATH as the name passed to diff callbacks.
+ * FILE1_IS_EMPTY and FILE2_IS_EMPTY are used as hints which diff callback
+ * function to use to compare the files (added/deleted/changed).
+ *
+ * If ORIGINAL_PROPS_OVERRIDE is not NULL, use it as original properties
+ * instead of reading properties from LOCAL_ABSPATH1. This is required when
+ * a file replaces a directory, where LOCAL_ABSPATH1 is an empty file that
+ * file content must be diffed against, but properties to diff against come
+ * from the replaced directory. */
+static svn_error_t *
+do_arbitrary_files_diff(const char *local_abspath1,
+ const char *local_abspath2,
+ const char *path,
+ svn_boolean_t file1_is_empty,
+ svn_boolean_t file2_is_empty,
+ apr_hash_t *original_props_override,
+ const svn_wc_diff_callbacks4_t *callbacks,
+ void *diff_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
+{
+ apr_hash_t *original_props;
+ apr_hash_t *modified_props;
+ apr_array_header_t *prop_changes;
+ svn_string_t *original_mime_type = NULL;
+ svn_string_t *modified_mime_type = NULL;
+
+ if (ctx->cancel_func)
+ SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
+
+ /* Try to get properties from either file. It's OK if the files do not
+ * have properties, or if they are unversioned. */
+ if (original_props_override)
+ original_props = original_props_override;
+ else
+ SVN_ERR(get_props(&original_props, local_abspath1, ctx->wc_ctx,
+ scratch_pool, scratch_pool));
+ SVN_ERR(get_props(&modified_props, local_abspath2, ctx->wc_ctx,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(svn_prop_diffs(&prop_changes, modified_props, original_props,
+ scratch_pool));
+
+ /* Try to determine the mime-type of each file. */
+ original_mime_type = svn_hash_gets(original_props, SVN_PROP_MIME_TYPE);
+ if (!file1_is_empty && !original_mime_type)
+ {
+ const char *mime_type;
+ SVN_ERR(svn_io_detect_mimetype2(&mime_type, local_abspath1,
+ ctx->mimetypes_map, scratch_pool));
+
+ if (mime_type)
+ original_mime_type = svn_string_create(mime_type, scratch_pool);
+ }
+
+ modified_mime_type = svn_hash_gets(modified_props, SVN_PROP_MIME_TYPE);
+ if (!file2_is_empty && !modified_mime_type)
+ {
+ const char *mime_type;
+ SVN_ERR(svn_io_detect_mimetype2(&mime_type, local_abspath1,
+ ctx->mimetypes_map, scratch_pool));
+
+ if (mime_type)
+ modified_mime_type = svn_string_create(mime_type, scratch_pool);
+ }
+
+ /* Produce the diff. */
+ if (file1_is_empty && !file2_is_empty)
+ SVN_ERR(callbacks->file_added(NULL, NULL, NULL, path,
+ local_abspath1, local_abspath2,
+ /* ### TODO get real revision info
+ * for versioned files? */
+ SVN_INVALID_REVNUM, SVN_INVALID_REVNUM,
+ original_mime_type ?
+ original_mime_type->data : NULL,
+ modified_mime_type ?
+ modified_mime_type->data : NULL,
+ /* ### TODO get copyfrom? */
+ NULL, SVN_INVALID_REVNUM,
+ prop_changes, original_props,
+ diff_baton, scratch_pool));
+ else if (!file1_is_empty && file2_is_empty)
+ SVN_ERR(callbacks->file_deleted(NULL, NULL, path,
+ local_abspath1, local_abspath2,
+ original_mime_type ?
+ original_mime_type->data : NULL,
+ modified_mime_type ?
+ modified_mime_type->data : NULL,
+ original_props,
+ diff_baton, scratch_pool));
+ else
+ {
+ svn_stream_t *file1;
+ svn_stream_t *file2;
+ svn_boolean_t same;
+ svn_string_t *val;
+ /* We have two files, which may or may not be the same.
+
+ ### Our caller assumes that we should ignore symlinks here and
+ handle them as normal paths. Perhaps that should change?
+ */
+ SVN_ERR(svn_stream_open_readonly(&file1, local_abspath1, scratch_pool,
+ scratch_pool));
+
+ SVN_ERR(svn_stream_open_readonly(&file2, local_abspath2, scratch_pool,
+ scratch_pool));
+
+ /* Wrap with normalization, etc. if necessary */
+ if (original_props)
+ {
+ val = svn_hash_gets(original_props, SVN_PROP_EOL_STYLE);
+
+ if (val)
+ {
+ svn_subst_eol_style_t style;
+ const char *eol;
+ svn_subst_eol_style_from_value(&style, &eol, val->data);
+
+ /* ### Ignoring keywords */
+ if (eol)
+ file1 = svn_subst_stream_translated(file1, eol, TRUE,
+ NULL, FALSE,
+ scratch_pool);
+ }
+ }
+
+ if (modified_props)
+ {
+ val = svn_hash_gets(modified_props, SVN_PROP_EOL_STYLE);
+
+ if (val)
+ {
+ svn_subst_eol_style_t style;
+ const char *eol;
+ svn_subst_eol_style_from_value(&style, &eol, val->data);
+
+ /* ### Ignoring keywords */
+ if (eol)
+ file2 = svn_subst_stream_translated(file2, eol, TRUE,
+ NULL, FALSE,
+ scratch_pool);
+ }
+ }
+
+ SVN_ERR(svn_stream_contents_same2(&same, file1, file2, scratch_pool));
+
+ if (! same || prop_changes->nelts > 0)
+ {
+ /* ### We should probably pass the normalized data we created using
+ the subst streams as that is what diff users expect */
+ SVN_ERR(callbacks->file_changed(NULL, NULL, NULL, path,
+ same ? NULL : local_abspath1,
+ same ? NULL : local_abspath2,
+ /* ### TODO get real revision info
+ * for versioned files? */
+ SVN_INVALID_REVNUM /* rev1 */,
+ SVN_INVALID_REVNUM /* rev2 */,
+ original_mime_type ?
+ original_mime_type->data : NULL,
+ modified_mime_type ?
+ modified_mime_type->data : NULL,
+ prop_changes, original_props,
+ diff_baton, scratch_pool));
+ }
+ }
+
+ return SVN_NO_ERROR;
+}
+
+struct arbitrary_diff_walker_baton {
+ /* The root directories of the trees being compared. */
+ const char *root1_abspath;
+ const char *root2_abspath;
+
+ /* TRUE if recursing within an added subtree of root2_abspath that
+ * does not exist in root1_abspath. */
+ svn_boolean_t recursing_within_added_subtree;
+
+ /* TRUE if recursing within an administrative (.i.e. .svn) directory. */
+ svn_boolean_t recursing_within_adm_dir;
+
+ /* The absolute path of the adm dir if RECURSING_WITHIN_ADM_DIR is TRUE.
+ * Else this is NULL.*/
+ const char *adm_dir_abspath;
+
+ /* A path to an empty file used for diffs that add/delete files. */
+ const char *empty_file_abspath;
+
+ const svn_wc_diff_callbacks4_t *callbacks;
+ void *diff_baton;
+ svn_client_ctx_t *ctx;
+ apr_pool_t *pool;
+} arbitrary_diff_walker_baton;
+
+/* Forward declaration needed because this function has a cyclic
+ * dependency with do_arbitrary_dirs_diff(). */
+static svn_error_t *
+arbitrary_diff_walker(void *baton, const char *local_abspath,
+ const apr_finfo_t *finfo,
+ apr_pool_t *scratch_pool);
+
+/* Another forward declaration. */
+static svn_error_t *
+arbitrary_diff_this_dir(struct arbitrary_diff_walker_baton *b,
+ const char *local_abspath,
+ svn_depth_t depth,
+ apr_pool_t *scratch_pool);
+
+/* Produce a diff of depth DEPTH between two arbitrary directories at
+ * LOCAL_ABSPATH1 and LOCAL_ABSPATH2, using the provided diff callbacks
+ * to show file changes and, for versioned nodes, property changes.
+ *
+ * If ROOT_ABSPATH1 and ROOT_ABSPATH2 are not NULL, show paths in diffs
+ * relative to these roots, rather than relative to LOCAL_ABSPATH1 and
+ * LOCAL_ABSPATH2. This is needed when crawling a subtree that exists
+ * only within LOCAL_ABSPATH2. */
+static svn_error_t *
+do_arbitrary_dirs_diff(const char *local_abspath1,
+ const char *local_abspath2,
+ const char *root_abspath1,
+ const char *root_abspath2,
+ svn_depth_t depth,
+ const svn_wc_diff_callbacks4_t *callbacks,
+ void *diff_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
+{
+ apr_file_t *empty_file;
+ svn_node_kind_t kind1;
+
+ struct arbitrary_diff_walker_baton b;
+
+ /* If LOCAL_ABSPATH1 is not a directory, crawl LOCAL_ABSPATH2 instead
+ * and compare it to LOCAL_ABSPATH1, showing only additions.
+ * This case can only happen during recursion from arbitrary_diff_walker(),
+ * because do_arbitrary_nodes_diff() prevents this from happening at
+ * the root of the comparison. */
+ SVN_ERR(svn_io_check_resolved_path(local_abspath1, &kind1, scratch_pool));
+ b.recursing_within_added_subtree = (kind1 != svn_node_dir);
+
+ b.root1_abspath = root_abspath1 ? root_abspath1 : local_abspath1;
+ b.root2_abspath = root_abspath2 ? root_abspath2 : local_abspath2;
+ b.recursing_within_adm_dir = FALSE;
+ b.adm_dir_abspath = NULL;
+ b.callbacks = callbacks;
+ b.diff_baton = diff_baton;
+ b.ctx = ctx;
+ b.pool = scratch_pool;
+
+ SVN_ERR(svn_io_open_unique_file3(&empty_file, &b.empty_file_abspath,
+ NULL, svn_io_file_del_on_pool_cleanup,
+ scratch_pool, scratch_pool));
+
+ if (depth <= svn_depth_immediates)
+ SVN_ERR(arbitrary_diff_this_dir(&b, local_abspath1, depth, scratch_pool));
+ else if (depth == svn_depth_infinity)
+ SVN_ERR(svn_io_dir_walk2(b.recursing_within_added_subtree ? local_abspath2
+ : local_abspath1,
+ 0, arbitrary_diff_walker, &b, scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+/* Produce a diff of depth DEPTH for the directory at LOCAL_ABSPATH,
+ * using information from the arbitrary_diff_walker_baton B.
+ * LOCAL_ABSPATH is the path being crawled and can be on either side
+ * of the diff depending on baton->recursing_within_added_subtree. */
+static svn_error_t *
+arbitrary_diff_this_dir(struct arbitrary_diff_walker_baton *b,
+ const char *local_abspath,
+ svn_depth_t depth,
+ apr_pool_t *scratch_pool)
+{
+ const char *local_abspath1;
+ const char *local_abspath2;
+ svn_node_kind_t kind1;
+ svn_node_kind_t kind2;
+ const char *child_relpath;
+ apr_hash_t *dirents1;
+ apr_hash_t *dirents2;
+ apr_hash_t *merged_dirents;
+ apr_array_header_t *sorted_dirents;
+ int i;
+ apr_pool_t *iterpool;
+
+ if (b->recursing_within_adm_dir)
+ {
+ if (svn_dirent_skip_ancestor(b->adm_dir_abspath, local_abspath))
+ return SVN_NO_ERROR;
+ else
+ {
+ b->recursing_within_adm_dir = FALSE;
+ b->adm_dir_abspath = NULL;
+ }
+ }
+ else if (svn_wc_is_adm_dir(svn_dirent_basename(local_abspath, NULL),
+ scratch_pool))
+ {
+ b->recursing_within_adm_dir = TRUE;
+ b->adm_dir_abspath = apr_pstrdup(b->pool, local_abspath);
+ return SVN_NO_ERROR;
+ }
+
+ if (b->recursing_within_added_subtree)
+ child_relpath = svn_dirent_skip_ancestor(b->root2_abspath, local_abspath);
+ else
+ child_relpath = svn_dirent_skip_ancestor(b->root1_abspath, local_abspath);
+ if (!child_relpath)
+ return SVN_NO_ERROR;
+
+ local_abspath1 = svn_dirent_join(b->root1_abspath, child_relpath,
+ scratch_pool);
+ SVN_ERR(svn_io_check_resolved_path(local_abspath1, &kind1, scratch_pool));
+
+ local_abspath2 = svn_dirent_join(b->root2_abspath, child_relpath,
+ scratch_pool);
+ SVN_ERR(svn_io_check_resolved_path(local_abspath2, &kind2, scratch_pool));
+
+ if (depth > svn_depth_empty)
+ {
+ if (kind1 == svn_node_dir)
+ SVN_ERR(svn_io_get_dirents3(&dirents1, local_abspath1,
+ TRUE, /* only_check_type */
+ scratch_pool, scratch_pool));
+ else
+ dirents1 = apr_hash_make(scratch_pool);
+ }
+
+ if (kind2 == svn_node_dir)
+ {
+ apr_hash_t *original_props;
+ apr_hash_t *modified_props;
+ apr_array_header_t *prop_changes;
+
+ /* Show any property changes for this directory. */
+ SVN_ERR(get_props(&original_props, local_abspath1, b->ctx->wc_ctx,
+ scratch_pool, scratch_pool));
+ SVN_ERR(get_props(&modified_props, local_abspath2, b->ctx->wc_ctx,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_prop_diffs(&prop_changes, modified_props, original_props,
+ scratch_pool));
+ if (prop_changes->nelts > 0)
+ SVN_ERR(b->callbacks->dir_props_changed(NULL, NULL, child_relpath,
+ FALSE /* was_added */,
+ prop_changes, original_props,
+ b->diff_baton,
+ scratch_pool));
+
+ if (depth > svn_depth_empty)
+ {
+ /* Read directory entries. */
+ SVN_ERR(svn_io_get_dirents3(&dirents2, local_abspath2,
+ TRUE, /* only_check_type */
+ scratch_pool, scratch_pool));
+ }
+ }
+ else if (depth > svn_depth_empty)
+ dirents2 = apr_hash_make(scratch_pool);
+
+ if (depth <= svn_depth_empty)
+ return SVN_NO_ERROR;
+
+ /* Compare dirents1 to dirents2 and show added/deleted/changed files. */
+ merged_dirents = apr_hash_merge(scratch_pool, dirents1, dirents2,
+ NULL, NULL);
+ sorted_dirents = svn_sort__hash(merged_dirents,
+ svn_sort_compare_items_as_paths,
+ scratch_pool);
+ iterpool = svn_pool_create(scratch_pool);
+ for (i = 0; i < sorted_dirents->nelts; i++)
+ {
+ svn_sort__item_t elt = APR_ARRAY_IDX(sorted_dirents, i, svn_sort__item_t);
+ const char *name = elt.key;
+ svn_io_dirent2_t *dirent1;
+ svn_io_dirent2_t *dirent2;
+ const char *child1_abspath;
+ const char *child2_abspath;
+
+ svn_pool_clear(iterpool);
+
+ if (b->ctx->cancel_func)
+ SVN_ERR(b->ctx->cancel_func(b->ctx->cancel_baton));
+
+ if (strcmp(name, SVN_WC_ADM_DIR_NAME) == 0)
+ continue;
+
+ dirent1 = svn_hash_gets(dirents1, name);
+ if (!dirent1)
+ {
+ dirent1 = svn_io_dirent2_create(iterpool);
+ dirent1->kind = svn_node_none;
+ }
+ dirent2 = svn_hash_gets(dirents2, name);
+ if (!dirent2)
+ {
+ dirent2 = svn_io_dirent2_create(iterpool);
+ dirent2->kind = svn_node_none;
+ }
+
+ child1_abspath = svn_dirent_join(local_abspath1, name, iterpool);
+ child2_abspath = svn_dirent_join(local_abspath2, name, iterpool);
+
+ if (dirent1->special)
+ SVN_ERR(svn_io_check_resolved_path(child1_abspath, &dirent1->kind,
+ iterpool));
+ if (dirent2->special)
+ SVN_ERR(svn_io_check_resolved_path(child1_abspath, &dirent2->kind,
+ iterpool));
+
+ if (dirent1->kind == svn_node_dir &&
+ dirent2->kind == svn_node_dir)
+ {
+ if (depth == svn_depth_immediates)
+ {
+ /* Not using the walker, so show property diffs on these dirs. */
+ SVN_ERR(do_arbitrary_dirs_diff(child1_abspath, child2_abspath,
+ b->root1_abspath, b->root2_abspath,
+ svn_depth_empty,
+ b->callbacks, b->diff_baton,
+ b->ctx, iterpool));
+ }
+ else
+ {
+ /* Either the walker will visit these directories (with
+ * depth=infinity) and they will be processed as 'this dir'
+ * later, or we're showing file children only (depth=files). */
+ continue;
+ }
+
+ }
+
+ /* Files that exist only in dirents1. */
+ if (dirent1->kind == svn_node_file &&
+ (dirent2->kind == svn_node_dir || dirent2->kind == svn_node_none))
+ SVN_ERR(do_arbitrary_files_diff(child1_abspath, b->empty_file_abspath,
+ svn_relpath_join(child_relpath, name,
+ iterpool),
+ FALSE, TRUE, NULL,
+ b->callbacks, b->diff_baton,
+ b->ctx, iterpool));
+
+ /* Files that exist only in dirents2. */
+ if (dirent2->kind == svn_node_file &&
+ (dirent1->kind == svn_node_dir || dirent1->kind == svn_node_none))
+ {
+ apr_hash_t *original_props;
+
+ SVN_ERR(get_props(&original_props, child1_abspath, b->ctx->wc_ctx,
+ scratch_pool, scratch_pool));
+ SVN_ERR(do_arbitrary_files_diff(b->empty_file_abspath, child2_abspath,
+ svn_relpath_join(child_relpath, name,
+ iterpool),
+ TRUE, FALSE, original_props,
+ b->callbacks, b->diff_baton,
+ b->ctx, iterpool));
+ }
+
+ /* Files that exist in dirents1 and dirents2. */
+ if (dirent1->kind == svn_node_file && dirent2->kind == svn_node_file)
+ SVN_ERR(do_arbitrary_files_diff(child1_abspath, child2_abspath,
+ svn_relpath_join(child_relpath, name,
+ iterpool),
+ FALSE, FALSE, NULL,
+ b->callbacks, b->diff_baton,
+ b->ctx, scratch_pool));
+
+ /* Directories that only exist in dirents2. These aren't crawled
+ * by this walker so we have to crawl them separately. */
+ if (depth > svn_depth_files &&
+ dirent2->kind == svn_node_dir &&
+ (dirent1->kind == svn_node_file || dirent1->kind == svn_node_none))
+ SVN_ERR(do_arbitrary_dirs_diff(child1_abspath, child2_abspath,
+ b->root1_abspath, b->root2_abspath,
+ depth <= svn_depth_immediates
+ ? svn_depth_empty
+ : svn_depth_infinity ,
+ b->callbacks, b->diff_baton,
+ b->ctx, iterpool));
+ }
+
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+/* An implementation of svn_io_walk_func_t.
+ * Note: LOCAL_ABSPATH is the path being crawled and can be on either side
+ * of the diff depending on baton->recursing_within_added_subtree. */
+static svn_error_t *
+arbitrary_diff_walker(void *baton, const char *local_abspath,
+ const apr_finfo_t *finfo,
+ apr_pool_t *scratch_pool)
+{
+ struct arbitrary_diff_walker_baton *b = baton;
+
+ if (b->ctx->cancel_func)
+ SVN_ERR(b->ctx->cancel_func(b->ctx->cancel_baton));
+
+ if (finfo->filetype != APR_DIR)
+ return SVN_NO_ERROR;
+
+ SVN_ERR(arbitrary_diff_this_dir(b, local_abspath, svn_depth_infinity,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_client__arbitrary_nodes_diff(const char *local_abspath1,
+ const char *local_abspath2,
+ svn_depth_t depth,
+ const svn_wc_diff_callbacks4_t *callbacks,
+ void *diff_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
+{
+ svn_node_kind_t kind1;
+ svn_node_kind_t kind2;
+
+ SVN_ERR(svn_io_check_resolved_path(local_abspath1, &kind1, scratch_pool));
+ SVN_ERR(svn_io_check_resolved_path(local_abspath2, &kind2, scratch_pool));
+
+ if (kind1 != kind2)
+ return svn_error_createf(SVN_ERR_NODE_UNEXPECTED_KIND, NULL,
+ _("'%s' is not the same node kind as '%s'"),
+ svn_dirent_local_style(local_abspath1,
+ scratch_pool),
+ svn_dirent_local_style(local_abspath2,
+ scratch_pool));
+
+ if (depth == svn_depth_unknown)
+ depth = svn_depth_infinity;
+
+ if (kind1 == svn_node_file)
+ SVN_ERR(do_arbitrary_files_diff(local_abspath1, local_abspath2,
+ svn_dirent_basename(local_abspath1,
+ scratch_pool),
+ FALSE, FALSE, NULL,
+ callbacks, diff_baton,
+ ctx, scratch_pool));
+ else if (kind1 == svn_node_dir)
+ SVN_ERR(do_arbitrary_dirs_diff(local_abspath1, local_abspath2,
+ NULL, NULL, depth,
+ callbacks, diff_baton,
+ ctx, scratch_pool));
+ else
+ return svn_error_createf(SVN_ERR_NODE_UNEXPECTED_KIND, NULL,
+ _("'%s' is not a file or directory"),
+ kind1 == svn_node_none
+ ? svn_dirent_local_style(local_abspath1,
+ scratch_pool)
+ : svn_dirent_local_style(local_abspath2,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/libsvn_client/diff_summarize.c b/subversion/libsvn_client/diff_summarize.c
new file mode 100644
index 0000000..df0911b
--- /dev/null
+++ b/subversion/libsvn_client/diff_summarize.c
@@ -0,0 +1,317 @@
+/*
+ * repos_diff_summarize.c -- The diff callbacks for summarizing
+ * the differences of two repository versions
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+
+#include "svn_dirent_uri.h"
+#include "svn_hash.h"
+#include "svn_props.h"
+#include "svn_pools.h"
+
+#include "client.h"
+
+
+/* Diff callbacks baton. */
+struct summarize_baton_t {
+ /* The target path of the diff, relative to the anchor; "" if target == anchor. */
+ const char *target;
+
+ /* The summarize callback passed down from the API */
+ svn_client_diff_summarize_func_t summarize_func;
+
+ /* Is the diff handling reversed? (add<->delete) */
+ svn_boolean_t reversed;
+
+ /* The summarize callback baton */
+ void *summarize_func_baton;
+
+ /* Which paths have a prop change. Key is a (const char *) path; the value
+ * is any non-null pointer to indicate that this path has a prop change. */
+ apr_hash_t *prop_changes;
+};
+
+
+/* Call B->summarize_func with B->summarize_func_baton, passing it a
+ * summary object composed from PATH (but made to be relative to the target
+ * of the diff), SUMMARIZE_KIND, PROP_CHANGED (or FALSE if the action is an
+ * add or delete) and NODE_KIND. */
+static svn_error_t *
+send_summary(struct summarize_baton_t *b,
+ const char *path,
+ svn_client_diff_summarize_kind_t summarize_kind,
+ svn_boolean_t prop_changed,
+ svn_node_kind_t node_kind,
+ apr_pool_t *scratch_pool)
+{
+ svn_client_diff_summarize_t *sum = apr_pcalloc(scratch_pool, sizeof(*sum));
+
+ SVN_ERR_ASSERT(summarize_kind != svn_client_diff_summarize_kind_normal
+ || prop_changed);
+
+ if (b->reversed)
+ {
+ switch(summarize_kind)
+ {
+ case svn_client_diff_summarize_kind_added:
+ summarize_kind = svn_client_diff_summarize_kind_deleted;
+ break;
+ case svn_client_diff_summarize_kind_deleted:
+ summarize_kind = svn_client_diff_summarize_kind_added;
+ break;
+ default:
+ break;
+ }
+ }
+
+ /* PATH is relative to the anchor of the diff, but SUM->path needs to be
+ relative to the target of the diff. */
+ sum->path = svn_relpath_skip_ancestor(b->target, path);
+ sum->summarize_kind = summarize_kind;
+ if (summarize_kind == svn_client_diff_summarize_kind_modified
+ || summarize_kind == svn_client_diff_summarize_kind_normal)
+ sum->prop_changed = prop_changed;
+ sum->node_kind = node_kind;
+
+ SVN_ERR(b->summarize_func(sum, b->summarize_func_baton, scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+/* Are there any changes to relevant (normal) props in PROPCHANGES? */
+static svn_boolean_t
+props_changed(const apr_array_header_t *propchanges,
+ apr_pool_t *scratch_pool)
+{
+ apr_array_header_t *props;
+
+ svn_error_clear(svn_categorize_props(propchanges, NULL, NULL, &props,
+ scratch_pool));
+ return (props->nelts != 0);
+}
+
+
+static svn_error_t *
+cb_dir_deleted(svn_wc_notify_state_t *state,
+ svn_boolean_t *tree_conflicted,
+ const char *path,
+ void *diff_baton,
+ apr_pool_t *scratch_pool)
+{
+ struct summarize_baton_t *b = diff_baton;
+
+ SVN_ERR(send_summary(b, path, svn_client_diff_summarize_kind_deleted,
+ FALSE, svn_node_dir, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+cb_file_deleted(svn_wc_notify_state_t *state,
+ svn_boolean_t *tree_conflicted,
+ const char *path,
+ const char *tmpfile1,
+ const char *tmpfile2,
+ const char *mimetype1,
+ const char *mimetype2,
+ apr_hash_t *originalprops,
+ void *diff_baton,
+ apr_pool_t *scratch_pool)
+{
+ struct summarize_baton_t *b = diff_baton;
+
+ SVN_ERR(send_summary(b, path, svn_client_diff_summarize_kind_deleted,
+ FALSE, svn_node_file, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+cb_dir_added(svn_wc_notify_state_t *state,
+ svn_boolean_t *tree_conflicted,
+ svn_boolean_t *skip,
+ svn_boolean_t *skip_children,
+ const char *path,
+ svn_revnum_t rev,
+ const char *copyfrom_path,
+ svn_revnum_t copyfrom_revision,
+ void *diff_baton,
+ apr_pool_t *scratch_pool)
+{
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+cb_dir_opened(svn_boolean_t *tree_conflicted,
+ svn_boolean_t *skip,
+ svn_boolean_t *skip_children,
+ const char *path,
+ svn_revnum_t rev,
+ void *diff_baton,
+ apr_pool_t *scratch_pool)
+{
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+cb_dir_closed(svn_wc_notify_state_t *contentstate,
+ svn_wc_notify_state_t *propstate,
+ svn_boolean_t *tree_conflicted,
+ const char *path,
+ svn_boolean_t dir_was_added,
+ void *diff_baton,
+ apr_pool_t *scratch_pool)
+{
+ struct summarize_baton_t *b = diff_baton;
+ svn_boolean_t prop_change;
+
+ if (! svn_relpath_skip_ancestor(b->target, path))
+ return SVN_NO_ERROR;
+
+ prop_change = svn_hash_gets(b->prop_changes, path) != NULL;
+ if (dir_was_added || prop_change)
+ SVN_ERR(send_summary(b, path,
+ dir_was_added ? svn_client_diff_summarize_kind_added
+ : svn_client_diff_summarize_kind_normal,
+ prop_change, svn_node_dir, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+cb_file_added(svn_wc_notify_state_t *contentstate,
+ svn_wc_notify_state_t *propstate,
+ svn_boolean_t *tree_conflicted,
+ const char *path,
+ const char *tmpfile1,
+ const char *tmpfile2,
+ svn_revnum_t rev1,
+ svn_revnum_t rev2,
+ const char *mimetype1,
+ const char *mimetype2,
+ const char *copyfrom_path,
+ svn_revnum_t copyfrom_revision,
+ const apr_array_header_t *propchanges,
+ apr_hash_t *originalprops,
+ void *diff_baton,
+ apr_pool_t *scratch_pool)
+{
+ struct summarize_baton_t *b = diff_baton;
+
+ SVN_ERR(send_summary(b, path, svn_client_diff_summarize_kind_added,
+ props_changed(propchanges, scratch_pool),
+ svn_node_file, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+cb_file_opened(svn_boolean_t *tree_conflicted,
+ svn_boolean_t *skip,
+ const char *path,
+ svn_revnum_t rev,
+ void *diff_baton,
+ apr_pool_t *scratch_pool)
+{
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+cb_file_changed(svn_wc_notify_state_t *contentstate,
+ svn_wc_notify_state_t *propstate,
+ svn_boolean_t *tree_conflicted,
+ const char *path,
+ const char *tmpfile1,
+ const char *tmpfile2,
+ svn_revnum_t rev1,
+ svn_revnum_t rev2,
+ const char *mimetype1,
+ const char *mimetype2,
+ const apr_array_header_t *propchanges,
+ apr_hash_t *originalprops,
+ void *diff_baton,
+ apr_pool_t *scratch_pool)
+{
+ struct summarize_baton_t *b = diff_baton;
+ svn_boolean_t text_change = (tmpfile2 != NULL);
+ svn_boolean_t prop_change = props_changed(propchanges, scratch_pool);
+
+ if (text_change || prop_change)
+ SVN_ERR(send_summary(b, path,
+ text_change ? svn_client_diff_summarize_kind_modified
+ : svn_client_diff_summarize_kind_normal,
+ prop_change, svn_node_file, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+cb_dir_props_changed(svn_wc_notify_state_t *propstate,
+ svn_boolean_t *tree_conflicted,
+ const char *path,
+ svn_boolean_t dir_was_added,
+ const apr_array_header_t *propchanges,
+ apr_hash_t *original_props,
+ void *diff_baton,
+ apr_pool_t *scratch_pool)
+{
+ struct summarize_baton_t *b = diff_baton;
+
+ if (props_changed(propchanges, scratch_pool))
+ svn_hash_sets(b->prop_changes, path, path);
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_client__get_diff_summarize_callbacks(
+ svn_wc_diff_callbacks4_t **callbacks,
+ void **callback_baton,
+ const char *target,
+ svn_boolean_t reversed,
+ svn_client_diff_summarize_func_t summarize_func,
+ void *summarize_baton,
+ apr_pool_t *pool)
+{
+ svn_wc_diff_callbacks4_t *cb = apr_palloc(pool, sizeof(*cb));
+ struct summarize_baton_t *b = apr_palloc(pool, sizeof(*b));
+
+ b->target = target;
+ b->summarize_func = summarize_func;
+ b->summarize_func_baton = summarize_baton;
+ b->prop_changes = apr_hash_make(pool);
+ b->reversed = reversed;
+
+ cb->file_opened = cb_file_opened;
+ cb->file_changed = cb_file_changed;
+ cb->file_added = cb_file_added;
+ cb->file_deleted = cb_file_deleted;
+ cb->dir_deleted = cb_dir_deleted;
+ cb->dir_opened = cb_dir_opened;
+ cb->dir_added = cb_dir_added;
+ cb->dir_props_changed = cb_dir_props_changed;
+ cb->dir_closed = cb_dir_closed;
+
+ *callbacks = cb;
+ *callback_baton = b;
+
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/libsvn_client/export.c b/subversion/libsvn_client/export.c
index 5c684d5..c14a5f0 100644
--- a/subversion/libsvn_client/export.c
+++ b/subversion/libsvn_client/export.c
@@ -34,6 +34,7 @@
#include "svn_string.h"
#include "svn_error.h"
#include "svn_dirent_uri.h"
+#include "svn_hash.h"
#include "svn_path.h"
#include "svn_pools.h"
#include "svn_subst.h"
@@ -42,8 +43,14 @@
#include "client.h"
#include "svn_private_config.h"
+#include "private/svn_subr_private.h"
+#include "private/svn_delta_private.h"
#include "private/svn_wc_private.h"
+#ifndef ENABLE_EV2_IMPL
+#define ENABLE_EV2_IMPL 0
+#endif
+
/*** Code. ***/
@@ -62,9 +69,9 @@ add_externals(apr_hash_t *externals,
SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, pool));
- apr_hash_set(externals, local_abspath, APR_HASH_KEY_STRING,
- apr_pstrmemdup(pool, externals_prop_val->data,
- externals_prop_val->len));
+ svn_hash_sets(externals, local_abspath,
+ apr_pstrmemdup(pool, externals_prop_val->data,
+ externals_prop_val->len));
return SVN_NO_ERROR;
}
@@ -150,15 +157,31 @@ append_basename_if_dir(const char **appendable_dirent_p,
* Set the destination file's 'executable' flag according to the source
* file's 'svn:executable' property.
*/
+
+/* baton for export_node */
+struct export_info_baton
+{
+ const char *to_path;
+ const svn_opt_revision_t *revision;
+ svn_boolean_t ignore_keywords;
+ svn_boolean_t overwrite;
+ svn_wc_context_t *wc_ctx;
+ const char *native_eol;
+ svn_wc_notify_func2_t notify_func;
+ void *notify_baton;
+ const char *origin_abspath;
+ svn_boolean_t exported;
+};
+
+/* Export a file or directory. Implements svn_wc_status_func4_t */
static svn_error_t *
-copy_one_versioned_file(const char *from_abspath,
- const char *to_abspath,
- svn_client_ctx_t *ctx,
- const svn_opt_revision_t *revision,
- const char *native_eol,
- svn_boolean_t ignore_keywords,
- apr_pool_t *scratch_pool)
+export_node(void *baton,
+ const char *local_abspath,
+ const svn_wc_status3_t *status,
+ apr_pool_t *scratch_pool)
{
+ struct export_info_baton *eib = baton;
+ svn_wc_context_t *wc_ctx = eib->wc_ctx;
apr_hash_t *kw = NULL;
svn_subst_eol_style_t style;
apr_hash_t *props;
@@ -170,19 +193,108 @@ copy_one_versioned_file(const char *from_abspath,
svn_stream_t *dst_stream;
const char *dst_tmp;
svn_error_t *err;
- svn_boolean_t is_deleted;
- svn_wc_context_t *wc_ctx = ctx->wc_ctx;
- SVN_ERR(svn_wc__node_is_status_deleted(&is_deleted, wc_ctx, from_abspath,
- scratch_pool));
+ const char *to_abspath = svn_dirent_join(
+ eib->to_path,
+ svn_dirent_skip_ancestor(eib->origin_abspath,
+ local_abspath),
+ scratch_pool);
+
+ eib->exported = TRUE;
/* Don't export 'deleted' files and directories unless it's a
revision other than WORKING. These files and directories
don't really exist in WORKING. */
- if (revision->kind == svn_opt_revision_working && is_deleted)
+ if (eib->revision->kind == svn_opt_revision_working
+ && status->node_status == svn_wc_status_deleted)
return SVN_NO_ERROR;
- if (revision->kind != svn_opt_revision_working)
+ if (status->kind == svn_node_dir)
+ {
+ apr_fileperms_t perm = APR_OS_DEFAULT;
+
+ /* Try to make the new directory. If this fails because the
+ directory already exists, check our FORCE flag to see if we
+ care. */
+
+ /* Keep the source directory's permissions if applicable.
+ Skip retrieving the umask on windows. Apr does not implement setting
+ filesystem privileges on Windows.
+ Retrieving the file permissions with APR_FINFO_PROT | APR_FINFO_OWNER
+ is documented to be 'incredibly expensive' */
+#ifndef WIN32
+ if (eib->revision->kind == svn_opt_revision_working)
+ {
+ apr_finfo_t finfo;
+ SVN_ERR(svn_io_stat(&finfo, local_abspath, APR_FINFO_PROT,
+ scratch_pool));
+ perm = finfo.protection;
+ }
+#endif
+ err = svn_io_dir_make(to_abspath, perm, scratch_pool);
+ if (err)
+ {
+ if (! APR_STATUS_IS_EEXIST(err->apr_err))
+ return svn_error_trace(err);
+ if (! eib->overwrite)
+ SVN_ERR_W(err, _("Destination directory exists, and will not be "
+ "overwritten unless forced"));
+ else
+ svn_error_clear(err);
+ }
+
+ if (eib->notify_func
+ && (strcmp(eib->origin_abspath, local_abspath) != 0))
+ {
+ svn_wc_notify_t *notify =
+ svn_wc_create_notify(to_abspath,
+ svn_wc_notify_update_add, scratch_pool);
+
+ notify->kind = svn_node_dir;
+ (eib->notify_func)(eib->notify_baton, notify, scratch_pool);
+ }
+
+ return SVN_NO_ERROR;
+ }
+ else if (status->kind != svn_node_file)
+ {
+ if (strcmp(eib->origin_abspath, local_abspath) != 0)
+ return SVN_NO_ERROR;
+
+ return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
+ _("The node '%s' was not found."),
+ svn_dirent_local_style(local_abspath,
+ scratch_pool));
+ }
+
+ /* Skip file externals if they are a descendant of the export,
+ BUT NOT if we are explictly exporting the file external. */
+ if (status->file_external && strcmp(eib->origin_abspath, local_abspath) != 0)
+ return SVN_NO_ERROR;
+
+ /* Produce overwrite errors for the export root */
+ if (strcmp(local_abspath, eib->origin_abspath) == 0)
+ {
+ svn_node_kind_t to_kind;
+
+ SVN_ERR(svn_io_check_path(to_abspath, &to_kind, scratch_pool));
+
+ if ((to_kind == svn_node_file || to_kind == svn_node_unknown)
+ && !eib->overwrite)
+ return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("Destination file '%s' exists, and "
+ "will not be overwritten unless forced"),
+ svn_dirent_local_style(to_abspath,
+ scratch_pool));
+ else if (to_kind == svn_node_dir)
+ return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("Destination '%s' exists. Cannot "
+ "overwrite directory with non-directory"),
+ svn_dirent_local_style(to_abspath,
+ scratch_pool));
+ }
+
+ if (eib->revision->kind != svn_opt_revision_working)
{
/* Only export 'added' files when the revision is WORKING. This is not
WORKING, so skip the 'added' files, since they didn't exist
@@ -207,38 +319,34 @@ copy_one_versioned_file(const char *from_abspath,
We get all this for free from evaluating SOURCE == NULL:
*/
- SVN_ERR(svn_wc_get_pristine_contents2(&source, wc_ctx, from_abspath,
+ SVN_ERR(svn_wc_get_pristine_contents2(&source, wc_ctx, local_abspath,
scratch_pool, scratch_pool));
if (source == NULL)
return SVN_NO_ERROR;
- SVN_ERR(svn_wc_get_pristine_props(&props, wc_ctx, from_abspath,
+ SVN_ERR(svn_wc_get_pristine_props(&props, wc_ctx, local_abspath,
scratch_pool, scratch_pool));
}
else
{
- svn_wc_status3_t *status;
-
/* ### hmm. this isn't always a specialfile. this will simply open
### the file readonly if it is a regular file. */
- SVN_ERR(svn_subst_read_specialfile(&source, from_abspath, scratch_pool,
+ SVN_ERR(svn_subst_read_specialfile(&source, local_abspath, scratch_pool,
scratch_pool));
- SVN_ERR(svn_wc_prop_list2(&props, wc_ctx, from_abspath, scratch_pool,
+ SVN_ERR(svn_wc_prop_list2(&props, wc_ctx, local_abspath, scratch_pool,
scratch_pool));
- SVN_ERR(svn_wc_status3(&status, wc_ctx, from_abspath, scratch_pool,
- scratch_pool));
- if (status->text_status != svn_wc_status_normal)
+ if (status->node_status != svn_wc_status_normal)
local_mod = TRUE;
}
/* We can early-exit if we're creating a special file. */
- special = apr_hash_get(props, SVN_PROP_SPECIAL,
- APR_HASH_KEY_STRING);
+ special = svn_hash_gets(props, SVN_PROP_SPECIAL);
if (special != NULL)
{
/* Create the destination as a special file, and copy the source
details into the destination stream. */
+ /* ### And forget the notification */
SVN_ERR(svn_subst_create_specialfile(&dst_stream, to_abspath,
scratch_pool, scratch_pool));
return svn_error_trace(
@@ -246,40 +354,32 @@ copy_one_versioned_file(const char *from_abspath,
}
- eol_style = apr_hash_get(props, SVN_PROP_EOL_STYLE,
- APR_HASH_KEY_STRING);
- keywords = apr_hash_get(props, SVN_PROP_KEYWORDS,
- APR_HASH_KEY_STRING);
- executable = apr_hash_get(props, SVN_PROP_EXECUTABLE,
- APR_HASH_KEY_STRING);
+ eol_style = svn_hash_gets(props, SVN_PROP_EOL_STYLE);
+ keywords = svn_hash_gets(props, SVN_PROP_KEYWORDS);
+ executable = svn_hash_gets(props, SVN_PROP_EXECUTABLE);
if (eol_style)
- SVN_ERR(get_eol_style(&style, &eol, eol_style->data, native_eol));
+ SVN_ERR(get_eol_style(&style, &eol, eol_style->data, eib->native_eol));
if (local_mod)
{
/* Use the modified time from the working copy of
the file */
- SVN_ERR(svn_io_file_affected_time(&tm, from_abspath, scratch_pool));
+ SVN_ERR(svn_io_file_affected_time(&tm, local_abspath, scratch_pool));
}
else
{
- SVN_ERR(svn_wc__node_get_changed_info(NULL, &tm, NULL, wc_ctx,
- from_abspath, scratch_pool,
- scratch_pool));
+ tm = status->changed_date;
}
if (keywords)
{
- svn_revnum_t changed_rev;
+ svn_revnum_t changed_rev = status->changed_rev;
const char *suffix;
- const char *url;
- const char *author;
-
- SVN_ERR(svn_wc__node_get_changed_info(&changed_rev, NULL, &author,
- wc_ctx, from_abspath, scratch_pool,
- scratch_pool));
-
+ const char *url = svn_path_url_add_component2(status->repos_root_url,
+ status->repos_relpath,
+ scratch_pool);
+ const char *author = status->changed_author;
if (local_mod)
{
/* For locally modified files, we'll append an 'M'
@@ -294,13 +394,11 @@ copy_one_versioned_file(const char *from_abspath,
suffix = "";
}
- SVN_ERR(svn_wc__node_get_url(&url, wc_ctx, from_abspath,
- scratch_pool, scratch_pool));
-
- SVN_ERR(svn_subst_build_keywords2
- (&kw, keywords->data,
- apr_psprintf(scratch_pool, "%ld%s", changed_rev, suffix),
- url, tm, author, scratch_pool));
+ SVN_ERR(svn_subst_build_keywords3(&kw, keywords->data,
+ apr_psprintf(scratch_pool, "%ld%s",
+ changed_rev, suffix),
+ url, status->repos_root_url, tm,
+ author, scratch_pool));
}
/* For atomicity, we translate to a tmp file and then rename the tmp file
@@ -317,7 +415,7 @@ copy_one_versioned_file(const char *from_abspath,
eol,
FALSE /* repair */,
kw,
- ! ignore_keywords /* expand */,
+ ! eib->ignore_keywords /* expand */,
scratch_pool);
/* ###: use cancel func/baton in place of NULL/NULL below. */
@@ -336,273 +434,17 @@ copy_one_versioned_file(const char *from_abspath,
/* Now that dst_tmp contains the translated data, do the atomic rename. */
SVN_ERR(svn_io_file_rename(dst_tmp, to_abspath, scratch_pool));
- if (ctx->notify_func2)
+ if (eib->notify_func)
{
svn_wc_notify_t *notify = svn_wc_create_notify(to_abspath,
svn_wc_notify_update_add, scratch_pool);
notify->kind = svn_node_file;
- (*ctx->notify_func2)(ctx->notify_baton2, notify, scratch_pool);
- }
-
- return SVN_NO_ERROR;
-}
-
-/* Make an unversioned copy of the versioned file or directory tree at the
- * source path FROM_ABSPATH. Copy it to the destination path TO_ABSPATH.
- *
- * If REVISION is svn_opt_revision_working, copy the working version,
- * otherwise copy the base version.
- *
- * See copy_one_versioned_file() for details of file copying behaviour,
- * including IGNORE_KEYWORDS and NATIVE_EOL.
- *
- * Include externals unless IGNORE_EXTERNALS is true.
- *
- * Recurse according to DEPTH.
- *
-
- */
-static svn_error_t *
-copy_versioned_files(const char *from_abspath,
- const char *to_abspath,
- const svn_opt_revision_t *revision,
- svn_boolean_t force,
- svn_boolean_t ignore_externals,
- svn_boolean_t ignore_keywords,
- svn_depth_t depth,
- const char *native_eol,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool)
-{
- svn_error_t *err;
- apr_pool_t *iterpool;
- const apr_array_header_t *children;
- svn_node_kind_t from_kind;
- svn_depth_t node_depth;
-
- SVN_ERR_ASSERT(svn_dirent_is_absolute(from_abspath));
- SVN_ERR_ASSERT(svn_dirent_is_absolute(to_abspath));
-
- /* Only export 'added' and 'replaced' files when the revision is WORKING;
- when the revision is BASE (i.e. != WORKING), only export 'added' and
- 'replaced' files when they are part of a copy-/move-here. Otherwise, skip
- them, since they don't have an associated text-base. This condition for
- added/replaced simply is an optimization. Added and replaced files would
- be handled similarly by svn_wc_get_pristine_contents2(), which would
- return NULL if they have no base associated.
- TODO: We may prefer not to duplicate this condition and rather use
- svn_wc_get_pristine_contents2() or a dedicated new function instead.
-
- Don't export 'deleted' files and directories unless it's a
- revision other than WORKING. These files and directories
- don't really exist in WORKING. */
- if (revision->kind != svn_opt_revision_working)
- {
- svn_boolean_t is_added;
- const char *repos_relpath;
-
- SVN_ERR(svn_wc__node_get_origin(&is_added, NULL, &repos_relpath,
- NULL, NULL, NULL,
- ctx->wc_ctx, from_abspath, FALSE,
- pool, pool));
-
- if (is_added && !repos_relpath)
- return SVN_NO_ERROR; /* Local addition */
- }
- else
- {
- svn_boolean_t is_deleted;
-
- SVN_ERR(svn_wc__node_is_status_deleted(&is_deleted, ctx->wc_ctx,
- from_abspath, pool));
- if (is_deleted)
- return SVN_NO_ERROR;
- }
-
- SVN_ERR(svn_wc_read_kind(&from_kind, ctx->wc_ctx, from_abspath, FALSE,
- pool));
-
- if (from_kind == svn_node_dir)
- {
- apr_fileperms_t perm = APR_OS_DEFAULT;
- int j;
-
- /* Try to make the new directory. If this fails because the
- directory already exists, check our FORCE flag to see if we
- care. */
-
- /* Keep the source directory's permissions if applicable.
- Skip retrieving the umask on windows. Apr does not implement setting
- filesystem privileges on Windows.
- Retrieving the file permissions with APR_FINFO_PROT | APR_FINFO_OWNER
- is documented to be 'incredibly expensive' */
-#ifndef WIN32
- if (revision->kind == svn_opt_revision_working)
- {
- apr_finfo_t finfo;
- SVN_ERR(svn_io_stat(&finfo, from_abspath, APR_FINFO_PROT, pool));
- perm = finfo.protection;
- }
-#endif
- err = svn_io_dir_make(to_abspath, perm, pool);
- if (err)
- {
- if (! APR_STATUS_IS_EEXIST(err->apr_err))
- return svn_error_trace(err);
- if (! force)
- SVN_ERR_W(err, _("Destination directory exists, and will not be "
- "overwritten unless forced"));
- else
- svn_error_clear(err);
- }
-
- SVN_ERR(svn_wc__node_get_children(&children, ctx->wc_ctx, from_abspath,
- FALSE, pool, pool));
-
- iterpool = svn_pool_create(pool);
- for (j = 0; j < children->nelts; j++)
- {
- const char *child_abspath = APR_ARRAY_IDX(children, j, const char *);
- const char *child_name = svn_dirent_basename(child_abspath, NULL);
- const char *target_abspath;
- svn_node_kind_t child_kind;
-
- svn_pool_clear(iterpool);
-
- if (ctx->cancel_func)
- SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
-
- target_abspath = svn_dirent_join(to_abspath, child_name, iterpool);
-
- SVN_ERR(svn_wc_read_kind(&child_kind, ctx->wc_ctx, child_abspath,
- FALSE, iterpool));
-
- if (child_kind == svn_node_dir)
- {
- if (depth == svn_depth_infinity
- || depth == svn_depth_immediates)
- {
- if (ctx->notify_func2)
- {
- svn_wc_notify_t *notify =
- svn_wc_create_notify(target_abspath,
- svn_wc_notify_update_add, pool);
- notify->kind = svn_node_dir;
- (*ctx->notify_func2)(ctx->notify_baton2, notify, pool);
- }
-
- if (depth == svn_depth_infinity)
- SVN_ERR(copy_versioned_files(child_abspath, target_abspath,
- revision, force,
- ignore_externals,
- ignore_keywords, depth,
- native_eol, ctx, iterpool));
- else
- SVN_ERR(svn_io_make_dir_recursively(target_abspath,
- iterpool));
- }
- }
- else if (child_kind == svn_node_file
- && depth >= svn_depth_files)
- {
- svn_node_kind_t external_kind;
-
- SVN_ERR(svn_wc__read_external_info(&external_kind,
- NULL, NULL, NULL,
- NULL, ctx->wc_ctx,
- child_abspath,
- child_abspath, TRUE,
- pool, pool));
-
- if (external_kind != svn_node_file)
- SVN_ERR(copy_one_versioned_file(child_abspath, target_abspath,
- ctx, revision,
- native_eol, ignore_keywords,
- iterpool));
- }
- }
-
- SVN_ERR(svn_wc__node_get_depth(&node_depth, ctx->wc_ctx,
- from_abspath, pool));
-
- /* Handle externals. */
- if (! ignore_externals && depth == svn_depth_infinity
- && node_depth == svn_depth_infinity)
- {
- apr_array_header_t *ext_items;
- const svn_string_t *prop_val;
-
- SVN_ERR(svn_wc_prop_get2(&prop_val, ctx->wc_ctx, from_abspath,
- SVN_PROP_EXTERNALS, pool, pool));
- if (prop_val != NULL)
- {
- int i;
-
- SVN_ERR(svn_wc_parse_externals_description3(&ext_items,
- from_abspath,
- prop_val->data,
- FALSE, pool));
- for (i = 0; i < ext_items->nelts; ++i)
- {
- svn_wc_external_item2_t *ext_item;
- const char *new_from, *new_to;
-
- svn_pool_clear(iterpool);
-
- ext_item = APR_ARRAY_IDX(ext_items, i,
- svn_wc_external_item2_t *);
- new_from = svn_dirent_join(from_abspath,
- ext_item->target_dir,
- iterpool);
- new_to = svn_dirent_join(to_abspath, ext_item->target_dir,
- iterpool);
-
- /* The target dir might have parents that don't exist.
- Guarantee the path upto the last component. */
- if (!svn_dirent_is_root(ext_item->target_dir,
- strlen(ext_item->target_dir)))
- {
- const char *parent = svn_dirent_dirname(new_to, iterpool);
- SVN_ERR(svn_io_make_dir_recursively(parent, iterpool));
- }
-
- SVN_ERR(copy_versioned_files(new_from, new_to,
- revision, force, FALSE,
- ignore_keywords,
- svn_depth_infinity, native_eol,
- ctx, iterpool));
- }
- }
- }
-
- svn_pool_destroy(iterpool);
- }
- else if (from_kind == svn_node_file)
- {
- svn_node_kind_t to_kind;
-
- SVN_ERR(svn_io_check_path(to_abspath, &to_kind, pool));
-
- if ((to_kind == svn_node_file || to_kind == svn_node_unknown) && ! force)
- return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
- _("Destination file '%s' exists, and "
- "will not be overwritten unless forced"),
- svn_dirent_local_style(to_abspath, pool));
- else if (to_kind == svn_node_dir)
- return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
- _("Destination '%s' exists. Cannot "
- "overwrite directory with non-directory"),
- svn_dirent_local_style(to_abspath, pool));
-
- SVN_ERR(copy_one_versioned_file(from_abspath, to_abspath, ctx,
- revision, native_eol, ignore_keywords,
- pool));
+ (eib->notify_func)(eib->notify_baton, notify, scratch_pool);
}
return SVN_NO_ERROR;
}
-
/* Abstraction of open_root.
*
* Create PATH if it does not exist and is not obstructed, and invoke
@@ -656,6 +498,7 @@ open_root_internal(const char *path,
struct edit_baton
{
+ const char *repos_root_url;
const char *root_path;
const char *root_url;
svn_boolean_t force;
@@ -702,6 +545,7 @@ struct file_baton
/* Any keyword vals to be substituted */
const char *revision;
const char *url;
+ const char *repos_root_url;
const char *author;
apr_time_t date;
@@ -823,6 +667,7 @@ add_file(const char *path,
fb->edit_baton = eb;
fb->path = full_path;
fb->url = full_url;
+ fb->repos_root_url = eb->repos_root_url;
fb->pool = pool;
*baton = fb;
@@ -840,7 +685,9 @@ window_handler(svn_txdelta_window_t *window, void *baton)
if (err)
{
/* We failed to apply the patch; clean up the temporary file. */
- svn_error_clear(svn_io_remove_file2(hb->tmppath, TRUE, hb->pool));
+ err = svn_error_compose_create(
+ err,
+ svn_io_remove_file2(hb->tmppath, TRUE, hb->pool));
}
return svn_error_trace(err);
@@ -957,8 +804,7 @@ close_file(void *file_baton,
SVN_ERR(svn_checksum_parse_hex(&text_checksum, svn_checksum_md5, text_digest,
pool));
- actual_checksum = svn_checksum__from_digest(fb->text_digest,
- svn_checksum_md5, pool);
+ actual_checksum = svn_checksum__from_digest_md5(fb->text_digest, pool);
/* Note that text_digest can be NULL when talking to certain repositories.
In that case text_checksum will be NULL and the following match code
@@ -987,8 +833,9 @@ close_file(void *file_baton,
}
if (fb->keywords_val)
- SVN_ERR(svn_subst_build_keywords2(&final_kw, fb->keywords_val->data,
- fb->revision, fb->url, fb->date,
+ SVN_ERR(svn_subst_build_keywords3(&final_kw, fb->keywords_val->data,
+ fb->revision, fb->url,
+ fb->repos_root_url, fb->date,
fb->author, pool));
SVN_ERR(svn_subst_copy_and_translate4(fb->tmppath, fb->path,
@@ -1020,6 +867,504 @@ close_file(void *file_baton,
return SVN_NO_ERROR;
}
+static svn_error_t *
+fetch_props_func(apr_hash_t **props,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ /* Always use empty props, since the node won't have pre-existing props
+ (This is an export, remember?) */
+ *props = apr_hash_make(result_pool);
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+fetch_base_func(const char **filename,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ /* An export always gets text against the empty stream (i.e, full texts). */
+ *filename = NULL;
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+get_editor_ev1(const svn_delta_editor_t **export_editor,
+ void **edit_baton,
+ struct edit_baton *eb,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_delta_editor_t *editor = svn_delta_default_editor(result_pool);
+
+ editor->set_target_revision = set_target_revision;
+ editor->open_root = open_root;
+ editor->add_directory = add_directory;
+ editor->add_file = add_file;
+ editor->apply_textdelta = apply_textdelta;
+ editor->close_file = close_file;
+ editor->change_file_prop = change_file_prop;
+ editor->change_dir_prop = change_dir_prop;
+
+ SVN_ERR(svn_delta_get_cancellation_editor(ctx->cancel_func,
+ ctx->cancel_baton,
+ editor,
+ eb,
+ export_editor,
+ edit_baton,
+ result_pool));
+
+ return SVN_NO_ERROR;
+}
+
+
+/*** The Ev2 Implementation ***/
+
+static svn_error_t *
+add_file_ev2(void *baton,
+ const char *relpath,
+ const svn_checksum_t *checksum,
+ svn_stream_t *contents,
+ apr_hash_t *props,
+ svn_revnum_t replaces_rev,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton *eb = baton;
+ const char *full_path = svn_dirent_join(eb->root_path, relpath,
+ scratch_pool);
+ /* RELPATH is not canonicalized, i.e. it may still contain spaces etc.
+ * but EB->root_url is. */
+ const char *full_url = svn_path_url_add_component2(eb->root_url,
+ relpath,
+ scratch_pool);
+ const svn_string_t *val;
+ /* The four svn: properties we might actually care about. */
+ const svn_string_t *eol_style_val = NULL;
+ const svn_string_t *keywords_val = NULL;
+ const svn_string_t *executable_val = NULL;
+ svn_boolean_t special = FALSE;
+ /* Any keyword vals to be substituted */
+ const char *revision = NULL;
+ const char *author = NULL;
+ apr_time_t date = 0;
+
+ /* Look at any properties for additional information. */
+ if ( (val = svn_hash_gets(props, SVN_PROP_EOL_STYLE)) )
+ eol_style_val = val;
+
+ if ( !eb->ignore_keywords && (val = svn_hash_gets(props, SVN_PROP_KEYWORDS)) )
+ keywords_val = val;
+
+ if ( (val = svn_hash_gets(props, SVN_PROP_EXECUTABLE)) )
+ executable_val = val;
+
+ /* Try to fill out the baton's keywords-structure too. */
+ if ( (val = svn_hash_gets(props, SVN_PROP_ENTRY_COMMITTED_REV)) )
+ revision = val->data;
+
+ if ( (val = svn_hash_gets(props, SVN_PROP_ENTRY_COMMITTED_DATE)) )
+ SVN_ERR(svn_time_from_cstring(&date, val->data, scratch_pool));
+
+ if ( (val = svn_hash_gets(props, SVN_PROP_ENTRY_LAST_AUTHOR)) )
+ author = val->data;
+
+ if ( (val = svn_hash_gets(props, SVN_PROP_SPECIAL)) )
+ special = TRUE;
+
+ if (special)
+ {
+ svn_stream_t *tmp_stream;
+
+ SVN_ERR(svn_subst_create_specialfile(&tmp_stream, full_path,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_stream_copy3(contents, tmp_stream, eb->cancel_func,
+ eb->cancel_baton, scratch_pool));
+ }
+ else
+ {
+ svn_stream_t *tmp_stream;
+ const char *tmppath;
+
+ /* Create a temporary file in the same directory as the file. We're going
+ to rename the thing into place when we're done. */
+ SVN_ERR(svn_stream_open_unique(&tmp_stream, &tmppath,
+ svn_dirent_dirname(full_path,
+ scratch_pool),
+ svn_io_file_del_none,
+ scratch_pool, scratch_pool));
+
+ /* Possibly wrap the stream to be translated, as dictated by
+ the props. */
+ if (eol_style_val || keywords_val)
+ {
+ svn_subst_eol_style_t style;
+ const char *eol = NULL;
+ svn_boolean_t repair = FALSE;
+ apr_hash_t *final_kw = NULL;
+
+ if (eol_style_val)
+ {
+ SVN_ERR(get_eol_style(&style, &eol, eol_style_val->data,
+ eb->native_eol));
+ repair = TRUE;
+ }
+
+ if (keywords_val)
+ SVN_ERR(svn_subst_build_keywords3(&final_kw, keywords_val->data,
+ revision, full_url,
+ eb->repos_root_url,
+ date, author, scratch_pool));
+
+ /* Writing through a translated stream is more efficient than
+ reading through one, so we wrap TMP_STREAM and not CONTENTS. */
+ tmp_stream = svn_subst_stream_translated(tmp_stream, eol, repair,
+ final_kw, TRUE, /* expand */
+ scratch_pool);
+ }
+
+ SVN_ERR(svn_stream_copy3(contents, tmp_stream, eb->cancel_func,
+ eb->cancel_baton, scratch_pool));
+
+ /* Move the file into place. */
+ SVN_ERR(svn_io_file_rename(tmppath, full_path, scratch_pool));
+ }
+
+ if (executable_val)
+ SVN_ERR(svn_io_set_file_executable(full_path, TRUE, FALSE, scratch_pool));
+
+ if (date && (! special))
+ SVN_ERR(svn_io_set_file_affected_time(date, full_path, scratch_pool));
+
+ if (eb->notify_func)
+ {
+ svn_wc_notify_t *notify = svn_wc_create_notify(full_path,
+ svn_wc_notify_update_add,
+ scratch_pool);
+ notify->kind = svn_node_file;
+ (*eb->notify_func)(eb->notify_baton, notify, scratch_pool);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+add_directory_ev2(void *baton,
+ const char *relpath,
+ const apr_array_header_t *children,
+ apr_hash_t *props,
+ svn_revnum_t replaces_rev,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton *eb = baton;
+ svn_node_kind_t kind;
+ const char *full_path = svn_dirent_join(eb->root_path, relpath,
+ scratch_pool);
+ svn_string_t *val;
+
+ SVN_ERR(svn_io_check_path(full_path, &kind, scratch_pool));
+ if (kind == svn_node_none)
+ SVN_ERR(svn_io_dir_make(full_path, APR_OS_DEFAULT, scratch_pool));
+ else if (kind == svn_node_file)
+ return svn_error_createf(SVN_ERR_WC_NOT_WORKING_COPY, NULL,
+ _("'%s' exists and is not a directory"),
+ svn_dirent_local_style(full_path, scratch_pool));
+ else if (! (kind == svn_node_dir && eb->force))
+ return svn_error_createf(SVN_ERR_WC_OBSTRUCTED_UPDATE, NULL,
+ _("'%s' already exists"),
+ svn_dirent_local_style(full_path, scratch_pool));
+
+ if ( (val = svn_hash_gets(props, SVN_PROP_EXTERNALS)) )
+ SVN_ERR(add_externals(eb->externals, full_path, val));
+
+ if (eb->notify_func)
+ {
+ svn_wc_notify_t *notify = svn_wc_create_notify(full_path,
+ svn_wc_notify_update_add,
+ scratch_pool);
+ notify->kind = svn_node_dir;
+ (*eb->notify_func)(eb->notify_baton, notify, scratch_pool);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+target_revision_func(void *baton,
+ svn_revnum_t target_revision,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton *eb = baton;
+
+ *eb->target_revision = target_revision;
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+get_editor_ev2(const svn_delta_editor_t **export_editor,
+ void **edit_baton,
+ struct edit_baton *eb,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_editor_t *editor;
+ struct svn_delta__extra_baton *exb = apr_pcalloc(result_pool, sizeof(*exb));
+ svn_boolean_t *found_abs_paths = apr_palloc(result_pool,
+ sizeof(*found_abs_paths));
+
+ exb->baton = eb;
+ exb->target_revision = target_revision_func;
+
+ SVN_ERR(svn_editor_create(&editor, eb, ctx->cancel_func, ctx->cancel_baton,
+ result_pool, scratch_pool));
+ SVN_ERR(svn_editor_setcb_add_directory(editor, add_directory_ev2,
+ scratch_pool));
+ SVN_ERR(svn_editor_setcb_add_file(editor, add_file_ev2, scratch_pool));
+
+ *found_abs_paths = TRUE;
+
+ SVN_ERR(svn_delta__delta_from_editor(export_editor, edit_baton,
+ editor, NULL, NULL, found_abs_paths,
+ NULL, NULL,
+ fetch_props_func, eb,
+ fetch_base_func, eb,
+ exb, result_pool));
+
+ /* Create the root of the export. */
+ SVN_ERR(open_root_internal(eb->root_path, eb->force, eb->notify_func,
+ eb->notify_baton, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+export_file_ev2(const char *from_path_or_url,
+ const char *to_path,
+ struct edit_baton *eb,
+ svn_client__pathrev_t *loc,
+ svn_ra_session_t *ra_session,
+ svn_boolean_t overwrite,
+ apr_pool_t *scratch_pool)
+{
+ svn_boolean_t from_is_url = svn_path_is_url(from_path_or_url);
+ apr_hash_t *props;
+ svn_stream_t *tmp_stream;
+ svn_node_kind_t to_kind;
+
+ if (svn_path_is_empty(to_path))
+ {
+ if (from_is_url)
+ to_path = svn_uri_basename(from_path_or_url, scratch_pool);
+ else
+ to_path = svn_dirent_basename(from_path_or_url, NULL);
+ eb->root_path = to_path;
+ }
+ else
+ {
+ SVN_ERR(append_basename_if_dir(&to_path, from_path_or_url,
+ from_is_url, scratch_pool));
+ eb->root_path = to_path;
+ }
+
+ SVN_ERR(svn_io_check_path(to_path, &to_kind, scratch_pool));
+
+ if ((to_kind == svn_node_file || to_kind == svn_node_unknown) &&
+ ! overwrite)
+ return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("Destination file '%s' exists, and "
+ "will not be overwritten unless forced"),
+ svn_dirent_local_style(to_path, scratch_pool));
+ else if (to_kind == svn_node_dir)
+ return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("Destination '%s' exists. Cannot "
+ "overwrite directory with non-directory"),
+ svn_dirent_local_style(to_path, scratch_pool));
+
+ tmp_stream = svn_stream_buffered(scratch_pool);
+
+ SVN_ERR(svn_ra_get_file(ra_session, "", loc->rev,
+ tmp_stream, NULL, &props, scratch_pool));
+
+ /* Since you cannot actually root an editor at a file, we manually drive
+ * a function of our editor. */
+ SVN_ERR(add_file_ev2(eb, "", NULL, tmp_stream, props, SVN_INVALID_REVNUM,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+export_file(const char *from_path_or_url,
+ const char *to_path,
+ struct edit_baton *eb,
+ svn_client__pathrev_t *loc,
+ svn_ra_session_t *ra_session,
+ svn_boolean_t overwrite,
+ apr_pool_t *scratch_pool)
+{
+ apr_hash_t *props;
+ apr_hash_index_t *hi;
+ struct file_baton *fb = apr_pcalloc(scratch_pool, sizeof(*fb));
+ svn_node_kind_t to_kind;
+ svn_boolean_t from_is_url = svn_path_is_url(from_path_or_url);
+
+ if (svn_path_is_empty(to_path))
+ {
+ if (from_is_url)
+ to_path = svn_uri_basename(from_path_or_url, scratch_pool);
+ else
+ to_path = svn_dirent_basename(from_path_or_url, NULL);
+ eb->root_path = to_path;
+ }
+ else
+ {
+ SVN_ERR(append_basename_if_dir(&to_path, from_path_or_url,
+ from_is_url, scratch_pool));
+ eb->root_path = to_path;
+ }
+
+ SVN_ERR(svn_io_check_path(to_path, &to_kind, scratch_pool));
+
+ if ((to_kind == svn_node_file || to_kind == svn_node_unknown) &&
+ ! overwrite)
+ return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("Destination file '%s' exists, and "
+ "will not be overwritten unless forced"),
+ svn_dirent_local_style(to_path, scratch_pool));
+ else if (to_kind == svn_node_dir)
+ return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("Destination '%s' exists. Cannot "
+ "overwrite directory with non-directory"),
+ svn_dirent_local_style(to_path, scratch_pool));
+
+ /* Since you cannot actually root an editor at a file, we
+ * manually drive a few functions of our editor. */
+
+ /* This is the equivalent of a parentless add_file(). */
+ fb->edit_baton = eb;
+ fb->path = eb->root_path;
+ fb->url = eb->root_url;
+ fb->pool = scratch_pool;
+ fb->repos_root_url = eb->repos_root_url;
+
+ /* Copied from apply_textdelta(). */
+ SVN_ERR(svn_stream_open_unique(&fb->tmp_stream, &fb->tmppath,
+ svn_dirent_dirname(fb->path, scratch_pool),
+ svn_io_file_del_none,
+ fb->pool, fb->pool));
+
+ /* Step outside the editor-likeness for a moment, to actually talk
+ * to the repository. */
+ /* ### note: the stream will not be closed */
+ SVN_ERR(svn_ra_get_file(ra_session, "", loc->rev,
+ fb->tmp_stream,
+ NULL, &props, scratch_pool));
+
+ /* Push the props into change_file_prop(), to update the file_baton
+ * with information. */
+ for (hi = apr_hash_first(scratch_pool, props); hi; hi = apr_hash_next(hi))
+ {
+ const char *propname = svn__apr_hash_index_key(hi);
+ const svn_string_t *propval = svn__apr_hash_index_val(hi);
+
+ SVN_ERR(change_file_prop(fb, propname, propval, scratch_pool));
+ }
+
+ /* And now just use close_file() to do all the keyword and EOL
+ * work, and put the file into place. */
+ SVN_ERR(close_file(fb, NULL, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+export_directory(const char *from_path_or_url,
+ const char *to_path,
+ struct edit_baton *eb,
+ svn_client__pathrev_t *loc,
+ svn_ra_session_t *ra_session,
+ svn_boolean_t overwrite,
+ svn_boolean_t ignore_externals,
+ svn_boolean_t ignore_keywords,
+ svn_depth_t depth,
+ const char *native_eol,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
+{
+ void *edit_baton;
+ const svn_delta_editor_t *export_editor;
+ const svn_ra_reporter3_t *reporter;
+ void *report_baton;
+ svn_node_kind_t kind;
+
+ if (!ENABLE_EV2_IMPL)
+ SVN_ERR(get_editor_ev1(&export_editor, &edit_baton, eb, ctx,
+ scratch_pool, scratch_pool));
+ else
+ SVN_ERR(get_editor_ev2(&export_editor, &edit_baton, eb, ctx,
+ scratch_pool, scratch_pool));
+
+ /* Manufacture a basic 'report' to the update reporter. */
+ SVN_ERR(svn_ra_do_update3(ra_session,
+ &reporter, &report_baton,
+ loc->rev,
+ "", /* no sub-target */
+ depth,
+ FALSE, /* don't want copyfrom-args */
+ FALSE, /* don't want ignore_ancestry */
+ export_editor, edit_baton,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(reporter->set_path(report_baton, "", loc->rev,
+ /* Depth is irrelevant, as we're
+ passing start_empty=TRUE anyway. */
+ svn_depth_infinity,
+ TRUE, /* "help, my dir is empty!" */
+ NULL, scratch_pool));
+
+ SVN_ERR(reporter->finish_report(report_baton, scratch_pool));
+
+ /* Special case: Due to our sly export/checkout method of updating an
+ * empty directory, no target will have been created if the exported
+ * item is itself an empty directory (export_editor->open_root never
+ * gets called, because there are no "changes" to make to the empty
+ * dir we reported to the repository).
+ *
+ * So we just create the empty dir manually; but we do it via
+ * open_root_internal(), in order to get proper notification.
+ */
+ SVN_ERR(svn_io_check_path(to_path, &kind, scratch_pool));
+ if (kind == svn_node_none)
+ SVN_ERR(open_root_internal
+ (to_path, overwrite, ctx->notify_func2,
+ ctx->notify_baton2, scratch_pool));
+
+ if (! ignore_externals && depth == svn_depth_infinity)
+ {
+ const char *to_abspath;
+
+ SVN_ERR(svn_dirent_get_absolute(&to_abspath, to_path, scratch_pool));
+ SVN_ERR(svn_client__export_externals(eb->externals,
+ from_path_or_url,
+ to_abspath, eb->repos_root_url,
+ depth, native_eol,
+ ignore_keywords,
+ ctx, scratch_pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
/*** Public Interfaces ***/
@@ -1039,7 +1384,6 @@ svn_client_export5(svn_revnum_t *result_rev,
apr_pool_t *pool)
{
svn_revnum_t edit_revision = SVN_INVALID_REVNUM;
- const char *url;
svn_boolean_t from_is_url = svn_path_is_url(from_path_or_url);
SVN_ERR_ASSERT(peg_revision != NULL);
@@ -1055,23 +1399,20 @@ svn_client_export5(svn_revnum_t *result_rev,
if (from_is_url || ! SVN_CLIENT__REVKIND_IS_LOCAL_TO_WC(revision->kind))
{
- svn_revnum_t revnum;
+ svn_client__pathrev_t *loc;
svn_ra_session_t *ra_session;
svn_node_kind_t kind;
struct edit_baton *eb = apr_pcalloc(pool, sizeof(*eb));
- const char *repos_root_url;
/* Get the RA connection. */
- SVN_ERR(svn_client__ra_session_from_path(&ra_session, &revnum,
- &url, from_path_or_url, NULL,
- peg_revision,
- revision, ctx, pool));
-
- /* Get the repository root. */
- SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root_url, pool));
+ SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &loc,
+ from_path_or_url, NULL,
+ peg_revision,
+ revision, ctx, pool));
+ SVN_ERR(svn_ra_get_repos_root2(ra_session, &eb->repos_root_url, pool));
eb->root_path = to_path;
- eb->root_url = url;
+ eb->root_url = loc->url;
eb->force = overwrite;
eb->target_revision = &edit_revision;
eb->externals = apr_hash_make(pool);
@@ -1082,153 +1423,23 @@ svn_client_export5(svn_revnum_t *result_rev,
eb->notify_func = ctx->notify_func2;
eb->notify_baton = ctx->notify_baton2;
- SVN_ERR(svn_ra_check_path(ra_session, "", revnum, &kind, pool));
+ SVN_ERR(svn_ra_check_path(ra_session, "", loc->rev, &kind, pool));
if (kind == svn_node_file)
{
- apr_hash_t *props;
- apr_hash_index_t *hi;
- struct file_baton *fb = apr_pcalloc(pool, sizeof(*fb));
- svn_node_kind_t to_kind;
-
- if (svn_path_is_empty(to_path))
- {
- if (from_is_url)
- to_path = svn_uri_basename(from_path_or_url, pool);
- else
- to_path = svn_dirent_basename(from_path_or_url, NULL);
- eb->root_path = to_path;
- }
+ if (!ENABLE_EV2_IMPL)
+ SVN_ERR(export_file(from_path_or_url, to_path, eb, loc, ra_session,
+ overwrite, pool));
else
- {
- SVN_ERR(append_basename_if_dir(&to_path, from_path_or_url,
- from_is_url, pool));
- eb->root_path = to_path;
- }
-
- SVN_ERR(svn_io_check_path(to_path, &to_kind, pool));
-
- if ((to_kind == svn_node_file || to_kind == svn_node_unknown) &&
- ! overwrite)
- return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
- _("Destination file '%s' exists, and "
- "will not be overwritten unless forced"),
- svn_dirent_local_style(to_path, pool));
- else if (to_kind == svn_node_dir)
- return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
- _("Destination '%s' exists. Cannot "
- "overwrite directory with non-directory"),
- svn_dirent_local_style(to_path, pool));
-
- /* Since you cannot actually root an editor at a file, we
- * manually drive a few functions of our editor. */
-
- /* This is the equivalent of a parentless add_file(). */
- fb->edit_baton = eb;
- fb->path = eb->root_path;
- fb->url = eb->root_url;
- fb->pool = pool;
-
- /* Copied from apply_textdelta(). */
- SVN_ERR(svn_stream_open_unique(&fb->tmp_stream, &fb->tmppath,
- svn_dirent_dirname(fb->path, pool),
- svn_io_file_del_none,
- fb->pool, fb->pool));
-
- /* Step outside the editor-likeness for a moment, to actually talk
- * to the repository. */
- /* ### note: the stream will not be closed */
- SVN_ERR(svn_ra_get_file(ra_session, "", revnum,
- fb->tmp_stream,
- NULL, &props, pool));
-
- /* Push the props into change_file_prop(), to update the file_baton
- * with information. */
- for (hi = apr_hash_first(pool, props); hi; hi = apr_hash_next(hi))
- {
- const char *propname = svn__apr_hash_index_key(hi);
- const svn_string_t *propval = svn__apr_hash_index_val(hi);
-
- SVN_ERR(change_file_prop(fb, propname, propval, pool));
- }
-
- /* And now just use close_file() to do all the keyword and EOL
- * work, and put the file into place. */
- SVN_ERR(close_file(fb, NULL, pool));
+ SVN_ERR(export_file_ev2(from_path_or_url, to_path, eb, loc,
+ ra_session, overwrite, pool));
}
else if (kind == svn_node_dir)
{
- void *edit_baton;
- const svn_delta_editor_t *export_editor;
- const svn_ra_reporter3_t *reporter;
- void *report_baton;
- svn_delta_editor_t *editor = svn_delta_default_editor(pool);
- svn_boolean_t use_sleep = FALSE;
-
- editor->set_target_revision = set_target_revision;
- editor->open_root = open_root;
- editor->add_directory = add_directory;
- editor->add_file = add_file;
- editor->apply_textdelta = apply_textdelta;
- editor->close_file = close_file;
- editor->change_file_prop = change_file_prop;
- editor->change_dir_prop = change_dir_prop;
-
- SVN_ERR(svn_delta_get_cancellation_editor(ctx->cancel_func,
- ctx->cancel_baton,
- editor,
- eb,
- &export_editor,
- &edit_baton,
- pool));
-
-
- /* Manufacture a basic 'report' to the update reporter. */
- SVN_ERR(svn_ra_do_update2(ra_session,
- &reporter, &report_baton,
- revnum,
- "", /* no sub-target */
- depth,
- FALSE, /* don't want copyfrom-args */
- export_editor, edit_baton, pool));
-
- SVN_ERR(reporter->set_path(report_baton, "", revnum,
- /* Depth is irrelevant, as we're
- passing start_empty=TRUE anyway. */
- svn_depth_infinity,
- TRUE, /* "help, my dir is empty!" */
- NULL, pool));
-
- SVN_ERR(reporter->finish_report(report_baton, pool));
-
- /* Special case: Due to our sly export/checkout method of
- * updating an empty directory, no target will have been created
- * if the exported item is itself an empty directory
- * (export_editor->open_root never gets called, because there
- * are no "changes" to make to the empty dir we reported to the
- * repository).
- *
- * So we just create the empty dir manually; but we do it via
- * open_root_internal(), in order to get proper notification.
- */
- SVN_ERR(svn_io_check_path(to_path, &kind, pool));
- if (kind == svn_node_none)
- SVN_ERR(open_root_internal
- (to_path, overwrite, ctx->notify_func2,
- ctx->notify_baton2, pool));
-
- if (! ignore_externals && depth == svn_depth_infinity)
- {
- const char *to_abspath;
-
- SVN_ERR(svn_dirent_get_absolute(&to_abspath, to_path, pool));
- SVN_ERR(svn_client__export_externals(eb->externals,
- from_path_or_url,
- to_abspath, repos_root_url,
- depth, native_eol,
- ignore_keywords, &use_sleep,
- ctx, pool));
- }
+ SVN_ERR(export_directory(from_path_or_url, to_path,
+ eb, loc, ra_session, overwrite,
+ ignore_externals, ignore_keywords, depth,
+ native_eol, ctx, pool));
}
else if (kind == svn_node_none)
{
@@ -1240,7 +1451,10 @@ svn_client_export5(svn_revnum_t *result_rev,
}
else
{
+ struct export_info_baton eib;
svn_node_kind_t kind;
+ apr_hash_t *externals = NULL;
+
/* This is a working copy export. */
/* just copy the contents of the working copy into the target path. */
SVN_ERR(svn_dirent_get_absolute(&from_path_or_url, from_path_or_url,
@@ -1284,14 +1498,80 @@ svn_client_export5(svn_revnum_t *result_rev,
* For a start, to detect the source kind, it looks at what is on disk
* rather than the versioned working or base node.
*/
-
if (kind == svn_node_file)
SVN_ERR(append_basename_if_dir(&to_path, from_path_or_url, FALSE,
pool));
- SVN_ERR(copy_versioned_files(from_path_or_url, to_path, revision,
- overwrite, ignore_externals, ignore_keywords,
- depth, native_eol, ctx, pool));
+ eib.to_path = to_path;
+ eib.revision = revision;
+ eib.overwrite = overwrite;
+ eib.ignore_keywords = ignore_keywords;
+ eib.wc_ctx = ctx->wc_ctx;
+ eib.native_eol = native_eol;
+ eib.notify_func = ctx->notify_func2;;
+ eib.notify_baton = ctx->notify_baton2;
+ eib.origin_abspath = from_path_or_url;
+ eib.exported = FALSE;
+
+ SVN_ERR(svn_wc_walk_status(ctx->wc_ctx, from_path_or_url, depth,
+ TRUE /* get_all */,
+ TRUE /* no_ignore */,
+ FALSE /* ignore_text_mods */,
+ NULL,
+ export_node, &eib,
+ ctx->cancel_func, ctx->cancel_baton,
+ pool));
+
+ if (!eib.exported)
+ return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
+ _("The node '%s' was not found."),
+ svn_dirent_local_style(from_path_or_url,
+ pool));
+
+ if (!ignore_externals)
+ SVN_ERR(svn_wc__externals_defined_below(&externals, ctx->wc_ctx,
+ from_path_or_url,
+ pool, pool));
+
+ if (externals && apr_hash_count(externals))
+ {
+ apr_pool_t *iterpool = svn_pool_create(pool);
+ apr_hash_index_t *hi;
+
+ for (hi = apr_hash_first(pool, externals);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ const char *external_abspath = svn__apr_hash_index_key(hi);
+ const char *relpath;
+ const char *target_abspath;
+
+ svn_pool_clear(iterpool);
+
+ relpath = svn_dirent_skip_ancestor(from_path_or_url,
+ external_abspath);
+
+ target_abspath = svn_dirent_join(to_path, relpath,
+ iterpool);
+
+ /* Ensure that the parent directory exists */
+ SVN_ERR(svn_io_make_dir_recursively(
+ svn_dirent_dirname(target_abspath, iterpool),
+ iterpool));
+
+ SVN_ERR(svn_client_export5(NULL,
+ svn_dirent_join(from_path_or_url,
+ relpath,
+ iterpool),
+ target_abspath,
+ peg_revision, revision,
+ TRUE, ignore_externals,
+ ignore_keywords, depth, native_eol,
+ ctx, iterpool));
+ }
+
+ svn_pool_destroy(iterpool);
+ }
}
@@ -1309,3 +1589,4 @@ svn_client_export5(svn_revnum_t *result_rev,
return SVN_NO_ERROR;
}
+
diff --git a/subversion/libsvn_client/externals.c b/subversion/libsvn_client/externals.c
index 3c23fa3..52c236c 100644
--- a/subversion/libsvn_client/externals.c
+++ b/subversion/libsvn_client/externals.c
@@ -24,10 +24,11 @@
/* ==================================================================== */
-
+
/*** Includes. ***/
#include <apr_uri.h>
+#include "svn_hash.h"
#include "svn_wc.h"
#include "svn_pools.h"
#include "svn_client.h"
@@ -41,18 +42,7 @@
#include "svn_private_config.h"
#include "private/svn_wc_private.h"
-
-/* Closure for handle_external_item_change. */
-struct external_change_baton_t
-{
- /* The URL for the repository root. */
- const char *repos_root_url;
- /* Passed through to svn_client_* functions. */
- svn_client_ctx_t *ctx;
-
- svn_boolean_t *timestamp_sleep;
-};
/* Remove the directory at LOCAL_ABSPATH from revision control, and do the
* same to any revision controlled directories underneath LOCAL_ABSPATH
@@ -70,11 +60,16 @@ relegate_dir_external(svn_wc_context_t *wc_ctx,
const char *local_abspath,
svn_cancel_func_t cancel_func,
void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
apr_pool_t *scratch_pool)
{
svn_error_t *err = SVN_NO_ERROR;
- err = svn_wc__external_remove(wc_ctx, wri_abspath, local_abspath,
+ SVN_ERR(svn_wc__acquire_write_lock(NULL, wc_ctx, local_abspath,
+ FALSE, scratch_pool, scratch_pool));
+
+ err = svn_wc__external_remove(wc_ctx, wri_abspath, local_abspath, FALSE,
cancel_func, cancel_baton, scratch_pool);
if (err && (err->apr_err == SVN_ERR_WC_LEFT_LOCAL_MOD))
{
@@ -114,8 +109,33 @@ relegate_dir_external(svn_wc_context_t *wc_ctx,
/* Do our best, but no biggy if it fails. The rename will fail. */
svn_error_clear(svn_io_remove_file2(new_path, TRUE, scratch_pool));
- /* Rename. */
- SVN_ERR(svn_io_file_rename(local_abspath, new_path, scratch_pool));
+ /* Rename. If this is still a working copy we should use the working
+ copy rename function (to release open handles) */
+ err = svn_wc__rename_wc(wc_ctx, local_abspath, new_path,
+ scratch_pool);
+
+ if (err && err->apr_err == SVN_ERR_WC_PATH_UNEXPECTED_STATUS)
+ {
+ svn_error_clear(err);
+
+ /* And if it is no longer a working copy, we should just rename
+ it */
+ err = svn_io_file_rename(local_abspath, new_path, scratch_pool);
+ }
+
+ /* ### TODO: We should notify the user about the rename */
+ if (notify_func)
+ {
+ svn_wc_notify_t *notify;
+
+ notify = svn_wc_create_notify(err ? local_abspath : new_path,
+ svn_wc_notify_left_local_modifications,
+ scratch_pool);
+ notify->kind = svn_node_dir;
+ notify->err = err;
+
+ notify_func(notify_baton, notify, scratch_pool);
+ }
}
return svn_error_trace(err);
@@ -126,6 +146,7 @@ relegate_dir_external(svn_wc_context_t *wc_ctx,
static svn_error_t *
switch_dir_external(const char *local_abspath,
const char *url,
+ const char *url_from_externals_definition,
const svn_opt_revision_t *peg_revision,
const svn_opt_revision_t *revision,
const char *defining_abspath,
@@ -135,10 +156,60 @@ switch_dir_external(const char *local_abspath,
{
svn_node_kind_t kind;
svn_error_t *err;
+ svn_revnum_t external_peg_rev = SVN_INVALID_REVNUM;
+ svn_revnum_t external_rev = SVN_INVALID_REVNUM;
apr_pool_t *subpool = svn_pool_create(pool);
+ const char *repos_root_url;
+ const char *repos_uuid;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+ if (peg_revision->kind == svn_opt_revision_number)
+ external_peg_rev = peg_revision->value.number;
+
+ if (revision->kind == svn_opt_revision_number)
+ external_rev = revision->value.number;
+
+ /*
+ * The code below assumes existing versioned paths are *not* part of
+ * the external's defining working copy.
+ * The working copy library does not support registering externals
+ * on top of existing BASE nodes and will error out if we try.
+ * So if the external target is part of the defining working copy's
+ * BASE tree, don't attempt to create the external. Doing so would
+ * leave behind a switched path instead of an external (since the
+ * switch succeeds but registration of the external in the DB fails).
+ * The working copy then cannot be updated until the path is switched back.
+ * See issue #4085.
+ */
+ SVN_ERR(svn_wc__node_get_base(&kind, NULL, NULL,
+ &repos_root_url, &repos_uuid,
+ NULL, ctx->wc_ctx, local_abspath,
+ TRUE, /* ignore_enoent */
+ TRUE, /* show hidden */
+ pool, pool));
+ if (kind != svn_node_unknown)
+ {
+ const char *wcroot_abspath;
+ const char *defining_wcroot_abspath;
+
+ SVN_ERR(svn_wc__get_wcroot(&wcroot_abspath, ctx->wc_ctx,
+ local_abspath, pool, pool));
+ SVN_ERR(svn_wc__get_wcroot(&defining_wcroot_abspath, ctx->wc_ctx,
+ defining_abspath, pool, pool));
+ if (strcmp(wcroot_abspath, defining_wcroot_abspath) == 0)
+ return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
+ _("The external '%s' defined in %s at '%s' "
+ "cannot be checked out because '%s' is "
+ "already a versioned path."),
+ url_from_externals_definition,
+ SVN_PROP_EXTERNALS,
+ svn_dirent_local_style(defining_abspath,
+ pool),
+ svn_dirent_local_style(local_abspath,
+ pool));
+ }
+
/* If path is a directory, try to update/switch to the correct URL
and revision. */
SVN_ERR(svn_io_check_path(local_abspath, &kind, pool));
@@ -160,9 +231,6 @@ switch_dir_external(const char *local_abspath,
if (node_url)
{
- const char *repos_root_url;
- const char *repos_uuid;
-
/* If we have what appears to be a version controlled
subdir, and its top-level URL matches that of our
externals definition, perform an update. */
@@ -174,10 +242,22 @@ switch_dir_external(const char *local_abspath,
FALSE, TRUE,
timestamp_sleep,
ctx, subpool));
+
+ /* We just decided that this existing directory is an external,
+ so update the external registry with this information, like
+ when checking out an external */
+ SVN_ERR(svn_wc__external_register(ctx->wc_ctx,
+ defining_abspath,
+ local_abspath, svn_node_dir,
+ repos_root_url, repos_uuid,
+ svn_uri_skip_ancestor(repos_root_url,
+ url, pool),
+ external_peg_rev,
+ external_rev,
+ pool));
+
svn_pool_destroy(subpool);
- /* Issue #4130: We don't need to keep the external's DB open. */
- SVN_ERR(svn_wc__close_db(local_abspath, ctx->wc_ctx, pool));
- return SVN_NO_ERROR;
+ goto cleanup;
}
/* We'd really prefer not to have to do a brute-force
@@ -188,9 +268,21 @@ switch_dir_external(const char *local_abspath,
To do so, we need to know the repository root URL of the
external working copy as it currently sits. */
- SVN_ERR(svn_wc__node_get_repos_info(&repos_root_url, &repos_uuid,
- ctx->wc_ctx, local_abspath,
- pool, subpool));
+ err = svn_wc__node_get_repos_info(NULL, NULL,
+ &repos_root_url, &repos_uuid,
+ ctx->wc_ctx, local_abspath,
+ pool, subpool);
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND
+ && err->apr_err != SVN_ERR_WC_NOT_WORKING_COPY)
+ return svn_error_trace(err);
+
+ svn_error_clear(err);
+ repos_root_url = NULL;
+ repos_uuid = NULL;
+ }
+
if (repos_root_url)
{
/* If the new external target URL is not obviously a
@@ -199,17 +291,11 @@ switch_dir_external(const char *local_abspath,
if (! svn_uri__is_ancestor(repos_root_url, url))
{
const char *repos_root;
- svn_ra_session_t *ra_session;
/* ... then figure out precisely which repository
root URL that target URL *is* a child of ... */
- SVN_ERR(svn_client__open_ra_session_internal(&ra_session,
- NULL, url, NULL,
- NULL, FALSE,
- TRUE, ctx,
- subpool));
- SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root,
- subpool));
+ SVN_ERR(svn_client_get_repos_root(&repos_root, NULL, url,
+ ctx, subpool, subpool));
/* ... and use that to try to relocate the external
working copy to the target location. */
@@ -250,14 +336,12 @@ switch_dir_external(const char *local_abspath,
svn_uri_skip_ancestor(
repos_root_url,
url, subpool),
- SVN_INVALID_REVNUM,
- SVN_INVALID_REVNUM,
+ external_peg_rev,
+ external_rev,
subpool));
svn_pool_destroy(subpool);
- /* Issue #4130: We don't need to keep the external's DB open. */
- SVN_ERR(svn_wc__close_db(local_abspath, ctx->wc_ctx, pool));
- return SVN_NO_ERROR;
+ goto cleanup;
}
}
}
@@ -273,12 +357,10 @@ switch_dir_external(const char *local_abspath,
if (kind == svn_node_dir)
{
/* Buh-bye, old and busted ... */
- SVN_ERR(svn_wc__acquire_write_lock(NULL, ctx->wc_ctx, local_abspath,
- FALSE, pool, pool));
-
SVN_ERR(relegate_dir_external(ctx->wc_ctx, defining_abspath,
local_abspath,
ctx->cancel_func, ctx->cancel_baton,
+ ctx->notify_func2, ctx->notify_baton2,
pool));
}
else
@@ -295,28 +377,26 @@ switch_dir_external(const char *local_abspath,
FALSE, FALSE, timestamp_sleep,
ctx, pool));
- {
- const char *repos_root_url;
- const char *repos_uuid;
-
- SVN_ERR(svn_wc__node_get_repos_info(&repos_root_url,
- &repos_uuid,
- ctx->wc_ctx, local_abspath,
- pool, pool));
-
- SVN_ERR(svn_wc__external_register(ctx->wc_ctx,
- defining_abspath,
- local_abspath, svn_node_dir,
- repos_root_url, repos_uuid,
- svn_uri_skip_ancestor(repos_root_url,
- url, pool),
- SVN_INVALID_REVNUM,
- SVN_INVALID_REVNUM,
- pool));
- /* Issue #4123: We don't need to keep the newly checked out external's
- DB open. */
- SVN_ERR(svn_wc__close_db(local_abspath, ctx->wc_ctx, pool));
- }
+ SVN_ERR(svn_wc__node_get_repos_info(NULL, NULL,
+ &repos_root_url,
+ &repos_uuid,
+ ctx->wc_ctx, local_abspath,
+ pool, pool));
+
+ SVN_ERR(svn_wc__external_register(ctx->wc_ctx,
+ defining_abspath,
+ local_abspath, svn_node_dir,
+ repos_root_url, repos_uuid,
+ svn_uri_skip_ancestor(repos_root_url,
+ url, pool),
+ external_peg_rev,
+ external_rev,
+ pool));
+
+ cleanup:
+ /* Issues #4123 and #4130: We don't need to keep the newly checked
+ out external's DB open. */
+ SVN_ERR(svn_wc__close_db(local_abspath, ctx->wc_ctx, pool));
return SVN_NO_ERROR;
}
@@ -331,25 +411,16 @@ switch_file_external(const char *local_abspath,
const svn_opt_revision_t *revision,
const char *def_dir_abspath,
svn_ra_session_t *ra_session,
- const char *ra_session_url,
- svn_revnum_t ra_revnum,
- const char *repos_root_url,
- svn_boolean_t *timestamp_sleep,
svn_client_ctx_t *ctx,
apr_pool_t *scratch_pool)
{
- apr_pool_t *subpool = svn_pool_create(scratch_pool);
- const char *dir_abspath;
- const char *target;
- svn_config_t *cfg = ctx->config ? apr_hash_get(ctx->config,
- SVN_CONFIG_CATEGORY_CONFIG,
- APR_HASH_KEY_STRING) : NULL;
+ svn_config_t *cfg = ctx->config
+ ? svn_hash_gets(ctx->config, SVN_CONFIG_CATEGORY_CONFIG)
+ : NULL;
svn_boolean_t use_commit_times;
const char *diff3_cmd;
const char *preserved_exts_str;
const apr_array_header_t *preserved_exts;
- svn_boolean_t locked_here;
- svn_error_t *err = NULL;
svn_node_kind_t kind, external_kind;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
@@ -364,32 +435,27 @@ switch_file_external(const char *local_abspath,
SVN_CONFIG_OPTION_DIFF3_CMD, NULL);
if (diff3_cmd != NULL)
- SVN_ERR(svn_path_cstring_to_utf8(&diff3_cmd, diff3_cmd, subpool));
+ SVN_ERR(svn_path_cstring_to_utf8(&diff3_cmd, diff3_cmd, scratch_pool));
/* See which files the user wants to preserve the extension of when
conflict files are made. */
svn_config_get(cfg, &preserved_exts_str, SVN_CONFIG_SECTION_MISCELLANY,
SVN_CONFIG_OPTION_PRESERVED_CF_EXTS, "");
preserved_exts = *preserved_exts_str
- ? svn_cstring_split(preserved_exts_str, "\n\r\t\v ", FALSE, subpool)
+ ? svn_cstring_split(preserved_exts_str, "\n\r\t\v ", FALSE, scratch_pool)
: NULL;
- svn_dirent_split(&dir_abspath, &target, local_abspath, subpool);
+ {
+ const char *wcroot_abspath;
- /* Try to get a access baton for the anchor using the input access
- baton. If this fails and returns SVN_ERR_WC_NOT_LOCKED, then try
- to get a new access baton to support inserting a file external
- into a directory external. */
- SVN_ERR(svn_wc_locked2(&locked_here, NULL, ctx->wc_ctx, dir_abspath,
- subpool));
- if (!locked_here)
- {
- const char *wcroot_abspath;
+ SVN_ERR(svn_wc__get_wcroot(&wcroot_abspath, ctx->wc_ctx, local_abspath,
+ scratch_pool, scratch_pool));
- SVN_ERR(svn_wc__get_wc_root(&wcroot_abspath, ctx->wc_ctx, dir_abspath,
- subpool, subpool));
+ /* File externals can only be installed inside the current working copy.
+ So verify if the working copy that contains/will contain the target
+ is the defining abspath, or one of its ancestors */
- if (!svn_dirent_is_ancestor(wcroot_abspath, def_dir_abspath))
+ if (!svn_dirent_is_ancestor(wcroot_abspath, def_dir_abspath))
return svn_error_createf(
SVN_ERR_WC_BAD_PATH, NULL,
_("Cannot insert a file external defined on '%s' "
@@ -398,18 +464,14 @@ switch_file_external(const char *local_abspath,
scratch_pool),
svn_dirent_local_style(wcroot_abspath,
scratch_pool));
- }
-
- err = svn_wc_read_kind(&kind, ctx->wc_ctx, local_abspath, FALSE, subpool);
- if (err)
- goto cleanup;
+ }
- err = svn_wc__read_external_info(&external_kind, NULL, NULL, NULL, NULL,
- ctx->wc_ctx, local_abspath, local_abspath,
- TRUE, scratch_pool, scratch_pool);
+ SVN_ERR(svn_wc_read_kind2(&kind, ctx->wc_ctx, local_abspath,
+ TRUE, FALSE, scratch_pool));
- if (err)
- goto cleanup;
+ SVN_ERR(svn_wc__read_external_info(&external_kind, NULL, NULL, NULL, NULL,
+ ctx->wc_ctx, local_abspath, local_abspath,
+ TRUE, scratch_pool, scratch_pool));
/* If there is a versioned item with this name, ensure it's a file
external before working with it. If there is no entry in the
@@ -419,35 +481,25 @@ switch_file_external(const char *local_abspath,
{
if (external_kind != svn_node_file)
{
- if (!locked_here)
- SVN_ERR(svn_wc__release_write_lock(ctx->wc_ctx, dir_abspath,
- subpool));
-
return svn_error_createf(
SVN_ERR_CLIENT_FILE_EXTERNAL_OVERWRITE_VERSIONED, 0,
_("The file external from '%s' cannot overwrite the existing "
"versioned item at '%s'"),
- url, svn_dirent_local_style(local_abspath, subpool));
+ url, svn_dirent_local_style(local_abspath, scratch_pool));
}
}
else
{
svn_node_kind_t disk_kind;
- err = svn_io_check_path(local_abspath, &disk_kind, subpool);
-
- if (err)
- goto cleanup;
+ SVN_ERR(svn_io_check_path(local_abspath, &disk_kind, scratch_pool));
if (kind == svn_node_file || kind == svn_node_dir)
- {
- err = svn_error_createf(SVN_ERR_WC_PATH_FOUND, NULL,
- _("The file external '%s' can not be "
- "created because the node exists."),
- svn_dirent_local_style(local_abspath,
- subpool));
- goto cleanup;
- }
+ return svn_error_createf(SVN_ERR_WC_PATH_FOUND, NULL,
+ _("The file external '%s' can not be "
+ "created because the node exists."),
+ svn_dirent_local_style(local_abspath,
+ scratch_pool));
}
{
@@ -455,35 +507,41 @@ switch_file_external(const char *local_abspath,
void *report_baton;
const svn_delta_editor_t *switch_editor;
void *switch_baton;
- const char *switch_rev_url;
- const char *repos_uuid;
+ svn_client__pathrev_t *switch_loc;
svn_revnum_t revnum;
- /* ### TODO: Provide the real definition path (now available in
- ### def_dir_abspath) after switching to the new externals store.
- ### We can't enable this now, because that would move the external
- ### information into the wrong working copy */
- const char *definition_abspath = svn_dirent_dirname(local_abspath,subpool);
-
- /* Open an RA session to 'source' URL */
- SVN_ERR(svn_client__ra_session_from_path(&ra_session, &revnum,
- &switch_rev_url,
- url, dir_abspath,
- peg_revision, revision,
- ctx, subpool));
-
- SVN_ERR(svn_ra_reparent(ra_session, url, subpool));
- SVN_ERR(svn_ra_get_uuid2(ra_session, &repos_uuid, subpool));
+ apr_array_header_t *inherited_props;
+ const char *dir_abspath;
+ const char *target;
+
+ svn_dirent_split(&dir_abspath, &target, local_abspath, scratch_pool);
+
+ /* ### Why do we open a new session? RA_SESSION is a valid
+ ### session -- the caller used it to call svn_ra_check_path on
+ ### this very URL, the caller also did the resolving and
+ ### reparenting that is repeated here. */
+ SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &switch_loc,
+ url, dir_abspath,
+ peg_revision, revision,
+ ctx, scratch_pool));
+ /* Get the external file's iprops. */
+ SVN_ERR(svn_ra_get_inherited_props(ra_session, &inherited_props, "",
+ switch_loc->rev,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(svn_ra_reparent(ra_session, svn_uri_dirname(url, scratch_pool),
+ scratch_pool));
SVN_ERR(svn_wc__get_file_external_editor(&switch_editor, &switch_baton,
&revnum, ctx->wc_ctx,
local_abspath,
- definition_abspath /* wri */,
- switch_rev_url,
- repos_root_url,
- repos_uuid,
+ def_dir_abspath,
+ switch_loc->url,
+ switch_loc->repos_root_url,
+ switch_loc->repos_uuid,
+ inherited_props,
use_commit_times,
diff3_cmd, preserved_exts,
- definition_abspath /* def */,
+ def_dir_abspath,
url, peg_revision, revision,
ctx->conflict_func2,
ctx->conflict_baton2,
@@ -491,300 +549,139 @@ switch_file_external(const char *local_abspath,
ctx->cancel_baton,
ctx->notify_func2,
ctx->notify_baton2,
- subpool, subpool));
+ scratch_pool, scratch_pool));
/* Tell RA to do an update of URL+TARGET to REVISION; if we pass an
invalid revnum, that means RA will use the latest revision. */
- SVN_ERR(svn_ra_do_switch2(ra_session, &reporter, &report_baton, revnum,
- target, svn_depth_unknown, url,
- switch_editor, switch_baton, subpool));
-
- SVN_ERR(svn_wc__crawl_file_external(ctx->wc_ctx, local_abspath,
- reporter, report_baton,
- TRUE, use_commit_times,
- ctx->cancel_func, ctx->cancel_baton,
- ctx->notify_func2, ctx->notify_baton2,
- subpool));
+ SVN_ERR(svn_ra_do_switch3(ra_session, &reporter, &report_baton,
+ switch_loc->rev,
+ target, svn_depth_unknown, switch_loc->url,
+ FALSE /* send_copyfrom */,
+ TRUE /* ignore_ancestry */,
+ switch_editor, switch_baton,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(svn_wc__crawl_file_external(ctx->wc_ctx, local_abspath,
+ reporter, report_baton,
+ TRUE, use_commit_times,
+ ctx->cancel_func, ctx->cancel_baton,
+ ctx->notify_func2, ctx->notify_baton2,
+ scratch_pool));
if (ctx->notify_func2)
{
svn_wc_notify_t *notify
= svn_wc_create_notify(local_abspath, svn_wc_notify_update_completed,
- subpool);
+ scratch_pool);
notify->kind = svn_node_none;
notify->content_state = notify->prop_state
= svn_wc_notify_state_inapplicable;
notify->lock_state = svn_wc_notify_lock_state_inapplicable;
notify->revision = revnum;
- (*ctx->notify_func2)(ctx->notify_baton2, notify, subpool);
+ (*ctx->notify_func2)(ctx->notify_baton2, notify, scratch_pool);
}
}
-cleanup:
- if (!locked_here)
- err = svn_error_compose_create(err,
- svn_wc__release_write_lock(ctx->wc_ctx, dir_abspath, subpool));
-
- svn_pool_destroy(subpool);
- return svn_error_trace(err);
+ return SVN_NO_ERROR;
}
-/* Return the scheme of @a uri in @a scheme allocated from @a pool.
- If @a uri does not appear to be a valid URI, then @a scheme will
- not be updated. */
+/* Wrappers around svn_wc__external_remove, obtaining and releasing a lock for
+ directory externals */
static svn_error_t *
-uri_scheme(const char **scheme, const char *uri, apr_pool_t *pool)
+remove_external2(svn_boolean_t *removed,
+ svn_wc_context_t *wc_ctx,
+ const char *wri_abspath,
+ const char *local_abspath,
+ svn_node_kind_t external_kind,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
{
- apr_size_t i;
-
- for (i = 0; uri[i] && uri[i] != ':'; ++i)
- if (uri[i] == '/')
- goto error;
-
- if (i > 0 && uri[i] == ':' && uri[i+1] == '/' && uri[i+2] == '/')
- {
- *scheme = apr_pstrmemdup(pool, uri, i);
- return SVN_NO_ERROR;
- }
+ SVN_ERR(svn_wc__external_remove(wc_ctx, wri_abspath,
+ local_abspath,
+ (external_kind == svn_node_none),
+ cancel_func, cancel_baton,
+ scratch_pool));
-error:
- return svn_error_createf(SVN_ERR_BAD_URL, 0,
- _("URL '%s' does not begin with a scheme"),
- uri);
+ *removed = TRUE;
+ return SVN_NO_ERROR;
}
-/* If the URL for @a item is relative, then using the repository root
- URL @a repos_root_url and the parent directory URL @parent_dir_url,
- resolve it into an absolute URL and save it in @a item.
-
- Regardless if the URL is absolute or not, if there are no errors,
- the URL in @a item will be canonicalized.
-
- The following relative URL formats are supported:
-
- ../ relative to the parent directory of the external
- ^/ relative to the repository root
- // relative to the scheme
- / relative to the server's hostname
- The ../ and ^/ relative URLs may use .. to remove path elements up
- to the server root.
-
- The external URL should not be canonicalized before calling this function,
- as otherwise the scheme relative URL '//host/some/path' would have been
- canonicalized to '/host/some/path' and we would not be able to match on
- the leading '//'. */
static svn_error_t *
-resolve_relative_external_url(const char **resolved_url,
- const svn_wc_external_item2_t *item,
- const char *repos_root_url,
- const char *parent_dir_url,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+remove_external(svn_boolean_t *removed,
+ svn_wc_context_t *wc_ctx,
+ const char *wri_abspath,
+ const char *local_abspath,
+ svn_node_kind_t external_kind,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
{
- const char *url = item->url;
- apr_uri_t parent_dir_uri;
- apr_status_t status;
-
- *resolved_url = item->url;
-
- /* If the URL is already absolute, there is nothing to do. */
- if (svn_path_is_url(url))
- {
- /* "http://server/path" */
- *resolved_url = svn_uri_canonicalize(url, result_pool);
- return SVN_NO_ERROR;
- }
-
- if (url[0] == '/')
- {
- /* "/path", "//path", and "///path" */
- int num_leading_slashes = 1;
- if (url[1] == '/')
- {
- num_leading_slashes++;
- if (url[2] == '/')
- num_leading_slashes++;
- }
-
- /* "//schema-relative" and in some cases "///schema-relative".
- This last format is supported on file:// schema relative. */
- url = apr_pstrcat(scratch_pool,
- apr_pstrndup(scratch_pool, url, num_leading_slashes),
- svn_relpath_canonicalize(url + num_leading_slashes,
- scratch_pool),
- (char*)NULL);
- }
- else
- {
- /* "^/path" and "../path" */
- url = svn_relpath_canonicalize(url, scratch_pool);
- }
-
- /* Parse the parent directory URL into its parts. */
- status = apr_uri_parse(scratch_pool, parent_dir_url, &parent_dir_uri);
- if (status)
- return svn_error_createf(SVN_ERR_BAD_URL, 0,
- _("Illegal parent directory URL '%s'"),
- parent_dir_url);
-
- /* If the parent directory URL is at the server root, then the URL
- may have no / after the hostname so apr_uri_parse() will leave
- the URL's path as NULL. */
- if (! parent_dir_uri.path)
- parent_dir_uri.path = apr_pstrmemdup(scratch_pool, "/", 1);
- parent_dir_uri.query = NULL;
- parent_dir_uri.fragment = NULL;
-
- /* Handle URLs relative to the current directory or to the
- repository root. The backpaths may only remove path elements,
- not the hostname. This allows an external to refer to another
- repository in the same server relative to the location of this
- repository, say using SVNParentPath. */
- if ((0 == strncmp("../", url, 3)) ||
- (0 == strncmp("^/", url, 2)))
- {
- apr_array_header_t *base_components;
- apr_array_header_t *relative_components;
- int i;
-
- /* Decompose either the parent directory's URL path or the
- repository root's URL path into components. */
- if (0 == strncmp("../", url, 3))
- {
- base_components = svn_path_decompose(parent_dir_uri.path,
- scratch_pool);
- relative_components = svn_path_decompose(url, scratch_pool);
- }
- else
- {
- apr_uri_t repos_root_uri;
-
- status = apr_uri_parse(scratch_pool, repos_root_url,
- &repos_root_uri);
- if (status)
- return svn_error_createf(SVN_ERR_BAD_URL, 0,
- _("Illegal repository root URL '%s'"),
- repos_root_url);
-
- /* If the repository root URL is at the server root, then
- the URL may have no / after the hostname so
- apr_uri_parse() will leave the URL's path as NULL. */
- if (! repos_root_uri.path)
- repos_root_uri.path = apr_pstrmemdup(scratch_pool, "/", 1);
-
- base_components = svn_path_decompose(repos_root_uri.path,
- scratch_pool);
- relative_components = svn_path_decompose(url + 2, scratch_pool);
- }
-
- for (i = 0; i < relative_components->nelts; ++i)
- {
- const char *component = APR_ARRAY_IDX(relative_components,
- i,
- const char *);
- if (0 == strcmp("..", component))
- {
- /* Constructing the final absolute URL together with
- apr_uri_unparse() requires that the path be absolute,
- so only pop a component if the component being popped
- is not the component for the root directory. */
- if (base_components->nelts > 1)
- apr_array_pop(base_components);
- }
- else
- APR_ARRAY_PUSH(base_components, const char *) = component;
- }
-
- parent_dir_uri.path = (char *)svn_path_compose(base_components,
- scratch_pool);
- *resolved_url = svn_uri_canonicalize(apr_uri_unparse(scratch_pool,
- &parent_dir_uri, 0),
- result_pool);
- return SVN_NO_ERROR;
- }
-
- /* The remaining URLs are relative to the either the scheme or
- server root and can only refer to locations inside that scope, so
- backpaths are not allowed. */
- if (svn_path_is_backpath_present(url + 2))
- return svn_error_createf(SVN_ERR_BAD_URL, 0,
- _("The external relative URL '%s' cannot have "
- "backpaths, i.e. '..'"),
- item->url);
-
- /* Relative to the scheme: Build a new URL from the parts we know. */
- if (0 == strncmp("//", url, 2))
+ *removed = FALSE;
+ switch (external_kind)
{
- const char *scheme;
-
- SVN_ERR(uri_scheme(&scheme, repos_root_url, scratch_pool));
- *resolved_url = svn_uri_canonicalize(apr_pstrcat(scratch_pool, scheme,
- ":", url, (char *)NULL),
- result_pool);
- return SVN_NO_ERROR;
- }
-
- /* Relative to the server root: Just replace the path portion of the
- parent's URL. */
- if (url[0] == '/')
- {
- parent_dir_uri.path = (char *)url;
- *resolved_url = svn_uri_canonicalize(apr_uri_unparse(scratch_pool,
- &parent_dir_uri, 0),
- result_pool);
- return SVN_NO_ERROR;
+ case svn_node_dir:
+ SVN_WC__CALL_WITH_WRITE_LOCK(
+ remove_external2(removed,
+ wc_ctx, wri_abspath,
+ local_abspath, external_kind,
+ cancel_func, cancel_baton,
+ scratch_pool),
+ wc_ctx, local_abspath, FALSE, scratch_pool);
+ break;
+ case svn_node_file:
+ default:
+ SVN_ERR(remove_external2(removed,
+ wc_ctx, wri_abspath,
+ local_abspath, external_kind,
+ cancel_func, cancel_baton,
+ scratch_pool));
+ break;
}
- return svn_error_createf(SVN_ERR_BAD_URL, 0,
- _("Unrecognized format for the relative external "
- "URL '%s'"),
- item->url);
+ return SVN_NO_ERROR;
}
+/* Called when an external that is in the EXTERNALS table is no longer
+ referenced from an svn:externals property */
static svn_error_t *
-handle_external_item_removal(const struct external_change_baton_t *eb,
+handle_external_item_removal(const svn_client_ctx_t *ctx,
const char *defining_abspath,
const char *local_abspath,
apr_pool_t *scratch_pool)
{
- /* This branch is only used when an external is deleted from the
- repository and the working copy is updated or committed. */
-
svn_error_t *err;
- svn_boolean_t lock_existed;
+ svn_node_kind_t external_kind;
svn_node_kind_t kind;
- const char *lock_root_abspath = NULL;
+ svn_boolean_t removed = FALSE;
/* local_abspath should be a wcroot or a file external */
- SVN_ERR(svn_wc_read_kind(&kind, eb->ctx->wc_ctx, local_abspath, FALSE,
+ SVN_ERR(svn_wc__read_external_info(&external_kind, NULL, NULL, NULL, NULL,
+ ctx->wc_ctx, defining_abspath,
+ local_abspath, FALSE,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(svn_wc_read_kind2(&kind, ctx->wc_ctx, local_abspath, TRUE, FALSE,
scratch_pool));
- if (kind == svn_node_none)
- return SVN_NO_ERROR; /* It's neither... Nothing to remove */
+ if (external_kind != kind)
+ external_kind = svn_node_none; /* Only remove the registration */
- SVN_ERR(svn_wc_locked2(&lock_existed, NULL, eb->ctx->wc_ctx,
- local_abspath, scratch_pool));
+ err = remove_external(&removed,
+ ctx->wc_ctx, defining_abspath, local_abspath,
+ external_kind,
+ ctx->cancel_func, ctx->cancel_baton,
+ scratch_pool);
- if (! lock_existed)
+ if (err && err->apr_err == SVN_ERR_WC_NOT_LOCKED && removed)
{
- SVN_ERR(svn_wc__acquire_write_lock(&lock_root_abspath,
- eb->ctx->wc_ctx, local_abspath,
- FALSE,
- scratch_pool,
- scratch_pool));
+ svn_error_clear(err);
+ err = NULL; /* We removed the working copy, so we can't release the
+ lock that was stored inside */
}
- /* We don't use relegate_dir_external() here, because we know that
- nothing else in this externals description (at least) is
- going to need this directory, and therefore it's better to
- leave stuff where the user expects it. */
- err = svn_wc__external_remove(eb->ctx->wc_ctx, defining_abspath,
- local_abspath,
- eb->ctx->cancel_func, eb->ctx->cancel_baton,
- scratch_pool);
-
- if (eb->ctx->notify_func2)
+ if (ctx->notify_func2)
{
svn_wc_notify_t *notify =
svn_wc_create_notify(local_abspath,
@@ -794,8 +691,18 @@ handle_external_item_removal(const struct external_change_baton_t *eb,
notify->kind = kind;
notify->err = err;
- (eb->ctx->notify_func2)(eb->ctx->notify_baton2,
- notify, scratch_pool);
+ (ctx->notify_func2)(ctx->notify_baton2, notify, scratch_pool);
+
+ if (err && err->apr_err == SVN_ERR_WC_LEFT_LOCAL_MOD)
+ {
+ notify = svn_wc_create_notify(local_abspath,
+ svn_wc_notify_left_local_modifications,
+ scratch_pool);
+ notify->kind = svn_node_dir;
+ notify->err = err;
+
+ (ctx->notify_func2)(ctx->notify_baton2, notify, scratch_pool);
+ }
}
if (err && err->apr_err == SVN_ERR_WC_LEFT_LOCAL_MOD)
@@ -804,47 +711,26 @@ handle_external_item_removal(const struct external_change_baton_t *eb,
err = NULL;
}
-
- /* Unlock if we acquired the lock */
- if (lock_root_abspath != NULL)
- {
- svn_error_t *err2 = svn_wc__release_write_lock(eb->ctx->wc_ctx,
- lock_root_abspath,
- scratch_pool);
-
- if (err2 && err2->apr_err == SVN_ERR_WC_NOT_LOCKED)
- {
- /* We removed the lock by removing the node, how nice! */
- svn_error_clear(err2);
- }
- else
- err = svn_error_compose_create(err, err2);
- }
-
return svn_error_trace(err);
}
static svn_error_t *
-handle_external_item_change(const struct external_change_baton_t *eb,
+handle_external_item_change(svn_client_ctx_t *ctx,
+ const char *repos_root_url,
const char *parent_dir_abspath,
const char *parent_dir_url,
const char *local_abspath,
const char *old_defining_abspath,
const svn_wc_external_item2_t *new_item,
+ svn_boolean_t *timestamp_sleep,
apr_pool_t *scratch_pool)
{
svn_ra_session_t *ra_session;
- svn_revnum_t ra_revnum;
- const char *ra_session_url;
- const char *repos_root_url;
- const char *repos_uuid;
+ svn_client__pathrev_t *new_loc;
const char *new_url;
svn_node_kind_t ext_kind;
- svn_node_kind_t local_kind;
-
- local_kind = svn_node_unknown;
- SVN_ERR_ASSERT(eb->repos_root_url && parent_dir_url);
+ SVN_ERR_ASSERT(repos_root_url && parent_dir_url);
SVN_ERR_ASSERT(new_item != NULL);
/* Don't bother to check status, since we'll get that for free by
@@ -854,38 +740,32 @@ handle_external_item_change(const struct external_change_baton_t *eb,
iterpool, since the hash table values outlive the iterpool and
any pointers they have should also outlive the iterpool. */
- SVN_ERR(resolve_relative_external_url(&new_url,
- new_item, eb->repos_root_url,
- parent_dir_url,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__resolve_relative_external_url(&new_url,
+ new_item, repos_root_url,
+ parent_dir_url,
+ scratch_pool, scratch_pool));
/* Determine if the external is a file or directory. */
/* Get the RA connection. */
- SVN_ERR(svn_client__ra_session_from_path(&ra_session,
- &ra_revnum,
- &ra_session_url,
- new_url, NULL,
- &(new_item->peg_revision),
- &(new_item->revision), eb->ctx,
- scratch_pool));
-
- SVN_ERR(svn_ra_get_uuid2(ra_session, &repos_uuid, scratch_pool));
- SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root_url, scratch_pool));
- SVN_ERR(svn_ra_check_path(ra_session, "", ra_revnum, &ext_kind,
+ SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &new_loc,
+ new_url, NULL,
+ &(new_item->peg_revision),
+ &(new_item->revision), ctx,
+ scratch_pool));
+
+ SVN_ERR(svn_ra_check_path(ra_session, "", new_loc->rev, &ext_kind,
scratch_pool));
if (svn_node_none == ext_kind)
return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
_("URL '%s' at revision %ld doesn't exist"),
- ra_session_url, ra_revnum);
+ new_loc->url, new_loc->rev);
if (svn_node_dir != ext_kind && svn_node_file != ext_kind)
return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
_("URL '%s' at revision %ld is not a file "
"or a directory"),
- ra_session_url, ra_revnum);
-
- local_kind = ext_kind;
+ new_loc->url, new_loc->rev);
/* Not protecting against recursive externals. Detecting them in
@@ -893,10 +773,10 @@ handle_external_item_change(const struct external_change_baton_t *eb,
user when it happens. Worst case: your disk fills up :-). */
/* First notify that we're about to handle an external. */
- if (eb->ctx->notify_func2)
+ if (ctx->notify_func2)
{
- (*eb->ctx->notify_func2)(
- eb->ctx->notify_baton2,
+ (*ctx->notify_func2)(
+ ctx->notify_baton2,
svn_wc_create_notify(local_abspath,
svn_wc_notify_update_external,
scratch_pool),
@@ -912,24 +792,26 @@ handle_external_item_change(const struct external_change_baton_t *eb,
scratch_pool));
}
- switch (local_kind)
+ switch (ext_kind)
{
case svn_node_dir:
- SVN_ERR(switch_dir_external(local_abspath, new_url,
+ SVN_ERR(switch_dir_external(local_abspath, new_loc->url,
+ new_item->url,
&(new_item->peg_revision),
&(new_item->revision),
parent_dir_abspath,
- eb->timestamp_sleep, eb->ctx,
+ timestamp_sleep, ctx,
scratch_pool));
break;
case svn_node_file:
- if (strcmp(eb->repos_root_url, repos_root_url))
+ if (strcmp(repos_root_url, new_loc->repos_root_url))
{
const char *local_repos_root_url;
const char *local_repos_uuid;
const char *ext_repos_relpath;
-
- /*
+ svn_error_t *err;
+
+ /*
* The working copy library currently requires that all files
* in the working copy have the same repository root URL.
* The URL from the file external's definition differs from the
@@ -938,34 +820,41 @@ handle_external_item_change(const struct external_change_baton_t *eb,
* sure both URLs point to the same repository. See issue #4087.
*/
- SVN_ERR(svn_wc__node_get_repos_info(&local_repos_root_url,
- &local_repos_uuid,
- eb->ctx->wc_ctx,
- parent_dir_abspath,
- scratch_pool, scratch_pool));
- ext_repos_relpath = svn_uri_skip_ancestor(repos_root_url,
+ err = svn_wc__node_get_repos_info(NULL, NULL,
+ &local_repos_root_url,
+ &local_repos_uuid,
+ ctx->wc_ctx, parent_dir_abspath,
+ scratch_pool, scratch_pool);
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND
+ && err->apr_err != SVN_ERR_WC_NOT_WORKING_COPY)
+ return svn_error_trace(err);
+
+ svn_error_clear(err);
+ local_repos_root_url = NULL;
+ local_repos_uuid = NULL;
+ }
+
+ ext_repos_relpath = svn_uri_skip_ancestor(new_loc->repos_root_url,
new_url, scratch_pool);
if (local_repos_uuid == NULL || local_repos_root_url == NULL ||
ext_repos_relpath == NULL ||
- strcmp(local_repos_uuid, repos_uuid) != 0)
+ strcmp(local_repos_uuid, new_loc->repos_uuid) != 0)
return svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
- _("Unsupported external: url of file external '%s' "
+ _("Unsupported external: URL of file external '%s' "
"is not in repository '%s'"),
- new_url, eb->repos_root_url);
+ new_url, repos_root_url);
new_url = svn_path_url_add_component2(local_repos_root_url,
ext_repos_relpath,
scratch_pool);
- SVN_ERR(svn_client__ra_session_from_path(&ra_session,
- &ra_revnum,
- &ra_session_url,
- new_url,
- NULL,
- &(new_item->peg_revision),
- &(new_item->revision),
- eb->ctx, scratch_pool));
- SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root_url,
- scratch_pool));
+ SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &new_loc,
+ new_url,
+ NULL,
+ &(new_item->peg_revision),
+ &(new_item->revision),
+ ctx, scratch_pool));
}
SVN_ERR(switch_file_external(local_abspath,
@@ -974,12 +863,10 @@ handle_external_item_change(const struct external_change_baton_t *eb,
&new_item->revision,
parent_dir_abspath,
ra_session,
- ra_session_url,
- ra_revnum,
- repos_root_url,
- eb->timestamp_sleep, eb->ctx,
+ ctx,
scratch_pool));
break;
+
default:
SVN_ERR_MALFUNCTION();
break;
@@ -989,22 +876,21 @@ handle_external_item_change(const struct external_change_baton_t *eb,
}
static svn_error_t *
-wrap_external_error(const struct external_change_baton_t *eb,
+wrap_external_error(const svn_client_ctx_t *ctx,
const char *target_abspath,
svn_error_t *err,
apr_pool_t *scratch_pool)
{
if (err && err->apr_err != SVN_ERR_CANCELLED)
{
- if (eb->ctx->notify_func2)
+ if (ctx->notify_func2)
{
svn_wc_notify_t *notifier = svn_wc_create_notify(
target_abspath,
svn_wc_notify_failed_external,
scratch_pool);
notifier->err = err;
- eb->ctx->notify_func2(eb->ctx->notify_baton2, notifier,
- scratch_pool);
+ ctx->notify_func2(ctx->notify_baton2, notifier, scratch_pool);
}
svn_error_clear(err);
return SVN_NO_ERROR;
@@ -1013,12 +899,10 @@ wrap_external_error(const struct external_change_baton_t *eb,
return err;
}
-/* This implements the 'svn_hash_diff_func_t' interface.
- BATON is of type 'struct handle_externals_desc_change_baton *'.
- KEY is a 'const char *'.
-*/
static svn_error_t *
-handle_externals_change(const struct external_change_baton_t *eb,
+handle_externals_change(svn_client_ctx_t *ctx,
+ const char *repos_root_url,
+ svn_boolean_t *timestamp_sleep,
const char *local_abspath,
const char *new_desc_text,
apr_hash_t *old_externals,
@@ -1049,7 +933,7 @@ handle_externals_change(const struct external_change_baton_t *eb,
else
new_desc = NULL;
- SVN_ERR(svn_wc__node_get_url(&url, eb->ctx->wc_ctx, local_abspath,
+ SVN_ERR(svn_wc__node_get_url(&url, ctx->wc_ctx, local_abspath,
scratch_pool, iterpool));
SVN_ERR_ASSERT(url);
@@ -1059,29 +943,47 @@ handle_externals_change(const struct external_change_baton_t *eb,
const char *old_defining_abspath;
svn_wc_external_item2_t *new_item;
const char *target_abspath;
+ svn_boolean_t under_root;
new_item = APR_ARRAY_IDX(new_desc, i, svn_wc_external_item2_t *);
svn_pool_clear(iterpool);
- target_abspath = svn_dirent_join(local_abspath, new_item->target_dir,
- iterpool);
+ if (ctx->cancel_func)
+ SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
+
+ SVN_ERR(svn_dirent_is_under_root(&under_root, &target_abspath,
+ local_abspath, new_item->target_dir,
+ iterpool));
- old_defining_abspath = apr_hash_get(old_externals, target_abspath,
- APR_HASH_KEY_STRING);
+ if (! under_root)
+ {
+ return svn_error_createf(
+ SVN_ERR_WC_OBSTRUCTED_UPDATE, NULL,
+ _("Path '%s' is not in the working copy"),
+ svn_dirent_local_style(
+ svn_dirent_join(local_abspath, new_item->target_dir,
+ iterpool),
+ iterpool));
+ }
+
+ old_defining_abspath = svn_hash_gets(old_externals, target_abspath);
SVN_ERR(wrap_external_error(
- eb, target_abspath,
- handle_external_item_change(eb, local_abspath, url,
+ ctx, target_abspath,
+ handle_external_item_change(ctx,
+ repos_root_url,
+ local_abspath, url,
target_abspath,
old_defining_abspath,
new_item,
+ timestamp_sleep,
iterpool),
iterpool));
/* And remove already processed items from the to-remove hash */
if (old_defining_abspath)
- apr_hash_set(old_externals, target_abspath, APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(old_externals, target_abspath, NULL);
}
svn_pool_destroy(iterpool);
@@ -1103,19 +1005,11 @@ svn_client__handle_externals(apr_hash_t *externals_new,
apr_hash_t *old_external_defs;
apr_hash_index_t *hi;
apr_pool_t *iterpool;
- struct external_change_baton_t eb;
SVN_ERR_ASSERT(repos_root_url);
- eb.repos_root_url = repos_root_url;
- eb.ctx = ctx;
- eb.timestamp_sleep = timestamp_sleep;
-
-
iterpool = svn_pool_create(scratch_pool);
- /* Parse the old externals. This part will be replaced by reading EXTERNALS
- from the DB. */
SVN_ERR(svn_wc__externals_defined_below(&old_external_defs,
ctx->wc_ctx, target_abspath,
scratch_pool, iterpool));
@@ -1150,7 +1044,8 @@ svn_client__handle_externals(apr_hash_t *externals_new,
}
}
- SVN_ERR(handle_externals_change(&eb, local_abspath,
+ SVN_ERR(handle_externals_change(ctx, repos_root_url, timestamp_sleep,
+ local_abspath,
desc_text, old_external_defs,
ambient_depth, requested_depth,
iterpool));
@@ -1168,8 +1063,8 @@ svn_client__handle_externals(apr_hash_t *externals_new,
svn_pool_clear(iterpool);
SVN_ERR(wrap_external_error(
- &eb, item_abspath,
- handle_external_item_removal(&eb, defining_abspath,
+ ctx, item_abspath,
+ handle_external_item_removal(ctx, defining_abspath,
item_abspath, iterpool),
iterpool));
@@ -1177,23 +1072,34 @@ svn_client__handle_externals(apr_hash_t *externals_new,
* external and the DEFINING_ABSPATH which we can remove? */
parent_abspath = item_abspath;
do {
- svn_wc_status3_t *parent_status;
+ svn_node_kind_t kind;
parent_abspath = svn_dirent_dirname(parent_abspath, iterpool);
- SVN_ERR(svn_wc_status3(&parent_status, ctx->wc_ctx, parent_abspath,
- iterpool, iterpool));
- if (parent_status->node_status == svn_wc_status_unversioned)
+ SVN_ERR(svn_wc_read_kind2(&kind, ctx->wc_ctx, parent_abspath,
+ FALSE /* show_deleted*/,
+ FALSE /* show_hidden */,
+ iterpool));
+ if (kind == svn_node_none)
{
svn_error_t *err;
err = svn_io_dir_remove_nonrecursive(parent_abspath, iterpool);
- if (err && APR_STATUS_IS_ENOTEMPTY(err->apr_err))
+ if (err)
{
- svn_error_clear(err);
- break;
+ if (APR_STATUS_IS_ENOTEMPTY(err->apr_err))
+ {
+ svn_error_clear(err);
+ break; /* No parents to delete */
+ }
+ else if (APR_STATUS_IS_ENOENT(err->apr_err)
+ || APR_STATUS_IS_ENOTDIR(err->apr_err))
+ {
+ svn_error_clear(err);
+ /* Fall through; parent dir might be unversioned */
+ }
+ else
+ return svn_error_trace(err);
}
- else
- SVN_ERR(err);
}
} while (strcmp(parent_abspath, defining_abspath) != 0);
}
@@ -1212,21 +1118,15 @@ svn_client__export_externals(apr_hash_t *externals,
svn_depth_t requested_depth,
const char *native_eol,
svn_boolean_t ignore_keywords,
- svn_boolean_t *timestamp_sleep,
svn_client_ctx_t *ctx,
apr_pool_t *scratch_pool)
{
- struct external_change_baton_t eb = { 0 };
apr_pool_t *iterpool = svn_pool_create(scratch_pool);
apr_pool_t *sub_iterpool = svn_pool_create(scratch_pool);
apr_hash_index_t *hi;
SVN_ERR_ASSERT(svn_dirent_is_absolute(to_abspath));
- eb.repos_root_url = repos_root_url;
- eb.ctx = ctx;
- eb.timestamp_sleep = timestamp_sleep;
-
for (hi = apr_hash_first(scratch_pool, externals);
hi;
hi = apr_hash_next(hi))
@@ -1242,7 +1142,7 @@ svn_client__export_externals(apr_hash_t *externals,
SVN_ERR(svn_wc_parse_externals_description3(&items, local_abspath,
desc_text, FALSE,
- scratch_pool));
+ iterpool));
if (! items->nelts)
continue;
@@ -1256,17 +1156,31 @@ svn_client__export_externals(apr_hash_t *externals,
{
const char *item_abspath;
const char *new_url;
+ svn_boolean_t under_root;
svn_wc_external_item2_t *item = APR_ARRAY_IDX(items, i,
svn_wc_external_item2_t *);
svn_pool_clear(sub_iterpool);
- item_abspath = svn_dirent_join(local_abspath, item->target_dir,
- sub_iterpool);
+ SVN_ERR(svn_dirent_is_under_root(&under_root, &item_abspath,
+ local_abspath, item->target_dir,
+ sub_iterpool));
+
+ if (! under_root)
+ {
+ return svn_error_createf(
+ SVN_ERR_WC_OBSTRUCTED_UPDATE, NULL,
+ _("Path '%s' is not in the working copy"),
+ svn_dirent_local_style(
+ svn_dirent_join(local_abspath, item->target_dir,
+ sub_iterpool),
+ sub_iterpool));
+ }
- SVN_ERR(resolve_relative_external_url(&new_url, item,
- repos_root_url, dir_url,
- sub_iterpool, sub_iterpool));
+ SVN_ERR(svn_wc__resolve_relative_external_url(&new_url, item,
+ repos_root_url,
+ dir_url, sub_iterpool,
+ sub_iterpool));
/* The target dir might have multiple components. Guarantee
the path leading down to the last component. */
@@ -1275,7 +1189,7 @@ svn_client__export_externals(apr_hash_t *externals,
sub_iterpool));
SVN_ERR(wrap_external_error(
- &eb, item_abspath,
+ ctx, item_abspath,
svn_client_export5(NULL, new_url, item_abspath,
&item->peg_revision,
&item->revision,
@@ -1293,105 +1207,3 @@ svn_client__export_externals(apr_hash_t *externals,
return SVN_NO_ERROR;
}
-
-svn_error_t *
-svn_client__do_external_status(svn_client_ctx_t *ctx,
- apr_hash_t *external_map,
- svn_depth_t depth,
- svn_boolean_t get_all,
- svn_boolean_t update,
- svn_boolean_t no_ignore,
- svn_client_status_func_t status_func,
- void *status_baton,
- apr_pool_t *pool)
-{
- apr_hash_index_t *hi;
- apr_pool_t *iterpool = svn_pool_create(pool);
-
- /* Loop over the hash of new values (we don't care about the old
- ones). This is a mapping of versioned directories to property
- values. */
- for (hi = apr_hash_first(pool, external_map);
- hi;
- hi = apr_hash_next(hi))
- {
- svn_node_kind_t external_kind;
- const char *local_abspath = svn__apr_hash_index_key(hi);
- const char *defining_abspath = svn__apr_hash_index_val(hi);
- svn_node_kind_t kind;
- svn_opt_revision_t opt_rev;
-
- svn_pool_clear(iterpool);
-
- /* Obtain information on the expected external. */
- SVN_ERR(svn_wc__read_external_info(&external_kind, NULL, NULL, NULL,
- &opt_rev.value.number,
- ctx->wc_ctx, defining_abspath,
- local_abspath, FALSE,
- iterpool, iterpool));
-
- if (external_kind != svn_node_dir)
- continue;
-
- SVN_ERR(svn_io_check_path(local_abspath, &kind, iterpool));
- if (kind != svn_node_dir)
- continue;
-
- if (SVN_IS_VALID_REVNUM(opt_rev.value.number))
- opt_rev.kind = svn_opt_revision_number;
- else
- opt_rev.kind = svn_opt_revision_unspecified;
-
- /* Tell the client we're starting an external status set. */
- if (ctx->notify_func2)
- ctx->notify_func2(
- ctx->notify_baton2,
- svn_wc_create_notify(local_abspath,
- svn_wc_notify_status_external,
- iterpool), iterpool);
-
- /* And then do the status. */
- SVN_ERR(svn_client_status5(NULL, ctx, local_abspath, &opt_rev, depth,
- get_all, update, no_ignore, FALSE, FALSE,
- NULL, status_func, status_baton,
- iterpool));
- }
-
- /* Destroy SUBPOOL and (implicitly) ITERPOOL. */
- svn_pool_destroy(iterpool);
-
- return SVN_NO_ERROR;
-}
-
-
-/* Implements the `svn_wc_externals_update_t' interface. */
-svn_error_t *
-svn_client__external_info_gatherer(void *baton,
- const char *local_abspath,
- const svn_string_t *old_value,
- const svn_string_t *new_value,
- svn_depth_t depth,
- apr_pool_t *scratch_pool)
-{
- svn_client__external_func_baton_t *efb = baton;
-
- local_abspath = apr_pstrdup(efb->result_pool, local_abspath);
-
- if (efb->externals_old != NULL && old_value != NULL)
- apr_hash_set(efb->externals_old, local_abspath, APR_HASH_KEY_STRING,
- apr_pstrndup(efb->result_pool,
- old_value->data, old_value->len));
-
- if (efb->externals_new != NULL && new_value != NULL)
- apr_hash_set(efb->externals_new, local_abspath, APR_HASH_KEY_STRING,
- apr_pstrndup(efb->result_pool,
- new_value->data, new_value->len));
-
- if (efb->ambient_depths != NULL)
- apr_hash_set(efb->ambient_depths, local_abspath, APR_HASH_KEY_STRING,
- svn_depth_to_word(depth));
-
- return SVN_NO_ERROR;
-}
-
-
diff --git a/subversion/libsvn_client/import.c b/subversion/libsvn_client/import.c
new file mode 100644
index 0000000..43e0d79
--- /dev/null
+++ b/subversion/libsvn_client/import.c
@@ -0,0 +1,964 @@
+/*
+ * import.c: wrappers around import functionality.
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+/* ==================================================================== */
+
+
+
+/*** Includes. ***/
+
+#include <string.h>
+#include <apr_strings.h>
+#include <apr_hash.h>
+#include <apr_md5.h>
+
+#include "svn_hash.h"
+#include "svn_ra.h"
+#include "svn_delta.h"
+#include "svn_subst.h"
+#include "svn_client.h"
+#include "svn_string.h"
+#include "svn_pools.h"
+#include "svn_error_codes.h"
+#include "svn_dirent_uri.h"
+#include "svn_path.h"
+#include "svn_io.h"
+#include "svn_sorts.h"
+#include "svn_props.h"
+
+#include "client.h"
+#include "private/svn_subr_private.h"
+#include "private/svn_ra_private.h"
+#include "private/svn_magic.h"
+
+#include "svn_private_config.h"
+
+/* Import context baton.
+
+ ### TODO: Add the following items to this baton:
+ /` import editor/baton. `/
+ const svn_delta_editor_t *editor;
+ void *edit_baton;
+
+ /` Client context baton `/
+ svn_client_ctx_t `ctx;
+
+ /` Paths (keys) excluded from the import (values ignored) `/
+ apr_hash_t *excludes;
+*/
+typedef struct import_ctx_t
+{
+ /* Whether any changes were made to the repository */
+ svn_boolean_t repos_changed;
+
+ /* A magic cookie for mime-type detection. */
+ svn_magic__cookie_t *magic_cookie;
+
+ /* Collection of all possible configuration file dictated auto-props and
+ svn:auto-props. A hash mapping const char * file patterns to a
+ second hash which maps const char * property names to const char *
+ property values. Properties which don't have a value, e.g.
+ svn:executable, simply map the property name to an empty string.
+ May be NULL if autoprops are disabled. */
+ apr_hash_t *autoprops;
+} import_ctx_t;
+
+
+/* Apply LOCAL_ABSPATH's contents (as a delta against the empty string) to
+ FILE_BATON in EDITOR. Use POOL for any temporary allocation.
+ PROPERTIES is the set of node properties set on this file.
+
+ Fill DIGEST with the md5 checksum of the sent file; DIGEST must be
+ at least APR_MD5_DIGESTSIZE bytes long. */
+
+/* ### how does this compare against svn_wc_transmit_text_deltas2() ??? */
+
+static svn_error_t *
+send_file_contents(const char *local_abspath,
+ void *file_baton,
+ const svn_delta_editor_t *editor,
+ apr_hash_t *properties,
+ unsigned char *digest,
+ apr_pool_t *pool)
+{
+ svn_stream_t *contents;
+ svn_txdelta_window_handler_t handler;
+ void *handler_baton;
+ const svn_string_t *eol_style_val = NULL, *keywords_val = NULL;
+ svn_boolean_t special = FALSE;
+ svn_subst_eol_style_t eol_style;
+ const char *eol;
+ apr_hash_t *keywords;
+
+ /* If there are properties, look for EOL-style and keywords ones. */
+ if (properties)
+ {
+ eol_style_val = apr_hash_get(properties, SVN_PROP_EOL_STYLE,
+ sizeof(SVN_PROP_EOL_STYLE) - 1);
+ keywords_val = apr_hash_get(properties, SVN_PROP_KEYWORDS,
+ sizeof(SVN_PROP_KEYWORDS) - 1);
+ if (svn_hash_gets(properties, SVN_PROP_SPECIAL))
+ special = TRUE;
+ }
+
+ /* Get an editor func that wants to consume the delta stream. */
+ SVN_ERR(editor->apply_textdelta(file_baton, NULL, pool,
+ &handler, &handler_baton));
+
+ if (eol_style_val)
+ svn_subst_eol_style_from_value(&eol_style, &eol, eol_style_val->data);
+ else
+ {
+ eol = NULL;
+ eol_style = svn_subst_eol_style_none;
+ }
+
+ if (keywords_val)
+ SVN_ERR(svn_subst_build_keywords3(&keywords, keywords_val->data,
+ APR_STRINGIFY(SVN_INVALID_REVNUM),
+ "", "", 0, "", pool));
+ else
+ keywords = NULL;
+
+ if (special)
+ {
+ SVN_ERR(svn_subst_read_specialfile(&contents, local_abspath,
+ pool, pool));
+ }
+ else
+ {
+ /* Open the working copy file. */
+ SVN_ERR(svn_stream_open_readonly(&contents, local_abspath, pool, pool));
+
+ /* If we have EOL styles or keywords, then detranslate the file. */
+ if (svn_subst_translation_required(eol_style, eol, keywords,
+ FALSE, TRUE))
+ {
+ if (eol_style == svn_subst_eol_style_unknown)
+ return svn_error_createf(SVN_ERR_IO_UNKNOWN_EOL, NULL,
+ _("%s property on '%s' contains "
+ "unrecognized EOL-style '%s'"),
+ SVN_PROP_EOL_STYLE,
+ svn_dirent_local_style(local_abspath,
+ pool),
+ eol_style_val->data);
+
+ /* We're importing, so translate files with 'native' eol-style to
+ * repository-normal form, not to this platform's native EOL. */
+ if (eol_style == svn_subst_eol_style_native)
+ eol = SVN_SUBST_NATIVE_EOL_STR;
+
+ /* Wrap the working copy stream with a filter to detranslate it. */
+ contents = svn_subst_stream_translated(contents,
+ eol,
+ TRUE /* repair */,
+ keywords,
+ FALSE /* expand */,
+ pool);
+ }
+ }
+
+ /* Send the file's contents to the delta-window handler. */
+ return svn_error_trace(svn_txdelta_send_stream(contents, handler,
+ handler_baton, digest,
+ pool));
+}
+
+
+/* Import file PATH as EDIT_PATH in the repository directory indicated
+ * by DIR_BATON in EDITOR.
+ *
+ * Accumulate file paths and their batons in FILES, which must be
+ * non-null. (These are used to send postfix textdeltas later).
+ *
+ * If CTX->NOTIFY_FUNC is non-null, invoke it with CTX->NOTIFY_BATON
+ * for each file.
+ *
+ * Use POOL for any temporary allocation.
+ */
+static svn_error_t *
+import_file(const svn_delta_editor_t *editor,
+ void *dir_baton,
+ const char *local_abspath,
+ const char *edit_path,
+ const svn_io_dirent2_t *dirent,
+ import_ctx_t *import_ctx,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ void *file_baton;
+ const char *mimetype = NULL;
+ unsigned char digest[APR_MD5_DIGESTSIZE];
+ const char *text_checksum;
+ apr_hash_t* properties;
+ apr_hash_index_t *hi;
+
+ SVN_ERR(svn_path_check_valid(local_abspath, pool));
+
+ /* Add the file, using the pool from the FILES hash. */
+ SVN_ERR(editor->add_file(edit_path, dir_baton, NULL, SVN_INVALID_REVNUM,
+ pool, &file_baton));
+
+ /* Remember that the repository was modified */
+ import_ctx->repos_changed = TRUE;
+
+ if (! dirent->special)
+ {
+ /* add automatic properties */
+ SVN_ERR(svn_client__get_paths_auto_props(&properties, &mimetype,
+ local_abspath,
+ import_ctx->magic_cookie,
+ import_ctx->autoprops,
+ ctx, pool, pool));
+ }
+ else
+ properties = apr_hash_make(pool);
+
+ if (properties)
+ {
+ for (hi = apr_hash_first(pool, properties); hi; hi = apr_hash_next(hi))
+ {
+ const char *pname = svn__apr_hash_index_key(hi);
+ const svn_string_t *pval = svn__apr_hash_index_val(hi);
+
+ SVN_ERR(editor->change_file_prop(file_baton, pname, pval, pool));
+ }
+ }
+
+ if (ctx->notify_func2)
+ {
+ svn_wc_notify_t *notify
+ = svn_wc_create_notify(local_abspath, svn_wc_notify_commit_added,
+ pool);
+ notify->kind = svn_node_file;
+ notify->mime_type = mimetype;
+ notify->content_state = notify->prop_state
+ = svn_wc_notify_state_inapplicable;
+ notify->lock_state = svn_wc_notify_lock_state_inapplicable;
+ (*ctx->notify_func2)(ctx->notify_baton2, notify, pool);
+ }
+
+ /* If this is a special file, we need to set the svn:special
+ property and create a temporary detranslated version in order to
+ send to the server. */
+ if (dirent->special)
+ {
+ svn_hash_sets(properties, SVN_PROP_SPECIAL,
+ svn_string_create(SVN_PROP_BOOLEAN_TRUE, pool));
+ SVN_ERR(editor->change_file_prop(file_baton, SVN_PROP_SPECIAL,
+ svn_hash_gets(properties,
+ SVN_PROP_SPECIAL),
+ pool));
+ }
+
+ /* Now, transmit the file contents. */
+ SVN_ERR(send_file_contents(local_abspath, file_baton, editor,
+ properties, digest, pool));
+
+ /* Finally, close the file. */
+ text_checksum =
+ svn_checksum_to_cstring(svn_checksum__from_digest_md5(digest, pool), pool);
+
+ return editor->close_file(file_baton, text_checksum, pool);
+}
+
+
+/* Return in CHILDREN a mapping of basenames to dirents for the importable
+ * children of DIR_ABSPATH. EXCLUDES is a hash of absolute paths to filter
+ * out. IGNORES and GLOBAL_IGNORES, if non-NULL, are lists of basename
+ * patterns to filter out.
+ * FILTER_CALLBACK and FILTER_BATON will be called for each absolute path,
+ * allowing users to further filter the list of returned entries.
+ *
+ * Results are returned in RESULT_POOL; use SCRATCH_POOL for temporary data.*/
+static svn_error_t *
+get_filtered_children(apr_hash_t **children,
+ const char *dir_abspath,
+ apr_hash_t *excludes,
+ apr_array_header_t *ignores,
+ apr_array_header_t *global_ignores,
+ svn_client_import_filter_func_t filter_callback,
+ void *filter_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ apr_hash_t *dirents;
+ apr_hash_index_t *hi;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+
+ SVN_ERR(svn_io_get_dirents3(&dirents, dir_abspath, TRUE, result_pool,
+ scratch_pool));
+
+ for (hi = apr_hash_first(scratch_pool, dirents); hi; hi = apr_hash_next(hi))
+ {
+ const char *base_name = svn__apr_hash_index_key(hi);
+ const svn_io_dirent2_t *dirent = svn__apr_hash_index_val(hi);
+ const char *local_abspath;
+
+ svn_pool_clear(iterpool);
+
+ local_abspath = svn_dirent_join(dir_abspath, base_name, iterpool);
+
+ if (svn_wc_is_adm_dir(base_name, iterpool))
+ {
+ /* If someone's trying to import a directory named the same
+ as our administrative directories, that's probably not
+ what they wanted to do. If they are importing a file
+ with that name, something is bound to blow up when they
+ checkout what they've imported. So, just skip items with
+ that name. */
+ if (ctx->notify_func2)
+ {
+ svn_wc_notify_t *notify
+ = svn_wc_create_notify(svn_dirent_join(local_abspath, base_name,
+ iterpool),
+ svn_wc_notify_skip, iterpool);
+ notify->kind = svn_node_dir;
+ notify->content_state = notify->prop_state
+ = svn_wc_notify_state_inapplicable;
+ notify->lock_state = svn_wc_notify_lock_state_inapplicable;
+ (*ctx->notify_func2)(ctx->notify_baton2, notify, iterpool);
+ }
+
+ svn_hash_sets(dirents, base_name, NULL);
+ continue;
+ }
+ /* If this is an excluded path, exclude it. */
+ if (svn_hash_gets(excludes, local_abspath))
+ {
+ svn_hash_sets(dirents, base_name, NULL);
+ continue;
+ }
+
+ if (ignores && svn_wc_match_ignore_list(base_name, ignores, iterpool))
+ {
+ svn_hash_sets(dirents, base_name, NULL);
+ continue;
+ }
+
+ if (global_ignores &&
+ svn_wc_match_ignore_list(base_name, global_ignores, iterpool))
+ {
+ svn_hash_sets(dirents, base_name, NULL);
+ continue;
+ }
+
+ if (filter_callback)
+ {
+ svn_boolean_t filter = FALSE;
+
+ SVN_ERR(filter_callback(filter_baton, &filter, local_abspath,
+ dirent, iterpool));
+
+ if (filter)
+ {
+ svn_hash_sets(dirents, base_name, NULL);
+ continue;
+ }
+ }
+ }
+ svn_pool_destroy(iterpool);
+
+ *children = dirents;
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+import_dir(const svn_delta_editor_t *editor,
+ void *dir_baton,
+ const char *local_abspath,
+ const char *edit_path,
+ svn_depth_t depth,
+ apr_hash_t *excludes,
+ apr_array_header_t *global_ignores,
+ svn_boolean_t no_ignore,
+ svn_boolean_t no_autoprops,
+ svn_boolean_t ignore_unknown_node_types,
+ svn_client_import_filter_func_t filter_callback,
+ void *filter_baton,
+ import_ctx_t *import_ctx,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool);
+
+
+/* Import the children of DIR_ABSPATH, with other arguments similar to
+ * import_dir(). */
+static svn_error_t *
+import_children(const char *dir_abspath,
+ const char *edit_path,
+ apr_hash_t *dirents,
+ const svn_delta_editor_t *editor,
+ void *dir_baton,
+ svn_depth_t depth,
+ apr_hash_t *excludes,
+ apr_array_header_t *global_ignores,
+ svn_boolean_t no_ignore,
+ svn_boolean_t no_autoprops,
+ svn_boolean_t ignore_unknown_node_types,
+ svn_client_import_filter_func_t filter_callback,
+ void *filter_baton,
+ import_ctx_t *import_ctx,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
+{
+ apr_array_header_t *sorted_dirents;
+ int i;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+
+ sorted_dirents = svn_sort__hash(dirents, svn_sort_compare_items_lexically,
+ scratch_pool);
+ for (i = 0; i < sorted_dirents->nelts; i++)
+ {
+ const char *this_abspath, *this_edit_path;
+ svn_sort__item_t item = APR_ARRAY_IDX(sorted_dirents, i,
+ svn_sort__item_t);
+ const char *filename = item.key;
+ const svn_io_dirent2_t *dirent = item.value;
+
+ svn_pool_clear(iterpool);
+
+ if (ctx->cancel_func)
+ SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
+
+ /* Typically, we started importing from ".", in which case
+ edit_path is "". So below, this_path might become "./blah",
+ and this_edit_path might become "blah", for example. */
+ this_abspath = svn_dirent_join(dir_abspath, filename, iterpool);
+ this_edit_path = svn_relpath_join(edit_path, filename, iterpool);
+
+ if (dirent->kind == svn_node_dir && depth >= svn_depth_immediates)
+ {
+ /* Recurse. */
+ svn_depth_t depth_below_here = depth;
+ if (depth == svn_depth_immediates)
+ depth_below_here = svn_depth_empty;
+
+ SVN_ERR(import_dir(editor, dir_baton, this_abspath,
+ this_edit_path, depth_below_here, excludes,
+ global_ignores, no_ignore, no_autoprops,
+ ignore_unknown_node_types, filter_callback,
+ filter_baton, import_ctx, ctx, iterpool));
+ }
+ else if (dirent->kind == svn_node_file && depth >= svn_depth_files)
+ {
+ SVN_ERR(import_file(editor, dir_baton, this_abspath,
+ this_edit_path, dirent,
+ import_ctx, ctx, iterpool));
+ }
+ else if (dirent->kind != svn_node_dir && dirent->kind != svn_node_file)
+ {
+ if (ignore_unknown_node_types)
+ {
+ /*## warn about it*/
+ if (ctx->notify_func2)
+ {
+ svn_wc_notify_t *notify
+ = svn_wc_create_notify(this_abspath,
+ svn_wc_notify_skip, iterpool);
+ notify->kind = svn_node_dir;
+ notify->content_state = notify->prop_state
+ = svn_wc_notify_state_inapplicable;
+ notify->lock_state = svn_wc_notify_lock_state_inapplicable;
+ (*ctx->notify_func2)(ctx->notify_baton2, notify, iterpool);
+ }
+ }
+ else
+ return svn_error_createf
+ (SVN_ERR_NODE_UNKNOWN_KIND, NULL,
+ _("Unknown or unversionable type for '%s'"),
+ svn_dirent_local_style(this_abspath, iterpool));
+ }
+ }
+
+ svn_pool_destroy(iterpool);
+ return SVN_NO_ERROR;
+}
+
+
+/* Import directory LOCAL_ABSPATH into the repository directory indicated by
+ * DIR_BATON in EDITOR. EDIT_PATH is the path imported as the root
+ * directory, so all edits are relative to that.
+ *
+ * DEPTH is the depth at this point in the descent (it may be changed
+ * for recursive calls).
+ *
+ * Accumulate file paths and their batons in FILES, which must be
+ * non-null. (These are used to send postfix textdeltas later).
+ *
+ * EXCLUDES is a hash whose keys are absolute paths to exclude from
+ * the import (values are unused).
+ *
+ * GLOBAL_IGNORES is an array of const char * ignore patterns. Any child
+ * of LOCAL_ABSPATH which matches one or more of the patterns is not imported.
+ *
+ * If NO_IGNORE is FALSE, don't import files or directories that match
+ * ignore patterns.
+ *
+ * If FILTER_CALLBACK is not NULL, call it with FILTER_BATON on each to be
+ * imported node below LOCAL_ABSPATH to allow filtering nodes.
+ *
+ * If CTX->NOTIFY_FUNC is non-null, invoke it with CTX->NOTIFY_BATON for each
+ * directory.
+ *
+ * Use POOL for any temporary allocation. */
+static svn_error_t *
+import_dir(const svn_delta_editor_t *editor,
+ void *dir_baton,
+ const char *local_abspath,
+ const char *edit_path,
+ svn_depth_t depth,
+ apr_hash_t *excludes,
+ apr_array_header_t *global_ignores,
+ svn_boolean_t no_ignore,
+ svn_boolean_t no_autoprops,
+ svn_boolean_t ignore_unknown_node_types,
+ svn_client_import_filter_func_t filter_callback,
+ void *filter_baton,
+ import_ctx_t *import_ctx,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ apr_hash_t *dirents;
+ void *this_dir_baton;
+
+ SVN_ERR(svn_path_check_valid(local_abspath, pool));
+ SVN_ERR(get_filtered_children(&dirents, local_abspath, excludes, NULL,
+ global_ignores, filter_callback,
+ filter_baton, ctx, pool, pool));
+
+ /* Import this directory, but not yet its children. */
+ {
+ /* Add the new subdirectory, getting a descent baton from the editor. */
+ SVN_ERR(editor->add_directory(edit_path, dir_baton, NULL,
+ SVN_INVALID_REVNUM, pool, &this_dir_baton));
+
+ /* Remember that the repository was modified */
+ import_ctx->repos_changed = TRUE;
+
+ /* By notifying before the recursive call below, we display
+ a directory add before displaying adds underneath the
+ directory. To do it the other way around, just move this
+ after the recursive call. */
+ if (ctx->notify_func2)
+ {
+ svn_wc_notify_t *notify
+ = svn_wc_create_notify(local_abspath, svn_wc_notify_commit_added,
+ pool);
+ notify->kind = svn_node_dir;
+ notify->content_state = notify->prop_state
+ = svn_wc_notify_state_inapplicable;
+ notify->lock_state = svn_wc_notify_lock_state_inapplicable;
+ (*ctx->notify_func2)(ctx->notify_baton2, notify, pool);
+ }
+ }
+
+ /* Now import the children recursively. */
+ SVN_ERR(import_children(local_abspath, edit_path, dirents, editor,
+ this_dir_baton, depth, excludes, global_ignores,
+ no_ignore, no_autoprops, ignore_unknown_node_types,
+ filter_callback, filter_baton,
+ import_ctx, ctx, pool));
+
+ /* Finally, close the sub-directory. */
+ SVN_ERR(editor->close_directory(this_dir_baton, pool));
+
+ return SVN_NO_ERROR;
+}
+
+
+/* Recursively import PATH to a repository using EDITOR and
+ * EDIT_BATON. PATH can be a file or directory.
+ *
+ * DEPTH is the depth at which to import PATH; it behaves as for
+ * svn_client_import4().
+ *
+ * NEW_ENTRIES is an ordered array of path components that must be
+ * created in the repository (where the ordering direction is
+ * parent-to-child). If PATH is a directory, NEW_ENTRIES may be empty
+ * -- the result is an import which creates as many new entries in the
+ * top repository target directory as there are importable entries in
+ * the top of PATH; but if NEW_ENTRIES is not empty, its last item is
+ * the name of a new subdirectory in the repository to hold the
+ * import. If PATH is a file, NEW_ENTRIES may not be empty, and its
+ * last item is the name used for the file in the repository. If
+ * NEW_ENTRIES contains more than one item, all but the last item are
+ * the names of intermediate directories that are created before the
+ * real import begins. NEW_ENTRIES may NOT be NULL.
+ *
+ * EXCLUDES is a hash whose keys are absolute paths to exclude from
+ * the import (values are unused).
+ *
+ * AUTOPROPS is hash of all config file autoprops and
+ * svn:auto-props inherited by the import target, see the
+ * IMPORT_CTX member of the same name.
+ *
+ * LOCAL_IGNORES is an array of const char * ignore patterns which
+ * correspond to the svn:ignore property (if any) set on the root of the
+ * repository target and thus dictates which immediate children of that
+ * target should be ignored and not imported.
+ *
+ * GLOBAL_IGNORES is an array of const char * ignore patterns which
+ * correspond to the svn:global-ignores properties (if any) set on
+ * the root of the repository target or inherited by it.
+ *
+ * If NO_IGNORE is FALSE, don't import files or directories that match
+ * ignore patterns.
+ *
+ * If CTX->NOTIFY_FUNC is non-null, invoke it with CTX->NOTIFY_BATON for
+ * each imported path, passing actions svn_wc_notify_commit_added.
+ *
+ * Use POOL for any temporary allocation.
+ *
+ * Note: the repository directory receiving the import was specified
+ * when the editor was fetched. (I.e, when EDITOR->open_root() is
+ * called, it returns a directory baton for that directory, which is
+ * not necessarily the root.)
+ */
+static svn_error_t *
+import(const char *local_abspath,
+ const apr_array_header_t *new_entries,
+ const svn_delta_editor_t *editor,
+ void *edit_baton,
+ svn_depth_t depth,
+ apr_hash_t *excludes,
+ apr_hash_t *autoprops,
+ apr_array_header_t *local_ignores,
+ apr_array_header_t *global_ignores,
+ svn_boolean_t no_ignore,
+ svn_boolean_t no_autoprops,
+ svn_boolean_t ignore_unknown_node_types,
+ svn_client_import_filter_func_t filter_callback,
+ void *filter_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ void *root_baton;
+ apr_array_header_t *batons = NULL;
+ const char *edit_path = "";
+ import_ctx_t *import_ctx = apr_pcalloc(pool, sizeof(*import_ctx));
+ const svn_io_dirent2_t *dirent;
+
+ import_ctx->autoprops = autoprops;
+ svn_magic__init(&import_ctx->magic_cookie, pool);
+
+ /* Get a root dir baton. We pass an invalid revnum to open_root
+ to mean "base this on the youngest revision". Should we have an
+ SVN_YOUNGEST_REVNUM defined for these purposes? */
+ SVN_ERR(editor->open_root(edit_baton, SVN_INVALID_REVNUM,
+ pool, &root_baton));
+
+ /* Import a file or a directory tree. */
+ SVN_ERR(svn_io_stat_dirent2(&dirent, local_abspath, FALSE, FALSE,
+ pool, pool));
+
+ /* Make the intermediate directory components necessary for properly
+ rooting our import source tree. */
+ if (new_entries->nelts)
+ {
+ int i;
+
+ batons = apr_array_make(pool, new_entries->nelts, sizeof(void *));
+ for (i = 0; i < new_entries->nelts; i++)
+ {
+ const char *component = APR_ARRAY_IDX(new_entries, i, const char *);
+ edit_path = svn_relpath_join(edit_path, component, pool);
+
+ /* If this is the last path component, and we're importing a
+ file, then this component is the name of the file, not an
+ intermediate directory. */
+ if ((i == new_entries->nelts - 1) && (dirent->kind == svn_node_file))
+ break;
+
+ APR_ARRAY_PUSH(batons, void *) = root_baton;
+ SVN_ERR(editor->add_directory(edit_path,
+ root_baton,
+ NULL, SVN_INVALID_REVNUM,
+ pool, &root_baton));
+
+ /* Remember that the repository was modified */
+ import_ctx->repos_changed = TRUE;
+ }
+ }
+ else if (dirent->kind == svn_node_file)
+ {
+ return svn_error_create
+ (SVN_ERR_NODE_UNKNOWN_KIND, NULL,
+ _("New entry name required when importing a file"));
+ }
+
+ /* Note that there is no need to check whether PATH's basename is
+ the same name that we reserve for our administrative
+ subdirectories. It would be strange -- though not illegal -- to
+ import the contents of a directory of that name, because the
+ directory's own name is not part of those contents. Of course,
+ if something underneath it also has our reserved name, then we'll
+ error. */
+
+ if (dirent->kind == svn_node_file)
+ {
+ /* This code path ignores EXCLUDES and FILTER, but they don't make
+ much sense for a single file import anyway. */
+ svn_boolean_t ignores_match = FALSE;
+
+ if (!no_ignore)
+ ignores_match =
+ (svn_wc_match_ignore_list(local_abspath, global_ignores, pool)
+ || svn_wc_match_ignore_list(local_abspath, local_ignores, pool));
+
+ if (!ignores_match)
+ SVN_ERR(import_file(editor, root_baton, local_abspath, edit_path,
+ dirent, import_ctx, ctx, pool));
+ }
+ else if (dirent->kind == svn_node_dir)
+ {
+ apr_hash_t *dirents;
+
+ /* If we are creating a new repository directory path to import to,
+ then we disregard any svn:ignore property. */
+ if (!no_ignore && new_entries->nelts)
+ local_ignores = NULL;
+
+ SVN_ERR(get_filtered_children(&dirents, local_abspath, excludes,
+ local_ignores, global_ignores,
+ filter_callback, filter_baton, ctx,
+ pool, pool));
+
+ SVN_ERR(import_children(local_abspath, edit_path, dirents, editor,
+ root_baton, depth, excludes, global_ignores,
+ no_ignore, no_autoprops,
+ ignore_unknown_node_types, filter_callback,
+ filter_baton, import_ctx, ctx, pool));
+
+ }
+ else if (dirent->kind == svn_node_none
+ || dirent->kind == svn_node_unknown)
+ {
+ return svn_error_createf(SVN_ERR_NODE_UNKNOWN_KIND, NULL,
+ _("'%s' does not exist"),
+ svn_dirent_local_style(local_abspath, pool));
+ }
+
+ /* Close up shop; it's time to go home. */
+ SVN_ERR(editor->close_directory(root_baton, pool));
+ if (batons && batons->nelts)
+ {
+ void **baton;
+ while ((baton = (void **) apr_array_pop(batons)))
+ {
+ SVN_ERR(editor->close_directory(*baton, pool));
+ }
+ }
+
+ if (import_ctx->repos_changed)
+ return editor->close_edit(edit_baton, pool);
+ else
+ return editor->abort_edit(edit_baton, pool);
+}
+
+
+/*** Public Interfaces. ***/
+
+svn_error_t *
+svn_client_import5(const char *path,
+ const char *url,
+ svn_depth_t depth,
+ svn_boolean_t no_ignore,
+ svn_boolean_t no_autoprops,
+ svn_boolean_t ignore_unknown_node_types,
+ const apr_hash_t *revprop_table,
+ svn_client_import_filter_func_t filter_callback,
+ void *filter_baton,
+ svn_commit_callback2_t commit_callback,
+ void *commit_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
+{
+ svn_error_t *err = SVN_NO_ERROR;
+ const char *log_msg = "";
+ const svn_delta_editor_t *editor;
+ void *edit_baton;
+ svn_ra_session_t *ra_session;
+ apr_hash_t *excludes = apr_hash_make(scratch_pool);
+ svn_node_kind_t kind;
+ const char *local_abspath;
+ apr_array_header_t *new_entries = apr_array_make(scratch_pool, 4,
+ sizeof(const char *));
+ apr_hash_t *commit_revprops;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ apr_hash_t *autoprops = NULL;
+ apr_array_header_t *global_ignores;
+ apr_array_header_t *local_ignores_arr;
+
+ if (svn_path_is_url(path))
+ return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("'%s' is not a local path"), path);
+
+ SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, scratch_pool));
+
+ /* Create a new commit item and add it to the array. */
+ if (SVN_CLIENT__HAS_LOG_MSG_FUNC(ctx))
+ {
+ /* If there's a log message gatherer, create a temporary commit
+ item array solely to help generate the log message. The
+ array is not used for the import itself. */
+ svn_client_commit_item3_t *item;
+ const char *tmp_file;
+ apr_array_header_t *commit_items
+ = apr_array_make(scratch_pool, 1, sizeof(item));
+
+ item = svn_client_commit_item3_create(scratch_pool);
+ item->path = apr_pstrdup(scratch_pool, path);
+ item->state_flags = SVN_CLIENT_COMMIT_ITEM_ADD;
+ APR_ARRAY_PUSH(commit_items, svn_client_commit_item3_t *) = item;
+
+ SVN_ERR(svn_client__get_log_msg(&log_msg, &tmp_file, commit_items,
+ ctx, scratch_pool));
+ if (! log_msg)
+ return SVN_NO_ERROR;
+ if (tmp_file)
+ {
+ const char *abs_path;
+ SVN_ERR(svn_dirent_get_absolute(&abs_path, tmp_file, scratch_pool));
+ svn_hash_sets(excludes, abs_path, (void *)1);
+ }
+ }
+
+ SVN_ERR(svn_io_check_path(local_abspath, &kind, scratch_pool));
+
+ SVN_ERR(svn_client_open_ra_session2(&ra_session, url, NULL,
+ ctx, scratch_pool, iterpool));
+
+ /* Figure out all the path components we need to create just to have
+ a place to stick our imported tree. */
+ SVN_ERR(svn_ra_check_path(ra_session, "", SVN_INVALID_REVNUM, &kind,
+ iterpool));
+
+ /* We can import into directories, but if a file already exists, that's
+ an error. */
+ if (kind == svn_node_file)
+ return svn_error_createf
+ (SVN_ERR_ENTRY_EXISTS, NULL,
+ _("Path '%s' already exists"), url);
+
+ while (kind == svn_node_none)
+ {
+ const char *dir;
+
+ svn_pool_clear(iterpool);
+
+ svn_uri_split(&url, &dir, url, scratch_pool);
+ APR_ARRAY_PUSH(new_entries, const char *) = dir;
+ SVN_ERR(svn_ra_reparent(ra_session, url, iterpool));
+
+ SVN_ERR(svn_ra_check_path(ra_session, "", SVN_INVALID_REVNUM, &kind,
+ iterpool));
+ }
+
+ /* Reverse the order of the components we added to our NEW_ENTRIES array. */
+ svn_sort__array_reverse(new_entries, scratch_pool);
+
+ /* The repository doesn't know about the reserved administrative
+ directory. */
+ if (new_entries->nelts)
+ {
+ const char *last_component
+ = APR_ARRAY_IDX(new_entries, new_entries->nelts - 1, const char *);
+
+ if (svn_wc_is_adm_dir(last_component, scratch_pool))
+ return svn_error_createf
+ (SVN_ERR_CL_ADM_DIR_RESERVED, NULL,
+ _("'%s' is a reserved name and cannot be imported"),
+ svn_dirent_local_style(last_component, scratch_pool));
+ }
+
+ SVN_ERR(svn_client__ensure_revprop_table(&commit_revprops, revprop_table,
+ log_msg, ctx, scratch_pool));
+
+ /* Fetch RA commit editor. */
+ SVN_ERR(svn_ra__register_editor_shim_callbacks(ra_session,
+ svn_client__get_shim_callbacks(ctx->wc_ctx,
+ NULL, scratch_pool)));
+ SVN_ERR(svn_ra_get_commit_editor3(ra_session, &editor, &edit_baton,
+ commit_revprops, commit_callback,
+ commit_baton, NULL, TRUE,
+ scratch_pool));
+
+ /* Get inherited svn:auto-props, svn:global-ignores, and
+ svn:ignores for the location we are importing to. */
+ if (!no_autoprops)
+ SVN_ERR(svn_client__get_all_auto_props(&autoprops, url, ctx,
+ scratch_pool, iterpool));
+ if (no_ignore)
+ {
+ global_ignores = NULL;
+ local_ignores_arr = NULL;
+ }
+ else
+ {
+ svn_opt_revision_t rev;
+ apr_array_header_t *config_ignores;
+ apr_hash_t *local_ignores_hash;
+
+ SVN_ERR(svn_client__get_inherited_ignores(&global_ignores, url, ctx,
+ scratch_pool, iterpool));
+ SVN_ERR(svn_wc_get_default_ignores(&config_ignores, ctx->config,
+ scratch_pool));
+ global_ignores = apr_array_append(scratch_pool, global_ignores,
+ config_ignores);
+
+ rev.kind = svn_opt_revision_head;
+ SVN_ERR(svn_client_propget5(&local_ignores_hash, NULL, SVN_PROP_IGNORE, url,
+ &rev, &rev, NULL, svn_depth_empty, NULL, ctx,
+ scratch_pool, scratch_pool));
+ local_ignores_arr = apr_array_make(scratch_pool, 1, sizeof(const char *));
+
+ if (apr_hash_count(local_ignores_hash))
+ {
+ svn_string_t *propval = svn_hash_gets(local_ignores_hash, url);
+ if (propval)
+ {
+ svn_cstring_split_append(local_ignores_arr, propval->data,
+ "\n\r\t\v ", FALSE, scratch_pool);
+ }
+ }
+ }
+
+ /* If an error occurred during the commit, abort the edit and return
+ the error. We don't even care if the abort itself fails. */
+ if ((err = import(local_abspath, new_entries, editor, edit_baton,
+ depth, excludes, autoprops, local_ignores_arr,
+ global_ignores, no_ignore, no_autoprops,
+ ignore_unknown_node_types, filter_callback,
+ filter_baton, ctx, iterpool)))
+ {
+ return svn_error_compose_create(
+ err,
+ editor->abort_edit(edit_baton, iterpool));
+ }
+
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
diff --git a/subversion/libsvn_client/info.c b/subversion/libsvn_client/info.c
index ec4d5e1..f49f22e 100644
--- a/subversion/libsvn_client/info.c
+++ b/subversion/libsvn_client/info.c
@@ -66,19 +66,16 @@ static svn_error_t *
build_info_from_dirent(svn_client_info2_t **info,
const svn_dirent_t *dirent,
svn_lock_t *lock,
- const char *URL,
- svn_revnum_t revision,
- const char *repos_UUID,
- const char *repos_root,
+ const svn_client__pathrev_t *pathrev,
apr_pool_t *pool)
{
svn_client_info2_t *tmpinfo = apr_pcalloc(pool, sizeof(*tmpinfo));
- tmpinfo->URL = URL;
- tmpinfo->rev = revision;
+ tmpinfo->URL = pathrev->url;
+ tmpinfo->rev = pathrev->rev;
tmpinfo->kind = dirent->kind;
- tmpinfo->repos_UUID = repos_UUID;
- tmpinfo->repos_root_URL = repos_root;
+ tmpinfo->repos_UUID = pathrev->repos_uuid;
+ tmpinfo->repos_root_URL = pathrev->repos_root_url;
tmpinfo->last_changed_rev = dirent->created_rev;
tmpinfo->last_changed_date = dirent->time;
tmpinfo->last_changed_author = dirent->last_author;
@@ -111,11 +108,8 @@ build_info_from_dirent(svn_client_info2_t **info,
*/
static svn_error_t *
push_dir_info(svn_ra_session_t *ra_session,
- const char *session_URL,
+ const svn_client__pathrev_t *pathrev,
const char *dir,
- svn_revnum_t rev,
- const char *repos_UUID,
- const char *repos_root,
svn_client_info_receiver2_t receiver,
void *receiver_baton,
svn_depth_t depth,
@@ -128,15 +122,16 @@ push_dir_info(svn_ra_session_t *ra_session,
apr_pool_t *subpool = svn_pool_create(pool);
SVN_ERR(svn_ra_get_dir2(ra_session, &tmpdirents, NULL, NULL,
- dir, rev, DIRENT_FIELDS, pool));
+ dir, pathrev->rev, DIRENT_FIELDS, pool));
for (hi = apr_hash_first(pool, tmpdirents); hi; hi = apr_hash_next(hi))
{
- const char *path, *URL, *fs_path;
+ const char *path, *fs_path;
svn_lock_t *lock;
svn_client_info2_t *info;
const char *name = svn__apr_hash_index_key(hi);
svn_dirent_t *the_ent = svn__apr_hash_index_val(hi);
+ svn_client__pathrev_t *child_pathrev;
svn_pool_clear(subpool);
@@ -144,14 +139,13 @@ push_dir_info(svn_ra_session_t *ra_session,
SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
path = svn_relpath_join(dir, name, subpool);
- URL = svn_path_url_add_component2(session_URL, name, subpool);
- fs_path = svn_fspath__canonicalize(svn_uri__is_child(repos_root, URL,
- subpool), subpool);
+ child_pathrev = svn_client__pathrev_join_relpath(pathrev, name, subpool);
+ fs_path = svn_client__pathrev_fspath(child_pathrev, subpool);
- lock = apr_hash_get(locks, fs_path, APR_HASH_KEY_STRING);
+ lock = svn_hash_gets(locks, fs_path);
- SVN_ERR(build_info_from_dirent(&info, the_ent, lock, URL, rev,
- repos_UUID, repos_root, subpool));
+ SVN_ERR(build_info_from_dirent(&info, the_ent, lock, child_pathrev,
+ subpool));
if (depth >= svn_depth_immediates
|| (depth == svn_depth_files && the_ent->kind == svn_node_file))
@@ -161,8 +155,7 @@ push_dir_info(svn_ra_session_t *ra_session,
if (depth == svn_depth_infinity && the_ent->kind == svn_node_dir)
{
- SVN_ERR(push_dir_info(ra_session, URL, path,
- rev, repos_UUID, repos_root,
+ SVN_ERR(push_dir_info(ra_session, child_pathrev, path,
receiver, receiver_baton,
depth, ctx, locks, subpool));
}
@@ -186,20 +179,17 @@ same_resource_in_head(svn_boolean_t *same_p,
apr_pool_t *pool)
{
svn_error_t *err;
- svn_opt_revision_t start_rev, end_rev, peg_rev;
- svn_opt_revision_t *ignored_rev;
- const char *head_url, *ignored_url;
+ svn_opt_revision_t start_rev, peg_rev;
+ const char *head_url;
start_rev.kind = svn_opt_revision_head;
peg_rev.kind = svn_opt_revision_number;
peg_rev.value.number = rev;
- end_rev.kind = svn_opt_revision_unspecified;
- err = svn_client__repos_locations(&head_url, &ignored_rev,
- &ignored_url, &ignored_rev,
+ err = svn_client__repos_locations(&head_url, NULL, NULL, NULL,
ra_session,
url, &peg_rev,
- &start_rev, &end_rev,
+ &start_rev, NULL,
ctx, pool);
if (err &&
((err->apr_err == SVN_ERR_CLIENT_UNRELATED_RESOURCES) ||
@@ -271,15 +261,11 @@ svn_client_info3(const char *abspath_or_url,
svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
- svn_ra_session_t *ra_session, *parent_ra_session;
- svn_revnum_t rev;
- const char *url;
- svn_node_kind_t url_kind;
- const char *repos_root_URL, *repos_UUID;
+ svn_ra_session_t *ra_session;
+ svn_client__pathrev_t *pathrev;
svn_lock_t *lock;
svn_boolean_t related;
- apr_hash_t *parent_ents;
- const char *parent_url, *base_name;
+ const char *base_name;
svn_dirent_t *the_ent;
svn_client_info2_t *info;
svn_error_t *err;
@@ -294,6 +280,7 @@ svn_client_info3(const char *abspath_or_url,
{
/* Do all digging in the working copy. */
wc_info_receiver_baton_t b;
+
b.client_receiver_func = receiver;
b.client_receiver_baton = receiver_baton;
return svn_error_trace(
@@ -308,74 +295,20 @@ svn_client_info3(const char *abspath_or_url,
/* Trace rename history (starting at path_or_url@peg_revision) and
return RA session to the possibly-renamed URL as it exists in REVISION.
The ra_session returned will be anchored on this "final" URL. */
- SVN_ERR(svn_client__ra_session_from_path(&ra_session, &rev,
- &url, abspath_or_url, NULL,
- peg_revision,
- revision, ctx, pool));
-
- SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root_URL, pool));
- SVN_ERR(svn_ra_get_uuid2(ra_session, &repos_UUID, pool));
+ SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &pathrev,
+ abspath_or_url, NULL, peg_revision,
+ revision, ctx, pool));
- svn_uri_split(&parent_url, &base_name, url, pool);
+ svn_uri_split(NULL, &base_name, pathrev->url, pool);
/* Get the dirent for the URL itself. */
- err = svn_ra_stat(ra_session, "", rev, &the_ent, pool);
-
- /* svn_ra_stat() will work against old versions of mod_dav_svn, but
- not old versions of svnserve. In the case of a pre-1.2 svnserve,
- catch the specific error it throws:*/
- if (err && err->apr_err == SVN_ERR_RA_NOT_IMPLEMENTED)
- {
- /* Fall back to pre-1.2 strategy for fetching dirent's URL. */
- svn_error_clear(err);
-
- if (strcmp(url, repos_root_URL) == 0)
- {
- /* In this universe, there's simply no way to fetch
- information about the repository's root directory!
- If we're recursing, degrade gracefully: rather than
- throw an error, return no information about the
- repos root. */
- if (depth > svn_depth_empty)
- goto pre_1_2_recurse;
-
- /* Otherwise, we really are stuck. Better tell the user
- what's going on. */
- return svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
- _("Server does not support retrieving "
- "information about the repository root"));
- }
-
- SVN_ERR(svn_ra_check_path(ra_session, "", rev, &url_kind, pool));
- if (url_kind == svn_node_none)
- return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
- _("URL '%s' non-existent in revision %ld"),
- url, rev);
-
- /* Open a new RA session to the item's parent. */
- SVN_ERR(svn_client__open_ra_session_internal(&parent_ra_session, NULL,
- parent_url, NULL,
- NULL, FALSE, TRUE,
- ctx, pool));
-
- /* Get all parent's entries, and find the item's dirent in the hash. */
- SVN_ERR(svn_ra_get_dir2(parent_ra_session, &parent_ents, NULL, NULL,
- "", rev, DIRENT_FIELDS, pool));
- the_ent = apr_hash_get(parent_ents, base_name, APR_HASH_KEY_STRING);
- if (the_ent == NULL)
- return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
- _("URL '%s' non-existent in revision %ld"),
- url, rev);
- }
- else if (err)
- {
- return svn_error_trace(err);
- }
+ SVN_ERR(svn_client__ra_stat_compatible(ra_session, pathrev->rev, &the_ent,
+ DIRENT_FIELDS, ctx, pool));
if (! the_ent)
return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
_("URL '%s' non-existent in revision %ld"),
- url, rev);
+ pathrev->url, pathrev->rev);
/* Check if the URL exists in HEAD and refers to the same resource.
In this case, we check the repository for a lock on this URL.
@@ -385,7 +318,8 @@ svn_client_info3(const char *abspath_or_url,
### check in a loop which only terminates if the HEAD revision is the same
### before and after this check. That could, however, lead to a
### starvation situation instead. */
- SVN_ERR(same_resource_in_head(&related, url, rev, ra_session, ctx, pool));
+ SVN_ERR(same_resource_in_head(&related, pathrev->url, pathrev->rev,
+ ra_session, ctx, pool));
if (related)
{
err = svn_ra_get_lock(ra_session, &lock, "", pool);
@@ -405,8 +339,7 @@ svn_client_info3(const char *abspath_or_url,
lock = NULL;
/* Push the URL's dirent (and lock) at the callback.*/
- SVN_ERR(build_info_from_dirent(&info, the_ent, lock, url, rev,
- repos_UUID, repos_root_URL, pool));
+ SVN_ERR(build_info_from_dirent(&info, the_ent, lock, pathrev, pool));
SVN_ERR(receiver(receiver_baton, base_name, info, pool));
/* Possibly recurse, using the original RA session. */
@@ -414,7 +347,6 @@ svn_client_info3(const char *abspath_or_url,
{
apr_hash_t *locks;
-pre_1_2_recurse:
if (peg_revision->kind == svn_opt_revision_head)
{
err = svn_ra_get_locks2(ra_session, &locks, "", depth,
@@ -434,8 +366,7 @@ pre_1_2_recurse:
else
locks = apr_hash_make(pool); /* use an empty hash */
- SVN_ERR(push_dir_info(ra_session, url, "", rev,
- repos_UUID, repos_root_URL,
+ SVN_ERR(push_dir_info(ra_session, pathrev, "",
receiver, receiver_baton,
depth, ctx, locks, pool));
}
@@ -451,8 +382,8 @@ svn_client_get_wc_root(const char **wcroot_abspath,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- return svn_wc__get_wc_root(wcroot_abspath, ctx->wc_ctx, local_abspath,
- result_pool, scratch_pool);
+ return svn_wc__get_wcroot(wcroot_abspath, ctx->wc_ctx, local_abspath,
+ result_pool, scratch_pool);
}
diff --git a/subversion/libsvn_client/iprops.c b/subversion/libsvn_client/iprops.c
new file mode 100644
index 0000000..653ce8c
--- /dev/null
+++ b/subversion/libsvn_client/iprops.c
@@ -0,0 +1,270 @@
+/*
+ * iprops.c: wrappers around wc inherited property functionality
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+/* ==================================================================== */
+
+
+
+/*** Includes. ***/
+
+#include "svn_error.h"
+#include "svn_hash.h"
+#include "svn_pools.h"
+#include "svn_wc.h"
+#include "svn_ra.h"
+#include "svn_props.h"
+#include "svn_path.h"
+
+#include "client.h"
+#include "svn_private_config.h"
+
+#include "private/svn_wc_private.h"
+
+
+/*** Code. ***/
+
+/* Determine if LOCAL_ABSPATH needs an inherited property cache. If it does,
+ then set *NEEDS_CACHE to TRUE, set it to FALSE otherwise. All other args
+ are as per svn_client__get_inheritable_props(). */
+static svn_error_t *
+need_to_cache_iprops(svn_boolean_t *needs_cache,
+ const char *local_abspath,
+ svn_ra_session_t *ra_session,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
+{
+ svn_boolean_t is_wc_root;
+ svn_boolean_t is_switched;
+ svn_error_t *err;
+
+ err = svn_wc_check_root(&is_wc_root, &is_switched, NULL,
+ ctx->wc_ctx, local_abspath,
+ scratch_pool);
+
+ /* LOCAL_ABSPATH doesn't need a cache if it doesn't exist. */
+ if (err)
+ {
+ if (err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ is_wc_root = FALSE;
+ is_switched = FALSE;
+ }
+ else
+ {
+ return svn_error_trace(err);
+ }
+ }
+
+ /* Starting assumption. */
+ *needs_cache = FALSE;
+
+ if (is_wc_root || is_switched)
+ {
+ const char *session_url;
+ const char *session_root_url;
+
+ /* Looks likely that we need an inherited properties cache...Unless
+ LOCAL_ABSPATH is a WC root that points to the repos root. Then it
+ doesn't need a cache because it has nowhere to inherit from. Check
+ for that case. */
+ SVN_ERR(svn_ra_get_session_url(ra_session, &session_url, scratch_pool));
+ SVN_ERR(svn_ra_get_repos_root2(ra_session, &session_root_url,
+ scratch_pool));
+
+ if (strcmp(session_root_url, session_url) != 0)
+ *needs_cache = TRUE;
+ }
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_client__iprop_relpaths_to_urls(apr_array_header_t *inherited_props,
+ const char *repos_root_url,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ int i;
+
+ for (i = 0; i < inherited_props->nelts; i++)
+ {
+ svn_prop_inherited_item_t *elt =
+ APR_ARRAY_IDX(inherited_props, i, svn_prop_inherited_item_t *);
+
+ /* Convert repos root relpaths to full URLs. */
+ if (! (svn_path_is_url(elt->path_or_url)
+ || svn_dirent_is_absolute(elt->path_or_url)))
+ {
+ elt->path_or_url = svn_path_url_add_component2(repos_root_url,
+ elt->path_or_url,
+ result_pool);
+ }
+ }
+ return SVN_NO_ERROR;
+}
+
+/* The real implementation of svn_client__get_inheritable_props */
+static svn_error_t *
+get_inheritable_props(apr_hash_t **wcroot_iprops,
+ const char *local_abspath,
+ svn_revnum_t revision,
+ svn_depth_t depth,
+ svn_ra_session_t *ra_session,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ apr_hash_t *iprop_paths;
+ apr_hash_index_t *hi;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ apr_pool_t *session_pool = NULL;
+ *wcroot_iprops = apr_hash_make(result_pool);
+
+ SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(revision));
+
+ /* If we don't have a base revision for LOCAL_ABSPATH then it can't
+ possibly be a working copy root, nor can it contain any WC roots
+ in the form of switched subtrees. So there is nothing to cache. */
+
+ SVN_ERR(svn_wc__get_cached_iprop_children(&iprop_paths, depth,
+ ctx->wc_ctx, local_abspath,
+ scratch_pool, iterpool));
+
+ /* If we are in the midst of a checkout or an update that is bringing in
+ an external, then svn_wc__get_cached_iprop_children won't return
+ LOCAL_ABSPATH in IPROPS_PATHS because the former has no cached iprops
+ yet. So make sure LOCAL_ABSPATH is present if it's a WC root. */
+ if (!svn_hash_gets(iprop_paths, local_abspath))
+ {
+ svn_boolean_t needs_cached_iprops;
+
+ SVN_ERR(need_to_cache_iprops(&needs_cached_iprops, local_abspath,
+ ra_session, ctx, iterpool));
+ if (needs_cached_iprops)
+ {
+ const char *target_abspath = apr_pstrdup(scratch_pool,
+ local_abspath);
+
+ /* As value we set TARGET_ABSPATH, but any string besides ""
+ would do */
+ svn_hash_sets(iprop_paths, target_abspath, target_abspath);
+ }
+ }
+
+ for (hi = apr_hash_first(scratch_pool, iprop_paths);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ const char *child_abspath = svn__apr_hash_index_key(hi);
+ const char *child_repos_relpath = svn__apr_hash_index_val(hi);
+ const char *url;
+ apr_array_header_t *inherited_props;
+ svn_error_t *err;
+
+ svn_pool_clear(iterpool);
+
+ if (*child_repos_relpath == '\0')
+ {
+ /* A repository root doesn't have inherited properties */
+ continue;
+ }
+
+ SVN_ERR(svn_wc__node_get_url(&url, ctx->wc_ctx, child_abspath,
+ iterpool, iterpool));
+ if (ra_session)
+ SVN_ERR(svn_ra_reparent(ra_session, url, scratch_pool));
+ else
+ {
+ if (! session_pool)
+ session_pool = svn_pool_create(scratch_pool);
+
+ SVN_ERR(svn_client_open_ra_session2(&ra_session, url, NULL,
+ ctx,
+ session_pool, iterpool));
+ }
+
+ err = svn_ra_get_inherited_props(ra_session, &inherited_props,
+ "", revision,
+ result_pool, iterpool);
+
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_FS_NOT_FOUND)
+ return svn_error_trace(err);
+
+ svn_error_clear(err);
+ continue;
+ }
+
+ svn_hash_sets(*wcroot_iprops,
+ apr_pstrdup(result_pool, child_abspath),
+ inherited_props);
+ }
+
+
+ svn_pool_destroy(iterpool);
+ if (session_pool)
+ svn_pool_destroy(session_pool);
+
+ return SVN_NO_ERROR;
+
+}
+
+svn_error_t *
+svn_client__get_inheritable_props(apr_hash_t **wcroot_iprops,
+ const char *local_abspath,
+ svn_revnum_t revision,
+ svn_depth_t depth,
+ svn_ra_session_t *ra_session,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ const char *old_session_url;
+ svn_error_t *err;
+
+ if (!SVN_IS_VALID_REVNUM(revision))
+ return SVN_NO_ERROR;
+
+ if (ra_session)
+ SVN_ERR(svn_ra_get_session_url(ra_session, &old_session_url, scratch_pool));
+
+ /* We just wrap a simple helper function, as it is to easy to leave the ra
+ session rooted at some wrong path without a wrapper like this.
+
+ During development we had problems where some now deleted switched path
+ made the update try to update to that url instead of the intended url
+ */
+
+ err = get_inheritable_props(wcroot_iprops, local_abspath, revision, depth,
+ ra_session, ctx, result_pool, scratch_pool);
+
+ if (ra_session)
+ {
+ err = svn_error_compose_create(
+ err,
+ svn_ra_reparent(ra_session, old_session_url, scratch_pool));
+ }
+ return svn_error_trace(err);
+}
diff --git a/subversion/libsvn_client/list.c b/subversion/libsvn_client/list.c
index 15250eb..4093893 100644
--- a/subversion/libsvn_client/list.c
+++ b/subversion/libsvn_client/list.c
@@ -23,6 +23,7 @@
#include "svn_client.h"
#include "svn_dirent_uri.h"
+#include "svn_hash.h"
#include "svn_path.h"
#include "svn_pools.h"
#include "svn_time.h"
@@ -32,8 +33,37 @@
#include "client.h"
#include "private/svn_fspath.h"
+#include "private/svn_ra_private.h"
+#include "private/svn_wc_private.h"
#include "svn_private_config.h"
+/* Prototypes for referencing before declaration */
+static svn_error_t *
+list_externals(apr_hash_t *externals,
+ svn_depth_t depth,
+ apr_uint32_t dirent_fields,
+ svn_boolean_t fetch_locks,
+ svn_client_list_func2_t list_func,
+ void *baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool);
+
+static svn_error_t *
+list_internal(const char *path_or_url,
+ const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *revision,
+ svn_depth_t depth,
+ apr_uint32_t dirent_fields,
+ svn_boolean_t fetch_locks,
+ svn_boolean_t include_externals,
+ const char *external_parent_url,
+ const char *external_target,
+ svn_client_list_func2_t list_func,
+ void *baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool);
+
+
/* Get the directory entries of DIR at REV (relative to the root of
RA_SESSION), getting at least the fields specified by DIRENT_FIELDS.
Use the cancellation function/baton of CTX to check for cancellation.
@@ -46,7 +76,15 @@
LOCKS, if non-NULL, is a hash mapping const char * paths to svn_lock_t
objects and FS_PATH is the absolute filesystem path of the RA session.
- Use POOL for temporary allocations.
+ Use SCRATCH_POOL for temporary allocations.
+
+ If the caller passes EXTERNALS as non-NULL, populate the EXTERNALS
+ hash table whose keys are URLs of the directory which has externals
+ definitions, and whose values are the externals description text.
+ Allocate the hash's keys and values in RESULT_POOL.
+
+ EXTERNAL_PARENT_URL and EXTERNAL_TARGET are set when external items
+ are listed, otherwise both are set to NULL by the caller.
*/
static svn_error_t *
get_dir_contents(apr_uint32_t dirent_fields,
@@ -57,23 +95,31 @@ get_dir_contents(apr_uint32_t dirent_fields,
const char *fs_path,
svn_depth_t depth,
svn_client_ctx_t *ctx,
- svn_client_list_func_t list_func,
+ apr_hash_t *externals,
+ const char *external_parent_url,
+ const char *external_target,
+ svn_client_list_func2_t list_func,
void *baton,
- apr_pool_t *pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
apr_hash_t *tmpdirents;
- apr_pool_t *iterpool = svn_pool_create(pool);
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
apr_array_header_t *array;
svn_error_t *err;
+ apr_hash_t *prop_hash = NULL;
+ const svn_string_t *prop_val = NULL;
int i;
if (depth == svn_depth_empty)
return SVN_NO_ERROR;
- /* Get the directory's entries, but not its props. Ignore any
- not-authorized errors. */
- err = svn_ra_get_dir2(ra_session, &tmpdirents, NULL, NULL,
- dir, rev, dirent_fields, pool);
+ /* Get the directory's entries. If externals hash is non-NULL, get its
+ properties also. Ignore any not-authorized errors. */
+ err = svn_ra_get_dir2(ra_session, &tmpdirents, NULL,
+ externals ? &prop_hash : NULL,
+ dir, rev, dirent_fields, scratch_pool);
+
if (err && ((err->apr_err == SVN_ERR_RA_NOT_AUTHORIZED) ||
(err->apr_err == SVN_ERR_RA_DAV_FORBIDDEN)))
{
@@ -82,16 +128,31 @@ get_dir_contents(apr_uint32_t dirent_fields,
}
SVN_ERR(err);
+ /* Filter out svn:externals from all properties hash. */
+ if (prop_hash)
+ prop_val = svn_hash_gets(prop_hash, SVN_PROP_EXTERNALS);
+ if (prop_val)
+ {
+ const char *url;
+
+ SVN_ERR(svn_ra_get_session_url(ra_session, &url, scratch_pool));
+
+ svn_hash_sets(externals,
+ svn_path_url_add_component2(url, dir, result_pool),
+ svn_string_dup(prop_val, result_pool));
+ }
+
if (ctx->cancel_func)
SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
/* Sort the hash, so we can call the callback in a "deterministic" order. */
- array = svn_sort__hash(tmpdirents, svn_sort_compare_items_lexically, pool);
+ array = svn_sort__hash(tmpdirents, svn_sort_compare_items_lexically,
+ scratch_pool);
for (i = 0; i < array->nelts; ++i)
{
svn_sort__item_t *item = &APR_ARRAY_IDX(array, i, svn_sort__item_t);
const char *path;
- svn_dirent_t *the_ent = apr_hash_get(tmpdirents, item->key, item->klen);
+ svn_dirent_t *the_ent = item->value;
svn_lock_t *lock;
svn_pool_clear(iterpool);
@@ -101,7 +162,7 @@ get_dir_contents(apr_uint32_t dirent_fields,
if (locks)
{
const char *abs_path = svn_fspath__join(fs_path, path, iterpool);
- lock = apr_hash_get(locks, abs_path, APR_HASH_KEY_STRING);
+ lock = svn_hash_gets(locks, abs_path);
}
else
lock = NULL;
@@ -109,91 +170,83 @@ get_dir_contents(apr_uint32_t dirent_fields,
if (the_ent->kind == svn_node_file
|| depth == svn_depth_immediates
|| depth == svn_depth_infinity)
- SVN_ERR(list_func(baton, path, the_ent, lock, fs_path, iterpool));
+ SVN_ERR(list_func(baton, path, the_ent, lock, fs_path,
+ external_parent_url, external_target, iterpool));
+ /* If externals is non-NULL, populate the externals hash table
+ recursively for all directory entries. */
if (depth == svn_depth_infinity && the_ent->kind == svn_node_dir)
SVN_ERR(get_dir_contents(dirent_fields, path, rev,
ra_session, locks, fs_path, depth, ctx,
- list_func, baton, iterpool));
+ externals, external_parent_url,
+ external_target, list_func, baton,
+ result_pool, iterpool));
}
svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
+/* Like svn_ra_stat() but with a compatibility hack for pre-1.2 svnserve. */
+/* ### Maybe we should move this behavior into the svn_ra_stat wrapper? */
svn_error_t *
-svn_client_list2(const char *path_or_url,
- const svn_opt_revision_t *peg_revision,
- const svn_opt_revision_t *revision,
- svn_depth_t depth,
- apr_uint32_t dirent_fields,
- svn_boolean_t fetch_locks,
- svn_client_list_func_t list_func,
- void *baton,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool)
+svn_client__ra_stat_compatible(svn_ra_session_t *ra_session,
+ svn_revnum_t rev,
+ svn_dirent_t **dirent_p,
+ apr_uint32_t dirent_fields,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
{
- svn_ra_session_t *ra_session;
- svn_revnum_t rev;
- svn_dirent_t *dirent;
- const char *url;
- const char *repos_root;
- const char *fs_path;
svn_error_t *err;
- apr_hash_t *locks;
-
- /* We use the kind field to determine if we should recurse, so we
- always need it. */
- dirent_fields |= SVN_DIRENT_KIND;
-
- /* Get an RA plugin for this filesystem object. */
- SVN_ERR(svn_client__ra_session_from_path(&ra_session, &rev,
- &url, path_or_url, NULL,
- peg_revision,
- revision, ctx, pool));
-
- SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root, pool));
- SVN_ERR(svn_client__path_relative_to_root(&fs_path, ctx->wc_ctx, url,
- repos_root, TRUE, ra_session,
- pool, pool));
-
- err = svn_ra_stat(ra_session, "", rev, &dirent, pool);
+ err = svn_ra_stat(ra_session, "", rev, dirent_p, pool);
/* svnserve before 1.2 doesn't support the above, so fall back on
a less efficient method. */
if (err && err->apr_err == SVN_ERR_RA_NOT_IMPLEMENTED)
{
+ const char *repos_root_url;
+ const char *session_url;
svn_node_kind_t kind;
+ svn_dirent_t *dirent;
svn_error_clear(err);
+ SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root_url, pool));
+ SVN_ERR(svn_ra_get_session_url(ra_session, &session_url, pool));
+
SVN_ERR(svn_ra_check_path(ra_session, "", rev, &kind, pool));
if (kind != svn_node_none)
{
- if (strcmp(url, repos_root) != 0)
+ if (strcmp(session_url, repos_root_url) != 0)
{
svn_ra_session_t *parent_session;
apr_hash_t *parent_ents;
const char *parent_url, *base_name;
+ apr_pool_t *subpool = svn_pool_create(pool);
/* Open another session to the path's parent. This server
doesn't support svn_ra_reparent anyway, so don't try it. */
- svn_uri_split(&parent_url, &base_name, url, pool);
+ svn_uri_split(&parent_url, &base_name, session_url, subpool);
- SVN_ERR(svn_client__open_ra_session_internal(&parent_session,
- NULL, parent_url,
- NULL, NULL, FALSE,
- TRUE, ctx, pool));
+ SVN_ERR(svn_client_open_ra_session2(&parent_session, parent_url,
+ NULL, ctx,
+ subpool, subpool));
/* Get all parent's entries, no props. */
SVN_ERR(svn_ra_get_dir2(parent_session, &parent_ents, NULL,
- NULL, "", rev, dirent_fields, pool));
+ NULL, "", rev, dirent_fields, subpool));
/* Get the relevant entry. */
- dirent = apr_hash_get(parent_ents, base_name,
- APR_HASH_KEY_STRING);
+ dirent = svn_hash_gets(parent_ents, base_name);
+
+ if (dirent)
+ *dirent_p = svn_dirent_dup(dirent, pool);
+ else
+ *dirent_p = NULL;
+
+ svn_pool_destroy(subpool); /* Close RA session */
}
else
{
@@ -203,7 +256,7 @@ svn_client_list2(const char *path_or_url,
be rev. */
dirent = apr_palloc(pool, sizeof(*dirent));
dirent->kind = kind;
- dirent->size = 0;
+ dirent->size = SVN_INVALID_FILESIZE;
if (dirent_fields & SVN_DIRENT_HAS_PROPS)
{
apr_hash_t *props;
@@ -220,30 +273,108 @@ svn_client_list2(const char *path_or_url,
SVN_ERR(svn_ra_rev_proplist(ra_session, rev, &props,
pool));
- val = apr_hash_get(props, SVN_PROP_REVISION_DATE,
- APR_HASH_KEY_STRING);
+ val = svn_hash_gets(props, SVN_PROP_REVISION_DATE);
if (val)
SVN_ERR(svn_time_from_cstring(&dirent->time, val->data,
pool));
else
dirent->time = 0;
- val = apr_hash_get(props, SVN_PROP_REVISION_AUTHOR,
- APR_HASH_KEY_STRING);
+ val = svn_hash_gets(props, SVN_PROP_REVISION_AUTHOR);
dirent->last_author = val ? val->data : NULL;
}
+
+ *dirent_p = dirent;
}
}
else
- dirent = NULL;
+ *dirent_p = NULL;
}
- else if (err)
- return svn_error_trace(err);
+ else
+ SVN_ERR(err);
+
+ return SVN_NO_ERROR;
+}
+
+/* List the file/directory entries for PATH_OR_URL at REVISION.
+ The actual node revision selected is determined by the path as
+ it exists in PEG_REVISION.
+
+ If DEPTH is svn_depth_infinity, then list all file and directory entries
+ recursively. Else if DEPTH is svn_depth_files, list all files under
+ PATH_OR_URL (if any), but not subdirectories. Else if DEPTH is
+ svn_depth_immediates, list all files and include immediate
+ subdirectories (at svn_depth_empty). Else if DEPTH is
+ svn_depth_empty, just list PATH_OR_URL with none of its entries.
+
+ DIRENT_FIELDS controls which fields in the svn_dirent_t's are
+ filled in. To have them totally filled in use SVN_DIRENT_ALL,
+ otherwise simply bitwise OR together the combination of SVN_DIRENT_*
+ fields you care about.
+
+ If FETCH_LOCKS is TRUE, include locks when reporting directory entries.
+
+ If INCLUDE_EXTERNALS is TRUE, also list all external items
+ reached by recursion. DEPTH value passed to the original list target
+ applies for the externals also. EXTERNAL_PARENT_URL is url of the
+ directory which has the externals definitions. EXTERNAL_TARGET is the
+ target subdirectory of externals definitions.
+
+ Report directory entries by invoking LIST_FUNC/BATON.
+ Pass EXTERNAL_PARENT_URL and EXTERNAL_TARGET to LIST_FUNC when external
+ items are listed, otherwise both are set to NULL.
+
+ Use authentication baton cached in CTX to authenticate against the
+ repository.
+ Use POOL for all allocations.
+*/
+static svn_error_t *
+list_internal(const char *path_or_url,
+ const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *revision,
+ svn_depth_t depth,
+ apr_uint32_t dirent_fields,
+ svn_boolean_t fetch_locks,
+ svn_boolean_t include_externals,
+ const char *external_parent_url,
+ const char *external_target,
+ svn_client_list_func2_t list_func,
+ void *baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ svn_ra_session_t *ra_session;
+ svn_client__pathrev_t *loc;
+ svn_dirent_t *dirent;
+ const char *fs_path;
+ svn_error_t *err;
+ apr_hash_t *locks;
+ apr_hash_t *externals;
+
+ if (include_externals)
+ externals = apr_hash_make(pool);
+ else
+ externals = NULL;
+
+ /* We use the kind field to determine if we should recurse, so we
+ always need it. */
+ dirent_fields |= SVN_DIRENT_KIND;
+
+ /* Get an RA plugin for this filesystem object. */
+ SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &loc,
+ path_or_url, NULL,
+ peg_revision,
+ revision, ctx, pool));
+
+ fs_path = svn_client__pathrev_fspath(loc, pool);
+
+ SVN_ERR(svn_client__ra_stat_compatible(ra_session, loc->rev, &dirent,
+ dirent_fields, ctx, pool));
if (! dirent)
return svn_error_createf(SVN_ERR_FS_NOT_FOUND, NULL,
_("URL '%s' non-existent in revision %ld"),
- url, rev);
+ loc->url, loc->rev);
/* Maybe get all locks under url. */
if (fetch_locks)
@@ -265,16 +396,184 @@ svn_client_list2(const char *path_or_url,
/* Report the dirent for the target. */
SVN_ERR(list_func(baton, "", dirent, locks
- ? (apr_hash_get(locks, fs_path,
- APR_HASH_KEY_STRING))
- : NULL, fs_path, pool));
+ ? (svn_hash_gets(locks, fs_path))
+ : NULL, fs_path, external_parent_url,
+ external_target, pool));
if (dirent->kind == svn_node_dir
&& (depth == svn_depth_files
|| depth == svn_depth_immediates
|| depth == svn_depth_infinity))
- SVN_ERR(get_dir_contents(dirent_fields, "", rev, ra_session, locks,
- fs_path, depth, ctx, list_func, baton, pool));
+ SVN_ERR(get_dir_contents(dirent_fields, "", loc->rev, ra_session, locks,
+ fs_path, depth, ctx, externals,
+ external_parent_url, external_target, list_func,
+ baton, pool, pool));
+
+ /* We handle externals after listing entries under path_or_url, so that
+ handling external items (and any errors therefrom) doesn't delay
+ the primary operation. */
+ if (include_externals && apr_hash_count(externals))
+ {
+ /* The 'externals' hash populated by get_dir_contents() is processed
+ here. */
+ SVN_ERR(list_externals(externals, depth, dirent_fields,
+ fetch_locks, list_func, baton,
+ ctx, pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+wrap_list_error(const svn_client_ctx_t *ctx,
+ const char *target_abspath,
+ svn_error_t *err,
+ apr_pool_t *scratch_pool)
+{
+ if (err && err->apr_err != SVN_ERR_CANCELLED)
+ {
+ if (ctx->notify_func2)
+ {
+ svn_wc_notify_t *notifier = svn_wc_create_notify(
+ target_abspath,
+ svn_wc_notify_failed_external,
+ scratch_pool);
+ notifier->err = err;
+ ctx->notify_func2(ctx->notify_baton2, notifier, scratch_pool);
+ }
+ svn_error_clear(err);
+ return SVN_NO_ERROR;
+ }
+
+ return err;
+}
+
+
+/* Walk through all the external items and list them. */
+static svn_error_t *
+list_external_items(apr_array_header_t *external_items,
+ const char *externals_parent_url,
+ svn_depth_t depth,
+ apr_uint32_t dirent_fields,
+ svn_boolean_t fetch_locks,
+ svn_client_list_func2_t list_func,
+ void *baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
+{
+ const char *externals_parent_repos_root_url;
+ apr_pool_t *iterpool;
+ int i;
+
+ SVN_ERR(svn_client_get_repos_root(&externals_parent_repos_root_url,
+ NULL /* uuid */,
+ externals_parent_url, ctx,
+ scratch_pool, scratch_pool));
+
+ iterpool = svn_pool_create(scratch_pool);
+
+ for (i = 0; i < external_items->nelts; i++)
+ {
+ const char *resolved_url;
+
+ svn_wc_external_item2_t *item =
+ APR_ARRAY_IDX(external_items, i, svn_wc_external_item2_t *);
+
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(svn_wc__resolve_relative_external_url(
+ &resolved_url,
+ item,
+ externals_parent_repos_root_url,
+ externals_parent_url,
+ iterpool, iterpool));
+
+ /* List the external */
+ SVN_ERR(wrap_list_error(ctx, item->target_dir,
+ list_internal(resolved_url,
+ &item->peg_revision,
+ &item->revision,
+ depth, dirent_fields,
+ fetch_locks,
+ TRUE,
+ externals_parent_url,
+ item->target_dir,
+ list_func, baton, ctx,
+ iterpool),
+ iterpool));
+
+ }
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+/* List external items defined on each external in EXTERNALS, a const char *
+ externals_parent_url(url of the directory which has the externals
+ definitions) of all externals mapping to the svn_string_t * externals_desc
+ (externals description text). All other options are the same as those
+ passed to svn_client_list(). */
+static svn_error_t *
+list_externals(apr_hash_t *externals,
+ svn_depth_t depth,
+ apr_uint32_t dirent_fields,
+ svn_boolean_t fetch_locks,
+ svn_client_list_func2_t list_func,
+ void *baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
+{
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ apr_hash_index_t *hi;
+
+ for (hi = apr_hash_first(scratch_pool, externals);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ const char *externals_parent_url = svn__apr_hash_index_key(hi);
+ svn_string_t *externals_desc = svn__apr_hash_index_val(hi);
+ apr_array_header_t *external_items;
+
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(svn_wc_parse_externals_description3(&external_items,
+ externals_parent_url,
+ externals_desc->data,
+ FALSE, iterpool));
+
+ if (! external_items->nelts)
+ continue;
+
+ SVN_ERR(list_external_items(external_items, externals_parent_url, depth,
+ dirent_fields, fetch_locks, list_func,
+ baton, ctx, iterpool));
+
+ }
+ svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
+
+
+svn_error_t *
+svn_client_list3(const char *path_or_url,
+ const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *revision,
+ svn_depth_t depth,
+ apr_uint32_t dirent_fields,
+ svn_boolean_t fetch_locks,
+ svn_boolean_t include_externals,
+ svn_client_list_func2_t list_func,
+ void *baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+
+ return svn_error_trace(list_internal(path_or_url, peg_revision,
+ revision,
+ depth, dirent_fields,
+ fetch_locks,
+ include_externals,
+ NULL, NULL, list_func,
+ baton, ctx, pool));
+}
diff --git a/subversion/libsvn_client/locking_commands.c b/subversion/libsvn_client/locking_commands.c
index 6ab2418..c768503 100644
--- a/subversion/libsvn_client/locking_commands.c
+++ b/subversion/libsvn_client/locking_commands.c
@@ -28,6 +28,7 @@
/*** Includes. ***/
#include "svn_client.h"
+#include "svn_hash.h"
#include "client.h"
#include "svn_dirent_uri.h"
#include "svn_path.h"
@@ -44,7 +45,7 @@
/* For use with store_locks_callback, below. */
struct lock_baton
{
- const char *base_path;
+ const char *base_dir_abspath;
apr_hash_t *urls_to_paths;
svn_client_ctx_t *ctx;
apr_pool_t *pool;
@@ -55,8 +56,8 @@ struct lock_baton
* BATON is a 'struct lock_baton *', PATH is the path being locked,
* and LOCK is the lock itself.
*
- * If BATON->base_path is not null, then this function either stores
- * the LOCK on REL_URL or removes any lock tokens from REL_URL
+ * If BATON->base_dir_abspath is not null, then this function either
+ * stores the LOCK on REL_URL or removes any lock tokens from REL_URL
* (depending on whether DO_LOCK is true or false respectively), but
* only if RA_ERR is null, or (in the unlock case) is something other
* than SVN_ERR_FS_LOCK_OWNER_MISMATCH.
@@ -86,20 +87,16 @@ store_locks_callback(void *baton,
notify->lock = lock;
notify->err = ra_err;
- if (lb->base_path)
+ if (lb->base_dir_abspath)
{
- char *path = apr_hash_get(lb->urls_to_paths, rel_url,
- APR_HASH_KEY_STRING);
+ char *path = svn_hash_gets(lb->urls_to_paths, rel_url);
const char *local_abspath;
- SVN_ERR(svn_dirent_get_absolute(&local_abspath,
- svn_dirent_join(lb->base_path,
- path, pool),
- pool));
+ local_abspath = svn_dirent_join(lb->base_dir_abspath, path, pool);
/* Notify a valid working copy path */
notify->path = local_abspath;
- notify->path_prefix = lb->base_path;
+ notify->path_prefix = lb->base_dir_abspath;
if (do_lock)
{
@@ -192,6 +189,14 @@ condense_targets(const char **common_parent,
return SVN_NO_ERROR;
}
+/* Lock info. Used in organize_lock_targets.
+ ### Maybe return this instead of the ugly hashes? */
+struct wc_lock_item_t
+{
+ svn_revnum_t revision;
+ const char *lock_token;
+};
+
/* Set *COMMON_PARENT_URL to the nearest common parent URL of all TARGETS.
* If TARGETS are local paths, then the entry for each path is examined
* and *COMMON_PARENT is set to the common parent URL for all the
@@ -228,7 +233,7 @@ organize_lock_targets(const char **common_parent_url,
const apr_array_header_t *targets,
svn_boolean_t do_lock,
svn_boolean_t force,
- svn_client_ctx_t *ctx,
+ svn_wc_context_t *wc_ctx,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
@@ -237,6 +242,7 @@ organize_lock_targets(const char **common_parent_url,
apr_hash_t *rel_targets_ret = apr_hash_make(result_pool);
apr_hash_t *rel_fs_paths = NULL;
apr_array_header_t *rel_targets;
+ apr_hash_t *wc_info = apr_hash_make(scratch_pool);
svn_boolean_t url_mode;
int i;
@@ -265,11 +271,11 @@ organize_lock_targets(const char **common_parent_url,
lock token string (if the caller is unlocking). */
for (i = 0; i < rel_targets->nelts; i++)
{
- apr_hash_set(rel_targets_ret,
- APR_ARRAY_IDX(rel_targets, i, const char *),
- APR_HASH_KEY_STRING,
- do_lock ? (const void *)invalid_revnum
- : (const void *)"");
+ svn_hash_sets(rel_targets_ret,
+ APR_ARRAY_IDX(rel_targets, i, const char *),
+ do_lock
+ ? (const void *)invalid_revnum
+ : (const void *)"");
}
}
else
@@ -292,20 +298,40 @@ organize_lock_targets(const char **common_parent_url,
sizeof(const char *));
for (i = 0; i < rel_targets->nelts; i++)
{
- const char *rel_target, *local_abspath, *target_url;
+ const char *rel_target;
+ const char *repos_relpath;
+ const char *repos_root_url;
+ const char *target_url;
+ struct wc_lock_item_t *wli;
+ const char *local_abspath;
+ svn_node_kind_t kind;
svn_pool_clear(iterpool);
rel_target = APR_ARRAY_IDX(rel_targets, i, const char *);
- local_abspath = svn_dirent_join(common_dirent, rel_target, iterpool);
- SVN_ERR(svn_wc__node_get_url(&target_url, ctx->wc_ctx, local_abspath,
- scratch_pool, iterpool));
- if (! target_url)
- return svn_error_createf(SVN_ERR_ENTRY_MISSING_URL, NULL,
- _("'%s' has no URL"),
+ local_abspath = svn_dirent_join(common_dirent, rel_target, scratch_pool);
+ wli = apr_pcalloc(scratch_pool, sizeof(*wli));
+
+ SVN_ERR(svn_wc__node_get_base(&kind, &wli->revision, &repos_relpath,
+ &repos_root_url, NULL,
+ &wli->lock_token,
+ wc_ctx, local_abspath,
+ FALSE /* ignore_enoent */,
+ FALSE /* show_hidden */,
+ result_pool, iterpool));
+
+ if (kind != svn_node_file)
+ return svn_error_createf(SVN_ERR_WC_NOT_FILE, NULL,
+ _("The node '%s' is not a file"),
svn_dirent_local_style(local_abspath,
iterpool));
+ svn_hash_sets(wc_info, local_abspath, wli);
+
+ target_url = svn_path_url_add_component2(repos_root_url,
+ repos_relpath,
+ scratch_pool);
+
APR_ARRAY_PUSH(target_urls, const char *) = target_url;
}
@@ -323,7 +349,8 @@ organize_lock_targets(const char **common_parent_url,
rel_fs_paths = apr_hash_make(result_pool);
for (i = 0; i < rel_targets->nelts; i++)
{
- const char *rel_target, *rel_url, *abs_path;
+ const char *rel_target, *rel_url;
+ const char *local_abspath;
svn_pool_clear(iterpool);
@@ -332,45 +359,58 @@ organize_lock_targets(const char **common_parent_url,
COMMON_DIRENT). */
rel_target = APR_ARRAY_IDX(rel_targets, i, const char *);
rel_url = APR_ARRAY_IDX(rel_urls, i, const char *);
- apr_hash_set(rel_fs_paths, rel_url, APR_HASH_KEY_STRING,
- apr_pstrdup(result_pool, rel_target));
+ svn_hash_sets(rel_fs_paths, rel_url,
+ apr_pstrdup(result_pool, rel_target));
/* Then, we map our REL_URL (again) to either the base
revision of the dirent target with which it is associated
(if our caller is locking) or to a (possible empty) lock
token string (if the caller is unlocking). */
- abs_path = svn_dirent_join(common_dirent, rel_target, iterpool);
+ local_abspath = svn_dirent_join(common_dirent, rel_target, iterpool);
if (do_lock) /* Lock. */
{
svn_revnum_t *revnum;
+ struct wc_lock_item_t *wli;
revnum = apr_palloc(result_pool, sizeof(* revnum));
- SVN_ERR(svn_wc__node_get_base_rev(revnum, ctx->wc_ctx,
- abs_path, result_pool));
- apr_hash_set(rel_targets_ret, rel_url,
- APR_HASH_KEY_STRING, revnum);
+
+ wli = svn_hash_gets(wc_info, local_abspath);
+
+ SVN_ERR_ASSERT(wli != NULL);
+
+ *revnum = wli->revision;
+
+ svn_hash_sets(rel_targets_ret, rel_url, revnum);
}
else /* Unlock. */
{
- const char *lock_token = NULL;
+ const char *lock_token;
+ struct wc_lock_item_t *wli;
/* If not forcing the unlock, get the lock token. */
if (! force)
{
- SVN_ERR(svn_wc__node_get_lock_info(&lock_token, NULL, NULL,
- NULL, ctx->wc_ctx,
- abs_path, result_pool,
- iterpool));
- if (! lock_token)
+ wli = svn_hash_gets(wc_info, local_abspath);
+
+ SVN_ERR_ASSERT(wli != NULL);
+
+ if (! wli->lock_token)
return svn_error_createf(
SVN_ERR_CLIENT_MISSING_LOCK_TOKEN, NULL,
_("'%s' is not locked in this working copy"),
- abs_path);
+ svn_dirent_local_style(local_abspath,
+ scratch_pool));
+
+ lock_token = wli->lock_token
+ ? apr_pstrdup(result_pool, wli->lock_token)
+ : NULL;
}
+ else
+ lock_token = NULL;
/* If breaking a lock, we shouldn't pass any lock token. */
- apr_hash_set(rel_targets_ret, rel_url, APR_HASH_KEY_STRING,
- lock_token ? lock_token : "");
+ svn_hash_sets(rel_targets_ret, rel_url,
+ lock_token ? lock_token : "");
}
}
@@ -409,8 +449,7 @@ fetch_tokens(svn_ra_session_t *ra_session, apr_hash_t *path_tokens,
(SVN_ERR_CLIENT_MISSING_LOCK_TOKEN, NULL,
_("'%s' is not locked"), path);
- apr_hash_set(path_tokens, path, APR_HASH_KEY_STRING,
- apr_pstrdup(pool, lock->token));
+ svn_hash_sets(path_tokens, path, apr_pstrdup(pool, lock->token));
}
svn_pool_destroy(iterpool);
@@ -446,17 +485,15 @@ svn_client_lock(const apr_array_header_t *targets,
SVN_ERR(organize_lock_targets(&common_parent_url, &base_dir, &path_revs,
&urls_to_paths, targets, TRUE, steal_lock,
- ctx, pool, pool));
+ ctx->wc_ctx, pool, pool));
/* Open an RA session to the common parent of TARGETS. */
if (base_dir)
SVN_ERR(svn_dirent_get_absolute(&base_dir_abspath, base_dir, pool));
- SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL,
- common_parent_url, base_dir,
- NULL, FALSE, FALSE,
- ctx, pool));
+ SVN_ERR(svn_client_open_ra_session2(&ra_session, common_parent_url,
+ base_dir_abspath, ctx, pool, pool));
- cb.base_path = base_dir;
+ cb.base_dir_abspath = base_dir_abspath;
cb.urls_to_paths = urls_to_paths;
cb.ctx = ctx;
cb.pool = pool;
@@ -486,15 +523,13 @@ svn_client_unlock(const apr_array_header_t *targets,
SVN_ERR(organize_lock_targets(&common_parent_url, &base_dir, &path_tokens,
&urls_to_paths, targets, FALSE, break_lock,
- ctx, pool, pool));
+ ctx->wc_ctx, pool, pool));
/* Open an RA session. */
if (base_dir)
SVN_ERR(svn_dirent_get_absolute(&base_dir_abspath, base_dir, pool));
- SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL,
- common_parent_url,
- base_dir_abspath, NULL, FALSE,
- FALSE, ctx, pool));
+ SVN_ERR(svn_client_open_ra_session2(&ra_session, common_parent_url,
+ base_dir_abspath, ctx, pool, pool));
/* If break_lock is not set, lock tokens are required by the server.
If the targets were all URLs, ensure that we provide lock tokens,
@@ -503,7 +538,7 @@ svn_client_unlock(const apr_array_header_t *targets,
if (! base_dir && !break_lock)
SVN_ERR(fetch_tokens(ra_session, path_tokens, pool));
- cb.base_path = base_dir;
+ cb.base_dir_abspath = base_dir_abspath;
cb.urls_to_paths = urls_to_paths;
cb.ctx = ctx;
cb.pool = pool;
diff --git a/subversion/libsvn_client/log.c b/subversion/libsvn_client/log.c
index db21c7d..9196155 100644
--- a/subversion/libsvn_client/log.c
+++ b/subversion/libsvn_client/log.c
@@ -32,6 +32,7 @@
#include "svn_compat.h"
#include "svn_error.h"
#include "svn_dirent_uri.h"
+#include "svn_hash.h"
#include "svn_path.h"
#include "svn_sorts.h"
#include "svn_props.h"
@@ -41,6 +42,7 @@
#include "svn_private_config.h"
#include "private/svn_wc_private.h"
+#include <assert.h>
/*** Getting misc. information ***/
@@ -90,37 +92,37 @@ copyfrom_info_receiver(svn_location_segment_t *segment,
}
svn_error_t *
-svn_client__get_copy_source(const char *path_or_url,
+svn_client__get_copy_source(const char **original_repos_relpath,
+ svn_revnum_t *original_revision,
+ const char *path_or_url,
const svn_opt_revision_t *revision,
- const char **copyfrom_path,
- svn_revnum_t *copyfrom_rev,
svn_client_ctx_t *ctx,
- apr_pool_t *pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
svn_error_t *err;
copyfrom_info_t copyfrom_info = { 0 };
- apr_pool_t *sesspool = svn_pool_create(pool);
+ apr_pool_t *sesspool = svn_pool_create(scratch_pool);
svn_ra_session_t *ra_session;
- svn_revnum_t at_rev;
- const char *at_url;
+ svn_client__pathrev_t *at_loc;
copyfrom_info.is_first = TRUE;
copyfrom_info.path = NULL;
copyfrom_info.rev = SVN_INVALID_REVNUM;
- copyfrom_info.pool = pool;
+ copyfrom_info.pool = result_pool;
- SVN_ERR(svn_client__ra_session_from_path(&ra_session, &at_rev, &at_url,
- path_or_url, NULL,
- revision, revision,
- ctx, sesspool));
+ SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &at_loc,
+ path_or_url, NULL,
+ revision, revision,
+ ctx, sesspool));
/* Find the copy source. Walk the location segments to find the revision
at which this node was created (copied or added). */
- err = svn_ra_get_location_segments(ra_session, "", at_rev, at_rev,
+ err = svn_ra_get_location_segments(ra_session, "", at_loc->rev, at_loc->rev,
SVN_INVALID_REVNUM,
copyfrom_info_receiver, &copyfrom_info,
- pool);
+ scratch_pool);
svn_pool_destroy(sesspool);
@@ -134,14 +136,14 @@ svn_client__get_copy_source(const char *path_or_url,
svn_error_clear(err);
err = SVN_NO_ERROR;
- *copyfrom_path = NULL;
- *copyfrom_rev = SVN_INVALID_REVNUM;
+ *original_repos_relpath = NULL;
+ *original_revision = SVN_INVALID_REVNUM;
}
return svn_error_trace(err);
}
- *copyfrom_path = copyfrom_info.path;
- *copyfrom_rev = copyfrom_info.rev;
+ *original_repos_relpath = copyfrom_info.path;
+ *original_revision = copyfrom_info.rev;
return SVN_NO_ERROR;
}
@@ -203,38 +205,36 @@ pre_15_receiver(void *baton, svn_log_entry_t *log_entry, apr_pool_t *pool)
}
if (rb->ra_session == NULL)
- SVN_ERR(svn_client_open_ra_session(&rb->ra_session,
- rb->ra_session_url,
- rb->ctx, rb->ra_session_pool));
+ SVN_ERR(svn_client_open_ra_session2(&rb->ra_session,
+ rb->ra_session_url, NULL,
+ rb->ctx, rb->ra_session_pool,
+ pool));
SVN_ERR(svn_ra_rev_prop(rb->ra_session, log_entry->revision,
name, &value, pool));
if (log_entry->revprops == NULL)
log_entry->revprops = apr_hash_make(pool);
- apr_hash_set(log_entry->revprops, (const void *)name,
- APR_HASH_KEY_STRING, (const void *)value);
+ svn_hash_sets(log_entry->revprops, name, value);
}
if (log_entry->revprops)
{
/* Pre-1.5 servers send the standard revprops unconditionally;
clear those the caller doesn't want. */
if (!want_author)
- apr_hash_set(log_entry->revprops, SVN_PROP_REVISION_AUTHOR,
- APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(log_entry->revprops, SVN_PROP_REVISION_AUTHOR, NULL);
if (!want_date)
- apr_hash_set(log_entry->revprops, SVN_PROP_REVISION_DATE,
- APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(log_entry->revprops, SVN_PROP_REVISION_DATE, NULL);
if (!want_log)
- apr_hash_set(log_entry->revprops, SVN_PROP_REVISION_LOG,
- APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(log_entry->revprops, SVN_PROP_REVISION_LOG, NULL);
}
}
else
{
if (rb->ra_session == NULL)
- SVN_ERR(svn_client_open_ra_session(&rb->ra_session,
- rb->ra_session_url,
- rb->ctx, rb->ra_session_pool));
+ SVN_ERR(svn_client_open_ra_session2(&rb->ra_session,
+ rb->ra_session_url, NULL,
+ rb->ctx, rb->ra_session_pool,
+ pool));
SVN_ERR(svn_ra_rev_proplist(rb->ra_session, log_entry->revision,
&log_entry->revprops, pool));
@@ -261,59 +261,225 @@ limit_receiver(void *baton, svn_log_entry_t *log_entry, apr_pool_t *pool)
return rb->receiver(rb->baton, log_entry, pool);
}
-
-/*** Public Interface. ***/
+/* Resolve the URLs or WC path in TARGETS as per the svn_client_log5 API.
+ The limitations on TARGETS specified by svn_client_log5 are enforced here.
+ So TARGETS can only contain a single WC path or a URL and zero or more
+ relative paths -- anything else will raise an error.
-svn_error_t *
-svn_client_log5(const apr_array_header_t *targets,
- const svn_opt_revision_t *peg_revision,
- const apr_array_header_t *revision_ranges,
- int limit,
- svn_boolean_t discover_changed_paths,
- svn_boolean_t strict_node_history,
- svn_boolean_t include_merged_revisions,
- const apr_array_header_t *revprops,
- svn_log_entry_receiver_t real_receiver,
- void *real_receiver_baton,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool)
+ PEG_REVISION, TARGETS, and CTX are as per svn_client_log5.
+
+ If TARGETS contains a single WC path then set *RA_TARGET to the absolute
+ path of that single path if PEG_REVISION is dependent on the working copy
+ (e.g. PREV). Otherwise set *RA_TARGET to the corresponding URL for the
+ single WC path. Set *RELATIVE_TARGETS to an array with a single
+ element "".
+
+ If TARGETS contains only a single URL, then set *RA_TARGET to a copy of
+ that URL and *RELATIVE_TARGETS to an array with a single element "".
+
+ If TARGETS contains a single URL and one or more relative paths, then
+ set *RA_TARGET to a copy of that URL and *RELATIVE_TARGETS to a copy of
+ each relative path after the URL.
+
+ If *PEG_REVISION is svn_opt_revision_unspecified, then *PEG_REVISION is
+ set to svn_opt_revision_head for URLs or svn_opt_revision_working for a
+ WC path.
+
+ *RA_TARGET and *RELATIVE_TARGETS are allocated in RESULT_POOL. */
+static svn_error_t *
+resolve_log_targets(apr_array_header_t **relative_targets,
+ const char **ra_target,
+ svn_opt_revision_t *peg_revision,
+ const apr_array_header_t *targets,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- svn_ra_session_t *ra_session;
- const char *url_or_path;
- svn_boolean_t has_log_revprops;
- const char *actual_url;
- apr_array_header_t *condensed_targets;
- svn_revnum_t ignored_revnum;
- svn_opt_revision_t session_opt_rev;
- const char *ra_target;
- pre_15_receiver_baton_t rb = {0};
- apr_pool_t *iterpool;
int i;
- svn_opt_revision_t peg_rev;
+ svn_boolean_t url_targets;
+
+ /* Per svn_client_log5, TARGETS contains either a URL followed by zero or
+ more relative paths, or one working copy path. */
+ const char *url_or_path = APR_ARRAY_IDX(targets, 0, const char *);
+
+ /* svn_client_log5 requires at least one target. */
+ if (targets->nelts == 0)
+ return svn_error_create(SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("No valid target found"));
+
+ /* Initialize the output array. At a minimum, we need room for one
+ (possibly empty) relpath. Otherwise, we have to hold a relpath
+ for every item in TARGETS except the first. */
+ *relative_targets = apr_array_make(result_pool,
+ MAX(1, targets->nelts - 1),
+ sizeof(const char *));
- if (revision_ranges->nelts == 0)
+ if (svn_path_is_url(url_or_path))
{
- return svn_error_create
- (SVN_ERR_CLIENT_BAD_REVISION, NULL,
- _("Missing required revision specification"));
+ /* An unspecified PEG_REVISION for a URL path defaults
+ to svn_opt_revision_head. */
+ if (peg_revision->kind == svn_opt_revision_unspecified)
+ peg_revision->kind = svn_opt_revision_head;
+
+ /* The logic here is this: If we get passed one argument, we assume
+ it is the full URL to a file/dir we want log info for. If we get
+ a URL plus some paths, then we assume that the URL is the base,
+ and that the paths passed are relative to it. */
+ if (targets->nelts > 1)
+ {
+ /* We have some paths, let's use them. Start after the URL. */
+ for (i = 1; i < targets->nelts; i++)
+ {
+ const char *target;
+
+ target = APR_ARRAY_IDX(targets, i, const char *);
+
+ if (svn_path_is_url(target) || svn_dirent_is_absolute(target))
+ return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("'%s' is not a relative path"),
+ target);
+
+ APR_ARRAY_PUSH(*relative_targets, const char *) =
+ apr_pstrdup(result_pool, target);
+ }
+ }
+ else
+ {
+ /* If we have a single URL, then the session will be rooted at
+ it, so just send an empty string for the paths we are
+ interested in. */
+ APR_ARRAY_PUSH(*relative_targets, const char *) = "";
+ }
+
+ /* Remember that our targets are URLs. */
+ url_targets = TRUE;
}
+ else /* WC path target. */
+ {
+ const char *target;
+ const char *target_abspath;
- /* Make a copy of PEG_REVISION, we may need to change it to a
- default value. */
- peg_rev.kind = peg_revision->kind;
- peg_rev.value = peg_revision->value;
+ url_targets = FALSE;
+ if (targets->nelts > 1)
+ return svn_error_create(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
+ _("When specifying working copy paths, only "
+ "one target may be given"));
+
+ /* An unspecified PEG_REVISION for a working copy path defaults
+ to svn_opt_revision_working. */
+ if (peg_revision->kind == svn_opt_revision_unspecified)
+ peg_revision->kind = svn_opt_revision_working;
- /* Use the passed URL, if there is one. */
- url_or_path = APR_ARRAY_IDX(targets, 0, const char *);
- session_opt_rev.kind = svn_opt_revision_unspecified;
+ /* Get URLs for each target */
+ target = APR_ARRAY_IDX(targets, 0, const char *);
- for (i = 0; i < revision_ranges->nelts; i++)
+ SVN_ERR(svn_dirent_get_absolute(&target_abspath, target, scratch_pool));
+ SVN_ERR(svn_wc__node_get_url(&url_or_path, ctx->wc_ctx, target_abspath,
+ scratch_pool, scratch_pool));
+ APR_ARRAY_PUSH(*relative_targets, const char *) = "";
+ }
+
+ /* If this is a revision type that requires access to the working copy,
+ * we use our initial target path to figure out where to root the RA
+ * session, otherwise we use our URL. */
+ if (SVN_CLIENT__REVKIND_NEEDS_WC(peg_revision->kind))
+ {
+ if (url_targets)
+ return svn_error_create(SVN_ERR_CLIENT_BAD_REVISION, NULL,
+ _("PREV, BASE, or COMMITTED revision "
+ "keywords are invalid for URL"));
+
+ else
+ SVN_ERR(svn_dirent_get_absolute(
+ ra_target, APR_ARRAY_IDX(targets, 0, const char *), result_pool));
+ }
+ else
+ {
+ *ra_target = apr_pstrdup(result_pool, url_or_path);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Keep track of oldest and youngest opt revs found.
+
+ If REV is younger than *YOUNGEST_REV, or *YOUNGEST_REV is
+ svn_opt_revision_unspecified, then set *YOUNGEST_REV equal to REV.
+
+ If REV is older than *OLDEST_REV, or *OLDEST_REV is
+ svn_opt_revision_unspecified, then set *OLDEST_REV equal to REV. */
+static void
+find_youngest_and_oldest_revs(svn_revnum_t *youngest_rev,
+ svn_revnum_t *oldest_rev,
+ svn_revnum_t rev)
+{
+ /* Is REV younger than YOUNGEST_REV? */
+ if (! SVN_IS_VALID_REVNUM(*youngest_rev)
+ || rev > *youngest_rev)
+ *youngest_rev = rev;
+
+ if (! SVN_IS_VALID_REVNUM(*oldest_rev)
+ || rev < *oldest_rev)
+ *oldest_rev = rev;
+}
+
+typedef struct rev_range_t
+{
+ svn_revnum_t range_start;
+ svn_revnum_t range_end;
+} rev_range_t;
+
+/* Convert array of svn_opt_revision_t ranges to an array of svn_revnum_t
+ ranges.
+
+ Given a log target URL_OR_ABSPATH@PEG_REV and an array of
+ svn_opt_revision_range_t's OPT_REV_RANGES, resolve the opt revs in
+ OPT_REV_RANGES to svn_revnum_t's and return these in *REVISION_RANGES, an
+ array of rev_range_t *.
+
+ Set *YOUNGEST_REV and *OLDEST_REV to the youngest and oldest revisions
+ found in *REVISION_RANGES.
+
+ If the repository needs to be contacted to resolve svn_opt_revision_date or
+ svn_opt_revision_head revisions, then the session used to do this is
+ RA_SESSION; it must be an open session to any URL in the right repository.
+*/
+static svn_error_t*
+convert_opt_rev_array_to_rev_range_array(
+ apr_array_header_t **revision_ranges,
+ svn_revnum_t *youngest_rev,
+ svn_revnum_t *oldest_rev,
+ svn_ra_session_t *ra_session,
+ const char *url_or_abspath,
+ const apr_array_header_t *opt_rev_ranges,
+ const svn_opt_revision_t *peg_rev,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ int i;
+ svn_revnum_t head_rev = SVN_INVALID_REVNUM;
+
+ /* Initialize the input/output parameters. */
+ *youngest_rev = *oldest_rev = SVN_INVALID_REVNUM;
+
+ /* Convert OPT_REV_RANGES to an array of rev_range_t and find the youngest
+ and oldest revision range that spans all of OPT_REV_RANGES. */
+ *revision_ranges = apr_array_make(result_pool, opt_rev_ranges->nelts,
+ sizeof(rev_range_t *));
+
+ for (i = 0; i < opt_rev_ranges->nelts; i++)
{
svn_opt_revision_range_t *range;
+ rev_range_t *rev_range;
+ svn_boolean_t start_same_as_end = FALSE;
- range = APR_ARRAY_IDX(revision_ranges, i, svn_opt_revision_range_t *);
+ range = APR_ARRAY_IDX(opt_rev_ranges, i, svn_opt_revision_range_t *);
+ /* Right now RANGE can be any valid pair of svn_opt_revision_t's. We
+ will now convert all RANGEs in place to the corresponding
+ svn_opt_revision_number kind. */
if ((range->start.kind != svn_opt_revision_unspecified)
&& (range->end.kind == svn_opt_revision_unspecified))
{
@@ -330,17 +496,17 @@ svn_client_log5(const apr_array_header_t *targets,
else if (range->start.kind == svn_opt_revision_unspecified)
{
/* Default to any specified peg revision. Otherwise, if the
- * first target is an URL, then we default to HEAD:0. Lastly,
+ * first target is a URL, then we default to HEAD:0. Lastly,
* the default is BASE:0 since WC@HEAD may not exist. */
- if (peg_rev.kind == svn_opt_revision_unspecified)
+ if (peg_rev->kind == svn_opt_revision_unspecified)
{
- if (svn_path_is_url(url_or_path))
+ if (svn_path_is_url(url_or_abspath))
range->start.kind = svn_opt_revision_head;
else
range->start.kind = svn_opt_revision_base;
}
else
- range->start = peg_rev;
+ range->start = *peg_rev;
if (range->end.kind == svn_opt_revision_unspecified)
{
@@ -357,152 +523,117 @@ svn_client_log5(const apr_array_header_t *targets,
_("Missing required revision specification"));
}
- /* Determine the revision to open the RA session to. */
- if (session_opt_rev.kind == svn_opt_revision_unspecified)
+ /* Does RANGE describe a single svn_opt_revision_t? */
+ if (range->start.kind == range->end.kind)
{
- if (range->start.kind == svn_opt_revision_number &&
- range->end.kind == svn_opt_revision_number)
+ if (range->start.kind == svn_opt_revision_number)
{
- session_opt_rev =
- (range->start.value.number > range->end.value.number ?
- range->start : range->end);
+ if (range->start.value.number == range->end.value.number)
+ start_same_as_end = TRUE;
}
- else if (range->start.kind == svn_opt_revision_head ||
- range->end.kind == svn_opt_revision_head)
+ else if (range->start.kind == svn_opt_revision_date)
{
- session_opt_rev.kind = svn_opt_revision_head;
+ if (range->start.value.date == range->end.value.date)
+ start_same_as_end = TRUE;
}
- else if (range->start.kind == svn_opt_revision_date &&
- range->end.kind == svn_opt_revision_date)
+ else
{
- session_opt_rev =
- (range->start.value.date > range->end.value.date ?
- range->start : range->end);
+ start_same_as_end = TRUE;
}
}
- }
- /* Use the passed URL, if there is one. */
- if (svn_path_is_url(url_or_path))
- {
- /* Initialize this array, since we'll be building it below */
- condensed_targets = apr_array_make(pool, 1, sizeof(const char *));
-
- /* The logic here is this: If we get passed one argument, we assume
- it is the full URL to a file/dir we want log info for. If we get
- a URL plus some paths, then we assume that the URL is the base,
- and that the paths passed are relative to it. */
- if (targets->nelts > 1)
- {
- /* We have some paths, let's use them. Start after the URL. */
- for (i = 1; i < targets->nelts; i++)
- {
- const char *target;
-
- target = APR_ARRAY_IDX(targets, i, const char *);
-
- if (svn_path_is_url(target) || svn_dirent_is_absolute(target))
- return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
- _("'%s' is not a relative path"),
- target);
-
- APR_ARRAY_PUSH(condensed_targets, const char *) = target;
- }
- }
+ rev_range = apr_palloc(result_pool, sizeof(*rev_range));
+ SVN_ERR(svn_client__get_revision_number(
+ &rev_range->range_start, &head_rev,
+ ctx->wc_ctx, url_or_abspath, ra_session,
+ &range->start, scratch_pool));
+ if (start_same_as_end)
+ rev_range->range_end = rev_range->range_start;
else
- {
- /* If we have a single URL, then the session will be rooted at
- it, so just send an empty string for the paths we are
- interested in. */
- APR_ARRAY_PUSH(condensed_targets, const char *) = "";
- }
+ SVN_ERR(svn_client__get_revision_number(
+ &rev_range->range_end, &head_rev,
+ ctx->wc_ctx, url_or_abspath, ra_session,
+ &range->end, scratch_pool));
+
+ /* Possibly update the oldest and youngest revisions requested. */
+ find_youngest_and_oldest_revs(youngest_rev,
+ oldest_rev,
+ rev_range->range_start);
+ find_youngest_and_oldest_revs(youngest_rev,
+ oldest_rev,
+ rev_range->range_end);
+ APR_ARRAY_PUSH(*revision_ranges, rev_range_t *) = rev_range;
}
- else
- {
- apr_array_header_t *target_urls;
- apr_array_header_t *real_targets;
-
- /* See FIXME about multiple wc targets, below. */
- if (targets->nelts > 1)
- return svn_error_create(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
- _("When specifying working copy paths, only "
- "one target may be given"));
-
- /* An unspecified PEG_REVISION for a working copy path defautls
- to svn_opt_revision_working. */
- if (peg_rev.kind == svn_opt_revision_unspecified)
- peg_rev.kind = svn_opt_revision_working;
-
- /* Get URLs for each target */
- target_urls = apr_array_make(pool, 1, sizeof(const char *));
- real_targets = apr_array_make(pool, 1, sizeof(const char *));
- iterpool = svn_pool_create(pool);
- for (i = 0; i < targets->nelts; i++)
- {
- const char *url;
- const char *target = APR_ARRAY_IDX(targets, i, const char *);
- const char *target_abspath;
-
- svn_pool_clear(iterpool);
- SVN_ERR(svn_dirent_get_absolute(&target_abspath, target, iterpool));
- SVN_ERR(svn_wc__node_get_url(&url, ctx->wc_ctx, target_abspath,
- pool, iterpool));
-
- if (! url)
- return svn_error_createf
- (SVN_ERR_ENTRY_MISSING_URL, NULL,
- _("Entry '%s' has no URL"),
- svn_dirent_local_style(target, pool));
-
- APR_ARRAY_PUSH(target_urls, const char *) = url;
- APR_ARRAY_PUSH(real_targets, const char *) = target;
- }
- /* if we have no valid target_urls, just exit. */
- if (target_urls->nelts == 0)
- return SVN_NO_ERROR;
-
- /* Find the base URL and condensed targets relative to it. */
- SVN_ERR(svn_uri_condense_targets(&url_or_path, &condensed_targets,
- target_urls, TRUE, pool, iterpool));
+ return SVN_NO_ERROR;
+}
- if (condensed_targets->nelts == 0)
- APR_ARRAY_PUSH(condensed_targets, const char *) = "";
+static int
+compare_rev_to_segment(const void *key_p,
+ const void *element_p)
+{
+ svn_revnum_t rev =
+ * (svn_revnum_t *)key_p;
+ const svn_location_segment_t *segment =
+ *((const svn_location_segment_t * const *) element_p);
+
+ if (rev < segment->range_start)
+ return -1;
+ else if (rev > segment->range_end)
+ return 1;
+ else
+ return 0;
+}
- /* 'targets' now becomes 'real_targets', which has bogus,
- unversioned things removed from it. */
- targets = real_targets;
- svn_pool_destroy(iterpool);
- }
+/* Run svn_ra_get_log2 for PATHS, one or more paths relative to RA_SESSION's
+ common parent, for each revision in REVISION_RANGES, an array of
+ rev_range_t.
+ RA_SESSION is an open session pointing to ACTUAL_LOC.
- {
- /* If this is a revision type that requires access to the working copy,
- * we use our initial target path to figure out where to root the RA
- * session, otherwise we use our URL. */
- if (SVN_CLIENT__REVKIND_NEEDS_WC(peg_rev.kind))
- SVN_ERR(svn_dirent_condense_targets(&ra_target, NULL, targets,
- TRUE, pool, pool));
- else
- ra_target = url_or_path;
+ LOG_SEGMENTS is an array of svn_location_segment_t * items representing the
+ history of PATHS from the oldest to youngest revisions found in
+ REVISION_RANGES.
- SVN_ERR(svn_client__ra_session_from_path(&ra_session, &ignored_revnum,
- &actual_url, ra_target, NULL,
- &peg_rev, &session_opt_rev,
- ctx, pool));
+ The TARGETS, LIMIT, DISCOVER_CHANGED_PATHS, STRICT_NODE_HISTORY,
+ INCLUDE_MERGED_REVISIONS, REVPROPS, REAL_RECEIVER, and REAL_RECEIVER_BATON
+ parameters are all as per the svn_client_log5 API. */
+static svn_error_t *
+run_ra_get_log(apr_array_header_t *revision_ranges,
+ apr_array_header_t *paths,
+ apr_array_header_t *log_segments,
+ svn_client__pathrev_t *actual_loc,
+ svn_ra_session_t *ra_session,
+ /* The following are as per svn_client_log5. */
+ const apr_array_header_t *targets,
+ int limit,
+ svn_boolean_t discover_changed_paths,
+ svn_boolean_t strict_node_history,
+ svn_boolean_t include_merged_revisions,
+ const apr_array_header_t *revprops,
+ svn_log_entry_receiver_t real_receiver,
+ void *real_receiver_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
+{
+ int i;
+ pre_15_receiver_baton_t rb = {0};
+ apr_pool_t *iterpool;
+ svn_boolean_t has_log_revprops;
- SVN_ERR(svn_ra_has_capability(ra_session, &has_log_revprops,
- SVN_RA_CAPABILITY_LOG_REVPROPS, pool));
+ SVN_ERR(svn_ra_has_capability(ra_session, &has_log_revprops,
+ SVN_RA_CAPABILITY_LOG_REVPROPS,
+ scratch_pool));
- if (!has_log_revprops) {
+ if (!has_log_revprops)
+ {
/* See above pre-1.5 notes. */
rb.ctx = ctx;
/* Create ra session on first use */
- rb.ra_session_pool = pool;
- rb.ra_session_url = actual_url;
+ rb.ra_session_pool = scratch_pool;
+ rb.ra_session_url = actual_loc->url;
}
- }
/* It's a bit complex to correctly handle the special revision words
* such as "BASE", "COMMITTED", and "PREV". For example, if the
@@ -551,35 +682,64 @@ svn_client_log5(const apr_array_header_t *targets,
* epg wonders if the repository could send a unified stream of log
* entries if the paths and revisions were passed down.
*/
- iterpool = svn_pool_create(pool);
+ iterpool = svn_pool_create(scratch_pool);
for (i = 0; i < revision_ranges->nelts; i++)
{
- svn_revnum_t start_revnum, end_revnum, youngest_rev = SVN_INVALID_REVNUM;
+ const char *old_session_url;
const char *path = APR_ARRAY_IDX(targets, 0, const char *);
const char *local_abspath_or_url;
- svn_opt_revision_range_t *range;
+ rev_range_t *range;
limit_receiver_baton_t lb;
svn_log_entry_receiver_t passed_receiver;
void *passed_receiver_baton;
const apr_array_header_t *passed_receiver_revprops;
+ svn_location_segment_t **matching_segment;
+ svn_revnum_t younger_rev;
svn_pool_clear(iterpool);
if (!svn_path_is_url(path))
- SVN_ERR(svn_dirent_get_absolute(&local_abspath_or_url, path, iterpool));
+ SVN_ERR(svn_dirent_get_absolute(&local_abspath_or_url, path,
+ iterpool));
else
local_abspath_or_url = path;
- range = APR_ARRAY_IDX(revision_ranges, i, svn_opt_revision_range_t *);
-
- SVN_ERR(svn_client__get_revision_number(&start_revnum, &youngest_rev,
- ctx->wc_ctx, local_abspath_or_url,
- ra_session, &range->start,
- iterpool));
- SVN_ERR(svn_client__get_revision_number(&end_revnum, &youngest_rev,
- ctx->wc_ctx, local_abspath_or_url,
- ra_session, &range->end,
- iterpool));
+ range = APR_ARRAY_IDX(revision_ranges, i, rev_range_t *);
+
+ /* Issue #4355: Account for renames spanning requested
+ revision ranges. */
+ younger_rev = MAX(range->range_start, range->range_end);
+ matching_segment = bsearch(&younger_rev, log_segments->elts,
+ log_segments->nelts, log_segments->elt_size,
+ compare_rev_to_segment);
+ /* LOG_SEGMENTS is supposed to represent the history of PATHS from
+ the oldest to youngest revs in REVISION_RANGES. This function's
+ current sole caller svn_client_log5 *should* be providing
+ LOG_SEGMENTS that span the oldest to youngest revs in
+ REVISION_RANGES, even if one or more of the svn_location_segment_t's
+ returned have NULL path members indicating a gap in the history. So
+ MATCHING_SEGMENT should never be NULL, but clearly sometimes it is,
+ see http://svn.haxx.se/dev/archive-2013-06/0522.shtml
+ So to be safe we handle that case. */
+ if (matching_segment == NULL)
+ continue;
+
+ /* A segment with a NULL path means there is gap in the history.
+ We'll just proceed and let svn_ra_get_log2 fail with a useful
+ error...*/
+ if ((*matching_segment)->path != NULL)
+ {
+ /* ...but if there is history, then we must account for issue
+ #4355 and make sure our RA session is pointing at the correct
+ location. */
+ const char *segment_url = svn_path_url_add_component2(
+ actual_loc->repos_root_url, (*matching_segment)->path,
+ scratch_pool);
+ SVN_ERR(svn_client__ensure_ra_session_url(&old_session_url,
+ ra_session,
+ segment_url,
+ scratch_pool));
+ }
if (has_log_revprops)
{
@@ -609,9 +769,9 @@ svn_client_log5(const apr_array_header_t *targets,
}
SVN_ERR(svn_ra_get_log2(ra_session,
- condensed_targets,
- start_revnum,
- end_revnum,
+ paths,
+ range->range_start,
+ range->range_end,
limit,
discover_changed_paths,
strict_node_history,
@@ -634,3 +794,119 @@ svn_client_log5(const apr_array_header_t *targets,
return SVN_NO_ERROR;
}
+
+/*** Public Interface. ***/
+
+svn_error_t *
+svn_client_log5(const apr_array_header_t *targets,
+ const svn_opt_revision_t *peg_revision,
+ const apr_array_header_t *opt_rev_ranges,
+ int limit,
+ svn_boolean_t discover_changed_paths,
+ svn_boolean_t strict_node_history,
+ svn_boolean_t include_merged_revisions,
+ const apr_array_header_t *revprops,
+ svn_log_entry_receiver_t real_receiver,
+ void *real_receiver_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ svn_ra_session_t *ra_session;
+ const char *old_session_url;
+ const char *ra_target;
+ const char *path_or_url;
+ svn_opt_revision_t youngest_opt_rev;
+ svn_revnum_t youngest_rev;
+ svn_revnum_t oldest_rev;
+ svn_opt_revision_t peg_rev;
+ svn_client__pathrev_t *ra_session_loc;
+ svn_client__pathrev_t *actual_loc;
+ apr_array_header_t *log_segments;
+ apr_array_header_t *revision_ranges;
+ apr_array_header_t *relative_targets;
+
+ if (opt_rev_ranges->nelts == 0)
+ {
+ return svn_error_create
+ (SVN_ERR_CLIENT_BAD_REVISION, NULL,
+ _("Missing required revision specification"));
+ }
+
+ /* Make a copy of PEG_REVISION, we may need to change it to a
+ default value. */
+ peg_rev = *peg_revision;
+
+ SVN_ERR(resolve_log_targets(&relative_targets, &ra_target, &peg_rev,
+ targets, ctx, pool, pool));
+
+ SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &ra_session_loc,
+ ra_target, NULL, &peg_rev, &peg_rev,
+ ctx, pool));
+
+ /* Convert OPT_REV_RANGES to an array of rev_range_t and find the youngest
+ and oldest revision range that spans all of OPT_REV_RANGES. */
+ SVN_ERR(convert_opt_rev_array_to_rev_range_array(&revision_ranges,
+ &youngest_rev,
+ &oldest_rev,
+ ra_session,
+ ra_target,
+ opt_rev_ranges, &peg_rev,
+ ctx, pool, pool));
+
+ /* For some peg revisions we must resolve revision and url via a local path
+ so use the original RA_TARGET. For others, use the potentially corrected
+ (redirected) ra session URL. */
+ if (peg_rev.kind == svn_opt_revision_previous ||
+ peg_rev.kind == svn_opt_revision_base ||
+ peg_rev.kind == svn_opt_revision_committed ||
+ peg_rev.kind == svn_opt_revision_working)
+ path_or_url = ra_target;
+ else
+ path_or_url = ra_session_loc->url;
+
+ /* Make ACTUAL_LOC and RA_SESSION point to the youngest operative rev. */
+ youngest_opt_rev.kind = svn_opt_revision_number;
+ youngest_opt_rev.value.number = youngest_rev;
+ SVN_ERR(svn_client__resolve_rev_and_url(&actual_loc, ra_session,
+ path_or_url, &peg_rev,
+ &youngest_opt_rev, ctx, pool));
+ SVN_ERR(svn_client__ensure_ra_session_url(&old_session_url, ra_session,
+ actual_loc->url, pool));
+
+ /* Save us an RA layer round trip if we are on the repository root and
+ know the result in advance, or if we don't need multiple ranges.
+ All the revision data has already been validated.
+ */
+ if (strcmp(actual_loc->url, actual_loc->repos_root_url) == 0
+ || opt_rev_ranges->nelts <= 1)
+ {
+ svn_location_segment_t *segment = apr_pcalloc(pool, sizeof(*segment));
+ log_segments = apr_array_make(pool, 1, sizeof(segment));
+
+ segment->range_start = oldest_rev;
+ segment->range_end = actual_loc->rev;
+ segment->path = svn_uri_skip_ancestor(actual_loc->repos_root_url,
+ actual_loc->url, pool);
+ APR_ARRAY_PUSH(log_segments, svn_location_segment_t *) = segment;
+ }
+ else
+ {
+ /* Get the svn_location_segment_t's representing the requested log
+ * ranges. */
+ SVN_ERR(svn_client__repos_location_segments(&log_segments, ra_session,
+ actual_loc->url,
+ actual_loc->rev, /* peg */
+ actual_loc->rev, /* start */
+ oldest_rev, /* end */
+ ctx, pool));
+ }
+
+
+ SVN_ERR(run_ra_get_log(revision_ranges, relative_targets, log_segments,
+ actual_loc, ra_session, targets, limit,
+ discover_changed_paths, strict_node_history,
+ include_merged_revisions, revprops, real_receiver,
+ real_receiver_baton, ctx, pool));
+
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/libsvn_client/merge.c b/subversion/libsvn_client/merge.c
index 99e0baf..f0ff9a2 100644
--- a/subversion/libsvn_client/merge.c
+++ b/subversion/libsvn_client/merge.c
@@ -27,6 +27,7 @@
/*** Includes ***/
+#include <assert.h>
#include <apr_strings.h>
#include <apr_tables.h>
#include <apr_hash.h>
@@ -53,18 +54,24 @@
#include "client.h"
#include "mergeinfo.h"
+#include "private/svn_opt_private.h"
#include "private/svn_wc_private.h"
#include "private/svn_mergeinfo_private.h"
#include "private/svn_fspath.h"
+#include "private/svn_ra_private.h"
+#include "private/svn_client_private.h"
+#include "private/svn_subr_private.h"
#include "svn_private_config.h"
+
/*-----------------------------------------------------------------------*/
/* MERGEINFO MERGE SOURCE NORMALIZATION
*
* Nearly any helper function herein that accepts two URL/revision
- * pairs expects one of two things to be true:
+ * pairs (or equivalent struct merge_source_t) expects one of two things
+ * to be true:
*
* 1. that mergeinfo is not being recorded at all for this
* operation, or
@@ -78,24 +85,78 @@
*
* We use svn_ra_get_location_segments() to split a given range of
* revisions across an object's history into several which obey these
- * rules. For example, a merge between r19500 and r27567 of
- * Subversion's own /tags/1.4.5 directory gets split into sequential
- * merges of the following location pairs:
+ * rules. For example, an extract from the log of Subversion's own
+ * /subversion/tags/1.4.5 directory shows the following copies between
+ * r859500 and r866500 (omitting the '/subversion' prefix for clarity):
+ *
+ * r859598:
+ * A /branches/1.4.x (from /trunk:859597)
+ *
+ * r865417:
+ * A /tags/1.4.4 (from /branches/1.4.x:865262)
+ * # Notice that this copy leaves a gap between 865262 and 865417.
+ *
+ * r866420:
+ * A /branches/1.4.5 (from /tags/1.4.4:866419)
+ *
+ * r866425:
+ * D /branches/1.4.5
+ * A /tags/1.4.5 (from /branches/1.4.5:866424)
+ *
+ * In graphical form:
*
- * [/trunk:19549, /trunk:19523]
- * (recorded in svn:mergeinfo as /trunk:19500-19523)
+ * 859500 859597 865262 866419 866424 866500
+ * . . . . . .
+ * trunk ------------------------------------------------
+ * \ . . .
+ * branches/1.4.x A-------------------------------------
+ * . \______ . .
+ * . \ . .
+ * tags/1.4.4 . A-----------------------
+ * . . \ .
+ * branches/1.4.5 . . A------D
+ * . . . \.
+ * tags/1.4.5 . . . A---------
+ * . . . .
+ * 859598 865417 866420 866425
*
- * [/trunk:19523, /branches/1.4.x:25188]
- * (recorded in svn:mergeinfo as /branches/1.4.x:19524-25188)
+ * A merge of the difference between r859500 and r866500 of this directory
+ * gets split into sequential merges of the following location pairs.
*
- * [/branches/1.4.x:25188, /tags/1.4.4@26345]
- * (recorded in svn:mergeinfo as /tags/1.4.4:25189-26345)
+ * 859500 859597 865262 865416 866419 866424 866500
+ * . . . . . . .
+ * trunk (======] . . . . .
+ * . . . . .
+ * trunk ( . . . . .
+ * branches/1.4.x ======] . . . .
+ * . . . .
+ * branches/1.4.x ( . . . .
+ * tags/1.4.4 =============] . .
+ * implicit_src_gap (======] . . .
+ * . . .
+ * tags/1.4.4 ( . .
+ * branches/1.4.5 ======] .
+ * . .
+ * branches/1.4.5 ( .
+ * tags/1.4.5 ======]
*
- * [/tags/1.4.4@26345, /branches/1.4.5@26350]
- * (recorded in svn:mergeinfo as /branches/1.4.5:26346-26350)
+ * which are represented in merge_source_t as:
*
- * [/branches/1.4.5@26350, /tags/1.4.5@27567]
- * (recorded in svn:mergeinfo as /tags/1.4.5:26351-27567)
+ * [/trunk:859500, /trunk:859597]
+ * (recorded in svn:mergeinfo as /trunk:859501-859597)
+ *
+ * [/trunk:859597, /branches/1.4.x:865262]
+ * (recorded in svn:mergeinfo as /branches/1.4.x:859598-865262)
+ *
+ * [/branches/1.4.x:865262, /tags/1.4.4@866419]
+ * (recorded in svn:mergeinfo as /tags/1.4.4:865263-866419)
+ * (and there is a gap, the revision range [865262, 865416])
+ *
+ * [/tags/1.4.4@866419, /branches/1.4.5@866424]
+ * (recorded in svn:mergeinfo as /branches/1.4.5:866420-866424)
+ *
+ * [/branches/1.4.5@866424, /tags/1.4.5@866500]
+ * (recorded in svn:mergeinfo as /tags/1.4.5:866425-866500)
*
* Our helper functions would then operate on one of these location
* pairs at a time.
@@ -137,14 +198,14 @@
* merge target and any of its subtrees which have explicit mergeinfo
* or otherwise need special attention during a merge.
*
- * During mergeinfo unaware merges, CHILDREN_WITH_MERGEINFO is created by
- * do_mergeinfo_unaware_dir_merge and contains only one element describing
- * a contiguous range to be merged to the WC merge target.
+ * During mergeinfo unaware merges, CHILDREN_WITH_MERGEINFO contains
+ * contains only one element (added by do_mergeinfo_unaware_dir_merge)
+ * describing a contiguous range to be merged to the WC merge target.
*
* During mergeinfo aware merges CHILDREN_WITH_MERGEINFO is created
* by get_mergeinfo_paths() and outside of that function and its helpers
* should always meet the criteria dictated in get_mergeinfo_paths()'s doc
- * string. The elements of CHILDREN_WITH_MERGINFO should never be NULL.
+ * string. The elements of CHILDREN_WITH_MERGEINFO should never be NULL.
*
* For clarification on mergeinfo aware vs. mergeinfo unaware merges, see
* the doc string for HONOR_MERGEINFO().
@@ -155,47 +216,52 @@
/*** Repos-Diff Editor Callbacks ***/
+/* */
typedef struct merge_source_t
{
/* "left" side URL and revision (inclusive iff youngest) */
- const char *url1;
- svn_revnum_t rev1;
+ const svn_client__pathrev_t *loc1;
/* "right" side URL and revision (inclusive iff youngest) */
- const char *url2;
- svn_revnum_t rev2;
+ const svn_client__pathrev_t *loc2;
+ /* True iff LOC1 is an ancestor of LOC2 or vice-versa (history-wise). */
+ svn_boolean_t ancestral;
} merge_source_t;
+/* Description of the merge target root node (a WC working node) */
+typedef struct merge_target_t
+{
+ /* Absolute path to the WC node */
+ const char *abspath;
+
+ /* The repository location of the base node of the target WC. If the node
+ * is locally added, then URL & REV are NULL & SVN_INVALID_REVNUM.
+ * REPOS_ROOT_URL and REPOS_UUID are always valid. */
+ svn_client__pathrev_t loc;
+
+} merge_target_t;
+
typedef struct merge_cmd_baton_t {
- svn_boolean_t force;
+ svn_boolean_t force_delete; /* Delete a file/dir even if modified */
svn_boolean_t dry_run;
svn_boolean_t record_only; /* Whether to merge only mergeinfo
differences. */
- svn_boolean_t sources_ancestral; /* Whether the left-side merge source is
- an ancestor of the right-side, or
- vice-versa (history-wise). */
svn_boolean_t same_repos; /* Whether the merge source repository
is the same repository as the
target. Defaults to FALSE if DRY_RUN
is TRUE.*/
svn_boolean_t mergeinfo_capable; /* Whether the merge source server
is capable of Merge Tracking. */
- svn_boolean_t ignore_ancestry; /* Are we ignoring ancestry (and by
- extension, mergeinfo)? FALSE if
- SOURCES_ANCESTRAL is FALSE. */
- svn_boolean_t target_missing_child; /* Whether working copy target of the
- merge is missing any immediate
- children. */
+ svn_boolean_t ignore_mergeinfo; /* Don't honor mergeinfo; see
+ doc string of do_merge(). FALSE if
+ MERGE_SOURCE->ancestral is FALSE. */
+ svn_boolean_t diff_ignore_ancestry; /* Diff unrelated nodes as if related; see
+ doc string of do_merge(). FALSE if
+ MERGE_SOURCE->ancestral is FALSE. */
svn_boolean_t reintegrate_merge; /* Whether this is a --reintegrate
merge or not. */
- const char *added_path; /* Set to the dir path whenever the
- dir is added as a child of a
- versioned dir (dry-run only) */
- const char *target_abspath; /* Absolute working copy target of
- the merge. */
- const char *repos_root_url; /* The repository root of the repository
- containing TARGET_ABSPATH */
+ const merge_target_t *target; /* Description of merge target node */
/* The left and right URLs and revs. The value of this field changes to
reflect the merge_source_t *currently* being merged by do_merge(). */
@@ -206,29 +272,16 @@ typedef struct merge_cmd_baton_t {
See http://subversion.tigris.org/issues/show_bug.cgi?id=3432.
Updated during each call to do_directory_merge(). May be NULL if there
is no gap. */
- apr_array_header_t *implicit_src_gap;
+ svn_rangelist_t *implicit_src_gap;
svn_client_ctx_t *ctx; /* Client context for callbacks, etc. */
- /* Whether invocation of the merge_file_added() callback required
- delegation to the merge_file_changed() function for the file
- currently being merged. This info is used to detect whether a
- file on the left side of a 3-way merge actually exists (important
- because it's created as an empty temp file on disk regardless).*/
- svn_boolean_t add_necessitated_merge;
-
- /* The list of paths for entries we've deleted, used only when in
- dry_run mode. */
- apr_hash_t *dry_run_deletions;
-
- /* The list of paths for entries we've added, used only when in
- dry_run mode. */
- apr_hash_t *dry_run_added;
-
/* The list of any paths which remained in conflict after a
resolution attempt was made. We track this in-memory, rather
than just using WC entry state, since the latter doesn't help us
- when in dry_run mode. */
+ when in dry_run mode.
+ ### And because we only want to resolve conflicts that were
+ generated by this merge, not pre-existing ones? */
apr_hash_t *conflicted_paths;
/* A list of absolute paths which had no explicit mergeinfo prior to the
@@ -238,19 +291,41 @@ typedef struct merge_cmd_baton_t {
meet the criteria or DRY_RUN is true. */
apr_hash_t *paths_with_new_mergeinfo;
- /* A list of absolute paths which had explicit mergeinfo prior to the merge
- but had this mergeinfo deleted by the merge. This is populated by
- merge_change_props() and is allocated in POOL so it is subject to the
+ /* A list of absolute paths whose mergeinfo doesn't need updating after
+ the merge. This can be caused by the removal of mergeinfo by the merge
+ or by deleting the node itself. This is populated by merge_change_props()
+ and the delete callbacks and is allocated in POOL so it is subject to the
lifetime limitations of POOL. Is NULL if no paths are found which
meet the criteria or DRY_RUN is true. */
apr_hash_t *paths_with_deleted_mergeinfo;
+ /* The list of absolute skipped paths, which should be examined and
+ cleared after each invocation of the callback. The paths
+ are absolute. Is NULL if MERGE_B->MERGE_SOURCE->ancestral and
+ MERGE_B->REINTEGRATE_MERGE are both false. */
+ apr_hash_t *skipped_abspaths;
+
+ /* The list of absolute merged paths. Unused if MERGE_B->MERGE_SOURCE->ancestral
+ and MERGE_B->REINTEGRATE_MERGE are both false. */
+ apr_hash_t *merged_abspaths;
+
+ /* A hash of (const char *) absolute WC paths mapped to the same which
+ represent the roots of subtrees added by the merge. */
+ apr_hash_t *added_abspaths;
+
+ /* A list of tree conflict victim absolute paths which may be NULL. */
+ apr_hash_t *tree_conflicted_abspaths;
+
/* The diff3_cmd in ctx->config, if any, else null. We could just
extract this as needed, but since more than one caller uses it,
we just set it up when this baton is created. */
const char *diff3_cmd;
const apr_array_header_t *merge_options;
+ /* Array of file extension patterns to preserve as extensions in
+ generated conflict files. */
+ const apr_array_header_t *ext_patterns;
+
/* RA sessions used throughout a merge operation. Opened/re-parented
as needed.
@@ -270,21 +345,37 @@ typedef struct merge_cmd_baton_t {
merge source, i.e. it is cleared on every call to do_directory_merge()
or do_file_merge() in do_merge(). */
apr_pool_t *pool;
+
+
+ /* State for notify_merge_begin() */
+ struct notify_begin_state_t
+ {
+ /* Cache of which abspath was last notified. */
+ const char *last_abspath;
+
+ /* Reference to the one-and-only CHILDREN_WITH_MERGEINFO (see global
+ comment) or a similar list for single-file-merges */
+ const apr_array_header_t *nodes_with_mergeinfo;
+ } notify_begin;
+
} merge_cmd_baton_t;
-/* If the merge source server is is capable of merge tracking, the left-side
+/* Return TRUE iff we should be taking account of mergeinfo in deciding what
+ changes to merge, for the merge described by MERGE_B. Specifically, that
+ is if the merge source server is capable of merge tracking, the left-side
merge source is an ancestor of the right-side (or vice-versa), the merge
- source repository is the same repository as the MERGE_B->TARGET_ABSPATH, and
- ancestry is being considered then return TRUE. */
+ source is in the same repository as the merge target, and we are not
+ ignoring mergeinfo. */
#define HONOR_MERGEINFO(merge_b) ((merge_b)->mergeinfo_capable \
- && (merge_b)->sources_ancestral \
+ && (merge_b)->merge_source.ancestral \
&& (merge_b)->same_repos \
- && (! (merge_b)->ignore_ancestry))
+ && (! (merge_b)->ignore_mergeinfo))
-/* If HONOR_MERGEINFO is TRUE and the merge is not a dry run
- then return TRUE. */
+/* Return TRUE iff we should be recording mergeinfo for the merge described
+ by MERGE_B. Specifically, that is if we are honoring mergeinfo and the
+ merge is not a dry run. */
#define RECORD_MERGEINFO(merge_b) (HONOR_MERGEINFO(merge_b) \
&& !(merge_b)->dry_run)
@@ -293,49 +384,126 @@ typedef struct merge_cmd_baton_t {
/*** Utilities ***/
+/* Return TRUE iff the session URL of RA_SESSION is equal to URL. Useful in
+ * asserting preconditions. */
+static svn_boolean_t
+session_url_is(svn_ra_session_t *ra_session,
+ const char *url,
+ apr_pool_t *scratch_pool)
+{
+ const char *session_url;
+ svn_error_t *err
+ = svn_ra_get_session_url(ra_session, &session_url, scratch_pool);
+
+ SVN_ERR_ASSERT_NO_RETURN(! err);
+ return strcmp(url, session_url) == 0;
+}
+
+/* Return a new merge_source_t structure, allocated in RESULT_POOL,
+ * initialized with deep copies of LOC1 and LOC2 and ANCESTRAL. */
+static merge_source_t *
+merge_source_create(const svn_client__pathrev_t *loc1,
+ const svn_client__pathrev_t *loc2,
+ svn_boolean_t ancestral,
+ apr_pool_t *result_pool)
+{
+ merge_source_t *s
+ = apr_palloc(result_pool, sizeof(*s));
+
+ s->loc1 = svn_client__pathrev_dup(loc1, result_pool);
+ s->loc2 = svn_client__pathrev_dup(loc2, result_pool);
+ s->ancestral = ancestral;
+ return s;
+}
+
+/* Return a deep copy of SOURCE, allocated in RESULT_POOL. */
+static merge_source_t *
+merge_source_dup(const merge_source_t *source,
+ apr_pool_t *result_pool)
+{
+ merge_source_t *s = apr_palloc(result_pool, sizeof(*s));
+
+ s->loc1 = svn_client__pathrev_dup(source->loc1, result_pool);
+ s->loc2 = svn_client__pathrev_dup(source->loc2, result_pool);
+ s->ancestral = source->ancestral;
+ return s;
+}
+
/* Return SVN_ERR_UNSUPPORTED_FEATURE if URL is not inside the repository
- of LOCAL_ABSPAT. Use SCRATCH_POOL for temporary allocations. */
+ of LOCAL_ABSPATH. Use SCRATCH_POOL for temporary allocations. */
static svn_error_t *
-check_repos_match(merge_cmd_baton_t *merge_b,
+check_repos_match(const merge_target_t *target,
const char *local_abspath,
const char *url,
apr_pool_t *scratch_pool)
{
- if (!svn_uri__is_ancestor(merge_b->repos_root_url, url))
+ if (!svn_uri__is_ancestor(target->loc.repos_root_url, url))
return svn_error_createf(
SVN_ERR_UNSUPPORTED_FEATURE, NULL,
- _("Url '%s' of '%s' is not in repository '%s'"),
+ _("URL '%s' of '%s' is not in repository '%s'"),
url, svn_dirent_local_style(local_abspath, scratch_pool),
- merge_b->repos_root_url);
+ target->loc.repos_root_url);
return SVN_NO_ERROR;
}
-/* Return true iff we're in dry-run mode and WCPATH would have been
- deleted by now if we weren't in dry-run mode.
- Used to avoid spurious notifications (e.g. conflicts) from a merge
- attempt into an existing target which would have been deleted if we
- weren't in dry_run mode (issue #2584). Assumes that WCPATH is
- still versioned (e.g. has an associated entry). */
-static APR_INLINE svn_boolean_t
-dry_run_deleted_p(const merge_cmd_baton_t *merge_b, const char *wcpath)
+
+/* Return TRUE iff the repository of LOCATION1 is the same as
+ * that of LOCATION2. If STRICT_URLS is true, the URLs must
+ * match (and the UUIDs, just to be sure), otherwise just the UUIDs must
+ * match and the URLs can differ (a common case is http versus https). */
+static svn_boolean_t
+is_same_repos(const svn_client__pathrev_t *location1,
+ const svn_client__pathrev_t *location2,
+ svn_boolean_t strict_urls)
{
- return (merge_b->dry_run &&
- apr_hash_get(merge_b->dry_run_deletions, wcpath,
- APR_HASH_KEY_STRING) != NULL);
+ if (strict_urls)
+ return (strcmp(location1->repos_root_url, location2->repos_root_url) == 0
+ && strcmp(location1->repos_uuid, location2->repos_uuid) == 0);
+ else
+ return (strcmp(location1->repos_uuid, location2->repos_uuid) == 0);
}
-/* Return true iff we're in dry-run mode and WCPATH would have been
- added by now if we weren't in dry-run mode.
- Used to avoid spurious notifications (e.g. conflicts) from a merge
- attempt into an existing target which would have been deleted if we
- weren't in dry_run mode (issue #2584). Assumes that WCPATH is
- still versioned (e.g. has an associated entry). */
-static APR_INLINE svn_boolean_t
-dry_run_added_p(const merge_cmd_baton_t *merge_b, const char *wcpath)
+/* If the repository identified of LOCATION1 is not the same as that
+ * of LOCATION2, throw a SVN_ERR_CLIENT_UNRELATED_RESOURCES
+ * error mentioning PATH1 and PATH2. For STRICT_URLS, see is_same_repos().
+ */
+static svn_error_t *
+check_same_repos(const svn_client__pathrev_t *location1,
+ const char *path1,
+ const svn_client__pathrev_t *location2,
+ const char *path2,
+ svn_boolean_t strict_urls,
+ apr_pool_t *scratch_pool)
+{
+ if (! is_same_repos(location1, location2, strict_urls))
+ return svn_error_createf(SVN_ERR_CLIENT_UNRELATED_RESOURCES, NULL,
+ _("'%s' must be from the same repository as "
+ "'%s'"), path1, path2);
+ return SVN_NO_ERROR;
+}
+
+/* Store LOCAL_ABSPATH in PATH_HASH after duplicating it into the pool
+ containing PATH_HASH. */
+static APR_INLINE void
+store_path(apr_hash_t *path_hash, const char *local_abspath)
+{
+ const char *dup_path = apr_pstrdup(apr_hash_pool_get(path_hash),
+ local_abspath);
+
+ svn_hash_sets(path_hash, dup_path, dup_path);
+}
+
+/* Store LOCAL_ABSPATH in *PATH_HASH_P after duplicating it into the pool
+ containing *PATH_HASH_P. If *PATH_HASH_P is NULL, then first set
+ *PATH_HASH_P to a new hash allocated from POOL. */
+static APR_INLINE void
+alloc_and_store_path(apr_hash_t **path_hash_p,
+ const char *local_abspath,
+ apr_pool_t *pool)
{
- return (merge_b->dry_run &&
- apr_hash_get(merge_b->dry_run_added, wcpath,
- APR_HASH_KEY_STRING) != NULL);
+ if (! *path_hash_p)
+ *path_hash_p = apr_hash_make(pool);
+ store_path(*path_hash_p, local_abspath);
}
/* Return whether any WC path was put in conflict by the merge
@@ -364,12 +532,12 @@ is_path_conflicted_by_merge(merge_cmd_baton_t *merge_b)
**/
static svn_error_t *
perform_obstruction_check(svn_wc_notify_state_t *obstruction_state,
- svn_boolean_t *added,
svn_boolean_t *deleted,
+ svn_boolean_t *excluded,
svn_node_kind_t *kind,
+ svn_depth_t *parent_depth,
const merge_cmd_baton_t *merge_b,
const char *local_abspath,
- svn_node_kind_t expected_kind,
apr_pool_t *scratch_pool)
{
svn_wc_context_t *wc_ctx = merge_b->ctx->wc_ctx;
@@ -380,266 +548,66 @@ perform_obstruction_check(svn_wc_notify_state_t *obstruction_state,
*obstruction_state = svn_wc_notify_state_inapplicable;
- if (added)
- *added = FALSE;
if (deleted)
*deleted = FALSE;
if (kind)
*kind = svn_node_none;
- /* In a dry run, make as if nodes "deleted" by the dry run appear so. */
- if (merge_b->dry_run)
- {
- if (dry_run_deleted_p(merge_b, local_abspath))
- {
- *obstruction_state = svn_wc_notify_state_inapplicable;
-
- if (deleted)
- *deleted = TRUE;
-
- if (expected_kind != svn_node_unknown
- && expected_kind != svn_node_none)
- *obstruction_state = svn_wc_notify_state_obstructed;
- return SVN_NO_ERROR;
- }
- else if (dry_run_added_p(merge_b, local_abspath))
- {
- *obstruction_state = svn_wc_notify_state_inapplicable;
-
- if (added)
- *added = TRUE;
- if (kind)
- *kind = svn_node_dir; /* Currently only used for dirs */
-
- return SVN_NO_ERROR;
- }
- }
-
if (kind == NULL)
kind = &wc_kind;
- check_root = ! strcmp(local_abspath, merge_b->target_abspath);
+ check_root = ! strcmp(local_abspath, merge_b->target->abspath);
SVN_ERR(svn_wc__check_for_obstructions(obstruction_state,
kind,
- added,
deleted,
- NULL,
+ excluded,
+ parent_depth,
wc_ctx, local_abspath,
check_root,
scratch_pool));
-
- if (*obstruction_state == svn_wc_notify_state_inapplicable
- && expected_kind != svn_node_unknown
- && *kind != expected_kind)
- {
- *obstruction_state = svn_wc_notify_state_obstructed;
- }
-
return SVN_NO_ERROR;
}
/* Create *LEFT and *RIGHT conflict versions for conflict victim
* at VICTIM_ABSPATH, with kind NODE_KIND, using information obtained
- * from MERGE_B.
- * Allocate returned conflict versions in MERGE_B->POOL. */
+ * from MERGE_SOURCE and TARGET.
+ * Allocate returned conflict versions in RESULT_POOL. */
static svn_error_t *
make_conflict_versions(const svn_wc_conflict_version_t **left,
const svn_wc_conflict_version_t **right,
const char *victim_abspath,
svn_node_kind_t node_kind,
- merge_cmd_baton_t *merge_b)
+ const merge_source_t *merge_source,
+ const merge_target_t *target,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- const char *src_repos_url; /* root URL of source repository */
- const char *left_url;
- const char *right_url;
-
- SVN_ERR(svn_ra_get_repos_root2(merge_b->ra_session1, &src_repos_url,
- merge_b->pool));
-
- /* Construct the source URLs of the victim. */
- {
- const char *child = svn_dirent_is_child(merge_b->target_abspath,
- victim_abspath,
- merge_b->pool);
- if (child != NULL)
- {
- left_url = svn_path_url_add_component2(merge_b->merge_source.url1,
- child, merge_b->pool);
- right_url = svn_path_url_add_component2(merge_b->merge_source.url2,
- child, merge_b->pool);
- }
- else
- {
- left_url = merge_b->merge_source.url1;
- right_url = merge_b->merge_source.url2;
- }
- }
-
- *left = svn_wc_conflict_version_create(
- src_repos_url,
- svn_uri__is_child(src_repos_url, left_url, merge_b->pool),
- merge_b->merge_source.rev1, node_kind, merge_b->pool);
-
- *right = svn_wc_conflict_version_create(
- src_repos_url,
- svn_uri__is_child(src_repos_url, right_url, merge_b->pool),
- merge_b->merge_source.rev2, node_kind, merge_b->pool);
-
- return SVN_NO_ERROR;
-}
-
-/* Set *CONFLICT to a new tree-conflict description allocated in MERGE_B->pool,
- * populated with information from MERGE_B and the other parameters.
- * See tree_conflict() for the other parameters.
- */
-static svn_error_t*
-make_tree_conflict(svn_wc_conflict_description2_t **conflict,
- merge_cmd_baton_t *merge_b,
- const char *victim_abspath,
- svn_node_kind_t node_kind,
- svn_wc_conflict_action_t action,
- svn_wc_conflict_reason_t reason)
-{
- const svn_wc_conflict_version_t *left;
- const svn_wc_conflict_version_t *right;
+ const char *child = svn_dirent_skip_ancestor(target->abspath,
+ victim_abspath);
+ const char *left_relpath, *right_relpath;
- SVN_ERR(make_conflict_versions(&left, &right, victim_abspath, node_kind,
- merge_b));
-
- *conflict = svn_wc_conflict_description_create_tree2(
- victim_abspath, node_kind, svn_wc_operation_merge,
- left, right, merge_b->pool);
-
- (*conflict)->action = action;
- (*conflict)->reason = reason;
-
- return SVN_NO_ERROR;
-}
-
-/* Record a tree conflict in the WC, unless this is a dry run or a record-
- * only merge, or if a tree conflict is already flagged for the VICTIM_PATH.
- * (The latter can happen if a merge-tracking-aware merge is doing multiple
- * editor drives because of a gap in the range of eligible revisions.)
- *
- * The tree conflict, with its victim specified by VICTIM_PATH, is
- * assumed to have happened during a merge using merge baton MERGE_B.
- *
- * NODE_KIND must be the node kind of "old" and "theirs" and "mine";
- * this function cannot cope with node kind clashes.
- * ACTION and REASON correspond to the fields
- * of the same names in svn_wc_tree_conflict_description_t.
- */
-static svn_error_t*
-tree_conflict(merge_cmd_baton_t *merge_b,
- const char *victim_abspath,
- svn_node_kind_t node_kind,
- svn_wc_conflict_action_t action,
- svn_wc_conflict_reason_t reason)
-{
- const svn_wc_conflict_description2_t *existing_conflict;
- svn_wc_conflict_description2_t *conflict;
-
- if (merge_b->record_only || merge_b->dry_run)
- return SVN_NO_ERROR;
-
- SVN_ERR(svn_wc__get_tree_conflict(&existing_conflict, merge_b->ctx->wc_ctx,
- victim_abspath, merge_b->pool,
- merge_b->pool));
- if (existing_conflict == NULL)
- {
- /* There is no existing tree conflict so it is safe to add one. */
- SVN_ERR(make_tree_conflict(&conflict, merge_b, victim_abspath,
- node_kind, action, reason));
- SVN_ERR(svn_wc__add_tree_conflict(merge_b->ctx->wc_ctx, conflict,
- merge_b->pool));
-
- if (merge_b->conflicted_paths == NULL)
- merge_b->conflicted_paths = apr_hash_make(merge_b->pool);
- victim_abspath = apr_pstrdup(merge_b->pool, victim_abspath);
-
- apr_hash_set(merge_b->conflicted_paths, victim_abspath,
- APR_HASH_KEY_STRING, victim_abspath);
- }
-
- return SVN_NO_ERROR;
-}
-
-/* Similar to tree_conflict(), but if this is an "add" action and there
- is an existing tree conflict on the victim with a "delete" action, then
- combine the two conflicts into a single conflict with a "replace" action. */
-static svn_error_t*
-tree_conflict_on_add(merge_cmd_baton_t *merge_b,
- const char *victim_abspath,
- svn_node_kind_t node_kind,
- svn_wc_conflict_action_t action,
- svn_wc_conflict_reason_t reason)
-{
- const svn_wc_conflict_description2_t *existing_conflict;
- svn_wc_conflict_description2_t *conflict;
-
- if (merge_b->record_only || merge_b->dry_run)
- return SVN_NO_ERROR;
-
- /* Construct the new conflict first compare the new conflict with
- a possibly existing one. */
- SVN_ERR(make_tree_conflict(&conflict, merge_b, victim_abspath,
- node_kind, action, reason));
-
- SVN_ERR(svn_wc__get_tree_conflict(&existing_conflict, merge_b->ctx->wc_ctx,
- victim_abspath, merge_b->pool,
- merge_b->pool));
-
- if (existing_conflict == NULL)
- {
- /* There is no existing tree conflict so it is safe to add one. */
- SVN_ERR(svn_wc__add_tree_conflict(merge_b->ctx->wc_ctx, conflict,
- merge_b->pool));
-
- if (merge_b->conflicted_paths == NULL)
- merge_b->conflicted_paths = apr_hash_make(merge_b->pool);
- victim_abspath = apr_pstrdup(merge_b->pool, victim_abspath);
-
- apr_hash_set(merge_b->conflicted_paths, victim_abspath,
- APR_HASH_KEY_STRING, victim_abspath);
- }
- else if (existing_conflict->action == svn_wc_conflict_action_delete &&
- conflict->action == svn_wc_conflict_action_add)
- {
- /* There is already a tree conflict raised by a previous incoming
- * change that attempted to delete the item (whether in this same
- * merge operation or not). Change the existing conflict to note
- * that the incoming change is replacement. */
-
- /* Remove the existing tree-conflict so we can add a new one.*/
- SVN_ERR(svn_wc__del_tree_conflict(merge_b->ctx->wc_ctx,
- victim_abspath, merge_b->pool));
-
- /* Preserve the reason which caused the first conflict,
- * re-label the incoming change as 'replacement', and update
- * version info for the left version of the conflict. */
- conflict->reason = existing_conflict->reason;
- conflict->action = svn_wc_conflict_action_replace;
- conflict->src_left_version = svn_wc_conflict_version_dup(
- existing_conflict->src_left_version,
- merge_b->pool);
-
- SVN_ERR(svn_wc__add_tree_conflict(merge_b->ctx->wc_ctx, conflict,
- merge_b->pool));
-
- if (merge_b->conflicted_paths == NULL)
- merge_b->conflicted_paths = apr_hash_make(merge_b->pool);
- victim_abspath = apr_pstrdup(merge_b->pool, victim_abspath);
-
- apr_hash_set(merge_b->conflicted_paths, victim_abspath,
- APR_HASH_KEY_STRING, victim_abspath);
- }
+ SVN_ERR_ASSERT(child != NULL);
+ left_relpath = svn_client__pathrev_relpath(merge_source->loc1,
+ scratch_pool);
+ right_relpath = svn_client__pathrev_relpath(merge_source->loc2,
+ scratch_pool);
+
+ *left = svn_wc_conflict_version_create2(
+ merge_source->loc1->repos_root_url,
+ merge_source->loc1->repos_uuid,
+ svn_relpath_join(left_relpath, child, scratch_pool),
+ merge_source->loc1->rev, node_kind, result_pool);
+
+ *right = svn_wc_conflict_version_create2(
+ merge_source->loc2->repos_root_url,
+ merge_source->loc2->repos_uuid,
+ svn_relpath_join(right_relpath, child, scratch_pool),
+ merge_source->loc2->rev, node_kind, result_pool);
- /* In any other cases, we don't touch the existing conflict. */
return SVN_NO_ERROR;
}
-
/* Helper for filter_self_referential_mergeinfo()
*MERGEINFO is a non-empty, non-null collection of mergeinfo.
@@ -666,7 +634,7 @@ split_mergeinfo_on_revision(svn_mergeinfo_t *younger_mergeinfo,
{
int i;
const char *merge_source_path = svn__apr_hash_index_key(hi);
- apr_array_header_t *rangelist = svn__apr_hash_index_val(hi);
+ svn_rangelist_t *rangelist = svn__apr_hash_index_val(hi);
svn_pool_clear(iterpool);
@@ -688,7 +656,7 @@ split_mergeinfo_on_revision(svn_mergeinfo_t *younger_mergeinfo,
than REVISION. Remove the younger rangelists from
*MERGEINFO and put them in *YOUNGER_MERGEINFO. */
int j;
- apr_array_header_t *younger_rangelist =
+ svn_rangelist_t *younger_rangelist =
apr_array_make(pool, 1, sizeof(svn_merge_range_t *));
for (j = i; j < rangelist->nelts; j++)
@@ -713,9 +681,8 @@ split_mergeinfo_on_revision(svn_mergeinfo_t *younger_mergeinfo,
ranges from *MERGEINFO */
if (!(*younger_mergeinfo))
*younger_mergeinfo = apr_hash_make(pool);
- apr_hash_set(*younger_mergeinfo,
- (const char *)merge_source_path,
- APR_HASH_KEY_STRING, younger_rangelist);
+ svn_hash_sets(*younger_mergeinfo, merge_source_path,
+ younger_rangelist);
SVN_ERR(svn_mergeinfo_remove2(mergeinfo, *younger_mergeinfo,
*mergeinfo, TRUE, pool, iterpool));
break; /* ...out of for (i = 0; i < rangelist->nelts; i++) */
@@ -758,37 +725,31 @@ omit_mergeinfo_changes(apr_array_header_t **trimmed_propchanges,
/* Helper for merge_props_changed().
*PROPS is an array of svn_prop_t structures representing regular properties
- to be added to the working copy LOCAL_ABSPATH.
+ to be added to the working copy TARGET_ABSPATH.
- HONOR_MERGEINFO determines whether mergeinfo will be honored by this
- function (when applicable).
+ The merge source and target are assumed to be in the same repository.
- If mergeinfo is not being honored, SAME_REPOS is true, and
- REINTEGRATE_MERGE is FALSE do nothing. Otherwise, if
- SAME_REPOS is false, then filter out all mergeinfo
- property additions (Issue #3383) from *PROPS. If SAME_REPOS is
- true then filter out mergeinfo property additions to LOCAL_ABSPATH when
- those additions refer to the same line of history as LOCAL_ABSPATH as
+ Filter out mergeinfo property additions to TARGET_ABSPATH when
+ those additions refer to the same line of history as TARGET_ABSPATH as
described below.
- If mergeinfo is being honored and SAME_REPOS is true
- then examine the added mergeinfo, looking at each range (or single rev)
+ Examine the added mergeinfo, looking at each range (or single rev)
of each source path. If a source_path/range refers to the same line of
- history as LOCAL_ABSPATH (pegged at its base revision), then filter out
+ history as TARGET_ABSPATH (pegged at its base revision), then filter out
that range. If the entire rangelist for a given path is filtered then
filter out the path as well.
- Use RA_SESSION for any communication to the repository, and CTX for any
- further client operations.
+ RA_SESSION is an open RA session to the repository
+ in which both the source and target live, else RA_SESSION is not used. It
+ may be temporarily reparented as needed by this function.
+
+ Use CTX for any further client operations.
If any filtering occurs, set outgoing *PROPS to a shallow copy (allocated
in POOL) of incoming *PROPS minus the filtered mergeinfo. */
-static svn_error_t*
+static svn_error_t *
filter_self_referential_mergeinfo(apr_array_header_t **props,
- const char *local_abspath,
- svn_boolean_t honor_mergeinfo,
- svn_boolean_t same_repos,
- svn_boolean_t reintegrate_merge,
+ const char *target_abspath,
svn_ra_session_t *ra_session,
svn_client_ctx_t *ctx,
apr_pool_t *pool)
@@ -796,37 +757,22 @@ filter_self_referential_mergeinfo(apr_array_header_t **props,
apr_array_header_t *adjusted_props;
int i;
apr_pool_t *iterpool;
- svn_boolean_t is_added;
- svn_revnum_t base_revision;
-
- /* Issue #3383: We don't want mergeinfo from a foreign repos.
-
- If this is a merge from a foreign repository we must strip all
- incoming mergeinfo (including mergeinfo deletions). Otherwise if
- this property isn't mergeinfo or is NULL valued (i.e. prop removal)
- or empty mergeinfo it does not require any special handling. There
- is nothing to filter out of empty mergeinfo and the concept of
- filtering doesn't apply if we are trying to remove mergeinfo
- entirely. */
- if (! same_repos)
- return svn_error_trace(omit_mergeinfo_changes(props, *props, pool));
-
- /* If we aren't honoring mergeinfo and this is a merge from the
- same repository, then get outta here. If this is a reintegrate
- merge or a merge from a foreign repository we still need to
- filter regardless of whether we are honoring mergeinfo or not. */
- if (! honor_mergeinfo
- && ! reintegrate_merge)
- return SVN_NO_ERROR;
+ svn_boolean_t is_copy;
+ const char *repos_relpath;
+ svn_client__pathrev_t target_base;
- /* If this is a merge from the same repository and PATH itself has been
- added there is no need to filter. */
- SVN_ERR(svn_wc__node_is_added(&is_added, ctx->wc_ctx, local_abspath, pool));
- if (is_added)
- return SVN_NO_ERROR;
+ /* If PATH itself has been added there is no need to filter. */
+ SVN_ERR(svn_wc__node_get_origin(&is_copy, &target_base.rev, &repos_relpath,
+ &target_base.repos_root_url,
+ &target_base.repos_uuid, NULL,
+ ctx->wc_ctx, target_abspath, FALSE,
+ pool, pool));
- SVN_ERR(svn_wc__node_get_base_rev(&base_revision, ctx->wc_ctx,
- local_abspath, pool));
+ if (is_copy || !repos_relpath)
+ return SVN_NO_ERROR; /* A copy or a local addition */
+
+ target_base.url = svn_path_url_add_component2(target_base.repos_root_url,
+ repos_relpath, pool);
adjusted_props = apr_array_make(pool, (*props)->nelts, sizeof(svn_prop_t));
iterpool = svn_pool_create(pool);
@@ -837,10 +783,13 @@ filter_self_referential_mergeinfo(apr_array_header_t **props,
svn_mergeinfo_t mergeinfo, younger_mergeinfo;
svn_mergeinfo_t filtered_mergeinfo = NULL;
svn_mergeinfo_t filtered_younger_mergeinfo = NULL;
- const char *target_url;
- const char *old_url = NULL;
svn_error_t *err;
+ /* If this property isn't mergeinfo or is NULL valued (i.e. prop removal)
+ or empty mergeinfo it does not require any special handling. There
+ is nothing to filter out of empty mergeinfo and the concept of
+ filtering doesn't apply if we are trying to remove mergeinfo
+ entirely. */
if ((strcmp(prop->name, SVN_PROP_MERGEINFO) != 0)
|| (! prop->value) /* Removal of mergeinfo */
|| (! prop->value->len)) /* Empty mergeinfo */
@@ -852,13 +801,6 @@ filter_self_referential_mergeinfo(apr_array_header_t **props,
svn_pool_clear(iterpool);
/* Non-empty mergeinfo; filter self-referential mergeinfo out. */
- /* Temporarily reparent our RA session to the merge
- target's URL. */
- SVN_ERR(svn_client_url_from_path2(&target_url, local_abspath,
- ctx, iterpool, iterpool));
- SVN_ERR(svn_client__ensure_ra_session_url(&old_url,
- ra_session,
- target_url, iterpool));
/* Parse the incoming mergeinfo to allow easier manipulation. */
err = svn_mergeinfo_parse(&mergeinfo, prop->value->data, iterpool);
@@ -871,12 +813,6 @@ filter_self_referential_mergeinfo(apr_array_header_t **props,
{
svn_error_clear(err);
APR_ARRAY_PUSH(adjusted_props, svn_prop_t) = *prop;
-
- /* If we reparented RA_SESSION above, put it back
- to the original URL. */
- if (old_url)
- SVN_ERR(svn_ra_reparent(ra_session, old_url, iterpool));
-
continue;
}
else
@@ -911,7 +847,7 @@ filter_self_referential_mergeinfo(apr_array_header_t **props,
the cost of a roundtrip communication with the repository. */
SVN_ERR(split_mergeinfo_on_revision(&younger_mergeinfo,
&mergeinfo,
- base_revision,
+ target_base.rev,
iterpool));
/* Filter self-referential mergeinfo from younger_mergeinfo. */
@@ -928,9 +864,9 @@ filter_self_referential_mergeinfo(apr_array_header_t **props,
{
int j;
const char *source_path = svn__apr_hash_index_key(hi);
- apr_array_header_t *rangelist = svn__apr_hash_index_val(hi);
+ svn_rangelist_t *rangelist = svn__apr_hash_index_val(hi);
const char *merge_source_url;
- apr_array_header_t *adjusted_rangelist =
+ svn_rangelist_t *adjusted_rangelist =
apr_array_make(iterpool, 0, sizeof(svn_merge_range_t *));
merge_source_url =
@@ -940,39 +876,22 @@ filter_self_referential_mergeinfo(apr_array_header_t **props,
for (j = 0; j < rangelist->nelts; j++)
{
svn_error_t *err2;
- svn_opt_revision_t *start_revision;
- const char *start_url;
- svn_opt_revision_t peg_rev, rev1_opt, rev2_opt;
+ svn_client__pathrev_t *start_loc;
svn_merge_range_t *range =
APR_ARRAY_IDX(rangelist, j, svn_merge_range_t *);
- peg_rev.kind = svn_opt_revision_number;
- peg_rev.value.number = base_revision;
- rev1_opt.kind = svn_opt_revision_number;
- /* SVN_PROP_MERGEINFO only stores forward merges, so
- the start range of svn_merge_range_t RANGE is not
- inclusive. */
- rev1_opt.value.number = range->start + 1;
-
/* Because the merge source normalization code
ensures mergeinfo refers to real locations on
the same line of history, there's no need to
look at the whole range, just the start. */
- rev2_opt.kind = svn_opt_revision_unspecified;
/* Check if PATH@BASE_REVISION exists at
- RANGE->START on the same line of history. */
- err2 = svn_client__repos_locations(&start_url,
- &start_revision,
- NULL,
- NULL,
- ra_session,
- target_url,
- &peg_rev,
- &rev1_opt,
- &rev2_opt,
- ctx,
- iterpool);
+ RANGE->START on the same line of history.
+ (start+1 because RANGE->start is not inclusive.) */
+ err2 = svn_client__repos_location(&start_loc, ra_session,
+ &target_base,
+ range->start + 1,
+ ctx, iterpool, iterpool);
if (err2)
{
if (err2->apr_err == SVN_ERR_CLIENT_UNRELATED_RESOURCES
@@ -1017,7 +936,7 @@ filter_self_referential_mergeinfo(apr_array_header_t **props,
PATH@RANGE->END actually belong to some other
line of history and we want to record this
mergeinfo, not filter it. */
- if (strcmp(start_url, merge_source_url) != 0)
+ if (strcmp(start_loc->url, merge_source_url) != 0)
{
APR_ARRAY_PUSH(adjusted_rangelist,
svn_merge_range_t *) = range;
@@ -1033,8 +952,8 @@ filter_self_referential_mergeinfo(apr_array_header_t **props,
{
if (!filtered_younger_mergeinfo)
filtered_younger_mergeinfo = apr_hash_make(iterpool);
- apr_hash_set(filtered_younger_mergeinfo, source_path,
- APR_HASH_KEY_STRING, adjusted_rangelist);
+ svn_hash_sets(filtered_younger_mergeinfo, source_path,
+ adjusted_rangelist);
}
} /* Iteration over each merge source in younger_mergeinfo. */
@@ -1044,18 +963,11 @@ filter_self_referential_mergeinfo(apr_array_header_t **props,
if (mergeinfo)
{
svn_mergeinfo_t implicit_mergeinfo;
- svn_opt_revision_t peg_rev;
- peg_rev.kind = svn_opt_revision_number;
- peg_rev.value.number = base_revision;
SVN_ERR(svn_client__get_history_as_mergeinfo(
&implicit_mergeinfo, NULL,
- local_abspath, &peg_rev,
- base_revision,
- SVN_INVALID_REVNUM,
- ra_session,
- ctx,
- iterpool));
+ &target_base, target_base.rev, SVN_INVALID_REVNUM,
+ ra_session, ctx, iterpool));
/* Remove PATH's implicit mergeinfo from the incoming mergeinfo. */
SVN_ERR(svn_mergeinfo_remove2(&filtered_mergeinfo,
@@ -1063,16 +975,12 @@ filter_self_referential_mergeinfo(apr_array_header_t **props,
mergeinfo, TRUE, iterpool, iterpool));
}
- /* If we reparented RA_SESSION above, put it back
- to the original URL. */
- if (old_url)
- SVN_ERR(svn_ra_reparent(ra_session, old_url, iterpool));
-
/* Combine whatever older and younger filtered mergeinfo exists
into filtered_mergeinfo. */
if (filtered_mergeinfo && filtered_younger_mergeinfo)
- SVN_ERR(svn_mergeinfo_merge(filtered_mergeinfo,
- filtered_younger_mergeinfo, iterpool));
+ SVN_ERR(svn_mergeinfo_merge2(filtered_mergeinfo,
+ filtered_younger_mergeinfo, iterpool,
+ iterpool));
else if (filtered_younger_mergeinfo)
filtered_mergeinfo = filtered_younger_mergeinfo;
@@ -1099,32 +1007,41 @@ filter_self_referential_mergeinfo(apr_array_header_t **props,
return SVN_NO_ERROR;
}
-/* Used for both file and directory property merges. */
+/* Prepare a set of property changes PROPCHANGES to be used for a merge
+ operation on LOCAL_ABSPATH.
+
+ Remove all non-regular prop-changes (entry-props and WC-props).
+ Remove all non-mergeinfo prop-changes if it's a record-only merge.
+ Remove self-referential mergeinfo (### in some cases...)
+ Remove foreign-repository mergeinfo (### in some cases...)
+
+ Store the resulting property changes in *PROP_UPDATES.
+ Store information on where mergeinfo is updated in MERGE_B.
+
+ Used for both file and directory property merges. */
static svn_error_t *
-merge_props_changed(svn_wc_notify_state_t *state,
- svn_boolean_t *tree_conflicted,
- const char *local_abspath,
- const apr_array_header_t *propchanges,
- apr_hash_t *original_props,
- void *baton,
- apr_pool_t *scratch_pool)
+prepare_merge_props_changed(const apr_array_header_t **prop_updates,
+ const char *local_abspath,
+ const apr_array_header_t *propchanges,
+ merge_cmd_baton_t *merge_b,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
apr_array_header_t *props;
- merge_cmd_baton_t *merge_b = baton;
- svn_client_ctx_t *ctx = merge_b->ctx;
- svn_error_t *err;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+ /* We only want to merge "regular" version properties: by
+ definition, 'svn merge' shouldn't touch any data within .svn/ */
SVN_ERR(svn_categorize_props(propchanges, NULL, NULL, &props,
- scratch_pool));
+ result_pool));
/* If we are only applying mergeinfo changes then we need to do
additional filtering of PROPS so it contains only mergeinfo changes. */
if (merge_b->record_only && props->nelts)
{
apr_array_header_t *mergeinfo_props =
- apr_array_make(scratch_pool, 1, sizeof(svn_prop_t));
+ apr_array_make(result_pool, 1, sizeof(svn_prop_t));
int i;
for (i = 0; i < props->nelts; i++)
@@ -1140,665 +1057,1198 @@ merge_props_changed(svn_wc_notify_state_t *state,
props = mergeinfo_props;
}
- /* We only want to merge "regular" version properties: by
- definition, 'svn merge' shouldn't touch any data within .svn/ */
if (props->nelts)
{
+ /* Issue #3383: We don't want mergeinfo from a foreign repos.
+
+ If this is a merge from a foreign repository we must strip all
+ incoming mergeinfo (including mergeinfo deletions). */
+ if (! merge_b->same_repos)
+ SVN_ERR(omit_mergeinfo_changes(&props, props, result_pool));
+
/* If this is a forward merge then don't add new mergeinfo to
PATH that is already part of PATH's own history, see
http://svn.haxx.se/dev/archive-2008-09/0006.shtml. If the
merge sources are not ancestral then there is no concept of a
'forward' or 'reverse' merge and we filter unconditionally. */
- if (merge_b->merge_source.rev1 < merge_b->merge_source.rev2
- || !merge_b->sources_ancestral)
- SVN_ERR(filter_self_referential_mergeinfo(&props,
- local_abspath,
- HONOR_MERGEINFO(merge_b),
- merge_b->same_repos,
- merge_b->reintegrate_merge,
- merge_b->ra_session2,
- merge_b->ctx,
- scratch_pool));
-
- err = svn_wc_merge_props3(state, ctx->wc_ctx, local_abspath, NULL, NULL,
- original_props, props, merge_b->dry_run,
- ctx->conflict_func2, ctx->conflict_baton2,
- ctx->cancel_func, ctx->cancel_baton,
- scratch_pool);
+ if (merge_b->merge_source.loc1->rev < merge_b->merge_source.loc2->rev
+ || !merge_b->merge_source.ancestral)
+ {
+ if (HONOR_MERGEINFO(merge_b) || merge_b->reintegrate_merge)
+ SVN_ERR(filter_self_referential_mergeinfo(&props,
+ local_abspath,
+ merge_b->ra_session2,
+ merge_b->ctx,
+ result_pool));
+ }
+ }
+ *prop_updates = props;
- /* If this is not a dry run then make a record in BATON if we find a
- PATH where mergeinfo is added where none existed previously or PATH
- is having its existing mergeinfo deleted. */
- if (!merge_b->dry_run)
+ /* Make a record in BATON if we find a PATH where mergeinfo is added
+ where none existed previously or PATH is having its existing
+ mergeinfo deleted. */
+ if (props->nelts)
+ {
+ int i;
+
+ for (i = 0; i < props->nelts; ++i)
{
- int i;
+ svn_prop_t *prop = &APR_ARRAY_IDX(props, i, svn_prop_t);
- for (i = 0; i < props->nelts; ++i)
+ if (strcmp(prop->name, SVN_PROP_MERGEINFO) == 0)
{
- svn_prop_t *prop = &APR_ARRAY_IDX(props, i, svn_prop_t);
+ /* Does LOCAL_ABSPATH have any pristine mergeinfo? */
+ svn_boolean_t has_pristine_mergeinfo = FALSE;
+ apr_hash_t *pristine_props;
+
+ SVN_ERR(svn_wc_get_pristine_props(&pristine_props,
+ merge_b->ctx->wc_ctx,
+ local_abspath,
+ scratch_pool,
+ scratch_pool));
+
+ if (pristine_props
+ && svn_hash_gets(pristine_props, SVN_PROP_MERGEINFO))
+ has_pristine_mergeinfo = TRUE;
- if (strcmp(prop->name, SVN_PROP_MERGEINFO) == 0)
+ if (!has_pristine_mergeinfo && prop->value)
+ {
+ alloc_and_store_path(&merge_b->paths_with_new_mergeinfo,
+ local_abspath, merge_b->pool);
+ }
+ else if (has_pristine_mergeinfo && !prop->value)
{
- /* Does LOCAL_ABSPATH have any pristine mergeinfo? */
- svn_boolean_t has_pristine_mergeinfo = FALSE;
- apr_hash_t *pristine_props;
+ alloc_and_store_path(&merge_b->paths_with_deleted_mergeinfo,
+ local_abspath, merge_b->pool);
+ }
+ }
+ }
+ }
- SVN_ERR(svn_wc_get_pristine_props(&pristine_props,
- ctx->wc_ctx,
- local_abspath,
- scratch_pool,
- scratch_pool));
+ return SVN_NO_ERROR;
+}
- if (pristine_props
- && apr_hash_get(pristine_props, SVN_PROP_MERGEINFO,
- APR_HASH_KEY_STRING))
- has_pristine_mergeinfo = TRUE;
+#define CONFLICT_REASON_NONE ((svn_wc_conflict_reason_t)-1)
+#define CONFLICT_REASON_SKIP ((svn_wc_conflict_reason_t)-2)
+#define CONFLICT_REASON_SKIP_WC ((svn_wc_conflict_reason_t)-3)
- if (!has_pristine_mergeinfo && prop->value)
- {
- /* If BATON->PATHS_WITH_NEW_MERGEINFO needs to be
- allocated do so in BATON->POOL so it has a
- sufficient lifetime. */
- if (!merge_b->paths_with_new_mergeinfo)
- merge_b->paths_with_new_mergeinfo =
- apr_hash_make(merge_b->pool);
-
- apr_hash_set(merge_b->paths_with_new_mergeinfo,
- apr_pstrdup(merge_b->pool, local_abspath),
- APR_HASH_KEY_STRING, local_abspath);
- }
- else if (has_pristine_mergeinfo && !prop->value)
- {
- /* If BATON->PATHS_WITH_DELETED_MERGEINFO needs to be
- allocated do so in BATON->POOL so it has a
- sufficient lifetime. */
- if (!merge_b->paths_with_deleted_mergeinfo)
- merge_b->paths_with_deleted_mergeinfo =
- apr_hash_make(merge_b->pool);
-
- apr_hash_set(merge_b->paths_with_deleted_mergeinfo,
- apr_pstrdup(merge_b->pool, local_abspath),
- APR_HASH_KEY_STRING, local_abspath);
- }
- }
+/* Baton used for testing trees for being editted while performing tree
+ conflict detection for incoming deletes */
+struct dir_delete_baton_t
+{
+ /* Reference to dir baton of directory that is the root of the deletion */
+ struct merge_dir_baton_t *del_root;
+
+ /* Boolean indicating that some edit is found. Allows avoiding more work */
+ svn_boolean_t found_edit;
+
+ /* A list of paths that are compared. Kept up to date until FOUND_EDIT is
+ set to TRUE */
+ apr_hash_t *compared_abspaths;
+};
+
+/* Baton for the merge_dir_*() functions. Initialized in merge_dir_opened() */
+struct merge_dir_baton_t
+{
+ /* Reference to the parent baton, unless the parent is the anchor, in which
+ case PARENT_BATON is NULL */
+ struct merge_dir_baton_t *parent_baton;
+
+ /* The pool containing this baton. Use for RESULT_POOL for storing in this
+ baton */
+ apr_pool_t *pool;
+
+ /* This directory doesn't have a representation in the working copy, so any
+ operation on it will be skipped and possibly cause a tree conflict on the
+ shadow root */
+ svn_boolean_t shadowed;
+
+ /* This node or one of its descendants received operational changes from the
+ merge. If this node is the shadow root its tree conflict status has been
+ applied */
+ svn_boolean_t edited;
+
+ /* If a tree conflict will be installed once edited, it's reason. If a skip
+ should be produced its reason. Otherwise CONFLICT_REASON_NONE for no tree
+ conflict.
+
+ Special values:
+ CONFLICT_REASON_SKIP:
+ The node will be skipped with content and property state as stored in
+ SKIP_REASON.
+
+ CONFLICT_REASON_SKIP_WC:
+ The node will be skipped as an obstructing working copy.
+ */
+ svn_wc_conflict_reason_t tree_conflict_reason;
+ svn_wc_conflict_action_t tree_conflict_action;
+
+ /* When TREE_CONFLICT_REASON is CONFLICT_REASON_SKIP, the skip state to
+ add to the notification */
+ svn_wc_notify_state_t skip_reason;
+
+ /* TRUE if the node was added by this merge. Otherwise FALSE */
+ svn_boolean_t added;
+ svn_boolean_t add_is_replace; /* Add is second part of replace */
+
+ /* TRUE if we are taking over an existing directory as addition, otherwise
+ FALSE. */
+ svn_boolean_t add_existing;
+
+ /* NULL, or an hashtable mapping const char * local_abspaths to
+ const char *kind mapping, containing deleted nodes that still need a delete
+ notification (which may be a replaced notification if the node is not just
+ deleted) */
+ apr_hash_t *pending_deletes;
+
+ /* NULL, or an hashtable mapping const char * LOCAL_ABSPATHs to
+ a const svn_wc_conflict_description2_t * instance, describing the just
+ installed conflict */
+ apr_hash_t *new_tree_conflicts;
+
+ /* If not NULL, a reference to the information of the delete test that is
+ currently in progress. Allocated in the root-directory baton, referenced
+ from all descendants */
+ struct dir_delete_baton_t *delete_state;
+};
+
+/* Baton for the merge_dir_*() functions. Initialized in merge_file_opened() */
+struct merge_file_baton_t
+{
+ /* Reference to the parent baton, unless the parent is the anchor, in which
+ case PARENT_BATON is NULL */
+ struct merge_dir_baton_t *parent_baton;
+
+ /* This file doesn't have a representation in the working copy, so any
+ operation on it will be skipped and possibly cause a tree conflict
+ on the shadow root */
+ svn_boolean_t shadowed;
+
+ /* This node received operational changes from the merge. If this node
+ is the shadow root its tree conflict status has been applied */
+ svn_boolean_t edited;
+
+ /* If a tree conflict will be installed once edited, it's reason. If a skip
+ should be produced its reason. Some special values are defined. See the
+ merge_tree_baton_t for an explanation. */
+ svn_wc_conflict_reason_t tree_conflict_reason;
+ svn_wc_conflict_action_t tree_conflict_action;
+
+ /* When TREE_CONFLICT_REASON is CONFLICT_REASON_SKIP, the skip state to
+ add to the notification */
+ svn_wc_notify_state_t skip_reason;
+
+ /* TRUE if the node was added by this merge. Otherwise FALSE */
+ svn_boolean_t added;
+ svn_boolean_t add_is_replace; /* Add is second part of replace */
+};
+
+/* Forward declaration */
+static svn_error_t *
+notify_merge_begin(merge_cmd_baton_t *merge_b,
+ const char *local_abspath,
+ svn_boolean_t delete_action,
+ apr_pool_t *scratch_pool);
+
+/* Record the skip for future processing and (later) produce the
+ skip notification */
+static svn_error_t *
+record_skip(merge_cmd_baton_t *merge_b,
+ const char *local_abspath,
+ svn_node_kind_t kind,
+ svn_wc_notify_action_t action,
+ svn_wc_notify_state_t state,
+ struct merge_dir_baton_t *pdb,
+ apr_pool_t *scratch_pool)
+{
+ if (merge_b->record_only)
+ return SVN_NO_ERROR; /* ### Why? - Legacy compatibility */
+
+ if ((merge_b->merge_source.ancestral || merge_b->reintegrate_merge)
+ && !(pdb && pdb->shadowed))
+ {
+ store_path(merge_b->skipped_abspaths, local_abspath);
+ }
+
+ if (merge_b->ctx->notify_func2)
+ {
+ svn_wc_notify_t *notify;
+
+ SVN_ERR(notify_merge_begin(merge_b, local_abspath, FALSE, scratch_pool));
+
+ notify = svn_wc_create_notify(local_abspath, action, scratch_pool);
+ notify->kind = kind;
+ notify->content_state = notify->prop_state = state;
+
+ (*merge_b->ctx->notify_func2)(merge_b->ctx->notify_baton2, notify,
+ scratch_pool);
+ }
+ return SVN_NO_ERROR;
+}
+
+/* Record a tree conflict in the WC, unless this is a dry run or a record-
+ * only merge, or if a tree conflict is already flagged for the VICTIM_PATH.
+ * (The latter can happen if a merge-tracking-aware merge is doing multiple
+ * editor drives because of a gap in the range of eligible revisions.)
+ *
+ * The tree conflict, with its victim specified by VICTIM_PATH, is
+ * assumed to have happened during a merge using merge baton MERGE_B.
+ *
+ * NODE_KIND must be the node kind of "old" and "theirs" and "mine";
+ * this function cannot cope with node kind clashes.
+ * ACTION and REASON correspond to the fields
+ * of the same names in svn_wc_tree_conflict_description_t.
+ */
+static svn_error_t *
+record_tree_conflict(merge_cmd_baton_t *merge_b,
+ const char *local_abspath,
+ struct merge_dir_baton_t *parent_baton,
+ svn_node_kind_t node_kind,
+ svn_wc_conflict_action_t action,
+ svn_wc_conflict_reason_t reason,
+ const svn_wc_conflict_description2_t *existing_conflict,
+ svn_boolean_t notify_tc,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc_context_t *wc_ctx = merge_b->ctx->wc_ctx;
+
+ if (merge_b->record_only)
+ return SVN_NO_ERROR;
+
+ if (merge_b->merge_source.ancestral
+ || merge_b->reintegrate_merge)
+ {
+ store_path(merge_b->tree_conflicted_abspaths, local_abspath);
+ }
+
+ alloc_and_store_path(&merge_b->conflicted_paths, local_abspath,
+ merge_b->pool);
+
+ if (!merge_b->dry_run)
+ {
+ svn_wc_conflict_description2_t *conflict;
+ const svn_wc_conflict_version_t *left;
+ const svn_wc_conflict_version_t *right;
+ apr_pool_t *result_pool = parent_baton ? parent_baton->pool
+ : scratch_pool;
+
+ if (reason == svn_wc_conflict_reason_deleted)
+ {
+ const char *moved_to_abspath;
+
+ SVN_ERR(svn_wc__node_was_moved_away(&moved_to_abspath, NULL,
+ wc_ctx, local_abspath,
+ scratch_pool, scratch_pool));
+
+ if (moved_to_abspath)
+ {
+ /* Local abspath itself has been moved away. If only a
+ descendant is moved away, we call the node itself deleted */
+ reason = svn_wc_conflict_reason_moved_away;
}
}
+ else if (reason == svn_wc_conflict_reason_added)
+ {
+ const char *moved_from_abspath;
+ SVN_ERR(svn_wc__node_was_moved_here(&moved_from_abspath, NULL,
+ wc_ctx, local_abspath,
+ scratch_pool, scratch_pool));
+ if (moved_from_abspath)
+ reason = svn_wc_conflict_reason_moved_here;
+ }
+
+ SVN_ERR(make_conflict_versions(&left, &right, local_abspath, node_kind,
+ &merge_b->merge_source, merge_b->target,
+ result_pool, scratch_pool));
- if (err && (err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND
- || err->apr_err == SVN_ERR_WC_PATH_UNEXPECTED_STATUS))
+ /* Fix up delete of file, add of dir replacement (or other way around) */
+ if (existing_conflict != NULL && existing_conflict->src_left_version)
+ left = existing_conflict->src_left_version;
+
+ conflict = svn_wc_conflict_description_create_tree2(
+ local_abspath, node_kind, svn_wc_operation_merge,
+ left, right, result_pool);
+
+ conflict->action = action;
+ conflict->reason = reason;
+
+ /* May return SVN_ERR_WC_PATH_UNEXPECTED_STATUS */
+ if (existing_conflict)
+ SVN_ERR(svn_wc__del_tree_conflict(wc_ctx, local_abspath,
+ scratch_pool));
+
+ SVN_ERR(svn_wc__add_tree_conflict(merge_b->ctx->wc_ctx, conflict,
+ scratch_pool));
+
+ if (parent_baton)
{
- /* If the entry doesn't exist in the wc, this is a tree-conflict. */
- if (state)
- *state = svn_wc_notify_state_missing;
- if (tree_conflicted)
- *tree_conflicted = TRUE;
- svn_error_clear(err);
- return SVN_NO_ERROR;
+ if (! parent_baton->new_tree_conflicts)
+ parent_baton->new_tree_conflicts = apr_hash_make(result_pool);
+
+ svn_hash_sets(parent_baton->new_tree_conflicts,
+ apr_pstrdup(result_pool, local_abspath),
+ conflict);
}
- else if (err)
- return svn_error_trace(err);
+
+ /* ### TODO: Store in parent baton */
+ }
+
+ /* On a replacement we currently get two tree conflicts */
+ if (merge_b->ctx->notify_func2 && notify_tc)
+ {
+ svn_wc_notify_t *notify;
+
+ SVN_ERR(notify_merge_begin(merge_b, local_abspath, FALSE, scratch_pool));
+
+ notify = svn_wc_create_notify(local_abspath, svn_wc_notify_tree_conflict,
+ scratch_pool);
+ notify->kind = node_kind;
+
+ (*merge_b->ctx->notify_func2)(merge_b->ctx->notify_baton2, notify,
+ scratch_pool);
}
return SVN_NO_ERROR;
}
-/* An svn_wc_diff_callbacks4_t function. */
+/* Record the add for future processing and produce the
+ update_add notification
+ */
static svn_error_t *
-merge_dir_props_changed(svn_wc_notify_state_t *state,
- svn_boolean_t *tree_conflicted,
- const char *local_abspath,
- svn_boolean_t dir_was_added,
- const apr_array_header_t *propchanges,
- apr_hash_t *original_props,
- void *diff_baton,
- apr_pool_t *scratch_pool)
+record_update_add(merge_cmd_baton_t *merge_b,
+ const char *local_abspath,
+ svn_node_kind_t kind,
+ svn_boolean_t notify_replaced,
+ apr_pool_t *scratch_pool)
{
- merge_cmd_baton_t *merge_b = diff_baton;
- svn_wc_notify_state_t obstr_state;
+ if (merge_b->merge_source.ancestral || merge_b->reintegrate_merge)
+ {
+ store_path(merge_b->merged_abspaths, local_abspath);
+ }
- SVN_ERR(perform_obstruction_check(&obstr_state, NULL, NULL,
- NULL,
- merge_b, local_abspath, svn_node_dir,
- scratch_pool));
+ if (merge_b->ctx->notify_func2)
+ {
+ svn_wc_notify_t *notify;
+ svn_wc_notify_action_t action = svn_wc_notify_update_add;
+
+ SVN_ERR(notify_merge_begin(merge_b, local_abspath, FALSE, scratch_pool));
+
+ if (notify_replaced)
+ action = svn_wc_notify_update_replace;
+
+ notify = svn_wc_create_notify(local_abspath, action, scratch_pool);
+ notify->kind = kind;
+
+ (*merge_b->ctx->notify_func2)(merge_b->ctx->notify_baton2, notify,
+ scratch_pool);
+ }
- if (obstr_state != svn_wc_notify_state_inapplicable)
+ return SVN_NO_ERROR;
+}
+
+/* Record the update for future processing and produce the
+ update_update notification */
+static svn_error_t *
+record_update_update(merge_cmd_baton_t *merge_b,
+ const char *local_abspath,
+ svn_node_kind_t kind,
+ svn_wc_notify_state_t content_state,
+ svn_wc_notify_state_t prop_state,
+ apr_pool_t *scratch_pool)
+{
+ if (merge_b->merge_source.ancestral || merge_b->reintegrate_merge)
{
- if (state)
- *state = obstr_state;
- return SVN_NO_ERROR;
+ store_path(merge_b->merged_abspaths, local_abspath);
+ }
+
+ if (merge_b->ctx->notify_func2)
+ {
+ svn_wc_notify_t *notify;
+
+ SVN_ERR(notify_merge_begin(merge_b, local_abspath, FALSE, scratch_pool));
+
+ notify = svn_wc_create_notify(local_abspath, svn_wc_notify_update_update,
+ scratch_pool);
+ notify->kind = kind;
+ notify->content_state = content_state;
+ notify->prop_state = prop_state;
+
+ (*merge_b->ctx->notify_func2)(merge_b->ctx->notify_baton2, notify,
+ scratch_pool);
}
- if (dir_was_added
- && merge_b->dry_run
- && dry_run_added_p(merge_b, local_abspath))
+ return SVN_NO_ERROR;
+}
+
+/* Record the delete for future processing and for (later) producing the
+ update_delete notification */
+static svn_error_t *
+record_update_delete(merge_cmd_baton_t *merge_b,
+ struct merge_dir_baton_t *parent_db,
+ const char *local_abspath,
+ svn_node_kind_t kind,
+ apr_pool_t *scratch_pool)
+{
+ /* Update the lists of merged, skipped, tree-conflicted and added paths. */
+ if (merge_b->merge_source.ancestral
+ || merge_b->reintegrate_merge)
{
- return SVN_NO_ERROR; /* We can't do a real prop merge for added dirs */
+ /* Issue #4166: If a previous merge added NOTIFY_ABSPATH, but we
+ are now deleting it, then remove it from the list of added
+ paths. */
+ svn_hash_sets(merge_b->added_abspaths, local_abspath, NULL);
+ store_path(merge_b->merged_abspaths, local_abspath);
}
- return svn_error_trace(merge_props_changed(state,
- tree_conflicted,
- local_abspath,
- propchanges,
- original_props,
- diff_baton,
- scratch_pool));
+ SVN_ERR(notify_merge_begin(merge_b, local_abspath, TRUE, scratch_pool));
+
+ if (parent_db)
+ {
+ const char *dup_abspath = apr_pstrdup(parent_db->pool, local_abspath);
+
+ if (!parent_db->pending_deletes)
+ parent_db->pending_deletes = apr_hash_make(parent_db->pool);
+
+ svn_hash_sets(parent_db->pending_deletes, dup_abspath,
+ svn_node_kind_to_word(kind));
+ }
+
+ return SVN_NO_ERROR;
}
-/* Contains any state collected while resolving conflicts. */
-typedef struct conflict_resolver_baton_t
+/* Notify the pending 'D'eletes, that were waiting to see if a matching 'A'dd
+ might make them a 'R'eplace. */
+static svn_error_t *
+handle_pending_notifications(merge_cmd_baton_t *merge_b,
+ struct merge_dir_baton_t *db,
+ apr_pool_t *scratch_pool)
{
- /* The wrapped callback and baton. */
- svn_wc_conflict_resolver_func2_t wrapped_func;
- void *wrapped_baton;
+ if (merge_b->ctx->notify_func2 && db->pending_deletes)
+ {
+ apr_hash_index_t *hi;
- /* The list of any paths which remained in conflict after a
- resolution attempt was made. */
- apr_hash_t **conflicted_paths;
+ for (hi = apr_hash_first(scratch_pool, db->pending_deletes);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ const char *del_abspath = svn__apr_hash_index_key(hi);
+ svn_wc_notify_t *notify;
- /* Pool used in notification_receiver() to avoid the iteration
- sub-pool which is passed in, then subsequently destroyed. */
- apr_pool_t *pool;
-} conflict_resolver_baton_t;
+ notify = svn_wc_create_notify(del_abspath,
+ svn_wc_notify_update_delete,
+ scratch_pool);
+ notify->kind = svn_node_kind_from_word(
+ svn__apr_hash_index_val(hi));
+
+ (*merge_b->ctx->notify_func2)(merge_b->ctx->notify_baton2,
+ notify, scratch_pool);
+ }
+
+ db->pending_deletes = NULL;
+ }
+ return SVN_NO_ERROR;
+}
-/* An implementation of the svn_wc_conflict_resolver_func_t interface.
- We keep a record of paths which remain in conflict after any
- resolution attempt from BATON->wrapped_func. */
+/* Helper function for the merge_dir_*() and merge_file_*() functions.
+
+ Installs and notifies pre-recorded tree conflicts and skips for
+ ancestors of operational merges
+ */
static svn_error_t *
-conflict_resolver(svn_wc_conflict_result_t **result,
- const svn_wc_conflict_description2_t *description,
- void *baton,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+mark_dir_edited(merge_cmd_baton_t *merge_b,
+ struct merge_dir_baton_t *db,
+ const char *local_abspath,
+ apr_pool_t *scratch_pool)
{
- svn_error_t *err;
- conflict_resolver_baton_t *conflict_b = baton;
+ /* ### Too much common code with mark_file_edited */
+ if (db->edited)
+ return SVN_NO_ERROR;
- if (conflict_b->wrapped_func)
- err = (*conflict_b->wrapped_func)(result, description,
- conflict_b->wrapped_baton,
- result_pool,
- scratch_pool);
- else
+ if (db->parent_baton && !db->parent_baton->edited)
{
- /* If we have no wrapped callback to invoke, then we still need
- to behave like a proper conflict-callback ourselves. */
- *result = svn_wc_create_conflict_result(svn_wc_conflict_choose_postpone,
- NULL, result_pool);
- err = SVN_NO_ERROR;
+ const char *dir_abspath = svn_dirent_dirname(local_abspath,
+ scratch_pool);
+
+ SVN_ERR(mark_dir_edited(merge_b, db->parent_baton, dir_abspath,
+ scratch_pool));
}
- /* Keep a record of paths still in conflict after the resolution attempt. */
- if ((! conflict_b->wrapped_func)
- || (*result && ((*result)->choice == svn_wc_conflict_choose_postpone)))
+ db->edited = TRUE;
+
+ if (! db->shadowed)
+ return SVN_NO_ERROR; /* Easy out */
+
+ if (db->parent_baton
+ && db->parent_baton->delete_state
+ && db->tree_conflict_reason != CONFLICT_REASON_NONE)
{
- const char *conflicted_path = apr_pstrdup(conflict_b->pool,
- description->local_abspath);
+ db->parent_baton->delete_state->found_edit = TRUE;
+ }
+ else if (db->tree_conflict_reason == CONFLICT_REASON_SKIP
+ || db->tree_conflict_reason == CONFLICT_REASON_SKIP_WC)
+ {
+ /* open_directory() decided not to flag a tree conflict, but
+ for clarity we produce a skip for this node that
+ most likely isn't touched by the merge itself */
- if (*conflict_b->conflicted_paths == NULL)
- *conflict_b->conflicted_paths = apr_hash_make(conflict_b->pool);
+ if (merge_b->ctx->notify_func2)
+ {
+ svn_wc_notify_t *notify;
- apr_hash_set(*conflict_b->conflicted_paths, conflicted_path,
- APR_HASH_KEY_STRING, conflicted_path);
+ SVN_ERR(notify_merge_begin(merge_b, local_abspath, FALSE,
+ scratch_pool));
+
+ notify = svn_wc_create_notify(
+ local_abspath,
+ (db->tree_conflict_reason == CONFLICT_REASON_SKIP)
+ ? svn_wc_notify_skip
+ : svn_wc_notify_update_skip_obstruction,
+ scratch_pool);
+ notify->kind = svn_node_dir;
+ notify->content_state = notify->prop_state = db->skip_reason;
+
+ (*merge_b->ctx->notify_func2)(merge_b->ctx->notify_baton2,
+ notify,
+ scratch_pool);
+ }
+
+ if (merge_b->merge_source.ancestral
+ || merge_b->reintegrate_merge)
+ {
+ store_path(merge_b->skipped_abspaths, local_abspath);
+ }
+ }
+ else if (db->tree_conflict_reason != CONFLICT_REASON_NONE)
+ {
+ /* open_directory() decided that a tree conflict should be raised */
+
+ SVN_ERR(record_tree_conflict(merge_b, local_abspath, db->parent_baton,
+ svn_node_dir, db->tree_conflict_action,
+ db->tree_conflict_reason,
+ NULL, TRUE,
+ scratch_pool));
}
- return svn_error_trace(err);
+ return SVN_NO_ERROR;
}
-/* An svn_wc_diff_callbacks4_t function. */
+/* Helper function for the merge_file_*() functions.
+
+ Installs and notifies pre-recorded tree conflicts and skips for
+ ancestors of operational merges
+ */
static svn_error_t *
-merge_file_opened(svn_boolean_t *tree_conflicted,
- svn_boolean_t *skip,
- const char *path,
- svn_revnum_t rev,
- void *diff_baton,
- apr_pool_t *scratch_pool)
+mark_file_edited(merge_cmd_baton_t *merge_b,
+ struct merge_file_baton_t *fb,
+ const char *local_abspath,
+ apr_pool_t *scratch_pool)
{
+ /* ### Too much common code with mark_dir_edited */
+ if (fb->edited)
+ return SVN_NO_ERROR;
+
+ if (fb->parent_baton && !fb->parent_baton->edited)
+ {
+ const char *dir_abspath = svn_dirent_dirname(local_abspath,
+ scratch_pool);
+
+ SVN_ERR(mark_dir_edited(merge_b, fb->parent_baton, dir_abspath,
+ scratch_pool));
+ }
+
+ fb->edited = TRUE;
+
+ if (! fb->shadowed)
+ return SVN_NO_ERROR; /* Easy out */
+
+ if (fb->parent_baton
+ && fb->parent_baton->delete_state
+ && fb->tree_conflict_reason != CONFLICT_REASON_NONE)
+ {
+ fb->parent_baton->delete_state->found_edit = TRUE;
+ }
+ else if (fb->tree_conflict_reason == CONFLICT_REASON_SKIP
+ || fb->tree_conflict_reason == CONFLICT_REASON_SKIP_WC)
+ {
+ /* open_directory() decided not to flag a tree conflict, but
+ for clarity we produce a skip for this node that
+ most likely isn't touched by the merge itself */
+
+ if (merge_b->ctx->notify_func2)
+ {
+ svn_wc_notify_t *notify;
+
+ SVN_ERR(notify_merge_begin(merge_b, local_abspath, FALSE,
+ scratch_pool));
+
+ notify = svn_wc_create_notify(local_abspath, svn_wc_notify_skip,
+ scratch_pool);
+ notify->kind = svn_node_file;
+ notify->content_state = notify->prop_state = fb->skip_reason;
+
+ (*merge_b->ctx->notify_func2)(merge_b->ctx->notify_baton2,
+ notify,
+ scratch_pool);
+ }
+
+ if (merge_b->merge_source.ancestral
+ || merge_b->reintegrate_merge)
+ {
+ store_path(merge_b->skipped_abspaths, local_abspath);
+ }
+ }
+ else if (fb->tree_conflict_reason != CONFLICT_REASON_NONE)
+ {
+ /* open_file() decided that a tree conflict should be raised */
+
+ SVN_ERR(record_tree_conflict(merge_b, local_abspath, fb->parent_baton,
+ svn_node_file, fb->tree_conflict_action,
+ fb->tree_conflict_reason,
+ NULL, TRUE,
+ scratch_pool));
+ }
+
return SVN_NO_ERROR;
}
-/* An svn_wc_diff_callbacks4_t function. */
+/* An svn_diff_tree_processor_t function.
+
+ Called before either merge_file_changed(), merge_file_added(),
+ merge_file_deleted() or merge_file_closed(), unless it sets *SKIP to TRUE.
+
+ When *SKIP is TRUE, the diff driver avoids work on getting the details
+ for the closing callbacks.
+ */
static svn_error_t *
-merge_file_changed(svn_wc_notify_state_t *content_state,
- svn_wc_notify_state_t *prop_state,
- svn_boolean_t *tree_conflicted,
- const char *mine_abspath,
- const char *older_abspath,
- const char *yours_abspath,
- svn_revnum_t older_rev,
- svn_revnum_t yours_rev,
- const char *mimetype1,
- const char *mimetype2,
- const apr_array_header_t *prop_changes,
- apr_hash_t *original_props,
- void *baton,
- apr_pool_t *scratch_pool)
+merge_file_opened(void **new_file_baton,
+ svn_boolean_t *skip,
+ const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const svn_diff_source_t *copyfrom_source,
+ void *dir_baton,
+ const struct svn_diff_tree_processor_t *processor,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- merge_cmd_baton_t *merge_b = baton;
- enum svn_wc_merge_outcome_t merge_outcome;
- svn_node_kind_t wc_kind;
- svn_boolean_t is_deleted;
+ merge_cmd_baton_t *merge_b = processor->baton;
+ struct merge_dir_baton_t *pdb = dir_baton;
+ struct merge_file_baton_t *fb;
+ const char *local_abspath = svn_dirent_join(merge_b->target->abspath,
+ relpath, scratch_pool);
- SVN_ERR_ASSERT(mine_abspath && svn_dirent_is_absolute(mine_abspath));
- SVN_ERR_ASSERT(!older_abspath || svn_dirent_is_absolute(older_abspath));
- SVN_ERR_ASSERT(!yours_abspath || svn_dirent_is_absolute(yours_abspath));
+ fb = apr_pcalloc(result_pool, sizeof(*fb));
+ fb->tree_conflict_reason = CONFLICT_REASON_NONE;
+ fb->tree_conflict_action = svn_wc_conflict_action_edit;
+ fb->skip_reason = svn_wc_notify_state_unknown;
- /* Check for an obstructed or missing node on disk. */
- {
- svn_wc_notify_state_t obstr_state;
+ *new_file_baton = fb;
+
+ if (pdb)
+ {
+ fb->parent_baton = pdb;
+ fb->shadowed = pdb->shadowed;
+ fb->skip_reason = pdb->skip_reason;
+ }
+
+ if (fb->shadowed)
+ {
+ /* An ancestor is tree conflicted. Nothing to do here. */
+ }
+ else if (left_source != NULL)
+ {
+ /* Node is expected to be a file, which will be changed or deleted. */
+ svn_node_kind_t kind;
+ svn_boolean_t is_deleted;
+ svn_boolean_t excluded;
+ svn_depth_t parent_depth;
+
+ if (! right_source)
+ fb->tree_conflict_action = svn_wc_conflict_action_delete;
- SVN_ERR(perform_obstruction_check(&obstr_state, NULL,
- &is_deleted, &wc_kind,
- merge_b, mine_abspath, svn_node_unknown,
- scratch_pool));
- if (obstr_state != svn_wc_notify_state_inapplicable)
{
- /* ### a future thought: if the file is under version control,
- * but the working file is missing, maybe we can 'restore' the
- * working file from the text-base, and then allow the merge to run? */
-
- if (content_state)
- *content_state = obstr_state;
- if (prop_state && obstr_state == svn_wc_notify_state_missing)
- *prop_state = svn_wc_notify_state_missing;
- return SVN_NO_ERROR;
+ svn_wc_notify_state_t obstr_state;
+
+ SVN_ERR(perform_obstruction_check(&obstr_state, &is_deleted, &excluded,
+ &kind, &parent_depth,
+ merge_b, local_abspath,
+ scratch_pool));
+
+ if (obstr_state != svn_wc_notify_state_inapplicable)
+ {
+ fb->shadowed = TRUE;
+ fb->tree_conflict_reason = CONFLICT_REASON_SKIP;
+ fb->skip_reason = obstr_state;
+ return SVN_NO_ERROR;
+ }
+
+ if (is_deleted)
+ kind = svn_node_none;
}
- }
- /* Other easy outs: if the merge target isn't under version
- control, or is just missing from disk, fogettaboutit. There's no
- way svn_wc_merge4() can do the merge. */
- if (wc_kind != svn_node_file || is_deleted)
+ if (kind == svn_node_none)
+ {
+ fb->shadowed = TRUE;
+
+ /* If this is not the merge target and the parent is too shallow to
+ contain this directory, and the directory is not present
+ via exclusion or depth filtering, skip it instead of recording
+ a tree conflict.
+
+ Non-inheritable mergeinfo will be recorded, allowing
+ future merges into non-shallow working copies to merge
+ changes we missed this time around. */
+ if (pdb && (excluded
+ || (parent_depth != svn_depth_unknown &&
+ parent_depth < svn_depth_files)))
+ {
+ fb->shadowed = TRUE;
+
+ fb->tree_conflict_reason = CONFLICT_REASON_SKIP;
+ fb->skip_reason = svn_wc_notify_state_missing;
+ return SVN_NO_ERROR;
+ }
+
+ if (is_deleted)
+ fb->tree_conflict_reason = svn_wc_conflict_reason_deleted;
+ else
+ fb->tree_conflict_reason = svn_wc_conflict_reason_missing;
+
+ /* ### Similar to directory */
+ *skip = TRUE;
+ SVN_ERR(mark_file_edited(merge_b, fb, local_abspath, scratch_pool));
+ return SVN_NO_ERROR;
+ /* ### /Similar */
+ }
+ else if (kind != svn_node_file)
+ {
+ fb->shadowed = TRUE;
+
+ fb->tree_conflict_reason = svn_wc_conflict_reason_obstructed;
+
+ /* ### Similar to directory */
+ *skip = TRUE;
+ SVN_ERR(mark_file_edited(merge_b, fb, local_abspath, scratch_pool));
+ return SVN_NO_ERROR;
+ /* ### /Similar */
+ }
+
+ if (! right_source)
+ {
+ /* We want to delete the directory */
+ fb->tree_conflict_action = svn_wc_conflict_action_delete;
+ SVN_ERR(mark_file_edited(merge_b, fb, local_abspath, scratch_pool));
+
+ if (fb->shadowed)
+ {
+ return SVN_NO_ERROR; /* Already set a tree conflict */
+ }
+
+ /* Comparison mode to verify for delete tree conflicts? */
+ if (pdb && pdb->delete_state
+ && pdb->delete_state->found_edit)
+ {
+ /* Earlier nodes found a conflict. Done. */
+ *skip = TRUE;
+ }
+ }
+ }
+ else
{
- /* Maybe the node is excluded via depth filtering? */
+ const svn_wc_conflict_description2_t *old_tc = NULL;
- if (wc_kind == svn_node_none)
+ /* The node doesn't exist pre-merge: We have an addition */
+ fb->added = TRUE;
+ fb->tree_conflict_action = svn_wc_conflict_action_add;
+
+ if (pdb && pdb->pending_deletes
+ && svn_hash_gets(pdb->pending_deletes, local_abspath))
{
- svn_depth_t parent_depth;
+ fb->add_is_replace = TRUE;
+ fb->tree_conflict_action = svn_wc_conflict_action_replace;
- /* If the file isn't there due to depth restrictions, do not flag
- * a conflict. Non-inheritable mergeinfo will be recorded, allowing
- * future merges into non-shallow working copies to merge changes
- * we missed this time around. */
- SVN_ERR(svn_wc__node_get_depth(&parent_depth, merge_b->ctx->wc_ctx,
- svn_dirent_dirname(mine_abspath,
- scratch_pool),
- scratch_pool));
- if (parent_depth < svn_depth_files
- && parent_depth != svn_depth_unknown)
+ svn_hash_sets(pdb->pending_deletes, local_abspath, NULL);
+ }
+
+ if (pdb
+ && pdb->new_tree_conflicts
+ && (old_tc = svn_hash_gets(pdb->new_tree_conflicts, local_abspath)))
+ {
+ fb->tree_conflict_action = svn_wc_conflict_action_replace;
+ fb->tree_conflict_reason = old_tc->reason;
+
+ /* Update the tree conflict to store that this is a replace */
+ SVN_ERR(record_tree_conflict(merge_b, local_abspath, pdb,
+ svn_node_file,
+ fb->tree_conflict_action,
+ fb->tree_conflict_reason,
+ old_tc, FALSE,
+ scratch_pool));
+
+ if (old_tc->reason == svn_wc_conflict_reason_deleted
+ || old_tc->reason == svn_wc_conflict_reason_moved_away)
+ {
+ /* Issue #3806: Incoming replacements on local deletes produce
+ inconsistent result.
+
+ In this specific case we can continue applying the add part
+ of the replacement. */
+ }
+ else
{
- if (content_state)
- *content_state = svn_wc_notify_state_missing;
- if (prop_state)
- *prop_state = svn_wc_notify_state_missing;
+ *skip = TRUE;
+
return SVN_NO_ERROR;
}
}
+ else if (! (merge_b->dry_run
+ && ((pdb && pdb->added) || fb->add_is_replace)))
+ {
+ svn_wc_notify_state_t obstr_state;
+ svn_node_kind_t kind;
+ svn_boolean_t is_deleted;
- /* This is use case 4 described in the paper attached to issue
- * #2282. See also notes/tree-conflicts/detection.txt
- */
- SVN_ERR(tree_conflict(merge_b, mine_abspath, svn_node_file,
- svn_wc_conflict_action_edit,
- svn_wc_conflict_reason_missing));
- if (tree_conflicted)
- *tree_conflicted = TRUE;
- if (content_state)
- *content_state = svn_wc_notify_state_missing;
- if (prop_state)
- *prop_state = svn_wc_notify_state_missing;
- return SVN_NO_ERROR;
+ SVN_ERR(perform_obstruction_check(&obstr_state, &is_deleted, NULL,
+ &kind, NULL,
+ merge_b, local_abspath,
+ scratch_pool));
+
+ if (obstr_state != svn_wc_notify_state_inapplicable)
+ {
+ /* Skip the obstruction */
+ fb->shadowed = TRUE;
+ fb->tree_conflict_reason = CONFLICT_REASON_SKIP;
+ fb->skip_reason = obstr_state;
+ }
+ else if (kind != svn_node_none && !is_deleted)
+ {
+ /* Set a tree conflict */
+ fb->shadowed = TRUE;
+ fb->tree_conflict_reason = svn_wc_conflict_reason_obstructed;
+ }
+ }
+
+ /* Handle pending conflicts */
+ SVN_ERR(mark_file_edited(merge_b, fb, local_abspath, scratch_pool));
}
- /* ### TODO: Thwart attempts to merge into a path that has
- ### unresolved conflicts. This needs to be smart enough to deal
- ### with tree conflicts!
- if (is_path_conflicted_by_merge(merge_b, mine))
+ return SVN_NO_ERROR;
+}
+
+/* An svn_diff_tree_processor_t function.
+ *
+ * Called after merge_file_opened() when a node receives only text and/or
+ * property changes between LEFT_SOURCE and RIGHT_SOURCE.
+ *
+ * left_file and right_file can be NULL when the file is not modified.
+ * left_props and right_props are always available.
+ */
+static svn_error_t *
+merge_file_changed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const char *left_file,
+ const char *right_file,
+ /*const*/ apr_hash_t *left_props,
+ /*const*/ apr_hash_t *right_props,
+ svn_boolean_t file_modified,
+ const apr_array_header_t *prop_changes,
+ void *file_baton,
+ const struct svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ merge_cmd_baton_t *merge_b = processor->baton;
+ struct merge_file_baton_t *fb = file_baton;
+ svn_client_ctx_t *ctx = merge_b->ctx;
+ const char *local_abspath = svn_dirent_join(merge_b->target->abspath,
+ relpath, scratch_pool);
+ const svn_wc_conflict_version_t *left;
+ const svn_wc_conflict_version_t *right;
+ svn_wc_notify_state_t text_state;
+ svn_wc_notify_state_t property_state;
+
+ SVN_ERR_ASSERT(local_abspath && svn_dirent_is_absolute(local_abspath));
+ SVN_ERR_ASSERT(!left_file || svn_dirent_is_absolute(left_file));
+ SVN_ERR_ASSERT(!right_file || svn_dirent_is_absolute(right_file));
+
+ SVN_ERR(mark_file_edited(merge_b, fb, local_abspath, scratch_pool));
+
+ if (fb->shadowed)
{
- *content_state = svn_wc_notify_state_conflicted;
- return svn_error_createf(SVN_ERR_WC_FOUND_CONFLICT, NULL,
- _("Path '%s' is in conflict, and must be "
- "resolved before the remainder of the "
- "requested merge can be applied"), mine);
+ if (fb->tree_conflict_reason == CONFLICT_REASON_NONE)
+ {
+ /* We haven't notified for this node yet: report a skip */
+ SVN_ERR(record_skip(merge_b, local_abspath, svn_node_file,
+ svn_wc_notify_update_shadowed_update,
+ fb->skip_reason, fb->parent_baton,
+ scratch_pool));
+ }
+
+ return SVN_NO_ERROR;
}
- */
/* This callback is essentially no more than a wrapper around
- svn_wc_merge4(). Thank goodness that all the
+ svn_wc_merge5(). Thank goodness that all the
diff-editor-mechanisms are doing the hard work of getting the
fulltexts! */
- /* Do property merge before text merge so that keyword expansion takes
- into account the new property values. */
- if (prop_changes->nelts > 0)
- {
- svn_boolean_t tree_conflicted2 = FALSE;
+ property_state = svn_wc_notify_state_unchanged;
+ text_state = svn_wc_notify_state_unchanged;
- SVN_ERR(merge_props_changed(prop_state, &tree_conflicted2,
- mine_abspath, prop_changes, original_props,
- baton, scratch_pool));
+ SVN_ERR(prepare_merge_props_changed(&prop_changes, local_abspath,
+ prop_changes, merge_b,
+ scratch_pool, scratch_pool));
- /* If the prop change caused a tree-conflict, just bail. */
- if (tree_conflicted2)
- {
- if (tree_conflicted != NULL)
- *tree_conflicted = TRUE;
+ SVN_ERR(make_conflict_versions(&left, &right, local_abspath,
+ svn_node_file, &merge_b->merge_source, merge_b->target,
+ scratch_pool, scratch_pool));
- return SVN_NO_ERROR;
+ /* Do property merge now, if we are not going to perform a text merge */
+ if ((merge_b->record_only || !left_file) && prop_changes->nelts)
+ {
+ SVN_ERR(svn_wc_merge_props3(&property_state, ctx->wc_ctx, local_abspath,
+ left, right,
+ left_props, prop_changes,
+ merge_b->dry_run,
+ NULL, NULL,
+ ctx->cancel_func, ctx->cancel_baton,
+ scratch_pool));
+ if (property_state == svn_wc_notify_state_conflicted)
+ {
+ alloc_and_store_path(&merge_b->conflicted_paths, local_abspath,
+ merge_b->pool);
}
}
- else if (prop_state)
- *prop_state = svn_wc_notify_state_unchanged;
/* Easy out: We are only applying mergeinfo differences. */
if (merge_b->record_only)
{
- if (content_state)
- *content_state = svn_wc_notify_state_unchanged;
- return SVN_NO_ERROR;
+ /* NO-OP */
}
-
- if (older_abspath)
+ else if (left_file)
{
svn_boolean_t has_local_mods;
+ enum svn_wc_merge_outcome_t content_outcome;
+ const char *target_label;
+ const char *left_label;
+ const char *right_label;
+ const char *path_ext = "";
+
+ if (merge_b->ext_patterns && merge_b->ext_patterns->nelts)
+ {
+ svn_path_splitext(NULL, &path_ext, local_abspath, scratch_pool);
+ if (! (*path_ext
+ && svn_cstring_match_glob_list(path_ext,
+ merge_b->ext_patterns)))
+ {
+ path_ext = "";
+ }
+ }
/* xgettext: the '.working', '.merge-left.r%ld' and
'.merge-right.r%ld' strings are used to tag onto a file
name in case of a merge conflict */
- const char *target_label = _(".working");
- const char *left_label = apr_psprintf(scratch_pool,
- _(".merge-left.r%ld"),
- older_rev);
- const char *right_label = apr_psprintf(scratch_pool,
- _(".merge-right.r%ld"),
- yours_rev);
- conflict_resolver_baton_t conflict_baton = { 0 };
- const svn_wc_conflict_version_t *left;
- const svn_wc_conflict_version_t *right;
-
- SVN_ERR(svn_wc_text_modified_p2(&has_local_mods, merge_b->ctx->wc_ctx,
- mine_abspath, FALSE, scratch_pool));
- conflict_baton.wrapped_func = merge_b->ctx->conflict_func2;
- conflict_baton.wrapped_baton = merge_b->ctx->conflict_baton2;
- conflict_baton.conflicted_paths = &merge_b->conflicted_paths;
- conflict_baton.pool = merge_b->pool;
-
- SVN_ERR(make_conflict_versions(&left, &right, mine_abspath,
- svn_node_file, merge_b));
- SVN_ERR(svn_wc_merge4(&merge_outcome, merge_b->ctx->wc_ctx,
- older_abspath, yours_abspath, mine_abspath,
+ target_label = apr_psprintf(scratch_pool, _(".working%s%s"),
+ *path_ext ? "." : "", path_ext);
+ left_label = apr_psprintf(scratch_pool,
+ _(".merge-left.r%ld%s%s"),
+ left_source->revision,
+ *path_ext ? "." : "", path_ext);
+ right_label = apr_psprintf(scratch_pool,
+ _(".merge-right.r%ld%s%s"),
+ right_source->revision,
+ *path_ext ? "." : "", path_ext);
+
+ SVN_ERR(svn_wc_text_modified_p2(&has_local_mods, ctx->wc_ctx,
+ local_abspath, FALSE, scratch_pool));
+
+ /* Do property merge and text merge in one step so that keyword expansion
+ takes into account the new property values. */
+ SVN_ERR(svn_wc_merge5(&content_outcome, &property_state, ctx->wc_ctx,
+ left_file, right_file, local_abspath,
left_label, right_label, target_label,
left, right,
merge_b->dry_run, merge_b->diff3_cmd,
- merge_b->merge_options, prop_changes,
- conflict_resolver, &conflict_baton,
- merge_b->ctx->cancel_func,
- merge_b->ctx->cancel_baton,
+ merge_b->merge_options,
+ left_props, prop_changes,
+ NULL, NULL,
+ ctx->cancel_func,
+ ctx->cancel_baton,
scratch_pool));
- if (content_state)
+ if (content_outcome == svn_wc_merge_conflict
+ || property_state == svn_wc_notify_state_conflicted)
{
- if (merge_outcome == svn_wc_merge_conflict)
- *content_state = svn_wc_notify_state_conflicted;
- else if (has_local_mods
- && merge_outcome != svn_wc_merge_unchanged)
- *content_state = svn_wc_notify_state_merged;
- else if (merge_outcome == svn_wc_merge_merged)
- *content_state = svn_wc_notify_state_changed;
- else if (merge_outcome == svn_wc_merge_no_merge)
- *content_state = svn_wc_notify_state_missing;
- else /* merge_outcome == svn_wc_merge_unchanged */
- *content_state = svn_wc_notify_state_unchanged;
+ alloc_and_store_path(&merge_b->conflicted_paths, local_abspath,
+ merge_b->pool);
}
+
+ if (content_outcome == svn_wc_merge_conflict)
+ text_state = svn_wc_notify_state_conflicted;
+ else if (has_local_mods
+ && content_outcome != svn_wc_merge_unchanged)
+ text_state = svn_wc_notify_state_merged;
+ else if (content_outcome == svn_wc_merge_merged)
+ text_state = svn_wc_notify_state_changed;
+ else if (content_outcome == svn_wc_merge_no_merge)
+ text_state = svn_wc_notify_state_missing;
+ else /* merge_outcome == svn_wc_merge_unchanged */
+ text_state = svn_wc_notify_state_unchanged;
+ }
+
+ if (text_state == svn_wc_notify_state_conflicted
+ || text_state == svn_wc_notify_state_merged
+ || text_state == svn_wc_notify_state_changed
+ || property_state == svn_wc_notify_state_conflicted
+ || property_state == svn_wc_notify_state_merged
+ || property_state == svn_wc_notify_state_changed)
+ {
+ SVN_ERR(record_update_update(merge_b, local_abspath, svn_node_file,
+ text_state, property_state,
+ scratch_pool));
}
return SVN_NO_ERROR;
}
-/* An svn_wc_diff_callbacks4_t function. */
+/* An svn_diff_tree_processor_t function.
+ *
+ * Called after merge_file_opened() when a node doesn't exist in LEFT_SOURCE,
+ * but does in RIGHT_SOURCE.
+ *
+ * When a node is replaced instead of just added a separate opened+deleted will
+ * be invoked before the current open+added.
+ */
static svn_error_t *
-merge_file_added(svn_wc_notify_state_t *content_state,
- svn_wc_notify_state_t *prop_state,
- svn_boolean_t *tree_conflicted,
- const char *mine_abspath,
- const char *older_abspath,
- const char *yours_abspath,
- svn_revnum_t rev1,
- svn_revnum_t rev2,
- const char *mimetype1,
- const char *mimetype2,
- const char *copyfrom_path,
- svn_revnum_t copyfrom_revision,
- const apr_array_header_t *prop_changes,
- apr_hash_t *original_props,
- void *baton,
+merge_file_added(const char *relpath,
+ const svn_diff_source_t *copyfrom_source,
+ const svn_diff_source_t *right_source,
+ const char *copyfrom_file,
+ const char *right_file,
+ /*const*/ apr_hash_t *copyfrom_props,
+ /*const*/ apr_hash_t *right_props,
+ void *file_baton,
+ const struct svn_diff_tree_processor_t *processor,
apr_pool_t *scratch_pool)
{
- merge_cmd_baton_t *merge_b = baton;
- svn_node_kind_t kind;
- int i;
- apr_hash_t *file_props;
+ merge_cmd_baton_t *merge_b = processor->baton;
+ struct merge_file_baton_t *fb = file_baton;
+ const char *local_abspath = svn_dirent_join(merge_b->target->abspath,
+ relpath, scratch_pool);
+ apr_hash_t *pristine_props;
+ apr_hash_t *new_props;
- SVN_ERR_ASSERT(svn_dirent_is_absolute(mine_abspath));
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+
+ SVN_ERR(mark_file_edited(merge_b, fb, local_abspath, scratch_pool));
+
+ if (fb->shadowed)
+ {
+ if (fb->tree_conflict_reason == CONFLICT_REASON_NONE)
+ {
+ /* We haven't notified for this node yet: report a skip */
+ SVN_ERR(record_skip(merge_b, local_abspath, svn_node_file,
+ svn_wc_notify_update_shadowed_add,
+ fb->skip_reason, fb->parent_baton,
+ scratch_pool));
+ }
+
+ return SVN_NO_ERROR;
+ }
/* Easy out: We are only applying mergeinfo differences. */
if (merge_b->record_only)
{
- if (content_state)
- *content_state = svn_wc_notify_state_unchanged;
- if (prop_state)
- *prop_state = svn_wc_notify_state_unchanged;
return SVN_NO_ERROR;
}
- /* In most cases, we just leave prop_state as unknown, and let the
- content_state what happened, so we set prop_state here to avoid that
- below. */
- if (prop_state)
- *prop_state = svn_wc_notify_state_unknown;
+ if ((merge_b->merge_source.ancestral || merge_b->reintegrate_merge)
+ && ( !fb->parent_baton || !fb->parent_baton->added))
+ {
+ /* Store the roots of added subtrees */
+ store_path(merge_b->added_abspaths, local_abspath);
+ }
- /* Apply the prop changes to a new hash table. */
- file_props = apr_hash_copy(scratch_pool, original_props);
- for (i = 0; i < prop_changes->nelts; ++i)
+ if (!merge_b->dry_run)
{
- const svn_prop_t *prop = &APR_ARRAY_IDX(prop_changes, i, svn_prop_t);
+ const char *copyfrom_url;
+ svn_revnum_t copyfrom_rev;
+ svn_stream_t *new_contents, *pristine_contents;
- /* We don't want any DAV wcprops related to this file because
- they'll point to the wrong repository (in the
- merge-from-foreign-repository scenario) or wrong place in the
- right repository (in the same-repos scenario). So we'll
- strip them. (Is this a layering violation?) */
- if (svn_property_kind(NULL, prop->name) == svn_prop_wc_kind)
- continue;
+ /* If this is a merge from the same repository as our
+ working copy, we handle adds as add-with-history.
+ Otherwise, we'll use a pure add. */
+ if (merge_b->same_repos)
+ {
+ const char *child =
+ svn_dirent_skip_ancestor(merge_b->target->abspath,
+ local_abspath);
+ SVN_ERR_ASSERT(child != NULL);
+ copyfrom_url = svn_path_url_add_component2(
+ merge_b->merge_source.loc2->url,
+ child, scratch_pool);
+ copyfrom_rev = right_source->revision;
+ SVN_ERR(check_repos_match(merge_b->target, local_abspath,
+ copyfrom_url, scratch_pool));
+ SVN_ERR(svn_stream_open_readonly(&pristine_contents,
+ right_file,
+ scratch_pool,
+ scratch_pool));
+ new_contents = NULL; /* inherit from new_base_contents */
- /* And in the foreign repository merge case, we only want
- regular properties. */
- if ((! merge_b->same_repos)
- && (svn_property_kind(NULL, prop->name) != svn_prop_regular_kind))
- continue;
+ pristine_props = right_props; /* Includes last_* information */
+ new_props = NULL; /* No local changes */
- /* Issue #3383: We don't want mergeinfo from a foreign repository. */
- if ((! merge_b->same_repos)
- && strcmp(prop->name, SVN_PROP_MERGEINFO) == 0)
- continue;
+ if (svn_hash_gets(pristine_props, SVN_PROP_MERGEINFO))
+ {
+ alloc_and_store_path(&merge_b->paths_with_new_mergeinfo,
+ local_abspath, merge_b->pool);
+ }
+ }
+ else
+ {
+ apr_array_header_t *regular_props;
- apr_hash_set(file_props, prop->name, APR_HASH_KEY_STRING, prop->value);
- }
+ copyfrom_url = NULL;
+ copyfrom_rev = SVN_INVALID_REVNUM;
- /* Check for an obstructed or missing node on disk. */
- {
- svn_wc_notify_state_t obstr_state;
+ pristine_contents = svn_stream_empty(scratch_pool);
+ SVN_ERR(svn_stream_open_readonly(&new_contents, right_file,
+ scratch_pool, scratch_pool));
- SVN_ERR(perform_obstruction_check(&obstr_state, NULL, NULL,
- &kind,
- merge_b, mine_abspath, svn_node_unknown,
- scratch_pool));
+ pristine_props = apr_hash_make(scratch_pool); /* Local addition */
- if (obstr_state != svn_wc_notify_state_inapplicable)
- {
- if (merge_b->dry_run && merge_b->added_path
- && svn_dirent_is_child(merge_b->added_path, mine_abspath, NULL))
- {
- if (content_state)
- *content_state = svn_wc_notify_state_changed;
- if (prop_state && apr_hash_count(file_props))
- *prop_state = svn_wc_notify_state_changed;
- }
- else if (content_state)
- *content_state = obstr_state;
+ /* We don't want any foreign properties */
+ SVN_ERR(svn_categorize_props(svn_prop_hash_to_array(right_props,
+ scratch_pool),
+ NULL, NULL, &regular_props,
+ scratch_pool));
- return SVN_NO_ERROR;
- }
- }
+ new_props = svn_prop_array_to_hash(regular_props, scratch_pool);
- SVN_ERR(svn_io_check_path(mine_abspath, &kind, scratch_pool));
- switch (kind)
- {
- case svn_node_none:
- {
- if (! merge_b->dry_run)
- {
- const char *copyfrom_url;
- svn_revnum_t copyfrom_rev;
- svn_stream_t *new_contents, *new_base_contents;
- apr_hash_t *new_base_props, *new_props;
- const svn_wc_conflict_description2_t *existing_conflict;
-
- /* If this is a merge from the same repository as our
- working copy, we handle adds as add-with-history.
- Otherwise, we'll use a pure add. */
- if (merge_b->same_repos)
- {
- const char *child =
- svn_dirent_is_child(merge_b->target_abspath, mine_abspath,
- scratch_pool);
- if (child != NULL)
- copyfrom_url = svn_path_url_add_component2(
- merge_b->merge_source.url2,
- child, scratch_pool);
- else
- copyfrom_url = merge_b->merge_source.url2;
- copyfrom_rev = rev2;
- SVN_ERR(check_repos_match(merge_b, mine_abspath, copyfrom_url,
- scratch_pool));
- new_base_props = file_props;
- new_props = NULL; /* inherit from new_base_props */
- SVN_ERR(svn_stream_open_readonly(&new_base_contents,
- yours_abspath,
- scratch_pool,
- scratch_pool));
- new_contents = NULL; /* inherit from new_base_contents */
- }
- else
- {
- copyfrom_url = NULL;
- copyfrom_rev = SVN_INVALID_REVNUM;
- new_base_props = apr_hash_make(scratch_pool);
- new_props = file_props;
- new_base_contents = svn_stream_empty(scratch_pool);
- SVN_ERR(svn_stream_open_readonly(&new_contents, yours_abspath,
- scratch_pool, scratch_pool));
- }
-
- SVN_ERR(svn_wc__get_tree_conflict(&existing_conflict,
- merge_b->ctx->wc_ctx,
- mine_abspath, merge_b->pool,
- merge_b->pool));
- if (existing_conflict)
- {
- /* Possibly collapse the existing conflict into a 'replace'
- * tree conflict. The conflict reason is 'added' because
- * the now-deleted tree conflict victim must have been
- * added in the history of the merge target. */
- SVN_ERR(tree_conflict_on_add(merge_b, mine_abspath,
- svn_node_file,
- svn_wc_conflict_action_add,
- svn_wc_conflict_reason_added));
- if (tree_conflicted)
- *tree_conflicted = TRUE;
- }
- else
- {
- /* Since 'mine' doesn't exist, and this is
- 'merge_file_added', I hope it's safe to assume that
- 'older' is empty, and 'yours' is the full file. Merely
- copying 'yours' to 'mine', isn't enough; we need to get
- the whole text-base and props installed too, just as if
- we had called 'svn cp wc wc'. */
- SVN_ERR(svn_wc_add_repos_file4(merge_b->ctx->wc_ctx,
- mine_abspath,
- new_base_contents,
- new_contents,
- new_base_props, new_props,
- copyfrom_url, copyfrom_rev,
- merge_b->ctx->cancel_func,
- merge_b->ctx->cancel_baton,
- scratch_pool));
-
- /* ### delete 'yours' ? */
- }
- }
- if (content_state)
- *content_state = svn_wc_notify_state_changed;
- if (prop_state && apr_hash_count(file_props))
- *prop_state = svn_wc_notify_state_changed;
- }
- break;
- case svn_node_dir:
- /* The file add the merge wants to carry out is obstructed by
- * a directory, so the file the merge wants to add is a tree
- * conflict victim.
- * See notes about obstructions in notes/tree-conflicts/detection.txt.
- */
- SVN_ERR(tree_conflict_on_add(merge_b, mine_abspath, svn_node_file,
- svn_wc_conflict_action_add,
- svn_wc_conflict_reason_obstructed));
- if (tree_conflicted)
- *tree_conflicted = TRUE;
- if (content_state)
- {
- /* directory already exists, is it under version control? */
- svn_node_kind_t wc_kind;
- SVN_ERR(svn_wc_read_kind(&wc_kind, merge_b->ctx->wc_ctx,
- mine_abspath, FALSE, scratch_pool));
-
- if ((wc_kind != svn_node_none)
- && dry_run_deleted_p(merge_b, mine_abspath))
- *content_state = svn_wc_notify_state_changed;
- else
- /* this will make the repos_editor send a 'skipped' message */
- *content_state = svn_wc_notify_state_obstructed;
+ /* Issue #3383: We don't want mergeinfo from a foreign repository. */
+ svn_hash_sets(new_props, SVN_PROP_MERGEINFO, NULL);
}
- break;
- case svn_node_file:
- {
- if (dry_run_deleted_p(merge_b, mine_abspath))
- {
- if (content_state)
- *content_state = svn_wc_notify_state_changed;
- }
- else
- {
- /* The file add the merge wants to carry out is obstructed by
- * a versioned file. This file must have been added in the
- * history of the merge target, hence we flag a tree conflict
- * with reason 'added'. */
- SVN_ERR(tree_conflict_on_add(
- merge_b, mine_abspath, svn_node_file,
- svn_wc_conflict_action_add,
- svn_wc_conflict_reason_added));
-
- if (tree_conflicted)
- *tree_conflicted = TRUE;
- }
- break;
- }
- default:
- if (content_state)
- *content_state = svn_wc_notify_state_unknown;
- break;
+
+ /* Do everything like if we had called 'svn cp PATH1 PATH2'. */
+ SVN_ERR(svn_wc_add_repos_file4(merge_b->ctx->wc_ctx,
+ local_abspath,
+ pristine_contents,
+ new_contents,
+ pristine_props, new_props,
+ copyfrom_url, copyfrom_rev,
+ merge_b->ctx->cancel_func,
+ merge_b->ctx->cancel_baton,
+ scratch_pool));
+
+ /* Caller must call svn_sleep_for_timestamps() */
+ *merge_b->use_sleep = TRUE;
}
+ SVN_ERR(record_update_add(merge_b, local_abspath, svn_node_file,
+ fb->add_is_replace, scratch_pool));
+
return SVN_NO_ERROR;
}
@@ -1857,9 +2307,7 @@ files_same_p(svn_boolean_t *same,
{
svn_stream_t *mine_stream;
svn_stream_t *older_stream;
- svn_opt_revision_t working_rev;
-
- working_rev.kind = svn_opt_revision_working;
+ svn_opt_revision_t working_rev = { svn_opt_revision_working, { 0 } };
/* Compare the file content, translating 'mine' to 'normal' form. */
if (svn_prop_get_value(working_props, SVN_PROP_SPECIAL) != NULL)
@@ -1882,679 +2330,1175 @@ files_same_p(svn_boolean_t *same,
return SVN_NO_ERROR;
}
-/* An svn_wc_diff_callbacks4_t function. */
+/* An svn_diff_tree_processor_t function.
+ *
+ * Called after merge_file_opened() when a node does exist in LEFT_SOURCE, but
+ * no longer exists (or is replaced) in RIGHT_SOURCE.
+ *
+ * When a node is replaced instead of just added a separate opened+added will
+ * be invoked after the current open+deleted.
+ */
static svn_error_t *
-merge_file_deleted(svn_wc_notify_state_t *state,
- svn_boolean_t *tree_conflicted,
- const char *mine_abspath,
- const char *older_abspath,
- const char *yours_abspath,
- const char *mimetype1,
- const char *mimetype2,
- apr_hash_t *original_props,
- void *baton,
+merge_file_deleted(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const char *left_file,
+ /*const*/ apr_hash_t *left_props,
+ void *file_baton,
+ const struct svn_diff_tree_processor_t *processor,
apr_pool_t *scratch_pool)
{
- merge_cmd_baton_t *merge_b = baton;
- svn_node_kind_t kind;
+ merge_cmd_baton_t *merge_b = processor->baton;
+ struct merge_file_baton_t *fb = file_baton;
+ const char *local_abspath = svn_dirent_join(merge_b->target->abspath,
+ relpath, scratch_pool);
+ svn_boolean_t same;
- if (merge_b->dry_run)
+ SVN_ERR(mark_file_edited(merge_b, fb, local_abspath, scratch_pool));
+
+ if (fb->shadowed)
{
- const char *wcpath = apr_pstrdup(merge_b->pool, mine_abspath);
- apr_hash_set(merge_b->dry_run_deletions, wcpath,
- APR_HASH_KEY_STRING, wcpath);
+ if (fb->tree_conflict_reason == CONFLICT_REASON_NONE)
+ {
+ /* We haven't notified for this node yet: report a skip */
+ SVN_ERR(record_skip(merge_b, local_abspath, svn_node_file,
+ svn_wc_notify_update_shadowed_delete,
+ fb->skip_reason, fb->parent_baton,
+ scratch_pool));
+ }
+
+ return SVN_NO_ERROR;
}
/* Easy out: We are only applying mergeinfo differences. */
if (merge_b->record_only)
{
- if (state)
- *state = svn_wc_notify_state_unchanged;
return SVN_NO_ERROR;
}
- /* Check for an obstructed or missing node on disk. */
- {
- svn_wc_notify_state_t obstr_state;
+ /* If the files are identical, attempt deletion */
+ if (merge_b->force_delete)
+ same = TRUE;
+ else
+ SVN_ERR(files_same_p(&same, left_file, left_props,
+ local_abspath, merge_b->ctx->wc_ctx,
+ scratch_pool));
- SVN_ERR(perform_obstruction_check(&obstr_state, NULL, NULL,
- NULL,
- merge_b, mine_abspath, svn_node_unknown,
- scratch_pool));
+ if (fb->parent_baton
+ && fb->parent_baton->delete_state)
+ {
+ if (same)
+ {
+ /* Note that we checked this file */
+ store_path(fb->parent_baton->delete_state->compared_abspaths,
+ local_abspath);
+ }
+ else
+ {
+ /* We found some modification. Parent should raise a tree conflict */
+ fb->parent_baton->delete_state->found_edit = TRUE;
+ }
- if (obstr_state != svn_wc_notify_state_inapplicable)
- {
- if (state)
- *state = obstr_state;
- return SVN_NO_ERROR;
- }
- }
+ return SVN_NO_ERROR;
+ }
+ else if (same)
+ {
+ if (!merge_b->dry_run)
+ SVN_ERR(svn_wc_delete4(merge_b->ctx->wc_ctx, local_abspath,
+ FALSE /* keep_local */, FALSE /* unversioned */,
+ merge_b->ctx->cancel_func,
+ merge_b->ctx->cancel_baton,
+ NULL, NULL /* no notify */,
+ scratch_pool));
- SVN_ERR(svn_io_check_path(mine_abspath, &kind, scratch_pool));
- switch (kind)
+ /* Record that we might have deleted mergeinfo */
+ alloc_and_store_path(&merge_b->paths_with_deleted_mergeinfo,
+ local_abspath, merge_b->pool);
+
+ /* And notify the deletion */
+ SVN_ERR(record_update_delete(merge_b, fb->parent_baton, local_abspath,
+ svn_node_file, scratch_pool));
+ }
+ else
{
- case svn_node_file:
- {
- svn_boolean_t same;
+ /* The files differ, so raise a conflict instead of deleting */
- /* If the files are identical, attempt deletion */
- SVN_ERR(files_same_p(&same, older_abspath, original_props,
- mine_abspath, merge_b->ctx->wc_ctx,
- scratch_pool));
- if (same || merge_b->force || merge_b->record_only /* ### why? */)
- {
- /* Passing NULL for the notify_func and notify_baton because
- repos_diff.c:delete_entry() will do it for us. */
- SVN_ERR(svn_client__wc_delete(mine_abspath, TRUE,
- merge_b->dry_run, FALSE, NULL, NULL,
- merge_b->ctx, scratch_pool));
- if (state)
- *state = svn_wc_notify_state_changed;
- }
- else
- {
- /* The files differ, so raise a conflict instead of deleting */
-
- /* This might be use case 5 described in the paper attached to issue
- * #2282. See also notes/tree-conflicts/detection.txt
- */
- SVN_ERR(tree_conflict(merge_b, mine_abspath, svn_node_file,
- svn_wc_conflict_action_delete,
- svn_wc_conflict_reason_edited));
- if (tree_conflicted)
- *tree_conflicted = TRUE;
-
- if (state)
- *state = svn_wc_notify_state_obstructed;
- }
- }
- break;
- case svn_node_dir:
- /* The file deletion the merge wants to carry out is obstructed by
- * a directory, so the file the merge wants to delete is a tree
- * conflict victim.
- * See notes about obstructions in notes/tree-conflicts/detection.txt.
- */
- SVN_ERR(tree_conflict(merge_b, mine_abspath, svn_node_file,
- svn_wc_conflict_action_delete,
- svn_wc_conflict_reason_obstructed));
- if (tree_conflicted)
- *tree_conflicted = TRUE;
- if (state)
- *state = svn_wc_notify_state_obstructed;
- break;
- case svn_node_none:
- /* The file deleted in the diff does not exist at the current URL.
- *
- * This is use case 6 described in the paper attached to issue
+ /* This is use case 5 described in the paper attached to issue
* #2282. See also notes/tree-conflicts/detection.txt
*/
- SVN_ERR(tree_conflict(merge_b, mine_abspath, svn_node_file,
- svn_wc_conflict_action_delete,
- svn_wc_conflict_reason_deleted));
- if (tree_conflicted)
- *tree_conflicted = TRUE;
- if (state)
- *state = svn_wc_notify_state_missing;
- break;
- default:
- if (state)
- *state = svn_wc_notify_state_unknown;
- break;
+ SVN_ERR(record_tree_conflict(merge_b, local_abspath, fb->parent_baton,
+ svn_node_file,
+ svn_wc_conflict_action_delete,
+ svn_wc_conflict_reason_edited,
+ NULL, TRUE,
+ scratch_pool));
}
return SVN_NO_ERROR;
}
-/* An svn_wc_diff_callbacks4_t function. */
+/* An svn_diff_tree_processor_t function.
+
+ Called before either merge_dir_changed(), merge_dir_added(),
+ merge_dir_deleted() or merge_dir_closed(), unless it sets *SKIP to TRUE.
+
+ After this call and before the close call, all descendants will receive
+ their changes, unless *SKIP_CHILDREN is set to TRUE.
+
+ When *SKIP is TRUE, the diff driver avoids work on getting the details
+ for the closing callbacks.
+
+ The SKIP and SKIP_DESCENDANTS work independantly.
+ */
static svn_error_t *
-merge_dir_added(svn_wc_notify_state_t *state,
- svn_boolean_t *tree_conflicted,
- svn_boolean_t *skip,
- svn_boolean_t *skip_children,
- const char *local_abspath,
- svn_revnum_t rev,
- const char *copyfrom_path,
- svn_revnum_t copyfrom_revision,
- void *baton,
- apr_pool_t *scratch_pool)
+merge_dir_opened(void **new_dir_baton,
+ svn_boolean_t *skip,
+ svn_boolean_t *skip_children,
+ const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const svn_diff_source_t *copyfrom_source,
+ void *parent_dir_baton,
+ const struct svn_diff_tree_processor_t *processor,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- merge_cmd_baton_t *merge_b = baton;
- svn_node_kind_t kind;
- const char *copyfrom_url = NULL, *child;
- svn_revnum_t copyfrom_rev = SVN_INVALID_REVNUM;
- const char *parent_abspath;
- svn_boolean_t is_versioned;
- svn_boolean_t is_deleted;
+ merge_cmd_baton_t *merge_b = processor->baton;
+ struct merge_dir_baton_t *db;
+ struct merge_dir_baton_t *pdb = parent_dir_baton;
- /* Easy out: We are only applying mergeinfo differences. */
- if (merge_b->record_only)
- {
- if (state)
- *state = svn_wc_notify_state_unchanged;
- return SVN_NO_ERROR;
- }
+ const char *local_abspath = svn_dirent_join(merge_b->target->abspath,
+ relpath, scratch_pool);
- parent_abspath = svn_dirent_dirname(local_abspath, scratch_pool);
+ db = apr_pcalloc(result_pool, sizeof(*db));
+ db->pool = result_pool;
+ db->tree_conflict_reason = CONFLICT_REASON_NONE;
+ db->tree_conflict_action = svn_wc_conflict_action_edit;
+ db->skip_reason = svn_wc_notify_state_unknown;
- child = svn_dirent_is_child(merge_b->target_abspath, local_abspath, NULL);
- SVN_ERR_ASSERT(child != NULL);
+ *new_dir_baton = db;
- /* If this is a merge from the same repository as our working copy,
- we handle adds as add-with-history. Otherwise, we'll use a pure
- add. */
- if (merge_b->same_repos)
+ if (pdb)
{
- copyfrom_url = svn_path_url_add_component2(merge_b->merge_source.url2,
- child, scratch_pool);
- copyfrom_rev = rev;
+ db->parent_baton = pdb;
+ db->shadowed = pdb->shadowed;
+ db->skip_reason = pdb->skip_reason;
+ }
- SVN_ERR(check_repos_match(merge_b, parent_abspath, copyfrom_url,
- scratch_pool));
+ if (db->shadowed)
+ {
+ /* An ancestor is tree conflicted. Nothing to do here. */
+ if (! left_source)
+ db->added = TRUE;
}
+ else if (left_source != NULL)
+ {
+ /* Node is expected to be a directory. */
+ svn_node_kind_t kind;
+ svn_boolean_t is_deleted;
+ svn_boolean_t excluded;
+ svn_depth_t parent_depth;
- /* Check for an obstructed or missing node on disk. */
- {
- svn_wc_notify_state_t obstr_state;
+ if (! right_source)
+ db->tree_conflict_action = svn_wc_conflict_action_delete;
- SVN_ERR(perform_obstruction_check(&obstr_state, NULL,
- &is_deleted, &kind,
- merge_b, local_abspath, svn_node_unknown,
- scratch_pool));
+ /* Check for an obstructed or missing node on disk. */
+ {
+ svn_wc_notify_state_t obstr_state;
+ SVN_ERR(perform_obstruction_check(&obstr_state, &is_deleted, &excluded,
+ &kind, &parent_depth,
+ merge_b, local_abspath,
+ scratch_pool));
- is_versioned = (kind == svn_node_dir) || (kind == svn_node_file);
+ if (obstr_state != svn_wc_notify_state_inapplicable)
+ {
+ db->shadowed = TRUE;
- /* In this case of adding a directory, we have an exception to the usual
- * "skip if it's inconsistent" rule. If the directory exists on disk
- * unexpectedly, we simply make it versioned, because we can do so without
- * risk of destroying data. Only skip if it is versioned but unexpectedly
- * missing from disk, or is unversioned but obstructed by a node of the
- * wrong kind. */
- if (obstr_state == svn_wc_notify_state_obstructed
- && (is_deleted || kind == svn_node_none))
- {
- svn_node_kind_t disk_kind;
+ if (obstr_state == svn_wc_notify_state_obstructed)
+ {
+ svn_boolean_t is_wcroot;
- SVN_ERR(svn_io_check_path(local_abspath, &disk_kind, scratch_pool));
+ SVN_ERR(svn_wc_check_root(&is_wcroot, NULL, NULL,
+ merge_b->ctx->wc_ctx,
+ local_abspath, scratch_pool));
- if (disk_kind == svn_node_dir)
- {
- obstr_state = svn_wc_notify_state_inapplicable;
- kind = svn_node_dir; /* Take over existing directory */
- }
- }
+ if (is_wcroot)
+ {
+ db->tree_conflict_reason = CONFLICT_REASON_SKIP_WC;
+ return SVN_NO_ERROR;
+ }
+ }
- if (obstr_state != svn_wc_notify_state_inapplicable)
- {
- if (state && merge_b->dry_run && merge_b->added_path
- && svn_dirent_is_child(merge_b->added_path, local_abspath, NULL))
- {
- *state = svn_wc_notify_state_changed;
+ db->tree_conflict_reason = CONFLICT_REASON_SKIP;
+ db->skip_reason = obstr_state;
+
+ if (! right_source)
+ {
+ *skip = *skip_children = TRUE;
+ SVN_ERR(mark_dir_edited(merge_b, db, local_abspath,
+ scratch_pool));
+ }
+
+ return SVN_NO_ERROR;
}
- else if (state)
- *state = obstr_state;
- return SVN_NO_ERROR;
+
+ if (is_deleted)
+ kind = svn_node_none;
}
- if (is_deleted)
- kind = svn_node_none;
- }
+ if (kind == svn_node_none)
+ {
+ db->shadowed = TRUE;
- /* Switch on the on-disk state of this path */
- switch (kind)
- {
- case svn_node_none:
- /* Unversioned or schedule-delete */
- if (merge_b->dry_run)
+ /* If this is not the merge target and the parent is too shallow to
+ contain this directory, and the directory is not presen
+ via exclusion or depth filtering, skip it instead of recording
+ a tree conflict.
+
+ Non-inheritable mergeinfo will be recorded, allowing
+ future merges into non-shallow working copies to merge
+ changes we missed this time around. */
+ if (pdb && (excluded
+ || (parent_depth != svn_depth_unknown &&
+ parent_depth < svn_depth_immediates)))
+ {
+ db->shadowed = TRUE;
+
+ db->tree_conflict_reason = CONFLICT_REASON_SKIP;
+ db->skip_reason = svn_wc_notify_state_missing;
+
+ return SVN_NO_ERROR;
+ }
+
+ if (is_deleted)
+ db->tree_conflict_reason = svn_wc_conflict_reason_deleted;
+ else
+ db->tree_conflict_reason = svn_wc_conflict_reason_missing;
+
+ /* ### To avoid breaking tests */
+ *skip = TRUE;
+ *skip_children = TRUE;
+ SVN_ERR(mark_dir_edited(merge_b, db, local_abspath, scratch_pool));
+ return SVN_NO_ERROR;
+ /* ### /avoid breaking tests */
+ }
+ else if (kind != svn_node_dir)
{
- merge_b->added_path = apr_pstrdup(merge_b->pool, local_abspath);
- apr_hash_set(merge_b->dry_run_added, merge_b->added_path,
- APR_HASH_KEY_STRING, merge_b->added_path);
+ db->shadowed = TRUE;
+
+ db->tree_conflict_reason = svn_wc_conflict_reason_obstructed;
+
+ /* ### To avoid breaking tests */
+ *skip = TRUE;
+ *skip_children = TRUE;
+ SVN_ERR(mark_dir_edited(merge_b, db, local_abspath, scratch_pool));
+ return SVN_NO_ERROR;
+ /* ### /avoid breaking tests */
}
- else
+
+ if (! right_source)
{
- SVN_ERR(svn_io_dir_make(local_abspath, APR_OS_DEFAULT,
- scratch_pool));
- SVN_ERR(svn_wc_add4(merge_b->ctx->wc_ctx, local_abspath,
- svn_depth_infinity,
- copyfrom_url, copyfrom_rev,
- merge_b->ctx->cancel_func,
- merge_b->ctx->cancel_baton,
- NULL, NULL, /* don't pass notification func! */
- scratch_pool));
+ /* We want to delete the directory */
+ /* Mark PB edited now? */
+ db->tree_conflict_action = svn_wc_conflict_action_delete;
+ SVN_ERR(mark_dir_edited(merge_b, db, local_abspath, scratch_pool));
+ if (db->shadowed)
+ {
+ *skip_children = TRUE;
+ return SVN_NO_ERROR; /* Already set a tree conflict */
+ }
+
+ db->delete_state = (pdb != NULL) ? pdb->delete_state : NULL;
+
+ if (db->delete_state && db->delete_state->found_edit)
+ {
+ /* A sibling found a conflict. Done. */
+ *skip = TRUE;
+ *skip_children = TRUE;
+ }
+ else if (merge_b->force_delete)
+ {
+ /* No comparison necessary */
+ *skip_children = TRUE;
+ }
+ else if (! db->delete_state)
+ {
+ /* Start descendant comparison */
+ db->delete_state = apr_pcalloc(db->pool,
+ sizeof(*db->delete_state));
+
+ db->delete_state->del_root = db;
+ db->delete_state->compared_abspaths = apr_hash_make(db->pool);
+ }
}
- if (state)
- *state = svn_wc_notify_state_changed;
- break;
- case svn_node_dir:
- /* Adding an unversioned directory doesn't destroy data */
- if (! is_versioned || is_deleted)
- {
- /* The dir is not known to Subversion, or is schedule-delete.
- * We will make it schedule-add. */
- if (!merge_b->dry_run)
- SVN_ERR(svn_wc_add4(merge_b->ctx->wc_ctx, local_abspath,
- svn_depth_infinity,
- copyfrom_url, copyfrom_rev,
- merge_b->ctx->cancel_func,
- merge_b->ctx->cancel_baton,
- NULL, NULL, /* no notification func! */
- scratch_pool));
- else
- merge_b->added_path = apr_pstrdup(merge_b->pool, local_abspath);
- if (state)
- *state = svn_wc_notify_state_changed;
+ }
+ else
+ {
+ const svn_wc_conflict_description2_t *old_tc = NULL;
+
+ /* The node doesn't exist pre-merge: We have an addition */
+ db->added = TRUE;
+ db->tree_conflict_action = svn_wc_conflict_action_add;
+
+ if (pdb && pdb->pending_deletes
+ && svn_hash_gets(pdb->pending_deletes, local_abspath))
+ {
+ db->add_is_replace = TRUE;
+ db->tree_conflict_action = svn_wc_conflict_action_replace;
+
+ svn_hash_sets(pdb->pending_deletes, local_abspath, NULL);
}
- else
+
+ if (pdb
+ && pdb->new_tree_conflicts
+ && (old_tc = svn_hash_gets(pdb->new_tree_conflicts, local_abspath)))
{
- /* The dir is known to Subversion as already existing. */
- if (dry_run_deleted_p(merge_b, local_abspath))
+ db->tree_conflict_action = svn_wc_conflict_action_replace;
+ db->tree_conflict_reason = old_tc->reason;
+
+ if (old_tc->reason == svn_wc_conflict_reason_deleted
+ || old_tc->reason == svn_wc_conflict_reason_moved_away)
{
- if (state)
- *state = svn_wc_notify_state_changed;
+ /* Issue #3806: Incoming replacements on local deletes produce
+ inconsistent result.
+
+ In this specific case we can continue applying the add part
+ of the replacement. */
}
else
{
- /* This is a tree conflict. */
- SVN_ERR(tree_conflict_on_add(merge_b, local_abspath,
+ *skip = TRUE;
+ *skip_children = TRUE;
+
+ /* Update the tree conflict to store that this is a replace */
+ SVN_ERR(record_tree_conflict(merge_b, local_abspath, pdb,
svn_node_dir,
- svn_wc_conflict_action_add,
- svn_wc_conflict_reason_added));
- if (tree_conflicted)
- *tree_conflicted = TRUE;
- if (state)
- *state = svn_wc_notify_state_obstructed;
+ db->tree_conflict_action,
+ db->tree_conflict_reason,
+ old_tc, FALSE,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
}
}
- break;
- case svn_node_file:
- if (merge_b->dry_run)
- merge_b->added_path = NULL;
- if (is_versioned && dry_run_deleted_p(merge_b, local_abspath))
+ if (! (merge_b->dry_run
+ && ((pdb && pdb->added) || db->add_is_replace)))
{
- /* ### TODO: Retain record of this dir being added to
- ### avoid problems from subsequent edits which try to
- ### add children. */
- if (state)
- *state = svn_wc_notify_state_changed;
+ svn_wc_notify_state_t obstr_state;
+ svn_node_kind_t kind;
+ svn_boolean_t is_deleted;
+
+ SVN_ERR(perform_obstruction_check(&obstr_state, &is_deleted, NULL,
+ &kind, NULL,
+ merge_b, local_abspath,
+ scratch_pool));
+
+ /* In this case of adding a directory, we have an exception to the
+ * usual "skip if it's inconsistent" rule. If the directory exists
+ * on disk unexpectedly, we simply make it versioned, because we can
+ * do so without risk of destroying data. Only skip if it is
+ * versioned but unexpectedly missing from disk, or is unversioned
+ * but obstructed by a node of the wrong kind. */
+ if (obstr_state == svn_wc_notify_state_obstructed
+ && (is_deleted || kind == svn_node_none))
+ {
+ svn_node_kind_t disk_kind;
+
+ SVN_ERR(svn_io_check_path(local_abspath, &disk_kind,
+ scratch_pool));
+
+ if (disk_kind == svn_node_dir)
+ {
+ obstr_state = svn_wc_notify_state_inapplicable;
+ db->add_existing = TRUE; /* Take over existing directory */
+ }
+ }
+
+ if (obstr_state != svn_wc_notify_state_inapplicable)
+ {
+ /* Skip the obstruction */
+ db->shadowed = TRUE;
+ db->tree_conflict_reason = CONFLICT_REASON_SKIP;
+ db->skip_reason = obstr_state;
+ }
+ else if (kind != svn_node_none && !is_deleted)
+ {
+ /* Set a tree conflict */
+ db->shadowed = TRUE;
+ db->tree_conflict_reason = svn_wc_conflict_reason_obstructed;
+
+ if ((merge_b->merge_source.ancestral || merge_b->reintegrate_merge)
+ && !(pdb && pdb->shadowed))
+ {
+ store_path(merge_b->skipped_abspaths, local_abspath);
+ }
+ }
}
- else
+
+ /* Handle pending conflicts */
+ SVN_ERR(mark_dir_edited(merge_b, db, local_abspath, scratch_pool));
+
+ if (db->shadowed)
{
- /* Obstructed: we can't add a dir because there's a file here. */
- SVN_ERR(tree_conflict_on_add(merge_b, local_abspath, svn_node_dir,
- svn_wc_conflict_action_add,
- svn_wc_conflict_reason_obstructed));
- if (tree_conflicted)
- *tree_conflicted = TRUE;
- if (state)
- *state = svn_wc_notify_state_obstructed;
+ /* Notified and done. Skip children? */
}
- break;
- default:
- if (merge_b->dry_run)
- merge_b->added_path = NULL;
- if (state)
- *state = svn_wc_notify_state_unknown;
- break;
- }
+ else if (merge_b->record_only)
+ {
+ /* Ok, we are done for this node and its descendants */
+ *skip = TRUE;
+ *skip_children = TRUE;
+ }
+ else if (! merge_b->dry_run)
+ {
+ /* Create the directory on disk, to allow descendants to be added */
+ if (! db->add_existing)
+ SVN_ERR(svn_io_dir_make(local_abspath, APR_OS_DEFAULT,
+ scratch_pool));
+
+ if (old_tc)
+ {
+ /* svn_wc_add4 and svn_wc_add_from_disk2 can't add a node
+ over an existing tree conflict */
+ /* ### These functions should take some tree conflict argument
+ and allow overwriting the tc when one is passed */
+
+ SVN_ERR(svn_wc__del_tree_conflict(merge_b->ctx->wc_ctx,
+ local_abspath,
+ scratch_pool));
+ }
+
+ if (merge_b->same_repos)
+ {
+ const char *original_url;
+
+ original_url = svn_path_url_add_component2(
+ merge_b->merge_source.loc2->url,
+ relpath, scratch_pool);
+
+ /* Limitation (aka HACK):
+ We create a newly added directory with an original URL and
+ revision as that in the repository, but without its properties
+ and children.
+
+ When the merge is cancelled before the final dir_added(), the
+ copy won't really represent the in-repository state of the node.
+ */
+ SVN_ERR(svn_wc_add4(merge_b->ctx->wc_ctx, local_abspath,
+ svn_depth_infinity,
+ original_url,
+ right_source->revision,
+ merge_b->ctx->cancel_func,
+ merge_b->ctx->cancel_baton,
+ NULL, NULL /* no notify! */,
+ scratch_pool));
+ }
+ else
+ {
+ SVN_ERR(svn_wc_add_from_disk2(merge_b->ctx->wc_ctx, local_abspath,
+ apr_hash_make(scratch_pool),
+ NULL, NULL /* no notify! */,
+ scratch_pool));
+ }
+
+ if (old_tc != NULL)
+ {
+ /* ### Should be atomic with svn_wc_add(4|_from_disk2)() */
+ SVN_ERR(record_tree_conflict(merge_b, local_abspath, pdb,
+ svn_node_dir,
+ db->tree_conflict_action,
+ db->tree_conflict_reason,
+ old_tc, FALSE,
+ scratch_pool));
+ }
+ }
+
+ if (! db->shadowed && !merge_b->record_only)
+ SVN_ERR(record_update_add(merge_b, local_abspath, svn_node_dir,
+ db->add_is_replace, scratch_pool));
+ }
return SVN_NO_ERROR;
}
-/* An svn_wc_diff_callbacks4_t function. */
+/* An svn_diff_tree_processor_t function.
+ *
+ * Called after merge_dir_opened() when a node exists in both the left and
+ * right source, but has its properties changed inbetween.
+ *
+ * After the merge_dir_opened() but before the call to this merge_dir_changed()
+ * function all descendants will have been updated.
+ */
static svn_error_t *
-merge_dir_deleted(svn_wc_notify_state_t *state,
- svn_boolean_t *tree_conflicted,
- const char *local_abspath,
- void *baton,
+merge_dir_changed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ /*const*/ apr_hash_t *left_props,
+ /*const*/ apr_hash_t *right_props,
+ const apr_array_header_t *prop_changes,
+ void *dir_baton,
+ const struct svn_diff_tree_processor_t *processor,
apr_pool_t *scratch_pool)
{
- merge_cmd_baton_t *merge_b = baton;
- svn_node_kind_t kind;
- svn_error_t *err;
- svn_boolean_t is_versioned;
- svn_boolean_t is_deleted;
+ merge_cmd_baton_t *merge_b = processor->baton;
+ struct merge_dir_baton_t *db = dir_baton;
+ const apr_array_header_t *props;
+ const char *local_abspath = svn_dirent_join(merge_b->target->abspath,
+ relpath, scratch_pool);
- /* Easy out: We are only applying mergeinfo differences. */
- if (merge_b->record_only)
+ SVN_ERR(handle_pending_notifications(merge_b, db, scratch_pool));
+
+ SVN_ERR(mark_dir_edited(merge_b, db, local_abspath, scratch_pool));
+
+ if (db->shadowed)
{
- if (state)
- *state = svn_wc_notify_state_unchanged;
+ if (db->tree_conflict_reason == CONFLICT_REASON_NONE)
+ {
+ /* We haven't notified for this node yet: report a skip */
+ SVN_ERR(record_skip(merge_b, local_abspath, svn_node_dir,
+ svn_wc_notify_update_shadowed_update,
+ db->skip_reason, db->parent_baton,
+ scratch_pool));
+ }
+
return SVN_NO_ERROR;
}
- /* Check for an obstructed or missing node on disk. */
- {
- svn_wc_notify_state_t obstr_state;
+ SVN_ERR(prepare_merge_props_changed(&props, local_abspath, prop_changes,
+ merge_b, scratch_pool, scratch_pool));
- SVN_ERR(perform_obstruction_check(&obstr_state, NULL,
- &is_deleted, &kind,
- merge_b, local_abspath, svn_node_unknown,
- scratch_pool));
+ if (props->nelts)
+ {
+ const svn_wc_conflict_version_t *left;
+ const svn_wc_conflict_version_t *right;
+ svn_client_ctx_t *ctx = merge_b->ctx;
+ svn_wc_notify_state_t prop_state;
+
+ SVN_ERR(make_conflict_versions(&left, &right, local_abspath,
+ svn_node_dir, &merge_b->merge_source,
+ merge_b->target,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(svn_wc_merge_props3(&prop_state, ctx->wc_ctx, local_abspath,
+ left, right,
+ left_props, props,
+ merge_b->dry_run,
+ NULL, NULL,
+ ctx->cancel_func, ctx->cancel_baton,
+ scratch_pool));
- is_versioned = (kind == svn_node_dir) || (kind == svn_node_file);
+ if (prop_state == svn_wc_notify_state_conflicted)
+ {
+ alloc_and_store_path(&merge_b->conflicted_paths, local_abspath,
+ merge_b->pool);
+ }
- if (obstr_state != svn_wc_notify_state_inapplicable)
- {
- if (state)
- *state = obstr_state;
- return SVN_NO_ERROR;
- }
+ if (prop_state == svn_wc_notify_state_conflicted
+ || prop_state == svn_wc_notify_state_merged
+ || prop_state == svn_wc_notify_state_changed)
+ {
+ SVN_ERR(record_update_update(merge_b, local_abspath, svn_node_file,
+ svn_wc_notify_state_inapplicable,
+ prop_state, scratch_pool));
+ }
+ }
- if (is_deleted)
- kind = svn_node_none;
- }
+ return SVN_NO_ERROR;
+}
+
+
+/* An svn_diff_tree_processor_t function.
+ *
+ * Called after merge_dir_opened() when a node doesn't exist in LEFT_SOURCE,
+ * but does in RIGHT_SOURCE. After the merge_dir_opened() but before the call
+ * to this merge_dir_added() function all descendants will have been added.
+ *
+ * When a node is replaced instead of just added a separate opened+deleted will
+ * be invoked before the current open+added.
+ */
+static svn_error_t *
+merge_dir_added(const char *relpath,
+ const svn_diff_source_t *copyfrom_source,
+ const svn_diff_source_t *right_source,
+ /*const*/ apr_hash_t *copyfrom_props,
+ /*const*/ apr_hash_t *right_props,
+ void *dir_baton,
+ const struct svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ merge_cmd_baton_t *merge_b = processor->baton;
+ struct merge_dir_baton_t *db = dir_baton;
+ const char *local_abspath = svn_dirent_join(merge_b->target->abspath,
+ relpath, scratch_pool);
+
+ /* For consistency; usually a no-op from _dir_added() */
+ SVN_ERR(handle_pending_notifications(merge_b, db, scratch_pool));
+ SVN_ERR(mark_dir_edited(merge_b, db, local_abspath, scratch_pool));
- if (merge_b->dry_run)
+ if (db->shadowed)
{
- const char *wcpath = apr_pstrdup(merge_b->pool, local_abspath);
- apr_hash_set(merge_b->dry_run_deletions, wcpath,
- APR_HASH_KEY_STRING, wcpath);
+ if (db->tree_conflict_reason == CONFLICT_REASON_NONE)
+ {
+ /* We haven't notified for this node yet: report a skip */
+ SVN_ERR(record_skip(merge_b, local_abspath, svn_node_dir,
+ svn_wc_notify_update_shadowed_add,
+ db->skip_reason, db->parent_baton,
+ scratch_pool));
+ }
+
+ return SVN_NO_ERROR;
}
+ SVN_ERR_ASSERT(
+ db->edited /* Marked edited from merge_open_dir() */
+ && ! merge_b->record_only /* Skip details from merge_open_dir() */
+ );
- /* Switch on the wc state of this path */
- switch (kind)
+ if ((merge_b->merge_source.ancestral || merge_b->reintegrate_merge)
+ && ( !db->parent_baton || !db->parent_baton->added))
{
- case svn_node_dir:
- {
- if (is_versioned && !is_deleted)
- {
- /* ### TODO: Before deleting, we should ensure that this dir
- tree is equal to the one we're being asked to delete.
- If not, mark this directory as a tree conflict victim,
- because this could be use case 5 as described in
- notes/tree-conflicts/detection.txt.
- */
-
- /* Passing NULL for the notify_func and notify_baton because
- repos_diff.c:delete_entry() will do it for us. */
- err = svn_client__wc_delete(local_abspath, merge_b->force,
- merge_b->dry_run, FALSE,
- NULL, NULL,
- merge_b->ctx, scratch_pool);
- if (err)
- {
- svn_error_clear(err);
-
- /* If the attempt to delete an existing directory failed,
- * the directory has local modifications (e.g. locally added
- * files, or property changes). Flag a tree conflict. */
- SVN_ERR(tree_conflict(merge_b, local_abspath, svn_node_dir,
- svn_wc_conflict_action_delete,
- svn_wc_conflict_reason_edited));
- if (tree_conflicted)
- *tree_conflicted = TRUE;
- if (state)
- *state = svn_wc_notify_state_conflicted;
- }
- else
- {
- if (state)
- *state = svn_wc_notify_state_changed;
- }
- }
- else
- {
- /* Dir is already not under version control at this path. */
- /* Raise a tree conflict. */
- SVN_ERR(tree_conflict(merge_b, local_abspath, svn_node_dir,
- svn_wc_conflict_action_delete,
- svn_wc_conflict_reason_deleted));
- if (tree_conflicted)
- *tree_conflicted = TRUE;
- }
- }
- break;
- case svn_node_file:
- if (state)
- *state = svn_wc_notify_state_obstructed;
- break;
- case svn_node_none:
- /* Dir is already non-existent. This is use case 6 as described in
- * notes/tree-conflicts/detection.txt.
- * This case was formerly treated as no-op. */
- SVN_ERR(tree_conflict(merge_b, local_abspath, svn_node_dir,
- svn_wc_conflict_action_delete,
- svn_wc_conflict_reason_deleted));
- if (tree_conflicted)
- *tree_conflicted = TRUE;
- if (state)
- *state = svn_wc_notify_state_missing;
- break;
- default:
- if (state)
- *state = svn_wc_notify_state_unknown;
- break;
+ /* Store the roots of added subtrees */
+ store_path(merge_b->added_abspaths, local_abspath);
+ }
+
+ if (merge_b->same_repos)
+ {
+ /* When the directory was added in merge_dir_added() we didn't update its
+ pristine properties. Instead we receive the property changes later and
+ apply them in this function.
+
+ If we would apply them as changes (such as before fixing issue #3405),
+ we would see the unmodified properties as local changes, and the
+ pristine properties would be out of sync with what the repository
+ expects for this directory.
+
+ Instead of doing that we now simply set the properties as the pristine
+ properties via a private libsvn_wc api.
+ */
+
+ const char *copyfrom_url;
+ svn_revnum_t copyfrom_rev;
+ const char *parent_abspath;
+ const char *child;
+
+ /* Creating a hash containing regular and entry props */
+ apr_hash_t *new_pristine_props = right_props;
+
+ parent_abspath = svn_dirent_dirname(local_abspath, scratch_pool);
+ child = svn_dirent_is_child(merge_b->target->abspath, local_abspath, NULL);
+ SVN_ERR_ASSERT(child != NULL);
+
+ copyfrom_url = svn_path_url_add_component2(merge_b->merge_source.loc2->url,
+ child, scratch_pool);
+ copyfrom_rev = right_source->revision;
+
+ SVN_ERR(check_repos_match(merge_b->target, parent_abspath, copyfrom_url,
+ scratch_pool));
+
+ if (!merge_b->dry_run)
+ {
+ SVN_ERR(svn_wc__complete_directory_add(merge_b->ctx->wc_ctx,
+ local_abspath,
+ new_pristine_props,
+ copyfrom_url, copyfrom_rev,
+ scratch_pool));
+ }
+
+ if (svn_hash_gets(new_pristine_props, SVN_PROP_MERGEINFO))
+ {
+ alloc_and_store_path(&merge_b->paths_with_new_mergeinfo,
+ local_abspath, merge_b->pool);
+ }
+ }
+ else
+ {
+ apr_array_header_t *regular_props;
+ apr_hash_t *new_props;
+ svn_wc_notify_state_t prop_state;
+
+ SVN_ERR(svn_categorize_props(svn_prop_hash_to_array(right_props,
+ scratch_pool),
+ NULL, NULL, &regular_props, scratch_pool));
+
+ new_props = svn_prop_array_to_hash(regular_props, scratch_pool);
+
+ svn_hash_sets(new_props, SVN_PROP_MERGEINFO, NULL);
+
+ /* ### What is the easiest way to set new_props on LOCAL_ABSPATH?
+
+ ### This doesn't need a merge as we just added the node
+ ### (or installed a tree conflict and skipped this node)*/
+
+ SVN_ERR(svn_wc_merge_props3(&prop_state, merge_b->ctx->wc_ctx,
+ local_abspath,
+ NULL, NULL,
+ apr_hash_make(scratch_pool),
+ svn_prop_hash_to_array(new_props,
+ scratch_pool),
+ merge_b->dry_run,
+ NULL, NULL,
+ merge_b->ctx->cancel_func,
+ merge_b->ctx->cancel_baton,
+ scratch_pool));
+ if (prop_state == svn_wc_notify_state_conflicted)
+ {
+ alloc_and_store_path(&merge_b->conflicted_paths, local_abspath,
+ merge_b->pool);
+ }
}
return SVN_NO_ERROR;
}
-/* An svn_wc_diff_callbacks4_t function. */
+/* Helper for merge_dir_deleted. Implement svn_wc_status_func4_t */
static svn_error_t *
-merge_dir_opened(svn_boolean_t *tree_conflicted,
- svn_boolean_t *skip,
- svn_boolean_t *skip_children,
- const char *local_abspath,
- svn_revnum_t rev,
- void *baton,
- apr_pool_t *scratch_pool)
+verify_touched_by_del_check(void *baton,
+ const char *local_abspath,
+ const svn_wc_status3_t *status,
+ apr_pool_t *scratch_pool)
{
- merge_cmd_baton_t *merge_b = baton;
- svn_depth_t parent_depth;
- svn_node_kind_t wc_kind;
- svn_wc_notify_state_t obstr_state;
- svn_boolean_t is_deleted;
+ struct dir_delete_baton_t *delb = baton;
- SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+ if (svn_hash_gets(delb->compared_abspaths, local_abspath))
+ return SVN_NO_ERROR;
- /* Check for an obstructed or missing node on disk. */
- SVN_ERR(perform_obstruction_check(&obstr_state, NULL,
- &is_deleted, &wc_kind,
- merge_b, local_abspath, svn_node_unknown,
- scratch_pool));
+ switch (status->node_status)
+ {
+ case svn_wc_status_deleted:
+ case svn_wc_status_ignored:
+ case svn_wc_status_none:
+ return SVN_NO_ERROR;
+
+ default:
+ delb->found_edit = TRUE;
+ return svn_error_create(SVN_ERR_CEASE_INVOCATION, NULL, NULL);
+ }
+}
+
+/* An svn_diff_tree_processor_t function.
+ *
+ * Called after merge_dir_opened() when a node existed only in the left source.
+ *
+ * After the merge_dir_opened() but before the call to this merge_dir_deleted()
+ * function all descendants that existed in left_source will have been deleted.
+ *
+ * If this node is replaced, an _opened() followed by a matching _add() will
+ * be invoked after this function.
+ */
+static svn_error_t *
+merge_dir_deleted(const char *relpath,
+ const svn_diff_source_t *left_source,
+ /*const*/ apr_hash_t *left_props,
+ void *dir_baton,
+ const struct svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ merge_cmd_baton_t *merge_b = processor->baton;
+ struct merge_dir_baton_t *db = dir_baton;
+ const char *local_abspath = svn_dirent_join(merge_b->target->abspath,
+ relpath, scratch_pool);
+ svn_boolean_t same;
+ apr_hash_t *working_props;
+
+ SVN_ERR(handle_pending_notifications(merge_b, db, scratch_pool));
+ SVN_ERR(mark_dir_edited(merge_b, db, local_abspath, scratch_pool));
- if (obstr_state != svn_wc_notify_state_inapplicable)
+ if (db->shadowed)
{
- if (skip_children)
- *skip_children = TRUE;
- /* But don't skip THIS, to allow a skip notification */
+ if (db->tree_conflict_reason == CONFLICT_REASON_NONE)
+ {
+ /* We haven't notified for this node yet: report a skip */
+ SVN_ERR(record_skip(merge_b, local_abspath, svn_node_dir,
+ svn_wc_notify_update_shadowed_delete,
+ db->skip_reason, db->parent_baton,
+ scratch_pool));
+ }
+
return SVN_NO_ERROR;
}
- if (wc_kind != svn_node_dir || is_deleted)
+ /* Easy out: We are only applying mergeinfo differences. */
+ if (merge_b->record_only)
{
- if (wc_kind == svn_node_none)
+ return SVN_NO_ERROR;
+ }
+
+ SVN_ERR(svn_wc_prop_list2(&working_props,
+ merge_b->ctx->wc_ctx, local_abspath,
+ scratch_pool, scratch_pool));
+
+ if (merge_b->force_delete)
+ {
+ /* In this legacy mode we just assume that a directory delete
+ matches any directory. db->delete_state is NULL */
+ same = TRUE;
+ }
+ else
+ {
+ struct dir_delete_baton_t *delb;
+
+ /* Compare the properties */
+ SVN_ERR(properties_same_p(&same, left_props, working_props,
+ scratch_pool));
+ delb = db->delete_state;
+ assert(delb != NULL);
+
+ if (! same)
{
- /* If the parent is too shallow to contain this directory,
- * and the directory is not present on disk, skip it.
- * Non-inheritable mergeinfo will be recorded, allowing
- * future merges into non-shallow working copies to merge
- * changes we missed this time around. */
- SVN_ERR(svn_wc__node_get_depth(&parent_depth, merge_b->ctx->wc_ctx,
- svn_dirent_dirname(local_abspath,
- scratch_pool),
- scratch_pool));
- if (parent_depth != svn_depth_unknown &&
- parent_depth < svn_depth_immediates)
+ delb->found_edit = TRUE;
+ }
+ else
+ {
+ store_path(delb->compared_abspaths, local_abspath);
+ }
+
+ if (delb->del_root != db)
+ return SVN_NO_ERROR;
+
+ if (delb->found_edit)
+ same = FALSE;
+ else
+ {
+ apr_array_header_t *ignores;
+ svn_error_t *err;
+ same = TRUE;
+
+ SVN_ERR(svn_wc_get_default_ignores(&ignores, merge_b->ctx->config,
+ scratch_pool));
+
+ /* None of the descendants was modified, but maybe there are
+ descendants we haven't walked?
+
+ Note that we aren't interested in changes, as we already verified
+ changes in the paths touched by the merge. And the existence of
+ other paths is enough to mark the directory edited */
+ err = svn_wc_walk_status(merge_b->ctx->wc_ctx, local_abspath,
+ svn_depth_infinity, TRUE /* get-all */,
+ FALSE /* no-ignore */,
+ TRUE /* ignore-text-mods */, ignores,
+ verify_touched_by_del_check, delb,
+ merge_b->ctx->cancel_func,
+ merge_b->ctx->cancel_baton,
+ scratch_pool);
+
+ if (err)
{
- if (skip_children)
- *skip_children = TRUE;
- return SVN_NO_ERROR;
+ if (err->apr_err != SVN_ERR_CEASE_INVOCATION)
+ return svn_error_trace(err);
+
+ svn_error_clear(err);
}
+
+ same = ! delb->found_edit;
}
+ }
- /* Check for tree conflicts, if any. */
+ if (same && !merge_b->dry_run)
+ {
+ svn_error_t *err;
- /* If we're trying to open a file, the reason for the conflict is
- * 'replaced'. Because the merge is trying to open the directory,
- * rather than adding it, the directory must have existed in the
- * history of the target branch and has been replaced with a file. */
- if (wc_kind == svn_node_file)
+ err = svn_wc_delete4(merge_b->ctx->wc_ctx, local_abspath,
+ FALSE /* keep_local */, FALSE /* unversioned */,
+ merge_b->ctx->cancel_func,
+ merge_b->ctx->cancel_baton,
+ NULL, NULL /* no notify */,
+ scratch_pool);
+
+ if (err)
{
- SVN_ERR(tree_conflict(merge_b, local_abspath, svn_node_dir,
- svn_wc_conflict_action_edit,
- svn_wc_conflict_reason_replaced));
- if (tree_conflicted)
- *tree_conflicted = TRUE;
+ if (err->apr_err != SVN_ERR_WC_LEFT_LOCAL_MOD)
+ return svn_error_trace(err);
+
+ svn_error_clear(err);
+ same = FALSE;
}
+ }
- /* If we're trying to open a directory that's locally deleted,
- * or not present because it was deleted in the history of the
- * target branch, the reason for the conflict is 'deleted'.
- *
- * If the DB says something should be here, but there is
- * nothing on disk, we're probably in a mixed-revision
- * working copy and the parent has an outdated idea about
- * the state of its child. Flag a tree conflict in this case
- * forcing the user to sanity-check the merge result. */
- else if (is_deleted || wc_kind == svn_node_none)
+ if (! same)
+ {
+ /* If the attempt to delete an existing directory failed,
+ * the directory has local modifications (e.g. locally added
+ * files, or property changes). Flag a tree conflict. */
+
+ /* This handles use case 5 described in the paper attached to issue
+ * #2282. See also notes/tree-conflicts/detection.txt
+ */
+ SVN_ERR(record_tree_conflict(merge_b, local_abspath, db->parent_baton,
+ svn_node_dir,
+ svn_wc_conflict_action_delete,
+ svn_wc_conflict_reason_edited,
+ NULL, TRUE,
+ scratch_pool));
+ }
+ else
+ {
+ /* Record that we might have deleted mergeinfo */
+ if (working_props
+ && svn_hash_gets(working_props, SVN_PROP_MERGEINFO))
{
- SVN_ERR(tree_conflict(merge_b, local_abspath, svn_node_dir,
- svn_wc_conflict_action_edit,
- svn_wc_conflict_reason_deleted));
- if (tree_conflicted)
- *tree_conflicted = TRUE;
+ alloc_and_store_path(&merge_b->paths_with_deleted_mergeinfo,
+ local_abspath, merge_b->pool);
}
+
+ SVN_ERR(record_update_delete(merge_b, db->parent_baton, local_abspath,
+ svn_node_dir, scratch_pool));
}
return SVN_NO_ERROR;
}
-/* An svn_wc_diff_callbacks4_t function. */
+/* An svn_diff_tree_processor_t function.
+ *
+ * Called after merge_dir_opened() when a node itself didn't change between
+ * the left and right source.
+ *
+ * After the merge_dir_opened() but before the call to this merge_dir_closed()
+ * function all descendants will have been processed.
+ */
static svn_error_t *
-merge_dir_closed(svn_wc_notify_state_t *contentstate,
- svn_wc_notify_state_t *propstate,
- svn_boolean_t *tree_conflicted,
- const char *path,
- svn_boolean_t dir_was_added,
- void *baton,
+merge_dir_closed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ void *dir_baton,
+ const struct svn_diff_tree_processor_t *processor,
apr_pool_t *scratch_pool)
{
- merge_cmd_baton_t *merge_b = baton;
+ merge_cmd_baton_t *merge_b = processor->baton;
+ struct merge_dir_baton_t *db = dir_baton;
- if (merge_b->dry_run)
- svn_hash__clear(merge_b->dry_run_deletions, scratch_pool);
+ SVN_ERR(handle_pending_notifications(merge_b, db, scratch_pool));
return SVN_NO_ERROR;
}
-/* The main callback table for 'svn merge'. */
-static const svn_wc_diff_callbacks4_t
-merge_callbacks =
- {
- merge_file_opened,
- merge_file_changed,
- merge_file_added,
- merge_file_deleted,
- merge_dir_deleted,
- merge_dir_opened,
- merge_dir_added,
- merge_dir_props_changed,
- merge_dir_closed
- };
+/* An svn_diff_tree_processor_t function.
+ Called when the diff driver wants to report an absent path.
-/*-----------------------------------------------------------------------*/
-
-/*** Merge Notification ***/
+ In case of merges this happens when the diff encounters a server-excluded
+ path.
+ We register a skipped path, which will make parent mergeinfo non-
+ inheritable. This ensures that a future merge might see these skipped
+ changes as eligable for merging.
-/* Contains any state collected while receiving path notifications. */
-typedef struct notification_receiver_baton_t
+ For legacy reasons we also notify the path as skipped.
+ */
+static svn_error_t *
+merge_node_absent(const char *relpath,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
{
- /* The wrapped callback and baton. */
- svn_wc_notify_func2_t wrapped_func;
- void *wrapped_baton;
+ merge_cmd_baton_t *merge_b = processor->baton;
+ struct merge_dir_baton_t *db = dir_baton;
- /* The number of notifications received. */
- apr_uint32_t nbr_notifications;
+ const char *local_abspath = svn_dirent_join(merge_b->target->abspath,
+ relpath, scratch_pool);
- /* The number of operative notifications received. */
- apr_uint32_t nbr_operative_notifications;
+ SVN_ERR(record_skip(merge_b, local_abspath, svn_node_unknown,
+ svn_wc_notify_skip, svn_wc_notify_state_missing,
+ db, scratch_pool));
- /* The list of absolute merged paths. Is NULL if MERGE_B->SOURCES_ANCESTRAL
- and MERGE_B->REINTEGRATE_MERGE are both false. */
- apr_hash_t *merged_abspaths;
-
- /* The list of absolute skipped paths, which should be examined and
- cleared after each invocation of the callback. The paths
- are absolute. Is NULL if MERGE_B->SOURCES_ANCESTRAL and
- MERGE_B->REINTEGRATE_MERGE are both false. */
- apr_hash_t *skipped_abspaths;
-
- /* A list of the absolute root paths of any added subtrees which might
- require their own explicit mergeinfo. Is NULL if
- MERGE_B->SOURCES_ANCESTRAL and MERGE_B->REINTEGRATE_MERGE are both
- false. */
- apr_hash_t *added_abspaths;
-
- /* A list of tree conflict victim absolute paths which may be NULL. Is NULL
- if MERGE_B->SOURCES_ANCESTRAL and MERGE_B->REINTEGRATE_MERGE are both
- false. */
- apr_hash_t *tree_conflicted_abspaths;
+ return SVN_NO_ERROR;
+}
- /* Flag indicating whether it is a single file merge or not. */
- svn_boolean_t is_single_file_merge;
+/*-----------------------------------------------------------------------*/
+
+/*** Merge Notification ***/
- /* Depth first ordered list of paths that needs special care while merging.
- This defaults to NULL. For 'same_url' merge alone we set it to
- proper array. This is used by notification_receiver to put a
- merge notification begin lines. */
- apr_array_header_t *children_with_mergeinfo;
- /* The index in CHILDREN_WITH_MERGEINFO where we found the nearest ancestor
- for merged path. Default value is '-1'.*/
- int cur_ancestor_index;
+/* Finds a nearest ancestor in CHILDREN_WITH_MERGEINFO for LOCAL_ABSPATH. If
+ PATH_IS_OWN_ANCESTOR is TRUE then a child in CHILDREN_WITH_MERGEINFO
+ where child->abspath == PATH is considered PATH's ancestor. If FALSE,
+ then child->abspath must be a proper ancestor of PATH.
- /* We use this to make a decision on merge begin line notifications. */
- merge_cmd_baton_t *merge_b;
+ CHILDREN_WITH_MERGEINFO is expected to be sorted in Depth first
+ order of path. */
+static svn_client__merge_path_t *
+find_nearest_ancestor(const apr_array_header_t *children_with_mergeinfo,
+ svn_boolean_t path_is_own_ancestor,
+ const char *local_abspath)
+{
+ int i;
- /* Pool used in notification_receiver() to avoid the iteration
- sub-pool which is passed in, then subsequently destroyed. */
- apr_pool_t *pool;
+ SVN_ERR_ASSERT_NO_RETURN(children_with_mergeinfo != NULL);
-} notification_receiver_baton_t;
+ for (i = children_with_mergeinfo->nelts - 1; i >= 0 ; i--)
+ {
+ svn_client__merge_path_t *child =
+ APR_ARRAY_IDX(children_with_mergeinfo, i, svn_client__merge_path_t *);
+ if (svn_dirent_is_ancestor(child->abspath, local_abspath)
+ && (path_is_own_ancestor
+ || strcmp(child->abspath, local_abspath) != 0))
+ return child;
+ }
+ return NULL;
+}
-/* Finds a nearest ancestor in CHILDREN_WITH_MERGEINFO for PATH. If
- PATH_IS_OWN_ANCESTOR is TRUE then a child in CHILDREN_WITH_MERGEINFO
+/* Find the highest level path in a merge target (possibly the merge target
+ itself) to use in a merge notification header.
+
+ Return the svn_client__merge_path_t * representing the most distant
+ ancestor in CHILDREN_WITH_MERGEINFO of LOCAL_ABSPATH where said
+ ancestor's first remaining ranges element (per the REMAINING_RANGES
+ member of the ancestor) intersect with the first remaining ranges element
+ for every intermediate ancestor svn_client__merge_path_t * of
+ LOCAL_ABSPATH. If no such ancestor is found return NULL.
+
+ If the remaining ranges of the elements in CHILDREN_WITH_MERGEINFO
+ represent a forward merge, then set *START to the oldest revision found
+ in any of the intersecting ancestors and *END to the youngest revision
+ found. If the remaining ranges of the elements in CHILDREN_WITH_MERGEINFO
+ represent a reverse merge, then set *START to the youngest revision
+ found and *END to the oldest revision found. If no ancestors are found
+ then set *START and *END to SVN_INVALID_REVNUM.
+
+ If PATH_IS_OWN_ANCESTOR is TRUE then a child in CHILDREN_WITH_MERGEINFO
where child->abspath == PATH is considered PATH's ancestor. If FALSE,
then child->abspath must be a proper ancestor of PATH.
- CHILDREN_WITH_MERGEINFO is expected to be sorted in Depth first
- order of path. Nearest ancestor's index from
- CHILDREN_WITH_MERGEINFO is returned. */
-static int
-find_nearest_ancestor(const apr_array_header_t *children_with_mergeinfo,
- svn_boolean_t path_is_own_ancestor,
- const char *path)
+ See the CHILDREN_WITH_MERGEINFO ARRAY global comment for more
+ information. */
+static svn_client__merge_path_t *
+find_nearest_ancestor_with_intersecting_ranges(
+ svn_revnum_t *start,
+ svn_revnum_t *end,
+ const apr_array_header_t *children_with_mergeinfo,
+ svn_boolean_t path_is_own_ancestor,
+ const char *local_abspath)
{
int i;
- int ancestor_index = 0;
+ svn_client__merge_path_t *nearest_ancestor = NULL;
- /* This if condition is not needed as this function should be used
- from the context of same_url merge where CHILDREN_WITH_MERGEINFO
- will not be NULL and of size atleast 1. We have this if condition
- just to protect the wrong caller. */
- if (!children_with_mergeinfo)
- return 0;
- for (i = 0; i < children_with_mergeinfo->nelts; i++)
+ *start = SVN_INVALID_REVNUM;
+ *end = SVN_INVALID_REVNUM;
+
+ SVN_ERR_ASSERT_NO_RETURN(children_with_mergeinfo != NULL);
+
+ for (i = children_with_mergeinfo->nelts - 1; i >= 0 ; i--)
{
svn_client__merge_path_t *child =
APR_ARRAY_IDX(children_with_mergeinfo, i, svn_client__merge_path_t *);
- if (svn_dirent_is_ancestor(child->abspath, path)
+
+ if (svn_dirent_is_ancestor(child->abspath, local_abspath)
&& (path_is_own_ancestor
- || svn_path_compare_paths(child->abspath, path) != 0))
- ancestor_index = i;
+ || strcmp(child->abspath, local_abspath) != 0))
+ {
+ if (nearest_ancestor == NULL)
+ {
+ /* Found an ancestor. */
+ nearest_ancestor = child;
+
+ if (child->remaining_ranges)
+ {
+ svn_merge_range_t *r1 = APR_ARRAY_IDX(
+ child->remaining_ranges, 0, svn_merge_range_t *);
+ *start = r1->start;
+ *end = r1->end;
+ }
+ else
+ {
+ /* If CHILD->REMAINING_RANGES is null then LOCAL_ABSPATH
+ is inside an absent subtree in the merge target. */
+ *start = SVN_INVALID_REVNUM;
+ *end = SVN_INVALID_REVNUM;
+ break;
+ }
+ }
+ else
+ {
+ /* We'e found another ancestor for LOCAL_ABSPATH. Do its
+ first remaining range intersect with the previously
+ found ancestor? */
+ svn_merge_range_t *r1 =
+ APR_ARRAY_IDX(nearest_ancestor->remaining_ranges, 0,
+ svn_merge_range_t *);
+ svn_merge_range_t *r2 =
+ APR_ARRAY_IDX(child->remaining_ranges, 0,
+ svn_merge_range_t *);
+
+ if (r1 && r2)
+ {
+ svn_merge_range_t range1;
+ svn_merge_range_t range2;
+ svn_boolean_t reverse_merge = r1->start > r2->end;
+
+ /* Flip endpoints if this is a reverse merge. */
+ if (reverse_merge)
+ {
+ range1.start = r1->end;
+ range1.end = r1->start;
+ range2.start = r2->end;
+ range2.end = r2->start;
+ }
+ else
+ {
+ range1.start = r1->start;
+ range1.end = r1->end;
+ range2.start = r2->start;
+ range2.end = r2->end;
+ }
+
+ if (range1.start < range2.end && range2.start < range1.end)
+ {
+ *start = reverse_merge ?
+ MAX(r1->start, r2->start) : MIN(r1->start, r2->start);
+ *end = reverse_merge ?
+ MIN(r1->end, r2->end) : MAX(r1->end, r2->end);
+ nearest_ancestor = child;
+ }
+ }
+ }
+ }
}
- return ancestor_index;
+ return nearest_ancestor;
}
+/* Notify that we're starting to record mergeinfo for the merge of the
+ * revision range RANGE into TARGET_ABSPATH. RANGE should be null if the
+ * merge sources are not from the same URL.
+ *
+ * This calls the client's notification receiver (as found in the client
+ * context), with a WC abspath.
+ */
+static void
+notify_mergeinfo_recording(const char *target_abspath,
+ const svn_merge_range_t *range,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ if (ctx->notify_func2)
+ {
+ svn_wc_notify_t *n = svn_wc_create_notify(
+ target_abspath, svn_wc_notify_merge_record_info_begin, pool);
+
+ n->merge_range = range ? svn_merge_range_dup(range, pool) : NULL;
+ ctx->notify_func2(ctx->notify_baton2, n, pool);
+ }
+}
+
+/* Notify that we're completing the merge into TARGET_ABSPATH.
+ *
+ * This calls the client's notification receiver (as found in the client
+ * context), with a WC abspath.
+ */
+static void
+notify_merge_completed(const char *target_abspath,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ if (ctx->notify_func2)
+ {
+ svn_wc_notify_t *n
+ = svn_wc_create_notify(target_abspath, svn_wc_notify_merge_completed,
+ pool);
+ ctx->notify_func2(ctx->notify_baton2, n, pool);
+ }
+}
+/* Is the notification the result of a real operative merge? */
#define IS_OPERATIVE_NOTIFICATION(notify) \
(notify->content_state == svn_wc_notify_state_conflicted \
|| notify->content_state == svn_wc_notify_state_merged \
@@ -2565,204 +3509,144 @@ find_nearest_ancestor(const apr_array_header_t *children_with_mergeinfo,
|| notify->action == svn_wc_notify_update_add \
|| notify->action == svn_wc_notify_tree_conflict)
-/* Our svn_wc_notify_func2_t wrapper.*/
-static void
-notification_receiver(void *baton, const svn_wc_notify_t *notify,
- apr_pool_t *pool)
-{
- notification_receiver_baton_t *notify_b = baton;
- svn_boolean_t is_operative_notification = FALSE;
- /* Skip notifications if this is a --record-only merge that is adding
- or deleting NOTIFY->PATH, allow only mergeinfo changes and headers.
- We will already have skipped the actual addition or deletion, but will
- still get a notification callback for it. */
- if (notify_b->merge_b->record_only
- && (notify->action != svn_wc_notify_update_update
- && notify->action != svn_wc_notify_merge_record_info_begin))
- return;
+/* Remove merge source gaps from range used for merge notifications.
+ See http://subversion.tigris.org/issues/show_bug.cgi?id=4138
- /* Is the notification the result of a real operative merge? */
- if (IS_OPERATIVE_NOTIFICATION(notify))
- {
- notify_b->nbr_operative_notifications++;
- is_operative_notification = TRUE;
- }
+ If IMPLICIT_SRC_GAP is not NULL then it is a rangelist containing a
+ single range (see the implicit_src_gap member of merge_cmd_baton_t).
+ RANGE describes a (possibly reverse) merge.
- if (notify_b->merge_b->sources_ancestral
- || notify_b->merge_b->reintegrate_merge)
+ If IMPLICIT_SRC_GAP is not NULL and it's sole range intersects with
+ the older revision in *RANGE, then remove IMPLICIT_SRC_GAP's range
+ from *RANGE. */
+static void
+remove_source_gap(svn_merge_range_t *range,
+ apr_array_header_t *implicit_src_gap)
+{
+ if (implicit_src_gap)
{
- if (notify->content_state == svn_wc_notify_state_merged
- || notify->content_state == svn_wc_notify_state_changed
- || notify->prop_state == svn_wc_notify_state_merged
- || notify->prop_state == svn_wc_notify_state_changed
- || notify->action == svn_wc_notify_update_add)
+ svn_merge_range_t *gap_range =
+ APR_ARRAY_IDX(implicit_src_gap, 0, svn_merge_range_t *);
+ if (range->start < range->end)
{
- const char *merged_path = apr_pstrdup(notify_b->pool, notify->path);
-
- if (notify_b->merged_abspaths == NULL)
- notify_b->merged_abspaths = apr_hash_make(notify_b->pool);
-
- apr_hash_set(notify_b->merged_abspaths, merged_path,
- APR_HASH_KEY_STRING, merged_path);
+ if (gap_range->start == range->start)
+ range->start = gap_range->end;
}
-
- if (notify->action == svn_wc_notify_skip)
+ else /* Reverse merge */
{
- const char *skipped_path = apr_pstrdup(notify_b->pool, notify->path);
-
- if (notify_b->skipped_abspaths == NULL)
- notify_b->skipped_abspaths = apr_hash_make(notify_b->pool);
-
- apr_hash_set(notify_b->skipped_abspaths, skipped_path,
- APR_HASH_KEY_STRING, skipped_path);
+ if (gap_range->start == range->end)
+ range->end = gap_range->end;
}
+ }
+}
- if (notify->action == svn_wc_notify_tree_conflict)
- {
- const char *tree_conflicted_path = apr_pstrdup(notify_b->pool,
- notify->path);
-
- if (notify_b->tree_conflicted_abspaths == NULL)
- notify_b->tree_conflicted_abspaths =
- apr_hash_make(notify_b->pool);
+/* Notify that we're starting a merge
+ *
+ * This calls the client's notification receiver (as found in the client
+ * context), with a WC abspath.
+ */
+static svn_error_t *
+notify_merge_begin(merge_cmd_baton_t *merge_b,
+ const char *local_abspath,
+ svn_boolean_t delete_action,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc_notify_t *notify;
+ svn_merge_range_t n_range =
+ {SVN_INVALID_REVNUM, SVN_INVALID_REVNUM, TRUE};
+ const char *notify_abspath;
- apr_hash_set(notify_b->tree_conflicted_abspaths,
- tree_conflicted_path, APR_HASH_KEY_STRING,
- tree_conflicted_path);
- }
+ if (! merge_b->ctx->notify_func2)
+ return SVN_NO_ERROR;
- if (notify->action == svn_wc_notify_update_add)
- {
- svn_boolean_t root_of_added_subtree = TRUE;
+ /* If our merge sources are ancestors of one another... */
+ if (merge_b->merge_source.ancestral)
+ {
+ const svn_client__merge_path_t *child;
+ /* Find NOTIFY->PATH's nearest ancestor in
+ NOTIFY->CHILDREN_WITH_MERGEINFO. Normally we consider a child in
+ NOTIFY->CHILDREN_WITH_MERGEINFO representing PATH to be an
+ ancestor of PATH, but if this is a deletion of PATH then the
+ notification must be for a proper ancestor of PATH. This ensures
+ we don't get notifications like:
- /* Stash the root path of any added subtrees. */
- if (notify_b->added_abspaths == NULL)
- {
- /* The first added path is always a root. */
- notify_b->added_abspaths = apr_hash_make(notify_b->pool);
- }
- else
- {
- const char *added_path_parent =
- svn_dirent_dirname(notify->path, pool);
- apr_pool_t *subpool = svn_pool_create(pool);
+ --- Merging rX into 'PARENT/CHILD'
+ D PARENT/CHILD
- /* Is NOTIFY->PATH the root of an added subtree? */
- while (strcmp(notify_b->merge_b->target_abspath,
- added_path_parent))
- {
- if (apr_hash_get(notify_b->added_abspaths,
- added_path_parent,
- APR_HASH_KEY_STRING))
- {
- root_of_added_subtree = FALSE;
- break;
- }
+ But rather:
- added_path_parent = svn_dirent_dirname(
- added_path_parent, subpool);
- }
+ --- Merging rX into 'PARENT'
+ D PARENT/CHILD
+ */
- svn_pool_destroy(subpool);
- }
+ child = find_nearest_ancestor_with_intersecting_ranges(
+ &(n_range.start), &(n_range.end),
+ merge_b->notify_begin.nodes_with_mergeinfo,
+ ! delete_action, local_abspath);
- if (root_of_added_subtree)
- {
- const char *added_root_path = apr_pstrdup(notify_b->pool,
- notify->path);
- apr_hash_set(notify_b->added_abspaths, added_root_path,
- APR_HASH_KEY_STRING, added_root_path);
- }
+ if (!child && delete_action)
+ {
+ /* Triggered by file replace in single-file-merge */
+ child = find_nearest_ancestor(merge_b->notify_begin.nodes_with_mergeinfo,
+ TRUE, local_abspath);
}
- if (notify->action == svn_wc_notify_update_delete
- && notify_b->added_abspaths)
+ assert(child != NULL); /* Should always find the merge anchor */
+
+ if (! child)
+ return SVN_NO_ERROR;
+
+ if (merge_b->notify_begin.last_abspath != NULL
+ && strcmp(child->abspath, merge_b->notify_begin.last_abspath) == 0)
{
- /* Issue #4166: If a previous merge added NOTIFY_ABSPATH, but we
- are now deleting it, then remove it from the list of added
- paths. */
- apr_hash_set(notify_b->added_abspaths, notify->path,
- APR_HASH_KEY_STRING, NULL);
+ /* Don't notify the same merge again */
+ return SVN_NO_ERROR;
}
- }
- /* If our merge sources are ancestors of one another... */
- if (notify_b->merge_b->sources_ancestral)
- {
- notify_b->nbr_notifications++;
+ merge_b->notify_begin.last_abspath = child->abspath;
- /* See if this is an operative directory merge. */
- if (!(notify_b->is_single_file_merge) && is_operative_notification)
+ if (child->absent || child->remaining_ranges->nelts == 0
+ || !SVN_IS_VALID_REVNUM(n_range.start))
{
- /* Find NOTIFY->PATH's nearest ancestor in
- NOTIFY->CHILDREN_WITH_MERGEINFO. Normally we consider a child in
- NOTIFY->CHILDREN_WITH_MERGEINFO representing PATH to be an
- ancestor of PATH, but if this is a deletion of PATH then the
- notification must be for a proper ancestor of PATH. This ensures
- we don't get notifications like:
+ /* No valid information for an header */
+ return SVN_NO_ERROR;
+ }
- --- Merging rX into 'PARENT/CHILD'
- D PARENT/CHILD
+ notify_abspath = child->abspath;
+ }
+ else
+ {
+ if (merge_b->notify_begin.last_abspath)
+ return SVN_NO_ERROR; /* already notified */
- But rather:
+ notify_abspath = merge_b->target->abspath;
+ /* Store something in last_abspath. Any value would do */
+ merge_b->notify_begin.last_abspath = merge_b->target->abspath;
+ }
- --- Merging rX into 'PARENT'
- D PARENT/CHILD
- */
- int new_nearest_ancestor_index =
- find_nearest_ancestor(
- notify_b->children_with_mergeinfo,
- notify->action != svn_wc_notify_update_delete,
- notify->path);
+ notify = svn_wc_create_notify(notify_abspath,
+ merge_b->same_repos
+ ? svn_wc_notify_merge_begin
+ : svn_wc_notify_foreign_merge_begin,
+ scratch_pool);
- if (new_nearest_ancestor_index != notify_b->cur_ancestor_index)
- {
- svn_client__merge_path_t *child =
- APR_ARRAY_IDX(notify_b->children_with_mergeinfo,
- new_nearest_ancestor_index,
- svn_client__merge_path_t *);
- notify_b->cur_ancestor_index = new_nearest_ancestor_index;
- if (!child->absent && child->remaining_ranges->nelts > 0
- && !(new_nearest_ancestor_index == 0
- && child->remaining_ranges == 0))
- {
- svn_wc_notify_t *notify_merge_begin;
- notify_merge_begin =
- svn_wc_create_notify(child->abspath,
- notify_b->merge_b->same_repos
- ? svn_wc_notify_merge_begin
- : svn_wc_notify_foreign_merge_begin,
- pool);
- notify_merge_begin->merge_range =
- APR_ARRAY_IDX(child->remaining_ranges, 0,
- svn_merge_range_t *);
- if (notify_b->wrapped_func)
- (*notify_b->wrapped_func)(notify_b->wrapped_baton,
- notify_merge_begin, pool);
- }
- }
- }
+ if (SVN_IS_VALID_REVNUM(n_range.start))
+ {
+ /* If the merge source has a gap, then don't mention
+ those gap revisions in the notification. */
+ remove_source_gap(&n_range, merge_b->implicit_src_gap);
+ notify->merge_range = &n_range;
}
- /* Otherwise, our merge sources aren't ancestors of one another. */
- else if (!(notify_b->is_single_file_merge)
- && notify_b->nbr_operative_notifications == 1
- && is_operative_notification)
+ else
{
- svn_wc_notify_t *notify_merge_begin;
- notify_merge_begin =
- svn_wc_create_notify(notify_b->merge_b->target_abspath,
- notify_b->merge_b->same_repos
- ? svn_wc_notify_merge_begin
- : svn_wc_notify_foreign_merge_begin,
- pool);
- if (notify_b->wrapped_func)
- (*notify_b->wrapped_func)(notify_b->wrapped_baton, notify_merge_begin,
- pool);
+ notify->merge_range = NULL;
}
- if (notify_b->wrapped_func)
- (*notify_b->wrapped_func)(notify_b->wrapped_baton, notify, pool);
+ (*merge_b->ctx->notify_func2)(merge_b->ctx->notify_baton2, notify,
+ scratch_pool);
+
+ return SVN_NO_ERROR;
}
/* Set *OUT_RANGELIST to the intersection of IN_RANGELIST with the simple
@@ -2775,8 +3659,8 @@ notification_receiver(void *baton, const svn_wc_notify_t *notify,
* effect is to discard any non-inheritable input ranges. Therefore the
* ranges in *OUT_RANGELIST will always be inheritable. */
static svn_error_t *
-rangelist_intersect_range(apr_array_header_t **out_rangelist,
- const apr_array_header_t *in_rangelist,
+rangelist_intersect_range(svn_rangelist_t **out_rangelist,
+ const svn_rangelist_t *in_rangelist,
svn_revnum_t rev1,
svn_revnum_t rev2,
svn_boolean_t consider_inheritance,
@@ -2787,7 +3671,7 @@ rangelist_intersect_range(apr_array_header_t **out_rangelist,
if (rev1 < rev2)
{
- apr_array_header_t *simple_rangelist =
+ svn_rangelist_t *simple_rangelist =
svn_rangelist__initialize(rev1, rev2, TRUE, scratch_pool);
SVN_ERR(svn_rangelist_intersect(out_rangelist,
@@ -2815,8 +3699,7 @@ rangelist_intersect_range(apr_array_header_t **out_rangelist,
rangelist but cannot be NULL.
PRIMARY_URL is the merge source url of CHILD at the younger of REVISION1
- and REVISION2. MERGEINFO_PATH is the absolute repository path of
- PRIMARY_URL (i.e. the path value of mergeinfo from PRIMARY_URL).
+ and REVISION2.
Since this function is only invoked for subtrees of the merge target, the
guarantees afforded by normalize_merge_sources() don't apply - see the
@@ -2847,7 +3730,7 @@ rangelist_intersect_range(apr_array_header_t **out_rangelist,
drive_merge_report_editor() won't attempt to describe these non-existent
subtree path/ranges to the reporter (which would break the merge).
- If the preceeding paragraph wasn't terribly clear then what follows spells
+ If the preceding paragraph wasn't terribly clear then what follows spells
out this function's behavior a bit more explicitly:
For forward merges (REVISION1 < REVISION2)
@@ -2887,7 +3770,6 @@ rangelist_intersect_range(apr_array_header_t **out_rangelist,
static svn_error_t *
adjust_deleted_subtree_ranges(svn_client__merge_path_t *child,
svn_client__merge_path_t *parent,
- const char *mergeinfo_path,
svn_revnum_t revision1,
svn_revnum_t revision2,
const char *primary_url,
@@ -2901,25 +3783,12 @@ adjust_deleted_subtree_ranges(svn_client__merge_path_t *child,
svn_revnum_t peg_rev = younger_rev;
svn_revnum_t older_rev = is_rollback ? revision2 : revision1;
apr_array_header_t *segments;
- const char *rel_source_path;
- const char *session_url;
svn_error_t *err;
SVN_ERR_ASSERT(parent->remaining_ranges);
- /* We want to know about PRIMARY_URL@peg_rev, but we need PRIMARY_URL's
- path relative to RA_SESSION's URL. */
- SVN_ERR(svn_ra_get_session_url(ra_session, &session_url, scratch_pool));
- SVN_ERR(svn_client__path_relative_to_root(&rel_source_path,
- ctx->wc_ctx,
- primary_url,
- session_url,
- FALSE,
- ra_session,
- scratch_pool,
- scratch_pool));
err = svn_client__repos_location_segments(&segments, ra_session,
- rel_source_path, peg_rev,
+ primary_url, peg_rev,
younger_rev, older_rev, ctx,
scratch_pool);
@@ -2929,7 +3798,10 @@ adjust_deleted_subtree_ranges(svn_client__merge_path_t *child,
forward merge over ra_neon then we get SVN_ERR_RA_DAV_REQUEST_FAILED.
http://subversion.tigris.org/issues/show_bug.cgi?id=3137 fixed some of
the cases where different RA layers returned different error codes to
- signal the "path not found"...but it looks like there is more to do. */
+ signal the "path not found"...but it looks like there is more to do.
+
+ ### Do we still need to special case for ra_neon (since it no longer
+ exists)? */
if (err)
{
if (err->apr_err == SVN_ERR_FS_NOT_FOUND
@@ -2938,10 +3810,15 @@ adjust_deleted_subtree_ranges(svn_client__merge_path_t *child,
/* PRIMARY_URL@peg_rev doesn't exist. Check if PRIMARY_URL@older_rev
exists, if neither exist then the editor can simply ignore this
subtree. */
+ const char *rel_source_path; /* PRIMARY_URL relative to RA_SESSION */
svn_node_kind_t kind;
svn_error_clear(err);
err = NULL;
+
+ SVN_ERR(svn_ra_get_path_relative_to_session(
+ ra_session, &rel_source_path, primary_url, scratch_pool));
+
SVN_ERR(svn_ra_check_path(ra_session, rel_source_path,
older_rev, &kind, scratch_pool));
if (kind == svn_node_none)
@@ -2954,7 +3831,7 @@ adjust_deleted_subtree_ranges(svn_client__merge_path_t *child,
}
else
{
- apr_array_header_t *deleted_rangelist;
+ svn_rangelist_t *deleted_rangelist;
svn_revnum_t rev_primary_url_deleted;
/* PRIMARY_URL@older_rev exists, so it was deleted at some
@@ -2992,7 +3869,7 @@ adjust_deleted_subtree_ranges(svn_client__merge_path_t *child,
FALSE,
scratch_pool, scratch_pool));
- /* Merge into CHILD->REMANING_RANGES the intersection of
+ /* Merge into CHILD->REMAINING_RANGES the intersection of
PARENT->REMAINING_RANGES with the range beginning when
PRIMARY_URL@older_rev was deleted until younger_rev. */
SVN_ERR(rangelist_intersect_range(&deleted_rangelist,
@@ -3001,8 +3878,9 @@ adjust_deleted_subtree_ranges(svn_client__merge_path_t *child,
peg_rev,
FALSE,
scratch_pool, scratch_pool));
- SVN_ERR(svn_rangelist_merge(&(child->remaining_ranges),
- deleted_rangelist, scratch_pool));
+ SVN_ERR(svn_rangelist_merge2(child->remaining_ranges,
+ deleted_rangelist, scratch_pool,
+ scratch_pool));
/* Return CHILD->REMAINING_RANGES and PARENT->REMAINING_RANGES
to reverse order if necessary. */
@@ -3022,7 +3900,7 @@ adjust_deleted_subtree_ranges(svn_client__merge_path_t *child,
}
else /* PRIMARY_URL@peg_rev exists. */
{
- apr_array_header_t *non_existent_rangelist;
+ svn_rangelist_t *non_existent_rangelist;
svn_location_segment_t *segment =
APR_ARRAY_IDX(segments, (segments->nelts - 1),
svn_location_segment_t *);
@@ -3058,15 +3936,16 @@ adjust_deleted_subtree_ranges(svn_client__merge_path_t *child,
segment->range_start, peg_rev,
FALSE, scratch_pool, scratch_pool));
- /* Merge into CHILD->REMANING_RANGES the intersection of
+ /* Merge into CHILD->REMAINING_RANGES the intersection of
PARENT->REMAINING_RANGES with the range before PRIMARY_URL@peg_rev
came into existence. */
SVN_ERR(rangelist_intersect_range(&non_existent_rangelist,
parent->remaining_ranges,
older_rev, segment->range_start,
FALSE, scratch_pool, scratch_pool));
- SVN_ERR(svn_rangelist_merge(&(child->remaining_ranges),
- non_existent_rangelist, scratch_pool));
+ SVN_ERR(svn_rangelist_merge2(child->remaining_ranges,
+ non_existent_rangelist, scratch_pool,
+ scratch_pool));
/* Return CHILD->REMAINING_RANGES and PARENT->REMAINING_RANGES
to reverse order if necessary. */
@@ -3087,47 +3966,43 @@ adjust_deleted_subtree_ranges(svn_client__merge_path_t *child,
/* Helper for do_directory_merge().
- URL1, REVISION1, URL2, REVISION2, NOTIFY_B, and MERGE_B are
- cascaded from the arguments of the same name in do_directory_merge().
- RA_SESSION is the session for the younger of URL1@REVISION1 and
- URL2@REVISION2.
+ SOURCE is cascaded from the argument of the same name in
+ do_directory_merge(). TARGET is the merge target. RA_SESSION is the
+ session for the younger of SOURCE->loc1 and SOURCE->loc2.
- Adjust the subtrees in NOTIFY_B->CHILDREN_WITH_MERGEINFO so that we don't
+ Adjust the subtrees in CHILDREN_WITH_MERGEINFO so that we don't
later try to describe invalid paths in drive_merge_report_editor().
This function is just a thin wrapper around
adjust_deleted_subtree_ranges(), which see for further details.
SCRATCH_POOL is used for all temporary allocations. Changes to
- NOTIFY_B->CHILDREN_WITH_MERGEINFO are allocated in RESULT_POOL.
+ CHILDREN_WITH_MERGEINFO are allocated in RESULT_POOL.
*/
static svn_error_t *
-fix_deleted_subtree_ranges(const char *url1,
- svn_revnum_t revision1,
- const char *url2,
- svn_revnum_t revision2,
+fix_deleted_subtree_ranges(const merge_source_t *source,
+ const merge_target_t *target,
svn_ra_session_t *ra_session,
- notification_receiver_baton_t *notify_b,
- merge_cmd_baton_t *merge_b,
+ apr_array_header_t *children_with_mergeinfo,
+ svn_client_ctx_t *ctx,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
int i;
- const char *source_root_url;
apr_pool_t *iterpool = svn_pool_create(scratch_pool);
- svn_boolean_t is_rollback = revision2 < revision1;
+ svn_boolean_t is_rollback = source->loc2->rev < source->loc1->rev;
- SVN_ERR(svn_ra_get_repos_root2(ra_session, &source_root_url, scratch_pool));
+ assert(session_url_is(ra_session,
+ (is_rollback ? source->loc1 : source->loc2)->url,
+ scratch_pool));
- /* NOTIFY_B->CHILDREN_WITH_MERGEINFO is sorted in depth-first order, so
+ /* CHILDREN_WITH_MERGEINFO is sorted in depth-first order, so
start at index 1 to examine only subtrees. */
- for (i = 1; i < notify_b->children_with_mergeinfo->nelts; i++)
+ for (i = 1; i < children_with_mergeinfo->nelts; i++)
{
svn_client__merge_path_t *child =
- APR_ARRAY_IDX(notify_b->children_with_mergeinfo, i,
- svn_client__merge_path_t *);
+ APR_ARRAY_IDX(children_with_mergeinfo, i, svn_client__merge_path_t *);
svn_client__merge_path_t *parent;
- apr_array_header_t *deleted_rangelist, *added_rangelist;
- int parent_index;
+ svn_rangelist_t *deleted_rangelist, *added_rangelist;
SVN_ERR_ASSERT(child);
if (child->absent)
@@ -3136,10 +4011,8 @@ fix_deleted_subtree_ranges(const char *url1,
svn_pool_clear(iterpool);
/* Find CHILD's parent. */
- parent_index = find_nearest_ancestor(notify_b->children_with_mergeinfo,
- FALSE, child->abspath);
- parent = APR_ARRAY_IDX(notify_b->children_with_mergeinfo, parent_index,
- svn_client__merge_path_t *);
+ parent = find_nearest_ancestor(children_with_mergeinfo,
+ FALSE, child->abspath);
/* Since CHILD is a subtree then its parent must be in
CHILDREN_WITH_MERGEINFO, see the global comment
@@ -3165,16 +4038,15 @@ fix_deleted_subtree_ranges(const char *url1,
SVN_ERR(svn_rangelist_reverse(parent->remaining_ranges, iterpool));
}
- /* If CHILD is the merge target we then know that URL1, URL2,
- REVISION1, and REVISION2 are provided by normalize_merge_sources()
- -- see 'MERGEINFO MERGE SOURCE NORMALIZATION'. Due to this
- normalization we know that URL1@REVISION1 and URL2@REVISION2
- describe an unbroken line of history such that the entire range
- described by REVISION1:REVISION2 can potentially be merged to CHILD.
+ /* If CHILD is the merge target we then know that SOURCE is provided
+ by normalize_merge_sources() -- see 'MERGEINFO MERGE SOURCE
+ NORMALIZATION'. Due to this normalization we know that SOURCE
+ describes an unbroken line of history such that the entire range
+ described by SOURCE can potentially be merged to CHILD.
But if CHILD is a subtree we don't have the same guarantees about
- URL1, URL2, REVISION1, and REVISION2 as we do for the merge target.
- URL1@REVSION1 and/or URL2@REVSION2 might not exist.
+ SOURCE as we do for the merge target. SOURCE->loc1 and/or
+ SOURCE->loc2 might not exist.
If one or both doesn't exist, then adjust CHILD->REMAINING_RANGES
such that we don't later try to describe invalid subtrees in
@@ -3185,33 +4057,25 @@ fix_deleted_subtree_ranges(const char *url1,
case, see the 'Note' in drive_merge_report_editor's docstring. */
if (deleted_rangelist->nelts || added_rangelist->nelts)
{
- const char *child_mergeinfo_path;
const char *child_primary_source_url;
const char *child_repos_src_path =
- svn_dirent_is_child(merge_b->target_abspath, child->abspath,
- iterpool);
+ svn_dirent_is_child(target->abspath, child->abspath, iterpool);
/* This loop is only processing subtrees, so CHILD->ABSPATH
better be a proper child of the merge target. */
SVN_ERR_ASSERT(child_repos_src_path);
child_primary_source_url =
- svn_path_url_add_component2((revision1 < revision2) ? url2 : url1,
+ svn_path_url_add_component2((source->loc1->rev < source->loc2->rev)
+ ? source->loc2->url : source->loc1->url,
child_repos_src_path, iterpool);
- SVN_ERR(svn_client__path_relative_to_root(&child_mergeinfo_path,
- merge_b->ctx->wc_ctx,
- child_primary_source_url,
- source_root_url,
- TRUE, ra_session,
- iterpool, iterpool));
SVN_ERR(adjust_deleted_subtree_ranges(child, parent,
- child_mergeinfo_path,
- revision1, revision2,
+ source->loc1->rev,
+ source->loc2->rev,
child_primary_source_url,
ra_session,
- merge_b->ctx, result_pool,
- iterpool));
+ ctx, result_pool, iterpool));
}
}
@@ -3242,14 +4106,14 @@ fix_deleted_subtree_ranges(const char *url1,
INHERITED is ignored.
- If IMPLICIT_MERGEINFO is not NULL then START and END are limits on the
+ If IMPLICIT_MERGEINFO is not NULL then START and END are limits on
the natural history sought, must both be valid revision numbers, and
START must be greater than END. If TARGET_ABSPATH's base revision
is older than START, then the base revision is used as the younger
bound in place of START.
- RA_SESSION is an open session that may be temporarily reparented as
- needed by this function.
+ RA_SESSION is an RA session open to the repository in which TARGET_ABSPATH
+ lives. It may be temporarily reparented as needed by this function.
Allocate *RECORDED_MERGEINFO and *IMPLICIT_MERGEINFO in RESULT_POOL.
Use SCRATCH_POOL for any temporary allocations. */
@@ -3266,53 +4130,38 @@ get_full_mergeinfo(svn_mergeinfo_t *recorded_mergeinfo,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- svn_boolean_t inherited_mergeinfo = FALSE;
-
/* First, we get the real mergeinfo. */
if (recorded_mergeinfo)
{
- svn_boolean_t inherited_from_repos;
-
SVN_ERR(svn_client__get_wc_or_repos_mergeinfo(recorded_mergeinfo,
- &inherited_mergeinfo,
- &inherited_from_repos,
+ inherited,
+ NULL /* from_repos */,
FALSE,
inherit, ra_session,
target_abspath,
ctx, result_pool));
- if (inherited)
- *inherited = inherited_mergeinfo;
}
if (implicit_mergeinfo)
{
- const char *repos_root;
- const char *repos_relpath;
- const char *session_url = NULL;
- svn_revnum_t target_rev;
+ svn_client__pathrev_t *target;
/* Assert that we have sane input. */
- SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(start)
- && SVN_IS_VALID_REVNUM(end)
- && (start > end));
+ SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(start) && SVN_IS_VALID_REVNUM(end)
+ && (start > end));
/* Retrieve the origin (original_*) of the node, or just the
url if the node was not copied. */
- SVN_ERR(svn_wc__node_get_origin(FALSE, &target_rev, &repos_relpath,
- &repos_root, NULL, NULL,
- ctx->wc_ctx, target_abspath, FALSE,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_client__wc_node_get_origin(&target, target_abspath, ctx,
+ scratch_pool, scratch_pool));
- if (! repos_relpath)
+ if (! target)
{
- /* We've been asked to operate on a target which has no location
- * in the repository. Either it's unversioned (but attempts to
- * merge into unversioned targets should not get as far as here),
- * or it is locally added, in which case the target's implicit
- * mergeinfo is empty. */
+ /* We've been asked to operate on a locally added target, so its
+ * implicit mergeinfo is empty. */
*implicit_mergeinfo = apr_hash_make(result_pool);
}
- else if (target_rev <= end)
+ else if (target->rev <= end)
{
/* We're asking about a range outside our natural history
altogether. That means our implicit mergeinfo is empty. */
@@ -3320,40 +4169,22 @@ get_full_mergeinfo(svn_mergeinfo_t *recorded_mergeinfo,
}
else
{
- svn_opt_revision_t peg_revision;
- const char *url;
-
- url = svn_path_url_add_component2(repos_root, repos_relpath,
- scratch_pool);
-
- /* Temporarily point our RA_SESSION at our target URL so we can
- fetch so-called "implicit mergeinfo" (that is, natural
+ /* Fetch so-called "implicit mergeinfo" (that is, natural
history). */
- SVN_ERR(svn_client__ensure_ra_session_url(&session_url,
- ra_session, url,
- scratch_pool));
/* Do not ask for implicit mergeinfo from TARGET_ABSPATH's future.
TARGET_ABSPATH might not even exist, and even if it does the
working copy is *at* TARGET_REV so its implicit history ends
at TARGET_REV! */
- if (target_rev < start)
- start = target_rev;
+ if (target->rev < start)
+ start = target->rev;
/* Fetch the implicit mergeinfo. */
- peg_revision.kind = svn_opt_revision_number;
- peg_revision.value.number = target_rev;
SVN_ERR(svn_client__get_history_as_mergeinfo(implicit_mergeinfo,
NULL,
- url, &peg_revision,
- start, end,
+ target, start, end,
ra_session, ctx,
result_pool));
-
- /* Return RA_SESSION back to where it was when we were called. */
- SVN_ERR(svn_client__ensure_ra_session_url(&session_url,
- ra_session, session_url,
- scratch_pool));
}
} /*if (implicit_mergeinfo) */
@@ -3362,7 +4193,7 @@ get_full_mergeinfo(svn_mergeinfo_t *recorded_mergeinfo,
/* Helper for ensure_implicit_mergeinfo().
- PARENT, CHILD, REVISION1, REVISION2, RA_SESSION, and CTX
+ PARENT, CHILD, REVISION1, REVISION2 and CTX
are all cascaded from the arguments of the same names in
ensure_implicit_mergeinfo(). PARENT and CHILD must both exist, i.e.
this function should never be called where CHILD is the merge target.
@@ -3371,7 +4202,10 @@ get_full_mergeinfo(svn_mergeinfo_t *recorded_mergeinfo,
Set CHILD->IMPLICIT_MERGEINFO to the mergeinfo inherited from
PARENT->IMPLICIT_MERGEINFO. CHILD->IMPLICIT_MERGEINFO is allocated
- in POOL.
+ in RESULT_POOL.
+
+ RA_SESSION is an RA session open to the repository that contains CHILD.
+ It may be temporarily reparented by this function.
*/
static svn_error_t *
inherit_implicit_mergeinfo_from_parent(svn_client__merge_path_t *parent,
@@ -3400,17 +4234,17 @@ inherit_implicit_mergeinfo_from_parent(svn_client__merge_path_t *parent,
ctx, result_pool, scratch_pool));
/* Let CHILD inherit PARENT's implicit mergeinfo. */
- child->implicit_mergeinfo = apr_hash_make(result_pool);
path_diff = svn_dirent_is_child(parent->abspath, child->abspath,
scratch_pool);
-
/* PARENT->PATH better be an ancestor of CHILD->ABSPATH! */
SVN_ERR_ASSERT(path_diff);
- SVN_ERR(svn_client__adjust_mergeinfo_source_paths(
- child->implicit_mergeinfo, path_diff,
- parent->implicit_mergeinfo, result_pool));
+ SVN_ERR(svn_mergeinfo__add_suffix_to_mergeinfo(
+ &child->implicit_mergeinfo, parent->implicit_mergeinfo,
+ path_diff, result_pool, scratch_pool));
+ child->implicit_mergeinfo = svn_mergeinfo_dup(child->implicit_mergeinfo,
+ result_pool);
return SVN_NO_ERROR;
}
@@ -3419,11 +4253,14 @@ inherit_implicit_mergeinfo_from_parent(svn_client__merge_path_t *parent,
If we have deferred obtaining CHILD->IMPLICIT_MERGEINFO, then get
it now, allocating it in RESULT_POOL. If CHILD_INHERITS_PARENT is true
then set CHILD->IMPLICIT_MERGEINFO to the mergeinfo inherited from
- PARNET->IMPLICIT_MERGEINFO, otherwise contact the repository. Use
+ PARENT->IMPLICIT_MERGEINFO, otherwise contact the repository. Use
SCRATCH_POOL for all temporary allocations.
- PARENT, CHILD, REVISION1, REVISION2, RA_SESSION, and
- CTX are all cascased from the arguments of the same name in
+ RA_SESSION is an RA session open to the repository that contains CHILD.
+ It may be temporarily reparented by this function.
+
+ PARENT, CHILD, REVISION1, REVISION2 and
+ CTX are all cascaded from the arguments of the same name in
filter_merged_revisions() and the same conditions for that function
hold here. */
static svn_error_t *
@@ -3498,10 +4335,13 @@ ensure_implicit_mergeinfo(svn_client__merge_path_t *parent,
REVISION1 and REVISION2 describe the merge range requested from
MERGEINFO_PATH.
- TARGET_MERGEINFO is the CHILD->ABSPATH's explicit or inherited mergeinfo.
- TARGET_MERGEINFO should be NULL if there is no explicit or inherited
- mergeinfo on CHILD->ABSPATH or an empty hash if CHILD->ABSPATH has empty
- mergeinfo.
+ TARGET_RANGELIST is the portion of CHILD->ABSPATH's explicit or inherited
+ mergeinfo that intersects with the merge history described by
+ MERGEINFO_PATH@REVISION1:MERGEINFO_PATH@REVISION2. TARGET_RANGELIST
+ should be NULL if there is no explicit or inherited mergeinfo on
+ CHILD->ABSPATH or an empty list if CHILD->ABSPATH has empty mergeinfo or
+ explicit mergeinfo that exclusively describes non-intersecting history
+ with MERGEINFO_PATH@REVISION1:MERGEINFO_PATH@REVISION2.
SCRATCH_POOL is used for all temporary allocations.
@@ -3514,7 +4354,7 @@ static svn_error_t *
filter_merged_revisions(svn_client__merge_path_t *parent,
svn_client__merge_path_t *child,
const char *mergeinfo_path,
- svn_mergeinfo_t target_mergeinfo,
+ svn_rangelist_t *target_rangelist,
svn_revnum_t revision1,
svn_revnum_t revision2,
svn_boolean_t child_inherits_implicit,
@@ -3523,7 +4363,7 @@ filter_merged_revisions(svn_client__merge_path_t *parent,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- apr_array_header_t *requested_rangelist, *target_rangelist,
+ svn_rangelist_t *requested_rangelist,
*target_implicit_rangelist, *explicit_rangelist;
/* Convert REVISION1 and REVISION2 to a rangelist.
@@ -3542,18 +4382,14 @@ filter_merged_revisions(svn_client__merge_path_t *parent,
if (revision1 > revision2) /* This is a reverse merge. */
{
- apr_array_header_t *added_rangelist, *deleted_rangelist;
+ svn_rangelist_t *added_rangelist, *deleted_rangelist;
/* The revert range and will need to be reversed for
our svn_rangelist_* APIs to work properly. */
SVN_ERR(svn_rangelist_reverse(requested_rangelist, scratch_pool));
- if (target_mergeinfo)
- target_rangelist = apr_hash_get(target_mergeinfo,
- mergeinfo_path, APR_HASH_KEY_STRING);
- else
- target_rangelist = NULL;
-
+ /* Set EXPLICIT_RANGELIST to the list of source-range revs that are
+ already recorded as merged to target. */
if (target_rangelist)
{
/* Return the intersection of the revs which are both already
@@ -3602,7 +4438,7 @@ filter_merged_revisions(svn_client__merge_path_t *parent,
}
else /* We need to check CHILD's implicit mergeinfo. */
{
- apr_array_header_t *implicit_rangelist;
+ svn_rangelist_t *implicit_rangelist;
SVN_ERR(ensure_implicit_mergeinfo(parent,
child,
@@ -3614,9 +4450,8 @@ filter_merged_revisions(svn_client__merge_path_t *parent,
result_pool,
scratch_pool));
- target_implicit_rangelist = apr_hash_get(child->implicit_mergeinfo,
- mergeinfo_path,
- APR_HASH_KEY_STRING);
+ target_implicit_rangelist = svn_hash_gets(child->implicit_mergeinfo,
+ mergeinfo_path);
if (target_implicit_rangelist)
SVN_ERR(svn_rangelist_intersect(&implicit_rangelist,
@@ -3627,8 +4462,9 @@ filter_merged_revisions(svn_client__merge_path_t *parent,
implicit_rangelist = apr_array_make(scratch_pool, 0,
sizeof(svn_merge_range_t *));
- SVN_ERR(svn_rangelist_merge(&implicit_rangelist,
- explicit_rangelist, scratch_pool));
+ SVN_ERR(svn_rangelist_merge2(implicit_rangelist,
+ explicit_rangelist, scratch_pool,
+ scratch_pool));
SVN_ERR(svn_rangelist_reverse(implicit_rangelist, scratch_pool));
child->remaining_ranges = svn_rangelist_dup(implicit_rangelist,
result_pool);
@@ -3636,16 +4472,12 @@ filter_merged_revisions(svn_client__merge_path_t *parent,
}
else /* This is a forward merge */
{
- if (target_mergeinfo)
- target_rangelist = apr_hash_get(target_mergeinfo, mergeinfo_path,
- APR_HASH_KEY_STRING);
- else
- target_rangelist = NULL;
-
- /* See earlier comment preceeding svn_rangelist_intersect() for
- why we don't consider inheritance here. */
+ /* Set EXPLICIT_RANGELIST to the list of source-range revs that are
+ NOT already recorded as merged to target. */
if (target_rangelist)
{
+ /* See earlier comment preceding svn_rangelist_intersect() for
+ why we don't consider inheritance here. */
SVN_ERR(svn_rangelist_remove(&explicit_rangelist,
target_rangelist,
requested_rangelist, FALSE,
@@ -3703,9 +4535,8 @@ filter_merged_revisions(svn_client__merge_path_t *parent,
result_pool,
scratch_pool));
- target_implicit_rangelist = apr_hash_get(child->implicit_mergeinfo,
- mergeinfo_path,
- APR_HASH_KEY_STRING);
+ target_implicit_rangelist = svn_hash_gets(child->implicit_mergeinfo,
+ mergeinfo_path);
if (target_implicit_rangelist)
SVN_ERR(svn_rangelist_remove(&(child->remaining_ranges),
target_implicit_rangelist,
@@ -3724,13 +4555,12 @@ filter_merged_revisions(svn_client__merge_path_t *parent,
/* Helper for do_file_merge and do_directory_merge (by way of
populate_remaining_ranges() for the latter).
- Determine what portions of URL1@REVISION1 -> URL2@REVISION2 have already
+ Determine what portions of SOURCE have already
been merged to CHILD->ABSPATH and populate CHILD->REMAINING_RANGES with
the ranges that still need merging.
- URL1, REVISION1, URL2, REVISION2, and CTX are all cascaded
- from the caller's arguments of the same names. Note that this means URL1,
- REVISION1, URL2, and REVISION2 adhere to the requirements noted in
+ SOURCE and CTX are all cascaded from the caller's arguments of the same
+ names. Note that this means SOURCE adheres to the requirements noted in
`MERGEINFO MERGE SOURCE NORMALIZATION'.
CHILD represents a working copy path which is the merge target or one of
@@ -3738,8 +4568,8 @@ filter_merged_revisions(svn_client__merge_path_t *parent,
ancestor - see 'THE CHILDREN_WITH_MERGEINFO ARRAY'. TARGET_MERGEINFO is
the working mergeinfo on CHILD.
- RA_SESSION is the session for, and SOURCE_ROOT_URL is the repository root
- for, the younger of URL1@REVISION1 and URL2@REVISION2.
+ RA_SESSION is the session for the younger of SOURCE->loc1 and
+ SOURCE->loc2.
If the function needs to consider CHILD->IMPLICIT_MERGEINFO and
CHILD_INHERITS_IMPLICIT is true, then set CHILD->IMPLICIT_MERGEINFO to the
@@ -3747,7 +4577,7 @@ filter_merged_revisions(svn_client__merge_path_t *parent,
the repository for CHILD->IMPLICIT_MERGEINFO.
If not null, IMPLICIT_SRC_GAP is the gap, if any, in the natural history
- of URL1@REVISION1:URL2@REVISION2, see merge_cmd_baton_t.implicit_src_gap.
+ of SOURCE, see merge_cmd_baton_t.implicit_src_gap.
SCRATCH_POOL is used for all temporary allocations. Changes to CHILD and
PARENT are made in RESULT_POOL.
@@ -3760,19 +4590,15 @@ filter_merged_revisions(svn_client__merge_path_t *parent,
in depth-first order.
NOTE: When performing reverse merges, return
- SVN_ERR_CLIENT_NOT_READY_TO_MERGE if URL1@REVISION1, URL2@REVISION2, and
+ SVN_ERR_CLIENT_NOT_READY_TO_MERGE if both locations in SOURCE and
CHILD->ABSPATH are all on the same line of history but CHILD->ABSPATH's
- base revision is older than the REVISION1-REVISION2 range, see comment re
+ base revision is older than the SOURCE->rev1:rev2 range, see comment re
issue #2973 below.
*/
static svn_error_t *
calculate_remaining_ranges(svn_client__merge_path_t *parent,
svn_client__merge_path_t *child,
- const char *source_root_url,
- const char *url1,
- svn_revnum_t revision1,
- const char *url2,
- svn_revnum_t revision2,
+ const merge_source_t *source,
svn_mergeinfo_t target_mergeinfo,
const apr_array_header_t *implicit_src_gap,
svn_boolean_t child_inherits_implicit,
@@ -3781,50 +4607,49 @@ calculate_remaining_ranges(svn_client__merge_path_t *parent,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- const char *mergeinfo_path;
- const char *primary_url = (revision1 < revision2) ? url2 : url1;
- svn_mergeinfo_t adjusted_target_mergeinfo = NULL;
+ const svn_client__pathrev_t *primary_src
+ = (source->loc1->rev < source->loc2->rev) ? source->loc2 : source->loc1;
+ const char *mergeinfo_path = svn_client__pathrev_fspath(primary_src,
+ scratch_pool);
+ /* Intersection of TARGET_MERGEINFO and the merge history
+ described by SOURCE. */
+ svn_rangelist_t *target_rangelist;
svn_revnum_t child_base_revision;
+ /* Since this function should only be called when honoring mergeinfo and
+ * SOURCE adheres to the requirements noted in 'MERGEINFO MERGE SOURCE
+ * NORMALIZATION', SOURCE must be 'ancestral'. */
+ SVN_ERR_ASSERT(source->ancestral);
+
/* Determine which of the requested ranges to consider merging... */
- SVN_ERR(svn_client__path_relative_to_root(&mergeinfo_path, ctx->wc_ctx,
- primary_url, source_root_url, TRUE,
- ra_session, result_pool,
- scratch_pool));
- /* Consider: CHILD might have explicit mergeinfo '/MERGEINFO_PATH:M-N'
- where M-N fall into the gap in URL1@REVISION1:URL2@REVISION2's natural
- history allowed by 'MERGEINFO MERGE SOURCE NORMALIZATION'. If this is
- the case, then '/MERGEINFO_PATH:N' actually refers to a completely
- different line of history than URL1@REVISION1:URL2@REVISION2 and we
- *don't* want to consider those revisions merged already. */
- if (implicit_src_gap && child->pre_merge_mergeinfo)
- {
- apr_array_header_t *explicit_mergeinfo_gap_ranges =
- apr_hash_get(child->pre_merge_mergeinfo, mergeinfo_path,
- APR_HASH_KEY_STRING);
+ /* Set TARGET_RANGELIST to the portion of TARGET_MERGEINFO that refers
+ to SOURCE (excluding any gap in SOURCE): first get all ranges from
+ TARGET_MERGEINFO that refer to the path of SOURCE, and then prune
+ any ranges that lie in the gap in SOURCE.
- if (explicit_mergeinfo_gap_ranges)
- {
- svn_mergeinfo_t gap_mergeinfo = apr_hash_make(scratch_pool);
-
- apr_hash_set(gap_mergeinfo, mergeinfo_path, APR_HASH_KEY_STRING,
- implicit_src_gap);
- SVN_ERR(svn_mergeinfo_remove2(&adjusted_target_mergeinfo,
- gap_mergeinfo, target_mergeinfo,
- FALSE, result_pool, scratch_pool));
- }
- }
+ ### [JAF] In fact, that may still leave some ranges that lie entirely
+ outside the range of SOURCE; it seems we don't care about that. */
+ if (target_mergeinfo)
+ target_rangelist = svn_hash_gets(target_mergeinfo, mergeinfo_path);
else
+ target_rangelist = NULL;
+ if (implicit_src_gap && target_rangelist)
{
- adjusted_target_mergeinfo = target_mergeinfo;
+ /* Remove any mergeinfo referring to the 'gap' in SOURCE, as that
+ mergeinfo doesn't really refer to SOURCE at all but instead
+ refers to locations that are non-existent or on a different
+ line of history. (Issue #3242.) */
+ SVN_ERR(svn_rangelist_remove(&target_rangelist,
+ implicit_src_gap, target_rangelist,
+ FALSE, result_pool));
}
/* Initialize CHILD->REMAINING_RANGES and filter out revisions already
merged (or, in the case of reverse merges, ranges not yet merged). */
SVN_ERR(filter_merged_revisions(parent, child, mergeinfo_path,
- adjusted_target_mergeinfo,
- revision1, revision2,
+ target_rangelist,
+ source->loc1->rev, source->loc2->rev,
child_inherits_implicit,
ra_session, ctx, result_pool,
scratch_pool));
@@ -3855,30 +4680,29 @@ calculate_remaining_ranges(svn_client__merge_path_t *parent,
So in the name of user friendliness, return an error suggesting a helpful
course of action.
*/
- SVN_ERR(svn_wc__node_get_base_rev(&child_base_revision, ctx->wc_ctx,
- child->abspath, scratch_pool));
+ SVN_ERR(svn_wc__node_get_base(NULL, &child_base_revision,
+ NULL, NULL, NULL, NULL,
+ ctx->wc_ctx, child->abspath,
+ TRUE /* ignore_enoent */,
+ FALSE /* show_hidden */,
+ scratch_pool, scratch_pool));
/* If CHILD has no base revision then it hasn't been committed yet, so it
can't have any "future" history. */
if (SVN_IS_VALID_REVNUM(child_base_revision)
&& ((child->remaining_ranges)->nelts == 0) /* Inoperative merge */
- && (revision2 < revision1) /* Reverse merge */
- && (child_base_revision <= revision2)) /* From CHILD's future */
+ && (source->loc2->rev < source->loc1->rev) /* Reverse merge */
+ && (child_base_revision <= source->loc2->rev)) /* From CHILD's future */
{
/* Hmmm, an inoperative reverse merge from the "future". If it is
from our own future return a helpful error. */
svn_error_t *err;
- const char *start_url;
- svn_opt_revision_t requested, unspec, pegrev, *start_revision;
- unspec.kind = svn_opt_revision_unspecified;
- requested.kind = svn_opt_revision_number;
- requested.value.number = child_base_revision;
- pegrev.kind = svn_opt_revision_number;
- pegrev.value.number = revision1;
-
- err = svn_client__repos_locations(&start_url, &start_revision,
- NULL, NULL, ra_session, url1,
- &pegrev, &requested,
- &unspec, ctx, scratch_pool);
+ svn_client__pathrev_t *start_loc;
+
+ err = svn_client__repos_location(&start_loc,
+ ra_session,
+ source->loc1,
+ child_base_revision,
+ ctx, scratch_pool, scratch_pool);
if (err)
{
if (err->apr_err == SVN_ERR_FS_NOT_FOUND
@@ -3893,7 +4717,7 @@ calculate_remaining_ranges(svn_client__merge_path_t *parent,
SVN_ERR(svn_wc__node_get_url(&url, ctx->wc_ctx, child->abspath,
scratch_pool, scratch_pool));
- if (strcmp(start_url, url) == 0)
+ if (strcmp(start_loc->url, url) == 0)
return svn_error_create(SVN_ERR_CLIENT_MERGE_UPDATE_REQUIRED, NULL,
_("Cannot reverse-merge a range from a "
"path's own future history; try "
@@ -3906,63 +4730,66 @@ calculate_remaining_ranges(svn_client__merge_path_t *parent,
/* Helper for populate_remaining_ranges().
- URL1, REVISION1, URL2, REVISION2, RA_SESSION, MERGE_SRC_CANON_PATH,
- and MERGE_B are all cascaded from the arguments of the same name in
- populate_remaining_ranges(). MERGE_SRC_CANON_PATH is the absolute
- repository path of URL2.
+ SOURCE is cascaded from the arguments of the same name in
+ populate_remaining_ranges().
Note: The following comments assume a forward merge, i.e.
- REVISION1 < REVISION2. If this is a reverse merge then all the following
- comments still apply, but with URL1 switched with URL2 and REVISION1
- switched with REVISION2.
-
- Like populate_remaining_ranges(), URL1@REVISION1:URL2@REVISION2 must adhere
- to the restrictions documented in 'MERGEINFO MERGE SOURCE NORMALIZATION'.
- These restrictions allow for a *single* gap, URL@GAP_REV1:URL2@GAP_REV2,
- (where REVISION1 < GAP_REV1 <= GAP_REV2 < REVISION2) in
- URL1@REVISION1:URL2@REVISION2 if URL2@REVISION2 was copied from
- URL1@REVISION1. If such a gap exists, set *GAP_START and *GAP_END to the
- starting and ending revisions of the gap. Otherwise set both to
- SVN_INVALID_REVNUM.
+ SOURCE->loc1->rev < SOURCE->loc2->rev. If this is a reverse merge then
+ all the following comments still apply, but with SOURCE->loc1 switched
+ with SOURCE->loc2.
+
+ Like populate_remaining_ranges(), SOURCE must adhere to the restrictions
+ documented in 'MERGEINFO MERGE SOURCE NORMALIZATION'. These restrictions
+ allow for a *single* gap in SOURCE, GAP_REV1:GAP_REV2 exclusive:inclusive
+ (where SOURCE->loc1->rev == GAP_REV1 <= GAP_REV2 < SOURCE->loc2->rev),
+ if SOURCE->loc2->url@(GAP_REV2+1) was copied from SOURCE->loc1. If such
+ a gap exists, set *GAP_START and *GAP_END to the starting and ending
+ revisions of the gap. Otherwise set both to SVN_INVALID_REVNUM.
For example, if the natural history of URL@2:URL@9 is 'trunk/:2,7-9' this
would indicate that trunk@7 was copied from trunk@2. This function would
return GAP_START:GAP_END of 2:6 in this case. Note that a path 'trunk'
might exist at r3-6, but it would not be on the same line of history as
- trunk@9. */
+ trunk@9.
+
+ ### GAP_START is basically redundant, as (if there is a gap at all) it is
+ necessarily the older revision of SOURCE.
+
+ RA_SESSION is an open RA session to the repository in which SOURCE lives.
+*/
static svn_error_t *
find_gaps_in_merge_source_history(svn_revnum_t *gap_start,
svn_revnum_t *gap_end,
- const char *merge_src_canon_path,
- const char *url1,
- svn_revnum_t revision1,
- const char *url2,
- svn_revnum_t revision2,
+ const merge_source_t *source,
svn_ra_session_t *ra_session,
- merge_cmd_baton_t *merge_b,
+ svn_client_ctx_t *ctx,
apr_pool_t *scratch_pool)
{
svn_mergeinfo_t implicit_src_mergeinfo;
- svn_opt_revision_t peg_rev;
- svn_revnum_t young_rev = MAX(revision1, revision2);
- svn_revnum_t old_rev = MIN(revision1, revision2);
- apr_array_header_t *rangelist;
- const char *url = (revision2 < revision1) ? url1 : url2;
+ svn_revnum_t old_rev = MIN(source->loc1->rev, source->loc2->rev);
+ const svn_client__pathrev_t *primary_src
+ = (source->loc1->rev < source->loc2->rev) ? source->loc2 : source->loc1;
+ const char *merge_src_fspath = svn_client__pathrev_fspath(primary_src,
+ scratch_pool);
+ svn_rangelist_t *rangelist;
+
+ SVN_ERR_ASSERT(source->ancestral);
/* Start by assuming there is no gap. */
*gap_start = *gap_end = SVN_INVALID_REVNUM;
- /* Get URL1@REVISION1:URL2@REVISION2 as mergeinfo. */
- peg_rev.kind = svn_opt_revision_number;
- peg_rev.value.number = young_rev;
+ /* Easy out: There can't be a gap between adjacent revisions. */
+ if (abs(source->loc1->rev - source->loc2->rev) == 1)
+ return SVN_NO_ERROR;
+
+ /* Get SOURCE as mergeinfo. */
SVN_ERR(svn_client__get_history_as_mergeinfo(&implicit_src_mergeinfo, NULL,
- url, &peg_rev, young_rev,
- old_rev, ra_session,
- merge_b->ctx, scratch_pool));
+ primary_src,
+ primary_src->rev, old_rev,
+ ra_session,
+ ctx, scratch_pool));
- rangelist = apr_hash_get(implicit_src_mergeinfo,
- merge_src_canon_path,
- APR_HASH_KEY_STRING);
+ rangelist = svn_hash_gets(implicit_src_mergeinfo, merge_src_fspath);
if (!rangelist) /* ### Can we ever not find a rangelist? */
return SVN_NO_ERROR;
@@ -3991,34 +4818,38 @@ find_gaps_in_merge_source_history(svn_revnum_t *gap_start,
if (rangelist->nelts > 1) /* Copy */
{
+ const svn_merge_range_t *gap;
/* As mentioned above, multiple gaps *shouldn't* be possible. */
SVN_ERR_ASSERT(apr_hash_count(implicit_src_mergeinfo) == 1);
- *gap_start = MIN(revision1, revision2);
- *gap_end = (APR_ARRAY_IDX(rangelist,
- rangelist->nelts - 1,
- svn_merge_range_t *))->start;
+ gap = APR_ARRAY_IDX(rangelist, rangelist->nelts - 1,
+ const svn_merge_range_t *);
+
+ *gap_start = MIN(source->loc1->rev, source->loc2->rev);
+ *gap_end = gap->start;
+
+ /* ### Issue #4132:
+ ### This assertion triggers in merge_tests.py svnmucc_abuse_1()
+ ### when a node is replaced by an older copy of itself.
+
+ BH: I think we should review this and the 'rename' case to find
+ out which behavior we really want, and if we can really
+ determine what happened this way. */
+ SVN_ERR_ASSERT(*gap_start < *gap_end);
}
else if (apr_hash_count(implicit_src_mergeinfo) > 1) /* Rename */
{
- apr_array_header_t *requested_rangelist =
- svn_rangelist__initialize(MIN(revision1, revision2),
- MAX(revision1, revision2),
+ svn_rangelist_t *requested_rangelist =
+ svn_rangelist__initialize(MIN(source->loc1->rev, source->loc2->rev),
+ MAX(source->loc1->rev, source->loc2->rev),
TRUE, scratch_pool);
- apr_array_header_t *implicit_rangelist =
+ svn_rangelist_t *implicit_rangelist =
apr_array_make(scratch_pool, 2, sizeof(svn_merge_range_t *));
- apr_array_header_t *gap_rangelist;
- apr_hash_index_t *hi;
-
- for (hi = apr_hash_first(scratch_pool, implicit_src_mergeinfo);
- hi;
- hi = apr_hash_next(hi))
- {
- apr_array_header_t *value = svn__apr_hash_index_val(hi);
+ svn_rangelist_t *gap_rangelist;
- SVN_ERR(svn_rangelist_merge(&implicit_rangelist, value,
- scratch_pool));
- }
+ SVN_ERR(svn_rangelist__merge_many(implicit_rangelist,
+ implicit_src_mergeinfo,
+ scratch_pool, scratch_pool));
SVN_ERR(svn_rangelist_remove(&gap_rangelist, implicit_rangelist,
requested_rangelist, FALSE,
scratch_pool));
@@ -4034,41 +4865,42 @@ find_gaps_in_merge_source_history(svn_revnum_t *gap_start,
}
}
+ SVN_ERR_ASSERT(*gap_start == MIN(source->loc1->rev, source->loc2->rev)
+ || (*gap_start == SVN_INVALID_REVNUM
+ && *gap_end == SVN_INVALID_REVNUM));
return SVN_NO_ERROR;
}
/* Helper for do_directory_merge().
- For each child in CHILDREN_WITH_MERGEINFO, populate that
- child's remaining_ranges list. CHILDREN_WITH_MERGEINFO is expected
+ For each (svn_client__merge_path_t *) child in CHILDREN_WITH_MERGEINFO,
+ populate that child's 'remaining_ranges' list with (### ... what?),
+ and populate that child's 'implicit_mergeinfo' with its implicit
+ mergeinfo (natural history). CHILDREN_WITH_MERGEINFO is expected
to be sorted in depth first order and each child must be processed in
that order. The inheritability of all calculated ranges is TRUE.
- If HONOR_MERGEINFO is set, this function will actually try to be
+ If mergeinfo is being honored (based on MERGE_B -- see HONOR_MERGEINFO()
+ for how this is determined), this function will actually try to be
intelligent about populating remaining_ranges list. Otherwise, it
will claim that each child has a single remaining range, from
- revision1, to revision2.
+ SOURCE->rev1, to SOURCE->rev2.
+ ### We also take the short-cut if doing record-only. Why?
SCRATCH_POOL is used for all temporary allocations. Changes to
CHILDREN_WITH_MERGEINFO are made in RESULT_POOL.
- Note that if REVISION1 > REVISION2, then each child's remaining_ranges
+ Note that if SOURCE->rev1 > SOURCE->rev2, then each child's remaining_ranges
member does not adhere to the API rules for rangelists described in
svn_mergeinfo.h -- See svn_client__merge_path_t.
See `MERGEINFO MERGE SOURCE NORMALIZATION' for more requirements
- around the values of URL1, REVISION1, URL2, and REVISION2.
+ around SOURCE.
*/
static svn_error_t *
populate_remaining_ranges(apr_array_header_t *children_with_mergeinfo,
- const char *source_root_url,
- const char *url1,
- svn_revnum_t revision1,
- const char *url2,
- svn_revnum_t revision2,
- svn_boolean_t honor_mergeinfo,
+ const merge_source_t *source,
svn_ra_session_t *ra_session,
- const char *parent_merge_src_canon_path,
merge_cmd_baton_t *merge_b,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
@@ -4076,14 +4908,11 @@ populate_remaining_ranges(apr_array_header_t *children_with_mergeinfo,
apr_pool_t *iterpool = svn_pool_create(scratch_pool);
int i;
svn_revnum_t gap_start, gap_end;
- svn_boolean_t child_inherits_implicit;
- svn_client__merge_path_t *parent;
- int parent_index;
/* If we aren't honoring mergeinfo or this is a --record-only merge,
- we'll make quick work of this by simply adding dummy REVISION1:REVISION2
+ we'll make quick work of this by simply adding dummy SOURCE->rev1:rev2
ranges for all children. */
- if (! honor_mergeinfo || merge_b->record_only)
+ if (! HONOR_MERGEINFO(merge_b) || merge_b->record_only)
{
for (i = 0; i < children_with_mergeinfo->nelts; i++)
{
@@ -4091,7 +4920,6 @@ populate_remaining_ranges(apr_array_header_t *children_with_mergeinfo,
APR_ARRAY_IDX(children_with_mergeinfo, i,
svn_client__merge_path_t *);
- parent = NULL;
svn_pool_clear(iterpool);
/* Issue #3646 'record-only merges create self-referential
@@ -4105,8 +4933,10 @@ populate_remaining_ranges(apr_array_header_t *children_with_mergeinfo,
NULL, /* child->inherited_mergeinfo */
svn_mergeinfo_inherited, ra_session,
child->abspath,
- MAX(revision1, revision2),
- MIN(revision1, revision2),
+ MAX(source->loc1->rev,
+ source->loc2->rev),
+ MIN(source->loc1->rev,
+ source->loc2->rev),
merge_b->ctx, result_pool,
iterpool));
}
@@ -4114,10 +4944,11 @@ populate_remaining_ranges(apr_array_header_t *children_with_mergeinfo,
{
/* Issue #3443 - Subtrees of the merge target can inherit
their parent's implicit mergeinfo in most cases. */
- parent_index = find_nearest_ancestor(children_with_mergeinfo,
- FALSE, child->abspath);
- parent = APR_ARRAY_IDX(children_with_mergeinfo, parent_index,
- svn_client__merge_path_t *);
+ svn_client__merge_path_t *parent
+ = find_nearest_ancestor(children_with_mergeinfo,
+ FALSE, child->abspath);
+ svn_boolean_t child_inherits_implicit;
+
/* If CHILD is a subtree then its parent must be in
CHILDREN_WITH_MERGEINFO, see the global comment
'THE CHILDREN_WITH_MERGEINFO ARRAY'. */
@@ -4125,14 +4956,15 @@ populate_remaining_ranges(apr_array_header_t *children_with_mergeinfo,
child_inherits_implicit = (parent && !child->switched);
SVN_ERR(ensure_implicit_mergeinfo(parent, child,
- child_inherits_implicit,
- revision1, revision2,
- ra_session, merge_b->ctx,
- result_pool, iterpool));
+ child_inherits_implicit,
+ source->loc1->rev,
+ source->loc2->rev,
+ ra_session, merge_b->ctx,
+ result_pool, iterpool));
}
- child->remaining_ranges = svn_rangelist__initialize(revision1,
- revision2,
+ child->remaining_ranges = svn_rangelist__initialize(source->loc1->rev,
+ source->loc2->rev,
TRUE,
result_pool);
}
@@ -4140,23 +4972,21 @@ populate_remaining_ranges(apr_array_header_t *children_with_mergeinfo,
return SVN_NO_ERROR;
}
- /* If, in the merge source's history, there was a copy from a older
- revision, then URL2 won't exist at some range M:N, where
- REVISION1 < M < N < REVISION2. The rules of 'MERGEINFO MERGE SOURCE
- NORMALIZATION' allow this, but we must ignore these gaps when
- calculating what ranges remain to be merged from
- URL1@REVISION1:URL2@REVISION2. If we don't and try to merge any part
- of URL2@M:URL2@N we would break the editor since no part of that
- actually exists. See http://svn.haxx.se/dev/archive-2008-11/0618.shtml.
+ /* If, in the merge source's history, there was a copy from an older
+ revision, then SOURCE->loc2->url won't exist at some range M:N, where
+ SOURCE->loc1->rev < M < N < SOURCE->loc2->rev. The rules of 'MERGEINFO
+ MERGE SOURCE NORMALIZATION' allow this, but we must ignore these gaps
+ when calculating what ranges remain to be merged from SOURCE. If we
+ don't and try to merge any part of SOURCE->loc2->url@M:N we would
+ break the editor since no part of that actually exists. See
+ http://svn.haxx.se/dev/archive-2008-11/0618.shtml.
Find the gaps in the merge target's history, if any. Eventually
we will adjust CHILD->REMAINING_RANGES such that we don't describe
non-existent paths to the editor. */
SVN_ERR(find_gaps_in_merge_source_history(&gap_start, &gap_end,
- parent_merge_src_canon_path,
- url1, revision1,
- url2, revision2,
- ra_session, merge_b,
+ source,
+ ra_session, merge_b->ctx,
iterpool));
/* Stash any gap in the merge command baton, we'll need it later when
@@ -4167,29 +4997,35 @@ populate_remaining_ranges(apr_array_header_t *children_with_mergeinfo,
for (i = 0; i < children_with_mergeinfo->nelts; i++)
{
- const char *child_repos_path;
- const char *child_url1, *child_url2;
svn_client__merge_path_t *child =
APR_ARRAY_IDX(children_with_mergeinfo, i, svn_client__merge_path_t *);
+ const char *child_repos_path
+ = svn_dirent_skip_ancestor(merge_b->target->abspath, child->abspath);
+ merge_source_t child_source;
+ svn_client__merge_path_t *parent = NULL;
+ svn_boolean_t child_inherits_implicit;
- parent = NULL;
+ svn_pool_clear(iterpool);
/* If the path is absent don't do subtree merge either. */
SVN_ERR_ASSERT(child);
if (child->absent)
continue;
- svn_pool_clear(iterpool);
-
- child_repos_path = svn_dirent_is_child(merge_b->target_abspath,
- child->abspath, iterpool);
- if (!child_repos_path)
- child_repos_path = "";
-
- child_url1 = svn_path_url_add_component2(url1, child_repos_path,
- iterpool);
- child_url2 = svn_path_url_add_component2(url2, child_repos_path,
- iterpool);
+ SVN_ERR_ASSERT(child_repos_path != NULL);
+ child_source.loc1 = svn_client__pathrev_join_relpath(
+ source->loc1, child_repos_path, iterpool);
+ child_source.loc2 = svn_client__pathrev_join_relpath(
+ source->loc2, child_repos_path, iterpool);
+ /* ### Is the child 'ancestral' over the same revision range? It's
+ * not necessarily true that a child is 'ancestral' if the parent is,
+ * nor that it's not if the parent is not. However, here we claim
+ * that it is. Before we had this 'ancestral' field that we need to
+ * set explicitly, the claim was implicit. Either way, the impact is
+ * that we might pass calculate_remaining_ranges() a source that is
+ * not in fact 'ancestral' (despite its 'ancestral' field being true),
+ * contrary to its doc-string. */
+ child_source.ancestral = source->ancestral;
/* Get the explicit/inherited mergeinfo for CHILD. If CHILD is the
merge target then also get its implicit mergeinfo. Otherwise defer
@@ -4202,17 +5038,15 @@ populate_remaining_ranges(apr_array_header_t *children_with_mergeinfo,
&(child->inherited_mergeinfo),
svn_mergeinfo_inherited, ra_session,
child->abspath,
- MAX(revision1, revision2),
- MIN(revision1, revision2),
+ MAX(source->loc1->rev, source->loc2->rev),
+ MIN(source->loc1->rev, source->loc2->rev),
merge_b->ctx, result_pool, iterpool));
/* If CHILD isn't the merge target find its parent. */
if (i > 0)
{
- parent_index = find_nearest_ancestor(children_with_mergeinfo,
- FALSE, child->abspath);
- parent = APR_ARRAY_IDX(children_with_mergeinfo, parent_index,
- svn_client__merge_path_t *);
+ parent = find_nearest_ancestor(children_with_mergeinfo,
+ FALSE, child->abspath);
/* If CHILD is a subtree then its parent must be in
CHILDREN_WITH_MERGEINFO, see the global comment
'THE CHILDREN_WITH_MERGEINFO ARRAY'. */
@@ -4227,17 +5061,15 @@ populate_remaining_ranges(apr_array_header_t *children_with_mergeinfo,
child_inherits_implicit = (parent && !child->switched);
SVN_ERR(calculate_remaining_ranges(parent, child,
- source_root_url,
- child_url1, revision1,
- child_url2, revision2,
- child->pre_merge_mergeinfo,
- merge_b->implicit_src_gap,
- child_inherits_implicit,
- ra_session,
- merge_b->ctx, result_pool,
- iterpool));
+ &child_source,
+ child->pre_merge_mergeinfo,
+ merge_b->implicit_src_gap,
+ child_inherits_implicit,
+ ra_session,
+ merge_b->ctx, result_pool,
+ iterpool));
- /* Deal with any gap in URL1@REVISION1:URL2@REVISION2's natural history.
+ /* Deal with any gap in SOURCE's natural history.
If the gap is a proper subset of CHILD->REMAINING_RANGES then we can
safely ignore it since we won't describe this path/rev pair.
@@ -4253,32 +5085,31 @@ populate_remaining_ranges(apr_array_header_t *children_with_mergeinfo,
&& merge_b->implicit_src_gap)
{
int j;
- svn_revnum_t start, end;
svn_boolean_t proper_subset = FALSE;
svn_boolean_t overlaps_or_adjoins = FALSE;
/* If this is a reverse merge reorder CHILD->REMAINING_RANGES
so it will work with the svn_rangelist_* APIs below. */
- if (revision1 > revision2)
+ if (source->loc1->rev > source->loc2->rev)
SVN_ERR(svn_rangelist_reverse(child->remaining_ranges, iterpool));
for (j = 0; j < child->remaining_ranges->nelts; j++)
{
- start = (APR_ARRAY_IDX(child->remaining_ranges, j,
- svn_merge_range_t *))->start;
- end = (APR_ARRAY_IDX(child->remaining_ranges, j,
- svn_merge_range_t *))->end;
- if ((start <= gap_start && gap_end < end)
- || (start < gap_start && gap_end <= end))
+ svn_merge_range_t *range
+ = APR_ARRAY_IDX(child->remaining_ranges, j, svn_merge_range_t *);
+
+ if ((range->start <= gap_start && gap_end < range->end)
+ || (range->start < gap_start && gap_end <= range->end))
{
proper_subset = TRUE;
break;
}
- else if ((gap_start == start) && (end == gap_end))
+ else if ((gap_start == range->start) && (range->end == gap_end))
{
break;
}
- else if (gap_start <= end && start <= gap_end) /* intersect */
+ else if (gap_start <= range->end && range->start <= gap_end)
+ /* intersect */
{
overlaps_or_adjoins = TRUE;
break;
@@ -4287,13 +5118,13 @@ populate_remaining_ranges(apr_array_header_t *children_with_mergeinfo,
if (!proper_subset)
{
- /* We need to make adjustements. Remove from, or add the gap
+ /* We need to make adjustments. Remove from, or add the gap
to, CHILD->REMAINING_RANGES as appropriate. */
if (overlaps_or_adjoins)
- SVN_ERR(svn_rangelist_merge(&(child->remaining_ranges),
- merge_b->implicit_src_gap,
- result_pool));
+ SVN_ERR(svn_rangelist_merge2(child->remaining_ranges,
+ merge_b->implicit_src_gap,
+ result_pool, iterpool));
else /* equals == TRUE */
SVN_ERR(svn_rangelist_remove(&(child->remaining_ranges),
merge_b->implicit_src_gap,
@@ -4301,7 +5132,7 @@ populate_remaining_ranges(apr_array_header_t *children_with_mergeinfo,
result_pool));
}
- if (revision1 > revision2) /* Reverse merge */
+ if (source->loc1->rev > source->loc2->rev) /* Reverse merge */
SVN_ERR(svn_rangelist_reverse(child->remaining_ranges, iterpool));
}
}
@@ -4315,79 +5146,9 @@ populate_remaining_ranges(apr_array_header_t *children_with_mergeinfo,
/*** Other Helper Functions ***/
-/* Helper for record_mergeinfo_for_dir_merge().
-
- Adjust, in place, the inheritability of the ranges in RANGELIST to
- describe a merge of RANGELIST into WC_WCPATH at depth DEPTH. Set
- *RANGELIST_INHERITANCE to the inheritability set.
-
- WC_PATH_IS_MERGE_TARGET is true if WC_PATH is the target of the merge,
- otherwise WC_PATH is a subtree.
-
- WC_PATH_HAS_MISSING_CHILD is true if WC_PATH is missing an immediate child
- because the child is switched or absent from the WC, or due to a sparse
- checkout -- see get_mergeinfo_paths().
-
- Perform any temporary allocations in SCRATCH_POOL. */
-static svn_error_t *
-calculate_merge_inheritance(apr_array_header_t *rangelist,
- svn_boolean_t *rangelist_inheritance,
- const char *local_abspath,
- svn_boolean_t wc_path_is_merge_target,
- svn_boolean_t wc_path_has_missing_child,
- svn_depth_t depth,
- svn_wc_context_t *wc_ctx,
- apr_pool_t * scratch_pool)
-{
- svn_node_kind_t path_kind;
-
- SVN_ERR(svn_wc_read_kind(&path_kind, wc_ctx, local_abspath, FALSE,
- scratch_pool));
-
- /* Starting assumption. */
- *rangelist_inheritance = TRUE;
-
- if (path_kind == svn_node_file)
- {
- /* Files *never* have non-inheritable mergeinfo. */
- svn_rangelist__set_inheritance(rangelist, TRUE);
- }
- else if (path_kind == svn_node_dir)
- {
- if (wc_path_is_merge_target)
- {
- if (wc_path_has_missing_child
- || depth == svn_depth_files
- || depth == svn_depth_empty)
- {
- svn_rangelist__set_inheritance(rangelist, FALSE);
- *rangelist_inheritance = FALSE;
- }
- else /* depth == svn_depth_files || depth == svn_depth_empty */
- {
- svn_rangelist__set_inheritance(rangelist, TRUE);
- }
- }
- else /* WC_PATH is a directory subtree of the target. */
- {
- if (wc_path_has_missing_child
- || depth == svn_depth_immediates)
- {
- svn_rangelist__set_inheritance(rangelist, FALSE);
- *rangelist_inheritance = FALSE;
- }
- else /* depth == infinity */
- {
- svn_rangelist__set_inheritance(rangelist, TRUE);
- }
- }
- }
- return SVN_NO_ERROR;
-}
-
/* Calculate the new mergeinfo for the target tree rooted at TARGET_ABSPATH
based on MERGES (a mapping of absolute WC paths to rangelists representing
- a merge from the source REPOS_REL_PATH).
+ a merge from the source SOURCE_FSPATH).
If RESULT_CATALOG is NULL, then record the new mergeinfo in the WC (at,
and possibly below, TARGET_ABSPATH).
@@ -4400,15 +5161,13 @@ calculate_merge_inheritance(apr_array_header_t *rangelist,
static svn_error_t *
update_wc_mergeinfo(svn_mergeinfo_catalog_t result_catalog,
const char *target_abspath,
- const char *repos_rel_path,
+ const char *source_fspath,
apr_hash_t *merges,
svn_boolean_t is_rollback,
svn_client_ctx_t *ctx,
apr_pool_t *scratch_pool)
{
apr_pool_t *iterpool = svn_pool_create(scratch_pool);
- const char *rel_path;
- svn_mergeinfo_t mergeinfo;
apr_hash_index_t *hi;
/* Combine the mergeinfo for the revision range just merged into
@@ -4416,10 +5175,12 @@ update_wc_mergeinfo(svn_mergeinfo_catalog_t result_catalog,
for (hi = apr_hash_first(scratch_pool, merges); hi; hi = apr_hash_next(hi))
{
const char *local_abspath = svn__apr_hash_index_key(hi);
- apr_array_header_t *ranges = svn__apr_hash_index_val(hi);
- apr_array_header_t *rangelist;
+ svn_rangelist_t *ranges = svn__apr_hash_index_val(hi);
+ svn_rangelist_t *rangelist;
svn_error_t *err;
const char *local_abspath_rel_to_target;
+ const char *fspath;
+ svn_mergeinfo_t mergeinfo;
svn_pool_clear(iterpool);
@@ -4450,8 +5211,7 @@ update_wc_mergeinfo(svn_mergeinfo_catalog_t result_catalog,
mergeinfo that path inherits. */
if (mergeinfo == NULL && ranges->nelts == 0)
{
- svn_boolean_t inherited;
- SVN_ERR(svn_client__get_wc_mergeinfo(&mergeinfo, &inherited,
+ SVN_ERR(svn_client__get_wc_mergeinfo(&mergeinfo, NULL,
svn_mergeinfo_nearest_ancestor,
local_abspath, NULL, NULL,
FALSE, ctx, iterpool, iterpool));
@@ -4460,16 +5220,13 @@ update_wc_mergeinfo(svn_mergeinfo_catalog_t result_catalog,
if (mergeinfo == NULL)
mergeinfo = apr_hash_make(iterpool);
- local_abspath_rel_to_target = svn_dirent_is_child(target_abspath,
- local_abspath,
- iterpool);
- if (local_abspath_rel_to_target)
- rel_path = svn_dirent_join(repos_rel_path,
- local_abspath_rel_to_target,
- iterpool);
- else
- rel_path = repos_rel_path;
- rangelist = apr_hash_get(mergeinfo, rel_path, APR_HASH_KEY_STRING);
+ local_abspath_rel_to_target = svn_dirent_skip_ancestor(target_abspath,
+ local_abspath);
+ SVN_ERR_ASSERT(local_abspath_rel_to_target != NULL);
+ fspath = svn_fspath__join(source_fspath,
+ local_abspath_rel_to_target,
+ iterpool);
+ rangelist = svn_hash_gets(mergeinfo, fspath);
if (rangelist == NULL)
rangelist = apr_array_make(iterpool, 0, sizeof(svn_merge_range_t *));
@@ -4483,11 +5240,10 @@ update_wc_mergeinfo(svn_mergeinfo_catalog_t result_catalog,
}
else
{
- SVN_ERR(svn_rangelist_merge(&rangelist, ranges,
- iterpool));
+ SVN_ERR(svn_rangelist_merge2(rangelist, ranges, iterpool, iterpool));
}
/* Update the mergeinfo by adjusting the path's rangelist. */
- apr_hash_set(mergeinfo, rel_path, APR_HASH_KEY_STRING, rangelist);
+ svn_hash_sets(mergeinfo, fspath, rangelist);
if (is_rollback && apr_hash_count(mergeinfo) == 0)
mergeinfo = NULL;
@@ -4497,16 +5253,15 @@ update_wc_mergeinfo(svn_mergeinfo_catalog_t result_catalog,
if (result_catalog)
{
svn_mergeinfo_t existing_mergeinfo =
- apr_hash_get(result_catalog, local_abspath, APR_HASH_KEY_STRING);
+ svn_hash_gets(result_catalog, local_abspath);
apr_pool_t *result_catalog_pool = apr_hash_pool_get(result_catalog);
if (existing_mergeinfo)
- SVN_ERR(svn_mergeinfo_merge(mergeinfo, existing_mergeinfo,
- result_catalog_pool));
- apr_hash_set(result_catalog,
- apr_pstrdup(result_catalog_pool, local_abspath),
- APR_HASH_KEY_STRING,
- svn_mergeinfo_dup(mergeinfo, result_catalog_pool));
+ SVN_ERR(svn_mergeinfo_merge2(mergeinfo, existing_mergeinfo,
+ result_catalog_pool, scratch_pool));
+ svn_hash_sets(result_catalog,
+ apr_pstrdup(result_catalog_pool, local_abspath),
+ svn_mergeinfo_dup(mergeinfo, result_catalog_pool));
}
else
{
@@ -4540,28 +5295,26 @@ update_wc_mergeinfo(svn_mergeinfo_catalog_t result_catalog,
Record override mergeinfo on any paths skipped during a merge.
- Set empty mergeinfo on each path in NOTIFY_B->SKIPPED_PATHS so the path
+ Set empty mergeinfo on each path in MERGE_B->SKIPPED_ABSPATHS so the path
does not incorrectly inherit mergeinfo that will later be describing
the merge.
- MERGEINFO_PATH, NOTIFY_B, and MERGE_B are all cascased from
+ MERGEINFO_PATH and MERGE_B are cascaded from
arguments of the same name in the caller.
IS_ROLLBACK is true if the caller is recording a reverse merge and false
otherwise. RANGELIST is the set of revisions being merged from
- MERGEINFO_PATH to MERGE_B->TARGET_ABSPATH. */
+ MERGEINFO_PATH to MERGE_B->target. */
static svn_error_t *
-record_skips(const char *mergeinfo_path,
- const apr_array_header_t *rangelist,
- svn_boolean_t is_rollback,
- notification_receiver_baton_t *notify_b,
- merge_cmd_baton_t *merge_b,
- apr_pool_t *scratch_pool)
+record_skips_in_mergeinfo(const char *mergeinfo_path,
+ const svn_rangelist_t *rangelist,
+ svn_boolean_t is_rollback,
+ merge_cmd_baton_t *merge_b,
+ apr_pool_t *scratch_pool)
{
apr_hash_index_t *hi;
apr_hash_t *merges;
- apr_size_t nbr_skips = (notify_b->skipped_abspaths != NULL ?
- apr_hash_count(notify_b->skipped_abspaths) : 0);
+ apr_size_t nbr_skips = apr_hash_count(merge_b->skipped_abspaths);
apr_pool_t *iterpool = svn_pool_create(scratch_pool);
if (nbr_skips == 0)
@@ -4570,7 +5323,7 @@ record_skips(const char *mergeinfo_path,
merges = apr_hash_make(scratch_pool);
/* Override the mergeinfo for child paths which weren't actually merged. */
- for (hi = apr_hash_first(scratch_pool, notify_b->skipped_abspaths); hi;
+ for (hi = apr_hash_first(scratch_pool, merge_b->skipped_abspaths); hi;
hi = apr_hash_next(hi))
{
const char *skipped_abspath = svn__apr_hash_index_key(hi);
@@ -4580,10 +5333,10 @@ record_skips(const char *mergeinfo_path,
/* Before we override, make sure this is a versioned path, it might
be an external or missing from disk due to authz restrictions. */
- SVN_ERR(perform_obstruction_check(&obstruction_state,
- NULL, NULL, NULL,
+ SVN_ERR(perform_obstruction_check(&obstruction_state, NULL, NULL,
+ NULL, NULL,
merge_b, skipped_abspath,
- svn_node_unknown, iterpool));
+ iterpool));
if (obstruction_state == svn_wc_notify_state_obstructed
|| obstruction_state == svn_wc_notify_state_missing)
continue;
@@ -4599,38 +5352,118 @@ record_skips(const char *mergeinfo_path,
### inherit any mergeinfo from a parent, but if it does
### we need to account for that. See issue #3440
### http://subversion.tigris.org/issues/show_bug.cgi?id=3440. */
- apr_hash_set(merges, skipped_abspath,
- APR_HASH_KEY_STRING,
- apr_array_make(scratch_pool, 0,
- sizeof(svn_merge_range_t *)));
+ svn_hash_sets(merges, skipped_abspath,
+ apr_array_make(scratch_pool, 0,
+ sizeof(svn_merge_range_t *)));
- if (nbr_skips < notify_b->nbr_notifications)
- /* ### Use RANGELIST as the mergeinfo for all children of
+ /* if (nbr_skips < notify_b->nbr_notifications)
+ ### Use RANGELIST as the mergeinfo for all children of
### this path which were not also explicitly
### skipped? */
- ;
}
- SVN_ERR(update_wc_mergeinfo(NULL, merge_b->target_abspath,
+ SVN_ERR(update_wc_mergeinfo(NULL, merge_b->target->abspath,
mergeinfo_path, merges,
is_rollback, merge_b->ctx, iterpool));
svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
+/* Data for reporting when a merge aborted because of raising conflicts.
+ */
+typedef struct single_range_conflict_report_t
+{
+ /* What sub-range of the requested source raised conflicts?
+ * The 'inheritable' flag is ignored. */
+ merge_source_t *conflicted_range;
+ /* What sub-range of the requested source remains to be merged?
+ * NULL if no more. The 'inheritable' flag is ignored. */
+ merge_source_t *remaining_source;
+
+} single_range_conflict_report_t;
+
+/* Create a single_range_conflict_report_t, containing deep copies of
+ * CONFLICTED_RANGE and REMAINING_SOURCE, allocated in RESULT_POOL. */
+static single_range_conflict_report_t *
+single_range_conflict_report_create(const merge_source_t *conflicted_range,
+ const merge_source_t *remaining_source,
+ apr_pool_t *result_pool)
+{
+ single_range_conflict_report_t *report
+ = apr_palloc(result_pool, sizeof(*report));
+
+ assert(conflicted_range != NULL);
+
+ report->conflicted_range = merge_source_dup(conflicted_range, result_pool);
+ report->remaining_source
+ = remaining_source ? merge_source_dup(remaining_source, result_pool)
+ : NULL;
+ return report;
+}
+
+/* Data for reporting when a merge aborted because of raising conflicts.
+ *
+ * ### TODO: More info, including the ranges (or other parameters) the user
+ * needs to complete the merge.
+ */
+typedef struct conflict_report_t
+{
+ const char *target_abspath;
+ /* The revision range during which conflicts were raised */
+ const merge_source_t *conflicted_range;
+ /* Was the conflicted range the last range in the whole requested merge? */
+ svn_boolean_t was_last_range;
+} conflict_report_t;
+
+/* Return a new conflict_report_t containing deep copies of the parameters,
+ * allocated in RESULT_POOL. */
+static conflict_report_t *
+conflict_report_create(const char *target_abspath,
+ const merge_source_t *conflicted_range,
+ svn_boolean_t was_last_range,
+ apr_pool_t *result_pool)
+{
+ conflict_report_t *report = apr_palloc(result_pool, sizeof(*report));
+
+ report->target_abspath = apr_pstrdup(result_pool, target_abspath);
+ report->conflicted_range = merge_source_dup(conflicted_range, result_pool);
+ report->was_last_range = was_last_range;
+ return report;
+}
+
+/* Return a deep copy of REPORT, allocated in RESULT_POOL. */
+static conflict_report_t *
+conflict_report_dup(const conflict_report_t *report,
+ apr_pool_t *result_pool)
+{
+ conflict_report_t *new = apr_pmemdup(result_pool, report, sizeof(*new));
+
+ new->target_abspath = apr_pstrdup(result_pool, report->target_abspath);
+ new->conflicted_range = merge_source_dup(report->conflicted_range,
+ result_pool);
+ return new;
+}
+
/* Create and return an error structure appropriate for the unmerged
revisions range(s). */
static APR_INLINE svn_error_t *
-make_merge_conflict_error(const char *target_wcpath,
- svn_merge_range_t *r,
+make_merge_conflict_error(conflict_report_t *report,
apr_pool_t *scratch_pool)
{
- return svn_error_createf
- (SVN_ERR_WC_FOUND_CONFLICT, NULL,
- _("One or more conflicts were produced while merging r%ld:%ld into\n"
- "'%s' --\n"
- "resolve all conflicts and rerun the merge to apply the remaining\n"
- "unmerged revisions"),
- r->start, r->end, svn_dirent_local_style(target_wcpath, scratch_pool));
+ assert(!report || svn_dirent_is_absolute(report->target_abspath));
+
+ if (report && ! report->was_last_range)
+ {
+ svn_error_t *err = svn_error_createf(SVN_ERR_WC_FOUND_CONFLICT, NULL,
+ _("One or more conflicts were produced while merging r%ld:%ld into\n"
+ "'%s' --\n"
+ "resolve all conflicts and rerun the merge to apply the remaining\n"
+ "unmerged revisions"),
+ report->conflicted_range->loc1->rev, report->conflicted_range->loc2->rev,
+ svn_dirent_local_style(report->target_abspath, scratch_pool));
+ assert(report->conflicted_range->loc1->rev != report->conflicted_range->loc2->rev); /* ### is a valid case in a 2-URL merge */
+ return err;
+ }
+ return SVN_NO_ERROR;
}
/* Helper for do_directory_merge().
@@ -4643,8 +5476,7 @@ make_merge_conflict_error(const char *target_wcpath,
or are descendants of TARGET_WCPATH by setting those children to NULL. */
static void
remove_absent_children(const char *target_wcpath,
- apr_array_header_t *children_with_mergeinfo,
- notification_receiver_baton_t *notify_b)
+ apr_array_header_t *children_with_mergeinfo)
{
/* Before we try to override mergeinfo for skipped paths, make sure
the path isn't absent due to authz restrictions, because there's
@@ -4653,8 +5485,7 @@ remove_absent_children(const char *target_wcpath,
for (i = 0; i < children_with_mergeinfo->nelts; i++)
{
svn_client__merge_path_t *child =
- APR_ARRAY_IDX(children_with_mergeinfo,
- i, svn_client__merge_path_t *);
+ APR_ARRAY_IDX(children_with_mergeinfo, i, svn_client__merge_path_t *);
if ((child->absent || child->scheduled_for_deletion)
&& svn_dirent_is_ancestor(target_wcpath, child->abspath))
{
@@ -4663,51 +5494,49 @@ remove_absent_children(const char *target_wcpath,
}
}
-/* Helper for do_directory_merge() to handle the case were a merge editor
+/* Helper for do_directory_merge() to handle the case where a merge editor
drive removes explicit mergeinfo from a subtree of the merge target.
- MERGE_B, NOTIFY_B are cascaded from the arguments of the same name in
- do_directory_merge(). If MERGE_B->DRY_RUN is true do nothing, if it is
- false then for each path (if any) in MERGE_B->PATHS_WITH_DELETED_MERGEINFO
- remove that path from NOTIFY_B->CHILDREN_WITH_MERGEINFO by setting that
- child to NULL. The one exception is for the merge target itself,
- MERGE_B->TARGET_ABSPATH, this must always be present in
- NOTIFY_B->CHILDREN_WITH_MERGEINFO so this is never removed by this
+ MERGE_B is cascaded from the argument of the same name in
+ do_directory_merge(). For each path (if any) in
+ MERGE_B->PATHS_WITH_DELETED_MERGEINFO remove that path from
+ CHILDREN_WITH_MERGEINFO.
+
+ The one exception is for the merge target itself,
+ MERGE_B->target->abspath, this must always be present in
+ CHILDREN_WITH_MERGEINFO so this is never removed by this
function. */
static void
remove_children_with_deleted_mergeinfo(merge_cmd_baton_t *merge_b,
- notification_receiver_baton_t *notify_b)
+ apr_array_header_t *children_with_mergeinfo)
{
int i;
- if (merge_b->dry_run || !merge_b->paths_with_deleted_mergeinfo)
+ if (!merge_b->paths_with_deleted_mergeinfo)
return;
- /* NOTIFY_B->CHILDREN_WITH_MERGEINFO[0] is the always the merge target
+ /* CHILDREN_WITH_MERGEINFO[0] is the always the merge target
so start at the first child. */
- for (i = 1; i < notify_b->children_with_mergeinfo->nelts; i++)
+ for (i = 1; i < children_with_mergeinfo->nelts; i++)
{
svn_client__merge_path_t *child =
- APR_ARRAY_IDX(notify_b->children_with_mergeinfo,
- i, svn_client__merge_path_t *);
- if (apr_hash_get(merge_b->paths_with_deleted_mergeinfo,
- child->abspath,
- APR_HASH_KEY_STRING))
+ APR_ARRAY_IDX(children_with_mergeinfo, i, svn_client__merge_path_t *);
+
+ if (svn_hash_gets(merge_b->paths_with_deleted_mergeinfo, child->abspath))
{
- svn_sort__array_delete(notify_b->children_with_mergeinfo, i--, 1);
+ svn_sort__array_delete(children_with_mergeinfo, i--, 1);
}
}
}
/* Helper for do_directory_merge().
- Set up the diff editor report to merge URL1@REVISION1 to URL2@REVISION2
+ Set up the diff editor report to merge the SOURCE diff
into TARGET_ABSPATH and drive it.
- If mergeinfo is not being honored based on MERGE_B, see the doc string for
- HONOR_MERGEINFO() for how this is determined, then ignore
- CHILDREN_WITH_MERGEINFO and merge the diff between URL1@REVISION1 and
- URL2@REVISION2 to TARGET_ABSPATH.
+ If mergeinfo is not being honored (based on MERGE_B -- see the doc
+ string for HONOR_MERGEINFO() for how this is determined), then ignore
+ CHILDREN_WITH_MERGEINFO and merge the SOURCE diff to TARGET_ABSPATH.
If mergeinfo is being honored then perform a history-aware merge,
describing TARGET_ABSPATH and its subtrees to the reporter in such as way
@@ -4719,59 +5548,60 @@ remove_children_with_deleted_mergeinfo(merge_cmd_baton_t *merge_b,
svn_client__merge_path_t * -- see 'THE CHILDREN_WITH_MERGEINFO ARRAY'
comment at the top of this file for more info. Note that it is possible
TARGET_ABSPATH and/or some of its subtrees need only a subset, or no part,
- of REVISION1:REVISION2 to be merged. Though there is little point to
+ of SOURCE to be merged. Though there is little point to
calling this function if TARGET_ABSPATH and all its subtrees have already
- had URL1@REVISION1 to URL2@REVISION2 merged, this will work but is a no-op.
+ had SOURCE merged, this will work but is a no-op.
- REVISION1 and REVISION2 must be bound by the set of remaining_ranges
+ SOURCE->rev1 and SOURCE->rev2 must be bound by the set of remaining_ranges
fields in CHILDREN_WITH_MERGEINFO's elements, specifically:
- For forward merges (REVISION1 < REVISION2):
+ For forward merges (SOURCE->rev1 < SOURCE->rev2):
1) The first svn_merge_range_t * element of each child's remaining_ranges
array must meet one of the following conditions:
- a) The range's start field is greater than or equal to REVISION2.
+ a) The range's start field is greater than or equal to SOURCE->rev2.
- b) The range's end field is REVISION2.
+ b) The range's end field is SOURCE->rev2.
2) Among all the ranges that meet condition 'b' the oldest start
- revision must equal REVISION1.
+ revision must equal SOURCE->rev1.
- For reverse merges (REVISION1 > REVISION2):
+ For reverse merges (SOURCE->rev1 > SOURCE->rev2):
1) The first svn_merge_range_t * element of each child's remaining_ranges
array must meet one of the following conditions:
- a) The range's start field is less than or equal to REVISION2.
+ a) The range's start field is less than or equal to SOURCE->rev2.
- b) The range's end field is REVISION2.
+ b) The range's end field is SOURCE->rev2.
2) Among all the ranges that meet condition 'b' the youngest start
- revision must equal REVISION1.
+ revision must equal SOURCE->rev1.
Note: If the first svn_merge_range_t * element of some subtree child's
remaining_ranges array is the same as the first range of that child's
nearest path-wise ancestor, then the subtree child *will not* be described
to the reporter.
- DEPTH, NOTIFY_B, and MERGE_B are cascasded from do_directory_merge(), see
+ DEPTH, NOTIFY_B, and MERGE_B are cascaded from do_directory_merge(), see
that function for more info.
- If MERGE_B->sources_ancestral is set, then URL1@REVISION1 must be a
- historical ancestor of URL2@REVISION2, or vice-versa (see
+ MERGE_B->ra_session1 and MERGE_B->ra_session2 are RA sessions open to any
+ URL in the repository of SOURCE; they may be temporarily reparented within
+ this function.
+
+ If SOURCE->ancestral is set, then SOURCE->loc1 must be a
+ historical ancestor of SOURCE->loc2, or vice-versa (see
`MERGEINFO MERGE SOURCE NORMALIZATION' for more requirements around
- the values of URL1, REVISION1, URL2, and REVISION2 in this case).
+ SOURCE in this case).
*/
static svn_error_t *
drive_merge_report_editor(const char *target_abspath,
- const char *url1,
- svn_revnum_t revision1,
- const char *url2,
- svn_revnum_t revision2,
+ const merge_source_t *source,
const apr_array_header_t *children_with_mergeinfo,
+ const svn_diff_tree_processor_t *processor,
svn_depth_t depth,
- notification_receiver_baton_t *notify_b,
merge_cmd_baton_t *merge_b,
apr_pool_t *scratch_pool)
{
@@ -4780,20 +5610,18 @@ drive_merge_report_editor(const char *target_abspath,
void *diff_edit_baton;
void *report_baton;
svn_revnum_t target_start;
- svn_boolean_t honor_mergeinfo;
- const char *old_sess2_url;
- svn_boolean_t is_rollback = revision1 > revision2;
-
- honor_mergeinfo = HONOR_MERGEINFO(merge_b);
+ svn_boolean_t honor_mergeinfo = HONOR_MERGEINFO(merge_b);
+ const char *old_sess1_url, *old_sess2_url;
+ svn_boolean_t is_rollback = source->loc1->rev > source->loc2->rev;
/* Start with a safe default starting revision for the editor and the
merge target. */
- target_start = revision1;
+ target_start = source->loc1->rev;
/* If we are honoring mergeinfo the starting revision for the merge target
- might not be REVISION1, in fact the merge target might not need *any*
- part of REVISION1:REVISION2 merged -- Instead some subtree of the target
- needs REVISION1:REVISION2 -- So get the right starting revision for the
+ might not be SOURCE->rev1, in fact the merge target might not need *any*
+ part of SOURCE merged -- Instead some subtree of the target
+ needs SOURCE -- So get the right starting revision for the
target. */
if (honor_mergeinfo)
{
@@ -4814,22 +5642,22 @@ drive_merge_report_editor(const char *target_abspath,
if (child->remaining_ranges->nelts == 0)
{
/* The merge target doesn't need anything merged. */
- target_start = revision2;
+ target_start = source->loc2->rev;
}
else
{
/* The merge target has remaining revisions to merge. These
ranges may fully or partially overlap the range described
- by REVISION1:REVISION2 or may not intersect that range at
+ by SOURCE->rev1:rev2 or may not intersect that range at
all. */
svn_merge_range_t *range =
APR_ARRAY_IDX(child->remaining_ranges, 0,
svn_merge_range_t *);
- if ((!is_rollback && range->start > revision2)
- || (is_rollback && range->start < revision2))
+ if ((!is_rollback && range->start > source->loc2->rev)
+ || (is_rollback && range->start < source->loc2->rev))
{
/* Merge target's first remaining range doesn't intersect. */
- target_start = revision2;
+ target_start = source->loc2->rev;
}
else
{
@@ -4840,29 +5668,32 @@ drive_merge_report_editor(const char *target_abspath,
}
}
- /* Temporarily point our second RA session to URL1, too. We use
+ SVN_ERR(svn_client__ensure_ra_session_url(&old_sess1_url,
+ merge_b->ra_session1,
+ source->loc1->url, scratch_pool));
+ /* Temporarily point our second RA session to SOURCE->loc1->url, too. We use
this to request individual file contents. */
SVN_ERR(svn_client__ensure_ra_session_url(&old_sess2_url,
merge_b->ra_session2,
- url1, scratch_pool));
+ source->loc1->url, scratch_pool));
/* Get the diff editor and a reporter with which to, ultimately,
drive it. */
- SVN_ERR(svn_client__get_diff_editor(&diff_editor, &diff_edit_baton,
- merge_b->ctx->wc_ctx, target_abspath,
- depth,
- merge_b->ra_session2, revision1,
- FALSE, merge_b->dry_run,
- &merge_callbacks, merge_b,
- merge_b->ctx->cancel_func,
- merge_b->ctx->cancel_baton,
- notification_receiver, notify_b,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_client__get_diff_editor2(&diff_editor, &diff_edit_baton,
+ merge_b->ra_session2,
+ depth,
+ source->loc1->rev,
+ TRUE /* text_deltas */,
+ processor,
+ merge_b->ctx->cancel_func,
+ merge_b->ctx->cancel_baton,
+ scratch_pool));
SVN_ERR(svn_ra_do_diff3(merge_b->ra_session1,
- &reporter, &report_baton, revision2,
- "", depth, merge_b->ignore_ancestry,
+ &reporter, &report_baton, source->loc2->rev,
+ "", depth, merge_b->diff_ignore_ancestry,
TRUE, /* text_deltas */
- url2, diff_editor, diff_edit_baton, scratch_pool));
+ source->loc2->url, diff_editor, diff_edit_baton,
+ scratch_pool));
/* Drive the reporter. */
SVN_ERR(reporter->set_path(report_baton, "", target_start, depth,
@@ -4881,11 +5712,10 @@ drive_merge_report_editor(const char *target_abspath,
{
svn_merge_range_t *range;
const char *child_repos_path;
- svn_client__merge_path_t *parent;
- svn_client__merge_path_t *child =
+ const svn_client__merge_path_t *parent;
+ const svn_client__merge_path_t *child =
APR_ARRAY_IDX(children_with_mergeinfo, i,
svn_client__merge_path_t *);
- int parent_index;
SVN_ERR_ASSERT(child);
if (child->absent)
@@ -4894,23 +5724,21 @@ drive_merge_report_editor(const char *target_abspath,
svn_pool_clear(iterpool);
/* Find this child's nearest wc ancestor with mergeinfo. */
- parent_index = find_nearest_ancestor(children_with_mergeinfo,
- FALSE, child->abspath);
- parent = APR_ARRAY_IDX(children_with_mergeinfo, parent_index,
- svn_client__merge_path_t *);
+ parent = find_nearest_ancestor(children_with_mergeinfo,
+ FALSE, child->abspath);
/* If a subtree needs the same range applied as its nearest parent
with mergeinfo or neither the subtree nor this parent need
- REVISION1:REVISION2 merged, then we don't need to describe the
+ SOURCE->rev1:rev2 merged, then we don't need to describe the
subtree separately. In the latter case this could break the
- editor if child->abspath didn't exist at REVISION2 and we
+ editor if child->abspath didn't exist at SOURCE->rev2 and we
attempt to describe it via a reporter set_path call. */
if (child->remaining_ranges->nelts)
{
range = APR_ARRAY_IDX(child->remaining_ranges, 0,
svn_merge_range_t *);
- if ((!is_rollback && range->start > revision2)
- || (is_rollback && range->start < revision2))
+ if ((!is_rollback && range->start > source->loc2->rev)
+ || (is_rollback && range->start < source->loc2->rev))
{
/* This child's first remaining range comes after the range
we are currently merging, so skip it. We expect to get
@@ -4948,14 +5776,14 @@ drive_merge_report_editor(const char *target_abspath,
SVN_ERR_ASSERT(child_repos_path);
if ((child->remaining_ranges->nelts == 0)
- || (is_rollback && (range->start < revision2))
- || (!is_rollback && (range->start > revision2)))
+ || (is_rollback && (range->start < source->loc2->rev))
+ || (!is_rollback && (range->start > source->loc2->rev)))
{
/* Nothing to merge to this child. We'll claim we have
it up to date so the server doesn't send us
anything. */
SVN_ERR(reporter->set_path(report_baton, child_repos_path,
- revision2, depth, FALSE,
+ source->loc2->rev, depth, FALSE,
NULL, iterpool));
}
else
@@ -4969,88 +5797,57 @@ drive_merge_report_editor(const char *target_abspath,
}
SVN_ERR(reporter->finish_report(report_baton, scratch_pool));
- /* Point the merge baton's second session back where it was. */
- if (old_sess2_url)
- SVN_ERR(svn_ra_reparent(merge_b->ra_session2, old_sess2_url, scratch_pool));
-
- /* Caller must call svn_sleep_for_timestamps() */
- *(merge_b->use_sleep) = TRUE;
+ /* Point the merge baton's RA sessions back where they were. */
+ SVN_ERR(svn_ra_reparent(merge_b->ra_session1, old_sess1_url, scratch_pool));
+ SVN_ERR(svn_ra_reparent(merge_b->ra_session2, old_sess2_url, scratch_pool));
return SVN_NO_ERROR;
}
/* Iterate over each svn_client__merge_path_t * element in
- CHILDREN_WITH_MERGEINFO and find the most inclusive start revision
- among those element's first remaining_ranges element.
+ CHILDREN_WITH_MERGEINFO and, if START_REV is true, find the most inclusive
+ start revision among those element's first remaining_ranges element. If
+ START_REV is false, then look for the most inclusive end revision.
- If IS_ROLLBACK is true the youngest revision is considered the "most
- inclusive" otherwise the oldest revision is.
+ If IS_ROLLBACK is true the youngest start or end (as per START_REV)
+ revision is considered the "most inclusive" otherwise the oldest revision
+ is.
If none of CHILDREN_WITH_MERGEINFO's elements have any remaining ranges
return SVN_INVALID_REVNUM. */
static svn_revnum_t
-get_most_inclusive_start_rev(const apr_array_header_t *children_with_mergeinfo,
- svn_boolean_t is_rollback)
+get_most_inclusive_rev(const apr_array_header_t *children_with_mergeinfo,
+ svn_boolean_t is_rollback,
+ svn_boolean_t start_rev)
{
int i;
- svn_revnum_t start_rev = SVN_INVALID_REVNUM;
+ svn_revnum_t most_inclusive_rev = SVN_INVALID_REVNUM;
for (i = 0; i < children_with_mergeinfo->nelts; i++)
{
svn_client__merge_path_t *child =
APR_ARRAY_IDX(children_with_mergeinfo, i, svn_client__merge_path_t *);
- svn_merge_range_t *range;
if ((! child) || child->absent)
continue;
- if (! child->remaining_ranges->nelts)
- continue;
- range = APR_ARRAY_IDX(child->remaining_ranges, 0, svn_merge_range_t *);
- if ((i == 0) && (range->start == range->end))
- continue;
- if ((start_rev == SVN_INVALID_REVNUM)
- || (is_rollback && (range->start > start_rev))
- || ((! is_rollback) && (range->start < start_rev)))
- start_rev = range->start;
- }
- return start_rev;
-}
-
-/* Iterate over each svn_client__merge_path_t * element in
- CHILDREN_WITH_MERGEINFO and find the most inclusive end revision
- among those element's first remaining_ranges element.
-
- If IS_ROLLBACK is true the oldest revision is considered the "most
- inclusive" otherwise the youngest revision is.
-
- If none of CHILDREN_WITH_MERGEINFO's elements have any remaining ranges
- return SVN_INVALID_REVNUM. */
-static svn_revnum_t
-get_most_inclusive_end_rev(const apr_array_header_t *children_with_mergeinfo,
- svn_boolean_t is_rollback)
-{
- int i;
- svn_revnum_t end_rev = SVN_INVALID_REVNUM;
-
- for (i = 0; i < children_with_mergeinfo->nelts; i++)
- {
- svn_client__merge_path_t *child =
- APR_ARRAY_IDX(children_with_mergeinfo, i, svn_client__merge_path_t *);
- if (!child || child->absent)
- continue;
if (child->remaining_ranges->nelts > 0)
{
- svn_merge_range_t *range = APR_ARRAY_IDX(child->remaining_ranges, 0,
- svn_merge_range_t *);
- if ((end_rev == SVN_INVALID_REVNUM)
- || (is_rollback && (range->end > end_rev))
- || ((! is_rollback) && (range->end < end_rev)))
- end_rev = range->end;
+ svn_merge_range_t *range =
+ APR_ARRAY_IDX(child->remaining_ranges, 0, svn_merge_range_t *);
+
+ /* Are we looking for the most inclusive start or end rev? */
+ svn_revnum_t rev = start_rev ? range->start : range->end;
+
+ if ((most_inclusive_rev == SVN_INVALID_REVNUM)
+ || (is_rollback && (rev > most_inclusive_rev))
+ || ((! is_rollback) && (rev < most_inclusive_rev)))
+ most_inclusive_rev = rev;
}
}
- return end_rev;
+ return most_inclusive_rev;
}
+
/* If first item in each child of CHILDREN_WITH_MERGEINFO's
remaining_ranges is inclusive of END_REV, Slice the first range in
to two at END_REV. All the allocations are persistent and allocated
@@ -5077,29 +5874,15 @@ slice_remaining_ranges(apr_array_header_t *children_with_mergeinfo,
|| (!is_rollback && (range->start < end_rev)
&& (range->end > end_rev)))
{
- int j;
svn_merge_range_t *split_range1, *split_range2;
- apr_array_header_t *orig_remaining_ranges =
- child->remaining_ranges;
+
split_range1 = svn_merge_range_dup(range, pool);
split_range2 = svn_merge_range_dup(range, pool);
split_range1->end = end_rev;
split_range2->start = end_rev;
- child->remaining_ranges =
- apr_array_make(pool, (child->remaining_ranges->nelts + 1),
- sizeof(svn_merge_range_t *));
- APR_ARRAY_PUSH(child->remaining_ranges,
- svn_merge_range_t *) = split_range1;
- APR_ARRAY_PUSH(child->remaining_ranges,
- svn_merge_range_t *) = split_range2;
- for (j = 1; j < orig_remaining_ranges->nelts; j++)
- {
- svn_merge_range_t *orig_range =
- APR_ARRAY_IDX(orig_remaining_ranges, j,
- svn_merge_range_t *);
- APR_ARRAY_PUSH(child->remaining_ranges,
- svn_merge_range_t *) = orig_range;
- }
+ APR_ARRAY_IDX(child->remaining_ranges, 0,
+ svn_merge_range_t *) = split_range1;
+ svn_sort__array_insert(&split_range2, child->remaining_ranges, 1);
}
}
}
@@ -5113,18 +5896,15 @@ slice_remaining_ranges(apr_array_header_t *children_with_mergeinfo,
If a range is removed from a child's remaining_ranges array, allocate the
new remaining_ranges array in POOL.
-
- ### TODO: We should have remaining_ranges in reverse order to avoid
- ### recreating and reallocationg the remaining_ranges every time we want
- ### to remove the first range. If the ranges were reversed we could simply
- ### pop the last element in the array. */
+ */
static void
remove_first_range_from_remaining_ranges(svn_revnum_t revision,
apr_array_header_t
*children_with_mergeinfo,
apr_pool_t *pool)
{
- int i, j;
+ int i;
+
for (i = 0; i < children_with_mergeinfo->nelts; i++)
{
svn_client__merge_path_t *child =
@@ -5138,20 +5918,7 @@ remove_first_range_from_remaining_ranges(svn_revnum_t revision,
APR_ARRAY_IDX(child->remaining_ranges, 0, svn_merge_range_t *);
if (first_range->end == revision)
{
- apr_array_header_t *orig_remaining_ranges =
- child->remaining_ranges;
- child->remaining_ranges =
- apr_array_make(pool, (child->remaining_ranges->nelts - 1),
- sizeof(svn_merge_range_t *));
- for (j = 1; j < orig_remaining_ranges->nelts; j++)
- {
- svn_merge_range_t *range =
- APR_ARRAY_IDX(orig_remaining_ranges,
- j,
- svn_merge_range_t *);
- APR_ARRAY_PUSH(child->remaining_ranges,
- svn_merge_range_t *) = range;
- }
+ svn_sort__array_delete(child->remaining_ranges, 0, 1);
}
}
}
@@ -5161,69 +5928,38 @@ remove_first_range_from_remaining_ranges(svn_revnum_t revision,
Set *FILENAME to the local path to a new temporary file holding its text,
and set *PROPS to a new hash of its properties.
- RA_SESSION is a session whose current root is the URL of the file itself,
- and REV is the revision to get.
-
- The new temporary file will be created as a sibling of WC_TARGET.
- WC_TARGET should be the local path to the working copy of the file, but
- it does not matter whether anything exists on disk at this path as long
- as WC_TARGET's parent directory exists.
+ RA_SESSION is a session open to the correct repository, which will be
+ temporarily reparented to the URL of the file itself. LOCATION is the
+ repository location of the file.
- All allocation occurs in POOL.
-
- ### TODO: Create the temporary file under .svn/tmp/ instead of next to
- the working file.
+ The resulting file and the return values live as long as RESULT_POOL, all
+ other allocations occur in SCRATCH_POOL.
*/
static svn_error_t *
single_file_merge_get_file(const char **filename,
- svn_ra_session_t *ra_session,
apr_hash_t **props,
- svn_revnum_t rev,
+ svn_ra_session_t *ra_session,
+ const svn_client__pathrev_t *location,
const char *wc_target,
- apr_pool_t *pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
svn_stream_t *stream;
+ const char *old_sess_url;
+ svn_error_t *err;
- SVN_ERR(svn_stream_open_unique(&stream, filename,
- svn_dirent_dirname(wc_target, pool),
- svn_io_file_del_none, pool, pool));
- SVN_ERR(svn_ra_get_file(ra_session, "", rev,
- stream, NULL, props, pool));
- return svn_stream_close(stream);
-}
-
-
-/* Send a notification specific to a single-file merge if the states
- indicate there's something worth reporting.
+ SVN_ERR(svn_stream_open_unique(&stream, filename, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ result_pool, scratch_pool));
- If *HEADER_SENT is not set and HEADER_NOTIFICATION is not NULL, then
- send the header notification before sending the state notification,
- and set *HEADER_SENT to TRUE. */
-static APR_INLINE void
-single_file_merge_notify(void *notify_baton,
- const char *local_abspath,
- svn_wc_notify_action_t action,
- svn_wc_notify_state_t text_state,
- svn_wc_notify_state_t prop_state,
- svn_wc_notify_t *header_notification,
- svn_boolean_t *header_sent,
- apr_pool_t *pool)
-{
- svn_wc_notify_t *notify = svn_wc_create_notify(local_abspath, action, pool);
- notify->kind = svn_node_file;
- notify->content_state = text_state;
- notify->prop_state = prop_state;
- if (notify->content_state == svn_wc_notify_state_missing)
- notify->action = svn_wc_notify_skip;
+ SVN_ERR(svn_client__ensure_ra_session_url(&old_sess_url, ra_session, location->url,
+ scratch_pool));
+ err = svn_ra_get_file(ra_session, "", location->rev,
+ stream, NULL, props, scratch_pool);
+ SVN_ERR(svn_error_compose_create(
+ err, svn_ra_reparent(ra_session, old_sess_url, scratch_pool)));
- if (IS_OPERATIVE_NOTIFICATION(notify)
- && header_notification
- && (! *header_sent))
- {
- notification_receiver(notify_baton, header_notification, pool);
- *header_sent = TRUE;
- }
- notification_receiver(notify_baton, notify, pool);
+ return svn_error_trace(svn_stream_close(stream));
}
/* Compare two svn_client__merge_path_t elements **A and **B, given the
@@ -5264,7 +6000,13 @@ get_child_with_mergeinfo(const apr_array_header_t *children_with_mergeinfo,
/* Insert a deep copy of INSERT_ELEMENT into the CHILDREN_WITH_MERGEINFO
array at its correct position. Allocate the new storage in POOL.
CHILDREN_WITH_MERGEINFO is a depth first sorted array of
- (svn_client__merge_path_t *). */
+ (svn_client__merge_path_t *).
+
+ ### Most callers don't need this to deep-copy the new element.
+ ### It may be more efficient for some callers to insert a bunch of items
+ out of order and then sort afterwards. (One caller is doing a qsort
+ after calling this anyway.)
+ */
static void
insert_child_to_merge(apr_array_header_t *children_with_mergeinfo,
const svn_client__merge_path_t *insert_element,
@@ -5284,14 +6026,16 @@ insert_child_to_merge(apr_array_header_t *children_with_mergeinfo,
/* Helper for get_mergeinfo_paths().
- CHILDREN_WITH_MERGEINFO, MERGE_CMD_BATON, DEPTH, and POOL are
+ CHILDREN_WITH_MERGEINFO, DEPTH, and POOL are
all cascaded from the arguments of the same name to get_mergeinfo_paths().
+ TARGET is the merge target.
+
*CHILD is the element in in CHILDREN_WITH_MERGEINFO that
get_mergeinfo_paths() is iterating over and *CURR_INDEX is index for
*CHILD.
- If CHILD->ABSPATH is equal to MERGE_CMD_BATON->TARGET_ABSPATH do nothing.
+ If CHILD->ABSPATH is equal to MERGE_CMD_BATON->target->abspath do nothing.
Else if CHILD->ABSPATH is switched or absent then make sure its immediate
(as opposed to nearest) parent in CHILDREN_WITH_MERGEINFO is marked as
missing a child. If the immediate parent does not exist in
@@ -5305,10 +6049,11 @@ insert_child_to_merge(apr_array_header_t *children_with_mergeinfo,
static svn_error_t *
insert_parent_and_sibs_of_sw_absent_del_subtree(
apr_array_header_t *children_with_mergeinfo,
- merge_cmd_baton_t *merge_cmd_baton,
+ const merge_target_t *target,
int *curr_index,
svn_client__merge_path_t *child,
svn_depth_t depth,
+ svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
svn_client__merge_path_t *parent;
@@ -5319,7 +6064,7 @@ insert_parent_and_sibs_of_sw_absent_del_subtree(
if (!(child->absent
|| (child->switched
- && strcmp(merge_cmd_baton->target_abspath,
+ && strcmp(target->abspath,
child->abspath) != 0)))
return SVN_NO_ERROR;
@@ -5327,14 +6072,15 @@ insert_parent_and_sibs_of_sw_absent_del_subtree(
parent = get_child_with_mergeinfo(children_with_mergeinfo, parent_abspath);
if (parent)
{
- parent->missing_child = TRUE;
+ parent->missing_child = child->absent;
+ parent->switched_child = child->switched;
}
else
{
/* Create a new element to insert into CHILDREN_WITH_MERGEINFO. */
- parent = apr_pcalloc(pool, sizeof(*parent));
- parent->abspath = apr_pstrdup(pool, parent_abspath);
- parent->missing_child = TRUE;
+ parent = svn_client__merge_path_create(parent_abspath, pool);
+ parent->missing_child = child->absent;
+ parent->switched_child = child->switched;
/* Insert PARENT into CHILDREN_WITH_MERGEINFO. */
insert_child_to_merge(children_with_mergeinfo, parent, pool);
/* Increment for loop index so we don't process the inserted element. */
@@ -5342,7 +6088,7 @@ insert_parent_and_sibs_of_sw_absent_del_subtree(
} /*(parent == NULL) */
/* Add all of PARENT's non-missing children that are not already present.*/
- SVN_ERR(svn_wc__node_get_children(&children, merge_cmd_baton->ctx->wc_ctx,
+ SVN_ERR(svn_wc__node_get_children(&children, ctx->wc_ctx,
parent_abspath, FALSE, pool, pool));
iterpool = svn_pool_create(pool);
for (i = 0; i < children->nelts; i++)
@@ -5363,17 +6109,15 @@ insert_parent_and_sibs_of_sw_absent_del_subtree(
{
svn_node_kind_t child_kind;
- SVN_ERR(svn_wc_read_kind(&child_kind,
- merge_cmd_baton->ctx->wc_ctx,
- child_abspath, FALSE, iterpool));
+ SVN_ERR(svn_wc_read_kind2(&child_kind,
+ ctx->wc_ctx, child_abspath,
+ FALSE, FALSE, iterpool));
if (child_kind != svn_node_file)
continue;
}
- sibling_of_missing = apr_pcalloc(pool,
- sizeof(*sibling_of_missing));
- sibling_of_missing->abspath = apr_pstrdup(pool,
- child_abspath);
+ sibling_of_missing = svn_client__merge_path_create(child_abspath,
+ pool);
insert_child_to_merge(children_with_mergeinfo, sibling_of_missing,
pool);
}
@@ -5406,59 +6150,33 @@ struct pre_merge_status_baton_t
apr_pool_t *pool;
};
-/* A svn_client_status_func_t callback used by get_mergeinfo_paths to gather
- all switched, absent, and missing subtrees under a merge target. */
+/* A svn_wc_status_func4_t callback used by get_mergeinfo_paths to gather
+ all switched, depth filtered and missing subtrees under a merge target.
+
+ Note that this doesn't see server and user excluded trees. */
static svn_error_t *
pre_merge_status_cb(void *baton,
const char *local_abspath,
const svn_wc_status3_t *status,
- apr_pool_t *pool)
+ apr_pool_t *scratch_pool)
{
struct pre_merge_status_baton_t *pmsb = baton;
- const char *dup_abspath = NULL;
-
- /* ### Probably needed: Calculate file external status */
- svn_boolean_t is_file_external = FALSE;
-
- /* ### This block can go once we bumped to the EXTERNALS store */
- if (status->versioned
- && status->switched
- && status->kind == svn_node_file)
- {
- svn_node_kind_t external_kind;
- SVN_ERR(svn_wc__read_external_info(&external_kind, NULL, NULL, NULL,
- NULL,
- pmsb->wc_ctx, local_abspath,
- local_abspath, TRUE, pool, pool));
-
- is_file_external = (external_kind == svn_node_file);
- }
-
- if (status->switched && !is_file_external)
+ if (status->switched && !status->file_external)
{
- if (!dup_abspath)
- dup_abspath = apr_pstrdup(pmsb->pool, local_abspath);
-
- apr_hash_set(pmsb->switched_subtrees,
- apr_pstrdup(pmsb->pool, local_abspath),
- APR_HASH_KEY_STRING,
- dup_abspath);
+ store_path(pmsb->switched_subtrees, local_abspath);
}
if (status->depth == svn_depth_empty
|| status->depth == svn_depth_files)
{
- svn_depth_t *depth = apr_pcalloc(pmsb->pool, sizeof *depth);
+ const char *dup_abspath;
+ svn_depth_t *depth = apr_pmemdup(pmsb->pool, &status->depth,
+ sizeof *depth);
- if (!dup_abspath)
- dup_abspath = apr_pstrdup(pmsb->pool, local_abspath);
+ dup_abspath = apr_pstrdup(pmsb->pool, local_abspath);
- *depth = status->depth;
- apr_hash_set(pmsb->shallow_subtrees,
- dup_abspath,
- APR_HASH_KEY_STRING,
- depth);
+ svn_hash_sets(pmsb->shallow_subtrees, dup_abspath, depth);
}
if (status->node_status == svn_wc_status_missing)
@@ -5466,17 +6184,14 @@ pre_merge_status_cb(void *baton,
svn_boolean_t new_missing_root = TRUE;
apr_hash_index_t *hi;
- if (!dup_abspath)
- dup_abspath = apr_pstrdup(pmsb->pool, local_abspath);
-
- for (hi = apr_hash_first(pool, pmsb->missing_subtrees);
+ for (hi = apr_hash_first(scratch_pool, pmsb->missing_subtrees);
hi;
hi = apr_hash_next(hi))
{
const char *missing_root_path = svn__apr_hash_index_key(hi);
if (svn_dirent_is_ancestor(missing_root_path,
- dup_abspath))
+ local_abspath))
{
new_missing_root = FALSE;
break;
@@ -5484,9 +6199,85 @@ pre_merge_status_cb(void *baton,
}
if (new_missing_root)
- apr_hash_set(pmsb->missing_subtrees, dup_abspath,
- APR_HASH_KEY_STRING, dup_abspath);
+ store_path(pmsb->missing_subtrees, local_abspath);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Find all the subtrees in the working copy tree rooted at TARGET_ABSPATH
+ * that have explicit mergeinfo.
+ * Set *SUBTREES_WITH_MERGEINFO to a hash mapping (const char *) absolute
+ * WC path to (svn_mergeinfo_t *) mergeinfo.
+ *
+ * ### Is this function equivalent to:
+ *
+ * svn_client__get_wc_mergeinfo_catalog(
+ * subtrees_with_mergeinfo, inherited=NULL, include_descendants=TRUE,
+ * svn_mergeinfo_explicit, target_abspath, limit_path=NULL,
+ * walked_path=NULL, ignore_invalid_mergeinfo=FALSE, ...)
+ *
+ * except for the catalog keys being abspaths instead of repo-relpaths?
+ */
+static svn_error_t *
+get_wc_explicit_mergeinfo_catalog(apr_hash_t **subtrees_with_mergeinfo,
+ const char *target_abspath,
+ svn_depth_t depth,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_opt_revision_t working_revision = { svn_opt_revision_working, { 0 } };
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ apr_hash_index_t *hi;
+ apr_hash_t *externals;
+
+ SVN_ERR(svn_client_propget5(subtrees_with_mergeinfo, NULL,
+ SVN_PROP_MERGEINFO, target_abspath,
+ &working_revision, &working_revision, NULL,
+ depth, NULL, ctx, result_pool, scratch_pool));
+
+ SVN_ERR(svn_wc__externals_defined_below(&externals, ctx->wc_ctx,
+ target_abspath, scratch_pool,
+ scratch_pool));
+
+ /* Convert property values to svn_mergeinfo_t. */
+ for (hi = apr_hash_first(scratch_pool, *subtrees_with_mergeinfo);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ const char *wc_path = svn__apr_hash_index_key(hi);
+ svn_string_t *mergeinfo_string = svn__apr_hash_index_val(hi);
+ svn_mergeinfo_t mergeinfo;
+ svn_error_t *err;
+
+ /* svn_client_propget5 picks up file externals with
+ mergeinfo, but we don't want those. */
+ if (svn_hash_gets(externals, wc_path))
+ {
+ svn_hash_sets(*subtrees_with_mergeinfo, wc_path, NULL);
+ continue;
+ }
+
+ svn_pool_clear(iterpool);
+
+ err = svn_mergeinfo_parse(&mergeinfo, mergeinfo_string->data,
+ result_pool);
+ if (err)
+ {
+ if (err->apr_err == SVN_ERR_MERGEINFO_PARSE_ERROR)
+ {
+ err = svn_error_createf(
+ SVN_ERR_CLIENT_INVALID_MERGEINFO_NO_MERGETRACKING, err,
+ _("Invalid mergeinfo detected on '%s', "
+ "merge tracking not possible"),
+ svn_dirent_local_style(wc_path, scratch_pool));
+ }
+ return svn_error_trace(err);
+ }
+ svn_hash_sets(*subtrees_with_mergeinfo, wc_path, mergeinfo);
}
+ svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
@@ -5494,18 +6285,18 @@ pre_merge_status_cb(void *baton,
/* Helper for do_directory_merge() when performing merge-tracking aware
merges.
- Walk of the working copy tree rooted at MERGE_CMD_BATON->TARGET_ABSPATH to
+ Walk of the working copy tree rooted at TARGET->abspath to
depth DEPTH. Create an svn_client__merge_path_t * for any path which meets
one or more of the following criteria:
1) Path has working svn:mergeinfo.
2) Path is switched.
3) Path is a subtree of the merge target (i.e. is not equal to
- MERGE_CMD_BATON->TARGET_ABSPATH) and has no mergeinfo of its own but
- its parent has mergeinfo with non-inheritable ranges. If this isn't a
- dry-run and the merge is between differences in the same repository,
- then this function will set working mergeinfo on the path equal to
- the mergeinfo inheritable from its parent.
+ TARGET->abspath) and has no mergeinfo of its own but
+ its immediate parent has mergeinfo with non-inheritable ranges. If
+ this isn't a dry-run and the merge is between differences in the same
+ repository, then this function will set working mergeinfo on the path
+ equal to the mergeinfo inheritable from its parent.
4) Path has an immediate child (or children) missing from the WC because
the child is switched or absent from the WC, or due to a sparse
checkout.
@@ -5513,10 +6304,10 @@ pre_merge_status_cb(void *baton,
sibling is switched, absent, scheduled for deletion, or missing due to
a sparse checkout.
6) Path is absent from disk due to an authz restriction.
- 7) Path is equal to MERGE_CMD_BATON->TARGET_ABSPATH.
+ 7) Path is equal to TARGET->abspath.
8) Path is an immediate *directory* child of
- MERGE_CMD_BATON->TARGET_ABSPATH and DEPTH is svn_depth_immediates.
- 9) Path is an immediate *file* child of MERGE_CMD_BATON->TARGET_ABSPATH
+ TARGET->abspath and DEPTH is svn_depth_immediates.
+ 9) Path is an immediate *file* child of TARGET->abspath
and DEPTH is svn_depth_files.
10) Path is at a depth of 'empty' or 'files'.
11) Path is missing from disk (e.g. due to an OS-level deletion).
@@ -5529,98 +6320,64 @@ pre_merge_status_cb(void *baton,
sorted by svn_path_compare_paths(). Set the remaining_ranges field of each
element to NULL.
- Note: Since the walk is rooted at MERGE_CMD_BATON->TARGET_ABSPATH, the
+ Note: Since the walk is rooted at TARGET->abspath, the
latter is guaranteed to be in *CHILDREN_WITH_MERGEINFO and due to the
depth-first ordering it is guaranteed to be the first element in
*CHILDREN_WITH_MERGEINFO.
- MERGE_COMMAND_BATON, URL1, URL2, REVISION1, and REVISION2 are
- cascaded from the arguments of the same name in do_directory_merge().
-
- RA_SESSION is the session for, and SOURCE_ROOT_URL is the repository root
- for, the younger of URL1@REVISION1 and URL2@REVISION2.
-
- MERGE_SRC_CANON_PATH is the path of of the younger of URL1@REVISION1 and
- URL2@REVISION2, relative to SOURCE_ROOT_URL (with a leading '/').
+ MERGE_CMD_BATON is cascaded from the argument of the same name in
+ do_directory_merge().
*/
static svn_error_t *
get_mergeinfo_paths(apr_array_header_t *children_with_mergeinfo,
- merge_cmd_baton_t *merge_cmd_baton,
- const char* merge_src_canon_path,
- const char *source_root_url,
- const char *url1,
- const char *url2,
- svn_revnum_t revision1,
- svn_revnum_t revision2,
- svn_ra_session_t *ra_session,
+ const merge_target_t *target,
svn_depth_t depth,
+ svn_boolean_t dry_run,
+ svn_boolean_t same_repos,
+ svn_client_ctx_t *ctx,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
int i;
- apr_pool_t *iterpool = NULL;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
apr_hash_t *subtrees_with_mergeinfo;
- apr_hash_t *server_excluded_subtrees;
+ apr_hash_t *excluded_subtrees;
apr_hash_t *switched_subtrees;
apr_hash_t *shallow_subtrees;
apr_hash_t *missing_subtrees;
struct pre_merge_status_baton_t pre_merge_status_baton;
- svn_opt_revision_t working_revision;
-
- working_revision.kind = svn_opt_revision_working;
/* Case 1: Subtrees with explicit mergeinfo. */
- SVN_ERR(svn_client_propget4(&subtrees_with_mergeinfo, SVN_PROP_MERGEINFO,
- merge_cmd_baton->target_abspath,
- &working_revision,
- &working_revision, NULL, depth, NULL,
- merge_cmd_baton->ctx, scratch_pool,
- scratch_pool));
-
+ SVN_ERR(get_wc_explicit_mergeinfo_catalog(&subtrees_with_mergeinfo,
+ target->abspath,
+ depth, ctx,
+ result_pool, scratch_pool));
if (subtrees_with_mergeinfo)
{
apr_hash_index_t *hi;
- if (!iterpool)
- iterpool = svn_pool_create(scratch_pool);
-
for (hi = apr_hash_first(scratch_pool, subtrees_with_mergeinfo);
hi;
hi = apr_hash_next(hi))
{
- svn_error_t *err;
- svn_mergeinfo_t child_pre_merge_mergeinfo;
const char *wc_path = svn__apr_hash_index_key(hi);
- svn_string_t *mergeinfo_string = svn__apr_hash_index_val(hi);
+ svn_mergeinfo_t mergeinfo = svn__apr_hash_index_val(hi);
svn_client__merge_path_t *mergeinfo_child =
- apr_pcalloc(result_pool, sizeof(*mergeinfo_child));
+ svn_client__merge_path_create(wc_path, result_pool);
svn_pool_clear(iterpool);
- mergeinfo_child->abspath = apr_pstrdup(result_pool, wc_path);
- err = svn_mergeinfo_parse(&child_pre_merge_mergeinfo,
- mergeinfo_string->data, result_pool);
- if (err)
- {
- if (err->apr_err == SVN_ERR_MERGEINFO_PARSE_ERROR)
- {
- err = svn_error_createf(
- SVN_ERR_CLIENT_INVALID_MERGEINFO_NO_MERGETRACKING, err,
- _("Invalid mergeinfo detected on '%s', "
- "mergetracking not possible"),
- svn_dirent_local_style(wc_path, scratch_pool));
- }
- return svn_error_trace(err);
- }
+
/* Stash this child's pre-existing mergeinfo. */
- mergeinfo_child->pre_merge_mergeinfo = child_pre_merge_mergeinfo;
+ mergeinfo_child->pre_merge_mergeinfo = mergeinfo;
/* Note if this child has non-inheritable mergeinfo */
- SVN_ERR(svn_mergeinfo__string_has_noninheritable(
- &(mergeinfo_child->has_noninheritable), mergeinfo_string->data,
- iterpool));
+ mergeinfo_child->has_noninheritable
+ = svn_mergeinfo__is_noninheritable(
+ mergeinfo_child->pre_merge_mergeinfo, iterpool);
- insert_child_to_merge(children_with_mergeinfo, mergeinfo_child,
- result_pool);
+ /* Append it. We'll sort below. */
+ APR_ARRAY_PUSH(children_with_mergeinfo, svn_client__merge_path_t *)
+ = svn_client__merge_path_dup(mergeinfo_child, result_pool);
}
/* Sort CHILDREN_WITH_MERGEINFO by each child's path (i.e. as per
@@ -5635,7 +6392,7 @@ get_mergeinfo_paths(apr_array_header_t *children_with_mergeinfo,
/* Case 2: Switched subtrees
Case 10: Paths at depths of 'empty' or 'files'
Case 11: Paths missing from disk */
- pre_merge_status_baton.wc_ctx = merge_cmd_baton->ctx->wc_ctx;
+ pre_merge_status_baton.wc_ctx = ctx->wc_ctx;
switched_subtrees = apr_hash_make(scratch_pool);
pre_merge_status_baton.switched_subtrees = switched_subtrees;
shallow_subtrees = apr_hash_make(scratch_pool);
@@ -5643,13 +6400,15 @@ get_mergeinfo_paths(apr_array_header_t *children_with_mergeinfo,
missing_subtrees = apr_hash_make(scratch_pool);
pre_merge_status_baton.missing_subtrees = missing_subtrees;
pre_merge_status_baton.pool = scratch_pool;
- SVN_ERR(svn_wc_walk_status(merge_cmd_baton->ctx->wc_ctx,
- merge_cmd_baton->target_abspath,
- depth, TRUE, TRUE, TRUE, NULL,
- pre_merge_status_cb,
- &pre_merge_status_baton,
- merge_cmd_baton->ctx->cancel_func,
- merge_cmd_baton->ctx->cancel_baton,
+ SVN_ERR(svn_wc_walk_status(ctx->wc_ctx,
+ target->abspath,
+ depth,
+ TRUE /* get_all */,
+ FALSE /* no_ignore */,
+ TRUE /* ignore_text_mods */,
+ NULL /* ingore_patterns */,
+ pre_merge_status_cb, &pre_merge_status_baton,
+ ctx->cancel_func, ctx->cancel_baton,
scratch_pool));
/* Issue #2915: Raise an error describing the roots of any missing
@@ -5663,8 +6422,6 @@ get_mergeinfo_paths(apr_array_header_t *children_with_mergeinfo,
"subtrees; try restoring these items "
"first:\n"), scratch_pool);
- iterpool = svn_pool_create(scratch_pool);
-
for (hi = apr_hash_first(scratch_pool, missing_subtrees);
hi;
hi = apr_hash_next(hi))
@@ -5699,8 +6456,7 @@ get_mergeinfo_paths(apr_array_header_t *children_with_mergeinfo,
else
{
svn_client__merge_path_t *switched_child =
- apr_pcalloc(result_pool, sizeof(*switched_child));
- switched_child->abspath = apr_pstrdup(result_pool, wc_path);
+ svn_client__merge_path_create(wc_path, result_pool);
switched_child->switched = TRUE;
insert_child_to_merge(children_with_mergeinfo, switched_child,
result_pool);
@@ -5730,10 +6486,9 @@ get_mergeinfo_paths(apr_array_header_t *children_with_mergeinfo,
}
else
{
- shallow_child = apr_pcalloc(result_pool,
- sizeof(*shallow_child));
+ shallow_child = svn_client__merge_path_create(wc_path,
+ result_pool);
new_shallow_child = TRUE;
- shallow_child->abspath = apr_pstrdup(result_pool, wc_path);
if (*child_depth == svn_depth_empty
|| *child_depth == svn_depth_files)
@@ -5761,16 +6516,15 @@ get_mergeinfo_paths(apr_array_header_t *children_with_mergeinfo,
}
}
- /* Case 6: Paths absent from disk due to server-side exclusion. */
- SVN_ERR(svn_wc__get_server_excluded_subtrees(&server_excluded_subtrees,
- merge_cmd_baton->ctx->wc_ctx,
- merge_cmd_baton->target_abspath,
- result_pool, scratch_pool));
- if (server_excluded_subtrees)
+ /* Case 6: Paths absent from disk due to server or user exclusion. */
+ SVN_ERR(svn_wc__get_excluded_subtrees(&excluded_subtrees,
+ ctx->wc_ctx, target->abspath,
+ result_pool, scratch_pool));
+ if (excluded_subtrees)
{
apr_hash_index_t *hi;
- for (hi = apr_hash_first(scratch_pool, server_excluded_subtrees);
+ for (hi = apr_hash_first(scratch_pool, excluded_subtrees);
hi;
hi = apr_hash_next(hi))
{
@@ -5785,8 +6539,7 @@ get_mergeinfo_paths(apr_array_header_t *children_with_mergeinfo,
else
{
svn_client__merge_path_t *absent_child =
- apr_pcalloc(result_pool, sizeof(*absent_child));
- absent_child->abspath = apr_pstrdup(result_pool, wc_path);
+ svn_client__merge_path_create(wc_path, result_pool);
absent_child->absent = TRUE;
insert_child_to_merge(children_with_mergeinfo, absent_child,
result_pool);
@@ -5794,35 +6547,31 @@ get_mergeinfo_paths(apr_array_header_t *children_with_mergeinfo,
}
}
- /* Case 7: The merge target MERGE_CMD_BATON->TARGET_ABSPATH is always
+ /* Case 7: The merge target MERGE_CMD_BATON->target->abspath is always
present. */
if (!get_child_with_mergeinfo(children_with_mergeinfo,
- merge_cmd_baton->target_abspath))
+ target->abspath))
{
svn_client__merge_path_t *target_child =
- apr_pcalloc(result_pool, sizeof(*target_child));
- target_child->abspath = apr_pstrdup(result_pool,
- merge_cmd_baton->target_abspath);
+ svn_client__merge_path_create(target->abspath,
+ result_pool);
insert_child_to_merge(children_with_mergeinfo, target_child,
result_pool);
}
/* Case 8: Path is an immediate *directory* child of
- MERGE_CMD_BATON->TARGET_ABSPATH and DEPTH is svn_depth_immediates.
+ MERGE_CMD_BATON->target->abspath and DEPTH is svn_depth_immediates.
Case 9: Path is an immediate *file* child of
- MERGE_CMD_BATON->TARGET_ABSPATH and DEPTH is svn_depth_files. */
+ MERGE_CMD_BATON->target->abspath and DEPTH is svn_depth_files. */
if (depth == svn_depth_immediates || depth == svn_depth_files)
{
int j;
const apr_array_header_t *immediate_children;
SVN_ERR(svn_wc__node_get_children_of_working_node(
- &immediate_children, merge_cmd_baton->ctx->wc_ctx,
- merge_cmd_baton->target_abspath, FALSE, scratch_pool, scratch_pool));
-
- if (!iterpool)
- iterpool = svn_pool_create(scratch_pool);
+ &immediate_children, ctx->wc_ctx,
+ target->abspath, FALSE, scratch_pool, scratch_pool));
for (j = 0; j < immediate_children->nelts; j++)
{
@@ -5831,10 +6580,9 @@ get_mergeinfo_paths(apr_array_header_t *children_with_mergeinfo,
svn_node_kind_t immediate_child_kind;
svn_pool_clear(iterpool);
- SVN_ERR(svn_wc_read_kind(&immediate_child_kind,
- merge_cmd_baton->ctx->wc_ctx,
- immediate_child_abspath, FALSE,
- iterpool));
+ SVN_ERR(svn_wc_read_kind2(&immediate_child_kind,
+ ctx->wc_ctx, immediate_child_abspath,
+ FALSE, FALSE, iterpool));
if ((immediate_child_kind == svn_node_dir
&& depth == svn_depth_immediates)
|| (immediate_child_kind == svn_node_file
@@ -5844,10 +6592,8 @@ get_mergeinfo_paths(apr_array_header_t *children_with_mergeinfo,
immediate_child_abspath))
{
svn_client__merge_path_t *immediate_child =
- apr_pcalloc(result_pool, sizeof(*immediate_child));
-
- immediate_child->abspath =
- apr_pstrdup(result_pool, immediate_child_abspath);
+ svn_client__merge_path_create(immediate_child_abspath,
+ result_pool);
if (immediate_child_kind == svn_node_dir
&& depth == svn_depth_immediates)
@@ -5865,7 +6611,6 @@ get_mergeinfo_paths(apr_array_header_t *children_with_mergeinfo,
if (depth <= svn_depth_empty)
return SVN_NO_ERROR;
- iterpool = svn_pool_create(scratch_pool);
for (i = 0; i < children_with_mergeinfo->nelts; i++)
{
svn_client__merge_path_t *child =
@@ -5901,13 +6646,17 @@ get_mergeinfo_paths(apr_array_header_t *children_with_mergeinfo,
so it has explicit mergeinfo that reflects only CHILD's
inheritable mergeinfo. */
- if (child->has_noninheritable)
+ /* If depth is immediates or files then don't add new children if
+ CHILD is a subtree of the merge target; those children are below
+ the operational depth of the merge. */
+ if (child->has_noninheritable
+ && (i == 0 || depth == svn_depth_infinity))
{
const apr_array_header_t *children;
int j;
SVN_ERR(svn_wc__node_get_children(&children,
- merge_cmd_baton->ctx->wc_ctx,
+ ctx->wc_ctx,
child->abspath, FALSE,
iterpool, iterpool));
for (j = 0; j < children->nelts; j++)
@@ -5930,10 +6679,9 @@ get_mergeinfo_paths(apr_array_header_t *children_with_mergeinfo,
if (depth == svn_depth_files)
{
svn_node_kind_t child_kind;
- SVN_ERR(svn_wc_read_kind(&child_kind,
- merge_cmd_baton->ctx->wc_ctx,
- child_abspath, FALSE,
- iterpool));
+ SVN_ERR(svn_wc_read_kind2(&child_kind,
+ ctx->wc_ctx, child_abspath,
+ FALSE, FALSE, iterpool));
if (child_kind != svn_node_file)
continue;
}
@@ -5941,39 +6689,33 @@ get_mergeinfo_paths(apr_array_header_t *children_with_mergeinfo,
directory and file children. */
child_of_noninheritable =
- apr_pcalloc(result_pool,
- sizeof(*child_of_noninheritable));
+ svn_client__merge_path_create(child_abspath, result_pool);
child_of_noninheritable->child_of_noninheritable = TRUE;
- child_of_noninheritable->abspath =
- apr_pstrdup(result_pool,
- child_abspath);
insert_child_to_merge(children_with_mergeinfo,
child_of_noninheritable,
result_pool);
- if (!merge_cmd_baton->dry_run
- && merge_cmd_baton->same_repos)
+ if (!dry_run && same_repos)
{
- svn_boolean_t inherited;
svn_mergeinfo_t mergeinfo;
SVN_ERR(svn_client__get_wc_mergeinfo(
- &mergeinfo, &inherited,
+ &mergeinfo, NULL,
svn_mergeinfo_nearest_ancestor,
child_of_noninheritable->abspath,
- merge_cmd_baton->target_abspath, NULL, FALSE,
- merge_cmd_baton->ctx, iterpool, iterpool));
+ target->abspath, NULL, FALSE,
+ ctx, iterpool, iterpool));
SVN_ERR(svn_client__record_wc_mergeinfo(
child_of_noninheritable->abspath, mergeinfo,
- FALSE, merge_cmd_baton->ctx, iterpool));
+ FALSE, ctx, iterpool));
}
}
}
}
/* Case 4 and 5 are handled by the following function. */
SVN_ERR(insert_parent_and_sibs_of_sw_absent_del_subtree(
- children_with_mergeinfo, merge_cmd_baton, &i, child,
- depth, result_pool));
+ children_with_mergeinfo, target, &i, child,
+ depth, ctx, result_pool));
} /* i < children_with_mergeinfo->nelts */
svn_pool_destroy(iterpool);
@@ -5983,24 +6725,82 @@ get_mergeinfo_paths(apr_array_header_t *children_with_mergeinfo,
/* Implements the svn_log_entry_receiver_t interface.
*
- * BATON is an 'apr_array_header_t *'. Copy LOG_ENTRY->revision (in
- * BATON's pool, not POOL) and push the copy onto BATON. Thus, a
+ * BATON is an 'apr_array_header_t *' array of 'svn_revnum_t'.
+ * Push a copy of LOG_ENTRY->revision onto BATON. Thus, a
* series of invocations of this callback accumulates the
* corresponding set of revisions into BATON.
*/
static svn_error_t *
log_changed_revs(void *baton,
- svn_log_entry_t *log_entry,
- apr_pool_t *pool)
+ svn_log_entry_t *log_entry,
+ apr_pool_t *pool)
{
apr_array_header_t *revs = baton;
- svn_revnum_t *revision = apr_palloc(revs->pool, sizeof(*revision));
- *revision = log_entry->revision;
- APR_ARRAY_PUSH(revs, svn_revnum_t *) = revision;
+
+ APR_ARRAY_PUSH(revs, svn_revnum_t) = log_entry->revision;
return SVN_NO_ERROR;
}
+/* Set *MIN_REV_P to the oldest and *MAX_REV_P to the youngest start or end
+ * revision occurring in RANGELIST, or to SVN_INVALID_REVNUM if RANGELIST
+ * is empty. */
+static void
+merge_range_find_extremes(svn_revnum_t *min_rev_p,
+ svn_revnum_t *max_rev_p,
+ const svn_rangelist_t *rangelist)
+{
+ int i;
+
+ *min_rev_p = SVN_INVALID_REVNUM;
+ *max_rev_p = SVN_INVALID_REVNUM;
+ for (i = 0; i < rangelist->nelts; i++)
+ {
+ svn_merge_range_t *range
+ = APR_ARRAY_IDX(rangelist, i, svn_merge_range_t *);
+ svn_revnum_t range_min = MIN(range->start, range->end);
+ svn_revnum_t range_max = MAX(range->start, range->end);
+
+ if ((! SVN_IS_VALID_REVNUM(*min_rev_p)) || (range_min < *min_rev_p))
+ *min_rev_p = range_min;
+ if ((! SVN_IS_VALID_REVNUM(*max_rev_p)) || (range_max > *max_rev_p))
+ *max_rev_p = range_max;
+ }
+}
+
+/* Wrapper around svn_ra_get_log2(). Invoke RECEIVER with RECEIVER_BATON
+ * on each commit from YOUNGEST_REV to OLDEST_REV in which TARGET_RELPATH
+ * changed. TARGET_RELPATH is relative to RA_SESSION's URL.
+ * Important: Revision properties are not retrieved by this function for
+ * performance reasons.
+ */
+static svn_error_t *
+get_log(svn_ra_session_t *ra_session,
+ const char *target_relpath,
+ svn_revnum_t youngest_rev,
+ svn_revnum_t oldest_rev,
+ svn_boolean_t discover_changed_paths,
+ svn_log_entry_receiver_t receiver,
+ void *receiver_baton,
+ apr_pool_t *pool)
+{
+ apr_array_header_t *log_targets;
+ apr_array_header_t *revprops;
+
+ log_targets = apr_array_make(pool, 1, sizeof(const char *));
+ APR_ARRAY_PUSH(log_targets, const char *) = target_relpath;
+
+ revprops = apr_array_make(pool, 0, sizeof(const char *));
+
+ SVN_ERR(svn_ra_get_log2(ra_session, log_targets, youngest_rev,
+ oldest_rev, 0 /* limit */, discover_changed_paths,
+ FALSE /* strict_node_history */,
+ FALSE /* include_merged_revisions */,
+ revprops, receiver, receiver_baton, pool));
+
+ return SVN_NO_ERROR;
+}
+
/* Set *OPERATIVE_RANGES_P to an array of svn_merge_range_t * merge
range objects copied wholesale from RANGES which have the property
that in some revision within that range the object identified by
@@ -6014,54 +6814,37 @@ log_changed_revs(void *baton,
Use POOL for temporary allocations. */
static svn_error_t *
-remove_noop_merge_ranges(apr_array_header_t **operative_ranges_p,
+remove_noop_merge_ranges(svn_rangelist_t **operative_ranges_p,
svn_ra_session_t *ra_session,
- const apr_array_header_t *ranges,
+ const svn_rangelist_t *ranges,
apr_pool_t *pool)
{
int i;
- svn_revnum_t oldest_rev = SVN_INVALID_REVNUM;
- svn_revnum_t youngest_rev = SVN_INVALID_REVNUM;
+ svn_revnum_t oldest_rev, youngest_rev;
apr_array_header_t *changed_revs =
- apr_array_make(pool, ranges->nelts, sizeof(svn_revnum_t *));
- apr_array_header_t *operative_ranges =
+ apr_array_make(pool, ranges->nelts, sizeof(svn_revnum_t));
+ svn_rangelist_t *operative_ranges =
apr_array_make(ranges->pool, ranges->nelts, ranges->elt_size);
- apr_array_header_t *log_targets =
- apr_array_make(pool, 1, sizeof(const char *));
- APR_ARRAY_PUSH(log_targets, const char *) = "";
/* Find the revision extremes of the RANGES we have. */
- for (i = 0; i < ranges->nelts; i++)
- {
- svn_merge_range_t *r = APR_ARRAY_IDX(ranges, i, svn_merge_range_t *);
- svn_revnum_t max_rev = MAX(r->start, r->end);
- svn_revnum_t min_rev = MIN(r->start, r->end) + 1;
-
- if ((! SVN_IS_VALID_REVNUM(youngest_rev)) || (max_rev > youngest_rev))
- youngest_rev = max_rev;
- if ((! SVN_IS_VALID_REVNUM(oldest_rev)) || (min_rev < oldest_rev))
- oldest_rev = min_rev;
- }
+ merge_range_find_extremes(&oldest_rev, &youngest_rev, ranges);
+ if (SVN_IS_VALID_REVNUM(oldest_rev))
+ oldest_rev++; /* make it inclusive */
/* Get logs across those ranges, recording which revisions hold
changes to our object's history. */
- SVN_ERR(svn_ra_get_log2(ra_session, log_targets, youngest_rev,
- oldest_rev, 0, FALSE, FALSE, FALSE,
- apr_array_make(pool, 0, sizeof(const char *)),
- log_changed_revs, changed_revs, pool));
+ SVN_ERR(get_log(ra_session, "", youngest_rev, oldest_rev, FALSE,
+ log_changed_revs, changed_revs, pool));
/* Are there *any* changes? */
if (changed_revs->nelts)
{
- svn_revnum_t oldest_changed_rev, youngest_changed_rev;
-
/* Our list of changed revisions should be in youngest-to-oldest
order. */
- youngest_changed_rev = *(APR_ARRAY_IDX(changed_revs,
- 0, svn_revnum_t *));
- oldest_changed_rev = *(APR_ARRAY_IDX(changed_revs,
- changed_revs->nelts - 1,
- svn_revnum_t *));
+ svn_revnum_t youngest_changed_rev
+ = APR_ARRAY_IDX(changed_revs, 0, svn_revnum_t);
+ svn_revnum_t oldest_changed_rev
+ = APR_ARRAY_IDX(changed_revs, changed_revs->nelts - 1, svn_revnum_t);
/* Now, copy from RANGES to *OPERATIVE_RANGES, filtering out ranges
that aren't operative (by virtue of not having any revisions
@@ -6084,9 +6867,9 @@ remove_noop_merge_ranges(apr_array_header_t **operative_ranges_p,
inside our current range. */
for (j = 0; j < changed_revs->nelts; j++)
{
- svn_revnum_t *changed_rev =
- APR_ARRAY_IDX(changed_revs, j, svn_revnum_t *);
- if ((*changed_rev >= range_min) && (*changed_rev <= range_max))
+ svn_revnum_t changed_rev
+ = APR_ARRAY_IDX(changed_revs, j, svn_revnum_t);
+ if ((changed_rev >= range_min) && (changed_rev <= range_max))
{
APR_ARRAY_PUSH(operative_ranges, svn_merge_range_t *) =
range;
@@ -6106,14 +6889,14 @@ remove_noop_merge_ranges(apr_array_header_t **operative_ranges_p,
/*** Merge Source Normalization ***/
/* qsort-compatible sort routine, rating merge_source_t * objects to
- be in descending (youngest-to-oldest) order based on their ->rev1
+ be in descending (youngest-to-oldest) order based on their ->loc1->rev
component. */
static int
compare_merge_source_ts(const void *a,
const void *b)
{
- svn_revnum_t a_rev = (*(const merge_source_t *const *)a)->rev1;
- svn_revnum_t b_rev = (*(const merge_source_t *const *)b)->rev1;
+ svn_revnum_t a_rev = (*(const merge_source_t *const *)a)->loc1->rev;
+ svn_revnum_t b_rev = (*(const merge_source_t *const *)b)->loc1->rev;
if (a_rev == b_rev)
return 0;
return a_rev < b_rev ? 1 : -1;
@@ -6121,15 +6904,15 @@ compare_merge_source_ts(const void *a,
/* Set *MERGE_SOURCE_TS_P to a list of merge sources generated by
slicing history location SEGMENTS with a given requested merge
- RANGE. Use SOURCE_ROOT_URL for full source URL calculation.
+ RANGE. Use SOURCE_LOC for full source URL calculation.
Order the merge sources in *MERGE_SOURCE_TS_P from oldest to
youngest. */
static svn_error_t *
combine_range_with_segments(apr_array_header_t **merge_source_ts_p,
- svn_merge_range_t *range,
+ const svn_merge_range_t *range,
const apr_array_header_t *segments,
- const char *source_root_url,
+ const svn_client__pathrev_t *source_loc,
apr_pool_t *pool)
{
apr_array_header_t *merge_source_ts =
@@ -6143,6 +6926,7 @@ combine_range_with_segments(apr_array_header_t **merge_source_ts_p,
{
svn_location_segment_t *segment =
APR_ARRAY_IDX(segments, i, svn_location_segment_t *);
+ svn_client__pathrev_t *loc1, *loc2;
merge_source_t *merge_source;
const char *path1 = NULL;
svn_revnum_t rev1;
@@ -6190,26 +6974,19 @@ combine_range_with_segments(apr_array_header_t **merge_source_ts_p,
continue;
/* Build our merge source structure. */
- merge_source = apr_pcalloc(pool, sizeof(*merge_source));
- merge_source->url1 = svn_path_url_add_component2(source_root_url,
- path1,
- pool);
- merge_source->url2 = svn_path_url_add_component2(source_root_url,
- segment->path,
- pool);
- merge_source->rev1 = rev1;
- merge_source->rev2 = MIN(segment->range_end, maxrev);
-
+ loc1 = svn_client__pathrev_create_with_relpath(
+ source_loc->repos_root_url, source_loc->repos_uuid,
+ rev1, path1, pool);
+ loc2 = svn_client__pathrev_create_with_relpath(
+ source_loc->repos_root_url, source_loc->repos_uuid,
+ MIN(segment->range_end, maxrev), segment->path, pool);
/* If this is subtractive, reverse the whole calculation. */
if (subtractive)
- {
- svn_revnum_t tmprev = merge_source->rev1;
- const char *tmpurl = merge_source->url1;
- merge_source->rev1 = merge_source->rev2;
- merge_source->url1 = merge_source->url2;
- merge_source->rev2 = tmprev;
- merge_source->url2 = tmpurl;
- }
+ merge_source = merge_source_create(loc2, loc1, TRUE /* ancestral */,
+ pool);
+ else
+ merge_source = merge_source_create(loc1, loc2, TRUE /* ancestral */,
+ pool);
APR_ARRAY_PUSH(merge_source_ts, merge_source_t *) = merge_source;
}
@@ -6224,173 +7001,55 @@ combine_range_with_segments(apr_array_header_t **merge_source_ts_p,
return SVN_NO_ERROR;
}
-/* Set *MERGE_SOURCES_P to an array of merge_source_t * objects, each
- holding the paths and revisions needed to fully describe a range of
- requested merges; order the objects from oldest to youngest.
-
- Determine the requested merges by examining SOURCE (and its
- associated URL, SOURCE_URL) and PEG_REVISION (which specifies the
- line of history from which merges will be pulled) and
- RANGES_TO_MERGE (a list of svn_opt_revision_range_t's which provide
- revision ranges). Note that SOURCE may itself be either a working
- copy path or a URL; in the latter case, SOURCE_URL is probably
- identical to SOURCE.
-
- If PEG_REVISION is unspecified, treat that it as HEAD.
-
- SOURCE_ROOT_URL is the root URL of the source repository.
-
- Use RA_SESSION -- whose session URL matches SOURCE_URL -- to answer
- historical questions.
-
- CTX is a client context baton.
-
- SCRATCH_POOL is used for all temporary allocations. MERGE_SOURCES_P and
- its contents are allocated in RESULT_POOL.
-
- See `MERGEINFO MERGE SOURCE NORMALIZATION' for more on the
- background of this function.
-*/
+/* Similar to normalize_merge_sources() except the input MERGE_RANGE_TS is a
+ * rangelist.
+ */
static svn_error_t *
-normalize_merge_sources(apr_array_header_t **merge_sources_p,
- const char *source,
- const char *source_url,
- const char *source_root_url,
- const svn_opt_revision_t *peg_revision,
- const apr_array_header_t *ranges_to_merge,
- svn_ra_session_t *ra_session,
- svn_client_ctx_t *ctx,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+normalize_merge_sources_internal(apr_array_header_t **merge_sources_p,
+ const svn_client__pathrev_t *source_loc,
+ const svn_rangelist_t *merge_range_ts,
+ svn_ra_session_t *ra_session,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- svn_revnum_t youngest_rev = SVN_INVALID_REVNUM;
- svn_revnum_t peg_revnum;
- svn_revnum_t oldest_requested = SVN_INVALID_REVNUM;
- svn_revnum_t youngest_requested = SVN_INVALID_REVNUM;
+ svn_revnum_t source_peg_revnum = source_loc->rev;
+ svn_revnum_t oldest_requested, youngest_requested;
svn_revnum_t trim_revision = SVN_INVALID_REVNUM;
- apr_array_header_t *merge_range_ts, *segments;
- const char *source_abspath_or_url;
+ apr_array_header_t *segments;
int i;
- apr_pool_t *iterpool = svn_pool_create(scratch_pool);
-
- if(!svn_path_is_url(source))
- SVN_ERR(svn_dirent_get_absolute(&source_abspath_or_url, source,
- scratch_pool));
- else
- source_abspath_or_url = source;
/* Initialize our return variable. */
*merge_sources_p = apr_array_make(result_pool, 1, sizeof(merge_source_t *));
- /* Resolve our PEG_REVISION to a real number. */
- SVN_ERR(svn_client__get_revision_number(&peg_revnum, &youngest_rev,
- ctx->wc_ctx,
- source_abspath_or_url,
- ra_session, peg_revision,
- iterpool));
- if (! SVN_IS_VALID_REVNUM(peg_revnum))
- return svn_error_create(SVN_ERR_CLIENT_BAD_REVISION, NULL, NULL);
-
- /* Create a list to hold svn_merge_range_t's. */
- merge_range_ts = apr_array_make(scratch_pool, ranges_to_merge->nelts,
- sizeof(svn_merge_range_t *));
-
- for (i = 0; i < ranges_to_merge->nelts; i++)
- {
- svn_revnum_t range_start_rev, range_end_rev;
- svn_opt_revision_t *range_start =
- &((APR_ARRAY_IDX(ranges_to_merge, i,
- svn_opt_revision_range_t *))->start);
- svn_opt_revision_t *range_end =
- &((APR_ARRAY_IDX(ranges_to_merge, i,
- svn_opt_revision_range_t *))->end);
-
- svn_pool_clear(iterpool);
-
- /* Resolve revisions to real numbers, validating as we go. */
- if ((range_start->kind == svn_opt_revision_unspecified)
- || (range_end->kind == svn_opt_revision_unspecified))
- return svn_error_create(SVN_ERR_CLIENT_BAD_REVISION, NULL,
- _("Not all required revisions are specified"));
-
- SVN_ERR(svn_client__get_revision_number(&range_start_rev, &youngest_rev,
- ctx->wc_ctx,
- source_abspath_or_url,
- ra_session, range_start,
- iterpool));
- SVN_ERR(svn_client__get_revision_number(&range_end_rev, &youngest_rev,
- ctx->wc_ctx,
- source_abspath_or_url,
- ra_session, range_end,
- iterpool));
-
- /* If this isn't a no-op range... */
- if (range_start_rev != range_end_rev)
- {
- /* ...then create an svn_merge_range_t object for it. */
- svn_merge_range_t *range = apr_pcalloc(scratch_pool,
- sizeof(*range));
- range->start = range_start_rev;
- range->end = range_end_rev;
- range->inheritable = TRUE;
-
- /* Add our merge range to our list thereof. */
- APR_ARRAY_PUSH(merge_range_ts, svn_merge_range_t *) = range;
- }
- }
-
/* No ranges to merge? No problem. */
if (merge_range_ts->nelts == 0)
- {
- svn_pool_destroy(iterpool);
- return SVN_NO_ERROR;
- }
+ return SVN_NO_ERROR;
/* Find the extremes of the revisions across our set of ranges. */
- for (i = 0; i < merge_range_ts->nelts; i++)
- {
- svn_merge_range_t *range =
- APR_ARRAY_IDX(merge_range_ts, i, svn_merge_range_t *);
- svn_revnum_t minrev = MIN(range->start, range->end);
- svn_revnum_t maxrev = MAX(range->start, range->end);
-
- /* Keep a running tally of the oldest and youngest requested
- revisions. */
- if ((! SVN_IS_VALID_REVNUM(oldest_requested))
- || (minrev < oldest_requested))
- oldest_requested = minrev;
- if ((! SVN_IS_VALID_REVNUM(youngest_requested))
- || (maxrev > youngest_requested))
- youngest_requested = maxrev;
- }
+ merge_range_find_extremes(&oldest_requested, &youngest_requested,
+ merge_range_ts);
/* ### FIXME: Our underlying APIs can't yet handle the case where
the peg revision isn't the youngest of the three revisions. So
we'll just verify that the source in the peg revision is related
- to the the source in the youngest requested revision (which is
+ to the source in the youngest requested revision (which is
all the underlying APIs would do in this case right now anyway). */
- if (peg_revnum < youngest_requested)
+ if (source_peg_revnum < youngest_requested)
{
- const char *start_url;
- svn_opt_revision_t requested, unspec, pegrev, *start_revision;
- unspec.kind = svn_opt_revision_unspecified;
- requested.kind = svn_opt_revision_number;
- requested.value.number = youngest_requested;
- pegrev.kind = svn_opt_revision_number;
- pegrev.value.number = peg_revnum;
+ svn_client__pathrev_t *start_loc;
- SVN_ERR(svn_client__repos_locations(&start_url, &start_revision,
- NULL, NULL,
- ra_session, source_url,
- &pegrev, &requested,
- &unspec, ctx, iterpool));
- peg_revnum = youngest_requested;
+ SVN_ERR(svn_client__repos_location(&start_loc,
+ ra_session, source_loc,
+ youngest_requested,
+ ctx, scratch_pool, scratch_pool));
+ source_peg_revnum = youngest_requested;
}
/* Fetch the locations for our merge range span. */
SVN_ERR(svn_client__repos_location_segments(&segments,
- ra_session, "",
- peg_revnum,
+ ra_session, source_loc->url,
+ source_peg_revnum,
youngest_requested,
oldest_requested,
ctx, result_pool));
@@ -6404,15 +7063,15 @@ normalize_merge_sources(apr_array_header_t **merge_sources_p,
trim_revision = SVN_INVALID_REVNUM;
if (segments->nelts)
{
- svn_location_segment_t *segment =
+ svn_location_segment_t *first_segment =
APR_ARRAY_IDX(segments, 0, svn_location_segment_t *);
/* If the first segment doesn't start with the OLDEST_REQUESTED
revision, we'll need to pass a trim revision to our range
cruncher. */
- if (segment->range_start != oldest_requested)
+ if (first_segment->range_start != oldest_requested)
{
- trim_revision = segment->range_start;
+ trim_revision = first_segment->range_start;
}
/* Else, if the first segment has no path (and therefore is a
@@ -6426,45 +7085,39 @@ normalize_merge_sources(apr_array_header_t **merge_sources_p,
### really penalize clients hitting pre-1.5 repositories with
### the typical small merge range request (because of the
### lack of a node-origins cache in the repository). */
- else if (! segment->path)
+ else if (! first_segment->path)
{
if (segments->nelts > 1)
{
- svn_location_segment_t *segment2 =
+ svn_location_segment_t *second_segment =
APR_ARRAY_IDX(segments, 1, svn_location_segment_t *);
- const char *copyfrom_path, *segment_url;
- svn_revnum_t copyfrom_rev;
+ const char *segment_url;
+ const char *original_repos_relpath;
+ svn_revnum_t original_revision;
svn_opt_revision_t range_start_rev;
range_start_rev.kind = svn_opt_revision_number;
- range_start_rev.value.number = segment2->range_start;
-
- segment_url = svn_path_url_add_component2(source_root_url,
- segment2->path,
- iterpool);
- SVN_ERR(svn_client__get_copy_source(segment_url,
- &range_start_rev,
- &copyfrom_path,
- &copyfrom_rev,
- ctx, result_pool));
+ range_start_rev.value.number = second_segment->range_start;
+
+ segment_url = svn_path_url_add_component2(
+ source_loc->repos_root_url, second_segment->path,
+ scratch_pool);
+ SVN_ERR(svn_client__get_copy_source(&original_repos_relpath,
+ &original_revision,
+ segment_url,
+ &range_start_rev, ctx,
+ result_pool, scratch_pool));
/* Got copyfrom data? Fix up the first segment to cover
back to COPYFROM_REV + 1, and then prepend a new
segment covering just COPYFROM_REV. */
- if (copyfrom_path && SVN_IS_VALID_REVNUM(copyfrom_rev))
+ if (original_repos_relpath)
{
svn_location_segment_t *new_segment =
apr_pcalloc(result_pool, sizeof(*new_segment));
- /* Skip the leading '/'. */
- new_segment->path = (*copyfrom_path == '/')
- ? copyfrom_path + 1 : copyfrom_path;
- new_segment->range_start = copyfrom_rev;
- new_segment->range_end = copyfrom_rev;
- segment->range_start = copyfrom_rev + 1;
- APR_ARRAY_PUSH(segments, svn_location_segment_t *) = NULL;
- memmove(segments->elts + segments->elt_size,
- segments->elts,
- segments->elt_size * (segments->nelts - 1));
- APR_ARRAY_IDX(segments, 0, svn_location_segment_t *) =
- new_segment;
+
+ new_segment->path = original_repos_relpath;
+ new_segment->range_start = original_revision;
+ new_segment->range_end = original_revision;
+ svn_sort__array_insert(&new_segment, segments, 0);
}
}
}
@@ -6477,18 +7130,14 @@ normalize_merge_sources(apr_array_header_t **merge_sources_p,
svn_merge_range_t *range =
APR_ARRAY_IDX(merge_range_ts, i, svn_merge_range_t *);
apr_array_header_t *merge_sources;
- int j;
if (SVN_IS_VALID_REVNUM(trim_revision))
{
- /* If the youngest of the range revisions predates the trim
- revision, discard the range. */
+ /* If the range predates the trim revision, discard it. */
if (MAX(range->start, range->end) < trim_revision)
continue;
- /* Otherwise, if either of oldest of the range revisions predates
- the trim revision, update the range revision to be equal
- to the trim revision. */
+ /* If the range overlaps the trim revision, trim it. */
if (range->start < trim_revision)
range->start = trim_revision;
if (range->end < trim_revision)
@@ -6497,15 +7146,101 @@ normalize_merge_sources(apr_array_header_t **merge_sources_p,
/* Copy the resulting merge sources into master list thereof. */
SVN_ERR(combine_range_with_segments(&merge_sources, range,
- segments, source_root_url,
+ segments, source_loc,
result_pool));
- for (j = 0; j < merge_sources->nelts; j++)
+ apr_array_cat(*merge_sources_p, merge_sources);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Determine the normalized ranges to merge from a given line of history.
+
+ Calculate the result by intersecting the list of location segments at
+ which SOURCE_LOC existed along its line of history with the requested
+ revision ranges in RANGES_TO_MERGE. RANGES_TO_MERGE is an array of
+ (svn_opt_revision_range_t *) revision ranges. Use SOURCE_PATH_OR_URL to
+ resolve any WC-relative revision specifiers (such as 'base') in
+ RANGES_TO_MERGE.
+
+ Set *MERGE_SOURCES_P to an array of merge_source_t * objects, each
+ describing a normalized range of revisions to be merged from the line
+ history of SOURCE_LOC. Order the objects from oldest to youngest.
+
+ RA_SESSION is an RA session open to the repository of SOURCE_LOC; it may
+ be temporarily reparented within this function. Use RA_SESSION to find
+ the location segments along the line of history of SOURCE_LOC.
+
+ Allocate MERGE_SOURCES_P and its contents in RESULT_POOL.
+
+ See `MERGEINFO MERGE SOURCE NORMALIZATION' for more on the
+ background of this function.
+*/
+static svn_error_t *
+normalize_merge_sources(apr_array_header_t **merge_sources_p,
+ const char *source_path_or_url,
+ const svn_client__pathrev_t *source_loc,
+ const apr_array_header_t *ranges_to_merge,
+ svn_ra_session_t *ra_session,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ const char *source_abspath_or_url;
+ svn_revnum_t youngest_rev = SVN_INVALID_REVNUM;
+ svn_rangelist_t *merge_range_ts;
+ int i;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+
+ if(!svn_path_is_url(source_path_or_url))
+ SVN_ERR(svn_dirent_get_absolute(&source_abspath_or_url, source_path_or_url,
+ scratch_pool));
+ else
+ source_abspath_or_url = source_path_or_url;
+
+ /* Create a list to hold svn_merge_range_t's. */
+ merge_range_ts = apr_array_make(scratch_pool, ranges_to_merge->nelts,
+ sizeof(svn_merge_range_t *));
+
+ for (i = 0; i < ranges_to_merge->nelts; i++)
+ {
+ svn_opt_revision_range_t *range
+ = APR_ARRAY_IDX(ranges_to_merge, i, svn_opt_revision_range_t *);
+ svn_merge_range_t mrange;
+
+ svn_pool_clear(iterpool);
+
+ /* Resolve revisions to real numbers, validating as we go. */
+ if ((range->start.kind == svn_opt_revision_unspecified)
+ || (range->end.kind == svn_opt_revision_unspecified))
+ return svn_error_create(SVN_ERR_CLIENT_BAD_REVISION, NULL,
+ _("Not all required revisions are specified"));
+
+ SVN_ERR(svn_client__get_revision_number(&mrange.start, &youngest_rev,
+ ctx->wc_ctx,
+ source_abspath_or_url,
+ ra_session, &range->start,
+ iterpool));
+ SVN_ERR(svn_client__get_revision_number(&mrange.end, &youngest_rev,
+ ctx->wc_ctx,
+ source_abspath_or_url,
+ ra_session, &range->end,
+ iterpool));
+
+ /* If this isn't a no-op range... */
+ if (mrange.start != mrange.end)
{
- APR_ARRAY_PUSH(*merge_sources_p, merge_source_t *) =
- APR_ARRAY_IDX(merge_sources, j, merge_source_t *);
+ /* ...then add it to the list. */
+ mrange.inheritable = TRUE;
+ APR_ARRAY_PUSH(merge_range_ts, svn_merge_range_t *)
+ = svn_merge_range_dup(&mrange, scratch_pool);
}
}
+ SVN_ERR(normalize_merge_sources_internal(
+ merge_sources_p, source_loc,
+ merge_range_ts, ra_session, ctx, result_pool, scratch_pool));
+
svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
@@ -6532,14 +7267,14 @@ normalize_merge_sources(apr_array_header_t **merge_sources_p,
Allocate *FILTERED_RANGELIST in POOL. */
static svn_error_t *
-filter_natural_history_from_mergeinfo(apr_array_header_t **filtered_rangelist,
+filter_natural_history_from_mergeinfo(svn_rangelist_t **filtered_rangelist,
const char *source_rel_path,
svn_mergeinfo_t implicit_mergeinfo,
svn_merge_range_t *requested_range,
apr_pool_t *pool)
{
/* Make the REQUESTED_RANGE into a rangelist. */
- apr_array_header_t *requested_rangelist =
+ svn_rangelist_t *requested_rangelist =
svn_rangelist__initialize(requested_range->start, requested_range->end,
requested_range->inheritable, pool);
@@ -6550,9 +7285,8 @@ filter_natural_history_from_mergeinfo(apr_array_header_t **filtered_rangelist,
if (implicit_mergeinfo
&& (requested_range->start < requested_range->end))
{
- apr_array_header_t *implied_rangelist =
- apr_hash_get(implicit_mergeinfo, source_rel_path,
- APR_HASH_KEY_STRING);
+ svn_rangelist_t *implied_rangelist =
+ svn_hash_gets(implicit_mergeinfo, source_rel_path);
if (implied_rangelist)
SVN_ERR(svn_rangelist_remove(filtered_rangelist,
@@ -6569,13 +7303,53 @@ filter_natural_history_from_mergeinfo(apr_array_header_t **filtered_rangelist,
return SVN_NO_ERROR;
}
+/* Return a merge source representing the sub-range from START_REV to
+ END_REV of SOURCE. SOURCE obeys the rules described in the
+ 'MERGEINFO MERGE SOURCE NORMALIZATION' comment at the top of this file.
+ The younger of START_REV and END_REV is inclusive while the older is
+ exclusive.
+
+ Allocate the result structure in POOL but leave the URLs in it as shallow
+ copies of the URLs in SOURCE.
+*/
+static merge_source_t *
+subrange_source(const merge_source_t *source,
+ svn_revnum_t start_rev,
+ svn_revnum_t end_rev,
+ apr_pool_t *pool)
+{
+ svn_boolean_t is_rollback = (source->loc1->rev > source->loc2->rev);
+ svn_boolean_t same_urls = (strcmp(source->loc1->url, source->loc2->url) == 0);
+ svn_client__pathrev_t loc1 = *source->loc1;
+ svn_client__pathrev_t loc2 = *source->loc2;
+
+ /* For this function we require that the input source is 'ancestral'. */
+ SVN_ERR_ASSERT_NO_RETURN(source->ancestral);
+ SVN_ERR_ASSERT_NO_RETURN(start_rev != end_rev);
+
+ loc1.rev = start_rev;
+ loc2.rev = end_rev;
+ if (! same_urls)
+ {
+ if (is_rollback && (end_rev != source->loc2->rev))
+ {
+ loc2.url = source->loc1->url;
+ }
+ if ((! is_rollback) && (start_rev != source->loc1->rev))
+ {
+ loc1.url = source->loc2->url;
+ }
+ }
+ return merge_source_create(&loc1, &loc2, source->ancestral, pool);
+}
+
/* The single-file, simplified version of do_directory_merge(), which see for
parameter descriptions.
Additional parameters:
- If SOURCES_RELATED is set, the "left" and "right" sides of the
- merge source are historically related (ancestors, uncles, second
+ If SOURCES_RELATED is set, the "left" and "right" sides of SOURCE are
+ historically related (ancestors, uncles, second
cousins thrice removed, etc...). (This is used to simulate the
history checks that the repository logic does in the directory case.)
@@ -6585,83 +7359,57 @@ filter_natural_history_from_mergeinfo(apr_array_header_t **filtered_rangelist,
and the value is the new mergeinfo for that path. Allocate additions
to RESULT_CATALOG in pool which RESULT_CATALOG was created in.
- Note: MERGE_B->RA_SESSION1 must be associated with URL1 and
- MERGE_B->RA_SESSION2 with URL2.
+ CONFLICTED_RANGE is as documented for do_directory_merge().
+
+ Note: MERGE_B->RA_SESSION1 must be associated with SOURCE->loc1->url and
+ MERGE_B->RA_SESSION2 with SOURCE->loc2->url.
*/
static svn_error_t *
do_file_merge(svn_mergeinfo_catalog_t result_catalog,
- const char *url1,
- svn_revnum_t revision1,
- const char *url2,
- svn_revnum_t revision2,
+ single_range_conflict_report_t **conflict_report,
+ const merge_source_t *source,
const char *target_abspath,
+ const svn_diff_tree_processor_t *processor,
svn_boolean_t sources_related,
svn_boolean_t squelch_mergeinfo_notifications,
- notification_receiver_baton_t *notify_b,
merge_cmd_baton_t *merge_b,
+ apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- apr_hash_t *props1, *props2;
- const char *tmpfile1, *tmpfile2;
- const char *mimetype1, *mimetype2;
- svn_string_t *pval;
- apr_array_header_t *propchanges, *remaining_ranges;
- svn_wc_notify_state_t prop_state = svn_wc_notify_state_unknown;
- svn_wc_notify_state_t text_state = svn_wc_notify_state_unknown;
- svn_boolean_t tree_conflicted = FALSE;
+ svn_rangelist_t *remaining_ranges;
svn_client_ctx_t *ctx = merge_b->ctx;
- const char *mergeinfo_path;
svn_merge_range_t range;
svn_mergeinfo_t target_mergeinfo;
- svn_merge_range_t *conflicted_range = NULL;
svn_boolean_t inherited = FALSE;
- svn_boolean_t is_rollback = (revision1 > revision2);
- const char *primary_url = is_rollback ? url1 : url2;
- const char *target_url;
- svn_boolean_t honor_mergeinfo, record_mergeinfo;
+ svn_boolean_t is_rollback = (source->loc1->rev > source->loc2->rev);
+ const svn_client__pathrev_t *primary_src
+ = is_rollback ? source->loc1 : source->loc2;
+ svn_boolean_t honor_mergeinfo = HONOR_MERGEINFO(merge_b);
svn_client__merge_path_t *merge_target = NULL;
apr_pool_t *iterpool = svn_pool_create(scratch_pool);
SVN_ERR_ASSERT(svn_dirent_is_absolute(target_abspath));
- honor_mergeinfo = HONOR_MERGEINFO(merge_b);
- record_mergeinfo = RECORD_MERGEINFO(merge_b);
+ *conflict_report = NULL;
/* Note that this is a single-file merge. */
- notify_b->is_single_file_merge = TRUE;
+ range.start = source->loc1->rev;
+ range.end = source->loc2->rev;
+ range.inheritable = TRUE;
- SVN_ERR(svn_wc__node_get_url(&target_url, merge_b->ctx->wc_ctx,
- target_abspath,
- iterpool, iterpool));
+ merge_target = svn_client__merge_path_create(target_abspath, scratch_pool);
- range.start = revision1;
- range.end = revision2;
- range.inheritable = TRUE;
if (honor_mergeinfo)
{
svn_error_t *err;
- const char *source_root_url;
- merge_target = apr_pcalloc(scratch_pool, sizeof(*merge_target));
- merge_target->abspath = target_abspath;
- SVN_ERR(svn_ra_get_repos_root2(merge_b->ra_session1,
- &source_root_url, iterpool));
- SVN_ERR(svn_client__path_relative_to_root(&mergeinfo_path,
- merge_b->ctx->wc_ctx,
- primary_url,
- source_root_url, TRUE, NULL,
- scratch_pool, iterpool));
-
- /* Fetch mergeinfo (temporarily reparenting ra_session1 to
- working copy target URL). */
- SVN_ERR(svn_ra_reparent(merge_b->ra_session1, target_url,
- iterpool));
+ /* Fetch mergeinfo. */
err = get_full_mergeinfo(&target_mergeinfo,
&(merge_target->implicit_mergeinfo),
&inherited, svn_mergeinfo_inherited,
merge_b->ra_session1, target_abspath,
- MAX(revision1, revision2),
- MIN(revision1, revision2),
+ MAX(source->loc1->rev, source->loc2->rev),
+ MIN(source->loc1->rev, source->loc2->rev),
ctx, scratch_pool, iterpool);
if (err)
@@ -6671,32 +7419,52 @@ do_file_merge(svn_mergeinfo_catalog_t result_catalog,
err = svn_error_createf(
SVN_ERR_CLIENT_INVALID_MERGEINFO_NO_MERGETRACKING, err,
_("Invalid mergeinfo detected on merge target '%s', "
- "mergetracking not possible"),
+ "merge tracking not possible"),
svn_dirent_local_style(target_abspath, scratch_pool));
}
return svn_error_trace(err);
}
- SVN_ERR(svn_ra_reparent(merge_b->ra_session1, url1, iterpool));
-
/* Calculate remaining merges unless this is a record only merge.
In that case the remaining range is the whole range described
- by REVISION1:REVISION2. */
+ by SOURCE->rev1:rev2. */
if (!merge_b->record_only)
{
+ /* ### Bug? calculate_remaining_ranges() needs 'source' to adhere
+ * to the requirements of 'MERGEINFO MERGE SOURCE NORMALIZATION'
+ * here, but it doesn't appear to be guaranteed so. */
SVN_ERR(calculate_remaining_ranges(NULL, merge_target,
- source_root_url,
- url1, revision1, url2, revision2,
- target_mergeinfo,
- merge_b->implicit_src_gap, FALSE,
- merge_b->ra_session1,
- ctx, scratch_pool,
- iterpool));
+ source,
+ target_mergeinfo,
+ merge_b->implicit_src_gap, FALSE,
+ merge_b->ra_session1,
+ ctx, scratch_pool,
+ iterpool));
remaining_ranges = merge_target->remaining_ranges;
+
+ /* We are honoring mergeinfo and this is not a simple record only
+ merge which blindly records mergeinfo describing the merge of
+ SOURCE->LOC1->URL@SOURCE->LOC1->REV through
+ SOURCE->LOC2->URL@SOURCE->LOC2->REV. This means that the oldest
+ and youngest revisions merged (as determined above by
+ calculate_remaining_ranges) might differ from those described
+ in SOURCE. To keep the '--- Merging *' notifications consistent
+ with the '--- Recording mergeinfo *' notifications, we adjust
+ RANGE to account for such changes. */
+ if (remaining_ranges->nelts)
+ {
+ svn_merge_range_t *adj_start_range =
+ APR_ARRAY_IDX(remaining_ranges, 0, svn_merge_range_t *);
+ svn_merge_range_t *adj_end_range =
+ APR_ARRAY_IDX(remaining_ranges, remaining_ranges->nelts - 1,
+ svn_merge_range_t *);
+ range.start = adj_start_range->start;
+ range.end = adj_end_range->end;
+ }
}
}
- /* The simple cases where our remaining range is REVISION1:REVISION2. */
+ /* The simple cases where our remaining range is SOURCE->rev1:rev2. */
if (!honor_mergeinfo || merge_b->record_only)
{
remaining_ranges = apr_array_make(scratch_pool, 1, sizeof(&range));
@@ -6705,180 +7473,221 @@ do_file_merge(svn_mergeinfo_catalog_t result_catalog,
if (!merge_b->record_only)
{
- apr_array_header_t *ranges_to_merge = remaining_ranges;
- int i;
+ svn_rangelist_t *ranges_to_merge = apr_array_copy(scratch_pool,
+ remaining_ranges);
+ const char *target_relpath = ""; /* relative to root of merge */
- /* If we have ancestrally related sources and more than one
- range to merge, eliminate no-op ranges before going through
- the effort of downloading the many copies of the file
- required to do these merges (two copies per range). */
- if (merge_b->sources_ancestral && (remaining_ranges->nelts > 1))
+ if (source->ancestral)
{
- const char *old_sess_url = NULL;
- SVN_ERR(svn_client__ensure_ra_session_url(&old_sess_url,
- merge_b->ra_session1,
- primary_url,
- iterpool));
- SVN_ERR(remove_noop_merge_ranges(&ranges_to_merge,
- merge_b->ra_session1,
- remaining_ranges, scratch_pool));
- if (old_sess_url)
- SVN_ERR(svn_ra_reparent(merge_b->ra_session1, old_sess_url,
- iterpool));
+ apr_array_header_t *child_with_mergeinfo;
+ svn_client__merge_path_t *target_info;
+
+ /* If we have ancestrally related sources and more than one
+ range to merge, eliminate no-op ranges before going through
+ the effort of downloading the many copies of the file
+ required to do these merges (two copies per range). */
+ if (remaining_ranges->nelts > 1)
+ {
+ const char *old_sess_url;
+ svn_error_t *err;
+
+ SVN_ERR(svn_client__ensure_ra_session_url(&old_sess_url,
+ merge_b->ra_session1,
+ primary_src->url,
+ iterpool));
+ err = remove_noop_merge_ranges(&ranges_to_merge,
+ merge_b->ra_session1,
+ remaining_ranges, scratch_pool);
+ SVN_ERR(svn_error_compose_create(
+ err, svn_ra_reparent(merge_b->ra_session1,
+ old_sess_url, iterpool)));
+ }
+
+ /* To support notify_merge_begin() initialize our
+ CHILD_WITH_MERGEINFO. See the comment
+ 'THE CHILDREN_WITH_MERGEINFO ARRAY' at the start of this file. */
+
+ child_with_mergeinfo = apr_array_make(scratch_pool, 1,
+ sizeof(svn_client__merge_path_t *));
+
+ /* ### Create a fake copy of merge_target as we don't keep
+ remaining_ranges in sync (yet). */
+ target_info = apr_pcalloc(scratch_pool, sizeof(*target_info));
+
+ target_info->abspath = merge_target->abspath;
+ target_info->remaining_ranges = ranges_to_merge;
+
+ APR_ARRAY_PUSH(child_with_mergeinfo, svn_client__merge_path_t *)
+ = target_info;
+
+ /* And store in baton to allow using it from notify_merge_begin() */
+ merge_b->notify_begin.nodes_with_mergeinfo = child_with_mergeinfo;
}
- for (i = 0; i < ranges_to_merge->nelts; i++)
+ while (ranges_to_merge->nelts > 0)
{
- svn_wc_notify_t *n;
- svn_boolean_t header_sent = FALSE;
- svn_ra_session_t *ra_session1, *ra_session2;
-
- /* When using this merge range, account for the exclusivity of
- its low value (which is indicated by this operation being a
- merge vs. revert). */
- svn_merge_range_t *r = APR_ARRAY_IDX(ranges_to_merge, i,
+ svn_merge_range_t *r = APR_ARRAY_IDX(ranges_to_merge, 0,
svn_merge_range_t *);
+ const merge_source_t *real_source;
+ const char *left_file, *right_file;
+ apr_hash_t *left_props, *right_props;
+ const svn_diff_source_t *left_source;
+ const svn_diff_source_t *right_source;
svn_pool_clear(iterpool);
- n = svn_wc_create_notify(target_abspath,
- merge_b->same_repos
- ? svn_wc_notify_merge_begin
- : svn_wc_notify_foreign_merge_begin,
- iterpool);
- if (merge_b->sources_ancestral)
- n->merge_range = r;
-
- /* Issue #3174: If we are honoring mergeinfo, then URL1, URL2,
- REVISION1, and REVISION2 meet the conditions described in
- 'MERGEINFO MERGE SOURCE NORMALIZATION'. This means that
- URL1@REVISION1 may be the copy source of URL2@REVISION2.
- If this is the case, then URL1 != URL2. Since
- MERGE_B->RA_SESSION1 is always opened with URL1, the only time
- we can safely call single_file_merge_get_file() with that RA
- session is for REVISION1 (or REVISION2 if this is a reverse
- merge). */
- ra_session1 = merge_b->ra_session1;
- ra_session2 = merge_b->ra_session2;
- if (honor_mergeinfo && strcmp(url1, url2) != 0)
- {
- if (!is_rollback && r->start != revision1)
- ra_session1 = ra_session2; /* Use URL2's RA session. */
- else if (is_rollback && r->end != revision2)
- ra_session2 = ra_session1; /* Use URL1's RA session. */
- }
+ /* Ensure any subsequent drives gets their own notification. */
+ merge_b->notify_begin.last_abspath = NULL;
/* While we currently don't allow it, in theory we could be
fetching two fulltexts from two different repositories here. */
- SVN_ERR(single_file_merge_get_file(&tmpfile1, ra_session1,
- &props1, r->start,
- target_abspath, iterpool));
- SVN_ERR(single_file_merge_get_file(&tmpfile2, ra_session2,
- &props2, r->end, target_abspath,
- iterpool));
+ if (source->ancestral)
+ real_source = subrange_source(source, r->start, r->end, iterpool);
+ else
+ real_source = source;
+ SVN_ERR(single_file_merge_get_file(&left_file, &left_props,
+ merge_b->ra_session1,
+ real_source->loc1,
+ target_abspath,
+ iterpool, iterpool));
+ SVN_ERR(single_file_merge_get_file(&right_file, &right_props,
+ merge_b->ra_session2,
+ real_source->loc2,
+ target_abspath,
+ iterpool, iterpool));
+ /* Calculate sources for the diff processor */
+ left_source = svn_diff__source_create(r->start, iterpool);
+ right_source = svn_diff__source_create(r->end, iterpool);
+
- /* Discover any svn:mime-type values in the proplists */
- pval = apr_hash_get(props1, SVN_PROP_MIME_TYPE,
- strlen(SVN_PROP_MIME_TYPE));
- mimetype1 = pval ? pval->data : NULL;
+ /* If the sources are related or we're ignoring ancestry in diffs,
+ do a text-n-props merge; otherwise, do a delete-n-add merge. */
+ if (! (merge_b->diff_ignore_ancestry || sources_related))
+ {
+ struct merge_dir_baton_t dir_baton;
+ void *file_baton;
+ svn_boolean_t skip;
- pval = apr_hash_get(props2, SVN_PROP_MIME_TYPE,
- strlen(SVN_PROP_MIME_TYPE));
- mimetype2 = pval ? pval->data : NULL;
+ /* Initialize minimal dir baton to allow calculating 'R'eplace
+ from 'D'elete + 'A'dd. */
- /* Deduce property diffs. */
- SVN_ERR(svn_prop_diffs(&propchanges, props2, props1, iterpool));
+ memset(&dir_baton, 0, sizeof(dir_baton));
+ dir_baton.pool = iterpool;
+ dir_baton.tree_conflict_reason = CONFLICT_REASON_NONE;
+ dir_baton.tree_conflict_action = svn_wc_conflict_action_edit;
+ dir_baton.skip_reason = svn_wc_notify_state_unknown;
- /* If we aren't ignoring ancestry, then we've already done
- ancestry relatedness checks. If we are ignoring ancestry, or
- our sources are known to be related, then we can do
- text-n-props merge; otherwise, we have to do a delete-n-add
- merge. */
- if (! (merge_b->ignore_ancestry || sources_related))
- {
/* Delete... */
- SVN_ERR(merge_file_deleted(&text_state,
- &tree_conflicted,
- target_abspath,
- tmpfile1,
- tmpfile2,
- mimetype1, mimetype2,
- props1,
- merge_b,
- iterpool));
- single_file_merge_notify(notify_b, target_abspath,
- tree_conflicted
- ? svn_wc_notify_tree_conflict
- : svn_wc_notify_update_delete,
- text_state,
- svn_wc_notify_state_unknown,
- n, &header_sent, iterpool);
+ file_baton = NULL;
+ skip = FALSE;
+ SVN_ERR(processor->file_opened(&file_baton, &skip, target_relpath,
+ left_source,
+ NULL /* right_source */,
+ NULL /* copyfrom_source */,
+ &dir_baton,
+ processor,
+ iterpool, iterpool));
+ if (! skip)
+ SVN_ERR(processor->file_deleted(target_relpath,
+ left_source,
+ left_file,
+ left_props,
+ file_baton,
+ processor,
+ iterpool));
/* ...plus add... */
- SVN_ERR(merge_file_added(&text_state, &prop_state,
- &tree_conflicted,
- target_abspath,
- tmpfile1,
- tmpfile2,
- r->start,
- r->end,
- mimetype1, mimetype2,
- NULL, SVN_INVALID_REVNUM,
- propchanges, props1,
- merge_b,
- iterpool));
- single_file_merge_notify(notify_b, target_abspath,
- tree_conflicted
- ? svn_wc_notify_tree_conflict
- : svn_wc_notify_update_add,
- text_state, prop_state, n,
- &header_sent, iterpool);
+ file_baton = NULL;
+ skip = FALSE;
+ SVN_ERR(processor->file_opened(&file_baton, &skip, target_relpath,
+ NULL /* left_source */,
+ right_source,
+ NULL /* copyfrom_source */,
+ &dir_baton,
+ processor,
+ iterpool, iterpool));
+ if (! skip)
+ SVN_ERR(processor->file_added(target_relpath,
+ NULL /* copyfrom_source */,
+ right_source,
+ NULL /* copyfrom_file */,
+ right_file,
+ NULL /* copyfrom_props */,
+ right_props,
+ file_baton,
+ processor,
+ iterpool));
/* ... equals replace. */
}
else
{
- SVN_ERR(merge_file_changed(&text_state, &prop_state,
- &tree_conflicted,
- target_abspath,
- tmpfile1,
- tmpfile2,
- r->start,
- r->end,
- mimetype1, mimetype2,
- propchanges, props1,
- merge_b,
- iterpool));
- single_file_merge_notify(notify_b, target_abspath,
- tree_conflicted
- ? svn_wc_notify_tree_conflict
- : svn_wc_notify_update_update,
- text_state, prop_state, n,
- &header_sent, iterpool);
- }
+ void *file_baton = NULL;
+ svn_boolean_t skip = FALSE;
+ apr_array_header_t *propchanges;
+
+
+ /* Deduce property diffs. */
+ SVN_ERR(svn_prop_diffs(&propchanges, right_props, left_props,
+ iterpool));
- /* Ignore if temporary file not found. It may have been renamed. */
- /* (This is where we complain about missing Lisp, or better yet,
- Python...) */
- SVN_ERR(svn_io_remove_file2(tmpfile1, TRUE, iterpool));
- SVN_ERR(svn_io_remove_file2(tmpfile2, TRUE, iterpool));
+ SVN_ERR(processor->file_opened(&file_baton, &skip, target_relpath,
+ left_source,
+ right_source,
+ NULL /* copyfrom_source */,
+ NULL /* dir_baton */,
+ processor,
+ iterpool, iterpool));
+ if (! skip)
+ SVN_ERR(processor->file_changed(target_relpath,
+ left_source,
+ right_source,
+ left_file,
+ right_file,
+ left_props,
+ right_props,
+ TRUE /* file changed */,
+ propchanges,
+ file_baton,
+ processor,
+ iterpool));
+ }
- if ((i < (ranges_to_merge->nelts - 1))
- && is_path_conflicted_by_merge(merge_b))
+ if (is_path_conflicted_by_merge(merge_b))
{
- conflicted_range = svn_merge_range_dup(r, scratch_pool);
+ merge_source_t *remaining_range = NULL;
+
+ if (real_source->loc2->rev != source->loc2->rev)
+ remaining_range = subrange_source(source,
+ real_source->loc2->rev,
+ source->loc2->rev,
+ scratch_pool);
+ *conflict_report = single_range_conflict_report_create(
+ real_source, remaining_range, result_pool);
+
+ /* Only record partial mergeinfo if only a partial merge was
+ performed before a conflict was encountered. */
+ range.end = r->end;
break;
}
+
+ /* Now delete the just merged range from the hash
+ (This list is used from notify_merge_begin)
+
+ Directory merges use remove_first_range_from_remaining_ranges() */
+ svn_sort__array_delete(ranges_to_merge, 0, 1);
}
+ merge_b->notify_begin.last_abspath = NULL;
} /* !merge_b->record_only */
/* Record updated WC mergeinfo to account for our new merges, minus
any unresolved conflicts and skips. We use the original
- REMAINING_RANGES here instead of the possibly-pared-down
- RANGES_TO_MERGE because we want to record all the requested
+ REMAINING_RANGES here because we want to record all the requested
merge ranges, include the noop ones. */
- if (record_mergeinfo && remaining_ranges->nelts)
+ if (RECORD_MERGEINFO(merge_b) && remaining_ranges->nelts)
{
- apr_array_header_t *filtered_rangelist;
+ const char *mergeinfo_path = svn_client__pathrev_fspath(primary_src,
+ scratch_pool);
+ svn_rangelist_t *filtered_rangelist;
/* Filter any ranges from TARGET_WCPATH's own history, there is no
need to record this explicitly in mergeinfo, it is already part
@@ -6887,14 +7696,14 @@ do_file_merge(svn_mergeinfo_catalog_t result_catalog,
&filtered_rangelist,
mergeinfo_path,
merge_target->implicit_mergeinfo,
- &range, iterpool));
+ &range,
+ iterpool));
/* Only record mergeinfo if there is something other than
self-referential mergeinfo, but don't record mergeinfo if
TARGET_WCPATH was skipped. */
if (filtered_rangelist->nelts
- && (!notify_b->skipped_abspaths
- || (apr_hash_count(notify_b->skipped_abspaths) == 0)))
+ && (apr_hash_count(merge_b->skipped_abspaths) == 0))
{
apr_hash_t *merges = apr_hash_make(iterpool);
@@ -6906,28 +7715,18 @@ do_file_merge(svn_mergeinfo_catalog_t result_catalog,
FALSE, ctx,
iterpool));
- apr_hash_set(merges, target_abspath, APR_HASH_KEY_STRING,
- filtered_rangelist);
+ svn_hash_sets(merges, target_abspath, filtered_rangelist);
if (!squelch_mergeinfo_notifications)
{
/* Notify that we are recording mergeinfo describing a merge. */
- svn_wc_notify_t *notify = svn_wc_create_notify(
- target_abspath, svn_wc_notify_merge_record_info_begin,
- iterpool);
- svn_revnum_t youngest_rev;
- svn_revnum_t oldest_rev;
- SVN_ERR(svn_mergeinfo__get_range_endpoints(&youngest_rev,
- &oldest_rev,
- merges,
- iterpool));
- notify->merge_range = apr_pcalloc(iterpool,
- sizeof(svn_merge_range_t));
- notify->merge_range->start = oldest_rev;
- notify->merge_range->end = youngest_rev;
- notify->merge_range->inheritable = TRUE;
- merge_b->ctx->notify_func2(merge_b->ctx->notify_baton2,
- notify, iterpool);
+ svn_merge_range_t n_range;
+
+ SVN_ERR(svn_mergeinfo__get_range_endpoints(
+ &n_range.end, &n_range.start, merges, iterpool));
+ n_range.inheritable = TRUE;
+ notify_mergeinfo_recording(target_abspath, &n_range,
+ merge_b->ctx, iterpool);
}
SVN_ERR(update_wc_mergeinfo(result_catalog, target_abspath,
@@ -6936,29 +7735,22 @@ do_file_merge(svn_mergeinfo_catalog_t result_catalog,
}
}
- /* Caller must call svn_sleep_for_timestamps() */
- *(merge_b->use_sleep) = TRUE;
+ merge_b->notify_begin.nodes_with_mergeinfo = NULL;
svn_pool_destroy(iterpool);
- /* If our multi-pass merge terminated early due to conflicts, return
- that fact as an error. */
- if (conflicted_range)
- return make_merge_conflict_error(target_abspath, conflicted_range,
- scratch_pool);
-
return SVN_NO_ERROR;
}
-/* Helper for do_directory_merge() to handle the case were a merge editor
+/* Helper for do_directory_merge() to handle the case where a merge editor
drive adds explicit mergeinfo to a path which didn't have any explicit
mergeinfo previously.
- MERGE_B and NOTIFY_B are cascaded from the arguments of the same
+ MERGE_B is cascaded from the argument of the same
name in do_directory_merge(). Should be called only after
do_directory_merge() has called populate_remaining_ranges() and populated
the remaining_ranges field of each child in
- NOTIFY_B->CHILDREN_WITH_MERGEINFO (i.e. the remaining_ranges fields can be
+ CHILDREN_WITH_MERGEINFO (i.e. the remaining_ranges fields can be
empty but never NULL).
If MERGE_B->DRY_RUN is true do nothing, if it is false then
@@ -6966,17 +7758,17 @@ do_file_merge(svn_mergeinfo_catalog_t result_catalog,
path's inherited mergeinfo (if any) with its working explicit mergeinfo
and set that as the path's new explicit mergeinfo. Then add an
svn_client__merge_path_t * element representing the path to
- NOTIFY_B->CHILDREN_WITH_MERGEINFO if it isn't already present. All fields
- in any elements added to NOTIFY_B->CHILDREN_WITH_MERGEINFO are initialized
+ CHILDREN_WITH_MERGEINFO if it isn't already present. All fields
+ in any elements added to CHILDREN_WITH_MERGEINFO are initialized
to FALSE/NULL with the exception of 'path' and 'remaining_ranges'. The
latter is set to a rangelist equal to the remaining_ranges of the path's
- nearest path-wise ancestor in NOTIFY_B->CHILDREN_WITH_MERGEINFO.
+ nearest path-wise ancestor in CHILDREN_WITH_MERGEINFO.
- Any elements added to NOTIFY_B->CHILDREN_WITH_MERGEINFO are allocated
+ Any elements added to CHILDREN_WITH_MERGEINFO are allocated
in POOL. */
static svn_error_t *
process_children_with_new_mergeinfo(merge_cmd_baton_t *merge_b,
- notification_receiver_baton_t *notify_b,
+ apr_array_header_t *children_with_mergeinfo,
apr_pool_t *pool)
{
apr_pool_t *iterpool;
@@ -6992,21 +7784,21 @@ process_children_with_new_mergeinfo(merge_cmd_baton_t *merge_b,
hi = apr_hash_next(hi))
{
const char *abspath_with_new_mergeinfo = svn__apr_hash_index_key(hi);
- const char *old_session_url = NULL;
- const char *path_url;
svn_mergeinfo_t path_inherited_mergeinfo;
svn_mergeinfo_t path_explicit_mergeinfo;
- svn_boolean_t inherited;
svn_client__merge_path_t *new_child;
- apr_pool_clear(iterpool);
- SVN_ERR(svn_wc__node_get_url(&path_url, merge_b->ctx->wc_ctx,
- abspath_with_new_mergeinfo,
- pool, pool));
+ svn_pool_clear(iterpool);
+
+ /* Note: We could skip recording inherited mergeinfo here if this path
+ was added (with preexisting mergeinfo) by the merge. That's actually
+ more correct, since the inherited mergeinfo likely describes
+ non-existent or unrelated merge history, but it's not quite so simple
+ as that, see http://subversion.tigris.org/issues/show_bug.cgi?id=4309
+ */
/* Get the path's new explicit mergeinfo... */
- SVN_ERR(svn_client__get_wc_mergeinfo(&path_explicit_mergeinfo,
- &inherited,
+ SVN_ERR(svn_client__get_wc_mergeinfo(&path_explicit_mergeinfo, NULL,
svn_mergeinfo_explicit,
abspath_with_new_mergeinfo,
NULL, NULL, FALSE,
@@ -7016,17 +7808,11 @@ process_children_with_new_mergeinfo(merge_cmd_baton_t *merge_b,
but you can't be too careful. */
if (path_explicit_mergeinfo)
{
- /* Temporarily reparent MERGE_B->RA_SESSION2 in case we need to
- contact the repository for inherited mergeinfo. */
- SVN_ERR(svn_client__ensure_ra_session_url(&old_session_url,
- merge_b->ra_session2,
- path_url,
- iterpool));
/* Get the mergeinfo the path would have inherited before
the merge. */
SVN_ERR(svn_client__get_wc_or_repos_mergeinfo(
&path_inherited_mergeinfo,
- &inherited, NULL,
+ NULL, NULL,
FALSE,
svn_mergeinfo_nearest_ancestor, /* We only want inherited MI */
merge_b->ra_session2,
@@ -7039,39 +7825,34 @@ process_children_with_new_mergeinfo(merge_cmd_baton_t *merge_b,
explicit mergeinfo. */
if (path_inherited_mergeinfo)
{
- SVN_ERR(svn_mergeinfo_merge(path_explicit_mergeinfo,
- path_inherited_mergeinfo,
- iterpool));
+ SVN_ERR(svn_mergeinfo_merge2(path_explicit_mergeinfo,
+ path_inherited_mergeinfo,
+ iterpool, iterpool));
SVN_ERR(svn_client__record_wc_mergeinfo(
abspath_with_new_mergeinfo,
path_explicit_mergeinfo,
FALSE, merge_b->ctx, iterpool));
}
- /* If the path is not in NOTIFY_B->CHILDREN_WITH_MERGEINFO
- then add it. */
+ /* If the path is not in CHILDREN_WITH_MERGEINFO then add it. */
new_child =
- get_child_with_mergeinfo(notify_b->children_with_mergeinfo,
+ get_child_with_mergeinfo(children_with_mergeinfo,
abspath_with_new_mergeinfo);
if (!new_child)
{
- int parent_index =
- find_nearest_ancestor(notify_b->children_with_mergeinfo,
- FALSE, abspath_with_new_mergeinfo);
- svn_client__merge_path_t *parent =
- APR_ARRAY_IDX(notify_b->children_with_mergeinfo,
- parent_index,
- svn_client__merge_path_t *);
- new_child = apr_pcalloc(pool, sizeof(*new_child));
- new_child->abspath = apr_pstrdup(pool,
- abspath_with_new_mergeinfo);
+ const svn_client__merge_path_t *parent
+ = find_nearest_ancestor(children_with_mergeinfo,
+ FALSE, abspath_with_new_mergeinfo);
+ new_child
+ = svn_client__merge_path_create(abspath_with_new_mergeinfo,
+ pool);
/* If path_with_new_mergeinfo is the merge target itself
then it should already be in
- NOTIFY_B->CHILDREN_WITH_MERGEINFO per the criteria of
+ CHILDREN_WITH_MERGEINFO per the criteria of
get_mergeinfo_paths() and we shouldn't be in this block.
If path_with_new_mergeinfo is a subtree then it must have
- a parent in NOTIFY_B->CHILDREN_WITH_MERGEINFO if only
+ a parent in CHILDREN_WITH_MERGEINFO if only
the merge target itself...so if we don't find a parent
the caller has done something quite wrong. */
SVN_ERR_ASSERT(parent);
@@ -7080,37 +7861,30 @@ process_children_with_new_mergeinfo(merge_cmd_baton_t *merge_b,
/* Set the path's remaining_ranges equal to its parent's. */
new_child->remaining_ranges = svn_rangelist_dup(
parent->remaining_ranges, pool);
- insert_child_to_merge(notify_b->children_with_mergeinfo,
- new_child, pool);
+ insert_child_to_merge(children_with_mergeinfo, new_child, pool);
}
}
- /* Return MERGE_B->RA_SESSION2 to its initial state if we
- reparented it. */
- if (old_session_url)
- SVN_ERR(svn_ra_reparent(merge_b->ra_session2, old_session_url,
- iterpool));
}
svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
-/* SUBTREES is one of the following notification_receiver_baton_t members:
- merged_paths, skipped_paths, or added_paths. Return true if any path in
- SUBTRESS is equal to, or is a subtree of, LOCAL_ABSPATH. Return false
- otherwise. If LOCAL_ABSPATH or SUBTREES are NULL return false. */
+/* Return true if any path in SUBTREES is equal to, or is a subtree of,
+ LOCAL_ABSPATH. Return false otherwise. The keys of SUBTREES are
+ (const char *) absolute paths and its values are irrelevant.
+ If SUBTREES is NULL return false. */
static svn_boolean_t
path_is_subtree(const char *local_abspath,
apr_hash_t *subtrees,
apr_pool_t *pool)
{
- if (local_abspath && subtrees)
+ if (subtrees)
{
apr_hash_index_t *hi;
for (hi = apr_hash_first(pool, subtrees);
- hi;
- hi = apr_hash_next(hi))
+ hi; hi = apr_hash_next(hi))
{
const char *path_touched_by_merge = svn__apr_hash_index_key(hi);
if (svn_dirent_is_ancestor(local_abspath, path_touched_by_merge))
@@ -7120,60 +7894,91 @@ path_is_subtree(const char *local_abspath,
return FALSE;
}
-/* Return true if LOCAL_ABDPATH is equal to or a subtree of any of the paths
- in NOTIFY_B->MERGED_PATHS, NOTIFY_B->SKIPPED_PATHS, NOTIFY_B->ADDED_PATHS,
- or NOTIFY_B->CONFLICTED_PATHS. Return false otherwise. */
+/* Return true if any merged, skipped, added or tree-conflicted path
+ recorded in MERGE_B is equal to, or is a subtree of LOCAL_ABSPATH. Return
+ false otherwise.
+
+ ### Why not text- or prop-conflicted paths? Are such paths guaranteed
+ to be recorded as 'merged' or 'skipped' or 'added', perhaps?
+*/
static svn_boolean_t
subtree_touched_by_merge(const char *local_abspath,
- notification_receiver_baton_t *notify_b,
+ merge_cmd_baton_t *merge_b,
apr_pool_t *pool)
{
- return (path_is_subtree(local_abspath, notify_b->merged_abspaths, pool)
- || path_is_subtree(local_abspath, notify_b->skipped_abspaths, pool)
- || path_is_subtree(local_abspath, notify_b->added_abspaths, pool)
- || path_is_subtree(local_abspath,
- notify_b->tree_conflicted_abspaths,
+ return (path_is_subtree(local_abspath, merge_b->merged_abspaths, pool)
+ || path_is_subtree(local_abspath, merge_b->skipped_abspaths, pool)
+ || path_is_subtree(local_abspath, merge_b->added_abspaths, pool)
+ || path_is_subtree(local_abspath, merge_b->tree_conflicted_abspaths,
pool));
}
/* Helper for do_directory_merge() when performing mergeinfo unaware merges.
- Merge the diff of URL1@REVISION1:URL2@REVISION2 to TARGET_DIR_WCPATH.
+ Merge the SOURCE diff into TARGET_DIR_WCPATH.
- URL1, REVISION1, URL2, REVISION2, DEPTH, NOTIFY_B, and MERGE_B
+ SOURCE, DEPTH, NOTIFY_B, and MERGE_B
are all cascaded from do_directory_merge's arguments of the same names.
+ CONFLICT_REPORT is as documented for do_directory_merge().
+
NOTE: This is a very thin wrapper around drive_merge_report_editor() and
- exists only to populate NOTIFY_B->CHILREN_WITH_MERGEINFO with the single
- element expected during mergeinfo unaware merges..
+ exists only to populate CHILDREN_WITH_MERGEINFO with the single element
+ expected during mergeinfo unaware merges.
*/
static svn_error_t *
-do_mergeinfo_unaware_dir_merge(const char *url1,
- svn_revnum_t revision1,
- const char *url2,
- svn_revnum_t revision2,
+do_mergeinfo_unaware_dir_merge(single_range_conflict_report_t **conflict_report,
+ const merge_source_t *source,
const char *target_dir_wcpath,
+ apr_array_header_t *children_with_mergeinfo,
+ const svn_diff_tree_processor_t *processor,
svn_depth_t depth,
- notification_receiver_baton_t *notify_b,
merge_cmd_baton_t *merge_b,
- apr_pool_t *pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- /* Initialize NOTIFY_B->CHILDREN_WITH_MERGEINFO and populate it with
- one element describing the merge of REVISION1:REVISION2 to
+ /* Initialize CHILDREN_WITH_MERGEINFO and populate it with
+ one element describing the merge of SOURCE->rev1:rev2 to
TARGET_DIR_WCPATH. */
- svn_client__merge_path_t *item = apr_pcalloc(pool, sizeof(*item));
-
- item->abspath = apr_pstrdup(pool, target_dir_wcpath);
- item->remaining_ranges = svn_rangelist__initialize(revision1, revision2,
- TRUE, pool);
- APR_ARRAY_PUSH(notify_b->children_with_mergeinfo,
+ svn_client__merge_path_t *item
+ = svn_client__merge_path_create(target_dir_wcpath, scratch_pool);
+
+ *conflict_report = NULL;
+ item->remaining_ranges = svn_rangelist__initialize(source->loc1->rev,
+ source->loc2->rev,
+ TRUE, scratch_pool);
+ APR_ARRAY_PUSH(children_with_mergeinfo,
svn_client__merge_path_t *) = item;
- return drive_merge_report_editor(target_dir_wcpath,
- url1, revision1, url2, revision2,
- NULL, depth, notify_b,
- merge_b, pool);
+ SVN_ERR(drive_merge_report_editor(target_dir_wcpath,
+ source,
+ NULL, processor, depth,
+ merge_b, scratch_pool));
+ if (is_path_conflicted_by_merge(merge_b))
+ {
+ *conflict_report = single_range_conflict_report_create(
+ source, NULL, result_pool);
+ }
+ return SVN_NO_ERROR;
}
+/* A svn_log_entry_receiver_t baton for log_find_operative_subtree_revs(). */
+typedef struct log_find_operative_subtree_baton_t
+{
+ /* Mapping of const char * absolute working copy paths to those
+ path's const char * repos absolute paths. */
+ apr_hash_t *operative_children;
+
+ /* As per the arguments of the same name to
+ get_operative_immediate_children(). */
+ const char *merge_source_fspath;
+ const char *merge_target_abspath;
+ svn_depth_t depth;
+ svn_wc_context_t *wc_ctx;
+
+ /* A pool to allocate additions to the hashes in. */
+ apr_pool_t *result_pool;
+} log_find_operative_subtree_baton_t;
+
/* A svn_log_entry_receiver_t callback for
get_inoperative_immediate_children(). */
static svn_error_t *
@@ -7181,114 +7986,385 @@ log_find_operative_subtree_revs(void *baton,
svn_log_entry_t *log_entry,
apr_pool_t *pool)
{
- apr_hash_t *immediate_children = baton;
- apr_hash_index_t *hi, *hi2;
+ log_find_operative_subtree_baton_t *log_baton = baton;
+ apr_hash_index_t *hi;
+ apr_pool_t *iterpool;
+
+ /* It's possible that authz restrictions on the merge source prevent us
+ from knowing about any of the changes for LOG_ENTRY->REVISION. */
+ if (!log_entry->changed_paths2)
+ return SVN_NO_ERROR;
+
+ iterpool = svn_pool_create(pool);
for (hi = apr_hash_first(pool, log_entry->changed_paths2);
hi;
hi = apr_hash_next(hi))
{
const char *path = svn__apr_hash_index_key(hi);
- for (hi2 = apr_hash_first(pool, immediate_children);
- hi2;
- hi2 = apr_hash_next(hi2))
+ svn_log_changed_path2_t *change = svn__apr_hash_index_val(hi);
+
{
- const char *immediate_path = svn__apr_hash_index_val(hi2);
- if (svn_dirent_is_ancestor(immediate_path, path))
+ const char *child;
+ const char *potential_child;
+ const char *rel_path =
+ svn_fspath__skip_ancestor(log_baton->merge_source_fspath, path);
+
+ /* Some affected paths might be the root of the merge source or
+ entirely outside our subtree of interest. In either case they
+ are not operative *immediate* children. */
+ if (rel_path == NULL
+ || rel_path[0] == '\0')
+ continue;
+
+ svn_pool_clear(iterpool);
+
+ child = svn_relpath_dirname(rel_path, iterpool);
+ if (child[0] == '\0')
{
- apr_hash_set(immediate_children, svn__apr_hash_index_key(hi2),
- APR_HASH_KEY_STRING, NULL);
- /* A path can't be the child of more than
- one immediate child of the merge target. */
- break;
+ /* The svn_log_changed_path2_t.node_kind members in
+ LOG_ENTRY->CHANGED_PATHS2 may be set to
+ svn_node_unknown, see svn_log_changed_path2_t and
+ svn_fs_paths_changed2. In that case we check the
+ type of the corresponding subtree in the merge
+ target. */
+ svn_node_kind_t node_kind;
+
+ if (change->node_kind == svn_node_unknown)
+ {
+ const char *wc_child_abspath =
+ svn_dirent_join(log_baton->merge_target_abspath,
+ rel_path, iterpool);
+
+ SVN_ERR(svn_wc_read_kind2(&node_kind, log_baton->wc_ctx,
+ wc_child_abspath, FALSE, FALSE,
+ iterpool));
+ }
+ else
+ {
+ node_kind = change->node_kind;
+ }
+
+ /* We only care about immediate directory children if
+ DEPTH is svn_depth_files. */
+ if (log_baton->depth == svn_depth_files
+ && node_kind != svn_node_dir)
+ continue;
+
+ /* If depth is svn_depth_immediates, then we only care
+ about changes to proper subtrees of PATH. If the change
+ is to PATH itself then PATH is within the operational
+ depth of the merge. */
+ if (log_baton->depth == svn_depth_immediates)
+ continue;
+
+ child = rel_path;
}
- }
+
+ potential_child = svn_dirent_join(log_baton->merge_target_abspath,
+ child, iterpool);
+
+ if (change->action == 'A'
+ || !svn_hash_gets(log_baton->operative_children,
+ potential_child))
+ {
+ svn_hash_sets(log_baton->operative_children,
+ apr_pstrdup(log_baton->result_pool,
+ potential_child),
+ apr_pstrdup(log_baton->result_pool, path));
+ }
+ }
}
+ svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
-/* Issue #3642.
+/* Find immediate subtrees of MERGE_TARGET_ABSPATH which would have
+ additional differences applied if record_mergeinfo_for_dir_merge() were
+ recording mergeinfo describing a merge at svn_depth_infinity, rather
+ than at DEPTH (which is assumed to be shallow; if
+ DEPTH == svn_depth_infinity then this function does nothing beyond
+ setting *OPERATIVE_CHILDREN to an empty hash).
- Find inoperative subtrees when record_mergeinfo_for_dir_merge() is
- recording mergeinfo describing a merge at depth=immediates.
-
- CHILDREN_WITH_MERGEINFO is the standard array of subtrees that are
- interesting from a merge tracking perspective, see the global comment
- 'THE CHILDREN_WITH_MERGEINFO ARRAY'.
-
- MERGE_SOURCE_REPOS_ABSPATH is the absolute repository path of the merge
+ MERGE_SOURCE_FSPATH is the absolute repository path of the merge
source. OLDEST_REV and YOUNGEST_REV are the revisions merged from
- MERGE_SOURCE_REPOS_ABSPATH to MERGE_TARGET_ABSPATH.
+ MERGE_SOURCE_FSPATH to MERGE_TARGET_ABSPATH.
- RA_SESSION points to MERGE_SOURCE_REPOS_ABSPATH.
+ RA_SESSION points to MERGE_SOURCE_FSPATH.
- Set *IMMEDIATE_CHILDREN to a hash (mapping const char * WC absolute
- paths to const char * repos absolute paths) containing all the
- subtrees which would be inoperative if MERGE_SOURCE_REPOS_PATH
- -r(OLDEST_REV - 1):YOUNGEST_REV were merged to MERGE_TARGET_ABSPATH
- at --depth infinity. The keys of the hash point to copies of the ABSPATH
- members of the svn_client__merge_path_t * in CHILDREN_WITH_MERGEINFO that
- are inoperative. The hash values are the key's corresponding repository
- absolute merge source path.
+ Set *OPERATIVE_CHILDREN to a hash (mapping const char * absolute
+ working copy paths to those path's const char * repos absolute paths)
+ containing all the immediate subtrees of MERGE_TARGET_ABSPATH which would
+ have a different diff applied if MERGE_SOURCE_FSPATH
+ -r(OLDEST_REV - 1):YOUNGEST_REV were merged to MERGE_TARGET_ABSPATH at
+ svn_depth_infinity rather than DEPTH.
- RESULT_POOL is used to allocate the contents of *IMMEDIATE_CHILDREN.
+ RESULT_POOL is used to allocate the contents of *OPERATIVE_CHILDREN.
SCRATCH_POOL is used for temporary allocations. */
static svn_error_t *
-get_inoperative_immediate_children(apr_hash_t **immediate_children,
- apr_array_header_t *children_with_mergeinfo,
- const char *merge_source_repos_abspath,
- svn_revnum_t oldest_rev,
- svn_revnum_t youngest_rev,
- const char *merge_target_abspath,
- svn_ra_session_t *ra_session,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+get_operative_immediate_children(apr_hash_t **operative_children,
+ const char *merge_source_fspath,
+ svn_revnum_t oldest_rev,
+ svn_revnum_t youngest_rev,
+ const char *merge_target_abspath,
+ svn_depth_t depth,
+ svn_wc_context_t *wc_ctx,
+ svn_ra_session_t *ra_session,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- int i;
- apr_pool_t *iterpool;
+ log_find_operative_subtree_baton_t log_baton;
SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(oldest_rev));
SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
SVN_ERR_ASSERT(oldest_rev <= youngest_rev);
- *immediate_children = apr_hash_make(result_pool);
- iterpool = svn_pool_create(scratch_pool);
+ *operative_children = apr_hash_make(result_pool);
- /* Find all the children in CHILDREN_WITH_MERGEINFO with the
- immediate_child_dir flag set and store them in *IMMEDIATE_CHILDREN. */
- for (i = 0; i < children_with_mergeinfo->nelts; i++)
+ if (depth == svn_depth_infinity)
+ return SVN_NO_ERROR;
+
+ /* Now remove any paths from *OPERATIVE_CHILDREN that are inoperative when
+ merging MERGE_SOURCE_REPOS_PATH -r(OLDEST_REV - 1):YOUNGEST_REV to
+ MERGE_TARGET_ABSPATH at --depth infinity. */
+ log_baton.operative_children = *operative_children;
+ log_baton.merge_source_fspath = merge_source_fspath;
+ log_baton.merge_target_abspath = merge_target_abspath;
+ log_baton.depth = depth;
+ log_baton.wc_ctx = wc_ctx;
+ log_baton.result_pool = result_pool;
+
+ SVN_ERR(get_log(ra_session, "", youngest_rev, oldest_rev,
+ TRUE, /* discover_changed_paths */
+ log_find_operative_subtree_revs,
+ &log_baton, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* Helper for record_mergeinfo_for_dir_merge(): Identify which elements of
+ CHILDREN_WITH_MERGEINFO need new mergeinfo set to accurately
+ describe a merge, what inheritance type such new mergeinfo should have,
+ and what subtrees can be ignored altogether.
+
+ For each svn_client__merge_path_t CHILD in CHILDREN_WITH_MERGEINFO,
+ set CHILD->RECORD_MERGEINFO and CHILD->RECORD_NONINHERITABLE to true
+ if the subtree needs mergeinfo to describe the merge and if that
+ mergeinfo should be non-inheritable respectively.
+
+ If OPERATIVE_MERGE is true, then the merge being described is operative
+ as per subtree_touched_by_merge(). OPERATIVE_MERGE is false otherwise.
+
+ MERGED_RANGE, MERGEINFO_FSPATH, DEPTH, NOTIFY_B, and MERGE_B are all
+ cascaded from record_mergeinfo_for_dir_merge's arguments of the same
+ names.
+
+ SCRATCH_POOL is used for temporary allocations.
+*/
+static svn_error_t *
+flag_subtrees_needing_mergeinfo(svn_boolean_t operative_merge,
+ const svn_merge_range_t *merged_range,
+ apr_array_header_t *children_with_mergeinfo,
+ const char *mergeinfo_fspath,
+ svn_depth_t depth,
+ merge_cmd_baton_t *merge_b,
+ apr_pool_t *scratch_pool)
+{
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ int i;
+ apr_hash_t *operative_immediate_children = NULL;
+
+ assert(! merge_b->dry_run);
+
+ if (!merge_b->record_only
+ && merged_range->start <= merged_range->end
+ && (depth < svn_depth_infinity))
+ SVN_ERR(get_operative_immediate_children(
+ &operative_immediate_children,
+ mergeinfo_fspath, merged_range->start + 1, merged_range->end,
+ merge_b->target->abspath, depth, merge_b->ctx->wc_ctx,
+ merge_b->ra_session1, scratch_pool, iterpool));
+
+ /* Issue #4056: Walk NOTIFY_B->CHILDREN_WITH_MERGEINFO reverse depth-first
+ order. This way each child knows if it has operative missing/switched
+ children which necessitates non-inheritable mergeinfo. */
+ for (i = children_with_mergeinfo->nelts - 1; i >= 0; i--)
{
svn_client__merge_path_t *child =
- APR_ARRAY_IDX(children_with_mergeinfo, i, svn_client__merge_path_t *);
+ APR_ARRAY_IDX(children_with_mergeinfo, i,
+ svn_client__merge_path_t *);
- svn_pool_clear(iterpool);
+ /* Can't record mergeinfo on something that isn't here. */
+ if (child->absent)
+ continue;
- if (child->immediate_child_dir)
- apr_hash_set(*immediate_children,
- apr_pstrdup(result_pool, child->abspath),
- APR_HASH_KEY_STRING,
- svn_fspath__join(merge_source_repos_abspath,
- svn_dirent_is_child(merge_target_abspath,
- child->abspath,
- iterpool),
- result_pool));
- }
+ /* Verify that remove_children_with_deleted_mergeinfo() did its job */
+ assert((i == 0)
+ ||! merge_b->paths_with_deleted_mergeinfo
+ || !svn_hash_gets(merge_b->paths_with_deleted_mergeinfo,
+ child->abspath));
- svn_pool_destroy(iterpool);
+ /* Don't record mergeinfo on skipped paths. */
+ if (svn_hash_gets(merge_b->skipped_abspaths, child->abspath))
+ continue;
- /* Now remove any paths from *IMMEDIATE_CHILDREN that are inoperative when
- merging MERGE_SOURCE_REPOS_PATH -r(OLDEST_REV - 1):YOUNGEST_REV to
- MERGE_TARGET_ABSPATH at --depth infinity. */
- if (apr_hash_count(*immediate_children))
- {
- apr_array_header_t *log_targets = apr_array_make(scratch_pool, 1,
- sizeof(const char *));
- APR_ARRAY_PUSH(log_targets, const char *) = "";
- SVN_ERR(svn_ra_get_log2(ra_session, log_targets, youngest_rev,
- oldest_rev, 0, TRUE, FALSE, FALSE,
- NULL, log_find_operative_subtree_revs,
- *immediate_children, scratch_pool));
+ /* ### ptb: Yes, we could combine the following into a single
+ ### conditional, but clarity would suffer (even more than
+ ### it does now). */
+ if (i == 0)
+ {
+ /* Always record mergeinfo on the merge target. */
+ child->record_mergeinfo = TRUE;
+ }
+ else if (merge_b->record_only && !merge_b->reintegrate_merge)
+ {
+ /* Always record mergeinfo for --record-only merges. */
+ child->record_mergeinfo = TRUE;
+ }
+ else if (child->immediate_child_dir
+ && !child->pre_merge_mergeinfo
+ && operative_immediate_children
+ && svn_hash_gets(operative_immediate_children, child->abspath))
+ {
+ /* We must record mergeinfo on those issue #3642 children
+ that are operative at a greater depth. */
+ child->record_mergeinfo = TRUE;
+ }
+
+ if (operative_merge
+ && subtree_touched_by_merge(child->abspath, merge_b, iterpool))
+ {
+ svn_pool_clear(iterpool);
+
+ /* This subtree was affected by the merge. */
+ child->record_mergeinfo = TRUE;
+
+ /* Were any CHILD's missing children skipped by the merge?
+ If not, then CHILD's missing children don't need to be
+ considered when recording mergeinfo describing the merge. */
+ if (! merge_b->reintegrate_merge
+ && child->missing_child
+ && !path_is_subtree(child->abspath,
+ merge_b->skipped_abspaths,
+ iterpool))
+ {
+ child->missing_child = FALSE;
+ }
+
+ /* If CHILD has an immediate switched child or children and
+ none of these were touched by the merge, then we don't need
+ need to do any special handling of those switched subtrees
+ (e.g. record non-inheritable mergeinfo) when recording
+ mergeinfo describing the merge. */
+ if (child->switched_child)
+ {
+ int j;
+ svn_boolean_t operative_switched_child = FALSE;
+
+ for (j = i + 1;
+ j < children_with_mergeinfo->nelts;
+ j++)
+ {
+ svn_client__merge_path_t *potential_child =
+ APR_ARRAY_IDX(children_with_mergeinfo, j,
+ svn_client__merge_path_t *);
+ if (!svn_dirent_is_ancestor(child->abspath,
+ potential_child->abspath))
+ break;
+
+ /* POTENTIAL_CHILD is a subtree of CHILD, but is it
+ an immediate child? */
+ if (strcmp(child->abspath,
+ svn_dirent_dirname(potential_child->abspath,
+ iterpool)))
+ continue;
+
+ if (potential_child->switched
+ && potential_child->record_mergeinfo)
+ {
+ operative_switched_child = TRUE;
+ break;
+ }
+ }
+
+ /* Can we treat CHILD as if it has no switched children? */
+ if (! operative_switched_child)
+ child->switched_child = FALSE;
+ }
+ }
+
+ if (child->record_mergeinfo)
+ {
+ /* We need to record mergeinfo, but should that mergeinfo be
+ non-inheritable? */
+ svn_node_kind_t path_kind;
+ SVN_ERR(svn_wc_read_kind2(&path_kind, merge_b->ctx->wc_ctx,
+ child->abspath, FALSE, FALSE, iterpool));
+
+ /* Only directories can have non-inheritable mergeinfo. */
+ if (path_kind == svn_node_dir)
+ {
+ /* There are two general cases where non-inheritable mergeinfo
+ is required:
+
+ 1) There merge target has missing subtrees (due to authz
+ restrictions, switched subtrees, or a shallow working
+ copy).
+
+ 2) The operational depth of the merge itself is shallow. */
+
+ /* We've already determined the first case. */
+ child->record_noninheritable =
+ child->missing_child || child->switched_child;
+
+ /* The second case requires a bit more work. */
+ if (i == 0)
+ {
+ /* If CHILD is the root of the merge target and the
+ operational depth is empty or files, then the mere
+ existence of operative immediate children means we
+ must record non-inheritable mergeinfo.
+
+ ### What about svn_depth_immediates? In that case
+ ### the merge target needs only normal inheritable
+ ### mergeinfo and the target's immediate children will
+ ### get non-inheritable mergeinfo, assuming they
+ ### need even that. */
+ if (depth < svn_depth_immediates
+ && operative_immediate_children
+ && apr_hash_count(operative_immediate_children))
+ child->record_noninheritable = TRUE;
+ }
+ else if (depth == svn_depth_immediates)
+ {
+ /* An immediate directory child of the merge target, which
+ was affected by a --depth=immediates merge, needs
+ non-inheritable mergeinfo. */
+ if (svn_hash_gets(operative_immediate_children,
+ child->abspath))
+ child->record_noninheritable = TRUE;
+ }
+ }
+ }
+ else /* child->record_mergeinfo */
+ {
+ /* If CHILD is in NOTIFY_B->CHILDREN_WITH_MERGEINFO simply
+ because it had no explicit mergeinfo of its own at the
+ start of the merge but is the child of of some path with
+ non-inheritable mergeinfo, then the explicit mergeinfo it
+ has *now* was set by get_mergeinfo_paths() -- see criteria
+ 3 in that function's doc string. So since CHILD->ABSPATH
+ was not touched by the merge we can remove the
+ mergeinfo. */
+ if (child->child_of_noninheritable)
+ SVN_ERR(svn_client__record_wc_mergeinfo(child->abspath,
+ NULL, FALSE,
+ merge_b->ctx,
+ iterpool));
+ }
}
+
+ svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
@@ -7296,7 +8372,7 @@ get_inoperative_immediate_children(apr_hash_t **immediate_children,
If RESULT_CATALOG is NULL then record mergeinfo describing a merge of
MERGED_RANGE->START:MERGED_RANGE->END from the repository relative path
- MERGEINFO_PATH to the merge target (and possibly its subtrees) described
+ MERGEINFO_FSPATH to the merge target (and possibly its subtrees) described
by NOTIFY_B->CHILDREN_WITH_MERGEINFO -- see the global comment
'THE CHILDREN_WITH_MERGEINFO ARRAY'. Obviously this should only
be called if recording mergeinfo -- see doc string for RECORD_MERGEINFO().
@@ -7309,45 +8385,37 @@ get_inoperative_immediate_children(apr_hash_t **immediate_children,
DEPTH, NOTIFY_B, MERGE_B, and SQUELCH_MERGEINFO_NOTIFICATIONS are all
cascaded from do_directory_merge's arguments of the same names.
+
+ SCRATCH_POOL is used for temporary allocations.
*/
static svn_error_t *
record_mergeinfo_for_dir_merge(svn_mergeinfo_catalog_t result_catalog,
const svn_merge_range_t *merged_range,
- const char *mergeinfo_path,
+ const char *mergeinfo_fspath,
+ apr_array_header_t *children_with_mergeinfo,
svn_depth_t depth,
svn_boolean_t squelch_mergeinfo_notifications,
- notification_receiver_baton_t *notify_b,
merge_cmd_baton_t *merge_b,
- apr_pool_t *pool)
+ apr_pool_t *scratch_pool)
{
int i;
svn_boolean_t is_rollback = (merged_range->start > merged_range->end);
- svn_boolean_t operative_merge = FALSE;
- apr_hash_t *inoperative_immediate_children = NULL;
+ svn_boolean_t operative_merge;
/* Update the WC mergeinfo here to account for our new
merges, minus any unresolved conflicts and skips. */
/* We need a scratch pool for iterations below. */
- apr_pool_t *iterpool = svn_pool_create(pool);
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
- svn_merge_range_t range;
+ svn_merge_range_t range = *merged_range;
- range.start = merged_range->start;
- range.end = merged_range->end;
- range.inheritable = merged_range->inheritable;
+ assert(! merge_b->dry_run);
- /* Regardless of what subtrees in MERGE_B->TARGET_ABSPATH might be missing
+ /* Regardless of what subtrees in MERGE_B->target->abspath might be missing
could this merge have been operative? */
- if ((notify_b->merged_abspaths
- && apr_hash_count(notify_b->merged_abspaths))
- || (notify_b->skipped_abspaths
- && apr_hash_count(notify_b->skipped_abspaths))
- || (notify_b->added_abspaths
- && apr_hash_count(notify_b->added_abspaths))
- || (notify_b->tree_conflicted_abspaths
- && apr_hash_count(notify_b->tree_conflicted_abspaths)))
- operative_merge = TRUE;
+ operative_merge = subtree_touched_by_merge(merge_b->target->abspath,
+ merge_b, iterpool);
/* If this couldn't be an operative merge then don't bother with
the added complexity (and user confusion) of non-inheritable ranges.
@@ -7355,106 +8423,44 @@ record_mergeinfo_for_dir_merge(svn_mergeinfo_catalog_t result_catalog,
if (!operative_merge)
range.inheritable = TRUE;
- /* Remove absent children at or under TARGET_WCPATH from
+ /* Remove absent children at or under MERGE_B->target->abspath from
NOTIFY_B->CHILDREN_WITH_MERGEINFO
before we calculate the merges performed. */
- remove_absent_children(merge_b->target_abspath,
- notify_b->children_with_mergeinfo, notify_b);
-
-
- /* Find all issue #3642 children (i.e immediate child directories of the
- merge target, with no pre-existing explicit mergeinfo, during a --depth
- immediates merge). Stash those that are inoperative at any depth in
- INOPERATIVE_IMMEDIATE_CHILDREN. */
- if (!merge_b->record_only && range.start <= range.end
- && depth == svn_depth_immediates)
- SVN_ERR(get_inoperative_immediate_children(
- &inoperative_immediate_children,
- notify_b->children_with_mergeinfo,
- mergeinfo_path, range.start + 1, range.end,
- merge_b->target_abspath, merge_b->ra_session1,
- pool, iterpool));
-
- /* Record mergeinfo on any subtree affected by the merge or for
- every subtree if this is a --record-only merge. Always record
- mergeinfo on the merge target CHILDREN_WITH_MERGEINFO[0]. */
- for (i = 0; i < notify_b->children_with_mergeinfo->nelts; i++)
+ remove_absent_children(merge_b->target->abspath,
+ children_with_mergeinfo);
+
+ /* Determine which subtrees of interest need mergeinfo recorded... */
+ SVN_ERR(flag_subtrees_needing_mergeinfo(operative_merge, &range,
+ children_with_mergeinfo,
+ mergeinfo_fspath, depth,
+ merge_b, iterpool));
+
+ /* ...and then record it. */
+ for (i = 0; i < children_with_mergeinfo->nelts; i++)
{
const char *child_repos_path;
- const char *child_merge_src_canon_path;
- apr_array_header_t *child_merge_rangelist;
+ const char *child_merge_src_fspath;
+ svn_rangelist_t *child_merge_rangelist;
apr_hash_t *child_merges;
svn_client__merge_path_t *child =
- APR_ARRAY_IDX(notify_b->children_with_mergeinfo, i,
+ APR_ARRAY_IDX(children_with_mergeinfo, i,
svn_client__merge_path_t *);
SVN_ERR_ASSERT(child);
- /* Can't record mereginfo on something that isn't here. */
- if (child->absent)
- continue;
-
svn_pool_clear(iterpool);
- /* If CHILD is a subtree, this is not a record only merge, and
- CHILD was not affected by the merge then we don't need to
- record mergeinfo. If this is a record only merge being done
- as part of a reintegrate merge then we need to check if CHILD
- was affected by the merge. */
- if (i > 0 /* Always record mergeinfo on the merge target. */
- && (!merge_b->record_only || merge_b->reintegrate_merge)
- && (!child->immediate_child_dir || child->pre_merge_mergeinfo)
- && (!operative_merge
- || !subtree_touched_by_merge(child->abspath, notify_b,
- iterpool)))
+ if (child->record_mergeinfo)
{
- /* If CHILD is in NOTIFY_B->CHILDREN_WITH_MERGEINFO simply
- because it had no explicit mergeinfo of its own at the
- start of the merge but is the child of of some path with
- non-inheritable mergeinfo, then the explicit mergeinfo it
- has *now* was set by get_mergeinfo_paths() -- see criteria
- 3 in that function's doc string. So since CHILD->ABSPATH
- was not touched by the merge we can remove the
- mergeinfo. */
- if (child->child_of_noninheritable)
- {
- SVN_ERR(svn_client__record_wc_mergeinfo(child->abspath,
- NULL, FALSE,
- merge_b->ctx,
- iterpool));
- }
- }
- else /* Record mergeinfo on CHILD. */
- {
- svn_boolean_t child_is_deleted;
- svn_boolean_t rangelist_inheritance;
-
- /* If CHILD is deleted we don't need to set mergeinfo on it. */
- SVN_ERR(svn_wc__node_is_status_deleted(&child_is_deleted,
- merge_b->ctx->wc_ctx,
- child->abspath, iterpool));
- if (child_is_deleted)
- continue;
-
- /* We don't need to record mergeinfo on those issue #3642 children
- that are inoperative at any depth. */
- if (inoperative_immediate_children
- && apr_hash_get(inoperative_immediate_children,
- child->abspath,
- APR_HASH_KEY_STRING))
- continue;
-
- child_repos_path = svn_dirent_is_child(merge_b->target_abspath,
- child->abspath, iterpool);
- if (!child_repos_path)
- child_repos_path = "";
-
- child_merge_src_canon_path = svn_fspath__join(mergeinfo_path,
- child_repos_path,
- iterpool);
+ child_repos_path = svn_dirent_skip_ancestor(merge_b->target->abspath,
+ child->abspath);
+ SVN_ERR_ASSERT(child_repos_path != NULL);
+ child_merge_src_fspath = svn_fspath__join(mergeinfo_fspath,
+ child_repos_path,
+ iterpool);
/* Filter any ranges from each child's natural history before
setting mergeinfo describing the merge. */
SVN_ERR(filter_natural_history_from_mergeinfo(
- &child_merge_rangelist, child_merge_src_canon_path,
+ &child_merge_rangelist, child_merge_src_fspath,
child->implicit_mergeinfo, &range, iterpool));
if (child_merge_rangelist->nelts == 0)
@@ -7462,40 +8468,25 @@ record_mergeinfo_for_dir_merge(svn_mergeinfo_catalog_t result_catalog,
if (!squelch_mergeinfo_notifications)
{
- svn_wc_notify_t *notify = svn_wc_create_notify(
- child->abspath,
- svn_wc_notify_merge_record_info_begin,
- iterpool);
- notify->merge_range = svn_merge_range_dup(merged_range,
- iterpool);
- merge_b->ctx->notify_func2(merge_b->ctx->notify_baton2, notify,
- iterpool);
+ /* If the merge source has a gap, then don't mention
+ those gap revisions in the notification. */
+ remove_source_gap(&range, merge_b->implicit_src_gap);
+ notify_mergeinfo_recording(child->abspath, &range,
+ merge_b->ctx, iterpool);
}
/* If we are here we know we will be recording some mergeinfo, but
- before we do set override mergeinfo on skipped paths so they
- don't incorrectly inherit the mergeinfo we are about to set.
- We only need to do this once. If we are dealing with a subtree
- (i.e. i != 0) that was skipped then don't record mergeinfo on
- it. The earlier call to record_skips will already have taken
- care of this. */
+ before we do, set override mergeinfo on skipped paths so they
+ don't incorrectly inherit the mergeinfo we are about to set. */
if (i == 0)
- SVN_ERR(record_skips(mergeinfo_path,
- child_merge_rangelist,
- is_rollback, notify_b, merge_b, iterpool));
- else if (notify_b->skipped_abspaths
- && apr_hash_get(notify_b->skipped_abspaths, child->abspath,
- APR_HASH_KEY_STRING))
- continue;
+ SVN_ERR(record_skips_in_mergeinfo(mergeinfo_fspath,
+ child_merge_rangelist,
+ is_rollback, merge_b, iterpool));
- SVN_ERR(calculate_merge_inheritance(child_merge_rangelist,
- &rangelist_inheritance,
- child->abspath,
- i == 0,
- child->missing_child,
- depth,
- merge_b->ctx->wc_ctx,
- iterpool));
+ /* We may need to record non-inheritable mergeinfo that applies
+ only to CHILD->ABSPATH. */
+ if (child->record_noninheritable)
+ svn_rangelist__set_inheritance(child_merge_rangelist, FALSE);
/* If CHILD has inherited mergeinfo set it before
recording the first merge range. */
@@ -7540,7 +8531,7 @@ record_mergeinfo_for_dir_merge(svn_mergeinfo_catalog_t result_catalog,
were no copies in MERGE_SOURCE_PATH's history going back to
RANGE->START then we know that
MERGE_SOURCE_PATH:MERGED_RANGE->START exists too and the two
- describe and unbroken line of history and thus
+ describe an unbroken line of history, and thus
MERGE_SOURCE_PATH:MERGED_RANGE->START:
MERGE_SOURCE_PATH:MERGED_RANGE->END is a valid description of
the merge -- see normalize_merge_sources() and the global comment
@@ -7559,33 +8550,25 @@ record_mergeinfo_for_dir_merge(svn_mergeinfo_catalog_t result_catalog,
&& (!is_rollback))
{
svn_error_t *err;
- svn_opt_revision_t peg_revision;
svn_mergeinfo_t subtree_history_as_mergeinfo;
- apr_array_header_t *child_merge_src_rangelist;
- const char *old_session_url;
- const char *subtree_mergeinfo_url =
- svn_path_url_add_component2(merge_b->repos_root_url,
- child_merge_src_canon_path + 1,
- iterpool);
+ svn_rangelist_t *child_merge_src_rangelist;
+ svn_client__pathrev_t *subtree_mergeinfo_pathrev
+ = svn_client__pathrev_create_with_relpath(
+ merge_b->target->loc.repos_root_url,
+ merge_b->target->loc.repos_uuid,
+ merged_range->end, child_merge_src_fspath + 1,
+ iterpool);
/* Confirm that the naive mergeinfo we want to set on
CHILD->ABSPATH both exists and is part of
(MERGE_SOURCE_PATH+CHILD_REPOS_PATH)@MERGED_RANGE->END's
history. */
- peg_revision.kind = svn_opt_revision_number;
-
/* We know MERGED_RANGE->END is younger than MERGE_RANGE->START
because we only do this for forward merges. */
- peg_revision.value.number = merged_range->end;
- SVN_ERR(svn_client__ensure_ra_session_url(&old_session_url,
- merge_b->ra_session2,
- subtree_mergeinfo_url,
- iterpool));
err = svn_client__get_history_as_mergeinfo(
&subtree_history_as_mergeinfo, NULL,
- subtree_mergeinfo_url, &peg_revision,
- MAX(merged_range->start, merged_range->end),
- MIN(merged_range->start, merged_range->end),
+ subtree_mergeinfo_pathrev,
+ merged_range->end, merged_range->start,
merge_b->ra_session2, merge_b->ctx, iterpool);
/* If CHILD is a subtree it may have been deleted prior to
@@ -7599,31 +8582,31 @@ record_mergeinfo_for_dir_merge(svn_mergeinfo_catalog_t result_catalog,
}
else
{
- child_merge_src_rangelist = apr_hash_get(
- subtree_history_as_mergeinfo,
- child_merge_src_canon_path,
- APR_HASH_KEY_STRING);
+ child_merge_src_rangelist = svn_hash_gets(
+ subtree_history_as_mergeinfo,
+ child_merge_src_fspath);
SVN_ERR(svn_rangelist_intersect(&child_merge_rangelist,
child_merge_rangelist,
child_merge_src_rangelist,
FALSE, iterpool));
- if (!rangelist_inheritance)
+ if (child->record_noninheritable)
svn_rangelist__set_inheritance(child_merge_rangelist,
FALSE);
}
-
- if (old_session_url)
- SVN_ERR(svn_ra_reparent(merge_b->ra_session2,
- old_session_url, iterpool));
}
- apr_hash_set(child_merges, child->abspath, APR_HASH_KEY_STRING,
- child_merge_rangelist);
+ svn_hash_sets(child_merges, child->abspath, child_merge_rangelist);
SVN_ERR(update_wc_mergeinfo(result_catalog,
child->abspath,
- child_merge_src_canon_path,
+ child_merge_src_fspath,
child_merges, is_rollback,
merge_b->ctx, iterpool));
+
+ /* Once is enough: We don't need to record mergeinfo describing
+ the merge a second. If CHILD->ABSPATH is in
+ MERGE_B->ADDED_ABSPATHS, we'll do just that, so remove the
+ former from the latter. */
+ svn_hash_sets(merge_b->added_abspaths, child->abspath, NULL);
}
/* Elide explicit subtree mergeinfo whether or not we updated it. */
@@ -7640,7 +8623,7 @@ record_mergeinfo_for_dir_merge(svn_mergeinfo_catalog_t result_catalog,
int j = i - 1;
for (; j > 0; j--)
{
- parent = APR_ARRAY_IDX(notify_b->children_with_mergeinfo,
+ parent = APR_ARRAY_IDX(children_with_mergeinfo,
j, svn_client__merge_path_t *);
if (parent
&& parent->switched
@@ -7659,7 +8642,7 @@ record_mergeinfo_for_dir_merge(svn_mergeinfo_catalog_t result_catalog,
elide that when the merge is complete. */
SVN_ERR(svn_client__elide_mergeinfo(
child->abspath,
- in_switched_subtree ? NULL : merge_b->target_abspath,
+ in_switched_subtree ? NULL : merge_b->target->abspath,
merge_b->ctx, iterpool));
}
} /* (i = 0; i < notify_b->children_with_mergeinfo->nelts; i++) */
@@ -7672,11 +8655,11 @@ record_mergeinfo_for_dir_merge(svn_mergeinfo_catalog_t result_catalog,
Record mergeinfo describing a merge of
MERGED_RANGE->START:MERGED_RANGE->END from the repository relative path
- MERGEINFO_PATH to each path in NOTIFY_B->ADDED_ABSPATHS which has explicit
+ MERGEINFO_FSPATH to each path in ADDED_ABSPATHS which has explicit
mergeinfo or is the immediate child of a parent with explicit
non-inheritable mergeinfo.
- DEPTH, NOTIFY_B, MERGE_B, and SQUELCH_MERGEINFO_NOTIFICATIONS, are
+ DEPTH, MERGE_B, and SQUELCH_MERGEINFO_NOTIFICATIONS, are
cascaded from do_directory_merge's arguments of the same names.
Note: This is intended to support forward merges only, i.e.
@@ -7685,10 +8668,10 @@ record_mergeinfo_for_dir_merge(svn_mergeinfo_catalog_t result_catalog,
static svn_error_t *
record_mergeinfo_for_added_subtrees(
svn_merge_range_t *merged_range,
- const char *mergeinfo_path,
+ const char *mergeinfo_fspath,
svn_depth_t depth,
svn_boolean_t squelch_mergeinfo_notifications,
- notification_receiver_baton_t *notify_b,
+ apr_hash_t *added_abspaths,
merge_cmd_baton_t *merge_b,
apr_pool_t *pool)
{
@@ -7696,26 +8679,24 @@ record_mergeinfo_for_added_subtrees(
apr_hash_index_t *hi;
/* If no paths were added by the merge then we have nothing to do. */
- if (!notify_b->added_abspaths)
+ if (!added_abspaths)
return SVN_NO_ERROR;
SVN_ERR_ASSERT(merged_range->start < merged_range->end);
iterpool = svn_pool_create(pool);
- for (hi = apr_hash_first(pool, notify_b->added_abspaths); hi;
- hi = apr_hash_next(hi))
+ for (hi = apr_hash_first(pool, added_abspaths); hi; hi = apr_hash_next(hi))
{
const char *added_abspath = svn__apr_hash_index_key(hi);
const char *dir_abspath;
svn_mergeinfo_t parent_mergeinfo;
svn_mergeinfo_t added_path_mergeinfo;
- svn_boolean_t inherited; /* used multiple times, but ignored */
- apr_pool_clear(iterpool);
+ svn_pool_clear(iterpool);
dir_abspath = svn_dirent_dirname(added_abspath, iterpool);
/* Grab the added path's explicit mergeinfo. */
- SVN_ERR(svn_client__get_wc_mergeinfo(&added_path_mergeinfo, &inherited,
+ SVN_ERR(svn_client__get_wc_mergeinfo(&added_path_mergeinfo, NULL,
svn_mergeinfo_explicit,
added_abspath, NULL, NULL, FALSE,
merge_b->ctx, iterpool, iterpool));
@@ -7723,7 +8704,7 @@ record_mergeinfo_for_added_subtrees(
/* If the added path doesn't have explicit mergeinfo, does its immediate
parent have non-inheritable mergeinfo? */
if (!added_path_mergeinfo)
- SVN_ERR(svn_client__get_wc_mergeinfo(&parent_mergeinfo, &inherited,
+ SVN_ERR(svn_client__get_wc_mergeinfo(&parent_mergeinfo, NULL,
svn_mergeinfo_explicit,
dir_abspath, NULL, NULL, FALSE,
merge_b->ctx,
@@ -7732,49 +8713,37 @@ record_mergeinfo_for_added_subtrees(
if (added_path_mergeinfo
|| svn_mergeinfo__is_noninheritable(parent_mergeinfo, iterpool))
{
- svn_client__merge_path_t *target_merge_path =
- APR_ARRAY_IDX(notify_b->children_with_mergeinfo, 0,
- svn_client__merge_path_t *);
- svn_merge_range_t *rng;
svn_node_kind_t added_path_kind;
svn_mergeinfo_t merge_mergeinfo;
svn_mergeinfo_t adds_history_as_mergeinfo;
- apr_array_header_t *rangelist;
+ svn_rangelist_t *rangelist;
const char *rel_added_path;
- const char *added_path_mergeinfo_path;
- const char *old_session_url;
- const char *added_path_mergeinfo_url;
- svn_opt_revision_t peg_revision;
+ const char *added_path_mergeinfo_fspath;
+ svn_client__pathrev_t *added_path_pathrev;
- SVN_ERR(svn_wc_read_kind(&added_path_kind, merge_b->ctx->wc_ctx,
- added_abspath, FALSE, iterpool));
+ SVN_ERR(svn_wc_read_kind2(&added_path_kind, merge_b->ctx->wc_ctx,
+ added_abspath, FALSE, FALSE, iterpool));
/* Calculate the naive mergeinfo describing the merge. */
merge_mergeinfo = apr_hash_make(iterpool);
- rangelist = apr_array_make(iterpool, 1, sizeof(svn_merge_range_t *));
- rng = svn_merge_range_dup(merged_range, iterpool);
- if (added_path_kind == svn_node_file)
- rng->inheritable = TRUE;
- else
- rng->inheritable =
- (!(depth == svn_depth_infinity
- || depth == svn_depth_immediates));
- APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = rng;
-
- /* Create the new mergeinfo path for
- added_path's mergeinfo. */
-
- /* abs_added_path had better be a child of abs_target_path
- or something is *really* wrong. */
-
- rel_added_path = svn_dirent_is_child(target_merge_path->abspath,
+ rangelist = svn_rangelist__initialize(
+ merged_range->start, merged_range->end,
+ ((added_path_kind == svn_node_file)
+ || (!(depth == svn_depth_infinity
+ || depth == svn_depth_immediates))),
+ iterpool);
+
+ /* Create the new mergeinfo path for added_path's mergeinfo.
+ (added_abspath had better be a child of MERGE_B->target->abspath
+ or something is *really* wrong.) */
+ rel_added_path = svn_dirent_is_child(merge_b->target->abspath,
added_abspath, iterpool);
SVN_ERR_ASSERT(rel_added_path);
- added_path_mergeinfo_path = svn_dirent_join(mergeinfo_path,
- rel_added_path,
- iterpool);
- apr_hash_set(merge_mergeinfo, added_path_mergeinfo_path,
- APR_HASH_KEY_STRING, rangelist);
+ added_path_mergeinfo_fspath = svn_fspath__join(mergeinfo_fspath,
+ rel_added_path,
+ iterpool);
+ svn_hash_sets(merge_mergeinfo, added_path_mergeinfo_fspath,
+ rangelist);
/* Don't add new mergeinfo to describe the merge if that mergeinfo
contains non-existent merge sources.
@@ -7788,37 +8757,29 @@ record_mergeinfo_for_added_subtrees(
will describe non-existent merge sources. To avoid this we get
take the intersection of the naive mergeinfo with
MERGEINFO_PATH/rel_added_path's history. */
- added_path_mergeinfo_url =
- svn_path_url_add_component2(merge_b->repos_root_url,
- added_path_mergeinfo_path + 1,
- iterpool);
- peg_revision.kind = svn_opt_revision_number;
- peg_revision.value.number = MAX(merged_range->start,
- merged_range->end);
- SVN_ERR(svn_client__ensure_ra_session_url(
- &old_session_url, merge_b->ra_session2,
- added_path_mergeinfo_url, iterpool));
+ added_path_pathrev = svn_client__pathrev_create_with_relpath(
+ merge_b->target->loc.repos_root_url,
+ merge_b->target->loc.repos_uuid,
+ MAX(merged_range->start, merged_range->end),
+ added_path_mergeinfo_fspath + 1, iterpool);
SVN_ERR(svn_client__get_history_as_mergeinfo(
&adds_history_as_mergeinfo, NULL,
- added_path_mergeinfo_url, &peg_revision,
+ added_path_pathrev,
MAX(merged_range->start, merged_range->end),
MIN(merged_range->start, merged_range->end),
merge_b->ra_session2, merge_b->ctx, iterpool));
- if (old_session_url)
- SVN_ERR(svn_ra_reparent(merge_b->ra_session2,
- old_session_url, iterpool));
-
SVN_ERR(svn_mergeinfo_intersect2(&merge_mergeinfo,
merge_mergeinfo,
adds_history_as_mergeinfo,
FALSE, iterpool, iterpool));
- /* Combine the explict mergeinfo on the added path (if any)
+ /* Combine the explicit mergeinfo on the added path (if any)
with the mergeinfo describing this merge. */
if (added_path_mergeinfo)
- SVN_ERR(svn_mergeinfo_merge(merge_mergeinfo, added_path_mergeinfo,
- iterpool));
+ SVN_ERR(svn_mergeinfo_merge2(merge_mergeinfo,
+ added_path_mergeinfo,
+ iterpool, iterpool));
SVN_ERR(svn_client__record_wc_mergeinfo(
added_abspath, merge_mergeinfo,
!squelch_mergeinfo_notifications, merge_b->ctx, iterpool));
@@ -7831,23 +8792,21 @@ record_mergeinfo_for_added_subtrees(
/* Baton structure for log_noop_revs. */
typedef struct log_noop_baton_t
{
- merge_cmd_baton_t *merge_b;
-
/* See the comment 'THE CHILDREN_WITH_MERGEINFO ARRAY' at the start
of this file.*/
apr_array_header_t *children_with_mergeinfo;
- /* Absolute repository path of MERGE_B->TARGET_ABSPATH. */
- const char *target_repos_abs;
-
/* Absolute repository path of younger of the two merge sources
being diffed. */
- const char *source_repos_abs;
+ const char *source_fspath;
+
+ /* The merge target. */
+ const merge_target_t *target;
/* Initially empty rangelists allocated in POOL. The rangelists are
- * populated across multiple invocations of the log_noop_revs(). */
- apr_array_header_t *operative_ranges;
- apr_array_header_t *merged_ranges;
+ * populated across multiple invocations of log_noop_revs(). */
+ svn_rangelist_t *operative_ranges;
+ svn_rangelist_t *merged_ranges;
/* Pool to store the rangelists. */
apr_pool_t *pool;
@@ -7864,7 +8823,7 @@ typedef struct log_noop_baton_t
This turns the special case of a single incoming younger range into O(1).
*/
static svn_error_t *
-rangelist_merge_revision(apr_array_header_t *rangelist,
+rangelist_merge_revision(svn_rangelist_t *rangelist,
svn_revnum_t revision,
apr_pool_t *result_pool)
{
@@ -7898,11 +8857,14 @@ rangelist_merge_revision(apr_array_header_t *rangelist,
Add LOG_ENTRY->REVISION to BATON->OPERATIVE_RANGES.
If LOG_ENTRY->REVISION has already been fully merged to
- MERGE_B->TARGET_ABSPATH per the mergeinfo in CHILDREN_WITH_MERGEINFO,
+ BATON->target->abspath per the mergeinfo in BATON->CHILDREN_WITH_MERGEINFO,
then add LOG_ENTRY->REVISION to BATON->MERGED_RANGES.
Use SCRATCH_POOL for temporary allocations. Allocate additions to
BATON->MERGED_RANGES and BATON->OPERATIVE_RANGES in BATON->POOL.
+
+ Note: This callback must be invoked from oldest LOG_ENTRY->REVISION
+ to youngest LOG_ENTRY->REVISION -- see rangelist_merge_revision().
*/
static svn_error_t *
log_noop_revs(void *baton,
@@ -7916,6 +8878,11 @@ log_noop_revs(void *baton,
revision = log_entry->revision;
+ /* It's possible that authz restrictions on the merge source prevent us
+ from knowing about any of the changes for LOG_ENTRY->REVISION. */
+ if (!log_entry->changed_paths2)
+ return SVN_NO_ERROR;
+
/* Unconditionally add LOG_ENTRY->REVISION to BATON->OPERATIVE_MERGES. */
SVN_ERR(rangelist_merge_revision(log_gap_baton->operative_ranges,
revision,
@@ -7923,57 +8890,56 @@ log_noop_revs(void *baton,
/* Examine each path affected by LOG_ENTRY->REVISION. If the explicit or
inherited mergeinfo for *all* of the corresponding paths under
- MERGE_B->TARGET_ABSPATH reflects that LOG_ENTRY->REVISION has been
+ BATON->target->abspath reflects that LOG_ENTRY->REVISION has been
merged, then add LOG_ENTRY->REVISION to BATON->MERGED_RANGES. */
for (hi = apr_hash_first(scratch_pool, log_entry->changed_paths2);
hi;
hi = apr_hash_next(hi))
{
- const char *path = svn__apr_hash_index_key(hi);
+ const char *fspath = svn__apr_hash_index_key(hi);
const char *rel_path;
- const char *cwmi_path;
- apr_array_header_t *paths_explicit_rangelist = NULL;
+ const char *cwmi_abspath;
+ svn_rangelist_t *paths_explicit_rangelist = NULL;
svn_boolean_t mergeinfo_inherited = FALSE;
/* Adjust REL_PATH so it is relative to the merge source then use it to
calculate what path in the merge target would be affected by this
revision. */
- rel_path = svn_fspath__skip_ancestor(log_gap_baton->source_repos_abs, path);
+ rel_path = svn_fspath__skip_ancestor(log_gap_baton->source_fspath,
+ fspath);
/* Is PATH even within the merge target? If it isn't we
can disregard it altogether. */
if (rel_path == NULL)
continue;
- cwmi_path = svn_dirent_join(log_gap_baton->merge_b->target_abspath,
- rel_path, scratch_pool);
+ cwmi_abspath = svn_dirent_join(log_gap_baton->target->abspath,
+ rel_path, scratch_pool);
/* Find any explicit or inherited mergeinfo for PATH. */
while (!log_entry_rev_required)
{
svn_client__merge_path_t *child = get_child_with_mergeinfo(
- log_gap_baton->children_with_mergeinfo, cwmi_path);
+ log_gap_baton->children_with_mergeinfo, cwmi_abspath);
if (child && child->pre_merge_mergeinfo)
{
/* Found some explicit mergeinfo, grab any ranges
for PATH. */
paths_explicit_rangelist =
- apr_hash_get(child->pre_merge_mergeinfo, path,
- APR_HASH_KEY_STRING);
+ svn_hash_gets(child->pre_merge_mergeinfo, fspath);
break;
}
- if (cwmi_path[0] == '\0'
- || svn_dirent_is_root(cwmi_path, strlen(cwmi_path))
- || svn_path_compare_paths(log_gap_baton->merge_b->target_abspath,
- cwmi_path) == 0)
+ if (cwmi_abspath[0] == '\0'
+ || svn_dirent_is_root(cwmi_abspath, strlen(cwmi_abspath))
+ || strcmp(log_gap_baton->target->abspath, cwmi_abspath) == 0)
{
/* Can't crawl any higher. */
break;
}
/* Didn't find anything so crawl up to the parent. */
- cwmi_path = svn_dirent_dirname(cwmi_path, scratch_pool);
- path = svn_dirent_dirname(path, scratch_pool);
+ cwmi_abspath = svn_dirent_dirname(cwmi_abspath, scratch_pool);
+ fspath = svn_fspath__dirname(fspath, scratch_pool);
/* At this point *if* we find mergeinfo it will be inherited. */
mergeinfo_inherited = TRUE;
@@ -7981,8 +8947,8 @@ log_noop_revs(void *baton,
if (paths_explicit_rangelist)
{
- apr_array_header_t *intersecting_range;
- apr_array_header_t *rangelist;
+ svn_rangelist_t *intersecting_range;
+ svn_rangelist_t *rangelist;
rangelist = svn_rangelist__initialize(revision - 1, revision, TRUE,
scratch_pool);
@@ -8013,67 +8979,62 @@ log_noop_revs(void *baton,
/* Helper for do_directory_merge().
- URL1, REVISION1, URL2, REVISION2, NOTIFY_B, and MERGE_B are
- cascaded from the arguments of the same name in do_directory_merge().
- RA_SESSION is the session for URL2@REVISION2.
+ SOURCE is cascaded from the argument of the same name in
+ do_directory_merge(). TARGET is the merge target. RA_SESSION is the
+ session for SOURCE->loc2.
Find all the ranges required by subtrees in
- NOTIFY_B->CHILDREN_WITH_MERGEINFO that are *not* required by
- MERGE_B->TARGET_ABSPATH (i.e. NOTIFY_B->CHILDREN_WITH_MERGEINFO[0]). If such
+ CHILDREN_WITH_MERGEINFO that are *not* required by
+ TARGET->abspath (i.e. CHILDREN_WITH_MERGEINFO[0]). If such
ranges exist, then find any subset of ranges which, if merged, would be
inoperative. Finally, if any inoperative ranges are found then remove
these ranges from all of the subtree's REMAINING_RANGES.
This function should only be called when honoring mergeinfo during
- forward merges (i.e. REVISION1 < REVSION2).
+ forward merges (i.e. SOURCE->rev1 < SOURCE->rev2).
*/
static svn_error_t *
-remove_noop_subtree_ranges(const char *url1,
- svn_revnum_t revision1,
- const char *url2,
- svn_revnum_t revision2,
+remove_noop_subtree_ranges(const merge_source_t *source,
+ const merge_target_t *target,
svn_ra_session_t *ra_session,
- notification_receiver_baton_t *notify_b,
- merge_cmd_baton_t *merge_b,
+ apr_array_header_t *children_with_mergeinfo,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
/* ### Do we need to check that we are at a uniform working revision? */
int i;
svn_client__merge_path_t *root_child =
- APR_ARRAY_IDX(notify_b->children_with_mergeinfo, 0,
- svn_client__merge_path_t *);
- apr_array_header_t *requested_ranges;
- apr_array_header_t *subtree_gap_ranges;
- apr_array_header_t *subtree_remaining_ranges;
- apr_array_header_t *log_targets;
- apr_array_header_t *merged_ranges;
- apr_array_header_t *operative_ranges;
+ APR_ARRAY_IDX(children_with_mergeinfo, 0, svn_client__merge_path_t *);
+ svn_rangelist_t *requested_ranges;
+ svn_rangelist_t *subtree_gap_ranges;
+ svn_rangelist_t *subtree_remaining_ranges;
log_noop_baton_t log_gap_baton;
svn_merge_range_t *oldest_gap_rev;
svn_merge_range_t *youngest_gap_rev;
- apr_array_header_t *inoperative_ranges;
- const char *repos_root_url;
+ svn_rangelist_t *inoperative_ranges;
+ apr_pool_t *iterpool;
+ const char *longest_common_subtree_ancestor = NULL;
+ svn_error_t *err;
+ assert(session_url_is(ra_session, source->loc2->url, scratch_pool));
/* This function is only intended to work with forward merges. */
- if (revision1 > revision2)
+ if (source->loc1->rev > source->loc2->rev)
return SVN_NO_ERROR;
/* Another easy out: There are no subtrees. */
- if (notify_b->children_with_mergeinfo->nelts < 2)
+ if (children_with_mergeinfo->nelts < 2)
return SVN_NO_ERROR;
subtree_remaining_ranges = apr_array_make(scratch_pool, 1,
sizeof(svn_merge_range_t *));
- log_targets = apr_array_make(scratch_pool, 1, sizeof(const char *));
- merged_ranges = apr_array_make(scratch_pool, 0, sizeof(svn_revnum_t *));
- operative_ranges = apr_array_make(scratch_pool, 0, sizeof(svn_revnum_t *));
- /* Given the requested merge of REVISION1:REVISION2 might there be any
+ /* Given the requested merge of SOURCE->rev1:rev2 might there be any
part of this range required for subtrees but not for the target? */
- requested_ranges = svn_rangelist__initialize(MIN(revision1, revision2),
- MAX(revision1, revision2),
+ requested_ranges = svn_rangelist__initialize(MIN(source->loc1->rev,
+ source->loc2->rev),
+ MAX(source->loc1->rev,
+ source->loc2->rev),
TRUE, scratch_pool);
SVN_ERR(svn_rangelist_remove(&subtree_gap_ranges,
root_child->remaining_ranges,
@@ -8084,24 +9045,40 @@ remove_noop_subtree_ranges(const char *url1,
return SVN_NO_ERROR;
/* Create a rangelist describing every range required across all subtrees. */
- for (i = 1; i < notify_b->children_with_mergeinfo->nelts; i++)
+ iterpool = svn_pool_create(scratch_pool);
+ for (i = 1; i < children_with_mergeinfo->nelts; i++)
{
svn_client__merge_path_t *child =
- APR_ARRAY_IDX(notify_b->children_with_mergeinfo, i,
- svn_client__merge_path_t *);
+ APR_ARRAY_IDX(children_with_mergeinfo, i, svn_client__merge_path_t *);
+
+ svn_pool_clear(iterpool);
+
+ /* Issue #4269: Keep track of the longest common ancestor of all the
+ subtrees which require merges. This may be a child of
+ TARGET->ABSPATH, which will allow us to narrow the log request
+ below. */
+ if (child->remaining_ranges && child->remaining_ranges->nelts)
+ {
+ if (longest_common_subtree_ancestor)
+ longest_common_subtree_ancestor = svn_dirent_get_longest_ancestor(
+ longest_common_subtree_ancestor, child->abspath, scratch_pool);
+ else
+ longest_common_subtree_ancestor = child->abspath;
+ }
/* CHILD->REMAINING_RANGES will be NULL if child is absent. */
if (child->remaining_ranges && child->remaining_ranges->nelts)
- SVN_ERR(svn_rangelist_merge(&subtree_remaining_ranges,
- child->remaining_ranges,
- scratch_pool));
+ SVN_ERR(svn_rangelist_merge2(subtree_remaining_ranges,
+ child->remaining_ranges,
+ scratch_pool, iterpool));
}
+ svn_pool_destroy(iterpool);
/* It's possible that none of the subtrees had any remaining ranges. */
if (!subtree_remaining_ranges->nelts)
return SVN_NO_ERROR;
- /* Ok, *finally* we can answer what part(s) of REVISION1:REVISION2 are
+ /* Ok, *finally* we can answer what part(s) of SOURCE->rev1:rev2 are
required for the subtrees but not the target. */
SVN_ERR(svn_rangelist_intersect(&subtree_gap_ranges,
subtree_gap_ranges,
@@ -8118,49 +9095,69 @@ remove_noop_subtree_ranges(const char *url1,
youngest_gap_rev = APR_ARRAY_IDX(subtree_gap_ranges,
subtree_gap_ranges->nelts - 1, svn_merge_range_t *);
- SVN_ERR(svn_wc__node_get_repos_info(&repos_root_url, NULL,
- merge_b->ctx->wc_ctx,
- merge_b->target_abspath,
- scratch_pool, scratch_pool));
-
/* Set up the log baton. */
- log_gap_baton.merge_b = merge_b;
- log_gap_baton.children_with_mergeinfo = notify_b->children_with_mergeinfo;
- SVN_ERR(svn_client__path_relative_to_root(
- &(log_gap_baton.target_repos_abs), merge_b->ctx->wc_ctx,
- merge_b->target_abspath, repos_root_url, TRUE, NULL,
- result_pool, scratch_pool));
- SVN_ERR(svn_client__path_relative_to_root(
- &(log_gap_baton.source_repos_abs), merge_b->ctx->wc_ctx,
- url2, repos_root_url, TRUE, NULL,
- result_pool, scratch_pool));
- log_gap_baton.merged_ranges = merged_ranges;
- log_gap_baton.operative_ranges = operative_ranges;
+ log_gap_baton.children_with_mergeinfo = children_with_mergeinfo;
+ log_gap_baton.source_fspath
+ = svn_client__pathrev_fspath(source->loc2, result_pool);
+ log_gap_baton.target = target;
+ log_gap_baton.merged_ranges = apr_array_make(scratch_pool, 0,
+ sizeof(svn_revnum_t *));
+ log_gap_baton.operative_ranges = apr_array_make(scratch_pool, 0,
+ sizeof(svn_revnum_t *));
log_gap_baton.pool = svn_pool_create(scratch_pool);
- APR_ARRAY_PUSH(log_targets, const char *) = "";
-
- SVN_ERR(svn_ra_get_log2(ra_session, log_targets, oldest_gap_rev->start + 1,
- youngest_gap_rev->end, 0, TRUE, TRUE, FALSE,
- apr_array_make(scratch_pool, 0,
- sizeof(const char *)),
- log_noop_revs, &log_gap_baton, scratch_pool));
-
- inoperative_ranges = svn_rangelist__initialize(oldest_gap_rev->start,
- youngest_gap_rev->end,
- TRUE, scratch_pool);
- SVN_ERR(svn_rangelist_remove(&(inoperative_ranges),
- log_gap_baton.operative_ranges,
- inoperative_ranges, FALSE, scratch_pool));
+ /* Find the longest common ancestor of all subtrees relative to
+ RA_SESSION's URL. */
+ if (longest_common_subtree_ancestor)
+ longest_common_subtree_ancestor =
+ svn_dirent_skip_ancestor(target->abspath,
+ longest_common_subtree_ancestor);
+ else
+ longest_common_subtree_ancestor = "";
+
+ /* Invoke the svn_log_entry_receiver_t receiver log_noop_revs() from
+ oldest to youngest. The receiver is optimized to add ranges to
+ log_gap_baton.merged_ranges and log_gap_baton.operative_ranges, but
+ requires that the revs arrive oldest to youngest -- see log_noop_revs()
+ and rangelist_merge_revision(). */
+ err = get_log(ra_session, longest_common_subtree_ancestor,
+ oldest_gap_rev->start + 1, youngest_gap_rev->end, TRUE,
+ log_noop_revs, &log_gap_baton, scratch_pool);
+
+ /* It's possible that the only subtrees with mergeinfo in TARGET don't have
+ any corresponding subtree in SOURCE between SOURCE->REV1 < SOURCE->REV2.
+ So it's also possible that we may ask for the logs of non-existent paths.
+ If we do, then assume that no subtree requires any ranges that are not
+ already required by the TARGET. */
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_FS_NOT_FOUND
+ && longest_common_subtree_ancestor[0] != '\0')
+ return svn_error_trace(err);
- SVN_ERR(svn_rangelist_merge(&(log_gap_baton.merged_ranges),
- inoperative_ranges, scratch_pool));
+ /* Asked about a non-existent subtree in SOURCE. */
+ svn_error_clear(err);
+ log_gap_baton.merged_ranges =
+ svn_rangelist__initialize(oldest_gap_rev->start,
+ youngest_gap_rev->end,
+ TRUE, scratch_pool);
+ }
+ else
+ {
+ inoperative_ranges = svn_rangelist__initialize(oldest_gap_rev->start,
+ youngest_gap_rev->end,
+ TRUE, scratch_pool);
+ SVN_ERR(svn_rangelist_remove(&(inoperative_ranges),
+ log_gap_baton.operative_ranges,
+ inoperative_ranges, FALSE, scratch_pool));
+ SVN_ERR(svn_rangelist_merge2(log_gap_baton.merged_ranges, inoperative_ranges,
+ scratch_pool, scratch_pool));
+ }
- for (i = 1; i < notify_b->children_with_mergeinfo->nelts; i++)
+ for (i = 1; i < children_with_mergeinfo->nelts; i++)
{
svn_client__merge_path_t *child =
- APR_ARRAY_IDX(notify_b->children_with_mergeinfo, i,
- svn_client__merge_path_t *);
+ APR_ARRAY_IDX(children_with_mergeinfo, i, svn_client__merge_path_t *);
/* CHILD->REMAINING_RANGES will be NULL if child is absent. */
if (child->remaining_ranges && child->remaining_ranges->nelts)
@@ -8179,19 +9176,18 @@ remove_noop_subtree_ranges(const char *url1,
return SVN_NO_ERROR;
}
-/* Helper for do_merge() when the merge target is a directory.
+/* Perform a merge of changes in SOURCE to the working copy path
+ TARGET_ABSPATH. Both URLs in SOURCE, and TARGET_ABSPATH all represent
+ directories -- for the single file case, the caller should use
+ do_file_merge().
- Perform a merge of changes between URL1@REVISION1 and URL2@REVISION2
- to the working copy path TARGET_ABSPATH.
- URL1, URL2, and TARGET_ABSPATH all represent directories -- for the
- single file case, the caller should use do_file_merge().
+ CHILDREN_WITH_MERGEINFO and MERGE_B describe the merge being performed
+ As this function is for a mergeinfo-aware merge, SOURCE->ancestral
+ should be TRUE, and SOURCE->loc1 must be a historical ancestor of
+ SOURCE->loc2, or vice-versa (see `MERGEINFO MERGE SOURCE NORMALIZATION'
+ for more requirements around SOURCE).
- MERGE_B is the merge_cmd_baton_t created by do_merge() that describes
- the merge being performed. If MERGE_B->sources_ancestral is set, then
- URL1@REVISION1 must be a historical ancestor of URL2@REVISION2, or
- vice-versa (see `MERGEINFO MERGE SOURCE NORMALIZATION' for more
- requirements around the values of URL1, REVISION1, URL2, and REVISION2
- in this case).
+ Mergeinfo changes will be recorded unless MERGE_B->dry_run is true.
If mergeinfo is being recorded, SQUELCH_MERGEINFO_NOTIFICATIONS is FALSE,
and MERGE_B->CTX->NOTIFY_FUNC2 is not NULL, then call
@@ -8205,10 +9201,9 @@ remove_noop_subtree_ranges(const char *url1,
paths and the values are the new mergeinfos for each. Allocate additions
to RESULT_CATALOG in pool which RESULT_CATALOG was created in.
- Handle DEPTH as documented for svn_client_merge3().
+ Handle DEPTH as documented for svn_client_merge5().
- If ABORT_ON_CONFLICTS is TRUE raise an SVN_ERR_WC_FOUND_CONFLICT error
- if any merge conflicts occur.
+ CONFLICT_REPORT is as documented for do_directory_merge().
Perform any temporary allocations in SCRATCH_POOL.
@@ -8218,28 +9213,24 @@ remove_noop_subtree_ranges(const char *url1,
meet one or more of the criteria described in get_mergeinfo_paths()).
*/
static svn_error_t *
-do_directory_merge(svn_mergeinfo_catalog_t result_catalog,
- const char *url1,
- svn_revnum_t revision1,
- const char *url2,
- svn_revnum_t revision2,
- const char *target_abspath,
- svn_depth_t depth,
- svn_boolean_t squelch_mergeinfo_notifications,
- svn_boolean_t abort_on_conflicts,
- notification_receiver_baton_t *notify_b,
- merge_cmd_baton_t *merge_b,
- apr_pool_t *scratch_pool)
+do_mergeinfo_aware_dir_merge(svn_mergeinfo_catalog_t result_catalog,
+ single_range_conflict_report_t **conflict_report,
+ const merge_source_t *source,
+ const char *target_abspath,
+ apr_array_header_t *children_with_mergeinfo,
+ const svn_diff_tree_processor_t *processor,
+ svn_depth_t depth,
+ svn_boolean_t squelch_mergeinfo_notifications,
+ merge_cmd_baton_t *merge_b,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- svn_error_t *err = SVN_NO_ERROR;
- svn_error_t *merge_conflict_err = SVN_NO_ERROR;
-
/* The range defining the mergeinfo we will record to describe the merge
(assuming we are recording mergeinfo
- Note: This may be a subset of REVISION1:REVISION2 if
+ Note: This may be a subset of SOURCE->rev1:rev2 if
populate_remaining_ranges() determines that some part of
- REVISION1:REVISION2 has already been wholly merged to TARGET_ABSPATH.
+ SOURCE->rev1:rev2 has already been wholly merged to TARGET_ABSPATH.
Also, the actual editor drive(s) may be a subset of RANGE, if
remove_noop_subtree_ranges() and/or fix_deleted_subtree_ranges()
further tweak things. */
@@ -8247,31 +9238,16 @@ do_directory_merge(svn_mergeinfo_catalog_t result_catalog,
svn_ra_session_t *ra_session;
svn_client__merge_path_t *target_merge_path;
- svn_boolean_t is_rollback = (revision1 > revision2);
- const char *primary_url = is_rollback ? url1 : url2;
- const char *source_root_url, *mergeinfo_path;
- svn_boolean_t honor_mergeinfo, record_mergeinfo;
- svn_boolean_t same_urls = (strcmp(url1, url2) == 0);
-
- honor_mergeinfo = HONOR_MERGEINFO(merge_b);
- record_mergeinfo = RECORD_MERGEINFO(merge_b);
+ svn_boolean_t is_rollback = (source->loc1->rev > source->loc2->rev);
- /* Initialize NOTIFY_B->CHILDREN_WITH_MERGEINFO. See the comment
- 'THE CHILDREN_WITH_MERGEINFO ARRAY' at the start of this file. */
- notify_b->children_with_mergeinfo =
- apr_array_make(scratch_pool, 0, sizeof(svn_client__merge_path_t *));
-
- /* If we are not honoring mergeinfo we can skip right to the
- business of merging changes! */
- if (!honor_mergeinfo)
- return do_mergeinfo_unaware_dir_merge(url1, revision1, url2, revision2,
- target_abspath, depth,
- notify_b, merge_b, scratch_pool);
+ SVN_ERR_ASSERT(source->ancestral);
/*** If we get here, we're dealing with related sources from the
same repository as the target -- merge tracking might be
happenin'! ***/
+ *conflict_report = NULL;
+
/* Point our RA_SESSION to the URL of our youngest merge source side. */
ra_session = is_rollback ? merge_b->ra_session1 : merge_b->ra_session2;
@@ -8280,47 +9256,37 @@ do_directory_merge(svn_mergeinfo_catalog_t result_catalog,
because they meet one or more of the criteria described in
get_mergeinfo_paths(). Here the paths are arranged in a depth
first order. */
- SVN_ERR(svn_ra_get_repos_root2(ra_session, &source_root_url, scratch_pool));
- SVN_ERR(svn_client__path_relative_to_root(&mergeinfo_path,
- merge_b->ctx->wc_ctx, primary_url,
- source_root_url, TRUE, NULL,
- scratch_pool, scratch_pool));
-
- SVN_ERR(get_mergeinfo_paths(notify_b->children_with_mergeinfo, merge_b,
- mergeinfo_path, source_root_url,
- url1, url2, revision1, revision2,
- ra_session, depth, scratch_pool, scratch_pool));
+ SVN_ERR(get_mergeinfo_paths(children_with_mergeinfo,
+ merge_b->target, depth,
+ merge_b->dry_run, merge_b->same_repos,
+ merge_b->ctx, scratch_pool, scratch_pool));
/* The first item from the NOTIFY_B->CHILDREN_WITH_MERGEINFO is always
the target thanks to depth-first ordering. */
- target_merge_path = APR_ARRAY_IDX(notify_b->children_with_mergeinfo, 0,
+ target_merge_path = APR_ARRAY_IDX(children_with_mergeinfo, 0,
svn_client__merge_path_t *);
- merge_b->target_missing_child = target_merge_path->missing_child;
/* If we are honoring mergeinfo, then for each item in
NOTIFY_B->CHILDREN_WITH_MERGEINFO, we need to calculate what needs to be
merged, and then merge it. Otherwise, we just merge what we were asked
to merge across the whole tree. */
- SVN_ERR(populate_remaining_ranges(notify_b->children_with_mergeinfo,
- source_root_url,
- url1, revision1, url2, revision2,
- honor_mergeinfo,
- ra_session, mergeinfo_path,
+ SVN_ERR(populate_remaining_ranges(children_with_mergeinfo,
+ source, ra_session,
merge_b, scratch_pool, scratch_pool));
/* Always start with a range which describes the most inclusive merge
- possible, i.e. REVISION1:REVISION2. */
- range.start = revision1;
- range.end = revision2;
+ possible, i.e. SOURCE->rev1:rev2. */
+ range.start = source->loc1->rev;
+ range.end = source->loc2->rev;
range.inheritable = TRUE;
- if (honor_mergeinfo && !merge_b->reintegrate_merge)
+ if (!merge_b->reintegrate_merge)
{
svn_revnum_t new_range_start, start_rev;
apr_pool_t *iterpool = svn_pool_create(scratch_pool);
/* The merge target TARGET_ABSPATH and/or its subtrees may not need all
- of REVISION1:REVISION2 applied. So examine
+ of SOURCE->rev1:rev2 applied. So examine
NOTIFY_B->CHILDREN_WITH_MERGEINFO to find the oldest starting
revision that actually needs to be merged (for reverse merges this is
the youngest starting revision).
@@ -8328,40 +9294,43 @@ do_directory_merge(svn_mergeinfo_catalog_t result_catalog,
We'll do this twice, right now for the start of the mergeinfo we will
ultimately record to describe this merge and then later for the
start of the actual editor drive. */
- new_range_start = get_most_inclusive_start_rev(
- notify_b->children_with_mergeinfo, is_rollback);
+ new_range_start = get_most_inclusive_rev(
+ children_with_mergeinfo, is_rollback, TRUE);
if (SVN_IS_VALID_REVNUM(new_range_start))
range.start = new_range_start;
/* Remove inoperative ranges from any subtrees' remaining_ranges
to spare the expense of noop editor drives. */
if (!is_rollback)
- SVN_ERR(remove_noop_subtree_ranges(url1, revision1, url2, revision2,
+ SVN_ERR(remove_noop_subtree_ranges(source, merge_b->target,
ra_session,
- notify_b, merge_b,
+ children_with_mergeinfo,
scratch_pool, iterpool));
- /* Adjust subtrees' remaining_ranges to deal with issue #3067 */
- SVN_ERR(fix_deleted_subtree_ranges(url1, revision1, url2, revision2,
- ra_session, notify_b, merge_b,
- scratch_pool, iterpool));
+ /* Adjust subtrees' remaining_ranges to deal with issue #3067:
+ * "subtrees that don't exist at the start or end of a merge range
+ * shouldn't break the merge". */
+ SVN_ERR(fix_deleted_subtree_ranges(source, merge_b->target,
+ ra_session,
+ children_with_mergeinfo,
+ merge_b->ctx, scratch_pool, iterpool));
/* remove_noop_subtree_ranges() and/or fix_deleted_subtree_range()
may have further refined the starting revision for our editor
drive. */
start_rev =
- get_most_inclusive_start_rev(notify_b->children_with_mergeinfo,
- is_rollback);
+ get_most_inclusive_rev(children_with_mergeinfo,
+ is_rollback, TRUE);
/* Is there anything to merge? */
if (SVN_IS_VALID_REVNUM(start_rev))
{
- /* Now examine NOTIFY_B->CHILDREN_WITH_MERGEINFO to find the youngest
+ /* Now examine NOTIFY_B->CHILDREN_WITH_MERGEINFO to find the oldest
ending revision that actually needs to be merged (for reverse
- merges this is the oldest starting revision). */
+ merges this is the youngest ending revision). */
svn_revnum_t end_rev =
- get_most_inclusive_end_rev(notify_b->children_with_mergeinfo,
- is_rollback);
+ get_most_inclusive_rev(children_with_mergeinfo,
+ is_rollback, FALSE);
/* While END_REV is valid, do the following:
@@ -8370,7 +9339,7 @@ do_directory_merge(svn_mergeinfo_catalog_t result_catalog,
a range that ends with end_rev.
2. Starting with start_rev, call drive_merge_report_editor()
- on MERGE_B->target_abspath for start_rev:end_rev.
+ on MERGE_B->target->abspath for start_rev:end_rev.
3. Remove the first element from each
NOTIFY_B->CHILDREN_WITH_MERGEINFO element's remaining_ranges
@@ -8392,11 +9361,11 @@ do_directory_merge(svn_mergeinfo_catalog_t result_catalog,
while (end_rev != SVN_INVALID_REVNUM)
{
- svn_revnum_t next_end_rev;
- const char *real_url1 = url1, *real_url2 = url2;
- const char *old_sess1_url = NULL, *old_sess2_url = NULL;
- svn_merge_range_t *first_target_range = APR_ARRAY_IDX(
- target_merge_path->remaining_ranges, 0, svn_merge_range_t *);
+ merge_source_t *real_source;
+ svn_merge_range_t *first_target_range
+ = (target_merge_path->remaining_ranges->nelts == 0 ? NULL
+ : APR_ARRAY_IDX(target_merge_path->remaining_ranges, 0,
+ svn_merge_range_t *));
/* Issue #3324: Stop editor abuse! Don't call
drive_merge_report_editor() in such a way that we request an
@@ -8425,100 +9394,68 @@ do_directory_merge(svn_mergeinfo_catalog_t result_catalog,
svn_pool_clear(iterpool);
- slice_remaining_ranges(notify_b->children_with_mergeinfo,
+ slice_remaining_ranges(children_with_mergeinfo,
is_rollback, end_rev, scratch_pool);
- notify_b->cur_ancestor_index = -1;
-
- /* URL1@REVISION1 is a real location; URL2@REVISION2 is a
- real location -- that much we know (thanks to the merge
- source normalization code). But for revisions between
- them, the URLs might differ. Here are the rules:
- * If URL1 == URL2, then all URLs between REVISION1 and
- REVISION2 also match URL1/URL2.
+ /* Reset variables that must be reset for every drive */
+ merge_b->notify_begin.last_abspath = NULL;
- * If URL1 != URL2, then:
-
- * If REVISION1 < REVISION2, only REVISION1 maps to
- URL1. The revisions between REVISION1+1 and
- REVISION2 (inclusive) map to URL2.
-
- * If REVISION1 > REVISION2, Only REVISION2 maps to
- URL2. The revisions between REVISION1 and
- REVISION2+1 (inclusive) map to URL1.
-
- We need to adjust our URLs accordingly, here.
- */
- if (! same_urls)
- {
- if (is_rollback && (end_rev != revision2))
- {
- real_url2 = url1;
- SVN_ERR(svn_client__ensure_ra_session_url
- (&old_sess2_url, merge_b->ra_session2,
- real_url2, iterpool));
- }
- if ((! is_rollback) && (start_rev != revision1))
- {
- real_url1 = url2;
- SVN_ERR(svn_client__ensure_ra_session_url
- (&old_sess1_url, merge_b->ra_session1,
- real_url1, iterpool));
- }
- }
+ real_source = subrange_source(source, start_rev, end_rev, iterpool);
SVN_ERR(drive_merge_report_editor(
- merge_b->target_abspath,
- real_url1, start_rev,
- real_url2, end_rev,
- notify_b->children_with_mergeinfo,
- depth, notify_b,
+ merge_b->target->abspath,
+ real_source,
+ children_with_mergeinfo,
+ processor,
+ depth,
merge_b,
iterpool));
- if (old_sess1_url)
- SVN_ERR(svn_ra_reparent(merge_b->ra_session1,
- old_sess1_url, iterpool));
- if (old_sess2_url)
- SVN_ERR(svn_ra_reparent(merge_b->ra_session2,
- old_sess2_url, iterpool));
/* If any paths picked up explicit mergeinfo as a result of
the merge we need to make sure any mergeinfo those paths
inherited is recorded and then add these paths to
- MERGE_B->CHILDREN_WITH_MERGEINFO.*/
- SVN_ERR(process_children_with_new_mergeinfo(merge_b, notify_b,
- scratch_pool));
+ NOTIFY_B->CHILDREN_WITH_MERGEINFO.*/
+ SVN_ERR(process_children_with_new_mergeinfo(
+ merge_b, children_with_mergeinfo,
+ scratch_pool));
/* If any subtrees had their explicit mergeinfo deleted as a
result of the merge then remove these paths from
- MERGE_B->CHILDREN_WITH_MERGEINFO since there is no need
+ NOTIFY_B->CHILDREN_WITH_MERGEINFO since there is no need
to consider these subtrees for subsequent editor drives
nor do we want to record mergeinfo on them describing
the merge itself. */
- remove_children_with_deleted_mergeinfo(merge_b, notify_b);
+ remove_children_with_deleted_mergeinfo(
+ merge_b, children_with_mergeinfo);
/* Prepare for the next iteration (if any). */
remove_first_range_from_remaining_ranges(
- end_rev, notify_b->children_with_mergeinfo, scratch_pool);
- next_end_rev =
- get_most_inclusive_end_rev(notify_b->children_with_mergeinfo,
- is_rollback);
- if ((next_end_rev != SVN_INVALID_REVNUM || abort_on_conflicts)
- && is_path_conflicted_by_merge(merge_b))
+ end_rev, children_with_mergeinfo, scratch_pool);
+
+ /* If we raised any conflicts, break out and report how much
+ we have merged. */
+ if (is_path_conflicted_by_merge(merge_b))
{
- svn_merge_range_t conflicted_range;
- conflicted_range.start = start_rev;
- conflicted_range.end = end_rev;
- merge_conflict_err = make_merge_conflict_error(
- merge_b->target_abspath,
- &conflicted_range,
- scratch_pool);
+ merge_source_t *remaining_range = NULL;
+
+ if (real_source->loc2->rev != source->loc2->rev)
+ remaining_range = subrange_source(source,
+ real_source->loc2->rev,
+ source->loc2->rev,
+ scratch_pool);
+ *conflict_report = single_range_conflict_report_create(
+ real_source, remaining_range,
+ result_pool);
+
range.end = end_rev;
break;
}
+
start_rev =
- get_most_inclusive_start_rev(notify_b->children_with_mergeinfo,
- is_rollback);
- end_rev = next_end_rev;
+ get_most_inclusive_rev(children_with_mergeinfo,
+ is_rollback, TRUE);
+ end_rev =
+ get_most_inclusive_rev(children_with_mergeinfo,
+ is_rollback, FALSE);
}
}
svn_pool_destroy(iterpool);
@@ -8527,31 +9464,37 @@ do_directory_merge(svn_mergeinfo_catalog_t result_catalog,
{
if (!merge_b->record_only)
{
- /* Reset cur_ancestor_index to -1 so that subsequent cherry
+ /* Reset cur_ancestor_abspath to null so that subsequent cherry
picked revision ranges will be notified upon subsequent
operative merge. */
- notify_b->cur_ancestor_index = -1;
+ merge_b->notify_begin.last_abspath = NULL;
- SVN_ERR(drive_merge_report_editor(merge_b->target_abspath,
- url1, revision1, url2, revision2,
+ SVN_ERR(drive_merge_report_editor(merge_b->target->abspath,
+ source,
NULL,
- depth, notify_b,
+ processor,
+ depth,
merge_b,
scratch_pool));
}
}
/* Record mergeinfo where appropriate.*/
- if (record_mergeinfo)
- {
- err = record_mergeinfo_for_dir_merge(result_catalog,
- &range,
- mergeinfo_path,
- depth,
- squelch_mergeinfo_notifications,
- notify_b,
- merge_b,
- scratch_pool);
+ if (RECORD_MERGEINFO(merge_b))
+ {
+ const svn_client__pathrev_t *primary_src
+ = is_rollback ? source->loc1 : source->loc2;
+ const char *mergeinfo_path
+ = svn_client__pathrev_fspath(primary_src, scratch_pool);
+
+ SVN_ERR(record_mergeinfo_for_dir_merge(result_catalog,
+ &range,
+ mergeinfo_path,
+ children_with_mergeinfo,
+ depth,
+ squelch_mergeinfo_notifications,
+ merge_b,
+ scratch_pool));
/* If a path has an immediate parent with non-inheritable mergeinfo at
this point, then it meets criteria 3 or 5 described in
@@ -8567,18 +9510,68 @@ do_directory_merge(svn_mergeinfo_catalog_t result_catalog,
So here we look at the root path of each subtree added during the
merge and set explicit mergeinfo on it if it meets the aforementioned
conditions. */
- if (err == SVN_NO_ERROR
- && (range.start < range.end)) /* Nothing to record on added subtrees
- resulting from reverse merges. */
+ if (range.start < range.end) /* Nothing to record on added subtrees
+ resulting from reverse merges. */
{
- err = record_mergeinfo_for_added_subtrees(
- &range, mergeinfo_path, depth,
- squelch_mergeinfo_notifications,
- notify_b, merge_b, scratch_pool);
+ SVN_ERR(record_mergeinfo_for_added_subtrees(
+ &range, mergeinfo_path, depth,
+ squelch_mergeinfo_notifications,
+ merge_b->added_abspaths, merge_b, scratch_pool));
}
}
- return svn_error_compose_create(err, merge_conflict_err);
+ return SVN_NO_ERROR;
+}
+
+/* Helper for do_merge() when the merge target is a directory.
+ *
+ * If any conflict is raised during the merge, set *CONFLICTED_RANGE to
+ * the revision sub-range that raised the conflict. In this case, the
+ * merge will have ended at revision CONFLICTED_RANGE and mergeinfo will
+ * have been recorded for all revision sub-ranges up to and including
+ * CONFLICTED_RANGE. Otherwise, set *CONFLICTED_RANGE to NULL.
+ */
+static svn_error_t *
+do_directory_merge(svn_mergeinfo_catalog_t result_catalog,
+ single_range_conflict_report_t **conflict_report,
+ const merge_source_t *source,
+ const char *target_abspath,
+ const svn_diff_tree_processor_t *processor,
+ svn_depth_t depth,
+ svn_boolean_t squelch_mergeinfo_notifications,
+ merge_cmd_baton_t *merge_b,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ apr_array_header_t *children_with_mergeinfo;
+
+ /* Initialize CHILDREN_WITH_MERGEINFO. See the comment
+ 'THE CHILDREN_WITH_MERGEINFO ARRAY' at the start of this file. */
+ children_with_mergeinfo =
+ apr_array_make(scratch_pool, 16, sizeof(svn_client__merge_path_t *));
+
+ /* And make it read-only accessible from the baton */
+ merge_b->notify_begin.nodes_with_mergeinfo = children_with_mergeinfo;
+
+ /* If we are not honoring mergeinfo we can skip right to the
+ business of merging changes! */
+ if (HONOR_MERGEINFO(merge_b))
+ SVN_ERR(do_mergeinfo_aware_dir_merge(result_catalog, conflict_report,
+ source, target_abspath,
+ children_with_mergeinfo,
+ processor, depth,
+ squelch_mergeinfo_notifications,
+ merge_b, result_pool, scratch_pool));
+ else
+ SVN_ERR(do_mergeinfo_unaware_dir_merge(conflict_report,
+ source, target_abspath,
+ children_with_mergeinfo,
+ processor, depth,
+ merge_b, result_pool, scratch_pool));
+
+ merge_b->notify_begin.nodes_with_mergeinfo = NULL;
+
+ return SVN_NO_ERROR;
}
/** Ensure that *RA_SESSION is opened to URL, either by reusing
@@ -8586,11 +9579,12 @@ do_directory_merge(svn_mergeinfo_catalog_t result_catalog,
* repository, or by allocating a new *RA_SESSION in POOL.
* (RA_SESSION itself cannot be null, of course.)
*
- * CTX is used as for svn_client__open_ra_session_internal().
+ * CTX is used as for svn_client_open_ra_session().
*/
static svn_error_t *
ensure_ra_session_url(svn_ra_session_t **ra_session,
const char *url,
+ const char *wri_abspath,
svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
@@ -8598,11 +9592,7 @@ ensure_ra_session_url(svn_ra_session_t **ra_session,
if (*ra_session)
{
- const char *old_session_url;
- err = svn_client__ensure_ra_session_url(&old_session_url,
- *ra_session,
- url,
- pool);
+ err = svn_ra_reparent(*ra_session, url, pool);
}
/* SVN_ERR_RA_ILLEGAL_URL is raised when url doesn't point to the same
@@ -8610,26 +9600,35 @@ ensure_ra_session_url(svn_ra_session_t **ra_session,
if (! *ra_session || (err && err->apr_err == SVN_ERR_RA_ILLEGAL_URL))
{
svn_error_clear(err);
- err = svn_client__open_ra_session_internal(ra_session, NULL, url, NULL,
- NULL, FALSE, TRUE, ctx, pool);
+ err = svn_client_open_ra_session2(ra_session, url, wri_abspath,
+ ctx, pool, pool);
}
SVN_ERR(err);
return SVN_NO_ERROR;
}
-/* Drive a merge of MERGE_SOURCES into working copy path TARGET_ABSPATH
+/* Drive a merge of MERGE_SOURCES into working copy node TARGET
and possibly record mergeinfo describing the merge -- see
RECORD_MERGEINFO().
- If MODIFIED_SUBTREES is not NULL and SOURCES_ANCESTRAL or
- REINTEGRATE_MERGE is true, then set *MODIFIED_SUBTREES to a hash
- containing every path modified, skipped, added, or tree-conflicted
+ If MODIFIED_SUBTREES is not NULL and all the MERGE_SOURCES are 'ancestral'
+ or REINTEGRATE_MERGE is true, then replace *MODIFIED_SUBTREES with a new
+ hash containing all the paths that *MODIFIED_SUBTREES contained before,
+ and also every path modified, skipped, added, or tree-conflicted
by the merge. Keys and values of the hash are both (const char *)
absolute paths. The contents of the hash are allocated in RESULT_POOL.
- If SOURCES_ANCESTRAL is set, then for every merge source in
- MERGE_SOURCES, the "left" and "right" side of the merge source are
+ If the merge raises any conflicts while merging a revision range, return
+ early and set *CONFLICT_REPORT to describe the details. (In this case,
+ notify that the merge is complete if and only if this was the last
+ revision range of the merge.) If there are no conflicts, set
+ *CONFLICT_REPORT to NULL. A revision range here can be one specified
+ in MERGE_SOURCES or an internally generated sub-range of one of those
+ when merge tracking is in use.
+
+ For every (const merge_source_t *) merge source in MERGE_SOURCES, if
+ SOURCE->ANCESTRAL is set, then the "left" and "right" side are
ancestrally related. (See 'MERGEINFO MERGE SOURCE NORMALIZATION'
for more on what that means and how it matters.)
@@ -8655,15 +9654,24 @@ ensure_ra_session_url(svn_ra_session_t **ra_session,
paths and the values are the new mergeinfos for each. Allocate additions
to RESULT_CATALOG in pool which RESULT_CATALOG was created in.
- FORCE, DRY_RUN, RECORD_ONLY, IGNORE_ANCESTRY, DEPTH, MERGE_OPTIONS,
+ FORCE_DELETE, DRY_RUN, RECORD_ONLY, DEPTH, MERGE_OPTIONS,
and CTX are as described in the docstring for svn_client_merge_peg3().
+ If IGNORE_MERGEINFO is true, disable merge tracking, by treating the two
+ sources as unrelated even if they actually have a common ancestor. See
+ the macro HONOR_MERGEINFO().
+
+ If DIFF_IGNORE_ANCESTRY is true, diff the 'left' and 'right' versions
+ of a node (if they are the same kind) as if they were related, even if
+ they are not related. Otherwise, diff unrelated items as a deletion
+ of one thing and the addition of another.
+
If not NULL, RECORD_ONLY_PATHS is a hash of (const char *) paths mapped
to the same. If RECORD_ONLY is true and RECORD_ONLY_PATHS is not NULL,
then record mergeinfo describing the merge only on subtrees which contain
items from RECORD_ONLY_PATHS. If RECORD_ONLY is true and RECORD_ONLY_PATHS
is NULL, then record mergeinfo on every subtree with mergeinfo in
- TARGET_ABSPATH.
+ TARGET.
REINTEGRATE_MERGE is TRUE if this is a reintegrate merge.
@@ -8675,13 +9683,16 @@ ensure_ra_session_url(svn_ra_session_t **ra_session,
static svn_error_t *
do_merge(apr_hash_t **modified_subtrees,
svn_mergeinfo_catalog_t result_catalog,
+ conflict_report_t **conflict_report,
+ svn_boolean_t *use_sleep,
const apr_array_header_t *merge_sources,
- const char *target_abspath,
- svn_boolean_t sources_ancestral,
+ const merge_target_t *target,
+ svn_ra_session_t *src_session,
svn_boolean_t sources_related,
svn_boolean_t same_repos,
- svn_boolean_t ignore_ancestry,
- svn_boolean_t force,
+ svn_boolean_t ignore_mergeinfo,
+ svn_boolean_t diff_ignore_ancestry,
+ svn_boolean_t force_delete,
svn_boolean_t dry_run,
svn_boolean_t record_only,
apr_hash_t *record_only_paths,
@@ -8689,27 +9700,40 @@ do_merge(apr_hash_t **modified_subtrees,
svn_boolean_t squelch_mergeinfo_notifications,
svn_depth_t depth,
const apr_array_header_t *merge_options,
- svn_boolean_t *use_sleep,
svn_client_ctx_t *ctx,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- merge_cmd_baton_t merge_cmd_baton;
- notification_receiver_baton_t notify_baton;
+ merge_cmd_baton_t merge_cmd_baton = { 0 };
svn_config_t *cfg;
const char *diff3_cmd;
+ const char *preserved_exts_str;
int i;
svn_boolean_t checked_mergeinfo_capability = FALSE;
svn_ra_session_t *ra_session1 = NULL, *ra_session2 = NULL;
- svn_node_kind_t target_kind;
+ const char *old_src_session_url = NULL;
apr_pool_t *iterpool;
+ const svn_diff_tree_processor_t *processor;
- SVN_ERR_ASSERT(svn_dirent_is_absolute(target_abspath));
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(target->abspath));
+
+ *conflict_report = NULL;
/* Check from some special conditions when in record-only mode
(which is a merge-tracking thing). */
if (record_only)
{
+ svn_boolean_t sources_ancestral = TRUE;
+ int j;
+
+ /* Find out whether all of the sources are 'ancestral'. */
+ for (j = 0; j < merge_sources->nelts; j++)
+ if (! APR_ARRAY_IDX(merge_sources, j, merge_source_t *)->ancestral)
+ {
+ sources_ancestral = FALSE;
+ break;
+ }
+
/* We can't do a record-only merge if the sources aren't related. */
if (! sources_ancestral)
return svn_error_create(SVN_ERR_INCORRECT_PARAMS, NULL,
@@ -8729,112 +9753,122 @@ do_merge(apr_hash_t **modified_subtrees,
}
iterpool = svn_pool_create(scratch_pool);
- SVN_ERR(svn_wc_read_kind(&target_kind, ctx->wc_ctx, target_abspath, FALSE,
- iterpool));
-
- if (target_kind != svn_node_dir && target_kind != svn_node_file)
- return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
- _("Merge target '%s' does not exist in the "
- "working copy"), target_abspath);
/* Ensure a known depth. */
if (depth == svn_depth_unknown)
depth = svn_depth_infinity;
/* Set up the diff3 command, so various callers don't have to. */
- cfg = ctx->config ? apr_hash_get(ctx->config, SVN_CONFIG_CATEGORY_CONFIG,
- APR_HASH_KEY_STRING) : NULL;
+ cfg = ctx->config
+ ? svn_hash_gets(ctx->config, SVN_CONFIG_CATEGORY_CONFIG)
+ : NULL;
svn_config_get(cfg, &diff3_cmd, SVN_CONFIG_SECTION_HELPERS,
SVN_CONFIG_OPTION_DIFF3_CMD, NULL);
if (diff3_cmd != NULL)
SVN_ERR(svn_path_cstring_to_utf8(&diff3_cmd, diff3_cmd, scratch_pool));
+ /* See which files the user wants to preserve the extension of when
+ conflict files are made. */
+ svn_config_get(cfg, &preserved_exts_str, SVN_CONFIG_SECTION_MISCELLANY,
+ SVN_CONFIG_OPTION_PRESERVED_CF_EXTS, "");
+
/* Build the merge context baton (or at least the parts of it that
don't need to be reset for each merge source). */
- merge_cmd_baton.force = force;
+ merge_cmd_baton.force_delete = force_delete;
merge_cmd_baton.dry_run = dry_run;
merge_cmd_baton.record_only = record_only;
- merge_cmd_baton.ignore_ancestry = ignore_ancestry;
+ merge_cmd_baton.ignore_mergeinfo = ignore_mergeinfo;
+ merge_cmd_baton.diff_ignore_ancestry = diff_ignore_ancestry;
merge_cmd_baton.same_repos = same_repos;
merge_cmd_baton.mergeinfo_capable = FALSE;
- merge_cmd_baton.sources_ancestral = sources_ancestral;
merge_cmd_baton.ctx = ctx;
- merge_cmd_baton.target_missing_child = FALSE;
merge_cmd_baton.reintegrate_merge = reintegrate_merge;
- merge_cmd_baton.target_abspath = target_abspath;
- SVN_ERR(svn_wc__node_get_repos_info(&merge_cmd_baton.repos_root_url, NULL,
- ctx->wc_ctx,
- merge_cmd_baton.target_abspath,
- result_pool,
- iterpool));
+ merge_cmd_baton.target = target;
merge_cmd_baton.pool = iterpool;
merge_cmd_baton.merge_options = merge_options;
merge_cmd_baton.diff3_cmd = diff3_cmd;
- merge_cmd_baton.use_sleep = use_sleep;
+ merge_cmd_baton.ext_patterns = *preserved_exts_str
+ ? svn_cstring_split(preserved_exts_str, "\n\r\t\v ",
+ FALSE, scratch_pool)
+ : NULL;
- /* Build the notification receiver baton. */
- notify_baton.wrapped_func = ctx->notify_func2;
- notify_baton.wrapped_baton = ctx->notify_baton2;
- notify_baton.nbr_notifications = 0;
- notify_baton.nbr_operative_notifications = 0;
+ merge_cmd_baton.use_sleep = use_sleep;
/* Do we already know the specific subtrees with mergeinfo we want
to record-only mergeinfo on? */
if (record_only && record_only_paths)
- notify_baton.merged_abspaths = record_only_paths;
+ merge_cmd_baton.merged_abspaths = record_only_paths;
else
- notify_baton.merged_abspaths = NULL;
+ merge_cmd_baton.merged_abspaths = apr_hash_make(result_pool);
+
+ merge_cmd_baton.skipped_abspaths = apr_hash_make(result_pool);
+ merge_cmd_baton.added_abspaths = apr_hash_make(result_pool);
+ merge_cmd_baton.tree_conflicted_abspaths = apr_hash_make(result_pool);
- notify_baton.skipped_abspaths = NULL;
- notify_baton.added_abspaths = NULL;
- notify_baton.tree_conflicted_abspaths = NULL;
- notify_baton.is_single_file_merge = FALSE;
- notify_baton.children_with_mergeinfo = NULL;
- notify_baton.cur_ancestor_index = -1;
- notify_baton.merge_b = &merge_cmd_baton;
- notify_baton.pool = result_pool;
+ {
+ svn_diff_tree_processor_t *merge_processor;
+
+ merge_processor = svn_diff__tree_processor_create(&merge_cmd_baton,
+ scratch_pool);
+
+ merge_processor->dir_opened = merge_dir_opened;
+ merge_processor->dir_changed = merge_dir_changed;
+ merge_processor->dir_added = merge_dir_added;
+ merge_processor->dir_deleted = merge_dir_deleted;
+ merge_processor->dir_closed = merge_dir_closed;
+
+ merge_processor->file_opened = merge_file_opened;
+ merge_processor->file_changed = merge_file_changed;
+ merge_processor->file_added = merge_file_added;
+ merge_processor->file_deleted = merge_file_deleted;
+ /* Not interested in file_closed() */
+
+ merge_processor->node_absent = merge_node_absent;
+
+ processor = merge_processor;
+ }
+
+ if (src_session)
+ {
+ SVN_ERR(svn_ra_get_session_url(src_session, &old_src_session_url,
+ scratch_pool));
+ ra_session1 = src_session;
+ }
for (i = 0; i < merge_sources->nelts; i++)
{
- merge_source_t *merge_source =
+ svn_node_kind_t src1_kind;
+ merge_source_t *source =
APR_ARRAY_IDX(merge_sources, i, merge_source_t *);
- const char *url1, *url2;
- svn_revnum_t rev1, rev2;
+ single_range_conflict_report_t *conflicted_range_report;
svn_pool_clear(iterpool);
- /* Convenience variables. */
- url1 = merge_source->url1;
- url2 = merge_source->url2;
- rev1 = merge_source->rev1;
- rev2 = merge_source->rev2;
-
/* Sanity check: if our left- and right-side merge sources are
the same, there's nothing to here. */
- if ((strcmp(url1, url2) == 0) && (rev1 == rev2))
+ if ((strcmp(source->loc1->url, source->loc2->url) == 0)
+ && (source->loc1->rev == source->loc2->rev))
continue;
/* Establish RA sessions to our URLs, reuse where possible. */
- SVN_ERR(ensure_ra_session_url(&ra_session1, url1, ctx, scratch_pool));
- SVN_ERR(ensure_ra_session_url(&ra_session2, url2, ctx, scratch_pool));
+ SVN_ERR(ensure_ra_session_url(&ra_session1, source->loc1->url,
+ target->abspath, ctx, scratch_pool));
+ SVN_ERR(ensure_ra_session_url(&ra_session2, source->loc2->url,
+ target->abspath, ctx, scratch_pool));
/* Populate the portions of the merge context baton that need to
be reset for each merge source iteration. */
- merge_cmd_baton.merge_source = *merge_source;
+ merge_cmd_baton.merge_source = *source;
merge_cmd_baton.implicit_src_gap = NULL;
- merge_cmd_baton.added_path = NULL;
- merge_cmd_baton.add_necessitated_merge = FALSE;
- merge_cmd_baton.dry_run_deletions =
- dry_run ? apr_hash_make(iterpool) : NULL;
- merge_cmd_baton.dry_run_added =
- dry_run ? apr_hash_make(iterpool) : NULL;
merge_cmd_baton.conflicted_paths = NULL;
merge_cmd_baton.paths_with_new_mergeinfo = NULL;
merge_cmd_baton.paths_with_deleted_mergeinfo = NULL;
merge_cmd_baton.ra_session1 = ra_session1;
merge_cmd_baton.ra_session2 = ra_session2;
+ merge_cmd_baton.notify_begin.last_abspath = NULL;
+
/* Populate the portions of the merge context baton that require
an RA session to set, but shouldn't be reset for each iteration. */
if (! checked_mergeinfo_capability)
@@ -8846,73 +9880,103 @@ do_merge(apr_hash_t **modified_subtrees,
checked_mergeinfo_capability = TRUE;
}
- /* Call our merge helpers based on TARGET_ABSPATH's kind. */
- if (target_kind == svn_node_file)
- {
- SVN_ERR(do_file_merge(result_catalog,
- url1, rev1, url2, rev2, target_abspath,
- sources_related,
- squelch_mergeinfo_notifications,
- &notify_baton,
- &merge_cmd_baton, iterpool));
- }
- else if (target_kind == svn_node_dir)
- {
- /* If conflicts occur while merging any but the very last
- * revision range we want an error to be raised that aborts
- * the merge operation. The user will be asked to resolve conflicts
- * before merging subsequent revision ranges. */
- svn_boolean_t abort_on_conflicts = (i < merge_sources->nelts - 1);
+ SVN_ERR(svn_ra_check_path(ra_session1, "", source->loc1->rev,
+ &src1_kind, iterpool));
- SVN_ERR(do_directory_merge(result_catalog,
- url1, rev1, url2, rev2, target_abspath,
- depth, squelch_mergeinfo_notifications,
- abort_on_conflicts,
- &notify_baton, &merge_cmd_baton,
- iterpool));
+ /* Run the merge; if there are conflicts, allow the callback to
+ * resolve them, and if it resolves all of them, then run the
+ * merge again with the remaining revision range, until it is all
+ * done. */
+ do
+ {
+ /* Merge as far as possible without resolving any conflicts */
+ if (src1_kind != svn_node_dir)
+ {
+ SVN_ERR(do_file_merge(result_catalog, &conflicted_range_report,
+ source, target->abspath,
+ processor,
+ sources_related,
+ squelch_mergeinfo_notifications,
+ &merge_cmd_baton, iterpool, iterpool));
+ }
+ else /* Directory */
+ {
+ SVN_ERR(do_directory_merge(result_catalog, &conflicted_range_report,
+ source, target->abspath,
+ processor,
+ depth, squelch_mergeinfo_notifications,
+ &merge_cmd_baton, iterpool, iterpool));
+ }
- /* Does the caller want to know what the merge has done? */
- if (modified_subtrees)
+ /* Give the conflict resolver callback the opportunity to
+ * resolve any conflicts that were raised. If it resolves all
+ * of them, go around again to merge the next sub-range (if any). */
+ if (conflicted_range_report && ctx->conflict_func2 && ! dry_run)
{
- if (notify_baton.merged_abspaths)
- *modified_subtrees =
- apr_hash_overlay(result_pool, *modified_subtrees,
- notify_baton.merged_abspaths);
- if (notify_baton.added_abspaths)
- *modified_subtrees =
- apr_hash_overlay(result_pool, *modified_subtrees,
- notify_baton.added_abspaths);
- if (notify_baton.skipped_abspaths)
- *modified_subtrees =
- apr_hash_overlay(result_pool, *modified_subtrees,
- notify_baton.skipped_abspaths);
- if (notify_baton.tree_conflicted_abspaths)
- *modified_subtrees =
- apr_hash_overlay(result_pool, *modified_subtrees,
- notify_baton.tree_conflicted_abspaths);
+ svn_boolean_t conflicts_remain;
+
+ SVN_ERR(svn_client__resolve_conflicts(
+ &conflicts_remain, merge_cmd_baton.conflicted_paths,
+ ctx, iterpool));
+ if (conflicts_remain)
+ break;
+
+ merge_cmd_baton.conflicted_paths = NULL;
+ /* Caution: this source is in iterpool */
+ source = conflicted_range_report->remaining_source;
+ conflicted_range_report = NULL;
}
+ else
+ break;
}
+ while (source);
/* The final mergeinfo on TARGET_WCPATH may itself elide. */
if (! dry_run)
- SVN_ERR(svn_client__elide_mergeinfo(target_abspath, NULL,
+ SVN_ERR(svn_client__elide_mergeinfo(target->abspath, NULL,
ctx, iterpool));
+
+ /* If conflicts occurred while merging any but the very last
+ * range of a multi-pass merge, we raise an error that aborts
+ * the merge. The user will be asked to resolve conflicts
+ * before merging subsequent revision ranges. */
+ if (conflicted_range_report)
+ {
+ *conflict_report = conflict_report_create(
+ target->abspath, conflicted_range_report->conflicted_range,
+ (i == merge_sources->nelts - 1
+ && ! conflicted_range_report->remaining_source),
+ result_pool);
+ break;
+ }
}
- /* Let everyone know we're finished here. */
- if (ctx->notify_func2)
+ if (! *conflict_report || (*conflict_report)->was_last_range)
{
- svn_wc_notify_t *notify
- = svn_wc_create_notify(target_abspath, svn_wc_notify_merge_completed,
- iterpool);
- notify->kind = svn_node_none;
- notify->content_state = notify->prop_state
- = svn_wc_notify_state_inapplicable;
- notify->lock_state = svn_wc_notify_lock_state_inapplicable;
- notify->revision = SVN_INVALID_REVNUM;
- (*ctx->notify_func2)(ctx->notify_baton2, notify, iterpool);
+ /* Let everyone know we're finished here. */
+ notify_merge_completed(target->abspath, ctx, iterpool);
+ }
+
+ /* Does the caller want to know what the merge has done? */
+ if (modified_subtrees)
+ {
+ *modified_subtrees =
+ apr_hash_overlay(result_pool, *modified_subtrees,
+ merge_cmd_baton.merged_abspaths);
+ *modified_subtrees =
+ apr_hash_overlay(result_pool, *modified_subtrees,
+ merge_cmd_baton.added_abspaths);
+ *modified_subtrees =
+ apr_hash_overlay(result_pool, *modified_subtrees,
+ merge_cmd_baton.skipped_abspaths);
+ *modified_subtrees =
+ apr_hash_overlay(result_pool, *modified_subtrees,
+ merge_cmd_baton.tree_conflicted_abspaths);
}
+ if (src_session)
+ SVN_ERR(svn_ra_reparent(src_session, old_src_session_url, iterpool));
+
svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
@@ -8922,11 +9986,19 @@ do_merge(apr_hash_t **modified_subtrees,
merge (unless this is record-only), followed by record-only merges
to represent the changed mergeinfo.
- The merge is between URL1@REV1 (in URL1_RA_SESSION1) and URL2@REV2 (in
- URL2_RA_SESSION2); YC_REV is their youngest common ancestor.
- SOURCE_REPOS_ROOT and WC_REPOS_ROOT are the repository roots of the
- source URL and the target working copy. Other arguments are as in
- all of the public merge APIs.
+ Set *CONFLICT_REPORT to indicate if there were any conflicts, as in
+ do_merge().
+
+ The diff to be merged is between SOURCE->loc1 (in URL1_RA_SESSION1)
+ and SOURCE->loc2 (in URL2_RA_SESSION2); YCA is their youngest
+ common ancestor.
+
+ SAME_REPOS must be true if and only if the source URLs are in the same
+ repository as the target working copy.
+
+ DIFF_IGNORE_ANCESTRY is as in do_merge().
+
+ Other arguments are as in all of the public merge APIs.
*USE_SLEEP will be set TRUE if a sleep is required to ensure timestamp
integrity, *USE_SLEEP will be unchanged if no sleep is required.
@@ -8934,103 +10006,75 @@ do_merge(apr_hash_t **modified_subtrees,
SCRATCH_POOL is used for all temporary allocations.
*/
static svn_error_t *
-merge_cousins_and_supplement_mergeinfo(const char *target_abspath,
+merge_cousins_and_supplement_mergeinfo(conflict_report_t **conflict_report,
+ svn_boolean_t *use_sleep,
+ const merge_target_t *target,
svn_ra_session_t *URL1_ra_session,
svn_ra_session_t *URL2_ra_session,
- const char *URL1,
- svn_revnum_t rev1,
- const char *URL2,
- svn_revnum_t rev2,
- svn_revnum_t yc_rev,
- const char *source_repos_root,
- const char *wc_repos_root,
+ const merge_source_t *source,
+ const svn_client__pathrev_t *yca,
+ svn_boolean_t same_repos,
svn_depth_t depth,
- svn_boolean_t ignore_ancestry,
- svn_boolean_t force,
+ svn_boolean_t diff_ignore_ancestry,
+ svn_boolean_t force_delete,
svn_boolean_t record_only,
svn_boolean_t dry_run,
const apr_array_header_t *merge_options,
- svn_boolean_t *use_sleep,
svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- svn_opt_revision_range_t *range;
- apr_array_header_t *remove_sources, *add_sources, *ranges;
- svn_opt_revision_t peg_revision;
- svn_boolean_t same_repos;
+ apr_array_header_t *remove_sources, *add_sources;
apr_hash_t *modified_subtrees = NULL;
- /* Sure we could use SCRATCH_POOL througout this function, but since this
+ /* Sure we could use SCRATCH_POOL throughout this function, but since this
is a wrapper around three separate merges we'll create a subpool we can
clear between each of the three. If the merge target has a lot of
subtree mergeinfo, then this will help keep memory use in check. */
apr_pool_t *subpool = svn_pool_create(scratch_pool);
- SVN_ERR_ASSERT(svn_dirent_is_absolute(target_abspath));
+ assert(session_url_is(URL1_ra_session, source->loc1->url, scratch_pool));
+ assert(session_url_is(URL2_ra_session, source->loc2->url, scratch_pool));
- if (strcmp(wc_repos_root, source_repos_root) != 0)
- {
- const char *source_repos_uuid;
- const char *wc_repos_uuid;
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(target->abspath));
+ SVN_ERR_ASSERT(! source->ancestral);
- SVN_ERR(svn_ra_get_uuid2(URL1_ra_session, &source_repos_uuid,
- subpool));
- SVN_ERR(svn_client_uuid_from_path2(&wc_repos_uuid, target_abspath,
- ctx, subpool, subpool));
- same_repos = (strcmp(wc_repos_uuid, source_repos_uuid) == 0);
- }
- else
- same_repos = TRUE;
-
- peg_revision.kind = svn_opt_revision_number;
-
- range = apr_pcalloc(scratch_pool, sizeof(*range));
- range->start.kind = svn_opt_revision_number;
- range->start.value.number = rev1;
- range->end.kind = svn_opt_revision_number;
- range->end.value.number = yc_rev;
- ranges = apr_array_make(scratch_pool, 2,
- sizeof(svn_opt_revision_range_t *));
- APR_ARRAY_PUSH(ranges, svn_opt_revision_range_t *) = range;
- peg_revision.value.number = rev1;
- SVN_ERR(normalize_merge_sources(&remove_sources, URL1, URL1,
- source_repos_root, &peg_revision,
- ranges, URL1_ra_session, ctx, scratch_pool,
- subpool));
-
- range = apr_pcalloc(scratch_pool, sizeof(*range));
- range->start.kind = svn_opt_revision_number;
- range->start.value.number = yc_rev;
- range->end.kind = svn_opt_revision_number;
- range->end.value.number = rev2;
- ranges = apr_array_make(scratch_pool, 2,
- sizeof(svn_opt_revision_range_t *));
- APR_ARRAY_PUSH(ranges, svn_opt_revision_range_t *) = range;
- peg_revision.value.number = rev2;
- SVN_ERR(normalize_merge_sources(&add_sources, URL2, URL2,
- source_repos_root, &peg_revision,
- ranges, URL2_ra_session, ctx,
- scratch_pool, subpool));
+ SVN_ERR(normalize_merge_sources_internal(
+ &remove_sources, source->loc1,
+ svn_rangelist__initialize(source->loc1->rev, yca->rev, TRUE,
+ scratch_pool),
+ URL1_ra_session, ctx, scratch_pool, subpool));
+
+ SVN_ERR(normalize_merge_sources_internal(
+ &add_sources, source->loc2,
+ svn_rangelist__initialize(yca->rev, source->loc2->rev, TRUE,
+ scratch_pool),
+ URL2_ra_session, ctx, scratch_pool, subpool));
+
+ *conflict_report = NULL;
/* If this isn't a record-only merge, we'll first do a stupid
point-to-point merge... */
if (! record_only)
{
- merge_source_t *faux_source;
apr_array_header_t *faux_sources =
apr_array_make(scratch_pool, 1, sizeof(merge_source_t *));
+
modified_subtrees = apr_hash_make(scratch_pool);
- faux_source = apr_pcalloc(scratch_pool, sizeof(*faux_source));
- faux_source->url1 = URL1;
- faux_source->url2 = URL2;
- faux_source->rev1 = rev1;
- faux_source->rev2 = rev2;
- APR_ARRAY_PUSH(faux_sources, merge_source_t *) = faux_source;
- SVN_ERR(do_merge(&modified_subtrees, NULL, faux_sources, target_abspath,
- FALSE, TRUE, same_repos,
- ignore_ancestry, force, dry_run, FALSE, NULL, TRUE,
- FALSE, depth, merge_options, use_sleep, ctx,
+ APR_ARRAY_PUSH(faux_sources, const merge_source_t *) = source;
+ SVN_ERR(do_merge(&modified_subtrees, NULL, conflict_report, use_sleep,
+ faux_sources, target,
+ URL1_ra_session, TRUE, same_repos,
+ FALSE /*ignore_mergeinfo*/, diff_ignore_ancestry,
+ force_delete, dry_run, FALSE, NULL, TRUE,
+ FALSE, depth, merge_options, ctx,
scratch_pool, subpool));
+ if (*conflict_report)
+ {
+ *conflict_report = conflict_report_dup(*conflict_report, result_pool);
+ if (! (*conflict_report)->was_last_range)
+ return SVN_NO_ERROR;
+ }
}
else if (! same_repos)
{
@@ -9041,9 +10085,7 @@ merge_cousins_and_supplement_mergeinfo(const char *target_abspath,
/* ... and now, if we're doing the mergeinfo thang, we execute a
pair of record-only merges using the real sources we've
- calculated. (We know that each tong in our fork of our merge
- source history tree has an ancestral relationship with the common
- ancestral, so we force ancestral=TRUE here.)
+ calculated.
Issue #3648: We don't actually perform these two record-only merges
on the WC at first, but rather see what each would do and store that
@@ -9053,81 +10095,61 @@ merge_cousins_and_supplement_mergeinfo(const char *target_abspath,
source, that was made in prior merges. */
if (same_repos && !dry_run)
{
- svn_wc_notify_t *notify = svn_wc_create_notify(
- target_abspath, svn_wc_notify_merge_record_info_begin, scratch_pool);
svn_mergeinfo_catalog_t add_result_catalog =
apr_hash_make(scratch_pool);
svn_mergeinfo_catalog_t remove_result_catalog =
apr_hash_make(scratch_pool);
- ctx->notify_func2(ctx->notify_baton2, notify, scratch_pool);
+ notify_mergeinfo_recording(target->abspath, NULL, ctx, scratch_pool);
svn_pool_clear(subpool);
- SVN_ERR(do_merge(NULL, add_result_catalog, add_sources, target_abspath,
- TRUE, TRUE, same_repos,
- ignore_ancestry, force, dry_run, TRUE,
+ SVN_ERR(do_merge(NULL, add_result_catalog, conflict_report, use_sleep,
+ add_sources, target,
+ URL1_ra_session, TRUE, same_repos,
+ FALSE /*ignore_mergeinfo*/, diff_ignore_ancestry,
+ force_delete, dry_run, TRUE,
modified_subtrees, TRUE,
- TRUE, depth, merge_options, use_sleep, ctx,
+ TRUE, depth, merge_options, ctx,
scratch_pool, subpool));
+ if (*conflict_report)
+ {
+ *conflict_report = conflict_report_dup(*conflict_report, result_pool);
+ if (! (*conflict_report)->was_last_range)
+ return SVN_NO_ERROR;
+ }
svn_pool_clear(subpool);
- SVN_ERR(do_merge(NULL, remove_result_catalog, remove_sources,
- target_abspath, TRUE, TRUE, same_repos,
- ignore_ancestry, force, dry_run, TRUE,
+ SVN_ERR(do_merge(NULL, remove_result_catalog, conflict_report, use_sleep,
+ remove_sources, target,
+ URL1_ra_session, TRUE, same_repos,
+ FALSE /*ignore_mergeinfo*/, diff_ignore_ancestry,
+ force_delete, dry_run, TRUE,
modified_subtrees, TRUE,
- TRUE, depth, merge_options, use_sleep, ctx,
+ TRUE, depth, merge_options, ctx,
scratch_pool, subpool));
+ if (*conflict_report)
+ {
+ *conflict_report = conflict_report_dup(*conflict_report, result_pool);
+ if (! (*conflict_report)->was_last_range)
+ return SVN_NO_ERROR;
+ }
SVN_ERR(svn_mergeinfo_catalog_merge(add_result_catalog,
remove_result_catalog,
scratch_pool, scratch_pool));
-
- if (apr_hash_count(add_result_catalog))
- {
- int i;
- apr_array_header_t *sorted_cat =
- svn_sort__hash(add_result_catalog,
- svn_sort_compare_items_as_paths,
- scratch_pool);
- for (i = 0; i < sorted_cat->nelts; i++)
- {
- svn_sort__item_t elt = APR_ARRAY_IDX(sorted_cat, i,
- svn_sort__item_t);
- svn_error_t *err;
-
- svn_pool_clear(subpool);
- err = svn_client__record_wc_mergeinfo(elt.key,
- elt.value,
- TRUE, ctx,
- subpool);
-
- if (err && err->apr_err == SVN_ERR_ENTRY_NOT_FOUND)
- {
- /* PATH isn't just missing, it's not even versioned as far
- as this working copy knows. But it was included in
- MERGES, which means that the server knows about it.
- Likely we don't have access to the source due to authz
- restrictions. For now just clear the error and
- continue... */
- svn_error_clear(err);
- }
- else
- {
- SVN_ERR(err);
- }
- }
- }
+ SVN_ERR(svn_client__record_wc_mergeinfo_catalog(add_result_catalog,
+ ctx, scratch_pool));
}
svn_pool_destroy(subpool);
return SVN_NO_ERROR;
}
-/* Perform checks to determine whether of the working copy at TARGET_ABSPATH
+/* Perform checks to determine whether the working copy at TARGET_ABSPATH
* can safely be used as a merge target. Checks are performed according to
* the ALLOW_MIXED_REV, ALLOW_LOCAL_MODS, and ALLOW_SWITCHED_SUBTREES
* parameters. If any checks fail, raise SVN_ERR_CLIENT_NOT_READY_TO_MERGE.
*
* E.g. if all the ALLOW_* parameters are FALSE, TARGET_ABSPATH must
* be a single-revision, pristine, unswitched working copy.
- * In other words, it must reflect a subtree of the repostiory as found
+ * In other words, it must reflect a subtree of the repository as found
* at single revision -- although sparse checkouts are permitted. */
static svn_error_t *
ensure_wc_is_suitable_merge_target(const char *target_abspath,
@@ -9137,9 +10159,21 @@ ensure_wc_is_suitable_merge_target(const char *target_abspath,
svn_boolean_t allow_switched_subtrees,
apr_pool_t *scratch_pool)
{
- /* Avoid the following checks if we don't need them. */
- if (allow_mixed_rev && allow_local_mods && allow_switched_subtrees)
- return SVN_NO_ERROR;
+ svn_node_kind_t target_kind;
+
+ /* Check the target exists. */
+ SVN_ERR(svn_io_check_path(target_abspath, &target_kind, scratch_pool));
+ if (target_kind == svn_node_none)
+ return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
+ _("Path '%s' does not exist"),
+ svn_dirent_local_style(target_abspath,
+ scratch_pool));
+ SVN_ERR(svn_wc_read_kind2(&target_kind, ctx->wc_ctx, target_abspath,
+ FALSE, FALSE, scratch_pool));
+ if (target_kind != svn_node_dir && target_kind != svn_node_file)
+ return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("Merge target '%s' does not exist in the "
+ "working copy"), target_abspath);
/* Perform the mixed-revision check first because it's the cheapest one. */
if (! allow_mixed_rev)
@@ -9168,7 +10202,7 @@ ensure_wc_is_suitable_merge_target(const char *target_abspath,
if (min_rev != max_rev)
return svn_error_createf(SVN_ERR_CLIENT_MERGE_UPDATE_REQUIRED, NULL,
_("Cannot merge into mixed-revision working "
- "copy [%lu:%lu]; try updating first"),
+ "copy [%ld:%ld]; try updating first"),
min_rev, max_rev);
}
@@ -9205,154 +10239,179 @@ ensure_wc_is_suitable_merge_target(const char *target_abspath,
return SVN_NO_ERROR;
}
+/* Throw an error if PATH_OR_URL is a path and REVISION isn't a repository
+ * revision. */
+static svn_error_t *
+ensure_wc_path_has_repo_revision(const char *path_or_url,
+ const svn_opt_revision_t *revision,
+ apr_pool_t *scratch_pool)
+{
+ if (revision->kind != svn_opt_revision_number
+ && revision->kind != svn_opt_revision_date
+ && revision->kind != svn_opt_revision_head
+ && ! svn_path_is_url(path_or_url))
+ return svn_error_createf(
+ SVN_ERR_CLIENT_BAD_REVISION, NULL,
+ _("Invalid merge source '%s'; a working copy path can only be "
+ "used with a repository revision (a number, a date, or head)"),
+ svn_dirent_local_style(path_or_url, scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+/* "Open" the target WC for a merge. That means:
+ * - find out its exact repository location
+ * - check the WC for suitability (throw an error if unsuitable)
+ *
+ * Set *TARGET_P to a new, fully initialized, target description structure.
+ *
+ * ALLOW_MIXED_REV, ALLOW_LOCAL_MODS, ALLOW_SWITCHED_SUBTREES determine
+ * whether the WC is deemed suitable; see ensure_wc_is_suitable_merge_target()
+ * for details.
+ *
+ * If the node is locally added, the rev and URL will be null/invalid. Some
+ * kinds of merge can use such a target; others can't.
+ */
+static svn_error_t *
+open_target_wc(merge_target_t **target_p,
+ const char *wc_abspath,
+ svn_boolean_t allow_mixed_rev,
+ svn_boolean_t allow_local_mods,
+ svn_boolean_t allow_switched_subtrees,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ merge_target_t *target = apr_palloc(result_pool, sizeof(*target));
+ svn_client__pathrev_t *origin;
+
+ target->abspath = apr_pstrdup(result_pool, wc_abspath);
+
+ SVN_ERR(svn_client__wc_node_get_origin(&origin, wc_abspath, ctx,
+ result_pool, scratch_pool));
+ if (origin)
+ {
+ target->loc = *origin;
+ }
+ else
+ {
+ svn_error_t *err;
+ /* The node has no location in the repository. It's unversioned or
+ * locally added or locally deleted.
+ *
+ * If it's locally added or deleted, find the repository root
+ * URL and UUID anyway, and leave the node URL and revision as NULL
+ * and INVALID. If it's unversioned, this will throw an error. */
+ err = svn_wc__node_get_repos_info(NULL, NULL,
+ &target->loc.repos_root_url,
+ &target->loc.repos_uuid,
+ ctx->wc_ctx, wc_abspath,
+ result_pool, scratch_pool);
+
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND
+ && err->apr_err != SVN_ERR_WC_NOT_WORKING_COPY
+ && err->apr_err != SVN_ERR_WC_UPGRADE_REQUIRED)
+ return svn_error_trace(err);
+
+ return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, err,
+ _("Merge target '%s' does not exist in the "
+ "working copy"),
+ svn_dirent_local_style(wc_abspath,
+ scratch_pool));
+ }
+
+ target->loc.rev = SVN_INVALID_REVNUM;
+ target->loc.url = NULL;
+ }
+
+ SVN_ERR(ensure_wc_is_suitable_merge_target(
+ wc_abspath, ctx,
+ allow_mixed_rev, allow_local_mods, allow_switched_subtrees,
+ scratch_pool));
+
+ *target_p = target;
+ return SVN_NO_ERROR;
+}
/*-----------------------------------------------------------------------*/
/*** Public APIs ***/
+/* The body of svn_client_merge5(), which see for details.
+ *
+ * If SOURCE1 @ REVISION1 is related to SOURCE2 @ REVISION2 then use merge
+ * tracking (subject to other constraints -- see HONOR_MERGEINFO());
+ * otherwise disable merge tracking.
+ *
+ * IGNORE_MERGEINFO and DIFF_IGNORE_ANCESTRY are as in do_merge().
+ */
static svn_error_t *
-merge_locked(const char *source1,
+merge_locked(conflict_report_t **conflict_report,
+ const char *source1,
const svn_opt_revision_t *revision1,
const char *source2,
const svn_opt_revision_t *revision2,
const char *target_abspath,
svn_depth_t depth,
- svn_boolean_t ignore_ancestry,
- svn_boolean_t force,
+ svn_boolean_t ignore_mergeinfo,
+ svn_boolean_t diff_ignore_ancestry,
+ svn_boolean_t force_delete,
svn_boolean_t record_only,
svn_boolean_t dry_run,
svn_boolean_t allow_mixed_rev,
const apr_array_header_t *merge_options,
svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- const char *URL1, *URL2;
- svn_revnum_t rev1, rev2;
- svn_boolean_t related = FALSE, ancestral = FALSE;
- const char *wc_repos_root, *source_repos_root;
- svn_revnum_t youngest_rev = SVN_INVALID_REVNUM;
+ merge_target_t *target;
+ svn_client__pathrev_t *source1_loc, *source2_loc;
+ svn_boolean_t sources_related = FALSE;
svn_ra_session_t *ra_session1, *ra_session2;
apr_array_header_t *merge_sources;
- merge_source_t *merge_source;
svn_error_t *err;
svn_boolean_t use_sleep = FALSE;
- const char *yc_path = NULL;
- svn_revnum_t yc_rev = SVN_INVALID_REVNUM;
+ svn_client__pathrev_t *yca = NULL;
apr_pool_t *sesspool;
svn_boolean_t same_repos;
- const char *source_repos_uuid1, *source_repos_uuid2;
- svn_node_kind_t target_kind;
-
- /* Make sure the target is really there. */
- SVN_ERR(svn_io_check_path(target_abspath, &target_kind, scratch_pool));
- if (target_kind == svn_node_none)
- return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
- _("Path '%s' does not exist"),
- svn_dirent_local_style(target_abspath,
- scratch_pool));
-
- /* Sanity check our input -- we require specified revisions,
- * and either 2 paths or 2 URLs. */
- if ((revision1->kind == svn_opt_revision_unspecified)
- || (revision2->kind == svn_opt_revision_unspecified))
- return svn_error_create(SVN_ERR_CLIENT_BAD_REVISION, NULL,
- _("Not all required revisions are specified"));
-
- if (svn_path_is_url(source1) != svn_path_is_url(source2))
- return svn_error_create(SVN_ERR_ILLEGAL_TARGET, NULL,
- _("Merge sources must both be "
- "either paths or URLs"));
/* ### FIXME: This function really ought to do a history check on
the left and right sides of the merge source, and -- if one is an
ancestor of the other -- just call svn_client_merge_peg3() with
the appropriate args. */
- /* If source1 or source2 are paths, we need to get the underlying
- URL from the wc and save the initial path we were passed so we
- can use it as a path parameter (either in the baton or not).
- otherwise, the path will just be NULL, which means we won't be
- able to figure out some kind of revision specifications, but in
- that case it won't matter, because those ways of specifying a
- revision are meaningless for a url. */
- SVN_ERR(svn_client_url_from_path2(&URL1, source1, ctx,
- scratch_pool, scratch_pool));
- if (! URL1)
- return svn_error_createf(SVN_ERR_ENTRY_MISSING_URL, NULL,
- _("'%s' has no URL"),
- svn_dirent_local_style(source1, scratch_pool));
-
- SVN_ERR(svn_client_url_from_path2(&URL2, source2, ctx,
- scratch_pool, scratch_pool));
- if (! URL2)
- return svn_error_createf(SVN_ERR_ENTRY_MISSING_URL, NULL,
- _("'%s' has no URL"),
- svn_dirent_local_style(source2, scratch_pool));
-
- SVN_ERR(svn_wc_read_kind(&target_kind, ctx->wc_ctx, target_abspath, FALSE,
- scratch_pool));
+ SVN_ERR(open_target_wc(&target, target_abspath,
+ allow_mixed_rev, TRUE, TRUE,
+ ctx, scratch_pool, scratch_pool));
- if (target_kind != svn_node_dir && target_kind != svn_node_file)
- return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
- _("Merge target '%s' does not exist in the "
- "working copy"), target_abspath);
-
- /* Do not allow merges into mixed-revision working copies. */
- SVN_ERR(ensure_wc_is_suitable_merge_target(target_abspath, ctx,
- allow_mixed_rev, TRUE, TRUE,
- scratch_pool));
-
- /* Determine the working copy target's repository root URL. */
- SVN_ERR(svn_client__get_repos_root(&wc_repos_root, target_abspath,
- ctx, scratch_pool, scratch_pool));
-
- /* Open some RA sessions to our merge source sides. */
+ /* Open RA sessions to both sides of our merge source, and resolve URLs
+ * and revisions. */
sesspool = svn_pool_create(scratch_pool);
- SVN_ERR(svn_client__open_ra_session_internal(&ra_session1, NULL, URL1,
- NULL, NULL, FALSE, TRUE,
- ctx, sesspool));
- SVN_ERR(svn_client__open_ra_session_internal(&ra_session2, NULL, URL2,
- NULL, NULL, FALSE, TRUE,
- ctx, sesspool));
-
- /* Resolve revisions to real numbers. */
- SVN_ERR(svn_client__get_revision_number(&rev1, &youngest_rev, ctx->wc_ctx,
- NULL, ra_session1, revision1,
- sesspool));
- SVN_ERR(svn_client__get_revision_number(&rev2, &youngest_rev, ctx->wc_ctx,
- NULL, ra_session2, revision2,
- sesspool));
-
- SVN_ERR(svn_ra_get_uuid2(ra_session1, &source_repos_uuid1, scratch_pool));
- SVN_ERR(svn_ra_get_uuid2(ra_session2, &source_repos_uuid2, scratch_pool));
+ SVN_ERR(svn_client__ra_session_from_path2(
+ &ra_session1, &source1_loc,
+ source1, NULL, revision1, revision1, ctx, sesspool));
+ SVN_ERR(svn_client__ra_session_from_path2(
+ &ra_session2, &source2_loc,
+ source2, NULL, revision2, revision2, ctx, sesspool));
/* We can't do a diff between different repositories. */
- if (strcmp(source_repos_uuid1, source_repos_uuid2) != 0)
- return svn_error_createf(SVN_ERR_RA_UUID_MISMATCH, NULL,
- _("'%s' isn't in the same repository as '%s'"),
- URL1, URL2);
-
- /* Get the repository root URL from one of our sessions. */
- SVN_ERR(svn_ra_get_repos_root2(ra_session1, &source_repos_root, sesspool));
+ /* ### We should also insist that the root URLs of the two sources match,
+ * as we are only carrying around a single source-repos-root from now
+ * on, and URL calculations will go wrong if they differ.
+ * Alternatively, teach the code to cope with differing root URLs. */
+ SVN_ERR(check_same_repos(source1_loc, source1_loc->url,
+ source2_loc, source2_loc->url,
+ FALSE /* strict_urls */, scratch_pool));
/* Do our working copy and sources come from the same repository? */
- if (strcmp(wc_repos_root, source_repos_root) != 0)
- {
- const char *wc_repos_uuid;
-
- SVN_ERR(svn_client_uuid_from_path2(&wc_repos_uuid, target_abspath,
- ctx, scratch_pool, scratch_pool));
- same_repos = (strcmp(wc_repos_uuid, source_repos_uuid1) == 0);
- }
- else
- same_repos = TRUE;
+ same_repos = is_same_repos(&target->loc, source1_loc, TRUE /* strict_urls */);
/* Unless we're ignoring ancestry, see if the two sources are related. */
- if (! ignore_ancestry)
- SVN_ERR(svn_client__get_youngest_common_ancestor(&yc_path, &yc_rev,
- URL1, rev1,
- URL2, rev2,
- ctx, scratch_pool));
+ if (! ignore_mergeinfo)
+ SVN_ERR(svn_client__get_youngest_common_ancestor(
+ &yca, source1_loc, source2_loc, ra_session1, ctx,
+ scratch_pool, scratch_pool));
/* Check for a youngest common ancestor. If we have one, we'll be
doing merge tracking.
@@ -9371,89 +10430,68 @@ merge_locked(const char *source1,
merge recording, then record-only two merges:
from A to C, and from C to B
*/
- if (yc_path && SVN_IS_VALID_REVNUM(yc_rev))
+ if (yca)
{
- apr_array_header_t *ranges;
- svn_opt_revision_range_t *range;
- svn_opt_revision_t peg_revision;
- peg_revision.kind = svn_opt_revision_number;
-
/* Note that our merge sources are related. */
- related = TRUE;
-
- /* Make YC_PATH into a full URL. */
- yc_path = svn_path_url_add_component2(source_repos_root, yc_path,
- scratch_pool);
+ sources_related = TRUE;
/* If the common ancestor matches the right side of our merge,
then we only need to reverse-merge the left side. */
- if ((strcmp(yc_path, URL2) == 0) && (yc_rev == rev2))
- {
- ancestral = TRUE;
- range = apr_pcalloc(scratch_pool, sizeof(*range));
- range->start.kind = svn_opt_revision_number;
- range->start.value.number = rev1;
- range->end.kind = svn_opt_revision_number;
- range->end.value.number = yc_rev;
- ranges = apr_array_make(scratch_pool,
- 2, sizeof(svn_opt_revision_range_t *));
- APR_ARRAY_PUSH(ranges, svn_opt_revision_range_t *) = range;
- peg_revision.value.number = rev1;
- SVN_ERR(normalize_merge_sources(&merge_sources, URL1, URL1,
- source_repos_root, &peg_revision,
- ranges, ra_session1, ctx,
- scratch_pool, scratch_pool));
+ if ((strcmp(yca->url, source2_loc->url) == 0)
+ && (yca->rev == source2_loc->rev))
+ {
+ SVN_ERR(normalize_merge_sources_internal(
+ &merge_sources, source1_loc,
+ svn_rangelist__initialize(source1_loc->rev, yca->rev, TRUE,
+ scratch_pool),
+ ra_session1, ctx, scratch_pool, scratch_pool));
}
/* If the common ancestor matches the left side of our merge,
then we only need to merge the right side. */
- else if ((strcmp(yc_path, URL1) == 0) && (yc_rev == rev1))
- {
- ancestral = TRUE;
- range = apr_pcalloc(scratch_pool, sizeof(*range));
- range->start.kind = svn_opt_revision_number;
- range->start.value.number = yc_rev;
- range->end.kind = svn_opt_revision_number;
- range->end.value.number = rev2;
- ranges = apr_array_make(scratch_pool,
- 2, sizeof(svn_opt_revision_range_t *));
- APR_ARRAY_PUSH(ranges, svn_opt_revision_range_t *) = range;
- peg_revision.value.number = rev2;
- SVN_ERR(normalize_merge_sources(&merge_sources, URL2, URL2,
- source_repos_root, &peg_revision,
- ranges, ra_session2, ctx,
- scratch_pool, scratch_pool));
+ else if ((strcmp(yca->url, source1_loc->url) == 0)
+ && (yca->rev == source1_loc->rev))
+ {
+ SVN_ERR(normalize_merge_sources_internal(
+ &merge_sources, source2_loc,
+ svn_rangelist__initialize(yca->rev, source2_loc->rev, TRUE,
+ scratch_pool),
+ ra_session2, ctx, scratch_pool, scratch_pool));
}
/* And otherwise, we need to do both: reverse merge the left
side, and merge the right. */
else
{
- err = merge_cousins_and_supplement_mergeinfo(target_abspath,
+ merge_source_t source;
+
+ source.loc1 = source1_loc;
+ source.loc2 = source2_loc;
+ source.ancestral = FALSE;
+
+ err = merge_cousins_and_supplement_mergeinfo(conflict_report,
+ &use_sleep,
+ target,
ra_session1,
ra_session2,
- URL1, rev1,
- URL2, rev2,
- yc_rev,
- source_repos_root,
- wc_repos_root,
+ &source,
+ yca,
+ same_repos,
depth,
- ignore_ancestry, force,
+ diff_ignore_ancestry,
+ force_delete,
record_only, dry_run,
merge_options,
- &use_sleep, ctx,
+ ctx,
+ result_pool,
scratch_pool);
- if (err)
- {
- if (use_sleep)
- svn_io_sleep_for_timestamps(target_abspath, scratch_pool);
-
- return svn_error_trace(err);
- }
-
/* Close our temporary RA sessions (this could've happened
after the second call to normalize_merge_sources() inside
the merge_cousins_and_supplement_mergeinfo() routine). */
svn_pool_destroy(sesspool);
+ if (use_sleep)
+ svn_io_sleep_for_timestamps(target->abspath, scratch_pool);
+
+ SVN_ERR(err);
return SVN_NO_ERROR;
}
}
@@ -9461,60 +10499,24 @@ merge_locked(const char *source1,
{
/* Build a single-item merge_source_t array. */
merge_sources = apr_array_make(scratch_pool, 1, sizeof(merge_source_t *));
- merge_source = apr_pcalloc(scratch_pool, sizeof(*merge_source));
- merge_source->url1 = URL1;
- merge_source->url2 = URL2;
- merge_source->rev1 = rev1;
- merge_source->rev2 = rev2;
- APR_ARRAY_PUSH(merge_sources, merge_source_t *) = merge_source;
+ APR_ARRAY_PUSH(merge_sources, merge_source_t *)
+ = merge_source_create(source1_loc, source2_loc, FALSE, scratch_pool);
}
+ err = do_merge(NULL, NULL, conflict_report, &use_sleep,
+ merge_sources, target,
+ ra_session1, sources_related, same_repos,
+ ignore_mergeinfo, diff_ignore_ancestry, force_delete, dry_run,
+ record_only, NULL, FALSE, FALSE, depth, merge_options,
+ ctx, result_pool, scratch_pool);
+
/* Close our temporary RA sessions. */
svn_pool_destroy(sesspool);
- err = do_merge(NULL, NULL, merge_sources, target_abspath,
- ancestral, related, same_repos,
- ignore_ancestry, force, dry_run,
- record_only, NULL, FALSE, FALSE, depth, merge_options,
- &use_sleep, ctx, scratch_pool, scratch_pool);
-
if (use_sleep)
- svn_io_sleep_for_timestamps(target_abspath, scratch_pool);
-
- if (err)
- return svn_error_trace(err);
-
- return SVN_NO_ERROR;
-}
-
-struct merge_baton_t {
- const char *source1;
- const svn_opt_revision_t *revision1;
- const char *source2;
- const svn_opt_revision_t *revision2;
- const char *target_abspath;
- svn_depth_t depth;
- svn_boolean_t ignore_ancestry;
- svn_boolean_t force;
- svn_boolean_t record_only;
- svn_boolean_t dry_run;
- svn_boolean_t allow_mixed_rev;
- const apr_array_header_t *merge_options;
- svn_client_ctx_t *ctx;
-};
-
-/* Implements svn_wc__with_write_lock_func_t. */
-static svn_error_t *
-merge_cb(void *baton, apr_pool_t *result_pool, apr_pool_t *scratch_pool)
-{
- struct merge_baton_t *b = baton;
-
- SVN_ERR(merge_locked(b->source1, b->revision1, b->source2, b->revision2,
- b->target_abspath, b->depth, b->ignore_ancestry,
- b->force, b->record_only, b->dry_run,
- b->allow_mixed_rev, b->merge_options, b->ctx,
- scratch_pool));
+ svn_io_sleep_for_timestamps(target->abspath, scratch_pool);
+ SVN_ERR(err);
return SVN_NO_ERROR;
}
@@ -9525,30 +10527,31 @@ get_target_and_lock_abspath(const char **target_abspath,
const char **lock_abspath,
const char *target_wcpath,
svn_client_ctx_t *ctx,
- apr_pool_t *scratch_pool)
+ apr_pool_t *result_pool)
{
svn_node_kind_t kind;
SVN_ERR(svn_dirent_get_absolute(target_abspath, target_wcpath,
- scratch_pool));
- SVN_ERR(svn_wc_read_kind(&kind, ctx->wc_ctx, *target_abspath, FALSE,
- scratch_pool));
+ result_pool));
+ SVN_ERR(svn_wc_read_kind2(&kind, ctx->wc_ctx, *target_abspath,
+ FALSE, FALSE, result_pool));
if (kind == svn_node_dir)
*lock_abspath = *target_abspath;
else
- *lock_abspath = svn_dirent_dirname(*target_abspath, scratch_pool);
+ *lock_abspath = svn_dirent_dirname(*target_abspath, result_pool);
return SVN_NO_ERROR;
}
svn_error_t *
-svn_client_merge4(const char *source1,
+svn_client_merge5(const char *source1,
const svn_opt_revision_t *revision1,
const char *source2,
const svn_opt_revision_t *revision2,
const char *target_wcpath,
svn_depth_t depth,
- svn_boolean_t ignore_ancestry,
- svn_boolean_t force,
+ svn_boolean_t ignore_mergeinfo,
+ svn_boolean_t diff_ignore_ancestry,
+ svn_boolean_t force_delete,
svn_boolean_t record_only,
svn_boolean_t dry_run,
svn_boolean_t allow_mixed_rev,
@@ -9557,32 +10560,45 @@ svn_client_merge4(const char *source1,
apr_pool_t *pool)
{
const char *target_abspath, *lock_abspath;
- struct merge_baton_t merge_baton;
+ conflict_report_t *conflict_report;
+
+ /* Sanity check our input -- we require specified revisions,
+ * and either 2 paths or 2 URLs. */
+ if ((revision1->kind == svn_opt_revision_unspecified)
+ || (revision2->kind == svn_opt_revision_unspecified))
+ return svn_error_create(SVN_ERR_CLIENT_BAD_REVISION, NULL,
+ _("Not all required revisions are specified"));
+ if (svn_path_is_url(source1) != svn_path_is_url(source2))
+ return svn_error_create(SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("Merge sources must both be "
+ "either paths or URLs"));
+ /* A WC path must be used with a repository revision, as we can't
+ * (currently) use the WC itself as a source, we can only read the URL
+ * from it and use that. */
+ SVN_ERR(ensure_wc_path_has_repo_revision(source1, revision1, pool));
+ SVN_ERR(ensure_wc_path_has_repo_revision(source2, revision2, pool));
SVN_ERR(get_target_and_lock_abspath(&target_abspath, &lock_abspath,
target_wcpath, ctx, pool));
- merge_baton.source1 = source1;
- merge_baton.revision1 = revision1;
- merge_baton.source2 = source2;
- merge_baton.revision2 = revision2;
- merge_baton.target_abspath = target_abspath;
- merge_baton.depth = depth;
- merge_baton.ignore_ancestry = ignore_ancestry;
- merge_baton.force = force;
- merge_baton.record_only = record_only;
- merge_baton.dry_run = dry_run;
- merge_baton.allow_mixed_rev = allow_mixed_rev;
- merge_baton.merge_options = merge_options;
- merge_baton.ctx = ctx;
-
if (!dry_run)
- SVN_ERR(svn_wc__call_with_write_lock(merge_cb, &merge_baton,
- ctx->wc_ctx, lock_abspath, FALSE,
- pool, pool));
+ SVN_WC__CALL_WITH_WRITE_LOCK(
+ merge_locked(&conflict_report,
+ source1, revision1, source2, revision2,
+ target_abspath, depth, ignore_mergeinfo,
+ diff_ignore_ancestry,
+ force_delete, record_only, dry_run,
+ allow_mixed_rev, merge_options, ctx, pool, pool),
+ ctx->wc_ctx, lock_abspath, FALSE /* lock_anchor */, pool);
else
- SVN_ERR(merge_cb(&merge_baton, pool, pool));
-
+ SVN_ERR(merge_locked(&conflict_report,
+ source1, revision1, source2, revision2,
+ target_abspath, depth, ignore_mergeinfo,
+ diff_ignore_ancestry,
+ force_delete, record_only, dry_run,
+ allow_mixed_rev, merge_options, ctx, pool, pool));
+
+ SVN_ERR(make_merge_conflict_error(conflict_report, pool));
return SVN_NO_ERROR;
}
@@ -9608,7 +10624,6 @@ mergeinfo_in_catalog(svn_boolean_t *in_catalog,
const char **cat_key_path,
const char *repos_rel_path,
svn_mergeinfo_t mergeinfo,
- svn_revnum_t revision,
svn_mergeinfo_catalog_t catalog,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
@@ -9628,7 +10643,7 @@ mergeinfo_in_catalog(svn_boolean_t *in_catalog,
while (1)
{
- mergeinfo_in_cat = apr_hash_get(catalog, path, APR_HASH_KEY_STRING);
+ mergeinfo_in_cat = svn_hash_gets(catalog, path);
if (mergeinfo_in_cat) /* Found it! */
{
@@ -9679,7 +10694,7 @@ typedef struct log_find_operative_baton_t
svn_mergeinfo_catalog_t unmerged_catalog;
/* The repository absolute path of the reintegrate target. */
- const char *target_abspath;
+ const char *target_fspath;
/* The path of the reintegrate source relative to the repository root. */
const char *source_repos_rel_path;
@@ -9697,6 +10712,11 @@ log_find_operative_revs(void *baton,
apr_hash_index_t *hi;
svn_revnum_t revision;
+ /* It's possible that authz restrictions on the merge source prevent us
+ from knowing about any of the changes for LOG_ENTRY->REVISION. */
+ if (!log_entry->changed_paths2)
+ return SVN_NO_ERROR;
+
revision = log_entry->revision;
for (hi = apr_hash_first(pool, log_entry->changed_paths2);
@@ -9710,7 +10730,7 @@ log_find_operative_revs(void *baton,
svn_boolean_t in_catalog;
svn_mergeinfo_t log_entry_as_mergeinfo;
- rel_path = svn_fspath__skip_ancestor(log_baton->target_abspath, path);
+ rel_path = svn_fspath__skip_ancestor(log_baton->target_fspath, path);
/* Easy out: The path is not within the tree of interest. */
if (rel_path == NULL)
continue;
@@ -9725,13 +10745,13 @@ log_find_operative_revs(void *baton,
SVN_ERR(mergeinfo_in_catalog(&in_catalog, &subtree_missing_this_rev,
source_rel_path, log_entry_as_mergeinfo,
- revision, log_baton->merged_catalog,
+ log_baton->merged_catalog,
pool, pool));
if (!in_catalog)
{
svn_mergeinfo_t unmerged_for_key;
- const char *missing_path;
+ const char *suffix, *missing_path;
/* If there is no mergeinfo on the source tree we'll say
the "subtree" missing this revision is the root of the
@@ -9739,12 +10759,10 @@ log_find_operative_revs(void *baton,
if (!subtree_missing_this_rev)
subtree_missing_this_rev = log_baton->source_repos_rel_path;
- if (subtree_missing_this_rev
- && strcmp(subtree_missing_this_rev, source_rel_path))
+ suffix = svn_relpath_skip_ancestor(subtree_missing_this_rev,
+ source_rel_path);
+ if (suffix && suffix[0] != '\0')
{
- const char *suffix =
- svn_relpath_skip_ancestor(subtree_missing_this_rev,
- source_rel_path);
missing_path = apr_pstrmemdup(pool, path,
strlen(path) - strlen(suffix) - 1);
}
@@ -9757,23 +10775,22 @@ log_find_operative_revs(void *baton,
apr_psprintf(pool, "%s:%ld",
missing_path, revision),
log_baton->result_pool));
- unmerged_for_key = apr_hash_get(log_baton->unmerged_catalog,
- subtree_missing_this_rev,
- APR_HASH_KEY_STRING);
+ unmerged_for_key = svn_hash_gets(log_baton->unmerged_catalog,
+ subtree_missing_this_rev);
if (unmerged_for_key)
{
- SVN_ERR(svn_mergeinfo_merge(unmerged_for_key,
- log_entry_as_mergeinfo,
- log_baton->result_pool));
+ SVN_ERR(svn_mergeinfo_merge2(unmerged_for_key,
+ log_entry_as_mergeinfo,
+ log_baton->result_pool,
+ pool));
}
else
{
- apr_hash_set(log_baton->unmerged_catalog,
- apr_pstrdup(log_baton->result_pool,
- subtree_missing_this_rev),
- APR_HASH_KEY_STRING,
- log_entry_as_mergeinfo);
+ svn_hash_sets(log_baton->unmerged_catalog,
+ apr_pstrdup(log_baton->result_pool,
+ subtree_missing_this_rev),
+ log_entry_as_mergeinfo);
}
}
@@ -9781,24 +10798,23 @@ log_find_operative_revs(void *baton,
return SVN_NO_ERROR;
}
-/* Determine if the mergeinfo on a reintegrate source SOURCE_REPOS_REL_PATH,
+/* Determine if the mergeinfo on a reintegrate source SOURCE_LOC,
reflects that the source is fully synced with the reintegrate target
- TARGET_REPOS_REL_PATH, even if a naive interpretation of the source's
+ TARGET_LOC, even if a naive interpretation of the source's
mergeinfo says otherwise -- See issue #3577.
UNMERGED_CATALOG represents the history (as mergeinfo) from
- TARGET_REPOS_REL_PATH that is not represented in SOURCE_REPOS_REL_PATH's
+ TARGET_LOC that is not represented in SOURCE_LOC's
explicit/inherited mergeinfo as represented by MERGED_CATALOG.
- MERGEINFO_CATALOG may be empty if the source has no explicit or inherited
+ MERGED_CATALOG may be empty if the source has no explicit or inherited
mergeinfo.
- Using RA_SESSION, which is pointed at TARGET_REPOS_REL_PATH, check that all
- of the unmerged revisions in UNMERGED_CATALOG's mergeinfos are "phantoms",
- that is, one of the following conditions holds:
+ Check that all of the unmerged revisions in UNMERGED_CATALOG's
+ mergeinfos are "phantoms", that is, one of the following conditions holds:
- 1) The revision affects no corresponding paths in SOURCE_REPOS_REL_PATH.
+ 1) The revision affects no corresponding paths in SOURCE_LOC.
- 2) The revision affects corresponding paths in SOURCE_REPOS_REL_PATH,
+ 2) The revision affects corresponding paths in SOURCE_LOC,
but based on the mergeinfo in MERGED_CATALOG, the change was
previously merged.
@@ -9808,10 +10824,13 @@ log_find_operative_revs(void *baton,
Note: The keys in all mergeinfo catalogs used here are relative to the
root of the repository.
+ RA_SESSION is an RA session open to the repository of TARGET_LOC; it may
+ be temporarily reparented within this function.
+
Use SCRATCH_POOL for all temporary allocations. */
static svn_error_t *
-find_unsynced_ranges(const char *source_repos_rel_path,
- const char *target_repos_rel_path,
+find_unsynced_ranges(const svn_client__pathrev_t *source_loc,
+ const svn_client__pathrev_t *target_loc,
svn_mergeinfo_catalog_t unmerged_catalog,
svn_mergeinfo_catalog_t merged_catalog,
svn_mergeinfo_catalog_t true_unmerged_catalog,
@@ -9819,7 +10838,7 @@ find_unsynced_ranges(const char *source_repos_rel_path,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- apr_array_header_t *potentially_unmerged_ranges = NULL;
+ svn_rangelist_t *potentially_unmerged_ranges = NULL;
/* Convert all the unmerged history to a rangelist. */
if (apr_hash_count(unmerged_catalog))
@@ -9834,18 +10853,10 @@ find_unsynced_ranges(const char *source_repos_rel_path,
hi_catalog = apr_hash_next(hi_catalog))
{
svn_mergeinfo_t mergeinfo = svn__apr_hash_index_val(hi_catalog);
- apr_hash_index_t *hi_mergeinfo;
- for (hi_mergeinfo = apr_hash_first(scratch_pool, mergeinfo);
- hi_mergeinfo;
- hi_mergeinfo = apr_hash_next(hi_mergeinfo))
- {
- apr_array_header_t *rangelist =
- svn__apr_hash_index_val(hi_mergeinfo);
-
- SVN_ERR(svn_rangelist_merge(&potentially_unmerged_ranges,
- rangelist, scratch_pool));
- }
+ SVN_ERR(svn_rangelist__merge_many(potentially_unmerged_ranges,
+ mergeinfo,
+ scratch_pool, scratch_pool));
}
}
@@ -9861,175 +10872,232 @@ find_unsynced_ranges(const char *source_repos_rel_path,
(APR_ARRAY_IDX(potentially_unmerged_ranges,
potentially_unmerged_ranges->nelts - 1,
svn_merge_range_t *))->end;
- apr_array_header_t *log_targets = apr_array_make(scratch_pool, 1,
- sizeof(const char *));
log_find_operative_baton_t log_baton;
+ const char *old_session_url;
+ svn_error_t *err;
log_baton.merged_catalog = merged_catalog;
log_baton.unmerged_catalog = true_unmerged_catalog;
- log_baton.source_repos_rel_path = source_repos_rel_path;
- log_baton.target_abspath = apr_psprintf(scratch_pool, "/%s",
- target_repos_rel_path);
+ log_baton.source_repos_rel_path
+ = svn_client__pathrev_relpath(source_loc, scratch_pool);
+ log_baton.target_fspath
+ = svn_client__pathrev_fspath(target_loc, scratch_pool);
log_baton.result_pool = result_pool;
- APR_ARRAY_PUSH(log_targets, const char *) = "";
+ SVN_ERR(svn_client__ensure_ra_session_url(
+ &old_session_url, ra_session, target_loc->url, scratch_pool));
+ err = get_log(ra_session, "", youngest_rev, oldest_rev,
+ TRUE, /* discover_changed_paths */
+ log_find_operative_revs, &log_baton,
+ scratch_pool);
+ SVN_ERR(svn_error_compose_create(
+ err, svn_ra_reparent(ra_session, old_session_url, scratch_pool)));
+ }
- SVN_ERR(svn_ra_get_log2(ra_session, log_targets, youngest_rev,
- oldest_rev, 0, TRUE, FALSE, FALSE,
- NULL, log_find_operative_revs, &log_baton,
- scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+
+/* Find the youngest revision that has been merged from target to source.
+ *
+ * If any location in TARGET_HISTORY_AS_MERGEINFO is mentioned in
+ * SOURCE_MERGEINFO, then we know that at least one merge was done from the
+ * target to the source. In that case, set *YOUNGEST_MERGED_REV to the
+ * youngest revision of that intersection (unless *YOUNGEST_MERGED_REV is
+ * already younger than that). Otherwise, leave *YOUNGEST_MERGED_REV alone.
+ */
+static svn_error_t *
+find_youngest_merged_rev(svn_revnum_t *youngest_merged_rev,
+ svn_mergeinfo_t target_history_as_mergeinfo,
+ svn_mergeinfo_t source_mergeinfo,
+ apr_pool_t *scratch_pool)
+{
+ svn_mergeinfo_t explicit_source_target_history_intersection;
+
+ SVN_ERR(svn_mergeinfo_intersect2(
+ &explicit_source_target_history_intersection,
+ source_mergeinfo, target_history_as_mergeinfo, TRUE,
+ scratch_pool, scratch_pool));
+ if (apr_hash_count(explicit_source_target_history_intersection))
+ {
+ svn_revnum_t old_rev, young_rev;
+
+ /* Keep track of the youngest revision merged from target to source. */
+ SVN_ERR(svn_mergeinfo__get_range_endpoints(
+ &young_rev, &old_rev,
+ explicit_source_target_history_intersection, scratch_pool));
+ if (!SVN_IS_VALID_REVNUM(*youngest_merged_rev)
+ || (young_rev > *youngest_merged_rev))
+ *youngest_merged_rev = young_rev;
}
return SVN_NO_ERROR;
}
+/* Set *FILTERED_MERGEINFO_P to the parts of TARGET_HISTORY_AS_MERGEINFO
+ * that are not present in the source branch.
+ *
+ * SOURCE_MERGEINFO is the explicit or inherited mergeinfo of the source
+ * branch SOURCE_PATHREV. Extend SOURCE_MERGEINFO, modifying it in
+ * place, to include the natural history (implicit mergeinfo) of
+ * SOURCE_PATHREV. ### But make these additions in SCRATCH_POOL.
+ *
+ * SOURCE_RA_SESSION is an RA session open to the repository containing
+ * SOURCE_PATHREV; it may be temporarily reparented within this function.
+ *
+ * ### [JAF] This function is named '..._subroutine' simply because I
+ * factored it out based on code similarity, without knowing what it's
+ * purpose is. We should clarify its purpose and choose a better name.
+ */
+static svn_error_t *
+find_unmerged_mergeinfo_subroutine(svn_mergeinfo_t *filtered_mergeinfo_p,
+ svn_mergeinfo_t target_history_as_mergeinfo,
+ svn_mergeinfo_t source_mergeinfo,
+ const svn_client__pathrev_t *source_pathrev,
+ svn_ra_session_t *source_ra_session,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_mergeinfo_t source_history_as_mergeinfo;
+
+ /* Get the source path's natural history and merge it into source
+ path's explicit or inherited mergeinfo. */
+ SVN_ERR(svn_client__get_history_as_mergeinfo(
+ &source_history_as_mergeinfo, NULL /* has_rev_zero_history */,
+ source_pathrev, source_pathrev->rev, SVN_INVALID_REVNUM,
+ source_ra_session, ctx, scratch_pool));
+ SVN_ERR(svn_mergeinfo_merge2(source_mergeinfo,
+ source_history_as_mergeinfo,
+ scratch_pool, scratch_pool));
+
+ /* Now source_mergeinfo represents everything we know about
+ source_path's history. Now we need to know what part, if any, of the
+ corresponding target's history is *not* part of source_path's total
+ history; because it is neither shared history nor was it ever merged
+ from the target to the source. */
+ SVN_ERR(svn_mergeinfo_remove2(filtered_mergeinfo_p,
+ source_mergeinfo,
+ target_history_as_mergeinfo, TRUE,
+ result_pool, scratch_pool));
+ return SVN_NO_ERROR;
+}
/* Helper for calculate_left_hand_side() which produces a mergeinfo catalog
describing what parts of of the reintegrate target have not previously been
merged to the reintegrate source.
- SOURCE_CATALOG is the collection of explicit mergeinfo on
- SOURCE_REPOS_REL_PATH@SOURCE_REV and all its children, i.e. the mergeinfo
- catalog for the reintegrate source.
+ SOURCE_CATALOG is the collection of explicit mergeinfo on SOURCE_LOC and
+ all its children, i.e. the mergeinfo catalog for the reintegrate source.
- TARGET_SEGMENTS_HASH is a hash of (const char *) paths mapped to
- (apr_array_header_t *) arrays of svn_location_segment_t *. Each of these
+ TARGET_HISTORY_HASH is a hash of (const char *) paths mapped to
+ svn_mergeinfo_t representing the location history. Each of these
path keys represent a path in the reintegrate target, relative to the
repository root, which has explicit mergeinfo and/or is the reintegrate
- target itself. The segment arrays contain the natural history of each
+ target itself. The svn_mergeinfo_t's contain the natural history of each
path@TARGET_REV. Effectively this is the mergeinfo catalog on the
reintegrate target.
YC_ANCESTOR_REV is the revision of the youngest common ancestor of the
reintegrate source and the reintegrate target.
- SOURCE_REPOS_REL_PATH is the path of the reintegrate source relative to
- the root of the repository. TARGET_REPOS_REL_PATH is the path of the
- reintegrate target relative to the root of the repository.
-
- TARGET_REV is the working revision the entire WC tree rooted at
- TARGET_REPOS_REL_PATH is at. SOURCE_REV is the peg revision of the
- reintegrate source.
+ SOURCE_LOC is the reintegrate source.
- SOURCE_RA_SESSION is a session opened to the SOURCE_REPOS_REL_PATH
- and TARGET_RA_SESSION is open to TARGET_REPOS_REL_PATH.
+ SOURCE_RA_SESSION is a session opened to the URL of SOURCE_LOC
+ and TARGET_RA_SESSION is open to TARGET->loc.url.
- For each path/segment in TARGET_SEGMENTS_HASH check that the history that
- segment represents is contained in either the explicit mergeinfo for the
+ For each entry in TARGET_HISTORY_HASH check that the history it
+ represents is contained in either the explicit mergeinfo for the
corresponding path in SOURCE_CATALOG, the corresponding path's inherited
mergeinfo (if no explicit mergeinfo for the path is found in
SOURCE_CATALOG), or the corresponding path's natural history. Populate
*UNMERGED_TO_SOURCE_CATALOG with the corresponding source paths mapped to
the mergeinfo from the target's natural history which is *not* found. Also
include any mergeinfo from SOURCE_CATALOG which explicitly describes the
- target's history but for which *no* path/segment was found in
- TARGET_SEGMENTS_HASH.
+ target's history but for which *no* entry was found in
+ TARGET_HISTORY_HASH.
- If no part of TARGET_SEGMENTS_HASH is found in SOURCE_CATALOG set
- *NEVER_SYNCHED to TRUE and set *YOUNGEST_MERGED_REV to SVN_INVALID_REVNUM.
- Otherwise set *NEVER_SYNCHED to FALSE, *YOUNGEST_MERGED_REV to the youngest
+ If no part of TARGET_HISTORY_HASH is found in SOURCE_CATALOG set
+ *YOUNGEST_MERGED_REV to SVN_INVALID_REVNUM; otherwise set it to the youngest
revision previously merged from the target to the source, and filter
*UNMERGED_TO_SOURCE_CATALOG so that it contains no ranges greater than
*YOUNGEST_MERGED_REV.
*UNMERGED_TO_SOURCE_CATALOG is (deeply) allocated in RESULT_POOL.
- SCRATCH_POOL is used for all temporary allocations. */
+ SCRATCH_POOL is used for all temporary allocations. */
static svn_error_t *
find_unmerged_mergeinfo(svn_mergeinfo_catalog_t *unmerged_to_source_catalog,
- svn_boolean_t *never_synched,
svn_revnum_t *youngest_merged_rev,
svn_revnum_t yc_ancestor_rev,
svn_mergeinfo_catalog_t source_catalog,
- apr_hash_t *target_segments_hash,
- const char *source_repos_rel_path,
- const char *target_repos_rel_path,
- svn_revnum_t target_rev,
- svn_revnum_t source_rev,
+ apr_hash_t *target_history_hash,
+ const svn_client__pathrev_t *source_loc,
+ const merge_target_t *target,
svn_ra_session_t *source_ra_session,
svn_ra_session_t *target_ra_session,
svn_client_ctx_t *ctx,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
+ const char *source_repos_rel_path
+ = svn_client__pathrev_relpath(source_loc, scratch_pool);
+ const char *target_repos_rel_path
+ = svn_client__pathrev_relpath(&target->loc, scratch_pool);
apr_hash_index_t *hi;
svn_mergeinfo_catalog_t new_catalog = apr_hash_make(result_pool);
- svn_mergeinfo_t target_history_as_mergeinfo, source_history_as_mergeinfo;
- svn_mergeinfo_t common_mergeinfo;
apr_pool_t *iterpool = svn_pool_create(scratch_pool);
- svn_revnum_t old_rev, young_rev;
- *never_synched = TRUE;
+ assert(session_url_is(source_ra_session, source_loc->url, scratch_pool));
+ assert(session_url_is(target_ra_session, target->loc.url, scratch_pool));
+
*youngest_merged_rev = SVN_INVALID_REVNUM;
/* Examine the natural history of each path in the reintegrate target
with explicit mergeinfo. */
- for (hi = apr_hash_first(scratch_pool, target_segments_hash);
+ for (hi = apr_hash_first(scratch_pool, target_history_hash);
hi;
hi = apr_hash_next(hi))
{
- const char *path = svn__apr_hash_index_key(hi);
- apr_array_header_t *segments = svn__apr_hash_index_val(hi);
+ const char *target_path = svn__apr_hash_index_key(hi);
+ svn_mergeinfo_t target_history_as_mergeinfo = svn__apr_hash_index_val(hi);
+ const char *path_rel_to_session
+ = svn_relpath_skip_ancestor(target_repos_rel_path, target_path);
const char *source_path;
- const char *source_path_rel_to_session;
+ svn_client__pathrev_t *source_pathrev;
svn_mergeinfo_t source_mergeinfo, filtered_mergeinfo;
svn_pool_clear(iterpool);
- source_path_rel_to_session = path + strlen(target_repos_rel_path);
- if (source_path_rel_to_session[0] == '/') /* Remove leading '/'. */
- source_path_rel_to_session++;
source_path = svn_relpath_join(source_repos_rel_path,
- source_path_rel_to_session, iterpool);
-
- /* Convert this target path's natural history into mergeinfo. */
- SVN_ERR(svn_mergeinfo__mergeinfo_from_segments(
- &target_history_as_mergeinfo, segments, iterpool));
+ path_rel_to_session, iterpool);
+ source_pathrev = svn_client__pathrev_join_relpath(
+ source_loc, path_rel_to_session, iterpool);
/* Remove any target history that is also part of the source's history,
i.e. their common ancestry. By definition this has already been
- "merged" from the target to the source. If the source has explict
+ "merged" from the target to the source. If the source has explicit
self referential mergeinfo it would intersect with the target's
history below, making it appear that some merges had been done from
the target to the source, when this might not actually be the case. */
SVN_ERR(svn_mergeinfo__filter_mergeinfo_by_ranges(
&target_history_as_mergeinfo, target_history_as_mergeinfo,
- source_rev, yc_ancestor_rev, TRUE, iterpool, iterpool));
+ source_loc->rev, yc_ancestor_rev, TRUE, iterpool, iterpool));
/* Look for any explicit mergeinfo on the source path corresponding to
the target path. If we find any remove that from SOURCE_CATALOG.
- When this iteration over TARGET_SEGMENTS_HASH is complete all that
+ When this iteration over TARGET_HISTORY_HASH is complete all that
should be left in SOURCE_CATALOG are subtrees that have explicit
mergeinfo on the reintegrate source where there is no corresponding
explicit mergeinfo on the reintegrate target. */
- source_mergeinfo = apr_hash_get(source_catalog, source_path,
- APR_HASH_KEY_STRING);
+ source_mergeinfo = svn_hash_gets(source_catalog, source_path);
if (source_mergeinfo)
{
- svn_mergeinfo_t explicit_source_target_history_intersection;
+ svn_hash_sets(source_catalog, source_path, NULL);
- apr_hash_set(source_catalog, source_path, APR_HASH_KEY_STRING,
- NULL);
- /* If there is an intersection between the *explicit* mergeinfo on
- this source path and the corresponding target's history then we
- know that at least one merge was done from the target to the
- source. */
- SVN_ERR(svn_mergeinfo_intersect2(
- &explicit_source_target_history_intersection,
- source_mergeinfo, target_history_as_mergeinfo, TRUE,
- iterpool, iterpool));
- if (apr_hash_count(explicit_source_target_history_intersection))
- {
- *never_synched = FALSE;
- /* Keep track of the youngest revision merged from the
- target to the source. */
- SVN_ERR(svn_mergeinfo__get_range_endpoints(
- &young_rev, &old_rev,
- explicit_source_target_history_intersection,
- iterpool));
- if (!SVN_IS_VALID_REVNUM(*youngest_merged_rev)
- || (young_rev > *youngest_merged_rev))
- *youngest_merged_rev = young_rev;
- }
+ SVN_ERR(find_youngest_merged_rev(youngest_merged_rev,
+ target_history_as_mergeinfo,
+ source_mergeinfo,
+ iterpool));
}
else
{
@@ -10037,73 +11105,33 @@ find_unmerged_mergeinfo(svn_mergeinfo_catalog_t *unmerged_to_source_catalog,
exist at all. If simply doesn't exist we can ignore it
altogether. */
svn_node_kind_t kind;
- svn_mergeinfo_catalog_t subtree_catalog;
- apr_array_header_t *source_repos_rel_path_as_array;
SVN_ERR(svn_ra_check_path(source_ra_session,
- source_path_rel_to_session,
- source_rev, &kind, iterpool));
+ path_rel_to_session,
+ source_loc->rev, &kind, iterpool));
if (kind == svn_node_none)
continue;
/* Else source_path does exist though it has no explicit mergeinfo.
Find its inherited mergeinfo. If it doesn't have any then simply
set source_mergeinfo to an empty hash. */
- source_repos_rel_path_as_array =
- apr_array_make(iterpool, 1, sizeof(const char *));
- APR_ARRAY_PUSH(source_repos_rel_path_as_array, const char *)
- = source_path_rel_to_session;
- SVN_ERR(svn_ra_get_mergeinfo(source_ra_session, &subtree_catalog,
- source_repos_rel_path_as_array,
- source_rev, svn_mergeinfo_inherited,
- FALSE, iterpool));
- if (subtree_catalog)
- source_mergeinfo = apr_hash_get(subtree_catalog,
- source_path_rel_to_session,
- APR_HASH_KEY_STRING);
-
- /* A path might not have any inherited mergeinfo either. */
+ SVN_ERR(svn_client__get_repos_mergeinfo(
+ &source_mergeinfo, source_ra_session,
+ source_pathrev->url, source_pathrev->rev,
+ svn_mergeinfo_inherited, FALSE /*squelch_incapable*/,
+ iterpool));
if (!source_mergeinfo)
source_mergeinfo = apr_hash_make(iterpool);
}
- /* Get the source path's natural history and convert it to mergeinfo.
- Then merge that natural history into source path's explicit
- or inherited mergeinfo. */
- SVN_ERR(svn_client__repos_location_segments(&segments,
- source_ra_session,
- source_path_rel_to_session,
- source_rev, source_rev,
- SVN_INVALID_REVNUM,
- ctx, iterpool));
- SVN_ERR(svn_mergeinfo__mergeinfo_from_segments(
- &source_history_as_mergeinfo, segments, iterpool));
- SVN_ERR(svn_mergeinfo_merge(source_mergeinfo,
- source_history_as_mergeinfo, iterpool));
-
- /* Now source_mergeinfo represents everything we know about
- source_path's history. Now we need to know what part, if any, of the
- corresponding target's history is *not* part of source_path's total
- history; because it is neither shared history nor was it ever merged
- from the target to the source. */
- SVN_ERR(svn_mergeinfo_intersect2(&common_mergeinfo,
- source_mergeinfo,
- target_history_as_mergeinfo, TRUE,
- iterpool, iterpool));
-
- /* Use scratch_pool rather than iterpool because filtered_mergeinfo is
- going into new_catalog below and needs to last to the end of
+ /* Use scratch_pool rather than iterpool because filtered_mergeinfo
+ is going into new_catalog below and needs to last to the end of
this function. */
- SVN_ERR(svn_mergeinfo_remove2(&filtered_mergeinfo,
- common_mergeinfo,
- target_history_as_mergeinfo, TRUE,
- scratch_pool, iterpool));
-
- /* As with svn_mergeinfo_intersect above, we need to use scratch_pool
- rather than iterpool. */
- apr_hash_set(new_catalog,
- apr_pstrdup(scratch_pool, source_path),
- APR_HASH_KEY_STRING,
- filtered_mergeinfo);
+ SVN_ERR(find_unmerged_mergeinfo_subroutine(
+ &filtered_mergeinfo, target_history_as_mergeinfo,
+ source_mergeinfo, source_pathrev,
+ source_ra_session, ctx, scratch_pool, iterpool));
+ svn_hash_sets(new_catalog, apr_pstrdup(scratch_pool, source_path),
+ filtered_mergeinfo);
}
/* Are there any subtrees with explicit mergeinfo still left in the merge
@@ -10111,109 +11139,72 @@ find_unmerged_mergeinfo(svn_mergeinfo_catalog_t *unmerged_to_source_catalog,
in the merge target? If so, add the intersection of those path's
mergeinfo and the corresponding target path's mergeinfo to
new_catalog. */
- if (apr_hash_count(source_catalog))
+ for (hi = apr_hash_first(scratch_pool, source_catalog);
+ hi;
+ hi = apr_hash_next(hi))
{
- for (hi = apr_hash_first(scratch_pool, source_catalog);
- hi;
- hi = apr_hash_next(hi))
- {
- const char *source_path = svn__apr_hash_index_key(hi);
- const char *source_path_rel_to_session =
- svn_relpath_skip_ancestor(source_repos_rel_path, source_path);
- svn_mergeinfo_t source_mergeinfo = svn__apr_hash_index_val(hi);
- svn_mergeinfo_t filtered_mergeinfo;
- const char *target_path;
- apr_array_header_t *segments;
- svn_error_t *err;
+ const char *source_path = svn__apr_hash_index_key(hi);
+ const char *path_rel_to_session =
+ svn_relpath_skip_ancestor(source_repos_rel_path, source_path);
+ const char *source_url;
+ svn_mergeinfo_t source_mergeinfo = svn__apr_hash_index_val(hi);
+ svn_mergeinfo_t filtered_mergeinfo;
+ svn_client__pathrev_t *target_pathrev;
+ svn_mergeinfo_t target_history_as_mergeinfo;
+ svn_error_t *err;
- svn_pool_clear(iterpool);
+ svn_pool_clear(iterpool);
- target_path = source_path + strlen(source_repos_rel_path);
- if (target_path[0] == '/') /* Remove leading '/'. */
- target_path++;
- err = svn_client__repos_location_segments(&segments,
- target_ra_session,
- target_path,
- target_rev, target_rev,
- SVN_INVALID_REVNUM,
- ctx, iterpool);
- if (err)
+ source_url = svn_path_url_add_component2(source_loc->url,
+ path_rel_to_session, iterpool);
+ target_pathrev = svn_client__pathrev_join_relpath(
+ &target->loc, path_rel_to_session, iterpool);
+ err = svn_client__get_history_as_mergeinfo(&target_history_as_mergeinfo,
+ NULL /* has_rev_zero_history */,
+ target_pathrev,
+ target->loc.rev,
+ SVN_INVALID_REVNUM,
+ target_ra_session,
+ ctx, iterpool);
+ if (err)
+ {
+ if (err->apr_err == SVN_ERR_FS_NOT_FOUND
+ || err->apr_err == SVN_ERR_RA_DAV_REQUEST_FAILED)
{
- if (err->apr_err == SVN_ERR_FS_NOT_FOUND
- || err->apr_err == SVN_ERR_RA_DAV_REQUEST_FAILED)
- {
- /* This path with explicit mergeinfo in the source doesn't
- exist on the target. */
- svn_error_clear(err);
- err = NULL;
- }
- else
- {
- return svn_error_trace(err);
- }
+ /* This path with explicit mergeinfo in the source doesn't
+ exist on the target. */
+ svn_error_clear(err);
+ err = NULL;
}
else
{
- svn_mergeinfo_t explicit_source_target_history_intersection;
-
- SVN_ERR(svn_mergeinfo__mergeinfo_from_segments(
- &target_history_as_mergeinfo, segments, iterpool));
-
- /* If there is an intersection between the *explicit* mergeinfo
- on this source path and the corresponding target's history
- then we know that at least one merge was done from the target
- to the source. */
- SVN_ERR(svn_mergeinfo_intersect2(
- &explicit_source_target_history_intersection,
- source_mergeinfo, target_history_as_mergeinfo, TRUE,
- iterpool, iterpool));
+ return svn_error_trace(err);
+ }
+ }
+ else
+ {
+ svn_client__pathrev_t *pathrev;
- if (apr_hash_count(explicit_source_target_history_intersection))
- {
- *never_synched = FALSE;
- /* Keep track of the youngest revision merged from the
- target to the source. */
- SVN_ERR(svn_mergeinfo__get_range_endpoints(
- &young_rev, &old_rev,
- explicit_source_target_history_intersection, iterpool));
- if (!SVN_IS_VALID_REVNUM(*youngest_merged_rev)
- || (young_rev > *youngest_merged_rev))
- *youngest_merged_rev = young_rev;
- }
+ SVN_ERR(find_youngest_merged_rev(youngest_merged_rev,
+ target_history_as_mergeinfo,
+ source_mergeinfo,
+ iterpool));
- /* Get the source path's natural history and convert it to
- mergeinfo. Then merge that natural history into source
- path's explicit or inherited mergeinfo. */
- SVN_ERR(svn_client__repos_location_segments(
- &segments,
- source_ra_session,
- source_path_rel_to_session,
- target_rev,
- target_rev,
- SVN_INVALID_REVNUM,
- ctx, iterpool));
- SVN_ERR(svn_mergeinfo__mergeinfo_from_segments(
- &source_history_as_mergeinfo, segments, iterpool));
- SVN_ERR(svn_mergeinfo_merge(source_mergeinfo,
- source_history_as_mergeinfo,
- iterpool));
- SVN_ERR(svn_mergeinfo_intersect2(&common_mergeinfo,
- source_mergeinfo,
- target_history_as_mergeinfo,
- TRUE, iterpool, iterpool));
- /* Use subpool rather than iterpool because filtered_mergeinfo
- is going into new_catalog below and needs to last to the
- end of this function. */
- SVN_ERR(svn_mergeinfo_remove2(&filtered_mergeinfo,
- common_mergeinfo,
- target_history_as_mergeinfo,
- TRUE, scratch_pool, iterpool));
- if (apr_hash_count(filtered_mergeinfo))
- apr_hash_set(new_catalog,
- apr_pstrdup(scratch_pool, source_path),
- APR_HASH_KEY_STRING,
- filtered_mergeinfo);
- }
+ /* Use scratch_pool rather than iterpool because filtered_mergeinfo
+ is going into new_catalog below and needs to last to the end of
+ this function. */
+ /* ### Why looking at SOURCE_url at TARGET_rev? */
+ SVN_ERR(svn_client__pathrev_create_with_session(
+ &pathrev, source_ra_session, target->loc.rev, source_url,
+ iterpool));
+ SVN_ERR(find_unmerged_mergeinfo_subroutine(
+ &filtered_mergeinfo, target_history_as_mergeinfo,
+ source_mergeinfo, pathrev,
+ source_ra_session, ctx, scratch_pool, iterpool));
+ if (apr_hash_count(filtered_mergeinfo))
+ svn_hash_sets(new_catalog,
+ apr_pstrdup(scratch_pool, source_path),
+ filtered_mergeinfo);
}
}
@@ -10238,158 +11229,116 @@ find_unmerged_mergeinfo(svn_mergeinfo_catalog_t *unmerged_to_source_catalog,
/* Helper for svn_client_merge_reintegrate() which calculates the
'left hand side' of the underlying two-URL merge that a --reintegrate
merge actually performs. If no merge should be performed, set
- *URL_LEFT to NULL and *REV_LEFT to SVN_INVALID_REVNUM.
+ *LEFT_P to NULL.
- TARGET_ABSPATH is the absolute working copy path of the reintegrate
+ TARGET->abspath is the absolute working copy path of the reintegrate
merge.
- TARGET_REPOS_REL_PATH is the path of TARGET_ABSPATH relative to
- the root of the repository. SOURCE_REPOS_REL_PATH is the path of the
- reintegrate source relative to the root of the repository.
+ SOURCE_LOC is the reintegrate source.
SUBTREES_WITH_MERGEINFO is a hash of (const char *) absolute paths mapped
- to (svn_string_t *) mergeinfo values for each working copy path with
- explicit mergeinfo in TARGET_ABSPATH.
+ to (svn_mergeinfo_t *) mergeinfo values for each working copy path with
+ explicit mergeinfo in TARGET->abspath. Actually we only need to know the
+ paths, not the mergeinfo.
- TARGET_REV is the working revision the entire WC tree rooted at
- TARGET_REPOS_REL_PATH is at. SOURCE_REV is the peg revision of the
- reintegrate source.
+ TARGET->loc.rev is the working revision the entire WC tree rooted at
+ TARGET is at.
Populate *UNMERGED_TO_SOURCE_CATALOG with the mergeinfo describing what
- parts of TARGET_REPOS_REL_PATH@TARGET_REV have not been merged to
- SOURCE_REPOS_REL_PATH@SOURCE_REV, up to the youngest revision ever merged
- from the TARGET_ABSPATH to the source if such exists, see doc string for
- find_unmerged_mergeinfo().
+ parts of TARGET->loc have not been merged to SOURCE_LOC, up to the
+ youngest revision ever merged from the TARGET->abspath to the source if
+ such exists, see doc string for find_unmerged_mergeinfo().
- SOURCE_RA_SESSION is a session opened to the SOURCE_REPOS_REL_PATH
- and TARGET_RA_SESSION is open to TARGET_REPOS_REL_PATH.
+ SOURCE_RA_SESSION is a session opened to the SOURCE_LOC
+ and TARGET_RA_SESSION is open to TARGET->loc.url.
- *URL_LEFT, *MERGED_TO_SOURCE_CATALOG , and *UNMERGED_TO_SOURCE_CATALOG are
+ *LEFT_P, *MERGED_TO_SOURCE_CATALOG , and *UNMERGED_TO_SOURCE_CATALOG are
allocated in RESULT_POOL. SCRATCH_POOL is used for all temporary
allocations. */
static svn_error_t *
-calculate_left_hand_side(const char **url_left,
- svn_revnum_t *rev_left,
- svn_mergeinfo_t *merged_to_source_catalog,
- svn_mergeinfo_t *unmerged_to_source_catalog,
- const char *target_abspath,
- const char *target_repos_rel_path,
+calculate_left_hand_side(svn_client__pathrev_t **left_p,
+ svn_mergeinfo_catalog_t *merged_to_source_catalog,
+ svn_mergeinfo_catalog_t *unmerged_to_source_catalog,
+ const merge_target_t *target,
apr_hash_t *subtrees_with_mergeinfo,
- svn_revnum_t target_rev,
- const char *source_repos_rel_path,
- const char *source_repos_root,
- const char *target_repos_root,
- svn_revnum_t source_rev,
+ const svn_client__pathrev_t *source_loc,
svn_ra_session_t *source_ra_session,
svn_ra_session_t *target_ra_session,
svn_client_ctx_t *ctx,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- apr_array_header_t *segments; /* array of (svn_location_segment_t *) */
svn_mergeinfo_catalog_t mergeinfo_catalog, unmerged_catalog;
- apr_array_header_t *source_repos_rel_path_as_array
- = apr_array_make(scratch_pool, 1, sizeof(const char *));
apr_pool_t *iterpool = svn_pool_create(scratch_pool);
apr_hash_index_t *hi;
- /* hash of paths mapped to arrays of svn_location_segment_t *. */
- apr_hash_t *segments_hash = apr_hash_make(scratch_pool);
- svn_boolean_t never_synced;
+ /* hash of paths mapped to arrays of svn_mergeinfo_t. */
+ apr_hash_t *target_history_hash = apr_hash_make(scratch_pool);
svn_revnum_t youngest_merged_rev;
- const char *yc_ancestor_path;
- svn_revnum_t yc_ancestor_rev;
- const char *source_url;
- const char *target_url;
+ svn_client__pathrev_t *yc_ancestor;
+
+ assert(session_url_is(source_ra_session, source_loc->url, scratch_pool));
+ assert(session_url_is(target_ra_session, target->loc.url, scratch_pool));
/* Initialize our return variables. */
- *url_left = NULL;
- *rev_left = SVN_INVALID_REVNUM;
+ *left_p = NULL;
- /* TARGET_ABSPATH may not have explicit mergeinfo and thus may not be
+ /* TARGET->abspath may not have explicit mergeinfo and thus may not be
contained within SUBTREES_WITH_MERGEINFO. If this is the case then
- add a dummy item for TARGET_ABSPATH so we get its history (i.e. implicit
+ add a dummy item for TARGET->abspath so we get its history (i.e. implicit
mergeinfo) below. */
- if (!apr_hash_get(subtrees_with_mergeinfo, target_abspath,
- APR_HASH_KEY_STRING))
- apr_hash_set(subtrees_with_mergeinfo, target_abspath,
- APR_HASH_KEY_STRING, svn_string_create("", result_pool));
+ if (!svn_hash_gets(subtrees_with_mergeinfo, target->abspath))
+ svn_hash_sets(subtrees_with_mergeinfo, target->abspath,
+ apr_hash_make(result_pool));
- /* Get the history (segments) for TARGET_ABSPATH and any of its subtrees
- with explicit mergeinfo. */
+ /* Get the history segments (as mergeinfo) for TARGET->abspath and any of
+ its subtrees with explicit mergeinfo. */
for (hi = apr_hash_first(scratch_pool, subtrees_with_mergeinfo);
hi;
hi = apr_hash_next(hi))
{
- const char *absolute_path = svn__apr_hash_index_key(hi);
- svn_string_t *mergeinfo_string = svn__apr_hash_index_val(hi);
- const char *path_rel_to_session;
- const char *path_rel_to_root;
- svn_mergeinfo_t subtree_mergeinfo;
- svn_error_t *err;
+ const char *local_abspath = svn__apr_hash_index_key(hi);
+ svn_client__pathrev_t *target_child;
+ const char *repos_relpath;
+ svn_mergeinfo_t target_history_as_mergeinfo;
svn_pool_clear(iterpool);
- /* Issue #3896: If invalid mergeinfo in the reintegrate target
- prevents us from proceeding, then raise the best error possible. */
- err = svn_mergeinfo_parse(&subtree_mergeinfo, mergeinfo_string->data,
- iterpool);
- if (err)
- {
- if (err->apr_err == SVN_ERR_MERGEINFO_PARSE_ERROR)
- {
- err = svn_error_createf(
- SVN_ERR_CLIENT_INVALID_MERGEINFO_NO_MERGETRACKING, err,
- _("Invalid mergeinfo detected on '%s', "
- "reintegrate merge not possible"),
- svn_dirent_local_style(absolute_path, scratch_pool));
- }
- return svn_error_trace(err);
- }
-
/* Convert the absolute path with mergeinfo on it to a path relative
to the session root. */
- SVN_ERR(svn_client__path_relative_to_root(&path_rel_to_root,
- ctx->wc_ctx, absolute_path,
- target_repos_root, FALSE,
- NULL, scratch_pool,
- iterpool));
- path_rel_to_session = svn_relpath_skip_ancestor(target_repos_rel_path,
- path_rel_to_root);
- SVN_ERR(svn_client__repos_location_segments(&segments,
- target_ra_session,
- path_rel_to_session,
- target_rev, target_rev,
- SVN_INVALID_REVNUM,
- ctx, scratch_pool));
- apr_hash_set(segments_hash,
- apr_pstrdup(scratch_pool, path_rel_to_root),
- APR_HASH_KEY_STRING, segments);
- }
-
- /* Check that SOURCE_URL@SOURCE_REV and TARGET_URL@TARGET_REV are
+ SVN_ERR(svn_wc__node_get_repos_info(NULL, &repos_relpath, NULL, NULL,
+ ctx->wc_ctx, local_abspath,
+ scratch_pool, iterpool));
+ target_child = svn_client__pathrev_create_with_relpath(
+ target->loc.repos_root_url, target->loc.repos_uuid,
+ target->loc.rev, repos_relpath, iterpool);
+ SVN_ERR(svn_client__get_history_as_mergeinfo(&target_history_as_mergeinfo,
+ NULL /* has_rev_zero_hist */,
+ target_child,
+ target->loc.rev,
+ SVN_INVALID_REVNUM,
+ target_ra_session,
+ ctx, scratch_pool));
+
+ svn_hash_sets(target_history_hash, repos_relpath,
+ target_history_as_mergeinfo);
+ }
+
+ /* Check that SOURCE_LOC and TARGET->loc are
actually related, we can't reintegrate if they are not. Also
- get an initial value for YC_ANCESTOR_REV. */
- source_url = svn_path_url_add_component2(source_repos_root,
- source_repos_rel_path,
- iterpool);
- target_url = svn_path_url_add_component2(source_repos_root,
- target_repos_rel_path,
- iterpool);
- SVN_ERR(svn_client__get_youngest_common_ancestor(&yc_ancestor_path,
- &yc_ancestor_rev,
- source_url, source_rev,
- target_url, target_rev,
- ctx, iterpool));
- if (!(yc_ancestor_path && SVN_IS_VALID_REVNUM(yc_ancestor_rev)))
+ get an initial value for the YCA revision number. */
+ SVN_ERR(svn_client__get_youngest_common_ancestor(
+ &yc_ancestor, source_loc, &target->loc, target_ra_session, ctx,
+ iterpool, iterpool));
+ if (! yc_ancestor)
return svn_error_createf(SVN_ERR_CLIENT_NOT_READY_TO_MERGE, NULL,
_("'%s@%ld' must be ancestrally related to "
- "'%s@%ld'"), source_url, source_rev,
- target_url, target_rev);
+ "'%s@%ld'"), source_loc->url, source_loc->rev,
+ target->loc.url, target->loc.rev);
/* If the source revision is the same as the youngest common
revision, then there can't possibly be any unmerged revisions
that we need to apply to target. */
- if (source_rev == yc_ancestor_rev)
+ if (source_loc->rev == yc_ancestor->rev)
{
svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
@@ -10397,17 +11346,11 @@ calculate_left_hand_side(const char **url_left,
/* Get the mergeinfo from the source, including its descendants
with differing explicit mergeinfo. */
- APR_ARRAY_PUSH(source_repos_rel_path_as_array, const char *) = "";
- SVN_ERR(svn_ra_get_mergeinfo(source_ra_session, &mergeinfo_catalog,
- source_repos_rel_path_as_array, source_rev,
- svn_mergeinfo_inherited,
- TRUE, iterpool));
-
- if (mergeinfo_catalog)
- SVN_ERR(svn_mergeinfo__add_prefix_to_catalog(&mergeinfo_catalog,
- mergeinfo_catalog,
- source_repos_rel_path,
- iterpool, iterpool));
+ SVN_ERR(svn_client__get_repos_mergeinfo_catalog(
+ &mergeinfo_catalog, source_ra_session,
+ source_loc->url, source_loc->rev,
+ svn_mergeinfo_inherited, FALSE /* squelch_incapable */,
+ TRUE /* include_descendants */, iterpool, iterpool));
if (!mergeinfo_catalog)
mergeinfo_catalog = apr_hash_make(iterpool);
@@ -10417,17 +11360,14 @@ calculate_left_hand_side(const char **url_left,
/* Filter the source's mergeinfo catalog so that we are left with
mergeinfo that describes what has *not* previously been merged from
- TARGET_REPOS_REL_PATH@TARGET_REV to SOURCE_REPOS_REL_PATH@SOURCE_REV. */
+ TARGET->loc to SOURCE_LOC. */
SVN_ERR(find_unmerged_mergeinfo(&unmerged_catalog,
- &never_synced,
&youngest_merged_rev,
- yc_ancestor_rev,
+ yc_ancestor->rev,
mergeinfo_catalog,
- segments_hash,
- source_repos_rel_path,
- target_repos_rel_path,
- target_rev,
- source_rev,
+ target_history_hash,
+ source_loc,
+ target,
source_ra_session,
target_ra_session,
ctx,
@@ -10439,167 +11379,89 @@ calculate_left_hand_side(const char **url_left,
*unmerged_to_source_catalog = svn_mergeinfo_catalog_dup(unmerged_catalog,
result_pool);
- if (never_synced)
+ if (youngest_merged_rev == SVN_INVALID_REVNUM)
{
/* We never merged to the source. Just return the branch point. */
- *url_left = svn_path_url_add_component2(source_repos_root,
- yc_ancestor_path, result_pool);
- *rev_left = yc_ancestor_rev;
+ *left_p = svn_client__pathrev_dup(yc_ancestor, result_pool);
}
else
{
/* We've previously merged some or all of the target, up to
- youngest_merged_rev, from TARGET_ABSPATH to the source. Set
- *URL_LEFT and *REV_LEFT to cover the youngest part of this range. */
- svn_opt_revision_t peg_revision, youngest_rev, unspecified_rev;
- svn_opt_revision_t *start_revision;
- const char *youngest_url;
-
- peg_revision.kind = svn_opt_revision_number;
- peg_revision.value.number = target_rev;
-
- youngest_rev.kind = svn_opt_revision_number;
- youngest_rev.value.number = youngest_merged_rev;
-
- unspecified_rev.kind = svn_opt_revision_unspecified;
-
- *rev_left = youngest_rev.value.number;
-
- /* Get the URL of the target_url@youngest_merged_rev. */
- SVN_ERR(svn_client__repos_locations(&youngest_url, &start_revision,
- NULL, NULL, target_ra_session,
- target_url, &peg_revision,
- &youngest_rev, &unspecified_rev,
- ctx, iterpool));
-
- *url_left = apr_pstrdup(result_pool, youngest_url);
+ youngest_merged_rev, to the source. Set
+ *LEFT_P to cover the youngest part of this range. */
+ SVN_ERR(svn_client__repos_location(left_p, target_ra_session,
+ &target->loc, youngest_merged_rev,
+ ctx, result_pool, iterpool));
}
svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
+/* Determine the URLs and revisions needed to perform a reintegrate merge
+ * from SOURCE_LOC into the working copy at TARGET.
+ *
+ * SOURCE_RA_SESSION and TARGET_RA_SESSION are RA sessions opened to the
+ * URLs of SOURCE_LOC and TARGET->loc respectively.
+ *
+ * Set *SOURCE_P to
+ * the source-left and source-right locations of the required merge. Set
+ * *YC_ANCESTOR_P to the location of the youngest ancestor.
+ * Any of these output pointers may be NULL if not wanted.
+ *
+ * See svn_client_find_reintegrate_merge() for other details.
+ */
static svn_error_t *
-merge_reintegrate_locked(const char *source,
- const svn_opt_revision_t *peg_revision,
- const char *target_abspath,
- svn_boolean_t dry_run,
- const apr_array_header_t *merge_options,
- svn_client_ctx_t *ctx,
- apr_pool_t *scratch_pool)
+find_reintegrate_merge(merge_source_t **source_p,
+ svn_client__pathrev_t **yc_ancestor_p,
+ svn_ra_session_t *source_ra_session,
+ const svn_client__pathrev_t *source_loc,
+ svn_ra_session_t *target_ra_session,
+ const merge_target_t *target,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- const char *wc_repos_root, *source_repos_root;
- svn_opt_revision_t working_revision;
- svn_ra_session_t *target_ra_session;
- svn_ra_session_t *source_ra_session;
- const char *source_repos_rel_path, *target_repos_rel_path;
- const char *yc_ancestor_path;
- svn_revnum_t yc_ancestor_rev;
- const char *url1, *url2;
- svn_revnum_t rev1, rev2;
- svn_mergeinfo_t unmerged_to_source_mergeinfo_catalog;
- svn_mergeinfo_t final_unmerged_catalog;
- svn_mergeinfo_t merged_to_source_mergeinfo_catalog;
- svn_boolean_t use_sleep = FALSE;
+ svn_client__pathrev_t *yc_ancestor;
+ svn_client__pathrev_t *loc1;
+ merge_source_t source;
+ svn_mergeinfo_catalog_t unmerged_to_source_mergeinfo_catalog;
+ svn_mergeinfo_catalog_t merged_to_source_mergeinfo_catalog;
svn_error_t *err;
apr_hash_t *subtrees_with_mergeinfo;
- const char *target_url;
- svn_revnum_t target_base_rev;
- svn_node_kind_t kind;
- svn_opt_revision_t no_rev;
- /* Make sure the target is really there. */
- SVN_ERR(svn_io_check_path(target_abspath, &kind, scratch_pool));
- if (kind == svn_node_none)
- return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
- _("Path '%s' does not exist"),
- svn_dirent_local_style(target_abspath,
- scratch_pool));
-
- /* Make sure we're dealing with a real URL. */
- SVN_ERR(svn_client_url_from_path2(&url2, source, ctx,
- scratch_pool, scratch_pool));
- if (! url2)
- return svn_error_createf(SVN_ERR_ENTRY_MISSING_URL, NULL,
- _("'%s' has no URL"),
- svn_dirent_local_style(source, scratch_pool));
-
- /* Determine the working copy target's repository root URL. */
- SVN_ERR(svn_client__get_repos_root(&wc_repos_root, target_abspath,
- ctx, scratch_pool, scratch_pool));
-
- /* Determine the source's repository root URL. */
- SVN_ERR(svn_client__get_repos_root(&source_repos_root, url2,
- ctx, scratch_pool, scratch_pool));
-
- /* source_repos_root and wc_repos_root are required to be the same,
- as mergeinfo doesn't come into play for cross-repository merging. */
- if (strcmp(source_repos_root, wc_repos_root) != 0)
- return svn_error_createf(SVN_ERR_CLIENT_UNRELATED_RESOURCES, NULL,
- _("'%s' must be from the same repository as "
- "'%s'"), svn_dirent_local_style(source,
- scratch_pool),
- svn_dirent_local_style(target_abspath,
- scratch_pool));
-
- /* A reintegrate merge requires the merge target to reflect a subtree
- * of the repository as found at a single revision. */
- SVN_ERR(ensure_wc_is_suitable_merge_target(target_abspath, ctx,
- FALSE, FALSE, FALSE,
- scratch_pool));
- SVN_ERR(svn_wc__node_get_base_rev(&target_base_rev, ctx->wc_ctx,
- target_abspath, scratch_pool));
+ assert(session_url_is(source_ra_session, source_loc->url, scratch_pool));
+ assert(session_url_is(target_ra_session, target->loc.url, scratch_pool));
/* As the WC tree is "pure", use its last-updated-to revision as
the default revision for the left side of our merge, since that's
what the repository sub-tree is required to be up to date with
(with regard to the WC). */
- rev1 = target_base_rev;
-
- source_repos_rel_path = svn_uri_skip_ancestor(wc_repos_root, url2,
- scratch_pool);
- SVN_ERR(svn_client__path_relative_to_root(&target_repos_rel_path,
- ctx->wc_ctx, target_abspath,
- wc_repos_root, FALSE, NULL,
- scratch_pool, scratch_pool));
+ /* ### Bogus/obsolete comment? */
/* Can't reintegrate to or from the root of the repository. */
- if (svn_path_is_empty(source_repos_rel_path)
- || svn_path_is_empty(target_repos_rel_path))
+ if (strcmp(source_loc->url, source_loc->repos_root_url) == 0
+ || strcmp(target->loc.url, target->loc.repos_root_url) == 0)
return svn_error_createf(SVN_ERR_CLIENT_NOT_READY_TO_MERGE, NULL,
_("Neither the reintegrate source nor target "
"can be the root of the repository"));
- /* Find all the subtree's in TARGET_WCPATH that have explicit mergeinfo. */
- working_revision.kind = svn_opt_revision_working;
- SVN_ERR(svn_client_propget4(&subtrees_with_mergeinfo, SVN_PROP_MERGEINFO,
- target_abspath, &working_revision,
- &working_revision, NULL, svn_depth_infinity,
- NULL, ctx, scratch_pool, scratch_pool));
-
- /* Open two RA sessions, one to our source and one to our target. */
- no_rev.kind = svn_opt_revision_unspecified;
- SVN_ERR(svn_client__ra_session_from_path(&source_ra_session, &rev2, &url2,
- url2, NULL, peg_revision, &no_rev,
- ctx, scratch_pool));
- SVN_ERR(svn_wc__node_get_url(&target_url, ctx->wc_ctx, target_abspath,
- scratch_pool, scratch_pool));
- SVN_ERR(svn_client__open_ra_session_internal(&target_ra_session, NULL,
- target_url,
- NULL, NULL, FALSE, FALSE,
- ctx, scratch_pool));
+ /* Find all the subtrees in TARGET_WCPATH that have explicit mergeinfo. */
+ err = get_wc_explicit_mergeinfo_catalog(&subtrees_with_mergeinfo,
+ target->abspath, svn_depth_infinity,
+ ctx, scratch_pool, scratch_pool);
+ /* Issue #3896: If invalid mergeinfo in the reintegrate target
+ prevents us from proceeding, then raise the best error possible. */
+ if (err && err->apr_err == SVN_ERR_CLIENT_INVALID_MERGEINFO_NO_MERGETRACKING)
+ err = svn_error_quick_wrap(err, _("Reintegrate merge not possible"));
+ SVN_ERR(err);
- SVN_ERR(calculate_left_hand_side(&url1, &rev1,
+ SVN_ERR(calculate_left_hand_side(&loc1,
&merged_to_source_mergeinfo_catalog,
&unmerged_to_source_mergeinfo_catalog,
- target_abspath,
- target_repos_rel_path,
+ target,
subtrees_with_mergeinfo,
- rev1,
- source_repos_rel_path,
- source_repos_root,
- wc_repos_root,
- rev2,
+ source_loc,
source_ra_session,
target_ra_session,
ctx,
@@ -10607,35 +11469,47 @@ merge_reintegrate_locked(const char *source,
/* Did calculate_left_hand_side() decide that there was no merge to
be performed here? */
- if (! url1)
- return SVN_NO_ERROR;
+ if (! loc1)
+ {
+ if (source_p)
+ *source_p = NULL;
+ if (yc_ancestor_p)
+ *yc_ancestor_p = NULL;
+ return SVN_NO_ERROR;
+ }
+
+ source.loc1 = loc1;
+ source.loc2 = source_loc;
/* If the target was moved after the source was branched from it,
it is possible that the left URL differs from the target's current
URL. If so, then adjust TARGET_RA_SESSION to point to the old URL. */
- if (strcmp(url1, target_url))
- SVN_ERR(svn_ra_reparent(target_ra_session, url1, scratch_pool));
+ if (strcmp(source.loc1->url, target->loc.url))
+ SVN_ERR(svn_ra_reparent(target_ra_session, source.loc1->url, scratch_pool));
- SVN_ERR(svn_client__get_youngest_common_ancestor(&yc_ancestor_path,
- &yc_ancestor_rev,
- url2, rev2,
- url1, rev1,
- ctx, scratch_pool));
+ SVN_ERR(svn_client__get_youngest_common_ancestor(
+ &yc_ancestor, source.loc2, source.loc1, target_ra_session,
+ ctx, scratch_pool, scratch_pool));
- if (!(yc_ancestor_path && SVN_IS_VALID_REVNUM(yc_ancestor_rev)))
+ if (! yc_ancestor)
return svn_error_createf(SVN_ERR_CLIENT_NOT_READY_TO_MERGE, NULL,
_("'%s@%ld' must be ancestrally related to "
- "'%s@%ld'"), url1, rev1, url2, rev2);
+ "'%s@%ld'"),
+ source.loc1->url, source.loc1->rev,
+ source.loc2->url, source.loc2->rev);
- if (rev1 > yc_ancestor_rev)
+ /* The source side of a reintegrate merge is not 'ancestral', except in
+ * the degenerate case where source == YCA. */
+ source.ancestral = (loc1->rev == yc_ancestor->rev);
+
+ if (source.loc1->rev > yc_ancestor->rev)
{
/* Have we actually merged anything to the source from the
target? If so, make sure we've merged a contiguous
prefix. */
- final_unmerged_catalog = apr_hash_make(scratch_pool);
+ svn_mergeinfo_catalog_t final_unmerged_catalog = apr_hash_make(scratch_pool);
- SVN_ERR(find_unsynced_ranges(source_repos_rel_path,
- yc_ancestor_path,
+ SVN_ERR(find_unsynced_ranges(source_loc, &target->loc,
unmerged_to_source_mergeinfo_catalog,
merged_to_source_mergeinfo_catalog,
final_unmerged_catalog,
@@ -10657,69 +11531,158 @@ merge_reintegrate_locked(const char *source,
"previously merged from %s to the "
"reintegrate source, but this is "
"not the case:\n%s"),
- yc_ancestor_rev + 1, rev2,
- target_url,
+ yc_ancestor->rev + 1, source.loc2->rev,
+ target->loc.url,
source_mergeinfo_cat_string->data);
}
}
/* Left side: trunk@youngest-trunk-rev-merged-to-branch-at-specified-peg-rev
* Right side: branch@specified-peg-revision */
+ if (source_p)
+ *source_p = merge_source_dup(&source, result_pool);
- /* Do the real merge! */
- /* ### TODO(reint): Make sure that one isn't the same line ancestor
- ### of the other (what's erroneously referred to as "ancestrally
- ### related" in this source file). We can merge to trunk without
- ### implementing this. */
- err = merge_cousins_and_supplement_mergeinfo(target_abspath,
- target_ra_session,
- source_ra_session,
- url1, rev1, url2, rev2,
- yc_ancestor_rev,
- source_repos_root,
- wc_repos_root,
- svn_depth_infinity,
- FALSE, FALSE, FALSE, dry_run,
- merge_options, &use_sleep,
- ctx, scratch_pool);
+ if (yc_ancestor_p)
+ *yc_ancestor_p = svn_client__pathrev_dup(yc_ancestor, result_pool);
+ return SVN_NO_ERROR;
+}
- if (use_sleep)
- svn_io_sleep_for_timestamps(target_abspath, scratch_pool);
+/* Resolve the source and target locations and open RA sessions to them, and
+ * perform some checks appropriate for a reintegrate merge.
+ *
+ * Set *SOURCE_RA_SESSION_P and *SOURCE_LOC_P to a new session and the
+ * repository location of SOURCE_PATH_OR_URL at SOURCE_PEG_REVISION. Set
+ * *TARGET_RA_SESSION_P and *TARGET_P to a new session and the repository
+ * location of the WC at TARGET_ABSPATH.
+ *
+ * Throw a SVN_ERR_CLIENT_UNRELATED_RESOURCES error if the target WC node is
+ * a locally added node or if the source and target are not in the same
+ * repository. Throw a SVN_ERR_CLIENT_NOT_READY_TO_MERGE error if the
+ * target WC is not at a single revision without switched subtrees and
+ * without local mods.
+ *
+ * Allocate all the outputs in RESULT_POOL.
+ */
+static svn_error_t *
+open_reintegrate_source_and_target(svn_ra_session_t **source_ra_session_p,
+ svn_client__pathrev_t **source_loc_p,
+ svn_ra_session_t **target_ra_session_p,
+ merge_target_t **target_p,
+ const char *source_path_or_url,
+ const svn_opt_revision_t *source_peg_revision,
+ const char *target_abspath,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_client__pathrev_t *source_loc;
+ merge_target_t *target;
+
+ /* Open the target WC. A reintegrate merge requires the merge target to
+ * reflect a subtree of the repository as found at a single revision. */
+ SVN_ERR(open_target_wc(&target, target_abspath,
+ FALSE, FALSE, FALSE,
+ ctx, scratch_pool, scratch_pool));
+ SVN_ERR(svn_client_open_ra_session2(target_ra_session_p,
+ target->loc.url, target->abspath,
+ ctx, result_pool, scratch_pool));
+ if (! target->loc.url)
+ return svn_error_createf(SVN_ERR_CLIENT_UNRELATED_RESOURCES, NULL,
+ _("Can't reintegrate into '%s' because it is "
+ "locally added and therefore not related to "
+ "the merge source"),
+ svn_dirent_local_style(target->abspath,
+ scratch_pool));
- if (err)
- return svn_error_trace(err);
+ SVN_ERR(svn_client__ra_session_from_path2(
+ source_ra_session_p, &source_loc,
+ source_path_or_url, NULL, source_peg_revision, source_peg_revision,
+ ctx, result_pool));
+ /* source_loc and target->loc are required to be in the same repository,
+ as mergeinfo doesn't come into play for cross-repository merging. */
+ SVN_ERR(check_same_repos(source_loc,
+ svn_dirent_local_style(source_path_or_url,
+ scratch_pool),
+ &target->loc,
+ svn_dirent_local_style(target->abspath,
+ scratch_pool),
+ TRUE /* strict_urls */, scratch_pool));
+
+ *source_loc_p = source_loc;
+ *target_p = target;
return SVN_NO_ERROR;
}
-struct merge_reintegrate_baton_t {
- const char *source;
- const svn_opt_revision_t *peg_revision;
- const char *target_abspath;
- svn_boolean_t dry_run;
- const apr_array_header_t *merge_options;
- svn_client_ctx_t *ctx;
-};
-
-/* Implements svn_wc__with_write_lock_func_t. */
+/* The body of svn_client_merge_reintegrate(), which see for details. */
static svn_error_t *
-merge_reintegrate_cb(void *baton,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+merge_reintegrate_locked(conflict_report_t **conflict_report,
+ const char *source_path_or_url,
+ const svn_opt_revision_t *source_peg_revision,
+ const char *target_abspath,
+ svn_boolean_t diff_ignore_ancestry,
+ svn_boolean_t dry_run,
+ const apr_array_header_t *merge_options,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- struct merge_reintegrate_baton_t *b = baton;
+ svn_ra_session_t *target_ra_session, *source_ra_session;
+ merge_target_t *target;
+ svn_client__pathrev_t *source_loc;
+ merge_source_t *source;
+ svn_client__pathrev_t *yc_ancestor;
+ svn_boolean_t use_sleep = FALSE;
+ svn_error_t *err;
- SVN_ERR(merge_reintegrate_locked(b->source, b->peg_revision,
- b->target_abspath, b->dry_run,
- b->merge_options, b->ctx,
- scratch_pool));
+ SVN_ERR(open_reintegrate_source_and_target(
+ &source_ra_session, &source_loc, &target_ra_session, &target,
+ source_path_or_url, source_peg_revision, target_abspath,
+ ctx, scratch_pool, scratch_pool));
+
+ SVN_ERR(find_reintegrate_merge(&source, &yc_ancestor,
+ source_ra_session, source_loc,
+ target_ra_session, target,
+ ctx, scratch_pool, scratch_pool));
+
+ if (! source)
+ {
+ return SVN_NO_ERROR;
+ }
+
+ /* Do the real merge! */
+ /* ### TODO(reint): Make sure that one isn't the same line ancestor
+ ### of the other (what's erroneously referred to as "ancestrally
+ ### related" in this source file). For now, we just say the source
+ ### isn't "ancestral" even if it is (in the degenerate case where
+ ### source-left equals YCA). */
+ source->ancestral = FALSE;
+ err = merge_cousins_and_supplement_mergeinfo(conflict_report,
+ &use_sleep,
+ target,
+ target_ra_session,
+ source_ra_session,
+ source, yc_ancestor,
+ TRUE /* same_repos */,
+ svn_depth_infinity,
+ diff_ignore_ancestry,
+ FALSE /* force_delete */,
+ FALSE /* record_only */,
+ dry_run,
+ merge_options,
+ ctx,
+ result_pool, scratch_pool);
+
+ if (use_sleep)
+ svn_io_sleep_for_timestamps(target_abspath, scratch_pool);
+ SVN_ERR(err);
return SVN_NO_ERROR;
}
svn_error_t *
-svn_client_merge_reintegrate(const char *source,
- const svn_opt_revision_t *peg_revision,
+svn_client_merge_reintegrate(const char *source_path_or_url,
+ const svn_opt_revision_t *source_peg_revision,
const char *target_wcpath,
svn_boolean_t dry_run,
const apr_array_header_t *merge_options,
@@ -10727,172 +11690,148 @@ svn_client_merge_reintegrate(const char *source,
apr_pool_t *pool)
{
const char *target_abspath, *lock_abspath;
- struct merge_reintegrate_baton_t merge_reintegrate_baton;
+ conflict_report_t *conflict_report;
SVN_ERR(get_target_and_lock_abspath(&target_abspath, &lock_abspath,
target_wcpath, ctx, pool));
- merge_reintegrate_baton.source = source;
- merge_reintegrate_baton.peg_revision = peg_revision;
- merge_reintegrate_baton.target_abspath = target_abspath;
- merge_reintegrate_baton.dry_run = dry_run;
- merge_reintegrate_baton.merge_options = merge_options;
- merge_reintegrate_baton.ctx = ctx;
-
if (!dry_run)
- SVN_ERR(svn_wc__call_with_write_lock(merge_reintegrate_cb,
- &merge_reintegrate_baton,
- ctx->wc_ctx, lock_abspath, FALSE,
- pool, pool));
+ SVN_WC__CALL_WITH_WRITE_LOCK(
+ merge_reintegrate_locked(&conflict_report,
+ source_path_or_url, source_peg_revision,
+ target_abspath,
+ FALSE /*diff_ignore_ancestry*/,
+ dry_run, merge_options, ctx, pool, pool),
+ ctx->wc_ctx, lock_abspath, FALSE /* lock_anchor */, pool);
else
- SVN_ERR(merge_reintegrate_cb(&merge_reintegrate_baton, pool, pool));
+ SVN_ERR(merge_reintegrate_locked(&conflict_report,
+ source_path_or_url, source_peg_revision,
+ target_abspath,
+ FALSE /*diff_ignore_ancestry*/,
+ dry_run, merge_options, ctx, pool, pool));
+ SVN_ERR(make_merge_conflict_error(conflict_report, pool));
return SVN_NO_ERROR;
}
+/* The body of svn_client_merge_peg5(), which see for details.
+ *
+ * IGNORE_MERGEINFO and DIFF_IGNORE_ANCESTRY are as in do_merge().
+ */
static svn_error_t *
-merge_peg_locked(const char *source,
- const apr_array_header_t *ranges_to_merge,
- const svn_opt_revision_t *peg_revision,
+merge_peg_locked(conflict_report_t **conflict_report,
+ const char *source_path_or_url,
+ const svn_opt_revision_t *source_peg_revision,
+ const svn_rangelist_t *ranges_to_merge,
const char *target_abspath,
svn_depth_t depth,
- svn_boolean_t ignore_ancestry,
- svn_boolean_t force,
+ svn_boolean_t ignore_mergeinfo,
+ svn_boolean_t diff_ignore_ancestry,
+ svn_boolean_t force_delete,
svn_boolean_t record_only,
svn_boolean_t dry_run,
svn_boolean_t allow_mixed_rev,
const apr_array_header_t *merge_options,
svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- const char *URL;
+ merge_target_t *target;
+ svn_client__pathrev_t *source_loc;
apr_array_header_t *merge_sources;
- const char *wc_repos_root, *source_repos_root;
svn_ra_session_t *ra_session;
apr_pool_t *sesspool;
svn_boolean_t use_sleep = FALSE;
svn_error_t *err;
svn_boolean_t same_repos;
- svn_node_kind_t target_kind;
SVN_ERR_ASSERT(svn_dirent_is_absolute(target_abspath));
- /* Make sure the target is really there. */
- SVN_ERR(svn_io_check_path(target_abspath, &target_kind, scratch_pool));
- if (target_kind == svn_node_none)
- return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
- _("Path '%s' does not exist"),
- svn_dirent_local_style(target_abspath,
- scratch_pool));
-
- /* Make sure we're dealing with a real URL. */
- SVN_ERR(svn_client_url_from_path2(&URL, source, ctx,
- scratch_pool, scratch_pool));
- if (! URL)
- return svn_error_createf(SVN_ERR_ENTRY_MISSING_URL, NULL,
- _("'%s' has no URL"),
- svn_dirent_local_style(source, scratch_pool));
-
- SVN_ERR(svn_wc_read_kind(&target_kind, ctx->wc_ctx, target_abspath, FALSE,
- scratch_pool));
- if (target_kind != svn_node_dir && target_kind != svn_node_file)
- return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
- _("Merge target '%s' does not exist in the "
- "working copy"), target_abspath);
-
- SVN_ERR(ensure_wc_is_suitable_merge_target(target_abspath, ctx,
- allow_mixed_rev, TRUE, TRUE,
- scratch_pool));
+ SVN_ERR(open_target_wc(&target, target_abspath,
+ allow_mixed_rev, TRUE, TRUE,
+ ctx, scratch_pool, scratch_pool));
- /* Determine the working copy target's repository root URL. */
- SVN_ERR(svn_client__get_repos_root(&wc_repos_root, target_abspath,
- ctx, scratch_pool, scratch_pool));
+ /* Create a short lived session pool */
+ sesspool = svn_pool_create(scratch_pool);
/* Open an RA session to our source URL, and determine its root URL. */
- sesspool = svn_pool_create(scratch_pool);
- SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL, URL, NULL,
- NULL, FALSE, TRUE,
- ctx, sesspool));
- SVN_ERR(svn_ra_get_repos_root2(ra_session, &source_repos_root, scratch_pool));
+ SVN_ERR(svn_client__ra_session_from_path2(
+ &ra_session, &source_loc,
+ source_path_or_url, NULL, source_peg_revision, source_peg_revision,
+ ctx, sesspool));
/* Normalize our merge sources. */
- SVN_ERR(normalize_merge_sources(&merge_sources, source, URL,
- source_repos_root, peg_revision,
+ SVN_ERR(normalize_merge_sources(&merge_sources, source_path_or_url,
+ source_loc,
ranges_to_merge, ra_session, ctx,
scratch_pool, scratch_pool));
/* Check for same_repos. */
- if (strcmp(wc_repos_root, source_repos_root) != 0)
- {
- const char *source_repos_uuid;
- const char *wc_repos_uuid;
-
- SVN_ERR(svn_ra_get_uuid2(ra_session, &source_repos_uuid, scratch_pool));
- SVN_ERR(svn_client_uuid_from_path2(&wc_repos_uuid, target_abspath,
- ctx, scratch_pool, scratch_pool));
- same_repos = (strcmp(wc_repos_uuid, source_repos_uuid) == 0);
- }
- else
- same_repos = TRUE;
-
- /* We're done with our little RA session. */
- svn_pool_destroy(sesspool);
+ same_repos = is_same_repos(&target->loc, source_loc, TRUE /* strict_urls */);
/* Do the real merge! (We say with confidence that our merge
sources are both ancestral and related.) */
- err = do_merge(NULL, NULL, merge_sources, target_abspath,
- TRUE, TRUE, same_repos, ignore_ancestry, force, dry_run,
+ err = do_merge(NULL, NULL, conflict_report, &use_sleep,
+ merge_sources, target, ra_session,
+ TRUE /*sources_related*/, same_repos, ignore_mergeinfo,
+ diff_ignore_ancestry, force_delete, dry_run,
record_only, NULL, FALSE, FALSE, depth, merge_options,
- &use_sleep, ctx, scratch_pool, scratch_pool);
+ ctx, result_pool, scratch_pool);
+
+ /* We're done with our RA session. */
+ svn_pool_destroy(sesspool);
if (use_sleep)
svn_io_sleep_for_timestamps(target_abspath, scratch_pool);
- if (err)
- return svn_error_trace(err);
-
+ SVN_ERR(err);
return SVN_NO_ERROR;
}
-struct merge_peg_baton_t {
- const char *source;
- const apr_array_header_t *ranges_to_merge;
- const svn_opt_revision_t *peg_revision;
- const char *target_abspath;
- svn_depth_t depth;
- svn_boolean_t ignore_ancestry;
- svn_boolean_t force;
- svn_boolean_t record_only;
- svn_boolean_t dry_run;
- svn_boolean_t allow_mixed_rev;
- const apr_array_header_t *merge_options;
- svn_client_ctx_t *ctx;
-};
-
-/* Implements svn_wc__with_write_lock_func_t. */
-static svn_error_t *
-merge_peg_cb(void *baton, apr_pool_t *result_pool, apr_pool_t *scratch_pool)
+/* Details of an automatic merge. */
+typedef struct automatic_merge_t
{
- struct merge_peg_baton_t *b = baton;
+ svn_client__pathrev_t *yca, *base, *right, *target;
+ svn_boolean_t is_reintegrate_like;
+ svn_boolean_t allow_mixed_rev, allow_local_mods, allow_switched_subtrees;
+} automatic_merge_t;
- SVN_ERR(merge_peg_locked(b->source, b->ranges_to_merge, b->peg_revision,
- b->target_abspath, b->depth, b->ignore_ancestry,
- b->force, b->record_only, b->dry_run,
- b->allow_mixed_rev, b->merge_options, b->ctx,
- scratch_pool));
+static svn_error_t *
+client_find_automatic_merge(automatic_merge_t **merge_p,
+ const char *source_path_or_url,
+ const svn_opt_revision_t *source_revision,
+ const char *target_abspath,
+ svn_boolean_t allow_mixed_rev,
+ svn_boolean_t allow_local_mods,
+ svn_boolean_t allow_switched_subtrees,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
- return SVN_NO_ERROR;
-}
+static svn_error_t *
+do_automatic_merge_locked(conflict_report_t **conflict_report,
+ const automatic_merge_t *merge,
+ const char *target_abspath,
+ svn_depth_t depth,
+ svn_boolean_t diff_ignore_ancestry,
+ svn_boolean_t force_delete,
+ svn_boolean_t record_only,
+ svn_boolean_t dry_run,
+ const apr_array_header_t *merge_options,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
svn_error_t *
-svn_client_merge_peg4(const char *source,
+svn_client_merge_peg5(const char *source_path_or_url,
const apr_array_header_t *ranges_to_merge,
- const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *source_peg_revision,
const char *target_wcpath,
svn_depth_t depth,
- svn_boolean_t ignore_ancestry,
- svn_boolean_t force,
+ svn_boolean_t ignore_mergeinfo,
+ svn_boolean_t diff_ignore_ancestry,
+ svn_boolean_t force_delete,
svn_boolean_t record_only,
svn_boolean_t dry_run,
svn_boolean_t allow_mixed_rev,
@@ -10901,34 +11840,912 @@ svn_client_merge_peg4(const char *source,
apr_pool_t *pool)
{
const char *target_abspath, *lock_abspath;
- struct merge_peg_baton_t merge_peg_baton;
+ conflict_report_t *conflict_report;
/* No ranges to merge? No problem. */
- if (ranges_to_merge->nelts == 0)
+ if (ranges_to_merge != NULL && ranges_to_merge->nelts == 0)
return SVN_NO_ERROR;
SVN_ERR(get_target_and_lock_abspath(&target_abspath, &lock_abspath,
target_wcpath, ctx, pool));
- merge_peg_baton.source = source;
- merge_peg_baton.ranges_to_merge = ranges_to_merge;
- merge_peg_baton.peg_revision = peg_revision;
- merge_peg_baton.target_abspath = target_abspath;
- merge_peg_baton.depth = depth;
- merge_peg_baton.ignore_ancestry = ignore_ancestry;
- merge_peg_baton.force = force;
- merge_peg_baton.record_only = record_only;
- merge_peg_baton.dry_run = dry_run;
- merge_peg_baton.allow_mixed_rev = allow_mixed_rev;
- merge_peg_baton.merge_options = merge_options;
- merge_peg_baton.ctx = ctx;
+ /* Do an automatic merge if no revision ranges are specified. */
+ if (ranges_to_merge == NULL)
+ {
+ automatic_merge_t *merge;
- if (!dry_run)
- SVN_ERR(svn_wc__call_with_write_lock(merge_peg_cb, &merge_peg_baton,
- ctx->wc_ctx, lock_abspath, FALSE,
- pool, pool));
+ if (ignore_mergeinfo)
+ return svn_error_create(SVN_ERR_INCORRECT_PARAMS, NULL,
+ _("Cannot merge automatically while "
+ "ignoring mergeinfo"));
+
+ /* Find the details of the merge needed. */
+ SVN_ERR(client_find_automatic_merge(
+ &merge,
+ source_path_or_url, source_peg_revision,
+ target_abspath,
+ allow_mixed_rev,
+ TRUE /*allow_local_mods*/,
+ TRUE /*allow_switched_subtrees*/,
+ ctx, pool, pool));
+
+ if (!dry_run)
+ SVN_WC__CALL_WITH_WRITE_LOCK(
+ do_automatic_merge_locked(&conflict_report,
+ merge,
+ target_abspath, depth,
+ diff_ignore_ancestry,
+ force_delete, record_only, dry_run,
+ merge_options, ctx, pool, pool),
+ ctx->wc_ctx, lock_abspath, FALSE /* lock_anchor */, pool);
+ else
+ SVN_ERR(do_automatic_merge_locked(&conflict_report,
+ merge,
+ target_abspath, depth,
+ diff_ignore_ancestry,
+ force_delete, record_only, dry_run,
+ merge_options, ctx, pool, pool));
+ }
+ else if (!dry_run)
+ SVN_WC__CALL_WITH_WRITE_LOCK(
+ merge_peg_locked(&conflict_report,
+ source_path_or_url, source_peg_revision,
+ ranges_to_merge,
+ target_abspath, depth, ignore_mergeinfo,
+ diff_ignore_ancestry,
+ force_delete, record_only, dry_run,
+ allow_mixed_rev, merge_options, ctx, pool, pool),
+ ctx->wc_ctx, lock_abspath, FALSE /* lock_anchor */, pool);
+ else
+ SVN_ERR(merge_peg_locked(&conflict_report,
+ source_path_or_url, source_peg_revision,
+ ranges_to_merge,
+ target_abspath, depth, ignore_mergeinfo,
+ diff_ignore_ancestry,
+ force_delete, record_only, dry_run,
+ allow_mixed_rev, merge_options, ctx, pool, pool));
+
+ SVN_ERR(make_merge_conflict_error(conflict_report, pool));
+ return SVN_NO_ERROR;
+}
+
+
+/* The location-history of a branch.
+ *
+ * This structure holds the set of path-revisions occupied by a branch,
+ * from an externally chosen 'tip' location back to its origin. The
+ * 'tip' location is the youngest location that we are considering on
+ * the branch. */
+typedef struct branch_history_t
+{
+ /* The tip location of the branch. That is, the youngest location that's
+ * in the repository and that we're considering. If we're considering a
+ * target branch right up to an uncommitted WC, then this is the WC base
+ * (pristine) location. */
+ svn_client__pathrev_t *tip;
+ /* The location-segment history, as mergeinfo. */
+ svn_mergeinfo_t history;
+ /* Whether the location-segment history reached as far as (necessarily
+ the root path in) revision 0 -- a fact that can't be represented as
+ mergeinfo. */
+ svn_boolean_t has_r0_history;
+} branch_history_t;
+
+/* Return the location on BRANCH_HISTORY at revision REV, or NULL if none. */
+static svn_client__pathrev_t *
+location_on_branch_at_rev(const branch_history_t *branch_history,
+ svn_revnum_t rev,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ apr_hash_index_t *hi;
+
+ for (hi = apr_hash_first(scratch_pool, branch_history->history); hi;
+ hi = apr_hash_next(hi))
+ {
+ const char *fspath = svn__apr_hash_index_key(hi);
+ svn_rangelist_t *rangelist = svn__apr_hash_index_val(hi);
+ int i;
+
+ for (i = 0; i < rangelist->nelts; i++)
+ {
+ svn_merge_range_t *r = APR_ARRAY_IDX(rangelist, i, svn_merge_range_t *);
+ if (r->start < rev && rev <= r->end)
+ {
+ return svn_client__pathrev_create_with_relpath(
+ branch_history->tip->repos_root_url,
+ branch_history->tip->repos_uuid,
+ rev, fspath + 1, result_pool);
+ }
+ }
+ }
+ return NULL;
+}
+
+/* */
+typedef struct source_and_target_t
+{
+ svn_client__pathrev_t *source;
+ svn_ra_session_t *source_ra_session;
+ branch_history_t source_branch;
+
+ merge_target_t *target;
+ svn_ra_session_t *target_ra_session;
+ branch_history_t target_branch;
+
+ /* Repos location of the youngest common ancestor of SOURCE and TARGET. */
+ svn_client__pathrev_t *yca;
+} source_and_target_t;
+
+/* Set *INTERSECTION_P to the intersection of BRANCH_HISTORY with the
+ * revision range OLDEST_REV to YOUNGEST_REV (inclusive).
+ *
+ * If the intersection is empty, the result will be a branch history object
+ * containing an empty (not null) history.
+ *
+ * ### The 'tip' of the result is currently unchanged.
+ */
+static svn_error_t *
+branch_history_intersect_range(branch_history_t **intersection_p,
+ const branch_history_t *branch_history,
+ svn_revnum_t oldest_rev,
+ svn_revnum_t youngest_rev,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ branch_history_t *result = apr_palloc(result_pool, sizeof(*result));
+
+ SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(oldest_rev));
+ SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
+ SVN_ERR_ASSERT(oldest_rev >= 1);
+ /* Allow a just-empty range (oldest = youngest + 1) but not an
+ * arbitrary reverse range (such as oldest = youngest + 2). */
+ SVN_ERR_ASSERT(oldest_rev <= youngest_rev + 1);
+
+ if (oldest_rev <= youngest_rev)
+ {
+ SVN_ERR(svn_mergeinfo__filter_mergeinfo_by_ranges(
+ &result->history, branch_history->history,
+ youngest_rev, oldest_rev - 1, TRUE /* include_range */,
+ result_pool, scratch_pool));
+ result->history = svn_mergeinfo_dup(result->history, result_pool);
+ }
+ else
+ {
+ result->history = apr_hash_make(result_pool);
+ }
+ result->has_r0_history = FALSE;
+
+ /* ### TODO: Set RESULT->tip to the tip of the intersection. */
+ result->tip = svn_client__pathrev_dup(branch_history->tip, result_pool);
+
+ *intersection_p = result;
+ return SVN_NO_ERROR;
+}
+
+/* Set *OLDEST_P and *YOUNGEST_P to the oldest and youngest locations
+ * (inclusive) along BRANCH. OLDEST_P and/or YOUNGEST_P may be NULL if not
+ * wanted.
+ */
+static svn_error_t *
+branch_history_get_endpoints(svn_client__pathrev_t **oldest_p,
+ svn_client__pathrev_t **youngest_p,
+ const branch_history_t *branch,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_revnum_t youngest_rev, oldest_rev;
+
+ SVN_ERR(svn_mergeinfo__get_range_endpoints(
+ &youngest_rev, &oldest_rev,
+ branch->history, scratch_pool));
+ if (oldest_p)
+ *oldest_p = location_on_branch_at_rev(
+ branch, oldest_rev + 1, result_pool, scratch_pool);
+ if (youngest_p)
+ *youngest_p = location_on_branch_at_rev(
+ branch, youngest_rev, result_pool, scratch_pool);
+ return SVN_NO_ERROR;
+}
+
+/* Implements the svn_log_entry_receiver_t interface.
+
+ Set *BATON to LOG_ENTRY->revision and return SVN_ERR_CEASE_INVOCATION. */
+static svn_error_t *
+operative_rev_receiver(void *baton,
+ svn_log_entry_t *log_entry,
+ apr_pool_t *pool)
+{
+ svn_revnum_t *operative_rev = baton;
+
+ *operative_rev = log_entry->revision;
+
+ /* We've found the youngest merged or oldest eligible revision, so
+ we're done...
+
+ ...but wait, shouldn't we care if LOG_ENTRY->NON_INHERITABLE is
+ true? Because if it is, then LOG_ENTRY->REVISION is only
+ partially merged/elgibile! And our only caller,
+ find_last_merged_location (via short_circuit_mergeinfo_log) is
+ interested in *fully* merged revisions. That's all true, but if
+ find_last_merged_location() finds the youngest merged revision it
+ will also check for the oldest eligible revision. So in the case
+ the youngest merged rev is non-inheritable, the *same* non-inheritable
+ rev will be found as the oldest eligible rev -- and
+ find_last_merged_location() handles that situation. */
+ return svn_error_create(SVN_ERR_CEASE_INVOCATION, NULL, NULL);
+}
+
+/* Wrapper around svn_client__mergeinfo_log. All arguments are as per
+ that private API. The discover_changed_paths, depth, and revprops args to
+ svn_client__mergeinfo_log are always TRUE, svn_depth_infinity_t,
+ and empty array respectively.
+
+ If RECEIVER raises a SVN_ERR_CEASE_INVOCATION error, but still sets
+ *REVISION to a valid revnum, then clear the error. Otherwise return
+ any error. */
+static svn_error_t*
+short_circuit_mergeinfo_log(svn_mergeinfo_catalog_t *target_mergeinfo_cat,
+ svn_boolean_t finding_merged,
+ const char *target_path_or_url,
+ const svn_opt_revision_t *target_peg_revision,
+ const char *source_path_or_url,
+ const svn_opt_revision_t *source_peg_revision,
+ const svn_opt_revision_t *source_start_revision,
+ const svn_opt_revision_t *source_end_revision,
+ svn_log_entry_receiver_t receiver,
+ svn_revnum_t *revision,
+ svn_client_ctx_t *ctx,
+ svn_ra_session_t *ra_session,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ apr_array_header_t *revprops;
+ svn_error_t *err;
+ const char *session_url;
+
+ SVN_ERR(svn_ra_get_session_url(ra_session, &session_url, scratch_pool));
+
+ revprops = apr_array_make(scratch_pool, 0, sizeof(const char *));
+ err = svn_client__mergeinfo_log(finding_merged,
+ target_path_or_url,
+ target_peg_revision,
+ target_mergeinfo_cat,
+ source_path_or_url,
+ source_peg_revision,
+ source_start_revision,
+ source_end_revision,
+ receiver, revision,
+ TRUE, svn_depth_infinity,
+ revprops, ctx, ra_session,
+ result_pool, scratch_pool);
+
+ err = svn_error_compose_create(
+ err,
+ svn_ra_reparent(ra_session, session_url, scratch_pool));
+
+ if (err)
+ {
+ /* We expect RECEIVER to short-circuit the (potentially expensive) log
+ by raising an SVN_ERR_CEASE_INVOCATION -- see operative_rev_receiver.
+ So we can ignore that error, but only as long as we actually found a
+ valid revision. */
+ if (SVN_IS_VALID_REVNUM(*revision)
+ && err->apr_err == SVN_ERR_CEASE_INVOCATION)
+ {
+ svn_error_clear(err);
+ err = NULL;
+ }
+ else
+ {
+ return svn_error_trace(err);
+ }
+ }
+ return SVN_NO_ERROR;
+}
+
+/* Set *BASE_P to the last location on SOURCE_BRANCH such that all changes
+ * on SOURCE_BRANCH after YCA up to and including *BASE_P have already
+ * been fully merged into TARGET.
+ *
+ * *BASE_P TIP
+ * o-------o-----------o--- SOURCE_BRANCH
+ * / \
+ * -----o prev. \
+ * YCA \ merges \
+ * o-----------o----------- TARGET branch
+ *
+ * In terms of mergeinfo:
+ *
+ * Source a--... o=change, -=no-op revision
+ * branch / \
+ * YCA --> o a---o---o---o---o--- d=delete, a=add-as-a-copy
+ *
+ * Eligible -.eee.eeeeeeeeeeeeeeeeeeee .=not a source branch location
+ *
+ * Tgt-mi -.mmm.mm-mm-------m------- m=merged to root of TARGET or
+ * subtree of TARGET with no
+ * operative changes outside of that
+ * subtree, -=not merged
+ *
+ * Eligible -.---.--e--eeeeeee-eeeeeee
+ *
+ * Next --------^----------------- BASE is just before here.
+ *
+ * / \
+ * -----o prev. \
+ * YCA \ merges \
+ * o-----------o-------------
+ *
+ * If no revisions from SOURCE_BRANCH have been completely merged to TARGET,
+ * then set *BASE_P to the YCA.
+ */
+static svn_error_t *
+find_last_merged_location(svn_client__pathrev_t **base_p,
+ svn_client__pathrev_t *yca,
+ const branch_history_t *source_branch,
+ svn_client__pathrev_t *target,
+ svn_client_ctx_t *ctx,
+ svn_ra_session_t *ra_session,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_opt_revision_t source_peg_rev, source_start_rev, source_end_rev,
+ target_opt_rev;
+ svn_revnum_t youngest_merged_rev = SVN_INVALID_REVNUM;
+ svn_mergeinfo_catalog_t target_mergeinfo_cat = NULL;
+
+ source_peg_rev.kind = svn_opt_revision_number;
+ source_peg_rev.value.number = source_branch->tip->rev;
+ source_start_rev.kind = svn_opt_revision_number;
+ source_start_rev.value.number = yca->rev;
+ source_end_rev.kind = svn_opt_revision_number;
+ source_end_rev.value.number = source_branch->tip->rev;
+ target_opt_rev.kind = svn_opt_revision_number;
+ target_opt_rev.value.number = target->rev;
+
+ /* Find the youngest revision fully merged from SOURCE_BRANCH to TARGET,
+ if such a revision exists. */
+ SVN_ERR(short_circuit_mergeinfo_log(&target_mergeinfo_cat,
+ TRUE, /* Find merged */
+ target->url, &target_opt_rev,
+ source_branch->tip->url,
+ &source_peg_rev,
+ &source_end_rev, &source_start_rev,
+ operative_rev_receiver,
+ &youngest_merged_rev,
+ ctx, ra_session,
+ result_pool, scratch_pool));
+
+ if (!SVN_IS_VALID_REVNUM(youngest_merged_rev))
+ {
+ /* No revisions have been completely merged from SOURCE_BRANCH to
+ TARGET so the base for the next merge is the YCA. */
+ *base_p = yca;
+ }
+ else
+ {
+ /* One or more revisions have already been completely merged from
+ SOURCE_BRANCH to TARGET, now find the oldest revision, older
+ than the youngest merged revision, which is still eligible to
+ be merged, if such exists. */
+ branch_history_t *contiguous_source;
+ svn_revnum_t base_rev;
+ svn_revnum_t oldest_eligible_rev = SVN_INVALID_REVNUM;
+
+ /* If the only revisions eligible are younger than the youngest merged
+ revision we can simply assume that the youngest eligible revision
+ is the youngest merged revision. Obviously this may not be true!
+ The revisions between the youngest merged revision and the tip of
+ the branch may have several inoperative revisions -- they may *all*
+ be inoperative revisions! But for the purpose of this function
+ (i.e. finding the youngest revision after the YCA where all revs have
+ been merged) that doesn't matter. */
+ source_end_rev.value.number = youngest_merged_rev;
+ SVN_ERR(short_circuit_mergeinfo_log(&target_mergeinfo_cat,
+ FALSE, /* Find eligible */
+ target->url, &target_opt_rev,
+ source_branch->tip->url,
+ &source_peg_rev,
+ &source_start_rev, &source_end_rev,
+ operative_rev_receiver,
+ &oldest_eligible_rev,
+ ctx, ra_session,
+ scratch_pool, scratch_pool));
+
+ /* If there are revisions eligible for merging, use the oldest one
+ to calculate the base. Otherwise there are no operative revisions
+ to merge and we can simple set the base to the youngest revision
+ already merged. */
+ if (SVN_IS_VALID_REVNUM(oldest_eligible_rev))
+ base_rev = oldest_eligible_rev - 1;
+ else
+ base_rev = youngest_merged_rev;
+
+ /* Find the branch location just before the oldest eligible rev.
+ (We can't just use the base revs calculated above because the branch
+ might have a gap there.) */
+ SVN_ERR(branch_history_intersect_range(&contiguous_source,
+ source_branch, yca->rev,
+ base_rev,
+ scratch_pool, scratch_pool));
+ SVN_ERR(branch_history_get_endpoints(NULL, base_p, contiguous_source,
+ result_pool, scratch_pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Find a merge base location on the target branch, like in a sync
+ * merge.
+ *
+ * BASE S_T->source
+ * o-------o-----------o---
+ * / \ \
+ * -----o prev. \ \ this
+ * YCA \ merge \ \ merge
+ * o-----------o-----------o
+ * S_T->target
+ *
+ * Set *BASE_P to BASE, the youngest location in the history of S_T->source
+ * (at or after the YCA) at which all revisions up to BASE are effectively
+ * merged into S_T->target.
+ *
+ * If no locations on the history of S_T->source are effectively merged to
+ * S_T->target, set *BASE_P to the YCA.
+ */
+static svn_error_t *
+find_base_on_source(svn_client__pathrev_t **base_p,
+ source_and_target_t *s_t,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ SVN_ERR(find_last_merged_location(base_p,
+ s_t->yca,
+ &s_t->source_branch,
+ s_t->target_branch.tip,
+ ctx,
+ s_t->source_ra_session,
+ result_pool, scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+/* Find a merge base location on the target branch, like in a reintegrate
+ * merge.
+ *
+ * S_T->source
+ * o-----------o-------o---
+ * / prev. / \
+ * -----o merge / \ this
+ * YCA \ / \ merge
+ * o-------o---------------o
+ * BASE S_T->target
+ *
+ * Set *BASE_P to BASE, the youngest location in the history of S_T->target
+ * (at or after the YCA) at which all revisions up to BASE are effectively
+ * merged into S_T->source.
+ *
+ * If no locations on the history of S_T->target are effectively merged to
+ * S_T->source, set *BASE_P to the YCA.
+ */
+static svn_error_t *
+find_base_on_target(svn_client__pathrev_t **base_p,
+ source_and_target_t *s_t,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ SVN_ERR(find_last_merged_location(base_p,
+ s_t->yca,
+ &s_t->target_branch,
+ s_t->source,
+ ctx,
+ s_t->target_ra_session,
+ result_pool, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* The body of client_find_automatic_merge(), which see.
+ */
+static svn_error_t *
+find_automatic_merge(svn_client__pathrev_t **base_p,
+ svn_boolean_t *is_reintegrate_like,
+ source_and_target_t *s_t,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_client__pathrev_t *base_on_source, *base_on_target;
+
+ /* Get the location-history of each branch. */
+ s_t->source_branch.tip = s_t->source;
+ SVN_ERR(svn_client__get_history_as_mergeinfo(
+ &s_t->source_branch.history, &s_t->source_branch.has_r0_history,
+ s_t->source, SVN_INVALID_REVNUM, SVN_INVALID_REVNUM,
+ s_t->source_ra_session, ctx, scratch_pool));
+ s_t->target_branch.tip = &s_t->target->loc;
+ SVN_ERR(svn_client__get_history_as_mergeinfo(
+ &s_t->target_branch.history, &s_t->target_branch.has_r0_history,
+ &s_t->target->loc, SVN_INVALID_REVNUM, SVN_INVALID_REVNUM,
+ s_t->target_ra_session, ctx, scratch_pool));
+
+ SVN_ERR(svn_client__calc_youngest_common_ancestor(
+ &s_t->yca, s_t->source, s_t->source_branch.history,
+ s_t->source_branch.has_r0_history,
+ &s_t->target->loc, s_t->target_branch.history,
+ s_t->target_branch.has_r0_history,
+ result_pool, scratch_pool));
+
+ if (! s_t->yca)
+ return svn_error_createf(SVN_ERR_CLIENT_NOT_READY_TO_MERGE, NULL,
+ _("'%s@%ld' must be ancestrally related to "
+ "'%s@%ld'"),
+ s_t->source->url, s_t->source->rev,
+ s_t->target->loc.url, s_t->target->loc.rev);
+
+ /* Find the latest revision of A synced to B and the latest
+ * revision of B synced to A.
+ *
+ * base_on_source = youngest_complete_synced_point(source, target)
+ * base_on_target = youngest_complete_synced_point(target, source)
+ */
+ SVN_ERR(find_base_on_source(&base_on_source, s_t,
+ ctx, scratch_pool, scratch_pool));
+ SVN_ERR(find_base_on_target(&base_on_target, s_t,
+ ctx, scratch_pool, scratch_pool));
+
+ /* Choose a base. */
+ if (base_on_source->rev >= base_on_target->rev)
+ {
+ *base_p = base_on_source;
+ *is_reintegrate_like = FALSE;
+ }
+ else
+ {
+ *base_p = base_on_target;
+ *is_reintegrate_like = TRUE;
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/** Find out what kind of automatic merge would be needed, when the target
+ * is only known as a repository location rather than a WC.
+ *
+ * Like find_automatic_merge() except that the target is
+ * specified by @a target_path_or_url at @a target_revision, which must
+ * refer to a repository location, instead of by a WC path argument.
+ */
+static svn_error_t *
+find_automatic_merge_no_wc(automatic_merge_t **merge_p,
+ const char *source_path_or_url,
+ const svn_opt_revision_t *source_revision,
+ const char *target_path_or_url,
+ const svn_opt_revision_t *target_revision,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ source_and_target_t *s_t = apr_palloc(scratch_pool, sizeof(*s_t));
+ svn_client__pathrev_t *target_loc;
+ automatic_merge_t *merge = apr_palloc(result_pool, sizeof(*merge));
+
+ /* Source */
+ SVN_ERR(svn_client__ra_session_from_path2(
+ &s_t->source_ra_session, &s_t->source,
+ source_path_or_url, NULL, source_revision, source_revision,
+ ctx, result_pool));
+
+ /* Target */
+ SVN_ERR(svn_client__ra_session_from_path2(
+ &s_t->target_ra_session, &target_loc,
+ target_path_or_url, NULL, target_revision, target_revision,
+ ctx, result_pool));
+ s_t->target = apr_palloc(scratch_pool, sizeof(*s_t->target));
+ s_t->target->abspath = NULL; /* indicate the target is not a WC */
+ s_t->target->loc = *target_loc;
+
+ SVN_ERR(find_automatic_merge(&merge->base, &merge->is_reintegrate_like, s_t,
+ ctx, result_pool, scratch_pool));
+
+ merge->right = s_t->source;
+ merge->target = &s_t->target->loc;
+ merge->yca = s_t->yca;
+ *merge_p = merge;
+
+ return SVN_NO_ERROR;
+}
+
+/* Find the information needed to merge all unmerged changes from a source
+ * branch into a target branch.
+ *
+ * Set @a *merge_p to the information needed to merge all unmerged changes
+ * (up to @a source_revision) from the source branch @a source_path_or_url
+ * at @a source_revision into the target WC at @a target_abspath.
+ *
+ * The flags @a allow_mixed_rev, @a allow_local_mods and
+ * @a allow_switched_subtrees enable merging into a WC that is in any or all
+ * of the states described by their names, but only if this function decides
+ * that the merge will be in the same direction as the last automatic merge.
+ * If, on the other hand, the last automatic merge was in the opposite
+ * direction, then such states of the WC are not allowed regardless
+ * of these flags. This function merely records these flags in the
+ * @a *merge_p structure; do_automatic_merge_locked() checks the WC
+ * state for compliance.
+ *
+ * Allocate the @a *merge_p structure in @a result_pool.
+ */
+static svn_error_t *
+client_find_automatic_merge(automatic_merge_t **merge_p,
+ const char *source_path_or_url,
+ const svn_opt_revision_t *source_revision,
+ const char *target_abspath,
+ svn_boolean_t allow_mixed_rev,
+ svn_boolean_t allow_local_mods,
+ svn_boolean_t allow_switched_subtrees,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ source_and_target_t *s_t = apr_palloc(result_pool, sizeof(*s_t));
+ automatic_merge_t *merge = apr_palloc(result_pool, sizeof(*merge));
+
+ /* "Open" the target WC. Check the target WC for mixed-rev, local mods and
+ * switched subtrees yet to faster exit and notify user before contacting
+ * with server. After we find out what kind of merge is required, then if a
+ * reintegrate-like merge is required we'll do the stricter checks, in
+ * do_automatic_merge_locked(). */
+ SVN_ERR(open_target_wc(&s_t->target, target_abspath,
+ allow_mixed_rev,
+ allow_local_mods,
+ allow_switched_subtrees,
+ ctx, result_pool, scratch_pool));
+
+ /* Open RA sessions to the source and target trees. */
+ SVN_ERR(svn_client_open_ra_session2(&s_t->target_ra_session,
+ s_t->target->loc.url,
+ s_t->target->abspath,
+ ctx, result_pool, scratch_pool));
+ /* ### check for null URL (i.e. added path) here, like in reintegrate? */
+ SVN_ERR(svn_client__ra_session_from_path2(
+ &s_t->source_ra_session, &s_t->source,
+ source_path_or_url, NULL, source_revision, source_revision,
+ ctx, result_pool));
+
+ /* Check source is in same repos as target. */
+ SVN_ERR(check_same_repos(s_t->source, source_path_or_url,
+ &s_t->target->loc, target_abspath,
+ TRUE /* strict_urls */, scratch_pool));
+
+ SVN_ERR(find_automatic_merge(&merge->base, &merge->is_reintegrate_like, s_t,
+ ctx, result_pool, scratch_pool));
+ merge->yca = s_t->yca;
+ merge->right = s_t->source;
+ merge->allow_mixed_rev = allow_mixed_rev;
+ merge->allow_local_mods = allow_local_mods;
+ merge->allow_switched_subtrees = allow_switched_subtrees;
+
+ *merge_p = merge;
+
+ /* TODO: Close the source and target sessions here? */
+
+ return SVN_NO_ERROR;
+}
+
+/* Perform an automatic merge, given the information in MERGE which
+ * must have come from calling client_find_automatic_merge().
+ *
+ * Four locations are inputs: YCA, BASE, RIGHT, TARGET, as shown
+ * depending on whether the base is on the source branch or the target
+ * branch of this merge.
+ *
+ * RIGHT (is_reintegrate_like)
+ * o-----------o-------o---
+ * / prev. / \
+ * -----o merge / \ this
+ * YCA \ / \ merge
+ * o-------o---------------o
+ * BASE TARGET
+ *
+ * or
+ *
+ * BASE RIGHT (! is_reintegrate_like)
+ * o-------o-----------o---
+ * / \ \
+ * -----o prev. \ \ this
+ * YCA \ merge \ \ merge
+ * o-----------o-----------o
+ * TARGET
+ *
+ * ### TODO: The reintegrate-like code path does not yet
+ * eliminate already-cherry-picked revisions from the source.
+ */
+static svn_error_t *
+do_automatic_merge_locked(conflict_report_t **conflict_report,
+ const automatic_merge_t *merge,
+ const char *target_abspath,
+ svn_depth_t depth,
+ svn_boolean_t diff_ignore_ancestry,
+ svn_boolean_t force_delete,
+ svn_boolean_t record_only,
+ svn_boolean_t dry_run,
+ const apr_array_header_t *merge_options,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ merge_target_t *target;
+ svn_boolean_t reintegrate_like = merge->is_reintegrate_like;
+ svn_boolean_t use_sleep = FALSE;
+ svn_error_t *err;
+
+ SVN_ERR(open_target_wc(&target, target_abspath,
+ merge->allow_mixed_rev && ! reintegrate_like,
+ merge->allow_local_mods && ! reintegrate_like,
+ merge->allow_switched_subtrees && ! reintegrate_like,
+ ctx, scratch_pool, scratch_pool));
+
+ if (reintegrate_like)
+ {
+ merge_source_t source;
+ svn_ra_session_t *base_ra_session = NULL;
+ svn_ra_session_t *right_ra_session = NULL;
+ svn_ra_session_t *target_ra_session = NULL;
+
+ if (record_only)
+ return svn_error_create(SVN_ERR_INCORRECT_PARAMS, NULL,
+ _("The required merge is reintegrate-like, "
+ "and the record-only option "
+ "cannot be used with this kind of merge"));
+
+ if (depth != svn_depth_unknown)
+ return svn_error_create(SVN_ERR_INCORRECT_PARAMS, NULL,
+ _("The required merge is reintegrate-like, "
+ "and the depth option "
+ "cannot be used with this kind of merge"));
+
+ if (force_delete)
+ return svn_error_create(SVN_ERR_INCORRECT_PARAMS, NULL,
+ _("The required merge is reintegrate-like, "
+ "and the force_delete option "
+ "cannot be used with this kind of merge"));
+
+ SVN_ERR(ensure_ra_session_url(&base_ra_session, merge->base->url,
+ target->abspath, ctx, scratch_pool));
+ SVN_ERR(ensure_ra_session_url(&right_ra_session, merge->right->url,
+ target->abspath, ctx, scratch_pool));
+ SVN_ERR(ensure_ra_session_url(&target_ra_session, target->loc.url,
+ target->abspath, ctx, scratch_pool));
+
+ /* Check for and reject any abnormalities -- such as revisions that
+ * have not yet been merged in the opposite direction -- that a
+ * 'reintegrate' merge would have rejected. */
+ {
+ merge_source_t *source2;
+
+ SVN_ERR(find_reintegrate_merge(&source2, NULL,
+ right_ra_session, merge->right,
+ target_ra_session, target,
+ ctx, scratch_pool, scratch_pool));
+ }
+
+ source.loc1 = merge->base;
+ source.loc2 = merge->right;
+ source.ancestral = ! merge->is_reintegrate_like;
+
+ err = merge_cousins_and_supplement_mergeinfo(conflict_report,
+ &use_sleep,
+ target,
+ base_ra_session,
+ right_ra_session,
+ &source, merge->yca,
+ TRUE /* same_repos */,
+ depth,
+ FALSE /*diff_ignore_ancestry*/,
+ force_delete, record_only,
+ dry_run,
+ merge_options,
+ ctx,
+ result_pool, scratch_pool);
+ }
+ else /* ! merge->is_reintegrate_like */
+ {
+ /* Ignoring the base that we found, we pass the YCA instead and let
+ do_merge() work out which subtrees need which revision ranges to
+ be merged. This enables do_merge() to fill in revision-range
+ gaps that are older than the base that we calculated (which is
+ for the root path of the merge).
+
+ An improvement would be to change find_automatic_merge() to
+ find the base for each sutree, and then here use the oldest base
+ among all subtrees. */
+ apr_array_header_t *merge_sources;
+ svn_ra_session_t *ra_session = NULL;
+
+ /* Normalize our merge sources, do_merge() requires this. See the
+ 'MERGEINFO MERGE SOURCE NORMALIZATION' global comment. */
+ SVN_ERR(ensure_ra_session_url(&ra_session, merge->right->url,
+ target->abspath, ctx, scratch_pool));
+ SVN_ERR(normalize_merge_sources_internal(
+ &merge_sources, merge->right,
+ svn_rangelist__initialize(merge->yca->rev, merge->right->rev, TRUE,
+ scratch_pool),
+ ra_session, ctx, scratch_pool, scratch_pool));
+
+ err = do_merge(NULL, NULL, conflict_report, &use_sleep,
+ merge_sources, target, ra_session,
+ TRUE /*related*/, TRUE /*same_repos*/,
+ FALSE /*ignore_mergeinfo*/, diff_ignore_ancestry,
+ force_delete, dry_run,
+ record_only, NULL, FALSE, FALSE, depth, merge_options,
+ ctx, result_pool, scratch_pool);
+ }
+
+ if (use_sleep)
+ svn_io_sleep_for_timestamps(target_abspath, scratch_pool);
+
+ SVN_ERR(err);
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_client_get_merging_summary(svn_boolean_t *needs_reintegration,
+ const char **yca_url, svn_revnum_t *yca_rev,
+ const char **base_url, svn_revnum_t *base_rev,
+ const char **right_url, svn_revnum_t *right_rev,
+ const char **target_url, svn_revnum_t *target_rev,
+ const char **repos_root_url,
+ const char *source_path_or_url,
+ const svn_opt_revision_t *source_revision,
+ const char *target_path_or_url,
+ const svn_opt_revision_t *target_revision,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_boolean_t target_is_wc;
+ automatic_merge_t *merge;
+
+ target_is_wc = (! svn_path_is_url(target_path_or_url))
+ && (target_revision->kind == svn_opt_revision_unspecified
+ || target_revision->kind == svn_opt_revision_working);
+ if (target_is_wc)
+ SVN_ERR(client_find_automatic_merge(
+ &merge,
+ source_path_or_url, source_revision,
+ target_path_or_url,
+ TRUE, TRUE, TRUE, /* allow_* */
+ ctx, scratch_pool, scratch_pool));
else
- SVN_ERR(merge_peg_cb(&merge_peg_baton, pool, pool));
+ SVN_ERR(find_automatic_merge_no_wc(
+ &merge,
+ source_path_or_url, source_revision,
+ target_path_or_url, target_revision,
+ ctx, scratch_pool, scratch_pool));
+
+ if (needs_reintegration)
+ *needs_reintegration = merge->is_reintegrate_like;
+ if (yca_url)
+ *yca_url = apr_pstrdup(result_pool, merge->yca->url);
+ if (yca_rev)
+ *yca_rev = merge->yca->rev;
+ if (base_url)
+ *base_url = apr_pstrdup(result_pool, merge->base->url);
+ if (base_rev)
+ *base_rev = merge->base->rev;
+ if (right_url)
+ *right_url = apr_pstrdup(result_pool, merge->right->url);
+ if (right_rev)
+ *right_rev = merge->right->rev;
+ if (target_url)
+ *target_url = apr_pstrdup(result_pool, merge->target->url);
+ if (target_rev)
+ *target_rev = merge->target->rev;
+ if (repos_root_url)
+ *repos_root_url = apr_pstrdup(result_pool, merge->yca->repos_root_url);
return SVN_NO_ERROR;
}
diff --git a/subversion/libsvn_client/mergeinfo.c b/subversion/libsvn_client/mergeinfo.c
index e8b0a51..2d277f5 100644
--- a/subversion/libsvn_client/mergeinfo.c
+++ b/subversion/libsvn_client/mergeinfo.c
@@ -38,10 +38,12 @@
#include "svn_client.h"
#include "svn_hash.h"
+#include "private/svn_opt_private.h"
#include "private/svn_mergeinfo_private.h"
#include "private/svn_wc_private.h"
#include "private/svn_ra_private.h"
#include "private/svn_fspath.h"
+#include "private/svn_client_private.h"
#include "client.h"
#include "mergeinfo.h"
#include "svn_private_config.h"
@@ -67,6 +69,16 @@ svn_client__merge_path_dup(const svn_client__merge_path_t *old,
return new;
}
+svn_client__merge_path_t *
+svn_client__merge_path_create(const char *abspath,
+ apr_pool_t *pool)
+{
+ svn_client__merge_path_t *result = apr_pcalloc(pool, sizeof(*result));
+
+ result->abspath = apr_pstrdup(pool, abspath);
+ return result;
+}
+
svn_error_t *
svn_client__parse_mergeinfo(svn_mergeinfo_t *mergeinfo,
svn_wc_context_t *wc_ctx,
@@ -136,42 +148,59 @@ svn_client__record_wc_mergeinfo(const char *local_abspath,
return SVN_NO_ERROR;
}
-/*-----------------------------------------------------------------------*/
-
-/*** Retrieving mergeinfo. ***/
-
svn_error_t *
-svn_client__adjust_mergeinfo_source_paths(svn_mergeinfo_t adjusted_mergeinfo,
- const char *rel_path,
- svn_mergeinfo_t mergeinfo,
- apr_pool_t *pool)
+svn_client__record_wc_mergeinfo_catalog(apr_hash_t *result_catalog,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
{
- apr_hash_index_t *hi;
- const char *path;
- apr_array_header_t *copied_rangelist;
-
- SVN_ERR_ASSERT(adjusted_mergeinfo);
- SVN_ERR_ASSERT(mergeinfo);
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
- for (hi = apr_hash_first(pool, mergeinfo); hi; hi = apr_hash_next(hi))
+ if (apr_hash_count(result_catalog))
{
- const char *merge_source = svn__apr_hash_index_key(hi);
- apr_array_header_t *rangelist = svn__apr_hash_index_val(hi);
-
- /* Copy inherited mergeinfo into our output hash, adjusting the
- merge source as appropriate. */
- path = svn_fspath__join(merge_source, rel_path, pool);
- copied_rangelist = svn_rangelist_dup(rangelist, pool);
- apr_hash_set(adjusted_mergeinfo, path, APR_HASH_KEY_STRING,
- copied_rangelist);
+ int i;
+ apr_array_header_t *sorted_cat =
+ svn_sort__hash(result_catalog, svn_sort_compare_items_as_paths,
+ scratch_pool);
+
+ /* Write the mergeinfo out in sorted order of the paths (presumably just
+ * so that the notifications are in a predictable, convenient order). */
+ for (i = 0; i < sorted_cat->nelts; i++)
+ {
+ svn_sort__item_t elt = APR_ARRAY_IDX(sorted_cat, i,
+ svn_sort__item_t);
+ svn_error_t *err;
+
+ svn_pool_clear(iterpool);
+ err = svn_client__record_wc_mergeinfo(elt.key, elt.value, TRUE,
+ ctx, iterpool);
+
+ if (err && err->apr_err == SVN_ERR_ENTRY_NOT_FOUND)
+ {
+ /* PATH isn't just missing, it's not even versioned as far
+ as this working copy knows. But it was included in
+ MERGES, which means that the server knows about it.
+ Likely we don't have access to the source due to authz
+ restrictions. For now just clear the error and
+ continue... */
+ svn_error_clear(err);
+ }
+ else
+ {
+ SVN_ERR(err);
+ }
+ }
}
+ svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
+/*-----------------------------------------------------------------------*/
+
+/*** Retrieving mergeinfo. ***/
svn_error_t *
svn_client__get_wc_mergeinfo(svn_mergeinfo_t *mergeinfo,
- svn_boolean_t *inherited,
+ svn_boolean_t *inherited_p,
svn_mergeinfo_inheritance_t inherit,
const char *local_abspath,
const char *limit_abspath,
@@ -185,13 +214,17 @@ svn_client__get_wc_mergeinfo(svn_mergeinfo_t *mergeinfo,
svn_mergeinfo_t wc_mergeinfo;
svn_revnum_t base_revision;
apr_pool_t *iterpool;
+ svn_boolean_t inherited;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
if (limit_abspath)
SVN_ERR_ASSERT(svn_dirent_is_absolute(limit_abspath));
- SVN_ERR(svn_wc__node_get_base_rev(&base_revision, ctx->wc_ctx,
- local_abspath, scratch_pool));
+ SVN_ERR(svn_wc__node_get_base(NULL, &base_revision, NULL, NULL, NULL, NULL,
+ ctx->wc_ctx, local_abspath,
+ TRUE /* ignore_enoent */,
+ FALSE /* show_hidden */,
+ scratch_pool, scratch_pool));
iterpool = svn_pool_create(scratch_pool);
while (TRUE)
@@ -236,6 +269,7 @@ svn_client__get_wc_mergeinfo(svn_mergeinfo_t *mergeinfo,
!svn_dirent_is_root(local_abspath, strlen(local_abspath)))
{
svn_boolean_t is_wc_root;
+ svn_boolean_t is_switched;
svn_revnum_t parent_base_rev;
svn_revnum_t parent_changed_rev;
@@ -245,9 +279,9 @@ svn_client__get_wc_mergeinfo(svn_mergeinfo_t *mergeinfo,
/* If we've reached the root of the working copy don't look any
higher. */
- SVN_ERR(svn_wc_is_wc_root2(&is_wc_root, ctx->wc_ctx,
- local_abspath, iterpool));
- if (is_wc_root)
+ SVN_ERR(svn_wc_check_root(&is_wc_root, &is_switched, NULL,
+ ctx->wc_ctx, local_abspath, iterpool));
+ if (is_wc_root || is_switched)
break;
/* No explicit mergeinfo on this path. Look higher up the
@@ -257,9 +291,15 @@ svn_client__get_wc_mergeinfo(svn_mergeinfo_t *mergeinfo,
walk_relpath, result_pool);
local_abspath = svn_dirent_dirname(local_abspath, scratch_pool);
- SVN_ERR(svn_wc__node_get_base_rev(&parent_base_rev,
- ctx->wc_ctx, local_abspath,
- scratch_pool));
+ SVN_ERR(svn_wc__node_get_base(NULL, &parent_base_rev, NULL, NULL,
+ NULL, NULL,
+ ctx->wc_ctx, local_abspath,
+ TRUE, FALSE,
+ scratch_pool, scratch_pool));
+
+ /* ### This checks the WORKING changed_rev, so invalid on replacement
+ ### not even reliable in case an ancestor was copied from a
+ ### different location */
SVN_ERR(svn_wc__node_get_changed_info(&parent_changed_rev,
NULL, NULL,
ctx->wc_ctx, local_abspath,
@@ -267,7 +307,7 @@ svn_client__get_wc_mergeinfo(svn_mergeinfo_t *mergeinfo,
scratch_pool));
/* Look in LOCAL_ABSPATH's parent for inherited mergeinfo if
- LOCAL_ABSPATH's has no base revision because it is an uncommitted
+ LOCAL_ABSPATH has no base revision because it is an uncommitted
addition, or if its base revision falls within the inclusive
range of its parent's last changed revision to the parent's base
revision; otherwise stop looking for inherited mergeinfo. */
@@ -287,7 +327,7 @@ svn_client__get_wc_mergeinfo(svn_mergeinfo_t *mergeinfo,
if (svn_path_is_empty(walk_relpath))
{
/* Mergeinfo is explicit. */
- *inherited = FALSE;
+ inherited = FALSE;
*mergeinfo = wc_mergeinfo;
}
else
@@ -295,16 +335,16 @@ svn_client__get_wc_mergeinfo(svn_mergeinfo_t *mergeinfo,
/* Mergeinfo may be inherited. */
if (wc_mergeinfo)
{
- *inherited = TRUE;
- *mergeinfo = apr_hash_make(result_pool);
- SVN_ERR(svn_client__adjust_mergeinfo_source_paths(*mergeinfo,
- walk_relpath,
- wc_mergeinfo,
- result_pool));
+ inherited = TRUE;
+ SVN_ERR(svn_mergeinfo__add_suffix_to_mergeinfo(mergeinfo,
+ wc_mergeinfo,
+ walk_relpath,
+ result_pool,
+ scratch_pool));
}
else
{
- *inherited = FALSE;
+ inherited = FALSE;
*mergeinfo = NULL;
}
}
@@ -314,7 +354,7 @@ svn_client__get_wc_mergeinfo(svn_mergeinfo_t *mergeinfo,
/* Remove non-inheritable mergeinfo and paths mapped to empty ranges
which may occur if WCPATH's mergeinfo is not explicit. */
- if (*inherited
+ if (inherited
&& apr_hash_count(*mergeinfo)) /* Nothing to do for empty mergeinfo. */
{
SVN_ERR(svn_mergeinfo_inheritable2(mergeinfo, *mergeinfo, NULL,
@@ -323,6 +363,9 @@ svn_client__get_wc_mergeinfo(svn_mergeinfo_t *mergeinfo,
svn_mergeinfo__remove_empty_rangelists(*mergeinfo, result_pool);
}
+ if (inherited_p)
+ *inherited_p = inherited;
+
return SVN_NO_ERROR;
}
@@ -339,30 +382,16 @@ svn_client__get_wc_mergeinfo_catalog(svn_mergeinfo_catalog_t *mergeinfo_cat,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- const char *target_repos_rel_path;
+ const char *target_repos_relpath;
svn_mergeinfo_t mergeinfo;
const char *repos_root;
- svn_node_kind_t kind;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
*mergeinfo_cat = NULL;
- SVN_ERR(svn_wc__node_get_repos_info(&repos_root, NULL,
+ SVN_ERR(svn_wc__node_get_repos_info(NULL, &target_repos_relpath,
+ &repos_root, NULL,
ctx->wc_ctx, local_abspath,
scratch_pool, scratch_pool));
- if (!repos_root)
- {
- if (walked_path)
- *walked_path = "";
- *inherited = FALSE;
- return SVN_NO_ERROR;
- }
-
- SVN_ERR(svn_client__path_relative_to_root(&target_repos_rel_path,
- ctx->wc_ctx,
- local_abspath,
- repos_root, FALSE,
- NULL, scratch_pool,
- scratch_pool));
/* Get the mergeinfo for the LOCAL_ABSPATH target and set *INHERITED and
*WALKED_PATH. */
@@ -376,44 +405,42 @@ svn_client__get_wc_mergeinfo_catalog(svn_mergeinfo_catalog_t *mergeinfo_cat,
if (mergeinfo)
{
*mergeinfo_cat = apr_hash_make(result_pool);
- apr_hash_set(*mergeinfo_cat,
- apr_pstrdup(result_pool, target_repos_rel_path),
- APR_HASH_KEY_STRING, mergeinfo);
+ svn_hash_sets(*mergeinfo_cat,
+ apr_pstrdup(result_pool, target_repos_relpath), mergeinfo);
}
/* If LOCAL_ABSPATH is a directory and we want the subtree mergeinfo too,
- then get it. */
- SVN_ERR(svn_wc_read_kind(&kind, ctx->wc_ctx, local_abspath, FALSE,
- scratch_pool));
- if (kind == svn_node_dir && include_descendants)
+ then get it.
+
+ With WC-NG it is cheaper to do a single db transaction, than first
+ looking if we really have a directory. */
+ if (include_descendants)
{
apr_hash_t *mergeinfo_props;
apr_hash_index_t *hi;
- svn_opt_revision_t opt;
-
- opt.kind = svn_opt_revision_unspecified;
- SVN_ERR(svn_client_propget4(&mergeinfo_props,
- SVN_PROP_MERGEINFO,
- local_abspath,
- &opt, &opt,
- NULL, svn_depth_infinity, NULL,
- ctx, scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__prop_retrieve_recursive(&mergeinfo_props,
+ ctx->wc_ctx, local_abspath,
+ SVN_PROP_MERGEINFO,
+ scratch_pool, scratch_pool));
/* Convert *mergeinfo_props into a proper svn_mergeinfo_catalog_t */
for (hi = apr_hash_first(scratch_pool, mergeinfo_props);
hi;
hi = apr_hash_next(hi))
{
- const char *key_path = svn__apr_hash_index_key(hi);
+ const char *node_abspath = svn__apr_hash_index_key(hi);
svn_string_t *propval = svn__apr_hash_index_val(hi);
svn_mergeinfo_t subtree_mergeinfo;
+ const char *repos_relpath;
+
+ if (strcmp(node_abspath, local_abspath) == 0)
+ continue; /* Already parsed in svn_client__get_wc_mergeinfo */
+
+ SVN_ERR(svn_wc__node_get_repos_info(NULL, &repos_relpath, NULL, NULL,
+ ctx->wc_ctx, node_abspath,
+ result_pool, scratch_pool));
- SVN_ERR(svn_client__path_relative_to_root(&key_path, ctx->wc_ctx,
- key_path,
- repos_root, FALSE,
- NULL, result_pool,
- scratch_pool));
SVN_ERR(svn_mergeinfo_parse(&subtree_mergeinfo, propval->data,
result_pool));
@@ -423,8 +450,7 @@ svn_client__get_wc_mergeinfo_catalog(svn_mergeinfo_catalog_t *mergeinfo_cat,
if (*mergeinfo_cat == NULL)
*mergeinfo_cat = apr_hash_make(result_pool);
- apr_hash_set(*mergeinfo_cat, key_path,
- APR_HASH_KEY_STRING, subtree_mergeinfo);
+ svn_hash_sets(*mergeinfo_cat, repos_relpath, subtree_mergeinfo);
}
}
@@ -432,9 +458,9 @@ svn_client__get_wc_mergeinfo_catalog(svn_mergeinfo_catalog_t *mergeinfo_cat,
}
svn_error_t *
-svn_client__get_repos_mergeinfo(svn_ra_session_t *ra_session,
- svn_mergeinfo_t *target_mergeinfo,
- const char *rel_path,
+svn_client__get_repos_mergeinfo(svn_mergeinfo_t *target_mergeinfo,
+ svn_ra_session_t *ra_session,
+ const char *url,
svn_revnum_t rev,
svn_mergeinfo_inheritance_t inherit,
svn_boolean_t squelch_incapable,
@@ -446,7 +472,7 @@ svn_client__get_repos_mergeinfo(svn_ra_session_t *ra_session,
SVN_ERR(svn_client__get_repos_mergeinfo_catalog(&tgt_mergeinfo_cat,
ra_session,
- rel_path, rev, inherit,
+ url, rev, inherit,
squelch_incapable, FALSE,
pool, pool));
@@ -464,27 +490,31 @@ svn_client__get_repos_mergeinfo(svn_ra_session_t *ra_session,
}
svn_error_t *
-svn_client__get_repos_mergeinfo_catalog(
- svn_mergeinfo_catalog_t *mergeinfo_cat,
- svn_ra_session_t *ra_session,
- const char *rel_path,
- svn_revnum_t rev,
- svn_mergeinfo_inheritance_t inherit,
- svn_boolean_t squelch_incapable,
- svn_boolean_t include_descendants,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+svn_client__get_repos_mergeinfo_catalog(svn_mergeinfo_catalog_t *mergeinfo_cat,
+ svn_ra_session_t *ra_session,
+ const char *url,
+ svn_revnum_t rev,
+ svn_mergeinfo_inheritance_t inherit,
+ svn_boolean_t squelch_incapable,
+ svn_boolean_t include_descendants,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
svn_error_t *err;
- svn_mergeinfo_t repos_mergeinfo_cat;
+ svn_mergeinfo_catalog_t repos_mergeinfo_cat;
apr_array_header_t *rel_paths = apr_array_make(scratch_pool, 1,
- sizeof(rel_path));
+ sizeof(const char *));
+ const char *old_session_url;
- APR_ARRAY_PUSH(rel_paths, const char *) = rel_path;
+ APR_ARRAY_PUSH(rel_paths, const char *) = "";
/* Fetch the mergeinfo. */
+ SVN_ERR(svn_client__ensure_ra_session_url(&old_session_url,
+ ra_session, url, scratch_pool));
err = svn_ra_get_mergeinfo(ra_session, &repos_mergeinfo_cat, rel_paths,
rev, inherit, include_descendants, result_pool);
+ err = svn_error_compose_create(
+ err, svn_ra_reparent(ra_session, old_session_url, scratch_pool));
if (err)
{
if (squelch_incapable && err->apr_err == SVN_ERR_UNSUPPORTED_FEATURE)
@@ -503,38 +533,19 @@ svn_client__get_repos_mergeinfo_catalog(
}
else
{
- const char *repos_root;
- const char *session_url;
+ const char *session_relpath;
- SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root, scratch_pool));
- SVN_ERR(svn_ra_get_session_url(ra_session, &session_url, scratch_pool));
+ SVN_ERR(svn_ra_get_path_relative_to_root(ra_session, &session_relpath,
+ url, scratch_pool));
- if (strcmp(repos_root, session_url) == 0)
- {
- *mergeinfo_cat = repos_mergeinfo_cat;
- }
+ if (session_relpath[0] == '\0')
+ *mergeinfo_cat = repos_mergeinfo_cat;
else
- {
- apr_hash_index_t *hi;
- svn_mergeinfo_catalog_t rekeyed_mergeinfo_cat =
- apr_hash_make(result_pool);
-
- for (hi = apr_hash_first(scratch_pool, repos_mergeinfo_cat);
- hi;
- hi = apr_hash_next(hi))
- {
- const char *path =
- svn_path_url_add_component2(session_url,
- svn__apr_hash_index_key(hi),
- scratch_pool);
- SVN_ERR(svn_ra_get_path_relative_to_root(ra_session, &path,
- path,
- result_pool));
- apr_hash_set(rekeyed_mergeinfo_cat, path, APR_HASH_KEY_STRING,
- svn__apr_hash_index_val(hi));
- }
- *mergeinfo_cat = rekeyed_mergeinfo_cat;
- }
+ SVN_ERR(svn_mergeinfo__add_prefix_to_catalog(mergeinfo_cat,
+ repos_mergeinfo_cat,
+ session_relpath,
+ result_pool,
+ scratch_pool));
}
return SVN_NO_ERROR;
}
@@ -581,7 +592,7 @@ svn_client__get_wc_or_repos_mergeinfo(svn_mergeinfo_t *target_mergeinfo,
svn_error_t *
svn_client__get_wc_or_repos_mergeinfo_catalog(
svn_mergeinfo_catalog_t *target_mergeinfo_catalog,
- svn_boolean_t *inherited,
+ svn_boolean_t *inherited_p,
svn_boolean_t *from_repos,
svn_boolean_t include_descendants,
svn_boolean_t repos_only,
@@ -623,8 +634,9 @@ svn_client__get_wc_or_repos_mergeinfo_catalog(
if (!repos_only)
{
+ svn_boolean_t inherited;
SVN_ERR(svn_client__get_wc_mergeinfo_catalog(&target_mergeinfo_cat_wc,
- inherited,
+ &inherited,
include_descendants,
inherit,
local_abspath,
@@ -633,16 +645,17 @@ svn_client__get_wc_or_repos_mergeinfo_catalog(
ctx,
result_pool,
scratch_pool));
+ if (inherited_p)
+ *inherited_p = inherited;
/* If we want LOCAL_ABSPATH's inherited mergeinfo, were we able to
get it from the working copy? If not, then we must ask the
repository. */
- if (! ((*inherited)
+ if (! (inherited
|| (inherit == svn_mergeinfo_explicit)
|| (repos_relpath
&& target_mergeinfo_cat_wc
- && apr_hash_get(target_mergeinfo_cat_wc, repos_relpath,
- APR_HASH_KEY_STRING))))
+ && svn_hash_gets(target_mergeinfo_cat_wc, repos_relpath))))
{
repos_only = TRUE;
/* We already have any subtree mergeinfo from the working copy, no
@@ -664,38 +677,29 @@ svn_client__get_wc_or_repos_mergeinfo_catalog(
SVN_ERR(svn_wc_get_pristine_props(&original_props,
ctx->wc_ctx, local_abspath,
result_pool, scratch_pool));
- if (!apr_hash_get(original_props, SVN_PROP_MERGEINFO,
- APR_HASH_KEY_STRING))
+ if (!svn_hash_gets(original_props, SVN_PROP_MERGEINFO))
{
- const char *session_url = NULL;
apr_pool_t *sesspool = NULL;
- if (ra_session)
- {
- SVN_ERR(svn_client__ensure_ra_session_url(&session_url,
- ra_session,
- url, result_pool));
- }
- else
+ if (! ra_session)
{
sesspool = svn_pool_create(scratch_pool);
- SVN_ERR(svn_client__open_ra_session_internal(
- &ra_session, NULL, url, NULL, NULL, FALSE,
- TRUE, ctx, sesspool));
+ SVN_ERR(svn_client_open_ra_session2(&ra_session, url, NULL,
+ ctx,
+ sesspool, sesspool));
}
SVN_ERR(svn_client__get_repos_mergeinfo_catalog(
&target_mergeinfo_cat_repos, ra_session,
- "", target_rev, inherit,
+ url, target_rev, inherit,
TRUE, include_descendants,
result_pool, scratch_pool));
if (target_mergeinfo_cat_repos
- && apr_hash_get(target_mergeinfo_cat_repos,
- repos_relpath,
- APR_HASH_KEY_STRING))
+ && svn_hash_gets(target_mergeinfo_cat_repos, repos_relpath))
{
- *inherited = TRUE;
+ if (inherited_p)
+ *inherited_p = TRUE;
if (from_repos)
*from_repos = TRUE;
}
@@ -707,11 +711,6 @@ svn_client__get_wc_or_repos_mergeinfo_catalog(
{
svn_pool_destroy(sesspool);
}
- else if (session_url)
- {
- SVN_ERR(svn_ra_reparent(ra_session, session_url,
- result_pool));
- }
}
}
}
@@ -740,77 +739,26 @@ svn_client__get_wc_or_repos_mergeinfo_catalog(
svn_error_t *
svn_client__get_history_as_mergeinfo(svn_mergeinfo_t *mergeinfo_p,
- svn_boolean_t *has_rev_zero_history,
- const char *path_or_url,
- const svn_opt_revision_t *peg_revision,
- svn_revnum_t range_youngest,
- svn_revnum_t range_oldest,
- svn_ra_session_t *ra_session,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool)
+ svn_boolean_t *has_rev_zero_history,
+ const svn_client__pathrev_t *pathrev,
+ svn_revnum_t range_youngest,
+ svn_revnum_t range_oldest,
+ svn_ra_session_t *ra_session,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
{
apr_array_header_t *segments;
- svn_revnum_t peg_revnum = SVN_INVALID_REVNUM;
- apr_pool_t *sesspool = NULL; /* only used for an RA session we open */
- svn_ra_session_t *session = ra_session;
-
- /* If SESSION is NULL, resolve the url */
- if (session == NULL)
- {
- svn_opt_revision_t opt_rev;
- const char *url;
- opt_rev.kind = svn_opt_revision_unspecified;
-
- sesspool = svn_pool_create(pool);
-
- SVN_ERR(svn_client__ra_session_from_path(&session, &peg_revnum, &url,
- path_or_url, NULL,
- peg_revision, &opt_rev,
- ctx, sesspool));
- }
- else
- {
- const char *local_abspath;
- /* The session is rooted correctly, so we don't need the url,
- but we do need a revision */
- switch (peg_revision->kind)
- {
- case svn_opt_revision_head:
- case svn_opt_revision_unspecified:
- SVN_ERR(svn_ra_get_latest_revnum(session, &peg_revnum, pool));
- break;
- case svn_opt_revision_number:
- peg_revnum = peg_revision->value.number;
- break;
- case svn_opt_revision_date:
- SVN_ERR(svn_ra_get_dated_revision(session, &peg_revnum,
- peg_revision->value.date, pool));
- break;
- default:
- if (svn_path_is_url(path_or_url))
- return svn_error_create(SVN_ERR_CLIENT_VERSIONED_PATH_REQUIRED,
- NULL, NULL);
-
- SVN_ERR(svn_dirent_get_absolute(&local_abspath, path_or_url,
- pool));
-
- SVN_ERR(svn_client__get_revision_number(&peg_revnum, NULL,
- ctx->wc_ctx,
- local_abspath,
- session, peg_revision,
- pool));
- break;
- }
- }
/* Fetch the location segments for our URL@PEG_REVNUM. */
if (! SVN_IS_VALID_REVNUM(range_youngest))
- range_youngest = peg_revnum;
+ range_youngest = pathrev->rev;
if (! SVN_IS_VALID_REVNUM(range_oldest))
range_oldest = 0;
- SVN_ERR(svn_client__repos_location_segments(&segments, session, "",
- peg_revnum, range_youngest,
- range_oldest, ctx, pool));
+
+ SVN_ERR(svn_client__repos_location_segments(&segments, ra_session,
+ pathrev->url, pathrev->rev,
+ range_youngest, range_oldest,
+ ctx, pool));
if (has_rev_zero_history)
{
@@ -826,10 +774,6 @@ svn_client__get_history_as_mergeinfo(svn_mergeinfo_t *mergeinfo_p,
SVN_ERR(svn_mergeinfo__mergeinfo_from_segments(mergeinfo_p, segments, pool));
- /* If we opened an RA session, ensure its closure. */
- if (sesspool)
- svn_pool_destroy(sesspool);
-
return SVN_NO_ERROR;
}
@@ -860,7 +804,7 @@ should_elide_mergeinfo(svn_boolean_t *elides,
svn_mergeinfo_t parent_mergeinfo,
svn_mergeinfo_t child_mergeinfo,
const char *path_suffix,
- apr_pool_t *pool)
+ apr_pool_t *scratch_pool)
{
/* Easy out: No child mergeinfo to elide. */
if (child_mergeinfo == NULL)
@@ -885,22 +829,18 @@ should_elide_mergeinfo(svn_boolean_t *elides,
/* Both CHILD_MERGEINFO and PARENT_MERGEINFO are non-NULL and
non-empty. */
svn_mergeinfo_t path_tweaked_parent_mergeinfo;
- apr_pool_t *subpool = svn_pool_create(pool);
-
- path_tweaked_parent_mergeinfo = apr_hash_make(subpool);
/* If we need to adjust the paths in PARENT_MERGEINFO do it now. */
if (path_suffix)
- SVN_ERR(svn_client__adjust_mergeinfo_source_paths(
- path_tweaked_parent_mergeinfo,
- path_suffix, parent_mergeinfo, subpool));
+ SVN_ERR(svn_mergeinfo__add_suffix_to_mergeinfo(
+ &path_tweaked_parent_mergeinfo, parent_mergeinfo,
+ path_suffix, scratch_pool, scratch_pool));
else
path_tweaked_parent_mergeinfo = parent_mergeinfo;
SVN_ERR(svn_mergeinfo__equals(elides,
path_tweaked_parent_mergeinfo,
- child_mergeinfo, TRUE, subpool));
- svn_pool_destroy(subpool);
+ child_mergeinfo, TRUE, scratch_pool));
}
return SVN_NO_ERROR;
@@ -965,18 +905,15 @@ elide_mergeinfo(svn_mergeinfo_t parent_mergeinfo,
svn_error_t *
-svn_client__elide_mergeinfo(const char *target_wcpath,
- const char *wc_elision_limit_path,
+svn_client__elide_mergeinfo(const char *target_abspath,
+ const char *wc_elision_limit_abspath,
svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
- const char *target_abspath;
- const char *limit_abspath = NULL;
+ const char *limit_abspath = wc_elision_limit_abspath;
- SVN_ERR(svn_dirent_get_absolute(&target_abspath, target_wcpath, pool));
- if (wc_elision_limit_path)
- SVN_ERR(svn_dirent_get_absolute(&limit_abspath, wc_elision_limit_path,
- pool));
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(target_abspath));
+ SVN_ERR_ASSERT(!wc_elision_limit_abspath || svn_dirent_is_absolute(wc_elision_limit_abspath));
/* Check for first easy out: We are already at the limit path. */
if (!limit_abspath
@@ -1017,7 +954,7 @@ svn_client__elide_mergeinfo(const char *target_wcpath,
return SVN_NO_ERROR;
/* Get TARGET_WCPATH's inherited mergeinfo from the WC. */
- err = svn_client__get_wc_mergeinfo(&mergeinfo, &inherited,
+ err = svn_client__get_wc_mergeinfo(&mergeinfo, NULL,
svn_mergeinfo_nearest_ancestor,
target_abspath,
limit_abspath,
@@ -1039,12 +976,12 @@ svn_client__elide_mergeinfo(const char *target_wcpath,
/* If TARGET_WCPATH inherited no mergeinfo from the WC and we are
not limiting our search to the working copy then check if it
inherits any from the repos. */
- if (!mergeinfo && !wc_elision_limit_path)
+ if (!mergeinfo && !wc_elision_limit_abspath)
{
err = svn_client__get_wc_or_repos_mergeinfo(
- &mergeinfo, &inherited, NULL, TRUE,
+ &mergeinfo, NULL, NULL, TRUE,
svn_mergeinfo_nearest_ancestor,
- NULL, target_wcpath, ctx, pool);
+ NULL, target_abspath, ctx, pool);
if (err)
{
if (err->apr_err == SVN_ERR_MERGEINFO_PARSE_ERROR)
@@ -1063,7 +1000,7 @@ svn_client__elide_mergeinfo(const char *target_wcpath,
/* If there is nowhere to elide TARGET_WCPATH's mergeinfo to and
the elision is limited, then we are done.*/
- if (!mergeinfo && wc_elision_limit_path)
+ if (!mergeinfo && wc_elision_limit_abspath)
return SVN_NO_ERROR;
SVN_ERR(elide_mergeinfo(mergeinfo, target_mergeinfo, target_abspath,
@@ -1084,6 +1021,11 @@ svn_client__elide_mergeinfo(const char *target_wcpath,
Set *REPOS_ROOT to the root URL of the repository associated with
PATH_OR_URL.
+ If RA_SESSION is NOT NULL and PATH_OR_URL refers to a URL, RA_SESSION
+ (which must be of the repository containing PATH_OR_URL) will be used
+ instead of a temporary RA session. Caller is responsible for reparenting
+ the session if it wants to use it after the call.
+
Allocate *MERGEINFO_CATALOG and all its contents in RESULT_POOL. Use
SCRATCH_POOL for all temporary allocations.
@@ -1097,70 +1039,62 @@ get_mergeinfo(svn_mergeinfo_catalog_t *mergeinfo_catalog,
svn_boolean_t include_descendants,
svn_boolean_t ignore_invalid_mergeinfo,
svn_client_ctx_t *ctx,
+ svn_ra_session_t *ra_session,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- svn_ra_session_t *ra_session;
- svn_revnum_t rev;
const char *local_abspath;
- const char *url;
svn_boolean_t use_url = svn_path_is_url(path_or_url);
- svn_revnum_t peg_rev;
- svn_opt_revision_t opt_rev;
- opt_rev.kind = svn_opt_revision_unspecified;
+ svn_client__pathrev_t *peg_loc;
- SVN_ERR(svn_client__ra_session_from_path(&ra_session, &peg_rev, &url,
- path_or_url, NULL, peg_revision,
- &opt_rev, ctx, scratch_pool));
+ if (ra_session && svn_path_is_url(path_or_url))
+ {
+ SVN_ERR(svn_ra_reparent(ra_session, path_or_url, scratch_pool));
+ SVN_ERR(svn_client__resolve_rev_and_url(&peg_loc, ra_session,
+ path_or_url,
+ peg_revision,
+ peg_revision,
+ ctx, scratch_pool));
+ }
+ else
+ {
+ SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &peg_loc,
+ path_or_url, NULL,
+ peg_revision,
+ peg_revision, ctx, scratch_pool));
+ }
/* If PATH_OR_URL is as working copy path determine if we will need to
contact the repository for the requested PEG_REVISION. */
if (!use_url)
{
- const char *repos_root_url;
- const char *repos_relpath;
- const char *origin_url = NULL;
+ svn_client__pathrev_t *origin;
SVN_ERR(svn_dirent_get_absolute(&local_abspath, path_or_url,
scratch_pool));
- SVN_ERR(svn_wc__node_get_origin(NULL, &rev, &repos_relpath,
- &repos_root_url, NULL, NULL,
- ctx->wc_ctx, local_abspath, FALSE,
- scratch_pool, scratch_pool));
-
- if(repos_relpath)
- origin_url = svn_path_url_add_component2(repos_root_url, repos_relpath,
- scratch_pool);
-
- if (!origin_url
- || strcmp(origin_url, url) != 0
- || peg_rev != rev)
+ SVN_ERR(svn_client__wc_node_get_origin(&origin, local_abspath, ctx,
+ scratch_pool, scratch_pool));
+ if (!origin
+ || strcmp(origin->url, peg_loc->url) != 0
+ || peg_loc->rev != origin->rev)
{
- use_url = TRUE; /* Don't rely on local merginfo */
+ use_url = TRUE; /* Don't rely on local mergeinfo */
}
}
- /* Check server Merge Tracking capability. */
- SVN_ERR(svn_ra__assert_mergeinfo_capable_server(ra_session, path_or_url,
- scratch_pool));
-
SVN_ERR(svn_ra_get_repos_root2(ra_session, repos_root, result_pool));
if (use_url)
{
- rev = peg_rev;
SVN_ERR(svn_client__get_repos_mergeinfo_catalog(
- mergeinfo_catalog, ra_session, "", rev, svn_mergeinfo_inherited,
- FALSE, include_descendants,
+ mergeinfo_catalog, ra_session, peg_loc->url, peg_loc->rev,
+ svn_mergeinfo_inherited, FALSE, include_descendants,
result_pool, scratch_pool));
}
else /* ! svn_path_is_url() */
{
- svn_boolean_t inherited;
-
- /* Acquire return values. */
SVN_ERR(svn_client__get_wc_or_repos_mergeinfo_catalog(
- mergeinfo_catalog, &inherited, NULL, include_descendants, FALSE,
+ mergeinfo_catalog, NULL, NULL, include_descendants, FALSE,
ignore_invalid_mergeinfo, svn_mergeinfo_inherited,
ra_session, path_or_url, ctx,
result_pool, scratch_pool));
@@ -1170,141 +1104,78 @@ get_mergeinfo(svn_mergeinfo_catalog_t *mergeinfo_catalog,
}
/*** In-memory mergeinfo elision ***/
-
-/* TODO(reint): Document. */
-struct elide_mergeinfo_catalog_dir_baton {
- const char *inherited_mergeinfo_path;
- svn_mergeinfo_t mergeinfo_catalog;
-};
-
-/* The root doesn't have mergeinfo (unless it is actually one of the
- paths passed to svn_delta_path_driver, in which case the callback
- is called directly instead of this). */
-static svn_error_t *
-elide_mergeinfo_catalog_open_root(void *eb,
- svn_revnum_t base_revision,
- apr_pool_t *dir_pool,
- void **root_baton)
-{
- struct elide_mergeinfo_catalog_dir_baton *b = apr_pcalloc(dir_pool,
- sizeof(*b));
- b->mergeinfo_catalog = eb;
- *root_baton = b;
- return SVN_NO_ERROR;
-}
-
-/* Make a directory baton for PATH. It should have the same
- inherited_mergeinfo_path as its parent... unless we just called
- elide_mergeinfo_catalog_cb on its parent with its path. */
-static svn_error_t *
-elide_mergeinfo_catalog_open_directory(const char *path,
- void *parent_baton,
- svn_revnum_t base_revision,
- apr_pool_t *dir_pool,
- void **child_baton)
-{
- struct elide_mergeinfo_catalog_dir_baton *b, *pb = parent_baton;
-
- b = apr_pcalloc(dir_pool, sizeof(*b));
- b->mergeinfo_catalog = pb->mergeinfo_catalog;
-
- if (apr_hash_get(b->mergeinfo_catalog, path, APR_HASH_KEY_STRING))
- b->inherited_mergeinfo_path = apr_pstrdup(dir_pool, path);
- else
- b->inherited_mergeinfo_path = pb->inherited_mergeinfo_path;
-
- *child_baton = b;
- return SVN_NO_ERROR;
-}
-
-/* TODO(reint): Document. */
-struct elide_mergeinfo_catalog_cb_baton {
- apr_array_header_t *elidable_paths;
- svn_mergeinfo_t mergeinfo_catalog;
- apr_pool_t *result_pool;
-};
-
-/* Implements svn_delta_path_driver_cb_func_t. */
-static svn_error_t *
-elide_mergeinfo_catalog_cb(void **dir_baton,
- void *parent_baton,
- void *callback_baton,
- const char *path,
- apr_pool_t *pool)
+svn_error_t *
+svn_client__elide_mergeinfo_catalog(svn_mergeinfo_catalog_t mergeinfo_catalog,
+ apr_pool_t *scratch_pool)
{
- struct elide_mergeinfo_catalog_cb_baton *cb = callback_baton;
- struct elide_mergeinfo_catalog_dir_baton *pb = parent_baton;
- const char *path_suffix;
- svn_boolean_t elides;
-
- /* pb == NULL would imply that there was an *empty* path in the
- paths given to the driver (which is different from "/"). */
- SVN_ERR_ASSERT(pb != NULL);
-
- /* We'll just act like everything is a file. */
- *dir_baton = NULL;
-
- /* Is there even any inherited mergeinfo to elide? */
- /* (Note that svn_delta_path_driver will call open_directory before
- the callback for the root (only).) */
- if (!pb->inherited_mergeinfo_path
- || strcmp(path, "/") == 0)
- return SVN_NO_ERROR;
-
- path_suffix = svn_dirent_is_child(pb->inherited_mergeinfo_path,
- path, NULL);
- SVN_ERR_ASSERT(path_suffix != NULL);
+ apr_array_header_t *sorted_hash;
+ apr_array_header_t *elidable_paths = apr_array_make(scratch_pool, 1,
+ sizeof(const char *));
+ apr_array_header_t *dir_stack = apr_array_make(scratch_pool, 1,
+ sizeof(const char *));
+ apr_pool_t *iterpool;
+ int i;
- SVN_ERR(should_elide_mergeinfo(&elides,
- apr_hash_get(cb->mergeinfo_catalog,
- pb->inherited_mergeinfo_path,
- APR_HASH_KEY_STRING),
- apr_hash_get(cb->mergeinfo_catalog,
- path,
- APR_HASH_KEY_STRING),
- path_suffix,
- pool));
+ /* Here's the general algorithm:
+ Walk through the paths sorted in tree order. For each path, pop
+ the dir_stack until it is either empty or the top item contains a parent
+ of the current path. Check to see if that mergeinfo is then elidable,
+ and build the list of elidable mergeinfo based upon that determination.
+ Finally, push the path of interest onto the stack, and continue. */
+ sorted_hash = svn_sort__hash(mergeinfo_catalog,
+ svn_sort_compare_items_as_paths,
+ scratch_pool);
+ iterpool = svn_pool_create(scratch_pool);
+ for (i = 0; i < sorted_hash->nelts; i++)
+ {
+ svn_sort__item_t *item = &APR_ARRAY_IDX(sorted_hash, i,
+ svn_sort__item_t);
+ const char *path = item->key;
- if (elides)
- APR_ARRAY_PUSH(cb->elidable_paths, const char *) =
- apr_pstrdup(cb->result_pool, path);
+ if (dir_stack->nelts > 0)
+ {
+ const char *top;
+ const char *path_suffix;
+ svn_boolean_t elides = FALSE;
- return SVN_NO_ERROR;
-}
+ svn_pool_clear(iterpool);
-svn_error_t *
-svn_client__elide_mergeinfo_catalog(svn_mergeinfo_t mergeinfo_catalog,
- apr_pool_t *pool)
-{
- apr_array_header_t *paths;
- apr_array_header_t *elidable_paths = apr_array_make(pool, 1,
- sizeof(const char *));
- svn_delta_editor_t *editor = svn_delta_default_editor(pool);
- struct elide_mergeinfo_catalog_cb_baton cb = { 0 };
- int i;
+ /* Pop off any paths which are not ancestors of PATH. */
+ do
+ {
+ top = APR_ARRAY_IDX(dir_stack, dir_stack->nelts - 1,
+ const char *);
+ path_suffix = svn_dirent_is_child(top, path, NULL);
- cb.elidable_paths = elidable_paths;
- cb.mergeinfo_catalog = mergeinfo_catalog;
- cb.result_pool = pool;
+ if (!path_suffix)
+ apr_array_pop(dir_stack);
+ }
+ while (dir_stack->nelts > 0 && !path_suffix);
- editor->open_root = elide_mergeinfo_catalog_open_root;
- editor->open_directory = elide_mergeinfo_catalog_open_directory;
+ /* If we have a path suffix, it means we haven't popped the stack
+ clean. */
+ if (path_suffix)
+ {
+ SVN_ERR(should_elide_mergeinfo(&elides,
+ svn_hash_gets(mergeinfo_catalog, top),
+ svn_hash_gets(mergeinfo_catalog, path),
+ path_suffix,
+ iterpool));
+
+ if (elides)
+ APR_ARRAY_PUSH(elidable_paths, const char *) = path;
+ }
+ }
- /* Walk over the paths, and build up a list of elidable ones. */
- SVN_ERR(svn_hash_keys(&paths, mergeinfo_catalog, pool));
- SVN_ERR(svn_delta_path_driver(editor,
- mergeinfo_catalog, /* as edit_baton */
- SVN_INVALID_REVNUM,
- paths,
- elide_mergeinfo_catalog_cb,
- &cb,
- pool));
+ APR_ARRAY_PUSH(dir_stack, const char *) = path;
+ }
+ svn_pool_destroy(iterpool);
/* Now remove the elidable paths from the catalog. */
for (i = 0; i < elidable_paths->nelts; i++)
{
const char *path = APR_ARRAY_IDX(elidable_paths, i, const char *);
- apr_hash_set(mergeinfo_catalog, path, APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(mergeinfo_catalog, path, NULL);
}
return SVN_NO_ERROR;
@@ -1318,8 +1189,8 @@ svn_client__elide_mergeinfo_catalog(svn_mergeinfo_t mergeinfo_catalog,
each path.
Return a pointer to the mergeinfo value of the nearest path-wise ancestor
- of ABS_REPOS_PATH in DEPTH_FIRST_CATALOG_INDEX. A path is considered its
- own ancestor, so if a key exactly matches ABS_REPOS_PATH, return that
+ of FSPATH in DEPTH_FIRST_CATALOG_INDEX. A path is considered its
+ own ancestor, so if a key exactly matches FSPATH, return that
key's mergeinfo and set *ANCESTOR_IS_SELF to true (set it to false in all
other cases).
@@ -1328,7 +1199,7 @@ svn_client__elide_mergeinfo_catalog(svn_mergeinfo_t mergeinfo_catalog,
static svn_mergeinfo_t
find_nearest_ancestor(const apr_array_header_t *depth_first_catalog_index,
svn_boolean_t *ancestor_is_self,
- const char *abs_repos_path)
+ const char *fspath)
{
int ancestor_index = -1;
@@ -1342,12 +1213,12 @@ find_nearest_ancestor(const apr_array_header_t *depth_first_catalog_index,
{
svn_sort__item_t item = APR_ARRAY_IDX(depth_first_catalog_index, i,
svn_sort__item_t);
- if (svn_fspath__is_ancestor(item.key, abs_repos_path))
+ if (svn_fspath__skip_ancestor(item.key, fspath))
{
ancestor_index = i;
- /* There's no nearer ancestor than ABS_REPOS_PATH itself. */
- if (strcmp(item.key, abs_repos_path) == 0)
+ /* There's no nearer ancestor than FSPATH itself. */
+ if (strcmp(item.key, fspath) == 0)
{
*ancestor_is_self = TRUE;
break;
@@ -1375,12 +1246,12 @@ struct filter_log_entry_baton_t
/* Unsorted array of repository relative paths representing the merge
sources. There will be more than one source */
- const apr_array_header_t *merge_source_paths;
+ const apr_array_header_t *merge_source_fspaths;
/* The repository-absolute path we are calling svn_client_log5() on. */
- const char *abs_repos_target_path;
+ const char *target_fspath;
- /* Mergeinfo catalog for the tree rooted at ABS_REPOS_TARGET_PATH.
+ /* Mergeinfo catalog for the tree rooted at TARGET_FSPATH.
The path keys must be repository-absolute. */
svn_mergeinfo_catalog_t target_mergeinfo_catalog;
@@ -1391,7 +1262,7 @@ struct filter_log_entry_baton_t
/* A rangelist describing all the revisions potentially merged or
potentially eligible for merging (see FILTERING_MERGED) based on
the target's explicit or inherited mergeinfo. */
- const apr_array_header_t *rangelist;
+ const svn_rangelist_t *rangelist;
/* The wrapped svn_log_entry_receiver_t callback and baton which
filter_log_entry_with_rangelist() is acting as a filter for. */
@@ -1406,16 +1277,16 @@ struct filter_log_entry_baton_t
Call the wrapped log receiver BATON->log_receiver (with
BATON->log_receiver_baton) if:
-
+
BATON->FILTERING_MERGED is FALSE and the changes represented by LOG_ENTRY
- have been fully merged from BATON->MERGE_SOURCE_PATHS to the WC target
+ have been fully merged from BATON->merge_source_fspaths to the WC target
based on the mergeinfo for the WC contained in BATON->TARGET_MERGEINFO_CATALOG.
Or
BATON->FILTERING_MERGED is TRUE and the changes represented by LOG_ENTRY
have not been merged, or only partially merged, from
- BATON->MERGE_SOURCE_PATHS to the WC target based on the mergeinfo for the
+ BATON->merge_source_fspaths to the WC target based on the mergeinfo for the
WC contained in BATON->TARGET_MERGEINFO_CATALOG. */
static svn_error_t *
filter_log_entry_with_rangelist(void *baton,
@@ -1423,7 +1294,7 @@ filter_log_entry_with_rangelist(void *baton,
apr_pool_t *pool)
{
struct filter_log_entry_baton_t *fleb = baton;
- apr_array_header_t *intersection, *this_rangelist;
+ svn_rangelist_t *intersection, *this_rangelist;
if (fleb->ctx->cancel_func)
SVN_ERR(fleb->ctx->cancel_func(fleb->ctx->cancel_baton));
@@ -1456,14 +1327,15 @@ filter_log_entry_with_rangelist(void *baton,
/* If the paths changed by LOG_ENTRY->REVISION are provided we can determine
if LOG_ENTRY->REVISION, while only partially represented in
- BATON->RANGELIST, is in fact completely applied to all affected paths. */
+ BATON->RANGELIST, is in fact completely applied to all affected paths.
+ ### And ... what if it is, or if it isn't? What do we do with the answer?
+ And how do we cope if the changed paths are not provided? */
if ((log_entry->non_inheritable || !fleb->filtering_merged)
&& log_entry->changed_paths2)
{
- int i;
apr_hash_index_t *hi;
svn_boolean_t all_subtrees_have_this_rev = TRUE;
- apr_array_header_t *this_rev_rangelist =
+ svn_rangelist_t *this_rev_rangelist =
svn_rangelist__initialize(log_entry->revision - 1,
log_entry->revision, TRUE, pool);
apr_pool_t *iterpool = svn_pool_create(pool);
@@ -1472,27 +1344,27 @@ filter_log_entry_with_rangelist(void *baton,
hi;
hi = apr_hash_next(hi))
{
+ int i;
const char *path = svn__apr_hash_index_key(hi);
svn_log_changed_path2_t *change = svn__apr_hash_index_val(hi);
- const char *target_path_affected;
+ const char *target_fspath_affected;
svn_mergeinfo_t nearest_ancestor_mergeinfo;
- apr_hash_index_t *hi2;
svn_boolean_t found_this_revision = FALSE;
const char *merge_source_rel_target;
- const char *merge_source_path;
+ const char *merge_source_fspath;
svn_boolean_t ancestor_is_self;
svn_pool_clear(iterpool);
/* Check that PATH is a subtree of at least one of the
merge sources. If not then ignore this path. */
- for (i = 0; i < fleb->merge_source_paths->nelts; i++)
+ for (i = 0; i < fleb->merge_source_fspaths->nelts; i++)
{
- merge_source_path = APR_ARRAY_IDX(fleb->merge_source_paths,
- i, const char *);
+ merge_source_fspath = APR_ARRAY_IDX(fleb->merge_source_fspaths,
+ i, const char *);
merge_source_rel_target
- = svn_fspath__skip_ancestor(merge_source_path, path);
+ = svn_fspath__skip_ancestor(merge_source_fspath, path);
if (merge_source_rel_target)
{
/* If MERGE_SOURCE was itself deleted, replaced, or added
@@ -1500,24 +1372,24 @@ filter_log_entry_with_rangelist(void *baton,
can't merge a addition or deletion of yourself. */
if (merge_source_rel_target[0] == '\0'
&& (change->action != 'M'))
- i = fleb->merge_source_paths->nelts;
+ i = fleb->merge_source_fspaths->nelts;
break;
}
}
/* If we examined every merge source path and PATH is a child of
none of them then we can ignore this PATH. */
- if (i == fleb->merge_source_paths->nelts)
+ if (i == fleb->merge_source_fspaths->nelts)
continue;
/* Calculate the target path which PATH would affect if merged. */
- target_path_affected = svn_fspath__join(fleb->abs_repos_target_path,
- merge_source_rel_target,
- iterpool);
+ target_fspath_affected = svn_fspath__join(fleb->target_fspath,
+ merge_source_rel_target,
+ iterpool);
nearest_ancestor_mergeinfo =
find_nearest_ancestor(fleb->depth_first_catalog_index,
&ancestor_is_self,
- target_path_affected);
+ target_fspath_affected);
/* Issue #3791: A path should never have explicit mergeinfo
describing its own addition (that's self-referential). Nor will
@@ -1533,35 +1405,41 @@ filter_log_entry_with_rangelist(void *baton,
obviously back. If it was added or replaced it's still around
possibly it was replaced one or more times, but it's back now.
Regardless, LOG_ENTRY->REVISION is *not* an eligible revision! */
- if (ancestor_is_self /* Explicit mergeinfo on TARGET_PATH_AFFECTED */
+ if (nearest_ancestor_mergeinfo &&
+ ancestor_is_self /* Explicit mergeinfo on TARGET_PATH_AFFECTED */
&& (change->action != 'M'))
{
- apr_array_header_t *rangelist = apr_hash_get(
- nearest_ancestor_mergeinfo, path, APR_HASH_KEY_STRING);
- svn_merge_range_t *youngest_range = APR_ARRAY_IDX(
- rangelist, rangelist->nelts - 1, svn_merge_range_t *);
-
- if (youngest_range
- && (youngest_range->end > log_entry->revision))
- continue;
+ svn_rangelist_t *rangelist =
+ svn_hash_gets(nearest_ancestor_mergeinfo, path);
+ if (rangelist)
+ {
+ svn_merge_range_t *youngest_range = APR_ARRAY_IDX(
+ rangelist, rangelist->nelts - 1, svn_merge_range_t *);
+
+ if (youngest_range
+ && (youngest_range->end > log_entry->revision))
+ continue;
+ }
}
if (nearest_ancestor_mergeinfo)
{
+ apr_hash_index_t *hi2;
+
for (hi2 = apr_hash_first(iterpool, nearest_ancestor_mergeinfo);
hi2;
hi2 = apr_hash_next(hi2))
{
const char *mergeinfo_path = svn__apr_hash_index_key(hi2);
- apr_array_header_t *rangelist = svn__apr_hash_index_val(hi2);
+ svn_rangelist_t *rangelist = svn__apr_hash_index_val(hi2);
/* Does the mergeinfo for PATH reflect if
LOG_ENTRY->REVISION was previously merged
- from MERGE_SOURCE_PATH? */
- if (svn_fspath__is_ancestor(merge_source_path,
- mergeinfo_path))
+ from MERGE_SOURCE_FSPATH? */
+ if (svn_fspath__skip_ancestor(merge_source_fspath,
+ mergeinfo_path))
{
- /* Something was merged from MERGE_SOURCE_PATH, does
+ /* Something was merged from MERGE_SOURCE_FSPATH, does
it include LOG_ENTRY->REVISION? */
SVN_ERR(svn_rangelist_intersect(&intersection,
rangelist,
@@ -1581,7 +1459,7 @@ filter_log_entry_with_rangelist(void *baton,
else
{
/* TARGET_PATH_AFFECTED inherited its mergeinfo,
- se we have to ignore non-inheritable
+ so we have to ignore non-inheritable
ranges. */
SVN_ERR(svn_rangelist_intersect(
&intersection,
@@ -1625,95 +1503,80 @@ filter_log_entry_with_rangelist(void *baton,
static svn_error_t *
logs_for_mergeinfo_rangelist(const char *source_url,
- const apr_array_header_t *merge_source_paths,
+ const apr_array_header_t *merge_source_fspaths,
svn_boolean_t filtering_merged,
- const apr_array_header_t *rangelist,
- svn_mergeinfo_t target_mergeinfo_catalog,
- const char *abs_repos_target_path,
+ const svn_rangelist_t *rangelist,
+ svn_boolean_t oldest_revs_first,
+ svn_mergeinfo_catalog_t target_mergeinfo_catalog,
+ const char *target_fspath,
svn_boolean_t discover_changed_paths,
const apr_array_header_t *revprops,
svn_log_entry_receiver_t log_receiver,
void *log_receiver_baton,
svn_client_ctx_t *ctx,
+ svn_ra_session_t *ra_session,
apr_pool_t *scratch_pool)
{
- apr_array_header_t *target;
svn_merge_range_t *oldest_range, *youngest_range;
- apr_array_header_t *revision_ranges;
- svn_opt_revision_t oldest_rev, youngest_rev;
- svn_opt_revision_range_t *range;
+ svn_revnum_t oldest_rev, youngest_rev;
struct filter_log_entry_baton_t fleb;
if (! rangelist->nelts)
return SVN_NO_ERROR;
- /* Sort the rangelist. */
- qsort(rangelist->elts, rangelist->nelts,
- rangelist->elt_size, svn_sort_compare_ranges);
-
- /* Build a single-member log target list using SOURCE_URL. */
- target = apr_array_make(scratch_pool, 1, sizeof(const char *));
- APR_ARRAY_PUSH(target, const char *) = source_url;
-
/* Calculate and construct the bounds of our log request. */
youngest_range = APR_ARRAY_IDX(rangelist, rangelist->nelts - 1,
svn_merge_range_t *);
- youngest_rev.kind = svn_opt_revision_number;
- youngest_rev.value.number = youngest_range->end;
+ youngest_rev = youngest_range->end;
oldest_range = APR_ARRAY_IDX(rangelist, 0, svn_merge_range_t *);
- oldest_rev.kind = svn_opt_revision_number;
- oldest_rev.value.number = oldest_range->start;
+ oldest_rev = oldest_range->start;
if (! target_mergeinfo_catalog)
target_mergeinfo_catalog = apr_hash_make(scratch_pool);
/* FILTER_LOG_ENTRY_BATON_T->TARGET_MERGEINFO_CATALOG's keys are required
to be repository-absolute. */
- if (apr_hash_count(target_mergeinfo_catalog))
- {
- apr_hash_index_t *hi;
- svn_mergeinfo_catalog_t rekeyed_catalog = apr_hash_make(scratch_pool);
-
- for (hi = apr_hash_first(scratch_pool, target_mergeinfo_catalog);
- hi;
- hi = apr_hash_next(hi))
- {
- const char *path = svn__apr_hash_index_key(hi);
-
- if (!svn_dirent_is_absolute(path))
- apr_hash_set(rekeyed_catalog,
- svn_dirent_join("/", path, scratch_pool),
- APR_HASH_KEY_STRING,
- svn__apr_hash_index_val(hi));
- }
- target_mergeinfo_catalog = rekeyed_catalog;
- }
+ SVN_ERR(svn_mergeinfo__add_prefix_to_catalog(&target_mergeinfo_catalog,
+ target_mergeinfo_catalog, "/",
+ scratch_pool, scratch_pool));
/* Build the log filtering callback baton. */
fleb.filtering_merged = filtering_merged;
- fleb.merge_source_paths = merge_source_paths;
+ fleb.merge_source_fspaths = merge_source_fspaths;
fleb.target_mergeinfo_catalog = target_mergeinfo_catalog;
fleb.depth_first_catalog_index =
svn_sort__hash(target_mergeinfo_catalog,
svn_sort_compare_items_as_paths,
scratch_pool);
- fleb.abs_repos_target_path = abs_repos_target_path;
+ fleb.target_fspath = target_fspath;
fleb.rangelist = rangelist;
fleb.log_receiver = log_receiver;
fleb.log_receiver_baton = log_receiver_baton;
fleb.ctx = ctx;
- /* Drive the log. */
- revision_ranges = apr_array_make(scratch_pool, 1,
- sizeof(svn_opt_revision_range_t *));
- range = apr_pcalloc(scratch_pool, sizeof(*range));
- range->end = youngest_rev;
- range->start = oldest_rev;
- APR_ARRAY_PUSH(revision_ranges, svn_opt_revision_range_t *) = range;
- SVN_ERR(svn_client_log5(target, &youngest_rev, revision_ranges,
- 0, discover_changed_paths, FALSE, FALSE, revprops,
- filter_log_entry_with_rangelist, &fleb, ctx,
- scratch_pool));
+ if (!ra_session)
+ SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL, source_url,
+ NULL, NULL, FALSE, FALSE, ctx,
+ scratch_pool, scratch_pool));
+ else
+ SVN_ERR(svn_ra_reparent(ra_session, source_url, scratch_pool));
+
+ {
+ apr_array_header_t *target;
+ target = apr_array_make(scratch_pool, 1, sizeof(const char *));
+ APR_ARRAY_PUSH(target, const char *) = "";
+
+ SVN_ERR(svn_ra_get_log2(ra_session, target,
+ oldest_revs_first ? oldest_rev : youngest_rev,
+ oldest_revs_first ? youngest_rev : oldest_rev,
+ 0 /* limit */,
+ discover_changed_paths,
+ FALSE /* strict_node_history */,
+ FALSE /* include_merged_revisions */,
+ revprops,
+ filter_log_entry_with_rangelist, &fleb,
+ scratch_pool));
+ }
/* Check for cancellation. */
if (ctx->cancel_func)
@@ -1721,6 +1584,44 @@ logs_for_mergeinfo_rangelist(const char *source_url,
return SVN_NO_ERROR;
}
+
+/* Set *OUT_MERGEINFO to a shallow copy of MERGEINFO with each source path
+ converted to a (URI-encoded) URL based on REPOS_ROOT_URL. *OUT_MERGEINFO
+ is declared as 'apr_hash_t *' because its key do not obey the rules of
+ 'svn_mergeinfo_t'.
+
+ Allocate *OUT_MERGEINFO and the new keys in RESULT_POOL. Use
+ SCRATCH_POOL for any temporary allocations. */
+static svn_error_t *
+mergeinfo_relpaths_to_urls(apr_hash_t **out_mergeinfo,
+ svn_mergeinfo_t mergeinfo,
+ const char *repos_root_url,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ *out_mergeinfo = NULL;
+ if (mergeinfo)
+ {
+ apr_hash_index_t *hi;
+ apr_hash_t *full_path_mergeinfo = apr_hash_make(result_pool);
+
+ for (hi = apr_hash_first(scratch_pool, mergeinfo);
+ hi; hi = apr_hash_next(hi))
+ {
+ const char *key = svn__apr_hash_index_key(hi);
+ void *val = svn__apr_hash_index_val(hi);
+
+ svn_hash_sets(full_path_mergeinfo,
+ svn_path_url_add_component2(repos_root_url, key + 1,
+ result_pool),
+ val);
+ }
+ *out_mergeinfo = full_path_mergeinfo;
+ }
+
+ return SVN_NO_ERROR;
+}
+
/*** Public APIs ***/
@@ -1732,88 +1633,83 @@ svn_client_mergeinfo_get_merged(apr_hash_t **mergeinfo_p,
apr_pool_t *pool)
{
const char *repos_root;
- apr_hash_t *full_path_mergeinfo;
svn_mergeinfo_catalog_t mergeinfo_cat;
svn_mergeinfo_t mergeinfo;
SVN_ERR(get_mergeinfo(&mergeinfo_cat, &repos_root, path_or_url,
- peg_revision, FALSE, FALSE, ctx, pool, pool));
+ peg_revision, FALSE, FALSE, ctx, NULL, pool, pool));
if (mergeinfo_cat)
{
- const char *path_or_url_repos_rel;
-
- if (! svn_path_is_url(path_or_url)
- && ! svn_dirent_is_absolute(path_or_url))
- SVN_ERR(svn_dirent_get_absolute(&path_or_url, path_or_url, pool));
-
- SVN_ERR(svn_client__path_relative_to_root(&path_or_url_repos_rel,
- ctx->wc_ctx, path_or_url,
- repos_root, FALSE, NULL,
- pool, pool));
- mergeinfo = apr_hash_get(mergeinfo_cat, path_or_url_repos_rel,
- APR_HASH_KEY_STRING);
- }
- else
- {
- mergeinfo = NULL;
- }
-
- /* Copy the MERGEINFO hash items into another hash, but change
- the relative paths into full URLs. */
- *mergeinfo_p = NULL;
- if (mergeinfo)
- {
- apr_hash_index_t *hi;
+ const char *repos_relpath;
- full_path_mergeinfo = apr_hash_make(pool);
- for (hi = apr_hash_first(pool, mergeinfo); hi; hi = apr_hash_next(hi))
+ if (! svn_path_is_url(path_or_url))
{
- const char *key = svn__apr_hash_index_key(hi);
- void *val = svn__apr_hash_index_val(hi);
+ SVN_ERR(svn_dirent_get_absolute(&path_or_url, path_or_url, pool));
+ SVN_ERR(svn_wc__node_get_repos_info(NULL, &repos_relpath, NULL, NULL,
+ ctx->wc_ctx, path_or_url,
+ pool, pool));
+ }
+ else
+ {
+ repos_relpath = svn_uri_skip_ancestor(repos_root, path_or_url, pool);
- apr_hash_set(full_path_mergeinfo,
- svn_path_url_add_component2(repos_root, key + 1, pool),
- APR_HASH_KEY_STRING, val);
+ SVN_ERR_ASSERT(repos_relpath != NULL); /* Or get_mergeinfo failed */
}
- *mergeinfo_p = full_path_mergeinfo;
+
+ mergeinfo = svn_hash_gets(mergeinfo_cat, repos_relpath);
+ }
+ else
+ {
+ mergeinfo = NULL;
}
+ SVN_ERR(mergeinfo_relpaths_to_urls(mergeinfo_p, mergeinfo,
+ repos_root, pool, pool));
return SVN_NO_ERROR;
}
-
svn_error_t *
-svn_client_mergeinfo_log(svn_boolean_t finding_merged,
- const char *path_or_url,
- const svn_opt_revision_t *peg_revision,
- const char *merge_source_path_or_url,
- const svn_opt_revision_t *src_peg_revision,
- svn_log_entry_receiver_t log_receiver,
- void *log_receiver_baton,
- svn_boolean_t discover_changed_paths,
- svn_depth_t depth,
- const apr_array_header_t *revprops,
- svn_client_ctx_t *ctx,
- apr_pool_t *scratch_pool)
+svn_client__mergeinfo_log(svn_boolean_t finding_merged,
+ const char *target_path_or_url,
+ const svn_opt_revision_t *target_peg_revision,
+ svn_mergeinfo_catalog_t *target_mergeinfo_catalog,
+ const char *source_path_or_url,
+ const svn_opt_revision_t *source_peg_revision,
+ const svn_opt_revision_t *source_start_revision,
+ const svn_opt_revision_t *source_end_revision,
+ svn_log_entry_receiver_t log_receiver,
+ void *log_receiver_baton,
+ svn_boolean_t discover_changed_paths,
+ svn_depth_t depth,
+ const apr_array_header_t *revprops,
+ svn_client_ctx_t *ctx,
+ svn_ra_session_t *ra_session,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
const char *log_target = NULL;
const char *repos_root;
- const char *path_or_url_repos_rel;
- svn_mergeinfo_catalog_t path_or_url_mergeinfo_cat;
-
- /* A hash of paths, at or under PATH_OR_URL, mapped to rangelists. Not
- technically mergeinfo, so not using the svn_mergeinfo_t type. */
+ const char *target_repos_relpath;
+ svn_mergeinfo_catalog_t target_mergeinfo_cat;
+ svn_ra_session_t *target_session = NULL;
+ svn_client__pathrev_t *pathrev;
+
+ /* A hash of paths, at or under TARGET_PATH_OR_URL, mapped to
+ rangelists. Not technically mergeinfo, so not using the
+ svn_mergeinfo_t type. */
apr_hash_t *inheritable_subtree_merges;
svn_mergeinfo_t source_history;
- svn_mergeinfo_t path_or_url_history;
- apr_array_header_t *master_noninheritable_rangelist;
- apr_array_header_t *master_inheritable_rangelist;
- apr_array_header_t *merge_source_paths =
+ svn_mergeinfo_t target_history;
+ svn_rangelist_t *master_noninheritable_rangelist;
+ svn_rangelist_t *master_inheritable_rangelist;
+ apr_array_header_t *merge_source_fspaths =
apr_array_make(scratch_pool, 1, sizeof(const char *));
apr_hash_index_t *hi_catalog;
apr_hash_index_t *hi;
apr_pool_t *iterpool;
+ svn_boolean_t oldest_revs_first = TRUE;
+ apr_pool_t *subpool;
/* We currently only support depth = empty | infinity. */
if (depth != svn_depth_infinity && depth != svn_depth_empty)
@@ -1821,30 +1717,113 @@ svn_client_mergeinfo_log(svn_boolean_t finding_merged,
SVN_ERR_UNSUPPORTED_FEATURE, NULL,
_("Only depths 'infinity' and 'empty' are currently supported"));
- /* We need the union of PATH_OR_URL@PEG_REVISION's mergeinfo
+ /* Validate and sanitize the incoming source operative revision range. */
+ if (!((source_start_revision->kind == svn_opt_revision_unspecified) ||
+ (source_start_revision->kind == svn_opt_revision_number) ||
+ (source_start_revision->kind == svn_opt_revision_date) ||
+ (source_start_revision->kind == svn_opt_revision_head)))
+ return svn_error_create(SVN_ERR_CLIENT_BAD_REVISION, NULL, NULL);
+ if (!((source_end_revision->kind == svn_opt_revision_unspecified) ||
+ (source_end_revision->kind == svn_opt_revision_number) ||
+ (source_end_revision->kind == svn_opt_revision_date) ||
+ (source_end_revision->kind == svn_opt_revision_head)))
+ return svn_error_create(SVN_ERR_CLIENT_BAD_REVISION, NULL, NULL);
+ if ((source_end_revision->kind != svn_opt_revision_unspecified)
+ && (source_start_revision->kind == svn_opt_revision_unspecified))
+ return svn_error_create(SVN_ERR_CLIENT_BAD_REVISION, NULL, NULL);
+ if ((source_end_revision->kind == svn_opt_revision_unspecified)
+ && (source_start_revision->kind != svn_opt_revision_unspecified))
+ return svn_error_create(SVN_ERR_CLIENT_BAD_REVISION, NULL, NULL);
+
+ subpool = svn_pool_create(scratch_pool);
+
+ if (ra_session)
+ target_session = ra_session;
+
+ /* We need the union of TARGET_PATH_OR_URL@TARGET_PEG_REVISION's mergeinfo
and MERGE_SOURCE_URL's history. It's not enough to do path
matching, because renames in the history of MERGE_SOURCE_URL
throw that all in a tizzy. Of course, if there's no mergeinfo on
the target, that vastly simplifies matters (we'll have nothing to
do). */
/* This get_mergeinfo() call doubles as a mergeinfo capabilities check. */
- SVN_ERR(get_mergeinfo(&path_or_url_mergeinfo_cat, &repos_root,
- path_or_url, peg_revision,
- depth == svn_depth_infinity, TRUE,
- ctx, scratch_pool, scratch_pool));
-
- if (!svn_path_is_url(path_or_url))
- SVN_ERR(svn_dirent_get_absolute(&path_or_url, path_or_url, scratch_pool));
-
- SVN_ERR(svn_client__path_relative_to_root(&path_or_url_repos_rel,
- ctx->wc_ctx,
- path_or_url,
- repos_root,
- FALSE, NULL,
- scratch_pool,
- scratch_pool));
-
- if (!path_or_url_mergeinfo_cat)
+ if (target_mergeinfo_catalog)
+ {
+ if (*target_mergeinfo_catalog)
+ {
+ /* The caller provided the mergeinfo catalog for
+ TARGET_PATH_OR_URL, so we don't need to accquire
+ it ourselves. We do need to get the repos_root
+ though, because get_mergeinfo() won't do it for us. */
+ target_mergeinfo_cat = *target_mergeinfo_catalog;
+
+ if (ra_session && svn_path_is_url(target_path_or_url))
+ {
+ SVN_ERR(svn_ra_reparent(ra_session, target_path_or_url, subpool));
+ SVN_ERR(svn_client__resolve_rev_and_url(&pathrev, ra_session,
+ target_path_or_url,
+ target_peg_revision,
+ target_peg_revision,
+ ctx, subpool));
+ target_session = ra_session;
+ }
+ else
+ {
+ SVN_ERR(svn_client__ra_session_from_path2(&target_session,
+ &pathrev,
+ target_path_or_url,
+ NULL,
+ target_peg_revision,
+ target_peg_revision,
+ ctx, subpool));
+ }
+ SVN_ERR(svn_ra_get_repos_root2(target_session, &repos_root,
+ scratch_pool));
+ }
+ else
+ {
+ /* The caller didn't provide the mergeinfo catalog for
+ TARGET_PATH_OR_URL, but wants us to pass a copy back
+ when we get it, so use RESULT_POOL. */
+ SVN_ERR(get_mergeinfo(target_mergeinfo_catalog, &repos_root,
+ target_path_or_url, target_peg_revision,
+ depth == svn_depth_infinity, TRUE,
+ ctx, ra_session, result_pool, scratch_pool));
+ target_mergeinfo_cat = *target_mergeinfo_catalog;
+ }
+ }
+ else
+ {
+ /* The caller didn't provide the mergeinfo catalog for
+ TARGET_PATH_OR_URL, nor does it want a copy, so we can use
+ nothing but SCRATCH_POOL. */
+ SVN_ERR(get_mergeinfo(&target_mergeinfo_cat, &repos_root,
+ target_path_or_url, target_peg_revision,
+ depth == svn_depth_infinity, TRUE,
+ ctx, ra_session, scratch_pool, scratch_pool));
+ }
+
+ if (!svn_path_is_url(target_path_or_url))
+ {
+ SVN_ERR(svn_dirent_get_absolute(&target_path_or_url,
+ target_path_or_url, scratch_pool));
+ SVN_ERR(svn_wc__node_get_repos_info(NULL, &target_repos_relpath,
+ NULL, NULL,
+ ctx->wc_ctx, target_path_or_url,
+ scratch_pool, scratch_pool));
+ }
+ else
+ {
+ target_repos_relpath = svn_uri_skip_ancestor(repos_root,
+ target_path_or_url,
+ scratch_pool);
+
+ /* TARGET_REPOS_REL should be non-NULL, else get_mergeinfo
+ should have failed. */
+ SVN_ERR_ASSERT(target_repos_relpath != NULL);
+ }
+
+ if (!target_mergeinfo_cat)
{
/* If we are looking for what has been merged and there is no
mergeinfo then we already know the answer. If we are looking
@@ -1854,51 +1833,101 @@ svn_client_mergeinfo_log(svn_boolean_t finding_merged,
history. */
if (finding_merged)
{
+ svn_pool_destroy(subpool);
return SVN_NO_ERROR;
}
else
{
- path_or_url_mergeinfo_cat = apr_hash_make(scratch_pool);
- apr_hash_set(path_or_url_mergeinfo_cat,
- path_or_url_repos_rel,
- APR_HASH_KEY_STRING,
- apr_hash_make(scratch_pool));
+ target_mergeinfo_cat = apr_hash_make(scratch_pool);
+ svn_hash_sets(target_mergeinfo_cat, target_repos_relpath,
+ apr_hash_make(scratch_pool));
}
}
- if (!finding_merged)
- SVN_ERR(svn_client__get_history_as_mergeinfo(&path_or_url_history, NULL,
- path_or_url,
- peg_revision,
- SVN_INVALID_REVNUM,
- SVN_INVALID_REVNUM,
- NULL, ctx, scratch_pool));
-
- SVN_ERR(svn_client__get_history_as_mergeinfo(&source_history, NULL,
- merge_source_path_or_url,
- src_peg_revision,
- SVN_INVALID_REVNUM,
- SVN_INVALID_REVNUM,
- NULL, ctx, scratch_pool));
-
- /* Separate the explicit or inherited mergeinfo on PATH_OR_URL, and possibly
- its explicit subtree mergeinfo, into their inheritable and non-inheritable
- parts. */
- master_noninheritable_rangelist =
- apr_array_make(scratch_pool, 64, sizeof(svn_merge_range_t *));
+ /* Fetch the location history as mergeinfo, for the source branch
+ * (between the given start and end revisions), and, if we're finding
+ * merged revisions, then also for the entire target branch.
+ *
+ * ### TODO: As the source and target must be in the same repository, we
+ * should share a single session, tracking the two URLs separately. */
+ {
+ svn_ra_session_t *source_session;
+ svn_revnum_t start_rev, end_rev, youngest_rev = SVN_INVALID_REVNUM;
+
+ if (! finding_merged)
+ {
+ if (!target_session)
+ SVN_ERR(svn_client__ra_session_from_path2(&target_session, &pathrev,
+ target_path_or_url, NULL,
+ target_peg_revision,
+ target_peg_revision,
+ ctx, subpool));
+ SVN_ERR(svn_client__get_history_as_mergeinfo(&target_history, NULL,
+ pathrev,
+ SVN_INVALID_REVNUM,
+ SVN_INVALID_REVNUM,
+ target_session, ctx,
+ scratch_pool));
+ }
+
+ if (target_session
+ && svn_path_is_url(source_path_or_url)
+ && repos_root
+ && svn_uri_skip_ancestor(repos_root, source_path_or_url, subpool))
+ {
+ /* We can re-use the existing session */
+ source_session = target_session;
+ SVN_ERR(svn_ra_reparent(source_session, source_path_or_url, subpool));
+ SVN_ERR(svn_client__resolve_rev_and_url(&pathrev, source_session,
+ source_path_or_url,
+ source_peg_revision,
+ source_peg_revision,
+ ctx, subpool));
+ }
+ else
+ {
+ SVN_ERR(svn_client__ra_session_from_path2(&source_session, &pathrev,
+ source_path_or_url, NULL,
+ source_peg_revision,
+ source_peg_revision,
+ ctx, subpool));
+ }
+ SVN_ERR(svn_client__get_revision_number(&start_rev, &youngest_rev,
+ ctx->wc_ctx, source_path_or_url,
+ source_session,
+ source_start_revision,
+ subpool));
+ SVN_ERR(svn_client__get_revision_number(&end_rev, &youngest_rev,
+ ctx->wc_ctx, source_path_or_url,
+ source_session,
+ source_end_revision,
+ subpool));
+ SVN_ERR(svn_client__get_history_as_mergeinfo(&source_history, NULL,
+ pathrev,
+ MAX(end_rev, start_rev),
+ MIN(end_rev, start_rev),
+ source_session, ctx,
+ scratch_pool));
+ if (start_rev > end_rev)
+ oldest_revs_first = FALSE;
+ }
+
+ /* Separate the explicit or inherited mergeinfo on TARGET_PATH_OR_URL,
+ and possibly its explicit subtree mergeinfo, into their
+ inheritable and non-inheritable parts. */
+ master_noninheritable_rangelist = apr_array_make(scratch_pool, 64,
+ sizeof(svn_merge_range_t *));
master_inheritable_rangelist = apr_array_make(scratch_pool, 64,
sizeof(svn_merge_range_t *));
inheritable_subtree_merges = apr_hash_make(scratch_pool);
iterpool = svn_pool_create(scratch_pool);
- for (hi_catalog = apr_hash_first(scratch_pool,
- path_or_url_mergeinfo_cat);
+ for (hi_catalog = apr_hash_first(scratch_pool, target_mergeinfo_cat);
hi_catalog;
hi_catalog = apr_hash_next(hi_catalog))
{
- svn_mergeinfo_t subtree_mergeinfo =
- svn__apr_hash_index_val(hi_catalog);
+ svn_mergeinfo_t subtree_mergeinfo = svn__apr_hash_index_val(hi_catalog);
svn_mergeinfo_t subtree_history;
svn_mergeinfo_t subtree_source_history;
svn_mergeinfo_t subtree_inheritable_mergeinfo;
@@ -1907,16 +1936,16 @@ svn_client_mergeinfo_log(svn_boolean_t finding_merged,
svn_mergeinfo_t merged;
const char *subtree_path = svn__apr_hash_index_key(hi_catalog);
svn_boolean_t is_subtree = strcmp(subtree_path,
- path_or_url_repos_rel) != 0;
+ target_repos_relpath) != 0;
svn_pool_clear(iterpool);
if (is_subtree)
{
- /* If SUBTREE_PATH is a proper subtree of PATH_OR_URL then make
- a copy of SOURCE_HISTORY that is path adjusted for the
- subtree. */
+ /* If SUBTREE_PATH is a proper subtree of TARGET_PATH_OR_URL
+ then make a copy of SOURCE_HISTORY that is path adjusted
+ for the subtree. */
const char *subtree_rel_path =
- subtree_path + strlen(path_or_url_repos_rel) + 1;
+ subtree_path + strlen(target_repos_relpath) + 1;
SVN_ERR(svn_mergeinfo__add_suffix_to_mergeinfo(
&subtree_source_history, source_history,
@@ -1924,14 +1953,14 @@ svn_client_mergeinfo_log(svn_boolean_t finding_merged,
if (!finding_merged)
SVN_ERR(svn_mergeinfo__add_suffix_to_mergeinfo(
- &subtree_history, path_or_url_history,
+ &subtree_history, target_history,
subtree_rel_path, scratch_pool, scratch_pool));
}
else
{
subtree_source_history = source_history;
if (!finding_merged)
- subtree_history = path_or_url_history;
+ subtree_history = target_history;
}
if (!finding_merged)
@@ -1940,10 +1969,10 @@ svn_client_mergeinfo_log(svn_boolean_t finding_merged,
SVN_ERR(svn_mergeinfo_intersect2(&merged_via_history,
subtree_history,
subtree_source_history, TRUE,
- scratch_pool, scratch_pool));
- SVN_ERR(svn_mergeinfo_merge(subtree_mergeinfo,
- merged_via_history,
- scratch_pool));
+ scratch_pool, iterpool));
+ SVN_ERR(svn_mergeinfo_merge2(subtree_mergeinfo,
+ merged_via_history,
+ scratch_pool, scratch_pool));
}
SVN_ERR(svn_mergeinfo_inheritable2(&subtree_inheritable_mergeinfo,
@@ -1973,19 +2002,9 @@ svn_client_mergeinfo_log(svn_boolean_t finding_merged,
/* Keep track of all ranges partially merged to any and all
subtrees. */
- if (apr_hash_count(merged_noninheritable))
- {
- for (hi = apr_hash_first(iterpool, merged_noninheritable);
- hi;
- hi = apr_hash_next(hi))
- {
- apr_array_header_t *list = svn__apr_hash_index_val(hi);
- SVN_ERR(svn_rangelist_merge(
- &master_noninheritable_rangelist,
- svn_rangelist_dup(list, scratch_pool),
- scratch_pool));
- }
- }
+ SVN_ERR(svn_rangelist__merge_many(master_noninheritable_rangelist,
+ merged_noninheritable,
+ scratch_pool, iterpool));
/* Find the intersection of the inheritable part of TGT_MERGEINFO
and SOURCE_HISTORY. */
@@ -2000,46 +2019,32 @@ svn_client_mergeinfo_log(svn_boolean_t finding_merged,
{
/* The inheritable rangelist merged from SUBTREE_SOURCE_HISTORY
to SUBTREE_PATH. */
- apr_array_header_t *subtree_merged_rangelist =
+ svn_rangelist_t *subtree_merged_rangelist =
apr_array_make(scratch_pool, 1, sizeof(svn_merge_range_t *));
- for (hi = apr_hash_first(iterpool, merged);
- hi;
- hi = apr_hash_next(hi))
- {
- apr_array_header_t *list = svn__apr_hash_index_val(hi);
-
- SVN_ERR(svn_rangelist_merge(&master_inheritable_rangelist,
- svn_rangelist_dup(list,
- scratch_pool),
- scratch_pool));
- SVN_ERR(svn_rangelist_merge(&subtree_merged_rangelist,
- svn_rangelist_dup(list,
- scratch_pool),
- scratch_pool));
- }
+ SVN_ERR(svn_rangelist__merge_many(master_inheritable_rangelist,
+ merged, scratch_pool, iterpool));
+ SVN_ERR(svn_rangelist__merge_many(subtree_merged_rangelist,
+ merged, scratch_pool, iterpool));
- apr_hash_set(inheritable_subtree_merges,
- apr_pstrdup(scratch_pool, subtree_path),
- APR_HASH_KEY_STRING, subtree_merged_rangelist);
+ svn_hash_sets(inheritable_subtree_merges, subtree_path,
+ subtree_merged_rangelist);
}
else
{
/* Map SUBTREE_PATH to an empty rangelist if there was nothing
- fully merged. e.g. Only empty or non-inheritable mergienfo
+ fully merged. e.g. Only empty or non-inheritable mergeinfo
on the subtree or mergeinfo unrelated to the source. */
- apr_hash_set(inheritable_subtree_merges,
- apr_pstrdup(scratch_pool, subtree_path),
- APR_HASH_KEY_STRING,
- apr_array_make(scratch_pool, 0,
- sizeof(svn_merge_range_t *)));
+ svn_hash_sets(inheritable_subtree_merges, subtree_path,
+ apr_array_make(scratch_pool, 0,
+ sizeof(svn_merge_range_t *)));
}
}
/* Make sure every range in MASTER_INHERITABLE_RANGELIST is fully merged to
each subtree (including the target itself). Any revisions which don't
exist in *every* subtree are *potentially* only partially merged to the
- tree rooted at PATH_OR_URL, so move those revisions to
+ tree rooted at TARGET_PATH_OR_URL, so move those revisions to
MASTER_NONINHERITABLE_RANGELIST. It may turn out that that a revision
was merged to the only subtree it affects, but we need to examine the
logs to make this determination (which will be done by
@@ -2050,9 +2055,9 @@ svn_client_mergeinfo_log(svn_boolean_t finding_merged,
hi;
hi = apr_hash_next(hi))
{
- apr_array_header_t *deleted_rangelist;
- apr_array_header_t *added_rangelist;
- apr_array_header_t *subtree_merged_rangelist =
+ svn_rangelist_t *deleted_rangelist;
+ svn_rangelist_t *added_rangelist;
+ svn_rangelist_t *subtree_merged_rangelist =
svn__apr_hash_index_val(hi);
svn_pool_clear(iterpool);
@@ -2065,9 +2070,9 @@ svn_client_mergeinfo_log(svn_boolean_t finding_merged,
if (deleted_rangelist->nelts)
{
svn_rangelist__set_inheritance(deleted_rangelist, FALSE);
- SVN_ERR(svn_rangelist_merge(&master_noninheritable_rangelist,
- deleted_rangelist,
- scratch_pool));
+ SVN_ERR(svn_rangelist_merge2(master_noninheritable_rangelist,
+ deleted_rangelist,
+ scratch_pool, iterpool));
SVN_ERR(svn_rangelist_remove(&master_inheritable_rangelist,
deleted_rangelist,
master_inheritable_rangelist,
@@ -2080,38 +2085,30 @@ svn_client_mergeinfo_log(svn_boolean_t finding_merged,
if (finding_merged)
{
/* Roll all the merged revisions into one rangelist. */
- SVN_ERR(svn_rangelist_merge(&master_inheritable_rangelist,
- master_noninheritable_rangelist,
- scratch_pool));
+ SVN_ERR(svn_rangelist_merge2(master_inheritable_rangelist,
+ master_noninheritable_rangelist,
+ scratch_pool, scratch_pool));
}
else
{
/* Create the starting rangelist for what might be eligible. */
- apr_array_header_t *source_master_rangelist =
+ svn_rangelist_t *source_master_rangelist =
apr_array_make(scratch_pool, 1, sizeof(svn_merge_range_t *));
- for (hi = apr_hash_first(scratch_pool, source_history);
- hi;
- hi = apr_hash_next(hi))
- {
- apr_array_header_t *subtree_merged_rangelist =
- svn__apr_hash_index_val(hi);
-
- SVN_ERR(svn_rangelist_merge(&source_master_rangelist,
- subtree_merged_rangelist,
- iterpool));
- }
+ SVN_ERR(svn_rangelist__merge_many(source_master_rangelist,
+ source_history,
+ scratch_pool, scratch_pool));
- /* From what might be eligible subtract what we know is partially merged
- and then merge that back. */
+ /* From what might be eligible subtract what we know is
+ partially merged and then merge that back. */
SVN_ERR(svn_rangelist_remove(&source_master_rangelist,
master_noninheritable_rangelist,
source_master_rangelist,
FALSE, scratch_pool));
- SVN_ERR(svn_rangelist_merge(&source_master_rangelist,
- master_noninheritable_rangelist,
- scratch_pool));
+ SVN_ERR(svn_rangelist_merge2(source_master_rangelist,
+ master_noninheritable_rangelist,
+ scratch_pool, scratch_pool));
SVN_ERR(svn_rangelist_remove(&master_inheritable_rangelist,
master_inheritable_rangelist,
source_master_rangelist,
@@ -2129,11 +2126,11 @@ svn_client_mergeinfo_log(svn_boolean_t finding_merged,
else
{
/* Determine the correct (youngest) target for 'svn log'. */
- svn_merge_range_t *youngest_range = svn_merge_range_dup(
- APR_ARRAY_IDX(master_inheritable_rangelist,
- master_inheritable_rangelist->nelts - 1,
- svn_merge_range_t *), scratch_pool);
- apr_array_header_t *youngest_rangelist =
+ svn_merge_range_t *youngest_range
+ = APR_ARRAY_IDX(master_inheritable_rangelist,
+ master_inheritable_rangelist->nelts - 1,
+ svn_merge_range_t *);
+ svn_rangelist_t *youngest_rangelist =
svn_rangelist__initialize(youngest_range->end - 1,
youngest_range->end,
youngest_range->inheritable,
@@ -2144,20 +2141,20 @@ svn_client_mergeinfo_log(svn_boolean_t finding_merged,
hi = apr_hash_next(hi))
{
const char *key = svn__apr_hash_index_key(hi);
- apr_array_header_t *subtree_merged_rangelist =
+ svn_rangelist_t *subtree_merged_rangelist =
svn__apr_hash_index_val(hi);
- apr_array_header_t *intersecting_rangelist;
+ svn_rangelist_t *intersecting_rangelist;
+
svn_pool_clear(iterpool);
SVN_ERR(svn_rangelist_intersect(&intersecting_rangelist,
youngest_rangelist,
subtree_merged_rangelist,
FALSE, iterpool));
- APR_ARRAY_PUSH(merge_source_paths, const char *) =
- apr_pstrdup(scratch_pool, key);
+ APR_ARRAY_PUSH(merge_source_fspaths, const char *) = key;
if (intersecting_rangelist->nelts)
- log_target = apr_pstrdup(scratch_pool, key);
+ log_target = key;
}
}
@@ -2169,18 +2166,54 @@ svn_client_mergeinfo_log(svn_boolean_t finding_merged,
log_target = svn_path_url_add_component2(repos_root, log_target + 1,
scratch_pool);
- SVN_ERR(logs_for_mergeinfo_rangelist(log_target, merge_source_paths,
+ {
+ svn_error_t *err;
+
+ err = logs_for_mergeinfo_rangelist(log_target, merge_source_fspaths,
finding_merged,
master_inheritable_rangelist,
- path_or_url_mergeinfo_cat,
- svn_dirent_join("/",
- path_or_url_repos_rel,
- scratch_pool),
+ oldest_revs_first,
+ target_mergeinfo_cat,
+ svn_fspath__join("/",
+ target_repos_relpath,
+ scratch_pool),
discover_changed_paths,
revprops,
log_receiver, log_receiver_baton,
- ctx, scratch_pool));
- return SVN_NO_ERROR;
+ ctx, target_session, scratch_pool);
+
+ /* Close the source and target sessions. */
+ svn_pool_destroy(subpool); /* For SVN_ERR_CEASE_INVOCATION */
+
+ return svn_error_trace(err);
+ }
+}
+
+svn_error_t *
+svn_client_mergeinfo_log2(svn_boolean_t finding_merged,
+ const char *target_path_or_url,
+ const svn_opt_revision_t *target_peg_revision,
+ const char *source_path_or_url,
+ const svn_opt_revision_t *source_peg_revision,
+ const svn_opt_revision_t *source_start_revision,
+ const svn_opt_revision_t *source_end_revision,
+ svn_log_entry_receiver_t log_receiver,
+ void *log_receiver_baton,
+ svn_boolean_t discover_changed_paths,
+ svn_depth_t depth,
+ const apr_array_header_t *revprops,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
+{
+ return svn_error_trace(
+ svn_client__mergeinfo_log(finding_merged, target_path_or_url,
+ target_peg_revision, NULL,
+ source_path_or_url, source_peg_revision,
+ source_start_revision, source_end_revision,
+ log_receiver, log_receiver_baton,
+ discover_changed_paths, depth, revprops,
+ ctx, NULL,
+ scratch_pool, scratch_pool));
}
svn_error_t *
@@ -2218,7 +2251,7 @@ svn_client_suggest_merge_sources(apr_array_header_t **suggestions,
/* ### TODO: Share ra_session batons to improve efficiency? */
SVN_ERR(get_mergeinfo(&mergeinfo_cat, &repos_root, path_or_url,
- peg_revision, FALSE, FALSE, ctx, pool, pool));
+ peg_revision, FALSE, FALSE, ctx, NULL, pool, pool));
if (mergeinfo_cat && apr_hash_count(mergeinfo_cat))
{
@@ -2232,9 +2265,9 @@ svn_client_suggest_merge_sources(apr_array_header_t **suggestions,
mergeinfo = NULL;
}
- SVN_ERR(svn_client__get_copy_source(path_or_url, peg_revision,
- &copyfrom_path, &copyfrom_rev,
- ctx, pool));
+ SVN_ERR(svn_client__get_copy_source(&copyfrom_path, &copyfrom_rev,
+ path_or_url, peg_revision, ctx,
+ pool, pool));
if (copyfrom_path)
{
APR_ARRAY_PUSH(list, const char *) =
diff --git a/subversion/libsvn_client/mergeinfo.h b/subversion/libsvn_client/mergeinfo.h
index bd5ae0e..0c4cf05 100644
--- a/subversion/libsvn_client/mergeinfo.h
+++ b/subversion/libsvn_client/mergeinfo.h
@@ -26,6 +26,7 @@
#include "svn_wc.h"
#include "svn_client.h"
+#include "private/svn_client_private.h"
/*** Data Structures ***/
@@ -40,7 +41,9 @@ typedef struct svn_client__merge_path_t
{
const char *abspath; /* Absolute working copy path. */
svn_boolean_t missing_child; /* ABSPATH has an immediate child which
- is missing. */
+ is missing, but is not switched. */
+ svn_boolean_t switched_child; /* ABSPATH has an immediate child which
+ is switched. */
svn_boolean_t switched; /* ABSPATH is switched. */
svn_boolean_t has_noninheritable; /* ABSPATH has svn:mergeinfo set on it
which includes non-inheritable
@@ -49,7 +52,7 @@ typedef struct svn_client__merge_path_t
probably due to authz
restrictions. */
- svn_boolean_t child_of_noninheritable; /* ABSPATH has no explict mergeinfo
+ svn_boolean_t child_of_noninheritable; /* ABSPATH has no explicit mergeinfo
itself but is the child of a
path with noniheritable
mergeinfo. */
@@ -62,7 +65,7 @@ typedef struct svn_client__merge_path_t
with the youngest start revisions come first. In both the forward and
reverse merge cases the ranges should never overlap. This rangelist
may be empty but should never be NULL unless ABSENT is true. */
- apr_array_header_t *remaining_ranges;
+ svn_rangelist_t *remaining_ranges;
svn_mergeinfo_t pre_merge_mergeinfo; /* Explicit or inherited mergeinfo
on ABSPATH prior to a merge.
@@ -79,6 +82,13 @@ typedef struct svn_client__merge_path_t
to the merge, and the operational
depth of the merge is
svn_depth_immediates. */
+ svn_boolean_t record_mergeinfo; /* Mergeinfo needs to be recorded
+ on ABSPATH to describe the
+ merge. */
+ svn_boolean_t record_noninheritable; /* Non-inheritable mergeinfo needs to
+ be recorded on ABSPATH to describe
+ the merge. Implies RECORD_MERGEINFO
+ is true. */
} svn_client__merge_path_t;
/* Return a deep copy of the merge-path structure OLD, allocated in POOL. */
@@ -86,13 +96,21 @@ svn_client__merge_path_t *
svn_client__merge_path_dup(const svn_client__merge_path_t *old,
apr_pool_t *pool);
+/* Create a new merge path structure, allocated in POOL. Initialize the
+ * 'abspath' member to a deep copy of ABSPATH and all other fields to zero
+ * bytes. */
+svn_client__merge_path_t *
+svn_client__merge_path_create(const char *abspath,
+ apr_pool_t *pool);
+
/*** Functions ***/
/* Find explicit or inherited WC mergeinfo for LOCAL_ABSPATH, and return it
in *MERGEINFO (NULL if no mergeinfo is set). Set *INHERITED to
- whether the mergeinfo was inherited (TRUE or FALSE).
+ whether the mergeinfo was inherited (TRUE or FALSE), if INHERITED is
+ non-null.
This function will search for inherited mergeinfo in the parents of
LOCAL_ABSPATH only if the base revision of LOCAL_ABSPATH falls within
@@ -153,50 +171,54 @@ svn_client__get_wc_mergeinfo_catalog(svn_mergeinfo_catalog_t *mergeinfo_cat,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
-/* Obtain any mergeinfo for repository filesystem path REL_PATH
- (relative to RA_SESSION's session URL) from the repository, and set
+/* Obtain any mergeinfo for URL from the repository, and set
it in *TARGET_MERGEINFO.
INHERIT indicates whether explicit, explicit or inherited, or only
- inherited mergeinfo for REL_PATH is obtained.
+ inherited mergeinfo for URL is obtained.
- If REL_PATH does not exist at REV, SVN_ERR_FS_NOT_FOUND or
+ If URL does not exist at REV, SVN_ERR_FS_NOT_FOUND or
SVN_ERR_RA_DAV_REQUEST_FAILED is returned and *TARGET_MERGEINFO
is untouched.
- If there is no mergeinfo available for REL_PATH, or if the server
+ If there is no mergeinfo available for URL, or if the server
doesn't support a mergeinfo capability and SQUELCH_INCAPABLE is
- TRUE, set *TARGET_MERGEINFO to NULL. */
+ TRUE, set *TARGET_MERGEINFO to NULL. If the server doesn't support
+ a mergeinfo capability and SQUELCH_INCAPABLE is FALSE, return an
+ SVN_ERR_UNSUPPORTED_FEATURE error.
+
+ RA_SESSION is an open RA session to the repository in which URL lives;
+ it may be temporarily reparented by this function.
+*/
svn_error_t *
-svn_client__get_repos_mergeinfo(svn_ra_session_t *ra_session,
- svn_mergeinfo_t *target_mergeinfo,
- const char *rel_path,
+svn_client__get_repos_mergeinfo(svn_mergeinfo_t *target_mergeinfo,
+ svn_ra_session_t *ra_session,
+ const char *url,
svn_revnum_t rev,
svn_mergeinfo_inheritance_t inherit,
svn_boolean_t squelch_incapable,
apr_pool_t *pool);
/* If INCLUDE_DESCENDANTS is FALSE, behave exactly like
- svn_client__get_repos_mergeinfo() except the mergeinfo for REL_PATH
+ svn_client__get_repos_mergeinfo() except the mergeinfo for URL
is put in the mergeinfo catalog MERGEINFO_CAT, with the key being
- the repository root-relative path of REL_PATH.
+ the repository root-relative path of URL.
- If INCLUDE_DESCENDANTS is true, then any subtrees under REL_PATH
+ If INCLUDE_DESCENDANTS is true, then any subtrees under URL
with explicit mergeinfo are also included in MERGEINFO_CAT. The
keys for the subtree mergeinfo are the repository root-relative
paths of the subtrees. If no mergeinfo is found, then
*TARGET_MERGEINFO_CAT is set to NULL. */
svn_error_t *
-svn_client__get_repos_mergeinfo_catalog(
- svn_mergeinfo_catalog_t *mergeinfo_cat,
- svn_ra_session_t *ra_session,
- const char *rel_path,
- svn_revnum_t rev,
- svn_mergeinfo_inheritance_t inherit,
- svn_boolean_t squelch_incapable,
- svn_boolean_t include_descendants,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
+svn_client__get_repos_mergeinfo_catalog(svn_mergeinfo_catalog_t *mergeinfo_cat,
+ svn_ra_session_t *ra_session,
+ const char *url,
+ svn_revnum_t rev,
+ svn_mergeinfo_inheritance_t inherit,
+ svn_boolean_t squelch_incapable,
+ svn_boolean_t include_descendants,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
/* Retrieve the direct mergeinfo for the TARGET_WCPATH from the WC's
mergeinfo prop, or that inherited from its nearest ancestor if the
@@ -225,7 +247,7 @@ svn_client__get_repos_mergeinfo_catalog(
If TARGET_WCPATH inherited its mergeinfo from a working copy ancestor
or if it was obtained from the repository, set *INHERITED to TRUE, set it
- to FALSE otherwise. */
+ to FALSE otherwise, if INHERITED is non-null. */
svn_error_t *
svn_client__get_wc_or_repos_mergeinfo(svn_mergeinfo_t *target_mergeinfo,
svn_boolean_t *inherited,
@@ -268,20 +290,24 @@ svn_client__get_wc_or_repos_mergeinfo_catalog(
apr_pool_t *scratch_pool);
/* Set *MERGEINFO_P to a mergeinfo constructed solely from the
- natural history of PATH_OR_URL@PEG_REVISION. RA_SESSION is an RA
- session whose session URL maps to PATH_OR_URL's URL, or NULL.
- If RANGE_YOUNGEST and RANGE_OLDEST are valid, use them to bound the
- revision ranges of returned mergeinfo. See svn_ra_get_location_segments()
- for the rules governing PEG_REVISION, START_REVISION, and END_REVISION.
+ natural history of PATHREV.
+
+ If RANGE_YOUNGEST and RANGE_OLDEST are valid, use them as inclusive
+ bounds on the revision ranges of returned mergeinfo. PATHREV->rev,
+ RANGE_YOUNGEST and RANGE_OLDEST are governed by the same rules as the
+ PEG_REVISION, START_REV, and END_REV parameters (respectively) of
+ svn_ra_get_location_segments().
If HAS_REV_ZERO_HISTORY is not NULL, then set *HAS_REV_ZERO_HISTORY to
- TRUE if the natural history of PATH_OR_URL@PEG_REVISION includes
- revision 0. Set *HAS_REV_ZERO_HISTORY to FALSE otherwise. */
+ TRUE if the natural history includes revision 0, else to FALSE.
+
+ RA_SESSION is an open RA session to the repository of PATHREV;
+ it may be temporarily reparented by this function.
+*/
svn_error_t *
svn_client__get_history_as_mergeinfo(svn_mergeinfo_t *mergeinfo_p,
svn_boolean_t *has_rev_zero_history,
- const char *path_or_url,
- const svn_opt_revision_t *peg_revision,
+ const svn_client__pathrev_t *pathrev,
svn_revnum_t range_youngest,
svn_revnum_t range_oldest,
svn_ra_session_t *ra_session,
@@ -289,7 +315,7 @@ svn_client__get_history_as_mergeinfo(svn_mergeinfo_t *mergeinfo_p,
apr_pool_t *pool);
/* Parse any explicit mergeinfo on LOCAL_ABSPATH and store it in
- MERGEINFO. If no record of any mergeinfo exists, set MERGEINFO to NULL.
+ *MERGEINFO. If no record of any mergeinfo exists, set *MERGEINFO to NULL.
Does not acount for inherited mergeinfo. */
svn_error_t *
svn_client__parse_mergeinfo(svn_mergeinfo_t *mergeinfo,
@@ -301,7 +327,7 @@ svn_client__parse_mergeinfo(svn_mergeinfo_t *mergeinfo,
/* Write MERGEINFO into the WC for LOCAL_ABSPATH. If MERGEINFO is NULL,
remove any SVN_PROP_MERGEINFO for LOCAL_ABSPATH. If MERGEINFO is empty,
record an empty property value (e.g. ""). If CTX->NOTIFY_FUNC2 is
- not null call it with notification type svn_wc_notify_update_update
+ not null call it with notification type svn_wc_notify_merge_record_info
if DO_NOTIFICATION is true.
Use WC_CTX to access the working copy, and SCRATCH_POOL for any temporary
@@ -313,60 +339,69 @@ svn_client__record_wc_mergeinfo(const char *local_abspath,
svn_client_ctx_t *ctx,
apr_pool_t *scratch_pool);
-/* Elide any svn:mergeinfo set on TARGET_WCPATH to its nearest working
+/* Write mergeinfo into the WC.
+ *
+ * For each path in RESULT_CATALOG, set the SVN_PROP_MERGEINFO
+ * property to represent the given mergeinfo, or remove the property
+ * if the given mergeinfo is null, and notify the change. Leave
+ * other paths unchanged. RESULT_CATALOG maps (const char *) WC paths
+ * to (svn_mergeinfo_t) mergeinfo. */
+svn_error_t *
+svn_client__record_wc_mergeinfo_catalog(apr_hash_t *result_catalog,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool);
+
+/* Elide any svn:mergeinfo set on TARGET_ABSPATH to its nearest working
copy (or possibly repository) ancestor with equivalent mergeinfo.
- If WC_ELISION_LIMIT_PATH is NULL check up to the root of the
+ If WC_ELISION_LIMIT_ABSPATH is NULL check up to the root of the
working copy or the nearest switched parent for an elision
destination, if none is found check the repository, otherwise check
- as far as WC_ELISION_LIMIT_PATH within the working copy.
- TARGET_WCPATH and WC_ELISION_LIMIT_PATH, if it exists, must both be
+ as far as WC_ELISION_LIMIT_ABSPATH within the working copy.
+ TARGET_WCPATH and WC_ELISION_LIMIT_ABSPATH, if it exists, must both be
absolute or relative to the working directory.
Elision occurs if:
- A) TARGET_WCPATH has empty mergeinfo and no parent path with
+ A) TARGET_ABSPATH has empty mergeinfo and no parent path with
explicit mergeinfo can be found in either the WC or the
repository (WC_ELISION_LIMIT_PATH must be NULL for this to
occur).
- B) TARGET_WCPATH has empty mergeinfo and its nearest parent also
+ B) TARGET_ABSPATH has empty mergeinfo and its nearest parent also
has empty mergeinfo.
- C) TARGET_WCPATH has the same mergeinfo as its nearest parent
+ C) TARGET_ABSPATH has the same mergeinfo as its nearest parent
when that parent's mergeinfo is adjusted for the path
difference between the two, e.g.:
- TARGET_WCPATH = A_COPY/D/H
- TARGET_WCPATH's mergeinfo = '/A/D/H:3'
- TARGET_WCPATH nearest parent = A_COPY
- Parent's mergeinfo = '/A:3'
- Path differece = 'D/H'
- Parent's adjusted mergeinfo = '/A/D/H:3'
+ TARGET_ABSPATH = A_COPY/D/H
+ TARGET_ABSPATH's mergeinfo = '/A/D/H:3'
+ TARGET_ABSPATH nearest parent = A_COPY
+ Parent's mergeinfo = '/A:3'
+ Path difference = 'D/H'
+ Parent's adjusted mergeinfo = '/A/D/H:3'
If Elision occurs remove the svn:mergeinfo property from
- TARGET_WCPATH. */
+ TARGET_ABSPATH. */
svn_error_t *
-svn_client__elide_mergeinfo(const char *target_wcpath,
- const char *wc_elision_limit_path,
+svn_client__elide_mergeinfo(const char *target_abspath,
+ const char *wc_elision_limit_abspath,
svn_client_ctx_t *ctx,
apr_pool_t *pool);
-/* TODO(reint): Document. */
-svn_error_t *
-svn_client__elide_mergeinfo_catalog(svn_mergeinfo_t mergeinfo_catalog,
- apr_pool_t *pool);
-
-/* For each source path : rangelist pair in MERGEINFO, append REL_PATH to
- the source path and add the new source path : rangelist pair to
- ADJUSTED_MERGEINFO. The new source path and rangelist are both deep
- copies allocated in POOL. Neither ADJUSTED_MERGEINFO
- nor MERGEINFO should be NULL. */
+/* Simplify a mergeinfo catalog, if possible, via elision.
+
+ For each path in MERGEINFO_CATALOG, check if the path's mergeinfo can
+ elide to the path's nearest path-wise parent in MERGEINFO_CATALOG. If
+ so, remove that path from MERGEINFO_CATALOG. Elidability is determined
+ as per svn_client__elide_mergeinfo except that elision to the repository
+ is not considered.
+
+ SCRATCH_POOL is used for temporary allocations. */
svn_error_t *
-svn_client__adjust_mergeinfo_source_paths(svn_mergeinfo_t adjusted_mergeinfo,
- const char *rel_path,
- svn_mergeinfo_t mergeinfo,
- apr_pool_t *pool);
+svn_client__elide_mergeinfo_catalog(svn_mergeinfo_catalog_t mergeinfo_catalog,
+ apr_pool_t *scratch_pool);
/* Set *MERGEINFO_CHANGES to TRUE if LOCAL_ABSPATH has locally modified
mergeinfo, set *MERGEINFO_CHANGES to FALSE otherwise. */
diff --git a/subversion/libsvn_client/patch.c b/subversion/libsvn_client/patch.c
index 24a4c5f..b7fbf06 100644
--- a/subversion/libsvn_client/patch.c
+++ b/subversion/libsvn_client/patch.c
@@ -47,6 +47,7 @@
#include "private/svn_wc_private.h"
#include "private/svn_dep_compat.h"
#include "private/svn_string_private.h"
+#include "private/svn_subr_private.h"
typedef struct hunk_info_t {
/* The hunk. */
@@ -174,6 +175,9 @@ typedef struct patch_target_t {
* CONTENT->existed). */
apr_file_t *file;
+ /* The target file is a symlink */
+ svn_boolean_t is_symlink;
+
/* The patched file.
* This is equivalent to the target, except that in appropriate
* places it contains the modified text as it appears in the patch file.
@@ -309,8 +313,7 @@ obtain_eol_and_keywords_for_file(apr_hash_t **keywords,
SVN_ERR(svn_wc_prop_list2(&props, wc_ctx, local_abspath,
scratch_pool, scratch_pool));
- keywords_val = apr_hash_get(props, SVN_PROP_KEYWORDS,
- APR_HASH_KEY_STRING);
+ keywords_val = svn_hash_gets(props, SVN_PROP_KEYWORDS);
if (keywords_val)
{
svn_revnum_t changed_rev;
@@ -318,6 +321,7 @@ obtain_eol_and_keywords_for_file(apr_hash_t **keywords,
const char *rev_str;
const char *author;
const char *url;
+ const char *root_url;
SVN_ERR(svn_wc__node_get_changed_info(&changed_rev,
&changed_date,
@@ -329,14 +333,16 @@ obtain_eol_and_keywords_for_file(apr_hash_t **keywords,
SVN_ERR(svn_wc__node_get_url(&url, wc_ctx,
local_abspath,
scratch_pool, scratch_pool));
- SVN_ERR(svn_subst_build_keywords2(keywords,
+ SVN_ERR(svn_wc__node_get_repos_info(NULL, NULL, &root_url, NULL,
+ wc_ctx, local_abspath,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_subst_build_keywords3(keywords,
keywords_val->data,
- rev_str, url, changed_date,
+ rev_str, url, root_url, changed_date,
author, result_pool));
}
- eol_style_val = apr_hash_get(props, SVN_PROP_EOL_STYLE,
- APR_HASH_KEY_STRING);
+ eol_style_val = svn_hash_gets(props, SVN_PROP_EOL_STYLE);
if (eol_style_val)
{
svn_subst_eol_style_from_value(eol_style,
@@ -365,7 +371,7 @@ obtain_eol_and_keywords_for_file(apr_hash_t **keywords,
static svn_error_t *
resolve_target_path(patch_target_t *target,
const char *path_from_patchfile,
- const char *local_abspath,
+ const char *wcroot_abspath,
int strip_count,
svn_boolean_t prop_changes_only,
svn_wc_context_t *wc_ctx,
@@ -398,7 +404,8 @@ resolve_target_path(patch_target_t *target,
if (svn_dirent_is_absolute(stripped_path))
{
- target->local_relpath = svn_dirent_is_child(local_abspath, stripped_path,
+ target->local_relpath = svn_dirent_is_child(wcroot_abspath,
+ stripped_path,
result_pool);
if (! target->local_relpath)
@@ -419,7 +426,7 @@ resolve_target_path(patch_target_t *target,
/* Make sure the path is secure to use. We want the target to be inside
* of the working copy and not be fooled by symlinks it might contain. */
SVN_ERR(svn_dirent_is_under_root(&under_root,
- &target->local_abspath, local_abspath,
+ &target->local_abspath, wcroot_abspath,
target->local_relpath, result_pool));
if (! under_root)
@@ -435,54 +442,66 @@ resolve_target_path(patch_target_t *target,
result_pool, scratch_pool);
if (err)
{
- if (err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
- svn_error_clear(err);
- else
+ if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND)
return svn_error_trace(err);
+
+ svn_error_clear(err);
+
+ target->locally_deleted = TRUE;
+ target->db_kind = svn_node_none;
+ status = NULL;
}
else if (status->node_status == svn_wc_status_ignored ||
status->node_status == svn_wc_status_unversioned ||
status->node_status == svn_wc_status_missing ||
- status->node_status == svn_wc_status_obstructed)
+ status->node_status == svn_wc_status_obstructed ||
+ status->conflicted)
{
target->skipped = TRUE;
return SVN_NO_ERROR;
}
-
- SVN_ERR(svn_io_check_path(target->local_abspath,
- &target->kind_on_disk, scratch_pool));
- err = svn_wc__node_is_status_deleted(&target->locally_deleted,
- wc_ctx, target->local_abspath,
- scratch_pool);
- if (err)
+ else if (status->node_status == svn_wc_status_deleted)
{
- if (err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
- {
- svn_error_clear(err);
- target->locally_deleted = FALSE;
- }
- else
- return svn_error_trace(err);
+ target->locally_deleted = TRUE;
}
- SVN_ERR(svn_wc_read_kind(&target->db_kind, wc_ctx, target->local_abspath,
- FALSE, scratch_pool));
- /* If the target is a versioned directory present on disk,
- * and there are only property changes in the patch, we accept
- * a directory target. Else, we skip directories. */
- if (target->db_kind == svn_node_dir && ! prop_changes_only)
- {
- /* ### We cannot yet replace a locally deleted dir with a file,
- * ### but some day we might want to allow it. */
- target->skipped = TRUE;
- return SVN_NO_ERROR;
- }
+ if (status && (status->kind != svn_node_unknown))
+ target->db_kind = status->kind;
+ else
+ target->db_kind = svn_node_none;
+
+ SVN_ERR(svn_io_check_special_path(target->local_abspath,
+ &target->kind_on_disk, &target->is_symlink,
+ scratch_pool));
- /* ### Shouldn't libsvn_wc flag an obstruction in this case? */
- if (target->locally_deleted && target->kind_on_disk != svn_node_none)
+ if (target->locally_deleted)
{
- target->skipped = TRUE;
- return SVN_NO_ERROR;
+ const char *moved_to_abspath;
+
+ SVN_ERR(svn_wc__node_was_moved_away(&moved_to_abspath, NULL,
+ wc_ctx, target->local_abspath,
+ result_pool, scratch_pool));
+ if (moved_to_abspath)
+ {
+ target->local_abspath = moved_to_abspath;
+ target->local_relpath = svn_dirent_skip_ancestor(wcroot_abspath,
+ moved_to_abspath);
+ SVN_ERR_ASSERT(target->local_relpath &&
+ target->local_relpath[0] != '\0');
+
+ /* As far as we are concerned this target is not locally deleted. */
+ target->locally_deleted = FALSE;
+
+ SVN_ERR(svn_io_check_special_path(target->local_abspath,
+ &target->kind_on_disk,
+ &target->is_symlink,
+ scratch_pool));
+ }
+ else if (target->kind_on_disk != svn_node_none)
+ {
+ target->skipped = TRUE;
+ return SVN_NO_ERROR;
+ }
}
return SVN_NO_ERROR;
@@ -500,6 +519,8 @@ typedef struct prop_read_baton_t {
* the property value runs out in which case *EOF is set to TRUE.
* The line-terminator is not stored in *STRINGBUF.
*
+ * If the line is empty or could not be read, *line is set to NULL.
+ *
* The line-terminator is detected automatically and stored in *EOL
* if EOL is not NULL. If the end of the property value is reached
* and does not end with a newline character, and EOL is not NULL,
@@ -513,17 +534,15 @@ readline_prop(void *baton, svn_stringbuf_t **line, const char **eol_str,
apr_pool_t *scratch_pool)
{
prop_read_baton_t *b = (prop_read_baton_t *)baton;
- svn_stringbuf_t *str;
+ svn_stringbuf_t *str = NULL;
const char *c;
svn_boolean_t found_eof;
- str = svn_stringbuf_create_ensure(80, result_pool);
-
- if (b->offset >= b->value->len)
+ if ((apr_uint64_t)b->offset >= (apr_uint64_t)b->value->len)
{
*eol_str = NULL;
*eof = TRUE;
- *line = str;
+ *line = NULL;
return SVN_NO_ERROR;
}
@@ -555,7 +574,11 @@ readline_prop(void *baton, svn_stringbuf_t **line, const char **eol_str,
}
}
else
- svn_stringbuf_appendbyte(str, *c);
+ {
+ if (str == NULL)
+ str = svn_stringbuf_create_ensure(80, result_pool);
+ svn_stringbuf_appendbyte(str, *c);
+ }
if (*eol_str)
break;
@@ -629,7 +652,7 @@ init_prop_target(prop_patch_target_t **prop_target,
content->hunks = apr_array_make(result_pool, 0, sizeof(hunk_info_t *));
content->keywords = apr_hash_make(result_pool);
- new_prop_target = apr_palloc(result_pool, sizeof(*new_prop_target));
+ new_prop_target = apr_pcalloc(result_pool, sizeof(*new_prop_target));
new_prop_target->name = apr_pstrdup(result_pool, prop_name);
new_prop_target->operation = operation;
new_prop_target->content = content;
@@ -648,11 +671,11 @@ init_prop_target(prop_patch_target_t **prop_target,
}
content->existed = (value != NULL);
new_prop_target->value = value;
- new_prop_target->patched_value = svn_stringbuf_create("", result_pool);
+ new_prop_target->patched_value = svn_stringbuf_create_empty(result_pool);
/* Wire up the read and write callbacks. */
- prop_read_baton = apr_palloc(result_pool, sizeof(*prop_read_baton));
+ prop_read_baton = apr_pcalloc(result_pool, sizeof(*prop_read_baton));
prop_read_baton->value = value;
prop_read_baton->offset = 0;
content->readline = readline_prop;
@@ -673,6 +696,8 @@ init_prop_target(prop_patch_target_t **prop_target,
* or if EOF is reached in which case *EOF is set to TRUE.
* The line-terminator is not stored in *STRINGBUF.
*
+ * If the line is empty or could not be read, *line is set to NULL.
+ *
* The line-terminator is detected automatically and stored in *EOL
* if EOL is not NULL. If EOF is reached and FILE does not end
* with a newline character, and EOL is not NULL, *EOL is set to NULL.
@@ -685,13 +710,11 @@ readline_file(void *baton, svn_stringbuf_t **line, const char **eol_str,
apr_pool_t *scratch_pool)
{
apr_file_t *file = (apr_file_t *)baton;
- svn_stringbuf_t *str;
+ svn_stringbuf_t *str = NULL;
apr_size_t numbytes;
char c;
svn_boolean_t found_eof;
- str = svn_stringbuf_create_ensure(80, result_pool);
-
/* Read bytes into STR up to and including, but not storing,
* the next EOL sequence. */
*eol_str = NULL;
@@ -738,7 +761,11 @@ readline_file(void *baton, svn_stringbuf_t **line, const char **eol_str,
}
}
else
- svn_stringbuf_appendbyte(str, c);
+ {
+ if (str == NULL)
+ str = svn_stringbuf_create_ensure(80, result_pool);
+ svn_stringbuf_appendbyte(str, c);
+ }
if (*eol_str)
break;
@@ -784,6 +811,118 @@ write_file(void *baton, const char *buf, apr_size_t len,
return SVN_NO_ERROR;
}
+/* Handling symbolic links:
+ *
+ * In Subversion, symlinks can be represented on disk in two distinct ways.
+ * On systems which support symlinks, a symlink is created on disk.
+ * On systems which do not support symlink, a file is created on disk
+ * which contains the "normal form" of the symlink, which looks like:
+ * link TARGET
+ * where TARGET is the file the symlink points to.
+ *
+ * When reading symlinks (i.e. the link itself, not the file the symlink
+ * is pointing to) through the svn_subst_create_specialfile() function
+ * into a buffer, the buffer always contains the "normal form" of the symlink.
+ * Due to this representation symlinks always contain a single line of text.
+ *
+ * The functions below are needed to deal with the case where a patch
+ * wants to change the TARGET that a symlink points to.
+ */
+
+/* Baton for the (readline|tell|seek|write)_symlink functions. */
+struct symlink_baton_t
+{
+ /* The path to the symlink on disk (not the path to the target of the link) */
+ const char *local_abspath;
+
+ /* Indicates whether the "normal form" of the symlink has been read. */
+ svn_boolean_t at_eof;
+};
+
+/* Allocate *STRINGBUF in RESULT_POOL, and store into it the "normal form"
+ * of the symlink accessed via BATON.
+ *
+ * Otherwise behaves like readline_file(), which see.
+ */
+static svn_error_t *
+readline_symlink(void *baton, svn_stringbuf_t **line, const char **eol_str,
+ svn_boolean_t *eof, apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct symlink_baton_t *sb = baton;
+
+ if (eof)
+ *eof = TRUE;
+ if (eol_str)
+ *eol_str = NULL;
+
+ if (sb->at_eof)
+ {
+ *line = NULL;
+ }
+ else
+ {
+ svn_string_t *dest;
+
+ SVN_ERR(svn_io_read_link(&dest, sb->local_abspath, scratch_pool));
+ *line = svn_stringbuf_createf(result_pool, "link %s", dest->data);
+ sb->at_eof = TRUE;
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Set *OFFSET to 1 or 0 depending on whether the "normal form" of
+ * the symlink has already been read. */
+static svn_error_t *
+tell_symlink(void *baton, apr_off_t *offset, apr_pool_t *scratch_pool)
+{
+ struct symlink_baton_t *sb = baton;
+
+ *offset = sb->at_eof ? 1 : 0;
+ return SVN_NO_ERROR;
+}
+
+/* If offset is non-zero, mark the symlink as having been read in its
+ * "normal form". Else, mark the symlink as not having been read yet. */
+static svn_error_t *
+seek_symlink(void *baton, apr_off_t offset, apr_pool_t *scratch_pool)
+{
+ struct symlink_baton_t *sb = baton;
+
+ sb->at_eof = (offset != 0);
+ return SVN_NO_ERROR;
+}
+
+
+/* Set the target of the symlink accessed via BATON.
+ * The contents of BUF must be a valid "normal form" of a symlink. */
+static svn_error_t *
+write_symlink(void *baton, const char *buf, apr_size_t len,
+ apr_pool_t *scratch_pool)
+{
+ const char *target_abspath = baton;
+ const char *new_name;
+ const char *link = apr_pstrndup(scratch_pool, buf, len);
+
+ if (strncmp(link, "link ", 5) != 0)
+ return svn_error_create(SVN_ERR_IO_WRITE_ERROR, NULL,
+ _("Invalid link representation"));
+
+ link += 5; /* Skip "link " */
+
+ /* We assume the entire symlink is written at once, as the patch
+ format is line based */
+
+ SVN_ERR(svn_io_create_unique_link(&new_name, target_abspath, link,
+ ".tmp", scratch_pool));
+
+ SVN_ERR(svn_io_file_rename(new_name, target_abspath, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+
/* Return a suitable filename for the target of PATCH.
* Examine the ``old'' and ``new'' file names, and choose the file name
* with the fewest path components, the shortest basename, and the shortest
@@ -835,7 +974,7 @@ choose_target_filename(const svn_patch_t *patch)
static svn_error_t *
init_patch_target(patch_target_t **patch_target,
const svn_patch_t *patch,
- const char *base_dir,
+ const char *wcroot_abspath,
svn_wc_context_t *wc_ctx, int strip_count,
svn_boolean_t remove_tempfiles,
apr_pool_t *result_pool, apr_pool_t *scratch_pool)
@@ -880,7 +1019,7 @@ init_patch_target(patch_target_t **patch_target,
target->prop_targets = apr_hash_make(result_pool);
SVN_ERR(resolve_target_path(target, choose_target_filename(patch),
- base_dir, strip_count, prop_changes_only,
+ wcroot_abspath, strip_count, prop_changes_only,
wc_ctx, result_pool, scratch_pool));
if (! target->skipped)
{
@@ -889,10 +1028,24 @@ init_patch_target(patch_target_t **patch_target,
/* Create a temporary file to write the patched result to.
* Also grab various bits of information about the file. */
- if (target->kind_on_disk == svn_node_file)
+ if (target->is_symlink)
+ {
+ struct symlink_baton_t *sb = apr_pcalloc(result_pool, sizeof(*sb));
+ content->existed = TRUE;
+
+ sb->local_abspath = target->local_abspath;
+
+ /* Wire up the read callbacks. */
+ content->read_baton = sb;
+
+ content->readline = readline_symlink;
+ content->seek = seek_symlink;
+ content->tell = tell_symlink;
+ }
+ else if (target->kind_on_disk == svn_node_file)
{
SVN_ERR(svn_io_file_open(&target->file, target->local_abspath,
- APR_READ | APR_BINARY | APR_BUFFERED,
+ APR_READ | APR_BUFFERED,
APR_OS_DEFAULT, result_pool));
SVN_ERR(svn_wc_text_modified_p2(&target->local_mods, wc_ctx,
target->local_abspath, FALSE,
@@ -927,17 +1080,34 @@ init_patch_target(patch_target_t **patch_target,
else if (patch->operation == svn_diff_op_deleted)
target->deleted = TRUE;
- /* Open a temporary file to write the patched result to. */
- SVN_ERR(svn_io_open_unique_file3(&target->patched_file,
- &target->patched_path, NULL,
- remove_tempfiles ?
- svn_io_file_del_on_pool_cleanup :
- svn_io_file_del_none,
- result_pool, scratch_pool));
+ if (! target->is_symlink)
+ {
+ /* Open a temporary file to write the patched result to. */
+ SVN_ERR(svn_io_open_unique_file3(&target->patched_file,
+ &target->patched_path, NULL,
+ remove_tempfiles ?
+ svn_io_file_del_on_pool_cleanup :
+ svn_io_file_del_none,
+ result_pool, scratch_pool));
+
+ /* Put the write callback in place. */
+ content->write = write_file;
+ content->write_baton = target->patched_file;
+ }
+ else
+ {
+ /* Put the write callback in place. */
+ SVN_ERR(svn_io_open_unique_file3(NULL,
+ &target->patched_path, NULL,
+ remove_tempfiles ?
+ svn_io_file_del_on_pool_cleanup :
+ svn_io_file_del_none,
+ result_pool, scratch_pool));
- /* Put the write callback in place. */
- content->write = write_file;
- content->write_baton = target->patched_file;
+ content->write_baton = (void*)target->patched_path;
+
+ content->write = write_symlink;
+ }
/* Open a temporary file to write rejected hunks to. */
SVN_ERR(svn_io_open_unique_file3(&target->reject_file,
@@ -975,8 +1145,7 @@ init_patch_target(patch_target_t **patch_target,
prop_patch->operation,
wc_ctx, target->local_abspath,
result_pool, scratch_pool));
- apr_hash_set(target->prop_targets, prop_name,
- APR_HASH_KEY_STRING, prop_target);
+ svn_hash_sets(target->prop_targets, prop_name, prop_target);
}
}
}
@@ -986,7 +1155,9 @@ init_patch_target(patch_target_t **patch_target,
}
/* Read a *LINE from CONTENT. If the line has not been read before
- * mark the line in CONTENT->LINES. Allocate *LINE in RESULT_POOL.
+ * mark the line in CONTENT->LINES.
+ * If a line could be read successfully, increase CONTENT->CURRENT_LINE,
+ * and allocate *LINE in RESULT_POOL.
* Do temporary allocations in SCRATCH_POOL.
*/
static svn_error_t *
@@ -997,6 +1168,7 @@ readline(target_content_t *content,
{
svn_stringbuf_t *line_raw;
const char *eol_str;
+ svn_linenum_t max_line = (svn_linenum_t)content->lines->nelts + 1;
if (content->eof || content->readline == NULL)
{
@@ -1004,8 +1176,8 @@ readline(target_content_t *content,
return SVN_NO_ERROR;
}
- SVN_ERR_ASSERT(content->current_line <= content->lines->nelts + 1);
- if (content->current_line == content->lines->nelts + 1)
+ SVN_ERR_ASSERT(content->current_line <= max_line);
+ if (content->current_line == max_line)
{
apr_off_t offset;
@@ -1020,14 +1192,22 @@ readline(target_content_t *content,
if (content->eol_style == svn_subst_eol_style_none)
content->eol_str = eol_str;
- /* Contract keywords. */
- SVN_ERR(svn_subst_translate_cstring2(line_raw->data, line,
- NULL, FALSE,
- content->keywords, FALSE,
- result_pool));
- if (! content->eof)
+ if (line_raw)
+ {
+ /* Contract keywords. */
+ SVN_ERR(svn_subst_translate_cstring2(line_raw->data, line,
+ NULL, FALSE,
+ content->keywords, FALSE,
+ result_pool));
+ }
+ else
+ *line = "";
+
+ if ((line_raw && line_raw->len > 0) || eol_str)
content->current_line++;
+ SVN_ERR_ASSERT(content->current_line > 0);
+
return SVN_NO_ERROR;
}
@@ -1050,7 +1230,7 @@ seek_to_line(target_content_t *content, svn_linenum_t line,
saved_line = content->current_line;
saved_eof = content->eof;
- if (line <= content->lines->nelts)
+ if (line <= (svn_linenum_t)content->lines->nelts)
{
apr_off_t offset;
@@ -1359,26 +1539,45 @@ get_hunk_info(hunk_info_t **hi, patch_target_t *target,
* the hunk applies at line 1. If the file already exists, the hunk
* is rejected, unless the file is versioned and its content matches
* the file the patch wants to create. */
- if (original_start == 0 && ! is_prop_hunk)
+ if (original_start == 0 && fuzz > 0)
+ {
+ matched_line = 0; /* reject any fuzz for new files */
+ }
+ else if (original_start == 0 && ! is_prop_hunk)
{
if (target->kind_on_disk == svn_node_file)
{
- if (target->db_kind == svn_node_file)
+ const svn_io_dirent2_t *dirent;
+ SVN_ERR(svn_io_stat_dirent2(&dirent, target->local_abspath, FALSE,
+ TRUE, scratch_pool, scratch_pool));
+
+ if (dirent->kind == svn_node_file
+ && !dirent->special
+ && dirent->filesize == 0)
{
- svn_boolean_t file_matches;
+ matched_line = 1; /* Matched an on-disk empty file */
+ }
+ else
+ {
+ if (target->db_kind == svn_node_file)
+ {
+ svn_boolean_t file_matches;
- SVN_ERR(match_existing_target(&file_matches, content, hunk,
+ /* ### I can't reproduce anything but a no-match here.
+ The content is already at eof, so any hunk fails */
+ SVN_ERR(match_existing_target(&file_matches, content, hunk,
scratch_pool));
- if (file_matches)
- {
- matched_line = 1;
- already_applied = TRUE;
+ if (file_matches)
+ {
+ matched_line = 1;
+ already_applied = TRUE;
+ }
+ else
+ matched_line = 0; /* reject */
}
else
matched_line = 0; /* reject */
}
- else
- matched_line = 0; /* reject */
}
else
matched_line = 1;
@@ -1494,7 +1693,7 @@ get_hunk_info(hunk_info_t **hi, patch_target_t *target,
matched_line = 0;
}
- (*hi) = apr_palloc(result_pool, sizeof(hunk_info_t));
+ (*hi) = apr_pcalloc(result_pool, sizeof(hunk_info_t));
(*hi)->hunk = hunk;
(*hi)->matched_line = matched_line;
(*hi)->rejected = (matched_line == 0);
@@ -1858,6 +2057,56 @@ send_patch_notification(const patch_target_t *target,
return SVN_NO_ERROR;
}
+static void
+svn_sort__array(apr_array_header_t *array,
+ int (*comparison_func)(const void *,
+ const void *))
+{
+ qsort(array->elts, array->nelts, array->elt_size, comparison_func);
+}
+
+/* Implements the callback for svn_sort__array. Puts hunks that match
+ before hunks that do not match, puts hunks that match in order
+ based on postion matched, puts hunks that do not match in order
+ based on original position. */
+static int
+sort_matched_hunks(const void *a, const void *b)
+{
+ const hunk_info_t *item1 = *((const hunk_info_t * const *)a);
+ const hunk_info_t *item2 = *((const hunk_info_t * const *)b);
+ svn_boolean_t matched1 = !item1->rejected && !item1->already_applied;
+ svn_boolean_t matched2 = !item2->rejected && !item2->already_applied;
+ svn_linenum_t original1, original2;
+
+ if (matched1 && matched2)
+ {
+ /* Both match so use order matched in file. */
+ if (item1->matched_line > item2->matched_line)
+ return 1;
+ else if (item1->matched_line == item2->matched_line)
+ return 0;
+ else
+ return -1;
+ }
+ else if (matched2)
+ /* Only second matches, put it before first. */
+ return 1;
+ else if (matched1)
+ /* Only first matches, put it before second. */
+ return -1;
+
+ /* Neither matches, sort by original_start. */
+ original1 = svn_diff_hunk_get_original_start(item1->hunk);
+ original2 = svn_diff_hunk_get_original_start(item2->hunk);
+ if (original1 > original2)
+ return 1;
+ else if (original1 == original2)
+ return 0;
+ else
+ return -1;
+}
+
+
/* Apply a PATCH to a working copy at ABS_WC_PATH and put the result
* into temporary files, to be installed in the working copy later.
* Return information about the patch target in *PATCH_TARGET, allocated
@@ -1939,6 +2188,10 @@ apply_one_patch(patch_target_t **patch_target, svn_patch_t *patch,
APR_ARRAY_PUSH(target->content->hunks, hunk_info_t *) = hi;
}
+ /* Hunks are applied in the order determined by the matched line and
+ this may be different from the order of the original lines. */
+ svn_sort__array(target->content->hunks, sort_matched_hunks);
+
/* Apply or reject hunks. */
for (i = 0; i < target->content->hunks->nelts; i++)
{
@@ -1990,8 +2243,7 @@ apply_one_patch(patch_target_t **patch_target, svn_patch_t *patch,
target->is_special = TRUE;
/* We'll store matched hunks in prop_content. */
- prop_target = apr_hash_get(target->prop_targets, prop_name,
- APR_HASH_KEY_STRING);
+ prop_target = svn_hash_gets(target->prop_targets, prop_name);
for (i = 0; i < prop_patch->hunks->nelts; i++)
{
@@ -2070,13 +2322,17 @@ apply_one_patch(patch_target_t **patch_target, svn_patch_t *patch,
svn_pool_destroy(iterpool);
- /* Now close files we don't need any longer to get their contents
- * flushed to disk.
- * But we're not closing the reject file -- it still needed and
- * will be closed later in write_out_rejected_hunks(). */
- if (target->kind_on_disk == svn_node_file)
- SVN_ERR(svn_io_file_close(target->file, scratch_pool));
- SVN_ERR(svn_io_file_close(target->patched_file, scratch_pool));
+ if (!target->is_symlink)
+ {
+ /* Now close files we don't need any longer to get their contents
+ * flushed to disk.
+ * But we're not closing the reject file -- it still needed and
+ * will be closed later in write_out_rejected_hunks(). */
+ if (target->kind_on_disk == svn_node_file)
+ SVN_ERR(svn_io_file_close(target->file, scratch_pool));
+
+ SVN_ERR(svn_io_file_close(target->patched_file, scratch_pool));
+ }
if (! target->skipped)
{
@@ -2087,10 +2343,10 @@ apply_one_patch(patch_target_t **patch_target, svn_patch_t *patch,
* We'll need those to figure out whether we should delete the
* patched file. */
SVN_ERR(svn_io_stat(&patched_file, target->patched_path,
- APR_FINFO_SIZE, scratch_pool));
+ APR_FINFO_SIZE | APR_FINFO_LINK, scratch_pool));
if (target->kind_on_disk == svn_node_file)
SVN_ERR(svn_io_stat(&working_file, target->local_abspath,
- APR_FINFO_SIZE, scratch_pool));
+ APR_FINFO_SIZE | APR_FINFO_LINK, scratch_pool));
else
working_file.size = 0;
@@ -2159,47 +2415,36 @@ create_missing_parents(patch_target_t *target,
{
const char *component;
svn_node_kind_t wc_kind, disk_kind;
- svn_boolean_t is_deleted;
svn_pool_clear(iterpool);
component = APR_ARRAY_IDX(components, i, const char *);
local_abspath = svn_dirent_join(local_abspath, component, scratch_pool);
- SVN_ERR(svn_wc_read_kind(&wc_kind, ctx->wc_ctx, local_abspath, TRUE,
- iterpool));
+ SVN_ERR(svn_wc_read_kind2(&wc_kind, ctx->wc_ctx, local_abspath,
+ FALSE, TRUE, iterpool));
SVN_ERR(svn_io_check_path(local_abspath, &disk_kind, iterpool));
- if (wc_kind != svn_node_none)
- SVN_ERR(svn_wc__node_is_status_deleted(&is_deleted,
- ctx->wc_ctx,
- local_abspath,
- iterpool));
- else
- is_deleted = FALSE;
-
- if (disk_kind == svn_node_file
- || (wc_kind == svn_node_file && !is_deleted))
+ if (disk_kind == svn_node_file || wc_kind == svn_node_file)
{
/* on-disk files and missing files are obstructions */
target->skipped = TRUE;
break;
}
- else if (wc_kind == svn_node_dir)
+ else if (disk_kind == svn_node_dir)
{
- if (is_deleted)
+ if (wc_kind == svn_node_dir)
+ present_components++;
+ else
{
target->skipped = TRUE;
break;
}
-
- /* continue one level deeper */
- present_components++;
}
- else if (disk_kind == svn_node_dir)
+ else if (wc_kind != svn_node_none)
{
- /* Obstructed. ### BH: why? We can just add a directory */
+ /* Node is missing */
target->skipped = TRUE;
break;
}
@@ -2210,7 +2455,6 @@ create_missing_parents(patch_target_t *target,
break;
}
}
-
if (! target->skipped)
{
local_abspath = abs_wc_path;
@@ -2264,9 +2508,10 @@ create_missing_parents(patch_target_t *target,
if (ctx->cancel_func)
SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
- SVN_ERR(svn_wc_add_from_disk(ctx->wc_ctx, local_abspath,
- ctx->notify_func2, ctx->notify_baton2,
- iterpool));
+ SVN_ERR(svn_wc_add_from_disk2(ctx->wc_ctx, local_abspath,
+ NULL /*props*/,
+ ctx->notify_func2, ctx->notify_baton2,
+ iterpool));
}
}
}
@@ -2301,37 +2546,53 @@ install_patched_target(patch_target_t *target, const char *abs_wc_path,
else
{
svn_node_kind_t parent_db_kind;
-
- if (target->added)
+ if (target->added || target->replaced)
{
+ const char *parent_abspath;
+
+ parent_abspath = svn_dirent_dirname(target->local_abspath,
+ pool);
/* If the target's parent directory does not yet exist
* we need to create it before we can copy the patched
* result in place. */
- SVN_ERR(svn_wc_read_kind(&parent_db_kind, ctx->wc_ctx,
- svn_dirent_dirname(target->local_abspath,
- pool),
- FALSE, pool));
-
- /* We don't allow targets to be added under dirs scheduled for
- * deletion. */
- if (parent_db_kind == svn_node_dir)
+ SVN_ERR(svn_wc_read_kind2(&parent_db_kind, ctx->wc_ctx,
+ parent_abspath, FALSE, FALSE, pool));
+
+ /* We can't add targets under nodes scheduled for delete, so add
+ a new directory if needed. */
+ if (parent_db_kind == svn_node_dir
+ || parent_db_kind == svn_node_file)
{
- const char *parent_abspath;
- svn_boolean_t is_deleted;
-
- parent_abspath = svn_dirent_dirname(target->local_abspath,
- pool);
- SVN_ERR(svn_wc__node_is_status_deleted(&is_deleted, ctx->wc_ctx,
- parent_abspath, pool));
- if (is_deleted)
+ if (parent_db_kind != svn_node_dir)
+ target->skipped = TRUE;
+ else
{
- target->skipped = TRUE;
- return SVN_NO_ERROR;
+ svn_node_kind_t disk_kind;
+
+ SVN_ERR(svn_io_check_path(parent_abspath, &disk_kind, pool));
+ if (disk_kind != svn_node_dir)
+ target->skipped = TRUE;
}
}
else
SVN_ERR(create_missing_parents(target, abs_wc_path, ctx,
dry_run, pool));
+
+ }
+ else
+ {
+ svn_node_kind_t wc_kind;
+
+ /* The target should exist */
+ SVN_ERR(svn_wc_read_kind2(&wc_kind, ctx->wc_ctx,
+ target->local_abspath,
+ FALSE, FALSE, pool));
+
+ if (target->kind_on_disk == svn_node_none
+ || wc_kind != target->kind_on_disk)
+ {
+ target->skipped = TRUE;
+ }
}
if (! dry_run && ! target->skipped)
@@ -2378,8 +2639,9 @@ install_patched_target(patch_target_t *target, const char *abs_wc_path,
* Suppress notification, we'll do that later (and also
* during dry-run). Don't allow cancellation because
* we'd rather notify about what we did before aborting. */
- SVN_ERR(svn_wc_add_from_disk(ctx->wc_ctx, target->local_abspath,
- NULL, NULL, pool));
+ SVN_ERR(svn_wc_add_from_disk2(ctx->wc_ctx, target->local_abspath,
+ NULL /*props*/,
+ NULL, NULL, pool));
}
/* Restore the target's executable bit if necessary. */
@@ -2470,10 +2732,11 @@ install_patched_prop_targets(patch_target_t *target,
{
SVN_ERR(svn_io_file_create(target->local_abspath, "",
scratch_pool));
- SVN_ERR(svn_wc_add_from_disk(ctx->wc_ctx, target->local_abspath,
- /* suppress notification */
- NULL, NULL,
- iterpool));
+ SVN_ERR(svn_wc_add_from_disk2(ctx->wc_ctx, target->local_abspath,
+ NULL /*props*/,
+ /* suppress notification */
+ NULL, NULL,
+ iterpool));
}
target->added = TRUE;
}
@@ -2547,318 +2810,164 @@ install_patched_prop_targets(patch_target_t *target,
return SVN_NO_ERROR;
}
-/* Baton for find_existing_children() */
-struct status_baton
+/* Baton for can_delete_callback */
+struct can_delete_baton_t
{
- apr_array_header_t *existing_targets;
- const char *parent_path;
- apr_pool_t *result_pool;
+ svn_boolean_t must_keep;
+ const apr_array_header_t *targets_info;
+ const char *local_abspath;
};
/* Implements svn_wc_status_func4_t. */
static svn_error_t *
-find_existing_children(void *baton,
- const char *abspath,
- const svn_wc_status3_t *status,
- apr_pool_t *pool)
+can_delete_callback(void *baton,
+ const char *abspath,
+ const svn_wc_status3_t *status,
+ apr_pool_t *pool)
{
- struct status_baton *btn = baton;
-
- if (status->node_status != svn_wc_status_none
- && status->node_status != svn_wc_status_deleted
- && strcmp(abspath, btn->parent_path))
- {
- APR_ARRAY_PUSH(btn->existing_targets,
- const char *) = apr_pstrdup(btn->result_pool,
- abspath);
- }
-
- return SVN_NO_ERROR;
-}
-
-/* Indicate in *EMPTY whether the directory at LOCAL_ABSPATH has any
- * versioned or unversioned children. Consider any DELETED_TARGETS,
- * as well as paths occuring as keys of DELETED_ABSPATHS_HASH (which may
- * be NULL) as already deleted. Use WC_CTX as the working copy context.
- * Do temporary allocations in SCRATCH_POOL. */
-static svn_error_t *
-check_dir_empty(svn_boolean_t *empty, const char *local_abspath,
- svn_wc_context_t *wc_ctx,
- apr_array_header_t *deleted_targets,
- apr_hash_t *deleted_abspath_hash,
- apr_pool_t *scratch_pool)
-{
- struct status_baton btn;
- svn_boolean_t is_wc_root;
+ struct can_delete_baton_t *cb = baton;
int i;
- /* Working copy root cannot be deleted, so never consider it empty. */
- SVN_ERR(svn_wc__strictly_is_wc_root(&is_wc_root, wc_ctx, local_abspath,
- scratch_pool));
- if (is_wc_root)
+ switch(status->node_status)
{
- *empty = FALSE;
- return SVN_NO_ERROR;
- }
+ case svn_wc_status_none:
+ case svn_wc_status_deleted:
+ return SVN_NO_ERROR;
- /* Find existing children of the directory. */
- btn.existing_targets = apr_array_make(scratch_pool, 0,
- sizeof(patch_target_t *));
- btn.parent_path = local_abspath;
- btn.result_pool = scratch_pool;
- SVN_ERR(svn_wc_walk_status(wc_ctx, local_abspath, svn_depth_immediates,
- TRUE, TRUE, FALSE, NULL, find_existing_children,
- &btn, NULL, NULL, scratch_pool));
- *empty = TRUE;
-
- /* Do we delete all children? */
- for (i = 0; i < btn.existing_targets->nelts; i++)
- {
- int j;
- const char *found;
- svn_boolean_t deleted;
+ default:
+ if (! strcmp(cb->local_abspath, abspath))
+ return SVN_NO_ERROR; /* Only interested in descendants */
- deleted = FALSE;
- found = APR_ARRAY_IDX(btn.existing_targets, i, const char *);
+ for (i = 0; i < cb->targets_info->nelts; i++)
+ {
+ const patch_target_info_t *target_info =
+ APR_ARRAY_IDX(cb->targets_info, i, const patch_target_info_t *);
- for (j = 0; j < deleted_targets->nelts; j++)
- {
- patch_target_info_t *target_info;
+ if (! strcmp(target_info->local_abspath, abspath))
+ {
+ if (target_info->deleted)
+ return SVN_NO_ERROR;
- target_info = APR_ARRAY_IDX(deleted_targets, j,
- patch_target_info_t *);
- if (! svn_path_compare_paths(found, target_info->local_abspath))
- {
- deleted = TRUE;
- break;
- }
- }
- if (! deleted && deleted_abspath_hash)
- {
- apr_hash_index_t *hi;
+ break; /* Cease invocation; must keep */
+ }
+ }
- for (hi = apr_hash_first(scratch_pool, deleted_abspath_hash);
- hi;
- hi = apr_hash_next(hi))
- {
- const char *abspath;
-
- abspath = svn__apr_hash_index_key(hi);
- if (! svn_path_compare_paths(found, abspath))
- {
- deleted = TRUE;
- break;
- }
- }
- }
- if (! deleted)
- {
- *empty = FALSE;
- break;
- }
- }
+ cb->must_keep = TRUE;
- return SVN_NO_ERROR;
+ return svn_error_create(SVN_ERR_CEASE_INVOCATION, NULL, NULL);
+ }
}
-/* Delete all directories from the working copy which are left empty
- * by deleted TARGETS. Use client context CTX.
- * If DRY_RUN is TRUE, do not modify the working copy.
- * Do temporary allocations in SCRATCH_POOL. */
static svn_error_t *
-delete_empty_dirs(apr_array_header_t *targets_info, svn_client_ctx_t *ctx,
- svn_boolean_t dry_run, apr_pool_t *scratch_pool)
+check_ancestor_delete(const char *deleted_target,
+ apr_array_header_t *targets_info,
+ const char *apply_root,
+ svn_boolean_t dry_run,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- apr_hash_t *empty_dirs;
- apr_hash_t *non_empty_dirs;
- apr_array_header_t *deleted_targets;
- apr_pool_t *iterpool;
- svn_boolean_t again;
- int i;
- apr_hash_index_t *hi;
-
- /* Get a list of all deleted targets. */
- deleted_targets = apr_array_make(scratch_pool, 0, sizeof(patch_target_t *));
- for (i = 0; i < targets_info->nelts; i++)
- {
- patch_target_info_t *target_info;
-
- target_info = APR_ARRAY_IDX(targets_info, i, patch_target_info_t *);
- if (target_info->deleted)
- APR_ARRAY_PUSH(deleted_targets, patch_target_info_t *) = target_info;
- }
-
- /* We have nothing to do if there aren't any deleted targets. */
- if (deleted_targets->nelts == 0)
- return SVN_NO_ERROR;
-
- /* Look for empty parent directories of deleted targets. */
- empty_dirs = apr_hash_make(scratch_pool);
- non_empty_dirs = apr_hash_make(scratch_pool);
- iterpool = svn_pool_create(scratch_pool);
- for (i = 0; i < deleted_targets->nelts; i++)
- {
- svn_boolean_t parent_empty;
- patch_target_info_t *target_info;
- const char *parent;
-
- svn_pool_clear(iterpool);
-
- if (ctx->cancel_func)
- SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
-
- target_info = APR_ARRAY_IDX(deleted_targets, i, patch_target_info_t *);
-
- parent = svn_dirent_dirname(target_info->local_abspath, iterpool);
+ struct can_delete_baton_t cb;
+ svn_error_t *err;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
- if (apr_hash_get(non_empty_dirs, parent, APR_HASH_KEY_STRING))
- continue;
- else if (apr_hash_get(empty_dirs, parent, APR_HASH_KEY_STRING))
- continue;
+ const char *dir_abspath = svn_dirent_dirname(deleted_target, scratch_pool);
- SVN_ERR(check_dir_empty(&parent_empty, parent, ctx->wc_ctx,
- deleted_targets, NULL, iterpool));
- if (parent_empty)
- apr_hash_set(empty_dirs, apr_pstrdup(scratch_pool, parent),
- APR_HASH_KEY_STRING, "");
- else
- apr_hash_set(non_empty_dirs, apr_pstrdup(scratch_pool, parent),
- APR_HASH_KEY_STRING, "");
- }
-
- /* We have nothing to do if there aren't any empty directories. */
- if (apr_hash_count(empty_dirs) == 0)
+ while (svn_dirent_is_child(apply_root, dir_abspath, iterpool))
{
- svn_pool_destroy(iterpool);
- return SVN_NO_ERROR;
- }
-
- /* Determine the minimal set of empty directories we need to delete. */
- do
- {
- apr_hash_t *empty_dirs_copy;
-
svn_pool_clear(iterpool);
- if (ctx->cancel_func)
- SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
+ cb.local_abspath = dir_abspath;
+ cb.must_keep = FALSE;
+ cb.targets_info = targets_info;
- /* Rebuild the empty dirs list, replacing empty dirs which have
- * an empty parent with their parent. */
- again = FALSE;
- empty_dirs_copy = apr_hash_copy(iterpool, empty_dirs);
- SVN_ERR(svn_hash__clear(empty_dirs, iterpool));
+ err = svn_wc_walk_status(ctx->wc_ctx, dir_abspath, svn_depth_infinity,
+ TRUE, FALSE, FALSE, NULL,
+ can_delete_callback, &cb,
+ ctx->cancel_func, ctx->cancel_baton,
+ iterpool);
- for (hi = apr_hash_first(iterpool, empty_dirs_copy);
- hi;
- hi = apr_hash_next(hi))
+ if (err)
{
- svn_boolean_t parent_empty;
- const char *empty_dir;
- const char *parent;
+ if (err->apr_err != SVN_ERR_CEASE_INVOCATION)
+ return svn_error_trace(err);
- empty_dir = svn__apr_hash_index_key(hi);
- parent = svn_dirent_dirname(empty_dir, iterpool);
+ svn_error_clear(err);
+ }
- if (apr_hash_get(empty_dirs, parent, APR_HASH_KEY_STRING))
- continue;
+ if (cb.must_keep)
+ {
+ break;
+ }
- SVN_ERR(check_dir_empty(&parent_empty, parent, ctx->wc_ctx,
- deleted_targets, empty_dirs_copy,
- iterpool));
- if (parent_empty)
- {
- again = TRUE;
- apr_hash_set(empty_dirs, apr_pstrdup(scratch_pool, parent),
- APR_HASH_KEY_STRING, "");
- }
- else
- apr_hash_set(empty_dirs, apr_pstrdup(scratch_pool, empty_dir),
- APR_HASH_KEY_STRING, "");
+ if (! dry_run)
+ {
+ SVN_ERR(svn_wc_delete4(ctx->wc_ctx, dir_abspath, FALSE, FALSE,
+ ctx->cancel_func, ctx->cancel_baton,
+ NULL, NULL,
+ scratch_pool));
}
- }
- while (again);
- /* Finally, delete empty directories. */
- for (hi = apr_hash_first(scratch_pool, empty_dirs);
- hi;
- hi = apr_hash_next(hi))
- {
- const char *empty_dir;
+ {
+ patch_target_info_t *pti = apr_pcalloc(result_pool, sizeof(*pti));
- svn_pool_clear(iterpool);
+ pti->local_abspath = apr_pstrdup(result_pool, dir_abspath);
+ pti->deleted = TRUE;
+
+ APR_ARRAY_PUSH(targets_info, patch_target_info_t *) = pti;
+ }
- if (ctx->cancel_func)
- SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
- empty_dir = svn__apr_hash_index_key(hi);
- if (! dry_run)
- SVN_ERR(svn_wc_delete4(ctx->wc_ctx, empty_dir, FALSE, FALSE,
- ctx->cancel_func, ctx->cancel_baton,
- NULL, NULL, /* no duplicate notification */
- iterpool));
if (ctx->notify_func2)
{
svn_wc_notify_t *notify;
- notify = svn_wc_create_notify(empty_dir, svn_wc_notify_delete,
- iterpool);
- (*ctx->notify_func2)(ctx->notify_baton2, notify, iterpool);
+ notify = svn_wc_create_notify(dir_abspath, svn_wc_notify_delete,
+ iterpool);
+ notify->kind = svn_node_dir;
+
+ ctx->notify_func2(ctx->notify_baton2, notify, iterpool);
}
+
+ /* And check if we must also delete the parent */
+ dir_abspath = svn_dirent_dirname(dir_abspath, scratch_pool);
}
+
svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
-/* Baton for apply_patches(). */
-typedef struct apply_patches_baton_t {
- /* The path to the patch file. */
- const char *patch_abspath;
-
- /* The abspath to the working copy the patch should be applied to. */
- const char *abs_wc_path;
-
- /* Indicates whether we're doing a dry run. */
- svn_boolean_t dry_run;
-
- /* Number of leading components to strip from patch target paths. */
- int strip_count;
-
- /* Whether to apply the patch in reverse. */
- svn_boolean_t reverse;
-
- /* Indicates whether we should ignore whitespace when matching context
- * lines */
- svn_boolean_t ignore_whitespace;
-
- /* As in svn_client_patch(). */
- svn_boolean_t remove_tempfiles;
-
- /* As in svn_client_patch(). */
- svn_client_patch_func_t patch_func;
- void *patch_baton;
-
- /* The client context. */
- svn_client_ctx_t *ctx;
-} apply_patches_baton_t;
-
-/* Callback for use with svn_wc__call_with_write_lock().
- * This function is the main entry point into the patch code. */
+/* This function is the main entry point into the patch code. */
static svn_error_t *
-apply_patches(void *baton,
- apr_pool_t *result_pool,
+apply_patches(/* The path to the patch file. */
+ const char *patch_abspath,
+ /* The abspath to the working copy the patch should be applied to. */
+ const char *abs_wc_path,
+ /* Indicates whether we're doing a dry run. */
+ svn_boolean_t dry_run,
+ /* Number of leading components to strip from patch target paths. */
+ int strip_count,
+ /* Whether to apply the patch in reverse. */
+ svn_boolean_t reverse,
+ /* Whether to ignore whitespace when matching context lines. */
+ svn_boolean_t ignore_whitespace,
+ /* As in svn_client_patch(). */
+ svn_boolean_t remove_tempfiles,
+ /* As in svn_client_patch(). */
+ svn_client_patch_func_t patch_func,
+ void *patch_baton,
+ /* The client context. */
+ svn_client_ctx_t *ctx,
apr_pool_t *scratch_pool)
{
svn_patch_t *patch;
apr_pool_t *iterpool;
svn_patch_file_t *patch_file;
apr_array_header_t *targets_info;
- apply_patches_baton_t *btn = baton;
/* Try to open the patch file. */
- SVN_ERR(svn_diff_open_patch_file(&patch_file, btn->patch_abspath,
- scratch_pool));
+ SVN_ERR(svn_diff_open_patch_file(&patch_file, patch_abspath, scratch_pool));
/* Apply patches. */
targets_info = apr_array_make(scratch_pool, 0,
@@ -2868,29 +2977,27 @@ apply_patches(void *baton,
{
svn_pool_clear(iterpool);
- if (btn->ctx->cancel_func)
- SVN_ERR(btn->ctx->cancel_func(btn->ctx->cancel_baton));
+ if (ctx->cancel_func)
+ SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
SVN_ERR(svn_diff_parse_next_patch(&patch, patch_file,
- btn->reverse, btn->ignore_whitespace,
+ reverse, ignore_whitespace,
iterpool, iterpool));
if (patch)
{
patch_target_t *target;
- SVN_ERR(apply_one_patch(&target, patch, btn->abs_wc_path,
- btn->ctx->wc_ctx, btn->strip_count,
- btn->ignore_whitespace,
- btn->remove_tempfiles,
- btn->patch_func, btn->patch_baton,
- btn->ctx->cancel_func,
- btn->ctx->cancel_baton,
+ SVN_ERR(apply_one_patch(&target, patch, abs_wc_path,
+ ctx->wc_ctx, strip_count,
+ ignore_whitespace, remove_tempfiles,
+ patch_func, patch_baton,
+ ctx->cancel_func, ctx->cancel_baton,
iterpool, iterpool));
if (! target->filtered)
{
/* Save info we'll still need when we're done patching. */
patch_target_info_t *target_info =
- apr_palloc(scratch_pool, sizeof(patch_target_info_t));
+ apr_pcalloc(scratch_pool, sizeof(patch_target_info_t));
target_info->local_abspath = apr_pstrdup(scratch_pool,
target->local_abspath);
target_info->deleted = target->deleted;
@@ -2903,28 +3010,29 @@ apply_patches(void *baton,
if (target->has_text_changes
|| target->added
|| target->deleted)
- SVN_ERR(install_patched_target(target, btn->abs_wc_path,
- btn->ctx, btn->dry_run,
- iterpool));
+ SVN_ERR(install_patched_target(target, abs_wc_path,
+ ctx, dry_run, iterpool));
if (target->has_prop_changes && (!target->deleted))
- SVN_ERR(install_patched_prop_targets(target, btn->ctx,
- btn->dry_run,
- iterpool));
+ SVN_ERR(install_patched_prop_targets(target, ctx,
+ dry_run, iterpool));
- SVN_ERR(write_out_rejected_hunks(target, btn->dry_run,
- iterpool));
+ SVN_ERR(write_out_rejected_hunks(target, dry_run, iterpool));
+ }
+ SVN_ERR(send_patch_notification(target, ctx, iterpool));
+
+ if (target->deleted && !target->skipped)
+ {
+ SVN_ERR(check_ancestor_delete(target_info->local_abspath,
+ targets_info, abs_wc_path,
+ dry_run, ctx,
+ scratch_pool, iterpool));
}
- SVN_ERR(send_patch_notification(target, btn->ctx, iterpool));
}
}
}
while (patch);
- /* Delete directories which are empty after patching, if any. */
- SVN_ERR(delete_empty_dirs(targets_info, btn->ctx, btn->dry_run,
- scratch_pool));
-
SVN_ERR(svn_diff_close_patch_file(patch_file, iterpool));
svn_pool_destroy(iterpool);
@@ -2944,7 +3052,6 @@ svn_client_patch(const char *patch_abspath,
svn_client_ctx_t *ctx,
apr_pool_t *scratch_pool)
{
- apply_patches_baton_t baton;
svn_node_kind_t kind;
if (strip_count < 0)
@@ -2981,19 +3088,10 @@ svn_client_patch(const char *patch_abspath,
svn_dirent_local_style(wc_dir_abspath,
scratch_pool));
- baton.patch_abspath = patch_abspath;
- baton.abs_wc_path = wc_dir_abspath;
- baton.dry_run = dry_run;
- baton.ctx = ctx;
- baton.strip_count = strip_count;
- baton.reverse = reverse;
- baton.ignore_whitespace = ignore_whitespace;
- baton.remove_tempfiles = remove_tempfiles;
- baton.patch_func = patch_func;
- baton.patch_baton = patch_baton;
-
- return svn_error_trace(
- svn_wc__call_with_write_lock(apply_patches, &baton,
- ctx->wc_ctx, wc_dir_abspath, FALSE,
- scratch_pool, scratch_pool));
+ SVN_WC__CALL_WITH_WRITE_LOCK(
+ apply_patches(patch_abspath, wc_dir_abspath, dry_run, strip_count,
+ reverse, ignore_whitespace, remove_tempfiles,
+ patch_func, patch_baton, ctx, scratch_pool),
+ ctx->wc_ctx, wc_dir_abspath, FALSE /* lock_anchor */, scratch_pool);
+ return SVN_NO_ERROR;
}
diff --git a/subversion/libsvn_client/prop_commands.c b/subversion/libsvn_client/prop_commands.c
index e453830..06c4d21 100644
--- a/subversion/libsvn_client/prop_commands.c
+++ b/subversion/libsvn_client/prop_commands.c
@@ -38,43 +38,22 @@
#include "svn_pools.h"
#include "svn_props.h"
#include "svn_hash.h"
+#include "svn_sorts.h"
#include "svn_private_config.h"
#include "private/svn_wc_private.h"
+#include "private/svn_ra_private.h"
#include "private/svn_client_private.h"
/*** Code. ***/
-/* Check whether NAME is a revision property name.
- *
- * Return TRUE if it is.
- * Return FALSE if it is not.
- */
-static svn_boolean_t
-is_revision_prop_name(const char *name)
-{
- apr_size_t i;
- static const char *revision_props[] =
- {
- SVN_PROP_REVISION_ALL_PROPS
- };
-
- for (i = 0; i < sizeof(revision_props) / sizeof(revision_props[0]); i++)
- {
- if (strcmp(name, revision_props[i]) == 0)
- return TRUE;
- }
- return FALSE;
-}
-
-
/* Return an SVN_ERR_CLIENT_PROPERTY_NAME error if NAME is a wcprop,
else return SVN_NO_ERROR. */
static svn_error_t *
error_if_wcprop_name(const char *name)
{
- if (svn_property_kind(NULL, name) == svn_prop_wc_kind)
+ if (svn_property_kind2(name) == svn_prop_wc_kind)
{
return svn_error_createf
(SVN_ERR_CLIENT_PROPERTY_NAME, NULL,
@@ -109,7 +88,7 @@ get_file_for_validation(const svn_string_t **mime_type,
pool));
if (mime_type)
- *mime_type = apr_hash_get(props, SVN_PROP_MIME_TYPE, APR_HASH_KEY_STRING);
+ *mime_type = svn_hash_gets(props, SVN_PROP_MIME_TYPE);
return SVN_NO_ERROR;
}
@@ -117,7 +96,8 @@ get_file_for_validation(const svn_string_t **mime_type,
static
svn_error_t *
-do_url_propset(const char *propname,
+do_url_propset(const char *url,
+ const char *propname,
const svn_string_t *propval,
const svn_node_kind_t kind,
const svn_revnum_t base_revision_for_url,
@@ -133,8 +113,10 @@ do_url_propset(const char *propname,
if (kind == svn_node_file)
{
void *file_baton;
- SVN_ERR(editor->open_file("", root_baton, base_revision_for_url,
- pool, &file_baton));
+ const char *uri_basename = svn_uri_basename(url, pool);
+
+ SVN_ERR(editor->open_file(uri_basename, root_baton,
+ base_revision_for_url, pool, &file_baton));
SVN_ERR(editor->change_file_prop(file_baton, propname, propval, pool));
SVN_ERR(editor->close_file(file_baton, NULL, pool));
}
@@ -158,7 +140,7 @@ propset_on_url(const char *propname,
svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
- enum svn_prop_kind prop_kind = svn_property_kind(NULL, propname);
+ enum svn_prop_kind prop_kind = svn_property_kind2(propname);
svn_ra_session_t *ra_session;
svn_node_kind_t node_kind;
const char *message;
@@ -174,9 +156,8 @@ propset_on_url(const char *propname,
/* Open an RA session for the URL. Note that we don't have a local
directory, nor a place to put temp files. */
- SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL, target,
- NULL, NULL, FALSE, TRUE,
- ctx, pool));
+ SVN_ERR(svn_client_open_ra_session2(&ra_session, target, NULL,
+ ctx, pool, pool));
SVN_ERR(svn_ra_check_path(ra_session, "", base_revision_for_url,
&node_kind, pool));
@@ -186,6 +167,18 @@ propset_on_url(const char *propname,
_("Path '%s' does not exist in revision %ld"),
target, base_revision_for_url);
+ if (node_kind == svn_node_file)
+ {
+ /* We need to reparent our session one directory up, since editor
+ semantics require the root is a directory.
+
+ ### How does this interact with authz? */
+ const char *parent_url;
+ parent_url = svn_uri_dirname(target, pool);
+
+ SVN_ERR(svn_ra_reparent(ra_session, parent_url, pool));
+ }
+
/* Setting an inappropriate property is not allowed (unless
overridden by 'skip_checks', in some circumstances). Deleting an
inappropriate property is allowed, however, since older clients
@@ -227,6 +220,9 @@ propset_on_url(const char *propname,
message, ctx, pool));
/* Fetch RA commit editor. */
+ SVN_ERR(svn_ra__register_editor_shim_callbacks(ra_session,
+ svn_client__get_shim_callbacks(ctx->wc_ctx,
+ NULL, pool)));
SVN_ERR(svn_ra_get_commit_editor3(ra_session, &editor, &edit_baton,
commit_revprops,
commit_callback,
@@ -234,8 +230,8 @@ propset_on_url(const char *propname,
NULL, TRUE, /* No lock tokens */
pool));
- err = do_url_propset(propname, propval, node_kind, base_revision_for_url,
- editor, edit_baton, pool);
+ err = do_url_propset(target, propname, propval, node_kind,
+ base_revision_for_url, editor, edit_baton, pool);
if (err)
{
@@ -248,37 +244,6 @@ propset_on_url(const char *propname,
return editor->close_edit(edit_baton, pool);
}
-/* Baton for set_props_cb */
-struct set_props_baton
-{
- svn_client_ctx_t *ctx;
- const char *local_abspath;
- svn_depth_t depth;
- svn_node_kind_t kind;
- const char *propname;
- const svn_string_t *propval;
- svn_boolean_t skip_checks;
- const apr_array_header_t *changelist_filter;
-};
-
-/* Working copy lock callback for svn_client_propset4 */
-static svn_error_t *
-set_props_cb(void *baton,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- struct set_props_baton *bt = baton;
-
- SVN_ERR(svn_wc_prop_set4(bt->ctx->wc_ctx, bt->local_abspath, bt->propname,
- bt->propval, bt->depth, bt->skip_checks,
- bt->changelist_filter,
- bt->ctx->cancel_func, bt->ctx->cancel_baton,
- bt->ctx->notify_func2, bt->ctx->notify_baton2,
- scratch_pool));
-
- return SVN_NO_ERROR;
-}
-
/* Check that PROPNAME is a valid name for a versioned property. Return an
* error if it is not valid, specifically if it is:
* - the name of a standard Subversion rev-prop; or
@@ -296,7 +261,7 @@ static svn_error_t *
check_prop_name(const char *propname,
const svn_string_t *propval)
{
- if (is_revision_prop_name(propname))
+ if (svn_prop_is_known_svn_rev_prop(propname))
return svn_error_createf(SVN_ERR_CLIENT_PROPERTY_NAME, NULL,
_("Revision property '%s' not allowed "
"in this context"), propname);
@@ -341,8 +306,6 @@ svn_client_propset_local(const char *propname,
{
svn_node_kind_t kind;
const char *target_abspath;
- svn_error_t *err;
- struct set_props_baton baton;
const char *target = APR_ARRAY_IDX(targets, i, const char *);
svn_pool_clear(iterpool);
@@ -353,11 +316,11 @@ svn_client_propset_local(const char *propname,
SVN_ERR(svn_dirent_get_absolute(&target_abspath, target, iterpool));
- err = svn_wc_read_kind(&kind, ctx->wc_ctx, target_abspath, FALSE,
- iterpool);
+ /* Call prop_set for deleted nodes to have special errors */
+ SVN_ERR(svn_wc_read_kind2(&kind, ctx->wc_ctx, target_abspath,
+ FALSE, FALSE, iterpool));
- if ((err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
- || (!err && (kind == svn_node_unknown || kind == svn_node_none)))
+ if (kind == svn_node_unknown || kind == svn_node_none)
{
if (ctx->notify_func2)
{
@@ -368,24 +331,14 @@ svn_client_propset_local(const char *propname,
ctx->notify_func2(ctx->notify_baton2, notify, iterpool);
}
-
- svn_error_clear(err);
}
- else
- SVN_ERR(err);
-
- baton.ctx = ctx;
- baton.local_abspath = target_abspath;
- baton.depth = depth;
- baton.kind = kind;
- baton.propname = propname;
- baton.propval = propval;
- baton.skip_checks = skip_checks;
- baton.changelist_filter = changelists;
-
- SVN_ERR(svn_wc__call_with_write_lock(set_props_cb, &baton,
- ctx->wc_ctx, target_abspath,
- FALSE, iterpool, iterpool));
+
+ SVN_WC__CALL_WITH_WRITE_LOCK(
+ svn_wc_prop_set4(ctx->wc_ctx, target_abspath, propname,
+ propval, depth, skip_checks, changelists,
+ ctx->cancel_func, ctx->cancel_baton,
+ ctx->notify_func2, ctx->notify_baton2, iterpool),
+ ctx->wc_ctx, target_abspath, FALSE /* lock_anchor */, iterpool);
}
svn_pool_destroy(iterpool);
@@ -514,10 +467,9 @@ svn_client_revprop_set2(const char *propname,
return svn_error_createf(SVN_ERR_CLIENT_PROPERTY_NAME, NULL,
_("Bad property name: '%s'"), propname);
- /* Open an RA session for the URL. Note that we don't have a local
- directory, nor a place to put temp files. */
- SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL, URL, NULL,
- NULL, FALSE, TRUE, ctx, pool));
+ /* Open an RA session for the URL. */
+ SVN_ERR(svn_client_open_ra_session2(&ra_session, URL, NULL,
+ ctx, pool, pool));
/* Resolve the revision into something real, and return that to the
caller as well. */
@@ -566,68 +518,30 @@ svn_client_revprop_set2(const char *propname,
return SVN_NO_ERROR;
}
-
-/* Set *PROPS to the pristine (base) properties at LOCAL_ABSPATH, if PRISTINE
- * is true, or else the working value if PRISTINE is false.
- *
- * The keys of *PROPS will be 'const char *' property names, and the
- * values 'const svn_string_t *' property values. Allocate *PROPS
- * and its contents in RESULT_POOL. Use SCRATCH_POOL for temporary
- * allocations.
- */
-static svn_error_t *
-pristine_or_working_props(apr_hash_t **props,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- svn_boolean_t pristine,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- if (pristine)
- {
- return svn_error_trace(svn_wc_get_pristine_props(props,
- wc_ctx,
- local_abspath,
- result_pool,
- scratch_pool));
- }
-
- /* ### until svn_wc_prop_list2() returns a NULL value for locally-deleted
- ### nodes, then let's check manually. */
- {
- svn_boolean_t deleted;
-
- SVN_ERR(svn_wc__node_is_status_deleted(&deleted, wc_ctx, local_abspath,
- scratch_pool));
- if (deleted)
- {
- *props = NULL;
- return SVN_NO_ERROR;
- }
- }
-
- return svn_error_trace(svn_wc_prop_list2(props, wc_ctx, local_abspath,
- result_pool, scratch_pool));
-}
-
-
/* Helper for the remote case of svn_client_propget.
*
- * Get the value of property PROPNAME in REVNUM, using RA_LIB and
- * SESSION. Store the value ('svn_string_t *') in PROPS, under the
- * path key "TARGET_PREFIX/TARGET_RELATIVE" ('const char *').
+ * If PROPS is not null, then get the value of property PROPNAME in REVNUM,
+ using RA_LIB and SESSION. Store the value ('svn_string_t *') in PROPS,
+ under the path key "TARGET_PREFIX/TARGET_RELATIVE" ('const char *').
+ *
+ * If INHERITED_PROPS is not null, then set *INHERITED_PROPS to a
+ * depth-first ordered array of svn_prop_inherited_item_t * structures
+ * representing the PROPNAME properties inherited by the target. If
+ * INHERITABLE_PROPS in not null and no inheritable properties are found,
+ * then set *INHERITED_PROPS to an empty array.
*
* Recurse according to DEPTH, similarly to svn_client_propget3().
*
* KIND is the kind of the node at "TARGET_PREFIX/TARGET_RELATIVE".
* Yes, caller passes this; it makes the recursion more efficient :-).
*
- * Allocate the keys and values in PERM_POOL, but do all temporary
- * work in WORK_POOL. The two pools can be the same; recursive
- * calls may use a different WORK_POOL, however.
+ * Allocate PROPS and *INHERITED_PROPS in RESULT_POOL, but do all temporary
+ * work in SCRATCH_POOL. The two pools can be the same; recursive
+ * calls may use a different SCRATCH_POOL, however.
*/
static svn_error_t *
remote_propget(apr_hash_t *props,
+ apr_array_header_t **inherited_props,
const char *propname,
const char *target_prefix,
const char *target_relative,
@@ -635,26 +549,27 @@ remote_propget(apr_hash_t *props,
svn_revnum_t revnum,
svn_ra_session_t *ra_session,
svn_depth_t depth,
- apr_pool_t *perm_pool,
- apr_pool_t *work_pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
apr_hash_t *dirents;
- apr_hash_t *prop_hash;
+ apr_hash_t *prop_hash = NULL;
const svn_string_t *val;
const char *target_full_url =
- svn_path_url_add_component2(target_prefix, target_relative, work_pool);
+ svn_path_url_add_component2(target_prefix, target_relative,
+ scratch_pool);
if (kind == svn_node_dir)
{
SVN_ERR(svn_ra_get_dir2(ra_session,
(depth >= svn_depth_files ? &dirents : NULL),
NULL, &prop_hash, target_relative, revnum,
- SVN_DIRENT_KIND, work_pool));
+ SVN_DIRENT_KIND, scratch_pool));
}
else if (kind == svn_node_file)
{
SVN_ERR(svn_ra_get_file(ra_session, target_relative, revnum,
- NULL, NULL, &prop_hash, work_pool));
+ NULL, NULL, &prop_hash, scratch_pool));
}
else if (kind == svn_node_none)
{
@@ -669,10 +584,59 @@ remote_propget(apr_hash_t *props,
target_full_url);
}
- if ((val = apr_hash_get(prop_hash, propname, APR_HASH_KEY_STRING)))
+ if (inherited_props)
+ {
+ const char *repos_root_url;
+
+ /* We will filter out all but PROPNAME later, making a final copy
+ in RESULT_POOL, so pass SCRATCH_POOL for all pools. */
+ SVN_ERR(svn_ra_get_inherited_props(ra_session, inherited_props,
+ target_relative, revnum,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root_url,
+ scratch_pool));
+ SVN_ERR(svn_client__iprop_relpaths_to_urls(*inherited_props,
+ repos_root_url,
+ scratch_pool,
+ scratch_pool));
+ }
+
+ /* Make a copy of any inherited PROPNAME properties in RESULT_POOL. */
+ if (inherited_props)
+ {
+ int i;
+ apr_array_header_t *final_iprops =
+ apr_array_make(result_pool, 1, sizeof(svn_prop_inherited_item_t *));
+
+ for (i = 0; i < (*inherited_props)->nelts; i++)
+ {
+ svn_prop_inherited_item_t *iprop =
+ APR_ARRAY_IDX((*inherited_props), i, svn_prop_inherited_item_t *);
+ svn_string_t *iprop_val = svn_hash_gets(iprop->prop_hash, propname);
+
+ if (iprop_val)
+ {
+ svn_prop_inherited_item_t *new_iprop =
+ apr_palloc(result_pool, sizeof(*new_iprop));
+ new_iprop->path_or_url =
+ apr_pstrdup(result_pool, iprop->path_or_url);
+ new_iprop->prop_hash = apr_hash_make(result_pool);
+ svn_hash_sets(new_iprop->prop_hash,
+ apr_pstrdup(result_pool, propname),
+ svn_string_dup(iprop_val, result_pool));
+ APR_ARRAY_PUSH(final_iprops, svn_prop_inherited_item_t *) =
+ new_iprop;
+ }
+ }
+ *inherited_props = final_iprops;
+ }
+
+ if (prop_hash
+ && (val = svn_hash_gets(prop_hash, propname)))
{
- apr_hash_set(props, apr_pstrdup(perm_pool, target_full_url),
- APR_HASH_KEY_STRING, svn_string_dup(val, perm_pool));
+ svn_hash_sets(props,
+ apr_pstrdup(result_pool, target_full_url),
+ svn_string_dup(val, result_pool));
}
if (depth >= svn_depth_files
@@ -680,9 +644,9 @@ remote_propget(apr_hash_t *props,
&& apr_hash_count(dirents) > 0)
{
apr_hash_index_t *hi;
- apr_pool_t *iterpool = svn_pool_create(work_pool);
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
- for (hi = apr_hash_first(work_pool, dirents);
+ for (hi = apr_hash_first(scratch_pool, dirents);
hi;
hi = apr_hash_next(hi))
{
@@ -702,7 +666,7 @@ remote_propget(apr_hash_t *props,
new_target_relative = svn_relpath_join(target_relative, this_name,
iterpool);
- SVN_ERR(remote_propget(props,
+ SVN_ERR(remote_propget(props, NULL,
propname,
target_prefix,
new_target_relative,
@@ -710,7 +674,7 @@ remote_propget(apr_hash_t *props,
revnum,
ra_session,
depth_below_here,
- perm_pool, iterpool));
+ result_pool, iterpool));
}
svn_pool_destroy(iterpool);
@@ -739,9 +703,8 @@ recursive_propget_receiver(void *baton,
if (apr_hash_count(props))
{
apr_hash_index_t *hi = apr_hash_first(scratch_pool, props);
- apr_hash_set(b->props, apr_pstrdup(b->pool, local_abspath),
- APR_HASH_KEY_STRING,
- svn_string_dup(svn__apr_hash_index_val(hi), b->pool));
+ svn_hash_sets(b->props, apr_pstrdup(b->pool, local_abspath),
+ svn_string_dup(svn__apr_hash_index_val(hi), b->pool));
}
return SVN_NO_ERROR;
@@ -762,7 +725,7 @@ recursive_propget_receiver(void *baton,
Treat DEPTH as in svn_client_propget3().
*/
static svn_error_t *
-get_prop_from_wc(apr_hash_t *props,
+get_prop_from_wc(apr_hash_t **props,
const char *propname,
const char *target_abspath,
svn_boolean_t pristine,
@@ -783,12 +746,24 @@ get_prop_from_wc(apr_hash_t *props,
if (depth == svn_depth_unknown)
depth = svn_depth_infinity;
- rb.props = props;
+ if (!pristine && depth == svn_depth_infinity
+ && (!changelists || changelists->nelts == 0))
+ {
+ /* Handle this common svn:mergeinfo case more efficient than the target
+ list handling in the recursive retrieval. */
+ SVN_ERR(svn_wc__prop_retrieve_recursive(
+ props, ctx->wc_ctx, target_abspath, propname,
+ result_pool, scratch_pool));
+ return SVN_NO_ERROR;
+ }
+
+ *props = apr_hash_make(result_pool);
+ rb.props = *props;
rb.pool = result_pool;
rb.wc_ctx = ctx->wc_ctx;
SVN_ERR(svn_wc__prop_list_recursive(ctx->wc_ctx, target_abspath,
- propname, depth, FALSE, pristine,
+ propname, depth, pristine,
changelists,
recursive_propget_receiver, &rb,
ctx->cancel_func, ctx->cancel_baton,
@@ -799,7 +774,8 @@ get_prop_from_wc(apr_hash_t *props,
/* Note: this implementation is very similar to svn_client_proplist. */
svn_error_t *
-svn_client_propget4(apr_hash_t **props,
+svn_client_propget5(apr_hash_t **props,
+ apr_array_header_t **inherited_props,
const char *propname,
const char *target,
const svn_opt_revision_t *peg_revision,
@@ -812,6 +788,8 @@ svn_client_propget4(apr_hash_t **props,
apr_pool_t *scratch_pool)
{
svn_revnum_t revnum;
+ svn_boolean_t local_explicit_props;
+ svn_boolean_t local_iprops;
SVN_ERR(error_if_wcprop_name(propname));
if (!svn_path_is_url(target))
@@ -821,11 +799,19 @@ svn_client_propget4(apr_hash_t **props,
target);
revision = svn_cl__rev_default_to_peg(revision, peg_revision);
- *props = apr_hash_make(result_pool);
+ local_explicit_props =
+ (! svn_path_is_url(target)
+ && SVN_CLIENT__REVKIND_IS_LOCAL_TO_WC(peg_revision->kind)
+ && SVN_CLIENT__REVKIND_IS_LOCAL_TO_WC(revision->kind));
+
+ local_iprops =
+ (local_explicit_props
+ && (peg_revision->kind == svn_opt_revision_working
+ || peg_revision->kind == svn_opt_revision_unspecified )
+ && (revision->kind == svn_opt_revision_working
+ || revision->kind == svn_opt_revision_unspecified ));
- if (! svn_path_is_url(target)
- && SVN_CLIENT__REVKIND_IS_LOCAL_TO_WC(peg_revision->kind)
- && SVN_CLIENT__REVKIND_IS_LOCAL_TO_WC(revision->kind))
+ if (local_explicit_props)
{
svn_node_kind_t kind;
svn_boolean_t pristine;
@@ -835,8 +821,9 @@ svn_client_propget4(apr_hash_t **props,
pristine = (revision->kind == svn_opt_revision_committed
|| revision->kind == svn_opt_revision_base);
- SVN_ERR(svn_wc_read_kind(&kind, ctx->wc_ctx, target, FALSE,
- scratch_pool));
+ SVN_ERR(svn_wc_read_kind2(&kind, ctx->wc_ctx, target,
+ pristine, FALSE,
+ scratch_pool));
if (kind == svn_node_unknown || kind == svn_node_none)
{
@@ -859,28 +846,137 @@ svn_client_propget4(apr_hash_t **props,
else if (err)
return svn_error_trace(err);
- SVN_ERR(get_prop_from_wc(*props, propname, target,
+ if (inherited_props && local_iprops)
+ {
+ const char *repos_root_url;
+
+ SVN_ERR(svn_wc__get_iprops(inherited_props, ctx->wc_ctx,
+ target, propname,
+ result_pool, scratch_pool));
+ SVN_ERR(svn_client_get_repos_root(&repos_root_url, NULL,
+ target, ctx, scratch_pool,
+ scratch_pool));
+ SVN_ERR(svn_client__iprop_relpaths_to_urls(*inherited_props,
+ repos_root_url,
+ result_pool,
+ scratch_pool));
+ }
+
+ SVN_ERR(get_prop_from_wc(props, propname, target,
pristine, kind,
- depth, changelists, ctx, scratch_pool,
- result_pool));
+ depth, changelists, ctx, result_pool,
+ scratch_pool));
}
- else
+
+ if ((inherited_props && !local_iprops)
+ || !local_explicit_props)
{
- const char *url;
svn_ra_session_t *ra_session;
svn_node_kind_t kind;
+ svn_opt_revision_t new_operative_rev;
+ svn_opt_revision_t new_peg_rev;
+
+ /* Peg or operative revisions may be WC specific for
+ TARGET's explicit props, but still require us to
+ contact the repository for the inherited properties. */
+ if (SVN_CLIENT__REVKIND_NEEDS_WC(peg_revision->kind)
+ || SVN_CLIENT__REVKIND_NEEDS_WC(revision->kind))
+ {
+ svn_revnum_t origin_rev;
+ const char *repos_relpath;
+ const char *repos_root_url;
+ const char *repos_uuid;
+ const char *local_abspath;
+ const char *copy_root_abspath;
+ svn_boolean_t is_copy;
+
+ /* Avoid assertion on the next line when somebody accidentally asks for
+ a working copy revision on a URL */
+ if (svn_path_is_url(target))
+ return svn_error_create(SVN_ERR_CLIENT_VERSIONED_PATH_REQUIRED,
+ NULL, NULL);
+
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(target));
+ local_abspath = target;
+
+ if (SVN_CLIENT__REVKIND_NEEDS_WC(peg_revision->kind))
+ {
+ SVN_ERR(svn_wc__node_get_origin(&is_copy,
+ &origin_rev,
+ &repos_relpath,
+ &repos_root_url,
+ &repos_uuid,
+ &copy_root_abspath,
+ ctx->wc_ctx,
+ local_abspath,
+ FALSE, /* scan_deleted */
+ result_pool,
+ scratch_pool));
+ if (repos_relpath)
+ {
+ target = svn_path_url_add_component2(repos_root_url,
+ repos_relpath,
+ scratch_pool);
+ if (SVN_CLIENT__REVKIND_NEEDS_WC(peg_revision->kind))
+ {
+ svn_revnum_t resolved_peg_rev;
+
+ SVN_ERR(svn_client__get_revision_number(
+ &resolved_peg_rev, NULL, ctx->wc_ctx,
+ local_abspath, NULL, peg_revision, scratch_pool));
+ new_peg_rev.kind = svn_opt_revision_number;
+ new_peg_rev.value.number = resolved_peg_rev;
+ peg_revision = &new_peg_rev;
+ }
+
+ if (SVN_CLIENT__REVKIND_NEEDS_WC(revision->kind))
+ {
+ svn_revnum_t resolved_operative_rev;
+
+ SVN_ERR(svn_client__get_revision_number(
+ &resolved_operative_rev, NULL, ctx->wc_ctx,
+ local_abspath, NULL, revision, scratch_pool));
+ new_operative_rev.kind = svn_opt_revision_number;
+ new_operative_rev.value.number = resolved_operative_rev;
+ revision = &new_operative_rev;
+ }
+ }
+ else
+ {
+ /* TARGET doesn't exist in the repository, so there are
+ obviously not inherited props to be found there. */
+ local_iprops = TRUE;
+ *inherited_props = apr_array_make(
+ result_pool, 0, sizeof(svn_prop_inherited_item_t *));
+ }
+ }
+ }
- /* Get an RA plugin for this filesystem object. */
- SVN_ERR(svn_client__ra_session_from_path(&ra_session, &revnum,
- &url, target, NULL,
- peg_revision,
- revision, ctx, scratch_pool));
-
- SVN_ERR(svn_ra_check_path(ra_session, "", revnum, &kind, scratch_pool));
-
- SVN_ERR(remote_propget(*props, propname, url, "",
- kind, revnum, ra_session,
- depth, result_pool, scratch_pool));
+ /* Do we still have anything to ask the repository about? */
+ if (!local_explicit_props || !local_iprops)
+ {
+ svn_client__pathrev_t *loc;
+
+ /* Get an RA plugin for this filesystem object. */
+ SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &loc,
+ target, NULL,
+ peg_revision,
+ revision, ctx,
+ scratch_pool));
+
+ SVN_ERR(svn_ra_check_path(ra_session, "", loc->rev, &kind,
+ scratch_pool));
+
+ if (!local_explicit_props)
+ *props = apr_hash_make(result_pool);
+
+ SVN_ERR(remote_propget(!local_explicit_props ? *props : NULL,
+ !local_iprops ? inherited_props : NULL,
+ propname, loc->url, "",
+ kind, loc->rev, ra_session,
+ depth, result_pool, scratch_pool));
+ revnum = loc->rev;
+ }
}
if (actual_revnum)
@@ -898,35 +994,46 @@ svn_client_revprop_get(const char *propname,
apr_pool_t *pool)
{
svn_ra_session_t *ra_session;
+ apr_pool_t *subpool = svn_pool_create(pool);
+ svn_error_t *err;
/* Open an RA session for the URL. Note that we don't have a local
directory, nor a place to put temp files. */
- SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL, URL, NULL,
- NULL, FALSE, TRUE, ctx, pool));
+ SVN_ERR(svn_client_open_ra_session2(&ra_session, URL, NULL,
+ ctx, subpool, subpool));
/* Resolve the revision into something real, and return that to the
caller as well. */
SVN_ERR(svn_client__get_revision_number(set_rev, NULL, ctx->wc_ctx, NULL,
- ra_session, revision, pool));
+ ra_session, revision, subpool));
/* The actual RA call. */
- return svn_ra_rev_prop(ra_session, *set_rev, propname, propval, pool);
+ err = svn_ra_rev_prop(ra_session, *set_rev, propname, propval, pool);
+
+ /* Close RA session */
+ svn_pool_destroy(subpool);
+ return svn_error_trace(err);
}
-/* Call RECEIVER for the given PATH and PROP_HASH.
+/* Call RECEIVER for the given PATH and its PROP_HASH and/or
+ * INHERITED_PROPERTIES.
*
- * If PROP_HASH is null or has zero count, do nothing.
+ * If PROP_HASH is null or has zero count or INHERITED_PROPERTIES is null,
+ * then do nothing.
*/
static svn_error_t*
call_receiver(const char *path,
apr_hash_t *prop_hash,
- svn_proplist_receiver_t receiver,
+ apr_array_header_t *inherited_properties,
+ svn_proplist_receiver2_t receiver,
void *receiver_baton,
- apr_pool_t *pool)
+ apr_pool_t *scratch_pool)
{
- if (prop_hash && apr_hash_count(prop_hash))
- SVN_ERR(receiver(receiver_baton, path, prop_hash, pool));
+ if ((prop_hash && apr_hash_count(prop_hash))
+ || inherited_properties)
+ SVN_ERR(receiver(receiver_baton, path, prop_hash, inherited_properties,
+ scratch_pool));
return SVN_NO_ERROR;
}
@@ -934,20 +1041,23 @@ call_receiver(const char *path,
/* Helper for the remote case of svn_client_proplist.
*
- * Push a new 'svn_client_proplist_item_t *' item onto PROPLIST,
- * containing the properties for "TARGET_PREFIX/TARGET_RELATIVE" in
- * REVNUM, obtained using RA_LIB and SESSION. The item->node_name
- * will be "TARGET_PREFIX/TARGET_RELATIVE", and the value will be a
- * hash mapping 'const char *' property names onto 'svn_string_t *'
- * property values.
+ * If GET_EXPLICIT_PROPS is true, then call RECEIVER for paths at or under
+ * "TARGET_PREFIX/TARGET_RELATIVE@REVNUM" (obtained using RA_SESSION) which
+ * have regular properties. If GET_TARGET_INHERITED_PROPS is true, then send
+ * the target's inherited properties to the callback.
+ *
+ * The 'path' and keys for 'prop_hash' and 'inherited_prop' arguments to
+ * RECEIVER are all URLs.
*
- * Allocate the new item and its contents in POOL.
- * Do all looping, recursion, and temporary work in SCRATCHPOOL.
+ * RESULT_POOL is used to allocated the 'path', 'prop_hash', and
+ * 'inherited_prop' arguments to RECEIVER. SCRATCH_POOL is used for all
+ * other (temporary) allocations.
*
* KIND is the kind of the node at "TARGET_PREFIX/TARGET_RELATIVE".
*
* If the target is a directory, only fetch properties for the files
- * and directories at depth DEPTH.
+ * and directories at depth DEPTH. DEPTH has not effect on inherited
+ * properties.
*/
static svn_error_t *
remote_proplist(const char *target_prefix,
@@ -955,29 +1065,36 @@ remote_proplist(const char *target_prefix,
svn_node_kind_t kind,
svn_revnum_t revnum,
svn_ra_session_t *ra_session,
+ svn_boolean_t get_explicit_props,
+ svn_boolean_t get_target_inherited_props,
svn_depth_t depth,
- svn_proplist_receiver_t receiver,
+ svn_proplist_receiver2_t receiver,
void *receiver_baton,
- apr_pool_t *pool,
- apr_pool_t *scratchpool)
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
{
apr_hash_t *dirents;
- apr_hash_t *prop_hash, *final_hash;
+ apr_hash_t *prop_hash = NULL;
apr_hash_index_t *hi;
const char *target_full_url =
- svn_path_url_add_component2(target_prefix, target_relative, scratchpool);
+ svn_path_url_add_component2(target_prefix, target_relative, scratch_pool);
+ apr_array_header_t *inherited_props;
+ /* Note that we pass only the SCRATCH_POOL to svn_ra_get[dir*|file*] because
+ we'll be filtering out non-regular properties from PROP_HASH before we
+ return. */
if (kind == svn_node_dir)
{
SVN_ERR(svn_ra_get_dir2(ra_session,
(depth > svn_depth_empty) ? &dirents : NULL,
NULL, &prop_hash, target_relative, revnum,
- SVN_DIRENT_KIND, scratchpool));
+ SVN_DIRENT_KIND, scratch_pool));
}
else if (kind == svn_node_file)
{
SVN_ERR(svn_ra_get_file(ra_session, target_relative, revnum,
- NULL, NULL, &prop_hash, scratchpool));
+ NULL, NULL, &prop_hash, scratch_pool));
}
else
{
@@ -986,38 +1103,60 @@ remote_proplist(const char *target_prefix,
target_full_url);
}
- /* Filter out non-regular properties, since the RA layer returns all
- kinds. Copy regular properties keys/vals from the prop_hash
- allocated in SCRATCHPOOL to the "final" hash allocated in POOL. */
- final_hash = apr_hash_make(pool);
- for (hi = apr_hash_first(scratchpool, prop_hash);
- hi;
- hi = apr_hash_next(hi))
+ if (get_target_inherited_props)
{
- const char *name = svn__apr_hash_index_key(hi);
- apr_ssize_t klen = svn__apr_hash_index_klen(hi);
- svn_string_t *value = svn__apr_hash_index_val(hi);
- svn_prop_kind_t prop_kind;
-
- prop_kind = svn_property_kind(NULL, name);
+ const char *repos_root_url;
+
+ SVN_ERR(svn_ra_get_inherited_props(ra_session, &inherited_props,
+ target_relative, revnum,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root_url,
+ scratch_pool));
+ SVN_ERR(svn_client__iprop_relpaths_to_urls(inherited_props,
+ repos_root_url,
+ scratch_pool,
+ scratch_pool));
+ }
+ else
+ {
+ inherited_props = NULL;
+ }
- if (prop_kind == svn_prop_regular_kind)
+ if (!get_explicit_props)
+ prop_hash = NULL;
+ else
+ {
+ /* Filter out non-regular properties, since the RA layer returns all
+ kinds. Copy regular properties keys/vals from the prop_hash
+ allocated in SCRATCH_POOL to the "final" hash allocated in
+ RESULT_POOL. */
+ for (hi = apr_hash_first(scratch_pool, prop_hash);
+ hi;
+ hi = apr_hash_next(hi))
{
- name = apr_pstrdup(pool, name);
- value = svn_string_dup(value, pool);
- apr_hash_set(final_hash, name, klen, value);
+ const char *name = svn__apr_hash_index_key(hi);
+ apr_ssize_t klen = svn__apr_hash_index_klen(hi);
+ svn_prop_kind_t prop_kind;
+
+ prop_kind = svn_property_kind2(name);
+
+ if (prop_kind != svn_prop_regular_kind)
+ {
+ apr_hash_set(prop_hash, name, klen, NULL);
+ }
}
}
- SVN_ERR(call_receiver(target_full_url, final_hash, receiver, receiver_baton,
- pool));
+ SVN_ERR(call_receiver(target_full_url, prop_hash, inherited_props,
+ receiver, receiver_baton, scratch_pool));
if (depth > svn_depth_empty
+ && get_explicit_props
&& (kind == svn_node_dir) && (apr_hash_count(dirents) > 0))
{
- apr_pool_t *subpool = svn_pool_create(scratchpool);
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
- for (hi = apr_hash_first(scratchpool, dirents);
+ for (hi = apr_hash_first(scratch_pool, dirents);
hi;
hi = apr_hash_next(hi))
{
@@ -1025,10 +1164,13 @@ remote_proplist(const char *target_prefix,
svn_dirent_t *this_ent = svn__apr_hash_index_val(hi);
const char *new_target_relative;
- svn_pool_clear(subpool);
+ if (cancel_func)
+ SVN_ERR(cancel_func(cancel_baton));
+
+ svn_pool_clear(iterpool);
new_target_relative = svn_relpath_join(target_relative,
- this_name, subpool);
+ this_name, iterpool);
if (this_ent->kind == svn_node_file
|| depth > svn_depth_files)
@@ -1043,15 +1185,16 @@ remote_proplist(const char *target_prefix,
this_ent->kind,
revnum,
ra_session,
+ TRUE /* get_explicit_props */,
+ FALSE /* get_target_inherited_props */,
depth_below_here,
- receiver,
- receiver_baton,
- pool,
- subpool));
+ receiver, receiver_baton,
+ cancel_func, cancel_baton,
+ iterpool));
}
}
- svn_pool_destroy(subpool);
+ svn_pool_destroy(iterpool);
}
return SVN_NO_ERROR;
@@ -1062,8 +1205,9 @@ remote_proplist(const char *target_prefix,
struct recursive_proplist_receiver_baton
{
svn_wc_context_t *wc_ctx; /* Working copy context. */
- svn_proplist_receiver_t wrapped_receiver; /* Proplist receiver to call. */
+ svn_proplist_receiver2_t wrapped_receiver; /* Proplist receiver to call. */
void *wrapped_receiver_baton; /* Baton for the proplist receiver. */
+ apr_array_header_t *iprops;
/* Anchor, anchor_abspath pair for converting to relative paths */
const char *anchor;
@@ -1079,6 +1223,27 @@ recursive_proplist_receiver(void *baton,
{
struct recursive_proplist_receiver_baton *b = baton;
const char *path;
+ apr_array_header_t *iprops = NULL;
+
+ if (b->iprops
+ && ! strcmp(local_abspath, b->anchor_abspath))
+ {
+ /* Report iprops with the properties for the anchor */
+ iprops = b->iprops;
+ b->iprops = NULL;
+ }
+ else if (b->iprops)
+ {
+ /* No report for the root?
+ Report iprops anyway */
+
+ SVN_ERR(b->wrapped_receiver(b->wrapped_receiver_baton,
+ b->anchor ? b->anchor : b->anchor_abspath,
+ NULL /* prop_hash */,
+ b->iprops,
+ scratch_pool));
+ b->iprops = NULL;
+ }
/* Attempt to convert absolute paths to relative paths for
* presentation purposes, if needed. */
@@ -1093,117 +1258,309 @@ recursive_proplist_receiver(void *baton,
path = local_abspath;
return svn_error_trace(b->wrapped_receiver(b->wrapped_receiver_baton,
- path, props, scratch_pool));
+ path, props, iprops,
+ scratch_pool));
}
-svn_error_t *
-svn_client_proplist3(const char *path_or_url,
- const svn_opt_revision_t *peg_revision,
- const svn_opt_revision_t *revision,
- svn_depth_t depth,
- const apr_array_header_t *changelists,
- svn_proplist_receiver_t receiver,
- void *receiver_baton,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool)
-{
- const char *url;
-
- peg_revision = svn_cl__rev_default_to_head_or_working(peg_revision,
- path_or_url);
- revision = svn_cl__rev_default_to_peg(revision, peg_revision);
+/* Helper for svn_client_proplist4 when retrieving properties and/or
+ inherited properties from the repository. Except as noted below,
+ all arguments are as per svn_client_proplist4.
- if (depth == svn_depth_unknown)
- depth = svn_depth_empty;
-
- if (! svn_path_is_url(path_or_url)
- && SVN_CLIENT__REVKIND_IS_LOCAL_TO_WC(peg_revision->kind)
- && SVN_CLIENT__REVKIND_IS_LOCAL_TO_WC(revision->kind))
+ GET_EXPLICIT_PROPS controls if explicit props are retrieved. */
+static svn_error_t *
+get_remote_props(const char *path_or_url,
+ const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *revision,
+ svn_depth_t depth,
+ svn_boolean_t get_explicit_props,
+ svn_boolean_t get_target_inherited_props,
+ svn_proplist_receiver2_t receiver,
+ void *receiver_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
+{
+ svn_ra_session_t *ra_session;
+ svn_node_kind_t kind;
+ svn_opt_revision_t new_operative_rev;
+ svn_opt_revision_t new_peg_rev;
+ svn_client__pathrev_t *loc;
+
+ /* Peg or operative revisions may be WC specific for
+ PATH_OR_URL's explicit props, but still require us to
+ contact the repository for the inherited properties. */
+ if (SVN_CLIENT__REVKIND_NEEDS_WC(peg_revision->kind)
+ || SVN_CLIENT__REVKIND_NEEDS_WC(revision->kind))
{
- svn_boolean_t pristine;
- svn_node_kind_t kind;
- apr_hash_t *changelist_hash = NULL;
+ svn_revnum_t origin_rev;
+ const char *repos_relpath;
+ const char *repos_root_url;
+ const char *repos_uuid;
const char *local_abspath;
+ const char *copy_root_abspath;
+ svn_boolean_t is_copy;
- SVN_ERR(svn_dirent_get_absolute(&local_abspath, path_or_url, pool));
-
- pristine = ((revision->kind == svn_opt_revision_committed)
- || (revision->kind == svn_opt_revision_base));
-
- SVN_ERR(svn_wc_read_kind(&kind, ctx->wc_ctx, local_abspath, FALSE,
- pool));
-
- if (kind == svn_node_unknown || kind == svn_node_none)
- {
- /* svn uses SVN_ERR_UNVERSIONED_RESOURCE as warning only
- for this function. */
- return svn_error_createf(SVN_ERR_UNVERSIONED_RESOURCE, NULL,
- _("'%s' is not under version control"),
- svn_dirent_local_style(local_abspath,
- pool));
- }
+ /* Avoid assertion on the next line when somebody accidentally asks for
+ a working copy revision on a URL */
+ if (svn_path_is_url(path_or_url))
+ return svn_error_create(SVN_ERR_CLIENT_VERSIONED_PATH_REQUIRED,
+ NULL, NULL);
- if (changelists && changelists->nelts)
- SVN_ERR(svn_hash_from_cstring_keys(&changelist_hash,
- changelists, pool));
+ SVN_ERR(svn_dirent_get_absolute(&local_abspath, path_or_url,
+ scratch_pool));
- /* Fetch, recursively or not. */
- if (kind == svn_node_dir)
+ if (SVN_CLIENT__REVKIND_NEEDS_WC(peg_revision->kind))
{
- struct recursive_proplist_receiver_baton rb;
-
- rb.wc_ctx = ctx->wc_ctx;
- rb.wrapped_receiver = receiver;
- rb.wrapped_receiver_baton = receiver_baton;
-
- if (strcmp(path_or_url, local_abspath) != 0)
+ SVN_ERR(svn_wc__node_get_origin(&is_copy,
+ &origin_rev,
+ &repos_relpath,
+ &repos_root_url,
+ &repos_uuid,
+ &copy_root_abspath,
+ ctx->wc_ctx,
+ local_abspath,
+ FALSE, /* scan_deleted */
+ scratch_pool,
+ scratch_pool));
+ if (repos_relpath)
{
- rb.anchor = path_or_url;
- rb.anchor_abspath = local_abspath;
+ path_or_url =
+ svn_path_url_add_component2(repos_root_url,
+ repos_relpath,
+ scratch_pool);
+ if (SVN_CLIENT__REVKIND_NEEDS_WC(peg_revision->kind))
+ {
+ svn_revnum_t resolved_peg_rev;
+
+ SVN_ERR(svn_client__get_revision_number(&resolved_peg_rev,
+ NULL, ctx->wc_ctx,
+ local_abspath, NULL,
+ peg_revision,
+ scratch_pool));
+ new_peg_rev.kind = svn_opt_revision_number;
+ new_peg_rev.value.number = resolved_peg_rev;
+ peg_revision = &new_peg_rev;
+ }
+
+ if (SVN_CLIENT__REVKIND_NEEDS_WC(revision->kind))
+ {
+ svn_revnum_t resolved_operative_rev;
+
+ SVN_ERR(svn_client__get_revision_number(
+ &resolved_operative_rev,
+ NULL, ctx->wc_ctx,
+ local_abspath, NULL,
+ revision,
+ scratch_pool));
+ new_operative_rev.kind = svn_opt_revision_number;
+ new_operative_rev.value.number = resolved_operative_rev;
+ revision = &new_operative_rev;
+ }
}
else
{
- rb.anchor = NULL;
- rb.anchor_abspath = NULL;
+ /* PATH_OR_URL doesn't exist in the repository, so there are
+ obviously not inherited props to be found there. If we
+ aren't looking for explicit props then we're done. */
+ if (!get_explicit_props)
+ return SVN_NO_ERROR;
}
+ }
+ }
+
+ /* Get an RA session for this URL. */
+ SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &loc,
+ path_or_url, NULL,
+ peg_revision,
+ revision, ctx,
+ scratch_pool));
+
+ SVN_ERR(svn_ra_check_path(ra_session, "", loc->rev, &kind,
+ scratch_pool));
+
+ SVN_ERR(remote_proplist(loc->url, "", kind, loc->rev, ra_session,
+ get_explicit_props,
+ get_target_inherited_props,
+ depth, receiver, receiver_baton,
+ ctx->cancel_func, ctx->cancel_baton,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
- SVN_ERR(svn_wc__prop_list_recursive(ctx->wc_ctx, local_abspath, NULL,
- depth,
- FALSE, pristine, changelists,
- recursive_proplist_receiver, &rb,
- ctx->cancel_func,
- ctx->cancel_baton, pool));
+/* Helper for svn_client_proplist4 when retrieving properties and
+ possibly inherited properties from the WC. All arguments are as
+ per svn_client_proplist4. */
+static svn_error_t *
+get_local_props(const char *path_or_url,
+ const svn_opt_revision_t *revision,
+ svn_depth_t depth,
+ const apr_array_header_t *changelists,
+ svn_boolean_t get_target_inherited_props,
+ svn_proplist_receiver2_t receiver,
+ void *receiver_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
+{
+ svn_boolean_t pristine;
+ svn_node_kind_t kind;
+ apr_hash_t *changelist_hash = NULL;
+ const char *local_abspath;
+ apr_array_header_t *iprops = NULL;
+
+ SVN_ERR(svn_dirent_get_absolute(&local_abspath, path_or_url,
+ scratch_pool));
+
+ pristine = ((revision->kind == svn_opt_revision_committed)
+ || (revision->kind == svn_opt_revision_base));
+
+ SVN_ERR(svn_wc_read_kind2(&kind, ctx->wc_ctx, local_abspath,
+ pristine, FALSE, scratch_pool));
+
+ if (kind == svn_node_unknown || kind == svn_node_none)
+ {
+ /* svn uses SVN_ERR_UNVERSIONED_RESOURCE as warning only
+ for this function. */
+ return svn_error_createf(SVN_ERR_UNVERSIONED_RESOURCE, NULL,
+ _("'%s' is not under version control"),
+ svn_dirent_local_style(local_abspath,
+ scratch_pool));
+ }
+
+ if (get_target_inherited_props)
+ {
+ const char *repos_root_url;
+
+ SVN_ERR(svn_wc__get_iprops(&iprops, ctx->wc_ctx, local_abspath,
+ NULL, scratch_pool, scratch_pool));
+ SVN_ERR(svn_client_get_repos_root(&repos_root_url, NULL, local_abspath,
+ ctx, scratch_pool, scratch_pool));
+ SVN_ERR(svn_client__iprop_relpaths_to_urls(iprops, repos_root_url,
+ scratch_pool,
+ scratch_pool));
+ }
+
+ if (changelists && changelists->nelts)
+ SVN_ERR(svn_hash_from_cstring_keys(&changelist_hash,
+ changelists, scratch_pool));
+
+ /* Fetch, recursively or not. */
+ if (kind == svn_node_dir)
+ {
+ struct recursive_proplist_receiver_baton rb;
+
+ rb.wc_ctx = ctx->wc_ctx;
+ rb.wrapped_receiver = receiver;
+ rb.wrapped_receiver_baton = receiver_baton;
+ rb.iprops = iprops;
+ rb.anchor_abspath = local_abspath;
+
+ if (strcmp(path_or_url, local_abspath) != 0)
+ {
+ rb.anchor = path_or_url;
}
- else if (svn_wc__changelist_match(ctx->wc_ctx, local_abspath,
- changelist_hash, pool))
+ else
{
- apr_hash_t *hash;
+ rb.anchor = NULL;
+ }
- SVN_ERR(pristine_or_working_props(&hash, ctx->wc_ctx, local_abspath,
- pristine, pool, pool));
- SVN_ERR(call_receiver(path_or_url, hash,
- receiver, receiver_baton, pool));
+ SVN_ERR(svn_wc__prop_list_recursive(ctx->wc_ctx, local_abspath, NULL,
+ depth, pristine, changelists,
+ recursive_proplist_receiver, &rb,
+ ctx->cancel_func, ctx->cancel_baton,
+ scratch_pool));
+ if (rb.iprops)
+ {
+ /* We didn't report for the root. Report iprops anyway */
+ SVN_ERR(call_receiver(path_or_url, NULL /* props */, rb.iprops,
+ receiver, receiver_baton, scratch_pool));
}
}
- else /* remote target */
+ else if (svn_wc__changelist_match(ctx->wc_ctx, local_abspath,
+ changelist_hash, scratch_pool))
{
- svn_ra_session_t *ra_session;
- svn_node_kind_t kind;
- apr_pool_t *subpool = svn_pool_create(pool);
- svn_revnum_t revnum;
+ apr_hash_t *props;
+
+ if (pristine)
+ SVN_ERR(svn_wc_get_pristine_props(&props,
+ ctx->wc_ctx, local_abspath,
+ scratch_pool, scratch_pool));
+ else
+ {
+ svn_error_t *err;
+
+ err = svn_wc_prop_list2(&props, ctx->wc_ctx, local_abspath,
+ scratch_pool, scratch_pool);
+
+
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_WC_PATH_UNEXPECTED_STATUS)
+ return svn_error_trace(err);
+ /* As svn_wc_prop_list2() doesn't return NULL for locally-deleted
+ let's do that here. */
+ svn_error_clear(err);
+ props = apr_hash_make(scratch_pool);
+ }
+ }
+
+ SVN_ERR(call_receiver(path_or_url, props, iprops,
+ receiver, receiver_baton, scratch_pool));
- /* Get an RA session for this URL. */
- SVN_ERR(svn_client__ra_session_from_path(&ra_session, &revnum,
- &url, path_or_url, NULL,
- peg_revision,
- revision, ctx, pool));
+ }
+ return SVN_NO_ERROR;
+}
- SVN_ERR(svn_ra_check_path(ra_session, "", revnum, &kind, pool));
+svn_error_t *
+svn_client_proplist4(const char *path_or_url,
+ const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *revision,
+ svn_depth_t depth,
+ const apr_array_header_t *changelists,
+ svn_boolean_t get_target_inherited_props,
+ svn_proplist_receiver2_t receiver,
+ void *receiver_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
+{
+ svn_boolean_t local_explicit_props;
+ svn_boolean_t local_iprops;
- SVN_ERR(remote_proplist(url, "", kind, revnum, ra_session, depth,
- receiver, receiver_baton, pool, subpool));
- svn_pool_destroy(subpool);
+ peg_revision = svn_cl__rev_default_to_head_or_working(peg_revision,
+ path_or_url);
+ revision = svn_cl__rev_default_to_peg(revision, peg_revision);
+
+ if (depth == svn_depth_unknown)
+ depth = svn_depth_empty;
+
+ /* Are explicit props available locally? */
+ local_explicit_props =
+ (! svn_path_is_url(path_or_url)
+ && SVN_CLIENT__REVKIND_IS_LOCAL_TO_WC(peg_revision->kind)
+ && SVN_CLIENT__REVKIND_IS_LOCAL_TO_WC(revision->kind));
+
+ /* If we want iprops are they available locally? */
+ local_iprops =
+ (get_target_inherited_props /* We want iprops */
+ && local_explicit_props /* No local explicit props means no local iprops. */
+ && (peg_revision->kind == svn_opt_revision_working
+ || peg_revision->kind == svn_opt_revision_unspecified )
+ && (revision->kind == svn_opt_revision_working
+ || revision->kind == svn_opt_revision_unspecified ));
+
+ if ((get_target_inherited_props && !local_iprops)
+ || !local_explicit_props)
+ {
+ SVN_ERR(get_remote_props(path_or_url, peg_revision, revision, depth,
+ !local_explicit_props,
+ (get_target_inherited_props && !local_iprops),
+ receiver, receiver_baton, ctx, scratch_pool));
+ }
+
+ if (local_explicit_props)
+ {
+ SVN_ERR(get_local_props(path_or_url, revision, depth, changelists,
+ local_iprops, receiver, receiver_baton, ctx,
+ scratch_pool));
}
return SVN_NO_ERROR;
@@ -1219,20 +1576,23 @@ svn_client_revprop_list(apr_hash_t **props,
{
svn_ra_session_t *ra_session;
apr_hash_t *proplist;
+ apr_pool_t *subpool = svn_pool_create(pool);
+ svn_error_t *err;
/* Open an RA session for the URL. Note that we don't have a local
directory, nor a place to put temp files. */
- SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL, URL, NULL,
- NULL, FALSE, TRUE, ctx, pool));
+ SVN_ERR(svn_client_open_ra_session2(&ra_session, URL, NULL,
+ ctx, subpool, subpool));
/* Resolve the revision into something real, and return that to the
caller as well. */
SVN_ERR(svn_client__get_revision_number(set_rev, NULL, ctx->wc_ctx, NULL,
- ra_session, revision, pool));
+ ra_session, revision, subpool));
/* The actual RA call. */
- SVN_ERR(svn_ra_rev_proplist(ra_session, *set_rev, &proplist, pool));
+ err = svn_ra_rev_proplist(ra_session, *set_rev, &proplist, pool);
*props = proplist;
- return SVN_NO_ERROR;
+ svn_pool_destroy(subpool); /* Close RA session */
+ return svn_error_trace(err);
}
diff --git a/subversion/libsvn_client/ra.c b/subversion/libsvn_client/ra.c
index 248876f..a0d4cea 100644
--- a/subversion/libsvn_client/ra.c
+++ b/subversion/libsvn_client/ra.c
@@ -26,6 +26,7 @@
#include <apr_pools.h>
#include "svn_error.h"
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_string.h"
#include "svn_sorts.h"
@@ -40,6 +41,7 @@
#include "svn_private_config.h"
#include "private/svn_wc_private.h"
+#include "private/svn_client_private.h"
/* This is the baton that we pass svn_ra_open3(), and is associated with
@@ -51,9 +53,15 @@ typedef struct callback_baton_t
this base directory. */
const char *base_dir_abspath;
- /* When true, makes sure temporary files are created
- outside the working copy. */
- svn_boolean_t read_only_wc;
+ /* TEMPORARY: Is 'base_dir_abspath' a versioned path? cmpilato
+ suspects that the commit-to-multiple-disjoint-working-copies
+ code is getting this all wrong, sometimes passing an unversioned
+ (or versioned in a foreign wc) path here which sorta kinda
+ happens to work most of the time but is ultimately incorrect. */
+ svn_boolean_t base_dir_isversioned;
+
+ /* Used as wri_abspath for obtaining access to the pristine store */
+ const char *wcroot_abspath;
/* An array of svn_client_commit_item3_t * structures, present only
during working copy commits. */
@@ -62,9 +70,6 @@ typedef struct callback_baton_t
/* A client context. */
svn_client_ctx_t *ctx;
- /* The pool to use for session-related items. */
- apr_pool_t *pool;
-
} callback_baton_t;
@@ -153,7 +158,7 @@ push_wc_prop(void *baton,
if (! cb->commit_items)
return svn_error_createf
(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
- _("Attempt to set wc property '%s' on '%s' in a non-commit operation"),
+ _("Attempt to set wcprop '%s' on '%s' in a non-commit operation"),
name, svn_dirent_local_style(relpath, pool));
for (i = 0; i < cb->commit_items->nelts; i++)
@@ -240,6 +245,30 @@ invalidate_wc_props(void *baton,
}
+/* This implements the `svn_ra_get_wc_contents_func_t' interface. */
+static svn_error_t *
+get_wc_contents(void *baton,
+ svn_stream_t **contents,
+ const svn_checksum_t *checksum,
+ apr_pool_t *pool)
+{
+ callback_baton_t *cb = baton;
+
+ if (! cb->wcroot_abspath)
+ {
+ *contents = NULL;
+ return SVN_NO_ERROR;
+ }
+
+ return svn_error_trace(
+ svn_wc__get_pristine_contents_by_checksum(contents,
+ cb->ctx->wc_ctx,
+ cb->wcroot_abspath,
+ checksum,
+ pool, pool));
+}
+
+
static svn_error_t *
cancel_callback(void *baton)
{
@@ -267,41 +296,47 @@ svn_client__open_ra_session_internal(svn_ra_session_t **ra_session,
const char *base_url,
const char *base_dir_abspath,
const apr_array_header_t *commit_items,
- svn_boolean_t use_admin,
- svn_boolean_t read_only_wc,
+ svn_boolean_t write_dav_props,
+ svn_boolean_t read_dav_props,
svn_client_ctx_t *ctx,
- apr_pool_t *pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- svn_ra_callbacks2_t *cbtable = apr_pcalloc(pool, sizeof(*cbtable));
- callback_baton_t *cb = apr_pcalloc(pool, sizeof(*cb));
+ svn_ra_callbacks2_t *cbtable;
+ callback_baton_t *cb = apr_pcalloc(result_pool, sizeof(*cb));
const char *uuid = NULL;
- SVN_ERR_ASSERT(base_dir_abspath != NULL || ! use_admin);
+ SVN_ERR_ASSERT(!write_dav_props || read_dav_props);
+ SVN_ERR_ASSERT(!read_dav_props || base_dir_abspath != NULL);
SVN_ERR_ASSERT(base_dir_abspath == NULL
|| svn_dirent_is_absolute(base_dir_abspath));
+ SVN_ERR(svn_ra_create_callbacks(&cbtable, result_pool));
cbtable->open_tmp_file = open_tmp_file;
- cbtable->get_wc_prop = use_admin ? get_wc_prop : NULL;
- cbtable->set_wc_prop = read_only_wc ? NULL : set_wc_prop;
+ cbtable->get_wc_prop = read_dav_props ? get_wc_prop : NULL;
+ cbtable->set_wc_prop = (write_dav_props && read_dav_props)
+ ? set_wc_prop : NULL;
cbtable->push_wc_prop = commit_items ? push_wc_prop : NULL;
- cbtable->invalidate_wc_props = read_only_wc ? NULL : invalidate_wc_props;
+ cbtable->invalidate_wc_props = (write_dav_props && read_dav_props)
+ ? invalidate_wc_props : NULL;
cbtable->auth_baton = ctx->auth_baton; /* new-style */
cbtable->progress_func = ctx->progress_func;
cbtable->progress_baton = ctx->progress_baton;
cbtable->cancel_func = ctx->cancel_func ? cancel_callback : NULL;
cbtable->get_client_string = get_client_string;
+ if (base_dir_abspath)
+ cbtable->get_wc_contents = get_wc_contents;
- cb->base_dir_abspath = base_dir_abspath;
- cb->read_only_wc = read_only_wc;
- cb->pool = pool;
cb->commit_items = commit_items;
cb->ctx = ctx;
- if (base_dir_abspath)
+ if (base_dir_abspath && (read_dav_props || write_dav_props))
{
- svn_error_t *err = svn_wc__node_get_repos_info(NULL, &uuid, ctx->wc_ctx,
+ svn_error_t *err = svn_wc__node_get_repos_info(NULL, NULL, NULL, &uuid,
+ ctx->wc_ctx,
base_dir_abspath,
- pool, pool);
+ result_pool,
+ scratch_pool);
if (err && (err->apr_err == SVN_ERR_WC_NOT_WORKING_COPY
|| err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND
@@ -311,7 +346,29 @@ svn_client__open_ra_session_internal(svn_ra_session_t **ra_session,
uuid = NULL;
}
else
- SVN_ERR(err);
+ {
+ SVN_ERR(err);
+ cb->base_dir_isversioned = TRUE;
+ }
+ cb->base_dir_abspath = apr_pstrdup(result_pool, base_dir_abspath);
+ }
+
+ if (base_dir_abspath)
+ {
+ svn_error_t *err = svn_wc__get_wcroot(&cb->wcroot_abspath,
+ ctx->wc_ctx, base_dir_abspath,
+ result_pool, scratch_pool);
+
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_WC_NOT_WORKING_COPY
+ && err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND
+ && err->apr_err != SVN_ERR_WC_UPGRADE_REQUIRED)
+ return svn_error_trace(err);
+
+ svn_error_clear(err);
+ cb->wcroot_abspath = NULL;
+ }
}
/* If the caller allows for auto-following redirections, and the
@@ -320,7 +377,7 @@ svn_client__open_ra_session_internal(svn_ra_session_t **ra_session,
attempts. */
if (corrected_url)
{
- apr_hash_t *attempted = apr_hash_make(pool);
+ apr_hash_t *attempted = apr_hash_make(scratch_pool);
int attempts_left = SVN_CLIENT__MAX_REDIRECT_ATTEMPTS;
*corrected_url = NULL;
@@ -332,7 +389,8 @@ svn_client__open_ra_session_internal(svn_ra_session_t **ra_session,
don't accept corrected URLs from the RA provider. */
SVN_ERR(svn_ra_open4(ra_session,
attempts_left == 0 ? NULL : &corrected,
- base_url, uuid, cbtable, cb, ctx->config, pool));
+ base_url, uuid, cbtable, cb, ctx->config,
+ result_pool));
/* No error and no corrected URL? We're done here. */
if (! corrected)
@@ -343,117 +401,98 @@ svn_client__open_ra_session_internal(svn_ra_session_t **ra_session,
{
svn_wc_notify_t *notify =
svn_wc_create_notify_url(corrected,
- svn_wc_notify_url_redirect, pool);
- (*ctx->notify_func2)(ctx->notify_baton2, notify, pool);
+ svn_wc_notify_url_redirect,
+ scratch_pool);
+ (*ctx->notify_func2)(ctx->notify_baton2, notify, scratch_pool);
}
/* Our caller will want to know what our final corrected URL was. */
*corrected_url = corrected;
/* Make sure we've not attempted this URL before. */
- if (apr_hash_get(attempted, corrected, APR_HASH_KEY_STRING))
+ if (svn_hash_gets(attempted, corrected))
return svn_error_createf(SVN_ERR_CLIENT_CYCLE_DETECTED, NULL,
_("Redirect cycle detected for URL '%s'"),
corrected);
/* Remember this CORRECTED_URL so we don't wind up in a loop. */
- apr_hash_set(attempted, corrected, APR_HASH_KEY_STRING, (void *)1);
+ svn_hash_sets(attempted, corrected, (void *)1);
base_url = corrected;
}
}
else
{
SVN_ERR(svn_ra_open4(ra_session, NULL, base_url,
- uuid, cbtable, cb, ctx->config, pool));
+ uuid, cbtable, cb, ctx->config, result_pool));
}
return SVN_NO_ERROR;
- }
+}
#undef SVN_CLIENT__MAX_REDIRECT_ATTEMPTS
svn_error_t *
-svn_client_open_ra_session(svn_ra_session_t **session,
- const char *url,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool)
+svn_client_open_ra_session2(svn_ra_session_t **session,
+ const char *url,
+ const char *wri_abspath,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
return svn_error_trace(
svn_client__open_ra_session_internal(session, NULL, url,
- NULL, NULL, FALSE, TRUE,
- ctx, pool));
+ wri_abspath, NULL,
+ FALSE, FALSE,
+ ctx, result_pool,
+ scratch_pool));
}
-
svn_error_t *
-svn_client_uuid_from_url(const char **uuid,
- const char *url,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool)
+svn_client__resolve_rev_and_url(svn_client__pathrev_t **resolved_loc_p,
+ svn_ra_session_t *ra_session,
+ const char *path_or_url,
+ const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *revision,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
{
- svn_ra_session_t *ra_session;
- apr_pool_t *subpool = svn_pool_create(pool);
-
- /* use subpool to create a temporary RA session */
- SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL, url,
- NULL, /* no base dir */
- NULL, FALSE, TRUE,
- ctx, subpool));
+ svn_opt_revision_t peg_rev = *peg_revision;
+ svn_opt_revision_t start_rev = *revision;
+ const char *url;
+ svn_revnum_t rev;
- SVN_ERR(svn_ra_get_uuid2(ra_session, uuid, pool));
+ /* Default revisions: peg -> working or head; operative -> peg. */
+ SVN_ERR(svn_opt_resolve_revisions(&peg_rev, &start_rev,
+ svn_path_is_url(path_or_url),
+ TRUE /* notice_local_mods */,
+ pool));
- /* destroy the RA session */
- svn_pool_destroy(subpool);
+ /* Run the history function to get the object's (possibly
+ different) url in REVISION. */
+ SVN_ERR(svn_client__repos_locations(&url, &rev, NULL, NULL,
+ ra_session, path_or_url, &peg_rev,
+ &start_rev, NULL, ctx, pool));
+ SVN_ERR(svn_client__pathrev_create_with_session(resolved_loc_p,
+ ra_session, rev, url, pool));
return SVN_NO_ERROR;
}
-
-svn_error_t *
-svn_client_uuid_from_path2(const char **uuid,
- const char *local_abspath,
- svn_client_ctx_t *ctx,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- return svn_error_trace(
- svn_wc__node_get_repos_info(NULL, uuid, ctx->wc_ctx, local_abspath,
- result_pool, scratch_pool));
-}
-
-
-
-
-/* Convert a path or URL for display: if it is a local path, convert it to
- * the local path style; if it is a URL, return it unchanged. */
-static const char *
-path_or_url_local_style(const char *path_or_url,
- apr_pool_t *pool)
-{
- if (svn_path_is_url(path_or_url))
- return path_or_url;
- return svn_dirent_local_style(path_or_url, pool);
-}
-
svn_error_t *
-svn_client__ra_session_from_path(svn_ra_session_t **ra_session_p,
- svn_revnum_t *rev_p,
- const char **url_p,
- const char *path_or_url,
- const char *base_dir_abspath,
- const svn_opt_revision_t *peg_revision_p,
- const svn_opt_revision_t *revision,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool)
+svn_client__ra_session_from_path2(svn_ra_session_t **ra_session_p,
+ svn_client__pathrev_t **resolved_loc_p,
+ const char *path_or_url,
+ const char *base_dir_abspath,
+ const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *revision,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
{
svn_ra_session_t *ra_session;
- const char *initial_url, *url;
- svn_opt_revision_t *good_rev;
- svn_opt_revision_t peg_revision, start_rev;
- svn_opt_revision_t dead_end_rev;
- svn_opt_revision_t *ignored_rev;
- svn_revnum_t rev;
- const char *ignored_url, *corrected_url;
+ const char *initial_url;
+ const char *corrected_url;
+ svn_client__pathrev_t *resolved_loc;
+ const char *wri_abspath;
SVN_ERR(svn_client_url_from_path2(&initial_url, path_or_url, ctx, pool,
pool));
@@ -461,48 +500,36 @@ svn_client__ra_session_from_path(svn_ra_session_t **ra_session_p,
return svn_error_createf(SVN_ERR_ENTRY_MISSING_URL, NULL,
_("'%s' has no URL"), path_or_url);
- start_rev = *revision;
- peg_revision = *peg_revision_p;
- SVN_ERR(svn_opt_resolve_revisions(&peg_revision, &start_rev,
- svn_path_is_url(path_or_url),
- TRUE,
- pool));
+ if (base_dir_abspath)
+ wri_abspath = base_dir_abspath;
+ else if (!svn_path_is_url(path_or_url))
+ SVN_ERR(svn_dirent_get_absolute(&wri_abspath, path_or_url, pool));
+ else
+ wri_abspath = NULL;
SVN_ERR(svn_client__open_ra_session_internal(&ra_session, &corrected_url,
initial_url,
- base_dir_abspath, NULL,
+ wri_abspath,
+ NULL /* commit_items */,
base_dir_abspath != NULL,
- FALSE, ctx, pool));
+ base_dir_abspath != NULL,
+ ctx, pool, pool));
/* If we got a CORRECTED_URL, we'll want to refer to that as the
URL-ized form of PATH_OR_URL from now on. */
if (corrected_url && svn_path_is_url(path_or_url))
path_or_url = corrected_url;
- dead_end_rev.kind = svn_opt_revision_unspecified;
-
- /* Run the history function to get the object's (possibly
- different) url in REVISION. */
- SVN_ERR(svn_client__repos_locations(&url, &good_rev,
- &ignored_url, &ignored_rev,
- ra_session,
- path_or_url, &peg_revision,
- /* search range: */
- &start_rev, &dead_end_rev,
- ctx, pool));
+ SVN_ERR(svn_client__resolve_rev_and_url(&resolved_loc, ra_session,
+ path_or_url, peg_revision, revision,
+ ctx, pool));
/* Make the session point to the real URL. */
- SVN_ERR(svn_ra_reparent(ra_session, url, pool));
-
- /* Resolve good_rev into a real revnum. */
- if (good_rev->kind == svn_opt_revision_unspecified)
- good_rev->kind = svn_opt_revision_head;
- SVN_ERR(svn_client__get_revision_number(&rev, NULL, ctx->wc_ctx, url,
- ra_session, good_rev, pool));
+ SVN_ERR(svn_ra_reparent(ra_session, resolved_loc->url, pool));
*ra_session_p = ra_session;
- *rev_p = rev;
- *url_p = url;
+ if (resolved_loc_p)
+ *resolved_loc_p = resolved_loc;
return SVN_NO_ERROR;
}
@@ -514,7 +541,6 @@ svn_client__ensure_ra_session_url(const char **old_session_url,
const char *session_url,
apr_pool_t *pool)
{
- *old_session_url = NULL;
SVN_ERR(svn_ra_get_session_url(ra_session, old_session_url, pool));
if (! session_url)
SVN_ERR(svn_ra_get_repos_root2(ra_session, &session_url, pool));
@@ -565,7 +591,7 @@ compare_segments(const void *a, const void *b)
svn_error_t *
svn_client__repos_location_segments(apr_array_header_t **segments,
svn_ra_session_t *ra_session,
- const char *path,
+ const char *url,
svn_revnum_t peg_revision,
svn_revnum_t start_revision,
svn_revnum_t end_revision,
@@ -573,25 +599,139 @@ svn_client__repos_location_segments(apr_array_header_t **segments,
apr_pool_t *pool)
{
struct gls_receiver_baton_t gls_receiver_baton;
+ const char *old_session_url;
+ svn_error_t *err;
+
*segments = apr_array_make(pool, 8, sizeof(svn_location_segment_t *));
gls_receiver_baton.segments = *segments;
gls_receiver_baton.ctx = ctx;
gls_receiver_baton.pool = pool;
- SVN_ERR(svn_ra_get_location_segments(ra_session, path, peg_revision,
- start_revision, end_revision,
- gls_receiver, &gls_receiver_baton,
- pool));
+ SVN_ERR(svn_client__ensure_ra_session_url(&old_session_url, ra_session,
+ url, pool));
+ err = svn_ra_get_location_segments(ra_session, "", peg_revision,
+ start_revision, end_revision,
+ gls_receiver, &gls_receiver_baton,
+ pool);
+ SVN_ERR(svn_error_compose_create(
+ err, svn_ra_reparent(ra_session, old_session_url, pool)));
qsort((*segments)->elts, (*segments)->nelts,
(*segments)->elt_size, compare_segments);
return SVN_NO_ERROR;
}
+/* Set *START_URL and *END_URL to the URLs that the object URL@PEG_REVNUM
+ * had in revisions START_REVNUM and END_REVNUM. Return an error if the
+ * node cannot be traced back to one of the requested revisions.
+ *
+ * START_URL and/or END_URL may be NULL if not wanted. START_REVNUM and
+ * END_REVNUM must be valid revision numbers except that END_REVNUM may
+ * be SVN_INVALID_REVNUM if END_URL is NULL.
+ *
+ * RA_SESSION is an open RA session parented at URL.
+ */
+static svn_error_t *
+repos_locations(const char **start_url,
+ const char **end_url,
+ svn_ra_session_t *ra_session,
+ const char *url,
+ svn_revnum_t peg_revnum,
+ svn_revnum_t start_revnum,
+ svn_revnum_t end_revnum,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ const char *repos_url, *start_path, *end_path;
+ apr_array_header_t *revs;
+ apr_hash_t *rev_locs;
+
+ SVN_ERR_ASSERT(peg_revnum != SVN_INVALID_REVNUM);
+ SVN_ERR_ASSERT(start_revnum != SVN_INVALID_REVNUM);
+ SVN_ERR_ASSERT(end_revnum != SVN_INVALID_REVNUM || end_url == NULL);
+
+ /* Avoid a network request in the common easy case. */
+ if (start_revnum == peg_revnum
+ && (end_revnum == peg_revnum || end_revnum == SVN_INVALID_REVNUM))
+ {
+ if (start_url)
+ *start_url = apr_pstrdup(result_pool, url);
+ if (end_url)
+ *end_url = apr_pstrdup(result_pool, url);
+ return SVN_NO_ERROR;
+ }
+
+ SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_url, scratch_pool));
+
+ revs = apr_array_make(scratch_pool, 2, sizeof(svn_revnum_t));
+ APR_ARRAY_PUSH(revs, svn_revnum_t) = start_revnum;
+ if (end_revnum != start_revnum && end_revnum != SVN_INVALID_REVNUM)
+ APR_ARRAY_PUSH(revs, svn_revnum_t) = end_revnum;
+
+ SVN_ERR(svn_ra_get_locations(ra_session, &rev_locs, "", peg_revnum,
+ revs, scratch_pool));
+
+ /* We'd better have all the paths we were looking for! */
+ if (start_url)
+ {
+ start_path = apr_hash_get(rev_locs, &start_revnum, sizeof(svn_revnum_t));
+ if (! start_path)
+ return svn_error_createf
+ (SVN_ERR_CLIENT_UNRELATED_RESOURCES, NULL,
+ _("Unable to find repository location for '%s' in revision %ld"),
+ url, start_revnum);
+ *start_url = svn_path_url_add_component2(repos_url, start_path + 1,
+ result_pool);
+ }
+
+ if (end_url)
+ {
+ end_path = apr_hash_get(rev_locs, &end_revnum, sizeof(svn_revnum_t));
+ if (! end_path)
+ return svn_error_createf
+ (SVN_ERR_CLIENT_UNRELATED_RESOURCES, NULL,
+ _("The location for '%s' for revision %ld does not exist in the "
+ "repository or refers to an unrelated object"),
+ url, end_revnum);
+
+ *end_url = svn_path_url_add_component2(repos_url, end_path + 1,
+ result_pool);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_client__repos_location(svn_client__pathrev_t **op_loc_p,
+ svn_ra_session_t *ra_session,
+ const svn_client__pathrev_t *peg_loc,
+ svn_revnum_t op_revnum,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ const char *old_session_url;
+ const char *op_url;
+ svn_error_t *err;
+
+ SVN_ERR(svn_client__ensure_ra_session_url(&old_session_url, ra_session,
+ peg_loc->url, scratch_pool));
+ err = repos_locations(&op_url, NULL, ra_session,
+ peg_loc->url, peg_loc->rev,
+ op_revnum, SVN_INVALID_REVNUM,
+ result_pool, scratch_pool);
+ SVN_ERR(svn_error_compose_create(
+ err, svn_ra_reparent(ra_session, old_session_url, scratch_pool)));
+
+ *op_loc_p = svn_client__pathrev_create(peg_loc->repos_root_url,
+ peg_loc->repos_uuid,
+ op_revnum, op_url, result_pool);
+ return SVN_NO_ERROR;
+}
svn_error_t *
svn_client__repos_locations(const char **start_url,
- svn_opt_revision_t **start_revision,
+ svn_revnum_t *start_revision,
const char **end_url,
- svn_opt_revision_t **end_revision,
+ svn_revnum_t *end_revision,
svn_ra_session_t *ra_session,
const char *path,
const svn_opt_revision_t *revision,
@@ -600,16 +740,11 @@ svn_client__repos_locations(const char **start_url,
svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
- const char *repos_url;
const char *url;
- const char *start_path = NULL;
- const char *end_path = NULL;
const char *local_abspath_or_url;
svn_revnum_t peg_revnum = SVN_INVALID_REVNUM;
svn_revnum_t start_revnum, end_revnum;
svn_revnum_t youngest_rev = SVN_INVALID_REVNUM;
- apr_array_header_t *revs;
- apr_hash_t *rev_locs;
apr_pool_t *subpool = svn_pool_create(pool);
/* Ensure that we are given some real revision data to work with.
@@ -619,9 +754,17 @@ svn_client__repos_locations(const char **start_url,
|| start->kind == svn_opt_revision_unspecified)
return svn_error_create(SVN_ERR_CLIENT_BAD_REVISION, NULL, NULL);
- /* Check to see if this is schedule add with history working copy
- path. If it is, then we need to use the URL and peg revision of
- the copyfrom information. */
+ if (end == NULL)
+ {
+ static const svn_opt_revision_t unspecified_rev
+ = { svn_opt_revision_unspecified, { 0 } };
+
+ end = &unspecified_rev;
+ }
+
+ /* Determine LOCAL_ABSPATH_OR_URL, URL, and possibly PEG_REVNUM.
+ If we are looking at the working version of a WC path that is scheduled
+ as a copy, then we need to use the copy-from URL and peg revision. */
if (! svn_path_is_url(path))
{
SVN_ERR(svn_dirent_get_absolute(&local_abspath_or_url, path, subpool));
@@ -682,9 +825,8 @@ svn_client__repos_locations(const char **start_url,
/* Open a RA session to this URL if we don't have one already. */
if (! ra_session)
- SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL, url, NULL,
- NULL, FALSE, TRUE,
- ctx, subpool));
+ SVN_ERR(svn_client_open_ra_session2(&ra_session, url, NULL,
+ ctx, subpool, subpool));
/* Resolve the opt_revision_ts. */
if (peg_revnum == SVN_INVALID_REVNUM)
@@ -703,110 +845,53 @@ svn_client__repos_locations(const char **start_url,
ra_session, end, pool));
/* Set the output revision variables. */
- *start_revision = apr_pcalloc(pool, sizeof(**start_revision));
- (*start_revision)->kind = svn_opt_revision_number;
- (*start_revision)->value.number = start_revnum;
- if (end->kind != svn_opt_revision_unspecified)
+ if (start_revision)
{
- *end_revision = apr_pcalloc(pool, sizeof(**end_revision));
- (*end_revision)->kind = svn_opt_revision_number;
- (*end_revision)->value.number = end_revnum;
+ *start_revision = start_revnum;
}
-
- if (start_revnum == peg_revnum && end_revnum == peg_revnum)
+ if (end_revision && end->kind != svn_opt_revision_unspecified)
{
- /* Avoid a network request in the common easy case. */
- *start_url = url;
- if (end->kind != svn_opt_revision_unspecified)
- *end_url = url;
- svn_pool_destroy(subpool);
- return SVN_NO_ERROR;
+ *end_revision = end_revnum;
}
- SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_url, subpool));
-
- revs = apr_array_make(subpool, 2, sizeof(svn_revnum_t));
- APR_ARRAY_PUSH(revs, svn_revnum_t) = start_revnum;
- if (end_revnum != start_revnum)
- APR_ARRAY_PUSH(revs, svn_revnum_t) = end_revnum;
-
- SVN_ERR(svn_ra_get_locations(ra_session, &rev_locs, "", peg_revnum,
- revs, subpool));
-
- /* We'd better have all the paths we were looking for! */
- start_path = apr_hash_get(rev_locs, &start_revnum, sizeof(svn_revnum_t));
- if (! start_path)
- return svn_error_createf
- (SVN_ERR_CLIENT_UNRELATED_RESOURCES, NULL,
- _("Unable to find repository location for '%s' in revision %ld"),
- path_or_url_local_style(path, pool), start_revnum);
-
- end_path = apr_hash_get(rev_locs, &end_revnum, sizeof(svn_revnum_t));
- if (! end_path)
- return svn_error_createf
- (SVN_ERR_CLIENT_UNRELATED_RESOURCES, NULL,
- _("The location for '%s' for revision %ld does not exist in the "
- "repository or refers to an unrelated object"),
- path_or_url_local_style(path, pool), end_revnum);
-
- /* Set our return variables */
- *start_url = svn_path_url_add_component2(repos_url, start_path + 1, pool);
- if (end->kind != svn_opt_revision_unspecified)
- *end_url = svn_path_url_add_component2(repos_url, end_path + 1, pool);
-
+ SVN_ERR(repos_locations(start_url, end_url,
+ ra_session, url, peg_revnum,
+ start_revnum, end_revnum,
+ pool, subpool));
svn_pool_destroy(subpool);
return SVN_NO_ERROR;
}
-
svn_error_t *
-svn_client__get_youngest_common_ancestor(const char **ancestor_path,
- svn_revnum_t *ancestor_revision,
- const char *path_or_url1,
- svn_revnum_t rev1,
- const char *path_or_url2,
- svn_revnum_t rev2,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool)
+svn_client__calc_youngest_common_ancestor(svn_client__pathrev_t **ancestor_p,
+ const svn_client__pathrev_t *loc1,
+ apr_hash_t *history1,
+ svn_boolean_t has_rev_zero_history1,
+ const svn_client__pathrev_t *loc2,
+ apr_hash_t *history2,
+ svn_boolean_t has_rev_zero_history2,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- apr_hash_t *history1, *history2;
apr_hash_index_t *hi;
svn_revnum_t yc_revision = SVN_INVALID_REVNUM;
- const char *yc_path = NULL;
- svn_opt_revision_t revision1, revision2;
- svn_boolean_t has_rev_zero_history1;
- svn_boolean_t has_rev_zero_history2;
+ const char *yc_relpath = NULL;
- revision1.kind = revision2.kind = svn_opt_revision_number;
- revision1.value.number = rev1;
- revision2.value.number = rev2;
-
- /* We're going to cheat and use history-as-mergeinfo because it
- saves us a bunch of annoying custom data comparisons and such. */
- SVN_ERR(svn_client__get_history_as_mergeinfo(&history1,
- &has_rev_zero_history1,
- path_or_url1,
- &revision1,
- SVN_INVALID_REVNUM,
- SVN_INVALID_REVNUM,
- NULL, ctx, pool));
- SVN_ERR(svn_client__get_history_as_mergeinfo(&history2,
- &has_rev_zero_history2,
- path_or_url2,
- &revision2,
- SVN_INVALID_REVNUM,
- SVN_INVALID_REVNUM,
- NULL, ctx, pool));
+ if (strcmp(loc1->repos_root_url, loc2->repos_root_url) != 0)
+ {
+ *ancestor_p = NULL;
+ return SVN_NO_ERROR;
+ }
/* Loop through the first location's history, check for overlapping
paths and ranges in the second location's history, and
remembering the youngest matching location. */
- for (hi = apr_hash_first(pool, history1); hi; hi = apr_hash_next(hi))
+ for (hi = apr_hash_first(scratch_pool, history1); hi; hi = apr_hash_next(hi))
{
const char *path = svn__apr_hash_index_key(hi);
apr_ssize_t path_len = svn__apr_hash_index_klen(hi);
- apr_array_header_t *ranges1 = svn__apr_hash_index_val(hi);
- apr_array_header_t *ranges2, *common;
+ svn_rangelist_t *ranges1 = svn__apr_hash_index_val(hi);
+ svn_rangelist_t *ranges2, *common;
ranges2 = apr_hash_get(history2, path, path_len);
if (ranges2)
@@ -814,7 +899,7 @@ svn_client__get_youngest_common_ancestor(const char **ancestor_path,
/* We have a path match. Now, did our two histories share
any revisions at that path? */
SVN_ERR(svn_rangelist_intersect(&common, ranges1, ranges2,
- TRUE, pool));
+ TRUE, scratch_pool));
if (common->nelts)
{
svn_merge_range_t *yc_range =
@@ -823,7 +908,7 @@ svn_client__get_youngest_common_ancestor(const char **ancestor_path,
|| (yc_range->end > yc_revision))
{
yc_revision = yc_range->end;
- yc_path = path + 1;
+ yc_relpath = path + 1;
}
}
}
@@ -831,13 +916,260 @@ svn_client__get_youngest_common_ancestor(const char **ancestor_path,
/* It's possible that PATH_OR_URL1 and PATH_OR_URL2's only common
history is revision 0. */
- if (!yc_path && has_rev_zero_history1 && has_rev_zero_history2)
+ if (!yc_relpath && has_rev_zero_history1 && has_rev_zero_history2)
{
- yc_path = "/";
+ yc_relpath = "";
yc_revision = 0;
}
- *ancestor_path = yc_path;
- *ancestor_revision = yc_revision;
+ if (yc_relpath)
+ {
+ *ancestor_p = svn_client__pathrev_create_with_relpath(
+ loc1->repos_root_url, loc1->repos_uuid,
+ yc_revision, yc_relpath, result_pool);
+ }
+ else
+ {
+ *ancestor_p = NULL;
+ }
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_client__get_youngest_common_ancestor(svn_client__pathrev_t **ancestor_p,
+ const svn_client__pathrev_t *loc1,
+ const svn_client__pathrev_t *loc2,
+ svn_ra_session_t *session,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ apr_pool_t *sesspool = NULL;
+ apr_hash_t *history1, *history2;
+ svn_boolean_t has_rev_zero_history1;
+ svn_boolean_t has_rev_zero_history2;
+
+ if (strcmp(loc1->repos_root_url, loc2->repos_root_url) != 0)
+ {
+ *ancestor_p = NULL;
+ return SVN_NO_ERROR;
+ }
+
+ /* Open an RA session for the two locations. */
+ if (session == NULL)
+ {
+ sesspool = svn_pool_create(scratch_pool);
+ SVN_ERR(svn_client_open_ra_session2(&session, loc1->url, NULL, ctx,
+ sesspool, sesspool));
+ }
+
+ /* We're going to cheat and use history-as-mergeinfo because it
+ saves us a bunch of annoying custom data comparisons and such. */
+ SVN_ERR(svn_client__get_history_as_mergeinfo(&history1,
+ &has_rev_zero_history1,
+ loc1,
+ SVN_INVALID_REVNUM,
+ SVN_INVALID_REVNUM,
+ session, ctx, scratch_pool));
+ SVN_ERR(svn_client__get_history_as_mergeinfo(&history2,
+ &has_rev_zero_history2,
+ loc2,
+ SVN_INVALID_REVNUM,
+ SVN_INVALID_REVNUM,
+ session, ctx, scratch_pool));
+ /* Close the ra session if we opened one. */
+ if (sesspool)
+ svn_pool_destroy(sesspool);
+
+ SVN_ERR(svn_client__calc_youngest_common_ancestor(ancestor_p,
+ loc1, history1,
+ has_rev_zero_history1,
+ loc2, history2,
+ has_rev_zero_history2,
+ result_pool,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_client__youngest_common_ancestor(const char **ancestor_url,
+ svn_revnum_t *ancestor_rev,
+ const char *path_or_url1,
+ const svn_opt_revision_t *revision1,
+ const char *path_or_url2,
+ const svn_opt_revision_t *revision2,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ apr_pool_t *sesspool = svn_pool_create(scratch_pool);
+ svn_ra_session_t *session;
+ svn_client__pathrev_t *loc1, *loc2, *ancestor;
+
+ /* Resolve the two locations */
+ SVN_ERR(svn_client__ra_session_from_path2(&session, &loc1,
+ path_or_url1, NULL,
+ revision1, revision1,
+ ctx, sesspool));
+ SVN_ERR(svn_client__resolve_rev_and_url(&loc2, session,
+ path_or_url2, revision2, revision2,
+ ctx, scratch_pool));
+
+ SVN_ERR(svn_client__get_youngest_common_ancestor(
+ &ancestor, loc1, loc2, session, ctx, result_pool, scratch_pool));
+
+ if (ancestor)
+ {
+ *ancestor_url = ancestor->url;
+ *ancestor_rev = ancestor->rev;
+ }
+ else
+ {
+ *ancestor_url = NULL;
+ *ancestor_rev = SVN_INVALID_REVNUM;
+ }
+ svn_pool_destroy(sesspool);
+ return SVN_NO_ERROR;
+}
+
+
+struct ra_ev2_baton {
+ /* The working copy context, from the client context. */
+ svn_wc_context_t *wc_ctx;
+
+ /* For a given REPOS_RELPATH, provide a LOCAL_ABSPATH that represents
+ that repository node. */
+ apr_hash_t *relpath_map;
+};
+
+
+svn_error_t *
+svn_client__ra_provide_base(svn_stream_t **contents,
+ svn_revnum_t *revision,
+ void *baton,
+ const char *repos_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct ra_ev2_baton *reb = baton;
+ const char *local_abspath;
+ svn_error_t *err;
+
+ local_abspath = svn_hash_gets(reb->relpath_map, repos_relpath);
+ if (!local_abspath)
+ {
+ *contents = NULL;
+ return SVN_NO_ERROR;
+ }
+
+ err = svn_wc_get_pristine_contents2(contents, reb->wc_ctx, local_abspath,
+ result_pool, scratch_pool);
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND)
+ return svn_error_trace(err);
+
+ svn_error_clear(err);
+ *contents = NULL;
+ return SVN_NO_ERROR;
+ }
+
+ if (*contents != NULL)
+ {
+ /* The pristine contents refer to the BASE, or to the pristine of
+ a copy/move to this location. Fetch the correct revision. */
+ SVN_ERR(svn_wc__node_get_origin(NULL, revision, NULL, NULL, NULL, NULL,
+ reb->wc_ctx, local_abspath, FALSE,
+ scratch_pool, scratch_pool));
+ }
+
return SVN_NO_ERROR;
}
+
+
+svn_error_t *
+svn_client__ra_provide_props(apr_hash_t **props,
+ svn_revnum_t *revision,
+ void *baton,
+ const char *repos_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct ra_ev2_baton *reb = baton;
+ const char *local_abspath;
+ svn_error_t *err;
+
+ local_abspath = svn_hash_gets(reb->relpath_map, repos_relpath);
+ if (!local_abspath)
+ {
+ *props = NULL;
+ return SVN_NO_ERROR;
+ }
+
+ err = svn_wc_get_pristine_props(props, reb->wc_ctx, local_abspath,
+ result_pool, scratch_pool);
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND)
+ return svn_error_trace(err);
+
+ svn_error_clear(err);
+ *props = NULL;
+ return SVN_NO_ERROR;
+ }
+
+ if (*props != NULL)
+ {
+ /* The pristine props refer to the BASE, or to the pristine props of
+ a copy/move to this location. Fetch the correct revision. */
+ SVN_ERR(svn_wc__node_get_origin(NULL, revision, NULL, NULL, NULL, NULL,
+ reb->wc_ctx, local_abspath, FALSE,
+ scratch_pool, scratch_pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_client__ra_get_copysrc_kind(svn_node_kind_t *kind,
+ void *baton,
+ const char *repos_relpath,
+ svn_revnum_t src_revision,
+ apr_pool_t *scratch_pool)
+{
+ struct ra_ev2_baton *reb = baton;
+ const char *local_abspath;
+
+ local_abspath = svn_hash_gets(reb->relpath_map, repos_relpath);
+ if (!local_abspath)
+ {
+ *kind = svn_node_unknown;
+ return SVN_NO_ERROR;
+ }
+
+ /* ### what to do with SRC_REVISION? */
+
+ SVN_ERR(svn_wc_read_kind2(kind, reb->wc_ctx, local_abspath,
+ FALSE, FALSE, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+
+void *
+svn_client__ra_make_cb_baton(svn_wc_context_t *wc_ctx,
+ apr_hash_t *relpath_map,
+ apr_pool_t *result_pool)
+{
+ struct ra_ev2_baton *reb = apr_palloc(result_pool, sizeof(*reb));
+
+ SVN_ERR_ASSERT_NO_RETURN(wc_ctx != NULL);
+ SVN_ERR_ASSERT_NO_RETURN(relpath_map != NULL);
+
+ reb->wc_ctx = wc_ctx;
+ reb->relpath_map = relpath_map;
+
+ return reb;
+}
diff --git a/subversion/libsvn_client/relocate.c b/subversion/libsvn_client/relocate.c
index 8ff5e03..ed8d09c 100644
--- a/subversion/libsvn_client/relocate.c
+++ b/subversion/libsvn_client/relocate.c
@@ -100,13 +100,13 @@ validator_func(void *baton,
if (! url_uuid)
{
apr_pool_t *sesspool = svn_pool_create(pool);
- svn_ra_session_t *ra_session;
- SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL, url, NULL,
- NULL, FALSE, TRUE,
- b->ctx, sesspool));
+
url_uuid = &APR_ARRAY_PUSH(uuids, struct url_uuid_t);
- SVN_ERR(svn_ra_get_uuid2(ra_session, &(url_uuid->uuid), pool));
- SVN_ERR(svn_ra_get_repos_root2(ra_session, &(url_uuid->root), pool));
+ SVN_ERR(svn_client_get_repos_root(&url_uuid->root,
+ &url_uuid->uuid,
+ url, b->ctx,
+ pool, sesspool));
+
svn_pool_destroy(sesspool);
}
@@ -139,17 +139,12 @@ relocate_externals(const char *local_abspath,
apr_array_header_t *ext_desc,
const char *old_parent_repos_root_url,
const char *new_parent_repos_root_url,
- svn_boolean_t ignore_externals,
svn_client_ctx_t *ctx,
apr_pool_t *scratch_pool)
{
- const char *url;
apr_pool_t *iterpool;
int i;
- SVN_ERR(svn_client_url_from_path2(&url, local_abspath, ctx,
- scratch_pool, scratch_pool));
-
/* Parse an externals definition into an array of external items. */
iterpool = svn_pool_create(scratch_pool);
@@ -185,8 +180,8 @@ relocate_externals(const char *local_abspath,
ext_item->target_dir,
iterpool),
iterpool));
- err = svn_client_root_url_from_path(&target_repos_root_url,
- target_abspath, ctx, iterpool);
+ err = svn_client_get_repos_root(&target_repos_root_url, NULL /* uuid */,
+ target_abspath, ctx, iterpool, iterpool);
/* Ignore externals that aren't present in the working copy.
* This can happen if an external is deleted from disk accidentally,
@@ -203,7 +198,7 @@ relocate_externals(const char *local_abspath,
SVN_ERR(svn_client_relocate2(target_abspath,
old_parent_repos_root_url,
new_parent_repos_root_url,
- ignore_externals, ctx, iterpool));
+ FALSE, ctx, iterpool));
}
svn_pool_destroy(iterpool);
@@ -248,16 +243,16 @@ svn_client_relocate2(const char *wcroot_dir,
}
/* Fetch our current root URL. */
- SVN_ERR(svn_client_root_url_from_path(&old_repos_root_url, local_abspath,
- ctx, pool));
+ SVN_ERR(svn_client_get_repos_root(&old_repos_root_url, NULL /* uuid */,
+ local_abspath, ctx, pool, pool));
/* Perform the relocation. */
SVN_ERR(svn_wc_relocate4(ctx->wc_ctx, local_abspath, from_prefix, to_prefix,
validator_func, &vb, pool));
/* Now fetch new current root URL. */
- SVN_ERR(svn_client_root_url_from_path(&new_repos_root_url, local_abspath,
- ctx, pool));
+ SVN_ERR(svn_client_get_repos_root(&new_repos_root_url, NULL /* uuid */,
+ local_abspath, ctx, pool, pool));
/* Relocate externals, too (if any). */
@@ -285,8 +280,7 @@ svn_client_relocate2(const char *wcroot_dir,
iterpool));
if (ext_desc->nelts)
SVN_ERR(relocate_externals(this_abspath, ext_desc, old_repos_root_url,
- new_repos_root_url, ignore_externals, ctx,
- iterpool));
+ new_repos_root_url, ctx, iterpool));
}
svn_pool_destroy(iterpool);
diff --git a/subversion/libsvn_client/repos_diff.c b/subversion/libsvn_client/repos_diff.c
index c303af0..6a7725f 100644
--- a/subversion/libsvn_client/repos_diff.c
+++ b/subversion/libsvn_client/repos_diff.c
@@ -34,6 +34,7 @@
#include <apr_uri.h>
#include <apr_md5.h>
+#include <assert.h>
#include "svn_checksum.h"
#include "svn_hash.h"
@@ -47,28 +48,17 @@
#include "client.h"
+#include "private/svn_subr_private.h"
#include "private/svn_wc_private.h"
+#include "private/svn_editor.h"
/* Overall crawler editor baton. */
struct edit_baton {
- /* TARGET is a working-copy directory which corresponds to the base
- URL open in RA_SESSION below. */
- const char *target;
-
- /* A working copy context for TARGET, NULL if this is purely a
- repository operation. */
- svn_wc_context_t *wc_ctx;
-
/* The passed depth */
svn_depth_t depth;
- /* The callback and calback argument that implement the file comparison
- function */
- const svn_wc_diff_callbacks4_t *diff_callbacks;
- void *diff_cmd_baton;
-
- /* DRY_RUN is TRUE if this is a dry-run diff, false otherwise. */
- svn_boolean_t dry_run;
+ /* The result processor */
+ const svn_diff_tree_processor_t *processor;
/* RA_SESSION is the open session for making requests to the RA layer */
svn_ra_session_t *ra_session;
@@ -88,18 +78,8 @@ struct edit_baton {
/* Empty hash used for adds. */
apr_hash_t *empty_hash;
- /* Hash used to check replaced paths. Key is path relative CWD,
- * Value is *deleted_path_notify_t.
- * All allocations are from edit_baton's pool. */
- apr_hash_t *deleted_paths;
-
- /* If the func is non-null, send notifications of actions. */
- svn_wc_notify_func2_t notify_func;
- void *notify_baton;
-
- /* TRUE if the operation needs to walk deleted dirs on the "old" side.
- FALSE otherwise. */
- svn_boolean_t walk_deleted_repos_dirs;
+ /* Whether to report text deltas */
+ svn_boolean_t text_deltas;
/* A callback used to see if the client wishes to cancel the running
operation. */
@@ -140,12 +120,9 @@ struct dir_baton {
/* The path of the directory within the repository */
const char *path;
- /* The path of the directory in the wc, relative to cwd */
- const char *wcpath;
-
/* The baton for the parent directory, or null if this is the root of the
hierarchy to be compared. */
- struct dir_baton *dir_baton;
+ struct dir_baton *parent_baton;
/* The overall crawler editor baton. */
struct edit_baton *edit_baton;
@@ -153,17 +130,31 @@ struct dir_baton {
/* A cache of any property changes (svn_prop_t) received for this dir. */
apr_array_header_t *propchanges;
- /* The pristine-property list attached to this directory. */
- apr_hash_t *pristine_props;
+ /* Boolean indicating whether a node property was changed */
+ svn_boolean_t has_propchange;
+
+ /* Baton for svn_diff_tree_processor_t */
+ void *pdb;
+ svn_diff_source_t *left_source;
+ svn_diff_source_t *right_source;
/* The pool passed in by add_dir, open_dir, or open_root.
Also, the pool this dir baton is allocated in. */
apr_pool_t *pool;
+
+ /* Base revision of directory. */
+ svn_revnum_t base_revision;
+
+ /* Number of users of baton. Its pool will be destroyed 0 */
+ int users;
};
/* File level baton.
*/
struct file_baton {
+ /* Reference to parent baton */
+ struct dir_baton *parent_baton;
+
/* Gets set if the file is added rather than replaced. */
svn_boolean_t added;
@@ -179,9 +170,6 @@ struct file_baton {
/* The path of the file within the repository */
const char *path;
- /* The path of the file in the wc, relative to cwd */
- const char *wcpath;
-
/* The path and APR file handle to the temporary file that contains the
first repository version. Also, the pristine-property list of
this file. */
@@ -212,6 +200,14 @@ struct file_baton {
/* A cache of any property changes (svn_prop_t) received for this file. */
apr_array_header_t *propchanges;
+ /* Boolean indicating whether a node property was changed */
+ svn_boolean_t has_propchange;
+
+ /* Baton for svn_diff_tree_processor_t */
+ void *pfb;
+ svn_diff_source_t *left_source;
+ svn_diff_source_t *right_source;
+
/* The pool passed in by add_file or open_file.
Also, the pool this file_baton is allocated in. */
apr_pool_t *pool;
@@ -229,12 +225,13 @@ make_dir_baton(const char *path,
struct dir_baton *parent_baton,
struct edit_baton *edit_baton,
svn_boolean_t added,
- apr_pool_t *pool)
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool)
{
- apr_pool_t *dir_pool = svn_pool_create(pool);
+ apr_pool_t *dir_pool = svn_pool_create(result_pool);
struct dir_baton *dir_baton = apr_pcalloc(dir_pool, sizeof(*dir_baton));
- dir_baton->dir_baton = parent_baton;
+ dir_baton->parent_baton = parent_baton;
dir_baton->edit_baton = edit_baton;
dir_baton->added = added;
dir_baton->tree_conflicted = FALSE;
@@ -242,12 +239,38 @@ make_dir_baton(const char *path,
dir_baton->skip_children = FALSE;
dir_baton->pool = dir_pool;
dir_baton->path = apr_pstrdup(dir_pool, path);
- dir_baton->wcpath = svn_dirent_join(edit_baton->target, path, dir_pool);
- dir_baton->propchanges = apr_array_make(pool, 1, sizeof(svn_prop_t));
+ dir_baton->propchanges = apr_array_make(dir_pool, 8, sizeof(svn_prop_t));
+ dir_baton->base_revision = base_revision;
+ dir_baton->users++;
+
+ if (parent_baton)
+ parent_baton->users++;
return dir_baton;
}
+/* New function. Called by everyone who has a reference when done */
+static svn_error_t *
+release_dir(struct dir_baton *db)
+{
+ assert(db->users > 0);
+
+ db->users--;
+ if (db->users)
+ return SVN_NO_ERROR;
+
+ {
+ struct dir_baton *pb = db->parent_baton;
+
+ svn_pool_destroy(db->pool);
+
+ if (pb != NULL)
+ SVN_ERR(release_dir(pb));
+ }
+
+ return SVN_NO_ERROR;
+}
+
/* Create a new file baton for PATH in POOL, which is a child of
* directory PARENT_PATH. ADDED is set if this file is being added
* rather than replaced. EDIT_BATON is a pointer to the global edit
@@ -255,77 +278,44 @@ make_dir_baton(const char *path,
*/
static struct file_baton *
make_file_baton(const char *path,
+ struct dir_baton *parent_baton,
svn_boolean_t added,
- struct edit_baton *edit_baton,
- apr_pool_t *pool)
+ apr_pool_t *result_pool)
{
- apr_pool_t *file_pool = svn_pool_create(pool);
+ apr_pool_t *file_pool = svn_pool_create(result_pool);
struct file_baton *file_baton = apr_pcalloc(file_pool, sizeof(*file_baton));
- file_baton->edit_baton = edit_baton;
+ file_baton->parent_baton = parent_baton;
+ file_baton->edit_baton = parent_baton->edit_baton;
file_baton->added = added;
file_baton->tree_conflicted = FALSE;
file_baton->skip = FALSE;
file_baton->pool = file_pool;
file_baton->path = apr_pstrdup(file_pool, path);
- file_baton->wcpath = svn_dirent_join(edit_baton->target, path, file_pool);
- file_baton->propchanges = apr_array_make(pool, 1, sizeof(svn_prop_t));
- file_baton->base_revision = edit_baton->revision;
+ file_baton->propchanges = apr_array_make(file_pool, 8, sizeof(svn_prop_t));
+ file_baton->base_revision = parent_baton->edit_baton->revision;
- return file_baton;
-}
+ parent_baton->users++;
-/* Helper function: return up to two svn:mime-type values buried
- * within a file baton. Set *MIMETYPE1 to the value within the file's
- * pristine properties, or NULL if not available. Set *MIMETYPE2 to
- * the value within the "new" file's propchanges, or NULL if not
- * available.
- */
-static void
-get_file_mime_types(const char **mimetype1,
- const char **mimetype2,
- struct file_baton *b)
-{
- /* Defaults */
- *mimetype1 = NULL;
- *mimetype2 = NULL;
-
- if (b->pristine_props)
- {
- svn_string_t *pristine_val;
- pristine_val = apr_hash_get(b->pristine_props, SVN_PROP_MIME_TYPE,
- strlen(SVN_PROP_MIME_TYPE));
- if (pristine_val)
- *mimetype2 = *mimetype1 = pristine_val->data;
- }
-
- if (b->propchanges)
- {
- int i;
- svn_prop_t *propchange;
-
- for (i = 0; i < b->propchanges->nelts; i++)
- {
- propchange = &APR_ARRAY_IDX(b->propchanges, i, svn_prop_t);
- if (strcmp(propchange->name, SVN_PROP_MIME_TYPE) == 0)
- {
- if (propchange->value)
- *mimetype2 = propchange->value->data;
- break;
- }
- }
- }
+ return file_baton;
}
-
-/* Get revision REVISION of the file described by B from the repository.
- * Set B->path_start_revision to the path of a new temporary file containing
- * the file's text. Set B->pristine_props to a new hash containing the
- * file's properties. Install a pool cleanup handler on B->pool to delete
- * the file.
+/* Get revision FB->base_revision of the file described by FB from the
+ * repository, through FB->edit_baton->ra_session.
+ *
+ * Unless PROPS_ONLY is true:
+ * Set FB->path_start_revision to the path of a new temporary file containing
+ * the file's text.
+ * Set FB->start_md5_checksum to that file's MD-5 checksum.
+ * Install a pool cleanup handler on FB->pool to delete the file.
+ *
+ * Always:
+ * Set FB->pristine_props to a new hash containing the file's properties.
+ *
+ * Allocate all results in FB->pool.
*/
static svn_error_t *
-get_file_from_ra(struct file_baton *b,
+get_file_from_ra(struct file_baton *fb,
svn_boolean_t props_only,
apr_pool_t *scratch_pool)
{
@@ -333,44 +323,47 @@ get_file_from_ra(struct file_baton *b,
{
svn_stream_t *fstream;
- SVN_ERR(svn_stream_open_unique(&fstream, &(b->path_start_revision), NULL,
- svn_io_file_del_on_pool_cleanup, b->pool,
- b->pool));
+ SVN_ERR(svn_stream_open_unique(&fstream, &(fb->path_start_revision),
+ NULL, svn_io_file_del_on_pool_cleanup,
+ fb->pool, scratch_pool));
- fstream = svn_stream_checksummed2(fstream, NULL, &b->start_md5_checksum,
- svn_checksum_md5, TRUE, b->pool);
+ fstream = svn_stream_checksummed2(fstream, NULL, &fb->start_md5_checksum,
+ svn_checksum_md5, TRUE, scratch_pool);
/* Retrieve the file and its properties */
- SVN_ERR(svn_ra_get_file(b->edit_baton->ra_session,
- b->path,
- b->base_revision,
+ SVN_ERR(svn_ra_get_file(fb->edit_baton->ra_session,
+ fb->path,
+ fb->base_revision,
fstream, NULL,
- &(b->pristine_props),
- b->pool));
+ &(fb->pristine_props),
+ fb->pool));
SVN_ERR(svn_stream_close(fstream));
}
else
{
- SVN_ERR(svn_ra_get_file(b->edit_baton->ra_session,
- b->path,
- b->base_revision,
+ SVN_ERR(svn_ra_get_file(fb->edit_baton->ra_session,
+ fb->path,
+ fb->base_revision,
NULL, NULL,
- &(b->pristine_props),
- b->pool));
+ &(fb->pristine_props),
+ fb->pool));
}
return SVN_NO_ERROR;
}
-/* Issue #3657 'dav update report handler in skelta mode can cause
- spurious conflicts'. When communicating with the repository via ra_serf
- and ra_neon, the change_dir_prop and change_file_prop svn_delta_editor_t
+/* Remove every no-op property change from CHANGES: that is, remove every
+ entry in which the target value is the same as the value of the
+ corresponding property in PRISTINE_PROPS.
+
+ Issue #3657 'dav update report handler in skelta mode can cause
+ spurious conflicts'. When communicating with the repository via ra_serf,
+ the change_dir_prop and change_file_prop svn_delta_editor_t
callbacks are called (obviously) when a directory or file property has
changed between the start and end of the edit. Less obvious however,
is that these callbacks may be made describing *all* of the properties
on FILE_BATON->PATH when using the DAV providers, not just the change(s).
- (Specifically ra_neon does this for diff/merge and ra_serf does it
- for diff/merge/update/switch).
+ (Specifically ra_serf does it for diff/merge/update/switch).
This means that the change_[file|dir]_prop svn_delta_editor_t callbacks
may be made where there are no property changes (i.e. a noop change of
@@ -389,8 +382,6 @@ get_file_from_ra(struct file_baton *b,
See http://subversion.tigris.org/issues/show_bug.cgi?id=3657#desc9 and
http://svn.haxx.se/dev/archive-2010-08/0351.shtml for more details.
-
- This function filters these property changes from the change hash
*/
static void
remove_non_prop_changes(apr_hash_t *pristine_props,
@@ -404,9 +395,8 @@ remove_non_prop_changes(apr_hash_t *pristine_props,
if (change->value)
{
- const svn_string_t *old_val = apr_hash_get(pristine_props,
- change->name,
- APR_HASH_KEY_STRING);
+ const svn_string_t *old_val = svn_hash_gets(pristine_props,
+ change->name);
if (old_val && svn_string_compare(old_val, change->value))
{
@@ -424,18 +414,6 @@ remove_non_prop_changes(apr_hash_t *pristine_props,
}
}
-/* Get the props attached to a directory in the repository at BASE_REVISION. */
-static svn_error_t *
-get_dirprops_from_ra(struct dir_baton *b, svn_revnum_t base_revision)
-{
- return svn_ra_get_dir2(b->edit_baton->ra_session,
- NULL, NULL, &(b->pristine_props),
- b->path,
- base_revision,
- 0,
- b->pool);
-}
-
/* Get the empty file associated with the edit baton. This is cached so
* that it can be reused, all empty files are the same.
*/
@@ -456,7 +434,7 @@ get_empty_file(struct edit_baton *eb,
return SVN_NO_ERROR;
}
-/* An editor function. The root of the comparison hierarchy */
+/* An svn_delta_editor_t function. */
static svn_error_t *
set_target_revision(void *edit_baton,
svn_revnum_t target_revision,
@@ -468,7 +446,7 @@ set_target_revision(void *edit_baton,
return SVN_NO_ERROR;
}
-/* An editor function. The root of the comparison hierarchy */
+/* An svn_delta_editor_t function. The root of the comparison hierarchy */
static svn_error_t *
open_root(void *edit_baton,
svn_revnum_t base_revision,
@@ -476,101 +454,168 @@ open_root(void *edit_baton,
void **root_baton)
{
struct edit_baton *eb = edit_baton;
- struct dir_baton *b = make_dir_baton("", NULL, eb, FALSE, pool);
+ struct dir_baton *db = make_dir_baton("", NULL, eb, FALSE, base_revision,
+ eb->pool);
+
+ db->left_source = svn_diff__source_create(eb->revision, db->pool);
+ db->right_source = svn_diff__source_create(eb->target_revision, db->pool);
+
+ SVN_ERR(eb->processor->dir_opened(&db->pdb,
+ &db->skip,
+ &db->skip_children,
+ "",
+ db->left_source,
+ db->right_source,
+ NULL,
+ NULL,
+ eb->processor,
+ db->pool,
+ db->pool /* scratch_pool */));
+
+ *root_baton = db;
+ return SVN_NO_ERROR;
+}
+
+/* Compare a file being deleted against an empty file.
+ */
+static svn_error_t *
+diff_deleted_file(const char *path,
+ struct dir_baton *db,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton *eb = db->edit_baton;
+ struct file_baton *fb = make_file_baton(path, db, FALSE, scratch_pool);
+ svn_boolean_t skip = FALSE;
+ svn_diff_source_t *left_source = svn_diff__source_create(eb->revision,
+ scratch_pool);
+
+ if (eb->cancel_func)
+ SVN_ERR(eb->cancel_func(eb->cancel_baton));
+
+ SVN_ERR(eb->processor->file_opened(&fb->pfb, &skip, path,
+ left_source,
+ NULL /* right_source */,
+ NULL /* copyfrom_source */,
+ db->pdb,
+ eb->processor,
+ scratch_pool, scratch_pool));
+
+ if (eb->cancel_func)
+ SVN_ERR(eb->cancel_func(eb->cancel_baton));
+
+ if (skip)
+ return SVN_NO_ERROR;
- /* Override the wcpath in our baton. */
- b->wcpath = apr_pstrdup(pool, eb->target);
+ SVN_ERR(get_file_from_ra(fb, ! eb->text_deltas, scratch_pool));
- SVN_ERR(get_dirprops_from_ra(b, base_revision));
+ SVN_ERR(eb->processor->file_deleted(fb->path,
+ left_source,
+ fb->path_start_revision,
+ fb->pristine_props,
+ fb->pfb,
+ eb->processor,
+ scratch_pool));
- *root_baton = b;
return SVN_NO_ERROR;
}
-/* Recursively walk tree rooted at DIR (at REVISION) in the repository,
- * reporting all files as deleted. Part of a workaround for issue 2333.
+/* Recursively walk tree rooted at DIR (at EB->revision) in the repository,
+ * reporting all children as deleted. Part of a workaround for issue 2333.
*
- * DIR is a repository path relative to the URL in RA_SESSION. REVISION
- * must be a valid revision number, not SVN_INVALID_REVNUM. EB is the
- * overall crawler editor baton. If CANCEL_FUNC is not NULL, then it
- * should refer to a cancellation function (along with CANCEL_BATON).
+ * DIR is a repository path relative to the URL in EB->ra_session. EB is
+ * the overall crawler editor baton. EB->revision must be a valid revision
+ * number, not SVN_INVALID_REVNUM. Use EB->cancel_func (if not null) with
+ * EB->cancel_baton for cancellation.
*/
/* ### TODO: Handle depth. */
static svn_error_t *
-diff_deleted_dir(const char *dir,
- svn_revnum_t revision,
- svn_ra_session_t *ra_session,
- struct edit_baton *eb,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- apr_pool_t *pool)
+diff_deleted_dir(const char *path,
+ struct dir_baton *pb,
+ apr_pool_t *scratch_pool)
{
- apr_hash_t *dirents;
- apr_pool_t *iterpool = svn_pool_create(pool);
- apr_hash_index_t *hi;
-
- SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(revision));
-
- if (cancel_func)
- SVN_ERR(cancel_func(cancel_baton));
-
- SVN_ERR(svn_ra_get_dir2(ra_session,
- &dirents,
- NULL, NULL,
- dir,
- revision,
- SVN_DIRENT_KIND,
- pool));
+ struct edit_baton *eb = pb->edit_baton;
+ struct dir_baton *db;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ svn_boolean_t skip = FALSE;
+ svn_boolean_t skip_children = FALSE;
+ apr_hash_t *dirents = NULL;
+ apr_hash_t *left_props = NULL;
+ svn_diff_source_t *left_source = svn_diff__source_create(eb->revision,
+ scratch_pool);
+ db = make_dir_baton(path, pb, pb->edit_baton, FALSE, SVN_INVALID_REVNUM,
+ scratch_pool);
+
+ SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(eb->revision));
+
+ if (eb->cancel_func)
+ SVN_ERR(eb->cancel_func(eb->cancel_baton));
+
+ SVN_ERR(eb->processor->dir_opened(&db->pdb, &skip, &skip_children,
+ path,
+ left_source,
+ NULL /* right_source */,
+ NULL /* copyfrom_source */,
+ pb->pdb,
+ eb->processor,
+ scratch_pool, iterpool));
+
+ if (!skip || !skip_children)
+ SVN_ERR(svn_ra_get_dir2(eb->ra_session,
+ skip_children ? NULL : &dirents,
+ NULL,
+ skip ? NULL : &left_props,
+ path,
+ eb->revision,
+ SVN_DIRENT_KIND,
+ scratch_pool));
- for (hi = apr_hash_first(pool, dirents); hi;
- hi = apr_hash_next(hi))
+ /* The "old" dir will be skipped by the repository report. If required,
+ * crawl it recursively, diffing each file against the empty file. This
+ * is a workaround for issue 2333 "'svn diff URL1 URL2' not reverse of
+ * 'svn diff URL2 URL1'". */
+ if (! skip_children)
{
- const char *path;
- const char *name = svn__apr_hash_index_key(hi);
- svn_dirent_t *dirent = svn__apr_hash_index_val(hi);
-
- svn_pool_clear(iterpool);
-
- path = svn_relpath_join(dir, name, iterpool);
+ apr_hash_index_t *hi;
- if (dirent->kind == svn_node_file)
+ for (hi = apr_hash_first(scratch_pool, dirents); hi;
+ hi = apr_hash_next(hi))
{
- struct file_baton *b;
- const char *mimetype1, *mimetype2;
+ const char *child_path;
+ const char *name = svn__apr_hash_index_key(hi);
+ svn_dirent_t *dirent = svn__apr_hash_index_val(hi);
- /* Compare a file being deleted against an empty file */
- b = make_file_baton(path, FALSE, eb, iterpool);
- SVN_ERR(get_file_from_ra(b, FALSE, iterpool));
+ svn_pool_clear(iterpool);
- SVN_ERR(get_empty_file(b->edit_baton, &(b->path_end_revision)));
+ child_path = svn_relpath_join(path, name, iterpool);
- get_file_mime_types(&mimetype1, &mimetype2, b);
-
- SVN_ERR(eb->diff_callbacks->file_deleted(
- NULL, NULL, b->wcpath,
- b->path_start_revision,
- b->path_end_revision,
- mimetype1, mimetype2,
- b->pristine_props,
- b->edit_baton->diff_cmd_baton,
- iterpool));
+ if (dirent->kind == svn_node_file)
+ {
+ SVN_ERR(diff_deleted_file(child_path, db, iterpool));
+ }
+ else if (dirent->kind == svn_node_dir)
+ {
+ SVN_ERR(diff_deleted_dir(child_path, db, iterpool));
+ }
}
+ }
- if (dirent->kind == svn_node_dir)
- SVN_ERR(diff_deleted_dir(path,
- revision,
- ra_session,
- eb,
- cancel_func,
- cancel_baton,
- iterpool));
+ if (! skip)
+ {
+ SVN_ERR(eb->processor->dir_deleted(path,
+ left_source,
+ left_props,
+ db->pdb,
+ eb->processor,
+ scratch_pool));
}
+ SVN_ERR(release_dir(db));
+
svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
-/* An editor function. */
+/* An svn_delta_editor_t function. */
static svn_error_t *
delete_entry(const char *path,
svn_revnum_t base_revision,
@@ -580,14 +625,10 @@ delete_entry(const char *path,
struct dir_baton *pb = parent_baton;
struct edit_baton *eb = pb->edit_baton;
svn_node_kind_t kind;
- svn_wc_notify_state_t state = svn_wc_notify_state_inapplicable;
- svn_wc_notify_action_t action = svn_wc_notify_skip;
- svn_boolean_t tree_conflicted = FALSE;
apr_pool_t *scratch_pool;
- /* Skip *everything* within a newly tree-conflicted directory,
- * and directories the children of which should be skipped. */
- if (pb->skip || pb->tree_conflicted || pb->skip_children)
+ /* Process skips. */
+ if (pb->skip_children)
return SVN_NO_ERROR;
scratch_pool = svn_pool_create(eb->pool);
@@ -600,78 +641,24 @@ delete_entry(const char *path,
{
case svn_node_file:
{
- const char *mimetype1, *mimetype2;
- struct file_baton *b;
-
- /* Compare a file being deleted against an empty file */
- b = make_file_baton(path, FALSE, eb, scratch_pool);
- SVN_ERR(get_file_from_ra(b, FALSE, scratch_pool));
- SVN_ERR(get_empty_file(b->edit_baton, &(b->path_end_revision)));
-
- get_file_mime_types(&mimetype1, &mimetype2, b);
-
- SVN_ERR(eb->diff_callbacks->file_deleted(
- &state, &tree_conflicted, b->wcpath,
- b->path_start_revision,
- b->path_end_revision,
- mimetype1, mimetype2,
- b->pristine_props,
- b->edit_baton->diff_cmd_baton,
- scratch_pool));
-
+ SVN_ERR(diff_deleted_file(path, pb, scratch_pool));
break;
}
case svn_node_dir:
{
- SVN_ERR(eb->diff_callbacks->dir_deleted(
- &state, &tree_conflicted,
- svn_dirent_join(eb->target, path, pool),
- eb->diff_cmd_baton, scratch_pool));
-
- if (eb->walk_deleted_repos_dirs)
- {
- /* A workaround for issue 2333. The "old" dir will be
- skipped by the repository report. Crawl it recursively,
- diffing each file against the empty file. */
- SVN_ERR(diff_deleted_dir(path,
- eb->revision,
- eb->ra_session,
- eb,
- eb->cancel_func,
- eb->cancel_baton,
- scratch_pool));
- }
+ SVN_ERR(diff_deleted_dir(path, pb, scratch_pool));
break;
}
default:
break;
}
- if ((state != svn_wc_notify_state_missing)
- && (state != svn_wc_notify_state_obstructed)
- && !tree_conflicted)
- {
- action = svn_wc_notify_update_delete;
- }
-
- if (eb->notify_func)
- {
- const char* deleted_path;
- deleted_path_notify_t *dpn = apr_pcalloc(eb->pool, sizeof(*dpn));
- deleted_path = svn_dirent_join(eb->target, path, eb->pool);
- dpn->kind = kind;
- dpn->action = tree_conflicted ? svn_wc_notify_tree_conflict : action;
- dpn->state = state;
- dpn->tree_conflicted = tree_conflicted;
- apr_hash_set(eb->deleted_paths, deleted_path, APR_HASH_KEY_STRING, dpn);
- }
-
svn_pool_destroy(scratch_pool);
return SVN_NO_ERROR;
}
-/* An editor function. */
+/* An svn_delta_editor_t function. */
static svn_error_t *
add_directory(const char *path,
void *parent_baton,
@@ -682,86 +669,40 @@ add_directory(const char *path,
{
struct dir_baton *pb = parent_baton;
struct edit_baton *eb = pb->edit_baton;
- struct dir_baton *b;
- svn_wc_notify_state_t state;
+ struct dir_baton *db;
/* ### TODO: support copyfrom? */
- b = make_dir_baton(path, pb, eb, TRUE, pool);
- b->pristine_props = eb->empty_hash;
- *child_baton = b;
+ db = make_dir_baton(path, pb, eb, TRUE, SVN_INVALID_REVNUM, pb->pool);
+ *child_baton = db;
/* Skip *everything* within a newly tree-conflicted directory,
* and directories the children of which should be skipped. */
- if (pb->skip || pb->tree_conflicted || pb->skip_children)
+ if (pb->skip_children)
{
- b->skip = TRUE;
+ db->skip = TRUE;
+ db->skip_children = TRUE;
return SVN_NO_ERROR;
}
+ db->right_source = svn_diff__source_create(eb->target_revision,
+ db->pool);
- SVN_ERR(eb->diff_callbacks->dir_added(
- &state, &b->tree_conflicted,
- &b->skip, &b->skip_children, b->wcpath,
- eb->target_revision, copyfrom_path, copyfrom_revision,
- eb->diff_cmd_baton, pool));
-
- /* Notifications for directories are done at close_directory time.
- * But for paths at which the editor drive adds directories, we make an
- * exception to this rule, so that the path appears in the output before
- * any children of the newly added directory. Since a deletion at this path
- * must have happened before this addition, we can safely notify about
- * replaced directories here, too. */
- if (eb->notify_func)
- {
- deleted_path_notify_t *dpn;
- svn_wc_notify_t *notify;
- svn_wc_notify_action_t action;
- svn_node_kind_t kind = svn_node_dir;
-
- /* Find out if a pending delete notification for this path is
- * still around. */
- dpn = apr_hash_get(eb->deleted_paths, b->wcpath, APR_HASH_KEY_STRING);
- if (dpn)
- {
- /* If any was found, we will handle the pending 'deleted path
- * notification' (DPN) here. Remove it from the list. */
- apr_hash_set(eb->deleted_paths, b->wcpath,
- APR_HASH_KEY_STRING, NULL);
-
- /* the pending delete might be on a different node kind. */
- kind = dpn->kind;
- state = dpn->state;
- }
-
- /* Determine what the notification (ACTION) should be.
- * In case of a pending 'delete', this might become a 'replace'. */
- if (b->tree_conflicted)
- action = svn_wc_notify_tree_conflict;
- else if (dpn)
- {
- if (dpn->action == svn_wc_notify_update_delete)
- action = svn_wc_notify_update_replace;
- else
- /* Note: dpn->action might be svn_wc_notify_tree_conflict */
- action = dpn->action;
- }
- else if (state == svn_wc_notify_state_missing ||
- state == svn_wc_notify_state_obstructed)
- action = svn_wc_notify_skip;
- else
- action = svn_wc_notify_update_add;
-
- notify = svn_wc_create_notify(b->wcpath, action, pool);
- notify->kind = kind;
- notify->content_state = notify->prop_state = state;
- (*eb->notify_func)(eb->notify_baton, notify, pool);
- }
+ SVN_ERR(eb->processor->dir_opened(&db->pdb,
+ &db->skip,
+ &db->skip_children,
+ db->path,
+ NULL,
+ db->right_source,
+ NULL /* copyfrom_source */,
+ pb->pdb,
+ eb->processor,
+ db->pool, db->pool));
return SVN_NO_ERROR;
}
-/* An editor function. */
+/* An svn_delta_editor_t function. */
static svn_error_t *
open_directory(const char *path,
void *parent_baton,
@@ -771,31 +712,38 @@ open_directory(const char *path,
{
struct dir_baton *pb = parent_baton;
struct edit_baton *eb = pb->edit_baton;
- struct dir_baton *b;
+ struct dir_baton *db;
- b = make_dir_baton(path, pb, pb->edit_baton, FALSE, pool);
- *child_baton = b;
+ db = make_dir_baton(path, pb, eb, FALSE, base_revision, pb->pool);
- /* Skip *everything* within a newly tree-conflicted directory
- * and directories the children of which should be skipped. */
- if (pb->skip || pb->tree_conflicted || pb->skip_children)
+ *child_baton = db;
+
+ /* Process Skips. */
+ if (pb->skip_children)
{
- b->skip = TRUE;
+ db->skip = TRUE;
+ db->skip_children = TRUE;
return SVN_NO_ERROR;
}
- SVN_ERR(get_dirprops_from_ra(b, base_revision));
+ db->left_source = svn_diff__source_create(eb->revision, db->pool);
+ db->right_source = svn_diff__source_create(eb->target_revision, db->pool);
- SVN_ERR(eb->diff_callbacks->dir_opened(
- &b->tree_conflicted, &b->skip,
- &b->skip_children, b->wcpath, base_revision,
- b->edit_baton->diff_cmd_baton, pool));
+ SVN_ERR(eb->processor->dir_opened(&db->pdb,
+ &db->skip, &db->skip_children,
+ path,
+ db->left_source,
+ db->right_source,
+ NULL /* copyfrom */,
+ pb ? pb->pdb : NULL,
+ eb->processor,
+ db->pool, db->pool));
return SVN_NO_ERROR;
}
-/* An editor function. */
+/* An svn_delta_editor_t function. */
static svn_error_t *
add_file(const char *path,
void *parent_baton,
@@ -805,27 +753,39 @@ add_file(const char *path,
void **file_baton)
{
struct dir_baton *pb = parent_baton;
- struct file_baton *b;
+ struct edit_baton *eb = pb->edit_baton;
+ struct file_baton *fb;
/* ### TODO: support copyfrom? */
- b = make_file_baton(path, TRUE, pb->edit_baton, pool);
- *file_baton = b;
+ fb = make_file_baton(path, pb, TRUE, pb->pool);
+ *file_baton = fb;
- /* Skip *everything* within a newly tree-conflicted directory.
- * and directories the children of which should be skipped. */
- if (pb->skip || pb->tree_conflicted || pb->skip_children)
+ /* Process Skips. */
+ if (pb->skip_children)
{
- b->skip = TRUE;
+ fb->skip = TRUE;
return SVN_NO_ERROR;
}
- b->pristine_props = pb->edit_baton->empty_hash;
+ fb->pristine_props = pb->edit_baton->empty_hash;
+
+ fb->right_source = svn_diff__source_create(eb->target_revision, fb->pool);
+
+ SVN_ERR(eb->processor->file_opened(&fb->pfb,
+ &fb->skip,
+ path,
+ NULL,
+ fb->right_source,
+ NULL /* copy source */,
+ pb->pdb,
+ eb->processor,
+ fb->pool, fb->pool));
return SVN_NO_ERROR;
}
-/* An editor function. */
+/* An svn_delta_editor_t function. */
static svn_error_t *
open_file(const char *path,
void *parent_baton,
@@ -834,24 +794,32 @@ open_file(const char *path,
void **file_baton)
{
struct dir_baton *pb = parent_baton;
- struct file_baton *b;
+ struct file_baton *fb;
struct edit_baton *eb = pb->edit_baton;
- b = make_file_baton(path, FALSE, pb->edit_baton, pool);
- *file_baton = b;
+ fb = make_file_baton(path, pb, FALSE, pb->pool);
+ *file_baton = fb;
- /* Skip *everything* within a newly tree-conflicted directory
- * and directories the children of which should be skipped. */
- if (pb->skip || pb->tree_conflicted || pb->skip_children)
+ /* Process Skips. */
+ if (pb->skip_children)
{
- b->skip = TRUE;
+ fb->skip = TRUE;
return SVN_NO_ERROR;
}
- b->base_revision = base_revision;
+ fb->base_revision = base_revision;
- SVN_ERR(eb->diff_callbacks->file_opened(
- &b->tree_conflicted, &b->skip,
- b->wcpath, base_revision, eb->diff_cmd_baton, pool));
+ fb->left_source = svn_diff__source_create(eb->revision, fb->pool);
+ fb->right_source = svn_diff__source_create(eb->target_revision, fb->pool);
+
+ SVN_ERR(eb->processor->file_opened(&fb->pfb,
+ &fb->skip,
+ path,
+ fb->left_source,
+ fb->right_source,
+ NULL /* copy source */,
+ pb->pdb,
+ eb->processor,
+ fb->pool, fb->pool));
return SVN_NO_ERROR;
}
@@ -861,21 +829,52 @@ static svn_error_t *
window_handler(svn_txdelta_window_t *window,
void *window_baton)
{
- struct file_baton *b = window_baton;
+ struct file_baton *fb = window_baton;
- SVN_ERR(b->apply_handler(window, b->apply_baton));
+ SVN_ERR(fb->apply_handler(window, fb->apply_baton));
if (!window)
{
- b->result_md5_checksum = svn_checksum__from_digest(b->result_digest,
- svn_checksum_md5,
- b->pool);
+ fb->result_md5_checksum = svn_checksum__from_digest_md5(
+ fb->result_digest,
+ fb->pool);
}
return SVN_NO_ERROR;
}
-/* An editor function. */
+/* Implements svn_stream_lazyopen_func_t. */
+static svn_error_t *
+lazy_open_source(svn_stream_t **stream,
+ void *baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct file_baton *fb = baton;
+
+ SVN_ERR(svn_stream_open_readonly(stream, fb->path_start_revision,
+ result_pool, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* Implements svn_stream_lazyopen_func_t. */
+static svn_error_t *
+lazy_open_result(svn_stream_t **stream,
+ void *baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct file_baton *fb = baton;
+
+ SVN_ERR(svn_stream_open_unique(stream, &fb->path_end_revision, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ result_pool, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* An svn_delta_editor_t function. */
static svn_error_t *
apply_textdelta(void *file_baton,
const char *base_md5_digest,
@@ -883,26 +882,39 @@ apply_textdelta(void *file_baton,
svn_txdelta_window_handler_t *handler,
void **handler_baton)
{
- struct file_baton *b = file_baton;
+ struct file_baton *fb = file_baton;
svn_stream_t *src_stream;
svn_stream_t *result_stream;
- apr_pool_t *scratch_pool = b->pool;
+ apr_pool_t *scratch_pool = fb->pool;
/* Skip *everything* within a newly tree-conflicted directory. */
- if (b->skip)
+ if (fb->skip)
{
*handler = svn_delta_noop_window_handler;
*handler_baton = NULL;
return SVN_NO_ERROR;
}
+ /* If we're not sending file text, then ignore any that we receive. */
+ if (! fb->edit_baton->text_deltas)
+ {
+ /* Supply valid paths to indicate there is a text change. */
+ SVN_ERR(get_empty_file(fb->edit_baton, &fb->path_start_revision));
+ SVN_ERR(get_empty_file(fb->edit_baton, &fb->path_end_revision));
+
+ *handler = svn_delta_noop_window_handler;
+ *handler_baton = NULL;
+
+ return SVN_NO_ERROR;
+ }
+
/* We need the expected pristine file, so go get it */
- if (!b->added)
- SVN_ERR(get_file_from_ra(b, FALSE, b->pool));
+ if (!fb->added)
+ SVN_ERR(get_file_from_ra(fb, FALSE, scratch_pool));
else
- SVN_ERR(get_empty_file(b->edit_baton, &(b->path_start_revision)));
+ SVN_ERR(get_empty_file(fb->edit_baton, &(fb->path_start_revision)));
- SVN_ERR_ASSERT(b->path_start_revision != NULL);
+ SVN_ERR_ASSERT(fb->path_start_revision != NULL);
if (base_md5_digest != NULL)
{
@@ -911,30 +923,29 @@ apply_textdelta(void *file_baton,
SVN_ERR(svn_checksum_parse_hex(&base_md5_checksum, svn_checksum_md5,
base_md5_digest, scratch_pool));
- if (!svn_checksum_match(base_md5_checksum, b->start_md5_checksum))
+ if (!svn_checksum_match(base_md5_checksum, fb->start_md5_checksum))
return svn_error_trace(svn_checksum_mismatch_err(
base_md5_checksum,
- b->start_md5_checksum,
+ fb->start_md5_checksum,
scratch_pool,
_("Base checksum mismatch for '%s'"),
- b->path));
+ fb->path));
}
/* Open the file to be used as the base for second revision */
- SVN_ERR(svn_stream_open_readonly(&src_stream, b->path_start_revision,
- scratch_pool, scratch_pool));
+ src_stream = svn_stream_lazyopen_create(lazy_open_source, fb, TRUE,
+ scratch_pool);
/* Open the file that will become the second revision after applying the
text delta, it starts empty */
- SVN_ERR(svn_stream_open_unique(&result_stream, &b->path_end_revision, NULL,
- svn_io_file_del_on_pool_cleanup,
- scratch_pool, scratch_pool));
+ result_stream = svn_stream_lazyopen_create(lazy_open_result, fb, TRUE,
+ scratch_pool);
svn_txdelta_apply(src_stream,
result_stream,
- b->result_digest,
- b->path, b->pool,
- &(b->apply_handler), &(b->apply_baton));
+ fb->result_digest,
+ fb->path, fb->pool,
+ &(fb->apply_handler), &(fb->apply_baton));
*handler = window_handler;
*handler_baton = file_baton;
@@ -942,7 +953,7 @@ apply_textdelta(void *file_baton,
return SVN_NO_ERROR;
}
-/* An editor function. When the file is closed we have a temporary
+/* An svn_delta_editor_t function. When the file is closed we have a temporary
* file containing a pristine version of the repository file. This can
* be compared against the working copy.
*
@@ -957,265 +968,208 @@ close_file(void *file_baton,
const char *expected_md5_digest,
apr_pool_t *pool)
{
- struct file_baton *b = file_baton;
- struct edit_baton *eb = b->edit_baton;
- svn_wc_notify_state_t content_state = svn_wc_notify_state_unknown;
- svn_wc_notify_state_t prop_state = svn_wc_notify_state_unknown;
+ struct file_baton *fb = file_baton;
+ struct dir_baton *pb = fb->parent_baton;
+ struct edit_baton *eb = fb->edit_baton;
apr_pool_t *scratch_pool;
/* Skip *everything* within a newly tree-conflicted directory. */
- if (b->skip)
+ if (fb->skip)
{
- svn_pool_destroy(b->pool);
+ svn_pool_destroy(fb->pool);
+ SVN_ERR(release_dir(pb));
return SVN_NO_ERROR;
}
- scratch_pool = b->pool;
+ scratch_pool = fb->pool;
- if (expected_md5_digest)
+ if (expected_md5_digest && eb->text_deltas)
{
svn_checksum_t *expected_md5_checksum;
SVN_ERR(svn_checksum_parse_hex(&expected_md5_checksum, svn_checksum_md5,
expected_md5_digest, scratch_pool));
- if (!svn_checksum_match(expected_md5_checksum, b->result_md5_checksum))
+ if (!svn_checksum_match(expected_md5_checksum, fb->result_md5_checksum))
return svn_error_trace(svn_checksum_mismatch_err(
expected_md5_checksum,
- b->result_md5_checksum,
+ fb->result_md5_checksum,
pool,
_("Checksum mismatch for '%s'"),
- b->path));
+ fb->path));
}
- if (!b->added && b->propchanges->nelts > 0)
+ if (fb->added || fb->path_end_revision || fb->has_propchange)
{
- if (!b->pristine_props)
+ apr_hash_t *right_props;
+
+ if (!fb->added && !fb->pristine_props)
{
/* We didn't receive a text change, so we have no pristine props.
Retrieve just the props now. */
- SVN_ERR(get_file_from_ra(b, TRUE, scratch_pool));
+ SVN_ERR(get_file_from_ra(fb, TRUE, scratch_pool));
}
- remove_non_prop_changes(b->pristine_props, b->propchanges);
- }
-
- if (b->path_end_revision || b->propchanges->nelts > 0)
- {
- const char *mimetype1, *mimetype2;
- get_file_mime_types(&mimetype1, &mimetype2, b);
-
-
- if (b->added)
- SVN_ERR(eb->diff_callbacks->file_added(
- &content_state, &prop_state, &b->tree_conflicted,
- b->wcpath,
- b->path_end_revision ? b->path_start_revision : NULL,
- b->path_end_revision,
- 0,
- b->edit_baton->target_revision,
- mimetype1, mimetype2,
- NULL, SVN_INVALID_REVNUM,
- b->propchanges, b->pristine_props,
- b->edit_baton->diff_cmd_baton,
- scratch_pool));
+ if (fb->pristine_props)
+ remove_non_prop_changes(fb->pristine_props, fb->propchanges);
+
+ right_props = svn_prop__patch(fb->pristine_props, fb->propchanges,
+ fb->pool);
+
+ if (fb->added)
+ SVN_ERR(eb->processor->file_added(fb->path,
+ NULL /* copyfrom_src */,
+ fb->right_source,
+ NULL /* copyfrom_file */,
+ fb->path_end_revision,
+ NULL /* copyfrom_props */,
+ right_props,
+ fb->pfb,
+ eb->processor,
+ fb->pool));
else
- SVN_ERR(eb->diff_callbacks->file_changed(
- &content_state, &prop_state,
- &b->tree_conflicted, b->wcpath,
- b->path_end_revision ? b->path_start_revision : NULL,
- b->path_end_revision,
- b->edit_baton->revision,
- b->edit_baton->target_revision,
- mimetype1, mimetype2,
- b->propchanges, b->pristine_props,
- b->edit_baton->diff_cmd_baton,
- scratch_pool));
+ SVN_ERR(eb->processor->file_changed(fb->path,
+ fb->left_source,
+ fb->right_source,
+ fb->path_end_revision
+ ? fb->path_start_revision
+ : NULL,
+ fb->path_end_revision,
+ fb->pristine_props,
+ right_props,
+ (fb->path_end_revision != NULL),
+ fb->propchanges,
+ fb->pfb,
+ eb->processor,
+ fb->pool));
}
+ svn_pool_destroy(fb->pool); /* Destroy file and scratch pool */
- if (eb->notify_func)
- {
- deleted_path_notify_t *dpn;
- svn_wc_notify_t *notify;
- svn_wc_notify_action_t action;
- svn_node_kind_t kind = svn_node_file;
-
- /* Find out if a pending delete notification for this path is
- * still around. */
- dpn = apr_hash_get(eb->deleted_paths, b->wcpath, APR_HASH_KEY_STRING);
- if (dpn)
- {
- /* If any was found, we will handle the pending 'deleted path
- * notification' (DPN) here. Remove it from the list. */
- apr_hash_set(eb->deleted_paths, b->wcpath,
- APR_HASH_KEY_STRING, NULL);
-
- /* the pending delete might be on a different node kind. */
- kind = dpn->kind;
- content_state = prop_state = dpn->state;
- }
-
- /* Determine what the notification (ACTION) should be.
- * In case of a pending 'delete', this might become a 'replace'. */
- if (b->tree_conflicted)
- action = svn_wc_notify_tree_conflict;
- else if (dpn)
- {
- if (dpn->action == svn_wc_notify_update_delete
- && b->added)
- action = svn_wc_notify_update_replace;
- else
- /* Note: dpn->action might be svn_wc_notify_tree_conflict */
- action = dpn->action;
- }
- else if ((content_state == svn_wc_notify_state_missing)
- || (content_state == svn_wc_notify_state_obstructed))
- action = svn_wc_notify_skip;
- else if (b->added)
- action = svn_wc_notify_update_add;
- else
- action = svn_wc_notify_update_update;
-
- notify = svn_wc_create_notify(b->wcpath, action, scratch_pool);
- notify->kind = kind;
- notify->content_state = content_state;
- notify->prop_state = prop_state;
- (*eb->notify_func)(eb->notify_baton, notify, scratch_pool);
- }
-
- svn_pool_destroy(b->pool); /* Destroy file and scratch pool */
+ SVN_ERR(release_dir(pb));
return SVN_NO_ERROR;
}
-/* An editor function. */
+/* Report any accumulated prop changes via the 'dir_props_changed' callback,
+ * and then call the 'dir_closed' callback. Notify about any deleted paths
+ * within this directory that have not already been notified, and then about
+ * this directory itself (unless it was added, in which case the notification
+ * was done at that time).
+ *
+ * An svn_delta_editor_t function. */
static svn_error_t *
close_directory(void *dir_baton,
apr_pool_t *pool)
{
- struct dir_baton *b = dir_baton;
- struct edit_baton *eb = b->edit_baton;
- svn_wc_notify_state_t content_state = svn_wc_notify_state_unknown;
- svn_wc_notify_state_t prop_state = svn_wc_notify_state_unknown;
- svn_boolean_t skipped = FALSE;
+ struct dir_baton *db = dir_baton;
+ struct edit_baton *eb = db->edit_baton;
apr_pool_t *scratch_pool;
+ apr_hash_t *pristine_props;
+ svn_boolean_t send_changed = FALSE;
- /* Skip *everything* within a newly tree-conflicted directory. */
- if (b->skip)
- {
- svn_pool_destroy(b->pool);
- return SVN_NO_ERROR;
- }
-
- scratch_pool = b->pool;
-
- if (!b->added && b->propchanges->nelts > 0)
- remove_non_prop_changes(b->pristine_props, b->propchanges);
+ scratch_pool = db->pool;
- /* Don't do the props_changed stuff if this is a dry_run and we don't
- have an access baton, since in that case the directory will already
- have been recognised as added, in which case they cannot conflict. */
- if (b->propchanges->nelts > 0)
+ if ((db->has_propchange || db->added) && !db->skip)
{
- svn_boolean_t tree_conflicted = FALSE;
- SVN_ERR(eb->diff_callbacks->dir_props_changed(
- &prop_state, &tree_conflicted,
- b->wcpath, b->added,
- b->propchanges, b->pristine_props,
- b->edit_baton->diff_cmd_baton, scratch_pool));
- if (tree_conflicted)
- b->tree_conflicted = TRUE;
-
- if (prop_state == svn_wc_notify_state_obstructed
- || prop_state == svn_wc_notify_state_missing)
+ if (db->added)
{
- content_state = prop_state;
- skipped = TRUE;
+ pristine_props = eb->empty_hash;
}
- }
-
- SVN_ERR(eb->diff_callbacks->dir_closed(NULL, NULL, NULL,
- b->wcpath, b->added,
- b->edit_baton->diff_cmd_baton,
- scratch_pool));
-
- /* Don't notify added directories as they triggered notification
- in add_directory. */
- if (!skipped && !b->added && eb->notify_func)
- {
- apr_hash_index_t *hi;
-
- for (hi = apr_hash_first(pool, eb->deleted_paths); hi;
- hi = apr_hash_next(hi))
+ else
{
- svn_wc_notify_t *notify;
- const char *deleted_path = svn__apr_hash_index_key(hi);
- deleted_path_notify_t *dpn = svn__apr_hash_index_val(hi);
-
- notify = svn_wc_create_notify(deleted_path, dpn->action, pool);
- notify->kind = dpn->kind;
- notify->content_state = notify->prop_state = dpn->state;
- notify->lock_state = svn_wc_notify_lock_state_inapplicable;
- (*eb->notify_func)(eb->notify_baton, notify, pool);
- apr_hash_set(eb->deleted_paths, deleted_path,
- APR_HASH_KEY_STRING, NULL);
+ SVN_ERR(svn_ra_get_dir2(eb->ra_session, NULL, NULL, &pristine_props,
+ db->path, db->base_revision, 0, scratch_pool));
}
- }
- if (!b->added && eb->notify_func)
- {
- svn_wc_notify_t *notify;
- svn_wc_notify_action_t action;
+ if (db->propchanges->nelts > 0)
+ {
+ remove_non_prop_changes(pristine_props, db->propchanges);
+ }
- if (b->tree_conflicted)
- action = svn_wc_notify_tree_conflict;
- else if (skipped)
- action = svn_wc_notify_skip;
- else
- action = svn_wc_notify_update_update;
+ if (db->propchanges->nelts > 0 || db->added)
+ {
+ apr_hash_t *right_props;
- notify = svn_wc_create_notify(b->wcpath, action, pool);
- notify->kind = svn_node_dir;
+ right_props = svn_prop__patch(pristine_props, db->propchanges,
+ scratch_pool);
- /* In case of a tree conflict during merge, the diff callback
- * sets content_state appropriately. So copy the state into the
- * notify_t to make sure conflicts get displayed. */
- notify->content_state = content_state;
+ if (db->added)
+ {
+ SVN_ERR(eb->processor->dir_added(db->path,
+ NULL /* copyfrom */,
+ db->right_source,
+ NULL /* copyfrom props */,
+ right_props,
+ db->pdb,
+ eb->processor,
+ db->pool));
+ }
+ else
+ {
+ SVN_ERR(eb->processor->dir_changed(db->path,
+ db->left_source,
+ db->right_source,
+ pristine_props,
+ right_props,
+ db->propchanges,
+ db->pdb,
+ eb->processor,
+ db->pool));
+ }
- notify->prop_state = prop_state;
- notify->lock_state = svn_wc_notify_lock_state_inapplicable;
- (*eb->notify_func)(eb->notify_baton, notify, scratch_pool);
+ send_changed = TRUE; /* Skip dir_closed */
+ }
}
- svn_pool_destroy(b->pool); /* Destroy baton and scratch_pool */
+ if (! db->skip && !send_changed)
+ {
+ SVN_ERR(eb->processor->dir_closed(db->path,
+ db->left_source,
+ db->right_source,
+ db->pdb,
+ eb->processor,
+ db->pool));
+ }
+ SVN_ERR(release_dir(db));
return SVN_NO_ERROR;
}
-/* An editor function. */
+/* Record a prop change, which we will report later in close_file().
+ *
+ * An svn_delta_editor_t function. */
static svn_error_t *
change_file_prop(void *file_baton,
const char *name,
const svn_string_t *value,
apr_pool_t *pool)
{
- struct file_baton *b = file_baton;
+ struct file_baton *fb = file_baton;
svn_prop_t *propchange;
+ svn_prop_kind_t propkind;
/* Skip *everything* within a newly tree-conflicted directory. */
- if (b->skip)
+ if (fb->skip)
+ return SVN_NO_ERROR;
+
+ propkind = svn_property_kind2(name);
+ if (propkind == svn_prop_wc_kind)
return SVN_NO_ERROR;
+ else if (propkind == svn_prop_regular_kind)
+ fb->has_propchange = TRUE;
- propchange = apr_array_push(b->propchanges);
- propchange->name = apr_pstrdup(b->pool, name);
- propchange->value = value ? svn_string_dup(value, b->pool) : NULL;
+ propchange = apr_array_push(fb->propchanges);
+ propchange->name = apr_pstrdup(fb->pool, name);
+ propchange->value = value ? svn_string_dup(value, fb->pool) : NULL;
return SVN_NO_ERROR;
}
-/* An editor function. */
+/* Make a note of this prop change, to be reported when the dir is closed.
+ *
+ * An svn_delta_editor_t function. */
static svn_error_t *
change_dir_prop(void *dir_baton,
const char *name,
@@ -1224,11 +1178,18 @@ change_dir_prop(void *dir_baton,
{
struct dir_baton *db = dir_baton;
svn_prop_t *propchange;
+ svn_prop_kind_t propkind;
/* Skip *everything* within a newly tree-conflicted directory. */
if (db->skip)
return SVN_NO_ERROR;
+ propkind = svn_property_kind2(name);
+ if (propkind == svn_prop_wc_kind)
+ return SVN_NO_ERROR;
+ else if (propkind == svn_prop_regular_kind)
+ db->has_propchange = TRUE;
+
propchange = apr_array_push(db->propchanges);
propchange->name = apr_pstrdup(db->pool, name);
propchange->value = value ? svn_string_dup(value, db->pool) : NULL;
@@ -1237,7 +1198,7 @@ change_dir_prop(void *dir_baton,
}
-/* An editor function. */
+/* An svn_delta_editor_t function. */
static svn_error_t *
close_edit(void *edit_baton,
apr_pool_t *pool)
@@ -1249,7 +1210,8 @@ close_edit(void *edit_baton,
return SVN_NO_ERROR;
}
-/* An editor function. */
+/* Notify that the node at PATH is 'missing'.
+ * An svn_delta_editor_t function. */
static svn_error_t *
absent_directory(const char *path,
void *parent_baton,
@@ -1258,27 +1220,14 @@ absent_directory(const char *path,
struct dir_baton *pb = parent_baton;
struct edit_baton *eb = pb->edit_baton;
- /* ### TODO: Raise a tree-conflict?? I sure hope not.*/
-
- if (eb->notify_func)
- {
- svn_wc_notify_t *notify
- = svn_wc_create_notify(svn_dirent_join(pb->wcpath,
- svn_relpath_basename(path,
- NULL),
- pool),
- svn_wc_notify_skip, pool);
- notify->kind = svn_node_dir;
- notify->content_state = notify->prop_state
- = svn_wc_notify_state_missing;
- (*eb->notify_func)(eb->notify_baton, notify, pool);
- }
+ SVN_ERR(eb->processor->node_absent(path, pb->pdb, eb->processor, pool));
return SVN_NO_ERROR;
}
-/* An editor function. */
+/* Notify that the node at PATH is 'missing'.
+ * An svn_delta_editor_t function. */
static svn_error_t *
absent_file(const char *path,
void *parent_baton,
@@ -1287,68 +1236,138 @@ absent_file(const char *path,
struct dir_baton *pb = parent_baton;
struct edit_baton *eb = pb->edit_baton;
- /* ### TODO: Raise a tree-conflict?? I sure hope not.*/
+ SVN_ERR(eb->processor->node_absent(path, pb->pdb, eb->processor, pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+fetch_kind_func(svn_node_kind_t *kind,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton *eb = baton;
+
+ if (!SVN_IS_VALID_REVNUM(base_revision))
+ base_revision = eb->revision;
+
+ SVN_ERR(svn_ra_check_path(eb->ra_session, path, base_revision, kind,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+fetch_props_func(apr_hash_t **props,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton *eb = baton;
+ svn_node_kind_t node_kind;
+
+ if (!SVN_IS_VALID_REVNUM(base_revision))
+ base_revision = eb->revision;
- if (eb->notify_func)
+ SVN_ERR(svn_ra_check_path(eb->ra_session, path, base_revision, &node_kind,
+ scratch_pool));
+
+ if (node_kind == svn_node_file)
+ {
+ SVN_ERR(svn_ra_get_file(eb->ra_session, path, base_revision,
+ NULL, NULL, props, result_pool));
+ }
+ else if (node_kind == svn_node_dir)
+ {
+ apr_array_header_t *tmp_props;
+
+ SVN_ERR(svn_ra_get_dir2(eb->ra_session, NULL, NULL, props, path,
+ base_revision, 0 /* Dirent fields */,
+ result_pool));
+ tmp_props = svn_prop_hash_to_array(*props, result_pool);
+ SVN_ERR(svn_categorize_props(tmp_props, NULL, NULL, &tmp_props,
+ result_pool));
+ *props = svn_prop_array_to_hash(tmp_props, result_pool);
+ }
+ else
+ {
+ *props = apr_hash_make(result_pool);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+fetch_base_func(const char **filename,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton *eb = baton;
+ svn_stream_t *fstream;
+ svn_error_t *err;
+
+ if (!SVN_IS_VALID_REVNUM(base_revision))
+ base_revision = eb->revision;
+
+ SVN_ERR(svn_stream_open_unique(&fstream, filename, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ result_pool, scratch_pool));
+
+ err = svn_ra_get_file(eb->ra_session, path, base_revision,
+ fstream, NULL, NULL, scratch_pool);
+ if (err && err->apr_err == SVN_ERR_FS_NOT_FOUND)
{
- svn_wc_notify_t *notify
- = svn_wc_create_notify(svn_dirent_join(pb->wcpath,
- svn_relpath_basename(path,
- pool),
- pool),
- svn_wc_notify_skip, pool);
- notify->kind = svn_node_file;
- notify->content_state = notify->prop_state
- = svn_wc_notify_state_missing;
- (*eb->notify_func)(eb->notify_baton, notify, pool);
+ svn_error_clear(err);
+ SVN_ERR(svn_stream_close(fstream));
+
+ *filename = NULL;
+ return SVN_NO_ERROR;
}
+ else if (err)
+ return svn_error_trace(err);
+
+ SVN_ERR(svn_stream_close(fstream));
return SVN_NO_ERROR;
}
/* Create a repository diff editor and baton. */
svn_error_t *
-svn_client__get_diff_editor(const svn_delta_editor_t **editor,
- void **edit_baton,
- svn_wc_context_t *wc_ctx,
- const char *target,
- svn_depth_t depth,
- svn_ra_session_t *ra_session,
- svn_revnum_t revision,
- svn_boolean_t walk_deleted_dirs,
- svn_boolean_t dry_run,
- const svn_wc_diff_callbacks4_t *diff_callbacks,
- void *diff_cmd_baton,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- svn_wc_notify_func2_t notify_func,
- void *notify_baton,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+svn_client__get_diff_editor2(const svn_delta_editor_t **editor,
+ void **edit_baton,
+ svn_ra_session_t *ra_session,
+ svn_depth_t depth,
+ svn_revnum_t revision,
+ svn_boolean_t text_deltas,
+ const svn_diff_tree_processor_t *processor,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool)
{
apr_pool_t *editor_pool = svn_pool_create(result_pool);
svn_delta_editor_t *tree_editor = svn_delta_default_editor(editor_pool);
struct edit_baton *eb = apr_pcalloc(editor_pool, sizeof(*eb));
- const char *target_abspath;
-
- SVN_ERR(svn_dirent_get_absolute(&target_abspath, target, editor_pool));
+ svn_delta_shim_callbacks_t *shim_callbacks =
+ svn_delta_shim_callbacks_default(editor_pool);
eb->pool = editor_pool;
- eb->target = target;
- eb->wc_ctx = wc_ctx;
eb->depth = depth;
- eb->diff_callbacks = diff_callbacks;
- eb->diff_cmd_baton = diff_cmd_baton;
- eb->dry_run = dry_run;
+
+ eb->processor = processor;
+
eb->ra_session = ra_session;
eb->revision = revision;
eb->empty_file = NULL;
eb->empty_hash = apr_hash_make(eb->pool);
- eb->deleted_paths = apr_hash_make(eb->pool);
- eb->notify_func = notify_func;
- eb->notify_baton = notify_baton;
- eb->walk_deleted_repos_dirs = walk_deleted_dirs;
+ eb->text_deltas = text_deltas;
eb->cancel_func = cancel_func;
eb->cancel_baton = cancel_baton;
@@ -1368,11 +1387,19 @@ svn_client__get_diff_editor(const svn_delta_editor_t **editor,
tree_editor->absent_directory = absent_directory;
tree_editor->absent_file = absent_file;
- return svn_delta_get_cancellation_editor(cancel_func,
- cancel_baton,
- tree_editor,
- eb,
- editor,
- edit_baton,
- eb->pool);
+ SVN_ERR(svn_delta_get_cancellation_editor(cancel_func, cancel_baton,
+ tree_editor, eb,
+ editor, edit_baton,
+ eb->pool));
+
+ shim_callbacks->fetch_kind_func = fetch_kind_func;
+ shim_callbacks->fetch_props_func = fetch_props_func;
+ shim_callbacks->fetch_base_func = fetch_base_func;
+ shim_callbacks->fetch_baton = eb;
+
+ SVN_ERR(svn_editor__insert_shims(editor, edit_baton, *editor, *edit_baton,
+ NULL, NULL, shim_callbacks,
+ result_pool, result_pool));
+
+ return SVN_NO_ERROR;
}
diff --git a/subversion/libsvn_client/repos_diff_summarize.c b/subversion/libsvn_client/repos_diff_summarize.c
deleted file mode 100644
index 23ed29c..0000000
--- a/subversion/libsvn_client/repos_diff_summarize.c
+++ /dev/null
@@ -1,452 +0,0 @@
-/*
- * repos_diff_summarize.c -- The diff summarize editor for summarizing
- * the differences of two repository versions
- *
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- * ====================================================================
- */
-
-
-#include "svn_dirent_uri.h"
-#include "svn_props.h"
-#include "svn_pools.h"
-
-#include "client.h"
-
-
-/* Overall crawler editor baton. */
-struct edit_baton {
- /* The target of the diff, relative to the root of the edit */
- const char *target;
-
- /* The summarize callback passed down from the API */
- svn_client_diff_summarize_func_t summarize_func;
-
- /* The summarize callback baton */
- void *summarize_func_baton;
-
- /* An RA session used to check the kind of deleted paths */
- svn_ra_session_t *ra_session;
-
- /* The start revision for the comparison */
- svn_revnum_t revision;
-
- /* TRUE if the operation needs to walk deleted dirs on the "old" side.
- FALSE otherwise. */
- svn_boolean_t walk_deleted_repos_dirs;
-
- /* A callback used to see if the client wishes to cancel the running
- operation. */
- svn_cancel_func_t cancel_func;
-
- /* A baton to pass to the cancellation callback. */
- void *cancel_baton;
-
-};
-
-
-/* Item baton. */
-struct item_baton {
- /* The overall crawler editor baton */
- struct edit_baton *edit_baton;
-
- /* The summarize filled by the editor calls, NULL if this item hasn't
- been modified (yet) */
- svn_client_diff_summarize_t *summarize;
-
- /* The path of the file or directory within the repository */
- const char *path;
-
- /* The kind of this item */
- svn_node_kind_t node_kind;
-
- /* The file/directory pool */
- apr_pool_t *item_pool;
-};
-
-
-/* Create an item baton, with the fields initialized to EDIT_BATON, PATH,
- * NODE_KIND and POOL, respectively. Allocate the returned structure in POOL.
- */
-static struct item_baton *
-create_item_baton(struct edit_baton *edit_baton,
- const char *path,
- svn_node_kind_t node_kind,
- apr_pool_t *pool)
-{
- struct item_baton *b = apr_pcalloc(pool, sizeof(*b));
-
- b->edit_baton = edit_baton;
- /* Issue #2765: b->path is supposed to be relative to the target.
- If the target is a file, just use an empty path. This way the
- receiver can just concatenate this path to the original path
- without doing any extra checks. */
- if (node_kind == svn_node_file && strcmp(path, edit_baton->target) == 0)
- b->path = "";
- else
- b->path = apr_pstrdup(pool, path);
- b->node_kind = node_kind;
- b->item_pool = pool;
-
- return b;
-}
-
-/* Make sure that this item baton contains a summarize struct.
- * If it doesn't before this call, allocate a new struct in the item's pool,
- * initializing the diff kind to normal.
- * All other fields are also initialized from IB or to NULL/invalid values. */
-static void
-ensure_summarize(struct item_baton *ib)
-{
- svn_client_diff_summarize_t *sum;
- if (ib->summarize)
- return;
-
- sum = apr_pcalloc(ib->item_pool, sizeof(*sum));
-
- sum->node_kind = ib->node_kind;
- sum->summarize_kind = svn_client_diff_summarize_kind_normal;
- sum->path = ib->path;
-
- ib->summarize = sum;
-}
-
-
-/* An editor function. The root of the comparison hierarchy */
-static svn_error_t *
-open_root(void *edit_baton,
- svn_revnum_t base_revision,
- apr_pool_t *pool,
- void **root_baton)
-{
- struct item_baton *ib = create_item_baton(edit_baton, "",
- svn_node_dir, pool);
-
- *root_baton = ib;
- return SVN_NO_ERROR;
-}
-
-/* Recursively walk the tree rooted at DIR (at REVISION) in the
- * repository, reporting all files as deleted. Part of a workaround
- * for issue 2333.
- *
- * DIR is a repository path relative to the URL in RA_SESSION. REVISION
- * may be NULL, in which case it defaults to HEAD. EDIT_BATON is the
- * overall crawler editor baton. If CANCEL_FUNC is not NULL, then it
- * should refer to a cancellation function (along with CANCEL_BATON).
- */
-/* ### TODO: Handle depth. */
-static svn_error_t *
-diff_deleted_dir(const char *dir,
- svn_revnum_t revision,
- svn_ra_session_t *ra_session,
- void *edit_baton,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- apr_pool_t *pool)
-{
- struct edit_baton *eb = edit_baton;
- apr_hash_t *dirents;
- apr_pool_t *iterpool = svn_pool_create(pool);
- apr_hash_index_t *hi;
-
- if (cancel_func)
- SVN_ERR(cancel_func(cancel_baton));
-
- SVN_ERR(svn_ra_get_dir2(ra_session,
- &dirents,
- NULL, NULL,
- dir,
- revision,
- SVN_DIRENT_KIND,
- pool));
-
- for (hi = apr_hash_first(pool, dirents); hi;
- hi = apr_hash_next(hi))
- {
- const char *path;
- const char *name = svn__apr_hash_index_key(hi);
- svn_dirent_t *dirent = svn__apr_hash_index_val(hi);
- svn_node_kind_t kind;
- svn_client_diff_summarize_t *sum;
-
- svn_pool_clear(iterpool);
-
- path = svn_relpath_join(dir, name, iterpool);
-
- SVN_ERR(svn_ra_check_path(eb->ra_session,
- path,
- eb->revision,
- &kind,
- iterpool));
-
- sum = apr_pcalloc(iterpool, sizeof(*sum));
- sum->summarize_kind = svn_client_diff_summarize_kind_deleted;
- sum->path = path;
- sum->node_kind = kind;
-
- SVN_ERR(eb->summarize_func(sum,
- eb->summarize_func_baton,
- iterpool));
-
- if (dirent->kind == svn_node_dir)
- SVN_ERR(diff_deleted_dir(path,
- revision,
- ra_session,
- eb,
- cancel_func,
- cancel_baton,
- iterpool));
- }
-
- svn_pool_destroy(iterpool);
- return SVN_NO_ERROR;
-}
-
-/* An editor function. */
-static svn_error_t *
-delete_entry(const char *path,
- svn_revnum_t base_revision,
- void *parent_baton,
- apr_pool_t *pool)
-{
- struct item_baton *ib = parent_baton;
- struct edit_baton *eb = ib->edit_baton;
- svn_client_diff_summarize_t *sum;
- svn_node_kind_t kind;
-
- /* We need to know if this is a directory or a file */
- SVN_ERR(svn_ra_check_path(eb->ra_session,
- path,
- eb->revision,
- &kind,
- pool));
-
- sum = apr_pcalloc(pool, sizeof(*sum));
- sum->summarize_kind = svn_client_diff_summarize_kind_deleted;
- sum->path = path;
- sum->node_kind = kind;
-
- SVN_ERR(eb->summarize_func(sum, eb->summarize_func_baton, pool));
-
- if (kind == svn_node_dir)
- SVN_ERR(diff_deleted_dir(path,
- eb->revision,
- eb->ra_session,
- eb,
- eb->cancel_func,
- eb->cancel_baton,
- pool));
-
- return SVN_NO_ERROR;
-}
-
-/* An editor function. */
-static svn_error_t *
-add_directory(const char *path,
- void *parent_baton,
- const char *copyfrom_path,
- svn_revnum_t copyfrom_rev,
- apr_pool_t *pool,
- void **child_baton)
-{
- struct item_baton *pb = parent_baton;
- struct item_baton *cb;
-
- cb = create_item_baton(pb->edit_baton, path, svn_node_dir, pool);
- ensure_summarize(cb);
- cb->summarize->summarize_kind = svn_client_diff_summarize_kind_added;
-
- *child_baton = cb;
- return SVN_NO_ERROR;
-}
-
-/* An editor function. */
-static svn_error_t *
-open_directory(const char *path,
- void *parent_baton,
- svn_revnum_t base_revision,
- apr_pool_t *pool,
- void **child_baton)
-{
- struct item_baton *pb = parent_baton;
- struct item_baton *cb;
-
- cb = create_item_baton(pb->edit_baton, path, svn_node_dir, pool);
-
- *child_baton = cb;
- return SVN_NO_ERROR;
-}
-
-
-/* An editor function. */
-static svn_error_t *
-close_directory(void *dir_baton,
- apr_pool_t *pool)
-{
- struct item_baton *ib = dir_baton;
- struct edit_baton *eb = ib->edit_baton;
-
- if (ib->summarize)
- SVN_ERR(eb->summarize_func(ib->summarize, eb->summarize_func_baton,
- pool));
-
- return SVN_NO_ERROR;
-}
-
-
-/* An editor function. */
-static svn_error_t *
-add_file(const char *path,
- void *parent_baton,
- const char *copyfrom_path,
- svn_revnum_t copyfrom_rev,
- apr_pool_t *pool,
- void **file_baton)
-{
- struct item_baton *pb = parent_baton;
- struct item_baton *cb;
-
- cb = create_item_baton(pb->edit_baton, path, svn_node_file, pool);
- ensure_summarize(cb);
- cb->summarize->summarize_kind = svn_client_diff_summarize_kind_added;
-
- *file_baton = cb;
- return SVN_NO_ERROR;
-}
-
-/* An editor function. */
-static svn_error_t *
-open_file(const char *path,
- void *parent_baton,
- svn_revnum_t base_revision,
- apr_pool_t *pool,
- void **file_baton)
-{
- struct item_baton *pb = parent_baton;
- struct item_baton *cb;
-
- cb = create_item_baton(pb->edit_baton, path, svn_node_file, pool);
-
- *file_baton = cb;
- return SVN_NO_ERROR;
-}
-
-/* An editor function. */
-static svn_error_t *
-apply_textdelta(void *file_baton,
- const char *base_checksum,
- apr_pool_t *pool,
- svn_txdelta_window_handler_t *handler,
- void **handler_baton)
-{
- struct item_baton *ib = file_baton;
-
- ensure_summarize(ib);
- if (ib->summarize->summarize_kind == svn_client_diff_summarize_kind_normal)
- ib->summarize->summarize_kind = svn_client_diff_summarize_kind_modified;
-
- *handler = svn_delta_noop_window_handler;
- *handler_baton = NULL;
-
- return SVN_NO_ERROR;
-}
-
-
-/* An editor function. */
-static svn_error_t *
-close_file(void *file_baton,
- const char *text_checksum,
- apr_pool_t *pool)
-{
- struct item_baton *fb = file_baton;
- struct edit_baton *eb = fb->edit_baton;
-
- if (fb->summarize)
- SVN_ERR(eb->summarize_func(fb->summarize, eb->summarize_func_baton,
- pool));
-
- return SVN_NO_ERROR;
-}
-
-
-/* An editor function, implementing both change_file_prop and
- * change_dir_prop. */
-static svn_error_t *
-change_prop(void *entry_baton,
- const char *name,
- const svn_string_t *value,
- apr_pool_t *pool)
-{
- struct item_baton *ib = entry_baton;
-
- if (svn_property_kind(NULL, name) == svn_prop_regular_kind)
- {
- ensure_summarize(ib);
-
- if (ib->summarize->summarize_kind != svn_client_diff_summarize_kind_added)
- ib->summarize->prop_changed = TRUE;
- }
-
- return SVN_NO_ERROR;
-}
-
-/* Create a repository diff summarize editor and baton. */
-svn_error_t *
-svn_client__get_diff_summarize_editor(const char *target,
- svn_client_diff_summarize_func_t
- summarize_func,
- void *summarize_baton,
- svn_ra_session_t *ra_session,
- svn_revnum_t revision,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- const svn_delta_editor_t **editor,
- void **edit_baton,
- apr_pool_t *pool)
-{
- svn_delta_editor_t *tree_editor = svn_delta_default_editor(pool);
- struct edit_baton *eb = apr_palloc(pool, sizeof(*eb));
-
- eb->target = target;
- eb->summarize_func = summarize_func;
- eb->summarize_func_baton = summarize_baton;
- eb->ra_session = ra_session;
- eb->revision = revision;
- eb->walk_deleted_repos_dirs = TRUE;
- eb->cancel_func = cancel_func;
- eb->cancel_baton = cancel_baton;
-
- tree_editor->open_root = open_root;
- tree_editor->delete_entry = delete_entry;
- tree_editor->add_directory = add_directory;
- tree_editor->open_directory = open_directory;
- tree_editor->change_dir_prop = change_prop;
- tree_editor->close_directory = close_directory;
-
- tree_editor->add_file = add_file;
- tree_editor->open_file = open_file;
- tree_editor->apply_textdelta = apply_textdelta;
- tree_editor->change_file_prop = change_prop;
- tree_editor->close_file = close_file;
-
- return svn_delta_get_cancellation_editor(cancel_func, cancel_baton,
- tree_editor, eb, editor, edit_baton,
- pool);
-}
diff --git a/subversion/libsvn_client/resolved.c b/subversion/libsvn_client/resolved.c
index f9e2d9e..0496371 100644
--- a/subversion/libsvn_client/resolved.c
+++ b/subversion/libsvn_client/resolved.c
@@ -27,12 +27,17 @@
/*** Includes. ***/
+#include <stdlib.h>
+
#include "svn_types.h"
#include "svn_wc.h"
#include "svn_client.h"
#include "svn_error.h"
#include "svn_dirent_uri.h"
#include "svn_path.h"
+#include "svn_pools.h"
+#include "svn_hash.h"
+#include "svn_sorts.h"
#include "client.h"
#include "private/svn_wc_private.h"
@@ -41,6 +46,66 @@
/*** Code. ***/
svn_error_t *
+svn_client__resolve_conflicts(svn_boolean_t *conflicts_remain,
+ apr_hash_t *conflicted_paths,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
+{
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ apr_array_header_t *array;
+ int i;
+
+ if (conflicts_remain)
+ *conflicts_remain = FALSE;
+
+ SVN_ERR(svn_hash_keys(&array, conflicted_paths, scratch_pool));
+ qsort(array->elts, array->nelts, array->elt_size,
+ svn_sort_compare_paths);
+
+ for (i = 0; i < array->nelts; i++)
+ {
+ const char *local_abspath = APR_ARRAY_IDX(array, i, const char *);
+
+ svn_pool_clear(iterpool);
+ SVN_ERR(svn_wc__resolve_conflicts(ctx->wc_ctx, local_abspath,
+ svn_depth_empty,
+ TRUE /* resolve_text */,
+ "" /* resolve_prop (ALL props) */,
+ TRUE /* resolve_tree */,
+ svn_wc_conflict_choose_unspecified,
+ ctx->conflict_func2,
+ ctx->conflict_baton2,
+ ctx->cancel_func, ctx->cancel_baton,
+ ctx->notify_func2, ctx->notify_baton2,
+ iterpool));
+
+ if (conflicts_remain)
+ {
+ svn_error_t *err;
+ svn_boolean_t text_c, prop_c, tree_c;
+
+ err = svn_wc_conflicted_p3(&text_c, &prop_c, &tree_c,
+ ctx->wc_ctx, local_abspath,
+ iterpool);
+ if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ text_c = prop_c = tree_c = FALSE;
+ }
+ else
+ {
+ SVN_ERR(err);
+ }
+ if (text_c || prop_c || tree_c)
+ *conflicts_remain = TRUE;
+ }
+ }
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
svn_client_resolve(const char *path,
svn_depth_t depth,
svn_wc_conflict_choice_t conflict_choice,
@@ -48,6 +113,8 @@ svn_client_resolve(const char *path,
apr_pool_t *pool)
{
const char *local_abspath;
+ svn_error_t *err;
+ const char *lock_abspath;
if (svn_path_is_url(path))
return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
@@ -55,15 +122,27 @@ svn_client_resolve(const char *path,
SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, pool));
- SVN_ERR(svn_wc_resolved_conflict5(ctx->wc_ctx, local_abspath,
- depth,
- TRUE /* resolve_text */,
- "" /* resolve_prop (ALL props) */,
- TRUE /* resolve_tree */,
- conflict_choice,
- ctx->cancel_func, ctx->cancel_baton,
- ctx->notify_func2, ctx->notify_baton2,
- pool));
+ /* Similar to SVN_WC__CALL_WITH_WRITE_LOCK but using a custom
+ locking function. */
- return SVN_NO_ERROR;
+ SVN_ERR(svn_wc__acquire_write_lock_for_resolve(&lock_abspath, ctx->wc_ctx,
+ local_abspath, pool, pool));
+ err = svn_wc__resolve_conflicts(ctx->wc_ctx, local_abspath,
+ depth,
+ TRUE /* resolve_text */,
+ "" /* resolve_prop (ALL props) */,
+ TRUE /* resolve_tree */,
+ conflict_choice,
+ ctx->conflict_func2,
+ ctx->conflict_baton2,
+ ctx->cancel_func, ctx->cancel_baton,
+ ctx->notify_func2, ctx->notify_baton2,
+ pool);
+
+ err = svn_error_compose_create(err, svn_wc__release_write_lock(ctx->wc_ctx,
+ lock_abspath,
+ pool));
+ svn_io_sleep_for_timestamps(path, pool);
+
+ return svn_error_trace(err);
}
diff --git a/subversion/libsvn_client/revert.c b/subversion/libsvn_client/revert.c
index f8f6b1d..681e39c 100644
--- a/subversion/libsvn_client/revert.c
+++ b/subversion/libsvn_client/revert.c
@@ -31,6 +31,7 @@
#include "svn_wc.h"
#include "svn_client.h"
#include "svn_dirent_uri.h"
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_error.h"
#include "svn_time.h"
@@ -135,8 +136,9 @@ svn_client_revert2(const apr_array_header_t *paths,
_("'%s' is not a local path"), path);
}
- cfg = ctx->config ? apr_hash_get(ctx->config, SVN_CONFIG_CATEGORY_CONFIG,
- APR_HASH_KEY_STRING) : NULL;
+ cfg = ctx->config
+ ? svn_hash_gets(ctx->config, SVN_CONFIG_CATEGORY_CONFIG)
+ : NULL;
SVN_ERR(svn_config_get_bool(cfg, &use_commit_times,
SVN_CONFIG_SECTION_MISCELLANY,
@@ -158,7 +160,9 @@ svn_client_revert2(const apr_array_header_t *paths,
&& ((err = ctx->cancel_func(ctx->cancel_baton))))
goto errorful;
- SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, pool));
+ err = svn_dirent_get_absolute(&local_abspath, path, pool);
+ if (err)
+ goto errorful;
baton.local_abspath = local_abspath;
baton.depth = depth;
@@ -166,8 +170,9 @@ svn_client_revert2(const apr_array_header_t *paths,
baton.changelists = changelists;
baton.ctx = ctx;
- SVN_ERR(svn_wc__strictly_is_wc_root(&wc_root, ctx->wc_ctx,
- local_abspath, pool));
+ err = svn_wc__is_wcroot(&wc_root, ctx->wc_ctx, local_abspath, pool);
+ if (err)
+ goto errorful;
lock_target = wc_root ? local_abspath
: svn_dirent_dirname(local_abspath, pool);
err = svn_wc__call_with_write_lock(revert, &baton, ctx->wc_ctx,
@@ -178,18 +183,17 @@ svn_client_revert2(const apr_array_header_t *paths,
errorful:
- if (!use_commit_times)
- {
- /* Sleep to ensure timestamp integrity. */
- const char* sleep_path = NULL;
+ {
+ /* Sleep to ensure timestamp integrity. */
+ const char *sleep_path = NULL;
- /* Only specify a path if we are certain all paths are on the
- same filesystem */
- if (paths->nelts == 1)
- sleep_path = APR_ARRAY_IDX(paths, 0, const char *);
+ /* Only specify a path if we are certain all paths are on the
+ same filesystem */
+ if (paths->nelts == 1)
+ sleep_path = APR_ARRAY_IDX(paths, 0, const char *);
- svn_io_sleep_for_timestamps(sleep_path, subpool);
- }
+ svn_io_sleep_for_timestamps(sleep_path, subpool);
+ }
svn_pool_destroy(subpool);
diff --git a/subversion/libsvn_client/revisions.c b/subversion/libsvn_client/revisions.c
index ff24dea..ec255c1 100644
--- a/subversion/libsvn_client/revisions.c
+++ b/subversion/libsvn_client/revisions.c
@@ -91,12 +91,12 @@ svn_client__get_revision_number(svn_revnum_t *revnum,
if (svn_path_is_url(local_abspath))
goto invalid_rev_arg;
- err = svn_wc__node_get_commit_base_rev(revnum, wc_ctx,
- local_abspath,
- scratch_pool);
+ err = svn_wc__node_get_origin(NULL, revnum, NULL, NULL, NULL, NULL,
+ wc_ctx, local_abspath, TRUE,
+ scratch_pool, scratch_pool);
/* Return the same error as older code did (before and at r935091).
- At least svn_client_proplist3 promises SVN_ERR_ENTRY_NOT_FOUND. */
+ At least svn_client_proplist4 promises SVN_ERR_ENTRY_NOT_FOUND. */
if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
{
svn_error_clear(err);
diff --git a/subversion/libsvn_client/status.c b/subversion/libsvn_client/status.c
index 081d45c..e581d37 100644
--- a/subversion/libsvn_client/status.c
+++ b/subversion/libsvn_client/status.c
@@ -87,8 +87,7 @@ tweak_status(void *baton,
transmission. */
if (sb->changelist_hash
&& (! status->changelist
- || ! apr_hash_get(sb->changelist_hash, status->changelist,
- APR_HASH_KEY_STRING)))
+ || ! svn_hash_gets(sb->changelist_hash, status->changelist)))
{
return SVN_NO_ERROR;
}
@@ -189,9 +188,8 @@ reporter_finish_report(void *report_baton, apr_pool_t *pool)
/* Open an RA session to our common ancestor and grab the locks under it.
*/
- SVN_ERR(svn_client__open_ra_session_internal(&ras, NULL, rb->ancestor, NULL,
- NULL, FALSE, TRUE,
- rb->ctx, subpool));
+ SVN_ERR(svn_client_open_ra_session2(&ras, rb->ancestor, NULL,
+ rb->ctx, subpool, subpool));
/* The locks need to live throughout the edit. Note that if the
server doesn't support lock discovery, we'll just not do locky
@@ -236,6 +234,92 @@ static svn_ra_reporter3_t lock_fetch_reporter = {
reporter_abort_report
};
+/* Perform status operations on each external in EXTERNAL_MAP, a const char *
+ local_abspath of all externals mapping to the const char* defining_abspath.
+ All other options are the same as those passed to svn_client_status().
+
+ If ANCHOR_ABSPATH and ANCHOR-RELPATH are not null, use them to provide
+ properly formatted relative paths */
+static svn_error_t *
+do_external_status(svn_client_ctx_t *ctx,
+ apr_hash_t *external_map,
+ svn_depth_t depth,
+ svn_boolean_t get_all,
+ svn_boolean_t update,
+ svn_boolean_t no_ignore,
+ const char *anchor_abspath,
+ const char *anchor_relpath,
+ svn_client_status_func_t status_func,
+ void *status_baton,
+ apr_pool_t *scratch_pool)
+{
+ apr_hash_index_t *hi;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+
+ /* Loop over the hash of new values (we don't care about the old
+ ones). This is a mapping of versioned directories to property
+ values. */
+ for (hi = apr_hash_first(scratch_pool, external_map);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ svn_node_kind_t external_kind;
+ const char *local_abspath = svn__apr_hash_index_key(hi);
+ const char *defining_abspath = svn__apr_hash_index_val(hi);
+ svn_node_kind_t kind;
+ svn_opt_revision_t opt_rev;
+ const char *status_path;
+
+ svn_pool_clear(iterpool);
+
+ /* Obtain information on the expected external. */
+ SVN_ERR(svn_wc__read_external_info(&external_kind, NULL, NULL, NULL,
+ &opt_rev.value.number,
+ ctx->wc_ctx, defining_abspath,
+ local_abspath, FALSE,
+ iterpool, iterpool));
+
+ if (external_kind != svn_node_dir)
+ continue;
+
+ SVN_ERR(svn_io_check_path(local_abspath, &kind, iterpool));
+ if (kind != svn_node_dir)
+ continue;
+
+ if (SVN_IS_VALID_REVNUM(opt_rev.value.number))
+ opt_rev.kind = svn_opt_revision_number;
+ else
+ opt_rev.kind = svn_opt_revision_unspecified;
+
+ /* Tell the client we're starting an external status set. */
+ if (ctx->notify_func2)
+ ctx->notify_func2(
+ ctx->notify_baton2,
+ svn_wc_create_notify(local_abspath,
+ svn_wc_notify_status_external,
+ iterpool), iterpool);
+
+ status_path = local_abspath;
+ if (anchor_abspath)
+ {
+ status_path = svn_dirent_join(anchor_relpath,
+ svn_dirent_skip_ancestor(anchor_abspath,
+ status_path),
+ iterpool);
+ }
+
+ /* And then do the status. */
+ SVN_ERR(svn_client_status5(NULL, ctx, status_path, &opt_rev, depth,
+ get_all, update, no_ignore, FALSE, FALSE,
+ NULL, status_func, status_baton,
+ iterpool));
+ }
+
+ /* Destroy SUBPOOL and (implicitly) ITERPOOL. */
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
/*** Public Interface. ***/
@@ -281,45 +365,56 @@ svn_client_status5(svn_revnum_t *result_rev,
sb.wc_ctx = ctx->wc_ctx;
SVN_ERR(svn_dirent_get_absolute(&target_abspath, path, pool));
- {
- svn_node_kind_t kind;
-
- SVN_ERR(svn_wc_read_kind(&kind, ctx->wc_ctx, target_abspath, FALSE, pool));
-
- /* Dir must be a working copy directory or the status editor fails */
- if (kind == svn_node_dir)
- {
- dir_abspath = target_abspath;
- target_basename = "";
- dir = path;
- }
- else
- {
- dir_abspath = svn_dirent_dirname(target_abspath, pool);
- target_basename = svn_dirent_basename(target_abspath, NULL);
- dir = svn_dirent_dirname(path, pool);
-
- if (kind == svn_node_file)
- {
- if (depth == svn_depth_empty)
- depth = svn_depth_files;
- }
- else
- {
- err = svn_wc_read_kind(&kind, ctx->wc_ctx, dir_abspath, FALSE,
- pool);
-
- svn_error_clear(err);
-
- if (err || kind != svn_node_dir)
- {
- return svn_error_createf(SVN_ERR_WC_NOT_WORKING_COPY, NULL,
- _("'%s' is not a working copy"),
- svn_dirent_local_style(path, pool));
- }
- }
- }
- }
+
+ if (update)
+ {
+ /* The status editor only works on directories, so get the ancestor
+ if necessary */
+
+ svn_node_kind_t kind;
+
+ SVN_ERR(svn_wc_read_kind2(&kind, ctx->wc_ctx, target_abspath,
+ TRUE, FALSE, pool));
+
+ /* Dir must be a working copy directory or the status editor fails */
+ if (kind == svn_node_dir)
+ {
+ dir_abspath = target_abspath;
+ target_basename = "";
+ dir = path;
+ }
+ else
+ {
+ dir_abspath = svn_dirent_dirname(target_abspath, pool);
+ target_basename = svn_dirent_basename(target_abspath, NULL);
+ dir = svn_dirent_dirname(path, pool);
+
+ if (kind == svn_node_file)
+ {
+ if (depth == svn_depth_empty)
+ depth = svn_depth_files;
+ }
+ else
+ {
+ err = svn_wc_read_kind2(&kind, ctx->wc_ctx, dir_abspath,
+ FALSE, FALSE, pool);
+
+ svn_error_clear(err);
+
+ if (err || kind != svn_node_dir)
+ {
+ return svn_error_createf(SVN_ERR_WC_NOT_WORKING_COPY, NULL,
+ _("'%s' is not a working copy"),
+ svn_dirent_local_style(path, pool));
+ }
+ }
+ }
+ }
+ else
+ {
+ dir = path;
+ dir_abspath = target_abspath;
+ }
if (svn_dirent_is_absolute(dir))
{
@@ -361,14 +456,14 @@ svn_client_status5(svn_revnum_t *result_rev,
/* Open a repository session to the URL. */
SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL, URL,
- dir_abspath,
- NULL, FALSE, TRUE,
- ctx, pool));
+ dir_abspath, NULL,
+ FALSE, TRUE,
+ ctx, pool, pool));
SVN_ERR(svn_ra_has_capability(ra_session, &server_supports_depth,
SVN_RA_CAPABILITY_DEPTH, pool));
- SVN_ERR(svn_wc_get_status_editor5(&editor, &edit_baton, &set_locks_baton,
+ SVN_ERR(svn_wc__get_status_editor(&editor, &edit_baton, &set_locks_baton,
&edit_revision, ctx->wc_ctx,
dir_abspath, target_basename,
depth, get_all,
@@ -390,7 +485,7 @@ svn_client_status5(svn_revnum_t *result_rev,
svn_boolean_t added;
/* Our status target does not exist in HEAD. If we've got
- it localled added, that's okay. But if it was previously
+ it locally added, that's okay. But if it was previously
versioned, then it must have since been deleted from the
repository. (Note that "locally replaced" doesn't count
as "added" in this case.) */
@@ -516,10 +611,11 @@ svn_client_status5(svn_revnum_t *result_rev,
pool, pool));
- SVN_ERR(svn_client__do_external_status(ctx, external_map,
- depth, get_all,
- update, no_ignore,
- status_func, status_baton, pool));
+ SVN_ERR(do_external_status(ctx, external_map,
+ depth, get_all,
+ update, no_ignore,
+ sb.anchor_abspath, sb.anchor_relpath,
+ status_func, status_baton, pool));
}
return SVN_NO_ERROR;
@@ -568,6 +664,13 @@ svn_client_status_dup(const svn_client_status_t *status,
result_pool);
}
+ if (status->moved_from_abspath)
+ st->moved_from_abspath =
+ apr_pstrdup(result_pool, status->moved_from_abspath);
+
+ if (status->moved_to_abspath)
+ st->moved_to_abspath = apr_pstrdup(result_pool, status->moved_to_abspath);
+
return st;
}
@@ -607,27 +710,11 @@ svn_client__create_status(svn_client_status_t **cst,
(*cst)->repos_relpath = status->repos_relpath;
(*cst)->switched = status->switched;
- (*cst)->file_external = FALSE;
- if (/* Old style file-externals */
- (status->versioned
- && status->switched
- && status->kind == svn_node_file))
+ (*cst)->file_external = status->file_external;
+ if (status->file_external)
{
- svn_node_kind_t external_kind;
-
- SVN_ERR(svn_wc__read_external_info(&external_kind, NULL, NULL, NULL,
- NULL, wc_ctx,
- local_abspath /* wri_abspath */,
- local_abspath, TRUE,
- scratch_pool, scratch_pool));
-
- if (external_kind == svn_node_file)
- {
- (*cst)->file_external = TRUE;
- (*cst)->switched = FALSE;
- (*cst)->node_status = (*cst)->text_status;
- }
+ (*cst)->switched = FALSE;
}
(*cst)->lock = status->lock;
@@ -672,6 +759,9 @@ svn_client__create_status(svn_client_status_t **cst,
(*cst)->node_status = svn_wc_status_conflicted;
}
+ (*cst)->moved_from_abspath = status->moved_from_abspath;
+ (*cst)->moved_to_abspath = status->moved_to_abspath;
+
return SVN_NO_ERROR;
}
diff --git a/subversion/libsvn_client/switch.c b/subversion/libsvn_client/switch.c
index a67d9e9..cd39cad 100644
--- a/subversion/libsvn_client/switch.c
+++ b/subversion/libsvn_client/switch.c
@@ -29,6 +29,7 @@
#include "svn_client.h"
#include "svn_error.h"
+#include "svn_hash.h"
#include "svn_time.h"
#include "svn_dirent_uri.h"
#include "svn_path.h"
@@ -55,8 +56,35 @@
*/
+/* A conflict callback that simply records the conflicted path in BATON.
+
+ Implements svn_wc_conflict_resolver_func2_t.
+*/
+static svn_error_t *
+record_conflict(svn_wc_conflict_result_t **result,
+ const svn_wc_conflict_description2_t *description,
+ void *baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ apr_hash_t *conflicted_paths = baton;
+
+ svn_hash_sets(conflicted_paths,
+ apr_pstrdup(apr_hash_pool_get(conflicted_paths),
+ description->local_abspath), "");
+ *result = svn_wc_create_conflict_result(svn_wc_conflict_choose_postpone,
+ NULL, result_pool);
+ return SVN_NO_ERROR;
+}
+
+/* ...
+
+ Add the paths of any conflict victims to CONFLICTED_PATHS, if that
+ is not null.
+*/
static svn_error_t *
switch_internal(svn_revnum_t *result_rev,
+ apr_hash_t *conflicted_paths,
const char *local_abspath,
const char *anchor_abspath,
const char *switch_url,
@@ -73,24 +101,23 @@ switch_internal(svn_revnum_t *result_rev,
{
const svn_ra_reporter3_t *reporter;
void *report_baton;
- const char *url, *target, *source_root, *switch_rev_url;
+ const char *anchor_url, *target;
+ svn_client__pathrev_t *switch_loc;
svn_ra_session_t *ra_session;
svn_revnum_t revnum;
- svn_error_t *err = SVN_NO_ERROR;
const char *diff3_cmd;
+ apr_hash_t *wcroot_iprops;
+ apr_array_header_t *inherited_props;
svn_boolean_t use_commit_times;
- svn_boolean_t sleep_here = FALSE;
- svn_boolean_t *use_sleep = timestamp_sleep ? timestamp_sleep : &sleep_here;
const svn_delta_editor_t *switch_editor;
void *switch_edit_baton;
const char *preserved_exts_str;
apr_array_header_t *preserved_exts;
svn_boolean_t server_supports_depth;
struct svn_client__dirent_fetcher_baton_t dfb;
- svn_config_t *cfg = ctx->config ? apr_hash_get(ctx->config,
- SVN_CONFIG_CATEGORY_CONFIG,
- APR_HASH_KEY_STRING)
- : NULL;
+ svn_config_t *cfg = ctx->config
+ ? svn_hash_gets(ctx->config, SVN_CONFIG_CATEGORY_CONFIG)
+ : NULL;
/* An unknown depth can't be sticky. */
if (depth == svn_depth_unknown)
@@ -141,8 +168,9 @@ switch_internal(svn_revnum_t *result_rev,
else
target = "";
- SVN_ERR(svn_wc__node_get_url(&url, ctx->wc_ctx, anchor_abspath, pool, pool));
- if (! url)
+ SVN_ERR(svn_wc__node_get_url(&anchor_url, ctx->wc_ctx, anchor_abspath,
+ pool, pool));
+ if (! anchor_url)
return svn_error_createf(SVN_ERR_ENTRY_MISSING_URL, NULL,
_("Directory '%s' has no URL"),
svn_dirent_local_style(anchor_abspath, pool));
@@ -164,8 +192,8 @@ switch_internal(svn_revnum_t *result_rev,
return SVN_NO_ERROR;
}
- SVN_ERR(svn_wc_read_kind(&target_kind, ctx->wc_ctx, local_abspath, TRUE,
- pool));
+ SVN_ERR(svn_wc_read_kind2(&target_kind, ctx->wc_ctx, local_abspath,
+ TRUE, TRUE, pool));
if (target_kind == svn_node_dir)
SVN_ERR(svn_wc_crop_tree2(ctx->wc_ctx, local_abspath, depth,
@@ -175,20 +203,17 @@ switch_internal(svn_revnum_t *result_rev,
}
/* Open an RA session to 'source' URL */
- SVN_ERR(svn_client__ra_session_from_path(&ra_session, &revnum,
- &switch_rev_url,
- switch_url, anchor_abspath,
- peg_revision, revision,
- ctx, pool));
-
- SVN_ERR(svn_ra_get_repos_root2(ra_session, &source_root, pool));
+ SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &switch_loc,
+ switch_url, anchor_abspath,
+ peg_revision, revision,
+ ctx, pool));
/* Disallow a switch operation to change the repository root of the
target. */
- if (! svn_uri__is_ancestor(source_root, url))
+ if (! svn_uri__is_ancestor(switch_loc->repos_root_url, anchor_url))
return svn_error_createf(SVN_ERR_WC_INVALID_SWITCH, NULL,
_("'%s'\nis not the same repository as\n'%s'"),
- url, source_root);
+ anchor_url, switch_loc->repos_root_url);
/* If we're not ignoring ancestry, then error out if the switch
source and target don't have a common ancestory.
@@ -197,27 +222,82 @@ switch_internal(svn_revnum_t *result_rev,
### okay? */
if (! ignore_ancestry)
{
- const char *target_url, *yc_path;
- svn_revnum_t target_rev, yc_rev;
-
- SVN_ERR(svn_wc__node_get_url(&target_url, ctx->wc_ctx, local_abspath,
- pool, pool));
- SVN_ERR(svn_wc__node_get_base_rev(&target_rev, ctx->wc_ctx,
- local_abspath, pool));
- /* ### It would be nice if this function could reuse the existing
+ svn_client__pathrev_t *target_base_loc, *yca;
+
+ SVN_ERR(svn_client__wc_node_get_base(&target_base_loc, local_abspath,
+ ctx->wc_ctx, pool, pool));
+
+ if (!target_base_loc)
+ yca = NULL; /* Not versioned */
+ else
+ {
+ /* ### It would be nice if this function could reuse the existing
ra session instead of opening two for its own use. */
- SVN_ERR(svn_client__get_youngest_common_ancestor(&yc_path, &yc_rev,
- switch_rev_url, revnum,
- target_url, target_rev,
- ctx, pool));
- if (! (yc_path && SVN_IS_VALID_REVNUM(yc_rev)))
+ SVN_ERR(svn_client__get_youngest_common_ancestor(
+ &yca, switch_loc, target_base_loc, ra_session, ctx,
+ pool, pool));
+ }
+ if (! yca)
return svn_error_createf(SVN_ERR_CLIENT_UNRELATED_RESOURCES, NULL,
_("'%s' shares no common ancestry with '%s'"),
- switch_url, local_abspath);
+ switch_url,
+ svn_dirent_local_style(local_abspath, pool));
}
+ wcroot_iprops = apr_hash_make(pool);
+
+ /* Will the base of LOCAL_ABSPATH require an iprop cache post-switch?
+ If we are switching LOCAL_ABSPATH to the root of the repository then
+ we don't need to cache inherited properties. In all other cases we
+ *might* need to cache iprops. */
+ if (strcmp(switch_loc->repos_root_url, switch_loc->url) != 0)
+ {
+ svn_boolean_t wc_root;
+ svn_boolean_t needs_iprop_cache = TRUE;
+
+ SVN_ERR(svn_wc__is_wcroot(&wc_root, ctx->wc_ctx, local_abspath,
+ pool));
- SVN_ERR(svn_ra_reparent(ra_session, url, pool));
+ /* Switching the WC root to anything but the repos root means
+ we need an iprop cache. */
+ if (!wc_root)
+ {
+ /* We know we are switching a subtree to something other than the
+ repos root, but if we are unswitching that subtree we don't
+ need an iprops cache. */
+ const char *target_parent_url;
+ const char *unswitched_url;
+
+ /* Calculate the URL LOCAL_ABSPATH would have if it was unswitched
+ relative to its parent. */
+ SVN_ERR(svn_wc__node_get_url(&target_parent_url, ctx->wc_ctx,
+ svn_dirent_dirname(local_abspath,
+ pool),
+ pool, pool));
+ unswitched_url = svn_path_url_add_component2(
+ target_parent_url,
+ svn_dirent_basename(local_abspath, pool),
+ pool);
+
+ /* If LOCAL_ABSPATH will be unswitched relative to its parent, then
+ it doesn't need an iprop cache. Note: It doesn't matter if
+ LOCAL_ABSPATH is withing a switched subtree, only if it's the
+ *root* of a switched subtree.*/
+ if (strcmp(unswitched_url, switch_loc->url) == 0)
+ needs_iprop_cache = FALSE;
+ }
+
+
+ if (needs_iprop_cache)
+ {
+ SVN_ERR(svn_ra_get_inherited_props(ra_session, &inherited_props,
+ "", switch_loc->rev, pool,
+ pool));
+ svn_hash_sets(wcroot_iprops, local_abspath, inherited_props);
+ }
+ }
+
+ SVN_ERR(svn_ra_reparent(ra_session, anchor_url, pool));
/* Fetch the switch (update) editor. If REVISION is invalid, that's
okay; the RA driver will call editor->set_target_revision() later on. */
@@ -225,18 +305,19 @@ switch_internal(svn_revnum_t *result_rev,
SVN_RA_CAPABILITY_DEPTH, pool));
dfb.ra_session = ra_session;
- SVN_ERR(svn_ra_get_session_url(ra_session, &dfb.anchor_url, pool));
- dfb.target_revision = revnum;
+ dfb.anchor_url = anchor_url;
+ dfb.target_revision = switch_loc->rev;
- SVN_ERR(svn_wc_get_switch_editor4(&switch_editor, &switch_edit_baton,
+ SVN_ERR(svn_wc__get_switch_editor(&switch_editor, &switch_edit_baton,
&revnum, ctx->wc_ctx, anchor_abspath,
- target, switch_rev_url, use_commit_times,
- depth,
+ target, switch_loc->url, wcroot_iprops,
+ use_commit_times, depth,
depth_is_sticky, allow_unver_obstructions,
server_supports_depth,
diff3_cmd, preserved_exts,
svn_client__dirent_fetcher, &dfb,
- ctx->conflict_func2, ctx->conflict_baton2,
+ conflicted_paths ? record_conflict : NULL,
+ conflicted_paths,
NULL, NULL,
ctx->cancel_func, ctx->cancel_baton,
ctx->notify_func2, ctx->notify_baton2,
@@ -244,35 +325,31 @@ switch_internal(svn_revnum_t *result_rev,
/* Tell RA to do an update of URL+TARGET to REVISION; if we pass an
invalid revnum, that means RA will use the latest revision. */
- SVN_ERR(svn_ra_do_switch2(ra_session, &reporter, &report_baton, revnum,
+ SVN_ERR(svn_ra_do_switch3(ra_session, &reporter, &report_baton,
+ switch_loc->rev,
target,
depth_is_sticky ? depth : svn_depth_unknown,
- switch_rev_url,
- switch_editor, switch_edit_baton, pool));
+ switch_loc->url,
+ FALSE /* send_copyfrom_args */,
+ ignore_ancestry,
+ switch_editor, switch_edit_baton,
+ pool, pool));
+
+ /* Past this point, we assume the WC is going to be modified so we will
+ * need to sleep for timestamps. */
+ *timestamp_sleep = TRUE;
/* Drive the reporter structure, describing the revisions within
PATH. When we call reporter->finish_report, the update_editor
- will be driven by svn_repos_dir_delta2.
-
- We pass in an external_func for recording all externals. It
- shouldn't be needed for a switch if it wasn't for the relative
- externals of type '../path'. All of those must be resolved to
- the new location. */
- err = svn_wc_crawl_revisions5(ctx->wc_ctx, local_abspath, reporter,
- report_baton, TRUE, depth, (! depth_is_sticky),
- (! server_supports_depth),
- use_commit_times,
- ctx->cancel_func, ctx->cancel_baton,
- ctx->notify_func2, ctx->notify_baton2, pool);
-
- if (err)
- {
- /* Don't rely on the error handling to handle the sleep later, do
- it now */
- svn_io_sleep_for_timestamps(local_abspath, pool);
- return svn_error_trace(err);
- }
- *use_sleep = TRUE;
+ will be driven by svn_repos_dir_delta2. */
+ SVN_ERR(svn_wc_crawl_revisions5(ctx->wc_ctx, local_abspath, reporter,
+ report_baton, TRUE,
+ depth, (! depth_is_sticky),
+ (! server_supports_depth),
+ use_commit_times,
+ ctx->cancel_func, ctx->cancel_baton,
+ ctx->notify_func2, ctx->notify_baton2,
+ pool));
/* We handle externals after the switch is complete, so that
handling external items (and any errors therefrom) doesn't delay
@@ -288,20 +365,12 @@ switch_internal(svn_revnum_t *result_rev,
SVN_ERR(svn_client__handle_externals(new_externals,
new_depths,
- source_root, local_abspath,
- depth, use_sleep,
+ switch_loc->repos_root_url,
+ local_abspath,
+ depth, timestamp_sleep,
ctx, pool));
}
- /* Sleep to ensure timestamp integrity (we do this regardless of
- errors in the actual switch operation(s)). */
- if (sleep_here)
- svn_io_sleep_for_timestamps(local_abspath, pool);
-
- /* Return errors we might have sustained. */
- if (err)
- return svn_error_trace(err);
-
/* Let everyone know we're finished here. */
if (ctx->notify_func2)
{
@@ -341,6 +410,8 @@ svn_client__switch_internal(svn_revnum_t *result_rev,
const char *local_abspath, *anchor_abspath;
svn_boolean_t acquired_lock;
svn_error_t *err, *err1, *err2;
+ apr_hash_t *conflicted_paths
+ = ctx->conflict_func2 ? apr_hash_make(pool) : NULL;
SVN_ERR_ASSERT(path);
@@ -357,13 +428,21 @@ svn_client__switch_internal(svn_revnum_t *result_rev,
acquired_lock = (err == SVN_NO_ERROR);
svn_error_clear(err);
- err1 = switch_internal(result_rev, local_abspath, anchor_abspath,
+ err1 = switch_internal(result_rev, conflicted_paths,
+ local_abspath, anchor_abspath,
switch_url, peg_revision, revision,
depth, depth_is_sticky,
ignore_externals,
allow_unver_obstructions, ignore_ancestry,
timestamp_sleep, ctx, pool);
+ /* Give the conflict resolver callback the opportunity to
+ * resolve any conflicts that were raised. */
+ if (! err1 && ctx->conflict_func2)
+ {
+ err1 = svn_client__resolve_conflicts(NULL, conflicted_paths, ctx, pool);
+ }
+
if (acquired_lock)
err2 = svn_wc__release_write_lock(ctx->wc_ctx, anchor_abspath, pool);
else
@@ -386,13 +465,23 @@ svn_client_switch3(svn_revnum_t *result_rev,
svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
+ svn_error_t *err;
+ svn_boolean_t sleep_here = FALSE;
+
if (svn_path_is_url(path))
return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
_("'%s' is not a local path"), path);
- return svn_client__switch_internal(result_rev, path, switch_url,
- peg_revision, revision, depth,
- depth_is_sticky, ignore_externals,
- allow_unver_obstructions,
- ignore_ancestry, NULL, ctx, pool);
+ err = svn_client__switch_internal(result_rev, path, switch_url,
+ peg_revision, revision, depth,
+ depth_is_sticky, ignore_externals,
+ allow_unver_obstructions,
+ ignore_ancestry, &sleep_here, ctx, pool);
+
+ /* Sleep to ensure timestamp integrity (we do this regardless of
+ errors in the actual switch operation(s)). */
+ if (sleep_here)
+ svn_io_sleep_for_timestamps(path, pool);
+
+ return svn_error_trace(err);
}
diff --git a/subversion/libsvn_client/update.c b/subversion/libsvn_client/update.c
index 1d694ea..0b006cc 100644
--- a/subversion/libsvn_client/update.c
+++ b/subversion/libsvn_client/update.c
@@ -27,6 +27,7 @@
/*** Includes. ***/
+#include "svn_hash.h"
#include "svn_wc.h"
#include "svn_client.h"
#include "svn_error.h"
@@ -83,8 +84,7 @@ svn_client__dirent_fetcher(void *baton,
*dirents = NULL;
if (old_url)
- SVN_ERR(svn_client__ensure_ra_session_url(&old_url, dfb->ra_session,
- old_url, scratch_pool));
+ SVN_ERR(svn_ra_reparent(dfb->ra_session, old_url, scratch_pool));
return SVN_NO_ERROR;
}
@@ -161,6 +161,27 @@ is_empty_wc(svn_boolean_t *clean_checkout,
return svn_io_dir_close(dir);
}
+/* A conflict callback that simply records the conflicted path in BATON.
+
+ Implements svn_wc_conflict_resolver_func2_t.
+*/
+static svn_error_t *
+record_conflict(svn_wc_conflict_result_t **result,
+ const svn_wc_conflict_description2_t *description,
+ void *baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ apr_hash_t *conflicted_paths = baton;
+
+ svn_hash_sets(conflicted_paths,
+ apr_pstrdup(apr_hash_pool_get(conflicted_paths),
+ description->local_abspath), "");
+ *result = svn_wc_create_conflict_result(svn_wc_conflict_choose_postpone,
+ NULL, result_pool);
+ return SVN_NO_ERROR;
+}
+
/* This is a helper for svn_client__update_internal(), which see for
an explanation of most of these parameters. Some stuff that's
unique is as follows:
@@ -169,12 +190,16 @@ is_empty_wc(svn_boolean_t *clean_checkout,
This is typically either the same as LOCAL_ABSPATH, or the
immediate parent of LOCAL_ABSPATH.
- If NOTIFY_SUMMARY is set (and there's a notification hander in
+ If NOTIFY_SUMMARY is set (and there's a notification handler in
CTX), transmit the final update summary upon successful
completion of the update.
+
+ Add the paths of any conflict victims to CONFLICTED_PATHS, if that
+ is not null.
*/
static svn_error_t *
update_internal(svn_revnum_t *result_rev,
+ apr_hash_t *conflicted_paths,
const char *local_abspath,
const char *anchor_abspath,
const svn_opt_revision_t *revision,
@@ -192,26 +217,31 @@ update_internal(svn_revnum_t *result_rev,
void *update_edit_baton;
const svn_ra_reporter3_t *reporter;
void *report_baton;
- const char *anchor_url;
const char *corrected_url;
const char *target;
- const char *repos_root;
- svn_error_t *err;
+ const char *repos_root_url;
+ const char *repos_relpath;
+ const char *repos_uuid;
+ const char *anchor_url;
svn_revnum_t revnum;
svn_boolean_t use_commit_times;
- svn_boolean_t sleep_here = FALSE;
- svn_boolean_t *use_sleep = timestamp_sleep ? timestamp_sleep : &sleep_here;
svn_boolean_t clean_checkout = FALSE;
const char *diff3_cmd;
+ apr_hash_t *wcroot_iprops;
+ svn_opt_revision_t opt_rev;
svn_ra_session_t *ra_session;
const char *preserved_exts_str;
apr_array_header_t *preserved_exts;
struct svn_client__dirent_fetcher_baton_t dfb;
svn_boolean_t server_supports_depth;
- svn_boolean_t tree_conflicted;
- svn_config_t *cfg = ctx->config ? apr_hash_get(ctx->config,
- SVN_CONFIG_CATEGORY_CONFIG,
- APR_HASH_KEY_STRING) : NULL;
+ svn_boolean_t cropping_target;
+ svn_boolean_t target_conflicted = FALSE;
+ svn_config_t *cfg = ctx->config
+ ? svn_hash_gets(ctx->config, SVN_CONFIG_CATEGORY_CONFIG)
+ : NULL;
+
+ if (result_rev)
+ *result_rev = SVN_INVALID_REVNUM;
/* An unknown depth can't be sticky. */
if (depth == svn_depth_unknown)
@@ -222,39 +252,45 @@ update_internal(svn_revnum_t *result_rev,
else
target = "";
- /* Get full URL from the ANCHOR. */
- SVN_ERR(svn_wc__node_get_url(&anchor_url, ctx->wc_ctx, anchor_abspath,
- pool, pool));
- if (! anchor_url)
- return svn_error_createf(SVN_ERR_ENTRY_MISSING_URL, NULL,
- _("'%s' has no URL"),
- svn_dirent_local_style(anchor_abspath, pool));
-
- /* Check if our anchor exists in BASE. If it doesn't we can't update.
- ### For performance reasons this should be handled with the same query
- ### as retrieving the anchor url. */
- SVN_ERR(svn_wc__node_get_base_rev(&revnum, ctx->wc_ctx, anchor_abspath,
- pool));
+ /* Check if our anchor exists in BASE. If it doesn't we can't update. */
+ SVN_ERR(svn_wc__node_get_base(NULL, NULL, &repos_relpath, &repos_root_url,
+ &repos_uuid, NULL,
+ ctx->wc_ctx, anchor_abspath,
+ TRUE, FALSE,
+ pool, pool));
- /* It does not make sense to update tree-conflict victims. */
- err = svn_wc_conflicted_p3(NULL, NULL, &tree_conflicted,
- ctx->wc_ctx, local_abspath, pool);
- if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
+ /* It does not make sense to update conflict victims. */
+ if (repos_relpath)
{
+ svn_error_t *err;
+ svn_boolean_t text_conflicted, prop_conflicted;
+
+ anchor_url = svn_path_url_add_component2(repos_root_url, repos_relpath,
+ pool);
+
+ err = svn_wc_conflicted_p3(&text_conflicted, &prop_conflicted,
+ NULL,
+ ctx->wc_ctx, local_abspath, pool);
+
+ if (err && err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND)
+ return svn_error_trace(err);
svn_error_clear(err);
- tree_conflicted = FALSE;
+
+ /* tree-conflicts are handled by the update editor */
+ if (!err && (text_conflicted || prop_conflicted))
+ target_conflicted = TRUE;
}
else
- SVN_ERR(err);
+ anchor_url = NULL;
- if (!SVN_IS_VALID_REVNUM(revnum) || tree_conflicted)
+ if (! anchor_url || target_conflicted)
{
if (ctx->notify_func2)
{
svn_wc_notify_t *nt;
nt = svn_wc_create_notify(local_abspath,
- tree_conflicted
+ target_conflicted
? svn_wc_notify_skip_conflicted
: svn_wc_notify_update_skip_working_only,
pool);
@@ -265,7 +301,8 @@ update_internal(svn_revnum_t *result_rev,
}
/* We may need to crop the tree if the depth is sticky */
- if (depth_is_sticky && depth < svn_depth_infinity)
+ cropping_target = (depth_is_sticky && depth < svn_depth_infinity);
+ if (cropping_target)
{
svn_node_kind_t target_kind;
@@ -281,8 +318,8 @@ update_internal(svn_revnum_t *result_rev,
return SVN_NO_ERROR;
}
- SVN_ERR(svn_wc_read_kind(&target_kind, ctx->wc_ctx, local_abspath, TRUE,
- pool));
+ SVN_ERR(svn_wc_read_kind2(&target_kind, ctx->wc_ctx, local_abspath,
+ TRUE, TRUE, pool));
if (target_kind == svn_node_dir)
{
SVN_ERR(svn_wc_crop_tree2(ctx->wc_ctx, local_abspath, depth,
@@ -333,33 +370,42 @@ update_internal(svn_revnum_t *result_rev,
SVN_ERR(svn_client__open_ra_session_internal(&ra_session, &corrected_url,
anchor_url,
anchor_abspath, NULL, TRUE,
- TRUE, ctx, pool));
-
- SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root, pool));
+ TRUE, ctx, pool, pool));
/* If we got a corrected URL from the RA subsystem, we'll need to
relocate our working copy first. */
if (corrected_url)
{
- const char *current_repos_root;
- const char *current_uuid;
+ const char *new_repos_root_url;
/* To relocate everything inside our repository we need the old and new
- repos root. ### And we should only perform relocates on the wcroot */
- SVN_ERR(svn_wc__node_get_repos_info(&current_repos_root, &current_uuid,
- ctx->wc_ctx, anchor_abspath,
- pool, pool));
-
- /* ### Check uuid here before calling relocate? */
- SVN_ERR(svn_client_relocate2(anchor_abspath, current_repos_root,
- repos_root, ignore_externals, ctx, pool));
+ repos root. */
+ SVN_ERR(svn_ra_get_repos_root2(ra_session, &new_repos_root_url, pool));
+
+ /* svn_client_relocate2() will check the uuid */
+ SVN_ERR(svn_client_relocate2(anchor_abspath, repos_root_url,
+ new_repos_root_url, ignore_externals,
+ ctx, pool));
+
+ /* Store updated repository root for externals */
+ repos_root_url = new_repos_root_url;
+ /* ### We should update anchor_loc->repos_uuid too, although currently
+ * we don't use it. */
anchor_url = corrected_url;
}
+ /* Resolve unspecified REVISION now, because we need to retrieve the
+ correct inherited props prior to the editor drive and we need to
+ use the same value of HEAD for both. */
+ opt_rev.kind = revision->kind;
+ opt_rev.value = revision->value;
+ if (opt_rev.kind == svn_opt_revision_unspecified)
+ opt_rev.kind = svn_opt_revision_head;
+
/* ### todo: shouldn't svn_client__get_revision_number be able
to take a URL as easily as a local path? */
SVN_ERR(svn_client__get_revision_number(&revnum, NULL, ctx->wc_ctx,
- local_abspath, ra_session, revision,
+ local_abspath, ra_session, &opt_rev,
pool));
SVN_ERR(svn_ra_has_capability(ra_session, &server_supports_depth,
@@ -369,18 +415,24 @@ update_internal(svn_revnum_t *result_rev,
dfb.target_revision = revnum;
dfb.anchor_url = anchor_url;
+ SVN_ERR(svn_client__get_inheritable_props(&wcroot_iprops, local_abspath,
+ revnum, depth, ra_session,
+ ctx, pool, pool));
+
/* Fetch the update editor. If REVISION is invalid, that's okay;
the RA driver will call editor->set_target_revision later on. */
- SVN_ERR(svn_wc_get_update_editor4(&update_editor, &update_edit_baton,
+ SVN_ERR(svn_wc__get_update_editor(&update_editor, &update_edit_baton,
&revnum, ctx->wc_ctx, anchor_abspath,
- target, use_commit_times, depth,
- depth_is_sticky, allow_unver_obstructions,
+ target, wcroot_iprops, use_commit_times,
+ depth, depth_is_sticky,
+ allow_unver_obstructions,
adds_as_modification,
server_supports_depth,
clean_checkout,
diff3_cmd, preserved_exts,
svn_client__dirent_fetcher, &dfb,
- ctx->conflict_func2, ctx->conflict_baton2,
+ conflicted_paths ? record_conflict : NULL,
+ conflicted_paths,
NULL, NULL,
ctx->cancel_func, ctx->cancel_baton,
ctx->notify_func2, ctx->notify_baton2,
@@ -388,37 +440,36 @@ update_internal(svn_revnum_t *result_rev,
/* Tell RA to do an update of URL+TARGET to REVISION; if we pass an
invalid revnum, that means RA will use the latest revision. */
- SVN_ERR(svn_ra_do_update2(ra_session, &reporter, &report_baton,
+ SVN_ERR(svn_ra_do_update3(ra_session, &reporter, &report_baton,
revnum, target,
(!server_supports_depth || depth_is_sticky
? depth
: svn_depth_unknown),
- FALSE, update_editor, update_edit_baton, pool));
+ FALSE /* send_copyfrom_args */,
+ FALSE /* ignore_ancestry */,
+ update_editor, update_edit_baton, pool, pool));
+
+ /* Past this point, we assume the WC is going to be modified so we will
+ * need to sleep for timestamps. */
+ *timestamp_sleep = TRUE;
/* Drive the reporter structure, describing the revisions within
PATH. When we call reporter->finish_report, the
update_editor will be driven by svn_repos_dir_delta2. */
- err = svn_wc_crawl_revisions5(ctx->wc_ctx, local_abspath, reporter,
- report_baton, TRUE, depth, (! depth_is_sticky),
- (! server_supports_depth),
- use_commit_times,
- ctx->cancel_func, ctx->cancel_baton,
- ctx->notify_func2, ctx->notify_baton2,
- pool);
-
- if (err)
- {
- /* Don't rely on the error handling to handle the sleep later, do
- it now */
- svn_io_sleep_for_timestamps(local_abspath, pool);
- return svn_error_trace(err);
- }
- *use_sleep = TRUE;
+ SVN_ERR(svn_wc_crawl_revisions5(ctx->wc_ctx, local_abspath, reporter,
+ report_baton, TRUE,
+ depth, (! depth_is_sticky),
+ (! server_supports_depth),
+ use_commit_times,
+ ctx->cancel_func, ctx->cancel_baton,
+ ctx->notify_func2, ctx->notify_baton2,
+ pool));
/* We handle externals after the update is complete, so that
handling external items (and any errors therefrom) doesn't delay
the primary operation. */
- if (SVN_DEPTH_IS_RECURSIVE(depth) && (! ignore_externals))
+ if ((SVN_DEPTH_IS_RECURSIVE(depth) || cropping_target)
+ && (! ignore_externals))
{
apr_hash_t *new_externals;
apr_hash_t *new_depths;
@@ -429,14 +480,11 @@ update_internal(svn_revnum_t *result_rev,
SVN_ERR(svn_client__handle_externals(new_externals,
new_depths,
- repos_root, local_abspath,
- depth, use_sleep,
+ repos_root_url, local_abspath,
+ depth, timestamp_sleep,
ctx, pool));
}
- if (sleep_here)
- svn_io_sleep_for_timestamps(local_abspath, pool);
-
/* Let everyone know we're finished here (unless we're asked not to). */
if (ctx->notify_func2 && notify_summary)
{
@@ -476,6 +524,8 @@ svn_client__update_internal(svn_revnum_t *result_rev,
const char *anchor_abspath, *lockroot_abspath;
svn_error_t *err;
svn_opt_revision_t peg_revision = *revision;
+ apr_hash_t *conflicted_paths
+ = ctx->conflict_func2 ? apr_hash_make(pool) : NULL;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
SVN_ERR_ASSERT(! (innerupdate && make_parents));
@@ -516,7 +566,9 @@ svn_client__update_internal(svn_revnum_t *result_rev,
{
const char *missing_parent =
APR_ARRAY_IDX(missing_parents, i, const char *);
- err = update_internal(result_rev, missing_parent, anchor_abspath,
+
+ err = update_internal(result_rev, conflicted_paths,
+ missing_parent, anchor_abspath,
&peg_revision, svn_depth_empty, FALSE,
ignore_externals, allow_unver_obstructions,
adds_as_modification, timestamp_sleep,
@@ -540,11 +592,20 @@ svn_client__update_internal(svn_revnum_t *result_rev,
anchor_abspath = lockroot_abspath;
}
- err = update_internal(result_rev, local_abspath, anchor_abspath,
+ err = update_internal(result_rev, conflicted_paths,
+ local_abspath, anchor_abspath,
&peg_revision, depth, depth_is_sticky,
ignore_externals, allow_unver_obstructions,
adds_as_modification, timestamp_sleep,
TRUE, ctx, pool);
+
+ /* Give the conflict resolver callback the opportunity to
+ * resolve any conflicts that were raised. */
+ if (! err && ctx->conflict_func2)
+ {
+ err = svn_client__resolve_conflicts(NULL, conflicted_paths, ctx, pool);
+ }
+
cleanup:
err = svn_error_compose_create(
err,
@@ -568,9 +629,10 @@ svn_client_update4(apr_array_header_t **result_revs,
apr_pool_t *pool)
{
int i;
- apr_pool_t *subpool = svn_pool_create(pool);
+ apr_pool_t *iterpool = svn_pool_create(pool);
const char *path = NULL;
svn_boolean_t sleep = FALSE;
+ svn_error_t *err = SVN_NO_ERROR;
if (result_revs)
*result_revs = apr_array_make(pool, paths->nelts, sizeof(svn_revnum_t));
@@ -586,17 +648,22 @@ svn_client_update4(apr_array_header_t **result_revs,
for (i = 0; i < paths->nelts; ++i)
{
- svn_error_t *err = SVN_NO_ERROR;
svn_revnum_t result_rev;
const char *local_abspath;
path = APR_ARRAY_IDX(paths, i, const char *);
- svn_pool_clear(subpool);
+ svn_pool_clear(iterpool);
if (ctx->cancel_func)
- SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
+ {
+ err = ctx->cancel_func(ctx->cancel_baton);
+ if (err)
+ goto cleanup;
+ }
- SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, subpool));
+ err = svn_dirent_get_absolute(&local_abspath, path, iterpool);
+ if (err)
+ goto cleanup;
err = svn_client__update_internal(&result_rev, local_abspath,
revision, depth, depth_is_sticky,
ignore_externals,
@@ -604,14 +671,16 @@ svn_client_update4(apr_array_header_t **result_revs,
adds_as_modification,
make_parents,
FALSE, &sleep,
- ctx, subpool);
+ ctx,
+ iterpool);
if (err)
{
- if(err->apr_err != SVN_ERR_WC_NOT_WORKING_COPY)
- return svn_error_trace(err);
+ if (err->apr_err != SVN_ERR_WC_NOT_WORKING_COPY)
+ goto cleanup;
svn_error_clear(err);
+ err = SVN_NO_ERROR;
/* SVN_ERR_WC_NOT_WORKING_COPY: it's not versioned */
@@ -621,17 +690,34 @@ svn_client_update4(apr_array_header_t **result_revs,
svn_wc_notify_t *notify;
notify = svn_wc_create_notify(path,
svn_wc_notify_skip,
- subpool);
- (*ctx->notify_func2)(ctx->notify_baton2, notify, subpool);
+ iterpool);
+ (*ctx->notify_func2)(ctx->notify_baton2, notify, iterpool);
}
}
if (result_revs)
APR_ARRAY_PUSH(*result_revs, svn_revnum_t) = result_rev;
}
+ svn_pool_destroy(iterpool);
- svn_pool_destroy(subpool);
+ cleanup:
if (sleep)
- svn_io_sleep_for_timestamps((paths->nelts == 1) ? path : NULL, pool);
+ {
+ const char *wcroot_abspath;
- return SVN_NO_ERROR;
+ if (paths->nelts == 1)
+ {
+ const char *abspath;
+
+ /* PATH iteslf may have been removed by the update. */
+ SVN_ERR(svn_dirent_get_absolute(&abspath, path, pool));
+ SVN_ERR(svn_wc__get_wcroot(&wcroot_abspath, ctx->wc_ctx, abspath,
+ pool, pool));
+ }
+ else
+ wcroot_abspath = NULL;
+
+ svn_io_sleep_for_timestamps(wcroot_abspath, pool);
+ }
+
+ return svn_error_trace(err);
}
diff --git a/subversion/libsvn_client/upgrade.c b/subversion/libsvn_client/upgrade.c
new file mode 100644
index 0000000..7a69619
--- /dev/null
+++ b/subversion/libsvn_client/upgrade.c
@@ -0,0 +1,405 @@
+/*
+ * upgrade.c: wrapper around wc upgrade functionality.
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+/* ==================================================================== */
+
+
+
+/*** Includes. ***/
+
+#include "svn_time.h"
+#include "svn_wc.h"
+#include "svn_client.h"
+#include "svn_config.h"
+#include "svn_dirent_uri.h"
+#include "svn_path.h"
+#include "svn_pools.h"
+#include "client.h"
+#include "svn_props.h"
+
+#include "svn_private_config.h"
+#include "private/svn_wc_private.h"
+
+
+/*** Code. ***/
+
+/* callback baton for fetch_repos_info */
+struct repos_info_baton
+{
+ apr_pool_t *state_pool;
+ svn_client_ctx_t *ctx;
+ const char *last_repos;
+ const char *last_uuid;
+};
+
+/* svn_wc_upgrade_get_repos_info_t implementation for calling
+ svn_wc_upgrade() from svn_client_upgrade() */
+static svn_error_t *
+fetch_repos_info(const char **repos_root,
+ const char **repos_uuid,
+ void *baton,
+ const char *url,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct repos_info_baton *ri = baton;
+
+ /* The same info is likely to retrieved multiple times (e.g. externals) */
+ if (ri->last_repos && svn_uri__is_ancestor(ri->last_repos, url))
+ {
+ *repos_root = apr_pstrdup(result_pool, ri->last_repos);
+ *repos_uuid = apr_pstrdup(result_pool, ri->last_uuid);
+ return SVN_NO_ERROR;
+ }
+
+ SVN_ERR(svn_client_get_repos_root(repos_root, repos_uuid, url, ri->ctx,
+ result_pool, scratch_pool));
+
+ /* Store data for further calls */
+ ri->last_repos = apr_pstrdup(ri->state_pool, *repos_root);
+ ri->last_uuid = apr_pstrdup(ri->state_pool, *repos_uuid);
+
+ return SVN_NO_ERROR;
+}
+
+/* Forward definition. Upgrades svn:externals properties in the working copy
+ LOCAL_ABSPATH to the WC-NG storage.
+ */
+static svn_error_t *
+upgrade_externals_from_properties(svn_client_ctx_t *ctx,
+ const char *local_abspath,
+ apr_pool_t *scratch_pool);
+
+svn_error_t *
+svn_client_upgrade(const char *path,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
+{
+ const char *local_abspath;
+ apr_hash_t *externals;
+ struct repos_info_baton info_baton;
+
+ info_baton.state_pool = scratch_pool;
+ info_baton.ctx = ctx;
+ info_baton.last_repos = NULL;
+ info_baton.last_uuid = NULL;
+
+ if (svn_path_is_url(path))
+ return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("'%s' is not a local path"), path);
+
+ SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, scratch_pool));
+ SVN_ERR(svn_wc_upgrade(ctx->wc_ctx, local_abspath,
+ fetch_repos_info, &info_baton,
+ ctx->cancel_func, ctx->cancel_baton,
+ ctx->notify_func2, ctx->notify_baton2,
+ scratch_pool));
+
+ SVN_ERR(svn_wc__externals_defined_below(&externals,
+ ctx->wc_ctx, local_abspath,
+ scratch_pool, scratch_pool));
+
+ if (apr_hash_count(externals) > 0)
+ {
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ apr_hash_index_t *hi;
+
+ /* We are upgrading from >= 1.7. No need to upgrade from
+ svn:externals properties. And by that avoiding the removal
+ of recorded externals information (issue #4519)
+
+ Only directory externals need an explicit upgrade */
+ for (hi = apr_hash_first(scratch_pool, externals);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ const char *ext_abspath;
+ svn_node_kind_t kind;
+
+ svn_pool_clear(iterpool);
+
+ ext_abspath = svn__apr_hash_index_key(hi);
+
+ SVN_ERR(svn_wc__read_external_info(&kind, NULL, NULL, NULL, NULL,
+ ctx->wc_ctx, local_abspath,
+ ext_abspath, FALSE,
+ iterpool, iterpool));
+
+ if (kind == svn_node_dir)
+ {
+ svn_error_t *err = svn_client_upgrade(ext_abspath, ctx, iterpool);
+
+ if (err)
+ {
+ svn_wc_notify_t *notify =
+ svn_wc_create_notify(ext_abspath,
+ svn_wc_notify_failed_external,
+ iterpool);
+ notify->err = err;
+ ctx->notify_func2(ctx->notify_baton2,
+ notify, iterpool);
+ svn_error_clear(err);
+ /* Next external node, please... */
+ }
+ }
+ }
+
+ svn_pool_destroy(iterpool);
+ }
+ else
+ {
+ /* Upgrading from <= 1.6, or no svn:properties defined.
+ (There is no way to detect the difference from libsvn_client :( ) */
+
+ SVN_ERR(upgrade_externals_from_properties(ctx, local_abspath,
+ scratch_pool));
+ }
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+upgrade_externals_from_properties(svn_client_ctx_t *ctx,
+ const char *local_abspath,
+ apr_pool_t *scratch_pool)
+{
+ apr_hash_index_t *hi;
+ apr_pool_t *iterpool;
+ apr_pool_t *iterpool2;
+ apr_hash_t *externals;
+ svn_opt_revision_t rev = {svn_opt_revision_unspecified, {0}};
+ struct repos_info_baton info_baton;
+
+ /* Now it's time to upgrade the externals too. We do it after the wc
+ upgrade to avoid that errors in the externals causes the wc upgrade to
+ fail. Thanks to caching the performance penalty of walking the wc a
+ second time shouldn't be too severe */
+ SVN_ERR(svn_client_propget5(&externals, NULL, SVN_PROP_EXTERNALS,
+ local_abspath, &rev, &rev, NULL,
+ svn_depth_infinity, NULL, ctx,
+ scratch_pool, scratch_pool));
+
+ iterpool = svn_pool_create(scratch_pool);
+ iterpool2 = svn_pool_create(scratch_pool);
+
+ for (hi = apr_hash_first(scratch_pool, externals); hi;
+ hi = apr_hash_next(hi))
+ {
+ int i;
+ const char *externals_parent_abspath;
+ const char *externals_parent_url;
+ const char *externals_parent_repos_root_url;
+ const char *externals_parent_repos_relpath;
+ const char *externals_parent = svn__apr_hash_index_key(hi);
+ svn_string_t *external_desc = svn__apr_hash_index_val(hi);
+ apr_array_header_t *externals_p;
+ svn_error_t *err;
+
+ svn_pool_clear(iterpool);
+ externals_p = apr_array_make(iterpool, 1,
+ sizeof(svn_wc_external_item2_t*));
+
+ /* In this loop, an error causes the respective externals definition, or
+ * the external (inner loop), to be skipped, so that upgrade carries on
+ * with the other externals. */
+
+ err = svn_dirent_get_absolute(&externals_parent_abspath,
+ externals_parent, iterpool);
+
+ if (!err)
+ err = svn_wc__node_get_repos_info(NULL,
+ &externals_parent_repos_relpath,
+ &externals_parent_repos_root_url,
+ NULL,
+ ctx->wc_ctx,
+ externals_parent_abspath,
+ iterpool, iterpool);
+
+ if (!err)
+ externals_parent_url = svn_path_url_add_component2(
+ externals_parent_repos_root_url,
+ externals_parent_repos_relpath,
+ iterpool);
+ if (!err)
+ err = svn_wc_parse_externals_description3(
+ &externals_p, svn_dirent_dirname(local_abspath, iterpool),
+ external_desc->data, FALSE, iterpool);
+ if (err)
+ {
+ svn_wc_notify_t *notify =
+ svn_wc_create_notify(externals_parent,
+ svn_wc_notify_failed_external,
+ scratch_pool);
+ notify->err = err;
+
+ ctx->notify_func2(ctx->notify_baton2,
+ notify, scratch_pool);
+
+ svn_error_clear(err);
+
+ /* Next externals definition, please... */
+ continue;
+ }
+
+ for (i = 0; i < externals_p->nelts; i++)
+ {
+ svn_wc_external_item2_t *item;
+ const char *resolved_url;
+ const char *external_abspath;
+ const char *repos_relpath;
+ const char *repos_root_url;
+ const char *repos_uuid;
+ svn_node_kind_t external_kind;
+ svn_revnum_t peg_revision;
+ svn_revnum_t revision;
+
+ item = APR_ARRAY_IDX(externals_p, i, svn_wc_external_item2_t*);
+
+ svn_pool_clear(iterpool2);
+ external_abspath = svn_dirent_join(externals_parent_abspath,
+ item->target_dir,
+ iterpool2);
+
+ err = svn_wc__resolve_relative_external_url(
+ &resolved_url,
+ item,
+ externals_parent_repos_root_url,
+ externals_parent_url,
+ scratch_pool, scratch_pool);
+ if (err)
+ goto handle_error;
+
+ /* This is a hack. We only need to call svn_wc_upgrade() on external
+ * dirs, as file externals are upgraded along with their defining
+ * WC. Reading the kind will throw an exception on an external dir,
+ * saying that the wc must be upgraded. If it's a file, the lookup
+ * is done in an adm_dir belonging to the defining wc (which has
+ * already been upgraded) and no error is returned. If it doesn't
+ * exist (external that isn't checked out yet), we'll just get
+ * svn_node_none. */
+ err = svn_wc_read_kind2(&external_kind, ctx->wc_ctx,
+ external_abspath, TRUE, FALSE, iterpool2);
+ if (err && err->apr_err == SVN_ERR_WC_UPGRADE_REQUIRED)
+ {
+ svn_error_clear(err);
+
+ err = svn_client_upgrade(external_abspath, ctx, iterpool2);
+ if (err)
+ goto handle_error;
+ }
+ else if (err)
+ goto handle_error;
+
+ /* The upgrade of any dir should be done now, get the now reliable
+ * kind. */
+ err = svn_wc_read_kind2(&external_kind, ctx->wc_ctx, external_abspath,
+ TRUE, FALSE, iterpool2);
+ if (err)
+ goto handle_error;
+
+ /* Update the EXTERNALS table according to the root URL,
+ * relpath and uuid known in the upgraded external WC. */
+
+ /* We should probably have a function that provides all three
+ * of root URL, repos relpath and uuid at once, but here goes... */
+
+ /* First get the relpath, as that returns SVN_ERR_WC_PATH_NOT_FOUND
+ * when the node is not present in the file system.
+ * svn_wc__node_get_repos_info() would try to derive the URL. */
+ err = svn_wc__node_get_repos_info(NULL,
+ &repos_relpath,
+ &repos_root_url,
+ &repos_uuid,
+ ctx->wc_ctx,
+ external_abspath,
+ iterpool2, iterpool2);
+ if (err)
+ goto handle_error;
+
+ /* If we haven't got any information from the checked out external,
+ * or if the URL information mismatches the external's definition,
+ * ask fetch_repos_info() to find out the repos root. */
+ if (0 != strcmp(resolved_url,
+ svn_path_url_add_component2(repos_root_url,
+ repos_relpath,
+ scratch_pool)))
+ {
+ err = fetch_repos_info(&repos_root_url,
+ &repos_uuid,
+ &info_baton,
+ resolved_url,
+ scratch_pool, scratch_pool);
+ if (err)
+ goto handle_error;
+
+ repos_relpath = svn_uri_skip_ancestor(repos_root_url,
+ resolved_url,
+ iterpool2);
+
+ /* There's just the URL, no idea what kind the external is.
+ * That's fine, as the external isn't even checked out yet.
+ * The kind will be set during the next 'update'. */
+ external_kind = svn_node_unknown;
+ }
+
+ if (err)
+ goto handle_error;
+
+ peg_revision = (item->peg_revision.kind == svn_opt_revision_number
+ ? item->peg_revision.value.number
+ : SVN_INVALID_REVNUM);
+
+ revision = (item->revision.kind == svn_opt_revision_number
+ ? item->revision.value.number
+ : SVN_INVALID_REVNUM);
+
+ err = svn_wc__upgrade_add_external_info(ctx->wc_ctx,
+ external_abspath,
+ external_kind,
+ externals_parent,
+ repos_relpath,
+ repos_root_url,
+ repos_uuid,
+ peg_revision,
+ revision,
+ iterpool2);
+handle_error:
+ if (err)
+ {
+ svn_wc_notify_t *notify =
+ svn_wc_create_notify(external_abspath,
+ svn_wc_notify_failed_external,
+ scratch_pool);
+ notify->err = err;
+ ctx->notify_func2(ctx->notify_baton2,
+ notify, scratch_pool);
+ svn_error_clear(err);
+ /* Next external node, please... */
+ }
+ }
+ }
+
+ svn_pool_destroy(iterpool);
+ svn_pool_destroy(iterpool2);
+
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/libsvn_client/url.c b/subversion/libsvn_client/url.c
index 20df340..36019ad 100644
--- a/subversion/libsvn_client/url.c
+++ b/subversion/libsvn_client/url.c
@@ -61,18 +61,3 @@ svn_client_url_from_path2(const char **url,
return SVN_NO_ERROR;
}
-
-
-svn_error_t *
-svn_client_root_url_from_path(const char **url,
- const char *path_or_url,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool)
-{
- if (!svn_path_is_url(path_or_url))
- SVN_ERR(svn_dirent_get_absolute(&path_or_url, path_or_url, pool));
-
- return svn_error_trace(
- svn_client__get_repos_root(url, path_or_url,
- ctx, pool, pool));
-}
diff --git a/subversion/libsvn_client/util.c b/subversion/libsvn_client/util.c
index 2e2aec7..06855e7 100644
--- a/subversion/libsvn_client/util.c
+++ b/subversion/libsvn_client/util.c
@@ -24,6 +24,7 @@
#include <apr_pools.h>
#include <apr_strings.h>
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_error.h"
#include "svn_types.h"
@@ -41,6 +42,99 @@
#include "svn_private_config.h"
+svn_client__pathrev_t *
+svn_client__pathrev_create(const char *repos_root_url,
+ const char *repos_uuid,
+ svn_revnum_t rev,
+ const char *url,
+ apr_pool_t *result_pool)
+{
+ svn_client__pathrev_t *loc = apr_palloc(result_pool, sizeof(*loc));
+
+ SVN_ERR_ASSERT_NO_RETURN(svn_path_is_url(repos_root_url));
+ SVN_ERR_ASSERT_NO_RETURN(svn_path_is_url(url));
+
+ loc->repos_root_url = apr_pstrdup(result_pool, repos_root_url);
+ loc->repos_uuid = apr_pstrdup(result_pool, repos_uuid);
+ loc->rev = rev;
+ loc->url = apr_pstrdup(result_pool, url);
+ return loc;
+}
+
+svn_client__pathrev_t *
+svn_client__pathrev_create_with_relpath(const char *repos_root_url,
+ const char *repos_uuid,
+ svn_revnum_t rev,
+ const char *relpath,
+ apr_pool_t *result_pool)
+{
+ SVN_ERR_ASSERT_NO_RETURN(svn_relpath_is_canonical(relpath));
+
+ return svn_client__pathrev_create(
+ repos_root_url, repos_uuid, rev,
+ svn_path_url_add_component2(repos_root_url, relpath, result_pool),
+ result_pool);
+}
+
+svn_error_t *
+svn_client__pathrev_create_with_session(svn_client__pathrev_t **pathrev_p,
+ svn_ra_session_t *ra_session,
+ svn_revnum_t rev,
+ const char *url,
+ apr_pool_t *result_pool)
+{
+ svn_client__pathrev_t *pathrev = apr_palloc(result_pool, sizeof(*pathrev));
+
+ SVN_ERR_ASSERT(svn_path_is_url(url));
+
+ SVN_ERR(svn_ra_get_repos_root2(ra_session, &pathrev->repos_root_url,
+ result_pool));
+ SVN_ERR(svn_ra_get_uuid2(ra_session, &pathrev->repos_uuid, result_pool));
+ pathrev->rev = rev;
+ pathrev->url = apr_pstrdup(result_pool, url);
+ *pathrev_p = pathrev;
+ return SVN_NO_ERROR;
+}
+
+svn_client__pathrev_t *
+svn_client__pathrev_dup(const svn_client__pathrev_t *pathrev,
+ apr_pool_t *result_pool)
+{
+ return svn_client__pathrev_create(
+ pathrev->repos_root_url, pathrev->repos_uuid,
+ pathrev->rev, pathrev->url, result_pool);
+}
+
+svn_client__pathrev_t *
+svn_client__pathrev_join_relpath(const svn_client__pathrev_t *pathrev,
+ const char *relpath,
+ apr_pool_t *result_pool)
+{
+ return svn_client__pathrev_create(
+ pathrev->repos_root_url, pathrev->repos_uuid, pathrev->rev,
+ svn_path_url_add_component2(pathrev->url, relpath, result_pool),
+ result_pool);
+}
+
+const char *
+svn_client__pathrev_relpath(const svn_client__pathrev_t *pathrev,
+ apr_pool_t *result_pool)
+{
+ return svn_uri_skip_ancestor(pathrev->repos_root_url, pathrev->url,
+ result_pool);
+}
+
+const char *
+svn_client__pathrev_fspath(const svn_client__pathrev_t *pathrev,
+ apr_pool_t *result_pool)
+{
+ return svn_fspath__canonicalize(svn_uri_skip_ancestor(
+ pathrev->repos_root_url, pathrev->url,
+ result_pool),
+ result_pool);
+}
+
+
svn_client_commit_item3_t *
svn_client_commit_item3_create(apr_pool_t *pool)
{
@@ -72,118 +166,125 @@ svn_client_commit_item3_dup(const svn_client_commit_item3_t *item,
new_item->outgoing_prop_changes =
svn_prop_array_dup(new_item->outgoing_prop_changes, pool);
+ if (new_item->session_relpath)
+ new_item->session_relpath = apr_pstrdup(pool, new_item->session_relpath);
+
+ if (new_item->moved_from_abspath)
+ new_item->moved_from_abspath = apr_pstrdup(pool,
+ new_item->moved_from_abspath);
+
return new_item;
}
svn_error_t *
-svn_client__path_relative_to_root(const char **rel_path,
- svn_wc_context_t *wc_ctx,
- const char *abspath_or_url,
- const char *repos_root,
- svn_boolean_t include_leading_slash,
- svn_ra_session_t *ra_session,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- const char *repos_relpath;
-
- /* If we have a WC path... */
- if (! svn_path_is_url(abspath_or_url))
- {
- /* ...fetch its entry, and attempt to get both its full URL and
- repository root URL. If we can't get REPOS_ROOT from the WC
- entry, we'll get it from the RA layer.*/
-
- SVN_ERR(svn_wc__node_get_repos_relpath(&repos_relpath,
- wc_ctx,
- abspath_or_url,
- result_pool,
- scratch_pool));
-
- SVN_ERR_ASSERT(repos_relpath != NULL);
- }
- /* Merge handling passes a root that is not the repos root */
- else if (repos_root != NULL)
+svn_client__wc_node_get_base(svn_client__pathrev_t **base_p,
+ const char *wc_abspath,
+ svn_wc_context_t *wc_ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ const char *relpath;
+
+ *base_p = apr_palloc(result_pool, sizeof(**base_p));
+
+ SVN_ERR(svn_wc__node_get_base(NULL,
+ &(*base_p)->rev,
+ &relpath,
+ &(*base_p)->repos_root_url,
+ &(*base_p)->repos_uuid,
+ NULL,
+ wc_ctx, wc_abspath,
+ TRUE /* ignore_enoent */,
+ TRUE /* show_hidden */,
+ result_pool, scratch_pool));
+ if ((*base_p)->repos_root_url && relpath)
{
- if (!svn_uri__is_ancestor(repos_root, abspath_or_url))
- return svn_error_createf(SVN_ERR_CLIENT_UNRELATED_RESOURCES, NULL,
- _("URL '%s' is not a child of repository "
- "root URL '%s'"),
- abspath_or_url, repos_root);
-
- repos_relpath = svn_uri_skip_ancestor(repos_root, abspath_or_url,
- result_pool);
+ (*base_p)->url = svn_path_url_add_component2(
+ (*base_p)->repos_root_url, relpath, result_pool);
}
else
{
- svn_error_t *err;
-
- SVN_ERR_ASSERT(ra_session != NULL);
-
- /* Ask the RA layer to create a relative path for us */
- err = svn_ra_get_path_relative_to_root(ra_session, &repos_relpath,
- abspath_or_url, scratch_pool);
-
- if (err)
- {
- if (err->apr_err == SVN_ERR_RA_ILLEGAL_URL)
- return svn_error_createf(SVN_ERR_CLIENT_UNRELATED_RESOURCES, err,
- _("URL '%s' is not inside repository"),
- abspath_or_url);
-
- return svn_error_trace(err);
- }
+ *base_p = NULL;
}
+ return SVN_NO_ERROR;
+}
- if (include_leading_slash)
- *rel_path = apr_pstrcat(result_pool, "/", repos_relpath, NULL);
+svn_error_t *
+svn_client__wc_node_get_origin(svn_client__pathrev_t **origin_p,
+ const char *wc_abspath,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ const char *relpath;
+
+ *origin_p = apr_palloc(result_pool, sizeof(**origin_p));
+
+ SVN_ERR(svn_wc__node_get_origin(NULL /* is_copy */,
+ &(*origin_p)->rev,
+ &relpath,
+ &(*origin_p)->repos_root_url,
+ &(*origin_p)->repos_uuid,
+ NULL, ctx->wc_ctx, wc_abspath,
+ FALSE /* scan_deleted */,
+ result_pool, scratch_pool));
+ if ((*origin_p)->repos_root_url && relpath)
+ {
+ (*origin_p)->url = svn_path_url_add_component2(
+ (*origin_p)->repos_root_url, relpath, result_pool);
+ }
else
- *rel_path = repos_relpath;
-
- return SVN_NO_ERROR;
+ {
+ *origin_p = NULL;
+ }
+ return SVN_NO_ERROR;
}
svn_error_t *
-svn_client__get_repos_root(const char **repos_root,
- const char *abspath_or_url,
- svn_client_ctx_t *ctx,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+svn_client_get_repos_root(const char **repos_root,
+ const char **repos_uuid,
+ const char *abspath_or_url,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
svn_ra_session_t *ra_session;
/* If PATH_OR_URL is a local path we can fetch the repos root locally. */
if (!svn_path_is_url(abspath_or_url))
{
- SVN_ERR(svn_wc__node_get_repos_info(repos_root, NULL,
- ctx->wc_ctx, abspath_or_url,
- result_pool, scratch_pool));
+ svn_error_t *err;
+ err = svn_wc__node_get_repos_info(NULL, NULL, repos_root, repos_uuid,
+ ctx->wc_ctx, abspath_or_url,
+ result_pool, scratch_pool);
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND
+ && err->apr_err != SVN_ERR_WC_NOT_WORKING_COPY)
+ return svn_error_trace(err);
+
+ svn_error_clear(err);
+ if (repos_root)
+ *repos_root = NULL;
+ if (repos_uuid)
+ *repos_uuid = NULL;
+ }
return SVN_NO_ERROR;
}
/* If PATH_OR_URL was a URL, we use the RA layer to look it up. */
- SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL,
- abspath_or_url,
- NULL, NULL, FALSE, TRUE,
- ctx, scratch_pool));
+ SVN_ERR(svn_client_open_ra_session2(&ra_session, abspath_or_url, NULL,
+ ctx, scratch_pool, scratch_pool));
- SVN_ERR(svn_ra_get_repos_root2(ra_session, repos_root, result_pool));
+ if (repos_root)
+ SVN_ERR(svn_ra_get_repos_root2(ra_session, repos_root, result_pool));
+ if (repos_uuid)
+ SVN_ERR(svn_ra_get_uuid2(ra_session, repos_uuid, result_pool));
return SVN_NO_ERROR;
}
-
-svn_error_t *
-svn_client__default_walker_error_handler(const char *path,
- svn_error_t *err,
- void *walk_baton,
- apr_pool_t *pool)
-{
- return svn_error_trace(err);
-}
-
-
const svn_opt_revision_t *
svn_cl__rev_default_to_head_or_base(const svn_opt_revision_t *revision,
const char *path_or_url)
@@ -238,3 +339,126 @@ svn_client__assert_homogeneous_target_type(const apr_array_header_t *targets)
return SVN_NO_ERROR;
}
+
+struct shim_callbacks_baton
+{
+ svn_wc_context_t *wc_ctx;
+ apr_hash_t *relpath_map;
+};
+
+static svn_error_t *
+fetch_props_func(apr_hash_t **props,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct shim_callbacks_baton *scb = baton;
+ const char *local_abspath;
+
+ local_abspath = svn_hash_gets(scb->relpath_map, path);
+ if (!local_abspath)
+ {
+ *props = apr_hash_make(result_pool);
+ return SVN_NO_ERROR;
+ }
+
+ /* Reads the pristine properties of WORKING, not those of BASE */
+ SVN_ERR(svn_wc_get_pristine_props(props, scb->wc_ctx, local_abspath,
+ result_pool, scratch_pool));
+
+ if (!*props)
+ *props = apr_hash_make(result_pool);
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+fetch_kind_func(svn_node_kind_t *kind,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *scratch_pool)
+{
+ struct shim_callbacks_baton *scb = baton;
+ const char *local_abspath;
+
+ local_abspath = svn_hash_gets(scb->relpath_map, path);
+ if (!local_abspath)
+ {
+ *kind = svn_node_unknown;
+ return SVN_NO_ERROR;
+ }
+ /* Reads the WORKING kind. Not the BASE kind */
+ SVN_ERR(svn_wc_read_kind2(kind, scb->wc_ctx, local_abspath,
+ TRUE, FALSE, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+fetch_base_func(const char **filename,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct shim_callbacks_baton *scb = baton;
+ const char *local_abspath;
+ svn_stream_t *pristine_stream;
+ svn_stream_t *temp_stream;
+ svn_error_t *err;
+
+ local_abspath = svn_hash_gets(scb->relpath_map, path);
+ if (!local_abspath)
+ {
+ *filename = NULL;
+ return SVN_NO_ERROR;
+ }
+
+ /* Reads the pristine of WORKING, not of BASE */
+ err = svn_wc_get_pristine_contents2(&pristine_stream, scb->wc_ctx,
+ local_abspath, scratch_pool,
+ scratch_pool);
+ if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ *filename = NULL;
+ return SVN_NO_ERROR;
+ }
+ else if (err)
+ return svn_error_trace(err);
+
+ SVN_ERR(svn_stream_open_unique(&temp_stream, filename, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ result_pool, scratch_pool));
+ SVN_ERR(svn_stream_copy3(pristine_stream, temp_stream, NULL, NULL,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+svn_delta_shim_callbacks_t *
+svn_client__get_shim_callbacks(svn_wc_context_t *wc_ctx,
+ apr_hash_t *relpath_map,
+ apr_pool_t *result_pool)
+{
+ svn_delta_shim_callbacks_t *callbacks =
+ svn_delta_shim_callbacks_default(result_pool);
+ struct shim_callbacks_baton *scb = apr_pcalloc(result_pool, sizeof(*scb));
+
+ scb->wc_ctx = wc_ctx;
+ if (relpath_map)
+ scb->relpath_map = relpath_map;
+ else
+ scb->relpath_map = apr_hash_make(result_pool);
+
+ callbacks->fetch_props_func = fetch_props_func;
+ callbacks->fetch_kind_func = fetch_kind_func;
+ callbacks->fetch_base_func = fetch_base_func;
+ callbacks->fetch_baton = scb;
+
+ return callbacks;
+}
diff --git a/subversion/libsvn_delta/compat.c b/subversion/libsvn_delta/compat.c
index 7d12be9..470efa2 100644
--- a/subversion/libsvn_delta/compat.c
+++ b/subversion/libsvn_delta/compat.c
@@ -21,13 +21,23 @@
* ====================================================================
*/
-#include <apr_pools.h>
+#include <stddef.h>
#include "svn_types.h"
#include "svn_error.h"
#include "svn_delta.h"
+#include "svn_sorts.h"
+#include "svn_dirent_uri.h"
+#include "svn_path.h"
+#include "svn_hash.h"
+#include "svn_props.h"
+#include "svn_pools.h"
+
+#include "svn_private_config.h"
+
+#include "private/svn_delta_private.h"
+
-
struct file_rev_handler_wrapper_baton {
void *baton;
svn_file_rev_handler_old_t handler;
@@ -67,7 +77,7 @@ svn_compat_wrap_file_rev_handler(svn_file_rev_handler_t *handler2,
void *handler_baton,
apr_pool_t *pool)
{
- struct file_rev_handler_wrapper_baton *fwb = apr_palloc(pool, sizeof(*fwb));
+ struct file_rev_handler_wrapper_baton *fwb = apr_pcalloc(pool, sizeof(*fwb));
/* Set the user provided old format callback in the baton. */
fwb->baton = handler_baton;
@@ -76,3 +86,1929 @@ svn_compat_wrap_file_rev_handler(svn_file_rev_handler_t *handler2,
*handler2_baton = fwb;
*handler2 = file_rev_handler_wrapper;
}
+
+
+/* The following code maps the calls to a traditional delta editor to an
+ * Editorv2 editor. It does this by keeping track of a lot of state, and
+ * then communicating that state to Ev2 upon closure of the file or dir (or
+ * edit). Note that Ev2 calls add_symlink() and alter_symlink() are not
+ * present in the delta editor paradigm, so we never call them.
+ *
+ * The general idea here is that we have to see *all* the actions on a node's
+ * parent before we can process that node, which means we need to buffer a
+ * large amount of information in the dir batons, and then process it in the
+ * close_directory() handler.
+ *
+ * There are a few ways we alter the callback stream. One is when unlocking
+ * paths. To tell a client a path should be unlocked, the server sends a
+ * prop-del for the SVN_PROP_ENTRY_LOCK_TOKEN property. This causes problems,
+ * since the client doesn't have this property in the first place, but the
+ * deletion has side effects (unlike deleting a non-existent regular property
+ * would). To solve this, we introduce *another* function into the API, not
+ * a part of the Ev2 callbacks, but a companion which is used to register
+ * the unlock of a path. See ev2_change_file_prop() for implemenation
+ * details.
+ */
+
+struct ev2_edit_baton
+{
+ svn_editor_t *editor;
+
+ apr_hash_t *changes; /* REPOS_RELPATH -> struct change_node */
+
+ apr_array_header_t *path_order;
+ int paths_processed;
+
+ /* For calculating relpaths from Ev1 copyfrom urls. */
+ const char *repos_root;
+ const char *base_relpath;
+
+ apr_pool_t *edit_pool;
+ struct svn_delta__extra_baton *exb;
+ svn_boolean_t closed;
+
+ svn_boolean_t *found_abs_paths; /* Did we strip an incoming '/' from the
+ paths? */
+
+ svn_delta_fetch_props_func_t fetch_props_func;
+ void *fetch_props_baton;
+
+ svn_delta_fetch_base_func_t fetch_base_func;
+ void *fetch_base_baton;
+
+ svn_delta__unlock_func_t do_unlock;
+ void *unlock_baton;
+};
+
+struct ev2_dir_baton
+{
+ struct ev2_edit_baton *eb;
+ const char *path;
+ svn_revnum_t base_revision;
+
+ const char *copyfrom_relpath;
+ svn_revnum_t copyfrom_rev;
+};
+
+struct ev2_file_baton
+{
+ struct ev2_edit_baton *eb;
+ const char *path;
+ svn_revnum_t base_revision;
+ const char *delta_base;
+};
+
+enum restructure_action_t
+{
+ RESTRUCTURE_NONE = 0,
+ RESTRUCTURE_ADD, /* add the node, maybe replacing. maybe copy */
+ RESTRUCTURE_ADD_ABSENT, /* add an absent node, possibly replacing */
+ RESTRUCTURE_DELETE /* delete this node */
+};
+
+/* Records everything about how this node is to be changed. */
+struct change_node
+{
+ /* what kind of (tree) restructure is occurring at this node? */
+ enum restructure_action_t action;
+
+ svn_node_kind_t kind; /* the NEW kind of this node */
+
+ /* We need two revisions: one to specify the revision we are altering,
+ and a second to specify the revision to delete/replace. These are
+ mutually exclusive, but they need to be separate to ensure we don't
+ confuse the operation on this node. For example, we may delete a
+ node and replace it we use DELETING for REPLACES_REV, and ignore
+ the value placed into CHANGING when properties were set/changed
+ on the new node. Or we simply change a node (setting CHANGING),
+ and DELETING remains SVN_INVALID_REVNUM, indicating we are not
+ attempting to replace a node. */
+ svn_revnum_t changing;
+ svn_revnum_t deleting;
+
+ apr_hash_t *props; /* new/final set of props to apply */
+
+ const char *contents_abspath; /* file containing new fulltext */
+ svn_checksum_t *checksum; /* checksum of new fulltext */
+
+ /* If COPYFROM_PATH is not NULL, then copy PATH@REV to this node.
+ RESTRUCTURE must be RESTRUCTURE_ADD. */
+ const char *copyfrom_path;
+ svn_revnum_t copyfrom_rev;
+
+ /* Record whether an incoming propchange unlocked this node. */
+ svn_boolean_t unlock;
+};
+
+
+static struct change_node *
+locate_change(struct ev2_edit_baton *eb,
+ const char *relpath)
+{
+ struct change_node *change = svn_hash_gets(eb->changes, relpath);
+
+ if (change != NULL)
+ return change;
+
+ /* Shift RELPATH into the proper pool, and record the observed order. */
+ relpath = apr_pstrdup(eb->edit_pool, relpath);
+ APR_ARRAY_PUSH(eb->path_order, const char *) = relpath;
+
+ /* Return an empty change. Callers will tweak as needed. */
+ change = apr_pcalloc(eb->edit_pool, sizeof(*change));
+ change->changing = SVN_INVALID_REVNUM;
+ change->deleting = SVN_INVALID_REVNUM;
+ change->kind = svn_node_unknown;
+
+ svn_hash_sets(eb->changes, relpath, change);
+
+ return change;
+}
+
+
+static svn_error_t *
+apply_propedit(struct ev2_edit_baton *eb,
+ const char *relpath,
+ svn_node_kind_t kind,
+ svn_revnum_t base_revision,
+ const char *name,
+ const svn_string_t *value,
+ apr_pool_t *scratch_pool)
+{
+ struct change_node *change = locate_change(eb, relpath);
+
+ SVN_ERR_ASSERT(change->kind == svn_node_unknown || change->kind == kind);
+ change->kind = kind;
+
+ /* We're now changing the node. Record the revision. */
+ SVN_ERR_ASSERT(!SVN_IS_VALID_REVNUM(change->changing)
+ || change->changing == base_revision);
+ change->changing = base_revision;
+
+ if (change->props == NULL)
+ {
+ /* Fetch the original set of properties. We'll apply edits to create
+ the new/target set of properties.
+
+ If this is a copied/moved now, then the original properties come
+ from there. If the node has been added, it starts with empty props.
+ Otherwise, we get the properties from BASE. */
+
+ if (change->copyfrom_path)
+ SVN_ERR(eb->fetch_props_func(&change->props,
+ eb->fetch_props_baton,
+ change->copyfrom_path,
+ change->copyfrom_rev,
+ eb->edit_pool, scratch_pool));
+ else if (change->action == RESTRUCTURE_ADD)
+ change->props = apr_hash_make(eb->edit_pool);
+ else
+ SVN_ERR(eb->fetch_props_func(&change->props,
+ eb->fetch_props_baton,
+ relpath, base_revision,
+ eb->edit_pool, scratch_pool));
+ }
+
+ if (value == NULL)
+ svn_hash_sets(change->props, name, NULL);
+ else
+ svn_hash_sets(change->props,
+ apr_pstrdup(eb->edit_pool, name),
+ svn_string_dup(value, eb->edit_pool));
+
+ return SVN_NO_ERROR;
+}
+
+
+/* Find all the paths which are immediate children of PATH and return their
+ basenames in a list. */
+static apr_array_header_t *
+get_children(struct ev2_edit_baton *eb,
+ const char *path,
+ apr_pool_t *pool)
+{
+ apr_array_header_t *children = apr_array_make(pool, 1, sizeof(const char *));
+ apr_hash_index_t *hi;
+
+ for (hi = apr_hash_first(pool, eb->changes); hi; hi = apr_hash_next(hi))
+ {
+ const char *repos_relpath = svn__apr_hash_index_key(hi);
+ const char *child;
+
+ /* Find potential children. */
+ child = svn_relpath_skip_ancestor(path, repos_relpath);
+ if (!child || !*child)
+ continue;
+
+ /* If we have a path separator, it's a deep child, so just ignore it.
+ ### Is there an API we should be using for this? */
+ if (strchr(child, '/') != NULL)
+ continue;
+
+ APR_ARRAY_PUSH(children, const char *) = child;
+ }
+
+ return children;
+}
+
+
+static svn_error_t *
+process_actions(struct ev2_edit_baton *eb,
+ const char *repos_relpath,
+ const struct change_node *change,
+ apr_pool_t *scratch_pool)
+{
+ apr_hash_t *props = NULL;
+ svn_stream_t *contents = NULL;
+ svn_checksum_t *checksum = NULL;
+ svn_node_kind_t kind = svn_node_unknown;
+
+ SVN_ERR_ASSERT(change != NULL);
+
+ if (change->unlock)
+ SVN_ERR(eb->do_unlock(eb->unlock_baton, repos_relpath, scratch_pool));
+
+ if (change->action == RESTRUCTURE_DELETE)
+ {
+ /* If the action was left as RESTRUCTURE_DELETE, then a
+ replacement is not occurring. Just do the delete and bail. */
+ SVN_ERR(svn_editor_delete(eb->editor, repos_relpath,
+ change->deleting));
+
+ /* No further work possible on this node. */
+ return SVN_NO_ERROR;
+ }
+ if (change->action == RESTRUCTURE_ADD_ABSENT)
+ {
+ SVN_ERR(svn_editor_add_absent(eb->editor, repos_relpath,
+ change->kind, change->deleting));
+
+ /* No further work possible on this node. */
+ return SVN_NO_ERROR;
+ }
+
+ if (change->contents_abspath != NULL)
+ {
+ /* We can only set text on files. */
+ /* ### validate we aren't overwriting KIND? */
+ kind = svn_node_file;
+
+ /* ### the checksum might be in CHANGE->CHECKSUM */
+ SVN_ERR(svn_io_file_checksum2(&checksum, change->contents_abspath,
+ svn_checksum_sha1, scratch_pool));
+ SVN_ERR(svn_stream_open_readonly(&contents, change->contents_abspath,
+ scratch_pool, scratch_pool));
+ }
+
+ if (change->props != NULL)
+ {
+ /* ### validate we aren't overwriting KIND? */
+ kind = change->kind;
+ props = change->props;
+ }
+
+ if (change->action == RESTRUCTURE_ADD)
+ {
+ /* An add might be a replace. Grab the revnum we're replacing. */
+ svn_revnum_t replaces_rev = change->deleting;
+
+ kind = change->kind;
+
+ if (change->copyfrom_path != NULL)
+ {
+ SVN_ERR(svn_editor_copy(eb->editor, change->copyfrom_path,
+ change->copyfrom_rev,
+ repos_relpath, replaces_rev));
+ /* Fall through to possibly make changes post-copy. */
+ }
+ else
+ {
+ /* If no properties were defined, then use an empty set. */
+ if (props == NULL)
+ props = apr_hash_make(scratch_pool);
+
+ if (kind == svn_node_dir)
+ {
+ const apr_array_header_t *children;
+
+ children = get_children(eb, repos_relpath, scratch_pool);
+ SVN_ERR(svn_editor_add_directory(eb->editor, repos_relpath,
+ children, props,
+ replaces_rev));
+ }
+ else
+ {
+ /* If this file was added, but apply_txdelta() was not
+ called (ie. no CONTENTS_ABSPATH), then we're adding
+ an empty file. */
+ if (change->contents_abspath == NULL)
+ {
+ contents = svn_stream_empty(scratch_pool);
+ checksum = svn_checksum_empty_checksum(svn_checksum_sha1,
+ scratch_pool);
+ }
+
+ SVN_ERR(svn_editor_add_file(eb->editor, repos_relpath,
+ checksum, contents, props,
+ replaces_rev));
+ }
+
+ /* No further work possible on this node. */
+ return SVN_NO_ERROR;
+ }
+ }
+
+#if 0
+ /* There *should* be work for this node. But it seems that isn't true
+ in some cases. Future investigation... */
+ SVN_ERR_ASSERT(props || contents);
+#endif
+ if (props || contents)
+ {
+ /* Changes to properties or content should have indicated the revision
+ it was intending to change.
+
+ Oop. Not true. The node may be locally-added. */
+#if 0
+ SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(change->changing));
+#endif
+
+ /* ### we need to gather up the target set of children */
+
+ if (kind == svn_node_dir)
+ SVN_ERR(svn_editor_alter_directory(eb->editor, repos_relpath,
+ change->changing, NULL, props));
+ else
+ SVN_ERR(svn_editor_alter_file(eb->editor, repos_relpath,
+ change->changing, props,
+ checksum, contents));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+run_ev2_actions(struct ev2_edit_baton *eb,
+ apr_pool_t *scratch_pool)
+{
+ apr_pool_t *iterpool;
+
+ iterpool = svn_pool_create(scratch_pool);
+
+ /* Possibly pick up where we left off. Ocassionally, we do some of these
+ as part of close_edit() and then some more as part of abort_edit() */
+ for (; eb->paths_processed < eb->path_order->nelts; ++eb->paths_processed)
+ {
+ const char *repos_relpath = APR_ARRAY_IDX(eb->path_order,
+ eb->paths_processed,
+ const char *);
+ const struct change_node *change = svn_hash_gets(eb->changes,
+ repos_relpath);
+
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(process_actions(eb, repos_relpath, change, iterpool));
+ }
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+
+static const char *
+map_to_repos_relpath(struct ev2_edit_baton *eb,
+ const char *path_or_url,
+ apr_pool_t *result_pool)
+{
+ if (svn_path_is_url(path_or_url))
+ {
+ return svn_uri_skip_ancestor(eb->repos_root, path_or_url, result_pool);
+ }
+ else
+ {
+ return svn_relpath_join(eb->base_relpath,
+ path_or_url[0] == '/'
+ ? path_or_url + 1 : path_or_url,
+ result_pool);
+ }
+}
+
+
+static svn_error_t *
+ev2_set_target_revision(void *edit_baton,
+ svn_revnum_t target_revision,
+ apr_pool_t *scratch_pool)
+{
+ struct ev2_edit_baton *eb = edit_baton;
+
+ if (eb->exb->target_revision)
+ SVN_ERR(eb->exb->target_revision(eb->exb->baton, target_revision,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+ev2_open_root(void *edit_baton,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ void **root_baton)
+{
+ struct ev2_dir_baton *db = apr_pcalloc(result_pool, sizeof(*db));
+ struct ev2_edit_baton *eb = edit_baton;
+
+ db->eb = eb;
+ db->path = apr_pstrdup(eb->edit_pool, eb->base_relpath);
+ db->base_revision = base_revision;
+
+ *root_baton = db;
+
+ if (eb->exb->start_edit)
+ SVN_ERR(eb->exb->start_edit(eb->exb->baton, base_revision));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+ev2_delete_entry(const char *path,
+ svn_revnum_t revision,
+ void *parent_baton,
+ apr_pool_t *scratch_pool)
+{
+ struct ev2_dir_baton *pb = parent_baton;
+ svn_revnum_t base_revision;
+ const char *relpath = map_to_repos_relpath(pb->eb, path, scratch_pool);
+ struct change_node *change = locate_change(pb->eb, relpath);
+
+ if (SVN_IS_VALID_REVNUM(revision))
+ base_revision = revision;
+ else
+ base_revision = pb->base_revision;
+
+ SVN_ERR_ASSERT(change->action == RESTRUCTURE_NONE);
+ change->action = RESTRUCTURE_DELETE;
+
+ SVN_ERR_ASSERT(!SVN_IS_VALID_REVNUM(change->deleting)
+ || change->deleting == base_revision);
+ change->deleting = base_revision;
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+ev2_add_directory(const char *path,
+ void *parent_baton,
+ const char *copyfrom_path,
+ svn_revnum_t copyfrom_revision,
+ apr_pool_t *result_pool,
+ void **child_baton)
+{
+ /* ### fix this? */
+ apr_pool_t *scratch_pool = result_pool;
+ struct ev2_dir_baton *pb = parent_baton;
+ struct ev2_dir_baton *cb = apr_pcalloc(result_pool, sizeof(*cb));
+ const char *relpath = map_to_repos_relpath(pb->eb, path, scratch_pool);
+ struct change_node *change = locate_change(pb->eb, relpath);
+
+ /* ### assert that RESTRUCTURE is NONE or DELETE? */
+ change->action = RESTRUCTURE_ADD;
+ change->kind = svn_node_dir;
+
+ cb->eb = pb->eb;
+ cb->path = apr_pstrdup(result_pool, relpath);
+ cb->base_revision = pb->base_revision;
+ *child_baton = cb;
+
+ if (!copyfrom_path)
+ {
+ if (pb->copyfrom_relpath)
+ {
+ const char *name = svn_relpath_basename(relpath, scratch_pool);
+ cb->copyfrom_relpath = svn_relpath_join(pb->copyfrom_relpath, name,
+ result_pool);
+ cb->copyfrom_rev = pb->copyfrom_rev;
+ }
+ }
+ else
+ {
+ /* A copy */
+
+ change->copyfrom_path = map_to_repos_relpath(pb->eb, copyfrom_path,
+ pb->eb->edit_pool);
+ change->copyfrom_rev = copyfrom_revision;
+
+ cb->copyfrom_relpath = change->copyfrom_path;
+ cb->copyfrom_rev = change->copyfrom_rev;
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+ev2_open_directory(const char *path,
+ void *parent_baton,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ void **child_baton)
+{
+ /* ### fix this? */
+ apr_pool_t *scratch_pool = result_pool;
+ struct ev2_dir_baton *pb = parent_baton;
+ struct ev2_dir_baton *db = apr_pcalloc(result_pool, sizeof(*db));
+ const char *relpath = map_to_repos_relpath(pb->eb, path, scratch_pool);
+
+ db->eb = pb->eb;
+ db->path = apr_pstrdup(result_pool, relpath);
+ db->base_revision = base_revision;
+
+ if (pb->copyfrom_relpath)
+ {
+ /* We are inside a copy. */
+ const char *name = svn_relpath_basename(relpath, scratch_pool);
+
+ db->copyfrom_relpath = svn_relpath_join(pb->copyfrom_relpath, name,
+ result_pool);
+ db->copyfrom_rev = pb->copyfrom_rev;
+ }
+
+ *child_baton = db;
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+ev2_change_dir_prop(void *dir_baton,
+ const char *name,
+ const svn_string_t *value,
+ apr_pool_t *scratch_pool)
+{
+ struct ev2_dir_baton *db = dir_baton;
+
+ SVN_ERR(apply_propedit(db->eb, db->path, svn_node_dir, db->base_revision,
+ name, value, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+ev2_close_directory(void *dir_baton,
+ apr_pool_t *scratch_pool)
+{
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+ev2_absent_directory(const char *path,
+ void *parent_baton,
+ apr_pool_t *scratch_pool)
+{
+ struct ev2_dir_baton *pb = parent_baton;
+ const char *relpath = map_to_repos_relpath(pb->eb, path, scratch_pool);
+ struct change_node *change = locate_change(pb->eb, relpath);
+
+ /* ### assert that RESTRUCTURE is NONE or DELETE? */
+ change->action = RESTRUCTURE_ADD_ABSENT;
+ change->kind = svn_node_dir;
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+ev2_add_file(const char *path,
+ void *parent_baton,
+ const char *copyfrom_path,
+ svn_revnum_t copyfrom_revision,
+ apr_pool_t *result_pool,
+ void **file_baton)
+{
+ /* ### fix this? */
+ apr_pool_t *scratch_pool = result_pool;
+ struct ev2_file_baton *fb = apr_pcalloc(result_pool, sizeof(*fb));
+ struct ev2_dir_baton *pb = parent_baton;
+ const char *relpath = map_to_repos_relpath(pb->eb, path, scratch_pool);
+ struct change_node *change = locate_change(pb->eb, relpath);
+
+ /* ### assert that RESTRUCTURE is NONE or DELETE? */
+ change->action = RESTRUCTURE_ADD;
+ change->kind = svn_node_file;
+
+ fb->eb = pb->eb;
+ fb->path = apr_pstrdup(result_pool, relpath);
+ fb->base_revision = pb->base_revision;
+ *file_baton = fb;
+
+ if (!copyfrom_path)
+ {
+ /* Don't bother fetching the base, as in an add we don't have a base. */
+ fb->delta_base = NULL;
+ }
+ else
+ {
+ /* A copy */
+
+ change->copyfrom_path = map_to_repos_relpath(fb->eb, copyfrom_path,
+ fb->eb->edit_pool);
+ change->copyfrom_rev = copyfrom_revision;
+
+ SVN_ERR(fb->eb->fetch_base_func(&fb->delta_base,
+ fb->eb->fetch_base_baton,
+ change->copyfrom_path,
+ change->copyfrom_rev,
+ result_pool, scratch_pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+ev2_open_file(const char *path,
+ void *parent_baton,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ void **file_baton)
+{
+ /* ### fix this? */
+ apr_pool_t *scratch_pool = result_pool;
+ struct ev2_file_baton *fb = apr_pcalloc(result_pool, sizeof(*fb));
+ struct ev2_dir_baton *pb = parent_baton;
+ const char *relpath = map_to_repos_relpath(pb->eb, path, scratch_pool);
+
+ fb->eb = pb->eb;
+ fb->path = apr_pstrdup(result_pool, relpath);
+ fb->base_revision = base_revision;
+
+ if (pb->copyfrom_relpath)
+ {
+ /* We're in a copied directory, so the delta base is going to be
+ based up on the copy source. */
+ const char *name = svn_relpath_basename(relpath, scratch_pool);
+ const char *copyfrom_relpath = svn_relpath_join(pb->copyfrom_relpath,
+ name,
+ scratch_pool);
+
+ SVN_ERR(fb->eb->fetch_base_func(&fb->delta_base,
+ fb->eb->fetch_base_baton,
+ copyfrom_relpath, pb->copyfrom_rev,
+ result_pool, scratch_pool));
+ }
+ else
+ {
+ SVN_ERR(fb->eb->fetch_base_func(&fb->delta_base,
+ fb->eb->fetch_base_baton,
+ relpath, base_revision,
+ result_pool, scratch_pool));
+ }
+
+ *file_baton = fb;
+ return SVN_NO_ERROR;
+}
+
+struct handler_baton
+{
+ svn_txdelta_window_handler_t apply_handler;
+ void *apply_baton;
+
+ svn_stream_t *source;
+
+ apr_pool_t *pool;
+};
+
+static svn_error_t *
+window_handler(svn_txdelta_window_t *window, void *baton)
+{
+ struct handler_baton *hb = baton;
+ svn_error_t *err;
+
+ err = hb->apply_handler(window, hb->apply_baton);
+ if (window != NULL && !err)
+ return SVN_NO_ERROR;
+
+ SVN_ERR(svn_stream_close(hb->source));
+
+ svn_pool_destroy(hb->pool);
+
+ return svn_error_trace(err);
+}
+
+
+static svn_error_t *
+ev2_apply_textdelta(void *file_baton,
+ const char *base_checksum,
+ apr_pool_t *result_pool,
+ svn_txdelta_window_handler_t *handler,
+ void **handler_baton)
+{
+ struct ev2_file_baton *fb = file_baton;
+ apr_pool_t *handler_pool = svn_pool_create(fb->eb->edit_pool);
+ struct handler_baton *hb = apr_pcalloc(handler_pool, sizeof(*hb));
+ struct change_node *change;
+ svn_stream_t *target;
+ /* ### fix this. for now, we know this has a "short" lifetime. */
+ apr_pool_t *scratch_pool = handler_pool;
+
+ change = locate_change(fb->eb, fb->path);
+ SVN_ERR_ASSERT(change->contents_abspath == NULL);
+ SVN_ERR_ASSERT(!SVN_IS_VALID_REVNUM(change->changing)
+ || change->changing == fb->base_revision);
+ change->changing = fb->base_revision;
+
+ if (! fb->delta_base)
+ hb->source = svn_stream_empty(handler_pool);
+ else
+ SVN_ERR(svn_stream_open_readonly(&hb->source, fb->delta_base, handler_pool,
+ scratch_pool));
+
+ SVN_ERR(svn_stream_open_unique(&target, &change->contents_abspath, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ fb->eb->edit_pool, scratch_pool));
+
+ svn_txdelta_apply(hb->source, target,
+ NULL, NULL,
+ handler_pool,
+ &hb->apply_handler, &hb->apply_baton);
+
+ hb->pool = handler_pool;
+
+ *handler_baton = hb;
+ *handler = window_handler;
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+ev2_change_file_prop(void *file_baton,
+ const char *name,
+ const svn_string_t *value,
+ apr_pool_t *scratch_pool)
+{
+ struct ev2_file_baton *fb = file_baton;
+
+ if (!strcmp(name, SVN_PROP_ENTRY_LOCK_TOKEN) && value == NULL)
+ {
+ /* We special case the lock token propery deletion, which is the
+ server's way of telling the client to unlock the path. */
+
+ /* ### this duplicates much of apply_propedit(). fix in future. */
+ const char *relpath = map_to_repos_relpath(fb->eb, fb->path,
+ scratch_pool);
+ struct change_node *change = locate_change(fb->eb, relpath);
+
+ change->unlock = TRUE;
+ }
+
+ SVN_ERR(apply_propedit(fb->eb, fb->path, svn_node_file, fb->base_revision,
+ name, value, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+ev2_close_file(void *file_baton,
+ const char *text_checksum,
+ apr_pool_t *scratch_pool)
+{
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+ev2_absent_file(const char *path,
+ void *parent_baton,
+ apr_pool_t *scratch_pool)
+{
+ struct ev2_dir_baton *pb = parent_baton;
+ const char *relpath = map_to_repos_relpath(pb->eb, path, scratch_pool);
+ struct change_node *change = locate_change(pb->eb, relpath);
+
+ /* ### assert that RESTRUCTURE is NONE or DELETE? */
+ change->action = RESTRUCTURE_ADD_ABSENT;
+ change->kind = svn_node_file;
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+ev2_close_edit(void *edit_baton,
+ apr_pool_t *scratch_pool)
+{
+ struct ev2_edit_baton *eb = edit_baton;
+
+ SVN_ERR(run_ev2_actions(edit_baton, scratch_pool));
+ eb->closed = TRUE;
+ return svn_error_trace(svn_editor_complete(eb->editor));
+}
+
+static svn_error_t *
+ev2_abort_edit(void *edit_baton,
+ apr_pool_t *scratch_pool)
+{
+ struct ev2_edit_baton *eb = edit_baton;
+
+ SVN_ERR(run_ev2_actions(edit_baton, scratch_pool));
+ if (!eb->closed)
+ return svn_error_trace(svn_editor_abort(eb->editor));
+ else
+ return SVN_NO_ERROR;
+}
+
+/* Return a svn_delta_editor_t * in DEDITOR, with an accompanying baton in
+ * DEDITOR_BATON, which will drive EDITOR. These will both be
+ * allocated in RESULT_POOL, which may become large and long-lived;
+ * SCRATCH_POOL is used for temporary allocations.
+ *
+ * The other parameters are as follows:
+ * - UNLOCK_FUNC / UNLOCK_BATON: A callback / baton which will be called
+ * when an unlocking action is received.
+ * - FOUND_ABS_PATHS: A pointer to a boolean flag which will be set if
+ * this shim determines that it is receiving absolute paths.
+ * - FETCH_PROPS_FUNC / FETCH_PROPS_BATON: A callback / baton pair which
+ * will be used by the shim handlers if they need to determine the
+ * existing properties on a path.
+ * - FETCH_BASE_FUNC / FETCH_BASE_BATON: A callback / baton pair which will
+ * be used by the shims handlers if they need to determine the base
+ * text of a path. It should only be invoked for files.
+ * - EXB: An 'extra baton' which is used to communicate between the shims.
+ * Its callbacks should be invoked at the appropriate time by this
+ * shim.
+ */
+svn_error_t *
+svn_delta__delta_from_editor(const svn_delta_editor_t **deditor,
+ void **dedit_baton,
+ svn_editor_t *editor,
+ svn_delta__unlock_func_t unlock_func,
+ void *unlock_baton,
+ svn_boolean_t *found_abs_paths,
+ const char *repos_root,
+ const char *base_relpath,
+ svn_delta_fetch_props_func_t fetch_props_func,
+ void *fetch_props_baton,
+ svn_delta_fetch_base_func_t fetch_base_func,
+ void *fetch_base_baton,
+ struct svn_delta__extra_baton *exb,
+ apr_pool_t *pool)
+{
+ /* Static 'cause we don't want it to be on the stack. */
+ static svn_delta_editor_t delta_editor = {
+ ev2_set_target_revision,
+ ev2_open_root,
+ ev2_delete_entry,
+ ev2_add_directory,
+ ev2_open_directory,
+ ev2_change_dir_prop,
+ ev2_close_directory,
+ ev2_absent_directory,
+ ev2_add_file,
+ ev2_open_file,
+ ev2_apply_textdelta,
+ ev2_change_file_prop,
+ ev2_close_file,
+ ev2_absent_file,
+ ev2_close_edit,
+ ev2_abort_edit
+ };
+ struct ev2_edit_baton *eb = apr_pcalloc(pool, sizeof(*eb));
+
+ if (!base_relpath)
+ base_relpath = "";
+ else if (base_relpath[0] == '/')
+ base_relpath += 1;
+
+ eb->editor = editor;
+ eb->changes = apr_hash_make(pool);
+ eb->path_order = apr_array_make(pool, 1, sizeof(const char *));
+ eb->edit_pool = pool;
+ eb->found_abs_paths = found_abs_paths;
+ *eb->found_abs_paths = FALSE;
+ eb->exb = exb;
+ eb->repos_root = apr_pstrdup(pool, repos_root);
+ eb->base_relpath = apr_pstrdup(pool, base_relpath);
+
+ eb->fetch_props_func = fetch_props_func;
+ eb->fetch_props_baton = fetch_props_baton;
+
+ eb->fetch_base_func = fetch_base_func;
+ eb->fetch_base_baton = fetch_base_baton;
+
+ eb->do_unlock = unlock_func;
+ eb->unlock_baton = unlock_baton;
+
+ *dedit_baton = eb;
+ *deditor = &delta_editor;
+
+ return SVN_NO_ERROR;
+}
+
+
+/* ### note the similarity to struct change_node. these structures will
+ ### be combined in the future. */
+struct operation {
+ /* ### leave these two here for now. still used. */
+ svn_revnum_t base_revision;
+ void *baton;
+};
+
+struct editor_baton
+{
+ const svn_delta_editor_t *deditor;
+ void *dedit_baton;
+
+ svn_delta_fetch_kind_func_t fetch_kind_func;
+ void *fetch_kind_baton;
+
+ svn_delta_fetch_props_func_t fetch_props_func;
+ void *fetch_props_baton;
+
+ struct operation root;
+ svn_boolean_t *make_abs_paths;
+ const char *repos_root;
+ const char *base_relpath;
+
+ /* REPOS_RELPATH -> struct change_node * */
+ apr_hash_t *changes;
+
+ apr_pool_t *edit_pool;
+};
+
+
+/* Insert a new change for RELPATH, or return an existing one. */
+static struct change_node *
+insert_change(const char *relpath,
+ apr_hash_t *changes)
+{
+ apr_pool_t *result_pool;
+ struct change_node *change;
+
+ change = svn_hash_gets(changes, relpath);
+ if (change != NULL)
+ return change;
+
+ result_pool = apr_hash_pool_get(changes);
+
+ /* Return an empty change. Callers will tweak as needed. */
+ change = apr_pcalloc(result_pool, sizeof(*change));
+ change->changing = SVN_INVALID_REVNUM;
+ change->deleting = SVN_INVALID_REVNUM;
+
+ svn_hash_sets(changes, apr_pstrdup(result_pool, relpath), change);
+
+ return change;
+}
+
+
+/* This implements svn_editor_cb_add_directory_t */
+static svn_error_t *
+add_directory_cb(void *baton,
+ const char *relpath,
+ const apr_array_header_t *children,
+ apr_hash_t *props,
+ svn_revnum_t replaces_rev,
+ apr_pool_t *scratch_pool)
+{
+ struct editor_baton *eb = baton;
+ struct change_node *change = insert_change(relpath, eb->changes);
+
+ change->action = RESTRUCTURE_ADD;
+ change->kind = svn_node_dir;
+ change->deleting = replaces_rev;
+ change->props = svn_prop_hash_dup(props, eb->edit_pool);
+
+ return SVN_NO_ERROR;
+}
+
+/* This implements svn_editor_cb_add_file_t */
+static svn_error_t *
+add_file_cb(void *baton,
+ const char *relpath,
+ const svn_checksum_t *checksum,
+ svn_stream_t *contents,
+ apr_hash_t *props,
+ svn_revnum_t replaces_rev,
+ apr_pool_t *scratch_pool)
+{
+ struct editor_baton *eb = baton;
+ const char *tmp_filename;
+ svn_stream_t *tmp_stream;
+ svn_checksum_t *md5_checksum;
+ struct change_node *change = insert_change(relpath, eb->changes);
+
+ /* We may need to re-checksum these contents */
+ if (!(checksum && checksum->kind == svn_checksum_md5))
+ contents = svn_stream_checksummed2(contents, &md5_checksum, NULL,
+ svn_checksum_md5, TRUE, scratch_pool);
+ else
+ md5_checksum = (svn_checksum_t *)checksum;
+
+ /* Spool the contents to a tempfile, and provide that to the driver. */
+ SVN_ERR(svn_stream_open_unique(&tmp_stream, &tmp_filename, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ eb->edit_pool, scratch_pool));
+ SVN_ERR(svn_stream_copy3(contents, tmp_stream, NULL, NULL, scratch_pool));
+
+ change->action = RESTRUCTURE_ADD;
+ change->kind = svn_node_file;
+ change->deleting = replaces_rev;
+ change->props = svn_prop_hash_dup(props, eb->edit_pool);
+ change->contents_abspath = tmp_filename;
+ change->checksum = svn_checksum_dup(md5_checksum, eb->edit_pool);
+
+ return SVN_NO_ERROR;
+}
+
+/* This implements svn_editor_cb_add_symlink_t */
+static svn_error_t *
+add_symlink_cb(void *baton,
+ const char *relpath,
+ const char *target,
+ apr_hash_t *props,
+ svn_revnum_t replaces_rev,
+ apr_pool_t *scratch_pool)
+{
+#if 0
+ struct editor_baton *eb = baton;
+ struct change_node *change = insert_change(relpath, eb->changes);
+
+ change->action = RESTRUCTURE_ADD;
+ change->kind = svn_node_symlink;
+ change->deleting = replaces_rev;
+ change->props = svn_prop_hash_dup(props, eb->edit_pool);
+ /* ### target */
+#endif
+
+ SVN__NOT_IMPLEMENTED();
+}
+
+/* This implements svn_editor_cb_add_absent_t */
+static svn_error_t *
+add_absent_cb(void *baton,
+ const char *relpath,
+ svn_node_kind_t kind,
+ svn_revnum_t replaces_rev,
+ apr_pool_t *scratch_pool)
+{
+ struct editor_baton *eb = baton;
+ struct change_node *change = insert_change(relpath, eb->changes);
+
+ change->action = RESTRUCTURE_ADD_ABSENT;
+ change->kind = kind;
+ change->deleting = replaces_rev;
+
+ return SVN_NO_ERROR;
+}
+
+/* This implements svn_editor_cb_alter_directory_t */
+static svn_error_t *
+alter_directory_cb(void *baton,
+ const char *relpath,
+ svn_revnum_t revision,
+ const apr_array_header_t *children,
+ apr_hash_t *props,
+ apr_pool_t *scratch_pool)
+{
+ struct editor_baton *eb = baton;
+ struct change_node *change = insert_change(relpath, eb->changes);
+
+ /* ### should we verify the kind is truly a directory? */
+
+ /* ### do we need to do anything with CHILDREN? */
+
+ /* Note: this node may already have information in CHANGE as a result
+ of an earlier copy/move operation. */
+ change->kind = svn_node_dir;
+ change->changing = revision;
+ change->props = svn_prop_hash_dup(props, eb->edit_pool);
+
+ return SVN_NO_ERROR;
+}
+
+/* This implements svn_editor_cb_alter_file_t */
+static svn_error_t *
+alter_file_cb(void *baton,
+ const char *relpath,
+ svn_revnum_t revision,
+ apr_hash_t *props,
+ const svn_checksum_t *checksum,
+ svn_stream_t *contents,
+ apr_pool_t *scratch_pool)
+{
+ struct editor_baton *eb = baton;
+ const char *tmp_filename;
+ svn_stream_t *tmp_stream;
+ svn_checksum_t *md5_checksum;
+ struct change_node *change = insert_change(relpath, eb->changes);
+
+ /* ### should we verify the kind is truly a file? */
+
+ if (contents)
+ {
+ /* We may need to re-checksum these contents */
+ if (!(checksum && checksum->kind == svn_checksum_md5))
+ contents = svn_stream_checksummed2(contents, &md5_checksum, NULL,
+ svn_checksum_md5, TRUE,
+ scratch_pool);
+ else
+ md5_checksum = (svn_checksum_t *)checksum;
+
+ /* Spool the contents to a tempfile, and provide that to the driver. */
+ SVN_ERR(svn_stream_open_unique(&tmp_stream, &tmp_filename, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ eb->edit_pool, scratch_pool));
+ SVN_ERR(svn_stream_copy3(contents, tmp_stream, NULL, NULL,
+ scratch_pool));
+ }
+
+ /* Note: this node may already have information in CHANGE as a result
+ of an earlier copy/move operation. */
+
+ change->kind = svn_node_file;
+ change->changing = revision;
+ if (props != NULL)
+ change->props = svn_prop_hash_dup(props, eb->edit_pool);
+ if (contents != NULL)
+ {
+ change->contents_abspath = tmp_filename;
+ change->checksum = svn_checksum_dup(md5_checksum, eb->edit_pool);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* This implements svn_editor_cb_alter_symlink_t */
+static svn_error_t *
+alter_symlink_cb(void *baton,
+ const char *relpath,
+ svn_revnum_t revision,
+ apr_hash_t *props,
+ const char *target,
+ apr_pool_t *scratch_pool)
+{
+ /* ### should we verify the kind is truly a symlink? */
+
+ /* ### do something */
+
+ SVN__NOT_IMPLEMENTED();
+}
+
+/* This implements svn_editor_cb_delete_t */
+static svn_error_t *
+delete_cb(void *baton,
+ const char *relpath,
+ svn_revnum_t revision,
+ apr_pool_t *scratch_pool)
+{
+ struct editor_baton *eb = baton;
+ struct change_node *change = insert_change(relpath, eb->changes);
+
+ change->action = RESTRUCTURE_DELETE;
+ /* change->kind = svn_node_unknown; */
+ change->deleting = revision;
+
+ return SVN_NO_ERROR;
+}
+
+/* This implements svn_editor_cb_copy_t */
+static svn_error_t *
+copy_cb(void *baton,
+ const char *src_relpath,
+ svn_revnum_t src_revision,
+ const char *dst_relpath,
+ svn_revnum_t replaces_rev,
+ apr_pool_t *scratch_pool)
+{
+ struct editor_baton *eb = baton;
+ struct change_node *change = insert_change(dst_relpath, eb->changes);
+
+ change->action = RESTRUCTURE_ADD;
+ /* change->kind = svn_node_unknown; */
+ change->deleting = replaces_rev;
+ change->copyfrom_path = apr_pstrdup(eb->edit_pool, src_relpath);
+ change->copyfrom_rev = src_revision;
+
+ /* We need the source's kind to know whether to call add_directory()
+ or add_file() later on. */
+ SVN_ERR(eb->fetch_kind_func(&change->kind, eb->fetch_kind_baton,
+ change->copyfrom_path,
+ change->copyfrom_rev,
+ scratch_pool));
+
+ /* Note: this node may later have alter_*() called on it. */
+
+ return SVN_NO_ERROR;
+}
+
+/* This implements svn_editor_cb_move_t */
+static svn_error_t *
+move_cb(void *baton,
+ const char *src_relpath,
+ svn_revnum_t src_revision,
+ const char *dst_relpath,
+ svn_revnum_t replaces_rev,
+ apr_pool_t *scratch_pool)
+{
+ struct editor_baton *eb = baton;
+ struct change_node *change;
+
+ /* Remap a move into a DELETE + COPY. */
+
+ change = insert_change(src_relpath, eb->changes);
+ change->action = RESTRUCTURE_DELETE;
+ /* change->kind = svn_node_unknown; */
+ change->deleting = src_revision;
+
+ change = insert_change(dst_relpath, eb->changes);
+ change->action = RESTRUCTURE_ADD;
+ /* change->kind = svn_node_unknown; */
+ change->deleting = replaces_rev;
+ change->copyfrom_path = apr_pstrdup(eb->edit_pool, src_relpath);
+ change->copyfrom_rev = src_revision;
+
+ /* We need the source's kind to know whether to call add_directory()
+ or add_file() later on. */
+ SVN_ERR(eb->fetch_kind_func(&change->kind, eb->fetch_kind_baton,
+ change->copyfrom_path,
+ change->copyfrom_rev,
+ scratch_pool));
+
+ /* Note: this node may later have alter_*() called on it. */
+
+ return SVN_NO_ERROR;
+}
+
+/* This implements svn_editor_cb_rotate_t */
+static svn_error_t *
+rotate_cb(void *baton,
+ const apr_array_header_t *relpaths,
+ const apr_array_header_t *revisions,
+ apr_pool_t *scratch_pool)
+{
+ SVN__NOT_IMPLEMENTED();
+}
+
+
+static int
+count_components(const char *relpath)
+{
+ int count = 1;
+ const char *slash = strchr(relpath, '/');
+
+ while (slash != NULL)
+ {
+ ++count;
+ slash = strchr(slash + 1, '/');
+ }
+ return count;
+}
+
+
+static int
+sort_deletes_first(const svn_sort__item_t *item1,
+ const svn_sort__item_t *item2)
+{
+ const char *relpath1 = item1->key;
+ const char *relpath2 = item2->key;
+ const struct change_node *change1 = item1->value;
+ const struct change_node *change2 = item2->value;
+ const char *slash1;
+ const char *slash2;
+ ptrdiff_t len1;
+ ptrdiff_t len2;
+
+ /* Force the root to always sort first. Otherwise, it may look like a
+ sibling of its children (no slashes), and could get sorted *after*
+ any children that get deleted. */
+ if (*relpath1 == '\0')
+ return -1;
+ if (*relpath2 == '\0')
+ return 1;
+
+ /* Are these two items siblings? The 'if' statement tests if they are
+ siblings in the root directory, or that slashes were found in both
+ paths, that the length of the paths to those slashes match, and that
+ the path contents up to those slashes also match. */
+ slash1 = strrchr(relpath1, '/');
+ slash2 = strrchr(relpath2, '/');
+ if ((slash1 == NULL && slash2 == NULL)
+ || (slash1 != NULL
+ && slash2 != NULL
+ && (len1 = slash1 - relpath1) == (len2 = slash2 - relpath2)
+ && memcmp(relpath1, relpath2, len1) == 0))
+ {
+ if (change1->action == RESTRUCTURE_DELETE)
+ {
+ if (change2->action == RESTRUCTURE_DELETE)
+ {
+ /* If both items are being deleted, then we don't care about
+ the order. State they are equal. */
+ return 0;
+ }
+
+ /* ITEM1 is being deleted. Sort it before the surviving item. */
+ return -1;
+ }
+ if (change2->action == RESTRUCTURE_DELETE)
+ /* ITEM2 is being deleted. Sort it before the surviving item. */
+ return 1;
+
+ /* Normally, we don't care about the ordering of two siblings. However,
+ if these siblings are directories, then we need to provide an
+ ordering so that the quicksort algorithm will further sort them
+ relative to the maybe-directory's children.
+
+ Without this additional ordering, we could see that A/B/E and A/B/F
+ are equal. And then A/B/E/child is sorted before A/B/F. But since
+ E and F are "equal", A/B/E could arrive *after* A/B/F and after the
+ A/B/E/child node. */
+
+ /* FALLTHROUGH */
+ }
+
+ /* Paths-to-be-deleted with fewer components always sort earlier.
+
+ For example, gamma will sort before E/alpha.
+
+ Without this test, E/alpha lexicographically sorts before gamma,
+ but gamma sorts before E when gamma is to be deleted. This kind of
+ ordering would place E/alpha before E. Not good.
+
+ With this test, gamma sorts before E/alpha. E and E/alpha are then
+ sorted by svn_path_compare_paths() (which places E before E/alpha). */
+ if (change1->action == RESTRUCTURE_DELETE
+ || change2->action == RESTRUCTURE_DELETE)
+ {
+ int count1 = count_components(relpath1);
+ int count2 = count_components(relpath2);
+
+ if (count1 < count2 && change1->action == RESTRUCTURE_DELETE)
+ return -1;
+ if (count1 > count2 && change2->action == RESTRUCTURE_DELETE)
+ return 1;
+ }
+
+ /* Use svn_path_compare_paths() to get correct depth-based ordering. */
+ return svn_path_compare_paths(relpath1, relpath2);
+}
+
+
+static const apr_array_header_t *
+get_sorted_paths(apr_hash_t *changes,
+ const char *base_relpath,
+ apr_pool_t *scratch_pool)
+{
+ const apr_array_header_t *items;
+ apr_array_header_t *paths;
+ int i;
+
+ /* Construct a sorted array of svn_sort__item_t structs. Within a given
+ directory, nodes that are to be deleted will appear first. */
+ items = svn_sort__hash(changes, sort_deletes_first, scratch_pool);
+
+ /* Build a new array with just the paths, trimmed to relative paths for
+ the Ev1 drive. */
+ paths = apr_array_make(scratch_pool, items->nelts, sizeof(const char *));
+ for (i = items->nelts; i--; )
+ {
+ const svn_sort__item_t *item;
+
+ item = &APR_ARRAY_IDX(items, i, const svn_sort__item_t);
+ APR_ARRAY_IDX(paths, i, const char *)
+ = svn_relpath_skip_ancestor(base_relpath, item->key);
+ }
+
+ /* We didn't use PUSH, so set the proper number of elements. */
+ paths->nelts = items->nelts;
+
+ return paths;
+}
+
+
+static svn_error_t *
+drive_ev1_props(const struct editor_baton *eb,
+ const char *repos_relpath,
+ const struct change_node *change,
+ void *node_baton,
+ apr_pool_t *scratch_pool)
+{
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ apr_hash_t *old_props;
+ apr_array_header_t *propdiffs;
+ int i;
+
+ /* If there are no properties to install, then just exit. */
+ if (change->props == NULL)
+ return SVN_NO_ERROR;
+
+ if (change->copyfrom_path)
+ {
+ /* The pristine properties are from the copy/move source. */
+ SVN_ERR(eb->fetch_props_func(&old_props, eb->fetch_props_baton,
+ change->copyfrom_path,
+ change->copyfrom_rev,
+ scratch_pool, iterpool));
+ }
+ else if (change->action == RESTRUCTURE_ADD)
+ {
+ /* Locally-added nodes have no pristine properties.
+
+ Note: we can use iterpool; this hash only needs to survive to
+ the propdiffs call, and there are no contents to preserve. */
+ old_props = apr_hash_make(iterpool);
+ }
+ else
+ {
+ /* Fetch the pristine properties for whatever we're editing. */
+ SVN_ERR(eb->fetch_props_func(&old_props, eb->fetch_props_baton,
+ repos_relpath, change->changing,
+ scratch_pool, iterpool));
+ }
+
+ SVN_ERR(svn_prop_diffs(&propdiffs, change->props, old_props, scratch_pool));
+
+ for (i = 0; i < propdiffs->nelts; i++)
+ {
+ /* Note: the array returned by svn_prop_diffs() is an array of
+ actual structures, not pointers to them. */
+ const svn_prop_t *prop = &APR_ARRAY_IDX(propdiffs, i, svn_prop_t);
+
+ svn_pool_clear(iterpool);
+
+ if (change->kind == svn_node_dir)
+ SVN_ERR(eb->deditor->change_dir_prop(node_baton,
+ prop->name, prop->value,
+ iterpool));
+ else
+ SVN_ERR(eb->deditor->change_file_prop(node_baton,
+ prop->name, prop->value,
+ iterpool));
+ }
+
+ /* Handle the funky unlock protocol. Note: only possibly on files. */
+ if (change->unlock)
+ {
+ SVN_ERR_ASSERT(change->kind == svn_node_file);
+ SVN_ERR(eb->deditor->change_file_prop(node_baton,
+ SVN_PROP_ENTRY_LOCK_TOKEN, NULL,
+ iterpool));
+ }
+
+ svn_pool_destroy(iterpool);
+ return SVN_NO_ERROR;
+}
+
+
+/* Conforms to svn_delta_path_driver_cb_func_t */
+static svn_error_t *
+apply_change(void **dir_baton,
+ void *parent_baton,
+ void *callback_baton,
+ const char *ev1_relpath,
+ apr_pool_t *result_pool)
+{
+ /* ### fix this? */
+ apr_pool_t *scratch_pool = result_pool;
+ const struct editor_baton *eb = callback_baton;
+ const struct change_node *change;
+ const char *relpath;
+ void *file_baton = NULL;
+
+ /* Typically, we are not creating new directory batons. */
+ *dir_baton = NULL;
+
+ relpath = svn_relpath_join(eb->base_relpath, ev1_relpath, scratch_pool);
+ change = svn_hash_gets(eb->changes, relpath);
+
+ /* The callback should only be called for paths in CHANGES. */
+ SVN_ERR_ASSERT(change != NULL);
+
+ /* Are we editing the root of the tree? */
+ if (parent_baton == NULL)
+ {
+ /* The root was opened in start_edit_func() */
+ *dir_baton = eb->root.baton;
+
+ /* Only property edits are allowed on the root. */
+ SVN_ERR_ASSERT(change->action == RESTRUCTURE_NONE);
+ SVN_ERR(drive_ev1_props(eb, relpath, change, *dir_baton, scratch_pool));
+
+ /* No further action possible for the root. */
+ return SVN_NO_ERROR;
+ }
+
+ if (change->action == RESTRUCTURE_DELETE)
+ {
+ SVN_ERR(eb->deditor->delete_entry(ev1_relpath, change->deleting,
+ parent_baton, scratch_pool));
+
+ /* No futher action possible for this node. */
+ return SVN_NO_ERROR;
+ }
+
+ /* If we're not deleting this node, then we should know its kind. */
+ SVN_ERR_ASSERT(change->kind != svn_node_unknown);
+
+ if (change->action == RESTRUCTURE_ADD_ABSENT)
+ {
+ if (change->kind == svn_node_dir)
+ SVN_ERR(eb->deditor->absent_directory(ev1_relpath, parent_baton,
+ scratch_pool));
+ else
+ SVN_ERR(eb->deditor->absent_file(ev1_relpath, parent_baton,
+ scratch_pool));
+
+ /* No further action possible for this node. */
+ return SVN_NO_ERROR;
+ }
+ /* RESTRUCTURE_NONE or RESTRUCTURE_ADD */
+
+ if (change->action == RESTRUCTURE_ADD)
+ {
+ const char *copyfrom_url = NULL;
+ svn_revnum_t copyfrom_rev = SVN_INVALID_REVNUM;
+
+ /* Do we have an old node to delete first? */
+ if (SVN_IS_VALID_REVNUM(change->deleting))
+ SVN_ERR(eb->deditor->delete_entry(ev1_relpath, change->deleting,
+ parent_baton, scratch_pool));
+
+ /* Are we copying the node from somewhere? */
+ if (change->copyfrom_path)
+ {
+ if (eb->repos_root)
+ copyfrom_url = svn_path_url_add_component2(eb->repos_root,
+ change->copyfrom_path,
+ scratch_pool);
+ else
+ {
+ copyfrom_url = change->copyfrom_path;
+
+ /* Make this an FS path by prepending "/" */
+ if (copyfrom_url[0] != '/')
+ copyfrom_url = apr_pstrcat(scratch_pool, "/",
+ copyfrom_url, NULL);
+ }
+
+ copyfrom_rev = change->copyfrom_rev;
+ }
+
+ if (change->kind == svn_node_dir)
+ SVN_ERR(eb->deditor->add_directory(ev1_relpath, parent_baton,
+ copyfrom_url, copyfrom_rev,
+ result_pool, dir_baton));
+ else
+ SVN_ERR(eb->deditor->add_file(ev1_relpath, parent_baton,
+ copyfrom_url, copyfrom_rev,
+ result_pool, &file_baton));
+ }
+ else
+ {
+ if (change->kind == svn_node_dir)
+ SVN_ERR(eb->deditor->open_directory(ev1_relpath, parent_baton,
+ change->changing,
+ result_pool, dir_baton));
+ else
+ SVN_ERR(eb->deditor->open_file(ev1_relpath, parent_baton,
+ change->changing,
+ result_pool, &file_baton));
+ }
+
+ /* Apply any properties in CHANGE to the node. */
+ if (change->kind == svn_node_dir)
+ SVN_ERR(drive_ev1_props(eb, relpath, change, *dir_baton, scratch_pool));
+ else
+ SVN_ERR(drive_ev1_props(eb, relpath, change, file_baton, scratch_pool));
+
+ if (change->contents_abspath)
+ {
+ svn_txdelta_window_handler_t handler;
+ void *handler_baton;
+ svn_stream_t *contents;
+
+ /* ### would be nice to have a BASE_CHECKSUM, but hey: this is the
+ ### shim code... */
+ SVN_ERR(eb->deditor->apply_textdelta(file_baton, NULL, scratch_pool,
+ &handler, &handler_baton));
+ SVN_ERR(svn_stream_open_readonly(&contents, change->contents_abspath,
+ scratch_pool, scratch_pool));
+ /* ### it would be nice to send a true txdelta here, but whatever. */
+ SVN_ERR(svn_txdelta_send_stream(contents, handler, handler_baton,
+ NULL, scratch_pool));
+ SVN_ERR(svn_stream_close(contents));
+ }
+
+ if (file_baton)
+ {
+ const char *digest = svn_checksum_to_cstring(change->checksum,
+ scratch_pool);
+
+ SVN_ERR(eb->deditor->close_file(file_baton, digest, scratch_pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
+static svn_error_t *
+drive_changes(const struct editor_baton *eb,
+ apr_pool_t *scratch_pool)
+{
+ struct change_node *change;
+ const apr_array_header_t *paths;
+
+ /* If we never opened a root baton, then the caller aborted the editor
+ before it even began. There is nothing to do. Bail. */
+ if (eb->root.baton == NULL)
+ return SVN_NO_ERROR;
+
+ /* We need to make the path driver believe we want to make changes to
+ the root. Otherwise, it will attempt an open_root(), which we already
+ did in start_edit_func(). We can forge up a change record, if one
+ does not already exist. */
+ change = insert_change(eb->base_relpath, eb->changes);
+ change->kind = svn_node_dir;
+ /* No property changes (tho they might exist from a real change). */
+
+ /* Get a sorted list of Ev1-relative paths. */
+ paths = get_sorted_paths(eb->changes, eb->base_relpath, scratch_pool);
+ SVN_ERR(svn_delta_path_driver2(eb->deditor, eb->dedit_baton, paths,
+ FALSE, apply_change, (void *)eb,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+
+/* This implements svn_editor_cb_complete_t */
+static svn_error_t *
+complete_cb(void *baton,
+ apr_pool_t *scratch_pool)
+{
+ struct editor_baton *eb = baton;
+ svn_error_t *err;
+
+ /* Drive the tree we've created. */
+ err = drive_changes(eb, scratch_pool);
+ if (!err)
+ {
+ err = svn_error_compose_create(err, eb->deditor->close_edit(
+ eb->dedit_baton,
+ scratch_pool));
+ }
+
+ if (err)
+ svn_error_clear(eb->deditor->abort_edit(eb->dedit_baton, scratch_pool));
+
+ return svn_error_trace(err);
+}
+
+/* This implements svn_editor_cb_abort_t */
+static svn_error_t *
+abort_cb(void *baton,
+ apr_pool_t *scratch_pool)
+{
+ struct editor_baton *eb = baton;
+ svn_error_t *err;
+ svn_error_t *err2;
+
+ /* We still need to drive anything we collected in the editor to this
+ point. */
+
+ /* Drive the tree we've created. */
+ err = drive_changes(eb, scratch_pool);
+
+ err2 = eb->deditor->abort_edit(eb->dedit_baton, scratch_pool);
+
+ if (err2)
+ {
+ if (err)
+ svn_error_clear(err2);
+ else
+ err = err2;
+ }
+
+ return svn_error_trace(err);
+}
+
+static svn_error_t *
+start_edit_func(void *baton,
+ svn_revnum_t base_revision)
+{
+ struct editor_baton *eb = baton;
+
+ eb->root.base_revision = base_revision;
+
+ /* For some Ev1 editors (such as the repos commit editor), the root must
+ be open before can invoke any callbacks. The open_root() call sets up
+ stuff (eg. open an FS txn) which will be needed. */
+ SVN_ERR(eb->deditor->open_root(eb->dedit_baton, eb->root.base_revision,
+ eb->edit_pool, &eb->root.baton));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+target_revision_func(void *baton,
+ svn_revnum_t target_revision,
+ apr_pool_t *scratch_pool)
+{
+ struct editor_baton *eb = baton;
+
+ SVN_ERR(eb->deditor->set_target_revision(eb->dedit_baton, target_revision,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+do_unlock(void *baton,
+ const char *path,
+ apr_pool_t *scratch_pool)
+{
+ struct editor_baton *eb = baton;
+
+ {
+ /* PATH is REPOS_RELPATH */
+ struct change_node *change = insert_change(path, eb->changes);
+
+ /* We will need to propagate a deletion of SVN_PROP_ENTRY_LOCK_TOKEN */
+ change->unlock = TRUE;
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Return an svn_editor_t * in EDITOR_P which will drive
+ * DEDITOR/DEDIT_BATON. EDITOR_P is allocated in RESULT_POOL, which may
+ * become large and long-lived; SCRATCH_POOL is used for temporary
+ * allocations.
+ *
+ * The other parameters are as follows:
+ * - EXB: An 'extra_baton' used for passing information between the coupled
+ * shims. This includes actions like 'start edit' and 'set target'.
+ * As this shim receives these actions, it provides the extra baton
+ * to its caller.
+ * - UNLOCK_FUNC / UNLOCK_BATON: A callback / baton pair which a caller
+ * can use to notify this shim that a path should be unlocked (in the
+ * 'svn lock' sense). As this shim receives this action, it provides
+ * this callback / baton to its caller.
+ * - SEND_ABS_PATHS: A pointer which will be set prior to this edit (but
+ * not necessarily at the invocation of editor_from_delta()),and
+ * which indicates whether incoming paths should be expected to
+ * be absolute or relative.
+ * - CANCEL_FUNC / CANCEL_BATON: The usual; folded into the produced editor.
+ * - FETCH_KIND_FUNC / FETCH_KIND_BATON: A callback / baton pair which will
+ * be used by the shim handlers if they need to determine the kind of
+ * a path.
+ * - FETCH_PROPS_FUNC / FETCH_PROPS_BATON: A callback / baton pair which
+ * will be used by the shim handlers if they need to determine the
+ * existing properties on a path.
+ */
+svn_error_t *
+svn_delta__editor_from_delta(svn_editor_t **editor_p,
+ struct svn_delta__extra_baton **exb,
+ svn_delta__unlock_func_t *unlock_func,
+ void **unlock_baton,
+ const svn_delta_editor_t *deditor,
+ void *dedit_baton,
+ svn_boolean_t *send_abs_paths,
+ const char *repos_root,
+ const char *base_relpath,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_delta_fetch_kind_func_t fetch_kind_func,
+ void *fetch_kind_baton,
+ svn_delta_fetch_props_func_t fetch_props_func,
+ void *fetch_props_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_editor_t *editor;
+ static const svn_editor_cb_many_t editor_cbs = {
+ add_directory_cb,
+ add_file_cb,
+ add_symlink_cb,
+ add_absent_cb,
+ alter_directory_cb,
+ alter_file_cb,
+ alter_symlink_cb,
+ delete_cb,
+ copy_cb,
+ move_cb,
+ rotate_cb,
+ complete_cb,
+ abort_cb
+ };
+ struct editor_baton *eb = apr_pcalloc(result_pool, sizeof(*eb));
+ struct svn_delta__extra_baton *extra_baton = apr_pcalloc(result_pool,
+ sizeof(*extra_baton));
+
+ if (!base_relpath)
+ base_relpath = "";
+ else if (base_relpath[0] == '/')
+ base_relpath += 1;
+
+ eb->deditor = deditor;
+ eb->dedit_baton = dedit_baton;
+ eb->edit_pool = result_pool;
+ eb->repos_root = apr_pstrdup(result_pool, repos_root);
+ eb->base_relpath = apr_pstrdup(result_pool, base_relpath);
+
+ eb->changes = apr_hash_make(result_pool);
+
+ eb->fetch_kind_func = fetch_kind_func;
+ eb->fetch_kind_baton = fetch_kind_baton;
+ eb->fetch_props_func = fetch_props_func;
+ eb->fetch_props_baton = fetch_props_baton;
+
+ eb->root.base_revision = SVN_INVALID_REVNUM;
+
+ eb->make_abs_paths = send_abs_paths;
+
+ SVN_ERR(svn_editor_create(&editor, eb, cancel_func, cancel_baton,
+ result_pool, scratch_pool));
+ SVN_ERR(svn_editor_setcb_many(editor, &editor_cbs, scratch_pool));
+
+ *editor_p = editor;
+
+ *unlock_func = do_unlock;
+ *unlock_baton = eb;
+
+ extra_baton->start_edit = start_edit_func;
+ extra_baton->target_revision = target_revision_func;
+ extra_baton->baton = eb;
+
+ *exb = extra_baton;
+
+ return SVN_NO_ERROR;
+}
+
+svn_delta_shim_callbacks_t *
+svn_delta_shim_callbacks_default(apr_pool_t *result_pool)
+{
+ svn_delta_shim_callbacks_t *shim_callbacks = apr_pcalloc(result_pool,
+ sizeof(*shim_callbacks));
+ return shim_callbacks;
+}
+
+/* To enable editor shims throughout Subversion, ENABLE_EV2_SHIMS should be
+ * defined. This can be done manually, or by providing `--enable-ev2-shims'
+ * to `configure'. */
+
+svn_error_t *
+svn_editor__insert_shims(const svn_delta_editor_t **deditor_out,
+ void **dedit_baton_out,
+ const svn_delta_editor_t *deditor_in,
+ void *dedit_baton_in,
+ const char *repos_root,
+ const char *base_relpath,
+ svn_delta_shim_callbacks_t *shim_callbacks,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+#ifndef ENABLE_EV2_SHIMS
+ /* Shims disabled, just copy the editor and baton directly. */
+ *deditor_out = deditor_in;
+ *dedit_baton_out = dedit_baton_in;
+#else
+ /* Use our shim APIs to create an intermediate svn_editor_t, and then
+ wrap that again back into a svn_delta_editor_t. This introduces
+ a lot of overhead. */
+ svn_editor_t *editor;
+
+ /* The "extra baton" is a set of functions and a baton which allows the
+ shims to communicate additional events to each other.
+ svn_delta__editor_from_delta() returns a pointer to this baton, which
+ svn_delta__delta_from_editor() should then store. */
+ struct svn_delta__extra_baton *exb;
+
+ /* The reason this is a pointer is that we don't know the appropriate
+ value until we start receiving paths. So process_actions() sets the
+ flag, which drive_tree() later consumes. */
+ svn_boolean_t *found_abs_paths = apr_palloc(result_pool,
+ sizeof(*found_abs_paths));
+
+ svn_delta__unlock_func_t unlock_func;
+ void *unlock_baton;
+
+ SVN_ERR_ASSERT(shim_callbacks->fetch_kind_func != NULL);
+ SVN_ERR_ASSERT(shim_callbacks->fetch_props_func != NULL);
+ SVN_ERR_ASSERT(shim_callbacks->fetch_base_func != NULL);
+
+ SVN_ERR(svn_delta__editor_from_delta(&editor, &exb,
+ &unlock_func, &unlock_baton,
+ deditor_in, dedit_baton_in,
+ found_abs_paths, repos_root, base_relpath,
+ NULL, NULL,
+ shim_callbacks->fetch_kind_func,
+ shim_callbacks->fetch_baton,
+ shim_callbacks->fetch_props_func,
+ shim_callbacks->fetch_baton,
+ result_pool, scratch_pool));
+ SVN_ERR(svn_delta__delta_from_editor(deditor_out, dedit_baton_out, editor,
+ unlock_func, unlock_baton,
+ found_abs_paths,
+ repos_root, base_relpath,
+ shim_callbacks->fetch_props_func,
+ shim_callbacks->fetch_baton,
+ shim_callbacks->fetch_base_func,
+ shim_callbacks->fetch_baton,
+ exb, result_pool));
+
+#endif
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/libsvn_delta/compose_delta.c b/subversion/libsvn_delta/compose_delta.c
index 382701d..7b96438 100644
--- a/subversion/libsvn_delta/compose_delta.c
+++ b/subversion/libsvn_delta/compose_delta.c
@@ -774,7 +774,7 @@ svn_txdelta_compose_windows(const svn_txdelta_window_t *window_A,
/* Read the description of the delta composition algorithm in
notes/fs-improvements.txt before going any further.
You have been warned. */
- build_baton.new_data = svn_stringbuf_create("", pool);
+ build_baton.new_data = svn_stringbuf_create_empty(pool);
for (i = 0; i < window_B->num_ops; ++i)
{
const svn_txdelta_op_t *const op = &window_B->ops[i];
diff --git a/subversion/libsvn_delta/debug_editor.c b/subversion/libsvn_delta/debug_editor.c
index a25b1b4..7c2cdec 100644
--- a/subversion/libsvn_delta/debug_editor.c
+++ b/subversion/libsvn_delta/debug_editor.c
@@ -21,6 +21,8 @@
* ====================================================================
*/
+#include "svn_io.h"
+
#include "debug_editor.h"
struct edit_baton
@@ -50,8 +52,10 @@ write_indent(struct edit_baton *eb, apr_pool_t *pool)
{
int i;
+ /* This is DBG_FLAG from ../libsvn_subr/debug.c */
+ SVN_ERR(svn_stream_puts(eb->out, "DBG:"));
for (i = 0; i < eb->indent_level; ++i)
- SVN_ERR(svn_stream_printf(eb->out, pool, " "));
+ SVN_ERR(svn_stream_puts(eb->out, " "));
return SVN_NO_ERROR;
}
diff --git a/subversion/libsvn_delta/delta.h b/subversion/libsvn_delta/delta.h
index 6ca1d97..95fe4f7 100644
--- a/subversion/libsvn_delta/delta.h
+++ b/subversion/libsvn_delta/delta.h
@@ -68,6 +68,12 @@ void svn_txdelta__insert_op(svn_txdelta__ops_baton_t *build_baton,
const char *new_data,
apr_pool_t *pool);
+/* Remove / truncate the last delta ops spanning the last MAX_LEN bytes
+ from the delta window being built via BUILD_BATON starting. Return the
+ number of bytes that were actually removed. */
+apr_size_t
+svn_txdelta__remove_copy(svn_txdelta__ops_baton_t *build_baton,
+ apr_size_t max_len);
/* Allocate a delta window from POOL. */
svn_txdelta_window_t *
diff --git a/subversion/libsvn_delta/deprecated.c b/subversion/libsvn_delta/deprecated.c
new file mode 100644
index 0000000..4171244
--- /dev/null
+++ b/subversion/libsvn_delta/deprecated.c
@@ -0,0 +1,48 @@
+/*
+ * deprecated.c: holding file for all deprecated APIs.
+ * "we can't lose 'em, but we can shun 'em!"
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+/* We define this here to remove any further warnings about the usage of
+ deprecated functions in this file. */
+#define SVN_DEPRECATED
+
+#include "svn_delta.h"
+#include "svn_sorts.h"
+
+
+svn_error_t *
+svn_delta_path_driver(const svn_delta_editor_t *editor,
+ void *edit_baton,
+ svn_revnum_t revision,
+ const apr_array_header_t *paths,
+ svn_delta_path_driver_cb_func_t callback_func,
+ void *callback_baton,
+ apr_pool_t *scratch_pool)
+{
+ /* REVISION is dropped on the floor. */
+
+ return svn_error_trace(svn_delta_path_driver2(editor, edit_baton, paths,
+ TRUE,
+ callback_func, callback_baton,
+ scratch_pool));
+}
diff --git a/subversion/libsvn_delta/editor.c b/subversion/libsvn_delta/editor.c
index b4bef5e..1dc94b2 100644
--- a/subversion/libsvn_delta/editor.c
+++ b/subversion/libsvn_delta/editor.c
@@ -26,9 +26,28 @@
#include "svn_types.h"
#include "svn_error.h"
#include "svn_pools.h"
+#include "svn_dirent_uri.h"
#include "private/svn_editor.h"
+#ifdef SVN_DEBUG
+/* This enables runtime checks of the editor API constraints. This may
+ introduce additional memory and runtime overhead, and should not be used
+ in production builds.
+
+ ### Remove before release?
+
+ ### Disabled for now. If I call svn_editor_alter_directory(A) then
+ svn_editor_add_file(A/f) the latter fails on SHOULD_ALLOW_ADD.
+ If I modify svn_editor_alter_directory to MARK_ALLOW_ADD(child)
+ then if I call svn_editor_alter_directory(A) followed by
+ svn_editor_alter_directory(A/B/C) the latter fails on
+ VERIFY_PARENT_MAY_EXIST. */
+#if 0
+#define ENABLE_ORDERING_CHECK
+#endif
+#endif
+
struct svn_editor_t
{
@@ -44,9 +63,200 @@ struct svn_editor_t
/* This pool is used as the scratch_pool for all callbacks. */
apr_pool_t *scratch_pool;
+
+#ifdef ENABLE_ORDERING_CHECK
+ svn_boolean_t within_callback;
+
+ apr_hash_t *pending_incomplete_children;
+ apr_hash_t *completed_nodes;
+ svn_boolean_t finished;
+
+ apr_pool_t *state_pool;
+#endif
};
+#ifdef ENABLE_ORDERING_CHECK
+
+#define START_CALLBACK(editor) \
+ do { \
+ svn_editor_t *editor__tmp_e = (editor); \
+ SVN_ERR_ASSERT(!editor__tmp_e->within_callback); \
+ editor__tmp_e->within_callback = TRUE; \
+ } while (0)
+#define END_CALLBACK(editor) ((editor)->within_callback = FALSE)
+
+/* Marker to indicate no further changes are allowed on this node. */
+static const int marker_done = 0;
+#define MARKER_DONE (&marker_done)
+
+/* Marker indicating that add_* may be called for this path, or that it
+ can be the destination of a copy or move. For copy/move, the path
+ will switch to MARKER_ALLOW_ALTER, to enable further tweaks. */
+static const int marker_allow_add = 0;
+#define MARKER_ALLOW_ADD (&marker_allow_add)
+
+/* Marker indicating that alter_* may be called for this path. */
+static const int marker_allow_alter = 0;
+#define MARKER_ALLOW_ALTER (&marker_allow_alter)
+
+/* Just like MARKER_DONE, but also indicates that the node was created
+ via add_directory(). This allows us to verify that the CHILDREN param
+ was comprehensive. */
+static const int marker_added_dir = 0;
+#define MARKER_ADDED_DIR (&marker_added_dir)
+
+#define MARK_FINISHED(editor) ((editor)->finished = TRUE)
+#define SHOULD_NOT_BE_FINISHED(editor) SVN_ERR_ASSERT(!(editor)->finished)
+
+#define CLEAR_INCOMPLETE(editor, relpath) \
+ svn_hash_sets((editor)->pending_incomplete_children, relpath, NULL);
+
+#define MARK_RELPATH(editor, relpath, value) \
+ svn_hash_sets((editor)->completed_nodes, \
+ apr_pstrdup((editor)->state_pool, relpath), value)
+
+#define MARK_COMPLETED(editor, relpath) \
+ MARK_RELPATH(editor, relpath, MARKER_DONE)
+#define SHOULD_NOT_BE_COMPLETED(editor, relpath) \
+ SVN_ERR_ASSERT(svn_hash_gets((editor)->completed_nodes, relpath) == NULL)
+
+#define MARK_ALLOW_ADD(editor, relpath) \
+ MARK_RELPATH(editor, relpath, MARKER_ALLOW_ADD)
+#define SHOULD_ALLOW_ADD(editor, relpath) \
+ SVN_ERR_ASSERT(allow_either(editor, relpath, MARKER_ALLOW_ADD, NULL))
+
+#define MARK_ALLOW_ALTER(editor, relpath) \
+ MARK_RELPATH(editor, relpath, MARKER_ALLOW_ALTER)
+#define SHOULD_ALLOW_ALTER(editor, relpath) \
+ SVN_ERR_ASSERT(allow_either(editor, relpath, MARKER_ALLOW_ALTER, NULL))
+
+#define MARK_ADDED_DIR(editor, relpath) \
+ MARK_RELPATH(editor, relpath, MARKER_ADDED_DIR)
+#define CHECK_UNKNOWN_CHILD(editor, relpath) \
+ SVN_ERR_ASSERT(check_unknown_child(editor, relpath))
+
+/* When a child is changed in some way, mark the parent directory as needing
+ to be "stable" (no future structural changes). IOW, only allow "alter" on
+ the parent. Prevents parent-add/delete/move after any child operation. */
+#define MARK_PARENT_STABLE(editor, relpath) \
+ mark_parent_stable(editor, relpath)
+
+/* If the parent is MARKER_ALLOW_ADD, then it has been moved-away, and we
+ know it does not exist. All other cases: it might exist. */
+#define VERIFY_PARENT_MAY_EXIST(editor, relpath) \
+ SVN_ERR_ASSERT(svn_hash_gets((editor)->completed_nodes, \
+ svn_relpath_dirname(relpath, \
+ (editor)->scratch_pool)) \
+ != MARKER_ALLOW_ADD)
+
+/* If the parent is MARKER_ADDED_DIR, then we should not be deleting
+ children(*). If the parent is MARKER_ALLOW_ADD, then it has been
+ moved-away, so children cannot exist. That leaves MARKER_DONE,
+ MARKER_ALLOW_ALTER, and NULL as possible values. Just assert that
+ we didn't get either of the bad ones.
+
+ (*) if the child as added via add_*(), then it would have been marked
+ as completed and delete/move-away already test against completed nodes.
+ This test is to beware of trying to delete "children" that are not
+ actually (and can't possibly be) present. */
+#define CHILD_DELETIONS_ALLOWED(editor, relpath) \
+ SVN_ERR_ASSERT(!allow_either(editor, \
+ svn_relpath_dirname(relpath, \
+ (editor)->scratch_pool), \
+ MARKER_ADDED_DIR, MARKER_ALLOW_ADD))
+
+static svn_boolean_t
+allow_either(const svn_editor_t *editor,
+ const char *relpath,
+ const void *marker1,
+ const void *marker2)
+{
+ void *value = svn_hash_gets(editor->completed_nodes, relpath);
+ return value == marker1 || value == marker2;
+}
+
+static svn_boolean_t
+check_unknown_child(const svn_editor_t *editor,
+ const char *relpath)
+{
+ const char *parent;
+
+ /* If we already know about the new child, then exit early. */
+ if (svn_hash_gets(editor->pending_incomplete_children, relpath) != NULL)
+ return TRUE;
+
+ parent = svn_relpath_dirname(relpath, editor->scratch_pool);
+
+ /* Was this parent created via svn_editor_add_directory() ? */
+ if (svn_hash_gets(editor->completed_nodes, parent)
+ == MARKER_ADDED_DIR)
+ {
+ /* Whoops. This child should have been listed in that add call,
+ and placed into ->pending_incomplete_children. */
+ return FALSE;
+ }
+
+ /* The parent was not added in this drive. */
+ return TRUE;
+}
+
+static void
+mark_parent_stable(const svn_editor_t *editor,
+ const char *relpath)
+{
+ const char *parent = svn_relpath_dirname(relpath, editor->scratch_pool);
+ const void *marker = svn_hash_gets(editor->completed_nodes, parent);
+
+ /* If RELPATH has already been marked (to disallow adds, or that it
+ has been fully-completed), then do nothing. */
+ if (marker == MARKER_ALLOW_ALTER
+ || marker == MARKER_DONE
+ || marker == MARKER_ADDED_DIR)
+ return;
+
+ /* If the marker is MARKER_ALLOW_ADD, then that means the parent was
+ moved away. There is no way to work on a child. That should have
+ been tested before we got here by VERIFY_PARENT_MAY_EXIST(). */
+ SVN_ERR_ASSERT_NO_RETURN(marker != MARKER_ALLOW_ADD);
+
+ /* MARKER is NULL. Upgrade it to MARKER_ALLOW_ALTER. */
+ MARK_RELPATH(editor, parent, MARKER_ALLOW_ALTER);
+}
+
+#else
+
+/* Be wary with the definition of these macros so that we don't
+ end up with "statement with no effect" warnings. Obviously, this
+ depends upon particular usage, which is easy to verify. */
+
+#define START_CALLBACK(editor) /* empty */
+#define END_CALLBACK(editor) /* empty */
+
+#define MARK_FINISHED(editor) /* empty */
+#define SHOULD_NOT_BE_FINISHED(editor) /* empty */
+
+#define CLEAR_INCOMPLETE(editor, relpath) /* empty */
+
+#define MARK_COMPLETED(editor, relpath) /* empty */
+#define SHOULD_NOT_BE_COMPLETED(editor, relpath) /* empty */
+
+#define MARK_ALLOW_ADD(editor, relpath) /* empty */
+#define SHOULD_ALLOW_ADD(editor, relpath) /* empty */
+
+#define MARK_ALLOW_ALTER(editor, relpath) /* empty */
+#define SHOULD_ALLOW_ALTER(editor, relpath) /* empty */
+
+#define MARK_ADDED_DIR(editor, relpath) /* empty */
+#define CHECK_UNKNOWN_CHILD(editor, relpath) /* empty */
+
+#define MARK_PARENT_STABLE(editor, relpath) /* empty */
+#define VERIFY_PARENT_MAY_EXIST(editor, relpath) /* empty */
+#define CHILD_DELETIONS_ALLOWED(editor, relpath) /* empty */
+
+#endif /* ENABLE_ORDERING_CHECK */
+
+
svn_error_t *
svn_editor_create(svn_editor_t **editor,
void *editor_baton,
@@ -62,10 +272,24 @@ svn_editor_create(svn_editor_t **editor,
(*editor)->cancel_baton = cancel_baton;
(*editor)->scratch_pool = svn_pool_create(result_pool);
+#ifdef ENABLE_ORDERING_CHECK
+ (*editor)->pending_incomplete_children = apr_hash_make(result_pool);
+ (*editor)->completed_nodes = apr_hash_make(result_pool);
+ (*editor)->finished = FALSE;
+ (*editor)->state_pool = result_pool;
+#endif
+
return SVN_NO_ERROR;
}
+void *
+svn_editor_get_baton(const svn_editor_t *editor)
+{
+ return editor->baton;
+}
+
+
svn_error_t *
svn_editor_setcb_add_directory(svn_editor_t *editor,
svn_editor_cb_add_directory_t callback,
@@ -107,31 +331,31 @@ svn_editor_setcb_add_absent(svn_editor_t *editor,
svn_error_t *
-svn_editor_setcb_set_props(svn_editor_t *editor,
- svn_editor_cb_set_props_t callback,
- apr_pool_t *scratch_pool)
+svn_editor_setcb_alter_directory(svn_editor_t *editor,
+ svn_editor_cb_alter_directory_t callback,
+ apr_pool_t *scratch_pool)
{
- editor->funcs.cb_set_props = callback;
+ editor->funcs.cb_alter_directory = callback;
return SVN_NO_ERROR;
}
svn_error_t *
-svn_editor_setcb_set_text(svn_editor_t *editor,
- svn_editor_cb_set_text_t callback,
- apr_pool_t *scratch_pool)
+svn_editor_setcb_alter_file(svn_editor_t *editor,
+ svn_editor_cb_alter_file_t callback,
+ apr_pool_t *scratch_pool)
{
- editor->funcs.cb_set_text = callback;
+ editor->funcs.cb_alter_file = callback;
return SVN_NO_ERROR;
}
svn_error_t *
-svn_editor_setcb_set_target(svn_editor_t *editor,
- svn_editor_cb_set_target_t callback,
- apr_pool_t *scratch_pool)
+svn_editor_setcb_alter_symlink(svn_editor_t *editor,
+ svn_editor_cb_alter_symlink_t callback,
+ apr_pool_t *scratch_pool)
{
- editor->funcs.cb_set_target = callback;
+ editor->funcs.cb_alter_symlink = callback;
return SVN_NO_ERROR;
}
@@ -167,6 +391,16 @@ svn_editor_setcb_move(svn_editor_t *editor,
svn_error_t *
+svn_editor_setcb_rotate(svn_editor_t *editor,
+ svn_editor_cb_rotate_t callback,
+ apr_pool_t *scratch_pool)
+{
+ editor->funcs.cb_rotate = callback;
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
svn_editor_setcb_complete(svn_editor_t *editor,
svn_editor_cb_complete_t callback,
apr_pool_t *scratch_pool)
@@ -197,12 +431,13 @@ svn_editor_setcb_many(svn_editor_t *editor,
COPY_CALLBACK(cb_add_file);
COPY_CALLBACK(cb_add_symlink);
COPY_CALLBACK(cb_add_absent);
- COPY_CALLBACK(cb_set_props);
- COPY_CALLBACK(cb_set_text);
- COPY_CALLBACK(cb_set_target);
+ COPY_CALLBACK(cb_alter_directory);
+ COPY_CALLBACK(cb_alter_file);
+ COPY_CALLBACK(cb_alter_symlink);
COPY_CALLBACK(cb_delete);
COPY_CALLBACK(cb_copy);
COPY_CALLBACK(cb_move);
+ COPY_CALLBACK(cb_rotate);
COPY_CALLBACK(cb_complete);
COPY_CALLBACK(cb_abort);
@@ -212,6 +447,22 @@ svn_editor_setcb_many(svn_editor_t *editor,
}
+static svn_error_t *
+check_cancel(svn_editor_t *editor)
+{
+ svn_error_t *err = NULL;
+
+ if (editor->cancel_func)
+ {
+ START_CALLBACK(editor);
+ err = editor->cancel_func(editor->cancel_baton);
+ END_CALLBACK(editor);
+ }
+
+ return svn_error_trace(err);
+}
+
+
svn_error_t *
svn_editor_add_directory(svn_editor_t *editor,
const char *relpath,
@@ -219,38 +470,88 @@ svn_editor_add_directory(svn_editor_t *editor,
apr_hash_t *props,
svn_revnum_t replaces_rev)
{
- svn_error_t *err;
-
- SVN_ERR_ASSERT(editor->funcs.cb_add_directory != NULL);
-
- if (editor->cancel_func)
- SVN_ERR(editor->cancel_func(editor->cancel_baton));
+ svn_error_t *err = SVN_NO_ERROR;
+
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(relpath));
+ SVN_ERR_ASSERT(children != NULL);
+ SVN_ERR_ASSERT(props != NULL);
+ /* ### validate children are just basenames? */
+ SHOULD_NOT_BE_FINISHED(editor);
+ SHOULD_ALLOW_ADD(editor, relpath);
+ VERIFY_PARENT_MAY_EXIST(editor, relpath);
+ CHECK_UNKNOWN_CHILD(editor, relpath);
+
+ SVN_ERR(check_cancel(editor));
+
+ if (editor->funcs.cb_add_directory)
+ {
+ START_CALLBACK(editor);
+ err = editor->funcs.cb_add_directory(editor->baton, relpath, children,
+ props, replaces_rev,
+ editor->scratch_pool);
+ END_CALLBACK(editor);
+ }
+
+ MARK_ADDED_DIR(editor, relpath);
+ MARK_PARENT_STABLE(editor, relpath);
+ CLEAR_INCOMPLETE(editor, relpath);
+
+#ifdef ENABLE_ORDERING_CHECK
+ {
+ int i;
+ for (i = 0; i < children->nelts; i++)
+ {
+ const char *child_basename = APR_ARRAY_IDX(children, i, const char *);
+ const char *child = svn_relpath_join(relpath, child_basename,
+ editor->state_pool);
+
+ svn_hash_sets(editor->pending_incomplete_children, child, "");
+ }
+ }
+#endif
- err = editor->funcs.cb_add_directory(editor->baton, relpath, children,
- props, replaces_rev,
- editor->scratch_pool);
svn_pool_clear(editor->scratch_pool);
- return err;
+ return svn_error_trace(err);
}
svn_error_t *
svn_editor_add_file(svn_editor_t *editor,
const char *relpath,
+ const svn_checksum_t *checksum,
+ svn_stream_t *contents,
apr_hash_t *props,
svn_revnum_t replaces_rev)
{
- svn_error_t *err;
-
- SVN_ERR_ASSERT(editor->funcs.cb_add_file != NULL);
-
- if (editor->cancel_func)
- SVN_ERR(editor->cancel_func(editor->cancel_baton));
+ svn_error_t *err = SVN_NO_ERROR;
+
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(relpath));
+ SVN_ERR_ASSERT(checksum != NULL
+ && checksum->kind == SVN_EDITOR_CHECKSUM_KIND);
+ SVN_ERR_ASSERT(contents != NULL);
+ SVN_ERR_ASSERT(props != NULL);
+ SHOULD_NOT_BE_FINISHED(editor);
+ SHOULD_ALLOW_ADD(editor, relpath);
+ VERIFY_PARENT_MAY_EXIST(editor, relpath);
+ CHECK_UNKNOWN_CHILD(editor, relpath);
+
+ SVN_ERR(check_cancel(editor));
+
+ if (editor->funcs.cb_add_file)
+ {
+ START_CALLBACK(editor);
+ err = editor->funcs.cb_add_file(editor->baton, relpath,
+ checksum, contents, props,
+ replaces_rev, editor->scratch_pool);
+ END_CALLBACK(editor);
+ }
+
+ MARK_COMPLETED(editor, relpath);
+ MARK_PARENT_STABLE(editor, relpath);
+ CLEAR_INCOMPLETE(editor, relpath);
- err = editor->funcs.cb_add_file(editor->baton, relpath, props,
- replaces_rev, editor->scratch_pool);
svn_pool_clear(editor->scratch_pool);
- return err;
+ return svn_error_trace(err);
}
@@ -261,17 +562,31 @@ svn_editor_add_symlink(svn_editor_t *editor,
apr_hash_t *props,
svn_revnum_t replaces_rev)
{
- svn_error_t *err;
+ svn_error_t *err = SVN_NO_ERROR;
- SVN_ERR_ASSERT(editor->funcs.cb_add_symlink != NULL);
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(relpath));
+ SVN_ERR_ASSERT(props != NULL);
+ SHOULD_NOT_BE_FINISHED(editor);
+ SHOULD_ALLOW_ADD(editor, relpath);
+ VERIFY_PARENT_MAY_EXIST(editor, relpath);
+ CHECK_UNKNOWN_CHILD(editor, relpath);
- if (editor->cancel_func)
- SVN_ERR(editor->cancel_func(editor->cancel_baton));
+ SVN_ERR(check_cancel(editor));
+
+ if (editor->funcs.cb_add_symlink)
+ {
+ START_CALLBACK(editor);
+ err = editor->funcs.cb_add_symlink(editor->baton, relpath, target, props,
+ replaces_rev, editor->scratch_pool);
+ END_CALLBACK(editor);
+ }
+
+ MARK_COMPLETED(editor, relpath);
+ MARK_PARENT_STABLE(editor, relpath);
+ CLEAR_INCOMPLETE(editor, relpath);
- err = editor->funcs.cb_add_symlink(editor->baton, relpath, target, props,
- replaces_rev, editor->scratch_pool);
svn_pool_clear(editor->scratch_pool);
- return err;
+ return svn_error_trace(err);
}
@@ -281,79 +596,161 @@ svn_editor_add_absent(svn_editor_t *editor,
svn_node_kind_t kind,
svn_revnum_t replaces_rev)
{
- svn_error_t *err;
+ svn_error_t *err = SVN_NO_ERROR;
- SVN_ERR_ASSERT(editor->funcs.cb_add_absent != NULL);
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(relpath));
+ SHOULD_NOT_BE_FINISHED(editor);
+ SHOULD_ALLOW_ADD(editor, relpath);
+ VERIFY_PARENT_MAY_EXIST(editor, relpath);
+ CHECK_UNKNOWN_CHILD(editor, relpath);
- if (editor->cancel_func)
- SVN_ERR(editor->cancel_func(editor->cancel_baton));
+ SVN_ERR(check_cancel(editor));
+
+ if (editor->funcs.cb_add_absent)
+ {
+ START_CALLBACK(editor);
+ err = editor->funcs.cb_add_absent(editor->baton, relpath, kind,
+ replaces_rev, editor->scratch_pool);
+ END_CALLBACK(editor);
+ }
+
+ MARK_COMPLETED(editor, relpath);
+ MARK_PARENT_STABLE(editor, relpath);
+ CLEAR_INCOMPLETE(editor, relpath);
- err = editor->funcs.cb_add_absent(editor->baton, relpath, kind,
- replaces_rev, editor->scratch_pool);
svn_pool_clear(editor->scratch_pool);
- return err;
+ return svn_error_trace(err);
}
svn_error_t *
-svn_editor_set_props(svn_editor_t *editor,
- const char *relpath,
- svn_revnum_t revision,
- apr_hash_t *props,
- svn_boolean_t complete)
+svn_editor_alter_directory(svn_editor_t *editor,
+ const char *relpath,
+ svn_revnum_t revision,
+ const apr_array_header_t *children,
+ apr_hash_t *props)
{
- svn_error_t *err;
-
- SVN_ERR_ASSERT(editor->funcs.cb_set_props != NULL);
-
- if (editor->cancel_func)
- SVN_ERR(editor->cancel_func(editor->cancel_baton));
+ svn_error_t *err = SVN_NO_ERROR;
+
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(relpath));
+ SVN_ERR_ASSERT(children != NULL || props != NULL);
+ /* ### validate children are just basenames? */
+ SHOULD_NOT_BE_FINISHED(editor);
+ SHOULD_ALLOW_ALTER(editor, relpath);
+ VERIFY_PARENT_MAY_EXIST(editor, relpath);
+
+ SVN_ERR(check_cancel(editor));
+
+ if (editor->funcs.cb_alter_directory)
+ {
+ START_CALLBACK(editor);
+ err = editor->funcs.cb_alter_directory(editor->baton,
+ relpath, revision,
+ children, props,
+ editor->scratch_pool);
+ END_CALLBACK(editor);
+ }
+
+ MARK_COMPLETED(editor, relpath);
+ MARK_PARENT_STABLE(editor, relpath);
+
+#ifdef ENABLE_ORDERING_CHECK
+ /* ### this is not entirely correct. we probably need to adjust the
+ ### check_unknown_child() function for this scenario. */
+#if 0
+ {
+ int i;
+ for (i = 0; i < children->nelts; i++)
+ {
+ const char *child_basename = APR_ARRAY_IDX(children, i, const char *);
+ const char *child = svn_relpath_join(relpath, child_basename,
+ editor->state_pool);
+
+ apr_hash_set(editor->pending_incomplete_children, child,
+ APR_HASH_KEY_STRING, "");
+ /* Perhaps MARK_ALLOW_ADD(editor, child); ? */
+ }
+ }
+#endif
+#endif
- err = editor->funcs.cb_set_props(editor->baton, relpath, revision, props,
- complete, editor->scratch_pool);
svn_pool_clear(editor->scratch_pool);
- return err;
+ return svn_error_trace(err);
}
svn_error_t *
-svn_editor_set_text(svn_editor_t *editor,
- const char *relpath,
- svn_revnum_t revision,
- const svn_checksum_t *checksum,
- svn_stream_t *contents)
+svn_editor_alter_file(svn_editor_t *editor,
+ const char *relpath,
+ svn_revnum_t revision,
+ apr_hash_t *props,
+ const svn_checksum_t *checksum,
+ svn_stream_t *contents)
{
- svn_error_t *err;
-
- SVN_ERR_ASSERT(editor->funcs.cb_set_text != NULL);
+ svn_error_t *err = SVN_NO_ERROR;
+
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(relpath));
+ SVN_ERR_ASSERT((checksum != NULL && contents != NULL)
+ || (checksum == NULL && contents == NULL));
+ SVN_ERR_ASSERT(props != NULL || checksum != NULL);
+ if (checksum)
+ SVN_ERR_ASSERT(checksum->kind == SVN_EDITOR_CHECKSUM_KIND);
+ SHOULD_NOT_BE_FINISHED(editor);
+ SHOULD_ALLOW_ALTER(editor, relpath);
+ VERIFY_PARENT_MAY_EXIST(editor, relpath);
+
+ SVN_ERR(check_cancel(editor));
+
+ if (editor->funcs.cb_alter_file)
+ {
+ START_CALLBACK(editor);
+ err = editor->funcs.cb_alter_file(editor->baton,
+ relpath, revision, props,
+ checksum, contents,
+ editor->scratch_pool);
+ END_CALLBACK(editor);
+ }
+
+ MARK_COMPLETED(editor, relpath);
+ MARK_PARENT_STABLE(editor, relpath);
- if (editor->cancel_func)
- SVN_ERR(editor->cancel_func(editor->cancel_baton));
-
- err = editor->funcs.cb_set_text(editor->baton, relpath, revision,
- checksum, contents, editor->scratch_pool);
svn_pool_clear(editor->scratch_pool);
- return err;
+ return svn_error_trace(err);
}
svn_error_t *
-svn_editor_set_target(svn_editor_t *editor,
- const char *relpath,
- svn_revnum_t revision,
- const char *target)
+svn_editor_alter_symlink(svn_editor_t *editor,
+ const char *relpath,
+ svn_revnum_t revision,
+ apr_hash_t *props,
+ const char *target)
{
- svn_error_t *err;
+ svn_error_t *err = SVN_NO_ERROR;
- SVN_ERR_ASSERT(editor->funcs.cb_set_target != NULL);
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(relpath));
+ SVN_ERR_ASSERT(props != NULL || target != NULL);
+ SHOULD_NOT_BE_FINISHED(editor);
+ SHOULD_ALLOW_ALTER(editor, relpath);
+ VERIFY_PARENT_MAY_EXIST(editor, relpath);
- if (editor->cancel_func)
- SVN_ERR(editor->cancel_func(editor->cancel_baton));
+ SVN_ERR(check_cancel(editor));
+
+ if (editor->funcs.cb_alter_symlink)
+ {
+ START_CALLBACK(editor);
+ err = editor->funcs.cb_alter_symlink(editor->baton,
+ relpath, revision, props,
+ target,
+ editor->scratch_pool);
+ END_CALLBACK(editor);
+ }
+
+ MARK_COMPLETED(editor, relpath);
+ MARK_PARENT_STABLE(editor, relpath);
- err = editor->funcs.cb_set_target(editor->baton, relpath, revision,
- target, editor->scratch_pool);
svn_pool_clear(editor->scratch_pool);
- return err;
+ return svn_error_trace(err);
}
@@ -362,17 +759,29 @@ svn_editor_delete(svn_editor_t *editor,
const char *relpath,
svn_revnum_t revision)
{
- svn_error_t *err;
+ svn_error_t *err = SVN_NO_ERROR;
- SVN_ERR_ASSERT(editor->funcs.cb_delete != NULL);
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(relpath));
+ SHOULD_NOT_BE_FINISHED(editor);
+ SHOULD_NOT_BE_COMPLETED(editor, relpath);
+ VERIFY_PARENT_MAY_EXIST(editor, relpath);
+ CHILD_DELETIONS_ALLOWED(editor, relpath);
- if (editor->cancel_func)
- SVN_ERR(editor->cancel_func(editor->cancel_baton));
+ SVN_ERR(check_cancel(editor));
+
+ if (editor->funcs.cb_delete)
+ {
+ START_CALLBACK(editor);
+ err = editor->funcs.cb_delete(editor->baton, relpath, revision,
+ editor->scratch_pool);
+ END_CALLBACK(editor);
+ }
+
+ MARK_COMPLETED(editor, relpath);
+ MARK_PARENT_STABLE(editor, relpath);
- err = editor->funcs.cb_delete(editor->baton, relpath, revision,
- editor->scratch_pool);
svn_pool_clear(editor->scratch_pool);
- return err;
+ return svn_error_trace(err);
}
@@ -383,18 +792,32 @@ svn_editor_copy(svn_editor_t *editor,
const char *dst_relpath,
svn_revnum_t replaces_rev)
{
- svn_error_t *err;
-
- SVN_ERR_ASSERT(editor->funcs.cb_copy != NULL);
+ svn_error_t *err = SVN_NO_ERROR;
+
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(src_relpath));
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(dst_relpath));
+ SHOULD_NOT_BE_FINISHED(editor);
+ SHOULD_ALLOW_ADD(editor, dst_relpath);
+ VERIFY_PARENT_MAY_EXIST(editor, src_relpath);
+ VERIFY_PARENT_MAY_EXIST(editor, dst_relpath);
+
+ SVN_ERR(check_cancel(editor));
+
+ if (editor->funcs.cb_copy)
+ {
+ START_CALLBACK(editor);
+ err = editor->funcs.cb_copy(editor->baton, src_relpath, src_revision,
+ dst_relpath, replaces_rev,
+ editor->scratch_pool);
+ END_CALLBACK(editor);
+ }
+
+ MARK_ALLOW_ALTER(editor, dst_relpath);
+ MARK_PARENT_STABLE(editor, dst_relpath);
+ CLEAR_INCOMPLETE(editor, dst_relpath);
- if (editor->cancel_func)
- SVN_ERR(editor->cancel_func(editor->cancel_baton));
-
- err = editor->funcs.cb_copy(editor->baton, src_relpath, src_revision,
- dst_relpath, replaces_rev,
- editor->scratch_pool);
svn_pool_clear(editor->scratch_pool);
- return err;
+ return svn_error_trace(err);
}
@@ -405,42 +828,129 @@ svn_editor_move(svn_editor_t *editor,
const char *dst_relpath,
svn_revnum_t replaces_rev)
{
- svn_error_t *err;
+ svn_error_t *err = SVN_NO_ERROR;
+
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(src_relpath));
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(dst_relpath));
+ SHOULD_NOT_BE_FINISHED(editor);
+ SHOULD_NOT_BE_COMPLETED(editor, src_relpath);
+ SHOULD_ALLOW_ADD(editor, dst_relpath);
+ VERIFY_PARENT_MAY_EXIST(editor, src_relpath);
+ CHILD_DELETIONS_ALLOWED(editor, src_relpath);
+ VERIFY_PARENT_MAY_EXIST(editor, dst_relpath);
+
+ SVN_ERR(check_cancel(editor));
+
+ if (editor->funcs.cb_move)
+ {
+ START_CALLBACK(editor);
+ err = editor->funcs.cb_move(editor->baton, src_relpath, src_revision,
+ dst_relpath, replaces_rev,
+ editor->scratch_pool);
+ END_CALLBACK(editor);
+ }
+
+ MARK_ALLOW_ADD(editor, src_relpath);
+ MARK_PARENT_STABLE(editor, src_relpath);
+ MARK_ALLOW_ALTER(editor, dst_relpath);
+ MARK_PARENT_STABLE(editor, dst_relpath);
+ CLEAR_INCOMPLETE(editor, dst_relpath);
+
+ svn_pool_clear(editor->scratch_pool);
+ return svn_error_trace(err);
+}
- SVN_ERR_ASSERT(editor->funcs.cb_move != NULL);
- if (editor->cancel_func)
- SVN_ERR(editor->cancel_func(editor->cancel_baton));
+svn_error_t *
+svn_editor_rotate(svn_editor_t *editor,
+ const apr_array_header_t *relpaths,
+ const apr_array_header_t *revisions)
+{
+ svn_error_t *err = SVN_NO_ERROR;
+
+ SHOULD_NOT_BE_FINISHED(editor);
+#ifdef ENABLE_ORDERING_CHECK
+ {
+ int i;
+ for (i = 0; i < relpaths->nelts; i++)
+ {
+ const char *relpath = APR_ARRAY_IDX(relpaths, i, const char *);
+
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(relpath));
+ SHOULD_NOT_BE_COMPLETED(editor, relpath);
+ VERIFY_PARENT_MAY_EXIST(editor, relpath);
+ CHILD_DELETIONS_ALLOWED(editor, relpath);
+ }
+ }
+#endif
+
+ SVN_ERR(check_cancel(editor));
+
+ if (editor->funcs.cb_rotate)
+ {
+ START_CALLBACK(editor);
+ err = editor->funcs.cb_rotate(editor->baton, relpaths, revisions,
+ editor->scratch_pool);
+ END_CALLBACK(editor);
+ }
+
+#ifdef ENABLE_ORDERING_CHECK
+ {
+ int i;
+ for (i = 0; i < relpaths->nelts; i++)
+ {
+ const char *relpath = APR_ARRAY_IDX(relpaths, i, const char *);
+ MARK_ALLOW_ALTER(editor, relpath);
+ MARK_PARENT_STABLE(editor, relpath);
+ }
+ }
+#endif
- err = editor->funcs.cb_move(editor->baton, src_relpath, src_revision,
- dst_relpath, replaces_rev,
- editor->scratch_pool);
svn_pool_clear(editor->scratch_pool);
- return err;
+ return svn_error_trace(err);
}
svn_error_t *
svn_editor_complete(svn_editor_t *editor)
{
- svn_error_t *err;
+ svn_error_t *err = SVN_NO_ERROR;
+
+ SHOULD_NOT_BE_FINISHED(editor);
+#ifdef ENABLE_ORDERING_CHECK
+ SVN_ERR_ASSERT(apr_hash_count(editor->pending_incomplete_children) == 0);
+#endif
- SVN_ERR_ASSERT(editor->funcs.cb_complete != NULL);
+ if (editor->funcs.cb_complete)
+ {
+ START_CALLBACK(editor);
+ err = editor->funcs.cb_complete(editor->baton, editor->scratch_pool);
+ END_CALLBACK(editor);
+ }
+
+ MARK_FINISHED(editor);
- err = editor->funcs.cb_complete(editor->baton, editor->scratch_pool);
svn_pool_clear(editor->scratch_pool);
- return err;
+ return svn_error_trace(err);
}
svn_error_t *
svn_editor_abort(svn_editor_t *editor)
{
- svn_error_t *err;
+ svn_error_t *err = SVN_NO_ERROR;
+
+ SHOULD_NOT_BE_FINISHED(editor);
+
+ if (editor->funcs.cb_abort)
+ {
+ START_CALLBACK(editor);
+ err = editor->funcs.cb_abort(editor->baton, editor->scratch_pool);
+ END_CALLBACK(editor);
+ }
- SVN_ERR_ASSERT(editor->funcs.cb_abort != NULL);
+ MARK_FINISHED(editor);
- err = editor->funcs.cb_abort(editor->baton, editor->scratch_pool);
svn_pool_clear(editor->scratch_pool);
- return err;
+ return svn_error_trace(err);
}
diff --git a/subversion/libsvn_delta/path_driver.c b/subversion/libsvn_delta/path_driver.c
index 13fb571..62e703a 100644
--- a/subversion/libsvn_delta/path_driver.c
+++ b/subversion/libsvn_delta/path_driver.c
@@ -44,15 +44,13 @@ typedef struct dir_stack_t
} dir_stack_t;
-/* Call EDITOR's open_directory() function with the PATH and REVISION
- * arguments, and then add the resulting dir baton to the dir baton
- * stack.
+/* Call EDITOR's open_directory() function with the PATH argument, then
+ * add the resulting dir baton to the dir baton stack.
*/
static svn_error_t *
open_dir(apr_array_header_t *db_stack,
const svn_delta_editor_t *editor,
const char *path,
- svn_revnum_t revision,
apr_pool_t *pool)
{
void *parent_db, *db;
@@ -69,7 +67,8 @@ open_dir(apr_array_header_t *db_stack,
/* Call the EDITOR's open_directory function to get a new directory
baton. */
subpool = svn_pool_create(pool);
- SVN_ERR(editor->open_directory(path, parent_db, revision, subpool, &db));
+ SVN_ERR(editor->open_directory(path, parent_db, SVN_INVALID_REVNUM, subpool,
+ &db));
/* Now add the dir baton to the stack. */
item = apr_pcalloc(subpool, sizeof(*item));
@@ -131,13 +130,13 @@ count_components(const char *path)
/*** Public interfaces ***/
svn_error_t *
-svn_delta_path_driver(const svn_delta_editor_t *editor,
- void *edit_baton,
- svn_revnum_t revision,
- const apr_array_header_t *paths,
- svn_delta_path_driver_cb_func_t callback_func,
- void *callback_baton,
- apr_pool_t *pool)
+svn_delta_path_driver2(const svn_delta_editor_t *editor,
+ void *edit_baton,
+ const apr_array_header_t *paths,
+ svn_boolean_t sort_paths,
+ svn_delta_path_driver_cb_func_t callback_func,
+ void *callback_baton,
+ apr_pool_t *pool)
{
apr_array_header_t *db_stack = apr_array_make(pool, 4, sizeof(void *));
const char *last_path = NULL;
@@ -153,10 +152,17 @@ svn_delta_path_driver(const svn_delta_editor_t *editor,
subpool = svn_pool_create(pool);
iterpool = svn_pool_create(pool);
- item = apr_pcalloc(subpool, sizeof(*item));
- /* Sort the paths in a depth-first directory-ish order. */
- qsort(paths->elts, paths->nelts, paths->elt_size, svn_sort_compare_paths);
+ /* sort paths if necessary */
+ if (sort_paths && paths->nelts > 1)
+ {
+ apr_array_header_t *sorted = apr_array_copy(subpool, paths);
+ qsort(sorted->elts, sorted->nelts, sorted->elt_size,
+ svn_sort_compare_paths);
+ paths = sorted;
+ }
+
+ item = apr_pcalloc(subpool, sizeof(*item));
/* If the root of the edit is also a target path, we want to call
the callback function to let the user open the root directory and
@@ -171,7 +177,7 @@ svn_delta_path_driver(const svn_delta_editor_t *editor,
}
else
{
- SVN_ERR(editor->open_root(edit_baton, revision, subpool, &db));
+ SVN_ERR(editor->open_root(edit_baton, SVN_INVALID_REVNUM, subpool, &db));
}
item->pool = subpool;
item->dir_baton = db;
@@ -238,7 +244,7 @@ svn_delta_path_driver(const svn_delta_editor_t *editor,
rel = apr_pstrmemdup(iterpool, pdir, piece - pdir);
/* Open the subdirectory. */
- SVN_ERR(open_dir(db_stack, editor, rel, revision, pool));
+ SVN_ERR(open_dir(db_stack, editor, rel, pool));
/* If we found a '/', advance our PIECE pointer to
character just after that '/'. Otherwise, we're
diff --git a/subversion/libsvn_delta/svndiff.c b/subversion/libsvn_delta/svndiff.c
index 0beb1b2..b9cb285 100644
--- a/subversion/libsvn_delta/svndiff.c
+++ b/subversion/libsvn_delta/svndiff.c
@@ -31,6 +31,9 @@
#include "svn_private_config.h"
#include <zlib.h>
+#include "private/svn_error_private.h"
+#include "private/svn_delta_private.h"
+
/* The zlib compressBound function was not exported until 1.2.0. */
#if ZLIB_VERNUM >= 0x1200
#define svnCompressBound(LEN) compressBound(LEN)
@@ -127,11 +130,12 @@ append_encoded_int(svn_stringbuf_t *header, svn_filesize_t val)
svn_stringbuf_appendbytes(header, (const char *)buf, p - buf);
}
-/* If IN is a string that is >= MIN_COMPRESS_SIZE, zlib compress it and
- place the result in OUT, with an integer prepended specifying the
- original size. If IN is < MIN_COMPRESS_SIZE, or if the compressed
- version of IN was no smaller than the original IN, OUT will be a copy
- of IN with the size prepended as an integer. */
+/* If IN is a string that is >= MIN_COMPRESS_SIZE and the COMPRESSION_LEVEL
+ is not SVN_DELTA_COMPRESSION_LEVEL_NONE, zlib compress it and places the
+ result in OUT, with an integer prepended specifying the original size.
+ If IN is < MIN_COMPRESS_SIZE, or if the compressed version of IN was no
+ smaller than the original IN, OUT will be a copy of IN with the size
+ prepended as an integer. */
static svn_error_t *
zlib_encode(const char *data,
apr_size_t len,
@@ -141,6 +145,7 @@ zlib_encode(const char *data,
unsigned long endlen;
apr_size_t intlen;
+ svn_stringbuf_setempty(out);
append_encoded_int(out, len);
intlen = out->len;
@@ -156,15 +161,18 @@ zlib_encode(const char *data,
}
else
{
+ int zerr;
+
svn_stringbuf_ensure(out, svnCompressBound(len) + intlen);
endlen = out->blocksize;
- if (compress2((unsigned char *)out->data + intlen, &endlen,
- (const unsigned char *)data, len,
- compression_level) != Z_OK)
- return svn_error_create(SVN_ERR_SVNDIFF_INVALID_COMPRESSED_DATA,
- NULL,
- _("Compression of svndiff data failed"));
+ zerr = compress2((unsigned char *)out->data + intlen, &endlen,
+ (const unsigned char *)data, len,
+ compression_level);
+ if (zerr != Z_OK)
+ return svn_error_trace(svn_error__wrap_zlib(
+ zerr, "compress2",
+ _("Compression of svndiff data failed")));
/* Compression didn't help :(, just append the original text */
if (endlen >= len)
@@ -173,25 +181,95 @@ zlib_encode(const char *data,
return SVN_NO_ERROR;
}
out->len = endlen + intlen;
+ out->data[out->len] = 0;
}
return SVN_NO_ERROR;
}
static svn_error_t *
+send_simple_insertion_window(svn_txdelta_window_t *window,
+ struct encoder_baton *eb)
+{
+ unsigned char headers[4 + 5 * MAX_ENCODED_INT_LEN + MAX_INSTRUCTION_LEN];
+ unsigned char ibuf[MAX_INSTRUCTION_LEN];
+ unsigned char *header_current;
+ apr_size_t header_len;
+ apr_size_t ip_len, i;
+ apr_size_t len = window->new_data->len;
+
+ /* there is only one target copy op. It must span the whole window */
+ assert(window->ops[0].action_code == svn_txdelta_new);
+ assert(window->ops[0].length == window->tview_len);
+ assert(window->ops[0].offset == 0);
+
+ /* write stream header if necessary */
+ if (!eb->header_done)
+ {
+ eb->header_done = TRUE;
+ headers[0] = 'S';
+ headers[1] = 'V';
+ headers[2] = 'N';
+ headers[3] = (unsigned char)eb->version;
+ header_current = headers + 4;
+ }
+ else
+ {
+ header_current = headers;
+ }
+
+ /* Encode the action code and length. */
+ if (window->tview_len >> 6 == 0)
+ {
+ ibuf[0] = (unsigned char)(window->tview_len + (0x2 << 6));
+ ip_len = 1;
+ }
+ else
+ {
+ ibuf[0] = (0x2 << 6);
+ ip_len = encode_int(ibuf + 1, window->tview_len) - ibuf;
+ }
+
+ /* encode the window header. Please note that the source window may
+ * have content despite not being used for deltification. */
+ header_current = encode_int(header_current, window->sview_offset);
+ header_current = encode_int(header_current, window->sview_len);
+ header_current = encode_int(header_current, window->tview_len);
+ header_current[0] = (unsigned char)ip_len; /* 1 instruction */
+ header_current = encode_int(&header_current[1], len);
+
+ /* append instructions (1 to a handful of bytes) */
+ for (i = 0; i < ip_len; ++i)
+ header_current[i] = ibuf[i];
+
+ header_len = header_current - headers + ip_len;
+
+ /* Write out the window. */
+ SVN_ERR(svn_stream_write(eb->output, (const char *)headers, &header_len));
+ if (len)
+ SVN_ERR(svn_stream_write(eb->output, window->new_data->data, &len));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
window_handler(svn_txdelta_window_t *window, void *baton)
{
struct encoder_baton *eb = baton;
- apr_pool_t *pool = svn_pool_create(eb->pool);
- svn_stringbuf_t *instructions = svn_stringbuf_create("", pool);
- svn_stringbuf_t *i1 = svn_stringbuf_create("", pool);
- svn_stringbuf_t *header = svn_stringbuf_create("", pool);
+ apr_pool_t *pool;
+ svn_stringbuf_t *instructions;
+ svn_stringbuf_t *i1;
+ svn_stringbuf_t *header;
const svn_string_t *newdata;
unsigned char ibuf[MAX_INSTRUCTION_LEN], *ip;
const svn_txdelta_op_t *op;
apr_size_t len;
+ /* use specialized code if there is no source */
+ if (window && !window->src_ops && window->num_ops == 1 && !eb->version)
+ return svn_error_trace(send_simple_insertion_window(window, eb));
+
/* Make sure we write the header. */
- if (eb->header_done == FALSE)
+ if (!eb->header_done)
{
char svnver[4] = {'S','V','N','\0'};
len = 4;
@@ -221,6 +299,12 @@ window_handler(svn_txdelta_window_t *window, void *baton)
return svn_stream_close(output);
}
+ /* create the necessary data buffers */
+ pool = svn_pool_create(eb->pool);
+ instructions = svn_stringbuf_create_empty(pool);
+ i1 = svn_stringbuf_create_empty(pool);
+ header = svn_stringbuf_create_empty(pool);
+
/* Encode the instructions. */
for (op = window->ops; op < window->ops + window->num_ops; op++)
{
@@ -233,7 +317,7 @@ window_handler(svn_txdelta_window_t *window, void *baton)
case svn_txdelta_new: *ip = (0x2 << 6); break;
}
if (op->length >> 6 == 0)
- *ip++ |= op->length;
+ *ip++ |= (unsigned char)op->length;
else
ip = encode_int(ip + 1, op->length);
if (op->action_code != svn_txdelta_new)
@@ -254,8 +338,8 @@ window_handler(svn_txdelta_window_t *window, void *baton)
append_encoded_int(header, instructions->len);
if (eb->version == 1)
{
- svn_stringbuf_t *temp = svn_stringbuf_create("", pool);
- svn_string_t *tempstr = svn_string_create("", pool);
+ svn_stringbuf_t *temp = svn_stringbuf_create_empty(pool);
+ svn_string_t *tempstr = svn_string_create_empty(pool);
SVN_ERR(zlib_encode(window->new_data->data, window->new_data->len,
temp, eb->compression_level));
tempstr->data = temp->data;
@@ -431,20 +515,25 @@ decode_size(apr_size_t *val,
return NULL;
}
-/* Decode the possibly-zlib compressed string that is in IN, into OUT.
- We expect an integer is prepended to IN that specifies the original
- size, and that if encoded size == original size, that the remaining
- data is not compressed. */
+/* Decode the possibly-zlib compressed string of length INLEN that is in
+ IN, into OUT. We expect an integer is prepended to IN that specifies
+ the original size, and that if encoded size == original size, that the
+ remaining data is not compressed.
+ In that case, we will simply return pointer into IN as data pointer for
+ OUT, COPYLESS_ALLOWED has been set. The, the caller is expected not to
+ modify the contents of OUT.
+ An error is returned if the decoded length exceeds the given LIMIT.
+ */
static svn_error_t *
-zlib_decode(svn_stringbuf_t *in, svn_stringbuf_t *out, apr_size_t limit)
+zlib_decode(const unsigned char *in, apr_size_t inLen, svn_stringbuf_t *out,
+ apr_size_t limit)
{
apr_size_t len;
- char *oldplace = in->data;
+ const unsigned char *oldplace = in;
/* First thing in the string is the original length. */
- in->data = (char *)decode_size(&len, (unsigned char *)in->data,
- (unsigned char *)in->data+in->len);
- if (in->data == NULL)
+ in = decode_size(&len, in, in + inLen);
+ if (in == NULL)
return svn_error_create(SVN_ERR_SVNDIFF_INVALID_COMPRESSED_DATA, NULL,
_("Decompression of svndiff data failed: no size"));
if (len > limit)
@@ -453,33 +542,37 @@ zlib_decode(svn_stringbuf_t *in, svn_stringbuf_t *out, apr_size_t limit)
"size too large"));
/* We need to subtract the size of the encoded original length off the
* still remaining input length. */
- in->len -= (in->data - oldplace);
- if (in->len == len)
+ inLen -= (in - oldplace);
+ if (inLen == len)
{
- svn_stringbuf_appendstr(out, in);
+ svn_stringbuf_ensure(out, len);
+ memcpy(out->data, in, len);
+ out->data[len] = 0;
+ out->len = len;
+
return SVN_NO_ERROR;
}
else
{
- unsigned long zliblen;
+ unsigned long zlen = len;
+ int zerr;
svn_stringbuf_ensure(out, len);
-
- zliblen = len;
- if (uncompress ((unsigned char *)out->data, &zliblen,
- (const unsigned char *)in->data, in->len) != Z_OK)
- return svn_error_create(SVN_ERR_SVNDIFF_INVALID_COMPRESSED_DATA,
- NULL,
- _("Decompression of svndiff data failed"));
+ zerr = uncompress((unsigned char *)out->data, &zlen, in, inLen);
+ if (zerr != Z_OK)
+ return svn_error_trace(svn_error__wrap_zlib(
+ zerr, "uncompress",
+ _("Decompression of svndiff data failed")));
/* Zlib should not produce something that has a different size than the
original length we stored. */
- if (zliblen != len)
+ if (zlen != len)
return svn_error_create(SVN_ERR_SVNDIFF_INVALID_COMPRESSED_DATA,
NULL,
_("Size of uncompressed data "
"does not match stored original length"));
- out->len = zliblen;
+ out->data[zlen] = 0;
+ out->len = zlen;
}
return SVN_NO_ERROR;
}
@@ -627,16 +720,13 @@ decode_window(svn_txdelta_window_t *window, svn_filesize_t sview_offset,
if (version == 1)
{
- svn_stringbuf_t *instin, *ndin;
- svn_stringbuf_t *instout, *ndout;
+ svn_stringbuf_t *instout = svn_stringbuf_create_empty(pool);
+ svn_stringbuf_t *ndout = svn_stringbuf_create_empty(pool);
- instin = svn_stringbuf_ncreate((const char *)data, insend - data, pool);
- instout = svn_stringbuf_create("", pool);
- SVN_ERR(zlib_decode(instin, instout, MAX_INSTRUCTION_SECTION_LEN));
-
- ndin = svn_stringbuf_ncreate((const char *)insend, newlen, pool);
- ndout = svn_stringbuf_create("", pool);
- SVN_ERR(zlib_decode(ndin, ndout, SVN_DELTA_WINDOW_SIZE));
+ SVN_ERR(zlib_decode(insend, newlen, ndout,
+ SVN_DELTA_WINDOW_SIZE));
+ SVN_ERR(zlib_decode(data, insend - data, instout,
+ MAX_INSTRUCTION_SECTION_LEN));
newlen = ndout->len;
data = (unsigned char *)instout->data;
@@ -647,7 +737,13 @@ decode_window(svn_txdelta_window_t *window, svn_filesize_t sview_offset,
}
else
{
- new_data->data = (const char *) insend;
+ /* Copy the data because an svn_string_t must have the invariant
+ data[len]=='\0'. */
+ char *buf = apr_palloc(pool, newlen + 1);
+
+ memcpy(buf, insend, newlen);
+ buf[newlen] = '\0';
+ new_data->data = buf;
new_data->len = newlen;
}
@@ -763,7 +859,7 @@ write_handler(void *baton,
/* Check for integer overflow. */
if (sview_offset < 0 || inslen + newlen < inslen
|| sview_len + tview_len < sview_len
- || sview_offset + sview_len < sview_offset)
+ || (apr_size_t)sview_offset + sview_len < (apr_size_t)sview_offset)
return svn_error_create(SVN_ERR_SVNDIFF_CORRUPT_WINDOW, NULL,
_("Svndiff contains corrupt window header"));
@@ -811,6 +907,14 @@ write_handler(void *baton,
/* NOTREACHED */
}
+/* Minimal svn_stream_t write handler, doing nothing */
+static svn_error_t *
+noop_write_handler(void *baton,
+ const char *buffer,
+ apr_size_t *len)
+{
+ return SVN_NO_ERROR;
+}
static svn_error_t *
close_handler(void *baton)
@@ -846,14 +950,24 @@ svn_txdelta_parse_svndiff(svn_txdelta_window_handler_t handler,
db->consumer_baton = handler_baton;
db->pool = subpool;
db->subpool = svn_pool_create(subpool);
- db->buffer = svn_stringbuf_create("", db->subpool);
+ db->buffer = svn_stringbuf_create_empty(db->subpool);
db->last_sview_offset = 0;
db->last_sview_len = 0;
db->header_bytes = 0;
db->error_on_early_close = error_on_early_close;
stream = svn_stream_create(db, pool);
- svn_stream_set_write(stream, write_handler);
- svn_stream_set_close(stream, close_handler);
+
+ if (handler != svn_delta_noop_window_handler)
+ {
+ svn_stream_set_write(stream, write_handler);
+ svn_stream_set_close(stream, close_handler);
+ }
+ else
+ {
+ /* And else we just ignore everything as efficiently as we can.
+ by only hooking a no-op handler */
+ svn_stream_set_write(stream, noop_write_handler);
+ }
return stream;
}
@@ -927,7 +1041,7 @@ read_window_header(svn_stream_t *stream, svn_filesize_t *sview_offset,
/* Check for integer overflow. */
if (*sview_offset < 0 || *inslen + *newlen < *inslen
|| *sview_len + *tview_len < *sview_len
- || *sview_offset + *sview_len < *sview_offset)
+ || (apr_size_t)*sview_offset + *sview_len < (apr_size_t)*sview_offset)
return svn_error_create(SVN_ERR_SVNDIFF_CORRUPT_WINDOW, NULL,
_("Svndiff contains corrupt window header"));
@@ -974,3 +1088,20 @@ svn_txdelta_skip_svndiff_window(apr_file_t *file,
offset = inslen + newlen;
return svn_io_file_seek(file, APR_CUR, &offset, pool);
}
+
+
+svn_error_t *
+svn__compress(svn_string_t *in,
+ svn_stringbuf_t *out,
+ int compression_level)
+{
+ return zlib_encode(in->data, in->len, out, compression_level);
+}
+
+svn_error_t *
+svn__decompress(svn_string_t *in,
+ svn_stringbuf_t *out,
+ apr_size_t limit)
+{
+ return zlib_decode((const unsigned char*)in->data, in->len, out, limit);
+}
diff --git a/subversion/libsvn_delta/text_delta.c b/subversion/libsvn_delta/text_delta.c
index ba35ba6..be2c434 100644
--- a/subversion/libsvn_delta/text_delta.c
+++ b/subversion/libsvn_delta/text_delta.c
@@ -57,7 +57,8 @@ struct txdelta_baton {
svn_filesize_t pos; /* Offset of next read in source file. */
char *buf; /* Buffer for input data. */
- svn_checksum_ctx_t *context; /* Context for computing the checksum. */
+ svn_checksum_ctx_t *context; /* If not NULL, the context for computing
+ the checksum. */
svn_checksum_t *checksum; /* If non-NULL, the checksum of TARGET. */
apr_pool_t *result_pool; /* For results (e.g. checksum) */
@@ -150,7 +151,7 @@ compute_window(const char *data, apr_size_t source_len, apr_size_t target_len,
svn_txdelta_window_t *window;
/* Compute the delta operations. */
- build_baton.new_data = svn_stringbuf_create("", pool);
+ build_baton.new_data = svn_stringbuf_create_empty(pool);
if (source_len == 0)
svn_txdelta__insert_op(&build_baton, svn_txdelta_new, 0, target_len, data,
@@ -276,6 +277,48 @@ svn_txdelta__insert_op(svn_txdelta__ops_baton_t *build_baton,
++build_baton->num_ops;
}
+apr_size_t
+svn_txdelta__remove_copy(svn_txdelta__ops_baton_t *build_baton,
+ apr_size_t max_len)
+{
+ svn_txdelta_op_t *op;
+ apr_size_t len = 0;
+
+ /* remove ops back to front */
+ while (build_baton->num_ops > 0)
+ {
+ op = &build_baton->ops[build_baton->num_ops-1];
+
+ /* we can't modify svn_txdelta_target ops -> stop there */
+ if (op->action_code == svn_txdelta_target)
+ break;
+
+ /* handle the case that we cannot remove the op entirely */
+ if (op->length + len > max_len)
+ {
+ /* truncate only insertions. Copies don't benefit
+ from being truncated. */
+ if (op->action_code == svn_txdelta_new)
+ {
+ build_baton->new_data->len -= max_len - len;
+ op->length -= max_len - len;
+ len = max_len;
+ }
+
+ break;
+ }
+
+ /* drop the op entirely */
+ if (op->action_code == svn_txdelta_new)
+ build_baton->new_data->len -= op->length;
+
+ len += op->length;
+ --build_baton->num_ops;
+ }
+
+ return len;
+}
+
/* Generic delta stream functions. */
@@ -363,6 +406,10 @@ txdelta_md5_digest(void *baton)
if (b->more)
return NULL;
+ /* If checksumming has not been activated, there will be no digest. */
+ if (b->context == NULL)
+ return NULL;
+
/* The checksum should be there. */
return b->checksum->digest;
}
@@ -421,10 +468,11 @@ svn_txdelta_run(svn_stream_t *source,
void
-svn_txdelta(svn_txdelta_stream_t **stream,
- svn_stream_t *source,
- svn_stream_t *target,
- apr_pool_t *pool)
+svn_txdelta2(svn_txdelta_stream_t **stream,
+ svn_stream_t *source,
+ svn_stream_t *target,
+ svn_boolean_t calculate_checksum,
+ apr_pool_t *pool)
{
struct txdelta_baton *b = apr_pcalloc(pool, sizeof(*b));
@@ -433,13 +481,24 @@ svn_txdelta(svn_txdelta_stream_t **stream,
b->more_source = TRUE;
b->more = TRUE;
b->buf = apr_palloc(pool, 2 * SVN_DELTA_WINDOW_SIZE);
- b->context = svn_checksum_ctx_create(svn_checksum_md5, pool);
+ b->context = calculate_checksum
+ ? svn_checksum_ctx_create(svn_checksum_md5, pool)
+ : NULL;
b->result_pool = pool;
*stream = svn_txdelta_stream_create(b, txdelta_next_window,
txdelta_md5_digest, pool);
}
+void
+svn_txdelta(svn_txdelta_stream_t **stream,
+ svn_stream_t *source,
+ svn_stream_t *target,
+ apr_pool_t *pool)
+{
+ svn_txdelta2(stream, source, target, TRUE, pool);
+}
+
/* Functions for implementing a "target push" delta. */
@@ -650,6 +709,7 @@ svn_txdelta_apply_instructions(svn_txdelta_window_t *window,
{
case svn_txdelta_source:
/* Copy from source area. */
+ assert(sbuf);
assert(op->offset + op->length <= window->sview_len);
fast_memcpy(tbuf + tpos, sbuf + op->offset, buf_len);
break;
@@ -742,7 +802,8 @@ apply_window(svn_txdelta_window_t *window, void *baton)
/* If the existing view overlaps with the new view, copy the
* overlap to the beginning of the new buffer. */
- if (ab->sbuf_offset + ab->sbuf_len > window->sview_offset)
+ if ( (apr_size_t)ab->sbuf_offset + ab->sbuf_len
+ > (apr_size_t)window->sview_offset)
{
apr_size_t start =
(apr_size_t)(window->sview_offset - ab->sbuf_offset);
@@ -862,29 +923,54 @@ svn_error_t *svn_txdelta_send_stream(svn_stream_t *stream,
unsigned char *digest,
apr_pool_t *pool)
{
- svn_txdelta_stream_t *txstream;
- svn_error_t *err;
+ svn_txdelta_window_t delta_window = { 0 };
+ svn_txdelta_op_t delta_op;
+ svn_string_t window_data;
+ char read_buf[SVN__STREAM_CHUNK_SIZE + 1];
+ svn_checksum_ctx_t *md5_checksum_ctx;
+
+ if (digest)
+ md5_checksum_ctx = svn_checksum_ctx_create(svn_checksum_md5, pool);
+
+ while (1)
+ {
+ apr_size_t read_len = SVN__STREAM_CHUNK_SIZE;
+
+ SVN_ERR(svn_stream_read(stream, read_buf, &read_len));
+ if (read_len == 0)
+ break;
+
+ window_data.data = read_buf;
+ window_data.len = read_len;
- /* ### this is a hack. we should simply read from the stream, construct
- ### some windows, and pass those to the handler. there isn't any reason
- ### to crank up a full "diff" algorithm just to copy a stream.
- ###
- ### will fix RSN. */
+ delta_op.action_code = svn_txdelta_new;
+ delta_op.offset = 0;
+ delta_op.length = read_len;
- /* Create a delta stream which converts an *empty* bytestream into the
- target bytestream. */
- svn_txdelta(&txstream, svn_stream_empty(pool), stream, pool);
- err = svn_txdelta_send_txstream(txstream, handler, handler_baton, pool);
+ delta_window.tview_len = read_len;
+ delta_window.num_ops = 1;
+ delta_window.ops = &delta_op;
+ delta_window.new_data = &window_data;
- if (digest && (! err))
+ SVN_ERR(handler(&delta_window, handler_baton));
+
+ if (digest)
+ SVN_ERR(svn_checksum_update(md5_checksum_ctx, read_buf, read_len));
+
+ if (read_len < SVN__STREAM_CHUNK_SIZE)
+ break;
+ }
+ SVN_ERR(handler(NULL, handler_baton));
+
+ if (digest)
{
- const unsigned char *result_md5;
- result_md5 = svn_txdelta_md5_digest(txstream);
- /* Since err is null, result_md5 "cannot" be null. */
- memcpy(digest, result_md5, APR_MD5_DIGESTSIZE);
+ svn_checksum_t *md5_checksum;
+
+ SVN_ERR(svn_checksum_final(&md5_checksum, md5_checksum_ctx, pool));
+ memcpy(digest, md5_checksum->digest, APR_MD5_DIGESTSIZE);
}
- return err;
+ return SVN_NO_ERROR;
}
svn_error_t *svn_txdelta_send_txstream(svn_txdelta_stream_t *txstream,
@@ -914,3 +1000,42 @@ svn_error_t *svn_txdelta_send_txstream(svn_txdelta_stream_t *txstream,
return SVN_NO_ERROR;
}
+
+svn_error_t *
+svn_txdelta_send_contents(const unsigned char *contents,
+ apr_size_t len,
+ svn_txdelta_window_handler_t handler,
+ void *handler_baton,
+ apr_pool_t *pool)
+{
+ svn_string_t new_data;
+ svn_txdelta_op_t op = { svn_txdelta_new, 0, 0 };
+ svn_txdelta_window_t window = { 0, 0, 0, 1, 0 };
+ window.ops = &op;
+ window.new_data = &new_data;
+
+ /* send CONTENT as a series of max-sized windows */
+ while (len > 0)
+ {
+ /* stuff next chunk into the window */
+ window.tview_len = len < SVN_DELTA_WINDOW_SIZE
+ ? len
+ : SVN_DELTA_WINDOW_SIZE;
+ op.length = window.tview_len;
+ new_data.len = window.tview_len;
+ new_data.data = (const char*)contents;
+
+ /* update remaining */
+ contents += window.tview_len;
+ len -= window.tview_len;
+
+ /* shove it at the handler */
+ SVN_ERR((*handler)(&window, handler_baton));
+ }
+
+ /* indicate end of stream */
+ SVN_ERR((*handler)(NULL, handler_baton));
+
+ return SVN_NO_ERROR;
+}
+
diff --git a/subversion/libsvn_delta/xdelta.c b/subversion/libsvn_delta/xdelta.c
index ea810e9..2075a51 100644
--- a/subversion/libsvn_delta/xdelta.c
+++ b/subversion/libsvn_delta/xdelta.c
@@ -27,10 +27,9 @@
#include <apr_general.h> /* for APR_INLINE */
#include <apr_hash.h>
+#include "svn_hash.h"
#include "svn_delta.h"
#include "delta.h"
-
-#include "private/svn_adler32.h"
/* This is pseudo-adler32. It is adler32 without the prime modulus.
The idea is borrowed from monotone, and is a translation of the C++
@@ -44,6 +43,10 @@
*/
#define MATCH_BLOCKSIZE 64
+/* "no" / "invalid" / "unused" value for positions within the delta windows
+ */
+#define NO_POSITION ((apr_uint32_t)-1)
+
/* Feed C_IN into the adler32 checksum and remove C_OUT at the same time.
* This function may (and will) only be called for characters that are
* MATCH_BLOCKSIZE positions apart.
@@ -63,7 +66,7 @@ adler32_replace(apr_uint32_t adler32, const char c_out, const char c_in)
return adler32 + adler32 * 0x10000;
}
-/* Calculate an peudo-adler32 checksum for MATCH_BLOCKSIZE bytes starting
+/* Calculate an pseudo-adler32 checksum for MATCH_BLOCKSIZE bytes starting
at DATA. Return the checksum value. */
static APR_INLINE apr_uint32_t
@@ -96,17 +99,27 @@ init_adler32(const char *data)
struct block
{
apr_uint32_t adlersum;
- apr_size_t pos;
+
+/* Even in 64 bit systems, store only 32 bit offsets in our hash table
+ (our delta window size much much smaller then 4GB).
+ That reduces the hash table size by 50% from 32to 16KB
+ and makes it easier to fit into the CPU's L1 cache. */
+ apr_uint32_t pos; /* NO_POSITION -> block is not used */
};
/* A hash table, using open addressing, of the blocks of the source. */
struct blocks
{
- /* The largest valid index of slots. */
- apr_size_t max;
+ /* The largest valid index of slots.
+ This value has an upper bound proportionate to the text delta
+ window size, so unless we dramatically increase the window size,
+ it's safe to make this a 32-bit value. In any case, it has to be
+ hte same width as the block position index, (struct
+ block).pos. */
+ apr_uint32_t max;
/* Source buffer that the positions in SLOTS refer to. */
const char* data;
- /* The vector of blocks. A pos value of (apr_size_t)-1 represents an unused
+ /* The vector of blocks. A pos value of NO_POSITION represents an unused
slot. */
struct block *slots;
};
@@ -114,7 +127,7 @@ struct blocks
/* Return a hash value calculated from the adler32 SUM, suitable for use with
our hash table. */
-static apr_size_t hash_func(apr_uint32_t sum)
+static apr_uint32_t hash_func(apr_uint32_t sum)
{
/* Since the adl32 checksum have a bad distribution for the 11th to 16th
bits when used for our small block size, we add some bits from the
@@ -126,12 +139,12 @@ static apr_size_t hash_func(apr_uint32_t sum)
data into the table BLOCKS. Ignore true duplicates, i.e. blocks with
actually the same content. */
static void
-add_block(struct blocks *blocks, apr_uint32_t adlersum, apr_size_t pos)
+add_block(struct blocks *blocks, apr_uint32_t adlersum, apr_uint32_t pos)
{
- apr_size_t h = hash_func(adlersum) & blocks->max;
+ apr_uint32_t h = hash_func(adlersum) & blocks->max;
/* This will terminate, since we know that we will not fill the table. */
- for (; blocks->slots[h].pos != (apr_size_t)-1; h = (h + 1) & blocks->max)
+ for (; blocks->slots[h].pos != NO_POSITION; h = (h + 1) & blocks->max)
if (blocks->slots[h].adlersum == adlersum)
if (memcmp(blocks->data + blocks->slots[h].pos, blocks->data + pos,
MATCH_BLOCKSIZE) == 0)
@@ -143,21 +156,21 @@ add_block(struct blocks *blocks, apr_uint32_t adlersum, apr_size_t pos)
/* Find a block in BLOCKS with the checksum ADLERSUM and matching the content
at DATA, returning its position in the source data. If there is no such
- block, return (apr_size_t)-1. */
-static apr_size_t
+ block, return NO_POSITION. */
+static apr_uint32_t
find_block(const struct blocks *blocks,
apr_uint32_t adlersum,
const char* data)
{
- apr_size_t h = hash_func(adlersum) & blocks->max;
+ apr_uint32_t h = hash_func(adlersum) & blocks->max;
- for (; blocks->slots[h].pos != (apr_size_t)-1; h = (h + 1) & blocks->max)
+ for (; blocks->slots[h].pos != NO_POSITION; h = (h + 1) & blocks->max)
if (blocks->slots[h].adlersum == adlersum)
if (memcmp(blocks->data + blocks->slots[h].pos, data,
MATCH_BLOCKSIZE) == 0)
return blocks->slots[h].pos;
- return (apr_size_t)-1;
+ return NO_POSITION;
}
/* Initialize the matches table from DATA of size DATALEN. This goes
@@ -169,17 +182,30 @@ init_blocks_table(const char *data,
struct blocks *blocks,
apr_pool_t *pool)
{
- apr_size_t i;
apr_size_t nblocks;
- apr_size_t nslots = 1;
+ apr_size_t wnslots = 1;
+ apr_uint32_t nslots;
+ apr_uint32_t i;
- /* Be pesimistic about the block count. */
+ /* Be pessimistic about the block count. */
nblocks = datalen / MATCH_BLOCKSIZE + 1;
/* Find nearest larger power of two. */
- while (nslots <= nblocks)
- nslots *= 2;
+ while (wnslots <= nblocks)
+ wnslots *= 2;
/* Double the number of slots to avoid a too high load. */
- nslots *= 2;
+ wnslots *= 2;
+ /* Narrow the number of slots to 32 bits, which is the size of the
+ block position index in the hash table.
+ Sanity check: On 64-bit platforms, apr_size_t is likely to be
+ larger than apr_uint32_t. Make sure that the number of slots
+ actually fits into blocks->max. It's safe to use a hard assert
+ here, because the largest possible value for nslots is
+ proportional to the text delta window size and is therefore much
+ smaller than the range of an apr_uint32_t. If we ever happen to
+ increase the window size too much, this assertion will get
+ triggered by the test suite. */
+ nslots = (apr_uint32_t) wnslots;
+ SVN_ERR_ASSERT_NO_RETURN(wnslots == nslots);
blocks->max = nslots - 1;
blocks->data = data;
blocks->slots = apr_palloc(pool, nslots * sizeof(*(blocks->slots)));
@@ -187,7 +213,7 @@ init_blocks_table(const char *data,
{
/* Avoid using an indeterminate value in the lookup. */
blocks->slots[i].adlersum = 0;
- blocks->slots[i].pos = (apr_size_t)-1;
+ blocks->slots[i].pos = NO_POSITION;
}
/* If there is an odd block at the end of the buffer, we will
@@ -226,10 +252,48 @@ match_length(const char *a, const char *b, apr_size_t max_len)
return pos;
}
+/* Return the number of bytes before A and B that don't differ. If no
+ * difference can be found in the first MAX_LEN characters, MAX_LEN will
+ * be returned. Please note that A-MAX_LEN and B-MAX_LEN must both be
+ * valid addresses.
+ */
+static apr_size_t
+reverse_match_length(const char *a, const char *b, apr_size_t max_len)
+{
+ apr_size_t pos = 0;
+
+#if SVN_UNALIGNED_ACCESS_IS_OK
+
+ /* Chunky processing is so much faster ...
+ *
+ * We can't make this work on architectures that require aligned access
+ * because A and B will probably have different alignment. So, skipping
+ * the first few chars until alignment is reached is not an option.
+ */
+ for (pos = sizeof(apr_size_t); pos <= max_len; pos += sizeof(apr_size_t))
+ if (*(const apr_size_t*)(a - pos) != *(const apr_size_t*)(b - pos))
+ break;
+
+ pos -= sizeof(apr_size_t);
+
+#endif
+
+ /* If we find a mismatch at -pos, pos-1 characters matched.
+ */
+ while (++pos <= max_len)
+ if (a[0-pos] != b[0-pos])
+ return pos - 1;
+
+ /* No mismatch found -> at least MAX_LEN matching chars.
+ */
+ return max_len;
+}
+
+
/* Try to find a match for the target data B in BLOCKS, and then
extend the match as long as data in A and B at the match position
continues to match. We set the position in A we ended up in (in
- case we extended it backwards) in APOSP and update the correspnding
+ case we extended it backwards) in APOSP and update the corresponding
position within B given in BPOSP. PENDING_INSERT_START sets the
lower limit to BPOSP.
Return number of matching bytes starting at ASOP. Return 0 if
@@ -252,7 +316,7 @@ find_match(const struct blocks *blocks,
apos = find_block(blocks, rolling, b + bpos);
/* See if we have a match. */
- if (apos == (apr_size_t)-1)
+ if (apos == NO_POSITION)
return 0;
/* Extend the match forward as far as possible */
@@ -278,6 +342,38 @@ find_match(const struct blocks *blocks,
return MATCH_BLOCKSIZE + delta;
}
+/* Utility for compute_delta() that compares the range B[START,BSIZE) with
+ * the range of similar size before A[ASIZE]. Create corresponding copy and
+ * insert operations.
+ *
+ * BUILD_BATON and POOL will be passed through from compute_delta().
+ */
+static void
+store_delta_trailer(svn_txdelta__ops_baton_t *build_baton,
+ const char *a,
+ apr_size_t asize,
+ const char *b,
+ apr_size_t bsize,
+ apr_size_t start,
+ apr_pool_t *pool)
+{
+ apr_size_t end_match;
+ apr_size_t max_len = asize > (bsize - start) ? bsize - start : asize;
+ if (max_len == 0)
+ return;
+
+ end_match = reverse_match_length(a + asize, b + bsize, max_len);
+ if (end_match <= 4)
+ end_match = 0;
+
+ if (bsize - start > end_match)
+ svn_txdelta__insert_op(build_baton, svn_txdelta_new,
+ start, bsize - start - end_match, b + start, pool);
+ if (end_match)
+ svn_txdelta__insert_op(build_baton, svn_txdelta_source,
+ asize - end_match, end_match, NULL, pool);
+}
+
/* Compute a delta from A to B using xdelta.
@@ -306,21 +402,33 @@ find_match(const struct blocks *blocks,
static void
compute_delta(svn_txdelta__ops_baton_t *build_baton,
const char *a,
- apr_uint32_t asize,
+ apr_size_t asize,
const char *b,
- apr_uint32_t bsize,
+ apr_size_t bsize,
apr_pool_t *pool)
{
struct blocks blocks;
apr_uint32_t rolling;
apr_size_t lo = 0, pending_insert_start = 0;
+ /* Optimization: directly compare window starts. If more than 4
+ * bytes match, we can immediately create a matching windows.
+ * Shorter sequences result in a net data increase. */
+ lo = match_length(a, b, asize > bsize ? bsize : asize);
+ if ((lo > 4) || (lo == bsize))
+ {
+ svn_txdelta__insert_op(build_baton, svn_txdelta_source,
+ 0, lo, NULL, pool);
+ pending_insert_start = lo;
+ }
+ else
+ lo = 0;
+
/* If the size of the target is smaller than the match blocksize, just
insert the entire target. */
- if (bsize < MATCH_BLOCKSIZE)
+ if ((bsize - lo < MATCH_BLOCKSIZE) || (asize < MATCH_BLOCKSIZE))
{
- svn_txdelta__insert_op(build_baton, svn_txdelta_new,
- 0, bsize, b, pool);
+ store_delta_trailer(build_baton, a, asize, b, bsize, lo, pool);
return;
}
@@ -328,7 +436,7 @@ compute_delta(svn_txdelta__ops_baton_t *build_baton,
init_blocks_table(a, asize, &blocks, pool);
/* Initialize our rolling checksum. */
- rolling = init_adler32(b);
+ rolling = init_adler32(b + lo);
while (lo < bsize)
{
apr_size_t matchlen = 0;
@@ -356,6 +464,19 @@ compute_delta(svn_txdelta__ops_baton_t *build_baton,
svn_txdelta__insert_op(build_baton, svn_txdelta_new,
0, lo - pending_insert_start,
b + pending_insert_start, pool);
+ else
+ {
+ /* the match borders on the previous op. Maybe, we found a
+ * match that is better than / overlapping the previous one. */
+ apr_size_t len = reverse_match_length(a + apos, b + lo, apos < lo ? apos : lo);
+ if (len > 0)
+ {
+ len = svn_txdelta__remove_copy(build_baton, len);
+ apos -= len;
+ matchlen += len;
+ lo -= len;
+ }
+ }
/* Reset the pending insert start to immediately after the
match. */
@@ -373,12 +494,7 @@ compute_delta(svn_txdelta__ops_baton_t *build_baton,
}
/* If we still have an insert pending at the end, throw it in. */
- if (lo - pending_insert_start > 0)
- {
- svn_txdelta__insert_op(build_baton, svn_txdelta_new,
- 0, lo - pending_insert_start,
- b + pending_insert_start, pool);
- }
+ store_delta_trailer(build_baton, a, asize, b, bsize, pending_insert_start, pool);
}
void
diff --git a/subversion/libsvn_diff/diff.h b/subversion/libsvn_diff/diff.h
index 08c79d8..51a84c6 100644
--- a/subversion/libsvn_diff/diff.h
+++ b/subversion/libsvn_diff/diff.h
@@ -184,5 +184,34 @@ svn_diff__normalize_buffer(char **tgt,
const char *buf,
const svn_diff_file_options_t *opts);
+/* Set *OUT_STR to a newline followed by a "\ No newline at end of file" line.
+ *
+ * The text will be encoded into HEADER_ENCODING.
+ */
+svn_error_t *
+svn_diff__unified_append_no_newline_msg(svn_stringbuf_t *stringbuf,
+ const char *header_encoding,
+ apr_pool_t *scratch_pool);
+
+/* Write a unidiff hunk header to OUTPUT_STREAM.
+ *
+ * The header will use HUNK_DELIMITER (which should usually be "@@") before
+ * and after the line-number ranges which are formed from OLD_START,
+ * OLD_LENGTH, NEW_START and NEW_LENGTH. If HUNK_EXTRA_CONTEXT is not NULL,
+ * it will be written after the final delimiter, with an intervening space.
+ *
+ * The text will be encoded into HEADER_ENCODING.
+ */
+svn_error_t *
+svn_diff__unified_write_hunk_header(svn_stream_t *output_stream,
+ const char *header_encoding,
+ const char *hunk_delimiter,
+ apr_off_t old_start,
+ apr_off_t old_length,
+ apr_off_t new_start,
+ apr_off_t new_length,
+ const char *hunk_extra_context,
+ apr_pool_t *scratch_pool);
+
#endif /* DIFF_H */
diff --git a/subversion/libsvn_diff/diff_file.c b/subversion/libsvn_diff/diff_file.c
index 79c575c..830552a 100644
--- a/subversion/libsvn_diff/diff_file.c
+++ b/subversion/libsvn_diff/diff_file.c
@@ -48,6 +48,7 @@
#include "private/svn_eol_private.h"
#include "private/svn_dep_compat.h"
#include "private/svn_adler32.h"
+#include "private/svn_diff_private.h"
/* A token, i.e. a line read from a file. */
typedef struct svn_diff__file_token_t
@@ -121,6 +122,9 @@ datasource_to_index(svn_diff_datasource_e datasource)
* whatsoever. If there is a number someone comes up with that has some
* argumentation, let's use that.
*/
+/* If you change this number, update test_norm_offset(),
+ * test_identical_suffix() and and test_token_compare() in diff-diff3-test.c.
+ */
#define CHUNK_SHIFT 17
#define CHUNK_SIZE (1 << CHUNK_SHIFT)
@@ -162,26 +166,39 @@ read_chunk(apr_file_t *file, const char *path,
static svn_error_t *
map_or_read_file(apr_file_t **file,
MMAP_T_PARAM(mm)
- char **buffer, apr_off_t *size,
+ char **buffer, apr_size_t *size_p,
const char *path, apr_pool_t *pool)
{
apr_finfo_t finfo;
apr_status_t rv;
+ apr_size_t size;
*buffer = NULL;
SVN_ERR(svn_io_file_open(file, path, APR_READ, APR_OS_DEFAULT, pool));
SVN_ERR(svn_io_file_info_get(&finfo, APR_FINFO_SIZE, *file, pool));
+ if (finfo.size > APR_SIZE_MAX)
+ {
+ return svn_error_createf(APR_ENOMEM, NULL,
+ _("File '%s' is too large to be read in "
+ "to memory"), path);
+ }
+
+ size = (apr_size_t) finfo.size;
#if APR_HAS_MMAP
- if (finfo.size > APR_MMAP_THRESHOLD)
+ if (size > APR_MMAP_THRESHOLD)
{
- rv = apr_mmap_create(mm, *file, 0, (apr_size_t) finfo.size,
- APR_MMAP_READ, pool);
+ rv = apr_mmap_create(mm, *file, 0, size, APR_MMAP_READ, pool);
if (rv == APR_SUCCESS)
{
*buffer = (*mm)->mm;
}
+ else
+ {
+ /* Clear *MM because output parameters are undefined on error. */
+ *mm = NULL;
+ }
/* On failure we just fall through and try reading the file into
* memory instead.
@@ -189,12 +206,11 @@ map_or_read_file(apr_file_t **file,
}
#endif /* APR_HAS_MMAP */
- if (*buffer == NULL && finfo.size > 0)
+ if (*buffer == NULL && size > 0)
{
- *buffer = apr_palloc(pool, (apr_size_t) finfo.size);
+ *buffer = apr_palloc(pool, size);
- SVN_ERR(svn_io_file_read_full2(*file, *buffer, (apr_size_t) finfo.size,
- NULL, NULL, pool));
+ SVN_ERR(svn_io_file_read_full2(*file, *buffer, size, NULL, NULL, pool));
/* Since we have the entire contents of the file we can
* close it now.
@@ -204,7 +220,7 @@ map_or_read_file(apr_file_t **file,
*file = NULL;
}
- *size = finfo.size;
+ *size_p = size;
return SVN_NO_ERROR;
}
@@ -340,30 +356,17 @@ is_one_at_eof(struct file_info file[], apr_size_t file_len)
/* Quickly determine whether there is a eol char in CHUNK.
* (mainly copy-n-paste from eol.c#svn_eol__find_eol_start).
*/
-#if SVN_UNALIGNED_ACCESS_IS_OK
-#if APR_SIZEOF_VOIDP == 8
-# define LOWER_7BITS_SET 0x7f7f7f7f7f7f7f7f
-# define BIT_7_SET 0x8080808080808080
-# define R_MASK 0x0a0a0a0a0a0a0a0a
-# define N_MASK 0x0d0d0d0d0d0d0d0d
-#else
-# define LOWER_7BITS_SET 0x7f7f7f7f
-# define BIT_7_SET 0x80808080
-# define R_MASK 0x0a0a0a0a
-# define N_MASK 0x0d0d0d0d
-#endif
-#endif
#if SVN_UNALIGNED_ACCESS_IS_OK
static svn_boolean_t contains_eol(apr_uintptr_t chunk)
{
- apr_uintptr_t r_test = chunk ^ R_MASK;
- apr_uintptr_t n_test = chunk ^ N_MASK;
+ apr_uintptr_t r_test = chunk ^ SVN__R_MASK;
+ apr_uintptr_t n_test = chunk ^ SVN__N_MASK;
- r_test |= (r_test & LOWER_7BITS_SET) + LOWER_7BITS_SET;
- n_test |= (n_test & LOWER_7BITS_SET) + LOWER_7BITS_SET;
+ r_test |= (r_test & SVN__LOWER_7BITS_SET) + SVN__LOWER_7BITS_SET;
+ n_test |= (n_test & SVN__LOWER_7BITS_SET) + SVN__LOWER_7BITS_SET;
- return (r_test & n_test & BIT_7_SET) != BIT_7_SET;
+ return (r_test & n_test & SVN__BIT_7_SET) != SVN__BIT_7_SET;
}
#endif
@@ -430,28 +433,35 @@ find_identical_prefix(svn_boolean_t *reached_one_eof, apr_off_t *prefix_lines,
}
is_match = TRUE;
- for (delta = 0; delta < max_delta && is_match; delta += sizeof(apr_uintptr_t))
+ for (delta = 0; delta < max_delta; delta += sizeof(apr_uintptr_t))
{
- apr_uintptr_t chunk = *(const apr_size_t *)(file[0].curp + delta);
+ apr_uintptr_t chunk = *(const apr_uintptr_t *)(file[0].curp + delta);
if (contains_eol(chunk))
break;
for (i = 1; i < file_len; i++)
- if (chunk != *(const apr_size_t *)(file[i].curp + delta))
+ if (chunk != *(const apr_uintptr_t *)(file[i].curp + delta))
{
is_match = FALSE;
- delta -= sizeof(apr_size_t);
break;
}
+
+ if (! is_match)
+ break;
}
- /* We either found a mismatch or an EOL at or shortly behind curp+delta
- * or we cannot proceed with chunky ops without exceeding endp.
- * In any way, everything up to curp + delta is equal and not an EOL.
- */
- for (i = 0; i < file_len; i++)
- file[i].curp += delta;
+ if (delta /* > 0*/)
+ {
+ /* We either found a mismatch or an EOL at or shortly behind curp+delta
+ * or we cannot proceed with chunky ops without exceeding endp.
+ * In any way, everything up to curp + delta is equal and not an EOL.
+ */
+ for (i = 0; i < file_len; i++)
+ file[i].curp += delta;
+ /* Skipped data without EOL markers, so last char was not a CR. */
+ had_cr = FALSE;
+ }
#endif
*reached_one_eof = is_one_at_eof(file, file_len);
@@ -508,6 +518,7 @@ find_identical_prefix(svn_boolean_t *reached_one_eof, apr_off_t *prefix_lines,
* The number 50 is more or less arbitrary, based on some real-world tests
* with big files (and then doubling the required number to be on the safe
* side). This has a negligible effect on the power of the optimization. */
+/* If you change this number, update test_identical_suffix() in diff-diff3-test.c */
#ifndef SUFFIX_LINES_TO_KEEP
#define SUFFIX_LINES_TO_KEEP 50
#endif
@@ -530,7 +541,6 @@ find_identical_suffix(apr_off_t *suffix_lines, struct file_info file[],
apr_off_t min_file_size;
int suffix_lines_to_keep = SUFFIX_LINES_TO_KEEP;
svn_boolean_t is_match;
- svn_boolean_t reached_prefix;
apr_off_t lines = 0;
svn_boolean_t had_cr;
svn_boolean_t had_nl;
@@ -546,6 +556,13 @@ find_identical_suffix(apr_off_t *suffix_lines, struct file_info file[],
file_for_suffix[i].chunk =
(int) offset_to_chunk(file_for_suffix[i].size); /* last chunk */
length[i] = offset_in_chunk(file_for_suffix[i].size);
+ if (length[i] == 0)
+ {
+ /* last chunk is an empty chunk -> start at next-to-last chunk */
+ file_for_suffix[i].chunk = file_for_suffix[i].chunk - 1;
+ length[i] = CHUNK_SIZE;
+ }
+
if (file_for_suffix[i].chunk == file[i].chunk)
{
/* Prefix ended in last chunk, so we can reuse the prefix buffer */
@@ -592,9 +609,10 @@ find_identical_suffix(apr_off_t *suffix_lines, struct file_info file[],
had_nl = FALSE;
while (is_match)
{
+ svn_boolean_t reached_prefix;
+#if SVN_UNALIGNED_ACCESS_IS_OK
/* Initialize the minimum pointer positions. */
const char *min_curp[4];
-#if SVN_UNALIGNED_ACCESS_IS_OK
svn_boolean_t can_read_word;
#endif /* SVN_UNALIGNED_ACCESS_IS_OK */
@@ -617,46 +635,61 @@ find_identical_suffix(apr_off_t *suffix_lines, struct file_info file[],
DECREMENT_POINTERS(file_for_suffix, file_len, pool);
-
- min_curp[0] = file_for_suffix[0].chunk == suffix_min_chunk0
- ? file_for_suffix[0].buffer + suffix_min_offset0 + 1
- : file_for_suffix[0].buffer + 1;
- for (i = 1; i < file_len; i++)
- min_curp[i] = file_for_suffix[i].buffer + 1;
-
#if SVN_UNALIGNED_ACCESS_IS_OK
+ for (i = 0; i < file_len; i++)
+ min_curp[i] = file_for_suffix[i].buffer;
+
+ /* If we are in the same chunk that contains the last part of the common
+ prefix, use the min_curp[0] pointer to make sure we don't get a
+ suffix that overlaps the already determined common prefix. */
+ if (file_for_suffix[0].chunk == suffix_min_chunk0)
+ min_curp[0] += suffix_min_offset0;
/* Scan quickly by reading with machine-word granularity. */
for (i = 0, can_read_word = TRUE; i < file_len; i++)
can_read_word = can_read_word
- && ( file_for_suffix[i].curp - sizeof(apr_uintptr_t)
- >= min_curp[i]);
- if (can_read_word)
+ && ( (file_for_suffix[i].curp + 1
+ - sizeof(apr_uintptr_t))
+ > min_curp[i]);
+ while (can_read_word)
{
- do
- {
- apr_uintptr_t chunk;
- for (i = 0; i < file_len; i++)
- file_for_suffix[i].curp -= sizeof(apr_uintptr_t);
+ apr_uintptr_t chunk;
- chunk = *(const apr_uintptr_t *)(file_for_suffix[0].curp + 1);
- if (contains_eol(chunk))
- break;
+ /* For each file curp is positioned at the current byte, but we
+ want to examine the current byte and the ones before the current
+ location as one machine word. */
+
+ chunk = *(const apr_uintptr_t *)(file_for_suffix[0].curp + 1
+ - sizeof(apr_uintptr_t));
+ if (contains_eol(chunk))
+ break;
+
+ for (i = 1, is_match = TRUE; i < file_len; i++)
+ is_match = is_match
+ && ( chunk
+ == *(const apr_uintptr_t *)
+ (file_for_suffix[i].curp + 1
+ - sizeof(apr_uintptr_t)));
+
+ if (! is_match)
+ break;
+
+ for (i = 0; i < file_len; i++)
+ {
+ file_for_suffix[i].curp -= sizeof(apr_uintptr_t);
+ can_read_word = can_read_word
+ && ( (file_for_suffix[i].curp + 1
+ - sizeof(apr_uintptr_t))
+ > min_curp[i]);
+ }
- for (i = 0, can_read_word = TRUE; i < file_len; i++)
- can_read_word = can_read_word
- && ( file_for_suffix[i].curp - sizeof(apr_uintptr_t)
- >= min_curp[i]);
- for (i = 1, is_match = TRUE; i < file_len; i++)
- is_match = is_match
- && ( chunk
- == *(const apr_uintptr_t *)(file_for_suffix[i].curp + 1));
- } while (can_read_word && is_match);
-
- for (i = 0; i < file_len; i++)
- file_for_suffix[i].curp += sizeof(apr_uintptr_t);
+ /* We skipped some bytes, so there are no closing EOLs */
+ had_nl = FALSE;
+ had_cr = FALSE;
}
+ /* The > min_curp[i] check leaves at least one final byte for checking
+ in the non block optimized case below. */
#endif
reached_prefix = file_for_suffix[0].chunk == suffix_min_chunk0
@@ -665,7 +698,8 @@ find_identical_suffix(apr_off_t *suffix_lines, struct file_info file[],
if (reached_prefix || is_one_at_bof(file_for_suffix, file_len))
break;
- for (i = 1, is_match = TRUE; i < file_len; i++)
+ is_match = TRUE;
+ for (i = 1; i < file_len; i++)
is_match = is_match
&& *file_for_suffix[0].curp == *file_for_suffix[i].curp;
}
@@ -747,7 +781,9 @@ datasources_open(void *baton,
struct file_info files[4];
apr_finfo_t finfo[4];
apr_off_t length[4];
+#ifndef SVN_DISABLE_PREFIX_SUFFIX_SCANNING
svn_boolean_t reached_one_eof;
+#endif
apr_size_t i;
/* Make sure prefix_lines and suffix_lines are set correctly, even if we
@@ -841,17 +877,24 @@ datasource_get_next_token(apr_uint32_t *hash, void **token, void *baton,
last_chunk = offset_to_chunk(file->size);
- if (curp == endp
- && last_chunk == file->chunk)
+ /* Are we already at the end of a chunk? */
+ if (curp == endp)
{
- return SVN_NO_ERROR;
+ /* Are we at EOF */
+ if (last_chunk == file->chunk)
+ return SVN_NO_ERROR; /* EOF */
+
+ /* Or right before an identical suffix in the next chunk? */
+ if (file->chunk + 1 == file->suffix_start_chunk
+ && file->suffix_offset_in_chunk == 0)
+ return SVN_NO_ERROR;
}
/* Stop when we encounter the identical suffix. If suffix scanning was not
* performed, suffix_start_chunk will be -1, so this condition will never
* be true. */
if (file->chunk == file->suffix_start_chunk
- && curp - file->buffer == file->suffix_offset_in_chunk)
+ && (curp - file->buffer) == file->suffix_offset_in_chunk)
return SVN_NO_ERROR;
/* Allocate a new token, or fetch one from the "reusable tokens" list. */
@@ -868,6 +911,7 @@ datasource_get_next_token(apr_uint32_t *hash, void **token, void *baton,
file_token->datasource = datasource;
file_token->offset = chunk_to_offset(file->chunk)
+ (curp - file->buffer);
+ file_token->norm_offset = file_token->offset;
file_token->raw_length = 0;
file_token->length = 0;
@@ -896,11 +940,21 @@ datasource_get_next_token(apr_uint32_t *hash, void **token, void *baton,
length = endp - curp;
file_token->raw_length += length;
- svn_diff__normalize_buffer(&curp, &length,
- &file->normalize_state,
- curp, file_baton->options);
- file_token->length += length;
- h = svn__adler32(h, curp, length);
+ {
+ char *c = curp;
+
+ svn_diff__normalize_buffer(&c, &length,
+ &file->normalize_state,
+ curp, file_baton->options);
+ if (file_token->length == 0)
+ {
+ /* When we are reading the first part of the token, move the
+ normalized offset past leading ignored characters, if any. */
+ file_token->norm_offset += (c - curp);
+ }
+ file_token->length += length;
+ h = svn__adler32(h, c, length);
+ }
curp = endp = file->buffer;
file->chunk++;
@@ -909,6 +963,14 @@ datasource_get_next_token(apr_uint32_t *hash, void **token, void *baton,
endp += length;
file->endp = endp;
+ /* Issue #4283: Normally we should have checked for reaching the skipped
+ suffix here, but because we assume that a suffix always starts on a
+ line and token boundary we rely on catching the suffix earlier in this
+ function.
+
+ When changing things here, make sure the whitespace settings are
+ applied, or we mught not reach the exact suffix boundary as token
+ boundary. */
SVN_ERR(read_chunk(file->file, file->path,
curp, length,
chunk_to_offset(file->chunk),
@@ -939,11 +1001,12 @@ datasource_get_next_token(apr_uint32_t *hash, void **token, void *baton,
svn_diff__normalize_buffer(&c, &length,
&file->normalize_state,
curp, file_baton->options);
-
- file_token->norm_offset = file_token->offset;
if (file_token->length == 0)
- /* move past leading ignored characters */
- file_token->norm_offset += (c - curp);
+ {
+ /* When we are reading the first part of the token, move the
+ normalized offset past leading ignored characters, if any. */
+ file_token->norm_offset += (c - curp);
+ }
file_token->length += length;
@@ -1015,8 +1078,15 @@ token_compare(void *baton, void *token1, void *token2, int *compare)
}
else
{
+ apr_off_t skipped;
+
length[i] = 0;
- raw_length[i] = file_token[i]->raw_length;
+
+ /* When we skipped the first part of the token via the whitespace
+ normalization we must reduce the raw length of the token */
+ skipped = (file_token[i]->norm_offset - file_token[i]->offset);
+
+ raw_length[i] = file_token[i]->raw_length - skipped;
}
}
@@ -1052,6 +1122,8 @@ token_compare(void *baton, void *token1, void *token2, int *compare)
so, overwriting it isn't a problem */
svn_diff__normalize_buffer(&bufp[i], &length[i], &state[i],
bufp[i], file_baton->options);
+
+ /* assert(length[i] == file_token[i]->length); */
}
}
@@ -1505,14 +1577,8 @@ output_unified_line(svn_diff__file_output_baton_t *baton,
if (bytes_processed && (type != svn_diff__file_output_unified_skip)
&& ! had_cr)
{
- const char *out_str;
- SVN_ERR(svn_utf_cstring_from_utf8_ex2
- (&out_str,
- apr_psprintf(baton->pool,
- APR_EOL_STR "\\ %s" APR_EOL_STR,
- _("No newline at end of file")),
- baton->header_encoding, baton->pool));
- svn_stringbuf_appendcstr(baton->hunk, out_str);
+ SVN_ERR(svn_diff__unified_append_no_newline_msg(
+ baton->hunk, baton->header_encoding, baton->pool));
}
baton->length[idx] = 0;
@@ -1521,12 +1587,26 @@ output_unified_line(svn_diff__file_output_baton_t *baton,
return SVN_NO_ERROR;
}
+static APR_INLINE svn_error_t *
+output_unified_diff_range(svn_diff__file_output_baton_t *output_baton,
+ int source,
+ svn_diff__file_output_unified_type_e type,
+ apr_off_t until)
+{
+ while (output_baton->current_line[source] < until)
+ {
+ SVN_ERR(output_unified_line(output_baton, type, source));
+ }
+ return SVN_NO_ERROR;
+}
+
static svn_error_t *
output_unified_flush_hunk(svn_diff__file_output_baton_t *baton)
{
apr_off_t target_line;
apr_size_t hunk_len;
- int i;
+ apr_off_t old_start;
+ apr_off_t new_start;
if (svn_stringbuf_isempty(baton->hunk))
{
@@ -1538,55 +1618,27 @@ output_unified_flush_hunk(svn_diff__file_output_baton_t *baton)
+ SVN_DIFF__UNIFIED_CONTEXT_SIZE;
/* Add trailing context to the hunk */
- while (baton->current_line[0] < target_line)
- {
- SVN_ERR(output_unified_line
- (baton, svn_diff__file_output_unified_context, 0));
- }
+ SVN_ERR(output_unified_diff_range(baton, 0 /* original */,
+ svn_diff__file_output_unified_context,
+ target_line));
+
+ old_start = baton->hunk_start[0];
+ new_start = baton->hunk_start[1];
/* If the file is non-empty, convert the line indexes from
zero based to one based */
- for (i = 0; i < 2; i++)
- {
- if (baton->hunk_length[i] > 0)
- baton->hunk_start[i]++;
- }
-
- /* Output the hunk header. If the hunk length is 1, the file is a one line
- file. In this case, surpress the number of lines in the hunk (it is
- 1 implicitly)
- */
- SVN_ERR(svn_stream_printf_from_utf8(baton->output_stream,
- baton->header_encoding,
- baton->pool,
- "@@ -%" APR_OFF_T_FMT,
- baton->hunk_start[0]));
- if (baton->hunk_length[0] != 1)
- {
- SVN_ERR(svn_stream_printf_from_utf8(baton->output_stream,
- baton->header_encoding,
- baton->pool, ",%" APR_OFF_T_FMT,
- baton->hunk_length[0]));
- }
-
- SVN_ERR(svn_stream_printf_from_utf8(baton->output_stream,
- baton->header_encoding,
- baton->pool, " +%" APR_OFF_T_FMT,
- baton->hunk_start[1]));
- if (baton->hunk_length[1] != 1)
- {
- SVN_ERR(svn_stream_printf_from_utf8(baton->output_stream,
- baton->header_encoding,
- baton->pool, ",%" APR_OFF_T_FMT,
- baton->hunk_length[1]));
- }
-
- SVN_ERR(svn_stream_printf_from_utf8(baton->output_stream,
- baton->header_encoding,
- baton->pool, " @@%s%s" APR_EOL_STR,
- baton->hunk_extra_context[0]
- ? " " : "",
- baton->hunk_extra_context));
+ if (baton->hunk_length[0])
+ old_start++;
+ if (baton->hunk_length[1])
+ new_start++;
+
+ /* Write the hunk header */
+ SVN_ERR(svn_diff__unified_write_hunk_header(
+ baton->output_stream, baton->header_encoding, "@@",
+ old_start, baton->hunk_length[0],
+ new_start, baton->hunk_length[1],
+ baton->hunk_extra_context,
+ baton->pool));
/* Output the hunk content */
hunk_len = baton->hunk->len;
@@ -1596,6 +1648,8 @@ output_unified_flush_hunk(svn_diff__file_output_baton_t *baton)
/* Prepare for the next hunk */
baton->hunk_length[0] = 0;
baton->hunk_length[1] = 0;
+ baton->hunk_start[0] = 0;
+ baton->hunk_start[1] = 0;
svn_stringbuf_setempty(baton->hunk);
return SVN_NO_ERROR;
@@ -1608,96 +1662,121 @@ output_unified_diff_modified(void *baton,
apr_off_t latest_start, apr_off_t latest_length)
{
svn_diff__file_output_baton_t *output_baton = baton;
- apr_off_t target_line[2];
- int i;
+ apr_off_t context_prefix_length;
+ apr_off_t prev_context_end;
+ svn_boolean_t init_hunk = FALSE;
- target_line[0] = original_start >= SVN_DIFF__UNIFIED_CONTEXT_SIZE
- ? original_start - SVN_DIFF__UNIFIED_CONTEXT_SIZE : 0;
- target_line[1] = modified_start;
+ if (original_start > SVN_DIFF__UNIFIED_CONTEXT_SIZE)
+ context_prefix_length = SVN_DIFF__UNIFIED_CONTEXT_SIZE;
+ else
+ context_prefix_length = original_start;
- /* If the changed ranges are far enough apart (no overlapping or connecting
- context), flush the current hunk, initialize the next hunk and skip the
- lines not in context. Also do this when this is the first hunk.
- */
- if (output_baton->current_line[0] < target_line[0]
- && (output_baton->hunk_start[0] + output_baton->hunk_length[0]
- + SVN_DIFF__UNIFIED_CONTEXT_SIZE < target_line[0]
- || output_baton->hunk_length[0] == 0))
+ /* Calculate where the previous hunk will end if we would write it now
+ (including the necessary context at the end) */
+ if (output_baton->hunk_length[0] > 0 || output_baton->hunk_length[1] > 0)
{
- SVN_ERR(output_unified_flush_hunk(output_baton));
-
- output_baton->hunk_start[0] = target_line[0];
- output_baton->hunk_start[1] = target_line[1] + target_line[0]
- - original_start;
-
- /* Skip lines until we are at the beginning of the context we want to
- display */
- while (output_baton->current_line[0] < target_line[0])
- {
- SVN_ERR(output_unified_line(output_baton,
- svn_diff__file_output_unified_skip, 0));
- }
-
- if (output_baton->show_c_function)
- {
- int p;
- const char *invalid_character;
-
- /* Save the extra context for later use.
- * Note that the last byte of the hunk_extra_context array is never
- * touched after it is zero-initialized, so the array is always
- * 0-terminated. */
- strncpy(output_baton->hunk_extra_context,
- output_baton->extra_context->data,
- SVN_DIFF__EXTRA_CONTEXT_LENGTH);
- /* Trim whitespace at the end, most notably to get rid of any
- * newline characters. */
- p = strlen(output_baton->hunk_extra_context);
- while (p > 0
- && svn_ctype_isspace(output_baton->hunk_extra_context[p - 1]))
- {
- output_baton->hunk_extra_context[--p] = '\0';
- }
- invalid_character =
- svn_utf__last_valid(output_baton->hunk_extra_context,
- SVN_DIFF__EXTRA_CONTEXT_LENGTH);
- for (p = invalid_character - output_baton->hunk_extra_context;
- p < SVN_DIFF__EXTRA_CONTEXT_LENGTH; p++)
- {
- output_baton->hunk_extra_context[p] = '\0';
- }
- }
+ prev_context_end = output_baton->hunk_start[0]
+ + output_baton->hunk_length[0]
+ + SVN_DIFF__UNIFIED_CONTEXT_SIZE;
}
-
- /* Skip lines until we are at the start of the changed range */
- while (output_baton->current_line[1] < target_line[1])
+ else
{
- SVN_ERR(output_unified_line(output_baton,
- svn_diff__file_output_unified_skip, 1));
+ prev_context_end = -1;
+
+ if (output_baton->hunk_start[0] == 0
+ && (original_length > 0 || modified_length > 0))
+ init_hunk = TRUE;
}
- /* Output the context preceding the changed range */
- while (output_baton->current_line[0] < original_start)
+ /* If the changed range is far enough from the previous range, flush the current
+ hunk. */
+ {
+ apr_off_t new_hunk_start = (original_start - context_prefix_length);
+
+ if (output_baton->current_line[0] < new_hunk_start
+ && prev_context_end <= new_hunk_start)
+ {
+ SVN_ERR(output_unified_flush_hunk(output_baton));
+ init_hunk = TRUE;
+ }
+ else if (output_baton->hunk_length[0] > 0
+ || output_baton->hunk_length[1] > 0)
+ {
+ /* We extend the current hunk */
+
+
+ /* Original: Output the context preceding the changed range */
+ SVN_ERR(output_unified_diff_range(output_baton, 0 /* original */,
+ svn_diff__file_output_unified_context,
+ original_start));
+ }
+ }
+
+ /* Original: Skip lines until we are at the beginning of the context we want
+ to display */
+ SVN_ERR(output_unified_diff_range(output_baton, 0 /* original */,
+ svn_diff__file_output_unified_skip,
+ original_start - context_prefix_length));
+
+ /* Note that the above skip stores data for the show_c_function support below */
+
+ if (init_hunk)
{
- SVN_ERR(output_unified_line(output_baton,
- svn_diff__file_output_unified_context, 0));
- }
+ SVN_ERR_ASSERT(output_baton->hunk_length[0] == 0
+ && output_baton->hunk_length[1] == 0);
- target_line[0] = original_start + original_length;
- target_line[1] = modified_start + modified_length;
+ output_baton->hunk_start[0] = original_start - context_prefix_length;
+ output_baton->hunk_start[1] = modified_start - context_prefix_length;
+ }
- /* Output the changed range */
- for (i = 0; i < 2; i++)
+ if (init_hunk && output_baton->show_c_function)
{
- while (output_baton->current_line[i] < target_line[i])
+ apr_size_t p;
+ const char *invalid_character;
+
+ /* Save the extra context for later use.
+ * Note that the last byte of the hunk_extra_context array is never
+ * touched after it is zero-initialized, so the array is always
+ * 0-terminated. */
+ strncpy(output_baton->hunk_extra_context,
+ output_baton->extra_context->data,
+ SVN_DIFF__EXTRA_CONTEXT_LENGTH);
+ /* Trim whitespace at the end, most notably to get rid of any
+ * newline characters. */
+ p = strlen(output_baton->hunk_extra_context);
+ while (p > 0
+ && svn_ctype_isspace(output_baton->hunk_extra_context[p - 1]))
{
- SVN_ERR(output_unified_line
- (output_baton,
- i == 0 ? svn_diff__file_output_unified_delete
- : svn_diff__file_output_unified_insert, i));
+ output_baton->hunk_extra_context[--p] = '\0';
+ }
+ invalid_character =
+ svn_utf__last_valid(output_baton->hunk_extra_context,
+ SVN_DIFF__EXTRA_CONTEXT_LENGTH);
+ for (p = invalid_character - output_baton->hunk_extra_context;
+ p < SVN_DIFF__EXTRA_CONTEXT_LENGTH; p++)
+ {
+ output_baton->hunk_extra_context[p] = '\0';
}
}
+ /* Modified: Skip lines until we are at the start of the changed range */
+ SVN_ERR(output_unified_diff_range(output_baton, 1 /* modified */,
+ svn_diff__file_output_unified_skip,
+ modified_start));
+
+ /* Original: Output the context preceding the changed range */
+ SVN_ERR(output_unified_diff_range(output_baton, 0 /* original */,
+ svn_diff__file_output_unified_context,
+ original_start));
+
+ /* Both: Output the changed range */
+ SVN_ERR(output_unified_diff_range(output_baton, 0 /* original */,
+ svn_diff__file_output_unified_delete,
+ original_start + original_length));
+ SVN_ERR(output_unified_diff_range(output_baton, 1 /* modified */,
+ svn_diff__file_output_unified_insert,
+ modified_start + modified_length));
+
return SVN_NO_ERROR;
}
@@ -1747,11 +1826,9 @@ svn_diff_file_output_unified3(svn_stream_t *output_stream,
svn_boolean_t show_c_function,
apr_pool_t *pool)
{
- svn_diff__file_output_baton_t baton;
-
if (svn_diff_contains_diffs(diff))
{
- const char **c;
+ svn_diff__file_output_baton_t baton;
int i;
memset(&baton, 0, sizeof(baton));
@@ -1760,17 +1837,18 @@ svn_diff_file_output_unified3(svn_stream_t *output_stream,
baton.header_encoding = header_encoding;
baton.path[0] = original_path;
baton.path[1] = modified_path;
- baton.hunk = svn_stringbuf_create("", pool);
+ baton.hunk = svn_stringbuf_create_empty(pool);
baton.show_c_function = show_c_function;
- baton.extra_context = svn_stringbuf_create("", pool);
- baton.extra_skip_match = apr_array_make(pool, 3, sizeof(char **));
+ baton.extra_context = svn_stringbuf_create_empty(pool);
- c = apr_array_push(baton.extra_skip_match);
- *c = "public:*";
- c = apr_array_push(baton.extra_skip_match);
- *c = "private:*";
- c = apr_array_push(baton.extra_skip_match);
- *c = "protected:*";
+ if (show_c_function)
+ {
+ baton.extra_skip_match = apr_array_make(pool, 3, sizeof(char **));
+
+ APR_ARRAY_PUSH(baton.extra_skip_match, const char *) = "public:*";
+ APR_ARRAY_PUSH(baton.extra_skip_match, const char *) = "private:*";
+ APR_ARRAY_PUSH(baton.extra_skip_match, const char *) = "protected:*";
+ }
SVN_ERR(svn_utf_cstring_from_utf8_ex2(&baton.context_str, " ",
header_encoding, pool));
@@ -1794,7 +1872,7 @@ svn_diff_file_output_unified3(svn_stream_t *output_stream,
else
return svn_error_createf(
SVN_ERR_BAD_RELATIVE_PATH, NULL,
- _("Path '%s' must be an immediate child of "
+ _("Path '%s' must be inside "
"the directory '%s'"),
svn_dirent_local_style(original_path, pool),
svn_dirent_local_style(relative_to_dir,
@@ -1810,7 +1888,7 @@ svn_diff_file_output_unified3(svn_stream_t *output_stream,
else
return svn_error_createf(
SVN_ERR_BAD_RELATIVE_PATH, NULL,
- _("Path '%s' must be an immediate child of "
+ _("Path '%s' must be inside "
"the directory '%s'"),
svn_dirent_local_style(modified_path, pool),
svn_dirent_local_style(relative_to_dir,
@@ -1826,20 +1904,19 @@ svn_diff_file_output_unified3(svn_stream_t *output_stream,
if (original_header == NULL)
{
- SVN_ERR(output_unified_default_hdr
- (&original_header, original_path, pool));
+ SVN_ERR(output_unified_default_hdr(&original_header, original_path,
+ pool));
}
if (modified_header == NULL)
{
- SVN_ERR(output_unified_default_hdr
- (&modified_header, modified_path, pool));
+ SVN_ERR(output_unified_default_hdr(&modified_header, modified_path,
+ pool));
}
- SVN_ERR(svn_stream_printf_from_utf8(output_stream, header_encoding, pool,
- "--- %s" APR_EOL_STR
- "+++ %s" APR_EOL_STR,
- original_header, modified_header));
+ SVN_ERR(svn_diff__unidiff_write_header(output_stream, header_encoding,
+ original_header, modified_header,
+ pool));
SVN_ERR(svn_diff_output(diff, &baton,
&svn_diff__file_output_unified_vtable));
@@ -1924,7 +2001,7 @@ flush_context_saver(context_saver_t *cs,
int i;
for (i = 0; i < SVN_DIFF__UNIFIED_CONTEXT_SIZE; i++)
{
- int slot = (i + cs->next_slot) % SVN_DIFF__UNIFIED_CONTEXT_SIZE;
+ apr_size_t slot = (i + cs->next_slot) % SVN_DIFF__UNIFIED_CONTEXT_SIZE;
if (cs->data[slot])
{
apr_size_t len = cs->len[slot];
@@ -2047,8 +2124,7 @@ output_line(svn_diff3__file_output_baton_t *baton,
static svn_error_t *
output_marker_eol(svn_diff3__file_output_baton_t *btn)
{
- apr_size_t len = strlen(btn->marker_eol);
- return svn_stream_write(btn->output_stream, btn->marker_eol, &len);
+ return svn_stream_puts(btn->output_stream, btn->marker_eol);
}
static svn_error_t *
@@ -2131,7 +2207,7 @@ output_conflict_with_context(svn_diff3__file_output_baton_t *btn,
if (btn->output_stream == btn->context_saver->stream)
{
if (btn->context_saver->total_written > SVN_DIFF__UNIFIED_CONTEXT_SIZE)
- SVN_ERR(svn_stream_printf(btn->real_output_stream, btn->pool, "@@\n"));
+ SVN_ERR(svn_stream_puts(btn->real_output_stream, "@@\n"));
SVN_ERR(flush_context_saver(btn->context_saver, btn->real_output_stream));
}
@@ -2183,7 +2259,6 @@ output_conflict(void *baton,
svn_diff_t *diff)
{
svn_diff3__file_output_baton_t *file_baton = baton;
- apr_size_t len;
svn_diff_conflict_display_style_t style = file_baton->conflict_style;
@@ -2205,33 +2280,28 @@ output_conflict(void *baton,
if (style == svn_diff_conflict_display_modified_latest ||
style == svn_diff_conflict_display_modified_original_latest)
{
- len = strlen(file_baton->conflict_modified);
- SVN_ERR(svn_stream_write(file_baton->output_stream,
- file_baton->conflict_modified,
- &len));
+ SVN_ERR(svn_stream_puts(file_baton->output_stream,
+ file_baton->conflict_modified));
SVN_ERR(output_marker_eol(file_baton));
SVN_ERR(output_hunk(baton, 1, modified_start, modified_length));
if (style == svn_diff_conflict_display_modified_original_latest)
{
- len = strlen(file_baton->conflict_original);
- SVN_ERR(svn_stream_write(file_baton->output_stream,
- file_baton->conflict_original, &len));
+ SVN_ERR(svn_stream_puts(file_baton->output_stream,
+ file_baton->conflict_original));
SVN_ERR(output_marker_eol(file_baton));
SVN_ERR(output_hunk(baton, 0, original_start, original_length));
}
- len = strlen(file_baton->conflict_separator);
- SVN_ERR(svn_stream_write(file_baton->output_stream,
- file_baton->conflict_separator, &len));
+ SVN_ERR(svn_stream_puts(file_baton->output_stream,
+ file_baton->conflict_separator));
SVN_ERR(output_marker_eol(file_baton));
SVN_ERR(output_hunk(baton, 2, latest_start, latest_length));
- len = strlen(file_baton->conflict_latest);
- SVN_ERR(svn_stream_write(file_baton->output_stream,
- file_baton->conflict_latest, &len));
+ SVN_ERR(svn_stream_puts(file_baton->output_stream,
+ file_baton->conflict_latest));
SVN_ERR(output_marker_eol(file_baton));
}
else if (style == svn_diff_conflict_display_modified)
@@ -2259,7 +2329,6 @@ svn_diff_file_output_merge2(svn_stream_t *output_stream,
{
svn_diff3__file_output_baton_t baton;
apr_file_t *file[3];
- apr_off_t size;
int idx;
#if APR_HAS_MMAP
apr_mmap_t *mm[3] = { 0 };
@@ -2303,6 +2372,8 @@ svn_diff_file_output_merge2(svn_stream_t *output_stream,
for (idx = 0; idx < 3; idx++)
{
+ apr_size_t size;
+
SVN_ERR(map_or_read_file(&file[idx],
MMAP_T_ARG(mm[idx])
&baton.buffer[idx], &size,
diff --git a/subversion/libsvn_diff/diff_memory.c b/subversion/libsvn_diff/diff_memory.c
index 91c197a..00f4c7f 100644
--- a/subversion/libsvn_diff/diff_memory.c
+++ b/subversion/libsvn_diff/diff_memory.c
@@ -27,6 +27,8 @@
#include <apr_want.h>
#include <apr_tables.h>
+#include <assert.h>
+
#include "svn_diff.h"
#include "svn_pools.h"
#include "svn_types.h"
@@ -35,6 +37,7 @@
#include "diff.h"
#include "svn_private_config.h"
#include "private/svn_adler32.h"
+#include "private/svn_diff_private.h"
typedef struct source_tokens_t
{
@@ -123,7 +126,7 @@ datasource_get_next_token(apr_uint32_t *hash, void **token, void *baton,
diff_mem_baton_t *mem_baton = baton;
source_tokens_t *src = &(mem_baton->sources[datasource_to_index(datasource)]);
- if (src->tokens->nelts > src->next_token)
+ if ((apr_size_t)src->tokens->nelts > src->next_token)
{
/* There are actually tokens to be returned */
char *buf = mem_baton->normalization_buf[0];
@@ -341,7 +344,8 @@ typedef enum unified_output_e
{
unified_output_context = 0,
unified_output_delete,
- unified_output_insert
+ unified_output_insert,
+ unified_output_skip
} unified_output_e;
/* Baton for generating unified diffs */
@@ -350,7 +354,7 @@ typedef struct unified_output_baton_t
svn_stream_t *output_stream;
const char *header_encoding;
source_tokens_t sources[2]; /* 0 == original; 1 == modified */
- apr_off_t next_token; /* next token in original source */
+ apr_off_t current_token[2]; /* current token per source */
/* Cached markers, in header_encoding,
indexed using unified_output_e */
@@ -363,6 +367,9 @@ typedef struct unified_output_baton_t
/* The delimiters of the hunk header, '@@' for text hunks and '##' for
* property hunks. */
const char *hunk_delimiter;
+ /* The string to print after a line that does not end with a newline.
+ * It must start with a '\'. Typically "\ No newline at end of file". */
+ const char *no_newline_string;
/* Pool for allocation of temporary memory in the callbacks
Should be cleared on entry of each iteration of a callback */
@@ -378,31 +385,28 @@ static svn_error_t *
output_unified_token_range(output_baton_t *btn,
int tokens,
unified_output_e type,
- apr_off_t first,
- apr_off_t past_last)
+ apr_off_t until)
{
source_tokens_t *source = &btn->sources[tokens];
- apr_off_t idx;
-
- past_last = (past_last > source->tokens->nelts)
- ? source->tokens->nelts : past_last;
- if (tokens == 0)
- /* We get context from the original source, don't expect
- to be asked to output a block which starts before
- what we already have written. */
- first = (first < btn->next_token) ? btn->next_token : first;
+ if (until > source->tokens->nelts)
+ until = source->tokens->nelts;
- if (first >= past_last)
+ if (until <= btn->current_token[tokens])
return SVN_NO_ERROR;
/* Do the loop with prefix and token */
- for (idx = first; idx < past_last; idx++)
+ while (TRUE)
{
- svn_string_t *token
- = APR_ARRAY_IDX(source->tokens, idx, svn_string_t *);
- svn_stringbuf_appendcstr(btn->hunk, btn->prefix_str[type]);
- svn_stringbuf_appendbytes(btn->hunk, token->data, token->len);
+ svn_string_t *token =
+ APR_ARRAY_IDX(source->tokens, btn->current_token[tokens],
+ svn_string_t *);
+
+ if (type != unified_output_skip)
+ {
+ svn_stringbuf_appendcstr(btn->hunk, btn->prefix_str[type]);
+ svn_stringbuf_appendbytes(btn->hunk, token->data, token->len);
+ }
if (type == unified_output_context)
{
@@ -411,25 +415,28 @@ output_unified_token_range(output_baton_t *btn,
}
else if (type == unified_output_delete)
btn->hunk_length[0]++;
- else
+ else if (type == unified_output_insert)
btn->hunk_length[1]++;
+ /* ### TODO: Add skip processing for -p handling? */
+
+ btn->current_token[tokens]++;
+ if (btn->current_token[tokens] == until)
+ break;
}
- if (past_last == source->tokens->nelts && source->ends_without_eol)
+
+ if (btn->current_token[tokens] == source->tokens->nelts
+ && source->ends_without_eol)
{
const char *out_str;
- SVN_ERR(svn_utf_cstring_from_utf8_ex2
- (&out_str,
- /* The string below is intentionally not marked for translation:
- it's vital to correct operation of the diff(1)/patch(1)
- program pair. */
- APR_EOL_STR "\\ No newline at end of file" APR_EOL_STR,
- btn->header_encoding, btn->pool));
+
+ SVN_ERR(svn_utf_cstring_from_utf8_ex2(
+ &out_str, btn->no_newline_string,
+ btn->header_encoding, btn->pool));
svn_stringbuf_appendcstr(btn->hunk, out_str);
}
- if (tokens == 0)
- btn->next_token = past_last;
+
return SVN_NO_ERROR;
}
@@ -444,6 +451,8 @@ output_unified_flush_hunk(output_baton_t *baton,
{
apr_off_t target_token;
apr_size_t hunk_len;
+ apr_off_t old_start;
+ apr_off_t new_start;
if (svn_stringbuf_isempty(baton->hunk))
return SVN_NO_ERROR;
@@ -452,58 +461,40 @@ output_unified_flush_hunk(output_baton_t *baton,
/* Write the trailing context */
target_token = baton->hunk_start[0] + baton->hunk_length[0]
- + SVN_DIFF__UNIFIED_CONTEXT_SIZE;
+ + SVN_DIFF__UNIFIED_CONTEXT_SIZE;
SVN_ERR(output_unified_token_range(baton, 0 /*original*/,
unified_output_context,
- baton->next_token, target_token));
+ target_token));
if (hunk_delimiter == NULL)
hunk_delimiter = "@@";
+ old_start = baton->hunk_start[0];
+ new_start = baton->hunk_start[1];
+
+ /* If the file is non-empty, convert the line indexes from
+ zero based to one based */
+ if (baton->hunk_length[0])
+ old_start++;
+ if (baton->hunk_length[1])
+ new_start++;
+
/* Write the hunk header */
- if (baton->hunk_length[0] > 0)
- /* Convert our 0-based line numbers into unidiff 1-based numbers */
- baton->hunk_start[0]++;
- SVN_ERR(svn_stream_printf_from_utf8(
- baton->output_stream, baton->header_encoding,
- baton->pool,
- /* Hunk length 1 is implied, don't show the
- length field if we have a hunk that long */
- (baton->hunk_length[0] == 1)
- ? ("%s -%" APR_OFF_T_FMT)
- : ("%s -%" APR_OFF_T_FMT ",%" APR_OFF_T_FMT),
- hunk_delimiter,
- baton->hunk_start[0], baton->hunk_length[0]));
-
- if (baton->hunk_length[1] > 0)
- /* Convert our 0-based line numbers into unidiff 1-based numbers */
- baton->hunk_start[1]++;
-
-
- /* Hunk length 1 is implied, don't show the
- length field if we have a hunk that long */
- if (baton->hunk_length[1] == 1)
- {
- SVN_ERR(svn_stream_printf_from_utf8(
- baton->output_stream, baton->header_encoding,
- baton->pool,
- " +%" APR_OFF_T_FMT " %s" APR_EOL_STR,
- baton->hunk_start[1], hunk_delimiter));
- }
- else
- {
- SVN_ERR(svn_stream_printf_from_utf8(
- baton->output_stream, baton->header_encoding,
- baton->pool,
- " +%" APR_OFF_T_FMT ",%" APR_OFF_T_FMT " %s" APR_EOL_STR,
- baton->hunk_start[1], baton->hunk_length[1],
- hunk_delimiter));
- }
+ SVN_ERR(svn_diff__unified_write_hunk_header(
+ baton->output_stream, baton->header_encoding, hunk_delimiter,
+ old_start, baton->hunk_length[0],
+ new_start, baton->hunk_length[1],
+ NULL /* hunk_extra_context */,
+ baton->pool));
hunk_len = baton->hunk->len;
SVN_ERR(svn_stream_write(baton->output_stream,
baton->hunk->data, &hunk_len));
- baton->hunk_length[0] = baton->hunk_length[1] = 0;
+ /* Prepare for the next hunk */
+ baton->hunk_length[0] = 0;
+ baton->hunk_length[1] = 0;
+ baton->hunk_start[0] = 0;
+ baton->hunk_start[1] = 0;
svn_stringbuf_setempty(baton->hunk);
return SVN_NO_ERROR;
@@ -519,38 +510,91 @@ output_unified_diff_modified(void *baton,
apr_off_t latest_start,
apr_off_t latest_length)
{
- output_baton_t *btn = baton;
- apr_off_t targ_orig, targ_mod;
-
- targ_orig = original_start - SVN_DIFF__UNIFIED_CONTEXT_SIZE;
- targ_orig = (targ_orig < 0) ? 0 : targ_orig;
- targ_mod = modified_start;
-
- /* If the changed ranges are far enough apart (no overlapping or
- * connecting context), flush the current hunk. */
- if (btn->next_token + SVN_DIFF__UNIFIED_CONTEXT_SIZE < targ_orig)
- SVN_ERR(output_unified_flush_hunk(btn, btn->hunk_delimiter));
- /* Adjust offset if it's not the first hunk. */
- else if (btn->hunk_length[0] != 0)
- targ_orig = btn->next_token;
-
- if (btn->hunk_length[0] == 0
- && btn->hunk_length[1] == 0)
+ output_baton_t *output_baton = baton;
+ apr_off_t context_prefix_length;
+ apr_off_t prev_context_end;
+ svn_boolean_t init_hunk = FALSE;
+
+ if (original_start > SVN_DIFF__UNIFIED_CONTEXT_SIZE)
+ context_prefix_length = SVN_DIFF__UNIFIED_CONTEXT_SIZE;
+ else
+ context_prefix_length = original_start;
+
+ /* Calculate where the previous hunk will end if we would write it now
+ (including the necessary context at the end) */
+ if (output_baton->hunk_length[0] > 0 || output_baton->hunk_length[1] > 0)
{
- btn->hunk_start[0] = targ_orig;
- btn->hunk_start[1] = targ_mod + targ_orig - original_start;
+ prev_context_end = output_baton->hunk_start[0]
+ + output_baton->hunk_length[0]
+ + SVN_DIFF__UNIFIED_CONTEXT_SIZE;
}
+ else
+ {
+ prev_context_end = -1;
- SVN_ERR(output_unified_token_range(btn, 0/*original*/,
- unified_output_context,
- targ_orig, original_start));
- SVN_ERR(output_unified_token_range(btn, 0/*original*/,
+ if (output_baton->hunk_start[0] == 0
+ && (original_length > 0 || modified_length > 0))
+ init_hunk = TRUE;
+ }
+
+ /* If the changed range is far enough from the previous range, flush the current
+ hunk. */
+ {
+ apr_off_t new_hunk_start = (original_start - context_prefix_length);
+
+ if (output_baton->current_token[0] < new_hunk_start
+ && prev_context_end <= new_hunk_start)
+ {
+ SVN_ERR(output_unified_flush_hunk(output_baton,
+ output_baton->hunk_delimiter));
+ init_hunk = TRUE;
+ }
+ else if (output_baton->hunk_length[0] > 0
+ || output_baton->hunk_length[1] > 0)
+ {
+ /* We extend the current hunk */
+
+ /* Original: Output the context preceding the changed range */
+ SVN_ERR(output_unified_token_range(output_baton, 0 /* original */,
+ unified_output_context,
+ original_start));
+ }
+ }
+
+ /* Original: Skip lines until we are at the beginning of the context we want
+ to display */
+ SVN_ERR(output_unified_token_range(output_baton, 0 /* original */,
+ unified_output_skip,
+ original_start - context_prefix_length));
+
+ if (init_hunk)
+ {
+ SVN_ERR_ASSERT(output_baton->hunk_length[0] == 0
+ && output_baton->hunk_length[1] == 0);
+
+ output_baton->hunk_start[0] = original_start - context_prefix_length;
+ output_baton->hunk_start[1] = modified_start - context_prefix_length;
+ }
+
+ /* Modified: Skip lines until we are at the start of the changed range */
+ SVN_ERR(output_unified_token_range(output_baton, 1 /* modified */,
+ unified_output_skip,
+ modified_start));
+
+ /* Original: Output the context preceding the changed range */
+ SVN_ERR(output_unified_token_range(output_baton, 0 /* original */,
+ unified_output_context,
+ original_start));
+
+ /* Both: Output the changed range */
+ SVN_ERR(output_unified_token_range(output_baton, 0 /* original */,
unified_output_delete,
- original_start,
original_start + original_length));
- return output_unified_token_range(btn, 1/*modified*/, unified_output_insert,
- modified_start,
- modified_start + modified_length);
+ SVN_ERR(output_unified_token_range(output_baton, 1 /* modified */,
+ unified_output_insert,
+ modified_start + modified_length));
+
+ return SVN_NO_ERROR;
}
static const svn_diff_output_fns_t mem_output_unified_vtable =
@@ -584,8 +628,12 @@ svn_diff_mem_string_output_unified2(svn_stream_t *output_stream,
baton.output_stream = output_stream;
baton.pool = svn_pool_create(pool);
baton.header_encoding = header_encoding;
- baton.hunk = svn_stringbuf_create("", pool);
+ baton.hunk = svn_stringbuf_create_empty(pool);
baton.hunk_delimiter = hunk_delimiter;
+ baton.no_newline_string
+ = (hunk_delimiter == NULL || strcmp(hunk_delimiter, "##") != 0)
+ ? APR_EOL_STR SVN_DIFF__NO_NEWLINE_AT_END_OF_FILE APR_EOL_STR
+ : APR_EOL_STR SVN_DIFF__NO_NEWLINE_AT_END_OF_PROPERTY APR_EOL_STR;
SVN_ERR(svn_utf_cstring_from_utf8_ex2
(&(baton.prefix_str[unified_output_context]), " ",
@@ -602,12 +650,9 @@ svn_diff_mem_string_output_unified2(svn_stream_t *output_stream,
if (with_diff_header)
{
- SVN_ERR(svn_stream_printf_from_utf8(output_stream,
- header_encoding, pool,
- "--- %s" APR_EOL_STR
- "+++ %s" APR_EOL_STR,
- original_header,
- modified_header));
+ SVN_ERR(svn_diff__unidiff_write_header(
+ output_stream, header_encoding,
+ original_header, modified_header, pool));
}
SVN_ERR(svn_diff_output(diff, &baton,
@@ -680,7 +725,7 @@ typedef struct merge_output_baton_t
/* Tokenized source text */
source_tokens_t sources[3];
- apr_off_t next_token;
+ apr_off_t next_token[3];
/* Markers for marking conflicted sections */
const char *markers[4]; /* 0 = original, 1 = modified,
@@ -710,7 +755,7 @@ flush_context_saver(context_saver_t *cs,
int i;
for (i = 0; i < SVN_DIFF__UNIFIED_CONTEXT_SIZE; i++)
{
- int slot = (i + cs->next_slot) % SVN_DIFF__UNIFIED_CONTEXT_SIZE;
+ apr_size_t slot = (i + cs->next_slot) % SVN_DIFF__UNIFIED_CONTEXT_SIZE;
if (cs->data[slot])
{
apr_size_t len = cs->len[slot];
@@ -808,15 +853,13 @@ output_merge_token_range(apr_size_t *lines_printed_p,
static svn_error_t *
output_marker_eol(merge_output_baton_t *btn)
{
- apr_size_t len = strlen(btn->marker_eol);
- return svn_stream_write(btn->output_stream, btn->marker_eol, &len);
+ return svn_stream_puts(btn->output_stream, btn->marker_eol);
}
static svn_error_t *
output_merge_marker(merge_output_baton_t *btn, int idx)
{
- apr_size_t len = strlen(btn->markers[idx]);
- SVN_ERR(svn_stream_write(btn->output_stream, btn->markers[idx], &len));
+ SVN_ERR(svn_stream_puts(btn->output_stream, btn->markers[idx]));
return output_marker_eol(btn);
}
@@ -924,7 +967,7 @@ output_conflict_with_context(void *baton,
if (btn->output_stream == btn->context_saver->stream)
{
if (btn->context_saver->total_written > SVN_DIFF__UNIFIED_CONTEXT_SIZE)
- SVN_ERR(svn_stream_printf(btn->real_output_stream, btn->pool, "@@\n"));
+ SVN_ERR(svn_stream_puts(btn->real_output_stream, "@@\n"));
SVN_ERR(flush_context_saver(btn->context_saver, btn->real_output_stream));
}
diff --git a/subversion/libsvn_diff/diff_tree.c b/subversion/libsvn_diff/diff_tree.c
new file mode 100644
index 0000000..8490179
--- /dev/null
+++ b/subversion/libsvn_diff/diff_tree.c
@@ -0,0 +1,1705 @@
+/*
+ * diff_tree.c : default diff tree processor
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#include <apr.h>
+#include <apr_pools.h>
+#include <apr_general.h>
+
+#include <assert.h>
+
+#include "svn_dirent_uri.h"
+#include "svn_error.h"
+#include "svn_io.h"
+#include "svn_pools.h"
+#include "svn_props.h"
+#include "svn_types.h"
+
+#include "private/svn_diff_tree.h"
+#include "svn_private_config.h"
+
+typedef struct tree_processor_t
+{
+ svn_diff_tree_processor_t tp;
+
+ /* void *future_extension */
+} tree_processor_t;
+
+
+static svn_error_t *
+default_dir_opened(void **new_dir_baton,
+ svn_boolean_t *skip,
+ svn_boolean_t *skip_children,
+ const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const svn_diff_source_t *copyfrom_source,
+ void *parent_dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ *new_dir_baton = NULL;
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+default_dir_added(const char *relpath,
+ const svn_diff_source_t *copyfrom_source,
+ const svn_diff_source_t *right_source,
+ /*const*/ apr_hash_t *copyfrom_props,
+ /*const*/ apr_hash_t *right_props,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ SVN_ERR(processor->dir_closed(relpath, NULL, right_source,
+ dir_baton, processor,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+default_dir_deleted(const char *relpath,
+ const svn_diff_source_t *left_source,
+ /*const*/ apr_hash_t *left_props,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ SVN_ERR(processor->dir_closed(relpath, left_source, NULL,
+ dir_baton, processor,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+default_dir_changed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ /*const*/ apr_hash_t *left_props,
+ /*const*/ apr_hash_t *right_props,
+ const apr_array_header_t *prop_changes,
+ void *dir_baton,
+ const struct svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ SVN_ERR(processor->dir_closed(relpath,
+ left_source, right_source,
+ dir_baton,
+ processor, scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+default_dir_closed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+default_file_opened(void **new_file_baton,
+ svn_boolean_t *skip,
+ const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const svn_diff_source_t *copyfrom_source,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ *new_file_baton = dir_baton;
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+default_file_added(const char *relpath,
+ const svn_diff_source_t *copyfrom_source,
+ const svn_diff_source_t *right_source,
+ const char *copyfrom_file,
+ const char *right_file,
+ /*const*/ apr_hash_t *copyfrom_props,
+ /*const*/ apr_hash_t *right_props,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ SVN_ERR(processor->file_closed(relpath,
+ NULL, right_source,
+ file_baton, processor, scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+default_file_deleted(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const char *left_file,
+ /*const*/ apr_hash_t *left_props,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ SVN_ERR(processor->file_closed(relpath,
+ left_source, NULL,
+ file_baton, processor, scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+default_file_changed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const char *left_file,
+ const char *right_file,
+ /*const*/ apr_hash_t *left_props,
+ /*const*/ apr_hash_t *right_props,
+ svn_boolean_t file_modified,
+ const apr_array_header_t *prop_changes,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ SVN_ERR(processor->file_closed(relpath,
+ left_source, right_source,
+ file_baton, processor, scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+default_file_closed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+default_node_absent(const char *relpath,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ return SVN_NO_ERROR;
+}
+
+svn_diff_tree_processor_t *
+svn_diff__tree_processor_create(void *baton,
+ apr_pool_t *result_pool)
+{
+ tree_processor_t *wrapper;
+ wrapper = apr_pcalloc(result_pool, sizeof(*wrapper));
+
+ wrapper->tp.baton = baton;
+
+ wrapper->tp.dir_opened = default_dir_opened;
+ wrapper->tp.dir_added = default_dir_added;
+ wrapper->tp.dir_deleted = default_dir_deleted;
+ wrapper->tp.dir_changed = default_dir_changed;
+ wrapper->tp.dir_closed = default_dir_closed;
+
+ wrapper->tp.file_opened = default_file_opened;
+ wrapper->tp.file_added = default_file_added;
+ wrapper->tp.file_deleted = default_file_deleted;
+ wrapper->tp.file_changed = default_file_changed;
+ wrapper->tp.file_closed = default_file_closed;
+
+ wrapper->tp.node_absent = default_node_absent;
+
+
+ return &wrapper->tp;
+}
+
+struct reverse_tree_baton_t
+{
+ const svn_diff_tree_processor_t *processor;
+ const char *prefix_relpath;
+};
+
+static svn_error_t *
+reverse_dir_opened(void **new_dir_baton,
+ svn_boolean_t *skip,
+ svn_boolean_t *skip_children,
+ const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const svn_diff_source_t *copyfrom_source,
+ void *parent_dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct reverse_tree_baton_t *rb = processor->baton;
+
+ if (rb->prefix_relpath)
+ relpath = svn_relpath_join(rb->prefix_relpath, relpath, scratch_pool);
+
+ SVN_ERR(rb->processor->dir_opened(new_dir_baton, skip, skip_children,
+ relpath,
+ right_source, left_source,
+ NULL /* copyfrom */,
+ parent_dir_baton,
+ rb->processor,
+ result_pool, scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+reverse_dir_added(const char *relpath,
+ const svn_diff_source_t *copyfrom_source,
+ const svn_diff_source_t *right_source,
+ /*const*/ apr_hash_t *copyfrom_props,
+ /*const*/ apr_hash_t *right_props,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct reverse_tree_baton_t *rb = processor->baton;
+
+ if (rb->prefix_relpath)
+ relpath = svn_relpath_join(rb->prefix_relpath, relpath, scratch_pool);
+
+ SVN_ERR(rb->processor->dir_deleted(relpath,
+ right_source,
+ right_props,
+ dir_baton,
+ rb->processor,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+reverse_dir_deleted(const char *relpath,
+ const svn_diff_source_t *left_source,
+ /*const*/ apr_hash_t *left_props,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct reverse_tree_baton_t *rb = processor->baton;
+
+ if (rb->prefix_relpath)
+ relpath = svn_relpath_join(rb->prefix_relpath, relpath, scratch_pool);
+
+ SVN_ERR(rb->processor->dir_added(relpath,
+ NULL,
+ left_source,
+ NULL,
+ left_props,
+ dir_baton,
+ rb->processor,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+reverse_dir_changed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ /*const*/ apr_hash_t *left_props,
+ /*const*/ apr_hash_t *right_props,
+ const apr_array_header_t *prop_changes,
+ void *dir_baton,
+ const struct svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct reverse_tree_baton_t *rb = processor->baton;
+ apr_array_header_t *reversed_prop_changes = NULL;
+
+ if (rb->prefix_relpath)
+ relpath = svn_relpath_join(rb->prefix_relpath, relpath, scratch_pool);
+
+ if (prop_changes)
+ {
+ SVN_ERR_ASSERT(left_props != NULL && right_props != NULL);
+ SVN_ERR(svn_prop_diffs(&reversed_prop_changes, left_props, right_props,
+ scratch_pool));
+ }
+
+ SVN_ERR(rb->processor->dir_changed(relpath,
+ right_source,
+ left_source,
+ right_props,
+ left_props,
+ reversed_prop_changes,
+ dir_baton,
+ rb->processor,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+reverse_dir_closed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct reverse_tree_baton_t *rb = processor->baton;
+
+ if (rb->prefix_relpath)
+ relpath = svn_relpath_join(rb->prefix_relpath, relpath, scratch_pool);
+
+ SVN_ERR(rb->processor->dir_closed(relpath,
+ right_source,
+ left_source,
+ dir_baton,
+ rb->processor,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+reverse_file_opened(void **new_file_baton,
+ svn_boolean_t *skip,
+ const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const svn_diff_source_t *copyfrom_source,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct reverse_tree_baton_t *rb = processor->baton;
+
+ if (rb->prefix_relpath)
+ relpath = svn_relpath_join(rb->prefix_relpath, relpath, scratch_pool);
+
+ SVN_ERR(rb->processor->file_opened(new_file_baton,
+ skip,
+ relpath,
+ right_source,
+ left_source,
+ NULL /* copy_from */,
+ dir_baton,
+ rb->processor,
+ result_pool,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+reverse_file_added(const char *relpath,
+ const svn_diff_source_t *copyfrom_source,
+ const svn_diff_source_t *right_source,
+ const char *copyfrom_file,
+ const char *right_file,
+ /*const*/ apr_hash_t *copyfrom_props,
+ /*const*/ apr_hash_t *right_props,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct reverse_tree_baton_t *rb = processor->baton;
+
+ if (rb->prefix_relpath)
+ relpath = svn_relpath_join(rb->prefix_relpath, relpath, scratch_pool);
+
+ SVN_ERR(rb->processor->file_deleted(relpath,
+ right_source,
+ right_file,
+ right_props,
+ file_baton,
+ rb->processor,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+reverse_file_deleted(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const char *left_file,
+ /*const*/ apr_hash_t *left_props,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct reverse_tree_baton_t *rb = processor->baton;
+
+ if (rb->prefix_relpath)
+ relpath = svn_relpath_join(rb->prefix_relpath, relpath, scratch_pool);
+
+ SVN_ERR(rb->processor->file_added(relpath,
+ NULL /* copyfrom src */,
+ left_source,
+ NULL /* copyfrom file */,
+ left_file,
+ NULL /* copyfrom props */,
+ left_props,
+ file_baton,
+ rb->processor,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+reverse_file_changed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const char *left_file,
+ const char *right_file,
+ /*const*/ apr_hash_t *left_props,
+ /*const*/ apr_hash_t *right_props,
+ svn_boolean_t file_modified,
+ const apr_array_header_t *prop_changes,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct reverse_tree_baton_t *rb = processor->baton;
+ apr_array_header_t *reversed_prop_changes = NULL;
+
+ if (rb->prefix_relpath)
+ relpath = svn_relpath_join(rb->prefix_relpath, relpath, scratch_pool);
+
+ if (prop_changes)
+ {
+ SVN_ERR_ASSERT(left_props != NULL && right_props != NULL);
+ SVN_ERR(svn_prop_diffs(&reversed_prop_changes, left_props, right_props,
+ scratch_pool));
+ }
+
+ SVN_ERR(rb->processor->file_changed(relpath,
+ right_source,
+ left_source,
+ right_file,
+ left_file,
+ right_props,
+ left_props,
+ file_modified,
+ reversed_prop_changes,
+ file_baton,
+ rb->processor,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+reverse_file_closed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct reverse_tree_baton_t *rb = processor->baton;
+
+ if (rb->prefix_relpath)
+ relpath = svn_relpath_join(rb->prefix_relpath, relpath, scratch_pool);
+
+ SVN_ERR(rb->processor->file_closed(relpath,
+ right_source,
+ left_source,
+ file_baton,
+ rb->processor,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+reverse_node_absent(const char *relpath,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct reverse_tree_baton_t *rb = processor->baton;
+
+ if (rb->prefix_relpath)
+ relpath = svn_relpath_join(rb->prefix_relpath, relpath, scratch_pool);
+
+ SVN_ERR(rb->processor->node_absent(relpath,
+ dir_baton,
+ rb->processor,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+
+const svn_diff_tree_processor_t *
+svn_diff__tree_processor_reverse_create(const svn_diff_tree_processor_t * processor,
+ const char *prefix_relpath,
+ apr_pool_t *result_pool)
+{
+ struct reverse_tree_baton_t *rb;
+ svn_diff_tree_processor_t *reverse;
+
+ rb = apr_pcalloc(result_pool, sizeof(*rb));
+ rb->processor = processor;
+ if (prefix_relpath)
+ rb->prefix_relpath = apr_pstrdup(result_pool, prefix_relpath);
+
+ reverse = svn_diff__tree_processor_create(rb, result_pool);
+
+ reverse->dir_opened = reverse_dir_opened;
+ reverse->dir_added = reverse_dir_added;
+ reverse->dir_deleted = reverse_dir_deleted;
+ reverse->dir_changed = reverse_dir_changed;
+ reverse->dir_closed = reverse_dir_closed;
+
+ reverse->file_opened = reverse_file_opened;
+ reverse->file_added = reverse_file_added;
+ reverse->file_deleted = reverse_file_deleted;
+ reverse->file_changed = reverse_file_changed;
+ reverse->file_closed = reverse_file_closed;
+
+ reverse->node_absent = reverse_node_absent;
+
+ return reverse;
+}
+
+struct filter_tree_baton_t
+{
+ const svn_diff_tree_processor_t *processor;
+ const char *prefix_relpath;
+};
+
+static svn_error_t *
+filter_dir_opened(void **new_dir_baton,
+ svn_boolean_t *skip,
+ svn_boolean_t *skip_children,
+ const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const svn_diff_source_t *copyfrom_source,
+ void *parent_dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct filter_tree_baton_t *fb = processor->baton;
+
+ relpath = svn_relpath_skip_ancestor(fb->prefix_relpath, relpath);
+
+ if (! relpath)
+ {
+ /* Skip work for this, but NOT for DESCENDANTS */
+ *skip = TRUE;
+ return SVN_NO_ERROR;
+ }
+
+ SVN_ERR(fb->processor->dir_opened(new_dir_baton, skip, skip_children,
+ relpath,
+ left_source, right_source,
+ copyfrom_source,
+ parent_dir_baton,
+ fb->processor,
+ result_pool, scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+filter_dir_added(const char *relpath,
+ const svn_diff_source_t *copyfrom_source,
+ const svn_diff_source_t *right_source,
+ /*const*/ apr_hash_t *copyfrom_props,
+ /*const*/ apr_hash_t *right_props,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct filter_tree_baton_t *fb = processor->baton;
+
+ relpath = svn_relpath_skip_ancestor(fb->prefix_relpath, relpath);
+ assert(relpath != NULL); /* Driver error */
+
+ SVN_ERR(fb->processor->dir_added(relpath,
+ copyfrom_source,
+ right_source,
+ copyfrom_props,
+ right_props,
+ dir_baton,
+ fb->processor,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+filter_dir_deleted(const char *relpath,
+ const svn_diff_source_t *left_source,
+ /*const*/ apr_hash_t *left_props,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct filter_tree_baton_t *fb = processor->baton;
+
+ relpath = svn_relpath_skip_ancestor(fb->prefix_relpath, relpath);
+ assert(relpath != NULL); /* Driver error */
+
+ SVN_ERR(fb->processor->dir_deleted(relpath,
+ left_source,
+ left_props,
+ dir_baton,
+ fb->processor,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+filter_dir_changed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ /*const*/ apr_hash_t *left_props,
+ /*const*/ apr_hash_t *right_props,
+ const apr_array_header_t *prop_changes,
+ void *dir_baton,
+ const struct svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct filter_tree_baton_t *fb = processor->baton;
+
+ relpath = svn_relpath_skip_ancestor(fb->prefix_relpath, relpath);
+ assert(relpath != NULL); /* Driver error */
+
+ SVN_ERR(fb->processor->dir_changed(relpath,
+ left_source,
+ right_source,
+ left_props,
+ right_props,
+ prop_changes,
+ dir_baton,
+ fb->processor,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+filter_dir_closed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct filter_tree_baton_t *fb = processor->baton;
+
+ relpath = svn_relpath_skip_ancestor(fb->prefix_relpath, relpath);
+ assert(relpath != NULL); /* Driver error */
+
+ SVN_ERR(fb->processor->dir_closed(relpath,
+ left_source,
+ right_source,
+ dir_baton,
+ fb->processor,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+filter_file_opened(void **new_file_baton,
+ svn_boolean_t *skip,
+ const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const svn_diff_source_t *copyfrom_source,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct filter_tree_baton_t *fb = processor->baton;
+
+ relpath = svn_relpath_skip_ancestor(fb->prefix_relpath, relpath);
+
+ if (! relpath)
+ {
+ *skip = TRUE;
+ return SVN_NO_ERROR;
+ }
+
+ SVN_ERR(fb->processor->file_opened(new_file_baton,
+ skip,
+ relpath,
+ left_source,
+ right_source,
+ copyfrom_source,
+ dir_baton,
+ fb->processor,
+ result_pool,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+filter_file_added(const char *relpath,
+ const svn_diff_source_t *copyfrom_source,
+ const svn_diff_source_t *right_source,
+ const char *copyfrom_file,
+ const char *right_file,
+ /*const*/ apr_hash_t *copyfrom_props,
+ /*const*/ apr_hash_t *right_props,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct filter_tree_baton_t *fb = processor->baton;
+
+ relpath = svn_relpath_skip_ancestor(fb->prefix_relpath, relpath);
+ assert(relpath != NULL); /* Driver error */
+
+ SVN_ERR(fb->processor->file_added(relpath,
+ copyfrom_source,
+ right_source,
+ copyfrom_file,
+ right_file,
+ copyfrom_props,
+ right_props,
+ file_baton,
+ fb->processor,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+filter_file_deleted(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const char *left_file,
+ /*const*/ apr_hash_t *left_props,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct filter_tree_baton_t *fb = processor->baton;
+
+ relpath = svn_relpath_skip_ancestor(fb->prefix_relpath, relpath);
+ assert(relpath != NULL); /* Driver error */
+
+ SVN_ERR(fb->processor->file_deleted(relpath,
+ left_source,
+ left_file,
+ left_props,
+ file_baton,
+ fb->processor,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+filter_file_changed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const char *left_file,
+ const char *right_file,
+ /*const*/ apr_hash_t *left_props,
+ /*const*/ apr_hash_t *right_props,
+ svn_boolean_t file_modified,
+ const apr_array_header_t *prop_changes,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct filter_tree_baton_t *fb = processor->baton;
+
+ relpath = svn_relpath_skip_ancestor(fb->prefix_relpath, relpath);
+ assert(relpath != NULL); /* Driver error */
+
+ SVN_ERR(fb->processor->file_changed(relpath,
+ left_source,
+ right_source,
+ left_file,
+ right_file,
+ left_props,
+ right_props,
+ file_modified,
+ prop_changes,
+ file_baton,
+ fb->processor,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+filter_file_closed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct filter_tree_baton_t *fb = processor->baton;
+
+ relpath = svn_relpath_skip_ancestor(fb->prefix_relpath, relpath);
+ assert(relpath != NULL); /* Driver error */
+
+ SVN_ERR(fb->processor->file_closed(relpath,
+ left_source,
+ right_source,
+ file_baton,
+ fb->processor,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+filter_node_absent(const char *relpath,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct filter_tree_baton_t *fb = processor->baton;
+
+ relpath = svn_relpath_skip_ancestor(fb->prefix_relpath, relpath);
+ assert(relpath != NULL); /* Driver error */
+
+ SVN_ERR(fb->processor->node_absent(relpath,
+ dir_baton,
+ fb->processor,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+
+const svn_diff_tree_processor_t *
+svn_diff__tree_processor_filter_create(const svn_diff_tree_processor_t * processor,
+ const char *prefix_relpath,
+ apr_pool_t *result_pool)
+{
+ struct filter_tree_baton_t *fb;
+ svn_diff_tree_processor_t *filter;
+
+ fb = apr_pcalloc(result_pool, sizeof(*fb));
+ fb->processor = processor;
+ if (prefix_relpath)
+ fb->prefix_relpath = apr_pstrdup(result_pool, prefix_relpath);
+
+ filter = svn_diff__tree_processor_create(fb, result_pool);
+
+ filter->dir_opened = filter_dir_opened;
+ filter->dir_added = filter_dir_added;
+ filter->dir_deleted = filter_dir_deleted;
+ filter->dir_changed = filter_dir_changed;
+ filter->dir_closed = filter_dir_closed;
+
+ filter->file_opened = filter_file_opened;
+ filter->file_added = filter_file_added;
+ filter->file_deleted = filter_file_deleted;
+ filter->file_changed = filter_file_changed;
+ filter->file_closed = filter_file_closed;
+
+ filter->node_absent = filter_node_absent;
+
+ return filter;
+}
+
+struct copy_as_changed_baton_t
+{
+ const svn_diff_tree_processor_t *processor;
+};
+
+static svn_error_t *
+copy_as_changed_dir_opened(void **new_dir_baton,
+ svn_boolean_t *skip,
+ svn_boolean_t *skip_children,
+ const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const svn_diff_source_t *copyfrom_source,
+ void *parent_dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct copy_as_changed_baton_t *cb = processor->baton;
+
+ if (!left_source && copyfrom_source)
+ {
+ assert(right_source != NULL);
+
+ left_source = copyfrom_source;
+ copyfrom_source = NULL;
+ }
+
+ SVN_ERR(cb->processor->dir_opened(new_dir_baton, skip, skip_children,
+ relpath,
+ left_source, right_source,
+ copyfrom_source,
+ parent_dir_baton,
+ cb->processor,
+ result_pool, scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+copy_as_changed_dir_added(const char *relpath,
+ const svn_diff_source_t *copyfrom_source,
+ const svn_diff_source_t *right_source,
+ /*const*/ apr_hash_t *copyfrom_props,
+ /*const*/ apr_hash_t *right_props,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct copy_as_changed_baton_t *cb = processor->baton;
+
+ if (copyfrom_source)
+ {
+ apr_array_header_t *propchanges;
+ SVN_ERR(svn_prop_diffs(&propchanges, right_props, copyfrom_props,
+ scratch_pool));
+ SVN_ERR(cb->processor->dir_changed(relpath,
+ copyfrom_source,
+ right_source,
+ copyfrom_props,
+ right_props,
+ propchanges,
+ dir_baton,
+ cb->processor,
+ scratch_pool));
+ }
+ else
+ {
+ SVN_ERR(cb->processor->dir_added(relpath,
+ copyfrom_source,
+ right_source,
+ copyfrom_props,
+ right_props,
+ dir_baton,
+ cb->processor,
+ scratch_pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+copy_as_changed_dir_deleted(const char *relpath,
+ const svn_diff_source_t *left_source,
+ /*const*/ apr_hash_t *left_props,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct copy_as_changed_baton_t *cb = processor->baton;
+
+ SVN_ERR(cb->processor->dir_deleted(relpath,
+ left_source,
+ left_props,
+ dir_baton,
+ cb->processor,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+copy_as_changed_dir_changed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ /*const*/ apr_hash_t *left_props,
+ /*const*/ apr_hash_t *right_props,
+ const apr_array_header_t *prop_changes,
+ void *dir_baton,
+ const struct svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct copy_as_changed_baton_t *cb = processor->baton;
+
+ SVN_ERR(cb->processor->dir_changed(relpath,
+ left_source,
+ right_source,
+ left_props,
+ right_props,
+ prop_changes,
+ dir_baton,
+ cb->processor,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+copy_as_changed_dir_closed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct copy_as_changed_baton_t *cb = processor->baton;
+
+ SVN_ERR(cb->processor->dir_closed(relpath,
+ left_source,
+ right_source,
+ dir_baton,
+ cb->processor,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+copy_as_changed_file_opened(void **new_file_baton,
+ svn_boolean_t *skip,
+ const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const svn_diff_source_t *copyfrom_source,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct copy_as_changed_baton_t *cb = processor->baton;
+
+ if (!left_source && copyfrom_source)
+ {
+ assert(right_source != NULL);
+
+ left_source = copyfrom_source;
+ copyfrom_source = NULL;
+ }
+
+ SVN_ERR(cb->processor->file_opened(new_file_baton,
+ skip,
+ relpath,
+ left_source,
+ right_source,
+ copyfrom_source,
+ dir_baton,
+ cb->processor,
+ result_pool,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+copy_as_changed_file_added(const char *relpath,
+ const svn_diff_source_t *copyfrom_source,
+ const svn_diff_source_t *right_source,
+ const char *copyfrom_file,
+ const char *right_file,
+ /*const*/ apr_hash_t *copyfrom_props,
+ /*const*/ apr_hash_t *right_props,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct copy_as_changed_baton_t *cb = processor->baton;
+
+ if (copyfrom_source)
+ {
+ apr_array_header_t *propchanges;
+ svn_boolean_t same;
+ SVN_ERR(svn_prop_diffs(&propchanges, right_props, copyfrom_props,
+ scratch_pool));
+
+ /* "" is sometimes a marker for just modified (E.g. no-textdeltas),
+ and it is certainly not a file */
+ if (*copyfrom_file && *right_file)
+ {
+ SVN_ERR(svn_io_files_contents_same_p(&same, copyfrom_file,
+ right_file, scratch_pool));
+ }
+ else
+ same = FALSE;
+
+ SVN_ERR(cb->processor->file_changed(relpath,
+ copyfrom_source,
+ right_source,
+ copyfrom_file,
+ right_file,
+ copyfrom_props,
+ right_props,
+ !same,
+ propchanges,
+ file_baton,
+ cb->processor,
+ scratch_pool));
+ }
+ else
+ {
+ SVN_ERR(cb->processor->file_added(relpath,
+ copyfrom_source,
+ right_source,
+ copyfrom_file,
+ right_file,
+ copyfrom_props,
+ right_props,
+ file_baton,
+ cb->processor,
+ scratch_pool));
+ }
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+copy_as_changed_file_deleted(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const char *left_file,
+ /*const*/ apr_hash_t *left_props,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct copy_as_changed_baton_t *cb = processor->baton;
+
+ SVN_ERR(cb->processor->file_deleted(relpath,
+ left_source,
+ left_file,
+ left_props,
+ file_baton,
+ cb->processor,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+copy_as_changed_file_changed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const char *left_file,
+ const char *right_file,
+ /*const*/ apr_hash_t *left_props,
+ /*const*/ apr_hash_t *right_props,
+ svn_boolean_t file_modified,
+ const apr_array_header_t *prop_changes,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct copy_as_changed_baton_t *cb = processor->baton;
+
+ SVN_ERR(cb->processor->file_changed(relpath,
+ left_source,
+ right_source,
+ left_file,
+ right_file,
+ left_props,
+ right_props,
+ file_modified,
+ prop_changes,
+ file_baton,
+ cb->processor,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+copy_as_changed_file_closed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct copy_as_changed_baton_t *cb = processor->baton;
+
+ SVN_ERR(cb->processor->file_closed(relpath,
+ left_source,
+ right_source,
+ file_baton,
+ cb->processor,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+copy_as_changed_node_absent(const char *relpath,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct copy_as_changed_baton_t *cb = processor->baton;
+
+ SVN_ERR(cb->processor->node_absent(relpath,
+ dir_baton,
+ cb->processor,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+
+const svn_diff_tree_processor_t *
+svn_diff__tree_processor_copy_as_changed_create(
+ const svn_diff_tree_processor_t * processor,
+ apr_pool_t *result_pool)
+{
+ struct copy_as_changed_baton_t *cb;
+ svn_diff_tree_processor_t *filter;
+
+ cb = apr_pcalloc(result_pool, sizeof(*cb));
+ cb->processor = processor;
+
+ filter = svn_diff__tree_processor_create(cb, result_pool);
+ filter->dir_opened = copy_as_changed_dir_opened;
+ filter->dir_added = copy_as_changed_dir_added;
+ filter->dir_deleted = copy_as_changed_dir_deleted;
+ filter->dir_changed = copy_as_changed_dir_changed;
+ filter->dir_closed = copy_as_changed_dir_closed;
+
+ filter->file_opened = copy_as_changed_file_opened;
+ filter->file_added = copy_as_changed_file_added;
+ filter->file_deleted = copy_as_changed_file_deleted;
+ filter->file_changed = copy_as_changed_file_changed;
+ filter->file_closed = copy_as_changed_file_closed;
+
+ filter->node_absent = copy_as_changed_node_absent;
+
+ return filter;
+}
+
+
+/* Processor baton for the tee tree processor */
+struct tee_baton_t
+{
+ const svn_diff_tree_processor_t *p1;
+ const svn_diff_tree_processor_t *p2;
+};
+
+/* Wrapper baton for file and directory batons in the tee processor */
+struct tee_node_baton_t
+{
+ void *baton1;
+ void *baton2;
+};
+
+static svn_error_t *
+tee_dir_opened(void **new_dir_baton,
+ svn_boolean_t *skip,
+ svn_boolean_t *skip_children,
+ const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const svn_diff_source_t *copyfrom_source,
+ void *parent_dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct tee_baton_t *tb = processor->baton;
+ struct tee_node_baton_t *pb = parent_dir_baton;
+ struct tee_node_baton_t *nb = apr_pcalloc(result_pool, sizeof(*nb));
+
+ SVN_ERR(tb->p1->dir_opened(&(nb->baton1),
+ skip,
+ skip_children,
+ relpath,
+ left_source,
+ right_source,
+ copyfrom_source,
+ pb ? pb->baton1 : NULL,
+ tb->p1,
+ result_pool,
+ scratch_pool));
+
+ SVN_ERR(tb->p2->dir_opened(&(nb->baton2),
+ skip,
+ skip_children,
+ relpath,
+ left_source,
+ right_source,
+ copyfrom_source,
+ pb ? pb->baton2 : NULL,
+ tb->p2,
+ result_pool,
+ scratch_pool));
+
+ *new_dir_baton = nb;
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+tee_dir_added(const char *relpath,
+ const svn_diff_source_t *copyfrom_source,
+ const svn_diff_source_t *right_source,
+ /*const*/ apr_hash_t *copyfrom_props,
+ /*const*/ apr_hash_t *right_props,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct tee_baton_t *tb = processor->baton;
+ struct tee_node_baton_t *db = dir_baton;
+
+ SVN_ERR(tb->p1->dir_added(relpath,
+ copyfrom_source,
+ right_source,
+ copyfrom_props,
+ right_props,
+ db->baton1,
+ tb->p1,
+ scratch_pool));
+
+ SVN_ERR(tb->p2->dir_added(relpath,
+ copyfrom_source,
+ right_source,
+ copyfrom_props,
+ right_props,
+ db->baton2,
+ tb->p2,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+tee_dir_deleted(const char *relpath,
+ const svn_diff_source_t *left_source,
+ /*const*/ apr_hash_t *left_props,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct tee_baton_t *tb = processor->baton;
+ struct tee_node_baton_t *db = dir_baton;
+
+ SVN_ERR(tb->p1->dir_deleted(relpath,
+ left_source,
+ left_props,
+ db->baton1,
+ tb->p1,
+ scratch_pool));
+
+ SVN_ERR(tb->p2->dir_deleted(relpath,
+ left_source,
+ left_props,
+ db->baton2,
+ tb->p2,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+tee_dir_changed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ /*const*/ apr_hash_t *left_props,
+ /*const*/ apr_hash_t *right_props,
+ const apr_array_header_t *prop_changes,
+ void *dir_baton,
+ const struct svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct tee_baton_t *tb = processor->baton;
+ struct tee_node_baton_t *db = dir_baton;
+
+ SVN_ERR(tb->p1->dir_changed(relpath,
+ left_source,
+ right_source,
+ left_props,
+ right_props,
+ prop_changes,
+ db->baton1,
+ tb->p1,
+ scratch_pool));
+
+ SVN_ERR(tb->p2->dir_changed(relpath,
+ left_source,
+ right_source,
+ left_props,
+ right_props,
+ prop_changes,
+ db->baton2,
+ tb->p2,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+tee_dir_closed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct tee_baton_t *tb = processor->baton;
+ struct tee_node_baton_t *db = dir_baton;
+
+ SVN_ERR(tb->p1->dir_closed(relpath,
+ left_source,
+ right_source,
+ db->baton1,
+ tb->p1,
+ scratch_pool));
+
+ SVN_ERR(tb->p2->dir_closed(relpath,
+ left_source,
+ right_source,
+ db->baton2,
+ tb->p2,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+tee_file_opened(void **new_file_baton,
+ svn_boolean_t *skip,
+ const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const svn_diff_source_t *copyfrom_source,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct tee_baton_t *tb = processor->baton;
+ struct tee_node_baton_t *pb = dir_baton;
+ struct tee_node_baton_t *nb = apr_pcalloc(result_pool, sizeof(*nb));
+
+ SVN_ERR(tb->p1->file_opened(&(nb->baton1),
+ skip,
+ relpath,
+ left_source,
+ right_source,
+ copyfrom_source,
+ pb ? pb->baton1 : NULL,
+ tb->p1,
+ result_pool,
+ scratch_pool));
+
+ SVN_ERR(tb->p2->file_opened(&(nb->baton2),
+ skip,
+ relpath,
+ left_source,
+ right_source,
+ copyfrom_source,
+ pb ? pb->baton2 : NULL,
+ tb->p2,
+ result_pool,
+ scratch_pool));
+
+ *new_file_baton = nb;
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+tee_file_added(const char *relpath,
+ const svn_diff_source_t *copyfrom_source,
+ const svn_diff_source_t *right_source,
+ const char *copyfrom_file,
+ const char *right_file,
+ /*const*/ apr_hash_t *copyfrom_props,
+ /*const*/ apr_hash_t *right_props,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct tee_baton_t *tb = processor->baton;
+ struct tee_node_baton_t *fb = file_baton;
+
+ SVN_ERR(tb->p1->file_added(relpath,
+ copyfrom_source,
+ right_source,
+ copyfrom_file,
+ right_file,
+ copyfrom_props,
+ right_props,
+ fb->baton1,
+ tb->p1,
+ scratch_pool));
+
+ SVN_ERR(tb->p2->file_added(relpath,
+ copyfrom_source,
+ right_source,
+ copyfrom_file,
+ right_file,
+ copyfrom_props,
+ right_props,
+ fb->baton2,
+ tb->p2,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+tee_file_deleted(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const char *left_file,
+ /*const*/ apr_hash_t *left_props,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct tee_baton_t *tb = processor->baton;
+ struct tee_node_baton_t *fb = file_baton;
+
+ SVN_ERR(tb->p1->file_deleted(relpath,
+ left_source,
+ left_file,
+ left_props,
+ fb->baton1,
+ tb->p1,
+ scratch_pool));
+
+ SVN_ERR(tb->p2->file_deleted(relpath,
+ left_source,
+ left_file,
+ left_props,
+ fb->baton2,
+ tb->p2,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+tee_file_changed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const char *left_file,
+ const char *right_file,
+ /*const*/ apr_hash_t *left_props,
+ /*const*/ apr_hash_t *right_props,
+ svn_boolean_t file_modified,
+ const apr_array_header_t *prop_changes,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct tee_baton_t *tb = processor->baton;
+ struct tee_node_baton_t *fb = file_baton;
+
+ SVN_ERR(tb->p1->file_changed(relpath,
+ left_source,
+ right_source,
+ left_file,
+ right_file,
+ left_props,
+ right_props,
+ file_modified,
+ prop_changes,
+ fb->baton1,
+ tb->p1,
+ scratch_pool));
+
+ SVN_ERR(tb->p2->file_changed(relpath,
+ left_source,
+ right_source,
+ left_file,
+ right_file,
+ left_props,
+ right_props,
+ file_modified,
+ prop_changes,
+ fb->baton2,
+ tb->p2,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+tee_file_closed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct tee_baton_t *tb = processor->baton;
+ struct tee_node_baton_t *fb = file_baton;
+
+ SVN_ERR(tb->p1->file_closed(relpath,
+ left_source,
+ right_source,
+ fb->baton1,
+ tb->p1,
+ scratch_pool));
+
+ SVN_ERR(tb->p2->file_closed(relpath,
+ left_source,
+ right_source,
+ fb->baton2,
+ tb->p2,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+tee_node_absent(const char *relpath,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct tee_baton_t *tb = processor->baton;
+ struct tee_node_baton_t *db = dir_baton;
+
+ SVN_ERR(tb->p1->node_absent(relpath,
+ db ? db->baton1 : NULL,
+ tb->p1,
+ scratch_pool));
+
+ SVN_ERR(tb->p2->node_absent(relpath,
+ db ? db->baton2 : NULL,
+ tb->p2,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+const svn_diff_tree_processor_t *
+svn_diff__tree_processor_tee_create(const svn_diff_tree_processor_t *processor1,
+ const svn_diff_tree_processor_t *processor2,
+ apr_pool_t *result_pool)
+{
+ struct tee_baton_t *tb = apr_pcalloc(result_pool, sizeof(*tb));
+ svn_diff_tree_processor_t *tee;
+ tb->p1 = processor1;
+ tb->p2 = processor2;
+
+ tee = svn_diff__tree_processor_create(tb, result_pool);
+
+ tee->dir_opened = tee_dir_opened;
+ tee->dir_added = tee_dir_added;
+ tee->dir_deleted = tee_dir_deleted;
+ tee->dir_changed = tee_dir_changed;
+ tee->dir_closed = tee_dir_closed;
+ tee->file_opened = tee_file_opened;
+ tee->file_added = tee_file_added;
+ tee->file_deleted = tee_file_deleted;
+ tee->file_changed = tee_file_changed;
+ tee->file_closed = tee_file_closed;
+ tee->node_absent = tee_node_absent;
+
+ return tee;
+}
+
+svn_diff_source_t *
+svn_diff__source_create(svn_revnum_t revision,
+ apr_pool_t *result_pool)
+{
+ svn_diff_source_t *src = apr_pcalloc(result_pool, sizeof(*src));
+
+ src->revision = revision;
+ return src;
+}
diff --git a/subversion/libsvn_diff/parse-diff.c b/subversion/libsvn_diff/parse-diff.c
index feca3bc..e269ef9 100644
--- a/subversion/libsvn_diff/parse-diff.c
+++ b/subversion/libsvn_diff/parse-diff.c
@@ -22,8 +22,10 @@
*/
#include <stdlib.h>
+#include <stddef.h>
#include <string.h>
+#include "svn_hash.h"
#include "svn_types.h"
#include "svn_error.h"
#include "svn_io.h"
@@ -269,101 +271,6 @@ parse_hunk_header(const char *header, svn_diff_hunk_t *hunk,
return TRUE;
}
-/* A helper for reading a line of text from a range in the patch file.
- *
- * Allocate *STRINGBUF in RESULT_POOL, and read into it one line from FILE.
- * Reading stops either after a line-terminator was found or after MAX_LEN
- * bytes have been read. The line-terminator is not stored in *STRINGBUF.
- *
- * The line-terminator is detected automatically and stored in *EOL
- * if EOL is not NULL. If EOF is reached and FILE does not end
- * with a newline character, and EOL is not NULL, *EOL is set to NULL.
- *
- * SCRATCH_POOL is used for temporary allocations.
- */
-static svn_error_t *
-readline(apr_file_t *file,
- svn_stringbuf_t **stringbuf,
- const char **eol,
- svn_boolean_t *eof,
- apr_size_t max_len,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- svn_stringbuf_t *str;
- const char *eol_str;
- apr_size_t numbytes;
- char c;
- apr_size_t len;
- svn_boolean_t found_eof;
-
- str = svn_stringbuf_create_ensure(80, result_pool);
-
- /* Read bytes into STR up to and including, but not storing,
- * the next EOL sequence. */
- eol_str = NULL;
- numbytes = 1;
- len = 0;
- found_eof = FALSE;
- while (!found_eof)
- {
- if (len < max_len)
- SVN_ERR(svn_io_file_read_full2(file, &c, sizeof(c), &numbytes,
- &found_eof, scratch_pool));
- len++;
- if (numbytes != 1 || len > max_len)
- {
- found_eof = TRUE;
- break;
- }
-
- if (c == '\n')
- {
- eol_str = "\n";
- }
- else if (c == '\r')
- {
- eol_str = "\r";
-
- if (!found_eof && len < max_len)
- {
- apr_off_t pos;
-
- /* Check for "\r\n" by peeking at the next byte. */
- pos = 0;
- SVN_ERR(svn_io_file_seek(file, APR_CUR, &pos, scratch_pool));
- SVN_ERR(svn_io_file_read_full2(file, &c, sizeof(c), &numbytes,
- &found_eof, scratch_pool));
- if (numbytes == 1 && c == '\n')
- {
- eol_str = "\r\n";
- len++;
- }
- else
- {
- /* Pretend we never peeked. */
- SVN_ERR(svn_io_file_seek(file, APR_SET, &pos, scratch_pool));
- found_eof = FALSE;
- numbytes = 1;
- }
- }
- }
- else
- svn_stringbuf_appendbyte(str, c);
-
- if (eol_str)
- break;
- }
-
- if (eol)
- *eol = eol_str;
- if (eof)
- *eof = found_eof;
- *stringbuf = str;
-
- return SVN_NO_ERROR;
-}
-
/* Read a line of original or modified hunk text from the specified
* RANGE within FILE. FILE is expected to contain unidiff text.
* Leading unidiff symbols ('+', '-', and ' ') are removed from the line,
@@ -395,7 +302,7 @@ hunk_readline_original_or_modified(apr_file_t *file,
*eof = TRUE;
if (eol)
*eol = NULL;
- *stringbuf = svn_stringbuf_create("", result_pool);
+ *stringbuf = svn_stringbuf_create_empty(result_pool);
return SVN_NO_ERROR;
}
@@ -405,8 +312,8 @@ hunk_readline_original_or_modified(apr_file_t *file,
do
{
max_len = range->end - range->current;
- SVN_ERR(readline(file, &str, eol, eof, max_len,
- result_pool, scratch_pool));
+ SVN_ERR(svn_io_file_readline(file, &str, eol, eof, max_len,
+ result_pool, scratch_pool));
range->current = 0;
SVN_ERR(svn_io_file_seek(file, APR_CUR, &range->current, scratch_pool));
filtered = (str->data[0] == verboten || str->data[0] == '\\');
@@ -489,7 +396,7 @@ svn_diff_hunk_readline_diff_text(svn_diff_hunk_t *hunk,
*eof = TRUE;
if (eol)
*eol = NULL;
- *stringbuf = svn_stringbuf_create("", result_pool);
+ *stringbuf = svn_stringbuf_create_empty(result_pool);
return SVN_NO_ERROR;
}
@@ -498,7 +405,8 @@ svn_diff_hunk_readline_diff_text(svn_diff_hunk_t *hunk,
SVN_ERR(svn_io_file_seek(hunk->apr_file, APR_SET,
&hunk->diff_text_range.current, scratch_pool));
max_len = hunk->diff_text_range.end - hunk->diff_text_range.current;
- SVN_ERR(readline(hunk->apr_file, &line, eol, eof, max_len, result_pool,
+ SVN_ERR(svn_io_file_readline(hunk->apr_file, &line, eol, eof, max_len,
+ result_pool,
scratch_pool));
hunk->diff_text_range.current = 0;
SVN_ERR(svn_io_file_seek(hunk->apr_file, APR_CUR,
@@ -641,22 +549,18 @@ parse_next_hunk(svn_diff_hunk_t **hunk,
/* Remember the current line's offset, and read the line. */
last_line = pos;
- SVN_ERR(readline(apr_file, &line, NULL, &eof, APR_SIZE_MAX,
- iterpool, iterpool));
+ SVN_ERR(svn_io_file_readline(apr_file, &line, NULL, &eof, APR_SIZE_MAX,
+ iterpool, iterpool));
/* Update line offset for next iteration. */
pos = 0;
SVN_ERR(svn_io_file_seek(apr_file, APR_CUR, &pos, iterpool));
- /* Lines starting with a backslash are comments, such as
- * "\ No newline at end of file". */
+ /* Lines starting with a backslash indicate a missing EOL:
+ * "\ No newline at end of file" or "end of property". */
if (line->data[0] == '\\')
{
- if (in_hunk &&
- ((!*is_property &&
- strcmp(line->data, "\\ No newline at end of file") == 0) ||
- (*is_property &&
- strcmp(line->data, "\\ No newline at end of property") == 0)))
+ if (in_hunk)
{
char eolbuf[2];
apr_size_t len;
@@ -688,7 +592,6 @@ parse_next_hunk(svn_diff_hunk_t **hunk,
original_end = hunk_text_end;
if (modified_end == 0)
modified_end = hunk_text_end;
- break;
}
SVN_ERR(svn_io_file_seek(apr_file, APR_SET, &pos, iterpool));
@@ -1034,8 +937,8 @@ git_start(enum parse_state *new_state, char *line, svn_patch_t *patch,
while (TRUE)
{
- int len_old;
- int len_new;
+ ptrdiff_t len_old;
+ ptrdiff_t len_new;
new_path_marker = strstr(new_path_start, " b/");
@@ -1208,8 +1111,7 @@ add_property_hunk(svn_patch_t *patch, const char *prop_name,
{
svn_prop_patch_t *prop_patch;
- prop_patch = apr_hash_get(patch->prop_patches, prop_name,
- APR_HASH_KEY_STRING);
+ prop_patch = svn_hash_gets(patch->prop_patches, prop_name);
if (! prop_patch)
{
@@ -1219,8 +1121,7 @@ add_property_hunk(svn_patch_t *patch, const char *prop_name,
prop_patch->hunks = apr_array_make(result_pool, 1,
sizeof(svn_diff_hunk_t *));
- apr_hash_set(patch->prop_patches, prop_name, APR_HASH_KEY_STRING,
- prop_patch);
+ svn_hash_sets(patch->prop_patches, prop_name, prop_patch);
}
APR_ARRAY_PUSH(prop_patch->hunks, svn_diff_hunk_t *) = hunk;
@@ -1246,7 +1147,8 @@ svn_diff_open_patch_file(svn_patch_file_t **patch_file,
p = apr_palloc(result_pool, sizeof(*p));
SVN_ERR(svn_io_file_open(&p->apr_file, local_abspath,
- APR_READ | APR_BINARY, 0, result_pool));
+ APR_READ | APR_BUFFERED, APR_OS_DEFAULT,
+ result_pool));
p->next_patch_offset = 0;
*patch_file = p;
@@ -1363,8 +1265,8 @@ svn_diff_parse_next_patch(svn_patch_t **patch,
/* Remember the current line's offset, and read the line. */
last_line = pos;
- SVN_ERR(readline(patch_file->apr_file, &line, NULL, &eof,
- APR_SIZE_MAX, iterpool, iterpool));
+ SVN_ERR(svn_io_file_readline(patch_file->apr_file, &line, NULL, &eof,
+ APR_SIZE_MAX, iterpool, iterpool));
if (! eof)
{
@@ -1377,8 +1279,7 @@ svn_diff_parse_next_patch(svn_patch_t **patch,
/* Run the state machine. */
for (i = 0; i < (sizeof(transitions) / sizeof(transitions[0])); i++)
{
- if (line->len > strlen(transitions[i].expected_input)
- && starts_with(line->data, transitions[i].expected_input)
+ if (starts_with(line->data, transitions[i].expected_input)
&& state == transitions[i].required_state)
{
SVN_ERR(transitions[i].fn(&state, line->data, *patch,
@@ -1395,19 +1296,25 @@ svn_diff_parse_next_patch(svn_patch_t **patch,
}
else if (state == state_git_tree_seen && line_after_tree_header_read)
{
- /* We have a valid diff header for a patch with only tree changes.
- * Rewind to the start of the line just read, so subsequent calls
- * to this function don't end up skipping the line -- it may
- * contain a patch. */
- SVN_ERR(svn_io_file_seek(patch_file->apr_file, APR_SET, &last_line,
- scratch_pool));
- break;
+ /* git patches can contain an index line after the file mode line */
+ if (!starts_with(line->data, "index "))
+ {
+ /* We have a valid diff header for a patch with only tree changes.
+ * Rewind to the start of the line just read, so subsequent calls
+ * to this function don't end up skipping the line -- it may
+ * contain a patch. */
+ SVN_ERR(svn_io_file_seek(patch_file->apr_file, APR_SET, &last_line,
+ scratch_pool));
+ break;
+ }
}
else if (state == state_git_tree_seen)
{
line_after_tree_header_read = TRUE;
}
- else if (! valid_header_line && state != state_start)
+ else if (! valid_header_line && state != state_start
+ && state != state_git_diff_seen
+ && !starts_with(line->data, "index "))
{
/* We've encountered an invalid diff header.
*
diff --git a/subversion/libsvn_diff/util.c b/subversion/libsvn_diff/util.c
index 624af6b..412b20b 100644
--- a/subversion/libsvn_diff/util.c
+++ b/subversion/libsvn_diff/util.c
@@ -25,14 +25,25 @@
#include <apr.h>
#include <apr_general.h>
+#include "svn_hash.h"
+#include "svn_pools.h"
+#include "svn_dirent_uri.h"
+#include "svn_props.h"
+#include "svn_mergeinfo.h"
#include "svn_error.h"
#include "svn_diff.h"
#include "svn_types.h"
#include "svn_ctype.h"
+#include "svn_sorts.h"
+#include "svn_utf.h"
#include "svn_version.h"
+#include "private/svn_diff_private.h"
#include "diff.h"
+#include "svn_private_config.h"
+
+
svn_boolean_t
svn_diff_contains_conflicts(svn_diff_t *diff)
{
@@ -332,6 +343,260 @@ svn_diff__normalize_buffer(char **tgt,
#undef COPY_INCLUDED_SECTION
}
+svn_error_t *
+svn_diff__unified_append_no_newline_msg(svn_stringbuf_t *stringbuf,
+ const char *header_encoding,
+ apr_pool_t *scratch_pool)
+{
+ const char *out_str;
+
+ SVN_ERR(svn_utf_cstring_from_utf8_ex2(
+ &out_str,
+ APR_EOL_STR
+ SVN_DIFF__NO_NEWLINE_AT_END_OF_FILE APR_EOL_STR,
+ header_encoding, scratch_pool));
+ svn_stringbuf_appendcstr(stringbuf, out_str);
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_diff__unified_write_hunk_header(svn_stream_t *output_stream,
+ const char *header_encoding,
+ const char *hunk_delimiter,
+ apr_off_t old_start,
+ apr_off_t old_length,
+ apr_off_t new_start,
+ apr_off_t new_length,
+ const char *hunk_extra_context,
+ apr_pool_t *scratch_pool)
+{
+ SVN_ERR(svn_stream_printf_from_utf8(output_stream, header_encoding,
+ scratch_pool,
+ "%s -%" APR_OFF_T_FMT,
+ hunk_delimiter, old_start));
+ /* If the hunk length is 1, suppress the number of lines in the hunk
+ * (it is 1 implicitly) */
+ if (old_length != 1)
+ {
+ SVN_ERR(svn_stream_printf_from_utf8(output_stream, header_encoding,
+ scratch_pool,
+ ",%" APR_OFF_T_FMT, old_length));
+ }
+
+ SVN_ERR(svn_stream_printf_from_utf8(output_stream, header_encoding,
+ scratch_pool,
+ " +%" APR_OFF_T_FMT, new_start));
+ if (new_length != 1)
+ {
+ SVN_ERR(svn_stream_printf_from_utf8(output_stream, header_encoding,
+ scratch_pool,
+ ",%" APR_OFF_T_FMT, new_length));
+ }
+
+ if (hunk_extra_context == NULL)
+ hunk_extra_context = "";
+ SVN_ERR(svn_stream_printf_from_utf8(output_stream, header_encoding,
+ scratch_pool,
+ " %s%s%s" APR_EOL_STR,
+ hunk_delimiter,
+ hunk_extra_context[0] ? " " : "",
+ hunk_extra_context));
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_diff__unidiff_write_header(svn_stream_t *output_stream,
+ const char *header_encoding,
+ const char *old_header,
+ const char *new_header,
+ apr_pool_t *scratch_pool)
+{
+ SVN_ERR(svn_stream_printf_from_utf8(output_stream, header_encoding,
+ scratch_pool,
+ "--- %s" APR_EOL_STR
+ "+++ %s" APR_EOL_STR,
+ old_header,
+ new_header));
+ return SVN_NO_ERROR;
+}
+
+/* A helper function for display_prop_diffs. Output the differences between
+ the mergeinfo stored in ORIG_MERGEINFO_VAL and NEW_MERGEINFO_VAL in a
+ human-readable form to OUTSTREAM, using ENCODING. Use POOL for temporary
+ allocations. */
+static svn_error_t *
+display_mergeinfo_diff(const char *old_mergeinfo_val,
+ const char *new_mergeinfo_val,
+ const char *encoding,
+ svn_stream_t *outstream,
+ apr_pool_t *pool)
+{
+ apr_hash_t *old_mergeinfo_hash, *new_mergeinfo_hash, *added, *deleted;
+ apr_pool_t *iterpool = svn_pool_create(pool);
+ apr_hash_index_t *hi;
+
+ if (old_mergeinfo_val)
+ SVN_ERR(svn_mergeinfo_parse(&old_mergeinfo_hash, old_mergeinfo_val, pool));
+ else
+ old_mergeinfo_hash = NULL;
+
+ if (new_mergeinfo_val)
+ SVN_ERR(svn_mergeinfo_parse(&new_mergeinfo_hash, new_mergeinfo_val, pool));
+ else
+ new_mergeinfo_hash = NULL;
+
+ SVN_ERR(svn_mergeinfo_diff2(&deleted, &added, old_mergeinfo_hash,
+ new_mergeinfo_hash,
+ TRUE, pool, pool));
+
+ for (hi = apr_hash_first(pool, deleted);
+ hi; hi = apr_hash_next(hi))
+ {
+ const char *from_path = svn__apr_hash_index_key(hi);
+ svn_rangelist_t *merge_revarray = svn__apr_hash_index_val(hi);
+ svn_string_t *merge_revstr;
+
+ svn_pool_clear(iterpool);
+ SVN_ERR(svn_rangelist_to_string(&merge_revstr, merge_revarray,
+ iterpool));
+
+ SVN_ERR(svn_stream_printf_from_utf8(outstream, encoding, iterpool,
+ _(" Reverse-merged %s:r%s%s"),
+ from_path, merge_revstr->data,
+ APR_EOL_STR));
+ }
+
+ for (hi = apr_hash_first(pool, added);
+ hi; hi = apr_hash_next(hi))
+ {
+ const char *from_path = svn__apr_hash_index_key(hi);
+ svn_rangelist_t *merge_revarray = svn__apr_hash_index_val(hi);
+ svn_string_t *merge_revstr;
+
+ svn_pool_clear(iterpool);
+ SVN_ERR(svn_rangelist_to_string(&merge_revstr, merge_revarray,
+ iterpool));
+
+ SVN_ERR(svn_stream_printf_from_utf8(outstream, encoding, iterpool,
+ _(" Merged %s:r%s%s"),
+ from_path, merge_revstr->data,
+ APR_EOL_STR));
+ }
+
+ svn_pool_destroy(iterpool);
+ return SVN_NO_ERROR;
+}
+
+/* qsort callback handling svn_prop_t by name */
+static int
+propchange_sort(const void *k1, const void *k2)
+{
+ const svn_prop_t *propchange1 = k1;
+ const svn_prop_t *propchange2 = k2;
+
+ return strcmp(propchange1->name, propchange2->name);
+}
+
+svn_error_t *
+svn_diff__display_prop_diffs(svn_stream_t *outstream,
+ const char *encoding,
+ const apr_array_header_t *propchanges,
+ apr_hash_t *original_props,
+ svn_boolean_t pretty_print_mergeinfo,
+ apr_pool_t *scratch_pool)
+{
+ apr_pool_t *pool = scratch_pool;
+ apr_pool_t *iterpool = svn_pool_create(pool);
+ apr_array_header_t *changes = apr_array_copy(scratch_pool, propchanges);
+ int i;
+
+ qsort(changes->elts, changes->nelts, changes->elt_size, propchange_sort);
+
+ for (i = 0; i < changes->nelts; i++)
+ {
+ const char *action;
+ const svn_string_t *original_value;
+ const svn_prop_t *propchange
+ = &APR_ARRAY_IDX(changes, i, svn_prop_t);
+
+ if (original_props)
+ original_value = svn_hash_gets(original_props, propchange->name);
+ else
+ original_value = NULL;
+
+ /* If the property doesn't exist on either side, or if it exists
+ with the same value, skip it. This can happen if the client is
+ hitting an old mod_dav_svn server that doesn't understand the
+ "send-all" REPORT style. */
+ if ((! (original_value || propchange->value))
+ || (original_value && propchange->value
+ && svn_string_compare(original_value, propchange->value)))
+ continue;
+
+ svn_pool_clear(iterpool);
+
+ if (! original_value)
+ action = "Added";
+ else if (! propchange->value)
+ action = "Deleted";
+ else
+ action = "Modified";
+ SVN_ERR(svn_stream_printf_from_utf8(outstream, encoding, iterpool,
+ "%s: %s%s", action,
+ propchange->name, APR_EOL_STR));
+
+ if (pretty_print_mergeinfo
+ && strcmp(propchange->name, SVN_PROP_MERGEINFO) == 0)
+ {
+ const char *orig = original_value ? original_value->data : NULL;
+ const char *val = propchange->value ? propchange->value->data : NULL;
+ svn_error_t *err = display_mergeinfo_diff(orig, val, encoding,
+ outstream, iterpool);
+
+ /* Issue #3896: If we can't pretty-print mergeinfo differences
+ because invalid mergeinfo is present, then don't let the diff
+ fail, just print the diff as any other property. */
+ if (err && err->apr_err == SVN_ERR_MERGEINFO_PARSE_ERROR)
+ {
+ svn_error_clear(err);
+ }
+ else
+ {
+ SVN_ERR(err);
+ continue;
+ }
+ }
+
+ {
+ svn_diff_t *diff;
+ svn_diff_file_options_t options = { 0 };
+ const svn_string_t *orig
+ = original_value ? original_value
+ : svn_string_create_empty(iterpool);
+ const svn_string_t *val
+ = propchange->value ? propchange->value
+ : svn_string_create_empty(iterpool);
+
+ SVN_ERR(svn_diff_mem_string_diff(&diff, orig, val, &options,
+ iterpool));
+
+ /* UNIX patch will try to apply a diff even if the diff header
+ * is missing. It tries to be helpful by asking the user for a
+ * target filename when it can't determine the target filename
+ * from the diff header. But there usually are no files which
+ * UNIX patch could apply the property diff to, so we use "##"
+ * instead of "@@" as the default hunk delimiter for property diffs.
+ * We also supress the diff header. */
+ SVN_ERR(svn_diff_mem_string_output_unified2(
+ outstream, diff, FALSE /* no header */, "##", NULL, NULL,
+ encoding, orig, val, iterpool));
+ }
+ }
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
/* Return the library version number. */
const svn_version_t *
diff --git a/subversion/libsvn_fs/access.c b/subversion/libsvn_fs/access.c
index 6094241..9918be4 100644
--- a/subversion/libsvn_fs/access.c
+++ b/subversion/libsvn_fs/access.c
@@ -24,6 +24,7 @@
#include <apr_hash.h>
+#include "svn_hash.h"
#include "svn_types.h"
#include "svn_pools.h"
#include "svn_fs.h"
@@ -86,8 +87,7 @@ svn_fs_access_add_lock_token2(svn_fs_access_t *access_ctx,
const char *path,
const char *token)
{
- apr_hash_set(access_ctx->lock_tokens,
- token, APR_HASH_KEY_STRING, path);
+ svn_hash_sets(access_ctx->lock_tokens, token, path);
return SVN_NO_ERROR;
}
diff --git a/subversion/libsvn_fs/editor.c b/subversion/libsvn_fs/editor.c
new file mode 100644
index 0000000..a75f210
--- /dev/null
+++ b/subversion/libsvn_fs/editor.c
@@ -0,0 +1,850 @@
+/*
+ * editor.c: Editor for modifying FS transactions
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#include <apr_pools.h>
+
+#include "svn_types.h"
+#include "svn_error.h"
+#include "svn_pools.h"
+#include "svn_fs.h"
+#include "svn_props.h"
+#include "svn_path.h"
+
+#include "svn_private_config.h"
+
+#include "fs-loader.h"
+
+#include "private/svn_fspath.h"
+#include "private/svn_fs_private.h"
+#include "private/svn_editor.h"
+
+
+struct edit_baton {
+ /* The transaction associated with this editor. */
+ svn_fs_txn_t *txn;
+
+ /* Has this editor been completed? */
+ svn_boolean_t completed;
+
+ /* We sometimes need the cancellation beyond what svn_editor_t provides */
+ svn_cancel_func_t cancel_func;
+ void *cancel_baton;
+
+ /* The pool that the txn lives within. When we create a ROOT, it will
+ be allocated within a subpool of this. The root will be closed in
+ complete/abort and that subpool will be destroyed.
+
+ This pool SHOULD NOT be used for any allocations. */
+ apr_pool_t *txn_pool;
+
+ /* This is the root from the txn. Use get_root() to fetch/create this
+ member as appropriate. */
+ svn_fs_root_t *root;
+};
+
+#define FSPATH(relpath, pool) apr_pstrcat(pool, "/", relpath, NULL)
+#define UNUSED(x) ((void)(x))
+
+
+static svn_error_t *
+get_root(svn_fs_root_t **root,
+ struct edit_baton *eb)
+{
+ if (eb->root == NULL)
+ SVN_ERR(svn_fs_txn_root(&eb->root, eb->txn, eb->txn_pool));
+ *root = eb->root;
+ return SVN_NO_ERROR;
+}
+
+
+/* Apply each property in PROPS to the node at FSPATH in ROOT. */
+static svn_error_t *
+add_new_props(svn_fs_root_t *root,
+ const char *fspath,
+ apr_hash_t *props,
+ apr_pool_t *scratch_pool)
+{
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ apr_hash_index_t *hi;
+
+ /* ### it would be nice to have svn_fs_set_node_props(). but since we
+ ### don't... add each property to the node. this is a new node, so
+ ### we don't need to worry about deleting props. just adding. */
+
+ for (hi = apr_hash_first(scratch_pool, props); hi;
+ hi = apr_hash_next(hi))
+ {
+ const char *name = svn__apr_hash_index_key(hi);
+ const svn_string_t *value = svn__apr_hash_index_val(hi);
+
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(svn_fs_change_node_prop(root, fspath, name, value, iterpool));
+ }
+
+ svn_pool_destroy(iterpool);
+ return SVN_NO_ERROR;
+}
+
+
+static svn_error_t *
+alter_props(svn_fs_root_t *root,
+ const char *fspath,
+ apr_hash_t *props,
+ apr_pool_t *scratch_pool)
+{
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ apr_hash_t *old_props;
+ apr_array_header_t *propdiffs;
+ int i;
+
+ SVN_ERR(svn_fs_node_proplist(&old_props, root, fspath, scratch_pool));
+
+ SVN_ERR(svn_prop_diffs(&propdiffs, props, old_props, scratch_pool));
+
+ for (i = 0; i < propdiffs->nelts; ++i)
+ {
+ const svn_prop_t *prop = &APR_ARRAY_IDX(propdiffs, i, svn_prop_t);
+
+ svn_pool_clear(iterpool);
+
+ /* Add, change, or delete properties. */
+ SVN_ERR(svn_fs_change_node_prop(root, fspath, prop->name, prop->value,
+ iterpool));
+ }
+
+ svn_pool_destroy(iterpool);
+ return SVN_NO_ERROR;
+}
+
+
+static svn_error_t *
+set_text(svn_fs_root_t *root,
+ const char *fspath,
+ const svn_checksum_t *checksum,
+ svn_stream_t *contents,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
+{
+ svn_stream_t *fs_contents;
+
+ /* ### We probably don't have an MD5 checksum, so no digest is available
+ ### for svn_fs_apply_text() to validate. It would be nice to have an
+ ### FS API that takes our CHECKSUM/CONTENTS pair (and PROPS!). */
+ SVN_ERR(svn_fs_apply_text(&fs_contents, root, fspath,
+ NULL /* result_checksum */,
+ scratch_pool));
+ SVN_ERR(svn_stream_copy3(contents, fs_contents,
+ cancel_func, cancel_baton,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+
+/* The caller wants to modify REVISION of FSPATH. Is that allowed? */
+static svn_error_t *
+can_modify(svn_fs_root_t *txn_root,
+ const char *fspath,
+ svn_revnum_t revision,
+ apr_pool_t *scratch_pool)
+{
+ svn_revnum_t created_rev;
+
+ /* Out-of-dateness check: compare the created-rev of the node
+ in the txn against the created-rev of FSPATH. */
+ SVN_ERR(svn_fs_node_created_rev(&created_rev, txn_root, fspath,
+ scratch_pool));
+
+ /* Uncommitted nodes (eg. a descendent of a copy/move/rotate destination)
+ have no (committed) revision number. Let the caller go ahead and
+ modify these nodes.
+
+ Note: strictly speaking, they might be performing an "illegal" edit
+ in certain cases, but let's just assume they're Good Little Boys.
+
+ If CREATED_REV is invalid, that means it's already mutable in the
+ txn, which means it has already passed this out-of-dateness check.
+ (Usually, this happens when looking at a parent directory of an
+ already-modified node) */
+ if (!SVN_IS_VALID_REVNUM(created_rev))
+ return SVN_NO_ERROR;
+
+ /* If the node is immutable (has a revision), then the caller should
+ have supplied a valid revision number [that they expect to change].
+ The checks further below will determine the out-of-dateness of the
+ specified revision. */
+ /* ### ugh. descendents of copy/move/rotate destinations carry along
+ ### their original immutable state and (thus) a valid CREATED_REV.
+ ### but they are logically uncommitted, so the caller will pass
+ ### SVN_INVALID_REVNUM. (technically, the caller could provide
+ ### ORIGINAL_REV, but that is semantically incorrect for the Ev2
+ ### API).
+ ###
+ ### for now, we will assume the caller knows what they are doing
+ ### and an invalid revision implies such a descendent. in the
+ ### future, we could examine the ancestor chain looking for a
+ ### copy/move/rotate-here node and allow the modification (and the
+ ### converse: if no such ancestor, the caller must specify the
+ ### correct/intended revision to modify).
+ */
+#if 1
+ if (!SVN_IS_VALID_REVNUM(revision))
+ return SVN_NO_ERROR;
+#else
+ if (!SVN_IS_VALID_REVNUM(revision))
+ /* ### use a custom error code? */
+ return svn_error_createf(SVN_ERR_INCORRECT_PARAMS, NULL,
+ _("Revision for modifying '%s' is required"),
+ fspath);
+#endif
+
+ if (revision < created_rev)
+ {
+ /* We asked to change a node that is *older* than what we found
+ in the transaction. The client is out of date. */
+ return svn_error_createf(SVN_ERR_FS_OUT_OF_DATE, NULL,
+ _("'%s' is out of date; try updating"),
+ fspath);
+ }
+
+ if (revision > created_rev)
+ {
+ /* We asked to change a node that is *newer* than what we found
+ in the transaction. Given that the transaction was based off
+ of 'youngest', then either:
+ - the caller asked to modify a future node
+ - the caller has committed more revisions since this txn
+ was constructed, and is asking to modify a node in one
+ of those new revisions.
+ In either case, the node may not have changed in those new
+ revisions; use the node's ID to determine this case. */
+ const svn_fs_id_t *txn_noderev_id;
+ svn_fs_root_t *rev_root;
+ const svn_fs_id_t *new_noderev_id;
+
+ /* The ID of the node that we would be modifying in the txn */
+ SVN_ERR(svn_fs_node_id(&txn_noderev_id, txn_root, fspath,
+ scratch_pool));
+
+ /* Get the ID from the future/new revision. */
+ SVN_ERR(svn_fs_revision_root(&rev_root, svn_fs_root_fs(txn_root),
+ revision, scratch_pool));
+ SVN_ERR(svn_fs_node_id(&new_noderev_id, rev_root, fspath,
+ scratch_pool));
+ svn_fs_close_root(rev_root);
+
+ /* Has the target node changed in the future? */
+ if (svn_fs_compare_ids(txn_noderev_id, new_noderev_id) != 0)
+ {
+ /* Restarting the commit will base the txn on the future/new
+ revision, allowing the modification at REVISION. */
+ /* ### use a custom error code */
+ return svn_error_createf(SVN_ERR_FS_CONFLICT, NULL,
+ _("'%s' has been modified since the "
+ "commit began (restart the commit)"),
+ fspath);
+ }
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
+/* Can we create a node at FSPATH in TXN_ROOT? If something already exists
+ at that path, then the client MAY be out of date. We then have to see if
+ the path was created/modified in this transaction. IOW, it is new and
+ can be replaced without problem.
+
+ Note: the editor protocol disallows double-modifications. This is to
+ ensure somebody does not accidentally overwrite another file due to
+ being out-of-date. */
+static svn_error_t *
+can_create(svn_fs_root_t *txn_root,
+ const char *fspath,
+ apr_pool_t *scratch_pool)
+{
+ svn_node_kind_t kind;
+ const char *cur_fspath;
+
+ SVN_ERR(svn_fs_check_path(&kind, txn_root, fspath, scratch_pool));
+ if (kind == svn_node_none)
+ return SVN_NO_ERROR;
+
+ /* ### I'm not sure if this works perfectly. We might have an ancestor
+ ### that was modified as a result of a change on a cousin. We might
+ ### misinterpret that as a *-here node which brought along this
+ ### child. Need to write a test to verify. We may also be able to
+ ### test the ancestor to determine if it has been *-here in this
+ ### txn, or just a simple modification. */
+
+ /* Are any of the parents copied/moved/rotated-here? */
+ for (cur_fspath = fspath;
+ strlen(cur_fspath) > 1; /* not the root */
+ cur_fspath = svn_fspath__dirname(cur_fspath, scratch_pool))
+ {
+ svn_revnum_t created_rev;
+
+ SVN_ERR(svn_fs_node_created_rev(&created_rev, txn_root, cur_fspath,
+ scratch_pool));
+ if (!SVN_IS_VALID_REVNUM(created_rev))
+ {
+ /* The node has no created revision, meaning it is uncommitted.
+ Thus, it was created in this transaction, or it has already
+ been modified in some way (implying it has already passed a
+ modification check. */
+ /* ### verify the node has been *-here ?? */
+ return SVN_NO_ERROR;
+ }
+ }
+
+ return svn_error_createf(SVN_ERR_FS_OUT_OF_DATE, NULL,
+ _("'%s' already exists, so may be out"
+ " of date; try updating"),
+ fspath);
+}
+
+
+/* This implements svn_editor_cb_add_directory_t */
+static svn_error_t *
+add_directory_cb(void *baton,
+ const char *relpath,
+ const apr_array_header_t *children,
+ apr_hash_t *props,
+ svn_revnum_t replaces_rev,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton *eb = baton;
+ const char *fspath = FSPATH(relpath, scratch_pool);
+ svn_fs_root_t *root;
+
+ /* Note: we ignore CHILDREN. We have no "incomplete" state to worry about,
+ so we don't need to be aware of what children will be created. */
+
+ SVN_ERR(get_root(&root, eb));
+
+ if (SVN_IS_VALID_REVNUM(replaces_rev))
+ {
+ SVN_ERR(can_modify(root, fspath, replaces_rev, scratch_pool));
+ SVN_ERR(svn_fs_delete(root, fspath, scratch_pool));
+ }
+ else
+ {
+ SVN_ERR(can_create(root, fspath, scratch_pool));
+ }
+
+ SVN_ERR(svn_fs_make_dir(root, fspath, scratch_pool));
+ SVN_ERR(add_new_props(root, fspath, props, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+
+/* This implements svn_editor_cb_add_file_t */
+static svn_error_t *
+add_file_cb(void *baton,
+ const char *relpath,
+ const svn_checksum_t *checksum,
+ svn_stream_t *contents,
+ apr_hash_t *props,
+ svn_revnum_t replaces_rev,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton *eb = baton;
+ const char *fspath = FSPATH(relpath, scratch_pool);
+ svn_fs_root_t *root;
+
+ SVN_ERR(get_root(&root, eb));
+
+ if (SVN_IS_VALID_REVNUM(replaces_rev))
+ {
+ SVN_ERR(can_modify(root, fspath, replaces_rev, scratch_pool));
+ SVN_ERR(svn_fs_delete(root, fspath, scratch_pool));
+ }
+ else
+ {
+ SVN_ERR(can_create(root, fspath, scratch_pool));
+ }
+
+ SVN_ERR(svn_fs_make_file(root, fspath, scratch_pool));
+
+ SVN_ERR(set_text(root, fspath, checksum, contents,
+ eb->cancel_func, eb->cancel_baton, scratch_pool));
+ SVN_ERR(add_new_props(root, fspath, props, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+
+/* This implements svn_editor_cb_add_symlink_t */
+static svn_error_t *
+add_symlink_cb(void *baton,
+ const char *relpath,
+ const char *target,
+ apr_hash_t *props,
+ svn_revnum_t replaces_rev,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton *eb = baton;
+ const char *fspath = FSPATH(relpath, scratch_pool);
+ svn_fs_root_t *root;
+
+ SVN_ERR(get_root(&root, eb));
+
+ if (SVN_IS_VALID_REVNUM(replaces_rev))
+ {
+ SVN_ERR(can_modify(root, fspath, replaces_rev, scratch_pool));
+ SVN_ERR(svn_fs_delete(root, fspath, scratch_pool));
+ }
+ else
+ {
+ SVN_ERR(can_create(root, fspath, scratch_pool));
+ }
+
+ /* ### we probably need to construct a file with specific contents
+ ### (until the FS grows some symlink APIs) */
+#if 0
+ SVN_ERR(svn_fs_make_file(root, fspath, scratch_pool));
+ SVN_ERR(svn_fs_apply_text(&fs_contents, root, fspath,
+ NULL /* result_checksum */,
+ scratch_pool));
+ /* ### SVN_ERR(svn_stream_printf(fs_contents, ..., scratch_pool)); */
+ apr_hash_set(props, SVN_PROP_SPECIAL, APR_HASH_KEY_STRING,
+ SVN_PROP_SPECIAL_VALUE);
+
+ SVN_ERR(add_new_props(root, fspath, props, scratch_pool));
+#endif
+
+ SVN__NOT_IMPLEMENTED();
+}
+
+
+/* This implements svn_editor_cb_add_absent_t */
+static svn_error_t *
+add_absent_cb(void *baton,
+ const char *relpath,
+ svn_node_kind_t kind,
+ svn_revnum_t replaces_rev,
+ apr_pool_t *scratch_pool)
+{
+ /* This is a programming error. Code should not attempt to create these
+ kinds of nodes within the FS. */
+ /* ### use a custom error code */
+ return svn_error_create(
+ SVN_ERR_UNSUPPORTED_FEATURE, NULL,
+ _("The filesystem does not support 'absent' nodes"));
+}
+
+
+/* This implements svn_editor_cb_alter_directory_t */
+static svn_error_t *
+alter_directory_cb(void *baton,
+ const char *relpath,
+ svn_revnum_t revision,
+ const apr_array_header_t *children,
+ apr_hash_t *props,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton *eb = baton;
+ const char *fspath = FSPATH(relpath, scratch_pool);
+ svn_fs_root_t *root;
+
+ /* Note: we ignore CHILDREN. We have no "incomplete" state to worry about,
+ so we don't need to be aware of what children will be created. */
+
+ SVN_ERR(get_root(&root, eb));
+ SVN_ERR(can_modify(root, fspath, revision, scratch_pool));
+
+ if (props)
+ SVN_ERR(alter_props(root, fspath, props, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+
+/* This implements svn_editor_cb_alter_file_t */
+static svn_error_t *
+alter_file_cb(void *baton,
+ const char *relpath,
+ svn_revnum_t revision,
+ apr_hash_t *props,
+ const svn_checksum_t *checksum,
+ svn_stream_t *contents,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton *eb = baton;
+ const char *fspath = FSPATH(relpath, scratch_pool);
+ svn_fs_root_t *root;
+
+ SVN_ERR(get_root(&root, eb));
+ SVN_ERR(can_modify(root, fspath, revision, scratch_pool));
+
+ if (contents != NULL)
+ {
+ SVN_ERR_ASSERT(checksum != NULL);
+ SVN_ERR(set_text(root, fspath, checksum, contents,
+ eb->cancel_func, eb->cancel_baton, scratch_pool));
+ }
+
+ if (props != NULL)
+ {
+ SVN_ERR(alter_props(root, fspath, props, scratch_pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
+/* This implements svn_editor_cb_alter_symlink_t */
+static svn_error_t *
+alter_symlink_cb(void *baton,
+ const char *relpath,
+ svn_revnum_t revision,
+ apr_hash_t *props,
+ const char *target,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton *eb = baton;
+
+ UNUSED(eb); SVN__NOT_IMPLEMENTED();
+}
+
+
+/* This implements svn_editor_cb_delete_t */
+static svn_error_t *
+delete_cb(void *baton,
+ const char *relpath,
+ svn_revnum_t revision,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton *eb = baton;
+ const char *fspath = FSPATH(relpath, scratch_pool);
+ svn_fs_root_t *root;
+
+ SVN_ERR(get_root(&root, eb));
+ SVN_ERR(can_modify(root, fspath, revision, scratch_pool));
+
+ SVN_ERR(svn_fs_delete(root, fspath, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+
+/* This implements svn_editor_cb_copy_t */
+static svn_error_t *
+copy_cb(void *baton,
+ const char *src_relpath,
+ svn_revnum_t src_revision,
+ const char *dst_relpath,
+ svn_revnum_t replaces_rev,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton *eb = baton;
+ const char *src_fspath = FSPATH(src_relpath, scratch_pool);
+ const char *dst_fspath = FSPATH(dst_relpath, scratch_pool);
+ svn_fs_root_t *root;
+ svn_fs_root_t *src_root;
+
+ SVN_ERR(get_root(&root, eb));
+
+ /* Check if we can we replace the maybe-specified destination (revision). */
+ if (SVN_IS_VALID_REVNUM(replaces_rev))
+ {
+ SVN_ERR(can_modify(root, dst_fspath, replaces_rev, scratch_pool));
+ SVN_ERR(svn_fs_delete(root, dst_fspath, scratch_pool));
+ }
+ else
+ {
+ SVN_ERR(can_create(root, dst_fspath, scratch_pool));
+ }
+
+ SVN_ERR(svn_fs_revision_root(&src_root, svn_fs_root_fs(root), src_revision,
+ scratch_pool));
+ SVN_ERR(svn_fs_copy(src_root, src_fspath, root, dst_fspath, scratch_pool));
+ svn_fs_close_root(src_root);
+
+ return SVN_NO_ERROR;
+}
+
+
+/* This implements svn_editor_cb_move_t */
+static svn_error_t *
+move_cb(void *baton,
+ const char *src_relpath,
+ svn_revnum_t src_revision,
+ const char *dst_relpath,
+ svn_revnum_t replaces_rev,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton *eb = baton;
+ const char *src_fspath = FSPATH(src_relpath, scratch_pool);
+ const char *dst_fspath = FSPATH(dst_relpath, scratch_pool);
+ svn_fs_root_t *root;
+ svn_fs_root_t *src_root;
+
+ SVN_ERR(get_root(&root, eb));
+
+ /* Check if we delete the specified source (revision), and can we replace
+ the maybe-specified destination (revision). */
+ SVN_ERR(can_modify(root, src_fspath, src_revision, scratch_pool));
+ if (SVN_IS_VALID_REVNUM(replaces_rev))
+ {
+ SVN_ERR(can_modify(root, dst_fspath, replaces_rev, scratch_pool));
+ SVN_ERR(svn_fs_delete(root, dst_fspath, scratch_pool));
+ }
+ else
+ {
+ SVN_ERR(can_create(root, dst_fspath, scratch_pool));
+ }
+
+ /* ### would be nice to have svn_fs_move() */
+
+ /* Copy the src to the dst. */
+ SVN_ERR(svn_fs_revision_root(&src_root, svn_fs_root_fs(root), src_revision,
+ scratch_pool));
+ SVN_ERR(svn_fs_copy(src_root, src_fspath, root, dst_fspath, scratch_pool));
+ svn_fs_close_root(src_root);
+
+ /* Notice: we're deleting the src repos path from the dst root. */
+ SVN_ERR(svn_fs_delete(root, src_fspath, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+
+/* This implements svn_editor_cb_rotate_t */
+static svn_error_t *
+rotate_cb(void *baton,
+ const apr_array_header_t *relpaths,
+ const apr_array_header_t *revisions,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton *eb = baton;
+
+ UNUSED(eb); SVN__NOT_IMPLEMENTED();
+}
+
+
+/* This implements svn_editor_cb_complete_t */
+static svn_error_t *
+complete_cb(void *baton,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton *eb = baton;
+
+ /* Watch out for a following call to svn_fs_editor_commit(). Note that
+ we are likely here because svn_fs_editor_commit() was called, and it
+ invoked svn_editor_complete(). */
+ eb->completed = TRUE;
+
+ if (eb->root != NULL)
+ {
+ svn_fs_close_root(eb->root);
+ eb->root = NULL;
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
+/* This implements svn_editor_cb_abort_t */
+static svn_error_t *
+abort_cb(void *baton,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton *eb = baton;
+ svn_error_t *err;
+
+ /* Don't allow a following call to svn_fs_editor_commit(). */
+ eb->completed = TRUE;
+
+ if (eb->root != NULL)
+ {
+ svn_fs_close_root(eb->root);
+ eb->root = NULL;
+ }
+
+ /* ### should we examine the error and attempt svn_fs_purge_txn() ? */
+ err = svn_fs_abort_txn(eb->txn, scratch_pool);
+
+ /* For safety, clear the now-useless txn. */
+ eb->txn = NULL;
+
+ return svn_error_trace(err);
+}
+
+
+static svn_error_t *
+make_editor(svn_editor_t **editor,
+ svn_fs_txn_t *txn,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ static const svn_editor_cb_many_t editor_cbs = {
+ add_directory_cb,
+ add_file_cb,
+ add_symlink_cb,
+ add_absent_cb,
+ alter_directory_cb,
+ alter_file_cb,
+ alter_symlink_cb,
+ delete_cb,
+ copy_cb,
+ move_cb,
+ rotate_cb,
+ complete_cb,
+ abort_cb
+ };
+ struct edit_baton *eb = apr_pcalloc(result_pool, sizeof(*eb));
+
+ eb->txn = txn;
+ eb->cancel_func = cancel_func;
+ eb->cancel_baton = cancel_baton;
+ eb->txn_pool = result_pool;
+
+ SVN_ERR(svn_editor_create(editor, eb, cancel_func, cancel_baton,
+ result_pool, scratch_pool));
+ SVN_ERR(svn_editor_setcb_many(*editor, &editor_cbs, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_fs__editor_create(svn_editor_t **editor,
+ const char **txn_name,
+ svn_fs_t *fs,
+ apr_uint32_t flags,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_revnum_t revision;
+ svn_fs_txn_t *txn;
+
+ SVN_ERR(svn_fs_youngest_rev(&revision, fs, scratch_pool));
+ SVN_ERR(svn_fs_begin_txn2(&txn, fs, revision, flags, result_pool));
+ SVN_ERR(svn_fs_txn_name(txn_name, txn, result_pool));
+ return svn_error_trace(make_editor(editor, txn,
+ cancel_func, cancel_baton,
+ result_pool, scratch_pool));
+}
+
+
+svn_error_t *
+svn_fs__editor_create_for(svn_editor_t **editor,
+ svn_fs_t *fs,
+ const char *txn_name,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_fs_txn_t *txn;
+
+ SVN_ERR(svn_fs_open_txn(&txn, fs, txn_name, result_pool));
+ return svn_error_trace(make_editor(editor, txn,
+ cancel_func, cancel_baton,
+ result_pool, scratch_pool));
+}
+
+
+svn_error_t *
+svn_fs__editor_commit(svn_revnum_t *revision,
+ svn_error_t **post_commit_err,
+ const char **conflict_path,
+ svn_editor_t *editor,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton *eb = svn_editor_get_baton(editor);
+ const char *inner_conflict_path;
+ svn_error_t *err = NULL;
+
+ /* make sure people are using the correct sequencing. */
+ if (eb->completed)
+ return svn_error_create(SVN_ERR_FS_INCORRECT_EDITOR_COMPLETION,
+ NULL, NULL);
+
+ *revision = SVN_INVALID_REVNUM;
+ *post_commit_err = NULL;
+ *conflict_path = NULL;
+
+ /* Clean up internal resources (eg. eb->root). This also allows the
+ editor infrastructure to know this editor is "complete". */
+ err = svn_editor_complete(editor);
+
+ /* Note: docco for svn_fs_commit_txn() states that CONFLICT_PATH will
+ be allocated in the txn's pool. But it lies. Regardless, we want
+ it placed into RESULT_POOL. */
+
+ if (!err)
+ err = svn_fs_commit_txn(&inner_conflict_path,
+ revision,
+ eb->txn,
+ scratch_pool);
+ if (SVN_IS_VALID_REVNUM(*revision))
+ {
+ if (err)
+ {
+ /* Case 3. ERR is a post-commit (cleanup) error. */
+
+ /* Pass responsibility via POST_COMMIT_ERR. */
+ *post_commit_err = err;
+ err = SVN_NO_ERROR;
+ }
+ /* else: Case 1. */
+ }
+ else
+ {
+ SVN_ERR_ASSERT(err != NULL);
+ if (err->apr_err == SVN_ERR_FS_CONFLICT)
+ {
+ /* Case 2. */
+
+ /* Copy this into the correct pool (see note above). */
+ *conflict_path = apr_pstrdup(result_pool, inner_conflict_path);
+
+ /* Return sucess. The caller should inspect CONFLICT_PATH to
+ determine this particular case. */
+ svn_error_clear(err);
+ err = SVN_NO_ERROR;
+ }
+ /* else: Case 4. */
+
+ /* Abort the TXN. Nobody wants to use it. */
+ /* ### should we examine the error and attempt svn_fs_purge_txn() ? */
+ err = svn_error_compose_create(
+ err,
+ svn_fs_abort_txn(eb->txn, scratch_pool));
+ }
+
+ /* For safety, clear the now-useless txn. */
+ eb->txn = NULL;
+
+ return svn_error_trace(err);
+}
diff --git a/subversion/libsvn_fs/fs-loader.c b/subversion/libsvn_fs/fs-loader.c
index e9db910..336b84f 100644
--- a/subversion/libsvn_fs/fs-loader.c
+++ b/subversion/libsvn_fs/fs-loader.c
@@ -28,7 +28,9 @@
#include <apr_md5.h>
#include <apr_thread_mutex.h>
#include <apr_uuid.h>
+#include <apr_strings.h>
+#include "svn_hash.h"
#include "svn_ctype.h"
#include "svn_types.h"
#include "svn_dso.h"
@@ -43,9 +45,10 @@
#include "private/svn_fs_private.h"
#include "private/svn_fs_util.h"
#include "private/svn_utf_private.h"
+#include "private/svn_mutex.h"
+#include "private/svn_subr_private.h"
#include "fs-loader.h"
-#include "svn_hash.h"
/* This is defined by configure on platforms which use configure, but
we need to define a fallback for Windows. */
@@ -58,34 +61,43 @@
/* A pool common to all FS objects. See the documentation on the
open/create functions in fs-loader.h and for svn_fs_initialize(). */
static apr_pool_t *common_pool;
-#if APR_HAS_THREADS
-static apr_thread_mutex_t *common_pool_lock;
-#endif
+svn_mutex__t *common_pool_lock;
/* --- Utility functions for the loader --- */
-static const struct fs_type_defn {
+struct fs_type_defn {
const char *fs_type;
const char *fsap_name;
fs_init_func_t initfunc;
-} fs_modules[] = {
+ struct fs_type_defn *next;
+};
+
+static struct fs_type_defn base_defn =
{
SVN_FS_TYPE_BDB, "base",
#ifdef SVN_LIBSVN_FS_LINKS_FS_BASE
- svn_fs_base__init
+ svn_fs_base__init,
+#else
+ NULL,
#endif
- },
+ NULL /* End of static list: this needs to be reset to NULL if the
+ common_pool used when setting it has been cleared. */
+ };
+static struct fs_type_defn fsfs_defn =
{
SVN_FS_TYPE_FSFS, "fs",
#ifdef SVN_LIBSVN_FS_LINKS_FS_FS
- svn_fs_fs__init
+ svn_fs_fs__init,
+#else
+ NULL,
#endif
- },
+ &base_defn
+ };
+
+static struct fs_type_defn *fs_modules = &fsfs_defn;
- { NULL }
-};
static svn_error_t *
load_module(fs_init_func_t *initfunc, const char *name, apr_pool_t *pool)
@@ -99,9 +111,18 @@ load_module(fs_init_func_t *initfunc, const char *name, apr_pool_t *pool)
const char *libname;
const char *funcname;
apr_status_t status;
-
- libname = apr_psprintf(pool, "libsvn_fs_%s-%d.so.0",
- name, SVN_VER_MAJOR);
+ const char *p;
+
+ /* Demand a simple alphanumeric name so that the generated DSO
+ name is sensible. */
+ for (p = name; *p; ++p)
+ if (!svn_ctype_isalnum(*p))
+ return svn_error_createf(SVN_ERR_FS_UNKNOWN_FS_TYPE, NULL,
+ _("Invalid name for FS type '%s'"),
+ name);
+
+ libname = apr_psprintf(pool, "libsvn_fs_%s-%d.so.%d",
+ name, SVN_VER_MAJOR, SVN_SOVERSION);
funcname = apr_psprintf(pool, "svn_fs_%s__init", name);
/* Find/load the specified library. If we get an error, assume
@@ -124,30 +145,6 @@ load_module(fs_init_func_t *initfunc, const char *name, apr_pool_t *pool)
return SVN_NO_ERROR;
}
-static svn_error_t *
-acquire_fs_mutex(void)
-{
-#if APR_HAS_THREADS
- apr_status_t status;
- status = apr_thread_mutex_lock(common_pool_lock);
- if (status)
- return svn_error_wrap_apr(status, _("Can't grab FS mutex"));
-#endif
- return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-release_fs_mutex(void)
-{
-#if APR_HAS_THREADS
- apr_status_t status;
- status = apr_thread_mutex_unlock(common_pool_lock);
- if (status)
- return svn_error_wrap_apr(status, _("Can't ungrab FS mutex"));
-#endif
- return SVN_NO_ERROR;
-}
-
/* Fetch a library vtable by a pointer into the library definitions array. */
static svn_error_t *
get_library_vtable_direct(fs_library_vtable_t **vtable,
@@ -168,9 +165,6 @@ get_library_vtable_direct(fs_library_vtable_t **vtable,
fst->fs_type);
{
- svn_error_t *err;
- svn_error_t *err2;
-
/* Per our API compatibility rules, we cannot ensure that
svn_fs_initialize is called by the application. If not, we
cannot create the common pool and lock in a thread-safe fashion,
@@ -183,16 +177,8 @@ get_library_vtable_direct(fs_library_vtable_t **vtable,
/* Invoke the FS module's initfunc function with the common
pool protected by a lock. */
- SVN_ERR(acquire_fs_mutex());
- err = initfunc(my_version, vtable, common_pool);
- err2 = release_fs_mutex();
- if (err)
- {
- svn_error_clear(err2);
- return err;
- }
- if (err2)
- return err2;
+ SVN_MUTEX__WITH_LOCK(common_pool_lock,
+ initfunc(my_version, vtable, common_pool));
}
fs_version = (*vtable)->get_version();
if (!svn_ver_equal(my_version, fs_version))
@@ -208,21 +194,77 @@ get_library_vtable_direct(fs_library_vtable_t **vtable,
return SVN_NO_ERROR;
}
+#if defined(SVN_USE_DSO) && APR_HAS_DSO
+/* Return *FST for the third party FS_TYPE */
+static svn_error_t *
+get_or_allocate_third(struct fs_type_defn **fst,
+ const char *fs_type)
+{
+ while (*fst)
+ {
+ if (strcmp(fs_type, (*fst)->fs_type) == 0)
+ return SVN_NO_ERROR;
+ fst = &(*fst)->next;
+ }
+
+ *fst = apr_palloc(common_pool, sizeof(struct fs_type_defn));
+ (*fst)->fs_type = apr_pstrdup(common_pool, fs_type);
+ (*fst)->fsap_name = (*fst)->fs_type;
+ (*fst)->initfunc = NULL;
+ (*fst)->next = NULL;
+
+ return SVN_NO_ERROR;
+}
+#endif
+
/* Fetch a library vtable by FS type. */
static svn_error_t *
get_library_vtable(fs_library_vtable_t **vtable, const char *fs_type,
apr_pool_t *pool)
{
- const struct fs_type_defn *fst;
+ struct fs_type_defn **fst = &fs_modules;
+ svn_boolean_t known = FALSE;
- for (fst = fs_modules; fst->fs_type; fst++)
+ /* There are two FS module definitions known at compile time. We
+ want to check these without any locking overhead even when
+ dynamic third party modules are enabled. The third party modules
+ cannot be checked until the lock is held. */
+ if (strcmp(fs_type, (*fst)->fs_type) == 0)
+ known = TRUE;
+ else
{
- if (strcmp(fs_type, fst->fs_type) == 0)
- return get_library_vtable_direct(vtable, fst, pool);
+ fst = &(*fst)->next;
+ if (strcmp(fs_type, (*fst)->fs_type) == 0)
+ known = TRUE;
}
- return svn_error_createf(SVN_ERR_FS_UNKNOWN_FS_TYPE, NULL,
- _("Unknown FS type '%s'"), fs_type);
+#if defined(SVN_USE_DSO) && APR_HAS_DSO
+ /* Third party FS modules that are unknown at compile time.
+
+ A third party FS is identified by the file fs-type containing a
+ third party name, say "foo". The loader will load the DSO with
+ the name "libsvn_fs_foo" and use the entry point with the name
+ "svn_fs_foo__init".
+
+ Note: the BDB and FSFS modules don't follow this naming scheme
+ and this allows them to be used to test the third party loader.
+ Change the content of fs-type to "base" in a BDB filesystem or to
+ "fs" in an FSFS filesystem and they will be loaded as third party
+ modules. */
+ if (!known)
+ {
+ fst = &(*fst)->next;
+ if (!common_pool) /* Best-effort init, see get_library_vtable_direct. */
+ SVN_ERR(svn_fs_initialize(NULL));
+ SVN_MUTEX__WITH_LOCK(common_pool_lock,
+ get_or_allocate_third(fst, fs_type));
+ known = TRUE;
+ }
+#endif
+ if (!known)
+ return svn_error_createf(SVN_ERR_FS_UNKNOWN_FS_TYPE, NULL,
+ _("Unknown FS type '%s'"), fs_type);
+ return get_library_vtable_direct(vtable, *fst, pool);
}
svn_error_t *
@@ -303,30 +345,19 @@ write_fs_type(const char *path, const char *fs_type, apr_pool_t *pool)
static apr_status_t uninit(void *data)
{
common_pool = NULL;
-#if APR_HAS_THREADS
- common_pool_lock = NULL;
-#endif
return APR_SUCCESS;
}
svn_error_t *
svn_fs_initialize(apr_pool_t *pool)
{
-#if APR_HAS_THREADS
- apr_status_t status;
-#endif
-
/* Protect against multiple calls. */
if (common_pool)
return SVN_NO_ERROR;
common_pool = svn_pool_create(pool);
-#if APR_HAS_THREADS
- status = apr_thread_mutex_create(&common_pool_lock,
- APR_THREAD_MUTEX_DEFAULT, common_pool);
- if (status)
- return svn_error_wrap_apr(status, _("Can't allocate FS mutex"));
-#endif
+ base_defn.next = NULL;
+ SVN_ERR(svn_mutex__init(&common_pool_lock, TRUE, common_pool));
/* ### This won't work if POOL is NULL and libsvn_fs is loaded as a DSO
### (via libsvn_ra_local say) since the global common_pool will live
@@ -384,6 +415,7 @@ fs_new(apr_hash_t *fs_config, apr_pool_t *pool)
fs->access_ctx = NULL;
fs->vtable = NULL;
fs->fsap_data = NULL;
+ fs->uuid = NULL;
return fs;
}
@@ -405,8 +437,6 @@ svn_error_t *
svn_fs_create(svn_fs_t **fs_p, const char *path, apr_hash_t *fs_config,
apr_pool_t *pool)
{
- svn_error_t *err;
- svn_error_t *err2;
fs_library_vtable_t *vtable;
const char *fs_type = svn_hash__get_cstring(fs_config,
@@ -420,57 +450,66 @@ svn_fs_create(svn_fs_t **fs_p, const char *path, apr_hash_t *fs_config,
/* Perform the actual creation. */
*fs_p = fs_new(fs_config, pool);
- SVN_ERR(acquire_fs_mutex());
- err = vtable->create(*fs_p, path, pool, common_pool);
- err2 = release_fs_mutex();
- if (err)
- {
- svn_error_clear(err2);
- return svn_error_trace(err);
- }
- return svn_error_trace(err2);
+
+ SVN_MUTEX__WITH_LOCK(common_pool_lock,
+ vtable->create(*fs_p, path, pool, common_pool));
+ SVN_ERR(vtable->set_svn_fs_open(*fs_p, svn_fs_open));
+
+ return SVN_NO_ERROR;
}
svn_error_t *
svn_fs_open(svn_fs_t **fs_p, const char *path, apr_hash_t *fs_config,
apr_pool_t *pool)
{
- svn_error_t *err;
- svn_error_t *err2;
fs_library_vtable_t *vtable;
SVN_ERR(fs_library_vtable(&vtable, path, pool));
*fs_p = fs_new(fs_config, pool);
- SVN_ERR(acquire_fs_mutex());
- err = vtable->open_fs(*fs_p, path, pool, common_pool);
- err2 = release_fs_mutex();
- if (err)
- {
- svn_error_clear(err2);
- return svn_error_trace(err);
- }
- return svn_error_trace(err2);
+ SVN_MUTEX__WITH_LOCK(common_pool_lock,
+ vtable->open_fs(*fs_p, path, pool, common_pool));
+ SVN_ERR(vtable->set_svn_fs_open(*fs_p, svn_fs_open));
+
+ return SVN_NO_ERROR;
}
svn_error_t *
svn_fs_upgrade(const char *path, apr_pool_t *pool)
{
- svn_error_t *err;
- svn_error_t *err2;
fs_library_vtable_t *vtable;
svn_fs_t *fs;
SVN_ERR(fs_library_vtable(&vtable, path, pool));
fs = fs_new(NULL, pool);
- SVN_ERR(acquire_fs_mutex());
- err = vtable->upgrade_fs(fs, path, pool, common_pool);
- err2 = release_fs_mutex();
- if (err)
- {
- svn_error_clear(err2);
- return svn_error_trace(err);
- }
- return svn_error_trace(err2);
+
+ SVN_MUTEX__WITH_LOCK(common_pool_lock,
+ vtable->upgrade_fs(fs, path, pool, common_pool));
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_fs_verify(const char *path,
+ apr_hash_t *fs_config,
+ svn_revnum_t start,
+ svn_revnum_t end,
+ svn_fs_progress_notify_func_t notify_func,
+ void *notify_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *pool)
+{
+ fs_library_vtable_t *vtable;
+ svn_fs_t *fs;
+
+ SVN_ERR(fs_library_vtable(&vtable, path, pool));
+ fs = fs_new(fs_config, pool);
+
+ SVN_MUTEX__WITH_LOCK(common_pool_lock,
+ vtable->verify_fs(fs, path, start, end,
+ notify_func, notify_baton,
+ cancel_func, cancel_baton,
+ pool, common_pool));
+ return SVN_NO_ERROR;
}
const char *
@@ -479,6 +518,15 @@ svn_fs_path(svn_fs_t *fs, apr_pool_t *pool)
return apr_pstrdup(pool, fs->path);
}
+apr_hash_t *
+svn_fs_config(svn_fs_t *fs, apr_pool_t *pool)
+{
+ if (fs->config)
+ return apr_hash_copy(pool, fs->config);
+
+ return NULL;
+}
+
svn_error_t *
svn_fs_delete_fs(const char *path, apr_pool_t *pool)
{
@@ -489,16 +537,72 @@ svn_fs_delete_fs(const char *path, apr_pool_t *pool)
}
svn_error_t *
-svn_fs_hotcopy(const char *src_path, const char *dest_path,
- svn_boolean_t clean, apr_pool_t *pool)
+svn_fs_hotcopy2(const char *src_path, const char *dst_path,
+ svn_boolean_t clean, svn_boolean_t incremental,
+ svn_cancel_func_t cancel_func, void *cancel_baton,
+ apr_pool_t *scratch_pool)
{
fs_library_vtable_t *vtable;
- const char *fs_type;
+ const char *src_fs_type;
+ svn_fs_t *src_fs;
+ svn_fs_t *dst_fs;
+ const char *dst_fs_type;
+ svn_node_kind_t dst_kind;
+
+ if (strcmp(src_path, dst_path) == 0)
+ return svn_error_create(SVN_ERR_INCORRECT_PARAMS, NULL,
+ _("Hotcopy source and destination are equal"));
+
+ SVN_ERR(svn_fs_type(&src_fs_type, src_path, scratch_pool));
+ SVN_ERR(get_library_vtable(&vtable, src_fs_type, scratch_pool));
+ src_fs = fs_new(NULL, scratch_pool);
+ dst_fs = fs_new(NULL, scratch_pool);
+
+ SVN_ERR(svn_io_check_path(dst_path, &dst_kind, scratch_pool));
+ if (dst_kind == svn_node_file)
+ return svn_error_createf(SVN_ERR_NODE_UNEXPECTED_KIND, NULL,
+ _("'%s' already exists and is a file"),
+ svn_dirent_local_style(dst_path,
+ scratch_pool));
+ if (dst_kind == svn_node_unknown)
+ return svn_error_createf(SVN_ERR_NODE_UNEXPECTED_KIND, NULL,
+ _("'%s' already exists and has an unknown "
+ "node kind"),
+ svn_dirent_local_style(dst_path,
+ scratch_pool));
+ if (dst_kind == svn_node_dir)
+ {
+ svn_node_kind_t type_file_kind;
- SVN_ERR(svn_fs_type(&fs_type, src_path, pool));
- SVN_ERR(get_library_vtable(&vtable, fs_type, pool));
- SVN_ERR(vtable->hotcopy(src_path, dest_path, clean, pool));
- return svn_error_trace(write_fs_type(dest_path, fs_type, pool));
+ SVN_ERR(svn_io_check_path(svn_dirent_join(dst_path,
+ FS_TYPE_FILENAME,
+ scratch_pool),
+ &type_file_kind, scratch_pool));
+ if (type_file_kind != svn_node_none)
+ {
+ SVN_ERR(svn_fs_type(&dst_fs_type, dst_path, scratch_pool));
+ if (strcmp(src_fs_type, dst_fs_type) != 0)
+ return svn_error_createf(
+ SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("The filesystem type of the hotcopy source "
+ "('%s') does not match the filesystem "
+ "type of the hotcopy destination ('%s')"),
+ src_fs_type, dst_fs_type);
+ }
+ }
+
+ SVN_ERR(vtable->hotcopy(src_fs, dst_fs, src_path, dst_path, clean,
+ incremental, cancel_func, cancel_baton,
+ scratch_pool));
+ return svn_error_trace(write_fs_type(dst_path, src_fs_type, scratch_pool));
+}
+
+svn_error_t *
+svn_fs_hotcopy(const char *src_path, const char *dest_path,
+ svn_boolean_t clean, apr_pool_t *pool)
+{
+ return svn_error_trace(svn_fs_hotcopy2(src_path, dest_path, clean,
+ FALSE, NULL, NULL, pool));
}
svn_error_t *
@@ -509,23 +613,17 @@ svn_fs_pack(const char *path,
void *cancel_baton,
apr_pool_t *pool)
{
- svn_error_t *err;
- svn_error_t *err2;
fs_library_vtable_t *vtable;
svn_fs_t *fs;
SVN_ERR(fs_library_vtable(&vtable, path, pool));
fs = fs_new(NULL, pool);
- SVN_ERR(acquire_fs_mutex());
- err = vtable->pack_fs(fs, path, notify_func, notify_baton,
- cancel_func, cancel_baton, pool);
- err2 = release_fs_mutex();
- if (err)
- {
- svn_error_clear(err2);
- return svn_error_trace(err);
- }
- return svn_error_trace(err2);
+
+ SVN_MUTEX__WITH_LOCK(common_pool_lock,
+ vtable->pack_fs(fs, path, notify_func, notify_baton,
+ cancel_func, cancel_baton, pool,
+ common_pool));
+ return SVN_NO_ERROR;
}
svn_error_t *
@@ -533,24 +631,38 @@ svn_fs_recover(const char *path,
svn_cancel_func_t cancel_func, void *cancel_baton,
apr_pool_t *pool)
{
- svn_error_t *err;
- svn_error_t *err2;
fs_library_vtable_t *vtable;
svn_fs_t *fs;
SVN_ERR(fs_library_vtable(&vtable, path, pool));
fs = fs_new(NULL, pool);
- SVN_ERR(acquire_fs_mutex());
- err = vtable->open_fs_for_recovery(fs, path, pool, common_pool);
- err2 = release_fs_mutex();
- if (err)
- {
- svn_error_clear(err2);
- return svn_error_trace(err);
- }
- if (! err2)
- err2 = vtable->recover(fs, cancel_func, cancel_baton, pool);
- return svn_error_trace(err2);
+
+ SVN_MUTEX__WITH_LOCK(common_pool_lock,
+ vtable->open_fs_for_recovery(fs, path, pool,
+ common_pool));
+ return svn_error_trace(vtable->recover(fs, cancel_func, cancel_baton,
+ pool));
+}
+
+svn_error_t *
+svn_fs_verify_root(svn_fs_root_t *root,
+ apr_pool_t *scratch_pool)
+{
+ svn_fs_t *fs = root->fs;
+ SVN_ERR(fs->vtable->verify_root(root, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_fs_freeze(svn_fs_t *fs,
+ svn_fs_freeze_func_t freeze_func,
+ void *freeze_baton,
+ apr_pool_t *pool)
+{
+ SVN_ERR(fs->vtable->freeze(fs, freeze_func, freeze_baton, pool));
+
+ return SVN_NO_ERROR;
}
@@ -559,8 +671,6 @@ svn_fs_recover(const char *path,
svn_error_t *
svn_fs_create_berkeley(svn_fs_t *fs, const char *path)
{
- svn_error_t *err;
- svn_error_t *err2;
fs_library_vtable_t *vtable;
SVN_ERR(get_library_vtable(&vtable, SVN_FS_TYPE_BDB, fs->pool));
@@ -570,34 +680,24 @@ svn_fs_create_berkeley(svn_fs_t *fs, const char *path)
SVN_ERR(write_fs_type(path, SVN_FS_TYPE_BDB, fs->pool));
/* Perform the actual creation. */
- SVN_ERR(acquire_fs_mutex());
- err = vtable->create(fs, path, fs->pool, common_pool);
- err2 = release_fs_mutex();
- if (err)
- {
- svn_error_clear(err2);
- return svn_error_trace(err);
- }
- return svn_error_trace(err2);
+ SVN_MUTEX__WITH_LOCK(common_pool_lock,
+ vtable->create(fs, path, fs->pool, common_pool));
+ SVN_ERR(vtable->set_svn_fs_open(fs, svn_fs_open));
+
+ return SVN_NO_ERROR;
}
svn_error_t *
svn_fs_open_berkeley(svn_fs_t *fs, const char *path)
{
- svn_error_t *err;
- svn_error_t *err2;
fs_library_vtable_t *vtable;
SVN_ERR(fs_library_vtable(&vtable, path, fs->pool));
- SVN_ERR(acquire_fs_mutex());
- err = vtable->open_fs(fs, path, fs->pool, common_pool);
- err2 = release_fs_mutex();
- if (err)
- {
- svn_error_clear(err2);
- return svn_error_trace(err);
- }
- return svn_error_trace(err2);
+ SVN_MUTEX__WITH_LOCK(common_pool_lock,
+ vtable->open_fs(fs, path, fs->pool, common_pool));
+ SVN_ERR(vtable->set_svn_fs_open(fs, svn_fs_open));
+
+ return SVN_NO_ERROR;
}
const char *
@@ -616,8 +716,8 @@ svn_error_t *
svn_fs_hotcopy_berkeley(const char *src_path, const char *dest_path,
svn_boolean_t clean_logs, apr_pool_t *pool)
{
- return svn_error_trace(svn_fs_hotcopy(src_path, dest_path, clean_logs,
- pool));
+ return svn_error_trace(svn_fs_hotcopy2(src_path, dest_path, clean_logs,
+ FALSE, NULL, NULL, pool));
}
svn_error_t *
@@ -669,22 +769,33 @@ svn_error_t *
svn_fs_commit_txn(const char **conflict_p, svn_revnum_t *new_rev,
svn_fs_txn_t *txn, apr_pool_t *pool)
{
-#ifdef PACK_AFTER_EVERY_COMMIT
- svn_fs_root_t *txn_root;
- svn_fs_t *fs;
- const char *fs_path;
+ svn_error_t *err;
*new_rev = SVN_INVALID_REVNUM;
- SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
- fs = svn_fs_root_fs(txn_root);
- fs_path = svn_fs_path(fs, pool);
+ if (conflict_p)
+ *conflict_p = NULL;
+
+ err = txn->vtable->commit(conflict_p, new_rev, txn, pool);
+
+#ifdef SVN_DEBUG
+ /* Check postconditions. */
+ if (conflict_p)
+ {
+ SVN_ERR_ASSERT_E(! (SVN_IS_VALID_REVNUM(*new_rev) && *conflict_p != NULL),
+ err);
+ SVN_ERR_ASSERT_E((*conflict_p != NULL)
+ == (err && err->apr_err == SVN_ERR_FS_CONFLICT),
+ err);
+ }
#endif
- SVN_ERR(txn->vtable->commit(conflict_p, new_rev, txn, pool));
+ SVN_ERR(err);
#ifdef PACK_AFTER_EVERY_COMMIT
{
- svn_error_t *err = svn_fs_pack(fs_path, NULL, NULL, NULL, NULL, pool);
+ svn_fs_t *fs = txn->fs;
+ const char *fs_path = svn_fs_path(fs, pool);
+ err = svn_fs_pack(fs_path, NULL, NULL, NULL, NULL, pool);
if (err && err->apr_err == SVN_ERR_UNSUPPORTED_FEATURE)
/* Pre-1.6 filesystem. */
svn_error_clear(err);
@@ -986,6 +1097,21 @@ svn_fs_closest_copy(svn_fs_root_t **root_p, const char **path_p,
}
svn_error_t *
+svn_fs_get_mergeinfo2(svn_mergeinfo_catalog_t *catalog,
+ svn_fs_root_t *root,
+ const apr_array_header_t *paths,
+ svn_mergeinfo_inheritance_t inherit,
+ svn_boolean_t include_descendants,
+ svn_boolean_t adjust_inherited_mergeinfo,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ return svn_error_trace(root->vtable->get_mergeinfo(
+ catalog, root, paths, inherit, include_descendants,
+ adjust_inherited_mergeinfo, result_pool, scratch_pool));
+}
+
+svn_error_t *
svn_fs_get_mergeinfo(svn_mergeinfo_catalog_t *catalog,
svn_fs_root_t *root,
const apr_array_header_t *paths,
@@ -996,7 +1122,7 @@ svn_fs_get_mergeinfo(svn_mergeinfo_catalog_t *catalog,
return svn_error_trace(root->vtable->get_mergeinfo(catalog, root, paths,
inherit,
include_descendants,
- pool));
+ TRUE, pool, pool));
}
svn_error_t *
@@ -1108,6 +1234,27 @@ svn_fs_file_contents(svn_stream_t **contents, svn_fs_root_t *root,
}
svn_error_t *
+svn_fs_try_process_file_contents(svn_boolean_t *success,
+ svn_fs_root_t *root,
+ const char *path,
+ svn_fs_process_contents_func_t processor,
+ void* baton,
+ apr_pool_t *pool)
+{
+ /* if the FS doesn't implement this function, report a "failed" attempt */
+ if (root->vtable->try_process_file_contents == NULL)
+ {
+ *success = FALSE;
+ return SVN_NO_ERROR;
+ }
+
+ return svn_error_trace(root->vtable->try_process_file_contents(
+ success,
+ root, path,
+ processor, baton, pool));
+}
+
+svn_error_t *
svn_fs_make_file(svn_fs_root_t *root, const char *path, apr_pool_t *pool)
{
SVN_ERR(svn_fs__path_valid(path, pool));
@@ -1227,7 +1374,9 @@ svn_fs_get_file_delta_stream(svn_txdelta_stream_t **stream_p,
svn_error_t *
svn_fs_get_uuid(svn_fs_t *fs, const char **uuid, apr_pool_t *pool)
{
- return svn_error_trace(fs->vtable->get_uuid(fs, uuid, pool));
+ /* If you change this, consider changing svn_fs__identifier(). */
+ *uuid = apr_pstrdup(pool, fs->uuid);
+ return SVN_NO_ERROR;
}
svn_error_t *
@@ -1404,11 +1553,11 @@ svn_error_t *
svn_fs_print_modules(svn_stringbuf_t *output,
apr_pool_t *pool)
{
- const struct fs_type_defn *defn;
+ const struct fs_type_defn *defn = fs_modules;
fs_library_vtable_t *vtable;
apr_pool_t *iterpool = svn_pool_create(pool);
- for (defn = fs_modules; defn->fs_type != NULL; ++defn)
+ while (defn)
{
char *line;
svn_error_t *err;
@@ -1421,6 +1570,7 @@ svn_fs_print_modules(svn_stringbuf_t *output,
if (err->apr_err == SVN_ERR_FS_UNKNOWN_FS_TYPE)
{
svn_error_clear(err);
+ defn = defn->next;
continue;
}
else
@@ -1430,6 +1580,7 @@ svn_fs_print_modules(svn_stringbuf_t *output,
line = apr_psprintf(iterpool, "* fs_%s : %s\n",
defn->fsap_name, vtable->get_description());
svn_stringbuf_appendcstr(output, line);
+ defn = defn->next;
}
svn_pool_destroy(iterpool);
diff --git a/subversion/libsvn_fs/fs-loader.h b/subversion/libsvn_fs/fs-loader.h
index 0f01931..532ff05 100644
--- a/subversion/libsvn_fs/fs-loader.h
+++ b/subversion/libsvn_fs/fs-loader.h
@@ -25,7 +25,7 @@
#ifndef LIBSVN_FS_FS_H
#define LIBSVN_FS_FS_H
-#include "svn_version.h"
+#include "svn_types.h"
#include "svn_fs.h"
#ifdef __cplusplus
@@ -36,13 +36,14 @@ extern "C" {
/* The FS loader library implements the a front end to "filesystem
abstract providers" (FSAPs), which implement the svn_fs API.
- The loader library divides up the FS API into five categories:
+ The loader library divides up the FS API into several categories:
- Top-level functions, which operate on paths to an FS
- Functions which operate on an FS object
- Functions which operate on a transaction object
- Functions which operate on a root object
- Functions which operate on a history object
+ - Functions which operate on a noderev-ID object
Some generic fields of the FS, transaction, root, and history
objects are defined by the loader library; the rest are stored in
@@ -86,9 +87,21 @@ typedef struct fs_library_vtable_t
apr_pool_t *common_pool);
svn_error_t *(*upgrade_fs)(svn_fs_t *fs, const char *path, apr_pool_t *pool,
apr_pool_t *common_pool);
+ svn_error_t *(*verify_fs)(svn_fs_t *fs, const char *path,
+ svn_revnum_t start,
+ svn_revnum_t end,
+ svn_fs_progress_notify_func_t notify_func,
+ void *notify_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *pool,
+ apr_pool_t *common_pool);
svn_error_t *(*delete_fs)(const char *path, apr_pool_t *pool);
- svn_error_t *(*hotcopy)(const char *src_path, const char *dest_path,
- svn_boolean_t clean, apr_pool_t *pool);
+ svn_error_t *(*hotcopy)(svn_fs_t *src_fs, svn_fs_t *dst_fs,
+ const char *src_path, const char *dst_path,
+ svn_boolean_t clean, svn_boolean_t incremental,
+ svn_cancel_func_t cancel_func, void *cancel_baton,
+ apr_pool_t *pool);
const char *(*get_description)(void);
svn_error_t *(*recover)(svn_fs_t *fs,
svn_cancel_func_t cancel_func, void *cancel_baton,
@@ -96,7 +109,7 @@ typedef struct fs_library_vtable_t
svn_error_t *(*pack_fs)(svn_fs_t *fs, const char *path,
svn_fs_pack_notify_t notify_func, void *notify_baton,
svn_cancel_func_t cancel_func, void *cancel_baton,
- apr_pool_t *pool);
+ apr_pool_t *pool, apr_pool_t *common_pool);
/* Provider-specific functions should go here, even if they could go
in an object vtable, so that they are all kept together. */
@@ -111,6 +124,14 @@ typedef struct fs_library_vtable_t
into the FS vtable. */
svn_fs_id_t *(*parse_id)(const char *data, apr_size_t len,
apr_pool_t *pool);
+ /* Allow an FSAP to call svn_fs_open(), which is in a higher-level library
+ (libsvn_fs-1.so) and cannot easily be moved to libsvn_fs_util. */
+ svn_error_t *(*set_svn_fs_open)(svn_fs_t *fs,
+ svn_error_t *(*svn_fs_open_)(svn_fs_t **,
+ const char *,
+ apr_hash_t *,
+ apr_pool_t *));
+
} fs_library_vtable_t;
/* This is the type of symbol an FS module defines to fetch the
@@ -161,7 +182,7 @@ typedef struct fs_vtable_t
const svn_string_t *const *old_value_p,
const svn_string_t *value,
apr_pool_t *pool);
- svn_error_t *(*get_uuid)(svn_fs_t *fs, const char **uuid, apr_pool_t *pool);
+ /* There is no get_uuid(); see svn_fs_t.uuid docstring. */
svn_error_t *(*set_uuid)(svn_fs_t *fs, const char *uuid, apr_pool_t *pool);
svn_error_t *(*revision_root)(svn_fs_root_t **root_p, svn_fs_t *fs,
svn_revnum_t rev, apr_pool_t *pool);
@@ -191,6 +212,11 @@ typedef struct fs_vtable_t
svn_fs_get_locks_callback_t get_locks_func,
void *get_locks_baton,
apr_pool_t *pool);
+ svn_error_t *(*verify_root)(svn_fs_root_t *root,
+ apr_pool_t *pool);
+ svn_error_t *(*freeze)(svn_fs_t *fs,
+ svn_fs_freeze_func_t freeze_func,
+ void *freeze_baton, apr_pool_t *pool);
svn_error_t *(*bdb_set_errcall)(svn_fs_t *fs,
void (*handler)(const char *errpfx,
char *msg));
@@ -292,6 +318,12 @@ typedef struct root_vtable_t
svn_error_t *(*file_contents)(svn_stream_t **contents,
svn_fs_root_t *root, const char *path,
apr_pool_t *pool);
+ svn_error_t *(*try_process_file_contents)(svn_boolean_t *success,
+ svn_fs_root_t *target_root,
+ const char *target_path,
+ svn_fs_process_contents_func_t processor,
+ void* baton,
+ apr_pool_t *pool);
svn_error_t *(*make_file)(svn_fs_root_t *root, const char *path,
apr_pool_t *pool);
svn_error_t *(*apply_textdelta)(svn_txdelta_window_handler_t *contents_p,
@@ -322,12 +354,15 @@ typedef struct root_vtable_t
svn_fs_root_t *ancestor_root,
const char *ancestor_path,
apr_pool_t *pool);
+ /* Mergeinfo. */
svn_error_t *(*get_mergeinfo)(svn_mergeinfo_catalog_t *catalog,
svn_fs_root_t *root,
const apr_array_header_t *paths,
svn_mergeinfo_inheritance_t inherit,
svn_boolean_t include_descendants,
- apr_pool_t *pool);
+ svn_boolean_t adjust_inherited_mergeinfo,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
} root_vtable_t;
@@ -377,6 +412,9 @@ struct svn_fs_t
/* FSAP-specific vtable and private data */
fs_vtable_t *vtable;
void *fsap_data;
+
+ /* UUID, stored by open(), create(), and set_uuid(). */
+ const char *uuid;
};
diff --git a/subversion/libsvn_fs_base/bdb/bdb-err.c b/subversion/libsvn_fs_base/bdb/bdb-err.c
index dce98f3..3d51711 100644
--- a/subversion/libsvn_fs_base/bdb/bdb-err.c
+++ b/subversion/libsvn_fs_base/bdb/bdb-err.c
@@ -102,5 +102,5 @@ svn_fs_bdb__wrap_db(svn_fs_t *fs, const char *operation, int db_err)
return svn_fs_bdb__dberrf
(bfd->bdb, db_err,
_("Berkeley DB error for filesystem '%s' while %s:\n"),
- fs->path ? fs->path : "(none)", operation);
+ fs->path ? fs->path : "(none)", _(operation));
}
diff --git a/subversion/libsvn_fs_base/bdb/changes-table.c b/subversion/libsvn_fs_base/bdb/changes-table.c
index fa0bfee..80ff468 100644
--- a/subversion/libsvn_fs_base/bdb/changes-table.c
+++ b/subversion/libsvn_fs_base/bdb/changes-table.c
@@ -25,6 +25,7 @@
#include <apr_hash.h>
#include <apr_tables.h>
+#include "svn_hash.h"
#include "svn_fs.h"
#include "svn_pools.h"
#include "svn_path.h"
@@ -90,7 +91,7 @@ svn_fs_bdb__changes_add(svn_fs_t *fs,
svn_fs_base__str_to_dbt(&query, key);
svn_fs_base__skel_to_dbt(&value, skel, pool);
svn_fs_base__trail_debug(trail, "changes", "put");
- return BDB_WRAP(fs, _("creating change"),
+ return BDB_WRAP(fs, N_("creating change"),
bfd->changes->put(bfd->changes, trail->db_txn,
&query, &value, 0));
}
@@ -114,7 +115,7 @@ svn_fs_bdb__changes_delete(svn_fs_t *fs,
error should be propagated to the caller, though. */
if ((db_err) && (db_err != DB_NOTFOUND))
{
- SVN_ERR(BDB_WRAP(fs, _("deleting changes"), db_err));
+ SVN_ERR(BDB_WRAP(fs, N_("deleting changes"), db_err));
}
return SVN_NO_ERROR;
@@ -132,7 +133,7 @@ fold_change(apr_hash_t *changes,
svn_fs_path_change2_t *old_change, *new_change;
const char *path;
- if ((old_change = apr_hash_get(changes, change->path, APR_HASH_KEY_STRING)))
+ if ((old_change = svn_hash_gets(changes, change->path)))
{
/* This path already exists in the hash, so we have to merge
this change into the already existing one. */
@@ -244,7 +245,7 @@ fold_change(apr_hash_t *changes,
}
/* Add (or update) this path. */
- apr_hash_set(changes, path, APR_HASH_KEY_STRING, new_change);
+ svn_hash_sets(changes, path, new_change);
return SVN_NO_ERROR;
}
@@ -268,7 +269,7 @@ svn_fs_bdb__changes_fetch(apr_hash_t **changes_p,
/* Get a cursor on the first record matching KEY, and then loop over
the records, adding them to the return array. */
svn_fs_base__trail_debug(trail, "changes", "cursor");
- SVN_ERR(BDB_WRAP(fs, _("creating cursor for reading changes"),
+ SVN_ERR(BDB_WRAP(fs, N_("creating cursor for reading changes"),
bfd->changes->cursor(bfd->changes, trail->db_txn,
&cursor, 0)));
@@ -325,14 +326,14 @@ svn_fs_bdb__changes_fetch(apr_hash_t **changes_p,
/* KEY is the path. */
const void *hashkey;
apr_ssize_t klen;
- apr_hash_this(hi, &hashkey, &klen, NULL);
+ const char *child_relpath;
- /* If we come across our own path, ignore it. */
- if (strcmp(change->path, hashkey) == 0)
- continue;
+ apr_hash_this(hi, &hashkey, &klen, NULL);
- /* If we come across a child of our path, remove it. */
- if (svn_fspath__is_child(change->path, hashkey, subpool))
+ /* If we come across our own path, ignore it.
+ If we come across a child of our path, remove it. */
+ child_relpath = svn_fspath__skip_ancestor(change->path, hashkey);
+ if (child_relpath && *child_relpath)
apr_hash_set(changes, hashkey, klen, NULL);
}
}
@@ -352,7 +353,7 @@ svn_fs_bdb__changes_fetch(apr_hash_t **changes_p,
finished. Just return the (possibly empty) array. Any other
error, however, needs to get handled appropriately. */
if (db_err && (db_err != DB_NOTFOUND))
- err = BDB_WRAP(fs, _("fetching changes"), db_err);
+ err = BDB_WRAP(fs, N_("fetching changes"), db_err);
cleanup:
/* Close the cursor. */
@@ -365,7 +366,7 @@ svn_fs_bdb__changes_fetch(apr_hash_t **changes_p,
/* If our only error thus far was when we closed the cursor, return
that error. */
if (db_c_err)
- SVN_ERR(BDB_WRAP(fs, _("closing changes cursor"), db_c_err));
+ SVN_ERR(BDB_WRAP(fs, N_("closing changes cursor"), db_c_err));
/* Finally, set our return variable and get outta here. */
*changes_p = changes;
@@ -391,7 +392,7 @@ svn_fs_bdb__changes_fetch_raw(apr_array_header_t **changes_p,
/* Get a cursor on the first record matching KEY, and then loop over
the records, adding them to the return array. */
svn_fs_base__trail_debug(trail, "changes", "cursor");
- SVN_ERR(BDB_WRAP(fs, _("creating cursor for reading changes"),
+ SVN_ERR(BDB_WRAP(fs, N_("creating cursor for reading changes"),
bfd->changes->cursor(bfd->changes, trail->db_txn,
&cursor, 0)));
@@ -435,7 +436,7 @@ svn_fs_bdb__changes_fetch_raw(apr_array_header_t **changes_p,
finished. Just return the (possibly empty) array. Any other
error, however, needs to get handled appropriately. */
if (db_err && (db_err != DB_NOTFOUND))
- err = BDB_WRAP(fs, _("fetching changes"), db_err);
+ err = BDB_WRAP(fs, N_("fetching changes"), db_err);
cleanup:
/* Close the cursor. */
@@ -448,7 +449,7 @@ svn_fs_bdb__changes_fetch_raw(apr_array_header_t **changes_p,
/* If our only error thus far was when we closed the cursor, return
that error. */
if (db_c_err)
- SVN_ERR(BDB_WRAP(fs, _("closing changes cursor"), db_c_err));
+ SVN_ERR(BDB_WRAP(fs, N_("closing changes cursor"), db_c_err));
/* Finally, set our return variable and get outta here. */
*changes_p = changes;
diff --git a/subversion/libsvn_fs_base/bdb/checksum-reps-table.c b/subversion/libsvn_fs_base/bdb/checksum-reps-table.c
index d985830..f4a34c3 100644
--- a/subversion/libsvn_fs_base/bdb/checksum-reps-table.c
+++ b/subversion/libsvn_fs_base/bdb/checksum-reps-table.c
@@ -139,7 +139,7 @@ svn_error_t *svn_fs_bdb__set_checksum_rep(svn_fs_t *fs,
/* Create a value from our REP_KEY, and add this record to the table. */
svn_fs_base__str_to_dbt(&value, rep_key);
svn_fs_base__trail_debug(trail, "checksum-reps", "put");
- SVN_ERR(BDB_WRAP(fs, _("storing checksum-reps record"),
+ SVN_ERR(BDB_WRAP(fs, N_("storing checksum-reps record"),
bfd->checksum_reps->put(bfd->checksum_reps, trail->db_txn,
&key, &value, 0)));
return SVN_NO_ERROR;
@@ -161,7 +161,7 @@ svn_error_t *svn_fs_bdb__delete_checksum_rep(svn_fs_t *fs,
svn_fs_base__checksum_to_dbt(&key, checksum);
svn_fs_base__trail_debug(trail, "checksum-reps", "del");
- SVN_ERR(BDB_WRAP(fs, "deleting entry from 'checksum-reps' table",
+ SVN_ERR(BDB_WRAP(fs, N_("deleting entry from 'checksum-reps' table"),
bfd->checksum_reps->del(bfd->checksum_reps,
trail->db_txn, &key, 0)));
return SVN_NO_ERROR;
@@ -183,7 +183,7 @@ svn_error_t *svn_fs_bdb__reserve_rep_reuse_id(const char **id_p,
/* Get the current value associated with the `next-key' key in the
`checksum-reps' table. */
svn_fs_base__trail_debug(trail, "checksum-reps", "get");
- SVN_ERR(BDB_WRAP(fs, _("allocating new representation reuse ID "
+ SVN_ERR(BDB_WRAP(fs, N_("allocating new representation reuse ID "
"(getting 'next-key')"),
bfd->checksum_reps->get(bfd->checksum_reps, trail->db_txn,
&query,
@@ -204,5 +204,5 @@ svn_error_t *svn_fs_bdb__reserve_rep_reuse_id(const char **id_p,
svn_fs_base__str_to_dbt(&result, next_key),
0);
- return BDB_WRAP(fs, _("bumping next representation reuse ID"), db_err);
+ return BDB_WRAP(fs, N_("bumping next representation reuse ID"), db_err);
}
diff --git a/subversion/libsvn_fs_base/bdb/copies-table.c b/subversion/libsvn_fs_base/bdb/copies-table.c
index 919a390..7bf6ca8 100644
--- a/subversion/libsvn_fs_base/bdb/copies-table.c
+++ b/subversion/libsvn_fs_base/bdb/copies-table.c
@@ -89,7 +89,7 @@ put_copy(svn_fs_t *fs,
svn_fs_base__str_to_dbt(&key, copy_id);
svn_fs_base__skel_to_dbt(&value, copy_skel, pool);
svn_fs_base__trail_debug(trail, "copies", "put");
- return BDB_WRAP(fs, _("storing copy record"),
+ return BDB_WRAP(fs, N_("storing copy record"),
bfd->copies->put(bfd->copies, trail->db_txn,
&key, &value, 0));
}
@@ -112,7 +112,7 @@ svn_fs_bdb__reserve_copy_id(const char **id_p,
/* Get the current value associated with the `next-key' key in the
copies table. */
svn_fs_base__trail_debug(trail, "copies", "get");
- SVN_ERR(BDB_WRAP(fs, _("allocating new copy ID (getting 'next-key')"),
+ SVN_ERR(BDB_WRAP(fs, N_("allocating new copy ID (getting 'next-key')"),
bfd->copies->get(bfd->copies, trail->db_txn, &query,
svn_fs_base__result_dbt(&result),
0)));
@@ -130,7 +130,7 @@ svn_fs_bdb__reserve_copy_id(const char **id_p,
svn_fs_base__str_to_dbt(&result, next_key),
0);
- return BDB_WRAP(fs, _("bumping next copy key"), db_err);
+ return BDB_WRAP(fs, N_("bumping next copy key"), db_err);
}
@@ -168,7 +168,7 @@ svn_fs_bdb__delete_copy(svn_fs_t *fs,
db_err = bfd->copies->del(bfd->copies, trail->db_txn, &key, 0);
if (db_err == DB_NOTFOUND)
return svn_fs_base__err_no_such_copy(fs, copy_id);
- return BDB_WRAP(fs, _("deleting entry from 'copies' table"), db_err);
+ return BDB_WRAP(fs, N_("deleting entry from 'copies' table"), db_err);
}
@@ -196,7 +196,7 @@ svn_fs_bdb__get_copy(copy_t **copy_p,
if (db_err == DB_NOTFOUND)
return svn_fs_base__err_no_such_copy(fs, copy_id);
- SVN_ERR(BDB_WRAP(fs, _("reading copy"), db_err));
+ SVN_ERR(BDB_WRAP(fs, N_("reading copy"), db_err));
/* Unparse COPY skel */
skel = svn_skel__parse(value.data, value.size, pool);
diff --git a/subversion/libsvn_fs_base/bdb/env.c b/subversion/libsvn_fs_base/bdb/env.c
index 436247e..7309a80 100644
--- a/subversion/libsvn_fs_base/bdb/env.c
+++ b/subversion/libsvn_fs_base/bdb/env.c
@@ -24,7 +24,6 @@
#include <apr.h>
#if APR_HAS_THREADS
-#include <apr_thread_mutex.h>
#include <apr_thread_proc.h>
#include <apr_time.h>
#endif
@@ -32,10 +31,12 @@
#include <apr_strings.h>
#include <apr_hash.h>
+#include "svn_hash.h"
#include "svn_path.h"
#include "svn_pools.h"
#include "svn_utf.h"
#include "private/svn_atomic.h"
+#include "private/svn_mutex.h"
#include "bdb-err.h"
#include "bdb_compat.h"
@@ -226,7 +227,7 @@ bdb_error_gatherer(const DB_ENV *dbenv, const char *baton, const char *msg)
SVN_BDB_ERROR_GATHERER_IGNORE(dbenv);
- new_err = svn_error_createf(SVN_NO_ERROR, NULL, "bdb: %s", msg);
+ new_err = svn_error_createf(SVN_ERR_FS_BERKELEY_DB, NULL, "bdb: %s", msg);
if (error_info->pending_errors)
svn_error_compose(error_info->pending_errors, new_err);
else
@@ -358,12 +359,11 @@ static apr_pool_t *bdb_cache_pool = NULL;
/* The cache. The items are bdb_env_t structures. */
static apr_hash_t *bdb_cache = NULL;
-#if APR_HAS_THREADS
/* The mutex that protects bdb_cache. */
-static apr_thread_mutex_t *bdb_cache_lock = NULL;
+static svn_mutex__t *bdb_cache_lock = NULL;
-/* Cleanup callback to NULL out the cache and its lock, so we don't try to
- use them after the pool has been cleared during global shutdown. */
+/* Cleanup callback to NULL out the cache, so we don't try to use it after
+ the pool has been cleared during global shutdown. */
static apr_status_t
clear_cache(void *data)
{
@@ -371,31 +371,18 @@ clear_cache(void *data)
bdb_cache_lock = NULL;
return APR_SUCCESS;
}
-#endif /* APR_HAS_THREADS */
static volatile svn_atomic_t bdb_cache_state = 0;
static svn_error_t *
bdb_init_cb(void *baton, apr_pool_t *pool)
{
-#if APR_HAS_THREADS
- apr_status_t apr_err;
-#endif
bdb_cache_pool = svn_pool_create(pool);
bdb_cache = apr_hash_make(bdb_cache_pool);
-#if APR_HAS_THREADS
- apr_err = apr_thread_mutex_create(&bdb_cache_lock,
- APR_THREAD_MUTEX_DEFAULT,
- bdb_cache_pool);
- if (apr_err)
- {
- return svn_error_create(apr_err, NULL,
- "Couldn't initialize the cache of"
- " Berkeley DB environment descriptors");
- }
+
+ SVN_ERR(svn_mutex__init(&bdb_cache_lock, TRUE, bdb_cache_pool));
apr_pool_cleanup_register(bdb_cache_pool, NULL, clear_cache,
apr_pool_cleanup_null);
-#endif /* APR_HAS_THREADS */
return SVN_NO_ERROR;
}
@@ -406,26 +393,6 @@ svn_fs_bdb__init(apr_pool_t* pool)
return svn_atomic__init_once(&bdb_cache_state, bdb_init_cb, NULL, pool);
}
-static APR_INLINE void
-acquire_cache_mutex(void)
-{
-#if APR_HAS_THREADS
- if (bdb_cache_lock)
- apr_thread_mutex_lock(bdb_cache_lock);
-#endif
-}
-
-
-static APR_INLINE void
-release_cache_mutex(void)
-{
-#if APR_HAS_THREADS
- if (bdb_cache_lock)
- apr_thread_mutex_unlock(bdb_cache_lock);
-#endif
-}
-
-
/* Construct a cache key for the BDB environment at PATH in *KEYP.
if DBCONFIG_FILE is not NULL, return the opened file handle.
Allocate from POOL. */
@@ -523,13 +490,41 @@ bdb_close(bdb_env_t *bdb)
}
+static svn_error_t *
+svn_fs_bdb__close_internal(bdb_env_t *bdb)
+{
+ svn_error_t *err = SVN_NO_ERROR;
+
+ if (--bdb->refcount != 0)
+ {
+ /* If the environment is panicked and automatic recovery is not
+ enabled, return an appropriate error. */
+#if !SVN_BDB_AUTO_RECOVER
+ if (svn_atomic_read(&bdb->panic))
+ err = svn_error_create(SVN_ERR_FS_BERKELEY_DB, NULL,
+ db_strerror(DB_RUNRECOVERY));
+#endif
+ }
+ else
+ {
+ /* If the bdb cache has been set to NULL that means we are
+ shutting down, and the pool that holds the bdb cache has
+ already been destroyed, so accessing it here would be a Bad
+ Thing (tm) */
+ if (bdb_cache)
+ apr_hash_set(bdb_cache, &bdb->key, sizeof bdb->key, NULL);
+ err = bdb_close(bdb);
+ }
+ return svn_error_trace(err);
+}
+
svn_error_t *
svn_fs_bdb__close(bdb_env_baton_t *bdb_baton)
{
- svn_error_t *err = SVN_NO_ERROR;
bdb_env_t *bdb = bdb_baton->bdb;
SVN_ERR_ASSERT(bdb_baton->env == bdb_baton->bdb->env);
+ SVN_ERR_ASSERT(bdb_baton->error_info->refcount > 0);
/* Neutralize bdb_baton's pool cleanup to prevent double-close. See
cleanup_env_baton(). */
@@ -548,31 +543,10 @@ svn_fs_bdb__close(bdb_env_baton_t *bdb_baton)
#endif
}
- acquire_cache_mutex();
- if (--bdb->refcount != 0)
- {
- release_cache_mutex();
+ /* This may run during final pool cleanup when the lock is NULL. */
+ SVN_MUTEX__WITH_LOCK(bdb_cache_lock, svn_fs_bdb__close_internal(bdb));
- /* If the environment is panicked and automatic recovery is not
- enabled, return an appropriate error. */
-#if !SVN_BDB_AUTO_RECOVER
- if (svn_atomic_read(&bdb->panic))
- err = svn_error_create(SVN_ERR_FS_BERKELEY_DB, NULL,
- db_strerror(DB_RUNRECOVERY));
-#endif
- }
- else
- {
- /* If the bdb cache has been set to NULL that means we are
- shutting down, and the pool that holds the bdb cache has
- already been destroyed, so accessing it here would be a Bad
- Thing (tm) */
- if (bdb_cache)
- apr_hash_set(bdb_cache, &bdb->key, sizeof bdb->key, NULL);
- err = bdb_close(bdb);
- release_cache_mutex();
- }
- return svn_error_trace(err);
+ return SVN_NO_ERROR;
}
@@ -614,44 +588,32 @@ cleanup_env_baton(void *data)
}
-svn_error_t *
-svn_fs_bdb__open(bdb_env_baton_t **bdb_batonp, const char *path,
- u_int32_t flags, int mode,
- apr_pool_t *pool)
+static svn_error_t *
+svn_fs_bdb__open_internal(bdb_env_baton_t **bdb_batonp,
+ const char *path,
+ u_int32_t flags, int mode,
+ apr_pool_t *pool)
{
- svn_error_t *err = SVN_NO_ERROR;
bdb_env_key_t key;
bdb_env_t *bdb;
svn_boolean_t panic;
- acquire_cache_mutex();
-
/* We can safely discard the open DB_CONFIG file handle. If the
environment descriptor is in the cache, the key's immutability is
guaranteed. If it's not, we don't care if the key changes,
between here and the actual insertion of the newly-created
environment into the cache, because no other thread can touch the
cache in the meantime. */
- err = bdb_cache_key(&key, NULL, path, pool);
- if (err)
- {
- release_cache_mutex();
- return svn_error_trace(err);
- }
+ SVN_ERR(bdb_cache_key(&key, NULL, path, pool));
bdb = bdb_cache_get(&key, &panic);
if (panic)
- {
- release_cache_mutex();
- return svn_error_create(SVN_ERR_FS_BERKELEY_DB, NULL,
- db_strerror(DB_RUNRECOVERY));
- }
+ return svn_error_create(SVN_ERR_FS_BERKELEY_DB, NULL,
+ db_strerror(DB_RUNRECOVERY));
/* Make sure that the environment's open flags haven't changed. */
if (bdb && bdb->flags != flags)
{
- release_cache_mutex();
-
/* Handle changes to the DB_PRIVATE flag specially */
if ((flags ^ bdb->flags) & DB_PRIVATE)
{
@@ -673,41 +635,50 @@ svn_fs_bdb__open(bdb_env_baton_t **bdb_batonp, const char *path,
if (!bdb)
{
- err = create_env(&bdb, path, svn_pool_create(bdb_cache_pool));
- if (!err)
+ svn_error_t *err;
+
+ SVN_ERR(create_env(&bdb, path, svn_pool_create(bdb_cache_pool)));
+ err = bdb_open(bdb, flags, mode);
+ if (err)
{
- err = bdb_open(bdb, flags, mode);
- if (!err)
- {
- apr_hash_set(bdb_cache, &bdb->key, sizeof bdb->key, bdb);
- bdb->flags = flags;
- bdb->refcount = 1;
- }
- else
- {
- /* Clean up, and we can't do anything about returned errors. */
- svn_error_clear(bdb_close(bdb));
- }
+ /* Clean up, and we can't do anything about returned errors. */
+ svn_error_clear(bdb_close(bdb));
+ return svn_error_trace(err);
}
+
+ apr_hash_set(bdb_cache, &bdb->key, sizeof bdb->key, bdb);
+ bdb->flags = flags;
+ bdb->refcount = 1;
}
else
{
++bdb->refcount;
}
- if (!err)
- {
- *bdb_batonp = apr_palloc(pool, sizeof **bdb_batonp);
- (*bdb_batonp)->env = bdb->env;
- (*bdb_batonp)->bdb = bdb;
- (*bdb_batonp)->error_info = get_error_info(bdb);
- ++(*bdb_batonp)->error_info->refcount;
- apr_pool_cleanup_register(pool, *bdb_batonp, cleanup_env_baton,
- apr_pool_cleanup_null);
- }
+ *bdb_batonp = apr_palloc(pool, sizeof **bdb_batonp);
+ (*bdb_batonp)->env = bdb->env;
+ (*bdb_batonp)->bdb = bdb;
+ (*bdb_batonp)->error_info = get_error_info(bdb);
+ ++(*bdb_batonp)->error_info->refcount;
+ apr_pool_cleanup_register(pool, *bdb_batonp, cleanup_env_baton,
+ apr_pool_cleanup_null);
- release_cache_mutex();
- return svn_error_trace(err);
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_fs_bdb__open(bdb_env_baton_t **bdb_batonp, const char *path,
+ u_int32_t flags, int mode,
+ apr_pool_t *pool)
+{
+ SVN_MUTEX__WITH_LOCK(bdb_cache_lock,
+ svn_fs_bdb__open_internal(bdb_batonp,
+ path,
+ flags,
+ mode,
+ pool));
+
+ return SVN_NO_ERROR;
}
diff --git a/subversion/libsvn_fs_base/bdb/lock-tokens-table.c b/subversion/libsvn_fs_base/bdb/lock-tokens-table.c
index 1de9ddd..e70ef17 100644
--- a/subversion/libsvn_fs_base/bdb/lock-tokens-table.c
+++ b/subversion/libsvn_fs_base/bdb/lock-tokens-table.c
@@ -84,7 +84,7 @@ svn_fs_bdb__lock_token_add(svn_fs_t *fs,
svn_fs_base__str_to_dbt(&key, path);
svn_fs_base__str_to_dbt(&value, lock_token);
svn_fs_base__trail_debug(trail, "lock-tokens", "add");
- return BDB_WRAP(fs, "storing lock token record",
+ return BDB_WRAP(fs, N_("storing lock token record"),
bfd->lock_tokens->put(bfd->lock_tokens, trail->db_txn,
&key, &value, 0));
}
@@ -104,8 +104,8 @@ svn_fs_bdb__lock_token_delete(svn_fs_t *fs,
svn_fs_base__trail_debug(trail, "lock-tokens", "del");
db_err = bfd->lock_tokens->del(bfd->lock_tokens, trail->db_txn, &key, 0);
if (db_err == DB_NOTFOUND)
- return SVN_FS__ERR_NO_SUCH_LOCK(fs, path, pool);
- return BDB_WRAP(fs, "deleting entry from 'lock-tokens' table", db_err);
+ return SVN_FS__ERR_NO_SUCH_LOCK(fs, path);
+ return BDB_WRAP(fs, N_("deleting entry from 'lock-tokens' table"), db_err);
}
@@ -131,8 +131,8 @@ svn_fs_bdb__lock_token_get(const char **lock_token_p,
svn_fs_base__track_dbt(&value, pool);
if (db_err == DB_NOTFOUND)
- return SVN_FS__ERR_NO_SUCH_LOCK(fs, path, pool);
- SVN_ERR(BDB_WRAP(fs, "reading lock token", db_err));
+ return SVN_FS__ERR_NO_SUCH_LOCK(fs, path);
+ SVN_ERR(BDB_WRAP(fs, N_("reading lock token"), db_err));
lock_token = apr_pstrmemdup(pool, value.data, value.size);
diff --git a/subversion/libsvn_fs_base/bdb/locks-table.c b/subversion/libsvn_fs_base/bdb/locks-table.c
index 9ffe694..a22663f 100644
--- a/subversion/libsvn_fs_base/bdb/locks-table.c
+++ b/subversion/libsvn_fs_base/bdb/locks-table.c
@@ -26,6 +26,7 @@
#include "bdb_compat.h"
#include "svn_pools.h"
+#include "svn_path.h"
#include "private/svn_skel.h"
#include "dbt.h"
@@ -89,7 +90,7 @@ svn_fs_bdb__lock_add(svn_fs_t *fs,
svn_fs_base__str_to_dbt(&key, lock_token);
svn_fs_base__skel_to_dbt(&value, lock_skel, pool);
svn_fs_base__trail_debug(trail, "lock", "add");
- return BDB_WRAP(fs, "storing lock record",
+ return BDB_WRAP(fs, N_("storing lock record"),
bfd->locks->put(bfd->locks, trail->db_txn,
&key, &value, 0));
}
@@ -112,7 +113,7 @@ svn_fs_bdb__lock_delete(svn_fs_t *fs,
if (db_err == DB_NOTFOUND)
return svn_fs_base__err_bad_lock_token(fs, lock_token);
- return BDB_WRAP(fs, "deleting lock from 'locks' table", db_err);
+ return BDB_WRAP(fs, N_("deleting lock from 'locks' table"), db_err);
}
@@ -139,7 +140,7 @@ svn_fs_bdb__lock_get(svn_lock_t **lock_p,
if (db_err == DB_NOTFOUND)
return svn_fs_base__err_bad_lock_token(fs, lock_token);
- SVN_ERR(BDB_WRAP(fs, "reading lock", db_err));
+ SVN_ERR(BDB_WRAP(fs, N_("reading lock"), db_err));
/* Parse TRANSACTION skel */
skel = svn_skel__parse(value.data, value.size, pool);
@@ -153,7 +154,7 @@ svn_fs_bdb__lock_get(svn_lock_t **lock_p,
if (lock->expiration_date && (apr_time_now() > lock->expiration_date))
{
SVN_ERR(svn_fs_bdb__lock_delete(fs, lock_token, trail, pool));
- return SVN_FS__ERR_LOCK_EXPIRED(fs, lock_token, pool);
+ return SVN_FS__ERR_LOCK_EXPIRED(fs, lock_token);
}
*lock_p = lock;
@@ -242,7 +243,8 @@ svn_fs_bdb__locks_get(svn_fs_t *fs,
svn_fs_base__trail_debug(trail, "lock-tokens", "cursor");
db_err = bfd->lock_tokens->cursor(bfd->lock_tokens, trail->db_txn,
&cursor, 0);
- SVN_ERR(BDB_WRAP(fs, "creating cursor for reading lock tokens", db_err));
+ SVN_ERR(BDB_WRAP(fs, N_("creating cursor for reading lock tokens"),
+ db_err));
/* Since the key is going to be returned as well as the value make
sure BDB malloc's the returned key. */
@@ -254,12 +256,12 @@ svn_fs_bdb__locks_get(svn_fs_t *fs,
db_err = svn_bdb_dbc_get(cursor, &key, svn_fs_base__result_dbt(&value),
DB_SET_RANGE);
- /* As long as the prefix of the returned KEY matches LOOKUP_PATH we
- know it is either LOOKUP_PATH or a decendant thereof. */
if (!svn_fspath__is_root(path, strlen(path)))
lookup_path = apr_pstrcat(pool, path, "/", (char *)NULL);
lookup_len = strlen(lookup_path);
+ /* As long as the prefix of the returned KEY matches LOOKUP_PATH we
+ know it is either LOOKUP_PATH or a decendant thereof. */
while ((! db_err)
&& lookup_len < key.size
&& strncmp(lookup_path, key.data, lookup_len) == 0)
@@ -282,7 +284,7 @@ svn_fs_bdb__locks_get(svn_fs_t *fs,
same set of results. So just see if CHILD_PATH is an
immediate child of PATH. If not, we don't care about
this item. */
- const char *rel_path = svn_fspath__is_child(path, child_path, subpool);
+ const char *rel_path = svn_fspath__skip_ancestor(path, child_path);
if (!rel_path || (svn_path_component_count(rel_path) != 1))
goto loop_it;
}
@@ -316,9 +318,10 @@ svn_fs_bdb__locks_get(svn_fs_t *fs,
db_c_err = svn_bdb_dbc_close(cursor);
if (db_err && (db_err != DB_NOTFOUND))
- SVN_ERR(BDB_WRAP(fs, "fetching lock tokens", db_err));
+ SVN_ERR(BDB_WRAP(fs, N_("fetching lock tokens"), db_err));
if (db_c_err)
- SVN_ERR(BDB_WRAP(fs, "fetching lock tokens (closing cursor)", db_c_err));
+ SVN_ERR(BDB_WRAP(fs, N_("fetching lock tokens (closing cursor)"),
+ db_c_err));
return SVN_NO_ERROR;
}
diff --git a/subversion/libsvn_fs_base/bdb/miscellaneous-table.c b/subversion/libsvn_fs_base/bdb/miscellaneous-table.c
index c1baedd..21a05ca 100644
--- a/subversion/libsvn_fs_base/bdb/miscellaneous-table.c
+++ b/subversion/libsvn_fs_base/bdb/miscellaneous-table.c
@@ -92,7 +92,7 @@ svn_fs_bdb__miscellaneous_set(svn_fs_t *fs,
if (val == NULL)
{
svn_fs_base__trail_debug(trail, "miscellaneous", "del");
- return BDB_WRAP(fs, "deleting record from 'miscellaneous' table",
+ return BDB_WRAP(fs, N_("deleting record from 'miscellaneous' table"),
bfd->miscellaneous->del(bfd->miscellaneous,
trail->db_txn, &key, 0));
}
@@ -100,7 +100,7 @@ svn_fs_bdb__miscellaneous_set(svn_fs_t *fs,
{
svn_fs_base__str_to_dbt(&value, val);
svn_fs_base__trail_debug(trail, "miscellaneous", "add");
- return BDB_WRAP(fs, "storing miscellaneous record",
+ return BDB_WRAP(fs, N_("storing miscellaneous record"),
bfd->miscellaneous->put(bfd->miscellaneous,
trail->db_txn,
&key, &value, 0));
@@ -128,7 +128,7 @@ svn_fs_bdb__miscellaneous_get(const char **val,
if (db_err != DB_NOTFOUND)
{
- SVN_ERR(BDB_WRAP(fs, "fetching miscellaneous record", db_err));
+ SVN_ERR(BDB_WRAP(fs, N_("fetching miscellaneous record"), db_err));
*val = apr_pstrmemdup(pool, value.data, value.size);
}
return SVN_NO_ERROR;
diff --git a/subversion/libsvn_fs_base/bdb/node-origins-table.c b/subversion/libsvn_fs_base/bdb/node-origins-table.c
index 4715dd2..48dc43b 100644
--- a/subversion/libsvn_fs_base/bdb/node-origins-table.c
+++ b/subversion/libsvn_fs_base/bdb/node-origins-table.c
@@ -124,7 +124,7 @@ svn_error_t *svn_fs_bdb__set_node_origin(svn_fs_t *fs,
/* Create a value from our ORIGIN_ID, and add this record to the table. */
svn_fs_base__id_to_dbt(&value, origin_id, pool);
svn_fs_base__trail_debug(trail, "node-origins", "put");
- return BDB_WRAP(fs, _("storing node-origins record"),
+ return BDB_WRAP(fs, N_("storing node-origins record"),
bfd->node_origins->put(bfd->node_origins, trail->db_txn,
&key, &value, 0));
}
@@ -139,7 +139,7 @@ svn_error_t *svn_fs_bdb__delete_node_origin(svn_fs_t *fs,
svn_fs_base__str_to_dbt(&key, node_id);
svn_fs_base__trail_debug(trail, "node-origins", "del");
- return BDB_WRAP(fs, "deleting entry from 'node-origins' table",
+ return BDB_WRAP(fs, N_("deleting entry from 'node-origins' table"),
bfd->node_origins->del(bfd->node_origins,
trail->db_txn, &key, 0));
}
diff --git a/subversion/libsvn_fs_base/bdb/nodes-table.c b/subversion/libsvn_fs_base/bdb/nodes-table.c
index ba84964..d0f475f 100644
--- a/subversion/libsvn_fs_base/bdb/nodes-table.c
+++ b/subversion/libsvn_fs_base/bdb/nodes-table.c
@@ -99,7 +99,7 @@ svn_fs_bdb__new_node_id(svn_fs_id_t **id_p,
/* Get the current value associated with the `next-key' key in the table. */
svn_fs_base__str_to_dbt(&query, NEXT_KEY_KEY);
svn_fs_base__trail_debug(trail, "nodes", "get");
- SVN_ERR(BDB_WRAP(fs, _("allocating new node ID (getting 'next-key')"),
+ SVN_ERR(BDB_WRAP(fs, N_("allocating new node ID (getting 'next-key')"),
bfd->nodes->get(bfd->nodes, trail->db_txn,
&query,
svn_fs_base__result_dbt(&result),
@@ -117,7 +117,7 @@ svn_fs_bdb__new_node_id(svn_fs_id_t **id_p,
svn_fs_base__str_to_dbt(&query, NEXT_KEY_KEY),
svn_fs_base__str_to_dbt(&result, next_key),
0);
- SVN_ERR(BDB_WRAP(fs, _("bumping next node ID key"), db_err));
+ SVN_ERR(BDB_WRAP(fs, N_("bumping next node ID key"), db_err));
/* Create and return the new node id. */
*id_p = svn_fs_base__id_create(next_node_id, copy_id, txn_id, pool);
@@ -179,7 +179,7 @@ svn_fs_bdb__delete_nodes_entry(svn_fs_t *fs,
DBT key;
svn_fs_base__trail_debug(trail, "nodes", "del");
- return BDB_WRAP(fs, _("deleting entry from 'nodes' table"),
+ return BDB_WRAP(fs, N_("deleting entry from 'nodes' table"),
bfd->nodes->del(bfd->nodes,
trail->db_txn,
svn_fs_base__id_to_dbt(&key, id, pool),
@@ -217,7 +217,7 @@ svn_fs_bdb__get_node_revision(node_revision_t **noderev_p,
return svn_fs_base__err_dangling_id(fs, id);
/* Handle any other error conditions. */
- SVN_ERR(BDB_WRAP(fs, _("reading node revision"), db_err));
+ SVN_ERR(BDB_WRAP(fs, N_("reading node revision"), db_err));
/* If our caller doesn't really care about the return value here,
just return successfully. */
@@ -250,7 +250,7 @@ svn_fs_bdb__put_node_revision(svn_fs_t *fs,
SVN_ERR(svn_fs_base__unparse_node_revision_skel(&skel, noderev,
bfd->format, pool));
svn_fs_base__trail_debug(trail, "nodes", "put");
- return BDB_WRAP(fs, _("storing node revision"),
+ return BDB_WRAP(fs, N_("storing node revision"),
bfd->nodes->put(bfd->nodes, db_txn,
svn_fs_base__id_to_dbt(&key, id, pool),
svn_fs_base__skel_to_dbt(&value, skel,
diff --git a/subversion/libsvn_fs_base/bdb/reps-table.c b/subversion/libsvn_fs_base/bdb/reps-table.c
index 1e83d2a..1c8ea6d 100644
--- a/subversion/libsvn_fs_base/bdb/reps-table.c
+++ b/subversion/libsvn_fs_base/bdb/reps-table.c
@@ -98,7 +98,7 @@ svn_fs_bdb__read_rep(representation_t **rep_p,
_("No such representation '%s'"), key);
/* Handle any other error conditions. */
- SVN_ERR(BDB_WRAP(fs, _("reading representation"), db_err));
+ SVN_ERR(BDB_WRAP(fs, N_("reading representation"), db_err));
/* Parse the REPRESENTATION skel. */
skel = svn_skel__parse(result.data, result.size, pool);
@@ -125,7 +125,7 @@ svn_fs_bdb__write_rep(svn_fs_t *fs,
/* Now write the record. */
svn_fs_base__trail_debug(trail, "representations", "put");
- return BDB_WRAP(fs, _("storing representation"),
+ return BDB_WRAP(fs, N_("storing representation"),
bfd->representations->put
(bfd->representations, trail->db_txn,
svn_fs_base__str_to_dbt(&query, key),
@@ -153,7 +153,7 @@ svn_fs_bdb__write_new_rep(const char **key,
/* Get the current value associated with `next-key'. */
svn_fs_base__str_to_dbt(&query, NEXT_KEY_KEY);
svn_fs_base__trail_debug(trail, "representations", "get");
- SVN_ERR(BDB_WRAP(fs, _("allocating new representation (getting next-key)"),
+ SVN_ERR(BDB_WRAP(fs, N_("allocating new representation (getting next-key)"),
bfd->representations->get
(bfd->representations, trail->db_txn, &query,
svn_fs_base__result_dbt(&result), 0)));
@@ -174,7 +174,7 @@ svn_fs_bdb__write_new_rep(const char **key,
svn_fs_base__str_to_dbt(&result, next_key),
0);
- return BDB_WRAP(fs, _("bumping next representation key"), db_err);
+ return BDB_WRAP(fs, N_("bumping next representation key"), db_err);
}
@@ -200,5 +200,5 @@ svn_fs_bdb__delete_rep(svn_fs_t *fs,
_("No such representation '%s'"), key);
/* Handle any other error conditions. */
- return BDB_WRAP(fs, _("deleting representation"), db_err);
+ return BDB_WRAP(fs, N_("deleting representation"), db_err);
}
diff --git a/subversion/libsvn_fs_base/bdb/rev-table.c b/subversion/libsvn_fs_base/bdb/rev-table.c
index 69e7446..b752249 100644
--- a/subversion/libsvn_fs_base/bdb/rev-table.c
+++ b/subversion/libsvn_fs_base/bdb/rev-table.c
@@ -92,7 +92,7 @@ svn_fs_bdb__get_rev(revision_t **revision_p,
return svn_fs_base__err_dangling_rev(fs, rev);
/* Handle any other error conditions. */
- SVN_ERR(BDB_WRAP(fs, _("reading filesystem revision"), db_err));
+ SVN_ERR(BDB_WRAP(fs, N_("reading filesystem revision"), db_err));
/* Parse REVISION skel. */
skel = svn_skel__parse(value.data, value.size, pool);
@@ -138,7 +138,7 @@ svn_fs_bdb__put_rev(svn_revnum_t *rev,
(bfd->revisions, trail->db_txn,
svn_fs_base__set_dbt(&query, &recno, sizeof(recno)),
svn_fs_base__skel_to_dbt(&result, skel, pool), 0);
- return BDB_WRAP(fs, "updating filesystem revision", db_err);
+ return BDB_WRAP(fs, N_("updating filesystem revision"), db_err);
}
svn_fs_base__trail_debug(trail, "revisions", "put");
@@ -146,7 +146,7 @@ svn_fs_bdb__put_rev(svn_revnum_t *rev,
svn_fs_base__recno_dbt(&key, &recno),
svn_fs_base__skel_to_dbt(&value, skel, pool),
DB_APPEND);
- SVN_ERR(BDB_WRAP(fs, "storing filesystem revision", db_err));
+ SVN_ERR(BDB_WRAP(fs, N_("storing filesystem revision"), db_err));
/* Turn the record number into a Subversion revision number.
Revisions are numbered starting with zero; Berkeley DB record
@@ -176,7 +176,7 @@ svn_fs_bdb__youngest_rev(svn_revnum_t *youngest_p,
/* Create a database cursor. */
svn_fs_base__trail_debug(trail, "revisions", "cursor");
- SVN_ERR(BDB_WRAP(fs, "getting youngest revision (creating cursor)",
+ SVN_ERR(BDB_WRAP(fs, N_("getting youngest revision (creating cursor)"),
bfd->revisions->cursor(bfd->revisions, trail->db_txn,
&cursor, 0)));
@@ -200,7 +200,7 @@ svn_fs_bdb__youngest_rev(svn_revnum_t *youngest_p,
"Corrupt DB: revision 0 missing from 'revisions' table, in "
"filesystem '%s'", fs->path);
- SVN_ERR(BDB_WRAP(fs, "getting youngest revision (finding last entry)",
+ SVN_ERR(BDB_WRAP(fs, N_("getting youngest revision (finding last entry)"),
db_err));
}
@@ -210,7 +210,7 @@ svn_fs_bdb__youngest_rev(svn_revnum_t *youngest_p,
reasons, and txn_commit shouldn't fail that way, and
2) using a cursor after committing its transaction can cause
undetectable database corruption. */
- SVN_ERR(BDB_WRAP(fs, "getting youngest revision (closing cursor)",
+ SVN_ERR(BDB_WRAP(fs, N_("getting youngest revision (closing cursor)"),
svn_bdb_dbc_close(cursor)));
/* Turn the record number into a Subversion revision number.
diff --git a/subversion/libsvn_fs_base/bdb/strings-table.c b/subversion/libsvn_fs_base/bdb/strings-table.c
index 032d789..f5348e7 100644
--- a/subversion/libsvn_fs_base/bdb/strings-table.c
+++ b/subversion/libsvn_fs_base/bdb/strings-table.c
@@ -91,7 +91,7 @@ locate_key(apr_size_t *length,
DBT result;
svn_fs_base__trail_debug(trail, "strings", "cursor");
- SVN_ERR(BDB_WRAP(fs, _("creating cursor for reading a string"),
+ SVN_ERR(BDB_WRAP(fs, N_("creating cursor for reading a string"),
bfd->strings->cursor(bfd->strings, trail->db_txn,
cursor, 0)));
@@ -121,7 +121,7 @@ locate_key(apr_size_t *length,
if (db_err != SVN_BDB_DB_BUFFER_SMALL)
{
svn_bdb_dbc_close(*cursor);
- return BDB_WRAP(fs, "moving cursor", db_err);
+ return BDB_WRAP(fs, N_("moving cursor"), db_err);
}
/* We got an SVN_BDB_DB_BUFFER_SMALL (typical since we have a
@@ -133,7 +133,7 @@ locate_key(apr_size_t *length,
if (db_err)
{
svn_bdb_dbc_close(*cursor);
- return BDB_WRAP(fs, "rerunning cursor move", db_err);
+ return BDB_WRAP(fs, N_("rerunning cursor move"), db_err);
}
}
@@ -225,7 +225,7 @@ svn_fs_bdb__string_read(svn_fs_t *fs,
return SVN_NO_ERROR;
}
if (db_err)
- return BDB_WRAP(fs, "reading string", db_err);
+ return BDB_WRAP(fs, N_("reading string"), db_err);
}
/* The current record contains OFFSET. Fetch the contents now. Note that
@@ -244,14 +244,14 @@ svn_fs_bdb__string_read(svn_fs_t *fs,
if (db_err)
{
svn_bdb_dbc_close(cursor);
- return BDB_WRAP(fs, "reading string", db_err);
+ return BDB_WRAP(fs, N_("reading string"), db_err);
}
bytes_read += result.size;
if (bytes_read == *len)
{
/* Done with the cursor. */
- SVN_ERR(BDB_WRAP(fs, "closing string-reading cursor",
+ SVN_ERR(BDB_WRAP(fs, N_("closing string-reading cursor"),
svn_bdb_dbc_close(cursor)));
break;
}
@@ -262,7 +262,7 @@ svn_fs_bdb__string_read(svn_fs_t *fs,
if (db_err == DB_NOTFOUND)
break;
if (db_err)
- return BDB_WRAP(fs, "reading string", db_err);
+ return BDB_WRAP(fs, N_("reading string"), db_err);
/* We'll be reading from the beginning of the next record */
offset = 0;
@@ -297,7 +297,7 @@ get_key_and_bump(svn_fs_t *fs,
write the new value -- that would append, not overwrite. */
svn_fs_base__trail_debug(trail, "strings", "cursor");
- SVN_ERR(BDB_WRAP(fs, "creating cursor for reading a string",
+ SVN_ERR(BDB_WRAP(fs, N_("creating cursor for reading a string"),
bfd->strings->cursor(bfd->strings, trail->db_txn,
&cursor, 0)));
@@ -310,7 +310,7 @@ get_key_and_bump(svn_fs_t *fs,
if (db_err)
{
svn_bdb_dbc_close(cursor);
- return BDB_WRAP(fs, "getting next-key value", db_err);
+ return BDB_WRAP(fs, N_("getting next-key value"), db_err);
}
svn_fs_base__track_dbt(&result, pool);
@@ -328,10 +328,10 @@ get_key_and_bump(svn_fs_t *fs,
{
svn_bdb_dbc_close(cursor); /* ignore the error, the original is
more important. */
- return BDB_WRAP(fs, "bumping next string key", db_err);
+ return BDB_WRAP(fs, N_("bumping next string key"), db_err);
}
- return BDB_WRAP(fs, "closing string-reading cursor",
+ return BDB_WRAP(fs, N_("closing string-reading cursor"),
svn_bdb_dbc_close(cursor));
}
@@ -355,7 +355,7 @@ svn_fs_bdb__string_append(svn_fs_t *fs,
/* Store a new record into the database. */
svn_fs_base__trail_debug(trail, "strings", "put");
- return BDB_WRAP(fs, "appending string",
+ return BDB_WRAP(fs, N_("appending string"),
bfd->strings->put
(bfd->strings, trail->db_txn,
svn_fs_base__str_to_dbt(&query, *key),
@@ -387,7 +387,7 @@ svn_fs_bdb__string_clear(svn_fs_t *fs,
"No such string '%s'", key);
/* Handle any other error conditions. */
- SVN_ERR(BDB_WRAP(fs, "clearing string", db_err));
+ SVN_ERR(BDB_WRAP(fs, N_("clearing string"), db_err));
/* Shove empty data back in for this key. */
svn_fs_base__clear_dbt(&result);
@@ -396,7 +396,7 @@ svn_fs_bdb__string_clear(svn_fs_t *fs,
result.flags |= DB_DBT_USERMEM;
svn_fs_base__trail_debug(trail, "strings", "put");
- return BDB_WRAP(fs, "storing empty contents",
+ return BDB_WRAP(fs, N_("storing empty contents"),
bfd->strings->put(bfd->strings, trail->db_txn,
&query, &result, 0));
}
@@ -433,7 +433,7 @@ svn_fs_bdb__string_size(svn_filesize_t *size,
return SVN_NO_ERROR;
}
if (db_err)
- return BDB_WRAP(fs, "fetching string length", db_err);
+ return BDB_WRAP(fs, N_("fetching string length"), db_err);
total += length;
}
@@ -463,7 +463,7 @@ svn_fs_bdb__string_delete(svn_fs_t *fs,
"No such string '%s'", key);
/* Handle any other error conditions. */
- return BDB_WRAP(fs, "deleting string", db_err);
+ return BDB_WRAP(fs, N_("deleting string"), db_err);
}
@@ -488,7 +488,7 @@ svn_fs_bdb__string_copy(svn_fs_t *fs,
SVN_ERR(get_key_and_bump(fs, new_key, trail, pool));
svn_fs_base__trail_debug(trail, "strings", "cursor");
- SVN_ERR(BDB_WRAP(fs, "creating cursor for reading a string",
+ SVN_ERR(BDB_WRAP(fs, N_("creating cursor for reading a string"),
bfd->strings->cursor(bfd->strings, trail->db_txn,
&cursor, 0)));
@@ -502,7 +502,7 @@ svn_fs_bdb__string_copy(svn_fs_t *fs,
if (db_err)
{
svn_bdb_dbc_close(cursor);
- return BDB_WRAP(fs, "getting next-key value", db_err);
+ return BDB_WRAP(fs, N_("getting next-key value"), db_err);
}
while (1)
@@ -521,7 +521,7 @@ svn_fs_bdb__string_copy(svn_fs_t *fs,
if (db_err)
{
svn_bdb_dbc_close(cursor);
- return BDB_WRAP(fs, "writing copied data", db_err);
+ return BDB_WRAP(fs, N_("writing copied data"), db_err);
}
/* Read the next chunk. Terminate loop if we're done. */
@@ -532,10 +532,10 @@ svn_fs_bdb__string_copy(svn_fs_t *fs,
if (db_err)
{
svn_bdb_dbc_close(cursor);
- return BDB_WRAP(fs, "fetching string data for a copy", db_err);
+ return BDB_WRAP(fs, N_("fetching string data for a copy"), db_err);
}
}
- return BDB_WRAP(fs, "closing string-reading cursor",
+ return BDB_WRAP(fs, N_("closing string-reading cursor"),
svn_bdb_dbc_close(cursor));
}
diff --git a/subversion/libsvn_fs_base/bdb/txn-table.c b/subversion/libsvn_fs_base/bdb/txn-table.c
index e19e89a..54a0e28 100644
--- a/subversion/libsvn_fs_base/bdb/txn-table.c
+++ b/subversion/libsvn_fs_base/bdb/txn-table.c
@@ -96,7 +96,7 @@ svn_fs_bdb__put_txn(svn_fs_t *fs,
svn_fs_base__str_to_dbt(&key, txn_name);
svn_fs_base__skel_to_dbt(&value, txn_skel, pool);
svn_fs_base__trail_debug(trail, "transactions", "put");
- return BDB_WRAP(fs, _("storing transaction record"),
+ return BDB_WRAP(fs, N_("storing transaction record"),
bfd->transactions->put(bfd->transactions, trail->db_txn,
&key, &value, 0));
}
@@ -120,7 +120,7 @@ allocate_txn_id(const char **id_p,
/* Get the current value associated with the `next-key' key in the table. */
svn_fs_base__trail_debug(trail, "transactions", "get");
- SVN_ERR(BDB_WRAP(fs, "allocating new transaction ID (getting 'next-key')",
+ SVN_ERR(BDB_WRAP(fs, N_("allocating new transaction ID (getting 'next-key')"),
bfd->transactions->get(bfd->transactions, trail->db_txn,
&query,
svn_fs_base__result_dbt(&result),
@@ -139,7 +139,7 @@ allocate_txn_id(const char **id_p,
db_err = bfd->transactions->put(bfd->transactions, trail->db_txn,
&query, &result, 0);
- return BDB_WRAP(fs, "bumping next transaction key", db_err);
+ return BDB_WRAP(fs, N_("bumping next transaction key"), db_err);
}
@@ -185,7 +185,7 @@ svn_fs_bdb__delete_txn(svn_fs_t *fs,
/* Delete the transaction from the `transactions' table. */
svn_fs_base__str_to_dbt(&key, txn_name);
svn_fs_base__trail_debug(trail, "transactions", "del");
- return BDB_WRAP(fs, "deleting entry from 'transactions' table",
+ return BDB_WRAP(fs, N_("deleting entry from 'transactions' table"),
bfd->transactions->del(bfd->transactions,
trail->db_txn, &key, 0));
}
@@ -215,7 +215,7 @@ svn_fs_bdb__get_txn(transaction_t **txn_p,
if (db_err == DB_NOTFOUND)
return svn_fs_base__err_no_such_txn(fs, txn_name);
- SVN_ERR(BDB_WRAP(fs, "reading transaction", db_err));
+ SVN_ERR(BDB_WRAP(fs, N_("reading transaction"), db_err));
/* Parse TRANSACTION skel */
skel = svn_skel__parse(value.data, value.size, pool);
@@ -248,7 +248,7 @@ svn_fs_bdb__get_txn_list(apr_array_header_t **names_p,
/* Create a database cursor to list the transaction names. */
svn_fs_base__trail_debug(trail, "transactions", "cursor");
- SVN_ERR(BDB_WRAP(fs, "reading transaction list (opening cursor)",
+ SVN_ERR(BDB_WRAP(fs, N_("reading transaction list (opening cursor)"),
bfd->transactions->cursor(bfd->transactions,
trail->db_txn, &cursor, 0)));
@@ -311,10 +311,10 @@ svn_fs_bdb__get_txn_list(apr_array_header_t **names_p,
db_c_err = svn_bdb_dbc_close(cursor);
if (db_err != DB_NOTFOUND)
{
- SVN_ERR(BDB_WRAP(fs, "reading transaction list (listing keys)",
+ SVN_ERR(BDB_WRAP(fs, N_("reading transaction list (listing keys)"),
db_err));
}
- SVN_ERR(BDB_WRAP(fs, "reading transaction list (closing cursor)",
+ SVN_ERR(BDB_WRAP(fs, N_("reading transaction list (closing cursor)"),
db_c_err));
/* Destroy the per-iteration subpool */
diff --git a/subversion/libsvn_fs_base/bdb/uuids-table.c b/subversion/libsvn_fs_base/bdb/uuids-table.c
index ecc967b..0481894 100644
--- a/subversion/libsvn_fs_base/bdb/uuids-table.c
+++ b/subversion/libsvn_fs_base/bdb/uuids-table.c
@@ -116,7 +116,7 @@ svn_error_t *svn_fs_bdb__get_uuid(svn_fs_t *fs,
value.flags |= DB_DBT_USERMEM;
svn_fs_base__trail_debug(trail, "uuids", "get");
- SVN_ERR(BDB_WRAP(fs, _("get repository uuid"),
+ SVN_ERR(BDB_WRAP(fs, N_("get repository uuid"),
uuids->get(uuids, trail->db_txn, &key, &value, 0)));
*uuid = apr_pstrmemdup(pool, value.data, value.size);
@@ -144,6 +144,6 @@ svn_error_t *svn_fs_bdb__set_uuid(svn_fs_t *fs,
value.data = apr_pstrmemdup(pool, uuid, value.size + 1);
svn_fs_base__trail_debug(trail, "uuids", "put");
- return BDB_WRAP(fs, _("set repository uuid"),
+ return BDB_WRAP(fs, N_("set repository uuid"),
uuids->put(uuids, trail->db_txn, &key, &value, 0));
}
diff --git a/subversion/libsvn_fs_base/dag.c b/subversion/libsvn_fs_base/dag.c
index 284838d..510ccbb 100644
--- a/subversion/libsvn_fs_base/dag.c
+++ b/subversion/libsvn_fs_base/dag.c
@@ -350,7 +350,7 @@ dir_entry_id_from_node(const svn_fs_id_t **id_p,
SVN_ERR(svn_fs_base__dag_dir_entries(&entries, parent, trail, pool));
if (entries)
- dirent = apr_hash_get(entries, name, APR_HASH_KEY_STRING);
+ dirent = svn_hash_gets(entries, name);
else
dirent = NULL;
@@ -421,7 +421,7 @@ set_entry(dag_node_t *parent,
entries = apr_hash_make(pool);
/* Now, add our new entry to the entries list. */
- apr_hash_set(entries, name, APR_HASH_KEY_STRING, id);
+ svn_hash_sets(entries, name, id);
/* Finally, replace the old entries list with the new one. */
SVN_ERR(svn_fs_base__unparse_entries_skel(&entries_skel, entries,
@@ -579,7 +579,7 @@ svn_fs_base__dag_get_proplist(apr_hash_t **proplist_p,
svn_error_t *
svn_fs_base__dag_set_proplist(dag_node_t *node,
- apr_hash_t *proplist,
+ const apr_hash_t *proplist,
const char *txn_id,
trail_t *trail,
apr_pool_t *pool)
@@ -910,7 +910,7 @@ svn_fs_base__dag_delete(dag_node_t *parent,
/* Find NAME in the ENTRIES skel. */
if (entries)
- id = apr_hash_get(entries, name, APR_HASH_KEY_STRING);
+ id = svn_hash_gets(entries, name);
/* If we never found ID in ENTRIES (perhaps because there are no
ENTRIES, perhaps because ID just isn't in the existing ENTRIES
@@ -929,7 +929,7 @@ svn_fs_base__dag_delete(dag_node_t *parent,
trail, pool));
/* Remove this entry from its parent's entries list. */
- apr_hash_set(entries, name, APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(entries, name, NULL);
/* Replace the old entries list with the new one. */
{
@@ -1593,12 +1593,11 @@ svn_fs_base__dag_commit_txn(svn_revnum_t *new_rev,
*new_rev = SVN_INVALID_REVNUM;
SVN_ERR(svn_fs_bdb__put_rev(new_rev, fs, &revision, trail, pool));
- if (apr_hash_get(txnprops, SVN_FS__PROP_TXN_CHECK_OOD, APR_HASH_KEY_STRING))
+ if (svn_hash_gets(txnprops, SVN_FS__PROP_TXN_CHECK_OOD))
SVN_ERR(svn_fs_base__set_txn_prop
(fs, txn_id, SVN_FS__PROP_TXN_CHECK_OOD, NULL, trail, pool));
- if (apr_hash_get(txnprops, SVN_FS__PROP_TXN_CHECK_LOCKS,
- APR_HASH_KEY_STRING))
+ if (svn_hash_gets(txnprops, SVN_FS__PROP_TXN_CHECK_LOCKS))
SVN_ERR(svn_fs_base__set_txn_prop
(fs, txn_id, SVN_FS__PROP_TXN_CHECK_LOCKS, NULL, trail, pool));
@@ -1632,7 +1631,7 @@ svn_fs_base__things_different(svn_boolean_t *props_changed,
if (! props_changed && ! contents_changed)
return SVN_NO_ERROR;
- /* The the node revision skels for these two nodes. */
+ /* The node revision skels for these two nodes. */
SVN_ERR(svn_fs_bdb__get_node_revision(&noderev1, node1->fs, node1->id,
trail, pool));
SVN_ERR(svn_fs_bdb__get_node_revision(&noderev2, node2->fs, node2->id,
diff --git a/subversion/libsvn_fs_base/dag.h b/subversion/libsvn_fs_base/dag.h
index 4d23a23..4c50c84 100644
--- a/subversion/libsvn_fs_base/dag.h
+++ b/subversion/libsvn_fs_base/dag.h
@@ -150,7 +150,7 @@ svn_error_t *svn_fs_base__dag_get_proplist(apr_hash_t **proplist_p,
node being changed must be mutable. TXN_ID is the Subversion
transaction under which this occurs. */
svn_error_t *svn_fs_base__dag_set_proplist(dag_node_t *node,
- apr_hash_t *proplist,
+ const apr_hash_t *proplist,
const char *txn_id,
trail_t *trail,
apr_pool_t *pool);
diff --git a/subversion/libsvn_fs_base/err.c b/subversion/libsvn_fs_base/err.c
index dc58bb6..c1e691d 100644
--- a/subversion/libsvn_fs_base/err.c
+++ b/subversion/libsvn_fs_base/err.c
@@ -62,10 +62,11 @@ svn_fs_base__err_dangling_id(svn_fs_t *fs, const svn_fs_id_t *id)
svn_error_t *
svn_fs_base__err_dangling_rev(svn_fs_t *fs, svn_revnum_t rev)
{
+ /* Log the UUID as this error may be reported to the client. */
return svn_error_createf
(SVN_ERR_FS_NO_SUCH_REVISION, 0,
_("No such revision %ld in filesystem '%s'"),
- rev, fs->path);
+ rev, fs->uuid);
}
diff --git a/subversion/libsvn_fs_base/fs.c b/subversion/libsvn_fs_base/fs.c
index 30a8217..4ad9e6f 100644
--- a/subversion/libsvn_fs_base/fs.c
+++ b/subversion/libsvn_fs_base/fs.c
@@ -28,6 +28,7 @@
#include <apr_pools.h>
#include <apr_file_io.h>
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_fs.h"
#include "svn_path.h"
@@ -64,6 +65,8 @@
#include "../libsvn_fs/fs-loader.h"
#include "private/svn_fs_util.h"
+#include "private/svn_subr_private.h"
+
/* Checking for return values, and reporting errors. */
@@ -333,9 +336,10 @@ bdb_write_config(svn_fs_t *fs)
"#\n"
"# Make sure you read the documentation at:\n"
"#\n"
- "# http://www.oracle.com/technology/documentation/berkeley-db/db/ref/lock/max.html\n"
+ "# http://docs.oracle.com/cd/E17076_02/html/programmer_reference/lock_max.html\n"
"#\n"
"# before tweaking these values.\n"
+ "#\n"
"set_lk_max_locks 2000\n"
"set_lk_max_lockers 2000\n"
"set_lk_max_objects 2000\n"
@@ -344,9 +348,9 @@ bdb_write_config(svn_fs_t *fs)
"#\n"
"# Make sure you read the documentation at:\n"
"#\n"
- "# http://www.oracle.com/technology/documentation/berkeley-db/db/api_c/env_set_lg_bsize.html\n"
- "# http://www.oracle.com/technology/documentation/berkeley-db/db/api_c/env_set_lg_max.html\n"
- "# http://www.oracle.com/technology/documentation/berkeley-db/db/ref/log/limits.html\n"
+ "# http://docs.oracle.com/cd/E17076_02/html/api_reference/C/envset_lg_bsize.html\n"
+ "# http://docs.oracle.com/cd/E17076_02/html/api_reference/C/envset_lg_max.html\n"
+ "# http://docs.oracle.com/cd/E17076_02/html/programmer_reference/log_limits.html\n"
"#\n"
"# Increase the size of the in-memory log buffer from the default\n"
"# of 32 Kbytes to 256 Kbytes. Decrease the log file size from\n"
@@ -354,24 +358,28 @@ bdb_write_config(svn_fs_t *fs)
"# space required for hot backups. The size of the log file must be\n"
"# at least four times the size of the in-memory log buffer.\n"
"#\n"
- "# Note: Decreasing the in-memory buffer size below 256 Kbytes\n"
- "# will hurt commit performance. For details, see this post from\n"
- "# Daniel Berlin <dan@dberlin.org>:\n"
+ "# Note: Decreasing the in-memory buffer size below 256 Kbytes will hurt\n"
+ "# hurt commit performance. For details, see:\n"
+ "#\n"
+ "# http://svn.haxx.se/dev/archive-2002-02/0141.shtml\n"
"#\n"
- "# http://subversion.tigris.org/servlets/ReadMsg?list=dev&msgId=161960\n"
"set_lg_bsize 262144\n"
"set_lg_max 1048576\n"
"#\n"
"# If you see \"log region out of memory\" errors, bump lg_regionmax.\n"
- "# See http://www.oracle.com/technology/documentation/berkeley-db/db/ref/log/config.html\n"
- "# and http://svn.haxx.se/users/archive-2004-10/1001.shtml for more.\n"
+ "# For more information, see:\n"
+ "#\n"
+ "# http://docs.oracle.com/cd/E17076_02/html/programmer_reference/log_config.html\n"
+ "# http://svn.haxx.se/users/archive-2004-10/1000.shtml\n"
+ "#\n"
"set_lg_regionmax 131072\n"
"#\n"
/* ### Configure this with "svnadmin create --bdb-cache-size" */
"# The default cache size in BDB is only 256k. As explained in\n"
- "# http://svn.haxx.se/dev/archive-2004-12/0369.shtml, this is too\n"
+ "# http://svn.haxx.se/dev/archive-2004-12/0368.shtml, this is too\n"
"# small for most applications. Bump this number if \"db_stat -m\"\n"
"# shows too many cache misses.\n"
+ "#\n"
"set_cachesize 0 1048576 1\n";
/* Run-time configurable options.
@@ -397,11 +405,12 @@ bdb_write_config(svn_fs_t *fs)
"# Disable fsync of log files on transaction commit. Read the\n"
"# documentation about DB_TXN_NOSYNC at:\n"
"#\n"
- "# http://www.oracle.com/technology/documentation/berkeley-db/db/ref/log/config.html\n"
+ "# http://docs.oracle.com/cd/E17076_02/html/programmer_reference/log_config.html\n"
"#\n"
- "# [requires Berkeley DB 4.0]\n",
+ "# [requires Berkeley DB 4.0]\n"
+ "#\n",
/* inactive */
- "# set_flags DB_TXN_NOSYNC\n",
+ "#set_flags DB_TXN_NOSYNC\n",
/* active */
"set_flags DB_TXN_NOSYNC\n" },
/* Controlled by "svnadmin create --bdb-log-keep" */
@@ -411,11 +420,12 @@ bdb_write_config(svn_fs_t *fs)
"# Enable automatic removal of unused transaction log files.\n"
"# Read the documentation about DB_LOG_AUTOREMOVE at:\n"
"#\n"
- "# http://www.oracle.com/technology/documentation/berkeley-db/db/ref/log/config.html\n"
+ "# http://docs.oracle.com/cd/E17076_02/html/programmer_reference/log_config.html\n"
"#\n"
- "# [requires Berkeley DB 4.2]\n",
+ "# [requires Berkeley DB 4.2]\n"
+ "#\n",
/* inactive */
- "# set_flags DB_LOG_AUTOREMOVE\n",
+ "#set_flags DB_LOG_AUTOREMOVE\n",
/* active */
"set_flags DB_LOG_AUTOREMOVE\n" },
};
@@ -439,9 +449,7 @@ bdb_write_config(svn_fs_t *fs)
if (fs->config)
{
- value = apr_hash_get(fs->config,
- dbconfig_options[i].config_key,
- APR_HASH_KEY_STRING);
+ value = svn_hash_gets(fs->config, dbconfig_options[i].config_key);
}
SVN_ERR(svn_io_file_write_full(dbconfig_file,
@@ -464,15 +472,22 @@ bdb_write_config(svn_fs_t *fs)
return svn_io_file_close(dbconfig_file, fs->pool);
}
-
-
static svn_error_t *
-base_serialized_init(svn_fs_t *fs, apr_pool_t *common_pool, apr_pool_t *pool)
+base_bdb_verify_root(svn_fs_root_t *root,
+ apr_pool_t *scratch_pool)
{
- /* Nothing to do here. */
+ /* Verifying is currently a no op for BDB. */
return SVN_NO_ERROR;
}
+static svn_error_t *
+base_bdb_freeze(svn_fs_t *fs,
+ svn_fs_freeze_func_t freeze_func,
+ void *freeze_baton,
+ apr_pool_t *pool)
+{
+ SVN__NOT_IMPLEMENTED();
+}
/* Creating a new filesystem */
@@ -482,7 +497,6 @@ static fs_vtable_t fs_vtable = {
svn_fs_base__revision_prop,
svn_fs_base__revision_proplist,
svn_fs_base__change_rev_prop,
- svn_fs_base__get_uuid,
svn_fs_base__set_uuid,
svn_fs_base__revision_root,
svn_fs_base__begin_txn,
@@ -495,6 +509,8 @@ static fs_vtable_t fs_vtable = {
svn_fs_base__unlock,
svn_fs_base__get_lock,
svn_fs_base__get_locks,
+ base_bdb_verify_root,
+ base_bdb_freeze,
base_bdb_set_errcall,
};
@@ -555,62 +571,62 @@ open_databases(svn_fs_t *fs,
/* Create the databases in the environment. */
SVN_ERR(BDB_WRAP(fs, (create
- ? "creating 'nodes' table"
- : "opening 'nodes' table"),
+ ? N_("creating 'nodes' table")
+ : N_("opening 'nodes' table")),
svn_fs_bdb__open_nodes_table(&bfd->nodes,
bfd->bdb->env,
create)));
SVN_ERR(BDB_WRAP(fs, (create
- ? "creating 'revisions' table"
- : "opening 'revisions' table"),
+ ? N_("creating 'revisions' table")
+ : N_("opening 'revisions' table")),
svn_fs_bdb__open_revisions_table(&bfd->revisions,
bfd->bdb->env,
create)));
SVN_ERR(BDB_WRAP(fs, (create
- ? "creating 'transactions' table"
- : "opening 'transactions' table"),
+ ? N_("creating 'transactions' table")
+ : N_("opening 'transactions' table")),
svn_fs_bdb__open_transactions_table(&bfd->transactions,
bfd->bdb->env,
create)));
SVN_ERR(BDB_WRAP(fs, (create
- ? "creating 'copies' table"
- : "opening 'copies' table"),
+ ? N_("creating 'copies' table")
+ : N_("opening 'copies' table")),
svn_fs_bdb__open_copies_table(&bfd->copies,
bfd->bdb->env,
create)));
SVN_ERR(BDB_WRAP(fs, (create
- ? "creating 'changes' table"
- : "opening 'changes' table"),
+ ? N_("creating 'changes' table")
+ : N_("opening 'changes' table")),
svn_fs_bdb__open_changes_table(&bfd->changes,
bfd->bdb->env,
create)));
SVN_ERR(BDB_WRAP(fs, (create
- ? "creating 'representations' table"
- : "opening 'representations' table"),
+ ? N_("creating 'representations' table")
+ : N_("opening 'representations' table")),
svn_fs_bdb__open_reps_table(&bfd->representations,
bfd->bdb->env,
create)));
SVN_ERR(BDB_WRAP(fs, (create
- ? "creating 'strings' table"
- : "opening 'strings' table"),
+ ? N_("creating 'strings' table")
+ : N_("opening 'strings' table")),
svn_fs_bdb__open_strings_table(&bfd->strings,
bfd->bdb->env,
create)));
SVN_ERR(BDB_WRAP(fs, (create
- ? "creating 'uuids' table"
- : "opening 'uuids' table"),
+ ? N_("creating 'uuids' table")
+ : N_("opening 'uuids' table")),
svn_fs_bdb__open_uuids_table(&bfd->uuids,
bfd->bdb->env,
create)));
SVN_ERR(BDB_WRAP(fs, (create
- ? "creating 'locks' table"
- : "opening 'locks' table"),
+ ? N_("creating 'locks' table")
+ : N_("opening 'locks' table")),
svn_fs_bdb__open_locks_table(&bfd->locks,
bfd->bdb->env,
create)));
SVN_ERR(BDB_WRAP(fs, (create
- ? "creating 'lock-tokens' table"
- : "opening 'lock-tokens' table"),
+ ? N_("creating 'lock-tokens' table")
+ : N_("opening 'lock-tokens' table")),
svn_fs_bdb__open_lock_tokens_table(&bfd->lock_tokens,
bfd->bdb->env,
create)));
@@ -618,8 +634,8 @@ open_databases(svn_fs_t *fs,
if (format >= SVN_FS_BASE__MIN_NODE_ORIGINS_FORMAT)
{
SVN_ERR(BDB_WRAP(fs, (create
- ? "creating 'node-origins' table"
- : "opening 'node-origins' table"),
+ ? N_("creating 'node-origins' table")
+ : N_("opening 'node-origins' table")),
svn_fs_bdb__open_node_origins_table(&bfd->node_origins,
bfd->bdb->env,
create)));
@@ -628,8 +644,8 @@ open_databases(svn_fs_t *fs,
if (format >= SVN_FS_BASE__MIN_MISCELLANY_FORMAT)
{
SVN_ERR(BDB_WRAP(fs, (create
- ? "creating 'miscellaneous' table"
- : "opening 'miscellaneous' table"),
+ ? N_("creating 'miscellaneous' table")
+ : N_("opening 'miscellaneous' table")),
svn_fs_bdb__open_miscellaneous_table(&bfd->miscellaneous,
bfd->bdb->env,
create)));
@@ -638,8 +654,8 @@ open_databases(svn_fs_t *fs,
if (format >= SVN_FS_BASE__MIN_REP_SHARING_FORMAT)
{
SVN_ERR(BDB_WRAP(fs, (create
- ? "creating 'checksum-reps' table"
- : "opening 'checksum-reps' table"),
+ ? N_("creating 'checksum-reps' table")
+ : N_("opening 'checksum-reps' table")),
svn_fs_bdb__open_checksum_reps_table(&bfd->checksum_reps,
bfd->bdb->env,
create)));
@@ -649,6 +665,15 @@ open_databases(svn_fs_t *fs,
}
+/* Called by functions that initialize an svn_fs_t struct, after that
+ initialization is done, to populate svn_fs_t->uuid. */
+static svn_error_t *
+populate_opened_fs(svn_fs_t *fs, apr_pool_t *scratch_pool)
+{
+ SVN_ERR(svn_fs_base__populate_uuid(fs, scratch_pool));
+ return SVN_NO_ERROR;
+}
+
static svn_error_t *
base_create(svn_fs_t *fs, const char *path, apr_pool_t *pool,
apr_pool_t *common_pool)
@@ -659,14 +684,11 @@ base_create(svn_fs_t *fs, const char *path, apr_pool_t *pool,
/* See if compatibility with older versions was explicitly requested. */
if (fs->config)
{
- if (apr_hash_get(fs->config, SVN_FS_CONFIG_PRE_1_4_COMPATIBLE,
- APR_HASH_KEY_STRING))
+ if (svn_hash_gets(fs->config, SVN_FS_CONFIG_PRE_1_4_COMPATIBLE))
format = 1;
- else if (apr_hash_get(fs->config, SVN_FS_CONFIG_PRE_1_5_COMPATIBLE,
- APR_HASH_KEY_STRING))
+ else if (svn_hash_gets(fs->config, SVN_FS_CONFIG_PRE_1_5_COMPATIBLE))
format = 2;
- else if (apr_hash_get(fs->config, SVN_FS_CONFIG_PRE_1_6_COMPATIBLE,
- APR_HASH_KEY_STRING))
+ else if (svn_hash_gets(fs->config, SVN_FS_CONFIG_PRE_1_6_COMPATIBLE))
format = 3;
}
@@ -684,7 +706,9 @@ base_create(svn_fs_t *fs, const char *path, apr_pool_t *pool,
if (svn_err) goto error;
((base_fs_data_t *) fs->fsap_data)->format = format;
- return base_serialized_init(fs, common_pool, pool);
+
+ SVN_ERR(populate_opened_fs(fs, pool));
+ return SVN_NO_ERROR;;
error:
svn_error_clear(cleanup_fs(fs));
@@ -768,7 +792,8 @@ base_open(svn_fs_t *fs, const char *path, apr_pool_t *pool,
if (svn_err) goto error;
}
- return base_serialized_init(fs, common_pool, pool);
+ SVN_ERR(populate_opened_fs(fs, pool));
+ return SVN_NO_ERROR;
error:
svn_error_clear(cleanup_fs(fs));
@@ -873,6 +898,21 @@ base_upgrade(svn_fs_t *fs, const char *path, apr_pool_t *pool,
}
static svn_error_t *
+base_verify(svn_fs_t *fs, const char *path,
+ svn_revnum_t start,
+ svn_revnum_t end,
+ svn_fs_progress_notify_func_t notify_func,
+ void *notify_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *pool,
+ apr_pool_t *common_pool)
+{
+ /* Verifying is currently a no op for BDB. */
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
base_bdb_recover(svn_fs_t *fs,
svn_cancel_func_t cancel_func, void *cancel_baton,
apr_pool_t *pool)
@@ -889,7 +929,8 @@ base_bdb_pack(svn_fs_t *fs,
void *notify_baton,
svn_cancel_func_t cancel,
void *cancel_baton,
- apr_pool_t *pool)
+ apr_pool_t *pool,
+ apr_pool_t *common_pool)
{
/* Packing is currently a no op for BDB. */
return SVN_NO_ERROR;
@@ -984,7 +1025,7 @@ svn_fs_base__clean_logs(const char *live_path,
sub_pool));
/* If log files do not match, go to the next log file. */
- if (files_match == FALSE)
+ if (!files_match)
continue;
}
@@ -1092,7 +1133,7 @@ copy_db_file_safely(const char *src_dir,
/* Open source file. If it's missing and that's allowed, there's
nothing more to do here. */
err = svn_io_file_open(&s, file_src_path,
- (APR_READ | APR_LARGEFILE | APR_BINARY),
+ (APR_READ | APR_LARGEFILE),
APR_OS_DEFAULT, pool);
if (err && APR_STATUS_IS_ENOENT(err->apr_err) && allow_missing)
{
@@ -1103,7 +1144,7 @@ copy_db_file_safely(const char *src_dir,
/* Open destination file. */
SVN_ERR(svn_io_file_open(&d, file_dst_path, (APR_WRITE | APR_CREATE |
- APR_LARGEFILE | APR_BINARY),
+ APR_LARGEFILE),
APR_OS_DEFAULT, pool));
/* Allocate our read/write buffer. */
@@ -1154,9 +1195,14 @@ copy_db_file_safely(const char *src_dir,
static svn_error_t *
-base_hotcopy(const char *src_path,
+base_hotcopy(svn_fs_t *src_fs,
+ svn_fs_t *dst_fs,
+ const char *src_path,
const char *dest_path,
svn_boolean_t clean_logs,
+ svn_boolean_t incremental,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
apr_pool_t *pool)
{
svn_error_t *err;
@@ -1164,6 +1210,11 @@ base_hotcopy(const char *src_path,
svn_boolean_t log_autoremove = FALSE;
int format;
+ if (incremental)
+ return svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
+ _("BDB repositories do not support incremental "
+ "hotcopy"));
+
/* Check the FS format number to be certain that we know how to
hotcopy this FS. Pre-1.2 filesystems did not have a format file (you
could say they were format "0"), so we will error here. This is not
@@ -1332,6 +1383,15 @@ base_get_description(void)
return _("Module for working with a Berkeley DB repository.");
}
+static svn_error_t *
+base_set_svn_fs_open(svn_fs_t *fs,
+ svn_error_t *(*svn_fs_open_)(svn_fs_t **,
+ const char *,
+ apr_hash_t *,
+ apr_pool_t *))
+{
+ return SVN_NO_ERROR;
+}
/* Base FS library vtable, used by the FS loader library. */
@@ -1341,13 +1401,15 @@ static fs_library_vtable_t library_vtable = {
base_open,
base_open_for_recovery,
base_upgrade,
+ base_verify,
base_delete_fs,
base_hotcopy,
base_get_description,
base_bdb_recover,
base_bdb_pack,
base_bdb_logfiles,
- svn_fs_base__id_parse
+ svn_fs_base__id_parse,
+ base_set_svn_fs_open
};
svn_error_t *
@@ -1367,7 +1429,7 @@ svn_fs_base__init(const svn_version_t *loader_version,
return svn_error_createf(SVN_ERR_VERSION_MISMATCH, NULL,
_("Unsupported FS loader version (%d) for bdb"),
loader_version->major);
- SVN_ERR(svn_ver_check_list(base_version(), checklist));
+ SVN_ERR(svn_ver_check_list2(base_version(), checklist, svn_ver_equal));
SVN_ERR(check_bdb_version());
SVN_ERR(svn_fs_bdb__init(common_pool));
diff --git a/subversion/libsvn_fs_base/fs.h b/subversion/libsvn_fs_base/fs.h
index dc07ee1..017c898 100644
--- a/subversion/libsvn_fs_base/fs.h
+++ b/subversion/libsvn_fs_base/fs.h
@@ -108,9 +108,6 @@ typedef struct base_fs_data_t
transaction trail alive. */
svn_boolean_t in_txn_trail;
- /* The filesystem UUID (or NULL if not-yet-known; see svn_fs_get_uuid). */
- const char *uuid;
-
/* The format number of this FS. */
int format;
diff --git a/subversion/libsvn_fs_base/id.c b/subversion/libsvn_fs_base/id.c
index 0e34540..c063d02 100644
--- a/subversion/libsvn_fs_base/id.c
+++ b/subversion/libsvn_fs_base/id.c
@@ -168,7 +168,7 @@ svn_fs_base__id_parse(const char *data,
{
svn_fs_id_t *id;
id_private_t *pvt;
- char *data_copy, *str, *last_str;
+ char *data_copy, *str;
/* Dup the ID data into POOL. Our returned ID will have references
into this memory. */
@@ -181,24 +181,25 @@ svn_fs_base__id_parse(const char *data,
id->fsap_data = pvt;
/* Now, we basically just need to "split" this data on `.'
- characters. We will use apr_strtok, which will put terminators
- where each of the '.'s used to be. Then our new id field will
- reference string locations inside our duplicate string.*/
+ characters. We will use svn_cstring_tokenize, which will put
+ terminators where each of the '.'s used to be. Then our new
+ id field will reference string locations inside our duplicate
+ string.*/
/* Node Id */
- str = apr_strtok(data_copy, ".", &last_str);
+ str = svn_cstring_tokenize(".", &data_copy);
if (str == NULL)
return NULL;
pvt->node_id = str;
/* Copy Id */
- str = apr_strtok(NULL, ".", &last_str);
+ str = svn_cstring_tokenize(".", &data_copy);
if (str == NULL)
return NULL;
pvt->copy_id = str;
/* Txn Id */
- str = apr_strtok(NULL, ".", &last_str);
+ str = svn_cstring_tokenize(".", &data_copy);
if (str == NULL)
return NULL;
pvt->txn_id = str;
diff --git a/subversion/libsvn_fs_base/lock.c b/subversion/libsvn_fs_base/lock.c
index f1d05e5..79f72cc 100644
--- a/subversion/libsvn_fs_base/lock.c
+++ b/subversion/libsvn_fs_base/lock.c
@@ -21,6 +21,7 @@
*/
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_error.h"
#include "svn_fs.h"
@@ -36,6 +37,8 @@
#include "util/fs_skels.h"
#include "../libsvn_fs/fs-loader.h"
#include "private/svn_fs_util.h"
+#include "private/svn_subr_private.h"
+#include "private/svn_dep_compat.h"
/* Add LOCK and its associated LOCK_TOKEN (associated with PATH) as
@@ -93,7 +96,7 @@ txn_body_lock(void *baton, trail_t *trail)
/* Until we implement directory locks someday, we only allow locks
on files or non-existent paths. */
if (kind == svn_node_dir)
- return SVN_FS__ERR_NOT_FILE(trail->fs, args->path, trail->pool);
+ return SVN_FS__ERR_NOT_FILE(trail->fs, args->path);
/* While our locking implementation easily supports the locking of
nonexistent paths, we deliberately choose not to allow such madness. */
@@ -113,7 +116,7 @@ txn_body_lock(void *baton, trail_t *trail)
/* There better be a username attached to the fs. */
if (!trail->fs->access_ctx || !trail->fs->access_ctx->username)
- return SVN_FS__ERR_NO_USER(trail->fs, trail->pool);
+ return SVN_FS__ERR_NO_USER(trail->fs);
/* Is the caller attempting to lock an out-of-date working file? */
if (SVN_IS_VALID_REVNUM(args->current_rev))
@@ -179,8 +182,7 @@ txn_body_lock(void *baton, trail_t *trail)
{
/* Sorry, the path is already locked. */
return SVN_FS__ERR_PATH_ALREADY_LOCKED(trail->fs,
- existing_lock,
- trail->pool);
+ existing_lock);
}
else
{
@@ -282,22 +284,21 @@ txn_body_unlock(void *baton, trail_t *trail)
if (args->token == NULL)
return svn_fs_base__err_no_lock_token(trail->fs, args->path);
else if (strcmp(lock_token, args->token) != 0)
- return SVN_FS__ERR_NO_SUCH_LOCK(trail->fs, args->path, trail->pool);
+ return SVN_FS__ERR_NO_SUCH_LOCK(trail->fs, args->path);
SVN_ERR(svn_fs_bdb__lock_get(&lock, trail->fs, lock_token,
trail, trail->pool));
/* There better be a username attached to the fs. */
if (!trail->fs->access_ctx || !trail->fs->access_ctx->username)
- return SVN_FS__ERR_NO_USER(trail->fs, trail->pool);
+ return SVN_FS__ERR_NO_USER(trail->fs);
/* And that username better be the same as the lock's owner. */
if (strcmp(trail->fs->access_ctx->username, lock->owner) != 0)
return SVN_FS__ERR_LOCK_OWNER_MISMATCH(
trail->fs,
trail->fs->access_ctx->username,
- lock->owner,
- trail->pool);
+ lock->owner);
}
/* Remove a row from each of the locking tables. */
@@ -396,9 +397,9 @@ svn_fs_base__get_lock(svn_lock_t **lock,
}
/* Implements `svn_fs_get_locks_callback_t', spooling lock information
- to disk as the filesystem provides it. BATON is an 'apr_file_t *'
- object pointing to open, writable spool file. We'll write the
- spool file with a format like so:
+ to a stream as the filesystem provides it. BATON is an 'svn_stream_t *'
+ object pointing to the stream. We'll write the spool stream with a
+ format like so:
SKEL1_LEN "\n" SKEL1 "\n" SKEL2_LEN "\n" SKEL2 "\n" ...
@@ -410,18 +411,20 @@ spool_locks_info(void *baton,
apr_pool_t *pool)
{
svn_skel_t *lock_skel;
- apr_file_t *spool_file = (apr_file_t *)baton;
+ svn_stream_t *stream = baton;
const char *skel_len;
svn_stringbuf_t *skel_buf;
+ apr_size_t len;
SVN_ERR(svn_fs_base__unparse_lock_skel(&lock_skel, lock, pool));
skel_buf = svn_skel__unparse(lock_skel, pool);
skel_len = apr_psprintf(pool, "%" APR_SIZE_T_FMT "\n", skel_buf->len);
- SVN_ERR(svn_io_file_write_full(spool_file, skel_len, strlen(skel_len),
- NULL, pool));
- SVN_ERR(svn_io_file_write_full(spool_file, skel_buf->data,
- skel_buf->len, NULL, pool));
- return svn_io_file_write_full(spool_file, "\n", 1, NULL, pool);
+ len = strlen(skel_len);
+ SVN_ERR(svn_stream_write(stream, skel_len, &len));
+ len = skel_buf->len;
+ SVN_ERR(svn_stream_write(stream, skel_buf->data, &len));
+ len = 1;
+ return svn_stream_write(stream, "\n", &len);
}
@@ -429,7 +432,7 @@ struct locks_get_args
{
const char *path;
svn_depth_t depth;
- apr_file_t *spool_file;
+ svn_stream_t *stream;
};
@@ -438,7 +441,7 @@ txn_body_get_locks(void *baton, trail_t *trail)
{
struct locks_get_args *args = baton;
return svn_fs_bdb__locks_get(trail->fs, args->path, args->depth,
- spool_locks_info, args->spool_file,
+ spool_locks_info, args->stream,
trail, trail->pool);
}
@@ -452,7 +455,6 @@ svn_fs_base__get_locks(svn_fs_t *fs,
apr_pool_t *pool)
{
struct locks_get_args args;
- apr_off_t offset = 0;
svn_stream_t *stream;
svn_stringbuf_t *buf;
svn_boolean_t eof;
@@ -462,21 +464,23 @@ svn_fs_base__get_locks(svn_fs_t *fs,
args.path = svn_fs__canonicalize_abspath(path, pool);
args.depth = depth;
- SVN_ERR(svn_io_open_uniquely_named(&(args.spool_file), NULL, NULL, NULL,
- NULL, svn_io_file_del_on_close,
- pool, pool));
+ /* Enough for 100+ locks if the comments are small. */
+ args.stream = svn_stream__from_spillbuf(4 * 1024 /* blocksize */,
+ 64 * 1024 /* maxsize */,
+ pool);
SVN_ERR(svn_fs_base__retry_txn(fs, txn_body_get_locks, &args, FALSE, pool));
- /* Rewind the spool file, then re-read it, calling GET_LOCKS_FUNC(). */
- SVN_ERR(svn_io_file_seek(args.spool_file, APR_SET, &offset, pool));
- stream = svn_stream_from_aprfile2(args.spool_file, FALSE, pool);
+ /* Read the stream calling GET_LOCKS_FUNC(). */
+ stream = args.stream;
while (1)
{
apr_size_t len, skel_len;
- char c, *end, *skel_buf;
+ char c, *skel_buf;
svn_skel_t *lock_skel;
svn_lock_t *lock;
+ apr_uint64_t ui64;
+ svn_error_t *err;
svn_pool_clear(iterpool);
@@ -484,9 +488,10 @@ svn_fs_base__get_locks(svn_fs_t *fs,
SVN_ERR(svn_stream_readline(stream, &buf, "\n", &eof, iterpool));
if (eof)
break;
- skel_len = (size_t) strtoul(buf->data, &end, 10);
- if (skel_len == (size_t) ULONG_MAX || *end != '\0')
- return svn_error_create(SVN_ERR_MALFORMED_FILE, NULL, NULL);
+ err = svn_cstring_strtoui64(&ui64, buf->data, 0, APR_SIZE_MAX, 10);
+ if (err)
+ return svn_error_create(SVN_ERR_MALFORMED_FILE, err, NULL);
+ skel_len = (apr_size_t)ui64;
/* Now read that much into a buffer. */
skel_buf = apr_palloc(pool, skel_len + 1);
@@ -541,8 +546,7 @@ verify_lock(svn_fs_t *fs,
_("User '%s' does not own lock on path '%s' (currently locked by '%s')"),
fs->access_ctx->username, lock->path, lock->owner);
- else if (apr_hash_get(fs->access_ctx->lock_tokens, lock->token,
- APR_HASH_KEY_STRING) == NULL)
+ else if (svn_hash_gets(fs->access_ctx->lock_tokens, lock->token) == NULL)
return svn_error_createf
(SVN_ERR_FS_BAD_LOCK_TOKEN, NULL,
_("Cannot verify lock on path '%s'; no matching lock-token available"),
diff --git a/subversion/libsvn_fs_base/notes/structure b/subversion/libsvn_fs_base/notes/structure
index 89fdc43..8e2159f 100644
--- a/subversion/libsvn_fs_base/notes/structure
+++ b/subversion/libsvn_fs_base/notes/structure
@@ -104,8 +104,8 @@ structure summary" section of this document.
NODE-REVISION: how we represent a node revision
We represent a given revision of a file or directory node using a list
-skel (see skel.h for an explanation of skels). A node revision skel
-has the form:
+skel (see include/private/svn_skel.h for an explanation of skels).
+A node revision skel has the form:
(HEADER PROP-KEY KIND-SPECIFIC ...)
diff --git a/subversion/libsvn_fs_base/reps-strings.c b/subversion/libsvn_fs_base/reps-strings.c
index dd395a4..553075d 100644
--- a/subversion/libsvn_fs_base/reps-strings.c
+++ b/subversion/libsvn_fs_base/reps-strings.c
@@ -489,8 +489,7 @@ rep_read_range(svn_fs_t *fs,
/* Make a list of all the rep's we need to undeltify this range.
We'll have to read them within this trail anyway, so we might
as well do it once and up front. */
- apr_array_header_t *reps = /* ### what constant here? */
- apr_array_make(pool, 666, sizeof(rep));
+ apr_array_header_t *reps = apr_array_make(pool, 30, sizeof(rep));
do
{
const rep_delta_chunk_t *const first_chunk
@@ -1465,14 +1464,16 @@ svn_fs_base__rep_deltify(svn_fs_t *fs,
TRUE, trail, pool));
/* Setup a stream to convert the textdelta data into svndiff windows. */
- svn_txdelta(&txdelta_stream, source_stream, target_stream, pool);
+ svn_txdelta2(&txdelta_stream, source_stream, target_stream, TRUE, pool);
if (bfd->format >= SVN_FS_BASE__MIN_SVNDIFF1_FORMAT)
- svn_txdelta_to_svndiff2(&new_target_handler, &new_target_handler_baton,
- new_target_stream, 1, pool);
+ svn_txdelta_to_svndiff3(&new_target_handler, &new_target_handler_baton,
+ new_target_stream, 1,
+ SVN_DELTA_COMPRESSION_LEVEL_DEFAULT, pool);
else
- svn_txdelta_to_svndiff2(&new_target_handler, &new_target_handler_baton,
- new_target_stream, 0, pool);
+ svn_txdelta_to_svndiff3(&new_target_handler, &new_target_handler_baton,
+ new_target_stream, 0,
+ SVN_DELTA_COMPRESSION_LEVEL_DEFAULT, pool);
/* subpool for the windows */
wpool = svn_pool_create(pool);
diff --git a/subversion/libsvn_fs_base/revs-txns.c b/subversion/libsvn_fs_base/revs-txns.c
index c4be0e5..d218843 100644
--- a/subversion/libsvn_fs_base/revs-txns.c
+++ b/subversion/libsvn_fs_base/revs-txns.c
@@ -230,7 +230,7 @@ svn_fs_base__revision_prop(svn_string_t **value_p,
FALSE, pool));
/* And then the prop from that list (if there was a list). */
- *value_p = apr_hash_get(table, propname, APR_HASH_KEY_STRING);
+ *value_p = svn_hash_gets(table, propname);
return SVN_NO_ERROR;
}
@@ -262,8 +262,7 @@ svn_fs_base__set_rev_prop(svn_fs_t *fs,
if (old_value_p)
{
const svn_string_t *wanted_value = *old_value_p;
- const svn_string_t *present_value = apr_hash_get(txn->proplist, name,
- APR_HASH_KEY_STRING);
+ const svn_string_t *present_value = svn_hash_gets(txn->proplist, name);
if ((!wanted_value != !present_value)
|| (wanted_value && present_value
&& !svn_string_compare(wanted_value, present_value)))
@@ -276,7 +275,7 @@ svn_fs_base__set_rev_prop(svn_fs_t *fs,
}
/* Fall through. */
}
- apr_hash_set(txn->proplist, name, APR_HASH_KEY_STRING, value);
+ svn_hash_sets(txn->proplist, name, value);
/* Overwrite the revision. */
return put_txn(fs, txn, txn_id, trail, pool);
@@ -537,7 +536,7 @@ svn_fs_base__txn_prop(svn_string_t **value_p,
FALSE, pool));
/* And then the prop from that list (if there was a list). */
- *value_p = apr_hash_get(table, propname, APR_HASH_KEY_STRING);
+ *value_p = svn_hash_gets(table, propname);
return SVN_NO_ERROR;
}
@@ -575,7 +574,7 @@ svn_fs_base__set_txn_prop(svn_fs_t *fs,
txn->proplist = apr_hash_make(pool);
/* Set the property. */
- apr_hash_set(txn->proplist, name, APR_HASH_KEY_STRING, value);
+ svn_hash_sets(txn->proplist, name, value);
/* Now overwrite the transaction. */
return put_txn(fs, txn, txn_name, trail, pool);
diff --git a/subversion/libsvn_fs_base/trail.c b/subversion/libsvn_fs_base/trail.c
index 4a0d8c9..8fdf9be 100644
--- a/subversion/libsvn_fs_base/trail.c
+++ b/subversion/libsvn_fs_base/trail.c
@@ -96,7 +96,7 @@ begin_trail(trail_t **trail_p,
a coding problem (and will likely hang the repository anyway). */
SVN_ERR_ASSERT(! bfd->in_txn_trail);
- SVN_ERR(BDB_WRAP(fs, "beginning Berkeley DB transaction",
+ SVN_ERR(BDB_WRAP(fs, N_("beginning Berkeley DB transaction"),
bfd->bdb->env->txn_begin(bfd->bdb->env, 0,
&trail->db_txn, 0)));
bfd->in_txn_trail = TRUE;
@@ -131,7 +131,7 @@ abort_trail(trail_t *trail)
see the returned error than to abort. An obvious example is
when DB_TXN->abort() returns DB_RUNRECOVERY. */
bfd->in_txn_trail = FALSE;
- SVN_ERR(BDB_WRAP(fs, "aborting Berkeley DB transaction",
+ SVN_ERR(BDB_WRAP(fs, N_("aborting Berkeley DB transaction"),
trail->db_txn->abort(trail->db_txn)));
}
svn_pool_destroy(trail->pool);
@@ -155,7 +155,7 @@ commit_trail(trail_t *trail)
/* See comment [**] in abort_trail() above.
An error during txn commit will abort the transaction anyway. */
bfd->in_txn_trail = FALSE;
- SVN_ERR(BDB_WRAP(fs, "committing Berkeley DB transaction",
+ SVN_ERR(BDB_WRAP(fs, N_("committing Berkeley DB transaction"),
trail->db_txn->commit(trail->db_txn, 0)));
}
diff --git a/subversion/libsvn_fs_base/tree.c b/subversion/libsvn_fs_base/tree.c
index 25fa69c..046ab5d 100644
--- a/subversion/libsvn_fs_base/tree.c
+++ b/subversion/libsvn_fs_base/tree.c
@@ -39,6 +39,7 @@
#include <string.h>
#include <assert.h>
#include "svn_private_config.h"
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_error.h"
#include "svn_path.h"
@@ -160,7 +161,7 @@ dag_node_cache_get(svn_fs_root_t *root,
return NULL;
/* Look in the cache for our desired item. */
- cache_item = apr_hash_get(brd->node_cache, path, APR_HASH_KEY_STRING);
+ cache_item = svn_hash_gets(brd->node_cache, path);
if (cache_item)
return svn_fs_base__dag_dup(cache_item->node, pool);
@@ -208,7 +209,7 @@ dag_node_cache_set(svn_fs_root_t *root,
root, and that only happens once under that root. So, we'll be a
little bit sloppy here, and count on callers doing the right
thing. */
- cache_item = apr_hash_get(brd->node_cache, path, APR_HASH_KEY_STRING);
+ cache_item = svn_hash_gets(brd->node_cache, path);
if (cache_item)
{
/* ### This section is somehow broken. I don't know how, but it
@@ -250,9 +251,8 @@ dag_node_cache_set(svn_fs_root_t *root,
{
/* No room. Expire the oldest thing. */
cache_path = brd->node_cache_keys[brd->node_cache_idx];
- cache_item = apr_hash_get(brd->node_cache, cache_path,
- APR_HASH_KEY_STRING);
- apr_hash_set(brd->node_cache, cache_path, APR_HASH_KEY_STRING, NULL);
+ cache_item = svn_hash_gets(brd->node_cache, cache_path);
+ svn_hash_sets(brd->node_cache, cache_path, NULL);
cache_pool = cache_item->pool;
svn_pool_clear(cache_pool);
}
@@ -269,7 +269,7 @@ dag_node_cache_set(svn_fs_root_t *root,
/* Now add it to the cache. */
cache_path = apr_pstrdup(cache_pool, path);
- apr_hash_set(brd->node_cache, cache_path, APR_HASH_KEY_STRING, cache_item);
+ svn_hash_sets(brd->node_cache, cache_path, cache_item);
brd->node_cache_keys[brd->node_cache_idx] = cache_path;
/* Advance the cache pointer. */
@@ -309,11 +309,10 @@ txn_body_txn_root(void *baton,
/* Look for special txn props that represent the 'flags' behavior of
the transaction. */
SVN_ERR(svn_fs_base__txn_proplist_in_trail(&txnprops, svn_txn_id, trail));
- if (apr_hash_get(txnprops, SVN_FS__PROP_TXN_CHECK_OOD, APR_HASH_KEY_STRING))
+ if (svn_hash_gets(txnprops, SVN_FS__PROP_TXN_CHECK_OOD))
flags |= SVN_FS_TXN_CHECK_OOD;
- if (apr_hash_get(txnprops, SVN_FS__PROP_TXN_CHECK_LOCKS,
- APR_HASH_KEY_STRING))
+ if (svn_hash_gets(txnprops, SVN_FS__PROP_TXN_CHECK_LOCKS))
flags |= SVN_FS_TXN_CHECK_LOCKS;
root = make_txn_root(fs, svn_txn_id, txn->base_rev, flags, trail->pool);
@@ -431,7 +430,7 @@ mutable_root_node(dag_node_t **node_p,
trail, pool);
else
/* If it's not a transaction root, we can't change its contents. */
- return SVN_FS__ERR_NOT_MUTABLE(root->fs, root->rev, error_path, pool);
+ return SVN_FS__ERR_NOT_MUTABLE(root->fs, root->rev, error_path);
}
@@ -769,7 +768,7 @@ open_path(parent_path_t **parent_path_p,
/* The path isn't finished yet; we'd better be in a directory. */
if (svn_fs_base__dag_node_kind(child) != svn_node_dir)
- SVN_ERR_W(SVN_FS__ERR_NOT_DIRECTORY(fs, path_so_far, pool),
+ SVN_ERR_W(SVN_FS__ERR_NOT_DIRECTORY(fs, path_so_far),
apr_psprintf(pool, _("Failure opening '%s'"), path));
rest = next;
@@ -1191,8 +1190,7 @@ txn_body_node_prop(void *baton,
trail, trail->pool));
*(args->value_p) = NULL;
if (proplist)
- *(args->value_p) = apr_hash_get(proplist, args->propname,
- APR_HASH_KEY_STRING);
+ *(args->value_p) = svn_hash_gets(proplist, args->propname);
return SVN_NO_ERROR;
}
@@ -1304,7 +1302,7 @@ txn_body_change_node_prop(void *baton,
proplist = apr_hash_make(trail->pool);
/* Set the property. */
- apr_hash_set(proplist, args->name, APR_HASH_KEY_STRING, args->value);
+ svn_hash_sets(proplist, args->name, args->value);
/* Overwrite the node's proplist. */
SVN_ERR(svn_fs_base__dag_set_proplist(parent_path->node, proplist,
@@ -2523,11 +2521,11 @@ verify_locks(const char *txn_name,
/* If this path has already been verified as part of a recursive
check of one of its parents, no need to do it again. */
if (last_recursed
- && svn_fspath__is_child(last_recursed->data, path, subpool))
+ && svn_fspath__skip_ancestor(last_recursed->data, path))
continue;
/* Fetch the change associated with our path. */
- change = apr_hash_get(changes, path, APR_HASH_KEY_STRING);
+ change = svn_hash_gets(changes, path);
/* What does it mean to succeed at lock verification for a given
path? For an existing file or directory getting modified
@@ -2722,7 +2720,7 @@ svn_fs_base__commit_txn(const char **conflict_p,
merge_args.ancestor_node = NULL;
merge_args.source_node = youngish_root_node;
merge_args.txn = txn;
- merge_args.conflict = svn_stringbuf_create("", pool); /* use pool */
+ merge_args.conflict = svn_stringbuf_create_empty(pool); /* use pool */
err = svn_fs_base__retry_txn(fs, txn_body_merge, &merge_args,
FALSE, subpool);
if (err)
@@ -2832,7 +2830,7 @@ base_merge(const char **conflict_p,
merge_args.source_node = source;
merge_args.ancestor_node = ancestor;
merge_args.txn = txn;
- merge_args.conflict = svn_stringbuf_create("", pool);
+ merge_args.conflict = svn_stringbuf_create_empty(pool);
err = svn_fs_base__retry_txn(fs, txn_body_merge, &merge_args, FALSE, pool);
if (err)
{
@@ -2926,7 +2924,7 @@ txn_body_make_dir(void *baton,
/* If there's already a sub-directory by that name, complain. This
also catches the case of trying to make a subdirectory named `/'. */
if (parent_path->node)
- return SVN_FS__ALREADY_EXISTS(root, path, trail->pool);
+ return SVN_FS__ALREADY_EXISTS(root, path);
/* Check to see if some lock is 'reserving' a file-path or dir-path
at that location, or even some child-path; if so, check that we
@@ -3192,17 +3190,7 @@ fs_same_p(svn_boolean_t *same_p,
svn_fs_t *fs2,
apr_pool_t *pool)
{
- const char *uuid1;
- const char *uuid2;
-
- /* Random thought: if fetching UUIDs to compare filesystems is too
- expensive, one solution would be to cache the UUID in each fs
- object (copying the UUID into fs->pool, of course). */
-
- SVN_ERR(fs1->vtable->get_uuid(fs1, &uuid1, pool));
- SVN_ERR(fs2->vtable->get_uuid(fs2, &uuid2, pool));
-
- *same_p = ! strcmp(uuid1, uuid2);
+ *same_p = ! strcmp(fs1->uuid, fs2->uuid);
return SVN_NO_ERROR;
}
@@ -3379,7 +3367,7 @@ txn_body_make_file(void *baton,
/* If there's already a file by that name, complain.
This also catches the case of trying to make a file named `/'. */
if (parent_path->node)
- return SVN_FS__ALREADY_EXISTS(root, path, trail->pool);
+ return SVN_FS__ALREADY_EXISTS(root, path);
/* Check to see if some lock is 'reserving' a file-path or dir-path
at that location, or even some child-path; if so, check that we
@@ -3686,7 +3674,7 @@ window_consumer(svn_txdelta_window_t *window, void *baton)
SVN_ERR(svn_stream_write(tb->target_stream,
tb->target_string->data,
&len));
- svn_stringbuf_set(tb->target_string, "");
+ svn_stringbuf_setempty(tb->target_string);
}
/* Is the window NULL? If so, we're done. */
@@ -3742,8 +3730,7 @@ txn_body_apply_textdelta(void *baton, trail_t *trail)
we're calculating both SHA1 and MD5 checksums somewhere in
reps-strings.c. Could we keep them both around somehow so this
check could be more comprehensive? */
- if (tb->base_checksum->kind == checksum->kind
- && !svn_checksum_match(tb->base_checksum, checksum))
+ if (!svn_checksum_match(tb->base_checksum, checksum))
return svn_checksum_mismatch_err(tb->base_checksum, checksum,
trail->pool,
_("Base checksum mismatch on '%s'"),
@@ -3762,7 +3749,7 @@ txn_body_apply_textdelta(void *baton, trail_t *trail)
/* Make a writable "string" stream which writes data to
tb->target_string. */
- tb->target_string = svn_stringbuf_create("", tb->pool);
+ tb->target_string = svn_stringbuf_create_empty(tb->pool);
tb->string_stream = svn_stream_create(tb, tb->pool);
svn_stream_set_write(tb->string_stream, write_to_string);
@@ -3793,16 +3780,8 @@ base_apply_textdelta(svn_txdelta_window_handler_t *contents_p,
tb->root = root;
tb->path = path;
tb->pool = pool;
-
- if (base_checksum)
- tb->base_checksum = svn_checksum_dup(base_checksum, pool);
- else
- tb->base_checksum = NULL;
-
- if (result_checksum)
- tb->result_checksum = svn_checksum_dup(result_checksum, pool);
- else
- tb->result_checksum = NULL;
+ tb->base_checksum = svn_checksum_dup(base_checksum, pool);
+ tb->result_checksum = svn_checksum_dup(result_checksum, pool);
SVN_ERR(svn_fs_base__retry_txn(root->fs, txn_body_apply_textdelta, tb,
FALSE, pool));
@@ -3943,11 +3922,7 @@ base_apply_text(svn_stream_t **contents_p,
tb->root = root;
tb->path = path;
tb->pool = pool;
-
- if (result_checksum)
- tb->result_checksum = svn_checksum_dup(result_checksum, pool);
- else
- tb->result_checksum = NULL;
+ tb->result_checksum = svn_checksum_dup(result_checksum, pool);
SVN_ERR(svn_fs_base__retry_txn(root->fs, txn_body_apply_text, tb,
FALSE, pool));
@@ -4046,7 +4021,7 @@ base_get_file_delta_stream(svn_txdelta_stream_t **stream_p,
SVN_ERR(base_file_contents(&target, target_root, target_path, pool));
/* Create a delta stream that turns the ancestor into the target. */
- svn_txdelta(&delta_stream, source, target, pool);
+ svn_txdelta2(&delta_stream, source, target, TRUE, pool);
*stream_p = delta_stream;
return SVN_NO_ERROR;
@@ -4349,10 +4324,7 @@ txn_body_history_prev(void *baton, trail_t *trail)
the copy source. Finally, if our current path doesn't meet
one of these other criteria ... ### for now just fallback to
the old copy hunt algorithm. */
- if (strcmp(path, copy_dst) == 0)
- remainder = "";
- else
- remainder = svn_fspath__is_child(copy_dst, path, trail->pool);
+ remainder = svn_fspath__skip_ancestor(copy_dst, path);
if (remainder)
{
@@ -4745,7 +4717,7 @@ prev_location(const char **prev_path,
const char *path,
apr_pool_t *pool)
{
- const char *copy_path, *copy_src_path, *remainder = "";
+ const char *copy_path, *copy_src_path, *remainder;
svn_fs_root_t *copy_root;
svn_revnum_t copy_src_rev;
@@ -4774,8 +4746,7 @@ prev_location(const char **prev_path,
*/
SVN_ERR(base_copied_from(&copy_src_rev, &copy_src_path,
copy_root, copy_path, pool));
- if (! strcmp(copy_path, path) == 0)
- remainder = svn_fspath__is_child(copy_path, path, pool);
+ remainder = svn_fspath__skip_ancestor(copy_path, path);
*prev_path = svn_fspath__join(copy_src_path, remainder, pool);
*prev_rev = copy_src_rev;
return SVN_NO_ERROR;
@@ -4840,6 +4811,13 @@ base_node_origin_rev(svn_revnum_t *revision,
prev_location() does below will work. */
path = svn_fs__canonicalize_abspath(path, pool);
+ /* Special-case the root node (for performance reasons) */
+ if (strcmp(path, "/") == 0)
+ {
+ *revision = 0;
+ return SVN_NO_ERROR;
+ }
+
/* If we have support for the node-origins table, we'll try to use
it. */
if (bfd->format >= SVN_FS_BASE__MIN_NODE_ORIGINS_FORMAT)
@@ -5026,7 +5004,7 @@ txn_body_get_mergeinfo_data_and_entries(void *baton, trail_t *trail)
SVN_ERR(svn_fs_base__dag_get_proplist(&plist, child_node,
trail, iterpool));
- pval = apr_hash_get(plist, SVN_PROP_MERGEINFO, APR_HASH_KEY_STRING);
+ pval = svn_hash_gets(plist, SVN_PROP_MERGEINFO);
if (! pval)
{
svn_string_t *id_str = svn_fs_base__id_unparse(child_id,
@@ -5050,11 +5028,10 @@ txn_body_get_mergeinfo_data_and_entries(void *baton, trail_t *trail)
}
else
{
- apr_hash_set(args->result_catalog,
- svn_fspath__join(args->node_path, dirent->name,
- result_pool),
- APR_HASH_KEY_STRING,
- child_mergeinfo);
+ svn_hash_sets(args->result_catalog,
+ svn_fspath__join(args->node_path, dirent->name,
+ result_pool),
+ child_mergeinfo);
}
}
@@ -5074,10 +5051,9 @@ txn_body_get_mergeinfo_data_and_entries(void *baton, trail_t *trail)
"but is not a directory"),
id_str->data);
}
- apr_hash_set(args->children_atop_mergeinfo_trees,
- apr_pstrdup(children_pool, dirent->name),
- APR_HASH_KEY_STRING,
- svn_fs_base__dag_dup(child_node, children_pool));
+ svn_hash_sets(args->children_atop_mergeinfo_trees,
+ apr_pstrdup(children_pool, dirent->name),
+ svn_fs_base__dag_dup(child_node, children_pool));
}
}
@@ -5142,6 +5118,7 @@ struct get_mergeinfo_for_path_baton
svn_fs_root_t *root;
const char *path;
svn_mergeinfo_inheritance_t inherit;
+ svn_boolean_t adjust_inherited_mergeinfo;
apr_pool_t *pool;
};
@@ -5202,8 +5179,7 @@ txn_body_get_mergeinfo_for_path(void *baton, trail_t *trail)
svn_pool_destroy(iterpool);
SVN_ERR(svn_fs_base__dag_get_proplist(&proplist, node, trail, trail->pool));
- mergeinfo_string = apr_hash_get(proplist, SVN_PROP_MERGEINFO,
- APR_HASH_KEY_STRING);
+ mergeinfo_string = svn_hash_gets(proplist, SVN_PROP_MERGEINFO);
if (! mergeinfo_string)
{
svn_string_t *id_str =
@@ -5237,7 +5213,7 @@ txn_body_get_mergeinfo_for_path(void *baton, trail_t *trail)
can return the mergeinfo results directly. Otherwise, we're
inheriting the mergeinfo, so we need to a) remove non-inheritable
ranges and b) telescope the merged-from paths. */
- if (nearest_ancestor != parent_path)
+ if (args->adjust_inherited_mergeinfo && (nearest_ancestor != parent_path))
{
svn_mergeinfo_t tmp_mergeinfo;
@@ -5291,10 +5267,12 @@ get_mergeinfos_for_paths(svn_fs_root_t *root,
const apr_array_header_t *paths,
svn_mergeinfo_inheritance_t inherit,
svn_boolean_t include_descendants,
- apr_pool_t *pool)
+ svn_boolean_t adjust_inherited_mergeinfo,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- svn_mergeinfo_catalog_t result_catalog = apr_hash_make(pool);
- apr_pool_t *iterpool = svn_pool_create(pool);
+ svn_mergeinfo_catalog_t result_catalog = apr_hash_make(result_pool);
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
int i;
for (i = 0; i < paths->nelts; i++)
@@ -5312,14 +5290,14 @@ get_mergeinfos_for_paths(svn_fs_root_t *root,
gmfp_args.root = root;
gmfp_args.path = path;
gmfp_args.inherit = inherit;
- gmfp_args.pool = pool;
+ gmfp_args.pool = result_pool;
+ gmfp_args.adjust_inherited_mergeinfo = adjust_inherited_mergeinfo;
SVN_ERR(svn_fs_base__retry_txn(root->fs,
txn_body_get_mergeinfo_for_path,
&gmfp_args, FALSE, iterpool));
if (path_mergeinfo)
- apr_hash_set(result_catalog, apr_pstrdup(pool, path),
- APR_HASH_KEY_STRING,
- path_mergeinfo);
+ svn_hash_sets(result_catalog, apr_pstrdup(result_pool, path),
+ path_mergeinfo);
/* If we're including descendants, do so. */
if (include_descendants)
@@ -5363,7 +5341,9 @@ base_get_mergeinfo(svn_mergeinfo_catalog_t *catalog,
const apr_array_header_t *paths,
svn_mergeinfo_inheritance_t inherit,
svn_boolean_t include_descendants,
- apr_pool_t *pool)
+ svn_boolean_t adjust_inherited_mergeinfo,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
/* Verify that our filesystem version supports mergeinfo stuff. */
SVN_ERR(svn_fs_base__test_required_feature_format
@@ -5376,7 +5356,8 @@ base_get_mergeinfo(svn_mergeinfo_catalog_t *catalog,
/* Retrieve a path -> mergeinfo mapping. */
return get_mergeinfos_for_paths(root, catalog, paths,
inherit, include_descendants,
- pool);
+ adjust_inherited_mergeinfo,
+ result_pool, scratch_pool);
}
@@ -5406,6 +5387,7 @@ static root_vtable_t root_vtable = {
base_file_length,
base_file_checksum,
base_file_contents,
+ NULL,
base_make_file,
base_apply_textdelta,
base_apply_text,
diff --git a/subversion/libsvn_fs_base/util/fs_skels.c b/subversion/libsvn_fs_base/util/fs_skels.c
index 9ea2167..f3466b9 100644
--- a/subversion/libsvn_fs_base/util/fs_skels.c
+++ b/subversion/libsvn_fs_base/util/fs_skels.c
@@ -32,6 +32,7 @@
#include "private/svn_skel.h"
#include "private/svn_dep_compat.h"
+#include "private/svn_subr_private.h"
#include "svn_checksum.h"
#include "fs_skels.h"
@@ -511,18 +512,18 @@ svn_fs_base__parse_representation_skel(representation_t **rep_p,
{
svn_skel_t *checksum_skel = header_skel->children->next->next;
rep->md5_checksum =
- svn_checksum__from_digest((const unsigned char *)
- (checksum_skel->children->next->data),
- svn_checksum_md5, pool);
+ svn_checksum__from_digest_md5((const unsigned char *)
+ (checksum_skel->children->next->data),
+ pool);
/* SHA1 */
if (header_skel->children->next->next->next)
{
checksum_skel = header_skel->children->next->next->next;
rep->sha1_checksum =
- svn_checksum__from_digest((const unsigned char *)
- (checksum_skel->children->next->data),
- svn_checksum_sha1, pool);
+ svn_checksum__from_digest_sha1(
+ (const unsigned char *)(checksum_skel->children->next->data),
+ pool);
}
}
diff --git a/subversion/libsvn_fs_base/uuid.c b/subversion/libsvn_fs_base/uuid.c
index e002522..c865df3 100644
--- a/subversion/libsvn_fs_base/uuid.c
+++ b/subversion/libsvn_fs_base/uuid.c
@@ -48,39 +48,27 @@ txn_body_get_uuid(void *baton, trail_t *trail)
svn_error_t *
-svn_fs_base__get_uuid(svn_fs_t *fs,
- const char **uuid,
- apr_pool_t *pool)
+svn_fs_base__populate_uuid(svn_fs_t *fs,
+ apr_pool_t *scratch_pool)
{
- base_fs_data_t *bfd = fs->fsap_data;
SVN_ERR(svn_fs__check_fs(fs, TRUE));
- /* Check for a cached UUID first. Failing that, we hit the
- database. */
- if (bfd->uuid)
- {
- *uuid = apr_pstrdup(pool, bfd->uuid);
- }
- else
+ /* We hit the database. */
{
+ const char *uuid;
struct get_uuid_args args;
- apr_pool_t *scratch_pool = svn_pool_create(pool);
args.idx = 1;
- args.uuid = uuid;
+ args.uuid = &uuid;
SVN_ERR(svn_fs_base__retry_txn(fs, txn_body_get_uuid, &args,
FALSE, scratch_pool));
- if (*uuid)
+ if (uuid)
{
- *uuid = apr_pstrdup(pool, *uuid);
-
/* Toss what we find into the cache. */
- bfd->uuid = apr_pstrdup(fs->pool, *uuid);
+ fs->uuid = apr_pstrdup(fs->pool, uuid);
}
-
- svn_pool_destroy(scratch_pool);
}
return SVN_NO_ERROR;
@@ -109,7 +97,6 @@ svn_fs_base__set_uuid(svn_fs_t *fs,
apr_pool_t *pool)
{
struct set_uuid_args args;
- base_fs_data_t *bfd = fs->fsap_data;
SVN_ERR(svn_fs__check_fs(fs, TRUE));
@@ -122,7 +109,7 @@ svn_fs_base__set_uuid(svn_fs_t *fs,
/* Toss our value into the cache. */
if (uuid)
- bfd->uuid = apr_pstrdup(fs->pool, uuid);
+ fs->uuid = apr_pstrdup(fs->pool, uuid);
return SVN_NO_ERROR;
}
diff --git a/subversion/libsvn_fs_base/uuid.h b/subversion/libsvn_fs_base/uuid.h
index f30b548..453a390 100644
--- a/subversion/libsvn_fs_base/uuid.h
+++ b/subversion/libsvn_fs_base/uuid.h
@@ -29,12 +29,15 @@ extern "C" {
+/* Set FS->UUID to the value read from the database, allocated
+ in FS->POOL. Use SCRATCH_POOL for temporary allocations. */
+svn_error_t *svn_fs_base__populate_uuid(svn_fs_t *fs,
+ apr_pool_t *scratch_pool);
+
+
/* These functions implement some of the calls in the FS loader
library's fs vtable. */
-svn_error_t *svn_fs_base__get_uuid(svn_fs_t *fs, const char **uuid,
- apr_pool_t *pool);
-
svn_error_t *svn_fs_base__set_uuid(svn_fs_t *fs, const char *uuid,
apr_pool_t *pool);
diff --git a/subversion/libsvn_fs_fs/caching.c b/subversion/libsvn_fs_fs/caching.c
index 4f2a34c..42898cb 100644
--- a/subversion/libsvn_fs_fs/caching.c
+++ b/subversion/libsvn_fs_fs/caching.c
@@ -24,6 +24,7 @@
#include "fs_fs.h"
#include "id.h"
#include "dag.h"
+#include "tree.h"
#include "temp_serializer.h"
#include "../libsvn_fs/fs-loader.h"
@@ -32,25 +33,79 @@
#include "svn_private_config.h"
#include "svn_hash.h"
+#include "svn_pools.h"
+
#include "private/svn_debug.h"
+#include "private/svn_subr_private.h"
+
+/* Take the ORIGINAL string and replace all occurrences of ":" without
+ * limiting the key space. Allocate the result in POOL.
+ */
+static const char *
+normalize_key_part(const char *original,
+ apr_pool_t *pool)
+{
+ apr_size_t i;
+ apr_size_t len = strlen(original);
+ svn_stringbuf_t *normalized = svn_stringbuf_create_ensure(len, pool);
+
+ for (i = 0; i < len; ++i)
+ {
+ char c = original[i];
+ switch (c)
+ {
+ case ':': svn_stringbuf_appendbytes(normalized, "%_", 2);
+ break;
+ case '%': svn_stringbuf_appendbytes(normalized, "%%", 2);
+ break;
+ default : svn_stringbuf_appendbyte(normalized, c);
+ }
+ }
+
+ return normalized->data;
+}
/* Return a memcache in *MEMCACHE_P for FS if it's configured to use
memcached, or NULL otherwise. Also, sets *FAIL_STOP to a boolean
indicating whether cache errors should be returned to the caller or
- just passed to the FS warning handler. Use FS->pool for allocating
- the memcache, and POOL for temporary allocations. */
+ just passed to the FS warning handler.
+
+ *CACHE_TXDELTAS, *CACHE_FULLTEXTS and *CACHE_REVPROPS flags will be set
+ according to FS->CONFIG. *CACHE_NAMESPACE receives the cache prefix
+ to use.
+
+ Use FS->pool for allocating the memcache and CACHE_NAMESPACE, and POOL
+ for temporary allocations. */
static svn_error_t *
read_config(svn_memcache_t **memcache_p,
svn_boolean_t *fail_stop,
+ const char **cache_namespace,
svn_boolean_t *cache_txdeltas,
svn_boolean_t *cache_fulltexts,
+ svn_boolean_t *cache_revprops,
svn_fs_t *fs,
apr_pool_t *pool)
{
fs_fs_data_t *ffd = fs->fsap_data;
SVN_ERR(svn_cache__make_memcache_from_config(memcache_p, ffd->config,
- fs->pool));
+ fs->pool));
+
+ /* No cache namespace by default. I.e. all FS instances share the
+ * cached data. If you specify different namespaces, the data will
+ * share / compete for the same cache memory but keys will not match
+ * across namespaces and, thus, cached data will not be shared between
+ * namespaces.
+ *
+ * Since the namespace will be concatenated with other elements to form
+ * the complete key prefix, we must make sure that the resulting string
+ * is unique and cannot be created by any other combination of elements.
+ */
+ *cache_namespace
+ = normalize_key_part(svn_hash__get_cstring(fs->config,
+ SVN_FS_CONFIG_FSFS_CACHE_NS,
+ ""),
+ pool);
/* don't cache text deltas by default.
* Once we reconstructed the fulltexts from the deltas,
@@ -74,24 +129,44 @@ read_config(svn_memcache_t **memcache_p,
SVN_FS_CONFIG_FSFS_CACHE_FULLTEXTS,
TRUE);
+ /* For now, always disable revprop caching.
+ */
+ *cache_revprops = FALSE;
+
return svn_config_get_bool(ffd->config, fail_stop,
CONFIG_SECTION_CACHES, CONFIG_OPTION_FAIL_STOP,
FALSE);
}
-/* Implements svn_cache__error_handler_t */
+/* Implements svn_cache__error_handler_t
+ * This variant clears the error after logging it.
+ */
static svn_error_t *
-warn_on_cache_errors(svn_error_t *err,
- void *baton,
- apr_pool_t *pool)
+warn_and_continue_on_cache_errors(svn_error_t *err,
+ void *baton,
+ apr_pool_t *pool)
{
svn_fs_t *fs = baton;
(fs->warning)(fs->warning_baton, err);
svn_error_clear(err);
+
return SVN_NO_ERROR;
}
+/* Implements svn_cache__error_handler_t
+ * This variant logs the error and passes it on to the callers.
+ */
+static svn_error_t *
+warn_and_fail_on_cache_errors(svn_error_t *err,
+ void *baton,
+ apr_pool_t *pool)
+{
+ svn_fs_t *fs = baton;
+ (fs->warning)(fs->warning_baton, err);
+ return err;
+}
+
#ifdef SVN_DEBUG_CACHE_DUMP_STATS
/* Baton to be used for the dump_cache_statistics() pool cleanup function, */
struct dump_cache_baton_t
@@ -150,13 +225,12 @@ dump_cache_statistics(void *baton_void)
* not transaction-specific CACHE object in FS, if CACHE is not NULL.
*
* All these svn_cache__t instances shall be handled uniformly. Unless
- * NO_HANDLER is true, register an error handler that reports errors
- * as warnings for the given CACHE.
+ * ERROR_HANDLER is NULL, register it for the given CACHE in FS.
*/
static svn_error_t *
init_callbacks(svn_cache__t *cache,
svn_fs_t *fs,
- svn_boolean_t no_handler,
+ svn_cache__error_handler_t error_handler,
apr_pool_t *pool)
{
if (cache != NULL)
@@ -178,9 +252,9 @@ init_callbacks(svn_cache__t *cache,
apr_pool_cleanup_null);
#endif
- if (! no_handler)
+ if (error_handler)
SVN_ERR(svn_cache__set_error_handler(cache,
- warn_on_cache_errors,
+ error_handler,
fs,
pool));
@@ -195,6 +269,9 @@ init_callbacks(svn_cache__t *cache,
* MEMBUFFER are NULL and pages is non-zero. Sets *CACHE_P to NULL
* otherwise.
*
+ * Unless NO_HANDLER is true, register an error handler that reports errors
+ * as warnings to the FS warning callback.
+ *
* Cache is allocated in POOL.
* */
static svn_error_t *
@@ -207,32 +284,43 @@ create_cache(svn_cache__t **cache_p,
svn_cache__deserialize_func_t deserializer,
apr_ssize_t klen,
const char *prefix,
+ svn_fs_t *fs,
+ svn_boolean_t no_handler,
apr_pool_t *pool)
{
- if (memcache)
- {
- SVN_ERR(svn_cache__create_memcache(cache_p, memcache,
- serializer, deserializer, klen,
- prefix, pool));
- }
- else if (membuffer)
- {
- SVN_ERR(svn_cache__create_membuffer_cache(
- cache_p, membuffer, serializer, deserializer,
- klen, prefix, pool));
- }
- else if (pages)
- {
- SVN_ERR(svn_cache__create_inprocess(
- cache_p, serializer, deserializer, klen, pages,
- items_per_page, FALSE, prefix, pool));
- }
- else
+ svn_cache__error_handler_t error_handler = no_handler
+ ? NULL
+ : warn_and_fail_on_cache_errors;
+
+ if (memcache)
+ {
+ SVN_ERR(svn_cache__create_memcache(cache_p, memcache,
+ serializer, deserializer, klen,
+ prefix, pool));
+ error_handler = no_handler
+ ? NULL
+ : warn_and_continue_on_cache_errors;
+ }
+ else if (membuffer)
+ {
+ SVN_ERR(svn_cache__create_membuffer_cache(
+ cache_p, membuffer, serializer, deserializer,
+ klen, prefix, FALSE, pool));
+ }
+ else if (pages)
+ {
+ SVN_ERR(svn_cache__create_inprocess(
+ cache_p, serializer, deserializer, klen, pages,
+ items_per_page, FALSE, prefix, pool));
+ }
+ else
{
*cache_p = NULL;
}
- return SVN_NO_ERROR;
+ SVN_ERR(init_callbacks(*cache_p, fs, error_handler, pool));
+
+ return SVN_NO_ERROR;
}
svn_error_t *
@@ -241,23 +329,30 @@ svn_fs_fs__initialize_caches(svn_fs_t *fs,
{
fs_fs_data_t *ffd = fs->fsap_data;
const char *prefix = apr_pstrcat(pool,
- "fsfs:", ffd->uuid,
- "/", fs->path, ":",
+ "fsfs:", fs->uuid,
+ "/", normalize_key_part(fs->path, pool),
+ ":",
(char *)NULL);
svn_memcache_t *memcache;
svn_membuffer_t *membuffer;
svn_boolean_t no_handler;
svn_boolean_t cache_txdeltas;
svn_boolean_t cache_fulltexts;
+ svn_boolean_t cache_revprops;
+ const char *cache_namespace;
/* Evaluating the cache configuration. */
SVN_ERR(read_config(&memcache,
&no_handler,
+ &cache_namespace,
&cache_txdeltas,
&cache_fulltexts,
+ &cache_revprops,
fs,
pool));
+ prefix = apr_pstrcat(pool, "ns:", cache_namespace, ":", prefix, NULL);
+
membuffer = svn_cache__get_global_membuffer_cache();
/* Make the cache for revision roots. For the vast majority of
@@ -276,10 +371,10 @@ svn_fs_fs__initialize_caches(svn_fs_t *fs,
svn_fs_fs__deserialize_id,
sizeof(svn_revnum_t),
apr_pstrcat(pool, prefix, "RRI", (char *)NULL),
+ fs,
+ no_handler,
fs->pool));
- SVN_ERR(init_callbacks(ffd->rev_root_id_cache, fs, no_handler, pool));
-
/* Rough estimate: revision DAG nodes have size around 320 bytes, so
* let's put 16 on a page. */
SVN_ERR(create_cache(&(ffd->rev_node_cache),
@@ -289,10 +384,13 @@ svn_fs_fs__initialize_caches(svn_fs_t *fs,
svn_fs_fs__dag_serialize,
svn_fs_fs__dag_deserialize,
APR_HASH_KEY_STRING,
- apr_pstrcat(pool, prefix, "DAG", NULL),
+ apr_pstrcat(pool, prefix, "DAG", (char *)NULL),
+ fs,
+ no_handler,
fs->pool));
- SVN_ERR(init_callbacks(ffd->rev_node_cache, fs, no_handler, pool));
+ /* 1st level DAG node cache */
+ ffd->dag_node_cache = svn_fs_fs__create_dag_cache(pool);
/* Very rough estimate: 1K per directory. */
SVN_ERR(create_cache(&(ffd->dir_cache),
@@ -303,10 +401,10 @@ svn_fs_fs__initialize_caches(svn_fs_t *fs,
svn_fs_fs__deserialize_dir_entries,
APR_HASH_KEY_STRING,
apr_pstrcat(pool, prefix, "DIR", (char *)NULL),
+ fs,
+ no_handler,
fs->pool));
- SVN_ERR(init_callbacks(ffd->dir_cache, fs, no_handler, pool));
-
/* Only 16 bytes per entry (a revision number + the corresponding offset).
Since we want ~8k pages, that means 512 entries per page. */
SVN_ERR(create_cache(&(ffd->packed_offset_cache),
@@ -318,28 +416,120 @@ svn_fs_fs__initialize_caches(svn_fs_t *fs,
sizeof(svn_revnum_t),
apr_pstrcat(pool, prefix, "PACK-MANIFEST",
(char *)NULL),
+ fs,
+ no_handler,
fs->pool));
- SVN_ERR(init_callbacks(ffd->packed_offset_cache, fs, no_handler, pool));
+ /* initialize node revision cache, if caching has been enabled */
+ SVN_ERR(create_cache(&(ffd->node_revision_cache),
+ NULL,
+ membuffer,
+ 0, 0, /* Do not use inprocess cache */
+ svn_fs_fs__serialize_node_revision,
+ svn_fs_fs__deserialize_node_revision,
+ sizeof(pair_cache_key_t),
+ apr_pstrcat(pool, prefix, "NODEREVS", (char *)NULL),
+ fs,
+ no_handler,
+ fs->pool));
+
+ /* initialize node change list cache, if caching has been enabled */
+ SVN_ERR(create_cache(&(ffd->changes_cache),
+ NULL,
+ membuffer,
+ 0, 0, /* Do not use inprocess cache */
+ svn_fs_fs__serialize_changes,
+ svn_fs_fs__deserialize_changes,
+ sizeof(svn_revnum_t),
+ apr_pstrcat(pool, prefix, "CHANGES", (char *)NULL),
+ fs,
+ no_handler,
+ fs->pool));
- /* initialize fulltext cache as configured */
- ffd->fulltext_cache = NULL;
+ /* if enabled, cache fulltext and other derived information */
if (cache_fulltexts)
{
SVN_ERR(create_cache(&(ffd->fulltext_cache),
memcache,
membuffer,
0, 0, /* Do not use inprocess cache */
- /* Values are svn_string_t */
+ /* Values are svn_stringbuf_t */
NULL, NULL,
- APR_HASH_KEY_STRING,
+ sizeof(pair_cache_key_t),
apr_pstrcat(pool, prefix, "TEXT", (char *)NULL),
+ fs,
+ no_handler,
+ fs->pool));
+
+ SVN_ERR(create_cache(&(ffd->properties_cache),
+ NULL,
+ membuffer,
+ 0, 0, /* Do not use inprocess cache */
+ svn_fs_fs__serialize_properties,
+ svn_fs_fs__deserialize_properties,
+ sizeof(pair_cache_key_t),
+ apr_pstrcat(pool, prefix, "PROP",
+ (char *)NULL),
+ fs,
+ no_handler,
+ fs->pool));
+
+ SVN_ERR(create_cache(&(ffd->mergeinfo_cache),
+ NULL,
+ membuffer,
+ 0, 0, /* Do not use inprocess cache */
+ svn_fs_fs__serialize_mergeinfo,
+ svn_fs_fs__deserialize_mergeinfo,
+ APR_HASH_KEY_STRING,
+ apr_pstrcat(pool, prefix, "MERGEINFO",
+ (char *)NULL),
+ fs,
+ no_handler,
+ fs->pool));
+
+ SVN_ERR(create_cache(&(ffd->mergeinfo_existence_cache),
+ NULL,
+ membuffer,
+ 0, 0, /* Do not use inprocess cache */
+ /* Values are svn_stringbuf_t */
+ NULL, NULL,
+ APR_HASH_KEY_STRING,
+ apr_pstrcat(pool, prefix, "HAS_MERGEINFO",
+ (char *)NULL),
+ fs,
+ no_handler,
fs->pool));
}
+ else
+ {
+ ffd->fulltext_cache = NULL;
+ ffd->properties_cache = NULL;
+ ffd->mergeinfo_cache = NULL;
+ ffd->mergeinfo_existence_cache = NULL;
+ }
- SVN_ERR(init_callbacks(ffd->fulltext_cache, fs, no_handler, pool));
+ /* initialize revprop cache, if full-text caching has been enabled */
+ if (cache_revprops)
+ {
+ SVN_ERR(create_cache(&(ffd->revprop_cache),
+ NULL,
+ membuffer,
+ 0, 0, /* Do not use inprocess cache */
+ svn_fs_fs__serialize_properties,
+ svn_fs_fs__deserialize_properties,
+ sizeof(pair_cache_key_t),
+ apr_pstrcat(pool, prefix, "REVPROP",
+ (char *)NULL),
+ fs,
+ no_handler,
+ fs->pool));
+ }
+ else
+ {
+ ffd->revprop_cache = NULL;
+ }
- /* initialize txdelta window cache, if that has been enabled */
+ /* if enabled, cache text deltas and their combinations */
if (cache_txdeltas)
{
SVN_ERR(create_cache(&(ffd->txdelta_window_cache),
@@ -351,28 +541,29 @@ svn_fs_fs__initialize_caches(svn_fs_t *fs,
APR_HASH_KEY_STRING,
apr_pstrcat(pool, prefix, "TXDELTA_WINDOW",
(char *)NULL),
+ fs,
+ no_handler,
+ fs->pool));
+
+ SVN_ERR(create_cache(&(ffd->combined_window_cache),
+ NULL,
+ membuffer,
+ 0, 0, /* Do not use inprocess cache */
+ /* Values are svn_stringbuf_t */
+ NULL, NULL,
+ APR_HASH_KEY_STRING,
+ apr_pstrcat(pool, prefix, "COMBINED_WINDOW",
+ (char *)NULL),
+ fs,
+ no_handler,
fs->pool));
}
else
{
ffd->txdelta_window_cache = NULL;
+ ffd->combined_window_cache = NULL;
}
- SVN_ERR(init_callbacks(ffd->txdelta_window_cache, fs, no_handler, pool));
-
- /* initialize node revision cache, if caching has been enabled */
- SVN_ERR(create_cache(&(ffd->node_revision_cache),
- NULL,
- membuffer,
- 0, 0, /* Do not use inprocess cache */
- svn_fs_fs__serialize_node_revision,
- svn_fs_fs__deserialize_node_revision,
- APR_HASH_KEY_STRING,
- apr_pstrcat(pool, prefix, "NODEREVS", (char *)NULL),
- fs->pool));
-
- SVN_ERR(init_callbacks(ffd->node_revision_cache, fs, no_handler, pool));
-
return SVN_NO_ERROR;
}
@@ -440,7 +631,7 @@ svn_fs_fs__initialize_txn_caches(svn_fs_t *fs,
to start a new transaction later that receives the same id.
Therefore, throw in a uuid as well - just to be sure. */
const char *prefix = apr_pstrcat(pool,
- "fsfs:", ffd->uuid,
+ "fsfs:", fs->uuid,
"/", fs->path,
":", txn_id,
":", svn_uuid_generate(pool), ":",
@@ -457,24 +648,18 @@ svn_fs_fs__initialize_txn_caches(svn_fs_t *fs,
}
/* create a txn-local directory cache */
- if (svn_cache__get_global_membuffer_cache())
- SVN_ERR(svn_cache__create_membuffer_cache(&(ffd->txn_dir_cache),
- svn_cache__get_global_membuffer_cache(),
- svn_fs_fs__serialize_dir_entries,
- svn_fs_fs__deserialize_dir_entries,
- APR_HASH_KEY_STRING,
- apr_pstrcat(pool, prefix, "TXNDIR",
- (char *)NULL),
- pool));
- else
- SVN_ERR(svn_cache__create_inprocess(&(ffd->txn_dir_cache),
- svn_fs_fs__serialize_dir_entries,
- svn_fs_fs__deserialize_dir_entries,
- APR_HASH_KEY_STRING,
- 1024, 8, FALSE,
- apr_pstrcat(pool, prefix, "TXNDIR",
- (char *)NULL),
- pool));
+ SVN_ERR(create_cache(&ffd->txn_dir_cache,
+ NULL,
+ svn_cache__get_global_membuffer_cache(),
+ 1024, 8,
+ svn_fs_fs__serialize_dir_entries,
+ svn_fs_fs__deserialize_dir_entries,
+ APR_HASH_KEY_STRING,
+ apr_pstrcat(pool, prefix, "TXNDIR",
+ (char *)NULL),
+ fs,
+ TRUE,
+ pool));
/* reset the transaction-specific cache if the pool gets cleaned up. */
init_txn_callbacks(&(ffd->txn_dir_cache), pool);
diff --git a/subversion/libsvn_fs_fs/dag.c b/subversion/libsvn_fs_fs/dag.c
index 2bd7f14..3c51ffd 100644
--- a/subversion/libsvn_fs_fs/dag.c
+++ b/subversion/libsvn_fs_fs/dag.c
@@ -70,6 +70,9 @@ struct dag_node_t
things for you. */
node_revision_t *node_revision;
+ /* The pool to allocate NODE_REVISION in. */
+ apr_pool_t *node_pool;
+
/* the path at which this node was created. */
const char *created_path;
};
@@ -139,7 +142,7 @@ copy_node_revision(node_revision_t *noderev,
/* Set *NODEREV_P to the cached node-revision for NODE.
If the node-revision was not already cached in NODE, read it in,
- allocating the cache in POOL.
+ allocating the cache in NODE->NODE_POOL.
If you plan to change the contents of NODE, be careful! We're
handing you a pointer directly to our cached node-revision, not
@@ -150,16 +153,15 @@ copy_node_revision(node_revision_t *noderev,
the structure at all. */
static svn_error_t *
get_node_revision(node_revision_t **noderev_p,
- dag_node_t *node,
- apr_pool_t *pool)
+ dag_node_t *node)
{
- node_revision_t *noderev;
-
/* If we've already got a copy, there's no need to read it in. */
if (! node->node_revision)
{
+ node_revision_t *noderev;
+
SVN_ERR(svn_fs_fs__get_node_revision(&noderev, node->fs,
- node->id, pool));
+ node->id, node->node_pool));
node->node_revision = noderev;
}
@@ -190,7 +192,8 @@ svn_fs_fs__dag_get_node(dag_node_t **node,
new_node->id = svn_fs_fs__id_copy(id, pool);
/* Grab the contents so we can inspect the node's kind and created path. */
- SVN_ERR(get_node_revision(&noderev, new_node, pool));
+ new_node->node_pool = pool;
+ SVN_ERR(get_node_revision(&noderev, new_node));
/* Initialize the KIND and CREATED_PATH attributes */
new_node->kind = noderev->kind;
@@ -227,12 +230,11 @@ svn_fs_fs__dag_get_revision(svn_revnum_t *rev,
svn_error_t *
svn_fs_fs__dag_get_predecessor_id(const svn_fs_id_t **id_p,
- dag_node_t *node,
- apr_pool_t *pool)
+ dag_node_t *node)
{
node_revision_t *noderev;
- SVN_ERR(get_node_revision(&noderev, node, pool));
+ SVN_ERR(get_node_revision(&noderev, node));
*id_p = noderev->predecessor_id;
return SVN_NO_ERROR;
}
@@ -240,44 +242,40 @@ svn_fs_fs__dag_get_predecessor_id(const svn_fs_id_t **id_p,
svn_error_t *
svn_fs_fs__dag_get_predecessor_count(int *count,
- dag_node_t *node,
- apr_pool_t *pool)
+ dag_node_t *node)
{
node_revision_t *noderev;
- SVN_ERR(get_node_revision(&noderev, node, pool));
+ SVN_ERR(get_node_revision(&noderev, node));
*count = noderev->predecessor_count;
return SVN_NO_ERROR;
}
svn_error_t *
svn_fs_fs__dag_get_mergeinfo_count(apr_int64_t *count,
- dag_node_t *node,
- apr_pool_t *pool)
+ dag_node_t *node)
{
node_revision_t *noderev;
- SVN_ERR(get_node_revision(&noderev, node, pool));
+ SVN_ERR(get_node_revision(&noderev, node));
*count = noderev->mergeinfo_count;
return SVN_NO_ERROR;
}
svn_error_t *
svn_fs_fs__dag_has_mergeinfo(svn_boolean_t *has_mergeinfo,
- dag_node_t *node,
- apr_pool_t *pool)
+ dag_node_t *node)
{
node_revision_t *noderev;
- SVN_ERR(get_node_revision(&noderev, node, pool));
+ SVN_ERR(get_node_revision(&noderev, node));
*has_mergeinfo = noderev->has_mergeinfo;
return SVN_NO_ERROR;
}
svn_error_t *
svn_fs_fs__dag_has_descendants_with_mergeinfo(svn_boolean_t *do_they,
- dag_node_t *node,
- apr_pool_t *pool)
+ dag_node_t *node)
{
node_revision_t *noderev;
@@ -287,7 +285,7 @@ svn_fs_fs__dag_has_descendants_with_mergeinfo(svn_boolean_t *do_they,
return SVN_NO_ERROR;
}
- SVN_ERR(get_node_revision(&noderev, node, pool));
+ SVN_ERR(get_node_revision(&noderev, node));
if (noderev->mergeinfo_count > 1)
*do_they = TRUE;
else if (noderev->mergeinfo_count == 1 && !noderev->has_mergeinfo)
@@ -309,15 +307,13 @@ static svn_error_t *
dir_entry_id_from_node(const svn_fs_id_t **id_p,
dag_node_t *parent,
const char *name,
- apr_pool_t *pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
svn_fs_dirent_t *dirent;
- apr_pool_t *subpool = svn_pool_create(pool);
-
- SVN_ERR(svn_fs_fs__dag_dir_entry(&dirent, parent, name, subpool, pool));
- *id_p = dirent ? svn_fs_fs__id_copy(dirent->id, pool) : NULL;
- svn_pool_destroy(subpool);
+ SVN_ERR(svn_fs_fs__dag_dir_entry(&dirent, parent, name, scratch_pool));
+ *id_p = dirent ? svn_fs_fs__id_copy(dirent->id, result_pool) : NULL;
return SVN_NO_ERROR;
}
@@ -342,7 +338,7 @@ set_entry(dag_node_t *parent,
node_revision_t *parent_noderev;
/* Get the parent's node-revision. */
- SVN_ERR(get_node_revision(&parent_noderev, parent, pool));
+ SVN_ERR(get_node_revision(&parent_noderev, parent));
/* Set the new entry. */
return svn_fs_fs__set_entry(parent->fs, txn_id, parent_noderev, name, id,
@@ -355,7 +351,7 @@ set_entry(dag_node_t *parent,
will be a file. The new node will be allocated in POOL. PARENT
must be mutable, and must not have an entry named NAME.
- Use POOL for all allocations including caching the node_revision in PARENT.
+ Use POOL for all allocations, except caching the node_revision in PARENT.
*/
static svn_error_t *
make_entry(dag_node_t **child_p,
@@ -392,7 +388,7 @@ make_entry(dag_node_t **child_p,
new_noderev.kind = is_dir ? svn_node_dir : svn_node_file;
new_noderev.created_path = svn_fspath__join(parent_path, name, pool);
- SVN_ERR(get_node_revision(&parent_noderev, parent, pool));
+ SVN_ERR(get_node_revision(&parent_noderev, parent));
new_noderev.copyroot_path = apr_pstrdup(pool,
parent_noderev->copyroot_path);
new_noderev.copyroot_rev = parent_noderev->copyroot_rev;
@@ -419,12 +415,11 @@ make_entry(dag_node_t **child_p,
svn_error_t *
svn_fs_fs__dag_dir_entries(apr_hash_t **entries,
dag_node_t *node,
- apr_pool_t *pool,
- apr_pool_t *node_pool)
+ apr_pool_t *pool)
{
node_revision_t *noderev;
- SVN_ERR(get_node_revision(&noderev, node, node_pool));
+ SVN_ERR(get_node_revision(&noderev, node));
if (noderev->kind != svn_node_dir)
return svn_error_create(SVN_ERR_FS_NOT_DIRECTORY, NULL,
@@ -437,11 +432,10 @@ svn_error_t *
svn_fs_fs__dag_dir_entry(svn_fs_dirent_t **dirent,
dag_node_t *node,
const char* name,
- apr_pool_t *pool,
- apr_pool_t *node_pool)
+ apr_pool_t *pool)
{
node_revision_t *noderev;
- SVN_ERR(get_node_revision(&noderev, node, node_pool));
+ SVN_ERR(get_node_revision(&noderev, node));
if (noderev->kind != svn_node_dir)
return svn_error_create(SVN_ERR_FS_NOT_DIRECTORY, NULL,
@@ -449,7 +443,7 @@ svn_fs_fs__dag_dir_entry(svn_fs_dirent_t **dirent,
/* Get a dirent hash for this directory. */
return svn_fs_fs__rep_contents_dir_entry(dirent, node->fs,
- noderev, name, pool);
+ noderev, name, pool, pool);
}
@@ -488,7 +482,7 @@ svn_fs_fs__dag_get_proplist(apr_hash_t **proplist_p,
node_revision_t *noderev;
apr_hash_t *proplist = NULL;
- SVN_ERR(get_node_revision(&noderev, node, pool));
+ SVN_ERR(get_node_revision(&noderev, node));
SVN_ERR(svn_fs_fs__get_proplist(&proplist, node->fs,
noderev, pool));
@@ -517,7 +511,7 @@ svn_fs_fs__dag_set_proplist(dag_node_t *node,
}
/* Go get a fresh NODE-REVISION for this node. */
- SVN_ERR(get_node_revision(&noderev, node, pool));
+ SVN_ERR(get_node_revision(&noderev, node));
/* Set the new proplist. */
return svn_fs_fs__set_proplist(node->fs, noderev, proplist, pool);
@@ -545,7 +539,7 @@ svn_fs_fs__dag_increment_mergeinfo_count(dag_node_t *node,
return SVN_NO_ERROR;
/* Go get a fresh NODE-REVISION for this node. */
- SVN_ERR(get_node_revision(&noderev, node, pool));
+ SVN_ERR(get_node_revision(&noderev, node));
noderev->mergeinfo_count += increment;
if (noderev->mergeinfo_count < 0)
@@ -594,7 +588,7 @@ svn_fs_fs__dag_set_has_mergeinfo(dag_node_t *node,
}
/* Go get a fresh NODE-REVISION for this node. */
- SVN_ERR(get_node_revision(&noderev, node, pool));
+ SVN_ERR(get_node_revision(&noderev, node));
noderev->has_mergeinfo = has_mergeinfo;
@@ -658,6 +652,7 @@ svn_fs_fs__dag_clone_child(dag_node_t **child_p,
dag_node_t *cur_entry; /* parent's current entry named NAME */
const svn_fs_id_t *new_node_id; /* node id we'll put into NEW_NODE */
svn_fs_t *fs = svn_fs_fs__dag_get_fs(parent);
+ apr_pool_t *subpool = svn_pool_create(pool);
/* First check that the parent is mutable. */
if (! svn_fs_fs__dag_check_mutable(parent))
@@ -672,7 +667,7 @@ svn_fs_fs__dag_clone_child(dag_node_t **child_p,
"Attempted to make a child clone with an illegal name '%s'", name);
/* Find the node named NAME in PARENT's entries list if it exists. */
- SVN_ERR(svn_fs_fs__dag_open(&cur_entry, parent, name, pool));
+ SVN_ERR(svn_fs_fs__dag_open(&cur_entry, parent, name, pool, subpool));
/* Check for mutability in the node we found. If it's mutable, we
don't need to clone it. */
@@ -686,11 +681,11 @@ svn_fs_fs__dag_clone_child(dag_node_t **child_p,
node_revision_t *noderev, *parent_noderev;
/* Go get a fresh NODE-REVISION for current child node. */
- SVN_ERR(get_node_revision(&noderev, cur_entry, pool));
+ SVN_ERR(get_node_revision(&noderev, cur_entry));
if (is_parent_copyroot)
{
- SVN_ERR(get_node_revision(&parent_noderev, parent, pool));
+ SVN_ERR(get_node_revision(&parent_noderev, parent));
noderev->copyroot_rev = parent_noderev->copyroot_rev;
noderev->copyroot_path = apr_pstrdup(pool,
parent_noderev->copyroot_path);
@@ -714,6 +709,7 @@ svn_fs_fs__dag_clone_child(dag_node_t **child_p,
}
/* Initialize the youngster. */
+ svn_pool_destroy(subpool);
return svn_fs_fs__dag_get_node(child_p, fs, new_node_id, pool);
}
@@ -753,7 +749,6 @@ svn_fs_fs__dag_delete(dag_node_t *parent,
apr_pool_t *pool)
{
node_revision_t *parent_noderev;
- apr_hash_t *entries;
svn_fs_t *fs = parent->fs;
svn_fs_dirent_t *dirent;
svn_fs_id_t *id;
@@ -778,15 +773,13 @@ svn_fs_fs__dag_delete(dag_node_t *parent,
"Attempted to delete a node with an illegal name '%s'", name);
/* Get a fresh NODE-REVISION for the parent node. */
- SVN_ERR(get_node_revision(&parent_noderev, parent, pool));
+ SVN_ERR(get_node_revision(&parent_noderev, parent));
subpool = svn_pool_create(pool);
- /* Get a dirent hash for this directory. */
- SVN_ERR(svn_fs_fs__rep_contents_dir(&entries, fs, parent_noderev, subpool));
-
- /* Find name in the ENTRIES hash. */
- dirent = apr_hash_get(entries, name, APR_HASH_KEY_STRING);
+ /* Search this directory for a dirent with that NAME. */
+ SVN_ERR(svn_fs_fs__rep_contents_dir_entry(&dirent, fs, parent_noderev,
+ name, subpool, subpool));
/* If we never found ID in ENTRIES (perhaps because there are no
ENTRIES, perhaps because ID just isn't in the existing ENTRIES
@@ -851,7 +844,7 @@ svn_fs_fs__dag_delete_if_mutable(svn_fs_t *fs,
apr_hash_index_t *hi;
/* Loop over hash entries */
- SVN_ERR(svn_fs_fs__dag_dir_entries(&entries, node, pool, pool));
+ SVN_ERR(svn_fs_fs__dag_dir_entries(&entries, node, pool));
if (entries)
{
for (hi = apr_hash_first(pool, entries);
@@ -912,7 +905,7 @@ svn_fs_fs__dag_get_contents(svn_stream_t **contents_p,
"Attempted to get textual contents of a *non*-file node");
/* Go get a fresh node-revision for FILE. */
- SVN_ERR(get_node_revision(&noderev, file, pool));
+ SVN_ERR(get_node_revision(&noderev, file));
/* Get a stream to the contents. */
SVN_ERR(svn_fs_fs__get_contents(&contents, file->fs,
@@ -942,10 +935,10 @@ svn_fs_fs__dag_get_file_delta_stream(svn_txdelta_stream_t **stream_p,
/* Go get fresh node-revisions for the nodes. */
if (source)
- SVN_ERR(get_node_revision(&src_noderev, source, pool));
+ SVN_ERR(get_node_revision(&src_noderev, source));
else
src_noderev = NULL;
- SVN_ERR(get_node_revision(&tgt_noderev, target, pool));
+ SVN_ERR(get_node_revision(&tgt_noderev, target));
/* Get the delta stream. */
return svn_fs_fs__get_file_delta_stream(stream_p, target->fs,
@@ -954,6 +947,24 @@ svn_fs_fs__dag_get_file_delta_stream(svn_txdelta_stream_t **stream_p,
svn_error_t *
+svn_fs_fs__dag_try_process_file_contents(svn_boolean_t *success,
+ dag_node_t *node,
+ svn_fs_process_contents_func_t processor,
+ void* baton,
+ apr_pool_t *pool)
+{
+ node_revision_t *noderev;
+
+ /* Go get fresh node-revisions for the nodes. */
+ SVN_ERR(get_node_revision(&noderev, node));
+
+ return svn_fs_fs__try_process_file_contents(success, node->fs,
+ noderev,
+ processor, baton, pool);
+}
+
+
+svn_error_t *
svn_fs_fs__dag_file_length(svn_filesize_t *length,
dag_node_t *file,
apr_pool_t *pool)
@@ -967,7 +978,7 @@ svn_fs_fs__dag_file_length(svn_filesize_t *length,
"Attempted to get length of a *non*-file node");
/* Go get a fresh node-revision for FILE, and . */
- SVN_ERR(get_node_revision(&noderev, file, pool));
+ SVN_ERR(get_node_revision(&noderev, file));
return svn_fs_fs__file_length(length, noderev, pool);
}
@@ -986,7 +997,7 @@ svn_fs_fs__dag_file_checksum(svn_checksum_t **checksum,
(SVN_ERR_FS_NOT_FILE, NULL,
"Attempted to get checksum of a *non*-file node");
- SVN_ERR(get_node_revision(&noderev, file, pool));
+ SVN_ERR(get_node_revision(&noderev, file));
return svn_fs_fs__file_checksum(checksum, noderev, kind, pool);
}
@@ -1013,7 +1024,7 @@ svn_fs_fs__dag_get_edit_stream(svn_stream_t **contents,
"Attempted to set textual contents of an immutable node");
/* Get the node revision. */
- SVN_ERR(get_node_revision(&noderev, file, pool));
+ SVN_ERR(get_node_revision(&noderev, file));
SVN_ERR(svn_fs_fs__set_contents(&ws, file->fs, noderev, pool));
@@ -1066,11 +1077,13 @@ svn_fs_fs__dag_dup(const dag_node_t *node,
new_node->node_revision->is_fresh_txn_root =
node->node_revision->is_fresh_txn_root;
}
+ new_node->node_pool = pool;
+
return new_node;
}
svn_error_t *
-svn_fs_fs__dag_serialize(char **data,
+svn_fs_fs__dag_serialize(void **data,
apr_size_t *data_len,
void *in,
apr_pool_t *pool)
@@ -1082,7 +1095,7 @@ svn_fs_fs__dag_serialize(char **data,
svn_temp_serializer__context_t *context =
svn_temp_serializer__init(node,
sizeof(*node),
- 503,
+ 1024 - SVN_TEMP_SERIALIZER__OVERHEAD,
pool);
/* for mutable nodes, we will _never_ cache the noderev */
@@ -1092,6 +1105,10 @@ svn_fs_fs__dag_serialize(char **data,
svn_temp_serializer__set_null(context,
(const void * const *)&node->node_revision);
+ /* The deserializer will use its own pool. */
+ svn_temp_serializer__set_null(context,
+ (const void * const *)&node->node_pool);
+
/* serialize other sub-structures */
svn_fs_fs__id_serialize(context, (const svn_fs_id_t **)&node->id);
svn_fs_fs__id_serialize(context, &node->fresh_root_predecessor_id);
@@ -1107,7 +1124,7 @@ svn_fs_fs__dag_serialize(char **data,
svn_error_t *
svn_fs_fs__dag_deserialize(void **out,
- char *data,
+ void *data,
apr_size_t data_len,
apr_pool_t *pool)
{
@@ -1124,6 +1141,7 @@ svn_fs_fs__dag_deserialize(void **out,
svn_fs_fs__id_deserialize(node,
(svn_fs_id_t **)&node->fresh_root_predecessor_id);
svn_fs_fs__noderev_deserialize(node, &node->node_revision);
+ node->node_pool = pool;
svn_temp_deserializer__resolve(node, (void**)&node->created_path);
@@ -1137,12 +1155,14 @@ svn_error_t *
svn_fs_fs__dag_open(dag_node_t **child_p,
dag_node_t *parent,
const char *name,
- apr_pool_t *pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
const svn_fs_id_t *node_id;
/* Ensure that NAME exists in PARENT's entry list. */
- SVN_ERR(dir_entry_id_from_node(&node_id, parent, name, pool));
+ SVN_ERR(dir_entry_id_from_node(&node_id, parent, name,
+ scratch_pool, scratch_pool));
if (! node_id)
return svn_error_createf
(SVN_ERR_FS_NOT_FOUND, NULL,
@@ -1156,7 +1176,7 @@ svn_fs_fs__dag_open(dag_node_t **child_p,
/* Now get the node that was requested. */
return svn_fs_fs__dag_get_node(child_p, svn_fs_fs__dag_get_fs(parent),
- node_id, pool);
+ node_id, result_pool);
}
@@ -1180,7 +1200,7 @@ svn_fs_fs__dag_copy(dag_node_t *to_node,
svn_fs_t *fs = svn_fs_fs__dag_get_fs(from_node);
/* Make a copy of the original node revision. */
- SVN_ERR(get_node_revision(&from_noderev, from_node, pool));
+ SVN_ERR(get_node_revision(&from_noderev, from_node));
to_noderev = copy_node_revision(from_noderev, pool);
/* Reserve a copy ID for this new copy. */
@@ -1222,8 +1242,7 @@ svn_error_t *
svn_fs_fs__dag_things_different(svn_boolean_t *props_changed,
svn_boolean_t *contents_changed,
dag_node_t *node1,
- dag_node_t *node2,
- apr_pool_t *pool)
+ dag_node_t *node2)
{
node_revision_t *noderev1, *noderev2;
@@ -1233,8 +1252,8 @@ svn_fs_fs__dag_things_different(svn_boolean_t *props_changed,
return SVN_NO_ERROR;
/* The node revision skels for these two nodes. */
- SVN_ERR(get_node_revision(&noderev1, node1, pool));
- SVN_ERR(get_node_revision(&noderev2, node2, pool));
+ SVN_ERR(get_node_revision(&noderev1, node1));
+ SVN_ERR(get_node_revision(&noderev2, node2));
/* Compare property keys. */
if (props_changed != NULL)
@@ -1253,13 +1272,12 @@ svn_fs_fs__dag_things_different(svn_boolean_t *props_changed,
svn_error_t *
svn_fs_fs__dag_get_copyroot(svn_revnum_t *rev,
const char **path,
- dag_node_t *node,
- apr_pool_t *pool)
+ dag_node_t *node)
{
node_revision_t *noderev;
/* Go get a fresh node-revision for NODE. */
- SVN_ERR(get_node_revision(&noderev, node, pool));
+ SVN_ERR(get_node_revision(&noderev, node));
*rev = noderev->copyroot_rev;
*path = noderev->copyroot_path;
@@ -1269,13 +1287,12 @@ svn_fs_fs__dag_get_copyroot(svn_revnum_t *rev,
svn_error_t *
svn_fs_fs__dag_get_copyfrom_rev(svn_revnum_t *rev,
- dag_node_t *node,
- apr_pool_t *pool)
+ dag_node_t *node)
{
node_revision_t *noderev;
/* Go get a fresh node-revision for NODE. */
- SVN_ERR(get_node_revision(&noderev, node, pool));
+ SVN_ERR(get_node_revision(&noderev, node));
*rev = noderev->copyfrom_rev;
@@ -1284,13 +1301,12 @@ svn_fs_fs__dag_get_copyfrom_rev(svn_revnum_t *rev,
svn_error_t *
svn_fs_fs__dag_get_copyfrom_path(const char **path,
- dag_node_t *node,
- apr_pool_t *pool)
+ dag_node_t *node)
{
node_revision_t *noderev;
/* Go get a fresh node-revision for NODE. */
- SVN_ERR(get_node_revision(&noderev, node, pool));
+ SVN_ERR(get_node_revision(&noderev, node));
*path = noderev->copyfrom_path;
@@ -1309,8 +1325,8 @@ svn_fs_fs__dag_update_ancestry(dag_node_t *target,
(SVN_ERR_FS_NOT_MUTABLE, NULL,
_("Attempted to update ancestry of non-mutable node"));
- SVN_ERR(get_node_revision(&source_noderev, source, pool));
- SVN_ERR(get_node_revision(&target_noderev, target, pool));
+ SVN_ERR(get_node_revision(&source_noderev, source));
+ SVN_ERR(get_node_revision(&target_noderev, target));
target_noderev->predecessor_id = source->id;
target_noderev->predecessor_count = source_noderev->predecessor_count;
diff --git a/subversion/libsvn_fs_fs/dag.h b/subversion/libsvn_fs_fs/dag.h
index 0dc4d1a..867b025 100644
--- a/subversion/libsvn_fs_fs/dag.h
+++ b/subversion/libsvn_fs_fs/dag.h
@@ -81,7 +81,7 @@ svn_fs_fs__dag_dup(const dag_node_t *node,
/* Serialize a DAG node, except don't try to preserve the 'fs' member.
Implements svn_cache__serialize_func_t */
svn_error_t *
-svn_fs_fs__dag_serialize(char **data,
+svn_fs_fs__dag_serialize(void **data,
apr_size_t *data_len,
void *in,
apr_pool_t *pool);
@@ -90,7 +90,7 @@ svn_fs_fs__dag_serialize(char **data,
Implements svn_cache__deserialize_func_t */
svn_error_t *
svn_fs_fs__dag_deserialize(void **out,
- char *data,
+ void *data,
apr_size_t data_len,
apr_pool_t *pool);
@@ -121,58 +121,39 @@ const char *svn_fs_fs__dag_get_created_path(dag_node_t *node);
/* Set *ID_P to the node revision ID of NODE's immediate predecessor,
- or NULL if NODE has no predecessor, allocating from POOL.
-
- Use POOL for all allocations, including to cache the node_revision in
- NODE.
+ or NULL if NODE has no predecessor.
*/
svn_error_t *svn_fs_fs__dag_get_predecessor_id(const svn_fs_id_t **id_p,
- dag_node_t *node,
- apr_pool_t *pool);
+ dag_node_t *node);
/* Set *COUNT to the number of predecessors NODE has (recursively), or
- -1 if not known, allocating from POOL.
-
- Use POOL for all allocations, including to cache the node_revision in
- NODE.
+ -1 if not known.
*/
+/* ### This function is currently only used by 'verify'. */
svn_error_t *svn_fs_fs__dag_get_predecessor_count(int *count,
- dag_node_t *node,
- apr_pool_t *pool);
+ dag_node_t *node);
/* Set *COUNT to the number of node under NODE (inclusive) with
- svn:mergeinfo properties, allocating from POOL.
-
- Use POOL for all allocations, including to cache the node_revision in
- NODE.
+ svn:mergeinfo properties.
*/
svn_error_t *svn_fs_fs__dag_get_mergeinfo_count(apr_int64_t *count,
- dag_node_t *node,
- apr_pool_t *pool);
+ dag_node_t *node);
/* Set *DO_THEY to a flag indicating whether or not NODE is a
directory with at least one descendant (not including itself) with
svn:mergeinfo.
-
- Use POOL for all allocations, including to cache the node_revision in
- NODE.
*/
svn_error_t *
svn_fs_fs__dag_has_descendants_with_mergeinfo(svn_boolean_t *do_they,
- dag_node_t *node,
- apr_pool_t *pool);
+ dag_node_t *node);
/* Set *HAS_MERGEINFO to a flag indicating whether or not NODE itself
has svn:mergeinfo set on it.
-
- Use POOL for all allocations, including to cache the node_revision in
- NODE.
*/
svn_error_t *
svn_fs_fs__dag_has_mergeinfo(svn_boolean_t *has_mergeinfo,
- dag_node_t *node,
- apr_pool_t *pool);
+ dag_node_t *node);
/* Return non-zero IFF NODE is currently mutable. */
svn_boolean_t svn_fs_fs__dag_check_mutable(const dag_node_t *node);
@@ -188,8 +169,7 @@ svn_node_kind_t svn_fs_fs__dag_node_kind(dag_node_t *node);
If properties do not exist on NODE, *PROPLIST_P will be set to
NULL.
- Use POOL for all allocations, including to cache the node_revision in
- NODE.
+ Use POOL for all allocations.
*/
svn_error_t *svn_fs_fs__dag_get_proplist(apr_hash_t **proplist_p,
dag_node_t *node,
@@ -198,8 +178,7 @@ svn_error_t *svn_fs_fs__dag_get_proplist(apr_hash_t **proplist_p,
/* Set the property list of NODE to PROPLIST, allocating from POOL.
The node being changed must be mutable.
- Use POOL for all allocations, including to cache the node_revision in
- NODE.
+ Use POOL for all allocations.
*/
svn_error_t *svn_fs_fs__dag_set_proplist(dag_node_t *node,
apr_hash_t *proplist,
@@ -208,8 +187,7 @@ svn_error_t *svn_fs_fs__dag_set_proplist(dag_node_t *node,
/* Increment the mergeinfo_count field on NODE by INCREMENT. The node
being changed must be mutable.
- Use POOL for all allocations, including to cache the node_revision in
- NODE.
+ Use POOL for all allocations.
*/
svn_error_t *svn_fs_fs__dag_increment_mergeinfo_count(dag_node_t *node,
apr_int64_t increment,
@@ -218,8 +196,7 @@ svn_error_t *svn_fs_fs__dag_increment_mergeinfo_count(dag_node_t *node,
/* Set the has-mergeinfo flag on NODE to HAS_MERGEINFO. The node
being changed must be mutable.
- Use POOL for all allocations, including to cache the node_revision in
- NODE.
+ Use POOL for all allocations.
*/
svn_error_t *svn_fs_fs__dag_set_has_mergeinfo(dag_node_t *node,
svn_boolean_t has_mergeinfo,
@@ -274,40 +251,35 @@ svn_error_t *svn_fs_fs__dag_clone_root(dag_node_t **root_p,
/* Open the node named NAME in the directory PARENT. Set *CHILD_P to
- the new node, allocated in POOL. NAME must be a single path
+ the new node, allocated in RESULT_POOL. NAME must be a single path
component; it cannot be a slash-separated directory path.
-
- Use POOL for all allocations, including to cache the node_revision in
- PARENT.
*/
-svn_error_t *svn_fs_fs__dag_open(dag_node_t **child_p,
- dag_node_t *parent,
- const char *name,
- apr_pool_t *pool);
+svn_error_t *
+svn_fs_fs__dag_open(dag_node_t **child_p,
+ dag_node_t *parent,
+ const char *name,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
/* Set *ENTRIES_P to a hash table of NODE's entries. The keys of the
table are entry names, and the values are svn_fs_dirent_t's. The
returned table (and its keys and values) is allocated in POOL,
- which is also used for temporary allocations. NODE_POOL is used
- for any allocation of memory that needs to live as long as NODE
- lives. */
+ which is also used for temporary allocations. */
svn_error_t *svn_fs_fs__dag_dir_entries(apr_hash_t **entries_p,
dag_node_t *node,
- apr_pool_t *pool,
- apr_pool_t *node_pool);
+ apr_pool_t *pool);
/* Fetches the NODE's entries and returns a copy of the entry selected
by the key value given in NAME and set *DIRENT to a copy of that
entry. If such entry was found, the copy will be allocated in POOL.
- Otherwise, the *DIRENT will be set to NULL. NODE_POOL is used for
- any allocation of memory that needs to live as long as NODE lives.
+ Otherwise, the *DIRENT will be set to NULL.
*/
+/* ### This function is currently only called from dag.c. */
svn_error_t * svn_fs_fs__dag_dir_entry(svn_fs_dirent_t **dirent,
dag_node_t *node,
const char* name,
- apr_pool_t *pool,
- apr_pool_t *node_pool);
+ apr_pool_t *pool);
/* Set ENTRY_NAME in NODE to point to ID (with kind KIND), allocating
from POOL. NODE must be a mutable directory. ID can refer to a
@@ -343,8 +315,7 @@ svn_error_t *svn_fs_fs__dag_set_entry(dag_node_t *node,
TXN_ID is the Subversion transaction under which this occurs.
- Use POOL for all allocations, including to cache the node_revision in
- FILE.
+ Use POOL for all allocations.
*/
svn_error_t *svn_fs_fs__dag_clone_child(dag_node_t **child_p,
dag_node_t *parent,
@@ -366,8 +337,7 @@ svn_error_t *svn_fs_fs__dag_clone_child(dag_node_t **child_p,
If return SVN_ERR_FS_NO_SUCH_ENTRY, then there is no entry NAME in
PARENT.
- Use POOL for all allocations, including to cache the node_revision in
- FILE.
+ Use POOL for all allocations.
*/
svn_error_t *svn_fs_fs__dag_delete(dag_node_t *parent,
const char *name,
@@ -408,8 +378,7 @@ svn_error_t *svn_fs_fs__dag_delete_if_mutable(svn_fs_t *fs,
not currently have an entry named NAME. TXN_ID is the Subversion
transaction under which this occurs.
- Use POOL for all allocations, including to cache the node_revision in
- PARENT.
+ Use POOL for all allocations.
*/
svn_error_t *svn_fs_fs__dag_make_dir(dag_node_t **child_p,
dag_node_t *parent,
@@ -428,20 +397,31 @@ svn_error_t *svn_fs_fs__dag_make_dir(dag_node_t **child_p,
If FILE is not a file, return SVN_ERR_FS_NOT_FILE.
- Use POOL for all allocations, including to cache the node_revision in
- FILE.
+ Use POOL for all allocations.
*/
svn_error_t *svn_fs_fs__dag_get_contents(svn_stream_t **contents,
dag_node_t *file,
apr_pool_t *pool);
+/* Attempt to fetch the contents of NODE and pass it along with the BATON
+ to the PROCESSOR. Set *SUCCESS only of the data could be provided
+ and the processor had been called.
+
+ Use POOL for all allocations.
+ */
+svn_error_t *
+svn_fs_fs__dag_try_process_file_contents(svn_boolean_t *success,
+ dag_node_t *node,
+ svn_fs_process_contents_func_t processor,
+ void* baton,
+ apr_pool_t *pool);
+
/* Set *STREAM_P to a delta stream that will turn the contents of SOURCE into
the contents of TARGET, allocated in POOL. If SOURCE is null, the empty
string will be used.
- Use POOL for all allocations, including to cache the node_revision in
- SOURCE and TARGET.
+ Use POOL for all allocations.
*/
svn_error_t *
svn_fs_fs__dag_get_file_delta_stream(svn_txdelta_stream_t **stream_p,
@@ -455,8 +435,7 @@ svn_fs_fs__dag_get_file_delta_stream(svn_txdelta_stream_t **stream_p,
Any previous edits on the file will be deleted, and a new edit
stream will be constructed.
- Use POOL for all allocations, including to cache the node_revision in
- FILE.
+ Use POOL for all allocations.
*/
svn_error_t *svn_fs_fs__dag_get_edit_stream(svn_stream_t **contents,
dag_node_t *file,
@@ -482,8 +461,7 @@ svn_error_t *svn_fs_fs__dag_finalize_edits(dag_node_t *file,
/* Set *LENGTH to the length of the contents of FILE.
- Use POOL for all allocations, including to cache the node_revision in
- FILE.
+ Use POOL for all allocations.
*/
svn_error_t *svn_fs_fs__dag_file_length(svn_filesize_t *length,
dag_node_t *file,
@@ -495,8 +473,7 @@ svn_error_t *svn_fs_fs__dag_file_length(svn_filesize_t *length,
If no stored checksum is available, do not calculate the checksum,
just put NULL into CHECKSUM.
- Use POOL for all allocations, including to cache the node_revision in
- FILE.
+ Use POOL for all allocations.
*/
svn_error_t *
svn_fs_fs__dag_file_checksum(svn_checksum_t **checksum,
@@ -512,8 +489,7 @@ svn_fs_fs__dag_file_checksum(svn_checksum_t **checksum,
canonicalized absolute path of the parent directory. TXN_ID is the
Subversion transaction under which this occurs.
- Use POOL for all allocations, including to cache the node_revision in
- PARENT.
+ Use POOL for all allocations.
*/
svn_error_t *svn_fs_fs__dag_make_file(dag_node_t **child_p,
dag_node_t *parent,
@@ -538,8 +514,7 @@ svn_error_t *svn_fs_fs__dag_make_file(dag_node_t **child_p,
If PRESERVE_HISTORY is false, FROM_PATH and FROM_REV are ignored.
- Use POOL for all allocations, including to cache the node_revision in
- FROM_NODE.
+ Use POOL for all allocations.
*/
svn_error_t *svn_fs_fs__dag_copy(dag_node_t *to_node,
const char *entry,
@@ -569,39 +544,29 @@ svn_error_t *svn_fs_fs__dag_copy(dag_node_t *to_node,
may leave us with a slight chance of a false positive, though I
don't really see how that would happen in practice. Nevertheless,
it should probably be fixed.
-
- Use POOL for all allocations, including to cache the node_revision in NODE1
- and NODE2.
*/
svn_error_t *svn_fs_fs__dag_things_different(svn_boolean_t *props_changed,
svn_boolean_t *contents_changed,
dag_node_t *node1,
- dag_node_t *node2,
- apr_pool_t *pool);
+ dag_node_t *node2);
/* Set *REV and *PATH to the copyroot revision and path of node NODE, or
to SVN_INVALID_REVNUM and NULL if no copyroot exists.
- Use POOL for all allocations, including to cache the node_revision in NODE.
*/
svn_error_t *svn_fs_fs__dag_get_copyroot(svn_revnum_t *rev,
const char **path,
- dag_node_t *node,
- apr_pool_t *pool);
+ dag_node_t *node);
/* Set *REV to the copyfrom revision associated with NODE.
- Use POOL for all allocations, including to cache the node_revision in NODE.
*/
svn_error_t *svn_fs_fs__dag_get_copyfrom_rev(svn_revnum_t *rev,
- dag_node_t *node,
- apr_pool_t *pool);
+ dag_node_t *node);
/* Set *PATH to the copyfrom path associated with NODE.
- Use POOL for all allocations, including to cache the node_revision in NODE.
*/
svn_error_t *svn_fs_fs__dag_get_copyfrom_path(const char **path,
- dag_node_t *node,
- apr_pool_t *pool);
+ dag_node_t *node);
/* Update *TARGET so that SOURCE is it's predecessor.
*/
diff --git a/subversion/libsvn_fs_fs/fs.c b/subversion/libsvn_fs_fs/fs.c
index 482878c..d0ba734 100644
--- a/subversion/libsvn_fs_fs/fs.c
+++ b/subversion/libsvn_fs_fs/fs.c
@@ -38,8 +38,10 @@
#include "tree.h"
#include "lock.h"
#include "id.h"
+#include "rep-cache.h"
#include "svn_private_config.h"
#include "private/svn_fs_util.h"
+#include "private/svn_subr_private.h"
#include "../libsvn_fs/fs-loader.h"
@@ -73,7 +75,8 @@ fs_serialized_init(svn_fs_t *fs, apr_pool_t *common_pool, apr_pool_t *pool)
know of a better way of associating such data with the
repository. */
- key = apr_pstrcat(pool, SVN_FSFS_SHARED_USERDATA_PREFIX, ffd->uuid,
+ SVN_ERR_ASSERT(fs->uuid);
+ key = apr_pstrcat(pool, SVN_FSFS_SHARED_USERDATA_PREFIX, fs->uuid,
(char *) NULL);
status = apr_pool_userdata_get(&val, key, common_pool);
if (status)
@@ -85,33 +88,21 @@ fs_serialized_init(svn_fs_t *fs, apr_pool_t *common_pool, apr_pool_t *pool)
ffsd = apr_pcalloc(common_pool, sizeof(*ffsd));
ffsd->common_pool = common_pool;
-#if SVN_FS_FS__USE_LOCK_MUTEX
/* POSIX fcntl locks are per-process, so we need a mutex for
intra-process synchronization when grabbing the repository write
lock. */
- status = apr_thread_mutex_create(&ffsd->fs_write_lock,
- APR_THREAD_MUTEX_DEFAULT, common_pool);
- if (status)
- return svn_error_wrap_apr(status,
- _("Can't create FSFS write-lock mutex"));
+ SVN_ERR(svn_mutex__init(&ffsd->fs_write_lock,
+ SVN_FS_FS__USE_LOCK_MUTEX, common_pool));
/* ... not to mention locking the txn-current file. */
- status = apr_thread_mutex_create(&ffsd->txn_current_lock,
- APR_THREAD_MUTEX_DEFAULT, common_pool);
- if (status)
- return svn_error_wrap_apr(status,
- _("Can't create FSFS txn-current mutex"));
-#endif
-#if APR_HAS_THREADS
- /* We also need a mutex for synchronising access to the active
- transaction list and free transaction pointer. */
- status = apr_thread_mutex_create(&ffsd->txn_list_lock,
- APR_THREAD_MUTEX_DEFAULT, common_pool);
- if (status)
- return svn_error_wrap_apr(status,
- _("Can't create FSFS txn list mutex"));
-#endif
+ SVN_ERR(svn_mutex__init(&ffsd->txn_current_lock,
+ SVN_FS_FS__USE_LOCK_MUTEX, common_pool));
+ /* We also need a mutex for synchronizing access to the active
+ transaction list and free transaction pointer. This one is
+ enabled unconditionally. */
+ SVN_ERR(svn_mutex__init(&ffsd->txn_list_lock,
+ TRUE, common_pool));
key = apr_pstrdup(common_pool, key);
status = apr_pool_userdata_set(ffsd, key, NULL, common_pool);
@@ -137,6 +128,46 @@ fs_set_errcall(svn_fs_t *fs,
return SVN_NO_ERROR;
}
+struct fs_freeze_baton_t {
+ svn_fs_t *fs;
+ svn_fs_freeze_func_t freeze_func;
+ void *freeze_baton;
+};
+
+static svn_error_t *
+fs_freeze_body(void *baton,
+ apr_pool_t *pool)
+{
+ struct fs_freeze_baton_t *b = baton;
+ svn_boolean_t exists;
+
+ SVN_ERR(svn_fs_fs__exists_rep_cache(&exists, b->fs, pool));
+ if (exists)
+ SVN_ERR(svn_fs_fs__lock_rep_cache(b->fs, pool));
+
+ SVN_ERR(b->freeze_func(b->freeze_baton, pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+fs_freeze(svn_fs_t *fs,
+ svn_fs_freeze_func_t freeze_func,
+ void *freeze_baton,
+ apr_pool_t *pool)
+{
+ struct fs_freeze_baton_t b;
+
+ b.fs = fs;
+ b.freeze_func = freeze_func;
+ b.freeze_baton = freeze_baton;
+
+ SVN_ERR(svn_fs__check_fs(fs, TRUE));
+ SVN_ERR(svn_fs_fs__with_write_lock(fs, fs_freeze_body, &b, pool));
+
+ return SVN_NO_ERROR;
+}
+
/* The vtable associated with a specific open filesystem. */
@@ -145,7 +176,6 @@ static fs_vtable_t fs_vtable = {
svn_fs_fs__revision_prop,
svn_fs_fs__revision_proplist,
svn_fs_fs__change_rev_prop,
- svn_fs_fs__get_uuid,
svn_fs_fs__set_uuid,
svn_fs_fs__revision_root,
svn_fs_fs__begin_txn,
@@ -158,7 +188,9 @@ static fs_vtable_t fs_vtable = {
svn_fs_fs__unlock,
svn_fs_fs__get_lock,
svn_fs_fs__get_locks,
- fs_set_errcall,
+ svn_fs_fs__verify_root,
+ fs_freeze,
+ fs_set_errcall
};
@@ -255,19 +287,40 @@ fs_upgrade(svn_fs_t *fs, const char *path, apr_pool_t *pool,
}
static svn_error_t *
+fs_verify(svn_fs_t *fs, const char *path,
+ svn_revnum_t start,
+ svn_revnum_t end,
+ svn_fs_progress_notify_func_t notify_func,
+ void *notify_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *pool,
+ apr_pool_t *common_pool)
+{
+ SVN_ERR(svn_fs__check_fs(fs, FALSE));
+ SVN_ERR(initialize_fs_struct(fs));
+ SVN_ERR(svn_fs_fs__open(fs, path, pool));
+ SVN_ERR(svn_fs_fs__initialize_caches(fs, pool));
+ SVN_ERR(fs_serialized_init(fs, common_pool, pool));
+ return svn_fs_fs__verify(fs, start, end, notify_func, notify_baton,
+ cancel_func, cancel_baton, pool);
+}
+
+static svn_error_t *
fs_pack(svn_fs_t *fs,
const char *path,
svn_fs_pack_notify_t notify_func,
void *notify_baton,
svn_cancel_func_t cancel_func,
void *cancel_baton,
- apr_pool_t *pool)
+ apr_pool_t *pool,
+ apr_pool_t *common_pool)
{
SVN_ERR(svn_fs__check_fs(fs, FALSE));
SVN_ERR(initialize_fs_struct(fs));
SVN_ERR(svn_fs_fs__open(fs, path, pool));
SVN_ERR(svn_fs_fs__initialize_caches(fs, pool));
- SVN_ERR(fs_serialized_init(fs, pool, pool));
+ SVN_ERR(fs_serialized_init(fs, common_pool, pool));
return svn_fs_fs__pack(fs, notify_func, notify_baton,
cancel_func, cancel_baton, pool);
}
@@ -276,16 +329,36 @@ fs_pack(svn_fs_t *fs,
/* This implements the fs_library_vtable_t.hotcopy() API. Copy a
- possibly live Subversion filesystem from SRC_PATH to DEST_PATH.
+ possibly live Subversion filesystem SRC_FS from SRC_PATH to a
+ DST_FS at DEST_PATH. If INCREMENTAL is TRUE, make an effort not to
+ re-copy data which already exists in DST_FS.
The CLEAN_LOGS argument is ignored and included for Subversion
1.0.x compatibility. Perform all temporary allocations in POOL. */
static svn_error_t *
-fs_hotcopy(const char *src_path,
- const char *dest_path,
+fs_hotcopy(svn_fs_t *src_fs,
+ svn_fs_t *dst_fs,
+ const char *src_path,
+ const char *dst_path,
svn_boolean_t clean_logs,
+ svn_boolean_t incremental,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
apr_pool_t *pool)
{
- return svn_fs_fs__hotcopy(src_path, dest_path, pool);
+ SVN_ERR(svn_fs__check_fs(src_fs, FALSE));
+ SVN_ERR(initialize_fs_struct(src_fs));
+ SVN_ERR(svn_fs_fs__open(src_fs, src_path, pool));
+ SVN_ERR(svn_fs_fs__initialize_caches(src_fs, pool));
+ SVN_ERR(fs_serialized_init(src_fs, pool, pool));
+
+ SVN_ERR(svn_fs__check_fs(dst_fs, FALSE));
+ SVN_ERR(initialize_fs_struct(dst_fs));
+ /* In INCREMENTAL mode, svn_fs_fs__hotcopy() will open DST_FS.
+ Otherwise, it's not an FS yet --- possibly just an empty dir --- so
+ can't be opened.
+ */
+ return svn_fs_fs__hotcopy(src_fs, dst_fs, src_path, dst_path,
+ incremental, cancel_func, cancel_baton, pool);
}
@@ -331,6 +404,17 @@ fs_get_description(void)
return _("Module for working with a plain file (FSFS) repository.");
}
+static svn_error_t *
+fs_set_svn_fs_open(svn_fs_t *fs,
+ svn_error_t *(*svn_fs_open_)(svn_fs_t **,
+ const char *,
+ apr_hash_t *,
+ apr_pool_t *))
+{
+ fs_fs_data_t *ffd = fs->fsap_data;
+ ffd->svn_fs_open_ = svn_fs_open_;
+ return SVN_NO_ERROR;
+}
/* Base FS library vtable, used by the FS loader library. */
@@ -341,12 +425,15 @@ static fs_library_vtable_t library_vtable = {
fs_open,
fs_open_for_recovery,
fs_upgrade,
+ fs_verify,
fs_delete_fs,
fs_hotcopy,
fs_get_description,
svn_fs_fs__recover,
fs_pack,
- fs_logfiles
+ fs_logfiles,
+ NULL /* parse_id */,
+ fs_set_svn_fs_open
};
svn_error_t *
@@ -366,7 +453,7 @@ svn_fs_fs__init(const svn_version_t *loader_version,
return svn_error_createf(SVN_ERR_VERSION_MISMATCH, NULL,
_("Unsupported FS loader version (%d) for fsfs"),
loader_version->major);
- SVN_ERR(svn_ver_check_list(fs_version(), checklist));
+ SVN_ERR(svn_ver_check_list2(fs_version(), checklist, svn_ver_equal));
*vtable = &library_vtable;
return SVN_NO_ERROR;
diff --git a/subversion/libsvn_fs_fs/fs.h b/subversion/libsvn_fs_fs/fs.h
index 838b9ad..5cdc270 100644
--- a/subversion/libsvn_fs_fs/fs.h
+++ b/subversion/libsvn_fs_fs/fs.h
@@ -25,7 +25,6 @@
#include <apr_pools.h>
#include <apr_hash.h>
-#include <apr_thread_mutex.h>
#include <apr_network_io.h>
#include "svn_fs.h"
@@ -34,6 +33,8 @@
#include "private/svn_cache.h"
#include "private/svn_fs_private.h"
#include "private/svn_sqlite.h"
+#include "private/svn_mutex.h"
+#include "private/svn_named_atomic.h"
#ifdef __cplusplus
extern "C" {
@@ -60,6 +61,12 @@ extern "C" {
#define PATH_LOCKS_DIR "locks" /* Directory of locks */
#define PATH_MIN_UNPACKED_REV "min-unpacked-rev" /* Oldest revision which
has not been packed. */
+#define PATH_REVPROP_GENERATION "revprop-generation"
+ /* Current revprop generation*/
+#define PATH_MANIFEST "manifest" /* Manifest file name */
+#define PATH_PACKED "pack" /* Packed revision data file */
+#define PATH_EXT_PACKED_SHARD ".pack" /* Extension for packed
+ shards */
/* If you change this, look at tests/svn_test_fs.c(maybe_install_fsfs_conf) */
#define PATH_CONFIG "fsfs.conf" /* Configuration */
@@ -82,11 +89,19 @@ extern "C" {
#define CONFIG_OPTION_FAIL_STOP "fail-stop"
#define CONFIG_SECTION_REP_SHARING "rep-sharing"
#define CONFIG_OPTION_ENABLE_REP_SHARING "enable-rep-sharing"
+#define CONFIG_SECTION_DELTIFICATION "deltification"
+#define CONFIG_OPTION_ENABLE_DIR_DELTIFICATION "enable-dir-deltification"
+#define CONFIG_OPTION_ENABLE_PROPS_DELTIFICATION "enable-props-deltification"
+#define CONFIG_OPTION_MAX_DELTIFICATION_WALK "max-deltification-walk"
+#define CONFIG_OPTION_MAX_LINEAR_DELTIFICATION "max-linear-deltification"
+#define CONFIG_SECTION_PACKED_REVPROPS "packed-revprops"
+#define CONFIG_OPTION_REVPROP_PACK_SIZE "revprop-pack-size"
+#define CONFIG_OPTION_COMPRESS_PACKED_REVPROPS "compress-packed-revprops"
/* The format number of this filesystem.
This is independent of the repository format number, and
independent of any other FS back ends. */
-#define SVN_FS_FS__FORMAT_NUMBER 4
+#define SVN_FS_FS__FORMAT_NUMBER 6
/* The minimum format number that supports svndiff version 1. */
#define SVN_FS_FS__MIN_SVNDIFF1_FORMAT 2
@@ -118,12 +133,16 @@ extern "C" {
/* The minimum format number that stores node kinds in changed-paths lists. */
#define SVN_FS_FS__MIN_KIND_IN_CHANGED_FORMAT 4
+/* 1.8 deltification options should work with any FSFS repo but to avoid
+ * issues with very old servers, restrict those options to the 1.6+ format*/
+#define SVN_FS_FS__MIN_DELTIFICATION_FORMAT 4
+
/* The 1.7-dev format, never released, that packed revprops into SQLite
revprops.db . */
#define SVN_FS_FS__PACKED_REVPROP_SQLITE_DEV_FORMAT 5
-/* The minimum format number that supports packed revprop shards. */
-#define SVN_FS_FS__MIN_PACKED_REVPROP_FORMAT SVN_FS_FS__PACKED_REVPROP_SQLITE_DEV_FORMAT
+/* The minimum format number that supports packed revprops. */
+#define SVN_FS_FS__MIN_PACKED_REVPROP_FORMAT 6
/* The minimum format number that supports a configuration file (fsfs.conf) */
#define SVN_FS_FS__MIN_CONFIG_FILE 4
@@ -161,6 +180,7 @@ typedef struct fs_fs_shared_txn_data_t
per file. On Windows apr implements the locking as per file handle
locks, so we don't have to add our own mutex for just in-process
synchronization. */
+/* Compare ../libsvn_subr/named_atomic.c:USE_THREAD_MUTEX */
#if APR_HAS_THREADS && !defined(WIN32)
#define SVN_FS_FS__USE_LOCK_MUTEX 1
#else
@@ -182,26 +202,35 @@ typedef struct fs_fs_shared_data_t
Access to this object is synchronised under TXN_LIST_LOCK. */
fs_fs_shared_txn_data_t *free_txn;
-#if APR_HAS_THREADS
/* A lock for intra-process synchronization when accessing the TXNS list. */
- apr_thread_mutex_t *txn_list_lock;
-#endif
-#if SVN_FS_FS__USE_LOCK_MUTEX
+ svn_mutex__t *txn_list_lock;
+
/* A lock for intra-process synchronization when grabbing the
repository write lock. */
- apr_thread_mutex_t *fs_write_lock;
+ svn_mutex__t *fs_write_lock;
/* A lock for intra-process synchronization when locking the
txn-current file. */
- apr_thread_mutex_t *txn_current_lock;
-#endif
+ svn_mutex__t *txn_current_lock;
/* The common pool, under which this object is allocated, subpools
of which are used to allocate the transaction objects. */
apr_pool_t *common_pool;
} fs_fs_shared_data_t;
-/* Private (non-shared) FSFS-specific data for each svn_fs_t object. */
+/* Data structure for the 1st level DAG node cache. */
+typedef struct fs_fs_dag_cache_t fs_fs_dag_cache_t;
+
+/* Key type for all caches that use revision + offset / counter as key. */
+typedef struct pair_cache_key_t
+{
+ svn_revnum_t revision;
+
+ apr_int64_t second;
+} pair_cache_key_t;
+
+/* Private (non-shared) FSFS-specific data for each svn_fs_t object.
+ Any caches in here may be NULL. */
typedef struct fs_fs_data_t
{
/* The format number of this FS. */
@@ -210,9 +239,6 @@ typedef struct fs_fs_data_t
layouts) or zero (for linear layouts). */
int max_files_per_dir;
- /* The uuid of this FS. */
- const char *uuid;
-
/* The revision that was youngest, last time we checked. */
svn_revnum_t youngest_rev_cache;
@@ -227,17 +253,40 @@ typedef struct fs_fs_data_t
(svn_fs_id_t *). (Not threadsafe.) */
svn_cache__t *rev_root_id_cache;
- /* DAG node cache for immutable nodes */
+ /* Caches native dag_node_t* instances and acts as a 1st level cache */
+ fs_fs_dag_cache_t *dag_node_cache;
+
+ /* DAG node cache for immutable nodes. Maps (revision, fspath)
+ to (dag_node_t *). This is the 2nd level cache for DAG nodes. */
svn_cache__t *rev_node_cache;
/* A cache of the contents of immutable directories; maps from
- unparsed FS ID to ###x. */
+ unparsed FS ID to a apr_hash_t * mapping (const char *) dirent
+ names to (svn_fs_dirent_t *). */
svn_cache__t *dir_cache;
/* Fulltext cache; currently only used with memcached. Maps from
- rep key to svn_string_t. */
+ rep key (revision/offset) to svn_stringbuf_t. */
svn_cache__t *fulltext_cache;
+ /* Access object to the atomics namespace used by revprop caching.
+ Will be NULL until the first access. */
+ svn_atomic_namespace__t *revprop_namespace;
+
+ /* Access object to the revprop "generation". Will be NULL until
+ the first access. */
+ svn_named_atomic__t *revprop_generation;
+
+ /* Access object to the revprop update timeout. Will be NULL until
+ the first access. */
+ svn_named_atomic__t *revprop_timeout;
+
+ /* Revision property cache. Maps from (rev,generation) to apr_hash_t. */
+ svn_cache__t *revprop_cache;
+
+ /* Node properties cache. Maps from rep key to apr_hash_t. */
+ svn_cache__t *properties_cache;
+
/* Pack manifest cache; a cache mapping (svn_revnum_t) shard number to
a manifest; and a manifest is a mapping from (svn_revnum_t) revision
number offset within a shard to (apr_off_t) byte-offset in the
@@ -247,13 +296,33 @@ typedef struct fs_fs_data_t
/* Cache for txdelta_window_t objects; the key is (revFilePath, offset) */
svn_cache__t *txdelta_window_cache;
+ /* Cache for combined windows as svn_stringbuf_t objects;
+ the key is (revFilePath, offset) */
+ svn_cache__t *combined_window_cache;
+
/* Cache for node_revision_t objects; the key is (revision, id offset) */
svn_cache__t *node_revision_cache;
+ /* Cache for change lists as APR arrays of change_t * objects; the key
+ is the revision */
+ svn_cache__t *changes_cache;
+
+ /* Cache for svn_mergeinfo_t objects; the key is a combination of
+ revision, inheritance flags and path. */
+ svn_cache__t *mergeinfo_cache;
+
+ /* Cache for presence of svn_mergeinfo_t on a noderev; the key is a
+ combination of revision, inheritance flags and path; value is "1"
+ if the node has mergeinfo, "0" if it doesn't. */
+ svn_cache__t *mergeinfo_existence_cache;
+
+ /* TRUE while the we hold a lock on the write lock file. */
+ svn_boolean_t has_write_lock;
+
/* If set, there are or have been more than one concurrent transaction */
svn_boolean_t concurrent_transactions;
- /* Tempoary cache for changed directories yet to be committed; maps from
+ /* Temporary cache for changed directories yet to be committed; maps from
unparsed FS ID to ###x. NULL outside transactions. */
svn_cache__t *txn_dir_cache;
@@ -266,12 +335,37 @@ typedef struct fs_fs_data_t
/* Thread-safe boolean */
svn_atomic_t rep_cache_db_opened;
- /* The oldest revision not in a pack file. */
+ /* The oldest revision not in a pack file. It also applies to revprops
+ * if revprop packing has been enabled by the FSFS format version. */
svn_revnum_t min_unpacked_rev;
/* Whether rep-sharing is supported by the filesystem
* and allowed by the configuration. */
svn_boolean_t rep_sharing_allowed;
+
+ /* File size limit in bytes up to which multiple revprops shall be packed
+ * into a single file. */
+ apr_int64_t revprop_pack_size;
+
+ /* Whether packed revprop files shall be compressed. */
+ svn_boolean_t compress_packed_revprops;
+
+ /* Whether directory nodes shall be deltified just like file nodes. */
+ svn_boolean_t deltify_directories;
+
+ /* Whether nodes properties shall be deltified. */
+ svn_boolean_t deltify_properties;
+
+ /* Restart deltification histories after each multiple of this value */
+ apr_int64_t max_deltification_walk;
+
+ /* Maximum number of length of the linear part at the top of the
+ * deltification history after which skip deltas will be used. */
+ apr_int64_t max_linear_deltification;
+
+ /* Pointer to svn_fs_open. */
+ svn_error_t *(*svn_fs_open_)(svn_fs_t **, const char *, apr_hash_t *,
+ apr_pool_t *);
} fs_fs_data_t;
diff --git a/subversion/libsvn_fs_fs/fs_fs.c b/subversion/libsvn_fs_fs/fs_fs.c
index 46f3bcd..8fb3a36 100644
--- a/subversion/libsvn_fs_fs/fs_fs.c
+++ b/subversion/libsvn_fs_fs/fs_fs.c
@@ -49,6 +49,7 @@
#include "svn_mergeinfo.h"
#include "svn_config.h"
#include "svn_ctype.h"
+#include "svn_version.h"
#include "fs.h"
#include "tree.h"
@@ -59,7 +60,10 @@
#include "rep-cache.h"
#include "temp_serializer.h"
+#include "private/svn_string_private.h"
#include "private/svn_fs_util.h"
+#include "private/svn_subr_private.h"
+#include "private/svn_delta_private.h"
#include "../libsvn_fs/fs-loader.h"
#include "svn_private_config.h"
@@ -71,13 +75,38 @@
/* The default maximum number of files per directory to store in the
rev and revprops directory. The number below is somewhat arbitrary,
- and can be overriden by defining the macro while compiling; the
+ and can be overridden by defining the macro while compiling; the
figure of 1000 is reasonable for VFAT filesystems, which are by far
the worst performers in this area. */
#ifndef SVN_FS_FS_DEFAULT_MAX_FILES_PER_DIR
#define SVN_FS_FS_DEFAULT_MAX_FILES_PER_DIR 1000
#endif
+/* Begin deltification after a node history exceeded this this limit.
+ Useful values are 4 to 64 with 16 being a good compromise between
+ computational overhead and repository size savings.
+ Should be a power of 2.
+ Values < 2 will result in standard skip-delta behavior. */
+#define SVN_FS_FS_MAX_LINEAR_DELTIFICATION 16
+
+/* Finding a deltification base takes operations proportional to the
+ number of changes being skipped. To prevent exploding runtime
+ during commits, limit the deltification range to this value.
+ Should be a power of 2 minus one.
+ Values < 1 disable deltification. */
+#define SVN_FS_FS_MAX_DELTIFICATION_WALK 1023
+
+/* Give writing processes 10 seconds to replace an existing revprop
+ file with a new one. After that time, we assume that the writing
+ process got aborted and that we have re-read revprops. */
+#define REVPROP_CHANGE_TIMEOUT (10 * 1000000)
+
+/* The following are names of atomics that will be used to communicate
+ * revprop updates across all processes on this machine. */
+#define ATOMIC_REVPROP_GENERATION "rev-prop-generation"
+#define ATOMIC_REVPROP_TIMEOUT "rev-prop-timeout"
+#define ATOMIC_REVPROP_NAMESPACE "rev-prop-atomics"
+
/* Following are defines that specify the textual elements of the
native filesystem directories and revision files. */
@@ -147,6 +176,15 @@ read_min_unpacked_rev(svn_revnum_t *min_unpacked_rev,
static svn_error_t *
update_min_unpacked_rev(svn_fs_t *fs, apr_pool_t *pool);
+static svn_error_t *
+get_youngest(svn_revnum_t *youngest_p, const char *fs_path, apr_pool_t *pool);
+
+static svn_error_t *
+verify_walker(representation_t *rep,
+ void *baton,
+ svn_fs_t *fs,
+ apr_pool_t *scratch_pool);
+
/* Pathname helper functions */
/* Return TRUE is REV is packed in FS, FALSE otherwise. */
@@ -162,13 +200,12 @@ is_packed_rev(svn_fs_t *fs, svn_revnum_t rev)
static svn_boolean_t
is_packed_revprop(svn_fs_t *fs, svn_revnum_t rev)
{
-#if 0
fs_fs_data_t *ffd = fs->fsap_data;
- return (rev < ffd->min_unpacked_revprop);
-#else
- return FALSE;
-#endif
+ /* rev 0 will not be packed */
+ return (rev < ffd->min_unpacked_rev)
+ && (rev != 0)
+ && (ffd->format >= SVN_FS_FS__MIN_PACKED_REVPROP_FORMAT);
}
static const char *
@@ -208,6 +245,12 @@ path_lock(svn_fs_t *fs, apr_pool_t *pool)
}
static const char *
+path_revprop_generation(svn_fs_t *fs, apr_pool_t *pool)
+{
+ return svn_dirent_join(fs->path, PATH_REVPROP_GENERATION, pool);
+}
+
+static const char *
path_rev_packed(svn_fs_t *fs, svn_revnum_t rev, const char *kind,
apr_pool_t *pool)
{
@@ -217,7 +260,8 @@ path_rev_packed(svn_fs_t *fs, svn_revnum_t rev, const char *kind,
assert(is_packed_rev(fs, rev));
return svn_dirent_join_many(pool, fs->path, PATH_REVS_DIR,
- apr_psprintf(pool, "%ld.pack",
+ apr_psprintf(pool,
+ "%ld" PATH_EXT_PACKED_SHARD,
rev / ffd->max_files_per_dir),
kind, NULL);
}
@@ -267,7 +311,7 @@ svn_fs_fs__path_rev_absolute(const char **path,
}
else
{
- *path = path_rev_packed(fs, rev, "pack", pool);
+ *path = path_rev_packed(fs, rev, PATH_PACKED, pool);
}
return SVN_NO_ERROR;
@@ -286,6 +330,18 @@ path_revprops_shard(svn_fs_t *fs, svn_revnum_t rev, apr_pool_t *pool)
}
static const char *
+path_revprops_pack_shard(svn_fs_t *fs, svn_revnum_t rev, apr_pool_t *pool)
+{
+ fs_fs_data_t *ffd = fs->fsap_data;
+
+ assert(ffd->max_files_per_dir);
+ return svn_dirent_join_many(pool, fs->path, PATH_REVPROPS_DIR,
+ apr_psprintf(pool, "%ld" PATH_EXT_PACKED_SHARD,
+ rev / ffd->max_files_per_dir),
+ NULL);
+}
+
+static const char *
path_revprops(svn_fs_t *fs, svn_revnum_t rev, apr_pool_t *pool)
{
fs_fs_data_t *ffd = fs->fsap_data;
@@ -311,6 +367,18 @@ path_txn_dir(svn_fs_t *fs, const char *txn_id, apr_pool_t *pool)
NULL);
}
+/* Return the name of the sha1->rep mapping file in transaction TXN_ID
+ * within FS for the given SHA1 checksum. Use POOL for allocations.
+ */
+static APR_INLINE const char *
+path_txn_sha1(svn_fs_t *fs, const char *txn_id, svn_checksum_t *sha1,
+ apr_pool_t *pool)
+{
+ return svn_dirent_join(path_txn_dir(fs, txn_id, pool),
+ svn_checksum_to_cstring(sha1, pool),
+ pool);
+}
+
static APR_INLINE const char *
path_txn_changes(svn_fs_t *fs, const char *txn_id, apr_pool_t *pool)
{
@@ -415,7 +483,7 @@ path_and_offset_of(apr_file_t *file, apr_pool_t *pool)
}
-
+
/* Functions for working with shared transaction data. */
/* Return the transaction object for transaction TXN_ID from the
@@ -509,26 +577,13 @@ with_txnlist_lock(svn_fs_t *fs,
const void *baton,
apr_pool_t *pool)
{
- svn_error_t *err;
-#if APR_HAS_THREADS
fs_fs_data_t *ffd = fs->fsap_data;
fs_fs_shared_data_t *ffsd = ffd->shared;
- apr_status_t apr_err;
-
- apr_err = apr_thread_mutex_lock(ffsd->txn_list_lock);
- if (apr_err)
- return svn_error_wrap_apr(apr_err, _("Can't grab FSFS txn list mutex"));
-#endif
-
- err = body(fs, baton, pool);
-#if APR_HAS_THREADS
- apr_err = apr_thread_mutex_unlock(ffsd->txn_list_lock);
- if (apr_err && !err)
- return svn_error_wrap_apr(apr_err, _("Can't ungrab FSFS txn list mutex"));
-#endif
+ SVN_MUTEX__WITH_LOCK(ffsd->txn_list_lock,
+ body(fs, baton, pool));
- return svn_error_trace(err);
+ return SVN_NO_ERROR;
}
@@ -553,60 +608,59 @@ get_lock_on_filesystem(const char *lock_filename,
return svn_error_trace(err);
}
+/* Reset the HAS_WRITE_LOCK member in the FFD given as BATON_VOID.
+ When registered with the pool holding the lock on the lock file,
+ this makes sure the flag gets reset just before we release the lock. */
+static apr_status_t
+reset_lock_flag(void *baton_void)
+{
+ fs_fs_data_t *ffd = baton_void;
+ ffd->has_write_lock = FALSE;
+ return APR_SUCCESS;
+}
+
/* Obtain a write lock on the file LOCK_FILENAME (protecting with
LOCK_MUTEX if APR is threaded) in a subpool of POOL, call BODY with
BATON and that subpool, destroy the subpool (releasing the write
- lock) and return what BODY returned. */
-static svn_error_t *
-with_some_lock(svn_fs_t *fs,
- svn_error_t *(*body)(void *baton,
- apr_pool_t *pool),
- void *baton,
- const char *lock_filename,
-#if SVN_FS_FS__USE_LOCK_MUTEX
- apr_thread_mutex_t *lock_mutex,
-#endif
- apr_pool_t *pool)
+ lock) and return what BODY returned. If IS_GLOBAL_LOCK is set,
+ set the HAS_WRITE_LOCK flag while we keep the write lock. */
+static svn_error_t *
+with_some_lock_file(svn_fs_t *fs,
+ svn_error_t *(*body)(void *baton,
+ apr_pool_t *pool),
+ void *baton,
+ const char *lock_filename,
+ svn_boolean_t is_global_lock,
+ apr_pool_t *pool)
{
apr_pool_t *subpool = svn_pool_create(pool);
- svn_error_t *err;
-
-#if SVN_FS_FS__USE_LOCK_MUTEX
- apr_status_t status;
-
- /* POSIX fcntl locks are per-process, so we need to serialize locks
- within the process. */
- status = apr_thread_mutex_lock(lock_mutex);
- if (status)
- return svn_error_wrap_apr(status,
- _("Can't grab FSFS mutex for '%s'"),
- lock_filename);
-#endif
-
- err = get_lock_on_filesystem(lock_filename, subpool);
+ svn_error_t *err = get_lock_on_filesystem(lock_filename, subpool);
if (!err)
{
fs_fs_data_t *ffd = fs->fsap_data;
+
+ if (is_global_lock)
+ {
+ /* set the "got the lock" flag and register reset function */
+ apr_pool_cleanup_register(subpool,
+ ffd,
+ reset_lock_flag,
+ apr_pool_cleanup_null);
+ ffd->has_write_lock = TRUE;
+ }
+
+ /* nobody else will modify the repo state
+ => read HEAD & pack info once */
if (ffd->format >= SVN_FS_FS__MIN_PACKED_FORMAT)
SVN_ERR(update_min_unpacked_rev(fs, pool));
-#if 0 /* Might be a good idea? */
SVN_ERR(get_youngest(&ffd->youngest_rev_cache, fs->path,
pool));
-#endif
err = body(baton, subpool);
}
svn_pool_destroy(subpool);
-#if SVN_FS_FS__USE_LOCK_MUTEX
- status = apr_thread_mutex_unlock(lock_mutex);
- if (status && !err)
- return svn_error_wrap_apr(status,
- _("Can't ungrab FSFS mutex for '%s'"),
- lock_filename);
-#endif
-
return svn_error_trace(err);
}
@@ -617,18 +671,16 @@ svn_fs_fs__with_write_lock(svn_fs_t *fs,
void *baton,
apr_pool_t *pool)
{
-#if SVN_FS_FS__USE_LOCK_MUTEX
fs_fs_data_t *ffd = fs->fsap_data;
fs_fs_shared_data_t *ffsd = ffd->shared;
- apr_thread_mutex_t *mutex = ffsd->fs_write_lock;
-#endif
- return with_some_lock(fs, body, baton,
- path_lock(fs, pool),
-#if SVN_FS_FS__USE_LOCK_MUTEX
- mutex,
-#endif
- pool);
+ SVN_MUTEX__WITH_LOCK(ffsd->fs_write_lock,
+ with_some_lock_file(fs, body, baton,
+ path_lock(fs, pool),
+ TRUE,
+ pool));
+
+ return SVN_NO_ERROR;
}
/* Run BODY (with BATON and POOL) while the txn-current file
@@ -640,18 +692,16 @@ with_txn_current_lock(svn_fs_t *fs,
void *baton,
apr_pool_t *pool)
{
-#if SVN_FS_FS__USE_LOCK_MUTEX
fs_fs_data_t *ffd = fs->fsap_data;
fs_fs_shared_data_t *ffsd = ffd->shared;
- apr_thread_mutex_t *mutex = ffsd->txn_current_lock;
-#endif
- return with_some_lock(fs, body, baton,
- path_txn_current_lock(fs, pool),
-#if SVN_FS_FS__USE_LOCK_MUTEX
- mutex,
-#endif
- pool);
+ SVN_MUTEX__WITH_LOCK(ffsd->txn_current_lock,
+ with_some_lock_file(fs, body, baton,
+ path_txn_current_lock(fs, pool),
+ FALSE,
+ pool));
+
+ return SVN_NO_ERROR;
}
/* A structure used by unlock_proto_rev() and unlock_proto_rev_body(),
@@ -829,7 +879,7 @@ get_writable_proto_rev_body(svn_fs_t *fs, const void *baton, apr_pool_t *pool)
err = svn_error_compose_create(
err,
unlock_proto_rev_list_locked(fs, txn_id, *lockcookie, pool));
-
+
*lockcookie = NULL;
}
@@ -899,25 +949,64 @@ get_file_offset(apr_off_t *offset_p, apr_file_t *file, apr_pool_t *pool)
}
-/* Check that BUF, a nul-terminated buffer of text from format file PATH,
+/* Check that BUF, a nul-terminated buffer of text from file PATH,
contains only digits at OFFSET and beyond, raising an error if not.
+ TITLE contains a user-visible description of the file, usually the
+ short file name.
Uses POOL for temporary allocation. */
static svn_error_t *
-check_format_file_buffer_numeric(const char *buf, apr_off_t offset,
- const char *path, apr_pool_t *pool)
+check_file_buffer_numeric(const char *buf, apr_off_t offset,
+ const char *path, const char *title,
+ apr_pool_t *pool)
{
const char *p;
for (p = buf + offset; *p; p++)
if (!svn_ctype_isdigit(*p))
return svn_error_createf(SVN_ERR_BAD_VERSION_FILE_FORMAT, NULL,
- _("Format file '%s' contains unexpected non-digit '%c' within '%s'"),
- svn_dirent_local_style(path, pool), *p, buf);
+ _("%s file '%s' contains unexpected non-digit '%c' within '%s'"),
+ title, svn_dirent_local_style(path, pool), *p, buf);
return SVN_NO_ERROR;
}
+/* Check that BUF, a nul-terminated buffer of text from format file PATH,
+ contains only digits at OFFSET and beyond, raising an error if not.
+
+ Uses POOL for temporary allocation. */
+static svn_error_t *
+check_format_file_buffer_numeric(const char *buf, apr_off_t offset,
+ const char *path, apr_pool_t *pool)
+{
+ return check_file_buffer_numeric(buf, offset, path, "Format", pool);
+}
+
+/* Return the error SVN_ERR_FS_UNSUPPORTED_FORMAT if FS's format
+ number is not the same as a format number supported by this
+ Subversion. */
+static svn_error_t *
+check_format(int format)
+{
+ /* Blacklist. These formats may be either younger or older than
+ SVN_FS_FS__FORMAT_NUMBER, but we don't support them. */
+ if (format == SVN_FS_FS__PACKED_REVPROP_SQLITE_DEV_FORMAT)
+ return svn_error_createf(SVN_ERR_FS_UNSUPPORTED_FORMAT, NULL,
+ _("Found format '%d', only created by "
+ "unreleased dev builds; see "
+ "http://subversion.apache.org"
+ "/docs/release-notes/1.7#revprop-packing"),
+ format);
+
+ /* We support all formats from 1-current simultaneously */
+ if (1 <= format && format <= SVN_FS_FS__FORMAT_NUMBER)
+ return SVN_NO_ERROR;
+
+ return svn_error_createf(SVN_ERR_FS_UNSUPPORTED_FORMAT, NULL,
+ _("Expected FS format between '1' and '%d'; found format '%d'"),
+ SVN_FS_FS__FORMAT_NUMBER, format);
+}
+
/* Read the format number and maximum number of files per directory
from PATH and return them in *PFORMAT and *MAX_FILES_PER_DIR
respectively.
@@ -931,12 +1020,12 @@ read_format(int *pformat, int *max_files_per_dir,
const char *path, apr_pool_t *pool)
{
svn_error_t *err;
- apr_file_t *file;
- char buf[80];
- apr_size_t len;
+ svn_stream_t *stream;
+ svn_stringbuf_t *content;
+ svn_stringbuf_t *buf;
+ svn_boolean_t eos = FALSE;
- err = svn_io_file_open(&file, path, APR_READ | APR_BUFFERED,
- APR_OS_DEFAULT, pool);
+ err = svn_stringbuf_from_file2(&content, path, pool);
if (err && APR_STATUS_IS_ENOENT(err->apr_err))
{
/* Treat an absent format file as format 1. Do not try to
@@ -954,62 +1043,57 @@ read_format(int *pformat, int *max_files_per_dir,
}
SVN_ERR(err);
- len = sizeof(buf);
- err = svn_io_read_length_line(file, buf, &len, pool);
- if (err && APR_STATUS_IS_EOF(err->apr_err))
+ stream = svn_stream_from_stringbuf(content, pool);
+ SVN_ERR(svn_stream_readline(stream, &buf, "\n", &eos, pool));
+ if (buf->len == 0 && eos)
{
/* Return a more useful error message. */
- svn_error_clear(err);
return svn_error_createf(SVN_ERR_BAD_VERSION_FILE_FORMAT, NULL,
_("Can't read first line of format file '%s'"),
svn_dirent_local_style(path, pool));
}
- SVN_ERR(err);
/* Check that the first line contains only digits. */
- SVN_ERR(check_format_file_buffer_numeric(buf, 0, path, pool));
- SVN_ERR(svn_cstring_atoi(pformat, buf));
+ SVN_ERR(check_format_file_buffer_numeric(buf->data, 0, path, pool));
+ SVN_ERR(svn_cstring_atoi(pformat, buf->data));
+
+ /* Check that we support this format at all */
+ SVN_ERR(check_format(*pformat));
/* Set the default values for anything that can be set via an option. */
*max_files_per_dir = 0;
/* Read any options. */
- while (1)
+ while (!eos)
{
- len = sizeof(buf);
- err = svn_io_read_length_line(file, buf, &len, pool);
- if (err && APR_STATUS_IS_EOF(err->apr_err))
- {
- /* No more options; that's okay. */
- svn_error_clear(err);
- break;
- }
- SVN_ERR(err);
+ SVN_ERR(svn_stream_readline(stream, &buf, "\n", &eos, pool));
+ if (buf->len == 0)
+ break;
if (*pformat >= SVN_FS_FS__MIN_LAYOUT_FORMAT_OPTION_FORMAT &&
- strncmp(buf, "layout ", 7) == 0)
+ strncmp(buf->data, "layout ", 7) == 0)
{
- if (strcmp(buf+7, "linear") == 0)
+ if (strcmp(buf->data + 7, "linear") == 0)
{
*max_files_per_dir = 0;
continue;
}
- if (strncmp(buf+7, "sharded ", 8) == 0)
+ if (strncmp(buf->data + 7, "sharded ", 8) == 0)
{
/* Check that the argument is numeric. */
- SVN_ERR(check_format_file_buffer_numeric(buf, 15, path, pool));
- SVN_ERR(svn_cstring_atoi(max_files_per_dir, buf + 15));
+ SVN_ERR(check_format_file_buffer_numeric(buf->data, 15, path, pool));
+ SVN_ERR(svn_cstring_atoi(max_files_per_dir, buf->data + 15));
continue;
}
}
return svn_error_createf(SVN_ERR_BAD_VERSION_FILE_FORMAT, NULL,
_("'%s' contains invalid filesystem format option '%s'"),
- svn_dirent_local_style(path, pool), buf);
+ svn_dirent_local_style(path, pool), buf->data);
}
- return svn_io_file_close(file, pool);
+ return SVN_NO_ERROR;
}
/* Write the format number and maximum number of files per directory
@@ -1061,31 +1145,6 @@ write_format(const char *path, int format, int max_files_per_dir,
return svn_io_set_file_read_only(path, FALSE, pool);
}
-/* Return the error SVN_ERR_FS_UNSUPPORTED_FORMAT if FS's format
- number is not the same as a format number supported by this
- Subversion. */
-static svn_error_t *
-check_format(int format)
-{
- /* Blacklist. These formats may be either younger or older than
- SVN_FS_FS__FORMAT_NUMBER, but we don't support them. */
- if (format == SVN_FS_FS__PACKED_REVPROP_SQLITE_DEV_FORMAT)
- return svn_error_createf(SVN_ERR_FS_UNSUPPORTED_FORMAT, NULL,
- _("Found format '%d', only created by "
- "unreleased dev builds; see "
- "http://subversion.apache.org"
- "/docs/release-notes/1.7#revprop-packing"),
- format);
-
- /* We support all formats from 1-current simultaneously */
- if (1 <= format && format <= SVN_FS_FS__FORMAT_NUMBER)
- return SVN_NO_ERROR;
-
- return svn_error_createf(SVN_ERR_FS_UNSUPPORTED_FORMAT, NULL,
- _("Expected FS format between '1' and '%d'; found format '%d'"),
- SVN_FS_FS__FORMAT_NUMBER, format);
-}
-
svn_boolean_t
svn_fs_fs__fs_supports_mergeinfo(svn_fs_t *fs)
{
@@ -1093,15 +1152,17 @@ svn_fs_fs__fs_supports_mergeinfo(svn_fs_t *fs)
return ffd->format >= SVN_FS_FS__MIN_MERGEINFO_FORMAT;
}
+/* Read the configuration information of the file system at FS_PATH
+ * and set the respective values in FFD. Use POOL for allocations.
+ */
static svn_error_t *
-read_config(svn_fs_t *fs,
+read_config(fs_fs_data_t *ffd,
+ const char *fs_path,
apr_pool_t *pool)
{
- fs_fs_data_t *ffd = fs->fsap_data;
-
- SVN_ERR(svn_config_read2(&ffd->config,
- svn_dirent_join(fs->path, PATH_CONFIG, pool),
- FALSE, FALSE, fs->pool));
+ SVN_ERR(svn_config_read3(&ffd->config,
+ svn_dirent_join(fs_path, PATH_CONFIG, pool),
+ FALSE, FALSE, FALSE, pool));
/* Initialize ffd->rep_sharing_allowed. */
if (ffd->format >= SVN_FS_FS__MIN_REP_SHARING_FORMAT)
@@ -1111,6 +1172,56 @@ read_config(svn_fs_t *fs,
else
ffd->rep_sharing_allowed = FALSE;
+ /* Initialize deltification settings in ffd. */
+ if (ffd->format >= SVN_FS_FS__MIN_DELTIFICATION_FORMAT)
+ {
+ SVN_ERR(svn_config_get_bool(ffd->config, &ffd->deltify_directories,
+ CONFIG_SECTION_DELTIFICATION,
+ CONFIG_OPTION_ENABLE_DIR_DELTIFICATION,
+ FALSE));
+ SVN_ERR(svn_config_get_bool(ffd->config, &ffd->deltify_properties,
+ CONFIG_SECTION_DELTIFICATION,
+ CONFIG_OPTION_ENABLE_PROPS_DELTIFICATION,
+ FALSE));
+ SVN_ERR(svn_config_get_int64(ffd->config, &ffd->max_deltification_walk,
+ CONFIG_SECTION_DELTIFICATION,
+ CONFIG_OPTION_MAX_DELTIFICATION_WALK,
+ SVN_FS_FS_MAX_DELTIFICATION_WALK));
+ SVN_ERR(svn_config_get_int64(ffd->config, &ffd->max_linear_deltification,
+ CONFIG_SECTION_DELTIFICATION,
+ CONFIG_OPTION_MAX_LINEAR_DELTIFICATION,
+ SVN_FS_FS_MAX_LINEAR_DELTIFICATION));
+ }
+ else
+ {
+ ffd->deltify_directories = FALSE;
+ ffd->deltify_properties = FALSE;
+ ffd->max_deltification_walk = SVN_FS_FS_MAX_DELTIFICATION_WALK;
+ ffd->max_linear_deltification = SVN_FS_FS_MAX_LINEAR_DELTIFICATION;
+ }
+
+ /* Initialize revprop packing settings in ffd. */
+ if (ffd->format >= SVN_FS_FS__MIN_PACKED_REVPROP_FORMAT)
+ {
+ SVN_ERR(svn_config_get_bool(ffd->config, &ffd->compress_packed_revprops,
+ CONFIG_SECTION_PACKED_REVPROPS,
+ CONFIG_OPTION_COMPRESS_PACKED_REVPROPS,
+ FALSE));
+ SVN_ERR(svn_config_get_int64(ffd->config, &ffd->revprop_pack_size,
+ CONFIG_SECTION_PACKED_REVPROPS,
+ CONFIG_OPTION_REVPROP_PACK_SIZE,
+ ffd->compress_packed_revprops
+ ? 0x100
+ : 0x40));
+
+ ffd->revprop_pack_size *= 1024;
+ }
+ else
+ {
+ ffd->revprop_pack_size = 0x10000;
+ ffd->compress_packed_revprops = FALSE;
+ }
+
return SVN_NO_ERROR;
}
@@ -1156,9 +1267,95 @@ write_config(svn_fs_t *fs,
"### The following parameter enables rep-sharing in the repository. It can" NL
"### be switched on and off at will, but for best space-saving results" NL
"### should be enabled consistently over the life of the repository." NL
+"### 'svnadmin verify' will check the rep-cache regardless of this setting." NL
"### rep-sharing is enabled by default." NL
"# " CONFIG_OPTION_ENABLE_REP_SHARING " = true" NL
-
+"" NL
+"[" CONFIG_SECTION_DELTIFICATION "]" NL
+"### To conserve space, the filesystem stores data as differences against" NL
+"### existing representations. This comes at a slight cost in performance," NL
+"### as calculating differences can increase commit times. Reading data" NL
+"### will also create higher CPU load and the data will be fragmented." NL
+"### Since deltification tends to save significant amounts of disk space," NL
+"### the overall I/O load can actually be lower." NL
+"###" NL
+"### The options in this section allow for tuning the deltification" NL
+"### strategy. Their effects on data size and server performance may vary" NL
+"### from one repository to another. Versions prior to 1.8 will ignore" NL
+"### this section." NL
+"###" NL
+"### The following parameter enables deltification for directories. It can" NL
+"### be switched on and off at will, but for best space-saving results" NL
+"### should be enabled consistently over the life of the repository." NL
+"### Repositories containing large directories will benefit greatly." NL
+"### In rarely read repositories, the I/O overhead may be significant as" NL
+"### cache hit rates will most likely be low" NL
+"### directory deltification is disabled by default." NL
+"# " CONFIG_OPTION_ENABLE_DIR_DELTIFICATION " = false" NL
+"###" NL
+"### The following parameter enables deltification for properties on files" NL
+"### and directories. Overall, this is a minor tuning option but can save" NL
+"### some disk space if you merge frequently or frequently change node" NL
+"### properties. You should not activate this if rep-sharing has been" NL
+"### disabled because this may result in a net increase in repository size." NL
+"### property deltification is disabled by default." NL
+"# " CONFIG_OPTION_ENABLE_PROPS_DELTIFICATION " = false" NL
+"###" NL
+"### During commit, the server may need to walk the whole change history of" NL
+"### of a given node to find a suitable deltification base. This linear" NL
+"### process can impact commit times, svnadmin load and similar operations." NL
+"### This setting limits the depth of the deltification history. If the" NL
+"### threshold has been reached, the node will be stored as fulltext and a" NL
+"### new deltification history begins." NL
+"### Note, this is unrelated to svn log." NL
+"### Very large values rarely provide significant additional savings but" NL
+"### can impact performance greatly - in particular if directory" NL
+"### deltification has been activated. Very small values may be useful in" NL
+"### repositories that are dominated by large, changing binaries." NL
+"### Should be a power of two minus 1. A value of 0 will effectively" NL
+"### disable deltification." NL
+"### For 1.8, the default value is 1023; earlier versions have no limit." NL
+"# " CONFIG_OPTION_MAX_DELTIFICATION_WALK " = 1023" NL
+"###" NL
+"### The skip-delta scheme used by FSFS tends to repeatably store redundant" NL
+"### delta information where a simple delta against the latest version is" NL
+"### often smaller. By default, 1.8+ will therefore use skip deltas only" NL
+"### after the linear chain of deltas has grown beyond the threshold" NL
+"### specified by this setting." NL
+"### Values up to 64 can result in some reduction in repository size for" NL
+"### the cost of quickly increasing I/O and CPU costs. Similarly, smaller" NL
+"### numbers can reduce those costs at the cost of more disk space. For" NL
+"### rarely read repositories or those containing larger binaries, this may" NL
+"### present a better trade-off." NL
+"### Should be a power of two. A value of 1 or smaller will cause the" NL
+"### exclusive use of skip-deltas (as in pre-1.8)." NL
+"### For 1.8, the default value is 16; earlier versions use 1." NL
+"# " CONFIG_OPTION_MAX_LINEAR_DELTIFICATION " = 16" NL
+"" NL
+"[" CONFIG_SECTION_PACKED_REVPROPS "]" NL
+"### This parameter controls the size (in kBytes) of packed revprop files." NL
+"### Revprops of consecutive revisions will be concatenated into a single" NL
+"### file up to but not exceeding the threshold given here. However, each" NL
+"### pack file may be much smaller and revprops of a single revision may be" NL
+"### much larger than the limit set here. The threshold will be applied" NL
+"### before optional compression takes place." NL
+"### Large values will reduce disk space usage at the expense of increased" NL
+"### latency and CPU usage reading and changing individual revprops. They" NL
+"### become an advantage when revprop caching has been enabled because a" NL
+"### lot of data can be read in one go. Values smaller than 4 kByte will" NL
+"### not improve latency any further and quickly render revprop packing" NL
+"### ineffective." NL
+"### revprop-pack-size is 64 kBytes by default for non-compressed revprop" NL
+"### pack files and 256 kBytes when compression has been enabled." NL
+"# " CONFIG_OPTION_REVPROP_PACK_SIZE " = 64" NL
+"###" NL
+"### To save disk space, packed revprop files may be compressed. Standard" NL
+"### revprops tend to allow for very effective compression. Reading and" NL
+"### even more so writing, become significantly more CPU intensive. With" NL
+"### revprop caching enabled, the overhead can be offset by reduced I/O" NL
+"### unless you often modify revprops after packing." NL
+"### Compressing packed revprops is disabled by default." NL
+"# " CONFIG_OPTION_COMPRESS_PACKED_REVPROPS " = false" NL
;
#undef NL
return svn_io_file_create(svn_dirent_join(fs->path, PATH_CONFIG, pool),
@@ -1196,9 +1393,6 @@ update_min_unpacked_rev(svn_fs_t *fs, apr_pool_t *pool)
pool);
}
-static svn_error_t *
-get_youngest(svn_revnum_t *youngest_p, const char *fs_path, apr_pool_t *pool);
-
svn_error_t *
svn_fs_fs__open(svn_fs_t *fs, const char *path, apr_pool_t *pool)
{
@@ -1213,7 +1407,6 @@ svn_fs_fs__open(svn_fs_t *fs, const char *path, apr_pool_t *pool)
/* Read the FS format number. */
SVN_ERR(read_format(&format, &max_files_per_dir,
path_format(fs, pool), pool));
- SVN_ERR(check_format(format));
/* Now we've got a format number no matter what. */
ffd->format = format;
@@ -1225,7 +1418,7 @@ svn_fs_fs__open(svn_fs_t *fs, const char *path, apr_pool_t *pool)
limit = sizeof(buf);
SVN_ERR(svn_io_read_length_line(uuid_file, buf, &limit, pool));
- ffd->uuid = apr_pstrdup(fs->pool, buf);
+ fs->uuid = apr_pstrdup(fs->pool, buf);
SVN_ERR(svn_io_file_close(uuid_file, pool));
@@ -1234,7 +1427,7 @@ svn_fs_fs__open(svn_fs_t *fs, const char *path, apr_pool_t *pool)
SVN_ERR(update_min_unpacked_rev(fs, pool));
/* Read the configuration file. */
- SVN_ERR(read_config(fs, pool));
+ SVN_ERR(read_config(ffd, fs->path, pool));
return get_youngest(&(ffd->youngest_rev_cache), path, pool);
}
@@ -1254,6 +1447,114 @@ create_file_ignore_eexist(const char *file,
return svn_error_trace(err);
}
+/* forward declarations */
+
+static svn_error_t *
+pack_revprops_shard(const char *pack_file_dir,
+ const char *shard_path,
+ apr_int64_t shard,
+ int max_files_per_dir,
+ apr_off_t max_pack_size,
+ int compression_level,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool);
+
+static svn_error_t *
+delete_revprops_shard(const char *shard_path,
+ apr_int64_t shard,
+ int max_files_per_dir,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool);
+
+/* In the filesystem FS, pack all revprop shards up to min_unpacked_rev.
+ *
+ * NOTE: Keep the old non-packed shards around until after the format bump.
+ * Otherwise, re-running upgrade will drop the packed revprop shard but
+ * have no unpacked data anymore. Call upgrade_cleanup_pack_revprops after
+ * the bump.
+ *
+ * Use SCRATCH_POOL for temporary allocations.
+ */
+static svn_error_t *
+upgrade_pack_revprops(svn_fs_t *fs,
+ apr_pool_t *scratch_pool)
+{
+ fs_fs_data_t *ffd = fs->fsap_data;
+ const char *revprops_shard_path;
+ const char *revprops_pack_file_dir;
+ apr_int64_t shard;
+ apr_int64_t first_unpacked_shard
+ = ffd->min_unpacked_rev / ffd->max_files_per_dir;
+
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ const char *revsprops_dir = svn_dirent_join(fs->path, PATH_REVPROPS_DIR,
+ scratch_pool);
+ int compression_level = ffd->compress_packed_revprops
+ ? SVN_DELTA_COMPRESSION_LEVEL_DEFAULT
+ : SVN_DELTA_COMPRESSION_LEVEL_NONE;
+
+ /* first, pack all revprops shards to match the packed revision shards */
+ for (shard = 0; shard < first_unpacked_shard; ++shard)
+ {
+ revprops_pack_file_dir = svn_dirent_join(revsprops_dir,
+ apr_psprintf(iterpool,
+ "%" APR_INT64_T_FMT PATH_EXT_PACKED_SHARD,
+ shard),
+ iterpool);
+ revprops_shard_path = svn_dirent_join(revsprops_dir,
+ apr_psprintf(iterpool, "%" APR_INT64_T_FMT, shard),
+ iterpool);
+
+ SVN_ERR(pack_revprops_shard(revprops_pack_file_dir, revprops_shard_path,
+ shard, ffd->max_files_per_dir,
+ (int)(0.9 * ffd->revprop_pack_size),
+ compression_level,
+ NULL, NULL, iterpool));
+ svn_pool_clear(iterpool);
+ }
+
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+/* In the filesystem FS, remove all non-packed revprop shards up to
+ * min_unpacked_rev. Use SCRATCH_POOL for temporary allocations.
+ * See upgrade_pack_revprops for more info.
+ */
+static svn_error_t *
+upgrade_cleanup_pack_revprops(svn_fs_t *fs,
+ apr_pool_t *scratch_pool)
+{
+ fs_fs_data_t *ffd = fs->fsap_data;
+ const char *revprops_shard_path;
+ apr_int64_t shard;
+ apr_int64_t first_unpacked_shard
+ = ffd->min_unpacked_rev / ffd->max_files_per_dir;
+
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ const char *revsprops_dir = svn_dirent_join(fs->path, PATH_REVPROPS_DIR,
+ scratch_pool);
+
+ /* delete the non-packed revprops shards afterwards */
+ for (shard = 0; shard < first_unpacked_shard; ++shard)
+ {
+ revprops_shard_path = svn_dirent_join(revsprops_dir,
+ apr_psprintf(iterpool, "%" APR_INT64_T_FMT, shard),
+ iterpool);
+ SVN_ERR(delete_revprops_shard(revprops_shard_path,
+ shard, ffd->max_files_per_dir,
+ NULL, NULL, iterpool));
+ svn_pool_clear(iterpool);
+ }
+
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
static svn_error_t *
upgrade_body(void *baton, apr_pool_t *pool)
{
@@ -1261,10 +1562,10 @@ upgrade_body(void *baton, apr_pool_t *pool)
int format, max_files_per_dir;
const char *format_path = path_format(fs, pool);
svn_node_kind_t kind;
+ svn_boolean_t needs_revprop_shard_cleanup = FALSE;
/* Read the FS format number and max-files-per-dir setting. */
SVN_ERR(read_format(&format, &max_files_per_dir, format_path, pool));
- SVN_ERR(check_format(format));
/* If the config file does not exist, create one. */
SVN_ERR(svn_io_check_path(svn_dirent_join(fs->path, PATH_CONFIG, pool),
@@ -1312,9 +1613,28 @@ upgrade_body(void *baton, apr_pool_t *pool)
if (format < SVN_FS_FS__MIN_PACKED_FORMAT)
SVN_ERR(svn_io_file_create(path_min_unpacked_rev(fs, pool), "0\n", pool));
+ /* If the file system supports revision packing but not revprop packing
+ *and* the FS has been sharded, pack the revprops up to the point that
+ revision data has been packed. However, keep the non-packed revprop
+ files around until after the format bump */
+ if ( format >= SVN_FS_FS__MIN_PACKED_FORMAT
+ && format < SVN_FS_FS__MIN_PACKED_REVPROP_FORMAT
+ && max_files_per_dir > 0)
+ {
+ needs_revprop_shard_cleanup = TRUE;
+ SVN_ERR(upgrade_pack_revprops(fs, pool));
+ }
+
/* Bump the format file. */
- return write_format(format_path, SVN_FS_FS__FORMAT_NUMBER, max_files_per_dir,
- TRUE, pool);
+ SVN_ERR(write_format(format_path, SVN_FS_FS__FORMAT_NUMBER,
+ max_files_per_dir, TRUE, pool));
+
+ /* Now, it is safe to remove the redundant revprop files. */
+ if (needs_revprop_shard_cleanup)
+ SVN_ERR(upgrade_cleanup_pack_revprops(fs, pool));
+
+ /* Done */
+ return SVN_NO_ERROR;
}
@@ -1325,7 +1645,7 @@ svn_fs_fs__upgrade(svn_fs_t *fs, apr_pool_t *pool)
}
-/* SVN_ERR-like macros for dealing with recoverable errors on mutable files
+/* Functions for dealing with recoverable errors on mutable files
*
* Revprops, current, and txn-current files are mutable; that is, they
* change as part of normal fsfs operation, in constrat to revs files, or
@@ -1358,94 +1678,82 @@ svn_fs_fs__upgrade(svn_fs_t *fs, apr_pool_t *pool)
*
** Solution
*
- * Wrap opens and reads of such files with RETRY_RECOVERABLE and
- * closes with IGNORE_RECOVERABLE. Call these macros within a loop of
- * RECOVERABLE_RETRY_COUNT iterations (though, realistically, the
- * second try will succeed). Make sure you put a break statement
- * after the close, at the end of your loop. Immediately after your
- * loop, return err if err.
- *
- * You must initialize err to SVN_NO_ERROR and filehandle to NULL, as
- * these macros do not.
+ * Try open and read of such files in try_stringbuf_from_file(). Call
+ * this function within a loop of RECOVERABLE_RETRY_COUNT iterations
+ * (though, realistically, the second try will succeed).
*/
#define RECOVERABLE_RETRY_COUNT 10
+/* Read the file at PATH and return its content in *CONTENT. *CONTENT will
+ * not be modified unless the whole file was read successfully.
+ *
+ * ESTALE, EIO and ENOENT will not cause this function to return an error
+ * unless LAST_ATTEMPT has been set. If MISSING is not NULL, indicate
+ * missing files (ENOENT) there.
+ *
+ * Use POOL for allocations.
+ */
+static svn_error_t *
+try_stringbuf_from_file(svn_stringbuf_t **content,
+ svn_boolean_t *missing,
+ const char *path,
+ svn_boolean_t last_attempt,
+ apr_pool_t *pool)
+{
+ svn_error_t *err = svn_stringbuf_from_file2(content, path, pool);
+ if (missing)
+ *missing = FALSE;
+
+ if (err)
+ {
+ *content = NULL;
+
+ if (APR_STATUS_IS_ENOENT(err->apr_err))
+ {
+ if (!last_attempt)
+ {
+ svn_error_clear(err);
+ if (missing)
+ *missing = TRUE;
+ return SVN_NO_ERROR;
+ }
+ }
#ifdef ESTALE
-/* Do not use do-while due to the embedded 'continue'. */
-#define RETRY_RECOVERABLE(err, filehandle, expr) \
- if (1) { \
- svn_error_clear(err); \
- err = (expr); \
- if (err) \
- { \
- apr_status_t _e = APR_TO_OS_ERROR(err->apr_err); \
- if ((_e == ESTALE) || (_e == EIO) || (_e == ENOENT)) { \
- if (NULL != filehandle) \
- (void)apr_file_close(filehandle); \
- continue; \
- } \
- return svn_error_trace(err); \
- } \
- } else
-#define IGNORE_RECOVERABLE(err, expr) \
- if (1) { \
- svn_error_clear(err); \
- err = (expr); \
- if (err) \
- { \
- apr_status_t _e = APR_TO_OS_ERROR(err->apr_err); \
- if ((_e != ESTALE) && (_e != EIO)) \
- return svn_error_trace(err); \
- } \
- } else
-#else
-#define RETRY_RECOVERABLE(err, filehandle, expr) SVN_ERR(expr)
-#define IGNORE_RECOVERABLE(err, expr) SVN_ERR(expr)
+ else if (APR_TO_OS_ERROR(err->apr_err) == ESTALE
+ || APR_TO_OS_ERROR(err->apr_err) == EIO)
+ {
+ if (!last_attempt)
+ {
+ svn_error_clear(err);
+ return SVN_NO_ERROR;
+ }
+ }
#endif
+ }
-/* Long enough to hold: "<svn_revnum_t> <node id> <copy id>\0"
- * 19 bytes for svn_revnum_t (room for 32 or 64 bit values)
- * + 2 spaces
- * + 26 bytes for each id (these are actually unbounded, so we just
- * have to pick something; 2^64 is 13 bytes in base-36)
- * + 1 terminating null
- */
-#define CURRENT_BUF_LEN 48
+ return svn_error_trace(err);
+}
/* Read the 'current' file FNAME and store the contents in *BUF.
Allocations are performed in POOL. */
static svn_error_t *
-read_current(const char *fname, char **buf, apr_pool_t *pool)
+read_content(svn_stringbuf_t **content, const char *fname, apr_pool_t *pool)
{
- apr_file_t *revision_file = NULL;
- apr_size_t len;
int i;
- svn_error_t *err = SVN_NO_ERROR;
- apr_pool_t *iterpool;
-
- *buf = apr_palloc(pool, CURRENT_BUF_LEN);
- iterpool = svn_pool_create(pool);
- for (i = 0; i < RECOVERABLE_RETRY_COUNT; i++)
- {
- svn_pool_clear(iterpool);
+ *content = NULL;
- RETRY_RECOVERABLE(err, revision_file,
- svn_io_file_open(&revision_file, fname,
- APR_READ | APR_BUFFERED,
- APR_OS_DEFAULT, iterpool));
-
- len = CURRENT_BUF_LEN;
- RETRY_RECOVERABLE(err, revision_file,
- svn_io_read_length_line(revision_file,
- *buf, &len, iterpool));
- IGNORE_RECOVERABLE(err, svn_io_file_close(revision_file, iterpool));
+ for (i = 0; !*content && (i < RECOVERABLE_RETRY_COUNT); ++i)
+ SVN_ERR(try_stringbuf_from_file(content, NULL,
+ fname, i + 1 < RECOVERABLE_RETRY_COUNT,
+ pool));
- break;
- }
- svn_pool_destroy(iterpool);
+ if (!*content)
+ return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
+ _("Can't read '%s'"),
+ svn_dirent_local_style(fname, pool));
- return svn_error_trace(err);
+ return SVN_NO_ERROR;
}
/* Find the youngest revision in a repository at path FS_PATH and
@@ -1456,248 +1764,15 @@ get_youngest(svn_revnum_t *youngest_p,
const char *fs_path,
apr_pool_t *pool)
{
- char *buf;
-
- SVN_ERR(read_current(svn_dirent_join(fs_path, PATH_CURRENT, pool),
- &buf, pool));
+ svn_stringbuf_t *buf;
+ SVN_ERR(read_content(&buf, svn_dirent_join(fs_path, PATH_CURRENT, pool),
+ pool));
- *youngest_p = SVN_STR_TO_REV(buf);
+ *youngest_p = SVN_STR_TO_REV(buf->data);
return SVN_NO_ERROR;
}
-svn_error_t *
-svn_fs_fs__hotcopy(const char *src_path,
- const char *dst_path,
- apr_pool_t *pool)
-{
- const char *src_subdir, *dst_subdir;
- svn_revnum_t youngest, rev, min_unpacked_rev;
- apr_pool_t *iterpool;
- svn_node_kind_t kind;
- int format, max_files_per_dir;
-
- /* Check format to be sure we know how to hotcopy this FS. */
- SVN_ERR(read_format(&format, &max_files_per_dir,
- svn_dirent_join(src_path, PATH_FORMAT, pool),
- pool));
- SVN_ERR(check_format(format));
-
- /* Try to copy the config.
- *
- * ### We try copying the config file before doing anything else,
- * ### because higher layers will abort the hotcopy if we throw
- * ### an error from this function, and that renders the hotcopy
- * ### unusable anyway. */
- if (format >= SVN_FS_FS__MIN_CONFIG_FILE)
- {
- svn_error_t *err;
-
- err = svn_io_dir_file_copy(src_path, dst_path, PATH_CONFIG, pool);
- if (err)
- {
- if (APR_STATUS_IS_ENOENT(err->apr_err))
- {
- /* 1.6.0 to 1.6.11 did not copy the configuration file during
- * hotcopy. So if we're hotcopying a repository which has been
- * created as a hotcopy itself, it's possible that fsfs.conf
- * does not exist. Ask the user to re-create it.
- *
- * ### It would be nice to make this a non-fatal error,
- * ### but this function does not get an svn_fs_t object
- * ### so we have no way of just printing a warning via
- * ### the fs->warning() callback. */
-
- const char *msg;
- const char *src_abspath;
- const char *dst_abspath;
- const char *config_relpath;
- svn_error_t *err2;
-
- config_relpath = svn_dirent_join(src_path, PATH_CONFIG, pool);
- err2 = svn_dirent_get_absolute(&src_abspath, src_path, pool);
- if (err2)
- return svn_error_trace(svn_error_compose_create(err, err2));
- err2 = svn_dirent_get_absolute(&dst_abspath, dst_path, pool);
- if (err2)
- return svn_error_trace(svn_error_compose_create(err, err2));
-
- /* ### hack: strip off the 'db/' directory from paths so
- * ### they make sense to the user */
- src_abspath = svn_dirent_dirname(src_abspath, pool);
- dst_abspath = svn_dirent_dirname(dst_abspath, pool);
-
- msg = apr_psprintf(pool,
- _("Failed to create hotcopy at '%s'. "
- "The file '%s' is missing from the source "
- "repository. Please create this file, for "
- "instance by running 'svnadmin upgrade %s'"),
- dst_abspath, config_relpath, src_abspath);
- return svn_error_quick_wrap(err, msg);
- }
- else
- return svn_error_trace(err);
- }
- }
-
- /* Copy the 'current' file. */
- SVN_ERR(svn_io_dir_file_copy(src_path, dst_path, PATH_CURRENT, pool));
-
- /* Copy the uuid. */
- SVN_ERR(svn_io_dir_file_copy(src_path, dst_path, PATH_UUID, pool));
-
- /* Copy the rep cache before copying the rev files to make sure all
- cached references will be present in the copy. */
- src_subdir = svn_dirent_join(src_path, REP_CACHE_DB_NAME, pool);
- dst_subdir = svn_dirent_join(dst_path, REP_CACHE_DB_NAME, pool);
- SVN_ERR(svn_io_check_path(src_subdir, &kind, pool));
- if (kind == svn_node_file)
- SVN_ERR(svn_sqlite__hotcopy(src_subdir, dst_subdir, pool));
-
- /* Copy the min unpacked rev, and read its value. */
- if (format >= SVN_FS_FS__MIN_PACKED_FORMAT)
- {
- const char *min_unpacked_rev_path;
- min_unpacked_rev_path = svn_dirent_join(src_path, PATH_MIN_UNPACKED_REV,
- pool);
-
- SVN_ERR(svn_io_dir_file_copy(src_path, dst_path, PATH_MIN_UNPACKED_REV,
- pool));
- SVN_ERR(read_min_unpacked_rev(&min_unpacked_rev, min_unpacked_rev_path,
- pool));
- }
- else
- {
- min_unpacked_rev = 0;
- }
-
- /* Find the youngest revision from this 'current' file. */
- SVN_ERR(get_youngest(&youngest, dst_path, pool));
-
- /* Copy the necessary rev files. */
- src_subdir = svn_dirent_join(src_path, PATH_REVS_DIR, pool);
- dst_subdir = svn_dirent_join(dst_path, PATH_REVS_DIR, pool);
-
- SVN_ERR(svn_io_make_dir_recursively(dst_subdir, pool));
-
- iterpool = svn_pool_create(pool);
- /* First, copy packed shards. */
- for (rev = 0; rev < min_unpacked_rev; rev += max_files_per_dir)
- {
- const char *packed_shard = apr_psprintf(iterpool, "%ld.pack",
- rev / max_files_per_dir);
- const char *src_subdir_packed_shard;
- src_subdir_packed_shard = svn_dirent_join(src_subdir, packed_shard,
- iterpool);
-
- SVN_ERR(svn_io_copy_dir_recursively(src_subdir_packed_shard,
- dst_subdir, packed_shard,
- TRUE /* copy_perms */,
- NULL /* cancel_func */, NULL,
- iterpool));
- svn_pool_clear(iterpool);
- }
-
- /* Then, copy non-packed shards. */
- SVN_ERR_ASSERT(rev == min_unpacked_rev);
- for (; rev <= youngest; rev++)
- {
- const char *src_subdir_shard = src_subdir,
- *dst_subdir_shard = dst_subdir;
-
- if (max_files_per_dir)
- {
- const char *shard = apr_psprintf(iterpool, "%ld",
- rev / max_files_per_dir);
- src_subdir_shard = svn_dirent_join(src_subdir, shard, iterpool);
- dst_subdir_shard = svn_dirent_join(dst_subdir, shard, iterpool);
-
- if (rev % max_files_per_dir == 0)
- {
- SVN_ERR(svn_io_dir_make(dst_subdir_shard, APR_OS_DEFAULT,
- iterpool));
- SVN_ERR(svn_io_copy_perms(dst_subdir, dst_subdir_shard,
- iterpool));
- }
- }
-
- SVN_ERR(svn_io_dir_file_copy(src_subdir_shard, dst_subdir_shard,
- apr_psprintf(iterpool, "%ld", rev),
- iterpool));
- svn_pool_clear(iterpool);
- }
-
- /* Copy the necessary revprop files. */
- src_subdir = svn_dirent_join(src_path, PATH_REVPROPS_DIR, pool);
- dst_subdir = svn_dirent_join(dst_path, PATH_REVPROPS_DIR, pool);
-
- SVN_ERR(svn_io_make_dir_recursively(dst_subdir, pool));
-
- for (rev = 0; rev <= youngest; rev++)
- {
- const char *src_subdir_shard = src_subdir,
- *dst_subdir_shard = dst_subdir;
-
- svn_pool_clear(iterpool);
-
- if (max_files_per_dir)
- {
- const char *shard = apr_psprintf(iterpool, "%ld",
- rev / max_files_per_dir);
- src_subdir_shard = svn_dirent_join(src_subdir, shard, iterpool);
- dst_subdir_shard = svn_dirent_join(dst_subdir, shard, iterpool);
-
- if (rev % max_files_per_dir == 0)
- {
- SVN_ERR(svn_io_dir_make(dst_subdir_shard, APR_OS_DEFAULT,
- iterpool));
- SVN_ERR(svn_io_copy_perms(dst_subdir, dst_subdir_shard,
- iterpool));
- }
- }
-
- SVN_ERR(svn_io_dir_file_copy(src_subdir_shard, dst_subdir_shard,
- apr_psprintf(iterpool, "%ld", rev),
- iterpool));
- }
-
- svn_pool_destroy(iterpool);
-
- /* Make an empty transactions directory for now. Eventually some
- method of copying in progress transactions will need to be
- developed.*/
- dst_subdir = svn_dirent_join(dst_path, PATH_TXNS_DIR, pool);
- SVN_ERR(svn_io_make_dir_recursively(dst_subdir, pool));
- if (format >= SVN_FS_FS__MIN_PROTOREVS_DIR_FORMAT)
- {
- dst_subdir = svn_dirent_join(dst_path, PATH_TXN_PROTOS_DIR, pool);
- SVN_ERR(svn_io_make_dir_recursively(dst_subdir, pool));
- }
-
- /* Now copy the locks tree. */
- src_subdir = svn_dirent_join(src_path, PATH_LOCKS_DIR, pool);
- SVN_ERR(svn_io_check_path(src_subdir, &kind, pool));
- if (kind == svn_node_dir)
- SVN_ERR(svn_io_copy_dir_recursively(src_subdir, dst_path,
- PATH_LOCKS_DIR, TRUE, NULL,
- NULL, pool));
-
- /* Now copy the node-origins cache tree. */
- src_subdir = svn_dirent_join(src_path, PATH_NODE_ORIGINS_DIR, pool);
- SVN_ERR(svn_io_check_path(src_subdir, &kind, pool));
- if (kind == svn_node_dir)
- SVN_ERR(svn_io_copy_dir_recursively(src_subdir, dst_path,
- PATH_NODE_ORIGINS_DIR, TRUE, NULL,
- NULL, pool));
-
- /* Copy the txn-current file. */
- if (format >= SVN_FS_FS__MIN_TXN_CURRENT_FORMAT)
- SVN_ERR(svn_io_dir_file_copy(src_path, dst_path, PATH_TXN_CURRENT, pool));
-
- /* Hotcopied FS is complete. Stamp it with a format file. */
- return write_format(svn_dirent_join(dst_path, PATH_FORMAT, pool),
- format, max_files_per_dir, FALSE, pool);
-}
svn_error_t *
svn_fs_fs__youngest_rev(svn_revnum_t *youngest_p,
@@ -1766,7 +1841,7 @@ static svn_error_t * read_header_block(apr_hash_t **headers,
/* header_str is safely in our pool, so we can use bits of it as
key and value. */
- apr_hash_set(*headers, name, APR_HASH_KEY_STRING, value);
+ svn_hash_sets(*headers, name, value);
}
return SVN_NO_ERROR;
@@ -1811,6 +1886,16 @@ ensure_revision_exists(svn_fs_t *fs,
_("No such revision %ld"), rev);
}
+svn_error_t *
+svn_fs_fs__revision_exists(svn_revnum_t rev,
+ svn_fs_t *fs,
+ apr_pool_t *pool)
+{
+ /* Different order of parameters. */
+ SVN_ERR(ensure_revision_exists(fs, rev, pool));
+ return SVN_NO_ERROR;
+}
+
/* Open the correct revision file for REV. If the filesystem FS has
been packed, *FILE will be set to the packed file; otherwise, set *FILE
to the revision file for REV. Return SVN_ERR_FS_NO_SUCH_REVISION if the
@@ -1842,22 +1927,30 @@ open_pack_or_rev_file(apr_file_t **file,
err = svn_io_file_open(file, path,
APR_READ | APR_BUFFERED, APR_OS_DEFAULT, pool);
- if (err && APR_STATUS_IS_ENOENT(err->apr_err)
- && ffd->format >= SVN_FS_FS__MIN_PACKED_FORMAT)
+ if (err && APR_STATUS_IS_ENOENT(err->apr_err))
{
- /* Could not open the file. This may happen if the
- * file once existed but got packed later. */
- svn_error_clear(err);
+ if (ffd->format >= SVN_FS_FS__MIN_PACKED_FORMAT)
+ {
+ /* Could not open the file. This may happen if the
+ * file once existed but got packed later. */
+ svn_error_clear(err);
- /* if that was our 2nd attempt, leave it at that. */
- if (retry)
- return svn_error_createf(SVN_ERR_FS_NO_SUCH_REVISION, NULL,
- _("No such revision %ld"), rev);
+ /* if that was our 2nd attempt, leave it at that. */
+ if (retry)
+ return svn_error_createf(SVN_ERR_FS_NO_SUCH_REVISION, NULL,
+ _("No such revision %ld"), rev);
- /* We failed for the first time. Refresh cache & retry. */
- SVN_ERR(update_min_unpacked_rev(fs, pool));
+ /* We failed for the first time. Refresh cache & retry. */
+ SVN_ERR(update_min_unpacked_rev(fs, pool));
- retry = TRUE;
+ retry = TRUE;
+ }
+ else
+ {
+ svn_error_clear(err);
+ return svn_error_createf(SVN_ERR_FS_NO_SUCH_REVISION, NULL,
+ _("No such revision %ld"), rev);
+ }
}
else
{
@@ -1869,6 +1962,41 @@ open_pack_or_rev_file(apr_file_t **file,
return svn_error_trace(err);
}
+/* Reads a line from STREAM and converts it to a 64 bit integer to be
+ * returned in *RESULT. If we encounter eof, set *HIT_EOF and leave
+ * *RESULT unchanged. If HIT_EOF is NULL, EOF causes an "corrupt FS"
+ * error return.
+ * SCRATCH_POOL is used for temporary allocations.
+ */
+static svn_error_t *
+read_number_from_stream(apr_int64_t *result,
+ svn_boolean_t *hit_eof,
+ svn_stream_t *stream,
+ apr_pool_t *scratch_pool)
+{
+ svn_stringbuf_t *sb;
+ svn_boolean_t eof;
+ svn_error_t *err;
+
+ SVN_ERR(svn_stream_readline(stream, &sb, "\n", &eof, scratch_pool));
+ if (hit_eof)
+ *hit_eof = eof;
+ else
+ if (eof)
+ return svn_error_create(SVN_ERR_FS_CORRUPT, NULL, _("Unexpected EOF"));
+
+ if (!eof)
+ {
+ err = svn_cstring_atoi64(result, sb->data);
+ if (err)
+ return svn_error_createf(SVN_ERR_FS_CORRUPT, err,
+ _("Number '%s' invalid or too large"),
+ sb->data);
+ }
+
+ return SVN_NO_ERROR;
+}
+
/* Given REV in FS, set *REV_OFFSET to REV's offset in the packed file.
Use POOL for temporary allocations. */
static svn_error_t *
@@ -1902,7 +2030,8 @@ get_packed_offset(apr_off_t *rev_offset,
/* Open the manifest file. */
SVN_ERR(svn_stream_open_readonly(&manifest_stream,
- path_rev_packed(fs, rev, "manifest", pool),
+ path_rev_packed(fs, rev, PATH_MANIFEST,
+ pool),
pool, pool));
/* While we're here, let's just read the entire manifest file into an array,
@@ -1911,21 +2040,14 @@ get_packed_offset(apr_off_t *rev_offset,
manifest = apr_array_make(pool, ffd->max_files_per_dir, sizeof(apr_off_t));
while (1)
{
- svn_stringbuf_t *sb;
svn_boolean_t eof;
apr_int64_t val;
- svn_error_t *err;
svn_pool_clear(iterpool);
- SVN_ERR(svn_stream_readline(manifest_stream, &sb, "\n", &eof, iterpool));
+ SVN_ERR(read_number_from_stream(&val, &eof, manifest_stream, iterpool));
if (eof)
break;
- err = svn_cstring_atoi64(&val, sb->data);
- if (err)
- return svn_error_createf(SVN_ERR_FS_CORRUPT, err,
- _("Manifest offset '%s' too large"),
- sb->data);
APR_ARRAY_PUSH(manifest, apr_off_t) = (apr_off_t)val;
}
svn_pool_destroy(iterpool);
@@ -2026,13 +2148,13 @@ read_rep_offsets_body(representation_t **rep_p,
apr_pool_t *pool)
{
representation_t *rep;
- char *str, *last_str;
+ char *str;
apr_int64_t val;
rep = apr_pcalloc(pool, sizeof(*rep));
*rep_p = rep;
- str = apr_strtok(string, " ", &last_str);
+ str = svn_cstring_tokenize(" ", &string);
if (str == NULL)
return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
_("Malformed text representation offset line in node-rev"));
@@ -2046,7 +2168,7 @@ read_rep_offsets_body(representation_t **rep_p,
return SVN_NO_ERROR;
}
- str = apr_strtok(NULL, " ", &last_str);
+ str = svn_cstring_tokenize(" ", &string);
if (str == NULL)
return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
_("Malformed text representation offset line in node-rev"));
@@ -2054,7 +2176,7 @@ read_rep_offsets_body(representation_t **rep_p,
SVN_ERR(svn_cstring_atoi64(&val, str));
rep->offset = (apr_off_t)val;
- str = apr_strtok(NULL, " ", &last_str);
+ str = svn_cstring_tokenize(" ", &string);
if (str == NULL)
return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
_("Malformed text representation offset line in node-rev"));
@@ -2062,7 +2184,7 @@ read_rep_offsets_body(representation_t **rep_p,
SVN_ERR(svn_cstring_atoi64(&val, str));
rep->size = (svn_filesize_t)val;
- str = apr_strtok(NULL, " ", &last_str);
+ str = svn_cstring_tokenize(" ", &string);
if (str == NULL)
return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
_("Malformed text representation offset line in node-rev"));
@@ -2071,7 +2193,7 @@ read_rep_offsets_body(representation_t **rep_p,
rep->expanded_size = (svn_filesize_t)val;
/* Read in the MD5 hash. */
- str = apr_strtok(NULL, " ", &last_str);
+ str = svn_cstring_tokenize(" ", &string);
if ((str == NULL) || (strlen(str) != (APR_MD5_DIGESTSIZE * 2)))
return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
_("Malformed text representation offset line in node-rev"));
@@ -2080,7 +2202,7 @@ read_rep_offsets_body(representation_t **rep_p,
pool));
/* The remaining fields are only used for formats >= 4, so check that. */
- str = apr_strtok(NULL, " ", &last_str);
+ str = svn_cstring_tokenize(" ", &string);
if (str == NULL)
return SVN_NO_ERROR;
@@ -2093,7 +2215,7 @@ read_rep_offsets_body(representation_t **rep_p,
pool));
/* Read the uniquifier. */
- str = apr_strtok(NULL, " ", &last_str);
+ str = svn_cstring_tokenize(" ", &string);
if (str == NULL)
return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
_("Malformed text representation offset line in node-rev"));
@@ -2147,16 +2269,6 @@ err_dangling_id(svn_fs_t *fs, const svn_fs_id_t *id)
id_str->data, fs->path);
}
-/* Return a string that uniquely identifies the noderev with the
- * given ID, for use as a cache key.
- */
-static const char *
-get_noderev_cache_key(const svn_fs_id_t *id, apr_pool_t *pool)
-{
- const svn_string_t *id_unparsed = svn_fs_fs__id_unparse(id, pool);
- return id_unparsed->data;
-}
-
/* Look up the NODEREV_P for ID in FS' node revsion cache. If noderev
* caching has been enabled and the data can be found, IS_CACHED will
* be set to TRUE. The noderev will be allocated from POOL.
@@ -2172,13 +2284,21 @@ get_cached_node_revision_body(node_revision_t **noderev_p,
{
fs_fs_data_t *ffd = fs->fsap_data;
if (! ffd->node_revision_cache || svn_fs_fs__id_txn_id(id))
- *is_cached = FALSE;
+ {
+ *is_cached = FALSE;
+ }
else
- SVN_ERR(svn_cache__get((void **) noderev_p,
- is_cached,
- ffd->node_revision_cache,
- get_noderev_cache_key(id, pool),
- pool));
+ {
+ pair_cache_key_t key = { 0 };
+
+ key.revision = svn_fs_fs__id_rev(id);
+ key.second = svn_fs_fs__id_offset(id);
+ SVN_ERR(svn_cache__get((void **) noderev_p,
+ is_cached,
+ ffd->node_revision_cache,
+ &key,
+ pool));
+ }
return SVN_NO_ERROR;
}
@@ -2197,10 +2317,16 @@ set_cached_node_revision_body(node_revision_t *noderev_p,
fs_fs_data_t *ffd = fs->fsap_data;
if (ffd->node_revision_cache && !svn_fs_fs__id_txn_id(id))
- return svn_cache__set(ffd->node_revision_cache,
- get_noderev_cache_key(id, scratch_pool),
- noderev_p,
- scratch_pool);
+ {
+ pair_cache_key_t key = { 0 };
+
+ key.revision = svn_fs_fs__id_rev(id);
+ key.second = svn_fs_fs__id_offset(id);
+ return svn_cache__set(ffd->node_revision_cache,
+ &key,
+ noderev_p,
+ scratch_pool);
+ }
return SVN_NO_ERROR;
}
@@ -2274,7 +2400,7 @@ svn_fs_fs__read_noderev(node_revision_t **noderev_p,
noderev = apr_pcalloc(pool, sizeof(*noderev));
/* Read the node-rev id. */
- value = apr_hash_get(headers, HEADER_ID, APR_HASH_KEY_STRING);
+ value = svn_hash_gets(headers, HEADER_ID);
if (value == NULL)
/* ### More information: filename/offset coordinates */
return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
@@ -2286,7 +2412,7 @@ svn_fs_fs__read_noderev(node_revision_t **noderev_p,
noderev_id = value; /* for error messages later */
/* Read the type. */
- value = apr_hash_get(headers, HEADER_TYPE, APR_HASH_KEY_STRING);
+ value = svn_hash_gets(headers, HEADER_TYPE);
if ((value == NULL) ||
(strcmp(value, KIND_FILE) != 0 && strcmp(value, KIND_DIR)))
@@ -2299,14 +2425,14 @@ svn_fs_fs__read_noderev(node_revision_t **noderev_p,
: svn_node_dir;
/* Read the 'count' field. */
- value = apr_hash_get(headers, HEADER_COUNT, APR_HASH_KEY_STRING);
+ value = svn_hash_gets(headers, HEADER_COUNT);
if (value)
SVN_ERR(svn_cstring_atoi(&noderev->predecessor_count, value));
else
noderev->predecessor_count = 0;
/* Get the properties location. */
- value = apr_hash_get(headers, HEADER_PROPS, APR_HASH_KEY_STRING);
+ value = svn_hash_gets(headers, HEADER_PROPS);
if (value)
{
SVN_ERR(read_rep_offsets(&noderev->prop_rep, value,
@@ -2314,7 +2440,7 @@ svn_fs_fs__read_noderev(node_revision_t **noderev_p,
}
/* Get the data location. */
- value = apr_hash_get(headers, HEADER_TEXT, APR_HASH_KEY_STRING);
+ value = svn_hash_gets(headers, HEADER_TEXT);
if (value)
{
SVN_ERR(read_rep_offsets(&noderev->data_rep, value,
@@ -2323,7 +2449,7 @@ svn_fs_fs__read_noderev(node_revision_t **noderev_p,
}
/* Get the created path. */
- value = apr_hash_get(headers, HEADER_CPATH, APR_HASH_KEY_STRING);
+ value = svn_hash_gets(headers, HEADER_CPATH);
if (value == NULL)
{
return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
@@ -2336,13 +2462,13 @@ svn_fs_fs__read_noderev(node_revision_t **noderev_p,
}
/* Get the predecessor ID. */
- value = apr_hash_get(headers, HEADER_PRED, APR_HASH_KEY_STRING);
+ value = svn_hash_gets(headers, HEADER_PRED);
if (value)
noderev->predecessor_id = svn_fs_fs__id_parse(value, strlen(value),
pool);
/* Get the copyroot. */
- value = apr_hash_get(headers, HEADER_COPYROOT, APR_HASH_KEY_STRING);
+ value = svn_hash_gets(headers, HEADER_COPYROOT);
if (value == NULL)
{
noderev->copyroot_path = apr_pstrdup(pool, noderev->created_path);
@@ -2350,9 +2476,9 @@ svn_fs_fs__read_noderev(node_revision_t **noderev_p,
}
else
{
- char *str, *last_str;
+ char *str;
- str = apr_strtok(value, " ", &last_str);
+ str = svn_cstring_tokenize(" ", &value);
if (str == NULL)
return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
_("Malformed copyroot line in node-rev '%s'"),
@@ -2360,15 +2486,15 @@ svn_fs_fs__read_noderev(node_revision_t **noderev_p,
noderev->copyroot_rev = SVN_STR_TO_REV(str);
- if (last_str == NULL)
+ if (*value == '\0')
return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
_("Malformed copyroot line in node-rev '%s'"),
noderev_id);
- noderev->copyroot_path = apr_pstrdup(pool, last_str);
+ noderev->copyroot_path = apr_pstrdup(pool, value);
}
/* Get the copyfrom. */
- value = apr_hash_get(headers, HEADER_COPYFROM, APR_HASH_KEY_STRING);
+ value = svn_hash_gets(headers, HEADER_COPYFROM);
if (value == NULL)
{
noderev->copyfrom_path = NULL;
@@ -2376,9 +2502,7 @@ svn_fs_fs__read_noderev(node_revision_t **noderev_p,
}
else
{
- char *str, *last_str;
-
- str = apr_strtok(value, " ", &last_str);
+ char *str = svn_cstring_tokenize(" ", &value);
if (str == NULL)
return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
_("Malformed copyfrom line in node-rev '%s'"),
@@ -2386,26 +2510,26 @@ svn_fs_fs__read_noderev(node_revision_t **noderev_p,
noderev->copyfrom_rev = SVN_STR_TO_REV(str);
- if (last_str == NULL)
+ if (*value == 0)
return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
_("Malformed copyfrom line in node-rev '%s'"),
noderev_id);
- noderev->copyfrom_path = apr_pstrdup(pool, last_str);
+ noderev->copyfrom_path = apr_pstrdup(pool, value);
}
/* Get whether this is a fresh txn root. */
- value = apr_hash_get(headers, HEADER_FRESHTXNRT, APR_HASH_KEY_STRING);
+ value = svn_hash_gets(headers, HEADER_FRESHTXNRT);
noderev->is_fresh_txn_root = (value != NULL);
/* Get the mergeinfo count. */
- value = apr_hash_get(headers, HEADER_MINFO_CNT, APR_HASH_KEY_STRING);
+ value = svn_hash_gets(headers, HEADER_MINFO_CNT);
if (value)
SVN_ERR(svn_cstring_atoi64(&noderev->mergeinfo_count, value));
else
noderev->mergeinfo_count = 0;
/* Get whether *this* node has mergeinfo. */
- value = apr_hash_get(headers, HEADER_MINFO_HERE, APR_HASH_KEY_STRING);
+ value = svn_hash_gets(headers, HEADER_MINFO_HERE);
noderev->has_mergeinfo = (value != NULL);
*noderev_p = noderev;
@@ -2435,33 +2559,40 @@ svn_fs_fs__get_node_revision(node_revision_t **noderev_p,
that represents the location of representation REP. If
MUTABLE_REP_TRUNCATED is given, the rep is for props or dir contents,
and only a "-1" revision number will be given for a mutable rep.
+ If MAY_BE_CORRUPT is true, guard for NULL when constructing the string.
Perform the allocation from POOL. */
static const char *
representation_string(representation_t *rep,
int format,
svn_boolean_t mutable_rep_truncated,
+ svn_boolean_t may_be_corrupt,
apr_pool_t *pool)
{
if (rep->txn_id && mutable_rep_truncated)
return "-1";
+#define DISPLAY_MAYBE_NULL_CHECKSUM(checksum) \
+ ((!may_be_corrupt || (checksum) != NULL) \
+ ? svn_checksum_to_cstring_display((checksum), pool) \
+ : "(null)")
+
if (format < SVN_FS_FS__MIN_REP_SHARING_FORMAT || rep->sha1_checksum == NULL)
return apr_psprintf(pool, "%ld %" APR_OFF_T_FMT " %" SVN_FILESIZE_T_FMT
" %" SVN_FILESIZE_T_FMT " %s",
rep->revision, rep->offset, rep->size,
rep->expanded_size,
- svn_checksum_to_cstring_display(rep->md5_checksum,
- pool));
+ DISPLAY_MAYBE_NULL_CHECKSUM(rep->md5_checksum));
return apr_psprintf(pool, "%ld %" APR_OFF_T_FMT " %" SVN_FILESIZE_T_FMT
" %" SVN_FILESIZE_T_FMT " %s %s %s",
rep->revision, rep->offset, rep->size,
rep->expanded_size,
- svn_checksum_to_cstring_display(rep->md5_checksum,
- pool),
- svn_checksum_to_cstring_display(rep->sha1_checksum,
- pool),
+ DISPLAY_MAYBE_NULL_CHECKSUM(rep->md5_checksum),
+ DISPLAY_MAYBE_NULL_CHECKSUM(rep->sha1_checksum),
rep->uniquifier);
+
+#undef DISPLAY_MAYBE_NULL_CHECKSUM
+
}
@@ -2494,12 +2625,13 @@ svn_fs_fs__write_noderev(svn_stream_t *outfile,
format,
(noderev->kind
== svn_node_dir),
+ FALSE,
pool)));
if (noderev->prop_rep)
SVN_ERR(svn_stream_printf(outfile, pool, HEADER_PROPS ": %s\n",
representation_string(noderev->prop_rep, format,
- TRUE, pool)));
+ TRUE, FALSE, pool)));
SVN_ERR(svn_stream_printf(outfile, pool, HEADER_CPATH ": %s\n",
noderev->created_path));
@@ -2518,7 +2650,7 @@ svn_fs_fs__write_noderev(svn_stream_t *outfile,
noderev->copyroot_path));
if (noderev->is_fresh_txn_root)
- SVN_ERR(svn_stream_printf(outfile, pool, HEADER_FRESHTXNRT ": y\n"));
+ SVN_ERR(svn_stream_puts(outfile, HEADER_FRESHTXNRT ": y\n"));
if (include_mergeinfo)
{
@@ -2528,10 +2660,10 @@ svn_fs_fs__write_noderev(svn_stream_t *outfile,
noderev->mergeinfo_count));
if (noderev->has_mergeinfo)
- SVN_ERR(svn_stream_printf(outfile, pool, HEADER_MINFO_HERE ": y\n"));
+ SVN_ERR(svn_stream_puts(outfile, HEADER_MINFO_HERE ": y\n"));
}
- return svn_stream_printf(outfile, pool, "\n");
+ return svn_stream_puts(outfile, "\n");
}
svn_error_t *
@@ -2562,7 +2694,50 @@ svn_fs_fs__put_node_revision(svn_fs_t *fs,
svn_fs_fs__fs_supports_mergeinfo(fs),
pool));
- return svn_io_file_close(noderev_file, pool);
+ SVN_ERR(svn_io_file_close(noderev_file, pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* For the in-transaction NODEREV within FS, write the sha1->rep mapping
+ * file in the respective transaction, if rep sharing has been enabled etc.
+ * Use POOL for temporary allocations.
+ */
+static svn_error_t *
+store_sha1_rep_mapping(svn_fs_t *fs,
+ node_revision_t *noderev,
+ apr_pool_t *pool)
+{
+ fs_fs_data_t *ffd = fs->fsap_data;
+
+ /* if rep sharing has been enabled and the noderev has a data rep and
+ * its SHA-1 is known, store the rep struct under its SHA1. */
+ if ( ffd->rep_sharing_allowed
+ && noderev->data_rep
+ && noderev->data_rep->sha1_checksum)
+ {
+ apr_file_t *rep_file;
+ const char *file_name = path_txn_sha1(fs,
+ svn_fs_fs__id_txn_id(noderev->id),
+ noderev->data_rep->sha1_checksum,
+ pool);
+ const char *rep_string = representation_string(noderev->data_rep,
+ ffd->format,
+ (noderev->kind
+ == svn_node_dir),
+ FALSE,
+ pool);
+ SVN_ERR(svn_io_file_open(&rep_file, file_name,
+ APR_WRITE | APR_CREATE | APR_TRUNCATE
+ | APR_BUFFERED, APR_OS_DEFAULT, pool));
+
+ SVN_ERR(svn_io_file_write_full(rep_file, rep_string,
+ strlen(rep_string), NULL, pool));
+
+ SVN_ERR(svn_io_file_close(rep_file, pool));
+ }
+
+ return SVN_NO_ERROR;
}
@@ -2589,7 +2764,7 @@ read_rep_line(struct rep_args **rep_args_p,
char buffer[160];
apr_size_t limit;
struct rep_args *rep_args;
- char *str, *last_str;
+ char *str, *last_str = buffer;
apr_int64_t val;
limit = sizeof(buffer);
@@ -2617,22 +2792,22 @@ read_rep_line(struct rep_args **rep_args_p,
rep_args->is_delta_vs_empty = FALSE;
/* We have hopefully a DELTA vs. a non-empty base revision. */
- str = apr_strtok(buffer, " ", &last_str);
+ str = svn_cstring_tokenize(" ", &last_str);
if (! str || (strcmp(str, REP_DELTA) != 0))
goto error;
- str = apr_strtok(NULL, " ", &last_str);
+ str = svn_cstring_tokenize(" ", &last_str);
if (! str)
goto error;
rep_args->base_revision = SVN_STR_TO_REV(str);
- str = apr_strtok(NULL, " ", &last_str);
+ str = svn_cstring_tokenize(" ", &last_str);
if (! str)
goto error;
SVN_ERR(svn_cstring_atoi64(&val, str));
rep_args->base_offset = (apr_off_t)val;
- str = apr_strtok(NULL, " ", &last_str);
+ str = svn_cstring_tokenize(" ", &last_str);
if (! str)
goto error;
SVN_ERR(svn_cstring_atoi64(&val, str));
@@ -2671,7 +2846,7 @@ get_fs_id_at_offset(svn_fs_id_t **id_p,
/* In error messages, the offset is relative to the pack file,
not to the rev file. */
- node_id_str = apr_hash_get(headers, HEADER_ID, APR_HASH_KEY_STRING);
+ node_id_str = svn_hash_gets(headers, HEADER_ID);
if (node_id_str == NULL)
return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
@@ -2934,109 +3109,1324 @@ svn_fs_fs__rev_get_root(svn_fs_id_t **root_id_p,
return SVN_NO_ERROR;
}
-/* Set the revision property list of revision REV in filesystem FS to
- PROPLIST. Use POOL for temporary allocations. */
+/* Revprop caching management.
+ *
+ * Mechanism:
+ * ----------
+ *
+ * Revprop caching needs to be activated and will be deactivated for the
+ * respective FS instance if the necessary infrastructure could not be
+ * initialized. In deactivated mode, there is almost no runtime overhead
+ * associated with revprop caching. As long as no revprops are being read
+ * or changed, revprop caching imposes no overhead.
+ *
+ * When activated, we cache revprops using (revision, generation) pairs
+ * as keys with the generation being incremented upon every revprop change.
+ * Since the cache is process-local, the generation needs to be tracked
+ * for at least as long as the process lives but may be reset afterwards.
+ *
+ * To track the revprop generation, we use two-layer approach. On the lower
+ * level, we use named atomics to have a system-wide consistent value for
+ * the current revprop generation. However, those named atomics will only
+ * remain valid for as long as at least one process / thread in the system
+ * accesses revprops in the respective repository. The underlying shared
+ * memory gets cleaned up afterwards.
+ *
+ * On the second level, we will use a persistent file to track the latest
+ * revprop generation. It will be written upon each revprop change but
+ * only be read if we are the first process to initialize the named atomics
+ * with that value.
+ *
+ * The overhead for the second and following accesses to revprops is
+ * almost zero on most systems.
+ *
+ *
+ * Tech aspects:
+ * -------------
+ *
+ * A problem is that we need to provide a globally available file name to
+ * back the SHM implementation on OSes that need it. We can only assume
+ * write access to some file within the respective repositories. Because
+ * a given server process may access thousands of repositories during its
+ * lifetime, keeping the SHM data alive for all of them is also not an
+ * option.
+ *
+ * So, we store the new revprop generation on disk as part of each
+ * setrevprop call, i.e. this write will be serialized and the write order
+ * be guaranteed by the repository write lock.
+ *
+ * The only racy situation occurs when the data is being read again by two
+ * processes concurrently but in that situation, the first process to
+ * finish that procedure is guaranteed to be the only one that initializes
+ * the SHM data. Since even writers will first go through that
+ * initialization phase, they will never operate on stale data.
+ */
+
+/* Read revprop generation as stored on disk for repository FS. The result
+ * is returned in *CURRENT. Default to 2 if no such file is available.
+ */
static svn_error_t *
-set_revision_proplist(svn_fs_t *fs,
- svn_revnum_t rev,
- apr_hash_t *proplist,
- apr_pool_t *pool)
+read_revprop_generation_file(apr_int64_t *current,
+ svn_fs_t *fs,
+ apr_pool_t *pool)
{
- SVN_ERR(ensure_revision_exists(fs, rev, pool));
+ svn_error_t *err;
+ apr_file_t *file;
+ char buf[80];
+ apr_size_t len;
+ const char *path = path_revprop_generation(fs, pool);
- if (1)
+ err = svn_io_file_open(&file, path,
+ APR_READ | APR_BUFFERED,
+ APR_OS_DEFAULT, pool);
+ if (err && APR_STATUS_IS_ENOENT(err->apr_err))
{
- const char *final_path = path_revprops(fs, rev, pool);
- const char *tmp_path;
- const char *perms_reference;
- svn_stream_t *stream;
+ svn_error_clear(err);
+ *current = 2;
- /* ### do we have a directory sitting around already? we really shouldn't
- ### have to get the dirname here. */
- SVN_ERR(svn_stream_open_unique(&stream, &tmp_path,
- svn_dirent_dirname(final_path, pool),
- svn_io_file_del_none, pool, pool));
- SVN_ERR(svn_hash_write2(proplist, stream, SVN_HASH_TERMINATOR, pool));
- SVN_ERR(svn_stream_close(stream));
+ return SVN_NO_ERROR;
+ }
+ SVN_ERR(err);
- /* We use the rev file of this revision as the perms reference,
- because when setting revprops for the first time, the revprop
- file won't exist and therefore can't serve as its own reference.
- (Whereas the rev file should already exist at this point.) */
- SVN_ERR(svn_fs_fs__path_rev_absolute(&perms_reference, fs, rev, pool));
- SVN_ERR(move_into_place(tmp_path, final_path, perms_reference, pool));
+ len = sizeof(buf);
+ SVN_ERR(svn_io_read_length_line(file, buf, &len, pool));
- return SVN_NO_ERROR;
+ /* Check that the first line contains only digits. */
+ SVN_ERR(check_file_buffer_numeric(buf, 0, path,
+ "Revprop Generation", pool));
+ SVN_ERR(svn_cstring_atoi64(current, buf));
+
+ return svn_io_file_close(file, pool);
+}
+
+/* Write the CURRENT revprop generation to disk for repository FS.
+ */
+static svn_error_t *
+write_revprop_generation_file(svn_fs_t *fs,
+ apr_int64_t current,
+ apr_pool_t *pool)
+{
+ apr_file_t *file;
+ const char *tmp_path;
+
+ char buf[SVN_INT64_BUFFER_SIZE];
+ apr_size_t len = svn__i64toa(buf, current);
+ buf[len] = '\n';
+
+ SVN_ERR(svn_io_open_unique_file3(&file, &tmp_path, fs->path,
+ svn_io_file_del_none, pool, pool));
+ SVN_ERR(svn_io_file_write_full(file, buf, len + 1, NULL, pool));
+ SVN_ERR(svn_io_file_close(file, pool));
+
+ return move_into_place(tmp_path, path_revprop_generation(fs, pool),
+ tmp_path, pool);
+}
+
+/* Make sure the revprop_namespace member in FS is set. */
+static svn_error_t *
+ensure_revprop_namespace(svn_fs_t *fs)
+{
+ fs_fs_data_t *ffd = fs->fsap_data;
+
+ return ffd->revprop_namespace == NULL
+ ? svn_atomic_namespace__create(&ffd->revprop_namespace,
+ svn_dirent_join(fs->path,
+ ATOMIC_REVPROP_NAMESPACE,
+ fs->pool),
+ fs->pool)
+ : SVN_NO_ERROR;
+}
+
+/* Make sure the revprop_namespace member in FS is set. */
+static svn_error_t *
+cleanup_revprop_namespace(svn_fs_t *fs)
+{
+ const char *name = svn_dirent_join(fs->path,
+ ATOMIC_REVPROP_NAMESPACE,
+ fs->pool);
+ return svn_error_trace(svn_atomic_namespace__cleanup(name, fs->pool));
+}
+
+/* Make sure the revprop_generation member in FS is set and, if necessary,
+ * initialized with the latest value stored on disk.
+ */
+static svn_error_t *
+ensure_revprop_generation(svn_fs_t *fs, apr_pool_t *pool)
+{
+ fs_fs_data_t *ffd = fs->fsap_data;
+
+ SVN_ERR(ensure_revprop_namespace(fs));
+ if (ffd->revprop_generation == NULL)
+ {
+ apr_int64_t current = 0;
+
+ SVN_ERR(svn_named_atomic__get(&ffd->revprop_generation,
+ ffd->revprop_namespace,
+ ATOMIC_REVPROP_GENERATION,
+ TRUE));
+
+ /* If the generation is at 0, we just created a new namespace
+ * (it would be at least 2 otherwise). Read the latest generation
+ * from disk and if we are the first one to initialize the atomic
+ * (i.e. is still 0), set it to the value just gotten.
+ */
+ SVN_ERR(svn_named_atomic__read(&current, ffd->revprop_generation));
+ if (current == 0)
+ {
+ SVN_ERR(read_revprop_generation_file(&current, fs, pool));
+ SVN_ERR(svn_named_atomic__cmpxchg(NULL, current, 0,
+ ffd->revprop_generation));
+ }
}
return SVN_NO_ERROR;
}
+/* Make sure the revprop_timeout member in FS is set. */
static svn_error_t *
-revision_proplist(apr_hash_t **proplist_p,
+ensure_revprop_timeout(svn_fs_t *fs)
+{
+ fs_fs_data_t *ffd = fs->fsap_data;
+
+ SVN_ERR(ensure_revprop_namespace(fs));
+ return ffd->revprop_timeout == NULL
+ ? svn_named_atomic__get(&ffd->revprop_timeout,
+ ffd->revprop_namespace,
+ ATOMIC_REVPROP_TIMEOUT,
+ TRUE)
+ : SVN_NO_ERROR;
+}
+
+/* Create an error object with the given MESSAGE and pass it to the
+ WARNING member of FS. */
+static void
+log_revprop_cache_init_warning(svn_fs_t *fs,
+ svn_error_t *underlying_err,
+ const char *message)
+{
+ svn_error_t *err = svn_error_createf(SVN_ERR_FS_REVPROP_CACHE_INIT_FAILURE,
+ underlying_err,
+ message, fs->path);
+
+ if (fs->warning)
+ (fs->warning)(fs->warning_baton, err);
+
+ svn_error_clear(err);
+}
+
+/* Test whether revprop cache and necessary infrastructure are
+ available in FS. */
+static svn_boolean_t
+has_revprop_cache(svn_fs_t *fs, apr_pool_t *pool)
+{
+ fs_fs_data_t *ffd = fs->fsap_data;
+ svn_error_t *error;
+
+ /* is the cache (still) enabled? */
+ if (ffd->revprop_cache == NULL)
+ return FALSE;
+
+ /* is it efficient? */
+ if (!svn_named_atomic__is_efficient())
+ {
+ /* access to it would be quite slow
+ * -> disable the revprop cache for good
+ */
+ ffd->revprop_cache = NULL;
+ log_revprop_cache_init_warning(fs, NULL,
+ "Revprop caching for '%s' disabled"
+ " because it would be inefficient.");
+
+ return FALSE;
+ }
+
+ /* try to access our SHM-backed infrastructure */
+ error = ensure_revprop_generation(fs, pool);
+ if (error)
+ {
+ /* failure -> disable revprop cache for good */
+
+ ffd->revprop_cache = NULL;
+ log_revprop_cache_init_warning(fs, error,
+ "Revprop caching for '%s' disabled "
+ "because SHM infrastructure for revprop "
+ "caching failed to initialize.");
+
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/* Baton structure for revprop_generation_fixup. */
+typedef struct revprop_generation_fixup_t
+{
+ /* revprop generation to read */
+ apr_int64_t *generation;
+
+ /* containing the revprop_generation member to query */
+ fs_fs_data_t *ffd;
+} revprop_generation_upgrade_t;
+
+/* If the revprop generation has an odd value, it means the original writer
+ of the revprop got killed. We don't know whether that process as able
+ to change the revprop data but we assume that it was. Therefore, we
+ increase the generation in that case to basically invalidate everyones
+ cache content.
+ Execute this onlx while holding the write lock to the repo in baton->FFD.
+ */
+static svn_error_t *
+revprop_generation_fixup(void *void_baton,
+ apr_pool_t *pool)
+{
+ revprop_generation_upgrade_t *baton = void_baton;
+ assert(baton->ffd->has_write_lock);
+
+ /* Maybe, either the original revprop writer or some other reader has
+ already corrected / bumped the revprop generation. Thus, we need
+ to read it again. */
+ SVN_ERR(svn_named_atomic__read(baton->generation,
+ baton->ffd->revprop_generation));
+
+ /* Cause everyone to re-read revprops upon their next access, if the
+ last revprop write did not complete properly. */
+ while (*baton->generation % 2)
+ SVN_ERR(svn_named_atomic__add(baton->generation,
+ 1,
+ baton->ffd->revprop_generation));
+
+ return SVN_NO_ERROR;
+}
+
+/* Read the current revprop generation and return it in *GENERATION.
+ Also, detect aborted / crashed writers and recover from that.
+ Use the access object in FS to set the shared mem values. */
+static svn_error_t *
+read_revprop_generation(apr_int64_t *generation,
+ svn_fs_t *fs,
+ apr_pool_t *pool)
+{
+ apr_int64_t current = 0;
+ fs_fs_data_t *ffd = fs->fsap_data;
+
+ /* read the current revprop generation number */
+ SVN_ERR(ensure_revprop_generation(fs, pool));
+ SVN_ERR(svn_named_atomic__read(&current, ffd->revprop_generation));
+
+ /* is an unfinished revprop write under the way? */
+ if (current % 2)
+ {
+ apr_int64_t timeout = 0;
+
+ /* read timeout for the write operation */
+ SVN_ERR(ensure_revprop_timeout(fs));
+ SVN_ERR(svn_named_atomic__read(&timeout, ffd->revprop_timeout));
+
+ /* has the writer process been aborted,
+ * i.e. has the timeout been reached?
+ */
+ if (apr_time_now() > timeout)
+ {
+ revprop_generation_upgrade_t baton;
+ baton.generation = &current;
+ baton.ffd = ffd;
+
+ /* Ensure that the original writer process no longer exists by
+ * acquiring the write lock to this repository. Then, fix up
+ * the revprop generation.
+ */
+ if (ffd->has_write_lock)
+ SVN_ERR(revprop_generation_fixup(&baton, pool));
+ else
+ SVN_ERR(svn_fs_fs__with_write_lock(fs, revprop_generation_fixup,
+ &baton, pool));
+ }
+ }
+
+ /* return the value we just got */
+ *generation = current;
+ return SVN_NO_ERROR;
+}
+
+/* Set the revprop generation to the next odd number to indicate that
+ there is a revprop write process under way. If that times out,
+ readers shall recover from that state & re-read revprops.
+ Use the access object in FS to set the shared mem value. */
+static svn_error_t *
+begin_revprop_change(svn_fs_t *fs, apr_pool_t *pool)
+{
+ apr_int64_t current;
+ fs_fs_data_t *ffd = fs->fsap_data;
+
+ /* set the timeout for the write operation */
+ SVN_ERR(ensure_revprop_timeout(fs));
+ SVN_ERR(svn_named_atomic__write(NULL,
+ apr_time_now() + REVPROP_CHANGE_TIMEOUT,
+ ffd->revprop_timeout));
+
+ /* set the revprop generation to an odd value to indicate
+ * that a write is in progress
+ */
+ SVN_ERR(ensure_revprop_generation(fs, pool));
+ do
+ {
+ SVN_ERR(svn_named_atomic__add(&current,
+ 1,
+ ffd->revprop_generation));
+ }
+ while (current % 2 == 0);
+
+ return SVN_NO_ERROR;
+}
+
+/* Set the revprop generation to the next even number to indicate that
+ a) readers shall re-read revprops, and
+ b) the write process has been completed (no recovery required)
+ Use the access object in FS to set the shared mem value. */
+static svn_error_t *
+end_revprop_change(svn_fs_t *fs, apr_pool_t *pool)
+{
+ apr_int64_t current = 1;
+ fs_fs_data_t *ffd = fs->fsap_data;
+
+ /* set the revprop generation to an even value to indicate
+ * that a write has been completed
+ */
+ SVN_ERR(ensure_revprop_generation(fs, pool));
+ do
+ {
+ SVN_ERR(svn_named_atomic__add(&current,
+ 1,
+ ffd->revprop_generation));
+ }
+ while (current % 2);
+
+ /* Save the latest generation to disk. FS is currently in a "locked"
+ * state such that we can be sure the be the only ones to write that
+ * file.
+ */
+ return write_revprop_generation_file(fs, current, pool);
+}
+
+/* Container for all data required to access the packed revprop file
+ * for a given REVISION. This structure will be filled incrementally
+ * by read_pack_revprops() its sub-routines.
+ */
+typedef struct packed_revprops_t
+{
+ /* revision number to read (not necessarily the first in the pack) */
+ svn_revnum_t revision;
+
+ /* current revprop generation. Used when populating the revprop cache */
+ apr_int64_t generation;
+
+ /* the actual revision properties */
+ apr_hash_t *properties;
+
+ /* their size when serialized to a single string
+ * (as found in PACKED_REVPROPS) */
+ apr_size_t serialized_size;
+
+
+ /* name of the pack file (without folder path) */
+ const char *filename;
+
+ /* packed shard folder path */
+ const char *folder;
+
+ /* sum of values in SIZES */
+ apr_size_t total_size;
+
+ /* first revision in the pack (>= MANIFEST_START) */
+ svn_revnum_t start_revision;
+
+ /* size of the revprops in PACKED_REVPROPS */
+ apr_array_header_t *sizes;
+
+ /* offset of the revprops in PACKED_REVPROPS */
+ apr_array_header_t *offsets;
+
+
+ /* concatenation of the serialized representation of all revprops
+ * in the pack, i.e. the pack content without header and compression */
+ svn_stringbuf_t *packed_revprops;
+
+ /* First revision covered by MANIFEST.
+ * Will equal the shard start revision or 1, for the 1st shard. */
+ svn_revnum_t manifest_start;
+
+ /* content of the manifest.
+ * Maps long(rev - MANIFEST_START) to const char* pack file name */
+ apr_array_header_t *manifest;
+} packed_revprops_t;
+
+/* Parse the serialized revprops in CONTENT and return them in *PROPERTIES.
+ * Also, put them into the revprop cache, if activated, for future use.
+ * Three more parameters are being used to update the revprop cache: FS is
+ * our file system, the revprops belong to REVISION and the global revprop
+ * GENERATION is used as well.
+ *
+ * The returned hash will be allocated in POOL, SCRATCH_POOL is being used
+ * for temporary allocations.
+ */
+static svn_error_t *
+parse_revprop(apr_hash_t **properties,
+ svn_fs_t *fs,
+ svn_revnum_t revision,
+ apr_int64_t generation,
+ svn_string_t *content,
+ apr_pool_t *pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_stream_t *stream = svn_stream_from_string(content, scratch_pool);
+ *properties = apr_hash_make(pool);
+
+ SVN_ERR(svn_hash_read2(*properties, stream, SVN_HASH_TERMINATOR, pool));
+ if (has_revprop_cache(fs, pool))
+ {
+ fs_fs_data_t *ffd = fs->fsap_data;
+ pair_cache_key_t key = { 0 };
+
+ key.revision = revision;
+ key.second = generation;
+ SVN_ERR(svn_cache__set(ffd->revprop_cache, &key, *properties,
+ scratch_pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Read the non-packed revprops for revision REV in FS, put them into the
+ * revprop cache if activated and return them in *PROPERTIES. GENERATION
+ * is the current revprop generation.
+ *
+ * If the data could not be read due to an otherwise recoverable error,
+ * leave *PROPERTIES unchanged. No error will be returned in that case.
+ *
+ * Allocations will be done in POOL.
+ */
+static svn_error_t *
+read_non_packed_revprop(apr_hash_t **properties,
+ svn_fs_t *fs,
+ svn_revnum_t rev,
+ apr_int64_t generation,
+ apr_pool_t *pool)
+{
+ svn_stringbuf_t *content = NULL;
+ apr_pool_t *iterpool = svn_pool_create(pool);
+ svn_boolean_t missing = FALSE;
+ int i;
+
+ for (i = 0; i < RECOVERABLE_RETRY_COUNT && !missing && !content; ++i)
+ {
+ svn_pool_clear(iterpool);
+ SVN_ERR(try_stringbuf_from_file(&content,
+ &missing,
+ path_revprops(fs, rev, iterpool),
+ i + 1 < RECOVERABLE_RETRY_COUNT,
+ iterpool));
+ }
+
+ if (content)
+ SVN_ERR(parse_revprop(properties, fs, rev, generation,
+ svn_stringbuf__morph_into_string(content),
+ pool, iterpool));
+
+ svn_pool_clear(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+/* Given FS and REVPROPS->REVISION, fill the FILENAME, FOLDER and MANIFEST
+ * members. Use POOL for allocating results and SCRATCH_POOL for temporaries.
+ */
+static svn_error_t *
+get_revprop_packname(svn_fs_t *fs,
+ packed_revprops_t *revprops,
+ apr_pool_t *pool,
+ apr_pool_t *scratch_pool)
+{
+ fs_fs_data_t *ffd = fs->fsap_data;
+ svn_stringbuf_t *content = NULL;
+ const char *manifest_file_path;
+ int idx;
+
+ /* read content of the manifest file */
+ revprops->folder = path_revprops_pack_shard(fs, revprops->revision, pool);
+ manifest_file_path = svn_dirent_join(revprops->folder, PATH_MANIFEST, pool);
+
+ SVN_ERR(read_content(&content, manifest_file_path, pool));
+
+ /* parse the manifest. Every line is a file name */
+ revprops->manifest = apr_array_make(pool, ffd->max_files_per_dir,
+ sizeof(const char*));
+
+ /* Read all lines. Since the last line ends with a newline, we will
+ end up with a valid but empty string after the last entry. */
+ while (content->data && *content->data)
+ {
+ APR_ARRAY_PUSH(revprops->manifest, const char*) = content->data;
+ content->data = strchr(content->data, '\n');
+ if (content->data)
+ {
+ *content->data = 0;
+ content->data++;
+ }
+ }
+
+ /* Index for our revision. Rev 0 is excluded from the first shard. */
+ revprops->manifest_start = revprops->revision
+ - (revprops->revision % ffd->max_files_per_dir);
+ if (revprops->manifest_start == 0)
+ ++revprops->manifest_start;
+ idx = (int)(revprops->revision - revprops->manifest_start);
+
+ if (revprops->manifest->nelts <= idx)
+ return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
+ _("Packed revprop manifest for r%ld too "
+ "small"), revprops->revision);
+
+ /* Now get the file name */
+ revprops->filename = APR_ARRAY_IDX(revprops->manifest, idx, const char*);
+
+ return SVN_NO_ERROR;
+}
+
+/* Return TRUE, if revision R1 and R2 refer to the same shard in FS.
+ */
+static svn_boolean_t
+same_shard(svn_fs_t *fs,
+ svn_revnum_t r1,
+ svn_revnum_t r2)
+{
+ fs_fs_data_t *ffd = fs->fsap_data;
+ return (r1 / ffd->max_files_per_dir) == (r2 / ffd->max_files_per_dir);
+}
+
+/* Given FS and the full packed file content in REVPROPS->PACKED_REVPROPS,
+ * fill the START_REVISION, SIZES, OFFSETS members. Also, make
+ * PACKED_REVPROPS point to the first serialized revprop.
+ *
+ * Parse the revprops for REVPROPS->REVISION and set the PROPERTIES as
+ * well as the SERIALIZED_SIZE member. If revprop caching has been
+ * enabled, parse all revprops in the pack and cache them.
+ */
+static svn_error_t *
+parse_packed_revprops(svn_fs_t *fs,
+ packed_revprops_t *revprops,
+ apr_pool_t *pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_stream_t *stream;
+ apr_int64_t first_rev, count, i;
+ apr_off_t offset;
+ const char *header_end;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+
+ /* decompress (even if the data is only "stored", there is still a
+ * length header to remove) */
+ svn_string_t *compressed
+ = svn_stringbuf__morph_into_string(revprops->packed_revprops);
+ svn_stringbuf_t *uncompressed = svn_stringbuf_create_empty(pool);
+ SVN_ERR(svn__decompress(compressed, uncompressed, APR_SIZE_MAX));
+
+ /* read first revision number and number of revisions in the pack */
+ stream = svn_stream_from_stringbuf(uncompressed, scratch_pool);
+ SVN_ERR(read_number_from_stream(&first_rev, NULL, stream, iterpool));
+ SVN_ERR(read_number_from_stream(&count, NULL, stream, iterpool));
+
+ /* Check revision range for validity. */
+ if ( !same_shard(fs, revprops->revision, first_rev)
+ || !same_shard(fs, revprops->revision, first_rev + count - 1)
+ || count < 1)
+ return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
+ _("Revprop pack for revision r%ld"
+ " contains revprops for r%ld .. r%ld"),
+ revprops->revision,
+ (svn_revnum_t)first_rev,
+ (svn_revnum_t)(first_rev + count -1));
+
+ /* Since start & end are in the same shard, it is enough to just test
+ * the FIRST_REV for being actually packed. That will also cover the
+ * special case of rev 0 never being packed. */
+ if (!is_packed_revprop(fs, first_rev))
+ return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
+ _("Revprop pack for revision r%ld"
+ " starts at non-packed revisions r%ld"),
+ revprops->revision, (svn_revnum_t)first_rev);
+
+ /* make PACKED_REVPROPS point to the first char after the header.
+ * This is where the serialized revprops are. */
+ header_end = strstr(uncompressed->data, "\n\n");
+ if (header_end == NULL)
+ return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
+ _("Header end not found"));
+
+ offset = header_end - uncompressed->data + 2;
+
+ revprops->packed_revprops = svn_stringbuf_create_empty(pool);
+ revprops->packed_revprops->data = uncompressed->data + offset;
+ revprops->packed_revprops->len = (apr_size_t)(uncompressed->len - offset);
+ revprops->packed_revprops->blocksize = (apr_size_t)(uncompressed->blocksize - offset);
+
+ /* STREAM still points to the first entry in the sizes list.
+ * Init / construct REVPROPS members. */
+ revprops->start_revision = (svn_revnum_t)first_rev;
+ revprops->sizes = apr_array_make(pool, (int)count, sizeof(offset));
+ revprops->offsets = apr_array_make(pool, (int)count, sizeof(offset));
+
+ /* Now parse, revision by revision, the size and content of each
+ * revisions' revprops. */
+ for (i = 0, offset = 0, revprops->total_size = 0; i < count; ++i)
+ {
+ apr_int64_t size;
+ svn_string_t serialized;
+ apr_hash_t *properties;
+ svn_revnum_t revision = (svn_revnum_t)(first_rev + i);
+
+ /* read & check the serialized size */
+ SVN_ERR(read_number_from_stream(&size, NULL, stream, iterpool));
+ if (size + offset > (apr_int64_t)revprops->packed_revprops->len)
+ return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
+ _("Packed revprop size exceeds pack file size"));
+
+ /* Parse this revprops list, if necessary */
+ serialized.data = revprops->packed_revprops->data + offset;
+ serialized.len = (apr_size_t)size;
+
+ if (revision == revprops->revision)
+ {
+ SVN_ERR(parse_revprop(&revprops->properties, fs, revision,
+ revprops->generation, &serialized,
+ pool, iterpool));
+ revprops->serialized_size = serialized.len;
+ }
+ else
+ {
+ /* If revprop caching is enabled, parse any revprops.
+ * They will get cached as a side-effect of this. */
+ if (has_revprop_cache(fs, pool))
+ SVN_ERR(parse_revprop(&properties, fs, revision,
+ revprops->generation, &serialized,
+ iterpool, iterpool));
+ }
+
+ /* fill REVPROPS data structures */
+ APR_ARRAY_PUSH(revprops->sizes, apr_off_t) = serialized.len;
+ APR_ARRAY_PUSH(revprops->offsets, apr_off_t) = offset;
+ revprops->total_size += serialized.len;
+
+ offset += serialized.len;
+
+ svn_pool_clear(iterpool);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* In filesystem FS, read the packed revprops for revision REV into
+ * *REVPROPS. Use GENERATION to populate the revprop cache, if enabled.
+ * Allocate data in POOL.
+ */
+static svn_error_t *
+read_pack_revprop(packed_revprops_t **revprops,
svn_fs_t *fs,
svn_revnum_t rev,
+ apr_int64_t generation,
apr_pool_t *pool)
{
- apr_hash_t *proplist;
+ apr_pool_t *iterpool = svn_pool_create(pool);
+ svn_boolean_t missing = FALSE;
+ svn_error_t *err;
+ packed_revprops_t *result;
+ int i;
+
+ /* someone insisted that REV is packed. Double-check if necessary */
+ if (!is_packed_revprop(fs, rev))
+ SVN_ERR(update_min_unpacked_rev(fs, iterpool));
+
+ if (!is_packed_revprop(fs, rev))
+ return svn_error_createf(SVN_ERR_FS_NO_SUCH_REVISION, NULL,
+ _("No such packed revision %ld"), rev);
+
+ /* initialize the result data structure */
+ result = apr_pcalloc(pool, sizeof(*result));
+ result->revision = rev;
+ result->generation = generation;
+
+ /* try to read the packed revprops. This may require retries if we have
+ * concurrent writers. */
+ for (i = 0; i < RECOVERABLE_RETRY_COUNT && !result->packed_revprops; ++i)
+ {
+ const char *file_path;
+
+ /* there might have been concurrent writes.
+ * Re-read the manifest and the pack file.
+ */
+ SVN_ERR(get_revprop_packname(fs, result, pool, iterpool));
+ file_path = svn_dirent_join(result->folder,
+ result->filename,
+ iterpool);
+ SVN_ERR(try_stringbuf_from_file(&result->packed_revprops,
+ &missing,
+ file_path,
+ i + 1 < RECOVERABLE_RETRY_COUNT,
+ pool));
+
+ /* If we could not find the file, there was a write.
+ * So, we should refresh our revprop generation info as well such
+ * that others may find data we will put into the cache. They would
+ * consider it outdated, otherwise.
+ */
+ if (missing && has_revprop_cache(fs, pool))
+ SVN_ERR(read_revprop_generation(&result->generation, fs, pool));
+
+ svn_pool_clear(iterpool);
+ }
+
+ /* the file content should be available now */
+ if (!result->packed_revprops)
+ return svn_error_createf(SVN_ERR_FS_PACKED_REVPROP_READ_FAILURE, NULL,
+ _("Failed to read revprop pack file for r%ld"), rev);
+ /* parse it. RESULT will be complete afterwards. */
+ err = parse_packed_revprops(fs, result, pool, iterpool);
+ svn_pool_destroy(iterpool);
+ if (err)
+ return svn_error_createf(SVN_ERR_FS_CORRUPT, err,
+ _("Revprop pack file for r%ld is corrupt"), rev);
+
+ *revprops = result;
+
+ return SVN_NO_ERROR;
+}
+
+/* Read the revprops for revision REV in FS and return them in *PROPERTIES_P.
+ *
+ * Allocations will be done in POOL.
+ */
+static svn_error_t *
+get_revision_proplist(apr_hash_t **proplist_p,
+ svn_fs_t *fs,
+ svn_revnum_t rev,
+ apr_pool_t *pool)
+{
+ fs_fs_data_t *ffd = fs->fsap_data;
+ apr_int64_t generation = 0;
+
+ /* not found, yet */
+ *proplist_p = NULL;
+
+ /* should they be available at all? */
SVN_ERR(ensure_revision_exists(fs, rev, pool));
- if (1)
+ /* Try cache lookup first. */
+ if (has_revprop_cache(fs, pool))
{
- apr_file_t *revprop_file = NULL;
- svn_error_t *err = SVN_NO_ERROR;
- int i;
- apr_pool_t *iterpool;
+ svn_boolean_t is_cached;
+ pair_cache_key_t key = { 0 };
- proplist = apr_hash_make(pool);
- iterpool = svn_pool_create(pool);
- for (i = 0; i < RECOVERABLE_RETRY_COUNT; i++)
+ SVN_ERR(read_revprop_generation(&generation, fs, pool));
+
+ key.revision = rev;
+ key.second = generation;
+ SVN_ERR(svn_cache__get((void **) proplist_p, &is_cached,
+ ffd->revprop_cache, &key, pool));
+ if (is_cached)
+ return SVN_NO_ERROR;
+ }
+
+ /* if REV had not been packed when we began, try reading it from the
+ * non-packed shard. If that fails, we will fall through to packed
+ * shard reads. */
+ if (!is_packed_revprop(fs, rev))
+ {
+ svn_error_t *err = read_non_packed_revprop(proplist_p, fs, rev,
+ generation, pool);
+ if (err)
{
- svn_pool_clear(iterpool);
+ if (!APR_STATUS_IS_ENOENT(err->apr_err)
+ || ffd->format < SVN_FS_FS__MIN_PACKED_REVPROP_FORMAT)
+ return svn_error_trace(err);
- /* Clear err here rather than after finding a recoverable error so
- * we can return that error on the last iteration of the loop. */
svn_error_clear(err);
- err = svn_io_file_open(&revprop_file, path_revprops(fs, rev,
- iterpool),
- APR_READ | APR_BUFFERED, APR_OS_DEFAULT,
- iterpool);
- if (err)
- {
- if (APR_STATUS_IS_ENOENT(err->apr_err))
- {
- svn_error_clear(err);
- return svn_error_createf(SVN_ERR_FS_NO_SUCH_REVISION, NULL,
- _("No such revision %ld"), rev);
- }
-#ifdef ESTALE
- else if (APR_TO_OS_ERROR(err->apr_err) == ESTALE
- || APR_TO_OS_ERROR(err->apr_err) == EIO
- || APR_TO_OS_ERROR(err->apr_err) == ENOENT)
- continue;
-#endif
- return svn_error_trace(err);
- }
+ *proplist_p = NULL; /* in case read_non_packed_revprop changed it */
+ }
+ }
- SVN_ERR(svn_hash__clear(proplist, iterpool));
- RETRY_RECOVERABLE(err, revprop_file,
- svn_hash_read2(proplist,
- svn_stream_from_aprfile2(
- revprop_file, TRUE, iterpool),
- SVN_HASH_TERMINATOR, pool));
+ /* if revprop packing is available and we have not read the revprops, yet,
+ * try reading them from a packed shard. If that fails, REV is most
+ * likely invalid (or its revprops highly contested). */
+ if (ffd->format >= SVN_FS_FS__MIN_PACKED_REVPROP_FORMAT && !*proplist_p)
+ {
+ packed_revprops_t *packed_revprops;
+ SVN_ERR(read_pack_revprop(&packed_revprops, fs, rev, generation, pool));
+ *proplist_p = packed_revprops->properties;
+ }
- IGNORE_RECOVERABLE(err, svn_io_file_close(revprop_file, iterpool));
+ /* The revprops should have been there. Did we get them? */
+ if (!*proplist_p)
+ return svn_error_createf(SVN_ERR_FS_NO_SUCH_REVISION, NULL,
+ _("Could not read revprops for revision %ld"),
+ rev);
- break;
+ return SVN_NO_ERROR;
+}
+
+/* Serialize the revision property list PROPLIST of revision REV in
+ * filesystem FS to a non-packed file. Return the name of that temporary
+ * file in *TMP_PATH and the file path that it must be moved to in
+ * *FINAL_PATH.
+ *
+ * Use POOL for allocations.
+ */
+static svn_error_t *
+write_non_packed_revprop(const char **final_path,
+ const char **tmp_path,
+ svn_fs_t *fs,
+ svn_revnum_t rev,
+ apr_hash_t *proplist,
+ apr_pool_t *pool)
+{
+ svn_stream_t *stream;
+ *final_path = path_revprops(fs, rev, pool);
+
+ /* ### do we have a directory sitting around already? we really shouldn't
+ ### have to get the dirname here. */
+ SVN_ERR(svn_stream_open_unique(&stream, tmp_path,
+ svn_dirent_dirname(*final_path, pool),
+ svn_io_file_del_none, pool, pool));
+ SVN_ERR(svn_hash_write2(proplist, stream, SVN_HASH_TERMINATOR, pool));
+ SVN_ERR(svn_stream_close(stream));
+
+ return SVN_NO_ERROR;
+}
+
+/* After writing the new revprop file(s), call this function to move the
+ * file at TMP_PATH to FINAL_PATH and give it the permissions from
+ * PERMS_REFERENCE.
+ *
+ * If indicated in BUMP_GENERATION, increase FS' revprop generation.
+ * Finally, delete all the temporary files given in FILES_TO_DELETE.
+ * The latter may be NULL.
+ *
+ * Use POOL for temporary allocations.
+ */
+static svn_error_t *
+switch_to_new_revprop(svn_fs_t *fs,
+ const char *final_path,
+ const char *tmp_path,
+ const char *perms_reference,
+ apr_array_header_t *files_to_delete,
+ svn_boolean_t bump_generation,
+ apr_pool_t *pool)
+{
+ /* Now, we may actually be replacing revprops. Make sure that all other
+ threads and processes will know about this. */
+ if (bump_generation)
+ SVN_ERR(begin_revprop_change(fs, pool));
+
+ SVN_ERR(move_into_place(tmp_path, final_path, perms_reference, pool));
+
+ /* Indicate that the update (if relevant) has been completed. */
+ if (bump_generation)
+ SVN_ERR(end_revprop_change(fs, pool));
+
+ /* Clean up temporary files, if necessary. */
+ if (files_to_delete)
+ {
+ apr_pool_t *iterpool = svn_pool_create(pool);
+ int i;
+
+ for (i = 0; i < files_to_delete->nelts; ++i)
+ {
+ const char *path = APR_ARRAY_IDX(files_to_delete, i, const char*);
+ SVN_ERR(svn_io_remove_file2(path, TRUE, iterpool));
+ svn_pool_clear(iterpool);
}
- if (err)
- return svn_error_trace(err);
svn_pool_destroy(iterpool);
}
+ return SVN_NO_ERROR;
+}
- *proplist_p = proplist;
+/* Write a pack file header to STREAM that starts at revision START_REVISION
+ * and contains the indexes [START,END) of SIZES.
+ */
+static svn_error_t *
+serialize_revprops_header(svn_stream_t *stream,
+ svn_revnum_t start_revision,
+ apr_array_header_t *sizes,
+ int start,
+ int end,
+ apr_pool_t *pool)
+{
+ apr_pool_t *iterpool = svn_pool_create(pool);
+ int i;
+
+ SVN_ERR_ASSERT(start < end);
+
+ /* start revision and entry count */
+ SVN_ERR(svn_stream_printf(stream, pool, "%ld\n", start_revision));
+ SVN_ERR(svn_stream_printf(stream, pool, "%d\n", end - start));
+
+ /* the sizes array */
+ for (i = start; i < end; ++i)
+ {
+ apr_off_t size = APR_ARRAY_IDX(sizes, i, apr_off_t);
+ SVN_ERR(svn_stream_printf(stream, iterpool, "%" APR_OFF_T_FMT "\n",
+ size));
+ }
+
+ /* the double newline char indicates the end of the header */
+ SVN_ERR(svn_stream_printf(stream, iterpool, "\n"));
+
+ svn_pool_clear(iterpool);
+ return SVN_NO_ERROR;
+}
+
+/* Writes the a pack file to FILE_STREAM. It copies the serialized data
+ * from REVPROPS for the indexes [START,END) except for index CHANGED_INDEX.
+ *
+ * The data for the latter is taken from NEW_SERIALIZED. Note, that
+ * CHANGED_INDEX may be outside the [START,END) range, i.e. no new data is
+ * taken in that case but only a subset of the old data will be copied.
+ *
+ * NEW_TOTAL_SIZE is a hint for pre-allocating buffers of appropriate size.
+ * POOL is used for temporary allocations.
+ */
+static svn_error_t *
+repack_revprops(svn_fs_t *fs,
+ packed_revprops_t *revprops,
+ int start,
+ int end,
+ int changed_index,
+ svn_stringbuf_t *new_serialized,
+ apr_off_t new_total_size,
+ svn_stream_t *file_stream,
+ apr_pool_t *pool)
+{
+ fs_fs_data_t *ffd = fs->fsap_data;
+ svn_stream_t *stream;
+ int i;
+
+ /* create data empty buffers and the stream object */
+ svn_stringbuf_t *uncompressed
+ = svn_stringbuf_create_ensure((apr_size_t)new_total_size, pool);
+ svn_stringbuf_t *compressed
+ = svn_stringbuf_create_empty(pool);
+ stream = svn_stream_from_stringbuf(uncompressed, pool);
+
+ /* write the header*/
+ SVN_ERR(serialize_revprops_header(stream, revprops->start_revision + start,
+ revprops->sizes, start, end, pool));
+
+ /* append the serialized revprops */
+ for (i = start; i < end; ++i)
+ if (i == changed_index)
+ {
+ SVN_ERR(svn_stream_write(stream,
+ new_serialized->data,
+ &new_serialized->len));
+ }
+ else
+ {
+ apr_size_t size
+ = (apr_size_t)APR_ARRAY_IDX(revprops->sizes, i, apr_off_t);
+ apr_size_t offset
+ = (apr_size_t)APR_ARRAY_IDX(revprops->offsets, i, apr_off_t);
+
+ SVN_ERR(svn_stream_write(stream,
+ revprops->packed_revprops->data + offset,
+ &size));
+ }
+
+ /* flush the stream buffer (if any) to our underlying data buffer */
+ SVN_ERR(svn_stream_close(stream));
+
+ /* compress / store the data */
+ SVN_ERR(svn__compress(svn_stringbuf__morph_into_string(uncompressed),
+ compressed,
+ ffd->compress_packed_revprops
+ ? SVN_DELTA_COMPRESSION_LEVEL_DEFAULT
+ : SVN_DELTA_COMPRESSION_LEVEL_NONE));
+
+ /* finally, write the content to the target stream and close it */
+ SVN_ERR(svn_stream_write(file_stream, compressed->data, &compressed->len));
+ SVN_ERR(svn_stream_close(file_stream));
+
+ return SVN_NO_ERROR;
+}
+
+/* Allocate a new pack file name for revisions
+ * [REVPROPS->START_REVISION + START, REVPROPS->START_REVISION + END - 1]
+ * of REVPROPS->MANIFEST. Add the name of old file to FILES_TO_DELETE,
+ * auto-create that array if necessary. Return an open file stream to
+ * the new file in *STREAM allocated in POOL.
+ */
+static svn_error_t *
+repack_stream_open(svn_stream_t **stream,
+ svn_fs_t *fs,
+ packed_revprops_t *revprops,
+ int start,
+ int end,
+ apr_array_header_t **files_to_delete,
+ apr_pool_t *pool)
+{
+ apr_int64_t tag;
+ const char *tag_string;
+ svn_string_t *new_filename;
+ int i;
+ apr_file_t *file;
+ int manifest_offset
+ = (int)(revprops->start_revision - revprops->manifest_start);
+
+ /* get the old (= current) file name and enlist it for later deletion */
+ const char *old_filename = APR_ARRAY_IDX(revprops->manifest,
+ start + manifest_offset,
+ const char*);
+
+ if (*files_to_delete == NULL)
+ *files_to_delete = apr_array_make(pool, 3, sizeof(const char*));
+
+ APR_ARRAY_PUSH(*files_to_delete, const char*)
+ = svn_dirent_join(revprops->folder, old_filename, pool);
+
+ /* increase the tag part, i.e. the counter after the dot */
+ tag_string = strchr(old_filename, '.');
+ if (tag_string == NULL)
+ return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
+ _("Packed file '%s' misses a tag"),
+ old_filename);
+
+ SVN_ERR(svn_cstring_atoi64(&tag, tag_string + 1));
+ new_filename = svn_string_createf(pool, "%ld.%" APR_INT64_T_FMT,
+ revprops->start_revision + start,
+ ++tag);
+
+ /* update the manifest to point to the new file */
+ for (i = start; i < end; ++i)
+ APR_ARRAY_IDX(revprops->manifest, i + manifest_offset, const char*)
+ = new_filename->data;
+
+ /* create a file stream for the new file */
+ SVN_ERR(svn_io_file_open(&file, svn_dirent_join(revprops->folder,
+ new_filename->data,
+ pool),
+ APR_WRITE | APR_CREATE, APR_OS_DEFAULT, pool));
+ *stream = svn_stream_from_aprfile2(file, FALSE, pool);
+
+ return SVN_NO_ERROR;
+}
+
+/* For revision REV in filesystem FS, set the revision properties to
+ * PROPLIST. Return a new file in *TMP_PATH that the caller shall move
+ * to *FINAL_PATH to make the change visible. Files to be deleted will
+ * be listed in *FILES_TO_DELETE which may remain unchanged / unallocated.
+ * Use POOL for allocations.
+ */
+static svn_error_t *
+write_packed_revprop(const char **final_path,
+ const char **tmp_path,
+ apr_array_header_t **files_to_delete,
+ svn_fs_t *fs,
+ svn_revnum_t rev,
+ apr_hash_t *proplist,
+ apr_pool_t *pool)
+{
+ fs_fs_data_t *ffd = fs->fsap_data;
+ packed_revprops_t *revprops;
+ apr_int64_t generation = 0;
+ svn_stream_t *stream;
+ svn_stringbuf_t *serialized;
+ apr_off_t new_total_size;
+ int changed_index;
+
+ /* read the current revprop generation. This value will not change
+ * while we hold the global write lock to this FS. */
+ if (has_revprop_cache(fs, pool))
+ SVN_ERR(read_revprop_generation(&generation, fs, pool));
+
+ /* read contents of the current pack file */
+ SVN_ERR(read_pack_revprop(&revprops, fs, rev, generation, pool));
+
+ /* serialize the new revprops */
+ serialized = svn_stringbuf_create_empty(pool);
+ stream = svn_stream_from_stringbuf(serialized, pool);
+ SVN_ERR(svn_hash_write2(proplist, stream, SVN_HASH_TERMINATOR, pool));
+ SVN_ERR(svn_stream_close(stream));
+
+ /* calculate the size of the new data */
+ changed_index = (int)(rev - revprops->start_revision);
+ new_total_size = revprops->total_size - revprops->serialized_size
+ + serialized->len
+ + (revprops->offsets->nelts + 2) * SVN_INT64_BUFFER_SIZE;
+
+ APR_ARRAY_IDX(revprops->sizes, changed_index, apr_off_t) = serialized->len;
+
+ /* can we put the new data into the same pack as the before? */
+ if ( new_total_size < ffd->revprop_pack_size
+ || revprops->sizes->nelts == 1)
+ {
+ /* simply replace the old pack file with new content as we do it
+ * in the non-packed case */
+
+ *final_path = svn_dirent_join(revprops->folder, revprops->filename,
+ pool);
+ SVN_ERR(svn_stream_open_unique(&stream, tmp_path, revprops->folder,
+ svn_io_file_del_none, pool, pool));
+ SVN_ERR(repack_revprops(fs, revprops, 0, revprops->sizes->nelts,
+ changed_index, serialized, new_total_size,
+ stream, pool));
+ }
+ else
+ {
+ /* split the pack file into two of roughly equal size */
+ int right_count, left_count, i;
+
+ int left = 0;
+ int right = revprops->sizes->nelts - 1;
+ apr_off_t left_size = 2 * SVN_INT64_BUFFER_SIZE;
+ apr_off_t right_size = 2 * SVN_INT64_BUFFER_SIZE;
+
+ /* let left and right side grow such that their size difference
+ * is minimal after each step. */
+ while (left <= right)
+ if ( left_size + APR_ARRAY_IDX(revprops->sizes, left, apr_off_t)
+ < right_size + APR_ARRAY_IDX(revprops->sizes, right, apr_off_t))
+ {
+ left_size += APR_ARRAY_IDX(revprops->sizes, left, apr_off_t)
+ + SVN_INT64_BUFFER_SIZE;
+ ++left;
+ }
+ else
+ {
+ right_size += APR_ARRAY_IDX(revprops->sizes, right, apr_off_t)
+ + SVN_INT64_BUFFER_SIZE;
+ --right;
+ }
+
+ /* since the items need much less than SVN_INT64_BUFFER_SIZE
+ * bytes to represent their length, the split may not be optimal */
+ left_count = left;
+ right_count = revprops->sizes->nelts - left;
+
+ /* if new_size is large, one side may exceed the pack size limit.
+ * In that case, split before and after the modified revprop.*/
+ if ( left_size > ffd->revprop_pack_size
+ || right_size > ffd->revprop_pack_size)
+ {
+ left_count = changed_index;
+ right_count = revprops->sizes->nelts - left_count - 1;
+ }
+
+ /* write the new, split files */
+ if (left_count)
+ {
+ SVN_ERR(repack_stream_open(&stream, fs, revprops, 0,
+ left_count, files_to_delete, pool));
+ SVN_ERR(repack_revprops(fs, revprops, 0, left_count,
+ changed_index, serialized, new_total_size,
+ stream, pool));
+ }
+
+ if (left_count + right_count < revprops->sizes->nelts)
+ {
+ SVN_ERR(repack_stream_open(&stream, fs, revprops, changed_index,
+ changed_index + 1, files_to_delete,
+ pool));
+ SVN_ERR(repack_revprops(fs, revprops, changed_index,
+ changed_index + 1,
+ changed_index, serialized, new_total_size,
+ stream, pool));
+ }
+
+ if (right_count)
+ {
+ SVN_ERR(repack_stream_open(&stream, fs, revprops,
+ revprops->sizes->nelts - right_count,
+ revprops->sizes->nelts,
+ files_to_delete, pool));
+ SVN_ERR(repack_revprops(fs, revprops,
+ revprops->sizes->nelts - right_count,
+ revprops->sizes->nelts, changed_index,
+ serialized, new_total_size, stream,
+ pool));
+ }
+
+ /* write the new manifest */
+ *final_path = svn_dirent_join(revprops->folder, PATH_MANIFEST, pool);
+ SVN_ERR(svn_stream_open_unique(&stream, tmp_path, revprops->folder,
+ svn_io_file_del_none, pool, pool));
+
+ for (i = 0; i < revprops->manifest->nelts; ++i)
+ {
+ const char *filename = APR_ARRAY_IDX(revprops->manifest, i,
+ const char*);
+ SVN_ERR(svn_stream_printf(stream, pool, "%s\n", filename));
+ }
+
+ SVN_ERR(svn_stream_close(stream));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Set the revision property list of revision REV in filesystem FS to
+ PROPLIST. Use POOL for temporary allocations. */
+static svn_error_t *
+set_revision_proplist(svn_fs_t *fs,
+ svn_revnum_t rev,
+ apr_hash_t *proplist,
+ apr_pool_t *pool)
+{
+ svn_boolean_t is_packed;
+ svn_boolean_t bump_generation = FALSE;
+ const char *final_path;
+ const char *tmp_path;
+ const char *perms_reference;
+ apr_array_header_t *files_to_delete = NULL;
+
+ SVN_ERR(ensure_revision_exists(fs, rev, pool));
+
+ /* this info will not change while we hold the global FS write lock */
+ is_packed = is_packed_revprop(fs, rev);
+
+ /* Test whether revprops already exist for this revision.
+ * Only then will we need to bump the revprop generation. */
+ if (has_revprop_cache(fs, pool))
+ {
+ if (is_packed)
+ {
+ bump_generation = TRUE;
+ }
+ else
+ {
+ svn_node_kind_t kind;
+ SVN_ERR(svn_io_check_path(path_revprops(fs, rev, pool), &kind,
+ pool));
+ bump_generation = kind != svn_node_none;
+ }
+ }
+
+ /* Serialize the new revprop data */
+ if (is_packed)
+ SVN_ERR(write_packed_revprop(&final_path, &tmp_path, &files_to_delete,
+ fs, rev, proplist, pool));
+ else
+ SVN_ERR(write_non_packed_revprop(&final_path, &tmp_path,
+ fs, rev, proplist, pool));
+
+ /* We use the rev file of this revision as the perms reference,
+ * because when setting revprops for the first time, the revprop
+ * file won't exist and therefore can't serve as its own reference.
+ * (Whereas the rev file should already exist at this point.)
+ */
+ SVN_ERR(svn_fs_fs__path_rev_absolute(&perms_reference, fs, rev, pool));
+
+ /* Now, switch to the new revprop data. */
+ SVN_ERR(switch_to_new_revprop(fs, final_path, tmp_path, perms_reference,
+ files_to_delete, bump_generation, pool));
return SVN_NO_ERROR;
}
@@ -3047,7 +4437,7 @@ svn_fs_fs__revision_proplist(apr_hash_t **proplist_p,
svn_revnum_t rev,
apr_pool_t *pool)
{
- SVN_ERR(revision_proplist(proplist_p, fs, rev, pool));
+ SVN_ERR(get_revision_proplist(proplist_p, fs, rev, pool));
return SVN_NO_ERROR;
}
@@ -3059,6 +4449,8 @@ struct rep_state
apr_file_t *file;
/* The txdelta window cache to use or NULL. */
svn_cache__t *window_cache;
+ /* Caches un-deltified windows. May be NULL. */
+ svn_cache__t *combined_cache;
apr_off_t start; /* The starting offset for the raw
svndiff/plaintext data minus header. */
apr_off_t off; /* The current offset into the file. */
@@ -3071,6 +4463,8 @@ struct rep_state
static svn_error_t *
create_rep_state_body(struct rep_state **rep_state,
struct rep_args **rep_args,
+ apr_file_t **file_hint,
+ svn_revnum_t *rev_hint,
representation_t *rep,
svn_fs_t *fs,
apr_pool_t *pool)
@@ -3080,8 +4474,47 @@ create_rep_state_body(struct rep_state **rep_state,
struct rep_args *ra;
unsigned char buf[4];
- SVN_ERR(open_and_seek_representation(&rs->file, fs, rep, pool));
+ /* If the hint is
+ * - given,
+ * - refers to a valid revision,
+ * - refers to a packed revision,
+ * - as does the rep we want to read, and
+ * - refers to the same pack file as the rep
+ * ...
+ */
+ if ( file_hint && rev_hint && *file_hint
+ && SVN_IS_VALID_REVNUM(*rev_hint)
+ && *rev_hint < ffd->min_unpacked_rev
+ && rep->revision < ffd->min_unpacked_rev
+ && ( (*rev_hint / ffd->max_files_per_dir)
+ == (rep->revision / ffd->max_files_per_dir)))
+ {
+ /* ... we can re-use the same, already open file object
+ */
+ apr_off_t offset;
+ SVN_ERR(get_packed_offset(&offset, fs, rep->revision, pool));
+
+ offset += rep->offset;
+ SVN_ERR(svn_io_file_seek(*file_hint, APR_SET, &offset, pool));
+
+ rs->file = *file_hint;
+ }
+ else
+ {
+ /* otherwise, create a new file object
+ */
+ SVN_ERR(open_and_seek_representation(&rs->file, fs, rep, pool));
+ }
+
+ /* remember the current file, if suggested by the caller */
+ if (file_hint)
+ *file_hint = rs->file;
+ if (rev_hint)
+ *rev_hint = rep->revision;
+
+ /* continue constructing RS and RA */
rs->window_cache = ffd->txdelta_window_cache;
+ rs->combined_cache = ffd->combined_window_cache;
SVN_ERR(read_rep_line(&ra, rs->file, pool));
SVN_ERR(get_file_offset(&rs->start, rs->file, pool));
@@ -3090,7 +4523,7 @@ create_rep_state_body(struct rep_state **rep_state,
*rep_state = rs;
*rep_args = ra;
- if (ra->is_delta == FALSE)
+ if (!ra->is_delta)
/* This is a plaintext, so just return the current rep_state. */
return SVN_NO_ERROR;
@@ -3111,15 +4544,26 @@ create_rep_state_body(struct rep_state **rep_state,
/* Read the rep args for REP in filesystem FS and create a rep_state
for reading the representation. Return the rep_state in *REP_STATE
- and the rep args in *REP_ARGS, both allocated in POOL. */
+ and the rep args in *REP_ARGS, both allocated in POOL.
+
+ When reading multiple reps, i.e. a skip delta chain, you may provide
+ non-NULL FILE_HINT and REV_HINT. (If FILE_HINT is not NULL, in the first
+ call it should be a pointer to NULL.) The function will use these variables
+ to store the previous call results and tries to re-use them. This may
+ result in significant savings in I/O for packed files.
+ */
static svn_error_t *
create_rep_state(struct rep_state **rep_state,
struct rep_args **rep_args,
+ apr_file_t **file_hint,
+ svn_revnum_t *rev_hint,
representation_t *rep,
svn_fs_t *fs,
apr_pool_t *pool)
{
- svn_error_t *err = create_rep_state_body(rep_state, rep_args, rep, fs, pool);
+ svn_error_t *err = create_rep_state_body(rep_state, rep_args,
+ file_hint, rev_hint,
+ rep, fs, pool);
if (err && err->apr_err == SVN_ERR_FS_CORRUPT)
{
fs_fs_data_t *ffd = fs->fsap_data;
@@ -3133,66 +4577,23 @@ create_rep_state(struct rep_state **rep_state,
### going to jump straight to this comment anyway! */
return svn_error_createf(SVN_ERR_FS_CORRUPT, err,
"Corrupt representation '%s'",
- rep
+ rep
? representation_string(rep, ffd->format, TRUE,
- pool)
+ TRUE, pool)
: "(null)");
}
/* ### Call representation_string() ? */
return svn_error_trace(err);
}
-/* Build an array of rep_state structures in *LIST giving the delta
- reps from first_rep to a plain-text or self-compressed rep. Set
- *SRC_STATE to the plain-text rep we find at the end of the chain,
- or to NULL if the final delta representation is self-compressed.
- The representation to start from is designated by filesystem FS, id
- ID, and representation REP. */
-static svn_error_t *
-build_rep_list(apr_array_header_t **list,
- struct rep_state **src_state,
- svn_fs_t *fs,
- representation_t *first_rep,
- apr_pool_t *pool)
-{
- representation_t rep;
- struct rep_state *rs;
- struct rep_args *rep_args;
-
- *list = apr_array_make(pool, 1, sizeof(struct rep_state *));
- rep = *first_rep;
-
- while (1)
- {
- SVN_ERR(create_rep_state(&rs, &rep_args, &rep, fs, pool));
- if (rep_args->is_delta == FALSE)
- {
- /* This is a plaintext, so just return the current rep_state. */
- *src_state = rs;
- return SVN_NO_ERROR;
- }
-
- /* Push this rep onto the list. If it's self-compressed, we're done. */
- APR_ARRAY_PUSH(*list, struct rep_state *) = rs;
- if (rep_args->is_delta_vs_empty)
- {
- *src_state = NULL;
- return SVN_NO_ERROR;
- }
-
- rep.revision = rep_args->base_revision;
- rep.offset = rep_args->base_offset;
- rep.size = rep_args->base_length;
- rep.txn_id = NULL;
- }
-}
-
-
struct rep_read_baton
{
/* The FS from which we're reading. */
svn_fs_t *fs;
+ /* If not NULL, this is the base for the first delta window in rs_list */
+ svn_stringbuf_t *base_window;
+
/* The state of all prior delta representations. */
apr_array_header_t *rs_list;
@@ -3225,7 +4626,7 @@ struct rep_read_baton
/* The key for the fulltext cache for this rep, if there is a
fulltext cache. */
- const char *fulltext_cache_key;
+ pair_cache_key_t fulltext_cache_key;
/* The text we've been reading, if we're going to cache it. */
svn_stringbuf_t *current_fulltext;
@@ -3237,51 +4638,9 @@ struct rep_read_baton
apr_pool_t *filehandle_pool;
};
-/* Create a rep_read_baton structure for node revision NODEREV in
- filesystem FS and store it in *RB_P. If FULLTEXT_CACHE_KEY is not
- NULL, it is the rep's key in the fulltext cache, and a stringbuf
- must be allocated to store the text. Perform all allocations in
- POOL. If rep is mutable, it must be for file contents. */
-static svn_error_t *
-rep_read_get_baton(struct rep_read_baton **rb_p,
- svn_fs_t *fs,
- representation_t *rep,
- const char *fulltext_cache_key,
- apr_pool_t *pool)
-{
- struct rep_read_baton *b;
-
- b = apr_pcalloc(pool, sizeof(*b));
- b->fs = fs;
- b->chunk_index = 0;
- b->buf = NULL;
- b->md5_checksum_ctx = svn_checksum_ctx_create(svn_checksum_md5, pool);
- b->checksum_finalized = FALSE;
- b->md5_checksum = svn_checksum_dup(rep->md5_checksum, pool);
- b->len = rep->expanded_size ? rep->expanded_size : rep->size;
- b->off = 0;
- b->fulltext_cache_key = fulltext_cache_key;
- b->pool = svn_pool_create(pool);
- b->filehandle_pool = svn_pool_create(pool);
-
- if (fulltext_cache_key)
- b->current_fulltext = svn_stringbuf_create_ensure
- ((apr_size_t)b->len,
- b->filehandle_pool);
- else
- b->current_fulltext = NULL;
-
- SVN_ERR(build_rep_list(&b->rs_list, &b->src_state, fs, rep,
- b->filehandle_pool));
-
- /* Save our output baton. */
- *rb_p = b;
-
- return SVN_NO_ERROR;
-}
-
/* Combine the name of the rev file in RS with the given OFFSET to form
- * a cache lookup key. Allocations will be made from POOL. */
+ * a cache lookup key. Allocations will be made from POOL. May return
+ * NULL if the key cannot be constructed. */
static const char*
get_window_key(struct rep_state *rs, apr_off_t offset, apr_pool_t *pool)
{
@@ -3295,7 +4654,7 @@ get_window_key(struct rep_state *rs, apr_off_t offset, apr_pool_t *pool)
* comparison _will_ find them.
*/
if (apr_file_name_get(&name, rs->file))
- return "";
+ return NULL;
/* Handle packed files as well by scanning backwards until we find the
* revision or pack number. */
@@ -3383,6 +4742,7 @@ set_cached_window(svn_txdelta_window_t *window,
{
/* store the window and the first offset _past_ it */
svn_fs_fs__txdelta_cached_window_t cached_window;
+
cached_window.window = window;
cached_window.end_offset = rs->off;
@@ -3397,11 +4757,200 @@ set_cached_window(svn_txdelta_window_t *window,
return SVN_NO_ERROR;
}
+/* Read the WINDOW_P for the rep state RS from the current FSFS session's
+ * cache. This will be a no-op and IS_CACHED will be set to FALSE if no
+ * cache has been given. If a cache is available IS_CACHED will inform
+ * the caller about the success of the lookup. Allocations (of the window
+ * in particualar) will be made from POOL.
+ */
+static svn_error_t *
+get_cached_combined_window(svn_stringbuf_t **window_p,
+ struct rep_state *rs,
+ svn_boolean_t *is_cached,
+ apr_pool_t *pool)
+{
+ if (! rs->combined_cache)
+ {
+ /* txdelta window has not been enabled */
+ *is_cached = FALSE;
+ }
+ else
+ {
+ /* ask the cache for the desired txdelta window */
+ return svn_cache__get((void **)window_p,
+ is_cached,
+ rs->combined_cache,
+ get_window_key(rs, rs->start, pool),
+ pool);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Store the WINDOW read at OFFSET for the rep state RS in the current
+ * FSFS session's cache. This will be a no-op if no cache has been given.
+ * Temporary allocations will be made from SCRATCH_POOL. */
+static svn_error_t *
+set_cached_combined_window(svn_stringbuf_t *window,
+ struct rep_state *rs,
+ apr_off_t offset,
+ apr_pool_t *scratch_pool)
+{
+ if (rs->combined_cache)
+ {
+ /* but key it with the start offset because that is the known state
+ * when we will look it up */
+ return svn_cache__set(rs->combined_cache,
+ get_window_key(rs, offset, scratch_pool),
+ window,
+ scratch_pool);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Build an array of rep_state structures in *LIST giving the delta
+ reps from first_rep to a plain-text or self-compressed rep. Set
+ *SRC_STATE to the plain-text rep we find at the end of the chain,
+ or to NULL if the final delta representation is self-compressed.
+ The representation to start from is designated by filesystem FS, id
+ ID, and representation REP.
+ Also, set *WINDOW_P to the base window content for *LIST, if it
+ could be found in cache. Otherwise, *LIST will contain the base
+ representation for the whole delta chain.
+ Finally, return the expanded size of the representation in
+ *EXPANDED_SIZE. It will take care of cases where only the on-disk
+ size is known. */
+static svn_error_t *
+build_rep_list(apr_array_header_t **list,
+ svn_stringbuf_t **window_p,
+ struct rep_state **src_state,
+ svn_filesize_t *expanded_size,
+ svn_fs_t *fs,
+ representation_t *first_rep,
+ apr_pool_t *pool)
+{
+ representation_t rep;
+ struct rep_state *rs = NULL;
+ struct rep_args *rep_args;
+ svn_boolean_t is_cached = FALSE;
+ apr_file_t *last_file = NULL;
+ svn_revnum_t last_revision;
+
+ *list = apr_array_make(pool, 1, sizeof(struct rep_state *));
+ rep = *first_rep;
+
+ /* The value as stored in the data struct.
+ 0 is either for unknown length or actually zero length. */
+ *expanded_size = first_rep->expanded_size;
+
+ /* for the top-level rep, we need the rep_args */
+ SVN_ERR(create_rep_state(&rs, &rep_args, &last_file,
+ &last_revision, &rep, fs, pool));
+
+ /* Unknown size or empty representation?
+ That implies the this being the first iteration.
+ Usually size equals on-disk size, except for empty,
+ compressed representations (delta, size = 4).
+ Please note that for all non-empty deltas have
+ a 4-byte header _plus_ some data. */
+ if (*expanded_size == 0)
+ if (! rep_args->is_delta || first_rep->size != 4)
+ *expanded_size = first_rep->size;
+
+ while (1)
+ {
+ /* fetch state, if that has not been done already */
+ if (!rs)
+ SVN_ERR(create_rep_state(&rs, &rep_args, &last_file,
+ &last_revision, &rep, fs, pool));
+
+ SVN_ERR(get_cached_combined_window(window_p, rs, &is_cached, pool));
+ if (is_cached)
+ {
+ /* We already have a reconstructed window in our cache.
+ Write a pseudo rep_state with the full length. */
+ rs->off = rs->start;
+ rs->end = rs->start + (*window_p)->len;
+ *src_state = rs;
+ return SVN_NO_ERROR;
+ }
+
+ if (!rep_args->is_delta)
+ {
+ /* This is a plaintext, so just return the current rep_state. */
+ *src_state = rs;
+ return SVN_NO_ERROR;
+ }
+
+ /* Push this rep onto the list. If it's self-compressed, we're done. */
+ APR_ARRAY_PUSH(*list, struct rep_state *) = rs;
+ if (rep_args->is_delta_vs_empty)
+ {
+ *src_state = NULL;
+ return SVN_NO_ERROR;
+ }
+
+ rep.revision = rep_args->base_revision;
+ rep.offset = rep_args->base_offset;
+ rep.size = rep_args->base_length;
+ rep.txn_id = NULL;
+
+ rs = NULL;
+ }
+}
+
+
+/* Create a rep_read_baton structure for node revision NODEREV in
+ filesystem FS and store it in *RB_P. If FULLTEXT_CACHE_KEY is not
+ NULL, it is the rep's key in the fulltext cache, and a stringbuf
+ must be allocated to store the text. Perform all allocations in
+ POOL. If rep is mutable, it must be for file contents. */
+static svn_error_t *
+rep_read_get_baton(struct rep_read_baton **rb_p,
+ svn_fs_t *fs,
+ representation_t *rep,
+ pair_cache_key_t fulltext_cache_key,
+ apr_pool_t *pool)
+{
+ struct rep_read_baton *b;
+
+ b = apr_pcalloc(pool, sizeof(*b));
+ b->fs = fs;
+ b->base_window = NULL;
+ b->chunk_index = 0;
+ b->buf = NULL;
+ b->md5_checksum_ctx = svn_checksum_ctx_create(svn_checksum_md5, pool);
+ b->checksum_finalized = FALSE;
+ b->md5_checksum = svn_checksum_dup(rep->md5_checksum, pool);
+ b->len = rep->expanded_size;
+ b->off = 0;
+ b->fulltext_cache_key = fulltext_cache_key;
+ b->pool = svn_pool_create(pool);
+ b->filehandle_pool = svn_pool_create(pool);
+
+ SVN_ERR(build_rep_list(&b->rs_list, &b->base_window,
+ &b->src_state, &b->len, fs, rep,
+ b->filehandle_pool));
+
+ if (SVN_IS_VALID_REVNUM(fulltext_cache_key.revision))
+ b->current_fulltext = svn_stringbuf_create_ensure
+ ((apr_size_t)b->len,
+ b->filehandle_pool);
+ else
+ b->current_fulltext = NULL;
+
+ /* Save our output baton. */
+ *rb_p = b;
+
+ return SVN_NO_ERROR;
+}
+
/* Skip forwards to THIS_CHUNK in REP_STATE and then read the next delta
window into *NWIN. */
static svn_error_t *
-read_window(svn_txdelta_window_t **nwin, int this_chunk, struct rep_state *rs,
- apr_pool_t *pool)
+read_delta_window(svn_txdelta_window_t **nwin, int this_chunk,
+ struct rep_state *rs, apr_pool_t *pool)
{
svn_stream_t *stream;
svn_boolean_t is_cached;
@@ -3409,6 +4958,10 @@ read_window(svn_txdelta_window_t **nwin, int this_chunk, struct rep_state *rs,
SVN_ERR_ASSERT(rs->chunk_index <= this_chunk);
+ /* RS->FILE may be shared between RS instances -> make sure we point
+ * to the right data. */
+ SVN_ERR(svn_io_file_seek(rs->file, APR_SET, &rs->off, pool));
+
/* Skip windows to reach the current chunk if we aren't there yet. */
while (rs->chunk_index < this_chunk)
{
@@ -3444,45 +4997,103 @@ read_window(svn_txdelta_window_t **nwin, int this_chunk, struct rep_state *rs,
return set_cached_window(*nwin, rs, old_offset, pool);
}
-/* Get one delta window that is a result of combining all but the last deltas
- from the current desired representation identified in *RB, to its
- final base representation. Store the window in *RESULT. */
+/* Read SIZE bytes from the representation RS and return it in *NWIN. */
static svn_error_t *
-get_combined_window(svn_txdelta_window_t **result,
+read_plain_window(svn_stringbuf_t **nwin, struct rep_state *rs,
+ apr_size_t size, apr_pool_t *pool)
+{
+ /* RS->FILE may be shared between RS instances -> make sure we point
+ * to the right data. */
+ SVN_ERR(svn_io_file_seek(rs->file, APR_SET, &rs->off, pool));
+
+ /* Read the plain data. */
+ *nwin = svn_stringbuf_create_ensure(size, pool);
+ SVN_ERR(svn_io_file_read_full2(rs->file, (*nwin)->data, size, NULL, NULL,
+ pool));
+ (*nwin)->data[size] = 0;
+
+ /* Update RS. */
+ rs->off += (apr_off_t)size;
+
+ return SVN_NO_ERROR;
+}
+
+/* Get the undeltified window that is a result of combining all deltas
+ from the current desired representation identified in *RB with its
+ base representation. Store the window in *RESULT. */
+static svn_error_t *
+get_combined_window(svn_stringbuf_t **result,
struct rep_read_baton *rb)
{
- apr_pool_t *pool, *new_pool;
+ apr_pool_t *pool, *new_pool, *window_pool;
int i;
- svn_txdelta_window_t *window, *nwin;
+ svn_txdelta_window_t *window;
+ apr_array_header_t *windows;
+ svn_stringbuf_t *source, *buf = rb->base_window;
struct rep_state *rs;
- SVN_ERR_ASSERT(rb->rs_list->nelts >= 2);
-
- pool = svn_pool_create(rb->pool);
+ /* Read all windows that we need to combine. This is fine because
+ the size of each window is relatively small (100kB) and skip-
+ delta limits the number of deltas in a chain to well under 100.
+ Stop early if one of them does not depend on its predecessors. */
+ window_pool = svn_pool_create(rb->pool);
+ windows = apr_array_make(window_pool, 0, sizeof(svn_txdelta_window_t *));
+ for (i = 0; i < rb->rs_list->nelts; ++i)
+ {
+ rs = APR_ARRAY_IDX(rb->rs_list, i, struct rep_state *);
+ SVN_ERR(read_delta_window(&window, rb->chunk_index, rs, window_pool));
- /* Read the next window from the original rep. */
- rs = APR_ARRAY_IDX(rb->rs_list, 0, struct rep_state *);
- SVN_ERR(read_window(&window, rb->chunk_index, rs, pool));
+ APR_ARRAY_PUSH(windows, svn_txdelta_window_t *) = window;
+ if (window->src_ops == 0)
+ {
+ ++i;
+ break;
+ }
+ }
- /* Combine in the windows from the other delta reps, if needed. */
- for (i = 1; i < rb->rs_list->nelts - 1; i++)
+ /* Combine in the windows from the other delta reps. */
+ pool = svn_pool_create(rb->pool);
+ for (--i; i >= 0; --i)
{
- if (window->src_ops == 0)
- break;
rs = APR_ARRAY_IDX(rb->rs_list, i, struct rep_state *);
+ window = APR_ARRAY_IDX(windows, i, svn_txdelta_window_t *);
+
+ /* Maybe, we've got a PLAIN start representation. If we do, read
+ as much data from it as the needed for the txdelta window's source
+ view.
+ Note that BUF / SOURCE may only be NULL in the first iteration. */
+ source = buf;
+ if (source == NULL && rb->src_state != NULL)
+ SVN_ERR(read_plain_window(&source, rb->src_state, window->sview_len,
+ pool));
- SVN_ERR(read_window(&nwin, rb->chunk_index, rs, pool));
-
- /* Combine this window with the current one. Cycle pools so that we
- only need to hold three windows at a time. */
+ /* Combine this window with the current one. */
new_pool = svn_pool_create(rb->pool);
- window = svn_txdelta_compose_windows(nwin, window, new_pool);
+ buf = svn_stringbuf_create_ensure(window->tview_len, new_pool);
+ buf->len = window->tview_len;
+
+ svn_txdelta_apply_instructions(window, source ? source->data : NULL,
+ buf->data, &buf->len);
+ if (buf->len != window->tview_len)
+ return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
+ _("svndiff window length is "
+ "corrupt"));
+
+ /* Cache windows only if the whole rep content could be read as a
+ single chunk. Only then will no other chunk need a deeper RS
+ list than the cached chunk. */
+ if ((rb->chunk_index == 0) && (rs->off == rs->end))
+ SVN_ERR(set_cached_combined_window(buf, rs, rs->start, new_pool));
+
+ /* Cycle pools so that we only need to hold three windows at a time. */
svn_pool_destroy(pool);
pool = new_pool;
}
- *result = window;
+ svn_pool_destroy(window_pool);
+
+ *result = buf;
return SVN_NO_ERROR;
}
@@ -3515,10 +5126,9 @@ get_contents(struct rep_read_baton *rb,
char *buf,
apr_size_t *len)
{
- apr_size_t copy_len, remaining = *len, tlen;
- char *sbuf, *tbuf, *cur = buf;
+ apr_size_t copy_len, remaining = *len;
+ char *cur = buf;
struct rep_state *rs;
- svn_txdelta_window_t *cwindow, *lwindow;
/* Special case for when there are no delta reps, only a plain
text. */
@@ -3526,10 +5136,28 @@ get_contents(struct rep_read_baton *rb,
{
copy_len = remaining;
rs = rb->src_state;
- if (((apr_off_t) copy_len) > rs->end - rs->off)
- copy_len = (apr_size_t) (rs->end - rs->off);
- SVN_ERR(svn_io_file_read_full2(rs->file, cur, copy_len, NULL,
- NULL, rb->pool));
+
+ if (rb->base_window != NULL)
+ {
+ /* We got the desired rep directly from the cache.
+ This is where we need the pseudo rep_state created
+ by build_rep_list(). */
+ apr_size_t offset = (apr_size_t)(rs->off - rs->start);
+ if (copy_len + offset > rb->base_window->len)
+ copy_len = offset < rb->base_window->len
+ ? rb->base_window->len - offset
+ : 0ul;
+
+ memcpy (cur, rb->base_window->data + offset, copy_len);
+ }
+ else
+ {
+ if (((apr_off_t) copy_len) > rs->end - rs->off)
+ copy_len = (apr_size_t) (rs->end - rs->off);
+ SVN_ERR(svn_io_file_read_full2(rs->file, cur, copy_len, NULL,
+ NULL, rb->pool));
+ }
+
rs->off += copy_len;
*len = copy_len;
return SVN_NO_ERROR;
@@ -3561,90 +5189,18 @@ get_contents(struct rep_read_baton *rb,
}
else
{
+ svn_stringbuf_t *sbuf = NULL;
rs = APR_ARRAY_IDX(rb->rs_list, 0, struct rep_state *);
if (rs->off == rs->end)
break;
/* Get more buffered data by evaluating a chunk. */
- if (rb->rs_list->nelts > 1)
- SVN_ERR(get_combined_window(&cwindow, rb));
- else
- cwindow = NULL;
- if (!cwindow || cwindow->src_ops > 0)
- {
- rs = APR_ARRAY_IDX(rb->rs_list, rb->rs_list->nelts - 1,
- struct rep_state *);
- /* Read window from last representation in list. */
- /* We apply this window directly instead of combining it
- with the others. We do this because vdelta used to
- be used for deltas against the empty stream, which
- will trigger quadratic behaviour in the delta
- combiner. It's still likely that we'll find such
- deltas in an old repository; it may be worth
- considering whether or not this special case is still
- needed in the future, though. */
- SVN_ERR(read_window(&lwindow, rb->chunk_index, rs, rb->pool));
-
- if (lwindow->src_ops > 0)
- {
- if (! rb->src_state)
- return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
- _("svndiff data requested "
- "non-existent source"));
- rs = rb->src_state;
- sbuf = apr_palloc(rb->pool, lwindow->sview_len);
- if (! ((rs->start + lwindow->sview_offset) < rs->end))
- return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
- _("svndiff requested position "
- "beyond end of stream"));
- if ((rs->start + lwindow->sview_offset) != rs->off)
- {
- rs->off = rs->start + lwindow->sview_offset;
- SVN_ERR(svn_io_file_seek(rs->file, APR_SET, &rs->off,
- rb->pool));
- }
- SVN_ERR(svn_io_file_read_full2(rs->file, sbuf,
- lwindow->sview_len,
- NULL, NULL, rb->pool));
- rs->off += lwindow->sview_len;
- }
- else
- sbuf = NULL;
-
- /* Apply lwindow to source. */
- tlen = lwindow->tview_len;
- tbuf = apr_palloc(rb->pool, tlen);
- svn_txdelta_apply_instructions(lwindow, sbuf, tbuf,
- &tlen);
- if (tlen != lwindow->tview_len)
- return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
- _("svndiff window length is "
- "corrupt"));
- sbuf = tbuf;
- }
- else
- sbuf = NULL;
+ SVN_ERR(get_combined_window(&sbuf, rb));
rb->chunk_index++;
-
- if (cwindow)
- {
- rb->buf_len = cwindow->tview_len;
- rb->buf = apr_palloc(rb->pool, rb->buf_len);
- svn_txdelta_apply_instructions(cwindow, sbuf, rb->buf,
- &rb->buf_len);
- if (rb->buf_len != cwindow->tview_len)
- return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
- _("svndiff window length is "
- "corrupt"));
- }
- else
- {
- rb->buf_len = lwindow->tview_len;
- rb->buf = sbuf;
- }
-
+ rb->buf_len = sbuf->len;
+ rb->buf = sbuf->data;
rb->buf_pos = 0;
}
}
@@ -3697,7 +5253,7 @@ rep_read_contents(void *baton,
if (rb->off == rb->len && rb->current_fulltext)
{
fs_fs_data_t *ffd = rb->fs->fsap_data;
- SVN_ERR(svn_cache__set(ffd->fulltext_cache, rb->fulltext_cache_key,
+ SVN_ERR(svn_cache__set(ffd->fulltext_cache, &rb->fulltext_cache_key,
rb->current_fulltext, rb->pool));
rb->current_fulltext = NULL;
}
@@ -3728,27 +5284,30 @@ read_representation(svn_stream_t **contents_p,
else
{
fs_fs_data_t *ffd = fs->fsap_data;
- const char *fulltext_key = NULL;
+ pair_cache_key_t fulltext_cache_key = { 0 };
svn_filesize_t len = rep->expanded_size ? rep->expanded_size : rep->size;
struct rep_read_baton *rb;
+ fulltext_cache_key.revision = rep->revision;
+ fulltext_cache_key.second = rep->offset;
if (ffd->fulltext_cache && SVN_IS_VALID_REVNUM(rep->revision)
&& fulltext_size_is_cachable(ffd, len))
{
- svn_string_t *fulltext;
+ svn_stringbuf_t *fulltext;
svn_boolean_t is_cached;
- fulltext_key = apr_psprintf(pool, "%ld/%" APR_OFF_T_FMT,
- rep->revision, rep->offset);
SVN_ERR(svn_cache__get((void **) &fulltext, &is_cached,
- ffd->fulltext_cache, fulltext_key, pool));
+ ffd->fulltext_cache, &fulltext_cache_key,
+ pool));
if (is_cached)
{
- *contents_p = svn_stream_from_string(fulltext, pool);
+ *contents_p = svn_stream_from_stringbuf(fulltext, pool);
return SVN_NO_ERROR;
}
}
+ else
+ fulltext_cache_key.revision = SVN_INVALID_REVNUM;
- SVN_ERR(rep_read_get_baton(&rb, fs, rep, fulltext_key, pool));
+ SVN_ERR(rep_read_get_baton(&rb, fs, rep, fulltext_cache_key, pool));
*contents_p = svn_stream_create(rb, pool);
svn_stream_set_read(*contents_p, rep_read_contents);
@@ -3787,7 +5346,7 @@ delta_read_next_window(svn_txdelta_window_t **window, void *baton,
return SVN_NO_ERROR;
}
- return read_window(window, drb->rs->chunk_index, drb->rs, pool);
+ return read_delta_window(window, drb->rs->chunk_index, drb->rs, pool);
}
/* This implements the svn_txdelta_md5_digest_fn_t interface. */
@@ -3819,13 +5378,15 @@ svn_fs_fs__get_file_delta_stream(svn_txdelta_stream_t **stream_p,
struct rep_args *rep_args;
/* Read target's base rep if any. */
- SVN_ERR(create_rep_state(&rep_state, &rep_args, target->data_rep,
- fs, pool));
- /* If that matches source, then use this delta as is. */
+ SVN_ERR(create_rep_state(&rep_state, &rep_args, NULL, NULL,
+ target->data_rep, fs, pool));
+
+ /* If that matches source, then use this delta as is.
+ Note that we want an actual delta here. E.g. a self-delta would
+ not be good enough. */
if (rep_args->is_delta
- && (rep_args->is_delta_vs_empty
- || (rep_args->base_revision == source->data_rep->revision
- && rep_args->base_offset == source->data_rep->offset)))
+ && rep_args->base_revision == source->data_rep->revision
+ && rep_args->base_offset == source->data_rep->offset)
{
/* Create the delta read baton. */
struct delta_read_baton *drb = apr_pcalloc(pool, sizeof(*drb));
@@ -3846,11 +5407,83 @@ svn_fs_fs__get_file_delta_stream(svn_txdelta_stream_t **stream_p,
else
source_stream = svn_stream_empty(pool);
SVN_ERR(read_representation(&target_stream, fs, target->data_rep, pool));
- svn_txdelta(stream_p, source_stream, target_stream, pool);
+
+ /* Because source and target stream will already verify their content,
+ * there is no need to do this once more. In particular if the stream
+ * content is being fetched from cache. */
+ svn_txdelta2(stream_p, source_stream, target_stream, FALSE, pool);
return SVN_NO_ERROR;
}
+/* Baton for cache_access_wrapper. Wraps the original parameters of
+ * svn_fs_fs__try_process_file_content().
+ */
+typedef struct cache_access_wrapper_baton_t
+{
+ svn_fs_process_contents_func_t func;
+ void* baton;
+} cache_access_wrapper_baton_t;
+
+/* Wrapper to translate between svn_fs_process_contents_func_t and
+ * svn_cache__partial_getter_func_t.
+ */
+static svn_error_t *
+cache_access_wrapper(void **out,
+ const void *data,
+ apr_size_t data_len,
+ void *baton,
+ apr_pool_t *pool)
+{
+ cache_access_wrapper_baton_t *wrapper_baton = baton;
+
+ SVN_ERR(wrapper_baton->func((const unsigned char *)data,
+ data_len - 1, /* cache adds terminating 0 */
+ wrapper_baton->baton,
+ pool));
+
+ /* non-NULL value to signal the calling cache that all went well */
+ *out = baton;
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_fs_fs__try_process_file_contents(svn_boolean_t *success,
+ svn_fs_t *fs,
+ node_revision_t *noderev,
+ svn_fs_process_contents_func_t processor,
+ void* baton,
+ apr_pool_t *pool)
+{
+ representation_t *rep = noderev->data_rep;
+ if (rep)
+ {
+ fs_fs_data_t *ffd = fs->fsap_data;
+ pair_cache_key_t fulltext_cache_key = { 0 };
+
+ fulltext_cache_key.revision = rep->revision;
+ fulltext_cache_key.second = rep->offset;
+ if (ffd->fulltext_cache && SVN_IS_VALID_REVNUM(rep->revision)
+ && fulltext_size_is_cachable(ffd, rep->expanded_size))
+ {
+ cache_access_wrapper_baton_t wrapper_baton;
+ void *dummy = NULL;
+
+ wrapper_baton.func = processor;
+ wrapper_baton.baton = baton;
+ return svn_cache__get_partial(&dummy, success,
+ ffd->fulltext_cache,
+ &fulltext_cache_key,
+ cache_access_wrapper,
+ &wrapper_baton,
+ pool);
+ }
+ }
+
+ *success = FALSE;
+ return SVN_NO_ERROR;
+}
/* Fetch the contents of a directory into ENTRIES. Values are stored
as filename to string mappings; further conversion is necessary to
@@ -3877,10 +5510,27 @@ get_dir_contents(apr_hash_t *entries,
}
else if (noderev->data_rep)
{
+ /* use a temporary pool for temp objects.
+ * Also undeltify content before parsing it. Otherwise, we could only
+ * parse it byte-by-byte.
+ */
+ apr_pool_t *text_pool = svn_pool_create(pool);
+ apr_size_t len = noderev->data_rep->expanded_size
+ ? (apr_size_t)noderev->data_rep->expanded_size
+ : (apr_size_t)noderev->data_rep->size;
+ svn_stringbuf_t *text = svn_stringbuf_create_ensure(len, text_pool);
+ text->len = len;
+
/* The representation is immutable. Read it normally. */
- SVN_ERR(read_representation(&contents, fs, noderev->data_rep, pool));
- SVN_ERR(svn_hash_read2(entries, contents, SVN_HASH_TERMINATOR, pool));
+ SVN_ERR(read_representation(&contents, fs, noderev->data_rep, text_pool));
+ SVN_ERR(svn_stream_read(contents, text->data, &text->len));
SVN_ERR(svn_stream_close(contents));
+
+ /* de-serialize hash */
+ contents = svn_stream_from_stringbuf(text, text_pool);
+ SVN_ERR(svn_hash_read2(entries, contents, SVN_HASH_TERMINATOR, pool));
+
+ svn_pool_destroy(text_pool);
}
return SVN_NO_ERROR;
@@ -3907,7 +5557,14 @@ unparse_dir_entries(apr_hash_t **str_entries_p,
{
apr_hash_index_t *hi;
- *str_entries_p = apr_hash_make(pool);
+ /* For now, we use a our own hash function to ensure that we get a
+ * (largely) stable order when serializing the data. It also gives
+ * us some performance improvement.
+ *
+ * ### TODO ###
+ * Use some sorted or other fixed order data container.
+ */
+ *str_entries_p = svn_hash__make(pool);
for (hi = apr_hash_first(pool, entries); hi; hi = apr_hash_next(hi))
{
@@ -3947,10 +5604,10 @@ parse_dir_entries(apr_hash_t **entries_p,
char *str, *last_str;
svn_fs_dirent_t *dirent = apr_pcalloc(pool, sizeof(*dirent));
- str = apr_pstrdup(pool, str_val->data);
+ last_str = apr_pstrdup(pool, str_val->data);
dirent->name = apr_pstrdup(pool, name);
- str = apr_strtok(str, " ", &last_str);
+ str = svn_cstring_tokenize(" ", &last_str);
if (str == NULL)
return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
_("Directory entry corrupt in '%s'"),
@@ -3971,7 +5628,7 @@ parse_dir_entries(apr_hash_t **entries_p,
unparsed_id);
}
- str = apr_strtok(NULL, " ", &last_str);
+ str = svn_cstring_tokenize(" ", &last_str);
if (str == NULL)
return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
_("Directory entry corrupt in '%s'"),
@@ -3979,7 +5636,7 @@ parse_dir_entries(apr_hash_t **entries_p,
dirent->id = svn_fs_fs__id_parse(str, strlen(str), pool);
- apr_hash_set(*entries_p, dirent->name, APR_HASH_KEY_STRING, dirent);
+ svn_hash_sets(*entries_p, dirent->name, dirent);
}
return SVN_NO_ERROR;
@@ -4038,7 +5695,8 @@ svn_fs_fs__rep_contents_dir_entry(svn_fs_dirent_t **dirent,
svn_fs_t *fs,
node_revision_t *noderev,
const char *name,
- apr_pool_t *pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
svn_boolean_t found = FALSE;
@@ -4047,7 +5705,7 @@ svn_fs_fs__rep_contents_dir_entry(svn_fs_dirent_t **dirent,
if (cache)
{
const char *unparsed_id =
- svn_fs_fs__id_unparse(noderev->id, pool)->data;
+ svn_fs_fs__id_unparse(noderev->id, scratch_pool)->data;
/* Cache lookup. */
SVN_ERR(svn_cache__get_partial((void **)dirent,
@@ -4056,7 +5714,7 @@ svn_fs_fs__rep_contents_dir_entry(svn_fs_dirent_t **dirent,
unparsed_id,
svn_fs_fs__extract_dir_entry,
(void*)name,
- pool));
+ result_pool));
}
/* fetch data from disk if we did not find it in the cache */
@@ -4066,29 +5724,22 @@ svn_fs_fs__rep_contents_dir_entry(svn_fs_dirent_t **dirent,
svn_fs_dirent_t *entry;
svn_fs_dirent_t *entry_copy = NULL;
- /* since we don't need the directory content later on, put it into
- some sub-pool that will be reclaimed immedeately after exiting
- this function successfully. Opon failure, it will live as long
- as pool.
- */
- apr_pool_t *sub_pool = svn_pool_create(pool);
-
/* read the dir from the file system. It will probably be put it
into the cache for faster lookup in future calls. */
- SVN_ERR(svn_fs_fs__rep_contents_dir(&entries, fs, noderev, sub_pool));
+ SVN_ERR(svn_fs_fs__rep_contents_dir(&entries, fs, noderev,
+ scratch_pool));
/* find desired entry and return a copy in POOL, if found */
- entry = apr_hash_get(entries, name, APR_HASH_KEY_STRING);
+ entry = svn_hash_gets(entries, name);
if (entry != NULL)
{
- entry_copy = apr_palloc(pool, sizeof(*entry_copy));
- entry_copy->name = apr_pstrdup(pool, entry->name);
- entry_copy->id = svn_fs_fs__id_copy(entry->id, pool);
+ entry_copy = apr_palloc(result_pool, sizeof(*entry_copy));
+ entry_copy->name = apr_pstrdup(result_pool, entry->name);
+ entry_copy->id = svn_fs_fs__id_copy(entry->id, result_pool);
entry_copy->kind = entry->kind;
}
*dirent = entry_copy;
- apr_pool_destroy(sub_pool);
}
return SVN_NO_ERROR;
@@ -4103,11 +5754,10 @@ svn_fs_fs__get_proplist(apr_hash_t **proplist_p,
apr_hash_t *proplist;
svn_stream_t *stream;
- proplist = apr_hash_make(pool);
-
if (noderev->prop_rep && noderev->prop_rep->txn_id)
{
const char *filename = path_txn_node_props(fs, noderev->id, pool);
+ proplist = apr_hash_make(pool);
SVN_ERR(svn_stream_open_readonly(&stream, filename, pool, pool));
SVN_ERR(svn_hash_read2(proplist, stream, SVN_HASH_TERMINATOR, pool));
@@ -4115,9 +5765,33 @@ svn_fs_fs__get_proplist(apr_hash_t **proplist_p,
}
else if (noderev->prop_rep)
{
+ fs_fs_data_t *ffd = fs->fsap_data;
+ representation_t *rep = noderev->prop_rep;
+ pair_cache_key_t key = { 0 };
+
+ key.revision = rep->revision;
+ key.second = rep->offset;
+ if (ffd->properties_cache && SVN_IS_VALID_REVNUM(rep->revision))
+ {
+ svn_boolean_t is_cached;
+ SVN_ERR(svn_cache__get((void **) proplist_p, &is_cached,
+ ffd->properties_cache, &key, pool));
+ if (is_cached)
+ return SVN_NO_ERROR;
+ }
+
+ proplist = apr_hash_make(pool);
SVN_ERR(read_representation(&stream, fs, noderev->prop_rep, pool));
SVN_ERR(svn_hash_read2(proplist, stream, SVN_HASH_TERMINATOR, pool));
SVN_ERR(svn_stream_close(stream));
+
+ if (ffd->properties_cache && SVN_IS_VALID_REVNUM(rep->revision))
+ SVN_ERR(svn_cache__set(ffd->properties_cache, &key, proplist, pool));
+ }
+ else
+ {
+ /* return an empty prop list if the node doesn't have any props */
+ proplist = apr_hash_make(pool);
}
*proplist_p = proplist;
@@ -4222,8 +5896,9 @@ fold_change(apr_hash_t *changes,
apr_pool_t *pool = apr_hash_pool_get(changes);
svn_fs_path_change2_t *old_change, *new_change;
const char *path;
+ apr_size_t path_len = strlen(change->path);
- if ((old_change = apr_hash_get(changes, change->path, APR_HASH_KEY_STRING)))
+ if ((old_change = apr_hash_get(changes, change->path, path_len)))
{
/* This path already exists in the hash, so we have to merge
this change into the already existing one. */
@@ -4361,8 +6036,8 @@ fold_change(apr_hash_t *changes,
re-use its value, but there is no way to fetch it. The API makes no
guarantees that this (new) key will not be retained. Thus, we (again)
copy the key into the target pool to ensure a proper lifetime. */
- path = apr_pstrdup(pool, change->path);
- apr_hash_set(changes, path, APR_HASH_KEY_STRING, new_change);
+ path = apr_pstrmemdup(pool, change->path, path_len);
+ apr_hash_set(changes, path, path_len, new_change);
/* Update the copyfrom cache, if any. */
if (copyfrom_cache)
@@ -4380,10 +6055,12 @@ fold_change(apr_hash_t *changes,
}
/* We need to allocate a copy of the key in the copyfrom_pool if
* we're not doing a deletion and if it isn't already there. */
- if (copyfrom_string && ! apr_hash_get(copyfrom_cache, copyfrom_key,
- APR_HASH_KEY_STRING))
- copyfrom_key = apr_pstrdup(copyfrom_pool, copyfrom_key);
- apr_hash_set(copyfrom_cache, copyfrom_key, APR_HASH_KEY_STRING,
+ if ( copyfrom_string
+ && ( ! apr_hash_count(copyfrom_cache)
+ || ! apr_hash_get(copyfrom_cache, copyfrom_key, path_len)))
+ copyfrom_key = apr_pstrmemdup(copyfrom_pool, copyfrom_key, path_len);
+
+ apr_hash_set(copyfrom_cache, copyfrom_key, path_len,
copyfrom_string);
}
@@ -4405,7 +6082,7 @@ read_change(change_t **change_p,
char buf[MAX_CHANGE_LINE_LEN];
apr_size_t len = sizeof(buf);
change_t *change;
- char *str, *last_str, *kind_str;
+ char *str, *last_str = buf, *kind_str;
svn_error_t *err;
/* Default return value. */
@@ -4429,7 +6106,7 @@ read_change(change_t **change_p,
change = apr_pcalloc(pool, sizeof(*change));
/* Get the node-id of the change. */
- str = apr_strtok(buf, " ", &last_str);
+ str = svn_cstring_tokenize(" ", &last_str);
if (str == NULL)
return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
_("Invalid changes line in rev-file"));
@@ -4440,7 +6117,7 @@ read_change(change_t **change_p,
_("Invalid changes line in rev-file"));
/* Get the change type. */
- str = apr_strtok(NULL, " ", &last_str);
+ str = svn_cstring_tokenize(" ", &last_str);
if (str == NULL)
return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
_("Invalid changes line in rev-file"));
@@ -4490,7 +6167,7 @@ read_change(change_t **change_p,
}
/* Get the text-mod flag. */
- str = apr_strtok(NULL, " ", &last_str);
+ str = svn_cstring_tokenize(" ", &last_str);
if (str == NULL)
return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
_("Invalid changes line in rev-file"));
@@ -4510,7 +6187,7 @@ read_change(change_t **change_p,
}
/* Get the prop-mod flag. */
- str = apr_strtok(NULL, " ", &last_str);
+ str = svn_cstring_tokenize(" ", &last_str);
if (str == NULL)
return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
_("Invalid changes line in rev-file"));
@@ -4544,7 +6221,8 @@ read_change(change_t **change_p,
}
else
{
- str = apr_strtok(buf, " ", &last_str);
+ last_str = buf;
+ str = svn_cstring_tokenize(" ", &last_str);
if (! str)
return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
_("Invalid changes line in rev-file"));
@@ -4562,32 +6240,32 @@ read_change(change_t **change_p,
return SVN_NO_ERROR;
}
-/* Fetch all the changed path entries from FILE and store then in
+/* Examine all the changed path entries in CHANGES and store them in
*CHANGED_PATHS. Folding is done to remove redundant or unnecessary
- *data. Store a hash of paths to copyfrom revisions/paths in
+ *data. Store a hash of paths to copyfrom "REV PATH" strings in
COPYFROM_HASH if it is non-NULL. If PREFOLDED is true, assume that
the changed-path entries have already been folded (by
write_final_changed_path_info) and may be out of order, so we shouldn't
remove children of replaced or deleted directories. Do all
allocations in POOL. */
static svn_error_t *
-fetch_all_changes(apr_hash_t *changed_paths,
- apr_hash_t *copyfrom_hash,
- apr_file_t *file,
- svn_boolean_t prefolded,
- apr_pool_t *pool)
+process_changes(apr_hash_t *changed_paths,
+ apr_hash_t *copyfrom_cache,
+ apr_array_header_t *changes,
+ svn_boolean_t prefolded,
+ apr_pool_t *pool)
{
- change_t *change;
apr_pool_t *iterpool = svn_pool_create(pool);
+ int i;
/* Read in the changes one by one, folding them into our local hash
as necessary. */
- SVN_ERR(read_change(&change, file, iterpool));
-
- while (change)
+ for (i = 0; i < changes->nelts; ++i)
{
- SVN_ERR(fold_change(changed_paths, change, copyfrom_hash));
+ change_t *change = APR_ARRAY_IDX(changes, i, change_t *);
+
+ SVN_ERR(fold_change(changed_paths, change, copyfrom_cache));
/* Now, if our change was a deletion or replacement, we have to
blow away any changes thus far on paths that are (or, were)
@@ -4603,28 +6281,43 @@ fetch_all_changes(apr_hash_t *changed_paths,
{
apr_hash_index_t *hi;
+ /* a potential child path must contain at least 2 more chars
+ (the path separator plus at least one char for the name).
+ Also, we should not assume that all paths have been normalized
+ i.e. some might have trailing path separators.
+ */
+ apr_ssize_t change_path_len = strlen(change->path);
+ apr_ssize_t min_child_len = change_path_len == 0
+ ? 1
+ : change->path[change_path_len-1] == '/'
+ ? change_path_len + 1
+ : change_path_len + 2;
+
+ /* CAUTION: This is the inner loop of an O(n^2) algorithm.
+ The number of changes to process may be >> 1000.
+ Therefore, keep the inner loop as tight as possible.
+ */
for (hi = apr_hash_first(iterpool, changed_paths);
hi;
hi = apr_hash_next(hi))
{
/* KEY is the path. */
- const char *path = svn__apr_hash_index_key(hi);
- apr_ssize_t klen = svn__apr_hash_index_klen(hi);
-
- /* If we come across our own path, ignore it. */
- if (strcmp(change->path, path) == 0)
- continue;
-
- /* If we come across a child of our path, remove it. */
- if (svn_dirent_is_child(change->path, path, iterpool))
+ const void *path;
+ apr_ssize_t klen;
+ apr_hash_this(hi, &path, &klen, NULL);
+
+ /* If we come across a child of our path, remove it.
+ Call svn_dirent_is_child only if there is a chance that
+ this is actually a sub-path.
+ */
+ if ( klen >= min_child_len
+ && svn_dirent_is_child(change->path, path, iterpool))
apr_hash_set(changed_paths, path, klen, NULL);
}
}
/* Clear the per-iteration subpool. */
svn_pool_clear(iterpool);
-
- SVN_ERR(read_change(&change, file, iterpool));
}
/* Destroy the per-iteration subpool. */
@@ -4633,6 +6326,29 @@ fetch_all_changes(apr_hash_t *changed_paths,
return SVN_NO_ERROR;
}
+/* Fetch all the changes from FILE and store them in *CHANGES. Do all
+ allocations in POOL. */
+static svn_error_t *
+read_all_changes(apr_array_header_t **changes,
+ apr_file_t *file,
+ apr_pool_t *pool)
+{
+ change_t *change;
+
+ /* pre-allocate enough room for most change lists
+ (will be auto-expanded as necessary) */
+ *changes = apr_array_make(pool, 30, sizeof(change_t *));
+
+ SVN_ERR(read_change(&change, file, pool));
+ while (change)
+ {
+ APR_ARRAY_PUSH(*changes, change_t*) = change;
+ SVN_ERR(read_change(&change, file, pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
svn_error_t *
svn_fs_fs__txn_changes_fetch(apr_hash_t **changed_paths_p,
svn_fs_t *fs,
@@ -4641,11 +6357,15 @@ svn_fs_fs__txn_changes_fetch(apr_hash_t **changed_paths_p,
{
apr_file_t *file;
apr_hash_t *changed_paths = apr_hash_make(pool);
+ apr_array_header_t *changes;
+ apr_pool_t *scratch_pool = svn_pool_create(pool);
SVN_ERR(svn_io_file_open(&file, path_txn_changes(fs, txn_id, pool),
APR_READ | APR_BUFFERED, APR_OS_DEFAULT, pool));
- SVN_ERR(fetch_all_changes(changed_paths, NULL, file, FALSE, pool));
+ SVN_ERR(read_all_changes(&changes, file, scratch_pool));
+ SVN_ERR(process_changes(changed_paths, NULL, changes, FALSE, pool));
+ svn_pool_destroy(scratch_pool);
SVN_ERR(svn_io_file_close(file, pool));
@@ -4654,16 +6374,31 @@ svn_fs_fs__txn_changes_fetch(apr_hash_t **changed_paths_p,
return SVN_NO_ERROR;
}
-svn_error_t *
-svn_fs_fs__paths_changed(apr_hash_t **changed_paths_p,
- svn_fs_t *fs,
- svn_revnum_t rev,
- apr_hash_t *copyfrom_cache,
- apr_pool_t *pool)
+/* Fetch the list of change in revision REV in FS and return it in *CHANGES.
+ * Allocate the result in POOL.
+ */
+static svn_error_t *
+get_changes(apr_array_header_t **changes,
+ svn_fs_t *fs,
+ svn_revnum_t rev,
+ apr_pool_t *pool)
{
apr_off_t changes_offset;
- apr_hash_t *changed_paths;
apr_file_t *revision_file;
+ svn_boolean_t found;
+ fs_fs_data_t *ffd = fs->fsap_data;
+
+ /* try cache lookup first */
+
+ if (ffd->changes_cache)
+ {
+ SVN_ERR(svn_cache__get((void **) changes, &found, ffd->changes_cache,
+ &rev, pool));
+ if (found)
+ return SVN_NO_ERROR;
+ }
+
+ /* read changes from revision file */
SVN_ERR(ensure_revision_exists(fs, rev, pool));
@@ -4673,14 +6408,37 @@ svn_fs_fs__paths_changed(apr_hash_t **changed_paths_p,
rev, pool));
SVN_ERR(svn_io_file_seek(revision_file, APR_SET, &changes_offset, pool));
+ SVN_ERR(read_all_changes(changes, revision_file, pool));
- changed_paths = apr_hash_make(pool);
+ SVN_ERR(svn_io_file_close(revision_file, pool));
- SVN_ERR(fetch_all_changes(changed_paths, copyfrom_cache, revision_file,
- TRUE, pool));
+ /* cache for future reference */
- /* Close the revision file. */
- SVN_ERR(svn_io_file_close(revision_file, pool));
+ if (ffd->changes_cache)
+ SVN_ERR(svn_cache__set(ffd->changes_cache, &rev, *changes, pool));
+
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_fs_fs__paths_changed(apr_hash_t **changed_paths_p,
+ svn_fs_t *fs,
+ svn_revnum_t rev,
+ apr_hash_t *copyfrom_cache,
+ apr_pool_t *pool)
+{
+ apr_hash_t *changed_paths;
+ apr_array_header_t *changes;
+ apr_pool_t *scratch_pool = svn_pool_create(pool);
+
+ SVN_ERR(get_changes(&changes, fs, rev, scratch_pool));
+
+ changed_paths = svn_hash__make(pool);
+
+ SVN_ERR(process_changes(changed_paths, copyfrom_cache, changes,
+ TRUE, pool));
+ svn_pool_destroy(scratch_pool);
*changed_paths_p = changed_paths;
@@ -4734,40 +6492,17 @@ get_and_increment_txn_key_body(void *baton, apr_pool_t *pool)
{
struct get_and_increment_txn_key_baton *cb = baton;
const char *txn_current_filename = path_txn_current(cb->fs, pool);
- apr_file_t *txn_current_file = NULL;
const char *tmp_filename;
char next_txn_id[MAX_KEY_SIZE+3];
- svn_error_t *err = SVN_NO_ERROR;
- apr_pool_t *iterpool;
apr_size_t len;
- int i;
-
- cb->txn_id = apr_palloc(cb->pool, MAX_KEY_SIZE);
-
- iterpool = svn_pool_create(pool);
- for (i = 0; i < RECOVERABLE_RETRY_COUNT; ++i)
- {
- svn_pool_clear(iterpool);
- RETRY_RECOVERABLE(err, txn_current_file,
- svn_io_file_open(&txn_current_file,
- txn_current_filename,
- APR_READ | APR_BUFFERED,
- APR_OS_DEFAULT, iterpool));
- len = MAX_KEY_SIZE;
- RETRY_RECOVERABLE(err, txn_current_file,
- svn_io_read_length_line(txn_current_file,
- cb->txn_id,
- &len,
- iterpool));
- IGNORE_RECOVERABLE(err, svn_io_file_close(txn_current_file,
- iterpool));
+ svn_stringbuf_t *buf;
+ SVN_ERR(read_content(&buf, txn_current_filename, cb->pool));
- break;
- }
- SVN_ERR(err);
-
- svn_pool_destroy(iterpool);
+ /* remove trailing newlines */
+ svn_stringbuf_strip_whitespace(buf);
+ cb->txn_id = buf->data;
+ len = buf->len;
/* Increment the key and add a trailing \n to the string so the
txn-current file has a newline in it. */
@@ -4979,7 +6714,7 @@ svn_fs_fs__change_txn_props(svn_fs_txn_t *txn,
{
svn_prop_t *prop = &APR_ARRAY_IDX(props, i, svn_prop_t);
- apr_hash_set(txn_prop, prop->name, APR_HASH_KEY_STRING, prop->value);
+ svn_hash_sets(txn_prop, prop->name, prop->value);
}
/* Create a new version of the file and write out the new props. */
@@ -5068,7 +6803,7 @@ read_next_ids(const char **node_id,
apr_file_t *file;
char buf[MAX_KEY_SIZE*2+3];
apr_size_t limit;
- char *str, *last_str;
+ char *str, *last_str = buf;
SVN_ERR(svn_io_file_open(&file, path_txn_next_ids(fs, txn_id, pool),
APR_READ | APR_BUFFERED, APR_OS_DEFAULT, pool));
@@ -5080,14 +6815,14 @@ read_next_ids(const char **node_id,
/* Parse this into two separate strings. */
- str = apr_strtok(buf, " ", &last_str);
+ str = svn_cstring_tokenize(" ", &last_str);
if (! str)
return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
_("next-id file corrupt"));
*node_id = apr_pstrdup(pool, str);
- str = apr_strtok(NULL, " ", &last_str);
+ str = svn_cstring_tokenize(" ", &last_str);
if (! str)
return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
_("next-id file corrupt"));
@@ -5207,35 +6942,37 @@ svn_fs_fs__set_entry(svn_fs_t *fs,
apr_file_t *file;
svn_stream_t *out;
fs_fs_data_t *ffd = fs->fsap_data;
+ apr_pool_t *subpool = svn_pool_create(pool);
if (!rep || !rep->txn_id)
{
const char *unique_suffix;
+ apr_hash_t *entries;
- {
- apr_hash_t *entries;
- apr_pool_t *subpool = svn_pool_create(pool);
-
- /* Before we can modify the directory, we need to dump its old
- contents into a mutable representation file. */
- SVN_ERR(svn_fs_fs__rep_contents_dir(&entries, fs, parent_noderev,
- subpool));
- SVN_ERR(unparse_dir_entries(&entries, entries, subpool));
- SVN_ERR(svn_io_file_open(&file, filename,
- APR_WRITE | APR_CREATE | APR_BUFFERED,
- APR_OS_DEFAULT, pool));
- out = svn_stream_from_aprfile2(file, TRUE, pool);
- SVN_ERR(svn_hash_write2(entries, out, SVN_HASH_TERMINATOR, subpool));
-
- svn_pool_destroy(subpool);
- }
+ /* Before we can modify the directory, we need to dump its old
+ contents into a mutable representation file. */
+ SVN_ERR(svn_fs_fs__rep_contents_dir(&entries, fs, parent_noderev,
+ subpool));
+ SVN_ERR(unparse_dir_entries(&entries, entries, subpool));
+ SVN_ERR(svn_io_file_open(&file, filename,
+ APR_WRITE | APR_CREATE | APR_BUFFERED,
+ APR_OS_DEFAULT, pool));
+ out = svn_stream_from_aprfile2(file, TRUE, pool);
+ SVN_ERR(svn_hash_write2(entries, out, SVN_HASH_TERMINATOR, subpool));
+
+ svn_pool_clear(subpool);
/* Mark the node-rev's data rep as mutable. */
rep = apr_pcalloc(pool, sizeof(*rep));
rep->revision = SVN_INVALID_REVNUM;
rep->txn_id = txn_id;
- SVN_ERR(get_new_txn_node_id(&unique_suffix, fs, txn_id, pool));
- rep->uniquifier = apr_psprintf(pool, "%s/%s", txn_id, unique_suffix);
+
+ if (ffd->format >= SVN_FS_FS__MIN_REP_SHARING_FORMAT)
+ {
+ SVN_ERR(get_new_txn_node_id(&unique_suffix, fs, txn_id, pool));
+ rep->uniquifier = apr_psprintf(pool, "%s/%s", txn_id, unique_suffix);
+ }
+
parent_noderev->data_rep = rep;
SVN_ERR(svn_fs_fs__put_node_revision(fs, parent_noderev->id,
parent_noderev, FALSE, pool));
@@ -5251,12 +6988,11 @@ svn_fs_fs__set_entry(svn_fs_t *fs,
/* if we have a directory cache for this transaction, update it */
if (ffd->txn_dir_cache)
{
- apr_pool_t *subpool = svn_pool_create(pool);
-
/* build parameters: (name, new entry) pair */
const char *key =
svn_fs_fs__id_unparse(parent_noderev->id, subpool)->data;
replace_baton_t baton;
+
baton.name = name;
baton.new_entry = NULL;
@@ -5269,28 +7005,31 @@ svn_fs_fs__set_entry(svn_fs_t *fs,
}
/* actually update the cached directory (if cached) */
- SVN_ERR(svn_cache__set_partial(ffd->txn_dir_cache, key, svn_fs_fs__replace_dir_entry, &baton, subpool));
-
- svn_pool_destroy(subpool);
+ SVN_ERR(svn_cache__set_partial(ffd->txn_dir_cache, key,
+ svn_fs_fs__replace_dir_entry, &baton,
+ subpool));
}
+ svn_pool_clear(subpool);
/* Append an incremental hash entry for the entry change. */
if (id)
{
- const char *val = unparse_dir_entry(kind, id, pool);
+ const char *val = unparse_dir_entry(kind, id, subpool);
- SVN_ERR(svn_stream_printf(out, pool, "K %" APR_SIZE_T_FMT "\n%s\n"
+ SVN_ERR(svn_stream_printf(out, subpool, "K %" APR_SIZE_T_FMT "\n%s\n"
"V %" APR_SIZE_T_FMT "\n%s\n",
strlen(name), name,
strlen(val), val));
}
else
{
- SVN_ERR(svn_stream_printf(out, pool, "D %" APR_SIZE_T_FMT "\n%s\n",
+ SVN_ERR(svn_stream_printf(out, subpool, "D %" APR_SIZE_T_FMT "\n%s\n",
strlen(name), name));
}
- return svn_io_file_close(file, pool);
+ SVN_ERR(svn_io_file_close(file, subpool));
+ svn_pool_destroy(subpool);
+ return SVN_NO_ERROR;
}
/* Write a single change entry, path PATH, change CHANGE, and copyfrom
@@ -5458,15 +7197,21 @@ rep_write_contents(void *baton,
/* Given a node-revision NODEREV in filesystem FS, return the
representation in *REP to use as the base for a text representation
- delta. Perform temporary allocations in *POOL. */
+ delta if PROPS is FALSE. If PROPS has been set, a suitable props
+ base representation will be returned. Perform temporary allocations
+ in *POOL. */
static svn_error_t *
choose_delta_base(representation_t **rep,
svn_fs_t *fs,
node_revision_t *noderev,
+ svn_boolean_t props,
apr_pool_t *pool)
{
int count;
+ int walk;
node_revision_t *base;
+ fs_fs_data_t *ffd = fs->fsap_data;
+ svn_boolean_t maybe_shared_rep = FALSE;
/* If we have no predecessors, then use the empty stream as a
base. */
@@ -5483,20 +7228,141 @@ choose_delta_base(representation_t **rep,
count = noderev->predecessor_count;
count = count & (count - 1);
+ /* We use skip delta for limiting the number of delta operations
+ along very long node histories. Close to HEAD however, we create
+ a linear history to minimize delta size. */
+ walk = noderev->predecessor_count - count;
+ if (walk < (int)ffd->max_linear_deltification)
+ count = noderev->predecessor_count - 1;
+
+ /* Finding the delta base over a very long distance can become extremely
+ expensive for very deep histories, possibly causing client timeouts etc.
+ OTOH, this is a rare operation and its gains are minimal. Lets simply
+ start deltification anew close every other 1000 changes or so. */
+ if (walk > (int)ffd->max_deltification_walk)
+ {
+ *rep = NULL;
+ return SVN_NO_ERROR;
+ }
+
/* Walk back a number of predecessors equal to the difference
between count and the original predecessor count. (For example,
if noderev has ten predecessors and we want the eighth file rev,
walk back two predecessors.) */
base = noderev;
while ((count++) < noderev->predecessor_count)
- SVN_ERR(svn_fs_fs__get_node_revision(&base, fs,
- base->predecessor_id, pool));
+ {
+ SVN_ERR(svn_fs_fs__get_node_revision(&base, fs,
+ base->predecessor_id, pool));
+
+ /* If there is a shared rep along the way, we need to limit the
+ * length of the deltification chain.
+ *
+ * Please note that copied nodes - such as branch directories - will
+ * look the same (false positive) while reps shared within the same
+ * revision will not be caught (false negative).
+ */
+ if (props)
+ {
+ if ( base->prop_rep
+ && svn_fs_fs__id_rev(base->id) > base->prop_rep->revision)
+ maybe_shared_rep = TRUE;
+ }
+ else
+ {
+ if ( base->data_rep
+ && svn_fs_fs__id_rev(base->id) > base->data_rep->revision)
+ maybe_shared_rep = TRUE;
+ }
+ }
+
+ /* return a suitable base representation */
+ *rep = props ? base->prop_rep : base->data_rep;
+
+ /* if we encountered a shared rep, it's parent chain may be different
+ * from the node-rev parent chain. */
+ if (*rep && maybe_shared_rep)
+ {
+ /* Check whether the length of the deltification chain is acceptable.
+ * Otherwise, shared reps may form a non-skipping delta chain in
+ * extreme cases. */
+ apr_pool_t *sub_pool = svn_pool_create(pool);
+ representation_t base_rep = **rep;
+
+ /* Some reasonable limit, depending on how acceptable longer linear
+ * chains are in this repo. Also, allow for some minimal chain. */
+ int max_chain_length = 2 * (int)ffd->max_linear_deltification + 2;
- *rep = base->data_rep;
+ /* re-use open files between iterations */
+ svn_revnum_t rev_hint = SVN_INVALID_REVNUM;
+ apr_file_t *file_hint = NULL;
+ /* follow the delta chain towards the end but for at most
+ * MAX_CHAIN_LENGTH steps. */
+ for (; max_chain_length; --max_chain_length)
+ {
+ struct rep_state *rep_state;
+ struct rep_args *rep_args;
+
+ SVN_ERR(create_rep_state_body(&rep_state,
+ &rep_args,
+ &file_hint,
+ &rev_hint,
+ &base_rep,
+ fs,
+ sub_pool));
+ if (!rep_args->is_delta || !rep_args->base_revision)
+ break;
+
+ base_rep.revision = rep_args->base_revision;
+ base_rep.offset = rep_args->base_offset;
+ base_rep.size = rep_args->base_length;
+ base_rep.txn_id = NULL;
+ }
+
+ /* start new delta chain if the current one has grown too long */
+ if (max_chain_length == 0)
+ *rep = NULL;
+
+ svn_pool_destroy(sub_pool);
+ }
+
+ /* verify that the reps don't form a degenerated '*/
return SVN_NO_ERROR;
}
+/* Something went wrong and the pool for the rep write is being
+ cleared before we've finished writing the rep. So we need
+ to remove the rep from the protorevfile and we need to unlock
+ the protorevfile. */
+static apr_status_t
+rep_write_cleanup(void *data)
+{
+ struct rep_write_baton *b = data;
+ const char *txn_id = svn_fs_fs__id_txn_id(b->noderev->id);
+ svn_error_t *err;
+
+ /* Truncate and close the protorevfile. */
+ err = svn_io_file_trunc(b->file, b->rep_offset, b->pool);
+ err = svn_error_compose_create(err, svn_io_file_close(b->file, b->pool));
+
+ /* Remove our lock regardless of any preceeding errors so that the
+ being_written flag is always removed and stays consistent with the
+ file lock which will be removed no matter what since the pool is
+ going away. */
+ err = svn_error_compose_create(err, unlock_proto_rev(b->fs, txn_id,
+ b->lockcookie, b->pool));
+ if (err)
+ {
+ apr_status_t rc = err->apr_err;
+ svn_error_clear(err);
+ return rc;
+ }
+
+ return APR_SUCCESS;
+}
+
+
/* Get a rep_write_baton and store it in *WB_P for the representation
indicated by NODEREV in filesystem FS. Perform allocations in
POOL. Only appropriate for file contents, not for props or
@@ -5539,7 +7405,7 @@ rep_write_get_baton(struct rep_write_baton **wb_p,
SVN_ERR(get_file_offset(&b->rep_offset, file, b->pool));
/* Get the base for this delta. */
- SVN_ERR(choose_delta_base(&base_rep, fs, noderev, b->pool));
+ SVN_ERR(choose_delta_base(&base_rep, fs, noderev, FALSE, b->pool));
SVN_ERR(read_representation(&source, fs, base_rep, b->pool));
/* Write out the rep header. */
@@ -5560,6 +7426,10 @@ rep_write_get_baton(struct rep_write_baton **wb_p,
/* Now determine the offset of the actual svndiff data. */
SVN_ERR(get_file_offset(&b->delta_start, file, b->pool));
+ /* Cleanup in case something goes wrong. */
+ apr_pool_cleanup_register(b->pool, b, rep_write_cleanup,
+ apr_pool_cleanup_null);
+
/* Prepare to write the svndiff data. */
svn_txdelta_to_svndiff3(&wh,
&whb,
@@ -5575,6 +7445,106 @@ rep_write_get_baton(struct rep_write_baton **wb_p,
return SVN_NO_ERROR;
}
+/* For the hash REP->SHA1, try to find an already existing representation
+ in FS and return it in *OUT_REP. If no such representation exists or
+ if rep sharing has been disabled for FS, NULL will be returned. Since
+ there may be new duplicate representations within the same uncommitted
+ revision, those can be passed in REPS_HASH (maps a sha1 digest onto
+ representation_t*), otherwise pass in NULL for REPS_HASH.
+ POOL will be used for allocations. The lifetime of the returned rep is
+ limited by both, POOL and REP lifetime.
+ */
+static svn_error_t *
+get_shared_rep(representation_t **old_rep,
+ svn_fs_t *fs,
+ representation_t *rep,
+ apr_hash_t *reps_hash,
+ apr_pool_t *pool)
+{
+ svn_error_t *err;
+ fs_fs_data_t *ffd = fs->fsap_data;
+
+ /* Return NULL, if rep sharing has been disabled. */
+ *old_rep = NULL;
+ if (!ffd->rep_sharing_allowed)
+ return SVN_NO_ERROR;
+
+ /* Check and see if we already have a representation somewhere that's
+ identical to the one we just wrote out. Start with the hash lookup
+ because it is cheepest. */
+ if (reps_hash)
+ *old_rep = apr_hash_get(reps_hash,
+ rep->sha1_checksum->digest,
+ APR_SHA1_DIGESTSIZE);
+
+ /* If we haven't found anything yet, try harder and consult our DB. */
+ if (*old_rep == NULL)
+ {
+ err = svn_fs_fs__get_rep_reference(old_rep, fs, rep->sha1_checksum,
+ pool);
+ /* ### Other error codes that we shouldn't mask out? */
+ if (err == SVN_NO_ERROR)
+ {
+ if (*old_rep)
+ SVN_ERR(verify_walker(*old_rep, NULL, fs, pool));
+ }
+ else if (err->apr_err == SVN_ERR_FS_CORRUPT
+ || SVN_ERROR_IN_CATEGORY(err->apr_err,
+ SVN_ERR_MALFUNC_CATEGORY_START))
+ {
+ /* Fatal error; don't mask it.
+
+ In particular, this block is triggered when the rep-cache refers
+ to revisions in the future. We signal that as a corruption situation
+ since, once those revisions are less than youngest (because of more
+ commits), the rep-cache would be invalid.
+ */
+ SVN_ERR(err);
+ }
+ else
+ {
+ /* Something's wrong with the rep-sharing index. We can continue
+ without rep-sharing, but warn.
+ */
+ (fs->warning)(fs->warning_baton, err);
+ svn_error_clear(err);
+ *old_rep = NULL;
+ }
+ }
+
+ /* look for intra-revision matches (usually data reps but not limited
+ to them in case props happen to look like some data rep)
+ */
+ if (*old_rep == NULL && rep->txn_id)
+ {
+ svn_node_kind_t kind;
+ const char *file_name
+ = path_txn_sha1(fs, rep->txn_id, rep->sha1_checksum, pool);
+
+ /* in our txn, is there a rep file named with the wanted SHA1?
+ If so, read it and use that rep.
+ */
+ SVN_ERR(svn_io_check_path(file_name, &kind, pool));
+ if (kind == svn_node_file)
+ {
+ svn_stringbuf_t *rep_string;
+ SVN_ERR(svn_stringbuf_from_file2(&rep_string, file_name, pool));
+ SVN_ERR(read_rep_offsets_body(old_rep, rep_string->data,
+ rep->txn_id, FALSE, pool));
+ }
+ }
+
+ /* Add information that is missing in the cached data. */
+ if (*old_rep)
+ {
+ /* Use the old rep for this content. */
+ (*old_rep)->md5_checksum = rep->md5_checksum;
+ (*old_rep)->uniquifier = rep->uniquifier;
+ }
+
+ return SVN_NO_ERROR;
+}
+
/* Close handler for the representation write stream. BATON is a
rep_write_baton. Writes out a new node-rev that correctly
references the representation we just finished writing. */
@@ -5582,11 +7552,11 @@ static svn_error_t *
rep_write_contents_close(void *baton)
{
struct rep_write_baton *b = baton;
- fs_fs_data_t *ffd = b->fs->fsap_data;
const char *unique_suffix;
representation_t *rep;
representation_t *old_rep;
apr_off_t offset;
+ fs_fs_data_t *ffd = b->fs->fsap_data;
rep = apr_pcalloc(b->parent_pool, sizeof(*rep));
rep->offset = b->rep_offset;
@@ -5603,9 +7573,13 @@ rep_write_contents_close(void *baton)
/* Fill in the rest of the representation field. */
rep->expanded_size = b->rep_size;
rep->txn_id = svn_fs_fs__id_txn_id(b->noderev->id);
- SVN_ERR(get_new_txn_node_id(&unique_suffix, b->fs, rep->txn_id, b->pool));
- rep->uniquifier = apr_psprintf(b->parent_pool, "%s/%s", rep->txn_id,
- unique_suffix);
+
+ if (ffd->format >= SVN_FS_FS__MIN_REP_SHARING_FORMAT)
+ {
+ SVN_ERR(get_new_txn_node_id(&unique_suffix, b->fs, rep->txn_id, b->pool));
+ rep->uniquifier = apr_psprintf(b->parent_pool, "%s/%s", rep->txn_id,
+ unique_suffix);
+ }
rep->revision = SVN_INVALID_REVNUM;
/* Finalize the checksum. */
@@ -5616,38 +7590,7 @@ rep_write_contents_close(void *baton)
/* Check and see if we already have a representation somewhere that's
identical to the one we just wrote out. */
- if (ffd->rep_sharing_allowed)
- {
- svn_error_t *err;
- err = svn_fs_fs__get_rep_reference(&old_rep, b->fs, rep->sha1_checksum,
- b->parent_pool);
- /* ### Other error codes that we shouldn't mask out? */
- if (err == SVN_NO_ERROR
- || err->apr_err == SVN_ERR_FS_CORRUPT
- || SVN_ERROR_IN_CATEGORY(err->apr_err,
- SVN_ERR_MALFUNC_CATEGORY_START))
- {
- /* Fatal error; don't mask it.
-
- In particular, this block is triggered when the rep-cache refers
- to revisions in the future. We signal that as a corruption situation
- since, once those revisions are less than youngest (because of more
- commits), the rep-cache would be invalid.
- */
- SVN_ERR(err);
- }
- else
- {
- /* Something's wrong with the rep-sharing index. We can continue
- without rep-sharing, but warn.
- */
- (b->fs->warning)(b->fs->warning_baton, err);
- svn_error_clear(err);
- old_rep = NULL;
- }
- }
- else
- old_rep = NULL;
+ SVN_ERR(get_shared_rep(&old_rep, b->fs, rep, NULL, b->parent_pool));
if (old_rep)
{
@@ -5655,21 +7598,24 @@ rep_write_contents_close(void *baton)
SVN_ERR(svn_io_file_trunc(b->file, b->rep_offset, b->pool));
/* Use the old rep for this content. */
- old_rep->md5_checksum = rep->md5_checksum;
- old_rep->uniquifier = rep->uniquifier;
b->noderev->data_rep = old_rep;
}
else
{
/* Write out our cosmetic end marker. */
- SVN_ERR(svn_stream_printf(b->rep_stream, b->pool, "ENDREP\n"));
+ SVN_ERR(svn_stream_puts(b->rep_stream, "ENDREP\n"));
b->noderev->data_rep = rep;
}
+ /* Remove cleanup callback. */
+ apr_pool_cleanup_kill(b->pool, b, rep_write_cleanup);
+
/* Write out the new node-rev information. */
SVN_ERR(svn_fs_fs__put_node_revision(b->fs, b->noderev->id, b->noderev, FALSE,
b->pool));
+ if (!old_rep)
+ SVN_ERR(store_sha1_rep_mapping(b->fs, b->noderev, b->pool));
SVN_ERR(svn_io_file_close(b->file, b->pool));
SVN_ERR(unlock_proto_rev(b->fs, rep->txn_id, b->lockcookie, b->pool));
@@ -5790,23 +7736,25 @@ get_next_revision_ids(const char **node_id,
apr_pool_t *pool)
{
char *buf;
- char *str, *last_str;
+ char *str;
+ svn_stringbuf_t *content;
- SVN_ERR(read_current(svn_fs_fs__path_current(fs, pool), &buf, pool));
+ SVN_ERR(read_content(&content, svn_fs_fs__path_current(fs, pool), pool));
+ buf = content->data;
- str = apr_strtok(buf, " ", &last_str);
+ str = svn_cstring_tokenize(" ", &buf);
if (! str)
return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
_("Corrupt 'current' file"));
- str = apr_strtok(NULL, " ", &last_str);
+ str = svn_cstring_tokenize(" ", &buf);
if (! str)
return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
_("Corrupt 'current' file"));
*node_id = apr_pstrdup(pool, str);
- str = apr_strtok(NULL, " ", &last_str);
+ str = svn_cstring_tokenize(" \n", &buf);
if (! str)
return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
_("Corrupt 'current' file"));
@@ -5823,7 +7771,8 @@ struct write_hash_baton
apr_size_t size;
- svn_checksum_ctx_t *checksum_ctx;
+ svn_checksum_ctx_t *md5_ctx;
+ svn_checksum_ctx_t *sha1_ctx;
};
/* The handler for the write_hash_rep stream. BATON is a
@@ -5836,7 +7785,8 @@ write_hash_handler(void *baton,
{
struct write_hash_baton *whb = baton;
- SVN_ERR(svn_checksum_update(whb->checksum_ctx, data, *len));
+ SVN_ERR(svn_checksum_update(whb->md5_ctx, data, *len));
+ SVN_ERR(svn_checksum_update(whb->sha1_ctx, data, *len));
SVN_ERR(svn_stream_write(whb->stream, data, len));
whb->size += *len;
@@ -5845,41 +7795,184 @@ write_hash_handler(void *baton,
}
/* Write out the hash HASH as a text representation to file FILE. In
- the process, record the total size of the dump in *SIZE, and the
- md5 digest in CHECKSUM. Perform temporary allocations in POOL. */
+ the process, record position, the total size of the dump and MD5 as
+ well as SHA1 in REP. If rep sharing has been enabled and REPS_HASH
+ is not NULL, it will be used in addition to the on-disk cache to find
+ earlier reps with the same content. When such existing reps can be
+ found, we will truncate the one just written from the file and return
+ the existing rep. Perform temporary allocations in POOL. */
static svn_error_t *
-write_hash_rep(svn_filesize_t *size,
- svn_checksum_t **checksum,
+write_hash_rep(representation_t *rep,
apr_file_t *file,
apr_hash_t *hash,
+ svn_fs_t *fs,
+ apr_hash_t *reps_hash,
apr_pool_t *pool)
{
svn_stream_t *stream;
struct write_hash_baton *whb;
+ representation_t *old_rep;
+
+ SVN_ERR(get_file_offset(&rep->offset, file, pool));
whb = apr_pcalloc(pool, sizeof(*whb));
whb->stream = svn_stream_from_aprfile2(file, TRUE, pool);
whb->size = 0;
- whb->checksum_ctx = svn_checksum_ctx_create(svn_checksum_md5, pool);
+ whb->md5_ctx = svn_checksum_ctx_create(svn_checksum_md5, pool);
+ whb->sha1_ctx = svn_checksum_ctx_create(svn_checksum_sha1, pool);
stream = svn_stream_create(whb, pool);
svn_stream_set_write(stream, write_hash_handler);
- SVN_ERR(svn_stream_printf(whb->stream, pool, "PLAIN\n"));
+ SVN_ERR(svn_stream_puts(whb->stream, "PLAIN\n"));
SVN_ERR(svn_hash_write2(hash, stream, SVN_HASH_TERMINATOR, pool));
/* Store the results. */
- SVN_ERR(svn_checksum_final(checksum, whb->checksum_ctx, pool));
- *size = whb->size;
+ SVN_ERR(svn_checksum_final(&rep->md5_checksum, whb->md5_ctx, pool));
+ SVN_ERR(svn_checksum_final(&rep->sha1_checksum, whb->sha1_ctx, pool));
+
+ /* Check and see if we already have a representation somewhere that's
+ identical to the one we just wrote out. */
+ SVN_ERR(get_shared_rep(&old_rep, fs, rep, reps_hash, pool));
+
+ if (old_rep)
+ {
+ /* We need to erase from the protorev the data we just wrote. */
+ SVN_ERR(svn_io_file_trunc(file, rep->offset, pool));
+
+ /* Use the old rep for this content. */
+ memcpy(rep, old_rep, sizeof (*rep));
+ }
+ else
+ {
+ /* Write out our cosmetic end marker. */
+ SVN_ERR(svn_stream_puts(whb->stream, "ENDREP\n"));
+
+ /* update the representation */
+ rep->size = whb->size;
+ rep->expanded_size = whb->size;
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Write out the hash HASH pertaining to the NODEREV in FS as a deltified
+ text representation to file FILE. In the process, record the total size
+ and the md5 digest in REP. If rep sharing has been enabled and REPS_HASH
+ is not NULL, it will be used in addition to the on-disk cache to find
+ earlier reps with the same content. When such existing reps can be found,
+ we will truncate the one just written from the file and return the existing
+ rep. If PROPS is set, assume that we want to a props representation as
+ the base for our delta. Perform temporary allocations in POOL. */
+static svn_error_t *
+write_hash_delta_rep(representation_t *rep,
+ apr_file_t *file,
+ apr_hash_t *hash,
+ svn_fs_t *fs,
+ node_revision_t *noderev,
+ apr_hash_t *reps_hash,
+ svn_boolean_t props,
+ apr_pool_t *pool)
+{
+ svn_txdelta_window_handler_t diff_wh;
+ void *diff_whb;
+
+ svn_stream_t *file_stream;
+ svn_stream_t *stream;
+ representation_t *base_rep;
+ representation_t *old_rep;
+ svn_stream_t *source;
+ const char *header;
+
+ apr_off_t rep_end = 0;
+ apr_off_t delta_start = 0;
+
+ struct write_hash_baton *whb;
+ fs_fs_data_t *ffd = fs->fsap_data;
+ int diff_version = ffd->format >= SVN_FS_FS__MIN_SVNDIFF1_FORMAT ? 1 : 0;
+
+ /* Get the base for this delta. */
+ SVN_ERR(choose_delta_base(&base_rep, fs, noderev, props, pool));
+ SVN_ERR(read_representation(&source, fs, base_rep, pool));
+
+ SVN_ERR(get_file_offset(&rep->offset, file, pool));
+
+ /* Write out the rep header. */
+ if (base_rep)
+ {
+ header = apr_psprintf(pool, REP_DELTA " %ld %" APR_OFF_T_FMT " %"
+ SVN_FILESIZE_T_FMT "\n",
+ base_rep->revision, base_rep->offset,
+ base_rep->size);
+ }
+ else
+ {
+ header = REP_DELTA "\n";
+ }
+ SVN_ERR(svn_io_file_write_full(file, header, strlen(header), NULL,
+ pool));
+
+ SVN_ERR(get_file_offset(&delta_start, file, pool));
+ file_stream = svn_stream_from_aprfile2(file, TRUE, pool);
+
+ /* Prepare to write the svndiff data. */
+ svn_txdelta_to_svndiff3(&diff_wh,
+ &diff_whb,
+ file_stream,
+ diff_version,
+ SVN_DELTA_COMPRESSION_LEVEL_DEFAULT,
+ pool);
+
+ whb = apr_pcalloc(pool, sizeof(*whb));
+ whb->stream = svn_txdelta_target_push(diff_wh, diff_whb, source, pool);
+ whb->size = 0;
+ whb->md5_ctx = svn_checksum_ctx_create(svn_checksum_md5, pool);
+ whb->sha1_ctx = svn_checksum_ctx_create(svn_checksum_sha1, pool);
+
+ /* serialize the hash */
+ stream = svn_stream_create(whb, pool);
+ svn_stream_set_write(stream, write_hash_handler);
+
+ SVN_ERR(svn_hash_write2(hash, stream, SVN_HASH_TERMINATOR, pool));
+ SVN_ERR(svn_stream_close(whb->stream));
+
+ /* Store the results. */
+ SVN_ERR(svn_checksum_final(&rep->md5_checksum, whb->md5_ctx, pool));
+ SVN_ERR(svn_checksum_final(&rep->sha1_checksum, whb->sha1_ctx, pool));
+
+ /* Check and see if we already have a representation somewhere that's
+ identical to the one we just wrote out. */
+ SVN_ERR(get_shared_rep(&old_rep, fs, rep, reps_hash, pool));
+
+ if (old_rep)
+ {
+ /* We need to erase from the protorev the data we just wrote. */
+ SVN_ERR(svn_io_file_trunc(file, rep->offset, pool));
+
+ /* Use the old rep for this content. */
+ memcpy(rep, old_rep, sizeof (*rep));
+ }
+ else
+ {
+ /* Write out our cosmetic end marker. */
+ SVN_ERR(get_file_offset(&rep_end, file, pool));
+ SVN_ERR(svn_stream_puts(file_stream, "ENDREP\n"));
+
+ /* update the representation */
+ rep->expanded_size = whb->size;
+ rep->size = rep_end - delta_start;
+ }
- return svn_stream_printf(whb->stream, pool, "ENDREP\n");
+ return SVN_NO_ERROR;
}
/* Sanity check ROOT_NODEREV, a candidate for being the root node-revision
of (not yet committed) revision REV in FS. Use POOL for temporary
allocations.
+
+ If you change this function, consider updating svn_fs_fs__verify() too.
*/
static svn_error_t *
validate_root_noderev(svn_fs_t *fs,
@@ -5911,7 +8004,7 @@ validate_root_noderev(svn_fs_t *fs,
This kind of corruption was seen on svn.apache.org (both on
the root noderev and on other fspaths' noderevs); see
- http://mid.gmane.org/20111002202833.GA12373@daniel3.local
+ issue #4129.
Normally (rev == root_noderev->predecessor_count), but here we
use a more roundabout check that should only trigger on new instances
@@ -5953,6 +8046,10 @@ validate_root_noderev(svn_fs_t *fs,
If REPS_TO_CACHE is not NULL, append to it a copy (allocated in
REPS_POOL) of each data rep that is new in this revision.
+ If REPS_HASH is not NULL, append copies (allocated in REPS_POOL)
+ of the representations of each property rep that is new in this
+ revision.
+
AT_ROOT is true if the node revision being written is the root
node-revision. It is only controls additional sanity checking
logic.
@@ -5968,6 +8065,7 @@ write_final_rev(const svn_fs_id_t **new_id_p,
const char *start_copy_id,
apr_off_t initial_offset,
apr_array_header_t *reps_to_cache,
+ apr_hash_t *reps_hash,
apr_pool_t *reps_pool,
svn_boolean_t at_root,
apr_pool_t *pool)
@@ -6013,7 +8111,7 @@ write_final_rev(const svn_fs_id_t **new_id_p,
svn_pool_clear(subpool);
SVN_ERR(write_final_rev(&new_id, file, rev, fs, dirent->id,
start_node_id, start_copy_id, initial_offset,
- reps_to_cache, reps_pool, FALSE,
+ reps_to_cache, reps_hash, reps_pool, FALSE,
subpool));
if (new_id && (svn_fs_fs__id_rev(new_id) == rev))
dirent->id = svn_fs_fs__id_copy(new_id, pool);
@@ -6027,11 +8125,14 @@ write_final_rev(const svn_fs_id_t **new_id_p,
noderev->data_rep->txn_id = NULL;
noderev->data_rep->revision = rev;
- SVN_ERR(get_file_offset(&noderev->data_rep->offset, file, pool));
- SVN_ERR(write_hash_rep(&noderev->data_rep->size,
- &noderev->data_rep->md5_checksum, file,
- str_entries, pool));
- noderev->data_rep->expanded_size = noderev->data_rep->size;
+
+ if (ffd->deltify_directories)
+ SVN_ERR(write_hash_delta_rep(noderev->data_rep, file,
+ str_entries, fs, noderev, NULL,
+ FALSE, pool));
+ else
+ SVN_ERR(write_hash_rep(noderev->data_rep, file, str_entries,
+ fs, NULL, pool));
}
}
else
@@ -6059,15 +8160,18 @@ write_final_rev(const svn_fs_id_t **new_id_p,
if (noderev->prop_rep && noderev->prop_rep->txn_id)
{
apr_hash_t *proplist;
-
SVN_ERR(svn_fs_fs__get_proplist(&proplist, fs, noderev, pool));
- SVN_ERR(get_file_offset(&noderev->prop_rep->offset, file, pool));
- SVN_ERR(write_hash_rep(&noderev->prop_rep->size,
- &noderev->prop_rep->md5_checksum, file,
- proplist, pool));
noderev->prop_rep->txn_id = NULL;
noderev->prop_rep->revision = rev;
+
+ if (ffd->deltify_properties)
+ SVN_ERR(write_hash_delta_rep(noderev->prop_rep, file,
+ proplist, fs, noderev, reps_hash,
+ TRUE, pool));
+ else
+ SVN_ERR(write_hash_rep(noderev->prop_rep, file, proplist,
+ fs, reps_hash, pool));
}
@@ -6110,24 +8214,53 @@ write_final_rev(const svn_fs_id_t **new_id_p,
noderev->id = new_id;
+ if (ffd->rep_sharing_allowed)
+ {
+ /* Save the data representation's hash in the rep cache. */
+ if ( noderev->data_rep && noderev->kind == svn_node_file
+ && noderev->data_rep->revision == rev)
+ {
+ SVN_ERR_ASSERT(reps_to_cache && reps_pool);
+ APR_ARRAY_PUSH(reps_to_cache, representation_t *)
+ = svn_fs_fs__rep_copy(noderev->data_rep, reps_pool);
+ }
+
+ if (noderev->prop_rep && noderev->prop_rep->revision == rev)
+ {
+ /* Add new property reps to hash and on-disk cache. */
+ representation_t *copy
+ = svn_fs_fs__rep_copy(noderev->prop_rep, reps_pool);
+
+ SVN_ERR_ASSERT(reps_to_cache && reps_pool);
+ APR_ARRAY_PUSH(reps_to_cache, representation_t *) = copy;
+
+ apr_hash_set(reps_hash,
+ copy->sha1_checksum->digest,
+ APR_SHA1_DIGESTSIZE,
+ copy);
+ }
+ }
+
+ /* don't serialize SHA1 for dirs to disk (waste of space) */
+ if (noderev->data_rep && noderev->kind == svn_node_dir)
+ noderev->data_rep->sha1_checksum = NULL;
+
+ /* don't serialize SHA1 for props to disk (waste of space) */
+ if (noderev->prop_rep)
+ noderev->prop_rep->sha1_checksum = NULL;
+
+ /* Workaround issue #4031: is-fresh-txn-root in revision files. */
+ noderev->is_fresh_txn_root = FALSE;
+
/* Write out our new node-revision. */
if (at_root)
SVN_ERR(validate_root_noderev(fs, noderev, rev, pool));
+
SVN_ERR(svn_fs_fs__write_noderev(svn_stream_from_aprfile2(file, TRUE, pool),
noderev, ffd->format,
svn_fs_fs__fs_supports_mergeinfo(fs),
pool));
- /* Save the data representation's hash in the rep cache. */
- if (ffd->rep_sharing_allowed
- && noderev->data_rep && noderev->kind == svn_node_file
- && noderev->data_rep->revision == rev)
- {
- SVN_ERR_ASSERT(reps_to_cache && reps_pool);
- APR_ARRAY_PUSH(reps_to_cache, representation_t *)
- = svn_fs_fs__rep_copy(noderev->data_rep, reps_pool);
- }
-
/* Return our ID that references the revision file. */
*new_id_p = noderev->id;
@@ -6231,6 +8364,51 @@ write_current(svn_fs_t *fs, svn_revnum_t rev, const char *next_node_id,
return move_into_place(tmp_name, name, name, pool);
}
+/* Open a new svn_fs_t handle to FS, set that handle's concept of "current
+ youngest revision" to NEW_REV, and call svn_fs_fs__verify_root() on
+ NEW_REV's revision root.
+
+ Intended to be called as the very last step in a commit before 'current'
+ is bumped. This implies that we are holding the write lock. */
+static svn_error_t *
+verify_as_revision_before_current_plus_plus(svn_fs_t *fs,
+ svn_revnum_t new_rev,
+ apr_pool_t *pool)
+{
+#ifdef SVN_DEBUG
+ fs_fs_data_t *ffd = fs->fsap_data;
+ svn_fs_t *ft; /* fs++ == ft */
+ svn_fs_root_t *root;
+ fs_fs_data_t *ft_ffd;
+ apr_hash_t *fs_config;
+
+ SVN_ERR_ASSERT(ffd->svn_fs_open_);
+
+ /* make sure FT does not simply return data cached by other instances
+ * but actually retrieves it from disk at least once.
+ */
+ fs_config = apr_hash_make(pool);
+ svn_hash_sets(fs_config, SVN_FS_CONFIG_FSFS_CACHE_NS,
+ svn_uuid_generate(pool));
+ SVN_ERR(ffd->svn_fs_open_(&ft, fs->path,
+ fs_config,
+ pool));
+ ft_ffd = ft->fsap_data;
+ /* Don't let FT consult rep-cache.db, either. */
+ ft_ffd->rep_sharing_allowed = FALSE;
+
+ /* Time travel! */
+ ft_ffd->youngest_rev_cache = new_rev;
+
+ SVN_ERR(svn_fs_fs__revision_root(&root, ft, new_rev, pool));
+ SVN_ERR_ASSERT(root->is_txn_root == FALSE && root->rev == new_rev);
+ SVN_ERR_ASSERT(ft_ffd->youngest_rev_cache == new_rev);
+ SVN_ERR(svn_fs_fs__verify_root(root, pool));
+#endif /* SVN_DEBUG */
+
+ return SVN_NO_ERROR;
+}
+
/* Update the 'current' file to hold the correct next node and copy_ids
from transaction TXN_ID in filesystem FS. The current revision is
set to REV. Perform temporary allocations in POOL. */
@@ -6305,7 +8483,7 @@ verify_locks(svn_fs_t *fs,
continue;
/* Fetch the change associated with our path. */
- change = apr_hash_get(changes, path, APR_HASH_KEY_STRING);
+ change = svn_hash_gets(changes, path);
/* What does it mean to succeed at lock verification for a given
path? For an existing file or directory getting modified
@@ -6341,6 +8519,7 @@ struct commit_baton {
svn_fs_t *fs;
svn_fs_txn_t *txn;
apr_array_header_t *reps_to_cache;
+ apr_hash_t *reps_hash;
apr_pool_t *reps_pool;
};
@@ -6398,8 +8577,8 @@ commit_body(void *baton, apr_pool_t *pool)
root_id = svn_fs_fs__id_txn_create("0", "0", cb->txn->id, pool);
SVN_ERR(write_final_rev(&new_root_id, proto_file, new_rev, cb->fs, root_id,
start_node_id, start_copy_id, initial_offset,
- cb->reps_to_cache, cb->reps_pool, TRUE,
- pool));
+ cb->reps_to_cache, cb->reps_hash, cb->reps_pool,
+ TRUE, pool));
/* Write the changed-path information. */
SVN_ERR(write_final_changed_path_info(&changed_path_offset, proto_file,
@@ -6423,14 +8602,13 @@ commit_body(void *baton, apr_pool_t *pool)
txnprop_list = apr_array_make(pool, 3, sizeof(svn_prop_t));
prop.value = NULL;
- if (apr_hash_get(txnprops, SVN_FS__PROP_TXN_CHECK_OOD, APR_HASH_KEY_STRING))
+ if (svn_hash_gets(txnprops, SVN_FS__PROP_TXN_CHECK_OOD))
{
prop.name = SVN_FS__PROP_TXN_CHECK_OOD;
APR_ARRAY_PUSH(txnprop_list, svn_prop_t) = prop;
}
- if (apr_hash_get(txnprops, SVN_FS__PROP_TXN_CHECK_LOCKS,
- APR_HASH_KEY_STRING))
+ if (svn_hash_gets(txnprops, SVN_FS__PROP_TXN_CHECK_LOCKS))
{
prop.name = SVN_FS__PROP_TXN_CHECK_LOCKS;
APR_ARRAY_PUSH(txnprop_list, svn_prop_t) = prop;
@@ -6444,7 +8622,7 @@ commit_body(void *baton, apr_pool_t *pool)
fails because the shard already existed for some reason. */
if (ffd->max_files_per_dir && new_rev % ffd->max_files_per_dir == 0)
{
- if (1)
+ /* Create the revs shard. */
{
const char *new_dir = path_rev_shard(cb->fs, new_rev, pool);
svn_error_t *err = svn_io_dir_make(new_dir, APR_OS_DEFAULT, pool);
@@ -6501,6 +8679,7 @@ commit_body(void *baton, apr_pool_t *pool)
old_rev_filename, pool));
/* Update the 'current' file. */
+ SVN_ERR(verify_as_revision_before_current_plus_plus(cb->fs, new_rev, pool));
SVN_ERR(write_final_current(cb->fs, cb->txn->id, new_rev, start_node_id,
start_copy_id, pool));
@@ -6540,23 +8719,6 @@ write_reps_to_cache(svn_fs_t *fs,
return SVN_NO_ERROR;
}
-/* Implements svn_sqlite__transaction_callback_t. */
-static svn_error_t *
-commit_sqlite_txn_callback(void *baton, svn_sqlite__db_t *db,
- apr_pool_t *scratch_pool)
-{
- struct commit_baton *cb = baton;
-
- /* Write new entries to the rep-sharing database.
- *
- * We use an sqlite transcation to speed things up;
- * see <http://www.sqlite.org/faq.html#q19>.
- */
- SVN_ERR(write_reps_to_cache(cb->fs, cb->reps_to_cache, scratch_pool));
-
- return SVN_NO_ERROR;
-}
-
svn_error_t *
svn_fs_fs__commit(svn_revnum_t *new_rev_p,
svn_fs_t *fs,
@@ -6573,24 +8735,33 @@ svn_fs_fs__commit(svn_revnum_t *new_rev_p,
if (ffd->rep_sharing_allowed)
{
cb.reps_to_cache = apr_array_make(pool, 5, sizeof(representation_t *));
+ cb.reps_hash = apr_hash_make(pool);
cb.reps_pool = pool;
}
else
{
cb.reps_to_cache = NULL;
+ cb.reps_hash = NULL;
cb.reps_pool = NULL;
}
SVN_ERR(svn_fs_fs__with_write_lock(fs, commit_body, &cb, pool));
+ /* At this point, *NEW_REV_P has been set, so errors below won't affect
+ the success of the commit. (See svn_fs_commit_txn().) */
+
if (ffd->rep_sharing_allowed)
{
- /* At this point, *NEW_REV_P has been set, so errors here won't affect
- the success of the commit. (See svn_fs_commit_txn().) */
SVN_ERR(svn_fs_fs__open_rep_cache(fs, pool));
- SVN_ERR(svn_sqlite__with_transaction(ffd->rep_cache_db,
- commit_sqlite_txn_callback,
- &cb, pool));
+
+ /* Write new entries to the rep-sharing database.
+ *
+ * We use an sqlite transaction to speed things up;
+ * see <http://www.sqlite.org/faq.html#q19>.
+ */
+ SVN_SQLITE__WITH_TXN(
+ write_reps_to_cache(fs, cb.reps_to_cache, pool),
+ ffd->rep_cache_db);
}
return SVN_NO_ERROR;
@@ -6646,7 +8817,7 @@ write_revision_zero(svn_fs_t *fs)
date.data = svn_time_to_cstring(apr_time_now(), fs->pool);
date.len = strlen(date.data);
proplist = apr_hash_make(fs->pool);
- apr_hash_set(proplist, SVN_PROP_REVISION_DATE, APR_HASH_KEY_STRING, &date);
+ svn_hash_sets(proplist, SVN_PROP_REVISION_DATE, &date);
return set_revision_proplist(fs, 0, proplist, fs->pool);
}
@@ -6662,15 +8833,14 @@ svn_fs_fs__create(svn_fs_t *fs,
/* See if compatibility with older versions was explicitly requested. */
if (fs->config)
{
- if (apr_hash_get(fs->config, SVN_FS_CONFIG_PRE_1_4_COMPATIBLE,
- APR_HASH_KEY_STRING))
+ if (svn_hash_gets(fs->config, SVN_FS_CONFIG_PRE_1_4_COMPATIBLE))
format = 1;
- else if (apr_hash_get(fs->config, SVN_FS_CONFIG_PRE_1_5_COMPATIBLE,
- APR_HASH_KEY_STRING))
+ else if (svn_hash_gets(fs->config, SVN_FS_CONFIG_PRE_1_5_COMPATIBLE))
format = 2;
- else if (apr_hash_get(fs->config, SVN_FS_CONFIG_PRE_1_6_COMPATIBLE,
- APR_HASH_KEY_STRING))
+ else if (svn_hash_gets(fs->config, SVN_FS_CONFIG_PRE_1_6_COMPATIBLE))
format = 3;
+ else if (svn_hash_gets(fs->config, SVN_FS_CONFIG_PRE_1_8_COMPATIBLE))
+ format = 4;
}
ffd->format = format;
@@ -6713,13 +8883,18 @@ svn_fs_fs__create(svn_fs_t *fs,
? "0\n" : "0 1 1\n"),
pool));
SVN_ERR(svn_io_file_create(path_lock(fs, pool), "", pool));
- SVN_ERR(svn_fs_fs__set_uuid(fs, svn_uuid_generate(pool), pool));
+ SVN_ERR(svn_fs_fs__set_uuid(fs, NULL, pool));
SVN_ERR(write_revision_zero(fs));
- SVN_ERR(write_config(fs, pool));
+ /* Create the fsfs.conf file if supported. Older server versions would
+ simply ignore the file but that might result in a different behavior
+ than with the later releases. Also, hotcopy would ignore, i.e. not
+ copy, a fsfs.conf with old formats. */
+ if (ffd->format >= SVN_FS_FS__MIN_CONFIG_FILE)
+ SVN_ERR(write_config(fs, pool));
- SVN_ERR(read_config(fs, pool));
+ SVN_ERR(read_config(ffd, fs->path, pool));
/* Create the min unpacked rev file. */
if (ffd->format >= SVN_FS_FS__MIN_PACKED_FORMAT)
@@ -6873,13 +9048,13 @@ recover_find_max_ids(svn_fs_t *fs, svn_revnum_t rev,
pool));
/* Check that this is a directory. It should be. */
- value = apr_hash_get(headers, HEADER_TYPE, APR_HASH_KEY_STRING);
+ value = svn_hash_gets(headers, HEADER_TYPE);
if (value == NULL || strcmp(value, KIND_DIR) != 0)
return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
_("Recovery encountered a non-directory node"));
/* Get the data location. No data location indicates an empty directory. */
- value = apr_hash_get(headers, HEADER_TEXT, APR_HASH_KEY_STRING);
+ value = svn_hash_gets(headers, HEADER_TEXT);
if (!value)
return SVN_NO_ERROR;
SVN_ERR(read_rep_offsets(&data_rep, value, NULL, FALSE, pool));
@@ -6905,7 +9080,9 @@ recover_find_max_ids(svn_fs_t *fs, svn_revnum_t rev,
stored in the representation. */
baton.file = rev_file;
baton.pool = pool;
- baton.remaining = data_rep->expanded_size;
+ baton.remaining = data_rep->expanded_size
+ ? data_rep->expanded_size
+ : data_rep->size;
stream = svn_stream_create(&baton, pool);
svn_stream_set_read(stream, read_handler_recover);
@@ -6920,7 +9097,7 @@ recover_find_max_ids(svn_fs_t *fs, svn_revnum_t rev,
for (hi = apr_hash_first(pool, entries); hi; hi = apr_hash_next(hi))
{
char *str_val;
- char *str, *last_str;
+ char *str;
svn_node_kind_t kind;
svn_fs_id_t *id;
const char *node_id, *copy_id;
@@ -6931,7 +9108,7 @@ recover_find_max_ids(svn_fs_t *fs, svn_revnum_t rev,
str_val = apr_pstrdup(iterpool, path->data);
- str = apr_strtok(str_val, " ", &last_str);
+ str = svn_cstring_tokenize(" ", &str_val);
if (str == NULL)
return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
_("Directory entry corrupt"));
@@ -6946,7 +9123,7 @@ recover_find_max_ids(svn_fs_t *fs, svn_revnum_t rev,
_("Directory entry corrupt"));
}
- str = apr_strtok(NULL, " ", &last_str);
+ str = svn_cstring_tokenize(" ", &str_val);
if (str == NULL)
return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
_("Directory entry corrupt"));
@@ -6986,6 +9163,77 @@ recover_find_max_ids(svn_fs_t *fs, svn_revnum_t rev,
return SVN_NO_ERROR;
}
+/* Return TRUE, if for REVISION in FS, we can find the revprop pack file.
+ * Use POOL for temporary allocations.
+ * Set *MISSING, if the reason is a missing manifest or pack file.
+ */
+static svn_boolean_t
+packed_revprop_available(svn_boolean_t *missing,
+ svn_fs_t *fs,
+ svn_revnum_t revision,
+ apr_pool_t *pool)
+{
+ fs_fs_data_t *ffd = fs->fsap_data;
+ svn_stringbuf_t *content = NULL;
+
+ /* try to read the manifest file */
+ const char *folder = path_revprops_pack_shard(fs, revision, pool);
+ const char *manifest_path = svn_dirent_join(folder, PATH_MANIFEST, pool);
+
+ svn_error_t *err = try_stringbuf_from_file(&content,
+ missing,
+ manifest_path,
+ FALSE,
+ pool);
+
+ /* if the manifest cannot be read, consider the pack files inaccessible
+ * even if the file itself exists. */
+ if (err)
+ {
+ svn_error_clear(err);
+ return FALSE;
+ }
+
+ if (*missing)
+ return FALSE;
+
+ /* parse manifest content until we find the entry for REVISION.
+ * Revision 0 is never packed. */
+ revision = revision < ffd->max_files_per_dir
+ ? revision - 1
+ : revision % ffd->max_files_per_dir;
+ while (content->data)
+ {
+ char *next = strchr(content->data, '\n');
+ if (next)
+ {
+ *next = 0;
+ ++next;
+ }
+
+ if (revision-- == 0)
+ {
+ /* the respective pack file must exist (and be a file) */
+ svn_node_kind_t kind;
+ err = svn_io_check_path(svn_dirent_join(folder, content->data,
+ pool),
+ &kind, pool);
+ if (err)
+ {
+ svn_error_clear(err);
+ return FALSE;
+ }
+
+ *missing = kind == svn_node_none;
+ return kind == svn_node_file;
+ }
+
+ content->data = next;
+ }
+
+ return FALSE;
+}
+
/* Baton used for recover_body below. */
struct recover_baton {
svn_fs_t *fs;
@@ -7008,7 +9256,10 @@ recover_body(void *baton, apr_pool_t *pool)
svn_revnum_t youngest_rev;
svn_node_kind_t youngest_revprops_kind;
- /* First, we need to know the largest revision in the filesystem. */
+ /* Lose potentially corrupted data in temp files */
+ SVN_ERR(cleanup_revprop_namespace(fs));
+
+ /* We need to know the largest revision in the filesystem. */
SVN_ERR(recover_get_largest_revision(fs, &max_rev, pool));
/* Get the expected youngest revision */
@@ -7099,13 +9350,24 @@ recover_body(void *baton, apr_pool_t *pool)
&youngest_revprops_kind, pool));
if (youngest_revprops_kind == svn_node_none)
{
- if (1)
+ svn_boolean_t missing = TRUE;
+ if (!packed_revprop_available(&missing, fs, max_rev, pool))
{
- return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
- _("Revision %ld has a revs file but no "
- "revprops file"),
- max_rev);
- }
+ if (missing)
+ {
+ return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
+ _("Revision %ld has a revs file but no "
+ "revprops file"),
+ max_rev);
+ }
+ else
+ {
+ return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
+ _("Revision %ld has a revs file but the "
+ "revprops file is inaccessible"),
+ max_rev);
+ }
+ }
}
else if (youngest_revprops_kind != svn_node_file)
{
@@ -7115,9 +9377,17 @@ recover_body(void *baton, apr_pool_t *pool)
max_rev);
}
- /* Prune younger-than-(newfound-youngest) revisions from the rep cache. */
- if (ffd->format >= SVN_FS_FS__MIN_REP_SHARING_FORMAT)
- SVN_ERR(svn_fs_fs__del_rep_reference(fs, max_rev, pool));
+ /* Prune younger-than-(newfound-youngest) revisions from the rep
+ cache if sharing is enabled taking care not to create the cache
+ if it does not exist. */
+ if (ffd->rep_sharing_allowed)
+ {
+ svn_boolean_t rep_cache_exists;
+
+ SVN_ERR(svn_fs_fs__exists_rep_cache(&rep_cache_exists, fs, pool));
+ if (rep_cache_exists)
+ SVN_ERR(svn_fs_fs__del_rep_reference(fs, max_rev, pool));
+ }
/* Now store the discovered youngest revision, and the next IDs if
relevant, in a new 'current' file. */
@@ -7143,17 +9413,6 @@ svn_fs_fs__recover(svn_fs_t *fs,
}
svn_error_t *
-svn_fs_fs__get_uuid(svn_fs_t *fs,
- const char **uuid_p,
- apr_pool_t *pool)
-{
- fs_fs_data_t *ffd = fs->fsap_data;
-
- *uuid_p = apr_pstrdup(pool, ffd->uuid);
- return SVN_NO_ERROR;
-}
-
-svn_error_t *
svn_fs_fs__set_uuid(svn_fs_t *fs,
const char *uuid,
apr_pool_t *pool)
@@ -7162,7 +9421,6 @@ svn_fs_fs__set_uuid(svn_fs_t *fs,
apr_size_t my_uuid_len;
const char *tmp_path;
const char *uuid_path = path_uuid(fs, pool);
- fs_fs_data_t *ffd = fs->fsap_data;
if (! uuid)
uuid = svn_uuid_generate(pool);
@@ -7183,7 +9441,7 @@ svn_fs_fs__set_uuid(svn_fs_t *fs,
/* Remove the newline we added, and stash the UUID. */
my_uuid[my_uuid_len - 1] = '\0';
- ffd->uuid = my_uuid;
+ fs->uuid = my_uuid;
return SVN_NO_ERROR;
}
@@ -7191,7 +9449,7 @@ svn_fs_fs__set_uuid(svn_fs_t *fs,
/** Node origin lazy cache. */
/* If directory PATH does not exist, create it and give it the same
- permissions as FS->path.*/
+ permissions as FS_path.*/
svn_error_t *
svn_fs_fs__ensure_dir_exists(const char *path,
const char *fs_path,
@@ -7253,7 +9511,7 @@ svn_fs_fs__get_node_origin(const svn_fs_id_t **origin_id,
if (node_origins)
{
svn_string_t *origin_id_str =
- apr_hash_get(node_origins, node_id, APR_HASH_KEY_STRING);
+ svn_hash_gets(node_origins, node_id);
if (origin_id_str)
*origin_id = svn_fs_fs__id_parse(origin_id_str->data,
origin_id_str->len, pool);
@@ -7288,7 +9546,7 @@ set_node_origins_for_file(svn_fs_t *fs,
if (! origins_hash)
origins_hash = apr_hash_make(pool);
- old_node_rev_id = apr_hash_get(origins_hash, node_id, APR_HASH_KEY_STRING);
+ old_node_rev_id = svn_hash_gets(origins_hash, node_id);
if (old_node_rev_id && !svn_string_compare(node_rev_id, old_node_rev_id))
return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
@@ -7297,7 +9555,7 @@ set_node_origins_for_file(svn_fs_t *fs,
"(%s)"),
node_id, old_node_rev_id->data, node_rev_id->data);
- apr_hash_set(origins_hash, node_id, APR_HASH_KEY_STRING, node_rev_id);
+ svn_hash_sets(origins_hash, node_id, node_rev_id);
/* Sure, there's a race condition here. Two processes could be
trying to add different cache elements to the same file at the
@@ -7478,7 +9736,7 @@ svn_fs_fs__revision_prop(svn_string_t **value_p,
SVN_ERR(svn_fs__check_fs(fs, TRUE));
SVN_ERR(svn_fs_fs__revision_proplist(&table, fs, rev, pool));
- *value_p = apr_hash_get(table, propname, APR_HASH_KEY_STRING);
+ *value_p = svn_hash_gets(table, propname);
return SVN_NO_ERROR;
}
@@ -7496,7 +9754,6 @@ struct change_rev_prop_baton {
/* The work-horse for svn_fs_fs__change_rev_prop, called with the FS
write lock. This implements the svn_fs_fs__with_write_lock()
'body' callback type. BATON is a 'struct change_rev_prop_baton *'. */
-
static svn_error_t *
change_rev_prop_body(void *baton, apr_pool_t *pool)
{
@@ -7508,8 +9765,7 @@ change_rev_prop_body(void *baton, apr_pool_t *pool)
if (cb->old_value_p)
{
const svn_string_t *wanted_value = *cb->old_value_p;
- const svn_string_t *present_value = apr_hash_get(table, cb->name,
- APR_HASH_KEY_STRING);
+ const svn_string_t *present_value = svn_hash_gets(table, cb->name);
if ((!wanted_value != !present_value)
|| (wanted_value && present_value
&& !svn_string_compare(wanted_value, present_value)))
@@ -7522,7 +9778,7 @@ change_rev_prop_body(void *baton, apr_pool_t *pool)
}
/* Fall through. */
}
- apr_hash_set(table, cb->name, APR_HASH_KEY_STRING, cb->value);
+ svn_hash_sets(table, cb->name, cb->value);
return set_revision_proplist(cb->fs, cb->rev, table, pool);
}
@@ -7581,7 +9837,7 @@ svn_fs_fs__txn_prop(svn_string_t **value_p,
SVN_ERR(svn_fs__check_fs(fs, TRUE));
SVN_ERR(svn_fs_fs__txn_proplist(&table, txn, pool));
- *value_p = apr_hash_get(table, propname, APR_HASH_KEY_STRING);
+ *value_p = svn_hash_gets(table, propname);
return SVN_NO_ERROR;
}
@@ -7659,43 +9915,31 @@ write_revnum_file(const char *fs_path,
return SVN_NO_ERROR;
}
-/* Pack a single shard SHARD in REVS_DIR, using POOL for allocations.
- CANCEL_FUNC and CANCEL_BATON are what you think they are.
-
- If for some reason we detect a partial packing already performed, we
- remove the pack file and start again. */
+/* Pack the revision SHARD containing exactly MAX_FILES_PER_DIR revisions
+ * from SHARD_PATH into the PACK_FILE_DIR, using POOL for allocations.
+ * CANCEL_FUNC and CANCEL_BATON are what you think they are.
+ *
+ * If for some reason we detect a partial packing already performed, we
+ * remove the pack file and start again.
+ */
static svn_error_t *
-pack_shard(const char *revs_dir,
- const char *fs_path,
- apr_int64_t shard,
- int max_files_per_dir,
- svn_fs_pack_notify_t notify_func,
- void *notify_baton,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- apr_pool_t *pool)
+pack_rev_shard(const char *pack_file_dir,
+ const char *shard_path,
+ apr_int64_t shard,
+ int max_files_per_dir,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *pool)
{
- const char *pack_file_path, *manifest_file_path, *shard_path;
- const char *pack_file_dir;
+ const char *pack_file_path, *manifest_file_path;
svn_stream_t *pack_stream, *manifest_stream;
svn_revnum_t start_rev, end_rev, rev;
apr_off_t next_offset;
apr_pool_t *iterpool;
/* Some useful paths. */
- pack_file_dir = svn_dirent_join(revs_dir,
- apr_psprintf(pool, "%" APR_INT64_T_FMT ".pack", shard),
- pool);
- pack_file_path = svn_dirent_join(pack_file_dir, "pack", pool);
- manifest_file_path = svn_dirent_join(pack_file_dir, "manifest", pool);
- shard_path = svn_dirent_join(revs_dir,
- apr_psprintf(pool, "%" APR_INT64_T_FMT, shard),
- pool);
-
- /* Notify caller we're starting to pack this shard. */
- if (notify_func)
- SVN_ERR(notify_func(notify_baton, shard, svn_fs_pack_notify_start,
- pool));
+ pack_file_path = svn_dirent_join(pack_file_dir, PATH_PACKED, pool);
+ manifest_file_path = svn_dirent_join(pack_file_dir, PATH_MANIFEST, pool);
/* Remove any existing pack file for this shard, since it is incomplete. */
SVN_ERR(svn_io_remove_dir2(pack_file_dir, TRUE, cancel_func, cancel_baton,
@@ -7741,21 +9985,338 @@ pack_shard(const char *revs_dir,
SVN_ERR(svn_stream_close(manifest_stream));
SVN_ERR(svn_stream_close(pack_stream));
- SVN_ERR(svn_io_copy_perms(shard_path, pack_file_dir, pool));
- SVN_ERR(svn_io_set_file_read_only(pack_file_path, FALSE, pool));
- SVN_ERR(svn_io_set_file_read_only(manifest_file_path, FALSE, pool));
+ SVN_ERR(svn_io_copy_perms(shard_path, pack_file_dir, iterpool));
+ SVN_ERR(svn_io_set_file_read_only(pack_file_path, FALSE, iterpool));
+ SVN_ERR(svn_io_set_file_read_only(manifest_file_path, FALSE, iterpool));
+
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+/* Copy revprop files for revisions [START_REV, END_REV) from SHARD_PATH
+ * to the pack file at PACK_FILE_NAME in PACK_FILE_DIR.
+ *
+ * The file sizes have already been determined and written to SIZES.
+ * Please note that this function will be executed while the filesystem
+ * has been locked and that revprops files will therefore not be modified
+ * while the pack is in progress.
+ *
+ * COMPRESSION_LEVEL defines how well the resulting pack file shall be
+ * compressed or whether is shall be compressed at all. TOTAL_SIZE is
+ * a hint on which initial buffer size we should use to hold the pack file
+ * content.
+ *
+ * CANCEL_FUNC and CANCEL_BATON are used as usual. Temporary allocations
+ * are done in SCRATCH_POOL.
+ */
+static svn_error_t *
+copy_revprops(const char *pack_file_dir,
+ const char *pack_filename,
+ const char *shard_path,
+ svn_revnum_t start_rev,
+ svn_revnum_t end_rev,
+ apr_array_header_t *sizes,
+ apr_size_t total_size,
+ int compression_level,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
+{
+ svn_stream_t *pack_stream;
+ apr_file_t *pack_file;
+ svn_revnum_t rev;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ svn_stream_t *stream;
+
+ /* create empty data buffer and a write stream on top of it */
+ svn_stringbuf_t *uncompressed
+ = svn_stringbuf_create_ensure(total_size, scratch_pool);
+ svn_stringbuf_t *compressed
+ = svn_stringbuf_create_empty(scratch_pool);
+ pack_stream = svn_stream_from_stringbuf(uncompressed, scratch_pool);
+
+ /* write the pack file header */
+ SVN_ERR(serialize_revprops_header(pack_stream, start_rev, sizes, 0,
+ sizes->nelts, iterpool));
+
+ /* Some useful paths. */
+ SVN_ERR(svn_io_file_open(&pack_file, svn_dirent_join(pack_file_dir,
+ pack_filename,
+ scratch_pool),
+ APR_WRITE | APR_CREATE, APR_OS_DEFAULT,
+ scratch_pool));
+
+ /* Iterate over the revisions in this shard, squashing them together. */
+ for (rev = start_rev; rev <= end_rev; rev++)
+ {
+ const char *path;
+
+ svn_pool_clear(iterpool);
+
+ /* Construct the file name. */
+ path = svn_dirent_join(shard_path, apr_psprintf(iterpool, "%ld", rev),
+ iterpool);
+
+ /* Copy all the bits from the non-packed revprop file to the end of
+ * the pack file. */
+ SVN_ERR(svn_stream_open_readonly(&stream, path, iterpool, iterpool));
+ SVN_ERR(svn_stream_copy3(stream, pack_stream,
+ cancel_func, cancel_baton, iterpool));
+ }
+
+ /* flush stream buffers to content buffer */
+ SVN_ERR(svn_stream_close(pack_stream));
+
+ /* compress the content (or just store it for COMPRESSION_LEVEL 0) */
+ SVN_ERR(svn__compress(svn_stringbuf__morph_into_string(uncompressed),
+ compressed, compression_level));
+
+ /* write the pack file content to disk */
+ stream = svn_stream_from_aprfile2(pack_file, FALSE, scratch_pool);
+ SVN_ERR(svn_stream_write(stream, compressed->data, &compressed->len));
+ SVN_ERR(svn_stream_close(stream));
+
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+/* For the revprop SHARD at SHARD_PATH with exactly MAX_FILES_PER_DIR
+ * revprop files in it, create a packed shared at PACK_FILE_DIR.
+ *
+ * COMPRESSION_LEVEL defines how well the resulting pack file shall be
+ * compressed or whether is shall be compressed at all. Individual pack
+ * file containing more than one revision will be limited to a size of
+ * MAX_PACK_SIZE bytes before compression.
+ *
+ * CANCEL_FUNC and CANCEL_BATON are used in the usual way. Temporary
+ * allocations are done in SCRATCH_POOL.
+ */
+static svn_error_t *
+pack_revprops_shard(const char *pack_file_dir,
+ const char *shard_path,
+ apr_int64_t shard,
+ int max_files_per_dir,
+ apr_off_t max_pack_size,
+ int compression_level,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
+{
+ const char *manifest_file_path, *pack_filename = NULL;
+ svn_stream_t *manifest_stream;
+ svn_revnum_t start_rev, end_rev, rev;
+ apr_off_t total_size;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ apr_array_header_t *sizes;
+
+ /* Some useful paths. */
+ manifest_file_path = svn_dirent_join(pack_file_dir, PATH_MANIFEST,
+ scratch_pool);
+
+ /* Remove any existing pack file for this shard, since it is incomplete. */
+ SVN_ERR(svn_io_remove_dir2(pack_file_dir, TRUE, cancel_func, cancel_baton,
+ scratch_pool));
+
+ /* Create the new directory and manifest file stream. */
+ SVN_ERR(svn_io_dir_make(pack_file_dir, APR_OS_DEFAULT, scratch_pool));
+ SVN_ERR(svn_stream_open_writable(&manifest_stream, manifest_file_path,
+ scratch_pool, scratch_pool));
+
+ /* revisions to handle. Special case: revision 0 */
+ start_rev = (svn_revnum_t) (shard * max_files_per_dir);
+ end_rev = (svn_revnum_t) ((shard + 1) * (max_files_per_dir) - 1);
+ if (start_rev == 0)
+ ++start_rev;
+
+ /* initialize the revprop size info */
+ sizes = apr_array_make(scratch_pool, max_files_per_dir, sizeof(apr_off_t));
+ total_size = 2 * SVN_INT64_BUFFER_SIZE;
+
+ /* Iterate over the revisions in this shard, determine their size and
+ * squashing them together into pack files. */
+ for (rev = start_rev; rev <= end_rev; rev++)
+ {
+ apr_finfo_t finfo;
+ const char *path;
+
+ svn_pool_clear(iterpool);
+
+ /* Get the size of the file. */
+ path = svn_dirent_join(shard_path, apr_psprintf(iterpool, "%ld", rev),
+ iterpool);
+ SVN_ERR(svn_io_stat(&finfo, path, APR_FINFO_SIZE, iterpool));
+
+ /* if we already have started a pack file and this revprop cannot be
+ * appended to it, write the previous pack file. */
+ if (sizes->nelts != 0 &&
+ total_size + SVN_INT64_BUFFER_SIZE + finfo.size > max_pack_size)
+ {
+ SVN_ERR(copy_revprops(pack_file_dir, pack_filename, shard_path,
+ start_rev, rev-1, sizes, (apr_size_t)total_size,
+ compression_level, cancel_func, cancel_baton,
+ iterpool));
+
+ /* next pack file starts empty again */
+ apr_array_clear(sizes);
+ total_size = 2 * SVN_INT64_BUFFER_SIZE;
+ start_rev = rev;
+ }
+
+ /* Update the manifest. Allocate a file name for the current pack
+ * file if it is a new one */
+ if (sizes->nelts == 0)
+ pack_filename = apr_psprintf(scratch_pool, "%ld.0", rev);
+
+ SVN_ERR(svn_stream_printf(manifest_stream, iterpool, "%s\n",
+ pack_filename));
+
+ /* add to list of files to put into the current pack file */
+ APR_ARRAY_PUSH(sizes, apr_off_t) = finfo.size;
+ total_size += SVN_INT64_BUFFER_SIZE + finfo.size;
+ }
+
+ /* write the last pack file */
+ if (sizes->nelts != 0)
+ SVN_ERR(copy_revprops(pack_file_dir, pack_filename, shard_path,
+ start_rev, rev-1, sizes, (apr_size_t)total_size,
+ compression_level, cancel_func, cancel_baton,
+ iterpool));
+
+ /* flush the manifest file and update permissions */
+ SVN_ERR(svn_stream_close(manifest_stream));
+ SVN_ERR(svn_io_copy_perms(shard_path, pack_file_dir, iterpool));
+
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+/* Delete the non-packed revprop SHARD at SHARD_PATH with exactly
+ * MAX_FILES_PER_DIR revprop files in it. If this is shard 0, keep the
+ * revprop file for revision 0.
+ *
+ * CANCEL_FUNC and CANCEL_BATON are used in the usual way. Temporary
+ * allocations are done in SCRATCH_POOL.
+ */
+static svn_error_t *
+delete_revprops_shard(const char *shard_path,
+ apr_int64_t shard,
+ int max_files_per_dir,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
+{
+ if (shard == 0)
+ {
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ int i;
+
+ /* delete all files except the one for revision 0 */
+ for (i = 1; i < max_files_per_dir; ++i)
+ {
+ const char *path = svn_dirent_join(shard_path,
+ apr_psprintf(iterpool, "%d", i),
+ iterpool);
+ if (cancel_func)
+ SVN_ERR((*cancel_func)(cancel_baton));
+
+ SVN_ERR(svn_io_remove_file2(path, TRUE, iterpool));
+ svn_pool_clear(iterpool);
+ }
+
+ svn_pool_destroy(iterpool);
+ }
+ else
+ SVN_ERR(svn_io_remove_dir2(shard_path, TRUE,
+ cancel_func, cancel_baton, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* In the file system at FS_PATH, pack the SHARD in REVS_DIR and
+ * REVPROPS_DIR containing exactly MAX_FILES_PER_DIR revisions, using POOL
+ * for allocations. REVPROPS_DIR will be NULL if revprop packing is not
+ * supported. COMPRESSION_LEVEL and MAX_PACK_SIZE will be ignored in that
+ * case.
+ *
+ * CANCEL_FUNC and CANCEL_BATON are what you think they are; similarly
+ * NOTIFY_FUNC and NOTIFY_BATON.
+ *
+ * If for some reason we detect a partial packing already performed, we
+ * remove the pack file and start again.
+ */
+static svn_error_t *
+pack_shard(const char *revs_dir,
+ const char *revsprops_dir,
+ const char *fs_path,
+ apr_int64_t shard,
+ int max_files_per_dir,
+ apr_off_t max_pack_size,
+ int compression_level,
+ svn_fs_pack_notify_t notify_func,
+ void *notify_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *pool)
+{
+ const char *rev_shard_path, *rev_pack_file_dir;
+ const char *revprops_shard_path, *revprops_pack_file_dir;
+
+ /* Notify caller we're starting to pack this shard. */
+ if (notify_func)
+ SVN_ERR(notify_func(notify_baton, shard, svn_fs_pack_notify_start,
+ pool));
+
+ /* Some useful paths. */
+ rev_pack_file_dir = svn_dirent_join(revs_dir,
+ apr_psprintf(pool,
+ "%" APR_INT64_T_FMT PATH_EXT_PACKED_SHARD,
+ shard),
+ pool);
+ rev_shard_path = svn_dirent_join(revs_dir,
+ apr_psprintf(pool, "%" APR_INT64_T_FMT, shard),
+ pool);
+
+ /* pack the revision content */
+ SVN_ERR(pack_rev_shard(rev_pack_file_dir, rev_shard_path,
+ shard, max_files_per_dir,
+ cancel_func, cancel_baton, pool));
+
+ /* if enabled, pack the revprops in an equivalent way */
+ if (revsprops_dir)
+ {
+ revprops_pack_file_dir = svn_dirent_join(revsprops_dir,
+ apr_psprintf(pool,
+ "%" APR_INT64_T_FMT PATH_EXT_PACKED_SHARD,
+ shard),
+ pool);
+ revprops_shard_path = svn_dirent_join(revsprops_dir,
+ apr_psprintf(pool, "%" APR_INT64_T_FMT, shard),
+ pool);
+
+ SVN_ERR(pack_revprops_shard(revprops_pack_file_dir, revprops_shard_path,
+ shard, max_files_per_dir,
+ (int)(0.9 * max_pack_size),
+ compression_level,
+ cancel_func, cancel_baton, pool));
+ }
/* Update the min-unpacked-rev file to reflect our newly packed shard.
* (This doesn't update ffd->min_unpacked_rev. That will be updated by
* update_min_unpacked_rev() when necessary.) */
SVN_ERR(write_revnum_file(fs_path, PATH_MIN_UNPACKED_REV,
(svn_revnum_t)((shard + 1) * max_files_per_dir),
- iterpool));
- svn_pool_destroy(iterpool);
+ pool));
- /* Finally, remove the existing shard directory. */
- SVN_ERR(svn_io_remove_dir2(shard_path, TRUE, cancel_func, cancel_baton,
- pool));
+ /* Finally, remove the existing shard directories. */
+ SVN_ERR(svn_io_remove_dir2(rev_shard_path, TRUE,
+ cancel_func, cancel_baton, pool));
+ if (revsprops_dir)
+ SVN_ERR(delete_revprops_shard(revprops_shard_path,
+ shard, max_files_per_dir,
+ cancel_func, cancel_baton, pool));
/* Notify caller we're starting to pack this shard. */
if (notify_func)
@@ -7786,8 +10347,7 @@ struct pack_baton
extension, on not having to use a retry when calling
svn_fs_fs__path_rev_absolute() and friends). If you add a call
to this function, consider whether you have to call
- update_min_unpacked_rev() and update_min_unpacked_revprop()
- afterwards.
+ update_min_unpacked_rev().
See this thread: http://thread.gmane.org/1291206765.3782.3309.camel@edith
*/
static svn_error_t *
@@ -7795,51 +10355,63 @@ pack_body(void *baton,
apr_pool_t *pool)
{
struct pack_baton *pb = baton;
- int format, max_files_per_dir;
+ fs_fs_data_t ffd = {0};
apr_int64_t completed_shards;
apr_int64_t i;
svn_revnum_t youngest;
apr_pool_t *iterpool;
- const char *data_path;
- svn_revnum_t min_unpacked_rev;
+ const char *rev_data_path;
+ const char *revprops_data_path = NULL;
- SVN_ERR(read_format(&format, &max_files_per_dir, path_format(pb->fs, pool),
- pool));
- SVN_ERR(check_format(format));
+ /* read repository settings */
+ SVN_ERR(read_format(&ffd.format, &ffd.max_files_per_dir,
+ path_format(pb->fs, pool), pool));
+ SVN_ERR(check_format(ffd.format));
+ SVN_ERR(read_config(&ffd, pb->fs->path, pool));
/* If the repository isn't a new enough format, we don't support packing.
Return a friendly error to that effect. */
- if (format < SVN_FS_FS__MIN_PACKED_FORMAT)
+ if (ffd.format < SVN_FS_FS__MIN_PACKED_FORMAT)
return svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
_("FSFS format (%d) too old to pack; please upgrade the filesystem."),
- format);
+ ffd.format);
/* If we aren't using sharding, we can't do any packing, so quit. */
- if (!max_files_per_dir)
+ if (!ffd.max_files_per_dir)
return SVN_NO_ERROR;
- SVN_ERR(read_min_unpacked_rev(&min_unpacked_rev,
+ SVN_ERR(read_min_unpacked_rev(&ffd.min_unpacked_rev,
path_min_unpacked_rev(pb->fs, pool),
pool));
SVN_ERR(get_youngest(&youngest, pb->fs->path, pool));
- completed_shards = (youngest + 1) / max_files_per_dir;
+ completed_shards = (youngest + 1) / ffd.max_files_per_dir;
/* See if we've already completed all possible shards thus far. */
- if (min_unpacked_rev == (completed_shards * max_files_per_dir))
+ if (ffd.min_unpacked_rev == (completed_shards * ffd.max_files_per_dir))
return SVN_NO_ERROR;
- data_path = svn_dirent_join(pb->fs->path, PATH_REVS_DIR, pool);
+ rev_data_path = svn_dirent_join(pb->fs->path, PATH_REVS_DIR, pool);
+ if (ffd.format >= SVN_FS_FS__MIN_PACKED_REVPROP_FORMAT)
+ revprops_data_path = svn_dirent_join(pb->fs->path, PATH_REVPROPS_DIR,
+ pool);
iterpool = svn_pool_create(pool);
- for (i = min_unpacked_rev / max_files_per_dir; i < completed_shards; i++)
+ for (i = ffd.min_unpacked_rev / ffd.max_files_per_dir;
+ i < completed_shards;
+ i++)
{
svn_pool_clear(iterpool);
if (pb->cancel_func)
SVN_ERR(pb->cancel_func(pb->cancel_baton));
- SVN_ERR(pack_shard(data_path, pb->fs->path, i, max_files_per_dir,
+ SVN_ERR(pack_shard(rev_data_path, revprops_data_path,
+ pb->fs->path, i, ffd.max_files_per_dir,
+ ffd.revprop_pack_size,
+ ffd.compress_packed_revprops
+ ? SVN_DELTA_COMPRESSION_LEVEL_DEFAULT
+ : SVN_DELTA_COMPRESSION_LEVEL_NONE,
pb->notify_func, pb->notify_baton,
pb->cancel_func, pb->cancel_baton, iterpool));
}
@@ -7864,3 +10436,1217 @@ svn_fs_fs__pack(svn_fs_t *fs,
pb.cancel_baton = cancel_baton;
return svn_fs_fs__with_write_lock(fs, pack_body, &pb, pool);
}
+
+
+/** Verifying. **/
+
+/* Baton type expected by verify_walker(). The purpose is to reuse open
+ * rev / pack file handles between calls. Its contents need to be cleaned
+ * periodically to limit resource usage.
+ */
+typedef struct verify_walker_baton_t
+{
+ /* number of calls to verify_walker() since the last clean */
+ int iteration_count;
+
+ /* number of files opened since the last clean */
+ int file_count;
+
+ /* progress notification callback to invoke periodically (may be NULL) */
+ svn_fs_progress_notify_func_t notify_func;
+
+ /* baton to use with NOTIFY_FUNC */
+ void *notify_baton;
+
+ /* remember the last revision for which we called notify_func */
+ svn_revnum_t last_notified_revision;
+
+ /* current file handle (or NULL) */
+ apr_file_t *file_hint;
+
+ /* corresponding revision (or SVN_INVALID_REVNUM) */
+ svn_revnum_t rev_hint;
+
+ /* pool to use for the file handles etc. */
+ apr_pool_t *pool;
+} verify_walker_baton_t;
+
+/* Used by svn_fs_fs__verify().
+ Implements svn_fs_fs__walk_rep_reference().walker. */
+static svn_error_t *
+verify_walker(representation_t *rep,
+ void *baton,
+ svn_fs_t *fs,
+ apr_pool_t *scratch_pool)
+{
+ struct rep_state *rs;
+ struct rep_args *rep_args;
+
+ if (baton)
+ {
+ verify_walker_baton_t *walker_baton = baton;
+ apr_file_t * previous_file;
+
+ /* notify and free resources periodically */
+ if ( walker_baton->iteration_count > 1000
+ || walker_baton->file_count > 16)
+ {
+ if ( walker_baton->notify_func
+ && rep->revision != walker_baton->last_notified_revision)
+ {
+ walker_baton->notify_func(rep->revision,
+ walker_baton->notify_baton,
+ scratch_pool);
+ walker_baton->last_notified_revision = rep->revision;
+ }
+
+ svn_pool_clear(walker_baton->pool);
+
+ walker_baton->iteration_count = 0;
+ walker_baton->file_count = 0;
+ walker_baton->file_hint = NULL;
+ walker_baton->rev_hint = SVN_INVALID_REVNUM;
+ }
+
+ /* access the repo data */
+ previous_file = walker_baton->file_hint;
+ SVN_ERR(create_rep_state(&rs, &rep_args, &walker_baton->file_hint,
+ &walker_baton->rev_hint, rep, fs,
+ walker_baton->pool));
+
+ /* update resource usage counters */
+ walker_baton->iteration_count++;
+ if (previous_file != walker_baton->file_hint)
+ walker_baton->file_count++;
+ }
+ else
+ {
+ /* ### Should this be using read_rep_line() directly? */
+ SVN_ERR(create_rep_state(&rs, &rep_args, NULL, NULL, rep, fs,
+ scratch_pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_fs_fs__verify(svn_fs_t *fs,
+ svn_revnum_t start,
+ svn_revnum_t end,
+ svn_fs_progress_notify_func_t notify_func,
+ void *notify_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *pool)
+{
+ fs_fs_data_t *ffd = fs->fsap_data;
+ svn_boolean_t exists;
+ svn_revnum_t youngest = ffd->youngest_rev_cache; /* cache is current */
+
+ if (ffd->format < SVN_FS_FS__MIN_REP_SHARING_FORMAT)
+ return SVN_NO_ERROR;
+
+ /* Input validation. */
+ if (! SVN_IS_VALID_REVNUM(start))
+ start = 0;
+ if (! SVN_IS_VALID_REVNUM(end))
+ end = youngest;
+ SVN_ERR(ensure_revision_exists(fs, start, pool));
+ SVN_ERR(ensure_revision_exists(fs, end, pool));
+
+ /* rep-cache verification. */
+ SVN_ERR(svn_fs_fs__exists_rep_cache(&exists, fs, pool));
+ if (exists)
+ {
+ /* provide a baton to allow the reuse of open file handles between
+ iterations (saves 2/3 of OS level file operations). */
+ verify_walker_baton_t *baton = apr_pcalloc(pool, sizeof(*baton));
+ baton->rev_hint = SVN_INVALID_REVNUM;
+ baton->pool = svn_pool_create(pool);
+ baton->last_notified_revision = SVN_INVALID_REVNUM;
+ baton->notify_func = notify_func;
+ baton->notify_baton = notify_baton;
+
+ /* tell the user that we are now ready to do *something* */
+ if (notify_func)
+ notify_func(SVN_INVALID_REVNUM, notify_baton, baton->pool);
+
+ /* Do not attempt to walk the rep-cache database if its file does
+ not exist, since doing so would create it --- which may confuse
+ the administrator. Don't take any lock. */
+ SVN_ERR(svn_fs_fs__walk_rep_reference(fs, start, end,
+ verify_walker, baton,
+ cancel_func, cancel_baton,
+ pool));
+
+ /* walker resource cleanup */
+ svn_pool_destroy(baton->pool);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
+/** Hotcopy. **/
+
+/* Like svn_io_dir_file_copy(), but doesn't copy files that exist at
+ * the destination and do not differ in terms of kind, size, and mtime. */
+static svn_error_t *
+hotcopy_io_dir_file_copy(const char *src_path,
+ const char *dst_path,
+ const char *file,
+ apr_pool_t *scratch_pool)
+{
+ const svn_io_dirent2_t *src_dirent;
+ const svn_io_dirent2_t *dst_dirent;
+ const char *src_target;
+ const char *dst_target;
+
+ /* Does the destination already exist? If not, we must copy it. */
+ dst_target = svn_dirent_join(dst_path, file, scratch_pool);
+ SVN_ERR(svn_io_stat_dirent2(&dst_dirent, dst_target, FALSE, TRUE,
+ scratch_pool, scratch_pool));
+ if (dst_dirent->kind != svn_node_none)
+ {
+ /* If the destination's stat information indicates that the file
+ * is equal to the source, don't bother copying the file again. */
+ src_target = svn_dirent_join(src_path, file, scratch_pool);
+ SVN_ERR(svn_io_stat_dirent2(&src_dirent, src_target, FALSE, FALSE,
+ scratch_pool, scratch_pool));
+ if (src_dirent->kind == dst_dirent->kind &&
+ src_dirent->special == dst_dirent->special &&
+ src_dirent->filesize == dst_dirent->filesize &&
+ src_dirent->mtime <= dst_dirent->mtime)
+ return SVN_NO_ERROR;
+ }
+
+ return svn_error_trace(svn_io_dir_file_copy(src_path, dst_path, file,
+ scratch_pool));
+}
+
+/* Set *NAME_P to the UTF-8 representation of directory entry NAME.
+ * NAME is in the internal encoding used by APR; PARENT is in
+ * UTF-8 and in internal (not local) style.
+ *
+ * Use PARENT only for generating an error string if the conversion
+ * fails because NAME could not be represented in UTF-8. In that
+ * case, return a two-level error in which the outer error's message
+ * mentions PARENT, but the inner error's message does not mention
+ * NAME (except possibly in hex) since NAME may not be printable.
+ * Such a compound error at least allows the user to go looking in the
+ * right directory for the problem.
+ *
+ * If there is any other error, just return that error directly.
+ *
+ * If there is any error, the effect on *NAME_P is undefined.
+ *
+ * *NAME_P and NAME may refer to the same storage.
+ */
+static svn_error_t *
+entry_name_to_utf8(const char **name_p,
+ const char *name,
+ const char *parent,
+ apr_pool_t *pool)
+{
+ svn_error_t *err = svn_path_cstring_to_utf8(name_p, name, pool);
+ if (err && err->apr_err == APR_EINVAL)
+ {
+ return svn_error_createf(err->apr_err, err,
+ _("Error converting entry "
+ "in directory '%s' to UTF-8"),
+ svn_dirent_local_style(parent, pool));
+ }
+ return err;
+}
+
+/* Like svn_io_copy_dir_recursively() but doesn't copy regular files that
+ * exist in the destination and do not differ from the source in terms of
+ * kind, size, and mtime. */
+static svn_error_t *
+hotcopy_io_copy_dir_recursively(const char *src,
+ const char *dst_parent,
+ const char *dst_basename,
+ svn_boolean_t copy_perms,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *pool)
+{
+ svn_node_kind_t kind;
+ apr_status_t status;
+ const char *dst_path;
+ apr_dir_t *this_dir;
+ apr_finfo_t this_entry;
+ apr_int32_t flags = APR_FINFO_TYPE | APR_FINFO_NAME;
+
+ /* Make a subpool for recursion */
+ apr_pool_t *subpool = svn_pool_create(pool);
+
+ /* The 'dst_path' is simply dst_parent/dst_basename */
+ dst_path = svn_dirent_join(dst_parent, dst_basename, pool);
+
+ /* Sanity checks: SRC and DST_PARENT are directories, and
+ DST_BASENAME doesn't already exist in DST_PARENT. */
+ SVN_ERR(svn_io_check_path(src, &kind, subpool));
+ if (kind != svn_node_dir)
+ return svn_error_createf(SVN_ERR_NODE_UNEXPECTED_KIND, NULL,
+ _("Source '%s' is not a directory"),
+ svn_dirent_local_style(src, pool));
+
+ SVN_ERR(svn_io_check_path(dst_parent, &kind, subpool));
+ if (kind != svn_node_dir)
+ return svn_error_createf(SVN_ERR_NODE_UNEXPECTED_KIND, NULL,
+ _("Destination '%s' is not a directory"),
+ svn_dirent_local_style(dst_parent, pool));
+
+ SVN_ERR(svn_io_check_path(dst_path, &kind, subpool));
+
+ /* Create the new directory. */
+ /* ### TODO: copy permissions (needs apr_file_attrs_get()) */
+ SVN_ERR(svn_io_make_dir_recursively(dst_path, pool));
+
+ /* Loop over the dirents in SRC. ('.' and '..' are auto-excluded) */
+ SVN_ERR(svn_io_dir_open(&this_dir, src, subpool));
+
+ for (status = apr_dir_read(&this_entry, flags, this_dir);
+ status == APR_SUCCESS;
+ status = apr_dir_read(&this_entry, flags, this_dir))
+ {
+ if ((this_entry.name[0] == '.')
+ && ((this_entry.name[1] == '\0')
+ || ((this_entry.name[1] == '.')
+ && (this_entry.name[2] == '\0'))))
+ {
+ continue;
+ }
+ else
+ {
+ const char *entryname_utf8;
+
+ if (cancel_func)
+ SVN_ERR(cancel_func(cancel_baton));
+
+ SVN_ERR(entry_name_to_utf8(&entryname_utf8, this_entry.name,
+ src, subpool));
+ if (this_entry.filetype == APR_REG) /* regular file */
+ {
+ SVN_ERR(hotcopy_io_dir_file_copy(src, dst_path, entryname_utf8,
+ subpool));
+ }
+ else if (this_entry.filetype == APR_LNK) /* symlink */
+ {
+ const char *src_target = svn_dirent_join(src, entryname_utf8,
+ subpool);
+ const char *dst_target = svn_dirent_join(dst_path,
+ entryname_utf8,
+ subpool);
+ SVN_ERR(svn_io_copy_link(src_target, dst_target,
+ subpool));
+ }
+ else if (this_entry.filetype == APR_DIR) /* recurse */
+ {
+ const char *src_target;
+
+ /* Prevent infinite recursion by filtering off our
+ newly created destination path. */
+ if (strcmp(src, dst_parent) == 0
+ && strcmp(entryname_utf8, dst_basename) == 0)
+ continue;
+
+ src_target = svn_dirent_join(src, entryname_utf8, subpool);
+ SVN_ERR(hotcopy_io_copy_dir_recursively(src_target,
+ dst_path,
+ entryname_utf8,
+ copy_perms,
+ cancel_func,
+ cancel_baton,
+ subpool));
+ }
+ /* ### support other APR node types someday?? */
+
+ }
+ }
+
+ if (! (APR_STATUS_IS_ENOENT(status)))
+ return svn_error_wrap_apr(status, _("Can't read directory '%s'"),
+ svn_dirent_local_style(src, pool));
+
+ status = apr_dir_close(this_dir);
+ if (status)
+ return svn_error_wrap_apr(status, _("Error closing directory '%s'"),
+ svn_dirent_local_style(src, pool));
+
+ /* Free any memory used by recursion */
+ svn_pool_destroy(subpool);
+
+ return SVN_NO_ERROR;
+}
+
+/* Copy an un-packed revision or revprop file for revision REV from SRC_SUBDIR
+ * to DST_SUBDIR. Assume a sharding layout based on MAX_FILES_PER_DIR.
+ * Use SCRATCH_POOL for temporary allocations. */
+static svn_error_t *
+hotcopy_copy_shard_file(const char *src_subdir,
+ const char *dst_subdir,
+ svn_revnum_t rev,
+ int max_files_per_dir,
+ apr_pool_t *scratch_pool)
+{
+ const char *src_subdir_shard = src_subdir,
+ *dst_subdir_shard = dst_subdir;
+
+ if (max_files_per_dir)
+ {
+ const char *shard = apr_psprintf(scratch_pool, "%ld",
+ rev / max_files_per_dir);
+ src_subdir_shard = svn_dirent_join(src_subdir, shard, scratch_pool);
+ dst_subdir_shard = svn_dirent_join(dst_subdir, shard, scratch_pool);
+
+ if (rev % max_files_per_dir == 0)
+ {
+ SVN_ERR(svn_io_make_dir_recursively(dst_subdir_shard, scratch_pool));
+ SVN_ERR(svn_io_copy_perms(dst_subdir, dst_subdir_shard,
+ scratch_pool));
+ }
+ }
+
+ SVN_ERR(hotcopy_io_dir_file_copy(src_subdir_shard, dst_subdir_shard,
+ apr_psprintf(scratch_pool, "%ld", rev),
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+
+/* Copy a packed shard containing revision REV, and which contains
+ * MAX_FILES_PER_DIR revisions, from SRC_FS to DST_FS.
+ * Update *DST_MIN_UNPACKED_REV in case the shard is new in DST_FS.
+ * Do not re-copy data which already exists in DST_FS.
+ * Use SCRATCH_POOL for temporary allocations. */
+static svn_error_t *
+hotcopy_copy_packed_shard(svn_revnum_t *dst_min_unpacked_rev,
+ svn_fs_t *src_fs,
+ svn_fs_t *dst_fs,
+ svn_revnum_t rev,
+ int max_files_per_dir,
+ apr_pool_t *scratch_pool)
+{
+ const char *src_subdir;
+ const char *dst_subdir;
+ const char *packed_shard;
+ const char *src_subdir_packed_shard;
+ svn_revnum_t revprop_rev;
+ apr_pool_t *iterpool;
+ fs_fs_data_t *src_ffd = src_fs->fsap_data;
+
+ /* Copy the packed shard. */
+ src_subdir = svn_dirent_join(src_fs->path, PATH_REVS_DIR, scratch_pool);
+ dst_subdir = svn_dirent_join(dst_fs->path, PATH_REVS_DIR, scratch_pool);
+ packed_shard = apr_psprintf(scratch_pool, "%ld" PATH_EXT_PACKED_SHARD,
+ rev / max_files_per_dir);
+ src_subdir_packed_shard = svn_dirent_join(src_subdir, packed_shard,
+ scratch_pool);
+ SVN_ERR(hotcopy_io_copy_dir_recursively(src_subdir_packed_shard,
+ dst_subdir, packed_shard,
+ TRUE /* copy_perms */,
+ NULL /* cancel_func */, NULL,
+ scratch_pool));
+
+ /* Copy revprops belonging to revisions in this pack. */
+ src_subdir = svn_dirent_join(src_fs->path, PATH_REVPROPS_DIR, scratch_pool);
+ dst_subdir = svn_dirent_join(dst_fs->path, PATH_REVPROPS_DIR, scratch_pool);
+
+ if ( src_ffd->format < SVN_FS_FS__MIN_PACKED_REVPROP_FORMAT
+ || src_ffd->min_unpacked_rev < rev + max_files_per_dir)
+ {
+ /* copy unpacked revprops rev by rev */
+ iterpool = svn_pool_create(scratch_pool);
+ for (revprop_rev = rev;
+ revprop_rev < rev + max_files_per_dir;
+ revprop_rev++)
+ {
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(hotcopy_copy_shard_file(src_subdir, dst_subdir,
+ revprop_rev, max_files_per_dir,
+ iterpool));
+ }
+ svn_pool_destroy(iterpool);
+ }
+ else
+ {
+ /* revprop for revision 0 will never be packed */
+ if (rev == 0)
+ SVN_ERR(hotcopy_copy_shard_file(src_subdir, dst_subdir,
+ 0, max_files_per_dir,
+ scratch_pool));
+
+ /* packed revprops folder */
+ packed_shard = apr_psprintf(scratch_pool, "%ld" PATH_EXT_PACKED_SHARD,
+ rev / max_files_per_dir);
+ src_subdir_packed_shard = svn_dirent_join(src_subdir, packed_shard,
+ scratch_pool);
+ SVN_ERR(hotcopy_io_copy_dir_recursively(src_subdir_packed_shard,
+ dst_subdir, packed_shard,
+ TRUE /* copy_perms */,
+ NULL /* cancel_func */, NULL,
+ scratch_pool));
+ }
+
+ /* If necessary, update the min-unpacked rev file in the hotcopy. */
+ if (*dst_min_unpacked_rev < rev + max_files_per_dir)
+ {
+ *dst_min_unpacked_rev = rev + max_files_per_dir;
+ SVN_ERR(write_revnum_file(dst_fs->path, PATH_MIN_UNPACKED_REV,
+ *dst_min_unpacked_rev,
+ scratch_pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* If NEW_YOUNGEST is younger than *DST_YOUNGEST, update the 'current'
+ * file in DST_FS and set *DST_YOUNGEST to NEW_YOUNGEST.
+ * Use SCRATCH_POOL for temporary allocations. */
+static svn_error_t *
+hotcopy_update_current(svn_revnum_t *dst_youngest,
+ svn_fs_t *dst_fs,
+ svn_revnum_t new_youngest,
+ apr_pool_t *scratch_pool)
+{
+ char next_node_id[MAX_KEY_SIZE] = "0";
+ char next_copy_id[MAX_KEY_SIZE] = "0";
+ fs_fs_data_t *dst_ffd = dst_fs->fsap_data;
+
+ if (*dst_youngest >= new_youngest)
+ return SVN_NO_ERROR;
+
+ /* If necessary, get new current next_node and next_copy IDs. */
+ if (dst_ffd->format < SVN_FS_FS__MIN_NO_GLOBAL_IDS_FORMAT)
+ {
+ apr_off_t root_offset;
+ apr_file_t *rev_file;
+ char max_node_id[MAX_KEY_SIZE] = "0";
+ char max_copy_id[MAX_KEY_SIZE] = "0";
+ apr_size_t len;
+
+ if (dst_ffd->format >= SVN_FS_FS__MIN_PACKED_FORMAT)
+ SVN_ERR(update_min_unpacked_rev(dst_fs, scratch_pool));
+
+ SVN_ERR(open_pack_or_rev_file(&rev_file, dst_fs, new_youngest,
+ scratch_pool));
+ SVN_ERR(get_root_changes_offset(&root_offset, NULL, rev_file,
+ dst_fs, new_youngest, scratch_pool));
+ SVN_ERR(recover_find_max_ids(dst_fs, new_youngest, rev_file,
+ root_offset, max_node_id, max_copy_id,
+ scratch_pool));
+ SVN_ERR(svn_io_file_close(rev_file, scratch_pool));
+
+ /* We store the _next_ ids. */
+ len = strlen(max_node_id);
+ svn_fs_fs__next_key(max_node_id, &len, next_node_id);
+ len = strlen(max_copy_id);
+ svn_fs_fs__next_key(max_copy_id, &len, next_copy_id);
+ }
+
+ /* Update 'current'. */
+ SVN_ERR(write_current(dst_fs, new_youngest, next_node_id, next_copy_id,
+ scratch_pool));
+
+ *dst_youngest = new_youngest;
+
+ return SVN_NO_ERROR;
+}
+
+
+/* Remove revision or revprop files between START_REV (inclusive) and
+ * END_REV (non-inclusive) from folder DST_SUBDIR in DST_FS. Assume
+ * sharding as per MAX_FILES_PER_DIR.
+ * Use SCRATCH_POOL for temporary allocations. */
+static svn_error_t *
+hotcopy_remove_files(svn_fs_t *dst_fs,
+ const char *dst_subdir,
+ svn_revnum_t start_rev,
+ svn_revnum_t end_rev,
+ int max_files_per_dir,
+ apr_pool_t *scratch_pool)
+{
+ const char *shard;
+ const char *dst_subdir_shard;
+ svn_revnum_t rev;
+ apr_pool_t *iterpool;
+
+ /* Pre-compute paths for initial shard. */
+ shard = apr_psprintf(scratch_pool, "%ld", start_rev / max_files_per_dir);
+ dst_subdir_shard = svn_dirent_join(dst_subdir, shard, scratch_pool);
+
+ iterpool = svn_pool_create(scratch_pool);
+ for (rev = start_rev; rev < end_rev; rev++)
+ {
+ const char *path;
+ svn_pool_clear(iterpool);
+
+ /* If necessary, update paths for shard. */
+ if (rev != start_rev && rev % max_files_per_dir == 0)
+ {
+ shard = apr_psprintf(iterpool, "%ld", rev / max_files_per_dir);
+ dst_subdir_shard = svn_dirent_join(dst_subdir, shard, scratch_pool);
+ }
+
+ /* remove files for REV */
+ path = svn_dirent_join(dst_subdir_shard,
+ apr_psprintf(iterpool, "%ld", rev),
+ iterpool);
+
+ /* Make the rev file writable and remove it. */
+ SVN_ERR(svn_io_set_file_read_write(path, TRUE, iterpool));
+ SVN_ERR(svn_io_remove_file2(path, TRUE, iterpool));
+ }
+
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+/* Remove revisions between START_REV (inclusive) and END_REV (non-inclusive)
+ * from DST_FS. Assume sharding as per MAX_FILES_PER_DIR.
+ * Use SCRATCH_POOL for temporary allocations. */
+static svn_error_t *
+hotcopy_remove_rev_files(svn_fs_t *dst_fs,
+ svn_revnum_t start_rev,
+ svn_revnum_t end_rev,
+ int max_files_per_dir,
+ apr_pool_t *scratch_pool)
+{
+ SVN_ERR_ASSERT(start_rev <= end_rev);
+ SVN_ERR(hotcopy_remove_files(dst_fs,
+ svn_dirent_join(dst_fs->path,
+ PATH_REVS_DIR,
+ scratch_pool),
+ start_rev, end_rev,
+ max_files_per_dir, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* Remove revision properties between START_REV (inclusive) and END_REV
+ * (non-inclusive) from DST_FS. Assume sharding as per MAX_FILES_PER_DIR.
+ * Use SCRATCH_POOL for temporary allocations. Revision 0 revprops will
+ * not be deleted. */
+static svn_error_t *
+hotcopy_remove_revprop_files(svn_fs_t *dst_fs,
+ svn_revnum_t start_rev,
+ svn_revnum_t end_rev,
+ int max_files_per_dir,
+ apr_pool_t *scratch_pool)
+{
+ SVN_ERR_ASSERT(start_rev <= end_rev);
+
+ /* don't delete rev 0 props */
+ SVN_ERR(hotcopy_remove_files(dst_fs,
+ svn_dirent_join(dst_fs->path,
+ PATH_REVPROPS_DIR,
+ scratch_pool),
+ start_rev ? start_rev : 1, end_rev,
+ max_files_per_dir, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* Verify that DST_FS is a suitable destination for an incremental
+ * hotcopy from SRC_FS. */
+static svn_error_t *
+hotcopy_incremental_check_preconditions(svn_fs_t *src_fs,
+ svn_fs_t *dst_fs,
+ apr_pool_t *pool)
+{
+ fs_fs_data_t *src_ffd = src_fs->fsap_data;
+ fs_fs_data_t *dst_ffd = dst_fs->fsap_data;
+
+ /* We only support incremental hotcopy between the same format. */
+ if (src_ffd->format != dst_ffd->format)
+ return svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
+ _("The FSFS format (%d) of the hotcopy source does not match the "
+ "FSFS format (%d) of the hotcopy destination; please upgrade "
+ "both repositories to the same format"),
+ src_ffd->format, dst_ffd->format);
+
+ /* Make sure the UUID of source and destination match up.
+ * We don't want to copy over a different repository. */
+ if (strcmp(src_fs->uuid, dst_fs->uuid) != 0)
+ return svn_error_create(SVN_ERR_RA_UUID_MISMATCH, NULL,
+ _("The UUID of the hotcopy source does "
+ "not match the UUID of the hotcopy "
+ "destination"));
+
+ /* Also require same shard size. */
+ if (src_ffd->max_files_per_dir != dst_ffd->max_files_per_dir)
+ return svn_error_create(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
+ _("The sharding layout configuration "
+ "of the hotcopy source does not match "
+ "the sharding layout configuration of "
+ "the hotcopy destination"));
+ return SVN_NO_ERROR;
+}
+
+/* Remove folder PATH. Ignore errors due to the sub-tree not being empty.
+ * CANCEL_FUNC and CANCEL_BATON do the usual thing.
+ * Use POOL for temporary allocations.
+ */
+static svn_error_t *
+remove_folder(const char *path,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *pool)
+{
+ svn_error_t *err = svn_io_remove_dir2(path, TRUE,
+ cancel_func, cancel_baton, pool);
+
+ if (err && APR_STATUS_IS_ENOTEMPTY(err->apr_err))
+ {
+ svn_error_clear(err);
+ err = SVN_NO_ERROR;
+ }
+
+ return svn_error_trace(err);
+}
+
+/* Baton for hotcopy_body(). */
+struct hotcopy_body_baton {
+ svn_fs_t *src_fs;
+ svn_fs_t *dst_fs;
+ svn_boolean_t incremental;
+ svn_cancel_func_t cancel_func;
+ void *cancel_baton;
+} hotcopy_body_baton;
+
+/* Perform a hotcopy, either normal or incremental.
+ *
+ * Normal hotcopy assumes that the destination exists as an empty
+ * directory. It behaves like an incremental hotcopy except that
+ * none of the copied files already exist in the destination.
+ *
+ * An incremental hotcopy copies only changed or new files to the destination,
+ * and removes files from the destination no longer present in the source.
+ * While the incremental hotcopy is running, readers should still be able
+ * to access the destintation repository without error and should not see
+ * revisions currently in progress of being copied. Readers are able to see
+ * new fully copied revisions even if the entire incremental hotcopy procedure
+ * has not yet completed.
+ *
+ * Writers are blocked out completely during the entire incremental hotcopy
+ * process to ensure consistency. This function assumes that the repository
+ * write-lock is held.
+ */
+static svn_error_t *
+hotcopy_body(void *baton, apr_pool_t *pool)
+{
+ struct hotcopy_body_baton *hbb = baton;
+ svn_fs_t *src_fs = hbb->src_fs;
+ fs_fs_data_t *src_ffd = src_fs->fsap_data;
+ svn_fs_t *dst_fs = hbb->dst_fs;
+ fs_fs_data_t *dst_ffd = dst_fs->fsap_data;
+ int max_files_per_dir = src_ffd->max_files_per_dir;
+ svn_boolean_t incremental = hbb->incremental;
+ svn_cancel_func_t cancel_func = hbb->cancel_func;
+ void* cancel_baton = hbb->cancel_baton;
+ svn_revnum_t src_youngest;
+ svn_revnum_t dst_youngest;
+ svn_revnum_t rev;
+ svn_revnum_t src_min_unpacked_rev;
+ svn_revnum_t dst_min_unpacked_rev;
+ const char *src_subdir;
+ const char *dst_subdir;
+ const char *revprop_src_subdir;
+ const char *revprop_dst_subdir;
+ apr_pool_t *iterpool;
+ svn_node_kind_t kind;
+
+ /* Try to copy the config.
+ *
+ * ### We try copying the config file before doing anything else,
+ * ### because higher layers will abort the hotcopy if we throw
+ * ### an error from this function, and that renders the hotcopy
+ * ### unusable anyway. */
+ if (src_ffd->format >= SVN_FS_FS__MIN_CONFIG_FILE)
+ {
+ svn_error_t *err;
+
+ err = svn_io_dir_file_copy(src_fs->path, dst_fs->path, PATH_CONFIG,
+ pool);
+ if (err)
+ {
+ if (APR_STATUS_IS_ENOENT(err->apr_err))
+ {
+ /* 1.6.0 to 1.6.11 did not copy the configuration file during
+ * hotcopy. So if we're hotcopying a repository which has been
+ * created as a hotcopy itself, it's possible that fsfs.conf
+ * does not exist. Ask the user to re-create it.
+ *
+ * ### It would be nice to make this a non-fatal error,
+ * ### but this function does not get an svn_fs_t object
+ * ### so we have no way of just printing a warning via
+ * ### the fs->warning() callback. */
+
+ const char *msg;
+ const char *src_abspath;
+ const char *dst_abspath;
+ const char *config_relpath;
+ svn_error_t *err2;
+
+ config_relpath = svn_dirent_join(src_fs->path, PATH_CONFIG, pool);
+ err2 = svn_dirent_get_absolute(&src_abspath, src_fs->path, pool);
+ if (err2)
+ return svn_error_trace(svn_error_compose_create(err, err2));
+ err2 = svn_dirent_get_absolute(&dst_abspath, dst_fs->path, pool);
+ if (err2)
+ return svn_error_trace(svn_error_compose_create(err, err2));
+
+ /* ### hack: strip off the 'db/' directory from paths so
+ * ### they make sense to the user */
+ src_abspath = svn_dirent_dirname(src_abspath, pool);
+ dst_abspath = svn_dirent_dirname(dst_abspath, pool);
+
+ msg = apr_psprintf(pool,
+ _("Failed to create hotcopy at '%s'. "
+ "The file '%s' is missing from the source "
+ "repository. Please create this file, for "
+ "instance by running 'svnadmin upgrade %s'"),
+ dst_abspath, config_relpath, src_abspath);
+ return svn_error_quick_wrap(err, msg);
+ }
+ else
+ return svn_error_trace(err);
+ }
+ }
+
+ if (cancel_func)
+ SVN_ERR(cancel_func(cancel_baton));
+
+ /* Find the youngest revision in the source and destination.
+ * We only support hotcopies from sources with an equal or greater amount
+ * of revisions than the destination.
+ * This also catches the case where users accidentally swap the
+ * source and destination arguments. */
+ SVN_ERR(get_youngest(&src_youngest, src_fs->path, pool));
+ if (incremental)
+ {
+ SVN_ERR(get_youngest(&dst_youngest, dst_fs->path, pool));
+ if (src_youngest < dst_youngest)
+ return svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
+ _("The hotcopy destination already contains more revisions "
+ "(%lu) than the hotcopy source contains (%lu); are source "
+ "and destination swapped?"),
+ dst_youngest, src_youngest);
+ }
+ else
+ dst_youngest = 0;
+
+ if (cancel_func)
+ SVN_ERR(cancel_func(cancel_baton));
+
+ /* Copy the min unpacked rev, and read its value. */
+ if (src_ffd->format >= SVN_FS_FS__MIN_PACKED_FORMAT)
+ {
+ const char *min_unpacked_rev_path;
+
+ min_unpacked_rev_path = svn_dirent_join(src_fs->path,
+ PATH_MIN_UNPACKED_REV,
+ pool);
+ SVN_ERR(read_min_unpacked_rev(&src_min_unpacked_rev,
+ min_unpacked_rev_path,
+ pool));
+
+ min_unpacked_rev_path = svn_dirent_join(dst_fs->path,
+ PATH_MIN_UNPACKED_REV,
+ pool);
+ SVN_ERR(read_min_unpacked_rev(&dst_min_unpacked_rev,
+ min_unpacked_rev_path,
+ pool));
+
+ /* We only support packs coming from the hotcopy source.
+ * The destination should not be packed independently from
+ * the source. This also catches the case where users accidentally
+ * swap the source and destination arguments. */
+ if (src_min_unpacked_rev < dst_min_unpacked_rev)
+ return svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
+ _("The hotcopy destination already contains "
+ "more packed revisions (%lu) than the "
+ "hotcopy source contains (%lu)"),
+ dst_min_unpacked_rev - 1,
+ src_min_unpacked_rev - 1);
+
+ SVN_ERR(svn_io_dir_file_copy(src_fs->path, dst_fs->path,
+ PATH_MIN_UNPACKED_REV, pool));
+ }
+ else
+ {
+ src_min_unpacked_rev = 0;
+ dst_min_unpacked_rev = 0;
+ }
+
+ if (cancel_func)
+ SVN_ERR(cancel_func(cancel_baton));
+
+ /*
+ * Copy the necessary rev files.
+ */
+
+ src_subdir = svn_dirent_join(src_fs->path, PATH_REVS_DIR, pool);
+ dst_subdir = svn_dirent_join(dst_fs->path, PATH_REVS_DIR, pool);
+ SVN_ERR(svn_io_make_dir_recursively(dst_subdir, pool));
+
+ iterpool = svn_pool_create(pool);
+ /* First, copy packed shards. */
+ for (rev = 0; rev < src_min_unpacked_rev; rev += max_files_per_dir)
+ {
+ svn_pool_clear(iterpool);
+
+ if (cancel_func)
+ SVN_ERR(cancel_func(cancel_baton));
+
+ /* Copy the packed shard. */
+ SVN_ERR(hotcopy_copy_packed_shard(&dst_min_unpacked_rev,
+ src_fs, dst_fs,
+ rev, max_files_per_dir,
+ iterpool));
+
+ /* If necessary, update 'current' to the most recent packed rev,
+ * so readers can see new revisions which arrived in this pack. */
+ SVN_ERR(hotcopy_update_current(&dst_youngest, dst_fs,
+ rev + max_files_per_dir - 1,
+ iterpool));
+
+ /* Remove revision files which are now packed. */
+ if (incremental)
+ {
+ SVN_ERR(hotcopy_remove_rev_files(dst_fs, rev,
+ rev + max_files_per_dir,
+ max_files_per_dir, iterpool));
+ if (dst_ffd->format >= SVN_FS_FS__MIN_PACKED_REVPROP_FORMAT)
+ SVN_ERR(hotcopy_remove_revprop_files(dst_fs, rev,
+ rev + max_files_per_dir,
+ max_files_per_dir,
+ iterpool));
+ }
+
+ /* Now that all revisions have moved into the pack, the original
+ * rev dir can be removed. */
+ SVN_ERR(remove_folder(path_rev_shard(dst_fs, rev, iterpool),
+ cancel_func, cancel_baton, iterpool));
+ if (rev > 0 && dst_ffd->format >= SVN_FS_FS__MIN_PACKED_REVPROP_FORMAT)
+ SVN_ERR(remove_folder(path_revprops_shard(dst_fs, rev, iterpool),
+ cancel_func, cancel_baton, iterpool));
+ }
+
+ if (cancel_func)
+ SVN_ERR(cancel_func(cancel_baton));
+
+ /* Now, copy pairs of non-packed revisions and revprop files.
+ * If necessary, update 'current' after copying all files from a shard. */
+ SVN_ERR_ASSERT(rev == src_min_unpacked_rev);
+ SVN_ERR_ASSERT(src_min_unpacked_rev == dst_min_unpacked_rev);
+ revprop_src_subdir = svn_dirent_join(src_fs->path, PATH_REVPROPS_DIR, pool);
+ revprop_dst_subdir = svn_dirent_join(dst_fs->path, PATH_REVPROPS_DIR, pool);
+ SVN_ERR(svn_io_make_dir_recursively(revprop_dst_subdir, pool));
+ for (; rev <= src_youngest; rev++)
+ {
+ svn_error_t *err;
+
+ svn_pool_clear(iterpool);
+
+ if (cancel_func)
+ SVN_ERR(cancel_func(cancel_baton));
+
+ /* Copy the rev file. */
+ err = hotcopy_copy_shard_file(src_subdir, dst_subdir,
+ rev, max_files_per_dir,
+ iterpool);
+ if (err)
+ {
+ if (APR_STATUS_IS_ENOENT(err->apr_err) &&
+ src_ffd->format >= SVN_FS_FS__MIN_PACKED_FORMAT)
+ {
+ svn_error_clear(err);
+
+ /* The source rev file does not exist. This can happen if the
+ * source repository is being packed concurrently with this
+ * hotcopy operation.
+ *
+ * If the new revision is now packed, and the youngest revision
+ * we're interested in is not inside this pack, try to copy the
+ * pack instead.
+ *
+ * If the youngest revision ended up being packed, don't try
+ * to be smart and work around this. Just abort the hotcopy. */
+ SVN_ERR(update_min_unpacked_rev(src_fs, pool));
+ if (is_packed_rev(src_fs, rev))
+ {
+ if (is_packed_rev(src_fs, src_youngest))
+ return svn_error_createf(
+ SVN_ERR_FS_NO_SUCH_REVISION, NULL,
+ _("The assumed HEAD revision (%lu) of the "
+ "hotcopy source has been packed while the "
+ "hotcopy was in progress; please restart "
+ "the hotcopy operation"),
+ src_youngest);
+
+ SVN_ERR(hotcopy_copy_packed_shard(&dst_min_unpacked_rev,
+ src_fs, dst_fs,
+ rev, max_files_per_dir,
+ iterpool));
+ rev = dst_min_unpacked_rev;
+ continue;
+ }
+ else
+ return svn_error_createf(SVN_ERR_FS_NO_SUCH_REVISION, NULL,
+ _("Revision %lu disappeared from the "
+ "hotcopy source while hotcopy was "
+ "in progress"), rev);
+ }
+ else
+ return svn_error_trace(err);
+ }
+
+ /* Copy the revprop file. */
+ SVN_ERR(hotcopy_copy_shard_file(revprop_src_subdir,
+ revprop_dst_subdir,
+ rev, max_files_per_dir,
+ iterpool));
+
+ /* After completing a full shard, update 'current'. */
+ if (max_files_per_dir && rev % max_files_per_dir == 0)
+ SVN_ERR(hotcopy_update_current(&dst_youngest, dst_fs, rev, iterpool));
+ }
+ svn_pool_destroy(iterpool);
+
+ if (cancel_func)
+ SVN_ERR(cancel_func(cancel_baton));
+
+ /* We assume that all revisions were copied now, i.e. we didn't exit the
+ * above loop early. 'rev' was last incremented during exit of the loop. */
+ SVN_ERR_ASSERT(rev == src_youngest + 1);
+
+ /* All revisions were copied. Update 'current'. */
+ SVN_ERR(hotcopy_update_current(&dst_youngest, dst_fs, src_youngest, pool));
+
+ /* Replace the locks tree.
+ * This is racy in case readers are currently trying to list locks in
+ * the destination. However, we need to get rid of stale locks.
+ * This is the simplest way of doing this, so we accept this small race. */
+ dst_subdir = svn_dirent_join(dst_fs->path, PATH_LOCKS_DIR, pool);
+ SVN_ERR(svn_io_remove_dir2(dst_subdir, TRUE, cancel_func, cancel_baton,
+ pool));
+ src_subdir = svn_dirent_join(src_fs->path, PATH_LOCKS_DIR, pool);
+ SVN_ERR(svn_io_check_path(src_subdir, &kind, pool));
+ if (kind == svn_node_dir)
+ SVN_ERR(svn_io_copy_dir_recursively(src_subdir, dst_fs->path,
+ PATH_LOCKS_DIR, TRUE,
+ cancel_func, cancel_baton, pool));
+
+ /* Now copy the node-origins cache tree. */
+ src_subdir = svn_dirent_join(src_fs->path, PATH_NODE_ORIGINS_DIR, pool);
+ SVN_ERR(svn_io_check_path(src_subdir, &kind, pool));
+ if (kind == svn_node_dir)
+ SVN_ERR(hotcopy_io_copy_dir_recursively(src_subdir, dst_fs->path,
+ PATH_NODE_ORIGINS_DIR, TRUE,
+ cancel_func, cancel_baton, pool));
+
+ /*
+ * NB: Data copied below is only read by writers, not readers.
+ * Writers are still locked out at this point.
+ */
+
+ if (dst_ffd->format >= SVN_FS_FS__MIN_REP_SHARING_FORMAT)
+ {
+ /* Copy the rep cache and then remove entries for revisions
+ * younger than the destination's youngest revision. */
+ src_subdir = svn_dirent_join(src_fs->path, REP_CACHE_DB_NAME, pool);
+ dst_subdir = svn_dirent_join(dst_fs->path, REP_CACHE_DB_NAME, pool);
+ SVN_ERR(svn_io_check_path(src_subdir, &kind, pool));
+ if (kind == svn_node_file)
+ {
+ SVN_ERR(svn_sqlite__hotcopy(src_subdir, dst_subdir, pool));
+ SVN_ERR(svn_fs_fs__del_rep_reference(dst_fs, dst_youngest, pool));
+ }
+ }
+
+ /* Copy the txn-current file. */
+ if (dst_ffd->format >= SVN_FS_FS__MIN_TXN_CURRENT_FORMAT)
+ SVN_ERR(svn_io_dir_file_copy(src_fs->path, dst_fs->path,
+ PATH_TXN_CURRENT, pool));
+
+ /* If a revprop generation file exists in the source filesystem,
+ * reset it to zero (since this is on a different path, it will not
+ * overlap with data already in cache). Also, clean up stale files
+ * used for the named atomics implementation. */
+ SVN_ERR(svn_io_check_path(path_revprop_generation(src_fs, pool),
+ &kind, pool));
+ if (kind == svn_node_file)
+ SVN_ERR(write_revprop_generation_file(dst_fs, 0, pool));
+
+ SVN_ERR(cleanup_revprop_namespace(dst_fs));
+
+ /* Hotcopied FS is complete. Stamp it with a format file. */
+ SVN_ERR(write_format(svn_dirent_join(dst_fs->path, PATH_FORMAT, pool),
+ dst_ffd->format, max_files_per_dir, TRUE, pool));
+
+ return SVN_NO_ERROR;
+}
+
+
+/* Set up shared data between SRC_FS and DST_FS. */
+static void
+hotcopy_setup_shared_fs_data(svn_fs_t *src_fs, svn_fs_t *dst_fs)
+{
+ fs_fs_data_t *src_ffd = src_fs->fsap_data;
+ fs_fs_data_t *dst_ffd = dst_fs->fsap_data;
+
+ /* The common pool and mutexes are shared between src and dst filesystems.
+ * During hotcopy we only grab the mutexes for the destination, so there
+ * is no risk of dead-lock. We don't write to the src filesystem. Shared
+ * data for the src_fs has already been initialised in fs_hotcopy(). */
+ dst_ffd->shared = src_ffd->shared;
+}
+
+/* Create an empty filesystem at DST_FS at DST_PATH with the same
+ * configuration as SRC_FS (uuid, format, and other parameters).
+ * After creation DST_FS has no revisions, not even revision zero. */
+static svn_error_t *
+hotcopy_create_empty_dest(svn_fs_t *src_fs,
+ svn_fs_t *dst_fs,
+ const char *dst_path,
+ apr_pool_t *pool)
+{
+ fs_fs_data_t *src_ffd = src_fs->fsap_data;
+ fs_fs_data_t *dst_ffd = dst_fs->fsap_data;
+
+ dst_fs->path = apr_pstrdup(pool, dst_path);
+
+ dst_ffd->max_files_per_dir = src_ffd->max_files_per_dir;
+ dst_ffd->config = src_ffd->config;
+ dst_ffd->format = src_ffd->format;
+
+ /* Create the revision data directories. */
+ if (dst_ffd->max_files_per_dir)
+ SVN_ERR(svn_io_make_dir_recursively(path_rev_shard(dst_fs, 0, pool),
+ pool));
+ else
+ SVN_ERR(svn_io_make_dir_recursively(svn_dirent_join(dst_path,
+ PATH_REVS_DIR, pool),
+ pool));
+
+ /* Create the revprops directory. */
+ if (src_ffd->max_files_per_dir)
+ SVN_ERR(svn_io_make_dir_recursively(path_revprops_shard(dst_fs, 0, pool),
+ pool));
+ else
+ SVN_ERR(svn_io_make_dir_recursively(svn_dirent_join(dst_path,
+ PATH_REVPROPS_DIR,
+ pool),
+ pool));
+
+ /* Create the transaction directory. */
+ SVN_ERR(svn_io_make_dir_recursively(svn_dirent_join(dst_path, PATH_TXNS_DIR,
+ pool),
+ pool));
+
+ /* Create the protorevs directory. */
+ if (dst_ffd->format >= SVN_FS_FS__MIN_PROTOREVS_DIR_FORMAT)
+ SVN_ERR(svn_io_make_dir_recursively(svn_dirent_join(dst_path,
+ PATH_TXN_PROTOS_DIR,
+ pool),
+ pool));
+
+ /* Create the 'current' file. */
+ SVN_ERR(svn_io_file_create(svn_fs_fs__path_current(dst_fs, pool),
+ (dst_ffd->format >=
+ SVN_FS_FS__MIN_NO_GLOBAL_IDS_FORMAT
+ ? "0\n" : "0 1 1\n"),
+ pool));
+
+ /* Create lock file and UUID. */
+ SVN_ERR(svn_io_file_create(path_lock(dst_fs, pool), "", pool));
+ SVN_ERR(svn_fs_fs__set_uuid(dst_fs, src_fs->uuid, pool));
+
+ /* Create the min unpacked rev file. */
+ if (dst_ffd->format >= SVN_FS_FS__MIN_PACKED_FORMAT)
+ SVN_ERR(svn_io_file_create(path_min_unpacked_rev(dst_fs, pool),
+ "0\n", pool));
+ /* Create the txn-current file if the repository supports
+ the transaction sequence file. */
+ if (dst_ffd->format >= SVN_FS_FS__MIN_TXN_CURRENT_FORMAT)
+ {
+ SVN_ERR(svn_io_file_create(path_txn_current(dst_fs, pool),
+ "0\n", pool));
+ SVN_ERR(svn_io_file_create(path_txn_current_lock(dst_fs, pool),
+ "", pool));
+ }
+
+ dst_ffd->youngest_rev_cache = 0;
+
+ hotcopy_setup_shared_fs_data(src_fs, dst_fs);
+ SVN_ERR(svn_fs_fs__initialize_caches(dst_fs, pool));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_fs_fs__hotcopy(svn_fs_t *src_fs,
+ svn_fs_t *dst_fs,
+ const char *src_path,
+ const char *dst_path,
+ svn_boolean_t incremental,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *pool)
+{
+ struct hotcopy_body_baton hbb;
+
+ if (cancel_func)
+ SVN_ERR(cancel_func(cancel_baton));
+
+ SVN_ERR(svn_fs_fs__open(src_fs, src_path, pool));
+
+ if (incremental)
+ {
+ const char *dst_format_abspath;
+ svn_node_kind_t dst_format_kind;
+
+ /* Check destination format to be sure we know how to incrementally
+ * hotcopy to the destination FS. */
+ dst_format_abspath = svn_dirent_join(dst_path, PATH_FORMAT, pool);
+ SVN_ERR(svn_io_check_path(dst_format_abspath, &dst_format_kind, pool));
+ if (dst_format_kind == svn_node_none)
+ {
+ /* Destination doesn't exist yet. Perform a normal hotcopy to a
+ * empty destination using the same configuration as the source. */
+ SVN_ERR(hotcopy_create_empty_dest(src_fs, dst_fs, dst_path, pool));
+ }
+ else
+ {
+ /* Check the existing repository. */
+ SVN_ERR(svn_fs_fs__open(dst_fs, dst_path, pool));
+ SVN_ERR(hotcopy_incremental_check_preconditions(src_fs, dst_fs,
+ pool));
+ hotcopy_setup_shared_fs_data(src_fs, dst_fs);
+ SVN_ERR(svn_fs_fs__initialize_caches(dst_fs, pool));
+ }
+ }
+ else
+ {
+ /* Start out with an empty destination using the same configuration
+ * as the source. */
+ SVN_ERR(hotcopy_create_empty_dest(src_fs, dst_fs, dst_path, pool));
+ }
+
+ if (cancel_func)
+ SVN_ERR(cancel_func(cancel_baton));
+
+ hbb.src_fs = src_fs;
+ hbb.dst_fs = dst_fs;
+ hbb.incremental = incremental;
+ hbb.cancel_func = cancel_func;
+ hbb.cancel_baton = cancel_baton;
+ SVN_ERR(svn_fs_fs__with_write_lock(dst_fs, hotcopy_body, &hbb, pool));
+
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/libsvn_fs_fs/fs_fs.h b/subversion/libsvn_fs_fs/fs_fs.h
index c32ef55..c09f861 100644
--- a/subversion/libsvn_fs_fs/fs_fs.h
+++ b/subversion/libsvn_fs_fs/fs_fs.h
@@ -38,11 +38,31 @@ svn_error_t *svn_fs_fs__open(svn_fs_t *fs,
svn_error_t *svn_fs_fs__upgrade(svn_fs_t *fs,
apr_pool_t *pool);
-/* Copy the fsfs filesystem at SRC_PATH into a new copy at DST_PATH.
- Use POOL for temporary allocations. */
-svn_error_t *svn_fs_fs__hotcopy(const char *src_path,
- const char *dst_path,
- apr_pool_t *pool);
+/* Verify metadata in fsfs filesystem FS. Limit the checks to revisions
+ * START to END where possible. Indicate progress via the optional
+ * NOTIFY_FUNC callback using NOTIFY_BATON. The optional CANCEL_FUNC
+ * will periodically be called with CANCEL_BATON to allow for preemption.
+ * Use POOL for temporary allocations. */
+svn_error_t *svn_fs_fs__verify(svn_fs_t *fs,
+ svn_revnum_t start,
+ svn_revnum_t end,
+ svn_fs_progress_notify_func_t notify_func,
+ void *notify_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *pool);
+
+/* Copy the fsfs filesystem SRC_FS at SRC_PATH into a new copy DST_FS at
+ * DST_PATH. If INCREMENTAL is TRUE, do not re-copy data which already
+ * exists in DST_FS. Use POOL for temporary allocations. */
+svn_error_t * svn_fs_fs__hotcopy(svn_fs_t *src_fs,
+ svn_fs_t *dst_fs,
+ const char *src_path,
+ const char *dst_path,
+ svn_boolean_t incremental,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *pool);
/* Recover the fsfs associated with filesystem FS.
Use optional CANCEL_FUNC/CANCEL_BATON for cancellation support.
@@ -71,6 +91,7 @@ svn_error_t *svn_fs_fs__put_node_revision(svn_fs_t *fs,
/* Write the node-revision NODEREV into the stream OUTFILE, compatible with
filesystem format FORMAT. Only write mergeinfo-related metadata if
INCLUDE_MERGEINFO is true. Temporary allocations are from POOL. */
+/* ### Currently used only by fs_fs.c */
svn_error_t *
svn_fs_fs__write_noderev(svn_stream_t *outfile,
node_revision_t *noderev,
@@ -93,6 +114,12 @@ svn_error_t *svn_fs_fs__youngest_rev(svn_revnum_t *youngest,
svn_fs_t *fs,
apr_pool_t *pool);
+/* Return an error iff REV does not exist in FS. */
+svn_error_t *
+svn_fs_fs__revision_exists(svn_revnum_t rev,
+ svn_fs_t *fs,
+ apr_pool_t *pool);
+
/* Set *ROOT_ID to the node-id for the root of revision REV in
filesystem FS. Do any allocations in POOL. */
svn_error_t *svn_fs_fs__rev_get_root(svn_fs_id_t **root_id,
@@ -110,14 +137,16 @@ svn_error_t *svn_fs_fs__rep_contents_dir(apr_hash_t **entries,
apr_pool_t *pool);
/* Set *DIRENT to the entry identified by NAME in the directory given
- by NODEREV in filesystem FS. The returned object is allocated in POOL,
- which is also used for temporary allocations. */
+ by NODEREV in filesystem FS. If no such entry exits, *DIRENT will
+ be NULL. The returned object is allocated in RESULT_POOL; SCRATCH_POOL
+ used for temporary allocations. */
svn_error_t *
svn_fs_fs__rep_contents_dir_entry(svn_fs_dirent_t **dirent,
svn_fs_t *fs,
node_revision_t *noderev,
const char *name,
- apr_pool_t *pool);
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
/* Set *CONTENTS to be a readable svn_stream_t that receives the text
representation of node-revision NODEREV as seen in filesystem FS.
@@ -127,6 +156,20 @@ svn_error_t *svn_fs_fs__get_contents(svn_stream_t **contents,
node_revision_t *noderev,
apr_pool_t *pool);
+/* Attempt to fetch the text representation of node-revision NODEREV as
+ seen in filesystem FS and pass it along with the BATON to the PROCESSOR.
+ Set *SUCCESS only of the data could be provided and the processing
+ had been called.
+ Use POOL for all allocations.
+ */
+svn_error_t *
+svn_fs_fs__try_process_file_contents(svn_boolean_t *success,
+ svn_fs_t *fs,
+ node_revision_t *noderev,
+ svn_fs_process_contents_func_t processor,
+ void* baton,
+ apr_pool_t *pool);
+
/* Set *STREAM_P to a delta stream turning the contents of the file SOURCE into
the contents of the file TARGET, allocated in POOL.
If SOURCE is null, the empty string will be used. */
@@ -333,12 +376,6 @@ svn_error_t *svn_fs_fs__create(svn_fs_t *fs,
const char *path,
apr_pool_t *pool);
-/* Store the uuid of the repository FS in *UUID. Allocate space in
- POOL. */
-svn_error_t *svn_fs_fs__get_uuid(svn_fs_t *fs,
- const char **uuid,
- apr_pool_t *pool);
-
/* Set the uuid of repository FS to UUID, if UUID is not NULL;
otherwise, set the uuid of FS to a newly generated UUID. Perform
temporary allocations in POOL. */
diff --git a/subversion/libsvn_fs_fs/id.c b/subversion/libsvn_fs_fs/id.c
index 8575a82..1317829 100644
--- a/subversion/libsvn_fs_fs/id.c
+++ b/subversion/libsvn_fs_fs/id.c
@@ -26,6 +26,7 @@
#include "id.h"
#include "../libsvn_fs/fs-loader.h"
#include "private/svn_temp_serializer.h"
+#include "private/svn_string_private.h"
typedef struct id_private_t {
@@ -88,22 +89,25 @@ svn_string_t *
svn_fs_fs__id_unparse(const svn_fs_id_t *id,
apr_pool_t *pool)
{
- const char *txn_rev_id;
id_private_t *pvt = id->fsap_data;
if ((! pvt->txn_id))
{
- txn_rev_id = apr_psprintf(pool, "%ld/%"
- APR_OFF_T_FMT, pvt->rev, pvt->offset);
+ char rev_string[SVN_INT64_BUFFER_SIZE];
+ char offset_string[SVN_INT64_BUFFER_SIZE];
+
+ svn__i64toa(rev_string, pvt->rev);
+ svn__i64toa(offset_string, pvt->offset);
+ return svn_string_createf(pool, "%s.%s.r%s/%s",
+ pvt->node_id, pvt->copy_id,
+ rev_string, offset_string);
}
else
{
- txn_rev_id = pvt->txn_id;
+ return svn_string_createf(pool, "%s.%s.t%s",
+ pvt->node_id, pvt->copy_id,
+ pvt->txn_id);
}
- return svn_string_createf(pool, "%s.%s.%c%s",
- pvt->node_id, pvt->copy_id,
- (pvt->txn_id ? 't' : 'r'),
- txn_rev_id);
}
@@ -242,7 +246,7 @@ svn_fs_fs__id_parse(const char *data,
{
svn_fs_id_t *id;
id_private_t *pvt;
- char *data_copy, *str, *last_str;
+ char *data_copy, *str;
/* Dup the ID data into POOL. Our returned ID will have references
into this memory. */
@@ -255,24 +259,25 @@ svn_fs_fs__id_parse(const char *data,
id->fsap_data = pvt;
/* Now, we basically just need to "split" this data on `.'
- characters. We will use apr_strtok, which will put terminators
- where each of the '.'s used to be. Then our new id field will
- reference string locations inside our duplicate string.*/
+ characters. We will use svn_cstring_tokenize, which will put
+ terminators where each of the '.'s used to be. Then our new
+ id field will reference string locations inside our duplicate
+ string.*/
/* Node Id */
- str = apr_strtok(data_copy, ".", &last_str);
+ str = svn_cstring_tokenize(".", &data_copy);
if (str == NULL)
return NULL;
pvt->node_id = str;
/* Copy Id */
- str = apr_strtok(NULL, ".", &last_str);
+ str = svn_cstring_tokenize(".", &data_copy);
if (str == NULL)
return NULL;
pvt->copy_id = str;
/* Txn/Rev Id */
- str = apr_strtok(NULL, ".", &last_str);
+ str = svn_cstring_tokenize(".", &data_copy);
if (str == NULL)
return NULL;
@@ -284,12 +289,13 @@ svn_fs_fs__id_parse(const char *data,
/* This is a revision type ID */
pvt->txn_id = NULL;
- str = apr_strtok(str + 1, "/", &last_str);
+ data_copy = str + 1;
+ str = svn_cstring_tokenize("/", &data_copy);
if (str == NULL)
return NULL;
pvt->rev = SVN_STR_TO_REV(str);
- str = apr_strtok(NULL, "/", &last_str);
+ str = svn_cstring_tokenize("/", &data_copy);
if (str == NULL)
return NULL;
err = svn_cstring_atoi64(&val, str);
diff --git a/subversion/libsvn_fs_fs/key-gen.c b/subversion/libsvn_fs_fs/key-gen.c
index f0f6cce..a65c59d 100644
--- a/subversion/libsvn_fs_fs/key-gen.c
+++ b/subversion/libsvn_fs_fs/key-gen.c
@@ -41,8 +41,8 @@
void
svn_fs_fs__add_keys(const char *key1, const char *key2, char *result)
{
- int i1 = strlen(key1) - 1;
- int i2 = strlen(key2) - 1;
+ apr_ssize_t i1 = strlen(key1) - 1;
+ apr_ssize_t i2 = strlen(key2) - 1;
int i3 = 0;
int val;
int carry = 0;
@@ -60,7 +60,7 @@ svn_fs_fs__add_keys(const char *key1, const char *key2, char *result)
carry = val / 36;
val = val % 36;
- buf[i3++] = (val <= 9) ? (val + '0') : (val - 10 + 'a');
+ buf[i3++] = (char)((val <= 9) ? (val + '0') : (val - 10 + 'a'));
if (i1>=0)
i1--;
@@ -79,7 +79,7 @@ svn_fs_fs__add_keys(const char *key1, const char *key2, char *result)
void
svn_fs_fs__next_key(const char *this, apr_size_t *len, char *next)
{
- int i;
+ apr_ssize_t i;
apr_size_t olen = *len; /* remember the first length */
char c; /* current char */
svn_boolean_t carry = TRUE; /* boolean: do we have a carry or not?
@@ -115,7 +115,7 @@ svn_fs_fs__next_key(const char *this, apr_size_t *len, char *next)
if (c == '9')
next[i] = 'a';
else
- next[i] = c + 1;
+ next[i] = ++c;
}
}
else
@@ -146,8 +146,8 @@ svn_fs_fs__next_key(const char *this, apr_size_t *len, char *next)
int
svn_fs_fs__key_compare(const char *a, const char *b)
{
- int a_len = strlen(a);
- int b_len = strlen(b);
+ apr_size_t a_len = strlen(a);
+ apr_size_t b_len = strlen(b);
int cmp;
if (a_len > b_len)
diff --git a/subversion/libsvn_fs_fs/lock.c b/subversion/libsvn_fs_fs/lock.c
index 0ce5802..95bd943 100644
--- a/subversion/libsvn_fs_fs/lock.c
+++ b/subversion/libsvn_fs_fs/lock.c
@@ -105,7 +105,7 @@ hash_fetch(apr_hash_t *hash,
const char *key,
apr_pool_t *pool)
{
- svn_string_t *str = apr_hash_get(hash, key, APR_HASH_KEY_STRING);
+ svn_string_t *str = svn_hash_gets(hash, key);
return str ? str->data : NULL;
}
@@ -205,7 +205,7 @@ write_digest_file(apr_hash_t *children,
}
if (apr_hash_count(children))
{
- svn_stringbuf_t *children_list = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *children_list = svn_stringbuf_create_empty(pool);
for (hi = apr_hash_first(pool, children); hi; hi = apr_hash_next(hi))
{
svn_stringbuf_appendbytes(children_list,
@@ -324,8 +324,8 @@ read_digest_file(apr_hash_t **children_p,
for (i = 0; i < kiddos->nelts; i++)
{
- apr_hash_set(*children_p, APR_ARRAY_IDX(kiddos, i, const char *),
- APR_HASH_KEY_STRING, (void *)1);
+ svn_hash_sets(*children_p, APR_ARRAY_IDX(kiddos, i, const char *),
+ (void *)1);
}
}
return SVN_NO_ERROR;
@@ -387,11 +387,9 @@ set_lock(const char *fs_path,
else
{
/* If we already have an entry for this path, we're done. */
- if (apr_hash_get(this_children, lock_digest_path,
- APR_HASH_KEY_STRING))
+ if (svn_hash_gets(this_children, lock_digest_path))
break;
- apr_hash_set(this_children, lock_digest_path,
- APR_HASH_KEY_STRING, (void *)1);
+ svn_hash_sets(this_children, lock_digest_path, (void *)1);
}
SVN_ERR(write_digest_file(this_children, this_lock, fs_path,
digest_path, perms_reference, subpool));
@@ -448,7 +446,7 @@ delete_lock(svn_fs_t *fs,
}
if (child_to_kill)
- apr_hash_set(this_children, child_to_kill, APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(this_children, child_to_kill, NULL);
if (! (this_lock || apr_hash_count(this_children) != 0))
{
@@ -477,23 +475,31 @@ delete_lock(svn_fs_t *fs,
/* Set *LOCK_P to the lock for PATH in FS. HAVE_WRITE_LOCK should be
TRUE if the caller (or one of its callers) has taken out the
- repository-wide write lock, FALSE otherwise. Use POOL for
- allocations. */
+ repository-wide write lock, FALSE otherwise. If MUST_EXIST is
+ not set, the function will simply return NULL in *LOCK_P instead
+ of creating an SVN_FS__ERR_NO_SUCH_LOCK error in case the lock
+ was not found (much faster). Use POOL for allocations. */
static svn_error_t *
get_lock(svn_lock_t **lock_p,
svn_fs_t *fs,
const char *path,
svn_boolean_t have_write_lock,
+ svn_boolean_t must_exist,
apr_pool_t *pool)
{
- svn_lock_t *lock;
+ svn_lock_t *lock = NULL;
const char *digest_path;
+ svn_node_kind_t kind;
SVN_ERR(digest_path_from_path(&digest_path, fs->path, path, pool));
+ SVN_ERR(svn_io_check_path(digest_path, &kind, pool));
+
+ *lock_p = NULL;
+ if (kind != svn_node_none)
+ SVN_ERR(read_digest_file(NULL, &lock, fs->path, digest_path, pool));
- SVN_ERR(read_digest_file(NULL, &lock, fs->path, digest_path, pool));
if (! lock)
- return SVN_FS__ERR_NO_SUCH_LOCK(fs, path, pool);
+ return must_exist ? SVN_FS__ERR_NO_SUCH_LOCK(fs, path) : SVN_NO_ERROR;
/* Don't return an expired lock. */
if (lock->expiration_date && (apr_time_now() > lock->expiration_date))
@@ -502,8 +508,7 @@ get_lock(svn_lock_t **lock_p,
Read operations shouldn't change the filesystem. */
if (have_write_lock)
SVN_ERR(delete_lock(fs, lock, pool));
- *lock_p = NULL;
- return SVN_FS__ERR_LOCK_EXPIRED(fs, lock->token, pool);
+ return SVN_FS__ERR_LOCK_EXPIRED(fs, lock->token);
}
*lock_p = lock;
@@ -525,7 +530,7 @@ get_lock_helper(svn_fs_t *fs,
svn_lock_t *lock;
svn_error_t *err;
- err = get_lock(&lock, fs, path, have_write_lock, pool);
+ err = get_lock(&lock, fs, path, have_write_lock, FALSE, pool);
/* We've deliberately decided that this function doesn't tell the
caller *why* the lock is unavailable. */
@@ -683,8 +688,7 @@ verify_lock(svn_fs_t *fs,
_("User '%s' does not own lock on path '%s' (currently locked by '%s')"),
fs->access_ctx->username, lock->path, lock->owner);
- else if (apr_hash_get(fs->access_ctx->lock_tokens, lock->token,
- APR_HASH_KEY_STRING) == NULL)
+ else if (svn_hash_gets(fs->access_ctx->lock_tokens, lock->token) == NULL)
return svn_error_createf
(SVN_ERR_FS_BAD_LOCK_TOKEN, NULL,
_("Cannot verify lock on path '%s'; no matching lock-token available"),
@@ -770,7 +774,7 @@ lock_body(void *baton, apr_pool_t *pool)
SVN_ERR(lb->fs->vtable->revision_root(&root, lb->fs, youngest, pool));
SVN_ERR(svn_fs_fs__check_path(&kind, root, lb->path, pool));
if (kind == svn_node_dir)
- return SVN_FS__ERR_NOT_FILE(lb->fs, lb->path, pool);
+ return SVN_FS__ERR_NOT_FILE(lb->fs, lb->path);
/* While our locking implementation easily supports the locking of
nonexistent paths, we deliberately choose not to allow such madness. */
@@ -790,7 +794,7 @@ lock_body(void *baton, apr_pool_t *pool)
/* We need to have a username attached to the fs. */
if (!lb->fs->access_ctx || !lb->fs->access_ctx->username)
- return SVN_FS__ERR_NO_USER(lb->fs, pool);
+ return SVN_FS__ERR_NO_USER(lb->fs);
/* Is the caller attempting to lock an out-of-date working file? */
if (SVN_IS_VALID_REVNUM(lb->current_rev))
@@ -836,7 +840,7 @@ lock_body(void *baton, apr_pool_t *pool)
if (! lb->steal_lock)
{
/* Sorry, the path is already locked. */
- return SVN_FS__ERR_PATH_ALREADY_LOCKED(lb->fs, existing_lock, pool);
+ return SVN_FS__ERR_PATH_ALREADY_LOCKED(lb->fs, existing_lock);
}
else
{
@@ -885,23 +889,23 @@ unlock_body(void *baton, apr_pool_t *pool)
svn_lock_t *lock;
/* This could return SVN_ERR_FS_BAD_LOCK_TOKEN or SVN_ERR_FS_LOCK_EXPIRED. */
- SVN_ERR(get_lock(&lock, ub->fs, ub->path, TRUE, pool));
+ SVN_ERR(get_lock(&lock, ub->fs, ub->path, TRUE, TRUE, pool));
/* Unless breaking the lock, we do some checks. */
if (! ub->break_lock)
{
/* Sanity check: the incoming token should match lock->token. */
if (strcmp(ub->token, lock->token) != 0)
- return SVN_FS__ERR_NO_SUCH_LOCK(ub->fs, lock->path, pool);
+ return SVN_FS__ERR_NO_SUCH_LOCK(ub->fs, lock->path);
/* There better be a username attached to the fs. */
if (! (ub->fs->access_ctx && ub->fs->access_ctx->username))
- return SVN_FS__ERR_NO_USER(ub->fs, pool);
+ return SVN_FS__ERR_NO_USER(ub->fs);
/* And that username better be the same as the lock's owner. */
if (strcmp(ub->fs->access_ctx->username, lock->owner) != 0)
return SVN_FS__ERR_LOCK_OWNER_MISMATCH(
- ub->fs, ub->fs->access_ctx->username, lock->owner, pool);
+ ub->fs, ub->fs->access_ctx->username, lock->owner);
}
/* Remove lock and lock token files. */
@@ -1040,7 +1044,7 @@ get_locks_filter_func(void *baton,
else if ((b->requested_depth == svn_depth_files) ||
(b->requested_depth == svn_depth_immediates))
{
- const char *rel_uri = svn_fspath__is_child(b->path, lock->path, pool);
+ const char *rel_uri = svn_fspath__skip_ancestor(b->path, lock->path);
if (rel_uri && (svn_path_component_count(rel_uri) == 1))
SVN_ERR(b->get_locks_func(b->get_locks_baton, lock, pool));
}
diff --git a/subversion/libsvn_fs_fs/rep-cache-db.h b/subversion/libsvn_fs_fs/rep-cache-db.h
index f829e37..255ea07 100644
--- a/subversion/libsvn_fs_fs/rep-cache-db.h
+++ b/subversion/libsvn_fs_fs/rep-cache-db.h
@@ -1,9 +1,9 @@
-/* This file is automatically generated from rep-cache-db.sql.
+/* This file is automatically generated from rep-cache-db.sql and .dist_sandbox/subversion-1.8.13/subversion/libsvn_fs_fs/token-map.h.
* Do not edit this file -- edit the source and rerun gen-make.py */
#define STMT_CREATE_SCHEMA 0
+#define STMT_0_INFO {"STMT_CREATE_SCHEMA", NULL}
#define STMT_0 \
- "PRAGMA AUTO_VACUUM = 1; " \
"CREATE TABLE rep_cache ( " \
" hash TEXT NOT NULL PRIMARY KEY, " \
" revision INTEGER NOT NULL, " \
@@ -15,6 +15,7 @@
""
#define STMT_GET_REP 1
+#define STMT_1_INFO {"STMT_GET_REP", NULL}
#define STMT_1 \
"SELECT revision, offset, size, expanded_size " \
"FROM rep_cache " \
@@ -22,22 +23,61 @@
""
#define STMT_SET_REP 2
+#define STMT_2_INFO {"STMT_SET_REP", NULL}
#define STMT_2 \
"INSERT OR FAIL INTO rep_cache (hash, revision, offset, size, expanded_size) " \
"VALUES (?1, ?2, ?3, ?4, ?5) " \
""
-#define STMT_DEL_REPS_YOUNGER_THAN_REV 3
+#define STMT_GET_REPS_FOR_RANGE 3
+#define STMT_3_INFO {"STMT_GET_REPS_FOR_RANGE", NULL}
#define STMT_3 \
+ "SELECT hash, revision, offset, size, expanded_size " \
+ "FROM rep_cache " \
+ "WHERE revision >= ?1 AND revision <= ?2 " \
+ ""
+
+#define STMT_GET_MAX_REV 4
+#define STMT_4_INFO {"STMT_GET_MAX_REV", NULL}
+#define STMT_4 \
+ "SELECT MAX(revision) " \
+ "FROM rep_cache " \
+ ""
+
+#define STMT_DEL_REPS_YOUNGER_THAN_REV 5
+#define STMT_5_INFO {"STMT_DEL_REPS_YOUNGER_THAN_REV", NULL}
+#define STMT_5 \
"DELETE FROM rep_cache " \
"WHERE revision > ?1 " \
""
+#define STMT_LOCK_REP 6
+#define STMT_6_INFO {"STMT_LOCK_REP", NULL}
+#define STMT_6 \
+ "BEGIN TRANSACTION; " \
+ "INSERT INTO rep_cache VALUES ('dummy', 0, 0, 0, 0) " \
+ ""
+
#define REP_CACHE_DB_SQL_DECLARE_STATEMENTS(varname) \
static const char * const varname[] = { \
STMT_0, \
STMT_1, \
STMT_2, \
STMT_3, \
+ STMT_4, \
+ STMT_5, \
+ STMT_6, \
NULL \
}
+
+#define REP_CACHE_DB_SQL_DECLARE_STATEMENT_INFO(varname) \
+ static const char * const varname[][2] = { \
+ STMT_0_INFO, \
+ STMT_1_INFO, \
+ STMT_2_INFO, \
+ STMT_3_INFO, \
+ STMT_4_INFO, \
+ STMT_5_INFO, \
+ STMT_6_INFO, \
+ {NULL, NULL} \
+ }
diff --git a/subversion/libsvn_fs_fs/rep-cache-db.sql b/subversion/libsvn_fs_fs/rep-cache-db.sql
index 7703bf3..b88c3e0 100644
--- a/subversion/libsvn_fs_fs/rep-cache-db.sql
+++ b/subversion/libsvn_fs_fs/rep-cache-db.sql
@@ -22,8 +22,6 @@
*/
-- STMT_CREATE_SCHEMA
-PRAGMA AUTO_VACUUM = 1;
-
/* A table mapping representation hashes to locations in a rev file. */
CREATE TABLE rep_cache (
hash TEXT NOT NULL PRIMARY KEY,
@@ -41,11 +39,27 @@ SELECT revision, offset, size, expanded_size
FROM rep_cache
WHERE hash = ?1
-
-- STMT_SET_REP
INSERT OR FAIL INTO rep_cache (hash, revision, offset, size, expanded_size)
VALUES (?1, ?2, ?3, ?4, ?5)
+-- STMT_GET_REPS_FOR_RANGE
+SELECT hash, revision, offset, size, expanded_size
+FROM rep_cache
+WHERE revision >= ?1 AND revision <= ?2
+
+-- STMT_GET_MAX_REV
+SELECT MAX(revision)
+FROM rep_cache
+
-- STMT_DEL_REPS_YOUNGER_THAN_REV
DELETE FROM rep_cache
WHERE revision > ?1
+
+/* An INSERT takes an SQLite reserved lock that prevents other writes
+ but doesn't block reads. The incomplete transaction means that no
+ permanent change is made to the database and the transaction is
+ removed when the database is closed. */
+-- STMT_LOCK_REP
+BEGIN TRANSACTION;
+INSERT INTO rep_cache VALUES ('dummy', 0, 0, 0, 0)
diff --git a/subversion/libsvn_fs_fs/rep-cache.c b/subversion/libsvn_fs_fs/rep-cache.c
index b3867d9..0082266 100644
--- a/subversion/libsvn_fs_fs/rep-cache.c
+++ b/subversion/libsvn_fs_fs/rep-cache.c
@@ -20,6 +20,8 @@
* ====================================================================
*/
+#include "svn_pools.h"
+
#include "svn_private_config.h"
#include "fs_fs.h"
@@ -39,32 +41,90 @@
REP_CACHE_DB_SQL_DECLARE_STATEMENTS(statements);
+
+/** Helper functions. **/
+static APR_INLINE const char *
+path_rep_cache_db(const char *fs_path,
+ apr_pool_t *result_pool)
+{
+ return svn_dirent_join(fs_path, REP_CACHE_DB_NAME, result_pool);
+}
+
+/* Check that REP refers to a revision that exists in FS. */
+static svn_error_t *
+rep_has_been_born(representation_t *rep,
+ svn_fs_t *fs,
+ apr_pool_t *pool)
+{
+ SVN_ERR_ASSERT(rep);
+
+ SVN_ERR(svn_fs_fs__revision_exists(rep->revision, fs, pool));
+
+ return SVN_NO_ERROR;
+}
+
+
+
+/** Library-private API's. **/
+
+/* Body of svn_fs_fs__open_rep_cache().
+ Implements svn_atomic__init_once().init_func.
+ */
static svn_error_t *
open_rep_cache(void *baton,
apr_pool_t *pool)
{
svn_fs_t *fs = baton;
fs_fs_data_t *ffd = fs->fsap_data;
+ svn_sqlite__db_t *sdb;
const char *db_path;
int version;
/* Open (or create) the sqlite database. It will be automatically
- closed when fs->pool is destoyed. */
- db_path = svn_dirent_join(fs->path, REP_CACHE_DB_NAME, pool);
- SVN_ERR(svn_sqlite__open(&ffd->rep_cache_db, db_path,
+ closed when fs->pool is destoyed. */
+ db_path = path_rep_cache_db(fs->path, pool);
+#ifndef WIN32
+ {
+ /* We want to extend the permissions that apply to the repository
+ as a whole when creating a new rep cache and not simply default
+ to umask. */
+ svn_boolean_t exists;
+
+ SVN_ERR(svn_fs_fs__exists_rep_cache(&exists, fs, pool));
+ if (!exists)
+ {
+ const char *current = svn_fs_fs__path_current(fs, pool);
+ svn_error_t *err = svn_io_file_create(db_path, "", pool);
+
+ if (err && !APR_STATUS_IS_EEXIST(err->apr_err))
+ /* A real error. */
+ return svn_error_trace(err);
+ else if (err)
+ /* Some other thread/process created the file. */
+ svn_error_clear(err);
+ else
+ /* We created the file. */
+ SVN_ERR(svn_io_copy_perms(current, db_path, pool));
+ }
+ }
+#endif
+ SVN_ERR(svn_sqlite__open(&sdb, db_path,
svn_sqlite__mode_rwcreate, statements,
0, NULL,
fs->pool, pool));
- SVN_ERR(svn_sqlite__read_schema_version(&version, ffd->rep_cache_db, pool));
+ SVN_ERR(svn_sqlite__read_schema_version(&version, sdb, pool));
if (version < REP_CACHE_SCHEMA_FORMAT)
{
/* Must be 0 -- an uninitialized (no schema) database. Create
the schema. Results in schema version of 1. */
- SVN_ERR(svn_sqlite__exec_statements(ffd->rep_cache_db,
- STMT_CREATE_SCHEMA));
+ SVN_ERR(svn_sqlite__exec_statements(sdb, STMT_CREATE_SCHEMA));
}
+ /* This is used as a flag that the database is available so don't
+ set it earlier. */
+ ffd->rep_cache_db = sdb;
+
return SVN_NO_ERROR;
}
@@ -78,6 +138,112 @@ svn_fs_fs__open_rep_cache(svn_fs_t *fs,
return svn_error_quick_wrap(err, _("Couldn't open rep-cache database"));
}
+svn_error_t *
+svn_fs_fs__exists_rep_cache(svn_boolean_t *exists,
+ svn_fs_t *fs, apr_pool_t *pool)
+{
+ svn_node_kind_t kind;
+
+ SVN_ERR(svn_io_check_path(path_rep_cache_db(fs->path, pool),
+ &kind, pool));
+
+ *exists = (kind != svn_node_none);
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_fs_fs__walk_rep_reference(svn_fs_t *fs,
+ svn_revnum_t start,
+ svn_revnum_t end,
+ svn_error_t *(*walker)(representation_t *,
+ void *,
+ svn_fs_t *,
+ apr_pool_t *),
+ void *walker_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *pool)
+{
+ fs_fs_data_t *ffd = fs->fsap_data;
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+ int iterations = 0;
+
+ apr_pool_t *iterpool = svn_pool_create(pool);
+
+ /* Don't check ffd->rep_sharing_allowed. */
+ SVN_ERR_ASSERT(ffd->format >= SVN_FS_FS__MIN_REP_SHARING_FORMAT);
+
+ if (! ffd->rep_cache_db)
+ SVN_ERR(svn_fs_fs__open_rep_cache(fs, pool));
+
+ /* Check global invariants. */
+ if (start == 0)
+ {
+ svn_revnum_t max;
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, ffd->rep_cache_db,
+ STMT_GET_MAX_REV));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ max = svn_sqlite__column_revnum(stmt, 0);
+ SVN_ERR(svn_sqlite__reset(stmt));
+ if (SVN_IS_VALID_REVNUM(max)) /* The rep-cache could be empty. */
+ SVN_ERR(svn_fs_fs__revision_exists(max, fs, iterpool));
+ }
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, ffd->rep_cache_db,
+ STMT_GET_REPS_FOR_RANGE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "rr",
+ start, end));
+
+ /* Walk the cache entries. */
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ while (have_row)
+ {
+ representation_t *rep;
+ const char *sha1_digest;
+ svn_error_t *err;
+
+ /* Clear ITERPOOL occasionally. */
+ if (iterations++ % 16 == 0)
+ svn_pool_clear(iterpool);
+
+ /* Check for cancellation. */
+ if (cancel_func)
+ {
+ err = cancel_func(cancel_baton);
+ if (err)
+ return svn_error_compose_create(err, svn_sqlite__reset(stmt));
+ }
+
+ /* Construct a representation_t. */
+ rep = apr_pcalloc(iterpool, sizeof(*rep));
+ sha1_digest = svn_sqlite__column_text(stmt, 0, iterpool);
+ err = svn_checksum_parse_hex(&rep->sha1_checksum,
+ svn_checksum_sha1, sha1_digest,
+ iterpool);
+ if (err)
+ return svn_error_compose_create(err, svn_sqlite__reset(stmt));
+ rep->revision = svn_sqlite__column_revnum(stmt, 1);
+ rep->offset = svn_sqlite__column_int64(stmt, 2);
+ rep->size = svn_sqlite__column_int64(stmt, 3);
+ rep->expanded_size = svn_sqlite__column_int64(stmt, 4);
+
+ /* Walk. */
+ err = walker(rep, walker_baton, fs, iterpool);
+ if (err)
+ return svn_error_compose_create(err, svn_sqlite__reset(stmt));
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ }
+
+ SVN_ERR(svn_sqlite__reset(stmt));
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+
/* This function's caller ignores most errors it returns.
If you extend this function, check the callsite to see if you have
to make it not-ignore additional error codes. */
@@ -118,27 +284,12 @@ svn_fs_fs__get_rep_reference(representation_t **rep,
else
*rep = NULL;
- /* Sanity check. */
- if (*rep)
- {
- svn_revnum_t youngest;
+ SVN_ERR(svn_sqlite__reset(stmt));
- youngest = ffd->youngest_rev_cache;
- if (youngest < (*rep)->revision)
- {
- /* Stale cache. */
- SVN_ERR(svn_fs_fs__youngest_rev(&youngest, fs, pool));
-
- /* Fresh cache. */
- if (youngest < (*rep)->revision)
- return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
- _("Youngest revision is r%ld, but "
- "rep-cache contains r%ld"),
- youngest, (*rep)->revision);
- }
- }
+ if (*rep)
+ SVN_ERR(rep_has_been_born(*rep, fs, pool));
- return svn_sqlite__reset(stmt);
+ return SVN_NO_ERROR;
}
svn_error_t *
@@ -239,3 +390,17 @@ svn_fs_fs__del_rep_reference(svn_fs_t *fs,
return SVN_NO_ERROR;
}
+
+svn_error_t *
+svn_fs_fs__lock_rep_cache(svn_fs_t *fs,
+ apr_pool_t *pool)
+{
+ fs_fs_data_t *ffd = fs->fsap_data;
+
+ if (! ffd->rep_cache_db)
+ SVN_ERR(svn_fs_fs__open_rep_cache(fs, pool));
+
+ SVN_ERR(svn_sqlite__exec_statements(ffd->rep_cache_db, STMT_LOCK_REP));
+
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/libsvn_fs_fs/rep-cache.h b/subversion/libsvn_fs_fs/rep-cache.h
index 1ff1a70..3ccb056 100644
--- a/subversion/libsvn_fs_fs/rep-cache.h
+++ b/subversion/libsvn_fs_fs/rep-cache.h
@@ -40,6 +40,25 @@ svn_error_t *
svn_fs_fs__open_rep_cache(svn_fs_t *fs,
apr_pool_t *pool);
+/* Set *EXISTS to TRUE iff the rep-cache DB file exists. */
+svn_error_t *
+svn_fs_fs__exists_rep_cache(svn_boolean_t *exists,
+ svn_fs_t *fs, apr_pool_t *pool);
+
+/* Iterate all representations currently in FS's cache. */
+svn_error_t *
+svn_fs_fs__walk_rep_reference(svn_fs_t *fs,
+ svn_revnum_t start,
+ svn_revnum_t end,
+ svn_error_t *(*walker)(representation_t *rep,
+ void *walker_baton,
+ svn_fs_t *fs,
+ apr_pool_t *scratch_pool),
+ void *walker_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *pool);
+
/* Return the representation REP in FS which has fulltext CHECKSUM.
REP is allocated in POOL. If the rep cache database has not been
opened, just set *REP to NULL. */
@@ -69,6 +88,12 @@ svn_fs_fs__del_rep_reference(svn_fs_t *fs,
svn_revnum_t youngest,
apr_pool_t *pool);
+/* Start a transaction to take an SQLite reserved lock that prevents
+ other writes. */
+svn_error_t *
+svn_fs_fs__lock_rep_cache(svn_fs_t *fs,
+ apr_pool_t *pool);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/libsvn_fs_fs/structure b/subversion/libsvn_fs_fs/structure
index 5472a18..41caf1d 100644
--- a/subversion/libsvn_fs_fs/structure
+++ b/subversion/libsvn_fs_fs/structure
@@ -40,6 +40,9 @@ repository) is:
revprops/ Subdirectory containing rev-props
<shard>/ Shard directory, if sharding is in use (see below)
<revnum> File containing rev-props for <revnum>
+ <shard>.pack/ Pack directory, if the repo has been packed (see below)
+ <rev>.<count> Pack file, if the repository has been packed (see below)
+ manifest Pack manifest file, if a pack file exists (see below)
revprops.db SQLite database of the packed revision properties
transactions/ Subdirectory containing transactions
<txnid>.txn/ Directory containing transaction <txnid>
@@ -134,6 +137,7 @@ The formats are:
Format 3, understood by Subversion 1.5+
Format 4, understood by Subversion 1.6+
Format 5, understood by Subversion 1.7-dev, never released
+ Format 6, understood by Subversion 1.8
The differences between the formats are:
@@ -173,6 +177,12 @@ Revision changed paths list:
Format 1-3: Does not contain the node's kind.
Format 4+: Contains the node's kind.
+Shard packing:
+ Format 4: Applied to revision data only.
+ Format 5: Revprops would be packed independently of revision data.
+ Format 6+: Applied equally to revision data and revprop data
+ (i.e. same min packed revision)
+
# Incomplete list. See SVN_FS_FS__MIN_*_FORMAT
@@ -232,6 +242,80 @@ See r1143829 of this file:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/structure?view=markup&pathrev=1143829
+Packing revision properties (format 6+)
+---------------------------
+
+Similarly to the revision data, packing will concatenate multiple
+revprops into a single file. Since they are mutable data, we put an
+upper limit to the size of these files: We will concatenate the data
+up to the limit and then use a new file for the following revisions.
+
+The limit can be set and changed at will in the configuration file.
+It is 64kB by default. Because a pack file must contain at least one
+complete property list, files containing just one revision may exceed
+that limit.
+
+Furthermore, pack files can be compressed which saves about 75% of
+disk space. A configuration file flag enables the compression; it is
+off by default and may be switched on and off at will. The pack size
+limit is always applied to the uncompressed data. For this reason,
+the default is 256kB while compression has been enabled.
+
+Files are named after their start revision as "<rev>.<counter>" where
+counter will be increased whenever we rewrite a pack file due to a
+revprop change. The manifest file contains the list of pack file
+names, one line for each revision.
+
+Many tools track repository global data in revision properties at
+revision 0. To minimize I/O overhead for those applications, we
+will never pack that revision, i.e. its data is always being kept
+in revprops/0/0.
+
+Pack file format
+
+ Top level: <packed container>
+
+ We always apply data compression to the pack file - using the
+ SVN_DELTA_COMPRESSION_LEVEL_NONE level if compression is disabled.
+ (Note that compression at SVN_DELTA_COMPRESSION_LEVEL_NONE is not
+ a no-op stream transformation although most of the data will remain
+ human readable.)
+
+ container := header '\n' (revprops)+
+ header := start_rev '\n' rev_count '\n' (size '\n')+
+
+ All numbers in the header are given as ASCII decimals. rev_count
+ is the number of revisions packed into this container. There must
+ be exactly as many "size" and serialized "revprops". The "size"
+ values in the list are the length in bytes of the serialized
+ revprops of the respective revision.
+
+Writing to packed revprops
+
+ The old pack file is being read and the new revprops serialized.
+ If they fit into the same pack file, a temp file with the new
+ content gets written and moved into place just like an non-packed
+ revprop file would. No name change or manifest update required.
+
+ If they don't fit into the same pack file, i.e. exceed the pack
+ size limit, the pack will be split into 2 or 3 new packs just
+ before and / or after the modified revision.
+
+ In the current implementation, they will never be merged again.
+ To minimize fragmentation, the initial packing process will only
+ use about 90% of the limit, i.e. leave some room for growth.
+
+ When a pack file gets split, its counter is being increased
+ creating a new file and leaving the old content in place and
+ available for concurrent readers. Only after the new manifest
+ file got moved into place, will the old pack files be deleted.
+
+ Write access to revprops is being serialized by the global
+ filesystem write lock. We only need to build a few retries into
+ the reader code to gracefully handle manifest changes and pack
+ file deletions.
+
+
Node-revision IDs
-----------------
@@ -266,7 +350,7 @@ Within a revision:
"r<rev>/<offset>" txn-id fields.
In Format 3 and above, this uniqueness is done by changing a temporary
- id of "_<base36>" to "<rev>-<base36>". Note that this means that the
+ id of "_<base36>" to "<base36>-<rev>". Note that this means that the
originating revision of a line of history or a copy can be determined
by looking at the node ID.
@@ -379,7 +463,8 @@ defined:
props "<rev> <offset> <length> <size> <digest>" for props rep
<rev> and <offset> give location of rep
<length> gives length of rep, sans header and trailer
- <size> gives size of expanded rep
+ <size> gives size of expanded rep; may be 0 if equal
+ to the length
<digest> gives hex MD5 digest of expanded rep
### in formats >=4, also present:
<sha1-digest> gives hex SHA1 digest of expanded rep
@@ -441,6 +526,7 @@ A transaction directory has the following layout:
node.<nid>.<cid> New node-rev data for node
node.<nid>.<cid>.props Props for new node-rev, if changed
node.<nid>.<cid>.children Directory contents for node-rev
+ <sha1> Text representation of that sha1
In FS formats 1 and 2, it also contains:
@@ -458,6 +544,11 @@ The two kinds of props files are all in hash dump format. The "props"
file will always be present. The "node.<nid>.<cid>.props" file will
only be present if the node-rev properties have been changed.
+The <sha1> files have been introduced in FS format 6. Their content
+is that of text rep references: "<rev> <offset> <length> <size> <digest>"
+They will be written for text reps in the current transaction and be
+used to eliminate duplicate reps within that transaction.
+
The "next-ids" file contains a single line "<next-temp-node-id>
<next-temp-copy-id>\n" giving the next temporary node-ID and copy-ID
assignments (without the leading underscores). The next node-ID is
diff --git a/subversion/libsvn_fs_fs/temp_serializer.c b/subversion/libsvn_fs_fs/temp_serializer.c
index cb0bb6b..0178143 100644
--- a/subversion/libsvn_fs_fs/temp_serializer.c
+++ b/subversion/libsvn_fs_fs/temp_serializer.c
@@ -30,6 +30,7 @@
#include "private/svn_fs_util.h"
#include "private/svn_temp_serializer.h"
+#include "private/svn_subr_private.h"
#include "temp_serializer.h"
@@ -47,16 +48,16 @@ encode_number(apr_int64_t number, char *key_buffer)
if (number < 0)
{
number = -number;
- *key_buffer = (number & 63) + ' ' + 65;
+ *key_buffer = (char)((number & 63) + ' ' + 65);
}
else
- *key_buffer = (number & 63) + ' ' + 1;
+ *key_buffer = (char)((number & 63) + ' ' + 1);
number /= 64;
/* write 7 bits / byte until no significant bits are left */
while (number)
{
- *++key_buffer = (number & 127) + ' ' + 1;
+ *++key_buffer = (char)((number & 127) + ' ' + 1);
number /= 128;
}
@@ -64,10 +65,6 @@ encode_number(apr_int64_t number, char *key_buffer)
return key_buffer;
}
-/* Prepend the NUMBER to the STRING in a space efficient way that no other
- * (number,string) combination can produce the same result.
- * Allocate temporaries as well as the result from POOL.
- */
const char*
svn_fs_fs__combine_number_and_string(apr_int64_t number,
const char *string,
@@ -91,31 +88,6 @@ svn_fs_fs__combine_number_and_string(apr_int64_t number,
return key;
}
-/* Combine the numbers A and B a space efficient way that no other
- * combination of numbers can produce the same result.
- * Allocate temporaries as well as the result from POOL.
- */
-const char*
-svn_fs_fs__combine_two_numbers(apr_int64_t a,
- apr_int64_t b,
- apr_pool_t *pool)
-{
- /* encode numbers as 2x 10x7 bits + 1 space + 1 terminating \0*/
- char *key_buffer = apr_palloc(pool, 22);
- const char *key = key_buffer;
-
- /* combine the numbers. Since the separator is disjoint from any part
- * of the encoded numbers, there is no other combination that can yield
- * the same result */
- key_buffer = encode_number(a, key_buffer);
- *++key_buffer = ' ';
- key_buffer = encode_number(b, ++key_buffer);
- *++key_buffer = '\0';
-
- /* return the start of the key */
- return key;
-}
-
/* Utility function to serialize string S in the given serialization CONTEXT.
*/
static void
@@ -136,7 +108,7 @@ serialize_svn_string(svn_temp_serializer__context_t *context,
* Thus, we cannot use svn_temp_serializer__add_string. */
svn_temp_serializer__push(context,
(const void * const *)&string->data,
- string->len);
+ string->len + 1);
/* back to the caller's nesting level */
svn_temp_serializer__pop(context);
@@ -184,7 +156,7 @@ serialize_checksum(svn_temp_serializer__context_t *context,
/* Utility function to deserialize the checksum CS inside the BUFFER.
*/
static void
-deserialize_checksum(void *buffer, svn_checksum_t * const *cs)
+deserialize_checksum(void *buffer, svn_checksum_t **cs)
{
svn_temp_deserializer__resolve(buffer, (void **)cs);
if (*cs == NULL)
@@ -367,7 +339,7 @@ serialize_dir(apr_hash_t *entries, apr_pool_t *pool)
static apr_hash_t *
deserialize_dir(void *buffer, hash_data_t *hash_data, apr_pool_t *pool)
{
- apr_hash_t *result = apr_hash_make(pool);
+ apr_hash_t *result = svn_hash__make(pool);
apr_size_t i;
apr_size_t count;
svn_fs_dirent_t *entry;
@@ -388,7 +360,7 @@ deserialize_dir(void *buffer, hash_data_t *hash_data, apr_pool_t *pool)
svn_fs_fs__id_deserialize(entry, (svn_fs_id_t **)&entry->id);
/* add the entry to the hash */
- apr_hash_set(result, entry->name, APR_HASH_KEY_STRING, entry);
+ svn_hash_sets(result, entry->name, entry);
}
/* return the now complete hash */
@@ -489,7 +461,7 @@ serialize_txdeltawindow(svn_temp_serializer__context_t *context,
}
svn_error_t *
-svn_fs_fs__serialize_txdelta_window(char **buffer,
+svn_fs_fs__serialize_txdelta_window(void **buffer,
apr_size_t *buffer_size,
void *item,
apr_pool_t *pool)
@@ -522,7 +494,7 @@ svn_fs_fs__serialize_txdelta_window(char **buffer,
svn_error_t *
svn_fs_fs__deserialize_txdelta_window(void **item,
- char *buffer,
+ void *buffer,
apr_size_t buffer_size,
apr_pool_t *pool)
{
@@ -548,7 +520,7 @@ svn_fs_fs__deserialize_txdelta_window(void **item,
}
svn_error_t *
-svn_fs_fs__serialize_manifest(char **data,
+svn_fs_fs__serialize_manifest(void **data,
apr_size_t *data_len,
void *in,
apr_pool_t *pool)
@@ -564,7 +536,7 @@ svn_fs_fs__serialize_manifest(char **data,
svn_error_t *
svn_fs_fs__deserialize_manifest(void **out,
- char *data,
+ void *data,
apr_size_t data_len,
apr_pool_t *pool)
{
@@ -579,8 +551,144 @@ svn_fs_fs__deserialize_manifest(void **out,
return SVN_NO_ERROR;
}
+/* Auxilliary structure representing the content of a properties hash.
+ This structure is much easier to (de-)serialize than an apr_hash.
+ */
+typedef struct properties_data_t
+{
+ /* number of entries in the hash */
+ apr_size_t count;
+
+ /* reference to the keys */
+ const char **keys;
+
+ /* reference to the values */
+ const svn_string_t **values;
+} properties_data_t;
+
+/* Serialize COUNT C-style strings from *STRINGS into CONTEXT. */
+static void
+serialize_cstring_array(svn_temp_serializer__context_t *context,
+ const char ***strings,
+ apr_size_t count)
+{
+ apr_size_t i;
+ const char **entries = *strings;
+
+ /* serialize COUNT entries pointers (the array) */
+ svn_temp_serializer__push(context,
+ (const void * const *)strings,
+ count * sizeof(const char*));
+
+ /* serialize array elements */
+ for (i = 0; i < count; ++i)
+ svn_temp_serializer__add_string(context, &entries[i]);
+
+ svn_temp_serializer__pop(context);
+}
+
+/* Serialize COUNT svn_string_t* items from *STRINGS into CONTEXT. */
+static void
+serialize_svn_string_array(svn_temp_serializer__context_t *context,
+ const svn_string_t ***strings,
+ apr_size_t count)
+{
+ apr_size_t i;
+ const svn_string_t **entries = *strings;
+
+ /* serialize COUNT entries pointers (the array) */
+ svn_temp_serializer__push(context,
+ (const void * const *)strings,
+ count * sizeof(const char*));
+
+ /* serialize array elements */
+ for (i = 0; i < count; ++i)
+ serialize_svn_string(context, &entries[i]);
+
+ svn_temp_serializer__pop(context);
+}
+
+svn_error_t *
+svn_fs_fs__serialize_properties(void **data,
+ apr_size_t *data_len,
+ void *in,
+ apr_pool_t *pool)
+{
+ apr_hash_t *hash = in;
+ properties_data_t properties;
+ svn_temp_serializer__context_t *context;
+ apr_hash_index_t *hi;
+ svn_stringbuf_t *serialized;
+ apr_size_t i;
+
+ /* create our auxilliary data structure */
+ properties.count = apr_hash_count(hash);
+ properties.keys = apr_palloc(pool, sizeof(const char*) * (properties.count + 1));
+ properties.values = apr_palloc(pool, sizeof(const char*) * properties.count);
+
+ /* populate it with the hash entries */
+ for (hi = apr_hash_first(pool, hash), i=0; hi; hi = apr_hash_next(hi), ++i)
+ {
+ properties.keys[i] = svn__apr_hash_index_key(hi);
+ properties.values[i] = svn__apr_hash_index_val(hi);
+ }
+
+ /* serialize it */
+ context = svn_temp_serializer__init(&properties,
+ sizeof(properties),
+ properties.count * 100,
+ pool);
+
+ properties.keys[i] = "";
+ serialize_cstring_array(context, &properties.keys, properties.count + 1);
+ serialize_svn_string_array(context, &properties.values, properties.count);
+
+ /* return the serialized result */
+ serialized = svn_temp_serializer__get(context);
+
+ *data = serialized->data;
+ *data_len = serialized->len;
+
+ return SVN_NO_ERROR;
+}
+
svn_error_t *
-svn_fs_fs__serialize_id(char **data,
+svn_fs_fs__deserialize_properties(void **out,
+ void *data,
+ apr_size_t data_len,
+ apr_pool_t *pool)
+{
+ apr_hash_t *hash = svn_hash__make(pool);
+ properties_data_t *properties = (properties_data_t *)data;
+ size_t i;
+
+ /* de-serialize our auxilliary data structure */
+ svn_temp_deserializer__resolve(properties, (void**)&properties->keys);
+ svn_temp_deserializer__resolve(properties, (void**)&properties->values);
+
+ /* de-serialize each entry and put it into the hash */
+ for (i = 0; i < properties->count; ++i)
+ {
+ apr_size_t len = properties->keys[i+1] - properties->keys[i] - 1;
+ svn_temp_deserializer__resolve((void*)properties->keys,
+ (void**)&properties->keys[i]);
+
+ deserialize_svn_string((void*)properties->values,
+ (svn_string_t **)&properties->values[i]);
+
+ apr_hash_set(hash,
+ properties->keys[i], len,
+ properties->values[i]);
+ }
+
+ /* done */
+ *out = hash;
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_fs_fs__serialize_id(void **data,
apr_size_t *data_len,
void *in,
apr_pool_t *pool)
@@ -605,7 +713,7 @@ svn_fs_fs__serialize_id(char **data,
svn_error_t *
svn_fs_fs__deserialize_id(void **out,
- char *data,
+ void *data,
apr_size_t data_len,
apr_pool_t *pool)
{
@@ -623,17 +731,20 @@ svn_fs_fs__deserialize_id(void **out,
/** Caching node_revision_t objects. **/
svn_error_t *
-svn_fs_fs__serialize_node_revision(char **buffer,
- apr_size_t *buffer_size,
- void *item,
- apr_pool_t *pool)
+svn_fs_fs__serialize_node_revision(void **buffer,
+ apr_size_t *buffer_size,
+ void *item,
+ apr_pool_t *pool)
{
svn_stringbuf_t *serialized;
node_revision_t *noderev = item;
- /* create an (empty) serialization context with plenty of buffer space */
+ /* create an (empty) serialization context with plenty of (initial)
+ * buffer space. */
svn_temp_serializer__context_t *context =
- svn_temp_serializer__init(NULL, 0, 503, pool);
+ svn_temp_serializer__init(NULL, 0,
+ 1024 - SVN_TEMP_SERIALIZER__OVERHEAD,
+ pool);
/* serialize the noderev */
svn_fs_fs__noderev_serialize(context, &noderev);
@@ -648,7 +759,7 @@ svn_fs_fs__serialize_node_revision(char **buffer,
svn_error_t *
svn_fs_fs__deserialize_node_revision(void **item,
- char *buffer,
+ void *buffer,
apr_size_t buffer_size,
apr_pool_t *pool)
{
@@ -667,7 +778,7 @@ svn_fs_fs__deserialize_node_revision(void **item,
* to DATA and DATA_LEN. */
static svn_error_t *
return_serialized_dir_context(svn_temp_serializer__context_t *context,
- char **data,
+ void **data,
apr_size_t *data_len)
{
svn_stringbuf_t *serialized = svn_temp_serializer__get(context);
@@ -680,7 +791,7 @@ return_serialized_dir_context(svn_temp_serializer__context_t *context,
}
svn_error_t *
-svn_fs_fs__serialize_dir_entries(char **data,
+svn_fs_fs__serialize_dir_entries(void **data,
apr_size_t *data_len,
void *in,
apr_pool_t *pool)
@@ -696,7 +807,7 @@ svn_fs_fs__serialize_dir_entries(char **data,
svn_error_t *
svn_fs_fs__deserialize_dir_entries(void **out,
- char *data,
+ void *data,
apr_size_t data_len,
apr_pool_t *pool)
{
@@ -711,12 +822,12 @@ svn_fs_fs__deserialize_dir_entries(void **out,
svn_error_t *
svn_fs_fs__get_sharded_offset(void **out,
- const char *data,
+ const void *data,
apr_size_t data_len,
void *baton,
apr_pool_t *pool)
{
- apr_off_t *manifest = (apr_off_t *)data;
+ const apr_off_t *manifest = data;
apr_int64_t shard_pos = *(apr_int64_t *)baton;
*(apr_off_t *)out = manifest[shard_pos];
@@ -743,9 +854,9 @@ find_entry(svn_fs_dirent_t **entries,
for (middle = upper / 2; lower < upper; middle = (upper + lower) / 2)
{
const svn_fs_dirent_t *entry =
- svn_temp_deserializer__ptr(entries, (const void **)&entries[middle]);
+ svn_temp_deserializer__ptr(entries, (const void *const *)&entries[middle]);
const char* entry_name =
- svn_temp_deserializer__ptr(entry, (const void **)&entry->name);
+ svn_temp_deserializer__ptr(entry, (const void *const *)&entry->name);
int diff = strcmp(entry_name, name);
if (diff < 0)
@@ -759,9 +870,9 @@ find_entry(svn_fs_dirent_t **entries,
if (lower < count)
{
const svn_fs_dirent_t *entry =
- svn_temp_deserializer__ptr(entries, (const void **)&entries[lower]);
+ svn_temp_deserializer__ptr(entries, (const void *const *)&entries[lower]);
const char* entry_name =
- svn_temp_deserializer__ptr(entry, (const void **)&entry->name);
+ svn_temp_deserializer__ptr(entry, (const void *const *)&entry->name);
if (strcmp(entry_name, name) == 0)
*found = TRUE;
@@ -772,22 +883,22 @@ find_entry(svn_fs_dirent_t **entries,
svn_error_t *
svn_fs_fs__extract_dir_entry(void **out,
- const char *data,
+ const void *data,
apr_size_t data_len,
void *baton,
apr_pool_t *pool)
{
- hash_data_t *hash_data = (hash_data_t *)data;
+ const hash_data_t *hash_data = data;
const char* name = baton;
svn_boolean_t found;
/* resolve the reference to the entries array */
const svn_fs_dirent_t * const *entries =
- svn_temp_deserializer__ptr(data, (const void **)&hash_data->entries);
+ svn_temp_deserializer__ptr(data, (const void *const *)&hash_data->entries);
/* resolve the reference to the lengths array */
const apr_uint32_t *lengths =
- svn_temp_deserializer__ptr(data, (const void **)&hash_data->lengths);
+ svn_temp_deserializer__ptr(data, (const void *const *)&hash_data->lengths);
/* binary search for the desired entry by name */
apr_size_t pos = find_entry((svn_fs_dirent_t **)entries,
@@ -800,10 +911,10 @@ svn_fs_fs__extract_dir_entry(void **out,
if (found)
{
const svn_fs_dirent_t *source =
- svn_temp_deserializer__ptr(entries, (const void **)&entries[pos]);
+ svn_temp_deserializer__ptr(entries, (const void *const *)&entries[pos]);
/* Entries have been serialized one-by-one, each time including all
- * nestes structures and strings. Therefore, they occupy a single
+ * nested structures and strings. Therefore, they occupy a single
* block of memory whose end-offset is either the beginning of the
* next entry or the end of the buffer
*/
@@ -825,7 +936,7 @@ svn_fs_fs__extract_dir_entry(void **out,
* modification as a simply deserialize / modify / serialize sequence.
*/
static svn_error_t *
-slowly_replace_dir_entry(char **data,
+slowly_replace_dir_entry(void **data,
apr_size_t *data_len,
void *baton,
apr_pool_t *pool)
@@ -838,16 +949,13 @@ slowly_replace_dir_entry(char **data,
*data,
hash_data->len,
pool));
- apr_hash_set(dir,
- replace_baton->name,
- APR_HASH_KEY_STRING,
- replace_baton->new_entry);
+ svn_hash_sets(dir, replace_baton->name, replace_baton->new_entry);
return svn_fs_fs__serialize_dir_entries(data, data_len, dir, pool);
}
svn_error_t *
-svn_fs_fs__replace_dir_entry(char **data,
+svn_fs_fs__replace_dir_entry(void **data,
apr_size_t *data_len,
void *baton,
apr_pool_t *pool)
@@ -871,12 +979,12 @@ svn_fs_fs__replace_dir_entry(char **data,
/* resolve the reference to the entries array */
entries = (svn_fs_dirent_t **)
svn_temp_deserializer__ptr((const char *)hash_data,
- (const void **)&hash_data->entries);
+ (const void *const *)&hash_data->entries);
/* resolve the reference to the lengths array */
lengths = (apr_uint32_t *)
svn_temp_deserializer__ptr((const char *)hash_data,
- (const void **)&hash_data->lengths);
+ (const void *const *)&hash_data->lengths);
/* binary search for the desired entry by name */
pos = find_entry(entries, replace_baton->name, hash_data->count, &found);
@@ -945,8 +1053,289 @@ svn_fs_fs__replace_dir_entry(char **data,
hash_data = (hash_data_t *)*data;
lengths = (apr_uint32_t *)
svn_temp_deserializer__ptr((const char *)hash_data,
- (const void **)&hash_data->lengths);
+ (const void *const *)&hash_data->lengths);
lengths[pos] = length;
return SVN_NO_ERROR;
}
+
+/* Utility function to serialize change CHANGE_P in the given serialization
+ * CONTEXT.
+ */
+static void
+serialize_change(svn_temp_serializer__context_t *context,
+ change_t * const *change_p)
+{
+ const change_t * change = *change_p;
+ if (change == NULL)
+ return;
+
+ /* serialize the change struct itself */
+ svn_temp_serializer__push(context,
+ (const void * const *)change_p,
+ sizeof(*change));
+
+ /* serialize sub-structures */
+ svn_fs_fs__id_serialize(context, &change->noderev_id);
+
+ svn_temp_serializer__add_string(context, &change->path);
+ svn_temp_serializer__add_string(context, &change->copyfrom_path);
+
+ /* return to the caller's nesting level */
+ svn_temp_serializer__pop(context);
+}
+
+/* Utility function to serialize the CHANGE_P within the given
+ * serialization CONTEXT.
+ */
+static void
+deserialize_change(void *buffer, change_t **change_p)
+{
+ change_t * change;
+
+ /* fix-up of the pointer to the struct in question */
+ svn_temp_deserializer__resolve(buffer, (void **)change_p);
+
+ change = *change_p;
+ if (change == NULL)
+ return;
+
+ /* fix-up of sub-structures */
+ svn_fs_fs__id_deserialize(change, (svn_fs_id_t **)&change->noderev_id);
+
+ svn_temp_deserializer__resolve(change, (void **)&change->path);
+ svn_temp_deserializer__resolve(change, (void **)&change->copyfrom_path);
+}
+
+/* Auxiliary structure representing the content of a change_t array.
+ This structure is much easier to (de-)serialize than an APR array.
+ */
+typedef struct changes_data_t
+{
+ /* number of entries in the array */
+ int count;
+
+ /* reference to the changes */
+ change_t **changes;
+} changes_data_t;
+
+svn_error_t *
+svn_fs_fs__serialize_changes(void **data,
+ apr_size_t *data_len,
+ void *in,
+ apr_pool_t *pool)
+{
+ apr_array_header_t *array = in;
+ changes_data_t changes;
+ svn_temp_serializer__context_t *context;
+ svn_stringbuf_t *serialized;
+ int i;
+
+ /* initialize our auxiliary data structure */
+ changes.count = array->nelts;
+ changes.changes = apr_palloc(pool, sizeof(change_t*) * changes.count);
+
+ /* populate it with the array elements */
+ for (i = 0; i < changes.count; ++i)
+ changes.changes[i] = APR_ARRAY_IDX(array, i, change_t*);
+
+ /* serialize it and all its elements */
+ context = svn_temp_serializer__init(&changes,
+ sizeof(changes),
+ changes.count * 100,
+ pool);
+
+ svn_temp_serializer__push(context,
+ (const void * const *)&changes.changes,
+ changes.count * sizeof(change_t*));
+
+ for (i = 0; i < changes.count; ++i)
+ serialize_change(context, &changes.changes[i]);
+
+ svn_temp_serializer__pop(context);
+
+ /* return the serialized result */
+ serialized = svn_temp_serializer__get(context);
+
+ *data = serialized->data;
+ *data_len = serialized->len;
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_fs_fs__deserialize_changes(void **out,
+ void *data,
+ apr_size_t data_len,
+ apr_pool_t *pool)
+{
+ int i;
+ changes_data_t *changes = (changes_data_t *)data;
+ apr_array_header_t *array = apr_array_make(pool, changes->count,
+ sizeof(change_t *));
+
+ /* de-serialize our auxiliary data structure */
+ svn_temp_deserializer__resolve(changes, (void**)&changes->changes);
+
+ /* de-serialize each entry and add it to the array */
+ for (i = 0; i < changes->count; ++i)
+ {
+ deserialize_change((void*)changes->changes,
+ (change_t **)&changes->changes[i]);
+ APR_ARRAY_PUSH(array, change_t *) = changes->changes[i];
+ }
+
+ /* done */
+ *out = array;
+
+ return SVN_NO_ERROR;
+}
+
+/* Auxiliary structure representing the content of a svn_mergeinfo_t hash.
+ This structure is much easier to (de-)serialize than an APR array.
+ */
+typedef struct mergeinfo_data_t
+{
+ /* number of paths in the hash */
+ unsigned count;
+
+ /* COUNT keys (paths) */
+ const char **keys;
+
+ /* COUNT keys lengths (strlen of path) */
+ apr_ssize_t *key_lengths;
+
+ /* COUNT entries, each giving the number of ranges for the key */
+ int *range_counts;
+
+ /* all ranges in a single, concatenated buffer */
+ svn_merge_range_t *ranges;
+} mergeinfo_data_t;
+
+svn_error_t *
+svn_fs_fs__serialize_mergeinfo(void **data,
+ apr_size_t *data_len,
+ void *in,
+ apr_pool_t *pool)
+{
+ svn_mergeinfo_t mergeinfo = in;
+ mergeinfo_data_t merges;
+ svn_temp_serializer__context_t *context;
+ svn_stringbuf_t *serialized;
+ apr_hash_index_t *hi;
+ unsigned i;
+ int k;
+ apr_size_t range_count;
+
+ /* initialize our auxiliary data structure */
+ merges.count = apr_hash_count(mergeinfo);
+ merges.keys = apr_palloc(pool, sizeof(*merges.keys) * merges.count);
+ merges.key_lengths = apr_palloc(pool, sizeof(*merges.key_lengths) *
+ merges.count);
+ merges.range_counts = apr_palloc(pool, sizeof(*merges.range_counts) *
+ merges.count);
+
+ i = 0;
+ range_count = 0;
+ for (hi = apr_hash_first(pool, mergeinfo); hi; hi = apr_hash_next(hi), ++i)
+ {
+ svn_rangelist_t *ranges;
+ apr_hash_this(hi, (const void**)&merges.keys[i],
+ &merges.key_lengths[i],
+ (void **)&ranges);
+ merges.range_counts[i] = ranges->nelts;
+ range_count += ranges->nelts;
+ }
+
+ merges.ranges = apr_palloc(pool, sizeof(*merges.ranges) * range_count);
+
+ i = 0;
+ for (hi = apr_hash_first(pool, mergeinfo); hi; hi = apr_hash_next(hi))
+ {
+ svn_rangelist_t *ranges = svn__apr_hash_index_val(hi);
+ for (k = 0; k < ranges->nelts; ++k, ++i)
+ merges.ranges[i] = *APR_ARRAY_IDX(ranges, k, svn_merge_range_t*);
+ }
+
+ /* serialize it and all its elements */
+ context = svn_temp_serializer__init(&merges,
+ sizeof(merges),
+ range_count * 30,
+ pool);
+
+ /* keys array */
+ svn_temp_serializer__push(context,
+ (const void * const *)&merges.keys,
+ merges.count * sizeof(*merges.keys));
+
+ for (i = 0; i < merges.count; ++i)
+ svn_temp_serializer__add_string(context, &merges.keys[i]);
+
+ svn_temp_serializer__pop(context);
+
+ /* key lengths array */
+ svn_temp_serializer__push(context,
+ (const void * const *)&merges.key_lengths,
+ merges.count * sizeof(*merges.key_lengths));
+ svn_temp_serializer__pop(context);
+
+ /* range counts array */
+ svn_temp_serializer__push(context,
+ (const void * const *)&merges.range_counts,
+ merges.count * sizeof(*merges.range_counts));
+ svn_temp_serializer__pop(context);
+
+ /* ranges */
+ svn_temp_serializer__push(context,
+ (const void * const *)&merges.ranges,
+ range_count * sizeof(*merges.ranges));
+ svn_temp_serializer__pop(context);
+
+ /* return the serialized result */
+ serialized = svn_temp_serializer__get(context);
+
+ *data = serialized->data;
+ *data_len = serialized->len;
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_fs_fs__deserialize_mergeinfo(void **out,
+ void *data,
+ apr_size_t data_len,
+ apr_pool_t *pool)
+{
+ unsigned i;
+ int k, n;
+ mergeinfo_data_t *merges = (mergeinfo_data_t *)data;
+ svn_mergeinfo_t mergeinfo;
+
+ /* de-serialize our auxiliary data structure */
+ svn_temp_deserializer__resolve(merges, (void**)&merges->keys);
+ svn_temp_deserializer__resolve(merges, (void**)&merges->key_lengths);
+ svn_temp_deserializer__resolve(merges, (void**)&merges->range_counts);
+ svn_temp_deserializer__resolve(merges, (void**)&merges->ranges);
+
+ /* de-serialize keys and add entries to the result */
+ n = 0;
+ mergeinfo = svn_hash__make(pool);
+ for (i = 0; i < merges->count; ++i)
+ {
+ svn_rangelist_t *ranges = apr_array_make(pool,
+ merges->range_counts[i],
+ sizeof(svn_merge_range_t*));
+ for (k = 0; k < merges->range_counts[i]; ++k, ++n)
+ APR_ARRAY_PUSH(ranges, svn_merge_range_t*) = &merges->ranges[n];
+
+ svn_temp_deserializer__resolve((void*)merges->keys,
+ (void**)&merges->keys[i]);
+ apr_hash_set(mergeinfo, merges->keys[i], merges->key_lengths[i], ranges);
+ }
+
+ /* done */
+ *out = mergeinfo;
+
+ return SVN_NO_ERROR;
+}
+
diff --git a/subversion/libsvn_fs_fs/temp_serializer.h b/subversion/libsvn_fs_fs/temp_serializer.h
index 1e1763e..1009d63 100644
--- a/subversion/libsvn_fs_fs/temp_serializer.h
+++ b/subversion/libsvn_fs_fs/temp_serializer.h
@@ -26,7 +26,7 @@
#include "fs.h"
/**
- * Prepend the @a number to the @a string in a space efficient way that
+ * Prepend the @a number to the @a string in a space efficient way such that
* no other (number,string) combination can produce the same result.
* Allocate temporaries as well as the result from @a pool.
*/
@@ -36,16 +36,6 @@ svn_fs_fs__combine_number_and_string(apr_int64_t number,
apr_pool_t *pool);
/**
- * Combine the numbers @a a and @a b a space efficient way that no other
- * combination of numbers can produce the same result.
- * Allocate temporaries as well as the result from @a pool.
- */
-const char*
-svn_fs_fs__combine_two_numbers(apr_int64_t a,
- apr_int64_t b,
- apr_pool_t *pool);
-
-/**
* Serialize a @a noderev_p within the serialization @a context.
*/
void
@@ -77,7 +67,7 @@ typedef struct
* #svn_fs_fs__txdelta_cached_window_t.
*/
svn_error_t *
-svn_fs_fs__serialize_txdelta_window(char **buffer,
+svn_fs_fs__serialize_txdelta_window(void **buffer,
apr_size_t *buffer_size,
void *item,
apr_pool_t *pool);
@@ -88,7 +78,7 @@ svn_fs_fs__serialize_txdelta_window(char **buffer,
*/
svn_error_t *
svn_fs_fs__deserialize_txdelta_window(void **item,
- char *buffer,
+ void *buffer,
apr_size_t buffer_size,
apr_pool_t *pool);
@@ -97,7 +87,7 @@ svn_fs_fs__deserialize_txdelta_window(void **item,
* (@a in is an #apr_array_header_t of apr_off_t elements).
*/
svn_error_t *
-svn_fs_fs__serialize_manifest(char **data,
+svn_fs_fs__serialize_manifest(void **data,
apr_size_t *data_len,
void *in,
apr_pool_t *pool);
@@ -108,15 +98,35 @@ svn_fs_fs__serialize_manifest(char **data,
*/
svn_error_t *
svn_fs_fs__deserialize_manifest(void **out,
- char *data,
+ void *data,
apr_size_t data_len,
apr_pool_t *pool);
/**
+ * Implements #svn_cache__serialize_func_t for a properties hash
+ * (@a in is an #apr_hash_t of svn_string_t elements, keyed by const char*).
+ */
+svn_error_t *
+svn_fs_fs__serialize_properties(void **data,
+ apr_size_t *data_len,
+ void *in,
+ apr_pool_t *pool);
+
+/**
+ * Implements #svn_cache__deserialize_func_t for a properties hash
+ * (@a *out is an #apr_hash_t of svn_string_t elements, keyed by const char*).
+ */
+svn_error_t *
+svn_fs_fs__deserialize_properties(void **out,
+ void *data,
+ apr_size_t data_len,
+ apr_pool_t *pool);
+
+/**
* Implements #svn_cache__serialize_func_t for #svn_fs_id_t
*/
svn_error_t *
-svn_fs_fs__serialize_id(char **data,
+svn_fs_fs__serialize_id(void **data,
apr_size_t *data_len,
void *in,
apr_pool_t *pool);
@@ -126,7 +136,7 @@ svn_fs_fs__serialize_id(char **data,
*/
svn_error_t *
svn_fs_fs__deserialize_id(void **out,
- char *data,
+ void *data,
apr_size_t data_len,
apr_pool_t *pool);
@@ -134,7 +144,7 @@ svn_fs_fs__deserialize_id(void **out,
* Implements #svn_cache__serialize_func_t for #node_revision_t
*/
svn_error_t *
-svn_fs_fs__serialize_node_revision(char **buffer,
+svn_fs_fs__serialize_node_revision(void **buffer,
apr_size_t *buffer_size,
void *item,
apr_pool_t *pool);
@@ -144,7 +154,7 @@ svn_fs_fs__serialize_node_revision(char **buffer,
*/
svn_error_t *
svn_fs_fs__deserialize_node_revision(void **item,
- char *buffer,
+ void *buffer,
apr_size_t buffer_size,
apr_pool_t *pool);
@@ -152,7 +162,7 @@ svn_fs_fs__deserialize_node_revision(void **item,
* Implements #svn_cache__serialize_func_t for a directory contents hash
*/
svn_error_t *
-svn_fs_fs__serialize_dir_entries(char **data,
+svn_fs_fs__serialize_dir_entries(void **data,
apr_size_t *data_len,
void *in,
apr_pool_t *pool);
@@ -162,7 +172,7 @@ svn_fs_fs__serialize_dir_entries(char **data,
*/
svn_error_t *
svn_fs_fs__deserialize_dir_entries(void **out,
- char *data,
+ void *data,
apr_size_t data_len,
apr_pool_t *pool);
@@ -172,7 +182,7 @@ svn_fs_fs__deserialize_dir_entries(void **out,
* serialized manifest array @a data and @a data_len. */
svn_error_t *
svn_fs_fs__get_sharded_offset(void **out,
- const char *data,
+ const void *data,
apr_size_t data_len,
void *baton,
apr_pool_t *pool);
@@ -184,7 +194,7 @@ svn_fs_fs__get_sharded_offset(void **out,
*/
svn_error_t *
svn_fs_fs__extract_dir_entry(void **out,
- const char *data,
+ const void *data,
apr_size_t data_len,
void *baton,
apr_pool_t *pool);
@@ -210,9 +220,47 @@ typedef struct replace_baton_t
* identified by its name in the #replace_baton_t in @a baton.
*/
svn_error_t *
-svn_fs_fs__replace_dir_entry(char **data,
+svn_fs_fs__replace_dir_entry(void **data,
apr_size_t *data_len,
void *baton,
apr_pool_t *pool);
+/**
+ * Implements #svn_cache__serialize_func_t for an #apr_array_header_t of
+ * #change_t *.
+ */
+svn_error_t *
+svn_fs_fs__serialize_changes(void **data,
+ apr_size_t *data_len,
+ void *in,
+ apr_pool_t *pool);
+
+/**
+ * Implements #svn_cache__deserialize_func_t for an #apr_array_header_t of
+ * #change_t *.
+ */
+svn_error_t *
+svn_fs_fs__deserialize_changes(void **out,
+ void *data,
+ apr_size_t data_len,
+ apr_pool_t *pool);
+
+/**
+ * Implements #svn_cache__serialize_func_t for #svn_mergeinfo_t objects.
+ */
+svn_error_t *
+svn_fs_fs__serialize_mergeinfo(void **data,
+ apr_size_t *data_len,
+ void *in,
+ apr_pool_t *pool);
+
+/**
+ * Implements #svn_cache__deserialize_func_t for #svn_mergeinfo_t objects.
+ */
+svn_error_t *
+svn_fs_fs__deserialize_mergeinfo(void **out,
+ void *data,
+ apr_size_t data_len,
+ apr_pool_t *pool);
+
#endif
diff --git a/subversion/libsvn_fs_fs/tree.c b/subversion/libsvn_fs_fs/tree.c
index b3943cc..acd1eb4 100644
--- a/subversion/libsvn_fs_fs/tree.c
+++ b/subversion/libsvn_fs_fs/tree.c
@@ -41,10 +41,10 @@
#include <apr_pools.h>
#include <apr_hash.h>
+#include "svn_hash.h"
#include "svn_private_config.h"
#include "svn_pools.h"
#include "svn_error.h"
-#include "svn_dirent_uri.h"
#include "svn_path.h"
#include "svn_mergeinfo.h"
#include "svn_fs.h"
@@ -57,8 +57,10 @@
#include "tree.h"
#include "fs_fs.h"
#include "id.h"
+#include "temp_serializer.h"
#include "private/svn_mergeinfo_private.h"
+#include "private/svn_subr_private.h"
#include "private/svn_fs_util.h"
#include "private/svn_fspath.h"
#include "../libsvn_fs/fs-loader.h"
@@ -114,14 +116,18 @@ typedef struct fs_rev_root_data_t
typedef struct fs_txn_root_data_t
{
+ const char *txn_id;
+
/* Cache of txn DAG nodes (without their nested noderevs, because
- * it's mutable). */
+ * it's mutable). Same keys/values as ffd->rev_node_cache. */
svn_cache__t *txn_node_cache;
} fs_txn_root_data_t;
/* Declared here to resolve the circular dependencies. */
-static svn_error_t * get_dag(dag_node_t **dag_node_p, svn_fs_root_t *root,
- const char *path, apr_pool_t *pool);
+static svn_error_t * get_dag(dag_node_t **dag_node_p,
+ svn_fs_root_t *root,
+ const char *path,
+ apr_pool_t *pool);
static svn_fs_root_t *make_revision_root(svn_fs_t *fs, svn_revnum_t rev,
dag_node_t *root_dir,
@@ -135,6 +141,166 @@ static svn_error_t *make_txn_root(svn_fs_root_t **root_p,
/*** Node Caching ***/
+/* 1st level cache */
+
+/* An entry in the first-level cache. REVISION and PATH form the key that
+ will ultimately be matched.
+ */
+typedef struct cache_entry_t
+{
+ /* hash value derived from PATH, REVISION.
+ Used to short-circuit failed lookups. */
+ apr_uint32_t hash_value;
+
+ /* revision to which the NODE belongs */
+ svn_revnum_t revision;
+
+ /* path of the NODE */
+ char *path;
+
+ /* cached value of strlen(PATH). */
+ apr_size_t path_len;
+
+ /* the node allocated in the cache's pool. NULL for empty entries. */
+ dag_node_t *node;
+} cache_entry_t;
+
+/* Number of entries in the cache. Keep this low to keep pressure on the
+ CPU caches low as well. A binary value is most efficient. If we walk
+ a directory tree, we want enough entries to store nodes for all files
+ without overwriting the nodes for the parent folder. That way, there
+ will be no unnecessary misses (except for a few random ones caused by
+ hash collision).
+
+ The actual number of instances may be higher but entries that got
+ overwritten are no longer visible.
+ */
+enum { BUCKET_COUNT = 256 };
+
+/* The actual cache structure. All nodes will be allocated in POOL.
+ When the number of INSERTIONS (i.e. objects created form that pool)
+ exceeds a certain threshold, the pool will be cleared and the cache
+ with it.
+ */
+struct fs_fs_dag_cache_t
+{
+ /* fixed number of (possibly empty) cache entries */
+ cache_entry_t buckets[BUCKET_COUNT];
+
+ /* pool used for all node allocation */
+ apr_pool_t *pool;
+
+ /* number of entries created from POOL since the last cleanup */
+ apr_size_t insertions;
+
+ /* Property lookups etc. have a very high locality (75% re-hit).
+ Thus, remember the last hit location for optimistic lookup. */
+ apr_size_t last_hit;
+};
+
+fs_fs_dag_cache_t*
+svn_fs_fs__create_dag_cache(apr_pool_t *pool)
+{
+ fs_fs_dag_cache_t *result = apr_pcalloc(pool, sizeof(*result));
+ result->pool = svn_pool_create(pool);
+
+ return result;
+}
+
+/* Clears the CACHE at regular intervals (destroying all cached nodes)
+ */
+static void
+auto_clear_dag_cache(fs_fs_dag_cache_t* cache)
+{
+ if (cache->insertions > BUCKET_COUNT)
+ {
+ svn_pool_clear(cache->pool);
+
+ memset(cache->buckets, 0, sizeof(cache->buckets));
+ cache->insertions = 0;
+ }
+}
+
+/* For the given REVISION and PATH, return the respective entry in CACHE.
+ If the entry is empty, its NODE member will be NULL and the caller
+ may then set it to the corresponding DAG node allocated in CACHE->POOL.
+ */
+static cache_entry_t *
+cache_lookup( fs_fs_dag_cache_t *cache
+ , svn_revnum_t revision
+ , const char *path)
+{
+ apr_size_t i, bucket_index;
+ apr_size_t path_len = strlen(path);
+ apr_uint32_t hash_value = (apr_uint32_t)revision;
+
+#if SVN_UNALIGNED_ACCESS_IS_OK
+ /* "randomizing" / distributing factor used in our hash function */
+ const apr_uint32_t factor = 0xd1f3da69;
+#endif
+
+ /* optimistic lookup: hit the same bucket again? */
+ cache_entry_t *result = &cache->buckets[cache->last_hit];
+ if ( (result->revision == revision)
+ && (result->path_len == path_len)
+ && !memcmp(result->path, path, path_len))
+ {
+ return result;
+ }
+
+ /* need to do a full lookup. Calculate the hash value
+ (HASH_VALUE has been initialized to REVISION). */
+ i = 0;
+#if SVN_UNALIGNED_ACCESS_IS_OK
+ /* We relax the dependency chain between iterations by processing
+ two chunks from the input per hash_value self-multiplication.
+ The HASH_VALUE update latency is now 1 MUL latency + 1 ADD latency
+ per 2 chunks instead of 1 chunk.
+ */
+ for (; i + 8 <= path_len; i += 8)
+ hash_value = hash_value * factor * factor
+ + ( *(const apr_uint32_t*)(path + i) * factor
+ + *(const apr_uint32_t*)(path + i + 4));
+#endif
+
+ for (; i < path_len; ++i)
+ /* Help GCC to minimize the HASH_VALUE update latency by splitting the
+ MUL 33 of the naive implementation: h = h * 33 + path[i]. This
+ shortens the dependency chain from 1 shift + 2 ADDs to 1 shift + 1 ADD.
+ */
+ hash_value = hash_value * 32 + (hash_value + (unsigned char)path[i]);
+
+ bucket_index = hash_value + (hash_value >> 16);
+ bucket_index = (bucket_index + (bucket_index >> 8)) % BUCKET_COUNT;
+
+ /* access the corresponding bucket and remember its location */
+ result = &cache->buckets[bucket_index];
+ cache->last_hit = bucket_index;
+
+ /* if it is *NOT* a match, clear the bucket, expect the caller to fill
+ in the node and count it as an insertion */
+ if ( (result->hash_value != hash_value)
+ || (result->revision != revision)
+ || (result->path_len != path_len)
+ || memcmp(result->path, path, path_len))
+ {
+ result->hash_value = hash_value;
+ result->revision = revision;
+ if (result->path_len < path_len)
+ result->path = apr_palloc(cache->pool, path_len + 1);
+ result->path_len = path_len;
+ memcpy(result->path, path, path_len + 1);
+
+ result->node = NULL;
+
+ cache->insertions++;
+ }
+
+ return result;
+}
+
+/* 2nd level cache */
+
/* Find and return the DAG node cache for ROOT and the key that
should be used for PATH. */
static void
@@ -154,13 +320,13 @@ locate_cache(svn_cache__t **cache,
{
fs_fs_data_t *ffd = root->fs->fsap_data;
if (cache) *cache = ffd->rev_node_cache;
- if (key && path) *key = apr_psprintf(pool, "%ld%s",
- root->rev, path);
+ if (key && path) *key
+ = svn_fs_fs__combine_number_and_string(root->rev, path, pool);
}
}
-/* Return NODE for PATH from ROOT's node cache, or NULL if the node
- isn't cached; the node is copied into POOL. */
+/* Return NODE_P for PATH from ROOT's node cache, or NULL if the node
+ isn't cached; read it from the FS. *NODE_P is allocated in POOL. */
static svn_error_t *
dag_node_cache_get(dag_node_t **node_p,
svn_fs_root_t *root,
@@ -168,24 +334,59 @@ dag_node_cache_get(dag_node_t **node_p,
apr_pool_t *pool)
{
svn_boolean_t found;
- dag_node_t *node;
+ dag_node_t *node = NULL;
svn_cache__t *cache;
const char *key;
SVN_ERR_ASSERT(*path == '/');
- locate_cache(&cache, &key, root, path, pool);
-
- SVN_ERR(svn_cache__get((void **) &node, &found, cache, key, pool));
- if (found && node)
+ if (!root->is_txn_root)
{
- /* Patch up the FS, since this might have come from an old FS
- * object. */
- svn_fs_fs__dag_set_fs(node, root->fs);
- *node_p = node;
+ /* immutable DAG node. use the global caches for it */
+
+ fs_fs_data_t *ffd = root->fs->fsap_data;
+ cache_entry_t *bucket;
+
+ auto_clear_dag_cache(ffd->dag_node_cache);
+ bucket = cache_lookup(ffd->dag_node_cache, root->rev, path);
+ if (bucket->node == NULL)
+ {
+ locate_cache(&cache, &key, root, path, pool);
+ SVN_ERR(svn_cache__get((void **)&node, &found, cache, key, pool));
+ if (found && node)
+ {
+ /* Patch up the FS, since this might have come from an old FS
+ * object. */
+ svn_fs_fs__dag_set_fs(node, root->fs);
+
+ /* Retain the DAG node in L1 cache. */
+ bucket->node = svn_fs_fs__dag_dup(node,
+ ffd->dag_node_cache->pool);
+ }
+ }
+ else
+ {
+ /* Copy the node from L1 cache into the passed-in POOL. */
+ node = svn_fs_fs__dag_dup(bucket->node, pool);
+ }
}
else
- *node_p = NULL;
+ {
+ /* DAG is mutable / may become invalid. Use the TXN-local cache */
+
+ locate_cache(&cache, &key, root, path, pool);
+
+ SVN_ERR(svn_cache__get((void **) &node, &found, cache, key, pool));
+ if (found && node)
+ {
+ /* Patch up the FS, since this might have come from an old FS
+ * object. */
+ svn_fs_fs__dag_set_fs(node, root->fs);
+ }
+ }
+
+ *node_p = node;
+
return SVN_NO_ERROR;
}
@@ -202,6 +403,9 @@ dag_node_cache_set(svn_fs_root_t *root,
SVN_ERR_ASSERT(*path == '/');
+ /* Do *not* attempt to dup and put the node into L1.
+ * dup() is twice as expensive as an L2 lookup (which will set also L1).
+ */
locate_cache(&cache, &key, root, path, pool);
return svn_cache__set(cache, key, node, pool);
@@ -228,7 +432,7 @@ find_descendents_in_cache(void *baton,
struct fdic_baton *b = baton;
const char *item_path = key;
- if (svn_dirent_is_ancestor(b->path, item_path))
+ if (svn_fspath__skip_ancestor(b->path, item_path))
APR_ARRAY_PUSH(b->list, const char *) = apr_pstrdup(b->pool, item_path);
return SVN_NO_ERROR;
@@ -287,12 +491,10 @@ svn_fs_fs__txn_root(svn_fs_root_t **root_p,
SVN_ERR(svn_fs_fs__txn_proplist(&txnprops, txn, pool));
if (txnprops)
{
- if (apr_hash_get(txnprops, SVN_FS__PROP_TXN_CHECK_OOD,
- APR_HASH_KEY_STRING))
+ if (svn_hash_gets(txnprops, SVN_FS__PROP_TXN_CHECK_OOD))
flags |= SVN_FS_TXN_CHECK_OOD;
- if (apr_hash_get(txnprops, SVN_FS__PROP_TXN_CHECK_LOCKS,
- APR_HASH_KEY_STRING))
+ if (svn_hash_gets(txnprops, SVN_FS__PROP_TXN_CHECK_LOCKS))
flags |= SVN_FS_TXN_CHECK_LOCKS;
}
@@ -358,7 +560,7 @@ mutable_root_node(dag_node_t **node_p,
return svn_fs_fs__dag_clone_root(node_p, root->fs, root->txn, pool);
else
/* If it's not a transaction root, we can't change its contents. */
- return SVN_FS__ERR_NOT_MUTABLE(root->fs, root->rev, error_path, pool);
+ return SVN_FS__ERR_NOT_MUTABLE(root->fs, root->rev, error_path);
}
@@ -502,7 +704,7 @@ get_copy_inheritance(copy_id_inherit_t *inherit_p,
or if it is a branch point that we are accessing via its original
copy destination path. */
SVN_ERR(svn_fs_fs__dag_get_copyroot(&copyroot_rev, &copyroot_path,
- child->node,pool));
+ child->node));
SVN_ERR(svn_fs_fs__revision_root(&copyroot_root, fs, copyroot_rev, pool));
SVN_ERR(get_dag(&copyroot_node, copyroot_root, copyroot_path, pool));
copyroot_id = svn_fs_fs__dag_get_id(copyroot_node);
@@ -552,20 +754,28 @@ typedef enum open_path_flags_t {
directories must exist, as usual.) If the last component doesn't
exist, simply leave the `node' member of the bottom parent_path
component zero. */
- open_path_last_optional = 1
+ open_path_last_optional = 1,
+
+ /* When this flag is set, don't bother to lookup the DAG node in
+ our caches because we already tried this. Ignoring this flag
+ has no functional impact. */
+ open_path_uncached = 2,
+ /* The caller does not care about the parent node chain but only
+ the final DAG node. */
+ open_path_node_only = 4
} open_path_flags_t;
/* Open the node identified by PATH in ROOT, allocating in POOL. Set
*PARENT_PATH_P to a path from the node up to ROOT. The resulting
**PARENT_PATH_P value is guaranteed to contain at least one
- *element, for the root directory.
+ *element, for the root directory. PATH must be in canonical form.
If resulting *PARENT_PATH_P will eventually be made mutable and
modified, or if copy ID inheritance information is otherwise
needed, TXN_ID should be the ID of the mutability transaction. If
- TXN_ID is NULL, no copy ID in heritance information will be
+ TXN_ID is NULL, no copy ID inheritance information will be
calculated for the *PARENT_PATH_P chain.
If FLAGS & open_path_last_optional is zero, return the error
@@ -576,6 +786,11 @@ typedef enum open_path_flags_t {
callers that create new nodes --- we find the parent directory for
them, and tell them whether the entry exists already.
+ The remaining bits in FLAGS are hints that allow this function
+ to take shortcuts based on knowledge that the caller provides,
+ such as the caller is not actually being interested in PARENT_PATH_P,
+ but only in (*PARENT_PATH_P)->NODE.
+
NOTE: Public interfaces which only *read* from the filesystem
should not call this function directly, but should instead use
get_dag().
@@ -589,20 +804,44 @@ open_path(parent_path_t **parent_path_p,
apr_pool_t *pool)
{
svn_fs_t *fs = root->fs;
- dag_node_t *here; /* The directory we're currently looking at. */
- parent_path_t *parent_path; /* The path from HERE up to the root. */
+ dag_node_t *here = NULL; /* The directory we're currently looking at. */
+ parent_path_t *parent_path; /* The path from HERE up to the root. */
const char *rest; /* The portion of PATH we haven't traversed yet. */
- const char *canon_path = svn_fs__canonicalize_abspath(path, pool);
+
+ /* ensure a canonical path representation */
const char *path_so_far = "/";
+ apr_pool_t *iterpool = svn_pool_create(pool);
+
+ /* callers often traverse the tree in some path-based order. That means
+ a sibling of PATH has been presently accessed. Try to start the lookup
+ directly at the parent node, if the caller did not requested the full
+ parent chain. */
+ const char *directory;
+ assert(svn_fs__is_canonical_abspath(path));
+ if (flags & open_path_node_only)
+ {
+ directory = svn_dirent_dirname(path, pool);
+ if (directory[1] != 0) /* root nodes are covered anyway */
+ SVN_ERR(dag_node_cache_get(&here, root, directory, pool));
+ }
+
+ /* did the shortcut work? */
+ if (here)
+ {
+ path_so_far = directory;
+ rest = path + strlen(directory) + 1;
+ }
+ else
+ {
+ /* Make a parent_path item for the root node, using its own current
+ copy id. */
+ SVN_ERR(root_node(&here, root, pool));
+ rest = path + 1; /* skip the leading '/', it saves in iteration */
+ }
- /* Make a parent_path item for the root node, using its own current
- copy id. */
- SVN_ERR(root_node(&here, root, pool));
parent_path = make_parent_path(here, 0, 0, pool);
parent_path->copy_inherit = copy_id_inherit_self;
- rest = canon_path + 1; /* skip the leading '/', it saves in iteration */
-
/* Whenever we are at the top of this loop:
- HERE is our current directory,
- ID is the node revision ID of HERE,
@@ -614,6 +853,8 @@ open_path(parent_path_t **parent_path_p,
char *entry;
dag_node_t *child;
+ svn_pool_clear(iterpool);
+
/* Parse out the next entry from the path. */
entry = svn_fs__next_entry_name(&next, rest, pool);
@@ -633,16 +874,20 @@ open_path(parent_path_t **parent_path_p,
copy_id_inherit_t inherit;
const char *copy_path = NULL;
svn_error_t *err = SVN_NO_ERROR;
- dag_node_t *cached_node;
+ dag_node_t *cached_node = NULL;
/* If we found a directory entry, follow it. First, we
check our node cache, and, failing that, we hit the DAG
- layer. */
- SVN_ERR(dag_node_cache_get(&cached_node, root, path_so_far, pool));
+ layer. Don't bother to contact the cache for the last
+ element if we already know the lookup to fail for the
+ complete path. */
+ if (next || !(flags & open_path_uncached))
+ SVN_ERR(dag_node_cache_get(&cached_node, root, path_so_far, pool));
+
if (cached_node)
child = cached_node;
else
- err = svn_fs_fs__dag_open(&child, here, entry, pool);
+ err = svn_fs_fs__dag_open(&child, here, entry, pool, iterpool);
/* "file not found" requires special handling. */
if (err && err->apr_err == SVN_ERR_FS_NOT_FOUND)
@@ -671,19 +916,27 @@ open_path(parent_path_t **parent_path_p,
/* Other errors we return normally. */
SVN_ERR(err);
- /* Now, make a parent_path item for CHILD. */
- parent_path = make_parent_path(child, entry, parent_path, pool);
- if (txn_id)
+ if (flags & open_path_node_only)
{
- SVN_ERR(get_copy_inheritance(&inherit, &copy_path,
- fs, parent_path, txn_id, pool));
- parent_path->copy_inherit = inherit;
- parent_path->copy_src_path = apr_pstrdup(pool, copy_path);
+ /* Shortcut: the caller only wan'ts the final DAG node. */
+ parent_path->node = child;
+ }
+ else
+ {
+ /* Now, make a parent_path item for CHILD. */
+ parent_path = make_parent_path(child, entry, parent_path, pool);
+ if (txn_id)
+ {
+ SVN_ERR(get_copy_inheritance(&inherit, &copy_path, fs,
+ parent_path, txn_id, iterpool));
+ parent_path->copy_inherit = inherit;
+ parent_path->copy_src_path = apr_pstrdup(pool, copy_path);
+ }
}
/* Cache the node we found (if it wasn't already cached). */
if (! cached_node)
- SVN_ERR(dag_node_cache_set(root, path_so_far, child, pool));
+ SVN_ERR(dag_node_cache_set(root, path_so_far, child, iterpool));
}
/* Are we finished traversing the path? */
@@ -692,13 +945,14 @@ open_path(parent_path_t **parent_path_p,
/* The path isn't finished yet; we'd better be in a directory. */
if (svn_fs_fs__dag_node_kind(child) != svn_node_dir)
- SVN_ERR_W(SVN_FS__ERR_NOT_DIRECTORY(fs, path_so_far, pool),
- apr_psprintf(pool, _("Failure opening '%s'"), path));
+ SVN_ERR_W(SVN_FS__ERR_NOT_DIRECTORY(fs, path_so_far),
+ apr_psprintf(iterpool, _("Failure opening '%s'"), path));
rest = next;
here = child;
}
+ svn_pool_destroy(iterpool);
*parent_path_p = parent_path;
return SVN_NO_ERROR;
}
@@ -763,7 +1017,7 @@ make_path_mutable(svn_fs_root_t *root,
/* Determine what copyroot our new child node should use. */
SVN_ERR(svn_fs_fs__dag_get_copyroot(&copyroot_rev, &copyroot_path,
- parent_path->node, pool));
+ parent_path->node));
SVN_ERR(svn_fs_fs__revision_root(&copyroot_root, root->fs,
copyroot_rev, pool));
SVN_ERR(get_dag(&copyroot_node, copyroot_root, copyroot_path, pool));
@@ -811,21 +1065,35 @@ get_dag(dag_node_t **dag_node_p,
apr_pool_t *pool)
{
parent_path_t *parent_path;
- dag_node_t *node;
+ dag_node_t *node = NULL;
- /* Canonicalize the input PATH. */
- path = svn_fs__canonicalize_abspath(path, pool);
+ /* First we look for the DAG in our cache
+ (if the path may be canonical). */
+ if (*path == '/')
+ SVN_ERR(dag_node_cache_get(&node, root, path, pool));
- /* First we look for the DAG in our cache. */
- SVN_ERR(dag_node_cache_get(&node, root, path, pool));
if (! node)
{
- /* Call open_path with no flags, as we want this to return an error
- if the node for which we are searching doesn't exist. */
- SVN_ERR(open_path(&parent_path, root, path, 0, NULL, pool));
- node = parent_path->node;
+ /* Canonicalize the input PATH. */
+ if (! svn_fs__is_canonical_abspath(path))
+ {
+ path = svn_fs__canonicalize_abspath(path, pool);
+
+ /* Try again with the corrected path. */
+ SVN_ERR(dag_node_cache_get(&node, root, path, pool));
+ }
- /* No need to cache our find -- open_path() will do that for us. */
+ if (! node)
+ {
+ /* Call open_path with no flags, as we want this to return an
+ * error if the node for which we are searching doesn't exist. */
+ SVN_ERR(open_path(&parent_path, root, path,
+ open_path_uncached | open_path_node_only,
+ NULL, pool));
+ node = parent_path->node;
+
+ /* No need to cache our find -- open_path() will do that for us. */
+ }
}
*dag_node_p = node;
@@ -988,7 +1256,7 @@ fs_node_prop(svn_string_t **value_p,
SVN_ERR(svn_fs_fs__dag_get_proplist(&proplist, node, pool));
*value_p = NULL;
if (proplist)
- *value_p = apr_hash_get(proplist, propname, APR_HASH_KEY_STRING);
+ *value_p = svn_hash_gets(proplist, propname);
return SVN_NO_ERROR;
}
@@ -1048,6 +1316,7 @@ fs_change_node_prop(svn_fs_root_t *root,
return SVN_FS__NOT_TXN(root);
txn_id = root->txn;
+ path = svn_fs__canonicalize_abspath(path, pool);
SVN_ERR(open_path(&parent_path, root, path, 0, txn_id, pool));
/* Check (non-recursively) to see if path is locked; if so, check
@@ -1072,8 +1341,7 @@ fs_change_node_prop(svn_fs_root_t *root,
{
apr_int64_t increment = 0;
svn_boolean_t had_mergeinfo;
- SVN_ERR(svn_fs_fs__dag_has_mergeinfo(&had_mergeinfo, parent_path->node,
- pool));
+ SVN_ERR(svn_fs_fs__dag_has_mergeinfo(&had_mergeinfo, parent_path->node));
if (value && !had_mergeinfo)
increment = 1;
@@ -1089,7 +1357,7 @@ fs_change_node_prop(svn_fs_root_t *root,
}
/* Set the property. */
- apr_hash_set(proplist, name, APR_HASH_KEY_STRING, value);
+ svn_hash_sets(proplist, name, value);
/* Overwrite the node's proplist. */
SVN_ERR(svn_fs_fs__dag_set_proplist(parent_path->node, proplist,
@@ -1127,7 +1395,7 @@ fs_props_changed(svn_boolean_t *changed_p,
SVN_ERR(get_dag(&node1, root1, path1, pool));
SVN_ERR(get_dag(&node2, root2, path2, pool));
return svn_fs_fs__dag_things_different(changed_p, NULL,
- node1, node2, pool);
+ node1, node2);
}
@@ -1138,7 +1406,7 @@ fs_props_changed(svn_boolean_t *changed_p,
static svn_error_t *
get_root(dag_node_t **node, svn_fs_root_t *root, apr_pool_t *pool)
{
- return get_dag(node, root, "", pool);
+ return get_dag(node, root, "/", pool);
}
@@ -1194,6 +1462,7 @@ merge(svn_stringbuf_t *conflict_p,
svn_fs_t *fs;
apr_pool_t *iterpool;
apr_int64_t mergeinfo_increment = 0;
+ svn_boolean_t fs_supports_mergeinfo;
/* Make sure everyone comes from the same filesystem. */
fs = svn_fs_fs__dag_get_fs(ancestor);
@@ -1337,9 +1606,11 @@ merge(svn_stringbuf_t *conflict_p,
/* ### todo: it would be more efficient to simply check for a NULL
entries hash where necessary below than to allocate an empty hash
here, but another day, another day... */
- SVN_ERR(svn_fs_fs__dag_dir_entries(&s_entries, source, pool, pool));
- SVN_ERR(svn_fs_fs__dag_dir_entries(&t_entries, target, pool, pool));
- SVN_ERR(svn_fs_fs__dag_dir_entries(&a_entries, ancestor, pool, pool));
+ SVN_ERR(svn_fs_fs__dag_dir_entries(&s_entries, source, pool));
+ SVN_ERR(svn_fs_fs__dag_dir_entries(&t_entries, target, pool));
+ SVN_ERR(svn_fs_fs__dag_dir_entries(&a_entries, ancestor, pool));
+
+ fs_supports_mergeinfo = svn_fs_fs__fs_supports_mergeinfo(fs);
/* for each entry E in a_entries... */
iterpool = svn_pool_create(pool);
@@ -1372,12 +1643,11 @@ merge(svn_stringbuf_t *conflict_p,
dag_node_t *t_ent_node;
SVN_ERR(svn_fs_fs__dag_get_node(&t_ent_node, fs,
t_entry->id, iterpool));
- if (svn_fs_fs__fs_supports_mergeinfo(fs))
+ if (fs_supports_mergeinfo)
{
apr_int64_t mergeinfo_start;
SVN_ERR(svn_fs_fs__dag_get_mergeinfo_count(&mergeinfo_start,
- t_ent_node,
- iterpool));
+ t_ent_node));
mergeinfo_increment -= mergeinfo_start;
}
@@ -1387,12 +1657,11 @@ merge(svn_stringbuf_t *conflict_p,
SVN_ERR(svn_fs_fs__dag_get_node(&s_ent_node, fs,
s_entry->id, iterpool));
- if (svn_fs_fs__fs_supports_mergeinfo(fs))
+ if (fs_supports_mergeinfo)
{
apr_int64_t mergeinfo_end;
SVN_ERR(svn_fs_fs__dag_get_mergeinfo_count(&mergeinfo_end,
- s_ent_node,
- iterpool));
+ s_ent_node));
mergeinfo_increment += mergeinfo_end;
}
@@ -1465,7 +1734,7 @@ merge(svn_stringbuf_t *conflict_p,
txn_id,
&sub_mergeinfo_increment,
iterpool));
- if (svn_fs_fs__fs_supports_mergeinfo(fs))
+ if (fs_supports_mergeinfo)
mergeinfo_increment += sub_mergeinfo_increment;
}
@@ -1501,12 +1770,11 @@ merge(svn_stringbuf_t *conflict_p,
SVN_ERR(svn_fs_fs__dag_get_node(&s_ent_node, fs,
s_entry->id, iterpool));
- if (svn_fs_fs__fs_supports_mergeinfo(fs))
+ if (fs_supports_mergeinfo)
{
apr_int64_t mergeinfo_s;
SVN_ERR(svn_fs_fs__dag_get_mergeinfo_count(&mergeinfo_s,
- s_ent_node,
- iterpool));
+ s_ent_node));
mergeinfo_increment += mergeinfo_s;
}
@@ -1518,7 +1786,7 @@ merge(svn_stringbuf_t *conflict_p,
SVN_ERR(svn_fs_fs__dag_update_ancestry(target, source, pool));
- if (svn_fs_fs__fs_supports_mergeinfo(fs))
+ if (fs_supports_mergeinfo)
SVN_ERR(svn_fs_fs__dag_increment_mergeinfo_count(target,
mergeinfo_increment,
pool));
@@ -1621,7 +1889,7 @@ svn_fs_fs__commit_txn(const char **conflict_p,
*/
svn_error_t *err = SVN_NO_ERROR;
- svn_stringbuf_t *conflict = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *conflict = svn_stringbuf_create_empty(pool);
svn_fs_t *fs = txn->fs;
/* Limit memory usage when the repository has a high commit rate and
@@ -1729,7 +1997,7 @@ fs_merge(const char **conflict_p,
dag_node_t *source, *ancestor;
svn_fs_txn_t *txn;
svn_error_t *err;
- svn_stringbuf_t *conflict = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *conflict = svn_stringbuf_create_empty(pool);
if (! target_root->is_txn_root)
return SVN_FS__NOT_TXN(target_root);
@@ -1803,9 +2071,23 @@ fs_dir_entries(apr_hash_t **table_p,
/* Get the entries for this path in the caller's pool. */
SVN_ERR(get_dag(&node, root, path, pool));
- return svn_fs_fs__dag_dir_entries(table_p, node, pool, pool);
+ return svn_fs_fs__dag_dir_entries(table_p, node, pool);
}
+/* Raise an error if PATH contains a newline because FSFS cannot handle
+ * such paths. See issue #4340. */
+static svn_error_t *
+check_newline(const char *path, apr_pool_t *pool)
+{
+ char *c = strchr(path, '\n');
+
+ if (c)
+ return svn_error_createf(SVN_ERR_FS_PATH_SYNTAX, NULL,
+ _("Invalid control character '0x%02x' in path '%s'"),
+ (unsigned char)*c, svn_path_illegal_path_escape(path, pool));
+
+ return SVN_NO_ERROR;
+}
/* Create a new directory named PATH in ROOT. The new directory has
no entries, and no properties. ROOT must be the root of a
@@ -1820,6 +2102,9 @@ fs_make_dir(svn_fs_root_t *root,
dag_node_t *sub_dir;
const char *txn_id = root->txn;
+ SVN_ERR(check_newline(path, pool));
+
+ path = svn_fs__canonicalize_abspath(path, pool);
SVN_ERR(open_path(&parent_path, root, path, open_path_last_optional,
txn_id, pool));
@@ -1833,7 +2118,7 @@ fs_make_dir(svn_fs_root_t *root,
/* If there's already a sub-directory by that name, complain. This
also catches the case of trying to make a subdirectory named `/'. */
if (parent_path->node)
- return SVN_FS__ALREADY_EXISTS(root, path, pool);
+ return SVN_FS__ALREADY_EXISTS(root, path);
/* Create the subdirectory. */
SVN_ERR(make_path_mutable(root, parent_path->parent, path, pool));
@@ -1865,12 +2150,13 @@ fs_delete_node(svn_fs_root_t *root,
{
parent_path_t *parent_path;
const char *txn_id = root->txn;
- apr_int64_t mergeinfo_count;
+ apr_int64_t mergeinfo_count = 0;
svn_node_kind_t kind;
if (! root->is_txn_root)
return SVN_FS__NOT_TXN(root);
+ path = svn_fs__canonicalize_abspath(path, pool);
SVN_ERR(open_path(&parent_path, root, path, 0, txn_id, pool));
kind = svn_fs_fs__dag_node_kind(parent_path->node);
@@ -1889,8 +2175,7 @@ fs_delete_node(svn_fs_root_t *root,
SVN_ERR(make_path_mutable(root, parent_path->parent, path, pool));
if (svn_fs_fs__fs_supports_mergeinfo(root->fs))
SVN_ERR(svn_fs_fs__dag_get_mergeinfo_count(&mergeinfo_count,
- parent_path->node,
- pool));
+ parent_path->node));
SVN_ERR(svn_fs_fs__dag_delete(parent_path->parent->node,
parent_path->entry,
txn_id, pool));
@@ -1900,7 +2185,7 @@ fs_delete_node(svn_fs_root_t *root,
pool));
/* Update mergeinfo counts for parents */
- if (svn_fs_fs__fs_supports_mergeinfo(root->fs) && mergeinfo_count > 0)
+ if (mergeinfo_count > 0)
SVN_ERR(increment_mergeinfo_up_tree(parent_path->parent,
-mergeinfo_count,
pool));
@@ -1922,17 +2207,7 @@ fs_same_p(svn_boolean_t *same_p,
svn_fs_t *fs2,
apr_pool_t *pool)
{
- const char *uuid1;
- const char *uuid2;
-
- /* Random thought: if fetching UUIDs to compare filesystems is too
- expensive, one solution would be to cache the UUID in each fs
- object (copying the UUID into fs->pool, of course). */
-
- SVN_ERR(fs1->vtable->get_uuid(fs1, &uuid1, pool));
- SVN_ERR(fs2->vtable->get_uuid(fs2, &uuid2, pool));
-
- *same_p = ! strcmp(uuid1, uuid2);
+ *same_p = ! strcmp(fs1->uuid, fs2->uuid);
return SVN_NO_ERROR;
}
@@ -2005,8 +2280,7 @@ copy_helper(svn_fs_root_t *from_root,
kind = svn_fs_path_change_replace;
if (svn_fs_fs__fs_supports_mergeinfo(to_root->fs))
SVN_ERR(svn_fs_fs__dag_get_mergeinfo_count(&mergeinfo_start,
- to_parent_path->node,
- pool));
+ to_parent_path->node));
}
else
{
@@ -2016,7 +2290,7 @@ copy_helper(svn_fs_root_t *from_root,
if (svn_fs_fs__fs_supports_mergeinfo(to_root->fs))
SVN_ERR(svn_fs_fs__dag_get_mergeinfo_count(&mergeinfo_end,
- from_node, pool));
+ from_node));
/* Make sure the target node's parents are mutable. */
SVN_ERR(make_path_mutable(to_root, to_parent_path->parent,
@@ -2082,7 +2356,14 @@ fs_copy(svn_fs_root_t *from_root,
const char *to_path,
apr_pool_t *pool)
{
- return svn_error_trace(copy_helper(from_root, from_path, to_root, to_path,
+ SVN_ERR(check_newline(to_path, pool));
+
+ return svn_error_trace(copy_helper(from_root,
+ svn_fs__canonicalize_abspath(from_path,
+ pool),
+ to_root,
+ svn_fs__canonicalize_abspath(to_path,
+ pool),
TRUE, pool));
}
@@ -2099,6 +2380,7 @@ fs_revision_link(svn_fs_root_t *from_root,
if (! to_root->is_txn_root)
return SVN_FS__NOT_TXN(to_root);
+ path = svn_fs__canonicalize_abspath(path, pool);
return svn_error_trace(copy_helper(from_root, path, to_root, path,
FALSE, pool));
}
@@ -2117,13 +2399,13 @@ fs_copied_from(svn_revnum_t *rev_p,
dag_node_t *node;
const char *copyfrom_path, *copyfrom_str = NULL;
svn_revnum_t copyfrom_rev;
- char *str, *last_str, *buf;
+ char *str, *buf;
/* Check to see if there is a cached version of this copyfrom
entry. */
if (! root->is_txn_root) {
fs_rev_root_data_t *frd = root->fsap_data;
- copyfrom_str = apr_hash_get(frd->copyfrom_cache, path, APR_HASH_KEY_STRING);
+ copyfrom_str = svn_hash_gets(frd->copyfrom_cache, path);
}
if (copyfrom_str)
@@ -2139,9 +2421,9 @@ fs_copied_from(svn_revnum_t *rev_p,
{
/* Parse the copyfrom string for our cached entry. */
buf = apr_pstrdup(pool, copyfrom_str);
- str = apr_strtok(buf, " ", &last_str);
+ str = svn_cstring_tokenize(" ", &buf);
copyfrom_rev = SVN_STR_TO_REV(str);
- copyfrom_path = last_str;
+ copyfrom_path = buf;
}
}
else
@@ -2149,8 +2431,8 @@ fs_copied_from(svn_revnum_t *rev_p,
/* There is no cached entry, look it up the old-fashioned
way. */
SVN_ERR(get_dag(&node, root, path, pool));
- SVN_ERR(svn_fs_fs__dag_get_copyfrom_rev(&copyfrom_rev, node, pool));
- SVN_ERR(svn_fs_fs__dag_get_copyfrom_path(&copyfrom_path, node, pool));
+ SVN_ERR(svn_fs_fs__dag_get_copyfrom_rev(&copyfrom_rev, node));
+ SVN_ERR(svn_fs_fs__dag_get_copyfrom_path(&copyfrom_path, node));
}
*rev_p = copyfrom_rev;
@@ -2174,13 +2456,16 @@ fs_make_file(svn_fs_root_t *root,
dag_node_t *child;
const char *txn_id = root->txn;
+ SVN_ERR(check_newline(path, pool));
+
+ path = svn_fs__canonicalize_abspath(path, pool);
SVN_ERR(open_path(&parent_path, root, path, open_path_last_optional,
- txn_id, pool));
+ txn_id, pool));
/* If there's already a file by that name, complain.
This also catches the case of trying to make a file named `/'. */
if (parent_path->node)
- return SVN_FS__ALREADY_EXISTS(root, path, pool);
+ return SVN_FS__ALREADY_EXISTS(root, path);
/* Check (non-recursively) to see if path is locked; if so, check
that we can use it. */
@@ -2270,6 +2555,25 @@ fs_file_contents(svn_stream_t **contents,
/* --- End machinery for svn_fs_file_contents() --- */
+/* --- Machinery for svn_fs_try_process_file_contents() --- */
+
+static svn_error_t *
+fs_try_process_file_contents(svn_boolean_t *success,
+ svn_fs_root_t *root,
+ const char *path,
+ svn_fs_process_contents_func_t processor,
+ void* baton,
+ apr_pool_t *pool)
+{
+ dag_node_t *node;
+ SVN_ERR(get_dag(&node, root, path, pool));
+
+ return svn_fs_fs__dag_try_process_file_contents(success, node,
+ processor, baton, pool);
+}
+
+/* --- End machinery for svn_fs_try_process_file_contents() --- */
+
/* --- Machinery for svn_fs_apply_textdelta() --- */
@@ -2361,7 +2665,7 @@ window_consumer(svn_txdelta_window_t *window, void *baton)
SVN_ERR(svn_stream_write(tb->target_stream,
tb->target_string->data,
&len));
- svn_stringbuf_set(tb->target_string, "");
+ svn_stringbuf_setempty(tb->target_string);
}
/* Is the window NULL? If so, we're done. */
@@ -2428,7 +2732,7 @@ apply_textdelta(void *baton, apr_pool_t *pool)
/* Make a writable "string" stream which writes data to
tb->target_string. */
- tb->target_string = svn_stringbuf_create("", tb->pool);
+ tb->target_string = svn_stringbuf_create_empty(tb->pool);
tb->string_stream = svn_stream_create(tb, tb->pool);
svn_stream_set_write(tb->string_stream, write_to_string);
@@ -2464,19 +2768,10 @@ fs_apply_textdelta(svn_txdelta_window_handler_t *contents_p,
txdelta_baton_t *tb = apr_pcalloc(pool, sizeof(*tb));
tb->root = root;
- tb->path = path;
+ tb->path = svn_fs__canonicalize_abspath(path, pool);
tb->pool = pool;
-
- if (base_checksum)
- tb->base_checksum = svn_checksum_dup(base_checksum, pool);
- else
- tb->base_checksum = NULL;
-
- if (result_checksum)
- tb->result_checksum = svn_checksum_dup(result_checksum, pool);
- else
- tb->result_checksum = NULL;
-
+ tb->base_checksum = svn_checksum_dup(base_checksum, pool);
+ tb->result_checksum = svn_checksum_dup(result_checksum, pool);
SVN_ERR(apply_textdelta(tb, pool));
@@ -2606,13 +2901,9 @@ fs_apply_text(svn_stream_t **contents_p,
struct text_baton_t *tb = apr_pcalloc(pool, sizeof(*tb));
tb->root = root;
- tb->path = path;
+ tb->path = svn_fs__canonicalize_abspath(path, pool);
tb->pool = pool;
-
- if (result_checksum)
- tb->result_checksum = svn_checksum_dup(result_checksum, pool);
- else
- tb->result_checksum = NULL;
+ tb->result_checksum = svn_checksum_dup(result_checksum, pool);
SVN_ERR(apply_text(tb, pool));
@@ -2660,7 +2951,7 @@ fs_contents_changed(svn_boolean_t *changed_p,
SVN_ERR(get_dag(&node1, root1, path1, pool));
SVN_ERR(get_dag(&node2, root2, path2, pool));
return svn_fs_fs__dag_things_different(NULL, changed_p,
- node1, node2, pool);
+ node1, node2);
}
@@ -2780,8 +3071,10 @@ find_youngest_copyroot(svn_revnum_t *rev_p,
parent_path_t *parent_path,
apr_pool_t *pool)
{
- svn_revnum_t rev_mine, rev_parent = -1;
- const char *path_mine, *path_parent;
+ svn_revnum_t rev_mine;
+ svn_revnum_t rev_parent = SVN_INVALID_REVNUM;
+ const char *path_mine;
+ const char *path_parent = NULL;
/* First find our parent's youngest copyroot. */
if (parent_path->parent)
@@ -2790,7 +3083,7 @@ find_youngest_copyroot(svn_revnum_t *rev_p,
/* Find our copyroot. */
SVN_ERR(svn_fs_fs__dag_get_copyroot(&rev_mine, &path_mine,
- parent_path->node, pool));
+ parent_path->node));
/* If a parent and child were copied to in the same revision, prefer
the child copy target, since it is the copy relevant to the
@@ -2828,6 +3121,7 @@ static svn_error_t *fs_closest_copy(svn_fs_root_t **root_p,
*root_p = NULL;
*path_p = NULL;
+ path = svn_fs__canonicalize_abspath(path, pool);
SVN_ERR(open_path(&parent_path, root, path, 0, NULL, pool));
/* Find the youngest copyroot in the path of this node-rev, which
@@ -2846,7 +3140,7 @@ static svn_error_t *fs_closest_copy(svn_fs_root_t **root_p,
if (kind == svn_node_none)
return SVN_NO_ERROR;
SVN_ERR(open_path(&copy_dst_parent_path, copy_dst_root, path,
- 0, NULL, pool));
+ open_path_node_only, NULL, pool));
copy_dst_node = copy_dst_parent_path->node;
if (! svn_fs_fs__id_check_related(svn_fs_fs__dag_get_id(copy_dst_node),
svn_fs_fs__dag_get_id(parent_path->node)))
@@ -2870,7 +3164,7 @@ static svn_error_t *fs_closest_copy(svn_fs_root_t **root_p,
if (created_rev == copy_dst_rev)
{
const svn_fs_id_t *pred;
- SVN_ERR(svn_fs_fs__dag_get_predecessor_id(&pred, copy_dst_node, pool));
+ SVN_ERR(svn_fs_fs__dag_get_predecessor_id(&pred, copy_dst_node));
if (! pred)
return SVN_NO_ERROR;
}
@@ -2898,7 +3192,7 @@ prev_location(const char **prev_path,
const char *path,
apr_pool_t *pool)
{
- const char *copy_path, *copy_src_path, *remainder = "";
+ const char *copy_path, *copy_src_path, *remainder_path;
svn_fs_root_t *copy_root;
svn_revnum_t copy_src_rev;
@@ -2927,9 +3221,8 @@ prev_location(const char **prev_path,
*/
SVN_ERR(fs_copied_from(&copy_src_rev, &copy_src_path,
copy_root, copy_path, pool));
- if (strcmp(copy_path, path) != 0)
- remainder = svn_relpath__is_child(copy_path, path, pool);
- *prev_path = svn_fspath__join(copy_src_path, remainder, pool);
+ remainder_path = svn_fspath__skip_ancestor(copy_path, path);
+ *prev_path = svn_fspath__join(copy_src_path, remainder_path, pool);
*prev_rev = copy_src_rev;
return SVN_NO_ERROR;
}
@@ -2967,6 +3260,14 @@ fs_node_origin_rev(svn_revnum_t *revision,
return SVN_NO_ERROR;
}
+ /* The root node always has ID 0, created in revision 0 and will never
+ use the new-style ID format. */
+ if (strcmp(node_id, "0") == 0)
+ {
+ *revision = 0;
+ return SVN_NO_ERROR;
+ }
+
/* OK, it's an old-style ID? Maybe it's cached. */
SVN_ERR(svn_fs_fs__get_node_origin(&cached_origin_id,
fs,
@@ -3021,7 +3322,7 @@ fs_node_origin_rev(svn_revnum_t *revision,
/* Walk the predecessor links back to origin. */
SVN_ERR(svn_fs_fs__node_id(&pred_id, curroot, lastpath->data, predidpool));
- while (pred_id)
+ do
{
svn_pool_clear(subpool);
SVN_ERR(svn_fs_fs__dag_get_node(&node, fs, pred_id, subpool));
@@ -3032,9 +3333,10 @@ fs_node_origin_rev(svn_revnum_t *revision,
value cached in the node (which is allocated in
SUBPOOL... maybe). */
svn_pool_clear(predidpool);
- SVN_ERR(svn_fs_fs__dag_get_predecessor_id(&pred_id, node, subpool));
+ SVN_ERR(svn_fs_fs__dag_get_predecessor_id(&pred_id, node));
pred_id = pred_id ? svn_fs_fs__id_copy(pred_id, predidpool) : NULL;
}
+ while (pred_id);
/* When we get here, NODE should be the first node-revision in our
chain. */
@@ -3133,7 +3435,7 @@ history_prev(void *baton, apr_pool_t *pool)
no predecessor, in which case we're all done!). */
const svn_fs_id_t *pred_id;
- SVN_ERR(svn_fs_fs__dag_get_predecessor_id(&pred_id, node, pool));
+ SVN_ERR(svn_fs_fs__dag_get_predecessor_id(&pred_id, node));
if (! pred_id)
return SVN_NO_ERROR;
@@ -3157,7 +3459,7 @@ history_prev(void *baton, apr_pool_t *pool)
if (copyroot_rev > commit_rev)
{
- const char *remainder;
+ const char *remainder_path;
const char *copy_dst, *copy_src;
svn_fs_root_t *copyroot_root;
@@ -3174,21 +3476,18 @@ history_prev(void *baton, apr_pool_t *pool)
the copy source. Finally, if our current path doesn't meet
one of these other criteria ... ### for now just fallback to
the old copy hunt algorithm. */
- if (strcmp(path, copy_dst) == 0)
- remainder = "";
- else
- remainder = svn_relpath__is_child(copy_dst, path, pool);
+ remainder_path = svn_fspath__skip_ancestor(copy_dst, path);
- if (remainder)
+ if (remainder_path)
{
/* If we get here, then our current path is the destination
of, or the child of the destination of, a copy. Fill
in the return values and get outta here. */
- SVN_ERR(svn_fs_fs__dag_get_copyfrom_rev(&src_rev, node, pool));
- SVN_ERR(svn_fs_fs__dag_get_copyfrom_path(&copy_src, node, pool));
+ SVN_ERR(svn_fs_fs__dag_get_copyfrom_rev(&src_rev, node));
+ SVN_ERR(svn_fs_fs__dag_get_copyfrom_path(&copy_src, node));
dst_rev = copyroot_rev;
- src_path = svn_fspath__join(copy_src, remainder, pool);
+ src_path = svn_fspath__join(copy_src, remainder_path, pool);
}
}
@@ -3309,7 +3608,7 @@ assemble_history(svn_fs_t *fs,
{
svn_fs_history_t *history = apr_pcalloc(pool, sizeof(*history));
fs_history_data_t *fhd = apr_pcalloc(pool, sizeof(*fhd));
- fhd->path = path;
+ fhd->path = svn_fs__canonicalize_abspath(path, pool);
fhd->revision = revision;
fhd->is_interesting = is_interesting;
fhd->path_hint = path_hint;
@@ -3349,7 +3648,7 @@ crawl_directory_dag_for_mergeinfo(svn_fs_root_t *root,
apr_pool_t *iterpool = svn_pool_create(scratch_pool);
SVN_ERR(svn_fs_fs__dag_dir_entries(&entries, dir_dag,
- scratch_pool, scratch_pool));
+ scratch_pool));
for (hi = apr_hash_first(scratch_pool, entries);
hi;
@@ -3365,9 +3664,8 @@ crawl_directory_dag_for_mergeinfo(svn_fs_root_t *root,
kid_path = svn_fspath__join(this_path, dirent->name, iterpool);
SVN_ERR(get_dag(&kid_dag, root, kid_path, iterpool));
- SVN_ERR(svn_fs_fs__dag_has_mergeinfo(&has_mergeinfo, kid_dag, iterpool));
- SVN_ERR(svn_fs_fs__dag_has_descendants_with_mergeinfo(&go_down, kid_dag,
- iterpool));
+ SVN_ERR(svn_fs_fs__dag_has_mergeinfo(&has_mergeinfo, kid_dag));
+ SVN_ERR(svn_fs_fs__dag_has_descendants_with_mergeinfo(&go_down, kid_dag));
if (has_mergeinfo)
{
@@ -3378,8 +3676,7 @@ crawl_directory_dag_for_mergeinfo(svn_fs_root_t *root,
svn_error_t *err;
SVN_ERR(svn_fs_fs__dag_get_proplist(&proplist, kid_dag, iterpool));
- mergeinfo_string = apr_hash_get(proplist, SVN_PROP_MERGEINFO,
- APR_HASH_KEY_STRING);
+ mergeinfo_string = svn_hash_gets(proplist, SVN_PROP_MERGEINFO);
if (!mergeinfo_string)
{
svn_string_t *idstr = svn_fs_fs__id_unparse(dirent->id, iterpool);
@@ -3404,10 +3701,8 @@ crawl_directory_dag_for_mergeinfo(svn_fs_root_t *root,
}
else
{
- apr_hash_set(result_catalog,
- apr_pstrdup(result_pool, kid_path),
- APR_HASH_KEY_STRING,
- kid_mergeinfo);
+ svn_hash_sets(result_catalog, apr_pstrdup(result_pool, kid_path),
+ kid_mergeinfo);
}
}
@@ -3424,6 +3719,24 @@ crawl_directory_dag_for_mergeinfo(svn_fs_root_t *root,
return SVN_NO_ERROR;
}
+/* Return the cache key as a combination of REV_ROOT->REV, the inheritance
+ flags INHERIT and ADJUST_INHERITED_MERGEINFO, and the PATH. The result
+ will be allocated in POOL..
+ */
+static const char *
+mergeinfo_cache_key(const char *path,
+ svn_fs_root_t *rev_root,
+ svn_mergeinfo_inheritance_t inherit,
+ svn_boolean_t adjust_inherited_mergeinfo,
+ apr_pool_t *pool)
+{
+ apr_int64_t number = rev_root->rev;
+ number = number * 4
+ + (inherit == svn_mergeinfo_nearest_ancestor ? 2 : 0)
+ + (adjust_inherited_mergeinfo ? 1 : 0);
+
+ return svn_fs_fs__combine_number_and_string(number, path, pool);
+}
/* Calculates the mergeinfo for PATH under REV_ROOT using inheritance
type INHERIT. Returns it in *MERGEINFO, or NULL if there is none.
@@ -3431,19 +3744,17 @@ crawl_directory_dag_for_mergeinfo(svn_fs_root_t *root,
used for temporary allocations.
*/
static svn_error_t *
-get_mergeinfo_for_path(svn_mergeinfo_t *mergeinfo,
- svn_fs_root_t *rev_root,
- const char *path,
- svn_mergeinfo_inheritance_t inherit,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+get_mergeinfo_for_path_internal(svn_mergeinfo_t *mergeinfo,
+ svn_fs_root_t *rev_root,
+ const char *path,
+ svn_mergeinfo_inheritance_t inherit,
+ svn_boolean_t adjust_inherited_mergeinfo,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
parent_path_t *parent_path, *nearest_ancestor;
apr_hash_t *proplist;
svn_string_t *mergeinfo_string;
- apr_pool_t *iterpool = svn_pool_create(scratch_pool);
-
- *mergeinfo = NULL;
path = svn_fs__canonicalize_abspath(path, scratch_pool);
@@ -3461,17 +3772,14 @@ get_mergeinfo_for_path(svn_mergeinfo_t *mergeinfo,
{
svn_boolean_t has_mergeinfo;
- svn_pool_clear(iterpool);
-
SVN_ERR(svn_fs_fs__dag_has_mergeinfo(&has_mergeinfo,
- nearest_ancestor->node, iterpool));
+ nearest_ancestor->node));
if (has_mergeinfo)
break;
/* No need to loop if we're looking for explicit mergeinfo. */
if (inherit == svn_mergeinfo_explicit)
{
- svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
@@ -3480,17 +3788,13 @@ get_mergeinfo_for_path(svn_mergeinfo_t *mergeinfo,
/* Run out? There's no mergeinfo. */
if (!nearest_ancestor)
{
- svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
}
- svn_pool_destroy(iterpool);
-
SVN_ERR(svn_fs_fs__dag_get_proplist(&proplist, nearest_ancestor->node,
scratch_pool));
- mergeinfo_string = apr_hash_get(proplist, SVN_PROP_MERGEINFO,
- APR_HASH_KEY_STRING);
+ mergeinfo_string = svn_hash_gets(proplist, SVN_PROP_MERGEINFO);
if (!mergeinfo_string)
return svn_error_createf
(SVN_ERR_FS_CORRUPT, NULL,
@@ -3521,7 +3825,7 @@ get_mergeinfo_for_path(svn_mergeinfo_t *mergeinfo,
can return the mergeinfo results directly. Otherwise, we're
inheriting the mergeinfo, so we need to a) remove non-inheritable
ranges and b) telescope the merged-from paths. */
- if (nearest_ancestor != parent_path)
+ if (adjust_inherited_mergeinfo && (nearest_ancestor != parent_path))
{
svn_mergeinfo_t tmp_mergeinfo;
@@ -3539,6 +3843,58 @@ get_mergeinfo_for_path(svn_mergeinfo_t *mergeinfo,
return SVN_NO_ERROR;
}
+/* Caching wrapper around get_mergeinfo_for_path_internal().
+ */
+static svn_error_t *
+get_mergeinfo_for_path(svn_mergeinfo_t *mergeinfo,
+ svn_fs_root_t *rev_root,
+ const char *path,
+ svn_mergeinfo_inheritance_t inherit,
+ svn_boolean_t adjust_inherited_mergeinfo,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ fs_fs_data_t *ffd = rev_root->fs->fsap_data;
+ const char *cache_key;
+ svn_boolean_t found = FALSE;
+ svn_stringbuf_t *mergeinfo_exists;
+
+ *mergeinfo = NULL;
+
+ cache_key = mergeinfo_cache_key(path, rev_root, inherit,
+ adjust_inherited_mergeinfo, scratch_pool);
+ if (ffd->mergeinfo_existence_cache)
+ {
+ SVN_ERR(svn_cache__get((void **)&mergeinfo_exists, &found,
+ ffd->mergeinfo_existence_cache,
+ cache_key, result_pool));
+ if (found && mergeinfo_exists->data[0] == '1')
+ SVN_ERR(svn_cache__get((void **)mergeinfo, &found,
+ ffd->mergeinfo_cache,
+ cache_key, result_pool));
+ }
+
+ if (! found)
+ {
+ SVN_ERR(get_mergeinfo_for_path_internal(mergeinfo, rev_root, path,
+ inherit,
+ adjust_inherited_mergeinfo,
+ result_pool, scratch_pool));
+ if (ffd->mergeinfo_existence_cache)
+ {
+ mergeinfo_exists = svn_stringbuf_create(*mergeinfo ? "1" : "0",
+ scratch_pool);
+ SVN_ERR(svn_cache__set(ffd->mergeinfo_existence_cache,
+ cache_key, mergeinfo_exists, scratch_pool));
+ if (*mergeinfo)
+ SVN_ERR(svn_cache__set(ffd->mergeinfo_cache,
+ cache_key, *mergeinfo, scratch_pool));
+ }
+ }
+
+ return SVN_NO_ERROR;
+}
+
/* Adds mergeinfo for each descendant of PATH (but not PATH itself)
under ROOT to RESULT_CATALOG. Returned values are allocated in
RESULT_POOL; temporary values in POOL. */
@@ -3554,8 +3910,7 @@ add_descendant_mergeinfo(svn_mergeinfo_catalog_t result_catalog,
SVN_ERR(get_dag(&this_dag, root, path, scratch_pool));
SVN_ERR(svn_fs_fs__dag_has_descendants_with_mergeinfo(&go_down,
- this_dag,
- scratch_pool));
+ this_dag));
if (go_down)
SVN_ERR(crawl_directory_dag_for_mergeinfo(root,
path,
@@ -3576,10 +3931,12 @@ get_mergeinfos_for_paths(svn_fs_root_t *root,
const apr_array_header_t *paths,
svn_mergeinfo_inheritance_t inherit,
svn_boolean_t include_descendants,
- apr_pool_t *pool)
+ svn_boolean_t adjust_inherited_mergeinfo,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- svn_mergeinfo_catalog_t result_catalog = apr_hash_make(pool);
- apr_pool_t *iterpool = svn_pool_create(pool);
+ svn_mergeinfo_catalog_t result_catalog = svn_hash__make(result_pool);
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
int i;
for (i = 0; i < paths->nelts; i++)
@@ -3591,7 +3948,8 @@ get_mergeinfos_for_paths(svn_fs_root_t *root,
svn_pool_clear(iterpool);
err = get_mergeinfo_for_path(&path_mergeinfo, root, path,
- inherit, pool, iterpool);
+ inherit, adjust_inherited_mergeinfo,
+ result_pool, iterpool);
if (err)
{
if (err->apr_err == SVN_ERR_MERGEINFO_PARSE_ERROR)
@@ -3607,11 +3965,10 @@ get_mergeinfos_for_paths(svn_fs_root_t *root,
}
if (path_mergeinfo)
- apr_hash_set(result_catalog, path, APR_HASH_KEY_STRING,
- path_mergeinfo);
+ svn_hash_sets(result_catalog, path, path_mergeinfo);
if (include_descendants)
- SVN_ERR(add_descendant_mergeinfo(result_catalog, root, path, pool,
- iterpool));
+ SVN_ERR(add_descendant_mergeinfo(result_catalog, root, path,
+ result_pool, scratch_pool));
}
svn_pool_destroy(iterpool);
@@ -3627,7 +3984,9 @@ fs_get_mergeinfo(svn_mergeinfo_catalog_t *catalog,
const apr_array_header_t *paths,
svn_mergeinfo_inheritance_t inherit,
svn_boolean_t include_descendants,
- apr_pool_t *pool)
+ svn_boolean_t adjust_inherited_mergeinfo,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
fs_fs_data_t *ffd = root->fs->fsap_data;
@@ -3646,7 +4005,9 @@ fs_get_mergeinfo(svn_mergeinfo_catalog_t *catalog,
/* Retrieve a path -> mergeinfo hash mapping. */
return get_mergeinfos_for_paths(root, catalog, paths,
inherit,
- include_descendants, pool);
+ include_descendants,
+ adjust_inherited_mergeinfo,
+ result_pool, scratch_pool);
}
@@ -3673,6 +4034,7 @@ static root_vtable_t root_vtable = {
fs_file_length,
fs_file_checksum,
fs_file_contents,
+ fs_try_process_file_contents,
fs_make_file,
fs_apply_textdelta,
fs_apply_text,
@@ -3712,7 +4074,7 @@ make_revision_root(svn_fs_t *fs,
root->rev = rev;
frd->root_dir = root_dir;
- frd->copyfrom_cache = apr_hash_make(root->pool);
+ frd->copyfrom_cache = svn_hash__make(root->pool);
root->fsap_data = frd;
@@ -3739,6 +4101,8 @@ make_txn_root(svn_fs_root_t **root_p,
root->txn_flags = flags;
root->rev = base_rev;
+ frd->txn_id = txn;
+
/* Because this cache actually tries to invalidate elements, keep
the number of elements per page down.
@@ -3749,7 +4113,8 @@ make_txn_root(svn_fs_root_t **root_p,
svn_fs_fs__dag_deserialize,
APR_HASH_KEY_STRING,
32, 20, FALSE,
- apr_pstrcat(pool, txn, ":TXN", (char *)NULL),
+ apr_pstrcat(pool, txn, ":TXN",
+ (char *)NULL),
root->pool));
/* Initialize transaction-local caches in FS.
@@ -3763,3 +4128,197 @@ make_txn_root(svn_fs_root_t **root_p,
*root_p = root;
return SVN_NO_ERROR;
}
+
+
+
+/* Verify. */
+static APR_INLINE const char *
+stringify_node(dag_node_t *node,
+ apr_pool_t *pool)
+{
+ /* ### TODO: print some PATH@REV to it, too. */
+ return svn_fs_fs__id_unparse(svn_fs_fs__dag_get_id(node), pool)->data;
+}
+
+/* Check metadata sanity on NODE, and on its children. Manually verify
+ information for DAG nodes in revision REV, and trust the metadata
+ accuracy for nodes belonging to older revisions. */
+static svn_error_t *
+verify_node(dag_node_t *node,
+ svn_revnum_t rev,
+ apr_pool_t *pool)
+{
+ svn_boolean_t has_mergeinfo;
+ apr_int64_t mergeinfo_count;
+ const svn_fs_id_t *pred_id;
+ svn_fs_t *fs = svn_fs_fs__dag_get_fs(node);
+ int pred_count;
+ svn_node_kind_t kind;
+ apr_pool_t *iterpool = svn_pool_create(pool);
+
+ /* Fetch some data. */
+ SVN_ERR(svn_fs_fs__dag_has_mergeinfo(&has_mergeinfo, node));
+ SVN_ERR(svn_fs_fs__dag_get_mergeinfo_count(&mergeinfo_count, node));
+ SVN_ERR(svn_fs_fs__dag_get_predecessor_id(&pred_id, node));
+ SVN_ERR(svn_fs_fs__dag_get_predecessor_count(&pred_count, node));
+ kind = svn_fs_fs__dag_node_kind(node);
+
+ /* Sanity check. */
+ if (mergeinfo_count < 0)
+ return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
+ "Negative mergeinfo-count %" APR_INT64_T_FMT
+ " on node '%s'",
+ mergeinfo_count, stringify_node(node, iterpool));
+
+ /* Issue #4129. (This check will explicitly catch non-root instances too.) */
+ if (pred_id)
+ {
+ dag_node_t *pred;
+ int pred_pred_count;
+ SVN_ERR(svn_fs_fs__dag_get_node(&pred, fs, pred_id, iterpool));
+ SVN_ERR(svn_fs_fs__dag_get_predecessor_count(&pred_pred_count, pred));
+ if (pred_pred_count+1 != pred_count)
+ return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
+ "Predecessor count mismatch: "
+ "%s has %d, but %s has %d",
+ stringify_node(node, iterpool), pred_count,
+ stringify_node(pred, iterpool),
+ pred_pred_count);
+ }
+
+ /* Kind-dependent verifications. */
+ if (kind == svn_node_none)
+ {
+ return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
+ "Node '%s' has kind 'none'",
+ stringify_node(node, iterpool));
+ }
+ if (kind == svn_node_file)
+ {
+ if (has_mergeinfo != mergeinfo_count) /* comparing int to bool */
+ return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
+ "File node '%s' has inconsistent mergeinfo: "
+ "has_mergeinfo=%d, "
+ "mergeinfo_count=%" APR_INT64_T_FMT,
+ stringify_node(node, iterpool),
+ has_mergeinfo, mergeinfo_count);
+ }
+ if (kind == svn_node_dir)
+ {
+ apr_hash_t *entries;
+ apr_hash_index_t *hi;
+ apr_int64_t children_mergeinfo = 0;
+
+ SVN_ERR(svn_fs_fs__dag_dir_entries(&entries, node, pool));
+
+ /* Compute CHILDREN_MERGEINFO. */
+ for (hi = apr_hash_first(pool, entries);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ svn_fs_dirent_t *dirent = svn__apr_hash_index_val(hi);
+ dag_node_t *child;
+ svn_revnum_t child_rev;
+ apr_int64_t child_mergeinfo;
+
+ svn_pool_clear(iterpool);
+
+ /* Compute CHILD_REV. */
+ SVN_ERR(svn_fs_fs__dag_get_node(&child, fs, dirent->id, iterpool));
+ SVN_ERR(svn_fs_fs__dag_get_revision(&child_rev, child, iterpool));
+
+ if (child_rev == rev)
+ SVN_ERR(verify_node(child, rev, iterpool));
+
+ SVN_ERR(svn_fs_fs__dag_get_mergeinfo_count(&child_mergeinfo, child));
+ children_mergeinfo += child_mergeinfo;
+ }
+
+ /* Side-effect of issue #4129. */
+ if (children_mergeinfo+has_mergeinfo != mergeinfo_count)
+ return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
+ "Mergeinfo-count discrepancy on '%s': "
+ "expected %" APR_INT64_T_FMT "+%d, "
+ "counted %" APR_INT64_T_FMT,
+ stringify_node(node, iterpool),
+ mergeinfo_count, has_mergeinfo,
+ children_mergeinfo);
+ }
+
+ svn_pool_destroy(iterpool);
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_fs_fs__verify_root(svn_fs_root_t *root,
+ apr_pool_t *pool)
+{
+ svn_fs_t *fs = root->fs;
+ dag_node_t *root_dir;
+
+ /* Issue #4129: bogus pred-counts and minfo-cnt's on the root node-rev
+ (and elsewhere). This code makes more thorough checks than the
+ commit-time checks in validate_root_noderev(). */
+
+ /* Callers should disable caches by setting SVN_FS_CONFIG_FSFS_CACHE_NS;
+ see r1462436.
+
+ When this code is called in the library, we want to ensure we
+ use the on-disk data --- rather than some data that was read
+ in the possibly-distance past and cached since. */
+
+ if (root->is_txn_root)
+ {
+ fs_txn_root_data_t *frd = root->fsap_data;
+ SVN_ERR(svn_fs_fs__dag_txn_root(&root_dir, fs, frd->txn_id, pool));
+ }
+ else
+ {
+ fs_rev_root_data_t *frd = root->fsap_data;
+ root_dir = frd->root_dir;
+ }
+
+ /* Recursively verify ROOT_DIR. */
+ SVN_ERR(verify_node(root_dir, root->rev, pool));
+
+ /* Verify explicitly the predecessor of the root. */
+ {
+ const svn_fs_id_t *pred_id;
+
+ /* Only r0 should have no predecessor. */
+ SVN_ERR(svn_fs_fs__dag_get_predecessor_id(&pred_id, root_dir));
+ if (! root->is_txn_root && !!pred_id != !!root->rev)
+ return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
+ "r%ld's root node's predecessor is "
+ "unexpectedly '%s'",
+ root->rev,
+ (pred_id
+ ? svn_fs_fs__id_unparse(pred_id, pool)->data
+ : "(null)"));
+ if (root->is_txn_root && !pred_id)
+ return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
+ "Transaction '%s''s root node's predecessor is "
+ "unexpectedly NULL",
+ root->txn);
+
+ /* Check the predecessor's revision. */
+ if (pred_id)
+ {
+ svn_revnum_t pred_rev = svn_fs_fs__id_rev(pred_id);
+ if (! root->is_txn_root && pred_rev+1 != root->rev)
+ /* Issue #4129. */
+ return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
+ "r%ld's root node's predecessor is r%ld"
+ " but should be r%ld",
+ root->rev, pred_rev, root->rev - 1);
+ if (root->is_txn_root && pred_rev != root->rev)
+ return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
+ "Transaction '%s''s root node's predecessor"
+ " is r%ld"
+ " but should be r%ld",
+ root->txn, pred_rev, root->rev);
+ }
+ }
+
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/libsvn_fs_fs/tree.h b/subversion/libsvn_fs_fs/tree.h
index 0f445ed..34fa0a2 100644
--- a/subversion/libsvn_fs_fs/tree.h
+++ b/subversion/libsvn_fs_fs/tree.h
@@ -23,12 +23,19 @@
#ifndef SVN_LIBSVN_FS_TREE_H
#define SVN_LIBSVN_FS_TREE_H
+#include "fs.h"
+
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
+/* In POOL, create an instance of a DAG node 1st level cache.
+ The POOL will be cleared at regular intervals. */
+fs_fs_dag_cache_t*
+svn_fs_fs__create_dag_cache(apr_pool_t *pool);
+
/* Set *ROOT_P to the root directory of revision REV in filesystem FS.
Allocate the structure in POOL. */
svn_error_t *svn_fs_fs__revision_root(svn_fs_root_t **root_p, svn_fs_t *fs,
@@ -78,6 +85,12 @@ svn_fs_fs__node_created_rev(svn_revnum_t *revision,
const char *path,
apr_pool_t *pool);
+/* Verify metadata for ROOT.
+ ### Currently only implemented for revision roots. */
+svn_error_t *
+svn_fs_fs__verify_root(svn_fs_root_t *root,
+ apr_pool_t *pool);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/libsvn_fs_util/fs-util.c b/subversion/libsvn_fs_util/fs-util.c
index 682f43d..da57bc9 100644
--- a/subversion/libsvn_fs_util/fs-util.c
+++ b/subversion/libsvn_fs_util/fs-util.c
@@ -26,6 +26,7 @@
#include <apr_pools.h>
#include <apr_strings.h>
+#include "svn_hash.h"
#include "svn_fs.h"
#include "svn_dirent_uri.h"
#include "svn_path.h"
@@ -35,6 +36,48 @@
#include "private/svn_fspath.h"
#include "../libsvn_fs/fs-loader.h"
+/* Return TRUE, if PATH of PATH_LEN > 0 chars starts with a '/' and does
+ * not end with a '/' and does not contain duplicate '/'.
+ */
+static svn_boolean_t
+is_canonical_abspath(const char *path, size_t path_len)
+{
+ const char *end;
+
+ /* check for leading '/' */
+ if (path[0] != '/')
+ return FALSE;
+
+ /* check for trailing '/' */
+ if (path_len == 1)
+ return TRUE;
+ if (path[path_len - 1] == '/')
+ return FALSE;
+
+ /* check for "//" */
+ end = path + path_len - 1;
+ for (; path != end; ++path)
+ if ((path[0] == '/') && (path[1] == '/'))
+ return FALSE;
+
+ return TRUE;
+}
+
+svn_boolean_t
+svn_fs__is_canonical_abspath(const char *path)
+{
+ /* No PATH? No problem. */
+ if (! path)
+ return TRUE;
+
+ /* Empty PATH? That's just "/". */
+ if (! *path)
+ return FALSE;
+
+ /* detailed checks */
+ return is_canonical_abspath(path, strlen(path));
+}
+
const char *
svn_fs__canonicalize_abspath(const char *path, apr_pool_t *pool)
{
@@ -49,12 +92,16 @@ svn_fs__canonicalize_abspath(const char *path, apr_pool_t *pool)
/* Empty PATH? That's just "/". */
if (! *path)
- return apr_pstrdup(pool, "/");
+ return "/";
+
+ /* Non-trivial cases. Maybe, the path already is canonical after all? */
+ path_len = strlen(path);
+ if (is_canonical_abspath(path, path_len))
+ return apr_pstrmemdup(pool, path, path_len);
/* Now, the fun begins. Alloc enough room to hold PATH with an
added leading '/'. */
- path_len = strlen(path);
- newpath = apr_pcalloc(pool, path_len + 2);
+ newpath = apr_palloc(pool, path_len + 2);
/* No leading slash? Fix that. */
if (*path != '/')
@@ -89,6 +136,8 @@ svn_fs__canonicalize_abspath(const char *path, apr_pool_t *pool)
the root directory case)? */
if ((newpath[newpath_i - 1] == '/') && (newpath_i > 1))
newpath[newpath_i - 1] = '\0';
+ else
+ newpath[newpath_i] = '\0';
return newpath;
}
@@ -163,10 +212,11 @@ svn_fs__append_to_merged_froms(svn_mergeinfo_t *output,
for (hi = apr_hash_first(pool, input); hi; hi = apr_hash_next(hi))
{
const char *path = svn__apr_hash_index_key(hi);
- apr_array_header_t *rangelist = svn__apr_hash_index_val(hi);
+ svn_rangelist_t *rangelist = svn__apr_hash_index_val(hi);
- apr_hash_set(*output, svn_fspath__join(path, rel_path, pool),
- APR_HASH_KEY_STRING, svn_rangelist_dup(rangelist, pool));
+ svn_hash_sets(*output,
+ svn_fspath__join(path, rel_path, pool),
+ svn_rangelist_dup(rangelist, pool));
}
return SVN_NO_ERROR;
diff --git a/subversion/libsvn_ra/compat.c b/subversion/libsvn_ra/compat.c
index ec3ff9d..b16bbef 100644
--- a/subversion/libsvn_ra/compat.c
+++ b/subversion/libsvn_ra/compat.c
@@ -23,6 +23,7 @@
#include <apr_pools.h>
+#include "svn_hash.h"
#include "svn_error.h"
#include "svn_pools.h"
#include "svn_sorts.h"
@@ -91,7 +92,7 @@ prev_log_path(const char **prev_path_p,
if (changed_paths)
{
/* See if PATH was explicitly changed in this revision. */
- change = apr_hash_get(changed_paths, path, APR_HASH_KEY_STRING);
+ change = svn_hash_gets(changed_paths, path);
if (change)
{
/* If PATH was not newly added in this revision, then it may or may
@@ -141,7 +142,7 @@ prev_log_path(const char **prev_path_p,
svn_sort__item_t item = APR_ARRAY_IDX(paths,
i - 1, svn_sort__item_t);
const char *ch_path = item.key;
- int len = strlen(ch_path);
+ size_t len = strlen(ch_path);
/* See if our path is the child of this change path. If
not, keep looking. */
@@ -154,7 +155,7 @@ prev_log_path(const char **prev_path_p,
path, to the change's copyfrom path. Otherwise, this
change isn't really interesting to us, and our search
continues. */
- change = apr_hash_get(changed_paths, ch_path, len);
+ change = item.value;
if (change->copyfrom_path)
{
if (action_p)
@@ -630,7 +631,6 @@ fr_log_message_receiver(void *baton,
{
struct fr_log_message_baton *lmb = baton;
struct rev *rev;
- apr_hash_index_t *hi;
rev = apr_palloc(lmb->pool, sizeof(*rev));
rev->revision = log_entry->revision;
@@ -639,17 +639,7 @@ fr_log_message_receiver(void *baton,
lmb->eldest = rev;
/* Duplicate log_entry revprops into rev->props */
- rev->props = apr_hash_make(lmb->pool);
- for (hi = apr_hash_first(pool, log_entry->revprops); hi;
- hi = apr_hash_next(hi))
- {
- void *val;
- const void *key;
-
- apr_hash_this(hi, &key, NULL, &val);
- apr_hash_set(rev->props, apr_pstrdup(lmb->pool, key), APR_HASH_KEY_STRING,
- svn_string_dup(val, lmb->pool));
- }
+ rev->props = svn_prop_hash_dup(log_entry->revprops, lmb->pool);
return prev_log_path(&lmb->path, &lmb->action,
&lmb->copyrev, log_entry->changed_paths2,
@@ -757,8 +747,9 @@ svn_ra__file_revs_from_log(svn_ra_session_t *ra_session,
/* Compute and send delta if client asked for it. */
if (delta_handler)
{
- /* Get the content delta. */
- svn_txdelta(&delta_stream, last_stream, stream, lastpool);
+ /* Get the content delta. Don't calculate checksums as we don't
+ * use them. */
+ svn_txdelta2(&delta_stream, last_stream, stream, FALSE, lastpool);
/* And send. */
SVN_ERR(svn_txdelta_send_txstream(delta_stream, delta_handler,
@@ -870,3 +861,92 @@ svn_ra__get_deleted_rev_from_log(svn_ra_session_t *session,
*revision_deleted = log_path_deleted_baton.revision_deleted;
return SVN_NO_ERROR;
}
+
+
+svn_error_t *
+svn_ra__get_inherited_props_walk(svn_ra_session_t *session,
+ const char *path,
+ svn_revnum_t revision,
+ apr_array_header_t **inherited_props,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ const char *repos_root_url;
+ const char *session_url;
+ const char *parent_url;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+
+ *inherited_props =
+ apr_array_make(result_pool, 1, sizeof(svn_prop_inherited_item_t *));
+
+ /* Walk to the root of the repository getting inherited
+ props for PATH. */
+ SVN_ERR(svn_ra_get_repos_root2(session, &repos_root_url, scratch_pool));
+ SVN_ERR(svn_ra_get_session_url(session, &session_url, scratch_pool));
+ parent_url = session_url;
+
+ while (strcmp(repos_root_url, parent_url))
+ {
+ apr_hash_index_t *hi;
+ apr_hash_t *parent_props;
+ apr_hash_t *final_hash = apr_hash_make(result_pool);
+ svn_error_t *err;
+
+ svn_pool_clear(iterpool);
+ parent_url = svn_uri_dirname(parent_url, scratch_pool);
+ SVN_ERR(svn_ra_reparent(session, parent_url, iterpool));
+ err = session->vtable->get_dir(session, NULL, NULL,
+ &parent_props, "",
+ revision, SVN_DIRENT_ALL,
+ iterpool);
+
+ /* If the user doesn't have read access to a parent path then
+ skip, but allow them to inherit from further up. */
+ if (err)
+ {
+ if ((err->apr_err == SVN_ERR_RA_NOT_AUTHORIZED)
+ || (err->apr_err == SVN_ERR_RA_DAV_FORBIDDEN))
+ {
+ svn_error_clear(err);
+ continue;
+ }
+ else
+ {
+ return svn_error_trace(err);
+ }
+ }
+
+ for (hi = apr_hash_first(scratch_pool, parent_props);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ const char *name = svn__apr_hash_index_key(hi);
+ apr_ssize_t klen = svn__apr_hash_index_klen(hi);
+ svn_string_t *value = svn__apr_hash_index_val(hi);
+
+ if (svn_property_kind2(name) == svn_prop_regular_kind)
+ {
+ name = apr_pstrdup(result_pool, name);
+ value = svn_string_dup(value, result_pool);
+ apr_hash_set(final_hash, name, klen, value);
+ }
+ }
+
+ if (apr_hash_count(final_hash))
+ {
+ svn_prop_inherited_item_t *new_iprop =
+ apr_palloc(result_pool, sizeof(*new_iprop));
+ new_iprop->path_or_url = svn_uri_skip_ancestor(repos_root_url,
+ parent_url,
+ result_pool);
+ new_iprop->prop_hash = final_hash;
+ svn_sort__array_insert(&new_iprop, *inherited_props, 0);
+ }
+ }
+
+ /* Reparent session back to original URL. */
+ SVN_ERR(svn_ra_reparent(session, session_url, scratch_pool));
+
+ svn_pool_destroy(iterpool);
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/libsvn_ra/debug_reporter.c b/subversion/libsvn_ra/debug_reporter.c
index 56248ac..00ec029 100644
--- a/subversion/libsvn_ra/debug_reporter.c
+++ b/subversion/libsvn_ra/debug_reporter.c
@@ -95,7 +95,7 @@ finish_report(void *report_baton,
apr_pool_t *pool)
{
struct report_baton *rb = report_baton;
- SVN_ERR(svn_stream_printf(rb->out, pool, "finish_report()\n"));
+ SVN_ERR(svn_stream_puts(rb->out, "finish_report()\n"));
SVN_ERR(rb->wrapped_reporter->finish_report(rb->wrapped_report_baton, pool));
return SVN_NO_ERROR;
}
@@ -105,7 +105,7 @@ abort_report(void *report_baton,
apr_pool_t *pool)
{
struct report_baton *rb = report_baton;
- SVN_ERR(svn_stream_printf(rb->out, pool, "abort_report()\n"));
+ SVN_ERR(svn_stream_puts(rb->out, "abort_report()\n"));
SVN_ERR(rb->wrapped_reporter->abort_report(rb->wrapped_report_baton, pool));
return SVN_NO_ERROR;
}
diff --git a/subversion/libsvn_ra/deprecated.c b/subversion/libsvn_ra/deprecated.c
index 6fd2442..b7e717e 100644
--- a/subversion/libsvn_ra/deprecated.c
+++ b/subversion/libsvn_ra/deprecated.c
@@ -26,6 +26,7 @@
deprecated functions in this file. */
#define SVN_DEPRECATED
+#include "svn_hash.h"
#include "svn_ra.h"
#include "svn_path.h"
#include "svn_compat.h"
@@ -33,6 +34,7 @@
#include "svn_pools.h"
#include "ra_loader.h"
+#include "deprecated.h"
#include "svn_private_config.h"
@@ -209,19 +211,18 @@ svn_error_t *svn_ra_get_commit_editor2(svn_ra_session_t *session,
const svn_delta_editor_t **editor,
void **edit_baton,
const char *log_msg,
- svn_commit_callback2_t callback,
- void *callback_baton,
+ svn_commit_callback2_t commit_callback,
+ void *commit_baton,
apr_hash_t *lock_tokens,
svn_boolean_t keep_locks,
apr_pool_t *pool)
{
apr_hash_t *revprop_table = apr_hash_make(pool);
if (log_msg)
- apr_hash_set(revprop_table, SVN_PROP_REVISION_LOG,
- APR_HASH_KEY_STRING,
- svn_string_create(log_msg, pool));
+ svn_hash_sets(revprop_table, SVN_PROP_REVISION_LOG,
+ svn_string_create(log_msg, pool));
return svn_ra_get_commit_editor3(session, editor, edit_baton, revprop_table,
- callback, callback_baton,
+ commit_callback, commit_baton,
lock_tokens, keep_locks, pool);
}
@@ -348,6 +349,29 @@ svn_error_t *svn_ra_get_file_revs(svn_ra_session_t *session,
handler2_baton, pool);
}
+svn_error_t *
+svn_ra_do_update2(svn_ra_session_t *session,
+ const svn_ra_reporter3_t **reporter,
+ void **report_baton,
+ svn_revnum_t revision_to_update_to,
+ const char *update_target,
+ svn_depth_t depth,
+ svn_boolean_t send_copyfrom_args,
+ const svn_delta_editor_t *update_editor,
+ void *update_baton,
+ apr_pool_t *pool)
+{
+ return svn_error_trace(
+ svn_ra_do_update3(session,
+ reporter, report_baton,
+ revision_to_update_to, update_target,
+ depth,
+ send_copyfrom_args,
+ FALSE /* ignore_ancestry */,
+ update_editor, update_baton,
+ pool, pool));
+}
+
svn_error_t *svn_ra_do_update(svn_ra_session_t *session,
const svn_ra_reporter2_t **reporter,
void **report_baton,
@@ -368,8 +392,34 @@ svn_error_t *svn_ra_do_update(svn_ra_session_t *session,
revision_to_update_to, update_target,
SVN_DEPTH_INFINITY_OR_FILES(recurse),
FALSE, /* no copyfrom args */
+ FALSE /* ignore_ancestry */,
update_editor, update_baton,
- pool);
+ pool, pool);
+}
+
+
+svn_error_t *
+svn_ra_do_switch2(svn_ra_session_t *session,
+ const svn_ra_reporter3_t **reporter,
+ void **report_baton,
+ svn_revnum_t revision_to_switch_to,
+ const char *switch_target,
+ svn_depth_t depth,
+ const char *switch_url,
+ const svn_delta_editor_t *switch_editor,
+ void *switch_baton,
+ apr_pool_t *pool)
+{
+ return svn_error_trace(
+ svn_ra_do_switch3(session,
+ reporter, report_baton,
+ revision_to_switch_to, switch_target,
+ depth,
+ switch_url,
+ FALSE /* send_copyfrom_args */,
+ TRUE /* ignore_ancestry */,
+ switch_editor, switch_baton,
+ pool, pool));
}
svn_error_t *svn_ra_do_switch(svn_ra_session_t *session,
@@ -392,8 +442,11 @@ svn_error_t *svn_ra_do_switch(svn_ra_session_t *session,
&(b->reporter3), &(b->reporter3_baton),
revision_to_switch_to, switch_target,
SVN_DEPTH_INFINITY_OR_FILES(recurse),
- switch_url, switch_editor, switch_baton,
- pool);
+ switch_url,
+ FALSE /* send_copyfrom_args */,
+ TRUE /* ignore_ancestry */,
+ switch_editor, switch_baton,
+ pool, pool);
}
svn_error_t *svn_ra_do_status(svn_ra_session_t *session,
@@ -417,3 +470,40 @@ svn_error_t *svn_ra_do_status(svn_ra_session_t *session,
SVN_DEPTH_INFINITY_OR_IMMEDIATES(recurse),
status_editor, status_baton, pool);
}
+
+svn_error_t *svn_ra_get_dir(svn_ra_session_t *session,
+ const char *path,
+ svn_revnum_t revision,
+ apr_hash_t **dirents,
+ svn_revnum_t *fetched_rev,
+ apr_hash_t **props,
+ apr_pool_t *pool)
+{
+ SVN_ERR_ASSERT(*path != '/');
+ return session->vtable->get_dir(session, dirents, fetched_rev, props,
+ path, revision, SVN_DIRENT_ALL, pool);
+}
+
+svn_error_t *
+svn_ra_local__deprecated_init(int abi_version,
+ apr_pool_t *pool,
+ apr_hash_t *hash)
+{
+ return svn_error_trace(svn_ra_local_init(abi_version, pool, hash));
+}
+
+svn_error_t *
+svn_ra_svn__deprecated_init(int abi_version,
+ apr_pool_t *pool,
+ apr_hash_t *hash)
+{
+ return svn_error_trace(svn_ra_svn_init(abi_version, pool, hash));
+}
+
+svn_error_t *
+svn_ra_serf__deprecated_init(int abi_version,
+ apr_pool_t *pool,
+ apr_hash_t *hash)
+{
+ return svn_error_trace(svn_ra_serf_init(abi_version, pool, hash));
+}
diff --git a/subversion/libsvn_ra/deprecated.h b/subversion/libsvn_ra/deprecated.h
new file mode 100644
index 0000000..205de16
--- /dev/null
+++ b/subversion/libsvn_ra/deprecated.h
@@ -0,0 +1,60 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ */
+
+
+
+#ifndef DEPRECATED_H
+#define DEPRECATED_H
+
+#include <apr_hash.h>
+
+#include "private/svn_editor.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Non-deprecated wrapper around svn_ra_local_init. */
+svn_error_t *
+svn_ra_local__deprecated_init(int abi_version,
+ apr_pool_t *pool,
+ apr_hash_t *hash);
+
+/* Non-deprecated wrapper around svn_ra_svn_init. */
+svn_error_t *
+svn_ra_svn__deprecated_init(int abi_version,
+ apr_pool_t *pool,
+ apr_hash_t *hash);
+
+/* Non-deprecated wrapper around svn_ra_serf_init. */
+svn_error_t *
+svn_ra_serf__deprecated_init(int abi_version,
+ apr_pool_t *pool,
+ apr_hash_t *hash);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* DEPRECATED_H */
diff --git a/subversion/libsvn_ra/editor.c b/subversion/libsvn_ra/editor.c
new file mode 100644
index 0000000..ac969ca
--- /dev/null
+++ b/subversion/libsvn_ra/editor.c
@@ -0,0 +1,339 @@
+/*
+ * editor.c: compatibility editors
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#include <apr_pools.h>
+
+#include "svn_error.h"
+#include "svn_pools.h"
+#include "svn_ra.h"
+#include "svn_delta.h"
+#include "svn_dirent_uri.h"
+
+#include "private/svn_ra_private.h"
+#include "private/svn_delta_private.h"
+#include "private/svn_editor.h"
+
+#include "ra_loader.h"
+#include "svn_private_config.h"
+
+
+struct fp_baton {
+ svn_ra__provide_props_cb_t provide_props_cb;
+ void *cb_baton;
+};
+
+struct fb_baton {
+ svn_ra__provide_base_cb_t provide_base_cb;
+ void *cb_baton;
+};
+
+/* The shims currently want a callback that provides props for a given
+ REPOS_RELPATH at a given BASE_REVISION. However, the RA Ev2 interface
+ has a callback that provides properties for the REPOS_RELPATH from any
+ revision, which is returned along with the properties.
+
+ This is a little shim to map between the prototypes. The base revision
+ for the properties is discarded, and the requested revision (from the
+ shim code) is ignored.
+
+ The shim code needs to be updated to allow for an RA-style callback
+ to fetch properties. */
+static svn_error_t *
+fetch_props(apr_hash_t **props,
+ void *baton,
+ const char *repos_relpath,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct fp_baton *fpb = baton;
+ svn_revnum_t unused_revision;
+
+ /* Ignored: BASE_REVISION. */
+
+ return svn_error_trace(fpb->provide_props_cb(props, &unused_revision,
+ fpb->cb_baton,
+ repos_relpath,
+ result_pool, scratch_pool));
+}
+
+/* See note above regarding BASE_REVISION.
+ This also pulls down the entire contents of the file stream from the
+ RA layer and stores them in a local file, returning the path.
+*/
+static svn_error_t *
+fetch_base(const char **filename,
+ void *baton,
+ const char *repos_relpath,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct fb_baton *fbb = baton;
+ svn_revnum_t unused_revision;
+ svn_stream_t *contents;
+ svn_stream_t *file_stream;
+ const char *tmp_filename;
+
+ /* Ignored: BASE_REVISION. */
+
+ SVN_ERR(fbb->provide_base_cb(&contents, &unused_revision, fbb->cb_baton,
+ repos_relpath, result_pool, scratch_pool));
+
+ SVN_ERR(svn_stream_open_unique(&file_stream, &tmp_filename, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_stream_copy3(contents, file_stream, NULL, NULL, scratch_pool));
+
+ *filename = apr_pstrdup(result_pool, tmp_filename);
+
+
+
+ return SVN_NO_ERROR;
+}
+
+
+
+svn_error_t *
+svn_ra__use_commit_shim(svn_editor_t **editor,
+ svn_ra_session_t *session,
+ apr_hash_t *revprop_table,
+ svn_commit_callback2_t commit_callback,
+ void *commit_baton,
+ apr_hash_t *lock_tokens,
+ svn_boolean_t keep_locks,
+ svn_ra__provide_base_cb_t provide_base_cb,
+ svn_ra__provide_props_cb_t provide_props_cb,
+ svn_ra__get_copysrc_kind_cb_t get_copysrc_kind_cb,
+ void *cb_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ const svn_delta_editor_t *deditor;
+ void *dedit_baton;
+ struct svn_delta__extra_baton *exb;
+ svn_delta__unlock_func_t unlock_func;
+ void *unlock_baton;
+ const char *repos_root;
+ const char *session_url;
+ const char *base_relpath;
+ svn_boolean_t *found_abs_paths;
+ struct fp_baton *fpb;
+
+ /* NOTE: PROVIDE_BASE_CB is currently unused by this shim. In the future,
+ we can pass it to the underlying Ev2/Ev1 shim to produce better
+ apply_txdelta drives (ie. against a base rather than <empty>). */
+
+ /* Fetch the RA provider's Ev1 commit editor. */
+ SVN_ERR(session->vtable->get_commit_editor(session, &deditor, &dedit_baton,
+ revprop_table,
+ commit_callback, commit_baton,
+ lock_tokens, keep_locks,
+ result_pool));
+
+ /* Get or calculate the appropriate repos root and base relpath. */
+ SVN_ERR(svn_ra_get_repos_root2(session, &repos_root, scratch_pool));
+ SVN_ERR(svn_ra_get_session_url(session, &session_url, scratch_pool));
+ base_relpath = svn_uri_skip_ancestor(repos_root, session_url, scratch_pool);
+
+ /* We will assume that when the underlying Ev1 editor is finally driven
+ by the shim, that we will not need to prepend "/" to the paths. Place
+ this on the heap because it is examined much later. Set to FALSE. */
+ found_abs_paths = apr_pcalloc(result_pool, sizeof(*found_abs_paths));
+
+ /* The PROVIDE_PROPS_CB callback does not match what the shims want.
+ Let's jigger things around a little bit here. */
+ fpb = apr_palloc(result_pool, sizeof(*fpb));
+ fpb->provide_props_cb = provide_props_cb;
+ fpb->cb_baton = cb_baton;
+
+ /* Create the Ev2 editor from the Ev1 editor provided by the RA layer.
+
+ Note: GET_COPYSRC_KIND_CB is compatible in type/semantics with the
+ shim's FETCH_KIND_FUNC parameter. */
+ SVN_ERR(svn_delta__editor_from_delta(editor, &exb,
+ &unlock_func, &unlock_baton,
+ deditor, dedit_baton,
+ found_abs_paths,
+ repos_root, base_relpath,
+ cancel_func, cancel_baton,
+ get_copysrc_kind_cb, cb_baton,
+ fetch_props, fpb,
+ result_pool, scratch_pool));
+
+ /* Note: UNLOCK_FUNC and UNLOCK_BATON are unused during commit drives.
+ We can safely drop them on the floor. */
+
+ /* Since we're (currently) just wrapping an existing Ev1 editor, we have
+ to call any start_edit handler it may provide (the shim uses this to
+ invoke Ev1's open_root callback). We've got a couple of options to do
+ so: Implement a wrapper editor and call the start_edit callback upon
+ the first invocation of any of the underlying editor's functions; or,
+ just assume our consumer is going to eventually use the editor it is
+ asking for, and call the start edit callback now. For simplicity's
+ sake, we do the latter. */
+ if (exb->start_edit)
+ {
+ /* Most commit drives pass SVN_INVALID_REVNUM for the revision.
+ All calls to svn_delta_path_driver() pass SVN_INVALID_REVNUM,
+ so this is fine for any commits done via that function.
+
+ Notably, the PROPSET command passes a specific revision. Before
+ PROPSET can use the RA Ev2 interface, we may need to make this
+ revision a parameter.
+ ### what are the exact semantics? what is the meaning of the
+ ### revision passed to the Ev1->open_root() callback? */
+ SVN_ERR(exb->start_edit(exb->baton, SVN_INVALID_REVNUM));
+ }
+
+ /* Note: EXB also contains a TARGET_REVISION function, but that is not
+ used during commit operations. We can safely ignore it. (ie. it is
+ in EXB for use by paired-shims) */
+
+ return SVN_NO_ERROR;
+}
+
+
+struct wrapped_replay_baton_t {
+ svn_ra__replay_revstart_ev2_callback_t revstart_func;
+ svn_ra__replay_revfinish_ev2_callback_t revfinish_func;
+ void *replay_baton;
+
+ svn_ra_session_t *session;
+
+ svn_ra__provide_base_cb_t provide_base_cb;
+ svn_ra__provide_props_cb_t provide_props_cb;
+ void *cb_baton;
+
+ /* This will be populated by the revstart wrapper. */
+ svn_editor_t *editor;
+};
+
+static svn_error_t *
+revstart_func_wrapper(svn_revnum_t revision,
+ void *replay_baton,
+ const svn_delta_editor_t **deditor,
+ void **dedit_baton,
+ apr_hash_t *rev_props,
+ apr_pool_t *result_pool)
+{
+ struct wrapped_replay_baton_t *wrb = replay_baton;
+ const char *repos_root;
+ const char *session_url;
+ const char *base_relpath;
+ svn_boolean_t *found_abs_paths;
+ struct fp_baton *fpb;
+ struct svn_delta__extra_baton *exb;
+
+ /* Get the Ev2 editor from the original revstart func. */
+ SVN_ERR(wrb->revstart_func(revision, wrb->replay_baton, &wrb->editor,
+ rev_props, result_pool));
+
+ /* Get or calculate the appropriate repos root and base relpath. */
+ SVN_ERR(svn_ra_get_repos_root2(wrb->session, &repos_root, result_pool));
+ SVN_ERR(svn_ra_get_session_url(wrb->session, &session_url, result_pool));
+ base_relpath = svn_uri_skip_ancestor(repos_root, session_url, result_pool);
+
+ /* We will assume that when the underlying Ev1 editor is finally driven
+ by the shim, that we will not need to prepend "/" to the paths. Place
+ this on the heap because it is examined much later. Set to FALSE. */
+ found_abs_paths = apr_pcalloc(result_pool, sizeof(*found_abs_paths));
+
+ /* The PROVIDE_PROPS_CB callback does not match what the shims want.
+ Let's jigger things around a little bit here. */
+ fpb = apr_palloc(result_pool, sizeof(*fpb));
+ fpb->provide_props_cb = wrb->provide_props_cb;
+ fpb->cb_baton = wrb->cb_baton;
+
+ /* Create the extra baton. */
+ exb = apr_pcalloc(result_pool, sizeof(*exb));
+
+ /* Create the Ev1 editor from the Ev2 editor provided by the RA layer.
+
+ Note: GET_COPYSRC_KIND_CB is compatible in type/semantics with the
+ shim's FETCH_KIND_FUNC parameter. */
+ SVN_ERR(svn_delta__delta_from_editor(deditor, dedit_baton, wrb->editor,
+ NULL, NULL,
+ found_abs_paths,
+ repos_root, base_relpath,
+ fetch_props, wrb->cb_baton,
+ fetch_base, wrb->cb_baton,
+ exb, result_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+revfinish_func_wrapper(svn_revnum_t revision,
+ void *replay_baton,
+ const svn_delta_editor_t *editor,
+ void *edit_baton,
+ apr_hash_t *rev_props,
+ apr_pool_t *pool)
+{
+ struct wrapped_replay_baton_t *wrb = replay_baton;
+
+ SVN_ERR(wrb->revfinish_func(revision, replay_baton, wrb->editor, rev_props,
+ pool));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra__use_replay_range_shim(svn_ra_session_t *session,
+ svn_revnum_t start_revision,
+ svn_revnum_t end_revision,
+ svn_revnum_t low_water_mark,
+ svn_boolean_t send_deltas,
+ svn_ra__replay_revstart_ev2_callback_t revstart_func,
+ svn_ra__replay_revfinish_ev2_callback_t revfinish_func,
+ void *replay_baton,
+ svn_ra__provide_base_cb_t provide_base_cb,
+ svn_ra__provide_props_cb_t provide_props_cb,
+ void *cb_baton,
+ apr_pool_t *scratch_pool)
+{
+ /* The basic strategy here is to wrap the callback start and finish
+ functions to appropriately return an Ev1 editor which is itself wrapped
+ from the Ev2 one the provided callbacks will give us. */
+
+ struct wrapped_replay_baton_t *wrb = apr_pcalloc(scratch_pool, sizeof(*wrb));
+
+ wrb->revstart_func = revstart_func;
+ wrb->revfinish_func = revfinish_func;
+ wrb->replay_baton = replay_baton;
+ wrb->session = session;
+
+ wrb->provide_base_cb = provide_base_cb;
+ wrb->provide_props_cb = provide_props_cb;
+ wrb->cb_baton = cb_baton;
+
+ return svn_error_trace(svn_ra_replay_range(session, start_revision,
+ end_revision, low_water_mark,
+ send_deltas,
+ revstart_func_wrapper,
+ revfinish_func_wrapper,
+ wrb, scratch_pool));
+}
diff --git a/subversion/libsvn_ra/ra_loader.c b/subversion/libsvn_ra/ra_loader.c
index b796a80..d9cb96b 100644
--- a/subversion/libsvn_ra/ra_loader.c
+++ b/subversion/libsvn_ra/ra_loader.c
@@ -33,6 +33,7 @@
#include <apr_hash.h>
#include <apr_uri.h>
+#include "svn_hash.h"
#include "svn_version.h"
#include "svn_types.h"
#include "svn_error.h"
@@ -43,27 +44,17 @@
#include "svn_xml.h"
#include "svn_path.h"
#include "svn_dso.h"
+#include "svn_props.h"
+#include "svn_sorts.h"
+
#include "svn_config.h"
#include "ra_loader.h"
+#include "deprecated.h"
#include "private/svn_ra_private.h"
#include "svn_private_config.h"
-/* ### This file maps URL schemes to particular RA libraries.
- ### Currently, the only pair of RA libraries which support the same
- ### protocols are neon and serf. svn_ra_open3 makes the assumption
- ### that this is the case; that their 'schemes' fields are both
- ### dav_schemes; and that "neon" is listed first.
-
- ### Users can choose which dav library to use with the http-library
- ### preference in .subversion/servers; however, it is ignored by
- ### any code which uses the pre-1.2 API svn_ra_get_ra_library
- ### instead of svn_ra_open. */
-
-#if defined(SVN_HAVE_NEON) && defined(SVN_HAVE_SERF)
-#define CHOOSABLE_DAV_MODULE
-#endif
/* These are the URI schemes that the respective libraries *may* support.
@@ -85,20 +76,11 @@ static const struct ra_lib_defn {
svn_ra_init_func_t compat_initfunc;
} ra_libraries[] = {
{
- "neon",
- dav_schemes,
-#ifdef SVN_LIBSVN_CLIENT_LINKS_RA_NEON
- svn_ra_neon__init,
- svn_ra_dav_init
-#endif
- },
-
- {
"svn",
svn_schemes,
#ifdef SVN_LIBSVN_CLIENT_LINKS_RA_SVN
svn_ra_svn__init,
- svn_ra_svn_init
+ svn_ra_svn__deprecated_init
#endif
},
@@ -107,7 +89,7 @@ static const struct ra_lib_defn {
local_schemes,
#ifdef SVN_LIBSVN_CLIENT_LINKS_RA_LOCAL
svn_ra_local__init,
- svn_ra_local_init
+ svn_ra_local__deprecated_init
#endif
},
@@ -116,7 +98,7 @@ static const struct ra_lib_defn {
dav_schemes,
#ifdef SVN_LIBSVN_CLIENT_LINKS_RA_SERF
svn_ra_serf__init,
- svn_ra_serf_init
+ svn_ra_serf__deprecated_init
#endif
},
@@ -159,8 +141,8 @@ load_ra_module(svn_ra__init_func_t *func,
const char *compat_funcname;
apr_status_t status;
- libname = apr_psprintf(pool, "libsvn_ra_%s-%d.so.0",
- ra_name, SVN_VER_MAJOR);
+ libname = apr_psprintf(pool, "libsvn_ra_%s-%d.so.%d",
+ ra_name, SVN_VER_MAJOR, SVN_SOVERSION);
funcname = apr_psprintf(pool, "svn_ra_%s__init", ra_name);
compat_funcname = apr_psprintf(pool, "svn_ra_%s_init", ra_name);
@@ -201,14 +183,13 @@ load_ra_module(svn_ra__init_func_t *func,
return SVN_NO_ERROR;
}
-/* If DEFN may support URL, return the scheme. Else, return NULL. */
+/* If SCHEMES contains URL, return the scheme. Else, return NULL. */
static const char *
-has_scheme_of(const struct ra_lib_defn *defn, const char *url)
+has_scheme_of(const char * const *schemes, const char *url)
{
- const char * const *schemes;
apr_size_t len;
- for (schemes = defn->schemes; *schemes != NULL; ++schemes)
+ for ( ; *schemes != NULL; ++schemes)
{
const char *scheme = *schemes;
len = strlen(scheme);
@@ -339,8 +320,7 @@ svn_error_t *svn_ra_open4(svn_ra_session_t **session_p,
if (config)
{
/* Grab the 'servers' config. */
- servers = apr_hash_get(config, SVN_CONFIG_CATEGORY_SERVERS,
- APR_HASH_KEY_STRING);
+ servers = svn_hash_gets(config, SVN_CONFIG_CATEGORY_SERVERS);
if (servers)
{
/* First, look in the global section. */
@@ -414,8 +394,7 @@ svn_error_t *svn_ra_open4(svn_ra_session_t **session_p,
SVN_CONFIG_OPTION_HTTP_LIBRARY,
DEFAULT_HTTP_LIBRARY);
- if (strcmp(http_library, "neon") != 0 &&
- strcmp(http_library, "serf") != 0)
+ if (strcmp(http_library, "serf") != 0)
return svn_error_createf(SVN_ERR_BAD_CONFIG_VALUE, NULL,
_("Invalid config: unknown HTTP library "
"'%s'"),
@@ -454,7 +433,7 @@ svn_error_t *svn_ra_open4(svn_ra_session_t **session_p,
{
const char *scheme;
- if ((scheme = has_scheme_of(defn, repos_URL)))
+ if ((scheme = has_scheme_of(defn->schemes, repos_URL)))
{
svn_ra__init_func_t initfunc = defn->initfunc;
@@ -475,6 +454,11 @@ svn_error_t *svn_ra_open4(svn_ra_session_t **session_p,
SVN_ERR(check_ra_version(vtable->get_version(), scheme));
+ if (! has_scheme_of(vtable->get_schemes(sesspool), repos_URL))
+ /* Library doesn't support the scheme at runtime. */
+ continue;
+
+
break;
}
}
@@ -486,6 +470,8 @@ svn_error_t *svn_ra_open4(svn_ra_session_t **session_p,
/* Create the session object. */
session = apr_pcalloc(sesspool, sizeof(*session));
+ session->cancel_func = callbacks->cancel_func;
+ session->cancel_baton = callback_baton;
session->vtable = vtable;
session->pool = sesspool;
@@ -570,19 +556,13 @@ svn_error_t *svn_ra_get_path_relative_to_session(svn_ra_session_t *session,
apr_pool_t *pool)
{
const char *sess_url;
+
SVN_ERR(session->vtable->get_session_url(session, &sess_url, pool));
- if (strcmp(sess_url, url) == 0)
- {
- *rel_path = "";
- }
- else
- {
- *rel_path = svn_uri__is_child(sess_url, url, pool);
- if (! *rel_path)
- return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
- _("'%s' isn't a child of session URL '%s'"),
- url, sess_url);
- }
+ *rel_path = svn_uri_skip_ancestor(sess_url, url, pool);
+ if (! *rel_path)
+ return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
+ _("'%s' isn't a child of session URL '%s'"),
+ url, sess_url);
return SVN_NO_ERROR;
}
@@ -592,21 +572,14 @@ svn_error_t *svn_ra_get_path_relative_to_root(svn_ra_session_t *session,
apr_pool_t *pool)
{
const char *root_url;
- SVN_ERR(session->vtable->get_repos_root(session, &root_url, pool));
- if (strcmp(root_url, url) == 0)
- {
- *rel_path = "";
- }
- else
- {
- *rel_path = svn_uri__is_child(root_url, url, pool);
- if (! *rel_path)
- return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
- _("'%s' isn't a child of repository root "
- "URL '%s'"),
- url, root_url);
- }
+ SVN_ERR(session->vtable->get_repos_root(session, &root_url, pool));
+ *rel_path = svn_uri_skip_ancestor(root_url, url, pool);
+ if (! *rel_path)
+ return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
+ _("'%s' isn't a child of repository root "
+ "URL '%s'"),
+ url, root_url);
return SVN_NO_ERROR;
}
@@ -699,30 +672,56 @@ commit_callback_wrapper(const svn_commit_info_t *commit_info,
return ccwb->original_callback(ci, ccwb->original_baton, pool);
}
+
+/* Some RA layers do not correctly fill in REPOS_ROOT in commit_info, or
+ they are third-party layers conforming to an older commit_info structure.
+ Interpose a utility function to ensure the field is valid. */
+static void
+remap_commit_callback(svn_commit_callback2_t *callback,
+ void **callback_baton,
+ svn_ra_session_t *session,
+ svn_commit_callback2_t original_callback,
+ void *original_baton,
+ apr_pool_t *result_pool)
+{
+ if (original_callback == NULL)
+ {
+ *callback = NULL;
+ *callback_baton = NULL;
+ }
+ else
+ {
+ /* Allocate this in RESULT_POOL, since the callback will be called
+ long after this function has returned. */
+ struct ccw_baton *ccwb = apr_palloc(result_pool, sizeof(*ccwb));
+
+ ccwb->session = session;
+ ccwb->original_callback = original_callback;
+ ccwb->original_baton = original_baton;
+
+ *callback = commit_callback_wrapper;
+ *callback_baton = ccwb;
+ }
+}
+
+
svn_error_t *svn_ra_get_commit_editor3(svn_ra_session_t *session,
const svn_delta_editor_t **editor,
void **edit_baton,
apr_hash_t *revprop_table,
- svn_commit_callback2_t callback,
- void *callback_baton,
+ svn_commit_callback2_t commit_callback,
+ void *commit_baton,
apr_hash_t *lock_tokens,
svn_boolean_t keep_locks,
apr_pool_t *pool)
{
- /* Allocate this in a pool, since the callback will be called long after
- this function as returned. */
- struct ccw_baton *ccwb = apr_palloc(pool, sizeof(*ccwb));
-
- ccwb->original_callback = callback;
- ccwb->original_baton = callback_baton;
- ccwb->session = session;
+ remap_commit_callback(&commit_callback, &commit_baton,
+ session, commit_callback, commit_baton,
+ pool);
return session->vtable->get_commit_editor(session, editor, edit_baton,
revprop_table,
- callback
- ? commit_callback_wrapper
- : NULL,
- callback ? ccwb : NULL,
+ commit_callback, commit_baton,
lock_tokens, keep_locks, pool);
}
@@ -734,24 +733,11 @@ svn_error_t *svn_ra_get_file(svn_ra_session_t *session,
apr_hash_t **props,
apr_pool_t *pool)
{
- SVN_ERR_ASSERT(*path != '/');
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(path));
return session->vtable->get_file(session, path, revision, stream,
fetched_rev, props, pool);
}
-svn_error_t *svn_ra_get_dir(svn_ra_session_t *session,
- const char *path,
- svn_revnum_t revision,
- apr_hash_t **dirents,
- svn_revnum_t *fetched_rev,
- apr_hash_t **props,
- apr_pool_t *pool)
-{
- SVN_ERR_ASSERT(*path != '/');
- return session->vtable->get_dir(session, dirents, fetched_rev, props,
- path, revision, SVN_DIRENT_ALL, pool);
-}
-
svn_error_t *svn_ra_get_dir2(svn_ra_session_t *session,
apr_hash_t **dirents,
svn_revnum_t *fetched_rev,
@@ -761,7 +747,7 @@ svn_error_t *svn_ra_get_dir2(svn_ra_session_t *session,
apr_uint32_t dirent_fields,
apr_pool_t *pool)
{
- SVN_ERR_ASSERT(*path != '/');
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(path));
return session->vtable->get_dir(session, dirents, fetched_rev, props,
path, revision, dirent_fields, pool);
}
@@ -781,7 +767,7 @@ svn_error_t *svn_ra_get_mergeinfo(svn_ra_session_t *session,
for (i = 0; i < paths->nelts; i++)
{
const char *path = APR_ARRAY_IDX(paths, i, const char *);
- SVN_ERR_ASSERT(*path != '/');
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(path));
}
/* Check server Merge Tracking capability. */
@@ -797,16 +783,19 @@ svn_error_t *svn_ra_get_mergeinfo(svn_ra_session_t *session,
include_descendants, pool);
}
-svn_error_t *svn_ra_do_update2(svn_ra_session_t *session,
- const svn_ra_reporter3_t **reporter,
- void **report_baton,
- svn_revnum_t revision_to_update_to,
- const char *update_target,
- svn_depth_t depth,
- svn_boolean_t send_copyfrom_args,
- const svn_delta_editor_t *update_editor,
- void *update_baton,
- apr_pool_t *pool)
+svn_error_t *
+svn_ra_do_update3(svn_ra_session_t *session,
+ const svn_ra_reporter3_t **reporter,
+ void **report_baton,
+ svn_revnum_t revision_to_update_to,
+ const char *update_target,
+ svn_depth_t depth,
+ svn_boolean_t send_copyfrom_args,
+ svn_boolean_t ignore_ancestry,
+ const svn_delta_editor_t *update_editor,
+ void *update_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
SVN_ERR_ASSERT(svn_path_is_empty(update_target)
|| svn_path_is_single_path_component(update_target));
@@ -814,28 +803,37 @@ svn_error_t *svn_ra_do_update2(svn_ra_session_t *session,
reporter, report_baton,
revision_to_update_to, update_target,
depth, send_copyfrom_args,
+ ignore_ancestry,
update_editor, update_baton,
- pool);
+ result_pool, scratch_pool);
}
-svn_error_t *svn_ra_do_switch2(svn_ra_session_t *session,
- const svn_ra_reporter3_t **reporter,
- void **report_baton,
- svn_revnum_t revision_to_switch_to,
- const char *switch_target,
- svn_depth_t depth,
- const char *switch_url,
- const svn_delta_editor_t *switch_editor,
- void *switch_baton,
- apr_pool_t *pool)
+svn_error_t *
+svn_ra_do_switch3(svn_ra_session_t *session,
+ const svn_ra_reporter3_t **reporter,
+ void **report_baton,
+ svn_revnum_t revision_to_switch_to,
+ const char *switch_target,
+ svn_depth_t depth,
+ const char *switch_url,
+ svn_boolean_t send_copyfrom_args,
+ svn_boolean_t ignore_ancestry,
+ const svn_delta_editor_t *switch_editor,
+ void *switch_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
SVN_ERR_ASSERT(svn_path_is_empty(switch_target)
|| svn_path_is_single_path_component(switch_target));
return session->vtable->do_switch(session,
reporter, report_baton,
revision_to_switch_to, switch_target,
- depth, switch_url, switch_editor,
- switch_baton, pool);
+ depth, switch_url,
+ send_copyfrom_args,
+ ignore_ancestry,
+ switch_editor,
+ switch_baton,
+ result_pool, scratch_pool);
}
svn_error_t *svn_ra_do_status2(svn_ra_session_t *session,
@@ -869,6 +867,8 @@ svn_error_t *svn_ra_do_diff3(svn_ra_session_t *session,
void *diff_baton,
apr_pool_t *pool)
{
+ SVN_ERR_ASSERT(svn_path_is_empty(diff_target)
+ || svn_path_is_single_path_component(diff_target));
return session->vtable->do_diff(session,
reporter, report_baton,
revision, diff_target,
@@ -896,7 +896,7 @@ svn_error_t *svn_ra_get_log2(svn_ra_session_t *session,
for (i = 0; i < paths->nelts; i++)
{
const char *path = APR_ARRAY_IDX(paths, i, const char *);
- SVN_ERR_ASSERT(*path != '/');
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(path));
}
}
@@ -915,7 +915,7 @@ svn_error_t *svn_ra_check_path(svn_ra_session_t *session,
svn_node_kind_t *kind,
apr_pool_t *pool)
{
- SVN_ERR_ASSERT(*path != '/');
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(path));
return session->vtable->check_path(session, path, revision, kind, pool);
}
@@ -925,7 +925,7 @@ svn_error_t *svn_ra_stat(svn_ra_session_t *session,
svn_dirent_t **dirent,
apr_pool_t *pool)
{
- SVN_ERR_ASSERT(*path != '/');
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(path));
return session->vtable->stat(session, path, revision, dirent, pool);
}
@@ -970,7 +970,7 @@ svn_error_t *svn_ra_get_locations(svn_ra_session_t *session,
{
svn_error_t *err;
- SVN_ERR_ASSERT(*path != '/');
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(path));
err = session->vtable->get_locations(session, locations, path,
peg_revision, location_revisions, pool);
if (err && (err->apr_err == SVN_ERR_RA_NOT_IMPLEMENTED))
@@ -997,7 +997,7 @@ svn_ra_get_location_segments(svn_ra_session_t *session,
{
svn_error_t *err;
- SVN_ERR_ASSERT(*path != '/');
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(path));
err = session->vtable->get_location_segments(session, path, peg_revision,
start_rev, end_rev,
receiver, receiver_baton, pool);
@@ -1025,11 +1025,18 @@ svn_error_t *svn_ra_get_file_revs2(svn_ra_session_t *session,
{
svn_error_t *err;
- SVN_ERR_ASSERT(*path != '/');
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(path));
if (include_merged_revisions)
SVN_ERR(svn_ra__assert_mergeinfo_capable_server(session, NULL, pool));
+ if (start > end)
+ SVN_ERR(
+ svn_ra__assert_capable_server(session,
+ SVN_RA_CAPABILITY_GET_FILE_REVS_REVERSE,
+ NULL,
+ pool));
+
err = session->vtable->get_file_revs(session, path, start, end,
include_merged_revisions,
handler, handler_baton, pool);
@@ -1058,7 +1065,7 @@ svn_error_t *svn_ra_lock(svn_ra_session_t *session,
{
const char *path = svn__apr_hash_index_key(hi);
- SVN_ERR_ASSERT(*path != '/');
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(path));
}
if (comment && ! svn_xml_is_xml_safe(comment, strlen(comment)))
@@ -1083,7 +1090,7 @@ svn_error_t *svn_ra_unlock(svn_ra_session_t *session,
{
const char *path = svn__apr_hash_index_key(hi);
- SVN_ERR_ASSERT(*path != '/');
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(path));
}
return session->vtable->unlock(session, path_tokens, break_lock,
@@ -1095,7 +1102,7 @@ svn_error_t *svn_ra_get_lock(svn_ra_session_t *session,
const char *path,
apr_pool_t *pool)
{
- SVN_ERR_ASSERT(*path != '/');
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(path));
return session->vtable->get_lock(session, lock, path, pool);
}
@@ -1105,7 +1112,7 @@ svn_error_t *svn_ra_get_locks2(svn_ra_session_t *session,
svn_depth_t depth,
apr_pool_t *pool)
{
- SVN_ERR_ASSERT(*path != '/');
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(path));
SVN_ERR_ASSERT((depth == svn_depth_empty) ||
(depth == svn_depth_files) ||
(depth == svn_depth_immediates) ||
@@ -1134,6 +1141,58 @@ svn_error_t *svn_ra_replay(svn_ra_session_t *session,
}
svn_error_t *
+svn_ra__replay_ev2(svn_ra_session_t *session,
+ svn_revnum_t revision,
+ svn_revnum_t low_water_mark,
+ svn_boolean_t send_deltas,
+ svn_editor_t *editor,
+ apr_pool_t *scratch_pool)
+{
+ SVN__NOT_IMPLEMENTED();
+}
+
+static svn_error_t *
+replay_range_from_replays(svn_ra_session_t *session,
+ svn_revnum_t start_revision,
+ svn_revnum_t end_revision,
+ svn_revnum_t low_water_mark,
+ svn_boolean_t text_deltas,
+ svn_ra_replay_revstart_callback_t revstart_func,
+ svn_ra_replay_revfinish_callback_t revfinish_func,
+ void *replay_baton,
+ apr_pool_t *scratch_pool)
+{
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ svn_revnum_t rev;
+
+ for (rev = start_revision ; rev <= end_revision ; rev++)
+ {
+ const svn_delta_editor_t *editor;
+ void *edit_baton;
+ apr_hash_t *rev_props;
+
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(svn_ra_rev_proplist(session, rev, &rev_props, iterpool));
+
+ SVN_ERR(revstart_func(rev, replay_baton,
+ &editor, &edit_baton,
+ rev_props,
+ iterpool));
+ SVN_ERR(svn_ra_replay(session, rev, low_water_mark,
+ text_deltas, editor, edit_baton,
+ iterpool));
+ SVN_ERR(revfinish_func(rev, replay_baton,
+ editor, edit_baton,
+ rev_props,
+ iterpool));
+ }
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
svn_ra_replay_range(svn_ra_session_t *session,
svn_revnum_t start_revision,
svn_revnum_t end_revision,
@@ -1150,40 +1209,60 @@ svn_ra_replay_range(svn_ra_session_t *session,
revstart_func, revfinish_func,
replay_baton, pool);
- if (err && (err->apr_err == SVN_ERR_RA_NOT_IMPLEMENTED))
- {
- apr_pool_t *subpool = svn_pool_create(pool);
- svn_revnum_t rev;
-
- svn_error_clear(err);
- err = SVN_NO_ERROR;
+ if (!err || (err && (err->apr_err != SVN_ERR_RA_NOT_IMPLEMENTED)))
+ return svn_error_trace(err);
+
+ svn_error_clear(err);
+ return svn_error_trace(replay_range_from_replays(session, start_revision,
+ end_revision,
+ low_water_mark,
+ text_deltas,
+ revstart_func,
+ revfinish_func,
+ replay_baton, pool));
+}
- for (rev = start_revision ; rev <= end_revision ; rev++)
- {
- const svn_delta_editor_t *editor;
- void *edit_baton;
- apr_hash_t *rev_props;
-
- svn_pool_clear(subpool);
-
- SVN_ERR(svn_ra_rev_proplist(session, rev, &rev_props, subpool));
-
- SVN_ERR(revstart_func(rev, replay_baton,
- &editor, &edit_baton,
- rev_props,
- subpool));
- SVN_ERR(svn_ra_replay(session, rev, low_water_mark,
- text_deltas, editor, edit_baton,
- subpool));
- SVN_ERR(revfinish_func(rev, replay_baton,
- editor, edit_baton,
- rev_props,
- subpool));
- }
- svn_pool_destroy(subpool);
+svn_error_t *
+svn_ra__replay_range_ev2(svn_ra_session_t *session,
+ svn_revnum_t start_revision,
+ svn_revnum_t end_revision,
+ svn_revnum_t low_water_mark,
+ svn_boolean_t send_deltas,
+ svn_ra__replay_revstart_ev2_callback_t revstart_func,
+ svn_ra__replay_revfinish_ev2_callback_t revfinish_func,
+ void *replay_baton,
+ svn_ra__provide_base_cb_t provide_base_cb,
+ svn_ra__provide_props_cb_t provide_props_cb,
+ svn_ra__get_copysrc_kind_cb_t get_copysrc_kind_cb,
+ void *cb_baton,
+ apr_pool_t *scratch_pool)
+{
+ if (session->vtable->replay_range_ev2 == NULL)
+ {
+ /* The specific RA layer does not have an implementation. Use our
+ default shim over the normal replay editor. */
+
+ /* This will call the Ev1 replay range handler with modified
+ callbacks. */
+ return svn_error_trace(svn_ra__use_replay_range_shim(
+ session,
+ start_revision,
+ end_revision,
+ low_water_mark,
+ send_deltas,
+ revstart_func,
+ revfinish_func,
+ replay_baton,
+ provide_base_cb,
+ provide_props_cb,
+ cb_baton,
+ scratch_pool));
}
- return err;
+ return svn_error_trace(session->vtable->replay_range_ev2(
+ session, start_revision, end_revision,
+ low_water_mark, send_deltas, revstart_func,
+ revfinish_func, replay_baton, scratch_pool));
}
svn_error_t *svn_ra_has_capability(svn_ra_session_t *session,
@@ -1205,7 +1284,7 @@ svn_ra_get_deleted_rev(svn_ra_session_t *session,
svn_error_t *err;
/* Path must be relative. */
- SVN_ERR_ASSERT(*path != '/');
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(path));
if (!SVN_IS_VALID_REVNUM(peg_revision))
return svn_error_createf(SVN_ERR_CLIENT_BAD_REVISION, NULL,
@@ -1221,8 +1300,7 @@ svn_ra_get_deleted_rev(svn_ra_session_t *session,
end_revision,
revision_deleted,
pool);
- if (err && (err->apr_err == SVN_ERR_UNSUPPORTED_FEATURE /* serf */
- || err->apr_err == SVN_ERR_RA_NOT_IMPLEMENTED)) /* neon */
+ if (err && (err->apr_err == SVN_ERR_UNSUPPORTED_FEATURE))
{
svn_error_clear(err);
@@ -1234,6 +1312,96 @@ svn_ra_get_deleted_rev(svn_ra_session_t *session,
return err;
}
+svn_error_t *
+svn_ra_get_inherited_props(svn_ra_session_t *session,
+ apr_array_header_t **iprops,
+ const char *path,
+ svn_revnum_t revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_boolean_t iprop_capable;
+
+ /* Path must be relative. */
+ SVN_ERR_ASSERT(svn_relpath_is_canonical(path));
+
+ SVN_ERR(svn_ra_has_capability(session, &iprop_capable,
+ SVN_RA_CAPABILITY_INHERITED_PROPS,
+ scratch_pool));
+
+ if (iprop_capable)
+ {
+ SVN_ERR(session->vtable->get_inherited_props(session, iprops, path,
+ revision, result_pool,
+ scratch_pool));
+ }
+ else
+ {
+ /* Fallback for legacy servers. */
+ SVN_ERR(svn_ra__get_inherited_props_walk(session, path, revision, iprops,
+ result_pool, scratch_pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra__get_commit_ev2(svn_editor_t **editor,
+ svn_ra_session_t *session,
+ apr_hash_t *revprop_table,
+ svn_commit_callback2_t commit_callback,
+ void *commit_baton,
+ apr_hash_t *lock_tokens,
+ svn_boolean_t keep_locks,
+ svn_ra__provide_base_cb_t provide_base_cb,
+ svn_ra__provide_props_cb_t provide_props_cb,
+ svn_ra__get_copysrc_kind_cb_t get_copysrc_kind_cb,
+ void *cb_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ if (session->vtable->get_commit_ev2 == NULL)
+ {
+ /* The specific RA layer does not have an implementation. Use our
+ default shim over the normal commit editor. */
+
+ /* Remap for RA layers exposing Ev1. */
+ remap_commit_callback(&commit_callback, &commit_baton,
+ session, commit_callback, commit_baton,
+ result_pool);
+
+ return svn_error_trace(svn_ra__use_commit_shim(
+ editor,
+ session,
+ revprop_table,
+ commit_callback, commit_baton,
+ lock_tokens,
+ keep_locks,
+ provide_base_cb,
+ provide_props_cb,
+ get_copysrc_kind_cb,
+ cb_baton,
+ session->cancel_func, session->cancel_baton,
+ result_pool, scratch_pool));
+ }
+
+ /* Note: no need to remap the callback for Ev2. RA layers providing this
+ vtable entry should completely fill in commit_info. */
+
+ return svn_error_trace(session->vtable->get_commit_ev2(
+ editor,
+ session,
+ revprop_table,
+ commit_callback, commit_baton,
+ lock_tokens,
+ keep_locks,
+ provide_base_cb,
+ provide_props_cb,
+ get_copysrc_kind_cb,
+ cb_baton,
+ session->cancel_func, session->cancel_baton,
+ result_pool, scratch_pool));
+}
svn_error_t *
@@ -1268,7 +1436,7 @@ svn_ra_print_modules(svn_stringbuf_t *output,
built with SASL. */
line = apr_psprintf(iterpool, "* ra_%s : %s\n",
defn->ra_name,
- vtable->get_description());
+ vtable->get_description(iterpool));
svn_stringbuf_appendcstr(output, line);
for (schemes = vtable->get_schemes(iterpool); *schemes != NULL;
@@ -1292,11 +1460,20 @@ svn_ra_print_ra_libraries(svn_stringbuf_t **descriptions,
void *ra_baton,
apr_pool_t *pool)
{
- *descriptions = svn_stringbuf_create("", pool);
+ *descriptions = svn_stringbuf_create_empty(pool);
return svn_ra_print_modules(*descriptions, pool);
}
+svn_error_t *
+svn_ra__register_editor_shim_callbacks(svn_ra_session_t *session,
+ svn_delta_shim_callbacks_t *callbacks)
+{
+ SVN_ERR(session->vtable->register_editor_shim_callbacks(session, callbacks));
+ return SVN_NO_ERROR;
+}
+
+
/* Return the library version number. */
const svn_version_t *
svn_ra_version(void)
@@ -1328,7 +1505,7 @@ svn_ra_get_ra_library(svn_ra_plugin_t **library,
for (defn = ra_libraries; defn->ra_name != NULL; ++defn)
{
const char *scheme;
- if ((scheme = has_scheme_of(defn, url)))
+ if ((scheme = has_scheme_of(defn->schemes, url)))
{
svn_ra_init_func_t compat_initfunc = defn->compat_initfunc;
@@ -1344,7 +1521,7 @@ svn_ra_get_ra_library(svn_ra_plugin_t **library,
SVN_ERR(compat_initfunc(SVN_RA_ABI_VERSION, load_pool, ht));
- *library = apr_hash_get(ht, scheme, APR_HASH_KEY_STRING);
+ *library = svn_hash_gets(ht, scheme);
/* The library may support just a subset of the schemes listed,
so we have to check here too. */
diff --git a/subversion/libsvn_ra/ra_loader.h b/subversion/libsvn_ra/ra_loader.h
index ddb2581..227730a 100644
--- a/subversion/libsvn_ra/ra_loader.h
+++ b/subversion/libsvn_ra/ra_loader.h
@@ -32,6 +32,8 @@
#include "svn_ra.h"
+#include "private/svn_ra_private.h"
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -43,7 +45,7 @@ typedef struct svn_ra__vtable_t {
/* Return a short description of the RA implementation, as a localized
* string. */
- const char *(*get_description)(void);
+ const char *(*get_description)(apr_pool_t *pool);
/* Return a list of actual URI schemes supported by this implementation.
* The returned array is NULL-terminated. */
@@ -56,7 +58,7 @@ typedef struct svn_ra__vtable_t {
time this is called. SESSION->priv may be set by this function. */
svn_error_t *(*open_session)(svn_ra_session_t *session,
const char **corrected_url,
- const char *repos_URL,
+ const char *session_URL,
const svn_ra_callbacks2_t *callbacks,
void *callback_baton,
apr_hash_t *config,
@@ -133,7 +135,7 @@ typedef struct svn_ra__vtable_t {
svn_mergeinfo_inheritance_t inherit,
svn_boolean_t include_merged_revisions,
apr_pool_t *pool);
- /* See svn_ra_do_update2(). */
+ /* See svn_ra_do_update3(). */
svn_error_t *(*do_update)(svn_ra_session_t *session,
const svn_ra_reporter3_t **reporter,
void **report_baton,
@@ -141,10 +143,12 @@ typedef struct svn_ra__vtable_t {
const char *update_target,
svn_depth_t depth,
svn_boolean_t send_copyfrom_args,
+ svn_boolean_t ignore_ancestry,
const svn_delta_editor_t *update_editor,
void *update_baton,
- apr_pool_t *pool);
- /* See svn_ra_do_switch2(). */
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+ /* See svn_ra_do_switch3(). */
svn_error_t *(*do_switch)(svn_ra_session_t *session,
const svn_ra_reporter3_t **reporter,
void **report_baton,
@@ -152,9 +156,12 @@ typedef struct svn_ra__vtable_t {
const char *switch_target,
svn_depth_t depth,
const char *switch_url,
+ svn_boolean_t send_copyfrom_args,
+ svn_boolean_t ignore_ancestry,
const svn_delta_editor_t *switch_editor,
void *switch_baton,
- apr_pool_t *pool);
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
/* See svn_ra_do_status2(). */
svn_error_t *(*do_status)(svn_ra_session_t *session,
const svn_ra_reporter3_t **reporter,
@@ -294,12 +301,56 @@ typedef struct svn_ra__vtable_t {
svn_revnum_t *revision_deleted,
apr_pool_t *pool);
+ /* See svn_ra__register_editor_shim_callbacks() */
+ svn_error_t *(*register_editor_shim_callbacks)(svn_ra_session_t *session,
+ svn_delta_shim_callbacks_t *callbacks);
+ /* See svn_ra_get_inherited_props(). */
+ svn_error_t *(*get_inherited_props)(svn_ra_session_t *session,
+ apr_array_header_t **iprops,
+ const char *path,
+ svn_revnum_t revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+ /* See svn_ra__get_commit_ev2() */
+ svn_error_t *(*get_commit_ev2)(
+ svn_editor_t **editor,
+ svn_ra_session_t *session,
+ apr_hash_t *revprop_table,
+ svn_commit_callback2_t callback,
+ void *callback_baton,
+ apr_hash_t *lock_tokens,
+ svn_boolean_t keep_locks,
+ svn_ra__provide_base_cb_t provide_base_cb,
+ svn_ra__provide_props_cb_t provide_props_cb,
+ svn_ra__get_copysrc_kind_cb_t get_copysrc_kind_cb,
+ void *cb_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+ /* See svn_ra__replay_range_ev2() */
+ svn_error_t *(*replay_range_ev2)(
+ svn_ra_session_t *session,
+ svn_revnum_t start_revision,
+ svn_revnum_t end_revision,
+ svn_revnum_t low_water_mark,
+ svn_boolean_t send_deltas,
+ svn_ra__replay_revstart_ev2_callback_t revstart_func,
+ svn_ra__replay_revfinish_ev2_callback_t revfinish_func,
+ void *replay_baton,
+ apr_pool_t *scratch_pool);
+
} svn_ra__vtable_t;
/* The RA session object. */
struct svn_ra_session_t {
const svn_ra__vtable_t *vtable;
+ /* Cancellation handlers consumers may want to use. */
+ svn_cancel_func_t cancel_func;
+ void *cancel_baton;
+
/* Pool used to manage this session. */
apr_pool_t *pool;
@@ -329,9 +380,6 @@ svn_error_t *svn_ra_local__init(const svn_version_t *loader_version,
svn_error_t *svn_ra_svn__init(const svn_version_t *loader_version,
const svn_ra__vtable_t **vtable,
apr_pool_t *pool);
-svn_error_t *svn_ra_neon__init(const svn_version_t *loader_version,
- const svn_ra__vtable_t **vtable,
- apr_pool_t *pool);
svn_error_t *svn_ra_serf__init(const svn_version_t *loader_version,
const svn_ra__vtable_t **vtable,
apr_pool_t *pool);
@@ -451,6 +499,62 @@ svn_ra__get_deleted_rev_from_log(svn_ra_session_t *session,
svn_revnum_t *revision_deleted,
apr_pool_t *pool);
+
+/**
+ * Fallback logic for svn_ra_get_inherited_props() when that API
+ * need to find PATH's inherited properties on a legacy server that
+ * doesn't have the SVN_RA_CAPABILITY_INHERITED_PROPS capability.
+ *
+ * All arguments are as per svn_ra_get_inherited_props().
+ */
+svn_error_t *
+svn_ra__get_inherited_props_walk(svn_ra_session_t *session,
+ const char *path,
+ svn_revnum_t revision,
+ apr_array_header_t **inherited_props,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Utility function to provide a shim between a returned Ev2 and an RA
+ provider's Ev1-based commit editor.
+
+ See svn_ra__get_commit_ev2() for parameter semantics. */
+svn_error_t *
+svn_ra__use_commit_shim(svn_editor_t **editor,
+ svn_ra_session_t *session,
+ apr_hash_t *revprop_table,
+ svn_commit_callback2_t callback,
+ void *callback_baton,
+ apr_hash_t *lock_tokens,
+ svn_boolean_t keep_locks,
+ svn_ra__provide_base_cb_t provide_base_cb,
+ svn_ra__provide_props_cb_t provide_props_cb,
+ svn_ra__get_copysrc_kind_cb_t get_copysrc_kind_cb,
+ void *cb_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Utility function to provide a shim between a returned Ev2 and an RA
+ provider's Ev1-based commit editor.
+
+ See svn_ra__replay_range_ev2() for parameter semantics. */
+svn_error_t *
+svn_ra__use_replay_range_shim(svn_ra_session_t *session,
+ svn_revnum_t start_revision,
+ svn_revnum_t end_revision,
+ svn_revnum_t low_water_mark,
+ svn_boolean_t send_deltas,
+ svn_ra__replay_revstart_ev2_callback_t revstart_func,
+ svn_ra__replay_revfinish_ev2_callback_t revfinish_func,
+ void *replay_baton,
+ svn_ra__provide_base_cb_t provide_base_cb,
+ svn_ra__provide_props_cb_t provide_props_cb,
+ void *cb_baton,
+ apr_pool_t *scratch_pool);
+
+
#ifdef __cplusplus
}
#endif
diff --git a/subversion/libsvn_ra/util.c b/subversion/libsvn_ra/util.c
index 47e4865..d9a4520 100644
--- a/subversion/libsvn_ra/util.c
+++ b/subversion/libsvn_ra/util.c
@@ -38,6 +38,26 @@
#include "svn_private_config.h"
#include "private/svn_ra_private.h"
+static const char *
+get_path(const char *path_or_url,
+ svn_ra_session_t *ra_session,
+ apr_pool_t *pool)
+{
+ if (path_or_url == NULL)
+ {
+ svn_error_t *err = svn_ra_get_session_url(ra_session, &path_or_url,
+ pool);
+ if (err)
+ {
+ /* The SVN_ERR_UNSUPPORTED_FEATURE error in the caller is more
+ important, so dummy up the session's URL and chuck this error. */
+ svn_error_clear(err);
+ return _("<repository>");
+ }
+ }
+ return path_or_url;
+}
+
svn_error_t *
svn_ra__assert_mergeinfo_capable_server(svn_ra_session_t *ra_session,
const char *path_or_url,
@@ -48,18 +68,7 @@ svn_ra__assert_mergeinfo_capable_server(svn_ra_session_t *ra_session,
SVN_RA_CAPABILITY_MERGEINFO, pool));
if (! mergeinfo_capable)
{
- if (path_or_url == NULL)
- {
- svn_error_t *err = svn_ra_get_session_url(ra_session, &path_or_url,
- pool);
- if (err)
- {
- /* The SVN_ERR_UNSUPPORTED_FEATURE error is more important,
- so dummy up the session's URL and chuck this error. */
- svn_error_clear(err);
- path_or_url = "<repository>";
- }
- }
+ path_or_url = get_path(path_or_url, ra_session, pool);
return svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
_("Retrieval of mergeinfo unsupported by '%s'"),
svn_path_is_url(path_or_url)
@@ -69,6 +78,35 @@ svn_ra__assert_mergeinfo_capable_server(svn_ra_session_t *ra_session,
return SVN_NO_ERROR;
}
+svn_error_t *
+svn_ra__assert_capable_server(svn_ra_session_t *ra_session,
+ const char *capability,
+ const char *path_or_url,
+ apr_pool_t *pool)
+{
+ if (!strcmp(capability, SVN_RA_CAPABILITY_MERGEINFO))
+ return svn_ra__assert_mergeinfo_capable_server(ra_session, path_or_url,
+ pool);
+
+ else
+ {
+ svn_boolean_t has;
+ SVN_ERR(svn_ra_has_capability(ra_session, &has, capability, pool));
+ if (! has)
+ {
+ path_or_url = get_path(path_or_url, ra_session, pool);
+ return svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
+ _("The '%s' feature is not supported by '%s'"),
+ capability,
+ svn_path_is_url(path_or_url)
+ ? path_or_url
+ : svn_dirent_local_style(path_or_url,
+ pool));
+ }
+ }
+ return SVN_NO_ERROR;
+}
+
/* Does ERR mean "the current value of the revprop isn't equal to
the *OLD_VALUE_P you gave me"?
*/
diff --git a/subversion/libsvn_ra/wrapper_template.h b/subversion/libsvn_ra/wrapper_template.h
index e5426dc..cee3fb3 100644
--- a/subversion/libsvn_ra/wrapper_template.h
+++ b/subversion/libsvn_ra/wrapper_template.h
@@ -291,8 +291,10 @@ static svn_error_t *compat_do_update(void *session_baton,
SVN_ERR(VTBL.do_update(session_baton, &reporter3, &baton3,
revision_to_update_to, update_target, depth,
- FALSE, /* no copyfrom args */
- editor, update_baton, pool));
+ FALSE /* send_copyfrom_args */,
+ FALSE /* ignore_ancestry */,
+ editor, update_baton,
+ pool, pool));
compat_wrap_reporter(reporter, report_baton, reporter3, baton3, pool);
return SVN_NO_ERROR;
@@ -315,7 +317,11 @@ static svn_error_t *compat_do_switch(void *session_baton,
SVN_ERR(VTBL.do_switch(session_baton, &reporter3, &baton3,
revision_to_switch_to, switch_target, depth,
- switch_url, editor, switch_baton, pool));
+ switch_url,
+ FALSE /* send_copyfrom_args */,
+ TRUE /* ignore_ancestry */,
+ editor, switch_baton,
+ pool /* result_pool */, pool /* scratch_pool */));
compat_wrap_reporter(reporter, report_baton, reporter3, baton3, pool);
diff --git a/subversion/libsvn_ra_local/ra_plugin.c b/subversion/libsvn_ra_local/ra_plugin.c
index 58892e9..4ccc86d 100644
--- a/subversion/libsvn_ra_local/ra_plugin.c
+++ b/subversion/libsvn_ra_local/ra_plugin.c
@@ -22,6 +22,7 @@
*/
#include "ra_local.h"
+#include "svn_hash.h"
#include "svn_ra.h"
#include "svn_fs.h"
#include "svn_delta.h"
@@ -40,6 +41,7 @@
#include "private/svn_repos_private.h"
#include "private/svn_fspath.h"
#include "private/svn_atomic.h"
+#include "private/svn_subr_private.h"
#define APR_WANT_STRFUNC
#include <apr_want.h>
@@ -70,14 +72,15 @@ cleanup_access(void *data)
}
-/* Fetch a username for use with SESS, and store it in SESS->username. */
+/* Fetch a username for use with SESSION, and store it in SESSION->username.
+ *
+ * Allocate the username in SESSION->pool. Use SCRATCH_POOL for temporary
+ * allocations. */
static svn_error_t *
get_username(svn_ra_session_t *session,
- apr_pool_t *pool)
+ apr_pool_t *scratch_pool)
{
svn_ra_local__session_baton_t *sess = session->priv;
- svn_auth_iterstate_t *iterstate;
- svn_fs_access_t *access_ctx;
/* If we've already found the username don't ask for it again. */
if (! sess->username)
@@ -88,11 +91,13 @@ get_username(svn_ra_session_t *session,
{
void *creds;
svn_auth_cred_username_t *username_creds;
+ svn_auth_iterstate_t *iterstate;
+
SVN_ERR(svn_auth_first_credentials(&creds, &iterstate,
SVN_AUTH_CRED_USERNAME,
sess->uuid, /* realmstring */
sess->callbacks->auth_baton,
- pool));
+ scratch_pool));
/* No point in calling next_creds(), since that assumes that the
first_creds() somehow failed to authenticate. But there's no
@@ -103,7 +108,8 @@ get_username(svn_ra_session_t *session,
{
sess->username = apr_pstrdup(session->pool,
username_creds->username);
- svn_error_clear(svn_auth_save_credentials(iterstate, pool));
+ svn_error_clear(svn_auth_save_credentials(iterstate,
+ scratch_pool));
}
else
sess->username = "";
@@ -118,6 +124,8 @@ get_username(svn_ra_session_t *session,
*/
if (*sess->username)
{
+ svn_fs_access_t *access_ctx;
+
SVN_ERR(svn_fs_create_access(&access_ctx, sess->username,
session->pool));
SVN_ERR(svn_fs_set_access(sess->fs, access_ctx));
@@ -141,8 +149,7 @@ cache_init(void *baton, apr_pool_t *pool)
const char *memory_cache_size_str;
if (config_hash)
- config = apr_hash_get(config_hash, SVN_CONFIG_CATEGORY_CONFIG,
- APR_HASH_KEY_STRING);
+ config = svn_hash_gets(config_hash, SVN_CONFIG_CATEGORY_CONFIG);
svn_config_get(config, &memory_cache_size_str, SVN_CONFIG_SECTION_MISCELLANY,
SVN_CONFIG_OPTION_MEMORY_CACHE_SIZE, NULL);
if (memory_cache_size_str)
@@ -153,7 +160,7 @@ cache_init(void *baton, apr_pool_t *pool)
SVN_ERR(svn_error_quick_wrap(svn_cstring_atoui64(&memory_cache_size,
memory_cache_size_str),
_("memory-cache-size invalid")));
- settings.cache_size = 1024 * 1024 * memory_cache_size;
+ settings.cache_size = 1024 * 1024 * memory_cache_size;
svn_cache_config_set(&settings);
}
@@ -220,21 +227,21 @@ reporter_link_path(void *reporter_baton,
apr_pool_t *pool)
{
reporter_baton_t *rbaton = reporter_baton;
- const char *fs_path = NULL;
const char *repos_url = rbaton->sess->repos_url;
+ const char *relpath = svn_uri_skip_ancestor(repos_url, url, pool);
+ const char *fs_path;
- if (!svn_uri__is_ancestor(repos_url, url))
+ if (!relpath)
return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
_("'%s'\n"
"is not the same repository as\n"
"'%s'"), url, rbaton->sess->repos_url);
- /* Skip the repos_url, but keep the last '/' to create an fspath */
- fs_path = svn_uri_skip_ancestor(repos_url, url, pool);
- if (fs_path[0] == '\0')
+ /* Convert the relpath to an fspath */
+ if (relpath[0] == '\0')
fs_path = "/";
else
- fs_path = apr_pstrcat(pool, "/", fs_path, (char *)NULL);
+ fs_path = apr_pstrcat(pool, "/", relpath, (char *)NULL);
return svn_repos_link_path3(rbaton->report_baton, path, fs_path, revision,
depth, start_empty, lock_token, pool);
@@ -269,6 +276,17 @@ static const svn_ra_reporter3_t ra_local_reporter =
};
+/* ...
+ *
+ * Wrap a cancellation editor using SESSION's cancellation function around
+ * the supplied EDITOR. ### Some callers (via svn_ra_do_update2() etc.)
+ * don't appear to know that we do this, and are supplying an editor that
+ * they have already wrapped with the same cancellation editor, so it ends
+ * up double-wrapped.
+ *
+ * Allocate @a *reporter and @a *report_baton in @a result_pool. Use
+ * @a scratch_pool for temporary allocations.
+ */
static svn_error_t *
make_reporter(svn_ra_session_t *session,
const svn_ra_reporter3_t **reporter,
@@ -282,7 +300,8 @@ make_reporter(svn_ra_session_t *session,
svn_boolean_t ignore_ancestry,
const svn_delta_editor_t *editor,
void *edit_baton,
- apr_pool_t *pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
svn_ra_local__session_baton_t *sess = session->priv;
void *rbaton;
@@ -290,14 +309,14 @@ make_reporter(svn_ra_session_t *session,
/* Get the HEAD revision if one is not supplied. */
if (! SVN_IS_VALID_REVNUM(revision))
- SVN_ERR(svn_fs_youngest_rev(&revision, sess->fs, pool));
+ SVN_ERR(svn_fs_youngest_rev(&revision, sess->fs, scratch_pool));
/* If OTHER_URL was provided, validate it and convert it into a
regular filesystem path. */
if (other_url)
{
const char *other_relpath
- = svn_uri_skip_ancestor(sess->repos_url, other_url, pool);
+ = svn_uri_skip_ancestor(sess->repos_url, other_url, scratch_pool);
/* Sanity check: the other_url better be in the same repository as
the original session url! */
@@ -308,13 +327,14 @@ make_reporter(svn_ra_session_t *session,
"is not the same repository as\n"
"'%s'"), other_url, sess->repos_url);
- other_fs_path = apr_pstrcat(pool, "/", other_relpath, (char *)NULL);
+ other_fs_path = apr_pstrcat(scratch_pool, "/", other_relpath,
+ (char *)NULL);
}
/* Pass back our reporter */
*reporter = &ra_local_reporter;
- SVN_ERR(get_username(session, pool));
+ SVN_ERR(get_username(session, scratch_pool));
if (sess->callbacks)
SVN_ERR(svn_delta_get_cancellation_editor(sess->callbacks->cancel_func,
@@ -323,10 +343,10 @@ make_reporter(svn_ra_session_t *session,
edit_baton,
&editor,
&edit_baton,
- pool));
+ result_pool));
/* Build a reporter baton. */
- SVN_ERR(svn_repos_begin_report2(&rbaton,
+ SVN_ERR(svn_repos_begin_report3(&rbaton,
revision,
sess->repos,
sess->fs_path->data,
@@ -340,11 +360,13 @@ make_reporter(svn_ra_session_t *session,
edit_baton,
NULL,
NULL,
- pool));
+ 1024 * 1024, /* process-local transfers
+ should be fast */
+ result_pool));
/* Wrap the report baton given us by the repos layer with our own
reporter baton. */
- *report_baton = make_reporter_baton(sess, rbaton, pool);
+ *report_baton = make_reporter_baton(sess, rbaton, result_pool);
return SVN_NO_ERROR;
}
@@ -358,11 +380,12 @@ struct deltify_etc_baton
{
svn_fs_t *fs; /* the fs to deltify in */
svn_repos_t *repos; /* repos for unlocking */
- const char *fs_path; /* fs-path part of split session URL */
+ const char *fspath_base; /* fs-path part of split session URL */
+
apr_hash_t *lock_tokens; /* tokens to unlock, if any */
- apr_pool_t *pool; /* pool for scratch work */
- svn_commit_callback2_t callback; /* the original callback */
- void *callback_baton; /* the original callback's baton */
+
+ svn_commit_callback2_t commit_cb; /* the original callback */
+ void *commit_baton; /* the original callback's baton */
};
/* This implements 'svn_commit_callback_t'. Its invokes the original
@@ -371,60 +394,107 @@ struct deltify_etc_baton
BATON is 'struct deltify_etc_baton *'. */
static svn_error_t *
deltify_etc(const svn_commit_info_t *commit_info,
- void *baton, apr_pool_t *pool)
+ void *baton,
+ apr_pool_t *scratch_pool)
{
- struct deltify_etc_baton *db = baton;
+ struct deltify_etc_baton *deb = baton;
svn_error_t *err1 = SVN_NO_ERROR;
svn_error_t *err2;
- apr_hash_index_t *hi;
- apr_pool_t *iterpool;
/* Invoke the original callback first, in case someone's waiting to
know the revision number so they can go off and annotate an
issue or something. */
- if (db->callback)
- err1 = db->callback(commit_info, db->callback_baton, pool);
+ if (deb->commit_cb)
+ err1 = deb->commit_cb(commit_info, deb->commit_baton, scratch_pool);
/* Maybe unlock the paths. */
- if (db->lock_tokens)
+ if (deb->lock_tokens)
{
- iterpool = svn_pool_create(db->pool);
- for (hi = apr_hash_first(db->pool, db->lock_tokens); hi;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ apr_hash_index_t *hi;
+
+ for (hi = apr_hash_first(scratch_pool, deb->lock_tokens); hi;
hi = apr_hash_next(hi))
{
- const void *rel_path;
- void *val;
- const char *abs_path, *token;
+ const void *relpath = svn__apr_hash_index_key(hi);
+ const char *token = svn__apr_hash_index_val(hi);
+ const char *fspath;
svn_pool_clear(iterpool);
- apr_hash_this(hi, &rel_path, NULL, &val);
- token = val;
- abs_path = svn_fspath__join(db->fs_path, rel_path, iterpool);
+
+ fspath = svn_fspath__join(deb->fspath_base, relpath, iterpool);
+
/* We may get errors here if the lock was broken or stolen
after the commit succeeded. This is fine and should be
ignored. */
- svn_error_clear(svn_repos_fs_unlock(db->repos, abs_path, token,
+ svn_error_clear(svn_repos_fs_unlock(deb->repos, fspath, token,
FALSE, iterpool));
}
+
svn_pool_destroy(iterpool);
}
/* But, deltification shouldn't be stopped just because someone's
random callback failed, so proceed unconditionally on to
deltification. */
- err2 = svn_fs_deltify_revision(db->fs, commit_info->revision, db->pool);
+ err2 = svn_fs_deltify_revision(deb->fs, commit_info->revision, scratch_pool);
+
+ return svn_error_compose_create(err1, err2);
+}
+
+
+/* If LOCK_TOKENS is not NULL, then copy all tokens into the access context
+ of FS. The tokens' paths will be prepended with FSPATH_BASE.
- /* It's more interesting if the original callback failed, so let
- that one dominate. */
- if (err1)
+ ACCESS_POOL must match (or exceed) the lifetime of the access context
+ that was associated with FS. Typically, this is the session pool.
+
+ Temporary allocations are made in SCRATCH_POOL. */
+static svn_error_t *
+apply_lock_tokens(svn_fs_t *fs,
+ const char *fspath_base,
+ apr_hash_t *lock_tokens,
+ apr_pool_t *access_pool,
+ apr_pool_t *scratch_pool)
+{
+ if (lock_tokens)
{
- svn_error_clear(err2);
- return err1;
+ svn_fs_access_t *access_ctx;
+
+ SVN_ERR(svn_fs_get_access(&access_ctx, fs));
+
+ /* If there is no access context, the filesystem will scream if a
+ lock is needed. */
+ if (access_ctx)
+ {
+ apr_hash_index_t *hi;
+
+ /* Note: we have no use for an iterpool here since the data
+ within the loop is copied into ACCESS_POOL. */
+
+ for (hi = apr_hash_first(scratch_pool, lock_tokens); hi;
+ hi = apr_hash_next(hi))
+ {
+ const void *relpath = svn__apr_hash_index_key(hi);
+ const char *token = svn__apr_hash_index_val(hi);
+ const char *fspath;
+
+ /* The path needs to live as long as ACCESS_CTX. */
+ fspath = svn_fspath__join(fspath_base, relpath, access_pool);
+
+ /* The token must live as long as ACCESS_CTX. */
+ token = apr_pstrdup(access_pool, token);
+
+ SVN_ERR(svn_fs_access_add_lock_token2(access_ctx, fspath,
+ token));
+ }
+ }
}
- return err2;
+ return SVN_NO_ERROR;
}
+
/*----------------------------------------------------------------*/
/*** The RA vtable routines ***/
@@ -433,7 +503,7 @@ deltify_etc(const svn_commit_info_t *commit_info,
N_("Module for accessing a repository on local disk.")
static const char *
-svn_ra_local__get_description(void)
+svn_ra_local__get_description(apr_pool_t *pool)
{
return _(RA_LOCAL_DESCRIPTION);
}
@@ -532,12 +602,10 @@ svn_ra_local__reparent(svn_ra_session_t *session,
apr_pool_t *pool)
{
svn_ra_local__session_baton_t *sess = session->priv;
- const char *relpath = "";
+ const char *relpath = svn_uri_skip_ancestor(sess->repos_url, url, pool);
/* If the new URL isn't the same as our repository root URL, then
let's ensure that it's some child of it. */
- if (strcmp(url, sess->repos_url) != 0)
- relpath = svn_uri__is_child(sess->repos_url, url, pool);
if (! relpath)
return svn_error_createf
(SVN_ERR_RA_ILLEGAL_URL, NULL,
@@ -672,58 +740,37 @@ svn_ra_local__get_commit_editor(svn_ra_session_t *session,
apr_pool_t *pool)
{
svn_ra_local__session_baton_t *sess = session->priv;
- struct deltify_etc_baton *db = apr_palloc(pool, sizeof(*db));
- apr_hash_index_t *hi;
- svn_fs_access_t *fs_access;
+ struct deltify_etc_baton *deb = apr_palloc(pool, sizeof(*deb));
- db->fs = sess->fs;
- db->repos = sess->repos;
- db->fs_path = sess->fs_path->data;
+ /* Prepare the baton for deltify_etc() */
+ deb->fs = sess->fs;
+ deb->repos = sess->repos;
+ deb->fspath_base = sess->fs_path->data;
if (! keep_locks)
- db->lock_tokens = lock_tokens;
+ deb->lock_tokens = lock_tokens;
else
- db->lock_tokens = NULL;
- db->pool = pool;
- db->callback = callback;
- db->callback_baton = callback_baton;
+ deb->lock_tokens = NULL;
+ deb->commit_cb = callback;
+ deb->commit_baton = callback_baton;
SVN_ERR(get_username(session, pool));
/* If there are lock tokens to add, do so. */
- if (lock_tokens)
- {
- SVN_ERR(svn_fs_get_access(&fs_access, sess->fs));
-
- /* If there is no access context, the filesystem will scream if a
- lock is needed. */
- if (fs_access)
- {
- for (hi = apr_hash_first(pool, lock_tokens); hi;
- hi = apr_hash_next(hi))
- {
- void *val;
- const char *abs_path, *token;
- const void *key;
-
- apr_hash_this(hi, &key, NULL, &val);
- abs_path = svn_fspath__join(sess->fs_path->data, key, pool);
- token = val;
- SVN_ERR(svn_fs_access_add_lock_token2(fs_access,
- abs_path, token));
- }
- }
- }
+ SVN_ERR(apply_lock_tokens(sess->fs, sess->fs_path->data, lock_tokens,
+ session->pool, pool));
/* Copy the revprops table so we can add the username. */
revprop_table = apr_hash_copy(pool, revprop_table);
- apr_hash_set(revprop_table, SVN_PROP_REVISION_AUTHOR, APR_HASH_KEY_STRING,
- svn_string_create(sess->username, pool));
+ svn_hash_sets(revprop_table, SVN_PROP_REVISION_AUTHOR,
+ svn_string_create(sess->username, pool));
+ svn_hash_sets(revprop_table, SVN_PROP_TXN_CLIENT_COMPAT_VERSION,
+ svn_string_create(SVN_VER_NUMBER, pool));
/* Get the repos commit-editor */
return svn_repos_get_commit_editor5
(editor, edit_baton, sess->repos, NULL,
svn_path_uri_decode(sess->repos_url, pool), sess->fs_path->data,
- revprop_table, deltify_etc, db, NULL, NULL, pool);
+ revprop_table, deltify_etc, deb, NULL, NULL, pool);
}
@@ -751,7 +798,7 @@ svn_ra_local__get_mergeinfo(svn_ra_session_t *session,
SVN_ERR(svn_repos_fs_get_mergeinfo(&tmp_catalog, sess->repos, abs_paths,
revision, inherit, include_descendants,
- NULL, NULL, pool));
+ NULL, NULL, pool));
if (apr_hash_count(tmp_catalog) > 0)
SVN_ERR(svn_mergeinfo__remove_prefix_from_catalog(catalog,
tmp_catalog,
@@ -772,9 +819,11 @@ svn_ra_local__do_update(svn_ra_session_t *session,
const char *update_target,
svn_depth_t depth,
svn_boolean_t send_copyfrom_args,
+ svn_boolean_t ignore_ancestry,
const svn_delta_editor_t *update_editor,
void *update_baton,
- apr_pool_t *pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
return make_reporter(session,
reporter,
@@ -785,10 +834,10 @@ svn_ra_local__do_update(svn_ra_session_t *session,
TRUE,
depth,
send_copyfrom_args,
- FALSE,
+ ignore_ancestry,
update_editor,
update_baton,
- pool);
+ result_pool, scratch_pool);
}
@@ -800,9 +849,12 @@ svn_ra_local__do_switch(svn_ra_session_t *session,
const char *update_target,
svn_depth_t depth,
const char *switch_url,
+ svn_boolean_t send_copyfrom_args,
+ svn_boolean_t ignore_ancestry,
const svn_delta_editor_t *update_editor,
void *update_baton,
- apr_pool_t *pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
return make_reporter(session,
reporter,
@@ -810,13 +862,13 @@ svn_ra_local__do_switch(svn_ra_session_t *session,
update_revision,
update_target,
switch_url,
- TRUE,
+ TRUE /* text_deltas */,
depth,
- FALSE, /* ### TODO(sussman): take new arg */
- TRUE,
+ send_copyfrom_args,
+ ignore_ancestry,
update_editor,
update_baton,
- pool);
+ result_pool, scratch_pool);
}
@@ -843,7 +895,7 @@ svn_ra_local__do_status(svn_ra_session_t *session,
FALSE,
status_editor,
status_baton,
- pool);
+ pool, pool);
}
@@ -873,7 +925,7 @@ svn_ra_local__do_diff(svn_ra_session_t *session,
ignore_ancestry,
update_editor,
update_baton,
- pool);
+ pool, pool);
}
@@ -885,14 +937,26 @@ struct log_baton
};
static svn_error_t *
-cancellation_log_receiver(void *baton,
- svn_log_entry_t *log_entry,
- apr_pool_t *pool)
+log_receiver_wrapper(void *baton,
+ svn_log_entry_t *log_entry,
+ apr_pool_t *pool)
{
struct log_baton *b = baton;
svn_ra_local__session_baton_t *sess = b->sess;
- SVN_ERR((sess->callbacks->cancel_func)(sess->callback_baton));
+ if (sess->callbacks->cancel_func)
+ SVN_ERR((sess->callbacks->cancel_func)(sess->callback_baton));
+
+ /* For consistency with the other RA layers, replace an empty
+ changed-paths hash with a NULL one.
+
+ ### Should this be done by svn_ra_get_log2() instead, then? */
+ if ((log_entry->changed_paths2)
+ && (apr_hash_count(log_entry->changed_paths2) == 0))
+ {
+ log_entry->changed_paths = NULL;
+ log_entry->changed_paths2 = NULL;
+ }
return b->real_cb(b->real_baton, log_entry, pool);
}
@@ -929,16 +993,11 @@ svn_ra_local__get_log(svn_ra_session_t *session,
}
}
- if (sess->callbacks &&
- sess->callbacks->cancel_func)
- {
- lb.real_cb = receiver;
- lb.real_baton = receiver_baton;
- lb.sess = sess;
-
- receiver = cancellation_log_receiver;
- receiver_baton = &lb;
- }
+ lb.real_cb = receiver;
+ lb.real_baton = receiver_baton;
+ lb.sess = sess;
+ receiver = log_receiver_wrapper;
+ receiver_baton = &lb;
return svn_repos_get_logs4(sess->repos,
abs_paths,
@@ -997,41 +1056,50 @@ svn_ra_local__stat(svn_ra_session_t *session,
static svn_error_t *
get_node_props(apr_hash_t **props,
+ apr_array_header_t **inherited_props,
svn_ra_local__session_baton_t *sess,
svn_fs_root_t *root,
const char *path,
- apr_pool_t *pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
svn_revnum_t cmt_rev;
const char *cmt_date, *cmt_author;
/* Create a hash with props attached to the fs node. */
- SVN_ERR(svn_fs_node_proplist(props, root, path, pool));
+ if (props)
+ {
+ SVN_ERR(svn_fs_node_proplist(props, root, path, result_pool));
+ }
+
+ /* Get inherited properties if requested. */
+ if (inherited_props)
+ {
+ SVN_ERR(svn_repos_fs_get_inherited_props(inherited_props, root, path,
+ NULL, NULL, NULL,
+ result_pool, scratch_pool));
+ }
/* Now add some non-tweakable metadata to the hash as well... */
- /* The so-called 'entryprops' with info about CR & friends. */
- SVN_ERR(svn_repos_get_committed_info(&cmt_rev, &cmt_date,
- &cmt_author, root, path, pool));
-
- apr_hash_set(*props,
- SVN_PROP_ENTRY_COMMITTED_REV,
- APR_HASH_KEY_STRING,
- svn_string_createf(pool, "%ld", cmt_rev));
- apr_hash_set(*props,
- SVN_PROP_ENTRY_COMMITTED_DATE,
- APR_HASH_KEY_STRING,
- cmt_date ? svn_string_create(cmt_date, pool) : NULL);
- apr_hash_set(*props,
- SVN_PROP_ENTRY_LAST_AUTHOR,
- APR_HASH_KEY_STRING,
- cmt_author ? svn_string_create(cmt_author, pool) : NULL);
- apr_hash_set(*props,
- SVN_PROP_ENTRY_UUID,
- APR_HASH_KEY_STRING,
- svn_string_create(sess->uuid, pool));
-
- /* We have no 'wcprops' in ra_local, but might someday. */
+ if (props)
+ {
+ /* The so-called 'entryprops' with info about CR & friends. */
+ SVN_ERR(svn_repos_get_committed_info(&cmt_rev, &cmt_date,
+ &cmt_author, root, path,
+ scratch_pool));
+
+ svn_hash_sets(*props, SVN_PROP_ENTRY_COMMITTED_REV,
+ svn_string_createf(result_pool, "%ld", cmt_rev));
+ svn_hash_sets(*props, SVN_PROP_ENTRY_COMMITTED_DATE, cmt_date ?
+ svn_string_create(cmt_date, result_pool) :NULL);
+ svn_hash_sets(*props, SVN_PROP_ENTRY_LAST_AUTHOR, cmt_author ?
+ svn_string_create(cmt_author, result_pool) :NULL);
+ svn_hash_sets(*props, SVN_PROP_ENTRY_UUID,
+ svn_string_create(sess->uuid, result_pool));
+
+ /* We have no 'wcprops' in ra_local, but might someday. */
+ }
return SVN_NO_ERROR;
}
@@ -1103,7 +1171,7 @@ svn_ra_local__get_file(svn_ra_session_t *session,
/* Handle props if requested. */
if (props)
- SVN_ERR(get_node_props(props, sess, root, abs_path, pool));
+ SVN_ERR(get_node_props(props, NULL, sess, root, abs_path, pool, pool));
return SVN_NO_ERROR;
}
@@ -1156,7 +1224,7 @@ svn_ra_local__get_dir(svn_ra_session_t *session,
apr_hash_t *prophash;
const char *datestring, *entryname, *fullpath;
svn_fs_dirent_t *fs_entry;
- svn_dirent_t *entry = apr_pcalloc(pool, sizeof(*entry));
+ svn_dirent_t *entry = svn_dirent_create(pool);
svn_pool_clear(subpool);
@@ -1207,14 +1275,14 @@ svn_ra_local__get_dir(svn_ra_session_t *session,
}
/* Store. */
- apr_hash_set(*dirents, entryname, APR_HASH_KEY_STRING, entry);
+ svn_hash_sets(*dirents, entryname, entry);
}
svn_pool_destroy(subpool);
}
/* Handle props if requested. */
if (props)
- SVN_ERR(get_node_props(props, sess, root, abs_path, pool));
+ SVN_ERR(get_node_props(props, NULL, sess, root, abs_path, pool, pool));
return SVN_NO_ERROR;
}
@@ -1448,7 +1516,11 @@ svn_ra_local__has_capability(svn_ra_session_t *session,
|| strcmp(capability, SVN_RA_CAPABILITY_LOG_REVPROPS) == 0
|| strcmp(capability, SVN_RA_CAPABILITY_PARTIAL_REPLAY) == 0
|| strcmp(capability, SVN_RA_CAPABILITY_COMMIT_REVPROPS) == 0
- || strcmp(capability, SVN_RA_CAPABILITY_ATOMIC_REVPROPS) == 0)
+ || strcmp(capability, SVN_RA_CAPABILITY_ATOMIC_REVPROPS) == 0
+ || strcmp(capability, SVN_RA_CAPABILITY_INHERITED_PROPS) == 0
+ || strcmp(capability, SVN_RA_CAPABILITY_EPHEMERAL_TXNPROPS) == 0
+ || strcmp(capability, SVN_RA_CAPABILITY_GET_FILE_REVS_REVERSE) == 0
+ )
{
*has = TRUE;
}
@@ -1491,6 +1563,109 @@ svn_ra_local__get_deleted_rev(svn_ra_session_t *session,
return SVN_NO_ERROR;
}
+static svn_error_t *
+svn_ra_local__get_inherited_props(svn_ra_session_t *session,
+ apr_array_header_t **iprops,
+ const char *path,
+ svn_revnum_t revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_fs_root_t *root;
+ svn_revnum_t youngest_rev;
+ svn_ra_local__session_baton_t *sess = session->priv;
+ const char *abs_path = svn_fspath__join(sess->fs_path->data, path,
+ scratch_pool);
+ svn_node_kind_t node_kind;
+
+ /* Open the revision's root. */
+ if (! SVN_IS_VALID_REVNUM(revision))
+ {
+ SVN_ERR(svn_fs_youngest_rev(&youngest_rev, sess->fs, scratch_pool));
+ SVN_ERR(svn_fs_revision_root(&root, sess->fs, youngest_rev,
+ scratch_pool));
+ }
+ else
+ {
+ SVN_ERR(svn_fs_revision_root(&root, sess->fs, revision, scratch_pool));
+ }
+
+ SVN_ERR(svn_fs_check_path(&node_kind, root, abs_path, scratch_pool));
+ if (node_kind == svn_node_none)
+ {
+ return svn_error_createf(SVN_ERR_FS_NOT_FOUND, NULL,
+ _("'%s' path not found"), abs_path);
+ }
+
+ return svn_error_trace(get_node_props(NULL, iprops, sess, root, abs_path,
+ result_pool, scratch_pool));
+}
+
+static svn_error_t *
+svn_ra_local__register_editor_shim_callbacks(svn_ra_session_t *session,
+ svn_delta_shim_callbacks_t *callbacks)
+{
+ /* This is currenly a no-op, since we don't provide our own editor, just
+ use the one the libsvn_repos hands back to us. */
+ return SVN_NO_ERROR;
+}
+
+
+static svn_error_t *
+svn_ra_local__get_commit_ev2(svn_editor_t **editor,
+ svn_ra_session_t *session,
+ apr_hash_t *revprops,
+ svn_commit_callback2_t commit_cb,
+ void *commit_baton,
+ apr_hash_t *lock_tokens,
+ svn_boolean_t keep_locks,
+ svn_ra__provide_base_cb_t provide_base_cb,
+ svn_ra__provide_props_cb_t provide_props_cb,
+ svn_ra__get_copysrc_kind_cb_t get_copysrc_kind_cb,
+ void *cb_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_ra_local__session_baton_t *sess = session->priv;
+ struct deltify_etc_baton *deb = apr_palloc(result_pool, sizeof(*deb));
+
+ /* NOTE: the RA callbacks are ignored. We pass everything directly to
+ the REPOS editor. */
+
+ /* Prepare the baton for deltify_etc() */
+ deb->fs = sess->fs;
+ deb->repos = sess->repos;
+ deb->fspath_base = sess->fs_path->data;
+ if (! keep_locks)
+ deb->lock_tokens = lock_tokens;
+ else
+ deb->lock_tokens = NULL;
+ deb->commit_cb = commit_cb;
+ deb->commit_baton = commit_baton;
+
+ /* Ensure there is a username (and an FS access context) associated with
+ the session and its FS handle. */
+ SVN_ERR(get_username(session, scratch_pool));
+
+ /* If there are lock tokens to add, do so. */
+ SVN_ERR(apply_lock_tokens(sess->fs, sess->fs_path->data, lock_tokens,
+ session->pool, scratch_pool));
+
+ /* Copy the REVPROPS and insert the author/username. */
+ revprops = apr_hash_copy(scratch_pool, revprops);
+ svn_hash_sets(revprops, SVN_PROP_REVISION_AUTHOR,
+ svn_string_create(sess->username, scratch_pool));
+
+ return svn_error_trace(svn_repos__get_commit_ev2(
+ editor, sess->repos, NULL /* authz */,
+ NULL /* authz_repos_name */, NULL /* authz_user */,
+ revprops,
+ deltify_etc, deb, cancel_func, cancel_baton,
+ result_pool, scratch_pool));
+}
+
/*----------------------------------------------------------------*/
static const svn_version_t *
@@ -1537,7 +1712,10 @@ static const svn_ra__vtable_t ra_local_vtable =
svn_ra_local__replay,
svn_ra_local__has_capability,
svn_ra_local__replay_range,
- svn_ra_local__get_deleted_rev
+ svn_ra_local__get_deleted_rev,
+ svn_ra_local__register_editor_shim_callbacks,
+ svn_ra_local__get_inherited_props,
+ svn_ra_local__get_commit_ev2
};
@@ -1568,7 +1746,7 @@ svn_ra_local__init(const svn_version_t *loader_version,
"ra_local"),
loader_version->major);
- SVN_ERR(svn_ver_check_list(ra_local_version(), checklist));
+ SVN_ERR(svn_ver_check_list2(ra_local_version(), checklist, svn_ver_equal));
#ifndef SVN_LIBSVN_CLIENT_LINKS_RA_LOCAL
/* This assumes that POOL was the pool used to load the dso. */
diff --git a/subversion/libsvn_ra_local/split_url.c b/subversion/libsvn_ra_local/split_url.c
index 639e0ca..ec6cb68 100644
--- a/subversion/libsvn_ra_local/split_url.c
+++ b/subversion/libsvn_ra_local/split_url.c
@@ -39,6 +39,7 @@ svn_ra_local__split_URL(svn_repos_t **repos,
const char *repos_dirent;
const char *repos_root_dirent;
svn_stringbuf_t *urlbuf;
+ apr_size_t root_end;
SVN_ERR(svn_uri_get_dirent_from_file_url(&repos_dirent, URL, pool));
@@ -61,18 +62,44 @@ svn_ra_local__split_URL(svn_repos_t **repos,
SVN_ERR(svn_repos_remember_client_capabilities(*repos, caps));
}
- *fs_path = &repos_dirent[strlen(repos_root_dirent)];
-
- if (**fs_path == '\0')
+ /* = apr_pstrcat(pool,
+ "/",
+ svn_dirent_skip_ancestor(repos_root_dirent, repos_dirent),
+ (const char *)NULL); */
+ root_end = strlen(repos_root_dirent);
+ if (! repos_dirent[root_end])
*fs_path = "/";
+ else if (repos_dirent[root_end] == '/')
+ *fs_path = &repos_dirent[root_end];
+ else
+ {
+ /* On Windows "C:/" is the parent directory of "C:/dir" */
+ *fs_path = &repos_dirent[root_end-1];
+ SVN_ERR_ASSERT((*fs_path)[0] == '/');
+ }
+
+ /* Remove the path components after the root dirent from the original URL,
+ to get a URL to the repository root.
+
+ We don't use svn_uri_get_file_url_from_dirent() here as that would
+ transform several uris to form a differently formed url than
+ svn_uri_canonicalize would.
- /* Remove the path components in *fs_path from the original URL, to get
- the URL to the repository root. */
+ E.g. file://localhost/C:/dir -> file:///C:/dir
+ (a transform that was originally supported directly by this function,
+ before the implementation moved)
+
+ On on Windows:
+ file:///dir -> file:///E:/dir (When E: is the current disk)
+ */
urlbuf = svn_stringbuf_create(URL, pool);
svn_path_remove_components(urlbuf,
svn_path_component_count(repos_dirent)
- svn_path_component_count(repos_root_dirent));
*repos_url = urlbuf->data;
+ /* Configure hook script environment variables. */
+ SVN_ERR(svn_repos_hooks_setenv(*repos, NULL, pool));
+
return SVN_NO_ERROR;
}
diff --git a/subversion/libsvn_ra_neon/README b/subversion/libsvn_ra_neon/README
deleted file mode 100644
index 96e4795..0000000
--- a/subversion/libsvn_ra_neon/README
+++ /dev/null
@@ -1,112 +0,0 @@
-
- -*- text -*-
-
-Contents
-========
-
- * Sessions and requests
- * Passing errors back from neon callbacks
- * Library specific conventions
- * Error sources when dispatching a request
-
-
-
-Sessions and requests
-=====================
-
-Both Neon and ra_neon have concepts known as 'session' and 'request'.
-The request concept in ra_neon parallels the one in Neon, except that
-ra_neon stores request-related info for the RA layer. The session
-concept in ra_neon differs from the one in Neon: while the one in Neon
-is mainly meant to track / maintain a socket connection, the ra_neon
-session is the RA session opened by an RA consumer. An ra_neon session
-(currently) contains 2 Neon sessions.
-
-Only one request can be dispatched on a Neon session at a time; this
-is why there is a second Neon session, which is used by ra_neon
-implementations of Neon callbacks which want to retrieve information
-from the server concurrently with an active Neon session. Allocation
-to either Neon session happens automatically.
-
-
-
-Passing errors back from neon callbacks
-=======================================
-
-The general Neon request sequence is:
-
- 1. Create a session
- 2. Create a request
- 3. Add an in-memory or callback-provided request body, if applicable
- 4. Add custom headers, if any
- 5. Register one or more content consumers for the response body
- (ra_neon usually creates xml parsers for this purpose)
- 6. Dispatch the request
- (send it to the server and process the response)
-
-While in any of the registered callbacks (be it xml parser,
-body consumer or body provider), Subversion function calls can return
-their usual errors. The Neon APIs have been wrapped to catch these
-and marshall them through the Neon layer, so that the dispatch routine
-can raise the error for normal processing.
-
-
-
-Library specific conventions
-============================
-
- * When a specific variable name is used frequently both to refer to
- ra_neon and Neon resources, the Neon resource variable is prefixed
- with 'ne_'.
-
- * Don't use Neon functions which construct and destroy
- their own requests (ie: ne_simple_request, ne_lock, ne_propfind etc.).
-
- * Create wrapper functions for callbacks, creating an ra_neon callback
- which returns an svn_error_t *, storing the returned error
- in the request structure.
-
- * When storing an error in the request structure 'err' field,
- use the SVN_RA_NEON__REQ_ERR() macro.
-
- * Make Neon resources which need explicit destruction live as short
- as possible, or register a pool cleanup to ensure destruction.
- Preferrably, copy the results into a pool with the necessary lifetime.
-
-
-
-Error sources when dispatching a request
-========================================
-
-There are a number of different error sources which all come
-together in svn_ra_neon__request_dispatch(), which tries to
-sort them out and generate the most important error.
-
- 1. Neon encounters a network or authentication error
- (all Neon errors except NE_ERROR and NE_OK)
- 2. Neon didn't encounter an error (returns NE_OK),
- but the response sent contains an HTTP error (ie 404 Not found, or alike)
- In this situation, there are 2 possibilities:
- a) The response contains extended error explanation from mod_dav,
- which will sometimes be marked as Subversion internal error
- b) The response contains only the error status code.
- 3. A callback requested cancelation because the routine it wrapped
- [see 'Passing back errors from Neon' about wrapping] returned an error
- (request body provider or response consumer, the latter
- are xml parser errors, most of the time).
-
-In order to make callers as simple as possible, svn_ra_neon__request_dispatch()
-condenses all these error sources into 1 returned svn_error_t, while trying
-to keep the errors returned human-readable.
-
-When condensing errors, these rules are used:
-
- - Local errors take priority over ones received from the server
- - Authentication problems, network problems and other unknown
- errors are transformed into a generic error code + message
- - Locally generated errors in the callbacks are returned as is
- - Subversion server errors are returned when available
- - Protocol statuses unexpectedly returned (including 2xx codes!)
- result in a general error message including the status number
- and description
-
diff --git a/subversion/libsvn_ra_neon/commit.c b/subversion/libsvn_ra_neon/commit.c
deleted file mode 100644
index ce05b60..0000000
--- a/subversion/libsvn_ra_neon/commit.c
+++ /dev/null
@@ -1,1631 +0,0 @@
-/*
- * commit.c : routines for committing changes to the server
- *
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- * ====================================================================
- */
-
-
-
-#include <apr_pools.h>
-#include <apr_hash.h>
-#include <apr_uuid.h>
-
-#define APR_WANT_STDIO
-#define APR_WANT_STRFUNC
-#include <apr_want.h>
-
-#include "svn_pools.h"
-#include "svn_error.h"
-#include "svn_delta.h"
-#include "svn_io.h"
-#include "svn_ra.h"
-#include "../libsvn_ra/ra_loader.h"
-#include "svn_dirent_uri.h"
-#include "svn_path.h"
-#include "svn_xml.h"
-#include "svn_dav.h"
-#include "svn_props.h"
-
-#include "svn_private_config.h"
-
-#include "ra_neon.h"
-
-
-#define APPLY_TO_VERSION "<D:apply-to-version/>"
-
-/*
- * version_rsrc_t: identify the relevant pieces of a resource on the server
- *
- * NOTE: If you tweak this structure, please update dup_resource() to
- * ensure that it continues to create complete deep copies!
- */
-typedef struct version_rsrc_t
-{
- svn_revnum_t revision; /* resource's revision, or SVN_INVALID_REVNUM
- if it's new or is the HEAD */
- const char *url; /* public/viewable/original resource URL */
- const char *vsn_url; /* version resource URL that we stored
- locally; NULL if this is a just-added resource */
- const char *wr_url; /* working resource URL for this resource;
- NULL for resources not (yet) checked out */
- const char *name; /* basename of the resource */
- apr_pool_t *pool; /* pool in which this resource is allocated */
-
-} version_rsrc_t;
-
-
-typedef struct commit_ctx_t
-{
- /* Pool for the whole of the commit context. */
- apr_pool_t *pool;
-
- /* Pointer to the RA session baton. */
- svn_ra_neon__session_t *ras;
-
- /* Commit anchor repository relpath. */
- const char *anchor_relpath;
-
- /* A hash of revision properties (log messages, etc.) we need to set
- on the commit transaction. */
- apr_hash_t *revprop_table;
-
- /* A hash mapping svn_string_t * paths (those which are valid as
- target in the MERGE response) to svn_node_kind_t kinds. */
- apr_hash_t *valid_targets;
-
- /* The (potential) author of this commit. */
- const char *user;
-
- /* The commit callback and baton */
- svn_commit_callback2_t callback;
- void *callback_baton;
-
- /* The hash of lock tokens owned by the working copy, and whether
- or not to keep them after this commit is complete. */
- apr_hash_t *lock_tokens;
- svn_boolean_t keep_locks;
-
- /* HTTP v2 stuff */
- const char *txn_url; /* txn URL (!svn/txn/TXN_NAME) */
- const char *txn_root_url; /* commit anchor txn root URL */
-
- /* HTTP v1 stuff (only valid when 'txn_url' is NULL) */
- const char *activity_url; /* activity base URL... */
-
-} commit_ctx_t;
-
-
-/* Are we using HTTPv2 semantics for this commit? */
-#define USING_HTTPV2_COMMIT_SUPPORT(commit_ctx) ((commit_ctx)->txn_url != NULL)
-
-
-typedef struct put_baton_t
-{
- apr_file_t *tmpfile; /* may be NULL for content-less file */
- svn_stringbuf_t *fname; /* may be NULL for content-less file */
- const char *base_checksum; /* hex md5 of base text; may be null */
- apr_off_t progress;
- svn_ra_neon__session_t *ras;
- apr_pool_t *pool;
-} put_baton_t;
-
-typedef struct resource_baton_t
-{
- commit_ctx_t *cc;
- version_rsrc_t *rsrc;
- svn_revnum_t base_revision; /* base revision */
- apr_hash_t *prop_changes; /* name/values pairs of new/changed properties. */
- apr_array_header_t *prop_deletes; /* names of properties to delete. */
- svn_boolean_t created; /* set if this is an add rather than an update */
- svn_boolean_t copied; /* set if this object was copied */
- apr_pool_t *pool; /* the pool from open_foo() / add_foo() */
- put_baton_t *put_baton; /* baton for this file's PUT request */
- const char *token; /* file's lock token, if available */
- const char *txn_root_url; /* URL under !svn/txr/ (HTTPv2 only) */
- const char *local_relpath; /* path relative to the root of the commit
- (used for the get_wc_prop() and push_wc_prop()
- callbacks). */
-} resource_baton_t;
-
-/* this property will be fetched from the server when we don't find it
- cached in the WC property store. */
-static const ne_propname fetch_props[] =
-{
- { "DAV:", "checked-in" },
- { NULL }
-};
-
-static const ne_propname log_message_prop = { SVN_DAV_PROP_NS_SVN, "log" };
-
-/* Return a deep copy of BASE allocated from POOL. */
-static version_rsrc_t * dup_resource(version_rsrc_t *base, apr_pool_t *pool)
-{
- version_rsrc_t *rsrc = apr_pcalloc(pool, sizeof(*rsrc));
- rsrc->revision = base->revision;
- rsrc->url = base->url ?
- apr_pstrdup(pool, base->url) : NULL;
- rsrc->vsn_url = base->vsn_url ?
- apr_pstrdup(pool, base->vsn_url) : NULL;
- rsrc->wr_url = base->wr_url ?
- apr_pstrdup(pool, base->wr_url) : NULL;
- rsrc->name = base->name ?
- apr_pstrdup(pool, base->name) : NULL;
- rsrc->pool = pool;
- return rsrc;
-}
-
-/* Get the version resource URL for RSRC, storing it in
- RSRC->vsn_url. Use POOL for all temporary allocations. */
-static svn_error_t * get_version_url(commit_ctx_t *cc,
- const char *local_relpath,
- const version_rsrc_t *parent,
- version_rsrc_t *rsrc,
- svn_boolean_t force,
- apr_pool_t *pool)
-{
- svn_ra_neon__resource_t *propres;
- const char *url;
- const svn_string_t *url_str;
-
- if (!force)
- {
- if (cc->ras->callbacks->get_wc_prop != NULL)
- {
- const svn_string_t *vsn_url_value;
-
- SVN_ERR(cc->ras->callbacks->get_wc_prop(cc->ras->callback_baton,
- local_relpath,
- SVN_RA_NEON__LP_VSN_URL,
- &vsn_url_value,
- pool));
- if (vsn_url_value != NULL)
- {
- rsrc->vsn_url = apr_pstrdup(rsrc->pool, vsn_url_value->data);
- return SVN_NO_ERROR;
- }
- }
-
- /* If we know the version resource URL of the parent and it is
- the same revision as RSRC, use that as a base to calculate
- the version resource URL of RSRC. */
- if (parent && parent->vsn_url && parent->revision == rsrc->revision)
- {
- rsrc->vsn_url = svn_path_url_add_component2(parent->vsn_url,
- rsrc->name,
- rsrc->pool);
- return SVN_NO_ERROR;
- }
-
- /* whoops. it wasn't there. go grab it from the server. */
- }
-
- if (rsrc->revision == SVN_INVALID_REVNUM)
- {
- /* We aren't trying to get a specific version -- use the HEAD. We
- fetch the version URL from the public URL. */
- url = rsrc->url;
- }
- else
- {
- const char *bc_url;
- const char *bc_relative;
-
- /* The version URL comes from a resource in the Baseline Collection. */
- SVN_ERR(svn_ra_neon__get_baseline_info(&bc_url, &bc_relative, NULL,
- cc->ras, rsrc->url,
- rsrc->revision, pool));
- url = svn_path_url_add_component2(bc_url, bc_relative, pool);
- }
-
- /* Get the DAV:checked-in property, which contains the URL of the
- Version Resource */
- SVN_ERR(svn_ra_neon__get_props_resource(&propres, cc->ras, url,
- NULL, fetch_props, pool));
- url_str = apr_hash_get(propres->propset,
- SVN_RA_NEON__PROP_CHECKED_IN,
- APR_HASH_KEY_STRING);
- if (url_str == NULL)
- {
- /* ### need a proper SVN_ERR here */
- return svn_error_create(APR_EGENERAL, NULL,
- _("Could not fetch the Version Resource URL "
- "(needed during an import or when it is "
- "missing from the local, cached props)"));
- }
-
- /* ensure we get the proper lifetime for this URL since it is going into
- a resource object. */
- rsrc->vsn_url = apr_pstrdup(rsrc->pool, url_str->data);
-
- if (cc->ras->callbacks->push_wc_prop != NULL)
- {
- /* Now we can store the new version-url. */
- SVN_ERR(cc->ras->callbacks->push_wc_prop(cc->ras->callback_baton,
- local_relpath,
- SVN_RA_NEON__LP_VSN_URL,
- url_str,
- pool));
- }
-
- return SVN_NO_ERROR;
-}
-
-/* When FORCE is true, then we force a query to the server, ignoring any
- cached property. */
-static svn_error_t * get_activity_collection(commit_ctx_t *cc,
- const svn_string_t **collection,
- svn_boolean_t force,
- apr_pool_t *pool)
-{
- if (!force && cc->ras->callbacks->get_wc_prop != NULL)
- {
- /* with a get_wc_prop, we can just ask for the activity URL from the
- property store. */
-
- /* get the URL where we should create activities */
- SVN_ERR(cc->ras->callbacks->get_wc_prop(cc->ras->callback_baton,
- "",
- SVN_RA_NEON__LP_ACTIVITY_COLL,
- collection,
- pool));
-
- if (*collection != NULL)
- {
- /* the property was there. return it. */
- return SVN_NO_ERROR;
- }
-
- /* property not found for some reason. get it from the server. */
- }
-
- /* use our utility function to fetch the activity URL */
- SVN_ERR(svn_ra_neon__get_activity_collection(collection,
- cc->ras,
- pool));
-
- if (cc->ras->callbacks->push_wc_prop != NULL)
- {
- /* save the (new) activity collection URL into the directory */
- SVN_ERR(cc->ras->callbacks->push_wc_prop(cc->ras->callback_baton,
- "",
- SVN_RA_NEON__LP_ACTIVITY_COLL,
- *collection,
- pool));
- }
-
- return SVN_NO_ERROR;
-}
-
-static svn_error_t * create_activity(commit_ctx_t *cc,
- apr_pool_t *pool)
-{
- const svn_string_t * activity_collection;
- const char *uuid_buf = svn_uuid_generate(pool);
- int code;
- const char *url;
-
- /* get the URL where we'll create activities, construct the URL for
- the activity, and create the activity. The URL for our activity
- will be ACTIVITY_COLL/UUID */
- SVN_ERR(get_activity_collection(cc, &activity_collection, FALSE, pool));
- url = svn_path_url_add_component2(activity_collection->data,
- uuid_buf, pool);
- SVN_ERR(svn_ra_neon__simple_request(&code, cc->ras,
- "MKACTIVITY", url, NULL, NULL,
- 201 /* Created */,
- 404 /* Not Found */, pool));
-
- /* if we get a 404, then it generally means that the cached activity
- collection no longer exists. Retry the sequence, but force a query
- to the server for the activity collection. */
- if (code == 404)
- {
- SVN_ERR(get_activity_collection(cc, &activity_collection, TRUE, pool));
- url = svn_path_url_add_component2(activity_collection->data,
- uuid_buf, pool);
- SVN_ERR(svn_ra_neon__simple_request(&code, cc->ras,
- "MKACTIVITY", url, NULL, NULL,
- 201, 0, pool));
- }
-
- cc->activity_url = apr_pstrdup(cc->pool, url);
-
- return SVN_NO_ERROR;
-}
-
-/* Add a child resource. POOL should be as "temporary" as possible,
- but probably not as far as requiring a new temp pool. */
-static svn_error_t * add_child(version_rsrc_t **child,
- commit_ctx_t *cc,
- const version_rsrc_t *parent,
- const char *parent_local_relpath,
- const char *name,
- int created,
- svn_revnum_t revision,
- apr_pool_t *pool)
-{
- version_rsrc_t *rsrc;
-
- /* ### todo: This from Yoshiki Hayashi <yoshiki@xemacs.org>:
-
- Probably created flag in add_child can be removed because
- revision is valid => created is false
- revision is invalid => created is true
- */
-
- rsrc = apr_pcalloc(pool, sizeof(*rsrc));
- rsrc->pool = pool;
- rsrc->revision = revision;
- rsrc->name = name;
- rsrc->url = svn_path_url_add_component2(parent->url, name, pool);
-
- /* Case 1: the resource is truly "new". Either it was added as a
- completely new object, or implicitly created via a COPY. Either
- way, it has no VR URL anywhere. However, we *can* derive its WR
- URL by the rules of deltaV: "copy structure is preserved below
- the WR you COPY to." */
- if (created || (parent->vsn_url == NULL))
- {
- rsrc->wr_url = svn_path_url_add_component2(parent->wr_url, name, pool);
- }
- /* Case 2: the resource is already under version-control somewhere.
- This means it has a VR URL already, and the WR URL won't exist
- until it's "checked out". */
- else
- {
- SVN_ERR(get_version_url(cc, svn_relpath_join(parent_local_relpath,
- name, pool),
- parent, rsrc, FALSE, pool));
- }
-
- *child = rsrc;
- return SVN_NO_ERROR;
-}
-
-
-static svn_error_t * do_checkout(commit_ctx_t *cc,
- const char *vsn_url,
- svn_boolean_t allow_404,
- const char *token,
- svn_boolean_t is_vcc,
- int *code,
- const char **locn,
- apr_pool_t *pool)
-{
- svn_ra_neon__request_t *request;
- const char *body;
- apr_hash_t *extra_headers = NULL;
- svn_error_t *err = SVN_NO_ERROR;
-
- /* assert: vsn_url != NULL */
-
- /* ### send a CHECKOUT resource on vsn_url; include cc->activity_url;
- ### place result into res->wr_url and return it */
-
- /* create/prep the request */
- SVN_ERR(svn_ra_neon__request_create(&request, cc->ras, "CHECKOUT", vsn_url,
- pool));
-
- /* ### store this into cc to avoid pool growth */
- body = apr_psprintf(request->pool,
- "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
- "<D:checkout xmlns:D=\"DAV:\">"
- "<D:activity-set>"
- "<D:href>%s</D:href>"
- "</D:activity-set>%s</D:checkout>",
- cc->activity_url,
- is_vcc ? APPLY_TO_VERSION: "");
-
- if (token)
- {
- extra_headers = apr_hash_make(request->pool);
- svn_ra_neon__set_header(extra_headers, "If",
- apr_psprintf(request->pool, "(<%s>)", token));
- }
-
- /* run the request and get the resulting status code (and svn_error_t) */
- err = svn_ra_neon__request_dispatch(code, request, extra_headers, body,
- 201 /* Created */,
- allow_404 ? 404 /* Not Found */ : 0,
- pool);
- if (err)
- goto cleanup;
-
- if (allow_404 && *code == 404 && request->err)
- {
- svn_error_clear(request->err);
- request->err = SVN_NO_ERROR;
- }
-
- *locn = svn_ra_neon__request_get_location(request, pool);
-
- cleanup:
- svn_ra_neon__request_destroy(request);
-
- return err;
-}
-
-
-static svn_error_t * checkout_resource(commit_ctx_t *cc,
- const char *local_relpath,
- version_rsrc_t *rsrc,
- svn_boolean_t allow_404,
- const char *token,
- svn_boolean_t is_vcc,
- apr_pool_t *pool)
-{
- int code;
- const char *locn = NULL;
- ne_uri parse;
- svn_error_t *err;
-
- if (rsrc->wr_url != NULL)
- {
- /* already checked out! */
- return NULL;
- }
-
- /* check out the Version Resource */
- err = do_checkout(cc, rsrc->vsn_url, allow_404, token,
- is_vcc, &code, &locn, pool);
-
- /* possibly run the request again, with a re-fetched Version Resource */
- if (err == NULL && allow_404 && code == 404)
- {
- locn = NULL;
-
- /* re-fetch, forcing a query to the server */
- SVN_ERR(get_version_url(cc, local_relpath, NULL, rsrc, TRUE, pool));
-
- /* do it again, but don't allow a 404 this time */
- err = do_checkout(cc, rsrc->vsn_url, FALSE, token,
- is_vcc, &code, &locn, pool);
- }
-
- /* special-case when conflicts occur */
- if (err)
- {
- /* ### TODO: it's a shame we don't have the full path from the
- ### root of the drive here, nor the type of the resource.
- ### Because we lack this information, the error message is
- ### overly generic. See issue #2740. */
- if (err->apr_err == SVN_ERR_FS_CONFLICT)
- return svn_error_createf
- (SVN_ERR_FS_OUT_OF_DATE, err,
- _("File or directory '%s' is out of date; try updating"),
- local_relpath);
- return err;
- }
-
- /* we got the header, right? */
- if (locn == NULL)
- return svn_error_create(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL,
- _("The CHECKOUT response did not contain a "
- "'Location:' header"));
-
- /* The location is an absolute URI. We want just the path portion. */
- /* ### what to do with the rest? what if it points somewhere other
- ### than the current session? */
- if (ne_uri_parse(locn, &parse) != 0)
- {
- ne_uri_free(&parse);
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Unable to parse URL '%s'"), locn);
- }
-
- rsrc->wr_url = apr_pstrdup(rsrc->pool, parse.path);
- ne_uri_free(&parse);
-
- return SVN_NO_ERROR;
-}
-
-static void record_prop_change(apr_pool_t *pool,
- resource_baton_t *r,
- const char *name,
- const svn_string_t *value)
-{
- /* copy the name into the pool so we get the right lifetime (who knows
- what the caller will do with it) */
- name = apr_pstrdup(pool, name);
-
- if (value)
- {
- /* changed/new property */
- if (r->prop_changes == NULL)
- r->prop_changes = apr_hash_make(pool);
- apr_hash_set(r->prop_changes, name, APR_HASH_KEY_STRING,
- svn_string_dup(value, pool));
- }
- else
- {
- /* deleted property. */
- if (r->prop_deletes == NULL)
- r->prop_deletes = apr_array_make(pool, 5, sizeof(char *));
- APR_ARRAY_PUSH(r->prop_deletes, const char *) = name;
- }
-}
-
-/* Send a Neon COPY request to the location identified by
- COPYFROM_PATH and COPYFROM_REVISION, using COPY_DST_URL as the
- "Destination" of that copy. */
-static svn_error_t * copy_resource(svn_ra_neon__session_t *ras,
- const char *copyfrom_path,
- svn_revnum_t copyfrom_revision,
- const char *copy_dst_url,
- apr_pool_t *scratch_pool)
-{
- const char *bc_url;
- const char *bc_relative;
- const char *copy_src_url;
-
- SVN_ERR(svn_ra_neon__get_baseline_info(&bc_url, &bc_relative, NULL,
- ras, copyfrom_path,
- copyfrom_revision, scratch_pool));
- copy_src_url = svn_path_url_add_component2(bc_url, bc_relative,
- scratch_pool);
- SVN_ERR(svn_ra_neon__copy(ras, 1 /* overwrite */, SVN_RA_NEON__DEPTH_INFINITE,
- copy_src_url, copy_dst_url, scratch_pool));
-
- return SVN_NO_ERROR;
-}
-
-
-static svn_error_t * do_proppatch(resource_baton_t *rb,
- apr_pool_t *pool)
-{
- apr_hash_t *extra_headers = apr_hash_make(pool);
- const char *proppatch_target =
- USING_HTTPV2_COMMIT_SUPPORT(rb->cc) ? rb->txn_root_url : rb->rsrc->wr_url;
-
- if (SVN_IS_VALID_REVNUM(rb->base_revision))
- svn_ra_neon__set_header(extra_headers, SVN_DAV_VERSION_NAME_HEADER,
- apr_psprintf(pool, "%ld", rb->base_revision));
-
- if (rb->token)
- apr_hash_set(extra_headers, "If", APR_HASH_KEY_STRING,
- apr_psprintf(pool, "(<%s>)", rb->token));
-
- return svn_error_trace(svn_ra_neon__do_proppatch(rb->cc->ras,
- proppatch_target,
- rb->prop_changes,
- rb->prop_deletes,
- NULL, extra_headers,
- pool));
-}
-
-
-static void
-add_valid_target(commit_ctx_t *cc,
- const char *path,
- enum svn_recurse_kind kind)
-{
- apr_hash_t *hash = cc->valid_targets;
- svn_string_t *path_str = svn_string_create(path, apr_hash_pool_get(hash));
- apr_hash_set(hash, path_str->data, path_str->len, (void*)kind);
-}
-
-
-/* Helper func for commit_delete_entry. Find all keys in LOCK_TOKENS
- which are children of DIR. Returns the keys (and their vals) in
- CHILD_TOKENS. No keys or values are reallocated or dup'd. If no
- keys are children, then return an empty hash. Use POOL to allocate
- new hash. */
-static apr_hash_t *get_child_tokens(apr_hash_t *lock_tokens,
- const char *dir,
- apr_pool_t *pool)
-{
- apr_hash_index_t *hi;
- apr_hash_t *tokens = apr_hash_make(pool);
- apr_pool_t *subpool = svn_pool_create(pool);
-
- for (hi = apr_hash_first(pool, lock_tokens); hi; hi = apr_hash_next(hi))
- {
- const void *key;
- apr_ssize_t klen;
- void *val;
-
- svn_pool_clear(subpool);
- apr_hash_this(hi, &key, &klen, &val);
-
- if (svn_relpath__is_child(dir, key, subpool))
- apr_hash_set(tokens, key, klen, val);
- }
-
- svn_pool_destroy(subpool);
- return tokens;
-}
-
-
-/* PROPPATCH the appropriate resource in order to set the revision
- properties in CC->REVPROP_TABLE on the commit transaction. Use
- POOL for temporary allocations. */
-static svn_error_t *
-apply_revprops(commit_ctx_t *cc,
- apr_pool_t *pool)
-{
- const char *proppatch_url;
-
- if (USING_HTTPV2_COMMIT_SUPPORT(cc))
- {
- proppatch_url = cc->txn_url;
- }
- else
- {
- const char *vcc;
- version_rsrc_t vcc_rsrc = { SVN_INVALID_REVNUM };
- svn_error_t *err = NULL;
- int retry_count = 5;
-
- /* Fetch the DAV:version-controlled-configuration from the
- session's URL. */
- SVN_ERR(svn_ra_neon__get_vcc(&vcc, cc->ras, cc->ras->root.path, pool));
-
- do {
- svn_error_clear(err);
-
- vcc_rsrc.pool = pool;
- vcc_rsrc.vsn_url = vcc;
-
- /* To set the revision properties, we must checkout the latest
- baseline and get back a mutable "working" baseline. */
- err = checkout_resource(cc, "", &vcc_rsrc, FALSE, NULL, TRUE, pool);
-
- /* There's a small chance of a race condition here, if apache
- is experiencing heavy commit concurrency or if the network
- has long latency. It's possible that the value of HEAD
- changed between the time we fetched the latest baseline and
- the time we checkout that baseline. If that happens,
- apache will throw us a BAD_BASELINE error (deltaV says you
- can only checkout the latest baseline). We just ignore
- that specific error and retry a few times, asking for the
- latest baseline again. */
- if (err && err->apr_err != SVN_ERR_APMOD_BAD_BASELINE)
- return err;
-
- } while (err && (--retry_count > 0));
-
- /* Yikes, if we couldn't hold onto HEAD after a few retries, throw a
- real error.*/
- if (err)
- return err;
-
- proppatch_url = vcc_rsrc.wr_url;
- }
-
- return svn_error_trace(svn_ra_neon__do_proppatch(cc->ras, proppatch_url,
- cc->revprop_table,
- NULL, NULL, NULL, pool));
-}
-
-
-/*** Commit Editor Functions ***/
-
-static svn_error_t * commit_open_root(void *edit_baton,
- svn_revnum_t base_revision,
- apr_pool_t *dir_pool,
- void **root_baton)
-{
- commit_ctx_t *cc = edit_baton;
- resource_baton_t *root;
- version_rsrc_t *rsrc = NULL;
-
- root = apr_pcalloc(dir_pool, sizeof(*root));
- root->pool = dir_pool;
- root->cc = cc;
- root->base_revision = base_revision;
- root->created = FALSE;
- root->local_relpath = "";
-
- if (SVN_RA_NEON__HAVE_HTTPV2_SUPPORT(cc->ras))
- {
- /* POST to the 'me' resource to create our server-side
- transaction (and, optionally, a corresponding activity). */
- svn_ra_neon__request_t *req;
- const char *header_val;
- svn_error_t *err;
-
- SVN_ERR(svn_ra_neon__request_create(&req, cc->ras, "POST",
- cc->ras->me_resource, dir_pool));
- ne_add_request_header(req->ne_req, "Content-Type", SVN_SKEL_MIME_TYPE);
-
-#ifdef SVN_DAV_SEND_VTXN_NAME
- /* Enable this to exercise the VTXN-NAME code based on a client
- supplied transaction name. */
- ne_add_request_header(req->ne_req, SVN_DAV_VTXN_NAME_HEADER,
- svn_uuid_generate(dir_pool));
-#endif
-
- err = svn_ra_neon__request_dispatch(NULL, req, NULL, "( create-txn )",
- 201, 0, dir_pool);
- if (!err)
- {
- /* Check the response headers for either the virtual transaction
- details, or the real transaction details. We need to have
- one or the other of those! */
- if ((header_val = ne_get_response_header(req->ne_req,
- SVN_DAV_VTXN_NAME_HEADER)))
- {
- cc->txn_url = svn_path_url_add_component2(cc->ras->vtxn_stub,
- header_val, cc->pool);
- cc->txn_root_url
- = svn_path_url_add_component2(cc->ras->vtxn_root_stub,
- header_val, cc->pool);
- }
- else if ((header_val
- = ne_get_response_header(req->ne_req,
- SVN_DAV_TXN_NAME_HEADER)))
- {
- cc->txn_url = svn_path_url_add_component2(cc->ras->txn_stub,
- header_val, cc->pool);
- cc->txn_root_url
- = svn_path_url_add_component2(cc->ras->txn_root_stub,
- header_val, cc->pool);
- }
- else
- err = svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL,
- _("POST request did not return transaction "
- "information"));
- }
- svn_ra_neon__request_destroy(req);
- SVN_ERR(err);
-
- root->rsrc = NULL;
- root->txn_root_url = svn_path_url_add_component2(cc->txn_root_url,
- cc->anchor_relpath,
- dir_pool);
- }
- else
- {
- /* Use MKACTIVITY against a unique child of activity collection
- to create a server-side activity which corresponds directly
- to an FS transaction. We will check out all further
- resources within the context of this activity. */
- SVN_ERR(create_activity(cc, dir_pool));
-
- /* Create the root resource. (We don't yet know the wr_url.) */
- rsrc = apr_pcalloc(dir_pool, sizeof(*rsrc));
- rsrc->pool = dir_pool;
- rsrc->revision = base_revision;
- rsrc->url = cc->ras->root.path;
-
- SVN_ERR(get_version_url(cc, root->local_relpath, NULL, rsrc,
- FALSE, dir_pool));
-
- root->rsrc = rsrc;
- root->txn_root_url = NULL;
- }
-
- /* Find the latest baseline resource, check it out, and then apply
- the log message onto the thing. */
- SVN_ERR(apply_revprops(cc, dir_pool));
-
-
- *root_baton = root;
-
- return SVN_NO_ERROR;
-}
-
-
-static svn_error_t * commit_delete_entry(const char *path,
- svn_revnum_t revision,
- void *parent_baton,
- apr_pool_t *pool)
-{
- resource_baton_t *parent = parent_baton;
- const char *name = svn_relpath_basename(path, NULL);
- apr_hash_t *extra_headers = apr_hash_make(pool);
- int code;
- svn_error_t *serr;
- const char *delete_target;
-
- if (USING_HTTPV2_COMMIT_SUPPORT(parent->cc))
- {
- delete_target = svn_path_url_add_component2(parent->txn_root_url,
- name, pool);
- }
- else
- {
- /* Get the URL to the working collection. */
- SVN_ERR(checkout_resource(parent->cc, parent->local_relpath,
- parent->rsrc, TRUE, NULL, FALSE, pool));
-
- /* Create the URL for the child resource. */
- delete_target = svn_path_url_add_component2(parent->rsrc->wr_url,
- name, pool);
- }
-
- /* If we have a base revision for the server to compare against,
- pass that along in a custom header. */
- if (SVN_IS_VALID_REVNUM(revision))
- svn_ra_neon__set_header(extra_headers, SVN_DAV_VERSION_NAME_HEADER,
- apr_psprintf(pool, "%ld", revision));
-
- /* We start out assuming that we're deleting a file; try to lookup
- the path itself in the token-hash, and if found, attach it to the
- If: header. */
- if (parent->cc->lock_tokens)
- {
- const char *token =
- apr_hash_get(parent->cc->lock_tokens, path, APR_HASH_KEY_STRING);
-
- if (token)
- {
- const char *token_header_val;
- const char *token_uri;
-
- token_uri = svn_path_url_add_component2(parent->cc->ras->url->data,
- path, pool);
- token_header_val = apr_psprintf(pool, "<%s> (<%s>)",
- token_uri, token);
- extra_headers = apr_hash_make(pool);
- apr_hash_set(extra_headers, "If", APR_HASH_KEY_STRING,
- token_header_val);
- }
- }
-
- /* dav_method_delete() always calls dav_unlock(), but if the svn
- client passed --no-unlock to 'svn commit', then we need to send a
- header which prevents mod_dav_svn from actually doing the unlock. */
- if (parent->cc->keep_locks)
- {
- apr_hash_set(extra_headers, SVN_DAV_OPTIONS_HEADER,
- APR_HASH_KEY_STRING, SVN_DAV_OPTION_KEEP_LOCKS);
- }
-
- serr = svn_ra_neon__simple_request(&code, parent->cc->ras,
- "DELETE", delete_target,
- extra_headers, NULL,
- 204 /* No Content */,
- 0, pool);
-
- /* A locking-related error most likely means we were deleting a
- directory rather than a file, and didn't send all of the
- necessary lock-tokens within the directory. */
- if (serr && ((serr->apr_err == SVN_ERR_FS_BAD_LOCK_TOKEN)
- || (serr->apr_err == SVN_ERR_FS_NO_LOCK_TOKEN)
- || (serr->apr_err == SVN_ERR_FS_LOCK_OWNER_MISMATCH)
- || (serr->apr_err == SVN_ERR_FS_PATH_ALREADY_LOCKED)))
- {
- /* Re-attempt the DELETE request as if the path were a
- directory. Discover all lock-tokens within the directory,
- and send them in the body of the request (which is normally
- empty). Of course, if we don't *find* any additional
- lock-tokens, don't bother to retry (it ain't gonna do any
- good).
-
- Note that we're not sending the locks in the If: header, for
- the same reason we're not sending in MERGE's headers: httpd
- has limits on the amount of data it's willing to receive in
- headers. */
-
- apr_hash_t *child_tokens = NULL;
- svn_ra_neon__request_t *request;
- const char *body;
- const char *token;
- svn_stringbuf_t *locks_list;
- svn_error_t *err = SVN_NO_ERROR;
-
- if (parent->cc->lock_tokens)
- child_tokens = get_child_tokens(parent->cc->lock_tokens, path, pool);
-
- /* No kiddos? Return the original error. Else, clear it so it
- doesn't get leaked. */
- if ((! child_tokens) || (apr_hash_count(child_tokens) == 0))
- return serr;
- else
- svn_error_clear(serr);
-
- /* In preparation of directory locks, go ahead and add the actual
- target's lock token to those of its children. */
- if ((token = apr_hash_get(parent->cc->lock_tokens, path,
- APR_HASH_KEY_STRING)))
- {
- /* ### copy PATH into the right pool. which? */
- apr_hash_set(child_tokens, path, APR_HASH_KEY_STRING, token);
- }
-
- SVN_ERR(svn_ra_neon__request_create(&request, parent->cc->ras, "DELETE",
- delete_target, pool));
-
- err = svn_ra_neon__assemble_locktoken_body(&locks_list,
- child_tokens, request->pool);
- if (err)
- goto cleanup;
-
- body = apr_psprintf(request->pool,
- "<?xml version=\"1.0\" encoding=\"utf-8\"?> %s",
- locks_list->data);
-
- err = svn_ra_neon__request_dispatch(&code, request, NULL, body,
- 204 /* Created */,
- 404 /* Not Found */,
- pool);
- cleanup:
- svn_ra_neon__request_destroy(request);
- SVN_ERR(err);
- }
- else if (serr)
- return serr;
-
- /* Add this path to the valid targets hash. */
- add_valid_target(parent->cc, path, svn_nonrecursive);
-
- return SVN_NO_ERROR;
-}
-
-
-static svn_error_t * commit_add_dir(const char *path,
- void *parent_baton,
- const char *copyfrom_path,
- svn_revnum_t copyfrom_revision,
- apr_pool_t *dir_pool,
- void **child_baton)
-{
- resource_baton_t *parent = parent_baton;
- resource_baton_t *child;
- int code;
- const char *name = svn_relpath_basename(path, dir_pool);
- apr_pool_t *workpool = svn_pool_create(dir_pool);
- version_rsrc_t *rsrc = NULL;
- const char *mkcol_target = NULL;
-
- /* create a child object that contains all the resource urls */
- child = apr_pcalloc(dir_pool, sizeof(*child));
- child->pool = dir_pool;
- child->base_revision = SVN_INVALID_REVNUM;
- child->cc = parent->cc;
- child->created = TRUE;
- child->local_relpath = svn_relpath_join(parent->local_relpath,
- name, dir_pool);
-
- if (USING_HTTPV2_COMMIT_SUPPORT(parent->cc))
- {
- child->rsrc = NULL;
- child->txn_root_url = svn_path_url_add_component2(parent->txn_root_url,
- name, dir_pool);
- mkcol_target = child->txn_root_url;
- }
- else
- {
- /* check out the parent resource so that we can create the new collection
- as one of its children. */
- SVN_ERR(checkout_resource(parent->cc, parent->local_relpath,
- parent->rsrc, TRUE, NULL, FALSE, dir_pool));
- SVN_ERR(add_child(&rsrc, parent->cc, parent->rsrc, parent->local_relpath,
- name, 1, SVN_INVALID_REVNUM, workpool));
-
- child->rsrc = dup_resource(rsrc, dir_pool);
- child->txn_root_url = NULL;
- mkcol_target = child->rsrc->wr_url;
- }
-
- if (! copyfrom_path)
- {
- /* This a new directory with no history, so just create a new,
- empty collection */
- SVN_ERR(svn_ra_neon__simple_request(&code, parent->cc->ras, "MKCOL",
- mkcol_target, NULL, NULL,
- 201 /* Created */, 0, workpool));
- }
- else
- {
- /* This add has history, so we need to do a COPY. */
- SVN_ERR(copy_resource(parent->cc->ras, copyfrom_path, copyfrom_revision,
- mkcol_target, workpool));
-
- /* Remember that this object was copied. */
- child->copied = TRUE;
- }
-
- /* Add this path to the valid targets hash. */
- add_valid_target(parent->cc, path,
- copyfrom_path ? svn_recursive : svn_nonrecursive);
-
- svn_pool_destroy(workpool);
- *child_baton = child;
- return SVN_NO_ERROR;
-}
-
-static svn_error_t * commit_open_dir(const char *path,
- void *parent_baton,
- svn_revnum_t base_revision,
- apr_pool_t *dir_pool,
- void **child_baton)
-{
- resource_baton_t *parent = parent_baton;
- resource_baton_t *child = apr_pcalloc(dir_pool, sizeof(*child));
- const char *name = svn_relpath_basename(path, dir_pool);
- version_rsrc_t *rsrc = NULL;
-
- child->pool = dir_pool;
- child->base_revision = base_revision;
- child->cc = parent->cc;
- child->created = FALSE;
- child->local_relpath = svn_relpath_join(parent->local_relpath,
- name, dir_pool);
-
- if (USING_HTTPV2_COMMIT_SUPPORT(parent->cc))
- {
- child->rsrc = NULL;
- child->txn_root_url = svn_path_url_add_component2(parent->txn_root_url,
- name, dir_pool);
- }
- else
- {
- apr_pool_t *workpool = svn_pool_create(dir_pool);
-
- SVN_ERR(add_child(&rsrc, parent->cc, parent->rsrc, parent->local_relpath,
- name, 0, base_revision, workpool));
- child->rsrc = dup_resource(rsrc, dir_pool);
- child->txn_root_url = NULL;
-
- svn_pool_destroy(workpool);
- }
-
- /* We don't do any real work here -- open_dir() just sets up the
- baton for this directory for use later when we operate on one of
- its children. */
- *child_baton = child;
- return SVN_NO_ERROR;
-}
-
-static svn_error_t * commit_change_dir_prop(void *dir_baton,
- const char *name,
- const svn_string_t *value,
- apr_pool_t *pool)
-{
- resource_baton_t *dir = dir_baton;
-
- /* record the change. it will be applied at close_dir time. */
- record_prop_change(dir->pool, dir, name, value);
-
- if (! USING_HTTPV2_COMMIT_SUPPORT(dir->cc))
- {
- /* We might as well CHECKOUT now (if we haven't already). Why
- wait? */
- SVN_ERR(checkout_resource(dir->cc, dir->local_relpath, dir->rsrc,
- TRUE, NULL, FALSE, pool));
- }
-
- /* Add the path to the valid targets hash. */
- add_valid_target(dir->cc, dir->local_relpath, svn_nonrecursive);
-
- return SVN_NO_ERROR;
-}
-
-static svn_error_t * commit_close_dir(void *dir_baton,
- apr_pool_t *pool)
-{
- resource_baton_t *dir = dir_baton;
-
- /* Perform all of the property changes on the directory. Note that we
- checked out the directory when the first prop change was noted. */
- return do_proppatch(dir, pool);
-}
-
-static svn_error_t * commit_add_file(const char *path,
- void *parent_baton,
- const char *copyfrom_path,
- svn_revnum_t copyfrom_revision,
- apr_pool_t *file_pool,
- void **file_baton)
-{
- resource_baton_t *parent = parent_baton;
- resource_baton_t *file;
- const char *name = svn_relpath_basename(path, file_pool);
- apr_pool_t *workpool = svn_pool_create(file_pool);
- const char *put_target = NULL;
-
- /*
- ** To add a new file into the repository, we CHECKOUT the parent
- ** collection, then PUT the file as a member of the resulting working
- ** collection.
- **
- ** If the file was copied from elsewhere, then we will use the COPY
- ** method to copy into the working collection.
- */
-
- /* Construct a file_baton that contains all the resource urls. */
- file = apr_pcalloc(file_pool, sizeof(*file));
- file->base_revision = SVN_INVALID_REVNUM;
- file->pool = file_pool;
- file->cc = parent->cc;
- file->created = TRUE;
- file->local_relpath = svn_relpath_join(parent->local_relpath,
- name, file_pool);
-
- if (USING_HTTPV2_COMMIT_SUPPORT(parent->cc))
- {
- file->rsrc = NULL;
- file->txn_root_url = svn_path_url_add_component2(parent->txn_root_url,
- name, file_pool);
- put_target = file->txn_root_url;
- }
- else
- {
- version_rsrc_t *rsrc = NULL;
-
- /* Do the parent CHECKOUT first */
- SVN_ERR(checkout_resource(parent->cc, parent->local_relpath, parent->rsrc,
- TRUE, NULL, FALSE, workpool));
- SVN_ERR(add_child(&rsrc, parent->cc, parent->rsrc, parent->local_relpath,
- name, 1, SVN_INVALID_REVNUM, workpool));
-
- file->rsrc = dup_resource(rsrc, file_pool);
- file->txn_root_url = NULL;
- put_target = file->rsrc->wr_url;
- }
-
- if (parent->cc->lock_tokens)
- file->token = apr_hash_get(parent->cc->lock_tokens, path,
- APR_HASH_KEY_STRING);
-
- /* If the parent directory existed before this commit then there may
- be a file with this URL already. We need to ensure such a file
- does not exist, which we do by attempting a PROPFIND in both
- public URL (the path in HEAD) and the working URL (the path
- within the transaction), since we cannot differentiate between
- deleted items.
-
- ### For now, we'll assume that if this path has already been
- ### added to the valid targets hash, that addition occurred
- ### during the "delete" phase (if that's not the case, this
- ### editor is being driven incorrectly, as we should never visit
- ### the same path twice except in a delete+add situation). */
- if ((! parent->created)
- && (! apr_hash_get(file->cc->valid_targets, path, APR_HASH_KEY_STRING)))
- {
- static const ne_propname restype_props[] =
- {
- { "DAV:", "resourcetype" },
- { NULL }
- };
- svn_ra_neon__resource_t *res;
- const char *public_url;
- svn_error_t *err1, *err2;
-
- public_url = svn_path_url_add_component2(file->cc->ras->url->data,
- path, workpool);
- err1 = svn_ra_neon__get_props_resource(&res, parent->cc->ras, put_target,
- NULL, restype_props, workpool);
- err2 = svn_ra_neon__get_props_resource(&res, parent->cc->ras, public_url,
- NULL, restype_props, workpool);
- if (! err1 && ! err2)
- {
- /* If the PROPFINDs succeed the file already exists */
- return svn_error_createf(SVN_ERR_RA_DAV_ALREADY_EXISTS, NULL,
- _("File '%s' already exists"), path);
- }
- else if ((err1 && (err1->apr_err == SVN_ERR_FS_NOT_FOUND))
- || (err2 && (err2->apr_err == SVN_ERR_FS_NOT_FOUND)))
- {
- svn_error_clear(err1);
- svn_error_clear(err2);
- }
- else
- {
- /* A real error */
- return svn_error_compose_create(err1, err2);
- }
- }
-
- if (! copyfrom_path)
- {
- /* This a truly new file. */
-
- /* Wait for apply_txdelta() before doing a PUT. It might arrive
- a "long time" from now -- certainly after many other
- operations -- we don't want to start a PUT just yet. */
- }
- else
- {
- /* This add has history, so we need to do a COPY. */
- SVN_ERR(copy_resource(parent->cc->ras, copyfrom_path, copyfrom_revision,
- put_target, workpool));
-
- /* Remember that this object was copied. */
- file->copied = TRUE;
- }
-
- /* Add this path to the valid targets hash. */
- add_valid_target(parent->cc, path, svn_nonrecursive);
-
- svn_pool_destroy(workpool);
-
- /* return the file_baton */
- *file_baton = file;
- return SVN_NO_ERROR;
-}
-
-static svn_error_t * commit_open_file(const char *path,
- void *parent_baton,
- svn_revnum_t base_revision,
- apr_pool_t *file_pool,
- void **file_baton)
-{
- resource_baton_t *parent = parent_baton;
- resource_baton_t *file;
- const char *name = svn_relpath_basename(path, file_pool);
-
- file = apr_pcalloc(file_pool, sizeof(*file));
- file->pool = file_pool;
- file->base_revision = base_revision;
- file->cc = parent->cc;
- file->created = FALSE;
- file->local_relpath = svn_relpath_join(parent->local_relpath,
- name, file_pool);
-
- if (parent->cc->lock_tokens)
- file->token = apr_hash_get(parent->cc->lock_tokens, path,
- APR_HASH_KEY_STRING);
-
- if (USING_HTTPV2_COMMIT_SUPPORT(parent->cc))
- {
- file->rsrc = NULL;
- file->txn_root_url = svn_path_url_add_component2(parent->txn_root_url,
- name, file_pool);
- }
- else
- {
- version_rsrc_t *rsrc = NULL;
- apr_pool_t *workpool = svn_pool_create(file_pool);
-
- SVN_ERR(add_child(&rsrc, parent->cc, parent->rsrc, parent->local_relpath,
- name, 0, base_revision, workpool));
- file->rsrc = dup_resource(rsrc, file_pool);
- file->txn_root_url = NULL;
-
- /* Do the CHECKOUT now. */
- SVN_ERR(checkout_resource(parent->cc, file->local_relpath, file->rsrc,
- TRUE, file->token, FALSE, workpool));
-
- svn_pool_destroy(workpool);
- }
-
- /* Wait for apply_txdelta() before doing a PUT. It might arrive
- a "long time" from now -- certainly after many other
- operations -- we don't want to start a PUT just yet. */
-
- *file_baton = file;
- return SVN_NO_ERROR;
-}
-
-static svn_error_t * commit_stream_write(void *baton,
- const char *data,
- apr_size_t *len)
-{
- put_baton_t *pb = baton;
- svn_ra_neon__session_t *ras = pb->ras;
- apr_status_t status;
-
- if (ras->callbacks && ras->callbacks->cancel_func)
- SVN_ERR(ras->callbacks->cancel_func(ras->callback_baton));
-
- /* drop the data into our temp file */
- status = apr_file_write_full(pb->tmpfile, data, *len, NULL);
- if (status)
- return svn_error_wrap_apr(status,
- _("Could not write svndiff to temp file"));
-
- if (ras->progress_func)
- {
- pb->progress += *len;
- ras->progress_func(pb->progress, -1, ras->progress_baton, pb->pool);
- }
-
- return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-commit_apply_txdelta(void *file_baton,
- const char *base_checksum,
- apr_pool_t *pool,
- svn_txdelta_window_handler_t *handler,
- void **handler_baton)
-{
- resource_baton_t *file = file_baton;
- put_baton_t *baton;
- svn_stream_t *stream;
-
- baton = apr_pcalloc(file->pool, sizeof(*baton));
- baton->ras = file->cc->ras;
- baton->pool = file->pool;
- file->put_baton = baton;
-
- if (base_checksum)
- baton->base_checksum = apr_pstrdup(file->pool, base_checksum);
- else
- baton->base_checksum = NULL;
-
- /* ### oh, hell. Neon's request body support is either text (a C string),
- ### or a FILE*. since we are getting binary data, we must use a FILE*
- ### for now. isn't that special? */
- SVN_ERR(svn_io_open_unique_file3(&baton->tmpfile, NULL, NULL,
- svn_io_file_del_on_pool_cleanup,
- file->pool, pool));
-
- stream = svn_stream_create(baton, pool);
- svn_stream_set_write(stream, commit_stream_write);
-
- svn_txdelta_to_svndiff2(handler, handler_baton, stream, 0, pool);
-
- /* Add this path to the valid targets hash. */
- add_valid_target(file->cc, file->local_relpath, svn_nonrecursive);
-
- return SVN_NO_ERROR;
-}
-
-static svn_error_t * commit_change_file_prop(void *file_baton,
- const char *name,
- const svn_string_t *value,
- apr_pool_t *pool)
-{
- resource_baton_t *file = file_baton;
-
- /* Record the change. It will be applied at close_file() time. */
- record_prop_change(file->pool, file, name, value);
-
- if (! USING_HTTPV2_COMMIT_SUPPORT(file->cc))
- {
- /* We might as well CHECKOUT now (if we haven't already). Why
- wait? */
- SVN_ERR(checkout_resource(file->cc, file->local_relpath, file->rsrc,
- TRUE, file->token, FALSE, pool));
- }
-
- /* Add the path to the valid targets hash. */
- add_valid_target(file->cc, file->local_relpath, svn_nonrecursive);
-
- return SVN_NO_ERROR;
-}
-
-static svn_error_t * commit_close_file(void *file_baton,
- const char *text_checksum,
- apr_pool_t *pool)
-{
- resource_baton_t *file = file_baton;
- commit_ctx_t *cc = file->cc;
-
- /* If this is a newly added file, not copied, and the editor driver
- didn't call apply_textdelta(), then we'll pretend they *did* call
- apply_textdelta() and described a zero-byte empty file. */
- if ((! file->put_baton) && file->created && (! file->copied))
- {
- /* Make a dummy put_baton, with NULL fields to indicate that
- we're dealing with a content-less (zero-byte) file. */
- file->put_baton = apr_pcalloc(file->pool, sizeof(*(file->put_baton)));
- }
-
- if (file->put_baton)
- {
- svn_error_t *err = SVN_NO_ERROR;
- put_baton_t *pb = file->put_baton;
- apr_hash_t *extra_headers;
- svn_ra_neon__request_t *request;
- int code;
- const char *public_url =
- svn_path_url_add_component2(file->cc->ras->url->data,
- file->local_relpath, pool);
- const char *put_target =
- USING_HTTPV2_COMMIT_SUPPORT(cc) ? file->txn_root_url
- : file->rsrc->wr_url;
-
- /* create/prep the request */
- SVN_ERR(svn_ra_neon__request_create(&request, cc->ras, "PUT",
- put_target, pool));
-
- extra_headers = apr_hash_make(request->pool);
-
- if (file->token)
- svn_ra_neon__set_header(extra_headers, "If",
- apr_psprintf(pool, "<%s> (<%s>)",
- public_url, file->token));
-
- if (pb->base_checksum)
- svn_ra_neon__set_header(extra_headers,
- SVN_DAV_BASE_FULLTEXT_MD5_HEADER,
- pb->base_checksum);
-
- if (text_checksum)
- svn_ra_neon__set_header(extra_headers,
- SVN_DAV_RESULT_FULLTEXT_MD5_HEADER,
- text_checksum);
-
- if (SVN_IS_VALID_REVNUM(file->base_revision))
- svn_ra_neon__set_header(extra_headers,
- SVN_DAV_VERSION_NAME_HEADER,
- apr_psprintf(pool, "%ld", file->base_revision));
-
- if (pb->tmpfile)
- {
- svn_ra_neon__set_header(extra_headers, "Content-Type",
- SVN_SVNDIFF_MIME_TYPE);
-
- /* Give the file to neon. The provider will rewind the file. */
- err = svn_ra_neon__set_neon_body_provider(request, pb->tmpfile);
- if (err)
- goto cleanup;
- }
- else
- {
- ne_set_request_body_buffer(request->ne_req, "", 0);
- }
-
- /* run the request and get the resulting status code (and svn_error_t) */
- err = svn_ra_neon__request_dispatch(&code, request, extra_headers, NULL,
- 201 /* Created */,
- 204 /* No Content */,
- pool);
-
- if (err && (err->apr_err == SVN_ERR_RA_DAV_REQUEST_FAILED))
- {
- switch (code)
- {
- case 423:
- err = svn_error_createf(SVN_ERR_RA_NOT_LOCKED, err,
- _("No lock on path '%s'"
- " (Status %d on PUT Request)"),
- put_target, code);
- default:
- break;
- }
- }
- cleanup:
- svn_ra_neon__request_destroy(request);
- SVN_ERR(err);
-
- if (pb->tmpfile)
- {
- /* We're done with the file. this should delete it. Note: it
- isn't a big deal if this line is never executed -- the pool
- will eventually get it. We're just being proactive here. */
- (void) apr_file_close(pb->tmpfile);
- }
- }
-
- /* Perform all of the property changes on the file. Note that we
- checked out the file when the first prop change was noted. */
- return do_proppatch(file, pool);
-}
-
-
-static svn_error_t * commit_close_edit(void *edit_baton,
- apr_pool_t *pool)
-{
- commit_ctx_t *cc = edit_baton;
- svn_commit_info_t *commit_info = svn_create_commit_info(pool);
- const char *merge_resource_url =
- USING_HTTPV2_COMMIT_SUPPORT(cc) ? cc->txn_url : cc->activity_url;
-
- SVN_ERR(svn_ra_neon__merge_activity(&(commit_info->revision),
- &(commit_info->date),
- &(commit_info->author),
- &(commit_info->post_commit_err),
- cc->ras,
- cc->ras->root.path,
- merge_resource_url,
- cc->valid_targets,
- cc->lock_tokens,
- cc->keep_locks,
- cc->ras->callbacks->push_wc_prop == NULL,
- pool));
-
- /* DELETE any activity that might be left on the server. */
- if (cc->activity_url)
- {
- SVN_ERR(svn_ra_neon__simple_request(NULL, cc->ras, "DELETE",
- cc->activity_url, NULL, NULL,
- 204 /* No Content */,
- 404 /* Not Found */, pool));
- }
-
- if (cc->callback && commit_info->revision != SVN_INVALID_REVNUM)
- SVN_ERR(cc->callback(commit_info, cc->callback_baton, pool));
-
- return SVN_NO_ERROR;
-}
-
-
-static svn_error_t * commit_abort_edit(void *edit_baton,
- apr_pool_t *pool)
-{
- commit_ctx_t *cc = edit_baton;
- const char *delete_target = NULL;
-
- /* If we started an activity and/or transaction, we need to (try to)
- delete it. (If it doesn't exist, that's okay, too.) */
- if (USING_HTTPV2_COMMIT_SUPPORT(cc))
- delete_target = cc->txn_url;
- else
- delete_target = cc->activity_url;
-
- if (delete_target)
- SVN_ERR(svn_ra_neon__simple_request(NULL, cc->ras, "DELETE",
- delete_target, NULL, NULL,
- 204 /* No Content */,
- 404 /* Not Found */, pool));
- return SVN_NO_ERROR;
-}
-
-
-svn_error_t * svn_ra_neon__get_commit_editor(svn_ra_session_t *session,
- const svn_delta_editor_t **editor,
- void **edit_baton,
- apr_hash_t *revprop_table,
- svn_commit_callback2_t callback,
- void *callback_baton,
- apr_hash_t *lock_tokens,
- svn_boolean_t keep_locks,
- apr_pool_t *pool)
-{
- svn_ra_neon__session_t *ras = session->priv;
- svn_delta_editor_t *commit_editor;
- commit_ctx_t *cc;
- apr_hash_index_t *hi;
-
- /* Build the main commit editor's baton. */
- cc = apr_pcalloc(pool, sizeof(*cc));
- cc->pool = pool;
- cc->ras = ras;
- cc->valid_targets = apr_hash_make(pool);
- cc->callback = callback;
- cc->callback_baton = callback_baton;
- cc->lock_tokens = lock_tokens;
- cc->keep_locks = keep_locks;
-
- /* Dup the revprops into POOL, in case the caller clears the pool
- they're in before driving the editor that this function returns. */
- cc->revprop_table = apr_hash_make(pool);
- for (hi = apr_hash_first(pool, revprop_table); hi; hi = apr_hash_next(hi))
- {
- const void *key;
- apr_ssize_t klen;
- void *val;
-
- apr_hash_this(hi, &key, &klen, &val);
- apr_hash_set(cc->revprop_table, apr_pstrdup(pool, key), klen,
- svn_string_dup(val, pool));
- }
-
- /* Calculate the commit anchor's repository relpath. */
- SVN_ERR(svn_ra_neon__get_path_relative_to_root(session,
- &(cc->anchor_relpath),
- ras->url->data, pool));
-
- /* Set up the editor. */
- commit_editor = svn_delta_default_editor(pool);
- commit_editor->open_root = commit_open_root;
- commit_editor->delete_entry = commit_delete_entry;
- commit_editor->add_directory = commit_add_dir;
- commit_editor->open_directory = commit_open_dir;
- commit_editor->change_dir_prop = commit_change_dir_prop;
- commit_editor->close_directory = commit_close_dir;
- commit_editor->add_file = commit_add_file;
- commit_editor->open_file = commit_open_file;
- commit_editor->apply_textdelta = commit_apply_txdelta;
- commit_editor->change_file_prop = commit_change_file_prop;
- commit_editor->close_file = commit_close_file;
- commit_editor->close_edit = commit_close_edit;
- commit_editor->abort_edit = commit_abort_edit;
-
- *editor = commit_editor;
- *edit_baton = cc;
- return SVN_NO_ERROR;
-}
diff --git a/subversion/libsvn_ra_neon/fetch.c b/subversion/libsvn_ra_neon/fetch.c
deleted file mode 100644
index 0b8ced0..0000000
--- a/subversion/libsvn_ra_neon/fetch.c
+++ /dev/null
@@ -1,2814 +0,0 @@
-/*
- * fetch.c : routines for fetching updates and checkouts
- *
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- * ====================================================================
- */
-
-
-
-#include <stdlib.h> /* for free() */
-
-#define APR_WANT_STRFUNC
-#include <apr_want.h> /* for strcmp() */
-
-#include <apr_pools.h>
-#include <apr_tables.h>
-#include <apr_strings.h>
-#include <apr_xml.h>
-
-#include <ne_basic.h>
-
-#include "svn_error.h"
-#include "svn_pools.h"
-#include "svn_delta.h"
-#include "svn_io.h"
-#include "svn_base64.h"
-#include "svn_ra.h"
-#include "../libsvn_ra/ra_loader.h"
-#include "svn_dirent_uri.h"
-#include "svn_path.h"
-#include "svn_xml.h"
-#include "svn_dav.h"
-#include "svn_time.h"
-#include "svn_props.h"
-
-#include "private/svn_dav_protocol.h"
-#include "svn_private_config.h"
-
-#include "ra_neon.h"
-
-
-typedef struct file_read_ctx_t {
- apr_pool_t *pool;
-
- /* these two are the handler that the editor gave us */
- svn_txdelta_window_handler_t handler;
- void *handler_baton;
-
- /* if we're receiving an svndiff, this is a parser which places the
- resulting windows into the above handler/baton. */
- svn_stream_t *stream;
-
-} file_read_ctx_t;
-
-typedef struct file_write_ctx_t {
- svn_boolean_t do_checksum; /* only accumulate checksum if set */
- svn_checksum_ctx_t *checksum_ctx; /* accumulating checksum of file contents */
- svn_stream_t *stream; /* stream to write file contents to */
-} file_write_ctx_t;
-
-typedef struct custom_get_ctx_t {
- svn_ra_neon__request_t *req; /* Used to propagate errors out of the reader */
- int checked_type; /* have we processed ctype yet? */
-
- void *subctx;
-} custom_get_ctx_t;
-
-typedef svn_error_t * (*prop_setter_t)(void *baton,
- const char *name,
- const svn_string_t *value,
- apr_pool_t *pool);
-
-typedef struct dir_item_t {
- /* The baton returned by the editor's open_root/open_dir */
- void *baton;
-
- /* Should we fetch properties for this directory when the close tag
- is found? */
- svn_boolean_t fetch_props;
-
- /* The version resource URL for this directory. */
- const char *vsn_url;
-
- /* A buffer which stores the relative directory name. We also use this
- for temporary construction of relative file names. */
- svn_stringbuf_t *pathbuf;
-
- /* If a directory, this may contain a hash of prophashes returned
- from doing a depth 1 PROPFIND. */
- apr_hash_t *children;
-
- /* A subpool. It's about memory. Ya dig? */
- apr_pool_t *pool;
-
-} dir_item_t;
-
-typedef struct report_baton_t {
- svn_ra_neon__session_t *ras;
-
- apr_file_t *tmpfile;
-
- /* The pool of the report baton; used for things that must live during the
- whole editing operation. */
- apr_pool_t *pool;
- /* Pool initialized when the report_baton is created, and meant for
- quick scratchwork. This is like a loop pool, but since the loop
- that drives ra_neon callbacks is in the wrong scope for us to use
- the normal loop pool idiom, we must resort to this. Always clear
- this pool right after using it; only YOU can prevent forest fires. */
- apr_pool_t *scratch_pool;
-
- svn_boolean_t fetch_content;
- svn_boolean_t fetch_props;
-
- const svn_delta_editor_t *editor;
- void *edit_baton;
-
- /* Stack of directory batons/vsn_urls. */
- apr_array_header_t *dirs;
-
-#define TOP_DIR(rb) (APR_ARRAY_IDX((rb)->dirs, (rb)->dirs->nelts - 1, \
- dir_item_t))
-#define DIR_DEPTH(rb) ((rb)->dirs->nelts)
-#define PUSH_BATON(rb,b) (APR_ARRAY_PUSH((rb)->dirs, void *) = (b))
-
- /* These items are only valid inside add- and open-file tags! */
- void *file_baton;
- apr_pool_t *file_pool;
- const char *result_checksum; /* hex md5 digest of result; may be null */
-
- svn_stringbuf_t *namestr;
- svn_stringbuf_t *cpathstr;
- svn_stringbuf_t *href;
-
- /* Empty string means no encoding, "base64" means base64. */
- svn_stringbuf_t *encoding;
-
- /* These are used when receiving an inline txdelta, and null at all
- other times. */
- svn_txdelta_window_handler_t whandler;
- void *whandler_baton;
- svn_stream_t *svndiff_decoder;
- svn_stream_t *base64_decoder;
-
- /* A generic accumulator for elements that have small bits of cdata,
- like md5_checksum, href, etc. Uh, or where our own API gives us
- no choice about holding them in memory, as with prop values, ahem.
- This is always the empty stringbuf when not in use. */
- svn_stringbuf_t *cdata_accum;
-
- /* Are we inside a resource element? */
- svn_boolean_t in_resource;
- /* Valid if in_resource is true. */
- svn_stringbuf_t *current_wcprop_path;
- svn_boolean_t is_switch;
-
- /* Named target, or NULL if none. For example, in 'svn up wc/foo',
- this is "wc/foo", but in 'svn up' it is "".
-
- The target helps us determine whether a response received from
- the server should be acted on. Take 'svn up wc/foo': the server
- may send back a new vsn-rsrc-url wcprop for 'wc' (because the
- report had to be anchored there just in case the update deletes
- wc/foo). While this is correct behavior for the server, the
- client should ignore the new wcprop, because the client knows
- it's not really updating the top level directory. */
- const char *target;
-
- /* Whether the server should try to send copyfrom arguments. */
- svn_boolean_t send_copyfrom_args;
-
- /* Use an intermediate tmpfile for the REPORT response. */
- svn_boolean_t spool_response;
-
- /* If this report is for a switch, update, or status (but not a
- merge/diff), then we made the update report request with the "send-all"
- attribute. The server reponds to this by putting a "send-all" attribute
- in its response. If we see that attribute, we set this to true,
- otherwise, it stays false. */
- svn_boolean_t receiving_all;
-
- /* Hash mapping 'const char *' paths -> 'const char *' lock tokens. */
- apr_hash_t *lock_tokens;
-
-} report_baton_t;
-
-static const svn_ra_neon__xml_elm_t report_elements[] =
-{
- { SVN_XML_NAMESPACE, "update-report", ELEM_update_report, 0 },
- { SVN_XML_NAMESPACE, "resource-walk", ELEM_resource_walk, 0 },
- { SVN_XML_NAMESPACE, "resource", ELEM_resource, 0 },
- { SVN_XML_NAMESPACE, "target-revision", ELEM_target_revision, 0 },
- { SVN_XML_NAMESPACE, "open-directory", ELEM_open_directory, 0 },
- { SVN_XML_NAMESPACE, "add-directory", ELEM_add_directory, 0 },
- { SVN_XML_NAMESPACE, "absent-directory", ELEM_absent_directory, 0 },
- { SVN_XML_NAMESPACE, "open-file", ELEM_open_file, 0 },
- { SVN_XML_NAMESPACE, "add-file", ELEM_add_file, 0 },
- { SVN_XML_NAMESPACE, "txdelta", ELEM_txdelta, 0 },
- { SVN_XML_NAMESPACE, "absent-file", ELEM_absent_file, 0 },
- { SVN_XML_NAMESPACE, "delete-entry", ELEM_delete_entry, 0 },
- { SVN_XML_NAMESPACE, "fetch-props", ELEM_fetch_props, 0 },
- { SVN_XML_NAMESPACE, "set-prop", ELEM_set_prop, 0 },
- { SVN_XML_NAMESPACE, "remove-prop", ELEM_remove_prop, 0 },
- { SVN_XML_NAMESPACE, "fetch-file", ELEM_fetch_file, 0 },
- { SVN_XML_NAMESPACE, "prop", ELEM_SVN_prop, 0 },
- { SVN_DAV_PROP_NS_DAV, "repository-uuid",
- ELEM_repository_uuid, SVN_RA_NEON__XML_CDATA },
-
- { SVN_DAV_PROP_NS_DAV, "md5-checksum", ELEM_md5_checksum,
- SVN_RA_NEON__XML_CDATA },
-
- { "DAV:", "version-name", ELEM_version_name, SVN_RA_NEON__XML_CDATA },
- { "DAV:", SVN_DAV__CREATIONDATE, ELEM_creationdate, SVN_RA_NEON__XML_CDATA },
- { "DAV:", "creator-displayname", ELEM_creator_displayname,
- SVN_RA_NEON__XML_CDATA },
-
- { "DAV:", "checked-in", ELEM_checked_in, 0 },
- { "DAV:", "href", ELEM_href, SVN_RA_NEON__XML_CDATA },
-
- { NULL }
-};
-
-static svn_error_t *simple_store_vsn_url(const char *vsn_url,
- void *baton,
- prop_setter_t setter,
- apr_pool_t *pool)
-{
- /* store the version URL as a property */
- SVN_ERR_W((*setter)(baton, SVN_RA_NEON__LP_VSN_URL,
- svn_string_create(vsn_url, pool), pool),
- _("Could not save the URL of the version resource"));
-
- return NULL;
-}
-
-/* helper func which maps certain DAV: properties to svn:wc:
- properties. Used during checkouts and updates. */
-static svn_error_t *set_special_wc_prop(const char *key,
- const svn_string_t *val,
- prop_setter_t setter,
- void *baton,
- apr_pool_t *pool)
-{
- const char *name = NULL;
-
- if (strcmp(key, SVN_RA_NEON__PROP_VERSION_NAME) == 0)
- name = SVN_PROP_ENTRY_COMMITTED_REV;
- else if (strcmp(key, SVN_RA_NEON__PROP_CREATIONDATE) == 0)
- name = SVN_PROP_ENTRY_COMMITTED_DATE;
- else if (strcmp(key, SVN_RA_NEON__PROP_CREATOR_DISPLAYNAME) == 0)
- name = SVN_PROP_ENTRY_LAST_AUTHOR;
- else if (strcmp(key, SVN_RA_NEON__PROP_REPOSITORY_UUID) == 0)
- name = SVN_PROP_ENTRY_UUID;
-
- /* If we got a name we care about it, call the setter function. */
- if (name)
- SVN_ERR((*setter)(baton, name, val, pool));
-
- return SVN_NO_ERROR;
-}
-
-
-static svn_error_t *add_props(apr_hash_t *props,
- prop_setter_t setter,
- void *baton,
- apr_pool_t *pool)
-{
- apr_hash_index_t *hi;
-
- for (hi = apr_hash_first(pool, props); hi; hi = apr_hash_next(hi))
- {
- const void *vkey;
- void *vval;
- const char *key;
- const svn_string_t *val;
-
- apr_hash_this(hi, &vkey, NULL, &vval);
- key = vkey;
- val = vval;
-
-#define NSLEN (sizeof(SVN_DAV_PROP_NS_CUSTOM) - 1)
- if (strncmp(key, SVN_DAV_PROP_NS_CUSTOM, NSLEN) == 0)
- {
- /* for props in the 'custom' namespace, we strip the
- namespace and just use whatever name the user gave the
- property. */
- SVN_ERR((*setter)(baton, key + NSLEN, val, pool));
- continue;
- }
-#undef NSLEN
-
-#define NSLEN (sizeof(SVN_DAV_PROP_NS_SVN) - 1)
- if (strncmp(key, SVN_DAV_PROP_NS_SVN, NSLEN) == 0)
- {
- /* This property is an 'svn:' prop, recognized by client, or
- server, or both. Convert the URI namespace into normal
- 'svn:' prefix again before pushing it at the wc. */
- SVN_ERR((*setter)(baton, apr_pstrcat(pool, SVN_PROP_PREFIX,
- key + NSLEN, (char *)NULL),
- val, pool));
- }
-#undef NSLEN
-
- else
- {
- /* If we get here, then we have a property that is neither
- in the 'custom' space, nor in the 'svn' space. So it
- must be either in the 'network' space or 'DAV:' space.
- The following routine converts a handful of DAV: props
- into 'svn:wc:' or 'svn:entry:' props that libsvn_wc
- wants. */
- SVN_ERR(set_special_wc_prop(key, val, setter, baton, pool));
- }
- }
- return SVN_NO_ERROR;
-}
-
-
-static svn_error_t *custom_get_request(svn_ra_neon__session_t *ras,
- const char *url,
- const char *editor_relpath,
- svn_ra_neon__block_reader reader,
- void *subctx,
- svn_ra_get_wc_prop_func_t get_wc_prop,
- void *cb_baton,
- svn_boolean_t use_base,
- apr_pool_t *pool)
-{
- custom_get_ctx_t cgc = { 0 };
- const char *delta_base = NULL;
- svn_ra_neon__request_t *request;
- svn_error_t *err;
-
- if (use_base && editor_relpath != NULL)
- {
- /* See if we can get a version URL for this resource. This will
- refer to what we already have in the working copy, thus we
- can get a diff against this particular resource. */
-
- if (get_wc_prop != NULL)
- {
- const svn_string_t *value;
-
- SVN_ERR(get_wc_prop(cb_baton, editor_relpath,
- SVN_RA_NEON__LP_VSN_URL,
- &value, pool));
-
- delta_base = value ? value->data : NULL;
- }
- }
-
- SVN_ERR(svn_ra_neon__request_create(&request, ras, "GET", url, pool));
-
- if (delta_base)
- {
- /* The HTTP delta draft uses an If-None-Match header holding an
- entity tag corresponding to the copy we have. It is much more
- natural for us to use a version URL to specify what we have.
- Thus, we want to use the If: header to specify the URL. But
- mod_dav sees all "State-token" items as lock tokens. When we
- get mod_dav updated and the backend APIs expanded, then we
- can switch to using the If: header. For now, use a custom
- header to specify the version resource to use as the base. */
- ne_add_request_header(request->ne_req,
- SVN_DAV_DELTA_BASE_HEADER, delta_base);
- }
-
- svn_ra_neon__add_response_body_reader(request, ne_accept_2xx, reader, &cgc);
-
- /* complete initialization of the body reading context */
- cgc.req = request;
- cgc.subctx = subctx;
-
- /* run the request */
- err = svn_ra_neon__request_dispatch(NULL, request, NULL, NULL,
- 200 /* OK */,
- 226 /* IM Used */,
- pool);
- svn_ra_neon__request_destroy(request);
-
- /* The request runner raises internal errors before Neon errors,
- pass a returned error to our callers */
-
- return err;
-}
-
-/* This implements the svn_ra_neon__block_reader() callback interface. */
-static svn_error_t *
-fetch_file_reader(void *userdata, const char *buf, size_t len)
-{
- custom_get_ctx_t *cgc = userdata;
- file_read_ctx_t *frc = cgc->subctx;
-
- if (len == 0)
- {
- /* file is complete. */
- return 0;
- }
-
- if (!cgc->checked_type)
- {
- ne_content_type ctype = { 0 };
- int rv = ne_get_content_type(cgc->req->ne_req, &ctype);
-
- if (rv != 0)
- return
- svn_error_create(SVN_ERR_RA_DAV_RESPONSE_HEADER_BADNESS, NULL,
- _("Could not get content-type from response"));
-
- /* Neon guarantees non-NULL values when rv==0 */
- if (!strcmp(ctype.type, "application")
- && !strcmp(ctype.subtype, "vnd.svn-svndiff"))
- {
- /* we are receiving an svndiff. set things up. */
- frc->stream = svn_txdelta_parse_svndiff(frc->handler,
- frc->handler_baton,
- TRUE,
- frc->pool);
- }
-
- if (ctype.value)
- free(ctype.value);
-
- cgc->checked_type = 1;
- }
-
- if (frc->stream == NULL)
- {
- /* receiving plain text. construct a window for it. */
-
- svn_txdelta_window_t window = { 0 };
- svn_txdelta_op_t op;
- svn_string_t data;
-
- data.data = buf;
- data.len = len;
-
- op.action_code = svn_txdelta_new;
- op.offset = 0;
- op.length = len;
-
- window.tview_len = len; /* result will be this long */
- window.num_ops = 1;
- window.ops = &op;
- window.new_data = &data;
-
- /* We can't really do anything useful if we get an error here. Pass
- it off to someone who can. */
- SVN_RA_NEON__REQ_ERR
- (cgc->req,
- (*frc->handler)(&window, frc->handler_baton));
- }
- else
- {
- /* receiving svndiff. feed it to the svndiff parser. */
-
- apr_size_t written = len;
-
- SVN_ERR(svn_stream_write(frc->stream, buf, &written));
-
- /* ### the svndiff stream parser does not obey svn_stream semantics
- ### in its write handler. it does not output the number of bytes
- ### consumed by the handler. specifically, it may decrement the
- ### number by 4 for the header, then never touch it again. that
- ### makes it appear like an incomplete write.
- ### disable this check for now. the svndiff parser actually does
- ### consume all bytes, all the time.
- */
-#if 0
- if (written != len && cgc->err == NULL)
- cgc->err = svn_error_createf(SVN_ERR_INCOMPLETE_DATA, NULL,
- "Unable to completely write the svndiff "
- "data to the parser stream "
- "(wrote " APR_SIZE_T_FMT " "
- "of " APR_SIZE_T_FMT " bytes)",
- written, len);
-#endif
- }
-
- return 0;
-}
-
-static svn_error_t *simple_fetch_file(svn_ra_neon__session_t *ras,
- const char *url,
- const char *relpath,
- svn_boolean_t text_deltas,
- void *file_baton,
- const char *base_checksum,
- const svn_delta_editor_t *editor,
- svn_ra_get_wc_prop_func_t get_wc_prop,
- void *cb_baton,
- apr_pool_t *pool)
-{
- file_read_ctx_t frc = { 0 };
-
- SVN_ERR_W((*editor->apply_textdelta)(file_baton,
- base_checksum,
- pool,
- &frc.handler,
- &frc.handler_baton),
- _("Could not save file"));
-
- /* Only bother with text-deltas if our caller cares. */
- if (! text_deltas)
- return (*frc.handler)(NULL, frc.handler_baton);
-
- frc.pool = pool;
-
- SVN_ERR(custom_get_request(ras, url, relpath,
- fetch_file_reader, &frc,
- get_wc_prop, cb_baton,
- TRUE, pool));
-
- /* close the handler, since the file reading completed successfully. */
- if (frc.stream)
- return svn_stream_close(frc.stream);
- else
- return (*frc.handler)(NULL, frc.handler_baton);
-}
-
-/* Helper for svn_ra_neon__get_file. This implements
- the svn_ra_neon__block_reader() callback interface. */
-static svn_error_t *
-get_file_reader(void *userdata, const char *buf, size_t len)
-{
- custom_get_ctx_t *cgc = userdata;
-
- /* The stream we want to push data at. */
- file_write_ctx_t *fwc = cgc->subctx;
- svn_stream_t *stream = fwc->stream;
-
- if (fwc->do_checksum)
- SVN_ERR(svn_checksum_update(fwc->checksum_ctx, buf, len));
-
- /* Write however many bytes were passed in by neon. */
- return svn_stream_write(stream, buf, &len);
-}
-
-
-/* minor helper for svn_ra_neon__get_file, of type prop_setter_t */
-static svn_error_t *
-add_prop_to_hash(void *baton,
- const char *name,
- const svn_string_t *value,
- apr_pool_t *pool)
-{
- apr_hash_t *ht = (apr_hash_t *) baton;
- apr_hash_set(ht, name, APR_HASH_KEY_STRING, value);
- return SVN_NO_ERROR;
-}
-
-
-/* Helper for svn_ra_neon__get_file(), svn_ra_neon__get_dir(), and
- svn_ra_neon__rev_proplist().
-
- Loop over the properties in RSRC->propset, examining namespaces and
- such to filter Subversion, custom, etc. properties.
-
- User-visible props get added to the PROPS hash (alloced in POOL).
-
- If ADD_ENTRY_PROPS is true, then "special" working copy entry-props
- are added to the hash by set_special_wc_prop().
-*/
-static svn_error_t *
-filter_props(apr_hash_t *props,
- svn_ra_neon__resource_t *rsrc,
- svn_boolean_t add_entry_props,
- apr_pool_t *pool)
-{
- apr_hash_index_t *hi;
-
- for (hi = apr_hash_first(pool, rsrc->propset); hi; hi = apr_hash_next(hi))
- {
- const void *key;
- const char *name;
- void *val;
- const svn_string_t *value;
-
- apr_hash_this(hi, &key, NULL, &val);
- name = key;
- value = svn_string_dup(val, pool);
-
- /* If the property is in the 'custom' namespace, then it's a
- normal user-controlled property coming from the fs. Just
- strip off this prefix and add to the hash. */
-#define NSLEN (sizeof(SVN_DAV_PROP_NS_CUSTOM) - 1)
- if (strncmp(name, SVN_DAV_PROP_NS_CUSTOM, NSLEN) == 0)
- {
- apr_hash_set(props, name + NSLEN, APR_HASH_KEY_STRING, value);
- continue;
- }
-#undef NSLEN
-
- /* If the property is in the 'svn' namespace, then it's a
- normal user-controlled property coming from the fs. Just
- strip off the URI prefix, add an 'svn:', and add to the hash. */
-#define NSLEN (sizeof(SVN_DAV_PROP_NS_SVN) - 1)
- if (strncmp(name, SVN_DAV_PROP_NS_SVN, NSLEN) == 0)
- {
- apr_hash_set(props,
- apr_pstrcat(pool, SVN_PROP_PREFIX, name + NSLEN,
- (char *)NULL),
- APR_HASH_KEY_STRING,
- value);
- continue;
- }
-#undef NSLEN
- else if (strcmp(name, SVN_RA_NEON__PROP_CHECKED_IN) == 0)
- {
- /* For files, we currently only have one 'wc' prop. */
- apr_hash_set(props, SVN_RA_NEON__LP_VSN_URL,
- APR_HASH_KEY_STRING, value);
- }
- else
- {
- /* If it's one of the 'entry' props, this func will
- recognize the DAV: name & add it to the hash mapped to a
- new name recognized by libsvn_wc. */
- if (add_entry_props)
- SVN_ERR(set_special_wc_prop(name, value, add_prop_to_hash,
- props, pool));
- }
- }
-
- return SVN_NO_ERROR;
-}
-
-static const ne_propname restype_props[] =
-{
- { "DAV:", "resourcetype" },
- { NULL }
-};
-
-static const ne_propname restype_checksum_props[] =
-{
- { "DAV:", "resourcetype" },
- { SVN_DAV_PROP_NS_DAV, "md5-checksum" },
- { NULL }
-};
-
-svn_error_t *svn_ra_neon__get_file(svn_ra_session_t *session,
- const char *path,
- svn_revnum_t revision,
- svn_stream_t *stream,
- svn_revnum_t *fetched_rev,
- apr_hash_t **props,
- apr_pool_t *pool)
-{
- svn_ra_neon__resource_t *rsrc;
- const char *final_url;
- svn_ra_neon__session_t *ras = session->priv;
- const char *url = svn_path_url_add_component2(ras->url->data, path, pool);
- const ne_propname *which_props;
-
- /* If the revision is invalid (head), then we're done. Just fetch
- the public URL, because that will always get HEAD. */
- if ((! SVN_IS_VALID_REVNUM(revision)) && (fetched_rev == NULL))
- final_url = url;
-
- /* If the revision is something specific, we need to create a bc_url. */
- else
- {
- svn_revnum_t got_rev;
- const char *bc_url;
- const char *bc_relative;
-
- SVN_ERR(svn_ra_neon__get_baseline_info(&bc_url, &bc_relative, &got_rev,
- ras, url, revision, pool));
- final_url = svn_path_url_add_component2(bc_url, bc_relative, pool);
- if (fetched_rev != NULL)
- *fetched_rev = got_rev;
- }
-
- if (props)
- {
- /* Request all properties if caller requested them. */
- which_props = NULL;
- }
- else if (stream)
- {
- /* Request md5 checksum and resource type properties if caller
- requested file contents. */
- which_props = restype_checksum_props;
- }
- else
- {
- /* Request only resource type on other cases. */
- which_props = restype_props;
- }
-
- SVN_ERR(svn_ra_neon__get_props_resource(&rsrc, ras, final_url, NULL,
- which_props, pool));
- if (rsrc->is_collection)
- {
- return svn_error_create(SVN_ERR_FS_NOT_FILE, NULL,
- _("Can't get text contents of a directory"));
- }
-
- if (props)
- {
- *props = apr_hash_make(pool);
- SVN_ERR(filter_props(*props, rsrc, TRUE, pool));
- }
-
- if (stream)
- {
- const svn_string_t *expected_checksum;
- file_write_ctx_t fwc;
-
- expected_checksum = apr_hash_get(rsrc->propset,
- SVN_RA_NEON__PROP_MD5_CHECKSUM,
- APR_HASH_KEY_STRING);
-
- /* Older servers don't serve checksum prop, but that's okay. */
- /* ### temporary hack for 0.17. if the server doesn't have the prop,
- ### then __get_one_prop returns an empty string. deal with it. */
- if (!expected_checksum
- || (expected_checksum && expected_checksum->data[0] == '\0'))
- {
- fwc.do_checksum = FALSE;
- }
- else
- {
- fwc.do_checksum = TRUE;
- }
-
- fwc.stream = stream;
-
- if (fwc.do_checksum)
- fwc.checksum_ctx = svn_checksum_ctx_create(svn_checksum_md5, pool);
-
- /* Fetch the file, shoving it at the provided stream. */
- SVN_ERR(custom_get_request(ras, final_url, path,
- get_file_reader, &fwc,
- ras->callbacks->get_wc_prop,
- ras->callback_baton,
- FALSE, pool));
-
- if (fwc.do_checksum)
- {
- const char *hex_digest;
- svn_checksum_t *checksum;
-
- SVN_ERR(svn_checksum_final(&checksum, fwc.checksum_ctx, pool));
- hex_digest = svn_checksum_to_cstring_display(checksum, pool);
-
- if (strcmp(hex_digest, expected_checksum->data) != 0)
- return svn_error_createf
- (SVN_ERR_CHECKSUM_MISMATCH, NULL,
- apr_psprintf(pool, "%s:\n%s\n%s\n",
- _("Checksum mismatch for '%s'"),
- _(" expected: %s"),
- _(" actual: %s")),
- path, expected_checksum->data, hex_digest);
- }
- }
-
- return SVN_NO_ERROR;
-}
-
-svn_error_t *svn_ra_neon__get_dir(svn_ra_session_t *session,
- apr_hash_t **dirents,
- svn_revnum_t *fetched_rev,
- apr_hash_t **props,
- const char *path,
- svn_revnum_t revision,
- apr_uint32_t dirent_fields,
- apr_pool_t *pool)
-{
- svn_ra_neon__resource_t *rsrc;
- apr_hash_index_t *hi;
- apr_hash_t *resources;
- const char *final_url;
- apr_size_t final_url_n_components;
- svn_ra_neon__session_t *ras = session->priv;
- const char *url = svn_path_url_add_component2(ras->url->data, path, pool);
-
- /* If the revision is invalid (HEAD), then we're done -- just fetch
- the public URL, because that will always get HEAD. Otherwise, we
- need to create a bc_url. */
- if ((! SVN_IS_VALID_REVNUM(revision)) && (fetched_rev == NULL))
- {
- final_url = url;
- }
- else
- {
- svn_revnum_t got_rev;
- const char *bc_url;
- const char *bc_relative;
-
- SVN_ERR(svn_ra_neon__get_baseline_info(&bc_url, &bc_relative, &got_rev,
- ras, url, revision, pool));
- final_url = svn_path_url_add_component2(bc_url, bc_relative, pool);
- if (fetched_rev != NULL)
- *fetched_rev = got_rev;
- }
-
- if (dirents)
- {
- ne_propname *which_props;
- svn_boolean_t supports_deadprop_count;
-
- /* For issue 2151: See if we are dealing with a server that
- understands the deadprop-count property. If it doesn't, we'll
- need to do an allprop PROPFIND. If it does, we'll execute a more
- targeted PROPFIND. */
- if (dirent_fields & SVN_DIRENT_HAS_PROPS)
- {
- SVN_ERR(svn_ra_neon__get_deadprop_count_support(
- &supports_deadprop_count, ras, final_url, pool));
- }
-
- /* if we didn't ask for the has_props field, we can get individual
- properties. */
- if ((SVN_DIRENT_HAS_PROPS & dirent_fields) == 0
- || supports_deadprop_count)
- {
- int num_props = 1; /* start with one for the final NULL */
-
- if (dirent_fields & SVN_DIRENT_KIND)
- ++num_props;
-
- if (dirent_fields & SVN_DIRENT_SIZE)
- ++num_props;
-
- if (dirent_fields & SVN_DIRENT_HAS_PROPS)
- ++num_props;
-
- if (dirent_fields & SVN_DIRENT_CREATED_REV)
- ++num_props;
-
- if (dirent_fields & SVN_DIRENT_TIME)
- ++num_props;
-
- if (dirent_fields & SVN_DIRENT_LAST_AUTHOR)
- ++num_props;
-
- which_props = apr_pcalloc(pool, num_props * sizeof(ne_propname));
-
- --num_props; /* damn zero based arrays... */
-
- /* first, null out the end... */
- which_props[num_props].nspace = NULL;
- which_props[num_props--].name = NULL;
-
- /* Now, go through and fill in the ones we care about, moving along
- the array as we go. */
-
- if (dirent_fields & SVN_DIRENT_KIND)
- {
- which_props[num_props].nspace = "DAV:";
- which_props[num_props--].name = "resourcetype";
- }
-
- if (dirent_fields & SVN_DIRENT_SIZE)
- {
- which_props[num_props].nspace = "DAV:";
- which_props[num_props--].name = "getcontentlength";
- }
-
- if (dirent_fields & SVN_DIRENT_HAS_PROPS)
- {
- which_props[num_props].nspace = SVN_DAV_PROP_NS_DAV;
- which_props[num_props--].name = "deadprop-count";
- }
-
- if (dirent_fields & SVN_DIRENT_CREATED_REV)
- {
- which_props[num_props].nspace = "DAV:";
- which_props[num_props--].name = "version-name";
- }
-
- if (dirent_fields & SVN_DIRENT_TIME)
- {
- which_props[num_props].nspace = "DAV:";
- which_props[num_props--].name = SVN_DAV__CREATIONDATE;
- }
-
- if (dirent_fields & SVN_DIRENT_LAST_AUTHOR)
- {
- which_props[num_props].nspace = "DAV:";
- which_props[num_props--].name = "creator-displayname";
- }
-
- SVN_ERR_ASSERT(num_props == -1);
- }
- else
- {
- /* get all props, since we need them all to do has_props */
- which_props = NULL;
- }
-
- /* Just like Nautilus, Cadaver, or any other browser, we do a
- PROPFIND on the directory of depth 1. */
- SVN_ERR(svn_ra_neon__get_props(&resources, ras,
- final_url, SVN_RA_NEON__DEPTH_ONE,
- NULL, which_props, pool));
-
- /* Count the number of path components in final_url. */
- final_url_n_components = svn_path_component_count(final_url);
-
- /* Now we have a hash that maps a bunch of url children to resource
- objects. Each resource object contains the properties of the
- child. Parse these resources into svn_dirent_t structs. */
- *dirents = apr_hash_make(pool);
- for (hi = apr_hash_first(pool, resources);
- hi;
- hi = apr_hash_next(hi))
- {
- const void *key;
- void *val;
- const char *childname;
- svn_ra_neon__resource_t *resource;
- const svn_string_t *propval;
- apr_hash_index_t *h;
- svn_dirent_t *entry;
-
- apr_hash_this(hi, &key, NULL, &val);
- childname = svn_relpath_canonicalize(key, pool);
- resource = val;
-
- /* Skip the effective '.' entry that comes back from
- SVN_RA_NEON__DEPTH_ONE. The children must have one more
- component then final_url.
- Note that we can't just strcmp the URLs because of URL encoding
- differences (i.e. %3c vs. %3C etc.) */
- if (svn_path_component_count(childname) == final_url_n_components)
- continue;
-
- entry = apr_pcalloc(pool, sizeof(*entry));
-
- if (dirent_fields & SVN_DIRENT_KIND)
- {
- /* node kind */
- entry->kind = resource->is_collection ? svn_node_dir
- : svn_node_file;
- }
-
- if (dirent_fields & SVN_DIRENT_SIZE)
- {
- /* size */
- propval = apr_hash_get(resource->propset,
- SVN_RA_NEON__PROP_GETCONTENTLENGTH,
- APR_HASH_KEY_STRING);
- if (propval == NULL)
- entry->size = 0;
- else
- entry->size = svn__atoui64(propval->data);
- }
-
- if (dirent_fields & SVN_DIRENT_HAS_PROPS)
- {
- /* Does this resource contain any 'svn' or 'custom'
- properties (e.g. ones actually created and set by the
- user)? */
- if (supports_deadprop_count)
- {
- propval = apr_hash_get(resource->propset,
- SVN_RA_NEON__PROP_DEADPROP_COUNT,
- APR_HASH_KEY_STRING);
-
- if (propval == NULL)
- {
- /* we thought that the server supported the
- deadprop-count property. apparently not. */
- return svn_error_create(SVN_ERR_INCOMPLETE_DATA, NULL,
- _("Server response missing the "
- "expected deadprop-count "
- "property"));
- }
- else
- {
- apr_int64_t prop_count = svn__atoui64(propval->data);
- entry->has_props = (prop_count > 0);
- }
- }
- else
- {
- /* The server doesn't support the deadprop_count prop,
- fallback */
- for (h = apr_hash_first(pool, resource->propset);
- h; h = apr_hash_next(h))
- {
- const void *kkey;
- apr_hash_this(h, &kkey, NULL, NULL);
-
- if (strncmp((const char *) kkey, SVN_DAV_PROP_NS_CUSTOM,
- sizeof(SVN_DAV_PROP_NS_CUSTOM) - 1) == 0
- || strncmp((const char *) kkey, SVN_DAV_PROP_NS_SVN,
- sizeof(SVN_DAV_PROP_NS_SVN) - 1) == 0)
- entry->has_props = TRUE;
- }
- }
- }
-
- if (dirent_fields & SVN_DIRENT_CREATED_REV)
- {
- /* created_rev & friends */
- propval = apr_hash_get(resource->propset,
- SVN_RA_NEON__PROP_VERSION_NAME,
- APR_HASH_KEY_STRING);
- if (propval != NULL)
- entry->created_rev = SVN_STR_TO_REV(propval->data);
- }
-
- if (dirent_fields & SVN_DIRENT_TIME)
- {
- propval = apr_hash_get(resource->propset,
- SVN_RA_NEON__PROP_CREATIONDATE,
- APR_HASH_KEY_STRING);
- if (propval != NULL)
- SVN_ERR(svn_time_from_cstring(&(entry->time),
- propval->data, pool));
- }
-
- if (dirent_fields & SVN_DIRENT_LAST_AUTHOR)
- {
- propval = apr_hash_get(resource->propset,
- SVN_RA_NEON__PROP_CREATOR_DISPLAYNAME,
- APR_HASH_KEY_STRING);
- if (propval != NULL)
- entry->last_author = propval->data;
- }
-
- apr_hash_set(*dirents,
- svn_path_uri_decode(svn_relpath_basename(childname,
- pool),
- pool),
- APR_HASH_KEY_STRING, entry);
- }
- }
-
- if (props)
- {
- SVN_ERR(svn_ra_neon__get_props_resource(&rsrc, ras, final_url,
- NULL, NULL /* all props */,
- pool));
-
- *props = apr_hash_make(pool);
- SVN_ERR(filter_props(*props, rsrc, TRUE, pool));
- }
-
- return SVN_NO_ERROR;
-}
-
-
-/* ------------------------------------------------------------------------- */
-
-svn_error_t *svn_ra_neon__get_latest_revnum(svn_ra_session_t *session,
- svn_revnum_t *latest_revnum,
- apr_pool_t *pool)
-{
- svn_ra_neon__session_t *ras = session->priv;
- return svn_ra_neon__get_baseline_info(NULL, NULL, latest_revnum,
- ras, ras->root.path,
- SVN_INVALID_REVNUM, pool);
-}
-
-/* ------------------------------------------------------------------------- */
-
-
-svn_error_t *svn_ra_neon__change_rev_prop(svn_ra_session_t *session,
- svn_revnum_t rev,
- const char *name,
- const svn_string_t *const *old_value_p,
- const svn_string_t *value,
- apr_pool_t *pool)
-{
- svn_ra_neon__session_t *ras = session->priv;
- svn_error_t *err;
- apr_hash_t *prop_changes = NULL;
- apr_array_header_t *prop_deletes = NULL;
- apr_hash_t *prop_old_values = NULL;
- const char *proppatch_target;
-
- if (old_value_p)
- {
- svn_boolean_t capable;
- SVN_ERR(svn_ra_neon__has_capability(session, &capable,
- SVN_RA_CAPABILITY_ATOMIC_REVPROPS,
- pool));
-
- /* How did you get past the same check in svn_ra_change_rev_prop2()? */
- SVN_ERR_ASSERT(capable);
- }
-
- /* Main objective: do a PROPPATCH (allprops) on a baseline object */
-
- /* ### A Word From Our Sponsor: see issue #916.
-
- Be it heretofore known that this Subversion behavior is
- officially in violation of WebDAV/DeltaV. DeltaV has *no*
- concept of unversioned properties, anywhere. If you proppatch
- something, some new version of *something* is created.
-
- In particular, we've decided that a 'baseline' maps to an svn
- revision; if we attempted to proppatch a baseline, a *normal*
- DeltaV server would do an auto-checkout, patch the working
- baseline, auto-checkin, and create a new baseline. But
- mod_dav_svn just changes the baseline destructively.
- */
-
- if (SVN_RA_NEON__HAVE_HTTPV2_SUPPORT(ras))
- {
- proppatch_target = apr_psprintf(pool, "%s/%ld", ras->rev_stub, rev);
- }
- else
- {
- svn_ra_neon__resource_t *baseline;
- static const ne_propname wanted_props[] =
- {
- { "DAV:", "auto-version" },
- { NULL }
- };
- /* Get the baseline resource. */
- SVN_ERR(svn_ra_neon__get_baseline_props(NULL, &baseline,
- ras,
- ras->url->data,
- rev,
- wanted_props, /* DAV:auto-version */
- pool));
- /* ### TODO: if we got back some value for the baseline's
- 'DAV:auto-version' property, interpret it. We *don't* want
- to attempt the PROPPATCH if the deltaV server is going to do
- auto-versioning and create a new baseline! */
-
- proppatch_target = baseline->url;
- }
-
- if (old_value_p)
- {
- svn_dav__two_props_t *both_values;
-
- both_values = apr_palloc(pool, sizeof(*both_values));
- both_values->old_value_p = old_value_p;
- both_values->new_value = value;
-
- prop_old_values = apr_hash_make(pool);
- apr_hash_set(prop_old_values, name, APR_HASH_KEY_STRING, both_values);
- }
- else
- {
- if (value)
- {
- prop_changes = apr_hash_make(pool);
- apr_hash_set(prop_changes, name, APR_HASH_KEY_STRING, value);
- }
- else
- {
- prop_deletes = apr_array_make(pool, 1, sizeof(const char *));
- APR_ARRAY_PUSH(prop_deletes, const char *) = name;
- }
- }
-
- err = svn_ra_neon__do_proppatch(ras, proppatch_target, prop_changes,
- prop_deletes, prop_old_values, NULL, pool);
- if (err)
- return
- svn_error_create
- (SVN_ERR_RA_DAV_REQUEST_FAILED, err,
- _("DAV request failed; it's possible that the repository's "
- "pre-revprop-change hook either failed or is non-existent"));
-
- return SVN_NO_ERROR;
-}
-
-
-svn_error_t *svn_ra_neon__rev_proplist(svn_ra_session_t *session,
- svn_revnum_t rev,
- apr_hash_t **props,
- apr_pool_t *pool)
-{
- svn_ra_neon__session_t *ras = session->priv;
- svn_ra_neon__resource_t *bln;
- const char *label;
- const char *url;
-
- *props = apr_hash_make(pool);
-
- /* Main objective: do a PROPFIND (allprops) on a baseline object. If we
- have HTTP v2 support available, we can build the URI of that object.
- Otherwise, we have to hunt for a bit. (We pass NULL for 'which_props'
- in these functions because we want 'em all.) */
- if (SVN_RA_NEON__HAVE_HTTPV2_SUPPORT(ras))
- {
- url = apr_psprintf(pool, "%s/%ld", ras->rev_stub, rev);
- label = NULL;
- }
- else
- {
- SVN_ERR(svn_ra_neon__get_vcc(&url, ras, ras->url->data, pool));
- label = apr_psprintf(pool, "%ld", rev);
- }
-
- SVN_ERR(svn_ra_neon__get_props_resource(&bln, ras, url,
- label, NULL, pool));
-
- /* Build a new property hash, based on the one in the baseline
- resource. In particular, convert the xml-property-namespaces
- into ones that the client understands. Strip away the DAV:
- liveprops as well. */
- return filter_props(*props, bln, FALSE, pool);
-}
-
-
-svn_error_t *svn_ra_neon__rev_prop(svn_ra_session_t *session,
- svn_revnum_t rev,
- const char *name,
- svn_string_t **value,
- apr_pool_t *pool)
-{
- apr_hash_t *props;
-
- /* We just call svn_ra_neon__rev_proplist() and filter its results here
- * because sending the property name to the server may create an error
- * if it has a colon in its name. While more costly this allows DAV
- * clients to still gain access to all the allowed property names.
- * See Issue #1807 for more details. */
- SVN_ERR(svn_ra_neon__rev_proplist(session, rev, &props, pool));
-
- *value = apr_hash_get(props, name, APR_HASH_KEY_STRING);
-
- return SVN_NO_ERROR;
-}
-
-
-
-
-/* -------------------------------------------------------------------------
-**
-** UPDATE HANDLING
-**
-** ### docco...
-**
-** DTD of the update report:
-** ### open/add file/dir. first child is always checked-in/href (vsn_url).
-** ### next are subdir elems, possibly fetch-file, then fetch-prop.
-*/
-
-/* Determine whether we're receiving the expected XML response.
- Return CHILD when interested in receiving the child's contents
- or one of SVN_RA_NEON__XML_INVALID and SVN_RA_NEON__XML_DECLINE
- when respectively this is the incorrect response or
- the element (and its children) are uninteresting */
-static int validate_element(svn_ra_neon__xml_elmid parent,
- svn_ra_neon__xml_elmid child)
-{
- /* We're being very strict with the validity of XML elements here. If
- something exists that we don't know about, then we might not update
- the client properly. We also make various assumptions in the element
- processing functions, and the strong validation enables those
- assumptions. */
-
- switch (parent)
- {
- case ELEM_root:
- if (child == ELEM_update_report)
- return child;
- else
- return SVN_RA_NEON__XML_INVALID;
-
- case ELEM_update_report:
- if (child == ELEM_target_revision
- || child == ELEM_open_directory
- || child == ELEM_resource_walk)
- return child;
- else
- return SVN_RA_NEON__XML_INVALID;
-
- case ELEM_resource_walk:
- if (child == ELEM_resource)
- return child;
- else
- return SVN_RA_NEON__XML_INVALID;
-
- case ELEM_resource:
- if (child == ELEM_checked_in)
- return child;
- else
- return SVN_RA_NEON__XML_INVALID;
-
- case ELEM_open_directory:
- if (child == ELEM_absent_directory
- || child == ELEM_open_directory
- || child == ELEM_add_directory
- || child == ELEM_absent_file
- || child == ELEM_open_file
- || child == ELEM_add_file
- || child == ELEM_fetch_props
- || child == ELEM_set_prop
- || child == ELEM_remove_prop
- || child == ELEM_delete_entry
- || child == ELEM_SVN_prop
- || child == ELEM_checked_in)
- return child;
- else
- return SVN_RA_NEON__XML_INVALID;
-
- case ELEM_add_directory:
- if (child == ELEM_absent_directory
- || child == ELEM_add_directory
- || child == ELEM_absent_file
- || child == ELEM_add_file
- || child == ELEM_remove_prop
- || child == ELEM_set_prop
- || child == ELEM_SVN_prop
- || child == ELEM_checked_in)
- return child;
- else
- return SVN_RA_NEON__XML_INVALID;
-
- case ELEM_open_file:
- if (child == ELEM_checked_in
- || child == ELEM_fetch_file
- || child == ELEM_SVN_prop
- || child == ELEM_txdelta
- || child == ELEM_fetch_props
- || child == ELEM_set_prop
- || child == ELEM_remove_prop)
- return child;
- else
- return SVN_RA_NEON__XML_INVALID;
-
- case ELEM_add_file:
- if (child == ELEM_checked_in
- || child == ELEM_txdelta
- || child == ELEM_set_prop
- || child == ELEM_remove_prop
- || child == ELEM_SVN_prop)
- return child;
- else
- return SVN_RA_NEON__XML_INVALID;
-
- case ELEM_checked_in:
- if (child == ELEM_href)
- return child;
- else
- return SVN_RA_NEON__XML_INVALID;
-
- case ELEM_set_prop:
- /* Prop name is an attribute, prop value is CDATA, so no child elts. */
- return child;
-
- case ELEM_SVN_prop:
- /* if (child == ELEM_version_name
- || child == ELEM_creationdate
- || child == ELEM_creator_displayname
- || child == ELEM_md5_checksum
- || child == ELEM_repository_uuid
- || child == ELEM_remove_prop)
- return child;
- else
- return SVN_RA_NEON__XML_DECLINE;
- */
- /* ### TODO: someday uncomment the block above, and make the
- else clause return NE_XML_IGNORE. But first, neon needs to
- define that value. :-) */
- return child;
-
- default:
- return SVN_RA_NEON__XML_DECLINE;
- }
-
- /* NOTREACHED */
-}
-
-static void push_dir(report_baton_t *rb,
- void *baton,
- svn_stringbuf_t *pathbuf,
- apr_pool_t *pool)
-{
- dir_item_t *di = apr_array_push(rb->dirs);
-
- memset(di, 0, sizeof(*di));
- di->baton = baton;
- di->pathbuf = pathbuf;
- di->pool = pool;
-}
-
-/* This implements the `ne_xml_startelm_cb' prototype. */
-static svn_error_t *
-start_element(int *elem, void *userdata, int parent, const char *nspace,
- const char *elt_name, const char **atts)
-{
- report_baton_t *rb = userdata;
- const char *att;
- svn_revnum_t base;
- const char *name;
- const char *bc_url;
- svn_stringbuf_t *cpath = NULL;
- svn_revnum_t crev = SVN_INVALID_REVNUM;
- dir_item_t *parent_dir;
- void *new_dir_baton;
- svn_stringbuf_t *pathbuf;
- apr_pool_t *subpool;
- const char *base_checksum = NULL;
- const svn_ra_neon__xml_elm_t *elm;
-
- elm = svn_ra_neon__lookup_xml_elem(report_elements, nspace, elt_name);
- *elem = elm ? validate_element(parent, elm->id) : SVN_RA_NEON__XML_DECLINE;
- if (*elem < 1) /* not a valid element */
- return SVN_NO_ERROR;
-
- switch (elm->id)
- {
- case ELEM_update_report:
- att = svn_xml_get_attr_value("send-all", atts);
- if (att && (strcmp(att, "true") == 0))
- rb->receiving_all = TRUE;
- break;
-
- case ELEM_target_revision:
- att = svn_xml_get_attr_value("rev", atts);
- if (att == NULL)
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Missing rev attr in target-revision"
- " element"));
- SVN_ERR((*rb->editor->set_target_revision)(rb->edit_baton,
- SVN_STR_TO_REV(att),
- rb->pool));
- break;
-
- case ELEM_absent_directory:
- name = svn_xml_get_attr_value("name", atts);
- if (name == NULL)
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Missing name attr in absent-directory"
- " element"));
-
- parent_dir = &TOP_DIR(rb);
- pathbuf = svn_stringbuf_dup(parent_dir->pathbuf, parent_dir->pool);
- svn_path_add_component(pathbuf, name);
-
- SVN_ERR((*rb->editor->absent_directory)(pathbuf->data,
- parent_dir->baton,
- parent_dir->pool));
- break;
-
- case ELEM_absent_file:
- name = svn_xml_get_attr_value("name", atts);
- if (name == NULL)
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Missing name attr in absent-file"
- " element"));
- parent_dir = &TOP_DIR(rb);
- pathbuf = svn_stringbuf_dup(parent_dir->pathbuf, parent_dir->pool);
- svn_path_add_component(pathbuf, name);
-
- SVN_ERR((*rb->editor->absent_file)(pathbuf->data,
- parent_dir->baton,
- parent_dir->pool));
- break;
-
- case ELEM_resource:
- att = svn_xml_get_attr_value("path", atts);
- if (att == NULL)
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Missing path attr in resource element"));
- svn_stringbuf_set(rb->current_wcprop_path, att);
- rb->in_resource = TRUE;
- break;
-
- case ELEM_open_directory:
- att = svn_xml_get_attr_value("rev", atts);
- if (att == NULL)
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Missing rev attr in open-directory"
- " element"));
- base = SVN_STR_TO_REV(att);
-
- if (DIR_DEPTH(rb) == 0)
- {
- /* pathbuf has to live for the whole edit! */
- pathbuf = svn_stringbuf_create("", rb->pool);
-
- /* During switch operations, we need to invalidate the
- tree's version resource URLs in case something goes
- wrong. */
- if (rb->is_switch && rb->ras->callbacks->invalidate_wc_props)
- {
- SVN_ERR(rb->ras->callbacks->invalidate_wc_props
- (rb->ras->callback_baton, rb->target,
- SVN_RA_NEON__LP_VSN_URL, rb->pool));
- }
-
- subpool = svn_pool_create(rb->pool);
- SVN_ERR((*rb->editor->open_root)(rb->edit_baton, base,
- subpool, &new_dir_baton));
-
- /* push the new baton onto the directory baton stack */
- push_dir(rb, new_dir_baton, pathbuf, subpool);
- }
- else
- {
- name = svn_xml_get_attr_value("name", atts);
- if (name == NULL)
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Missing name attr in open-directory"
- " element"));
- svn_stringbuf_set(rb->namestr, name);
-
- parent_dir = &TOP_DIR(rb);
- subpool = svn_pool_create(parent_dir->pool);
-
- pathbuf = svn_stringbuf_dup(parent_dir->pathbuf, subpool);
- svn_path_add_component(pathbuf, rb->namestr->data);
-
- SVN_ERR((*rb->editor->open_directory)(pathbuf->data,
- parent_dir->baton, base,
- subpool,
- &new_dir_baton));
-
- /* push the new baton onto the directory baton stack */
- push_dir(rb, new_dir_baton, pathbuf, subpool);
- }
-
- /* Property fetching is NOT implied in replacement. */
- TOP_DIR(rb).fetch_props = FALSE;
- break;
-
- case ELEM_add_directory:
- name = svn_xml_get_attr_value("name", atts);
- if (name == NULL)
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Missing name attr in add-directory"
- " element"));
- svn_stringbuf_set(rb->namestr, name);
-
- att = svn_xml_get_attr_value("copyfrom-path", atts);
- if (att != NULL)
- {
- cpath = rb->cpathstr;
- svn_stringbuf_set(cpath, att);
-
- att = svn_xml_get_attr_value("copyfrom-rev", atts);
- if (att == NULL)
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Missing copyfrom-rev attr in"
- " add-directory element"));
- crev = SVN_STR_TO_REV(att);
- }
-
- parent_dir = &TOP_DIR(rb);
- subpool = svn_pool_create(parent_dir->pool);
-
- pathbuf = svn_stringbuf_dup(parent_dir->pathbuf, subpool);
- svn_path_add_component(pathbuf, rb->namestr->data);
-
- SVN_ERR((*rb->editor->add_directory)(pathbuf->data, parent_dir->baton,
- cpath ? cpath->data : NULL,
- crev, subpool,
- &new_dir_baton));
-
- /* push the new baton onto the directory baton stack */
- push_dir(rb, new_dir_baton, pathbuf, subpool);
-
- /* Property fetching is implied in addition. */
- TOP_DIR(rb).fetch_props = TRUE;
-
- bc_url = svn_xml_get_attr_value("bc-url", atts);
-
- /* If we are not in send-all mode, we're just told to fetch the
- props later. In that case, we can at least do a pre-emptive
- depth-1 propfind on the directory right now; this prevents
- individual propfinds on added-files later on, thus reducing
- the number of network turnarounds. */
- if ((! rb->receiving_all) && bc_url)
- {
- apr_hash_t *bc_children;
- SVN_ERR(svn_ra_neon__get_props(&bc_children,
- rb->ras,
- bc_url,
- SVN_RA_NEON__DEPTH_ONE,
- NULL, NULL /* allprops */,
- TOP_DIR(rb).pool));
-
- /* re-index the results into a more usable hash.
- bc_children maps bc-url->resource_t, but we want the
- dir_item_t's hash to map vc-url->resource_t. */
- if (bc_children)
- {
- apr_hash_index_t *hi;
- TOP_DIR(rb).children = apr_hash_make(TOP_DIR(rb).pool);
-
- for (hi = apr_hash_first(TOP_DIR(rb).pool, bc_children);
- hi; hi = apr_hash_next(hi))
- {
- void *val;
- svn_ra_neon__resource_t *rsrc;
- const svn_string_t *vc_url;
-
- apr_hash_this(hi, NULL, NULL, &val);
- rsrc = val;
-
- vc_url = apr_hash_get(rsrc->propset,
- SVN_RA_NEON__PROP_CHECKED_IN,
- APR_HASH_KEY_STRING);
- if (vc_url)
- apr_hash_set(TOP_DIR(rb).children,
- vc_url->data, vc_url->len,
- rsrc->propset);
- }
- }
- }
-
- break;
-
- case ELEM_open_file:
- att = svn_xml_get_attr_value("rev", atts);
- if (att == NULL)
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Missing rev attr in open-file"
- " element"));
- base = SVN_STR_TO_REV(att);
-
- name = svn_xml_get_attr_value("name", atts);
- if (name == NULL)
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Missing name attr in open-file"
- " element"));
- svn_stringbuf_set(rb->namestr, name);
-
- parent_dir = &TOP_DIR(rb);
- rb->file_pool = svn_pool_create(parent_dir->pool);
- rb->result_checksum = NULL;
-
- /* Add this file's name into the directory's path buffer. It will be
- removed in end_element() */
- svn_path_add_component(parent_dir->pathbuf, rb->namestr->data);
-
- SVN_ERR((*rb->editor->open_file)(parent_dir->pathbuf->data,
- parent_dir->baton, base,
- rb->file_pool,
- &rb->file_baton));
-
- /* Property fetching is NOT implied in replacement. */
- rb->fetch_props = FALSE;
-
- break;
-
- case ELEM_add_file:
- name = svn_xml_get_attr_value("name", atts);
- if (name == NULL)
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Missing name attr in add-file"
- " element"));
- svn_stringbuf_set(rb->namestr, name);
-
- att = svn_xml_get_attr_value("copyfrom-path", atts);
- if (att != NULL)
- {
- cpath = rb->cpathstr;
- svn_stringbuf_set(cpath, att);
-
- att = svn_xml_get_attr_value("copyfrom-rev", atts);
- if (att == NULL)
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Missing copyfrom-rev attr in add-file"
- " element"));
- crev = SVN_STR_TO_REV(att);
- }
-
- parent_dir = &TOP_DIR(rb);
- rb->file_pool = svn_pool_create(parent_dir->pool);
- rb->result_checksum = NULL;
-
- /* Add this file's name into the directory's path buffer. It will be
- removed in end_element() */
- svn_path_add_component(parent_dir->pathbuf, rb->namestr->data);
-
- SVN_ERR((*rb->editor->add_file)(parent_dir->pathbuf->data,
- parent_dir->baton,
- cpath ? cpath->data : NULL,
- crev, rb->file_pool,
- &rb->file_baton));
-
- /* Property fetching is implied in addition. */
- rb->fetch_props = TRUE;
-
- break;
-
- case ELEM_txdelta:
- /* Pre 1.2, mod_dav_svn was using <txdelta> tags (in addition to
- <fetch-file>s and such) when *not* in "send-all" mode. As a
- client, we're smart enough to know that's wrong, so when not
- in "receiving-all" mode, we'll ignore <txdelta> tags
- altogether. */
- if (! rb->receiving_all)
- break;
-
- base_checksum = svn_xml_get_attr_value("base-checksum", atts);
-
- SVN_ERR((*rb->editor->apply_textdelta)(rb->file_baton,
- base_checksum,
- rb->file_pool,
- &(rb->whandler),
- &(rb->whandler_baton)));
-
- rb->svndiff_decoder = svn_txdelta_parse_svndiff(rb->whandler,
- rb->whandler_baton,
- TRUE, rb->file_pool);
-
- rb->base64_decoder = svn_base64_decode(rb->svndiff_decoder,
- rb->file_pool);
- break;
-
- case ELEM_set_prop:
- {
- const char *encoding = svn_xml_get_attr_value("encoding", atts);
- name = svn_xml_get_attr_value("name", atts);
- if (name == NULL)
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Missing name attr in set-prop element"));
- svn_stringbuf_set(rb->namestr, name);
- if (encoding)
- svn_stringbuf_set(rb->encoding, encoding);
- else
- svn_stringbuf_setempty(rb->encoding);
- }
-
- break;
-
- case ELEM_remove_prop:
- name = svn_xml_get_attr_value("name", atts);
- if (name == NULL)
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Missing name attr in remove-prop element"));
- svn_stringbuf_set(rb->namestr, name);
-
- /* Removing a prop. */
- if (rb->file_baton == NULL)
- SVN_ERR(rb->editor->change_dir_prop(TOP_DIR(rb).baton,
- rb->namestr->data,
- NULL, TOP_DIR(rb).pool));
- else
- SVN_ERR(rb->editor->change_file_prop(rb->file_baton, rb->namestr->data,
- NULL, rb->file_pool));
- break;
-
- case ELEM_fetch_props:
- if (!rb->fetch_content)
- {
- /* If this is just a status check, the specifics of the
- property change are uninteresting. Simply call our
- editor function with bogus data so it registers a
- property mod. */
- svn_stringbuf_set(rb->namestr, SVN_PROP_PREFIX "BOGOSITY");
-
- if (rb->file_baton == NULL)
- SVN_ERR(rb->editor->change_dir_prop(TOP_DIR(rb).baton,
- rb->namestr->data,
- NULL, TOP_DIR(rb).pool));
- else
- SVN_ERR(rb->editor->change_file_prop(rb->file_baton,
- rb->namestr->data,
- NULL, rb->file_pool));
- }
- else
- {
- /* Note that we need to fetch props for this... */
- if (rb->file_baton == NULL)
- TOP_DIR(rb).fetch_props = TRUE; /* ...directory. */
- else
- rb->fetch_props = TRUE; /* ...file. */
- }
- break;
-
- case ELEM_fetch_file:
- base_checksum = svn_xml_get_attr_value("base-checksum", atts);
- rb->result_checksum = NULL;
-
- /* If we aren't expecting to see the file contents inline, we
- should ignore server requests to fetch them.
-
- ### This conditional was added to counteract a little bug in
- Subversion 0.33.0's mod_dav_svn whereby both the <txdelta>
- and <fetch-file> tags were being transmitted. Someday, we
- should remove the conditional again to give the server the
- option of sending inline text-deltas for some files while
- telling the client to fetch others. */
- if (! rb->receiving_all)
- {
- /* assert: rb->href->len > 0 */
- SVN_ERR(simple_fetch_file(rb->ras,
- rb->href->data,
- TOP_DIR(rb).pathbuf->data,
- rb->fetch_content,
- rb->file_baton,
- base_checksum,
- rb->editor,
- rb->ras->callbacks->get_wc_prop,
- rb->ras->callback_baton,
- rb->file_pool));
- }
- break;
-
- case ELEM_delete_entry:
- name = svn_xml_get_attr_value("name", atts);
- if (name == NULL)
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Missing name attr in delete-entry"
- " element"));
- svn_stringbuf_set(rb->namestr, name);
-
- att = svn_xml_get_attr_value("rev", atts);
- if (att) /* Not available on older repositories! */
- crev = SVN_STR_TO_REV(att);
-
- parent_dir = &TOP_DIR(rb);
-
- /* Pool use is a little non-standard here. When lots of items in the
- same directory get deleted each one will trigger a call to
- editor->delete_entry, but we don't have a pool that readily fits
- the usual iteration pattern and so memory use could grow without
- bound (see issue 1635). To avoid such growth we use a temporary,
- short-lived, pool. */
- subpool = svn_pool_create(parent_dir->pool);
-
- pathbuf = svn_stringbuf_dup(parent_dir->pathbuf, subpool);
- svn_path_add_component(pathbuf, rb->namestr->data);
-
- SVN_ERR((*rb->editor->delete_entry)(pathbuf->data,
- crev,
- parent_dir->baton,
- subpool));
- svn_pool_destroy(subpool);
- break;
-
- default:
- break;
- }
-
- *elem = elm->id;
-
- return SVN_NO_ERROR;
-}
-
-
-static svn_error_t *
-add_node_props(report_baton_t *rb, apr_pool_t *pool)
-{
- svn_ra_neon__resource_t *rsrc = NULL;
- apr_hash_t *props = NULL;
-
- /* Do nothing if parsing a send-all-style report, because the properties
- already come inline. */
- if (rb->receiving_all)
- return SVN_NO_ERROR;
-
- /* Do nothing (else) if we aren't fetching content. */
- if (!rb->fetch_content)
- return SVN_NO_ERROR;
-
- if (rb->file_baton)
- {
- const char *lock_token = apr_hash_get(rb->lock_tokens,
- TOP_DIR(rb).pathbuf->data,
- TOP_DIR(rb).pathbuf->len);
-
- /* Workaround a buglet in older versions of mod_dav_svn in that it
- will not send remove-prop in the update report when a lock
- property disappears when send-all is false. */
- if (lock_token)
- {
- svn_lock_t *lock;
- SVN_ERR(svn_ra_neon__get_lock_internal(rb->ras, &lock,
- TOP_DIR(rb).pathbuf->data,
- pool));
- if (! (lock
- && lock->token
- && (strcmp(lock->token, lock_token) == 0)))
- SVN_ERR(rb->editor->change_file_prop(rb->file_baton,
- SVN_PROP_ENTRY_LOCK_TOKEN,
- NULL, pool));
- }
-
- /* If we aren't supposed to be fetching props, don't. */
- if (! rb->fetch_props)
- return SVN_NO_ERROR;
-
- /* Check to see if your parent directory already has your props
- stored, possibly from a depth-1 propfind. Otherwise just do
- a propfind directly on the file url. */
- if ( ! ((TOP_DIR(rb).children)
- && (props = apr_hash_get(TOP_DIR(rb).children, rb->href->data,
- APR_HASH_KEY_STRING))) )
- {
- SVN_ERR(svn_ra_neon__get_props_resource(&rsrc,
- rb->ras,
- rb->href->data,
- NULL,
- NULL,
- pool));
- props = rsrc->propset;
- }
-
- SVN_ERR(add_props(props,
- rb->editor->change_file_prop,
- rb->file_baton,
- pool));
- }
- else
- {
- if (! TOP_DIR(rb).fetch_props)
- return SVN_NO_ERROR;
-
- /* Check to see if your props are already stored, possibly from
- a depth-1 propfind. Otherwise just do a propfind directly on
- the directory url. */
- if ( ! ((TOP_DIR(rb).children)
- && (props = apr_hash_get(TOP_DIR(rb).children,
- TOP_DIR(rb).vsn_url,
- APR_HASH_KEY_STRING))) )
- {
- SVN_ERR(svn_ra_neon__get_props_resource(&rsrc,
- rb->ras,
- TOP_DIR(rb).vsn_url,
- NULL,
- NULL,
- pool));
- props = rsrc->propset;
- }
-
- SVN_ERR(add_props(props,
- rb->editor->change_dir_prop,
- TOP_DIR(rb).baton,
- pool));
- }
-
- return SVN_NO_ERROR;
-}
-
-/* This implements the `svn_ra_neon__cdata_cb_t' prototype. */
-static svn_error_t *
-cdata_handler(void *userdata, int state, const char *cdata, size_t len)
-{
- report_baton_t *rb = userdata;
-
- switch(state)
- {
- case ELEM_href:
- case ELEM_set_prop:
- case ELEM_md5_checksum:
- case ELEM_version_name:
- case ELEM_creationdate:
- case ELEM_creator_displayname:
- svn_stringbuf_appendbytes(rb->cdata_accum, cdata, len);
- break;
-
- case ELEM_txdelta:
- {
- apr_size_t nlen = len;
-
- /* Pre 1.2, mod_dav_svn was using <txdelta> tags (in addition to
- <fetch-file>s and such) when *not* in "send-all" mode. As a
- client, we're smart enough to know that's wrong, so when not
- in "receiving-all" mode, we'll ignore <txdelta> tags
- altogether. */
- if (! rb->receiving_all)
- break;
-
- SVN_ERR(svn_stream_write(rb->base64_decoder, cdata, &nlen));
- if (nlen != len)
- {
- /* Short write without associated error? "Can't happen." */
- return svn_error_createf(SVN_ERR_STREAM_UNEXPECTED_EOF, NULL,
- _("Error writing to '%s': unexpected EOF"),
- rb->namestr->data);
- }
- }
- break;
- }
-
- return 0; /* no error */
-}
-
-/* This implements the `svn_ra_neon_endelm_cb_t' prototype. */
-static svn_error_t *
-end_element(void *userdata, int state,
- const char *nspace, const char *elt_name)
-{
- report_baton_t *rb = userdata;
- const svn_delta_editor_t *editor = rb->editor;
- const svn_ra_neon__xml_elm_t *elm;
-
- elm = svn_ra_neon__lookup_xml_elem(report_elements, nspace, elt_name);
-
- if (elm == NULL)
- return SVN_NO_ERROR;
-
- switch (elm->id)
- {
- case ELEM_resource:
- rb->in_resource = FALSE;
- break;
-
- case ELEM_update_report:
- /* End of report; close up the editor. */
- SVN_ERR((*rb->editor->close_edit)(rb->edit_baton, rb->pool));
- rb->edit_baton = NULL;
- break;
-
- case ELEM_add_directory:
- case ELEM_open_directory:
-
- /* fetch node props, unless this is the top dir and the real
- target of the operation is not the top dir. */
- if (! ((DIR_DEPTH(rb) == 1) && *rb->target))
- SVN_ERR(add_node_props(rb, TOP_DIR(rb).pool));
-
- /* Close the directory on top of the stack, and pop it. Also,
- destroy the subpool used exclusive by this directory and its
- children. */
- SVN_ERR((*rb->editor->close_directory)(TOP_DIR(rb).baton,
- TOP_DIR(rb).pool));
- svn_pool_destroy(TOP_DIR(rb).pool);
- apr_array_pop(rb->dirs);
- break;
-
- case ELEM_add_file:
- /* we wait until the close element to do the work. this allows us to
- retrieve the href before fetching. */
-
- /* fetch file */
- if (! rb->receiving_all)
- {
- SVN_ERR(simple_fetch_file(rb->ras,
- rb->href->data,
- TOP_DIR(rb).pathbuf->data,
- rb->fetch_content,
- rb->file_baton,
- NULL, /* no base checksum in an add */
- rb->editor,
- NULL, NULL, /* dav_prop callback */
- rb->file_pool));
-
- /* fetch node props as necessary. */
- SVN_ERR(add_node_props(rb, rb->file_pool));
- }
-
- /* close the file and mark that we are no longer operating on a file */
- SVN_ERR((*rb->editor->close_file)(rb->file_baton,
- rb->result_checksum,
- rb->file_pool));
- rb->file_baton = NULL;
-
- /* Yank this file out of the directory's path buffer. */
- svn_path_remove_component(TOP_DIR(rb).pathbuf);
- svn_pool_destroy(rb->file_pool);
- rb->file_pool = NULL;
- break;
-
- case ELEM_txdelta:
- /* Pre 1.2, mod_dav_svn was using <txdelta> tags (in addition to
- <fetch-file>s and such) when *not* in "send-all" mode. As a
- client, we're smart enough to know that's wrong, so when not
- in "receiving-all" mode, we'll ignore <txdelta> tags
- altogether. */
- if (! rb->receiving_all)
- break;
-
- SVN_ERR(svn_stream_close(rb->base64_decoder));
- rb->whandler = NULL;
- rb->whandler_baton = NULL;
- rb->svndiff_decoder = NULL;
- rb->base64_decoder = NULL;
- break;
-
- case ELEM_open_file:
- /* fetch node props as necessary. */
- SVN_ERR(add_node_props(rb, rb->file_pool));
-
- /* close the file and mark that we are no longer operating on a file */
- SVN_ERR((*rb->editor->close_file)(rb->file_baton,
- rb->result_checksum,
- rb->file_pool));
- rb->file_baton = NULL;
-
- /* Yank this file out of the directory's path buffer. */
- svn_path_remove_component(TOP_DIR(rb).pathbuf);
- svn_pool_destroy(rb->file_pool);
- rb->file_pool = NULL;
- break;
-
- case ELEM_set_prop:
- {
- svn_string_t decoded_value;
- const svn_string_t *decoded_value_p;
- apr_pool_t *pool;
-
- if (rb->file_baton)
- pool = rb->file_pool;
- else
- pool = TOP_DIR(rb).pool;
-
- decoded_value.data = rb->cdata_accum->data;
- decoded_value.len = rb->cdata_accum->len;
-
- /* Determine the cdata encoding, if any. */
- if (svn_stringbuf_isempty(rb->encoding))
- {
- decoded_value_p = &decoded_value;
- }
- else if (strcmp(rb->encoding->data, "base64") == 0)
- {
- decoded_value_p = svn_base64_decode_string(&decoded_value, pool);
- svn_stringbuf_setempty(rb->encoding);
- }
- else
- {
- return svn_error_createf(SVN_ERR_XML_UNKNOWN_ENCODING, NULL,
- _("Unknown XML encoding: '%s'"),
- rb->encoding->data);
- }
-
- /* Set the prop. */
- if (rb->file_baton)
- {
- SVN_ERR(rb->editor->change_file_prop(rb->file_baton,
- rb->namestr->data,
- decoded_value_p, pool));
- }
- else
- {
- SVN_ERR(rb->editor->change_dir_prop(TOP_DIR(rb).baton,
- rb->namestr->data,
- decoded_value_p, pool));
- }
- }
-
- svn_stringbuf_setempty(rb->cdata_accum);
- break;
-
- case ELEM_href:
- if (rb->fetch_content)
- /* record the href that we just found */
- SVN_ERR(svn_ra_neon__copy_href(rb->href, rb->cdata_accum->data,
- rb->scratch_pool));
-
- svn_stringbuf_setempty(rb->cdata_accum);
-
- /* do nothing if we aren't fetching content. */
- if (!rb->fetch_content)
- break;
-
- /* if we're within a <resource> tag, then just call the generic
- RA set_wcprop_callback directly; no need to use the
- update-editor. */
- if (rb->in_resource)
- {
- svn_string_t href_val;
- href_val.data = rb->href->data;
- href_val.len = rb->href->len;
-
- if (rb->ras->callbacks->set_wc_prop != NULL)
- SVN_ERR(rb->ras->callbacks->set_wc_prop
- (rb->ras->callback_baton,
- rb->current_wcprop_path->data,
- SVN_RA_NEON__LP_VSN_URL,
- &href_val,
- rb->scratch_pool));
- svn_pool_clear(rb->scratch_pool);
- }
- /* else we're setting a wcprop in the context of an editor drive. */
- else if (rb->file_baton == NULL)
- {
- /* Update the wcprop here, unless this is the top directory
- and the real target of this operation is something other
- than the top directory. */
- if (! ((DIR_DEPTH(rb) == 1) && *rb->target))
- {
- SVN_ERR(simple_store_vsn_url(rb->href->data, TOP_DIR(rb).baton,
- rb->editor->change_dir_prop,
- TOP_DIR(rb).pool));
-
- /* save away the URL in case a fetch-props arrives after all of
- the subdir processing. we will need this copy of the URL to
- fetch the properties (i.e. rb->href will be toast by then). */
- TOP_DIR(rb).vsn_url = apr_pmemdup(TOP_DIR(rb).pool,
- rb->href->data,
- rb->href->len + 1);
- }
- }
- else
- {
- SVN_ERR(simple_store_vsn_url(rb->href->data, rb->file_baton,
- rb->editor->change_file_prop,
- rb->file_pool));
- }
- break;
-
- case ELEM_md5_checksum:
- /* We only care about file checksums. */
- if (rb->file_baton)
- {
- rb->result_checksum = apr_pstrdup(rb->file_pool,
- rb->cdata_accum->data);
- }
- svn_stringbuf_setempty(rb->cdata_accum);
- break;
-
- case ELEM_version_name:
- case ELEM_creationdate:
- case ELEM_creator_displayname:
- {
- /* The name of the xml tag is the property that we want to set. */
- apr_pool_t *pool =
- rb->file_baton ? rb->file_pool : TOP_DIR(rb).pool;
- prop_setter_t setter =
- rb->file_baton ? editor->change_file_prop : editor->change_dir_prop;
- const char *name = apr_pstrcat(pool, elm->nspace, elm->name,
- (char *)NULL);
- void *baton = rb->file_baton ? rb->file_baton : TOP_DIR(rb).baton;
- svn_string_t valstr;
-
- valstr.data = rb->cdata_accum->data;
- valstr.len = rb->cdata_accum->len;
- SVN_ERR(set_special_wc_prop(name, &valstr, setter, baton, pool));
- svn_stringbuf_setempty(rb->cdata_accum);
- }
- break;
-
- default:
- break;
- }
-
- return SVN_NO_ERROR;
-}
-
-
-static svn_error_t * reporter_set_path(void *report_baton,
- const char *path,
- svn_revnum_t revision,
- svn_depth_t depth,
- svn_boolean_t start_empty,
- const char *lock_token,
- apr_pool_t *pool)
-{
- report_baton_t *rb = report_baton;
- const char *entry;
- svn_stringbuf_t *qpath = NULL;
- const char *tokenstring = "";
- const char *depthstring = apr_psprintf(pool, "depth=\"%s\"",
- svn_depth_to_word(depth));
-
- if (lock_token)
- {
- tokenstring = apr_psprintf(pool, "lock-token=\"%s\"", lock_token);
- apr_hash_set(rb->lock_tokens,
- apr_pstrdup(apr_hash_pool_get(rb->lock_tokens), path),
- APR_HASH_KEY_STRING,
- apr_pstrdup(apr_hash_pool_get(rb->lock_tokens), lock_token));
- }
-
- svn_xml_escape_cdata_cstring(&qpath, path, pool);
- if (start_empty)
- entry = apr_psprintf(pool,
- "<S:entry rev=\"%ld\" %s %s"
- " start-empty=\"true\">%s</S:entry>" DEBUG_CR,
- revision, depthstring, tokenstring, qpath->data);
- else
- entry = apr_psprintf(pool,
- "<S:entry rev=\"%ld\" %s %s>"
- "%s</S:entry>" DEBUG_CR,
- revision, depthstring, tokenstring, qpath->data);
-
- return svn_error_trace(svn_io_file_write_full(rb->tmpfile, entry,
- strlen(entry), NULL, pool));
-}
-
-
-static svn_error_t * reporter_link_path(void *report_baton,
- const char *path,
- const char *url,
- svn_revnum_t revision,
- svn_depth_t depth,
- svn_boolean_t start_empty,
- const char *lock_token,
- apr_pool_t *pool)
-{
- report_baton_t *rb = report_baton;
- const char *entry;
- svn_stringbuf_t *qpath = NULL, *qlinkpath = NULL;
- const char *bc_relative;
- const char *tokenstring = "";
- const char *depthstring = apr_psprintf(pool, "depth=\"%s\"",
- svn_depth_to_word(depth));
-
- if (lock_token)
- {
- tokenstring = apr_psprintf(pool, "lock-token=\"%s\"", lock_token);
- apr_hash_set(rb->lock_tokens,
- apr_pstrdup(apr_hash_pool_get(rb->lock_tokens), path),
- APR_HASH_KEY_STRING,
- apr_pstrdup(apr_hash_pool_get(rb->lock_tokens), lock_token));
- }
-
- /* Convert the copyfrom_* url/rev "public" pair into a Baseline
- Collection (BC) URL that represents the revision -- and a
- relative path under that BC. */
- SVN_ERR(svn_ra_neon__get_baseline_info(NULL, &bc_relative, NULL, rb->ras,
- url, revision, pool));
-
-
- svn_xml_escape_cdata_cstring(&qpath, path, pool);
- svn_xml_escape_attr_cstring(&qlinkpath, bc_relative, pool);
- if (start_empty)
- entry = apr_psprintf(pool,
- "<S:entry rev=\"%ld\" %s %s"
- " linkpath=\"/%s\" start-empty=\"true\""
- ">%s</S:entry>" DEBUG_CR,
- revision, depthstring, tokenstring,
- qlinkpath->data, qpath->data);
- else
- entry = apr_psprintf(pool,
- "<S:entry rev=\"%ld\" %s %s"
- " linkpath=\"/%s\">%s</S:entry>" DEBUG_CR,
- revision, depthstring, tokenstring,
- qlinkpath->data, qpath->data);
-
- return svn_error_trace(svn_io_file_write_full(rb->tmpfile, entry,
- strlen(entry), NULL, pool));
-}
-
-
-static svn_error_t * reporter_delete_path(void *report_baton,
- const char *path,
- apr_pool_t *pool)
-{
- report_baton_t *rb = report_baton;
- const char *s;
- svn_stringbuf_t *qpath = NULL;
-
- svn_xml_escape_cdata_cstring(&qpath, path, pool);
- s = apr_psprintf(pool,
- "<S:missing>%s</S:missing>" DEBUG_CR,
- qpath->data);
-
- return svn_error_trace(svn_io_file_write_full(rb->tmpfile, s, strlen(s),
- NULL, pool));
-}
-
-
-static svn_error_t * reporter_abort_report(void *report_baton,
- apr_pool_t *pool)
-{
- report_baton_t *rb = report_baton;
-
- SVN_ERR(svn_io_file_close(rb->tmpfile, pool));
-
- return SVN_NO_ERROR;
-}
-
-
-static svn_error_t * reporter_finish_report(void *report_baton,
- apr_pool_t *pool)
-{
- report_baton_t *rb = report_baton;
- svn_error_t *err;
- const char *report_target;
- apr_hash_t *request_headers = apr_hash_make(pool);
- apr_hash_set(request_headers, "Accept-Encoding", APR_HASH_KEY_STRING,
- "svndiff1;q=0.9,svndiff;q=0.8");
-
-
-#define SVN_RA_NEON__REPORT_TAIL "</S:update-report>" DEBUG_CR
- /* write the final closing gunk to our request body. */
- SVN_ERR(svn_io_file_write_full(rb->tmpfile,
- SVN_RA_NEON__REPORT_TAIL,
- sizeof(SVN_RA_NEON__REPORT_TAIL) - 1,
- NULL, pool));
-#undef SVN_RA_NEON__REPORT_TAIL
-
- /* get the editor process prepped */
- rb->dirs = apr_array_make(rb->pool, 5, sizeof(dir_item_t));
- rb->namestr = MAKE_BUFFER(rb->pool);
- rb->cpathstr = MAKE_BUFFER(rb->pool);
- rb->encoding = MAKE_BUFFER(rb->pool);
- rb->href = MAKE_BUFFER(rb->pool);
-
- /* Got HTTP v2 support? We'll report against the "me resource". */
- if (SVN_RA_NEON__HAVE_HTTPV2_SUPPORT(rb->ras))
- {
- report_target = rb->ras->me_resource;
- }
- /* Else, get the VCC. (If this doesn't work out for us, don't
- forget to remove the tmpfile before returning the error.) */
- else if ((err = svn_ra_neon__get_vcc(&report_target, rb->ras,
- rb->ras->url->data, pool)))
- {
- /* We're done with the file. this should delete it. Note: it
- isn't a big deal if this line is never executed -- the pool
- will eventually get it. We're just being proactive here. */
- return svn_error_trace(
- svn_error_compose_create(err,
- svn_io_file_close(rb->tmpfile,
- pool)));
- }
-
- /* dispatch the REPORT. */
- err = svn_ra_neon__parsed_request(rb->ras, "REPORT", report_target,
- NULL, rb->tmpfile, NULL,
- start_element,
- cdata_handler,
- end_element,
- rb,
- request_headers, NULL,
- rb->spool_response, pool);
-
- /* We're done with the file. Proactively close/delete the thing. */
- SVN_ERR(svn_error_compose_create(err,
- svn_io_file_close(rb->tmpfile, pool)));
-
- /* We got the whole HTTP response thing done. *Whew*. Our edit
- baton should have been closed by now, so return a failure if it
- hasn't been. */
- if (rb->edit_baton)
- {
- return svn_error_createf(
- SVN_ERR_RA_DAV_REQUEST_FAILED, NULL,
- _("REPORT response handling failed to complete the editor drive"));
- }
-
- return SVN_NO_ERROR;
-}
-
-static const svn_ra_reporter3_t ra_neon_reporter = {
- reporter_set_path,
- reporter_delete_path,
- reporter_link_path,
- reporter_finish_report,
- reporter_abort_report
-};
-
-
-/* Make a generic REPORTER / REPORT_BATON for reporting the state of
- the working copy against REVISION during updates or status checks.
- The server will drive EDITOR / EDIT_BATON to indicate how to
- transform the working copy into the requested target.
-
- SESSION is the RA session in use. TARGET is an optional single
- path component will restrict the scope of the operation to an entry
- in the directory represented by the SESSION's URL, or empty if the
- entire directory is meant to be the target.
-
- DEPTH is the requested depth of the operation. It will be
- transmitted to the server, which (if it understands depths) can use
- the information to limit the information it sends back. Also store
- DEPTH in the REPORT_BATON: that way, if the server is old and does
- not understand depth requests, the client can notice this when the
- response starts streaming in, and adjust accordingly (as of this
- writnig, by wrapping REPORTER->editor and REPORTER->edit_baton in a
- filtering editor that simply tosses out the data the client doesn't
- want).
-
- If SEND_COPYFROM_ARGS is set, then ask the server to transmit
- copyfrom args in add_file() in add_directory() calls.
-
- If IGNORE_ANCESTRY is set, the server will transmit real diffs
- between the working copy and the target even if those objects are
- not historically related. Otherwise, the response will generally
- look like a giant delete followed by a giant add.
-
- RESOURCE_WALK controls whether to ask the DAV server to supply an
- entire tree's worth of version-resource-URL working copy cache
- updates.
-
- FETCH_CONTENT is used by the REPORT response parser to determine
- whether it should bother getting the contents of files represented
- in the delta response (of if a directory delta is all that is of
- interest).
-
- If SEND_ALL is set, the server will be asked to embed contents into
- the main response.
-
- If SPOOL_RESPONSE is set, the REPORT response will be cached to
- disk in a tmpfile (in full), then read back and parsed.
-
- Oh, and do all this junk in POOL. */
-static svn_error_t *
-make_reporter(svn_ra_session_t *session,
- const svn_ra_reporter3_t **reporter,
- void **report_baton,
- svn_revnum_t revision,
- const char *target,
- const char *dst_path,
- svn_depth_t depth,
- svn_boolean_t send_copyfrom_args,
- svn_boolean_t ignore_ancestry,
- svn_boolean_t resource_walk,
- const svn_delta_editor_t *editor,
- void *edit_baton,
- svn_boolean_t fetch_content,
- svn_boolean_t send_all,
- svn_boolean_t spool_response,
- apr_pool_t *pool)
-{
- svn_ra_neon__session_t *ras = session->priv;
- report_baton_t *rb;
- const char *s;
- svn_stringbuf_t *xml_s;
- const svn_delta_editor_t *filter_editor;
- void *filter_baton;
- svn_boolean_t has_target = *target != '\0';
- svn_boolean_t server_supports_depth;
-
- SVN_ERR(svn_ra_neon__has_capability(session, &server_supports_depth,
- SVN_RA_CAPABILITY_DEPTH, pool));
- /* We can skip the depth filtering when the user requested
- depth_files or depth_infinity because the server will
- transmit the right stuff anyway. */
- if ((depth != svn_depth_files)
- && (depth != svn_depth_infinity)
- && ! server_supports_depth)
- {
- SVN_ERR(svn_delta_depth_filter_editor(&filter_editor,
- &filter_baton,
- editor,
- edit_baton,
- depth,
- has_target,
- pool));
- editor = filter_editor;
- edit_baton = filter_baton;
- }
-
- rb = apr_pcalloc(pool, sizeof(*rb));
- rb->ras = ras;
- rb->pool = pool;
- rb->scratch_pool = svn_pool_create(pool);
- rb->editor = editor;
- rb->edit_baton = edit_baton;
- rb->fetch_content = fetch_content;
- rb->in_resource = FALSE;
- rb->current_wcprop_path = svn_stringbuf_create("", pool);
- rb->is_switch = dst_path != NULL;
- rb->target = target;
- rb->receiving_all = FALSE;
- rb->spool_response = spool_response;
- rb->whandler = NULL;
- rb->whandler_baton = NULL;
- rb->svndiff_decoder = NULL;
- rb->base64_decoder = NULL;
- rb->cdata_accum = svn_stringbuf_create("", pool);
- rb->send_copyfrom_args = send_copyfrom_args;
- rb->lock_tokens = apr_hash_make(pool);
-
- /* Neon "pulls" request body content from the caller. The reporter is
- organized where data is "pushed" into self. To match these up, we use
- an intermediate file -- push data into the file, then let Neon pull
- from the file.
-
- Note: one day we could spin up a thread and use a pipe between this
- code and Neon. We write to a pipe, Neon reads from the pipe. Each
- thread can block on the pipe, waiting for the other to complete its
- work.
- */
-
- /* Create a temp file in the system area to hold the contents. Note that
- we need a file since we will be rewinding it. The file will be closed
- and deleted when the pool is cleaned up. */
- SVN_ERR(svn_io_open_unique_file3(&rb->tmpfile, NULL, NULL,
- svn_io_file_del_on_pool_cleanup,
- pool, pool));
-
- /* prep the file */
- s = apr_psprintf(pool, "<S:update-report send-all=\"%s\" xmlns:S=\""
- SVN_XML_NAMESPACE "\">" DEBUG_CR,
- send_all ? "true" : "false");
- SVN_ERR(svn_io_file_write_full(rb->tmpfile, s, strlen(s), NULL, pool));
-
- /* always write the original source path. this is part of the "new
- style" update-report syntax. if the tmpfile is used in an "old
- style' update-report request, older servers will just ignore this
- unknown xml element. */
- xml_s = NULL;
- svn_xml_escape_cdata_cstring(&xml_s, ras->url->data, pool);
- s = apr_psprintf(pool, "<S:src-path>%s</S:src-path>" DEBUG_CR, xml_s->data);
- SVN_ERR(svn_io_file_write_full(rb->tmpfile, s, strlen(s), NULL, pool));
-
- /* an invalid revnum means "latest". we can just omit the target-revision
- element in that case. */
- if (SVN_IS_VALID_REVNUM(revision))
- {
- s = apr_psprintf(pool,
- "<S:target-revision>%ld</S:target-revision>" DEBUG_CR,
- revision);
- SVN_ERR(svn_io_file_write_full(rb->tmpfile, s, strlen(s), NULL, pool));
- }
-
- /* Pre-0.36 servers don't like to see an empty target string. */
- if (*target)
- {
- xml_s = NULL;
- svn_xml_escape_cdata_cstring(&xml_s, target, pool);
- s = apr_psprintf(pool, "<S:update-target>%s</S:update-target>" DEBUG_CR,
- xml_s->data);
- SVN_ERR(svn_io_file_write_full(rb->tmpfile, s, strlen(s), NULL, pool));
- }
-
-
- /* A NULL dst_path is also no problem; this is only passed during a
- 'switch' operation. If NULL, we don't mention it in the custom
- report, and mod_dav_svn automatically runs dir_delta() on two
- identical paths. */
- if (dst_path)
- {
- xml_s = NULL;
- svn_xml_escape_cdata_cstring(&xml_s, dst_path, pool);
- s = apr_psprintf(pool, "<S:dst-path>%s</S:dst-path>" DEBUG_CR,
- xml_s->data);
- SVN_ERR(svn_io_file_write_full(rb->tmpfile, s, strlen(s), NULL, pool));
- }
-
- /* Old servers know "recursive" but not "depth"; help them DTRT. */
- if (depth == svn_depth_files || depth == svn_depth_empty)
- {
- const char *data = "<S:recursive>no</S:recursive>" DEBUG_CR;
- SVN_ERR(svn_io_file_write_full(rb->tmpfile, data, strlen(data),
- NULL, pool));
- }
-
- /* mod_dav_svn defaults to svn_depth_infinity, but we always send anyway. */
- {
- s = apr_psprintf(pool, "<S:depth>%s</S:depth>" DEBUG_CR,
- svn_depth_to_word(depth));
- SVN_ERR(svn_io_file_write_full(rb->tmpfile, s, strlen(s), NULL, pool));
- }
-
- /* mod_dav_svn will use ancestry in diffs unless it finds this element. */
- if (ignore_ancestry)
- {
- const char *data = "<S:ignore-ancestry>yes</S:ignore-ancestry>" DEBUG_CR;
- SVN_ERR(svn_io_file_write_full(rb->tmpfile, data, strlen(data),
- NULL, pool));
- }
-
- /* mod_dav_svn 1.5 and later won't send copyfrom args unless it
- finds this element. older mod_dav_svn modules should just
- ignore the unknown element. */
- if (send_copyfrom_args)
- {
- const char *data =
- "<S:send-copyfrom-args>yes</S:send-copyfrom-args>" DEBUG_CR;
- SVN_ERR(svn_io_file_write_full(rb->tmpfile, data, strlen(data),
- NULL, pool));
- }
-
- /* If we want a resource walk to occur, note that now. */
- if (resource_walk)
- {
- const char *data = "<S:resource-walk>yes</S:resource-walk>" DEBUG_CR;
- SVN_ERR(svn_io_file_write_full(rb->tmpfile, data, strlen(data),
- NULL, pool));
- }
-
- /* When in 'send-all' mode, mod_dav_svn will assume that it should
- calculate and transmit real text-deltas (instead of empty windows
- that merely indicate "text is changed") unless it finds this
- element. When not in 'send-all' mode, mod_dav_svn will never
- send text-deltas at all.
-
- NOTE: Do NOT count on servers actually obeying this, as some exist
- which obey send-all, but do not check for this directive at all! */
- if (send_all && (! fetch_content))
- {
- const char *data = "<S:text-deltas>no</S:text-deltas>" DEBUG_CR;
- SVN_ERR(svn_io_file_write_full(rb->tmpfile, data, strlen(data),
- NULL, pool));
- }
-
- *reporter = &ra_neon_reporter;
- *report_baton = rb;
-
- return SVN_NO_ERROR;
-}
-
-
-svn_error_t * svn_ra_neon__do_update(svn_ra_session_t *session,
- const svn_ra_reporter3_t **reporter,
- void **report_baton,
- svn_revnum_t revision_to_update_to,
- const char *update_target,
- svn_depth_t depth,
- svn_boolean_t send_copyfrom_args,
- const svn_delta_editor_t *wc_update,
- void *wc_update_baton,
- apr_pool_t *pool)
-{
- return make_reporter(session,
- reporter,
- report_baton,
- revision_to_update_to,
- update_target,
- NULL,
- depth,
- send_copyfrom_args,
- FALSE,
- FALSE,
- wc_update,
- wc_update_baton,
- TRUE, /* fetch_content */
- TRUE, /* send_all */
- FALSE, /* spool_response */
- pool);
-}
-
-
-svn_error_t * svn_ra_neon__do_status(svn_ra_session_t *session,
- const svn_ra_reporter3_t **reporter,
- void **report_baton,
- const char *status_target,
- svn_revnum_t revision,
- svn_depth_t depth,
- const svn_delta_editor_t *wc_status,
- void *wc_status_baton,
- apr_pool_t *pool)
-{
- return make_reporter(session,
- reporter,
- report_baton,
- revision,
- status_target,
- NULL,
- depth,
- FALSE,
- FALSE,
- FALSE,
- wc_status,
- wc_status_baton,
- FALSE, /* fetch_content */
- TRUE, /* send_all */
- FALSE, /* spool_response */
- pool);
-}
-
-
-svn_error_t * svn_ra_neon__do_switch(svn_ra_session_t *session,
- const svn_ra_reporter3_t **reporter,
- void **report_baton,
- svn_revnum_t revision_to_update_to,
- const char *update_target,
- svn_depth_t depth,
- const char *switch_url,
- const svn_delta_editor_t *wc_update,
- void *wc_update_baton,
- apr_pool_t *pool)
-{
- return make_reporter(session,
- reporter,
- report_baton,
- revision_to_update_to,
- update_target,
- switch_url,
- depth,
- FALSE, /* ### TODO(sussman): no copyfrom args */
- TRUE,
- FALSE, /* ### Disabled, pre-1.2 servers sometimes
- return incorrect resource-walk data */
- wc_update,
- wc_update_baton,
- TRUE, /* fetch_content */
- TRUE, /* send_all */
- FALSE, /* spool_response */
- pool);
-}
-
-
-svn_error_t * svn_ra_neon__do_diff(svn_ra_session_t *session,
- const svn_ra_reporter3_t **reporter,
- void **report_baton,
- svn_revnum_t revision,
- const char *diff_target,
- svn_depth_t depth,
- svn_boolean_t ignore_ancestry,
- svn_boolean_t text_deltas,
- const char *versus_url,
- const svn_delta_editor_t *wc_diff,
- void *wc_diff_baton,
- apr_pool_t *pool)
-{
- return make_reporter(session,
- reporter,
- report_baton,
- revision,
- diff_target,
- versus_url,
- depth,
- FALSE,
- ignore_ancestry,
- FALSE,
- wc_diff,
- wc_diff_baton,
- text_deltas, /* fetch_content */
- FALSE, /* send_all */
- TRUE, /* spool_response */
- pool);
-}
diff --git a/subversion/libsvn_ra_neon/file_revs.c b/subversion/libsvn_ra_neon/file_revs.c
deleted file mode 100644
index 461a9f0..0000000
--- a/subversion/libsvn_ra_neon/file_revs.c
+++ /dev/null
@@ -1,388 +0,0 @@
-/*
- * file_revs.c : routines for requesting and parsing file-revs reports
- *
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- * ====================================================================
- */
-
-
-
-#define APR_WANT_STRFUNC
-#include <apr_want.h> /* for strcmp() */
-
-#include <apr_tables.h>
-#include <apr_strings.h>
-#include <apr_xml.h>
-
-#include "svn_error.h"
-#include "svn_pools.h"
-#include "svn_delta.h"
-#include "svn_io.h"
-#include "svn_path.h"
-#include "svn_xml.h"
-#include "svn_base64.h"
-#include "svn_props.h"
-#include "../libsvn_ra/ra_loader.h"
-#include "svn_private_config.h"
-
-#include "ra_neon.h"
-
-
-
-/*** Code ***/
-
-struct report_baton {
- /* From the caller. */
- svn_file_rev_handler_t handler;
- void *handler_baton;
-
- /* Arguments for the callback. */
- const char *path;
- svn_revnum_t revnum;
- apr_hash_t *rev_props;
- apr_array_header_t *prop_diffs;
-
- /* The current property name. */
- const char *prop_name;
-
- /* Is the current property encoded in base64? */
- svn_boolean_t base64_prop;
-
- /* Buffer for accumulating CDATA for prop values. */
- svn_stringbuf_t *cdata_accum;
-
- /* Stream for writing text delta to. */
- svn_stream_t *stream;
-
- /* Merged revision flag. */
- svn_boolean_t merged_rev;
-
- svn_boolean_t had_txdelta; /* Did we have a txdelta in this file-rev elem? */
-
- apr_pool_t *subpool;
-};
-
-/* Prepare RB for a new revision. */
-static void
-reset_file_rev(struct report_baton *rb)
-{
- svn_pool_clear(rb->subpool);
- rb->path = NULL;
- rb->revnum = SVN_INVALID_REVNUM;
- rb->rev_props = apr_hash_make(rb->subpool);
- rb->prop_diffs = apr_array_make(rb->subpool, 0, sizeof(svn_prop_t));
- rb->merged_rev = FALSE;
- rb->had_txdelta = FALSE;
- /* Just in case... */
- rb->stream = NULL;
-}
-
-
-/* Our beloved elements. */
-static const svn_ra_neon__xml_elm_t report_elements[] =
- {
- { SVN_XML_NAMESPACE, "file-revs-report", ELEM_file_revs_report, 0 },
- { SVN_XML_NAMESPACE, "file-rev", ELEM_file_rev, 0 },
- { SVN_XML_NAMESPACE, "rev-prop", ELEM_rev_prop, 0 },
- { SVN_XML_NAMESPACE, "set-prop", ELEM_set_prop, 0 },
- { SVN_XML_NAMESPACE, "remove-prop", ELEM_remove_prop, 0 },
- { SVN_XML_NAMESPACE, "merged-revision", ELEM_merged_revision, 0 },
- { SVN_XML_NAMESPACE, "txdelta", ELEM_txdelta, 0 },
- { NULL }
- };
-
-
-/* This implements the `svn_ra_neon__startelm_cb_t' prototype. */
-static svn_error_t *
-start_element(int *elem, void *userdata, int parent_state, const char *ns,
- const char *ln, const char **atts)
-{
- struct report_baton *rb = userdata;
- const svn_ra_neon__xml_elm_t *elm;
- const char *att;
-
- elm = svn_ra_neon__lookup_xml_elem(report_elements, ns, ln);
-
- /* Skip unknown elements. */
- if (!elm)
- {
- *elem = NE_XML_DECLINE;
- return SVN_NO_ERROR;
- }
-
- switch (parent_state)
- {
- case ELEM_root:
- if (elm->id != ELEM_file_revs_report)
- return UNEXPECTED_ELEMENT(ns, ln);
- break;
-
- case ELEM_file_revs_report:
- if (elm->id == ELEM_file_rev)
- {
- reset_file_rev(rb);
- att = svn_xml_get_attr_value("rev", atts);
- if (!att)
- return MISSING_ATTR(ns, ln, "rev");
- rb->revnum = SVN_STR_TO_REV(att);
- att = svn_xml_get_attr_value("path", atts);
- if (!att)
- return MISSING_ATTR(ns, ln, "path");
- rb->path = apr_pstrdup(rb->subpool, att);
- }
- else
- return UNEXPECTED_ELEMENT(ns, ln);
- break;
-
- case ELEM_file_rev:
- /* txdelta must be the last elem in file-rev. */
- if (rb->had_txdelta)
- return UNEXPECTED_ELEMENT(ns, ln);
- switch (elm->id)
- {
- case ELEM_rev_prop:
- case ELEM_set_prop:
- att = svn_xml_get_attr_value("name", atts);
- if (!att)
- return MISSING_ATTR(ns, ln, "name");
- rb->prop_name = apr_pstrdup(rb->subpool, att);
- att = svn_xml_get_attr_value("encoding", atts);
- if (att && strcmp(att, "base64") == 0)
- rb->base64_prop = TRUE;
- else
- rb->base64_prop = FALSE;
- break;
- case ELEM_remove_prop:
- {
- svn_prop_t *prop = apr_array_push(rb->prop_diffs);
- att = svn_xml_get_attr_value("name", atts);
- if (!att || *att == '\0')
- return MISSING_ATTR(ns, ln, "name");
- prop->name = apr_pstrdup(rb->subpool, att);
- prop->value = NULL;
- }
- break;
- case ELEM_txdelta:
- {
- svn_txdelta_window_handler_t whandler = NULL;
- void *wbaton;
- /* It's time to call our hanlder. */
- SVN_ERR(rb->handler(rb->handler_baton, rb->path, rb->revnum,
- rb->rev_props, rb->merged_rev, &whandler,
- &wbaton, rb->prop_diffs, rb->subpool));
- if (whandler)
- rb->stream = svn_base64_decode
- (svn_txdelta_parse_svndiff(whandler, wbaton, TRUE,
- rb->subpool), rb->subpool);
- }
- break;
- case ELEM_merged_revision:
- {
- rb->merged_rev = TRUE;
- }
- break;
- default:
- return UNEXPECTED_ELEMENT(ns, ln);
- }
- break;
- default:
- return UNEXPECTED_ELEMENT(ns, ln);
- }
-
- *elem = elm->id;
-
- return SVN_NO_ERROR;
-}
-
-/* Extract the property value from RB, possibly base64-decoding it.
- Resets RB->cdata_accum. */
-static const svn_string_t *
-extract_propval(struct report_baton *rb)
-{
- const svn_string_t *v = svn_string_create_from_buf(rb->cdata_accum,
- rb->subpool);
- svn_stringbuf_setempty(rb->cdata_accum);
- if (rb->base64_prop)
- return svn_base64_decode_string(v, rb->subpool);
- else
- return v;
-}
-
-/* This implements the `svn_ra_neon__endelm_cb_t' prototype. */
-static svn_error_t *
-end_element(void *userdata, int state,
- const char *nspace, const char *elt_name)
-{
- struct report_baton *rb = userdata;
-
- switch (state)
- {
- case ELEM_file_rev:
- /* If we had no txdelta, we call the handler here, informing it that
- there were no content changes. */
- if (!rb->had_txdelta)
- SVN_ERR(rb->handler(rb->handler_baton, rb->path, rb->revnum,
- rb->rev_props, rb->merged_rev, NULL, NULL,
- rb->prop_diffs, rb->subpool));
- break;
-
- case ELEM_rev_prop:
- apr_hash_set(rb->rev_props, rb->prop_name, APR_HASH_KEY_STRING,
- extract_propval(rb));
- break;
-
- case ELEM_set_prop:
- {
- svn_prop_t *prop = apr_array_push(rb->prop_diffs);
- prop->name = rb->prop_name;
- prop->value = extract_propval(rb);
- break;
- }
-
- case ELEM_txdelta:
- if (rb->stream)
- {
- SVN_ERR(svn_stream_close(rb->stream));
- rb->stream = NULL;
- }
- rb->had_txdelta = TRUE;
- break;
- }
- return SVN_NO_ERROR;
-}
-
-/* This implements the `svn_ra_neon__cdata_cb' prototype. */
-static svn_error_t *
-cdata_handler(void *userdata, int state,
- const char *cdata, size_t len)
-{
- struct report_baton *rb = userdata;
-
- switch (state)
- {
- case ELEM_rev_prop:
- case ELEM_set_prop:
- svn_stringbuf_appendbytes(rb->cdata_accum, cdata, len);
- break;
- case ELEM_txdelta:
- if (rb->stream)
- {
- apr_size_t l = len;
- SVN_ERR(svn_stream_write(rb->stream, cdata, &l));
- if (l != len)
- return svn_error_create(SVN_ERR_INCOMPLETE_DATA, NULL,
- _("Failed to write full amount to stream"));
- }
-
- /* In other cases, we just ingore the CDATA. */
- }
-
- return SVN_NO_ERROR;
-}
-
-svn_error_t *
-svn_ra_neon__get_file_revs(svn_ra_session_t *session,
- const char *path,
- svn_revnum_t start,
- svn_revnum_t end,
- svn_boolean_t include_merged_revisions,
- svn_file_rev_handler_t handler,
- void *handler_baton,
- apr_pool_t *pool)
-{
- svn_ra_neon__session_t *ras = session->priv;
- svn_stringbuf_t *request_body = svn_stringbuf_create("", pool);
- const char *bc_url;
- const char *bc_relative;
- const char *final_bc_url;
- int http_status = 0;
- struct report_baton rb;
- svn_error_t *err;
- apr_hash_t *request_headers = apr_hash_make(pool);
- static const char request_head[]
- = "<S:file-revs-report xmlns:S=\"" SVN_XML_NAMESPACE "\">" DEBUG_CR;
- static const char request_tail[]
- = "</S:file-revs-report>";
-
- apr_hash_set(request_headers, "Accept-Encoding", APR_HASH_KEY_STRING,
- "svndiff1;q=0.9,svndiff;q=0.8");
-
- /* Construct request body. */
- svn_stringbuf_appendcstr(request_body, request_head);
- svn_stringbuf_appendcstr(request_body,
- apr_psprintf(pool,
- "<S:start-revision>%ld"
- "</S:start-revision>", start));
- svn_stringbuf_appendcstr(request_body,
- apr_psprintf(pool,
- "<S:end-revision>%ld"
- "</S:end-revision>", end));
- if (include_merged_revisions)
- {
- svn_stringbuf_appendcstr(request_body,
- apr_psprintf(pool,
- "<S:include-merged-revisions/>"));
- }
-
- svn_stringbuf_appendcstr(request_body, "<S:path>");
- svn_stringbuf_appendcstr(request_body,
- apr_xml_quote_string(pool, path, 0));
- svn_stringbuf_appendcstr(request_body, "</S:path>");
- svn_stringbuf_appendcstr(request_body, request_tail);
-
- /* Initialize the baton. */
- rb.handler = handler;
- rb.handler_baton = handler_baton;
- rb.cdata_accum = svn_stringbuf_create("", pool);
- rb.subpool = svn_pool_create(pool);
- reset_file_rev(&rb);
-
- /* ras's URL may not exist in HEAD, and thus it's not safe to send
- it as the main argument to the REPORT request; it might cause
- dav_get_resource() to choke on the server. So instead, we pass a
- baseline-collection URL, which we get from END. */
- SVN_ERR(svn_ra_neon__get_baseline_info(&bc_url, &bc_relative, NULL, ras,
- ras->url->data, end, pool));
- final_bc_url = svn_path_url_add_component2(bc_url, bc_relative, pool);
-
- /* Dispatch the request. */
- err = svn_ra_neon__parsed_request(ras, "REPORT", final_bc_url,
- request_body->data, NULL, NULL,
- start_element, cdata_handler, end_element,
- &rb, request_headers, &http_status, FALSE,
- pool);
-
- /* Map status 501: Method Not Implemented to our not implemented error.
- 1.0.x servers and older don't support this report. */
- if (http_status == 501)
- return svn_error_createf(SVN_ERR_RA_NOT_IMPLEMENTED, err,
- _("'%s' REPORT not implemented"), "get-file-revs");
-
- SVN_ERR(err);
-
- /* Caller expects at least one revision. Signal error otherwise. */
- if (!SVN_IS_VALID_REVNUM(rb.revnum))
- return svn_error_create(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL,
- _("The file-revs report didn't contain any "
- "revisions"));
-
- svn_pool_destroy(rb.subpool);
-
- return SVN_NO_ERROR;
-}
diff --git a/subversion/libsvn_ra_neon/get_dated_rev.c b/subversion/libsvn_ra_neon/get_dated_rev.c
deleted file mode 100644
index dde9467..0000000
--- a/subversion/libsvn_ra_neon/get_dated_rev.c
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * date_rev.c : RA get-dated-revision API implementation
- *
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- * ====================================================================
- */
-
-
-
-#define APR_WANT_STRFUNC
-#include <apr_want.h> /* for strcmp() */
-
-#include <apr_pools.h>
-#include <apr_tables.h>
-#include <apr_strings.h>
-#include <apr_xml.h>
-
-#include <ne_basic.h>
-
-#include "svn_error.h"
-#include "svn_pools.h"
-#include "svn_ra.h"
-#include "../libsvn_ra/ra_loader.h"
-#include "svn_path.h"
-#include "svn_xml.h"
-#include "svn_dav.h"
-#include "svn_time.h"
-
-#include "private/svn_dav_protocol.h"
-#include "svn_private_config.h"
-
-#include "ra_neon.h"
-
-
-/* -------------------------------------------------------------------------
-**
-** DATED REV REPORT HANDLING
-**
-** DeltaV provides no mechanism for mapping a date to a revision, so
-** we use a custom report, S:dated-rev-report. The request contains a
-** DAV:creationdate element giving the requested date; the response
-** contains a DAV:version-name element giving the most recent revision
-** as of that date.
-**
-** Since this report is so simple, we don't bother with validation or
-** baton structures or anything; we just set the revision number in
-** the end-element handler for DAV:version-name.
-*/
-
-/* Elements used in a dated-rev-report response */
-static const svn_ra_neon__xml_elm_t drev_report_elements[] =
-{
- { SVN_XML_NAMESPACE, "dated-rev-report", ELEM_dated_rev_report, 0 },
- { "DAV:", "version-name", ELEM_version_name, SVN_RA_NEON__XML_CDATA },
- { NULL }
-};
-
-typedef struct drev_baton_t
-{
- svn_stringbuf_t *cdata;
- apr_pool_t *pool;
- svn_revnum_t revision;
-} drev_baton_t;
-
-
-/* This implements the `svn_ra_neon__xml_startelm_cb' prototype. */
-static svn_error_t *
-drev_start_element(int *elem, void *baton, int parent,
- const char *nspace, const char *name, const char **atts)
-{
- const svn_ra_neon__xml_elm_t *elm =
- svn_ra_neon__lookup_xml_elem(drev_report_elements, nspace, name);
- drev_baton_t *b = baton;
-
- *elem = elm ? elm->id : SVN_RA_NEON__XML_DECLINE;
- if (!elm)
- return SVN_NO_ERROR;
-
- if (elm->id == ELEM_version_name)
- b->cdata = svn_stringbuf_create("", b->pool);
-
- return SVN_NO_ERROR;
-}
-
-/* This implements the `svn_ra_neon__xml_endelm_cb' prototype. */
-static svn_error_t *
-drev_end_element(void *baton, int state,
- const char *nspace, const char *name)
-{
- drev_baton_t *b = baton;
-
- if (state == ELEM_version_name && b->cdata)
- {
- b->revision = SVN_STR_TO_REV(b->cdata->data);
- b->cdata = NULL;
- }
-
- return SVN_NO_ERROR;
-}
-
-svn_error_t *svn_ra_neon__get_dated_revision(svn_ra_session_t *session,
- svn_revnum_t *revision,
- apr_time_t timestamp,
- apr_pool_t *pool)
-{
- svn_ra_neon__session_t *ras = session->priv;
- const char *body;
- const char *report_target;
- svn_error_t *err;
- drev_baton_t *b = apr_palloc(pool, sizeof(*b));
-
- b->pool = pool;
- b->cdata = NULL;
- b->revision = SVN_INVALID_REVNUM;
-
- /* Got HTTP v2 support? We'll report against the "me resource".
- Otherwise, we'll use the VCC. */
- if (SVN_RA_NEON__HAVE_HTTPV2_SUPPORT(ras))
- {
- report_target = ras->me_resource;
- }
- else
- {
- SVN_ERR(svn_ra_neon__get_vcc(&report_target, ras, ras->root.path, pool));
- }
-
- body = apr_psprintf(pool,
- "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
- "<S:dated-rev-report xmlns:S=\"" SVN_XML_NAMESPACE "\" "
- "xmlns:D=\"DAV:\">"
- "<D:" SVN_DAV__CREATIONDATE ">%s</D:"
- SVN_DAV__CREATIONDATE "></S:dated-rev-report>",
- svn_time_to_cstring(timestamp, pool));
-
- err = svn_ra_neon__parsed_request(ras, "REPORT",
- report_target, body, NULL, NULL,
- drev_start_element,
- svn_ra_neon__xml_collect_cdata,
- drev_end_element,
- b, NULL, NULL, FALSE, pool);
- if (err && err->apr_err == SVN_ERR_UNSUPPORTED_FEATURE)
- return svn_error_quick_wrap(err, _("Server does not support date-based "
- "operations"));
- else if (err)
- return err;
-
- if (b->revision == SVN_INVALID_REVNUM)
- return svn_error_create(SVN_ERR_INCOMPLETE_DATA, NULL,
- _("Invalid server response to dated-rev request"));
-
- *revision = b->revision;
- return SVN_NO_ERROR;
-}
diff --git a/subversion/libsvn_ra_neon/get_deleted_rev.c b/subversion/libsvn_ra_neon/get_deleted_rev.c
deleted file mode 100644
index 2e4dbb4..0000000
--- a/subversion/libsvn_ra_neon/get_deleted_rev.c
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * get_deleted_rev.c : ra_neon get_deleted_rev API implementation.
- *
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- * ====================================================================
- */
-
-#include <apr_pools.h>
-#include <apr_strings.h>
-#include <apr_xml.h>
-
-#include "svn_error.h"
-#include "svn_pools.h"
-#include "svn_ra.h"
-#include "../libsvn_ra/ra_loader.h"
-#include "svn_path.h"
-#include "svn_xml.h"
-
-#include "private/svn_dav_protocol.h"
-#include "svn_private_config.h"
-
-#include "ra_neon.h"
-
-/* -------------------------------------------------------------------------
- *
- * DELETED REV REPORT HANDLING
- *
- * The get-deleted-rev-report XML request body is quite straightforward:
- *
- * <S:get-deleted-rev-report xmlns:S="svn:" xmlns:D="DAV:">
- * <S:path>...</S:path>
- * <S:peg-revision>...</S:peg-revision>
- * <S:end-revision>...</S:end-revision>
- * </S:get-deleted-rev-report>
- *
- * The response is simply a DAV:version-name element giving the revision
- * path@peg-revision was first deleted up to end-revision or SVN_INVALID_REVNUM
- * if it was never deleted:
- *
- * <S:get-deleted-rev-report xmlns:S="svn:" xmlns:D="DAV:">
- * <D:version-name>...</D:version-name>
- * </S:get-deleted-rev-report>
- */
-
-/* Elements used in a get-deleted-rev-report response. */
-static const svn_ra_neon__xml_elm_t drev_report_elements[] =
-{
- { SVN_XML_NAMESPACE, "get-deleted-rev-report", ELEM_deleted_rev_report, 0 },
- { "DAV:", "version-name", ELEM_version_name, SVN_RA_NEON__XML_CDATA },
- { NULL }
-};
-
-/* Context for parsing server's response. */
-typedef struct drev_baton_t
-{
- svn_stringbuf_t *cdata;
- svn_revnum_t revision;
- apr_pool_t *pool;
-} drev_baton_t;
-
-
-/* This implements the 'svn_ra_neon__startelm_cb_t' prototype. */
-static svn_error_t *
-drev_start_element(int *elem, void *baton, int parent,
- const char *nspace, const char *name, const char **atts)
-{
- const svn_ra_neon__xml_elm_t *elm =
- svn_ra_neon__lookup_xml_elem(drev_report_elements, nspace, name);
- drev_baton_t *b = baton;
-
- *elem = elm ? elm->id : SVN_RA_NEON__XML_DECLINE;
- if (!elm)
- return SVN_NO_ERROR;
-
- if (elm->id == ELEM_version_name)
- b->cdata = svn_stringbuf_create("", b->pool);
-
- return SVN_NO_ERROR;
-}
-
-/* This implements the 'svn_ra_neon__endelm_cb_t' prototype. */
-static svn_error_t *
-drev_end_element(void *baton, int state,
- const char *nspace, const char *name)
-{
- drev_baton_t *b = baton;
-
- if (state == ELEM_version_name && b->cdata)
- {
- b->revision = SVN_STR_TO_REV(b->cdata->data);
- b->cdata = NULL;
- }
-
- return SVN_NO_ERROR;
-}
-
-svn_error_t *
-svn_ra_neon__get_deleted_rev(svn_ra_session_t *session,
- const char *path,
- svn_revnum_t peg_revision,
- svn_revnum_t end_revision,
- svn_revnum_t *revision_deleted,
- apr_pool_t *pool)
-{
- svn_ra_neon__session_t *ras = session->priv;
- const char *body, *final_bc_url;
- const char *bc_url;
- const char *bc_relative;
- int status_code;
- svn_error_t *err;
- drev_baton_t *b = apr_palloc(pool, sizeof(*b));
-
- b->pool = pool;
- b->cdata = NULL;
- b->revision = SVN_INVALID_REVNUM;
-
- /* ras's URL may not exist in HEAD, and thus it's not safe to send
- it as the main argument to the REPORT request; it might cause
- dav_get_resource() to choke on the server. So instead, we pass a
- baseline-collection URL, which we get from the peg revision. */
- SVN_ERR(svn_ra_neon__get_baseline_info(&bc_url, &bc_relative, NULL, ras,
- ras->url->data, peg_revision, pool));
- final_bc_url = svn_path_url_add_component2(bc_url, bc_relative, pool);
-
- body = apr_psprintf(pool,
- "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
- "<S:get-deleted-rev-report xmlns:S=\""
- SVN_XML_NAMESPACE "\" ""xmlns:D=\"DAV:\">"
- "<S:path>%s</S:path>"
- "<S:peg-revision>%s</S:peg-revision>"
- "<S:end-revision>%s</S:end-revision>"
- "</S:get-deleted-rev-report>",
- apr_xml_quote_string(pool, path, FALSE),
- apr_psprintf(pool, "%ld", peg_revision),
- apr_psprintf(pool, "%ld", end_revision));
-
- /* Send the get-deleted-rev-report report request. There is no guarantee
- that svn_ra_neon__parsed_request() will set status_code, so initialize
- it. */
- status_code = 0;
- err = svn_ra_neon__parsed_request(ras, "REPORT", final_bc_url, body,
- NULL, NULL,
- drev_start_element,
- svn_ra_neon__xml_collect_cdata,
- drev_end_element,
- b, NULL, &status_code, FALSE, pool);
-
- /* Map status 501: Method Not Implemented to our not implemented error.
- 1.5.x servers and older don't support this report. */
- if (status_code == 501)
- return svn_error_createf(SVN_ERR_RA_NOT_IMPLEMENTED, err,
- _("'%s' REPORT not implemented"), "get-deleted-rev");
-
- SVN_ERR(err);
- *revision_deleted = b->revision;
- return SVN_NO_ERROR;
-}
diff --git a/subversion/libsvn_ra_neon/get_location_segments.c b/subversion/libsvn_ra_neon/get_location_segments.c
deleted file mode 100644
index ca8143a..0000000
--- a/subversion/libsvn_ra_neon/get_location_segments.c
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * get_location_segments.c : RA get-location-segments API implementation
- *
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- * ====================================================================
- */
-
-
-
-#define APR_WANT_STRFUNC
-#include <apr_want.h> /* for strcmp() */
-
-#include <apr_pools.h>
-#include <apr_tables.h>
-#include <apr_strings.h>
-#include <apr_xml.h>
-
-#include <ne_basic.h>
-
-#include "svn_error.h"
-#include "svn_pools.h"
-#include "svn_ra.h"
-#include "../libsvn_ra/ra_loader.h"
-#include "svn_path.h"
-#include "svn_xml.h"
-#include "svn_dav.h"
-
-#include "private/svn_dav_protocol.h"
-#include "svn_private_config.h"
-
-#include "ra_neon.h"
-
-
-/*
- * Plan for processing the XML. The XML will be of the form:
- *
- * <S:get-location-segments-report xmlns...>
- * <S:location [path="..."] range_start="..." range_end="..."/>
- * ...
- * </S:get-location-segments-report>
- *
- * We extract what we want at the start of <S:location>.
- */
-
-/* Elements used in a get-locations response */
-static const svn_ra_neon__xml_elm_t gls_report_elements[] =
-{
- { SVN_XML_NAMESPACE, "get-location-segments-report",
- ELEM_get_location_segments_report, 0 },
- { SVN_XML_NAMESPACE, "location-segment", ELEM_location_segment, 0 },
- { NULL }
-};
-
-typedef struct get_location_segments_baton_t {
- svn_location_segment_receiver_t receiver;
- void *receiver_baton;
- apr_pool_t *subpool;
-} get_location_segments_baton_t;
-
-/* This implements the `svn_ra_neon__startelem_cb_t' prototype. */
-static svn_error_t *
-gls_start_element(int *elem, void *userdata, int parent_state,
- const char *ns, const char *ln, const char **atts)
-{
- get_location_segments_baton_t *baton = userdata;
- const svn_ra_neon__xml_elm_t *elm;
-
- /* Just skip unknown elements. */
- if (! ((elm = svn_ra_neon__lookup_xml_elem(gls_report_elements, ns, ln))))
- {
- *elem = NE_XML_DECLINE;
- return SVN_NO_ERROR;
- }
-
- if (parent_state == ELEM_get_location_segments_report
- && elm->id == ELEM_location_segment)
- {
- const char *rev_str;
- svn_revnum_t range_start = SVN_INVALID_REVNUM;
- svn_revnum_t range_end = SVN_INVALID_REVNUM;
- const char *path = NULL;
-
- path = svn_xml_get_attr_value("path", atts);
- rev_str = svn_xml_get_attr_value("range-start", atts);
- if (rev_str)
- range_start = SVN_STR_TO_REV(rev_str);
- rev_str = svn_xml_get_attr_value("range-end", atts);
- if (rev_str)
- range_end = SVN_STR_TO_REV(rev_str);
-
- if (SVN_IS_VALID_REVNUM(range_start) && SVN_IS_VALID_REVNUM(range_end))
- {
- svn_location_segment_t *segment = apr_pcalloc(baton->subpool,
- sizeof(*segment));
- segment->path = path;
- segment->range_start = range_start;
- segment->range_end = range_end;
- SVN_ERR(baton->receiver(segment,
- baton->receiver_baton,
- baton->subpool));
- svn_pool_clear(baton->subpool);
- }
- else
- {
- return svn_error_create(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Expected valid revision range"));
- }
- }
-
- *elem = elm->id;
-
- return SVN_NO_ERROR;
-}
-
-svn_error_t *
-svn_ra_neon__get_location_segments(svn_ra_session_t *session,
- const char *path,
- svn_revnum_t peg_revision,
- svn_revnum_t start_rev,
- svn_revnum_t end_rev,
- svn_location_segment_receiver_t receiver,
- void *receiver_baton,
- apr_pool_t *pool)
-
-{
- svn_ra_neon__session_t *ras = session->priv;
- svn_stringbuf_t *request_body;
- svn_error_t *err;
- get_location_segments_baton_t request_baton;
- const char *bc_url;
- const char *bc_relative;
- const char *bc;
- int status_code = 0;
- apr_pool_t *subpool = svn_pool_create(pool);
-
- /* Build the request body. */
- request_body = svn_stringbuf_create("", subpool);
- svn_stringbuf_appendcstr(request_body,
- "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
- DEBUG_CR "<S:get-location-segments xmlns:S=\""
- SVN_XML_NAMESPACE "\" xmlns:D=\"DAV:\">" DEBUG_CR);
-
- /* Tack on the path... */
- svn_stringbuf_appendcstr(request_body, "<S:path>");
- svn_stringbuf_appendcstr(request_body, apr_xml_quote_string(subpool, path, 0));
- svn_stringbuf_appendcstr(request_body, "</S:path>" DEBUG_CR);
-
- /* ...and maybe a peg revision... */
- if (SVN_IS_VALID_REVNUM(peg_revision))
- svn_stringbuf_appendcstr
- (request_body, apr_psprintf(subpool,
- "<S:peg-revision>%ld</S:peg-revision>"
- DEBUG_CR, peg_revision));
-
- /* ...and maybe a start revision... */
- if (SVN_IS_VALID_REVNUM(start_rev))
- svn_stringbuf_appendcstr
- (request_body, apr_psprintf(subpool,
- "<S:start-revision>%ld</S:start-revision>"
- DEBUG_CR, start_rev));
-
- /* ...and maybe an end revision. */
- if (SVN_IS_VALID_REVNUM(end_rev))
- svn_stringbuf_appendcstr
- (request_body, apr_psprintf(subpool,
- "<S:end-revision>%ld</S:end-revision>"
- DEBUG_CR, end_rev));
-
- svn_stringbuf_appendcstr(request_body, "</S:get-location-segments>");
-
- request_baton.receiver = receiver;
- request_baton.receiver_baton = receiver_baton;
- request_baton.subpool = svn_pool_create(subpool);
-
- /* ras's URL may not exist in HEAD, and thus it's not safe to send
- it as the main argument to the REPORT request; it might cause
- dav_get_resource() to choke on the server. So instead, we pass a
- baseline-collection URL, which we get from the PEG_REVISION. */
- SVN_ERR(svn_ra_neon__get_baseline_info(&bc_url, &bc_relative, NULL, ras,
- ras->url->data, peg_revision,
- subpool));
- bc = svn_path_url_add_component2(bc_url, bc_relative, subpool);
-
- err = svn_ra_neon__parsed_request(ras, "REPORT", bc,
- request_body->data, NULL, NULL,
- gls_start_element, NULL, NULL,
- &request_baton, NULL, &status_code,
- FALSE, subpool);
- svn_pool_destroy(request_baton.subpool);
- svn_pool_destroy(subpool);
-
- /* Map status 501: Method Not Implemented to our not implemented error.
- 1.0.x servers and older don't support this report. */
- if (status_code == 501)
- return svn_error_createf(SVN_ERR_RA_NOT_IMPLEMENTED, err,
- _("'%s' REPORT not implemented"),
- "get-location-segments");
-
- return err;
-}
diff --git a/subversion/libsvn_ra_neon/get_locations.c b/subversion/libsvn_ra_neon/get_locations.c
deleted file mode 100644
index b1df5d4..0000000
--- a/subversion/libsvn_ra_neon/get_locations.c
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * get_locations.c : RA get-locations API implementation
- *
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- * ====================================================================
- */
-
-
-
-#define APR_WANT_STRFUNC
-#include <apr_want.h> /* for strcmp() */
-
-#include <apr_pools.h>
-#include <apr_tables.h>
-#include <apr_strings.h>
-#include <apr_xml.h>
-
-#include <ne_basic.h>
-
-#include "svn_error.h"
-#include "svn_pools.h"
-#include "svn_ra.h"
-#include "../libsvn_ra/ra_loader.h"
-#include "svn_path.h"
-#include "svn_xml.h"
-#include "svn_dav.h"
-
-#include "private/svn_dav_protocol.h"
-#include "svn_private_config.h"
-
-#include "ra_neon.h"
-
-
-/*
- * Plan for processing the XML. The XML will be of the form:
- *
- * <S:get-locations-report xmlns...>
- * <S:location rev="..." path="..."/>
- * ...
- * </S:get-locations-report>
- *
- * We extract what we want at the start of <S:location>.
-*/
-
-/* Elements used in a get-locations response */
-static const svn_ra_neon__xml_elm_t gloc_report_elements[] =
-{
- { SVN_XML_NAMESPACE, "get-locations-report", ELEM_get_locations_report, 0 },
- { SVN_XML_NAMESPACE, "location", ELEM_location, 0 },
- { NULL }
-};
-
-typedef struct get_locations_baton_t {
- svn_ra_neon__session_t *ras;
- apr_hash_t *hash;
- apr_pool_t *pool;
-} get_locations_baton_t;
-
-
-/* This implements the `svn_ra_neon__startelem_cb_t' prototype. */
-static svn_error_t *
-gloc_start_element(int *elem, void *userdata, int parent_state,
- const char *ns, const char *ln, const char **atts)
-{
- get_locations_baton_t *baton = userdata;
- const svn_ra_neon__xml_elm_t *elm;
-
- elm = svn_ra_neon__lookup_xml_elem(gloc_report_elements, ns, ln);
-
- /* Just skip unknown elements. */
- if (!elm)
- {
- *elem = NE_XML_DECLINE;
- return SVN_NO_ERROR;
- }
-
- if (parent_state == ELEM_get_locations_report
- && elm->id == ELEM_location)
- {
- svn_revnum_t rev = SVN_INVALID_REVNUM;
- const char *path;
- const char *r;
-
- r = svn_xml_get_attr_value("rev", atts);
- if (r)
- rev = SVN_STR_TO_REV(r);
-
- path = svn_xml_get_attr_value("path", atts);
-
- if (SVN_IS_VALID_REVNUM(rev) && path)
- apr_hash_set(baton->hash,
- apr_pmemdup(baton->pool, &rev, sizeof(rev)),
- sizeof(rev), apr_pstrdup(baton->pool, path));
- else
- return svn_error_create(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Expected a valid revnum and path"));
- }
-
- *elem = elm->id;
-
- return SVN_NO_ERROR;
-}
-
-svn_error_t *
-svn_ra_neon__get_locations(svn_ra_session_t *session,
- apr_hash_t **locations,
- const char *relative_path,
- svn_revnum_t peg_revision,
- const apr_array_header_t *location_revisions,
- apr_pool_t *pool)
-{
- svn_ra_neon__session_t *ras = session->priv;
- svn_stringbuf_t *request_body;
- svn_error_t *err;
- get_locations_baton_t request_baton;
- const char *relative_path_quoted;
- const char *bc_url;
- const char *bc_relative;
- const char *final_bc_url;
- int i;
- int status_code = 0;
-
- *locations = apr_hash_make(pool);
-
- request_body = svn_stringbuf_create("", pool);
- svn_stringbuf_appendcstr(request_body,
- "<?xml version=\"1.0\" encoding=\"utf-8\"?>" DEBUG_CR
- "<S:get-locations xmlns:S=\"" SVN_XML_NAMESPACE
- "\" xmlns:D=\"DAV:\">" DEBUG_CR);
-
- svn_stringbuf_appendcstr(request_body, "<S:path>");
- /* We need to escape the path XML-wise. */
- relative_path_quoted = apr_xml_quote_string(pool, relative_path, 0);
- svn_stringbuf_appendcstr(request_body, relative_path_quoted);
- svn_stringbuf_appendcstr(request_body, "</S:path>" DEBUG_CR);
- svn_stringbuf_appendcstr(request_body,
- apr_psprintf(pool,
- "<S:peg-revision>%ld"
- "</S:peg-revision>" DEBUG_CR,
- peg_revision));
-
- for (i = 0; i < location_revisions->nelts; ++i)
- {
- svn_revnum_t rev = APR_ARRAY_IDX(location_revisions, i, svn_revnum_t);
- svn_stringbuf_appendcstr(request_body,
- apr_psprintf(pool,
- "<S:location-revision>%ld"
- "</S:location-revision>" DEBUG_CR,
- rev));
- }
-
- svn_stringbuf_appendcstr(request_body, "</S:get-locations>");
-
- request_baton.ras = ras;
- request_baton.hash = *locations;
- request_baton.pool = pool;
-
- /* ras's URL may not exist in HEAD, and thus it's not safe to send
- it as the main argument to the REPORT request; it might cause
- dav_get_resource() to choke on the server. So instead, we pass a
- baseline-collection URL, which we get from the peg revision. */
- SVN_ERR(svn_ra_neon__get_baseline_info(&bc_url, &bc_relative, NULL, ras,
- ras->url->data, peg_revision, pool));
- final_bc_url = svn_path_url_add_component2(bc_url, bc_relative, pool);
-
- err = svn_ra_neon__parsed_request(ras, "REPORT", final_bc_url,
- request_body->data, NULL, NULL,
- gloc_start_element, NULL, NULL,
- &request_baton, NULL, &status_code,
- FALSE, pool);
-
- /* Map status 501: Method Not Implemented to our not implemented error.
- 1.0.x servers and older don't support this report. */
- if (status_code == 501)
- return svn_error_createf(SVN_ERR_RA_NOT_IMPLEMENTED, err,
- _("'%s' REPORT not implemented"), "get-locations");
-
- return err;
-}
diff --git a/subversion/libsvn_ra_neon/get_locks.c b/subversion/libsvn_ra_neon/get_locks.c
deleted file mode 100644
index ef1fefe..0000000
--- a/subversion/libsvn_ra_neon/get_locks.c
+++ /dev/null
@@ -1,440 +0,0 @@
-/*
- * get_locks.c : RA get-locks API implementation
- *
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- * ====================================================================
- */
-
-
-
-#define APR_WANT_STRFUNC
-#include <apr_want.h> /* for strcmp() */
-
-#include <apr_pools.h>
-#include <apr_tables.h>
-#include <apr_strings.h>
-#include <apr_xml.h>
-
-#include <ne_basic.h>
-
-#include "svn_error.h"
-#include "svn_pools.h"
-#include "svn_base64.h"
-#include "svn_ra.h"
-#include "../libsvn_ra/ra_loader.h"
-#include "svn_path.h"
-#include "svn_xml.h"
-#include "svn_dav.h"
-#include "svn_time.h"
-
-#include "private/svn_dav_protocol.h"
-#include "private/svn_fspath.h"
-#include "svn_private_config.h"
-
-#include "ra_neon.h"
-
-/* -------------------------------------------------------------------------
-**
-** GET-LOCKS REPORT HANDLING
-**
-** DeltaV provides a mechanism for fetching a list of locks below a
-** path, but it's often unscalable. It requires doing a PROPFIND of
-** depth infinity, looking for the 'DAV:lockdiscovery' prop on every
-** resource. But depth-infinity propfinds can sometimes behave like a
-** DoS attack, and mod_dav even disables them by default!
-**
-** So we send a custom 'get-locks' REPORT on a public URI... which is
-** fine, since all lock queries are always against HEAD anyway. The
-** response is a just a list of svn_lock_t's. (Generic DAV clients,
-** of course, are free to do infinite PROPFINDs as they wish, assuming
-** the server allows it.)
-*/
-
-/* Elements used in a get-locks-report response */
-static const svn_ra_neon__xml_elm_t getlocks_report_elements[] =
-{
- { SVN_XML_NAMESPACE, "get-locks-report", ELEM_get_locks_report, 0 },
- { SVN_XML_NAMESPACE, "lock", ELEM_lock, 0},
- { SVN_XML_NAMESPACE, "path", ELEM_lock_path, SVN_RA_NEON__XML_CDATA },
- { SVN_XML_NAMESPACE, "token", ELEM_lock_token, SVN_RA_NEON__XML_CDATA },
- { SVN_XML_NAMESPACE, "owner", ELEM_lock_owner, SVN_RA_NEON__XML_CDATA },
- { SVN_XML_NAMESPACE, "comment", ELEM_lock_comment, SVN_RA_NEON__XML_CDATA },
- { SVN_XML_NAMESPACE, SVN_DAV__CREATIONDATE,
- ELEM_lock_creationdate, SVN_RA_NEON__XML_CDATA },
- { SVN_XML_NAMESPACE, "expirationdate",
- ELEM_lock_expirationdate, SVN_RA_NEON__XML_CDATA },
- { NULL }
-};
-
-/*
- * The get-locks-report xml request body is super-simple.
- * The server doesn't need anything but the URI in the REPORT request line.
- *
- * <S:get-locks-report [depth=DEPTH] xmlns...>
- * </S:get-locks-report>
- *
- * The get-locks-report xml response is just a list of svn_lock_t's
- * that exist at or "below" the request URI. (The server runs
- * svn_repos_fs_get_locks()).
- *
- * <S:get-locks-report xmlns...>
- * <S:lock>
- * <S:path>/foo/bar/baz</S:path>
- * <S:token>opaquelocktoken:706689a6-8cef-0310-9809-fb7545cbd44e
- * </S:token>
- * <S:owner>fred</S:owner>
- * <S:comment encoding="base64">ET39IGCB93LL4M</S:comment>
- * <S:creationdate>2005-02-07T14:17:08Z</S:creationdate>
- * <S:expirationdate>2005-02-08T14:17:08Z</S:expirationdate>
- * </S:lock>
- * ...
- * </S:get-locks-report>
- *
- *
- * The <path> and <token> and date-element cdata is xml-escaped by mod_dav_svn.
- *
- * The <owner> and <comment> cdata is always xml-escaped, but
- * possibly also base64-encoded if necessary, as indicated by the
- * encoding attribute.
- *
- * The absence of <expirationdate> means that there's no expiration.
- *
- * If there are no locks to return, then the response will look just
- * like the request.
- */
-
-
-/* Context for parsing server's response. */
-typedef struct get_locks_baton_t {
- const char *path; /* fspath target of the report */
- svn_depth_t requested_depth; /* requested depth of the report */
- svn_lock_t *current_lock; /* the lock being constructed */
- svn_stringbuf_t *cdata_accum; /* a place to accumulate cdata */
- const char *encoding; /* normally NULL, else the value of
- 'encoding' attribute on cdata's tag.*/
- apr_hash_t *lock_hash; /* the final hash returned */
-
- apr_pool_t *scratchpool; /* temporary stuff goes in here */
- apr_pool_t *pool; /* permanent stuff goes in here */
-
-} get_locks_baton_t;
-
-
-
-/* This implements the `svn_ra_neon__startelm_cb_t' prototype. */
-static svn_error_t *
-getlocks_start_element(int *elem, void *userdata, int parent_state,
- const char *ns, const char *ln, const char **atts)
-{
- get_locks_baton_t *baton = userdata;
- const svn_ra_neon__xml_elm_t *elm;
-
- elm = svn_ra_neon__lookup_xml_elem(getlocks_report_elements, ns, ln);
-
- /* Just skip unknown elements. */
- if (!elm)
- {
- *elem = NE_XML_DECLINE;
- return SVN_NO_ERROR;
- }
-
- if (elm->id == ELEM_lock)
- {
- if (parent_state != ELEM_get_locks_report)
- return UNEXPECTED_ELEMENT(ns, ln);
- else
- /* allocate a new svn_lock_t in the permanent pool */
- baton->current_lock = svn_lock_create(baton->pool);
- }
-
- else if (elm->id == ELEM_lock_path
- || elm->id == ELEM_lock_token
- || elm->id == ELEM_lock_owner
- || elm->id == ELEM_lock_comment
- || elm->id == ELEM_lock_creationdate
- || elm->id == ELEM_lock_expirationdate)
- {
- const char *encoding;
-
- if (parent_state != ELEM_lock)
- return UNEXPECTED_ELEMENT(ns, ln);
-
- /* look for any incoming encodings on these elements. */
- encoding = svn_xml_get_attr_value("encoding", atts);
- if (encoding)
- baton->encoding = apr_pstrdup(baton->scratchpool, encoding);
- }
-
- *elem = elm->id;
-
- return SVN_NO_ERROR;
-}
-
-
-/* This implements the `svn_ra_svn__cdata_cb_t' prototype. */
-static svn_error_t *
-getlocks_cdata_handler(void *userdata, int state,
- const char *cdata, size_t len)
-{
- get_locks_baton_t *baton = userdata;
-
- switch(state)
- {
- case ELEM_lock_path:
- case ELEM_lock_token:
- case ELEM_lock_owner:
- case ELEM_lock_comment:
- case ELEM_lock_creationdate:
- case ELEM_lock_expirationdate:
- /* accumulate cdata in the scratchpool. */
- svn_stringbuf_appendbytes(baton->cdata_accum, cdata, len);
- break;
- }
-
- return SVN_NO_ERROR;
-}
-
-
-
-/* This implements the `svn_ra_neon__endelm_cb_t' prototype. */
-static svn_error_t *
-getlocks_end_element(void *userdata, int state,
- const char *ns, const char *ln)
-{
- get_locks_baton_t *baton = userdata;
- const svn_ra_neon__xml_elm_t *elm;
-
- elm = svn_ra_neon__lookup_xml_elem(getlocks_report_elements, ns, ln);
-
- /* Just skip unknown elements. */
- if (elm == NULL)
- return SVN_NO_ERROR;
-
- switch (elm->id)
- {
- case ELEM_lock:
- /* is the final svn_lock_t valid? all fields must be present
- except for 'comment' and 'expiration_date'. */
- if ((! baton->current_lock->path)
- || (! baton->current_lock->token)
- || (! baton->current_lock->owner)
- || (! baton->current_lock->creation_date))
- SVN_ERR(svn_error_create(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Incomplete lock data returned")));
-
- /* Filter out unwanted paths. Since Subversion only allows
- locks on files, we can treat depth=immediates the same as
- depth=files for filtering purposes. Meaning, we'll keep
- this lock if:
-
- a) its path is the very path we queried, or
- b) we've asked for a fully recursive answer, or
- c) we've asked for depth=files or depth=immediates, and this
- lock is on an immediate child of our query path.
- */
- if ((strcmp(baton->path, baton->current_lock->path) == 0)
- || (baton->requested_depth == svn_depth_infinity))
- {
- apr_hash_set(baton->lock_hash, baton->current_lock->path,
- APR_HASH_KEY_STRING, baton->current_lock);
- }
- else if ((baton->requested_depth == svn_depth_files) ||
- (baton->requested_depth == svn_depth_immediates))
- {
- const char *rel_uri = svn_fspath__is_child(baton->path,
- baton->current_lock->path,
- baton->scratchpool);
- if (rel_uri && (svn_path_component_count(rel_uri) == 1))
- apr_hash_set(baton->lock_hash, baton->current_lock->path,
- APR_HASH_KEY_STRING, baton->current_lock);
- svn_pool_clear(baton->scratchpool);
- }
- break;
-
- case ELEM_lock_path:
- /* neon has already xml-unescaped the cdata for us. */
- baton->current_lock->path =
- svn_fspath__canonicalize(apr_pstrmemdup(baton->scratchpool,
- baton->cdata_accum->data,
- baton->cdata_accum->len),
- baton->pool);
-
- /* clean up the accumulator. */
- svn_stringbuf_setempty(baton->cdata_accum);
- svn_pool_clear(baton->scratchpool);
- break;
-
- case ELEM_lock_token:
- /* neon has already xml-unescaped the cdata for us. */
- baton->current_lock->token = apr_pstrmemdup(baton->pool,
- baton->cdata_accum->data,
- baton->cdata_accum->len);
- /* clean up the accumulator. */
- svn_stringbuf_setempty(baton->cdata_accum);
- svn_pool_clear(baton->scratchpool);
- break;
-
- case ELEM_lock_creationdate:
- SVN_ERR(svn_time_from_cstring(&(baton->current_lock->creation_date),
- baton->cdata_accum->data,
- baton->scratchpool));
- /* clean up the accumulator. */
- svn_stringbuf_setempty(baton->cdata_accum);
- svn_pool_clear(baton->scratchpool);
- break;
-
- case ELEM_lock_expirationdate:
- SVN_ERR(svn_time_from_cstring(&(baton->current_lock->expiration_date),
- baton->cdata_accum->data,
- baton->scratchpool));
- /* clean up the accumulator. */
- svn_stringbuf_setempty(baton->cdata_accum);
- svn_pool_clear(baton->scratchpool);
- break;
-
- case ELEM_lock_owner:
- case ELEM_lock_comment:
- {
- const char *final_val;
-
- if (baton->encoding)
- {
- /* Possibly recognize other encodings someday. */
- if (strcmp(baton->encoding, "base64") == 0)
- {
- svn_string_t *encoded_val;
- const svn_string_t *decoded_val;
-
- encoded_val = svn_string_create_from_buf(baton->cdata_accum,
- baton->scratchpool);
- decoded_val = svn_base64_decode_string(encoded_val,
- baton->scratchpool);
- final_val = decoded_val->data;
- }
- else
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA,
- NULL,
- _("Got unrecognized encoding '%s'"),
- baton->encoding);
-
- baton->encoding = NULL;
- }
- else
- {
- /* neon has already xml-unescaped the cdata for us. */
- final_val = baton->cdata_accum->data;
- }
-
- if (elm->id == ELEM_lock_owner)
- baton->current_lock->owner = apr_pstrdup(baton->pool, final_val);
- if (elm->id == ELEM_lock_comment)
- baton->current_lock->comment = apr_pstrdup(baton->pool, final_val);
-
- /* clean up the accumulator. */
- svn_stringbuf_setempty(baton->cdata_accum);
- svn_pool_clear(baton->scratchpool);
- break;
- }
-
-
- default:
- break;
- }
-
- return SVN_NO_ERROR;
-}
-
-
-svn_error_t *
-svn_ra_neon__get_locks(svn_ra_session_t *session,
- apr_hash_t **locks,
- const char *path,
- svn_depth_t depth,
- apr_pool_t *pool)
-{
- svn_ra_neon__session_t *ras = session->priv;
- const char *body, *url, *rel_path;
- svn_error_t *err;
- int status_code = 0;
- get_locks_baton_t baton;
-
- /* We always run the report on the 'public' URL, which represents
- HEAD anyway. If the path doesn't exist in HEAD, then there can't
- possibly be a lock, so we just return no locks. */
- url = svn_path_url_add_component2(ras->url->data, path, pool);
-
- SVN_ERR(svn_ra_neon__get_path_relative_to_root(session, &rel_path,
- url, pool));
-
- baton.lock_hash = apr_hash_make(pool);
- baton.path = svn_fspath__canonicalize(rel_path, pool);
- baton.requested_depth = depth;
- baton.pool = pool;
- baton.scratchpool = svn_pool_create(pool);
- baton.current_lock = NULL;
- baton.encoding = NULL;
- baton.cdata_accum = svn_stringbuf_create("", pool);
-
- body = apr_psprintf(pool,
- "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
- "<S:get-locks-report xmlns:S=\"" SVN_XML_NAMESPACE "\" "
- "xmlns:D=\"DAV:\" depth=\"%s\">"
- "</S:get-locks-report>",
- svn_depth_to_word(depth));
-
- err = svn_ra_neon__parsed_request(ras, "REPORT", url,
- body, NULL, NULL,
- getlocks_start_element,
- getlocks_cdata_handler,
- getlocks_end_element,
- &baton,
- NULL, /* extra headers */
- &status_code,
- FALSE,
- pool);
-
- svn_pool_destroy(baton.scratchpool);
-
- if (err && err->apr_err == SVN_ERR_FS_NOT_FOUND)
- {
- svn_error_clear(err);
- *locks = baton.lock_hash;
- return SVN_NO_ERROR;
- }
-
- /* ### Should svn_ra_neon__parsed_request() take care of storing auth
- ### info itself? */
- err = svn_ra_neon__maybe_store_auth_info_after_result(err, ras, pool);
-
- /* Map status 501: Method Not Implemented to our not implemented error.
- 1.0.x servers and older don't support this report. */
- if (status_code == 501)
- return svn_error_create(SVN_ERR_RA_NOT_IMPLEMENTED, err,
- _("Server does not support locking features"));
-
- if (err && err->apr_err == SVN_ERR_UNSUPPORTED_FEATURE)
- return svn_error_create(SVN_ERR_RA_NOT_IMPLEMENTED, err,
- _("Server does not support locking features"));
-
- else if (err)
- return err;
-
- *locks = baton.lock_hash;
- return SVN_NO_ERROR;
-}
diff --git a/subversion/libsvn_ra_neon/lock.c b/subversion/libsvn_ra_neon/lock.c
deleted file mode 100644
index 09e2de4..0000000
--- a/subversion/libsvn_ra_neon/lock.c
+++ /dev/null
@@ -1,609 +0,0 @@
-/*
- * lock.c : routines for managing lock states in the DAV server
- *
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- * ====================================================================
- */
-
-
-
-#define APR_WANT_STRFUNC
-#include <apr_want.h>
-#include <apr_xml.h>
-
-#include "svn_error.h"
-#include "svn_pools.h"
-#include "svn_ra.h"
-#include "../libsvn_ra/ra_loader.h"
-#include "svn_path.h"
-#include "svn_string.h"
-#include "svn_time.h"
-#include "svn_private_config.h"
-
-#include "ra_neon.h"
-
-static const svn_ra_neon__xml_elm_t lock_elements[] =
-{
- /* lockdiscovery elements */
- { "DAV:", "response", ELEM_response, 0 },
- { "DAV:", "propstat", ELEM_propstat, 0 },
- { "DAV:", "status", ELEM_status, SVN_RA_NEON__XML_CDATA },
- /* extend lockdiscovery elements here;
- ### Remember to update do_lock() when you change the number of
- elements here: it contains a hard reference to the next element. */
-
- /* lock and lockdiscovery elements */
- { "DAV:", "prop", ELEM_prop, 0 },
- { "DAV:", "lockdiscovery", ELEM_lock_discovery, 0 },
- { "DAV:", "activelock", ELEM_lock_activelock, 0 },
- { "DAV:", "locktype", ELEM_lock_type, SVN_RA_NEON__XML_CDATA },
- { "DAV:", "lockscope", ELEM_lock_scope, SVN_RA_NEON__XML_CDATA },
- { "DAV:", "depth", ELEM_lock_depth, SVN_RA_NEON__XML_CDATA },
- { "DAV:", "owner", ELEM_lock_owner, SVN_RA_NEON__XML_COLLECT },
- { "DAV:", "timeout", ELEM_lock_timeout, SVN_RA_NEON__XML_CDATA },
- { "DAV:", "locktoken", ELEM_lock_token, 0 },
- { "DAV:", "href", ELEM_href, SVN_RA_NEON__XML_CDATA },
- { "", "", ELEM_unknown, SVN_RA_NEON__XML_COLLECT },
- /* extend lock elements here */
-
- { NULL }
-};
-
-typedef struct lock_baton_t
-{
- svn_stringbuf_t *cdata;
- apr_pool_t *pool;
- const svn_ra_neon__xml_elm_t *xml_table;
-
- /* lockdiscovery fields */
- svn_stringbuf_t *href;
- svn_stringbuf_t *status_line;
-
- /* lock and lockdiscovery fields */
- int parent;
- svn_stringbuf_t *owner;
- svn_stringbuf_t *timeout;
- svn_stringbuf_t *depth;
- svn_stringbuf_t *token;
-} lock_baton_t;
-
-static svn_error_t *
-lock_start_element(int *elem, void *baton, int parent,
- const char *nspace, const char *name, const char **atts)
-{
- lock_baton_t *b = baton;
- const svn_ra_neon__xml_elm_t *elm =
- svn_ra_neon__lookup_xml_elem(b->xml_table, nspace, name);
-
- if (! elm)
- {
- *elem = NE_XML_DECLINE;
- return SVN_NO_ERROR;
- }
-
- /* collect interesting element contents */
- /* owner, href inside locktoken, depth, timeout */
- switch (elm->id)
- {
- case ELEM_lock_owner:
- case ELEM_lock_timeout:
- case ELEM_lock_depth:
- case ELEM_status:
- b->cdata = svn_stringbuf_create("", b->pool);
- break;
-
- case ELEM_href:
- if (parent == ELEM_lock_token
- || parent == ELEM_response)
- b->cdata = svn_stringbuf_create("", b->pool);
- break;
-
- default:
- b->cdata = NULL;
- }
-
- b->parent = parent;
- *elem = elm->id;
- return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-lock_end_element(void *baton, int state, const char *nspace, const char *name)
-{
- lock_baton_t *b = baton;
-
- if (b->cdata)
- switch (state)
- {
- case ELEM_lock_owner:
- b->owner = b->cdata;
- break;
-
- case ELEM_lock_timeout:
- b->timeout = b->cdata;
- break;
-
- case ELEM_lock_depth:
- b->depth = b->cdata;
- break;
-
- case ELEM_href:
- if (b->parent == ELEM_lock_token)
- b->token = b->cdata;
- else
- b->href = b->cdata;
- break;
-
- case ELEM_status:
- b->status_line = b->cdata;
- break;
- }
-
- b->cdata = NULL;
-
- return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-lock_cdata(void *baton, int state, const char *cdata, size_t len)
-{
- lock_baton_t *b = baton;
-
- if (b->cdata)
- svn_stringbuf_appendbytes(b->cdata, cdata, len);
-
- return SVN_NO_ERROR;
-}
-
-
-static svn_error_t *
-lock_from_baton(svn_lock_t **lock,
- svn_ra_neon__request_t *req,
- const char *path,
- lock_baton_t *lrb, apr_pool_t *pool)
-{
- const char *val;
- svn_lock_t *lck = svn_lock_create(pool);
-
- if (lrb->token)
- lck->token = lrb->token->data;
- else
- {
- /* No lock */
- *lock = NULL;
- return SVN_NO_ERROR;
- }
-
- val = ne_get_response_header(req->ne_req, SVN_DAV_CREATIONDATE_HEADER);
- if (val)
- SVN_ERR_W(svn_time_from_cstring(&(lck->creation_date), val, pool),
- _("Invalid creation date header value in response."));
-
- val = ne_get_response_header(req->ne_req, SVN_DAV_LOCK_OWNER_HEADER);
- if (val)
- lck->owner = apr_pstrdup(pool, val);
- if (lrb->owner)
- lck->comment = lrb->owner->data;
- if (path)
- lck->path = path;
- if (lrb->timeout)
- {
- const char *timeout_str = lrb->timeout->data;
-
- if (strcmp(timeout_str, "Infinite") != 0)
- {
- if (strncmp("Second-", timeout_str, strlen("Second-")) == 0)
- {
- int time_offset;
-
- SVN_ERR(svn_cstring_atoi(&time_offset, &(timeout_str[7])));
- lck->expiration_date = lck->creation_date
- + apr_time_from_sec(time_offset);
- }
- else
- return svn_error_create(SVN_ERR_RA_DAV_RESPONSE_HEADER_BADNESS,
- NULL, _("Invalid timeout value"));
- }
- else
- lck->expiration_date = 0;
- }
- *lock = lck;
-
- return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-do_lock(svn_lock_t **lock,
- svn_ra_session_t *session,
- const char *path,
- const char *comment,
- svn_boolean_t force,
- svn_revnum_t current_rev,
- apr_pool_t *pool)
-{
- svn_ra_neon__request_t *req;
- svn_stringbuf_t *body;
- ne_uri uri;
- int code;
- const char *url;
- const char *fs_path;
- ne_xml_parser *lck_parser;
- svn_ra_neon__session_t *ras = session->priv;
- lock_baton_t *lrb = apr_pcalloc(pool, sizeof(*lrb));
- apr_hash_t *extra_headers;
- svn_error_t *err = SVN_NO_ERROR;
-
- /* To begin, we convert the incoming path into an absolute fs-path. */
- url = svn_path_url_add_component2(ras->url->data, path, pool);
- SVN_ERR(svn_ra_neon__get_baseline_info(NULL, &fs_path, NULL, ras,
- url, SVN_INVALID_REVNUM, pool));
-
- if (ne_uri_parse(url, &uri) != 0)
- {
- ne_uri_free(&uri);
- return svn_error_createf(SVN_ERR_RA_DAV_CREATING_REQUEST, NULL,
- _("Failed to parse URI '%s'"), url);
- }
-
- SVN_ERR(svn_ra_neon__request_create(&req, ras, "LOCK", uri.path, pool));
- ne_uri_free(&uri);
-
- lrb->pool = pool;
- lrb->xml_table = &(lock_elements[3]);
- lck_parser = svn_ra_neon__xml_parser_create
- (req, ne_accept_2xx,
- lock_start_element, lock_cdata, lock_end_element, lrb);
-
- body = svn_stringbuf_createf
- (req->pool,
- "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" DEBUG_CR
- "<D:lockinfo xmlns:D=\"DAV:\">" DEBUG_CR
- " <D:lockscope><D:exclusive /></D:lockscope>" DEBUG_CR
- " <D:locktype><D:write /></D:locktype>" DEBUG_CR
- "%s" /* maybe owner */
- "</D:lockinfo>",
- comment ? apr_pstrcat(pool,
- "<D:owner>",
- apr_xml_quote_string(pool, comment, 0),
- "</D:owner>",
- (char *)NULL)
- : "");
-
- extra_headers = apr_hash_make(req->pool);
- svn_ra_neon__set_header(extra_headers, "Depth", "0");
- svn_ra_neon__set_header(extra_headers, "Timeout", "Infinite");
- svn_ra_neon__set_header(extra_headers, "Content-Type",
- "text/xml; charset=\"utf-8\"");
- if (force)
- svn_ra_neon__set_header(extra_headers, SVN_DAV_OPTIONS_HEADER,
- SVN_DAV_OPTION_LOCK_STEAL);
- if (SVN_IS_VALID_REVNUM(current_rev))
- svn_ra_neon__set_header(extra_headers, SVN_DAV_VERSION_NAME_HEADER,
- apr_psprintf(req->pool, "%ld", current_rev));
-
- err = svn_ra_neon__request_dispatch(&code, req, extra_headers, body->data,
- 200, 0, pool);
- if (err)
- goto cleanup;
-
- err = svn_ra_neon__check_parse_error("LOCK", lck_parser, url);
- if (err)
- goto cleanup;
-
- /*###FIXME: we never verified whether we have received back the type
- of lock we requested: was it shared/exclusive? was it write/otherwise?
- How many did we get back? Only one? */
- err = lock_from_baton(lock, req, fs_path, lrb, pool);
-
- cleanup:
- /* 405 == Method Not Allowed (Occurs when trying to lock a working
- copy path which no longer exists at HEAD in the repository. */
- if (code == 405)
- {
- svn_error_clear(err);
- err = svn_error_createf(SVN_ERR_FS_OUT_OF_DATE, NULL,
- _("Lock request failed: %d %s"),
- code, req->code_desc);
- }
- svn_ra_neon__request_destroy(req);
-
- return err;
-}
-
-svn_error_t *
-svn_ra_neon__lock(svn_ra_session_t *session,
- apr_hash_t *path_revs,
- const char *comment,
- svn_boolean_t force,
- svn_ra_lock_callback_t lock_func,
- void *lock_baton,
- apr_pool_t *pool)
-{
- apr_hash_index_t *hi;
- apr_pool_t *iterpool = svn_pool_create(pool);
- svn_ra_neon__session_t *ras = session->priv;
- svn_error_t *ret_err = NULL;
-
- /* ### TODO for issue 2263: Send all the locks over the wire at once. This
- loop is just a temporary shim. */
- for (hi = apr_hash_first(pool, path_revs); hi; hi = apr_hash_next(hi))
- {
- svn_lock_t *lock;
- const void *key;
- const char *path;
- void *val;
- svn_revnum_t *revnum;
- svn_error_t *err, *callback_err = NULL;
-
- svn_pool_clear(iterpool);
-
- apr_hash_this(hi, &key, NULL, &val);
- path = key;
- revnum = val;
-
- err = do_lock(&lock, session, path, comment, force, *revnum, iterpool);
-
- if (err && !SVN_ERR_IS_LOCK_ERROR(err))
- {
- ret_err = err;
- goto departure;
- }
-
- if (lock_func)
- callback_err = lock_func(lock_baton, path, TRUE, err ? NULL : lock,
- err, iterpool);
-
- svn_error_clear(err);
-
- if (callback_err)
- {
- ret_err = callback_err;
- goto departure;
- }
-
- }
-
- svn_pool_destroy(iterpool);
-
- departure:
- return svn_ra_neon__maybe_store_auth_info_after_result(ret_err, ras, pool);
-}
-
-
-/* ###TODO for issue 2263: Send all lock tokens to the server at once. */
-static svn_error_t *
-do_unlock(svn_ra_session_t *session,
- const char *path,
- const char *token,
- svn_boolean_t force,
- const svn_lock_t **old_lock,
- apr_pool_t *pool)
-{
- svn_ra_neon__session_t *ras = session->priv;
- const char *url;
- const char *url_path;
- ne_uri uri;
- svn_error_t *err = SVN_NO_ERROR;
-
- apr_hash_t *extra_headers = apr_hash_make(pool);
-
- if (old_lock)
- *old_lock = NULL;
-
- /* Make a neon lock structure containing token and full URL to unlock. */
- url = svn_path_url_add_component2(ras->url->data, path, pool);
- if (ne_uri_parse(url, &uri) != 0)
- {
- ne_uri_free(&uri);
- return svn_error_createf(SVN_ERR_RA_DAV_CREATING_REQUEST, NULL,
- _("Failed to parse URI '%s'"), url);
- }
-
- url_path = apr_pstrdup(pool, uri.path);
- ne_uri_free(&uri);
- /* In the case of 'force', we might not have a token at all.
- Unfortunately, mod_dav insists on having a valid token for
- UNLOCK requests. That means we need to fetch the token. */
- if (! token)
- {
- svn_lock_t *lock;
-
- SVN_ERR(svn_ra_neon__get_lock(session, &lock, path, pool));
- if (! lock)
- return svn_error_createf(SVN_ERR_RA_NOT_LOCKED, NULL,
- _("'%s' is not locked in the repository"),
- path);
- token = lock->token;
- if (old_lock)
- *old_lock = lock;
- }
-
- apr_hash_set(extra_headers, "Lock-Token", APR_HASH_KEY_STRING,
- apr_psprintf(pool, "<%s>", token));
- if (force)
- apr_hash_set(extra_headers, SVN_DAV_OPTIONS_HEADER, APR_HASH_KEY_STRING,
- SVN_DAV_OPTION_LOCK_BREAK);
-
- {
- int code = 0;
-
- err = svn_ra_neon__simple_request(&code, ras, "UNLOCK", url_path,
- extra_headers, NULL, 204, 0, pool);
-
- if (err && ((err->apr_err == SVN_ERR_RA_DAV_REQUEST_FAILED)
- || (err->apr_err == SVN_ERR_RA_DAV_FORBIDDEN)))
- {
- switch (code)
- {
- case 403:
- return svn_error_createf(SVN_ERR_FS_LOCK_OWNER_MISMATCH, err,
- _("Unlock failed on '%s'"
- " (%d Forbidden)"), path, code);
- case 400:
- return svn_error_createf(SVN_ERR_FS_NO_SUCH_LOCK, err,
- _("No lock on path '%s'"
- " (%d Bad Request)"), path, code);
- default:
- break;
- }
- }
- }
- return svn_error_trace(err);
-}
-
-
-svn_error_t *
-svn_ra_neon__unlock(svn_ra_session_t *session,
- apr_hash_t *path_tokens,
- svn_boolean_t force,
- svn_ra_lock_callback_t lock_func,
- void *lock_baton,
- apr_pool_t *pool)
-{
- apr_hash_index_t *hi;
- apr_pool_t *iterpool = svn_pool_create(pool);
- svn_ra_neon__session_t *ras = session->priv;
- svn_error_t *ret_err = NULL;
-
- /* ### TODO for issue 2263: Send all the lock tokens over the wire at once.
- This loop is just a temporary shim. */
- for (hi = apr_hash_first(pool, path_tokens); hi; hi = apr_hash_next(hi))
- {
- const void *key;
- const char *path;
- void *val;
- const char *token;
- svn_error_t *err, *callback_err = NULL;
- const svn_lock_t *old_lock = NULL;
-
- svn_pool_clear(iterpool);
-
- apr_hash_this(hi, &key, NULL, &val);
- path = key;
- /* Since we can't store NULL values in a hash, we turn "" to
- NULL here. */
- if (strcmp(val, "") != 0)
- token = val;
- else
- token = NULL;
-
- err = do_unlock(session, path, token, force, &old_lock, iterpool);
-
- if (err && !SVN_ERR_IS_UNLOCK_ERROR(err))
- {
- ret_err = err;
- goto departure;
- }
-
- if (lock_func)
- callback_err = svn_error_trace(
- lock_func(lock_baton, path, FALSE, old_lock, err, iterpool));
-
- svn_error_clear(err);
-
- if (callback_err)
- {
- ret_err = callback_err;
- goto departure;
- }
- }
-
- svn_pool_destroy(iterpool);
-
- departure:
- return svn_error_trace(
- svn_ra_neon__maybe_store_auth_info_after_result(ret_err, ras, pool));
-}
-
-
-svn_error_t *
-svn_ra_neon__get_lock_internal(svn_ra_neon__session_t *ras,
- svn_lock_t **lock,
- const char *path,
- apr_pool_t *pool)
-{
- const char *url;
- const char *fs_path;
- svn_error_t *err;
- ne_uri uri;
- lock_baton_t *lrb = apr_pcalloc(pool, sizeof(*lrb));
- svn_ra_neon__request_t *req;
- ne_xml_parser *lck_parser;
- apr_hash_t *extra_headers;
- static const char *body =
- "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" DEBUG_CR
- "<D:propfind xmlns:D=\"DAV:\">" DEBUG_CR
- " <D:prop>" DEBUG_CR
- " <D:lockdiscovery />" DEBUG_CR
- " </D:prop>" DEBUG_CR
- "</D:propfind>";
-
- /* To begin, we convert the incoming path into an absolute fs-path. */
- url = svn_path_url_add_component2(ras->url->data, path, pool);
-
- err = svn_ra_neon__get_baseline_info(NULL, &fs_path, NULL, ras,
- url, SVN_INVALID_REVNUM, pool);
- SVN_ERR(svn_ra_neon__maybe_store_auth_info_after_result(err, ras, pool));
-
- ne_uri_parse(url, &uri);
- url = apr_pstrdup(pool, uri.path);
- ne_uri_free(&uri);
-
- SVN_ERR(svn_ra_neon__request_create(&req, ras, "PROPFIND", url, pool));
-
- lrb->pool = pool;
- lrb->xml_table = lock_elements;
- lck_parser = svn_ra_neon__xml_parser_create
- (req, ne_accept_207, lock_start_element, lock_cdata, lock_end_element, lrb);
-
- extra_headers = apr_hash_make(req->pool);
- svn_ra_neon__set_header(extra_headers, "Depth", "0");
- svn_ra_neon__set_header(extra_headers, "Content-Type",
- "text/xml; charset=\"utf-8\"");
-
- err = svn_ra_neon__request_dispatch(NULL, req, extra_headers, body,
- 200, 207, pool);
- if (err)
- {
- err = svn_error_quick_wrap(err, _("Failed to fetch lock information"));
- goto cleanup;
- }
-
- err = svn_ra_neon__check_parse_error("PROPFIND", lck_parser, url);
- if (err)
- goto cleanup;
-
- /*###FIXME We assume here we only got one lock response. The WebDAV
- spec makes no such guarantees. How to make sure we grab the one we need? */
- err = lock_from_baton(lock, req, fs_path, lrb, pool);
-
- cleanup:
- svn_ra_neon__request_destroy(req);
- return err;
-}
-
-
-svn_error_t *
-svn_ra_neon__get_lock(svn_ra_session_t *session,
- svn_lock_t **lock,
- const char *path,
- apr_pool_t *pool)
-{
- return svn_ra_neon__get_lock_internal(session->priv, lock, path, pool);
-}
diff --git a/subversion/libsvn_ra_neon/log.c b/subversion/libsvn_ra_neon/log.c
deleted file mode 100644
index 57932df..0000000
--- a/subversion/libsvn_ra_neon/log.c
+++ /dev/null
@@ -1,580 +0,0 @@
-/*
- * log.c : routines for requesting and parsing log reports
- *
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- * ====================================================================
- */
-
-#define APR_WANT_STRFUNC
-#include <apr_want.h> /* for strcmp() */
-
-#include <apr_pools.h>
-#include <apr_tables.h>
-#include <apr_strings.h>
-#include <apr_xml.h>
-
-#include "svn_error.h"
-#include "svn_pools.h"
-#include "svn_path.h"
-#include "svn_base64.h"
-#include "svn_xml.h"
-#include "svn_props.h"
-
-#include "private/svn_dav_protocol.h"
-#include "../libsvn_ra/ra_loader.h"
-
-#include "ra_neon.h"
-
-
-
-/*** Code ***/
-
-/* Userdata for the Neon XML element callbacks. */
-struct log_baton
-{
- /*WARNING: WANT_CDATA should stay the first element in the baton:
- svn_ra_neon__xml_collect_cdata() assumes the baton starts with a stringbuf.
- */
- svn_stringbuf_t *want_cdata;
- svn_stringbuf_t *cdata;
- const char *cdata_encoding; /* encoding of CDATA (NULL or "base64") */
-
- /* Allocate log message information.
- * NOTE: this pool may be cleared multiple times as log messages are
- * received.
- */
- apr_pool_t *subpool;
-
- /* Information about each log item in turn. */
- svn_log_entry_t *log_entry;
- /* Place to hold revprop name. */
- const char *revprop_name;
- /* pre-1.5 compatibility */
- svn_boolean_t want_author;
- svn_boolean_t want_date;
- svn_boolean_t want_message;
-
- /* The current changed path item. */
- svn_log_changed_path2_t *this_path_item;
-
- /* Client's callback, invoked on the above fields when the end of an
- item is seen. */
- svn_log_entry_receiver_t receiver;
- void *receiver_baton;
-
- int limit;
- int nest_level; /* used to track mergeinfo nesting levels */
- int count; /* only incremented when nest_level == 0 */
-
- /* If we're in backwards compatibility mode for the svn log --limit
- stuff, we need to be able to bail out while parsing log messages.
- The way we do that is returning an error to neon, but we need to
- be able to tell that the error we returned wasn't actually a
- problem, so if this is TRUE it means we can safely ignore that
- error and return success. */
- svn_boolean_t limit_compat_bailout;
-};
-
-
-/* Prepare LB to start accumulating the next log item, by wiping all
- * information related to the previous item and clearing the pool in
- * which they were allocated. Do not touch any stored error, however.
- */
-static void
-reset_log_item(struct log_baton *lb)
-{
- lb->log_entry->revision = SVN_INVALID_REVNUM;
- lb->log_entry->revprops = NULL;
- lb->log_entry->changed_paths = NULL;
- lb->log_entry->has_children = FALSE;
- lb->log_entry->changed_paths2 = NULL;
- lb->log_entry->subtractive_merge = FALSE;
-
- svn_pool_clear(lb->subpool);
-}
-
-/*
- * This implements the `svn_ra_neon__xml_startelm_cb' prototype.
- */
-static svn_error_t *
-log_start_element(int *elem, void *baton, int parent,
- const char *nspace, const char *name, const char **atts)
-{
- const char *copyfrom_path, *copyfrom_revstr;
- svn_revnum_t copyfrom_rev;
- struct log_baton *lb = baton;
- static const svn_ra_neon__xml_elm_t log_report_elements[] =
- {
- { SVN_XML_NAMESPACE, "log-report", ELEM_log_report, 0 },
- { SVN_XML_NAMESPACE, "log-item", ELEM_log_item, 0 },
- { SVN_XML_NAMESPACE, "date", ELEM_log_date, SVN_RA_NEON__XML_CDATA },
- { SVN_XML_NAMESPACE, "added-path", ELEM_added_path,
- SVN_RA_NEON__XML_CDATA },
- { SVN_XML_NAMESPACE, "deleted-path", ELEM_deleted_path,
- SVN_RA_NEON__XML_CDATA },
- { SVN_XML_NAMESPACE, "modified-path", ELEM_modified_path,
- SVN_RA_NEON__XML_CDATA },
- { SVN_XML_NAMESPACE, "replaced-path", ELEM_replaced_path,
- SVN_RA_NEON__XML_CDATA },
- { SVN_XML_NAMESPACE, "revprop", ELEM_revprop,
- SVN_RA_NEON__XML_CDATA },
- { "DAV:", SVN_DAV__VERSION_NAME, ELEM_version_name,
- SVN_RA_NEON__XML_CDATA },
- { "DAV:", "creator-displayname", ELEM_creator_displayname,
- SVN_RA_NEON__XML_CDATA },
- { "DAV:", "comment", ELEM_comment, SVN_RA_NEON__XML_CDATA },
- { SVN_XML_NAMESPACE, "has-children", ELEM_has_children,
- SVN_RA_NEON__XML_CDATA },
- { SVN_XML_NAMESPACE, "subtractive-merge", ELEM_subtractive_merge,
- SVN_RA_NEON__XML_CDATA },
- { NULL }
- };
- const svn_ra_neon__xml_elm_t *elm
- = svn_ra_neon__lookup_xml_elem(log_report_elements, nspace, name);
-
- *elem = elm ? elm->id : SVN_RA_NEON__XML_DECLINE;
- if (!elm)
- return SVN_NO_ERROR;
-
- switch (elm->id)
- {
- case ELEM_creator_displayname:
- case ELEM_log_date:
- case ELEM_version_name:
- case ELEM_added_path:
- case ELEM_replaced_path:
- case ELEM_deleted_path:
- case ELEM_modified_path:
- case ELEM_revprop:
- case ELEM_comment:
- lb->want_cdata = lb->cdata;
- svn_stringbuf_setempty(lb->cdata);
- lb->cdata_encoding = NULL;
-
- /* Some tags might contain encoded CDATA. */
- if ((elm->id == ELEM_comment) ||
- (elm->id == ELEM_creator_displayname) ||
- (elm->id == ELEM_log_date) ||
- (elm->id == ELEM_rev_prop))
- {
- lb->cdata_encoding = svn_xml_get_attr_value("encoding", atts);
- if (lb->cdata_encoding)
- lb->cdata_encoding = apr_pstrdup(lb->subpool, lb->cdata_encoding);
- }
-
- /* revprop tags have names. */
- if (elm->id == ELEM_revprop)
- {
- const char *revprop_name = svn_xml_get_attr_value("name", atts);
- if (revprop_name == NULL)
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Missing name attr in revprop element"));
- lb->revprop_name = apr_pstrdup(lb->subpool, revprop_name);
- }
- break;
- case ELEM_has_children:
- lb->log_entry->has_children = TRUE;
- break;
- case ELEM_subtractive_merge:
- lb->log_entry->subtractive_merge = TRUE;
- break;
-
- default:
- lb->want_cdata = NULL;
- break;
- }
-
- switch (elm->id)
- {
- case ELEM_added_path:
- case ELEM_replaced_path:
- case ELEM_deleted_path:
- case ELEM_modified_path:
- lb->this_path_item = svn_log_changed_path2_create(lb->subpool);
- lb->this_path_item->node_kind = svn_node_kind_from_word(
- svn_xml_get_attr_value("node-kind", atts));
- lb->this_path_item->copyfrom_rev = SVN_INVALID_REVNUM;
-
- lb->this_path_item->text_modified = svn_tristate__from_word(
- svn_xml_get_attr_value("text-mods", atts));
- lb->this_path_item->props_modified = svn_tristate__from_word(
- svn_xml_get_attr_value("prop-mods", atts));
-
- /* See documentation for `svn_repos_node_t' in svn_repos.h,
- and `svn_log_changed_path_t' in svn_types.h, for more
- about these action codes. */
- if ((elm->id == ELEM_added_path) || (elm->id == ELEM_replaced_path))
- {
- lb->this_path_item->action
- = (elm->id == ELEM_added_path) ? 'A' : 'R';
- copyfrom_path = svn_xml_get_attr_value("copyfrom-path", atts);
- copyfrom_revstr = svn_xml_get_attr_value("copyfrom-rev", atts);
- if (copyfrom_path && copyfrom_revstr
- && (SVN_IS_VALID_REVNUM
- (copyfrom_rev = SVN_STR_TO_REV(copyfrom_revstr))))
- {
- lb->this_path_item->copyfrom_path = apr_pstrdup(lb->subpool,
- copyfrom_path);
- lb->this_path_item->copyfrom_rev = copyfrom_rev;
- }
- }
- else if (elm->id == ELEM_deleted_path)
- {
- lb->this_path_item->action = 'D';
- }
- else
- {
- lb->this_path_item->action = 'M';
- }
- break;
-
- default:
- lb->this_path_item = NULL;
- break;
- }
- return SVN_NO_ERROR;
-}
-
-/*
- * Set *DECODED_CDATA to a copy of current CDATA being tracked in LB,
- * decoded as necessary, and allocated from LB->subpool.
- */
-static svn_error_t *
-maybe_decode_log_cdata(const svn_string_t **decoded_cdata,
- struct log_baton *lb)
-{
- if (lb->cdata_encoding)
- {
- svn_string_t in;
- in.data = lb->cdata->data;
- in.len = lb->cdata->len;
-
- /* Check for a known encoding type. This is easy -- there's
- only one. */
- if (strcmp(lb->cdata_encoding, "base64") != 0)
- return svn_error_create(SVN_ERR_XML_MALFORMED, NULL, NULL);
-
- *decoded_cdata = svn_base64_decode_string(&in, lb->subpool);
- }
- else
- {
- *decoded_cdata = svn_string_create_from_buf(lb->cdata, lb->subpool);
- }
-
- return SVN_NO_ERROR;
-}
-
-
-
-/*
- * This implements the `svn_ra_neon__xml_endelm_cb' prototype.
- */
-static svn_error_t *
-log_end_element(void *baton, int state,
- const char *nspace, const char *name)
-{
- struct log_baton *lb = baton;
- const svn_string_t *decoded_cdata;
-
- if (lb->want_cdata)
- SVN_ERR(maybe_decode_log_cdata(&decoded_cdata, lb));
-
- switch (state)
- {
- case ELEM_version_name:
- lb->log_entry->revision = SVN_STR_TO_REV(lb->cdata->data);
- break;
- case ELEM_creator_displayname:
- if (lb->want_author)
- {
- if (! lb->log_entry->revprops)
- lb->log_entry->revprops = apr_hash_make(lb->subpool);
- apr_hash_set(lb->log_entry->revprops, SVN_PROP_REVISION_AUTHOR,
- APR_HASH_KEY_STRING, decoded_cdata);
- }
- break;
- case ELEM_log_date:
- if (lb->want_date)
- {
- if (! lb->log_entry->revprops)
- lb->log_entry->revprops = apr_hash_make(lb->subpool);
- apr_hash_set(lb->log_entry->revprops, SVN_PROP_REVISION_DATE,
- APR_HASH_KEY_STRING, decoded_cdata);
- }
- break;
- case ELEM_added_path:
- case ELEM_replaced_path:
- case ELEM_deleted_path:
- case ELEM_modified_path:
- {
- char *path = apr_pstrdup(lb->subpool, lb->cdata->data);
- if (! lb->log_entry->changed_paths2)
- {
- lb->log_entry->changed_paths2 = apr_hash_make(lb->subpool);
- lb->log_entry->changed_paths = lb->log_entry->changed_paths2;
- }
- apr_hash_set(lb->log_entry->changed_paths2, path, APR_HASH_KEY_STRING,
- lb->this_path_item);
- break;
- }
- case ELEM_revprop:
- if (! lb->log_entry->revprops)
- lb->log_entry->revprops = apr_hash_make(lb->subpool);
- apr_hash_set(lb->log_entry->revprops, lb->revprop_name,
- APR_HASH_KEY_STRING, decoded_cdata);
- break;
- case ELEM_comment:
- if (lb->want_message)
- {
- if (! lb->log_entry->revprops)
- lb->log_entry->revprops = apr_hash_make(lb->subpool);
- apr_hash_set(lb->log_entry->revprops, SVN_PROP_REVISION_LOG,
- APR_HASH_KEY_STRING, decoded_cdata);
- }
- break;
- case ELEM_log_item:
- {
- /* Compatibility cruft so that we can provide limit functionality
- even if the server doesn't support it.
-
- If we've seen as many log entries as we're going to show just
- error out of the XML parser so we can avoid having to parse the
- remaining XML, but set a flag that we will later use to ensure
- this error will not be shown to the user. */
- if (lb->limit && (lb->nest_level == 0) && (++lb->count > lb->limit))
- {
- lb->limit_compat_bailout = TRUE;
- return svn_error_create(APR_EGENERAL, NULL, NULL);
- }
- SVN_ERR((*(lb->receiver))(lb->receiver_baton,
- lb->log_entry,
- lb->subpool));
- if (lb->log_entry->has_children)
- {
- lb->nest_level++;
- }
- if (! SVN_IS_VALID_REVNUM(lb->log_entry->revision))
- {
- SVN_ERR_ASSERT(lb->nest_level);
- lb->nest_level--;
- }
- reset_log_item(lb);
- }
- break;
- }
-
- /* Stop collecting cdata */
- lb->want_cdata = NULL;
- return SVN_NO_ERROR;
-}
-
-
-svn_error_t * svn_ra_neon__get_log(svn_ra_session_t *session,
- const apr_array_header_t *paths,
- svn_revnum_t start,
- svn_revnum_t end,
- int limit,
- svn_boolean_t discover_changed_paths,
- svn_boolean_t strict_node_history,
- svn_boolean_t include_merged_revisions,
- const apr_array_header_t *revprops,
- svn_log_entry_receiver_t receiver,
- void *receiver_baton,
- apr_pool_t *pool)
-{
- /* The Plan: Send a request to the server for a log report.
- * Somewhere in mod_dav_svn, there will be an implementation, R, of
- * the `svn_log_entry_receiver_t' function type. Some other
- * function in mod_dav_svn will use svn_repos_get_logs() to loop R
- * over the log messages, and the successive invocations of R will
- * collectively transmit the report back here, where we parse the
- * report and invoke RECEIVER (which is an entirely separate
- * instance of `svn_log_entry_receiver_t') on each individual
- * message in that report.
- */
-
- int i;
- svn_ra_neon__session_t *ras = session->priv;
- svn_stringbuf_t *request_body = svn_stringbuf_create("", pool);
- svn_boolean_t want_custom_revprops;
- struct log_baton lb;
- const char *bc_url;
- const char *bc_relative;
- const char *final_bc_url;
- svn_revnum_t use_rev;
- svn_error_t *err;
-
- /* ### todo: I don't understand why the static, file-global
- variables shared by update and status are called `report_head'
- and `report_tail', instead of `request_head' and `request_tail'.
- Maybe Greg can explain? Meanwhile, I'm tentatively using
- "request_*" for my local vars below. */
-
- static const char log_request_head[] = "<S:log-report xmlns:S=\""
- SVN_XML_NAMESPACE "\">" DEBUG_CR "<S:encode-binary-props/>";
-
- static const char log_request_tail[] = "</S:log-report>" DEBUG_CR;
-
- /* Construct the request body. */
- svn_stringbuf_appendcstr(request_body, log_request_head);
- svn_stringbuf_appendcstr(request_body,
- apr_psprintf(pool,
- "<S:start-revision>%ld"
- "</S:start-revision>", start));
- svn_stringbuf_appendcstr(request_body,
- apr_psprintf(pool,
- "<S:end-revision>%ld"
- "</S:end-revision>", end));
- if (limit)
- {
- svn_stringbuf_appendcstr(request_body,
- apr_psprintf(pool,
- "<S:limit>%d</S:limit>", limit));
- }
-
- if (discover_changed_paths)
- {
- svn_stringbuf_appendcstr(request_body,
- apr_psprintf(pool,
- "<S:discover-changed-paths/>"));
- }
-
- if (strict_node_history)
- {
- svn_stringbuf_appendcstr(request_body,
- apr_psprintf(pool,
- "<S:strict-node-history/>"));
- }
-
- if (include_merged_revisions)
- {
- svn_stringbuf_appendcstr(request_body,
- apr_psprintf(pool,
- "<S:include-merged-revisions/>"));
- }
-
- if (revprops)
- {
- lb.want_author = lb.want_date = lb.want_message = FALSE;
- want_custom_revprops = FALSE;
- for (i = 0; i < revprops->nelts; i++)
- {
- char *name = APR_ARRAY_IDX(revprops, i, char *);
- svn_stringbuf_appendcstr(request_body, "<S:revprop>");
- svn_stringbuf_appendcstr(request_body, name);
- svn_stringbuf_appendcstr(request_body, "</S:revprop>");
- if (strcmp(name, SVN_PROP_REVISION_AUTHOR) == 0)
- lb.want_author = TRUE;
- else if (strcmp(name, SVN_PROP_REVISION_DATE) == 0)
- lb.want_date = TRUE;
- else if (strcmp(name, SVN_PROP_REVISION_LOG) == 0)
- lb.want_message = TRUE;
- else
- want_custom_revprops = TRUE;
- }
- if (revprops->nelts == 0)
- {
- svn_stringbuf_appendcstr(request_body, "<S:no-revprops/>");
- }
- }
- else
- {
- svn_stringbuf_appendcstr(request_body,
- apr_psprintf(pool,
- "<S:all-revprops/>"));
- lb.want_author = lb.want_date = lb.want_message = TRUE;
- want_custom_revprops = TRUE;
- }
-
- if (want_custom_revprops)
- {
- svn_boolean_t has_log_revprops;
- SVN_ERR(svn_ra_neon__has_capability(session, &has_log_revprops,
- SVN_RA_CAPABILITY_LOG_REVPROPS, pool));
- if (!has_log_revprops)
- return svn_error_create(SVN_ERR_RA_NOT_IMPLEMENTED, NULL,
- _("Server does not support custom revprops"
- " via log"));
- }
-
-
- if (paths)
- {
- for (i = 0; i < paths->nelts; i++)
- {
- const char *this_path =
- apr_xml_quote_string(pool,
- APR_ARRAY_IDX(paths, i, const char *),
- 0);
- svn_stringbuf_appendcstr(request_body, "<S:path>");
- svn_stringbuf_appendcstr(request_body, this_path);
- svn_stringbuf_appendcstr(request_body, "</S:path>");
- }
- }
-
- svn_stringbuf_appendcstr(request_body, log_request_tail);
-
- lb.receiver = receiver;
- lb.receiver_baton = receiver_baton;
- lb.subpool = svn_pool_create(pool);
- lb.limit = limit;
- lb.count = 0;
- lb.nest_level = 0;
- lb.limit_compat_bailout = FALSE;
- lb.cdata = svn_stringbuf_create("", pool);
- lb.log_entry = svn_log_entry_create(pool);
- lb.want_cdata = NULL;
- lb.cdata_encoding = NULL;
- reset_log_item(&lb);
-
- /* ras's URL may not exist in HEAD, and thus it's not safe to send
- it as the main argument to the REPORT request; it might cause
- dav_get_resource() to choke on the server. So instead, we pass a
- baseline-collection URL, which we get from the largest of the
- START and END revisions. */
- use_rev = (start > end) ? start : end;
- SVN_ERR(svn_ra_neon__get_baseline_info(&bc_url, &bc_relative, NULL, ras,
- ras->url->data, use_rev, pool));
- final_bc_url = svn_path_url_add_component2(bc_url, bc_relative, pool);
-
-
- err = svn_ra_neon__parsed_request(ras,
- "REPORT",
- final_bc_url,
- request_body->data,
- 0, /* ignored */
- NULL,
- log_start_element,
- svn_ra_neon__xml_collect_cdata,
- log_end_element,
- &lb,
- NULL,
- NULL,
- FALSE,
- pool);
- svn_pool_destroy(lb.subpool);
-
- if (err && lb.limit_compat_bailout)
- {
- svn_error_clear(err);
- err = SVN_NO_ERROR;
- }
-
- return err;
-}
diff --git a/subversion/libsvn_ra_neon/merge.c b/subversion/libsvn_ra_neon/merge.c
deleted file mode 100644
index dc0647d..0000000
--- a/subversion/libsvn_ra_neon/merge.c
+++ /dev/null
@@ -1,786 +0,0 @@
-/*
- * merge.c : routines for performing a MERGE server requests
- *
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- * ====================================================================
- */
-
-
-
-#include <apr_pools.h>
-#include <apr_hash.h>
-#define APR_WANT_STRFUNC
-#include <apr_want.h>
-
-#include "svn_string.h"
-#include "svn_error.h"
-#include "svn_path.h"
-#include "svn_ra.h"
-#include "svn_pools.h"
-#include "svn_props.h"
-#include "svn_xml.h"
-
-#include "private/svn_dav_protocol.h"
-#include "private/svn_fspath.h"
-
-#include "svn_private_config.h"
-
-#include "ra_neon.h"
-
-
-static const svn_ra_neon__xml_elm_t merge_elements[] =
-{
- { "DAV:", "updated-set", ELEM_updated_set, 0 },
- { "DAV:", "merged-set", ELEM_merged_set, 0 },
- { "DAV:", "ignored-set", ELEM_ignored_set, 0 },
- { "DAV:", "href", ELEM_href, SVN_RA_NEON__XML_CDATA },
- { "DAV:", "merge-response", ELEM_merge_response, 0 },
- { "DAV:", "checked-in", ELEM_checked_in, 0 },
- { "DAV:", "response", ELEM_response, 0 },
- { "DAV:", "propstat", ELEM_propstat, 0 },
- { "DAV:", "status", ELEM_status, SVN_RA_NEON__XML_CDATA },
- { "DAV:", "responsedescription", ELEM_responsedescription,
- SVN_RA_NEON__XML_CDATA },
- { "DAV:", "prop", ELEM_prop, 0 },
- { "DAV:", "resourcetype", ELEM_resourcetype, 0 },
- { "DAV:", "collection", ELEM_collection, 0 },
- { "DAV:", "baseline", ELEM_baseline, 0 },
- { "DAV:", SVN_DAV__VERSION_NAME, ELEM_version_name, SVN_RA_NEON__XML_CDATA },
- { SVN_XML_NAMESPACE, "post-commit-err",
- ELEM_post_commit_err, SVN_RA_NEON__XML_CDATA },
- { "DAV:", SVN_DAV__CREATIONDATE, ELEM_creationdate, SVN_RA_NEON__XML_CDATA },
- { "DAV:", "creator-displayname", ELEM_creator_displayname,
- SVN_RA_NEON__XML_CDATA },
-
- { NULL }
-};
-
-enum merge_rtype {
- RTYPE_UNKNOWN, /* unknown (haven't seen it in the response yet) */
- RTYPE_REGULAR, /* a regular (member) resource */
- RTYPE_COLLECTION, /* a collection resource */
- RTYPE_BASELINE /* a baseline resource */
-};
-
-typedef struct merge_ctx_t {
- /*WARNING: WANT_CDATA should stay the first element in the baton:
- svn_ra_neon__xml_collect_cdata() assumes the baton starts with a stringbuf.
- */
- svn_stringbuf_t *want_cdata;
- svn_stringbuf_t *cdata;
- apr_pool_t *pool;
-
- /* a clearable subpool of pool, for loops. Do not use for anything
- that must persist beyond the scope of your function! */
- apr_pool_t *scratchpool;
-
- /* the BASE_HREF contains the merge target. as resources are specified in
- the merge response, we make their URLs relative to this URL, thus giving
- us a path for use in the commit callbacks. */
- const char *base_href;
-
- svn_revnum_t rev; /* the new/target revision number for this commit */
-
- svn_boolean_t response_has_error;
- int response_parent; /* what element did DAV:response appear within? */
-
- int href_parent; /* what element is the DAV:href appearing within? */
- svn_stringbuf_t *href; /* current response */
-
- int status; /* HTTP status for this DAV:propstat */
- enum merge_rtype rtype; /* DAV:resourcetype of this resource */
-
- svn_stringbuf_t *vsn_name; /* DAV:version-name for this resource */
- svn_stringbuf_t *vsn_url; /* DAV:checked-in for this resource */
- svn_stringbuf_t *committed_date; /* DAV:creationdate for this resource */
- svn_stringbuf_t *last_author; /* DAV:creator-displayname for this
- resource */
- svn_stringbuf_t *post_commit_err;/* SVN_XML_NAMESPACE:post-commit hook's
- stderr */
-
- /* We only invoke set_prop() on targets listed in valid_targets.
- Some entities (such as directories that have had changes
- committed underneath but are not themselves targets) will be
- mentioned in the merge response but not appear in
- valid_targets. */
- apr_hash_t *valid_targets;
-
- /* Client callbacks */
- svn_ra_push_wc_prop_func_t push_prop;
- void *cb_baton; /* baton for above */
-
-} merge_ctx_t;
-
-
-static void add_ignored(merge_ctx_t *mc, const char *cdata)
-{
- /* ### the server didn't check in the file(!) */
- /* ### remember the file and issue a report/warning later */
-}
-
-
-static svn_boolean_t okay_to_bump_path(const char *path,
- apr_hash_t *valid_targets,
- apr_pool_t *pool)
-{
- svn_stringbuf_t *parent_path;
- enum svn_recurse_kind r;
-
- /* Easy check: if path itself is in the hash, then it's legit. */
- if (apr_hash_get(valid_targets, path, APR_HASH_KEY_STRING))
- return TRUE;
- /* Otherwise, this path is bumpable IFF one of its parents is in the
- hash and marked with a 'recursion' flag. */
- parent_path = svn_stringbuf_create(path, pool);
-
- do {
- apr_size_t len = parent_path->len;
- svn_path_remove_component(parent_path);
- if (len == parent_path->len)
- break;
- r = (enum svn_recurse_kind) apr_hash_get(valid_targets,
- parent_path->data,
- APR_HASH_KEY_STRING);
- if (r == svn_recursive)
- return TRUE;
-
- } while (! svn_path_is_empty(parent_path->data));
-
- /* Default answer: if we get here, don't allow the bumping. */
- return FALSE;
-}
-
-
-/* If committed PATH appears in MC->valid_targets, and an MC->push_prop
- * function exists, then store VSN_URL as the SVN_RA_NEON__LP_VSN_URL
- * property on PATH. Use POOL for all allocations.
- *
- * Otherwise, just return SVN_NO_ERROR.
- */
-static svn_error_t *bump_resource(merge_ctx_t *mc,
- const char *path,
- char *vsn_url,
- apr_pool_t *pool)
-{
- /* no sense in doing any more work if there's no property setting
- function at our disposal. */
- if (mc->push_prop == NULL)
- return SVN_NO_ERROR;
-
- /* Only invoke a client callback on PATH if PATH counts as a
- committed target. The commit-tracking editor built this list for
- us, and took care not to include directories unless they were
- directly committed (i.e., received a property change). */
- if (! okay_to_bump_path(path, mc->valid_targets, pool))
- return SVN_NO_ERROR;
-
- /* Okay, NOW set the new version url. */
- {
- svn_string_t vsn_url_str; /* prop setter wants an svn_string_t */
-
- vsn_url_str.data = vsn_url;
- vsn_url_str.len = strlen(vsn_url);
-
- return (*mc->push_prop)(mc->cb_baton, path,
- SVN_RA_NEON__LP_VSN_URL, &vsn_url_str,
- pool);
- }
-}
-
-static svn_error_t * handle_resource(merge_ctx_t *mc,
- apr_pool_t *pool)
-{
- const char *relative;
-
- if (mc->response_has_error)
- {
- /* ### what to do? */
- /* ### return "no error", presuming whatever set response_has_error
- ### has already handled the problem. */
- return SVN_NO_ERROR;
- }
- if (mc->response_parent == ELEM_merged_set)
- {
- /* ### shouldn't have happened. we told the server "don't merge" */
- /* ### need something better than APR_EGENERAL */
- return svn_error_createf(APR_EGENERAL, NULL,
- _("Protocol error: we told the server not to "
- "auto-merge any resources, but it said that "
- "'%s' was merged"), mc->href->data);
- }
- if (mc->response_parent != ELEM_updated_set)
- {
- /* ### unknown parent for this response(!) */
- /* ### need something better than APR_EGENERAL */
- return svn_error_createf(APR_EGENERAL, NULL,
- _("Internal error: there is an unknown parent "
- "(%d) for the 'DAV:response' element within"
- " the MERGE response"), mc->response_parent);
- }
-#if 0
- /* ### right now, the server isn't sending everything for all resources.
- ### just skip this requirement. */
- if (mc->href->len == 0
- || mc->vsn_name->len == 0
- || mc->vsn_url->len == 0
- || mc->rtype == RTYPE_UNKNOWN)
- {
- /* one or more properties were missing in the DAV:response for the
- resource. */
- return svn_error_createf(APR_EGENERAL, NULL,
- _("Protocol error: the MERGE response for the "
- "'%s' resource did not return all of the "
- "properties that we asked for (and need to "
- "complete the commit)"), mc->href->data);
- }
-#endif
-
- if (mc->rtype == RTYPE_BASELINE)
- {
- /* cool. the DAV:version-name tells us the new revision */
- mc->rev = SVN_STR_TO_REV(mc->vsn_name->data);
- return SVN_NO_ERROR;
- }
-
- /* a collection or regular resource */
- if (! svn_urlpath__is_ancestor(mc->base_href, mc->href->data))
- {
- /* ### need something better than APR_EGENERAL */
- return svn_error_createf(APR_EGENERAL, NULL,
- _("A MERGE response for '%s' is not a child "
- "of the destination ('%s')"),
- mc->href->data, mc->base_href);
- }
-
- /* given HREF of the form: BASE "/" RELATIVE, extract the relative portion */
- relative = svn_urlpath__is_child(mc->base_href, mc->href->data, NULL);
- if (! relative) /* the paths are equal */
- relative = "";
-
- /* bump the resource */
- relative = svn_path_uri_decode(relative, pool);
- return bump_resource(mc, relative, mc->vsn_url->data, pool);
-}
-
-/* Determine whether we're receiving the expected XML response.
- Return CHILD when interested in receiving the child's contents
- or one of SVN_RA_NEON__XML_INVALID and SVN_RA_NEON__XML_DECLINE
- when respectively this is the incorrect response or
- the element (and its children) are uninteresting */
-static int validate_element(svn_ra_neon__xml_elmid parent,
- svn_ra_neon__xml_elmid child)
-{
- if ((child == ELEM_collection || child == ELEM_baseline)
- && parent != ELEM_resourcetype) {
- /* ### technically, they could occur elsewhere, but screw it */
- return SVN_RA_NEON__XML_INVALID;
- }
-
- switch (parent)
- {
- case ELEM_root:
- if (child == ELEM_merge_response)
- return child;
- else
- return SVN_RA_NEON__XML_INVALID;
-
- case ELEM_merge_response:
- if (child == ELEM_updated_set
- || child == ELEM_merged_set
- || child == ELEM_ignored_set)
- return child;
- else
- return SVN_RA_NEON__XML_DECLINE; /* any child is allowed */
-
- case ELEM_updated_set:
- case ELEM_merged_set:
- if (child == ELEM_response)
- return child;
- else
- return SVN_RA_NEON__XML_DECLINE; /* ignore if something else
- was in there */
-
- case ELEM_ignored_set:
- if (child == ELEM_href)
- return child;
- else
- return SVN_RA_NEON__XML_DECLINE; /* ignore if something else
- was in there */
-
- case ELEM_response:
- if (child == ELEM_href
- || child == ELEM_status
- || child == ELEM_propstat)
- return child;
- else if (child == ELEM_responsedescription)
- /* ### I think we want this... to save a message for the user */
- return SVN_RA_NEON__XML_DECLINE; /* valid, but we don't need to see it */
- else
- return SVN_RA_NEON__XML_DECLINE; /* ignore if something else
- was in there */
-
- case ELEM_propstat:
- if (child == ELEM_prop || child == ELEM_status)
- return child;
- else if (child == ELEM_responsedescription)
- /* ### I think we want this... to save a message for the user */
- return SVN_RA_NEON__XML_DECLINE; /* valid, but we don't need to see it */
- else
- return SVN_RA_NEON__XML_DECLINE; /* ignore if something else
- was in there */
-
- case ELEM_prop:
- if (child == ELEM_checked_in
- || child == ELEM_resourcetype
- || child == ELEM_version_name
- || child == ELEM_creationdate
- || child == ELEM_creator_displayname
- || child == ELEM_post_commit_err
- /* other props */)
- return child;
- else
- return SVN_RA_NEON__XML_DECLINE; /* ignore other props */
-
- case ELEM_checked_in:
- if (child == ELEM_href)
- return child;
- else
- return SVN_RA_NEON__XML_DECLINE; /* ignore if something else
- was in there */
-
- case ELEM_resourcetype:
- if (child == ELEM_collection || child == ELEM_baseline)
- return child;
- else
- return SVN_RA_NEON__XML_DECLINE; /* ignore if something else
- was in there */
-
- default:
- return SVN_RA_NEON__XML_DECLINE;
- }
-
- /* NOTREACHED */
-}
-
-static svn_error_t *
-start_element(int *elem, void *baton, int parent,
- const char *nspace, const char *name, const char **atts)
-{
- const svn_ra_neon__xml_elm_t *elm
- = svn_ra_neon__lookup_xml_elem(merge_elements, nspace, name);
- merge_ctx_t *mc = baton;
-
- *elem = elm ? validate_element(parent, elm->id) : SVN_RA_NEON__XML_DECLINE;
- if (*elem < 1) /* not a valid element */
- return SVN_NO_ERROR;
-
- switch (elm->id)
- {
- case ELEM_response:
- mc->response_has_error = FALSE;
-
- /* for each response (which corresponds to one resource), note that we
- haven't seen its resource type yet */
- mc->rtype = RTYPE_UNKNOWN;
-
- /* and we haven't seen these elements yet */
- mc->href->len = 0;
- mc->vsn_name->len = 0;
- mc->vsn_url->len = 0;
-
- /* FALLTHROUGH */
-
- case ELEM_ignored_set:
- case ELEM_checked_in:
- /* if we see an href "soon", then its parent is ELM */
- mc->href_parent = elm->id;
- break;
-
- case ELEM_updated_set:
- case ELEM_merged_set:
- mc->response_parent = elm->id;
- break;
-
- case ELEM_propstat:
- /* initialize the status so we can figure out if we ever saw a
- status element in the propstat */
- mc->status = 0;
- break;
-
- case ELEM_resourcetype:
- /* we've seen a DAV:resourcetype, so it will be "regular" unless we
- see something within this element */
- mc->rtype = RTYPE_REGULAR;
- break;
-
- case ELEM_collection:
- mc->rtype = RTYPE_COLLECTION;
- break;
-
- case ELEM_baseline:
- mc->rtype = RTYPE_BASELINE;
- break;
-
- default:
- /* one of: ELEM_href, ELEM_status, ELEM_prop,
- ELEM_version_name */
- break;
- }
-
- switch (elm->id)
- {
- case ELEM_href:
- case ELEM_status:
- case ELEM_version_name:
- case ELEM_post_commit_err:
- case ELEM_creationdate:
- case ELEM_creator_displayname:
- mc->want_cdata = mc->cdata;
- svn_stringbuf_setempty(mc->cdata);
- break;
-
- default:
- mc->want_cdata = NULL;
- break;
- }
-
-
- return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-end_element(void *baton, int state,
- const char *nspace, const char *name)
-{
- merge_ctx_t *mc = baton;
-
- switch (state)
- {
- case ELEM_href:
- switch (mc->href_parent)
- {
- case ELEM_ignored_set:
- add_ignored(mc, mc->cdata->data);
- break;
-
- case ELEM_response:
- /* we're now working on this href... */
- SVN_ERR(svn_ra_neon__copy_href(mc->href, mc->cdata->data,
- mc->scratchpool));
- break;
-
- case ELEM_checked_in:
- SVN_ERR(svn_ra_neon__copy_href(mc->vsn_url, mc->cdata->data,
- mc->scratchpool));
- break;
- }
- break;
-
- case ELEM_responsedescription:
- /* ### I don't think we'll see this right now, due to validate_element */
- /* ### remember this for error messages? */
- break;
-
- case ELEM_status:
- {
- ne_status hs;
-
- if (ne_parse_statusline(mc->cdata->data, &hs) != 0)
- mc->response_has_error = TRUE;
- else
- {
- mc->status = hs.code;
- if (hs.code != 200)
- {
- /* ### create an error structure? */
- mc->response_has_error = TRUE;
- }
- free(hs.reason_phrase);
- }
- if (mc->response_has_error)
- {
- /* ### fix this error value */
- return svn_error_create(APR_EGENERAL, NULL,
- _("The MERGE property response had an "
- "error status"));
- }
- }
- break;
-
- case ELEM_propstat:
- /* ### does Neon have a symbol for 200? */
- if (mc->status == 200 /* OK */)
- {
- /* ### what to do? reset all the data? */
- }
- /* ### else issue an error? status==0 means we never saw one */
- break;
-
- case ELEM_response:
- {
- /* the end of a DAV:response means that we've seen all the information
- related to this resource. process it. */
- SVN_ERR(handle_resource(mc, mc->scratchpool));
- svn_pool_clear(mc->scratchpool);
- }
- break;
-
- case ELEM_checked_in:
- /* When we leave a DAV:checked-in element, the parents are DAV:prop,
- DAV:propstat, then DAV:response. If we see a DAV:href "on the way
- out", then it is going to belong to the DAV:response. */
- mc->href_parent = ELEM_response;
- break;
-
- case ELEM_version_name:
- svn_stringbuf_set(mc->vsn_name, mc->cdata->data);
- break;
-
- case ELEM_post_commit_err:
- svn_stringbuf_set(mc->post_commit_err, mc->cdata->data);
- break;
-
- case ELEM_creationdate:
- svn_stringbuf_set(mc->committed_date, mc->cdata->data);
- break;
-
- case ELEM_creator_displayname:
- svn_stringbuf_set(mc->last_author, mc->cdata->data);
- break;
-
- default:
- /* one of: ELEM_updated_set, ELEM_merged_set, ELEM_ignored_set,
- ELEM_prop, ELEM_resourcetype, ELEM_collection, ELEM_baseline */
- break;
- }
-
- return SVN_NO_ERROR;
-}
-
-
-svn_error_t * svn_ra_neon__assemble_locktoken_body(svn_stringbuf_t **body,
- apr_hash_t *lock_tokens,
- apr_pool_t *pool)
-{
- apr_hash_index_t *hi;
- apr_size_t buf_size;
- const char *closing_tag = "</S:lock-token-list>";
- apr_size_t closing_tag_size = strlen(closing_tag);
- apr_pool_t *tmppool = svn_pool_create(pool);
- apr_hash_t *xml_locks = apr_hash_make(tmppool);
- svn_stringbuf_t *lockbuf = svn_stringbuf_create
- ("<S:lock-token-list xmlns:S=\"" SVN_XML_NAMESPACE "\">" DEBUG_CR, pool);
-
- buf_size = lockbuf->len;
-
-#define SVN_LOCK "<S:lock>" DEBUG_CR
-#define SVN_LOCK_LEN sizeof(SVN_LOCK)-1
-#define SVN_LOCK_CLOSE "</S:lock>" DEBUG_CR
-#define SVN_LOCK_CLOSE_LEN sizeof(SVN_LOCK_CLOSE)-1
-#define SVN_LOCK_PATH "<S:lock-path>"
-#define SVN_LOCK_PATH_LEN sizeof(SVN_LOCK_PATH)-1
-#define SVN_LOCK_PATH_CLOSE "</S:lock-path>" DEBUG_CR
-#define SVN_LOCK_PATH_CLOSE_LEN sizeof(SVN_LOCK_CLOSE)-1
-#define SVN_LOCK_TOKEN "<S:lock-token>"
-#define SVN_LOCK_TOKEN_LEN sizeof(SVN_LOCK_TOKEN)-1
-#define SVN_LOCK_TOKEN_CLOSE "</S:lock-token>" DEBUG_CR
-#define SVN_LOCK_TOKEN_CLOSE_LEN sizeof(SVN_LOCK_TOKEN_CLOSE)-1
-
- /* First, figure out how much string data we're talking about,
- and allocate a stringbuf big enough to hold it all... we *never*
- want have the stringbuf do an auto-reallocation. While here,
- we'll be copying our hash of paths -> tokens into a hash of
- xml-escaped-paths -> tokens. */
- for (hi = apr_hash_first(tmppool, lock_tokens); hi; hi = apr_hash_next(hi))
- {
- const void *key;
- void *val;
- apr_ssize_t klen;
- svn_string_t lock_path;
- svn_stringbuf_t *lock_path_xml = NULL;
-
- apr_hash_this(hi, &key, &klen, &val);
-
- /* XML-escape our key and store it in our temporary hash. */
- lock_path.data = key;
- lock_path.len = klen;
- svn_xml_escape_cdata_string(&lock_path_xml, &lock_path, tmppool);
- apr_hash_set(xml_locks, lock_path_xml->data, lock_path_xml->len, val);
-
- /* Now, on with the stringbuf calculations. */
- buf_size += SVN_LOCK_LEN;
- buf_size += SVN_LOCK_PATH_LEN;
- buf_size += lock_path_xml->len;
- buf_size += SVN_LOCK_PATH_CLOSE_LEN;
- buf_size += SVN_LOCK_TOKEN_LEN;
- buf_size += strlen(val);
- buf_size += SVN_LOCK_TOKEN_CLOSE_LEN;
- buf_size += SVN_LOCK_CLOSE_LEN;
- }
-
- buf_size += closing_tag_size;
-
- svn_stringbuf_ensure(lockbuf, buf_size + 1);
-
- /* Now append all the temporary hash's keys and values into the
- stringbuf. This is better than doing apr_pstrcat() in a loop,
- because (1) there's no need to constantly re-alloc, and (2) the
- stringbuf already knows the end of the buffer, so there's no
- seek-time to the end of the string when appending. */
- for (hi = apr_hash_first(tmppool, xml_locks); hi; hi = apr_hash_next(hi))
- {
- const void *key;
- apr_ssize_t klen;
- void *val;
-
- apr_hash_this(hi, &key, &klen, &val);
-
- svn_stringbuf_appendcstr(lockbuf, SVN_LOCK);
- svn_stringbuf_appendcstr(lockbuf, SVN_LOCK_PATH);
- svn_stringbuf_appendbytes(lockbuf, key, klen);
- svn_stringbuf_appendcstr(lockbuf, SVN_LOCK_PATH_CLOSE);
- svn_stringbuf_appendcstr(lockbuf, SVN_LOCK_TOKEN);
- svn_stringbuf_appendcstr(lockbuf, val);
- svn_stringbuf_appendcstr(lockbuf, SVN_LOCK_TOKEN_CLOSE);
- svn_stringbuf_appendcstr(lockbuf, SVN_LOCK_CLOSE);
- }
-
- svn_stringbuf_appendcstr(lockbuf, closing_tag);
-
-#undef SVN_LOCK
-#undef SVN_LOCK_LEN
-#undef SVN_LOCK_CLOSE
-#undef SVN_LOCK_CLOSE_LEN
-#undef SVN_LOCK_PATH
-#undef SVN_LOCK_PATH_LEN
-#undef SVN_LOCK_PATH_CLOSE
-#undef SVN_LOCK_PATH_CLOSE_LEN
-#undef SVN_LOCK_TOKEN
-#undef SVN_LOCK_TOKEN_LEN
-#undef SVN_LOCK_TOKEN_CLOSE
-#undef SVN_LOCK_TOKEN_CLOSE_LEN
-
- *body = lockbuf;
-
- svn_pool_destroy(tmppool);
- return SVN_NO_ERROR;
-}
-
-
-/* ### FIXME: As of HTTPv2, this isn't necessarily merging an
- ### "activity". It might be merging a transaction. So,
- ### ACTIVITY_URL might be a transaction root URL, not an actual
- ### activity URL, etc. Probably should rename ACTIVITY_URL to
- ### MERGE_RESOURCE_URL or something. */
-svn_error_t * svn_ra_neon__merge_activity(svn_revnum_t *new_rev,
- const char **committed_date,
- const char **committed_author,
- const char **post_commit_err,
- svn_ra_neon__session_t *ras,
- const char *repos_url,
- const char *activity_url,
- apr_hash_t *valid_targets,
- apr_hash_t *lock_tokens,
- svn_boolean_t keep_locks,
- svn_boolean_t disable_merge_response,
- apr_pool_t *pool)
-{
- merge_ctx_t mc = { 0 };
- const char *body;
- apr_hash_t *extra_headers = NULL;
- svn_stringbuf_t *lockbuf = svn_stringbuf_create("", pool);
-
- mc.cdata = svn_stringbuf_create("", pool);
- mc.pool = pool;
- mc.scratchpool = svn_pool_create(pool);
- mc.base_href = repos_url;
- mc.rev = SVN_INVALID_REVNUM;
-
- mc.valid_targets = valid_targets;
- mc.push_prop = ras->callbacks->push_wc_prop;
- mc.cb_baton = ras->callback_baton;
-
- mc.href = MAKE_BUFFER(pool);
- mc.vsn_name = MAKE_BUFFER(pool);
- mc.vsn_url = MAKE_BUFFER(pool);
- mc.committed_date = MAKE_BUFFER(pool);
- mc.last_author = MAKE_BUFFER(pool);
- if (post_commit_err)
- mc.post_commit_err = MAKE_BUFFER(pool);
-
- if (disable_merge_response
- || (! keep_locks))
- {
- const char *value;
-
- value = apr_psprintf(pool, "%s %s",
- disable_merge_response ?
- SVN_DAV_OPTION_NO_MERGE_RESPONSE : "",
- keep_locks ?
- "" : SVN_DAV_OPTION_RELEASE_LOCKS);
-
- if (! extra_headers)
- extra_headers = apr_hash_make(pool);
- apr_hash_set(extra_headers, SVN_DAV_OPTIONS_HEADER, APR_HASH_KEY_STRING,
- value);
- }
-
- /* Need to marshal the whole [path->token] hash to the server as
- a string within the body of the MERGE request. */
- if ((lock_tokens != NULL)
- && (apr_hash_count(lock_tokens) > 0))
- SVN_ERR(svn_ra_neon__assemble_locktoken_body(&lockbuf, lock_tokens, pool));
-
- body = apr_psprintf(pool,
- "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
- "<D:merge xmlns:D=\"DAV:\">"
- "<D:source><D:href>%s</D:href></D:source>"
- "<D:no-auto-merge/><D:no-checkout/>"
- "<D:prop><D:checked-in/>"
- "<D:" SVN_DAV__VERSION_NAME "/><D:resourcetype/>"
- "<D:" SVN_DAV__CREATIONDATE "/><D:creator-displayname/>"
- "</D:prop>"
- "%s"
- "</D:merge>",
- activity_url, lockbuf->data);
-
- SVN_ERR(svn_ra_neon__parsed_request(ras, "MERGE", repos_url,
- body, 0, NULL,
- start_element,
- svn_ra_neon__xml_collect_cdata,
- end_element, &mc, extra_headers,
- NULL, FALSE, pool));
-
- /* return some commit properties to the caller. */
- if (new_rev)
- *new_rev = mc.rev;
- if (committed_date)
- *committed_date = mc.committed_date->len
- ? apr_pstrdup(pool, mc.committed_date->data) : NULL;
- if (committed_author)
- *committed_author = mc.last_author->len
- ? apr_pstrdup(pool, mc.last_author->data) : NULL;
- if (post_commit_err)
- *post_commit_err = mc.post_commit_err->len
- ? apr_pstrdup(pool, mc.post_commit_err->data) : NULL;
-
- svn_pool_destroy(mc.scratchpool);
-
- return NULL;
-}
diff --git a/subversion/libsvn_ra_neon/mergeinfo.c b/subversion/libsvn_ra_neon/mergeinfo.c
deleted file mode 100644
index fffd9c5..0000000
--- a/subversion/libsvn_ra_neon/mergeinfo.c
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * mergeinfo.c : routines for requesting and parsing mergeinfo reports
- *
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- * ====================================================================
- */
-
-
-
-#include <apr_pools.h>
-#include <apr_tables.h>
-#include <apr_strings.h>
-#include <apr_xml.h>
-
-#include <ne_socket.h>
-
-#include "svn_error.h"
-#include "svn_pools.h"
-#include "svn_path.h"
-#include "svn_xml.h"
-#include "svn_mergeinfo.h"
-#include "private/svn_dav_protocol.h"
-#include "../libsvn_ra/ra_loader.h"
-
-#include "ra_neon.h"
-
-/* Baton for accumulating mergeinfo. CATALOG stores the final
- mergeinfo catalog result we are going to hand back to the caller of
- get_mergeinfo. curr_path and curr_info contain the value of the
- CDATA from the mergeinfo items as we get them from the server. */
-
-struct mergeinfo_baton
-{
- apr_pool_t *pool;
- svn_stringbuf_t *curr_path;
- svn_stringbuf_t *curr_info;
- svn_mergeinfo_catalog_t catalog;
- svn_error_t *err;
-};
-
-static const svn_ra_neon__xml_elm_t mergeinfo_report_elements[] =
- {
- { SVN_XML_NAMESPACE, SVN_DAV__MERGEINFO_REPORT, ELEM_mergeinfo_report, 0 },
- { SVN_XML_NAMESPACE, SVN_DAV__MERGEINFO_ITEM, ELEM_mergeinfo_item, 0 },
- { SVN_XML_NAMESPACE, SVN_DAV__MERGEINFO_PATH, ELEM_mergeinfo_path,
- SVN_RA_NEON__XML_CDATA },
- { SVN_XML_NAMESPACE, SVN_DAV__MERGEINFO_INFO, ELEM_mergeinfo_info,
- SVN_RA_NEON__XML_CDATA },
- { NULL }
- };
-
-static svn_error_t *
-start_element(int *elem, void *baton, int parent_state, const char *nspace,
- const char *elt_name, const char **atts)
-{
- struct mergeinfo_baton *mb = baton;
-
- const svn_ra_neon__xml_elm_t *elm
- = svn_ra_neon__lookup_xml_elem(mergeinfo_report_elements, nspace,
- elt_name);
- if (! elm)
- {
- *elem = NE_XML_DECLINE;
- return SVN_NO_ERROR;
- }
-
- if (parent_state == ELEM_root)
- {
- /* If we're at the root of the tree, the element has to be the editor
- * report itself. */
- if (elm->id != ELEM_mergeinfo_report)
- return UNEXPECTED_ELEMENT(nspace, elt_name);
- }
-
- if (elm->id == ELEM_mergeinfo_item)
- {
- svn_stringbuf_setempty(mb->curr_info);
- svn_stringbuf_setempty(mb->curr_path);
- }
-
- SVN_ERR(mb->err);
-
- *elem = elm->id;
- return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-end_element(void *baton, int state, const char *nspace, const char *elt_name)
-{
- struct mergeinfo_baton *mb = baton;
-
- const svn_ra_neon__xml_elm_t *elm
- = svn_ra_neon__lookup_xml_elem(mergeinfo_report_elements, nspace,
- elt_name);
- if (! elm)
- return UNEXPECTED_ELEMENT(nspace, elt_name);
-
- if (elm->id == ELEM_mergeinfo_item)
- {
- if (mb->curr_info && mb->curr_path)
- {
- svn_mergeinfo_t path_mergeinfo;
- const char *path;
-
- SVN_ERR_ASSERT(mb->curr_path->data);
- path = apr_pstrdup(mb->pool, mb->curr_path->data);
- SVN_ERR((mb->err = svn_mergeinfo_parse(&path_mergeinfo,
- mb->curr_info->data,
- mb->pool)));
- /* Correct for naughty servers that send "relative" paths
- with leading slashes! */
- apr_hash_set(mb->catalog, path[0] == '/' ? path + 1 : path,
- APR_HASH_KEY_STRING, path_mergeinfo);
- }
- }
-
- return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-cdata_handler(void *baton, int state, const char *cdata, size_t len)
-{
- struct mergeinfo_baton *mb = baton;
- apr_size_t nlen = len;
-
- switch (state)
- {
- case ELEM_mergeinfo_path:
- svn_stringbuf_appendbytes(mb->curr_path, cdata, nlen);
- break;
-
- case ELEM_mergeinfo_info:
- svn_stringbuf_appendbytes(mb->curr_info, cdata, nlen);
- break;
-
- default:
- break;
- }
- return mb->err;
-}
-
-/* Request a mergeinfo-report from the URL attached to SESSION,
- and fill in the CATALOG with the results. */
-svn_error_t *
-svn_ra_neon__get_mergeinfo(svn_ra_session_t *session,
- svn_mergeinfo_catalog_t *catalog,
- const apr_array_header_t *paths,
- svn_revnum_t revision,
- svn_mergeinfo_inheritance_t inherit,
- svn_boolean_t include_descendants,
- apr_pool_t *pool)
-{
- svn_ra_neon__session_t *ras = session->priv;
- svn_stringbuf_t *request_body = svn_stringbuf_create("", pool);
- struct mergeinfo_baton mb;
- const char *bc_url;
- const char *bc_relative;
- const char *final_bc_url;
-
- static const char minfo_report_head[] =
- "<S:" SVN_DAV__MERGEINFO_REPORT " xmlns:S=\"" SVN_XML_NAMESPACE "\">"
- DEBUG_CR;
-
- static const char minfo_report_tail[] =
- "</S:" SVN_DAV__MERGEINFO_REPORT ">" DEBUG_CR;
-
- *catalog = NULL;
-
- /* Construct the request body. */
- svn_stringbuf_appendcstr(request_body, minfo_report_head);
- svn_stringbuf_appendcstr(request_body,
- apr_psprintf(pool,
- "<S:revision>%ld"
- "</S:revision>", revision));
- svn_stringbuf_appendcstr(request_body,
- apr_psprintf(pool,
- "<S:inherit>%s"
- "</S:inherit>",
- svn_inheritance_to_word(inherit)));
-
- if (include_descendants)
- {
- /* Send it only if true; server will default to "no". */
- svn_stringbuf_appendcstr(request_body,
- "<S:include-descendants>yes"
- "</S:include-descendants>");
- }
-
- if (paths)
- {
- int i;
-
- for (i = 0; i < paths->nelts; i++)
- {
- const char *this_path =
- apr_xml_quote_string(pool,
- ((const char **)paths->elts)[i],
- 0);
- svn_stringbuf_appendcstr(request_body, "<S:path>");
- svn_stringbuf_appendcstr(request_body, this_path);
- svn_stringbuf_appendcstr(request_body, "</S:path>");
- }
- }
-
- svn_stringbuf_appendcstr(request_body, minfo_report_tail);
-
- mb.pool = pool;
- mb.curr_path = svn_stringbuf_create("", pool);
- mb.curr_info = svn_stringbuf_create("", pool);
- mb.catalog = apr_hash_make(pool);
- mb.err = SVN_NO_ERROR;
-
- /* ras's URL may not exist in HEAD, and thus it's not safe to send
- it as the main argument to the REPORT request; it might cause
- dav_get_resource() to choke on the server. So instead, we pass a
- baseline-collection URL, which we get from END. */
- SVN_ERR(svn_ra_neon__get_baseline_info(&bc_url, &bc_relative, NULL, ras,
- ras->url->data, revision, pool));
- final_bc_url = svn_path_url_add_component2(bc_url, bc_relative, pool);
-
- SVN_ERR(svn_ra_neon__parsed_request(ras,
- "REPORT",
- final_bc_url,
- request_body->data,
- NULL, NULL,
- start_element,
- cdata_handler,
- end_element,
- &mb,
- NULL,
- NULL,
- FALSE,
- pool));
-
- if (mb.err == SVN_NO_ERROR && apr_hash_count(mb.catalog))
- *catalog = mb.catalog;
-
- return mb.err;
-}
diff --git a/subversion/libsvn_ra_neon/options.c b/subversion/libsvn_ra_neon/options.c
deleted file mode 100644
index 5667e66..0000000
--- a/subversion/libsvn_ra_neon/options.c
+++ /dev/null
@@ -1,480 +0,0 @@
-/*
- * options.c : routines for performing OPTIONS server requests
- *
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- * ====================================================================
- */
-
-
-
-#include "svn_pools.h"
-#include "svn_error.h"
-#include "svn_dirent_uri.h"
-#include "svn_private_config.h"
-#include "../libsvn_ra/ra_loader.h"
-
-#include "private/svn_fspath.h"
-
-#include "ra_neon.h"
-
-
-/* In a debug build, setting this environment variable to "yes" will force
- the client to speak v1, even if the server is capable of speaking v2. */
-#define SVN_IGNORE_V2_ENV_VAR "SVN_I_LIKE_LATENCY_SO_IGNORE_HTTPV2"
-
-static const svn_ra_neon__xml_elm_t options_elements[] =
-{
- { "DAV:", "activity-collection-set", ELEM_activity_coll_set, 0 },
- { "DAV:", "href", ELEM_href, SVN_RA_NEON__XML_CDATA },
- { "DAV:", "options-response", ELEM_options_response, 0 },
-
- { NULL }
-};
-
-typedef struct options_ctx_t {
- /*WARNING: WANT_CDATA should stay the first element in the baton:
- svn_ra_neon__xml_collect_cdata() assumes the baton starts with a stringbuf.
- */
- svn_stringbuf_t *want_cdata;
- svn_stringbuf_t *cdata;
- apr_pool_t *pool;
- svn_string_t *activity_coll;
-} options_ctx_t;
-
-static int
-validate_element(svn_ra_neon__xml_elmid parent, svn_ra_neon__xml_elmid child)
-{
- switch (parent)
- {
- case ELEM_root:
- if (child == ELEM_options_response)
- return child;
- else
- return SVN_RA_NEON__XML_INVALID;
-
- case ELEM_options_response:
- if (child == ELEM_activity_coll_set)
- return child;
- else
- return SVN_RA_NEON__XML_DECLINE; /* not concerned with other response */
-
- case ELEM_activity_coll_set:
- if (child == ELEM_href)
- return child;
- else
- return SVN_RA_NEON__XML_DECLINE; /* not concerned with unknown crud */
-
- default:
- return SVN_RA_NEON__XML_DECLINE;
- }
-
- /* NOTREACHED */
-}
-
-static svn_error_t *
-start_element(int *elem, void *baton, int parent,
- const char *nspace, const char *name, const char **atts)
-{
- options_ctx_t *oc = baton;
- const svn_ra_neon__xml_elm_t *elm
- = svn_ra_neon__lookup_xml_elem(options_elements, nspace, name);
-
- *elem = elm ? validate_element(parent, elm->id) : SVN_RA_NEON__XML_DECLINE;
- if (*elem < 1) /* Not a valid element */
- return SVN_NO_ERROR;
-
- if (elm->id == ELEM_href)
- oc->want_cdata = oc->cdata;
- else
- oc->want_cdata = NULL;
-
- return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-end_element(void *baton, int state,
- const char *nspace, const char *name)
-{
- options_ctx_t *oc = baton;
-
- if (state == ELEM_href)
- oc->activity_coll =
- svn_string_create(svn_urlpath__canonicalize(oc->cdata->data, oc->pool),
- oc->pool);
-
- return SVN_NO_ERROR;
-}
-
-
-/** Capabilities exchange. */
-
-/* Both server and repository support the capability. */
-static const char *capability_yes = "yes";
-/* Either server or repository does not support the capability. */
-static const char *capability_no = "no";
-/* Server supports the capability, but don't yet know if repository does. */
-static const char *capability_server_yes = "server-yes";
-
-
-/* Store in RAS the capabilities and other interesting tidbits of
- information discovered from REQ's headers. Use POOL for temporary
- allocation only.
-
- Also, if YOUNGEST_REV is not NULL, set *YOUNGEST_REV to the current
- youngest revision if we can detect that from the OPTIONS exchange, or
- to SVN_INVALID_REVNUM otherwise. */
-static void
-parse_capabilities(ne_request *req,
- svn_ra_neon__session_t *ras,
- svn_revnum_t *youngest_rev,
- apr_pool_t *pool)
-{
- const char *val;
-
- if (youngest_rev)
- *youngest_rev = SVN_INVALID_REVNUM;
-
- /* Start out assuming all capabilities are unsupported. */
- apr_hash_set(ras->capabilities, SVN_RA_CAPABILITY_PARTIAL_REPLAY,
- APR_HASH_KEY_STRING, capability_no);
- apr_hash_set(ras->capabilities, SVN_RA_CAPABILITY_DEPTH,
- APR_HASH_KEY_STRING, capability_no);
- apr_hash_set(ras->capabilities, SVN_RA_CAPABILITY_MERGEINFO,
- APR_HASH_KEY_STRING, capability_no);
- apr_hash_set(ras->capabilities, SVN_RA_CAPABILITY_LOG_REVPROPS,
- APR_HASH_KEY_STRING, capability_no);
- apr_hash_set(ras->capabilities, SVN_RA_CAPABILITY_ATOMIC_REVPROPS,
- APR_HASH_KEY_STRING, capability_no);
-
- /* Then find out which ones are supported. */
- val = ne_get_response_header(req, "dav");
- if (val)
- {
- /* Multiple headers of the same name will have been merged
- together by the time we see them (either by an intermediary,
- as is permitted in HTTP, or by neon) -- merged in the sense
- that if a header "foo" appears multiple times, all the values
- will be concatenated together, with spaces at the splice
- points. For example, if the server sent:
-
- DAV: 1,2
- DAV: version-control,checkout,working-resource
- DAV: merge,baseline,activity,version-controlled-collection
- DAV: http://subversion.tigris.org/xmlns/dav/svn/depth
-
- Here we might see:
-
- val == "1,2, version-control,checkout,working-resource, merge,baseline,activity,version-controlled-collection, http://subversion.tigris.org/xmlns/dav/svn/depth, <http://apache.org/dav/propset/fs/1>"
-
- (Deliberately not line-wrapping that, so you can see what
- we're about to parse.)
- */
-
- apr_array_header_t *vals =
- svn_cstring_split(val, ",", TRUE, pool);
-
- /* Right now we only have a few capabilities to detect, so
- just seek for them directly. This could be written
- slightly more efficiently, but that wouldn't be worth it
- until we have many more capabilities. */
-
- if (svn_cstring_match_list(SVN_DAV_NS_DAV_SVN_DEPTH, vals))
- apr_hash_set(ras->capabilities, SVN_RA_CAPABILITY_DEPTH,
- APR_HASH_KEY_STRING, capability_yes);
-
- if (svn_cstring_match_list(SVN_DAV_NS_DAV_SVN_MERGEINFO, vals))
- /* The server doesn't know what repository we're referring
- to, so it can't just say capability_yes. */
- apr_hash_set(ras->capabilities, SVN_RA_CAPABILITY_MERGEINFO,
- APR_HASH_KEY_STRING, capability_server_yes);
-
- if (svn_cstring_match_list(SVN_DAV_NS_DAV_SVN_LOG_REVPROPS, vals))
- apr_hash_set(ras->capabilities, SVN_RA_CAPABILITY_LOG_REVPROPS,
- APR_HASH_KEY_STRING, capability_yes);
-
- if (svn_cstring_match_list(SVN_DAV_NS_DAV_SVN_ATOMIC_REVPROPS, vals))
- apr_hash_set(ras->capabilities, SVN_RA_CAPABILITY_ATOMIC_REVPROPS,
- APR_HASH_KEY_STRING, capability_yes);
-
- if (svn_cstring_match_list(SVN_DAV_NS_DAV_SVN_PARTIAL_REPLAY, vals))
- apr_hash_set(ras->capabilities, SVN_RA_CAPABILITY_PARTIAL_REPLAY,
- APR_HASH_KEY_STRING, capability_yes);
- }
-
- /* Not strictly capabilities, but while we're here, we might as well... */
- if ((val = ne_get_response_header(req, SVN_DAV_YOUNGEST_REV_HEADER)))
- {
- if (youngest_rev)
- *youngest_rev = SVN_STR_TO_REV(val);
- }
- if ((val = ne_get_response_header(req, SVN_DAV_REPOS_UUID_HEADER)))
- {
- ras->uuid = apr_pstrdup(ras->pool, val);
- }
- if ((val = ne_get_response_header(req, SVN_DAV_ROOT_URI_HEADER)))
- {
- ne_uri root_uri = ras->root;
-
- root_uri.path = (char *)val;
- ras->repos_root = svn_ra_neon__uri_unparse(&root_uri, ras->pool);
- }
-
- /* HTTP v2 stuff */
- if ((val = ne_get_response_header(req, SVN_DAV_ME_RESOURCE_HEADER)))
- {
-#ifdef SVN_DEBUG
- char *ignore_v2_env_var = getenv(SVN_IGNORE_V2_ENV_VAR);
-
- if (! (ignore_v2_env_var
- && apr_strnatcasecmp(ignore_v2_env_var, "yes") == 0))
- ras->me_resource = apr_pstrdup(ras->pool, val);
-#else
- ras->me_resource = apr_pstrdup(ras->pool, val);
-#endif
- }
- if ((val = ne_get_response_header(req, SVN_DAV_REV_ROOT_STUB_HEADER)))
- {
- ras->rev_root_stub = apr_pstrdup(ras->pool, val);
- }
- if ((val = ne_get_response_header(req, SVN_DAV_REV_STUB_HEADER)))
- {
- ras->rev_stub = apr_pstrdup(ras->pool, val);
- }
- if ((val = ne_get_response_header(req, SVN_DAV_TXN_ROOT_STUB_HEADER)))
- {
- ras->txn_root_stub = apr_pstrdup(ras->pool, val);
- }
- if ((val = ne_get_response_header(req, SVN_DAV_TXN_STUB_HEADER)))
- {
- ras->txn_stub = apr_pstrdup(ras->pool, val);
- }
- if ((val = ne_get_response_header(req, SVN_DAV_VTXN_ROOT_STUB_HEADER)))
- {
- ras->vtxn_root_stub = apr_pstrdup(ras->pool, val);
- }
- if ((val = ne_get_response_header(req, SVN_DAV_VTXN_STUB_HEADER)))
- {
- ras->vtxn_stub = apr_pstrdup(ras->pool, val);
- }
-}
-
-
-svn_error_t *
-svn_ra_neon__exchange_capabilities(svn_ra_neon__session_t *ras,
- const char **relocation_location,
- svn_revnum_t *youngest_rev,
- apr_pool_t *pool)
-{
- svn_ra_neon__request_t* req;
- svn_error_t *err = SVN_NO_ERROR;
- ne_xml_parser *parser = NULL;
- options_ctx_t oc = { 0 };
- int status_code;
-
- oc.pool = pool;
- oc.cdata = svn_stringbuf_create("", pool);
-
- if (youngest_rev)
- *youngest_rev = SVN_INVALID_REVNUM;
- if (relocation_location)
- *relocation_location = NULL;
-
- SVN_ERR(svn_ra_neon__request_create(&req, ras, "OPTIONS", ras->url->data,
- pool));
-
- /* ### Use a symbolic name somewhere for this MIME type? */
- ne_add_request_header(req->ne_req, "Content-Type", "text/xml");
-
- /* Create a parser to read the normal response body */
- parser = svn_ra_neon__xml_parser_create(req, ne_accept_2xx, start_element,
- svn_ra_neon__xml_collect_cdata,
- end_element, &oc);
-
- /* Run the request and get the resulting status code. */
- if ((err = svn_ra_neon__request_dispatch(&status_code, req, NULL,
- "<?xml version=\"1.0\" "
- "encoding=\"utf-8\"?>"
- "<D:options xmlns:D=\"DAV:\">"
- "<D:activity-collection-set/>"
- "</D:options>",
- 200,
- relocation_location ? 301 : 0,
- pool)))
- goto cleanup;
-
- if (req->code == 301)
- {
- *relocation_location = svn_ra_neon__request_get_location(req, pool);
- goto cleanup;
- }
-
- /* Was there an XML parse error somewhere? */
- err = svn_ra_neon__check_parse_error("OPTIONS", parser, ras->url->data);
- if (err)
- goto cleanup;
-
- /* We asked for, and therefore expect, to have found an activity
- collection in the response. */
- if (oc.activity_coll == NULL)
- {
- err = svn_error_create(SVN_ERR_RA_DAV_OPTIONS_REQ_FAILED, NULL,
- _("The OPTIONS response did not include the "
- "requested activity-collection-set; this often "
- "means that the URL is not WebDAV-enabled"));
- goto cleanup;
- }
-
- ras->act_coll = apr_pstrdup(ras->pool, oc.activity_coll->data);
- parse_capabilities(req->ne_req, ras, youngest_rev, pool);
-
- cleanup:
- svn_ra_neon__request_destroy(req);
-
- return err;
-}
-
-
-svn_error_t *
-svn_ra_neon__get_activity_collection(const svn_string_t **activity_coll,
- svn_ra_neon__session_t *ras,
- apr_pool_t *pool)
-{
- if (! ras->act_coll)
- SVN_ERR(svn_ra_neon__exchange_capabilities(ras, NULL, NULL, pool));
- *activity_coll = svn_string_create(ras->act_coll, pool);
- return SVN_NO_ERROR;
-}
-
-
-svn_error_t *
-svn_ra_neon__has_capability(svn_ra_session_t *session,
- svn_boolean_t *has,
- const char *capability,
- apr_pool_t *pool)
-{
- svn_ra_neon__session_t *ras = session->priv;
- const char *cap_result;
-
- /* This capability doesn't rely on anything server side. */
- if (strcmp(capability, SVN_RA_CAPABILITY_COMMIT_REVPROPS) == 0)
- {
- *has = TRUE;
- return SVN_NO_ERROR;
- }
-
- cap_result = apr_hash_get(ras->capabilities,
- capability,
- APR_HASH_KEY_STRING);
-
- /* If any capability is unknown, they're all unknown, so ask. */
- if (cap_result == NULL)
- {
- SVN_ERR(svn_ra_neon__exchange_capabilities(ras, NULL, NULL, pool));
- }
-
-
- /* Try again, now that we've fetched the capabilities. */
- cap_result = apr_hash_get(ras->capabilities,
- capability, APR_HASH_KEY_STRING);
-
- /* Some capabilities depend on the repository as well as the server.
- NOTE: svn_ra_serf__has_capability() has a very similar code block. If
- you change something here, check there as well. */
- if (cap_result == capability_server_yes)
- {
- if (strcmp(capability, SVN_RA_CAPABILITY_MERGEINFO) == 0)
- {
- /* Handle mergeinfo specially. Mergeinfo depends on the
- repository as well as the server, but the server routine
- that answered our svn_ra_neon__exchange_capabilities() call
- above didn't even know which repository we were interested in
- -- it just told us whether the server supports mergeinfo.
- If the answer was 'no', there's no point checking the
- particular repository; but if it was 'yes', we still must
- change it to 'no' iff the repository itself doesn't
- support mergeinfo. */
- svn_mergeinfo_catalog_t ignored;
- svn_error_t *err;
- apr_array_header_t *paths = apr_array_make(pool, 1,
- sizeof(char *));
- APR_ARRAY_PUSH(paths, const char *) = "";
-
- err = svn_ra_neon__get_mergeinfo(session, &ignored, paths, 0,
- FALSE, FALSE, pool);
-
- if (err)
- {
- if (err->apr_err == SVN_ERR_UNSUPPORTED_FEATURE)
- {
- svn_error_clear(err);
- cap_result = capability_no;
- }
- else if (err->apr_err == SVN_ERR_FS_NOT_FOUND)
- {
- /* Mergeinfo requests use relative paths, and
- anyway we're in r0, so this is a likely error,
- but it means the repository supports mergeinfo! */
- svn_error_clear(err);
- cap_result = capability_yes;
- }
- else
- return err;
-
- }
- else
- cap_result = capability_yes;
-
- apr_hash_set(ras->capabilities,
- SVN_RA_CAPABILITY_MERGEINFO, APR_HASH_KEY_STRING,
- cap_result);
- }
- else
- {
- return svn_error_createf
- (SVN_ERR_UNKNOWN_CAPABILITY, NULL,
- _("Don't know how to handle '%s' for capability '%s'"),
- capability_server_yes, capability);
- }
- }
-
- if (cap_result == capability_yes)
- {
- *has = TRUE;
- }
- else if (cap_result == capability_no)
- {
- *has = FALSE;
- }
- else if (cap_result == NULL)
- {
- return svn_error_createf
- (SVN_ERR_UNKNOWN_CAPABILITY, NULL,
- _("Don't know anything about capability '%s'"), capability);
- }
- else /* "can't happen" */
- {
- /* Well, let's hope it's a string. */
- return svn_error_createf
- (SVN_ERR_RA_DAV_OPTIONS_REQ_FAILED, NULL,
- _("Attempt to fetch capability '%s' resulted in '%s'"),
- capability, cap_result);
- }
-
- return SVN_NO_ERROR;
-}
diff --git a/subversion/libsvn_ra_neon/props.c b/subversion/libsvn_ra_neon/props.c
deleted file mode 100644
index 5a9b895..0000000
--- a/subversion/libsvn_ra_neon/props.c
+++ /dev/null
@@ -1,1520 +0,0 @@
-/*
- * props.c : routines for fetching DAV properties
- *
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- * ====================================================================
- */
-
-
-
-#include <apr_pools.h>
-#include <apr_tables.h>
-#include <apr_strings.h>
-#define APR_WANT_STRFUNC
-#include <apr_want.h>
-
-#include "svn_error.h"
-#include "svn_dirent_uri.h"
-#include "svn_path.h"
-#include "svn_dav.h"
-#include "svn_base64.h"
-#include "svn_xml.h"
-#include "svn_time.h"
-#include "svn_pools.h"
-#include "svn_props.h"
-#include "../libsvn_ra/ra_loader.h"
-
-#include "private/svn_dav_protocol.h"
-#include "private/svn_fspath.h"
-#include "svn_private_config.h"
-
-#include "ra_neon.h"
-
-
-/* some definitions of various properties that may be fetched */
-const ne_propname svn_ra_neon__vcc_prop = {
- "DAV:", "version-controlled-configuration"
-};
-const ne_propname svn_ra_neon__checked_in_prop = {
- "DAV:", "checked-in"
-};
-
-/* when we begin a checkout, we fetch these from the "public" resources to
- steer us towards a Baseline Collection. we fetch the resourcetype to
- verify that we're accessing a collection. */
-static const ne_propname starting_props[] =
-{
- { "DAV:", "version-controlled-configuration" },
- { "DAV:", "resourcetype" },
- { SVN_DAV_PROP_NS_DAV, "baseline-relative-path" },
- { SVN_DAV_PROP_NS_DAV, "repository-uuid"},
- { NULL }
-};
-
-/* when speaking to a Baseline to reach the Baseline Collection, fetch these
- properties. */
-static const ne_propname baseline_props[] =
-{
- { "DAV:", "baseline-collection" },
- { "DAV:", SVN_DAV__VERSION_NAME },
- { NULL }
-};
-
-
-
-/*** Propfind Implementation ***/
-
-typedef struct elem_defn {
- svn_ra_neon__xml_elmid id;
- const char *name;
- int is_property; /* is it a property, or part of some structure? */
-} elem_defn;
-
-
-static const elem_defn elem_definitions[] =
-{
- /*** NOTE: Make sure that every item in here is also represented in
- propfind_elements[] ***/
-
- /* DAV elements */
- { ELEM_multistatus, "DAV:multistatus", 0 },
- { ELEM_response, "DAV:response", 0 },
- { ELEM_href, "DAV:href", SVN_RA_NEON__XML_CDATA },
- { ELEM_propstat, "DAV:propstat", 0 },
- { ELEM_prop, "DAV:prop", 0 },
- { ELEM_status, "DAV:status", SVN_RA_NEON__XML_CDATA },
- { ELEM_baseline, "DAV:baseline", SVN_RA_NEON__XML_CDATA },
- { ELEM_collection, "DAV:collection", SVN_RA_NEON__XML_CDATA },
- { ELEM_resourcetype, "DAV:resourcetype", 0 },
- { ELEM_baseline_coll, SVN_RA_NEON__PROP_BASELINE_COLLECTION, 0 },
- { ELEM_checked_in, SVN_RA_NEON__PROP_CHECKED_IN, 0 },
- { ELEM_vcc, SVN_RA_NEON__PROP_VCC, 0 },
- { ELEM_version_name, SVN_RA_NEON__PROP_VERSION_NAME, 1 },
- { ELEM_get_content_length, SVN_RA_NEON__PROP_GETCONTENTLENGTH, 1 },
- { ELEM_creationdate, SVN_RA_NEON__PROP_CREATIONDATE, 1 },
- { ELEM_creator_displayname, SVN_RA_NEON__PROP_CREATOR_DISPLAYNAME, 1 },
-
- /* SVN elements */
- { ELEM_baseline_relpath, SVN_RA_NEON__PROP_BASELINE_RELPATH, 1 },
- { ELEM_md5_checksum, SVN_RA_NEON__PROP_MD5_CHECKSUM, 1 },
- { ELEM_repository_uuid, SVN_RA_NEON__PROP_REPOSITORY_UUID, 1 },
- { ELEM_deadprop_count, SVN_RA_NEON__PROP_DEADPROP_COUNT, 1 },
- { 0 }
-};
-
-
-static const svn_ra_neon__xml_elm_t propfind_elements[] =
-{
- /*** NOTE: Make sure that every item in here is also represented in
- elem_definitions[] ***/
-
- /* DAV elements */
- { "DAV:", "multistatus", ELEM_multistatus, 0 },
- { "DAV:", "response", ELEM_response, 0 },
- { "DAV:", "href", ELEM_href, SVN_RA_NEON__XML_CDATA },
- { "DAV:", "propstat", ELEM_propstat, 0 },
- { "DAV:", "prop", ELEM_prop, 0 },
- { "DAV:", "status", ELEM_status, SVN_RA_NEON__XML_CDATA },
- { "DAV:", "baseline", ELEM_baseline, SVN_RA_NEON__XML_CDATA },
- { "DAV:", "baseline-collection", ELEM_baseline_coll, SVN_RA_NEON__XML_CDATA },
- { "DAV:", "checked-in", ELEM_checked_in, 0 },
- { "DAV:", "collection", ELEM_collection, SVN_RA_NEON__XML_CDATA },
- { "DAV:", "resourcetype", ELEM_resourcetype, 0 },
- { "DAV:", "version-controlled-configuration", ELEM_vcc, 0 },
- { "DAV:", SVN_DAV__VERSION_NAME, ELEM_version_name, SVN_RA_NEON__XML_CDATA },
- { "DAV:", "getcontentlength", ELEM_get_content_length,
- SVN_RA_NEON__XML_CDATA },
- { "DAV:", SVN_DAV__CREATIONDATE, ELEM_creationdate, SVN_RA_NEON__XML_CDATA },
- { "DAV:", "creator-displayname", ELEM_creator_displayname,
- SVN_RA_NEON__XML_CDATA },
-
- /* SVN elements */
- { SVN_DAV_PROP_NS_DAV, "baseline-relative-path", ELEM_baseline_relpath,
- SVN_RA_NEON__XML_CDATA },
- { SVN_DAV_PROP_NS_DAV, "md5-checksum", ELEM_md5_checksum,
- SVN_RA_NEON__XML_CDATA },
- { SVN_DAV_PROP_NS_DAV, "repository-uuid", ELEM_repository_uuid,
- SVN_RA_NEON__XML_CDATA },
- { SVN_DAV_PROP_NS_DAV, "deadprop-count", ELEM_deadprop_count,
- SVN_RA_NEON__XML_CDATA },
-
- /* Unknowns */
- { "", "", ELEM_unknown, SVN_RA_NEON__XML_COLLECT },
-
- { NULL }
-};
-
-
-typedef struct propfind_ctx_t
-{
- /*WARNING: WANT_CDATA should stay the first element in the baton:
- svn_ra_neon__xml_collect_cdata() assumes the baton starts with a stringbuf.
- */
- svn_stringbuf_t *cdata;
- apr_hash_t *props; /* const char *URL-PATH -> svn_ra_neon__resource_t */
-
- svn_ra_neon__resource_t *rsrc; /* the current resource. */
- const char *encoding; /* property encoding (or NULL) */
- int status; /* status for the current <propstat> (or 0 if unknown). */
- apr_hash_t *propbuffer; /* holds properties until their status is known. */
- svn_ra_neon__xml_elmid last_open_id; /* the id of the last opened tag. */
- ne_xml_parser *parser; /* xml parser handling the PROPSET request. */
-
- apr_pool_t *pool;
-
-} propfind_ctx_t;
-
-
-/* Look up an element definition ID. May return NULL if the elem is
- not recognized. */
-static const elem_defn *defn_from_id(svn_ra_neon__xml_elmid id)
-{
- const elem_defn *defn;
-
- for (defn = elem_definitions; defn->name != NULL; ++defn)
- {
- if (id == defn->id)
- return defn;
- }
-
- return NULL;
-}
-
-
-/* Assign URL to RSRC. Use POOL for any allocations. */
-static svn_error_t *
-assign_rsrc_url(svn_ra_neon__resource_t *rsrc,
- const char *url, apr_pool_t *pool)
-{
- char *url_path;
- apr_size_t len;
- ne_uri parsed_url;
-
- /* Parse the PATH element out of the URL.
- NOTE: mod_dav does not (currently) use an absolute URL, but simply a
- server-relative path (i.e. this uri_parse is effectively a no-op).
- */
- if (ne_uri_parse(url, &parsed_url) != 0)
- {
- ne_uri_free(&parsed_url);
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Unable to parse URL '%s'"), url);
- }
-
- url_path = apr_pstrdup(pool, parsed_url.path);
- ne_uri_free(&parsed_url);
-
- /* Clean up trailing slashes from the URL. */
- len = strlen(url_path);
- if (len > 1 && url_path[len - 1] == '/')
- url_path[len - 1] = '\0';
- rsrc->url = url_path;
-
- return SVN_NO_ERROR;
-}
-
-/* Determine whether we're receiving the expected XML response.
- Return CHILD when interested in receiving the child's contents
- or one of SVN_RA_NEON__XML_INVALID and SVN_RA_NEON__XML_DECLINE
- when respectively this is the incorrect response or
- the element (and its children) are uninteresting */
-static int validate_element(svn_ra_neon__xml_elmid parent,
- svn_ra_neon__xml_elmid child)
-{
- switch (parent)
- {
- case ELEM_root:
- if (child == ELEM_multistatus)
- return child;
- else
- return SVN_RA_NEON__XML_INVALID;
-
- case ELEM_multistatus:
- if (child == ELEM_response)
- return child;
- else
- return SVN_RA_NEON__XML_DECLINE;
-
- case ELEM_response:
- if ((child == ELEM_href) || (child == ELEM_propstat))
- return child;
- else
- return SVN_RA_NEON__XML_DECLINE;
-
- case ELEM_propstat:
- if ((child == ELEM_prop) || (child == ELEM_status))
- return child;
- else
- return SVN_RA_NEON__XML_DECLINE;
-
- case ELEM_prop:
- return child; /* handle all children of <prop> */
-
- case ELEM_baseline_coll:
- case ELEM_checked_in:
- case ELEM_vcc:
- if (child == ELEM_href)
- return child;
- else
- return SVN_RA_NEON__XML_DECLINE; /* not concerned with other types */
-
- case ELEM_resourcetype:
- if ((child == ELEM_collection) || (child == ELEM_baseline))
- return child;
- else
- return SVN_RA_NEON__XML_DECLINE; /* not concerned with other types
- (### now) */
-
- default:
- return SVN_RA_NEON__XML_DECLINE;
- }
-
- /* NOTREACHED */
-}
-
-
-static svn_error_t *
-start_element(int *elem, void *baton, int parent,
- const char *nspace, const char *name, const char **atts)
-{
- propfind_ctx_t *pc = baton;
- const svn_ra_neon__xml_elm_t *elm
- = svn_ra_neon__lookup_xml_elem(propfind_elements, nspace, name);
-
-
- *elem = elm ? validate_element(parent, elm->id) : SVN_RA_NEON__XML_DECLINE;
- if (*elem < 1) /* not a valid element */
- return SVN_NO_ERROR;
-
- svn_stringbuf_setempty(pc->cdata);
- *elem = elm ? elm->id : ELEM_unknown;
- switch (*elem)
- {
- case ELEM_response:
- if (pc->rsrc)
- return svn_error_create(SVN_ERR_XML_MALFORMED, NULL, NULL);
- /* Create a new resource. */
- pc->rsrc = apr_pcalloc(pc->pool, sizeof(*(pc->rsrc)));
- pc->rsrc->pool = pc->pool;
- pc->rsrc->propset = apr_hash_make(pc->pool);
- pc->status = 0;
- break;
-
- case ELEM_propstat:
- pc->status = 0;
- break;
-
- case ELEM_href:
- /* Remember this <href>'s parent so that when we close this tag,
- we know to whom the URL assignment belongs. Could be the
- resource itself, or one of the properties:
- ELEM_baseline_coll, ELEM_checked_in, ELEM_vcc: */
- pc->rsrc->href_parent = pc->last_open_id;
- break;
-
- case ELEM_collection:
- pc->rsrc->is_collection = 1;
- break;
-
- case ELEM_unknown:
- /* these are our user-visible properties, presumably. */
- pc->encoding = ne_xml_get_attr(pc->parser, atts, SVN_DAV_PROP_NS_DAV,
- "encoding");
- if (pc->encoding)
- pc->encoding = apr_pstrdup(pc->pool, pc->encoding);
- break;
-
- default:
- /* nothing to do for these */
- break;
- }
-
- /* Remember the last tag we opened. */
- pc->last_open_id = *elem;
- return SVN_NO_ERROR;
-}
-
-
-static svn_error_t * end_element(void *baton, int state,
- const char *nspace, const char *name)
-{
- propfind_ctx_t *pc = baton;
- svn_ra_neon__resource_t *rsrc = pc->rsrc;
- const svn_string_t *value = NULL;
- const elem_defn *parent_defn;
- const elem_defn *defn;
- ne_status status;
- const char *cdata = pc->cdata->data;
-
- switch (state)
- {
- case ELEM_response:
- /* Verify that we've received a URL for this resource. */
- if (!pc->rsrc->url)
- return svn_error_create(SVN_ERR_XML_MALFORMED, NULL, NULL);
-
- /* Store the resource in the top-level hash table. */
- apr_hash_set(pc->props, pc->rsrc->url, APR_HASH_KEY_STRING, pc->rsrc);
- pc->rsrc = NULL;
- return SVN_NO_ERROR;
-
- case ELEM_propstat:
- /* We're at the end of a set of properties. Do the right thing
- status-wise. */
- if (pc->status)
- {
- /* We have a status. Loop over the buffered properties, and
- if the status is a good one (200), copy them into the
- resources's property hash. Regardless of the status,
- we'll be removing these from the temporary buffer as we
- go along. */
- apr_hash_index_t *hi = apr_hash_first(pc->pool, pc->propbuffer);
- for (; hi; hi = apr_hash_next(hi))
- {
- const void *key;
- apr_ssize_t klen;
- void *val;
- apr_hash_this(hi, &key, &klen, &val);
- if (pc->status == 200)
- apr_hash_set(rsrc->propset, key, klen, val);
- apr_hash_set(pc->propbuffer, key, klen, NULL);
- }
- }
- else if (! pc->status)
- {
- /* No status at all? Bogosity. */
- return svn_error_create(SVN_ERR_XML_MALFORMED, NULL, NULL);
- }
- return SVN_NO_ERROR;
-
- case ELEM_status:
- /* Parse the <status> tag's CDATA for a status code. */
- if (ne_parse_statusline(cdata, &status))
- return svn_error_create(SVN_ERR_XML_MALFORMED, NULL, NULL);
- free(status.reason_phrase);
- pc->status = status.code;
- return SVN_NO_ERROR;
-
- case ELEM_href:
- /* Special handling for <href> that belongs to the <response> tag. */
- if (rsrc->href_parent == ELEM_response)
- return assign_rsrc_url(pc->rsrc,
- svn_urlpath__canonicalize(cdata, pc->pool),
- pc->pool);
-
- /* Use the parent element's name, not the href. */
- parent_defn = defn_from_id(rsrc->href_parent);
-
- /* No known parent? Get outta here. */
- if (!parent_defn)
- return SVN_NO_ERROR;
-
- /* All other href's we'll treat as property values. */
- name = parent_defn->name;
- value = svn_string_create(svn_urlpath__canonicalize(cdata, pc->pool),
- pc->pool);
- break;
-
- default:
- /*** This case is, as usual, for everything not covered by other
- cases. ELM->id should be either ELEM_unknown, or one of
- the ids in the elem_definitions[] structure. In this case,
- we seek to handle properties. Since ELEM_unknown should
- only occur for properties, we will handle that id. All
- other ids will be searched for in the elem_definitions[]
- structure to determine if they are properties. Properties,
- we handle; all else hits the road. ***/
-
- if (state == ELEM_unknown)
- {
- name = apr_pstrcat(pc->pool, nspace, name, (char *)NULL);
- }
- else
- {
- defn = defn_from_id(state);
- if (! (defn && defn->is_property))
- return SVN_NO_ERROR;
- name = defn->name;
- }
-
- /* Check for encoding attribute. */
- if (pc->encoding == NULL) {
- /* Handle the property value by converting it to string. */
- value = svn_string_create(cdata, pc->pool);
- break;
- }
-
- /* Check for known encoding type */
- if (strcmp(pc->encoding, "base64") != 0)
- return svn_error_create(SVN_ERR_XML_MALFORMED, NULL, NULL);
-
- /* There is an encoding on this property, handle it.
- * the braces are needed to allocate "in" on the stack. */
- {
- svn_string_t in;
- in.data = cdata;
- in.len = strlen(cdata);
- value = svn_base64_decode_string(&in, pc->pool);
- }
-
- pc->encoding = NULL; /* Reset encoding for future attribute(s). */
- }
-
- /*** Handling resource properties from here out. ***/
-
- /* Add properties to the temporary propbuffer. At the end of the
- <propstat>, we'll either dump the props as invalid or move them
- into the resource's property hash. */
- apr_hash_set(pc->propbuffer, name, APR_HASH_KEY_STRING, value);
- return SVN_NO_ERROR;
-}
-
-
-static void set_parser(ne_xml_parser *parser,
- void *baton)
-{
- propfind_ctx_t *pc = baton;
- pc->parser = parser;
-}
-
-
-svn_error_t * svn_ra_neon__get_props(apr_hash_t **results,
- svn_ra_neon__session_t *sess,
- const char *url,
- int depth,
- const char *label,
- const ne_propname *which_props,
- apr_pool_t *pool)
-{
- propfind_ctx_t pc;
- svn_stringbuf_t *body;
- apr_hash_t *extra_headers = apr_hash_make(pool);
-
- svn_ra_neon__add_depth_header(extra_headers, depth);
-
- /* If we have a label, use it. */
- if (label != NULL)
- apr_hash_set(extra_headers, "Label", 5, label);
-
- /* It's easier to roll our own PROPFIND here than use neon's current
- interfaces. */
- /* The start of the request body is fixed: */
- body = svn_stringbuf_create
- ("<?xml version=\"1.0\" encoding=\"utf-8\"?>" DEBUG_CR
- "<propfind xmlns=\"DAV:\">" DEBUG_CR, pool);
-
- /* Are we asking for specific propert(y/ies), or just all of them? */
- if (which_props)
- {
- int n;
- apr_pool_t *iterpool = svn_pool_create(pool);
-
- svn_stringbuf_appendcstr(body, "<prop>" DEBUG_CR);
- for (n = 0; which_props[n].name != NULL; n++)
- {
- svn_pool_clear(iterpool);
- svn_stringbuf_appendcstr
- (body, apr_pstrcat(iterpool, "<", which_props[n].name, " xmlns=\"",
- which_props[n].nspace, "\"/>" DEBUG_CR,
- (char *)NULL));
- }
- svn_stringbuf_appendcstr(body, "</prop></propfind>" DEBUG_CR);
- svn_pool_destroy(iterpool);
- }
- else
- {
- svn_stringbuf_appendcstr(body, "<allprop/></propfind>" DEBUG_CR);
- }
-
- /* Initialize our baton. */
- memset(&pc, 0, sizeof(pc));
- pc.pool = pool;
- pc.propbuffer = apr_hash_make(pool);
- pc.props = apr_hash_make(pool);
- pc.cdata = svn_stringbuf_create("", pool);
-
- /* Create and dispatch the request! */
- SVN_ERR(svn_ra_neon__parsed_request(sess, "PROPFIND", url,
- body->data, 0,
- set_parser,
- start_element,
- svn_ra_neon__xml_collect_cdata,
- end_element,
- &pc, extra_headers, NULL, FALSE, pool));
-
- *results = pc.props;
- return SVN_NO_ERROR;
-}
-
-svn_error_t * svn_ra_neon__get_props_resource(svn_ra_neon__resource_t **rsrc,
- svn_ra_neon__session_t *sess,
- const char *url,
- const char *label,
- const ne_propname *which_props,
- apr_pool_t *pool)
-{
- apr_hash_t *props;
- char * url_path = apr_pstrdup(pool, url);
- int len = strlen(url);
- /* Clean up any trailing slashes. */
- if (len > 1 && url[len - 1] == '/')
- url_path[len - 1] = '\0';
-
- SVN_ERR(svn_ra_neon__get_props(&props, sess, url_path, SVN_RA_NEON__DEPTH_ZERO,
- label, which_props, pool));
-
- /* ### HACK. We need to have the client canonicalize paths, get rid
- of double slashes and such. This check is just a check against
- non-SVN servers; in the long run we want to re-enable this. */
- if (1 || label != NULL)
- {
- /* pick out the first response: the URL requested will not match
- * the response href. */
- apr_hash_index_t *hi = apr_hash_first(pool, props);
-
- if (hi)
- {
- void *ent;
- apr_hash_this(hi, NULL, NULL, &ent);
- *rsrc = ent;
- }
- else
- *rsrc = NULL;
- }
- else
- {
- *rsrc = apr_hash_get(props, url_path, APR_HASH_KEY_STRING);
- }
-
- if (*rsrc == NULL)
- {
- /* ### hmmm, should have been in there... */
- return svn_error_createf(APR_EGENERAL, NULL,
- _("Failed to find label '%s' for URL '%s'"),
- label ? label : "NULL", url_path);
- }
-
- return SVN_NO_ERROR;
-}
-
-svn_error_t * svn_ra_neon__get_one_prop(const svn_string_t **propval,
- svn_ra_neon__session_t *sess,
- const char *url,
- const char *label,
- const ne_propname *propname,
- apr_pool_t *pool)
-{
- svn_ra_neon__resource_t *rsrc;
- ne_propname props[2] = { { 0 } };
- const char *name;
- const svn_string_t *value;
-
- props[0] = *propname;
- SVN_ERR(svn_ra_neon__get_props_resource(&rsrc, sess, url, label, props,
- pool));
-
- name = apr_pstrcat(pool, propname->nspace, propname->name, (char *)NULL);
- value = apr_hash_get(rsrc->propset, name, APR_HASH_KEY_STRING);
- if (value == NULL)
- {
- /* ### need an SVN_ERR here */
- return svn_error_createf(SVN_ERR_FS_NOT_FOUND, NULL,
- _("'%s' was not present on the resource '%s'"),
- name, url);
- }
-
- *propval = value;
- return SVN_NO_ERROR;
-}
-
-svn_error_t * svn_ra_neon__get_starting_props(svn_ra_neon__resource_t **rsrc,
- svn_ra_neon__session_t *sess,
- const char *url,
- apr_pool_t *pool)
-{
- svn_string_t *propval;
-
- SVN_ERR(svn_ra_neon__get_props_resource(rsrc, sess, url, NULL,
- starting_props, pool));
-
- /* Cache some of the resource information. */
-
- if (! sess->vcc)
- {
- propval = apr_hash_get((*rsrc)->propset,
- SVN_RA_NEON__PROP_VCC,
- APR_HASH_KEY_STRING);
- if (propval)
- sess->vcc = apr_pstrdup(sess->pool, propval->data);
- }
-
- if (! sess->uuid)
- {
- propval = apr_hash_get((*rsrc)->propset,
- SVN_RA_NEON__PROP_REPOSITORY_UUID,
- APR_HASH_KEY_STRING);
- if (propval)
- sess->uuid = apr_pstrdup(sess->pool, propval->data);
- }
-
- if (! sess->repos_root)
- {
- propval = apr_hash_get((*rsrc)->propset,
- SVN_RA_NEON__PROP_BASELINE_RELPATH,
- APR_HASH_KEY_STRING);
-
- if (propval)
- {
- ne_uri uri;
- svn_stringbuf_t *urlbuf = svn_stringbuf_create(url, pool);
-
- svn_path_remove_components(urlbuf,
- svn_path_component_count(propval->data));
-
- uri = sess->root;
- uri.path = urlbuf->data;
-
- sess->repos_root = svn_ra_neon__uri_unparse(&uri, sess->pool);
- }
- }
-
- return SVN_NO_ERROR;
-}
-
-
-
-svn_error_t *
-svn_ra_neon__search_for_starting_props(svn_ra_neon__resource_t **rsrc,
- const char **missing_path,
- svn_ra_neon__session_t *sess,
- const char *url,
- apr_pool_t *pool)
-{
- svn_error_t *err = SVN_NO_ERROR;
- apr_size_t len;
- svn_stringbuf_t *path_s;
- ne_uri parsed_url;
- svn_stringbuf_t *lopped_path =
- svn_stringbuf_create(url, pool); /* initialize to make sure it'll fit
- without reallocating */
- apr_pool_t *iterpool = svn_pool_create(pool);
-
- /* Split the url into its component pieces (scheme, host, path,
- etc). We want the path part. */
- ne_uri_parse(url, &parsed_url);
- if (parsed_url.path == NULL)
- {
- ne_uri_free(&parsed_url);
- return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
- _("Neon was unable to parse URL '%s'"), url);
- }
-
- svn_stringbuf_setempty(lopped_path);
- path_s = svn_stringbuf_create(parsed_url.path, pool);
- ne_uri_free(&parsed_url);
-
- /* Try to get the starting_props from the public url. If the
- resource no longer exists in HEAD or is forbidden, we'll get a
- failure. That's fine: just keep removing components and trying
- to get the starting_props from parent directories. */
- while (! svn_path_is_empty(path_s->data))
- {
- svn_pool_clear(iterpool);
- err = svn_ra_neon__get_starting_props(rsrc, sess, path_s->data,
- iterpool);
- if (! err)
- break; /* found an existing, readable parent! */
-
- if ((err->apr_err != SVN_ERR_FS_NOT_FOUND) &&
- (err->apr_err != SVN_ERR_RA_DAV_FORBIDDEN))
- return err; /* found a _real_ error */
-
- /* else... lop off the basename and try again. */
- /* ### TODO: path_s is an absolute, schema-less URI, but
- ### technically not an FS_PATH. */
- svn_stringbuf_set(lopped_path,
- svn_relpath_join(svn_urlpath__basename(path_s->data,
- iterpool),
- lopped_path->data, iterpool));
-
- len = path_s->len;
- svn_path_remove_component(path_s);
-
- /* if we detect an infinite loop, get out. */
- if (path_s->len == len)
- return svn_error_quick_wrap
- (err, _("The path was not part of a repository"));
-
- svn_error_clear(err);
- }
-
- /* error out if entire URL was bogus (not a single part of it exists
- in the repository!) */
- if (svn_path_is_empty(path_s->data))
- return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
- _("No part of path '%s' was found in "
- "repository HEAD"), parsed_url.path);
-
- /* Duplicate rsrc out of iterpool into pool */
- {
- apr_hash_index_t *hi;
- svn_ra_neon__resource_t *tmp = apr_pcalloc(pool, sizeof(*tmp));
- tmp->url = apr_pstrdup(pool, (*rsrc)->url);
- tmp->is_collection = (*rsrc)->is_collection;
- tmp->pool = pool;
- tmp->propset = apr_hash_make(pool);
-
- for (hi = apr_hash_first(iterpool, (*rsrc)->propset);
- hi; hi = apr_hash_next(hi))
- {
- const void *key;
- void *val;
-
- apr_hash_this(hi, &key, NULL, &val);
- apr_hash_set(tmp->propset, apr_pstrdup(pool, key), APR_HASH_KEY_STRING,
- svn_string_dup(val, pool));
- }
-
- *rsrc = tmp;
- }
- *missing_path = lopped_path->data;
- svn_pool_destroy(iterpool);
- return SVN_NO_ERROR;
-}
-
-
-svn_error_t *svn_ra_neon__get_vcc(const char **vcc,
- svn_ra_neon__session_t *sess,
- const char *url,
- apr_pool_t *pool)
-{
- svn_ra_neon__resource_t *rsrc;
- const char *lopped_path;
-
- /* Look for memory-cached VCC in the RA session. */
- if (sess->vcc)
- {
- *vcc = sess->vcc;
- return SVN_NO_ERROR;
- }
-
- /* ### Someday, possibly look for disk-cached VCC via get_wcprop callback. */
-
- /* Finally, resort to a set of PROPFINDs up parent directories. */
- SVN_ERR(svn_ra_neon__search_for_starting_props(&rsrc, &lopped_path,
- sess, url, pool));
-
- if (! sess->vcc)
- {
- /* ### better error reporting... */
- return svn_error_create(APR_EGENERAL, NULL,
- _("The VCC property was not found on the "
- "resource"));
- }
-
- *vcc = sess->vcc;
- return SVN_NO_ERROR;
-}
-
-
-svn_error_t *svn_ra_neon__get_baseline_props(svn_string_t *bc_relative,
- svn_ra_neon__resource_t **bln_rsrc,
- svn_ra_neon__session_t *sess,
- const char *url,
- svn_revnum_t revision,
- const ne_propname *which_props,
- apr_pool_t *pool)
-{
- svn_ra_neon__resource_t *rsrc;
- const char *vcc;
- const svn_string_t *relative_path;
- const char *my_bc_relative;
- const char *lopped_path;
-
- /* ### we may be able to replace some/all of this code with an
- ### expand-property REPORT when that is available on the server. */
-
- /* -------------------------------------------------------------------
- STEP 1
-
- Fetch the following properties from the given URL (or, if URL no
- longer exists in HEAD, get the properties from the nearest
- still-existing parent resource):
-
- *) DAV:version-controlled-configuration so that we can reach the
- baseline information.
-
- *) svn:baseline-relative-path so that we can find this resource
- within a Baseline Collection. If we need to search up parent
- directories, then the relative path is this property value
- *plus* any trailing components we had to chop off.
-
- *) DAV:resourcetype so that we can identify whether this resource
- is a collection or not -- assuming we never had to search up
- parent directories.
- */
-
- SVN_ERR(svn_ra_neon__search_for_starting_props(&rsrc, &lopped_path,
- sess, url, pool));
-
- SVN_ERR(svn_ra_neon__get_vcc(&vcc, sess, url, pool));
- if (vcc == NULL)
- {
- /* ### better error reporting... */
-
- /* ### need an SVN_ERR here */
- return svn_error_create(APR_EGENERAL, NULL,
- _("The VCC property was not found on the "
- "resource"));
- }
-
- /* Allocate our own bc_relative path. */
- relative_path = apr_hash_get(rsrc->propset,
- SVN_RA_NEON__PROP_BASELINE_RELPATH,
- APR_HASH_KEY_STRING);
- if (relative_path == NULL)
- {
- /* ### better error reporting... */
- /* ### need an SVN_ERR here */
- return svn_error_create(APR_EGENERAL, NULL,
- _("The relative-path property was not "
- "found on the resource"));
- }
-
- /* don't forget to tack on the parts we lopped off in order to find
- the VCC... We are expected to return a URI decoded relative
- path, so decode the lopped path first. */
- my_bc_relative = svn_relpath_join(relative_path->data,
- svn_path_uri_decode(lopped_path, pool),
- pool);
-
- /* if they want the relative path (could be, they're just trying to find
- the baseline collection), then return it */
- if (bc_relative)
- {
- bc_relative->data = my_bc_relative;
- bc_relative->len = strlen(my_bc_relative);
- }
-
- /* -------------------------------------------------------------------
- STEP 2
-
- We have the Version Controlled Configuration (VCC). From here, we
- need to reach the Baseline for specified revision.
-
- If the revision is SVN_INVALID_REVNUM, then we're talking about
- the HEAD revision. We have one extra step to reach the Baseline:
-
- *) Fetch the DAV:checked-in from the VCC; it points to the Baseline.
-
- If we have a specific revision, then we use a Label header when
- fetching props from the VCC. This will direct us to the Baseline
- with that label (in this case, the label == the revision number).
-
- From the Baseline, we fetch the following properties:
-
- *) DAV:baseline-collection, which is a complete tree of the Baseline
- (in SVN terms, this tree is rooted at a specific revision)
-
- *) DAV:version-name to get the revision of the Baseline that we are
- querying. When asking about the HEAD, this tells us its revision.
- */
-
- if (revision == SVN_INVALID_REVNUM)
- {
- /* Fetch the latest revision */
-
- const svn_string_t *baseline;
-
- /* Get the Baseline from the DAV:checked-in value, then fetch its
- DAV:baseline-collection property. */
- /* ### should wrap this with info about rsrc==VCC */
- SVN_ERR(svn_ra_neon__get_one_prop(&baseline, sess, vcc, NULL,
- &svn_ra_neon__checked_in_prop, pool));
-
- /* ### do we want to optimize the props we fetch, based on what the
- ### user asked for? i.e. omit version-name if latest_rev is NULL */
- SVN_ERR(svn_ra_neon__get_props_resource(&rsrc, sess,
- baseline->data, NULL,
- which_props, pool));
- }
- else
- {
- /* Fetch a specific revision */
- /* ### send Label hdr, get DAV:baseline-collection [from the baseline] */
- const char *label = apr_ltoa(pool, revision);
-
- /* ### do we want to optimize the props we fetch, based on what the
- ### user asked for? i.e. omit version-name if latest_rev is NULL */
- SVN_ERR(svn_ra_neon__get_props_resource(&rsrc, sess, vcc, label,
- which_props, pool));
- }
-
- /* Return the baseline rsrc, which now contains whatever set of
- props the caller wanted. */
- *bln_rsrc = rsrc;
- return SVN_NO_ERROR;
-}
-
-
-svn_error_t *svn_ra_neon__get_baseline_info(const char **bc_url_p,
- const char **bc_relative_p,
- svn_revnum_t *latest_rev,
- svn_ra_neon__session_t *sess,
- const char *url,
- svn_revnum_t revision,
- apr_pool_t *pool)
-{
- svn_ra_neon__resource_t *baseline_rsrc;
- const svn_string_t *my_bc_url;
- svn_string_t my_bc_rel;
-
- /* If the server supports HTTPv2, we can bypass alot of the hard
- work here. Otherwise, we fall back to older (less direct)
- semantics. */
- if (SVN_RA_NEON__HAVE_HTTPV2_SUPPORT(sess))
- {
- /* Fetch youngest revision from server only if needed to construct
- baseline collection URL or return to caller. */
- if (! SVN_IS_VALID_REVNUM(revision) && (bc_url_p || latest_rev))
- {
- svn_revnum_t youngest;
-
- SVN_ERR(svn_ra_neon__exchange_capabilities(sess, NULL,
- &youngest, pool));
- if (! SVN_IS_VALID_REVNUM(youngest))
- return svn_error_create(SVN_ERR_RA_DAV_OPTIONS_REQ_FAILED, NULL,
- _("The OPTIONS response did not include "
- "the youngest revision"));
- revision = youngest;
- }
- if (bc_url_p)
- {
- *bc_url_p = apr_psprintf(pool, "%s/%ld", sess->rev_root_stub,
- revision);
- }
- if (bc_relative_p)
- {
- const char *relpath = svn_uri_skip_ancestor(sess->repos_root, url,
- pool);
- if (! relpath)
- return svn_error_createf(SVN_ERR_RA_REPOS_ROOT_URL_MISMATCH, NULL,
- _("Url '%s' is not in repository '%s'"),
- url, sess->repos_root);
-
- *bc_relative_p = relpath;
- }
- if (latest_rev)
- {
- *latest_rev = revision;
- }
- return SVN_NO_ERROR;
- }
-
- /* Go fetch a BASELINE_RSRC that contains specific properties we
- want. This routine will also fill in BC_RELATIVE as best it
- can. */
- SVN_ERR(svn_ra_neon__get_baseline_props(&my_bc_rel,
- &baseline_rsrc,
- sess,
- url,
- revision,
- baseline_props, /* specific props */
- pool));
-
- /* baseline_rsrc now points at the Baseline. We will checkout from
- the DAV:baseline-collection. The revision we are checking out is
- in DAV:version-name */
-
- /* Allocate our own copy of bc_url regardless. */
- my_bc_url = apr_hash_get(baseline_rsrc->propset,
- SVN_RA_NEON__PROP_BASELINE_COLLECTION,
- APR_HASH_KEY_STRING);
- if (my_bc_url == NULL)
- {
- /* ### better error reporting... */
- /* ### need an SVN_ERR here */
- return svn_error_create(APR_EGENERAL, NULL,
- _("'DAV:baseline-collection' was not present "
- "on the baseline resource"));
- }
-
- /* maybe return bc_url to the caller */
- if (bc_url_p)
- *bc_url_p = my_bc_url->data;
-
- if (latest_rev != NULL)
- {
- const svn_string_t *vsn_name= apr_hash_get(baseline_rsrc->propset,
- SVN_RA_NEON__PROP_VERSION_NAME,
- APR_HASH_KEY_STRING);
- if (vsn_name == NULL)
- {
- /* ### better error reporting... */
-
- /* ### need an SVN_ERR here */
- return svn_error_createf(APR_EGENERAL, NULL,
- _("'%s' was not present on the baseline "
- "resource"),
- "DAV:" SVN_DAV__VERSION_NAME);
- }
- *latest_rev = SVN_STR_TO_REV(vsn_name->data);
- }
-
- if (bc_relative_p)
- *bc_relative_p = my_bc_rel.data;
-
- return SVN_NO_ERROR;
-}
-
-
-/* Helper function for append_setprop() below. */
-static svn_error_t *
-get_encoding_and_cdata(const char **encoding_p,
- const char **cdata_p,
- const svn_string_t *value,
- apr_pool_t *pool)
-{
- const char *encoding;
- const char *xml_safe;
-
- /* Easy out. */
- if (value == NULL)
- {
- *encoding_p = "";
- *cdata_p = "";
- return SVN_NO_ERROR;
- }
-
- /* If a property is XML-safe, XML-encode it. Else, base64-encode
- it. */
- if (svn_xml_is_xml_safe(value->data, value->len))
- {
- svn_stringbuf_t *xml_esc = NULL;
- svn_xml_escape_cdata_string(&xml_esc, value, pool);
- xml_safe = xml_esc->data;
- encoding = "";
- }
- else
- {
- const svn_string_t *base64ed = svn_base64_encode_string2(value, TRUE,
- pool);
- encoding = " V:encoding=\"base64\"";
- xml_safe = base64ed->data;
- }
-
- *encoding_p = encoding;
- *cdata_p = xml_safe;
- return SVN_NO_ERROR;
-}
-
-/* Helper function for svn_ra_neon__do_proppatch() below. */
-static svn_error_t *
-append_setprop(svn_stringbuf_t *body,
- const char *name,
- const svn_string_t *const *old_value_p,
- const svn_string_t *value,
- apr_pool_t *pool)
-{
- const char *encoding;
- const char *xml_safe;
- const char *xml_tag_name;
- const char *old_value_tag;
-
- /* Map property names to namespaces */
-#define NSLEN (sizeof(SVN_PROP_PREFIX) - 1)
- if (strncmp(name, SVN_PROP_PREFIX, NSLEN) == 0)
- {
- xml_tag_name = apr_pstrcat(pool, "S:", name + NSLEN, (char *)NULL);
- }
-#undef NSLEN
- else
- {
- xml_tag_name = apr_pstrcat(pool, "C:", name, (char *)NULL);
- }
-
- if (old_value_p)
- {
- if (*old_value_p)
- {
- const char *encoding2;
- const char *xml_safe2;
- SVN_ERR(get_encoding_and_cdata(&encoding2, &xml_safe2,
- *old_value_p, pool));
- old_value_tag = apr_psprintf(pool, "<%s %s>%s</%s>",
- "V:" SVN_DAV__OLD_VALUE, encoding2,
- xml_safe2, "V:" SVN_DAV__OLD_VALUE);
- }
- else
- {
-#define OLD_VALUE_ABSENT_TAG \
- "<" "V:" SVN_DAV__OLD_VALUE \
- " V:" SVN_DAV__OLD_VALUE__ABSENT "=\"1\" " \
- "/>"
- old_value_tag = OLD_VALUE_ABSENT_TAG;
- }
- }
- else
- {
- old_value_tag = "";
- }
-
- if (old_value_p && !value)
- {
- encoding = "V:" SVN_DAV__OLD_VALUE__ABSENT "=\"1\"" ;
- xml_safe = "";
- }
- else
- {
- SVN_ERR(get_encoding_and_cdata(&encoding, &xml_safe, value, pool));
- }
-
- svn_stringbuf_appendcstr(body,
- apr_psprintf(pool,"<%s %s>%s%s</%s>",
- xml_tag_name, encoding, old_value_tag,
- xml_safe, xml_tag_name));
- return SVN_NO_ERROR;
-}
-
-
-svn_error_t *
-svn_ra_neon__do_proppatch(svn_ra_neon__session_t *ras,
- const char *url,
- apr_hash_t *prop_changes,
- const apr_array_header_t *prop_deletes,
- apr_hash_t *prop_old_values,
- apr_hash_t *extra_headers,
- apr_pool_t *pool)
-{
- svn_error_t *err;
- svn_stringbuf_t *body;
- int code;
- apr_pool_t *subpool = svn_pool_create(pool);
-
- /* just punt if there are no changes to make. */
- if ((prop_changes == NULL || (! apr_hash_count(prop_changes)))
- && (prop_deletes == NULL || prop_deletes->nelts == 0)
- && (prop_old_values == NULL || (! apr_hash_count(prop_old_values))))
- return SVN_NO_ERROR;
-
- /* easier to roll our own PROPPATCH here than use ne_proppatch(), which
- * doesn't really do anything clever. */
- body = svn_stringbuf_create
- ("<?xml version=\"1.0\" encoding=\"utf-8\" ?>" DEBUG_CR
- "<D:propertyupdate xmlns:D=\"DAV:\" xmlns:V=\""
- SVN_DAV_PROP_NS_DAV "\" xmlns:C=\""
- SVN_DAV_PROP_NS_CUSTOM "\" xmlns:S=\""
- SVN_DAV_PROP_NS_SVN "\">" DEBUG_CR, pool);
-
- /* Handle property changes/deletions with expected old values. */
- if (prop_old_values)
- {
- apr_hash_index_t *hi;
- svn_stringbuf_appendcstr(body, "<D:set><D:prop>");
- for (hi = apr_hash_first(pool, prop_old_values); hi; hi = apr_hash_next(hi))
- {
- const char *name = svn__apr_hash_index_key(hi);
- svn_dav__two_props_t *both_values = svn__apr_hash_index_val(hi);
- svn_pool_clear(subpool);
- SVN_ERR(append_setprop(body, name, both_values->old_value_p,
- both_values->new_value, subpool));
- }
- svn_stringbuf_appendcstr(body, "</D:prop></D:set>");
- }
-
- /* Handle property changes. */
- if (prop_changes)
- {
- apr_hash_index_t *hi;
- svn_stringbuf_appendcstr(body, "<D:set><D:prop>");
- for (hi = apr_hash_first(pool, prop_changes); hi; hi = apr_hash_next(hi))
- {
- const void *key;
- void *val;
- svn_pool_clear(subpool);
- apr_hash_this(hi, &key, NULL, &val);
- SVN_ERR(append_setprop(body, key, NULL, val, subpool));
- }
- svn_stringbuf_appendcstr(body, "</D:prop></D:set>");
- }
-
- /* Handle property deletions. */
- if (prop_deletes)
- {
- int n;
- svn_stringbuf_appendcstr(body, "<D:remove><D:prop>");
- for (n = 0; n < prop_deletes->nelts; n++)
- {
- const char *name = APR_ARRAY_IDX(prop_deletes, n, const char *);
- svn_pool_clear(subpool);
- SVN_ERR(append_setprop(body, name, NULL, NULL, subpool));
- }
- svn_stringbuf_appendcstr(body, "</D:prop></D:remove>");
- }
- svn_pool_destroy(subpool);
-
- /* Finish up the body. */
- svn_stringbuf_appendcstr(body, "</D:propertyupdate>");
-
- /* Finish up the headers. */
- if (! extra_headers)
- extra_headers = apr_hash_make(pool);
- apr_hash_set(extra_headers, "Content-Type", APR_HASH_KEY_STRING,
- "text/xml; charset=UTF-8");
-
- err = svn_ra_neon__simple_request(&code, ras, "PROPPATCH", url,
- extra_headers, body->data,
- 200, 207, pool);
-
- if (err && err->apr_err == SVN_ERR_RA_DAV_REQUEST_FAILED)
- switch(code)
- {
- case 423:
- return svn_error_createf(SVN_ERR_RA_NOT_LOCKED, err,
- _("No lock on path '%s'; "
- " repository is unchanged"), url);
- /* ### Add case 412 for a better error on issue #3674 */
- default:
- break;
- }
-
- if (err)
- return svn_error_create
- (SVN_ERR_RA_DAV_PROPPATCH_FAILED, err,
- _("At least one property change failed; repository is unchanged"));
-
- return SVN_NO_ERROR;
-}
-
-
-
-svn_error_t *
-svn_ra_neon__do_check_path(svn_ra_session_t *session,
- const char *path,
- svn_revnum_t revision,
- svn_node_kind_t *kind,
- apr_pool_t *pool)
-{
- svn_ra_neon__session_t *ras = session->priv;
- const char *url = ras->url->data;
- const char *bc_url;
- const char *bc_relative;
- svn_error_t *err;
- svn_boolean_t is_dir;
-
- /* ### For now, using svn_ra_neon__get_starting_props() works because
- we only have three possibilities: dir, file, or none. When we
- add symlinks, we will need to do something different. Here's one
- way described by Greg Stein:
-
- That is a PROPFIND (Depth:0) for the DAV:resourcetype property.
-
- You can use the svn_ra_neon__get_one_prop() function to fetch
- it. If the PROPFIND fails with a 404, then you have
- svn_node_none. If the resulting property looks like:
-
- <D:resourcetype>
- <D:collection/>
- </D:resourcetype>
-
- Then it is a collection (directory; svn_node_dir). Otherwise,
- it is a regular resource (svn_node_file).
-
- The harder part is parsing the resourcetype property. "Proper"
- parsing means treating it as an XML property and looking for
- the DAV:collection element in there. To do that, however, means
- that get_one_prop() can't be used. I think there may be some
- Neon functions for parsing XML properties; we'd need to
- look. That would probably be the best approach. (an alternative
- is to use apr_xml_* parsing functions on the returned string;
- get back a DOM-like thing, and look for the element).
- */
-
- /* If we were given a relative path to append, append it. */
- if (path)
- url = svn_path_url_add_component2(url, path, pool);
-
- err = svn_ra_neon__get_baseline_info(&bc_url, &bc_relative, NULL, ras,
- url, revision, pool);
-
- if (! err)
- {
- svn_ra_neon__resource_t *rsrc;
- const char *full_bc_url = svn_path_url_add_component2(bc_url,
- bc_relative,
- pool);
-
- /* query the DAV:resourcetype of the full, assembled URL. */
- err = svn_ra_neon__get_starting_props(&rsrc, ras, full_bc_url, pool);
- if (! err)
- is_dir = rsrc->is_collection;
- }
-
- if (err == SVN_NO_ERROR)
- {
- if (is_dir)
- *kind = svn_node_dir;
- else
- *kind = svn_node_file;
- }
- else if (err->apr_err == SVN_ERR_FS_NOT_FOUND)
- {
-
- svn_error_clear(err);
- err = SVN_NO_ERROR;
- *kind = svn_node_none;
- }
-
- return err;
-}
-
-
-svn_error_t *
-svn_ra_neon__do_stat(svn_ra_session_t *session,
- const char *path,
- svn_revnum_t revision,
- svn_dirent_t **dirent,
- apr_pool_t *pool)
-{
- svn_ra_neon__session_t *ras = session->priv;
- const char *url = ras->url->data;
- const char *final_url;
- apr_hash_t *resources;
- apr_hash_index_t *hi;
- svn_error_t *err;
-
- /* If we were given a relative path to append, append it. */
- if (path)
- url = svn_path_url_add_component2(url, path, pool);
-
- /* Invalid revision means HEAD, which is just the public URL. */
- if (! SVN_IS_VALID_REVNUM(revision))
- {
- final_url = url;
- }
- else
- {
- /* Else, convert (rev, path) into an opaque server-generated URL. */
- const char *bc_url;
- const char *bc_relative;
-
- err = svn_ra_neon__get_baseline_info(&bc_url, &bc_relative, NULL, ras,
- url, revision, pool);
- if (err)
- {
- if (err->apr_err == SVN_ERR_FS_NOT_FOUND)
- {
- /* easy out: */
- svn_error_clear(err);
- *dirent = NULL;
- return SVN_NO_ERROR;
- }
- else
- return err;
- }
-
- final_url = svn_path_url_add_component2(bc_url, bc_relative, pool);
- }
-
- /* Depth-zero PROPFIND is the One True DAV Way. */
- err = svn_ra_neon__get_props(&resources, ras, final_url,
- SVN_RA_NEON__DEPTH_ZERO,
- NULL, NULL /* all props */, pool);
- if (err)
- {
- if (err->apr_err == SVN_ERR_FS_NOT_FOUND)
- {
- /* easy out: */
- svn_error_clear(err);
- *dirent = NULL;
- return SVN_NO_ERROR;
- }
- else
- return err;
- }
-
- /* Copying parsing code from svn_ra_neon__get_dir() here. The hash
- of resources only contains one item, but there's no other way to
- get the item. */
- for (hi = apr_hash_first(pool, resources); hi; hi = apr_hash_next(hi))
- {
- void *val;
- svn_ra_neon__resource_t *resource;
- const svn_string_t *propval;
- apr_hash_index_t *h;
- svn_dirent_t *entry;
-
- apr_hash_this(hi, NULL, NULL, &val);
- resource = val;
-
- entry = apr_pcalloc(pool, sizeof(*entry));
-
- entry->kind = resource->is_collection ? svn_node_dir : svn_node_file;
-
- /* entry->size is already 0 by virtue of pcalloc(). */
- if (entry->kind == svn_node_file)
- {
- propval = apr_hash_get(resource->propset,
- SVN_RA_NEON__PROP_GETCONTENTLENGTH,
- APR_HASH_KEY_STRING);
- if (propval)
- entry->size = svn__atoui64(propval->data);
- }
-
- /* does this resource contain any 'dead' properties? */
- for (h = apr_hash_first(pool, resource->propset);
- h; h = apr_hash_next(h))
- {
- const void *kkey;
- apr_hash_this(h, &kkey, NULL, NULL);
-
- if (strncmp((const char *)kkey, SVN_DAV_PROP_NS_CUSTOM,
- sizeof(SVN_DAV_PROP_NS_CUSTOM) - 1) == 0)
- entry->has_props = TRUE;
-
- else if (strncmp((const char *)kkey, SVN_DAV_PROP_NS_SVN,
- sizeof(SVN_DAV_PROP_NS_SVN) - 1) == 0)
- entry->has_props = TRUE;
- }
-
- /* created_rev & friends */
- propval = apr_hash_get(resource->propset,
- SVN_RA_NEON__PROP_VERSION_NAME,
- APR_HASH_KEY_STRING);
- if (propval != NULL)
- entry->created_rev = SVN_STR_TO_REV(propval->data);
-
- propval = apr_hash_get(resource->propset,
- SVN_RA_NEON__PROP_CREATIONDATE,
- APR_HASH_KEY_STRING);
- if (propval != NULL)
- SVN_ERR(svn_time_from_cstring(&(entry->time),
- propval->data, pool));
-
- propval = apr_hash_get(resource->propset,
- SVN_RA_NEON__PROP_CREATOR_DISPLAYNAME,
- APR_HASH_KEY_STRING);
- if (propval != NULL)
- entry->last_author = propval->data;
-
- *dirent = entry;
- }
-
- return SVN_NO_ERROR;
-}
diff --git a/subversion/libsvn_ra_neon/ra_neon.h b/subversion/libsvn_ra_neon/ra_neon.h
deleted file mode 100644
index 5dd0211..0000000
--- a/subversion/libsvn_ra_neon/ra_neon.h
+++ /dev/null
@@ -1,1189 +0,0 @@
-/*
- * ra_neon.h : Private declarations for the Neon-based DAV RA module.
- *
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- * ====================================================================
- */
-
-
-
-#ifndef SVN_LIBSVN_RA_NEON_H
-#define SVN_LIBSVN_RA_NEON_H
-
-#include <apr_pools.h>
-#include <apr_tables.h>
-
-#include <ne_request.h>
-#include <ne_uri.h>
-#include <ne_207.h> /* for NE_ELM_207_UNUSED */
-#include <ne_props.h> /* for ne_propname */
-
-#include "svn_types.h"
-#include "svn_string.h"
-#include "svn_delta.h"
-#include "svn_ra.h"
-#include "svn_dav.h"
-
-#include "private/svn_dav_protocol.h"
-#include "svn_private_config.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-
-
-/* Rename these types and constants to abstract from Neon */
-
-#define SVN_RA_NEON__XML_DECLINE NE_XML_DECLINE
-#define SVN_RA_NEON__XML_INVALID NE_XML_ABORT
-
-#define SVN_RA_NEON__XML_CDATA (1<<1)
-#define SVN_RA_NEON__XML_COLLECT ((1<<2) | SVN_RA_NEON__XML_CDATA)
-
-/* ### Related to anonymous enum below? */
-typedef int svn_ra_neon__xml_elmid;
-
-/** XML element */
-typedef struct svn_ra_neon__xml_elm_t {
- /** XML namespace. */
- const char *nspace;
-
- /** XML tag name. */
- const char *name;
-
- /** XML tag id to be passed to a handler. */
- svn_ra_neon__xml_elmid id;
-
- /** Processing flags for this namespace:tag.
- *
- * 0 (zero) - regular element, may have children,
- * SVN_RA_NEON__XML_CDATA - child-less element,
- * SVN_RA_NEON__XML_COLLECT - complete contents of such element must be
- * collected as CDATA, includes *_CDATA flag. */
- unsigned int flags;
-
-} svn_ra_neon__xml_elm_t;
-
-
-
-typedef struct svn_ra_neon__session_t {
- apr_pool_t *pool;
- svn_stringbuf_t *url; /* original, unparsed session url */
- ne_uri root; /* parsed version of above */
- const char *repos_root; /* URL for repository root */
-
- ne_session *ne_sess; /* HTTP session to server */
- ne_session *ne_sess2;
- svn_boolean_t main_session_busy; /* TRUE when requests should be created
- and issued on sess2; currently
- only used by fetch.c */
-
- const svn_ra_callbacks2_t *callbacks; /* callbacks to get auth data */
- void *callback_baton;
-
- svn_auth_iterstate_t *auth_iterstate; /* state of authentication retries */
- svn_boolean_t auth_used; /* Save authorization state after
- successful usage */
-
- svn_auth_iterstate_t *p11pin_iterstate; /* state of PKCS#11 pin retries */
-
- svn_boolean_t compression; /* should we use http compression? */
-
- /* Each of these function as caches, and are NULL when uninitialized
- or cleared: */
- const char *vcc; /* version-controlled-configuration */
- const char *uuid; /* repository UUID */
- const char *act_coll; /* activity collection set */
-
- svn_ra_progress_notify_func_t progress_func;
- void *progress_baton;
-
- apr_off_t total_progress; /* Total number of bytes sent in this
- session with a -1 total marker */
-
- /* Maps SVN_RA_CAPABILITY_foo keys to "yes" or "no" values.
- If a capability is not yet discovered, it is absent from the table.
- The table itself is allocated in the svn_ra_neon__session_t's pool;
- keys and values must have at least that lifetime. Most likely
- the keys and values are constants anyway (and sufficiently
- well-informed internal code may just compare against those
- constants' addresses, therefore). */
- apr_hash_t *capabilities;
-
- /* Tri-state variable holding information about server support for
- deadprop-count property.*/
- svn_tristate_t supports_deadprop_count;
-
- /*** HTTP v2 protocol stuff. ***
- *
- * We assume that if mod_dav_svn sends one of the special v2 OPTIONs
- * response headers, it has sent all of them. Specifically, we'll
- * be looking at the presence of the "me resource" as a flag that
- * the server supports v2 of our HTTP protocol.
- */
-
- /* The "me resource". Typically used as a target for REPORTs that
- are path-agnostic. If we have this, we can speak HTTP v2 to the
- server. */
- const char *me_resource;
-
- /* Opaque URL "stubs". If the OPTIONS response returns these, then
- we know we're using HTTP protocol v2. */
- const char *rev_stub; /* for accessing revisions (i.e. revprops) */
- const char *rev_root_stub; /* for accessing REV/PATH pairs */
- const char *txn_stub; /* for accessing transactions (i.e. txnprops) */
- const char *txn_root_stub; /* for accessing TXN/PATH pairs */
- const char *vtxn_stub; /* for accessing transactions (i.e. txnprops) */
- const char *vtxn_root_stub; /* for accessing TXN/PATH pairs */
-
- /*** End HTTP v2 stuff ***/
-
-} svn_ra_neon__session_t;
-
-#define SVN_RA_NEON__HAVE_HTTPV2_SUPPORT(ras) ((ras)->me_resource != NULL)
-
-
-typedef struct svn_ra_neon__request_t {
- ne_request *ne_req; /* neon request structure */
- ne_session *ne_sess; /* neon session structure */
- svn_ra_neon__session_t *sess; /* DAV session structure */
- const char *method;
- const char *url;
- int rv; /* Return value from
- ne_request_dispatch() or -1 if
- not dispatched yet. */
- int code; /* HTTP return code, or 0 if none */
- const char *code_desc; /* Textual description of CODE */
- svn_error_t *err; /* error encountered while executing
- the request */
- svn_boolean_t marshalled_error; /* TRUE if the error was server-side */
- apr_pool_t *pool; /* where this struct is allocated */
- apr_pool_t *iterpool; /* iteration pool
- for use within callbacks */
-} svn_ra_neon__request_t;
-
-
-/* Statement macro to set the request error,
- * making sure we don't leak any in case we encounter more than one error.
- *
- * Sets the 'err' field of REQ to the value obtained by evaluating NEW_ERR.
- */
-#define SVN_RA_NEON__REQ_ERR(req, new_err) \
- do { \
- svn_error_t *svn_err__tmp = (new_err); \
- if ((req)->err && !(req)->marshalled_error) \
- svn_error_clear(svn_err__tmp); \
- else if (svn_err__tmp) \
- { \
- svn_error_clear((req)->err); \
- (req)->err = svn_err__tmp; \
- (req)->marshalled_error = FALSE; \
- } \
- } while (0)
-
-
-/* Allocate an internal request structure allocated in a newly created
- * subpool of POOL. Create an associated neon request with the parameters
- * given.
- *
- * When a request is being dispatched on the primary Neon session,
- * the request is allocated to the secondary neon session of SESS.
- *
- * Register a pool cleanup for any allocated Neon resources.
- */
-svn_error_t *
-svn_ra_neon__request_create(svn_ra_neon__request_t **request,
- svn_ra_neon__session_t *sess,
- const char *method, const char *url,
- apr_pool_t *pool);
-
-
-/* Our version of ne_block_reader, which returns an
- * svn_error_t * instead of an int. */
-typedef svn_error_t *(*svn_ra_neon__block_reader)(void *baton,
- const char *data,
- size_t len);
-
-/* Add a response body reader function to REQ.
- *
- * Use the associated session parameters to determine the use of
- * compression.
- *
- * Register a pool cleanup on the pool of REQ to clean up any allocated
- * Neon resources.
- */
-void
-svn_ra_neon__add_response_body_reader(svn_ra_neon__request_t *req,
- ne_accept_response accpt,
- svn_ra_neon__block_reader reader,
- void *userdata);
-
-
-/* Destroy request REQ and any associated resources */
-#define svn_ra_neon__request_destroy(req) svn_pool_destroy((req)->pool)
-
-#ifdef SVN_DEBUG
-#define DEBUG_CR "\n"
-#else
-#define DEBUG_CR ""
-#endif
-
-
-/** vtable function prototypes */
-
-svn_error_t *svn_ra_neon__get_latest_revnum(svn_ra_session_t *session,
- svn_revnum_t *latest_revnum,
- apr_pool_t *pool);
-
-svn_error_t *svn_ra_neon__get_dated_revision(svn_ra_session_t *session,
- svn_revnum_t *revision,
- apr_time_t timestamp,
- apr_pool_t *pool);
-
-svn_error_t *svn_ra_neon__change_rev_prop(svn_ra_session_t *session,
- svn_revnum_t rev,
- const char *name,
- const svn_string_t *const *old_value_p,
- const svn_string_t *value,
- apr_pool_t *pool);
-
-svn_error_t *svn_ra_neon__rev_proplist(svn_ra_session_t *session,
- svn_revnum_t rev,
- apr_hash_t **props,
- apr_pool_t *pool);
-
-svn_error_t *svn_ra_neon__rev_prop(svn_ra_session_t *session,
- svn_revnum_t rev,
- const char *name,
- svn_string_t **value,
- apr_pool_t *pool);
-
-svn_error_t * svn_ra_neon__get_commit_editor(svn_ra_session_t *session,
- const svn_delta_editor_t **editor,
- void **edit_baton,
- apr_hash_t *revprop_table,
- svn_commit_callback2_t callback,
- void *callback_baton,
- apr_hash_t *lock_tokens,
- svn_boolean_t keep_locks,
- apr_pool_t *pool);
-
-svn_error_t * svn_ra_neon__get_file(svn_ra_session_t *session,
- const char *path,
- svn_revnum_t revision,
- svn_stream_t *stream,
- svn_revnum_t *fetched_rev,
- apr_hash_t **props,
- apr_pool_t *pool);
-
-svn_error_t *svn_ra_neon__get_dir(svn_ra_session_t *session,
- apr_hash_t **dirents,
- svn_revnum_t *fetched_rev,
- apr_hash_t **props,
- const char *path,
- svn_revnum_t revision,
- apr_uint32_t dirent_fields,
- apr_pool_t *pool);
-
-svn_error_t * svn_ra_neon__get_mergeinfo(
- svn_ra_session_t *session,
- apr_hash_t **mergeinfo,
- const apr_array_header_t *paths,
- svn_revnum_t revision,
- svn_mergeinfo_inheritance_t inherit,
- svn_boolean_t include_descendants,
- apr_pool_t *pool);
-
-svn_error_t * svn_ra_neon__do_update(svn_ra_session_t *session,
- const svn_ra_reporter3_t **reporter,
- void **report_baton,
- svn_revnum_t revision_to_update_to,
- const char *update_target,
- svn_depth_t depth,
- svn_boolean_t send_copyfrom_args,
- const svn_delta_editor_t *wc_update,
- void *wc_update_baton,
- apr_pool_t *pool);
-
-svn_error_t * svn_ra_neon__do_status(svn_ra_session_t *session,
- const svn_ra_reporter3_t **reporter,
- void **report_baton,
- const char *status_target,
- svn_revnum_t revision,
- svn_depth_t depth,
- const svn_delta_editor_t *wc_status,
- void *wc_status_baton,
- apr_pool_t *pool);
-
-svn_error_t * svn_ra_neon__do_switch(svn_ra_session_t *session,
- const svn_ra_reporter3_t **reporter,
- void **report_baton,
- svn_revnum_t revision_to_update_to,
- const char *update_target,
- svn_depth_t depth,
- const char *switch_url,
- const svn_delta_editor_t *wc_update,
- void *wc_update_baton,
- apr_pool_t *pool);
-
-svn_error_t * svn_ra_neon__do_diff(svn_ra_session_t *session,
- const svn_ra_reporter3_t **reporter,
- void **report_baton,
- svn_revnum_t revision,
- const char *diff_target,
- svn_depth_t depth,
- svn_boolean_t ignore_ancestry,
- svn_boolean_t text_deltas,
- const char *versus_url,
- const svn_delta_editor_t *wc_diff,
- void *wc_diff_baton,
- apr_pool_t *pool);
-
-svn_error_t * svn_ra_neon__get_log(svn_ra_session_t *session,
- const apr_array_header_t *paths,
- svn_revnum_t start,
- svn_revnum_t end,
- int limit,
- svn_boolean_t discover_changed_paths,
- svn_boolean_t strict_node_history,
- svn_boolean_t include_merged_revisions,
- const apr_array_header_t *revprops,
- svn_log_entry_receiver_t receiver,
- void *receiver_baton,
- apr_pool_t *pool);
-
-svn_error_t *svn_ra_neon__do_check_path(svn_ra_session_t *session,
- const char *path,
- svn_revnum_t revision,
- svn_node_kind_t *kind,
- apr_pool_t *pool);
-
-svn_error_t *svn_ra_neon__do_stat(svn_ra_session_t *session,
- const char *path,
- svn_revnum_t revision,
- svn_dirent_t **dirent,
- apr_pool_t *pool);
-
-svn_error_t *svn_ra_neon__get_file_revs(svn_ra_session_t *session,
- const char *path,
- svn_revnum_t start,
- svn_revnum_t end,
- svn_boolean_t include_merged_revisions,
- svn_file_rev_handler_t handler,
- void *handler_baton,
- apr_pool_t *pool);
-
-
-/* Local duplicate of svn_ra_get_path_relative_to_root(). */
-svn_error_t *svn_ra_neon__get_path_relative_to_root(svn_ra_session_t *session,
- const char **rel_path,
- const char *url,
- apr_pool_t *pool);
-
-
-/*
-** SVN_RA_NEON__LP_*: local properties for RA/DAV
-**
-** ra_neon and ra_serf store properties on the client containing information needed
-** to operate against the SVN server. Some of this informations is strictly
-** necessary to store, and some is simply stored as a cached value.
-*/
-
-#define SVN_RA_NEON__LP_NAMESPACE SVN_PROP_WC_PREFIX "ra_dav:"
-
-/* store the URL where Activities can be created */
-/* ### should fix the name to be "activity-coll" at some point */
-#define SVN_RA_NEON__LP_ACTIVITY_COLL SVN_RA_NEON__LP_NAMESPACE "activity-url"
-
-/* store the URL of the version resource (from the DAV:checked-in property) */
-#define SVN_RA_NEON__LP_VSN_URL SVN_RA_NEON__LP_NAMESPACE "version-url"
-
-
-/*
-** SVN_RA_NEON__PROP_*: properties that we fetch from the server
-**
-** These are simply symbolic names for some standard properties that we fetch.
-*/
-#define SVN_RA_NEON__PROP_BASELINE_COLLECTION "DAV:baseline-collection"
-#define SVN_RA_NEON__PROP_CHECKED_IN "DAV:checked-in"
-#define SVN_RA_NEON__PROP_VCC "DAV:version-controlled-configuration"
-#define SVN_RA_NEON__PROP_VERSION_NAME "DAV:" SVN_DAV__VERSION_NAME
-#define SVN_RA_NEON__PROP_CREATIONDATE "DAV:creationdate"
-#define SVN_RA_NEON__PROP_CREATOR_DISPLAYNAME "DAV:creator-displayname"
-#define SVN_RA_NEON__PROP_GETCONTENTLENGTH "DAV:getcontentlength"
-
-#define SVN_RA_NEON__PROP_BASELINE_RELPATH \
- SVN_DAV_PROP_NS_DAV "baseline-relative-path"
-
-#define SVN_RA_NEON__PROP_MD5_CHECKSUM SVN_DAV_PROP_NS_DAV "md5-checksum"
-
-#define SVN_RA_NEON__PROP_REPOSITORY_UUID SVN_DAV_PROP_NS_DAV "repository-uuid"
-
-#define SVN_RA_NEON__PROP_DEADPROP_COUNT SVN_DAV_PROP_NS_DAV "deadprop-count"
-
-typedef struct svn_ra_neon__resource_t {
- /* what is the URL for this resource */
- const char *url;
-
- /* is this resource a collection? (from the DAV:resourcetype element) */
- int is_collection;
-
- /* PROPSET: NAME -> VALUE (const char * -> const svn_string_t *) */
- apr_hash_t *propset;
-
- /* --- only used during response processing --- */
- /* when we see a DAV:href element, what element is the parent? */
- int href_parent;
-
- apr_pool_t *pool;
-
-} svn_ra_neon__resource_t;
-
-/* ### WARNING: which_props can only identify properties which props.c
- ### knows about. see the elem_definitions[] array. */
-
-/* fetch a bunch of properties from the server. */
-svn_error_t * svn_ra_neon__get_props(apr_hash_t **results,
- svn_ra_neon__session_t *sess,
- const char *url,
- int depth,
- const char *label,
- const ne_propname *which_props,
- apr_pool_t *pool);
-
-/* fetch a single resource's props from the server. */
-svn_error_t * svn_ra_neon__get_props_resource(svn_ra_neon__resource_t **rsrc,
- svn_ra_neon__session_t *sess,
- const char *url,
- const char *label,
- const ne_propname *which_props,
- apr_pool_t *pool);
-
-/* fetch a single resource's starting props from the server.
-
- Cache the version-controlled-configuration in SESS->vcc, and the
- repository uuid in SESS->uuid. */
-svn_error_t * svn_ra_neon__get_starting_props(svn_ra_neon__resource_t **rsrc,
- svn_ra_neon__session_t *sess,
- const char *url,
- apr_pool_t *pool);
-
-/* Shared helper func: given a public URL which may not exist in HEAD,
- use SESS to search up parent directories until we can retrieve a
- *RSRC (allocated in POOL) containing a standard set of "starting"
- props: {VCC, resourcetype, baseline-relative-path}.
-
- Also return *MISSING_PATH (allocated in POOL), which is the
- trailing portion of the URL that did not exist. If an error
- occurs, *MISSING_PATH isn't changed.
-
- Cache the version-controlled-configuration in SESS->vcc, and the
- repository uuid in SESS->uuid. */
-svn_error_t *
-svn_ra_neon__search_for_starting_props(svn_ra_neon__resource_t **rsrc,
- const char **missing_path,
- svn_ra_neon__session_t *sess,
- const char *url,
- apr_pool_t *pool);
-
-/* fetch a single property from a single resource */
-svn_error_t * svn_ra_neon__get_one_prop(const svn_string_t **propval,
- svn_ra_neon__session_t *sess,
- const char *url,
- const char *label,
- const ne_propname *propname,
- apr_pool_t *pool);
-
-/* Get various Baseline-related information for a given "public" URL.
-
- REVISION may be SVN_INVALID_REVNUM to indicate that the operation
- should work against the latest (HEAD) revision, or whether it should
- return information about that specific revision.
-
- If BC_URL_P is not NULL, then it will be filled in with the URL for
- the Baseline Collection for the specified revision, or the HEAD.
-
- If BC_RELATIVE_P is not NULL, then it will be filled in with a
- relative pathname for the baselined resource corresponding to the
- revision of the resource specified by URL.
-
- If LATEST_REV is not NULL, then it will be filled in with the revision
- that this information corresponds to. Generally, this will be the same
- as the REVISION parameter, unless we are working against the HEAD. In
- that case, the HEAD revision number is returned.
-
- Allocation for *BC_URL_P, *BC_RELATIVE_P, and temporary data,
- will occur in POOL.
-
- Note: a Baseline Collection is a complete tree for a specified Baseline.
- DeltaV baselines correspond one-to-one to Subversion revisions. Thus,
- the entire state of a revision can be found in a Baseline Collection.
-*/
-svn_error_t *svn_ra_neon__get_baseline_info(const char **bc_url_p,
- const char **bc_relative_p,
- svn_revnum_t *latest_rev,
- svn_ra_neon__session_t *sess,
- const char *url,
- svn_revnum_t revision,
- apr_pool_t *pool);
-
-/* Fetch a baseline resource populated with specific properties.
-
- Given a session SESS and a URL, set *BLN_RSRC to a baseline of
- REVISION, populated with whatever properties are specified by
- WHICH_PROPS. To fetch all properties, pass NULL for WHICH_PROPS.
-
- If BC_RELATIVE is not NULL, then it will be filled in with a
- relative pathname for the baselined resource corresponding to the
- revision of the resource specified by URL.
-*/
-svn_error_t *svn_ra_neon__get_baseline_props(svn_string_t *bc_relative,
- svn_ra_neon__resource_t **bln_rsrc,
- svn_ra_neon__session_t *sess,
- const char *url,
- svn_revnum_t revision,
- const ne_propname *which_props,
- apr_pool_t *pool);
-
-/* Fetch the repository's unique Version-Controlled-Configuration url.
-
- Given a session SESS and a URL, set *VCC to the url of the
- repository's version-controlled-configuration resource.
- */
-svn_error_t *svn_ra_neon__get_vcc(const char **vcc,
- svn_ra_neon__session_t *sess,
- const char *url,
- apr_pool_t *pool);
-
-/* Issue a PROPPATCH request on URL, transmitting PROP_CHANGES (a hash
- of const svn_string_t * values keyed on Subversion user-visible
- property names) and PROP_DELETES (an array of property names to
- delete). PROP_OLD_VALUES is a hash of Subversion user-visible property
- names mapped to svn_dav__two_props_t * values. Send any extra
- request headers in EXTRA_HEADERS. Use POOL for all allocations.
- */
-svn_error_t *svn_ra_neon__do_proppatch(svn_ra_neon__session_t *ras,
- const char *url,
- apr_hash_t *prop_changes,
- const apr_array_header_t *prop_deletes,
- apr_hash_t *prop_old_values,
- apr_hash_t *extra_headers,
- apr_pool_t *pool);
-
-extern const ne_propname svn_ra_neon__vcc_prop;
-extern const ne_propname svn_ra_neon__checked_in_prop;
-
-
-/* send an OPTIONS request to fetch the activity-collection-set */
-svn_error_t *
-svn_ra_neon__get_activity_collection(const svn_string_t **activity_coll,
- svn_ra_neon__session_t *ras,
- apr_pool_t *pool);
-
-
-/* Call ne_set_request_body_pdovider on REQ with a provider function
- * that pulls data from BODY_FILE.
- */
-svn_error_t *svn_ra_neon__set_neon_body_provider(svn_ra_neon__request_t *req,
- apr_file_t *body_file);
-
-
-#define SVN_RA_NEON__DEPTH_ZERO 0
-#define SVN_RA_NEON__DEPTH_ONE 1
-#define SVN_RA_NEON__DEPTH_INFINITE -1
-/* Add a 'Depth' header to a hash of headers.
- *
- * DEPTH is one of the above defined SVN_RA_NEON__DEPTH_* values.
- */
-void
-svn_ra_neon__add_depth_header(apr_hash_t *extra_headers, int depth);
-
-/** Find a given element in the table of elements.
- *
- * The table of XML elements @a table is searched until element identified by
- * namespace @a nspace and name @a name is found. If no elements are found,
- * tries to find and return element identified by @c ELEM_unknown. If that is
- * not found, returns NULL pointer. */
-const svn_ra_neon__xml_elm_t *
-svn_ra_neon__lookup_xml_elem(const svn_ra_neon__xml_elm_t *table,
- const char *nspace,
- const char *name);
-
-
-
-/* Collect CDATA into a stringbuf.
- *
- * BATON points to a struct of which the first element is
- * assumed to be an svn_stringbuf_t *.
- */
-svn_error_t *
-svn_ra_neon__xml_collect_cdata(void *baton, int state,
- const char *cdata, size_t len);
-
-
-/* Our equivalent of ne_xml_startelm_cb, the difference being that it
- * returns errors in a svn_error_t, and returns the element type via
- * ELEM. To ignore the element *ELEM should be set to
- * SVN_RA_NEON__XML_DECLINE and SVN_NO_ERROR should be returned.
- * *ELEM can be set to SVN_RA_NEON__XML_INVALID to indicate invalid XML
- * (and abort the parse).
- */
-typedef svn_error_t * (*svn_ra_neon__startelm_cb_t)(int *elem,
- void *baton,
- int parent,
- const char *nspace,
- const char *name,
- const char **atts);
-
-/* Our equivalent of ne_xml_cdata_cb, the difference being that it returns
- * errors in a svn_error_t.
- */
-typedef svn_error_t * (*svn_ra_neon__cdata_cb_t)(void *baton,
- int state,
- const char *cdata,
- size_t len);
-
-/* Our equivalent of ne_xml_endelm_cb, the difference being that it returns
- * errors in a svn_error_t.
- */
-typedef svn_error_t * (*svn_ra_neon__endelm_cb_t)(void *baton,
- int state,
- const char *nspace,
- const char *name);
-
-
-/* Create a Neon xml parser with callbacks STARTELM_CB, ENDELM_CB and
- * CDATA_CB. The created parser wraps the Neon callbacks and marshals any
- * errors returned by the callbacks through the Neon layer. Any errors
- * raised will be returned by svn_ra_neon__request_dispatch() unless
- * an earlier error occurred.
- *
- * Register a pool cleanup on the pool of REQ to clean up any allocated
- * Neon resources.
- *
- * Return the new parser. Also attach it to REQ if ACCPT is non-null.
- * ACCPT indicates whether the parser wants to read the response body
- * or not. Pass NULL for ACCPT when you don't want the returned parser
- * to be attached to REQ.
- */
-ne_xml_parser *
-svn_ra_neon__xml_parser_create(svn_ra_neon__request_t *req,
- ne_accept_response accpt,
- svn_ra_neon__startelm_cb_t startelm_cb,
- svn_ra_neon__cdata_cb_t cdata_cb,
- svn_ra_neon__endelm_cb_t endelm_cb,
- void *baton);
-
-/* Send a METHOD request (e.g., "MERGE", "REPORT", "PROPFIND") to URL
- * in session SESS, and parse the response. If BODY is non-null, it is
- * the body of the request, else use the contents of file BODY_FILE
- * as the body.
- *
- * STARTELM_CB, CDATA_CB and ENDELM_CB are start element, cdata and end
- * element handlers, respectively. BATON is passed to each as userdata.
- *
- * SET_PARSER is a callback function which, if non-NULL, is called
- * with the XML parser and BATON. This is useful for providers of
- * validation and element handlers which require access to the parser.
- *
- * EXTRA_HEADERS is a hash of (const char *) key/value pairs to be
- * inserted as extra headers in the request. Can be NULL.
- *
- * STATUS_CODE is an optional 'out' parameter; if non-NULL, then set
- * *STATUS_CODE to the http status code returned by the server. This
- * can be set to a useful value even when the function returns an error
- * however it is not always set when an error is returned. So any caller
- * wishing to check *STATUS_CODE when an error has been returned must
- * initialise *STATUS_CODE before calling the function.
- *
- * If SPOOL_RESPONSE is set, the request response will be cached to
- * disk in a tmpfile (in full), then read back and parsed.
- *
- * Use POOL for any temporary allocation.
- */
-svn_error_t *
-svn_ra_neon__parsed_request(svn_ra_neon__session_t *sess,
- const char *method,
- const char *url,
- const char *body,
- apr_file_t *body_file,
- void set_parser(ne_xml_parser *parser,
- void *baton),
- svn_ra_neon__startelm_cb_t startelm_cb,
- svn_ra_neon__cdata_cb_t cdata_cb,
- svn_ra_neon__endelm_cb_t endelm_cb,
- void *baton,
- apr_hash_t *extra_headers,
- int *status_code,
- svn_boolean_t spool_response,
- apr_pool_t *pool);
-
-
-/* If XML_PARSER found an XML parse error, then return a Subversion error
- * saying that the error was found in the response to the DAV request METHOD
- * for the URL URL. Otherwise, return SVN_NO_ERROR. */
-svn_error_t *
-svn_ra_neon__check_parse_error(const char *method,
- ne_xml_parser *xml_parser,
- const char *url);
-
-/* ### Related to svn_ra_neon__xml_elmid? */
-/* ### add SVN_RA_NEON_ to these to prefix conflicts with (sys) headers? */
-enum {
- /* Redefine Neon elements */
- /* With the new API, we need to be able to use element id also as a return
- * value from the new `startelm' callback, hence all element ids must be
- * positive. Root element id is the only id that is not positive, it's zero.
- * `Root state' is never returned by a callback, it's only passed into it.
- * Therefore, negative element ids are forbidden from now on. */
- ELEM_unknown = 1, /* was (-1), see above why it's (1) now */
- ELEM_root = NE_XML_STATEROOT, /* (0) */
- ELEM_UNUSED = 100,
- ELEM_207_first = ELEM_UNUSED,
- ELEM_multistatus = ELEM_207_first,
- ELEM_response = ELEM_207_first + 1,
- ELEM_responsedescription = ELEM_207_first + 2,
- ELEM_href = ELEM_207_first + 3,
- ELEM_propstat = ELEM_207_first + 4,
- ELEM_prop = ELEM_207_first + 5, /* `prop' tag in the DAV namespace */
- ELEM_status = ELEM_207_first + 6,
- ELEM_207_UNUSED = ELEM_UNUSED + 100,
- ELEM_PROPS_UNUSED = ELEM_207_UNUSED + 100,
-
- /* DAV elements */
- ELEM_activity_coll_set = ELEM_207_UNUSED,
- ELEM_baseline,
- ELEM_baseline_coll,
- ELEM_checked_in,
- ELEM_collection,
- ELEM_comment,
- ELEM_revprop,
- ELEM_creationdate,
- ELEM_creator_displayname,
- ELEM_ignored_set,
- ELEM_merge_response,
- ELEM_merged_set,
- ELEM_options_response,
- ELEM_set_prop,
- ELEM_remove_prop,
- ELEM_resourcetype,
- ELEM_get_content_length,
- ELEM_updated_set,
- ELEM_vcc,
- ELEM_version_name,
- ELEM_post_commit_err,
- ELEM_error,
-
- /* SVN elements */
- ELEM_absent_directory,
- ELEM_absent_file,
- ELEM_add_directory,
- ELEM_add_file,
- ELEM_baseline_relpath,
- ELEM_md5_checksum,
- ELEM_deleted_path, /* used in log reports */
- ELEM_replaced_path, /* used in log reports */
- ELEM_added_path, /* used in log reports */
- ELEM_modified_path, /* used in log reports */
- ELEM_delete_entry,
- ELEM_fetch_file,
- ELEM_fetch_props,
- ELEM_txdelta,
- ELEM_log_date,
- ELEM_log_item,
- ELEM_log_report,
- ELEM_open_directory,
- ELEM_open_file,
- ELEM_target_revision,
- ELEM_update_report,
- ELEM_resource_walk,
- ELEM_resource,
- ELEM_SVN_prop, /* `prop' tag in the Subversion namespace */
- ELEM_dated_rev_report,
- ELEM_name_version_name,
- ELEM_name_creationdate,
- ELEM_name_creator_displayname,
- ELEM_svn_error,
- ELEM_human_readable,
- ELEM_repository_uuid,
- ELEM_get_locations_report,
- ELEM_location,
- ELEM_get_location_segments_report,
- ELEM_location_segment,
- ELEM_file_revs_report,
- ELEM_file_rev,
- ELEM_rev_prop,
- ELEM_get_locks_report,
- ELEM_lock,
- ELEM_lock_path,
- ELEM_lock_token,
- ELEM_lock_owner,
- ELEM_lock_comment,
- ELEM_lock_creationdate,
- ELEM_lock_expirationdate,
- ELEM_lock_discovery,
- ELEM_lock_activelock,
- ELEM_lock_type,
- ELEM_lock_scope,
- ELEM_lock_depth,
- ELEM_lock_timeout,
- ELEM_editor_report,
- ELEM_open_root,
- ELEM_apply_textdelta,
- ELEM_change_file_prop,
- ELEM_change_dir_prop,
- ELEM_close_file,
- ELEM_close_directory,
- ELEM_deadprop_count,
- ELEM_mergeinfo_report,
- ELEM_mergeinfo_item,
- ELEM_mergeinfo_path,
- ELEM_mergeinfo_info,
- ELEM_has_children,
- ELEM_merged_revision,
- ELEM_deleted_rev_report,
- ELEM_subtractive_merge
-};
-
-/* ### docco */
-svn_error_t * svn_ra_neon__merge_activity(svn_revnum_t *new_rev,
- const char **committed_date,
- const char **committed_author,
- const char **post_commit_err,
- svn_ra_neon__session_t *ras,
- const char *repos_url,
- const char *activity_url,
- apr_hash_t *valid_targets,
- apr_hash_t *lock_tokens,
- svn_boolean_t keep_locks,
- svn_boolean_t disable_merge_response,
- apr_pool_t *pool);
-
-
-/* Make a buffer for repeated use with svn_stringbuf_set().
- ### it would be nice to start this buffer with N bytes, but there isn't
- ### really a way to do that in the string interface (yet), short of
- ### initializing it with a fake string (and copying it) */
-#define MAKE_BUFFER(p) svn_stringbuf_ncreate("", 0, (p))
-
-svn_error_t *
-svn_ra_neon__copy_href(svn_stringbuf_t *dst, const char *src,
- apr_pool_t *pool);
-
-
-
-/* If RAS contains authentication info, attempt to store it via client
- callbacks and using POOL for temporary allocations. */
-svn_error_t *
-svn_ra_neon__maybe_store_auth_info(svn_ra_neon__session_t *ras,
- apr_pool_t *pool);
-
-
-/* Like svn_ra_neon__maybe_store_auth_info(), but conditional on ERR.
-
- Attempt to store auth info only if ERR is NULL or if ERR->apr_err
- is not SVN_ERR_RA_NOT_AUTHORIZED. If ERR is not null, return it no
- matter what, otherwise return the result of the attempt (if any) to
- store auth info, else return SVN_NO_ERROR. */
-svn_error_t *
-svn_ra_neon__maybe_store_auth_info_after_result(svn_error_t *err,
- svn_ra_neon__session_t *ras,
- apr_pool_t *pool);
-
-
-/* Create an error of type SVN_ERR_RA_DAV_MALFORMED_DATA for cases where
- we receive an element we didn't expect to see. */
-#define UNEXPECTED_ELEMENT(ns, elem) \
- (ns ? svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, \
- NULL, \
- _("Got unexpected element %s:%s"), \
- ns, \
- elem) \
- : svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, \
- NULL, \
- _("Got unexpected element %s"), \
- elem))
-
-/* Create an error of type SVN_ERR_RA_DAV_MALFORMED_DATA for cases where
- we don't receive a necessary attribute. */
-#define MISSING_ATTR(ns, elem, attr) \
- (ns ? svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, \
- NULL, \
- _("Missing attribute '%s' on element %s:%s"), \
- attr, \
- ns, \
- elem) \
- : svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, \
- NULL, \
- _("Missing attribute '%s' on element %s"), \
- attr, \
- elem))
-
-/* Given a REQUEST, run it; if CODE_P is
- non-null, return the http status code in *CODE_P. Return any
- resulting error (from Neon, a <D:error> body response, or any
- non-2XX status code) as an svn_error_t, otherwise return SVN_NO_ERROR.
-
- EXTRA_HEADERS is a hash with (key -> value) of
- (const char * -> const char *) where the key is the HTTP header name.
-
- BODY is a null terminated string containing an in-memory request
- body. Use svn_ra_neon__set_neon_body_provider() if you want the
- request body to be read from a file. For requests which have no
- body at all, consider passing the empty string ("") instead of
- NULL, as this will cause Neon to generate a "Content-Length: 0"
- header (which is important to some proxies).
-
- OKAY_1 and OKAY_2 are the "acceptable" result codes. Anything
- other than one of these will generate an error. OKAY_1 should
- always be specified (e.g. as 200); use 0 for OKAY_2 if additional
- result codes aren't allowed. */
-svn_error_t *
-svn_ra_neon__request_dispatch(int *code_p,
- svn_ra_neon__request_t *request,
- apr_hash_t *extra_headers,
- const char *body,
- int okay_1,
- int okay_2,
- apr_pool_t *pool);
-
-/* A layer over SVN_RA_NEON__REQUEST_DISPATCH() adding a
- 207 response parser to extract relevant (error) information.
-
- Don't use this function if you're expecting 207 as a valid response.
-
- BODY may be NULL if the request doesn't have a body. */
-svn_error_t *
-svn_ra_neon__simple_request(int *code,
- svn_ra_neon__session_t *ras,
- const char *method,
- const char *url,
- apr_hash_t *extra_headers,
- const char *body,
- int okay_1,
- int okay_2,
- apr_pool_t *pool);
-
-/* Convenience statement macro for setting headers in a hash */
-#define svn_ra_neon__set_header(hash, hdr, val) \
- apr_hash_set((hash), (hdr), APR_HASH_KEY_STRING, (val))
-
-
-/* Helper function layered over SVN_RA_NEON__SIMPLE_REQUEST() to issue
- a HTTP COPY request.
-
- DEPTH is one of the SVN_RA_NEON__DEPTH_* constants. */
-svn_error_t *
-svn_ra_neon__copy(svn_ra_neon__session_t *ras,
- svn_boolean_t overwrite,
- int depth,
- const char *src,
- const char *dst,
- apr_pool_t *pool);
-
-/* Return the Location HTTP header or NULL if none was sent.
- * (Return a canonical URL even if the header ended with a slash.)
- *
- * Do allocations in POOL.
- */
-const char *
-svn_ra_neon__request_get_location(svn_ra_neon__request_t *request,
- apr_pool_t *pool);
-
-
-/*
- * Implements the get_locations RA layer function. */
-svn_error_t *
-svn_ra_neon__get_locations(svn_ra_session_t *session,
- apr_hash_t **locations,
- const char *path,
- svn_revnum_t peg_revision,
- const apr_array_header_t *location_revisions,
- apr_pool_t *pool);
-
-
-/*
- * Implements the get_location_segments RA layer function. */
-svn_error_t *
-svn_ra_neon__get_location_segments(svn_ra_session_t *session,
- const char *path,
- svn_revnum_t peg_revision,
- svn_revnum_t start_rev,
- svn_revnum_t end_rev,
- svn_location_segment_receiver_t receiver,
- void *receiver_baton,
- apr_pool_t *pool);
-
-/*
- * Implements the get_locks RA layer function. */
-svn_error_t *
-svn_ra_neon__get_locks(svn_ra_session_t *session,
- apr_hash_t **locks,
- const char *path,
- svn_depth_t depth,
- apr_pool_t *pool);
-
-/*
- * Implements the lock RA layer function. */
-svn_error_t *
-svn_ra_neon__lock(svn_ra_session_t *session,
- apr_hash_t *path_revs,
- const char *comment,
- svn_boolean_t force,
- svn_ra_lock_callback_t lock_func,
- void *lock_baton,
- apr_pool_t *pool);
-
-/*
- * Implements the unlock RA layer function. */
-svn_error_t *
-svn_ra_neon__unlock(svn_ra_session_t *session,
- apr_hash_t *path_tokens,
- svn_boolean_t force,
- svn_ra_lock_callback_t lock_func,
- void *lock_baton,
- apr_pool_t *pool);
-
-/*
- * Internal implementation of get_lock RA layer function. */
-svn_error_t *
-svn_ra_neon__get_lock_internal(svn_ra_neon__session_t *session,
- svn_lock_t **lock,
- const char *path,
- apr_pool_t *pool);
-
-/*
- * Implements the get_lock RA layer function. */
-svn_error_t *
-svn_ra_neon__get_lock(svn_ra_session_t *session,
- svn_lock_t **lock,
- const char *path,
- apr_pool_t *pool);
-
-/*
- * Implements the replay RA layer function. */
-svn_error_t *
-svn_ra_neon__replay(svn_ra_session_t *session,
- svn_revnum_t revision,
- svn_revnum_t low_water_mark,
- svn_boolean_t send_deltas,
- const svn_delta_editor_t *editor,
- void *edit_baton,
- apr_pool_t *pool);
-
-/*
- * Implements the replay_range RA layer function. */
-svn_error_t *
-svn_ra_neon__replay_range(svn_ra_session_t *session,
- svn_revnum_t start_revision,
- svn_revnum_t end_revision,
- svn_revnum_t low_water_mark,
- svn_boolean_t send_deltas,
- svn_ra_replay_revstart_callback_t revstart_func,
- svn_ra_replay_revfinish_callback_t revfinish_func,
- void *replay_baton,
- apr_pool_t *pool);
-
-/*
- * Implements the has_capability RA layer function. */
-svn_error_t *
-svn_ra_neon__has_capability(svn_ra_session_t *session,
- svn_boolean_t *has,
- const char *capability,
- apr_pool_t *pool);
-
-/* Exchange capabilities with the server, by sending an OPTIONS
- request announcing the client's capabilities, and by filling
- RAS->capabilities with the server's capabilities as read from the
- response headers. Use POOL only for temporary allocation.
-
- If the RELOCATION_LOCATION is non-NULL, allow the OPTIONS response
- to report a server-dictated redirect or relocation (HTTP 301 or 302
- error codes), setting *RELOCATION_LOCATION to the value of the
- corrected repository URL. Otherwise, such responses from the
- server will generate an error. (In either case, no capabilities are
- exchanged if there is, in fact, such a response from the server.)
-
- If the server is kind enough to tell us the current youngest
- revision of the target repository, set *YOUNGEST_REV to that value;
- set it to SVN_INVALID_REVNUM otherwise. YOUNGEST_REV may be NULL if
- the caller is not interested in receiving this information.
-
- NOTE: This function also expects the server to announce the
- activity collection. */
-svn_error_t *
-svn_ra_neon__exchange_capabilities(svn_ra_neon__session_t *ras,
- const char **relocation_location,
- svn_revnum_t *youngest_rev,
- apr_pool_t *pool);
-
-/*
- * Implements the get_deleted_rev RA layer function. */
-svn_error_t *
-svn_ra_neon__get_deleted_rev(svn_ra_session_t *session,
- const char *path,
- svn_revnum_t peg_revision,
- svn_revnum_t end_revision,
- svn_revnum_t *revision_deleted,
- apr_pool_t *pool);
-
-/* Helper function. Loop over LOCK_TOKENS and assemble all keys and
- values into a stringbuf allocated in POOL. The string will be of
- the form
-
- <S:lock-token-list xmlns:S="svn:">
- <S:lock>
- <S:lock-path>path</S:lock-path>
- <S:lock-token>token</S:lock-token>
- </S:lock>
- [...]
- </S:lock-token-list>
-
- Callers can then send this in the request bodies, as a way of
- reliably marshalling potentially unbounded lists of locks. (We do
- this because httpd has limits on how much data can be sent in 'If:'
- headers.)
- */
-svn_error_t *
-svn_ra_neon__assemble_locktoken_body(svn_stringbuf_t **body,
- apr_hash_t *lock_tokens,
- apr_pool_t *pool);
-
-
-/* Wrapper around ne_uri_unparse(). Turns a URI structure back into a string.
- * The returned string is allocated in POOL. */
-const char *
-svn_ra_neon__uri_unparse(const ne_uri *uri,
- apr_pool_t *pool);
-
-/* Sets *SUPPORTS_DEADPROP_COUNT to non-zero if server supports
- * deadprop-count property. Uses FINAL_URL to discover this informationn
- * if it is not already cached. */
-svn_error_t *
-svn_ra_neon__get_deadprop_count_support(svn_boolean_t *supported,
- svn_ra_neon__session_t *ras,
- const char *final_url,
- apr_pool_t *pool);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* SVN_LIBSVN_RA_NEON_H */
diff --git a/subversion/libsvn_ra_neon/replay.c b/subversion/libsvn_ra_neon/replay.c
deleted file mode 100644
index 828cdcf..0000000
--- a/subversion/libsvn_ra_neon/replay.c
+++ /dev/null
@@ -1,508 +0,0 @@
-/*
- * replay.c : routines for replaying revisions
- *
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- * ====================================================================
- */
-
-#include "svn_base64.h"
-#include "svn_pools.h"
-#include "svn_xml.h"
-
-#include "private/svn_string_private.h"
-
-#include "../libsvn_ra/ra_loader.h"
-
-#include "ra_neon.h"
-
-typedef struct replay_baton_t {
- /* The underlying editor and baton we're replaying into. */
- const svn_delta_editor_t *editor;
- void *edit_baton;
-
- /* Parent pool for the whole reply. */
- apr_pool_t *pool;
-
- /* Stack of in progress directories, holds dir_item_t objects. */
- apr_array_header_t *dirs;
-
- /* Cached file baton so we can pass it between the add/open file and
- * apply textdelta portions of the editor drive. */
- void *file_baton;
-
- /* Variables required to decode and apply our svndiff data off the wire. */
- svn_txdelta_window_handler_t whandler;
- void *whandler_baton;
- svn_stream_t *svndiff_decoder;
- svn_stream_t *base64_decoder;
-
- /* A scratch pool used to allocate property data. */
- apr_pool_t *prop_pool;
-
- /* The name of a property that's being modified. */
- const char *prop_name;
-
- /* A stringbuf that holds the contents of a property being changed, if this
- * is NULL it means that the property is being deleted. */
- svn_stringbuf_t *prop_accum;
-} replay_baton_t;
-
-#define TOP_DIR(rb) (APR_ARRAY_IDX((rb)->dirs, (rb)->dirs->nelts - 1, \
- dir_item_t))
-
-/* Info about a given directory we've seen. */
-typedef struct dir_item_t {
- void *baton;
- const char *path;
- apr_pool_t *pool;
- apr_pool_t *file_pool;
-} dir_item_t;
-
-static void
-push_dir(replay_baton_t *rb, void *baton, const char *path, apr_pool_t *pool)
-{
- dir_item_t *di = apr_array_push(rb->dirs);
-
- di->baton = baton;
- di->path = apr_pstrdup(pool, path);
- di->pool = pool;
- di->file_pool = svn_pool_create(pool);
-}
-
-static const svn_ra_neon__xml_elm_t editor_report_elements[] =
-{
- { SVN_XML_NAMESPACE, "editor-report", ELEM_editor_report, 0 },
- { SVN_XML_NAMESPACE, "target-revision", ELEM_target_revision, 0 },
- { SVN_XML_NAMESPACE, "open-root", ELEM_open_root, 0 },
- { SVN_XML_NAMESPACE, "delete-entry", ELEM_delete_entry, 0 },
- { SVN_XML_NAMESPACE, "open-directory", ELEM_open_directory, 0 },
- { SVN_XML_NAMESPACE, "add-directory", ELEM_add_directory, 0 },
- { SVN_XML_NAMESPACE, "open-file", ELEM_open_file, 0 },
- { SVN_XML_NAMESPACE, "add-file", ELEM_add_file, 0 },
- { SVN_XML_NAMESPACE, "close-file", ELEM_close_file, 0 },
- { SVN_XML_NAMESPACE, "close-directory", ELEM_close_directory, 0 },
- { SVN_XML_NAMESPACE, "apply-textdelta", ELEM_apply_textdelta, 0 },
- { SVN_XML_NAMESPACE, "change-file-prop", ELEM_change_file_prop, 0 },
- { SVN_XML_NAMESPACE, "change-dir-prop", ELEM_change_dir_prop, 0 },
- { NULL }
-};
-
-static svn_error_t *
-start_element(int *elem, void *baton, int parent_state, const char *nspace,
- const char *elt_name, const char **atts)
-{
- replay_baton_t *rb = baton;
-
- const svn_ra_neon__xml_elm_t *elm
- = svn_ra_neon__lookup_xml_elem(editor_report_elements, nspace, elt_name);
-
- if (! elm)
- {
- *elem = NE_XML_DECLINE;
- return SVN_NO_ERROR;
- }
-
- if (parent_state == ELEM_root)
- {
- /* If we're at the root of the tree, the element has to be the editor
- * report itself. */
- if (elm->id != ELEM_editor_report)
- return UNEXPECTED_ELEMENT(nspace, elt_name);
- }
- else if (parent_state != ELEM_editor_report)
- {
- /* If we're not at the root, our parent has to be the editor report,
- * since we don't actually nest any elements. */
- return UNEXPECTED_ELEMENT(nspace, elt_name);
- }
-
- switch (elm->id)
- {
- case ELEM_target_revision:
- {
- const char *crev = svn_xml_get_attr_value("rev", atts);
- if (! crev)
- return MISSING_ATTR(nspace, elt_name, "rev");
- else
- return rb->editor->set_target_revision(rb->edit_baton,
- SVN_STR_TO_REV(crev),
- rb->pool);
- }
- break;
-
- case ELEM_open_root:
- {
- const char *crev = svn_xml_get_attr_value("rev", atts);
-
- if (! crev)
- return MISSING_ATTR(nspace, elt_name, "rev");
- else
- {
- apr_pool_t *subpool = svn_pool_create(rb->pool);
- void *dir_baton;
- SVN_ERR(rb->editor->open_root(rb->edit_baton,
- SVN_STR_TO_REV(crev), subpool,
- &dir_baton));
- push_dir(rb, dir_baton, "", subpool);
- }
- }
- break;
-
- case ELEM_delete_entry:
- {
- const char *path = svn_xml_get_attr_value("name", atts);
- const char *crev = svn_xml_get_attr_value("rev", atts);
-
- if (! path)
- return MISSING_ATTR(nspace, elt_name, "name");
- else if (! crev)
- return MISSING_ATTR(nspace, elt_name, "rev");
- else
- {
- dir_item_t *di = &TOP_DIR(rb);
-
- SVN_ERR(rb->editor->delete_entry(path, SVN_STR_TO_REV(crev),
- di->baton, di->pool));
- }
- }
- break;
-
- case ELEM_open_directory:
- case ELEM_add_directory:
- {
- const char *crev = svn_xml_get_attr_value("rev", atts);
- const char *name = svn_xml_get_attr_value("name", atts);
-
- if (! name)
- return MISSING_ATTR(nspace, elt_name, "name");
- else
- {
- dir_item_t *parent = &TOP_DIR(rb);
- apr_pool_t *subpool = svn_pool_create(parent->pool);
- svn_revnum_t rev;
- void *dir_baton;
-
- if (crev)
- rev = SVN_STR_TO_REV(crev);
- else
- rev = SVN_INVALID_REVNUM;
-
- if (elm->id == ELEM_open_directory)
- SVN_ERR(rb->editor->open_directory(name, parent->baton,
- rev, subpool, &dir_baton));
- else if (elm->id == ELEM_add_directory)
- {
- const char *cpath = svn_xml_get_attr_value("copyfrom-path",
- atts);
-
- crev = svn_xml_get_attr_value("copyfrom-rev", atts);
-
- if (crev)
- rev = SVN_STR_TO_REV(crev);
- else
- rev = SVN_INVALID_REVNUM;
-
- SVN_ERR(rb->editor->add_directory(name, parent->baton,
- cpath, rev, subpool,
- &dir_baton));
- }
- else
- SVN_ERR_MALFUNCTION();
-
- push_dir(rb, dir_baton, name, subpool);
- }
- }
- break;
-
- case ELEM_open_file:
- case ELEM_add_file:
- {
- const char *path = svn_xml_get_attr_value("name", atts);
- svn_revnum_t rev;
-
- dir_item_t *parent = &TOP_DIR(rb);
-
- if (! path)
- return MISSING_ATTR(nspace, elt_name, "name");
-
- svn_pool_clear(parent->file_pool);
-
- if (elm->id == ELEM_add_file)
- {
- const char *cpath = svn_xml_get_attr_value("copyfrom-path", atts);
- const char *crev = svn_xml_get_attr_value("copyfrom-rev", atts);
-
- if (crev)
- rev = SVN_STR_TO_REV(crev);
- else
- rev = SVN_INVALID_REVNUM;
-
- SVN_ERR(rb->editor->add_file(path, parent->baton, cpath, rev,
- parent->file_pool, &rb->file_baton));
- }
- else
- {
- const char *crev = svn_xml_get_attr_value("rev", atts);
-
- if (crev)
- rev = SVN_STR_TO_REV(crev);
- else
- rev = SVN_INVALID_REVNUM;
-
- SVN_ERR(rb->editor->open_file(path, parent->baton, rev,
- parent->file_pool,
- &rb->file_baton));
- }
- }
- break;
-
- case ELEM_apply_textdelta:
- if (! rb->file_baton)
- return svn_error_create
- (SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Got apply-textdelta element without preceding "
- "add-file or open-file"));
- else
- {
- const char *checksum = svn_xml_get_attr_value("checksum", atts);
-
- SVN_ERR(rb->editor->apply_textdelta(rb->file_baton,
- checksum,
- TOP_DIR(rb).file_pool,
- &rb->whandler,
- &rb->whandler_baton));
-
- rb->svndiff_decoder = svn_txdelta_parse_svndiff
- (rb->whandler, rb->whandler_baton,
- TRUE, TOP_DIR(rb).file_pool);
- rb->base64_decoder = svn_base64_decode(rb->svndiff_decoder,
- TOP_DIR(rb).file_pool);
- }
- break;
-
- case ELEM_close_file:
- if (! rb->file_baton)
- return svn_error_create
- (SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Got close-file element without preceding "
- "add-file or open-file"));
- else
- {
- const char *checksum = svn_xml_get_attr_value("checksum", atts);
-
- SVN_ERR(rb->editor->close_file(rb->file_baton,
- checksum,
- TOP_DIR(rb).file_pool));
- rb->file_baton = NULL;
- }
- break;
-
- case ELEM_close_directory:
- if (rb->dirs->nelts == 0)
- return svn_error_create
- (SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Got close-directory element without ever opening "
- "a directory"));
- else
- {
- dir_item_t *di = &TOP_DIR(rb);
-
- SVN_ERR(rb->editor->close_directory(di->baton, di->pool));
-
- svn_pool_destroy(di->pool);
-
- apr_array_pop(rb->dirs);
- }
- break;
-
- case ELEM_change_file_prop:
- case ELEM_change_dir_prop:
- {
- const char *name = svn_xml_get_attr_value("name", atts);
-
- if (! name)
- return MISSING_ATTR(nspace, elt_name, "name");
- else
- {
- svn_pool_clear(rb->prop_pool);
-
- if (svn_xml_get_attr_value("del", atts))
- rb->prop_accum = NULL;
- else
- rb->prop_accum = svn_stringbuf_create("", rb->prop_pool);
-
- rb->prop_name = apr_pstrdup(rb->prop_pool, name);
- }
- }
- break;
- }
-
- *elem = elm->id;
-
- return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-end_element(void *baton, int state, const char *nspace, const char *elt_name)
-{
- replay_baton_t *rb = baton;
-
- const svn_ra_neon__xml_elm_t *elm
- = svn_ra_neon__lookup_xml_elem(editor_report_elements, nspace, elt_name);
-
- if (! elm)
- return SVN_NO_ERROR;
-
- switch (elm->id)
- {
- case ELEM_editor_report:
- if (rb->dirs->nelts)
- svn_pool_destroy(APR_ARRAY_IDX(rb->dirs, 0, dir_item_t).pool);
-
- return SVN_NO_ERROR;
- break;
-
- case ELEM_apply_textdelta:
- SVN_ERR(svn_stream_close(rb->base64_decoder));
-
- rb->whandler = NULL;
- rb->whandler_baton = NULL;
- rb->svndiff_decoder = NULL;
- rb->base64_decoder = NULL;
- break;
-
- case ELEM_change_file_prop:
- case ELEM_change_dir_prop:
- {
- const svn_string_t *decoded_value;
-
- if (rb->prop_accum)
- {
- const svn_string_t *prop;
-
- prop = svn_stringbuf__morph_into_string(rb->prop_accum);
- decoded_value = svn_base64_decode_string(prop, rb->prop_pool);
- }
- else
- decoded_value = NULL; /* It's a delete */
-
- if (elm->id == ELEM_change_dir_prop)
- SVN_ERR(rb->editor->change_dir_prop(TOP_DIR(rb).baton,
- rb->prop_name,
- decoded_value,
- TOP_DIR(rb).pool));
- else
- SVN_ERR(rb->editor->change_file_prop(rb->file_baton,
- rb->prop_name,
- decoded_value,
- TOP_DIR(rb).file_pool));
- }
- break;
-
- default:
- break;
- }
-
- return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-cdata_handler(void *baton, int state, const char *cdata, size_t len)
-{
- replay_baton_t *rb = baton;
- apr_size_t nlen = len;
-
- switch (state)
- {
- case ELEM_apply_textdelta:
- SVN_ERR(svn_stream_write(rb->base64_decoder, cdata, &nlen));
- if (nlen != len)
- return svn_error_createf
- (SVN_ERR_STREAM_UNEXPECTED_EOF, NULL,
- _("Error writing stream: unexpected EOF"));
- break;
-
- case ELEM_change_dir_prop:
- case ELEM_change_file_prop:
- if (! rb->prop_accum)
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Got cdata content for a prop delete"));
- else
- svn_stringbuf_appendbytes(rb->prop_accum, cdata, len);
- break;
- }
-
- return SVN_NO_ERROR;
-}
-
-svn_error_t *
-svn_ra_neon__replay(svn_ra_session_t *session,
- svn_revnum_t revision,
- svn_revnum_t low_water_mark,
- svn_boolean_t send_deltas,
- const svn_delta_editor_t *editor,
- void *edit_baton,
- apr_pool_t *pool)
-{
- svn_ra_neon__session_t *ras = session->priv;
- replay_baton_t rb;
-
- const char *body
- = apr_psprintf(pool,
- "<S:replay-report xmlns:S=\"svn:\">\n"
- " <S:revision>%ld</S:revision>\n"
- " <S:low-water-mark>%ld</S:low-water-mark>\n"
- " <S:send-deltas>%d</S:send-deltas>\n"
- "</S:replay-report>",
- revision, low_water_mark, send_deltas);
-
- memset(&rb, 0, sizeof(rb));
-
- rb.editor = editor;
- rb.edit_baton = edit_baton;
- rb.pool = pool;
- rb.dirs = apr_array_make(pool, 5, sizeof(dir_item_t));
- rb.prop_pool = svn_pool_create(pool);
- rb.prop_accum = svn_stringbuf_create("", rb.prop_pool);
-
- return svn_ra_neon__parsed_request(ras, "REPORT", ras->url->data, body,
- NULL, NULL,
- start_element,
- cdata_handler,
- end_element,
- &rb,
- NULL, /* extra headers */
- NULL, /* status code */
- FALSE, /* spool response */
- pool);
-}
-
-svn_error_t *
-svn_ra_neon__replay_range(svn_ra_session_t *session,
- svn_revnum_t start_revision,
- svn_revnum_t end_revision,
- svn_revnum_t low_water_mark,
- svn_boolean_t send_deltas,
- svn_ra_replay_revstart_callback_t revstart_func,
- svn_ra_replay_revfinish_callback_t revfinish_func,
- void *replay_baton,
- apr_pool_t *pool)
-{
- return svn_error_create(SVN_ERR_RA_NOT_IMPLEMENTED, NULL, NULL);
-}
diff --git a/subversion/libsvn_ra_neon/session.c b/subversion/libsvn_ra_neon/session.c
deleted file mode 100644
index 3c8305f..0000000
--- a/subversion/libsvn_ra_neon/session.c
+++ /dev/null
@@ -1,1274 +0,0 @@
-/*
- * session.c : routines for maintaining sessions state (to the DAV server)
- *
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- * ====================================================================
- */
-
-
-
-#include <ctype.h>
-
-#define APR_WANT_STRFUNC
-#include <apr_want.h>
-#include <apr_general.h>
-#include <apr_xml.h>
-
-#include <ne_auth.h>
-
-#include "svn_error.h"
-#include "svn_pools.h"
-#include "svn_ra.h"
-#include "../libsvn_ra/ra_loader.h"
-#include "svn_config.h"
-#include "svn_delta.h"
-#include "svn_version.h"
-#include "svn_path.h"
-#include "svn_time.h"
-#include "svn_xml.h"
-#include "svn_private_config.h"
-#include "private/svn_atomic.h"
-
-#ifdef SVN_NEON_0_28
-#include <ne_pkcs11.h>
-#endif
-
-#include "ra_neon.h"
-
-#define DEFAULT_HTTP_TIMEOUT 3600
-
-static svn_atomic_t neon_initialized = 0;
-
-
-/* a cleanup routine attached to the pool that contains the RA session
- baton. */
-static apr_status_t cleanup_session(void *sess)
-{
- ne_session_destroy(sess);
- return APR_SUCCESS;
-}
-
-/* a cleanup routine attached to the pool that contains the RA session
- root URI. */
-static apr_status_t cleanup_uri(void *uri)
-{
- ne_uri_free(uri);
- return APR_SUCCESS;
-}
-
-#ifdef SVN_NEON_0_28
-/* a cleanup routine attached to the pool that contains the PKCS#11
- provider object. */
-static apr_status_t cleanup_p11provider(void *provider)
-{
- ne_ssl_pkcs11_provider *prov = provider;
- ne_ssl_pkcs11_provider_destroy(prov);
- return APR_SUCCESS;
-}
-#endif
-
-/* A neon-session callback to 'pull' authentication data when
- challenged. In turn, this routine 'pulls' the data from the client
- callbacks if needed. */
-static int request_auth(void *userdata, const char *realm, int attempt,
- char *username, char *password)
-{
- svn_error_t *err;
- svn_ra_neon__session_t *ras = userdata;
- void *creds;
- svn_auth_cred_simple_t *simple_creds;
-
- /* Start by marking the current credentials invalid. */
- ras->auth_used = FALSE;
-
- /* No auth_baton? Give up. */
- if (! ras->callbacks->auth_baton)
- return -1;
-
- /* Neon automatically tries some auth protocols and bumps the attempt
- count without using Subversion's callbacks, so we can't depend
- on attempt == 0 the first time we are called -- we need to check
- if the auth state has been initted as well. */
- if (attempt == 0 || ras->auth_iterstate == NULL)
- {
- const char *realmstring;
-
- /* <https://svn.collab.net:80> Subversion repository */
- realmstring = apr_psprintf(ras->pool, "<%s://%s:%d> %s",
- ras->root.scheme, ras->root.host,
- ras->root.port, realm);
-
- err = svn_auth_first_credentials(&creds,
- &(ras->auth_iterstate),
- SVN_AUTH_CRED_SIMPLE,
- realmstring,
- ras->callbacks->auth_baton,
- ras->pool);
- }
-
- else /* attempt > 0 */
- /* ### TODO: if the http realm changed this time around, we
- should be calling first_creds(), not next_creds(). */
- err = svn_auth_next_credentials(&creds,
- ras->auth_iterstate,
- ras->pool);
- if (err || ! creds)
- {
- svn_error_clear(err);
- return -1;
- }
- simple_creds = creds;
-
- /* Make svn_ra_neon__request_dispatch store the credentials after it
- sees a succesful response */
- ras->auth_used = TRUE;
-
- /* ### silently truncates username/password to 256 chars. */
- apr_cpystrn(username, simple_creds->username, NE_ABUFSIZ);
- apr_cpystrn(password, simple_creds->password, NE_ABUFSIZ);
-
- return 0;
-}
-
-
-static const apr_uint32_t neon_failure_map[][2] =
-{
- { NE_SSL_NOTYETVALID, SVN_AUTH_SSL_NOTYETVALID },
- { NE_SSL_EXPIRED, SVN_AUTH_SSL_EXPIRED },
- { NE_SSL_IDMISMATCH, SVN_AUTH_SSL_CNMISMATCH },
- { NE_SSL_UNTRUSTED, SVN_AUTH_SSL_UNKNOWNCA }
-};
-
-/* Convert neon's SSL failure mask to our own failure mask. */
-static apr_uint32_t
-convert_neon_failures(int neon_failures)
-{
- apr_uint32_t svn_failures = 0;
- apr_size_t i;
-
- for (i = 0; i < sizeof(neon_failure_map) / (2 * sizeof(int)); ++i)
- {
- if (neon_failures & neon_failure_map[i][0])
- {
- svn_failures |= neon_failure_map[i][1];
- neon_failures &= ~neon_failure_map[i][0];
- }
- }
-
- /* Map any remaining neon failure bits to our OTHER bit. */
- if (neon_failures)
- {
- svn_failures |= SVN_AUTH_SSL_OTHER;
- }
-
- return svn_failures;
-}
-
-/* A neon-session callback to validate the SSL certificate when the CA
- is unknown (e.g. a self-signed cert), or there are other SSL
- certificate problems. */
-static int
-server_ssl_callback(void *userdata,
- int failures,
- const ne_ssl_certificate *cert)
-{
- svn_ra_neon__session_t *ras = userdata;
- svn_auth_cred_ssl_server_trust_t *server_creds = NULL;
- void *creds;
- svn_auth_iterstate_t *state;
- apr_pool_t *pool;
- svn_error_t *error;
- char *ascii_cert = ne_ssl_cert_export(cert);
- char *issuer_dname = ne_ssl_readable_dname(ne_ssl_cert_issuer(cert));
- svn_auth_ssl_server_cert_info_t cert_info;
- char fingerprint[NE_SSL_DIGESTLEN];
- char valid_from[NE_SSL_VDATELEN], valid_until[NE_SSL_VDATELEN];
- const char *realmstring;
- apr_uint32_t *svn_failures = apr_palloc(ras->pool, sizeof(*svn_failures));
-
- /* Construct the realmstring, e.g. https://svn.collab.net:80 */
- realmstring = apr_psprintf(ras->pool, "%s://%s:%d", ras->root.scheme,
- ras->root.host, ras->root.port);
-
- *svn_failures = convert_neon_failures(failures);
- svn_auth_set_parameter(ras->callbacks->auth_baton,
- SVN_AUTH_PARAM_SSL_SERVER_FAILURES,
- svn_failures);
-
- /* Extract the info from the certificate */
- cert_info.hostname = ne_ssl_cert_identity(cert);
- if (ne_ssl_cert_digest(cert, fingerprint) != 0)
- {
- strcpy(fingerprint, "<unknown>");
- }
- cert_info.fingerprint = fingerprint;
- ne_ssl_cert_validity(cert, valid_from, valid_until);
- cert_info.valid_from = valid_from;
- cert_info.valid_until = valid_until;
- cert_info.issuer_dname = issuer_dname;
- cert_info.ascii_cert = ascii_cert;
-
- svn_auth_set_parameter(ras->callbacks->auth_baton,
- SVN_AUTH_PARAM_SSL_SERVER_CERT_INFO,
- &cert_info);
-
- apr_pool_create(&pool, ras->pool);
- error = svn_auth_first_credentials(&creds, &state,
- SVN_AUTH_CRED_SSL_SERVER_TRUST,
- realmstring,
- ras->callbacks->auth_baton,
- pool);
- if (error || ! creds)
- {
- svn_error_clear(error);
- }
- else
- {
- server_creds = creds;
- error = svn_auth_save_credentials(state, pool);
- if (error)
- {
- /* It would be nice to show the error to the user somehow... */
- svn_error_clear(error);
- }
- }
-
- free(issuer_dname);
- free(ascii_cert);
- svn_auth_set_parameter(ras->callbacks->auth_baton,
- SVN_AUTH_PARAM_SSL_SERVER_CERT_INFO, NULL);
-
- svn_pool_destroy(pool);
- return ! server_creds;
-}
-
-static svn_boolean_t
-client_ssl_decrypt_cert(svn_ra_neon__session_t *ras,
- const char *cert_file,
- ne_ssl_client_cert *clicert)
-{
- svn_auth_iterstate_t *state;
- svn_error_t *error;
- apr_pool_t *pool;
- svn_boolean_t ok = FALSE;
- void *creds;
- int try;
-
- apr_pool_create(&pool, ras->pool);
- for (try = 0; TRUE; ++try)
- {
- if (try == 0)
- {
- error = svn_auth_first_credentials(&creds, &state,
- SVN_AUTH_CRED_SSL_CLIENT_CERT_PW,
- cert_file,
- ras->callbacks->auth_baton,
- pool);
- }
- else
- {
- error = svn_auth_next_credentials(&creds, state, pool);
- }
-
- if (error || ! creds)
- {
- /* Failure or too many attempts */
- svn_error_clear(error);
- break;
- }
- else
- {
- svn_auth_cred_ssl_client_cert_pw_t *pw_creds = creds;
-
- if (ne_ssl_clicert_decrypt(clicert, pw_creds->password) == 0)
- {
- error = svn_auth_save_credentials(state, pool);
- if (error)
- svn_error_clear(error);
-
- /* Success */
- ok = TRUE;
- break;
- }
- }
- }
- svn_pool_destroy(pool);
-
- return ok;
-}
-
-#ifdef SVN_NEON_0_28
-/* Callback invoked to enter PKCS#11 PIN code. */
-static int
-client_ssl_pkcs11_pin_entry(void *userdata,
- int attempt,
- const char *slot_descr,
- const char *token_label,
- unsigned int flags,
- char *pin)
-{
- svn_ra_neon__session_t *ras = userdata;
- svn_error_t *err;
- void *creds;
- svn_auth_cred_ssl_client_cert_pw_t *pw_creds;
-
- /* Always prevent PIN caching. */
- svn_auth_set_parameter(ras->callbacks->auth_baton,
- SVN_AUTH_PARAM_NO_AUTH_CACHE, "");
-
- if (attempt == 0)
- {
- const char *realmstring;
-
- realmstring = apr_psprintf(ras->pool,
- _("PIN for token \"%s\" in slot \"%s\""),
- token_label, slot_descr);
-
- err = svn_auth_first_credentials(&creds,
- &(ras->auth_iterstate),
- SVN_AUTH_CRED_SSL_CLIENT_CERT_PW,
- realmstring,
- ras->callbacks->auth_baton,
- ras->pool);
- }
- else
- {
- err = svn_auth_next_credentials(&creds, ras->auth_iterstate, ras->pool);
- }
-
- if (err || ! creds)
- {
- svn_error_clear(err);
- return -1;
- }
-
- pw_creds = creds;
-
- apr_cpystrn(pin, pw_creds->password, NE_SSL_P11PINLEN);
-
- return 0;
-}
-#endif
-
-static void
-client_ssl_callback(void *userdata, ne_session *sess,
- const ne_ssl_dname *const *dnames,
- int dncount)
-{
- svn_ra_neon__session_t *ras = userdata;
- ne_ssl_client_cert *clicert = NULL;
- void *creds;
- svn_auth_iterstate_t *state;
- const char *realmstring;
- apr_pool_t *pool;
- svn_error_t *error;
- int try;
-
- apr_pool_create(&pool, ras->pool);
-
- realmstring = apr_psprintf(pool, "%s://%s:%d", ras->root.scheme,
- ras->root.host, ras->root.port);
-
- for (try = 0; TRUE; ++try)
- {
- if (try == 0)
- {
- error = svn_auth_first_credentials(&creds, &state,
- SVN_AUTH_CRED_SSL_CLIENT_CERT,
- realmstring,
- ras->callbacks->auth_baton,
- pool);
- }
- else
- {
- error = svn_auth_next_credentials(&creds, state, pool);
- }
-
- if (error || ! creds)
- {
- /* Failure or too many attempts */
- svn_error_clear(error);
- break;
- }
- else
- {
- svn_auth_cred_ssl_client_cert_t *client_creds = creds;
-
- clicert = ne_ssl_clicert_read(client_creds->cert_file);
- if (clicert)
- {
- if (! ne_ssl_clicert_encrypted(clicert) ||
- client_ssl_decrypt_cert(ras, client_creds->cert_file,
- clicert))
- {
- ne_ssl_set_clicert(sess, clicert);
- }
- break;
- }
- }
- }
-
- svn_pool_destroy(pool);
-}
-
-/* Set *PROXY_HOST, *PROXY_PORT, *PROXY_USERNAME, *PROXY_PASSWORD,
- * *TIMEOUT_SECONDS, *NEON_DEBUG, *COMPRESSION, *NEON_AUTH_TYPES, and
- * *PK11_PROVIDER to the information for REQUESTED_HOST, allocated in
- * POOL, if there is any applicable information. If there is no
- * applicable information or if there is an error, then set
- * *PROXY_PORT to (unsigned int) -1, *TIMEOUT_SECONDS and *NEON_DEBUG
- * to zero, *COMPRESSION to TRUE, *NEON_AUTH_TYPES is left untouched,
- * and the rest are set to NULL. This function can return an error,
- * so before examining any values, check the error return value.
- */
-static svn_error_t *get_server_settings(const char **proxy_host,
- unsigned int *proxy_port,
- const char **proxy_username,
- const char **proxy_password,
- int *timeout_seconds,
- int *neon_debug,
- svn_boolean_t *compression,
- unsigned int *neon_auth_types,
- const char **pk11_provider,
- svn_config_t *cfg,
- const char *requested_host,
- apr_pool_t *pool)
-{
- const char *exceptions, *port_str, *timeout_str, *server_group;
- const char *debug_str;
- svn_boolean_t is_exception = FALSE;
-#ifdef SVN_NEON_0_26
- const char *http_auth_types = NULL;
-#endif
-
- /* If we find nothing, default to nulls. */
- *proxy_host = NULL;
- *proxy_port = (unsigned int) -1;
- *proxy_username = NULL;
- *proxy_password = NULL;
- port_str = NULL;
- timeout_str = NULL;
- debug_str = NULL;
- *pk11_provider = NULL;
-
- /* Use the default proxy-specific settings if and only if
- "http-proxy-exceptions" is not set to exclude this host. */
- svn_config_get(cfg, &exceptions, SVN_CONFIG_SECTION_GLOBAL,
- SVN_CONFIG_OPTION_HTTP_PROXY_EXCEPTIONS, NULL);
- if (exceptions)
- {
- apr_array_header_t *l = svn_cstring_split(exceptions, ",", TRUE, pool);
- is_exception = svn_cstring_match_glob_list(requested_host, l);
- }
- if (! is_exception)
- {
- svn_config_get(cfg, proxy_host, SVN_CONFIG_SECTION_GLOBAL,
- SVN_CONFIG_OPTION_HTTP_PROXY_HOST, NULL);
- svn_config_get(cfg, &port_str, SVN_CONFIG_SECTION_GLOBAL,
- SVN_CONFIG_OPTION_HTTP_PROXY_PORT, NULL);
- svn_config_get(cfg, proxy_username, SVN_CONFIG_SECTION_GLOBAL,
- SVN_CONFIG_OPTION_HTTP_PROXY_USERNAME, NULL);
- svn_config_get(cfg, proxy_password, SVN_CONFIG_SECTION_GLOBAL,
- SVN_CONFIG_OPTION_HTTP_PROXY_PASSWORD, NULL);
- }
-
- /* Apply non-proxy-specific settings regardless of exceptions: */
- svn_config_get(cfg, &timeout_str, SVN_CONFIG_SECTION_GLOBAL,
- SVN_CONFIG_OPTION_HTTP_TIMEOUT, NULL);
- SVN_ERR(svn_config_get_bool(cfg, compression, SVN_CONFIG_SECTION_GLOBAL,
- SVN_CONFIG_OPTION_HTTP_COMPRESSION, TRUE));
- svn_config_get(cfg, &debug_str, SVN_CONFIG_SECTION_GLOBAL,
- SVN_CONFIG_OPTION_NEON_DEBUG_MASK, NULL);
-#ifdef SVN_NEON_0_26
- svn_config_get(cfg, &http_auth_types, SVN_CONFIG_SECTION_GLOBAL,
- SVN_CONFIG_OPTION_HTTP_AUTH_TYPES, NULL);
-#endif
- svn_config_get(cfg, pk11_provider, SVN_CONFIG_SECTION_GLOBAL,
- SVN_CONFIG_OPTION_SSL_PKCS11_PROVIDER, NULL);
-
- if (cfg)
- server_group = svn_config_find_group(cfg, requested_host,
- SVN_CONFIG_SECTION_GROUPS, pool);
- else
- server_group = NULL;
-
- if (server_group)
- {
- svn_config_get(cfg, proxy_host, server_group,
- SVN_CONFIG_OPTION_HTTP_PROXY_HOST, *proxy_host);
- svn_config_get(cfg, &port_str, server_group,
- SVN_CONFIG_OPTION_HTTP_PROXY_PORT, port_str);
- svn_config_get(cfg, proxy_username, server_group,
- SVN_CONFIG_OPTION_HTTP_PROXY_USERNAME, *proxy_username);
- svn_config_get(cfg, proxy_password, server_group,
- SVN_CONFIG_OPTION_HTTP_PROXY_PASSWORD, *proxy_password);
- svn_config_get(cfg, &timeout_str, server_group,
- SVN_CONFIG_OPTION_HTTP_TIMEOUT, timeout_str);
- SVN_ERR(svn_config_get_bool(cfg, compression, server_group,
- SVN_CONFIG_OPTION_HTTP_COMPRESSION,
- *compression));
- svn_config_get(cfg, &debug_str, server_group,
- SVN_CONFIG_OPTION_NEON_DEBUG_MASK, debug_str);
-#ifdef SVN_NEON_0_26
- svn_config_get(cfg, &http_auth_types, server_group,
- SVN_CONFIG_OPTION_HTTP_AUTH_TYPES, http_auth_types);
-#endif
- svn_config_get(cfg, pk11_provider, server_group,
- SVN_CONFIG_OPTION_SSL_PKCS11_PROVIDER, *pk11_provider);
- }
-
- /* Special case: convert the port value, if any. */
- if (port_str)
- {
- char *endstr;
- const long int port = strtol(port_str, &endstr, 10);
-
- if (*endstr)
- return svn_error_create(SVN_ERR_RA_ILLEGAL_URL, NULL,
- _("Invalid URL: illegal character in proxy "
- "port number"));
- if (port < 0)
- return svn_error_create(SVN_ERR_RA_ILLEGAL_URL, NULL,
- _("Invalid URL: negative proxy port number"));
- if (port > 65535)
- return svn_error_create(SVN_ERR_RA_ILLEGAL_URL, NULL,
- _("Invalid URL: proxy port number greater "
- "than maximum TCP port number 65535"));
- *proxy_port = port;
- }
- else
- *proxy_port = 80;
-
- if (timeout_str)
- {
- char *endstr;
- const long int timeout = strtol(timeout_str, &endstr, 10);
-
- if (*endstr)
- return svn_error_create(SVN_ERR_BAD_CONFIG_VALUE, NULL,
- _("Invalid config: illegal character in "
- "timeout value"));
- if (timeout < 0)
- return svn_error_create(SVN_ERR_BAD_CONFIG_VALUE, NULL,
- _("Invalid config: negative timeout value"));
- *timeout_seconds = timeout;
- }
- else
- *timeout_seconds = 0;
-
- if (debug_str)
- {
- char *endstr;
- const long int debug = strtol(debug_str, &endstr, 10);
-
- if (*endstr)
- return svn_error_create(SVN_ERR_BAD_CONFIG_VALUE, NULL,
- _("Invalid config: illegal character in "
- "debug mask value"));
-
- *neon_debug = debug;
- }
- else
- *neon_debug = 0;
-
-#ifdef SVN_NEON_0_26
- if (http_auth_types)
- {
- char *token, *last;
- char *auth_types_list = apr_palloc(pool, strlen(http_auth_types) + 1);
- apr_collapse_spaces(auth_types_list, http_auth_types);
- while ((token = apr_strtok(auth_types_list, ";", &last)) != NULL)
- {
- auth_types_list = NULL;
- if (svn_cstring_casecmp("basic", token) == 0)
- *neon_auth_types |= NE_AUTH_BASIC;
- else if (svn_cstring_casecmp("digest", token) == 0)
- *neon_auth_types |= NE_AUTH_DIGEST;
- else if (svn_cstring_casecmp("negotiate", token) == 0)
- *neon_auth_types |= NE_AUTH_NEGOTIATE;
- else
- return svn_error_createf(SVN_ERR_BAD_CONFIG_VALUE, NULL,
- _("Invalid config: unknown http auth"
- "type '%s'"), token);
- }
- }
-#endif /* SVN_NEON_0_26 */
-
- return SVN_NO_ERROR;
-}
-
-
-/* Userdata for the `proxy_auth' function. */
-struct proxy_auth_baton
-{
- const char *username; /* Cannot be NULL, but "" is okay. */
- const char *password; /* Cannot be NULL, but "" is okay. */
-};
-
-
-/* An `ne_request_auth' callback, see ne_auth.h. USERDATA is a
- * `struct proxy_auth_baton *'.
- *
- * If ATTEMPT < 10, copy USERDATA->username and USERDATA->password
- * into USERNAME and PASSWORD respectively (but do not copy more than
- * NE_ABUFSIZ bytes of either), and return zero to indicate to Neon
- * that authentication should be attempted.
- *
- * If ATTEMPT >= 10, copy nothing into USERNAME and PASSWORD and
- * return 1, to cancel further authentication attempts.
- *
- * Ignore REALM.
- *
- * ### Note: There is no particularly good reason for the 10-attempt
- * limit. Perhaps there should only be one attempt, and if it fails,
- * we just cancel any further attempts. I used 10 just in case the
- * proxy tries various times with various realms, since we ignore
- * REALM. And why do we ignore REALM? Because we currently don't
- * have any way to specify different auth information for different
- * realms. (I'm assuming that REALM would be a realm on the proxy
- * server, not on the Subversion repository server that is the real
- * destination.) Do we have any need to support proxy realms?
- */
-static int proxy_auth(void *userdata,
- const char *realm,
- int attempt,
- char *username,
- char *password)
-{
- struct proxy_auth_baton *pab = userdata;
-
- if (attempt >= 10)
- return 1;
-
- /* Else. */
-
- apr_cpystrn(username, pab->username, NE_ABUFSIZ);
- apr_cpystrn(password, pab->password, NE_ABUFSIZ);
-
- return 0;
-}
-
-#define RA_NEON_DESCRIPTION \
- N_("Module for accessing a repository via WebDAV protocol using Neon.")
-
-static const char *
-ra_neon_get_description(void)
-{
- return _(RA_NEON_DESCRIPTION);
-}
-
-static const char * const *
-ra_neon_get_schemes(apr_pool_t *pool)
-{
- static const char *schemes_no_ssl[] = { "http", NULL };
- static const char *schemes_ssl[] = { "http", "https", NULL };
-
- return ne_has_support(NE_FEATURE_SSL) ? schemes_ssl : schemes_no_ssl;
-}
-
-typedef struct neonprogress_baton_t
-{
- svn_ra_neon__session_t *ras;
- apr_off_t last_progress;
- apr_pool_t *pool;
-} neonprogress_baton_t;
-
-static void
-#ifdef SVN_NEON_0_27
-ra_neon_neonprogress(void *baton, ne_off_t progress, ne_off_t total)
-#else
-ra_neon_neonprogress(void *baton, off_t progress, off_t total)
-#endif /* SVN_NEON_0_27 */
-{
- neonprogress_baton_t *pb = baton;
- svn_ra_neon__session_t *ras = pb->ras;
-
- if (ras->progress_func)
- {
- if (total < 0)
- {
- /* Neon sends the total number of bytes sent for this specific
- session and there are two sessions active at once.
-
- For this case we combine the totals to allow clients to provide
- a better progress indicator. */
-
- if (progress >= pb->last_progress)
- ras->total_progress += (progress - pb->last_progress);
- else
- /* Session total has been reset. A new stream started */
- ras->total_progress += pb->last_progress;
-
- pb->last_progress = progress;
-
- ras->progress_func(ras->total_progress, -1, ras->progress_baton,
- pb->pool);
- }
- else
- {
- /* Neon provides total bytes to receive information. Pass literaly
- to allow providing a percentage. */
- ras->progress_func(progress, total, ras->progress_baton, pb->pool);
- }
- }
-}
-
-
-
-/* ### need an ne_session_dup to avoid the second gethostbyname
- * call and make this halfway sane. */
-
-
-/* Parse URL into *URI, doing some sanity checking and initializing the port
- to a default value if it wasn't specified in URL. */
-static svn_error_t *
-parse_url(ne_uri *uri, const char *url)
-{
- if (ne_uri_parse(url, uri)
- || uri->host == NULL || uri->path == NULL || uri->scheme == NULL)
- {
- ne_uri_free(uri);
- return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
- _("URL '%s' is malformed or the "
- "scheme or host or path is missing"), url);
- }
- if (uri->port == 0)
- uri->port = ne_uri_defaultport(uri->scheme);
-
- return SVN_NO_ERROR;
-}
-
-/* Initializer function matching the prototype accepted by
- svn_atomic__init_once(). */
-static svn_error_t *
-initialize_neon(void *baton, apr_pool_t *ignored_pool)
-{
- if (ne_sock_init() != 0)
- return svn_error_create(SVN_ERR_RA_DAV_SOCK_INIT, NULL,
- _("Network socket initialization failed"));
-
- return SVN_NO_ERROR;
-}
-
-/* Initialize neon when not initialized before. */
-static svn_error_t *
-ensure_neon_initialized(void)
-{
- return svn_atomic__init_once(&neon_initialized, initialize_neon, NULL, NULL);
-}
-
-static svn_error_t *
-svn_ra_neon__open(svn_ra_session_t *session,
- const char **corrected_url,
- const char *repos_URL,
- const svn_ra_callbacks2_t *callbacks,
- void *callback_baton,
- apr_hash_t *config,
- apr_pool_t *pool)
-{
- apr_size_t len;
- ne_session *sess, *sess2;
- ne_uri *uri = apr_pcalloc(pool, sizeof(*uri));
- svn_ra_neon__session_t *ras;
- int is_ssl_session;
- svn_boolean_t compression;
- svn_config_t *cfg, *cfg_client;
- const char *server_group;
- unsigned int neon_auth_types = 0;
- const char *pkcs11_provider;
- const char *useragent = NULL;
- const char *client_string = NULL;
-
- SVN_ERR_ASSERT(svn_uri_is_canonical(repos_URL, pool));
-
- if (callbacks->get_client_string)
- callbacks->get_client_string(callback_baton, &client_string, pool);
-
- if (client_string)
- useragent = apr_pstrcat(pool, "SVN/" SVN_VER_NUMBER "/", client_string,
- (char *)NULL);
- else
- useragent = "SVN/" SVN_VER_NUMBER;
-
- /* Sanity check the URI */
- SVN_ERR(parse_url(uri, repos_URL));
-
- /* make sure we eventually destroy the uri */
- apr_pool_cleanup_register(pool, uri, cleanup_uri, apr_pool_cleanup_null);
-
-
- /* Initialize neon if required */
- SVN_ERR(ensure_neon_initialized());
-
- /* we want to know if the repository is actually somewhere else */
- /* ### not yet: http_redirect_register(sess, ... ); */
-
- is_ssl_session = (strcmp(uri->scheme, "https") == 0);
- if (is_ssl_session)
- {
- if (ne_has_support(NE_FEATURE_SSL) == 0)
- return svn_error_create(SVN_ERR_RA_DAV_SOCK_INIT, NULL,
- _("SSL is not supported"));
- }
- /* Create two neon session objects, and set their properties... */
- sess = ne_session_create(uri->scheme, uri->host, uri->port);
- sess2 = ne_session_create(uri->scheme, uri->host, uri->port);
- /* make sure we will eventually destroy the session */
- apr_pool_cleanup_register(pool, sess, cleanup_session, apr_pool_cleanup_null);
- apr_pool_cleanup_register(pool, sess2, cleanup_session,
- apr_pool_cleanup_null);
-
- cfg = config ? apr_hash_get(config,
- SVN_CONFIG_CATEGORY_SERVERS,
- APR_HASH_KEY_STRING) : NULL;
- cfg_client = config ? apr_hash_get(config,
- SVN_CONFIG_CATEGORY_CONFIG,
- APR_HASH_KEY_STRING) : NULL;
- if (cfg)
- server_group = svn_config_find_group(cfg, uri->host,
- SVN_CONFIG_SECTION_GROUPS, pool);
- else
- server_group = NULL;
-
- /* If there's a timeout or proxy for this URL, use it. */
- {
- const char *proxy_host;
- unsigned int proxy_port;
- const char *proxy_username;
- const char *proxy_password;
- int timeout;
- int debug;
-
- SVN_ERR(get_server_settings(&proxy_host,
- &proxy_port,
- &proxy_username,
- &proxy_password,
- &timeout,
- &debug,
- &compression,
- &neon_auth_types,
- &pkcs11_provider,
- cfg,
- uri->host,
- pool));
-
-#ifdef SVN_NEON_0_26
- if (neon_auth_types == 0)
- {
- /* If there were no auth types specified in the configuration
- file, provide the appropriate defaults. */
- neon_auth_types = NE_AUTH_BASIC | NE_AUTH_DIGEST;
- if (is_ssl_session)
- neon_auth_types |= NE_AUTH_NEGOTIATE;
- }
-#endif
-
- if (debug)
- ne_debug_init(stderr, debug);
-
- if (proxy_host)
- {
- ne_session_proxy(sess, proxy_host, proxy_port);
- ne_session_proxy(sess2, proxy_host, proxy_port);
-
- if (proxy_username)
- {
- /* Allocate the baton in pool, not on stack, so it will
- last till whenever Neon needs it. */
- struct proxy_auth_baton *pab = apr_palloc(pool, sizeof(*pab));
-
- pab->username = proxy_username;
- pab->password = proxy_password ? proxy_password : "";
-
- ne_set_proxy_auth(sess, proxy_auth, pab);
- ne_set_proxy_auth(sess2, proxy_auth, pab);
- }
-#ifdef SVN_NEON_0_26
- else
- {
- /* Enable (only) the Negotiate scheme for proxy
- authentication, if no username/password is
- configured. */
- ne_add_proxy_auth(sess, NE_AUTH_NEGOTIATE, NULL, NULL);
- ne_add_proxy_auth(sess2, NE_AUTH_NEGOTIATE, NULL, NULL);
- }
-#endif
- }
-
- if (!timeout)
- timeout = DEFAULT_HTTP_TIMEOUT;
- ne_set_read_timeout(sess, timeout);
- ne_set_read_timeout(sess2, timeout);
-
-#ifdef SVN_NEON_0_27
- ne_set_connect_timeout(sess, timeout);
- ne_set_connect_timeout(sess2, timeout);
-#endif
- }
-
- if (useragent)
- {
- ne_set_useragent(sess, useragent);
- ne_set_useragent(sess2, useragent);
- }
- else
- {
- ne_set_useragent(sess, "SVN/" SVN_VER_NUMBER);
- ne_set_useragent(sess2, "SVN/" SVN_VER_NUMBER);
- }
-
- /* clean up trailing slashes from the URL */
- len = strlen(uri->path);
- if (len > 1 && (uri->path)[len - 1] == '/')
- (uri->path)[len - 1] = '\0';
-
- /* Create and fill a session_baton. */
- ras = apr_pcalloc(pool, sizeof(*ras));
- ras->pool = pool;
- ras->url = svn_stringbuf_create(repos_URL, pool);
- /* copies uri pointer members, they get free'd in __close. */
- ras->root = *uri;
- ras->ne_sess = sess;
- ras->ne_sess2 = sess2;
- ras->callbacks = callbacks;
- ras->callback_baton = callback_baton;
- ras->compression = compression;
- ras->progress_baton = callbacks->progress_baton;
- ras->progress_func = callbacks->progress_func;
- ras->capabilities = apr_hash_make(ras->pool);
- ras->supports_deadprop_count = svn_tristate_unknown;
- ras->vcc = NULL;
- ras->uuid = NULL;
- /* save config and server group in the auth parameter hash */
- svn_auth_set_parameter(ras->callbacks->auth_baton,
- SVN_AUTH_PARAM_CONFIG_CATEGORY_CONFIG, cfg_client);
- svn_auth_set_parameter(ras->callbacks->auth_baton,
- SVN_AUTH_PARAM_CONFIG_CATEGORY_SERVERS, cfg);
- svn_auth_set_parameter(ras->callbacks->auth_baton,
- SVN_AUTH_PARAM_SERVER_GROUP, server_group);
-
- /* note that ras->username and ras->password are still NULL at this
- point. */
-
- /* Register an authentication 'pull' callback with the neon sessions */
-#ifdef SVN_NEON_0_26
- ne_add_server_auth(sess, neon_auth_types, request_auth, ras);
- ne_add_server_auth(sess2, neon_auth_types, request_auth, ras);
-#else
- ne_set_server_auth(sess, request_auth, ras);
- ne_set_server_auth(sess2, request_auth, ras);
-#endif
-
- if (is_ssl_session)
- {
- svn_boolean_t trust_default_ca;
- const char *authorities
- = svn_config_get_server_setting(cfg, server_group,
- SVN_CONFIG_OPTION_SSL_AUTHORITY_FILES,
- NULL);
-
- if (authorities != NULL)
- {
- char *files, *file, *last;
- files = apr_pstrdup(pool, authorities);
-
- while ((file = apr_strtok(files, ";", &last)) != NULL)
- {
- ne_ssl_certificate *ca_cert;
- files = NULL;
- ca_cert = ne_ssl_cert_read(file);
- if (ca_cert == NULL)
- {
- return svn_error_createf(
- SVN_ERR_BAD_CONFIG_VALUE, NULL,
- _("Invalid config: unable to load certificate file '%s'"),
- svn_dirent_local_style(file, pool));
- }
- ne_ssl_trust_cert(sess, ca_cert);
- ne_ssl_trust_cert(sess2, ca_cert);
- }
- }
-
- /* When the CA certificate or server certificate has
- verification problems, neon will call our verify function before
- outright rejection of the connection.*/
- ne_ssl_set_verify(sess, server_ssl_callback, ras);
- ne_ssl_set_verify(sess2, server_ssl_callback, ras);
- /* For client connections, we register a callback for if the server
- wants to authenticate the client via client certificate. */
-
-#ifdef SVN_NEON_0_28
- if (pkcs11_provider)
- {
- ne_ssl_pkcs11_provider *provider;
- int rv;
-
- /* Initialize the PKCS#11 provider. */
- rv = ne_ssl_pkcs11_provider_init(&provider, pkcs11_provider);
- if (rv != NE_PK11_OK)
- {
- return svn_error_createf
- (SVN_ERR_BAD_CONFIG_VALUE, NULL,
- _("Invalid config: unable to load PKCS#11 provider '%s'"),
- pkcs11_provider);
- }
-
- /* Share the provider between the two sessions. */
- ne_ssl_set_pkcs11_provider(sess, provider);
- ne_ssl_set_pkcs11_provider(sess2, provider);
-
- ne_ssl_pkcs11_provider_pin(provider, client_ssl_pkcs11_pin_entry,
- ras);
-
- apr_pool_cleanup_register(pool, provider, cleanup_p11provider,
- apr_pool_cleanup_null);
- }
- /* Note the "else"; if a PKCS#11 provider is set up, a client
- cert callback is already configured, so don't displace it
- with the normal one here. */
- else
-#endif
- {
- ne_ssl_provide_clicert(sess, client_ssl_callback, ras);
- ne_ssl_provide_clicert(sess2, client_ssl_callback, ras);
- }
-
- /* See if the user wants us to trust "default" openssl CAs. */
- SVN_ERR(svn_config_get_server_setting_bool(
- cfg, &trust_default_ca, server_group,
- SVN_CONFIG_OPTION_SSL_TRUST_DEFAULT_CA, TRUE));
-
- if (trust_default_ca)
- {
- ne_ssl_trust_default_ca(sess);
- ne_ssl_trust_default_ca(sess2);
- }
- }
-
- if (ras->progress_func)
- {
- neonprogress_baton_t *progress1 = apr_pcalloc(pool, sizeof(*progress1));
- neonprogress_baton_t *progress2 = apr_pcalloc(pool, sizeof(*progress2));
-
- progress1->pool = pool;
- progress1->ras = ras;
- progress1->last_progress = 0;
-
- *progress2 = *progress1;
-
- ne_set_progress(sess, ra_neon_neonprogress, progress1);
- ne_set_progress(sess2, ra_neon_neonprogress, progress2);
- }
-
- session->priv = ras;
-
- return svn_ra_neon__exchange_capabilities(ras, corrected_url, NULL, pool);
-}
-
-
-static svn_error_t *svn_ra_neon__reparent(svn_ra_session_t *session,
- const char *url,
- apr_pool_t *pool)
-{
- svn_ra_neon__session_t *ras = session->priv;
- ne_uri *uri = apr_pcalloc(session->pool, sizeof(*uri));
-
- SVN_ERR(parse_url(uri, url));
- apr_pool_cleanup_register(session->pool, uri, cleanup_uri,
- apr_pool_cleanup_null);
-
- ras->root = *uri;
- svn_stringbuf_set(ras->url, url);
- return SVN_NO_ERROR;
-}
-
-static svn_error_t *svn_ra_neon__get_session_url(svn_ra_session_t *session,
- const char **url,
- apr_pool_t *pool)
-{
- svn_ra_neon__session_t *ras = session->priv;
- *url = apr_pstrmemdup(pool, ras->url->data, ras->url->len);
- return SVN_NO_ERROR;
-}
-
-static svn_error_t *svn_ra_neon__get_repos_root(svn_ra_session_t *session,
- const char **url,
- apr_pool_t *pool)
-{
- svn_ra_neon__session_t *ras = session->priv;
-
- if (! ras->repos_root)
- {
- const char *bc_relative;
- svn_stringbuf_t *url_buf;
-
- SVN_ERR(svn_ra_neon__get_baseline_info(NULL, &bc_relative, NULL,
- ras, ras->url->data,
- SVN_INVALID_REVNUM, pool));
-
- /* Remove as many path components from the URL as there are components
- in bc_relative. */
- url_buf = svn_stringbuf_dup(ras->url, pool);
- svn_path_remove_components
- (url_buf, svn_path_component_count(bc_relative));
- ras->repos_root = apr_pstrdup(ras->pool, url_buf->data);
- }
-
- *url = ras->repos_root;
- return SVN_NO_ERROR;
-}
-
-/* Copied from svn_ra_get_path_relative_to_root() and de-vtable-ized
- to prevent a dependency cycle. */
-svn_error_t *
-svn_ra_neon__get_path_relative_to_root(svn_ra_session_t *session,
- const char **rel_path,
- const char *url,
- apr_pool_t *pool)
-{
- const char *root_url;
-
- SVN_ERR(svn_ra_neon__get_repos_root(session, &root_url, pool));
- if (strcmp(root_url, url) == 0)
- {
- *rel_path = "";
- }
- else
- {
- *rel_path = svn_uri__is_child(root_url, url, pool);
- if (! *rel_path)
- return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
- _("'%s' isn't a child of repository root "
- "URL '%s'"),
- url, root_url);
- }
- return SVN_NO_ERROR;
-}
-
-static svn_error_t *svn_ra_neon__do_get_uuid(svn_ra_session_t *session,
- const char **uuid,
- apr_pool_t *pool)
-{
- svn_ra_neon__session_t *ras = session->priv;
-
- if (! ras->uuid)
- {
- svn_ra_neon__resource_t *rsrc;
- const char *lopped_path;
-
- SVN_ERR(svn_ra_neon__search_for_starting_props(&rsrc, &lopped_path,
- ras, ras->url->data,
- pool));
-
- if (! ras->uuid)
- {
- /* ### better error reporting... */
- return svn_error_create(APR_EGENERAL, NULL,
- _("The UUID property was not found on the "
- "resource or any of its parents"));
- }
- }
-
- /* search_for_starting_props() filled it. */
- *uuid = ras->uuid;
-
- return SVN_NO_ERROR;
-}
-
-
-static const svn_version_t *
-ra_neon_version(void)
-{
- SVN_VERSION_BODY;
-}
-
-static const svn_ra__vtable_t neon_vtable = {
- ra_neon_version,
- ra_neon_get_description,
- ra_neon_get_schemes,
- svn_ra_neon__open,
- svn_ra_neon__reparent,
- svn_ra_neon__get_session_url,
- svn_ra_neon__get_latest_revnum,
- svn_ra_neon__get_dated_revision,
- svn_ra_neon__change_rev_prop,
- svn_ra_neon__rev_proplist,
- svn_ra_neon__rev_prop,
- svn_ra_neon__get_commit_editor,
- svn_ra_neon__get_file,
- svn_ra_neon__get_dir,
- svn_ra_neon__get_mergeinfo,
- svn_ra_neon__do_update,
- svn_ra_neon__do_switch,
- svn_ra_neon__do_status,
- svn_ra_neon__do_diff,
- svn_ra_neon__get_log,
- svn_ra_neon__do_check_path,
- svn_ra_neon__do_stat,
- svn_ra_neon__do_get_uuid,
- svn_ra_neon__get_repos_root,
- svn_ra_neon__get_locations,
- svn_ra_neon__get_location_segments,
- svn_ra_neon__get_file_revs,
- svn_ra_neon__lock,
- svn_ra_neon__unlock,
- svn_ra_neon__get_lock,
- svn_ra_neon__get_locks,
- svn_ra_neon__replay,
- svn_ra_neon__has_capability,
- svn_ra_neon__replay_range,
- svn_ra_neon__get_deleted_rev
-};
-
-svn_error_t *
-svn_ra_neon__init(const svn_version_t *loader_version,
- const svn_ra__vtable_t **vtable,
- apr_pool_t *pool)
-{
- static const svn_version_checklist_t checklist[] =
- {
- { "svn_subr", svn_subr_version },
- { "svn_delta", svn_delta_version },
- { NULL, NULL }
- };
-
- SVN_ERR(svn_ver_check_list(ra_neon_version(), checklist));
-
- /* Simplified version check to make sure we can safely use the
- VTABLE parameter. The RA loader does a more exhaustive check. */
- if (loader_version->major != SVN_VER_MAJOR)
- {
- return svn_error_createf
- (SVN_ERR_VERSION_MISMATCH, NULL,
- _("Unsupported RA loader version (%d) for ra_neon"),
- loader_version->major);
- }
-
- *vtable = &neon_vtable;
-
- return SVN_NO_ERROR;
-}
-
-/* Compatibility wrapper for the 1.1 and before API. */
-#define NAME "ra_neon"
-#define DESCRIPTION RA_NEON_DESCRIPTION
-#define VTBL neon_vtable
-#define INITFUNC svn_ra_neon__init
-#define COMPAT_INITFUNC svn_ra_dav_init
-#include "../libsvn_ra/wrapper_template.h"
diff --git a/subversion/libsvn_ra_neon/util.c b/subversion/libsvn_ra_neon/util.c
deleted file mode 100644
index 4bdea43..0000000
--- a/subversion/libsvn_ra_neon/util.c
+++ /dev/null
@@ -1,1651 +0,0 @@
-/*
- * util.c : utility functions for the RA/DAV library
- *
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- * ====================================================================
- */
-
-#include <apr_pools.h>
-
-#define APR_WANT_STRFUNC
-#include <apr_want.h>
-
-#include <apr_uri.h>
-
-#include <ne_alloc.h>
-#include <ne_compress.h>
-#include <ne_basic.h>
-
-#include "svn_pools.h"
-#include "svn_path.h"
-#include "svn_string.h"
-#include "svn_utf.h"
-#include "svn_xml.h"
-#include "svn_props.h"
-
-#include "private/svn_fspath.h"
-#include "svn_private_config.h"
-
-#include "ra_neon.h"
-#include <assert.h>
-
-
-
-static apr_status_t
-xml_parser_cleanup(void *baton)
-{
- ne_xml_destroy(baton);
-
- return APR_SUCCESS;
-}
-
-static ne_xml_parser *
-xml_parser_create(svn_ra_neon__request_t *req)
-{
- ne_xml_parser *p = ne_xml_create();
-
- /* ### HACK: Set the parser's error to the empty string. Someday we
- hope neon will let us have an easy way to tell the difference
- between XML parsing errors, and errors that occur while handling
- the XML tags that we get. Until then, trust that whenever neon
- has an error somewhere below the API, it sets its own error to
- something non-empty (the API promises non-NULL, at least). */
- ne_xml_set_error(p, "");
-
- apr_pool_cleanup_register(req->pool, p,
- xml_parser_cleanup,
- apr_pool_cleanup_null);
-
- return p;
-}
-
-
-
-/* Simple multi-status parser
- *
- * For the purpose of 'simple' requests which - if it weren't
- * for our custom error parser - could use the ne_basic.h interfaces.
- */
-
-/* List of XML elements expected in 207 Multi-Status responses. */
-static const svn_ra_neon__xml_elm_t multistatus_elements[] =
- { { "DAV:", "multistatus", ELEM_multistatus, 0 },
- { "DAV:", "response", ELEM_response, 0 },
- { "DAV:", "responsedescription", ELEM_responsedescription,
- SVN_RA_NEON__XML_CDATA },
- { "DAV:", "status", ELEM_status, SVN_RA_NEON__XML_CDATA },
- { "DAV:", "href", ELEM_href, SVN_RA_NEON__XML_CDATA },
- { "DAV:", "propstat", ELEM_propstat, SVN_RA_NEON__XML_CDATA },
- { "DAV:", "prop", ELEM_prop, SVN_RA_NEON__XML_CDATA },
-
- /* We start out basic and are not interested in other elements */
- { "", "", ELEM_unknown, 0 },
-
- { NULL }
- };
-
-
-/* Sparse matrix listing the permitted child elements of each element.
-
- The permitted direct children of the element named in the first column are
- the elements named in the remainder of the row.
-
- There may be any number of rows, and any number of columns in each row; any
- non-positive value (such as SVN_RA_NEON__XML_INVALID) serves as a sentinel.
-
- The last element in a row is returned if the head-of-row element is found
- with a child that's not listed in the remainder of the row. The singleton
- element of the last (sentinel) row is returned if a tag-with-children is
- found that isn't the head of any row.
-
- See validate_element().
- */
-static const int multistatus_nesting_table[][5] =
- { { ELEM_root, ELEM_multistatus, SVN_RA_NEON__XML_INVALID },
- { ELEM_multistatus, ELEM_response, ELEM_responsedescription,
- SVN_RA_NEON__XML_DECLINE },
- { ELEM_responsedescription, SVN_RA_NEON__XML_INVALID },
- { ELEM_response, ELEM_href, ELEM_status, ELEM_propstat,
- SVN_RA_NEON__XML_DECLINE },
- { ELEM_status, SVN_RA_NEON__XML_INVALID },
- { ELEM_href, SVN_RA_NEON__XML_INVALID },
- { ELEM_propstat, ELEM_prop, ELEM_status, ELEM_responsedescription,
- SVN_RA_NEON__XML_INVALID },
- { ELEM_prop, SVN_RA_NEON__XML_DECLINE },
- { SVN_RA_NEON__XML_DECLINE },
- };
-
-
-/* PARENT and CHILD are enum values of ELEM_* type.
- Return a positive integer if CHILD is a valid direct child of PARENT, and
- a negative integer (SVN_RA_NEON__XML_INVALID or SVN_RA_NEON__XML_DECLINE,
- at the moment) otherwise.
- */
-static int
-validate_element(int parent, int child)
-{
- int i = 0;
- int j = 0;
-
- while (parent != multistatus_nesting_table[i][0]
- && (multistatus_nesting_table[i][0] > 0 || i == 0))
- i++;
-
- if (parent == multistatus_nesting_table[i][0])
- while (multistatus_nesting_table[i][++j] != child
- && multistatus_nesting_table[i][j] > 0)
- ;
-
- return multistatus_nesting_table[i][j];
-}
-
-typedef struct multistatus_baton_t
-{
- svn_stringbuf_t *want_cdata;
- svn_stringbuf_t *cdata;
-
- svn_boolean_t in_propstat;
- svn_boolean_t propstat_has_error;
- svn_stringbuf_t *propname;
- svn_stringbuf_t *propstat_description;
-
- svn_ra_neon__request_t *req;
- svn_stringbuf_t *description;
- svn_boolean_t contains_error;
- svn_boolean_t contains_precondition_error;
-} multistatus_baton_t;
-
-/* Implements svn_ra_neon__startelm_cb_t. */
-static svn_error_t *
-start_207_element(int *elem, void *baton, int parent,
- const char *nspace, const char *name, const char **atts)
-{
- multistatus_baton_t *b = baton;
- const svn_ra_neon__xml_elm_t *elm =
- svn_ra_neon__lookup_xml_elem(multistatus_elements, nspace, name);
- *elem = elm ? validate_element(parent, elm->id) : SVN_RA_NEON__XML_DECLINE;
-
-
- if (parent == ELEM_prop)
- {
- svn_stringbuf_setempty(b->propname);
- if (strcmp(nspace, SVN_DAV_PROP_NS_DAV) == 0)
- svn_stringbuf_set(b->propname, SVN_PROP_PREFIX);
- else if (strcmp(nspace, "DAV:") == 0)
- svn_stringbuf_set(b->propname, "DAV:");
-
- svn_stringbuf_appendcstr(b->propname, name);
- }
-
- if (*elem < 1) /* ! > 0 */
- return SVN_NO_ERROR;
-
- switch (*elem)
- {
- case ELEM_propstat:
- b->in_propstat = TRUE;
- b->propstat_has_error = FALSE;
- break;
-
- default:
- break;
- }
-
- /* We're guaranteed to have ELM now: SVN_RA_NEON__XML_DECLINE < 1 */
- if (elm->flags & SVN_RA_NEON__XML_CDATA)
- {
- svn_stringbuf_setempty(b->cdata);
- b->want_cdata = b->cdata;
- }
-
- return SVN_NO_ERROR;
-}
-
-/* Implements svn_ra_neon__endelm_cb_t . */
-static svn_error_t *
-end_207_element(void *baton, int state,
- const char *nspace, const char *name)
-{
- multistatus_baton_t *b = baton;
-
- switch (state)
- {
- case ELEM_multistatus:
- if (b->contains_error)
- {
- if (svn_stringbuf_isempty(b->description))
- return svn_error_create(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL,
- _("The request response contained at least "
- "one error"));
- else if (b->contains_precondition_error)
- return svn_error_create(SVN_ERR_FS_PROP_BASEVALUE_MISMATCH, NULL,
- b->description->data);
- else
- return svn_error_create(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL,
- b->description->data);
- }
- break;
-
- case ELEM_responsedescription:
- if (b->in_propstat)
- svn_stringbuf_set(b->propstat_description, b->cdata->data);
- else
- {
- if (! svn_stringbuf_isempty(b->description))
- svn_stringbuf_appendcstr(b->description, "\n");
- svn_stringbuf_appendstr(b->description, b->cdata);
- }
- break;
-
- case ELEM_status:
- {
- ne_status status;
-
- if (ne_parse_statusline(b->cdata->data, &status) == 0)
- {
- /*### I wanted ||=, but I guess the end result is the same */
- if (! b->in_propstat)
- b->contains_error |= (status.klass != 2);
- else
- b->propstat_has_error = (status.klass != 2);
-
- /* Handle "412 Precondition Failed" specially */
- if (status.code == 412)
- b->contains_precondition_error = TRUE;
-
- free(status.reason_phrase);
- }
- else
- return svn_error_create(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL,
- _("The response contains a non-conforming "
- "HTTP status line"));
- }
- break;
-
- case ELEM_propstat:
- b->in_propstat = FALSE;
- b->contains_error |= b->propstat_has_error;
- svn_stringbuf_appendcstr(b->description,
- apr_psprintf(b->req->pool,
- _("Error setting property '%s': "),
- b->propname->data));
- svn_stringbuf_appendstr(b->description,
- b->propstat_description);
-
- default:
- /* do nothing */
- break;
- }
-
- /* When we have an element which wants cdata,
- we'll set it all up in start_207_element() again */
- b->want_cdata = NULL;
-
- return SVN_NO_ERROR;
-}
-
-
-/* Create a status parser attached to the request REQ. Detected errors
- will be returned there. */
-static void
-multistatus_parser_create(svn_ra_neon__request_t *req)
-{
- multistatus_baton_t *b = apr_pcalloc(req->pool, sizeof(*b));
-
- /* Create a parser, attached to REQ. (Ignore the return value.) */
- svn_ra_neon__xml_parser_create(req, ne_accept_207,
- start_207_element,
- svn_ra_neon__xml_collect_cdata,
- end_207_element, b);
- b->cdata = svn_stringbuf_create("", req->pool);
- b->description = svn_stringbuf_create("", req->pool);
- b->req = req;
-
- b->propname = svn_stringbuf_create("", req->pool);
- b->propstat_description = svn_stringbuf_create("", req->pool);
-}
-
-
-
-
-/* Neon request management */
-
-/* Forward declare */
-static apr_status_t
-dav_request_cleanup(void *baton);
-
-static apr_status_t
-dav_request_sess_cleanup(void *baton)
-{
- svn_ra_neon__request_t *req = baton;
-
- /* Make sure we don't run the 'child' cleanup anymore:
- the pool it refers to probably doesn't exist anymore when it
- finally does get run if it hasn't by now. */
- apr_pool_cleanup_kill(req->pool, req, dav_request_cleanup);
-
- if (req->ne_req)
- ne_request_destroy(req->ne_req);
-
- return APR_SUCCESS;
-}
-
-static apr_status_t
-dav_request_cleanup(void *baton)
-{
- svn_ra_neon__request_t *req = baton;
- apr_pool_cleanup_run(req->sess->pool, req, dav_request_sess_cleanup);
-
- return APR_SUCCESS;
-}
-
-
-/* Return a path-absolute relative URL, given a URL reference (which may
- be absolute or relative). */
-static const char *
-path_from_url(const char *url)
-{
- const char *p;
-
- /* Look for the scheme/authority separator. Stop if we see a path
- separator - that indicates that this definitely isn't an absolute URL. */
- for (p = url; *p; p++)
- if (*p == ':' || *p == '/')
- break;
-
- /* Check whether we found the scheme/authority separator. */
- if (*p++ != ':' || *p++ != '/' || *p++ != '/')
- {
- /* No separator, so it must already be relative. */
- return url;
- }
-
- /* Find the end of the authority section, indicated by the start of
- a path, query, or fragment section. */
- for (; *p; p++)
- if (*p == '/' || *p == '?' || *p == '#')
- break;
-
- /* Return a pointer to the rest of the URL, or to "/" if there
- was no next section. */
- return *p == '\0' ? "/" : p;
-}
-
-svn_error_t *
-svn_ra_neon__request_create(svn_ra_neon__request_t **request,
- svn_ra_neon__session_t *sess,
- const char *method, const char *url,
- apr_pool_t *pool)
-{
- apr_pool_t *reqpool = svn_pool_create(pool);
- svn_ra_neon__request_t *req;
- const char *path;
-
- /* We never want to send Neon an absolute URL, since that can cause
- problems with some servers (for example, those that may be accessed
- using different server names from different locations, or those that
- want to rewrite the incoming URL). If the URL passed in is absolute,
- convert it to a path-absolute relative URL. */
- path = path_from_url(url);
-
- req = apr_pcalloc(reqpool, sizeof(*req));
- req->ne_sess = sess->main_session_busy ? sess->ne_sess2 : sess->ne_sess;
- req->ne_req = ne_request_create(req->ne_sess, method, path);
- req->sess = sess;
- req->pool = reqpool;
- req->iterpool = svn_pool_create(req->pool);
- req->method = apr_pstrdup(req->pool, method);
- req->url = apr_pstrdup(req->pool, url);
- req->rv = -1;
-
- /* Neon resources may be NULL on out-of-memory */
- assert(req->ne_req != NULL);
- apr_pool_cleanup_register(sess->pool, req,
- dav_request_sess_cleanup,
- apr_pool_cleanup_null);
- apr_pool_cleanup_register(reqpool, req,
- dav_request_cleanup,
- apr_pool_cleanup_null);
-
- *request = req;
- return SVN_NO_ERROR;
-}
-
-static apr_status_t
-compressed_body_reader_cleanup(void *baton)
-{
- if (baton)
- ne_decompress_destroy(baton);
-
- return APR_SUCCESS;
-}
-
-/* Attach READER as a response reader for the request REQ, with the
- * acceptance function ACCPT. The response body data will be decompressed,
- * if compressed, before being passed to READER. USERDATA will be passed as
- * the first argument to the acceptance and reader callbacks. */
-static void
-attach_ne_body_reader(svn_ra_neon__request_t *req,
- ne_accept_response accpt,
- ne_block_reader reader,
- void *userdata)
-{
- if (req->sess->compression)
- {
- ne_decompress *decompress =
- ne_decompress_reader(req->ne_req, accpt, reader, userdata);
-
- apr_pool_cleanup_register(req->pool,
- decompress,
- compressed_body_reader_cleanup,
- apr_pool_cleanup_null);
- }
- else
- ne_add_response_body_reader(req->ne_req, accpt, reader, userdata);
-}
-
-
-typedef struct body_reader_wrapper_baton_t
-{
- svn_ra_neon__request_t *req;
- svn_ra_neon__block_reader real_reader;
- void *real_baton;
-} body_reader_wrapper_baton_t;
-
-static int
-body_reader_wrapper(void *userdata, const char *data, size_t len)
-{
- body_reader_wrapper_baton_t *b = userdata;
-
- if (b->req->err)
- /* We already had an error? Bail out. */
- return 1;
-
- SVN_RA_NEON__REQ_ERR
- (b->req,
- b->real_reader(b->real_baton, data, len));
-
- if (b->req->err)
- return 1;
-
- return 0;
-}
-
-void
-svn_ra_neon__add_response_body_reader(svn_ra_neon__request_t *req,
- ne_accept_response accpt,
- svn_ra_neon__block_reader reader,
- void *userdata)
-{
- body_reader_wrapper_baton_t *b = apr_palloc(req->pool, sizeof(*b));
-
- b->req = req;
- b->real_baton = userdata;
- b->real_reader = reader;
-
- attach_ne_body_reader(req, accpt, body_reader_wrapper, b);
-}
-
-
-
-const svn_ra_neon__xml_elm_t *
-svn_ra_neon__lookup_xml_elem(const svn_ra_neon__xml_elm_t *table,
- const char *nspace,
- const char *name)
-{
- /* placeholder for `unknown' element if it's present */
- const svn_ra_neon__xml_elm_t *elem_unknown = NULL;
- const svn_ra_neon__xml_elm_t *elem;
-
- for(elem = table; elem->nspace; ++elem)
- {
- if (strcmp(elem->nspace, nspace) == 0
- && strcmp(elem->name, name) == 0)
- return elem;
-
- /* Use a single loop to save CPU cycles.
- *
- * Maybe this element is defined as `unknown'? */
- if (elem->id == ELEM_unknown)
- elem_unknown = elem;
- }
-
- /* ELEM_unknown position in the table or NULL */
- return elem_unknown;
-}
-
-svn_error_t *
-svn_ra_neon__xml_collect_cdata(void *baton, int state,
- const char *cdata, size_t len)
-{
- svn_stringbuf_t **b = baton;
-
- if (*b)
- svn_stringbuf_appendbytes(*b, cdata, len);
-
- return SVN_NO_ERROR;
-}
-
-
-
-svn_error_t *
-svn_ra_neon__copy_href(svn_stringbuf_t *dst, const char *src,
- apr_pool_t *pool)
-{
- /* parse the PATH element out of the URL and store it.
-
- ### do we want to verify the rest matches the current session?
-
- Note: mod_dav does not (currently) use an absolute URL, but simply a
- server-relative path (i.e. this uri_parse is effectively a no-op).
- */
-
- apr_uri_t uri;
- apr_status_t apr_status;
-
- /* SRC can have trailing '/' */
- if (svn_path_is_url(src))
- src = svn_uri_canonicalize(src, pool);
- else
- src = svn_urlpath__canonicalize(src, pool);
- apr_status = apr_uri_parse(pool, src, &uri);
-
- if (apr_status != APR_SUCCESS)
- return svn_error_wrap_apr(apr_status,
- _("Unable to parse URL '%s'"),
- src);
-
- svn_stringbuf_setempty(dst);
- svn_stringbuf_appendcstr(dst, uri.path);
-
- return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-generate_error(svn_ra_neon__request_t *req, apr_pool_t *pool)
-{
- int errcode = SVN_ERR_RA_DAV_REQUEST_FAILED;
- const char *context =
- apr_psprintf(req->pool, _("%s of '%s'"), req->method, req->url);
- const char *msg;
- const char *hostport;
-
- /* Convert the return codes. */
- switch (req->rv)
- {
- case NE_OK:
- switch (req->code)
- {
- case 404:
- return svn_error_create(SVN_ERR_FS_NOT_FOUND, NULL,
- apr_psprintf(pool, _("'%s' path not found"),
- req->url));
- case 403:
- return svn_error_create(SVN_ERR_RA_DAV_FORBIDDEN, NULL,
- apr_psprintf(pool, _("Access to '%s' forbidden"),
- req->url));
-
- case 301:
- case 302:
- case 307:
- return svn_error_create
- (SVN_ERR_RA_DAV_RELOCATED, NULL,
- apr_psprintf(pool,
- (req->code == 301)
- ? _("Repository moved permanently to '%s';"
- " please relocate")
- : _("Repository moved temporarily to '%s';"
- " please relocate"),
- svn_ra_neon__request_get_location(req, pool)));
-
- default:
- return svn_error_create
- (errcode, NULL,
- apr_psprintf(pool,
- _("Server sent unexpected return value (%d %s) "
- "in response to %s request for '%s'"), req->code,
- req->code_desc, req->method, req->url));
- }
- case NE_AUTH:
- case NE_PROXYAUTH:
- errcode = SVN_ERR_RA_NOT_AUTHORIZED;
-#ifdef SVN_NEON_0_27
- /* neon >= 0.27 gives a descriptive error message after auth
- * failure; expose this since it's a useful diagnostic e.g. for
- * an unsupported challenge scheme, or a local GSSAPI error due
- * to an expired ticket. */
- SVN_ERR(svn_utf_cstring_to_utf8(&msg, ne_get_error(req->ne_sess), pool));
- msg = apr_psprintf(pool, _("authorization failed: %s"), msg);
-#else
- msg = _("authorization failed");
-#endif
- break;
-
- case NE_CONNECT:
- msg = _("could not connect to server");
- break;
-
- case NE_TIMEOUT:
- msg = _("timed out waiting for server");
- break;
-
- default:
- /* Get the error string from neon and convert to UTF-8. */
- SVN_ERR(svn_utf_cstring_to_utf8(&msg, ne_get_error(req->ne_sess), pool));
- break;
- }
-
- /* The hostname may contain non-ASCII characters, so convert it to UTF-8. */
- SVN_ERR(svn_utf_cstring_to_utf8(&hostport,
- ne_get_server_hostport(req->ne_sess), pool));
-
- /*### This is a translation nightmare. Make sure to compose full strings
- and mark those for translation. */
- return svn_error_createf(errcode, NULL, _("%s: %s (%s://%s)"),
- context, msg, ne_get_scheme(req->ne_sess),
- hostport);
-}
-
-
-/** Error parsing **/
-
-
-/* Custom function of type ne_accept_response. */
-static int ra_neon_error_accepter(void *userdata,
- ne_request *req,
- const ne_status *st)
-{
- /* Before, this function was being run for *all* responses including
- the 401 auth challenge. In neon 0.24.x that was harmless. But
- in neon 0.25.0, trying to parse a 401 response as XML using
- ne_xml_parse_v aborts the response; so the auth hooks never got a
- chance. */
- ne_content_type ctype;
-
- /* Only accept non-2xx responses with text/xml content-type */
- if (st->klass != 2 && ne_get_content_type(req, &ctype) == 0)
- {
- int is_xml =
- (strcmp(ctype.type, "text") == 0 && strcmp(ctype.subtype, "xml") == 0);
- ne_free(ctype.value);
- return is_xml;
- }
- else
- return 0;
-}
-
-
-static const svn_ra_neon__xml_elm_t error_elements[] =
-{
- { "DAV:", "error", ELEM_error, 0 },
- { "svn:", "error", ELEM_svn_error, 0 },
- { "http://apache.org/dav/xmlns", "human-readable",
- ELEM_human_readable, SVN_RA_NEON__XML_CDATA },
-
- /* ### our validator doesn't yet recognize the rich, specific
- <D:some-condition-failed/> objects as defined by DeltaV.*/
-
- { NULL }
-};
-
-
-static int validate_error_elements(svn_ra_neon__xml_elmid parent,
- svn_ra_neon__xml_elmid child)
-{
- switch (parent)
- {
- case ELEM_root:
- if (child == ELEM_error)
- return child;
- else
- return SVN_RA_NEON__XML_INVALID;
-
- case ELEM_error:
- if (child == ELEM_svn_error
- || child == ELEM_human_readable)
- return child;
- else
- return SVN_RA_NEON__XML_DECLINE; /* ignore if something else
- was in there */
-
- default:
- return SVN_RA_NEON__XML_DECLINE;
- }
-
- /* NOTREACHED */
-}
-
-
-static int
-collect_error_cdata(void *baton, int state,
- const char *cdata, size_t len)
-{
- svn_stringbuf_t **b = baton;
-
- if (*b)
- svn_stringbuf_appendbytes(*b, cdata, len);
-
- return 0;
-}
-
-typedef struct error_parser_baton
-{
- svn_stringbuf_t *want_cdata;
- svn_stringbuf_t *cdata;
-
- svn_error_t **dst_err;
- svn_error_t *tmp_err;
- svn_boolean_t *marshalled_error;
-} error_parser_baton_t;
-
-
-static int
-start_err_element(void *baton, int parent,
- const char *nspace, const char *name, const char **atts)
-{
- const svn_ra_neon__xml_elm_t *elm
- = svn_ra_neon__lookup_xml_elem(error_elements, nspace, name);
- int acc = elm
- ? validate_error_elements(parent, elm->id) : SVN_RA_NEON__XML_DECLINE;
- error_parser_baton_t *b = baton;
- svn_error_t **err = &(b->tmp_err);
-
- if (acc < 1) /* ! > 0 */
- return acc;
-
- switch (elm->id)
- {
- case ELEM_svn_error:
- {
- /* allocate the svn_error_t. Hopefully the value will be
- overwritten by the <human-readable> tag, or even someday by
- a <D:failed-precondition/> tag. */
- *err = svn_error_create(APR_EGENERAL, NULL,
- _("General svn error from server"));
- break;
- }
- case ELEM_human_readable:
- {
- /* get the errorcode attribute if present */
- const char *errcode_str =
- svn_xml_get_attr_value("errcode", /* ### make constant in
- some mod_dav header? */
- atts);
-
- if (errcode_str && *err)
- {
- apr_int64_t val;
- svn_error_t *err2;
-
- err2 = svn_cstring_atoi64(&val, errcode_str);
- if (err2)
- {
- svn_error_clear(err2);
- break;
- }
- (*err)->apr_err = (apr_status_t)val;
- }
-
- break;
- }
-
- default:
- break;
- }
-
- switch (elm->id)
- {
- case ELEM_human_readable:
- b->want_cdata = b->cdata;
- svn_stringbuf_setempty(b->want_cdata);
- break;
-
- default:
- b->want_cdata = NULL;
- break;
- }
-
- return elm->id;
-}
-
-static int
-end_err_element(void *baton, int state, const char *nspace, const char *name)
-{
- error_parser_baton_t *b = baton;
- svn_error_t **err = &(b->tmp_err);
-
- switch (state)
- {
- case ELEM_human_readable:
- {
- if (b->cdata->data && *err)
- {
- /* On the server dav_error_response_tag() will add a leading
- and trailing newline if DEBUG_CR is defined in mod_dav.h,
- so remove any such characters here. */
- apr_size_t len;
- const char *cd = b->cdata->data;
- if (*cd == '\n')
- ++cd;
- len = strlen(cd);
- if (len > 0 && cd[len-1] == '\n')
- --len;
-
- (*err)->message = apr_pstrmemdup((*err)->pool, cd, len);
- }
- break;
- }
-
- case ELEM_error:
- {
- if (*(b->dst_err))
- svn_error_clear(b->tmp_err);
- else if (b->tmp_err)
- {
- *(b->dst_err) = b->tmp_err;
- if (b->marshalled_error)
- *(b->marshalled_error) = TRUE;
- }
- b->tmp_err = NULL;
- break;
- }
-
- default:
- break;
- }
-
- return 0;
-}
-
-static apr_status_t
-error_parser_baton_cleanup(void *baton)
-{
- error_parser_baton_t *b = baton;
-
- if (b->tmp_err)
- svn_error_clear(b->tmp_err);
-
- return APR_SUCCESS;
-}
-
-static ne_xml_parser *
-error_parser_create(svn_ra_neon__request_t *req)
-{
- error_parser_baton_t *b = apr_palloc(req->pool, sizeof(*b));
- ne_xml_parser *error_parser;
-
- b->dst_err = &(req->err);
- b->marshalled_error = &(req->marshalled_error);
- b->tmp_err = NULL;
-
- b->want_cdata = NULL;
- b->cdata = svn_stringbuf_create("", req->pool);
-
- /* attach a standard <D:error> body parser to the request */
- error_parser = xml_parser_create(req);
- ne_xml_push_handler(error_parser,
- start_err_element,
- collect_error_cdata,
- end_err_element, b);
-
- apr_pool_cleanup_register(req->pool, b,
- error_parser_baton_cleanup,
- apr_pool_cleanup_null);
-
- /* Register the "error" accepter and body-reader with the request --
- the one to use when HTTP status is *not* 2XX */
- attach_ne_body_reader(req, ra_neon_error_accepter,
- ne_xml_parse_v, error_parser);
-
- return error_parser;
-}
-
-
-/* A body provider for ne_set_request_body_provider that pulls data
- * from an APR file. See ne_request.h for a description of the
- * interface.
- */
-
-typedef struct body_provider_baton_t
-{
- svn_ra_neon__request_t *req;
- apr_file_t *body_file;
-} body_provider_baton_t;
-
-static ssize_t ra_neon_body_provider(void *userdata,
- char *buffer,
- size_t buflen)
-{
- body_provider_baton_t *b = userdata;
- svn_ra_neon__request_t *req = b->req;
- apr_file_t *body_file = b->body_file;
-
- if (req->sess->callbacks &&
- req->sess->callbacks->cancel_func)
- SVN_RA_NEON__REQ_ERR
- (req, (req->sess->callbacks->cancel_func)(req->sess->callback_baton));
-
- if (req->err)
- return -1;
-
- svn_pool_clear(req->iterpool);
- if (buflen == 0)
- {
- /* This is the beginning of a new body pull. Rewind the file. */
- apr_off_t offset = 0;
- SVN_RA_NEON__REQ_ERR
- (b->req,
- svn_io_file_seek(body_file, APR_SET, &offset, req->iterpool));
- return (req->err ? -1 : 0);
- }
- else
- {
- apr_size_t nbytes = buflen;
- svn_error_t *err = svn_io_file_read(body_file, buffer, &nbytes,
- req->iterpool);
- if (err)
- {
- if (APR_STATUS_IS_EOF(err->apr_err))
- {
- svn_error_clear(err);
- return 0;
- }
-
- SVN_RA_NEON__REQ_ERR(req, err);
- return -1;
- }
- else
- return nbytes;
- }
-}
-
-
-svn_error_t *svn_ra_neon__set_neon_body_provider(svn_ra_neon__request_t *req,
- apr_file_t *body_file)
-{
- apr_status_t status;
- apr_finfo_t finfo;
- body_provider_baton_t *b = apr_palloc(req->pool, sizeof(*b));
-
- status = apr_file_info_get(&finfo, APR_FINFO_SIZE, body_file);
- if (status)
- return svn_error_wrap_apr(status,
- _("Can't calculate the request body size"));
-
- b->body_file = body_file;
- b->req = req;
-
-#if defined(SVN_NEON_0_27)
- ne_set_request_body_provider(req->ne_req, (ne_off_t)finfo.size,
- ra_neon_body_provider, b);
-#elif defined(NE_LFS)
- ne_set_request_body_provider64(req->ne_req, finfo.size,
- ra_neon_body_provider, b);
-#else
- /* Cut size to 32 bit */
- ne_set_request_body_provider(req->ne_req, (size_t) finfo.size,
- ra_neon_body_provider, b);
-#endif
-
- return SVN_NO_ERROR;
-}
-
-
-typedef struct spool_reader_baton_t
-{
- const char *spool_file_name;
- apr_file_t *spool_file;
- svn_ra_neon__request_t *req;
-} spool_reader_baton_t;
-
-
-/* This implements the svn_ra_neon__block_reader() callback interface. */
-static svn_error_t *
-spool_reader(void *userdata,
- const char *buf,
- size_t len)
-{
- spool_reader_baton_t *baton = userdata;
-
- SVN_ERR(svn_io_file_write_full(baton->spool_file, buf,
- len, NULL, baton->req->iterpool));
- svn_pool_clear(baton->req->iterpool);
-
- return SVN_NO_ERROR;
-}
-
-
-static svn_error_t *
-parse_spool_file(svn_ra_neon__session_t *ras,
- const char *spool_file_name,
- ne_xml_parser *success_parser,
- apr_pool_t *pool)
-{
- svn_stream_t *spool_stream;
- char *buf = apr_palloc(pool, SVN__STREAM_CHUNK_SIZE);
- apr_size_t len;
-
- SVN_ERR(svn_stream_open_readonly(&spool_stream, spool_file_name, pool, pool));
- while (1)
- {
- if (ras->callbacks &&
- ras->callbacks->cancel_func)
- SVN_ERR((ras->callbacks->cancel_func)(ras->callback_baton));
-
- len = SVN__STREAM_CHUNK_SIZE;
- SVN_ERR(svn_stream_read(spool_stream, buf, &len));
- if (len > 0)
- if (ne_xml_parse(success_parser, buf, len) != 0)
- /* The parse encountered an error or
- was aborted by a user defined callback */
- break;
-
- if (len != SVN__STREAM_CHUNK_SIZE)
- break;
- }
- return svn_stream_close(spool_stream);
-}
-
-
-/* A baton that is used along with a set of Neon ne_startelm_cb,
- * ne_cdata_cb, and ne_endelm_cb callbacks to handle conversion
- * from Subversion style errors to Neon style errors.
- *
- * The underlying Subversion callbacks are called, and if errors
- * are returned they are stored in this baton and a Neon level
- * error code is returned to the parser.
- */
-typedef struct parser_wrapper_baton_t {
- svn_ra_neon__request_t *req;
- ne_xml_parser *parser;
-
- void *baton;
- svn_ra_neon__startelm_cb_t startelm_cb;
- svn_ra_neon__cdata_cb_t cdata_cb;
- svn_ra_neon__endelm_cb_t endelm_cb;
-} parser_wrapper_baton_t;
-
-static int
-wrapper_startelm_cb(void *baton,
- int parent,
- const char *nspace,
- const char *name,
- const char **atts)
-{
- parser_wrapper_baton_t *pwb = baton;
- int elem = SVN_RA_NEON__XML_DECLINE;
-
- if (pwb->startelm_cb)
- SVN_RA_NEON__REQ_ERR
- (pwb->req,
- pwb->startelm_cb(&elem, pwb->baton, parent, nspace, name, atts));
-
- if (elem == SVN_RA_NEON__XML_INVALID)
- SVN_RA_NEON__REQ_ERR
- (pwb->req,
- svn_error_create(SVN_ERR_XML_MALFORMED, NULL, NULL));
-
- if (pwb->req->err)
- return NE_XML_ABORT;
-
- return elem;
-}
-
-static int
-wrapper_cdata_cb(void *baton, int state, const char *cdata, size_t len)
-{
- parser_wrapper_baton_t *pwb = baton;
-
- if (pwb->cdata_cb)
- SVN_RA_NEON__REQ_ERR
- (pwb->req,
- pwb->cdata_cb(pwb->baton, state, cdata, len));
-
- if (pwb->req->err)
- return NE_XML_ABORT;
-
- return 0;
-}
-
-static int
-wrapper_endelm_cb(void *baton,
- int state,
- const char *nspace,
- const char *name)
-{
- parser_wrapper_baton_t *pwb = baton;
-
- if (pwb->endelm_cb)
- SVN_RA_NEON__REQ_ERR
- (pwb->req,
- pwb->endelm_cb(pwb->baton, state, nspace, name));
-
- if (pwb->req->err)
- return NE_XML_ABORT;
-
- return 0;
-}
-
-svn_error_t *
-svn_ra_neon__check_parse_error(const char *method,
- ne_xml_parser *xml_parser,
- const char *url)
-{
- const char *msg = ne_xml_get_error(xml_parser);
- if (msg != NULL && *msg != '\0')
- return svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL,
- _("The %s request returned invalid XML "
- "in the response: %s (%s)"),
- method, msg, url);
- return SVN_NO_ERROR;
-}
-
-static int
-wrapper_reader_cb(void *baton, const char *data, size_t len)
-{
- parser_wrapper_baton_t *pwb = baton;
- svn_ra_neon__session_t *sess = pwb->req->sess;
- int parser_status;
-
- if (pwb->req->err)
- return 1;
-
- if (sess->callbacks->cancel_func)
- SVN_RA_NEON__REQ_ERR
- (pwb->req,
- (sess->callbacks->cancel_func)(sess->callback_baton));
-
- if (pwb->req->err)
- return 1;
-
- parser_status = ne_xml_parse(pwb->parser, data, len);
- if (parser_status)
- {
- /* Pass XML parser error. */
- SVN_RA_NEON__REQ_ERR(pwb->req,
- svn_ra_neon__check_parse_error(pwb->req->method,
- pwb->parser,
- pwb->req->url));
- }
-
- return parser_status;
-}
-
-ne_xml_parser *
-svn_ra_neon__xml_parser_create(svn_ra_neon__request_t *req,
- ne_accept_response accpt,
- svn_ra_neon__startelm_cb_t startelm_cb,
- svn_ra_neon__cdata_cb_t cdata_cb,
- svn_ra_neon__endelm_cb_t endelm_cb,
- void *baton)
-{
- ne_xml_parser *p = xml_parser_create(req);
- parser_wrapper_baton_t *pwb = apr_palloc(req->pool, sizeof(*pwb));
-
- pwb->req = req;
- pwb->parser = p;
- pwb->baton = baton;
- pwb->startelm_cb = startelm_cb;
- pwb->cdata_cb = cdata_cb;
- pwb->endelm_cb = endelm_cb;
-
- ne_xml_push_handler(p,
- wrapper_startelm_cb,
- wrapper_cdata_cb,
- wrapper_endelm_cb, pwb);
-
- if (accpt)
- attach_ne_body_reader(req, accpt, wrapper_reader_cb, pwb);
-
- return p;
-}
-
-
-typedef struct cancellation_baton_t
-{
- ne_block_reader real_cb;
- void *real_userdata;
- svn_ra_neon__request_t *req;
-} cancellation_baton_t;
-
-static int
-cancellation_callback(void *userdata, const char *block, size_t len)
-{
- cancellation_baton_t *b = userdata;
- svn_ra_neon__session_t *ras = b->req->sess;
-
- if (ras->callbacks->cancel_func)
- SVN_RA_NEON__REQ_ERR
- (b->req,
- (ras->callbacks->cancel_func)(ras->callback_baton));
-
- if (b->req->err)
- return 1;
- else
- return (b->real_cb)(b->real_userdata, block, len);
-}
-
-
-static cancellation_baton_t *
-get_cancellation_baton(svn_ra_neon__request_t *req,
- ne_block_reader real_cb,
- void *real_userdata,
- apr_pool_t *pool)
-{
- cancellation_baton_t *b = apr_palloc(pool, sizeof(*b));
-
- b->real_cb = real_cb;
- b->real_userdata = real_userdata;
- b->req = req;
-
- return b;
-}
-
-/* See doc string for svn_ra_neon__parsed_request. */
-static svn_error_t *
-parsed_request(svn_ra_neon__request_t *req,
- svn_ra_neon__session_t *ras,
- const char *method,
- const char *url,
- const char *body,
- apr_file_t *body_file,
- void set_parser(ne_xml_parser *parser,
- void *baton),
- svn_ra_neon__startelm_cb_t startelm_cb,
- svn_ra_neon__cdata_cb_t cdata_cb,
- svn_ra_neon__endelm_cb_t endelm_cb,
- void *baton,
- apr_hash_t *extra_headers,
- int *status_code,
- svn_boolean_t spool_response,
- apr_pool_t *pool)
-{
- ne_xml_parser *success_parser = NULL;
- spool_reader_baton_t spool_reader_baton;
-
- if (body == NULL)
- SVN_ERR(svn_ra_neon__set_neon_body_provider(req, body_file));
-
- /* ### use a symbolic name somewhere for this MIME type? */
- ne_add_request_header(req->ne_req, "Content-Type", "text/xml");
-
- /* create a parser to read the normal response body */
- success_parser = svn_ra_neon__xml_parser_create(req, NULL,
- startelm_cb, cdata_cb,
- endelm_cb, baton);
-
- /* if our caller is interested in having access to this parser, call
- the SET_PARSER callback with BATON. */
- if (set_parser != NULL)
- set_parser(success_parser, baton);
-
- /* Register the "main" accepter and body-reader with the request --
- the one to use when the HTTP status is 2XX. If we are spooling
- the response to disk first, we use our custom spool reader. */
- if (spool_response)
- {
- /* Blow the temp-file away as soon as we eliminate the entire request */
- SVN_ERR(svn_io_open_unique_file3(&spool_reader_baton.spool_file,
- &spool_reader_baton.spool_file_name,
- NULL,
- svn_io_file_del_on_pool_cleanup,
- req->pool, pool));
- spool_reader_baton.req = req;
-
- svn_ra_neon__add_response_body_reader(req, ne_accept_2xx, spool_reader,
- &spool_reader_baton);
- }
- else
- attach_ne_body_reader(req, ne_accept_2xx, cancellation_callback,
- get_cancellation_baton(req, ne_xml_parse_v,
- success_parser, pool));
-
- /* run the request and get the resulting status code. */
- SVN_ERR(svn_ra_neon__request_dispatch(
- status_code, req, extra_headers, body,
- (strcmp(method, "PROPFIND") == 0) ? 207 : 200,
- 0, pool));
-
- if (spool_response)
- {
- /* All done with the temporary file we spooled the response into. */
- (void) apr_file_close(spool_reader_baton.spool_file);
-
- /* The success parser may set an error value in req->err */
- SVN_RA_NEON__REQ_ERR
- (req, parse_spool_file(ras, spool_reader_baton.spool_file_name,
- success_parser, req->pool));
- if (req->err)
- {
- svn_error_compose(req->err, svn_error_createf
- (SVN_ERR_RA_DAV_REQUEST_FAILED, NULL,
- _("Error reading spooled %s request response"),
- method));
- return req->err;
- }
- }
-
- SVN_ERR(svn_ra_neon__check_parse_error(method, success_parser, url));
-
- return SVN_NO_ERROR;
-}
-
-
-svn_error_t *
-svn_ra_neon__parsed_request(svn_ra_neon__session_t *sess,
- const char *method,
- const char *url,
- const char *body,
- apr_file_t *body_file,
- void set_parser(ne_xml_parser *parser,
- void *baton),
- svn_ra_neon__startelm_cb_t startelm_cb,
- svn_ra_neon__cdata_cb_t cdata_cb,
- svn_ra_neon__endelm_cb_t endelm_cb,
- void *baton,
- apr_hash_t *extra_headers,
- int *status_code,
- svn_boolean_t spool_response,
- apr_pool_t *pool)
-{
- /* create/prep the request */
- svn_ra_neon__request_t* req;
- svn_error_t *err;
-
- SVN_ERR(svn_ra_neon__request_create(&req, sess, method, url, pool));
-
- err = parsed_request(req, sess, method, url, body, body_file,
- set_parser, startelm_cb, cdata_cb, endelm_cb,
- baton, extra_headers, status_code, spool_response,
- pool);
-
- svn_ra_neon__request_destroy(req);
- return err;
-}
-
-
-svn_error_t *
-svn_ra_neon__simple_request(int *code,
- svn_ra_neon__session_t *ras,
- const char *method,
- const char *url,
- apr_hash_t *extra_headers,
- const char *body,
- int okay_1, int okay_2, apr_pool_t *pool)
-{
- svn_ra_neon__request_t *req;
- svn_error_t *err;
-
- SVN_ERR(svn_ra_neon__request_create(&req, ras, method, url, pool));
-
- multistatus_parser_create(req);
-
- /* svn_ra_neon__request_dispatch() adds the custom error response
- reader. Neon will take care of the Content-Length calculation */
- err = svn_ra_neon__request_dispatch(code, req, extra_headers,
- body ? body : "",
- okay_1, okay_2, pool);
- svn_ra_neon__request_destroy(req);
-
- return err;
-}
-
-void
-svn_ra_neon__add_depth_header(apr_hash_t *extra_headers, int depth)
-{
- /* assert(extra_headers != NULL);
- assert(depth == SVN_RA_NEON__DEPTH_ZERO
- || depth == SVN_RA_NEON__DEPTH_ONE
- || depth == SVN_RA_NEON__DEPTH_INFINITE); */
- apr_hash_set(extra_headers, "Depth", APR_HASH_KEY_STRING,
- (depth == SVN_RA_NEON__DEPTH_INFINITE)
- ? "infinity" : (depth == SVN_RA_NEON__DEPTH_ZERO) ? "0" : "1");
-
- return;
-}
-
-
-svn_error_t *
-svn_ra_neon__copy(svn_ra_neon__session_t *ras,
- svn_boolean_t overwrite,
- int depth,
- const char *src,
- const char *dst,
- apr_pool_t *pool)
-{
- const char *abs_dst;
- apr_hash_t *extra_headers = apr_hash_make(pool);
-
- abs_dst = apr_psprintf(pool, "%s://%s%s", ne_get_scheme(ras->ne_sess),
- ne_get_server_hostport(ras->ne_sess), dst);
- apr_hash_set(extra_headers, "Destination", APR_HASH_KEY_STRING, abs_dst);
- apr_hash_set(extra_headers, "Overwrite", APR_HASH_KEY_STRING,
- overwrite ? "T" : "F");
- svn_ra_neon__add_depth_header(extra_headers, depth);
-
- return svn_ra_neon__simple_request(NULL, ras, "COPY", src, extra_headers,
- NULL, 201, 204, pool);
-}
-
-
-
-svn_error_t *
-svn_ra_neon__maybe_store_auth_info(svn_ra_neon__session_t *ras,
- apr_pool_t *pool)
-{
- /* No auth_baton? Never mind. */
- if (! ras->callbacks->auth_baton)
- return SVN_NO_ERROR;
-
- /* If we ever got credentials, ask the iter_baton to save them. */
- return svn_auth_save_credentials(ras->auth_iterstate, pool);
-}
-
-
-svn_error_t *
-svn_ra_neon__maybe_store_auth_info_after_result(svn_error_t *err,
- svn_ra_neon__session_t *ras,
- apr_pool_t *pool)
-{
- if (! err || (err->apr_err != SVN_ERR_RA_NOT_AUTHORIZED))
- {
- svn_error_t *err2 = svn_ra_neon__maybe_store_auth_info(ras, pool);
- if (err2 && ! err)
- return err2;
- else if (err)
- {
- svn_error_clear(err2);
- return err;
- }
- }
-
- return err;
-}
-
-
-svn_error_t *
-svn_ra_neon__request_dispatch(int *code_p,
- svn_ra_neon__request_t *req,
- apr_hash_t *extra_headers,
- const char *body,
- int okay_1,
- int okay_2,
- apr_pool_t *pool)
-{
- ne_xml_parser *error_parser;
- const ne_status *statstruct;
-
- /* add any extra headers passed in by caller. */
- if (extra_headers != NULL)
- {
- apr_hash_index_t *hi;
- for (hi = apr_hash_first(pool, extra_headers);
- hi; hi = apr_hash_next(hi))
- {
- const void *key;
- void *val;
- apr_hash_this(hi, &key, NULL, &val);
- ne_add_request_header(req->ne_req,
- (const char *) key, (const char *) val);
- }
- }
-
- /* Certain headers must be transmitted unconditionally with every
- request; see issue #3255 ("mod_dav_svn does not pass client
- capabilities to start-commit hooks") for why. It's okay if one
- of these headers was already added via extra_headers above --
- they are all idempotent headers.
-
- Note that at most one could have been sent via extra_headers,
- because extra_headers is a hash and the key would be the same for
- all of them: "DAV". In a just and righteous world, extra_headers
- would be an array, not a hash, so that callers could send the
- same header with different values too. But, apparently, that
- hasn't been necessary yet. */
- ne_add_request_header(req->ne_req, "DAV", SVN_DAV_NS_DAV_SVN_DEPTH);
- ne_add_request_header(req->ne_req, "DAV", SVN_DAV_NS_DAV_SVN_MERGEINFO);
- ne_add_request_header(req->ne_req, "DAV", SVN_DAV_NS_DAV_SVN_LOG_REVPROPS);
-
- if (body)
- ne_set_request_body_buffer(req->ne_req, body, strlen(body));
-
- /* attach a standard <D:error> body parser to the request */
- error_parser = error_parser_create(req);
-
- if (req->ne_sess == req->sess->ne_sess) /* We're consuming 'session 1' */
- req->sess->main_session_busy = TRUE;
- /* run the request, see what comes back. */
- req->rv = ne_request_dispatch(req->ne_req);
- if (req->ne_sess == req->sess->ne_sess) /* We're done consuming 'session 1' */
- req->sess->main_session_busy = FALSE;
-
- /* Save values from the request */
- statstruct = ne_get_status(req->ne_req);
- req->code_desc = apr_pstrdup(pool, statstruct->reason_phrase);
- req->code = statstruct->code;
-
- /* If we see a successful request that used authentication, we should store
- the credentials for future use. */
- if (req->sess->auth_used
- && statstruct->code < 400)
- {
- req->sess->auth_used = FALSE;
- SVN_ERR(svn_ra_neon__maybe_store_auth_info(req->sess, pool));
- }
-
- if (code_p)
- *code_p = req->code;
-
- if (!req->marshalled_error)
- SVN_ERR(req->err);
-
- /* If the status code was one of the two that we expected, then go
- ahead and return now. IGNORE any marshalled error. */
- if (req->rv == NE_OK && (req->code == okay_1 || req->code == okay_2))
- return SVN_NO_ERROR;
-
- /* Any other errors? Report them */
- SVN_ERR(req->err);
-
- SVN_ERR(svn_ra_neon__check_parse_error(req->method, error_parser, req->url));
-
- /* We either have a neon error, or some other error
- that we didn't expect. */
- return generate_error(req, pool);
-}
-
-
-const char *
-svn_ra_neon__request_get_location(svn_ra_neon__request_t *request,
- apr_pool_t *pool)
-{
- const char *val = ne_get_response_header(request->ne_req, "Location");
- return val ? svn_urlpath__canonicalize(val, pool) : NULL;
-}
-
-const char *
-svn_ra_neon__uri_unparse(const ne_uri *uri,
- apr_pool_t *pool)
-{
- char *unparsed_uri;
- const char *result;
-
- /* Unparse uri. */
- unparsed_uri = ne_uri_unparse(uri);
-
- /* Copy string to result pool, and make sure it conforms to
- Subversion rules */
- result = svn_uri_canonicalize(unparsed_uri, pool);
-
- /* Free neon's allocated copy. */
- ne_free(unparsed_uri);
-
- /* Return string allocated in result pool. */
- return result;
-}
-
-/* Sets *SUPPORTS_DEADPROP_COUNT to non-zero if server supports
- * deadprop-count property. */
-svn_error_t *
-svn_ra_neon__get_deadprop_count_support(svn_boolean_t *supported,
- svn_ra_neon__session_t *ras,
- const char *final_url,
- apr_pool_t *pool)
-{
- /* The property we need to fetch to see whether the server we are
- connected to supports the deadprop-count property. */
- static const ne_propname deadprop_count_support_props[] =
- {
- { SVN_DAV_PROP_NS_DAV, "deadprop-count" },
- { NULL }
- };
-
- if (SVN_RA_NEON__HAVE_HTTPV2_SUPPORT(ras))
- {
- /* HTTPv2 enabled servers always supports deadprop-count property. */
- *supported = TRUE;
- return SVN_NO_ERROR;
- }
-
- /* Check if we already checked deadprop_count support. */
- if (ras->supports_deadprop_count == svn_tristate_unknown)
- {
- svn_ra_neon__resource_t *rsrc;
- const svn_string_t *deadprop_count;
-
- SVN_ERR(svn_ra_neon__get_props_resource(&rsrc, ras, final_url, NULL,
- deadprop_count_support_props,
- pool));
- deadprop_count = apr_hash_get(rsrc->propset,
- SVN_RA_NEON__PROP_DEADPROP_COUNT,
- APR_HASH_KEY_STRING);
- if (deadprop_count != NULL)
- {
- ras->supports_deadprop_count = svn_tristate_true;
- }
- else
- {
- ras->supports_deadprop_count = svn_tristate_false;
- }
- }
-
- *supported = (ras->supports_deadprop_count == svn_tristate_true);
-
- return SVN_NO_ERROR;
-}
diff --git a/subversion/libsvn_ra_serf/blame.c b/subversion/libsvn_ra_serf/blame.c
index c166ee7..b6f136a 100644
--- a/subversion/libsvn_ra_serf/blame.c
+++ b/subversion/libsvn_ra_serf/blame.c
@@ -22,11 +22,9 @@
*/
#include <apr_uri.h>
-
-#include <expat.h>
-
#include <serf.h>
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_ra.h"
#include "svn_dav.h"
@@ -39,6 +37,8 @@
#include "svn_private_config.h"
+#include "private/svn_string_private.h"
+
#include "ra_serf.h"
#include "../libsvn_ra/ra_loader.h"
@@ -47,7 +47,7 @@
* This enum represents the current state of our XML parsing for a REPORT.
*/
typedef enum blame_state_e {
- NONE = 0,
+ INITIAL = 0,
FILE_REVS_REPORT,
FILE_REV,
REV_PROP,
@@ -57,43 +57,6 @@ typedef enum blame_state_e {
TXDELTA
} blame_state_e;
-typedef struct blame_info_t {
- /* Current pool. */
- apr_pool_t *pool;
-
- /* our suspicious file */
- const char *path;
-
- /* the intended suspect */
- svn_revnum_t rev;
-
- /* Hashtable of revision properties */
- apr_hash_t *rev_props;
-
- /* Added and removed properties (svn_prop_t*'s) */
- apr_array_header_t *prop_diffs;
-
- /* txdelta */
- svn_txdelta_window_handler_t txdelta;
- void *txdelta_baton;
-
- /* returned txdelta stream */
- svn_stream_t *stream;
-
- /* Is this property base64-encoded? */
- svn_boolean_t prop_base64;
-
- /* The currently collected value as we build it up */
- const char *prop_name;
- const char *prop_attr;
- apr_size_t prop_attr_len;
-
- svn_string_t *prop_string;
-
- /* Merged revision flag */
- svn_boolean_t merged_revision;
-
-} blame_info_t;
typedef struct blame_context_t {
/* pool passed to get_file_revs */
@@ -105,281 +68,211 @@ typedef struct blame_context_t {
svn_revnum_t end;
svn_boolean_t include_merged_revisions;
- /* are we done? */
- svn_boolean_t done;
-
/* blame handler and baton */
svn_file_rev_handler_t file_rev;
void *file_rev_baton;
+
+ /* As we parse each FILE_REV, we collect data in these variables:
+ property changes and new content. STREAM is valid when we're
+ in the TXDELTA state, processing the incoming cdata. */
+ apr_hash_t *rev_props;
+ apr_array_header_t *prop_diffs;
+ apr_pool_t *state_pool; /* put property stuff in here */
+
+ svn_stream_t *stream;
+
} blame_context_t;
-
-static blame_info_t *
-push_state(svn_ra_serf__xml_parser_t *parser,
- blame_context_t *blame_ctx,
- blame_state_e state)
-{
- svn_ra_serf__xml_push_state(parser, state);
- if (state == FILE_REV)
- {
- blame_info_t *info;
+#define D_ "DAV:"
+#define S_ SVN_XML_NAMESPACE
+static const svn_ra_serf__xml_transition_t blame_ttable[] = {
+ { INITIAL, S_, "file-revs-report", FILE_REVS_REPORT,
+ FALSE, { NULL }, FALSE },
- info = apr_palloc(parser->state->pool, sizeof(*info));
+ { FILE_REVS_REPORT, S_, "file-rev", FILE_REV,
+ FALSE, { "path", "rev", NULL }, TRUE },
- info->pool = parser->state->pool;
+ { FILE_REV, S_, "rev-prop", REV_PROP,
+ TRUE, { "name", "?encoding", NULL }, TRUE },
- info->rev = SVN_INVALID_REVNUM;
- info->path = NULL;
+ { FILE_REV, S_, "set-prop", SET_PROP,
+ TRUE, { "name", "?encoding", NULL }, TRUE },
- info->rev_props = apr_hash_make(info->pool);
- info->prop_diffs = apr_array_make(info->pool, 0, sizeof(svn_prop_t));
+ { FILE_REV, S_, "remove-prop", REMOVE_PROP,
+ FALSE, { "name", NULL }, TRUE },
- info->stream = NULL;
- info->merged_revision = FALSE;
+ { FILE_REV, S_, "merged-revision", MERGED_REVISION,
+ FALSE, { NULL }, TRUE },
- parser->state->private = info;
- }
+ { FILE_REV, S_, "txdelta", TXDELTA,
+ FALSE, { NULL }, TRUE },
+
+ { 0 }
+};
- return parser->state->private;
-}
-static const svn_string_t *
-create_propval(blame_info_t *info)
+/* Conforms to svn_ra_serf__xml_opened_t */
+static svn_error_t *
+blame_opened(svn_ra_serf__xml_estate_t *xes,
+ void *baton,
+ int entered_state,
+ const svn_ra_serf__dav_props_t *tag,
+ apr_pool_t *scratch_pool)
{
- const svn_string_t *s;
+ blame_context_t *blame_ctx = baton;
- if (!info->prop_attr)
+ if (entered_state == FILE_REV)
{
- return svn_string_create("", info->pool);
+ apr_pool_t *state_pool = svn_ra_serf__xml_state_pool(xes);
+
+ /* Child elements will store properties in these structures. */
+ blame_ctx->rev_props = apr_hash_make(state_pool);
+ blame_ctx->prop_diffs = apr_array_make(state_pool,
+ 5, sizeof(svn_prop_t));
+ blame_ctx->state_pool = state_pool;
+
+ /* Clear this, so we can detect the absence of a TXDELTA. */
+ blame_ctx->stream = NULL;
}
- else
+ else if (entered_state == TXDELTA)
{
- info->prop_attr = apr_pmemdup(info->pool, info->prop_attr,
- info->prop_attr_len + 1);
+ apr_pool_t *state_pool = svn_ra_serf__xml_state_pool(xes);
+ apr_hash_t *gathered = svn_ra_serf__xml_gather_since(xes, FILE_REV);
+ const char *path;
+ const char *rev;
+ const char *merged_revision;
+ svn_txdelta_window_handler_t txdelta;
+ void *txdelta_baton;
+
+ path = svn_hash_gets(gathered, "path");
+ rev = svn_hash_gets(gathered, "rev");
+ merged_revision = svn_hash_gets(gathered, "merged-revision");
+
+ SVN_ERR(blame_ctx->file_rev(blame_ctx->file_rev_baton,
+ path, SVN_STR_TO_REV(rev),
+ blame_ctx->rev_props,
+ merged_revision != NULL,
+ &txdelta, &txdelta_baton,
+ blame_ctx->prop_diffs,
+ state_pool));
+
+ blame_ctx->stream = svn_base64_decode(svn_txdelta_parse_svndiff(
+ txdelta, txdelta_baton,
+ TRUE /* error_on_early_close */,
+ state_pool),
+ state_pool);
}
- s = svn_string_ncreate(info->prop_attr, info->prop_attr_len, info->pool);
- if (info->prop_base64)
- {
- s = svn_base64_decode_string(s, info->pool);
- }
- return s;
+ return SVN_NO_ERROR;
}
+
+/* Conforms to svn_ra_serf__xml_closed_t */
static svn_error_t *
-start_blame(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name,
- const char **attrs)
+blame_closed(svn_ra_serf__xml_estate_t *xes,
+ void *baton,
+ int leaving_state,
+ const svn_string_t *cdata,
+ apr_hash_t *attrs,
+ apr_pool_t *scratch_pool)
{
- blame_context_t *blame_ctx = userData;
- blame_state_e state;
+ blame_context_t *blame_ctx = baton;
- state = parser->state->current_state;
+ if (leaving_state == FILE_REV)
+ {
+ /* Note that we test STREAM, but any pointer is currently invalid.
+ It was closed when left the TXDELTA state. */
+ if (blame_ctx->stream == NULL)
+ {
+ const char *path;
+ const char *rev;
+
+ path = svn_hash_gets(attrs, "path");
+ rev = svn_hash_gets(attrs, "rev");
- if (state == NONE && strcmp(name.name, "file-revs-report") == 0)
+ /* Send a "no content" notification. */
+ SVN_ERR(blame_ctx->file_rev(blame_ctx->file_rev_baton,
+ path, SVN_STR_TO_REV(rev),
+ blame_ctx->rev_props,
+ FALSE /* result_of_merge */,
+ NULL, NULL, /* txdelta / baton */
+ blame_ctx->prop_diffs,
+ scratch_pool));
+ }
+ }
+ else if (leaving_state == MERGED_REVISION)
{
- push_state(parser, blame_ctx, FILE_REVS_REPORT);
+ svn_ra_serf__xml_note(xes, FILE_REV, "merged-revision", "*");
}
- else if (state == FILE_REVS_REPORT &&
- strcmp(name.name, "file-rev") == 0)
+ else if (leaving_state == TXDELTA)
{
- blame_info_t *info;
-
- info = push_state(parser, blame_ctx, FILE_REV);
-
- info->path = apr_pstrdup(info->pool,
- svn_xml_get_attr_value("path", attrs));
- info->rev = SVN_STR_TO_REV(svn_xml_get_attr_value("rev", attrs));
+ SVN_ERR(svn_stream_close(blame_ctx->stream));
}
- else if (state == FILE_REV)
+ else
{
- blame_info_t *info;
- const char *enc;
+ const char *name;
+ const svn_string_t *value;
- info = parser->state->private;
+ SVN_ERR_ASSERT(leaving_state == REV_PROP
+ || leaving_state == SET_PROP
+ || leaving_state == REMOVE_PROP);
- if (strcmp(name.name, "rev-prop") == 0)
- {
- push_state(parser, blame_ctx, REV_PROP);
- }
- else if (strcmp(name.name, "set-prop") == 0)
- {
- push_state(parser, blame_ctx, SET_PROP);
- }
- if (strcmp(name.name, "remove-prop") == 0)
- {
- push_state(parser, blame_ctx, REMOVE_PROP);
- }
- else if (strcmp(name.name, "merged-revision") == 0)
+ name = apr_pstrdup(blame_ctx->state_pool,
+ svn_hash_gets(attrs, "name"));
+
+ if (leaving_state == REMOVE_PROP)
{
- push_state(parser, blame_ctx, MERGED_REVISION);
+ value = NULL;
}
- else if (strcmp(name.name, "txdelta") == 0)
+ else
{
- SVN_ERR(blame_ctx->file_rev(blame_ctx->file_rev_baton,
- info->path, info->rev,
- info->rev_props, info->merged_revision,
- &info->txdelta, &info->txdelta_baton,
- info->prop_diffs, info->pool));
+ const char *encoding = svn_hash_gets(attrs, "encoding");
- info->stream = svn_base64_decode
- (svn_txdelta_parse_svndiff(info->txdelta, info->txdelta_baton,
- TRUE, info->pool), info->pool);
-
- push_state(parser, blame_ctx, TXDELTA);
- }
-
- state = parser->state->current_state;
-
- switch (state)
- {
- case REV_PROP:
- case SET_PROP:
- case REMOVE_PROP:
- info->prop_name = apr_pstrdup(info->pool,
- svn_xml_get_attr_value("name", attrs));
- info->prop_attr = NULL;
- info->prop_attr_len = 0;
-
- enc = svn_xml_get_attr_value("encoding", attrs);
- if (enc && strcmp(enc, "base64") == 0)
- {
- info->prop_base64 = TRUE;
- }
+ if (encoding && strcmp(encoding, "base64") == 0)
+ value = svn_base64_decode_string(cdata, blame_ctx->state_pool);
else
- {
- info->prop_base64 = FALSE;
- }
- break;
- case MERGED_REVISION:
- info->merged_revision = TRUE;
- break;
- default:
- break;
+ value = svn_string_dup(cdata, blame_ctx->state_pool);
}
- }
- return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-end_blame(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name)
-{
- blame_context_t *blame_ctx = userData;
- blame_state_e state;
- blame_info_t *info;
-
- state = parser->state->current_state;
- info = parser->state->private;
-
- if (state == NONE)
- {
- return SVN_NO_ERROR;
- }
-
- if (state == FILE_REVS_REPORT &&
- strcmp(name.name, "file-revs-report") == 0)
- {
- svn_ra_serf__xml_pop_state(parser);
- }
- else if (state == FILE_REV &&
- strcmp(name.name, "file-rev") == 0)
- {
- /* no file changes. */
- if (!info->stream)
+ if (leaving_state == REV_PROP)
{
- SVN_ERR(blame_ctx->file_rev(blame_ctx->file_rev_baton,
- info->path, info->rev,
- info->rev_props, FALSE,
- NULL, NULL,
- info->prop_diffs, info->pool));
+ svn_hash_sets(blame_ctx->rev_props, name, value);
}
- svn_ra_serf__xml_pop_state(parser);
- }
- else if (state == REV_PROP &&
- strcmp(name.name, "rev-prop") == 0)
- {
- apr_hash_set(info->rev_props,
- info->prop_name, APR_HASH_KEY_STRING,
- create_propval(info));
-
- svn_ra_serf__xml_pop_state(parser);
- }
- else if ((state == SET_PROP &&
- strcmp(name.name, "set-prop") == 0) ||
- (state == REMOVE_PROP &&
- strcmp(name.name, "remove-prop") == 0))
- {
- svn_prop_t *prop = apr_array_push(info->prop_diffs);
- prop->name = info->prop_name;
- prop->value = create_propval(info);
-
- svn_ra_serf__xml_pop_state(parser);
- }
- else if (state == MERGED_REVISION &&
- strcmp(name.name, "merged-revision") == 0)
- {
- svn_ra_serf__xml_pop_state(parser);
- }
- else if (state == TXDELTA &&
- strcmp(name.name, "txdelta") == 0)
- {
- SVN_ERR(svn_stream_close(info->stream));
+ else
+ {
+ svn_prop_t *prop = apr_array_push(blame_ctx->prop_diffs);
- svn_ra_serf__xml_pop_state(parser);
+ prop->name = name;
+ prop->value = value;
+ }
}
return SVN_NO_ERROR;
}
+
+/* Conforms to svn_ra_serf__xml_cdata_t */
static svn_error_t *
-cdata_blame(svn_ra_serf__xml_parser_t *parser,
- void *userData,
+blame_cdata(svn_ra_serf__xml_estate_t *xes,
+ void *baton,
+ int current_state,
const char *data,
- apr_size_t len)
+ apr_size_t len,
+ apr_pool_t *scratch_pool)
{
- blame_context_t *blame_ctx = userData;
- blame_state_e state;
- blame_info_t *info;
-
- UNUSED_CTX(blame_ctx);
-
- state = parser->state->current_state;
- info = parser->state->private;
-
- if (state == NONE)
- {
- return SVN_NO_ERROR;
- }
+ blame_context_t *blame_ctx = baton;
- switch (state)
+ if (current_state == TXDELTA)
{
- case REV_PROP:
- case SET_PROP:
- svn_ra_serf__expand_string(&info->prop_attr, &info->prop_attr_len,
- data, len, parser->state->pool);
- break;
- case TXDELTA:
- if (info->stream)
- {
- apr_size_t ret_len;
-
- ret_len = len;
-
- SVN_ERR(svn_stream_write(info->stream, data, &ret_len));
- }
- break;
- default:
- break;
+ SVN_ERR(svn_stream_write(blame_ctx->stream, data, &len));
+ /* Ignore the returned LEN value. */
}
return SVN_NO_ERROR;
}
+
/* Implements svn_ra_serf__request_body_delegate_t */
static svn_error_t *
create_file_revs_body(serf_bucket_t **body_bkt,
@@ -436,9 +329,8 @@ svn_ra_serf__get_file_revs(svn_ra_session_t *ra_session,
blame_context_t *blame_ctx;
svn_ra_serf__session_t *session = ra_session->priv;
svn_ra_serf__handler_t *handler;
- svn_ra_serf__xml_parser_t *parser_ctx;
- const char *relative_url, *basecoll_url, *req_url;
- int status_code;
+ svn_ra_serf__xml_context_t *xmlctx;
+ const char *req_url;
svn_error_t *err;
blame_ctx = apr_pcalloc(pool, sizeof(*blame_ctx));
@@ -449,14 +341,19 @@ svn_ra_serf__get_file_revs(svn_ra_session_t *ra_session,
blame_ctx->start = start;
blame_ctx->end = end;
blame_ctx->include_merged_revisions = include_merged_revisions;
- blame_ctx->done = FALSE;
- SVN_ERR(svn_ra_serf__get_baseline_info(&basecoll_url, &relative_url, session,
- NULL, session->session_url.path,
- end, NULL, pool));
- req_url = svn_path_url_add_component2(basecoll_url, relative_url, pool);
+ SVN_ERR(svn_ra_serf__get_stable_url(&req_url, NULL /* latest_revnum */,
+ session, NULL /* conn */,
+ NULL /* url */, end,
+ pool, pool));
- handler = apr_pcalloc(pool, sizeof(*handler));
+ xmlctx = svn_ra_serf__xml_context_create(blame_ttable,
+ blame_opened,
+ blame_closed,
+ blame_cdata,
+ blame_ctx,
+ pool);
+ handler = svn_ra_serf__create_expat_handler(xmlctx, pool);
handler->method = "REPORT";
handler->path = req_url;
@@ -466,27 +363,12 @@ svn_ra_serf__get_file_revs(svn_ra_session_t *ra_session,
handler->conn = session->conns[0];
handler->session = session;
- parser_ctx = apr_pcalloc(pool, sizeof(*parser_ctx));
-
- parser_ctx->pool = pool;
- parser_ctx->user_data = blame_ctx;
- parser_ctx->start = start_blame;
- parser_ctx->end = end_blame;
- parser_ctx->cdata = cdata_blame;
- parser_ctx->done = &blame_ctx->done;
- parser_ctx->status_code = &status_code;
-
- handler->response_handler = svn_ra_serf__handle_xml_parser;
- handler->response_baton = parser_ctx;
-
- svn_ra_serf__request_create(handler);
-
- err = svn_ra_serf__context_run_wait(&blame_ctx->done, session, pool);
+ err = svn_ra_serf__context_run_one(handler, pool);
err = svn_error_compose_create(
- svn_ra_serf__error_on_status(status_code,
+ svn_ra_serf__error_on_status(handler->sline,
handler->path,
- parser_ctx->location),
+ handler->location),
err);
return svn_error_trace(err);
diff --git a/subversion/libsvn_ra_serf/blncache.c b/subversion/libsvn_ra_serf/blncache.c
index fe39284..d6abcdf 100644
--- a/subversion/libsvn_ra_serf/blncache.c
+++ b/subversion/libsvn_ra_serf/blncache.c
@@ -23,6 +23,7 @@
#include <apr_pools.h>
+#include "svn_hash.h"
#include "svn_dirent_uri.h"
#include "svn_types.h"
#include "svn_pools.h"
@@ -161,8 +162,7 @@ svn_ra_serf__blncache_get_baseline_info(const char **bc_url_p,
const char *baseline_url,
apr_pool_t *pool)
{
- baseline_info_t *info = apr_hash_get(blncache->baseline_info, baseline_url,
- APR_HASH_KEY_STRING);
+ baseline_info_t *info = svn_hash_gets(blncache->baseline_info, baseline_url);
if (info)
{
*bc_url_p = apr_pstrdup(pool, info->bc_url);
diff --git a/subversion/libsvn_ra_serf/commit.c b/subversion/libsvn_ra_serf/commit.c
index 25aefb3..9d48d41 100644
--- a/subversion/libsvn_ra_serf/commit.c
+++ b/subversion/libsvn_ra_serf/commit.c
@@ -22,11 +22,9 @@
*/
#include <apr_uri.h>
-
-#include <expat.h>
-
#include <serf.h>
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_ra.h"
#include "svn_dav.h"
@@ -41,23 +39,11 @@
#include "svn_private_config.h"
#include "private/svn_dep_compat.h"
#include "private/svn_fspath.h"
+#include "private/svn_skel.h"
#include "ra_serf.h"
#include "../libsvn_ra/ra_loader.h"
-
-/* Structure associated with a CHECKOUT request. */
-typedef struct checkout_context_t {
-
- apr_pool_t *pool;
-
- const char *activity_url;
- const char *checkout_url;
- const char *resource_url;
-
- svn_ra_serf__simple_request_context_t progress;
-
-} checkout_context_t;
/* Baton passed back with the commit editor. */
typedef struct commit_context_t {
@@ -82,7 +68,7 @@ typedef struct commit_context_t {
/* HTTP v1 stuff (only valid when 'txn_url' is NULL) */
const char *activity_url; /* activity base URL... */
- checkout_context_t *baseline; /* checkout for the baseline */
+ const char *baseline_url; /* the working-baseline resource */
const char *checked_in_url; /* checked-in root to base CHECKOUTs from */
const char *vcc_url; /* vcc url */
@@ -110,19 +96,14 @@ typedef struct proppatch_context_t {
/* In HTTP v2, this is the file/directory version we think we're changing. */
svn_revnum_t base_revision;
- svn_ra_serf__simple_request_context_t progress;
} proppatch_context_t;
typedef struct delete_context_t {
- const char *path;
+ const char *relpath;
svn_revnum_t revision;
- const char *lock_token;
- apr_hash_t *lock_token_hash;
- svn_boolean_t keep_locks;
-
- svn_ra_serf__simple_request_context_t progress;
+ commit_context_t *commit;
} delete_context_t;
/* Represents a directory. */
@@ -162,10 +143,9 @@ typedef struct dir_context_t {
apr_hash_t *changed_props;
apr_hash_t *removed_props;
- /* The checked out context for this directory. May be NULL; if so
+ /* The checked-out working resource for this directory. May be NULL; if so
call checkout_dir() first. */
- checkout_context_t *checkout;
-
+ const char *working_url;
} dir_context_t;
/* Represents a file to be committed. */
@@ -184,8 +164,8 @@ typedef struct file_context_t {
const char *relpath;
const char *name;
- /* The checked out context for this file. */
- checkout_context_t *checkout;
+ /* The checked-out working resource for this file. */
+ const char *working_url;
/* The base revision of the file. */
svn_revnum_t base_revision;
@@ -219,24 +199,29 @@ typedef struct file_context_t {
/* Setup routines and handlers for various requests we'll invoke. */
static svn_error_t *
-return_response_err(svn_ra_serf__handler_t *handler,
- svn_ra_serf__simple_request_context_t *ctx)
+return_response_err(svn_ra_serf__handler_t *handler)
{
svn_error_t *err;
+ /* We should have captured SLINE and LOCATION in the HANDLER. */
+ SVN_ERR_ASSERT(handler->handler_pool != NULL);
+
/* Ye Olde Fallback Error */
err = svn_error_compose_create(
- ctx->server_error.error,
+ handler->server_error != NULL
+ ? handler->server_error->error
+ : SVN_NO_ERROR,
svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL,
_("%s of '%s': %d %s"),
handler->method, handler->path,
- ctx->status, ctx->reason));
+ handler->sline.code, handler->sline.reason));
/* Try to return one of the standard errors for 301, 404, etc.,
then look for an error embedded in the response. */
- return svn_error_compose_create(svn_ra_serf__error_on_status(ctx->status,
- handler->path,
- ctx->location),
+ return svn_error_compose_create(svn_ra_serf__error_on_status(
+ handler->sline,
+ handler->path,
+ handler->location),
err);
}
@@ -247,7 +232,7 @@ create_checkout_body(serf_bucket_t **bkt,
serf_bucket_alloc_t *alloc,
apr_pool_t *pool)
{
- checkout_context_t *ctx = baton;
+ const char *activity_url = baton;
serf_bucket_t *body_bkt;
body_bkt = serf_bucket_aggregate_create(alloc);
@@ -259,8 +244,10 @@ create_checkout_body(serf_bucket_t **bkt,
svn_ra_serf__add_open_tag_buckets(body_bkt, alloc, "D:activity-set", NULL);
svn_ra_serf__add_open_tag_buckets(body_bkt, alloc, "D:href", NULL);
+ SVN_ERR_ASSERT(activity_url != NULL);
svn_ra_serf__add_cdata_len_buckets(body_bkt, alloc,
- ctx->activity_url, strlen(ctx->activity_url));
+ activity_url,
+ strlen(activity_url));
svn_ra_serf__add_close_tag_buckets(body_bkt, alloc, "D:href");
svn_ra_serf__add_close_tag_buckets(body_bkt, alloc, "D:activity-set");
@@ -271,137 +258,185 @@ create_checkout_body(serf_bucket_t **bkt,
return SVN_NO_ERROR;
}
-/* Implements svn_ra_serf__response_handler_t */
+
+/* Using the HTTPv1 protocol, perform a CHECKOUT of NODE_URL within the
+ given COMMIT_CTX. The resulting working resource will be returned in
+ *WORKING_URL, allocated from RESULT_POOL. All temporary allocations
+ are performed in SCRATCH_POOL.
+
+ ### are these URLs actually repos relpath values? or fspath? or maybe
+ ### the abspath portion of the full URL.
+
+ This function operates synchronously.
+
+ Strictly speaking, we could perform "all" of the CHECKOUT requests
+ when the commit starts, and only block when we need a specific
+ answer. Or, at a minimum, send off these individual requests async
+ and block when we need the answer (eg PUT or PROPPATCH).
+
+ However: the investment to speed this up is not worthwhile, given
+ that CHECKOUT (and the related round trip) is completely obviated
+ in HTTPv2.
+*/
static svn_error_t *
-handle_checkout(serf_request_t *request,
- serf_bucket_t *response,
- void *handler_baton,
- apr_pool_t *pool)
+checkout_node(const char **working_url,
+ const commit_context_t *commit_ctx,
+ const char *node_url,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- checkout_context_t *ctx = handler_baton;
+ svn_ra_serf__handler_t handler = { 0 };
+ apr_status_t status;
+ apr_uri_t uri;
- svn_error_t *err = svn_ra_serf__handle_status_only(request, response,
- &ctx->progress, pool);
+ /* HANDLER_POOL is the scratch pool since we don't need to remember
+ anything from the handler. We just want the working resource. */
+ handler.handler_pool = scratch_pool;
+ handler.session = commit_ctx->session;
+ handler.conn = commit_ctx->conn;
- /* These handler functions are supposed to return an APR_EOF status
- wrapped in a svn_error_t to indicate to serf that the response was
- completely read. While we have to return this status code to our
- caller, we should treat it as the normal case for now. */
- if (err && ! APR_STATUS_IS_EOF(err->apr_err))
- return err;
+ handler.body_delegate = create_checkout_body;
+ handler.body_delegate_baton = (/* const */ void *)commit_ctx->activity_url;
+ handler.body_type = "text/xml";
- /* Get the resulting location. */
- if (ctx->progress.done && ctx->progress.status == 201)
- {
- serf_bucket_t *hdrs;
- apr_uri_t uri;
- const char *location;
- apr_status_t status;
+ handler.response_handler = svn_ra_serf__expect_empty_body;
+ handler.response_baton = &handler;
- hdrs = serf_bucket_response_get_headers(response);
- location = serf_bucket_headers_get(hdrs, "Location");
- if (!location)
- return svn_error_create(SVN_ERR_RA_DAV_MALFORMED_DATA, err,
- _("No Location header received"));
+ handler.method = "CHECKOUT";
+ handler.path = node_url;
- status = apr_uri_parse(pool, location, &uri);
+ SVN_ERR(svn_ra_serf__context_run_one(&handler, scratch_pool));
- if (status)
- err = svn_error_compose_create(svn_error_wrap_apr(status, NULL), err);
+ if (handler.sline.code != 201)
+ return svn_error_trace(return_response_err(&handler));
+
+ if (handler.location == NULL)
+ return svn_error_create(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
+ _("No Location header received"));
+
+ /* We only want the path portion of the Location header.
+ (code.google.com sometimes returns an 'http:' scheme for an
+ 'https:' transaction ... we'll work around that by stripping the
+ scheme, host, and port here and re-adding the correct ones
+ later. */
+ status = apr_uri_parse(scratch_pool, handler.location, &uri);
+ if (status)
+ return svn_error_create(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
+ _("Error parsing Location header value"));
+
+ *working_url = svn_urlpath__canonicalize(uri.path, result_pool);
+
+ return SVN_NO_ERROR;
+}
+
+
+/* This is a wrapper around checkout_node() (which see for
+ documentation) which simply retries the CHECKOUT request when it
+ fails due to an SVN_ERR_APMOD_BAD_BASELINE error return from the
+ server.
- ctx->resource_url = svn_urlpath__canonicalize(uri.path, ctx->pool);
+ See http://subversion.tigris.org/issues/show_bug.cgi?id=4127 for
+ details.
+*/
+static svn_error_t *
+retry_checkout_node(const char **working_url,
+ const commit_context_t *commit_ctx,
+ const char *node_url,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_error_t *err = SVN_NO_ERROR;
+ int retry_count = 5; /* Magic, arbitrary number. */
+
+ do
+ {
+ svn_error_clear(err);
+
+ err = checkout_node(working_url, commit_ctx, node_url,
+ result_pool, scratch_pool);
+
+ /* There's a small chance of a race condition here if Apache is
+ experiencing heavy commit concurrency or if the network has
+ long latency. It's possible that the value of HEAD changed
+ between the time we fetched the latest baseline and the time
+ we try to CHECKOUT that baseline. If that happens, Apache
+ will throw us a BAD_BASELINE error (deltaV says you can only
+ checkout the latest baseline). We just ignore that specific
+ error and retry a few times, asking for the latest baseline
+ again. */
+ if (err && (err->apr_err != SVN_ERR_APMOD_BAD_BASELINE))
+ return err;
}
+ while (err && retry_count--);
return err;
}
+
static svn_error_t *
-checkout_dir(dir_context_t *dir)
+checkout_dir(dir_context_t *dir,
+ apr_pool_t *scratch_pool)
{
- checkout_context_t *checkout_ctx;
- svn_ra_serf__handler_t *handler;
svn_error_t *err;
dir_context_t *p_dir = dir;
+ const char *checkout_url;
+ const char **working;
- if (dir->checkout)
+ if (dir->working_url)
{
return SVN_NO_ERROR;
}
- /* Is this directory or one of our parent dirs newly added?
+ /* Is this directory or one of our parent dirs newly added?
* If so, we're already implicitly checked out. */
while (p_dir)
{
if (p_dir->added)
{
- /* Implicitly checkout this dir now. */
- dir->checkout = apr_pcalloc(dir->pool, sizeof(*dir->checkout));
- dir->checkout->pool = dir->pool;
- dir->checkout->progress.pool = dir->pool;
- dir->checkout->activity_url = dir->commit->activity_url;
- dir->checkout->resource_url =
- svn_path_url_add_component2(dir->parent_dir->checkout->resource_url,
- dir->name, dir->pool);
+ /* Calculate the working_url by skipping the shared ancestor bewteen
+ * the parent->relpath and dir->relpath. This is safe since an
+ * add is guaranteed to have a parent that is checked out. */
+ dir_context_t *parent = p_dir->parent_dir;
+ const char *relpath = svn_relpath_skip_ancestor(parent->relpath,
+ dir->relpath);
+ /* Implicitly checkout this dir now. */
+ SVN_ERR_ASSERT(parent->working_url);
+ dir->working_url = svn_path_url_add_component2(
+ parent->working_url,
+ relpath, dir->pool);
return SVN_NO_ERROR;
}
p_dir = p_dir->parent_dir;
}
- /* Checkout our directory into the activity URL now. */
- handler = apr_pcalloc(dir->pool, sizeof(*handler));
- handler->session = dir->commit->session;
- handler->conn = dir->commit->conn;
-
- checkout_ctx = apr_pcalloc(dir->pool, sizeof(*checkout_ctx));
- checkout_ctx->pool = dir->pool;
- checkout_ctx->progress.pool = dir->pool;
-
- checkout_ctx->activity_url = dir->commit->activity_url;
-
/* We could be called twice for the root: once to checkout the baseline;
* once to checkout the directory itself if we need to do so.
+ * Note: CHECKOUT_URL should live longer than HANDLER.
*/
- if (!dir->parent_dir && !dir->commit->baseline)
+ if (!dir->parent_dir && !dir->commit->baseline_url)
{
- checkout_ctx->checkout_url = dir->commit->vcc_url;
- dir->commit->baseline = checkout_ctx;
+ checkout_url = dir->commit->vcc_url;
+ working = &dir->commit->baseline_url;
}
else
{
- checkout_ctx->checkout_url = dir->url;
- dir->checkout = checkout_ctx;
+ checkout_url = dir->url;
+ working = &dir->working_url;
}
- handler->body_delegate = create_checkout_body;
- handler->body_delegate_baton = checkout_ctx;
- handler->body_type = "text/xml";
-
- handler->response_handler = handle_checkout;
- handler->response_baton = checkout_ctx;
-
- handler->method = "CHECKOUT";
- handler->path = checkout_ctx->checkout_url;
-
- svn_ra_serf__request_create(handler);
-
- err = svn_ra_serf__context_run_wait(&checkout_ctx->progress.done,
- dir->commit->session,
- dir->pool);
+ /* Checkout our directory into the activity URL now. */
+ err = retry_checkout_node(working, dir->commit, checkout_url,
+ dir->pool, scratch_pool);
if (err)
{
if (err->apr_err == SVN_ERR_FS_CONFLICT)
- SVN_ERR_W(err, apr_psprintf(dir->pool,
+ SVN_ERR_W(err, apr_psprintf(scratch_pool,
_("Directory '%s' is out of date; try updating"),
- svn_dirent_local_style(dir->relpath, dir->pool)));
+ svn_dirent_local_style(dir->relpath, scratch_pool)));
return err;
}
- if (checkout_ctx->progress.status != 201)
- {
- return return_response_err(handler, &checkout_ctx->progress);
- }
-
return SVN_NO_ERROR;
}
@@ -419,16 +454,17 @@ checkout_dir(dir_context_t *dir)
* BASE_REVISION, and set *CHECKED_IN_URL to the concatenation of that
* with RELPATH.
*
- * Allocate the result in POOL, and use POOL for temporary allocation.
+ * Allocate the result in RESULT_POOL, and use SCRATCH_POOL for
+ * temporary allocation.
*/
static svn_error_t *
get_version_url(const char **checked_in_url,
svn_ra_serf__session_t *session,
- svn_ra_serf__connection_t *conn,
const char *relpath,
svn_revnum_t base_revision,
const char *parent_vsn_url,
- apr_pool_t *pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
const char *root_checkout;
@@ -436,15 +472,16 @@ get_version_url(const char **checked_in_url,
{
const svn_string_t *current_version;
- SVN_ERR(session->wc_callbacks->get_wc_prop(session->wc_callback_baton,
- relpath,
- SVN_RA_SERF__WC_CHECKED_IN_URL,
- &current_version, pool));
+ SVN_ERR(session->wc_callbacks->get_wc_prop(
+ session->wc_callback_baton,
+ relpath,
+ SVN_RA_SERF__WC_CHECKED_IN_URL,
+ &current_version, scratch_pool));
if (current_version)
{
*checked_in_url =
- svn_urlpath__canonicalize(current_version->data, pool);
+ svn_urlpath__canonicalize(current_version->data, result_pool);
return SVN_NO_ERROR;
}
}
@@ -455,63 +492,53 @@ get_version_url(const char **checked_in_url,
}
else
{
- svn_ra_serf__propfind_context_t *propfind_ctx;
- apr_hash_t *props;
const char *propfind_url;
-
- props = apr_hash_make(pool);
+ svn_ra_serf__connection_t *conn = session->conns[0];
if (SVN_IS_VALID_REVNUM(base_revision))
{
- const char *bc_url, *bc_relpath;
-
/* mod_dav_svn can't handle the "Label:" header that
svn_ra_serf__deliver_props() is going to try to use for
this lookup, so we'll do things the hard(er) way, by
looking up the version URL from a resource in the
baseline collection. */
- SVN_ERR(svn_ra_serf__get_baseline_info(&bc_url, &bc_relpath,
- session, conn,
- session->session_url.path,
- base_revision, NULL, pool));
- propfind_url = svn_path_url_add_component2(bc_url, bc_relpath, pool);
+ /* ### conn==NULL for session->conns[0]. same as CONN. */
+ SVN_ERR(svn_ra_serf__get_stable_url(&propfind_url,
+ NULL /* latest_revnum */,
+ session, NULL /* conn */,
+ NULL /* url */, base_revision,
+ scratch_pool, scratch_pool));
}
else
{
propfind_url = session->session_url.path;
}
- /* ### switch to svn_ra_serf__retrieve_props */
- SVN_ERR(svn_ra_serf__deliver_props(&propfind_ctx, props, session, conn,
- propfind_url, base_revision, "0",
- checked_in_props, NULL, pool));
- SVN_ERR(svn_ra_serf__wait_for_props(propfind_ctx, session, pool));
-
- /* We wouldn't get here if the url wasn't found (404), so the checked-in
- property should have been set. */
- root_checkout =
- svn_ra_serf__get_ver_prop(props, propfind_url,
- base_revision, "DAV:", "checked-in");
-
+ SVN_ERR(svn_ra_serf__fetch_dav_prop(&root_checkout,
+ conn, propfind_url, base_revision,
+ "checked-in",
+ scratch_pool, scratch_pool));
if (!root_checkout)
return svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL,
_("Path '%s' not present"),
session->session_url.path);
- root_checkout = svn_urlpath__canonicalize(root_checkout, pool);
+ root_checkout = svn_urlpath__canonicalize(root_checkout, scratch_pool);
}
- *checked_in_url = svn_path_url_add_component2(root_checkout, relpath, pool);
+ *checked_in_url = svn_path_url_add_component2(root_checkout, relpath,
+ result_pool);
return SVN_NO_ERROR;
}
static svn_error_t *
-checkout_file(file_context_t *file)
+checkout_file(file_context_t *file,
+ apr_pool_t *scratch_pool)
{
- svn_ra_serf__handler_t *handler;
svn_error_t *err;
dir_context_t *parent_dir = file->parent_dir;
+ const char *checkout_url;
/* Is one of our parent dirs newly added? If so, we're already
* implicitly checked out.
@@ -521,69 +548,33 @@ checkout_file(file_context_t *file)
if (parent_dir->added)
{
/* Implicitly checkout this file now. */
- file->checkout = apr_pcalloc(file->pool, sizeof(*file->checkout));
- file->checkout->pool = file->pool;
- file->checkout->progress.pool = file->pool;
- file->checkout->activity_url = file->commit->activity_url;
- file->checkout->resource_url =
- svn_path_url_add_component2(parent_dir->checkout->resource_url,
- svn_relpath__is_child(parent_dir->relpath,
- file->relpath,
- file->pool),
- file->pool);
+ file->working_url = svn_path_url_add_component2(
+ parent_dir->working_url,
+ svn_relpath_skip_ancestor(
+ parent_dir->relpath, file->relpath),
+ file->pool);
return SVN_NO_ERROR;
}
parent_dir = parent_dir->parent_dir;
}
- /* Checkout our file into the activity URL now. */
- handler = apr_pcalloc(file->pool, sizeof(*handler));
- handler->session = file->commit->session;
- handler->conn = file->commit->conn;
-
- file->checkout = apr_pcalloc(file->pool, sizeof(*file->checkout));
- file->checkout->pool = file->pool;
- file->checkout->progress.pool = file->pool;
-
- file->checkout->activity_url = file->commit->activity_url;
-
- SVN_ERR(get_version_url(&(file->checkout->checkout_url),
- file->commit->session, file->commit->conn,
+ SVN_ERR(get_version_url(&checkout_url,
+ file->commit->session,
file->relpath, file->base_revision,
- NULL, file->pool));
-
- handler->body_delegate = create_checkout_body;
- handler->body_delegate_baton = file->checkout;
- handler->body_type = "text/xml";
-
- handler->response_handler = handle_checkout;
- handler->response_baton = file->checkout;
+ NULL, scratch_pool, scratch_pool));
- handler->method = "CHECKOUT";
- handler->path = file->checkout->checkout_url;
-
- svn_ra_serf__request_create(handler);
-
- /* There's no need to wait here as we only need this when we start the
- * PROPPATCH or PUT of the file.
- */
- err = svn_ra_serf__context_run_wait(&file->checkout->progress.done,
- file->commit->session,
- file->pool);
+ /* Checkout our file into the activity URL now. */
+ err = retry_checkout_node(&file->working_url, file->commit, checkout_url,
+ file->pool, scratch_pool);
if (err)
{
if (err->apr_err == SVN_ERR_FS_CONFLICT)
- SVN_ERR_W(err, apr_psprintf(file->pool,
+ SVN_ERR_W(err, apr_psprintf(scratch_pool,
_("File '%s' is out of date; try updating"),
- svn_dirent_local_style(file->relpath, file->pool)));
+ svn_dirent_local_style(file->relpath, scratch_pool)));
return err;
}
- if (file->checkout->progress.status != 201)
- {
- return return_response_err(handler, &file->checkout->progress);
- }
-
return SVN_NO_ERROR;
}
@@ -788,6 +779,54 @@ proppatch_walker(void *baton,
return SVN_NO_ERROR;
}
+/* Possible add the lock-token "If:" precondition header to HEADERS if
+ an examination of COMMIT_CTX and RELPATH indicates that this is the
+ right thing to do.
+
+ Generally speaking, if the client provided a lock token for
+ RELPATH, it's the right thing to do. There is a notable instance
+ where this is not the case, however. If the file at RELPATH was
+ explicitly deleted in this commit already, then mod_dav removed its
+ lock token when it fielded the DELETE request, so we don't want to
+ set the lock precondition again. (See
+ http://subversion.tigris.org/issues/show_bug.cgi?id=3674 for details.)
+*/
+static svn_error_t *
+maybe_set_lock_token_header(serf_bucket_t *headers,
+ commit_context_t *commit_ctx,
+ const char *relpath,
+ apr_pool_t *pool)
+{
+ const char *token;
+
+ if (! (relpath && commit_ctx->lock_tokens))
+ return SVN_NO_ERROR;
+
+ if (! svn_hash_gets(commit_ctx->deleted_entries, relpath))
+ {
+ token = svn_hash_gets(commit_ctx->lock_tokens, relpath);
+ if (token)
+ {
+ const char *token_header;
+ const char *token_uri;
+ apr_uri_t uri = commit_ctx->session->session_url;
+
+ /* Supplying the optional URI affects apache response when
+ the lock is broken, see issue 4369. When present any URI
+ must be absolute (RFC 2518 9.4). */
+ uri.path = (char *)svn_path_url_add_component2(uri.path, relpath,
+ pool);
+ token_uri = apr_uri_unparse(pool, &uri, 0);
+
+ token_header = apr_pstrcat(pool, "<", token_uri, "> (<", token, ">)",
+ (char *)NULL);
+ serf_bucket_headers_set(headers, "If", token_header);
+ }
+ }
+
+ return SVN_NO_ERROR;
+}
+
static svn_error_t *
setup_proppatch_headers(serf_bucket_t *headers,
void *baton,
@@ -802,22 +841,8 @@ setup_proppatch_headers(serf_bucket_t *headers,
proppatch->base_revision));
}
- if (proppatch->relpath && proppatch->commit->lock_tokens)
- {
- const char *token;
-
- token = apr_hash_get(proppatch->commit->lock_tokens, proppatch->relpath,
- APR_HASH_KEY_STRING);
-
- if (token)
- {
- const char *token_header;
-
- token_header = apr_pstrcat(pool, "(<", token, ">)", (char *)NULL);
-
- serf_bucket_headers_set(headers, "If", token_header);
- }
- }
+ SVN_ERR(maybe_set_lock_token_header(headers, proppatch->commit,
+ proppatch->relpath, pool));
return SVN_NO_ERROR;
}
@@ -921,6 +946,7 @@ proppatch_resource(proppatch_context_t *proppatch,
struct proppatch_body_baton_t pbb;
handler = apr_pcalloc(pool, sizeof(*handler));
+ handler->handler_pool = pool;
handler->method = "PROPPATCH";
handler->path = proppatch->path;
handler->conn = commit->conn;
@@ -935,20 +961,19 @@ proppatch_resource(proppatch_context_t *proppatch,
handler->body_delegate_baton = &pbb;
handler->response_handler = svn_ra_serf__handle_multistatus_only;
- handler->response_baton = &proppatch->progress;
+ handler->response_baton = handler;
- svn_ra_serf__request_create(handler);
+ SVN_ERR(svn_ra_serf__context_run_one(handler, pool));
- /* If we don't wait for the response, our pool will be gone! */
- SVN_ERR(svn_ra_serf__context_run_wait(&proppatch->progress.done,
- commit->session, pool));
-
- if (proppatch->progress.status != 207 ||
- proppatch->progress.server_error.error)
+ if (handler->sline.code != 207
+ || (handler->server_error != NULL
+ && handler->server_error->error != NULL))
{
- return svn_error_create(SVN_ERR_RA_DAV_PROPPATCH_FAILED,
- return_response_err(handler, &proppatch->progress),
- _("At least one property change failed; repository is unchanged"));
+ return svn_error_create(
+ SVN_ERR_RA_DAV_PROPPATCH_FAILED,
+ return_response_err(handler),
+ _("At least one property change failed; repository"
+ " is unchanged"));
}
return SVN_NO_ERROR;
@@ -1020,22 +1045,8 @@ setup_put_headers(serf_bucket_t *headers,
ctx->result_checksum);
}
- if (ctx->commit->lock_tokens)
- {
- const char *token;
-
- token = apr_hash_get(ctx->commit->lock_tokens, ctx->relpath,
- APR_HASH_KEY_STRING);
-
- if (token)
- {
- const char *token_header;
-
- token_header = apr_pstrcat(pool, "(<", token, ">)", (char *)NULL);
-
- serf_bucket_headers_set(headers, "If", token_header);
- }
- }
+ SVN_ERR(maybe_set_lock_token_header(headers, ctx->commit,
+ ctx->relpath, pool));
return APR_SUCCESS;
}
@@ -1056,13 +1067,103 @@ setup_copy_file_headers(serf_bucket_t *headers,
serf_bucket_headers_set(headers, "Destination", absolute_uri);
- serf_bucket_headers_set(headers, "Depth", "0");
- serf_bucket_headers_set(headers, "Overwrite", "T");
+ serf_bucket_headers_setn(headers, "Depth", "0");
+ serf_bucket_headers_setn(headers, "Overwrite", "T");
return SVN_NO_ERROR;
}
static svn_error_t *
+setup_if_header_recursive(svn_boolean_t *added,
+ serf_bucket_t *headers,
+ commit_context_t *commit_ctx,
+ const char *rq_relpath,
+ apr_pool_t *pool)
+{
+ svn_stringbuf_t *sb = NULL;
+ apr_hash_index_t *hi;
+ apr_pool_t *iterpool = NULL;
+
+ if (!commit_ctx->lock_tokens)
+ {
+ *added = FALSE;
+ return SVN_NO_ERROR;
+ }
+
+ /* We try to create a directory, so within the Subversion world that
+ would imply that there is nothing here, but mod_dav_svn still sees
+ locks on the old nodes here as in DAV it is perfectly legal to lock
+ something that is not there...
+
+ Let's make mod_dav, mod_dav_svn and the DAV RFC happy by providing
+ the locks we know of with the request */
+
+ for (hi = apr_hash_first(pool, commit_ctx->lock_tokens);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ const char *relpath = svn__apr_hash_index_key(hi);
+ apr_uri_t uri;
+
+ if (!svn_relpath_skip_ancestor(rq_relpath, relpath))
+ continue;
+ else if (svn_hash_gets(commit_ctx->deleted_entries, relpath))
+ {
+ /* When a path is already explicit deleted then its lock
+ will be removed by mod_dav. But mod_dav doesn't remove
+ locks on descendants */
+ continue;
+ }
+
+ if (!iterpool)
+ iterpool = svn_pool_create(pool);
+ else
+ svn_pool_clear(iterpool);
+
+ if (sb == NULL)
+ sb = svn_stringbuf_create("", pool);
+ else
+ svn_stringbuf_appendbyte(sb, ' ');
+
+ uri = commit_ctx->session->session_url;
+ uri.path = (char *)svn_path_url_add_component2(uri.path, relpath,
+ iterpool);
+
+ svn_stringbuf_appendbyte(sb, '<');
+ svn_stringbuf_appendcstr(sb, apr_uri_unparse(iterpool, &uri, 0));
+ svn_stringbuf_appendcstr(sb, "> (<");
+ svn_stringbuf_appendcstr(sb, svn__apr_hash_index_val(hi));
+ svn_stringbuf_appendcstr(sb, ">)");
+ }
+
+ if (iterpool)
+ svn_pool_destroy(iterpool);
+
+ if (sb)
+ {
+ serf_bucket_headers_set(headers, "If", sb->data);
+ *added = TRUE;
+ }
+ else
+ *added = FALSE;
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+setup_add_dir_common_headers(serf_bucket_t *headers,
+ void *baton,
+ apr_pool_t *pool)
+{
+ dir_context_t *dir = baton;
+ svn_boolean_t added;
+
+ return svn_error_trace(
+ setup_if_header_recursive(&added, headers, dir->commit, dir->relpath,
+ pool));
+}
+
+static svn_error_t *
setup_copy_dir_headers(serf_bucket_t *headers,
void *baton,
apr_pool_t *pool)
@@ -1081,24 +1182,20 @@ setup_copy_dir_headers(serf_bucket_t *headers,
else
{
uri.path = (char *)svn_path_url_add_component2(
- dir->parent_dir->checkout->resource_url,
+ dir->parent_dir->working_url,
dir->name, pool);
}
absolute_uri = apr_uri_unparse(pool, &uri, 0);
serf_bucket_headers_set(headers, "Destination", absolute_uri);
- serf_bucket_headers_set(headers, "Depth", "infinity");
- serf_bucket_headers_set(headers, "Overwrite", "T");
+ serf_bucket_headers_setn(headers, "Depth", "infinity");
+ serf_bucket_headers_setn(headers, "Overwrite", "T");
/* Implicitly checkout this dir now. */
- dir->checkout = apr_pcalloc(dir->pool, sizeof(*dir->checkout));
- dir->checkout->pool = dir->pool;
- dir->checkout->progress.pool = dir->pool;
- dir->checkout->activity_url = dir->commit->activity_url;
- dir->checkout->resource_url = apr_pstrdup(dir->checkout->pool, uri.path);
+ dir->working_url = apr_pstrdup(dir->pool, uri.path);
- return SVN_NO_ERROR;
+ return svn_error_trace(setup_add_dir_common_headers(headers, baton, pool));
}
static svn_error_t *
@@ -1106,55 +1203,22 @@ setup_delete_headers(serf_bucket_t *headers,
void *baton,
apr_pool_t *pool)
{
- delete_context_t *ctx = baton;
+ delete_context_t *del = baton;
+ svn_boolean_t added;
serf_bucket_headers_set(headers, SVN_DAV_VERSION_NAME_HEADER,
- apr_ltoa(pool, ctx->revision));
-
- if (ctx->lock_token_hash)
- {
- ctx->lock_token = apr_hash_get(ctx->lock_token_hash, ctx->path,
- APR_HASH_KEY_STRING);
-
- if (ctx->lock_token)
- {
- const char *token_header;
+ apr_ltoa(pool, del->revision));
- token_header = apr_pstrcat(pool, "<", ctx->path, "> (<",
- ctx->lock_token, ">)", (char *)NULL);
+ SVN_ERR(setup_if_header_recursive(&added, headers, del->commit,
+ del->relpath, pool));
- serf_bucket_headers_set(headers, "If", token_header);
-
- if (ctx->keep_locks)
- serf_bucket_headers_set(headers, SVN_DAV_OPTIONS_HEADER,
- SVN_DAV_OPTION_KEEP_LOCKS);
- }
- }
+ if (added && del->commit->keep_locks)
+ serf_bucket_headers_setn(headers, SVN_DAV_OPTIONS_HEADER,
+ SVN_DAV_OPTION_KEEP_LOCKS);
return SVN_NO_ERROR;
}
-/* Implements svn_ra_serf__request_body_delegate_t */
-static svn_error_t *
-create_delete_body(serf_bucket_t **body_bkt,
- void *baton,
- serf_bucket_alloc_t *alloc,
- apr_pool_t *pool)
-{
- delete_context_t *ctx = baton;
- serf_bucket_t *body;
-
- body = serf_bucket_aggregate_create(alloc);
-
- svn_ra_serf__add_xml_header_buckets(body, alloc);
-
- svn_ra_serf__merge_lock_token_list(ctx->lock_token_hash, ctx->path,
- body, alloc, pool);
-
- *body_bkt = body;
- return SVN_NO_ERROR;
-}
-
/* Helper function to write the svndiff stream to temporary file. */
static svn_error_t *
svndiff_stream_write(void *file_baton,
@@ -1182,7 +1246,26 @@ create_txn_post_body(serf_bucket_t **body_bkt,
serf_bucket_alloc_t *alloc,
apr_pool_t *pool)
{
- *body_bkt = SERF_BUCKET_SIMPLE_STRING("( create-txn )", alloc);
+ apr_hash_t *revprops = baton;
+ svn_skel_t *request_skel;
+ svn_stringbuf_t *skel_str;
+
+ request_skel = svn_skel__make_empty_list(pool);
+ if (revprops)
+ {
+ svn_skel_t *proplist_skel;
+
+ SVN_ERR(svn_skel__unparse_proplist(&proplist_skel, revprops, pool));
+ svn_skel__prepend(proplist_skel, request_skel);
+ svn_skel__prepend_str("create-txn-with-props", request_skel, pool);
+ skel_str = svn_skel__unparse(request_skel, pool);
+ *body_bkt = SERF_BUCKET_SIMPLE_STRING(skel_str->data, alloc);
+ }
+ else
+ {
+ *body_bkt = SERF_BUCKET_SIMPLE_STRING("( create-txn )", alloc);
+ }
+
return SVN_NO_ERROR;
}
@@ -1206,7 +1289,7 @@ setup_post_headers(serf_bucket_t *headers,
/* Handler baton for POST request. */
typedef struct post_response_ctx_t
{
- svn_ra_serf__simple_request_context_t *request_ctx;
+ svn_ra_serf__handler_t *handler;
commit_context_t *commit_ctx;
} post_response_ctx_t;
@@ -1251,14 +1334,15 @@ post_headers_iterator_callback(void *baton,
/* A custom serf_response_handler_t which is mostly a wrapper around
- svn_ra_serf__handle_status_only -- it just notices POST response
+ svn_ra_serf__expect_empty_body -- it just notices POST response
headers, too.
+
Implements svn_ra_serf__response_handler_t */
static svn_error_t *
post_response_handler(serf_request_t *request,
serf_bucket_t *response,
void *baton,
- apr_pool_t *pool)
+ apr_pool_t *scratch_pool)
{
post_response_ctx_t *prc = baton;
serf_bucket_t *hdrs = serf_bucket_response_get_headers(response);
@@ -1267,8 +1351,8 @@ post_response_handler(serf_request_t *request,
serf_bucket_headers_do(hdrs, post_headers_iterator_callback, prc);
/* Execute the 'real' response handler to XML-parse the repsonse body. */
- return svn_ra_serf__handle_status_only(request, response,
- prc->request_ctx, pool);
+ return svn_ra_serf__expect_empty_body(request, response,
+ prc->handler, scratch_pool);
}
@@ -1286,45 +1370,44 @@ open_root(void *edit_baton,
proppatch_context_t *proppatch_ctx;
dir_context_t *dir;
apr_hash_index_t *hi;
- const char *proppatch_target;
+ const char *proppatch_target = NULL;
if (SVN_RA_SERF__HAVE_HTTPV2_SUPPORT(ctx->session))
{
- svn_ra_serf__simple_request_context_t *post_ctx;
post_response_ctx_t *prc;
const char *rel_path;
+ svn_boolean_t post_with_revprops
+ = (NULL != svn_hash_gets(ctx->session->supported_posts,
+ "create-txn-with-props"));
/* Create our activity URL now on the server. */
handler = apr_pcalloc(ctx->pool, sizeof(*handler));
+ handler->handler_pool = ctx->pool;
handler->method = "POST";
handler->body_type = SVN_SKEL_MIME_TYPE;
handler->body_delegate = create_txn_post_body;
- handler->body_delegate_baton = NULL;
+ handler->body_delegate_baton =
+ post_with_revprops ? ctx->revprop_table : NULL;
handler->header_delegate = setup_post_headers;
handler->header_delegate_baton = NULL;
handler->path = ctx->session->me_resource;
handler->conn = ctx->session->conns[0];
handler->session = ctx->session;
- post_ctx = apr_pcalloc(ctx->pool, sizeof(*post_ctx));
- post_ctx->pool = ctx->pool;
-
prc = apr_pcalloc(ctx->pool, sizeof(*prc));
- prc->request_ctx = post_ctx;
+ prc->handler = handler;
prc->commit_ctx = ctx;
handler->response_handler = post_response_handler;
handler->response_baton = prc;
- svn_ra_serf__request_create(handler);
+ SVN_ERR(svn_ra_serf__context_run_one(handler, ctx->pool));
- SVN_ERR(svn_ra_serf__context_run_wait(&post_ctx->done, ctx->session,
- ctx->pool));
-
- if (post_ctx->status != 201)
+ if (handler->sline.code != 201)
{
apr_status_t status = SVN_ERR_RA_DAV_REQUEST_FAILED;
- switch(post_ctx->status)
+
+ switch (handler->sline.code)
{
case 403:
status = SVN_ERR_RA_DAV_FORBIDDEN;
@@ -1337,7 +1420,7 @@ open_root(void *edit_baton,
return svn_error_createf(status, NULL,
_("%s of '%s': %d %s (%s://%s)"),
handler->method, handler->path,
- post_ctx->status, post_ctx->reason,
+ handler->sline.code, handler->sline.reason,
ctx->session->session_url.scheme,
ctx->session->session_url.hostinfo);
}
@@ -1366,28 +1449,32 @@ open_root(void *edit_baton,
dir->removed_props = apr_hash_make(dir->pool);
dir->url = apr_pstrdup(dir->pool, ctx->txn_root_url);
- proppatch_target = ctx->txn_url;
+ /* If we included our revprops in the POST, we need not
+ PROPPATCH them. */
+ proppatch_target = post_with_revprops ? NULL : ctx->txn_url;
}
else
{
- svn_ra_serf__options_context_t *opt_ctx;
- svn_ra_serf__simple_request_context_t *mkact_ctx;
- const char *activity_str;
+ const char *activity_str = ctx->session->activity_collection_url;
- SVN_ERR(svn_ra_serf__create_options_req(&opt_ctx, ctx->session,
- ctx->session->conns[0],
- ctx->session->session_url.path,
- ctx->pool));
-
- SVN_ERR(svn_ra_serf__context_run_wait(
- svn_ra_serf__get_options_done_ptr(opt_ctx),
- ctx->session, ctx->pool));
-
- activity_str = svn_ra_serf__options_get_activity_collection(opt_ctx);
if (!activity_str)
- return svn_error_create(SVN_ERR_RA_DAV_OPTIONS_REQ_FAILED, NULL,
- _("The OPTIONS response did not include the "
- "requested activity-collection-set value"));
+ SVN_ERR(svn_ra_serf__v1_get_activity_collection(&activity_str,
+ ctx->session->conns[0],
+ ctx->pool,
+ ctx->pool));
+
+ /* Cache the result. */
+ if (activity_str)
+ {
+ ctx->session->activity_collection_url =
+ apr_pstrdup(ctx->session->pool, activity_str);
+ }
+ else
+ {
+ return svn_error_create(SVN_ERR_RA_DAV_OPTIONS_REQ_FAILED, NULL,
+ _("The OPTIONS response did not include the "
+ "requested activity-collection-set value"));
+ }
ctx->activity_url =
svn_path_url_add_component2(activity_str, svn_uuid_generate(ctx->pool),
@@ -1395,26 +1482,22 @@ open_root(void *edit_baton,
/* Create our activity URL now on the server. */
handler = apr_pcalloc(ctx->pool, sizeof(*handler));
+ handler->handler_pool = ctx->pool;
handler->method = "MKACTIVITY";
handler->path = ctx->activity_url;
handler->conn = ctx->session->conns[0];
handler->session = ctx->session;
- mkact_ctx = apr_pcalloc(ctx->pool, sizeof(*mkact_ctx));
- mkact_ctx->pool = ctx->pool;
+ handler->response_handler = svn_ra_serf__expect_empty_body;
+ handler->response_baton = handler;
- handler->response_handler = svn_ra_serf__handle_status_only;
- handler->response_baton = mkact_ctx;
+ SVN_ERR(svn_ra_serf__context_run_one(handler, ctx->pool));
- svn_ra_serf__request_create(handler);
-
- SVN_ERR(svn_ra_serf__context_run_wait(&mkact_ctx->done, ctx->session,
- ctx->pool));
-
- if (mkact_ctx->status != 201)
+ if (handler->sline.code != 201)
{
apr_status_t status = SVN_ERR_RA_DAV_REQUEST_FAILED;
- switch(mkact_ctx->status)
+
+ switch (handler->sline.code)
{
case 403:
status = SVN_ERR_RA_DAV_FORBIDDEN;
@@ -1427,7 +1510,7 @@ open_root(void *edit_baton,
return svn_error_createf(status, NULL,
_("%s of '%s': %d %s (%s://%s)"),
handler->method, handler->path,
- mkact_ctx->status, mkact_ctx->reason,
+ handler->sline.code, handler->sline.reason,
ctx->session->session_url.scheme,
ctx->session->session_url.hostinfo);
}
@@ -1448,57 +1531,55 @@ open_root(void *edit_baton,
dir->removed_props = apr_hash_make(dir->pool);
SVN_ERR(get_version_url(&dir->url, dir->commit->session,
- dir->commit->conn, dir->relpath,
+ dir->relpath,
dir->base_revision, ctx->checked_in_url,
- dir->pool));
+ dir->pool, dir->pool /* scratch_pool */));
ctx->checked_in_url = dir->url;
/* Checkout our root dir */
- SVN_ERR(checkout_dir(dir));
+ SVN_ERR(checkout_dir(dir, dir->pool /* scratch_pool */));
- proppatch_target = ctx->baseline->resource_url;
+ proppatch_target = ctx->baseline_url;
}
-
- /* PROPPATCH our revprops and pass them along. */
- proppatch_ctx = apr_pcalloc(ctx->pool, sizeof(*proppatch_ctx));
- proppatch_ctx->pool = dir_pool;
- proppatch_ctx->progress.pool = dir_pool;
- proppatch_ctx->commit = ctx;
- proppatch_ctx->path = proppatch_target;
- proppatch_ctx->changed_props = apr_hash_make(proppatch_ctx->pool);
- proppatch_ctx->removed_props = apr_hash_make(proppatch_ctx->pool);
- proppatch_ctx->base_revision = SVN_INVALID_REVNUM;
-
- for (hi = apr_hash_first(ctx->pool, ctx->revprop_table); hi;
- hi = apr_hash_next(hi))
+ /* Unless this is NULL -- which means we don't need to PROPPATCH the
+ transaction with our revprops -- then, you know, PROPPATCH the
+ transaction with our revprops. */
+ if (proppatch_target)
{
- const void *key;
- void *val;
- const char *name;
- svn_string_t *value;
- const char *ns;
-
- apr_hash_this(hi, &key, NULL, &val);
- name = key;
- value = val;
+ proppatch_ctx = apr_pcalloc(ctx->pool, sizeof(*proppatch_ctx));
+ proppatch_ctx->pool = dir_pool;
+ proppatch_ctx->commit = ctx;
+ proppatch_ctx->path = proppatch_target;
+ proppatch_ctx->changed_props = apr_hash_make(proppatch_ctx->pool);
+ proppatch_ctx->removed_props = apr_hash_make(proppatch_ctx->pool);
+ proppatch_ctx->base_revision = SVN_INVALID_REVNUM;
- if (strncmp(name, SVN_PROP_PREFIX, sizeof(SVN_PROP_PREFIX) - 1) == 0)
- {
- ns = SVN_DAV_PROP_NS_SVN;
- name += sizeof(SVN_PROP_PREFIX) - 1;
- }
- else
+ for (hi = apr_hash_first(ctx->pool, ctx->revprop_table); hi;
+ hi = apr_hash_next(hi))
{
- ns = SVN_DAV_PROP_NS_CUSTOM;
+ const char *name = svn__apr_hash_index_key(hi);
+ svn_string_t *value = svn__apr_hash_index_val(hi);
+ const char *ns;
+
+ if (strncmp(name, SVN_PROP_PREFIX, sizeof(SVN_PROP_PREFIX) - 1) == 0)
+ {
+ ns = SVN_DAV_PROP_NS_SVN;
+ name += sizeof(SVN_PROP_PREFIX) - 1;
+ }
+ else
+ {
+ ns = SVN_DAV_PROP_NS_CUSTOM;
+ }
+
+ svn_ra_serf__set_prop(proppatch_ctx->changed_props,
+ proppatch_ctx->path,
+ ns, name, value, proppatch_ctx->pool);
}
- svn_ra_serf__set_prop(proppatch_ctx->changed_props, proppatch_ctx->path,
- ns, name, value, proppatch_ctx->pool);
+ SVN_ERR(proppatch_resource(proppatch_ctx, dir->commit, ctx->pool));
}
- SVN_ERR(proppatch_resource(proppatch_ctx, dir->commit, ctx->pool));
-
*root_baton = dir;
return SVN_NO_ERROR;
@@ -1514,7 +1595,6 @@ delete_entry(const char *path,
delete_context_t *delete_ctx;
svn_ra_serf__handler_t *handler;
const char *delete_target;
- svn_error_t *err;
if (USING_HTTPV2_COMMIT_SUPPORT(dir->commit))
{
@@ -1524,8 +1604,8 @@ delete_entry(const char *path,
else
{
/* Ensure our directory has been checked out */
- SVN_ERR(checkout_dir(dir));
- delete_target = svn_path_url_add_component2(dir->checkout->resource_url,
+ SVN_ERR(checkout_dir(dir, pool /* scratch_pool */));
+ delete_target = svn_path_url_add_component2(dir->working_url,
svn_relpath_basename(path,
NULL),
pool);
@@ -1533,18 +1613,17 @@ delete_entry(const char *path,
/* DELETE our entry */
delete_ctx = apr_pcalloc(pool, sizeof(*delete_ctx));
- delete_ctx->progress.pool = pool;
- delete_ctx->path = apr_pstrdup(pool, path);
+ delete_ctx->relpath = apr_pstrdup(pool, path);
delete_ctx->revision = revision;
- delete_ctx->lock_token_hash = dir->commit->lock_tokens;
- delete_ctx->keep_locks = dir->commit->keep_locks;
+ delete_ctx->commit = dir->commit;
handler = apr_pcalloc(pool, sizeof(*handler));
+ handler->handler_pool = pool;
handler->session = dir->commit->session;
handler->conn = dir->commit->conn;
- handler->response_handler = svn_ra_serf__handle_status_only;
- handler->response_baton = &delete_ctx->progress;
+ handler->response_handler = svn_ra_serf__expect_empty_body;
+ handler->response_baton = handler;
handler->header_delegate = setup_delete_headers;
handler->header_delegate_baton = delete_ctx;
@@ -1552,48 +1631,16 @@ delete_entry(const char *path,
handler->method = "DELETE";
handler->path = delete_target;
- svn_ra_serf__request_create(handler);
-
- err = svn_ra_serf__context_run_wait(&delete_ctx->progress.done,
- dir->commit->session, pool);
-
- if (err &&
- (err->apr_err == SVN_ERR_FS_BAD_LOCK_TOKEN ||
- err->apr_err == SVN_ERR_FS_NO_LOCK_TOKEN ||
- err->apr_err == SVN_ERR_FS_LOCK_OWNER_MISMATCH ||
- err->apr_err == SVN_ERR_FS_PATH_ALREADY_LOCKED))
- {
- svn_error_clear(err);
-
- /* An error has been registered on the connection. Reset the thing
- so that we can use it again. */
- serf_connection_reset(handler->conn->conn);
-
- handler->body_delegate = create_delete_body;
- handler->body_delegate_baton = delete_ctx;
- handler->body_type = "text/xml";
-
- svn_ra_serf__request_create(handler);
-
- delete_ctx->progress.done = 0;
-
- SVN_ERR(svn_ra_serf__context_run_wait(&delete_ctx->progress.done,
- dir->commit->session, pool));
- }
- else if (err)
- {
- return err;
- }
+ SVN_ERR(svn_ra_serf__context_run_one(handler, pool));
/* 204 No Content: item successfully deleted */
- if (delete_ctx->progress.status != 204)
+ if (handler->sline.code != 204)
{
- return return_response_err(handler, &delete_ctx->progress);
+ return svn_error_trace(return_response_err(handler));
}
- apr_hash_set(dir->commit->deleted_entries,
- apr_pstrdup(dir->commit->pool, path), APR_HASH_KEY_STRING,
- (void*)1);
+ svn_hash_sets(dir->commit->deleted_entries,
+ apr_pstrdup(dir->commit->pool, path), (void *)1);
return SVN_NO_ERROR;
}
@@ -1609,7 +1656,6 @@ add_directory(const char *path,
dir_context_t *parent = parent_baton;
dir_context_t *dir;
svn_ra_serf__handler_t *handler;
- svn_ra_serf__simple_request_context_t *add_dir_ctx;
apr_status_t status;
const char *mkcol_target;
@@ -1621,7 +1667,7 @@ add_directory(const char *path,
dir->added = TRUE;
dir->base_revision = SVN_INVALID_REVNUM;
dir->copy_revision = copyfrom_revision;
- dir->copy_path = copyfrom_path;
+ dir->copy_path = apr_pstrdup(dir->pool, copyfrom_path);
dir->relpath = apr_pstrdup(dir->pool, path);
dir->name = svn_relpath_basename(dir->relpath, NULL);
dir->changed_props = apr_hash_make(dir->pool);
@@ -1636,33 +1682,34 @@ add_directory(const char *path,
else
{
/* Ensure our parent is checked out. */
- SVN_ERR(checkout_dir(parent));
+ SVN_ERR(checkout_dir(parent, dir->pool /* scratch_pool */));
dir->url = svn_path_url_add_component2(parent->commit->checked_in_url,
dir->name, dir->pool);
mkcol_target = svn_path_url_add_component2(
- parent->checkout->resource_url,
+ parent->working_url,
dir->name, dir->pool);
}
handler = apr_pcalloc(dir->pool, sizeof(*handler));
+ handler->handler_pool = dir->pool;
handler->conn = dir->commit->conn;
handler->session = dir->commit->session;
- add_dir_ctx = apr_pcalloc(dir->pool, sizeof(*add_dir_ctx));
- add_dir_ctx->pool = dir->pool;
-
- handler->response_handler = svn_ra_serf__handle_status_only;
- handler->response_baton = add_dir_ctx;
+ handler->response_handler = svn_ra_serf__expect_empty_body;
+ handler->response_baton = handler;
if (!dir->copy_path)
{
handler->method = "MKCOL";
handler->path = mkcol_target;
+
+ handler->header_delegate = setup_add_dir_common_headers;
+ handler->header_delegate_baton = dir;
}
else
{
apr_uri_t uri;
- const char *rel_copy_path, *basecoll_url, *req_url;
+ const char *req_url;
status = apr_uri_parse(dir->pool, dir->copy_path, &uri);
if (status)
@@ -1672,13 +1719,12 @@ add_directory(const char *path,
dir->copy_path);
}
- SVN_ERR(svn_ra_serf__get_baseline_info(&basecoll_url, &rel_copy_path,
- dir->commit->session,
- dir->commit->conn,
- uri.path, dir->copy_revision,
- NULL, dir_pool));
- req_url = svn_path_url_add_component2(basecoll_url, rel_copy_path,
- dir->pool);
+ /* ### conn==NULL for session->conns[0]. same as commit->conn. */
+ SVN_ERR(svn_ra_serf__get_stable_url(&req_url, NULL /* latest_revnum */,
+ dir->commit->session,
+ NULL /* conn */,
+ uri.path, dir->copy_revision,
+ dir_pool, dir_pool));
handler->method = "COPY";
handler->path = req_url;
@@ -1687,29 +1733,24 @@ add_directory(const char *path,
handler->header_delegate_baton = dir;
}
- svn_ra_serf__request_create(handler);
-
- SVN_ERR(svn_ra_serf__context_run_wait(&add_dir_ctx->done,
- dir->commit->session, dir->pool));
+ SVN_ERR(svn_ra_serf__context_run_one(handler, dir->pool));
- switch (add_dir_ctx->status)
+ switch (handler->sline.code)
{
case 201: /* Created: item was successfully copied */
case 204: /* No Content: item successfully replaced an existing target */
break;
case 403:
- SVN_ERR(add_dir_ctx->server_error.error);
return svn_error_createf(SVN_ERR_RA_DAV_FORBIDDEN, NULL,
_("Access to '%s' forbidden"),
handler->path);
default:
- SVN_ERR(add_dir_ctx->server_error.error);
return svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL,
_("Adding directory failed: %s on %s "
"(%d %s)"),
handler->method, handler->path,
- add_dir_ctx->status, add_dir_ctx->reason);
+ handler->sline.code, handler->sline.reason);
}
*child_baton = dir;
@@ -1749,9 +1790,10 @@ open_directory(const char *path,
else
{
SVN_ERR(get_version_url(&dir->url,
- dir->commit->session, dir->commit->conn,
+ dir->commit->session,
dir->relpath, dir->base_revision,
- dir->commit->checked_in_url, dir->pool));
+ dir->commit->checked_in_url,
+ dir->pool, dir->pool /* scratch_pool */));
}
*child_baton = dir;
@@ -1776,9 +1818,9 @@ change_dir_prop(void *dir_baton,
else
{
/* Ensure we have a checked out dir. */
- SVN_ERR(checkout_dir(dir));
+ SVN_ERR(checkout_dir(dir, pool /* scratch_pool */));
- proppatch_target = dir->checkout->resource_url;
+ proppatch_target = dir->working_url;
}
name = apr_pstrdup(dir->pool, name);
@@ -1800,7 +1842,7 @@ change_dir_prop(void *dir_baton,
}
else
{
- value = svn_string_create("", dir->pool);
+ value = svn_string_create_empty(dir->pool);
svn_ra_serf__set_prop(dir->removed_props, proppatch_target,
ns, name, value, dir->pool);
}
@@ -1826,7 +1868,6 @@ close_directory(void *dir_baton,
proppatch_ctx = apr_pcalloc(pool, sizeof(*proppatch_ctx));
proppatch_ctx->pool = pool;
- proppatch_ctx->progress.pool = pool;
proppatch_ctx->commit = dir->commit;
proppatch_ctx->relpath = dir->relpath;
proppatch_ctx->changed_props = dir->changed_props;
@@ -1839,7 +1880,7 @@ close_directory(void *dir_baton,
}
else
{
- proppatch_ctx->path = dir->checkout->resource_url;
+ proppatch_ctx->path = dir->working_url;
}
SVN_ERR(proppatch_resource(proppatch_ctx, dir->commit, dir->pool));
@@ -1871,7 +1912,7 @@ add_file(const char *path,
new_file->name = svn_relpath_basename(new_file->relpath, NULL);
new_file->added = TRUE;
new_file->base_revision = SVN_INVALID_REVNUM;
- new_file->copy_path = copy_path;
+ new_file->copy_path = apr_pstrdup(new_file->pool, copy_path);
new_file->copy_revision = copy_revision;
new_file->changed_props = apr_hash_make(new_file->pool);
new_file->removed_props = apr_hash_make(new_file->pool);
@@ -1887,17 +1928,16 @@ add_file(const char *path,
else
{
/* Ensure our parent directory has been checked out */
- SVN_ERR(checkout_dir(dir));
+ SVN_ERR(checkout_dir(dir, new_file->pool /* scratch_pool */));
new_file->url =
- svn_path_url_add_component2(dir->checkout->resource_url,
+ svn_path_url_add_component2(dir->working_url,
new_file->name, new_file->pool);
}
while (deleted_parent && deleted_parent[0] != '\0')
{
- if (apr_hash_get(dir->commit->deleted_entries,
- deleted_parent, APR_HASH_KEY_STRING))
+ if (svn_hash_gets(dir->commit->deleted_entries, deleted_parent))
{
break;
}
@@ -1907,30 +1947,35 @@ add_file(const char *path,
if (! ((dir->added && !dir->copy_path) ||
(deleted_parent && deleted_parent[0] != '\0')))
{
- svn_ra_serf__simple_request_context_t *head_ctx;
svn_ra_serf__handler_t *handler;
- head_ctx = apr_pcalloc(new_file->pool, sizeof(*head_ctx));
- head_ctx->pool = new_file->pool;
-
handler = apr_pcalloc(new_file->pool, sizeof(*handler));
+ handler->handler_pool = new_file->pool;
handler->session = new_file->commit->session;
handler->conn = new_file->commit->conn;
handler->method = "HEAD";
handler->path = svn_path_url_add_component2(
dir->commit->session->session_url.path,
path, new_file->pool);
- handler->response_handler = svn_ra_serf__handle_status_only;
- handler->response_baton = head_ctx;
- svn_ra_serf__request_create(handler);
+ handler->response_handler = svn_ra_serf__expect_empty_body;
+ handler->response_baton = handler;
- SVN_ERR(svn_ra_serf__context_run_wait(&head_ctx->done,
- new_file->commit->session,
- new_file->pool));
+ SVN_ERR(svn_ra_serf__context_run_one(handler, new_file->pool));
- if (head_ctx->status != 404)
+ if (handler->sline.code != 404)
{
- return svn_error_createf(SVN_ERR_RA_DAV_ALREADY_EXISTS, NULL,
+ if (handler->sline.code != 200)
+ {
+ svn_error_t *err;
+
+ err = svn_ra_serf__error_on_status(handler->sline,
+ handler->path,
+ handler->location);
+
+ SVN_ERR(err);
+ }
+
+ return svn_error_createf(SVN_ERR_FS_ALREADY_EXISTS, NULL,
_("File '%s' already exists"), path);
}
}
@@ -1972,9 +2017,9 @@ open_file(const char *path,
else
{
/* CHECKOUT the file into our activity. */
- SVN_ERR(checkout_file(new_file));
+ SVN_ERR(checkout_file(new_file, new_file->pool /* scratch_pool */));
- new_file->url = new_file->checkout->resource_url;
+ new_file->url = new_file->working_url;
}
*file_baton = new_file;
@@ -2011,7 +2056,8 @@ apply_textdelta(void *file_baton,
ctx->stream = svn_stream_create(ctx, pool);
svn_stream_set_write(ctx->stream, svndiff_stream_write);
- svn_txdelta_to_svndiff2(handler, handler_baton, ctx->stream, 0, pool);
+ svn_txdelta_to_svndiff3(handler, handler_baton, ctx->stream, 0,
+ SVN_DELTA_COMPRESSION_LEVEL_DEFAULT, pool);
if (base_checksum)
ctx->base_checksum = apr_pstrdup(ctx->pool, base_checksum);
@@ -2048,7 +2094,7 @@ change_file_prop(void *file_baton,
}
else
{
- value = svn_string_create("", file->pool);
+ value = svn_string_create_empty(file->pool);
svn_ra_serf__set_prop(file->removed_props, file->url,
ns, name, value, file->pool);
@@ -2060,7 +2106,7 @@ change_file_prop(void *file_baton,
static svn_error_t *
close_file(void *file_baton,
const char *text_checksum,
- apr_pool_t *pool)
+ apr_pool_t *scratch_pool)
{
file_context_t *ctx = file_baton;
svn_boolean_t put_empty_file = FALSE;
@@ -2071,11 +2117,10 @@ close_file(void *file_baton,
if (ctx->copy_path)
{
svn_ra_serf__handler_t *handler;
- svn_ra_serf__simple_request_context_t *copy_ctx;
apr_uri_t uri;
- const char *rel_copy_path, *basecoll_url, *req_url;
+ const char *req_url;
- status = apr_uri_parse(pool, ctx->copy_path, &uri);
+ status = apr_uri_parse(scratch_pool, ctx->copy_path, &uri);
if (status)
{
return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
@@ -2083,36 +2128,31 @@ close_file(void *file_baton,
ctx->copy_path);
}
- SVN_ERR(svn_ra_serf__get_baseline_info(&basecoll_url, &rel_copy_path,
- ctx->commit->session,
- ctx->commit->conn,
- uri.path, ctx->copy_revision,
- NULL, pool));
- req_url = svn_path_url_add_component2(basecoll_url, rel_copy_path, pool);
+ /* ### conn==NULL for session->conns[0]. same as commit->conn. */
+ SVN_ERR(svn_ra_serf__get_stable_url(&req_url, NULL /* latest_revnum */,
+ ctx->commit->session,
+ NULL /* conn */,
+ uri.path, ctx->copy_revision,
+ scratch_pool, scratch_pool));
- handler = apr_pcalloc(pool, sizeof(*handler));
+ handler = apr_pcalloc(scratch_pool, sizeof(*handler));
+ handler->handler_pool = scratch_pool;
handler->method = "COPY";
handler->path = req_url;
handler->conn = ctx->commit->conn;
handler->session = ctx->commit->session;
- copy_ctx = apr_pcalloc(pool, sizeof(*copy_ctx));
- copy_ctx->pool = pool;
-
- handler->response_handler = svn_ra_serf__handle_status_only;
- handler->response_baton = copy_ctx;
+ handler->response_handler = svn_ra_serf__expect_empty_body;
+ handler->response_baton = handler;
handler->header_delegate = setup_copy_file_headers;
handler->header_delegate_baton = ctx;
- svn_ra_serf__request_create(handler);
-
- SVN_ERR(svn_ra_serf__context_run_wait(&copy_ctx->done,
- ctx->commit->session, pool));
+ SVN_ERR(svn_ra_serf__context_run_one(handler, scratch_pool));
- if (copy_ctx->status != 201 && copy_ctx->status != 204)
+ if (handler->sline.code != 201 && handler->sline.code != 204)
{
- return return_response_err(handler, copy_ctx);
+ return svn_error_trace(return_response_err(handler));
}
}
@@ -2126,19 +2166,16 @@ close_file(void *file_baton,
if (ctx->stream || put_empty_file)
{
svn_ra_serf__handler_t *handler;
- svn_ra_serf__simple_request_context_t *put_ctx;
- handler = apr_pcalloc(pool, sizeof(*handler));
+ handler = apr_pcalloc(scratch_pool, sizeof(*handler));
+ handler->handler_pool = scratch_pool;
handler->method = "PUT";
handler->path = ctx->url;
handler->conn = ctx->commit->conn;
handler->session = ctx->commit->session;
- put_ctx = apr_pcalloc(pool, sizeof(*put_ctx));
- put_ctx->pool = pool;
-
- handler->response_handler = svn_ra_serf__handle_status_only;
- handler->response_baton = put_ctx;
+ handler->response_handler = svn_ra_serf__expect_empty_body;
+ handler->response_baton = handler;
if (put_empty_file)
{
@@ -2150,25 +2187,22 @@ close_file(void *file_baton,
{
handler->body_delegate = create_put_body;
handler->body_delegate_baton = ctx;
- handler->body_type = "application/vnd.svn-svndiff";
+ handler->body_type = SVN_SVNDIFF_MIME_TYPE;
}
handler->header_delegate = setup_put_headers;
handler->header_delegate_baton = ctx;
- svn_ra_serf__request_create(handler);
+ SVN_ERR(svn_ra_serf__context_run_one(handler, scratch_pool));
- SVN_ERR(svn_ra_serf__context_run_wait(&put_ctx->done,
- ctx->commit->session, pool));
-
- if (put_ctx->status != 204 && put_ctx->status != 201)
+ if (handler->sline.code != 204 && handler->sline.code != 201)
{
- return return_response_err(handler, put_ctx);
+ return svn_error_trace(return_response_err(handler));
}
}
if (ctx->svndiff)
- SVN_ERR(svn_io_file_close(ctx->svndiff, pool));
+ SVN_ERR(svn_io_file_close(ctx->svndiff, scratch_pool));
/* If we had any prop changes, push them via PROPPATCH. */
if (apr_hash_count(ctx->changed_props) ||
@@ -2178,7 +2212,6 @@ close_file(void *file_baton,
proppatch = apr_pcalloc(ctx->pool, sizeof(*proppatch));
proppatch->pool = ctx->pool;
- proppatch->progress.pool = pool;
proppatch->relpath = ctx->relpath;
proppatch->path = ctx->url;
proppatch->commit = ctx->commit;
@@ -2197,61 +2230,61 @@ close_edit(void *edit_baton,
apr_pool_t *pool)
{
commit_context_t *ctx = edit_baton;
- svn_ra_serf__merge_context_t *merge_ctx;
- svn_ra_serf__simple_request_context_t *delete_ctx;
- svn_ra_serf__handler_t *handler;
- svn_boolean_t *merge_done;
const char *merge_target =
ctx->activity_url ? ctx->activity_url : ctx->txn_url;
+ const svn_commit_info_t *commit_info;
+ int response_code;
+ svn_error_t *err = NULL;
/* MERGE our activity */
- SVN_ERR(svn_ra_serf__merge_create_req(&merge_ctx, ctx->session,
- ctx->session->conns[0],
- merge_target,
- ctx->lock_tokens,
- ctx->keep_locks,
- pool));
-
- merge_done = svn_ra_serf__merge_get_done_ptr(merge_ctx);
-
- SVN_ERR(svn_ra_serf__context_run_wait(merge_done, ctx->session, pool));
+ SVN_ERR(svn_ra_serf__run_merge(&commit_info, &response_code,
+ ctx->session,
+ ctx->session->conns[0],
+ merge_target,
+ ctx->lock_tokens,
+ ctx->keep_locks,
+ pool, pool));
- if (svn_ra_serf__merge_get_status(merge_ctx) != 200)
+ if (response_code != 200)
{
return svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL,
_("MERGE request failed: returned %d "
"(during commit)"),
- svn_ra_serf__merge_get_status(merge_ctx));
+ response_code);
}
+ ctx->txn_url = NULL; /* If HTTPv2, the txn is now done */
+
/* Inform the WC that we did a commit. */
if (ctx->callback)
- SVN_ERR(ctx->callback(svn_ra_serf__merge_get_commit_info(merge_ctx),
- ctx->callback_baton, pool));
+ err = ctx->callback(commit_info, ctx->callback_baton, pool);
/* If we're using activities, DELETE our completed activity. */
if (ctx->activity_url)
{
+ svn_ra_serf__handler_t *handler;
+
handler = apr_pcalloc(pool, sizeof(*handler));
+ handler->handler_pool = pool;
handler->method = "DELETE";
handler->path = ctx->activity_url;
handler->conn = ctx->conn;
handler->session = ctx->session;
- delete_ctx = apr_pcalloc(pool, sizeof(*delete_ctx));
- delete_ctx->pool = pool;
+ handler->response_handler = svn_ra_serf__expect_empty_body;
+ handler->response_baton = handler;
- handler->response_handler = svn_ra_serf__handle_status_only;
- handler->response_baton = delete_ctx;
+ ctx->activity_url = NULL; /* Don't try again in abort_edit() on fail */
- svn_ra_serf__request_create(handler);
+ SVN_ERR(svn_error_compose_create(
+ err,
+ svn_ra_serf__context_run_one(handler, pool)));
- SVN_ERR(svn_ra_serf__context_run_wait(&delete_ctx->done, ctx->session,
- pool));
-
- SVN_ERR_ASSERT(delete_ctx->status == 204);
+ SVN_ERR_ASSERT(handler->sline.code == 204);
}
+ SVN_ERR(err);
+
return SVN_NO_ERROR;
}
@@ -2261,7 +2294,6 @@ abort_edit(void *edit_baton,
{
commit_context_t *ctx = edit_baton;
svn_ra_serf__handler_t *handler;
- svn_ra_serf__simple_request_context_t *delete_ctx;
/* If an activity or transaction wasn't even created, don't bother
trying to delete it. */
@@ -2274,35 +2306,32 @@ abort_edit(void *edit_baton,
/* DELETE our aborted activity */
handler = apr_pcalloc(pool, sizeof(*handler));
+ handler->handler_pool = pool;
handler->method = "DELETE";
handler->conn = ctx->session->conns[0];
handler->session = ctx->session;
- delete_ctx = apr_pcalloc(pool, sizeof(*delete_ctx));
- delete_ctx->pool = pool;
-
- handler->response_handler = svn_ra_serf__handle_status_only;
- handler->response_baton = delete_ctx;
+ handler->response_handler = svn_ra_serf__expect_empty_body;
+ handler->response_baton = handler;
if (USING_HTTPV2_COMMIT_SUPPORT(ctx)) /* HTTP v2 */
handler->path = ctx->txn_url;
else
handler->path = ctx->activity_url;
- svn_ra_serf__request_create(handler);
-
- SVN_ERR(svn_ra_serf__context_run_wait(&delete_ctx->done, ctx->session,
- pool));
+ SVN_ERR(svn_ra_serf__context_run_one(handler, pool));
/* 204 if deleted,
403 if DELETE was forbidden (indicates MKACTIVITY was forbidden too),
404 if the activity wasn't found. */
- if (delete_ctx->status != 204 &&
- delete_ctx->status != 403 &&
- delete_ctx->status != 404
+ if (handler->sline.code != 204
+ && handler->sline.code != 403
+ && handler->sline.code != 404
)
{
- SVN_ERR_MALFUNCTION();
+ return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
+ _("DELETE returned unexpected status: %d"),
+ handler->sline.code);
}
return SVN_NO_ERROR;
@@ -2322,7 +2351,9 @@ svn_ra_serf__get_commit_editor(svn_ra_session_t *ra_session,
svn_ra_serf__session_t *session = ra_session->priv;
svn_delta_editor_t *editor;
commit_context_t *ctx;
- apr_hash_index_t *hi;
+ const char *repos_root;
+ const char *base_relpath;
+ svn_boolean_t supports_ephemeral_props;
ctx = apr_pcalloc(pool, sizeof(*ctx));
@@ -2331,22 +2362,28 @@ svn_ra_serf__get_commit_editor(svn_ra_session_t *ra_session,
ctx->session = session;
ctx->conn = session->conns[0];
- ctx->revprop_table = apr_hash_make(pool);
- for (hi = apr_hash_first(pool, revprop_table); hi; hi = apr_hash_next(hi))
- {
- const void *key;
- apr_ssize_t klen;
- void *val;
+ ctx->revprop_table = svn_prop_hash_dup(revprop_table, pool);
- apr_hash_this(hi, &key, &klen, &val);
- apr_hash_set(ctx->revprop_table, apr_pstrdup(pool, key), klen,
- svn_string_dup(val, pool));
+ /* If the server supports ephemeral properties, add some carrying
+ interesting version information. */
+ SVN_ERR(svn_ra_serf__has_capability(ra_session, &supports_ephemeral_props,
+ SVN_RA_CAPABILITY_EPHEMERAL_TXNPROPS,
+ pool));
+ if (supports_ephemeral_props)
+ {
+ svn_hash_sets(ctx->revprop_table,
+ apr_pstrdup(pool, SVN_PROP_TXN_CLIENT_COMPAT_VERSION),
+ svn_string_create(SVN_VER_NUMBER, pool));
+ svn_hash_sets(ctx->revprop_table,
+ apr_pstrdup(pool, SVN_PROP_TXN_USER_AGENT),
+ svn_string_create(session->useragent, pool));
}
ctx->callback = callback;
ctx->callback_baton = callback_baton;
- ctx->lock_tokens = lock_tokens;
+ ctx->lock_tokens = (lock_tokens && apr_hash_count(lock_tokens))
+ ? lock_tokens : NULL;
ctx->keep_locks = keep_locks;
ctx->deleted_entries = apr_hash_make(ctx->pool);
@@ -2369,6 +2406,14 @@ svn_ra_serf__get_commit_editor(svn_ra_session_t *ra_session,
*ret_editor = editor;
*edit_baton = ctx;
+ SVN_ERR(svn_ra_serf__get_repos_root(ra_session, &repos_root, pool));
+ base_relpath = svn_uri_skip_ancestor(repos_root, session->session_url_str,
+ pool);
+
+ SVN_ERR(svn_editor__insert_shims(ret_editor, edit_baton, *ret_editor,
+ *edit_baton, repos_root, base_relpath,
+ session->shim_callbacks, pool, pool));
+
return SVN_NO_ERROR;
}
@@ -2383,8 +2428,8 @@ svn_ra_serf__change_rev_prop(svn_ra_session_t *ra_session,
svn_ra_serf__session_t *session = ra_session->priv;
proppatch_context_t *proppatch_ctx;
commit_context_t *commit;
- const char *vcc_url, *proppatch_target, *ns;
- apr_hash_t *props;
+ const char *proppatch_target;
+ const char *ns;
svn_error_t *err;
if (old_value_p)
@@ -2411,21 +2456,15 @@ svn_ra_serf__change_rev_prop(svn_ra_session_t *ra_session,
}
else
{
- svn_ra_serf__propfind_context_t *propfind_ctx;
+ const char *vcc_url;
SVN_ERR(svn_ra_serf__discover_vcc(&vcc_url, commit->session,
commit->conn, pool));
- props = apr_hash_make(pool);
-
- /* ### switch to svn_ra_serf__retrieve_props */
- SVN_ERR(svn_ra_serf__deliver_props(&propfind_ctx, props, commit->session,
- commit->conn, vcc_url, rev, "0",
- checked_in_props, NULL, pool));
- SVN_ERR(svn_ra_serf__wait_for_props(propfind_ctx, commit->session, pool));
-
- proppatch_target = svn_ra_serf__get_ver_prop(props, vcc_url, rev,
- "DAV:", "href");
+ SVN_ERR(svn_ra_serf__fetch_dav_prop(&proppatch_target,
+ commit->conn, vcc_url, rev,
+ "href",
+ pool, pool));
}
if (strncmp(name, SVN_PROP_PREFIX, sizeof(SVN_PROP_PREFIX) - 1) == 0)
@@ -2441,7 +2480,6 @@ svn_ra_serf__change_rev_prop(svn_ra_session_t *ra_session,
/* PROPPATCH our log message and pass it along. */
proppatch_ctx = apr_pcalloc(pool, sizeof(*proppatch_ctx));
proppatch_ctx->pool = pool;
- proppatch_ctx->progress.pool = pool;
proppatch_ctx->commit = commit;
proppatch_ctx->path = proppatch_target;
proppatch_ctx->changed_props = apr_hash_make(proppatch_ctx->pool);
@@ -2461,7 +2499,7 @@ svn_ra_serf__change_rev_prop(svn_ra_session_t *ra_session,
}
else if (old_value_p)
{
- svn_string_t *dummy_value = svn_string_create("", proppatch_ctx->pool);
+ svn_string_t *dummy_value = svn_string_create_empty(proppatch_ctx->pool);
svn_ra_serf__set_prop(proppatch_ctx->previous_removed_props,
proppatch_ctx->path,
@@ -2475,7 +2513,7 @@ svn_ra_serf__change_rev_prop(svn_ra_session_t *ra_session,
}
else
{
- value = svn_string_create("", proppatch_ctx->pool);
+ value = svn_string_create_empty(proppatch_ctx->pool);
svn_ra_serf__set_prop(proppatch_ctx->removed_props, proppatch_ctx->path,
ns, name, value, proppatch_ctx->pool);
diff --git a/subversion/libsvn_ra_serf/get_deleted_rev.c b/subversion/libsvn_ra_serf/get_deleted_rev.c
index 09db22c..40f6b1d 100644
--- a/subversion/libsvn_ra_serf/get_deleted_rev.c
+++ b/subversion/libsvn_ra_serf/get_deleted_rev.c
@@ -35,14 +35,13 @@
/*
* This enum represents the current state of our XML parsing for a REPORT.
*/
-typedef enum drev_state_e {
- NONE = 0,
+enum drev_state_e {
+ INITIAL = 0,
+ REPORT,
VERSION_NAME
-} drev_state_e;
+};
typedef struct drev_context_t {
- apr_pool_t *pool;
-
const char *path;
svn_revnum_t peg_revision;
svn_revnum_t end_revision;
@@ -51,90 +50,40 @@ typedef struct drev_context_t {
the range PEG_REVISION-END-END_REVISION? */
svn_revnum_t *revision_deleted;
- /* are we done? */
- svn_boolean_t done;
-
} drev_context_t;
-
-static void
-push_state(svn_ra_serf__xml_parser_t *parser,
- drev_context_t *drev_ctx,
- drev_state_e state)
-{
- svn_ra_serf__xml_push_state(parser, state);
+#define D_ "DAV:"
+#define S_ SVN_XML_NAMESPACE
+static const svn_ra_serf__xml_transition_t getdrev_ttable[] = {
+ { INITIAL, S_, "get-deleted-rev-report", REPORT,
+ FALSE, { NULL }, FALSE },
- if (state == VERSION_NAME)
- parser->state->private = NULL;
-}
+ { REPORT, D_, SVN_DAV__VERSION_NAME, VERSION_NAME,
+ TRUE, { NULL }, TRUE },
-static svn_error_t *
-start_getdrev(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name,
- const char **attrs)
-{
- drev_context_t *drev_ctx = userData;
- drev_state_e state;
-
- state = parser->state->current_state;
-
- if (state == NONE &&
- strcmp(name.name, SVN_DAV__VERSION_NAME) == 0)
- {
- push_state(parser, drev_ctx, VERSION_NAME);
- }
-
- return SVN_NO_ERROR;
-}
+ { 0 }
+};
+
+/* Conforms to svn_ra_serf__xml_closed_t */
static svn_error_t *
-end_getdrev(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name)
+getdrev_closed(svn_ra_serf__xml_estate_t *xes,
+ void *baton,
+ int leaving_state,
+ const svn_string_t *cdata,
+ apr_hash_t *attrs,
+ apr_pool_t *scratch_pool)
{
- drev_context_t *drev_ctx = userData;
- drev_state_e state;
- svn_string_t *info;
+ drev_context_t *drev_ctx = baton;
- state = parser->state->current_state;
- info = parser->state->private;
+ SVN_ERR_ASSERT(leaving_state == VERSION_NAME);
+ SVN_ERR_ASSERT(cdata != NULL);
- if (state == VERSION_NAME &&
- strcmp(name.name, SVN_DAV__VERSION_NAME) == 0 &&
- info)
- {
- *drev_ctx->revision_deleted = SVN_STR_TO_REV(info->data);
- svn_ra_serf__xml_pop_state(parser);
- }
+ *drev_ctx->revision_deleted = SVN_STR_TO_REV(cdata->data);
return SVN_NO_ERROR;
}
-static svn_error_t *
-cdata_getdrev(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- const char *data,
- apr_size_t len)
-{
- drev_context_t *drev_ctx = userData;
- drev_state_e state;
-
- UNUSED_CTX(drev_ctx);
-
- state = parser->state->current_state;
- switch (state)
- {
- case VERSION_NAME:
- parser->state->private = svn_string_ncreate(data, len,
- parser->state->pool);
- break;
- default:
- break;
- }
-
- return SVN_NO_ERROR;
-}
/* Implements svn_ra_serf__request_body_delegate_t */
static svn_error_t *
@@ -186,54 +135,44 @@ svn_ra_serf__get_deleted_rev(svn_ra_session_t *session,
drev_context_t *drev_ctx;
svn_ra_serf__session_t *ras = session->priv;
svn_ra_serf__handler_t *handler;
- svn_ra_serf__xml_parser_t *parser_ctx;
- const char *relative_url, *basecoll_url, *req_url;
- int status_code = 0;
+ svn_ra_serf__xml_context_t *xmlctx;
+ const char *req_url;
svn_error_t *err;
drev_ctx = apr_pcalloc(pool, sizeof(*drev_ctx));
drev_ctx->path = path;
drev_ctx->peg_revision = peg_revision;
drev_ctx->end_revision = end_revision;
- drev_ctx->pool = pool;
drev_ctx->revision_deleted = revision_deleted;
- drev_ctx->done = FALSE;
-
- SVN_ERR(svn_ra_serf__get_baseline_info(&basecoll_url, &relative_url,
- ras, NULL, NULL, peg_revision, NULL,
- pool));
- req_url = svn_path_url_add_component2(basecoll_url, relative_url, pool);
+ SVN_ERR(svn_ra_serf__get_stable_url(&req_url, NULL /* latest_revnum */,
+ ras, NULL /* conn */,
+ NULL /* url */, peg_revision,
+ pool, pool));
- parser_ctx = apr_pcalloc(pool, sizeof(*parser_ctx));
- parser_ctx->pool = pool;
- parser_ctx->user_data = drev_ctx;
- parser_ctx->start = start_getdrev;
- parser_ctx->end = end_getdrev;
- parser_ctx->cdata = cdata_getdrev;
- parser_ctx->done = &drev_ctx->done;
- parser_ctx->status_code = &status_code;
+ xmlctx = svn_ra_serf__xml_context_create(getdrev_ttable,
+ NULL, getdrev_closed, NULL,
+ drev_ctx,
+ pool);
+ handler = svn_ra_serf__create_expat_handler(xmlctx, pool);
- handler = apr_pcalloc(pool, sizeof(*handler));
handler->method = "REPORT";
handler->path = req_url;
handler->body_type = "text/xml";
- handler->response_handler = svn_ra_serf__handle_xml_parser;
handler->body_delegate = create_getdrev_body;
handler->body_delegate_baton = drev_ctx;
handler->conn = ras->conns[0];
handler->session = ras;
- handler->response_baton = parser_ctx;
- svn_ra_serf__request_create(handler);
-
- err = svn_ra_serf__context_run_wait(&drev_ctx->done, ras, pool);
+ err = svn_ra_serf__context_run_one(handler, pool);
/* Map status 501: Method Not Implemented to our not implemented error.
1.5.x servers and older don't support this report. */
- if (status_code == 501)
+ if (handler->sline.code == 501)
return svn_error_createf(SVN_ERR_RA_NOT_IMPLEMENTED, err,
- _("'%s' REPORT not implemented"), "get-deleted-rev");
+ _("'%s' REPORT not implemented"),
+ "get-deleted-rev");
SVN_ERR(err);
+
return SVN_NO_ERROR;
}
diff --git a/subversion/libsvn_ra_serf/getdate.c b/subversion/libsvn_ra_serf/getdate.c
index 3899ccf..cc1014e 100644
--- a/subversion/libsvn_ra_serf/getdate.c
+++ b/subversion/libsvn_ra_serf/getdate.c
@@ -24,9 +24,6 @@
#include <apr_uri.h>
-
-#include <expat.h>
-
#include <serf.h>
#include "svn_pools.h"
@@ -46,120 +43,54 @@
/*
* This enum represents the current state of our XML parsing for a REPORT.
*/
-typedef enum date_state_e {
- NONE = 0,
+enum date_state_e {
+ INITIAL = 0,
+ REPORT,
VERSION_NAME
-} date_state_e;
+};
-typedef struct date_info_t {
- /* The currently collected value as we build it up */
- const char *tmp;
- apr_size_t tmp_len;
-} date_info_t;
typedef struct date_context_t {
- apr_pool_t *pool;
-
/* The time asked about. */
apr_time_t time;
/* What was the youngest revision at that time? */
svn_revnum_t *revision;
- /* are we done? */
- svn_boolean_t done;
-
} date_context_t;
-
-static date_info_t *
-push_state(svn_ra_serf__xml_parser_t *parser,
- date_context_t *date_ctx,
- date_state_e state)
-{
- svn_ra_serf__xml_push_state(parser, state);
-
- if (state == VERSION_NAME)
- {
- date_info_t *info;
-
- info = apr_pcalloc(parser->state->pool, sizeof(*info));
+#define D_ "DAV:"
+#define S_ SVN_XML_NAMESPACE
+static const svn_ra_serf__xml_transition_t date_ttable[] = {
+ { INITIAL, S_, "dated-rev-report", REPORT,
+ FALSE, { NULL }, FALSE },
- parser->state->private = info;
- }
+ { REPORT, D_, SVN_DAV__VERSION_NAME, VERSION_NAME,
+ TRUE, { NULL }, TRUE },
- return parser->state->private;
-}
-
-static svn_error_t *
-start_getdate(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name,
- const char **attrs)
-{
- date_context_t *date_ctx = userData;
- date_state_e state;
+ { 0 }
+};
- state = parser->state->current_state;
-
- if (state == NONE &&
- strcmp(name.name, SVN_DAV__VERSION_NAME) == 0)
- {
- push_state(parser, date_ctx, VERSION_NAME);
- }
-
- return SVN_NO_ERROR;
-}
+/* Conforms to svn_ra_serf__xml_closed_t */
static svn_error_t *
-end_getdate(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name)
+date_closed(svn_ra_serf__xml_estate_t *xes,
+ void *baton,
+ int leaving_state,
+ const svn_string_t *cdata,
+ apr_hash_t *attrs,
+ apr_pool_t *scratch_pool)
{
- date_context_t *date_ctx = userData;
- date_state_e state;
- date_info_t *info;
+ date_context_t *date_ctx = baton;
- state = parser->state->current_state;
- info = parser->state->private;
+ SVN_ERR_ASSERT(leaving_state == VERSION_NAME);
+ SVN_ERR_ASSERT(cdata != NULL);
- if (state == VERSION_NAME &&
- strcmp(name.name, SVN_DAV__VERSION_NAME) == 0)
- {
- *date_ctx->revision = SVN_STR_TO_REV(info->tmp);
- svn_ra_serf__xml_pop_state(parser);
- }
+ *date_ctx->revision = SVN_STR_TO_REV(cdata->data);
return SVN_NO_ERROR;
}
-static svn_error_t *
-cdata_getdate(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- const char *data,
- apr_size_t len)
-{
- date_context_t *date_ctx = userData;
- date_state_e state;
- date_info_t *info;
-
- UNUSED_CTX(date_ctx);
-
- state = parser->state->current_state;
- info = parser->state->private;
-
- switch (state)
- {
- case VERSION_NAME:
- svn_ra_serf__expand_string(&info->tmp, &info->tmp_len,
- data, len, parser->state->pool);
- break;
- default:
- break;
- }
-
- return SVN_NO_ERROR;
-}
/* Implements svn_ra_serf__request_body_delegate_t */
static svn_error_t *
@@ -198,19 +129,21 @@ svn_ra_serf__get_dated_revision(svn_ra_session_t *ra_session,
date_context_t *date_ctx;
svn_ra_serf__session_t *session = ra_session->priv;
svn_ra_serf__handler_t *handler;
- svn_ra_serf__xml_parser_t *parser_ctx;
+ svn_ra_serf__xml_context_t *xmlctx;
const char *report_target;
- int status_code;
+ svn_error_t *err;
- date_ctx = apr_pcalloc(pool, sizeof(*date_ctx));
- date_ctx->pool = pool;
+ date_ctx = apr_palloc(pool, sizeof(*date_ctx));
date_ctx->time = tm;
date_ctx->revision = revision;
- date_ctx->done = FALSE;
SVN_ERR(svn_ra_serf__report_resource(&report_target, session, NULL, pool));
- handler = apr_pcalloc(pool, sizeof(*handler));
+ xmlctx = svn_ra_serf__xml_context_create(date_ttable,
+ NULL, date_closed, NULL,
+ date_ctx,
+ pool);
+ handler = svn_ra_serf__create_expat_handler(xmlctx, pool);
handler->method = "REPORT";
handler->path = report_target;
@@ -218,25 +151,20 @@ svn_ra_serf__get_dated_revision(svn_ra_session_t *ra_session,
handler->conn = session->conns[0];
handler->session = session;
- parser_ctx = apr_pcalloc(pool, sizeof(*parser_ctx));
-
- parser_ctx->pool = pool;
- parser_ctx->user_data = date_ctx;
- parser_ctx->start = start_getdate;
- parser_ctx->end = end_getdate;
- parser_ctx->cdata = cdata_getdate;
- parser_ctx->done = &date_ctx->done;
- parser_ctx->status_code = &status_code;
-
handler->body_delegate = create_getdate_body;
handler->body_delegate_baton = date_ctx;
- handler->response_handler = svn_ra_serf__handle_xml_parser;
- handler->response_baton = parser_ctx;
+ *date_ctx->revision = SVN_INVALID_REVNUM;
- svn_ra_serf__request_create(handler);
+ err = svn_ra_serf__context_run_one(handler, pool);
- *date_ctx->revision = SVN_INVALID_REVNUM;
+ SVN_ERR(svn_error_compose_create(
+ svn_ra_serf__error_on_status(handler->sline,
+ report_target,
+ handler->location),
+ err));
+
+ SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(*revision));
- return svn_ra_serf__context_run_wait(&date_ctx->done, session, pool);
+ return SVN_NO_ERROR;
}
diff --git a/subversion/libsvn_ra_serf/getlocations.c b/subversion/libsvn_ra_serf/getlocations.c
index 6d3fa97..1ae4f82 100644
--- a/subversion/libsvn_ra_serf/getlocations.c
+++ b/subversion/libsvn_ra_serf/getlocations.c
@@ -27,6 +27,7 @@
#include <serf.h>
+#include "svn_hash.h"
#include "svn_path.h"
#include "svn_pools.h"
#include "svn_ra.h"
@@ -41,18 +42,11 @@
/*
* This enum represents the current state of our XML parsing for a REPORT.
*/
-typedef enum loc_state_e {
+enum loc_state_e {
+ INITIAL = 0,
REPORT,
LOCATION
-} loc_state_e;
-
-typedef struct loc_state_list_t {
- /* The current state that we are in now. */
- loc_state_e state;
-
- /* The previous state we were in. */
- struct loc_state_list_t *prev;
-} loc_state_list_t;
+};
typedef struct loc_context_t {
/* pool to allocate memory from */
@@ -66,115 +60,50 @@ typedef struct loc_context_t {
/* Returned location hash */
apr_hash_t *paths;
- /* Current state we're in */
- loc_state_list_t *state;
- loc_state_list_t *free_state;
-
- int status_code;
-
- svn_boolean_t done;
} loc_context_t;
-
-static void
-push_state(loc_context_t *loc_ctx, loc_state_e state)
-{
- loc_state_list_t *new_state;
-
- if (!loc_ctx->free_state)
- {
- new_state = apr_palloc(loc_ctx->pool, sizeof(*loc_ctx->state));
- }
- else
- {
- new_state = loc_ctx->free_state;
- loc_ctx->free_state = loc_ctx->free_state->prev;
- }
- new_state->state = state;
-
- /* Add it to the state chain. */
- new_state->prev = loc_ctx->state;
- loc_ctx->state = new_state;
-}
+#define D_ "DAV:"
+#define S_ SVN_XML_NAMESPACE
+static const svn_ra_serf__xml_transition_t getloc_ttable[] = {
+ { INITIAL, S_, "get-locations-report", REPORT,
+ FALSE, { NULL }, FALSE },
-static void pop_state(loc_context_t *loc_ctx)
-{
- loc_state_list_t *free_state;
- free_state = loc_ctx->state;
- /* advance the current state */
- loc_ctx->state = loc_ctx->state->prev;
- free_state->prev = loc_ctx->free_state;
- loc_ctx->free_state = free_state;
-}
+ { REPORT, S_, "location", LOCATION,
+ FALSE, { "?rev", "?path", NULL }, TRUE },
-static svn_error_t *
-start_getloc(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name,
- const char **attrs)
-{
- loc_context_t *loc_ctx = userData;
-
- if (!loc_ctx->state && strcmp(name.name, "get-locations-report") == 0)
- {
- push_state(loc_ctx, REPORT);
- }
- else if (loc_ctx->state &&
- loc_ctx->state->state == REPORT &&
- strcmp(name.name, "location") == 0)
- {
- svn_revnum_t rev = SVN_INVALID_REVNUM;
- const char *revstr, *path;
-
- revstr = svn_xml_get_attr_value("rev", attrs);
- if (revstr)
- {
- rev = SVN_STR_TO_REV(revstr);
- }
-
- path = svn_xml_get_attr_value("path", attrs);
-
- if (SVN_IS_VALID_REVNUM(rev) && path)
- {
- apr_hash_set(loc_ctx->paths,
- apr_pmemdup(loc_ctx->pool, &rev, sizeof(rev)),
- sizeof(rev),
- apr_pstrdup(loc_ctx->pool, path));
- }
- }
-
- return SVN_NO_ERROR;
-}
+ { 0 }
+};
+
+/* Conforms to svn_ra_serf__xml_closed_t */
static svn_error_t *
-end_getloc(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name)
+getloc_closed(svn_ra_serf__xml_estate_t *xes,
+ void *baton,
+ int leaving_state,
+ const svn_string_t *cdata,
+ apr_hash_t *attrs,
+ apr_pool_t *scratch_pool)
{
- loc_context_t *loc_ctx = userData;
- loc_state_list_t *cur_state;
-
- if (!loc_ctx->state)
- {
- return SVN_NO_ERROR;
- }
+ loc_context_t *loc_ctx = baton;
+ const char *revstr;
+ const char *path;
- cur_state = loc_ctx->state;
+ SVN_ERR_ASSERT(leaving_state == LOCATION);
- if (cur_state->state == REPORT &&
- strcmp(name.name, "get-locations-report") == 0)
- {
- pop_state(loc_ctx);
- }
- else if (cur_state->state == LOCATION &&
- strcmp(name.name, "location") == 0)
+ revstr = svn_hash_gets(attrs, "rev");
+ path = svn_hash_gets(attrs, "path");
+ if (revstr != NULL && path != NULL)
{
- pop_state(loc_ctx);
+ svn_revnum_t rev = SVN_STR_TO_REV(revstr);
+ apr_hash_set(loc_ctx->paths,
+ apr_pmemdup(loc_ctx->pool, &rev, sizeof(rev)), sizeof(rev),
+ apr_pstrdup(loc_ctx->pool, path));
}
return SVN_NO_ERROR;
}
+
/* Implements svn_ra_serf__request_body_delegate_t */
static svn_error_t *
create_get_locations_body(serf_bucket_t **body_bkt,
@@ -228,8 +157,8 @@ svn_ra_serf__get_locations(svn_ra_session_t *ra_session,
loc_context_t *loc_ctx;
svn_ra_serf__session_t *session = ra_session->priv;
svn_ra_serf__handler_t *handler;
- svn_ra_serf__xml_parser_t *parser_ctx;
- const char *relative_url, *basecoll_url, *req_url;
+ svn_ra_serf__xml_context_t *xmlctx;
+ const char *req_url;
svn_error_t *err;
loc_ctx = apr_pcalloc(pool, sizeof(*loc_ctx));
@@ -237,18 +166,20 @@ svn_ra_serf__get_locations(svn_ra_session_t *ra_session,
loc_ctx->path = path;
loc_ctx->peg_revision = peg_revision;
loc_ctx->location_revisions = location_revisions;
- loc_ctx->done = FALSE;
loc_ctx->paths = apr_hash_make(loc_ctx->pool);
*locations = loc_ctx->paths;
- SVN_ERR(svn_ra_serf__get_baseline_info(&basecoll_url, &relative_url, session,
- NULL, NULL, peg_revision, NULL,
- pool));
-
- req_url = svn_path_url_add_component2(basecoll_url, relative_url, pool);
+ SVN_ERR(svn_ra_serf__get_stable_url(&req_url, NULL /* latest_revnum */,
+ session, NULL /* conn */,
+ NULL /* url */, peg_revision,
+ pool, pool));
- handler = apr_pcalloc(pool, sizeof(*handler));
+ xmlctx = svn_ra_serf__xml_context_create(getloc_ttable,
+ NULL, getloc_closed, NULL,
+ loc_ctx,
+ pool);
+ handler = svn_ra_serf__create_expat_handler(xmlctx, pool);
handler->method = "REPORT";
handler->path = req_url;
@@ -258,26 +189,12 @@ svn_ra_serf__get_locations(svn_ra_session_t *ra_session,
handler->conn = session->conns[0];
handler->session = session;
- parser_ctx = apr_pcalloc(pool, sizeof(*parser_ctx));
-
- parser_ctx->pool = pool;
- parser_ctx->user_data = loc_ctx;
- parser_ctx->start = start_getloc;
- parser_ctx->end = end_getloc;
- parser_ctx->status_code = &loc_ctx->status_code;
- parser_ctx->done = &loc_ctx->done;
-
- handler->response_handler = svn_ra_serf__handle_xml_parser;
- handler->response_baton = parser_ctx;
-
- svn_ra_serf__request_create(handler);
-
- err = svn_ra_serf__context_run_wait(&loc_ctx->done, session, pool);
+ err = svn_ra_serf__context_run_one(handler, pool);
SVN_ERR(svn_error_compose_create(
- svn_ra_serf__error_on_status(loc_ctx->status_code,
+ svn_ra_serf__error_on_status(handler->sline,
req_url,
- parser_ctx->location),
+ handler->location),
err));
return SVN_NO_ERROR;
diff --git a/subversion/libsvn_ra_serf/getlocationsegments.c b/subversion/libsvn_ra_serf/getlocationsegments.c
index 5f2179d..e5c58a9 100644
--- a/subversion/libsvn_ra_serf/getlocationsegments.c
+++ b/subversion/libsvn_ra_serf/getlocationsegments.c
@@ -25,9 +25,9 @@
#include <apr_uri.h>
-#include <expat.h>
#include <serf.h>
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_ra.h"
#include "svn_xml.h"
@@ -50,82 +50,60 @@ typedef struct gls_context_t {
svn_location_segment_receiver_t receiver;
void *receiver_baton;
- /* subpool used only as long as a single receiver invocation */
- apr_pool_t *subpool;
+} gls_context_t;
- /* True iff we're looking at a child of the outer report tag */
- svn_boolean_t inside_report;
+enum {
+ INITIAL = 0,
+ REPORT,
+ SEGMENT
+};
- int status_code;
+#define D_ "DAV:"
+#define S_ SVN_XML_NAMESPACE
+static const svn_ra_serf__xml_transition_t gls_ttable[] = {
+ { INITIAL, S_, "get-location-segments-report", REPORT,
+ FALSE, { NULL }, FALSE },
- svn_boolean_t done;
-} gls_context_t;
+ { REPORT, S_, "location-segment", SEGMENT,
+ FALSE, { "?path", "range-start", "range-end", NULL }, TRUE },
+
+ { 0 }
+};
+/* Conforms to svn_ra_serf__xml_closed_t */
static svn_error_t *
-start_gls(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name,
- const char **attrs)
+gls_closed(svn_ra_serf__xml_estate_t *xes,
+ void *baton,
+ int leaving_state,
+ const svn_string_t *cdata,
+ apr_hash_t *attrs,
+ apr_pool_t *scratch_pool)
{
- gls_context_t *gls_ctx = userData;
-
- if ((! gls_ctx->inside_report)
- && strcmp(name.name, "get-location-segments-report") == 0)
- {
- gls_ctx->inside_report = TRUE;
- }
- else if (gls_ctx->inside_report
- && strcmp(name.name, "location-segment") == 0)
- {
- const char *rev_str;
- svn_revnum_t range_start = SVN_INVALID_REVNUM;
- svn_revnum_t range_end = SVN_INVALID_REVNUM;
- const char *path = NULL;
-
- path = svn_xml_get_attr_value("path", attrs);
- rev_str = svn_xml_get_attr_value("range-start", attrs);
- if (rev_str)
- range_start = SVN_STR_TO_REV(rev_str);
- rev_str = svn_xml_get_attr_value("range-end", attrs);
- if (rev_str)
- range_end = SVN_STR_TO_REV(rev_str);
-
- if (SVN_IS_VALID_REVNUM(range_start) && SVN_IS_VALID_REVNUM(range_end))
- {
- svn_location_segment_t *segment = apr_pcalloc(gls_ctx->subpool,
- sizeof(*segment));
- segment->path = path;
- segment->range_start = range_start;
- segment->range_end = range_end;
- SVN_ERR(gls_ctx->receiver(segment,
- gls_ctx->receiver_baton,
- gls_ctx->subpool));
- svn_pool_clear(gls_ctx->subpool);
- }
- else
- {
- return svn_error_create(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Expected valid revision range"));
- }
- }
+ gls_context_t *gls_ctx = baton;
+ const char *path;
+ const char *start_str;
+ const char *end_str;
+ svn_location_segment_t segment;
- return SVN_NO_ERROR;
-}
+ SVN_ERR_ASSERT(leaving_state == SEGMENT);
-static svn_error_t *
-end_gls(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name)
-{
- gls_context_t *gls_ctx = userData;
+ path = svn_hash_gets(attrs, "path");
+ start_str = svn_hash_gets(attrs, "range-start");
+ end_str = svn_hash_gets(attrs, "range-end");
- if (strcmp(name.name, "get-location-segments-report") == 0)
- gls_ctx->inside_report = FALSE;
+ /* The transition table said these must exist. */
+ SVN_ERR_ASSERT(start_str && end_str);
+
+ segment.path = path; /* may be NULL */
+ segment.range_start = SVN_STR_TO_REV(start_str);
+ segment.range_end = SVN_STR_TO_REV(end_str);
+ SVN_ERR(gls_ctx->receiver(&segment, gls_ctx->receiver_baton, scratch_pool));
return SVN_NO_ERROR;
}
+
/* Implements svn_ra_serf__request_body_delegate_t */
static svn_error_t *
create_gls_body(serf_bucket_t **body_bkt,
@@ -182,9 +160,9 @@ svn_ra_serf__get_location_segments(svn_ra_session_t *ra_session,
gls_context_t *gls_ctx;
svn_ra_serf__session_t *session = ra_session->priv;
svn_ra_serf__handler_t *handler;
- svn_ra_serf__xml_parser_t *parser_ctx;
- const char *relative_url, *basecoll_url, *req_url;
- svn_error_t *err, *err2;
+ svn_ra_serf__xml_context_t *xmlctx;
+ const char *req_url;
+ svn_error_t *err;
gls_ctx = apr_pcalloc(pool, sizeof(*gls_ctx));
gls_ctx->path = path;
@@ -193,16 +171,17 @@ svn_ra_serf__get_location_segments(svn_ra_session_t *ra_session,
gls_ctx->end_rev = end_rev;
gls_ctx->receiver = receiver;
gls_ctx->receiver_baton = receiver_baton;
- gls_ctx->subpool = svn_pool_create(pool);
- gls_ctx->inside_report = FALSE;
- gls_ctx->done = FALSE;
-
- SVN_ERR(svn_ra_serf__get_baseline_info(&basecoll_url, &relative_url, session,
- NULL, NULL, peg_revision, NULL, pool));
- req_url = svn_path_url_add_component2(basecoll_url, relative_url, pool);
+ SVN_ERR(svn_ra_serf__get_stable_url(&req_url, NULL /* latest_revnum */,
+ session, NULL /* conn */,
+ NULL /* url */, peg_revision,
+ pool, pool));
- handler = apr_pcalloc(pool, sizeof(*handler));
+ xmlctx = svn_ra_serf__xml_context_create(gls_ttable,
+ NULL, gls_closed, NULL,
+ gls_ctx,
+ pool);
+ handler = svn_ra_serf__create_expat_handler(xmlctx, pool);
handler->method = "REPORT";
handler->path = req_url;
@@ -212,41 +191,16 @@ svn_ra_serf__get_location_segments(svn_ra_session_t *ra_session,
handler->conn = session->conns[0];
handler->session = session;
- parser_ctx = apr_pcalloc(pool, sizeof(*parser_ctx));
-
- parser_ctx->pool = pool;
- parser_ctx->user_data = gls_ctx;
- parser_ctx->start = start_gls;
- parser_ctx->end = end_gls;
- parser_ctx->status_code = &gls_ctx->status_code;
- parser_ctx->done = &gls_ctx->done;
-
- handler->response_handler = svn_ra_serf__handle_xml_parser;
- handler->response_baton = parser_ctx;
+ err = svn_ra_serf__context_run_one(handler, pool);
- svn_ra_serf__request_create(handler);
-
- err = svn_ra_serf__context_run_wait(&gls_ctx->done, session, pool);
-
- if (gls_ctx->inside_report)
- err = svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED, err,
- _("Location segment report failed on '%s'@'%ld'"),
- path, peg_revision);
-
- err2 = svn_ra_serf__error_on_status(gls_ctx->status_code,
+ err = svn_error_compose_create(
+ svn_ra_serf__error_on_status(handler->sline,
handler->path,
- parser_ctx->location);
- if (err2)
- {
- /* Prefer err2 to err. */
- svn_error_clear(err);
- return err2;
- }
-
- svn_pool_destroy(gls_ctx->subpool);
+ handler->location),
+ err);
if (err && (err->apr_err == SVN_ERR_UNSUPPORTED_FEATURE))
return svn_error_create(SVN_ERR_RA_NOT_IMPLEMENTED, err, NULL);
- return err;
+ return svn_error_trace(err);
}
diff --git a/subversion/libsvn_ra_serf/getlocks.c b/subversion/libsvn_ra_serf/getlocks.c
index 719e4f0..df201a7 100644
--- a/subversion/libsvn_ra_serf/getlocks.c
+++ b/subversion/libsvn_ra_serf/getlocks.c
@@ -27,6 +27,7 @@
#include <serf.h>
+#include "svn_hash.h"
#include "svn_path.h"
#include "svn_pools.h"
#include "svn_ra.h"
@@ -46,8 +47,8 @@
/*
* This enum represents the current state of our XML parsing for a REPORT.
*/
-typedef enum lock_state_e {
- NONE = 0,
+enum {
+ INITIAL = 0,
REPORT,
LOCK,
PATH,
@@ -56,19 +57,7 @@ typedef enum lock_state_e {
COMMENT,
CREATION_DATE,
EXPIRATION_DATE
-} lock_state_e;
-
-typedef struct lock_info_t {
- /* Temporary pool */
- apr_pool_t *pool;
-
- svn_lock_t *lock;
-
- /* The currently collected value as we build it up */
- const char *tmp;
- apr_size_t tmp_len;
-
-} lock_info_t;
+};
typedef struct lock_context_t {
apr_pool_t *pool;
@@ -80,107 +69,56 @@ typedef struct lock_context_t {
/* return hash */
apr_hash_t *hash;
- /* are we done? */
- svn_boolean_t done;
-
} lock_context_t;
-
-static lock_info_t *
-push_state(svn_ra_serf__xml_parser_t *parser,
- lock_context_t *lock_ctx,
- lock_state_e state)
-{
- svn_ra_serf__xml_push_state(parser, state);
+#define D_ "DAV:"
+#define S_ SVN_XML_NAMESPACE
+static const svn_ra_serf__xml_transition_t getlocks_ttable[] = {
+ { INITIAL, S_, "get-locks-report", REPORT,
+ FALSE, { NULL }, FALSE },
- if (state == LOCK)
- {
- lock_info_t *info;
+ { REPORT, S_, "lock", LOCK,
+ FALSE, { NULL }, TRUE },
- info = apr_pcalloc(parser->state->pool, sizeof(*info));
+ { LOCK, S_, "path", PATH,
+ TRUE, { NULL }, TRUE },
- info->pool = lock_ctx->pool;
- info->lock = svn_lock_create(lock_ctx->pool);
- info->lock->path =
+ { LOCK, S_, "token", TOKEN,
+ TRUE, { NULL }, TRUE },
- parser->state->private = info;
- }
+ { LOCK, S_, "owner", OWNER,
+ TRUE, { NULL }, TRUE },
- return parser->state->private;
-}
+ { LOCK, S_, "comment", COMMENT,
+ TRUE, { NULL }, TRUE },
-static svn_error_t *
-start_getlocks(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name,
- const char **attrs)
-{
- lock_context_t *lock_ctx = userData;
- lock_state_e state;
+ { LOCK, S_, SVN_DAV__CREATIONDATE, CREATION_DATE,
+ TRUE, { NULL }, TRUE },
- state = parser->state->current_state;
+ { LOCK, S_, "expirationdate", EXPIRATION_DATE,
+ TRUE, { NULL }, TRUE },
- if (state == NONE &&
- strcmp(name.name, "get-locks-report") == 0)
- {
- push_state(parser, lock_ctx, REPORT);
- }
- else if (state == REPORT &&
- strcmp(name.name, "lock") == 0)
- {
- push_state(parser, lock_ctx, LOCK);
- }
- else if (state == LOCK)
- {
- if (strcmp(name.name, "path") == 0)
- {
- push_state(parser, lock_ctx, PATH);
- }
- else if (strcmp(name.name, "token") == 0)
- {
- push_state(parser, lock_ctx, TOKEN);
- }
- else if (strcmp(name.name, "owner") == 0)
- {
- push_state(parser, lock_ctx, OWNER);
- }
- else if (strcmp(name.name, "comment") == 0)
- {
- push_state(parser, lock_ctx, COMMENT);
- }
- else if (strcmp(name.name, SVN_DAV__CREATIONDATE) == 0)
- {
- push_state(parser, lock_ctx, CREATION_DATE);
- }
- else if (strcmp(name.name, "expirationdate") == 0)
- {
- push_state(parser, lock_ctx, EXPIRATION_DATE);
- }
- }
-
- return SVN_NO_ERROR;
-}
+ { 0 }
+};
+
+/* Conforms to svn_ra_serf__xml_closed_t */
static svn_error_t *
-end_getlocks(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name)
+getlocks_closed(svn_ra_serf__xml_estate_t *xes,
+ void *baton,
+ int leaving_state,
+ const svn_string_t *cdata,
+ apr_hash_t *attrs,
+ apr_pool_t *scratch_pool)
{
- lock_context_t *lock_ctx = userData;
- lock_state_e state;
- lock_info_t *info;
-
- state = parser->state->current_state;
- info = parser->state->private;
+ lock_context_t *lock_ctx = baton;
- if (state == REPORT &&
- strcmp(name.name, "get-locks-report") == 0)
- {
- svn_ra_serf__xml_pop_state(parser);
- }
- else if (state == LOCK &&
- strcmp(name.name, "lock") == 0)
+ if (leaving_state == LOCK)
{
+ const char *path = svn_hash_gets(attrs, "path");
+ const char *token = svn_hash_gets(attrs, "token");
+ svn_boolean_t save_lock = FALSE;
+
/* Filter out unwanted paths. Since Subversion only allows
locks on files, we can treat depth=immediates the same as
depth=files for filtering purposes. Meaning, we'll keep
@@ -191,106 +129,84 @@ end_getlocks(svn_ra_serf__xml_parser_t *parser,
c) we've asked for depth=files or depth=immediates, and this
lock is on an immediate child of our query path.
*/
- if ((strcmp(lock_ctx->path, info->lock->path) == 0)
- || (lock_ctx->requested_depth == svn_depth_infinity))
+ if (! token)
{
- apr_hash_set(lock_ctx->hash, info->lock->path,
- APR_HASH_KEY_STRING, info->lock);
+ /* A lock without a token is not a lock; just an answer that there
+ is no lock on the node. */
+ save_lock = FALSE;
}
- else if ((lock_ctx->requested_depth == svn_depth_files) ||
- (lock_ctx->requested_depth == svn_depth_immediates))
+ if (strcmp(lock_ctx->path, path) == 0
+ || lock_ctx->requested_depth == svn_depth_infinity)
{
- const char *rel_path = svn_fspath__is_child(lock_ctx->path,
- info->lock->path,
- info->pool);
- if (rel_path && (svn_path_component_count(rel_path) == 1))
- apr_hash_set(lock_ctx->hash, info->lock->path,
- APR_HASH_KEY_STRING, info->lock);
+ save_lock = TRUE;
+ }
+ else if (lock_ctx->requested_depth == svn_depth_files
+ || lock_ctx->requested_depth == svn_depth_immediates)
+ {
+ const char *relpath = svn_fspath__skip_ancestor(lock_ctx->path,
+ path);
+ if (relpath && (svn_path_component_count(relpath) == 1))
+ save_lock = TRUE;
}
- svn_ra_serf__xml_pop_state(parser);
- }
- else if (state == PATH &&
- strcmp(name.name, "path") == 0)
- {
- info->lock->path = apr_pstrmemdup(info->pool, info->tmp, info->tmp_len);
- info->tmp_len = 0;
- svn_ra_serf__xml_pop_state(parser);
- }
- else if (state == TOKEN &&
- strcmp(name.name, "token") == 0)
- {
- info->lock->token = apr_pstrmemdup(info->pool, info->tmp, info->tmp_len);
- info->tmp_len = 0;
- svn_ra_serf__xml_pop_state(parser);
- }
- else if (state == OWNER &&
- strcmp(name.name, "owner") == 0)
- {
- info->lock->owner = apr_pstrmemdup(info->pool, info->tmp, info->tmp_len);
- info->tmp_len = 0;
- svn_ra_serf__xml_pop_state(parser);
- }
- else if (state == COMMENT &&
- strcmp(name.name, "comment") == 0)
- {
- info->lock->comment = apr_pstrmemdup(info->pool,
- info->tmp, info->tmp_len);
- info->tmp_len = 0;
- svn_ra_serf__xml_pop_state(parser);
- }
- else if (state == CREATION_DATE &&
- strcmp(name.name, SVN_DAV__CREATIONDATE) == 0)
- {
- SVN_ERR(svn_time_from_cstring(&info->lock->creation_date,
- info->tmp, info->pool));
- info->tmp_len = 0;
- svn_ra_serf__xml_pop_state(parser);
+ if (save_lock)
+ {
+ /* We get to put the structure on the stack rather than using
+ svn_lock_create(). Bwahahaha.... */
+ svn_lock_t lock = { 0 };
+ const char *date;
+ svn_lock_t *result_lock;
+
+ /* Note: these "attributes" came from child elements. Some of
+ them may have not been sent, so the value will be NULL. */
+
+ lock.path = path;
+ lock.token = token;
+ lock.owner = svn_hash_gets(attrs, "owner");
+ lock.comment = svn_hash_gets(attrs, "comment");
+
+ date = svn_hash_gets(attrs, SVN_DAV__CREATIONDATE);
+ if (date)
+ SVN_ERR(svn_time_from_cstring(&lock.creation_date, date,
+ scratch_pool));
+
+ date = svn_hash_gets(attrs, "expirationdate");
+ if (date)
+ SVN_ERR(svn_time_from_cstring(&lock.expiration_date, date,
+ scratch_pool));
+
+ result_lock = svn_lock_dup(&lock, lock_ctx->pool);
+ svn_hash_sets(lock_ctx->hash, result_lock->path, result_lock);
+ }
}
- else if (state == EXPIRATION_DATE &&
- strcmp(name.name, "expirationdate") == 0)
+ else
{
- SVN_ERR(svn_time_from_cstring(&info->lock->expiration_date,
- info->tmp, info->pool));
- info->tmp_len = 0;
- svn_ra_serf__xml_pop_state(parser);
+ const char *name;
+
+ SVN_ERR_ASSERT(cdata != NULL);
+
+ if (leaving_state == PATH)
+ name = "path";
+ else if (leaving_state == TOKEN)
+ name = "token";
+ else if (leaving_state == OWNER)
+ name = "owner";
+ else if (leaving_state == COMMENT)
+ name = "comment";
+ else if (leaving_state == CREATION_DATE)
+ name = SVN_DAV__CREATIONDATE;
+ else if (leaving_state == EXPIRATION_DATE)
+ name = "expirationdate";
+ else
+ SVN_ERR_MALFUNCTION();
+
+ /* Store the lock information onto the LOCK elemstate. */
+ svn_ra_serf__xml_note(xes, LOCK, name, cdata->data);
}
return SVN_NO_ERROR;
}
-static svn_error_t *
-cdata_getlocks(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- const char *data,
- apr_size_t len)
-{
- lock_context_t *lock_ctx = userData;
- lock_state_e state;
- lock_info_t *info;
-
- UNUSED_CTX(lock_ctx);
-
- state = parser->state->current_state;
- info = parser->state->private;
-
- switch (state)
- {
- case PATH:
- case TOKEN:
- case OWNER:
- case COMMENT:
- case CREATION_DATE:
- case EXPIRATION_DATE:
- svn_ra_serf__expand_string(&info->tmp, &info->tmp_len,
- data, len, parser->state->pool);
- break;
- default:
- break;
- }
-
- return SVN_NO_ERROR;
-}
/* Implements svn_ra_serf__request_body_delegate_t */
static svn_error_t *
@@ -323,9 +239,9 @@ svn_ra_serf__get_locks(svn_ra_session_t *ra_session,
lock_context_t *lock_ctx;
svn_ra_serf__session_t *session = ra_session->priv;
svn_ra_serf__handler_t *handler;
- svn_ra_serf__xml_parser_t *parser_ctx;
+ svn_ra_serf__xml_context_t *xmlctx;
const char *req_url, *rel_path;
- int status_code;
+ svn_error_t *err;
req_url = svn_path_url_add_component2(session->session_url.path, path, pool);
SVN_ERR(svn_ra_serf__get_relative_path(&rel_path, req_url, session,
@@ -336,9 +252,12 @@ svn_ra_serf__get_locks(svn_ra_session_t *ra_session,
lock_ctx->path = apr_pstrcat(pool, "/", rel_path, (char *)NULL);
lock_ctx->requested_depth = depth;
lock_ctx->hash = apr_hash_make(pool);
- lock_ctx->done = FALSE;
- handler = apr_pcalloc(pool, sizeof(*handler));
+ xmlctx = svn_ra_serf__xml_context_create(getlocks_ttable,
+ NULL, getlocks_closed, NULL,
+ lock_ctx,
+ pool);
+ handler = svn_ra_serf__create_expat_handler(xmlctx, pool);
handler->method = "REPORT";
handler->path = req_url;
@@ -346,25 +265,26 @@ svn_ra_serf__get_locks(svn_ra_session_t *ra_session,
handler->conn = session->conns[0];
handler->session = session;
- parser_ctx = apr_pcalloc(pool, sizeof(*parser_ctx));
-
- parser_ctx->pool = pool;
- parser_ctx->user_data = lock_ctx;
- parser_ctx->start = start_getlocks;
- parser_ctx->end = end_getlocks;
- parser_ctx->cdata = cdata_getlocks;
- parser_ctx->done = &lock_ctx->done;
- parser_ctx->status_code = &status_code;
-
handler->body_delegate = create_getlocks_body;
handler->body_delegate_baton = lock_ctx;
- handler->response_handler = svn_ra_serf__handle_xml_parser;
- handler->response_baton = parser_ctx;
-
- svn_ra_serf__request_create(handler);
-
- SVN_ERR(svn_ra_serf__context_run_wait(&lock_ctx->done, session, pool));
+ err = svn_ra_serf__context_run_one(handler, pool);
+
+ /* Wrap the server generated error for an unsupported report with the
+ documented error for this ra function. */
+ if (svn_error_find_cause(err, SVN_ERR_UNSUPPORTED_FEATURE))
+ err = svn_error_create(SVN_ERR_RA_NOT_IMPLEMENTED, err, NULL);
+
+ SVN_ERR(err);
+
+ /* We get a 404 when a path doesn't exist in HEAD, but it might
+ have existed earlier (E.g. 'svn ls http://s/svn/trunk/file@1' */
+ if (handler->sline.code != 404)
+ {
+ SVN_ERR(svn_ra_serf__error_on_status(handler->sline,
+ handler->path,
+ handler->location));
+ }
*locks = lock_ctx->hash;
diff --git a/subversion/libsvn_ra_serf/inherited_props.c b/subversion/libsvn_ra_serf/inherited_props.c
new file mode 100644
index 0000000..f1172e7
--- /dev/null
+++ b/subversion/libsvn_ra_serf/inherited_props.c
@@ -0,0 +1,285 @@
+/*
+ * inherited_props.c : ra_serf implementation of svn_ra_get_inherited_props
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+
+#include <apr_tables.h>
+#include <apr_xml.h>
+
+#include "svn_hash.h"
+#include "svn_path.h"
+#include "svn_ra.h"
+#include "svn_string.h"
+#include "svn_xml.h"
+#include "svn_props.h"
+#include "svn_base64.h"
+
+#include "private/svn_dav_protocol.h"
+#include "../libsvn_ra/ra_loader.h"
+#include "svn_private_config.h"
+#include "ra_serf.h"
+
+
+/* The current state of our XML parsing. */
+typedef enum iprops_state_e {
+ INITIAL = 0,
+ IPROPS_REPORT,
+ IPROPS_ITEM,
+ IPROPS_PATH,
+ IPROPS_PROPNAME,
+ IPROPS_PROPVAL
+} iprops_state_e;
+
+/* Struct for accumulating inherited props. */
+typedef struct iprops_context_t {
+ /* The depth-first ordered array of svn_prop_inherited_item_t *
+ structures we are building. */
+ apr_array_header_t *iprops;
+
+ /* Pool in which to allocate elements of IPROPS. */
+ apr_pool_t *pool;
+
+ /* The repository's root URL. */
+ const char *repos_root_url;
+
+ /* Current property name */
+ svn_stringbuf_t *curr_propname;
+
+ /* Current element in IPROPS. */
+ svn_prop_inherited_item_t *curr_iprop;
+
+ /* Path we are finding inherited properties for. This is relative to
+ the RA session passed to svn_ra_serf__get_inherited_props. */
+ const char *path;
+ /* The revision of PATH*/
+ svn_revnum_t revision;
+} iprops_context_t;
+
+#define S_ SVN_XML_NAMESPACE
+static const svn_ra_serf__xml_transition_t iprops_table[] = {
+ { INITIAL, S_, SVN_DAV__INHERITED_PROPS_REPORT, IPROPS_REPORT,
+ FALSE, { NULL }, FALSE },
+
+ { IPROPS_REPORT, S_, SVN_DAV__IPROP_ITEM, IPROPS_ITEM,
+ FALSE, { NULL }, TRUE },
+
+ { IPROPS_ITEM, S_, SVN_DAV__IPROP_PATH, IPROPS_PATH,
+ TRUE, { NULL }, TRUE },
+
+ { IPROPS_ITEM, S_, SVN_DAV__IPROP_PROPNAME, IPROPS_PROPNAME,
+ TRUE, { NULL }, TRUE },
+
+ { IPROPS_ITEM, S_, SVN_DAV__IPROP_PROPVAL, IPROPS_PROPVAL,
+ TRUE, { "?V:encoding", NULL }, TRUE },
+
+ { 0 }
+};
+
+/* Conforms to svn_ra_serf__xml_opened_t */
+static svn_error_t *
+iprops_opened(svn_ra_serf__xml_estate_t *xes,
+ void *baton,
+ int entered_state,
+ const svn_ra_serf__dav_props_t *tag,
+ apr_pool_t *scratch_pool)
+{
+ iprops_context_t *iprops_ctx = baton;
+
+ if (entered_state == IPROPS_ITEM)
+ {
+ svn_stringbuf_setempty(iprops_ctx->curr_propname);
+
+ iprops_ctx->curr_iprop = apr_pcalloc(iprops_ctx->pool,
+ sizeof(*iprops_ctx->curr_iprop));
+
+ iprops_ctx->curr_iprop->prop_hash = apr_hash_make(iprops_ctx->pool);
+ }
+ return SVN_NO_ERROR;
+}
+
+/* Conforms to svn_ra_serf__xml_closed_t */
+static svn_error_t *
+iprops_closed(svn_ra_serf__xml_estate_t *xes,
+ void *baton,
+ int leaving_state,
+ const svn_string_t *cdata,
+ apr_hash_t *attrs,
+ apr_pool_t *scratch_pool)
+{
+ iprops_context_t *iprops_ctx = baton;
+
+ if (leaving_state == IPROPS_ITEM)
+ {
+ APR_ARRAY_PUSH(iprops_ctx->iprops, svn_prop_inherited_item_t *) =
+ iprops_ctx->curr_iprop;
+
+ iprops_ctx->curr_iprop = NULL;
+ }
+ else if (leaving_state == IPROPS_PATH)
+ {
+ /* Every <iprop-item> has a single <iprop-path> */
+ if (iprops_ctx->curr_iprop->path_or_url)
+ return svn_error_create(SVN_ERR_XML_MALFORMED, NULL, NULL);
+
+ iprops_ctx->curr_iprop->path_or_url =
+ svn_path_url_add_component2(iprops_ctx->repos_root_url,
+ cdata->data,
+ iprops_ctx->pool);
+ }
+ else if (leaving_state == IPROPS_PROPNAME)
+ {
+ if (iprops_ctx->curr_propname->len)
+ return svn_error_create(SVN_ERR_XML_MALFORMED, NULL, NULL);
+
+ /* Store propname for value */
+ svn_stringbuf_set(iprops_ctx->curr_propname, cdata->data);
+ }
+ else if (leaving_state == IPROPS_PROPVAL)
+ {
+ const char *encoding;
+ const svn_string_t *val_str;
+
+ if (! iprops_ctx->curr_propname->len)
+ return svn_error_create(SVN_ERR_XML_MALFORMED, NULL, NULL);
+
+ encoding = svn_hash_gets(attrs, "V:encoding");
+
+ if (encoding)
+ {
+ if (strcmp(encoding, "base64") != 0)
+ return svn_error_createf(SVN_ERR_XML_MALFORMED,
+ NULL,
+ _("Got unrecognized encoding '%s'"),
+ encoding);
+
+ /* Decode into the right pool. */
+ val_str = svn_base64_decode_string(cdata, iprops_ctx->pool);
+ }
+ else
+ {
+ /* Copy into the right pool. */
+ val_str = svn_string_dup(cdata, iprops_ctx->pool);
+ }
+
+ svn_hash_sets(iprops_ctx->curr_iprop->prop_hash,
+ apr_pstrdup(iprops_ctx->pool,
+ iprops_ctx->curr_propname->data),
+ val_str);
+ /* Clear current propname. */
+ svn_stringbuf_setempty(iprops_ctx->curr_propname);
+ }
+ else
+ SVN_ERR_MALFUNCTION(); /* Invalid transition table */
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+create_iprops_body(serf_bucket_t **bkt,
+ void *baton,
+ serf_bucket_alloc_t *alloc,
+ apr_pool_t *pool)
+{
+ iprops_context_t *iprops_ctx = baton;
+ serf_bucket_t *body_bkt;
+
+ body_bkt = serf_bucket_aggregate_create(alloc);
+
+ svn_ra_serf__add_open_tag_buckets(body_bkt, alloc,
+ "S:" SVN_DAV__INHERITED_PROPS_REPORT,
+ "xmlns:S", SVN_XML_NAMESPACE,
+ NULL);
+ svn_ra_serf__add_tag_buckets(body_bkt,
+ "S:" SVN_DAV__REVISION,
+ apr_ltoa(pool, iprops_ctx->revision),
+ alloc);
+ svn_ra_serf__add_tag_buckets(body_bkt, "S:" SVN_DAV__PATH,
+ iprops_ctx->path, alloc);
+ svn_ra_serf__add_close_tag_buckets(body_bkt, alloc,
+ "S:" SVN_DAV__INHERITED_PROPS_REPORT);
+ *bkt = body_bkt;
+ return SVN_NO_ERROR;
+}
+
+/* Request a inherited-props-report from the URL attached to RA_SESSION,
+ and fill the IPROPS array hash with the results. */
+svn_error_t *
+svn_ra_serf__get_inherited_props(svn_ra_session_t *ra_session,
+ apr_array_header_t **iprops,
+ const char *path,
+ svn_revnum_t revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_error_t *err;
+ iprops_context_t *iprops_ctx;
+ svn_ra_serf__session_t *session = ra_session->priv;
+ svn_ra_serf__handler_t *handler;
+ svn_ra_serf__xml_context_t *xmlctx;
+ const char *req_url;
+
+ SVN_ERR(svn_ra_serf__get_stable_url(&req_url,
+ NULL /* latest_revnum */,
+ session,
+ NULL /* conn */,
+ NULL /* url */,
+ revision,
+ result_pool, scratch_pool));
+
+ SVN_ERR_ASSERT(session->repos_root_str);
+
+ iprops_ctx = apr_pcalloc(scratch_pool, sizeof(*iprops_ctx));
+ iprops_ctx->repos_root_url = session->repos_root_str;
+ iprops_ctx->pool = result_pool;
+ iprops_ctx->curr_propname = svn_stringbuf_create_empty(scratch_pool);
+ iprops_ctx->curr_iprop = NULL;
+ iprops_ctx->iprops = apr_array_make(result_pool, 1,
+ sizeof(svn_prop_inherited_item_t *));
+ iprops_ctx->path = path;
+ iprops_ctx->revision = revision;
+
+ xmlctx = svn_ra_serf__xml_context_create(iprops_table,
+ iprops_opened, iprops_closed, NULL,
+ iprops_ctx,
+ scratch_pool);
+ handler = svn_ra_serf__create_expat_handler(xmlctx, scratch_pool);
+
+ handler->method = "REPORT";
+ handler->path = req_url;
+ handler->conn = session->conns[0];
+ handler->session = session;
+ handler->body_delegate = create_iprops_body;
+ handler->body_delegate_baton = iprops_ctx;
+ handler->body_type = "text/xml";
+ handler->handler_pool = scratch_pool;
+
+ err = svn_ra_serf__context_run_one(handler, scratch_pool);
+ SVN_ERR(svn_error_compose_create(
+ svn_ra_serf__error_on_status(handler->sline,
+ handler->path,
+ handler->location),
+ err));
+
+ *iprops = iprops_ctx->iprops;
+
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/libsvn_ra_serf/locks.c b/subversion/libsvn_ra_serf/locks.c
index 2aaf2fd..252c301 100644
--- a/subversion/libsvn_ra_serf/locks.c
+++ b/subversion/libsvn_ra_serf/locks.c
@@ -24,9 +24,6 @@
#include <apr_uri.h>
-
-#include <expat.h>
-
#include <serf.h>
#include "svn_dav.h"
@@ -45,8 +42,11 @@
/*
* This enum represents the current state of our XML parsing for a REPORT.
*/
-typedef enum lock_state_e {
- NONE = 0,
+enum {
+ INITIAL = 0,
+ MULTISTATUS,
+ RESPONSE,
+ PROPSTAT,
PROP,
LOCK_DISCOVERY,
ACTIVE_LOCK,
@@ -55,13 +55,9 @@ typedef enum lock_state_e {
DEPTH,
TIMEOUT,
LOCK_TOKEN,
- COMMENT
-} lock_state_e;
-
-typedef struct lock_prop_info_t {
- const char *data;
- apr_size_t len;
-} lock_prop_info_t;
+ OWNER,
+ HREF
+};
typedef struct lock_info_t {
apr_pool_t *pool;
@@ -75,249 +71,128 @@ typedef struct lock_info_t {
svn_boolean_t read_headers;
- /* Our HTTP status code and reason. */
- int status_code;
- const char *reason;
+ svn_ra_serf__handler_t *handler;
- /* The currently collected value as we build it up */
- const char *tmp;
- apr_size_t tmp_len;
+ /* The expat handler. We wrap this to do a bit more work. */
+ svn_ra_serf__response_handler_t inner_handler;
+ void *inner_baton;
- /* are we done? */
- svn_boolean_t done;
} lock_info_t;
-
-static lock_prop_info_t*
-push_state(svn_ra_serf__xml_parser_t *parser,
- lock_info_t *lock_ctx,
- lock_state_e state)
-{
- svn_ra_serf__xml_push_state(parser, state);
- switch (state)
- {
- case LOCK_TYPE:
- case LOCK_SCOPE:
- case DEPTH:
- case TIMEOUT:
- case LOCK_TOKEN:
- case COMMENT:
- parser->state->private = apr_pcalloc(parser->state->pool,
- sizeof(lock_prop_info_t));
- break;
- default:
- break;
- }
+#define D_ "DAV:"
+#define S_ SVN_XML_NAMESPACE
+static const svn_ra_serf__xml_transition_t locks_ttable[] = {
+ /* The INITIAL state can transition into D:prop (LOCK) or
+ to D:multistatus (PROPFIND) */
+ { INITIAL, D_, "prop", PROP,
+ FALSE, { NULL }, FALSE },
+ { INITIAL, D_, "multistatus", MULTISTATUS,
+ FALSE, { NULL }, FALSE },
- return parser->state->private;
-}
+ { MULTISTATUS, D_, "response", RESPONSE,
+ FALSE, { NULL }, FALSE },
-/*
- * Expat callback invoked on a start element tag for a PROPFIND response.
- */
-static svn_error_t *
-start_lock(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name,
- const char **attrs)
-{
- lock_info_t *ctx = userData;
- lock_state_e state;
+ { RESPONSE, D_, "propstat", PROPSTAT,
+ FALSE, { NULL }, FALSE },
- state = parser->state->current_state;
+ { PROPSTAT, D_, "prop", PROP,
+ FALSE, { NULL }, FALSE },
- if (state == NONE && strcmp(name.name, "prop") == 0)
- {
- svn_ra_serf__xml_push_state(parser, PROP);
- }
- else if (state == PROP &&
- strcmp(name.name, "lockdiscovery") == 0)
- {
- push_state(parser, ctx, LOCK_DISCOVERY);
- }
- else if (state == LOCK_DISCOVERY &&
- strcmp(name.name, "activelock") == 0)
- {
- push_state(parser, ctx, ACTIVE_LOCK);
- }
- else if (state == ACTIVE_LOCK)
- {
- if (strcmp(name.name, "locktype") == 0)
- {
- push_state(parser, ctx, LOCK_TYPE);
- }
- else if (strcmp(name.name, "lockscope") == 0)
- {
- push_state(parser, ctx, LOCK_SCOPE);
- }
- else if (strcmp(name.name, "depth") == 0)
- {
- push_state(parser, ctx, DEPTH);
- }
- else if (strcmp(name.name, "timeout") == 0)
- {
- push_state(parser, ctx, TIMEOUT);
- }
- else if (strcmp(name.name, "locktoken") == 0)
- {
- push_state(parser, ctx, LOCK_TOKEN);
- }
- else if (strcmp(name.name, "owner") == 0)
- {
- push_state(parser, ctx, COMMENT);
- }
- }
- else if (state == LOCK_TYPE)
- {
- if (strcmp(name.name, "write") == 0)
- {
- /* Do nothing. */
- }
- else
- {
- SVN_ERR_MALFUNCTION();
- }
- }
- else if (state == LOCK_SCOPE)
- {
- if (strcmp(name.name, "exclusive") == 0)
- {
- /* Do nothing. */
- }
- else
- {
- SVN_ERR_MALFUNCTION();
- }
- }
+ { PROP, D_, "lockdiscovery", LOCK_DISCOVERY,
+ FALSE, { NULL }, FALSE },
- return SVN_NO_ERROR;
-}
+ { LOCK_DISCOVERY, D_, "activelock", ACTIVE_LOCK,
+ FALSE, { NULL }, FALSE },
-/*
- * Expat callback invoked on an end element tag for a PROPFIND response.
- */
+#if 0
+ /* ### we don't really need to parse locktype/lockscope. we know what
+ ### the values are going to be. we *could* validate that the only
+ ### possible children are D:write and D:exclusive. we'd need to
+ ### modify the state transition to tell us about all children
+ ### (ie. maybe support "*" for the name) and then validate. but it
+ ### just isn't important to validate, so disable this for now... */
+
+ { ACTIVE_LOCK, D_, "locktype", LOCK_TYPE,
+ FALSE, { NULL }, FALSE },
+
+ { LOCK_TYPE, D_, "write", WRITE,
+ FALSE, { NULL }, TRUE },
+
+ { ACTIVE_LOCK, D_, "lockscope", LOCK_SCOPE,
+ FALSE, { NULL }, FALSE },
+
+ { LOCK_SCOPE, D_, "exclusive", EXCLUSIVE,
+ FALSE, { NULL }, TRUE },
+#endif /* 0 */
+
+ { ACTIVE_LOCK, D_, "timeout", TIMEOUT,
+ TRUE, { NULL }, TRUE },
+
+ { ACTIVE_LOCK, D_, "locktoken", LOCK_TOKEN,
+ FALSE, { NULL }, FALSE },
+
+ { LOCK_TOKEN, D_, "href", HREF,
+ TRUE, { NULL }, TRUE },
+
+ { ACTIVE_LOCK, D_, "owner", OWNER,
+ TRUE, { NULL }, TRUE },
+
+ /* ACTIVE_LOCK has a D:depth child, but we can ignore that. */
+
+ { 0 }
+};
+
+
+/* Conforms to svn_ra_serf__xml_closed_t */
static svn_error_t *
-end_lock(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name)
+locks_closed(svn_ra_serf__xml_estate_t *xes,
+ void *baton,
+ int leaving_state,
+ const svn_string_t *cdata,
+ apr_hash_t *attrs,
+ apr_pool_t *scratch_pool)
{
- lock_info_t *ctx = userData;
- lock_state_e state;
-
- state = parser->state->current_state;
+ lock_info_t *lock_ctx = baton;
- if (state == PROP &&
- strcmp(name.name, "prop") == 0)
- {
- svn_ra_serf__xml_pop_state(parser);
- }
- else if (state == LOCK_DISCOVERY &&
- strcmp(name.name, "lockdiscovery") == 0)
- {
- svn_ra_serf__xml_pop_state(parser);
- }
- else if (state == ACTIVE_LOCK &&
- strcmp(name.name, "activelock") == 0)
- {
- svn_ra_serf__xml_pop_state(parser);
- }
- else if (state == LOCK_TYPE &&
- strcmp(name.name, "locktype") == 0)
- {
- svn_ra_serf__xml_pop_state(parser);
- }
- else if (state == LOCK_SCOPE &&
- strcmp(name.name, "lockscope") == 0)
- {
- svn_ra_serf__xml_pop_state(parser);
- }
- else if (state == DEPTH &&
- strcmp(name.name, "depth") == 0)
+ if (leaving_state == TIMEOUT)
{
- svn_ra_serf__xml_pop_state(parser);
- }
- else if (state == TIMEOUT &&
- strcmp(name.name, "timeout") == 0)
- {
- lock_prop_info_t *info = parser->state->private;
-
- if (strcmp(info->data, "Infinite") == 0)
+ if (strcasecmp(cdata->data, "Infinite") == 0)
+ lock_ctx->lock->expiration_date = 0;
+ else if (strncasecmp(cdata->data, "Second-", 7) == 0)
{
- ctx->lock->expiration_date = 0;
+ unsigned n;
+ SVN_ERR(svn_cstring_atoui(&n, cdata->data+7));
+
+ lock_ctx->lock->expiration_date = apr_time_now() +
+ apr_time_from_sec(n);
}
else
- {
- SVN_ERR(svn_time_from_cstring(&ctx->lock->creation_date,
- info->data, ctx->pool));
- }
- svn_ra_serf__xml_pop_state(parser);
+ return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
+ _("Invalid LOCK timeout value '%s'"),
+ cdata->data);
}
- else if (state == LOCK_TOKEN &&
- strcmp(name.name, "locktoken") == 0)
+ else if (leaving_state == HREF)
{
- lock_prop_info_t *info = parser->state->private;
-
- if (!ctx->lock->token && info->len)
+ if (cdata->len)
{
- apr_collapse_spaces((char*)info->data, info->data);
- ctx->lock->token = apr_pstrndup(ctx->pool, info->data, info->len);
+ char *buf = apr_pstrmemdup(lock_ctx->pool, cdata->data, cdata->len);
+
+ apr_collapse_spaces(buf, buf);
+ lock_ctx->lock->token = buf;
}
- /* We don't actually need the lock token. */
- svn_ra_serf__xml_pop_state(parser);
}
- else if (state == COMMENT &&
- strcmp(name.name, "owner") == 0)
+ else if (leaving_state == OWNER)
{
- lock_prop_info_t *info = parser->state->private;
-
- if (info->len)
+ if (cdata->len)
{
- ctx->lock->comment = apr_pstrndup(ctx->pool, info->data, info->len);
+ lock_ctx->lock->comment = apr_pstrmemdup(lock_ctx->pool,
+ cdata->data, cdata->len);
}
- svn_ra_serf__xml_pop_state(parser);
- }
-
- return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-cdata_lock(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- const char *data,
- apr_size_t len)
-{
- lock_info_t *lock_ctx = userData;
- lock_state_e state;
- lock_prop_info_t *info;
-
- UNUSED_CTX(lock_ctx);
-
- state = parser->state->current_state;
- info = parser->state->private;
-
- switch (state)
- {
- case LOCK_TYPE:
- case LOCK_SCOPE:
- case DEPTH:
- case TIMEOUT:
- case LOCK_TOKEN:
- case COMMENT:
- svn_ra_serf__expand_string(&info->data, &info->len,
- data, len, parser->state->pool);
- break;
- default:
- break;
}
return SVN_NO_ERROR;
}
-static const svn_ra_serf__dav_props_t lock_props[] =
-{
- { "DAV:", "lockdiscovery" },
- { NULL }
-};
static svn_error_t *
set_lock_headers(serf_bucket_t *headers,
@@ -341,6 +216,39 @@ set_lock_headers(serf_bucket_t *headers,
return APR_SUCCESS;
}
+
+/* Register an error within the session. If something is already there,
+ then it will take precedence. */
+static svn_error_t *
+determine_error(svn_ra_serf__handler_t *handler,
+ svn_error_t *err)
+{
+ {
+ apr_status_t errcode;
+
+ if (handler->sline.code == 423)
+ errcode = SVN_ERR_FS_PATH_ALREADY_LOCKED;
+ else if (handler->sline.code == 403)
+ errcode = SVN_ERR_RA_DAV_FORBIDDEN;
+ else
+ return err;
+
+ /* Client-side or server-side error already. Return it. */
+ if (err != NULL)
+ return err;
+
+ /* The server did not send us a detailed human-readable error.
+ Provide a generic error. */
+ err = svn_error_createf(errcode, NULL,
+ _("Lock request failed: %d %s"),
+ handler->sline.code,
+ handler->sline.reason);
+ }
+
+ return err;
+}
+
+
/* Implements svn_ra_serf__response_handler_t */
static svn_error_t *
handle_lock(serf_request_t *request,
@@ -348,43 +256,25 @@ handle_lock(serf_request_t *request,
void *handler_baton,
apr_pool_t *pool)
{
- svn_ra_serf__xml_parser_t *xml_ctx = handler_baton;
- lock_info_t *ctx = xml_ctx->user_data;
- svn_error_t *err;
+ lock_info_t *ctx = handler_baton;
- if (ctx->read_headers == FALSE)
+ /* 403 (Forbidden) when a lock doesn't exist.
+ 423 (Locked) when a lock already exists. */
+ if (ctx->handler->sline.code == 403
+ || ctx->handler->sline.code == 423)
+ {
+ /* Go look in the body for a server-provided error. This will
+ reset flags for the core handler to Do The Right Thing. We
+ won't be back to this handler again. */
+ return svn_error_trace(svn_ra_serf__expect_empty_body(
+ request, response, ctx->handler, pool));
+ }
+
+ if (!ctx->read_headers)
{
serf_bucket_t *headers;
const char *val;
- serf_status_line sl;
- apr_status_t status;
-
- status = serf_bucket_response_status(response, &sl);
- if (SERF_BUCKET_READ_ERROR(status))
- {
- return svn_error_wrap_apr(status, NULL);
- }
-
- ctx->status_code = sl.code;
- ctx->reason = sl.reason;
-
- /* 423 == Locked */
- if (sl.code == 423)
- {
- /* Older servers may not give a descriptive error, so we'll
- make one of our own if we can't find one in the response. */
- err = svn_ra_serf__handle_server_error(request, response, pool);
- if (!err)
- {
- err = svn_error_createf(SVN_ERR_FS_PATH_ALREADY_LOCKED,
- NULL,
- _("Lock request failed: %d %s"),
- ctx->status_code, ctx->reason);
- }
- return err;
- }
-
headers = serf_bucket_response_get_headers(response);
val = serf_bucket_headers_get(headers, SVN_DAV_LOCK_OWNER_HEADER);
@@ -403,25 +293,7 @@ handle_lock(serf_request_t *request,
ctx->read_headers = TRUE;
}
- /* Forbidden when a lock doesn't exist. */
- if (ctx->status_code == 403)
- {
- /* If we get an "unexpected EOF" error, we'll wrap it with
- generic request failure error. */
- err = svn_ra_serf__handle_discard_body(request, response, NULL, pool);
- if (err && APR_STATUS_IS_EOF(err->apr_err))
- {
- ctx->done = TRUE;
- err = svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED,
- err,
- _("Lock request failed: %d %s"),
- ctx->status_code, ctx->reason);
- }
- return err;
- }
-
- return svn_ra_serf__handle_xml_parser(request, response,
- handler_baton, pool);
+ return ctx->inner_handler(request, response, ctx->inner_baton, pool);
}
/* Implements svn_ra_serf__request_body_delegate_t */
@@ -453,7 +325,7 @@ setup_getlock_headers(serf_bucket_t *headers,
void *baton,
apr_pool_t *pool)
{
- serf_bucket_headers_set(headers, "Depth", "0");
+ serf_bucket_headers_setn(headers, "Depth", "0");
return SVN_NO_ERROR;
}
@@ -499,26 +371,30 @@ svn_error_t *
svn_ra_serf__get_lock(svn_ra_session_t *ra_session,
svn_lock_t **lock,
const char *path,
- apr_pool_t *pool)
+ apr_pool_t *result_pool)
{
svn_ra_serf__session_t *session = ra_session->priv;
svn_ra_serf__handler_t *handler;
- svn_ra_serf__xml_parser_t *parser_ctx;
+ svn_ra_serf__xml_context_t *xmlctx;
+ apr_pool_t *scratch_pool = svn_pool_create(result_pool);
lock_info_t *lock_ctx;
const char *req_url;
svn_error_t *err;
- int status_code;
- req_url = svn_path_url_add_component2(session->session_url.path, path, pool);
+ req_url = svn_path_url_add_component2(session->session_url.path, path,
+ scratch_pool);
- lock_ctx = apr_pcalloc(pool, sizeof(*lock_ctx));
-
- lock_ctx->pool = pool;
+ lock_ctx = apr_pcalloc(scratch_pool, sizeof(*lock_ctx));
+ lock_ctx->pool = result_pool;
lock_ctx->path = req_url;
- lock_ctx->lock = svn_lock_create(pool);
- lock_ctx->lock->path = path;
+ lock_ctx->lock = svn_lock_create(result_pool);
+ lock_ctx->lock->path = apr_pstrdup(result_pool, path);
- handler = apr_pcalloc(pool, sizeof(*handler));
+ xmlctx = svn_ra_serf__xml_context_create(locks_ttable,
+ NULL, locks_closed, NULL,
+ lock_ctx,
+ scratch_pool);
+ handler = svn_ra_serf__create_expat_handler(xmlctx, scratch_pool);
handler->method = "PROPFIND";
handler->path = req_url;
@@ -526,29 +402,23 @@ svn_ra_serf__get_lock(svn_ra_session_t *ra_session,
handler->conn = session->conns[0];
handler->session = session;
- parser_ctx = apr_pcalloc(pool, sizeof(*parser_ctx));
-
- parser_ctx->pool = pool;
- parser_ctx->user_data = lock_ctx;
- parser_ctx->start = start_lock;
- parser_ctx->end = end_lock;
- parser_ctx->cdata = cdata_lock;
- parser_ctx->done = &lock_ctx->done;
- parser_ctx->status_code = &status_code;
-
handler->body_delegate = create_getlock_body;
handler->body_delegate_baton = lock_ctx;
handler->header_delegate = setup_getlock_headers;
handler->header_delegate_baton = lock_ctx;
+ lock_ctx->inner_handler = handler->response_handler;
+ lock_ctx->inner_baton = handler->response_baton;
handler->response_handler = handle_lock;
- handler->response_baton = parser_ctx;
+ handler->response_baton = lock_ctx;
+
+ lock_ctx->handler = handler;
- svn_ra_serf__request_create(handler);
- err = svn_ra_serf__context_run_wait(&lock_ctx->done, session, pool);
+ err = svn_ra_serf__context_run_one(handler, scratch_pool);
+ err = determine_error(handler, err);
- if (status_code == 404)
+ if (handler->sline.code == 404)
{
return svn_error_create(SVN_ERR_RA_ILLEGAL_URL, err,
_("Malformed URL for repository"));
@@ -560,7 +430,12 @@ svn_ra_serf__get_lock(svn_ra_session_t *ra_session,
_("Server does not support locking features"));
}
- *lock = lock_ctx->lock;
+ if (lock_ctx->lock && lock_ctx->lock->token)
+ *lock = lock_ctx->lock;
+ else
+ *lock = NULL;
+
+ svn_pool_destroy(scratch_pool);
return SVN_NO_ERROR;
}
@@ -572,42 +447,50 @@ svn_ra_serf__lock(svn_ra_session_t *ra_session,
svn_boolean_t force,
svn_ra_lock_callback_t lock_func,
void *lock_baton,
- apr_pool_t *pool)
+ apr_pool_t *scratch_pool)
{
svn_ra_serf__session_t *session = ra_session->priv;
apr_hash_index_t *hi;
- apr_pool_t *subpool;
+ apr_pool_t *iterpool;
+
+ iterpool = svn_pool_create(scratch_pool);
- subpool = svn_pool_create(pool);
+ /* ### TODO for issue 2263: Send all the locks over the wire at once. This
+ ### loop is just a temporary shim.
+ ### an alternative, which is backwards-compat with all servers is to
+ ### pipeline these requests. ie. stop using run_wait/run_one. */
- for (hi = apr_hash_first(pool, path_revs); hi; hi = apr_hash_next(hi))
+ for (hi = apr_hash_first(scratch_pool, path_revs);
+ hi;
+ hi = apr_hash_next(hi))
{
svn_ra_serf__handler_t *handler;
- svn_ra_serf__xml_parser_t *parser_ctx;
+ svn_ra_serf__xml_context_t *xmlctx;
const char *req_url;
lock_info_t *lock_ctx;
- const void *key;
- void *val;
svn_error_t *err;
svn_error_t *new_err = NULL;
- svn_pool_clear(subpool);
+ svn_pool_clear(iterpool);
- lock_ctx = apr_pcalloc(subpool, sizeof(*lock_ctx));
+ lock_ctx = apr_pcalloc(iterpool, sizeof(*lock_ctx));
- apr_hash_this(hi, &key, NULL, &val);
- lock_ctx->pool = subpool;
- lock_ctx->path = key;
- lock_ctx->revision = *((svn_revnum_t*)val);
- lock_ctx->lock = svn_lock_create(subpool);
- lock_ctx->lock->path = key;
+ lock_ctx->pool = iterpool;
+ lock_ctx->path = svn__apr_hash_index_key(hi);
+ lock_ctx->revision = *((svn_revnum_t*)svn__apr_hash_index_val(hi));
+ lock_ctx->lock = svn_lock_create(iterpool);
+ lock_ctx->lock->path = lock_ctx->path;
lock_ctx->lock->comment = comment;
lock_ctx->force = force;
req_url = svn_path_url_add_component2(session->session_url.path,
- lock_ctx->path, subpool);
+ lock_ctx->path, iterpool);
- handler = apr_pcalloc(subpool, sizeof(*handler));
+ xmlctx = svn_ra_serf__xml_context_create(locks_ttable,
+ NULL, locks_closed, NULL,
+ lock_ctx,
+ iterpool);
+ handler = svn_ra_serf__create_expat_handler(xmlctx, iterpool);
handler->method = "LOCK";
handler->path = req_url;
@@ -615,35 +498,32 @@ svn_ra_serf__lock(svn_ra_session_t *ra_session,
handler->conn = session->conns[0];
handler->session = session;
- parser_ctx = apr_pcalloc(subpool, sizeof(*parser_ctx));
-
- parser_ctx->pool = subpool;
- parser_ctx->user_data = lock_ctx;
- parser_ctx->start = start_lock;
- parser_ctx->end = end_lock;
- parser_ctx->cdata = cdata_lock;
- parser_ctx->done = &lock_ctx->done;
-
handler->header_delegate = set_lock_headers;
handler->header_delegate_baton = lock_ctx;
handler->body_delegate = create_lock_body;
handler->body_delegate_baton = lock_ctx;
+ lock_ctx->inner_handler = handler->response_handler;
+ lock_ctx->inner_baton = handler->response_baton;
handler->response_handler = handle_lock;
- handler->response_baton = parser_ctx;
+ handler->response_baton = lock_ctx;
+
+ lock_ctx->handler = handler;
- svn_ra_serf__request_create(handler);
- err = svn_ra_serf__context_run_wait(&lock_ctx->done, session, subpool);
+ err = svn_ra_serf__context_run_one(handler, iterpool);
+ err = determine_error(handler, err);
if (lock_func)
new_err = lock_func(lock_baton, lock_ctx->path, TRUE, lock_ctx->lock,
- err, subpool);
+ err, iterpool);
svn_error_clear(err);
SVN_ERR(new_err);
}
+ svn_pool_destroy(iterpool);
+
return SVN_NO_ERROR;
}
@@ -675,43 +555,43 @@ svn_ra_serf__unlock(svn_ra_session_t *ra_session,
svn_boolean_t force,
svn_ra_lock_callback_t lock_func,
void *lock_baton,
- apr_pool_t *pool)
+ apr_pool_t *scratch_pool)
{
svn_ra_serf__session_t *session = ra_session->priv;
apr_hash_index_t *hi;
- apr_pool_t *subpool;
+ apr_pool_t *iterpool;
+
+ iterpool = svn_pool_create(scratch_pool);
- subpool = svn_pool_create(pool);
+ /* ### TODO for issue 2263: Send all the locks over the wire at once. This
+ ### loop is just a temporary shim.
+ ### an alternative, which is backwards-compat with all servers is to
+ ### pipeline these requests. ie. stop using run_wait/run_one. */
- for (hi = apr_hash_first(pool, path_tokens); hi; hi = apr_hash_next(hi))
+ for (hi = apr_hash_first(scratch_pool, path_tokens);
+ hi;
+ hi = apr_hash_next(hi))
{
svn_ra_serf__handler_t *handler;
- svn_ra_serf__simple_request_context_t *ctx;
const char *req_url, *path, *token;
- const void *key;
- void *val;
svn_lock_t *existing_lock = NULL;
struct unlock_context_t unlock_ctx;
- svn_error_t *lock_err = NULL;
+ svn_error_t *err = NULL;
+ svn_error_t *new_err = NULL;
- svn_pool_clear(subpool);
- ctx = apr_pcalloc(subpool, sizeof(*ctx));
- ctx->pool = subpool;
+ svn_pool_clear(iterpool);
- apr_hash_this(hi, &key, NULL, &val);
- path = key;
- token = val;
+ path = svn__apr_hash_index_key(hi);
+ token = svn__apr_hash_index_val(hi);
if (force && (!token || token[0] == '\0'))
{
SVN_ERR(svn_ra_serf__get_lock(ra_session, &existing_lock, path,
- subpool));
- token = existing_lock->token;
+ iterpool));
+ token = existing_lock ? existing_lock->token : NULL;
if (!token)
{
- svn_error_t *err;
-
err = svn_error_createf(SVN_ERR_RA_NOT_LOCKED, NULL,
_("'%s' is not locked in the repository"),
path);
@@ -719,23 +599,31 @@ svn_ra_serf__unlock(svn_ra_session_t *ra_session,
if (lock_func)
{
svn_error_t *err2;
- err2 = lock_func(lock_baton, path, FALSE, NULL, err, subpool);
+ err2 = lock_func(lock_baton, path, FALSE, NULL, err,
+ iterpool);
svn_error_clear(err);
+ err = NULL;
if (err2)
- return err2;
+ return svn_error_trace(err2);
+ }
+ else
+ {
+ svn_error_clear(err);
+ err = NULL;
}
continue;
}
}
unlock_ctx.force = force;
- unlock_ctx.token = apr_pstrcat(subpool, "<", token, ">", (char *)NULL);
+ unlock_ctx.token = apr_pstrcat(iterpool, "<", token, ">", (char *)NULL);
req_url = svn_path_url_add_component2(session->session_url.path, path,
- subpool);
+ iterpool);
- handler = apr_pcalloc(subpool, sizeof(*handler));
+ handler = apr_pcalloc(iterpool, sizeof(*handler));
+ handler->handler_pool = iterpool;
handler->method = "UNLOCK";
handler->path = req_url;
handler->conn = session->conns[0];
@@ -744,35 +632,38 @@ svn_ra_serf__unlock(svn_ra_session_t *ra_session,
handler->header_delegate = set_unlock_headers;
handler->header_delegate_baton = &unlock_ctx;
- handler->response_handler = svn_ra_serf__handle_status_only;
- handler->response_baton = ctx;
+ handler->response_handler = svn_ra_serf__expect_empty_body;
+ handler->response_baton = handler;
- svn_ra_serf__request_create(handler);
- SVN_ERR(svn_ra_serf__context_run_wait(&ctx->done, session, subpool));
+ SVN_ERR(svn_ra_serf__context_run_one(handler, iterpool));
- switch (ctx->status)
+ switch (handler->sline.code)
{
case 204:
break; /* OK */
case 403:
/* Api users expect this specific error code to detect failures */
- lock_err = svn_error_createf(SVN_ERR_FS_LOCK_OWNER_MISMATCH, NULL,
- _("Unlock request failed: %d %s"),
- ctx->status, ctx->reason);
+ err = svn_error_createf(SVN_ERR_FS_LOCK_OWNER_MISMATCH, NULL,
+ _("Unlock request failed: %d %s"),
+ handler->sline.code,
+ handler->sline.reason);
break;
default:
- lock_err = svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL,
- _("Unlock request failed: %d %s"),
- ctx->status, ctx->reason);
+ err = svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL,
+ _("Unlock request failed: %d %s"),
+ handler->sline.code,
+ handler->sline.reason);
}
if (lock_func)
- {
- SVN_ERR(lock_func(lock_baton, path, FALSE, existing_lock,
- lock_err, subpool));
- svn_error_clear(lock_err);
- }
+ new_err = lock_func(lock_baton, path, FALSE, existing_lock, err,
+ iterpool);
+
+ svn_error_clear(err);
+ SVN_ERR(new_err);
}
+ svn_pool_destroy(iterpool);
+
return SVN_NO_ERROR;
}
diff --git a/subversion/libsvn_ra_serf/log.c b/subversion/libsvn_ra_serf/log.c
index cd6a6b2..02f2f29 100644
--- a/subversion/libsvn_ra_serf/log.c
+++ b/subversion/libsvn_ra_serf/log.c
@@ -24,11 +24,9 @@
#include <apr_uri.h>
-
-#include <expat.h>
-
#include <serf.h>
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_ra.h"
#include "svn_dav.h"
@@ -39,6 +37,8 @@
#include "svn_props.h"
#include "private/svn_dav_protocol.h"
+#include "private/svn_string_private.h"
+#include "private/svn_subr_private.h"
#include "svn_private_config.h"
#include "ra_serf.h"
@@ -48,8 +48,8 @@
/*
* This enum represents the current state of our XML parsing for a REPORT.
*/
-typedef enum log_state_e {
- NONE = 0,
+enum {
+ INITIAL = 0,
REPORT,
ITEM,
VERSION,
@@ -63,27 +63,7 @@ typedef enum log_state_e {
DELETED_PATH,
MODIFIED_PATH,
SUBTRACTIVE_MERGE
-} log_state_e;
-
-typedef struct log_info_t {
- apr_pool_t *pool;
-
- /* The currently collected value as we build it up, and its wire
- * encoding (if any).
- */
- const char *tmp;
- apr_size_t tmp_len;
- const char *tmp_encoding;
-
- /* Temporary change path - ultimately inserted into changed_paths hash. */
- svn_log_changed_path2_t *tmp_path;
-
- /* Log information */
- svn_log_entry_t *log_entry;
-
- /* Place to hold revprop name. */
- const char *revprop_name;
-} log_info_t;
+};
typedef struct log_context_t {
apr_pool_t *pool;
@@ -100,9 +80,11 @@ typedef struct log_context_t {
int nest_level; /* used to track mergeinfo nesting levels */
int count; /* only incremented when nest_level == 0 */
- /* are we done? */
- svn_boolean_t done;
- int status_code;
+ /* Collect information for storage into a log entry. Most of the entry
+ members are collected by individual states. revprops and paths are
+ N datapoints per entry. */
+ apr_hash_t *collect_revprops;
+ apr_hash_t *collect_paths;
/* log receiver function and baton */
svn_log_entry_receiver_t receiver;
@@ -114,406 +96,307 @@ typedef struct log_context_t {
svn_boolean_t want_message;
} log_context_t;
-
-static log_info_t *
-push_state(svn_ra_serf__xml_parser_t *parser,
- log_context_t *log_ctx,
- log_state_e state,
- const char **attrs)
-{
- svn_ra_serf__xml_push_state(parser, state);
+#define D_ "DAV:"
+#define S_ SVN_XML_NAMESPACE
+static const svn_ra_serf__xml_transition_t log_ttable[] = {
+ { INITIAL, S_, "log-report", REPORT,
+ FALSE, { NULL }, FALSE },
- if (state == ITEM)
- {
- log_info_t *info;
- apr_pool_t *info_pool = svn_pool_create(parser->state->pool);
+ /* Note that we have an opener here. We need to construct a new LOG_ENTRY
+ to record multiple paths. */
+ { REPORT, S_, "log-item", ITEM,
+ FALSE, { NULL }, TRUE },
- info = apr_pcalloc(info_pool, sizeof(*info));
- info->pool = info_pool;
- info->log_entry = svn_log_entry_create(info_pool);
+ { ITEM, D_, SVN_DAV__VERSION_NAME, VERSION,
+ TRUE, { NULL }, TRUE },
- info->log_entry->revision = SVN_INVALID_REVNUM;
+ { ITEM, D_, "creator-displayname", CREATOR,
+ TRUE, { "?encoding", NULL }, TRUE },
- parser->state->private = info;
- }
+ { ITEM, S_, "date", DATE,
+ TRUE, { "?encoding", NULL }, TRUE },
- if (state == ADDED_PATH || state == REPLACED_PATH ||
- state == DELETED_PATH || state == MODIFIED_PATH)
- {
- log_info_t *info = parser->state->private;
+ { ITEM, D_, "comment", COMMENT,
+ TRUE, { "?encoding", NULL }, TRUE },
- if (!info->log_entry->changed_paths2)
- {
- info->log_entry->changed_paths2 = apr_hash_make(info->pool);
- info->log_entry->changed_paths = info->log_entry->changed_paths2;
- }
+ { ITEM, S_, "revprop", REVPROP,
+ TRUE, { "name", "?encoding", NULL }, TRUE },
- info->tmp_path = svn_log_changed_path2_create(info->pool);
- info->tmp_path->copyfrom_rev = SVN_INVALID_REVNUM;
- }
+ { ITEM, S_, "has-children", HAS_CHILDREN,
+ FALSE, { NULL }, TRUE },
- if (state == CREATOR || state == DATE || state == COMMENT
- || state == REVPROP)
- {
- log_info_t *info = parser->state->private;
+ { ITEM, S_, "subtractive-merge", SUBTRACTIVE_MERGE,
+ FALSE, { NULL }, TRUE },
- info->tmp_encoding = svn_xml_get_attr_value("encoding", attrs);
- if (info->tmp_encoding)
- info->tmp_encoding = apr_pstrdup(info->pool, info->tmp_encoding);
+ { ITEM, S_, "added-path", ADDED_PATH,
+ TRUE, { "?node-kind", "?text-mods", "?prop-mods",
+ "?copyfrom-path", "?copyfrom-rev", NULL }, TRUE },
- if (!info->log_entry->revprops)
- {
- info->log_entry->revprops = apr_hash_make(info->pool);
- }
- }
+ { ITEM, S_, "replaced-path", REPLACED_PATH,
+ TRUE, { "?node-kind", "?text-mods", "?prop-mods",
+ "?copyfrom-path", "?copyfrom-rev", NULL }, TRUE },
- return parser->state->private;
-}
+ { ITEM, S_, "deleted-path", DELETED_PATH,
+ TRUE, { "?node-kind", "?text-mods", "?prop-mods", NULL }, TRUE },
-/* Helper function to parse the common arguments availabe in ATTRS into CHANGE. */
-static svn_error_t *
-read_changed_path_attributes(svn_log_changed_path2_t *change, const char **attrs)
-{
- /* All these arguments are optional. The *_from_word() functions can handle
- them for us */
+ { ITEM, S_, "modified-path", MODIFIED_PATH,
+ TRUE, { "?node-kind", "?text-mods", "?prop-mods", NULL }, TRUE },
- change->node_kind = svn_node_kind_from_word(
- svn_xml_get_attr_value("node-kind", attrs));
- change->text_modified = svn_tristate__from_word(
- svn_xml_get_attr_value("text-mods", attrs));
- change->props_modified = svn_tristate__from_word(
- svn_xml_get_attr_value("prop-mods", attrs));
+ { 0 }
+};
- return SVN_NO_ERROR;
-}
+
+/* Store CDATA into REVPROPS, associated with PROPNAME. If ENCODING is not
+ NULL, then it must base "base64" and CDATA will be decoded first.
+ NOTE: PROPNAME must live longer than REVPROPS. */
static svn_error_t *
-start_log(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name,
- const char **attrs)
+collect_revprop(apr_hash_t *revprops,
+ const char *propname,
+ const svn_string_t *cdata,
+ const char *encoding)
{
- log_context_t *log_ctx = userData;
- log_state_e state;
-
- state = parser->state->current_state;
+ apr_pool_t *result_pool = apr_hash_pool_get(revprops);
+ const svn_string_t *decoded;
- if (state == NONE &&
- strcmp(name.name, "log-report") == 0)
+ if (encoding)
{
- push_state(parser, log_ctx, REPORT, attrs);
+ /* Check for a known encoding type. This is easy -- there's
+ only one. */
+ if (strcmp(encoding, "base64") != 0)
+ {
+ return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
+ _("Unsupported encoding '%s'"),
+ encoding);
+ }
+
+ decoded = svn_base64_decode_string(cdata, result_pool);
}
- else if (state == REPORT &&
- strcmp(name.name, "log-item") == 0)
+ else
{
- push_state(parser, log_ctx, ITEM, attrs);
+ decoded = svn_string_dup(cdata, result_pool);
}
- else if (state == ITEM)
+
+ /* Caller has ensured PROPNAME has sufficient lifetime. */
+ svn_hash_sets(revprops, propname, decoded);
+
+ return SVN_NO_ERROR;
+}
+
+
+/* Record ACTION on the path in CDATA into PATHS. Other properties about
+ the action are pulled from ATTRS. */
+static svn_error_t *
+collect_path(apr_hash_t *paths,
+ char action,
+ const svn_string_t *cdata,
+ apr_hash_t *attrs)
+{
+ apr_pool_t *result_pool = apr_hash_pool_get(paths);
+ svn_log_changed_path2_t *lcp;
+ const char *copyfrom_path;
+ const char *copyfrom_rev;
+ const char *path;
+
+ lcp = svn_log_changed_path2_create(result_pool);
+ lcp->action = action;
+ lcp->copyfrom_rev = SVN_INVALID_REVNUM;
+
+ /* COPYFROM_* are only recorded for ADDED_PATH and REPLACED_PATH. */
+ copyfrom_path = svn_hash_gets(attrs, "copyfrom-path");
+ copyfrom_rev = svn_hash_gets(attrs, "copyfrom-rev");
+ if (copyfrom_path && copyfrom_rev)
{
- log_info_t *info;
+ svn_revnum_t rev = SVN_STR_TO_REV(copyfrom_rev);
- if (strcmp(name.name, SVN_DAV__VERSION_NAME) == 0)
- {
- push_state(parser, log_ctx, VERSION, attrs);
- }
- else if (strcmp(name.name, "creator-displayname") == 0)
- {
- info = push_state(parser, log_ctx, CREATOR, attrs);
- }
- else if (strcmp(name.name, "date") == 0)
- {
- info = push_state(parser, log_ctx, DATE, attrs);
- }
- else if (strcmp(name.name, "comment") == 0)
- {
- info = push_state(parser, log_ctx, COMMENT, attrs);
- }
- else if (strcmp(name.name, "revprop") == 0)
- {
- const char *revprop_name =
- svn_xml_get_attr_value("name", attrs);
- if (revprop_name == NULL)
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Missing name attr in revprop element"));
- info = push_state(parser, log_ctx, REVPROP, attrs);
- info->revprop_name = apr_pstrdup(info->pool, revprop_name);
- }
- else if (strcmp(name.name, "has-children") == 0)
- {
- push_state(parser, log_ctx, HAS_CHILDREN, attrs);
- }
- else if (strcmp(name.name, "subtractive-merge") == 0)
- {
- push_state(parser, log_ctx, SUBTRACTIVE_MERGE, attrs);
- }
- else if (strcmp(name.name, "added-path") == 0)
- {
- const char *copy_path, *copy_rev_str;
-
- info = push_state(parser, log_ctx, ADDED_PATH, attrs);
- info->tmp_path->action = 'A';
-
- copy_path = svn_xml_get_attr_value("copyfrom-path", attrs);
- copy_rev_str = svn_xml_get_attr_value("copyfrom-rev", attrs);
- if (copy_path && copy_rev_str)
- {
- svn_revnum_t copy_rev;
-
- copy_rev = SVN_STR_TO_REV(copy_rev_str);
- if (SVN_IS_VALID_REVNUM(copy_rev))
- {
- info->tmp_path->copyfrom_path = apr_pstrdup(info->pool,
- copy_path);
- info->tmp_path->copyfrom_rev = copy_rev;
- }
- }
-
- SVN_ERR(read_changed_path_attributes(info->tmp_path, attrs));
- }
- else if (strcmp(name.name, "replaced-path") == 0)
+ if (SVN_IS_VALID_REVNUM(rev))
{
- const char *copy_path, *copy_rev_str;
-
- info = push_state(parser, log_ctx, REPLACED_PATH, attrs);
- info->tmp_path->action = 'R';
-
- copy_path = svn_xml_get_attr_value("copyfrom-path", attrs);
- copy_rev_str = svn_xml_get_attr_value("copyfrom-rev", attrs);
- if (copy_path && copy_rev_str)
- {
- svn_revnum_t copy_rev;
-
- copy_rev = SVN_STR_TO_REV(copy_rev_str);
- if (SVN_IS_VALID_REVNUM(copy_rev))
- {
- info->tmp_path->copyfrom_path = apr_pstrdup(info->pool,
- copy_path);
- info->tmp_path->copyfrom_rev = copy_rev;
- }
- }
-
- SVN_ERR(read_changed_path_attributes(info->tmp_path, attrs));
+ lcp->copyfrom_path = apr_pstrdup(result_pool, copyfrom_path);
+ lcp->copyfrom_rev = rev;
}
- else if (strcmp(name.name, "deleted-path") == 0)
- {
- info = push_state(parser, log_ctx, DELETED_PATH, attrs);
- info->tmp_path->action = 'D';
+ }
- SVN_ERR(read_changed_path_attributes(info->tmp_path, attrs));
- }
- else if (strcmp(name.name, "modified-path") == 0)
- {
- info = push_state(parser, log_ctx, MODIFIED_PATH, attrs);
- info->tmp_path->action = 'M';
+ lcp->node_kind = svn_node_kind_from_word(svn_hash_gets(attrs, "node-kind"));
+ lcp->text_modified = svn_tristate__from_word(svn_hash_gets(attrs,
+ "text-mods"));
+ lcp->props_modified = svn_tristate__from_word(svn_hash_gets(attrs,
+ "prop-mods"));
- SVN_ERR(read_changed_path_attributes(info->tmp_path, attrs));
- }
- }
+ path = apr_pstrmemdup(result_pool, cdata->data, cdata->len);
+ svn_hash_sets(paths, path, lcp);
return SVN_NO_ERROR;
}
-/*
- * Set *DECODED_CDATA to a copy of current CDATA being tracked in INFO,
- * decoded as necessary, and allocated from INFO->pool..
- */
+
+/* Conforms to svn_ra_serf__xml_opened_t */
static svn_error_t *
-maybe_decode_log_cdata(const svn_string_t **decoded_cdata,
- log_info_t *info)
+log_opened(svn_ra_serf__xml_estate_t *xes,
+ void *baton,
+ int entered_state,
+ const svn_ra_serf__dav_props_t *tag,
+ apr_pool_t *scratch_pool)
{
- if (info->tmp_encoding)
- {
- svn_string_t in;
- in.data = info->tmp;
- in.len = info->tmp_len;
-
- /* Check for a known encoding type. This is easy -- there's
- only one. */
- if (strcmp(info->tmp_encoding, "base64") != 0)
- {
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Unsupported encoding '%s'"),
- info->tmp_encoding);
- }
+ log_context_t *log_ctx = baton;
- *decoded_cdata = svn_base64_decode_string(&in, info->pool);
- }
- else
+ if (entered_state == ITEM)
{
- *decoded_cdata = svn_string_ncreate(info->tmp, info->tmp_len,
- info->pool);
+ apr_pool_t *state_pool = svn_ra_serf__xml_state_pool(xes);
+
+ log_ctx->collect_revprops = apr_hash_make(state_pool);
+ log_ctx->collect_paths = apr_hash_make(state_pool);
}
+
return SVN_NO_ERROR;
}
+
+/* Conforms to svn_ra_serf__xml_closed_t */
static svn_error_t *
-end_log(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name)
+log_closed(svn_ra_serf__xml_estate_t *xes,
+ void *baton,
+ int leaving_state,
+ const svn_string_t *cdata,
+ apr_hash_t *attrs,
+ apr_pool_t *scratch_pool)
{
- log_context_t *log_ctx = userData;
- log_state_e state;
- log_info_t *info;
-
- state = parser->state->current_state;
- info = parser->state->private;
+ log_context_t *log_ctx = baton;
- if (state == REPORT &&
- strcmp(name.name, "log-report") == 0)
- {
- svn_ra_serf__xml_pop_state(parser);
- }
- else if (state == ITEM &&
- strcmp(name.name, "log-item") == 0)
+ if (leaving_state == ITEM)
{
+ svn_log_entry_t *log_entry;
+ const char *rev_str;
+
if (log_ctx->limit && (log_ctx->nest_level == 0)
&& (++log_ctx->count > log_ctx->limit))
{
return SVN_NO_ERROR;
}
+ log_entry = svn_log_entry_create(scratch_pool);
+
+ /* Pick up the paths from the context. These have the same lifetime
+ as this state. That is long enough for us to pass the paths to
+ the receiver callback. */
+ if (apr_hash_count(log_ctx->collect_paths) > 0)
+ {
+ log_entry->changed_paths = log_ctx->collect_paths;
+ log_entry->changed_paths2 = log_ctx->collect_paths;
+ }
+
+ /* ... and same story for the collected revprops. */
+ log_entry->revprops = log_ctx->collect_revprops;
+
+ log_entry->has_children = svn_hash__get_bool(attrs,
+ "has-children",
+ FALSE);
+ log_entry->subtractive_merge = svn_hash__get_bool(attrs,
+ "subtractive-merge",
+ FALSE);
+
+ rev_str = svn_hash_gets(attrs, "revision");
+ if (rev_str)
+ log_entry->revision = SVN_STR_TO_REV(rev_str);
+ else
+ log_entry->revision = SVN_INVALID_REVNUM;
+
/* Give the info to the reporter */
SVN_ERR(log_ctx->receiver(log_ctx->receiver_baton,
- info->log_entry,
- info->pool));
+ log_entry,
+ scratch_pool));
- if (info->log_entry->has_children)
+ if (log_entry->has_children)
{
log_ctx->nest_level++;
}
- if (! SVN_IS_VALID_REVNUM(info->log_entry->revision))
+ if (! SVN_IS_VALID_REVNUM(log_entry->revision))
{
SVN_ERR_ASSERT(log_ctx->nest_level);
log_ctx->nest_level--;
}
- svn_pool_destroy(info->pool);
- svn_ra_serf__xml_pop_state(parser);
+ /* These hash tables are going to be unusable once this state's
+ pool is destroyed. But let's not leave stale pointers in
+ structures that have a longer life. */
+ log_ctx->collect_revprops = NULL;
+ log_ctx->collect_paths = NULL;
}
- else if (state == VERSION &&
- strcmp(name.name, SVN_DAV__VERSION_NAME) == 0)
+ else if (leaving_state == VERSION)
{
- info->log_entry->revision = SVN_STR_TO_REV(info->tmp);
- info->tmp_len = 0;
- svn_ra_serf__xml_pop_state(parser);
+ svn_ra_serf__xml_note(xes, ITEM, "revision", cdata->data);
}
- else if (state == CREATOR &&
- strcmp(name.name, "creator-displayname") == 0)
+ else if (leaving_state == CREATOR)
{
if (log_ctx->want_author)
{
- const svn_string_t *decoded_cdata;
- SVN_ERR(maybe_decode_log_cdata(&decoded_cdata, info));
- apr_hash_set(info->log_entry->revprops, SVN_PROP_REVISION_AUTHOR,
- APR_HASH_KEY_STRING, decoded_cdata);
+ SVN_ERR(collect_revprop(log_ctx->collect_revprops,
+ SVN_PROP_REVISION_AUTHOR,
+ cdata,
+ svn_hash_gets(attrs, "encoding")));
}
- info->tmp_len = 0;
- svn_ra_serf__xml_pop_state(parser);
}
- else if (state == DATE &&
- strcmp(name.name, "date") == 0)
+ else if (leaving_state == DATE)
{
if (log_ctx->want_date)
{
- const svn_string_t *decoded_cdata;
- SVN_ERR(maybe_decode_log_cdata(&decoded_cdata, info));
- apr_hash_set(info->log_entry->revprops, SVN_PROP_REVISION_DATE,
- APR_HASH_KEY_STRING, decoded_cdata);
+ SVN_ERR(collect_revprop(log_ctx->collect_revprops,
+ SVN_PROP_REVISION_DATE,
+ cdata,
+ svn_hash_gets(attrs, "encoding")));
}
- info->tmp_len = 0;
- svn_ra_serf__xml_pop_state(parser);
}
- else if (state == COMMENT &&
- strcmp(name.name, "comment") == 0)
+ else if (leaving_state == COMMENT)
{
if (log_ctx->want_message)
{
- const svn_string_t *decoded_cdata;
- SVN_ERR(maybe_decode_log_cdata(&decoded_cdata, info));
- apr_hash_set(info->log_entry->revprops, SVN_PROP_REVISION_LOG,
- APR_HASH_KEY_STRING, decoded_cdata);
+ SVN_ERR(collect_revprop(log_ctx->collect_revprops,
+ SVN_PROP_REVISION_LOG,
+ cdata,
+ svn_hash_gets(attrs, "encoding")));
}
- info->tmp_len = 0;
- svn_ra_serf__xml_pop_state(parser);
}
- else if (state == REVPROP)
+ else if (leaving_state == REVPROP)
{
- const svn_string_t *decoded_cdata;
- SVN_ERR(maybe_decode_log_cdata(&decoded_cdata, info));
- apr_hash_set(info->log_entry->revprops, info->revprop_name,
- APR_HASH_KEY_STRING, decoded_cdata);
- info->tmp_len = 0;
- svn_ra_serf__xml_pop_state(parser);
+ apr_pool_t *result_pool = apr_hash_pool_get(log_ctx->collect_revprops);
+
+ SVN_ERR(collect_revprop(
+ log_ctx->collect_revprops,
+ apr_pstrdup(result_pool,
+ svn_hash_gets(attrs, "name")),
+ cdata,
+ svn_hash_gets(attrs, "encoding")
+ ));
}
- else if (state == HAS_CHILDREN &&
- strcmp(name.name, "has-children") == 0)
+ else if (leaving_state == HAS_CHILDREN)
{
- info->log_entry->has_children = TRUE;
- svn_ra_serf__xml_pop_state(parser);
+ svn_ra_serf__xml_note(xes, ITEM, "has-children", "yes");
}
- else if (state == SUBTRACTIVE_MERGE &&
- strcmp(name.name, "subtractive-merge") == 0)
+ else if (leaving_state == SUBTRACTIVE_MERGE)
{
- info->log_entry->subtractive_merge = TRUE;
- svn_ra_serf__xml_pop_state(parser);
+ svn_ra_serf__xml_note(xes, ITEM, "subtractive-merge", "yes");
}
- else if ((state == ADDED_PATH &&
- strcmp(name.name, "added-path") == 0) ||
- (state == DELETED_PATH &&
- strcmp(name.name, "deleted-path") == 0) ||
- (state == MODIFIED_PATH &&
- strcmp(name.name, "modified-path") == 0) ||
- (state == REPLACED_PATH &&
- strcmp(name.name, "replaced-path") == 0))
+ else
{
- char *path;
-
- path = apr_pstrmemdup(info->pool, info->tmp, info->tmp_len);
- info->tmp_len = 0;
+ char action;
+
+ if (leaving_state == ADDED_PATH)
+ action = 'A';
+ else if (leaving_state == REPLACED_PATH)
+ action = 'R';
+ else if (leaving_state == DELETED_PATH)
+ action = 'D';
+ else
+ {
+ SVN_ERR_ASSERT(leaving_state == MODIFIED_PATH);
+ action = 'M';
+ }
- apr_hash_set(info->log_entry->changed_paths2, path, APR_HASH_KEY_STRING,
- info->tmp_path);
- svn_ra_serf__xml_pop_state(parser);
+ SVN_ERR(collect_path(log_ctx->collect_paths, action, cdata, attrs));
}
return SVN_NO_ERROR;
}
-static svn_error_t *
-cdata_log(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- const char *data,
- apr_size_t len)
-{
- log_context_t *log_ctx = userData;
- log_state_e state;
- log_info_t *info;
-
- UNUSED_CTX(log_ctx);
-
- state = parser->state->current_state;
- info = parser->state->private;
-
- switch (state)
- {
- case VERSION:
- case CREATOR:
- case DATE:
- case COMMENT:
- case REVPROP:
- case ADDED_PATH:
- case REPLACED_PATH:
- case DELETED_PATH:
- case MODIFIED_PATH:
- svn_ra_serf__expand_string(&info->tmp, &info->tmp_len,
- data, len, info->pool);
- break;
- default:
- break;
- }
-
- return SVN_NO_ERROR;
-}
static svn_error_t *
create_log_body(serf_bucket_t **body_bkt,
@@ -632,11 +515,11 @@ svn_ra_serf__get_log(svn_ra_session_t *ra_session,
log_context_t *log_ctx;
svn_ra_serf__session_t *session = ra_session->priv;
svn_ra_serf__handler_t *handler;
- svn_ra_serf__xml_parser_t *parser_ctx;
+ svn_ra_serf__xml_context_t *xmlctx;
svn_boolean_t want_custom_revprops;
svn_revnum_t peg_rev;
svn_error_t *err;
- const char *relative_url, *basecoll_url, *req_url;
+ const char *req_url;
log_ctx = apr_pcalloc(pool, sizeof(*log_ctx));
log_ctx->pool = pool;
@@ -651,7 +534,6 @@ svn_ra_serf__get_log(svn_ra_session_t *ra_session,
log_ctx->include_merged_revisions = include_merged_revisions;
log_ctx->revprops = revprops;
log_ctx->nest_level = 0;
- log_ctx->done = FALSE;
want_custom_revprops = FALSE;
if (revprops)
@@ -689,14 +571,18 @@ svn_ra_serf__get_log(svn_ra_session_t *ra_session,
/* At this point, we may have a deleted file. So, we'll match ra_neon's
* behavior and use the larger of start or end as our 'peg' rev.
*/
- peg_rev = (start > end) ? start : end;
+ peg_rev = (start == SVN_INVALID_REVNUM || start > end) ? start : end;
- SVN_ERR(svn_ra_serf__get_baseline_info(&basecoll_url, &relative_url, session,
- NULL, NULL, peg_rev, NULL, pool));
+ SVN_ERR(svn_ra_serf__get_stable_url(&req_url, NULL /* latest_revnum */,
+ session, NULL /* conn */,
+ NULL /* url */, peg_rev,
+ pool, pool));
- req_url = svn_path_url_add_component2(basecoll_url, relative_url, pool);
-
- handler = apr_pcalloc(pool, sizeof(*handler));
+ xmlctx = svn_ra_serf__xml_context_create(log_ttable,
+ log_opened, log_closed, NULL,
+ log_ctx,
+ pool);
+ handler = svn_ra_serf__create_expat_handler(xmlctx, pool);
handler->method = "REPORT";
handler->path = req_url;
@@ -706,27 +592,12 @@ svn_ra_serf__get_log(svn_ra_session_t *ra_session,
handler->conn = session->conns[0];
handler->session = session;
- parser_ctx = apr_pcalloc(pool, sizeof(*parser_ctx));
-
- parser_ctx->pool = pool;
- parser_ctx->user_data = log_ctx;
- parser_ctx->start = start_log;
- parser_ctx->end = end_log;
- parser_ctx->cdata = cdata_log;
- parser_ctx->done = &log_ctx->done;
- parser_ctx->status_code = &log_ctx->status_code;
-
- handler->response_handler = svn_ra_serf__handle_xml_parser;
- handler->response_baton = parser_ctx;
-
- svn_ra_serf__request_create(handler);
-
- err = svn_ra_serf__context_run_wait(&log_ctx->done, session, pool);
+ err = svn_ra_serf__context_run_one(handler, pool);
SVN_ERR(svn_error_compose_create(
- svn_ra_serf__error_on_status(log_ctx->status_code,
+ svn_ra_serf__error_on_status(handler->sline,
req_url,
- parser_ctx->location),
+ handler->location),
err));
return SVN_NO_ERROR;
diff --git a/subversion/libsvn_ra_serf/merge.c b/subversion/libsvn_ra_serf/merge.c
index 1d3bd1a..670e421 100644
--- a/subversion/libsvn_ra_serf/merge.c
+++ b/subversion/libsvn_ra_serf/merge.c
@@ -27,6 +27,7 @@
#include <serf.h>
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_ra.h"
#include "svn_dav.h"
@@ -47,7 +48,7 @@
* This enum represents the current state of our XML parsing for a MERGE.
*/
typedef enum merge_state_e {
- NONE = 0,
+ INITIAL = 0,
MERGE_RESPONSE,
UPDATED_SET,
RESPONSE,
@@ -55,41 +56,26 @@ typedef enum merge_state_e {
PROPSTAT,
PROP,
RESOURCE_TYPE,
- AUTHOR,
- NAME,
- DATE,
- IGNORE_PROP_NAME,
- NEED_PROP_NAME,
- PROP_VAL
-} merge_state_e;
-
-typedef enum resource_type_e {
- UNSET,
BASELINE,
COLLECTION,
- CHECKED_IN
-} resource_type_e;
-
-typedef struct merge_info_t {
- /* Temporary allocations here please */
- apr_pool_t *pool;
-
- resource_type_e type;
+ SKIP_HREF,
+ CHECKED_IN,
+ VERSION_NAME,
+ DATE,
+ AUTHOR,
+ POST_COMMIT_ERR,
- apr_hash_t *props;
+ PROP_VAL
+} merge_state_e;
- const char *prop_ns;
- const char *prop_name;
- const char *prop_val;
- apr_size_t prop_val_len;
-} merge_info_t;
/* Structure associated with a MERGE request. */
-struct svn_ra_serf__merge_context_t
+typedef struct merge_context_t
{
apr_pool_t *pool;
svn_ra_serf__session_t *session;
+ svn_ra_serf__handler_t *handler;
apr_hash_t *lock_tokens;
svn_boolean_t keep_locks;
@@ -97,315 +83,192 @@ struct svn_ra_serf__merge_context_t
const char *merge_resource_url; /* URL of resource to be merged. */
const char *merge_url; /* URL at which the MERGE request is aimed. */
- int status;
+ svn_commit_info_t *commit_info;
- svn_boolean_t done;
+} merge_context_t;
- svn_commit_info_t *commit_info;
-};
-
-static merge_info_t *
-push_state(svn_ra_serf__xml_parser_t *parser,
- svn_ra_serf__merge_context_t *ctx,
- merge_state_e state)
-{
- merge_info_t *info;
+#define D_ "DAV:"
+#define S_ SVN_XML_NAMESPACE
+static const svn_ra_serf__xml_transition_t merge_ttable[] = {
+ { INITIAL, D_, "merge-response", MERGE_RESPONSE,
+ FALSE, { NULL }, FALSE },
- svn_ra_serf__xml_push_state(parser, state);
+ { MERGE_RESPONSE, D_, "updated-set", UPDATED_SET,
+ FALSE, { NULL }, FALSE },
- if (state == RESPONSE)
- {
- info = apr_palloc(parser->state->pool, sizeof(*info));
- info->pool = parser->state->pool;
- info->props = apr_hash_make(info->pool);
+ { UPDATED_SET, D_, "response", RESPONSE,
+ FALSE, { NULL }, TRUE },
- parser->state->private = info;
- }
+ { RESPONSE, D_, "href", HREF,
+ TRUE, { NULL }, TRUE },
- return parser->state->private;
-}
+ { RESPONSE, D_, "propstat", PROPSTAT,
+ FALSE, { NULL }, FALSE },
-static svn_error_t *
-start_merge(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name,
- const char **attrs)
-{
- svn_ra_serf__merge_context_t *ctx = userData;
- merge_state_e state;
- merge_info_t *info;
+#if 0
+ /* Not needed. */
+ { PROPSTAT, D_, "status", STATUS,
+ FALSE, { NULL }, FALSE },
+#endif
- state = parser->state->current_state;
+ { PROPSTAT, D_, "prop", PROP,
+ FALSE, { NULL }, FALSE },
- if (state == NONE &&
- strcmp(name.name, "merge-response") == 0)
- {
- push_state(parser, ctx, MERGE_RESPONSE);
- }
- else if (state == NONE)
- {
- /* do nothing as we haven't seen our valid start tag yet. */
- }
- else if (state == MERGE_RESPONSE &&
- strcmp(name.name, "updated-set") == 0)
- {
- push_state(parser, ctx, UPDATED_SET);
- }
- else if (state == UPDATED_SET &&
- strcmp(name.name, "response") == 0)
- {
- push_state(parser, ctx, RESPONSE);
- }
- else if (state == RESPONSE &&
- strcmp(name.name, "href") == 0)
- {
- info = push_state(parser, ctx, PROP_VAL);
+ { PROP, D_, "resourcetype", RESOURCE_TYPE,
+ FALSE, { NULL }, FALSE },
- info->prop_ns = name.namespace;
- info->prop_name = apr_pstrdup(info->pool, name.name);
- info->prop_val = NULL;
- info->prop_val_len = 0;
- }
- else if (state == RESPONSE &&
- strcmp(name.name, "propstat") == 0)
- {
- push_state(parser, ctx, PROPSTAT);
- }
- else if (state == PROPSTAT &&
- strcmp(name.name, "prop") == 0)
- {
- push_state(parser, ctx, PROP);
- }
- else if (state == PROPSTAT &&
- strcmp(name.name, "status") == 0)
- {
- /* Do nothing for now. */
- }
- else if (state == PROP &&
- strcmp(name.name, "resourcetype") == 0)
- {
- info = push_state(parser, ctx, RESOURCE_TYPE);
- info->type = UNSET;
- }
- else if (state == RESOURCE_TYPE &&
- strcmp(name.name, "baseline") == 0)
- {
- info = parser->state->private;
+ { RESOURCE_TYPE, D_, "baseline", BASELINE,
+ FALSE, { NULL }, TRUE },
- info->type = BASELINE;
- }
- else if (state == RESOURCE_TYPE &&
- strcmp(name.name, "collection") == 0)
- {
- info = parser->state->private;
+ { RESOURCE_TYPE, D_, "collection", COLLECTION,
+ FALSE, { NULL }, TRUE },
- info->type = COLLECTION;
- }
- else if (state == PROP &&
- strcmp(name.name, "checked-in") == 0)
- {
- info = push_state(parser, ctx, IGNORE_PROP_NAME);
+ { PROP, D_, "checked-in", SKIP_HREF,
+ FALSE, { NULL }, FALSE },
- info->prop_ns = name.namespace;
- info->prop_name = apr_pstrdup(info->pool, name.name);
- info->prop_val = NULL;
- info->prop_val_len = 0;
- }
- else if (state == PROP)
- {
- push_state(parser, ctx, PROP_VAL);
- }
- else if (state == IGNORE_PROP_NAME)
- {
- push_state(parser, ctx, PROP_VAL);
- }
- else if (state == NEED_PROP_NAME)
- {
- info = push_state(parser, ctx, PROP_VAL);
- info->prop_ns = name.namespace;
- info->prop_name = apr_pstrdup(info->pool, name.name);
- info->prop_val = NULL;
- info->prop_val_len = 0;
- }
- else
- {
- SVN_ERR_MALFUNCTION();
- }
+ { SKIP_HREF, D_, "href", CHECKED_IN,
+ TRUE, { NULL }, TRUE },
+
+ { PROP, D_, SVN_DAV__VERSION_NAME, VERSION_NAME,
+ TRUE, { NULL }, TRUE },
+
+ { PROP, D_, SVN_DAV__CREATIONDATE, DATE,
+ TRUE, { NULL }, TRUE },
+
+ { PROP, D_, "creator-displayname", AUTHOR,
+ TRUE, { NULL }, TRUE },
+
+ { PROP, S_, "post-commit-err", POST_COMMIT_ERR,
+ TRUE, { NULL }, TRUE },
+
+ { 0 }
+};
- return SVN_NO_ERROR;
-}
+/* Conforms to svn_ra_serf__xml_closed_t */
static svn_error_t *
-end_merge(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name)
+merge_closed(svn_ra_serf__xml_estate_t *xes,
+ void *baton,
+ int leaving_state,
+ const svn_string_t *cdata,
+ apr_hash_t *attrs,
+ apr_pool_t *scratch_pool)
{
- svn_ra_serf__merge_context_t *ctx = userData;
- merge_state_e state;
- merge_info_t *info;
+ merge_context_t *merge_ctx = baton;
- state = parser->state->current_state;
- info = parser->state->private;
-
- if (state == NONE)
+ if (leaving_state == RESPONSE)
{
- /* nothing to close yet. */
- return SVN_NO_ERROR;
- }
+ const char *rtype;
- if (state == RESPONSE &&
- strcmp(name.name, "response") == 0)
- {
- if (info->type == BASELINE)
+ rtype = svn_hash_gets(attrs, "resourcetype");
+
+ /* rtype can only be "baseline" or "collection" (or NULL). We can
+ keep this check simple. */
+ if (rtype && *rtype == 'b')
{
- const char *str;
+ const char *rev_str;
- str = apr_hash_get(info->props, SVN_DAV__VERSION_NAME,
- APR_HASH_KEY_STRING);
- if (str)
- {
- ctx->commit_info->revision = SVN_STR_TO_REV(str);
- }
+ rev_str = svn_hash_gets(attrs, "revision");
+ if (rev_str)
+ merge_ctx->commit_info->revision = SVN_STR_TO_REV(rev_str);
else
- {
- ctx->commit_info->revision = SVN_INVALID_REVNUM;
- }
+ merge_ctx->commit_info->revision = SVN_INVALID_REVNUM;
- ctx->commit_info->date =
- apr_pstrdup(ctx->pool,
- apr_hash_get(info->props, SVN_DAV__CREATIONDATE,
- APR_HASH_KEY_STRING));
+ merge_ctx->commit_info->date =
+ apr_pstrdup(merge_ctx->pool,
+ svn_hash_gets(attrs, "date"));
- ctx->commit_info->author =
- apr_pstrdup(ctx->pool,
- apr_hash_get(info->props, "creator-displayname",
- APR_HASH_KEY_STRING));
+ merge_ctx->commit_info->author =
+ apr_pstrdup(merge_ctx->pool,
+ svn_hash_gets(attrs, "author"));
- ctx->commit_info->post_commit_err =
- apr_pstrdup(ctx->pool,
- apr_hash_get(info->props,
- "post-commit-err", APR_HASH_KEY_STRING));
+ merge_ctx->commit_info->post_commit_err =
+ apr_pstrdup(merge_ctx->pool,
+ svn_hash_gets(attrs, "post-commit-err"));
}
else
{
const char *href;
- href = apr_hash_get(info->props, "href", APR_HASH_KEY_STRING);
- if (! svn_urlpath__is_ancestor(ctx->merge_url, href))
- {
- return svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL,
- _("A MERGE response for '%s' is not "
- "a child of the destination ('%s')"),
- href, ctx->merge_url);
- }
+ href = svn_urlpath__skip_ancestor(
+ merge_ctx->merge_url,
+ svn_hash_gets(attrs, "href"));
+
+ if (href == NULL)
+ return svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL,
+ _("A MERGE response for '%s' is not "
+ "a child of the destination ('%s')"),
+ href, merge_ctx->merge_url);
/* We now need to dive all the way into the WC to update the
- * base VCC url.
- */
- if ((! SVN_RA_SERF__HAVE_HTTPV2_SUPPORT(ctx->session))
- && ctx->session->wc_callbacks->push_wc_prop)
+ base VCC url. */
+ if (!SVN_RA_SERF__HAVE_HTTPV2_SUPPORT(merge_ctx->session)
+ && merge_ctx->session->wc_callbacks->push_wc_prop)
{
- svn_string_t checked_in_str;
const char *checked_in;
+ svn_string_t checked_in_str;
- /* From the above check, we know that CTX->MERGE_URL is
- an ancestor of HREF. All that remains is to
- determine of HREF is the same as CTX->MERGE_URL, or --
- if not -- is relative value as a child thereof. */
- href = svn_urlpath__is_child(ctx->merge_url, href, NULL);
- if (! href)
- href = "";
-
- checked_in = apr_hash_get(info->props, "checked-in",
- APR_HASH_KEY_STRING);
+ checked_in = svn_hash_gets(attrs, "checked-in");
checked_in_str.data = checked_in;
checked_in_str.len = strlen(checked_in);
- SVN_ERR(ctx->session->wc_callbacks->push_wc_prop(
- ctx->session->wc_callback_baton, href,
- SVN_RA_SERF__WC_CHECKED_IN_URL, &checked_in_str, info->pool));
+ SVN_ERR(merge_ctx->session->wc_callbacks->push_wc_prop(
+ merge_ctx->session->wc_callback_baton,
+ href,
+ SVN_RA_SERF__WC_CHECKED_IN_URL,
+ &checked_in_str,
+ scratch_pool));
}
}
-
- svn_ra_serf__xml_pop_state(parser);
- }
- else if (state == PROPSTAT &&
- strcmp(name.name, "propstat") == 0)
- {
- svn_ra_serf__xml_pop_state(parser);
- }
- else if (state == PROP &&
- strcmp(name.name, "prop") == 0)
- {
- svn_ra_serf__xml_pop_state(parser);
}
- else if (state == RESOURCE_TYPE &&
- strcmp(name.name, "resourcetype") == 0)
+ else if (leaving_state == BASELINE)
{
- svn_ra_serf__xml_pop_state(parser);
+ svn_ra_serf__xml_note(xes, RESPONSE, "resourcetype", "baseline");
}
- else if (state == IGNORE_PROP_NAME || state == NEED_PROP_NAME)
+ else if (leaving_state == COLLECTION)
{
- svn_ra_serf__xml_pop_state(parser);
+ svn_ra_serf__xml_note(xes, RESPONSE, "resourcetype", "collection");
}
- else if (state == PROP_VAL)
+ else
{
- if (!info->prop_name)
+ const char *name;
+ const char *value = cdata->data;
+
+ if (leaving_state == HREF)
{
- info->prop_name = apr_pstrdup(info->pool, name.name);
+ name = "href";
+ value = svn_urlpath__canonicalize(value, scratch_pool);
}
- info->prop_val = apr_pstrmemdup(info->pool, info->prop_val,
- info->prop_val_len);
- if (strcmp(info->prop_name, "href") == 0)
- info->prop_val = svn_urlpath__canonicalize(info->prop_val,
- info->pool);
-
- /* Set our property. */
- apr_hash_set(info->props, info->prop_name, APR_HASH_KEY_STRING,
- info->prop_val);
-
- info->prop_ns = NULL;
- info->prop_name = NULL;
- info->prop_val = NULL;
- info->prop_val_len = 0;
-
- svn_ra_serf__xml_pop_state(parser);
- }
-
- return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-cdata_merge(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- const char *data,
- apr_size_t len)
-{
- svn_ra_serf__merge_context_t *ctx = userData;
- merge_state_e state;
- merge_info_t *info;
-
- UNUSED_CTX(ctx);
-
- state = parser->state->current_state;
- info = parser->state->private;
+ else if (leaving_state == CHECKED_IN)
+ {
+ name = "checked-in";
+ value = svn_urlpath__canonicalize(value, scratch_pool);
+ }
+ else if (leaving_state == VERSION_NAME)
+ name = "revision";
+ else if (leaving_state == DATE)
+ name = "date";
+ else if (leaving_state == AUTHOR)
+ name = "author";
+ else if (leaving_state == POST_COMMIT_ERR)
+ name = "post-commit-err";
+ else
+ SVN_ERR_MALFUNCTION();
- if (state == PROP_VAL)
- {
- svn_ra_serf__expand_string(&info->prop_val, &info->prop_val_len,
- data, len, parser->state->pool);
+ svn_ra_serf__xml_note(xes, RESPONSE, name, value);
}
return SVN_NO_ERROR;
}
+
static svn_error_t *
setup_merge_headers(serf_bucket_t *headers,
void *baton,
apr_pool_t *pool)
{
- svn_ra_serf__merge_context_t *ctx = baton;
+ merge_context_t *ctx = baton;
if (!ctx->keep_locks)
{
@@ -447,7 +310,7 @@ svn_ra_serf__merge_lock_token_list(apr_hash_t *lock_tokens,
path.data = key;
path.len = klen;
- if (parent && !svn_relpath__is_ancestor(parent, key))
+ if (parent && !svn_relpath_skip_ancestor(parent, key))
continue;
svn_ra_serf__add_open_tag_buckets(body, alloc, "S:lock", NULL);
@@ -470,7 +333,7 @@ create_merge_body(serf_bucket_t **bkt,
serf_bucket_alloc_t *alloc,
apr_pool_t *pool)
{
- svn_ra_serf__merge_context_t *ctx = baton;
+ merge_context_t *ctx = baton;
serf_bucket_t *body_bkt;
body_bkt = serf_bucket_aggregate_create(alloc);
@@ -512,21 +375,23 @@ create_merge_body(serf_bucket_t **bkt,
svn_error_t *
-svn_ra_serf__merge_create_req(svn_ra_serf__merge_context_t **ret_ctx,
- svn_ra_serf__session_t *session,
- svn_ra_serf__connection_t *conn,
- const char *merge_resource_url,
- apr_hash_t *lock_tokens,
- svn_boolean_t keep_locks,
- apr_pool_t *pool)
+svn_ra_serf__run_merge(const svn_commit_info_t **commit_info,
+ int *response_code,
+ svn_ra_serf__session_t *session,
+ svn_ra_serf__connection_t *conn,
+ const char *merge_resource_url,
+ apr_hash_t *lock_tokens,
+ svn_boolean_t keep_locks,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- svn_ra_serf__merge_context_t *merge_ctx;
+ merge_context_t *merge_ctx;
svn_ra_serf__handler_t *handler;
- svn_ra_serf__xml_parser_t *parser_ctx;
+ svn_ra_serf__xml_context_t *xmlctx;
- merge_ctx = apr_pcalloc(pool, sizeof(*merge_ctx));
+ merge_ctx = apr_pcalloc(scratch_pool, sizeof(*merge_ctx));
- merge_ctx->pool = pool;
+ merge_ctx->pool = result_pool;
merge_ctx->session = session;
merge_ctx->merge_resource_url = merge_resource_url;
@@ -534,11 +399,15 @@ svn_ra_serf__merge_create_req(svn_ra_serf__merge_context_t **ret_ctx,
merge_ctx->lock_tokens = lock_tokens;
merge_ctx->keep_locks = keep_locks;
- merge_ctx->commit_info = svn_create_commit_info(pool);
+ merge_ctx->commit_info = svn_create_commit_info(result_pool);
merge_ctx->merge_url = session->session_url.path;
- handler = apr_pcalloc(pool, sizeof(*handler));
+ xmlctx = svn_ra_serf__xml_context_create(merge_ttable,
+ NULL, merge_closed, NULL,
+ merge_ctx,
+ scratch_pool);
+ handler = svn_ra_serf__create_expat_handler(xmlctx, scratch_pool);
handler->method = "MERGE";
handler->path = merge_ctx->merge_url;
@@ -547,43 +416,15 @@ svn_ra_serf__merge_create_req(svn_ra_serf__merge_context_t **ret_ctx,
handler->conn = conn;
handler->session = session;
- parser_ctx = apr_pcalloc(pool, sizeof(*parser_ctx));
-
- parser_ctx->pool = pool;
- parser_ctx->user_data = merge_ctx;
- parser_ctx->start = start_merge;
- parser_ctx->end = end_merge;
- parser_ctx->cdata = cdata_merge;
- parser_ctx->done = &merge_ctx->done;
- parser_ctx->status_code = &merge_ctx->status;
-
handler->header_delegate = setup_merge_headers;
handler->header_delegate_baton = merge_ctx;
- handler->response_handler = svn_ra_serf__handle_xml_parser;
- handler->response_baton = parser_ctx;
+ merge_ctx->handler = handler;
- svn_ra_serf__request_create(handler);
+ SVN_ERR(svn_ra_serf__context_run_one(handler, scratch_pool));
- *ret_ctx = merge_ctx;
+ *commit_info = merge_ctx->commit_info;
+ *response_code = handler->sline.code;
return SVN_NO_ERROR;
}
-
-svn_boolean_t*
-svn_ra_serf__merge_get_done_ptr(svn_ra_serf__merge_context_t *ctx)
-{
- return &ctx->done;
-}
-
-svn_commit_info_t*
-svn_ra_serf__merge_get_commit_info(svn_ra_serf__merge_context_t *ctx)
-{
- return ctx->commit_info;
-}
-
-int
-svn_ra_serf__merge_get_status(svn_ra_serf__merge_context_t *ctx)
-{
- return ctx->status;
-}
diff --git a/subversion/libsvn_ra_serf/mergeinfo.c b/subversion/libsvn_ra_serf/mergeinfo.c
index 7584d99..bd4fcba 100644
--- a/subversion/libsvn_ra_serf/mergeinfo.c
+++ b/subversion/libsvn_ra_serf/mergeinfo.c
@@ -24,6 +24,7 @@
#include <apr_tables.h>
#include <apr_xml.h>
+#include "svn_hash.h"
#include "svn_mergeinfo.h"
#include "svn_path.h"
#include "svn_ra.h"
@@ -40,7 +41,7 @@
/* The current state of our XML parsing. */
typedef enum mergeinfo_state_e {
- NONE = 0,
+ INITIAL = 0,
MERGEINFO_REPORT,
MERGEINFO_ITEM,
MERGEINFO_PATH,
@@ -49,132 +50,87 @@ typedef enum mergeinfo_state_e {
/* Baton for accumulating mergeinfo. RESULT_CATALOG stores the final
mergeinfo catalog result we are going to hand back to the caller of
- get_mergeinfo. curr_path and curr_info contain the value of the
- CDATA from the mergeinfo items as we get them from the server. */
-
+ get_mergeinfo. */
typedef struct mergeinfo_context_t {
apr_pool_t *pool;
- svn_stringbuf_t *curr_path;
- svn_stringbuf_t *curr_info;
svn_mergeinfo_t result_catalog;
- svn_boolean_t done;
const apr_array_header_t *paths;
svn_revnum_t revision;
svn_mergeinfo_inheritance_t inherit;
svn_boolean_t include_descendants;
} mergeinfo_context_t;
-static svn_error_t *
-start_element(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name,
- const char **attrs)
-{
- mergeinfo_context_t *mergeinfo_ctx = userData;
- mergeinfo_state_e state;
- state = parser->state->current_state;
- if (state == NONE && strcmp(name.name, SVN_DAV__MERGEINFO_REPORT) == 0)
- {
- svn_ra_serf__xml_push_state(parser, MERGEINFO_REPORT);
- }
- else if (state == MERGEINFO_REPORT &&
- strcmp(name.name, SVN_DAV__MERGEINFO_ITEM) == 0)
- {
- svn_ra_serf__xml_push_state(parser, MERGEINFO_ITEM);
- svn_stringbuf_setempty(mergeinfo_ctx->curr_path);
- svn_stringbuf_setempty(mergeinfo_ctx->curr_info);
- }
- else if (state == MERGEINFO_ITEM &&
- strcmp(name.name, SVN_DAV__MERGEINFO_PATH) == 0)
- {
- svn_ra_serf__xml_push_state(parser, MERGEINFO_PATH);
- }
- else if (state == MERGEINFO_ITEM &&
- strcmp(name.name, SVN_DAV__MERGEINFO_INFO) == 0)
- {
- svn_ra_serf__xml_push_state(parser, MERGEINFO_INFO);
- }
- return SVN_NO_ERROR;
-}
+#define D_ "DAV:"
+#define S_ SVN_XML_NAMESPACE
+static const svn_ra_serf__xml_transition_t mergeinfo_ttable[] = {
+ { INITIAL, S_, SVN_DAV__MERGEINFO_REPORT, MERGEINFO_REPORT,
+ FALSE, { NULL }, FALSE },
+
+ { MERGEINFO_REPORT, S_, SVN_DAV__MERGEINFO_ITEM, MERGEINFO_ITEM,
+ FALSE, { NULL }, TRUE },
+
+ { MERGEINFO_ITEM, S_, SVN_DAV__MERGEINFO_PATH, MERGEINFO_PATH,
+ TRUE, { NULL }, TRUE },
+
+ { MERGEINFO_ITEM, S_, SVN_DAV__MERGEINFO_INFO, MERGEINFO_INFO,
+ TRUE, { NULL }, TRUE },
+
+ { 0 }
+};
+
+/* Conforms to svn_ra_serf__xml_closed_t */
static svn_error_t *
-end_element(svn_ra_serf__xml_parser_t *parser, void *userData,
- svn_ra_serf__dav_props_t name)
+mergeinfo_closed(svn_ra_serf__xml_estate_t *xes,
+ void *baton,
+ int leaving_state,
+ const svn_string_t *cdata,
+ apr_hash_t *attrs,
+ apr_pool_t *scratch_pool)
{
- mergeinfo_context_t *mergeinfo_ctx = userData;
- mergeinfo_state_e state;
-
- state = parser->state->current_state;
+ mergeinfo_context_t *mergeinfo_ctx = baton;
- if (state == MERGEINFO_REPORT &&
- strcmp(name.name, SVN_DAV__MERGEINFO_REPORT) == 0)
- {
- svn_ra_serf__xml_pop_state(parser);
- }
- else if (state == MERGEINFO_ITEM
- && strcmp(name.name, SVN_DAV__MERGEINFO_ITEM) == 0)
+ if (leaving_state == MERGEINFO_ITEM)
{
- if (mergeinfo_ctx->curr_info && mergeinfo_ctx->curr_path)
+ /* Placed here from the child elements. */
+ const char *path = svn_hash_gets(attrs, "path");
+ const char *info = svn_hash_gets(attrs, "info");
+
+ if (path != NULL && info != NULL)
{
svn_mergeinfo_t path_mergeinfo;
- const char *path;
- SVN_ERR_ASSERT(mergeinfo_ctx->curr_path->data);
- path = apr_pstrdup(mergeinfo_ctx->pool,
- mergeinfo_ctx->curr_path->data);
- SVN_ERR(svn_mergeinfo_parse(&path_mergeinfo,
- mergeinfo_ctx->curr_info->data,
- mergeinfo_ctx->pool));
/* Correct for naughty servers that send "relative" paths
with leading slashes! */
- apr_hash_set(mergeinfo_ctx->result_catalog,
- path[0] == '/' ? path + 1 : path,
- APR_HASH_KEY_STRING, path_mergeinfo);
- }
- svn_ra_serf__xml_pop_state(parser);
- }
- else if (state == MERGEINFO_PATH
- && strcmp(name.name, SVN_DAV__MERGEINFO_PATH) == 0)
- {
- svn_ra_serf__xml_pop_state(parser);
- }
- else if (state == MERGEINFO_INFO
- && strcmp(name.name, SVN_DAV__MERGEINFO_INFO) == 0)
- {
- svn_ra_serf__xml_pop_state(parser);
- }
- return SVN_NO_ERROR;
-}
-
+ if (path[0] == '/')
+ ++path;
-static svn_error_t *
-cdata_handler(svn_ra_serf__xml_parser_t *parser, void *userData,
- const char *data, apr_size_t len)
-{
- mergeinfo_context_t *mergeinfo_ctx = userData;
- mergeinfo_state_e state;
+ SVN_ERR(svn_mergeinfo_parse(&path_mergeinfo, info,
+ mergeinfo_ctx->pool));
- state = parser->state->current_state;
- switch (state)
+ svn_hash_sets(mergeinfo_ctx->result_catalog,
+ apr_pstrdup(mergeinfo_ctx->pool, path),
+ path_mergeinfo);
+ }
+ }
+ else
{
- case MERGEINFO_PATH:
- if (mergeinfo_ctx->curr_path)
- svn_stringbuf_appendbytes(mergeinfo_ctx->curr_path, data, len);
- break;
-
- case MERGEINFO_INFO:
- if (mergeinfo_ctx->curr_info)
- svn_stringbuf_appendbytes(mergeinfo_ctx->curr_info, data, len);
- break;
-
- default:
- break;
+ SVN_ERR_ASSERT(leaving_state == MERGEINFO_PATH
+ || leaving_state == MERGEINFO_INFO);
+
+ /* Stash the value onto the parent MERGEINFO_ITEM. */
+ svn_ra_serf__xml_note(xes, MERGEINFO_ITEM,
+ leaving_state == MERGEINFO_PATH
+ ? "path"
+ : "info",
+ cdata->data);
}
return SVN_NO_ERROR;
}
+
static svn_error_t *
create_mergeinfo_body(serf_bucket_t **bkt,
void *baton,
@@ -226,8 +182,6 @@ create_mergeinfo_body(serf_bucket_t **bkt,
return SVN_NO_ERROR;
}
-/* Request a mergeinfo-report from the URL attached to SESSION,
- and fill in the MERGEINFO hash with the results. */
svn_error_t *
svn_ra_serf__get_mergeinfo(svn_ra_session_t *ra_session,
svn_mergeinfo_catalog_t *catalog,
@@ -237,35 +191,33 @@ svn_ra_serf__get_mergeinfo(svn_ra_session_t *ra_session,
svn_boolean_t include_descendants,
apr_pool_t *pool)
{
- svn_error_t *err, *err2;
- int status_code;
-
+ svn_error_t *err;
mergeinfo_context_t *mergeinfo_ctx;
svn_ra_serf__session_t *session = ra_session->priv;
svn_ra_serf__handler_t *handler;
- svn_ra_serf__xml_parser_t *parser_ctx;
- const char *relative_url, *basecoll_url;
+ svn_ra_serf__xml_context_t *xmlctx;
const char *path;
*catalog = NULL;
- SVN_ERR(svn_ra_serf__get_baseline_info(&basecoll_url, &relative_url, session,
- NULL, NULL, revision, NULL, pool));
-
- path = svn_path_url_add_component2(basecoll_url, relative_url, pool);
+ SVN_ERR(svn_ra_serf__get_stable_url(&path, NULL /* latest_revnum */,
+ session, NULL /* conn */,
+ NULL /* url */, revision,
+ pool, pool));
mergeinfo_ctx = apr_pcalloc(pool, sizeof(*mergeinfo_ctx));
mergeinfo_ctx->pool = pool;
- mergeinfo_ctx->curr_path = svn_stringbuf_create("", pool);
- mergeinfo_ctx->curr_info = svn_stringbuf_create("", pool);
- mergeinfo_ctx->done = FALSE;
mergeinfo_ctx->result_catalog = apr_hash_make(pool);
mergeinfo_ctx->paths = paths;
mergeinfo_ctx->revision = revision;
mergeinfo_ctx->inherit = inherit;
mergeinfo_ctx->include_descendants = include_descendants;
- handler = apr_pcalloc(pool, sizeof(*handler));
+ xmlctx = svn_ra_serf__xml_context_create(mergeinfo_ttable,
+ NULL, mergeinfo_closed, NULL,
+ mergeinfo_ctx,
+ pool);
+ handler = svn_ra_serf__create_expat_handler(xmlctx, pool);
handler->method = "REPORT";
handler->path = path;
@@ -275,34 +227,14 @@ svn_ra_serf__get_mergeinfo(svn_ra_session_t *ra_session,
handler->body_delegate_baton = mergeinfo_ctx;
handler->body_type = "text/xml";
- parser_ctx = apr_pcalloc(pool, sizeof(*parser_ctx));
-
- parser_ctx->pool = pool;
- parser_ctx->user_data = mergeinfo_ctx;
- parser_ctx->start = start_element;
- parser_ctx->end = end_element;
- parser_ctx->cdata = cdata_handler;
- parser_ctx->done = &mergeinfo_ctx->done;
- parser_ctx->status_code = &status_code;
-
- handler->response_handler = svn_ra_serf__handle_xml_parser;
- handler->response_baton = parser_ctx;
-
- svn_ra_serf__request_create(handler);
-
- err = svn_ra_serf__context_run_wait(&mergeinfo_ctx->done, session, pool);
-
- err2 = svn_ra_serf__error_on_status(status_code, handler->path,
- parser_ctx->location);
- if (err2)
- {
- svn_error_clear(err);
- return err2;
- }
+ err = svn_ra_serf__context_run_one(handler, pool);
- SVN_ERR(err);
+ SVN_ERR(svn_error_compose_create(
+ svn_ra_serf__error_on_status(handler->sline, handler->path,
+ handler->location),
+ err));
- if (mergeinfo_ctx->done && apr_hash_count(mergeinfo_ctx->result_catalog))
+ if (handler->done && apr_hash_count(mergeinfo_ctx->result_catalog))
*catalog = mergeinfo_ctx->result_catalog;
return SVN_NO_ERROR;
diff --git a/subversion/libsvn_ra_serf/options.c b/subversion/libsvn_ra_serf/options.c
index 8bdc8fd..5389b04 100644
--- a/subversion/libsvn_ra_serf/options.c
+++ b/subversion/libsvn_ra_serf/options.c
@@ -28,10 +28,12 @@
#include <serf.h>
#include "svn_dirent_uri.h"
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_ra.h"
#include "svn_dav.h"
#include "svn_xml.h"
+#include "svn_ctype.h"
#include "../libsvn_ra/ra_loader.h"
#include "svn_private_config.h"
@@ -48,167 +50,68 @@
/*
* This enum represents the current state of our XML parsing for an OPTIONS.
*/
-typedef enum options_state_e {
+enum options_state_e {
+ INITIAL = 0,
OPTIONS,
ACTIVITY_COLLECTION,
HREF
-} options_state_e;
-
-typedef struct options_state_list_t {
- /* The current state that we are in now. */
- options_state_e state;
-
- /* The previous state we were in. */
- struct options_state_list_t *prev;
-} options_state_list_t;
+};
-struct svn_ra_serf__options_context_t {
+typedef struct options_context_t {
/* pool to allocate memory from */
apr_pool_t *pool;
- const char *attr_val;
- apr_size_t attr_val_len;
- svn_boolean_t collect_cdata;
-
- /* Current state we're in */
- options_state_list_t *state;
- options_state_list_t *free_state;
-
- /* HTTP Status code */
- int status_code;
-
- /* are we done? */
- svn_boolean_t done;
+ /* Have we extracted options values from the headers already? */
+ svn_boolean_t headers_processed;
svn_ra_serf__session_t *session;
svn_ra_serf__connection_t *conn;
+ svn_ra_serf__handler_t *handler;
- const char *path;
+ svn_ra_serf__response_handler_t inner_handler;
+ void *inner_baton;
const char *activity_collection;
svn_revnum_t youngest_rev;
- serf_response_acceptor_t acceptor;
- serf_response_handler_t handler;
- svn_ra_serf__xml_parser_t *parser_ctx;
+} options_context_t;
-};
+#define D_ "DAV:"
+#define S_ SVN_XML_NAMESPACE
+static const svn_ra_serf__xml_transition_t options_ttable[] = {
+ { INITIAL, D_, "options-response", OPTIONS,
+ FALSE, { NULL }, FALSE },
-static void
-push_state(svn_ra_serf__options_context_t *options_ctx, options_state_e state)
-{
- options_state_list_t *new_state;
+ { OPTIONS, D_, "activity-collection-set", ACTIVITY_COLLECTION,
+ FALSE, { NULL }, FALSE },
- if (!options_ctx->free_state)
- {
- new_state = apr_palloc(options_ctx->pool, sizeof(*options_ctx->state));
- }
- else
- {
- new_state = options_ctx->free_state;
- options_ctx->free_state = options_ctx->free_state->prev;
- }
- new_state->state = state;
-
- /* Add it to the state chain. */
- new_state->prev = options_ctx->state;
- options_ctx->state = new_state;
-}
-
-static void pop_state(svn_ra_serf__options_context_t *options_ctx)
-{
- options_state_list_t *free_state;
- free_state = options_ctx->state;
- /* advance the current state */
- options_ctx->state = options_ctx->state->prev;
- free_state->prev = options_ctx->free_state;
- options_ctx->free_state = free_state;
-}
-
-static svn_error_t *
-start_options(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name,
- const char **attrs)
-{
- svn_ra_serf__options_context_t *options_ctx = userData;
+ { ACTIVITY_COLLECTION, D_, "href", HREF,
+ TRUE, { NULL }, TRUE },
- if (!options_ctx->state && strcmp(name.name, "options-response") == 0)
- {
- push_state(options_ctx, OPTIONS);
- }
- else if (!options_ctx->state)
- {
- /* Nothing to do. */
- return SVN_NO_ERROR;
- }
- else if (options_ctx->state->state == OPTIONS &&
- strcmp(name.name, "activity-collection-set") == 0)
- {
- push_state(options_ctx, ACTIVITY_COLLECTION);
- }
- else if (options_ctx->state->state == ACTIVITY_COLLECTION &&
- strcmp(name.name, "href") == 0)
- {
- options_ctx->collect_cdata = TRUE;
- push_state(options_ctx, HREF);
- }
+ { 0 }
+};
- return SVN_NO_ERROR;
-}
+/* Conforms to svn_ra_serf__xml_closed_t */
static svn_error_t *
-end_options(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name)
+options_closed(svn_ra_serf__xml_estate_t *xes,
+ void *baton,
+ int leaving_state,
+ const svn_string_t *cdata,
+ apr_hash_t *attrs,
+ apr_pool_t *scratch_pool)
{
- svn_ra_serf__options_context_t *options_ctx = userData;
- options_state_list_t *cur_state;
-
- if (!options_ctx->state)
- {
- return SVN_NO_ERROR;
- }
+ options_context_t *opt_ctx = baton;
- cur_state = options_ctx->state;
+ SVN_ERR_ASSERT(leaving_state == HREF);
+ SVN_ERR_ASSERT(cdata != NULL);
- if (cur_state->state == OPTIONS &&
- strcmp(name.name, "options-response") == 0)
- {
- pop_state(options_ctx);
- }
- else if (cur_state->state == ACTIVITY_COLLECTION &&
- strcmp(name.name, "activity-collection-set") == 0)
- {
- pop_state(options_ctx);
- }
- else if (cur_state->state == HREF &&
- strcmp(name.name, "href") == 0)
- {
- options_ctx->collect_cdata = FALSE;
- options_ctx->activity_collection =
- svn_urlpath__canonicalize(options_ctx->attr_val, options_ctx->pool);
- pop_state(options_ctx);
- }
+ opt_ctx->activity_collection = svn_urlpath__canonicalize(cdata->data,
+ opt_ctx->pool);
return SVN_NO_ERROR;
}
-static svn_error_t *
-cdata_options(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- const char *data,
- apr_size_t len)
-{
- svn_ra_serf__options_context_t *ctx = userData;
- if (ctx->collect_cdata)
- {
- svn_ra_serf__expand_string(&ctx->attr_val, &ctx->attr_val_len,
- data, len, ctx->pool);
- }
-
- return SVN_NO_ERROR;
-}
static svn_error_t *
create_options_body(serf_bucket_t **body_bkt,
@@ -229,47 +132,17 @@ create_options_body(serf_bucket_t **body_bkt,
return SVN_NO_ERROR;
}
-svn_boolean_t*
-svn_ra_serf__get_options_done_ptr(svn_ra_serf__options_context_t *ctx)
-{
- return &ctx->done;
-}
-
-const char *
-svn_ra_serf__options_get_activity_collection(svn_ra_serf__options_context_t *ctx)
-{
- return ctx->activity_collection;
-}
-
-svn_revnum_t
-svn_ra_serf__options_get_youngest_rev(svn_ra_serf__options_context_t *ctx)
-{
- return ctx->youngest_rev;
-}
-
-/* Context for both options_response_handler() and capabilities callback. */
-struct options_response_ctx_t {
- /* Baton for __handle_xml_parser() */
- svn_ra_serf__xml_parser_t *parser_ctx;
-
- /* Session into which we'll store server capabilities */
- svn_ra_serf__session_t *session;
-
- /* For temporary work only. */
- apr_pool_t *pool;
-};
-
/* We use these static pointers so we can employ pointer comparison
* of our capabilities hash members instead of strcmp()ing all over
* the place.
*/
/* Both server and repository support the capability. */
-static const char *capability_yes = "yes";
+static const char *const capability_yes = "yes";
/* Either server or repository does not support the capability. */
-static const char *capability_no = "no";
+static const char *const capability_no = "no";
/* Server supports the capability, but don't yet know if repository does. */
-static const char *capability_server_yes = "server-yes";
+static const char *const capability_server_yes = "server-yes";
/* This implements serf_bucket_headers_do_callback_fn_t.
@@ -279,7 +152,8 @@ capabilities_headers_iterator_callback(void *baton,
const char *key,
const char *val)
{
- struct options_response_ctx_t *orc = baton;
+ options_context_t *opt_ctx = baton;
+ svn_ra_serf__session_t *session = opt_ctx->session;
if (svn_cstring_casecmp(key, "dav") == 0)
{
@@ -287,7 +161,8 @@ capabilities_headers_iterator_callback(void *baton,
DAV: version-control,checkout,working-resource
DAV: merge,baseline,activity,version-controlled-collection
DAV: http://subversion.tigris.org/xmlns/dav/svn/depth */
- apr_array_header_t *vals = svn_cstring_split(val, ",", TRUE, orc->pool);
+ apr_array_header_t *vals = svn_cstring_split(val, ",", TRUE,
+ opt_ctx->pool);
/* Right now we only have a few capabilities to detect, so just
seek for them directly. This could be written slightly more
@@ -296,49 +171,86 @@ capabilities_headers_iterator_callback(void *baton,
if (svn_cstring_match_list(SVN_DAV_NS_DAV_SVN_DEPTH, vals))
{
- apr_hash_set(orc->session->capabilities, SVN_RA_CAPABILITY_DEPTH,
- APR_HASH_KEY_STRING, capability_yes);
+ svn_hash_sets(session->capabilities,
+ SVN_RA_CAPABILITY_DEPTH, capability_yes);
}
if (svn_cstring_match_list(SVN_DAV_NS_DAV_SVN_MERGEINFO, vals))
{
/* The server doesn't know what repository we're referring
to, so it can't just say capability_yes. */
- apr_hash_set(orc->session->capabilities, SVN_RA_CAPABILITY_MERGEINFO,
- APR_HASH_KEY_STRING, capability_server_yes);
+ if (!svn_hash_gets(session->capabilities,
+ SVN_RA_CAPABILITY_MERGEINFO))
+ {
+ svn_hash_sets(session->capabilities, SVN_RA_CAPABILITY_MERGEINFO,
+ capability_server_yes);
+ }
}
if (svn_cstring_match_list(SVN_DAV_NS_DAV_SVN_LOG_REVPROPS, vals))
{
- apr_hash_set(orc->session->capabilities,
- SVN_RA_CAPABILITY_LOG_REVPROPS,
- APR_HASH_KEY_STRING, capability_yes);
+ svn_hash_sets(session->capabilities,
+ SVN_RA_CAPABILITY_LOG_REVPROPS, capability_yes);
}
if (svn_cstring_match_list(SVN_DAV_NS_DAV_SVN_ATOMIC_REVPROPS, vals))
{
- apr_hash_set(orc->session->capabilities,
- SVN_RA_CAPABILITY_ATOMIC_REVPROPS,
- APR_HASH_KEY_STRING, capability_yes);
+ svn_hash_sets(session->capabilities,
+ SVN_RA_CAPABILITY_ATOMIC_REVPROPS, capability_yes);
}
if (svn_cstring_match_list(SVN_DAV_NS_DAV_SVN_PARTIAL_REPLAY, vals))
{
- apr_hash_set(orc->session->capabilities,
- SVN_RA_CAPABILITY_PARTIAL_REPLAY,
- APR_HASH_KEY_STRING, capability_yes);
+ svn_hash_sets(session->capabilities,
+ SVN_RA_CAPABILITY_PARTIAL_REPLAY, capability_yes);
+ }
+ if (svn_cstring_match_list(SVN_DAV_NS_DAV_SVN_INHERITED_PROPS, vals))
+ {
+ svn_hash_sets(session->capabilities,
+ SVN_RA_CAPABILITY_INHERITED_PROPS, capability_yes);
+ }
+ if (svn_cstring_match_list(SVN_DAV_NS_DAV_SVN_REVERSE_FILE_REVS,
+ vals))
+ {
+ svn_hash_sets(session->capabilities,
+ SVN_RA_CAPABILITY_GET_FILE_REVS_REVERSE,
+ capability_yes);
+ }
+ if (svn_cstring_match_list(SVN_DAV_NS_DAV_SVN_EPHEMERAL_TXNPROPS, vals))
+ {
+ svn_hash_sets(session->capabilities,
+ SVN_RA_CAPABILITY_EPHEMERAL_TXNPROPS, capability_yes);
+ }
+ if (svn_cstring_match_list(SVN_DAV_NS_DAV_SVN_INLINE_PROPS, vals))
+ {
+ session->supports_inline_props = TRUE;
+ }
+ if (svn_cstring_match_list(SVN_DAV_NS_DAV_SVN_REPLAY_REV_RESOURCE, vals))
+ {
+ session->supports_rev_rsrc_replay = TRUE;
}
}
/* SVN-specific headers -- if present, server supports HTTP protocol v2 */
- else if (strncmp(key, "SVN", 3) == 0)
+ else if (!svn_ctype_casecmp(key[0], 'S')
+ && !svn_ctype_casecmp(key[1], 'V')
+ && !svn_ctype_casecmp(key[2], 'N'))
{
+ /* If we've not yet seen any information about supported POST
+ requests, we'll initialize the list/hash with "create-txn"
+ (which we know is supported by virtue of the server speaking
+ HTTPv2 at all. */
+ if (! session->supported_posts)
+ {
+ session->supported_posts = apr_hash_make(session->pool);
+ apr_hash_set(session->supported_posts, "create-txn", 10, (void *)1);
+ }
+
if (svn_cstring_casecmp(key, SVN_DAV_ROOT_URI_HEADER) == 0)
{
- orc->session->repos_root = orc->session->session_url;
- orc->session->repos_root.path = apr_pstrdup(orc->session->pool, val);
- orc->session->repos_root_str =
+ session->repos_root = session->session_url;
+ session->repos_root.path =
+ (char *)svn_fspath__canonicalize(val, session->pool);
+ session->repos_root_str =
svn_urlpath__canonicalize(
- apr_uri_unparse(orc->session->pool,
- &orc->session->repos_root,
- 0),
- orc->session->pool);
+ apr_uri_unparse(session->pool, &session->repos_root, 0),
+ session->pool);
}
else if (svn_cstring_casecmp(key, SVN_DAV_ME_RESOURCE_HEADER) == 0)
{
@@ -347,44 +259,73 @@ capabilities_headers_iterator_callback(void *baton,
if (!(ignore_v2_env_var
&& apr_strnatcasecmp(ignore_v2_env_var, "yes") == 0))
- orc->session->me_resource = apr_pstrdup(orc->session->pool, val);
+ session->me_resource = apr_pstrdup(session->pool, val);
#else
- orc->session->me_resource = apr_pstrdup(orc->session->pool, val);
+ session->me_resource = apr_pstrdup(session->pool, val);
#endif
}
else if (svn_cstring_casecmp(key, SVN_DAV_REV_STUB_HEADER) == 0)
{
- orc->session->rev_stub = apr_pstrdup(orc->session->pool, val);
+ session->rev_stub = apr_pstrdup(session->pool, val);
}
else if (svn_cstring_casecmp(key, SVN_DAV_REV_ROOT_STUB_HEADER) == 0)
{
- orc->session->rev_root_stub = apr_pstrdup(orc->session->pool, val);
+ session->rev_root_stub = apr_pstrdup(session->pool, val);
}
else if (svn_cstring_casecmp(key, SVN_DAV_TXN_STUB_HEADER) == 0)
{
- orc->session->txn_stub = apr_pstrdup(orc->session->pool, val);
+ session->txn_stub = apr_pstrdup(session->pool, val);
}
else if (svn_cstring_casecmp(key, SVN_DAV_TXN_ROOT_STUB_HEADER) == 0)
{
- orc->session->txn_root_stub = apr_pstrdup(orc->session->pool, val);
+ session->txn_root_stub = apr_pstrdup(session->pool, val);
}
else if (svn_cstring_casecmp(key, SVN_DAV_VTXN_STUB_HEADER) == 0)
{
- orc->session->vtxn_stub = apr_pstrdup(orc->session->pool, val);
+ session->vtxn_stub = apr_pstrdup(session->pool, val);
}
else if (svn_cstring_casecmp(key, SVN_DAV_VTXN_ROOT_STUB_HEADER) == 0)
{
- orc->session->vtxn_root_stub = apr_pstrdup(orc->session->pool, val);
+ session->vtxn_root_stub = apr_pstrdup(session->pool, val);
}
else if (svn_cstring_casecmp(key, SVN_DAV_REPOS_UUID_HEADER) == 0)
{
- orc->session->uuid = apr_pstrdup(orc->session->pool, val);
+ session->uuid = apr_pstrdup(session->pool, val);
}
else if (svn_cstring_casecmp(key, SVN_DAV_YOUNGEST_REV_HEADER) == 0)
{
- struct svn_ra_serf__options_context_t *user_data =
- orc->parser_ctx->user_data;
- user_data->youngest_rev = SVN_STR_TO_REV(val);
+ opt_ctx->youngest_rev = SVN_STR_TO_REV(val);
+ }
+ else if (svn_cstring_casecmp(key, SVN_DAV_ALLOW_BULK_UPDATES) == 0)
+ {
+ session->server_allows_bulk = apr_pstrdup(session->pool, val);
+ }
+ else if (svn_cstring_casecmp(key, SVN_DAV_SUPPORTED_POSTS_HEADER) == 0)
+ {
+ /* May contain multiple values, separated by commas. */
+ int i;
+ apr_array_header_t *vals = svn_cstring_split(val, ",", TRUE,
+ session->pool);
+
+ for (i = 0; i < vals->nelts; i++)
+ {
+ const char *post_val = APR_ARRAY_IDX(vals, i, const char *);
+
+ svn_hash_sets(session->supported_posts, post_val, (void *)1);
+ }
+ }
+ else if (svn_cstring_casecmp(key, SVN_DAV_REPOSITORY_MERGEINFO) == 0)
+ {
+ if (svn_cstring_casecmp(val, "yes") == 0)
+ {
+ svn_hash_sets(session->capabilities, SVN_RA_CAPABILITY_MERGEINFO,
+ capability_yes);
+ }
+ else if (svn_cstring_casecmp(val, "no") == 0)
+ {
+ svn_hash_sets(session->capabilities, SVN_RA_CAPABILITY_MERGEINFO,
+ capability_no);
+ }
}
}
@@ -393,7 +334,7 @@ capabilities_headers_iterator_callback(void *baton,
/* A custom serf_response_handler_t which is mostly a wrapper around
- svn_ra_serf__handle_xml_parser -- it just notices OPTIONS response
+ the expat-based response handler -- it just notices OPTIONS response
headers first, before handing off to the xml parser.
Implements svn_ra_serf__response_handler_t */
static svn_error_t *
@@ -402,86 +343,137 @@ options_response_handler(serf_request_t *request,
void *baton,
apr_pool_t *pool)
{
- struct options_response_ctx_t *orc = baton;
- serf_bucket_t *hdrs = serf_bucket_response_get_headers(response);
-
- /* Start out assuming all capabilities are unsupported. */
- apr_hash_set(orc->session->capabilities, SVN_RA_CAPABILITY_PARTIAL_REPLAY,
- APR_HASH_KEY_STRING, capability_no);
- apr_hash_set(orc->session->capabilities, SVN_RA_CAPABILITY_DEPTH,
- APR_HASH_KEY_STRING, capability_no);
- apr_hash_set(orc->session->capabilities, SVN_RA_CAPABILITY_MERGEINFO,
- APR_HASH_KEY_STRING, capability_no);
- apr_hash_set(orc->session->capabilities, SVN_RA_CAPABILITY_LOG_REVPROPS,
- APR_HASH_KEY_STRING, capability_no);
- apr_hash_set(orc->session->capabilities, SVN_RA_CAPABILITY_ATOMIC_REVPROPS,
- APR_HASH_KEY_STRING, capability_no);
-
- /* Then see which ones we can discover. */
- serf_bucket_headers_do(hdrs, capabilities_headers_iterator_callback, orc);
-
- /* Execute the 'real' response handler to XML-parse the repsonse body. */
- return svn_ra_serf__handle_xml_parser(request, response,
- orc->parser_ctx, pool);
+ options_context_t *opt_ctx = baton;
+
+ if (!opt_ctx->headers_processed)
+ {
+ svn_ra_serf__session_t *session = opt_ctx->session;
+ serf_bucket_t *hdrs = serf_bucket_response_get_headers(response);
+
+ /* Start out assuming all capabilities are unsupported. */
+ svn_hash_sets(session->capabilities, SVN_RA_CAPABILITY_PARTIAL_REPLAY,
+ capability_no);
+ svn_hash_sets(session->capabilities, SVN_RA_CAPABILITY_DEPTH,
+ capability_no);
+ svn_hash_sets(session->capabilities, SVN_RA_CAPABILITY_MERGEINFO,
+ NULL);
+ svn_hash_sets(session->capabilities, SVN_RA_CAPABILITY_LOG_REVPROPS,
+ capability_no);
+ svn_hash_sets(session->capabilities, SVN_RA_CAPABILITY_ATOMIC_REVPROPS,
+ capability_no);
+ svn_hash_sets(session->capabilities, SVN_RA_CAPABILITY_INHERITED_PROPS,
+ capability_no);
+ svn_hash_sets(session->capabilities, SVN_RA_CAPABILITY_EPHEMERAL_TXNPROPS,
+ capability_no);
+ svn_hash_sets(session->capabilities, SVN_RA_CAPABILITY_GET_FILE_REVS_REVERSE,
+ capability_no);
+
+ /* Then see which ones we can discover. */
+ serf_bucket_headers_do(hdrs, capabilities_headers_iterator_callback,
+ opt_ctx);
+
+ /* Assume mergeinfo capability unsupported, if didn't recieve information
+ about server or repository mergeinfo capability. */
+ if (!svn_hash_gets(session->capabilities, SVN_RA_CAPABILITY_MERGEINFO))
+ svn_hash_sets(session->capabilities, SVN_RA_CAPABILITY_MERGEINFO,
+ capability_no);
+
+ opt_ctx->headers_processed = TRUE;
+ }
+
+ /* Execute the 'real' response handler to XML-parse the response body. */
+ return opt_ctx->inner_handler(request, response, opt_ctx->inner_baton, pool);
}
-svn_error_t *
-svn_ra_serf__create_options_req(svn_ra_serf__options_context_t **opt_ctx,
- svn_ra_serf__session_t *session,
- svn_ra_serf__connection_t *conn,
- const char *path,
- apr_pool_t *pool)
+static svn_error_t *
+create_options_req(options_context_t **opt_ctx,
+ svn_ra_serf__session_t *session,
+ svn_ra_serf__connection_t *conn,
+ apr_pool_t *pool)
{
- svn_ra_serf__options_context_t *new_ctx;
+ options_context_t *new_ctx;
+ svn_ra_serf__xml_context_t *xmlctx;
svn_ra_serf__handler_t *handler;
- svn_ra_serf__xml_parser_t *parser_ctx;
- struct options_response_ctx_t *options_response_ctx;
new_ctx = apr_pcalloc(pool, sizeof(*new_ctx));
-
new_ctx->pool = pool;
-
- new_ctx->path = path;
- new_ctx->youngest_rev = SVN_INVALID_REVNUM;
-
new_ctx->session = session;
new_ctx->conn = conn;
- handler = apr_pcalloc(pool, sizeof(*handler));
+ new_ctx->youngest_rev = SVN_INVALID_REVNUM;
+
+ xmlctx = svn_ra_serf__xml_context_create(options_ttable,
+ NULL, options_closed, NULL,
+ new_ctx,
+ pool);
+ handler = svn_ra_serf__create_expat_handler(xmlctx, pool);
handler->method = "OPTIONS";
- handler->path = path;
+ handler->path = session->session_url.path;
handler->body_delegate = create_options_body;
handler->body_type = "text/xml";
handler->conn = conn;
handler->session = session;
- parser_ctx = apr_pcalloc(pool, sizeof(*parser_ctx));
+ new_ctx->handler = handler;
+
+ new_ctx->inner_handler = handler->response_handler;
+ new_ctx->inner_baton = handler->response_baton;
+ handler->response_handler = options_response_handler;
+ handler->response_baton = new_ctx;
+
+ *opt_ctx = new_ctx;
- parser_ctx->pool = pool;
- parser_ctx->user_data = new_ctx;
- parser_ctx->start = start_options;
- parser_ctx->end = end_options;
- parser_ctx->cdata = cdata_options;
- parser_ctx->done = &new_ctx->done;
- parser_ctx->status_code = &new_ctx->status_code;
+ return SVN_NO_ERROR;
+}
- options_response_ctx = apr_pcalloc(pool, sizeof(*options_response_ctx));
- options_response_ctx->parser_ctx = parser_ctx;
- options_response_ctx->session = session;
- options_response_ctx->pool = pool;
- handler->response_handler = options_response_handler;
- handler->response_baton = options_response_ctx;
+svn_error_t *
+svn_ra_serf__v2_get_youngest_revnum(svn_revnum_t *youngest,
+ svn_ra_serf__connection_t *conn,
+ apr_pool_t *scratch_pool)
+{
+ svn_ra_serf__session_t *session = conn->session;
+ options_context_t *opt_ctx;
- svn_ra_serf__request_create(handler);
+ SVN_ERR_ASSERT(SVN_RA_SERF__HAVE_HTTPV2_SUPPORT(session));
- new_ctx->parser_ctx = parser_ctx;
+ SVN_ERR(create_options_req(&opt_ctx, session, conn, scratch_pool));
+ SVN_ERR(svn_ra_serf__context_run_one(opt_ctx->handler, scratch_pool));
+ SVN_ERR(svn_ra_serf__error_on_status(opt_ctx->handler->sline,
+ opt_ctx->handler->path,
+ opt_ctx->handler->location));
- *opt_ctx = new_ctx;
+ *youngest = opt_ctx->youngest_rev;
+ SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(*youngest));
+
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_ra_serf__v1_get_activity_collection(const char **activity_url,
+ svn_ra_serf__connection_t *conn,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_ra_serf__session_t *session = conn->session;
+ options_context_t *opt_ctx;
+
+ SVN_ERR_ASSERT(!SVN_RA_SERF__HAVE_HTTPV2_SUPPORT(session));
+
+ SVN_ERR(create_options_req(&opt_ctx, session, conn, scratch_pool));
+ SVN_ERR(svn_ra_serf__context_run_one(opt_ctx->handler, scratch_pool));
+
+ SVN_ERR(svn_ra_serf__error_on_status(opt_ctx->handler->sline,
+ opt_ctx->handler->path,
+ opt_ctx->handler->location));
+
+ *activity_url = apr_pstrdup(result_pool, opt_ctx->activity_collection);
return SVN_NO_ERROR;
+
}
@@ -493,33 +485,100 @@ svn_ra_serf__exchange_capabilities(svn_ra_serf__session_t *serf_sess,
const char **corrected_url,
apr_pool_t *pool)
{
- svn_ra_serf__options_context_t *opt_ctx;
+ options_context_t *opt_ctx;
svn_error_t *err;
/* This routine automatically fills in serf_sess->capabilities */
- SVN_ERR(svn_ra_serf__create_options_req(&opt_ctx, serf_sess,
- serf_sess->conns[0],
- serf_sess->session_url.path, pool));
+ SVN_ERR(create_options_req(&opt_ctx, serf_sess, serf_sess->conns[0], pool));
- err = svn_ra_serf__context_run_wait(
- svn_ra_serf__get_options_done_ptr(opt_ctx), serf_sess, pool);
+ err = svn_ra_serf__context_run_one(opt_ctx->handler, pool);
/* If our caller cares about server redirections, and our response
carries such a thing, report as much. We'll disregard ERR --
it's most likely just a complaint about the response body not
successfully parsing as XML or somesuch. */
- if (corrected_url && (opt_ctx->status_code == 301))
+ if (corrected_url && (opt_ctx->handler->sline.code == 301))
{
svn_error_clear(err);
- *corrected_url = opt_ctx->parser_ctx->location;
+ *corrected_url = opt_ctx->handler->location;
return SVN_NO_ERROR;
}
- return svn_error_compose_create(
- svn_ra_serf__error_on_status(opt_ctx->status_code,
- serf_sess->session_url.path,
- opt_ctx->parser_ctx->location),
- err);
+ SVN_ERR(svn_error_compose_create(
+ svn_ra_serf__error_on_status(opt_ctx->handler->sline,
+ serf_sess->session_url.path,
+ opt_ctx->handler->location),
+ err));
+
+ /* Opportunistically cache any reported activity URL. (We don't
+ want to have to ask for this again later, potentially against an
+ unreadable commit anchor URL.) */
+ if (opt_ctx->activity_collection)
+ {
+ serf_sess->activity_collection_url =
+ apr_pstrdup(serf_sess->pool, opt_ctx->activity_collection);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
+static svn_error_t *
+create_simple_options_body(serf_bucket_t **body_bkt,
+ void *baton,
+ serf_bucket_alloc_t *alloc,
+ apr_pool_t *pool)
+{
+ serf_bucket_t *body;
+ serf_bucket_t *s;
+
+ body = serf_bucket_aggregate_create(alloc);
+ svn_ra_serf__add_xml_header_buckets(body, alloc);
+
+ s = SERF_BUCKET_SIMPLE_STRING("<D:options xmlns:D=\"DAV:\" />", alloc);
+ serf_bucket_aggregate_append(body, s);
+
+ *body_bkt = body;
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_ra_serf__probe_proxy(svn_ra_serf__session_t *serf_sess,
+ apr_pool_t *scratch_pool)
+{
+ svn_ra_serf__handler_t *handler;
+
+ handler = apr_pcalloc(scratch_pool, sizeof(*handler));
+ handler->handler_pool = scratch_pool;
+ handler->method = "OPTIONS";
+ handler->path = serf_sess->session_url.path;
+ handler->conn = serf_sess->conns[0];
+ handler->session = serf_sess;
+
+ /* We don't care about the response body, so discard it. */
+ handler->response_handler = svn_ra_serf__handle_discard_body;
+
+ /* We need a simple body, in order to send it in chunked format. */
+ handler->body_delegate = create_simple_options_body;
+
+ /* No special headers. */
+
+ SVN_ERR(svn_ra_serf__context_run_one(handler, scratch_pool));
+ /* Some versions of nginx in reverse proxy mode will return 411. They want
+ a Content-Length header, rather than chunked requests. We can keep other
+ HTTP/1.1 features, but will disable the chunking. */
+ if (handler->sline.code == 411)
+ {
+ serf_sess->using_chunked_requests = FALSE;
+
+ return SVN_NO_ERROR;
+ }
+ SVN_ERR(svn_ra_serf__error_on_status(handler->sline,
+ handler->path,
+ handler->location));
+
+ return SVN_NO_ERROR;
}
@@ -539,21 +598,16 @@ svn_ra_serf__has_capability(svn_ra_session_t *ra_session,
return SVN_NO_ERROR;
}
- cap_result = apr_hash_get(serf_sess->capabilities,
- capability,
- APR_HASH_KEY_STRING);
+ cap_result = svn_hash_gets(serf_sess->capabilities, capability);
/* If any capability is unknown, they're all unknown, so ask. */
if (cap_result == NULL)
SVN_ERR(svn_ra_serf__exchange_capabilities(serf_sess, NULL, pool));
/* Try again, now that we've fetched the capabilities. */
- cap_result = apr_hash_get(serf_sess->capabilities,
- capability, APR_HASH_KEY_STRING);
+ cap_result = svn_hash_gets(serf_sess->capabilities, capability);
- /* Some capabilities depend on the repository as well as the server.
- NOTE: svn_ra_neon__has_capability() has a very similar code block. If
- you change something here, check there as well. */
+ /* Some capabilities depend on the repository as well as the server. */
if (cap_result == capability_server_yes)
{
if (strcmp(capability, SVN_RA_CAPABILITY_MERGEINFO) == 0)
@@ -597,9 +651,8 @@ svn_ra_serf__has_capability(svn_ra_session_t *ra_session,
else
cap_result = capability_yes;
- apr_hash_set(serf_sess->capabilities,
- SVN_RA_CAPABILITY_MERGEINFO, APR_HASH_KEY_STRING,
- cap_result);
+ svn_hash_sets(serf_sess->capabilities,
+ SVN_RA_CAPABILITY_MERGEINFO, cap_result);
}
else
{
diff --git a/subversion/libsvn_ra_serf/property.c b/subversion/libsvn_ra_serf/property.c
index 727f78b..586d38f 100644
--- a/subversion/libsvn_ra_serf/property.c
+++ b/subversion/libsvn_ra_serf/property.c
@@ -25,6 +25,7 @@
#include <serf.h>
+#include "svn_hash.h"
#include "svn_path.h"
#include "svn_base64.h"
#include "svn_xml.h"
@@ -33,6 +34,7 @@
#include "private/svn_dav_protocol.h"
#include "private/svn_fspath.h"
+#include "private/svn_string_private.h"
#include "svn_private_config.h"
#include "ra_serf.h"
@@ -40,31 +42,23 @@
/* Our current parsing state we're in for the PROPFIND response. */
typedef enum prop_state_e {
- NONE = 0,
+ INITIAL = 0,
+ MULTISTATUS,
RESPONSE,
+ HREF,
+ PROPSTAT,
+ STATUS,
PROP,
- PROPVAL
+ PROPVAL,
+ COLLECTION,
+ HREF_VALUE
} prop_state_e;
-typedef struct prop_info_t {
- apr_pool_t *pool;
-
- /* Current ns, attribute name, and value of the property we're parsing */
- const char *ns;
-
- const char *name;
-
- const char *val;
- apr_size_t val_len;
-
- const char *encoding;
-
-} prop_info_t;
/*
* This structure represents a pending PROPFIND response.
*/
-struct svn_ra_serf__propfind_context_t {
+typedef struct propfind_context_t {
/* pool to issue allocations from */
apr_pool_t *pool;
@@ -89,31 +83,267 @@ struct svn_ra_serf__propfind_context_t {
/* hash table that will be updated with the properties
*
- * This can be shared between multiple svn_ra_serf__propfind_context_t
+ * This can be shared between multiple propfind_context_t
* structures
*/
apr_hash_t *ret_props;
- /* If we're dealing with a Depth: 1 response,
- * we may be dealing with multiple paths.
+ /* hash table containing all the properties associated with the
+ * "current" <propstat> tag. These will get copied into RET_PROPS
+ * if the status code similarly associated indicates that they are
+ * "good"; otherwise, they'll get discarded.
*/
- const char *current_path;
-
- /* Returned status code. */
- int status_code;
-
- /* Are we done issuing the PROPFIND? */
- svn_boolean_t done;
-
- /* Context from XML stream */
- svn_ra_serf__xml_parser_t *parser_ctx;
+ apr_hash_t *ps_props;
/* If not-NULL, add us to this list when we're done. */
svn_ra_serf__list_t **done_list;
svn_ra_serf__list_t done_item;
+
+} propfind_context_t;
+
+
+#define D_ "DAV:"
+#define S_ SVN_XML_NAMESPACE
+static const svn_ra_serf__xml_transition_t propfind_ttable[] = {
+ { INITIAL, D_, "multistatus", MULTISTATUS,
+ FALSE, { NULL }, TRUE },
+
+ { MULTISTATUS, D_, "response", RESPONSE,
+ FALSE, { NULL }, FALSE },
+
+ { RESPONSE, D_, "href", HREF,
+ TRUE, { NULL }, TRUE },
+
+ { RESPONSE, D_, "propstat", PROPSTAT,
+ FALSE, { NULL }, TRUE },
+
+ { PROPSTAT, D_, "status", STATUS,
+ TRUE, { NULL }, TRUE },
+
+ { PROPSTAT, D_, "prop", PROP,
+ FALSE, { NULL }, FALSE },
+
+ { PROP, "*", "*", PROPVAL,
+ TRUE, { "?V:encoding", NULL }, TRUE },
+
+ { PROPVAL, D_, "collection", COLLECTION,
+ FALSE, { NULL }, TRUE },
+
+ { PROPVAL, D_, "href", HREF_VALUE,
+ TRUE, { NULL }, TRUE },
+
+ { 0 }
};
+
+/* Return the HTTP status code contained in STATUS_LINE, or 0 if
+ there's a problem parsing it. */
+static int parse_status_code(const char *status_line)
+{
+ /* STATUS_LINE should be of form: "HTTP/1.1 200 OK" */
+ if (status_line[0] == 'H' &&
+ status_line[1] == 'T' &&
+ status_line[2] == 'T' &&
+ status_line[3] == 'P' &&
+ status_line[4] == '/' &&
+ (status_line[5] >= '0' && status_line[5] <= '9') &&
+ status_line[6] == '.' &&
+ (status_line[7] >= '0' && status_line[7] <= '9') &&
+ status_line[8] == ' ')
+ {
+ char *reason;
+
+ return apr_strtoi64(status_line + 8, &reason, 10);
+ }
+ return 0;
+}
+
+
+/* Conforms to svn_ra_serf__path_rev_walker_t */
+static svn_error_t *
+copy_into_ret_props(void *baton,
+ const char *path, apr_ssize_t path_len,
+ const char *ns, apr_ssize_t ns_len,
+ const char *name, apr_ssize_t name_len,
+ const svn_string_t *val,
+ apr_pool_t *pool)
+{
+ propfind_context_t *ctx = baton;
+
+ svn_ra_serf__set_ver_prop(ctx->ret_props, path, ctx->rev, ns, name,
+ val, ctx->pool);
+ return SVN_NO_ERROR;
+}
+
+
+/* Conforms to svn_ra_serf__xml_opened_t */
+static svn_error_t *
+propfind_opened(svn_ra_serf__xml_estate_t *xes,
+ void *baton,
+ int entered_state,
+ const svn_ra_serf__dav_props_t *tag,
+ apr_pool_t *scratch_pool)
+{
+ propfind_context_t *ctx = baton;
+
+ if (entered_state == PROPVAL)
+ {
+ svn_ra_serf__xml_note(xes, PROPVAL, "ns", tag->namespace);
+ svn_ra_serf__xml_note(xes, PROPVAL, "name", tag->name);
+ }
+ else if (entered_state == PROPSTAT)
+ {
+ ctx->ps_props = apr_hash_make(ctx->pool);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
+/* Conforms to svn_ra_serf__xml_closed_t */
+static svn_error_t *
+propfind_closed(svn_ra_serf__xml_estate_t *xes,
+ void *baton,
+ int leaving_state,
+ const svn_string_t *cdata,
+ apr_hash_t *attrs,
+ apr_pool_t *scratch_pool)
+{
+ propfind_context_t *ctx = baton;
+
+ if (leaving_state == MULTISTATUS)
+ {
+ /* We've gathered all the data from the reponse. Add this item
+ onto the "done list". External callers will then know this
+ request has been completed (tho stray response bytes may still
+ arrive). */
+ if (ctx->done_list)
+ {
+ ctx->done_item.data = ctx->handler;
+ ctx->done_item.next = *ctx->done_list;
+ *ctx->done_list = &ctx->done_item;
+ }
+ }
+ else if (leaving_state == HREF)
+ {
+ const char *path;
+ const svn_string_t *val_str;
+
+ if (strcmp(ctx->depth, "1") == 0)
+ path = svn_urlpath__canonicalize(cdata->data, scratch_pool);
+ else
+ path = ctx->path;
+
+ svn_ra_serf__xml_note(xes, RESPONSE, "path", path);
+
+ /* Copy the value into the right pool, then save the HREF. */
+ val_str = svn_string_dup(cdata, ctx->pool);
+ svn_ra_serf__set_ver_prop(ctx->ret_props,
+ path, ctx->rev, D_, "href", val_str,
+ ctx->pool);
+ }
+ else if (leaving_state == COLLECTION)
+ {
+ svn_ra_serf__xml_note(xes, PROPVAL, "altvalue", "collection");
+ }
+ else if (leaving_state == HREF_VALUE)
+ {
+ svn_ra_serf__xml_note(xes, PROPVAL, "altvalue", cdata->data);
+ }
+ else if (leaving_state == STATUS)
+ {
+ /* Parse the status field, and remember if this is a property
+ that we wish to ignore. (Typically, if it's not a 200, the
+ status will be 404 to indicate that a property we
+ specifically requested from the server doesn't exist.) */
+ int status = parse_status_code(cdata->data);
+ if (status != 200)
+ svn_ra_serf__xml_note(xes, PROPSTAT, "ignore-prop", "*");
+ }
+ else if (leaving_state == PROPVAL)
+ {
+ const char *encoding = svn_hash_gets(attrs, "V:encoding");
+ const svn_string_t *val_str;
+ apr_hash_t *gathered;
+ const char *path;
+ const char *ns;
+ const char *name;
+ const char *altvalue;
+
+ if (encoding)
+ {
+ if (strcmp(encoding, "base64") != 0)
+ return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA,
+ NULL,
+ _("Got unrecognized encoding '%s'"),
+ encoding);
+
+ /* Decode into the right pool. */
+ val_str = svn_base64_decode_string(cdata, ctx->pool);
+ }
+ else
+ {
+ /* Copy into the right pool. */
+ val_str = svn_string_dup(cdata, ctx->pool);
+ }
+
+ /* The current path sits on the RESPONSE state. Gather up all the
+ state from this PROPVAL to the (grandparent) RESPONSE state,
+ and grab the path from there.
+
+ Now, it would be nice if we could, at this point, know that
+ the status code for this property indicated a problem -- then
+ we could simply bail out here and ignore the property.
+ Sadly, though, we might get the status code *after* we get
+ the property value. So we'll carry on with our processing
+ here, setting the property and value as expected. Once we
+ know for sure the status code associate with the property,
+ we'll decide its fate. */
+ gathered = svn_ra_serf__xml_gather_since(xes, RESPONSE);
+
+ /* These will be dup'd into CTX->POOL, as necessary. */
+ path = svn_hash_gets(gathered, "path");
+ if (path == NULL)
+ path = ctx->path;
+
+ ns = svn_hash_gets(attrs, "ns");
+ name = apr_pstrdup(ctx->pool,
+ svn_hash_gets(attrs, "name"));
+
+ altvalue = svn_hash_gets(attrs, "altvalue");
+ if (altvalue != NULL)
+ val_str = svn_string_create(altvalue, ctx->pool);
+
+ svn_ra_serf__set_ver_prop(ctx->ps_props,
+ path, ctx->rev, ns, name, val_str,
+ ctx->pool);
+ }
+ else
+ {
+ apr_hash_t *gathered;
+
+ SVN_ERR_ASSERT(leaving_state == PROPSTAT);
+
+ gathered = svn_ra_serf__xml_gather_since(xes, PROPSTAT);
+
+ /* If we've squirreled away a note that says we want to ignore
+ these properties, we'll do so. Otherwise, we need to copy
+ them from the temporary hash into the ctx->ret_props hash. */
+ if (! svn_hash_gets(gathered, "ignore-prop"))
+ {
+ SVN_ERR(svn_ra_serf__walk_all_paths(ctx->ps_props, ctx->rev,
+ copy_into_ret_props, ctx,
+ scratch_pool));
+ }
+
+ ctx->ps_props = NULL;
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
const svn_string_t *
svn_ra_serf__get_ver_prop_string(apr_hash_t *props,
const char *path,
@@ -127,14 +357,14 @@ svn_ra_serf__get_ver_prop_string(apr_hash_t *props,
ver_props = apr_hash_get(props, &rev, sizeof(rev));
if (ver_props)
{
- path_props = apr_hash_get(ver_props, path, APR_HASH_KEY_STRING);
+ path_props = svn_hash_gets(ver_props, path);
if (path_props)
{
- ns_props = apr_hash_get(path_props, ns, APR_HASH_KEY_STRING);
+ ns_props = svn_hash_gets(path_props, ns);
if (ns_props)
{
- val = apr_hash_get(ns_props, name, APR_HASH_KEY_STRING);
+ val = svn_hash_gets(ns_props, name);
}
}
}
@@ -196,28 +426,28 @@ svn_ra_serf__set_ver_prop(apr_hash_t *props,
ver_props);
}
- path_props = apr_hash_get(ver_props, path, APR_HASH_KEY_STRING);
+ path_props = svn_hash_gets(ver_props, path);
if (!path_props)
{
path_props = apr_hash_make(pool);
path = apr_pstrdup(pool, path);
- apr_hash_set(ver_props, path, APR_HASH_KEY_STRING, path_props);
+ svn_hash_sets(ver_props, path, path_props);
/* todo: we know that we'll fail the next check, but fall through
* for now for simplicity's sake.
*/
}
- ns_props = apr_hash_get(path_props, ns, APR_HASH_KEY_STRING);
+ ns_props = svn_hash_gets(path_props, ns);
if (!ns_props)
{
ns_props = apr_hash_make(pool);
ns = apr_pstrdup(pool, ns);
- apr_hash_set(path_props, ns, APR_HASH_KEY_STRING, ns_props);
+ svn_hash_sets(path_props, ns, ns_props);
}
- apr_hash_set(ns_props, name, APR_HASH_KEY_STRING, val);
+ svn_hash_sets(ns_props, name, val);
}
void
@@ -230,205 +460,14 @@ svn_ra_serf__set_prop(apr_hash_t *props,
val, pool);
}
-static prop_info_t *
-push_state(svn_ra_serf__xml_parser_t *parser,
- svn_ra_serf__propfind_context_t *propfind,
- prop_state_e state)
-{
- svn_ra_serf__xml_push_state(parser, state);
-
- if (state == PROPVAL)
- {
- prop_info_t *info;
-
- info = apr_pcalloc(parser->state->pool, sizeof(*info));
- info->pool = parser->state->pool;
-
- parser->state->private = info;
- }
-
- return parser->state->private;
-}
-
-/*
- * Expat callback invoked on a start element tag for a PROPFIND response.
- */
-static svn_error_t *
-start_propfind(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name,
- const char **attrs)
-{
- svn_ra_serf__propfind_context_t *ctx = userData;
- prop_state_e state;
- prop_info_t *info;
-
- state = parser->state->current_state;
-
- if (state == NONE && strcmp(name.name, "response") == 0)
- {
- svn_ra_serf__xml_push_state(parser, RESPONSE);
- }
- else if (state == RESPONSE && strcmp(name.name, "href") == 0)
- {
- info = push_state(parser, ctx, PROPVAL);
- info->ns = name.namespace;
- info->name = apr_pstrdup(info->pool, name.name);
- }
- else if (state == RESPONSE && strcmp(name.name, "prop") == 0)
- {
- push_state(parser, ctx, PROP);
- }
- else if (state == PROP)
- {
- info = push_state(parser, ctx, PROPVAL);
- info->ns = name.namespace;
- info->name = apr_pstrdup(info->pool, name.name);
- info->encoding = apr_pstrdup(info->pool,
- svn_xml_get_attr_value("V:encoding", attrs));
- }
-
- return SVN_NO_ERROR;
-}
-
-/*
- * Expat callback invoked on an end element tag for a PROPFIND response.
- */
-static svn_error_t *
-end_propfind(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name)
-{
- svn_ra_serf__propfind_context_t *ctx = userData;
- prop_state_e state;
- prop_info_t *info;
-
- state = parser->state->current_state;
- info = parser->state->private;
-
- if (state == RESPONSE && strcmp(name.name, "response") == 0)
- {
- svn_ra_serf__xml_pop_state(parser);
- }
- else if (state == PROP && strcmp(name.name, "prop") == 0)
- {
- svn_ra_serf__xml_pop_state(parser);
- }
- else if (state == PROPVAL)
- {
- const char *ns, *pname, *val;
- svn_string_t *val_str;
-
- /* if we didn't see a CDATA element, we may want the tag name
- * as long as it isn't equivalent to the property name.
- */
- if (!info->val)
- {
- if (strcmp(info->name, name.name) != 0)
- {
- info->val = name.name;
- info->val_len = strlen(info->val);
- }
- else
- {
- info->val = "";
- info->val_len = 0;
- }
- }
-
- if (parser->state->prev->current_state == RESPONSE &&
- strcmp(name.name, "href") == 0)
- {
- if (strcmp(ctx->depth, "1") == 0)
- {
- ctx->current_path =
- svn_urlpath__canonicalize(info->val, ctx->pool);
- }
- else
- {
- ctx->current_path = ctx->path;
- }
- }
- else if (info->encoding)
- {
- if (strcmp(info->encoding, "base64") == 0)
- {
- svn_string_t encoded;
- const svn_string_t *decoded;
-
- encoded.data = info->val;
- encoded.len = info->val_len;
-
- decoded = svn_base64_decode_string(&encoded, parser->state->pool);
- info->val = decoded->data;
- info->val_len = decoded->len;
- }
- else
- {
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA,
- NULL,
- _("Got unrecognized encoding '%s'"),
- info->encoding);
- }
- }
-
- ns = apr_pstrdup(ctx->pool, info->ns);
- pname = apr_pstrdup(ctx->pool, info->name);
- val = apr_pmemdup(ctx->pool, info->val, info->val_len);
- val_str = svn_string_ncreate(val, info->val_len, ctx->pool);
-
- /* set the return props and update our cache too. */
- svn_ra_serf__set_ver_prop(ctx->ret_props,
- ctx->current_path, ctx->rev,
- ns, pname, val_str,
- ctx->pool);
-
- svn_ra_serf__xml_pop_state(parser);
- }
-
- return SVN_NO_ERROR;
-}
-
-/*
- * Expat callback invoked on CDATA elements in a PROPFIND response.
- *
- * This callback can be called multiple times.
- */
-static svn_error_t *
-cdata_propfind(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- const char *data,
- apr_size_t len)
-{
- svn_ra_serf__propfind_context_t *ctx = userData;
- prop_state_e state;
- prop_info_t *info;
-
- UNUSED_CTX(ctx);
-
- state = parser->state->current_state;
- info = parser->state->private;
-
- if (state == PROPVAL)
- {
- svn_ra_serf__expand_string(&info->val, &info->val_len, data, len,
- info->pool);
- }
-
- return SVN_NO_ERROR;
-}
static svn_error_t *
setup_propfind_headers(serf_bucket_t *headers,
void *setup_baton,
apr_pool_t *pool)
{
- svn_ra_serf__propfind_context_t *ctx = setup_baton;
+ propfind_context_t *ctx = setup_baton;
- if (ctx->conn->using_compression)
- {
- serf_bucket_headers_setn(headers, "Accept-Encoding", "gzip");
- }
serf_bucket_headers_setn(headers, "Depth", ctx->depth);
if (ctx->label)
{
@@ -447,7 +486,7 @@ create_propfind_body(serf_bucket_t **bkt,
serf_bucket_alloc_t *alloc,
apr_pool_t *pool)
{
- svn_ra_serf__propfind_context_t *ctx = setup_baton;
+ propfind_context_t *ctx = setup_baton;
serf_bucket_t *body_bkt, *tmp;
const svn_ra_serf__dav_props_t *prop;
@@ -487,7 +526,7 @@ create_propfind_body(serf_bucket_t **bkt,
}
/* If we're not doing an allprop, add <prop> tags. */
- if (requested_allprop == FALSE)
+ if (!requested_allprop)
{
tmp = SERF_BUCKET_SIMPLE_STRING_LEN("<prop>",
sizeof("<prop>")-1,
@@ -501,7 +540,7 @@ create_propfind_body(serf_bucket_t **bkt,
serf_bucket_aggregate_prepend(body_bkt, tmp);
- if (requested_allprop == FALSE)
+ if (!requested_allprop)
{
tmp = SERF_BUCKET_SIMPLE_STRING_LEN("</prop>",
sizeof("</prop>")-1,
@@ -520,7 +559,7 @@ create_propfind_body(serf_bucket_t **bkt,
svn_error_t *
-svn_ra_serf__deliver_props(svn_ra_serf__propfind_context_t **prop_ctx,
+svn_ra_serf__deliver_props(svn_ra_serf__handler_t **propfind_handler,
apr_hash_t *ret_props,
svn_ra_serf__session_t *sess,
svn_ra_serf__connection_t *conn,
@@ -531,9 +570,9 @@ svn_ra_serf__deliver_props(svn_ra_serf__propfind_context_t **prop_ctx,
svn_ra_serf__list_t **done_list,
apr_pool_t *pool)
{
- svn_ra_serf__propfind_context_t *new_prop_ctx;
+ propfind_context_t *new_prop_ctx;
svn_ra_serf__handler_t *handler;
- svn_ra_serf__xml_parser_t *parser_ctx;
+ svn_ra_serf__xml_context_t *xmlctx;
new_prop_ctx = apr_pcalloc(pool, sizeof(*new_prop_ctx));
@@ -542,7 +581,6 @@ svn_ra_serf__deliver_props(svn_ra_serf__propfind_context_t **prop_ctx,
new_prop_ctx->find_props = find_props;
new_prop_ctx->ret_props = ret_props;
new_prop_ctx->depth = depth;
- new_prop_ctx->done = FALSE;
new_prop_ctx->sess = sess;
new_prop_ctx->conn = conn;
new_prop_ctx->rev = rev;
@@ -557,7 +595,13 @@ svn_ra_serf__deliver_props(svn_ra_serf__propfind_context_t **prop_ctx,
new_prop_ctx->label = NULL;
}
- handler = apr_pcalloc(pool, sizeof(*handler));
+ xmlctx = svn_ra_serf__xml_context_create(propfind_ttable,
+ propfind_opened,
+ propfind_closed,
+ NULL,
+ new_prop_ctx,
+ pool);
+ handler = svn_ra_serf__create_expat_handler(xmlctx, pool);
handler->method = "PROPFIND";
handler->path = path;
@@ -572,64 +616,30 @@ svn_ra_serf__deliver_props(svn_ra_serf__propfind_context_t **prop_ctx,
new_prop_ctx->handler = handler;
- parser_ctx = apr_pcalloc(pool, sizeof(*new_prop_ctx->parser_ctx));
- parser_ctx->pool = pool;
- parser_ctx->user_data = new_prop_ctx;
- parser_ctx->start = start_propfind;
- parser_ctx->end = end_propfind;
- parser_ctx->cdata = cdata_propfind;
- parser_ctx->status_code = &new_prop_ctx->status_code;
- parser_ctx->done = &new_prop_ctx->done;
- parser_ctx->done_list = new_prop_ctx->done_list;
- parser_ctx->done_item = &new_prop_ctx->done_item;
-
- new_prop_ctx->parser_ctx = parser_ctx;
-
- handler->response_handler = svn_ra_serf__handle_xml_parser;
- handler->response_baton = parser_ctx;
-
- /* create request */
- svn_ra_serf__request_create(new_prop_ctx->handler);
-
- *prop_ctx = new_prop_ctx;
+ *propfind_handler = handler;
return SVN_NO_ERROR;
}
-svn_boolean_t
-svn_ra_serf__propfind_is_done(svn_ra_serf__propfind_context_t *ctx)
-{
- return ctx->done;
-}
-
-int
-svn_ra_serf__propfind_status_code(svn_ra_serf__propfind_context_t *ctx)
-{
- return ctx->status_code;
-}
/*
* This helper function will block until the PROP_CTX indicates that is done
* or another error is returned.
*/
svn_error_t *
-svn_ra_serf__wait_for_props(svn_ra_serf__propfind_context_t *prop_ctx,
- svn_ra_serf__session_t *sess,
- apr_pool_t *pool)
+svn_ra_serf__wait_for_props(svn_ra_serf__handler_t *handler,
+ apr_pool_t *scratch_pool)
{
- svn_error_t *err, *err2;
+ svn_error_t *err;
+ svn_error_t *err2;
- err = svn_ra_serf__context_run_wait(&prop_ctx->done, sess, pool);
+ err = svn_ra_serf__context_run_one(handler, scratch_pool);
- err2 = svn_ra_serf__error_on_status(prop_ctx->status_code,
- prop_ctx->path, NULL);
- if (err2)
- {
- svn_error_clear(err);
- return err2;
- }
+ err2 = svn_ra_serf__error_on_status(handler->sline,
+ handler->path,
+ handler->location);
- return err;
+ return svn_error_compose_create(err2, err);
}
/*
@@ -646,45 +656,63 @@ svn_ra_serf__retrieve_props(apr_hash_t **results,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- svn_ra_serf__propfind_context_t *prop_ctx;
+ svn_ra_serf__handler_t *handler;
*results = apr_hash_make(result_pool);
- SVN_ERR(svn_ra_serf__deliver_props(&prop_ctx, *results, sess, conn, url,
+ SVN_ERR(svn_ra_serf__deliver_props(&handler, *results, sess, conn, url,
rev, depth, props, NULL, result_pool));
- SVN_ERR(svn_ra_serf__wait_for_props(prop_ctx, sess, result_pool));
+ SVN_ERR(svn_ra_serf__wait_for_props(handler, scratch_pool));
return SVN_NO_ERROR;
}
svn_error_t *
-svn_ra_serf__walk_all_props(apr_hash_t *props,
- const char *name,
- svn_revnum_t rev,
- svn_ra_serf__walker_visitor_t walker,
- void *baton,
- apr_pool_t *scratch_pool)
+svn_ra_serf__fetch_node_props(apr_hash_t **results,
+ svn_ra_serf__connection_t *conn,
+ const char *url,
+ svn_revnum_t revision,
+ const svn_ra_serf__dav_props_t *which_props,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- apr_hash_index_t *ns_hi;
+ apr_hash_t *multiprops;
apr_hash_t *ver_props;
- apr_hash_t *path_props;
- apr_pool_t *iterpool;
- ver_props = apr_hash_get(props, &rev, sizeof(rev));
- if (!ver_props)
- {
- return SVN_NO_ERROR;
- }
+ /* Note: a couple extra hash tables and whatnot get into RESULT_POOL.
+ Not a big deal at this point. Theoretically, we could fetch all
+ props into SCRATCH_POOL, then copy just the REVISION/URL props
+ into RESULT_POOL. Too much work for too little gain... */
+ SVN_ERR(svn_ra_serf__retrieve_props(&multiprops, conn->session, conn,
+ url, revision, "0", which_props,
+ result_pool, scratch_pool));
- path_props = apr_hash_get(ver_props, name, APR_HASH_KEY_STRING);
- if (!path_props)
+ ver_props = apr_hash_get(multiprops, &revision, sizeof(revision));
+ if (ver_props != NULL)
{
- return SVN_NO_ERROR;
+ *results = svn_hash_gets(ver_props, url);
+ if (*results != NULL)
+ return SVN_NO_ERROR;
}
+ return svn_error_create(SVN_ERR_RA_DAV_PROPS_NOT_FOUND, NULL,
+ _("The PROPFIND response did not include "
+ "the requested properties"));
+}
+
+
+svn_error_t *
+svn_ra_serf__walk_node_props(apr_hash_t *props,
+ svn_ra_serf__walker_visitor_t walker,
+ void *baton,
+ apr_pool_t *scratch_pool)
+{
+ apr_pool_t *iterpool;
+ apr_hash_index_t *ns_hi;
+
iterpool = svn_pool_create(scratch_pool);
- for (ns_hi = apr_hash_first(scratch_pool, path_props); ns_hi;
+ for (ns_hi = apr_hash_first(scratch_pool, props); ns_hi;
ns_hi = apr_hash_next(ns_hi))
{
void *ns_val;
@@ -718,6 +746,31 @@ svn_ra_serf__walk_all_props(apr_hash_t *props,
svn_error_t *
+svn_ra_serf__walk_all_props(apr_hash_t *props,
+ const char *name,
+ svn_revnum_t rev,
+ svn_ra_serf__walker_visitor_t walker,
+ void *baton,
+ apr_pool_t *scratch_pool)
+{
+ apr_hash_t *ver_props;
+ apr_hash_t *path_props;
+
+ ver_props = apr_hash_get(props, &rev, sizeof(rev));
+ if (!ver_props)
+ return SVN_NO_ERROR;
+
+ path_props = svn_hash_gets(ver_props, name);
+ if (!path_props)
+ return SVN_NO_ERROR;
+
+ return svn_error_trace(svn_ra_serf__walk_node_props(path_props,
+ walker, baton,
+ scratch_pool));
+}
+
+
+svn_error_t *
svn_ra_serf__walk_all_paths(apr_hash_t *props,
svn_revnum_t rev,
svn_ra_serf__path_rev_walker_t walker,
@@ -830,7 +883,7 @@ set_flat_props(void *baton,
prop_name = svn_ra_serf__svnname_from_wirename(ns, name, result_pool);
if (prop_name != NULL)
- apr_hash_set(props, prop_name, APR_HASH_KEY_STRING, value);
+ svn_hash_sets(props, prop_name, value);
return SVN_NO_ERROR;
}
@@ -839,15 +892,13 @@ set_flat_props(void *baton,
svn_error_t *
svn_ra_serf__flatten_props(apr_hash_t **flat_props,
apr_hash_t *props,
- const char *path,
- svn_revnum_t revision,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
*flat_props = apr_hash_make(result_pool);
- return svn_error_trace(svn_ra_serf__walk_all_props(
- props, path, revision,
+ return svn_error_trace(svn_ra_serf__walk_node_props(
+ props,
set_flat_props,
*flat_props /* baton */,
scratch_pool));
@@ -882,7 +933,7 @@ select_revprops(void *baton,
return SVN_NO_ERROR;
}
- apr_hash_set(revprops, prop_name, APR_HASH_KEY_STRING, val);
+ svn_hash_sets(revprops, prop_name, val);
return SVN_NO_ERROR;
}
@@ -906,7 +957,7 @@ svn_ra_serf__select_revprops(apr_hash_t **revprops,
/*
- * Contact the server (using SESSION and CONN) to calculate baseline
+ * Contact the server (using CONN) to calculate baseline
* information for BASELINE_URL at REVISION (which may be
* SVN_INVALID_REVNUM to query the HEAD revision).
*
@@ -918,199 +969,254 @@ svn_ra_serf__select_revprops(apr_hash_t **revprops,
static svn_error_t *
retrieve_baseline_info(svn_revnum_t *actual_revision,
const char **basecoll_url_p,
- svn_ra_serf__session_t *session,
svn_ra_serf__connection_t *conn,
const char *baseline_url,
svn_revnum_t revision,
- apr_pool_t *pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
apr_hash_t *props;
+ apr_hash_t *dav_props;
const char *basecoll_url;
- const char *version_name;
-
- SVN_ERR(svn_ra_serf__retrieve_props(&props, session, conn,
- baseline_url, revision, "0",
- baseline_props,
- pool, pool));
- basecoll_url = svn_ra_serf__get_ver_prop(props, baseline_url, revision,
- "DAV:", "baseline-collection");
+ SVN_ERR(svn_ra_serf__fetch_node_props(&props, conn,
+ baseline_url, revision,
+ baseline_props,
+ scratch_pool, scratch_pool));
+ dav_props = apr_hash_get(props, "DAV:", 4);
+ /* If DAV_PROPS is NULL, then svn_prop_get_value() will return NULL. */
+ basecoll_url = svn_prop_get_value(dav_props, "baseline-collection");
if (!basecoll_url)
{
return svn_error_create(SVN_ERR_RA_DAV_PROPS_NOT_FOUND, NULL,
_("The PROPFIND response did not include "
"the requested baseline-collection value"));
}
+ *basecoll_url_p = svn_urlpath__canonicalize(basecoll_url, result_pool);
- *basecoll_url_p = svn_urlpath__canonicalize(basecoll_url, pool);
-
- version_name = svn_ra_serf__get_ver_prop(props, baseline_url, revision,
- "DAV:", SVN_DAV__VERSION_NAME);
- if (!version_name)
+ if (actual_revision)
{
- return svn_error_create(SVN_ERR_RA_DAV_PROPS_NOT_FOUND, NULL,
- _("The PROPFIND response did not include "
- "the requested version-name value"));
+ const char *version_name;
+
+ version_name = svn_prop_get_value(dav_props, SVN_DAV__VERSION_NAME);
+ if (!version_name)
+ return svn_error_create(SVN_ERR_RA_DAV_PROPS_NOT_FOUND, NULL,
+ _("The PROPFIND response did not include "
+ "the requested version-name value"));
+
+ *actual_revision = SVN_STR_TO_REV(version_name);
}
- if (actual_revision)
+ return SVN_NO_ERROR;
+}
+
+
+/* For HTTPv1 servers, do a PROPFIND dance on the VCC to fetch the youngest
+ revnum. If BASECOLL_URL is non-NULL, then the corresponding baseline
+ collection URL is also returned.
+
+ Do the work over CONN.
+
+ *BASECOLL_URL (if requested) will be allocated in RESULT_POOL. All
+ temporary allocations will be made in SCRATCH_POOL. */
+static svn_error_t *
+v1_get_youngest_revnum(svn_revnum_t *youngest,
+ const char **basecoll_url,
+ svn_ra_serf__connection_t *conn,
+ const char *vcc_url,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ const char *baseline_url;
+ const char *bc_url;
+
+ /* Fetching DAV:checked-in from the VCC (with no Label: to specify a
+ revision) will return the latest Baseline resource's URL. */
+ SVN_ERR(svn_ra_serf__fetch_dav_prop(&baseline_url, conn, vcc_url,
+ SVN_INVALID_REVNUM,
+ "checked-in",
+ scratch_pool, scratch_pool));
+ if (!baseline_url)
{
- *actual_revision = SVN_STR_TO_REV(version_name);
+ return svn_error_create(SVN_ERR_RA_DAV_OPTIONS_REQ_FAILED, NULL,
+ _("The OPTIONS response did not include "
+ "the requested checked-in value"));
}
+ baseline_url = svn_urlpath__canonicalize(baseline_url, scratch_pool);
+
+ /* From the Baseline resource, we can fetch the DAV:baseline-collection
+ and DAV:version-name properties. The latter is the revision number,
+ which is formally the name used in Label: headers. */
+
+ /* First check baseline information cache. */
+ SVN_ERR(svn_ra_serf__blncache_get_baseline_info(&bc_url,
+ youngest,
+ conn->session->blncache,
+ baseline_url,
+ scratch_pool));
+ if (!bc_url)
+ {
+ SVN_ERR(retrieve_baseline_info(youngest, &bc_url, conn,
+ baseline_url, SVN_INVALID_REVNUM,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_ra_serf__blncache_set(conn->session->blncache,
+ baseline_url, *youngest,
+ bc_url, scratch_pool));
+ }
+
+ if (basecoll_url != NULL)
+ *basecoll_url = apr_pstrdup(result_pool, bc_url);
return SVN_NO_ERROR;
}
+
svn_error_t *
-svn_ra_serf__get_baseline_info(const char **bc_url,
- const char **bc_relative,
- svn_ra_serf__session_t *session,
- svn_ra_serf__connection_t *conn,
- const char *url,
- svn_revnum_t revision,
- svn_revnum_t *latest_revnum,
- apr_pool_t *pool)
+svn_ra_serf__get_youngest_revnum(svn_revnum_t *youngest,
+ svn_ra_serf__session_t *session,
+ apr_pool_t *scratch_pool)
{
- const char *vcc_url, *relative_url, *basecoll_url, *baseline_url;
+ const char *vcc_url;
- /* No URL? No sweat. We'll use the session URL. */
- if (! url)
- url = session->session_url.path;
+ if (SVN_RA_SERF__HAVE_HTTPV2_SUPPORT(session))
+ return svn_error_trace(svn_ra_serf__v2_get_youngest_revnum(
+ youngest, session->conns[0], scratch_pool));
- /* If the caller didn't provide a specific connection for us to use,
- we'll use the default one. */
- if (! conn)
- conn = session->conns[0];
+ SVN_ERR(svn_ra_serf__discover_vcc(&vcc_url, session, NULL, scratch_pool));
+
+ return svn_error_trace(v1_get_youngest_revnum(youngest, NULL,
+ session->conns[0], vcc_url,
+ scratch_pool, scratch_pool));
+}
+
+
+/* Set *BC_URL to the baseline collection url for REVISION. If REVISION
+ is SVN_INVALID_REVNUM, then the youngest revnum ("HEAD") is used.
+
+ *REVNUM_USED will be set to the revision used.
+ Uses the specified CONN, which is part of SESSION.
+
+ All allocations (results and temporary) are performed in POOL. */
+static svn_error_t *
+get_baseline_info(const char **bc_url,
+ svn_revnum_t *revnum_used,
+ svn_ra_serf__session_t *session,
+ svn_ra_serf__connection_t *conn,
+ svn_revnum_t revision,
+ apr_pool_t *pool)
+{
/* If we detected HTTP v2 support on the server, we can construct
the baseline collection URL ourselves, and fetch the latest
revision (if needed) with an OPTIONS request. */
if (SVN_RA_SERF__HAVE_HTTPV2_SUPPORT(session))
{
- svn_revnum_t actual_revision;
-
if (SVN_IS_VALID_REVNUM(revision))
{
- actual_revision = revision;
+ *revnum_used = revision;
}
else
{
- svn_ra_serf__options_context_t *opt_ctx;
-
- SVN_ERR(svn_ra_serf__create_options_req(&opt_ctx, session, conn,
- session->session_url.path,
- pool));
- SVN_ERR(svn_ra_serf__context_run_wait(
- svn_ra_serf__get_options_done_ptr(opt_ctx), session, pool));
-
- actual_revision = svn_ra_serf__options_get_youngest_rev(opt_ctx);
- if (! SVN_IS_VALID_REVNUM(actual_revision))
+ SVN_ERR(svn_ra_serf__v2_get_youngest_revnum(
+ revnum_used, conn, pool));
+ if (! SVN_IS_VALID_REVNUM(*revnum_used))
return svn_error_create(SVN_ERR_RA_DAV_OPTIONS_REQ_FAILED, NULL,
_("The OPTIONS response did not include "
"the youngest revision"));
}
- basecoll_url = apr_psprintf(pool, "%s/%ld",
- session->rev_root_stub, actual_revision);
- if (latest_revnum)
- *latest_revnum = actual_revision;
+ *bc_url = apr_psprintf(pool, "%s/%ld",
+ session->rev_root_stub, *revnum_used);
}
/* Otherwise, we fall back to the old VCC_URL PROPFIND hunt. */
else
{
+ const char *vcc_url;
+
SVN_ERR(svn_ra_serf__discover_vcc(&vcc_url, session, conn, pool));
if (SVN_IS_VALID_REVNUM(revision))
{
/* First check baseline information cache. */
- SVN_ERR(svn_ra_serf__blncache_get_bc_url(&basecoll_url,
+ SVN_ERR(svn_ra_serf__blncache_get_bc_url(bc_url,
session->blncache,
revision, pool));
-
- if (!basecoll_url)
+ if (!*bc_url)
{
- SVN_ERR(retrieve_baseline_info(NULL, &basecoll_url, session,
- conn, vcc_url, revision, pool));
+ SVN_ERR(retrieve_baseline_info(NULL, bc_url, conn,
+ vcc_url, revision, pool, pool));
SVN_ERR(svn_ra_serf__blncache_set(session->blncache, NULL,
- revision, basecoll_url, pool));
+ revision, *bc_url, pool));
}
- if (latest_revnum)
- {
- *latest_revnum = revision;
- }
+ *revnum_used = revision;
}
else
{
- apr_hash_t *props;
- svn_revnum_t actual_revision;
-
- SVN_ERR(svn_ra_serf__retrieve_props(&props, session, conn,
- vcc_url, revision, "0",
- checked_in_props,
- pool, pool));
- baseline_url = svn_ra_serf__get_ver_prop(props, vcc_url, revision,
- "DAV:", "checked-in");
- if (!baseline_url)
- {
- return svn_error_create(SVN_ERR_RA_DAV_OPTIONS_REQ_FAILED, NULL,
- _("The OPTIONS response did not include "
- "the requested checked-in value"));
- }
+ SVN_ERR(v1_get_youngest_revnum(revnum_used, bc_url,
+ conn, vcc_url,
+ pool, pool));
+ }
+ }
- baseline_url = svn_urlpath__canonicalize(baseline_url, pool);
+ return SVN_NO_ERROR;
+}
- /* First check baseline information cache. */
- SVN_ERR(svn_ra_serf__blncache_get_baseline_info(&basecoll_url,
- &actual_revision,
- session->blncache,
- baseline_url,
- pool));
- if (!basecoll_url)
- {
- SVN_ERR(retrieve_baseline_info(&actual_revision, &basecoll_url,
- session, conn,
- baseline_url, revision, pool));
- SVN_ERR(svn_ra_serf__blncache_set(session->blncache,
- baseline_url, actual_revision,
- basecoll_url, pool));
- }
- if (latest_revnum)
- {
- *latest_revnum = actual_revision;
- }
- }
- }
+svn_error_t *
+svn_ra_serf__get_stable_url(const char **stable_url,
+ svn_revnum_t *latest_revnum,
+ svn_ra_serf__session_t *session,
+ svn_ra_serf__connection_t *conn,
+ const char *url,
+ svn_revnum_t revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ const char *basecoll_url;
+ const char *repos_relpath;
+ svn_revnum_t revnum_used;
- /* And let's not forget to calculate our relative path. */
- SVN_ERR(svn_ra_serf__get_relative_path(&relative_url, url, session,
- conn, pool));
+ /* No URL? No sweat. We'll use the session URL. */
+ if (! url)
+ url = session->session_url.path;
+
+ /* If the caller didn't provide a specific connection for us to use,
+ we'll use the default connection. */
+ if (! conn)
+ conn = session->conns[0];
+
+ SVN_ERR(get_baseline_info(&basecoll_url, &revnum_used,
+ session, conn, revision, scratch_pool));
+ SVN_ERR(svn_ra_serf__get_relative_path(&repos_relpath, url,
+ session, conn, scratch_pool));
+
+ *stable_url = svn_path_url_add_component2(basecoll_url, repos_relpath,
+ result_pool);
+ if (latest_revnum)
+ *latest_revnum = revnum_used;
- *bc_url = basecoll_url;
- *bc_relative = relative_url;
return SVN_NO_ERROR;
}
svn_error_t *
svn_ra_serf__get_resource_type(svn_node_kind_t *kind,
- apr_hash_t *props,
- const char *url,
- svn_revnum_t revision)
+ apr_hash_t *props)
{
+ apr_hash_t *dav_props;
const char *res_type;
- res_type = svn_ra_serf__get_ver_prop(props, url, revision,
- "DAV:", "resourcetype");
+ dav_props = apr_hash_get(props, "DAV:", 4);
+ res_type = svn_prop_get_value(dav_props, "resourcetype");
if (!res_type)
{
/* How did this happen? */
return svn_error_create(SVN_ERR_RA_DAV_PROPS_NOT_FOUND, NULL,
_("The PROPFIND response did not include the "
- "requested resourcetype value"));
+ "requested resourcetype value"));
}
if (strcmp(res_type, "collection") == 0)
@@ -1124,3 +1230,34 @@ svn_ra_serf__get_resource_type(svn_node_kind_t *kind,
return SVN_NO_ERROR;
}
+
+
+svn_error_t *
+svn_ra_serf__fetch_dav_prop(const char **value,
+ svn_ra_serf__connection_t *conn,
+ const char *url,
+ svn_revnum_t revision,
+ const char *propname,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ apr_hash_t *props;
+ apr_hash_t *dav_props;
+
+ SVN_ERR(svn_ra_serf__fetch_node_props(&props, conn, url, revision,
+ checked_in_props,
+ scratch_pool, scratch_pool));
+ dav_props = apr_hash_get(props, "DAV:", 4);
+ if (dav_props == NULL)
+ return svn_error_create(SVN_ERR_RA_DAV_PROPS_NOT_FOUND, NULL,
+ _("The PROPFIND response did not include "
+ "the requested 'DAV:' properties"));
+
+ /* We wouldn't get here if the resource was not found (404), so the
+ property should be present.
+
+ Note: it is okay to call apr_pstrdup() with NULL. */
+ *value = apr_pstrdup(result_pool, svn_prop_get_value(dav_props, propname));
+
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/libsvn_ra_serf/ra_serf.h b/subversion/libsvn_ra_serf/ra_serf.h
index 5c2116f..335a9e3 100644
--- a/subversion/libsvn_ra_serf/ra_serf.h
+++ b/subversion/libsvn_ra_serf/ra_serf.h
@@ -26,7 +26,7 @@
#include <serf.h>
-#include <expat.h>
+#include <expat.h> /* for XML_Parser */
#include <apr_uri.h>
#include "svn_types.h"
@@ -39,6 +39,8 @@
#include "svn_dirent_uri.h"
#include "private/svn_dav_protocol.h"
+#include "private/svn_subr_private.h"
+#include "private/svn_editor.h"
#include "blncache.h"
@@ -48,18 +50,16 @@ extern "C" {
/* Enforce the minimum version of serf. */
-#if !SERF_VERSION_AT_LEAST(0, 7, 1)
-#error Please update your version of serf to at least 0.7.1.
+#if !SERF_VERSION_AT_LEAST(1, 2, 1)
+#error Please update your version of serf to at least 1.2.1.
#endif
/** Use this to silence compiler warnings about unused parameters. */
#define UNUSED_CTX(x) ((void)(x))
-/** Our User-Agent string. */
-#define USER_AGENT "SVN/" SVN_VER_NUMBER " serf/" \
- APR_STRINGIFY(SERF_MAJOR_VERSION) "." \
- APR_STRINGIFY(SERF_MINOR_VERSION) "." \
- APR_STRINGIFY(SERF_PATCH_VERSION)
+/** Wait duration (in microseconds) used in calls to serf_context_run() */
+#define SVN_RA_SERF__CONTEXT_RUN_DURATION 500000
+
/* Forward declarations. */
@@ -73,15 +73,8 @@ typedef struct svn_ra_serf__connection_t {
/* Bucket allocator for this connection. */
serf_bucket_alloc_t *bkt_alloc;
- /* Host name */
- const char *hostname;
-
- /* Are we using ssl */
- svn_boolean_t using_ssl;
- int server_cert_failures; /* Collected cert failures in chain */
-
- /* Should we ask for compressed responses? */
- svn_boolean_t using_compression;
+ /* Collected cert failures in chain. */
+ int server_cert_failures;
/* What was the last HTTP status code we got on this connection? */
int last_status_code;
@@ -93,11 +86,15 @@ typedef struct svn_ra_serf__connection_t {
svn_ra_serf__session_t *session;
- /* user agent string */
- const char *useragent;
-
} svn_ra_serf__connection_t;
+/** Maximum value we'll allow for the http-max-connections config option.
+ *
+ * Note: minimum 2 connections are required for ra_serf to function
+ * correctly!
+ */
+#define SVN_RA_SERF__MAX_CONNECTIONS_LIMIT 8
+
/*
* The master serf RA session.
*
@@ -110,14 +107,21 @@ struct svn_ra_serf__session_t {
/* The current context */
serf_context_t *context;
+ /* The maximum number of connections we'll use for parallelized
+ fetch operations (updates, etc.) */
+ apr_int64_t max_connections;
+
/* Are we using ssl */
svn_boolean_t using_ssl;
/* Should we ask for compressed responses? */
svn_boolean_t using_compression;
+ /* The user agent string */
+ const char *useragent;
+
/* The current connection */
- svn_ra_serf__connection_t **conns;
+ svn_ra_serf__connection_t *conns[SVN_RA_SERF__MAX_CONNECTIONS_LIMIT];
int num_conns;
int cur_conn;
@@ -129,6 +133,17 @@ struct svn_ra_serf__session_t {
apr_uri_t repos_root;
const char *repos_root_str;
+ /* The server is not Apache/mod_dav_svn (directly) and only supports
+ HTTP/1.0. Thus, we cannot send chunked requests. */
+ svn_boolean_t http10;
+
+ /* Should we use Transfer-Encoding: chunked for HTTP/1.1 servers. */
+ svn_boolean_t using_chunked_requests;
+
+ /* Do we need to detect whether the connection supports chunked requests?
+ i.e. is there a (reverse) proxy that does not support them? */
+ svn_boolean_t detect_chunking;
+
/* Our Version-Controlled-Configuration; may be NULL until we know it. */
const char *vcc_url;
@@ -148,6 +163,9 @@ struct svn_ra_serf__session_t {
svn_cancel_func_t cancel_func;
void *cancel_baton;
+ /* Ev2 shim callbacks */
+ svn_delta_shim_callbacks_t *shim_callbacks;
+
/* Error that we've received but not yet returned upstream. */
svn_error_t *pending_error;
@@ -163,8 +181,12 @@ struct svn_ra_serf__session_t {
constants' addresses, therefore). */
apr_hash_t *capabilities;
+ /* Activity collection URL. (Cached from the initial OPTIONS
+ request when run against HTTPv1 servers.) */
+ const char *activity_collection_url;
+
/* Are we using a proxy? */
- int using_proxy;
+ svn_boolean_t using_proxy;
const char *proxy_username;
const char *proxy_password;
@@ -178,7 +200,7 @@ struct svn_ra_serf__session_t {
const char *uuid;
/* Connection timeout value */
- long timeout;
+ apr_interval_time_t timeout;
/* HTTPv1 flags */
svn_tristate_t supports_deadprop_count;
@@ -205,9 +227,33 @@ struct svn_ra_serf__session_t {
const char *vtxn_stub; /* for accessing transactions (i.e. txnprops) */
const char *vtxn_root_stub; /* for accessing TXN/PATH pairs */
+ /* Hash mapping const char * server-supported POST types to
+ disinteresting-but-non-null values. */
+ apr_hash_t *supported_posts;
+
/*** End HTTP v2 stuff ***/
svn_ra_serf__blncache_t *blncache;
+
+ /* Trisate flag that indicates user preference for using bulk updates
+ (svn_tristate_true) with all the properties and content in the
+ update-report response. If svn_tristate_false, request a skelta
+ update-report with inlined properties. If svn_tristate_unknown then use
+ server preference. */
+ svn_tristate_t bulk_updates;
+
+ /* Indicates if the server wants bulk update requests (Prefer) or only
+ accepts skelta requests (Off). If this value is On both options are
+ allowed. */
+ const char *server_allows_bulk;
+
+ /* Indicates if the server supports sending inlined props in update editor
+ * in skelta mode (send-all == 'false'). */
+ svn_boolean_t supports_inline_props;
+
+ /* Indicates whether the server supports issuing replay REPORTs
+ against rev resources (children of `rev_stub', elsestruct). */
+ svn_boolean_t supports_rev_rsrc_replay;
};
#define SVN_RA_SERF__HAVE_HTTPV2_SUPPORT(sess) ((sess)->me_resource != NULL)
@@ -272,40 +318,21 @@ static const svn_ra_serf__dav_props_t all_props[] =
{ NULL }
};
-static const svn_ra_serf__dav_props_t vcc_props[] =
-{
- { "DAV:", "version-controlled-configuration" },
- { NULL }
-};
-
static const svn_ra_serf__dav_props_t check_path_props[] =
{
{ "DAV:", "resourcetype" },
{ NULL }
};
-static const svn_ra_serf__dav_props_t uuid_props[] =
+static const svn_ra_serf__dav_props_t type_and_checksum_props[] =
{
- { SVN_DAV_PROP_NS_DAV, "repository-uuid" },
- { NULL }
-};
-
-static const svn_ra_serf__dav_props_t repos_root_props[] =
-{
- { SVN_DAV_PROP_NS_DAV, "baseline-relative-path" },
- { NULL }
-};
-
-static const svn_ra_serf__dav_props_t href_props[] =
-{
- { "DAV:", "href" },
+ { "DAV:", "resourcetype" },
+ { SVN_DAV_PROP_NS_DAV, "sha1-checksum" },
{ NULL }
};
/* WC props compatibility with ra_neon. */
-#define SVN_RA_SERF__WC_NAMESPACE SVN_PROP_WC_PREFIX "ra_dav:"
-#define SVN_RA_SERF__WC_ACTIVITY_URL SVN_RA_SERF__WC_NAMESPACE "activity-url"
-#define SVN_RA_SERF__WC_CHECKED_IN_URL SVN_RA_SERF__WC_NAMESPACE "version-url"
+#define SVN_RA_SERF__WC_CHECKED_IN_URL SVN_PROP_WC_PREFIX "ra_dav:version-url"
/** Serf utility functions **/
@@ -316,12 +343,6 @@ svn_ra_serf__conn_setup(apr_socket_t *sock,
void *baton,
apr_pool_t *pool);
-serf_bucket_t*
-svn_ra_serf__accept_response(serf_request_t *request,
- serf_bucket_t *stream,
- void *acceptor_baton,
- apr_pool_t *pool);
-
void
svn_ra_serf__conn_closed(serf_connection_t *conn,
void *closed_baton,
@@ -348,24 +369,6 @@ svn_ra_serf__handle_client_cert_pw(void *data,
const char *cert_path,
const char **password);
-/*
- * Create a REQUEST with an associated REQ_BKT in the SESSION.
- *
- * If HDRS_BKT is not-NULL, it will be set to a headers_bucket that
- * corresponds to the new request.
- *
- * The request will be METHOD at URL.
- *
- * If BODY_BKT is not-NULL, it will be sent as the request body.
- *
- * If CONTENT_TYPE is not-NULL, it will be sent as the Content-Type header.
- */
-svn_error_t *
-svn_ra_serf__setup_serf_req(serf_request_t *request,
- serf_bucket_t **req_bkt, serf_bucket_t **hdrs_bkt,
- svn_ra_serf__connection_t *conn,
- const char *method, const char *url,
- serf_bucket_t *body_bkt, const char *content_type);
/*
* This function will run the serf context in SESS until *DONE is TRUE.
@@ -380,31 +383,22 @@ typedef svn_error_t *
(*svn_ra_serf__response_handler_t)(serf_request_t *request,
serf_bucket_t *response,
void *handler_baton,
- apr_pool_t *pool);
-
-/* Callback for setting up a complete serf request */
-typedef svn_error_t *
-(*svn_ra_serf__request_setup_t)(serf_request_t *request,
- void *setup_baton,
- serf_bucket_t **req_bkt,
- serf_response_acceptor_t *acceptor,
- void **acceptor_baton,
- svn_ra_serf__response_handler_t *handler,
- void **handler_baton,
- apr_pool_t *pool);
+ apr_pool_t *scratch_pool);
/* Callback for when a request body is needed. */
+/* ### should pass a scratch_pool */
typedef svn_error_t *
(*svn_ra_serf__request_body_delegate_t)(serf_bucket_t **body_bkt,
void *baton,
serf_bucket_alloc_t *alloc,
- apr_pool_t *pool);
+ apr_pool_t *request_pool);
/* Callback for when request headers are needed. */
+/* ### should pass a scratch_pool */
typedef svn_error_t *
(*svn_ra_serf__request_header_delegate_t)(serf_bucket_t *headers,
void *baton,
- apr_pool_t *pool);
+ apr_pool_t *request_pool);
/* Callback for when a response has an error. */
typedef svn_error_t *
@@ -413,6 +407,9 @@ typedef svn_error_t *
int status_code,
void *baton);
+/* ### we should reorder the types in this file. */
+typedef struct svn_ra_serf__server_error_t svn_ra_serf__server_error_t;
+
/*
* Structure that can be passed to our default handler to guide the
* execution of the request through its lifecycle.
@@ -427,10 +424,29 @@ typedef struct svn_ra_serf__handler_t {
/* The content-type of the request body. */
const char *body_type;
+ /* If TRUE then default Accept-Encoding request header is not configured for
+ request. If FALSE then 'gzip' accept encoding will be used if compression
+ enabled. */
+ svn_boolean_t custom_accept_encoding;
+
+ /* Has the request/response been completed? */
+ svn_boolean_t done;
+
+ /* If we captured an error from the server, then this will be non-NULL.
+ It will be allocated from HANDLER_POOL. */
+ svn_ra_serf__server_error_t *server_error;
+
/* The handler and baton pair for our handler. */
svn_ra_serf__response_handler_t response_handler;
void *response_baton;
+ /* When REPONSE_HANDLER is invoked, the following fields will be set
+ based on the response header. HANDLER_POOL must be non-NULL for these
+ values to be filled in. SLINE.REASON and LOCATION will be allocated
+ within HANDLER_POOL. */
+ serf_status_line sline; /* The parsed Status-Line */
+ const char *location; /* The Location: header, if any */
+
/* The handler and baton pair to be executed when a non-recoverable error
* is detected. If it is NULL in the presence of an error, an abort() may
* be triggered.
@@ -438,15 +454,6 @@ typedef struct svn_ra_serf__handler_t {
svn_ra_serf__response_error_t response_error;
void *response_error_baton;
- /* This function and baton will be executed when the request is about
- * to be delivered by serf.
- *
- * This just passes through serf's raw request creation parameters.
- * None of the other parameters will be utilized if this field is set.
- */
- svn_ra_serf__request_setup_t setup;
- void *setup_baton;
-
/* This function and baton pair allows for custom request headers to
* be set.
*
@@ -471,8 +478,34 @@ typedef struct svn_ra_serf__handler_t {
/* The connection and session to be used for this request. */
svn_ra_serf__connection_t *conn;
svn_ra_serf__session_t *session;
+
+ /* Internal flag to indicate we've parsed the headers. */
+ svn_boolean_t reading_body;
+
+ /* When this flag will be set, the core handler will discard any unread
+ portion of the response body. The registered response handler will
+ no longer be called. */
+ svn_boolean_t discard_body;
+
+ /* Pool for allocating SLINE.REASON and LOCATION. If this pool is NULL,
+ then the requestor does not care about SLINE and LOCATION. */
+ apr_pool_t *handler_pool;
+
} svn_ra_serf__handler_t;
+
+/* Run one request and process the response.
+
+ Similar to context_run_wait(), but this creates the request for HANDLER
+ and then waits for it to complete.
+
+ WARNING: context_run_wait() does NOT create a request, whereas this
+ function DOES. Avoid a double-create. */
+svn_error_t *
+svn_ra_serf__context_run_one(svn_ra_serf__handler_t *handler,
+ apr_pool_t *scratch_pool);
+
+
/*
* Helper function to queue a request in the @a handler's connection.
*/
@@ -510,30 +543,28 @@ typedef struct svn_ra_serf__xml_parser_t svn_ra_serf__xml_parser_t;
*/
typedef svn_error_t *
(*svn_ra_serf__xml_start_element_t)(svn_ra_serf__xml_parser_t *parser,
- void *baton,
svn_ra_serf__dav_props_t name,
- const char **attrs);
+ const char **attrs,
+ apr_pool_t *scratch_pool);
/* Callback invoked with @a baton by our XML @a parser when an element with
* the @a name is closed.
*/
typedef svn_error_t *
(*svn_ra_serf__xml_end_element_t)(svn_ra_serf__xml_parser_t *parser,
- void *baton,
- svn_ra_serf__dav_props_t name);
+ svn_ra_serf__dav_props_t name,
+ apr_pool_t *scratch_pool);
/* Callback invoked with @a baton by our XML @a parser when a CDATA portion
* of @a data with size @a len is encountered.
*
* This may be invoked multiple times for the same tag.
- *
- * @see svn_ra_serf__expand_string
*/
typedef svn_error_t *
(*svn_ra_serf__xml_cdata_chunk_handler_t)(svn_ra_serf__xml_parser_t *parser,
- void *baton,
const char *data,
- apr_size_t len);
+ apr_size_t len,
+ apr_pool_t *scratch_pool);
/*
* Helper structure associated with handle_xml_parser handler that will
@@ -543,6 +574,10 @@ struct svn_ra_serf__xml_parser_t {
/* Temporary allocations should be made in this pool. */
apr_pool_t *pool;
+ /* What kind of response are we parsing? If set, this should typically
+ define the report name. */
+ const char *response_type;
+
/* Caller-specific data passed to the start, end, cdata callbacks. */
void *user_data;
@@ -564,16 +599,6 @@ struct svn_ra_serf__xml_parser_t {
/* Our previously used states (will be reused). */
svn_ra_serf__xml_state_t *free_state;
- /* If non-NULL, the status code of the response will be stored here.
- *
- * If this is NULL and an error is received, an abort will be triggered.
- */
- int *status_code;
-
- /* If non-NULL, this is the value of the response's Location header.
- */
- const char *location;
-
/* If non-NULL, this value will be set to TRUE when the response is
* completed.
*/
@@ -626,26 +651,219 @@ struct svn_ra_serf__xml_parser_t {
See libsvn_ra_serf/util.c */
struct svn_ra_serf__pending_t *pending;
-
- /* Response restart support */
- const void *headers_baton; /* Last pointer to headers */
- apr_off_t skip_size; /* Number of bytes to skip */
- apr_off_t read_size; /* Number of bytes read from response */
};
+
+/* v2 of the XML parsing functions */
+
+/* The XML parsing context. */
+typedef struct svn_ra_serf__xml_context_t svn_ra_serf__xml_context_t;
+
+
+/* An opaque structure for the XML parse element/state. */
+typedef struct svn_ra_serf__xml_estate_t svn_ra_serf__xml_estate_t;
+
+/* Called just after the parser moves into ENTERED_STATE. The tag causing
+ the transition is passed in TAG.
+
+ This callback is applied to a parsing context by using the
+ svn_ra_serf__xml_context_customize() function.
+
+ NOTE: this callback, when set, will be invoked on *every* transition.
+ The callback must examine ENTERED_STATE to determine if any action
+ must be taken. The original state is not provided, but must be derived
+ from ENTERED_STATE and/or the TAG causing the transition (if needed). */
+typedef svn_error_t *
+(*svn_ra_serf__xml_opened_t)(svn_ra_serf__xml_estate_t *xes,
+ void *baton,
+ int entered_state,
+ const svn_ra_serf__dav_props_t *tag,
+ apr_pool_t *scratch_pool);
+
+
+/* Called just before the parser leaves LEAVING_STATE.
+
+ If cdata collection was enabled for this state, then CDATA will be
+ non-NULL and contain the collected cdata.
+
+ If attribute collection was enabled for this state, then ATTRS will
+ contain the attributes collected for this element only, along with
+ any values stored via svn_ra_serf__xml_note().
+
+ Use svn_ra_serf__xml_gather_since() to gather up data from outer states.
+
+ ATTRS is char* -> char*.
+
+ Temporary allocations may be made in SCRATCH_POOL. */
+typedef svn_error_t *
+(*svn_ra_serf__xml_closed_t)(svn_ra_serf__xml_estate_t *xes,
+ void *baton,
+ int leaving_state,
+ const svn_string_t *cdata,
+ apr_hash_t *attrs,
+ apr_pool_t *scratch_pool);
+
+
+/* Called for all states that are not using the builtin cdata collection.
+ This callback is (only) appropriate for unbounded-size cdata content.
+
+ CURRENT_STATE may be used to decide what to do with the data.
+
+ Temporary allocations may be made in SCRATCH_POOL. */
+typedef svn_error_t *
+(*svn_ra_serf__xml_cdata_t)(svn_ra_serf__xml_estate_t *xes,
+ void *baton,
+ int current_state,
+ const char *data,
+ apr_size_t len,
+ apr_pool_t *scratch_pool);
+
+
+/* State transition table.
+
+ When the XML Context is constructed, it is in state 0. User states are
+ positive integers.
+
+ In a list of transitions, use { 0 } to indicate the end. Specifically,
+ the code looks for NS == NULL.
+
+ ### more docco
+*/
+typedef struct svn_ra_serf__xml_transition_t {
+ /* This transition applies when in this state */
+ int from_state;
+
+ /* And when this tag is observed */
+ const char *ns;
+ const char *name;
+
+ /* Moving to this state */
+ int to_state;
+
+ /* Should the cdata of NAME be collected? Note that CUSTOM_CLOSE should
+ be TRUE in order to capture this cdata. */
+ svn_boolean_t collect_cdata;
+
+ /* Which attributes of NAME should be collected? Terminate with NULL.
+ Maximum of 10 attributes may be collected. Note that attribute
+ namespaces are ignored at this time.
+
+ Attribute names beginning with "?" are optional. Other names must
+ exist on the element, or SVN_ERR_XML_ATTRIB_NOT_FOUND will be raised. */
+ const char *collect_attrs[11];
+
+ /* When NAME is closed, should the callback be invoked? */
+ svn_boolean_t custom_close;
+
+} svn_ra_serf__xml_transition_t;
+
+
+/* Construct an XML parsing context, based on the TTABLE transition table.
+ As content is parsed, the CLOSED_CB callback will be invoked according
+ to the definition in the table.
+
+ If OPENED_CB is not NULL, then it will be invoked for *every* tag-open
+ event. The callback will need to use the ENTERED_STATE and TAG parameters
+ to decide what it would like to do.
+
+ If CDATA_CB is not NULL, then it will be called for all cdata that is
+ not be automatically collected (based on the transition table record's
+ COLLECT_CDATA flag). It will be called in every state, so the callback
+ must examine the CURRENT_STATE parameter to decide what to do.
+
+ The same BATON value will be passed to all three callbacks.
+
+ The context will be created within RESULT_POOL. */
+svn_ra_serf__xml_context_t *
+svn_ra_serf__xml_context_create(
+ const svn_ra_serf__xml_transition_t *ttable,
+ svn_ra_serf__xml_opened_t opened_cb,
+ svn_ra_serf__xml_closed_t closed_cb,
+ svn_ra_serf__xml_cdata_t cdata_cb,
+ void *baton,
+ apr_pool_t *result_pool);
+
+/* Destroy all subpools for this structure. */
+void
+svn_ra_serf__xml_context_destroy(
+ svn_ra_serf__xml_context_t *xmlctx);
+
+/* Construct a handler with the response function/baton set up to parse
+ a response body using the given XML context. The handler and its
+ internal structures are allocated in RESULT_POOL.
+
+ This also initializes HANDLER_POOL to the given RESULT_POOL. */
+svn_ra_serf__handler_t *
+svn_ra_serf__create_expat_handler(svn_ra_serf__xml_context_t *xmlctx,
+ apr_pool_t *result_pool);
+
+
+/* Allocated within XES->STATE_POOL. Changes are not allowd (callers
+ should make a deep copy if they need to make changes).
+
+ The resulting hash maps char* names to char* values. */
+apr_hash_t *
+svn_ra_serf__xml_gather_since(svn_ra_serf__xml_estate_t *xes,
+ int stop_state);
+
+
+/* Attach the NAME/VALUE pair onto this/parent state identified by STATE.
+ The name and value will be copied into the target state's pool.
+
+ These values will be available to the CLOSED_CB for the target state,
+ or part of the gathered state via xml_gather_since().
+
+ Typically, this function is used by a child state's close callback,
+ or within an opening callback to store additional data.
+
+ Note: if the state is not found, then a programmer error has occurred,
+ so the function will invoke SVN_ERR_MALFUNCTION(). */
+void
+svn_ra_serf__xml_note(svn_ra_serf__xml_estate_t *xes,
+ int state,
+ const char *name,
+ const char *value);
+
+
+/* Returns XES->STATE_POOL for allocating structures that should live
+ as long as the state identified by XES.
+
+ Note: a state pool is created upon demand, so only use this function
+ when memory is required for a given state. */
+apr_pool_t *
+svn_ra_serf__xml_state_pool(svn_ra_serf__xml_estate_t *xes);
+
+
+/* Any XML parser may be used. When an opening tag is seen, call this
+ function to feed the information into XMLCTX. */
+svn_error_t *
+svn_ra_serf__xml_cb_start(svn_ra_serf__xml_context_t *xmlctx,
+ const char *raw_name,
+ const char *const *attrs);
+
+
+/* When a close tag is seen, call this function to feed the information
+ into XMLCTX. */
+svn_error_t *
+svn_ra_serf__xml_cb_end(svn_ra_serf__xml_context_t *xmlctx,
+ const char *raw_name);
+
+
+/* When cdata is parsed by the wrapping XML parser, call this function to
+ feed the cdata into the XMLCTX. */
+svn_error_t *
+svn_ra_serf__xml_cb_cdata(svn_ra_serf__xml_context_t *xmlctx,
+ const char *data,
+ apr_size_t len);
+
+
/*
* Parses a server-side error message into a local Subversion error.
*/
-typedef struct svn_ra_serf__server_error_t {
+struct svn_ra_serf__server_error_t {
/* Our local representation of the error. */
svn_error_t *error;
- /* Have we checked to see if there's an XML error in this response? */
- svn_boolean_t init;
-
- /* Was there an XML error response? */
- svn_boolean_t has_xml_response;
-
/* Are we done with the response? */
svn_boolean_t done;
@@ -663,41 +881,8 @@ typedef struct svn_ra_serf__server_error_t {
/* XML parser and namespace used to parse the remote response */
svn_ra_serf__xml_parser_t parser;
-} svn_ra_serf__server_error_t;
-
-/* A simple request context that can be passed to handle_status_only. */
-typedef struct svn_ra_serf__simple_request_context_t {
- apr_pool_t *pool;
-
- /* The HTTP status code of the response */
- int status;
-
- /* The HTTP status line of the response */
- const char *reason;
-
- /* The Location header value of the response, or NULL if there
- wasn't one. */
- const char *location;
-
- /* This value is set to TRUE when the response is completed. */
- svn_boolean_t done;
-
- /* If an error occurred, this value will be initialized. */
- svn_ra_serf__server_error_t server_error;
-} svn_ra_serf__simple_request_context_t;
+};
-/*
- * Serf handler for @a request / @a response pair that takes in a
- * @a baton (@see svn_ra_serf__simple_request_context_t).
- * Implements svn_ra_serf__response_handler_t.
- *
- * Temporary allocations are made in @a pool.
- */
-svn_error_t *
-svn_ra_serf__handle_status_only(serf_request_t *request,
- serf_bucket_t *response,
- void *baton,
- apr_pool_t *pool);
/*
* Handler that discards the entire @a response body associated with a
@@ -714,32 +899,45 @@ svn_ra_serf__handle_discard_body(serf_request_t *request,
void *baton,
apr_pool_t *pool);
-/*
- * Handler that retrieves the embedded XML error response from the
- * the @a response body associated with a @a request.
- * Implements svn_ra_serf__response_handler_t.
- *
- * All temporary allocations will be made in a @a pool.
- */
-svn_error_t *
-svn_ra_serf__handle_server_error(serf_request_t *request,
- serf_bucket_t *response,
- apr_pool_t *pool);
/*
* Handler that retrieves the embedded XML multistatus response from the
- * the @a RESPONSE body associated with a @a REQUEST. *DONE is set to TRUE.
+ * the @a RESPONSE body associated with a @a REQUEST.
+ *
* Implements svn_ra_serf__response_handler_t.
*
- * The @a BATON should be of type svn_ra_serf__simple_request_context_t.
+ * The @a BATON should be of type svn_ra_serf__handler_t. When the request
+ * is complete, the handler's DONE flag will be set to TRUE.
*
- * All temporary allocations will be made in a @a pool.
+ * All temporary allocations will be made in a @a scratch_pool.
*/
svn_error_t *
svn_ra_serf__handle_multistatus_only(serf_request_t *request,
serf_bucket_t *response,
void *baton,
- apr_pool_t *pool);
+ apr_pool_t *scratch_pool);
+
+
+/* Handler that expects an empty body.
+
+ If a body IS present, and it is text/xml, then it will be parsed for
+ a server-side error.
+
+ BATON should be the svn_ra_serf__handler_t running REQUEST.
+
+ Status line information will be in HANDLER->SLINE.
+
+ Any parsed errors will be left in HANDLER->SERVER_ERROR. That member
+ may be NULL if no body was present, or a problem occurred trying to
+ parse the body.
+
+ All temporary allocations will be made in SCRATCH_POOL. */
+svn_error_t *
+svn_ra_serf__expect_empty_body(serf_request_t *request,
+ serf_bucket_t *response,
+ void *baton,
+ apr_pool_t *scratch_pool);
+
/*
* This function will feed the RESPONSE body into XMLP. When parsing is
@@ -768,12 +966,6 @@ svn_ra_serf__response_discard_handler(serf_request_t *request,
void *baton,
apr_pool_t *pool);
-/* Return the value of the RESPONSE's Location header if any, or NULL
- * otherwise. All allocations will be made in POOL.
- */
-const char *
-svn_ra_serf__response_get_location(serf_bucket_t *response,
- apr_pool_t *pool);
/** XML helper functions. **/
@@ -793,6 +985,7 @@ svn_ra_serf__xml_pop_state(svn_ra_serf__xml_parser_t *parser);
svn_error_t *
svn_ra_serf__process_pending(svn_ra_serf__xml_parser_t *parser,
+ svn_boolean_t *network_eof,
apr_pool_t *scratch_pool);
@@ -819,12 +1012,15 @@ svn_ra_serf__add_xml_header_buckets(serf_bucket_t *agg_bucket,
serf_bucket_alloc_t *bkt_alloc);
/*
- * Add the appropriate serf buckets to AGG_BUCKET representing xml tag open
- * with name TAG.
+ * Add the appropriate serf buckets to AGG_BUCKET representing the XML
+ * open tag with name TAG.
*
* Take the tag's attributes from varargs, a NULL-terminated list of
- * alternating <tt>char *</tt> key and <tt>char *</tt> val. Do xml-escaping
- * on each val. Attribute will be ignored if it's value is NULL.
+ * alternating <tt>char *</tt> key and <tt>char *</tt> val. Attribute
+ * will be ignored if it's value is NULL.
+ *
+ * NOTE: Callers are responsible for XML-escaping attribute values as
+ * necessary.
*
* The bucket will be allocated from BKT_ALLOC.
*/
@@ -859,12 +1055,12 @@ svn_ra_serf__add_cdata_len_buckets(serf_bucket_t *agg_bucket,
* Look up the @a attrs array for namespace definitions and add each one
* to the @a ns_list of namespaces.
*
- * New namespaces will be allocated in @a pool.
+ * New namespaces will be allocated in RESULT_POOL.
*/
void
svn_ra_serf__define_ns(svn_ra_serf__ns_t **ns_list,
- const char **attrs,
- apr_pool_t *pool);
+ const char *const *attrs,
+ apr_pool_t *result_pool);
/*
* Look up @a name in the @a ns_list list for previously declared namespace
@@ -875,37 +1071,12 @@ svn_ra_serf__define_ns(svn_ra_serf__ns_t **ns_list,
*/
void
svn_ra_serf__expand_ns(svn_ra_serf__dav_props_t *returned_prop_name,
- svn_ra_serf__ns_t *ns_list,
+ const svn_ra_serf__ns_t *ns_list,
const char *name);
-/*
- * Expand the string represented by @a cur with a current size of @a
- * cur_len by appending @a new with a size of @a new_len.
- *
- * The reallocated string is made in @a pool.
- */
-void
-svn_ra_serf__expand_string(const char **cur, apr_size_t *cur_len,
- const char *new, apr_size_t new_len,
- apr_pool_t *pool);
/** PROPFIND-related functions **/
-/* Opaque structure representing PROPFINDs. */
-typedef struct svn_ra_serf__propfind_context_t svn_ra_serf__propfind_context_t;
-
-/*
- * Returns a flag representing whether the PROPFIND @a ctx is completed.
- */
-svn_boolean_t
-svn_ra_serf__propfind_is_done(svn_ra_serf__propfind_context_t *ctx);
-
-/*
- * Returns the response status code of the PROPFIND @a ctx.
- */
-int
-svn_ra_serf__propfind_status_code(svn_ra_serf__propfind_context_t *ctx);
-
/*
* This function will deliver a PROP_CTX PROPFIND request in the SESS
* serf context for the properties listed in LOOKUP_PROPS at URL for
@@ -915,7 +1086,7 @@ svn_ra_serf__propfind_status_code(svn_ra_serf__propfind_context_t *ctx);
* expected to call svn_ra_serf__wait_for_props().
*/
svn_error_t *
-svn_ra_serf__deliver_props(svn_ra_serf__propfind_context_t **prop_ctx,
+svn_ra_serf__deliver_props(svn_ra_serf__handler_t **propfind_handler,
apr_hash_t *prop_vals,
svn_ra_serf__session_t *sess,
svn_ra_serf__connection_t *conn,
@@ -927,13 +1098,12 @@ svn_ra_serf__deliver_props(svn_ra_serf__propfind_context_t **prop_ctx,
apr_pool_t *pool);
/*
- * This helper function will block until the PROP_CTX indicates that is done
- * or another error is returned.
+ * This helper function will block until PROPFIND_HANDLER indicates that is
+ * done or another error is returned.
*/
svn_error_t *
-svn_ra_serf__wait_for_props(svn_ra_serf__propfind_context_t *prop_ctx,
- svn_ra_serf__session_t *sess,
- apr_pool_t *pool);
+svn_ra_serf__wait_for_props(svn_ra_serf__handler_t *handler,
+ apr_pool_t *scratch_pool);
/* This is a blocking version of deliver_props.
@@ -955,6 +1125,50 @@ svn_ra_serf__retrieve_props(apr_hash_t **results,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
+
+/* Using CONN, fetch the properties specified by WHICH_PROPS using CONN
+ for URL at REVISION. The resulting properties are placed into a 2-level
+ hash in RESULTS, mapping NAMESPACE -> hash<PROPNAME, PROPVALUE>, which
+ is allocated in RESULT_POOL.
+
+ If REVISION is SVN_INVALID_REVNUM, then the properties are fetched
+ from HEAD for URL.
+
+ This function performs the request synchronously.
+
+ Temporary allocations are made in SCRATCH_POOL. */
+svn_error_t *
+svn_ra_serf__fetch_node_props(apr_hash_t **results,
+ svn_ra_serf__connection_t *conn,
+ const char *url,
+ svn_revnum_t revision,
+ const svn_ra_serf__dav_props_t *which_props,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
+/* Using CONN, fetch a DAV: property from the resource identified by URL
+ within REVISION. The PROPNAME may be one of:
+
+ "checked-in"
+ "href"
+
+ The resulting value will be allocated in RESULT_POOL, and may be NULL
+ if the property does not exist (note: "href" always exists).
+
+ This function performs the request synchronously.
+
+ Temporary allocations are made in SCRATCH_POOL. */
+svn_error_t *
+svn_ra_serf__fetch_dav_prop(const char **value,
+ svn_ra_serf__connection_t *conn,
+ const char *url,
+ svn_revnum_t revision,
+ const char *propname,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
/* Set PROPS for PATH at REV revision with a NS:NAME VAL.
*
* The POOL governs allocation.
@@ -983,6 +1197,15 @@ svn_ra_serf__walk_all_props(apr_hash_t *props,
void *baton,
apr_pool_t *pool);
+
+/* Like walk_all_props(), but a 2-level hash. */
+svn_error_t *
+svn_ra_serf__walk_node_props(apr_hash_t *props,
+ svn_ra_serf__walker_visitor_t walker,
+ void *baton,
+ apr_pool_t *scratch_pool);
+
+
typedef svn_error_t *
(*svn_ra_serf__path_rev_walker_t)(void *baton,
const char *path, apr_ssize_t path_len,
@@ -1021,9 +1244,8 @@ svn_ra_serf__select_revprops(apr_hash_t **revprops,
apr_pool_t *scratch_pool);
-/* PROPS is nested hash tables mapping REV -> PATH -> NS -> NAME -> VALUE.
- This function takes the tree of tables identified by PATH and REVISION
- (resulting in NS:NAME:VALUE hashes) and flattens them into a set of
+/* PROPS is nested hash tables mapping NS -> NAME -> VALUE.
+ This function takes the NS:NAME:VALUE hashes and flattens them into a set of
names to VALUE. The names are composed of NS:NAME, with specific
rewrite from wire names (DAV) to SVN names. This mapping is managed
by the svn_ra_serf__set_baton_props() function.
@@ -1036,8 +1258,6 @@ svn_ra_serf__select_revprops(apr_hash_t **revprops,
svn_error_t *
svn_ra_serf__flatten_props(apr_hash_t **flat_props,
apr_hash_t *props,
- const char *path,
- svn_revnum_t revision,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
@@ -1078,24 +1298,11 @@ svn_ra_serf__set_prop(apr_hash_t *props, const char *path,
svn_error_t *
svn_ra_serf__get_resource_type(svn_node_kind_t *kind,
- apr_hash_t *props,
- const char *url,
- svn_revnum_t revision);
+ apr_hash_t *props);
/** MERGE-related functions **/
-typedef struct svn_ra_serf__merge_context_t svn_ra_serf__merge_context_t;
-
-svn_boolean_t*
-svn_ra_serf__merge_get_done_ptr(svn_ra_serf__merge_context_t *ctx);
-
-svn_commit_info_t*
-svn_ra_serf__merge_get_commit_info(svn_ra_serf__merge_context_t *ctx);
-
-int
-svn_ra_serf__merge_get_status(svn_ra_serf__merge_context_t *ctx);
-
void
svn_ra_serf__merge_lock_token_list(apr_hash_t *lock_tokens,
const char *parent,
@@ -1109,38 +1316,56 @@ svn_ra_serf__merge_lock_token_list(apr_hash_t *lock_tokens,
client. If KEEP_LOCKS is set, instruct the server to not release
locks set on the paths included in this commit. */
svn_error_t *
-svn_ra_serf__merge_create_req(svn_ra_serf__merge_context_t **merge_ctx,
- svn_ra_serf__session_t *session,
- svn_ra_serf__connection_t *conn,
- const char *merge_resource_url,
- apr_hash_t *lock_tokens,
- svn_boolean_t keep_locks,
- apr_pool_t *pool);
+svn_ra_serf__run_merge(const svn_commit_info_t **commit_info,
+ int *response_code,
+ svn_ra_serf__session_t *session,
+ svn_ra_serf__connection_t *conn,
+ const char *merge_resource_url,
+ apr_hash_t *lock_tokens,
+ svn_boolean_t keep_locks,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
/** OPTIONS-related functions **/
-typedef struct svn_ra_serf__options_context_t svn_ra_serf__options_context_t;
+/* When running with a proxy, we may need to detect and correct for problems.
+ This probing function will send a simple OPTIONS request to detect problems
+ with the connection. */
+svn_error_t *
+svn_ra_serf__probe_proxy(svn_ra_serf__session_t *serf_sess,
+ apr_pool_t *scratch_pool);
-/* Is this OPTIONS-request done yet? */
-svn_boolean_t*
-svn_ra_serf__get_options_done_ptr(svn_ra_serf__options_context_t *ctx);
-const char *
-svn_ra_serf__options_get_activity_collection(svn_ra_serf__options_context_t *ctx);
+/* On HTTPv2 connections, run an OPTIONS request over CONN to fetch the
+ current youngest revnum, returning it in *YOUNGEST.
+
+ (the revnum is headers of the OPTIONS response)
-svn_revnum_t
-svn_ra_serf__options_get_youngest_rev(svn_ra_serf__options_context_t *ctx);
+ This function performs the request synchronously.
-/* Create an OPTIONS request. When run, ask for an
- activity-collection-set in the request body (retrievable via
- accessor above) and also parse the server's capability headers into
- the SESSION->capabilites hash. */
+ All temporary allocations will be made in SCRATCH_POOL. */
svn_error_t *
-svn_ra_serf__create_options_req(svn_ra_serf__options_context_t **opt_ctx,
- svn_ra_serf__session_t *session,
- svn_ra_serf__connection_t *conn,
- const char *path,
- apr_pool_t *pool);
+svn_ra_serf__v2_get_youngest_revnum(svn_revnum_t *youngest,
+ svn_ra_serf__connection_t *conn,
+ apr_pool_t *scratch_pool);
+
+
+/* On HTTPv1 connections, run an OPTIONS request over CONN to fetch the
+ activity collection set and return it in *ACTIVITY_URL, allocated
+ from RESULT_POOL.
+
+ (the activity-collection-set is in the body of the OPTIONS response)
+
+ This function performs the request synchronously.
+
+ All temporary allocations will be made in SCRATCH_POOL. */
+svn_error_t *
+svn_ra_serf__v1_get_activity_collection(const char **activity_url,
+ svn_ra_serf__connection_t *conn,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
/* Set @a VCC_URL to the default VCC for our repository based on @a
* ORIG_PATH for the session @a SESSION, ensuring that the VCC URL and
@@ -1180,34 +1405,63 @@ svn_ra_serf__get_relative_path(const char **rel_path,
svn_ra_serf__connection_t *conn,
apr_pool_t *pool);
-/* Set *BC_URL to the baseline collection url, and set *BC_RELATIVE to
- * the path relative to that url for URL in REVISION using SESSION.
- * BC_RELATIVE will be URI decoded.
- *
- * REVISION may be SVN_INVALID_REVNUM (to mean "the current HEAD
- * revision"). If URL is NULL, use SESSION's session url.
- *
- * If LATEST_REVNUM is not NULL, set it to the baseline revision. If
- * REVISION was set to SVN_INVALID_REVNUM, this will return the current
- * HEAD revision.
- *
- * If non-NULL, use CONN for communications with the server;
- * otherwise, use the default connection.
- *
- * Use POOL for all allocations.
- */
+
+/* Using the default connection in SESSION (conns[0]), get the youngest
+ revnum from the server, returning it in *YOUNGEST.
+
+ This function operates synchronously.
+
+ All temporary allocations are performed in SCRATCH_POOL. */
svn_error_t *
-svn_ra_serf__get_baseline_info(const char **bc_url,
- const char **bc_relative,
- svn_ra_serf__session_t *session,
- svn_ra_serf__connection_t *conn,
- const char *url,
- svn_revnum_t revision,
- svn_revnum_t *latest_revnum,
- apr_pool_t *pool);
+svn_ra_serf__get_youngest_revnum(svn_revnum_t *youngest,
+ svn_ra_serf__session_t *session,
+ apr_pool_t *scratch_pool);
+
+
+/* Generate a revision-stable URL.
+
+ The RA APIs all refer to user/public URLs that float along with the
+ youngest revision. In many cases, we do NOT want to work with that URL
+ since it can change from one moment to the next. Especially if we
+ attempt to operation against multiple floating URLs -- we could end up
+ referring to two separate revisions.
+
+ The DAV RA provider(s) solve this by generating a URL that is specific
+ to a revision by using a URL into a "baseline collection".
+
+ For a specified SESSION, with an optional CONN (if NULL, then the
+ session's default connection will be used; specifically SESSION->conns[0]),
+ generate a revision-stable URL for URL at REVISION. If REVISION is
+ SVN_INVALID_REVNUM, then the stable URL will refer to the youngest
+ revision at the time this function was called.
+
+ If URL is NULL, then the session root will be used.
+
+ The stable URL will be placed into *STABLE_URL, allocated from RESULT_POOL.
+
+ If LATEST_REVNUM is not NULL, then the revision used will be placed into
+ *LATEST_REVNUM. That will be equal to youngest, or the given REVISION.
+
+ This function operates synchronously, if any communication to the server
+ is required. Communication is needed if REVISION is SVN_INVALID_REVNUM
+ (to get the current youngest revnum), or if the specified REVISION is not
+ (yet) in our cache of baseline collections.
+
+ All temporary allocations are performed in SCRATCH_POOL. */
+svn_error_t *
+svn_ra_serf__get_stable_url(const char **stable_url,
+ svn_revnum_t *latest_revnum,
+ svn_ra_serf__session_t *session,
+ svn_ra_serf__connection_t *conn,
+ const char *url,
+ svn_revnum_t revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
/** RA functions **/
+/* Implements svn_ra__vtable_t.get_log(). */
svn_error_t *
svn_ra_serf__get_log(svn_ra_session_t *session,
const apr_array_header_t *paths,
@@ -1222,6 +1476,7 @@ svn_ra_serf__get_log(svn_ra_session_t *session,
void *receiver_baton,
apr_pool_t *pool);
+/* Implements svn_ra__vtable_t.get_locations(). */
svn_error_t *
svn_ra_serf__get_locations(svn_ra_session_t *session,
apr_hash_t **locations,
@@ -1230,6 +1485,7 @@ svn_ra_serf__get_locations(svn_ra_session_t *session,
const apr_array_header_t *location_revisions,
apr_pool_t *pool);
+/* Implements svn_ra__vtable_t.get_location_segments(). */
svn_error_t *
svn_ra_serf__get_location_segments(svn_ra_session_t *session,
const char *path,
@@ -1240,6 +1496,7 @@ svn_ra_serf__get_location_segments(svn_ra_session_t *session,
void *receiver_baton,
apr_pool_t *pool);
+/* Implements svn_ra__vtable_t.do_diff(). */
svn_error_t *
svn_ra_serf__do_diff(svn_ra_session_t *session,
const svn_ra_reporter3_t **reporter,
@@ -1254,6 +1511,7 @@ svn_ra_serf__do_diff(svn_ra_session_t *session,
void *diff_baton,
apr_pool_t *pool);
+/* Implements svn_ra__vtable_t.do_status(). */
svn_error_t *
svn_ra_serf__do_status(svn_ra_session_t *ra_session,
const svn_ra_reporter3_t **reporter,
@@ -1265,6 +1523,7 @@ svn_ra_serf__do_status(svn_ra_session_t *ra_session,
void *status_baton,
apr_pool_t *pool);
+/* Implements svn_ra__vtable_t.do_update(). */
svn_error_t *
svn_ra_serf__do_update(svn_ra_session_t *ra_session,
const svn_ra_reporter3_t **reporter,
@@ -1273,10 +1532,13 @@ svn_ra_serf__do_update(svn_ra_session_t *ra_session,
const char *update_target,
svn_depth_t depth,
svn_boolean_t send_copyfrom_args,
+ svn_boolean_t ignore_ancestry,
const svn_delta_editor_t *update_editor,
void *update_baton,
- apr_pool_t *pool);
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+/* Implements svn_ra__vtable_t.do_switch(). */
svn_error_t *
svn_ra_serf__do_switch(svn_ra_session_t *ra_session,
const svn_ra_reporter3_t **reporter,
@@ -1285,10 +1547,14 @@ svn_ra_serf__do_switch(svn_ra_session_t *ra_session,
const char *switch_target,
svn_depth_t depth,
const char *switch_url,
+ svn_boolean_t send_copyfrom_args,
+ svn_boolean_t ignore_ancestry,
const svn_delta_editor_t *switch_editor,
void *switch_baton,
- apr_pool_t *pool);
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+/* Implements svn_ra__vtable_t.get_file_revs(). */
svn_error_t *
svn_ra_serf__get_file_revs(svn_ra_session_t *session,
const char *path,
@@ -1299,12 +1565,14 @@ svn_ra_serf__get_file_revs(svn_ra_session_t *session,
void *handler_baton,
apr_pool_t *pool);
+/* Implements svn_ra__vtable_t.get_dated_revision(). */
svn_error_t *
svn_ra_serf__get_dated_revision(svn_ra_session_t *session,
svn_revnum_t *revision,
apr_time_t tm,
apr_pool_t *pool);
+/* Implements svn_ra__vtable_t.get_commit_editor(). */
svn_error_t *
svn_ra_serf__get_commit_editor(svn_ra_session_t *session,
const svn_delta_editor_t **editor,
@@ -1316,6 +1584,7 @@ svn_ra_serf__get_commit_editor(svn_ra_session_t *session,
svn_boolean_t keep_locks,
apr_pool_t *pool);
+/* Implements svn_ra__vtable_t.get_file(). */
svn_error_t *
svn_ra_serf__get_file(svn_ra_session_t *session,
const char *path,
@@ -1325,6 +1594,7 @@ svn_ra_serf__get_file(svn_ra_session_t *session,
apr_hash_t **props,
apr_pool_t *pool);
+/* Implements svn_ra__vtable_t.change_rev_prop(). */
svn_error_t *
svn_ra_serf__change_rev_prop(svn_ra_session_t *session,
svn_revnum_t rev,
@@ -1333,6 +1603,7 @@ svn_ra_serf__change_rev_prop(svn_ra_session_t *session,
const svn_string_t *value,
apr_pool_t *pool);
+/* Implements svn_ra__vtable_t.replay(). */
svn_error_t *
svn_ra_serf__replay(svn_ra_session_t *ra_session,
svn_revnum_t revision,
@@ -1342,6 +1613,7 @@ svn_ra_serf__replay(svn_ra_session_t *ra_session,
void *edit_baton,
apr_pool_t *pool);
+/* Implements svn_ra__vtable_t.replay_range(). */
svn_error_t *
svn_ra_serf__replay_range(svn_ra_session_t *ra_session,
svn_revnum_t start_revision,
@@ -1353,6 +1625,7 @@ svn_ra_serf__replay_range(svn_ra_session_t *ra_session,
void *replay_baton,
apr_pool_t *pool);
+/* Implements svn_ra__vtable_t.lock(). */
svn_error_t *
svn_ra_serf__lock(svn_ra_session_t *ra_session,
apr_hash_t *path_revs,
@@ -1362,6 +1635,7 @@ svn_ra_serf__lock(svn_ra_session_t *ra_session,
void *lock_baton,
apr_pool_t *pool);
+/* Implements svn_ra__vtable_t.unlock(). */
svn_error_t *
svn_ra_serf__unlock(svn_ra_session_t *ra_session,
apr_hash_t *path_tokens,
@@ -1370,12 +1644,14 @@ svn_ra_serf__unlock(svn_ra_session_t *ra_session,
void *lock_baton,
apr_pool_t *pool);
+/* Implements svn_ra__vtable_t.get_lock(). */
svn_error_t *
svn_ra_serf__get_lock(svn_ra_session_t *ra_session,
svn_lock_t **lock,
const char *path,
apr_pool_t *pool);
+/* Implements svn_ra__vtable_t.get_locks(). */
svn_error_t *
svn_ra_serf__get_locks(svn_ra_session_t *ra_session,
apr_hash_t **locks,
@@ -1383,14 +1659,19 @@ svn_ra_serf__get_locks(svn_ra_session_t *ra_session,
svn_depth_t depth,
apr_pool_t *pool);
-svn_error_t * svn_ra_serf__get_mergeinfo(
- svn_ra_session_t *ra_session,
- apr_hash_t **mergeinfo,
- const apr_array_header_t *paths,
- svn_revnum_t revision,
- svn_mergeinfo_inheritance_t inherit,
- svn_boolean_t include_descendants,
- apr_pool_t *pool);
+/* Request a mergeinfo-report from the URL attached to SESSION,
+ and fill in the MERGEINFO hash with the results.
+
+ Implements svn_ra__vtable_t.get_mergeinfo().
+ */
+svn_error_t *
+svn_ra_serf__get_mergeinfo(svn_ra_session_t *ra_session,
+ apr_hash_t **mergeinfo,
+ const apr_array_header_t *paths,
+ svn_revnum_t revision,
+ svn_mergeinfo_inheritance_t inherit,
+ svn_boolean_t include_descendants,
+ apr_pool_t *pool);
/* Exchange capabilities with the server, by sending an OPTIONS
* request announcing the client's capabilities, and by filling
@@ -1409,14 +1690,14 @@ svn_ra_serf__exchange_capabilities(svn_ra_serf__session_t *serf_sess,
const char **corrected_url,
apr_pool_t *pool);
-/* Implements the has_capability RA layer function. */
+/* Implements svn_ra__vtable_t.has_capability(). */
svn_error_t *
svn_ra_serf__has_capability(svn_ra_session_t *ra_session,
svn_boolean_t *has,
const char *capability,
apr_pool_t *pool);
-/* Implements the get_deleted_rev RA layer function. */
+/* Implements svn_ra__vtable_t.get_deleted_rev(). */
svn_error_t *
svn_ra_serf__get_deleted_rev(svn_ra_session_t *session,
const char *path,
@@ -1425,6 +1706,25 @@ svn_ra_serf__get_deleted_rev(svn_ra_session_t *session,
svn_revnum_t *revision_deleted,
apr_pool_t *pool);
+/* Implements the get_inherited_props RA layer function. */
+svn_error_t * svn_ra_serf__get_inherited_props(svn_ra_session_t *session,
+ apr_array_header_t **iprops,
+ const char *path,
+ svn_revnum_t revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Implements svn_ra__vtable_t.get_repos_root(). */
+svn_error_t *
+svn_ra_serf__get_repos_root(svn_ra_session_t *ra_session,
+ const char **url,
+ apr_pool_t *pool);
+
+/* Implements svn_ra__vtable_t.register_editor_shim_callbacks(). */
+svn_error_t *
+svn_ra_serf__register_editor_shim_callbacks(svn_ra_session_t *session,
+ svn_delta_shim_callbacks_t *callbacks);
+
/*** Authentication handler declarations ***/
/**
@@ -1447,10 +1747,40 @@ svn_ra_serf__credentials_callback(char **username, char **password,
* where it necessary.
*/
svn_error_t *
-svn_ra_serf__error_on_status(int status_code,
+svn_ra_serf__error_on_status(serf_status_line sline,
const char *path,
const char *location);
+/* ###? */
+svn_error_t *
+svn_ra_serf__copy_into_spillbuf(svn_spillbuf_t **spillbuf,
+ serf_bucket_t *bkt,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* ###? */
+serf_bucket_t *
+svn_ra_serf__create_sb_bucket(svn_spillbuf_t *spillbuf,
+ serf_bucket_alloc_t *allocator,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/** Wrap STATUS from an serf function. If STATUS is not serf error code,
+ * this is equivalent to svn_error_wrap_apr().
+ */
+svn_error_t *
+svn_ra_serf__wrap_err(apr_status_t status,
+ const char *fmt,
+ ...);
+
+
+#if defined(SVN_DEBUG)
+/* Wrapper macros to collect file and line information */
+#define svn_ra_serf__wrap_err \
+ (svn_error__locate(__FILE__,__LINE__), (svn_ra_serf__wrap_err))
+
+#endif
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/libsvn_ra_serf/replay.c b/subversion/libsvn_ra_serf/replay.c
index 36b3dca..66e2f58 100644
--- a/subversion/libsvn_ra_serf/replay.c
+++ b/subversion/libsvn_ra_serf/replay.c
@@ -24,9 +24,6 @@
#include <apr_uri.h>
-
-#include <expat.h>
-
#include <serf.h>
#include "svn_pools.h"
@@ -40,6 +37,8 @@
#include "svn_path.h"
#include "svn_private_config.h"
+#include "private/svn_string_private.h"
+
#include "ra_serf.h"
@@ -83,8 +82,7 @@ typedef struct prop_info_t {
const char *name;
svn_boolean_t del_prop;
- const char *data;
- apr_size_t len;
+ svn_stringbuf_t *prop_value;
replay_info_t *parent;
} prop_info_t;
@@ -92,8 +90,6 @@ typedef struct prop_info_t {
typedef struct replay_context_t {
apr_pool_t *src_rev_pool;
apr_pool_t *dst_rev_pool;
- /*file_pool is cleared after completion of each file. */
- apr_pool_t *file_pool;
/* Are we done fetching this file? */
svn_boolean_t done;
@@ -109,16 +105,17 @@ typedef struct replay_context_t {
const svn_delta_editor_t *editor;
void *editor_baton;
- /* current revision */
+ /* Path and revision used to filter replayed changes. If
+ INCLUDE_PATH is non-NULL, REVISION is unnecessary and will not be
+ included in the replay REPORT. (Because the REPORT is being
+ aimed an HTTP v2 revision resource.) */
+ const char *include_path;
svn_revnum_t revision;
/* Information needed to create the replay report body */
svn_revnum_t low_water_mark;
svn_boolean_t send_deltas;
- /* Cached report target url */
- const char *report_target;
-
/* Target and revision to fetch revision properties on */
const char *revprop_target;
svn_revnum_t revprop_rev;
@@ -130,8 +127,9 @@ typedef struct replay_context_t {
/* Keep a reference to the XML parser ctx to report any errors. */
svn_ra_serf__xml_parser_t *parser_ctx;
- /* The propfind for the revision properties of the current revision */
- svn_ra_serf__propfind_context_t *prop_ctx;
+ /* Handlers for the PROPFIND and REPORT for the current revision. */
+ svn_ra_serf__handler_t *propfind_handler;
+ svn_ra_serf__handler_t *report_handler;
} replay_context_t;
@@ -147,10 +145,11 @@ push_state(svn_ra_serf__xml_parser_t *parser,
state == OPEN_FILE || state == ADD_FILE)
{
replay_info_t *info;
+ apr_pool_t *pool = svn_pool_create(replay_ctx->dst_rev_pool);
- info = apr_palloc(replay_ctx->dst_rev_pool, sizeof(*info));
+ info = apr_palloc(pool, sizeof(*info));
- info->pool = replay_ctx->dst_rev_pool;
+ info->pool = pool;
info->parent = parser->state->private;
info->baton = NULL;
info->stream = NULL;
@@ -160,11 +159,13 @@ push_state(svn_ra_serf__xml_parser_t *parser,
else if (state == CHANGE_PROP)
{
prop_info_t *info;
+ apr_pool_t *pool = svn_pool_create(replay_ctx->dst_rev_pool);
- info = apr_pcalloc(replay_ctx->dst_rev_pool, sizeof(*info));
+ info = apr_pcalloc(pool, sizeof(*info));
- info->pool = replay_ctx->dst_rev_pool;
+ info->pool = pool;
info->parent = parser->state->private;
+ info->prop_value = svn_stringbuf_create_empty(pool);
parser->state->private = info;
}
@@ -174,11 +175,11 @@ push_state(svn_ra_serf__xml_parser_t *parser,
static svn_error_t *
start_replay(svn_ra_serf__xml_parser_t *parser,
- void *userData,
svn_ra_serf__dav_props_t name,
- const char **attrs)
+ const char **attrs,
+ apr_pool_t *scratch_pool)
{
- replay_context_t *ctx = userData;
+ replay_context_t *ctx = parser->user_data;
replay_state_e state;
state = parser->state->current_state;
@@ -189,20 +190,17 @@ start_replay(svn_ra_serf__xml_parser_t *parser,
push_state(parser, ctx, REPORT);
/* Before we can continue, we need the revision properties. */
- SVN_ERR_ASSERT(!ctx->prop_ctx
- || svn_ra_serf__propfind_is_done(ctx->prop_ctx));
+ SVN_ERR_ASSERT(!ctx->propfind_handler || ctx->propfind_handler->done);
/* Create a pool for the commit editor. */
ctx->dst_rev_pool = svn_pool_create(ctx->src_rev_pool);
- ctx->file_pool = svn_pool_create(ctx->dst_rev_pool);
- /* ### it would be nice to have a proper scratch_pool. */
SVN_ERR(svn_ra_serf__select_revprops(&ctx->props,
ctx->revprop_target,
ctx->revprop_rev,
ctx->revs_props,
ctx->dst_rev_pool,
- ctx->dst_rev_pool));
+ scratch_pool));
if (ctx->revstart_func)
{
@@ -226,7 +224,7 @@ start_replay(svn_ra_serf__xml_parser_t *parser,
SVN_ERR(ctx->editor->set_target_revision(ctx->editor_baton,
SVN_STR_TO_REV(rev),
- ctx->dst_rev_pool));
+ scratch_pool));
}
else if (state == REPORT &&
strcmp(name.name, "open-root") == 0)
@@ -271,7 +269,7 @@ start_replay(svn_ra_serf__xml_parser_t *parser,
info = push_state(parser, ctx, DELETE_ENTRY);
SVN_ERR(ctx->editor->delete_entry(file_name, SVN_STR_TO_REV(rev),
- info->baton, ctx->dst_rev_pool));
+ info->baton, scratch_pool));
svn_ra_serf__xml_pop_state(parser);
}
@@ -332,9 +330,11 @@ start_replay(svn_ra_serf__xml_parser_t *parser,
{
replay_info_t *info = parser->state->private;
- SVN_ERR(ctx->editor->close_directory(info->baton, ctx->dst_rev_pool));
+ SVN_ERR(ctx->editor->close_directory(info->baton, scratch_pool));
svn_ra_serf__xml_pop_state(parser);
+
+ svn_pool_destroy(info->pool);
}
else if ((state == OPEN_DIR || state == ADD_DIR) &&
strcmp(name.name, "open-file") == 0)
@@ -342,7 +342,6 @@ start_replay(svn_ra_serf__xml_parser_t *parser,
const char *file_name, *rev;
replay_info_t *info;
- svn_pool_clear(ctx->file_pool);
file_name = svn_xml_get_attr_value("name", attrs);
if (!file_name)
{
@@ -360,7 +359,7 @@ start_replay(svn_ra_serf__xml_parser_t *parser,
SVN_ERR(ctx->editor->open_file(file_name, info->parent->baton,
SVN_STR_TO_REV(rev),
- ctx->file_pool, &info->baton));
+ info->pool, &info->baton));
}
else if ((state == OPEN_DIR || state == ADD_DIR) &&
strcmp(name.name, "add-file") == 0)
@@ -369,7 +368,6 @@ start_replay(svn_ra_serf__xml_parser_t *parser,
svn_revnum_t rev;
replay_info_t *info;
- svn_pool_clear(ctx->file_pool);
file_name = svn_xml_get_attr_value("name", attrs);
if (!file_name)
{
@@ -388,7 +386,7 @@ start_replay(svn_ra_serf__xml_parser_t *parser,
SVN_ERR(ctx->editor->add_file(file_name, info->parent->baton,
copyfrom, rev,
- ctx->file_pool, &info->baton));
+ info->pool, &info->baton));
}
else if ((state == OPEN_FILE || state == ADD_FILE) &&
strcmp(name.name, "apply-textdelta") == 0)
@@ -408,7 +406,7 @@ start_replay(svn_ra_serf__xml_parser_t *parser,
}
SVN_ERR(ctx->editor->apply_textdelta(info->baton, checksum,
- ctx->file_pool,
+ info->pool,
&textdelta,
&textdelta_baton));
@@ -424,10 +422,11 @@ start_replay(svn_ra_serf__xml_parser_t *parser,
checksum = svn_xml_get_attr_value("checksum", attrs);
- SVN_ERR(ctx->editor->close_file(info->baton, checksum,
- ctx->file_pool));
+ SVN_ERR(ctx->editor->close_file(info->baton, checksum, scratch_pool));
svn_ra_serf__xml_pop_state(parser);
+
+ svn_pool_destroy(info->pool);
}
else if (((state == OPEN_FILE || state == ADD_FILE) &&
strcmp(name.name, "change-file-prop") == 0) ||
@@ -453,14 +452,13 @@ start_replay(svn_ra_serf__xml_parser_t *parser,
else
info->del_prop = FALSE;
+ info->name = apr_pstrdup(info->pool, prop_name);
if (state == OPEN_FILE || state == ADD_FILE)
{
- info->name = apr_pstrdup(ctx->file_pool, prop_name);
info->change = ctx->editor->change_file_prop;
}
else
{
- info->name = apr_pstrdup(ctx->dst_rev_pool, prop_name);
info->change = ctx->editor->change_dir_prop;
}
@@ -471,14 +469,12 @@ start_replay(svn_ra_serf__xml_parser_t *parser,
static svn_error_t *
end_replay(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name)
+ svn_ra_serf__dav_props_t name,
+ apr_pool_t *scratch_pool)
{
- replay_context_t *ctx = userData;
+ replay_context_t *ctx = parser->user_data;
replay_state_e state;
- UNUSED_CTX(ctx);
-
state = parser->state->current_state;
if (state == REPORT &&
@@ -535,20 +531,21 @@ end_replay(svn_ra_serf__xml_parser_t *parser,
}
else
{
- svn_string_t tmp_prop;
+ const svn_string_t *morph;
- tmp_prop.data = info->data;
- tmp_prop.len = info->len;
+ morph = svn_stringbuf__morph_into_string(info->prop_value);
+#ifdef SVN_DEBUG
+ info->prop_value = NULL; /* morph killed the stringbuf. */
+#endif
- if (strcmp(name.name, "change-file-prop") == 0)
- prop_val = svn_base64_decode_string(&tmp_prop, ctx->file_pool);
- else
- prop_val = svn_base64_decode_string(&tmp_prop, ctx->dst_rev_pool);
+ prop_val = svn_base64_decode_string(morph, info->pool);
}
SVN_ERR(info->change(info->parent->baton, info->name, prop_val,
info->parent->pool));
svn_ra_serf__xml_pop_state(parser);
+
+ svn_pool_destroy(info->pool);
}
return SVN_NO_ERROR;
@@ -556,11 +553,11 @@ end_replay(svn_ra_serf__xml_parser_t *parser,
static svn_error_t *
cdata_replay(svn_ra_serf__xml_parser_t *parser,
- void *userData,
const char *data,
- apr_size_t len)
+ apr_size_t len,
+ apr_pool_t *scratch_pool)
{
- replay_context_t *replay_ctx = userData;
+ replay_context_t *replay_ctx = parser->user_data;
replay_state_e state;
UNUSED_CTX(replay_ctx);
@@ -584,8 +581,7 @@ cdata_replay(svn_ra_serf__xml_parser_t *parser,
{
prop_info_t *info = parser->state->private;
- svn_ra_serf__expand_string(&info->data, &info->len,
- data, len, parser->state->pool);
+ svn_stringbuf_appendbytes(info->prop_value, data, len);
}
return SVN_NO_ERROR;
@@ -607,10 +603,22 @@ create_replay_body(serf_bucket_t **bkt,
"xmlns:S", SVN_XML_NAMESPACE,
NULL);
- svn_ra_serf__add_tag_buckets(body_bkt,
- "S:revision",
- apr_ltoa(ctx->src_rev_pool, ctx->revision),
- alloc);
+ /* If we have a non-NULL include path, we add it to the body and
+ omit the revision; otherwise, the reverse. */
+ if (ctx->include_path)
+ {
+ svn_ra_serf__add_tag_buckets(body_bkt,
+ "S:include-path",
+ ctx->include_path,
+ alloc);
+ }
+ else
+ {
+ svn_ra_serf__add_tag_buckets(body_bkt,
+ "S:revision",
+ apr_ltoa(ctx->src_rev_pool, ctx->revision),
+ alloc);
+ }
svn_ra_serf__add_tag_buckets(body_bkt,
"S:low-water-mark",
apr_ltoa(ctx->src_rev_pool, ctx->low_water_mark),
@@ -642,10 +650,6 @@ svn_ra_serf__replay(svn_ra_session_t *ra_session,
svn_ra_serf__xml_parser_t *parser_ctx;
svn_error_t *err;
const char *report_target;
- /* We're not really interested in the status code here in replay, but
- the XML parsing code will abort on error if it doesn't have a place
- to store the response status code. */
- int status_code;
SVN_ERR(svn_ra_serf__report_resource(&report_target, session, NULL, pool));
@@ -657,13 +661,13 @@ svn_ra_serf__replay(svn_ra_session_t *ra_session,
replay_ctx->revision = revision;
replay_ctx->low_water_mark = low_water_mark;
replay_ctx->send_deltas = send_deltas;
- replay_ctx->report_target = report_target;
replay_ctx->revs_props = apr_hash_make(replay_ctx->src_rev_pool);
handler = apr_pcalloc(pool, sizeof(*handler));
+ handler->handler_pool = pool;
handler->method = "REPORT";
- handler->path = session->session_url_str;
+ handler->path = session->session_url.path;
handler->body_delegate = create_replay_body;
handler->body_delegate_baton = replay_ctx;
handler->body_type = "text/xml";
@@ -677,7 +681,6 @@ svn_ra_serf__replay(svn_ra_session_t *ra_session,
parser_ctx->start = start_replay;
parser_ctx->end = end_replay;
parser_ctx->cdata = cdata_replay;
- parser_ctx->status_code = &status_code;
parser_ctx->done = &replay_ctx->done;
handler->response_handler = svn_ra_serf__handle_xml_parser;
@@ -685,12 +688,17 @@ svn_ra_serf__replay(svn_ra_session_t *ra_session,
/* This is only needed to handle errors during XML parsing. */
replay_ctx->parser_ctx = parser_ctx;
+ replay_ctx->report_handler = handler; /* unused */
svn_ra_serf__request_create(handler);
err = svn_ra_serf__context_run_wait(&replay_ctx->done, session, pool);
- SVN_ERR(err);
+ SVN_ERR(svn_error_compose_create(
+ svn_ra_serf__error_on_status(handler->sline,
+ handler->path,
+ handler->location),
+ err));
return SVN_NO_ERROR;
}
@@ -707,8 +715,8 @@ svn_ra_serf__replay(svn_ra_session_t *ra_session,
* optimally. Originally we used 5 as the max. number of outstanding
* requests, but this turned out to be too low.
*
- * Serf doesn't exit out of the serf_context_run loop as long as it
- * has data to send or receive. With small responses (revs of a few
+ * Serf doesn't exit out of the svn_ra_serf__context_run_wait loop as long as
+ * it has data to send or receive. With small responses (revs of a few
* kB), serf doesn't come out of this loop at all. So with
* MAX_OUTSTANDING_REQUESTS set to a low number, there's a big chance
* that serf handles those requests completely in its internal loop,
@@ -741,20 +749,44 @@ svn_ra_serf__replay_range(svn_ra_session_t *ra_session,
svn_revnum_t rev = start_revision;
const char *report_target;
int active_reports = 0;
+ const char *include_path;
SVN_ERR(svn_ra_serf__report_resource(&report_target, session, NULL, pool));
+ /* Prior to 1.8, mod_dav_svn expect to get replay REPORT requests
+ aimed at the session URL. But that's incorrect -- these reports
+ aren't about specific resources -- they are above revisions. The
+ path-based filtering offered by this API is just that: a filter
+ applied to the full set of changes made in the revision. As
+ such, the correct target for these REPORT requests is the "me
+ resource" (or, pre-http-v2, the default VCC).
+
+ Our server should have told us if it supported this protocol
+ correction. If so, we aimed our report at the correct resource
+ and include the filtering path as metadata within the report
+ body. Otherwise, we fall back to the pre-1.8 behavior and just
+ wish for the best.
+
+ See issue #4287:
+ http://subversion.tigris.org/issues/show_bug.cgi?id=4287
+ */
+ if (session->supports_rev_rsrc_replay)
+ {
+ SVN_ERR(svn_ra_serf__get_relative_path(&include_path,
+ session->session_url.path,
+ session, session->conns[0],
+ pool));
+ }
+ else
+ {
+ include_path = NULL;
+ }
+
while (active_reports || rev <= end_revision)
{
- apr_status_t status;
- svn_error_t *err;
svn_ra_serf__list_t *done_list;
svn_ra_serf__list_t *done_reports = NULL;
replay_context_t *replay_ctx;
- /* We're not really interested in the status code here in replay, but
- the XML parsing code will abort on error if it doesn't have a place
- to store the response status code. */
- int status_code;
if (session->cancel_func)
SVN_ERR(session->cancel_func(session->cancel_baton));
@@ -766,6 +798,7 @@ svn_ra_serf__replay_range(svn_ra_session_t *ra_session,
svn_ra_serf__handler_t *handler;
svn_ra_serf__xml_parser_t *parser_ctx;
apr_pool_t *ctx_pool = svn_pool_create(pool);
+ const char *replay_target;
replay_ctx = apr_pcalloc(ctx_pool, sizeof(*replay_ctx));
replay_ctx->src_rev_pool = ctx_pool;
@@ -773,19 +806,20 @@ svn_ra_serf__replay_range(svn_ra_session_t *ra_session,
replay_ctx->revfinish_func = revfinish_func;
replay_ctx->replay_baton = replay_baton;
replay_ctx->done = FALSE;
+ replay_ctx->include_path = include_path;
replay_ctx->revision = rev;
replay_ctx->low_water_mark = low_water_mark;
replay_ctx->send_deltas = send_deltas;
replay_ctx->done_item.data = replay_ctx;
+
/* Request all properties of a certain revision. */
- replay_ctx->report_target = report_target;
replay_ctx->revs_props = apr_hash_make(replay_ctx->src_rev_pool);
if (SVN_RA_SERF__HAVE_HTTPV2_SUPPORT(session))
- {
- replay_ctx->revprop_target = apr_psprintf(pool, "%s/%ld",
- session->rev_stub, rev);
- replay_ctx->revprop_rev = SVN_INVALID_REVNUM;
+ {
+ replay_ctx->revprop_target = apr_psprintf(pool, "%s/%ld",
+ session->rev_stub, rev);
+ replay_ctx->revprop_rev = SVN_INVALID_REVNUM;
}
else
{
@@ -793,7 +827,7 @@ svn_ra_serf__replay_range(svn_ra_session_t *ra_session,
replay_ctx->revprop_rev = rev;
}
- SVN_ERR(svn_ra_serf__deliver_props(&replay_ctx->prop_ctx,
+ SVN_ERR(svn_ra_serf__deliver_props(&replay_ctx->propfind_handler,
replay_ctx->revs_props, session,
session->conns[0],
replay_ctx->revprop_target,
@@ -802,11 +836,25 @@ svn_ra_serf__replay_range(svn_ra_session_t *ra_session,
NULL,
replay_ctx->src_rev_pool));
- /* Send the replay report request. */
+ /* Spin up the serf request for the PROPFIND. */
+ svn_ra_serf__request_create(replay_ctx->propfind_handler);
+
+ /* Send the replay REPORT request. */
+ if (session->supports_rev_rsrc_replay)
+ {
+ replay_target = apr_psprintf(pool, "%s/%ld",
+ session->rev_stub, rev);
+ }
+ else
+ {
+ replay_target = session->session_url.path;
+ }
+
handler = apr_pcalloc(replay_ctx->src_rev_pool, sizeof(*handler));
+ handler->handler_pool = replay_ctx->src_rev_pool;
handler->method = "REPORT";
- handler->path = session->session_url_str;
+ handler->path = replay_target;
handler->body_delegate = create_replay_body;
handler->body_delegate_baton = replay_ctx;
handler->conn = session->conns[0];
@@ -827,12 +875,12 @@ svn_ra_serf__replay_range(svn_ra_session_t *ra_session,
parser_ctx->start = start_replay;
parser_ctx->end = end_replay;
parser_ctx->cdata = cdata_replay;
- parser_ctx->status_code = &status_code;
parser_ctx->done = &replay_ctx->done;
parser_ctx->done_list = &done_reports;
parser_ctx->done_item = &replay_ctx->done_item;
handler->response_handler = svn_ra_serf__handle_xml_parser;
handler->response_baton = parser_ctx;
+ replay_ctx->report_handler = handler;
/* This is only needed to handle errors during XML parsing. */
replay_ctx->parser_ctx = parser_ctx;
@@ -843,22 +891,8 @@ svn_ra_serf__replay_range(svn_ra_session_t *ra_session,
active_reports++;
}
- /* Run the serf loop, send outgoing and process incoming requests.
- This request will block when there are no more requests to send or
- responses to receive, so we have to be careful on our bookkeeping. */
- status = serf_context_run(session->context, session->timeout,
- pool);
-
- err = session->pending_error;
- session->pending_error = NULL;
-
- if (APR_STATUS_IS_TIMEUP(status))
- {
- svn_error_clear(err);
- return svn_error_create(SVN_ERR_RA_DAV_CONN_TIMEOUT,
- NULL,
- _("Connection timed out"));
- }
+ /* Run the serf loop. */
+ SVN_ERR(svn_ra_serf__context_run_wait(&replay_ctx->done, session, pool));
/* Substract the number of completely handled responses from our
total nr. of open requests', so we'll know when to stop this loop.
@@ -867,19 +901,16 @@ svn_ra_serf__replay_range(svn_ra_session_t *ra_session,
while (done_list)
{
replay_context_t *ctx = (replay_context_t *)done_list->data;
+ svn_ra_serf__handler_t *done_handler = ctx->report_handler;
done_list = done_list->next;
+ SVN_ERR(svn_ra_serf__error_on_status(done_handler->sline,
+ done_handler->path,
+ done_handler->location));
svn_pool_destroy(ctx->src_rev_pool);
active_reports--;
}
- SVN_ERR(err);
- if (status)
- {
- return svn_error_wrap_apr(status,
- _("Error retrieving replay REPORT (%d)"),
- status);
- }
done_reports = NULL;
}
diff --git a/subversion/libsvn_ra_serf/sb_bucket.c b/subversion/libsvn_ra_serf/sb_bucket.c
new file mode 100644
index 0000000..df0541f
--- /dev/null
+++ b/subversion/libsvn_ra_serf/sb_bucket.c
@@ -0,0 +1,185 @@
+/*
+ * sb_bucket.c : a serf bucket that wraps a spillbuf
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#include <serf.h>
+#include <serf_bucket_util.h>
+
+#include "svn_private_config.h"
+#include "private/svn_subr_private.h"
+
+#include "ra_serf.h"
+
+#define SB_BLOCKSIZE 1024
+#define SB_MAXSIZE 32768
+
+
+struct sbb_baton
+{
+ svn_spillbuf_t *spillbuf;
+
+ const char *holding;
+ apr_size_t hold_len;
+
+ apr_pool_t *scratch_pool;
+};
+
+
+svn_error_t *
+svn_ra_serf__copy_into_spillbuf(svn_spillbuf_t **spillbuf,
+ serf_bucket_t *bkt,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ *spillbuf = svn_spillbuf__create(SB_BLOCKSIZE, SB_MAXSIZE, result_pool);
+
+ /* Copy all data from the bucket into the spillbuf. */
+ while (TRUE)
+ {
+ apr_status_t status;
+ const char *data;
+ apr_size_t len;
+
+ status = serf_bucket_read(bkt, SERF_READ_ALL_AVAIL, &data, &len);
+
+ if (status != APR_SUCCESS && status != APR_EOF)
+ return svn_ra_serf__wrap_err(status, _("Failed to read the request"));
+
+ SVN_ERR(svn_spillbuf__write(*spillbuf, data, len, scratch_pool));
+
+ if (status == APR_EOF)
+ break;
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
+static apr_status_t
+sb_bucket_read(serf_bucket_t *bucket, apr_size_t requested,
+ const char **data, apr_size_t *len)
+{
+ struct sbb_baton *sbb = bucket->data;
+ svn_error_t *err;
+
+ if (sbb->holding)
+ {
+ *data = sbb->holding;
+
+ if (requested < sbb->hold_len)
+ {
+ *len = requested;
+ sbb->holding += requested;
+ sbb->hold_len -= requested;
+ return APR_SUCCESS;
+ }
+
+ /* Return whatever we're holding, and then forget (consume) it. */
+ *len = sbb->hold_len;
+ sbb->holding = NULL;
+ return APR_SUCCESS;
+ }
+
+ err = svn_spillbuf__read(data, len, sbb->spillbuf, sbb->scratch_pool);
+ svn_pool_clear(sbb->scratch_pool);
+
+ /* ### do something with this */
+ svn_error_clear(err);
+
+ /* The spillbuf may have returned more than requested. Stash any extra
+ into our holding area. */
+ if (requested < *len)
+ {
+ sbb->holding = *data + requested;
+ sbb->hold_len = *len - requested;
+ *len = requested;
+ }
+
+ return *data == NULL ? APR_EOF : APR_SUCCESS;
+}
+
+
+static apr_status_t
+sb_bucket_readline(serf_bucket_t *bucket, int acceptable,
+ int *found,
+ const char **data, apr_size_t *len)
+{
+ /* ### for now, we know callers won't use this function. */
+ svn_error_clear(svn_error__malfunction(TRUE, __FILE__, __LINE__,
+ "Not implemented."));
+ return APR_ENOTIMPL;
+}
+
+
+static apr_status_t
+sb_bucket_peek(serf_bucket_t *bucket,
+ const char **data, apr_size_t *len)
+{
+ struct sbb_baton *sbb = bucket->data;
+ svn_error_t *err;
+
+ /* If we're not holding any data, then fill it. */
+ if (sbb->holding == NULL)
+ {
+ err = svn_spillbuf__read(&sbb->holding, &sbb->hold_len, sbb->spillbuf,
+ sbb->scratch_pool);
+ svn_pool_clear(sbb->scratch_pool);
+
+ /* ### do something with this */
+ svn_error_clear(err);
+ }
+
+ /* Return the data we are (now) holding. */
+ *data = sbb->holding;
+ *len = sbb->hold_len;
+
+ return *data == NULL ? APR_EOF : APR_SUCCESS;
+}
+
+
+static const serf_bucket_type_t sb_bucket_vtable = {
+ "SPILLBUF",
+ sb_bucket_read,
+ sb_bucket_readline,
+ serf_default_read_iovec,
+ serf_default_read_for_sendfile,
+ serf_default_read_bucket,
+ sb_bucket_peek,
+ serf_default_destroy_and_data,
+};
+
+
+serf_bucket_t *
+svn_ra_serf__create_sb_bucket(svn_spillbuf_t *spillbuf,
+ serf_bucket_alloc_t *allocator,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct sbb_baton *sbb;
+
+ sbb = serf_bucket_mem_alloc(allocator, sizeof(*sbb));
+ sbb->spillbuf = spillbuf;
+ sbb->holding = NULL;
+ sbb->scratch_pool = svn_pool_create(result_pool);
+
+ return serf_bucket_create(&sb_bucket_vtable, allocator, sbb);
+}
diff --git a/subversion/libsvn_ra_serf/serf.c b/subversion/libsvn_ra_serf/serf.c
index 391f031..66f9962 100644
--- a/subversion/libsvn_ra_serf/serf.c
+++ b/subversion/libsvn_ra_serf/serf.c
@@ -27,9 +27,6 @@
#include <apr_want.h>
#include <apr_uri.h>
-
-#include <expat.h>
-
#include <serf.h>
#include "svn_pools.h"
@@ -48,11 +45,13 @@
#include "private/svn_dav_protocol.h"
#include "private/svn_dep_compat.h"
#include "private/svn_fspath.h"
+#include "private/svn_subr_private.h"
#include "svn_private_config.h"
#include "ra_serf.h"
+/* Implements svn_ra__vtable_t.get_version(). */
static const svn_version_t *
ra_serf_version(void)
{
@@ -62,12 +61,21 @@ ra_serf_version(void)
#define RA_SERF_DESCRIPTION \
N_("Module for accessing a repository via WebDAV protocol using serf.")
+#define RA_SERF_DESCRIPTION_VER \
+ N_("Module for accessing a repository via WebDAV protocol using serf.\n" \
+ " - using serf %d.%d.%d")
+
+/* Implements svn_ra__vtable_t.get_description(). */
static const char *
-ra_serf_get_description(void)
+ra_serf_get_description(apr_pool_t *pool)
{
- return _(RA_SERF_DESCRIPTION);
+ int major, minor, patch;
+
+ serf_lib_version(&major, &minor, &patch);
+ return apr_psprintf(pool, _(RA_SERF_DESCRIPTION_VER), major, minor, patch);
}
+/* Implements svn_ra__vtable_t.get_schemes(). */
static const char * const *
ra_serf_get_schemes(apr_pool_t *pool)
{
@@ -103,12 +111,11 @@ load_http_auth_types(apr_pool_t *pool, svn_config_t *config,
if (http_auth_types)
{
- char *token, *last;
+ char *token;
char *auth_types_list = apr_palloc(pool, strlen(http_auth_types) + 1);
apr_collapse_spaces(auth_types_list, http_auth_types);
- while ((token = apr_strtok(auth_types_list, ";", &last)) != NULL)
+ while ((token = svn_cstring_tokenize(";", &auth_types_list)) != NULL)
{
- auth_types_list = NULL;
if (svn_cstring_casecmp("basic", token) == 0)
*authn_types |= SERF_AUTHN_BASIC;
else if (svn_cstring_casecmp("digest", token) == 0)
@@ -119,8 +126,9 @@ load_http_auth_types(apr_pool_t *pool, svn_config_t *config,
*authn_types |= SERF_AUTHN_NEGOTIATE;
else
return svn_error_createf(SVN_ERR_BAD_CONFIG_VALUE, NULL,
- _("Invalid config: unknown http auth"
- "type '%s'"), token);
+ _("Invalid config: unknown %s "
+ "'%s'"),
+ SVN_CONFIG_OPTION_HTTP_AUTH_TYPES, token);
}
}
else
@@ -131,7 +139,15 @@ load_http_auth_types(apr_pool_t *pool, svn_config_t *config,
return SVN_NO_ERROR;
}
-#define DEFAULT_HTTP_TIMEOUT 3600
+
+/* Default HTTP timeout (in seconds); overridden by the 'http-timeout'
+ runtime configuration variable. */
+#define DEFAULT_HTTP_TIMEOUT 600
+
+/* Private symbol for the 1.9-public SVN_CONFIG_OPTION_HTTP_CHUNKED_REQUESTS */
+#define OPTION_HTTP_CHUNKED_REQUESTS "http-chunked-requests"
+
+
static svn_error_t *
load_config(svn_ra_serf__session_t *session,
apr_hash_t *config_hash,
@@ -144,14 +160,12 @@ load_config(svn_ra_serf__session_t *session,
const char *timeout_str = NULL;
const char *exceptions;
apr_port_t proxy_port;
- svn_boolean_t is_exception = FALSE;
+ svn_tristate_t chunked_requests;
if (config_hash)
{
- config = apr_hash_get(config_hash, SVN_CONFIG_CATEGORY_SERVERS,
- APR_HASH_KEY_STRING);
- config_client = apr_hash_get(config_hash, SVN_CONFIG_CATEGORY_CONFIG,
- APR_HASH_KEY_STRING);
+ config = svn_hash_gets(config_hash, SVN_CONFIG_CATEGORY_SERVERS);
+ config_client = svn_hash_gets(config_hash, SVN_CONFIG_CATEGORY_CONFIG);
}
else
{
@@ -184,16 +198,11 @@ load_config(svn_ra_serf__session_t *session,
/* Use the default proxy-specific settings if and only if
"http-proxy-exceptions" is not set to exclude this host. */
svn_config_get(config, &exceptions, SVN_CONFIG_SECTION_GLOBAL,
- SVN_CONFIG_OPTION_HTTP_PROXY_EXCEPTIONS, NULL);
- if (exceptions)
- {
- apr_array_header_t *l = svn_cstring_split(exceptions, ",", TRUE, pool);
- is_exception = svn_cstring_match_glob_list(session->session_url.hostname,
- l);
- }
- if (! is_exception)
+ SVN_CONFIG_OPTION_HTTP_PROXY_EXCEPTIONS, "");
+ if (! svn_cstring_match_glob_list(session->session_url.hostname,
+ svn_cstring_split(exceptions, ",",
+ TRUE, pool)))
{
- /* Load the global proxy server settings, if set. */
svn_config_get(config, &proxy_host, SVN_CONFIG_SECTION_GLOBAL,
SVN_CONFIG_OPTION_HTTP_PROXY_HOST, NULL);
svn_config_get(config, &port_str, SVN_CONFIG_SECTION_GLOBAL,
@@ -214,6 +223,26 @@ load_config(svn_ra_serf__session_t *session,
svn_config_get(config, &session->ssl_authorities, SVN_CONFIG_SECTION_GLOBAL,
SVN_CONFIG_OPTION_SSL_AUTHORITY_FILES, NULL);
+ /* If set, read the flag that tells us to do bulk updates or not. Defaults
+ to skelta updates. */
+ SVN_ERR(svn_config_get_tristate(config, &session->bulk_updates,
+ SVN_CONFIG_SECTION_GLOBAL,
+ SVN_CONFIG_OPTION_HTTP_BULK_UPDATES,
+ "auto",
+ svn_tristate_unknown));
+
+ /* Load the maximum number of parallel session connections. */
+ SVN_ERR(svn_config_get_int64(config, &session->max_connections,
+ SVN_CONFIG_SECTION_GLOBAL,
+ SVN_CONFIG_OPTION_HTTP_MAX_CONNECTIONS,
+ SVN_CONFIG_DEFAULT_OPTION_HTTP_MAX_CONNECTIONS));
+
+ /* Should we use chunked transfer encoding. */
+ SVN_ERR(svn_config_get_tristate(config, &chunked_requests,
+ SVN_CONFIG_SECTION_GLOBAL,
+ OPTION_HTTP_CHUNKED_REQUESTS,
+ "auto", svn_tristate_unknown));
+
if (config)
server_group = svn_config_find_group(config,
session->session_url.hostname,
@@ -233,26 +262,61 @@ load_config(svn_ra_serf__session_t *session,
svn_auth_set_parameter(session->wc_callbacks->auth_baton,
SVN_AUTH_PARAM_SERVER_GROUP, server_group);
- /* Load the group proxy server settings, overriding global settings. */
+ /* Load the group proxy server settings, overriding global
+ settings. We intentionally ignore 'http-proxy-exceptions'
+ here because, well, if this site was an exception, why is
+ there a per-server proxy configuration for it? */
svn_config_get(config, &proxy_host, server_group,
- SVN_CONFIG_OPTION_HTTP_PROXY_HOST, NULL);
+ SVN_CONFIG_OPTION_HTTP_PROXY_HOST, proxy_host);
svn_config_get(config, &port_str, server_group,
- SVN_CONFIG_OPTION_HTTP_PROXY_PORT, NULL);
+ SVN_CONFIG_OPTION_HTTP_PROXY_PORT, port_str);
svn_config_get(config, &session->proxy_username, server_group,
- SVN_CONFIG_OPTION_HTTP_PROXY_USERNAME, NULL);
+ SVN_CONFIG_OPTION_HTTP_PROXY_USERNAME,
+ session->proxy_username);
svn_config_get(config, &session->proxy_password, server_group,
- SVN_CONFIG_OPTION_HTTP_PROXY_PASSWORD, NULL);
+ SVN_CONFIG_OPTION_HTTP_PROXY_PASSWORD,
+ session->proxy_password);
/* Load the group ssl settings. */
SVN_ERR(svn_config_get_bool(config, &session->trust_default_ca,
server_group,
SVN_CONFIG_OPTION_SSL_TRUST_DEFAULT_CA,
- TRUE));
+ session->trust_default_ca));
svn_config_get(config, &session->ssl_authorities, server_group,
- SVN_CONFIG_OPTION_SSL_AUTHORITY_FILES, NULL);
+ SVN_CONFIG_OPTION_SSL_AUTHORITY_FILES,
+ session->ssl_authorities);
+
+ /* Load the group bulk updates flag. */
+ SVN_ERR(svn_config_get_tristate(config, &session->bulk_updates,
+ server_group,
+ SVN_CONFIG_OPTION_HTTP_BULK_UPDATES,
+ "auto",
+ session->bulk_updates));
+
+ /* Load the maximum number of parallel session connections,
+ overriding global values. */
+ SVN_ERR(svn_config_get_int64(config, &session->max_connections,
+ server_group,
+ SVN_CONFIG_OPTION_HTTP_MAX_CONNECTIONS,
+ session->max_connections));
+
+ /* Should we use chunked transfer encoding. */
+ SVN_ERR(svn_config_get_tristate(config, &chunked_requests,
+ server_group,
+ OPTION_HTTP_CHUNKED_REQUESTS,
+ "auto", chunked_requests));
}
+ /* Don't allow the http-max-connections value to be larger than our
+ compiled-in limit, or to be too small to operate. Broken
+ functionality and angry administrators are equally undesirable. */
+ if (session->max_connections > SVN_RA_SERF__MAX_CONNECTIONS_LIMIT)
+ session->max_connections = SVN_RA_SERF__MAX_CONNECTIONS_LIMIT;
+ if (session->max_connections < 2)
+ session->max_connections = 2;
+
/* Parse the connection timeout value, if any. */
+ session->timeout = apr_time_from_sec(DEFAULT_HTTP_TIMEOUT);
if (timeout_str)
{
char *endstr;
@@ -267,8 +331,7 @@ load_config(svn_ra_serf__session_t *session,
_("Invalid config: negative timeout value"));
session->timeout = apr_time_from_sec(timeout);
}
- else
- session->timeout = apr_time_from_sec(DEFAULT_HTTP_TIMEOUT);
+ SVN_ERR_ASSERT(session->timeout >= 0);
/* Convert the proxy port value, if any. */
if (port_str)
@@ -290,7 +353,9 @@ load_config(svn_ra_serf__session_t *session,
proxy_port = (apr_port_t) port;
}
else
- proxy_port = 80;
+ {
+ proxy_port = 80;
+ }
if (proxy_host)
{
@@ -302,15 +367,35 @@ load_config(svn_ra_serf__session_t *session,
session->pool);
if (status)
{
- return svn_error_wrap_apr(status,
- _("Could not resolve proxy server '%s'"),
- proxy_host);
+ return svn_ra_serf__wrap_err(
+ status, _("Could not resolve proxy server '%s'"),
+ proxy_host);
}
session->using_proxy = TRUE;
serf_config_proxy(session->context, proxy_addr);
}
else
- session->using_proxy = FALSE;
+ {
+ session->using_proxy = FALSE;
+ }
+
+ /* Setup detect_chunking and using_chunked_requests based on
+ * the chunked_requests tristate */
+ if (chunked_requests == svn_tristate_unknown)
+ {
+ session->detect_chunking = TRUE;
+ session->using_chunked_requests = TRUE;
+ }
+ else if (chunked_requests == svn_tristate_true)
+ {
+ session->detect_chunking = FALSE;
+ session->using_chunked_requests = TRUE;
+ }
+ else /* chunked_requests == svn_tristate_false */
+ {
+ session->detect_chunking = FALSE;
+ session->using_chunked_requests = FALSE;
+ }
/* Setup authentication. */
SVN_ERR(load_http_auth_types(pool, config, server_group,
@@ -335,10 +420,23 @@ svn_ra_serf__progress(void *progress_baton, apr_off_t read, apr_off_t written)
}
}
+/** Our User-Agent string. */
+static const char *
+get_user_agent_string(apr_pool_t *pool)
+{
+ int major, minor, patch;
+ serf_lib_version(&major, &minor, &patch);
+
+ return apr_psprintf(pool, "SVN/%s (%s) serf/%d.%d.%d",
+ SVN_VER_NUMBER, SVN_BUILD_TARGET,
+ major, minor, patch);
+}
+
+/* Implements svn_ra__vtable_t.open_session(). */
static svn_error_t *
svn_ra_serf__open(svn_ra_session_t *session,
const char **corrected_url,
- const char *repos_URL,
+ const char *session_URL,
const svn_ra_callbacks2_t *callbacks,
void *callback_baton,
apr_hash_t *config,
@@ -348,6 +446,7 @@ svn_ra_serf__open(svn_ra_session_t *session,
svn_ra_serf__session_t *serf_sess;
apr_uri_t url;
const char *client_string = NULL;
+ svn_error_t *err;
if (corrected_url)
*corrected_url = NULL;
@@ -368,33 +467,40 @@ svn_ra_serf__open(svn_ra_session_t *session,
serf_sess->pool));
- status = apr_uri_parse(serf_sess->pool, repos_URL, &url);
+ status = apr_uri_parse(serf_sess->pool, session_URL, &url);
if (status)
{
return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
- _("Illegal repository URL '%s'"),
- repos_URL);
+ _("Illegal URL '%s'"),
+ session_URL);
}
- /* Contrary to what the comment for apr_uri_t.path says in apr-util 1.2.12 and
- older, for root paths url.path will be "", where serf requires "/". */
+ /* Depending the version of apr-util in use, for root paths url.path
+ will be NULL or "", where serf requires "/". */
if (url.path == NULL || url.path[0] == '\0')
- url.path = apr_pstrdup(serf_sess->pool, "/");
+ {
+ url.path = apr_pstrdup(serf_sess->pool, "/");
+ }
if (!url.port)
{
url.port = apr_uri_port_of_scheme(url.scheme);
}
serf_sess->session_url = url;
- serf_sess->session_url_str = apr_pstrdup(serf_sess->pool, repos_URL);
+ serf_sess->session_url_str = apr_pstrdup(serf_sess->pool, session_URL);
serf_sess->using_ssl = (svn_cstring_casecmp(url.scheme, "https") == 0);
serf_sess->supports_deadprop_count = svn_tristate_unknown;
serf_sess->capabilities = apr_hash_make(serf_sess->pool);
- SVN_ERR(load_config(serf_sess, config, serf_sess->pool));
+ /* We have to assume that the server only supports HTTP/1.0. Once it's clear
+ HTTP/1.1 is supported, we can upgrade. */
+ serf_sess->http10 = TRUE;
+ /* If we switch to HTTP/1.1, then we will use chunked requests. We may disable
+ this, if we find an intervening proxy does not support chunked requests. */
+ serf_sess->using_chunked_requests = TRUE;
- serf_sess->conns = apr_palloc(serf_sess->pool, sizeof(*serf_sess->conns) * 4);
+ SVN_ERR(load_config(serf_sess, config, serf_sess->pool));
serf_sess->conns[0] = apr_pcalloc(serf_sess->pool,
sizeof(*serf_sess->conns[0]));
@@ -403,21 +509,15 @@ svn_ra_serf__open(svn_ra_session_t *session,
serf_sess->conns[0]->session = serf_sess;
serf_sess->conns[0]->last_status_code = -1;
- serf_sess->conns[0]->using_ssl = serf_sess->using_ssl;
- serf_sess->conns[0]->server_cert_failures = 0;
- serf_sess->conns[0]->using_compression = serf_sess->using_compression;
- serf_sess->conns[0]->hostname = url.hostname;
- serf_sess->conns[0]->useragent = NULL;
-
/* create the user agent string */
if (callbacks->get_client_string)
- callbacks->get_client_string(callback_baton, &client_string, pool);
+ SVN_ERR(callbacks->get_client_string(callback_baton, &client_string, pool));
if (client_string)
- serf_sess->conns[0]->useragent = apr_pstrcat(pool, USER_AGENT, "/",
- client_string, (char *)NULL);
+ serf_sess->useragent = apr_pstrcat(pool, get_user_agent_string(pool), " ",
+ client_string, (char *)NULL);
else
- serf_sess->conns[0]->useragent = USER_AGENT;
+ serf_sess->useragent = get_user_agent_string(pool);
/* go ahead and tell serf about the connection. */
status =
@@ -428,7 +528,7 @@ svn_ra_serf__open(svn_ra_session_t *session,
svn_ra_serf__conn_closed, serf_sess->conns[0],
serf_sess->pool);
if (status)
- return svn_error_wrap_apr(status, NULL);
+ return svn_ra_serf__wrap_err(status, NULL);
/* Set the progress callback. */
serf_context_set_progress_cb(serf_sess->context, svn_ra_serf__progress,
@@ -438,9 +538,26 @@ svn_ra_serf__open(svn_ra_session_t *session,
session->priv = serf_sess;
- return svn_ra_serf__exchange_capabilities(serf_sess, corrected_url, pool);
+ err = svn_ra_serf__exchange_capabilities(serf_sess, corrected_url, pool);
+
+ /* serf should produce a usable error code instead of APR_EGENERAL */
+ if (err && err->apr_err == APR_EGENERAL)
+ err = svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED, err,
+ _("Connection to '%s' failed"), session_URL);
+ SVN_ERR(err);
+
+ /* We have set up a useful connection (that doesn't indication a redirect).
+ If we've been told there is possibly a worrisome proxy in our path to the
+ server AND we switched to HTTP/1.1 (chunked requests), then probe for
+ problems in any proxy. */
+ if ((corrected_url == NULL || *corrected_url == NULL)
+ && serf_sess->detect_chunking && !serf_sess->http10)
+ SVN_ERR(svn_ra_serf__probe_proxy(serf_sess, pool));
+
+ return SVN_NO_ERROR;
}
+/* Implements svn_ra__vtable_t.reparent(). */
static svn_error_t *
svn_ra_serf__reparent(svn_ra_session_t *ra_session,
const char *url,
@@ -470,19 +587,31 @@ svn_ra_serf__reparent(svn_ra_session_t *ra_session,
"URL '%s'"), url, session->repos_root_str);
}
- status = apr_uri_parse(session->pool, url, &new_url);
+ status = apr_uri_parse(pool, url, &new_url);
if (status)
{
return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
_("Illegal repository URL '%s'"), url);
}
- session->session_url.path = new_url.path;
+ /* Depending the version of apr-util in use, for root paths url.path
+ will be NULL or "", where serf requires "/". */
+ /* ### Maybe we should use a string buffer for these strings so we
+ ### don't allocate memory in the session on every reparent? */
+ if (new_url.path == NULL || new_url.path[0] == '\0')
+ {
+ session->session_url.path = apr_pstrdup(session->pool, "/");
+ }
+ else
+ {
+ session->session_url.path = apr_pstrdup(session->pool, new_url.path);
+ }
session->session_url_str = apr_pstrdup(session->pool, url);
return SVN_NO_ERROR;
}
+/* Implements svn_ra__vtable_t.get_session_url(). */
static svn_error_t *
svn_ra_serf__get_session_url(svn_ra_session_t *ra_session,
const char **url,
@@ -493,20 +622,19 @@ svn_ra_serf__get_session_url(svn_ra_session_t *ra_session,
return SVN_NO_ERROR;
}
+/* Implements svn_ra__vtable_t.get_latest_revnum(). */
static svn_error_t *
svn_ra_serf__get_latest_revnum(svn_ra_session_t *ra_session,
svn_revnum_t *latest_revnum,
apr_pool_t *pool)
{
- const char *relative_url, *basecoll_url;
svn_ra_serf__session_t *session = ra_session->priv;
- return svn_ra_serf__get_baseline_info(&basecoll_url, &relative_url, session,
- NULL, session->session_url.path,
- SVN_INVALID_REVNUM, latest_revnum,
- pool);
+ return svn_error_trace(svn_ra_serf__get_youngest_revnum(
+ latest_revnum, session, pool));
}
+/* Implements svn_ra__vtable_t.rev_proplist(). */
static svn_error_t *
svn_ra_serf__rev_proplist(svn_ra_session_t *ra_session,
svn_revnum_t rev,
@@ -533,6 +661,7 @@ svn_ra_serf__rev_proplist(svn_ra_session_t *ra_session,
SVN_ERR(svn_ra_serf__discover_vcc(&propfind_path, session, NULL, pool));
}
+ /* ### fix: fetch hash of *just* the PATH@REV props. no nested hash. */
SVN_ERR(svn_ra_serf__retrieve_props(&props, session, session->conns[0],
propfind_path, rev, "0", all_props,
pool, pool));
@@ -543,6 +672,7 @@ svn_ra_serf__rev_proplist(svn_ra_session_t *ra_session,
return SVN_NO_ERROR;
}
+/* Implements svn_ra__vtable_t.rev_prop(). */
static svn_error_t *
svn_ra_serf__rev_prop(svn_ra_session_t *session,
svn_revnum_t rev,
@@ -554,77 +684,49 @@ svn_ra_serf__rev_prop(svn_ra_session_t *session,
SVN_ERR(svn_ra_serf__rev_proplist(session, rev, &props, pool));
- *value = apr_hash_get(props, name, APR_HASH_KEY_STRING);
+ *value = svn_hash_gets(props, name);
return SVN_NO_ERROR;
}
static svn_error_t *
-fetch_path_props(svn_ra_serf__propfind_context_t **ret_prop_ctx,
- apr_hash_t **ret_props,
- const char **ret_path,
- svn_revnum_t *ret_revision,
+fetch_path_props(apr_hash_t **props,
svn_ra_serf__session_t *session,
- const char *rel_path,
+ const char *session_relpath,
svn_revnum_t revision,
const svn_ra_serf__dav_props_t *desired_props,
- apr_pool_t *pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- svn_ra_serf__propfind_context_t *prop_ctx;
- apr_hash_t *props;
- const char *path;
+ const char *url;
- path = session->session_url.path;
+ url = session->session_url.path;
/* If we have a relative path, append it. */
- if (rel_path)
- {
- path = svn_path_url_add_component2(path, rel_path, pool);
- }
+ if (session_relpath)
+ url = svn_path_url_add_component2(url, session_relpath, scratch_pool);
- props = apr_hash_make(pool);
-
- /* If we were given a specific revision, we have to fetch the VCC and
- * do a PROPFIND off of that.
- */
- if (!SVN_IS_VALID_REVNUM(revision))
- {
- SVN_ERR(svn_ra_serf__deliver_props(&prop_ctx, props, session,
- session->conns[0], path, revision,
- "0", desired_props, NULL,
- pool));
- }
- else
+ /* If we were given a specific revision, get a URL that refers to that
+ specific revision (rather than floating with HEAD). */
+ if (SVN_IS_VALID_REVNUM(revision))
{
- const char *relative_url, *basecoll_url;
-
- SVN_ERR(svn_ra_serf__get_baseline_info(&basecoll_url, &relative_url,
- session, NULL, path,
- revision, NULL, pool));
-
- /* We will try again with our new path; however, we're now
- * technically an unversioned resource because we are accessing
- * the revision's baseline-collection.
- */
- path = svn_path_url_add_component2(basecoll_url, relative_url, pool);
- revision = SVN_INVALID_REVNUM;
- SVN_ERR(svn_ra_serf__deliver_props(&prop_ctx, props, session,
- session->conns[0], path, revision,
- "0", desired_props, NULL,
- pool));
+ SVN_ERR(svn_ra_serf__get_stable_url(&url, NULL /* latest_revnum */,
+ session, NULL /* conn */,
+ url, revision,
+ scratch_pool, scratch_pool));
}
- /* ### switch to svn_ra_serf__retrieve_props? */
- SVN_ERR(svn_ra_serf__wait_for_props(prop_ctx, session, pool));
-
- *ret_path = path;
- *ret_prop_ctx = prop_ctx;
- *ret_props = props;
- *ret_revision = revision;
+ /* URL is stable, so we use SVN_INVALID_REVNUM since it is now irrelevant.
+ Or we started with SVN_INVALID_REVNUM and URL may be floating. */
+ SVN_ERR(svn_ra_serf__fetch_node_props(props, session->conns[0],
+ url, SVN_INVALID_REVNUM,
+ desired_props,
+ result_pool, scratch_pool));
return SVN_NO_ERROR;
}
+/* Implements svn_ra__vtable_t.check_path(). */
static svn_error_t *
svn_ra_serf__check_path(svn_ra_session_t *ra_session,
const char *rel_path,
@@ -634,13 +736,10 @@ svn_ra_serf__check_path(svn_ra_session_t *ra_session,
{
svn_ra_serf__session_t *session = ra_session->priv;
apr_hash_t *props;
- svn_ra_serf__propfind_context_t *prop_ctx;
- const char *path;
- svn_revnum_t fetched_rev;
- svn_error_t *err = fetch_path_props(&prop_ctx, &props, &path, &fetched_rev,
- session, rel_path,
- revision, check_path_props, pool);
+ svn_error_t *err = fetch_path_props(&props, session, rel_path,
+ revision, check_path_props,
+ pool, pool);
if (err && err->apr_err == SVN_ERR_FS_NOT_FOUND)
{
@@ -651,9 +750,9 @@ svn_ra_serf__check_path(svn_ra_session_t *ra_session,
{
/* Any other error, raise to caller. */
if (err)
- return err;
+ return svn_error_trace(err);
- SVN_ERR(svn_ra_serf__get_resource_type(kind, props, path, fetched_rev));
+ SVN_ERR(svn_ra_serf__get_resource_type(kind, props));
}
return SVN_NO_ERROR;
@@ -775,14 +874,14 @@ path_dirent_walker(void *baton,
{
const char *base_name;
- entry = apr_pcalloc(pool, sizeof(*entry));
+ entry = svn_dirent_create(pool);
apr_hash_set(dirents->full_paths, path, path_len, entry);
base_name = svn_path_uri_decode(svn_urlpath__basename(path, pool),
pool);
- apr_hash_set(dirents->base_paths, base_name, APR_HASH_KEY_STRING, entry);
+ svn_hash_sets(dirents->base_paths, base_name, entry);
}
dwb.entry = entry;
@@ -863,6 +962,7 @@ get_dirent_props(apr_uint32_t dirent_fields,
return (svn_ra_serf__dav_props_t *) props->elts;
}
+/* Implements svn_ra__vtable_t.stat(). */
static svn_error_t *
svn_ra_serf__stat(svn_ra_session_t *ra_session,
const char *rel_path,
@@ -872,17 +972,14 @@ svn_ra_serf__stat(svn_ra_session_t *ra_session,
{
svn_ra_serf__session_t *session = ra_session->priv;
apr_hash_t *props;
- svn_ra_serf__propfind_context_t *prop_ctx;
- const char *path;
- svn_revnum_t fetched_rev;
svn_error_t *err;
struct dirent_walker_baton_t dwb;
svn_tristate_t deadprop_count = svn_tristate_unknown;
- err = fetch_path_props(&prop_ctx, &props, &path, &fetched_rev,
+ err = fetch_path_props(&props,
session, rel_path, revision,
get_dirent_props(SVN_DIRENT_ALL, session, pool),
- pool);
+ pool, pool);
if (err)
{
if (err->apr_err == SVN_ERR_FS_NOT_FOUND)
@@ -895,12 +992,10 @@ svn_ra_serf__stat(svn_ra_session_t *ra_session,
return svn_error_trace(err);
}
- dwb.entry = apr_pcalloc(pool, sizeof(*dwb.entry));
+ dwb.entry = svn_dirent_create(pool);
dwb.supports_deadprop_count = &deadprop_count;
dwb.result_pool = pool;
- SVN_ERR(svn_ra_serf__walk_all_props(props, path, fetched_rev,
- dirent_walker, &dwb,
- pool));
+ SVN_ERR(svn_ra_serf__walk_node_props(props, dirent_walker, &dwb, pool));
if (deadprop_count == svn_tristate_false
&& session->supports_deadprop_count == svn_tristate_unknown
@@ -910,14 +1005,12 @@ svn_ra_serf__stat(svn_ra_session_t *ra_session,
information */
session->supports_deadprop_count = svn_tristate_false;
- SVN_ERR(fetch_path_props(&prop_ctx, &props, &path, &fetched_rev,
- session, rel_path, fetched_rev,
+ SVN_ERR(fetch_path_props(&props,
+ session, rel_path, SVN_INVALID_REVNUM,
get_dirent_props(SVN_DIRENT_ALL, session, pool),
- pool));
+ pool, pool));
- SVN_ERR(svn_ra_serf__walk_all_props(props, path, fetched_rev,
- dirent_walker, &dwb,
- pool));
+ SVN_ERR(svn_ra_serf__walk_node_props(props, dirent_walker, &dwb, pool));
}
if (deadprop_count != svn_tristate_unknown)
@@ -933,13 +1026,11 @@ svn_ra_serf__stat(svn_ra_session_t *ra_session,
* SVN_ERR_FS_NOT_DIRECTORY if not.
*/
static svn_error_t *
-resource_is_directory(apr_hash_t *props,
- const char *path,
- svn_revnum_t revision)
+resource_is_directory(apr_hash_t *props)
{
svn_node_kind_t kind;
- SVN_ERR(svn_ra_serf__get_resource_type(&kind, props, path, revision));
+ SVN_ERR(svn_ra_serf__get_resource_type(&kind, props));
if (kind != svn_node_dir)
{
@@ -950,6 +1041,7 @@ resource_is_directory(apr_hash_t *props,
return SVN_NO_ERROR;
}
+/* Implements svn_ra__vtable_t.get_dir(). */
static svn_error_t *
svn_ra_serf__get_dir(svn_ra_session_t *ra_session,
apr_hash_t **dirents,
@@ -976,34 +1068,37 @@ svn_ra_serf__get_dir(svn_ra_session_t *ra_session,
public url. */
if (SVN_IS_VALID_REVNUM(revision) || fetched_rev)
{
- const char *relative_url, *basecoll_url;
-
- SVN_ERR(svn_ra_serf__get_baseline_info(&basecoll_url, &relative_url,
- session, NULL, path, revision,
- fetched_rev, pool));
-
- path = svn_path_url_add_component2(basecoll_url, relative_url, pool);
+ SVN_ERR(svn_ra_serf__get_stable_url(&path, fetched_rev,
+ session, NULL /* conn */,
+ path, revision,
+ pool, pool));
revision = SVN_INVALID_REVNUM;
}
+ /* REVISION is always SVN_INVALID_REVNUM */
+ SVN_ERR_ASSERT(!SVN_IS_VALID_REVNUM(revision));
/* If we're asked for children, fetch them now. */
if (dirents)
{
struct path_dirent_visitor_t dirent_walk;
apr_hash_t *props;
+ const char *rtype;
/* Always request node kind to check that path is really a
* directory.
*/
dirent_fields |= SVN_DIRENT_KIND;
SVN_ERR(svn_ra_serf__retrieve_props(&props, session, session->conns[0],
- path, revision, "1",
+ path, SVN_INVALID_REVNUM, "1",
get_dirent_props(dirent_fields,
session, pool),
pool, pool));
/* Check if the path is really a directory. */
- SVN_ERR(resource_is_directory(props, path, revision));
+ rtype = svn_ra_serf__get_prop(props, path, "DAV:", "resourcetype");
+ if (rtype == NULL || strcmp(rtype, "collection") != 0)
+ return svn_error_create(SVN_ERR_FS_NOT_DIRECTORY, NULL,
+ _("Can't get entries of non-directory"));
/* We're going to create two hashes to help the walker along.
* We're going to return the 2nd one back to the caller as it
@@ -1015,8 +1110,9 @@ svn_ra_serf__get_dir(svn_ra_session_t *ra_session,
dirent_walk.supports_deadprop_count = svn_tristate_unknown;
dirent_walk.result_pool = pool;
- SVN_ERR(svn_ra_serf__walk_all_paths(props, revision, path_dirent_walker,
- &dirent_walk, pool));
+ SVN_ERR(svn_ra_serf__walk_all_paths(props, SVN_INVALID_REVNUM,
+ path_dirent_walker, &dirent_walk,
+ pool));
if (dirent_walk.supports_deadprop_count == svn_tristate_false
&& session->supports_deadprop_count == svn_tristate_unknown
@@ -1027,15 +1123,15 @@ svn_ra_serf__get_dir(svn_ra_session_t *ra_session,
session->supports_deadprop_count = svn_tristate_false;
SVN_ERR(svn_ra_serf__retrieve_props(&props, session,
session->conns[0],
- path, revision, "1",
+ path, SVN_INVALID_REVNUM, "1",
get_dirent_props(dirent_fields,
session, pool),
pool, pool));
- SVN_ERR(svn_hash__clear(dirent_walk.full_paths, pool));
- SVN_ERR(svn_hash__clear(dirent_walk.base_paths, pool));
+ apr_hash_clear(dirent_walk.full_paths);
+ apr_hash_clear(dirent_walk.base_paths);
- SVN_ERR(svn_ra_serf__walk_all_paths(props, revision,
+ SVN_ERR(svn_ra_serf__walk_all_paths(props, SVN_INVALID_REVNUM,
path_dirent_walker,
&dirent_walk, pool));
}
@@ -1051,20 +1147,23 @@ svn_ra_serf__get_dir(svn_ra_session_t *ra_session,
{
apr_hash_t *props;
- SVN_ERR(svn_ra_serf__retrieve_props(&props, session, session->conns[0],
- path, revision, "0", all_props,
- pool, pool));
+ SVN_ERR(svn_ra_serf__fetch_node_props(&props, session->conns[0],
+ path, SVN_INVALID_REVNUM,
+ all_props,
+ pool, pool));
+
/* Check if the path is really a directory. */
- SVN_ERR(resource_is_directory(props, path, revision));
+ SVN_ERR(resource_is_directory(props));
- SVN_ERR(svn_ra_serf__flatten_props(ret_props, props, path, revision,
- pool, pool));
+ /* ### flatten_props() does not copy PROPVALUE, but fetch_node_props()
+ ### put them into POOL, so we're okay. */
+ SVN_ERR(svn_ra_serf__flatten_props(ret_props, props, pool, pool));
}
return SVN_NO_ERROR;
}
-static svn_error_t *
+svn_error_t *
svn_ra_serf__get_repos_root(svn_ra_session_t *ra_session,
const char **url,
apr_pool_t *pool)
@@ -1089,6 +1188,8 @@ svn_ra_serf__get_repos_root(svn_ra_session_t *ra_session,
case where the root of the repository is not readable.
However, it does not handle the case where we're fetching path not existing
in HEAD of a repository with unreadable root directory.
+
+ Implements svn_ra__vtable_t.get_uuid().
*/
static svn_error_t *
svn_ra_serf__get_uuid(svn_ra_session_t *ra_session,
@@ -1158,7 +1259,9 @@ static const svn_ra__vtable_t serf_vtable = {
svn_ra_serf__replay,
svn_ra_serf__has_capability,
svn_ra_serf__replay_range,
- svn_ra_serf__get_deleted_rev
+ svn_ra_serf__get_deleted_rev,
+ svn_ra_serf__register_editor_shim_callbacks,
+ svn_ra_serf__get_inherited_props
};
svn_error_t *
@@ -1176,7 +1279,7 @@ svn_ra_serf__init(const svn_version_t *loader_version,
int serf_minor;
int serf_patch;
- SVN_ERR(svn_ver_check_list(ra_serf_version(), checklist));
+ SVN_ERR(svn_ver_check_list2(ra_serf_version(), checklist, svn_ver_equal));
/* Simplified version check to make sure we can safely use the
VTABLE parameter. The RA loader does a more exhaustive check. */
@@ -1196,6 +1299,7 @@ svn_ra_serf__init(const svn_version_t *loader_version,
|| serf_minor < SERF_MINOR_VERSION)
{
return svn_error_createf(
+ /* ### should return a unique error */
SVN_ERR_VERSION_MISMATCH, NULL,
_("ra_serf was compiled for serf %d.%d.%d but loaded "
"an incompatible %d.%d.%d library"),
diff --git a/subversion/libsvn_ra_serf/update.c b/subversion/libsvn_ra_serf/update.c
index f82b778..88488ff 100644
--- a/subversion/libsvn_ra_serf/update.c
+++ b/subversion/libsvn_ra_serf/update.c
@@ -31,6 +31,7 @@
#include <serf.h>
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_ra.h"
#include "svn_dav.h"
@@ -43,6 +44,7 @@
#include "svn_private_config.h"
#include "private/svn_dep_compat.h"
#include "private/svn_fspath.h"
+#include "private/svn_string_private.h"
#include "ra_serf.h"
#include "../libsvn_ra/ra_loader.h"
@@ -62,13 +64,19 @@
*/
typedef enum report_state_e {
NONE = 0,
+ INITIAL = 0,
+ UPDATE_REPORT,
+ TARGET_REVISION,
OPEN_DIR,
ADD_DIR,
+ ABSENT_DIR,
OPEN_FILE,
ADD_FILE,
+ ABSENT_FILE,
PROP,
IGNORE_PROP_NAME,
- NEED_PROP_NAME
+ NEED_PROP_NAME,
+ TXDELTA
} report_state_e;
@@ -84,10 +92,10 @@ typedef enum report_state_e {
since network and parsing behavior (ie. it doesn't pause immediately)
can make the measurements quite imprecise.
- We measure outstanding requests as the sum of ACTIVE_FETCHES and
- ACTIVE_PROPFINDS in the report_context_t structure. */
-#define REQUEST_COUNT_TO_PAUSE 1000
-#define REQUEST_COUNT_TO_RESUME 100
+ We measure outstanding requests as the sum of NUM_ACTIVE_FETCHES and
+ NUM_ACTIVE_PROPFINDS in the report_context_t structure. */
+#define REQUEST_COUNT_TO_PAUSE 50
+#define REQUEST_COUNT_TO_RESUME 40
/* Forward-declare our report context. */
@@ -118,24 +126,17 @@ typedef struct report_dir_t
/* the canonical url for this directory after updating. (received) */
const char *url;
- /* The original repos_relpath of this url (from the workingcopy)
+ /* The original repos_relpath of this url (from the working copy)
or NULL if the repos_relpath can be calculated from the edit root. */
const char *repos_relpath;
/* Our base revision - SVN_INVALID_REVNUM if we're adding this dir. */
svn_revnum_t base_rev;
- /* The target revision we're retrieving. */
- svn_revnum_t target_rev;
-
- /* controlling dir baton - this is only created in open_dir() */
+ /* controlling dir baton - this is only created in ensure_dir_opened() */
void *dir_baton;
apr_pool_t *dir_baton_pool;
- /* Our master update editor and baton. */
- const svn_delta_editor_t *update_editor;
- void *update_baton;
-
/* How many references to this directory do we still have open? */
apr_size_t ref_count;
@@ -149,7 +150,7 @@ typedef struct report_dir_t
apr_hash_t *removed_props;
/* The propfind request for our current directory */
- svn_ra_serf__propfind_context_t *propfind;
+ svn_ra_serf__handler_t *propfind_handler;
/* Has the server told us to fetch the dir props? */
svn_boolean_t fetch_props;
@@ -199,9 +200,6 @@ typedef struct report_info_t
/* Our base revision - SVN_INVALID_REVNUM if we're adding this file. */
svn_revnum_t base_rev;
- /* The target revision we're retrieving. */
- svn_revnum_t target_rev;
-
/* our delta base, if present (NULL if we're adding the file) */
const char *delta_base;
@@ -212,7 +210,7 @@ typedef struct report_info_t
svn_revnum_t copyfrom_rev;
/* The propfind request for our current file (if present) */
- svn_ra_serf__propfind_context_t *propfind;
+ svn_ra_serf__handler_t *propfind_handler;
/* Has the server told us to fetch the file props? */
svn_boolean_t fetch_props;
@@ -229,20 +227,25 @@ typedef struct report_info_t
/* controlling file_baton and textdelta handler */
void *file_baton;
const char *base_checksum;
- const char *final_sha1_checksum; /* ### currently unused */
+ const char *final_sha1_checksum;
svn_txdelta_window_handler_t textdelta;
void *textdelta_baton;
+ svn_stream_t *svndiff_decoder;
+ svn_stream_t *base64_decoder;
/* Checksum for close_file */
const char *final_checksum;
+ /* Stream containing file contents already cached in the working
+ copy (which may be used to avoid a GET request for the same). */
+ svn_stream_t *cached_contents;
+
/* temporary property for this file which is currently being parsed
* It will eventually be stored in our parent directory's property hash.
*/
const char *prop_ns;
const char *prop_name;
- const char *prop_val;
- apr_size_t prop_val_len;
+ svn_stringbuf_t *prop_value;
const char *prop_encoding;
} report_info_t;
@@ -252,6 +255,9 @@ typedef struct report_info_t
*/
typedef struct report_fetch_t {
+ /* The handler representing this particular fetch. */
+ svn_ra_serf__handler_t *handler;
+
/* The session we should use to fetch the file. */
svn_ra_serf__session_t *sess;
@@ -316,8 +322,12 @@ struct report_context_t {
/* Do we want the server to send copyfrom args or not? */
svn_boolean_t send_copyfrom_args;
- /* Path -> lock token mapping. */
- apr_hash_t *lock_path_tokens;
+ /* Is the server sending everything in one response? */
+ svn_boolean_t send_all_mode;
+
+ /* Is the server including properties inline for newly added
+ files/dirs? */
+ svn_boolean_t add_props_included;
/* Path -> const char *repos_relpath mapping */
apr_hash_t *switched_paths;
@@ -341,16 +351,20 @@ struct report_context_t {
report_dir_t *root_dir;
/* number of pending GET requests */
- unsigned int active_fetches;
+ unsigned int num_active_fetches;
/* completed fetches (contains report_fetch_t) */
svn_ra_serf__list_t *done_fetches;
/* number of pending PROPFIND requests */
- unsigned int active_propfinds;
+ unsigned int num_active_propfinds;
- /* completed PROPFIND requests (contains propfind_context_t) */
+ /* completed PROPFIND requests (contains svn_ra_serf__handler_t) */
svn_ra_serf__list_t *done_propfinds;
+ svn_ra_serf__list_t *done_dir_propfinds;
+
+ /* list of outstanding prop changes (contains report_dir_t) */
+ svn_ra_serf__list_t *active_dir_propfinds;
/* list of files that only have prop changes (contains report_info_t) */
svn_ra_serf__list_t *file_propchanges_only;
@@ -361,10 +375,171 @@ struct report_context_t {
/* Are we done parsing the REPORT response? */
svn_boolean_t done;
+ /* Did we receive all data from the network? */
+ svn_boolean_t report_received;
+
+ /* Did we get a complete (non-truncated) report? */
+ svn_boolean_t report_completed;
+
/* The XML parser context for the REPORT response. */
svn_ra_serf__xml_parser_t *parser_ctx;
+
+ /* Did we close the root directory? */
+ svn_boolean_t closed_root;
};
+
+#ifdef NOT_USED_YET
+
+#define D_ "DAV:"
+#define S_ SVN_XML_NAMESPACE
+static const svn_ra_serf__xml_transition_t update_ttable[] = {
+ { INITIAL, S_, "update-report", UPDATE_REPORT,
+ FALSE, { NULL }, FALSE },
+
+ { UPDATE_REPORT, S_, "target-revision", TARGET_REVISION,
+ FALSE, { "rev", NULL }, TRUE },
+
+ { UPDATE_REPORT, S_, "open-directory", OPEN_DIR,
+ FALSE, { "rev", NULL }, TRUE },
+
+ { OPEN_DIR, S_, "open-directory", OPEN_DIR,
+ FALSE, { "rev", "name", NULL }, TRUE },
+
+ { OPEN_DIR, S_, "add-directory", ADD_DIR,
+ FALSE, { "rev", "name", "?copyfrom-path", "?copyfrom-rev", NULL }, TRUE },
+
+ { ADD_DIR, S_, "add-directory", ADD_DIR,
+ FALSE, { "rev", "name", "?copyfrom-path", "?copyfrom-rev", NULL }, TRUE },
+
+ { OPEN_DIR, S_, "open-file", OPEN_FILE,
+ FALSE, { "rev", "name", NULL }, TRUE },
+
+ { OPEN_DIR, S_, "add-file", ADD_FILE,
+ FALSE, { "rev", "name", "?copyfrom-path", "?copyfrom-rev", NULL }, TRUE },
+
+ { ADD_DIR, S_, "add-file", ADD_FILE,
+ FALSE, { "rev", "name", "?copyfrom-path", "?copyfrom-rev", NULL }, TRUE },
+
+ { OPEN_DIR, S_, "delete-entry", OPEN_FILE,
+ FALSE, { "?rev", "name", NULL }, TRUE },
+
+ { OPEN_DIR, S_, "absent-directory", ABSENT_DIR,
+ FALSE, { "name", NULL }, TRUE },
+
+ { ADD_DIR, S_, "absent-directory", ABSENT_DIR,
+ FALSE, { "name", NULL }, TRUE },
+
+ { OPEN_DIR, S_, "absent-file", ABSENT_FILE,
+ FALSE, { "name", NULL }, TRUE },
+
+ { ADD_DIR, S_, "absent-file", ABSENT_FILE,
+ FALSE, { "name", NULL }, TRUE },
+
+ { 0 }
+};
+
+
+
+/* Conforms to svn_ra_serf__xml_opened_t */
+static svn_error_t *
+update_opened(svn_ra_serf__xml_estate_t *xes,
+ void *baton,
+ int entered_state,
+ const svn_ra_serf__dav_props_t *tag,
+ apr_pool_t *scratch_pool)
+{
+ report_context_t *ctx = baton;
+
+ return SVN_NO_ERROR;
+}
+
+
+
+/* Conforms to svn_ra_serf__xml_closed_t */
+static svn_error_t *
+update_closed(svn_ra_serf__xml_estate_t *xes,
+ void *baton,
+ int leaving_state,
+ const svn_string_t *cdata,
+ apr_hash_t *attrs,
+ apr_pool_t *scratch_pool)
+{
+ report_context_t *ctx = baton;
+
+ if (leaving_state == TARGET_REVISION)
+ {
+ const char *rev = svn_hash_gets(attrs, "rev");
+
+ SVN_ERR(ctx->update_editor->set_target_revision(ctx->update_baton,
+ SVN_STR_TO_REV(rev),
+ ctx->sess->pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
+/* Conforms to svn_ra_serf__xml_cdata_t */
+static svn_error_t *
+update_cdata(svn_ra_serf__xml_estate_t *xes,
+ void *baton,
+ int current_state,
+ const char *data,
+ apr_size_t len,
+ apr_pool_t *scratch_pool)
+{
+ report_context_t *ctx = baton;
+
+ return SVN_NO_ERROR;
+}
+
+#endif /* NOT_USED_YET */
+
+
+/* Returns best connection for fetching files/properties. */
+static svn_ra_serf__connection_t *
+get_best_connection(report_context_t *ctx)
+{
+ svn_ra_serf__connection_t *conn;
+ int first_conn = 1;
+
+ /* Skip the first connection if the REPORT response hasn't been completely
+ received yet or if we're being told to limit our connections to
+ 2 (because this could be an attempt to ensure that we do all our
+ auxiliary GETs/PROPFINDs on a single connection).
+
+ ### FIXME: This latter requirement (max_connections > 2) is
+ ### really just a hack to work around the fact that some update
+ ### editor implementations (such as svnrdump's dump editor)
+ ### simply can't handle the way ra_serf violates the editor v1
+ ### drive ordering requirements.
+ ###
+ ### See http://subversion.tigris.org/issues/show_bug.cgi?id=4116.
+ */
+ if (ctx->report_received && (ctx->sess->max_connections > 2))
+ first_conn = 0;
+
+ /* Currently, we just cycle connections. In the future we could
+ store the number of pending requests on each connection, or
+ perform other heuristics, to achieve better connection usage.
+ (As an optimization, if there's only one available auxiliary
+ connection to use, don't bother doing all the cur_conn math --
+ just return that one connection.) */
+ if (ctx->sess->num_conns - first_conn == 1)
+ {
+ conn = ctx->sess->conns[first_conn];
+ }
+ else
+ {
+ conn = ctx->sess->conns[ctx->sess->cur_conn];
+ ctx->sess->cur_conn++;
+ if (ctx->sess->cur_conn >= ctx->sess->num_conns)
+ ctx->sess->cur_conn = first_conn;
+ }
+ return conn;
+}
+
/** Report state management helper **/
@@ -397,6 +572,7 @@ push_state(svn_ra_serf__xml_parser_t *parser,
new_info = apr_pcalloc(info_parent_pool, sizeof(*new_info));
new_info->pool = svn_pool_create(info_parent_pool);
new_info->lock_token = NULL;
+ new_info->prop_value = svn_stringbuf_create_empty(new_info->pool);
new_info->dir = apr_pcalloc(new_info->pool, sizeof(*new_info->dir));
new_info->dir->pool = new_info->pool;
@@ -406,9 +582,6 @@ push_state(svn_ra_serf__xml_parser_t *parser,
new_info->props = new_info->dir->props;
new_info->dir->removed_props = apr_hash_make(new_info->pool);
- /* Point to the update_editor */
- new_info->dir->update_editor = ctx->update_editor;
- new_info->dir->update_baton = ctx->update_baton;
new_info->dir->report_context = ctx;
if (info)
@@ -441,6 +614,7 @@ push_state(svn_ra_serf__xml_parser_t *parser,
new_info->file_baton = NULL;
new_info->lock_token = NULL;
new_info->fetch_file = FALSE;
+ new_info->prop_value = svn_stringbuf_create_empty(new_info->pool);
/* Point at our parent's directory state. */
new_info->dir = info->dir;
@@ -465,13 +639,9 @@ set_file_props(void *baton,
apr_pool_t *scratch_pool)
{
report_info_t *info = baton;
- const svn_delta_editor_t *editor = info->dir->update_editor;
+ const svn_delta_editor_t *editor = info->dir->report_context->update_editor;
const char *prop_name;
- if (strcmp(name, "md5-checksum") == 0
- && strcmp(ns, SVN_DAV_PROP_NS_DAV) == 0)
- info->final_checksum = apr_pstrdup(info->pool, val->data);
-
prop_name = svn_ra_serf__svnname_from_wirename(ns, name, scratch_pool);
if (prop_name != NULL)
return svn_error_trace(editor->change_file_prop(info->file_baton,
@@ -490,7 +660,7 @@ set_dir_props(void *baton,
apr_pool_t *scratch_pool)
{
report_dir_t *dir = baton;
- const svn_delta_editor_t *editor = dir->update_editor;
+ const svn_delta_editor_t *editor = dir->report_context->update_editor;
const char *prop_name;
prop_name = svn_ra_serf__svnname_from_wirename(ns, name, scratch_pool);
@@ -511,7 +681,7 @@ remove_file_props(void *baton,
apr_pool_t *scratch_pool)
{
report_info_t *info = baton;
- const svn_delta_editor_t *editor = info->dir->update_editor;
+ const svn_delta_editor_t *editor = info->dir->report_context->update_editor;
const char *prop_name;
prop_name = svn_ra_serf__svnname_from_wirename(ns, name, scratch_pool);
@@ -532,7 +702,7 @@ remove_dir_props(void *baton,
apr_pool_t *scratch_pool)
{
report_dir_t *dir = baton;
- const svn_delta_editor_t *editor = dir->update_editor;
+ const svn_delta_editor_t *editor = dir->report_context->update_editor;
const char *prop_name;
prop_name = svn_ra_serf__svnname_from_wirename(ns, name, scratch_pool);
@@ -548,8 +718,10 @@ remove_dir_props(void *baton,
/** Helpers to open and close directories */
static svn_error_t*
-open_dir(report_dir_t *dir)
+ensure_dir_opened(report_dir_t *dir)
{
+ report_context_t *ctx = dir->report_context;
+
/* if we're already open, return now */
if (dir->dir_baton)
{
@@ -560,28 +732,28 @@ open_dir(report_dir_t *dir)
{
dir->dir_baton_pool = svn_pool_create(dir->pool);
- if (dir->report_context->destination &&
- dir->report_context->sess->wc_callbacks->invalidate_wc_props)
+ if (ctx->destination
+ && ctx->sess->wc_callbacks->invalidate_wc_props)
{
- SVN_ERR(dir->report_context->sess->wc_callbacks->invalidate_wc_props(
- dir->report_context->sess->wc_callback_baton,
- dir->report_context->update_target,
+ SVN_ERR(ctx->sess->wc_callbacks->invalidate_wc_props(
+ ctx->sess->wc_callback_baton,
+ ctx->update_target,
SVN_RA_SERF__WC_CHECKED_IN_URL, dir->pool));
}
- SVN_ERR(dir->update_editor->open_root(dir->update_baton, dir->base_rev,
+ SVN_ERR(ctx->update_editor->open_root(ctx->update_baton, dir->base_rev,
dir->dir_baton_pool,
&dir->dir_baton));
}
else
{
- SVN_ERR(open_dir(dir->parent_dir));
+ SVN_ERR(ensure_dir_opened(dir->parent_dir));
dir->dir_baton_pool = svn_pool_create(dir->parent_dir->dir_baton_pool);
if (SVN_IS_VALID_REVNUM(dir->base_rev))
{
- SVN_ERR(dir->update_editor->open_directory(dir->name,
+ SVN_ERR(ctx->update_editor->open_directory(dir->name,
dir->parent_dir->dir_baton,
dir->base_rev,
dir->dir_baton_pool,
@@ -589,7 +761,7 @@ open_dir(report_dir_t *dir)
}
else
{
- SVN_ERR(dir->update_editor->add_directory(dir->name,
+ SVN_ERR(ctx->update_editor->add_directory(dir->name,
dir->parent_dir->dir_baton,
NULL, SVN_INVALID_REVNUM,
dir->dir_baton_pool,
@@ -623,12 +795,13 @@ close_dir(report_dir_t *dir)
if (dir->fetch_props)
{
SVN_ERR(svn_ra_serf__walk_all_props(dir->props, dir->url,
- dir->target_rev,
+ dir->report_context->target_rev,
set_dir_props, dir,
scratch_pool));
}
- SVN_ERR(dir->update_editor->close_directory(dir->dir_baton, scratch_pool));
+ SVN_ERR(dir->report_context->update_editor->close_directory(
+ dir->dir_baton, scratch_pool));
/* remove us from our parent's children list */
if (dir->parent_dir)
@@ -670,7 +843,7 @@ static svn_error_t *close_all_dirs(report_dir_t *dir)
SVN_ERR_ASSERT(! dir->ref_count);
- SVN_ERR(open_dir(dir));
+ SVN_ERR(ensure_dir_opened(dir));
return close_dir(dir);
}
@@ -692,7 +865,7 @@ check_lock(report_info_t *info)
const char *lock_val;
lock_val = svn_ra_serf__get_ver_prop(info->props, info->url,
- info->target_rev,
+ info->dir->report_context->target_rev,
"DAV:", "lockdiscovery");
if (lock_val)
@@ -731,7 +904,7 @@ headers_fetch(serf_bucket_t *headers,
serf_bucket_headers_setn(headers, "Accept-Encoding",
"svndiff1;q=0.9,svndiff;q=0.8");
}
- else if (fetch_ctx->conn->using_compression)
+ else if (fetch_ctx->sess->using_compression)
{
serf_bucket_headers_setn(headers, "Accept-Encoding", "gzip");
}
@@ -760,7 +933,7 @@ cancel_fetch(serf_request_t *request,
*/
if (fetch_ctx->read_headers)
{
- if (fetch_ctx->aborted_read == FALSE && fetch_ctx->read_size)
+ if (!fetch_ctx->aborted_read && fetch_ctx->read_size)
{
fetch_ctx->aborted_read = TRUE;
fetch_ctx->aborted_read_size = fetch_ctx->read_size;
@@ -799,6 +972,107 @@ error_fetch(serf_request_t *request,
return err;
}
+/* Wield the editor referenced by INFO to open (or add) the file
+ file also associated with INFO, setting properties on the file and
+ calling the editor's apply_textdelta() function on it if necessary
+ (or if FORCE_APPLY_TEXTDELTA is set).
+
+ Callers will probably want to also see the function that serves
+ the opposite purpose of this one, close_updated_file(). */
+static svn_error_t *
+open_updated_file(report_info_t *info,
+ svn_boolean_t force_apply_textdelta,
+ apr_pool_t *scratch_pool)
+{
+ report_context_t *ctx = info->dir->report_context;
+ const svn_delta_editor_t *update_editor = ctx->update_editor;
+
+ /* Ensure our parent is open. */
+ SVN_ERR(ensure_dir_opened(info->dir));
+ info->editor_pool = svn_pool_create(info->dir->dir_baton_pool);
+
+ /* Expand our full name now if we haven't done so yet. */
+ if (!info->name)
+ {
+ info->name = svn_relpath_join(info->dir->name, info->base_name,
+ info->editor_pool);
+ }
+
+ /* Open (or add) the file. */
+ if (SVN_IS_VALID_REVNUM(info->base_rev))
+ {
+ SVN_ERR(update_editor->open_file(info->name,
+ info->dir->dir_baton,
+ info->base_rev,
+ info->editor_pool,
+ &info->file_baton));
+ }
+ else
+ {
+ SVN_ERR(update_editor->add_file(info->name,
+ info->dir->dir_baton,
+ info->copyfrom_path,
+ info->copyfrom_rev,
+ info->editor_pool,
+ &info->file_baton));
+ }
+
+ /* Check for lock information. */
+ if (info->lock_token)
+ check_lock(info);
+
+ /* Get (maybe) a textdelta window handler for transmitting file
+ content changes. */
+ if (info->fetch_file || force_apply_textdelta)
+ {
+ SVN_ERR(update_editor->apply_textdelta(info->file_baton,
+ info->base_checksum,
+ info->editor_pool,
+ &info->textdelta,
+ &info->textdelta_baton));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Close the file associated with INFO->file_baton, and cleanup other
+ bits of that structure managed by open_updated_file(). */
+static svn_error_t *
+close_updated_file(report_info_t *info,
+ apr_pool_t *scratch_pool)
+{
+ report_context_t *ctx = info->dir->report_context;
+
+ /* Set all of the properties we received */
+ SVN_ERR(svn_ra_serf__walk_all_props(info->props,
+ info->base_name,
+ info->base_rev,
+ set_file_props, info,
+ scratch_pool));
+ SVN_ERR(svn_ra_serf__walk_all_props(info->dir->removed_props,
+ info->base_name,
+ info->base_rev,
+ remove_file_props, info,
+ scratch_pool));
+ if (info->fetch_props)
+ {
+ SVN_ERR(svn_ra_serf__walk_all_props(info->props,
+ info->url,
+ ctx->target_rev,
+ set_file_props, info,
+ scratch_pool));
+ }
+
+ /* Close the file via the editor. */
+ SVN_ERR(info->dir->report_context->update_editor->close_file(
+ info->file_baton, info->final_checksum, scratch_pool));
+
+ /* We're done with our editor pool. */
+ svn_pool_destroy(info->editor_pool);
+
+ return SVN_NO_ERROR;
+}
+
/* Implements svn_ra_serf__response_handler_t */
static svn_error_t *
handle_fetch(serf_request_t *request,
@@ -811,9 +1085,11 @@ handle_fetch(serf_request_t *request,
apr_status_t status;
report_fetch_t *fetch_ctx = handler_baton;
svn_error_t *err;
- serf_status_line sl;
- if (fetch_ctx->read_headers == FALSE)
+ /* ### new field. make sure we didn't miss some initialization. */
+ SVN_ERR_ASSERT(fetch_ctx->handler != NULL);
+
+ if (!fetch_ctx->read_headers)
{
serf_bucket_t *hdrs;
const char *val;
@@ -823,61 +1099,23 @@ handle_fetch(serf_request_t *request,
val = serf_bucket_headers_get(hdrs, "Content-Type");
info = fetch_ctx->info;
- err = open_dir(info->dir);
- if (err)
- {
- return error_fetch(request, fetch_ctx, err);
- }
-
- info->editor_pool = svn_pool_create(info->dir->dir_baton_pool);
-
- /* Expand our full name now if we haven't done so yet. */
- if (!info->name)
- {
- info->name = svn_relpath_join(info->dir->name, info->base_name,
- info->editor_pool);
- }
-
- if (SVN_IS_VALID_REVNUM(info->base_rev))
- {
- err = info->dir->update_editor->open_file(info->name,
- info->dir->dir_baton,
- info->base_rev,
- info->editor_pool,
- &info->file_baton);
- }
- else
- {
- err = info->dir->update_editor->add_file(info->name,
- info->dir->dir_baton,
- info->copyfrom_path,
- info->copyfrom_rev,
- info->editor_pool,
- &info->file_baton);
- }
-
- if (err)
- {
- return error_fetch(request, fetch_ctx, err);
- }
-
- err = info->dir->update_editor->apply_textdelta(info->file_baton,
- info->base_checksum,
- info->editor_pool,
- &info->textdelta,
- &info->textdelta_baton);
-
- if (err)
- {
- return error_fetch(request, fetch_ctx, err);
- }
-
- if (val && svn_cstring_casecmp(val, "application/vnd.svn-svndiff") == 0)
+ if (val && svn_cstring_casecmp(val, SVN_SVNDIFF_MIME_TYPE) == 0)
{
fetch_ctx->delta_stream =
svn_txdelta_parse_svndiff(info->textdelta,
info->textdelta_baton,
TRUE, info->editor_pool);
+
+ /* Validate the delta base claimed by the server matches
+ what we asked for! */
+ val = serf_bucket_headers_get(hdrs, SVN_DAV_DELTA_BASE_HEADER);
+ if (val && (strcmp(val, info->delta_base) != 0))
+ {
+ err = svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL,
+ _("GET request returned unexpected "
+ "delta base: %s"), val);
+ return error_fetch(request, fetch_ctx, err);
+ }
}
else
{
@@ -889,16 +1127,12 @@ handle_fetch(serf_request_t *request,
/* If the error code wasn't 200, something went wrong. Don't use the returned
data as its probably an error message. Just bail out instead. */
- status = serf_bucket_response_status(response, &sl);
- if (SERF_BUCKET_READ_ERROR(status))
- {
- return svn_error_wrap_apr(status, NULL);
- }
- if (sl.code != 200)
+ if (fetch_ctx->handler->sline.code != 200)
{
err = svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL,
_("GET request failed: %d %s"),
- sl.code, sl.reason);
+ fetch_ctx->handler->sline.code,
+ fetch_ctx->handler->sline.reason);
return error_fetch(request, fetch_ctx, err);
}
@@ -911,7 +1145,7 @@ handle_fetch(serf_request_t *request,
status = serf_bucket_read(response, 8000, &data, &len);
if (SERF_BUCKET_READ_ERROR(status))
{
- return svn_error_wrap_apr(status, NULL);
+ return svn_ra_serf__wrap_err(status, NULL);
}
fetch_ctx->read_size += len;
@@ -931,7 +1165,7 @@ handle_fetch(serf_request_t *request,
/* Skip on to the next iteration of this loop. */
if (APR_STATUS_IS_EAGAIN(status))
{
- return svn_error_wrap_apr(status, NULL);
+ return svn_ra_serf__wrap_err(status, NULL);
}
continue;
}
@@ -981,54 +1215,20 @@ handle_fetch(serf_request_t *request,
{
report_info_t *info = fetch_ctx->info;
- /* ### this doesn't feel quite right. but it gets tossed at the
- ### end of this block, so it will work for now. */
- apr_pool_t *scratch_pool = info->editor_pool;
-
if (fetch_ctx->delta_stream)
err = svn_error_trace(svn_stream_close(fetch_ctx->delta_stream));
else
err = svn_error_trace(info->textdelta(NULL,
info->textdelta_baton));
-
if (err)
{
return error_fetch(request, fetch_ctx, err);
}
- if (info->lock_token)
- check_lock(info);
-
- /* set all of the properties we received */
- err = svn_ra_serf__walk_all_props(info->props,
- info->base_name,
- info->base_rev,
- set_file_props, info,
- scratch_pool);
-
- if (!err)
- err = svn_ra_serf__walk_all_props(info->dir->removed_props,
- info->base_name,
- info->base_rev,
- remove_file_props, info,
- scratch_pool);
- if (!err && info->fetch_props)
- {
- err = svn_ra_serf__walk_all_props(info->props,
- info->url,
- info->target_rev,
- set_file_props, info,
- scratch_pool);
- }
-
- if (!err)
- err = info->dir->update_editor->close_file(info->file_baton,
- info->final_checksum,
- scratch_pool);
-
+ err = close_updated_file(info, info->pool);
if (err)
{
- return error_fetch(request, fetch_ctx, err);
+ return svn_error_trace(error_fetch(request, fetch_ctx, err));
}
fetch_ctx->done = TRUE;
@@ -1037,16 +1237,15 @@ handle_fetch(serf_request_t *request,
fetch_ctx->done_item.next = *fetch_ctx->done_list;
*fetch_ctx->done_list = &fetch_ctx->done_item;
- /* We're done with our pools. */
- svn_pool_destroy(info->editor_pool);
+ /* We're done with our pool. */
svn_pool_destroy(info->pool);
if (status)
- return svn_error_wrap_apr(status, NULL);
+ return svn_ra_serf__wrap_err(status, NULL);
}
if (APR_STATUS_IS_EAGAIN(status))
{
- return svn_error_wrap_apr(status, NULL);
+ return svn_ra_serf__wrap_err(status, NULL);
}
}
/* not reached */
@@ -1060,26 +1259,18 @@ handle_stream(serf_request_t *request,
apr_pool_t *pool)
{
report_fetch_t *fetch_ctx = handler_baton;
- serf_status_line sl;
- const char *location;
svn_error_t *err;
apr_status_t status;
- status = serf_bucket_response_status(response, &sl);
- if (SERF_BUCKET_READ_ERROR(status))
- {
- return svn_error_wrap_apr(status, NULL);
- }
+ /* ### new field. make sure we didn't miss some initialization. */
+ SVN_ERR_ASSERT(fetch_ctx->handler != NULL);
- /* Woo-hoo. Nothing here to see. */
- location = svn_ra_serf__response_get_location(response, pool);
-
- err = svn_ra_serf__error_on_status(sl.code,
+ err = svn_ra_serf__error_on_status(fetch_ctx->handler->sline,
fetch_ctx->info->name,
- location);
+ fetch_ctx->handler->location);
if (err)
{
- fetch_ctx->done = TRUE;
+ fetch_ctx->handler->done = TRUE;
err = svn_error_compose_create(
err,
@@ -1096,7 +1287,7 @@ handle_stream(serf_request_t *request,
status = serf_bucket_read(response, 8000, &data, &len);
if (SERF_BUCKET_READ_ERROR(status))
{
- return svn_error_wrap_apr(status, NULL);
+ return svn_ra_serf__wrap_err(status, NULL);
}
fetch_ctx->read_size += len;
@@ -1115,7 +1306,7 @@ handle_stream(serf_request_t *request,
/* Skip on to the next iteration of this loop. */
if (APR_STATUS_IS_EAGAIN(status))
{
- return svn_error_wrap_apr(status, NULL);
+ return svn_ra_serf__wrap_err(status, NULL);
}
continue;
}
@@ -1145,88 +1336,123 @@ handle_stream(serf_request_t *request,
if (status)
{
- return svn_error_wrap_apr(status, NULL);
+ return svn_ra_serf__wrap_err(status, NULL);
}
}
/* not reached */
}
+/* Close the directory represented by DIR -- and any suitable parents
+ thereof -- if we are able to do so. This is the case whenever:
+
+ - there are no remaining open items within the directory, and
+ - the directory's XML close tag has been processed (so we know
+ there are no more children to worry about in the future), and
+ - either:
+ - we aren't fetching properties for this directory, or
+ - we've already finished fetching those properties.
+*/
static svn_error_t *
-handle_propchange_only(report_info_t *info,
- apr_pool_t *scratch_pool)
+maybe_close_dir_chain(report_dir_t *dir)
{
- /* Ensure our parent is open. */
- SVN_ERR(open_dir(info->dir));
+ report_dir_t *cur_dir = dir;
- info->editor_pool = svn_pool_create(info->dir->dir_baton_pool);
+ SVN_ERR(ensure_dir_opened(cur_dir));
- /* Expand our full name now if we haven't done so yet. */
- if (!info->name)
+ while (cur_dir
+ && !cur_dir->ref_count
+ && cur_dir->tag_closed
+ && (!cur_dir->fetch_props || cur_dir->propfind_handler->done))
{
- info->name = svn_relpath_join(info->dir->name, info->base_name,
- info->editor_pool);
- }
+ report_dir_t *parent = cur_dir->parent_dir;
+ report_context_t *report_context = cur_dir->report_context;
+ svn_boolean_t propfind_in_done_list = FALSE;
+ svn_ra_serf__list_t *done_list;
- if (SVN_IS_VALID_REVNUM(info->base_rev))
- {
- SVN_ERR(info->dir->update_editor->open_file(info->name,
- info->dir->dir_baton,
- info->base_rev,
- info->editor_pool,
- &info->file_baton));
- }
- else
- {
- SVN_ERR(info->dir->update_editor->add_file(info->name,
- info->dir->dir_baton,
- info->copyfrom_path,
- info->copyfrom_rev,
- info->editor_pool,
- &info->file_baton));
- }
+ /* Make sure there are no references to this dir in the
+ active_dir_propfinds list. If there are, don't close the
+ directory -- which would delete the pool from which the
+ relevant active_dir_propfinds list item is allocated -- and
+ of course don't crawl upward to check the parents for
+ a closure opportunity, either. */
+ done_list = report_context->active_dir_propfinds;
+ while (done_list)
+ {
+ if (done_list->data == cur_dir)
+ {
+ propfind_in_done_list = TRUE;
+ break;
+ }
+ done_list = done_list->next;
+ }
+ if (propfind_in_done_list)
+ break;
- if (info->fetch_file)
- {
- SVN_ERR(info->dir->update_editor->apply_textdelta(info->file_baton,
- info->base_checksum,
- info->editor_pool,
- &info->textdelta,
- &info->textdelta_baton));
+ SVN_ERR(close_dir(cur_dir));
+ if (parent)
+ {
+ parent->ref_count--;
+ }
+ else
+ {
+ report_context->closed_root = TRUE;
+ }
+ cur_dir = parent;
}
- if (info->lock_token)
- check_lock(info);
+ return SVN_NO_ERROR;
+}
- /* set all of the properties we received */
- SVN_ERR(svn_ra_serf__walk_all_props(info->props,
- info->base_name, info->base_rev,
- set_file_props, info,
- scratch_pool));
- SVN_ERR(svn_ra_serf__walk_all_props(info->dir->removed_props,
- info->base_name, info->base_rev,
- remove_file_props, info,
- scratch_pool));
- if (info->fetch_props)
- {
- SVN_ERR(svn_ra_serf__walk_all_props(info->props, info->url,
- info->target_rev,
- set_file_props, info,
- scratch_pool));
- }
+/* Open the file associated with INFO for editing, pass along any
+ propchanges we've recorded for it, and then close the file. */
+static svn_error_t *
+handle_propchange_only(report_info_t *info,
+ apr_pool_t *scratch_pool)
+{
+ SVN_ERR(open_updated_file(info, FALSE, scratch_pool));
+ SVN_ERR(close_updated_file(info, scratch_pool));
- SVN_ERR(info->dir->update_editor->close_file(info->file_baton,
- info->final_checksum,
- scratch_pool));
+ /* We're done with our pool. */
+ svn_pool_destroy(info->pool);
- /* We're done with our pools. */
- svn_pool_destroy(info->editor_pool);
+ info->dir->ref_count--;
+
+ /* See if the parent directory of this file (and perhaps even
+ parents of that) can be closed now. */
+ SVN_ERR(maybe_close_dir_chain(info->dir));
+
+ return SVN_NO_ERROR;
+}
+
+/* "Fetch" a file whose contents were made available via the
+ get_wc_contents() callback (as opposed to requiring a GET to the
+ server), and feed the information through the associated update
+ editor. In editor-speak, this will add/open the file, transmit any
+ property changes, handle the contents, and then close the file. */
+static svn_error_t *
+handle_local_content(report_info_t *info,
+ apr_pool_t *scratch_pool)
+{
+ SVN_ERR(svn_txdelta_send_stream(info->cached_contents, info->textdelta,
+ info->textdelta_baton, NULL, scratch_pool));
+ SVN_ERR(svn_stream_close(info->cached_contents));
+ info->cached_contents = NULL;
+ SVN_ERR(close_updated_file(info, scratch_pool));
+
+ /* We're done with our pool. */
svn_pool_destroy(info->pool);
info->dir->ref_count--;
+ /* See if the parent directory of this fetched item (and
+ perhaps even parents of that) can be closed now. */
+ SVN_ERR(maybe_close_dir_chain(info->dir));
+
return SVN_NO_ERROR;
}
+/* --------------------------------------------------------- */
+
static svn_error_t *
fetch_file(report_context_t *ctx, report_info_t *info)
{
@@ -1234,32 +1460,23 @@ fetch_file(report_context_t *ctx, report_info_t *info)
svn_ra_serf__handler_t *handler;
/* What connection should we go on? */
- conn = ctx->sess->conns[ctx->sess->cur_conn];
-
- /* go fetch info->name from DAV:checked-in */
- info->url =
- svn_ra_serf__get_ver_prop(info->props, info->base_name,
- info->base_rev, "DAV:", "checked-in");
-
- if (!info->url)
- {
- return svn_error_create(SVN_ERR_RA_DAV_OPTIONS_REQ_FAILED, NULL,
- _("The OPTIONS response did not include the "
- "requested checked-in value"));
- }
+ conn = get_best_connection(ctx);
/* If needed, create the PROPFIND to retrieve the file's properties. */
- info->propfind = NULL;
+ info->propfind_handler = NULL;
if (info->fetch_props)
{
- SVN_ERR(svn_ra_serf__deliver_props(&info->propfind, info->props,
+ SVN_ERR(svn_ra_serf__deliver_props(&info->propfind_handler, info->props,
ctx->sess, conn, info->url,
- info->target_rev, "0", all_props,
+ ctx->target_rev, "0", all_props,
&ctx->done_propfinds,
info->dir->pool));
- SVN_ERR_ASSERT(info->propfind);
+ SVN_ERR_ASSERT(info->propfind_handler);
+
+ /* Create a serf request for the PROPFIND. */
+ svn_ra_serf__request_create(info->propfind_handler);
- ctx->active_propfinds++;
+ ctx->num_active_propfinds++;
}
/* If we've been asked to fetch the file or it's an add, do so.
@@ -1267,36 +1484,114 @@ fetch_file(report_context_t *ctx, report_info_t *info)
*/
if (info->fetch_file && ctx->text_deltas)
{
- report_fetch_t *fetch_ctx;
+ svn_stream_t *contents = NULL;
- fetch_ctx = apr_pcalloc(info->dir->pool, sizeof(*fetch_ctx));
- fetch_ctx->info = info;
- fetch_ctx->done_list = &ctx->done_fetches;
- fetch_ctx->sess = ctx->sess;
- fetch_ctx->conn = conn;
+ /* Open the file for editing. */
+ SVN_ERR(open_updated_file(info, FALSE, info->pool));
- handler = apr_pcalloc(info->dir->pool, sizeof(*handler));
+ if (info->textdelta == svn_delta_noop_window_handler)
+ {
+ /* There is nobody looking for an actual stream.
- handler->method = "GET";
- handler->path = fetch_ctx->info->url;
+ Just report an empty stream instead of fetching
+ to be ingored data */
+ info->cached_contents = svn_stream_empty(info->pool);
+ }
+ else if (ctx->sess->wc_callbacks->get_wc_contents
+ && info->final_sha1_checksum)
+ {
+ svn_error_t *err = NULL;
+ svn_checksum_t *checksum = NULL;
- handler->conn = conn;
- handler->session = ctx->sess;
+ /* Parse the optional SHA1 checksum (1.7+) */
+ err = svn_checksum_parse_hex(&checksum, svn_checksum_sha1,
+ info->final_sha1_checksum,
+ info->pool);
- handler->header_delegate = headers_fetch;
- handler->header_delegate_baton = fetch_ctx;
+ /* Okay so far? Let's try to get a stream on some readily
+ available matching content. */
+ if (!err && checksum)
+ {
+ err = ctx->sess->wc_callbacks->get_wc_contents(
+ ctx->sess->wc_callback_baton, &contents,
+ checksum, info->pool);
- handler->response_handler = handle_fetch;
- handler->response_baton = fetch_ctx;
+ if (! err)
+ info->cached_contents = contents;
+ }
- handler->response_error = cancel_fetch;
- handler->response_error_baton = fetch_ctx;
+ if (err)
+ {
+ /* Meh. Maybe we'll care one day why we're in an
+ errorful state, but this codepath is optional. */
+ svn_error_clear(err);
+ }
+ }
- svn_ra_serf__request_create(handler);
+ /* If the working copy can provide cached contents for this
+ file, we don't have to fetch them from the server. */
+ if (info->cached_contents)
+ {
+ /* If we'll be doing a PROPFIND for this file... */
+ if (info->propfind_handler)
+ {
+ /* ... then we'll just leave ourselves a little "todo"
+ about that fact (and we'll deal with the file content
+ stuff later, after we've handled that PROPFIND
+ response. */
+ svn_ra_serf__list_t *list_item;
+
+ list_item = apr_pcalloc(info->dir->pool, sizeof(*list_item));
+ list_item->data = info;
+ list_item->next = ctx->file_propchanges_only;
+ ctx->file_propchanges_only = list_item;
+ }
+ else
+ {
+ /* Otherwise, if we've no PROPFIND to do, we might as
+ well take care of those locally accessible file
+ contents now. */
+ SVN_ERR(handle_local_content(info, info->pool));
+ }
+ }
+ else
+ {
+ /* Otherwise, we use a GET request for the file's contents. */
+ report_fetch_t *fetch_ctx;
+
+ fetch_ctx = apr_pcalloc(info->dir->pool, sizeof(*fetch_ctx));
+ fetch_ctx->info = info;
+ fetch_ctx->done_list = &ctx->done_fetches;
+ fetch_ctx->sess = ctx->sess;
+ fetch_ctx->conn = conn;
+
+ handler = apr_pcalloc(info->dir->pool, sizeof(*handler));
- ctx->active_fetches++;
+ handler->handler_pool = info->dir->pool;
+ handler->method = "GET";
+ handler->path = fetch_ctx->info->url;
+
+ handler->conn = conn;
+ handler->session = ctx->sess;
+
+ handler->custom_accept_encoding = TRUE;
+ handler->header_delegate = headers_fetch;
+ handler->header_delegate_baton = fetch_ctx;
+
+ handler->response_handler = handle_fetch;
+ handler->response_baton = fetch_ctx;
+
+ handler->response_error = cancel_fetch;
+ handler->response_error_baton = fetch_ctx;
+
+ fetch_ctx->handler = handler;
+
+ svn_ra_serf__request_create(handler);
+
+ ctx->num_active_fetches++;
+ }
}
- else if (info->propfind)
+ else if (info->propfind_handler)
{
svn_ra_serf__list_t *list_item;
@@ -1307,16 +1602,12 @@ fetch_file(report_context_t *ctx, report_info_t *info)
}
else
{
- /* No propfind or GET request. Just handle the prop changes now.
-
- Note: we'll use INFO->POOL for the scratch_pool here since it will
- be destroyed at the end of handle_propchange_only(). That pool
- would be quite fine, but it is unclear how long INFO->POOL will
- stick around since its lifetime and usage are unclear. */
+ /* No propfind or GET request. Just handle the prop changes now. */
SVN_ERR(handle_propchange_only(info, info->pool));
}
- if (ctx->active_fetches + ctx->active_propfinds > REQUEST_COUNT_TO_PAUSE)
+ if (ctx->num_active_fetches + ctx->num_active_propfinds
+ > REQUEST_COUNT_TO_PAUSE)
ctx->parser_ctx->paused = TRUE;
return SVN_NO_ERROR;
@@ -1327,16 +1618,33 @@ fetch_file(report_context_t *ctx, report_info_t *info)
static svn_error_t *
start_report(svn_ra_serf__xml_parser_t *parser,
- void *userData,
svn_ra_serf__dav_props_t name,
- const char **attrs)
+ const char **attrs,
+ apr_pool_t *scratch_pool)
{
- report_context_t *ctx = userData;
+ report_context_t *ctx = parser->user_data;
report_state_e state;
state = parser->state->current_state;
- if (state == NONE && strcmp(name.name, "target-revision") == 0)
+ if (state == NONE && strcmp(name.name, "update-report") == 0)
+ {
+ const char *val;
+
+ val = svn_xml_get_attr_value("inline-props", attrs);
+ if (val && (strcmp(val, "true") == 0))
+ ctx->add_props_included = TRUE;
+
+ val = svn_xml_get_attr_value("send-all", attrs);
+ if (val && (strcmp(val, "true") == 0))
+ {
+ ctx->send_all_mode = TRUE;
+
+ /* All properties are included in send-all mode. */
+ ctx->add_props_included = TRUE;
+ }
+ }
+ else if (state == NONE && strcmp(name.name, "target-revision") == 0)
{
const char *rev;
@@ -1371,7 +1679,6 @@ start_report(svn_ra_serf__xml_parser_t *parser,
info->base_rev = SVN_STR_TO_REV(rev);
info->dir->base_rev = info->base_rev;
- info->dir->target_rev = ctx->target_rev;
info->fetch_props = TRUE;
info->dir->base_name = "";
@@ -1380,8 +1687,7 @@ start_report(svn_ra_serf__xml_parser_t *parser,
info->base_name = info->dir->base_name;
info->name = info->dir->name;
- info->dir->repos_relpath = apr_hash_get(ctx->switched_paths, "",
- APR_HASH_KEY_STRING);
+ info->dir->repos_relpath = svn_hash_gets(ctx->switched_paths, "");
if (!info->dir->repos_relpath)
SVN_ERR(svn_ra_serf__get_relative_path(&info->dir->repos_relpath,
@@ -1424,7 +1730,6 @@ start_report(svn_ra_serf__xml_parser_t *parser,
info->base_rev = SVN_STR_TO_REV(rev);
dir->base_rev = info->base_rev;
- dir->target_rev = ctx->target_rev;
info->fetch_props = FALSE;
@@ -1436,8 +1741,7 @@ start_report(svn_ra_serf__xml_parser_t *parser,
dir->pool);
info->name = dir->name;
- dir->repos_relpath = apr_hash_get(ctx->switched_paths, dir->name,
- APR_HASH_KEY_STRING);
+ dir->repos_relpath = svn_hash_gets(ctx->switched_paths, dir->name);
if (!dir->repos_relpath)
dir->repos_relpath = svn_relpath_join(dir->parent_dir->repos_relpath,
@@ -1478,8 +1782,11 @@ start_report(svn_ra_serf__xml_parser_t *parser,
/* Mark that we don't have a base. */
info->base_rev = SVN_INVALID_REVNUM;
dir->base_rev = info->base_rev;
- dir->target_rev = ctx->target_rev;
- dir->fetch_props = TRUE;
+
+ /* If the server isn't included properties for added items,
+ we'll need to fetch them ourselves. */
+ if (! ctx->add_props_included)
+ dir->fetch_props = TRUE;
dir->repos_relpath = svn_relpath_join(dir->parent_dir->repos_relpath,
dir->base_name, dir->pool);
@@ -1511,7 +1818,6 @@ start_report(svn_ra_serf__xml_parser_t *parser,
info = push_state(parser, ctx, OPEN_FILE);
info->base_rev = SVN_STR_TO_REV(rev);
- info->target_rev = ctx->target_rev;
info->fetch_props = FALSE;
info->base_name = apr_pstrdup(info->pool, file_name);
@@ -1537,9 +1843,16 @@ start_report(svn_ra_serf__xml_parser_t *parser,
info = push_state(parser, ctx, ADD_FILE);
info->base_rev = SVN_INVALID_REVNUM;
- info->target_rev = ctx->target_rev;
- info->fetch_props = TRUE;
- info->fetch_file = TRUE;
+
+ /* If the server isn't in "send-all" mode, we should expect to
+ fetch contents for added files. */
+ if (! ctx->send_all_mode)
+ info->fetch_file = TRUE;
+
+ /* If the server isn't included properties for added items,
+ we'll need to fetch them ourselves. */
+ if (! ctx->add_props_included)
+ info->fetch_props = TRUE;
info->base_name = apr_pstrdup(info->pool, file_name);
info->name = NULL;
@@ -1578,16 +1891,16 @@ start_report(svn_ra_serf__xml_parser_t *parser,
info = parser->state->private;
- SVN_ERR(open_dir(info->dir));
+ SVN_ERR(ensure_dir_opened(info->dir));
tmppool = svn_pool_create(info->dir->dir_baton_pool);
full_path = svn_relpath_join(info->dir->name, file_name, tmppool);
- SVN_ERR(info->dir->update_editor->delete_entry(full_path,
- delete_rev,
- info->dir->dir_baton,
- tmppool));
+ SVN_ERR(ctx->update_editor->delete_entry(full_path,
+ delete_rev,
+ info->dir->dir_baton,
+ tmppool));
svn_pool_destroy(tmppool);
}
@@ -1608,7 +1921,7 @@ start_report(svn_ra_serf__xml_parser_t *parser,
info = parser->state->private;
- SVN_ERR(open_dir(info->dir));
+ SVN_ERR(ensure_dir_opened(info->dir));
SVN_ERR(ctx->update_editor->absent_directory(
svn_relpath_join(info->name, file_name,
@@ -1633,7 +1946,7 @@ start_report(svn_ra_serf__xml_parser_t *parser,
info = parser->state->private;
- SVN_ERR(open_dir(info->dir));
+ SVN_ERR(ensure_dir_opened(info->dir));
SVN_ERR(ctx->update_editor->absent_file(
svn_relpath_join(info->name, file_name,
@@ -1651,8 +1964,7 @@ start_report(svn_ra_serf__xml_parser_t *parser,
info->prop_ns = name.namespace;
info->prop_name = apr_pstrdup(parser->state->pool, name.name);
info->prop_encoding = NULL;
- info->prop_val = NULL;
- info->prop_val_len = 0;
+ svn_stringbuf_setempty(info->prop_value);
}
else if (strcmp(name.name, "set-prop") == 0 ||
strcmp(name.name, "remove-prop") == 0)
@@ -1681,8 +1993,7 @@ start_report(svn_ra_serf__xml_parser_t *parser,
colon - full_prop_name);
info->prop_name = apr_pstrdup(parser->state->pool, colon);
info->prop_encoding = svn_xml_get_attr_value("encoding", attrs);
- info->prop_val = NULL;
- info->prop_val_len = 0;
+ svn_stringbuf_setempty(info->prop_value);
}
else if (strcmp(name.name, "prop") == 0)
{
@@ -1713,8 +2024,7 @@ start_report(svn_ra_serf__xml_parser_t *parser,
info->prop_ns = name.namespace;
info->prop_name = apr_pstrdup(parser->state->pool, name.name);
info->prop_encoding = NULL;
- info->prop_val = NULL;
- info->prop_val_len = 0;
+ svn_stringbuf_setempty(info->prop_value);
}
else if (strcmp(name.name, "prop") == 0)
{
@@ -1769,8 +2079,7 @@ start_report(svn_ra_serf__xml_parser_t *parser,
colon - full_prop_name);
info->prop_name = apr_pstrdup(parser->state->pool, colon);
info->prop_encoding = svn_xml_get_attr_value("encoding", attrs);
- info->prop_val = NULL;
- info->prop_val_len = 0;
+ svn_stringbuf_setempty(info->prop_value);
}
else if (strcmp(name.name, "txdelta") == 0)
{
@@ -1778,7 +2087,31 @@ start_report(svn_ra_serf__xml_parser_t *parser,
addition to <fetch-file>s and such) when *not* in
"send-all" mode. As a client, we're smart enough to know
that's wrong, so we'll just ignore these tags. */
- ;
+ if (ctx->send_all_mode)
+ {
+ const svn_delta_editor_t *update_editor = ctx->update_editor;
+
+ info = push_state(parser, ctx, TXDELTA);
+
+ if (! info->file_baton)
+ {
+ SVN_ERR(open_updated_file(info, FALSE, info->pool));
+ }
+
+ info->base_checksum = svn_xml_get_attr_value("base-checksum",
+ attrs);
+ SVN_ERR(update_editor->apply_textdelta(info->file_baton,
+ info->base_checksum,
+ info->editor_pool,
+ &info->textdelta,
+ &info->textdelta_baton));
+ info->svndiff_decoder = svn_txdelta_parse_svndiff(
+ info->textdelta,
+ info->textdelta_baton,
+ TRUE, info->pool);
+ info->base64_decoder = svn_base64_decode(info->svndiff_decoder,
+ info->pool);
+ }
}
else
{
@@ -1801,8 +2134,7 @@ start_report(svn_ra_serf__xml_parser_t *parser,
info->prop_ns = name.namespace;
info->prop_name = apr_pstrdup(parser->state->pool, name.name);
info->prop_encoding = svn_xml_get_attr_value("encoding", attrs);
- info->prop_val = NULL;
- info->prop_val_len = 0;
+ svn_stringbuf_setempty(info->prop_value);
}
return SVN_NO_ERROR;
@@ -1810,18 +2142,25 @@ start_report(svn_ra_serf__xml_parser_t *parser,
static svn_error_t *
end_report(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name)
+ svn_ra_serf__dav_props_t name,
+ apr_pool_t *scratch_pool)
{
- report_context_t *ctx = userData;
+ report_context_t *ctx = parser->user_data;
report_state_e state;
state = parser->state->current_state;
if (state == NONE)
{
- /* nothing to close yet. */
- return SVN_NO_ERROR;
+ if (strcmp(name.name, "update-report") == 0)
+ {
+ ctx->report_completed = TRUE;
+ }
+ else
+ {
+ /* nothing to close yet. */
+ return SVN_NO_ERROR;
+ }
}
if (((state == OPEN_DIR && (strcmp(name.name, "open-directory") == 0)) ||
@@ -1844,9 +2183,9 @@ end_report(svn_ra_serf__xml_parser_t *parser,
if (!checked_in_url &&
(!SVN_IS_VALID_REVNUM(info->dir->base_rev) || info->dir->fetch_props))
{
- return svn_error_create(SVN_ERR_RA_DAV_OPTIONS_REQ_FAILED, NULL,
- _("The OPTIONS response did not include the "
- "requested checked-in value"));
+ return svn_error_create(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
+ _("The REPORT or PROPFIND response did not "
+ "include the requested checked-in value"));
}
info->dir->url = checked_in_url;
@@ -1854,32 +2193,45 @@ end_report(svn_ra_serf__xml_parser_t *parser,
/* At this point, we should have the checked-in href.
* If needed, create the PROPFIND to retrieve the dir's properties.
*/
- if (!SVN_IS_VALID_REVNUM(info->dir->base_rev) || info->dir->fetch_props)
+ if (info->dir->fetch_props)
{
- /* Unconditionally set fetch_props now. */
- info->dir->fetch_props = TRUE;
+ svn_ra_serf__list_t *list_item;
- SVN_ERR(svn_ra_serf__deliver_props(&info->dir->propfind,
+ SVN_ERR(svn_ra_serf__deliver_props(&info->dir->propfind_handler,
info->dir->props, ctx->sess,
- ctx->sess->conns[ctx->sess->cur_conn],
+ get_best_connection(ctx),
info->dir->url,
- info->dir->target_rev, "0",
+ ctx->target_rev, "0",
all_props,
- &ctx->done_propfinds,
+ &ctx->done_dir_propfinds,
info->dir->pool));
- SVN_ERR_ASSERT(info->dir->propfind);
+ SVN_ERR_ASSERT(info->dir->propfind_handler);
+
+ /* Create a serf request for the PROPFIND. */
+ svn_ra_serf__request_create(info->dir->propfind_handler);
+
+ ctx->num_active_propfinds++;
- ctx->active_propfinds++;
+ list_item = apr_pcalloc(info->dir->pool, sizeof(*list_item));
+ list_item->data = info->dir;
+ list_item->next = ctx->active_dir_propfinds;
+ ctx->active_dir_propfinds = list_item;
- if (ctx->active_fetches + ctx->active_propfinds
+ if (ctx->num_active_fetches + ctx->num_active_propfinds
> REQUEST_COUNT_TO_PAUSE)
ctx->parser_ctx->paused = TRUE;
}
else
{
- info->dir->propfind = NULL;
+ info->dir->propfind_handler = NULL;
}
+ /* See if this directory (and perhaps even parents of that) can
+ be closed now. This is likely to be the case only if we
+ didn't need to contact the server for supplemental
+ information required to handle any of this directory's
+ children. */
+ SVN_ERR(maybe_close_dir_chain(info->dir));
svn_ra_serf__xml_pop_state(parser);
}
else if (state == OPEN_FILE && strcmp(name.name, "open-file") == 0)
@@ -1893,10 +2245,7 @@ end_report(svn_ra_serf__xml_parser_t *parser,
info->pool);
}
- info->lock_token = apr_hash_get(ctx->lock_path_tokens, info->name,
- APR_HASH_KEY_STRING);
-
- if (info->lock_token && info->fetch_props == FALSE)
+ if (info->lock_token && !info->fetch_props)
info->fetch_props = TRUE;
/* If possible, we'd like to fetch only a delta against a
@@ -1913,8 +2262,7 @@ end_report(svn_ra_serf__xml_parser_t *parser,
/* If this file is switched vs the editor root we should provide
its real url instead of the one calculated from the session root.
*/
- repos_relpath = apr_hash_get(ctx->switched_paths, info->name,
- APR_HASH_KEY_STRING);
+ repos_relpath = svn_hash_gets(ctx->switched_paths, info->name);
if (!repos_relpath)
{
@@ -1925,8 +2273,7 @@ end_report(svn_ra_serf__xml_parser_t *parser,
SVN_ERR_ASSERT(*svn_relpath_dirname(info->name, info->pool)
== '\0');
- repos_relpath = apr_hash_get(ctx->switched_paths, "",
- APR_HASH_KEY_STRING);
+ repos_relpath = svn_hash_gets(ctx->switched_paths, "");
}
else
repos_relpath = svn_relpath_join(info->dir->repos_relpath,
@@ -1953,18 +2300,94 @@ end_report(svn_ra_serf__xml_parser_t *parser,
info->delta_base = value ? value->data : NULL;
}
- SVN_ERR(fetch_file(ctx, info));
+ /* go fetch info->name from DAV:checked-in */
+ info->url = svn_ra_serf__get_ver_prop(info->props, info->base_name,
+ info->base_rev, "DAV:", "checked-in");
+ if (!info->url)
+ {
+ return svn_error_create(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
+ _("The REPORT or PROPFIND response did not "
+ "include the requested checked-in value"));
+ }
+
+ /* If the server is in "send-all" mode, we might have opened the
+ file when we started seeing content for it. If we didn't get
+ any content for it, we still need to open the file. But in
+ any case, we can then immediately close it. */
+ if (ctx->send_all_mode)
+ {
+ if (! info->file_baton)
+ {
+ SVN_ERR(open_updated_file(info, FALSE, info->pool));
+ }
+ SVN_ERR(close_updated_file(info, info->pool));
+ info->dir->ref_count--;
+ }
+ /* Otherwise, if the server is *not* in "send-all" mode, we
+ should be at a point where we can queue up any auxiliary
+ content-fetching requests. */
+ else
+ {
+ SVN_ERR(fetch_file(ctx, info));
+ }
+
svn_ra_serf__xml_pop_state(parser);
}
else if (state == ADD_FILE && strcmp(name.name, "add-file") == 0)
{
- /* We should have everything we need to fetch the file. */
- SVN_ERR(fetch_file(ctx, parser->state->private));
+ report_info_t *info = parser->state->private;
+
+ /* go fetch info->name from DAV:checked-in */
+ info->url = svn_ra_serf__get_ver_prop(info->props, info->base_name,
+ info->base_rev, "DAV:", "checked-in");
+ if (!info->url)
+ {
+ return svn_error_create(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
+ _("The REPORT or PROPFIND response did not "
+ "include the requested checked-in value"));
+ }
+
+ /* If the server is in "send-all" mode, we might have opened the
+ file when we started seeing content for it. If we didn't get
+ any content for it, we still need to open the file. But in
+ any case, we can then immediately close it. */
+ if (ctx->send_all_mode)
+ {
+ if (! info->file_baton)
+ {
+ SVN_ERR(open_updated_file(info, FALSE, info->pool));
+ }
+ SVN_ERR(close_updated_file(info, info->pool));
+ info->dir->ref_count--;
+ }
+ /* Otherwise, if the server is *not* in "send-all" mode, we
+ should be at a point where we can queue up any auxiliary
+ content-fetching requests. */
+ else
+ {
+ SVN_ERR(fetch_file(ctx, info));
+ }
+
+ svn_ra_serf__xml_pop_state(parser);
+ }
+ else if (state == TXDELTA && strcmp(name.name, "txdelta") == 0)
+ {
+ report_info_t *info = parser->state->private;
+
+ /* Pre 1.2, mod_dav_svn was using <txdelta> tags (in addition to
+ <fetch-file>s and such) when *not* in "send-all" mode. As a
+ client, we're smart enough to know that's wrong, so when not
+ in "receiving-all" mode, we'll ignore these tags. */
+ if (ctx->send_all_mode)
+ {
+ SVN_ERR(svn_stream_close(info->base64_decoder));
+ }
+
svn_ra_serf__xml_pop_state(parser);
}
else if (state == PROP)
{
- /* We need to move the prop_ns, prop_name, and prop_val into the
+ /* We need to move the prop_ns, prop_name, and prop_value into the
* same lifetime as the dir->pool.
*/
svn_ra_serf__ns_t *ns, *ns_name_match;
@@ -1972,8 +2395,7 @@ end_report(svn_ra_serf__xml_parser_t *parser,
report_info_t *info;
report_dir_t *dir;
apr_hash_t *props;
- const char *set_val;
- svn_string_t *set_val_str;
+ const svn_string_t *set_val_str;
apr_pool_t *pool;
info = parser->state->private;
@@ -2023,24 +2445,21 @@ end_report(svn_ra_serf__xml_parser_t *parser,
{
props = dir->removed_props;
pool = dir->pool;
- info->prop_val = "";
- info->prop_val_len = 1;
+ svn_stringbuf_setempty(info->prop_value);
}
if (info->prop_encoding)
{
if (strcmp(info->prop_encoding, "base64") == 0)
{
- svn_string_t encoded;
- const svn_string_t *decoded;
+ svn_string_t tmp;
- encoded.data = info->prop_val;
- encoded.len = info->prop_val_len;
+ /* Don't use morph_info_string cuz we need prop_value to
+ remain usable. */
+ tmp.data = info->prop_value->data;
+ tmp.len = info->prop_value->len;
- decoded = svn_base64_decode_string(&encoded, parser->state->pool);
-
- info->prop_val = decoded->data;
- info->prop_val_len = decoded->len;
+ set_val_str = svn_base64_decode_string(&tmp, pool);
}
else
{
@@ -2049,14 +2468,21 @@ end_report(svn_ra_serf__xml_parser_t *parser,
_("Got unrecognized encoding '%s'"),
info->prop_encoding);
}
-
}
-
- set_val = apr_pmemdup(pool, info->prop_val, info->prop_val_len);
- set_val_str = svn_string_ncreate(set_val, info->prop_val_len, pool);
+ else
+ {
+ set_val_str = svn_string_create_from_buf(info->prop_value, pool);
+ }
svn_ra_serf__set_ver_prop(props, info->base_name, info->base_rev,
ns->namespace, ns->url, set_val_str, pool);
+
+ /* Advance handling: if we spotted the md5-checksum property on
+ the wire, remember it's value. */
+ if (strcmp(ns->url, "md5-checksum") == 0
+ && strcmp(ns->namespace, SVN_DAV_PROP_NS_DAV) == 0)
+ info->final_checksum = apr_pstrdup(info->pool, set_val_str->data);
+
svn_ra_serf__xml_pop_state(parser);
}
else if (state == IGNORE_PROP_NAME || state == NEED_PROP_NAME)
@@ -2069,11 +2495,11 @@ end_report(svn_ra_serf__xml_parser_t *parser,
static svn_error_t *
cdata_report(svn_ra_serf__xml_parser_t *parser,
- void *userData,
const char *data,
- apr_size_t len)
+ apr_size_t len,
+ apr_pool_t *scratch_pool)
{
- report_context_t *ctx = userData;
+ report_context_t *ctx = parser->user_data;
UNUSED_CTX(ctx);
@@ -2081,8 +2507,28 @@ cdata_report(svn_ra_serf__xml_parser_t *parser,
{
report_info_t *info = parser->state->private;
- svn_ra_serf__expand_string(&info->prop_val, &info->prop_val_len,
- data, len, parser->state->pool);
+ svn_stringbuf_appendbytes(info->prop_value, data, len);
+ }
+ else if (parser->state->current_state == TXDELTA)
+ {
+ /* Pre 1.2, mod_dav_svn was using <txdelta> tags (in addition to
+ <fetch-file>s and such) when *not* in "send-all" mode. As a
+ client, we're smart enough to know that's wrong, so when not
+ in "receiving-all" mode, we'll ignore these tags. */
+ if (ctx->send_all_mode)
+ {
+ apr_size_t nlen = len;
+ report_info_t *info = parser->state->private;
+
+ SVN_ERR(svn_stream_write(info->base64_decoder, data, &nlen));
+ if (nlen != len)
+ {
+ /* Short write without associated error? "Can't happen." */
+ return svn_error_createf(SVN_ERR_STREAM_UNEXPECTED_EOF, NULL,
+ _("Error writing to '%s': unexpected EOF"),
+ info->name);
+ }
+ }
}
return SVN_NO_ERROR;
@@ -2127,14 +2573,6 @@ set_path(void *report_baton,
SVN_ERR(svn_io_file_write_full(report->body_file, buf->data, buf->len,
NULL, pool));
- if (lock_token)
- {
- apr_hash_set(report->lock_path_tokens,
- apr_pstrdup(report->pool, path),
- APR_HASH_KEY_STRING,
- apr_pstrdup(report->pool, lock_token));
- }
-
return SVN_NO_ERROR;
}
@@ -2204,51 +2642,38 @@ link_path(void *report_baton,
/* Store the switch roots to allow generating repos_relpaths from just
the working copy paths. (Needed for HTTPv2) */
path = apr_pstrdup(report->pool, path);
- apr_hash_set(report->switched_paths, path, APR_HASH_KEY_STRING,
- apr_pstrdup(report->pool, link+1));
+ svn_hash_sets(report->switched_paths,
+ path, apr_pstrdup(report->pool, link + 1));
if (!*path)
report->root_is_switched = TRUE;
- if (lock_token)
- {
- apr_hash_set(report->lock_path_tokens, path, APR_HASH_KEY_STRING,
- apr_pstrdup(report->pool, lock_token));
- }
-
return APR_SUCCESS;
}
-/** Max. number of connctions we'll open to the server. */
-#define MAX_NR_OF_CONNS 4
/** Minimum nr. of outstanding requests needed before a new connection is
* opened. */
#define REQS_PER_CONN 8
/** This function creates a new connection for this serf session, but only
- * if the number of ACTIVE_REQS > REQS_PER_CONN or if there currently is
+ * if the number of NUM_ACTIVE_REQS > REQS_PER_CONN or if there currently is
* only one main connection open.
*/
static svn_error_t *
-open_connection_if_needed(svn_ra_serf__session_t *sess, int active_reqs)
+open_connection_if_needed(svn_ra_serf__session_t *sess, int num_active_reqs)
{
/* For each REQS_PER_CONN outstanding requests open a new connection, with
* a minimum of 1 extra connection. */
if (sess->num_conns == 1 ||
- ((active_reqs / REQS_PER_CONN) > sess->num_conns))
+ ((num_active_reqs / REQS_PER_CONN) > sess->num_conns))
{
int cur = sess->num_conns;
apr_status_t status;
- sess->conns[cur] = apr_palloc(sess->pool, sizeof(*sess->conns[cur]));
+ sess->conns[cur] = apr_pcalloc(sess->pool, sizeof(*sess->conns[cur]));
sess->conns[cur]->bkt_alloc = serf_bucket_allocator_create(sess->pool,
NULL, NULL);
- sess->conns[cur]->hostname = sess->conns[0]->hostname;
- sess->conns[cur]->using_ssl = sess->conns[0]->using_ssl;
- sess->conns[cur]->using_compression = sess->conns[0]->using_compression;
- sess->conns[cur]->useragent = sess->conns[0]->useragent;
sess->conns[cur]->last_status_code = -1;
- sess->conns[cur]->ssl_context = NULL;
sess->conns[cur]->session = sess;
status = serf_connection_create2(&sess->conns[cur]->conn,
sess->context,
@@ -2259,7 +2684,7 @@ open_connection_if_needed(svn_ra_serf__session_t *sess, int active_reqs)
sess->conns[cur],
sess->pool);
if (status)
- return svn_error_wrap_apr(status, NULL);
+ return svn_ra_serf__wrap_err(status, NULL);
sess->num_conns++;
}
@@ -2285,16 +2710,23 @@ create_update_report_body(serf_bucket_t **body_bkt,
return SVN_NO_ERROR;
}
+/* Serf callback to setup update request headers. */
static svn_error_t *
-headers_report(serf_bucket_t *headers,
- void *baton,
- apr_pool_t *pool)
+setup_update_report_headers(serf_bucket_t *headers,
+ void *baton,
+ apr_pool_t *pool)
{
report_context_t *report = baton;
- if (report->conn->using_compression)
+ if (report->sess->using_compression)
{
- serf_bucket_headers_setn(headers, "Accept-Encoding", "gzip");
+ serf_bucket_headers_setn(headers, "Accept-Encoding",
+ "gzip,svndiff1;q=0.9,svndiff;q=0.8");
+ }
+ else
+ {
+ serf_bucket_headers_setn(headers, "Accept-Encoding",
+ "svndiff1;q=0.9,svndiff;q=0.8");
}
return SVN_NO_ERROR;
@@ -2309,11 +2741,10 @@ finish_report(void *report_baton,
svn_ra_serf__handler_t *handler;
svn_ra_serf__xml_parser_t *parser_ctx;
const char *report_target;
- svn_boolean_t closed_root;
- int status_code;
svn_stringbuf_t *buf = NULL;
apr_pool_t *iterpool = svn_pool_create(pool);
svn_error_t *err;
+ apr_interval_time_t waittime_left = sess->timeout;
svn_xml_make_close_tag(&buf, iterpool, "S:update-report");
SVN_ERR(svn_io_file_write_full(report->body_file, buf->data, buf->len,
@@ -2340,27 +2771,27 @@ finish_report(void *report_baton,
handler = apr_pcalloc(pool, sizeof(*handler));
+ handler->handler_pool = pool;
handler->method = "REPORT";
handler->path = report->path;
handler->body_delegate = create_update_report_body;
handler->body_delegate_baton = report;
handler->body_type = "text/xml";
+ handler->custom_accept_encoding = TRUE;
+ handler->header_delegate = setup_update_report_headers;
+ handler->header_delegate_baton = report;
handler->conn = sess->conns[0];
handler->session = sess;
- handler->header_delegate = headers_report;
- handler->header_delegate_baton = report;
parser_ctx = apr_pcalloc(pool, sizeof(*parser_ctx));
parser_ctx->pool = pool;
+ parser_ctx->response_type = "update-report";
parser_ctx->user_data = report;
parser_ctx->start = start_report;
parser_ctx->end = end_report;
parser_ctx->cdata = cdata_report;
parser_ctx->done = &report->done;
- /* While we provide a location here to store the status code, we don't
- do anything with it. The error in parser_ctx->error is sufficient. */
- parser_ctx->status_code = &status_code;
handler->response_handler = svn_ra_serf__handle_xml_parser;
handler->response_baton = parser_ctx;
@@ -2373,14 +2804,15 @@ finish_report(void *report_baton,
SVN_ERR(open_connection_if_needed(sess, 0));
sess->cur_conn = 1;
- closed_root = FALSE;
/* Note that we may have no active GET or PROPFIND requests, yet the
processing has not been completed. This could be from a delay on the
network or because we've spooled the entire response into our "pending"
content of the XML parser. The DONE flag will get set when all the
XML content has been received *and* parsed. */
- while (!report->done || report->active_fetches || report->active_propfinds)
+ while (!report->done
+ || report->num_active_fetches
+ || report->num_active_propfinds)
{
apr_pool_t *iterpool_inner;
svn_ra_serf__list_t *done_list;
@@ -2397,43 +2829,75 @@ finish_report(void *report_baton,
and what items are allocated within. */
iterpool_inner = svn_pool_create(iterpool);
- status = serf_context_run(sess->context, sess->timeout, iterpool_inner);
+ status = serf_context_run(sess->context,
+ SVN_RA_SERF__CONTEXT_RUN_DURATION,
+ iterpool_inner);
err = sess->pending_error;
sess->pending_error = SVN_NO_ERROR;
+ if (!err && handler->done && handler->server_error)
+ {
+ err = handler->server_error->error;
+ }
+
+ /* If the context duration timeout is up, we'll subtract that
+ duration from the total time alloted for such things. If
+ there's no time left, we fail with a message indicating that
+ the connection timed out. */
if (APR_STATUS_IS_TIMEUP(status))
{
svn_error_clear(err);
- return svn_error_create(SVN_ERR_RA_DAV_CONN_TIMEOUT,
- NULL,
- _("Connection timed out"));
+ err = SVN_NO_ERROR;
+ status = 0;
+
+ if (sess->timeout)
+ {
+ if (waittime_left > SVN_RA_SERF__CONTEXT_RUN_DURATION)
+ {
+ waittime_left -= SVN_RA_SERF__CONTEXT_RUN_DURATION;
+ }
+ else
+ {
+ return svn_error_create(SVN_ERR_RA_DAV_CONN_TIMEOUT, NULL,
+ _("Connection timed out"));
+ }
+ }
+ }
+ else
+ {
+ waittime_left = sess->timeout;
}
+ if (status && handler->sline.code != 200)
+ {
+ return svn_error_trace(
+ svn_error_compose_create(
+ svn_ra_serf__error_on_status(handler->sline,
+ handler->path,
+ handler->location),
+ err));
+ }
SVN_ERR(err);
if (status)
{
- return svn_error_wrap_apr(status, _("Error retrieving REPORT (%d)"),
- status);
+ return svn_ra_serf__wrap_err(status, _("Error retrieving REPORT"));
}
/* Open extra connections if we have enough requests to send. */
- if (sess->num_conns < MAX_NR_OF_CONNS)
- SVN_ERR(open_connection_if_needed(sess, report->active_fetches +
- report->active_propfinds));
+ if (sess->num_conns < sess->max_connections)
+ SVN_ERR(open_connection_if_needed(sess, report->num_active_fetches +
+ report->num_active_propfinds));
- /* Switch our connection. */
- if (!report->done)
- if (++sess->cur_conn == sess->num_conns)
- sess->cur_conn = 1;
-
- /* prune our propfind list if they are done. */
+ /* Prune completed file PROPFINDs. */
done_list = report->done_propfinds;
while (done_list)
{
+ svn_ra_serf__list_t *next_done = done_list->next;
+
svn_pool_clear(iterpool_inner);
- report->active_propfinds--;
+ report->num_active_propfinds--;
/* If we have some files that we won't be fetching the content
* for, ensure that we update the file with any altered props.
@@ -2449,7 +2913,7 @@ finish_report(void *report_baton,
{
report_info_t *item = cur->data;
- if (item->propfind == done_list->data)
+ if (item->propfind_handler == done_list->data)
{
break;
}
@@ -2463,7 +2927,7 @@ finish_report(void *report_baton,
*/
if (cur)
{
- SVN_ERR(handle_propchange_only(cur->data, iterpool_inner));
+ report_info_t *info = cur->data;
if (!prev)
{
@@ -2473,61 +2937,123 @@ finish_report(void *report_baton,
{
prev->next = cur->next;
}
+
+ /* If we've got cached file content for this file,
+ take care of the locally collected properties and
+ file content at once. Otherwise, just deal with
+ the collected properties.
+
+ NOTE: These functions below could delete
+ info->dir->pool (via maybe_close_dir_chain()),
+ from which is allocated the list item in
+ report->file_propchanges_only.
+ */
+ if (info->cached_contents)
+ {
+ SVN_ERR(handle_local_content(info, iterpool_inner));
+ }
+ else
+ {
+ SVN_ERR(handle_propchange_only(info, iterpool_inner));
+ }
}
}
- done_list = done_list->next;
+ done_list = next_done;
}
report->done_propfinds = NULL;
- /* prune our fetches list if they are done. */
+ /* Prune completed fetches from our list. */
done_list = report->done_fetches;
while (done_list)
{
report_fetch_t *done_fetch = done_list->data;
+ svn_ra_serf__list_t *next_done = done_list->next;
report_dir_t *cur_dir;
- /* decrease our parent's directory refcount. */
+ /* Decrease the refcount in the parent directory of the file
+ whose fetch has completed. */
cur_dir = done_fetch->info->dir;
cur_dir->ref_count--;
/* Decrement our active fetch count. */
- report->active_fetches--;
+ report->num_active_fetches--;
- done_list = done_list->next;
+ /* See if the parent directory of this fetched item (and
+ perhaps even parents of that) can be closed now.
- /* If we have a valid directory and
- * we have no open items in this dir and
- * we've closed the directory tag (no more children can be added)
- * and either:
- * we know we won't be fetching props or
- * we've already completed the propfind
- * then, we know it's time for us to close this directory.
- */
- while (cur_dir && !cur_dir->ref_count && cur_dir->tag_closed &&
- (!cur_dir->fetch_props ||
- svn_ra_serf__propfind_is_done(cur_dir->propfind)))
+ NOTE: This could delete cur_dir->pool, from which is
+ allocated the list item in report->done_fetches.
+ */
+ SVN_ERR(maybe_close_dir_chain(cur_dir));
+
+ done_list = next_done;
+ }
+ report->done_fetches = NULL;
+
+ /* Prune completed directory PROPFINDs. */
+ done_list = report->done_dir_propfinds;
+ while (done_list)
+ {
+ svn_ra_serf__list_t *next_done = done_list->next;
+
+ report->num_active_propfinds--;
+
+ if (report->active_dir_propfinds)
{
- report_dir_t *parent = cur_dir->parent_dir;
+ svn_ra_serf__list_t *cur, *prev;
- SVN_ERR(close_dir(cur_dir));
- if (parent)
+ prev = NULL;
+ cur = report->active_dir_propfinds;
+
+ while (cur)
{
- parent->ref_count--;
+ report_dir_t *item = cur->data;
+
+ if (item->propfind_handler == done_list->data)
+ {
+ break;
+ }
+
+ prev = cur;
+ cur = cur->next;
}
- else
+ SVN_ERR_ASSERT(cur); /* we expect to find a matching propfind! */
+
+ /* If we found a match, set the new props and remove this
+ * propchange from our list.
+ */
+ if (cur)
{
- closed_root = TRUE;
+ report_dir_t *cur_dir = cur->data;
+
+ if (!prev)
+ {
+ report->active_dir_propfinds = cur->next;
+ }
+ else
+ {
+ prev->next = cur->next;
+ }
+
+ /* See if this directory (and perhaps even parents of that)
+ can be closed now.
+
+ NOTE: This could delete cur_dir->pool, from which is
+ allocated the list item in report->active_dir_propfinds.
+ */
+ SVN_ERR(maybe_close_dir_chain(cur_dir));
}
- cur_dir = parent;
}
+
+ done_list = next_done;
}
- report->done_fetches = NULL;
+ report->done_dir_propfinds = NULL;
/* If the parser is paused, and the number of active requests has
dropped far enough, then resume parsing. */
if (parser_ctx->paused
- && (report->active_fetches + report->active_propfinds
+ && (report->num_active_fetches + report->num_active_propfinds
< REQUEST_COUNT_TO_RESUME))
parser_ctx->paused = FALSE;
@@ -2535,23 +3061,37 @@ finish_report(void *report_baton,
present (we can't know for sure because of the private structure),
then go process the pending content. */
if (!parser_ctx->paused && parser_ctx->pending != NULL)
- SVN_ERR(svn_ra_serf__process_pending(parser_ctx, iterpool_inner));
+ SVN_ERR(svn_ra_serf__process_pending(parser_ctx,
+ &report->report_received,
+ iterpool_inner));
/* Debugging purposes only! */
for (i = 0; i < sess->num_conns; i++)
{
- serf_debug__closed_conn(sess->conns[i]->bkt_alloc);
+ serf_debug__closed_conn(sess->conns[i]->bkt_alloc);
}
}
- /* Ensure that we opened and closed our root dir and that we closed
- * all of our children. */
- if (closed_root == FALSE && report->root_dir != NULL)
+ /* If we got a complete report, close the edit. Otherwise, abort it. */
+ if (report->report_completed)
{
- SVN_ERR(close_all_dirs(report->root_dir));
+ /* Ensure that we opened and closed our root dir and that we closed
+ * all of our children. */
+ if (!report->closed_root && report->root_dir != NULL)
+ {
+ SVN_ERR(close_all_dirs(report->root_dir));
+ }
+
+ err = report->update_editor->close_edit(report->update_baton, iterpool);
}
+ else
+ {
+ /* Tell the editor that something failed */
+ err = report->update_editor->abort_edit(report->update_baton, iterpool);
- err = report->update_editor->close_edit(report->update_baton, iterpool);
+ err = svn_error_create(SVN_ERR_RA_DAV_MALFORMED_DATA, err,
+ _("Missing update-report close tag"));
+ }
svn_pool_destroy(iterpool);
return svn_error_trace(err);
@@ -2596,10 +3136,9 @@ make_update_reporter(svn_ra_session_t *ra_session,
svn_boolean_t send_copyfrom_args,
const svn_delta_editor_t *update_editor,
void *update_baton,
- apr_pool_t *result_pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- /* ### would be nice to get a SCRATCH_POOL passed to us. */
- apr_pool_t *scratch_pool = svn_pool_create(result_pool);
report_context_t *report;
const svn_delta_editor_t *filter_editor;
void *filter_baton;
@@ -2607,6 +3146,7 @@ make_update_reporter(svn_ra_session_t *ra_session,
svn_boolean_t server_supports_depth;
svn_ra_serf__session_t *sess = ra_session->priv;
svn_stringbuf_t *buf = NULL;
+ svn_boolean_t use_bulk_updates;
SVN_ERR(svn_ra_serf__has_capability(ra_session, &server_supports_depth,
SVN_RA_CAPABILITY_DEPTH, scratch_pool));
@@ -2635,7 +3175,6 @@ make_update_reporter(svn_ra_session_t *ra_session,
report->ignore_ancestry = ignore_ancestry;
report->send_copyfrom_args = send_copyfrom_args;
report->text_deltas = text_deltas;
- report->lock_path_tokens = apr_hash_make(report->pool);
report->switched_paths = apr_hash_make(report->pool);
report->source = src_path;
@@ -2653,9 +3192,74 @@ make_update_reporter(svn_ra_session_t *ra_session,
svn_io_file_del_on_pool_cleanup,
report->pool, scratch_pool));
- svn_xml_make_open_tag(&buf, scratch_pool, svn_xml_normal, "S:update-report",
- "xmlns:S", SVN_XML_NAMESPACE,
- NULL);
+ if (sess->bulk_updates == svn_tristate_true)
+ {
+ /* User would like to use bulk updates. */
+ use_bulk_updates = TRUE;
+ }
+ else if (sess->bulk_updates == svn_tristate_false)
+ {
+ /* User doesn't want bulk updates. */
+ use_bulk_updates = FALSE;
+ }
+ else
+ {
+ /* User doesn't have any preferences on bulk updates. Decide on server
+ preferences and capabilities. */
+ if (sess->server_allows_bulk)
+ {
+ if (apr_strnatcasecmp(sess->server_allows_bulk, "off") == 0)
+ {
+ /* Server doesn't want bulk updates */
+ use_bulk_updates = FALSE;
+ }
+ else if (apr_strnatcasecmp(sess->server_allows_bulk, "prefer") == 0)
+ {
+ /* Server prefers bulk updates, and we respect that */
+ use_bulk_updates = TRUE;
+ }
+ else
+ {
+ /* Server allows bulk updates, but doesn't dictate its use. Do
+ whatever is the default. */
+ use_bulk_updates = FALSE;
+ }
+ }
+ else
+ {
+ /* Pre-1.8 server didn't send the bulk_updates header. Check if server
+ supports inlining properties in update editor report. */
+ if (sess->supports_inline_props)
+ {
+ /* Inline props supported: do not use bulk updates. */
+ use_bulk_updates = FALSE;
+ }
+ else
+ {
+ /* Inline props are not supported: use bulk updates to avoid
+ * PROPFINDs for every added node. */
+ use_bulk_updates = TRUE;
+ }
+ }
+ }
+
+ if (use_bulk_updates)
+ {
+ svn_xml_make_open_tag(&buf, scratch_pool, svn_xml_normal,
+ "S:update-report",
+ "xmlns:S", SVN_XML_NAMESPACE, "send-all", "true",
+ NULL);
+ }
+ else
+ {
+ svn_xml_make_open_tag(&buf, scratch_pool, svn_xml_normal,
+ "S:update-report",
+ "xmlns:S", SVN_XML_NAMESPACE,
+ NULL);
+ /* Subversion 1.8+ servers can be told to send properties for newly
+ added items inline even when doing a skelta response. */
+ make_simple_xml_tag(&buf, "S:include-props", "yes", scratch_pool);
+ }
make_simple_xml_tag(&buf, "S:src-path", report->source, scratch_pool);
@@ -2694,12 +3298,26 @@ make_update_reporter(svn_ra_session_t *ra_session,
make_simple_xml_tag(&buf, "S:recursive", "no", scratch_pool);
}
+ /* When in 'send-all' mode, mod_dav_svn will assume that it should
+ calculate and transmit real text-deltas (instead of empty windows
+ that merely indicate "text is changed") unless it finds this
+ element.
+
+ NOTE: Do NOT count on servers actually obeying this, as some exist
+ which obey send-all, but do not check for this directive at all!
+
+ NOTE 2: When not in 'send-all' mode, mod_dav_svn can still be configured to
+ override our request and send text-deltas. */
+ if (! text_deltas)
+ {
+ make_simple_xml_tag(&buf, "S:text-deltas", "no", scratch_pool);
+ }
+
make_simple_xml_tag(&buf, "S:depth", svn_depth_to_word(depth), scratch_pool);
SVN_ERR(svn_io_file_write_full(report->body_file, buf->data, buf->len,
NULL, scratch_pool));
- svn_pool_destroy(scratch_pool);
return SVN_NO_ERROR;
}
@@ -2711,17 +3329,22 @@ svn_ra_serf__do_update(svn_ra_session_t *ra_session,
const char *update_target,
svn_depth_t depth,
svn_boolean_t send_copyfrom_args,
+ svn_boolean_t ignore_ancestry,
const svn_delta_editor_t *update_editor,
void *update_baton,
- apr_pool_t *pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
svn_ra_serf__session_t *session = ra_session->priv;
- return make_update_reporter(ra_session, reporter, report_baton,
- revision_to_update_to,
- session->session_url.path, NULL, update_target,
- depth, FALSE, TRUE, send_copyfrom_args,
- update_editor, update_baton, pool);
+ SVN_ERR(make_update_reporter(ra_session, reporter, report_baton,
+ revision_to_update_to,
+ session->session_url.path, NULL, update_target,
+ depth, ignore_ancestry, TRUE /* text_deltas */,
+ send_copyfrom_args,
+ update_editor, update_baton,
+ result_pool, scratch_pool));
+ return SVN_NO_ERROR;
}
svn_error_t *
@@ -2739,12 +3362,16 @@ svn_ra_serf__do_diff(svn_ra_session_t *ra_session,
apr_pool_t *pool)
{
svn_ra_serf__session_t *session = ra_session->priv;
-
- return make_update_reporter(ra_session, reporter, report_baton,
- revision,
- session->session_url.path, versus_url, diff_target,
- depth, ignore_ancestry, text_deltas, FALSE,
- diff_editor, diff_baton, pool);
+ apr_pool_t *scratch_pool = svn_pool_create(pool);
+
+ SVN_ERR(make_update_reporter(ra_session, reporter, report_baton,
+ revision,
+ session->session_url.path, versus_url, diff_target,
+ depth, ignore_ancestry, text_deltas, FALSE,
+ diff_editor, diff_baton,
+ pool, scratch_pool));
+ svn_pool_destroy(scratch_pool);
+ return SVN_NO_ERROR;
}
svn_error_t *
@@ -2759,12 +3386,16 @@ svn_ra_serf__do_status(svn_ra_session_t *ra_session,
apr_pool_t *pool)
{
svn_ra_serf__session_t *session = ra_session->priv;
-
- return make_update_reporter(ra_session, reporter, report_baton,
- revision,
- session->session_url.path, NULL, status_target,
- depth, FALSE, FALSE, FALSE,
- status_editor, status_baton, pool);
+ apr_pool_t *scratch_pool = svn_pool_create(pool);
+
+ SVN_ERR(make_update_reporter(ra_session, reporter, report_baton,
+ revision,
+ session->session_url.path, NULL, status_target,
+ depth, FALSE, FALSE, FALSE,
+ status_editor, status_baton,
+ pool, scratch_pool));
+ svn_pool_destroy(scratch_pool);
+ return SVN_NO_ERROR;
}
svn_error_t *
@@ -2775,9 +3406,12 @@ svn_ra_serf__do_switch(svn_ra_session_t *ra_session,
const char *switch_target,
svn_depth_t depth,
const char *switch_url,
+ svn_boolean_t send_copyfrom_args,
+ svn_boolean_t ignore_ancestry,
const svn_delta_editor_t *switch_editor,
void *switch_baton,
- apr_pool_t *pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
svn_ra_serf__session_t *session = ra_session->priv;
@@ -2785,8 +3419,82 @@ svn_ra_serf__do_switch(svn_ra_session_t *ra_session,
revision_to_switch_to,
session->session_url.path,
switch_url, switch_target,
- depth, TRUE, TRUE, FALSE /* TODO(sussman) */,
- switch_editor, switch_baton, pool);
+ depth,
+ ignore_ancestry,
+ TRUE /* text_deltas */,
+ send_copyfrom_args,
+ switch_editor, switch_baton,
+ result_pool, scratch_pool);
+}
+
+/* Helper svn_ra_serf__get_file(). Attempts to fetch file contents
+ * using SESSION->wc_callbacks->get_wc_contents() if sha1 property is
+ * present in PROPS.
+ *
+ * Sets *FOUND_P to TRUE if file contents was successfuly fetched.
+ *
+ * Performs all temporary allocations in POOL.
+ */
+static svn_error_t *
+try_get_wc_contents(svn_boolean_t *found_p,
+ svn_ra_serf__session_t *session,
+ apr_hash_t *props,
+ svn_stream_t *dst_stream,
+ apr_pool_t *pool)
+{
+ apr_hash_t *svn_props;
+ const char *sha1_checksum_prop;
+ svn_checksum_t *checksum;
+ svn_stream_t *wc_stream;
+ svn_error_t *err;
+
+ /* No contents found by default. */
+ *found_p = FALSE;
+
+ if (!session->wc_callbacks->get_wc_contents)
+ {
+ /* No callback, nothing to do. */
+ return SVN_NO_ERROR;
+ }
+
+
+ svn_props = svn_hash_gets(props, SVN_DAV_PROP_NS_DAV);
+ if (!svn_props)
+ {
+ /* No properties -- therefore no checksum property -- in response. */
+ return SVN_NO_ERROR;
+ }
+
+ sha1_checksum_prop = svn_prop_get_value(svn_props, "sha1-checksum");
+ if (sha1_checksum_prop == NULL)
+ {
+ /* No checksum property in response. */
+ return SVN_NO_ERROR;
+ }
+
+ SVN_ERR(svn_checksum_parse_hex(&checksum, svn_checksum_sha1,
+ sha1_checksum_prop, pool));
+
+ err = session->wc_callbacks->get_wc_contents(
+ session->wc_callback_baton, &wc_stream, checksum, pool);
+
+ if (err)
+ {
+ svn_error_clear(err);
+
+ /* Ignore errors for now. */
+ return SVN_NO_ERROR;
+ }
+
+ if (wc_stream)
+ {
+ SVN_ERR(svn_stream_copy3(wc_stream,
+ svn_stream_disown(dst_stream, pool),
+ NULL, NULL, pool));
+ *found_p = TRUE;
+ }
+
+ return SVN_NO_ERROR;
}
svn_error_t *
@@ -2803,6 +3511,7 @@ svn_ra_serf__get_file(svn_ra_session_t *ra_session,
const char *fetch_url;
apr_hash_t *fetch_props;
svn_node_kind_t res_kind;
+ const svn_ra_serf__dav_props_t *which_props;
/* What connection should we go on? */
conn = session->conns[session->cur_conn];
@@ -2818,23 +3527,35 @@ svn_ra_serf__get_file(svn_ra_session_t *ra_session,
*/
if (SVN_IS_VALID_REVNUM(revision) || fetched_rev)
{
- const char *baseline_url, *rel_path;
-
- SVN_ERR(svn_ra_serf__get_baseline_info(&baseline_url, &rel_path,
- session, conn, fetch_url,
- revision, fetched_rev, pool));
- fetch_url = svn_path_url_add_component2(baseline_url, rel_path, pool);
+ SVN_ERR(svn_ra_serf__get_stable_url(&fetch_url, fetched_rev,
+ session, conn,
+ fetch_url, revision,
+ pool, pool));
revision = SVN_INVALID_REVNUM;
}
+ /* REVISION is always SVN_INVALID_REVNUM */
+ SVN_ERR_ASSERT(!SVN_IS_VALID_REVNUM(revision));
+
+ if (props)
+ {
+ which_props = all_props;
+ }
+ else if (stream && session->wc_callbacks->get_wc_contents)
+ {
+ which_props = type_and_checksum_props;
+ }
+ else
+ {
+ which_props = check_path_props;
+ }
- SVN_ERR(svn_ra_serf__retrieve_props(&fetch_props, session, conn, fetch_url,
- revision, "0",
- props ? all_props : check_path_props,
- pool, pool));
+ SVN_ERR(svn_ra_serf__fetch_node_props(&fetch_props, conn, fetch_url,
+ SVN_INVALID_REVNUM,
+ which_props,
+ pool, pool));
- /* Verify that resource type is not colelction. */
- SVN_ERR(svn_ra_serf__get_resource_type(&res_kind, fetch_props, fetch_url,
- revision));
+ /* Verify that resource type is not collection. */
+ SVN_ERR(svn_ra_serf__get_resource_type(&res_kind, fetch_props));
if (res_kind != svn_node_file)
{
return svn_error_create(SVN_ERR_FS_NOT_FILE, NULL,
@@ -2844,41 +3565,55 @@ svn_ra_serf__get_file(svn_ra_session_t *ra_session,
/* TODO Filter out all of our props into a usable format. */
if (props)
{
- SVN_ERR(svn_ra_serf__flatten_props(props, fetch_props, fetch_url,
- revision, pool, pool));
+ /* ### flatten_props() does not copy PROPVALUE, but fetch_node_props()
+ ### put them into POOL, so we're okay. */
+ SVN_ERR(svn_ra_serf__flatten_props(props, fetch_props,
+ pool, pool));
}
if (stream)
{
- report_fetch_t *stream_ctx;
- svn_ra_serf__handler_t *handler;
+ svn_boolean_t found;
+ SVN_ERR(try_get_wc_contents(&found, session, fetch_props, stream, pool));
+
+ /* No contents found in the WC, let's fetch from server. */
+ if (!found)
+ {
+ report_fetch_t *stream_ctx;
+ svn_ra_serf__handler_t *handler;
+
+ /* Create the fetch context. */
+ stream_ctx = apr_pcalloc(pool, sizeof(*stream_ctx));
+ stream_ctx->target_stream = stream;
+ stream_ctx->sess = session;
+ stream_ctx->conn = conn;
+ stream_ctx->info = apr_pcalloc(pool, sizeof(*stream_ctx->info));
+ stream_ctx->info->name = fetch_url;
- /* Create the fetch context. */
- stream_ctx = apr_pcalloc(pool, sizeof(*stream_ctx));
- stream_ctx->target_stream = stream;
- stream_ctx->sess = session;
- stream_ctx->conn = conn;
- stream_ctx->info = apr_pcalloc(pool, sizeof(*stream_ctx->info));
- stream_ctx->info->name = fetch_url;
+ handler = apr_pcalloc(pool, sizeof(*handler));
- handler = apr_pcalloc(pool, sizeof(*handler));
- handler->method = "GET";
- handler->path = fetch_url;
- handler->conn = conn;
- handler->session = session;
+ handler->handler_pool = pool;
+ handler->method = "GET";
+ handler->path = fetch_url;
+ handler->conn = conn;
+ handler->session = session;
- handler->header_delegate = headers_fetch;
- handler->header_delegate_baton = stream_ctx;
+ handler->custom_accept_encoding = TRUE;
+ handler->header_delegate = headers_fetch;
+ handler->header_delegate_baton = stream_ctx;
- handler->response_handler = handle_stream;
- handler->response_baton = stream_ctx;
+ handler->response_handler = handle_stream;
+ handler->response_baton = stream_ctx;
- handler->response_error = cancel_fetch;
- handler->response_error_baton = stream_ctx;
+ handler->response_error = cancel_fetch;
+ handler->response_error_baton = stream_ctx;
- svn_ra_serf__request_create(handler);
+ stream_ctx->handler = handler;
- SVN_ERR(svn_ra_serf__context_run_wait(&stream_ctx->done, session, pool));
+ svn_ra_serf__request_create(handler);
+
+ SVN_ERR(svn_ra_serf__context_run_wait(&stream_ctx->done, session, pool));
+ }
}
return SVN_NO_ERROR;
diff --git a/subversion/libsvn_ra_serf/util.c b/subversion/libsvn_ra_serf/util.c
index 180ff7a..8f6c1bb 100644
--- a/subversion/libsvn_ra_serf/util.c
+++ b/subversion/libsvn_ra_serf/util.c
@@ -28,18 +28,27 @@
#define APR_WANT_STRFUNC
#include <apr.h>
#include <apr_want.h>
-#include <apr_fnmatch.h>
#include <serf.h>
#include <serf_bucket_types.h>
+#include <expat.h>
+
+#include "svn_hash.h"
#include "svn_dirent_uri.h"
#include "svn_path.h"
#include "svn_private_config.h"
#include "svn_string.h"
#include "svn_xml.h"
+#include "svn_props.h"
+#include "svn_dirent_uri.h"
+
+#include "../libsvn_ra/ra_loader.h"
#include "private/svn_dep_compat.h"
#include "private/svn_fspath.h"
+#include "private/svn_subr_private.h"
+#include "private/svn_auth_private.h"
+#include "private/svn_cert.h"
#include "ra_serf.h"
@@ -52,61 +61,54 @@
#define XML_STATUS_ERROR 0
#endif
+#ifndef XML_VERSION_AT_LEAST
+#define XML_VERSION_AT_LEAST(major,minor,patch) \
+(((major) < XML_MAJOR_VERSION) \
+ || ((major) == XML_MAJOR_VERSION && (minor) < XML_MINOR_VERSION) \
+ || ((major) == XML_MAJOR_VERSION && (minor) == XML_MINOR_VERSION && \
+ (patch) <= XML_MICRO_VERSION))
+#endif /* APR_VERSION_AT_LEAST */
-#define PARSE_CHUNK_SIZE 8000
+#if XML_VERSION_AT_LEAST(1, 95, 8)
+#define EXPAT_HAS_STOPPARSER
+#endif
-/* As chunks of content arrive from the server, and we need to hold them
- in memory (because the XML parser is paused), they are copied into
- these buffers. The buffers are arranged into a linked list. */
-struct pending_buffer_t {
- apr_size_t size;
- char data[PARSE_CHUNK_SIZE];
+/* Read/write chunks of this size into the spillbuf. */
+#define PARSE_CHUNK_SIZE 8000
- struct pending_buffer_t *next;
-};
+/* We will store one megabyte in memory, before switching to store content
+ into a temporary file. */
+#define SPILL_SIZE 1000000
/* This structure records pending data for the parser in memory blocks,
and possibly into a temporary file if "too much" content arrives. */
struct svn_ra_serf__pending_t {
- /* The amount of content in memory. */
- apr_size_t memory_size;
-
- /* HEAD points to the first block of the linked list of buffers.
- TAIL points to the last block, for quickly appending more blocks
- to the overall list. */
- struct pending_buffer_t *head;
- struct pending_buffer_t *tail;
-
- /* Available blocks for storing pending data. These were allocated
- previously, then the data consumed and returned to this list. */
- struct pending_buffer_t *avail;
-
- /* Once MEMORY_SIZE exceeds SPILL_SIZE, then arriving content will be
- appended to the (temporary) file indicated by SPILL. */
- apr_file_t *spill;
-
- /* As we consume content from SPILL, this value indicates where we
- will begin reading. */
- apr_off_t spill_start;
+ /* The spillbuf where we record the pending data. */
+ svn_spillbuf_t *buf;
/* This flag is set when the network has reached EOF. The PENDING
processing can then properly detect when parsing has completed. */
svn_boolean_t network_eof;
};
-#define HAS_PENDING_DATA(p) ((p) != NULL \
- && ((p)->head != NULL || (p)->spill != NULL))
+#define HAS_PENDING_DATA(p) ((p) != NULL && (p)->buf != NULL \
+ && svn_spillbuf__get_size((p)->buf) != 0)
-/* We will store one megabyte in memory, before switching to store content
- into a temporary file. */
-#define SPILL_SIZE 1000000
-/* See notes/ra-serf-testing.txt for some information on testing this
- new "paused" feature. */
+struct expat_ctx_t {
+ svn_ra_serf__xml_context_t *xmlctx;
+ XML_Parser parser;
+ svn_ra_serf__handler_t *handler;
+
+ svn_error_t *inner_error;
+
+ /* Do not use this pool for allocation. It is merely recorded for running
+ the cleanup handler. */
+ apr_pool_t *cleanup_pool;
+};
-
static const apr_uint32_t serf_failure_map[][2] =
{
{ SERF_SSL_CERT_NOTYETVALID, SVN_AUTH_SSL_NOTYETVALID },
@@ -142,6 +144,23 @@ ssl_convert_serf_failures(int failures)
return svn_failures;
}
+
+static apr_status_t
+save_error(svn_ra_serf__session_t *session,
+ svn_error_t *err)
+{
+ if (err || session->pending_error)
+ {
+ session->pending_error = svn_error_compose_create(
+ session->pending_error,
+ err);
+ return session->pending_error->apr_err;
+ }
+
+ return APR_SUCCESS;
+}
+
+
/* Construct the realmstring, e.g. https://svn.collab.net:443. */
static const char *
construct_realm(svn_ra_serf__session_t *session,
@@ -173,13 +192,65 @@ construct_realm(svn_ra_serf__session_t *session,
static char *
convert_organisation_to_str(apr_hash_t *org, apr_pool_t *pool)
{
- return apr_psprintf(pool, "%s, %s, %s, %s, %s (%s)",
- (char*)apr_hash_get(org, "OU", APR_HASH_KEY_STRING),
- (char*)apr_hash_get(org, "O", APR_HASH_KEY_STRING),
- (char*)apr_hash_get(org, "L", APR_HASH_KEY_STRING),
- (char*)apr_hash_get(org, "ST", APR_HASH_KEY_STRING),
- (char*)apr_hash_get(org, "C", APR_HASH_KEY_STRING),
- (char*)apr_hash_get(org, "E", APR_HASH_KEY_STRING));
+ const char *org_unit = svn_hash_gets(org, "OU");
+ const char *org_name = svn_hash_gets(org, "O");
+ const char *locality = svn_hash_gets(org, "L");
+ const char *state = svn_hash_gets(org, "ST");
+ const char *country = svn_hash_gets(org, "C");
+ const char *email = svn_hash_gets(org, "E");
+ svn_stringbuf_t *buf = svn_stringbuf_create_empty(pool);
+
+ if (org_unit)
+ {
+ svn_stringbuf_appendcstr(buf, org_unit);
+ svn_stringbuf_appendcstr(buf, ", ");
+ }
+
+ if (org_name)
+ {
+ svn_stringbuf_appendcstr(buf, org_name);
+ svn_stringbuf_appendcstr(buf, ", ");
+ }
+
+ if (locality)
+ {
+ svn_stringbuf_appendcstr(buf, locality);
+ svn_stringbuf_appendcstr(buf, ", ");
+ }
+
+ if (state)
+ {
+ svn_stringbuf_appendcstr(buf, state);
+ svn_stringbuf_appendcstr(buf, ", ");
+ }
+
+ if (country)
+ {
+ svn_stringbuf_appendcstr(buf, country);
+ svn_stringbuf_appendcstr(buf, ", ");
+ }
+
+ /* Chop ', ' if any. */
+ svn_stringbuf_chop(buf, 2);
+
+ if (email)
+ {
+ svn_stringbuf_appendcstr(buf, "(");
+ svn_stringbuf_appendcstr(buf, email);
+ svn_stringbuf_appendcstr(buf, ")");
+ }
+
+ return buf->data;
+}
+
+static void append_reason(svn_stringbuf_t *errmsg, const char *reason, int *reasons)
+{
+ if (*reasons < 1)
+ svn_stringbuf_appendcstr(errmsg, _(": "));
+ else
+ svn_stringbuf_appendcstr(errmsg, _(", "));
+ svn_stringbuf_appendcstr(errmsg, reason);
+ (*reasons)++;
}
/* This function is called on receiving a ssl certificate of a server when
@@ -199,65 +270,149 @@ ssl_server_cert(void *baton, int failures,
svn_auth_iterstate_t *state;
const char *realmstring;
apr_uint32_t svn_failures;
- apr_hash_t *issuer, *subject, *serf_cert;
- apr_array_header_t *san;
+ apr_hash_t *issuer;
+ apr_hash_t *subject = NULL;
+ apr_hash_t *serf_cert = NULL;
void *creds;
- int found_matching_hostname = 0;
- /* Implicitly approve any non-server certs. */
- if (serf_ssl_cert_depth(cert) > 0)
+ svn_failures = (ssl_convert_serf_failures(failures)
+ | conn->server_cert_failures);
+
+ if (serf_ssl_cert_depth(cert) == 0)
{
- if (failures)
- conn->server_cert_failures |= ssl_convert_serf_failures(failures);
- return APR_SUCCESS;
+ /* If the depth is 0, the hostname must match the certificate.
+
+ ### This should really be handled by serf, which should pass an error
+ for this case, but that has backwards compatibility issues. */
+ apr_array_header_t *san;
+ svn_boolean_t found_san_entry = FALSE;
+ svn_boolean_t found_matching_hostname = FALSE;
+ svn_string_t *actual_hostname =
+ svn_string_create(conn->session->session_url.hostname, scratch_pool);
+
+ serf_cert = serf_ssl_cert_certificate(cert, scratch_pool);
+
+ san = svn_hash_gets(serf_cert, "subjectAltName");
+ /* Try to find matching server name via subjectAltName first... */
+ if (san)
+ {
+ int i;
+ found_san_entry = san->nelts > 0;
+ for (i = 0; i < san->nelts; i++)
+ {
+ const char *s = APR_ARRAY_IDX(san, i, const char*);
+ svn_string_t *cert_hostname = svn_string_create(s, scratch_pool);
+
+ if (svn_cert__match_dns_identity(cert_hostname, actual_hostname))
+ {
+ found_matching_hostname = TRUE;
+ break;
+ }
+ }
+ }
+
+ /* Match server certificate CN with the hostname of the server iff
+ * we didn't find any subjectAltName fields and try to match them.
+ * Per RFC 2818 they are authoritative if present and CommonName
+ * should be ignored. */
+ if (!found_matching_hostname && !found_san_entry)
+ {
+ const char *hostname = NULL;
+
+ subject = serf_ssl_cert_subject(cert, scratch_pool);
+
+ if (subject)
+ hostname = svn_hash_gets(subject, "CN");
+
+ if (hostname)
+ {
+ svn_string_t *cert_hostname = svn_string_create(hostname,
+ scratch_pool);
+
+ if (svn_cert__match_dns_identity(cert_hostname, actual_hostname))
+ {
+ found_matching_hostname = TRUE;
+ }
+ }
+ }
+
+ if (!found_matching_hostname)
+ svn_failures |= SVN_AUTH_SSL_CNMISMATCH;
}
+ if (!svn_failures)
+ return SVN_NO_ERROR;
+
/* Extract the info from the certificate */
- subject = serf_ssl_cert_subject(cert, scratch_pool);
+ if (! subject)
+ subject = serf_ssl_cert_subject(cert, scratch_pool);
issuer = serf_ssl_cert_issuer(cert, scratch_pool);
- serf_cert = serf_ssl_cert_certificate(cert, scratch_pool);
+ if (! serf_cert)
+ serf_cert = serf_ssl_cert_certificate(cert, scratch_pool);
- cert_info.hostname = apr_hash_get(subject, "CN", APR_HASH_KEY_STRING);
- san = apr_hash_get(serf_cert, "subjectAltName", APR_HASH_KEY_STRING);
- cert_info.fingerprint = apr_hash_get(serf_cert, "sha1", APR_HASH_KEY_STRING);
+ cert_info.hostname = svn_hash_gets(subject, "CN");
+ cert_info.fingerprint = svn_hash_gets(serf_cert, "sha1");
if (! cert_info.fingerprint)
cert_info.fingerprint = apr_pstrdup(scratch_pool, "<unknown>");
- cert_info.valid_from = apr_hash_get(serf_cert, "notBefore",
- APR_HASH_KEY_STRING);
+ cert_info.valid_from = svn_hash_gets(serf_cert, "notBefore");
if (! cert_info.valid_from)
cert_info.valid_from = apr_pstrdup(scratch_pool, "[invalid date]");
- cert_info.valid_until = apr_hash_get(serf_cert, "notAfter",
- APR_HASH_KEY_STRING);
+ cert_info.valid_until = svn_hash_gets(serf_cert, "notAfter");
if (! cert_info.valid_until)
cert_info.valid_until = apr_pstrdup(scratch_pool, "[invalid date]");
cert_info.issuer_dname = convert_organisation_to_str(issuer, scratch_pool);
cert_info.ascii_cert = serf_ssl_cert_export(cert, scratch_pool);
- svn_failures = (ssl_convert_serf_failures(failures)
- | conn->server_cert_failures);
+ /* Handle any non-server certs. */
+ if (serf_ssl_cert_depth(cert) > 0)
+ {
+ svn_error_t *err;
- /* Try to find matching server name via subjectAltName first... */
- if (san) {
- int i;
- for (i = 0; i < san->nelts; i++) {
- char *s = APR_ARRAY_IDX(san, i, char*);
- if (apr_fnmatch(s, conn->hostname,
- APR_FNM_PERIOD) == APR_SUCCESS) {
- found_matching_hostname = 1;
- cert_info.hostname = s;
- break;
- }
- }
- }
+ svn_auth_set_parameter(conn->session->wc_callbacks->auth_baton,
+ SVN_AUTH_PARAM_SSL_SERVER_CERT_INFO,
+ &cert_info);
- /* Match server certificate CN with the hostname of the server */
- if (!found_matching_hostname && cert_info.hostname)
- {
- if (apr_fnmatch(cert_info.hostname, conn->hostname,
- APR_FNM_PERIOD) == APR_FNM_NOMATCH)
+ svn_auth_set_parameter(conn->session->wc_callbacks->auth_baton,
+ SVN_AUTH_PARAM_SSL_SERVER_FAILURES,
+ &svn_failures);
+
+ realmstring = apr_psprintf(scratch_pool, "AUTHORITY:%s",
+ cert_info.fingerprint);
+
+ err = svn_auth_first_credentials(&creds, &state,
+ SVN_AUTH_CRED_SSL_SERVER_AUTHORITY,
+ realmstring,
+ conn->session->wc_callbacks->auth_baton,
+ scratch_pool);
+
+ svn_auth_set_parameter(conn->session->wc_callbacks->auth_baton,
+ SVN_AUTH_PARAM_SSL_SERVER_CERT_INFO, NULL);
+
+ svn_auth_set_parameter(conn->session->wc_callbacks->auth_baton,
+ SVN_AUTH_PARAM_SSL_SERVER_FAILURES, NULL);
+
+ if (err)
{
- svn_failures |= SVN_AUTH_SSL_CNMISMATCH;
+ if (err->apr_err != SVN_ERR_AUTHN_NO_PROVIDER)
+ return svn_error_trace(err);
+
+ /* No provider registered that handles server authorities */
+ svn_error_clear(err);
+ creds = NULL;
+ }
+
+ if (creds)
+ {
+ server_creds = creds;
+ SVN_ERR(svn_auth_save_credentials(state, scratch_pool));
+
+ svn_failures &= ~server_creds->accepted_failures;
}
+
+ if (svn_failures)
+ conn->server_cert_failures |= svn_failures;
+
+ return APR_SUCCESS;
}
svn_auth_set_parameter(conn->session->wc_callbacks->auth_baton,
@@ -278,14 +433,56 @@ ssl_server_cert(void *baton, int failures,
if (creds)
{
server_creds = creds;
+ svn_failures &= ~server_creds->accepted_failures;
SVN_ERR(svn_auth_save_credentials(state, scratch_pool));
}
+ while (svn_failures && creds)
+ {
+ SVN_ERR(svn_auth_next_credentials(&creds, state, scratch_pool));
+
+ if (creds)
+ {
+ server_creds = creds;
+ svn_failures &= ~server_creds->accepted_failures;
+ SVN_ERR(svn_auth_save_credentials(state, scratch_pool));
+ }
+ }
+
svn_auth_set_parameter(conn->session->wc_callbacks->auth_baton,
SVN_AUTH_PARAM_SSL_SERVER_CERT_INFO, NULL);
- if (!server_creds)
- return svn_error_create(SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED, NULL, NULL);
+ /* Are there non accepted failures left? */
+ if (svn_failures)
+ {
+ svn_stringbuf_t *errmsg;
+ int reasons = 0;
+
+ errmsg = svn_stringbuf_create(
+ _("Server SSL certificate verification failed"),
+ scratch_pool);
+
+
+ if (svn_failures & SVN_AUTH_SSL_NOTYETVALID)
+ append_reason(errmsg, _("certificate is not yet valid"), &reasons);
+
+ if (svn_failures & SVN_AUTH_SSL_EXPIRED)
+ append_reason(errmsg, _("certificate has expired"), &reasons);
+
+ if (svn_failures & SVN_AUTH_SSL_CNMISMATCH)
+ append_reason(errmsg,
+ _("certificate issued for a different hostname"),
+ &reasons);
+
+ if (svn_failures & SVN_AUTH_SSL_UNKNOWNCA)
+ append_reason(errmsg, _("issuer is not trusted"), &reasons);
+
+ if (svn_failures & SVN_AUTH_SSL_OTHER)
+ append_reason(errmsg, _("and other reason(s)"), &reasons);
+
+ return svn_error_create(SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED, NULL,
+ errmsg->data);
+ }
return SVN_NO_ERROR;
}
@@ -301,45 +498,36 @@ ssl_server_cert_cb(void *baton, int failures,
svn_error_t *err;
subpool = svn_pool_create(session->pool);
- err = ssl_server_cert(baton, failures, cert, subpool);
-
+ err = svn_error_trace(ssl_server_cert(baton, failures, cert, subpool));
svn_pool_destroy(subpool);
- if (err || session->pending_error)
- {
- session->pending_error = svn_error_compose_create(
- session->pending_error,
- err);
-
- return session->pending_error->apr_err;
- }
-
- return APR_SUCCESS;
-
+ return save_error(session, err);
}
static svn_error_t *
load_authorities(svn_ra_serf__connection_t *conn, const char *authorities,
apr_pool_t *pool)
{
- char *files, *file, *last;
- files = apr_pstrdup(pool, authorities);
+ apr_array_header_t *files = svn_cstring_split(authorities, ";",
+ TRUE /* chop_whitespace */,
+ pool);
+ int i;
- while ((file = apr_strtok(files, ";", &last)) != NULL)
+ for (i = 0; i < files->nelts; ++i)
{
+ const char *file = APR_ARRAY_IDX(files, i, const char *);
serf_ssl_certificate_t *ca_cert;
apr_status_t status = serf_ssl_load_cert_file(&ca_cert, file, pool);
+
if (status == APR_SUCCESS)
status = serf_ssl_trust_cert(conn->ssl_context, ca_cert);
if (status != APR_SUCCESS)
{
- return svn_error_createf
- (SVN_ERR_BAD_CONFIG_VALUE, NULL,
+ return svn_error_createf(SVN_ERR_BAD_CONFIG_VALUE, NULL,
_("Invalid config: unable to load certificate file '%s'"),
svn_dirent_local_style(file, pool));
}
- files = NULL;
}
return SVN_NO_ERROR;
@@ -357,7 +545,7 @@ conn_setup(apr_socket_t *sock,
*read_bkt = serf_context_bucket_socket_create(conn->session->context,
sock, conn->bkt_alloc);
- if (conn->using_ssl)
+ if (conn->session->using_ssl)
{
/* input stream */
*read_bkt = serf_bucket_ssl_decrypt_create(*read_bkt, conn->ssl_context,
@@ -366,9 +554,8 @@ conn_setup(apr_socket_t *sock,
{
conn->ssl_context = serf_bucket_ssl_encrypt_context_get(*read_bkt);
-#if SERF_VERSION_AT_LEAST(1,0,0)
- serf_ssl_set_hostname(conn->ssl_context, conn->hostname);
-#endif
+ serf_ssl_set_hostname(conn->ssl_context,
+ conn->session->session_url.hostname);
serf_ssl_client_cert_provider_set(conn->ssl_context,
svn_ra_serf__handle_client_cert,
@@ -417,31 +604,23 @@ svn_ra_serf__conn_setup(apr_socket_t *sock,
{
svn_ra_serf__connection_t *conn = baton;
svn_ra_serf__session_t *session = conn->session;
- apr_status_t status = SVN_NO_ERROR;
-
- svn_error_t *err = conn_setup(sock,
- read_bkt,
- write_bkt,
- baton,
- pool);
-
- if (err || session->pending_error)
- {
- session->pending_error = svn_error_compose_create(
- session->pending_error,
- err);
-
- status = session->pending_error->apr_err;
- }
+ svn_error_t *err;
- return status;
+ err = svn_error_trace(conn_setup(sock,
+ read_bkt,
+ write_bkt,
+ baton,
+ pool));
+ return save_error(session, err);
}
-serf_bucket_t*
-svn_ra_serf__accept_response(serf_request_t *request,
- serf_bucket_t *stream,
- void *acceptor_baton,
- apr_pool_t *pool)
+
+/* Our default serf response acceptor. */
+static serf_bucket_t *
+accept_response(serf_request_t *request,
+ serf_bucket_t *stream,
+ void *acceptor_baton,
+ apr_pool_t *pool)
{
serf_bucket_t *c;
serf_bucket_alloc_t *bkt_alloc;
@@ -452,7 +631,9 @@ svn_ra_serf__accept_response(serf_request_t *request,
return serf_bucket_response_create(c, bkt_alloc);
}
-static serf_bucket_t*
+
+/* Custom response acceptor for HEAD requests. */
+static serf_bucket_t *
accept_head(serf_request_t *request,
serf_bucket_t *stream,
void *acceptor_baton,
@@ -460,8 +641,7 @@ accept_head(serf_request_t *request,
{
serf_bucket_t *response;
- response = svn_ra_serf__accept_response(request, stream, acceptor_baton,
- pool);
+ response = accept_response(request, stream, acceptor_baton, pool);
/* We know we shouldn't get a response body. */
serf_bucket_response_set_head(response);
@@ -470,18 +650,17 @@ accept_head(serf_request_t *request,
}
static svn_error_t *
-connection_closed(serf_connection_t *conn,
- svn_ra_serf__connection_t *sc,
+connection_closed(svn_ra_serf__connection_t *conn,
apr_status_t why,
apr_pool_t *pool)
{
if (why)
{
- SVN_ERR_MALFUNCTION();
+ return svn_error_wrap_apr(why, NULL);
}
- if (sc->using_ssl)
- sc->ssl_context = NULL;
+ if (conn->session->using_ssl)
+ conn->ssl_context = NULL;
return SVN_NO_ERROR;
}
@@ -492,15 +671,12 @@ svn_ra_serf__conn_closed(serf_connection_t *conn,
apr_status_t why,
apr_pool_t *pool)
{
- svn_ra_serf__connection_t *sc = closed_baton;
+ svn_ra_serf__connection_t *ra_conn = closed_baton;
svn_error_t *err;
- err = connection_closed(conn, sc, why, pool);
+ err = svn_error_trace(connection_closed(ra_conn, why, pool));
- if (err)
- sc->session->pending_error = svn_error_compose_create(
- sc->session->pending_error,
- err);
+ (void) save_error(ra_conn->session, err);
}
@@ -551,20 +727,11 @@ apr_status_t svn_ra_serf__handle_client_cert(void *data,
{
svn_ra_serf__connection_t *conn = data;
svn_ra_serf__session_t *session = conn->session;
- svn_error_t *err = handle_client_cert(data,
- cert_path,
- session->pool);
+ svn_error_t *err;
- if (err || session->pending_error)
- {
- session->pending_error = svn_error_compose_create(
- session->pending_error,
- err);
+ err = svn_error_trace(handle_client_cert(data, cert_path, session->pool));
- return session->pending_error->apr_err;
- }
-
- return APR_SUCCESS;
+ return save_error(session, err);
}
/* Implementation for svn_ra_serf__handle_client_cert_pw */
@@ -613,60 +780,115 @@ apr_status_t svn_ra_serf__handle_client_cert_pw(void *data,
{
svn_ra_serf__connection_t *conn = data;
svn_ra_serf__session_t *session = conn->session;
- svn_error_t *err = handle_client_cert_pw(data,
- cert_path,
- password,
- session->pool);
+ svn_error_t *err;
- if (err || session->pending_error)
- {
- session->pending_error = svn_error_compose_create(
- session->pending_error,
- err);
+ err = svn_error_trace(handle_client_cert_pw(data,
+ cert_path,
+ password,
+ session->pool));
- return session->pending_error->apr_err;
- }
-
- return APR_SUCCESS;
+ return save_error(session, err);
}
-svn_error_t *
-svn_ra_serf__setup_serf_req(serf_request_t *request,
- serf_bucket_t **req_bkt,
- serf_bucket_t **ret_hdrs_bkt,
- svn_ra_serf__connection_t *conn,
- const char *method, const char *url,
- serf_bucket_t *body_bkt, const char *content_type)
+/*
+ * Given a REQUEST on connection CONN, construct a request bucket for it,
+ * returning the bucket in *REQ_BKT.
+ *
+ * If HDRS_BKT is not-NULL, it will be set to a headers_bucket that
+ * corresponds to the new request.
+ *
+ * The request will be METHOD at URL.
+ *
+ * If BODY_BKT is not-NULL, it will be sent as the request body.
+ *
+ * If CONTENT_TYPE is not-NULL, it will be sent as the Content-Type header.
+ *
+ * REQUEST_POOL should live for the duration of the request. Serf will
+ * construct this and provide it to the request_setup callback, so we
+ * should just use that one.
+ */
+static svn_error_t *
+setup_serf_req(serf_request_t *request,
+ serf_bucket_t **req_bkt,
+ serf_bucket_t **hdrs_bkt,
+ svn_ra_serf__session_t *session,
+ const char *method, const char *url,
+ serf_bucket_t *body_bkt, const char *content_type,
+ const char *accept_encoding,
+ apr_pool_t *request_pool,
+ apr_pool_t *scratch_pool)
{
- serf_bucket_t *hdrs_bkt;
+ serf_bucket_alloc_t *allocator = serf_request_get_alloc(request);
+
+ svn_spillbuf_t *buf;
+ svn_boolean_t set_CL = session->http10 || !session->using_chunked_requests;
+
+ if (set_CL && body_bkt != NULL)
+ {
+ /* Ugh. Use HTTP/1.0 to talk to the server because we don't know if
+ it speaks HTTP/1.1 (and thus, chunked requests), or because the
+ server actually responded as only supporting HTTP/1.0.
+
+ We'll take the existing body_bkt, spool it into a spillbuf, and
+ then wrap a bucket around that spillbuf. The spillbuf will give
+ us the Content-Length value. */
+ SVN_ERR(svn_ra_serf__copy_into_spillbuf(&buf, body_bkt,
+ request_pool,
+ scratch_pool));
+ /* Destroy original bucket since it content is already copied
+ to spillbuf. */
+ serf_bucket_destroy(body_bkt);
+
+ body_bkt = svn_ra_serf__create_sb_bucket(buf, allocator,
+ request_pool,
+ scratch_pool);
+ }
/* Create a request bucket. Note that this sucker is kind enough to
add a "Host" header for us. */
- *req_bkt =
- serf_request_bucket_request_create(request, method, url, body_bkt,
- serf_request_get_alloc(request));
+ *req_bkt = serf_request_bucket_request_create(request, method, url,
+ body_bkt, allocator);
+
+ /* Set the Content-Length value. This will also trigger an HTTP/1.0
+ request (rather than the default chunked request). */
+ if (set_CL)
+ {
+ if (body_bkt == NULL)
+ serf_bucket_request_set_CL(*req_bkt, 0);
+ else
+ serf_bucket_request_set_CL(*req_bkt, svn_spillbuf__get_size(buf));
+ }
- hdrs_bkt = serf_bucket_request_get_headers(*req_bkt);
- serf_bucket_headers_setn(hdrs_bkt, "User-Agent", conn->useragent);
+ *hdrs_bkt = serf_bucket_request_get_headers(*req_bkt);
+
+ /* We use serf_bucket_headers_setn() because the USERAGENT has a
+ lifetime longer than this bucket. Thus, there is no need to copy
+ the header values. */
+ serf_bucket_headers_setn(*hdrs_bkt, "User-Agent", session->useragent);
if (content_type)
{
- serf_bucket_headers_setn(hdrs_bkt, "Content-Type", content_type);
+ serf_bucket_headers_setn(*hdrs_bkt, "Content-Type", content_type);
}
- /* These headers need to be sent with every request; see issue #3255
- ("mod_dav_svn does not pass client capabilities to start-commit
- hooks") for why. */
- serf_bucket_headers_set(hdrs_bkt, "DAV", SVN_DAV_NS_DAV_SVN_DEPTH);
- serf_bucket_headers_set(hdrs_bkt, "DAV", SVN_DAV_NS_DAV_SVN_MERGEINFO);
- serf_bucket_headers_set(hdrs_bkt, "DAV", SVN_DAV_NS_DAV_SVN_LOG_REVPROPS);
+ if (session->http10)
+ {
+ serf_bucket_headers_setn(*hdrs_bkt, "Connection", "keep-alive");
+ }
- if (ret_hdrs_bkt)
+ if (accept_encoding)
{
- *ret_hdrs_bkt = hdrs_bkt;
+ serf_bucket_headers_setn(*hdrs_bkt, "Accept-Encoding", accept_encoding);
}
+ /* These headers need to be sent with every request; see issue #3255
+ ("mod_dav_svn does not pass client capabilities to start-commit
+ hooks") for why. */
+ serf_bucket_headers_setn(*hdrs_bkt, "DAV", SVN_DAV_NS_DAV_SVN_DEPTH);
+ serf_bucket_headers_setn(*hdrs_bkt, "DAV", SVN_DAV_NS_DAV_SVN_MERGEINFO);
+ serf_bucket_headers_setn(*hdrs_bkt, "DAV", SVN_DAV_NS_DAV_SVN_LOG_REVPROPS);
+
return SVN_NO_ERROR;
}
@@ -676,6 +898,7 @@ svn_ra_serf__context_run_wait(svn_boolean_t *done,
apr_pool_t *scratch_pool)
{
apr_pool_t *iterpool;
+ apr_interval_time_t waittime_left = sess->timeout;
assert(sess->pending_error == SVN_NO_ERROR);
@@ -691,17 +914,40 @@ svn_ra_serf__context_run_wait(svn_boolean_t *done,
if (sess->cancel_func)
SVN_ERR((*sess->cancel_func)(sess->cancel_baton));
- status = serf_context_run(sess->context, sess->timeout, iterpool);
+ status = serf_context_run(sess->context,
+ SVN_RA_SERF__CONTEXT_RUN_DURATION,
+ iterpool);
err = sess->pending_error;
sess->pending_error = SVN_NO_ERROR;
+ /* If the context duration timeout is up, we'll subtract that
+ duration from the total time alloted for such things. If
+ there's no time left, we fail with a message indicating that
+ the connection timed out. */
if (APR_STATUS_IS_TIMEUP(status))
{
- svn_error_clear(err);
- return svn_error_create(SVN_ERR_RA_DAV_CONN_TIMEOUT,
- NULL,
- _("Connection timed out"));
+ status = 0;
+
+ if (sess->timeout)
+ {
+ if (waittime_left > SVN_RA_SERF__CONTEXT_RUN_DURATION)
+ {
+ waittime_left -= SVN_RA_SERF__CONTEXT_RUN_DURATION;
+ }
+ else
+ {
+ return
+ svn_error_compose_create(
+ err,
+ svn_error_create(SVN_ERR_RA_DAV_CONN_TIMEOUT, NULL,
+ _("Connection timed out")));
+ }
+ }
+ }
+ else
+ {
+ waittime_left = sess->timeout;
}
SVN_ERR(err);
@@ -714,7 +960,7 @@ svn_ra_serf__context_run_wait(svn_boolean_t *done,
_("Error running context"));
}
- return svn_error_wrap_apr(status, _("Error running context"));
+ return svn_ra_serf__wrap_err(status, _("Error running context"));
}
/* Debugging purposes only! */
@@ -729,16 +975,55 @@ svn_ra_serf__context_run_wait(svn_boolean_t *done,
}
+svn_error_t *
+svn_ra_serf__context_run_one(svn_ra_serf__handler_t *handler,
+ apr_pool_t *scratch_pool)
+{
+ svn_error_t *err;
+
+ /* Create a serf request based on HANDLER. */
+ svn_ra_serf__request_create(handler);
+
+ /* Wait until the response logic marks its DONE status. */
+ err = svn_ra_serf__context_run_wait(&handler->done, handler->session,
+ scratch_pool);
+
+ /* A callback invocation has been canceled. In this simple case of
+ context_run_one, we can keep the ra-session operational by resetting
+ the connection.
+
+ If we don't do this, the next context run will notice that the connection
+ is still in the error state and will just return SVN_ERR_CEASE_INVOCATION
+ (=the last error for the connection) again */
+ if (err && err->apr_err == SVN_ERR_CEASE_INVOCATION)
+ {
+ apr_status_t status = serf_connection_reset(handler->conn->conn);
+
+ if (status)
+ err = svn_error_compose_create(err,
+ svn_ra_serf__wrap_err(status, NULL));
+ }
+
+ if (handler->server_error)
+ {
+ err = svn_error_compose_create(err, handler->server_error->error);
+ handler->server_error = NULL;
+ }
+
+ return svn_error_trace(err);
+}
+
+
/*
* Expat callback invoked on a start element tag for an error response.
*/
static svn_error_t *
start_error(svn_ra_serf__xml_parser_t *parser,
- void *userData,
svn_ra_serf__dav_props_t name,
- const char **attrs)
+ const char **attrs,
+ apr_pool_t *scratch_pool)
{
- svn_ra_serf__server_error_t *ctx = userData;
+ svn_ra_serf__server_error_t *ctx = parser->user_data;
if (!ctx->in_error &&
strcmp(name.namespace, "DAV:") == 0 &&
@@ -758,7 +1043,12 @@ start_error(svn_ra_serf__xml_parser_t *parser,
SVN_ERR(svn_cstring_atoi64(&val, err_code));
ctx->error->apr_err = (apr_status_t)val;
}
- else
+
+ /* If there's no error code provided, or if the provided code is
+ 0 (which can happen sometimes depending on how the error is
+ constructed on the server-side), just pick a generic error
+ code to run with. */
+ if (! ctx->error->apr_err)
{
ctx->error->apr_err = SVN_ERR_RA_DAV_REQUEST_FAILED;
}
@@ -776,10 +1066,10 @@ start_error(svn_ra_serf__xml_parser_t *parser,
*/
static svn_error_t *
end_error(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name)
+ svn_ra_serf__dav_props_t name,
+ apr_pool_t *scratch_pool)
{
- svn_ra_serf__server_error_t *ctx = userData;
+ svn_ra_serf__server_error_t *ctx = parser->user_data;
if (ctx->in_error &&
strcmp(name.namespace, "DAV:") == 0 &&
@@ -792,15 +1082,10 @@ end_error(svn_ra_serf__xml_parser_t *parser,
/* On the server dav_error_response_tag() will add a leading
and trailing newline if DEBUG_CR is defined in mod_dav.h,
so remove any such characters here. */
- apr_size_t len;
- const char *cd = ctx->cdata->data;
- if (*cd == '\n')
- ++cd;
- len = strlen(cd);
- if (len > 0 && cd[len-1] == '\n')
- --len;
-
- ctx->error->message = apr_pstrmemdup(ctx->error->pool, cd, len);
+ svn_stringbuf_strip_whitespace(ctx->cdata);
+
+ ctx->error->message = apr_pstrmemdup(ctx->error->pool, ctx->cdata->data,
+ ctx->cdata->len);
ctx->collect_cdata = FALSE;
}
@@ -814,11 +1099,11 @@ end_error(svn_ra_serf__xml_parser_t *parser,
*/
static svn_error_t *
cdata_error(svn_ra_serf__xml_parser_t *parser,
- void *userData,
const char *data,
- apr_size_t len)
+ apr_size_t len,
+ apr_pool_t *scratch_pool)
{
- svn_ra_serf__server_error_t *ctx = userData;
+ svn_ra_serf__server_error_t *ctx = parser->user_data;
if (ctx->collect_cdata)
{
@@ -828,6 +1113,47 @@ cdata_error(svn_ra_serf__xml_parser_t *parser,
return SVN_NO_ERROR;
}
+
+static apr_status_t
+drain_bucket(serf_bucket_t *bucket)
+{
+ /* Read whatever is in the bucket, and just drop it. */
+ while (1)
+ {
+ apr_status_t status;
+ const char *data;
+ apr_size_t len;
+
+ status = serf_bucket_read(bucket, SERF_READ_ALL_AVAIL, &data, &len);
+ if (status)
+ return status;
+ }
+}
+
+
+static svn_ra_serf__server_error_t *
+begin_error_parsing(svn_ra_serf__xml_start_element_t start,
+ svn_ra_serf__xml_end_element_t end,
+ svn_ra_serf__xml_cdata_chunk_handler_t cdata,
+ apr_pool_t *result_pool)
+{
+ svn_ra_serf__server_error_t *server_err;
+
+ server_err = apr_pcalloc(result_pool, sizeof(*server_err));
+ server_err->error = svn_error_create(APR_SUCCESS, NULL, NULL);
+ server_err->contains_precondition_error = FALSE;
+ server_err->cdata = svn_stringbuf_create_empty(server_err->error->pool);
+ server_err->collect_cdata = FALSE;
+ server_err->parser.pool = server_err->error->pool;
+ server_err->parser.user_data = server_err;
+ server_err->parser.start = start;
+ server_err->parser.end = end;
+ server_err->parser.cdata = cdata;
+ server_err->parser.ignore_errors = TRUE;
+
+ return server_err;
+}
+
/* Implements svn_ra_serf__response_handler_t */
svn_error_t *
svn_ra_serf__handle_discard_body(serf_request_t *request,
@@ -836,63 +1162,10 @@ svn_ra_serf__handle_discard_body(serf_request_t *request,
apr_pool_t *pool)
{
apr_status_t status;
- svn_ra_serf__server_error_t *server_err = baton;
-
- if (server_err)
- {
- if (!server_err->init)
- {
- serf_bucket_t *hdrs;
- const char *val;
-
- server_err->init = TRUE;
- hdrs = serf_bucket_response_get_headers(response);
- val = serf_bucket_headers_get(hdrs, "Content-Type");
- if (val && strncasecmp(val, "text/xml", sizeof("text/xml") - 1) == 0)
- {
- server_err->error = svn_error_create(APR_SUCCESS, NULL, NULL);
- server_err->has_xml_response = TRUE;
- server_err->contains_precondition_error = FALSE;
- server_err->cdata = svn_stringbuf_create("", pool);
- server_err->collect_cdata = FALSE;
- server_err->parser.pool = server_err->error->pool;
- server_err->parser.user_data = server_err;
- server_err->parser.start = start_error;
- server_err->parser.end = end_error;
- server_err->parser.cdata = cdata_error;
- server_err->parser.done = &server_err->done;
- server_err->parser.ignore_errors = TRUE;
- }
- else
- {
- server_err->error = SVN_NO_ERROR;
- }
- }
-
- if (server_err->has_xml_response)
- {
- svn_error_t *err = svn_ra_serf__handle_xml_parser(
- request,
- response,
- &server_err->parser,
- pool);
-
- if (server_err->done && server_err->error->apr_err == APR_SUCCESS)
- {
- svn_error_clear(server_err->error);
- server_err->error = SVN_NO_ERROR;
- }
-
- return svn_error_trace(err);
- }
-
- }
-
- status = svn_ra_serf__response_discard_handler(request, response,
- NULL, pool);
+ status = drain_bucket(response);
if (status)
- return svn_error_wrap_apr(status, NULL);
+ return svn_ra_serf__wrap_err(status, NULL);
return SVN_NO_ERROR;
}
@@ -903,71 +1176,107 @@ svn_ra_serf__response_discard_handler(serf_request_t *request,
void *baton,
apr_pool_t *pool)
{
- /* Just loop through and discard the body. */
- while (1)
+ return drain_bucket(response);
+}
+
+
+/* Return the value of the RESPONSE's Location header if any, or NULL
+ otherwise. */
+static const char *
+response_get_location(serf_bucket_t *response,
+ const char *base_url,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ serf_bucket_t *headers;
+ const char *location;
+
+ headers = serf_bucket_response_get_headers(response);
+ location = serf_bucket_headers_get(headers, "Location");
+ if (location == NULL)
+ return NULL;
+
+ /* The RFCs say we should have received a full url in LOCATION, but
+ older apache versions and many custom web handlers just return a
+ relative path here...
+
+ And we can't trust anything because it is network data.
+ */
+ if (*location == '/')
{
+ apr_uri_t uri;
apr_status_t status;
- const char *data;
- apr_size_t len;
- status = serf_bucket_read(response, SERF_READ_ALL_AVAIL, &data, &len);
+ status = apr_uri_parse(scratch_pool, base_url, &uri);
- if (status)
- {
- return status;
- }
+ if (status != APR_SUCCESS)
+ return NULL;
- /* feed me */
- }
-}
+ /* Replace the path path with what we got */
+ uri.path = (char*)svn_urlpath__canonicalize(location, scratch_pool);
-const char *
-svn_ra_serf__response_get_location(serf_bucket_t *response,
- apr_pool_t *pool)
-{
- serf_bucket_t *headers;
- const char *val;
+ /* And make APR produce a proper full url for us */
+ location = apr_uri_unparse(scratch_pool, &uri, 0);
- headers = serf_bucket_response_get_headers(response);
- val = serf_bucket_headers_get(headers, "Location");
- return val ? svn_urlpath__canonicalize(val, pool) : NULL;
+ /* Fall through to ensure our canonicalization rules */
+ }
+ else if (!svn_path_is_url(location))
+ {
+ return NULL; /* Any other formats we should support? */
+ }
+
+ return svn_uri_canonicalize(location, result_pool);
}
+
/* Implements svn_ra_serf__response_handler_t */
svn_error_t *
-svn_ra_serf__handle_status_only(serf_request_t *request,
- serf_bucket_t *response,
- void *baton,
- apr_pool_t *pool)
+svn_ra_serf__expect_empty_body(serf_request_t *request,
+ serf_bucket_t *response,
+ void *baton,
+ apr_pool_t *scratch_pool)
{
- svn_error_t *err;
- svn_ra_serf__simple_request_context_t *ctx = baton;
+ svn_ra_serf__handler_t *handler = baton;
+ serf_bucket_t *hdrs;
+ const char *val;
- SVN_ERR_ASSERT(ctx->pool);
+ /* This function is just like handle_multistatus_only() except for the
+ XML parsing callbacks. We want to look for the human-readable element. */
- err = svn_ra_serf__handle_discard_body(request, response,
- &ctx->server_error, pool);
+ /* We should see this just once, in order to initialize SERVER_ERROR.
+ At that point, the core error processing will take over. If we choose
+ not to parse an error, then we'll never return here (because we
+ change the response handler). */
+ SVN_ERR_ASSERT(handler->server_error == NULL);
- if (err && APR_STATUS_IS_EOF(err->apr_err))
+ hdrs = serf_bucket_response_get_headers(response);
+ val = serf_bucket_headers_get(hdrs, "Content-Type");
+ if (val && strncasecmp(val, "text/xml", sizeof("text/xml") - 1) == 0)
{
- serf_status_line sl;
- apr_status_t status;
+ svn_ra_serf__server_error_t *server_err;
- status = serf_bucket_response_status(response, &sl);
- if (SERF_BUCKET_READ_ERROR(status))
- {
- return svn_error_wrap_apr(status, NULL);
- }
+ server_err = begin_error_parsing(start_error, end_error, cdata_error,
+ handler->handler_pool);
+
+ /* Get the parser to set our DONE flag. */
+ server_err->parser.done = &handler->done;
- ctx->status = sl.code;
- ctx->reason = sl.reason ? apr_pstrdup(ctx->pool, sl.reason) : NULL;
- ctx->location = svn_ra_serf__response_get_location(response, ctx->pool);
- ctx->done = TRUE;
+ handler->server_error = server_err;
+ }
+ else
+ {
+ /* The body was not text/xml, so we don't know what to do with it.
+ Toss anything that arrives. */
+ handler->discard_body = TRUE;
}
- return svn_error_trace(err);
+ /* Returning SVN_NO_ERROR will return APR_SUCCESS to serf, which tells it
+ to call the response handler again. That will start up the XML parsing,
+ or it will be dropped on the floor (per the decision above). */
+ return SVN_NO_ERROR;
}
+
/* Given a string like "HTTP/1.1 500 (status)" in BUF, parse out the numeric
status code into *STATUS_CODE_OUT. Ignores leading whitespace. */
static svn_error_t *
@@ -1001,11 +1310,11 @@ parse_dav_status(int *status_code_out, svn_stringbuf_t *buf,
*/
static svn_error_t *
start_207(svn_ra_serf__xml_parser_t *parser,
- void *userData,
svn_ra_serf__dav_props_t name,
- const char **attrs)
+ const char **attrs,
+ apr_pool_t *scratch_pool)
{
- svn_ra_serf__server_error_t *ctx = userData;
+ svn_ra_serf__server_error_t *ctx = parser->user_data;
if (!ctx->in_error &&
strcmp(name.namespace, "DAV:") == 0 &&
@@ -1036,10 +1345,10 @@ start_207(svn_ra_serf__xml_parser_t *parser,
*/
static svn_error_t *
end_207(svn_ra_serf__xml_parser_t *parser,
- void *userData,
- svn_ra_serf__dav_props_t name)
+ svn_ra_serf__dav_props_t name,
+ apr_pool_t *scratch_pool)
{
- svn_ra_serf__server_error_t *ctx = userData;
+ svn_ra_serf__server_error_t *ctx = parser->user_data;
if (ctx->in_error &&
strcmp(name.namespace, "DAV:") == 0 &&
@@ -1049,6 +1358,9 @@ end_207(svn_ra_serf__xml_parser_t *parser,
}
if (ctx->in_error && strcmp(name.name, "responsedescription") == 0)
{
+ /* Remove leading newline added by DEBUG_CR on server */
+ svn_stringbuf_strip_whitespace(ctx->cdata);
+
ctx->collect_cdata = FALSE;
ctx->error->message = apr_pstrmemdup(ctx->error->pool, ctx->cdata->data,
ctx->cdata->len);
@@ -1080,11 +1392,11 @@ end_207(svn_ra_serf__xml_parser_t *parser,
*/
static svn_error_t *
cdata_207(svn_ra_serf__xml_parser_t *parser,
- void *userData,
const char *data,
- apr_size_t len)
+ apr_size_t len,
+ apr_pool_t *scratch_pool)
{
- svn_ra_serf__server_error_t *ctx = userData;
+ svn_ra_serf__server_error_t *ctx = parser->user_data;
if (ctx->collect_cdata)
{
@@ -1099,97 +1411,61 @@ svn_error_t *
svn_ra_serf__handle_multistatus_only(serf_request_t *request,
serf_bucket_t *response,
void *baton,
- apr_pool_t *pool)
+ apr_pool_t *scratch_pool)
{
- svn_error_t *err;
- svn_ra_serf__simple_request_context_t *ctx = baton;
- svn_ra_serf__server_error_t *server_err = &ctx->server_error;
+ svn_ra_serf__handler_t *handler = baton;
+
+ /* This function is just like expect_empty_body() except for the
+ XML parsing callbacks. We are looking for very limited pieces of
+ the multistatus response. */
- SVN_ERR_ASSERT(ctx->pool);
+ /* We should see this just once, in order to initialize SERVER_ERROR.
+ At that point, the core error processing will take over. If we choose
+ not to parse an error, then we'll never return here (because we
+ change the response handler). */
+ SVN_ERR_ASSERT(handler->server_error == NULL);
- /* If necessary, initialize our XML parser. */
- if (server_err && !server_err->init)
{
serf_bucket_t *hdrs;
const char *val;
- server_err->init = TRUE;
hdrs = serf_bucket_response_get_headers(response);
val = serf_bucket_headers_get(hdrs, "Content-Type");
if (val && strncasecmp(val, "text/xml", sizeof("text/xml") - 1) == 0)
{
- server_err->error = svn_error_create(APR_SUCCESS, NULL, NULL);
- server_err->has_xml_response = TRUE;
- server_err->contains_precondition_error = FALSE;
- server_err->cdata = svn_stringbuf_create("", server_err->error->pool);
- server_err->collect_cdata = FALSE;
- server_err->parser.pool = server_err->error->pool;
- server_err->parser.user_data = server_err;
- server_err->parser.start = start_207;
- server_err->parser.end = end_207;
- server_err->parser.cdata = cdata_207;
- server_err->parser.done = &ctx->done;
- server_err->parser.ignore_errors = TRUE;
- }
- else
- {
- ctx->done = TRUE;
- server_err->error = SVN_NO_ERROR;
- }
- }
+ svn_ra_serf__server_error_t *server_err;
- /* If server_err->error still contains APR_SUCCESS, it means that we
- have not successfully parsed the XML yet. */
- if (server_err && server_err->error
- && server_err->error->apr_err == APR_SUCCESS)
- {
- err = svn_ra_serf__handle_xml_parser(request, response,
- &server_err->parser, pool);
-
- /* APR_EOF will be returned when parsing is complete. If we see
- any other error, return it immediately. In practice the only
- other error we expect to see is APR_EAGAIN, which indicates that
- we could not parse the XML because the contents are not yet
- available to be read. */
- if (!err || !APR_STATUS_IS_EOF(err->apr_err))
- {
- return svn_error_trace(err);
- }
- else if (ctx->done && server_err->error->apr_err == APR_SUCCESS)
- {
- svn_error_clear(server_err->error);
- server_err->error = SVN_NO_ERROR;
- }
+ server_err = begin_error_parsing(start_207, end_207, cdata_207,
+ handler->handler_pool);
- svn_error_clear(err);
- }
-
- err = svn_ra_serf__handle_discard_body(request, response, NULL, pool);
-
- if (err && APR_STATUS_IS_EOF(err->apr_err))
- {
- serf_status_line sl;
- apr_status_t status;
+ /* Get the parser to set our DONE flag. */
+ server_err->parser.done = &handler->done;
- status = serf_bucket_response_status(response, &sl);
- if (SERF_BUCKET_READ_ERROR(status))
+ handler->server_error = server_err;
+ }
+ else
{
- return svn_error_wrap_apr(status, NULL);
+ /* The body was not text/xml, so we don't know what to do with it.
+ Toss anything that arrives. */
+ handler->discard_body = TRUE;
}
-
- ctx->status = sl.code;
- ctx->reason = sl.reason ? apr_pstrdup(ctx->pool, sl.reason) : NULL;
- ctx->location = svn_ra_serf__response_get_location(response, ctx->pool);
}
- return svn_error_trace(err);
+ /* Returning SVN_NO_ERROR will return APR_SUCCESS to serf, which tells it
+ to call the response handler again. That will start up the XML parsing,
+ or it will be dropped on the floor (per the decision above). */
+ return SVN_NO_ERROR;
}
+
+/* Conforms to Expat's XML_StartElementHandler */
static void
start_xml(void *userData, const char *raw_name, const char **attrs)
{
svn_ra_serf__xml_parser_t *parser = userData;
svn_ra_serf__dav_props_t name;
+ apr_pool_t *scratch_pool;
+ svn_error_t *err;
if (parser->error)
return;
@@ -1197,31 +1473,53 @@ start_xml(void *userData, const char *raw_name, const char **attrs)
if (!parser->state)
svn_ra_serf__xml_push_state(parser, 0);
+ /* ### get a real scratch_pool */
+ scratch_pool = parser->state->pool;
+
svn_ra_serf__define_ns(&parser->state->ns_list, attrs, parser->state->pool);
svn_ra_serf__expand_ns(&name, parser->state->ns_list, raw_name);
- parser->error = parser->start(parser, parser->user_data, name, attrs);
+ err = parser->start(parser, name, attrs, scratch_pool);
+ if (err && !SERF_BUCKET_READ_ERROR(err->apr_err))
+ err = svn_error_create(SVN_ERR_RA_SERF_WRAPPED_ERROR, err, NULL);
+
+ parser->error = err;
}
+
+/* Conforms to Expat's XML_EndElementHandler */
static void
end_xml(void *userData, const char *raw_name)
{
svn_ra_serf__xml_parser_t *parser = userData;
svn_ra_serf__dav_props_t name;
+ svn_error_t *err;
+ apr_pool_t *scratch_pool;
if (parser->error)
return;
+ /* ### get a real scratch_pool */
+ scratch_pool = parser->state->pool;
+
svn_ra_serf__expand_ns(&name, parser->state->ns_list, raw_name);
- parser->error = parser->end(parser, parser->user_data, name);
+ err = parser->end(parser, name, scratch_pool);
+ if (err && !SERF_BUCKET_READ_ERROR(err->apr_err))
+ err = svn_error_create(SVN_ERR_RA_SERF_WRAPPED_ERROR, err, NULL);
+
+ parser->error = err;
}
+
+/* Conforms to Expat's XML_CharacterDataHandler */
static void
cdata_xml(void *userData, const char *data, int len)
{
svn_ra_serf__xml_parser_t *parser = userData;
+ svn_error_t *err;
+ apr_pool_t *scratch_pool;
if (parser->error)
return;
@@ -1229,7 +1527,14 @@ cdata_xml(void *userData, const char *data, int len)
if (!parser->state)
svn_ra_serf__xml_push_state(parser, 0);
- parser->error = parser->cdata(parser, parser->user_data, data, len);
+ /* ### get a real scratch_pool */
+ scratch_pool = parser->state->pool;
+
+ err = parser->cdata(parser, data, len, scratch_pool);
+ if (err && !SERF_BUCKET_READ_ERROR(err->apr_err))
+ err = svn_error_create(SVN_ERR_RA_SERF_WRAPPED_ERROR, err, NULL);
+
+ parser->error = err;
}
/* Flip the requisite bits in CTX to indicate that processing of the
@@ -1252,101 +1557,24 @@ add_done_item(svn_ra_serf__xml_parser_t *ctx)
}
-/* Get a buffer from the parsing context. It will come from the free list,
- or allocated as necessary. */
-static struct pending_buffer_t *
-get_buffer(svn_ra_serf__xml_parser_t *parser)
-{
- struct pending_buffer_t *pb;
-
- if (parser->pending->avail == NULL)
- return apr_palloc(parser->pool, sizeof(*pb));
-
- pb = parser->pending->avail;
- parser->pending->avail = pb->next;
- return pb;
-}
-
-
-/* Return PB to the list of available buffers in PARSER. */
-static void
-return_buffer(svn_ra_serf__xml_parser_t *parser,
- struct pending_buffer_t *pb)
-{
- pb->next = parser->pending->avail;
- parser->pending->avail = pb;
-}
-
-
static svn_error_t *
write_to_pending(svn_ra_serf__xml_parser_t *ctx,
const char *data,
apr_size_t len,
apr_pool_t *scratch_pool)
{
- struct pending_buffer_t *pb;
-
- /* The caller should not have provided us more than we can store into
- a single memory block. */
- SVN_ERR_ASSERT(len <= PARSE_CHUNK_SIZE);
-
if (ctx->pending == NULL)
- ctx->pending = apr_pcalloc(ctx->pool, sizeof(*ctx->pending));
-
- /* We do not (yet) have a spill file, but the amount stored in memory
- has grown too large. Create the file and place the pending data into
- the temporary file. */
- if (ctx->pending->spill == NULL
- && ctx->pending->memory_size > SPILL_SIZE)
- {
- SVN_ERR(svn_io_open_unique_file3(&ctx->pending->spill,
- NULL /* temp_path */,
- NULL /* dirpath */,
- svn_io_file_del_on_pool_cleanup,
- ctx->pool, scratch_pool));
- }
-
- /* Once a spill file has been constructed, then we need to put all
- arriving data into the file. We will no longer attempt to hold it
- in memory. */
- if (ctx->pending->spill != NULL)
- {
- /* NOTE: we assume the file position is at the END. The caller should
- ensure this, so that we will append. */
- SVN_ERR(svn_io_file_write_full(ctx->pending->spill, data, len,
- NULL, scratch_pool));
- return SVN_NO_ERROR;
- }
-
- /* We're still within bounds of holding the pending information in
- memory. Get a buffer, copy the data there, and link it into our
- pending data. */
- pb = get_buffer(ctx);
- /* NOTE: *pb is uninitialized. All fields must be stored. */
-
- pb->size = len;
- memcpy(pb->data, data, len);
- pb->next = NULL;
-
- /* Start a list of buffers, or append to the end of the linked list
- of buffers. */
- if (ctx->pending->tail == NULL)
{
- ctx->pending->head = pb;
- ctx->pending->tail = pb;
+ ctx->pending = apr_pcalloc(ctx->pool, sizeof(*ctx->pending));
+ ctx->pending->buf = svn_spillbuf__create(PARSE_CHUNK_SIZE,
+ SPILL_SIZE,
+ ctx->pool);
}
- else
- {
- ctx->pending->tail->next = pb;
- ctx->pending->tail = pb;
- }
-
- /* We need to record how much is buffered in memory. Once we reach
- SPILL_SIZE (or thereabouts, it doesn't have to be precise), then
- we'll switch to putting the content into a file. */
- ctx->pending->memory_size += len;
- return SVN_NO_ERROR;
+ /* Copy the data into one or more chunks in the spill buffer. */
+ return svn_error_trace(svn_spillbuf__write(ctx->pending->buf,
+ data, len,
+ scratch_pool));
}
@@ -1358,20 +1586,23 @@ inject_to_parser(svn_ra_serf__xml_parser_t *ctx,
{
int xml_status;
- xml_status = XML_Parse(ctx->xmlp, data, len, 0);
- if (xml_status == XML_STATUS_ERROR && !ctx->ignore_errors)
+ xml_status = XML_Parse(ctx->xmlp, data, (int) len, 0);
+
+ if (! ctx->ignore_errors)
{
- if (sl == NULL)
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("XML parsing failed"));
+ SVN_ERR(ctx->error);
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("XML parsing failed: (%d %s)"),
- sl->code, sl->reason);
- }
+ if (xml_status != XML_STATUS_OK)
+ {
+ if (sl == NULL)
+ return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
+ _("XML parsing failed"));
- if (ctx->error && !ctx->ignore_errors)
- return svn_error_trace(ctx->error);
+ return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
+ _("XML parsing failed: (%d %s)"),
+ sl->code, sl->reason);
+ }
+ }
return SVN_NO_ERROR;
}
@@ -1385,119 +1616,158 @@ xml_parser_cleanup(void *baton)
if (*xmlp)
{
- XML_ParserFree(*xmlp);
+ (void) XML_ParserFree(*xmlp);
*xmlp = NULL;
}
return APR_SUCCESS;
}
+/* Limit the amount of pending content to parse at once to < 100KB per
+ iteration. This number is chosen somewhat arbitrarely. Making it lower
+ will have a drastical negative impact on performance, whereas increasing it
+ increases the risk for connection timeouts.
+ */
+#define PENDING_TO_PARSE PARSE_CHUNK_SIZE * 5
+
svn_error_t *
svn_ra_serf__process_pending(svn_ra_serf__xml_parser_t *parser,
+ svn_boolean_t *network_eof,
apr_pool_t *scratch_pool)
{
- struct pending_buffer_t *pb;
- svn_error_t *err;
- apr_off_t output_unused;
+ svn_boolean_t pending_empty = FALSE;
+ apr_size_t cur_read = 0;
/* Fast path exit: already paused, nothing to do, or already done. */
if (parser->paused || parser->pending == NULL || *parser->done)
- return SVN_NO_ERROR;
-
- /* ### it is possible that the XML parsing of the pending content is
- ### so slow, and that we don't return to reading the connection
- ### fast enough... that the server will disconnect us. right now,
- ### that is highly improbably, but is noted for future's sake.
- ### should that ever happen, the loops in this function can simply
- ### terminate after N seconds. */
-
- /* Empty out memory buffers until we run out, or we get paused again. */
- while (parser->pending->head != NULL)
{
- /* Pull the HEAD buffer out of the list. */
- pb = parser->pending->head;
- if (parser->pending->tail == pb)
- parser->pending->head = parser->pending->tail = NULL;
- else
- parser->pending->head = pb->next;
+ *network_eof = parser->pending ? parser->pending->network_eof : FALSE;
+ return SVN_NO_ERROR;
+ }
- /* We're using less memory now. If we haven't hit the spill file,
- then we may be able to keep using memory. */
- parser->pending->memory_size -= pb->size;
+ /* Parsing the pending conten in the spillbuf will result in many disc i/o
+ operations. This can be so slow that we don't run the network event
+ processing loop often enough, resulting in timed out connections.
- err = inject_to_parser(parser, pb->data, pb->size, NULL);
+ So we limit the amounts of bytes parsed per iteration.
+ */
+ while (cur_read < PENDING_TO_PARSE)
+ {
+ const char *data;
+ apr_size_t len;
- return_buffer(parser, pb);
+ /* Get a block of content, stopping the loop when we run out. */
+ SVN_ERR(svn_spillbuf__read(&data, &len, parser->pending->buf,
+ scratch_pool));
+ if (data)
+ {
+ /* Inject the content into the XML parser. */
+ SVN_ERR(inject_to_parser(parser, data, len, NULL));
- if (err)
- return svn_error_trace(err);
+ /* If the XML parsing callbacks paused us, then we're done for now. */
+ if (parser->paused)
+ break;
- /* If the callbacks paused us, then we're done for now. */
- if (parser->paused)
- return SVN_NO_ERROR;
+ cur_read += len;
+ }
+ else
+ {
+ /* The buffer is empty. */
+ pending_empty = TRUE;
+ break;
+ }
}
- /* If we don't have a spill file, then we've exhausted all
- pending content. */
- if (parser->pending->spill == NULL)
- goto pending_empty;
-
- /* Seek once to where we left off reading. */
- output_unused = parser->pending->spill_start; /* ### stupid API */
- SVN_ERR(svn_io_file_seek(parser->pending->spill,
- APR_SET, &output_unused,
- scratch_pool));
+ /* If the PENDING structures are empty *and* we consumed all content from
+ the network, then we're completely done with the parsing. */
+ if (pending_empty &&
+ parser->pending->network_eof)
+ {
+ int xml_status;
+ SVN_ERR_ASSERT(parser->xmlp != NULL);
- /* We need a buffer for reading out of the file. One of these will always
- exist by the time we start reading from the spill file. */
- pb = get_buffer(parser);
+ /* Tell the parser that no more content will be parsed. */
+ xml_status = XML_Parse(parser->xmlp, NULL, 0, 1);
- /* Keep reading until we hit EOF, or get paused again. */
- while (TRUE)
- {
- apr_size_t len = sizeof(pb->data);
- apr_status_t status;
+ apr_pool_cleanup_run(parser->pool, &parser->xmlp, xml_parser_cleanup);
+ parser->xmlp = NULL;
- /* Read some data and remember where we left off. */
- status = apr_file_read(parser->pending->spill, pb->data, &len);
- if (status && !APR_STATUS_IS_EOF(status))
+ if (! parser->ignore_errors)
{
- err = svn_error_wrap_apr(status, NULL);
- break;
+ SVN_ERR(parser->error);
+
+ if (xml_status != XML_STATUS_OK)
+ {
+ return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
+ _("XML parsing failed"));
+ }
}
- parser->pending->spill_start += len;
- err = inject_to_parser(parser, pb->data, len, NULL);
- if (err)
- break;
+ add_done_item(parser);
+ }
- /* If we just consumed everything in the spill file, then we may
- be done with the parsing. */
- /* ### future change: when we hit EOF, then remove the spill file.
- ### we could go back to using memory for a while. */
- if (APR_STATUS_IS_EOF(status))
- goto pending_empty;
+ *network_eof = parser->pending ? parser->pending->network_eof : FALSE;
- /* If the callbacks paused the parsing, then we're done for now. */
- if (parser->paused)
- break;
- }
+ return SVN_NO_ERROR;
+}
+#undef PENDING_TO_PARSE
- return_buffer(parser, pb);
- return svn_error_trace(err); /* may be SVN_NO_ERROR */
- pending_empty:
- /* If the PENDING structures are empty *and* we consumed all content from
- the network, then we're completely done with the parsing. */
- if (parser->pending->network_eof)
- {
- /* Tell the parser that no more content will be parsed. Ignore the
- return status. We just don't care. */
- (void) XML_Parse(parser->xmlp, NULL, 0, 1);
+/* ### this is still broken conceptually. just shifting incrementally... */
+static svn_error_t *
+handle_server_error(serf_request_t *request,
+ serf_bucket_t *response,
+ apr_pool_t *scratch_pool)
+{
+ svn_ra_serf__server_error_t server_err = { 0 };
+ serf_bucket_t *hdrs;
+ const char *val;
+ apr_status_t err;
+
+ hdrs = serf_bucket_response_get_headers(response);
+ val = serf_bucket_headers_get(hdrs, "Content-Type");
+ if (val && strncasecmp(val, "text/xml", sizeof("text/xml") - 1) == 0)
+ {
+ /* ### we should figure out how to reuse begin_error_parsing */
+
+ server_err.error = svn_error_create(APR_SUCCESS, NULL, NULL);
+ server_err.contains_precondition_error = FALSE;
+ server_err.cdata = svn_stringbuf_create_empty(scratch_pool);
+ server_err.collect_cdata = FALSE;
+ server_err.parser.pool = server_err.error->pool;
+ server_err.parser.user_data = &server_err;
+ server_err.parser.start = start_error;
+ server_err.parser.end = end_error;
+ server_err.parser.cdata = cdata_error;
+ server_err.parser.done = &server_err.done;
+ server_err.parser.ignore_errors = TRUE;
+
+ /* We don't care about any errors except for SERVER_ERR.ERROR */
+ svn_error_clear(svn_ra_serf__handle_xml_parser(request,
+ response,
+ &server_err.parser,
+ scratch_pool));
+
+ /* ### checking DONE is silly. the above only parses whatever has
+ ### been received at the network interface. totally wrong. but
+ ### it is what we have for now (maintaining historical code),
+ ### until we fully migrate. */
+ if (server_err.done && server_err.error->apr_err == APR_SUCCESS)
+ {
+ svn_error_clear(server_err.error);
+ server_err.error = SVN_NO_ERROR;
+ }
- apr_pool_cleanup_run(parser->pool, &parser->xmlp, xml_parser_cleanup);
- add_done_item(parser);
+ return svn_error_trace(server_err.error);
}
+
+ /* The only error that we will return is from the XML response body.
+ Otherwise, ignore the entire body but allow SUCCESS/EOF/EAGAIN to
+ surface. */
+ err = drain_bucket(response);
+ if (err && !SERF_BUCKET_READ_ERROR(err))
+ return svn_ra_serf__wrap_err(err, NULL);
+
return SVN_NO_ERROR;
}
@@ -1514,52 +1784,22 @@ svn_ra_serf__handle_xml_parser(serf_request_t *request,
svn_ra_serf__xml_parser_t *ctx = baton;
svn_error_t *err;
+ /* ### get the HANDLER rather than fetching this. */
status = serf_bucket_response_status(response, &sl);
if (SERF_BUCKET_READ_ERROR(status))
{
- return svn_error_wrap_apr(status, NULL);
- }
-
- if (ctx->status_code)
- {
- *ctx->status_code = sl.code;
- }
-
- if (sl.code == 301 || sl.code == 302 || sl.code == 307)
- {
- ctx->location = svn_ra_serf__response_get_location(response, ctx->pool);
+ return svn_ra_serf__wrap_err(status, NULL);
}
/* Woo-hoo. Nothing here to see. */
- if (sl.code == 404 && ctx->ignore_errors == FALSE)
- {
- /* If our caller won't know about the 404, abort() for now. */
- SVN_ERR_ASSERT(ctx->status_code);
-
- add_done_item(ctx);
-
- err = svn_ra_serf__handle_server_error(request, response, pool);
-
- SVN_ERR(svn_error_compose_create(
- svn_ra_serf__handle_discard_body(request, response, NULL, pool),
- err));
- return SVN_NO_ERROR;
- }
-
- if (ctx->headers_baton == NULL)
- ctx->headers_baton = serf_bucket_response_get_headers(response);
- else if (ctx->headers_baton != serf_bucket_response_get_headers(response))
+ if (sl.code == 404 && !ctx->ignore_errors)
{
- /* We got a new response to an existing parser...
- This tells us the connection has restarted and we should continue
- where we stopped last time.
- */
+ err = handle_server_error(request, response, pool);
- /* Is this a second attempt?? */
- if (!ctx->skip_size)
- ctx->skip_size = ctx->read_size;
+ if (err && APR_STATUS_IS_EOF(err->apr_err))
+ add_done_item(ctx);
- ctx->read_size = 0; /* New request, nothing read */
+ return svn_error_trace(err);
}
if (!ctx->xmlp)
@@ -1575,57 +1815,15 @@ svn_ra_serf__handle_xml_parser(serf_request_t *request,
}
}
- /* If we are storing content into a spill file, then move to the end of
- the file. We need to pre-position the file so that write_to_pending()
- will always append the content. */
- if (ctx->pending != NULL && ctx->pending->spill != NULL)
- {
- apr_off_t output_unused = 0; /* ### stupid API */
-
- SVN_ERR(svn_io_file_seek(ctx->pending->spill,
- APR_END, &output_unused,
- pool));
- }
-
while (1)
{
const char *data;
apr_size_t len;
status = serf_bucket_read(response, PARSE_CHUNK_SIZE, &data, &len);
-
if (SERF_BUCKET_READ_ERROR(status))
{
- return svn_error_wrap_apr(status, NULL);
- }
-
- ctx->read_size += len;
-
- if (ctx->skip_size)
- {
- /* Handle restarted requests correctly: Skip what we already read */
- apr_size_t skip;
-
- if (ctx->skip_size >= ctx->read_size)
- {
- /* Eek. What did the file shrink or something? */
- if (APR_STATUS_IS_EOF(status))
- {
- SVN_ERR_MALFUNCTION();
- }
-
- /* Skip on to the next iteration of this loop. */
- if (APR_STATUS_IS_EAGAIN(status))
- {
- return svn_error_wrap_apr(status, NULL);
- }
- continue;
- }
-
- skip = (apr_size_t)(len - (ctx->read_size - ctx->skip_size));
- data += skip;
- len -= skip;
- ctx->skip_size = 0;
+ return svn_ra_serf__wrap_err(status, NULL);
}
/* Note: once the callbacks invoked by inject_to_parser() sets the
@@ -1652,6 +1850,8 @@ svn_ra_serf__handle_xml_parser(serf_request_t *request,
}
if (err)
{
+ SVN_ERR_ASSERT(ctx->xmlp != NULL);
+
apr_pool_cleanup_run(ctx->pool, &ctx->xmlp, xml_parser_cleanup);
add_done_item(ctx);
return svn_error_trace(err);
@@ -1659,7 +1859,7 @@ svn_ra_serf__handle_xml_parser(serf_request_t *request,
if (APR_STATUS_IS_EAGAIN(status))
{
- return svn_error_wrap_apr(status, NULL);
+ return svn_ra_serf__wrap_err(status, NULL);
}
if (APR_STATUS_IS_EOF(status))
@@ -1671,14 +1871,29 @@ svn_ra_serf__handle_xml_parser(serf_request_t *request,
in the PENDING structures, then we're completely done. */
if (!HAS_PENDING_DATA(ctx->pending))
{
- /* Ignore the return status. We just don't care. */
- (void) XML_Parse(ctx->xmlp, NULL, 0, 1);
+ int xml_status;
+ SVN_ERR_ASSERT(ctx->xmlp != NULL);
+
+ xml_status = XML_Parse(ctx->xmlp, NULL, 0, 1);
apr_pool_cleanup_run(ctx->pool, &ctx->xmlp, xml_parser_cleanup);
+
+ if (! ctx->ignore_errors)
+ {
+ SVN_ERR(ctx->error);
+
+ if (xml_status != XML_STATUS_OK)
+ {
+ return svn_error_create(
+ SVN_ERR_XML_MALFORMED, NULL,
+ _("The XML response contains invalid XML"));
+ }
+ }
+
add_done_item(ctx);
}
- return svn_error_wrap_apr(status, NULL);
+ return svn_ra_serf__wrap_err(status, NULL);
}
/* feed me! */
@@ -1686,19 +1901,6 @@ svn_ra_serf__handle_xml_parser(serf_request_t *request,
/* not reached */
}
-/* Implements svn_ra_serf__response_handler_t */
-svn_error_t *
-svn_ra_serf__handle_server_error(serf_request_t *request,
- serf_bucket_t *response,
- apr_pool_t *pool)
-{
- svn_ra_serf__server_error_t server_err = { 0 };
-
- svn_error_clear(svn_ra_serf__handle_discard_body(request, response,
- &server_err, pool));
-
- return server_err.error;
-}
apr_status_t
svn_ra_serf__credentials_callback(char **username, char **password,
@@ -1707,8 +1909,8 @@ svn_ra_serf__credentials_callback(char **username, char **password,
const char *realm,
apr_pool_t *pool)
{
- svn_ra_serf__handler_t *ctx = baton;
- svn_ra_serf__session_t *session = ctx->session;
+ svn_ra_serf__handler_t *handler = baton;
+ svn_ra_serf__session_t *session = handler->session;
void *creds;
svn_auth_cred_simple_t *simple_creds;
svn_error_t *err;
@@ -1737,8 +1939,7 @@ svn_ra_serf__credentials_callback(char **username, char **password,
if (err)
{
- session->pending_error
- = svn_error_compose_create(session->pending_error, err);
+ (void) save_error(session, err);
return err->apr_err;
}
@@ -1747,13 +1948,11 @@ svn_ra_serf__credentials_callback(char **username, char **password,
if (!creds || session->auth_attempts > 4)
{
/* No more credentials. */
- session->pending_error
- = svn_error_compose_create(
- session->pending_error,
- svn_error_create(
- SVN_ERR_AUTHN_FAILED, NULL,
- _("No more credentials or we tried too many times.\n"
- "Authentication failed")));
+ (void) save_error(session,
+ svn_error_create(
+ SVN_ERR_AUTHN_FAILED, NULL,
+ _("No more credentials or we tried too many "
+ "times.\nAuthentication failed")));
return SVN_ERR_AUTHN_FAILED;
}
@@ -1771,21 +1970,20 @@ svn_ra_serf__credentials_callback(char **username, char **password,
if (!session->proxy_username || session->proxy_auth_attempts > 4)
{
/* No more credentials. */
- session->pending_error
- = svn_error_compose_create(
- ctx->session->pending_error,
- svn_error_create(SVN_ERR_AUTHN_FAILED, NULL,
- _("Proxy authentication failed")));
+ (void) save_error(session,
+ svn_error_create(
+ SVN_ERR_AUTHN_FAILED, NULL,
+ _("Proxy authentication failed")));
return SVN_ERR_AUTHN_FAILED;
}
}
- ctx->conn->last_status_code = code;
+ handler->conn->last_status_code = code;
return APR_SUCCESS;
}
-/* Wait for HTTP response status and headers, and invoke CTX->
+/* Wait for HTTP response status and headers, and invoke HANDLER->
response_handler() to carry out operation-specific processing.
Afterwards, check for connection close.
@@ -1795,47 +1993,97 @@ svn_ra_serf__credentials_callback(char **username, char **password,
static svn_error_t *
handle_response(serf_request_t *request,
serf_bucket_t *response,
- svn_ra_serf__handler_t *ctx,
+ svn_ra_serf__handler_t *handler,
apr_status_t *serf_status,
- apr_pool_t *pool)
+ apr_pool_t *scratch_pool)
{
- serf_status_line sl;
apr_status_t status;
+ svn_error_t *err;
+
+ /* ### need to verify whether this already gets init'd on every
+ ### successful exit. for an error-exit, it will (properly) be
+ ### ignored by the caller. */
+ *serf_status = APR_SUCCESS;
if (!response)
{
- /* Uh-oh. Our connection died. Requeue. */
- if (ctx->response_error)
- SVN_ERR(ctx->response_error(request, response, 0,
- ctx->response_error_baton));
+ /* Uh-oh. Our connection died. */
+ if (handler->response_error)
+ {
+ /* Give a handler chance to prevent request requeue. */
+ SVN_ERR(handler->response_error(request, response, 0,
+ handler->response_error_baton));
- svn_ra_serf__request_create(ctx);
+ svn_ra_serf__request_create(handler);
+ }
+ /* Response error callback is not configured. Requeue another request
+ for this handler only if we didn't started to process body.
+ Return error otherwise. */
+ else if (!handler->reading_body)
+ {
+ svn_ra_serf__request_create(handler);
+ }
+ else
+ {
+ return svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL,
+ _("%s request on '%s' failed"),
+ handler->method, handler->path);
+ }
- return APR_SUCCESS;
+ return SVN_NO_ERROR;
}
- status = serf_bucket_response_status(response, &sl);
- if (SERF_BUCKET_READ_ERROR(status))
- {
- *serf_status = status;
- return SVN_NO_ERROR; /* Handled by serf */
- }
- if (!sl.version && (APR_STATUS_IS_EOF(status) ||
- APR_STATUS_IS_EAGAIN(status)))
+ /* If we're reading the body, then skip all this preparation. */
+ if (handler->reading_body)
+ goto process_body;
+
+ /* Copy the Status-Line info into HANDLER, if we don't yet have it. */
+ if (handler->sline.version == 0)
{
- *serf_status = status;
- return SVN_NO_ERROR; /* Handled by serf */
+ serf_status_line sl;
+
+ status = serf_bucket_response_status(response, &sl);
+ if (status != APR_SUCCESS)
+ {
+ /* The response line is not (yet) ready, or some other error. */
+ *serf_status = status;
+ return SVN_NO_ERROR; /* Handled by serf */
+ }
+
+ /* If we got APR_SUCCESS, then we should have Status-Line info. */
+ SVN_ERR_ASSERT(sl.version != 0);
+
+ handler->sline = sl;
+ handler->sline.reason = apr_pstrdup(handler->handler_pool, sl.reason);
+
+ /* HTTP/1.1? (or later) */
+ if (sl.version != SERF_HTTP_10)
+ handler->session->http10 = FALSE;
}
+ /* Keep reading from the network until we've read all the headers. */
status = serf_bucket_response_wait_for_headers(response);
if (status)
{
+ /* The typical "error" will be APR_EAGAIN, meaning that more input
+ from the network is required to complete the reading of the
+ headers. */
if (!APR_STATUS_IS_EOF(status))
{
+ /* Either the headers are not (yet) complete, or there really
+ was an error. */
*serf_status = status;
return SVN_NO_ERROR;
}
+ /* wait_for_headers() will return EOF if there is no body in this
+ response, or if we completely read the body. The latter is not
+ true since we would have set READING_BODY to get the body read,
+ and we would not be back to this code block.
+
+ It can also return EOF if we truly hit EOF while (say) processing
+ the headers. aka Badness. */
+
/* Cases where a lack of a response body (via EOF) is okay:
* - A HEAD request
* - 204/304 response
@@ -1844,171 +2092,262 @@ handle_response(serf_request_t *request,
* the server closed on us early or we're reading too much. Either way,
* scream loudly.
*/
- if (strcmp(ctx->method, "HEAD") != 0 && sl.code != 204 && sl.code != 304)
+ if (strcmp(handler->method, "HEAD") != 0
+ && handler->sline.code != 204
+ && handler->sline.code != 304)
{
- svn_error_t *err =
- svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA,
- svn_error_wrap_apr(status, NULL),
- _("Premature EOF seen from server "
- "(http status=%d)"), sl.code);
- /* This discard may be no-op, but let's preserve the algorithm
- used elsewhere in this function for clarity's sake. */
- svn_ra_serf__response_discard_handler(request, response, NULL, pool);
+ err = svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA,
+ svn_ra_serf__wrap_err(status, NULL),
+ _("Premature EOF seen from server"
+ " (http status=%d)"),
+ handler->sline.code);
+
+ /* In case anything else arrives... discard it. */
+ handler->discard_body = TRUE;
+
return err;
}
}
- if (ctx->conn->last_status_code == 401 && sl.code < 400)
+ /* ... and set up the header fields in HANDLER. */
+ handler->location = response_get_location(response,
+ handler->session->session_url_str,
+ handler->handler_pool,
+ scratch_pool);
+
+ /* On the last request, we failed authentication. We succeeded this time,
+ so let's save away these credentials. */
+ if (handler->conn->last_status_code == 401 && handler->sline.code < 400)
{
- SVN_ERR(svn_auth_save_credentials(ctx->session->auth_state,
- ctx->session->pool));
- ctx->session->auth_attempts = 0;
- ctx->session->auth_state = NULL;
+ SVN_ERR(svn_auth_save_credentials(handler->session->auth_state,
+ handler->session->pool));
+ handler->session->auth_attempts = 0;
+ handler->session->auth_state = NULL;
}
+ handler->conn->last_status_code = handler->sline.code;
- ctx->conn->last_status_code = sl.code;
-
- if (sl.code == 405 || sl.code == 409 || sl.code >= 500)
+ if (handler->sline.code == 405
+ || handler->sline.code == 408
+ || handler->sline.code == 409
+ || handler->sline.code >= 500)
{
/* 405 Method Not allowed.
+ 408 Request Timeout
409 Conflict: can indicate a hook error.
5xx (Internal) Server error. */
- SVN_ERR(svn_ra_serf__handle_server_error(request, response, pool));
+ serf_bucket_t *hdrs;
+ const char *val;
- if (!ctx->session->pending_error)
+ hdrs = serf_bucket_response_get_headers(response);
+ val = serf_bucket_headers_get(hdrs, "Content-Type");
+ if (val && strncasecmp(val, "text/xml", sizeof("text/xml") - 1) == 0)
{
- apr_status_t apr_err = SVN_ERR_RA_DAV_REQUEST_FAILED;
+ svn_ra_serf__server_error_t *server_err;
- /* 405 == Method Not Allowed (Occurs when trying to lock a working
- copy path which no longer exists at HEAD in the repository. */
+ server_err = begin_error_parsing(start_error, end_error, cdata_error,
+ handler->handler_pool);
+ /* Get the parser to set our DONE flag. */
+ server_err->parser.done = &handler->done;
- if (sl.code == 405 && !strcmp(ctx->method, "LOCK"))
- apr_err = SVN_ERR_FS_OUT_OF_DATE;
+ handler->server_error = server_err;
+ }
+ else
+ {
+ handler->discard_body = TRUE;
- return
- svn_error_createf(apr_err, NULL,
- _("%s request on '%s' failed: %d %s"),
- ctx->method, ctx->path, sl.code, sl.reason);
+ if (!handler->session->pending_error)
+ {
+ apr_status_t apr_err = SVN_ERR_RA_DAV_REQUEST_FAILED;
+
+ /* 405 == Method Not Allowed (Occurs when trying to lock a working
+ copy path which no longer exists at HEAD in the repository. */
+ if (handler->sline.code == 405
+ && strcmp(handler->method, "LOCK") == 0)
+ apr_err = SVN_ERR_FS_OUT_OF_DATE;
+
+ handler->session->pending_error =
+ svn_error_createf(apr_err, NULL,
+ _("%s request on '%s' failed: %d %s"),
+ handler->method, handler->path,
+ handler->sline.code, handler->sline.reason);
+ }
}
+ }
+
+ /* Stop processing the above, on every packet arrival. */
+ handler->reading_body = TRUE;
+
+ process_body:
+
+ /* We've been instructed to ignore the body. Drain whatever is present. */
+ if (handler->discard_body)
+ {
+ *serf_status = drain_bucket(response);
- return SVN_NO_ERROR; /* Error is set in caller */
+ /* If the handler hasn't set done (which it shouldn't have) and
+ we now have the EOF, go ahead and set it so that we can stop
+ our context loops.
+ */
+ if (!handler->done && APR_STATUS_IS_EOF(*serf_status))
+ handler->done = TRUE;
+
+ return SVN_NO_ERROR;
}
- else
+
+ /* If we are supposed to parse the body as a server_error, then do
+ that now. */
+ if (handler->server_error != NULL)
{
- svn_error_t *err;
+ err = svn_ra_serf__handle_xml_parser(request, response,
+ &handler->server_error->parser,
+ scratch_pool);
+
+ /* If we do not receive an error or it is a non-transient error, return
+ immediately.
- err = ctx->response_handler(request,response, ctx->response_baton, pool);
+ APR_EOF will be returned when parsing is complete.
- if (err
- && (!SERF_BUCKET_READ_ERROR(err->apr_err)
- || APR_STATUS_IS_ECONNRESET(err->apr_err)))
+ APR_EAGAIN & WAIT_CONN may be intermittently returned as we proceed through
+ parsing and the network has no more data right now. If we receive that,
+ clear the error and return - allowing serf to wait for more data.
+ */
+ if (!err || SERF_BUCKET_READ_ERROR(err->apr_err))
+ return svn_error_trace(err);
+
+ if (!APR_STATUS_IS_EOF(err->apr_err))
{
- /* These errors are special cased in serf
- ### We hope no handler returns these by accident. */
*serf_status = err->apr_err;
svn_error_clear(err);
return SVN_NO_ERROR;
}
- return svn_error_trace(err);
+ /* Clear the EOF. We don't need it. */
+ svn_error_clear(err);
+
+ /* If the parsing is done, and we did not extract an error, then
+ simply toss everything, and anything else that might arrive.
+ The higher-level code will need to investigate HANDLER->SLINE,
+ as we have no further information for them. */
+ if (handler->done
+ && handler->server_error->error->apr_err == APR_SUCCESS)
+ {
+ svn_error_clear(handler->server_error->error);
+
+ /* Stop parsing for a server error. */
+ handler->server_error = NULL;
+
+ /* If anything arrives after this, then just discard it. */
+ handler->discard_body = TRUE;
+ }
+
+ *serf_status = APR_EOF;
+ return SVN_NO_ERROR;
+ }
+
+ /* Pass the body along to the registered response handler. */
+ err = handler->response_handler(request, response,
+ handler->response_baton,
+ scratch_pool);
+
+ if (err
+ && (!SERF_BUCKET_READ_ERROR(err->apr_err)
+ || APR_STATUS_IS_ECONNRESET(err->apr_err)
+ || APR_STATUS_IS_ECONNABORTED(err->apr_err)))
+ {
+ /* These errors are special cased in serf
+ ### We hope no handler returns these by accident. */
+ *serf_status = err->apr_err;
+ svn_error_clear(err);
+ return SVN_NO_ERROR;
}
+
+ return svn_error_trace(err);
}
/* Implements serf_response_handler_t for handle_response. Storing
- errors in ctx->session->pending_error if appropriate. */
+ errors in handler->session->pending_error if appropriate. */
static apr_status_t
handle_response_cb(serf_request_t *request,
serf_bucket_t *response,
void *baton,
- apr_pool_t *pool)
+ apr_pool_t *scratch_pool)
{
- svn_ra_serf__handler_t *ctx = baton;
- svn_ra_serf__session_t *session = ctx->session;
+ svn_ra_serf__handler_t *handler = baton;
svn_error_t *err;
- apr_status_t serf_status = APR_SUCCESS;
+ apr_status_t inner_status;
+ apr_status_t outer_status;
- err = svn_error_trace(
- handle_response(request, response, ctx, &serf_status, pool));
+ err = svn_error_trace(handle_response(request, response,
+ handler, &inner_status,
+ scratch_pool));
- if (err || session->pending_error)
- {
- session->pending_error = svn_error_compose_create(session->pending_error,
- err);
+ /* Select the right status value to return. */
+ outer_status = save_error(handler->session, err);
+ if (!outer_status)
+ outer_status = inner_status;
- serf_status = session->pending_error->apr_err;
- }
+ /* Make sure the DONE flag is set properly. */
+ if (APR_STATUS_IS_EOF(outer_status) || APR_STATUS_IS_EOF(inner_status))
+ handler->done = TRUE;
- return serf_status;
+ return outer_status;
}
-/* If the CTX->setup() callback is non-NULL, invoke it to carry out the
- majority of the serf_request_setup_t implementation. Otherwise, perform
- default setup, with special handling for HEAD requests, and finer-grained
- callbacks invoked (if non-NULL) to produce the request headers and
- body. */
+/* Perform basic request setup, with special handling for HEAD requests,
+ and finer-grained callbacks invoked (if non-NULL) to produce the request
+ headers and body. */
static svn_error_t *
setup_request(serf_request_t *request,
- svn_ra_serf__handler_t *ctx,
- serf_bucket_t **req_bkt,
- serf_response_acceptor_t *acceptor,
- void **acceptor_baton,
- serf_response_handler_t *handler,
- void **handler_baton,
- apr_pool_t *pool)
+ svn_ra_serf__handler_t *handler,
+ serf_bucket_t **req_bkt,
+ apr_pool_t *request_pool,
+ apr_pool_t *scratch_pool)
{
+ serf_bucket_t *body_bkt;
serf_bucket_t *headers_bkt;
+ const char *accept_encoding;
- *acceptor = svn_ra_serf__accept_response;
- *acceptor_baton = ctx->session;
-
- if (ctx->setup)
+ if (handler->body_delegate)
{
- svn_ra_serf__response_handler_t response_handler;
- void *response_baton;
-
- SVN_ERR(ctx->setup(request, ctx->setup_baton, req_bkt,
- acceptor, acceptor_baton,
- &response_handler, &response_baton,
- pool));
+ serf_bucket_alloc_t *bkt_alloc = serf_request_get_alloc(request);
- ctx->response_handler = response_handler;
- ctx->response_baton = response_baton;
+ /* ### should pass the scratch_pool */
+ SVN_ERR(handler->body_delegate(&body_bkt, handler->body_delegate_baton,
+ bkt_alloc, request_pool));
}
else
{
- serf_bucket_t *body_bkt;
- serf_bucket_alloc_t *bkt_alloc = serf_request_get_alloc(request);
-
- if (strcmp(ctx->method, "HEAD") == 0)
- {
- *acceptor = accept_head;
- }
+ body_bkt = NULL;
+ }
- if (ctx->body_delegate)
- {
- SVN_ERR(ctx->body_delegate(&body_bkt, ctx->body_delegate_baton,
- bkt_alloc, pool));
- }
- else
- {
- body_bkt = NULL;
- }
+ if (handler->custom_accept_encoding)
+ {
+ accept_encoding = NULL;
+ }
+ else if (handler->session->using_compression)
+ {
+ /* Accept gzip compression if enabled. */
+ accept_encoding = "gzip";
+ }
+ else
+ {
+ accept_encoding = NULL;
+ }
- SVN_ERR(svn_ra_serf__setup_serf_req(request, req_bkt, &headers_bkt,
- ctx->conn, ctx->method, ctx->path,
- body_bkt, ctx->body_type));
+ SVN_ERR(setup_serf_req(request, req_bkt, &headers_bkt,
+ handler->session, handler->method, handler->path,
+ body_bkt, handler->body_type, accept_encoding,
+ request_pool, scratch_pool));
- if (ctx->header_delegate)
- {
- SVN_ERR(ctx->header_delegate(headers_bkt, ctx->header_delegate_baton,
- pool));
- }
+ if (handler->header_delegate)
+ {
+ /* ### should pass the scratch_pool */
+ SVN_ERR(handler->header_delegate(headers_bkt,
+ handler->header_delegate_baton,
+ request_pool));
}
- *handler = handle_response_cb;
- *handler_baton = ctx;
-
return APR_SUCCESS;
}
@@ -2021,40 +2360,58 @@ setup_request_cb(serf_request_t *request,
serf_bucket_t **req_bkt,
serf_response_acceptor_t *acceptor,
void **acceptor_baton,
- serf_response_handler_t *handler,
- void **handler_baton,
+ serf_response_handler_t *s_handler,
+ void **s_handler_baton,
apr_pool_t *pool)
{
- svn_ra_serf__handler_t *ctx = setup_baton;
+ svn_ra_serf__handler_t *handler = setup_baton;
svn_error_t *err;
- err = setup_request(request, ctx,
- req_bkt,
- acceptor, acceptor_baton,
- handler, handler_baton,
- pool);
+ /* ### construct a scratch_pool? serf gives us a pool that will live for
+ ### the duration of the request. */
+ apr_pool_t *scratch_pool = pool;
- if (err)
- {
- ctx->session->pending_error
- = svn_error_compose_create(ctx->session->pending_error,
- err);
+ if (strcmp(handler->method, "HEAD") == 0)
+ *acceptor = accept_head;
+ else
+ *acceptor = accept_response;
+ *acceptor_baton = handler->session;
- return err->apr_err;
- }
+ *s_handler = handle_response_cb;
+ *s_handler_baton = handler;
- return APR_SUCCESS;
+ err = svn_error_trace(setup_request(request, handler, req_bkt,
+ pool /* request_pool */, scratch_pool));
+
+ return save_error(handler->session, err);
}
void
svn_ra_serf__request_create(svn_ra_serf__handler_t *handler)
{
+ SVN_ERR_ASSERT_NO_RETURN(handler->handler_pool != NULL);
+
+ /* In case HANDLER is re-queued, reset the various transient fields.
+
+ ### prior to recent changes, HANDLER was constant. maybe we should
+ ### break out these processing fields, apart from the request
+ ### definition. */
+ handler->done = FALSE;
+ handler->server_error = NULL;
+ handler->sline.version = 0;
+ handler->location = NULL;
+ handler->reading_body = FALSE;
+ handler->discard_body = FALSE;
+
+ /* ### do we ever alter the >response_handler? */
+
/* ### do we need to hold onto the returned request object, or just
### not worry about it (the serf ctx will manage it). */
(void) serf_connection_request_create(handler->conn->conn,
setup_request_cb, handler);
}
+
svn_error_t *
svn_ra_serf__discover_vcc(const char **vcc_url,
svn_ra_serf__session_t *session,
@@ -2087,26 +2444,21 @@ svn_ra_serf__discover_vcc(const char **vcc_url,
apr_hash_t *props;
svn_error_t *err;
- err = svn_ra_serf__retrieve_props(&props, session, conn,
- path, SVN_INVALID_REVNUM,
- "0", base_props, pool, pool);
+ err = svn_ra_serf__fetch_node_props(&props, conn,
+ path, SVN_INVALID_REVNUM,
+ base_props, pool, pool);
if (! err)
{
- *vcc_url =
- svn_ra_serf__get_ver_prop(props, path,
- SVN_INVALID_REVNUM,
- "DAV:",
- "version-controlled-configuration");
+ apr_hash_t *ns_props;
- relative_path = svn_ra_serf__get_ver_prop(props, path,
- SVN_INVALID_REVNUM,
- SVN_DAV_PROP_NS_DAV,
- "baseline-relative-path");
+ ns_props = apr_hash_get(props, "DAV:", 4);
+ *vcc_url = svn_prop_get_value(ns_props,
+ "version-controlled-configuration");
- uuid = svn_ra_serf__get_ver_prop(props, path,
- SVN_INVALID_REVNUM,
- SVN_DAV_PROP_NS_DAV,
- "repository-uuid");
+ ns_props = svn_hash_gets(props, SVN_DAV_PROP_NS_DAV);
+ relative_path = svn_prop_get_value(ns_props,
+ "baseline-relative-path");
+ uuid = svn_prop_get_value(ns_props, "repository-uuid");
break;
}
else
@@ -2114,7 +2466,7 @@ svn_ra_serf__discover_vcc(const char **vcc_url,
if ((err->apr_err != SVN_ERR_FS_NOT_FOUND) &&
(err->apr_err != SVN_ERR_RA_DAV_FORBIDDEN))
{
- return err; /* found a _real_ error */
+ return svn_error_trace(err); /* found a _real_ error */
}
else
{
@@ -2160,7 +2512,8 @@ svn_ra_serf__discover_vcc(const char **vcc_url,
/* Now recreate the root_url. */
session->repos_root = session->session_url;
- session->repos_root.path = apr_pstrdup(session->pool, url_buf->data);
+ session->repos_root.path =
+ (char *)svn_fspath__canonicalize(url_buf->data, session->pool);
session->repos_root_str =
svn_urlpath__canonicalize(apr_uri_unparse(session->pool,
&session->repos_root, 0),
@@ -2203,15 +2556,8 @@ svn_ra_serf__get_relative_path(const char **rel_path,
decoded_root = svn_path_uri_decode(session->repos_root.path, pool);
decoded_orig = svn_path_uri_decode(orig_path, pool);
- if (strcmp(decoded_root, decoded_orig) == 0)
- {
- *rel_path = "";
- }
- else
- {
- *rel_path = svn_urlpath__is_child(decoded_root, decoded_orig, pool);
- SVN_ERR_ASSERT(*rel_path != NULL);
- }
+ *rel_path = svn_urlpath__skip_ancestor(decoded_root, decoded_orig);
+ SVN_ERR_ASSERT(*rel_path != NULL);
return SVN_NO_ERROR;
}
@@ -2234,17 +2580,17 @@ svn_ra_serf__report_resource(const char **report_target,
}
svn_error_t *
-svn_ra_serf__error_on_status(int status_code,
+svn_ra_serf__error_on_status(serf_status_line sline,
const char *path,
const char *location)
{
- switch(status_code)
+ switch(sline.code)
{
case 301:
case 302:
case 307:
return svn_error_createf(SVN_ERR_RA_DAV_RELOCATED, NULL,
- (status_code == 301)
+ (sline.code == 301)
? _("Repository moved permanently to '%s';"
" please relocate")
: _("Repository moved temporarily to '%s';"
@@ -2259,7 +2605,216 @@ svn_ra_serf__error_on_status(int status_code,
case 423:
return svn_error_createf(SVN_ERR_FS_NO_LOCK_TOKEN, NULL,
_("'%s': no lock token available"), path);
+
+ case 411:
+ return svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL,
+ _("DAV request failed: 411 Content length required. The "
+ "server or an intermediate proxy does not accept "
+ "chunked encoding. Try setting 'http-chunked-requests' "
+ "to 'auto' or 'no' in your client configuration."));
+ case 501:
+ return svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
+ _("The requested feature is not supported by "
+ "'%s'"), path);
}
+ if (sline.code >= 300)
+ return svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL,
+ _("Unexpected HTTP status %d '%s' on '%s'\n"),
+ sline.code, sline.reason, path);
+
return SVN_NO_ERROR;
}
+
+svn_error_t *
+svn_ra_serf__register_editor_shim_callbacks(svn_ra_session_t *ra_session,
+ svn_delta_shim_callbacks_t *callbacks)
+{
+ svn_ra_serf__session_t *session = ra_session->priv;
+
+ session->shim_callbacks = callbacks;
+ return SVN_NO_ERROR;
+}
+
+
+/* Conforms to Expat's XML_StartElementHandler */
+static void
+expat_start(void *userData, const char *raw_name, const char **attrs)
+{
+ struct expat_ctx_t *ectx = userData;
+
+ if (ectx->inner_error != NULL)
+ return;
+
+ ectx->inner_error = svn_error_trace(
+ svn_ra_serf__xml_cb_start(ectx->xmlctx,
+ raw_name, attrs));
+
+#ifdef EXPAT_HAS_STOPPARSER
+ if (ectx->inner_error)
+ (void) XML_StopParser(ectx->parser, 0 /* resumable */);
+#endif
+}
+
+
+/* Conforms to Expat's XML_EndElementHandler */
+static void
+expat_end(void *userData, const char *raw_name)
+{
+ struct expat_ctx_t *ectx = userData;
+
+ if (ectx->inner_error != NULL)
+ return;
+
+ ectx->inner_error = svn_error_trace(
+ svn_ra_serf__xml_cb_end(ectx->xmlctx, raw_name));
+
+#ifdef EXPAT_HAS_STOPPARSER
+ if (ectx->inner_error)
+ (void) XML_StopParser(ectx->parser, 0 /* resumable */);
+#endif
+}
+
+
+/* Conforms to Expat's XML_CharacterDataHandler */
+static void
+expat_cdata(void *userData, const char *data, int len)
+{
+ struct expat_ctx_t *ectx = userData;
+
+ if (ectx->inner_error != NULL)
+ return;
+
+ ectx->inner_error = svn_error_trace(
+ svn_ra_serf__xml_cb_cdata(ectx->xmlctx, data, len));
+
+#ifdef EXPAT_HAS_STOPPARSER
+ if (ectx->inner_error)
+ (void) XML_StopParser(ectx->parser, 0 /* resumable */);
+#endif
+}
+
+
+/* Implements svn_ra_serf__response_handler_t */
+static svn_error_t *
+expat_response_handler(serf_request_t *request,
+ serf_bucket_t *response,
+ void *baton,
+ apr_pool_t *scratch_pool)
+{
+ struct expat_ctx_t *ectx = baton;
+
+ if (!ectx->parser)
+ {
+ ectx->parser = XML_ParserCreate(NULL);
+ apr_pool_cleanup_register(ectx->cleanup_pool, &ectx->parser,
+ xml_parser_cleanup, apr_pool_cleanup_null);
+ XML_SetUserData(ectx->parser, ectx);
+ XML_SetElementHandler(ectx->parser, expat_start, expat_end);
+ XML_SetCharacterDataHandler(ectx->parser, expat_cdata);
+ }
+
+ /* ### TODO: sline.code < 200 should really be handled by the core */
+ if ((ectx->handler->sline.code < 200) || (ectx->handler->sline.code >= 300))
+ {
+ /* By deferring to expect_empty_body(), it will make a choice on
+ how to handle the body. Whatever the decision, the core handler
+ will take over, and we will not be called again. */
+ return svn_error_trace(svn_ra_serf__expect_empty_body(
+ request, response, ectx->handler,
+ scratch_pool));
+ }
+
+ while (1)
+ {
+ apr_status_t status;
+ const char *data;
+ apr_size_t len;
+ int expat_status;
+
+ status = serf_bucket_read(response, PARSE_CHUNK_SIZE, &data, &len);
+ if (SERF_BUCKET_READ_ERROR(status))
+ return svn_ra_serf__wrap_err(status, NULL);
+
+#if 0
+ /* ### move restart/skip into the core handler */
+ ectx->handler->read_size += len;
+#endif
+
+ /* ### move PAUSED behavior to a new response handler that can feed
+ ### an inner handler, or can pause for a while. */
+
+ /* ### should we have an IGNORE_ERRORS flag like the v1 parser? */
+
+ expat_status = XML_Parse(ectx->parser, data, (int)len, 0 /* isFinal */);
+
+ /* We need to check INNER_ERROR first. This is an error from the
+ callbacks that has been "dropped off" for us to retrieve. On
+ current Expat parsers, we stop the parser when an error occurs,
+ so we want to ignore EXPAT_STATUS (which reports the stoppage).
+
+ If an error is not present, THEN we go ahead and look for parsing
+ errors. */
+ if (ectx->inner_error)
+ {
+ apr_pool_cleanup_run(ectx->cleanup_pool, &ectx->parser,
+ xml_parser_cleanup);
+ return svn_error_trace(ectx->inner_error);
+ }
+ if (expat_status == XML_STATUS_ERROR)
+ return svn_error_createf(SVN_ERR_XML_MALFORMED,
+ ectx->inner_error,
+ _("The %s response contains invalid XML"
+ " (%d %s)"),
+ ectx->handler->method,
+ ectx->handler->sline.code,
+ ectx->handler->sline.reason);
+
+ /* The parsing went fine. What has the bucket told us? */
+
+ if (APR_STATUS_IS_EOF(status))
+ {
+ /* Tell expat we've reached the end of the content. Ignore the
+ return status. We just don't care. */
+ (void) XML_Parse(ectx->parser, NULL, 0, 1 /* isFinal */);
+
+ svn_ra_serf__xml_context_destroy(ectx->xmlctx);
+ apr_pool_cleanup_run(ectx->cleanup_pool, &ectx->parser,
+ xml_parser_cleanup);
+
+ /* ### should check XMLCTX to see if it has returned to the
+ ### INITIAL state. we may have ended early... */
+ }
+
+ if (status && !SERF_BUCKET_READ_ERROR(status))
+ {
+ return svn_ra_serf__wrap_err(status, NULL);
+ }
+ }
+
+ /* NOTREACHED */
+}
+
+
+svn_ra_serf__handler_t *
+svn_ra_serf__create_expat_handler(svn_ra_serf__xml_context_t *xmlctx,
+ apr_pool_t *result_pool)
+{
+ svn_ra_serf__handler_t *handler;
+ struct expat_ctx_t *ectx;
+
+ ectx = apr_pcalloc(result_pool, sizeof(*ectx));
+ ectx->xmlctx = xmlctx;
+ ectx->parser = NULL;
+ ectx->cleanup_pool = result_pool;
+
+
+ handler = apr_pcalloc(result_pool, sizeof(*handler));
+ handler->handler_pool = result_pool;
+ handler->response_handler = expat_response_handler;
+ handler->response_baton = ectx;
+
+ ectx->handler = handler;
+
+ return handler;
+}
diff --git a/subversion/libsvn_ra_serf/util_error.c b/subversion/libsvn_ra_serf/util_error.c
new file mode 100644
index 0000000..da66091
--- /dev/null
+++ b/subversion/libsvn_ra_serf/util_error.c
@@ -0,0 +1,100 @@
+/*
+ * util_error.c : serf utility routines for wrapping serf status codes
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+#include <serf.h>
+
+#include "svn_utf.h"
+#include "private/svn_error_private.h"
+
+#include "ra_serf.h"
+
+/*
+ * Undefine the helpers for creating errors.
+ *
+ * *NOTE*: Any use of these functions in any other function may need
+ * to call svn_error__locate() because the macro that would otherwise
+ * do this is being undefined and the filename and line number will
+ * not be properly set in the static error_file and error_line
+ * variables.
+ */
+#undef svn_error_create
+#undef svn_error_createf
+#undef svn_error_quick_wrap
+#undef svn_error_wrap_apr
+#undef svn_ra_serf__wrap_err
+
+svn_error_t *
+svn_ra_serf__wrap_err(apr_status_t status,
+ const char *fmt,
+ ...)
+{
+ const char *serf_err_msg = serf_error_string(status);
+ svn_error_t *err;
+ va_list ap;
+
+ err = svn_error_create(status, NULL, NULL);
+
+ if (serf_err_msg || fmt)
+ {
+ const char *msg;
+ const char *err_msg;
+ char errbuf[255]; /* Buffer for APR error message. */
+
+ if (serf_err_msg)
+ {
+ err_msg = serf_err_msg;
+ }
+ else
+ {
+ svn_error_t *utf8_err;
+
+ /* Grab the APR error message. */
+ apr_strerror(status, errbuf, sizeof(errbuf));
+ utf8_err = svn_utf_cstring_to_utf8(&err_msg, errbuf, err->pool);
+ if (utf8_err)
+ err_msg = NULL;
+ svn_error_clear(utf8_err);
+ }
+
+ /* Append it to the formatted message. */
+ if (fmt)
+ {
+ va_start(ap, fmt);
+ msg = apr_pvsprintf(err->pool, fmt, ap);
+ va_end(ap);
+ }
+ else
+ {
+ msg = "ra_serf";
+ }
+ if (err_msg)
+ {
+ err->message = apr_pstrcat(err->pool, msg, ": ", err_msg, NULL);
+ }
+ else
+ {
+ err->message = msg;
+ }
+ }
+
+ return err;
+}
diff --git a/subversion/libsvn_ra_serf/xml.c b/subversion/libsvn_ra_serf/xml.c
index ad8a1a1..a95eacc 100644
--- a/subversion/libsvn_ra_serf/xml.c
+++ b/subversion/libsvn_ra_serf/xml.c
@@ -24,11 +24,9 @@
#include <apr_uri.h>
-
-#include <expat.h>
-
#include <serf.h>
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_ra.h"
#include "svn_dav.h"
@@ -37,57 +35,158 @@
#include "svn_config.h"
#include "svn_delta.h"
#include "svn_path.h"
+
#include "svn_private_config.h"
+#include "private/svn_string_private.h"
#include "ra_serf.h"
-void
-svn_ra_serf__define_ns(svn_ra_serf__ns_t **ns_list,
- const char **attrs,
- apr_pool_t *pool)
+struct svn_ra_serf__xml_context_t {
+ /* Current state information. */
+ svn_ra_serf__xml_estate_t *current;
+
+ /* If WAITING.NAMESPACE != NULL, wait for NAMESPACE:NAME element to be
+ closed before looking for transitions from CURRENT->STATE. */
+ svn_ra_serf__dav_props_t waiting;
+
+ /* The transition table. */
+ const svn_ra_serf__xml_transition_t *ttable;
+
+ /* The callback information. */
+ svn_ra_serf__xml_opened_t opened_cb;
+ svn_ra_serf__xml_closed_t closed_cb;
+ svn_ra_serf__xml_cdata_t cdata_cb;
+ void *baton;
+
+ /* Linked list of free states. */
+ svn_ra_serf__xml_estate_t *free_states;
+
+#ifdef SVN_DEBUG
+ /* Used to verify we are not re-entering a callback, specifically to
+ ensure SCRATCH_POOL is not cleared while an outer callback is
+ trying to use it. */
+ svn_boolean_t within_callback;
+#define START_CALLBACK(xmlctx) \
+ do { \
+ svn_ra_serf__xml_context_t *xmlctx__tmp = (xmlctx); \
+ SVN_ERR_ASSERT(!xmlctx__tmp->within_callback); \
+ xmlctx__tmp->within_callback = TRUE; \
+ } while (0)
+#define END_CALLBACK(xmlctx) ((xmlctx)->within_callback = FALSE)
+#else
+#define START_CALLBACK(xmlctx) /* empty */
+#define END_CALLBACK(xmlctx) /* empty */
+#endif /* SVN_DEBUG */
+
+ apr_pool_t *scratch_pool;
+
+};
+
+struct svn_ra_serf__xml_estate_t {
+ /* The current state value. */
+ int state;
+
+ /* The xml tag that opened this state. Waiting for the tag to close. */
+ svn_ra_serf__dav_props_t tag;
+
+ /* Should the CLOSED_CB function be called for custom processing when
+ this tag is closed? */
+ svn_boolean_t custom_close;
+
+ /* A pool may be constructed for this state. */
+ apr_pool_t *state_pool;
+
+ /* The namespaces extent for this state/element. This will start with
+ the parent's NS_LIST, and we will push new namespaces into our
+ local list. The parent will be unaffected by our locally-scoped data. */
+ svn_ra_serf__ns_t *ns_list;
+
+ /* Any collected attribute values. char * -> svn_string_t *. May be NULL
+ if no attributes have been collected. */
+ apr_hash_t *attrs;
+
+ /* Any collected cdata. May be NULL if no cdata is being collected. */
+ svn_stringbuf_t *cdata;
+
+ /* Previous/outer state. */
+ svn_ra_serf__xml_estate_t *prev;
+
+};
+
+
+static void
+define_namespaces(svn_ra_serf__ns_t **ns_list,
+ const char *const *attrs,
+ apr_pool_t *(*get_pool)(void *baton),
+ void *baton)
{
- const char **tmp_attrs = attrs;
+ const char *const *tmp_attrs = attrs;
- while (*tmp_attrs)
+ for (tmp_attrs = attrs; *tmp_attrs != NULL; tmp_attrs += 2)
{
if (strncmp(*tmp_attrs, "xmlns", 5) == 0)
{
- svn_ra_serf__ns_t *new_ns, *cur_ns;
- int found = 0;
+ const svn_ra_serf__ns_t *cur_ns;
+ svn_boolean_t found = FALSE;
+ const char *prefix;
+
+ /* The empty prefix, or a named-prefix. */
+ if (tmp_attrs[0][5] == ':')
+ prefix = &tmp_attrs[0][6];
+ else
+ prefix = "";
/* Have we already defined this ns previously? */
for (cur_ns = *ns_list; cur_ns; cur_ns = cur_ns->next)
{
- if (strcmp(cur_ns->namespace, tmp_attrs[0] + 6) == 0)
+ if (strcmp(cur_ns->namespace, prefix) == 0)
{
- found = 1;
+ found = TRUE;
break;
}
}
if (!found)
{
+ apr_pool_t *pool;
+ svn_ra_serf__ns_t *new_ns;
+
+ if (get_pool)
+ pool = get_pool(baton);
+ else
+ pool = baton;
new_ns = apr_palloc(pool, sizeof(*new_ns));
- new_ns->namespace = apr_pstrdup(pool, tmp_attrs[0] + 6);
+ new_ns->namespace = apr_pstrdup(pool, prefix);
new_ns->url = apr_pstrdup(pool, tmp_attrs[1]);
+ /* Push into the front of NS_LIST. Parent states will point
+ to later in the chain, so will be unaffected by
+ shadowing/other namespaces pushed onto NS_LIST. */
new_ns->next = *ns_list;
-
*ns_list = new_ns;
}
}
- tmp_attrs += 2;
}
}
+
+void
+svn_ra_serf__define_ns(svn_ra_serf__ns_t **ns_list,
+ const char *const *attrs,
+ apr_pool_t *result_pool)
+{
+ define_namespaces(ns_list, attrs, NULL /* get_pool */, result_pool);
+}
+
+
/*
* Look up NAME in the NS_LIST list for previously declared namespace
* definitions and return a DAV_PROPS_T-tuple that has values.
*/
void
svn_ra_serf__expand_ns(svn_ra_serf__dav_props_t *returned_prop_name,
- svn_ra_serf__ns_t *ns_list,
+ const svn_ra_serf__ns_t *ns_list,
const char *name)
{
const char *colon;
@@ -95,7 +194,7 @@ svn_ra_serf__expand_ns(svn_ra_serf__dav_props_t *returned_prop_name,
colon = strchr(name, ':');
if (colon)
{
- svn_ra_serf__ns_t *ns;
+ const svn_ra_serf__ns_t *ns;
for (ns = ns_list; ns; ns = ns->next)
{
@@ -107,42 +206,28 @@ svn_ra_serf__expand_ns(svn_ra_serf__dav_props_t *returned_prop_name,
}
}
}
-
- /* If there is no prefix, or if the prefix is not found, then the
- name is NOT within a namespace. */
- returned_prop_name->namespace = "";
- returned_prop_name->name = name;
-}
-
-void
-svn_ra_serf__expand_string(const char **cur, apr_size_t *cur_len,
- const char *new, apr_size_t new_len,
- apr_pool_t *pool)
-{
- if (!*cur)
- {
- *cur = apr_pstrmemdup(pool, new, new_len);
- *cur_len = new_len;
- }
else
{
- char *new_cur;
-
- /* append the data we received before. */
- new_cur = apr_palloc(pool, *cur_len + new_len + 1);
+ const svn_ra_serf__ns_t *ns;
- memcpy(new_cur, *cur, *cur_len);
- memcpy(new_cur + *cur_len, new, new_len);
-
- /* NULL-term our new string */
- new_cur[*cur_len + new_len] = '\0';
-
- /* update our length */
- *cur_len += new_len;
- *cur = new_cur;
+ for (ns = ns_list; ns; ns = ns->next)
+ {
+ if (! ns->namespace[0])
+ {
+ returned_prop_name->namespace = ns->url;
+ returned_prop_name->name = name;
+ return;
+ }
+ }
}
+
+ /* If the prefix is not found, then the name is NOT within a
+ namespace. */
+ returned_prop_name->namespace = "";
+ returned_prop_name->name = name;
}
+
#define XML_HEADER "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
void
@@ -340,3 +425,409 @@ void svn_ra_serf__xml_pop_state(svn_ra_serf__xml_parser_t *parser)
cur_state->prev = parser->free_state;
parser->free_state = cur_state;
}
+
+
+/* Return a pool for XES to use for self-alloc (and other specifics). */
+static apr_pool_t *
+xes_pool(const svn_ra_serf__xml_estate_t *xes)
+{
+ /* Move up through parent states looking for one with a pool. This
+ will always terminate since the initial state has a pool. */
+ while (xes->state_pool == NULL)
+ xes = xes->prev;
+ return xes->state_pool;
+}
+
+
+static void
+ensure_pool(svn_ra_serf__xml_estate_t *xes)
+{
+ if (xes->state_pool == NULL)
+ xes->state_pool = svn_pool_create(xes_pool(xes));
+}
+
+
+/* This callback is used by define_namespaces() to wait until a pool is
+ required before constructing it. */
+static apr_pool_t *
+lazy_create_pool(void *baton)
+{
+ svn_ra_serf__xml_estate_t *xes = baton;
+
+ ensure_pool(xes);
+ return xes->state_pool;
+}
+
+void
+svn_ra_serf__xml_context_destroy(
+ svn_ra_serf__xml_context_t *xmlctx)
+{
+ svn_pool_destroy(xmlctx->scratch_pool);
+}
+
+svn_ra_serf__xml_context_t *
+svn_ra_serf__xml_context_create(
+ const svn_ra_serf__xml_transition_t *ttable,
+ svn_ra_serf__xml_opened_t opened_cb,
+ svn_ra_serf__xml_closed_t closed_cb,
+ svn_ra_serf__xml_cdata_t cdata_cb,
+ void *baton,
+ apr_pool_t *result_pool)
+{
+ svn_ra_serf__xml_context_t *xmlctx;
+ svn_ra_serf__xml_estate_t *xes;
+
+ xmlctx = apr_pcalloc(result_pool, sizeof(*xmlctx));
+ xmlctx->ttable = ttable;
+ xmlctx->opened_cb = opened_cb;
+ xmlctx->closed_cb = closed_cb;
+ xmlctx->cdata_cb = cdata_cb;
+ xmlctx->baton = baton;
+ xmlctx->scratch_pool = svn_pool_create(result_pool);
+
+ xes = apr_pcalloc(result_pool, sizeof(*xes));
+ /* XES->STATE == 0 */
+
+ /* Child states may use this pool to allocate themselves. If a child
+ needs to collect information, then it will construct a subpool and
+ will use that to allocate itself and its collected data. */
+ xes->state_pool = result_pool;
+
+ xmlctx->current = xes;
+
+ return xmlctx;
+}
+
+
+apr_hash_t *
+svn_ra_serf__xml_gather_since(svn_ra_serf__xml_estate_t *xes,
+ int stop_state)
+{
+ apr_hash_t *data;
+ apr_pool_t *pool;
+
+ ensure_pool(xes);
+ pool = xes->state_pool;
+
+ data = apr_hash_make(pool);
+
+ for (; xes != NULL; xes = xes->prev)
+ {
+ if (xes->attrs != NULL)
+ {
+ apr_hash_index_t *hi;
+
+ for (hi = apr_hash_first(pool, xes->attrs); hi;
+ hi = apr_hash_next(hi))
+ {
+ const void *key;
+ apr_ssize_t klen;
+ void *val;
+
+ /* Parent name/value lifetimes are at least as long as POOL. */
+ apr_hash_this(hi, &key, &klen, &val);
+ apr_hash_set(data, key, klen, val);
+ }
+ }
+
+ if (xes->state == stop_state)
+ break;
+ }
+
+ return data;
+}
+
+
+void
+svn_ra_serf__xml_note(svn_ra_serf__xml_estate_t *xes,
+ int state,
+ const char *name,
+ const char *value)
+{
+ svn_ra_serf__xml_estate_t *scan;
+
+ for (scan = xes; scan != NULL && scan->state != state; scan = scan->prev)
+ /* pass */ ;
+
+ SVN_ERR_ASSERT_NO_RETURN(scan != NULL);
+
+ /* Make sure the target state has a pool. */
+ ensure_pool(scan);
+
+ /* ... and attribute storage. */
+ if (scan->attrs == NULL)
+ scan->attrs = apr_hash_make(scan->state_pool);
+
+ /* In all likelihood, NAME is a string constant. But we can't really
+ be sure. And it isn't like we're storing a billion of these into
+ the state pool. */
+ svn_hash_sets(scan->attrs,
+ apr_pstrdup(scan->state_pool, name),
+ apr_pstrdup(scan->state_pool, value));
+}
+
+
+apr_pool_t *
+svn_ra_serf__xml_state_pool(svn_ra_serf__xml_estate_t *xes)
+{
+ /* If they asked for a pool, then ensure that we have one to provide. */
+ ensure_pool(xes);
+
+ return xes->state_pool;
+}
+
+
+svn_error_t *
+svn_ra_serf__xml_cb_start(svn_ra_serf__xml_context_t *xmlctx,
+ const char *raw_name,
+ const char *const *attrs)
+{
+ svn_ra_serf__xml_estate_t *current = xmlctx->current;
+ svn_ra_serf__dav_props_t elemname;
+ const svn_ra_serf__xml_transition_t *scan;
+ apr_pool_t *new_pool;
+ svn_ra_serf__xml_estate_t *new_xes;
+
+ /* If we're waiting for an element to close, then just ignore all
+ other element-opens. */
+ if (xmlctx->waiting.namespace != NULL)
+ return SVN_NO_ERROR;
+
+ /* Look for xmlns: attributes. Lazily create the state pool if any
+ were found. */
+ define_namespaces(&current->ns_list, attrs, lazy_create_pool, current);
+
+ svn_ra_serf__expand_ns(&elemname, current->ns_list, raw_name);
+
+ for (scan = xmlctx->ttable; scan->ns != NULL; ++scan)
+ {
+ if (scan->from_state != current->state)
+ continue;
+
+ /* Wildcard tag match. */
+ if (*scan->name == '*')
+ break;
+
+ /* Found a specific transition. */
+ if (strcmp(elemname.name, scan->name) == 0
+ && strcmp(elemname.namespace, scan->ns) == 0)
+ break;
+ }
+ if (scan->ns == NULL)
+ {
+ if (current->state == 0)
+ {
+ return svn_error_createf(
+ SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
+ _("XML Parsing failed: Unexpected root element '%s'"),
+ elemname.name);
+ }
+
+ xmlctx->waiting = elemname;
+ /* ### return? */
+ return SVN_NO_ERROR;
+ }
+
+ /* We should not be told to collect cdata if the closed_cb will not
+ be called. */
+ SVN_ERR_ASSERT(!scan->collect_cdata || scan->custom_close);
+
+ /* Found a transition. Make it happen. */
+
+ /* ### todo. push state */
+
+ /* ### how to use free states? */
+ /* This state should be allocated in the extent pool. If we will be
+ collecting information for this state, then construct a subpool.
+
+ ### potentially optimize away the subpool if none of the
+ ### attributes are present. subpools are cheap, tho... */
+ new_pool = xes_pool(current);
+ if (scan->collect_cdata || scan->collect_attrs[0])
+ {
+ new_pool = svn_pool_create(new_pool);
+
+ /* Prep the new state. */
+ new_xes = apr_pcalloc(new_pool, sizeof(*new_xes));
+ new_xes->state_pool = new_pool;
+
+ /* If we're supposed to collect cdata, then set up a buffer for
+ this. The existence of this buffer will instruct our cdata
+ callback to collect the cdata. */
+ if (scan->collect_cdata)
+ new_xes->cdata = svn_stringbuf_create_empty(new_pool);
+
+ if (scan->collect_attrs[0] != NULL)
+ {
+ const char *const *saveattr = &scan->collect_attrs[0];
+
+ new_xes->attrs = apr_hash_make(new_pool);
+ for (; *saveattr != NULL; ++saveattr)
+ {
+ const char *name;
+ const char *value;
+
+ if (**saveattr == '?')
+ {
+ name = *saveattr + 1;
+ value = svn_xml_get_attr_value(name, attrs);
+ }
+ else
+ {
+ name = *saveattr;
+ value = svn_xml_get_attr_value(name, attrs);
+ if (value == NULL)
+ return svn_error_createf(SVN_ERR_XML_ATTRIB_NOT_FOUND,
+ NULL,
+ _("Missing XML attribute: '%s'"),
+ name);
+ }
+
+ if (value)
+ svn_hash_sets(new_xes->attrs, name,
+ apr_pstrdup(new_pool, value));
+ }
+ }
+ }
+ else
+ {
+ /* Prep the new state. */
+ new_xes = apr_pcalloc(new_pool, sizeof(*new_xes));
+ /* STATE_POOL remains NULL. */
+ }
+
+ /* Some basic copies to set up the new estate. */
+ new_xes->state = scan->to_state;
+ new_xes->tag.name = apr_pstrdup(new_pool, elemname.name);
+ new_xes->tag.namespace = apr_pstrdup(new_pool, elemname.namespace);
+ new_xes->custom_close = scan->custom_close;
+
+ /* Start with the parent's namespace set. */
+ new_xes->ns_list = current->ns_list;
+
+ /* The new state is prepared. Make it current. */
+ new_xes->prev = current;
+ xmlctx->current = new_xes;
+
+ if (xmlctx->opened_cb)
+ {
+ START_CALLBACK(xmlctx);
+ SVN_ERR(xmlctx->opened_cb(new_xes, xmlctx->baton,
+ new_xes->state, &new_xes->tag,
+ xmlctx->scratch_pool));
+ END_CALLBACK(xmlctx);
+ svn_pool_clear(xmlctx->scratch_pool);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_ra_serf__xml_cb_end(svn_ra_serf__xml_context_t *xmlctx,
+ const char *raw_name)
+{
+ svn_ra_serf__xml_estate_t *xes = xmlctx->current;
+ svn_ra_serf__dav_props_t elemname;
+
+ svn_ra_serf__expand_ns(&elemname, xes->ns_list, raw_name);
+
+ if (xmlctx->waiting.namespace != NULL)
+ {
+ /* If this element is not the closer, then keep waiting... */
+ if (strcmp(elemname.name, xmlctx->waiting.name) != 0
+ || strcmp(elemname.namespace, xmlctx->waiting.namespace) != 0)
+ return SVN_NO_ERROR;
+
+ /* Found it. Stop waiting, and go back for more. */
+ xmlctx->waiting.namespace = NULL;
+ return SVN_NO_ERROR;
+ }
+
+ /* We should be looking at the same tag that opened the current state.
+
+ Unknown elements are simply skipped, so we wouldn't reach this check.
+
+ Known elements push a new state for a given tag. Some other elemname
+ would imply closing an ancestor tag (where did ours go?) or a spurious
+ tag closure. */
+ if (strcmp(elemname.name, xes->tag.name) != 0
+ || strcmp(elemname.namespace, xes->tag.namespace) != 0)
+ return svn_error_create(SVN_ERR_XML_MALFORMED, NULL,
+ _("The response contains invalid XML"));
+
+ if (xes->custom_close)
+ {
+ const svn_string_t *cdata;
+
+ if (xes->cdata)
+ {
+ cdata = svn_stringbuf__morph_into_string(xes->cdata);
+#ifdef SVN_DEBUG
+ /* We might toss the pool holding this structure, but it could also
+ be within a parent pool. In any case, for safety's sake, disable
+ the stringbuf against future Badness. */
+ xes->cdata->pool = NULL;
+#endif
+ }
+ else
+ cdata = NULL;
+
+ START_CALLBACK(xmlctx);
+ SVN_ERR(xmlctx->closed_cb(xes, xmlctx->baton, xes->state,
+ cdata, xes->attrs,
+ xmlctx->scratch_pool));
+ END_CALLBACK(xmlctx);
+ svn_pool_clear(xmlctx->scratch_pool);
+ }
+
+ /* Pop the state. */
+ xmlctx->current = xes->prev;
+
+ /* ### not everything should go on the free state list. XES may go
+ ### away with the state pool. */
+ xes->prev = xmlctx->free_states;
+ xmlctx->free_states = xes;
+
+ /* If there is a STATE_POOL, then toss it. This will get rid of as much
+ memory as possible. Potentially the XES (if we didn't create a pool
+ right away, then XES may be in a parent pool). */
+ if (xes->state_pool)
+ svn_pool_destroy(xes->state_pool);
+
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_ra_serf__xml_cb_cdata(svn_ra_serf__xml_context_t *xmlctx,
+ const char *data,
+ apr_size_t len)
+{
+ /* If we are waiting for a closing tag, then we are uninterested in
+ the cdata. Just return. */
+ if (xmlctx->waiting.namespace != NULL)
+ return SVN_NO_ERROR;
+
+ /* If the current state is collecting cdata, then copy the cdata. */
+ if (xmlctx->current->cdata != NULL)
+ {
+ svn_stringbuf_appendbytes(xmlctx->current->cdata, data, len);
+ }
+ /* ... else if a CDATA_CB has been supplied, then invoke it for
+ all states. */
+ else if (xmlctx->cdata_cb != NULL)
+ {
+ START_CALLBACK(xmlctx);
+ SVN_ERR(xmlctx->cdata_cb(xmlctx->current,
+ xmlctx->baton,
+ xmlctx->current->state,
+ data, len,
+ xmlctx->scratch_pool));
+ END_CALLBACK(xmlctx);
+ svn_pool_clear(xmlctx->scratch_pool);
+ }
+
+ return SVN_NO_ERROR;
+}
+
diff --git a/subversion/libsvn_ra_svn/client.c b/subversion/libsvn_ra_svn/client.c
index c5c7dd2..335f321 100644
--- a/subversion/libsvn_ra_svn/client.c
+++ b/subversion/libsvn_ra_svn/client.c
@@ -32,6 +32,7 @@
#include <apr_network_io.h>
#include <apr_uri.h>
+#include "svn_hash.h"
#include "svn_types.h"
#include "svn_string.h"
#include "svn_dirent_uri.h"
@@ -49,6 +50,7 @@
#include "svn_private_config.h"
#include "private/svn_fspath.h"
+#include "private/svn_subr_private.h"
#include "../libsvn_ra/ra_loader.h"
@@ -202,8 +204,8 @@ static svn_error_t *parse_prop_diffs(const apr_array_header_t *list,
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Prop diffs element not a list"));
prop = apr_array_push(*diffs);
- SVN_ERR(svn_ra_svn_parse_tuple(elt->u.list, pool, "c(?s)", &prop->name,
- &prop->value));
+ SVN_ERR(svn_ra_svn__parse_tuple(elt->u.list, pool, "c(?s)", &prop->name,
+ &prop->value));
}
return SVN_NO_ERROR;
}
@@ -215,9 +217,9 @@ static svn_error_t *parse_lock(const apr_array_header_t *list, apr_pool_t *pool,
{
const char *cdate, *edate;
*lock = svn_lock_create(pool);
- SVN_ERR(svn_ra_svn_parse_tuple(list, pool, "ccc(?c)c(?c)", &(*lock)->path,
- &(*lock)->token, &(*lock)->owner,
- &(*lock)->comment, &cdate, &edate));
+ SVN_ERR(svn_ra_svn__parse_tuple(list, pool, "ccc(?c)c(?c)", &(*lock)->path,
+ &(*lock)->token, &(*lock)->owner,
+ &(*lock)->comment, &cdate, &edate));
(*lock)->path = svn_fspath__canonicalize((*lock)->path, pool);
SVN_ERR(svn_time_from_cstring(&(*lock)->creation_date, cdate, pool));
if (edate)
@@ -231,7 +233,7 @@ svn_error_t *svn_ra_svn__auth_response(svn_ra_svn_conn_t *conn,
apr_pool_t *pool,
const char *mech, const char *mech_arg)
{
- return svn_ra_svn_write_tuple(conn, pool, "w(?c)", mech, mech_arg);
+ return svn_ra_svn__write_tuple(conn, pool, "w(?c)", mech, mech_arg);
}
static svn_error_t *handle_auth_request(svn_ra_svn__session_baton_t *sess,
@@ -241,7 +243,7 @@ static svn_error_t *handle_auth_request(svn_ra_svn__session_baton_t *sess,
apr_array_header_t *mechlist;
const char *realm;
- SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, "lc", &mechlist, &realm));
+ SVN_ERR(svn_ra_svn__read_cmd_response(conn, pool, "lc", &mechlist, &realm));
if (mechlist->nelts == 0)
return SVN_NO_ERROR;
return DO_AUTH(sess, mechlist, realm, pool);
@@ -258,9 +260,8 @@ static svn_error_t *ra_svn_set_path(void *baton, const char *path,
{
ra_svn_reporter_baton_t *b = baton;
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "set-path", "crb(?c)w",
- path, rev, start_empty, lock_token,
- svn_depth_to_word(depth)));
+ SVN_ERR(svn_ra_svn__write_cmd_set_path(b->conn, pool, path, rev,
+ start_empty, lock_token, depth));
return SVN_NO_ERROR;
}
@@ -269,7 +270,7 @@ static svn_error_t *ra_svn_delete_path(void *baton, const char *path,
{
ra_svn_reporter_baton_t *b = baton;
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "delete-path", "c", path));
+ SVN_ERR(svn_ra_svn__write_cmd_delete_path(b->conn, pool, path));
return SVN_NO_ERROR;
}
@@ -283,9 +284,8 @@ static svn_error_t *ra_svn_link_path(void *baton, const char *path,
{
ra_svn_reporter_baton_t *b = baton;
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "link-path", "ccrb(?c)w",
- path, url, rev, start_empty, lock_token,
- svn_depth_to_word(depth)));
+ SVN_ERR(svn_ra_svn__write_cmd_link_path(b->conn, pool, path, url, rev,
+ start_empty, lock_token, depth));
return SVN_NO_ERROR;
}
@@ -294,11 +294,11 @@ static svn_error_t *ra_svn_finish_report(void *baton,
{
ra_svn_reporter_baton_t *b = baton;
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, b->pool, "finish-report", ""));
+ SVN_ERR(svn_ra_svn__write_cmd_finish_report(b->conn, b->pool));
SVN_ERR(handle_auth_request(b->sess_baton, b->pool));
SVN_ERR(svn_ra_svn_drive_editor2(b->conn, b->pool, b->editor, b->edit_baton,
NULL, FALSE));
- SVN_ERR(svn_ra_svn_read_cmd_response(b->conn, b->pool, ""));
+ SVN_ERR(svn_ra_svn__read_cmd_response(b->conn, b->pool, ""));
return SVN_NO_ERROR;
}
@@ -307,7 +307,7 @@ static svn_error_t *ra_svn_abort_report(void *baton,
{
ra_svn_reporter_baton_t *b = baton;
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, b->pool, "abort-report", ""));
+ SVN_ERR(svn_ra_svn__write_cmd_abort_report(b->conn, b->pool));
return SVN_NO_ERROR;
}
@@ -319,6 +319,11 @@ static svn_ra_reporter3_t ra_svn_reporter = {
ra_svn_abort_report
};
+/* Set *REPORTER and *REPORT_BATON to a new reporter which will drive
+ * EDITOR/EDIT_BATON when it gets the finish_report() call.
+ *
+ * Allocate the new reporter in POOL.
+ */
static svn_error_t *
ra_svn_get_reporter(svn_ra_svn__session_baton_t *sess_baton,
apr_pool_t *pool,
@@ -377,8 +382,7 @@ static svn_error_t *find_tunnel_agent(const char *tunnel,
int n;
/* Look up the tunnel specification in config. */
- cfg = config ? apr_hash_get(config, SVN_CONFIG_CATEGORY_CONFIG,
- APR_HASH_KEY_STRING) : NULL;
+ cfg = config ? svn_hash_gets(config, SVN_CONFIG_CATEGORY_CONFIG) : NULL;
svn_config_get(cfg, &val, SVN_CONFIG_SECTION_TUNNELS, tunnel, NULL);
/* We have one predefined tunnel scheme, if it isn't overridden by config. */
@@ -454,12 +458,13 @@ static void handle_child_process_error(apr_pool_t *pool, apr_status_t status,
|| apr_file_open_stdout(&out_file, pool))
return;
- conn = svn_ra_svn_create_conn2(NULL, in_file, out_file,
- SVN_DELTA_COMPRESSION_LEVEL_DEFAULT, pool);
+ conn = svn_ra_svn_create_conn3(NULL, in_file, out_file,
+ SVN_DELTA_COMPRESSION_LEVEL_DEFAULT, 0,
+ 0, pool);
err = svn_error_wrap_apr(status, _("Error in child process: %s"), desc);
- svn_error_clear(svn_ra_svn_write_cmd_failure(conn, pool, err));
+ svn_error_clear(svn_ra_svn__write_cmd_failure(conn, pool, err));
svn_error_clear(err);
- svn_error_clear(svn_ra_svn_flush(conn, pool));
+ svn_error_clear(svn_ra_svn__flush(conn, pool));
}
/* (Note: *CONN is an output parameter.) */
@@ -482,7 +487,9 @@ static svn_error_t *make_tunnel(const char **args, svn_ra_svn_conn_t **conn,
if (status == APR_SUCCESS)
status = apr_proc_create(proc, *args, args, NULL, attr, pool);
if (status != APR_SUCCESS)
- return svn_error_wrap_apr(status, _("Can't create tunnel"));
+ return svn_error_create(SVN_ERR_RA_CANNOT_CREATE_TUNNEL,
+ svn_error_wrap_apr(status,
+ _("Can't create tunnel")), NULL);
/* Arrange for the tunnel agent to get a SIGTERM on pool
* cleanup. This is a little extreme, but the alternatives
@@ -522,9 +529,10 @@ static svn_error_t *make_tunnel(const char **args, svn_ra_svn_conn_t **conn,
apr_file_inherit_unset(proc->out);
/* Guard against dotfile output to stdout on the server. */
- *conn = svn_ra_svn_create_conn2(NULL, proc->out, proc->in,
- SVN_DELTA_COMPRESSION_LEVEL_DEFAULT, pool);
- err = svn_ra_svn_skip_leading_garbage(*conn, pool);
+ *conn = svn_ra_svn_create_conn3(NULL, proc->out, proc->in,
+ SVN_DELTA_COMPRESSION_LEVEL_DEFAULT,
+ 0, 0, pool);
+ err = svn_ra_svn__skip_leading_garbage(*conn, pool);
if (err)
return svn_error_quick_wrap(
err,
@@ -592,19 +600,36 @@ static svn_error_t *open_session(svn_ra_svn__session_baton_t **sess_p,
else
{
SVN_ERR(make_connection(uri->hostname, uri->port, &sock, pool));
- conn = svn_ra_svn_create_conn2(sock, NULL, NULL,
+ conn = svn_ra_svn_create_conn3(sock, NULL, NULL,
SVN_DELTA_COMPRESSION_LEVEL_DEFAULT,
- pool);
+ 0, 0, pool);
}
+ /* Build the useragent string, querying the client for any
+ customizations it wishes to note. For historical reasons, we
+ still deliver the hard-coded client version info
+ (SVN_RA_SVN__DEFAULT_USERAGENT) and the customized client string
+ separately in the protocol/capabilities handshake below. But the
+ commit logic wants the combined form for use with the
+ SVN_PROP_TXN_USER_AGENT ephemeral property because that's
+ consistent with our DAV approach. */
+ if (sess->callbacks->get_client_string != NULL)
+ SVN_ERR(sess->callbacks->get_client_string(sess->callbacks_baton,
+ &client_string, pool));
+ if (client_string)
+ sess->useragent = apr_pstrcat(pool, SVN_RA_SVN__DEFAULT_USERAGENT " ",
+ client_string, (char *)NULL);
+ else
+ sess->useragent = SVN_RA_SVN__DEFAULT_USERAGENT;
+
/* Make sure we set conn->session before reading from it,
* because the reader and writer functions expect a non-NULL value. */
sess->conn = conn;
conn->session = sess;
/* Read server's greeting. */
- SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, "nnll", &minver, &maxver,
- &mechlist, &server_caplist));
+ SVN_ERR(svn_ra_svn__read_cmd_response(conn, pool, "nnll", &minver, &maxver,
+ &mechlist, &server_caplist));
/* We support protocol version 2. */
if (minver > 2)
@@ -623,23 +648,21 @@ static svn_error_t *open_session(svn_ra_svn__session_baton_t **sess_p,
return svn_error_create(SVN_ERR_RA_SVN_BAD_VERSION, NULL,
_("Server does not support edit pipelining"));
- if (sess->callbacks->get_client_string != NULL)
- SVN_ERR(sess->callbacks->get_client_string(sess->callbacks_baton,
- &client_string, pool));
-
/* In protocol version 2, we send back our protocol version, our
* capability list, and the URL, and subsequently there is an auth
* request. */
/* Client-side capabilities list: */
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "n(wwwwww)cc(?c)",
- (apr_uint64_t) 2,
- SVN_RA_SVN_CAP_EDIT_PIPELINE,
- SVN_RA_SVN_CAP_SVNDIFF1,
- SVN_RA_SVN_CAP_ABSENT_ENTRIES,
- SVN_RA_SVN_CAP_DEPTH,
- SVN_RA_SVN_CAP_MERGEINFO,
- SVN_RA_SVN_CAP_LOG_REVPROPS,
- url, "SVN/" SVN_VER_NUMBER, client_string));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "n(wwwwww)cc(?c)",
+ (apr_uint64_t) 2,
+ SVN_RA_SVN_CAP_EDIT_PIPELINE,
+ SVN_RA_SVN_CAP_SVNDIFF1,
+ SVN_RA_SVN_CAP_ABSENT_ENTRIES,
+ SVN_RA_SVN_CAP_DEPTH,
+ SVN_RA_SVN_CAP_MERGEINFO,
+ SVN_RA_SVN_CAP_LOG_REVPROPS,
+ url,
+ SVN_RA_SVN__DEFAULT_USERAGENT,
+ client_string));
SVN_ERR(handle_auth_request(sess, pool));
/* This is where the security layer would go into effect if we
@@ -647,8 +670,8 @@ static svn_error_t *open_session(svn_ra_svn__session_baton_t **sess_p,
/* Read the repository's uuid and root URL, and perhaps learn more
capabilities that weren't available before now. */
- SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, "c?c?l", &conn->uuid,
- &conn->repos_root, &repos_caplist));
+ SVN_ERR(svn_ra_svn__read_cmd_response(conn, pool, "c?c?l", &conn->uuid,
+ &conn->repos_root, &repos_caplist));
if (repos_caplist)
SVN_ERR(svn_ra_svn_set_capabilities(conn, repos_caplist));
@@ -679,7 +702,7 @@ static svn_error_t *open_session(svn_ra_svn__session_baton_t **sess_p,
N_("Module for accessing a repository using the svn network protocol.")
#endif
-static const char *ra_svn_get_description(void)
+static const char *ra_svn_get_description(apr_pool_t *pool)
{
return _(RA_SVN_DESCRIPTION);
}
@@ -722,12 +745,10 @@ static svn_error_t *ra_svn_open(svn_ra_session_t *session,
else
tunnel_argv = NULL;
- cfg_client = config ? apr_hash_get(config,
- SVN_CONFIG_CATEGORY_CONFIG,
- APR_HASH_KEY_STRING) : NULL;
- cfg = config ? apr_hash_get(config,
- SVN_CONFIG_CATEGORY_SERVERS,
- APR_HASH_KEY_STRING) : NULL;
+ cfg_client = config
+ ? svn_hash_gets(config, SVN_CONFIG_CATEGORY_CONFIG)
+ : NULL;
+ cfg = config ? svn_hash_gets(config, SVN_CONFIG_CATEGORY_SERVERS) : NULL;
svn_auth_set_parameter(callbacks->auth_baton,
SVN_AUTH_PARAM_CONFIG_CATEGORY_CONFIG, cfg_client);
svn_auth_set_parameter(callbacks->auth_baton,
@@ -753,11 +774,11 @@ static svn_error_t *ra_svn_reparent(svn_ra_session_t *ra_session,
svn_ra_svn__session_baton_t *new_sess;
apr_uri_t uri;
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "reparent", "c", url));
+ SVN_ERR(svn_ra_svn__write_cmd_reparent(conn, pool, url));
err = handle_auth_request(sess, pool);
if (! err)
{
- SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, ""));
+ SVN_ERR(svn_ra_svn__read_cmd_response(conn, pool, ""));
sess->url = apr_pstrdup(sess->pool, url);
return SVN_NO_ERROR;
}
@@ -802,9 +823,9 @@ static svn_error_t *ra_svn_get_latest_rev(svn_ra_session_t *session,
svn_ra_svn__session_baton_t *sess_baton = session->priv;
svn_ra_svn_conn_t *conn = sess_baton->conn;
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "get-latest-rev", ""));
+ SVN_ERR(svn_ra_svn__write_cmd_get_latest_rev(conn, pool));
SVN_ERR(handle_auth_request(sess_baton, pool));
- SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, "r", rev));
+ SVN_ERR(svn_ra_svn__read_cmd_response(conn, pool, "r", rev));
return SVN_NO_ERROR;
}
@@ -815,10 +836,9 @@ static svn_error_t *ra_svn_get_dated_rev(svn_ra_session_t *session,
svn_ra_svn__session_baton_t *sess_baton = session->priv;
svn_ra_svn_conn_t *conn = sess_baton->conn;
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "get-dated-rev", "c",
- svn_time_to_cstring(tm, pool)));
+ SVN_ERR(svn_ra_svn__write_cmd_get_dated_rev(conn, pool, tm));
SVN_ERR(handle_auth_request(sess_baton, pool));
- SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, "r", rev));
+ SVN_ERR(svn_ra_svn__read_cmd_response(conn, pool, "r", rev));
return SVN_NO_ERROR;
}
@@ -859,14 +879,15 @@ static svn_error_t *ra_svn_change_rev_prop(svn_ra_session_t *session, svn_revnum
}
if (has_atomic_revprops)
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "change-rev-prop2", "rc(?s)(b?s)",
- rev, name, value, dont_care, old_value));
+ SVN_ERR(svn_ra_svn__write_cmd_change_rev_prop2(conn, pool, rev, name,
+ value, dont_care,
+ old_value));
else
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "change-rev-prop", "rc?s",
- rev, name, value));
+ SVN_ERR(svn_ra_svn__write_cmd_change_rev_prop(conn, pool, rev, name,
+ value));
SVN_ERR(handle_auth_request(sess_baton, pool));
- SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, ""));
+ SVN_ERR(svn_ra_svn__read_cmd_response(conn, pool, ""));
return SVN_NO_ERROR;
}
@@ -900,10 +921,10 @@ static svn_error_t *ra_svn_rev_proplist(svn_ra_session_t *session, svn_revnum_t
svn_ra_svn_conn_t *conn = sess_baton->conn;
apr_array_header_t *proplist;
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "rev-proplist", "r", rev));
+ SVN_ERR(svn_ra_svn__write_cmd_rev_proplist(conn, pool, rev));
SVN_ERR(handle_auth_request(sess_baton, pool));
- SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, "l", &proplist));
- SVN_ERR(svn_ra_svn_parse_proplist(proplist, pool, props));
+ SVN_ERR(svn_ra_svn__read_cmd_response(conn, pool, "l", &proplist));
+ SVN_ERR(svn_ra_svn__parse_proplist(proplist, pool, props));
return SVN_NO_ERROR;
}
@@ -914,9 +935,9 @@ static svn_error_t *ra_svn_rev_prop(svn_ra_session_t *session, svn_revnum_t rev,
svn_ra_svn__session_baton_t *sess_baton = session->priv;
svn_ra_svn_conn_t *conn = sess_baton->conn;
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "rev-prop", "rc", rev, name));
+ SVN_ERR(svn_ra_svn__write_cmd_rev_prop(conn, pool, rev, name));
SVN_ERR(handle_auth_request(sess_baton, pool));
- SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, "(?s)", value));
+ SVN_ERR(svn_ra_svn__read_cmd_response(conn, pool, "(?s)", value));
return SVN_NO_ERROR;
}
@@ -926,8 +947,8 @@ static svn_error_t *ra_svn_end_commit(void *baton)
svn_commit_info_t *commit_info = svn_create_commit_info(ccb->pool);
SVN_ERR(handle_auth_request(ccb->sess_baton, ccb->pool));
- SVN_ERR(svn_ra_svn_read_tuple(ccb->sess_baton->conn, ccb->pool,
- "r(?c)(?c)?(?c)",
+ SVN_ERR(svn_ra_svn__read_tuple(ccb->sess_baton->conn, ccb->pool,
+ "r(?c)(?c)?(?c)",
&(commit_info->revision),
&(commit_info->date),
&(commit_info->author),
@@ -954,9 +975,30 @@ static svn_error_t *ra_svn_commit(svn_ra_session_t *session,
ra_svn_commit_callback_baton_t *ccb;
apr_hash_index_t *hi;
apr_pool_t *iterpool;
- const svn_string_t *log_msg = apr_hash_get(revprop_table,
- SVN_PROP_REVISION_LOG,
- APR_HASH_KEY_STRING);
+ const svn_string_t *log_msg = svn_hash_gets(revprop_table,
+ SVN_PROP_REVISION_LOG);
+
+ if (log_msg == NULL &&
+ ! svn_ra_svn_has_capability(conn, SVN_RA_SVN_CAP_COMMIT_REVPROPS))
+ {
+ return svn_error_createf(SVN_ERR_BAD_PROPERTY_VALUE, NULL,
+ _("ra_svn does not support not specifying "
+ "a log message with pre-1.5 servers; "
+ "consider passing an empty one, or upgrading "
+ "the server"));
+ }
+ else if (log_msg == NULL)
+ /* 1.5+ server. Set LOG_MSG to something, since the 'logmsg' argument
+ to the 'commit' protocol command is non-optional; on the server side,
+ only REVPROP_TABLE will be used, and LOG_MSG will be ignored. The
+ "svn:log" member of REVPROP_TABLE table is NULL, therefore the commit
+ will have a NULL log message (not just "", really NULL).
+
+ svnserve 1.5.x+ has always ignored LOG_MSG when REVPROP_TABLE was
+ present; this was elevated to a protocol promise in r1498550 (and
+ later documented in this comment) in order to fix the segmentation
+ fault bug described in the log message of r1498550.*/
+ log_msg = svn_string_create("", pool);
/* If we're sending revprops other than svn:log, make sure the server won't
silently ignore them. */
@@ -966,11 +1008,22 @@ static svn_error_t *ra_svn_commit(svn_ra_session_t *session,
_("Server doesn't support setting arbitrary "
"revision properties during commit"));
+ /* If the server supports ephemeral txnprops, add the one that
+ reports the client's version level string. */
+ if (svn_ra_svn_has_capability(conn, SVN_RA_SVN_CAP_COMMIT_REVPROPS) &&
+ svn_ra_svn_has_capability(conn, SVN_RA_SVN_CAP_EPHEMERAL_TXNPROPS))
+ {
+ svn_hash_sets(revprop_table, SVN_PROP_TXN_CLIENT_COMPAT_VERSION,
+ svn_string_create(SVN_VER_NUMBER, pool));
+ svn_hash_sets(revprop_table, SVN_PROP_TXN_USER_AGENT,
+ svn_string_create(sess_baton->useragent, pool));
+ }
+
/* Tell the server we're starting the commit.
Send log message here for backwards compatibility with servers
before 1.5. */
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w(c(!", "commit",
- log_msg->data));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "w(c(!", "commit",
+ log_msg->data));
if (lock_tokens)
{
iterpool = svn_pool_create(pool);
@@ -984,20 +1037,21 @@ static svn_error_t *ra_svn_commit(svn_ra_session_t *session,
apr_hash_this(hi, &key, NULL, &val);
path = key;
token = val;
- SVN_ERR(svn_ra_svn_write_tuple(conn, iterpool, "cc", path, token));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, iterpool, "cc", path, token));
}
svn_pool_destroy(iterpool);
}
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!)b(!", keep_locks));
- SVN_ERR(svn_ra_svn_write_proplist(conn, pool, revprop_table));
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!))"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!)b(!", keep_locks));
+ SVN_ERR(svn_ra_svn__write_proplist(conn, pool, revprop_table));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!))"));
SVN_ERR(handle_auth_request(sess_baton, pool));
- SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, ""));
+ SVN_ERR(svn_ra_svn__read_cmd_response(conn, pool, ""));
/* Remember a few arguments for when the commit is over. */
ccb = apr_palloc(pool, sizeof(*ccb));
ccb->sess_baton = sess_baton;
ccb->pool = pool;
+ ccb->new_rev = NULL;
ccb->callback = callback;
ccb->callback_baton = callback_baton;
@@ -1009,6 +1063,79 @@ static svn_error_t *ra_svn_commit(svn_ra_session_t *session,
return SVN_NO_ERROR;
}
+/* Parse IPROPLIST, an array of svn_ra_svn_item_t structures, as a list of
+ const char * repos relative paths and properties for those paths, storing
+ the result as an array of svn_prop_inherited_item_t *items. */
+static svn_error_t *
+parse_iproplist(apr_array_header_t **inherited_props,
+ const apr_array_header_t *iproplist,
+ svn_ra_session_t *session,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+
+{
+ int i;
+ const char *repos_root_url;
+ apr_pool_t *iterpool;
+
+ if (iproplist == NULL)
+ {
+ /* If the server doesn't have the SVN_RA_CAPABILITY_INHERITED_PROPS
+ capability we shouldn't be asking for inherited props, but if we
+ did and the server sent back nothing then we'll want to handle
+ that. */
+ *inherited_props = NULL;
+ return SVN_NO_ERROR;
+ }
+
+ SVN_ERR(ra_svn_get_repos_root(session, &repos_root_url, scratch_pool));
+
+ *inherited_props = apr_array_make(
+ result_pool, iproplist->nelts, sizeof(svn_prop_inherited_item_t *));
+
+ iterpool = svn_pool_create(scratch_pool);
+
+ for (i = 0; i < iproplist->nelts; i++)
+ {
+ apr_array_header_t *iprop_list;
+ char *parent_rel_path;
+ apr_hash_t *iprops;
+ apr_hash_index_t *hi;
+ svn_prop_inherited_item_t *new_iprop =
+ apr_palloc(result_pool, sizeof(*new_iprop));
+ svn_ra_svn_item_t *elt = &APR_ARRAY_IDX(iproplist, i,
+ svn_ra_svn_item_t);
+ if (elt->kind != SVN_RA_SVN_LIST)
+ return svn_error_create(
+ SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
+ _("Inherited proplist element not a list"));
+
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(svn_ra_svn__parse_tuple(elt->u.list, iterpool, "cl",
+ &parent_rel_path, &iprop_list));
+ SVN_ERR(svn_ra_svn__parse_proplist(iprop_list, iterpool, &iprops));
+ new_iprop->path_or_url = svn_path_url_add_component2(repos_root_url,
+ parent_rel_path,
+ result_pool);
+ new_iprop->prop_hash = apr_hash_make(result_pool);
+ for (hi = apr_hash_first(iterpool, iprops);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ const char *name = svn__apr_hash_index_key(hi);
+ svn_string_t *value = svn__apr_hash_index_val(hi);
+ svn_hash_sets(new_iprop->prop_hash,
+ apr_pstrdup(result_pool, name),
+ svn_string_dup(value, result_pool));
+ }
+ APR_ARRAY_PUSH(*inherited_props, svn_prop_inherited_item_t *) =
+ new_iprop;
+ }
+ svn_pool_destroy(iterpool);
+ return SVN_NO_ERROR;
+}
+
static svn_error_t *ra_svn_get_file(svn_ra_session_t *session, const char *path,
svn_revnum_t rev, svn_stream_t *stream,
svn_revnum_t *fetched_rev,
@@ -1023,17 +1150,17 @@ static svn_error_t *ra_svn_get_file(svn_ra_session_t *session, const char *path,
svn_checksum_ctx_t *checksum_ctx;
apr_pool_t *iterpool;
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "get-file", "c(?r)bb", path,
- rev, (props != NULL), (stream != NULL)));
+ SVN_ERR(svn_ra_svn__write_cmd_get_file(conn, pool, path, rev,
+ (props != NULL), (stream != NULL)));
SVN_ERR(handle_auth_request(sess_baton, pool));
- SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, "(?c)rl",
- &expected_digest,
- &rev, &proplist));
+ SVN_ERR(svn_ra_svn__read_cmd_response(conn, pool, "(?c)rl",
+ &expected_digest,
+ &rev, &proplist));
if (fetched_rev)
*fetched_rev = rev;
if (props)
- SVN_ERR(svn_ra_svn_parse_proplist(proplist, pool, props));
+ SVN_ERR(svn_ra_svn__parse_proplist(proplist, pool, props));
/* We're done if the contents weren't wanted. */
if (!stream)
@@ -1053,7 +1180,7 @@ static svn_error_t *ra_svn_get_file(svn_ra_session_t *session, const char *path,
svn_ra_svn_item_t *item;
svn_pool_clear(iterpool);
- SVN_ERR(svn_ra_svn_read_item(conn, iterpool, &item));
+ SVN_ERR(svn_ra_svn__read_item(conn, iterpool, &item));
if (item->kind != SVN_RA_SVN_STRING)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Non-string as part of file contents"));
@@ -1069,7 +1196,7 @@ static svn_error_t *ra_svn_get_file(svn_ra_session_t *session, const char *path,
}
svn_pool_destroy(iterpool);
- SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, ""));
+ SVN_ERR(svn_ra_svn__read_cmd_response(conn, pool, ""));
if (expected_checksum)
{
@@ -1099,31 +1226,31 @@ static svn_error_t *ra_svn_get_dir(svn_ra_session_t *session,
apr_array_header_t *proplist, *dirlist;
int i;
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w(c(?r)bb(!", "get-dir", path,
- rev, (props != NULL), (dirents != NULL)));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "w(c(?r)bb(!", "get-dir", path,
+ rev, (props != NULL), (dirents != NULL)));
if (dirent_fields & SVN_DIRENT_KIND)
- SVN_ERR(svn_ra_svn_write_word(conn, pool, SVN_RA_SVN_DIRENT_KIND));
+ SVN_ERR(svn_ra_svn__write_word(conn, pool, SVN_RA_SVN_DIRENT_KIND));
if (dirent_fields & SVN_DIRENT_SIZE)
- SVN_ERR(svn_ra_svn_write_word(conn, pool, SVN_RA_SVN_DIRENT_SIZE));
+ SVN_ERR(svn_ra_svn__write_word(conn, pool, SVN_RA_SVN_DIRENT_SIZE));
if (dirent_fields & SVN_DIRENT_HAS_PROPS)
- SVN_ERR(svn_ra_svn_write_word(conn, pool, SVN_RA_SVN_DIRENT_HAS_PROPS));
+ SVN_ERR(svn_ra_svn__write_word(conn, pool, SVN_RA_SVN_DIRENT_HAS_PROPS));
if (dirent_fields & SVN_DIRENT_CREATED_REV)
- SVN_ERR(svn_ra_svn_write_word(conn, pool, SVN_RA_SVN_DIRENT_CREATED_REV));
+ SVN_ERR(svn_ra_svn__write_word(conn, pool, SVN_RA_SVN_DIRENT_CREATED_REV));
if (dirent_fields & SVN_DIRENT_TIME)
- SVN_ERR(svn_ra_svn_write_word(conn, pool, SVN_RA_SVN_DIRENT_TIME));
+ SVN_ERR(svn_ra_svn__write_word(conn, pool, SVN_RA_SVN_DIRENT_TIME));
if (dirent_fields & SVN_DIRENT_LAST_AUTHOR)
- SVN_ERR(svn_ra_svn_write_word(conn, pool, SVN_RA_SVN_DIRENT_LAST_AUTHOR));
+ SVN_ERR(svn_ra_svn__write_word(conn, pool, SVN_RA_SVN_DIRENT_LAST_AUTHOR));
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!))"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!))"));
SVN_ERR(handle_auth_request(sess_baton, pool));
- SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, "rll", &rev, &proplist,
- &dirlist));
+ SVN_ERR(svn_ra_svn__read_cmd_response(conn, pool, "rll", &rev, &proplist,
+ &dirlist));
if (fetched_rev)
*fetched_rev = rev;
if (props)
- SVN_ERR(svn_ra_svn_parse_proplist(proplist, pool, props));
+ SVN_ERR(svn_ra_svn__parse_proplist(proplist, pool, props));
/* We're done if dirents aren't wanted. */
if (!dirents)
@@ -1143,11 +1270,11 @@ static svn_error_t *ra_svn_get_dir(svn_ra_session_t *session,
if (elt->kind != SVN_RA_SVN_LIST)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Dirlist element not a list"));
- SVN_ERR(svn_ra_svn_parse_tuple(elt->u.list, pool, "cwnbr(?c)(?c)",
- &name, &kind, &size, &has_props,
- &crev, &cdate, &cauthor));
+ SVN_ERR(svn_ra_svn__parse_tuple(elt->u.list, pool, "cwnbr(?c)(?c)",
+ &name, &kind, &size, &has_props,
+ &crev, &cdate, &cauthor));
name = svn_relpath_canonicalize(name, pool);
- dirent = apr_palloc(pool, sizeof(*dirent));
+ dirent = svn_dirent_create(pool);
dirent->kind = svn_node_kind_from_word(kind);
dirent->size = size;/* FIXME: svn_filesize_t */
dirent->has_props = has_props;
@@ -1165,39 +1292,35 @@ static svn_error_t *ra_svn_get_dir(svn_ra_session_t *session,
else
SVN_ERR(svn_time_from_cstring(&dirent->time, cdate, pool));
dirent->last_author = cauthor;
- apr_hash_set(*dirents, name, APR_HASH_KEY_STRING, dirent);
+ svn_hash_sets(*dirents, name, dirent);
}
return SVN_NO_ERROR;
}
/* Converts a apr_uint64_t with values TRUE, FALSE or
- SVN_RA_SVN_UNSPECIFIED_NUMBER as provided by svn_ra_svn_parse_tuple
+ SVN_RA_SVN_UNSPECIFIED_NUMBER as provided by svn_ra_svn__parse_tuple
to a svn_tristate_t */
static svn_tristate_t
optbool_to_tristate(apr_uint64_t v)
{
- switch (v)
- {
- case TRUE:
- return svn_tristate_true;
- case FALSE:
- return svn_tristate_false;
- default: /* Contains SVN_RA_SVN_UNSPECIFIED_NUMBER */
- return svn_tristate_unknown;
- }
+ if (v == TRUE) /* not just non-zero but exactly equal to 'TRUE' */
+ return svn_tristate_true;
+ if (v == FALSE)
+ return svn_tristate_false;
+
+ return svn_tristate_unknown; /* Contains SVN_RA_SVN_UNSPECIFIED_NUMBER */
}
/* If REVISION is SVN_INVALID_REVNUM, no value is sent to the
server, which defaults to youngest. */
-static svn_error_t *ra_svn_get_mergeinfo(
- svn_ra_session_t *session,
- svn_mergeinfo_catalog_t *catalog,
- const apr_array_header_t *paths,
- svn_revnum_t revision,
- svn_mergeinfo_inheritance_t inherit,
- svn_boolean_t include_descendants,
- apr_pool_t *pool)
+static svn_error_t *ra_svn_get_mergeinfo(svn_ra_session_t *session,
+ svn_mergeinfo_catalog_t *catalog,
+ const apr_array_header_t *paths,
+ svn_revnum_t revision,
+ svn_mergeinfo_inheritance_t inherit,
+ svn_boolean_t include_descendants,
+ apr_pool_t *pool)
{
svn_ra_svn__session_baton_t *sess_baton = session->priv;
svn_ra_svn_conn_t *conn = sess_baton->conn;
@@ -1206,18 +1329,18 @@ static svn_error_t *ra_svn_get_mergeinfo(
svn_ra_svn_item_t *elt;
const char *path;
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w((!", "get-mergeinfo"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "w((!", "get-mergeinfo"));
for (i = 0; i < paths->nelts; i++)
{
path = APR_ARRAY_IDX(paths, i, const char *);
- SVN_ERR(svn_ra_svn_write_cstring(conn, pool, path));
+ SVN_ERR(svn_ra_svn__write_cstring(conn, pool, path));
}
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!)(?r)wb)", revision,
- svn_inheritance_to_word(inherit),
- include_descendants));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!)(?r)wb)", revision,
+ svn_inheritance_to_word(inherit),
+ include_descendants));
SVN_ERR(handle_auth_request(sess_baton, pool));
- SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, "l", &mergeinfo_tuple));
+ SVN_ERR(svn_ra_svn__read_cmd_response(conn, pool, "l", &mergeinfo_tuple));
*catalog = NULL;
if (mergeinfo_tuple->nelts > 0)
@@ -1232,13 +1355,12 @@ static svn_error_t *ra_svn_get_mergeinfo(
if (elt->kind != SVN_RA_SVN_LIST)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Mergeinfo element is not a list"));
- SVN_ERR(svn_ra_svn_parse_tuple(elt->u.list, pool, "cc",
- &path, &to_parse));
+ SVN_ERR(svn_ra_svn__parse_tuple(elt->u.list, pool, "cc",
+ &path, &to_parse));
SVN_ERR(svn_mergeinfo_parse(&for_path, to_parse, pool));
/* Correct for naughty servers that send "relative" paths
with leading slashes! */
- apr_hash_set(*catalog, path[0] == '/' ? path + 1 : path,
- APR_HASH_KEY_STRING, for_path);
+ svn_hash_sets(*catalog, path[0] == '/' ? path + 1 :path, for_path);
}
}
@@ -1250,17 +1372,20 @@ static svn_error_t *ra_svn_update(svn_ra_session_t *session,
void **report_baton, svn_revnum_t rev,
const char *target, svn_depth_t depth,
svn_boolean_t send_copyfrom_args,
+ svn_boolean_t ignore_ancestry,
const svn_delta_editor_t *update_editor,
- void *update_baton, apr_pool_t *pool)
+ void *update_baton,
+ apr_pool_t *pool,
+ apr_pool_t *scratch_pool)
{
svn_ra_svn__session_baton_t *sess_baton = session->priv;
svn_ra_svn_conn_t *conn = sess_baton->conn;
svn_boolean_t recurse = DEPTH_TO_RECURSE(depth);
/* Tell the server we want to start an update. */
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "update", "(?r)cbwb", rev, target,
- recurse, svn_depth_to_word(depth),
- send_copyfrom_args));
+ SVN_ERR(svn_ra_svn__write_cmd_update(conn, pool, rev, target, recurse,
+ depth, send_copyfrom_args,
+ ignore_ancestry));
SVN_ERR(handle_auth_request(sess_baton, pool));
/* Fetch a reporter for the caller to drive. The reporter will drive
@@ -1270,22 +1395,28 @@ static svn_error_t *ra_svn_update(svn_ra_session_t *session,
return SVN_NO_ERROR;
}
-static svn_error_t *ra_svn_switch(svn_ra_session_t *session,
- const svn_ra_reporter3_t **reporter,
- void **report_baton, svn_revnum_t rev,
- const char *target, svn_depth_t depth,
- const char *switch_url,
- const svn_delta_editor_t *update_editor,
- void *update_baton, apr_pool_t *pool)
+static svn_error_t *
+ra_svn_switch(svn_ra_session_t *session,
+ const svn_ra_reporter3_t **reporter,
+ void **report_baton, svn_revnum_t rev,
+ const char *target, svn_depth_t depth,
+ const char *switch_url,
+ svn_boolean_t send_copyfrom_args,
+ svn_boolean_t ignore_ancestry,
+ const svn_delta_editor_t *update_editor,
+ void *update_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
+ apr_pool_t *pool = result_pool;
svn_ra_svn__session_baton_t *sess_baton = session->priv;
svn_ra_svn_conn_t *conn = sess_baton->conn;
svn_boolean_t recurse = DEPTH_TO_RECURSE(depth);
/* Tell the server we want to start a switch. */
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "switch", "(?r)cbcw", rev,
- target, recurse, switch_url,
- svn_depth_to_word(depth)));
+ SVN_ERR(svn_ra_svn__write_cmd_switch(conn, pool, rev, target, recurse,
+ switch_url, depth,
+ send_copyfrom_args, ignore_ancestry));
SVN_ERR(handle_auth_request(sess_baton, pool));
/* Fetch a reporter for the caller to drive. The reporter will drive
@@ -1308,9 +1439,8 @@ static svn_error_t *ra_svn_status(svn_ra_session_t *session,
svn_boolean_t recurse = DEPTH_TO_RECURSE(depth);
/* Tell the server we want to start a status operation. */
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "status", "cb(?r)w",
- target, recurse, rev,
- svn_depth_to_word(depth)));
+ SVN_ERR(svn_ra_svn__write_cmd_status(conn, pool, target, recurse, rev,
+ depth));
SVN_ERR(handle_auth_request(sess_baton, pool));
/* Fetch a reporter for the caller to drive. The reporter will drive
@@ -1336,10 +1466,9 @@ static svn_error_t *ra_svn_diff(svn_ra_session_t *session,
svn_boolean_t recurse = DEPTH_TO_RECURSE(depth);
/* Tell the server we want to start a diff. */
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "diff", "(?r)cbbcbw", rev,
- target, recurse, ignore_ancestry,
- versus_url, text_deltas,
- svn_depth_to_word(depth)));
+ SVN_ERR(svn_ra_svn__write_cmd_diff(conn, pool, rev, target, recurse,
+ ignore_ancestry, versus_url,
+ text_deltas, depth));
SVN_ERR(handle_auth_request(sess_baton, pool));
/* Fetch a reporter for the caller to drive. The reporter will drive
@@ -1350,16 +1479,19 @@ static svn_error_t *ra_svn_diff(svn_ra_session_t *session,
}
-static svn_error_t *ra_svn_log(svn_ra_session_t *session,
- const apr_array_header_t *paths,
- svn_revnum_t start, svn_revnum_t end,
- int limit,
- svn_boolean_t discover_changed_paths,
- svn_boolean_t strict_node_history,
- svn_boolean_t include_merged_revisions,
- const apr_array_header_t *revprops,
- svn_log_entry_receiver_t receiver,
- void *receiver_baton, apr_pool_t *pool)
+static svn_error_t *
+perform_ra_svn_log(svn_error_t **outer_error,
+ svn_ra_session_t *session,
+ const apr_array_header_t *paths,
+ svn_revnum_t start, svn_revnum_t end,
+ int limit,
+ svn_boolean_t discover_changed_paths,
+ svn_boolean_t strict_node_history,
+ svn_boolean_t include_merged_revisions,
+ const apr_array_header_t *revprops,
+ svn_log_entry_receiver_t receiver,
+ void *receiver_baton,
+ apr_pool_t *pool)
{
svn_ra_svn__session_baton_t *sess_baton = session->priv;
svn_ra_svn_conn_t *conn = sess_baton->conn;
@@ -1370,38 +1502,38 @@ static svn_error_t *ra_svn_log(svn_ra_session_t *session,
char *name;
svn_boolean_t want_custom_revprops;
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w((!", "log"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "w((!", "log"));
if (paths)
{
for (i = 0; i < paths->nelts; i++)
{
path = APR_ARRAY_IDX(paths, i, const char *);
- SVN_ERR(svn_ra_svn_write_cstring(conn, pool, path));
+ SVN_ERR(svn_ra_svn__write_cstring(conn, pool, path));
}
}
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!)(?r)(?r)bbnb!", start, end,
- discover_changed_paths, strict_node_history,
- (apr_uint64_t) limit,
- include_merged_revisions));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!)(?r)(?r)bbnb!", start, end,
+ discover_changed_paths, strict_node_history,
+ (apr_uint64_t) limit,
+ include_merged_revisions));
if (revprops)
{
want_custom_revprops = FALSE;
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!w(!", "revprops"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!w(!", "revprops"));
for (i = 0; i < revprops->nelts; i++)
{
name = APR_ARRAY_IDX(revprops, i, char *);
- SVN_ERR(svn_ra_svn_write_cstring(conn, pool, name));
+ SVN_ERR(svn_ra_svn__write_cstring(conn, pool, name));
if (!want_custom_revprops
&& strcmp(name, SVN_PROP_REVISION_AUTHOR) != 0
&& strcmp(name, SVN_PROP_REVISION_DATE) != 0
&& strcmp(name, SVN_PROP_REVISION_LOG) != 0)
want_custom_revprops = TRUE;
}
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!))"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!))"));
}
else
{
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!w())", "all-revprops"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!w())", "all-revprops"));
want_custom_revprops = TRUE;
}
@@ -1425,19 +1557,19 @@ static svn_error_t *ra_svn_log(svn_ra_session_t *session,
int nreceived;
svn_pool_clear(iterpool);
- SVN_ERR(svn_ra_svn_read_item(conn, iterpool, &item));
+ SVN_ERR(svn_ra_svn__read_item(conn, iterpool, &item));
if (item->kind == SVN_RA_SVN_WORD && strcmp(item->u.word, "done") == 0)
break;
if (item->kind != SVN_RA_SVN_LIST)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Log entry not a list"));
- SVN_ERR(svn_ra_svn_parse_tuple(item->u.list, iterpool,
- "lr(?s)(?s)(?s)?BBnl?B",
- &cplist, &rev, &author, &date,
- &message, &has_children_param,
- &invalid_revnum_param,
- &revprop_count, &rplist,
- &has_subtractive_merge_param));
+ SVN_ERR(svn_ra_svn__parse_tuple(item->u.list, iterpool,
+ "lr(?s)(?s)(?s)?BBnl?B",
+ &cplist, &rev, &author, &date,
+ &message, &has_children_param,
+ &invalid_revnum_param,
+ &revprop_count, &rplist,
+ &has_subtractive_merge_param));
if (want_custom_revprops && rplist == NULL)
{
/* Caller asked for custom revprops, but server is too old. */
@@ -1478,11 +1610,11 @@ static svn_error_t *ra_svn_log(svn_ra_session_t *session,
if (elt->kind != SVN_RA_SVN_LIST)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Changed-path entry not a list"));
- SVN_ERR(svn_ra_svn_parse_tuple(elt->u.list, iterpool,
- "cw(?cr)?(?c?BB)",
- &cpath, &action, &copy_path,
- &copy_rev, &kind_str,
- &text_mods, &prop_mods));
+ SVN_ERR(svn_ra_svn__parse_tuple(elt->u.list, iterpool,
+ "cw(?cr)?(?c?BB)",
+ &cpath, &action, &copy_path,
+ &copy_rev, &kind_str,
+ &text_mods, &prop_mods));
cpath = svn_fspath__canonicalize(cpath, iterpool);
if (copy_path)
copy_path = svn_fspath__canonicalize(copy_path, iterpool);
@@ -1493,15 +1625,17 @@ static svn_error_t *ra_svn_log(svn_ra_session_t *session,
change->node_kind = svn_node_kind_from_word(kind_str);
change->text_modified = optbool_to_tristate(text_mods);
change->props_modified = optbool_to_tristate(prop_mods);
- apr_hash_set(cphash, cpath, APR_HASH_KEY_STRING, change);
+ svn_hash_sets(cphash, cpath, change);
}
}
else
cphash = NULL;
nreceived = 0;
- if (! (limit && (nest_level == 0) && (++nreceived > limit)))
+ if (! (limit && (nest_level == 0) && (++nreceived > limit))
+ && ! *outer_error)
{
+ svn_error_t *err;
log_entry = svn_log_entry_create(iterpool);
log_entry->changed_paths = cphash;
@@ -1510,22 +1644,22 @@ static svn_error_t *ra_svn_log(svn_ra_session_t *session,
log_entry->has_children = has_children;
log_entry->subtractive_merge = subtractive_merge;
if (rplist)
- SVN_ERR(svn_ra_svn_parse_proplist(rplist, pool,
- &log_entry->revprops));
+ SVN_ERR(svn_ra_svn__parse_proplist(rplist, iterpool,
+ &log_entry->revprops));
if (log_entry->revprops == NULL)
- log_entry->revprops = apr_hash_make(pool);
+ log_entry->revprops = apr_hash_make(iterpool);
if (revprops == NULL)
{
/* Caller requested all revprops; set author/date/log. */
if (author)
- apr_hash_set(log_entry->revprops, SVN_PROP_REVISION_AUTHOR,
- APR_HASH_KEY_STRING, author);
+ svn_hash_sets(log_entry->revprops, SVN_PROP_REVISION_AUTHOR,
+ author);
if (date)
- apr_hash_set(log_entry->revprops, SVN_PROP_REVISION_DATE,
- APR_HASH_KEY_STRING, date);
+ svn_hash_sets(log_entry->revprops, SVN_PROP_REVISION_DATE,
+ date);
if (message)
- apr_hash_set(log_entry->revprops, SVN_PROP_REVISION_LOG,
- APR_HASH_KEY_STRING, message);
+ svn_hash_sets(log_entry->revprops, SVN_PROP_REVISION_LOG,
+ message);
}
else
{
@@ -1534,17 +1668,25 @@ static svn_error_t *ra_svn_log(svn_ra_session_t *session,
{
name = APR_ARRAY_IDX(revprops, i, char *);
if (author && strcmp(name, SVN_PROP_REVISION_AUTHOR) == 0)
- apr_hash_set(log_entry->revprops, SVN_PROP_REVISION_AUTHOR,
- APR_HASH_KEY_STRING, author);
+ svn_hash_sets(log_entry->revprops,
+ SVN_PROP_REVISION_AUTHOR, author);
if (date && strcmp(name, SVN_PROP_REVISION_DATE) == 0)
- apr_hash_set(log_entry->revprops, SVN_PROP_REVISION_DATE,
- APR_HASH_KEY_STRING, date);
+ svn_hash_sets(log_entry->revprops,
+ SVN_PROP_REVISION_DATE, date);
if (message && strcmp(name, SVN_PROP_REVISION_LOG) == 0)
- apr_hash_set(log_entry->revprops, SVN_PROP_REVISION_LOG,
- APR_HASH_KEY_STRING, message);
+ svn_hash_sets(log_entry->revprops,
+ SVN_PROP_REVISION_LOG, message);
}
}
- SVN_ERR(receiver(receiver_baton, log_entry, iterpool));
+ err = receiver(receiver_baton, log_entry, iterpool);
+ if (err && err->apr_err == SVN_ERR_CEASE_INVOCATION)
+ {
+ *outer_error = svn_error_trace(
+ svn_error_compose_create(*outer_error, err));
+ }
+ else
+ SVN_ERR(err);
+
if (log_entry->has_children)
{
nest_level++;
@@ -1559,9 +1701,40 @@ static svn_error_t *ra_svn_log(svn_ra_session_t *session,
svn_pool_destroy(iterpool);
/* Read the response. */
- return svn_ra_svn_read_cmd_response(conn, pool, "");
+ return svn_error_trace(svn_ra_svn__read_cmd_response(conn, pool, ""));
}
+static svn_error_t *
+ra_svn_log(svn_ra_session_t *session,
+ const apr_array_header_t *paths,
+ svn_revnum_t start, svn_revnum_t end,
+ int limit,
+ svn_boolean_t discover_changed_paths,
+ svn_boolean_t strict_node_history,
+ svn_boolean_t include_merged_revisions,
+ const apr_array_header_t *revprops,
+ svn_log_entry_receiver_t receiver,
+ void *receiver_baton, apr_pool_t *pool)
+{
+ svn_error_t *outer_error = NULL;
+ svn_error_t *err;
+
+ err = svn_error_trace(perform_ra_svn_log(&outer_error,
+ session, paths,
+ start, end,
+ limit,
+ discover_changed_paths,
+ strict_node_history,
+ include_merged_revisions,
+ revprops,
+ receiver, receiver_baton,
+ pool));
+ return svn_error_trace(
+ svn_error_compose_create(outer_error,
+ err));
+}
+
+
static svn_error_t *ra_svn_check_path(svn_ra_session_t *session,
const char *path, svn_revnum_t rev,
@@ -1571,9 +1744,9 @@ static svn_error_t *ra_svn_check_path(svn_ra_session_t *session,
svn_ra_svn_conn_t *conn = sess_baton->conn;
const char *kind_word;
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "check-path", "c(?r)", path, rev));
+ SVN_ERR(svn_ra_svn__write_cmd_check_path(conn, pool, path, rev));
SVN_ERR(handle_auth_request(sess_baton, pool));
- SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, "w", &kind_word));
+ SVN_ERR(svn_ra_svn__read_cmd_response(conn, pool, "w", &kind_word));
*kind = svn_node_kind_from_word(kind_word);
return SVN_NO_ERROR;
}
@@ -1586,7 +1759,7 @@ static svn_error_t *handle_unsupported_cmd(svn_error_t *err,
{
if (err && err->apr_err == SVN_ERR_RA_SVN_UNKNOWN_CMD)
return svn_error_create(SVN_ERR_RA_NOT_IMPLEMENTED, err,
- msg);
+ _(msg));
return err;
}
@@ -1600,12 +1773,10 @@ static svn_error_t *ra_svn_stat(svn_ra_session_t *session,
apr_array_header_t *list = NULL;
svn_dirent_t *the_dirent;
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "stat", "c(?r)", path, rev));
-
+ SVN_ERR(svn_ra_svn__write_cmd_stat(conn, pool, path, rev));
SVN_ERR(handle_unsupported_cmd(handle_auth_request(sess_baton, pool),
- _("'stat' not implemented")));
-
- SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, "(?l)", &list));
+ N_("'stat' not implemented")));
+ SVN_ERR(svn_ra_svn__read_cmd_response(conn, pool, "(?l)", &list));
if (! list)
{
@@ -1618,11 +1789,11 @@ static svn_error_t *ra_svn_stat(svn_ra_session_t *session,
svn_revnum_t crev;
apr_uint64_t size;
- SVN_ERR(svn_ra_svn_parse_tuple(list, pool, "wnbr(?c)(?c)",
- &kind, &size, &has_props,
- &crev, &cdate, &cauthor));
+ SVN_ERR(svn_ra_svn__parse_tuple(list, pool, "wnbr(?c)(?c)",
+ &kind, &size, &has_props,
+ &crev, &cdate, &cauthor));
- the_dirent = apr_palloc(pool, sizeof(*the_dirent));
+ the_dirent = svn_dirent_create(pool);
the_dirent->kind = svn_node_kind_from_word(kind);
the_dirent->size = size;/* FIXME: svn_filesize_t */
the_dirent->has_props = has_props;
@@ -1651,19 +1822,19 @@ static svn_error_t *ra_svn_get_locations(svn_ra_session_t *session,
int i;
/* Transmit the parameters. */
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w(cr(!",
- "get-locations", path, peg_revision));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "w(cr(!",
+ "get-locations", path, peg_revision));
for (i = 0; i < location_revisions->nelts; i++)
{
revision = APR_ARRAY_IDX(location_revisions, i, svn_revnum_t);
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!r!", revision));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!r!", revision));
}
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!))"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!))"));
/* Servers before 1.1 don't support this command. Check for this here. */
SVN_ERR(handle_unsupported_cmd(handle_auth_request(sess_baton, pool),
- _("'get-locations' not implemented")));
+ N_("'get-locations' not implemented")));
/* Read the hash items. */
is_done = FALSE;
@@ -1673,7 +1844,7 @@ static svn_error_t *ra_svn_get_locations(svn_ra_session_t *session,
svn_ra_svn_item_t *item;
const char *ret_path;
- SVN_ERR(svn_ra_svn_read_item(conn, pool, &item));
+ SVN_ERR(svn_ra_svn__read_item(conn, pool, &item));
if (item->kind == SVN_RA_SVN_WORD && strcmp(item->u.word, "done") == 0)
is_done = 1;
else if (item->kind != SVN_RA_SVN_LIST)
@@ -1681,8 +1852,8 @@ static svn_error_t *ra_svn_get_locations(svn_ra_session_t *session,
_("Location entry not a list"));
else
{
- SVN_ERR(svn_ra_svn_parse_tuple(item->u.list, pool, "rc",
- &revision, &ret_path));
+ SVN_ERR(svn_ra_svn__parse_tuple(item->u.list, pool, "rc",
+ &revision, &ret_path));
ret_path = svn_fspath__canonicalize(ret_path, pool);
apr_hash_set(*locations, apr_pmemdup(pool, &revision,
sizeof(revision)),
@@ -1692,7 +1863,7 @@ static svn_error_t *ra_svn_get_locations(svn_ra_session_t *session,
/* Read the response. This is so the server would have a chance to
* report an error. */
- return svn_ra_svn_read_cmd_response(conn, pool, "");
+ return svn_ra_svn__read_cmd_response(conn, pool, "");
}
static svn_error_t *
@@ -1711,13 +1882,14 @@ ra_svn_get_location_segments(svn_ra_session_t *session,
apr_pool_t *iterpool = svn_pool_create(pool);
/* Transmit the parameters. */
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w(c(?r)(?r)(?r))",
- "get-location-segments",
- path, peg_revision, start_rev, end_rev));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "w(c(?r)(?r)(?r))",
+ "get-location-segments",
+ path, peg_revision, start_rev, end_rev));
/* Servers before 1.5 don't support this command. Check for this here. */
SVN_ERR(handle_unsupported_cmd(handle_auth_request(sess_baton, pool),
- _("'get-location-segments' not implemented")));
+ N_("'get-location-segments'"
+ " not implemented")));
/* Parse the response. */
is_done = FALSE;
@@ -1728,7 +1900,7 @@ ra_svn_get_location_segments(svn_ra_session_t *session,
const char *ret_path;
svn_pool_clear(iterpool);
- SVN_ERR(svn_ra_svn_read_item(conn, iterpool, &item));
+ SVN_ERR(svn_ra_svn__read_item(conn, iterpool, &item));
if (item->kind == SVN_RA_SVN_WORD && strcmp(item->u.word, "done") == 0)
is_done = 1;
else if (item->kind != SVN_RA_SVN_LIST)
@@ -1738,8 +1910,8 @@ ra_svn_get_location_segments(svn_ra_session_t *session,
{
svn_location_segment_t *segment = apr_pcalloc(iterpool,
sizeof(*segment));
- SVN_ERR(svn_ra_svn_parse_tuple(item->u.list, iterpool, "rr(?c)",
- &range_start, &range_end, &ret_path));
+ SVN_ERR(svn_ra_svn__parse_tuple(item->u.list, iterpool, "rr(?c)",
+ &range_start, &range_end, &ret_path));
if (! (SVN_IS_VALID_REVNUM(range_start)
&& SVN_IS_VALID_REVNUM(range_end)))
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
@@ -1756,7 +1928,7 @@ ra_svn_get_location_segments(svn_ra_session_t *session,
/* Read the response. This is so the server would have a chance to
* report an error. */
- SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, ""));
+ SVN_ERR(svn_ra_svn__read_cmd_response(conn, pool, ""));
return SVN_NO_ERROR;
}
@@ -1778,13 +1950,13 @@ static svn_error_t *ra_svn_get_file_revs(svn_ra_session_t *session,
rev_pool = svn_pool_create(pool);
chunk_pool = svn_pool_create(pool);
- SVN_ERR(svn_ra_svn_write_cmd(sess_baton->conn, pool, "get-file-revs",
- "c(?r)(?r)b", path, start, end,
- include_merged_revisions));
+ SVN_ERR(svn_ra_svn__write_cmd_get_file_revs(sess_baton->conn, pool,
+ path, start, end,
+ include_merged_revisions));
/* Servers before 1.1 don't support this command. Check for this here. */
SVN_ERR(handle_unsupported_cmd(handle_auth_request(sess_baton, pool),
- _("'get-file-revs' not implemented")));
+ N_("'get-file-revs' not implemented")));
while (1)
{
@@ -1801,7 +1973,7 @@ static svn_error_t *ra_svn_get_file_revs(svn_ra_session_t *session,
svn_pool_clear(rev_pool);
svn_pool_clear(chunk_pool);
- SVN_ERR(svn_ra_svn_read_item(sess_baton->conn, rev_pool, &item));
+ SVN_ERR(svn_ra_svn__read_item(sess_baton->conn, rev_pool, &item));
if (item->kind == SVN_RA_SVN_WORD && strcmp(item->u.word, "done") == 0)
break;
/* Either we've got a correct revision or we will error out below. */
@@ -1810,11 +1982,11 @@ static svn_error_t *ra_svn_get_file_revs(svn_ra_session_t *session,
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Revision entry not a list"));
- SVN_ERR(svn_ra_svn_parse_tuple(item->u.list, rev_pool,
- "crll?B", &p, &rev, &rev_proplist,
- &proplist, &merged_rev_param));
+ SVN_ERR(svn_ra_svn__parse_tuple(item->u.list, rev_pool,
+ "crll?B", &p, &rev, &rev_proplist,
+ &proplist, &merged_rev_param));
p = svn_fspath__canonicalize(p, rev_pool);
- SVN_ERR(svn_ra_svn_parse_proplist(rev_proplist, rev_pool, &rev_props));
+ SVN_ERR(svn_ra_svn__parse_proplist(rev_proplist, rev_pool, &rev_props));
SVN_ERR(parse_prop_diffs(proplist, rev_pool, &props));
if (merged_rev_param == SVN_RA_SVN_UNSPECIFIED_NUMBER)
merged_rev = FALSE;
@@ -1822,7 +1994,7 @@ static svn_error_t *ra_svn_get_file_revs(svn_ra_session_t *session,
merged_rev = (svn_boolean_t) merged_rev_param;
/* Get the first delta chunk so we know if there is a delta. */
- SVN_ERR(svn_ra_svn_read_item(sess_baton->conn, chunk_pool, &item));
+ SVN_ERR(svn_ra_svn__read_item(sess_baton->conn, chunk_pool, &item));
if (item->kind != SVN_RA_SVN_STRING)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Text delta chunk not a string"));
@@ -1851,8 +2023,8 @@ static svn_error_t *ra_svn_get_file_revs(svn_ra_session_t *session,
SVN_ERR(svn_stream_write(stream, item->u.string->data, &size));
svn_pool_clear(chunk_pool);
- SVN_ERR(svn_ra_svn_read_item(sess_baton->conn, chunk_pool,
- &item));
+ SVN_ERR(svn_ra_svn__read_item(sess_baton->conn, chunk_pool,
+ &item));
if (item->kind != SVN_RA_SVN_STRING)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Text delta chunk not a string"));
@@ -1862,7 +2034,7 @@ static svn_error_t *ra_svn_get_file_revs(svn_ra_session_t *session,
}
}
- SVN_ERR(svn_ra_svn_read_cmd_response(sess_baton->conn, pool, ""));
+ SVN_ERR(svn_ra_svn__read_cmd_response(sess_baton->conn, pool, ""));
/* Return error if we didn't get any revisions. */
if (!had_revision)
@@ -1909,16 +2081,15 @@ static svn_error_t *ra_svn_lock_compat(svn_ra_session_t *session,
path = key;
revnum = val;
- SVN_ERR(svn_ra_svn_write_cmd(conn, iterpool, "lock", "c(?c)b(?r)",
- path, comment,
- steal_lock, *revnum));
+ SVN_ERR(svn_ra_svn__write_cmd_lock(conn, iterpool, path, comment,
+ steal_lock, *revnum));
/* Servers before 1.2 doesn't support locking. Check this here. */
SVN_ERR(handle_unsupported_cmd(handle_auth_request(sess, pool),
- _("Server doesn't support "
- "the lock command")));
+ N_("Server doesn't support "
+ "the lock command")));
- err = svn_ra_svn_read_cmd_response(conn, iterpool, "l", &list);
+ err = svn_ra_svn__read_cmd_response(conn, iterpool, "l", &list);
if (!err)
SVN_ERR(parse_lock(list, iterpool, &lock));
@@ -1974,15 +2145,15 @@ static svn_error_t *ra_svn_unlock_compat(svn_ra_session_t *session,
else
token = NULL;
- SVN_ERR(svn_ra_svn_write_cmd(conn, iterpool, "unlock", "c(?c)b",
- path, token, break_lock));
+ SVN_ERR(svn_ra_svn__write_cmd_unlock(conn, iterpool, path, token,
+ break_lock));
/* Servers before 1.2 don't support locking. Check this here. */
SVN_ERR(handle_unsupported_cmd(handle_auth_request(sess, iterpool),
- _("Server doesn't support the unlock "
- "command")));
+ N_("Server doesn't support the unlock "
+ "command")));
- err = svn_ra_svn_read_cmd_response(conn, iterpool, "");
+ err = svn_ra_svn__read_cmd_response(conn, iterpool, "");
if (err && !SVN_ERR_IS_UNLOCK_ERROR(err))
return err;
@@ -2017,8 +2188,8 @@ static svn_error_t *ra_svn_lock(svn_ra_session_t *session,
svn_error_t *err;
apr_pool_t *iterpool = svn_pool_create(pool);
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w((?c)b(!", "lock-many",
- comment, steal_lock));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "w((?c)b(!", "lock-many",
+ comment, steal_lock));
for (hi = apr_hash_first(pool, path_revs); hi; hi = apr_hash_next(hi))
{
@@ -2032,10 +2203,10 @@ static svn_error_t *ra_svn_lock(svn_ra_session_t *session,
path = key;
revnum = val;
- SVN_ERR(svn_ra_svn_write_tuple(conn, iterpool, "c(?r)", path, *revnum));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, iterpool, "c(?r)", path, *revnum));
}
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!))"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!))"));
err = handle_auth_request(sess, pool);
@@ -2066,7 +2237,7 @@ static svn_error_t *ra_svn_lock(svn_ra_session_t *session,
path = key;
svn_pool_clear(iterpool);
- SVN_ERR(svn_ra_svn_read_item(conn, iterpool, &elt));
+ SVN_ERR(svn_ra_svn__read_item(conn, iterpool, &elt));
/* The server might have encountered some sort of fatal error in
the middle of the request list. If this happens, it will
@@ -2079,8 +2250,8 @@ static svn_error_t *ra_svn_lock(svn_ra_session_t *session,
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Lock response not a list"));
- SVN_ERR(svn_ra_svn_parse_tuple(elt->u.list, iterpool, "wl", &status,
- &list));
+ SVN_ERR(svn_ra_svn__parse_tuple(elt->u.list, iterpool, "wl", &status,
+ &list));
if (strcmp(status, "failure") == 0)
err = svn_ra_svn__handle_failure_status(list, iterpool);
@@ -2112,14 +2283,14 @@ static svn_error_t *ra_svn_lock(svn_ra_session_t *session,
{
svn_ra_svn_item_t *elt;
- SVN_ERR(svn_ra_svn_read_item(conn, pool, &elt));
+ SVN_ERR(svn_ra_svn__read_item(conn, pool, &elt));
if (elt->kind != SVN_RA_SVN_WORD || strcmp(elt->u.word, "done") != 0)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Didn't receive end marker for lock "
"responses"));
}
- SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, ""));
+ SVN_ERR(svn_ra_svn__read_cmd_response(conn, pool, ""));
svn_pool_destroy(iterpool);
@@ -2142,8 +2313,8 @@ static svn_error_t *ra_svn_unlock(svn_ra_session_t *session,
svn_error_t *err;
const char *path;
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w(b(!", "unlock-many",
- break_lock));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "w(b(!", "unlock-many",
+ break_lock));
for (hi = apr_hash_first(pool, path_tokens); hi; hi = apr_hash_next(hi))
{
@@ -2160,10 +2331,10 @@ static svn_error_t *ra_svn_unlock(svn_ra_session_t *session,
else
token = NULL;
- SVN_ERR(svn_ra_svn_write_tuple(conn, iterpool, "c(?c)", path, token));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, iterpool, "c(?c)", path, token));
}
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!))"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!))"));
err = handle_auth_request(sess, pool);
@@ -2191,7 +2362,7 @@ static svn_error_t *ra_svn_unlock(svn_ra_session_t *session,
svn_pool_clear(iterpool);
- SVN_ERR(svn_ra_svn_read_item(conn, iterpool, &elt));
+ SVN_ERR(svn_ra_svn__read_item(conn, iterpool, &elt));
/* The server might have encountered some sort of fatal error in
the middle of the request list. If this happens, it will
@@ -2207,14 +2378,14 @@ static svn_error_t *ra_svn_unlock(svn_ra_session_t *session,
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Unlock response not a list"));
- SVN_ERR(svn_ra_svn_parse_tuple(elt->u.list, iterpool, "wl", &status,
- &list));
+ SVN_ERR(svn_ra_svn__parse_tuple(elt->u.list, iterpool, "wl", &status,
+ &list));
if (strcmp(status, "failure") == 0)
err = svn_ra_svn__handle_failure_status(list, iterpool);
else if (strcmp(status, "success") == 0)
{
- SVN_ERR(svn_ra_svn_parse_tuple(list, iterpool, "c", &path));
+ SVN_ERR(svn_ra_svn__parse_tuple(list, iterpool, "c", &path));
err = SVN_NO_ERROR;
}
else
@@ -2239,14 +2410,14 @@ static svn_error_t *ra_svn_unlock(svn_ra_session_t *session,
{
svn_ra_svn_item_t *elt;
- SVN_ERR(svn_ra_svn_read_item(conn, pool, &elt));
+ SVN_ERR(svn_ra_svn__read_item(conn, pool, &elt));
if (elt->kind != SVN_RA_SVN_WORD || strcmp(elt->u.word, "done") != 0)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Didn't receive end marker for unlock "
"responses"));
}
- SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, ""));
+ SVN_ERR(svn_ra_svn__read_cmd_response(conn, pool, ""));
svn_pool_destroy(iterpool);
@@ -2262,14 +2433,14 @@ static svn_error_t *ra_svn_get_lock(svn_ra_session_t *session,
svn_ra_svn_conn_t* conn = sess->conn;
apr_array_header_t *list;
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "get-lock", "c", path));
+ SVN_ERR(svn_ra_svn__write_cmd_get_lock(conn, pool, path));
/* Servers before 1.2 doesn't support locking. Check this here. */
SVN_ERR(handle_unsupported_cmd(handle_auth_request(sess, pool),
- _("Server doesn't support the get-lock "
- "command")));
+ N_("Server doesn't support the get-lock "
+ "command")));
- SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, "(?l)", &list));
+ SVN_ERR(svn_ra_svn__read_cmd_response(conn, pool, "(?l)", &list));
if (list)
SVN_ERR(parse_lock(list, pool, lock));
else
@@ -2288,19 +2459,12 @@ static svn_error_t *path_relative_to_root(svn_ra_session_t *session,
const char *root_url;
SVN_ERR(ra_svn_get_repos_root(session, &root_url, pool));
- if (strcmp(root_url, url) == 0)
- {
- *rel_path = "";
- }
- else
- {
- *rel_path = svn_uri__is_child(root_url, url, pool);
- if (! *rel_path)
- return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
- _("'%s' isn't a child of repository root "
- "URL '%s'"),
- url, root_url);
- }
+ *rel_path = svn_uri_skip_ancestor(root_url, url, pool);
+ if (! *rel_path)
+ return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
+ _("'%s' isn't a child of repository root "
+ "URL '%s'"),
+ url, root_url);
return SVN_NO_ERROR;
}
@@ -2321,15 +2485,14 @@ static svn_error_t *ra_svn_get_locks(svn_ra_session_t *session,
SVN_ERR(path_relative_to_root(session, &abs_path, full_url, pool));
abs_path = svn_fspath__canonicalize(abs_path, pool);
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "get-locks", "c(w)", path,
- svn_depth_to_word(depth)));
+ SVN_ERR(svn_ra_svn__write_cmd_get_locks(conn, pool, path, depth));
/* Servers before 1.2 doesn't support locking. Check this here. */
SVN_ERR(handle_unsupported_cmd(handle_auth_request(sess, pool),
- _("Server doesn't support the get-lock "
- "command")));
+ N_("Server doesn't support the get-lock "
+ "command")));
- SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, "l", &list));
+ SVN_ERR(svn_ra_svn__read_cmd_response(conn, pool, "l", &list));
*locks = apr_hash_make(pool);
@@ -2355,13 +2518,13 @@ static svn_error_t *ra_svn_get_locks(svn_ra_session_t *session,
*/
if ((strcmp(abs_path, lock->path) == 0) || (depth == svn_depth_infinity))
{
- apr_hash_set(*locks, lock->path, APR_HASH_KEY_STRING, lock);
+ svn_hash_sets(*locks, lock->path, lock);
}
else if ((depth == svn_depth_files) || (depth == svn_depth_immediates))
{
- const char *relpath = svn_fspath__is_child(abs_path, lock->path, pool);
+ const char *relpath = svn_fspath__skip_ancestor(abs_path, lock->path);
if (relpath && (svn_path_component_count(relpath) == 1))
- apr_hash_set(*locks, lock->path, APR_HASH_KEY_STRING, lock);
+ svn_hash_sets(*locks, lock->path, lock);
}
}
@@ -2379,17 +2542,17 @@ static svn_error_t *ra_svn_replay(svn_ra_session_t *session,
{
svn_ra_svn__session_baton_t *sess = session->priv;
- SVN_ERR(svn_ra_svn_write_cmd(sess->conn, pool, "replay", "rrb", revision,
- low_water_mark, send_deltas));
+ SVN_ERR(svn_ra_svn__write_cmd_replay(sess->conn, pool, revision,
+ low_water_mark, send_deltas));
SVN_ERR(handle_unsupported_cmd(handle_auth_request(sess, pool),
- _("Server doesn't support the replay "
- "command")));
+ N_("Server doesn't support the replay "
+ "command")));
SVN_ERR(svn_ra_svn_drive_editor2(sess->conn, pool, editor, edit_baton,
NULL, TRUE));
- return svn_ra_svn_read_cmd_response(sess->conn, pool, "");
+ return svn_ra_svn__read_cmd_response(sess->conn, pool, "");
}
@@ -2409,13 +2572,13 @@ ra_svn_replay_range(svn_ra_session_t *session,
svn_revnum_t rev;
svn_boolean_t drive_aborted = FALSE;
- SVN_ERR(svn_ra_svn_write_cmd(sess->conn, pool, "replay-range", "rrrb",
- start_revision, end_revision,
- low_water_mark, send_deltas));
+ SVN_ERR(svn_ra_svn__write_cmd_replay_range(sess->conn, pool,
+ start_revision, end_revision,
+ low_water_mark, send_deltas));
SVN_ERR(handle_unsupported_cmd(handle_auth_request(sess, pool),
- _("Server doesn't support the replay-range "
- "command")));
+ N_("Server doesn't support the "
+ "replay-range command")));
iterpool = svn_pool_create(pool);
for (rev = start_revision; rev <= end_revision; rev++)
@@ -2428,14 +2591,14 @@ ra_svn_replay_range(svn_ra_session_t *session,
svn_pool_clear(iterpool);
- SVN_ERR(svn_ra_svn_read_tuple(sess->conn, iterpool,
- "wl", &word, &list));
+ SVN_ERR(svn_ra_svn__read_tuple(sess->conn, iterpool,
+ "wl", &word, &list));
if (strcmp(word, "revprops") != 0)
return svn_error_createf(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Expected 'revprops', found '%s'"),
word);
- SVN_ERR(svn_ra_svn_parse_proplist(list, iterpool, &rev_props));
+ SVN_ERR(svn_ra_svn__parse_proplist(list, iterpool, &rev_props));
SVN_ERR(revstart_func(rev, replay_baton,
&editor, &edit_baton,
@@ -2458,41 +2621,50 @@ ra_svn_replay_range(svn_ra_session_t *session,
}
svn_pool_destroy(iterpool);
- return svn_ra_svn_read_cmd_response(sess->conn, pool, "");
+ return svn_ra_svn__read_cmd_response(sess->conn, pool, "");
}
-static svn_error_t *ra_svn_has_capability(svn_ra_session_t *session,
- svn_boolean_t *has,
- const char *capability,
- apr_pool_t *pool)
+static svn_error_t *
+ra_svn_has_capability(svn_ra_session_t *session,
+ svn_boolean_t *has,
+ const char *capability,
+ apr_pool_t *pool)
{
svn_ra_svn__session_baton_t *sess = session->priv;
+ static const char* capabilities[][2] =
+ {
+ /* { ra capability string, svn:// wire capability string} */
+ {SVN_RA_CAPABILITY_DEPTH, SVN_RA_SVN_CAP_DEPTH},
+ {SVN_RA_CAPABILITY_MERGEINFO, SVN_RA_SVN_CAP_MERGEINFO},
+ {SVN_RA_CAPABILITY_LOG_REVPROPS, SVN_RA_SVN_CAP_LOG_REVPROPS},
+ {SVN_RA_CAPABILITY_PARTIAL_REPLAY, SVN_RA_SVN_CAP_PARTIAL_REPLAY},
+ {SVN_RA_CAPABILITY_COMMIT_REVPROPS, SVN_RA_SVN_CAP_COMMIT_REVPROPS},
+ {SVN_RA_CAPABILITY_ATOMIC_REVPROPS, SVN_RA_SVN_CAP_ATOMIC_REVPROPS},
+ {SVN_RA_CAPABILITY_INHERITED_PROPS, SVN_RA_SVN_CAP_INHERITED_PROPS},
+ {SVN_RA_CAPABILITY_EPHEMERAL_TXNPROPS,
+ SVN_RA_SVN_CAP_EPHEMERAL_TXNPROPS},
+ {SVN_RA_CAPABILITY_GET_FILE_REVS_REVERSE,
+ SVN_RA_SVN_CAP_GET_FILE_REVS_REVERSE},
+
+ {NULL, NULL} /* End of list marker */
+ };
+ int i;
*has = FALSE;
- if (strcmp(capability, SVN_RA_CAPABILITY_DEPTH) == 0)
- *has = svn_ra_svn_has_capability(sess->conn, SVN_RA_SVN_CAP_DEPTH);
- else if (strcmp(capability, SVN_RA_CAPABILITY_MERGEINFO) == 0)
- *has = svn_ra_svn_has_capability(sess->conn, SVN_RA_SVN_CAP_MERGEINFO);
- else if (strcmp(capability, SVN_RA_CAPABILITY_LOG_REVPROPS) == 0)
- *has = svn_ra_svn_has_capability(sess->conn, SVN_RA_SVN_CAP_LOG_REVPROPS);
- else if (strcmp(capability, SVN_RA_CAPABILITY_PARTIAL_REPLAY) == 0)
- *has = svn_ra_svn_has_capability(sess->conn, SVN_RA_SVN_CAP_PARTIAL_REPLAY);
- else if (strcmp(capability, SVN_RA_CAPABILITY_COMMIT_REVPROPS) == 0)
- *has = svn_ra_svn_has_capability(sess->conn,
- SVN_RA_SVN_CAP_COMMIT_REVPROPS);
- else if (strcmp(capability, SVN_RA_CAPABILITY_ATOMIC_REVPROPS) == 0)
- *has = svn_ra_svn_has_capability(sess->conn,
- SVN_RA_SVN_CAP_ATOMIC_REVPROPS);
- else /* Don't know any other capabilities, so error. */
+ for (i = 0; capabilities[i][0]; i++)
{
- return svn_error_createf
- (SVN_ERR_UNKNOWN_CAPABILITY, NULL,
- _("Don't know anything about capability '%s'"), capability);
+ if (strcmp(capability, capabilities[i][0]) == 0)
+ {
+ *has = svn_ra_svn_has_capability(sess->conn, capabilities[i][1]);
+ return SVN_NO_ERROR;
+ }
}
- return SVN_NO_ERROR;
+ return svn_error_createf(SVN_ERR_UNKNOWN_CAPABILITY, NULL,
+ _("Don't know anything about capability '%s'"),
+ capability);
}
static svn_error_t *
@@ -2508,16 +2680,49 @@ ra_svn_get_deleted_rev(svn_ra_session_t *session,
svn_ra_svn_conn_t *conn = sess_baton->conn;
/* Transmit the parameters. */
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "get-deleted-rev", "crr",
- path, peg_revision, end_revision));
+ SVN_ERR(svn_ra_svn__write_cmd_get_deleted_rev(conn, pool, path,
+ peg_revision, end_revision));
/* Servers before 1.6 don't support this command. Check for this here. */
SVN_ERR(handle_unsupported_cmd(handle_auth_request(sess_baton, pool),
- _("'get-deleted-rev' not implemented")));
+ N_("'get-deleted-rev' not implemented")));
+
+ return svn_ra_svn__read_cmd_response(conn, pool, "r", revision_deleted);
+}
+
+static svn_error_t *
+ra_svn_register_editor_shim_callbacks(svn_ra_session_t *session,
+ svn_delta_shim_callbacks_t *callbacks)
+{
+ svn_ra_svn__session_baton_t *sess_baton = session->priv;
+ svn_ra_svn_conn_t *conn = sess_baton->conn;
+
+ conn->shim_callbacks = callbacks;
- return svn_ra_svn_read_cmd_response(conn, pool, "r", revision_deleted);
+ return SVN_NO_ERROR;
}
+static svn_error_t *
+ra_svn_get_inherited_props(svn_ra_session_t *session,
+ apr_array_header_t **iprops,
+ const char *path,
+ svn_revnum_t revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_ra_svn__session_baton_t *sess_baton = session->priv;
+ svn_ra_svn_conn_t *conn = sess_baton->conn;
+ apr_array_header_t *iproplist;
+
+ SVN_ERR(svn_ra_svn__write_cmd_get_iprops(conn, scratch_pool,
+ path, revision));
+ SVN_ERR(handle_auth_request(sess_baton, scratch_pool));
+ SVN_ERR(svn_ra_svn__read_cmd_response(conn, scratch_pool, "l", &iproplist));
+ SVN_ERR(parse_iproplist(iprops, iproplist, session, result_pool,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
static const svn_ra__vtable_t ra_svn_vtable = {
svn_ra_svn_version,
@@ -2554,7 +2759,9 @@ static const svn_ra__vtable_t ra_svn_vtable = {
ra_svn_replay,
ra_svn_has_capability,
ra_svn_replay_range,
- ra_svn_get_deleted_rev
+ ra_svn_get_deleted_rev,
+ ra_svn_register_editor_shim_callbacks,
+ ra_svn_get_inherited_props
};
svn_error_t *
@@ -2569,7 +2776,7 @@ svn_ra_svn__init(const svn_version_t *loader_version,
{ NULL, NULL }
};
- SVN_ERR(svn_ver_check_list(svn_ra_svn_version(), checklist));
+ SVN_ERR(svn_ver_check_list2(svn_ra_svn_version(), checklist, svn_ver_equal));
/* Simplified version check to make sure we can safely use the
VTABLE parameter. The RA loader does a more exhaustive check. */
diff --git a/subversion/libsvn_ra_svn/cram.c b/subversion/libsvn_ra_svn/cram.c
index 0de85e2..1e54ac8 100644
--- a/subversion/libsvn_ra_svn/cram.c
+++ b/subversion/libsvn_ra_svn/cram.c
@@ -113,8 +113,8 @@ static void compute_digest(unsigned char *digest, const char *challenge,
static svn_error_t *fail(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
const char *msg)
{
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w(c)", "failure", msg));
- return svn_ra_svn_flush(conn, pool);
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "w(c)", "failure", msg));
+ return svn_ra_svn__flush(conn, pool);
}
/* If we can, make the nonce with random bytes. If we can't... well,
@@ -154,10 +154,10 @@ svn_error_t *svn_ra_svn_cram_server(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
challenge = apr_psprintf(pool,
"<%" APR_UINT64_T_FMT ".%" APR_TIME_T_FMT "@%s>",
nonce, apr_time_now(), hostbuf);
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w(c)", "step", challenge));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "w(c)", "step", challenge));
/* Read the client's response and decode it into *user and cdigest. */
- SVN_ERR(svn_ra_svn_read_item(conn, pool, &item));
+ SVN_ERR(svn_ra_svn__read_item(conn, pool, &item));
if (item->kind != SVN_RA_SVN_STRING) /* Very wrong; don't report failure */
return SVN_NO_ERROR;
resp = item->u.string;
@@ -176,7 +176,7 @@ svn_error_t *svn_ra_svn_cram_server(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
return fail(conn, pool, "Password incorrect");
*success = TRUE;
- return svn_ra_svn_write_tuple(conn, pool, "w()", "success");
+ return svn_ra_svn__write_tuple(conn, pool, "w()", "success");
}
svn_error_t *svn_ra_svn__cram_client(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
@@ -188,7 +188,7 @@ svn_error_t *svn_ra_svn__cram_client(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
char hex[2 * APR_MD5_DIGESTSIZE + 1];
/* Read the server challenge. */
- SVN_ERR(svn_ra_svn_read_tuple(conn, pool, "w(?c)", &status, &str));
+ SVN_ERR(svn_ra_svn__read_tuple(conn, pool, "w(?c)", &status, &str));
if (strcmp(status, "failure") == 0 && str)
{
*message = str;
@@ -203,10 +203,10 @@ svn_error_t *svn_ra_svn__cram_client(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
hex_encode(hex, digest);
hex[sizeof(hex) - 1] = '\0';
reply = apr_psprintf(pool, "%s %s", user, hex);
- SVN_ERR(svn_ra_svn_write_cstring(conn, pool, reply));
+ SVN_ERR(svn_ra_svn__write_cstring(conn, pool, reply));
/* Read the success or failure response from the server. */
- SVN_ERR(svn_ra_svn_read_tuple(conn, pool, "w(?c)", &status, &str));
+ SVN_ERR(svn_ra_svn__read_tuple(conn, pool, "w(?c)", &status, &str));
if (strcmp(status, "failure") == 0 && str)
{
*message = str;
diff --git a/subversion/libsvn_ra_svn/cyrus_auth.c b/subversion/libsvn_ra_svn/cyrus_auth.c
index 96e3935..82e33d3 100644
--- a/subversion/libsvn_ra_svn/cyrus_auth.c
+++ b/subversion/libsvn_ra_svn/cyrus_auth.c
@@ -28,8 +28,6 @@
#include <apr_want.h>
#include <apr_general.h>
#include <apr_strings.h>
-#include <apr_atomic.h>
-#include <apr_thread_mutex.h>
#include <apr_version.h>
#include "svn_types.h"
@@ -42,6 +40,7 @@
#include "private/svn_atomic.h"
#include "private/ra_svn_sasl.h"
+#include "private/svn_mutex.h"
#include "ra_svn.h"
@@ -86,72 +85,90 @@ static apr_status_t sasl_done_cb(void *data)
static apr_array_header_t *free_mutexes = NULL;
/* A mutex to serialize access to the array. */
-static apr_thread_mutex_t *array_mutex = NULL;
+static svn_mutex__t *array_mutex = NULL;
/* Callbacks we pass to sasl_set_mutex(). */
+static svn_error_t *
+sasl_mutex_alloc_cb_internal(svn_mutex__t **mutex)
+{
+ if (apr_is_empty_array(free_mutexes))
+ return svn_mutex__init(mutex, TRUE, sasl_pool);
+ else
+ *mutex = *((svn_mutex__t**)apr_array_pop(free_mutexes));
+
+ return SVN_NO_ERROR;
+}
+
static void *sasl_mutex_alloc_cb(void)
{
- apr_thread_mutex_t *mutex;
- apr_status_t apr_err;
+ svn_mutex__t *mutex = NULL;
+ svn_error_t *err;
if (!svn_ra_svn__sasl_status)
return NULL;
- apr_err = apr_thread_mutex_lock(array_mutex);
- if (apr_err != APR_SUCCESS)
- return NULL;
+ err = svn_mutex__lock(array_mutex);
+ if (err)
+ svn_error_clear(err);
+ else
+ svn_error_clear(svn_mutex__unlock(array_mutex,
+ sasl_mutex_alloc_cb_internal(&mutex)));
- if (apr_is_empty_array(free_mutexes))
+ return mutex;
+}
+
+static int check_result(svn_error_t *err)
+{
+ if (err)
{
- apr_err = apr_thread_mutex_create(&mutex,
- APR_THREAD_MUTEX_DEFAULT,
- sasl_pool);
- if (apr_err != APR_SUCCESS)
- mutex = NULL;
+ svn_error_clear(err);
+ return -1;
}
- else
- mutex = *((apr_thread_mutex_t**)apr_array_pop(free_mutexes));
- apr_err = apr_thread_mutex_unlock(array_mutex);
- if (apr_err != APR_SUCCESS)
- return NULL;
-
- return mutex;
+ return 0;
}
static int sasl_mutex_lock_cb(void *mutex)
{
if (!svn_ra_svn__sasl_status)
return 0;
- return (apr_thread_mutex_lock(mutex) == APR_SUCCESS) ? 0 : -1;
+ return check_result(svn_mutex__lock(mutex));
}
static int sasl_mutex_unlock_cb(void *mutex)
{
if (!svn_ra_svn__sasl_status)
return 0;
- return (apr_thread_mutex_unlock(mutex) == APR_SUCCESS) ? 0 : -1;
+ return check_result(svn_mutex__unlock(mutex, SVN_NO_ERROR));
+}
+
+static svn_error_t *
+sasl_mutex_free_cb_internal(void *mutex)
+{
+ APR_ARRAY_PUSH(free_mutexes, svn_mutex__t*) = mutex;
+ return SVN_NO_ERROR;
}
static void sasl_mutex_free_cb(void *mutex)
{
- if (svn_ra_svn__sasl_status)
- {
- apr_status_t apr_err = apr_thread_mutex_lock(array_mutex);
- if (apr_err == APR_SUCCESS)
- {
- APR_ARRAY_PUSH(free_mutexes, apr_thread_mutex_t*) = mutex;
- apr_thread_mutex_unlock(array_mutex);
- }
- }
+ svn_error_t *err;
+
+ if (!svn_ra_svn__sasl_status)
+ return;
+
+ err = svn_mutex__lock(array_mutex);
+ if (err)
+ svn_error_clear(err);
+ else
+ svn_error_clear(svn_mutex__unlock(array_mutex,
+ sasl_mutex_free_cb_internal(mutex)));
}
#endif /* APR_HAS_THREADS */
-apr_status_t svn_ra_svn__sasl_common_init(apr_pool_t *pool)
+svn_error_t *
+svn_ra_svn__sasl_common_init(apr_pool_t *pool)
{
- apr_status_t apr_err = APR_SUCCESS;
-
sasl_pool = svn_pool_create(pool);
sasl_ctx_count = 1;
apr_pool_cleanup_register(sasl_pool, NULL, sasl_done_cb,
@@ -161,12 +178,12 @@ apr_status_t svn_ra_svn__sasl_common_init(apr_pool_t *pool)
sasl_mutex_lock_cb,
sasl_mutex_unlock_cb,
sasl_mutex_free_cb);
- free_mutexes = apr_array_make(sasl_pool, 0, sizeof(apr_thread_mutex_t *));
- apr_err = apr_thread_mutex_create(&array_mutex,
- APR_THREAD_MUTEX_DEFAULT,
- sasl_pool);
+ free_mutexes = apr_array_make(sasl_pool, 0, sizeof(svn_mutex__t *));
+ SVN_ERR(svn_mutex__init(&array_mutex, TRUE, sasl_pool));
+
#endif /* APR_HAS_THREADS */
- return apr_err;
+
+ return SVN_NO_ERROR;
}
/* We are going to look at errno when we get SASL_FAIL but we don't
@@ -213,9 +230,7 @@ static svn_error_t *sasl_init_cb(void *baton, apr_pool_t *pool)
{
int result;
- if (svn_ra_svn__sasl_common_init(pool) != APR_SUCCESS)
- return svn_error_create(SVN_ERR_RA_NOT_AUTHORIZED, NULL,
- _("Could not initialize the SASL library"));
+ SVN_ERR(svn_ra_svn__sasl_common_init(pool));
clear_sasl_errno();
result = sasl_client_init(NULL);
if (result != SASL_OK)
@@ -492,8 +507,8 @@ static svn_error_t *try_auth(svn_ra_svn__session_baton_t *sess,
while (result == SASL_CONTINUE)
{
/* Read the server response */
- SVN_ERR(svn_ra_svn_read_tuple(sess->conn, pool, "w(?s)",
- &status, &in));
+ SVN_ERR(svn_ra_svn__read_tuple(sess->conn, pool, "w(?s)",
+ &status, &in));
if (strcmp(status, "failure") == 0)
{
@@ -518,7 +533,7 @@ static svn_error_t *try_auth(svn_ra_svn__session_baton_t *sess,
clear_sasl_errno();
result = sasl_client_step(sasl_ctx,
in->data,
- in->len,
+ (const unsigned int) in->len,
&client_interact,
&out, /* Filled in by SASL. */
&outlen);
@@ -538,18 +553,18 @@ static svn_error_t *try_auth(svn_ra_svn__session_baton_t *sess,
/* For CRAM-MD5, we don't use base64-encoding. */
if (strcmp(mech, "CRAM-MD5") != 0)
arg = svn_base64_encode_string2(arg, TRUE, pool);
- SVN_ERR(svn_ra_svn_write_cstring(sess->conn, pool, arg->data));
+ SVN_ERR(svn_ra_svn__write_cstring(sess->conn, pool, arg->data));
}
else
{
- SVN_ERR(svn_ra_svn_write_cstring(sess->conn, pool, ""));
+ SVN_ERR(svn_ra_svn__write_cstring(sess->conn, pool, ""));
}
}
if (!status || strcmp(status, "step") == 0)
{
/* This is a client-send-last mech. Read the last server response. */
- SVN_ERR(svn_ra_svn_read_tuple(sess->conn, pool, "w(?s)",
+ SVN_ERR(svn_ra_svn__read_tuple(sess->conn, pool, "w(?s)",
&status, &in));
if (strcmp(status, "failure") == 0)
@@ -605,7 +620,7 @@ static svn_error_t *sasl_read_cb(void *baton, char *buffer, apr_size_t *len)
return SVN_NO_ERROR;
}
clear_sasl_errno();
- result = sasl_decode(sasl_baton->ctx, buffer, len2,
+ result = sasl_decode(sasl_baton->ctx, buffer, (unsigned int) len2,
&sasl_baton->read_buf,
&sasl_baton->read_len);
if (result != SASL_OK)
@@ -647,7 +662,7 @@ sasl_write_cb(void *baton, const char *buffer, apr_size_t *len)
/* Make sure we don't write too much. */
*len = (*len > sasl_baton->maxsize) ? sasl_baton->maxsize : *len;
clear_sasl_errno();
- result = sasl_encode(sasl_baton->ctx, buffer, *len,
+ result = sasl_encode(sasl_baton->ctx, buffer, (unsigned int) *len,
&sasl_baton->write_buf,
&sasl_baton->write_len);
@@ -719,7 +734,7 @@ svn_error_t *svn_ra_svn__enable_sasl_encryption(svn_ra_svn_conn_t *conn,
const void *maxsize;
/* Flush the connection, as we're about to replace its stream. */
- SVN_ERR(svn_ra_svn_flush(conn, pool));
+ SVN_ERR(svn_ra_svn__flush(conn, pool));
/* Create and initialize the stream baton. */
sasl_baton = apr_pcalloc(conn->pool, sizeof(*sasl_baton));
@@ -740,9 +755,8 @@ svn_error_t *svn_ra_svn__enable_sasl_encryption(svn_ra_svn_conn_t *conn,
{
clear_sasl_errno();
result = sasl_decode(sasl_ctx, conn->read_ptr,
- conn->read_end - conn->read_ptr,
- &sasl_baton->read_buf,
- &sasl_baton->read_len);
+ (unsigned int) (conn->read_end - conn->read_ptr),
+ &sasl_baton->read_buf, &sasl_baton->read_len);
if (result != SASL_OK)
return svn_error_create(SVN_ERR_RA_NOT_AUTHORIZED, NULL,
get_sasl_error(sasl_ctx, result, pool));
@@ -812,7 +826,7 @@ svn_ra_svn__do_cyrus_auth(svn_ra_svn__session_baton_t *sess,
const char *local_addrport = NULL, *remote_addrport = NULL;
svn_boolean_t success;
sasl_callback_t *callbacks;
- cred_baton_t cred_baton;
+ cred_baton_t cred_baton = { 0 };
int i;
if (!sess->is_tunneled)
@@ -842,7 +856,6 @@ svn_ra_svn__do_cyrus_auth(svn_ra_svn__session_baton_t *sess,
realmstring = apr_psprintf(pool, "%s %s", sess->realm_prefix, realm);
/* Initialize the credential baton. */
- memset(&cred_baton, 0, sizeof(cred_baton));
cred_baton.auth_baton = sess->callbacks->auth_baton;
cred_baton.realmstring = realmstring;
cred_baton.pool = pool;
@@ -858,12 +871,12 @@ svn_ra_svn__do_cyrus_auth(svn_ra_svn__session_baton_t *sess,
/* The username callback. */
callbacks[0].id = SASL_CB_AUTHNAME;
- callbacks[0].proc = get_username_cb;
+ callbacks[0].proc = (int (*)(void))get_username_cb;
callbacks[0].context = &cred_baton;
/* The password callback. */
callbacks[1].id = SASL_CB_PASS;
- callbacks[1].proc = get_password_cb;
+ callbacks[1].proc = (int (*)(void))get_password_cb;
callbacks[1].context = &cred_baton;
/* Mark the end of the array. */
@@ -896,7 +909,7 @@ svn_ra_svn__do_cyrus_auth(svn_ra_svn__session_baton_t *sess,
return cred_baton.err;
}
if (cred_baton.no_more_creds
- || (! success && ! err && ! cred_baton.was_used))
+ || (! err && ! success && ! cred_baton.was_used))
{
svn_error_clear(err);
/* If we ran out of authentication providers, or if we got a server
diff --git a/subversion/libsvn_ra_svn/deprecated.c b/subversion/libsvn_ra_svn/deprecated.c
new file mode 100644
index 0000000..8182a4d
--- /dev/null
+++ b/subversion/libsvn_ra_svn/deprecated.c
@@ -0,0 +1,234 @@
+/*
+ * deprecated.c : Public, deprecated wrappers to our private ra_svn API
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#include "svn_ra_svn.h"
+
+#include "private/svn_ra_svn_private.h"
+
+svn_error_t *
+svn_ra_svn_write_number(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ apr_uint64_t number)
+{
+ return svn_error_trace(svn_ra_svn__write_number(conn, pool, number));
+}
+
+svn_error_t *
+svn_ra_svn_write_string(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const svn_string_t *str)
+{
+ return svn_error_trace(svn_ra_svn__write_string(conn, pool, str));
+}
+
+svn_error_t *
+svn_ra_svn_write_cstring(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *s)
+{
+ return svn_error_trace(svn_ra_svn__write_cstring(conn, pool, s));
+}
+
+svn_error_t *
+svn_ra_svn_write_word(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *word)
+{
+ return svn_error_trace(svn_ra_svn__write_word(conn, pool, word));
+}
+
+svn_error_t *
+svn_ra_svn_write_proplist(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ apr_hash_t *props)
+{
+ return svn_error_trace(svn_ra_svn__write_proplist(conn, pool, props));
+}
+
+svn_error_t *
+svn_ra_svn_start_list(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool)
+{
+ return svn_error_trace(svn_ra_svn__start_list(conn, pool));
+}
+
+svn_error_t *
+svn_ra_svn_end_list(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool)
+{
+ return svn_error_trace(svn_ra_svn__end_list(conn, pool));
+}
+
+svn_error_t *
+svn_ra_svn_flush(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool)
+{
+ return svn_error_trace(svn_ra_svn__flush(conn, pool));
+}
+
+svn_error_t *
+svn_ra_svn_write_tuple(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *fmt, ...)
+{
+ va_list va;
+ svn_error_t *err;
+
+ va_start(va, fmt);
+ err = svn_ra_svn__write_tuple(conn, pool, fmt, va);
+ va_end(va);
+
+ return svn_error_trace(err);
+}
+
+svn_error_t *
+svn_ra_svn_read_item(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_ra_svn_item_t **item)
+{
+ return svn_error_trace(svn_ra_svn__read_item(conn, pool, item));
+}
+
+svn_error_t *
+svn_ra_svn_skip_leading_garbage(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool)
+{
+ return svn_error_trace(svn_ra_svn__skip_leading_garbage(conn, pool));
+}
+
+svn_error_t *
+svn_ra_svn_parse_tuple(const apr_array_header_t *list,
+ apr_pool_t *pool,
+ const char *fmt, ...)
+{
+ va_list va;
+ svn_error_t *err;
+
+ va_start(va, fmt);
+ err = svn_ra_svn__parse_tuple(list, pool, fmt, va);
+ va_end(va);
+
+ return svn_error_trace(err);
+}
+
+svn_error_t *
+svn_ra_svn_read_tuple(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *fmt, ...)
+{
+ va_list va;
+ svn_error_t *err;
+
+ va_start(va, fmt);
+ err = svn_ra_svn__read_tuple(conn, pool, fmt, va);
+ va_end(va);
+
+ return svn_error_trace(err);
+}
+
+svn_error_t *
+svn_ra_svn_parse_proplist(const apr_array_header_t *list,
+ apr_pool_t *pool,
+ apr_hash_t **props)
+{
+ return svn_error_trace(svn_ra_svn__parse_proplist(list, pool, props));
+}
+
+svn_error_t *
+svn_ra_svn_read_cmd_response(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *fmt, ...)
+{
+ va_list va;
+ svn_error_t *err;
+
+ va_start(va, fmt);
+ err = svn_ra_svn__read_cmd_response(conn, pool, fmt, va);
+ va_end(va);
+
+ return svn_error_trace(err);
+}
+
+svn_error_t *
+svn_ra_svn_handle_commands2(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const svn_ra_svn_cmd_entry_t *commands,
+ void *baton,
+ svn_boolean_t error_on_disconnect)
+{
+ return svn_error_trace(svn_ra_svn__handle_commands2(conn, pool,
+ commands, baton,
+ error_on_disconnect));
+}
+
+svn_error_t *
+svn_ra_svn_handle_commands(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const svn_ra_svn_cmd_entry_t *commands,
+ void *baton)
+{
+ return svn_error_trace(svn_ra_svn__handle_commands2(conn, pool,
+ commands, baton,
+ FALSE));
+}
+
+svn_error_t *
+svn_ra_svn_write_cmd(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *cmdname,
+ const char *fmt, ...)
+{
+ va_list va;
+ svn_error_t *err;
+
+ SVN_ERR(svn_ra_svn__start_list(conn, pool));
+ SVN_ERR(svn_ra_svn__write_word(conn, pool, cmdname));
+ va_start(va, fmt);
+ err = svn_ra_svn__write_tuple(conn, pool, fmt, va);
+ va_end(va);
+ return err ? svn_error_trace(err) : svn_ra_svn__end_list(conn, pool);
+}
+
+svn_error_t *
+svn_ra_svn_write_cmd_response(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *fmt, ...)
+{
+ va_list va;
+ svn_error_t *err;
+
+ va_start(va, fmt);
+ err = svn_ra_svn__write_cmd_response(conn, pool, fmt, va);
+ va_end(va);
+
+ return svn_error_trace(err);
+}
+
+
+svn_error_t *
+svn_ra_svn_write_cmd_failure(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_error_t *err)
+{
+ return svn_error_trace(svn_ra_svn__write_cmd_failure(conn, pool, err));
+}
diff --git a/subversion/libsvn_ra_svn/editorp.c b/subversion/libsvn_ra_svn/editorp.c
index c7fc69b..cc1d8ab 100644
--- a/subversion/libsvn_ra_svn/editorp.c
+++ b/subversion/libsvn_ra_svn/editorp.c
@@ -28,6 +28,7 @@
#include <apr_general.h>
#include <apr_strings.h>
+#include "svn_hash.h"
#include "svn_types.h"
#include "svn_string.h"
#include "svn_error.h"
@@ -39,6 +40,7 @@
#include "svn_private_config.h"
#include "private/svn_fspath.h"
+#include "private/svn_editor.h"
#include "ra_svn.h"
@@ -121,14 +123,23 @@ static ra_svn_baton_t *ra_svn_make_baton(svn_ra_svn_conn_t *conn,
/* Check for an early error status report from the consumer. If we
* get one, abort the edit and return the error. */
-static svn_error_t *check_for_error(ra_svn_edit_baton_t *eb, apr_pool_t *pool)
+static svn_error_t *
+check_for_error_internal(ra_svn_edit_baton_t *eb, apr_pool_t *pool)
{
SVN_ERR_ASSERT(!eb->got_status);
+
+ /* reset TX counter */
+ eb->conn->written_since_error_check = 0;
+
+ /* if we weren't asked to always check, wait for at least the next TX */
+ eb->conn->may_check_for_error = eb->conn->error_check_interval == 0;
+
+ /* any incoming data? */
if (svn_ra_svn__input_waiting(eb->conn, pool))
{
eb->got_status = TRUE;
- SVN_ERR(svn_ra_svn_write_cmd(eb->conn, pool, "abort-edit", ""));
- SVN_ERR(svn_ra_svn_read_cmd_response(eb->conn, pool, ""));
+ SVN_ERR(svn_ra_svn__write_cmd_abort_edit(eb->conn, pool));
+ SVN_ERR(svn_ra_svn__read_cmd_response(eb->conn, pool, ""));
/* We shouldn't get here if the consumer is doing its job. */
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Successful edit status returned too soon"));
@@ -136,13 +147,21 @@ static svn_error_t *check_for_error(ra_svn_edit_baton_t *eb, apr_pool_t *pool)
return SVN_NO_ERROR;
}
+static svn_error_t *
+check_for_error(ra_svn_edit_baton_t *eb, apr_pool_t *pool)
+{
+ return eb->conn->may_check_for_error
+ ? check_for_error_internal(eb, pool)
+ : SVN_NO_ERROR;
+}
+
static svn_error_t *ra_svn_target_rev(void *edit_baton, svn_revnum_t rev,
apr_pool_t *pool)
{
ra_svn_edit_baton_t *eb = edit_baton;
SVN_ERR(check_for_error(eb, pool));
- SVN_ERR(svn_ra_svn_write_cmd(eb->conn, pool, "target-rev", "r", rev));
+ SVN_ERR(svn_ra_svn__write_cmd_target_rev(eb->conn, pool, rev));
return SVN_NO_ERROR;
}
@@ -153,8 +172,7 @@ static svn_error_t *ra_svn_open_root(void *edit_baton, svn_revnum_t rev,
const char *token = make_token('d', eb, pool);
SVN_ERR(check_for_error(eb, pool));
- SVN_ERR(svn_ra_svn_write_cmd(eb->conn, pool, "open-root", "(?r)c", rev,
- token));
+ SVN_ERR(svn_ra_svn__write_cmd_open_root(eb->conn, pool, rev, token));
*root_baton = ra_svn_make_baton(eb->conn, pool, eb, token);
return SVN_NO_ERROR;
}
@@ -165,8 +183,8 @@ static svn_error_t *ra_svn_delete_entry(const char *path, svn_revnum_t rev,
ra_svn_baton_t *b = parent_baton;
SVN_ERR(check_for_error(b->eb, pool));
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "delete-entry", "c(?r)c",
- path, rev, b->token));
+ SVN_ERR(svn_ra_svn__write_cmd_delete_entry(b->conn, pool,
+ path, rev, b->token));
return SVN_NO_ERROR;
}
@@ -181,8 +199,8 @@ static svn_error_t *ra_svn_add_dir(const char *path, void *parent_baton,
SVN_ERR_ASSERT((copy_path && SVN_IS_VALID_REVNUM(copy_rev))
|| (!copy_path && !SVN_IS_VALID_REVNUM(copy_rev)));
SVN_ERR(check_for_error(b->eb, pool));
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "add-dir", "ccc(?cr)", path,
- b->token, token, copy_path, copy_rev));
+ SVN_ERR(svn_ra_svn__write_cmd_add_dir(b->conn, pool, path, b->token,
+ token, copy_path, copy_rev));
*child_baton = ra_svn_make_baton(b->conn, pool, b->eb, token);
return SVN_NO_ERROR;
}
@@ -195,8 +213,8 @@ static svn_error_t *ra_svn_open_dir(const char *path, void *parent_baton,
const char *token = make_token('d', b->eb, pool);
SVN_ERR(check_for_error(b->eb, pool));
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "open-dir", "ccc(?r)",
- path, b->token, token, rev));
+ SVN_ERR(svn_ra_svn__write_cmd_open_dir(b->conn, pool, path, b->token,
+ token, rev));
*child_baton = ra_svn_make_baton(b->conn, pool, b->eb, token);
return SVN_NO_ERROR;
}
@@ -208,8 +226,8 @@ static svn_error_t *ra_svn_change_dir_prop(void *dir_baton, const char *name,
ra_svn_baton_t *b = dir_baton;
SVN_ERR(check_for_error(b->eb, pool));
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "change-dir-prop", "cc(?s)",
- b->token, name, value));
+ SVN_ERR(svn_ra_svn__write_cmd_change_dir_prop(b->conn, pool, b->token,
+ name, value));
return SVN_NO_ERROR;
}
@@ -218,7 +236,7 @@ static svn_error_t *ra_svn_close_dir(void *dir_baton, apr_pool_t *pool)
ra_svn_baton_t *b = dir_baton;
SVN_ERR(check_for_error(b->eb, pool));
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "close-dir", "c", b->token));
+ SVN_ERR(svn_ra_svn__write_cmd_close_dir(b->conn, pool, b->token));
return SVN_NO_ERROR;
}
@@ -233,8 +251,7 @@ static svn_error_t *ra_svn_absent_dir(const char *path,
return SVN_NO_ERROR;
SVN_ERR(check_for_error(b->eb, pool));
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "absent-dir", "cc", path,
- b->token));
+ SVN_ERR(svn_ra_svn__write_cmd_absent_dir(b->conn, pool, path, b->token));
return SVN_NO_ERROR;
}
@@ -251,8 +268,8 @@ static svn_error_t *ra_svn_add_file(const char *path,
SVN_ERR_ASSERT((copy_path && SVN_IS_VALID_REVNUM(copy_rev))
|| (!copy_path && !SVN_IS_VALID_REVNUM(copy_rev)));
SVN_ERR(check_for_error(b->eb, pool));
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "add-file", "ccc(?cr)", path,
- b->token, token, copy_path, copy_rev));
+ SVN_ERR(svn_ra_svn__write_cmd_add_file(b->conn, pool, path, b->token,
+ token, copy_path, copy_rev));
*file_baton = ra_svn_make_baton(b->conn, pool, b->eb, token);
return SVN_NO_ERROR;
}
@@ -267,8 +284,8 @@ static svn_error_t *ra_svn_open_file(const char *path,
const char *token = make_token('c', b->eb, pool);
SVN_ERR(check_for_error(b->eb, b->pool));
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "open-file", "ccc(?r)",
- path, b->token, token, rev));
+ SVN_ERR(svn_ra_svn__write_cmd_open_file(b->conn, pool, path, b->token,
+ token, rev));
*file_baton = ra_svn_make_baton(b->conn, pool, b->eb, token);
return SVN_NO_ERROR;
}
@@ -282,8 +299,8 @@ static svn_error_t *ra_svn_svndiff_handler(void *baton, const char *data,
SVN_ERR(check_for_error(b->eb, b->pool));
str.data = data;
str.len = *len;
- return svn_ra_svn_write_cmd(b->conn, b->pool, "textdelta-chunk", "cs",
- b->token, &str);
+ return svn_ra_svn__write_cmd_textdelta_chunk(b->conn, b->pool,
+ b->token, &str);
}
static svn_error_t *ra_svn_svndiff_close_handler(void *baton)
@@ -291,8 +308,7 @@ static svn_error_t *ra_svn_svndiff_close_handler(void *baton)
ra_svn_baton_t *b = baton;
SVN_ERR(check_for_error(b->eb, b->pool));
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, b->pool, "textdelta-end", "c",
- b->token));
+ SVN_ERR(svn_ra_svn__write_cmd_textdelta_end(b->conn, b->pool, b->token));
return SVN_NO_ERROR;
}
@@ -307,8 +323,8 @@ static svn_error_t *ra_svn_apply_textdelta(void *file_baton,
/* Tell the other side we're starting a text delta. */
SVN_ERR(check_for_error(b->eb, pool));
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "apply-textdelta", "c(?c)",
- b->token, base_checksum));
+ SVN_ERR(svn_ra_svn__write_cmd_apply_textdelta(b->conn, pool, b->token,
+ base_checksum));
/* Transform the window stream to an svndiff stream. Reuse the
* file baton for the stream handler, since it has all the
@@ -337,8 +353,8 @@ static svn_error_t *ra_svn_change_file_prop(void *file_baton,
ra_svn_baton_t *b = file_baton;
SVN_ERR(check_for_error(b->eb, pool));
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "change-file-prop", "cc(?s)",
- b->token, name, value));
+ SVN_ERR(svn_ra_svn__write_cmd_change_file_prop(b->conn, pool,
+ b->token, name, value));
return SVN_NO_ERROR;
}
@@ -349,8 +365,8 @@ static svn_error_t *ra_svn_close_file(void *file_baton,
ra_svn_baton_t *b = file_baton;
SVN_ERR(check_for_error(b->eb, pool));
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "close-file", "c(?c)",
- b->token, text_checksum));
+ SVN_ERR(svn_ra_svn__write_cmd_close_file(b->conn, pool,
+ b->token, text_checksum));
return SVN_NO_ERROR;
}
@@ -365,8 +381,7 @@ static svn_error_t *ra_svn_absent_file(const char *path,
return SVN_NO_ERROR;
SVN_ERR(check_for_error(b->eb, pool));
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "absent-file", "cc", path,
- b->token));
+ SVN_ERR(svn_ra_svn__write_cmd_absent_file(b->conn, pool, path, b->token));
return SVN_NO_ERROR;
}
@@ -377,11 +392,11 @@ static svn_error_t *ra_svn_close_edit(void *edit_baton, apr_pool_t *pool)
SVN_ERR_ASSERT(!eb->got_status);
eb->got_status = TRUE;
- SVN_ERR(svn_ra_svn_write_cmd(eb->conn, pool, "close-edit", ""));
- err = svn_ra_svn_read_cmd_response(eb->conn, pool, "");
+ SVN_ERR(svn_ra_svn__write_cmd_close_edit(eb->conn, pool));
+ err = svn_ra_svn__read_cmd_response(eb->conn, pool, "");
if (err)
{
- svn_error_clear(svn_ra_svn_write_cmd(eb->conn, pool, "abort-edit", ""));
+ svn_error_clear(svn_ra_svn__write_cmd_abort_edit(eb->conn, pool));
return err;
}
if (eb->callback)
@@ -395,8 +410,8 @@ static svn_error_t *ra_svn_abort_edit(void *edit_baton, apr_pool_t *pool)
if (eb->got_status)
return SVN_NO_ERROR;
- SVN_ERR(svn_ra_svn_write_cmd(eb->conn, pool, "abort-edit", ""));
- SVN_ERR(svn_ra_svn_read_cmd_response(eb->conn, pool, ""));
+ SVN_ERR(svn_ra_svn__write_cmd_abort_edit(eb->conn, pool));
+ SVN_ERR(svn_ra_svn__read_cmd_response(eb->conn, pool, ""));
return SVN_NO_ERROR;
}
@@ -435,6 +450,11 @@ void svn_ra_svn_get_editor(const svn_delta_editor_t **editor,
*editor = ra_svn_editor;
*edit_baton = eb;
+
+ svn_error_clear(svn_editor__insert_shims(editor, edit_baton, *editor,
+ *edit_baton, NULL, NULL,
+ conn->shim_callbacks,
+ pool, pool));
}
/* --- DRIVING AN EDITOR --- */
@@ -453,7 +473,7 @@ static ra_svn_token_entry_t *store_token(ra_svn_driver_state_t *ds,
entry->is_file = is_file;
entry->dstream = NULL;
entry->pool = pool;
- apr_hash_set(ds->tokens, entry->token, APR_HASH_KEY_STRING, entry);
+ svn_hash_sets(ds->tokens, entry->token, entry);
return entry;
}
@@ -461,7 +481,7 @@ static svn_error_t *lookup_token(ra_svn_driver_state_t *ds, const char *token,
svn_boolean_t is_file,
ra_svn_token_entry_t **entry)
{
- *entry = apr_hash_get(ds->tokens, token, APR_HASH_KEY_STRING);
+ *entry = svn_hash_gets(ds->tokens, token);
if (!*entry || (*entry)->is_file != is_file)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Invalid file or dir token during edit"));
@@ -475,7 +495,7 @@ static svn_error_t *ra_svn_handle_target_rev(svn_ra_svn_conn_t *conn,
{
svn_revnum_t rev;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "r", &rev));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "r", &rev));
SVN_CMD_ERR(ds->editor->set_target_revision(ds->edit_baton, rev, pool));
return SVN_NO_ERROR;
}
@@ -490,7 +510,7 @@ static svn_error_t *ra_svn_handle_open_root(svn_ra_svn_conn_t *conn,
const char *token;
void *root_baton;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "(?r)c", &rev, &token));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "(?r)c", &rev, &token));
subpool = svn_pool_create(ds->pool);
SVN_CMD_ERR(ds->editor->open_root(ds->edit_baton, rev, subpool,
&root_baton));
@@ -507,7 +527,8 @@ static svn_error_t *ra_svn_handle_delete_entry(svn_ra_svn_conn_t *conn,
svn_revnum_t rev;
ra_svn_token_entry_t *entry;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?r)c", &path, &rev, &token));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c(?r)c",
+ &path, &rev, &token));
SVN_ERR(lookup_token(ds, token, FALSE, &entry));
path = svn_relpath_canonicalize(path, pool);
SVN_CMD_ERR(ds->editor->delete_entry(path, rev, entry->baton, pool));
@@ -525,8 +546,8 @@ static svn_error_t *ra_svn_handle_add_dir(svn_ra_svn_conn_t *conn,
apr_pool_t *subpool;
void *child_baton;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "ccc(?cr)", &path, &token,
- &child_token, &copy_path, &copy_rev));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "ccc(?cr)", &path, &token,
+ &child_token, &copy_path, &copy_rev));
SVN_ERR(lookup_token(ds, token, FALSE, &entry));
subpool = svn_pool_create(entry->pool);
path = svn_relpath_canonicalize(path, pool);
@@ -558,8 +579,8 @@ static svn_error_t *ra_svn_handle_open_dir(svn_ra_svn_conn_t *conn,
apr_pool_t *subpool;
void *child_baton;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "ccc(?r)", &path, &token,
- &child_token, &rev));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "ccc(?r)", &path, &token,
+ &child_token, &rev));
SVN_ERR(lookup_token(ds, token, FALSE, &entry));
subpool = svn_pool_create(entry->pool);
path = svn_relpath_canonicalize(path, pool);
@@ -578,8 +599,8 @@ static svn_error_t *ra_svn_handle_change_dir_prop(svn_ra_svn_conn_t *conn,
svn_string_t *value;
ra_svn_token_entry_t *entry;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "cc(?s)", &token, &name,
- &value));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "cc(?s)", &token, &name,
+ &value));
SVN_ERR(lookup_token(ds, token, FALSE, &entry));
SVN_CMD_ERR(ds->editor->change_dir_prop(entry->baton, name, value,
entry->pool));
@@ -595,12 +616,12 @@ static svn_error_t *ra_svn_handle_close_dir(svn_ra_svn_conn_t *conn,
ra_svn_token_entry_t *entry;
/* Parse and look up the directory token. */
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c", &token));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c", &token));
SVN_ERR(lookup_token(ds, token, FALSE, &entry));
/* Close the directory and destroy the baton. */
SVN_CMD_ERR(ds->editor->close_directory(entry->baton, pool));
- apr_hash_set(ds->tokens, token, APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(ds->tokens, token, NULL);
svn_pool_destroy(entry->pool);
return SVN_NO_ERROR;
}
@@ -615,7 +636,7 @@ static svn_error_t *ra_svn_handle_absent_dir(svn_ra_svn_conn_t *conn,
ra_svn_token_entry_t *entry;
/* Parse parameters and look up the directory token. */
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "cc", &path, &token));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "cc", &path, &token));
SVN_ERR(lookup_token(ds, token, FALSE, &entry));
/* Call the editor. */
@@ -632,8 +653,8 @@ static svn_error_t *ra_svn_handle_add_file(svn_ra_svn_conn_t *conn,
svn_revnum_t copy_rev;
ra_svn_token_entry_t *entry, *file_entry;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "ccc(?cr)", &path, &token,
- &file_token, &copy_path, &copy_rev));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "ccc(?cr)", &path, &token,
+ &file_token, &copy_path, &copy_rev));
SVN_ERR(lookup_token(ds, token, FALSE, &entry));
ds->file_refs++;
path = svn_relpath_canonicalize(path, pool);
@@ -663,8 +684,8 @@ static svn_error_t *ra_svn_handle_open_file(svn_ra_svn_conn_t *conn,
svn_revnum_t rev;
ra_svn_token_entry_t *entry, *file_entry;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "ccc(?r)", &path, &token,
- &file_token, &rev));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "ccc(?r)", &path, &token,
+ &file_token, &rev));
SVN_ERR(lookup_token(ds, token, FALSE, &entry));
ds->file_refs++;
path = svn_relpath_canonicalize(path, pool);
@@ -686,8 +707,8 @@ static svn_error_t *ra_svn_handle_apply_textdelta(svn_ra_svn_conn_t *conn,
char *base_checksum;
/* Parse arguments and look up the token. */
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?c)",
- &token, &base_checksum));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c(?c)",
+ &token, &base_checksum));
SVN_ERR(lookup_token(ds, token, TRUE, &entry));
if (entry->dstream)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
@@ -709,7 +730,7 @@ static svn_error_t *ra_svn_handle_textdelta_chunk(svn_ra_svn_conn_t *conn,
svn_string_t *str;
/* Parse arguments and look up the token. */
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "cs", &token, &str));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "cs", &token, &str));
SVN_ERR(lookup_token(ds, token, TRUE, &entry));
if (!entry->dstream)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
@@ -727,7 +748,7 @@ static svn_error_t *ra_svn_handle_textdelta_end(svn_ra_svn_conn_t *conn,
ra_svn_token_entry_t *entry;
/* Parse arguments and look up the token. */
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c", &token));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c", &token));
SVN_ERR(lookup_token(ds, token, TRUE, &entry));
if (!entry->dstream)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
@@ -747,8 +768,8 @@ static svn_error_t *ra_svn_handle_change_file_prop(svn_ra_svn_conn_t *conn,
svn_string_t *value;
ra_svn_token_entry_t *entry;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "cc(?s)", &token, &name,
- &value));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "cc(?s)", &token, &name,
+ &value));
SVN_ERR(lookup_token(ds, token, TRUE, &entry));
SVN_CMD_ERR(ds->editor->change_file_prop(entry->baton, name, value, pool));
return SVN_NO_ERROR;
@@ -764,13 +785,13 @@ static svn_error_t *ra_svn_handle_close_file(svn_ra_svn_conn_t *conn,
const char *text_checksum;
/* Parse arguments and look up the file token. */
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?c)",
- &token, &text_checksum));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c(?c)",
+ &token, &text_checksum));
SVN_ERR(lookup_token(ds, token, TRUE, &entry));
/* Close the file and destroy the baton. */
SVN_CMD_ERR(ds->editor->close_file(entry->baton, text_checksum, pool));
- apr_hash_set(ds->tokens, token, APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(ds->tokens, token, NULL);
if (--ds->file_refs == 0)
svn_pool_clear(ds->file_pool);
return SVN_NO_ERROR;
@@ -786,7 +807,7 @@ static svn_error_t *ra_svn_handle_absent_file(svn_ra_svn_conn_t *conn,
ra_svn_token_entry_t *entry;
/* Parse parameters and look up the parent directory token. */
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "cc", &path, &token));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "cc", &path, &token));
SVN_ERR(lookup_token(ds, token, FALSE, &entry));
/* Call the editor. */
@@ -803,7 +824,7 @@ static svn_error_t *ra_svn_handle_close_edit(svn_ra_svn_conn_t *conn,
ds->done = TRUE;
if (ds->aborted)
*ds->aborted = FALSE;
- return svn_ra_svn_write_cmd_response(conn, pool, "");
+ return svn_ra_svn__write_cmd_response(conn, pool, "");
}
static svn_error_t *ra_svn_handle_abort_edit(svn_ra_svn_conn_t *conn,
@@ -815,7 +836,7 @@ static svn_error_t *ra_svn_handle_abort_edit(svn_ra_svn_conn_t *conn,
if (ds->aborted)
*ds->aborted = TRUE;
SVN_CMD_ERR(ds->editor->abort_edit(ds->edit_baton, pool));
- return svn_ra_svn_write_cmd_response(conn, pool, "");
+ return svn_ra_svn__write_cmd_response(conn, pool, "");
}
static svn_error_t *ra_svn_handle_finish_replay(svn_ra_svn_conn_t *conn,
@@ -839,25 +860,25 @@ static const struct {
const apr_array_header_t *params,
ra_svn_driver_state_t *ds);
} ra_svn_edit_cmds[] = {
- { "target-rev", ra_svn_handle_target_rev },
- { "open-root", ra_svn_handle_open_root },
- { "delete-entry", ra_svn_handle_delete_entry },
+ { "change-file-prop", ra_svn_handle_change_file_prop },
+ { "open-file", ra_svn_handle_open_file },
+ { "apply-textdelta", ra_svn_handle_apply_textdelta },
+ { "textdelta-chunk", ra_svn_handle_textdelta_chunk },
+ { "close-file", ra_svn_handle_close_file },
{ "add-dir", ra_svn_handle_add_dir },
{ "open-dir", ra_svn_handle_open_dir },
{ "change-dir-prop", ra_svn_handle_change_dir_prop },
+ { "delete-entry", ra_svn_handle_delete_entry },
{ "close-dir", ra_svn_handle_close_dir },
{ "absent-dir", ra_svn_handle_absent_dir },
{ "add-file", ra_svn_handle_add_file },
- { "open-file", ra_svn_handle_open_file },
- { "apply-textdelta", ra_svn_handle_apply_textdelta },
- { "textdelta-chunk", ra_svn_handle_textdelta_chunk },
{ "textdelta-end", ra_svn_handle_textdelta_end },
- { "change-file-prop", ra_svn_handle_change_file_prop },
- { "close-file", ra_svn_handle_close_file },
{ "absent-file", ra_svn_handle_absent_file },
- { "close-edit", ra_svn_handle_close_edit },
{ "abort-edit", ra_svn_handle_abort_edit },
{ "finish-replay", ra_svn_handle_finish_replay },
+ { "target-rev", ra_svn_handle_target_rev },
+ { "open-root", ra_svn_handle_open_root },
+ { "close-edit", ra_svn_handle_close_edit },
{ NULL }
};
@@ -870,7 +891,7 @@ static svn_error_t *blocked_write(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
/* We blocked trying to send an error. Read and discard an editing
* command in order to avoid deadlock. */
- SVN_ERR(svn_ra_svn_read_tuple(conn, pool, "wl", &cmd, &params));
+ SVN_ERR(svn_ra_svn__read_tuple(conn, pool, "wl", &cmd, &params));
if (strcmp(cmd, "abort-edit") == 0)
{
ds->done = TRUE;
@@ -906,30 +927,47 @@ svn_error_t *svn_ra_svn_drive_editor2(svn_ra_svn_conn_t *conn,
while (!state.done)
{
svn_pool_clear(subpool);
- SVN_ERR(svn_ra_svn_read_tuple(conn, subpool, "wl", &cmd, &params));
- for (i = 0; ra_svn_edit_cmds[i].cmd; i++)
- {
- if (strcmp(cmd, ra_svn_edit_cmds[i].cmd) == 0)
- break;
- }
- if (ra_svn_edit_cmds[i].cmd)
- err = (*ra_svn_edit_cmds[i].handler)(conn, subpool, params, &state);
- else if (strcmp(cmd, "failure") == 0)
+ if (editor)
{
- /* While not really an editor command this can occur when
- reporter->finish_report() fails before the first editor command */
- if (aborted)
- *aborted = TRUE;
- err = svn_ra_svn__handle_failure_status(params, pool);
- return svn_error_compose_create(
- err,
- editor->abort_edit(edit_baton, subpool));
+ SVN_ERR(svn_ra_svn__read_tuple(conn, subpool, "wl", &cmd, &params));
+ for (i = 0; ra_svn_edit_cmds[i].cmd; i++)
+ if (strcmp(cmd, ra_svn_edit_cmds[i].cmd) == 0)
+ break;
+
+ if (ra_svn_edit_cmds[i].cmd)
+ err = (*ra_svn_edit_cmds[i].handler)(conn, subpool, params, &state);
+ else if (strcmp(cmd, "failure") == 0)
+ {
+ /* While not really an editor command this can occur when
+ reporter->finish_report() fails before the first editor
+ command */
+ if (aborted)
+ *aborted = TRUE;
+ err = svn_ra_svn__handle_failure_status(params, pool);
+ return svn_error_compose_create(
+ err,
+ editor->abort_edit(edit_baton, subpool));
+ }
+ else
+ {
+ err = svn_error_createf(SVN_ERR_RA_SVN_UNKNOWN_CMD, NULL,
+ _("Unknown editor command '%s'"), cmd);
+ err = svn_error_create(SVN_ERR_RA_SVN_CMD_ERR, err, NULL);
+ }
}
else
{
- err = svn_error_createf(SVN_ERR_RA_SVN_UNKNOWN_CMD, NULL,
- _("Unknown command '%s'"), cmd);
- err = svn_error_create(SVN_ERR_RA_SVN_CMD_ERR, err, NULL);
+ const char* command = NULL;
+ SVN_ERR(svn_ra_svn__read_command_only(conn, subpool, &command));
+ if (strcmp(command, "close-edit") == 0)
+ {
+ state.done = TRUE;
+ if (aborted)
+ *aborted = FALSE;
+ err = svn_ra_svn__write_cmd_response(conn, pool, "");
+ }
+ else
+ err = NULL;
}
if (err && err->apr_err == SVN_ERR_RA_SVN_CMD_ERR)
@@ -939,14 +977,15 @@ svn_error_t *svn_ra_svn_drive_editor2(svn_ra_svn_conn_t *conn,
if (!state.done)
{
/* Abort the edit and use non-blocking I/O to write the error. */
- svn_error_clear(editor->abort_edit(edit_baton, subpool));
+ if (editor)
+ svn_error_clear(editor->abort_edit(edit_baton, subpool));
svn_ra_svn__set_block_handler(conn, blocked_write, &state);
}
- write_err = svn_ra_svn_write_cmd_failure(
+ write_err = svn_ra_svn__write_cmd_failure(
conn, subpool,
svn_ra_svn__locate_real_error_child(err));
if (!write_err)
- write_err = svn_ra_svn_flush(conn, subpool);
+ write_err = svn_ra_svn__flush(conn, subpool);
svn_ra_svn__set_block_handler(conn, NULL, NULL);
svn_error_clear(err);
SVN_ERR(write_err);
@@ -973,7 +1012,7 @@ svn_error_t *svn_ra_svn_drive_editor2(svn_ra_svn_conn_t *conn,
while (!state.done)
{
svn_pool_clear(subpool);
- err = svn_ra_svn_read_tuple(conn, subpool, "wl", &cmd, &params);
+ err = svn_ra_svn__read_tuple(conn, subpool, "wl", &cmd, &params);
if (err && err->apr_err == SVN_ERR_RA_SVN_CONNECTION_CLOSED)
{
/* Other side disconnected; that's no error. */
diff --git a/subversion/libsvn_ra_svn/internal_auth.c b/subversion/libsvn_ra_svn/internal_auth.c
index e1ac6b9..eac2ccd 100644
--- a/subversion/libsvn_ra_svn/internal_auth.c
+++ b/subversion/libsvn_ra_svn/internal_auth.c
@@ -57,7 +57,7 @@ static svn_error_t *read_success(svn_ra_svn_conn_t *conn, apr_pool_t *pool)
{
const char *status, *arg;
- SVN_ERR(svn_ra_svn_read_tuple(conn, pool, "w(?c)", &status, &arg));
+ SVN_ERR(svn_ra_svn__read_tuple(conn, pool, "w(?c)", &status, &arg));
if (strcmp(status, "failure") == 0 && arg)
return svn_error_createf(SVN_ERR_RA_NOT_AUTHORIZED, NULL,
_("Authentication error from server: %s"), arg);
diff --git a/subversion/libsvn_ra_svn/marshal.c b/subversion/libsvn_ra_svn/marshal.c
index 588ccb4..7cf483f 100644
--- a/subversion/libsvn_ra_svn/marshal.c
+++ b/subversion/libsvn_ra_svn/marshal.c
@@ -32,6 +32,7 @@
#include <apr_lib.h>
#include <apr_strings.h>
+#include "svn_hash.h"
#include "svn_types.h"
#include "svn_string.h"
#include "svn_error.h"
@@ -39,11 +40,13 @@
#include "svn_ra_svn.h"
#include "svn_private_config.h"
#include "svn_ctype.h"
+#include "svn_time.h"
#include "ra_svn.h"
#include "private/svn_string_private.h"
#include "private/svn_dep_compat.h"
+#include "private/svn_error_private.h"
#define svn_iswhitespace(c) ((c) == ' ' || (c) == '\n')
@@ -53,15 +56,27 @@
#define SUSPICIOUSLY_HUGE_STRING_SIZE_THRESHOLD (0x100000)
+/* Return the APR socket timeout to be used for the connection depending
+ * on whether there is a blockage handler or zero copy has been activated. */
+static apr_interval_time_t
+get_timeout(svn_ra_svn_conn_t *conn)
+{
+ return conn->block_handler ? 0 : -1;
+}
+
/* --- CONNECTION INITIALIZATION --- */
-svn_ra_svn_conn_t *svn_ra_svn_create_conn2(apr_socket_t *sock,
+svn_ra_svn_conn_t *svn_ra_svn_create_conn3(apr_socket_t *sock,
apr_file_t *in_file,
apr_file_t *out_file,
int compression_level,
+ apr_size_t zero_copy_limit,
+ apr_size_t error_check_interval,
apr_pool_t *pool)
{
- svn_ra_svn_conn_t *conn = apr_palloc(pool, sizeof(*conn));
+ svn_ra_svn_conn_t *conn;
+ void *mem = apr_palloc(pool, sizeof(*conn) + SVN_RA_SVN__PAGE_SIZE);
+ conn = (void*)APR_ALIGN((apr_uintptr_t)mem, SVN_RA_SVN__PAGE_SIZE);
assert((sock && !in_file && !out_file) || (!sock && in_file && out_file));
#ifdef SVN_HAVE_SASL
@@ -72,10 +87,14 @@ svn_ra_svn_conn_t *svn_ra_svn_create_conn2(apr_socket_t *sock,
conn->read_ptr = conn->read_buf;
conn->read_end = conn->read_buf;
conn->write_pos = 0;
+ conn->written_since_error_check = 0;
+ conn->error_check_interval = error_check_interval;
+ conn->may_check_for_error = error_check_interval == 0;
conn->block_handler = NULL;
conn->block_baton = NULL;
conn->capabilities = apr_hash_make(pool);
conn->compression_level = compression_level;
+ conn->zero_copy_limit = zero_copy_limit;
conn->pool = pool;
if (sock != NULL)
@@ -85,6 +104,7 @@ svn_ra_svn_conn_t *svn_ra_svn_create_conn2(apr_socket_t *sock,
if (!(apr_socket_addr_get(&sa, APR_REMOTE, sock) == APR_SUCCESS
&& apr_sockaddr_ip_get(&conn->remote_ip, sa) == APR_SUCCESS))
conn->remote_ip = NULL;
+ svn_ra_svn__stream_timeout(conn->stream, get_timeout(conn));
}
else
{
@@ -95,14 +115,25 @@ svn_ra_svn_conn_t *svn_ra_svn_create_conn2(apr_socket_t *sock,
return conn;
}
+svn_ra_svn_conn_t *svn_ra_svn_create_conn2(apr_socket_t *sock,
+ apr_file_t *in_file,
+ apr_file_t *out_file,
+ int compression_level,
+ apr_pool_t *pool)
+{
+ return svn_ra_svn_create_conn3(sock, in_file, out_file,
+ compression_level, 0, 0, pool);
+}
+
/* backward-compatible implementation using the default compression level */
svn_ra_svn_conn_t *svn_ra_svn_create_conn(apr_socket_t *sock,
apr_file_t *in_file,
apr_file_t *out_file,
apr_pool_t *pool)
{
- return svn_ra_svn_create_conn2(sock, in_file, out_file,
- SVN_DELTA_COMPRESSION_LEVEL_DEFAULT, pool);
+ return svn_ra_svn_create_conn3(sock, in_file, out_file,
+ SVN_DELTA_COMPRESSION_LEVEL_DEFAULT, 0, 0,
+ pool);
}
svn_error_t *svn_ra_svn_set_capabilities(svn_ra_svn_conn_t *conn,
@@ -119,16 +150,23 @@ svn_error_t *svn_ra_svn_set_capabilities(svn_ra_svn_conn_t *conn,
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Capability entry is not a word"));
word = apr_pstrdup(conn->pool, item->u.word);
- apr_hash_set(conn->capabilities, word, APR_HASH_KEY_STRING, word);
+ svn_hash_sets(conn->capabilities, word, word);
}
return SVN_NO_ERROR;
}
+svn_error_t *
+svn_ra_svn__set_shim_callbacks(svn_ra_svn_conn_t *conn,
+ svn_delta_shim_callbacks_t *shim_callbacks)
+{
+ conn->shim_callbacks = shim_callbacks;
+ return SVN_NO_ERROR;
+}
+
svn_boolean_t svn_ra_svn_has_capability(svn_ra_svn_conn_t *conn,
const char *capability)
{
- return (apr_hash_get(conn->capabilities, capability,
- APR_HASH_KEY_STRING) != NULL);
+ return (svn_hash_gets(conn->capabilities, capability) != NULL);
}
int
@@ -137,6 +175,12 @@ svn_ra_svn_compression_level(svn_ra_svn_conn_t *conn)
return conn->compression_level;
}
+apr_size_t
+svn_ra_svn_zero_copy_limit(svn_ra_svn_conn_t *conn)
+{
+ return conn->zero_copy_limit;
+}
+
const char *svn_ra_svn_conn_remote_host(svn_ra_svn_conn_t *conn)
{
return conn->remote_ip;
@@ -147,11 +191,9 @@ svn_ra_svn__set_block_handler(svn_ra_svn_conn_t *conn,
ra_svn_block_handler_t handler,
void *baton)
{
- apr_interval_time_t interval = (handler) ? 0 : -1;
-
conn->block_handler = handler;
conn->block_baton = baton;
- svn_ra_svn__stream_timeout(conn->stream, interval);
+ svn_ra_svn__stream_timeout(conn->stream, get_timeout(conn));
}
svn_boolean_t svn_ra_svn__input_waiting(svn_ra_svn_conn_t *conn,
@@ -162,20 +204,6 @@ svn_boolean_t svn_ra_svn__input_waiting(svn_ra_svn_conn_t *conn,
/* --- WRITE BUFFER MANAGEMENT --- */
-/* Write bytes into the write buffer until either the write buffer is
- * full or we reach END. */
-static const char *writebuf_push(svn_ra_svn_conn_t *conn, const char *data,
- const char *end)
-{
- apr_ssize_t buflen, copylen;
-
- buflen = sizeof(conn->write_buf) - conn->write_pos;
- copylen = (buflen < end - data) ? buflen : end - data;
- memcpy(conn->write_buf + conn->write_pos, data, copylen);
- conn->write_pos += copylen;
- return data + copylen;
-}
-
/* Write data to socket or output file as appropriate. */
static svn_error_t *writebuf_output(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
const char *data, apr_size_t len)
@@ -214,6 +242,10 @@ static svn_error_t *writebuf_output(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
}
}
+ conn->written_since_error_check += len;
+ conn->may_check_for_error
+ = conn->written_since_error_check >= conn->error_check_interval;
+
if (subpool)
svn_pool_destroy(subpool);
return SVN_NO_ERROR;
@@ -222,7 +254,7 @@ static svn_error_t *writebuf_output(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
/* Write data from the write buffer out to the socket. */
static svn_error_t *writebuf_flush(svn_ra_svn_conn_t *conn, apr_pool_t *pool)
{
- int write_pos = conn->write_pos;
+ apr_size_t write_pos = conn->write_pos;
/* Clear conn->write_pos first in case the block handler does a read. */
conn->write_pos = 0;
@@ -233,35 +265,56 @@ static svn_error_t *writebuf_flush(svn_ra_svn_conn_t *conn, apr_pool_t *pool)
static svn_error_t *writebuf_write(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
const char *data, apr_size_t len)
{
- const char *end = data + len;
-
- if (conn->write_pos > 0 && conn->write_pos + len > sizeof(conn->write_buf))
+ /* data >= 8k is sent immediately */
+ if (len >= sizeof(conn->write_buf) / 2)
{
- /* Fill and then empty the write buffer. */
- data = writebuf_push(conn, data, end);
- SVN_ERR(writebuf_flush(conn, pool));
+ if (conn->write_pos > 0)
+ SVN_ERR(writebuf_flush(conn, pool));
+
+ return writebuf_output(conn, pool, data, len);
}
- if (end - data > (apr_ssize_t)sizeof(conn->write_buf))
- SVN_ERR(writebuf_output(conn, pool, data, end - data));
- else
- writebuf_push(conn, data, end);
+ /* ensure room for the data to add */
+ if (conn->write_pos + len > sizeof(conn->write_buf))
+ SVN_ERR(writebuf_flush(conn, pool));
+
+ /* buffer the new data block as well */
+ memcpy(conn->write_buf + conn->write_pos, data, len);
+ conn->write_pos += len;
+
return SVN_NO_ERROR;
}
-static svn_error_t *writebuf_printf(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
- const char *fmt, ...)
- __attribute__ ((format(printf, 3, 4)));
-static svn_error_t *writebuf_printf(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
- const char *fmt, ...)
+static svn_error_t *
+writebuf_write_short_string(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
+ const char *data, apr_size_t len)
{
- va_list ap;
- char *str;
+ apr_size_t left = sizeof(conn->write_buf) - conn->write_pos;
+ if (len <= left)
+ {
+ memcpy(conn->write_buf + conn->write_pos, data, len);
+ conn->write_pos += len;
+ return SVN_NO_ERROR;
+ }
+ else
+ return writebuf_write(conn, pool, data, len);
+}
- va_start(ap, fmt);
- str = apr_pvsprintf(pool, fmt, ap);
- va_end(ap);
- return writebuf_write(conn, pool, str, strlen(str));
+static APR_INLINE svn_error_t *
+writebuf_writechar(svn_ra_svn_conn_t *conn, apr_pool_t *pool, char data)
+{
+ if (conn->write_pos < sizeof(conn->write_buf))
+ {
+ conn->write_buf[conn->write_pos] = data;
+ conn->write_pos++;
+
+ return SVN_NO_ERROR;
+ }
+ else
+ {
+ char temp = data;
+ return writebuf_write(conn, pool, &temp, 1);
+ }
}
/* --- READ BUFFER MANAGEMENT --- */
@@ -305,6 +358,31 @@ static svn_error_t *readbuf_input(svn_ra_svn_conn_t *conn, char *data,
return SVN_NO_ERROR;
}
+/* Treat the next LEN input bytes from CONN as "read" */
+static svn_error_t *readbuf_skip(svn_ra_svn_conn_t *conn, apr_uint64_t len)
+{
+ do
+ {
+ apr_size_t buflen = conn->read_end - conn->read_ptr;
+ apr_size_t copylen = (buflen < len) ? buflen : (apr_size_t)len;
+ conn->read_ptr += copylen;
+ len -= copylen;
+ if (len == 0)
+ break;
+
+ buflen = sizeof(conn->read_buf);
+ SVN_ERR(svn_ra_svn__stream_read(conn->stream, conn->read_buf, &buflen));
+ if (buflen == 0)
+ return svn_error_create(SVN_ERR_RA_SVN_CONNECTION_CLOSED, NULL, NULL);
+
+ conn->read_end = conn->read_buf + buflen;
+ conn->read_ptr = conn->read_buf;
+ }
+ while (len > 0);
+
+ return SVN_NO_ERROR;
+}
+
/* Read data from the socket into the read buffer, which must be empty. */
static svn_error_t *readbuf_fill(svn_ra_svn_conn_t *conn, apr_pool_t *pool)
{
@@ -408,35 +486,85 @@ static svn_error_t *readbuf_skip_leading_garbage(svn_ra_svn_conn_t *conn,
/* --- WRITING DATA ITEMS --- */
-svn_error_t *svn_ra_svn_write_number(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
- apr_uint64_t number)
+static svn_error_t *write_number(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
+ apr_uint64_t number, char follow)
+{
+ apr_size_t written;
+
+ /* SVN_INT64_BUFFER_SIZE includes space for a terminating NUL that
+ * svn__ui64toa will always append. */
+ if (conn->write_pos + SVN_INT64_BUFFER_SIZE >= sizeof(conn->write_buf))
+ SVN_ERR(writebuf_flush(conn, pool));
+
+ written = svn__ui64toa(conn->write_buf + conn->write_pos, number);
+ conn->write_buf[conn->write_pos + written] = follow;
+ conn->write_pos += written + 1;
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_number(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ apr_uint64_t number)
{
- return writebuf_printf(conn, pool, "%" APR_UINT64_T_FMT " ", number);
+ return write_number(conn, pool, number, ' ');
}
-svn_error_t *svn_ra_svn_write_string(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
- const svn_string_t *str)
+svn_error_t *
+svn_ra_svn__write_string(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const svn_string_t *str)
{
- SVN_ERR(writebuf_printf(conn, pool, "%" APR_SIZE_T_FMT ":", str->len));
+ if (str->len < 10)
+ {
+ SVN_ERR(writebuf_writechar(conn, pool, (char)(str->len + '0')));
+ SVN_ERR(writebuf_writechar(conn, pool, ':'));
+ }
+ else
+ SVN_ERR(write_number(conn, pool, str->len, ':'));
+
SVN_ERR(writebuf_write(conn, pool, str->data, str->len));
- SVN_ERR(writebuf_write(conn, pool, " ", 1));
+ SVN_ERR(writebuf_writechar(conn, pool, ' '));
return SVN_NO_ERROR;
}
-svn_error_t *svn_ra_svn_write_cstring(svn_ra_svn_conn_t *conn,
- apr_pool_t *pool, const char *s)
+svn_error_t *
+svn_ra_svn__write_cstring(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *s)
{
- return writebuf_printf(conn, pool, "%" APR_SIZE_T_FMT ":%s ", strlen(s), s);
+ apr_size_t len = strlen(s);
+
+ if (len < 10)
+ {
+ SVN_ERR(writebuf_writechar(conn, pool, (char)(len + '0')));
+ SVN_ERR(writebuf_writechar(conn, pool, ':'));
+ }
+ else
+ SVN_ERR(write_number(conn, pool, len, ':'));
+
+ SVN_ERR(writebuf_write(conn, pool, s, len));
+ SVN_ERR(writebuf_writechar(conn, pool, ' '));
+
+ return SVN_NO_ERROR;
}
-svn_error_t *svn_ra_svn_write_word(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
- const char *word)
+svn_error_t *
+svn_ra_svn__write_word(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *word)
{
- return writebuf_printf(conn, pool, "%s ", word);
+ SVN_ERR(writebuf_write_short_string(conn, pool, word, strlen(word)));
+ SVN_ERR(writebuf_writechar(conn, pool, ' '));
+
+ return SVN_NO_ERROR;
}
-svn_error_t *svn_ra_svn_write_proplist(svn_ra_svn_conn_t *conn,
- apr_pool_t *pool, apr_hash_t *props)
+svn_error_t *
+svn_ra_svn__write_proplist(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ apr_hash_t *props)
{
apr_pool_t *iterpool;
apr_hash_index_t *hi;
@@ -454,8 +582,8 @@ svn_error_t *svn_ra_svn_write_proplist(svn_ra_svn_conn_t *conn,
apr_hash_this(hi, &key, NULL, &val);
propname = key;
propval = val;
- SVN_ERR(svn_ra_svn_write_tuple(conn, iterpool, "cs",
- propname, propval));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, iterpool, "cs",
+ propname, propval));
}
svn_pool_destroy(iterpool);
}
@@ -463,98 +591,332 @@ svn_error_t *svn_ra_svn_write_proplist(svn_ra_svn_conn_t *conn,
return SVN_NO_ERROR;
}
-svn_error_t *svn_ra_svn_start_list(svn_ra_svn_conn_t *conn, apr_pool_t *pool)
+svn_error_t *
+svn_ra_svn__start_list(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool)
{
+ if (conn->write_pos + 2 <= sizeof(conn->write_buf))
+ {
+ conn->write_buf[conn->write_pos] = '(';
+ conn->write_buf[conn->write_pos+1] = ' ';
+ conn->write_pos += 2;
+ return SVN_NO_ERROR;
+ }
+
return writebuf_write(conn, pool, "( ", 2);
}
-svn_error_t *svn_ra_svn_end_list(svn_ra_svn_conn_t *conn, apr_pool_t *pool)
+svn_error_t *
+svn_ra_svn__end_list(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool)
{
+ if (conn->write_pos + 2 <= sizeof(conn->write_buf))
+ {
+ conn->write_buf[conn->write_pos] = ')';
+ conn->write_buf[conn->write_pos+1] = ' ';
+ conn->write_pos += 2;
+ return SVN_NO_ERROR;
+ }
+
return writebuf_write(conn, pool, ") ", 2);
}
-svn_error_t *svn_ra_svn_flush(svn_ra_svn_conn_t *conn, apr_pool_t *pool)
+svn_error_t *
+svn_ra_svn__flush(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool)
{
- return writebuf_flush(conn, pool);
+ SVN_ERR(writebuf_flush(conn, pool));
+ conn->may_check_for_error = TRUE;
+
+ return SVN_NO_ERROR;
}
/* --- WRITING TUPLES --- */
+static svn_error_t *
+vwrite_tuple_cstring(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list *ap)
+{
+ const char *cstr = va_arg(*ap, const char *);
+ SVN_ERR_ASSERT(cstr);
+ return svn_ra_svn__write_cstring(conn, pool, cstr);
+}
+
+static svn_error_t *
+vwrite_tuple_cstring_opt(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list *ap)
+{
+ const char *cstr = va_arg(*ap, const char *);
+ return cstr ? svn_ra_svn__write_cstring(conn, pool, cstr) : SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_tuple_string(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list *ap)
+{
+ const svn_string_t *str = va_arg(*ap, const svn_string_t *);
+ SVN_ERR_ASSERT(str);
+ return svn_ra_svn__write_string(conn, pool, str);
+}
+
+static svn_error_t *
+vwrite_tuple_string_opt(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list *ap)
+{
+ const svn_string_t *str = va_arg(*ap, const svn_string_t *);
+ return str ? svn_ra_svn__write_string(conn, pool, str) : SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_tuple_word(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list *ap)
+{
+ const char *cstr = va_arg(*ap, const char *);
+ SVN_ERR_ASSERT(cstr);
+ return svn_ra_svn__write_word(conn, pool, cstr);
+}
+
+static svn_error_t *
+vwrite_tuple_word_opt(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list *ap)
+{
+ const char *cstr = va_arg(*ap, const char *);
+ return cstr ? svn_ra_svn__write_word(conn, pool, cstr) : SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_tuple_revision(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list *ap)
+{
+ svn_revnum_t rev = va_arg(*ap, svn_revnum_t);
+ SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(rev));
+ return svn_ra_svn__write_number(conn, pool, rev);
+}
+
+static svn_error_t *
+vwrite_tuple_revision_opt(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list *ap)
+{
+ svn_revnum_t rev = va_arg(*ap, svn_revnum_t);
+ return SVN_IS_VALID_REVNUM(rev)
+ ? svn_ra_svn__write_number(conn, pool, rev)
+ : SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_tuple_number(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list *ap)
+{
+ return svn_ra_svn__write_number(conn, pool, va_arg(*ap, apr_uint64_t));
+}
+
+static svn_error_t *
+vwrite_tuple_boolean(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list *ap)
+{
+ const char *cstr = va_arg(*ap, svn_boolean_t) ? "true" : "false";
+ return svn_ra_svn__write_word(conn, pool, cstr);
+}
+
+static svn_error_t *
+write_tuple_cstring(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *cstr)
+{
+ SVN_ERR_ASSERT(cstr);
+ return svn_ra_svn__write_cstring(conn, pool, cstr);
+}
+
+static svn_error_t *
+write_tuple_cstring_opt(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *cstr)
+{
+ return cstr ? svn_ra_svn__write_cstring(conn, pool, cstr) : SVN_NO_ERROR;
+}
+
+static svn_error_t *
+write_tuple_string(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const svn_string_t *str)
+{
+ SVN_ERR_ASSERT(str);
+ return svn_ra_svn__write_string(conn, pool, str);
+}
+
+static svn_error_t *
+write_tuple_string_opt(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const svn_string_t *str)
+{
+ return str ? svn_ra_svn__write_string(conn, pool, str) : SVN_NO_ERROR;
+}
+
+static svn_error_t *
+write_tuple_start_list(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool)
+{
+ return svn_ra_svn__start_list(conn, pool);
+}
+
+static svn_error_t *
+write_tuple_end_list(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool)
+{
+ return svn_ra_svn__end_list(conn, pool);
+}
+
+static svn_error_t *
+write_tuple_revision(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_revnum_t rev)
+{
+ SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(rev));
+ return svn_ra_svn__write_number(conn, pool, rev);
+}
+
+static svn_error_t *
+write_tuple_revision_opt(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_revnum_t rev)
+{
+ return SVN_IS_VALID_REVNUM(rev)
+ ? svn_ra_svn__write_number(conn, pool, rev)
+ : SVN_NO_ERROR;
+}
+
+static svn_error_t *
+write_tuple_boolean(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_boolean_t value)
+{
+ const char *cstr = value ? "true" : "false";
+ return svn_ra_svn__write_word(conn, pool, cstr);
+}
+
+static svn_error_t *
+write_tuple_depth(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_depth_t depth)
+{
+ return svn_ra_svn__write_word(conn, pool, svn_depth_to_word(depth));
+}
+
+
+static svn_error_t *
+write_cmd_add_node(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ const char *parent_token,
+ const char *token,
+ const char *copy_path,
+ svn_revnum_t copy_rev)
+{
+ SVN_ERR(write_tuple_cstring(conn, pool, path));
+ SVN_ERR(write_tuple_cstring(conn, pool, parent_token));
+ SVN_ERR(write_tuple_cstring(conn, pool, token));
+ SVN_ERR(write_tuple_start_list(conn, pool));
+ SVN_ERR(write_tuple_cstring_opt(conn, pool, copy_path));
+ SVN_ERR(write_tuple_revision_opt(conn, pool, copy_rev));
+ SVN_ERR(write_tuple_end_list(conn, pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+write_cmd_open_node(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ const char *parent_token,
+ const char *token,
+ svn_revnum_t rev)
+{
+ SVN_ERR(write_tuple_cstring(conn, pool, path));
+ SVN_ERR(write_tuple_cstring(conn, pool, parent_token));
+ SVN_ERR(write_tuple_cstring(conn, pool, token));
+ SVN_ERR(write_tuple_start_list(conn, pool));
+ SVN_ERR(write_tuple_revision_opt(conn, pool, rev));
+ SVN_ERR(write_tuple_end_list(conn, pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+write_cmd_change_node_prop(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *token,
+ const char *name,
+ const svn_string_t *value)
+{
+ SVN_ERR(write_tuple_cstring(conn, pool, token));
+ SVN_ERR(write_tuple_cstring(conn, pool, name));
+ SVN_ERR(write_tuple_start_list(conn, pool));
+ SVN_ERR(write_tuple_string_opt(conn, pool, value));
+ SVN_ERR(write_tuple_end_list(conn, pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+write_cmd_absent_node(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ const char *token)
+{
+ SVN_ERR(write_tuple_cstring(conn, pool, path));
+ SVN_ERR(write_tuple_cstring(conn, pool, token));
+
+ return SVN_NO_ERROR;
+}
+
+
+
+
static svn_error_t *vwrite_tuple(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
- const char *fmt, va_list ap)
+ const char *fmt, va_list *ap)
{
svn_boolean_t opt = FALSE;
- svn_revnum_t rev;
- const char *cstr;
- const svn_string_t *str;
if (*fmt == '!')
fmt++;
else
- SVN_ERR(svn_ra_svn_start_list(conn, pool));
+ SVN_ERR(svn_ra_svn__start_list(conn, pool));
for (; *fmt; fmt++)
{
- if (*fmt == 'n' && !opt)
- SVN_ERR(svn_ra_svn_write_number(conn, pool, va_arg(ap, apr_uint64_t)));
- else if (*fmt == 'r')
- {
- rev = va_arg(ap, svn_revnum_t);
- SVN_ERR_ASSERT(opt || SVN_IS_VALID_REVNUM(rev));
- if (SVN_IS_VALID_REVNUM(rev))
- SVN_ERR(svn_ra_svn_write_number(conn, pool, rev));
- }
+ if (*fmt == 'c')
+ SVN_ERR(opt ? vwrite_tuple_cstring_opt(conn, pool, ap)
+ : vwrite_tuple_cstring(conn, pool, ap));
else if (*fmt == 's')
- {
- str = va_arg(ap, const svn_string_t *);
- SVN_ERR_ASSERT(opt || str);
- if (str)
- SVN_ERR(svn_ra_svn_write_string(conn, pool, str));
- }
- else if (*fmt == 'c')
- {
- cstr = va_arg(ap, const char *);
- SVN_ERR_ASSERT(opt || cstr);
- if (cstr)
- SVN_ERR(svn_ra_svn_write_cstring(conn, pool, cstr));
- }
- else if (*fmt == 'w')
- {
- cstr = va_arg(ap, const char *);
- SVN_ERR_ASSERT(opt || cstr);
- if (cstr)
- SVN_ERR(svn_ra_svn_write_word(conn, pool, cstr));
- }
- else if (*fmt == 'b' && !opt)
- {
- cstr = va_arg(ap, svn_boolean_t) ? "true" : "false";
- SVN_ERR(svn_ra_svn_write_word(conn, pool, cstr));
- }
- else if (*fmt == '?')
- opt = TRUE;
+ SVN_ERR(opt ? vwrite_tuple_string_opt(conn, pool, ap)
+ : vwrite_tuple_string(conn, pool, ap));
else if (*fmt == '(' && !opt)
- SVN_ERR(svn_ra_svn_start_list(conn, pool));
+ SVN_ERR(write_tuple_start_list(conn, pool));
else if (*fmt == ')')
{
- SVN_ERR(svn_ra_svn_end_list(conn, pool));
+ SVN_ERR(write_tuple_end_list(conn, pool));
opt = FALSE;
}
+ else if (*fmt == '?')
+ opt = TRUE;
+ else if (*fmt == 'w')
+ SVN_ERR(opt ? vwrite_tuple_word_opt(conn, pool, ap)
+ : vwrite_tuple_word(conn, pool, ap));
+ else if (*fmt == 'r')
+ SVN_ERR(opt ? vwrite_tuple_revision_opt(conn, pool, ap)
+ : vwrite_tuple_revision(conn, pool, ap));
+ else if (*fmt == 'n' && !opt)
+ SVN_ERR(vwrite_tuple_number(conn, pool, ap));
+ else if (*fmt == 'b' && !opt)
+ SVN_ERR(vwrite_tuple_boolean(conn, pool, ap));
else if (*fmt == '!' && !*(fmt + 1))
return SVN_NO_ERROR;
else
SVN_ERR_MALFUNCTION();
}
- SVN_ERR(svn_ra_svn_end_list(conn, pool));
+ SVN_ERR(svn_ra_svn__end_list(conn, pool));
return SVN_NO_ERROR;
}
-svn_error_t *svn_ra_svn_write_tuple(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
- const char *fmt, ...)
+svn_error_t *
+svn_ra_svn__write_tuple(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *fmt, ...)
{
svn_error_t *err;
va_list ap;
va_start(ap, fmt);
- err = vwrite_tuple(conn, pool, fmt, ap);
+ err = vwrite_tuple(conn, pool, fmt, &ap);
va_end(ap);
return err;
}
@@ -613,7 +975,7 @@ static svn_error_t *read_string(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
? len
: SUSPICIOUSLY_HUGE_STRING_SIZE_THRESHOLD;
- svn_stringbuf_ensure(stringbuf, stringbuf->len + readbuf_len + 1);
+ svn_stringbuf_ensure(stringbuf, stringbuf->len + readbuf_len);
dest = stringbuf->data + stringbuf->len;
}
@@ -659,7 +1021,8 @@ static svn_error_t *read_item(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
if (!svn_ctype_isdigit(c))
break;
val = val * 10 + (c - '0');
- if ((val / 10) != prev_val) /* val wrapped past maximum value */
+ /* val wrapped past maximum value? */
+ if (prev_val >= (APR_UINT64_MAX / 10) && (val / 10) != prev_val)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Number is larger than maximum"));
}
@@ -713,8 +1076,99 @@ static svn_error_t *read_item(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
return SVN_NO_ERROR;
}
-svn_error_t *svn_ra_svn_read_item(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
- svn_ra_svn_item_t **item)
+/* Given the first non-whitespace character FIRST_CHAR, read the first
+ * command (word) encountered in CONN into *ITEM. If ITEM is NULL, skip
+ * to the end of the current list. Use POOL for allocations. */
+static svn_error_t *
+read_command_only(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
+ const char **item, char first_char)
+{
+ char c = first_char;
+
+ /* Determine the item type and read it in. Make sure that c is the
+ * first character at the end of the item so we can test to make
+ * sure it's whitespace. */
+ if (svn_ctype_isdigit(c))
+ {
+ /* It's a number or a string. Read the number part, either way. */
+ apr_uint64_t val, prev_val=0;
+ val = c - '0';
+ while (1)
+ {
+ prev_val = val;
+ SVN_ERR(readbuf_getchar(conn, pool, &c));
+ if (!svn_ctype_isdigit(c))
+ break;
+ val = val * 10 + (c - '0');
+ if (prev_val >= (APR_UINT64_MAX / 10)) /* > maximum value? */
+ return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
+ _("Number is larger than maximum"));
+ }
+ if (c == ':')
+ {
+ /* It's a string. */
+ SVN_ERR(readbuf_skip(conn, val));
+ SVN_ERR(readbuf_getchar(conn, pool, &c));
+ }
+ }
+ else if (svn_ctype_isalpha(c))
+ {
+ /* It's a word. */
+ if (item)
+ {
+ /* This is the word we want to read */
+
+ char *buf = apr_palloc(pool, 32);
+ apr_size_t len = 1;
+ buf[0] = c;
+
+ while (1)
+ {
+ SVN_ERR(readbuf_getchar(conn, pool, &c));
+ if (!svn_ctype_isalnum(c) && c != '-')
+ break;
+ buf[len] = c;
+ if (++len == 32)
+ return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
+ _("Word too long"));
+ }
+ buf[len] = 0;
+ *item = buf;
+ }
+ else
+ {
+ /* we don't need the actual word, just skip it */
+ do
+ {
+ SVN_ERR(readbuf_getchar(conn, pool, &c));
+ }
+ while (svn_ctype_isalnum(c) || c == '-');
+ }
+ }
+ else if (c == '(')
+ {
+ /* Read in the list items. */
+ while (1)
+ {
+ SVN_ERR(readbuf_getchar_skip_whitespace(conn, pool, &c));
+ if (c == ')')
+ break;
+
+ if (item && *item == NULL)
+ SVN_ERR(read_command_only(conn, pool, item, c));
+ else
+ SVN_ERR(read_command_only(conn, pool, NULL, c));
+ }
+ SVN_ERR(readbuf_getchar(conn, pool, &c));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__read_item(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_ra_svn_item_t **item)
{
char c;
@@ -725,8 +1179,9 @@ svn_error_t *svn_ra_svn_read_item(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
return read_item(conn, pool, *item, c, 0);
}
-svn_error_t *svn_ra_svn_skip_leading_garbage(svn_ra_svn_conn_t *conn,
- apr_pool_t *pool)
+svn_error_t *
+svn_ra_svn__skip_leading_garbage(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool)
{
return readbuf_skip_leading_garbage(conn, pool);
}
@@ -831,9 +1286,10 @@ static svn_error_t *vparse_tuple(const apr_array_header_t *items, apr_pool_t *po
return SVN_NO_ERROR;
}
-svn_error_t *svn_ra_svn_parse_tuple(const apr_array_header_t *list,
- apr_pool_t *pool,
- const char *fmt, ...)
+svn_error_t *
+svn_ra_svn__parse_tuple(const apr_array_header_t *list,
+ apr_pool_t *pool,
+ const char *fmt, ...)
{
svn_error_t *err;
va_list ap;
@@ -844,14 +1300,16 @@ svn_error_t *svn_ra_svn_parse_tuple(const apr_array_header_t *list,
return err;
}
-svn_error_t *svn_ra_svn_read_tuple(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
- const char *fmt, ...)
+svn_error_t *
+svn_ra_svn__read_tuple(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *fmt, ...)
{
va_list ap;
svn_ra_svn_item_t *item;
svn_error_t *err;
- SVN_ERR(svn_ra_svn_read_item(conn, pool, &item));
+ SVN_ERR(svn_ra_svn__read_item(conn, pool, &item));
if (item->kind != SVN_RA_SVN_LIST)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Malformed network data"));
@@ -861,9 +1319,23 @@ svn_error_t *svn_ra_svn_read_tuple(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
return err;
}
-svn_error_t *svn_ra_svn_parse_proplist(const apr_array_header_t *list,
- apr_pool_t *pool,
- apr_hash_t **props)
+svn_error_t *
+svn_ra_svn__read_command_only(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char **command)
+{
+ char c;
+ SVN_ERR(readbuf_getchar_skip_whitespace(conn, pool, &c));
+
+ *command = NULL;
+ return read_command_only(conn, pool, command, c);
+}
+
+
+svn_error_t *
+svn_ra_svn__parse_proplist(const apr_array_header_t *list,
+ apr_pool_t *pool,
+ apr_hash_t **props)
{
char *name;
svn_string_t *value;
@@ -877,8 +1349,9 @@ svn_error_t *svn_ra_svn_parse_proplist(const apr_array_header_t *list,
if (elt->kind != SVN_RA_SVN_LIST)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Proplist element not a list"));
- SVN_ERR(svn_ra_svn_parse_tuple(elt->u.list, pool, "cs", &name, &value));
- apr_hash_set(*props, name, APR_HASH_KEY_STRING, value);
+ SVN_ERR(svn_ra_svn__parse_tuple(elt->u.list, pool, "cs",
+ &name, &value));
+ svn_hash_sets(*props, name, value);
}
return SVN_NO_ERROR;
@@ -924,8 +1397,8 @@ svn_error_t *svn_ra_svn__handle_failure_status(const apr_array_header_t *params,
if (elt->kind != SVN_RA_SVN_LIST)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Malformed error list"));
- SVN_ERR(svn_ra_svn_parse_tuple(elt->u.list, subpool, "nccn", &apr_err,
- &message, &file, &line));
+ SVN_ERR(svn_ra_svn__parse_tuple(elt->u.list, subpool, "nccn",
+ &apr_err, &message, &file, &line));
/* The message field should have been optional, but we can't
easily change that, so "" means a nonexistent message. */
if (!*message)
@@ -954,16 +1427,17 @@ svn_error_t *svn_ra_svn__handle_failure_status(const apr_array_header_t *params,
return err;
}
-svn_error_t *svn_ra_svn_read_cmd_response(svn_ra_svn_conn_t *conn,
- apr_pool_t *pool,
- const char *fmt, ...)
+svn_error_t *
+svn_ra_svn__read_cmd_response(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *fmt, ...)
{
va_list ap;
const char *status;
apr_array_header_t *params;
svn_error_t *err;
- SVN_ERR(svn_ra_svn_read_tuple(conn, pool, "wl", &status, &params));
+ SVN_ERR(svn_ra_svn__read_tuple(conn, pool, "wl", &status, &params));
if (strcmp(status, "success") == 0)
{
va_start(ap, fmt);
@@ -981,11 +1455,12 @@ svn_error_t *svn_ra_svn_read_cmd_response(svn_ra_svn_conn_t *conn,
status);
}
-svn_error_t *svn_ra_svn_handle_commands2(svn_ra_svn_conn_t *conn,
- apr_pool_t *pool,
- const svn_ra_svn_cmd_entry_t *commands,
- void *baton,
- svn_boolean_t error_on_disconnect)
+svn_error_t *
+svn_ra_svn__handle_commands2(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const svn_ra_svn_cmd_entry_t *commands,
+ void *baton,
+ svn_boolean_t error_on_disconnect)
{
apr_pool_t *subpool = svn_pool_create(pool);
apr_pool_t *iterpool = svn_pool_create(subpool);
@@ -996,12 +1471,12 @@ svn_error_t *svn_ra_svn_handle_commands2(svn_ra_svn_conn_t *conn,
apr_hash_t *cmd_hash = apr_hash_make(subpool);
for (command = commands; command->cmdname; command++)
- apr_hash_set(cmd_hash, command->cmdname, APR_HASH_KEY_STRING, command);
+ svn_hash_sets(cmd_hash, command->cmdname, command);
while (1)
{
svn_pool_clear(iterpool);
- err = svn_ra_svn_read_tuple(conn, iterpool, "wl", &cmdname, &params);
+ err = svn_ra_svn__read_tuple(conn, iterpool, "wl", &cmdname, &params);
if (err)
{
if (!error_on_disconnect
@@ -1013,20 +1488,20 @@ svn_error_t *svn_ra_svn_handle_commands2(svn_ra_svn_conn_t *conn,
}
return err;
}
- command = apr_hash_get(cmd_hash, cmdname, APR_HASH_KEY_STRING);
+ command = svn_hash_gets(cmd_hash, cmdname);
if (command)
err = (*command->handler)(conn, iterpool, params, baton);
else
{
err = svn_error_createf(SVN_ERR_RA_SVN_UNKNOWN_CMD, NULL,
- _("Unknown command '%s'"), cmdname);
+ _("Unknown editor command '%s'"), cmdname);
err = svn_error_create(SVN_ERR_RA_SVN_CMD_ERR, err, NULL);
}
if (err && err->apr_err == SVN_ERR_RA_SVN_CMD_ERR)
{
- write_err = svn_ra_svn_write_cmd_failure(
+ write_err = svn_ra_svn__write_cmd_failure(
conn, iterpool,
svn_ra_svn__locate_real_error_child(err));
svn_error_clear(err);
@@ -1044,69 +1519,771 @@ svn_error_t *svn_ra_svn_handle_commands2(svn_ra_svn_conn_t *conn,
return SVN_NO_ERROR;
}
-svn_error_t *svn_ra_svn_handle_commands(svn_ra_svn_conn_t *conn,
- apr_pool_t *pool,
- const svn_ra_svn_cmd_entry_t *commands,
- void *baton)
+svn_error_t *
+svn_ra_svn__write_cmd_target_rev(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_revnum_t rev)
{
- return svn_ra_svn_handle_commands2(conn, pool, commands, baton, TRUE);
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( target-rev ( ", 15));
+ SVN_ERR(write_tuple_revision(conn, pool, rev));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
}
-svn_error_t *svn_ra_svn_write_cmd(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
- const char *cmdname, const char *fmt, ...)
+svn_error_t *
+svn_ra_svn__write_cmd_open_root(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_revnum_t rev,
+ const char *token)
{
- va_list ap;
- svn_error_t *err;
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( open-root ( ", 14));
+ SVN_ERR(write_tuple_start_list(conn, pool));
+ SVN_ERR(write_tuple_revision_opt(conn, pool, rev));
+ SVN_ERR(write_tuple_end_list(conn, pool));
+ SVN_ERR(write_tuple_cstring(conn, pool, token));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_delete_entry(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ svn_revnum_t rev,
+ const char *token)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( delete-entry ( ", 17));
+ SVN_ERR(write_tuple_cstring(conn, pool, path));
+ SVN_ERR(write_tuple_start_list(conn, pool));
+ SVN_ERR(write_tuple_revision_opt(conn, pool, rev));
+ SVN_ERR(write_tuple_end_list(conn, pool));
+ SVN_ERR(write_tuple_cstring(conn, pool, token));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_add_dir(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ const char *parent_token,
+ const char *token,
+ const char *copy_path,
+ svn_revnum_t copy_rev)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( add-dir ( ", 12));
+ SVN_ERR(write_cmd_add_node(conn, pool, path, parent_token, token,
+ copy_path, copy_rev));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_open_dir(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ const char *parent_token,
+ const char *token,
+ svn_revnum_t rev)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( open-dir ( ", 13));
+ SVN_ERR(write_cmd_open_node(conn, pool, path, parent_token, token, rev));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_change_dir_prop(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *token,
+ const char *name,
+ const svn_string_t *value)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( change-dir-prop ( ", 20));
+ SVN_ERR(write_cmd_change_node_prop(conn, pool, token, name, value));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_close_dir(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *token)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( close-dir ( ", 14));
+ SVN_ERR(write_tuple_cstring(conn, pool, token));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_absent_dir(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ const char *parent_token)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( absent-dir ( ", 15));
+ SVN_ERR(write_cmd_absent_node(conn, pool, path, parent_token));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_add_file(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ const char *parent_token,
+ const char *token,
+ const char *copy_path,
+ svn_revnum_t copy_rev)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( add-file ( ", 13));
+ SVN_ERR(write_cmd_add_node(conn, pool, path, parent_token, token,
+ copy_path, copy_rev));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_open_file(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ const char *parent_token,
+ const char *token,
+ svn_revnum_t rev)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( open-file ( ", 14));
+ SVN_ERR(write_cmd_open_node(conn, pool, path, parent_token, token, rev));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_change_file_prop(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *token,
+ const char *name,
+ const svn_string_t *value)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( change-file-prop ( ", 21));
+ SVN_ERR(write_cmd_change_node_prop(conn, pool, token, name, value));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_close_file(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *token,
+ const char *text_checksum)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( close-file ( ", 15));
+ SVN_ERR(write_tuple_cstring(conn, pool, token));
+ SVN_ERR(write_tuple_start_list(conn, pool));
+ SVN_ERR(write_tuple_cstring_opt(conn, pool, text_checksum));
+ SVN_ERR(write_tuple_end_list(conn, pool));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_absent_file(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ const char *parent_token)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( absent-file ( ", 16));
+ SVN_ERR(write_cmd_absent_node(conn, pool, path, parent_token));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_textdelta_chunk(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *token,
+ const svn_string_t *chunk)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( textdelta-chunk ( ", 20));
+ SVN_ERR(write_tuple_cstring(conn, pool, token));
+ SVN_ERR(write_tuple_string(conn, pool, chunk));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_textdelta_end(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *token)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( textdelta-end ( ", 18));
+ SVN_ERR(write_tuple_cstring(conn, pool, token));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_apply_textdelta(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *token,
+ const char *base_checksum)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( apply-textdelta ( ", 20));
+ SVN_ERR(write_tuple_cstring(conn, pool, token));
+ SVN_ERR(write_tuple_start_list(conn, pool));
+ SVN_ERR(write_tuple_cstring_opt(conn, pool, base_checksum));
+ SVN_ERR(write_tuple_end_list(conn, pool));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_close_edit(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool)
+{
+ return writebuf_write_short_string(conn, pool, "( close-edit ( ) ) ", 19);
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_abort_edit(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool)
+{
+ return writebuf_write_short_string(conn, pool, "( abort-edit ( ) ) ", 19);
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_set_path(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ svn_revnum_t rev,
+ svn_boolean_t start_empty,
+ const char *lock_token,
+ svn_depth_t depth)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( set-path ( ", 13));
+ SVN_ERR(write_tuple_cstring(conn, pool, path));
+ SVN_ERR(write_tuple_revision(conn, pool, rev));
+ SVN_ERR(write_tuple_boolean(conn, pool, start_empty));
+ SVN_ERR(write_tuple_start_list(conn, pool));
+ SVN_ERR(write_tuple_cstring_opt(conn, pool, lock_token));
+ SVN_ERR(write_tuple_end_list(conn, pool));
+ SVN_ERR(write_tuple_depth(conn, pool, depth));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_delete_path(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( delete-path ( ", 16));
+ SVN_ERR(write_tuple_cstring(conn, pool, path));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_link_path(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ const char *url,
+ svn_revnum_t rev,
+ svn_boolean_t start_empty,
+ const char *lock_token,
+ svn_depth_t depth)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( link-path ( ", 14));
+ SVN_ERR(write_tuple_cstring(conn, pool, path));
+ SVN_ERR(write_tuple_cstring(conn, pool, url));
+ SVN_ERR(write_tuple_revision(conn, pool, rev));
+ SVN_ERR(write_tuple_boolean(conn, pool, start_empty));
+ SVN_ERR(write_tuple_start_list(conn, pool));
+ SVN_ERR(write_tuple_cstring_opt(conn, pool,lock_token));
+ SVN_ERR(write_tuple_end_list(conn, pool));
+ SVN_ERR(write_tuple_depth(conn, pool, depth));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_finish_report(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool)
+{
+ return writebuf_write_short_string(conn, pool, "( finish-report ( ) ) ", 22);
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_abort_report(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool)
+{
+ return writebuf_write_short_string(conn, pool, "( abort-report ( ) ) ", 21);
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_reparent(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *url)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( reparent ( ", 13));
+ SVN_ERR(write_tuple_cstring(conn, pool, url));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_get_latest_rev(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool)
+{
+ return writebuf_write_short_string(conn, pool, "( get-latest-rev ( ) ) ", 23);
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_get_dated_rev(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ apr_time_t tm)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( get-dated-rev ( ", 18));
+ SVN_ERR(write_tuple_cstring(conn, pool, svn_time_to_cstring(tm, pool)));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_change_rev_prop2(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_revnum_t rev,
+ const char *name,
+ const svn_string_t *value,
+ svn_boolean_t dont_care,
+ const svn_string_t *old_value)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( change-rev-prop2 ( ", 21));
+ SVN_ERR(write_tuple_revision(conn, pool, rev));
+ SVN_ERR(write_tuple_cstring(conn, pool, name));
+ SVN_ERR(write_tuple_start_list(conn, pool));
+ SVN_ERR(write_tuple_string_opt(conn, pool, value));
+ SVN_ERR(write_tuple_end_list(conn, pool));
+ SVN_ERR(write_tuple_start_list(conn, pool));
+ SVN_ERR(write_tuple_boolean(conn, pool, dont_care));
+ SVN_ERR(write_tuple_string_opt(conn, pool, old_value));
+ SVN_ERR(write_tuple_end_list(conn, pool));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_change_rev_prop(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_revnum_t rev,
+ const char *name,
+ const svn_string_t *value)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( change-rev-prop ( ", 20));
+ SVN_ERR(write_tuple_revision(conn, pool, rev));
+ SVN_ERR(write_tuple_cstring(conn, pool, name));
+ SVN_ERR(write_tuple_string_opt(conn, pool, value));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_rev_proplist(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_revnum_t rev)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( rev-proplist ( ", 17));
+ SVN_ERR(write_tuple_revision(conn, pool, rev));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_rev_prop(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_revnum_t rev,
+ const char *name)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( rev-prop ( ", 13));
+ SVN_ERR(write_tuple_revision(conn, pool, rev));
+ SVN_ERR(write_tuple_cstring(conn, pool, name));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_get_file(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ svn_revnum_t rev,
+ svn_boolean_t props,
+ svn_boolean_t stream)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( get-file ( ", 13));
+ SVN_ERR(write_tuple_cstring(conn, pool, path));
+ SVN_ERR(write_tuple_start_list(conn, pool));
+ SVN_ERR(write_tuple_revision_opt(conn, pool, rev));
+ SVN_ERR(write_tuple_end_list(conn, pool));
+ SVN_ERR(write_tuple_boolean(conn, pool, props));
+ SVN_ERR(write_tuple_boolean(conn, pool, stream));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_update(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_revnum_t rev,
+ const char *target,
+ svn_boolean_t recurse,
+ svn_depth_t depth,
+ svn_boolean_t send_copyfrom_args,
+ svn_boolean_t ignore_ancestry)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( update ( ", 11));
+ SVN_ERR(write_tuple_start_list(conn, pool));
+ SVN_ERR(write_tuple_revision_opt(conn, pool, rev));
+ SVN_ERR(write_tuple_end_list(conn, pool));
+ SVN_ERR(write_tuple_cstring(conn, pool, target));
+ SVN_ERR(write_tuple_boolean(conn, pool, recurse));
+ SVN_ERR(write_tuple_depth(conn, pool, depth));
+ SVN_ERR(write_tuple_boolean(conn, pool, send_copyfrom_args));
+ SVN_ERR(write_tuple_boolean(conn, pool, ignore_ancestry));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_switch(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_revnum_t rev,
+ const char *target,
+ svn_boolean_t recurse,
+ const char *switch_url,
+ svn_depth_t depth,
+ svn_boolean_t send_copyfrom_args,
+ svn_boolean_t ignore_ancestry)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( switch ( ", 11));
+ SVN_ERR(write_tuple_start_list(conn, pool));
+ SVN_ERR(write_tuple_revision_opt(conn, pool, rev));
+ SVN_ERR(write_tuple_end_list(conn, pool));
+ SVN_ERR(write_tuple_cstring(conn, pool, target));
+ SVN_ERR(write_tuple_boolean(conn, pool, recurse));
+ SVN_ERR(write_tuple_cstring(conn, pool, switch_url));
+ SVN_ERR(write_tuple_depth(conn, pool, depth));
+ SVN_ERR(write_tuple_boolean(conn, pool, send_copyfrom_args));
+ SVN_ERR(write_tuple_boolean(conn, pool, ignore_ancestry));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_status(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *target,
+ svn_boolean_t recurse,
+ svn_revnum_t rev,
+ svn_depth_t depth)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( status ( ", 11));
+ SVN_ERR(write_tuple_cstring(conn, pool, target));
+ SVN_ERR(write_tuple_boolean(conn, pool, recurse));
+ SVN_ERR(write_tuple_start_list(conn, pool));
+ SVN_ERR(write_tuple_revision_opt(conn, pool, rev));
+ SVN_ERR(write_tuple_end_list(conn, pool));
+ SVN_ERR(write_tuple_depth(conn, pool, depth));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_diff(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_revnum_t rev,
+ const char *target,
+ svn_boolean_t recurse,
+ svn_boolean_t ignore_ancestry,
+ const char *versus_url,
+ svn_boolean_t text_deltas,
+ svn_depth_t depth)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( diff ( ", 9));
+ SVN_ERR(write_tuple_start_list(conn, pool));
+ SVN_ERR(write_tuple_revision_opt(conn, pool, rev));
+ SVN_ERR(write_tuple_end_list(conn, pool));
+ SVN_ERR(write_tuple_cstring(conn, pool, target));
+ SVN_ERR(write_tuple_boolean(conn, pool, recurse));
+ SVN_ERR(write_tuple_boolean(conn, pool, ignore_ancestry));
+ SVN_ERR(write_tuple_cstring(conn, pool, versus_url));
+ SVN_ERR(write_tuple_boolean(conn, pool, text_deltas));
+ SVN_ERR(write_tuple_depth(conn, pool, depth));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_check_path(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ svn_revnum_t rev)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( check-path ( ", 15));
+ SVN_ERR(write_tuple_cstring(conn, pool, path));
+ SVN_ERR(write_tuple_start_list(conn, pool));
+ SVN_ERR(write_tuple_revision_opt(conn, pool, rev));
+ SVN_ERR(write_tuple_end_list(conn, pool));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
- SVN_ERR(svn_ra_svn_start_list(conn, pool));
- SVN_ERR(svn_ra_svn_write_word(conn, pool, cmdname));
- va_start(ap, fmt);
- err = vwrite_tuple(conn, pool, fmt, ap);
- va_end(ap);
- if (err)
- return err;
- SVN_ERR(svn_ra_svn_end_list(conn, pool));
return SVN_NO_ERROR;
}
-svn_error_t *svn_ra_svn_write_cmd_response(svn_ra_svn_conn_t *conn,
- apr_pool_t *pool,
- const char *fmt, ...)
+svn_error_t *
+svn_ra_svn__write_cmd_stat(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ svn_revnum_t rev)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( stat ( ", 9));
+ SVN_ERR(write_tuple_cstring(conn, pool, path));
+ SVN_ERR(write_tuple_start_list(conn, pool));
+ SVN_ERR(write_tuple_revision_opt(conn, pool, rev));
+ SVN_ERR(write_tuple_end_list(conn, pool));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_get_file_revs(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ svn_revnum_t start,
+ svn_revnum_t end,
+ svn_boolean_t include_merged_revisions)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( get-file-revs ( ", 18));
+ SVN_ERR(write_tuple_cstring(conn, pool, path));
+ SVN_ERR(write_tuple_start_list(conn, pool));
+ SVN_ERR(write_tuple_revision_opt(conn, pool, start));
+ SVN_ERR(write_tuple_end_list(conn, pool));
+ SVN_ERR(write_tuple_start_list(conn, pool));
+ SVN_ERR(write_tuple_revision_opt(conn, pool, end));
+ SVN_ERR(write_tuple_end_list(conn, pool));
+ SVN_ERR(write_tuple_boolean(conn, pool, include_merged_revisions));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_lock(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ const char *comment,
+ svn_boolean_t steal_lock,
+ svn_revnum_t revnum)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( lock ( ", 9));
+ SVN_ERR(write_tuple_cstring(conn, pool, path));
+ SVN_ERR(write_tuple_start_list(conn, pool));
+ SVN_ERR(write_tuple_cstring_opt(conn, pool, comment));
+ SVN_ERR(write_tuple_end_list(conn, pool));
+ SVN_ERR(write_tuple_boolean(conn, pool, steal_lock));
+ SVN_ERR(write_tuple_start_list(conn, pool));
+ SVN_ERR(write_tuple_revision_opt(conn, pool, revnum));
+ SVN_ERR(write_tuple_end_list(conn, pool));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_unlock(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ const char *token,
+ svn_boolean_t break_lock)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( unlock ( ", 11));
+ SVN_ERR(write_tuple_cstring(conn, pool, path));
+ SVN_ERR(write_tuple_start_list(conn, pool));
+ SVN_ERR(write_tuple_cstring_opt(conn, pool, token));
+ SVN_ERR(write_tuple_end_list(conn, pool));
+ SVN_ERR(write_tuple_boolean(conn, pool, break_lock));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_get_lock(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( get-lock ( ", 13));
+ SVN_ERR(write_tuple_cstring(conn, pool, path));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_get_locks(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ svn_depth_t depth)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( get-locks ( ", 14));
+ SVN_ERR(write_tuple_cstring(conn, pool, path));
+ SVN_ERR(write_tuple_start_list(conn, pool));
+ SVN_ERR(write_tuple_depth(conn, pool, depth));
+ SVN_ERR(write_tuple_end_list(conn, pool));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_replay(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_revnum_t rev,
+ svn_revnum_t low_water_mark,
+ svn_boolean_t send_deltas)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( replay ( ", 11));
+ SVN_ERR(write_tuple_revision(conn, pool, rev));
+ SVN_ERR(write_tuple_revision(conn, pool, low_water_mark));
+ SVN_ERR(write_tuple_boolean(conn, pool, send_deltas));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_replay_range(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_revnum_t start_revision,
+ svn_revnum_t end_revision,
+ svn_revnum_t low_water_mark,
+ svn_boolean_t send_deltas)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( replay-range ( ", 17));
+ SVN_ERR(write_tuple_revision(conn, pool, start_revision));
+ SVN_ERR(write_tuple_revision(conn, pool, end_revision));
+ SVN_ERR(write_tuple_revision(conn, pool, low_water_mark));
+ SVN_ERR(write_tuple_boolean(conn, pool, send_deltas));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_get_deleted_rev(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ svn_revnum_t peg_revision,
+ svn_revnum_t end_revision)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( get-deleted-rev ( ", 20));
+ SVN_ERR(write_tuple_cstring(conn, pool, path));
+ SVN_ERR(write_tuple_revision(conn, pool, peg_revision));
+ SVN_ERR(write_tuple_revision(conn, pool, end_revision));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_get_iprops(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *path,
+ svn_revnum_t revision)
+{
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( get-iprops ( ", 15));
+ SVN_ERR(write_tuple_cstring(conn, pool, path));
+ SVN_ERR(write_tuple_start_list(conn, pool));
+ SVN_ERR(write_tuple_revision_opt(conn, pool, revision));
+ SVN_ERR(write_tuple_end_list(conn, pool));
+ SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_ra_svn__write_cmd_finish_replay(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool)
+{
+ return writebuf_write_short_string(conn, pool, "( finish-replay ( ) ) ", 22);
+}
+
+svn_error_t *svn_ra_svn__write_cmd_response(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char *fmt, ...)
{
va_list ap;
svn_error_t *err;
- SVN_ERR(svn_ra_svn_start_list(conn, pool));
- SVN_ERR(svn_ra_svn_write_word(conn, pool, "success"));
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( success ", 10));
va_start(ap, fmt);
- err = vwrite_tuple(conn, pool, fmt, ap);
+ err = vwrite_tuple(conn, pool, fmt, &ap);
va_end(ap);
- if (err)
- return err;
- SVN_ERR(svn_ra_svn_end_list(conn, pool));
- return SVN_NO_ERROR;
+ return err ? svn_error_trace(err) : svn_ra_svn__end_list(conn, pool);
}
-svn_error_t *svn_ra_svn_write_cmd_failure(svn_ra_svn_conn_t *conn,
- apr_pool_t *pool, svn_error_t *err)
+svn_error_t *svn_ra_svn__write_cmd_failure(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool, svn_error_t *err)
{
char buffer[128];
- SVN_ERR(svn_ra_svn_start_list(conn, pool));
- SVN_ERR(svn_ra_svn_write_word(conn, pool, "failure"));
- SVN_ERR(svn_ra_svn_start_list(conn, pool));
+ SVN_ERR(writebuf_write_short_string(conn, pool, "( failure ( ", 12));
for (; err; err = err->child)
{
- const char *msg = svn_err_best_message(err, buffer, sizeof(buffer));
+ const char *msg;
+
+#ifdef SVN_ERR__TRACING
+ if (svn_error__is_tracing_link(err))
+ msg = err->message;
+ else
+#endif
+ msg = svn_err_best_message(err, buffer, sizeof(buffer));
/* The message string should have been optional, but we can't
easily change that, so marshal nonexistent messages as "". */
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "nccn",
- (apr_uint64_t) err->apr_err,
- msg ? msg : "",
- err->file ? err->file : "",
- (apr_uint64_t) err->line));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "nccn",
+ (apr_uint64_t) err->apr_err,
+ msg ? msg : "",
+ err->file ? err->file : "",
+ (apr_uint64_t) err->line));
}
- SVN_ERR(svn_ra_svn_end_list(conn, pool));
- SVN_ERR(svn_ra_svn_end_list(conn, pool));
- return SVN_NO_ERROR;
+ return writebuf_write_short_string(conn, pool, ") ) ", 4);
}
diff --git a/subversion/libsvn_ra_svn/protocol b/subversion/libsvn_ra_svn/protocol
index 3839ebe..4d98b2b 100644
--- a/subversion/libsvn_ra_svn/protocol
+++ b/subversion/libsvn_ra_svn/protocol
@@ -202,6 +202,10 @@ capability and C indicates a client capability):
[S] atomic-revprops If the server presents this capability, it
supports the change-rev-prop2 command.
See section 3.1.1.
+[S] inherited-props If the server presents this capability, it supports the
+ retrieval of inherited properties via the get-dir and
+ get-file commands and also supports the get-iprops
+ command (see section 3.1.1).
3. Commands
-----------
@@ -222,6 +226,7 @@ responds.
Here are some miscellaneous prototypes used by the command sets:
proplist: ( ( name:string value:string ) ... )
+ iproplist: ( ( name:string proplist ) ... )
propdelta: ( ( name:string [ value:string ] ) ... )
node-kind: none|file|dir|unknown
bool: true|false
@@ -289,26 +294,35 @@ second place for auth-request point as noted below.
Upon receiving response, client switches to editor command set.
Upon successful completion of edit, server sends auth-request.
After auth exchange completes, server sends commit-info.
+ If rev-props is present, logmsg is ignored. Only the svn:log entry in
+ rev-props (if any) will be used.
commit-info: ( new-rev:number date:string author:string
? ( post-commit-err:string ) )
+ NOTE: when revving this, make 'logmsg' optional, or delete that parameter
+ and have the log message specified in 'rev-props'.
get-file
- params: ( path:string [ rev:number ] want-props:bool want-contents:bool )
- response: ( [ checksum:string ] rev:number props:proplist )
+ params: ( path:string [ rev:number ] want-props:bool want-contents:bool
+ [ want-iprops:bool ] )
+ response: ( [ checksum:string ] rev:number props:proplist
+ [ inherited-props:iproplist ] )
If want-contents is specified, then after sending response, server
sends file contents as a series of strings, terminated by the empty
string, followed by a second empty command response to indicate
whether an error occurred during the sending of the file.
+ NOTE: the standard client never sends want-iprops, it uses get-iprops.
get-dir
params: ( path:string [ rev:number ] want-props:bool want-contents:bool
- ? ( field:dirent-field ... ) )
- response: ( rev:number props:proplist ( entry:dirent ... ) )]
+ ? ( field:dirent-field ... ) [ want-iprops:bool ] )
+ response: ( rev:number props:proplist ( entry:dirent ... )
+ [ inherited-props:iproplist ] )]
dirent: ( name:string kind:node-kind size:number has-props:bool
created-rev:number [ created-date:string ]
[ last-author:string ] )
dirent-field: kind | size | has-props | created-rev | time | last-author
| word
+ NOTE: the standard client never sends want-iprops, it uses get-iprops.
check-path
params: ( path:string [ rev:number ] )
@@ -332,7 +346,7 @@ second place for auth-request point as noted below.
update
params: ( [ rev:number ] target:string recurse:bool
- ? depth:word send_copyfrom_param:bool )
+ ? depth:word send_copyfrom_args:bool ? ignore_ancestry:bool )
Client switches to report command set.
Upon finish-report, server sends auth-request.
After auth exchange completes, server switches to editor command set.
@@ -341,7 +355,7 @@ second place for auth-request point as noted below.
switch
params: ( [ rev:number ] target:string recurse:bool url:string
- ? depth:word)
+ ? depth:word ? send_copyfrom_args:bool ignore_ancestry:bool )
Client switches to report command set.
Upon finish-report, server sends auth-request.
After auth exchange completes, server switches to editor command set.
@@ -464,6 +478,11 @@ second place for auth-request point as noted below.
params: ( path:string peg-rev:number end-rev:number )
response: ( deleted-rev:number )
+ get-iprops
+ params: ( path:string [ rev:number ] )
+ response: ( inherited-props:iproplist )
+ New in svn 1.8. If rev is not specified, the youngest revision is used.
+
3.1.2. Editor Command Set
An edit operation produces only one response, at close-edit or
diff --git a/subversion/libsvn_ra_svn/ra_svn.h b/subversion/libsvn_ra_svn/ra_svn.h
index 1b1924d..dc70eb7 100644
--- a/subversion/libsvn_ra_svn/ra_svn.h
+++ b/subversion/libsvn_ra_svn/ra_svn.h
@@ -36,6 +36,8 @@ extern "C" {
#include "svn_ra.h"
#include "svn_ra_svn.h"
+#include "private/svn_ra_svn_private.h"
+
/* Callback function that indicates if a svn_ra_svn__stream_t has pending
* data.
*/
@@ -56,9 +58,14 @@ typedef svn_error_t *(*ra_svn_block_handler_t)(svn_ra_svn_conn_t *conn,
apr_pool_t *pool,
void *baton);
+/* The default "user agent". */
+#define SVN_RA_SVN__DEFAULT_USERAGENT "SVN/" SVN_VER_NUMBER\
+ " (" SVN_BUILD_TARGET ")"
+
/* The size of our per-connection read and write buffers. */
-#define SVN_RA_SVN__READBUF_SIZE 4096
-#define SVN_RA_SVN__WRITEBUF_SIZE 4096
+#define SVN_RA_SVN__PAGE_SIZE 4096
+#define SVN_RA_SVN__READBUF_SIZE (4 * SVN_RA_SVN__PAGE_SIZE)
+#define SVN_RA_SVN__WRITEBUF_SIZE (4 * SVN_RA_SVN__PAGE_SIZE)
/* Create forward reference */
typedef struct svn_ra_svn__session_baton_t svn_ra_svn__session_baton_t;
@@ -66,6 +73,14 @@ typedef struct svn_ra_svn__session_baton_t svn_ra_svn__session_baton_t;
/* This structure is opaque to the server. The client pokes at the
* first few fields during setup and cleanup. */
struct svn_ra_svn_conn_st {
+
+ /* I/O buffers */
+ char write_buf[SVN_RA_SVN__WRITEBUF_SIZE];
+ char read_buf[SVN_RA_SVN__READBUF_SIZE];
+ char *read_ptr;
+ char *read_end;
+ apr_size_t write_pos;
+
svn_ra_svn__stream_t *stream;
svn_ra_svn__session_baton_t *session;
#ifdef SVN_HAVE_SASL
@@ -75,18 +90,32 @@ struct svn_ra_svn_conn_st {
apr_socket_t *sock;
svn_boolean_t encrypted;
#endif
- char read_buf[SVN_RA_SVN__READBUF_SIZE];
- char *read_ptr;
- char *read_end;
- char write_buf[SVN_RA_SVN__WRITEBUF_SIZE];
- int write_pos;
+
+ /* abortion check control */
+ apr_size_t written_since_error_check;
+ apr_size_t error_check_interval;
+ svn_boolean_t may_check_for_error;
+
+ /* repository info */
const char *uuid;
const char *repos_root;
+
+ /* TX block notification target */
ra_svn_block_handler_t block_handler;
void *block_baton;
+
+ /* server settings */
apr_hash_t *capabilities;
int compression_level;
+ apr_size_t zero_copy_limit;
+
+ /* who's on the other side of the connection? */
char *remote_ip;
+
+ /* EV2 support*/
+ svn_delta_shim_callbacks_t *shim_callbacks;
+
+ /* our pool */
apr_pool_t *pool;
};
@@ -103,6 +132,7 @@ struct svn_ra_svn__session_baton_t {
void *callbacks_baton;
apr_off_t bytes_read, bytes_written; /* apr_off_t's because that's what
the callback interface uses */
+ const char *useragent;
};
/* Set a callback for blocked writes on conn. This handler may
@@ -166,6 +196,13 @@ svn_error_t *svn_ra_svn__stream_write(svn_ra_svn__stream_t *stream,
svn_error_t *svn_ra_svn__stream_read(svn_ra_svn__stream_t *stream,
char *data, apr_size_t *len);
+/* Read the command word from CONN, return it in *COMMAND and skip to the
+ * end of the command. Allocate data in POOL.
+ */
+svn_error_t *svn_ra_svn__read_command_only(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ const char **command);
+
/* Set the timeout for operations on STREAM to INTERVAL. */
void svn_ra_svn__stream_timeout(svn_ra_svn__stream_t *stream,
apr_interval_time_t interval);
diff --git a/subversion/libsvn_repos/authz.c b/subversion/libsvn_repos/authz.c
index bf95a7f..af4a1f2 100644
--- a/subversion/libsvn_repos/authz.c
+++ b/subversion/libsvn_repos/authz.c
@@ -26,6 +26,7 @@
#include <apr_pools.h>
#include <apr_file_io.h>
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_error.h"
#include "svn_dirent_uri.h"
@@ -34,6 +35,7 @@
#include "svn_config.h"
#include "svn_ctype.h"
#include "private/svn_fspath.h"
+#include "repos.h"
/*** Structures. ***/
@@ -303,10 +305,8 @@ authz_parse_section(const char *section_name, void *baton, apr_pool_t *pool)
svn_boolean_t conclusive;
/* Does the section apply to us? */
- if (is_applicable_section(b->qualified_repos_path,
- section_name) == FALSE
- && is_applicable_section(b->repos_path,
- section_name) == FALSE)
+ if (!is_applicable_section(b->qualified_repos_path, section_name)
+ && !is_applicable_section(b->repos_path, section_name))
return TRUE;
/* Work out what this section grants. */
@@ -513,8 +513,7 @@ authz_group_walk(svn_config_t *cfg,
{
/* A circular dependency between groups is a Bad Thing. We
don't do authz with invalid ACL files. */
- if (apr_hash_get(checked_groups, &group_user[1],
- APR_HASH_KEY_STRING))
+ if (svn_hash_gets(checked_groups, &group_user[1]))
return svn_error_createf(SVN_ERR_AUTHZ_INVALID_CONFIG,
NULL,
"Circular dependency between "
@@ -522,8 +521,7 @@ authz_group_walk(svn_config_t *cfg,
&group_user[1], group);
/* Add group to hash of checked groups. */
- apr_hash_set(checked_groups, &group_user[1],
- APR_HASH_KEY_STRING, "");
+ svn_hash_sets(checked_groups, &group_user[1], "");
/* Recurse on that group. */
SVN_ERR(authz_group_walk(cfg, &group_user[1],
@@ -532,8 +530,7 @@ authz_group_walk(svn_config_t *cfg,
/* Remove group from hash of checked groups, so that we don't
incorrectly report an error if we see it again as part of
another group. */
- apr_hash_set(checked_groups, &group_user[1],
- APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(checked_groups, &group_user[1], NULL);
}
else if (*group_user == '&')
{
@@ -714,17 +711,35 @@ static svn_boolean_t authz_validate_section(const char *name,
{
struct authz_validate_baton *b = baton;
- /* If the section is the groups definition, use the group checking
- callback. Otherwise, use the rule checking callback. */
- if (strncmp(name, "groups", 6) == 0)
+ /* Use the group checking callback for the "groups" section... */
+ if (strcmp(name, "groups") == 0)
svn_config_enumerate2(b->config, name, authz_validate_group,
baton, pool);
- else if (strncmp(name, "aliases", 7) == 0)
+ /* ...and the alias checking callback for "aliases"... */
+ else if (strcmp(name, "aliases") == 0)
svn_config_enumerate2(b->config, name, authz_validate_alias,
baton, pool);
+ /* ...but for everything else use the rule checking callback. */
else
- svn_config_enumerate2(b->config, name, authz_validate_rule,
- baton, pool);
+ {
+ /* Validate the section's name. Skip the optional REPOS_NAME. */
+ const char *fspath = strchr(name, ':');
+ if (fspath)
+ fspath++;
+ else
+ fspath = name;
+ if (! svn_fspath__is_canonical(fspath))
+ {
+ b->err = svn_error_createf(SVN_ERR_AUTHZ_INVALID_CONFIG, NULL,
+ "Section name '%s' contains non-canonical "
+ "fspath '%s'",
+ name, fspath);
+ return FALSE;
+ }
+
+ svn_config_enumerate2(b->config, name, authz_validate_rule,
+ baton, pool);
+ }
if (b->err)
return FALSE;
@@ -733,27 +748,271 @@ static svn_boolean_t authz_validate_section(const char *name,
}
-
-/*** Public functions. ***/
-
-svn_error_t *
-svn_repos_authz_read(svn_authz_t **authz_p, const char *file,
- svn_boolean_t must_exist, apr_pool_t *pool)
+/* Walk the configuration in AUTHZ looking for any errors. */
+static svn_error_t *
+authz_validate(svn_authz_t *authz, apr_pool_t *pool)
{
- svn_authz_t *authz = apr_palloc(pool, sizeof(*authz));
struct authz_validate_baton baton = { 0 };
baton.err = SVN_NO_ERROR;
-
- /* Load the rule file. */
- SVN_ERR(svn_config_read2(&authz->cfg, file, must_exist, TRUE, pool));
baton.config = authz->cfg;
- /* Step through the entire rule file, stopping on error. */
+ /* Step through the entire rule file stopping on error. */
svn_config_enumerate_sections2(authz->cfg, authz_validate_section,
&baton, pool);
SVN_ERR(baton.err);
+ return SVN_NO_ERROR;
+}
+
+
+/* Retrieve the file at DIRENT (contained in a repo) then parse it as a config
+ * file placing the result into CFG_P allocated in POOL.
+ *
+ * If DIRENT cannot be parsed as a config file then an error is returned. The
+ * contents of CFG_P is then undefined. If MUST_EXIST is TRUE, a missing
+ * authz file is also an error.
+ *
+ * SCRATCH_POOL will be used for temporary allocations. */
+static svn_error_t *
+authz_retrieve_config_repo(svn_config_t **cfg_p, const char *dirent,
+ svn_boolean_t must_exist,
+ apr_pool_t *result_pool, apr_pool_t *scratch_pool)
+{
+ svn_error_t *err;
+ svn_repos_t *repos;
+ const char *repos_root_dirent;
+ const char *fs_path;
+ svn_fs_t *fs;
+ svn_fs_root_t *root;
+ svn_revnum_t youngest_rev;
+ svn_node_kind_t node_kind;
+ svn_stream_t *contents;
+
+ /* Search for a repository in the full path. */
+ repos_root_dirent = svn_repos_find_root_path(dirent, scratch_pool);
+ if (!repos_root_dirent)
+ return svn_error_createf(SVN_ERR_RA_LOCAL_REPOS_NOT_FOUND, NULL,
+ "Unable to find repository at '%s'", dirent);
+
+ /* Attempt to open a repository at repos_root_dirent. */
+ SVN_ERR(svn_repos_open2(&repos, repos_root_dirent, NULL, scratch_pool));
+
+ fs_path = &dirent[strlen(repos_root_dirent)];
+
+ /* Root path is always a directory so no reason to go any further */
+ if (*fs_path == '\0')
+ return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
+ "'/' is not a file in repo '%s'",
+ repos_root_dirent);
+
+ /* We skip some things that are non-important for how we're going to use
+ * this repo connection. We do not set any capabilities since none of
+ * the current ones are important for what we're doing. We also do not
+ * setup the environment that repos hooks would run under since we won't
+ * be triggering any. */
+
+ /* Get the filesystem. */
+ fs = svn_repos_fs(repos);
+
+ /* Find HEAD and the revision root */
+ SVN_ERR(svn_fs_youngest_rev(&youngest_rev, fs, scratch_pool));
+ SVN_ERR(svn_fs_revision_root(&root, fs, youngest_rev, scratch_pool));
+
+ SVN_ERR(svn_fs_check_path(&node_kind, root, fs_path, scratch_pool));
+ if (node_kind == svn_node_none)
+ {
+ if (!must_exist)
+ {
+ SVN_ERR(svn_config_create2(cfg_p, TRUE, TRUE, result_pool));
+ return SVN_NO_ERROR;
+ }
+ else
+ {
+ return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
+ "'%s' path not found in repo '%s'", fs_path,
+ repos_root_dirent);
+ }
+ }
+ else if (node_kind != svn_node_file)
+ {
+ return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
+ "'%s' is not a file in repo '%s'", fs_path,
+ repos_root_dirent);
+ }
+
+ SVN_ERR(svn_fs_file_contents(&contents, root, fs_path, scratch_pool));
+ err = svn_config_parse(cfg_p, contents, TRUE, TRUE, result_pool);
+
+ /* Add the URL to the error stack since the parser doesn't have it. */
+ if (err != SVN_NO_ERROR)
+ return svn_error_createf(err->apr_err, err,
+ "Error while parsing config file: '%s' in repo '%s':",
+ fs_path, repos_root_dirent);
+
+ return SVN_NO_ERROR;
+}
+
+/* Given a PATH which might be a relative repo URL (^/), an absolute
+ * local repo URL (file://), an absolute path outside of the repo
+ * or a location in the Windows registry.
+ *
+ * Retrieve the configuration data that PATH points at and parse it into
+ * CFG_P allocated in POOL.
+ *
+ * If PATH cannot be parsed as a config file then an error is returned. The
+ * contents of CFG_P is then undefined. If MUST_EXIST is TRUE, a missing
+ * authz file is also an error.
+ *
+ * REPOS_ROOT points at the root of the repos you are
+ * going to apply the authz against, can be NULL if you are sure that you
+ * don't have a repos relative URL in PATH. */
+static svn_error_t *
+authz_retrieve_config(svn_config_t **cfg_p, const char *path,
+ svn_boolean_t must_exist, apr_pool_t *pool)
+{
+ if (svn_path_is_url(path))
+ {
+ const char *dirent;
+ svn_error_t *err;
+ apr_pool_t *scratch_pool = svn_pool_create(pool);
+
+ err = svn_uri_get_dirent_from_file_url(&dirent, path, scratch_pool);
+
+ if (err == SVN_NO_ERROR)
+ err = authz_retrieve_config_repo(cfg_p, dirent, must_exist, pool,
+ scratch_pool);
+
+ /* Close the repos and streams we opened. */
+ svn_pool_destroy(scratch_pool);
+
+ return err;
+ }
+ else
+ {
+ /* Outside of repo file or Windows registry*/
+ SVN_ERR(svn_config_read3(cfg_p, path, must_exist, TRUE, TRUE, pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
+/* Callback to copy (name, value) group into the "groups" section
+ of another configuration. */
+static svn_boolean_t
+authz_copy_group(const char *name, const char *value,
+ void *baton, apr_pool_t *pool)
+{
+ svn_config_t *authz_cfg = baton;
+
+ svn_config_set(authz_cfg, SVN_CONFIG_SECTION_GROUPS, name, value);
+
+ return TRUE;
+}
+
+/* Copy group definitions from GROUPS_CFG to the resulting AUTHZ.
+ * If AUTHZ already contains any group definition, report an error.
+ * Use POOL for temporary allocations. */
+static svn_error_t *
+authz_copy_groups(svn_authz_t *authz, svn_config_t *groups_cfg,
+ apr_pool_t *pool)
+{
+ /* Easy out: we prohibit local groups in the authz file when global
+ groups are being used. */
+ if (svn_config_has_section(authz->cfg, SVN_CONFIG_SECTION_GROUPS))
+ {
+ return svn_error_create(SVN_ERR_AUTHZ_INVALID_CONFIG, NULL,
+ "Authz file cannot contain any groups "
+ "when global groups are being used.");
+ }
+
+ svn_config_enumerate2(groups_cfg, SVN_CONFIG_SECTION_GROUPS,
+ authz_copy_group, authz->cfg, pool);
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_repos__authz_read(svn_authz_t **authz_p, const char *path,
+ const char *groups_path, svn_boolean_t must_exist,
+ svn_boolean_t accept_urls, apr_pool_t *pool)
+{
+ svn_authz_t *authz = apr_palloc(pool, sizeof(*authz));
+
+ /* Load the authz file */
+ if (accept_urls)
+ SVN_ERR(authz_retrieve_config(&authz->cfg, path, must_exist, pool));
+ else
+ SVN_ERR(svn_config_read3(&authz->cfg, path, must_exist, TRUE, TRUE, pool));
+
+ if (groups_path)
+ {
+ svn_config_t *groups_cfg;
+ svn_error_t *err;
+
+ /* Load the groups file */
+ if (accept_urls)
+ SVN_ERR(authz_retrieve_config(&groups_cfg, groups_path, must_exist,
+ pool));
+ else
+ SVN_ERR(svn_config_read3(&groups_cfg, groups_path, must_exist,
+ TRUE, TRUE, pool));
+
+ /* Copy the groups from groups_cfg into authz. */
+ err = authz_copy_groups(authz, groups_cfg, pool);
+
+ /* Add the paths to the error stack since the authz_copy_groups
+ routine knows nothing about them. */
+ if (err != SVN_NO_ERROR)
+ return svn_error_createf(err->apr_err, err,
+ "Error reading authz file '%s' with "
+ "groups file '%s':", path, groups_path);
+ }
+
+ /* Make sure there are no errors in the configuration. */
+ SVN_ERR(authz_validate(authz, pool));
+
+ *authz_p = authz;
+ return SVN_NO_ERROR;
+}
+
+
+
+/*** Public functions. ***/
+
+svn_error_t *
+svn_repos_authz_read2(svn_authz_t **authz_p, const char *path,
+ const char *groups_path, svn_boolean_t must_exist,
+ apr_pool_t *pool)
+{
+ return svn_repos__authz_read(authz_p, path, groups_path, must_exist,
+ TRUE, pool);
+}
+
+
+svn_error_t *
+svn_repos_authz_parse(svn_authz_t **authz_p, svn_stream_t *stream,
+ svn_stream_t *groups_stream, apr_pool_t *pool)
+{
+ svn_authz_t *authz = apr_palloc(pool, sizeof(*authz));
+
+ /* Parse the authz stream */
+ SVN_ERR(svn_config_parse(&authz->cfg, stream, TRUE, TRUE, pool));
+
+ if (groups_stream)
+ {
+ svn_config_t *groups_cfg;
+
+ /* Parse the groups stream */
+ SVN_ERR(svn_config_parse(&groups_cfg, groups_stream, TRUE, TRUE, pool));
+
+ SVN_ERR(authz_copy_groups(authz, groups_cfg, pool));
+ }
+
+ /* Make sure there are no errors in the configuration. */
+ SVN_ERR(authz_validate(authz, pool));
+
*authz_p = authz;
return SVN_NO_ERROR;
}
diff --git a/subversion/libsvn_repos/commit.c b/subversion/libsvn_repos/commit.c
index c8032e3..22cf873 100644
--- a/subversion/libsvn_repos/commit.c
+++ b/subversion/libsvn_repos/commit.c
@@ -26,6 +26,7 @@
#include <apr_pools.h>
#include <apr_file_io.h>
+#include "svn_hash.h"
#include "svn_compat.h"
#include "svn_pools.h"
#include "svn_error.h"
@@ -35,12 +36,17 @@
#include "svn_fs.h"
#include "svn_repos.h"
#include "svn_checksum.h"
+#include "svn_ctype.h"
#include "svn_props.h"
#include "svn_mergeinfo.h"
-#include "repos.h"
#include "svn_private_config.h"
+
+#include "repos.h"
+
#include "private/svn_fspath.h"
+#include "private/svn_fs_private.h"
#include "private/svn_repos_private.h"
+#include "private/svn_editor.h"
@@ -128,6 +134,29 @@ struct file_baton
};
+struct ev2_baton
+{
+ /* The repository we are editing. */
+ svn_repos_t *repos;
+
+ /* The authz baton for checks; NULL to skip authz. */
+ svn_authz_t *authz;
+
+ /* The repository name and user for performing authz checks. */
+ const char *authz_repos_name;
+ const char *authz_user;
+
+ /* Callback to provide info about the committed revision. */
+ svn_commit_callback2_t commit_cb;
+ void *commit_baton;
+
+ /* The FS txn editor */
+ svn_editor_t *inner;
+
+ /* The name of the open transaction (so we know what to commit) */
+ const char *txn_name;
+};
+
/* Create and return a generic out-of-dateness error. */
static svn_error_t *
@@ -143,6 +172,40 @@ out_of_date(const char *path, svn_node_kind_t kind)
}
+static svn_error_t *
+invoke_commit_cb(svn_commit_callback2_t commit_cb,
+ void *commit_baton,
+ svn_fs_t *fs,
+ svn_revnum_t revision,
+ const char *post_commit_errstr,
+ apr_pool_t *scratch_pool)
+{
+ /* FS interface returns non-const values. */
+ /* const */ svn_string_t *date;
+ /* const */ svn_string_t *author;
+ svn_commit_info_t *commit_info;
+
+ if (commit_cb == NULL)
+ return SVN_NO_ERROR;
+
+ SVN_ERR(svn_fs_revision_prop(&date, fs, revision, SVN_PROP_REVISION_DATE,
+ scratch_pool));
+ SVN_ERR(svn_fs_revision_prop(&author, fs, revision,
+ SVN_PROP_REVISION_AUTHOR,
+ scratch_pool));
+
+ commit_info = svn_create_commit_info(scratch_pool);
+
+ /* fill up the svn_commit_info structure */
+ commit_info->revision = revision;
+ commit_info->date = date ? date->data : NULL;
+ commit_info->author = author ? author->data : NULL;
+ commit_info->post_commit_err = post_commit_errstr;
+
+ return svn_error_trace(commit_cb(commit_info, commit_baton, scratch_pool));
+}
+
+
/* If EDITOR_BATON contains a valid authz callback, verify that the
REQUIRED access to PATH in ROOT is authorized. Return an error
@@ -196,7 +259,6 @@ make_dir_baton(struct edit_baton *edit_baton,
return db;
}
-
/* This function is the shared guts of add_file() and add_directory(),
which see for the meanings of the parameters. The only extra
parameter here is IS_DIR, which is TRUE when adding a directory,
@@ -216,6 +278,9 @@ add_file_or_directory(const char *path,
svn_boolean_t was_copied = FALSE;
const char *full_path;
+ /* Reject paths which contain control characters (related to issue #4340). */
+ SVN_ERR(svn_path_check_valid(path, pool));
+
full_path = svn_fspath__join(eb->base_path,
svn_relpath_canonicalize(path, pool), pool);
@@ -247,7 +312,7 @@ add_file_or_directory(const char *path,
out-of-dateness error. */
SVN_ERR(svn_fs_check_path(&kind, eb->txn_root, full_path, subpool));
if ((kind != svn_node_none) && (! pb->was_copied))
- return out_of_date(full_path, kind);
+ return svn_error_trace(out_of_date(full_path, kind));
/* For now, require that the url come from the same repository
that this commit is operating on. */
@@ -396,13 +461,13 @@ delete_entry(const char *path,
/* If PATH doesn't exist in the txn, the working copy is out of date. */
if (kind == svn_node_none)
- return out_of_date(full_path, kind);
+ return svn_error_trace(out_of_date(full_path, kind));
/* Now, make sure we're deleting the node we *think* we're
deleting, else return an out-of-dateness error. */
SVN_ERR(svn_fs_node_created_rev(&cr_rev, eb->txn_root, full_path, pool));
if (SVN_IS_VALID_REVNUM(revision) && (revision < cr_rev))
- return out_of_date(full_path, kind);
+ return svn_error_trace(out_of_date(full_path, kind));
/* This routine is a mindless wrapper. We call svn_fs_delete()
because that will delete files and recursively delete
@@ -518,7 +583,7 @@ open_file(const char *path,
/* If the node our caller has is an older revision number than the
one in our transaction, return an out-of-dateness error. */
if (SVN_IS_VALID_REVNUM(base_revision) && (base_revision < cr_rev))
- return out_of_date(full_path, svn_node_file);
+ return svn_error_trace(out_of_date(full_path, svn_node_file));
/* Build a new file baton */
new_fb = apr_pcalloc(pool, sizeof(*new_fb));
@@ -602,7 +667,7 @@ change_dir_prop(void *dir_baton,
eb->txn_root, db->path, pool));
if (db->base_rev < created_rev)
- return out_of_date(db->path, svn_node_dir);
+ return svn_error_trace(out_of_date(db->path, svn_node_dir));
}
return svn_repos_fs_change_node_prop(eb->txn_root, db->path,
@@ -631,7 +696,8 @@ svn_repos__post_commit_error_str(svn_error_t *err,
else
hook_err2 = hook_err1;
- /* This implementation counts on svn_repos_fs_commit_txn() returning
+ /* This implementation counts on svn_repos_fs_commit_txn() and
+ libsvn_repos/commit.c:complete_cb() returning
svn_fs_commit_txn() as the parent error with a child
SVN_ERR_REPOS_POST_COMMIT_HOOK_FAILED error. If the parent error
is SVN_ERR_REPOS_POST_COMMIT_HOOK_FAILED then there was no error
@@ -695,6 +761,13 @@ close_edit(void *edit_baton,
if (SVN_IS_VALID_REVNUM(new_revision))
{
+ /* The actual commit succeeded, i.e. the transaction does no longer
+ exist and we can't use txn_root for conflict resolution etc.
+
+ Since close_edit is supposed to release resources, do it now. */
+ if (eb->txn_root)
+ svn_fs_close_root(eb->txn_root);
+
if (err)
{
/* If the error was in post-commit, then the commit itself
@@ -703,8 +776,14 @@ close_edit(void *edit_baton,
display it as a warning) and clear the error. */
post_commit_err = svn_repos__post_commit_error_str(err, pool);
svn_error_clear(err);
- err = SVN_NO_ERROR;
}
+
+ /* Make sure a future abort doesn't perform
+ any work. This may occur if the commit
+ callback returns an error! */
+
+ eb->txn = NULL;
+ eb->txn_root = NULL;
}
else
{
@@ -730,41 +809,19 @@ close_edit(void *edit_baton,
svn_fs_abort_txn(eb->txn, pool)));
}
- /* Pass new revision information to the caller's callback. */
- {
- svn_string_t *date, *author;
- svn_commit_info_t *commit_info;
+ /* At this point, the post-commit error has been converted to a string.
+ That information will be passed to a callback, if provided. If the
+ callback invocation fails in some way, that failure is returned here.
+ IOW, the post-commit error information is low priority compared to
+ other gunk here. */
- /* Even if there was a post-commit hook failure, it's more serious
- if one of the calls here fails, so we explicitly check for errors
- here, while saving the possible post-commit error for later. */
-
- err = svn_fs_revision_prop(&date, svn_repos_fs(eb->repos),
- new_revision, SVN_PROP_REVISION_DATE,
- pool);
- if (! err)
- {
- err = svn_fs_revision_prop(&author, svn_repos_fs(eb->repos),
- new_revision, SVN_PROP_REVISION_AUTHOR,
- pool);
- }
-
- if ((! err) && eb->commit_callback)
- {
- commit_info = svn_create_commit_info(pool);
-
- /* fill up the svn_commit_info structure */
- commit_info->revision = new_revision;
- commit_info->date = date ? date->data : NULL;
- commit_info->author = author ? author->data : NULL;
- commit_info->post_commit_err = post_commit_err;
- err = (*eb->commit_callback)(commit_info,
- eb->commit_callback_baton,
- pool);
- }
- }
-
- return svn_error_trace(err);
+ /* Pass new revision information to the caller's callback. */
+ return svn_error_trace(invoke_commit_cb(eb->commit_callback,
+ eb->commit_callback_baton,
+ eb->repos->fs,
+ new_revision,
+ post_commit_err,
+ pool));
}
@@ -778,10 +835,102 @@ abort_edit(void *edit_baton,
eb->txn_aborted = TRUE;
+ /* Since abort_edit is supposed to release resources, do it now. */
+ if (eb->txn_root)
+ svn_fs_close_root(eb->txn_root);
+
return svn_error_trace(svn_fs_abort_txn(eb->txn, pool));
}
+static svn_error_t *
+fetch_props_func(apr_hash_t **props,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton *eb = baton;
+ svn_fs_root_t *fs_root;
+ svn_error_t *err;
+
+ SVN_ERR(svn_fs_revision_root(&fs_root, eb->fs,
+ svn_fs_txn_base_revision(eb->txn),
+ scratch_pool));
+ err = svn_fs_node_proplist(props, fs_root, path, result_pool);
+ if (err && err->apr_err == SVN_ERR_FS_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ *props = apr_hash_make(result_pool);
+ return SVN_NO_ERROR;
+ }
+ else if (err)
+ return svn_error_trace(err);
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+fetch_kind_func(svn_node_kind_t *kind,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton *eb = baton;
+ svn_fs_root_t *fs_root;
+
+ if (!SVN_IS_VALID_REVNUM(base_revision))
+ base_revision = svn_fs_txn_base_revision(eb->txn);
+
+ SVN_ERR(svn_fs_revision_root(&fs_root, eb->fs, base_revision, scratch_pool));
+
+ SVN_ERR(svn_fs_check_path(kind, fs_root, path, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+fetch_base_func(const char **filename,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton *eb = baton;
+ svn_stream_t *contents;
+ svn_stream_t *file_stream;
+ const char *tmp_filename;
+ svn_fs_root_t *fs_root;
+ svn_error_t *err;
+
+ if (!SVN_IS_VALID_REVNUM(base_revision))
+ base_revision = svn_fs_txn_base_revision(eb->txn);
+
+ SVN_ERR(svn_fs_revision_root(&fs_root, eb->fs, base_revision, scratch_pool));
+
+ err = svn_fs_file_contents(&contents, fs_root, path, scratch_pool);
+ if (err && err->apr_err == SVN_ERR_FS_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ *filename = NULL;
+ return SVN_NO_ERROR;
+ }
+ else if (err)
+ return svn_error_trace(err);
+ SVN_ERR(svn_stream_open_unique(&file_stream, &tmp_filename, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_stream_copy3(contents, file_stream, NULL, NULL, scratch_pool));
+
+ *filename = apr_pstrdup(result_pool, tmp_filename);
+
+ return SVN_NO_ERROR;
+}
+
+
/*** Public interfaces. ***/
@@ -793,8 +942,8 @@ svn_repos_get_commit_editor5(const svn_delta_editor_t **editor,
const char *repos_url,
const char *base_path,
apr_hash_t *revprop_table,
- svn_commit_callback2_t callback,
- void *callback_baton,
+ svn_commit_callback2_t commit_callback,
+ void *commit_baton,
svn_repos_authz_callback_t authz_callback,
void *authz_baton,
apr_pool_t *pool)
@@ -802,6 +951,8 @@ svn_repos_get_commit_editor5(const svn_delta_editor_t **editor,
svn_delta_editor_t *e;
apr_pool_t *subpool = svn_pool_create(pool);
struct edit_baton *eb;
+ svn_delta_shim_callbacks_t *shim_callbacks =
+ svn_delta_shim_callbacks_default(pool);
/* Do a global authz access lookup. Users with no write access
whatsoever to the repository don't get a commit editor. */
@@ -837,8 +988,8 @@ svn_repos_get_commit_editor5(const svn_delta_editor_t **editor,
/* Set up the edit baton. */
eb->pool = subpool;
eb->revprop_table = svn_prop_hash_dup(revprop_table, subpool);
- eb->commit_callback = callback;
- eb->commit_callback_baton = callback_baton;
+ eb->commit_callback = commit_callback;
+ eb->commit_callback_baton = commit_baton;
eb->authz_callback = authz_callback;
eb->authz_baton = authz_baton;
eb->base_path = svn_fspath__canonicalize(base_path, subpool);
@@ -853,5 +1004,396 @@ svn_repos_get_commit_editor5(const svn_delta_editor_t **editor,
*edit_baton = eb;
*editor = e;
+ shim_callbacks->fetch_props_func = fetch_props_func;
+ shim_callbacks->fetch_kind_func = fetch_kind_func;
+ shim_callbacks->fetch_base_func = fetch_base_func;
+ shim_callbacks->fetch_baton = eb;
+
+ SVN_ERR(svn_editor__insert_shims(editor, edit_baton, *editor, *edit_baton,
+ eb->repos_url, eb->base_path,
+ shim_callbacks, pool, pool));
+
+ return SVN_NO_ERROR;
+}
+
+
+#if 0
+static svn_error_t *
+ev2_check_authz(const struct ev2_baton *eb,
+ const char *relpath,
+ svn_repos_authz_access_t required,
+ apr_pool_t *scratch_pool)
+{
+ const char *fspath;
+ svn_boolean_t allowed;
+
+ if (eb->authz == NULL)
+ return SVN_NO_ERROR;
+
+ if (relpath)
+ fspath = apr_pstrcat(scratch_pool, "/", relpath, NULL);
+ else
+ fspath = NULL;
+
+ SVN_ERR(svn_repos_authz_check_access(eb->authz, eb->authz_repos_name, fspath,
+ eb->authz_user, required,
+ &allowed, scratch_pool));
+ if (!allowed)
+ return svn_error_create(required & svn_authz_write
+ ? SVN_ERR_AUTHZ_UNWRITABLE
+ : SVN_ERR_AUTHZ_UNREADABLE,
+ NULL, "Access denied");
+
+ return SVN_NO_ERROR;
+}
+#endif
+
+
+/* This implements svn_editor_cb_add_directory_t */
+static svn_error_t *
+add_directory_cb(void *baton,
+ const char *relpath,
+ const apr_array_header_t *children,
+ apr_hash_t *props,
+ svn_revnum_t replaces_rev,
+ apr_pool_t *scratch_pool)
+{
+ struct ev2_baton *eb = baton;
+
+ SVN_ERR(svn_editor_add_directory(eb->inner, relpath, children, props,
+ replaces_rev));
+ return SVN_NO_ERROR;
+}
+
+
+/* This implements svn_editor_cb_add_file_t */
+static svn_error_t *
+add_file_cb(void *baton,
+ const char *relpath,
+ const svn_checksum_t *checksum,
+ svn_stream_t *contents,
+ apr_hash_t *props,
+ svn_revnum_t replaces_rev,
+ apr_pool_t *scratch_pool)
+{
+ struct ev2_baton *eb = baton;
+
+ SVN_ERR(svn_editor_add_file(eb->inner, relpath, checksum, contents, props,
+ replaces_rev));
+ return SVN_NO_ERROR;
+}
+
+
+/* This implements svn_editor_cb_add_symlink_t */
+static svn_error_t *
+add_symlink_cb(void *baton,
+ const char *relpath,
+ const char *target,
+ apr_hash_t *props,
+ svn_revnum_t replaces_rev,
+ apr_pool_t *scratch_pool)
+{
+ struct ev2_baton *eb = baton;
+
+ SVN_ERR(svn_editor_add_symlink(eb->inner, relpath, target, props,
+ replaces_rev));
+ return SVN_NO_ERROR;
+}
+
+
+/* This implements svn_editor_cb_add_absent_t */
+static svn_error_t *
+add_absent_cb(void *baton,
+ const char *relpath,
+ svn_node_kind_t kind,
+ svn_revnum_t replaces_rev,
+ apr_pool_t *scratch_pool)
+{
+ struct ev2_baton *eb = baton;
+
+ SVN_ERR(svn_editor_add_absent(eb->inner, relpath, kind, replaces_rev));
+ return SVN_NO_ERROR;
+}
+
+
+/* This implements svn_editor_cb_alter_directory_t */
+static svn_error_t *
+alter_directory_cb(void *baton,
+ const char *relpath,
+ svn_revnum_t revision,
+ const apr_array_header_t *children,
+ apr_hash_t *props,
+ apr_pool_t *scratch_pool)
+{
+ struct ev2_baton *eb = baton;
+
+ SVN_ERR(svn_editor_alter_directory(eb->inner, relpath, revision,
+ children, props));
+ return SVN_NO_ERROR;
+}
+
+
+/* This implements svn_editor_cb_alter_file_t */
+static svn_error_t *
+alter_file_cb(void *baton,
+ const char *relpath,
+ svn_revnum_t revision,
+ apr_hash_t *props,
+ const svn_checksum_t *checksum,
+ svn_stream_t *contents,
+ apr_pool_t *scratch_pool)
+{
+ struct ev2_baton *eb = baton;
+
+ SVN_ERR(svn_editor_alter_file(eb->inner, relpath, revision, props,
+ checksum, contents));
+ return SVN_NO_ERROR;
+}
+
+
+/* This implements svn_editor_cb_alter_symlink_t */
+static svn_error_t *
+alter_symlink_cb(void *baton,
+ const char *relpath,
+ svn_revnum_t revision,
+ apr_hash_t *props,
+ const char *target,
+ apr_pool_t *scratch_pool)
+{
+ struct ev2_baton *eb = baton;
+
+ SVN_ERR(svn_editor_alter_symlink(eb->inner, relpath, revision, props,
+ target));
+ return SVN_NO_ERROR;
+}
+
+
+/* This implements svn_editor_cb_delete_t */
+static svn_error_t *
+delete_cb(void *baton,
+ const char *relpath,
+ svn_revnum_t revision,
+ apr_pool_t *scratch_pool)
+{
+ struct ev2_baton *eb = baton;
+
+ SVN_ERR(svn_editor_delete(eb->inner, relpath, revision));
+ return SVN_NO_ERROR;
+}
+
+
+/* This implements svn_editor_cb_copy_t */
+static svn_error_t *
+copy_cb(void *baton,
+ const char *src_relpath,
+ svn_revnum_t src_revision,
+ const char *dst_relpath,
+ svn_revnum_t replaces_rev,
+ apr_pool_t *scratch_pool)
+{
+ struct ev2_baton *eb = baton;
+
+ SVN_ERR(svn_editor_copy(eb->inner, src_relpath, src_revision, dst_relpath,
+ replaces_rev));
+ return SVN_NO_ERROR;
+}
+
+
+/* This implements svn_editor_cb_move_t */
+static svn_error_t *
+move_cb(void *baton,
+ const char *src_relpath,
+ svn_revnum_t src_revision,
+ const char *dst_relpath,
+ svn_revnum_t replaces_rev,
+ apr_pool_t *scratch_pool)
+{
+ struct ev2_baton *eb = baton;
+
+ SVN_ERR(svn_editor_move(eb->inner, src_relpath, src_revision, dst_relpath,
+ replaces_rev));
+ return SVN_NO_ERROR;
+}
+
+
+/* This implements svn_editor_cb_rotate_t */
+static svn_error_t *
+rotate_cb(void *baton,
+ const apr_array_header_t *relpaths,
+ const apr_array_header_t *revisions,
+ apr_pool_t *scratch_pool)
+{
+ struct ev2_baton *eb = baton;
+
+ SVN_ERR(svn_editor_rotate(eb->inner, relpaths, revisions));
+ return SVN_NO_ERROR;
+}
+
+
+/* This implements svn_editor_cb_complete_t */
+static svn_error_t *
+complete_cb(void *baton,
+ apr_pool_t *scratch_pool)
+{
+ struct ev2_baton *eb = baton;
+ svn_revnum_t revision;
+ svn_error_t *post_commit_err;
+ const char *conflict_path;
+ svn_error_t *err;
+ const char *post_commit_errstr;
+ apr_hash_t *hooks_env;
+
+ /* Parse the hooks-env file (if any). */
+ SVN_ERR(svn_repos__parse_hooks_env(&hooks_env, eb->repos->hooks_env_path,
+ scratch_pool, scratch_pool));
+
+ /* The transaction has been fully edited. Let the pre-commit hook
+ have a look at the thing. */
+ SVN_ERR(svn_repos__hooks_pre_commit(eb->repos, hooks_env,
+ eb->txn_name, scratch_pool));
+
+ /* Hook is done. Let's do the actual commit. */
+ SVN_ERR(svn_fs__editor_commit(&revision, &post_commit_err, &conflict_path,
+ eb->inner, scratch_pool, scratch_pool));
+
+ /* Did a conflict occur during the commit process? */
+ if (conflict_path != NULL)
+ return svn_error_createf(SVN_ERR_FS_CONFLICT, NULL,
+ _("Conflict at '%s'"), conflict_path);
+
+ /* Since did not receive an error during the commit process, and no
+ conflict was specified... we committed a revision. Run the hooks.
+ Other errors may have occurred within the FS (specified by the
+ POST_COMMIT_ERR localvar), but we need to run the hooks. */
+ SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(revision));
+ err = svn_repos__hooks_post_commit(eb->repos, hooks_env, revision,
+ eb->txn_name, scratch_pool);
+ if (err)
+ err = svn_error_create(SVN_ERR_REPOS_POST_COMMIT_HOOK_FAILED, err,
+ _("Commit succeeded, but post-commit hook failed"));
+
+ /* Combine the FS errors with the hook errors, and stringify. */
+ err = svn_error_compose_create(post_commit_err, err);
+ if (err)
+ {
+ post_commit_errstr = svn_repos__post_commit_error_str(err, scratch_pool);
+ svn_error_clear(err);
+ }
+ else
+ {
+ post_commit_errstr = NULL;
+ }
+
+ return svn_error_trace(invoke_commit_cb(eb->commit_cb, eb->commit_baton,
+ eb->repos->fs, revision,
+ post_commit_errstr,
+ scratch_pool));
+}
+
+
+/* This implements svn_editor_cb_abort_t */
+static svn_error_t *
+abort_cb(void *baton,
+ apr_pool_t *scratch_pool)
+{
+ struct ev2_baton *eb = baton;
+
+ SVN_ERR(svn_editor_abort(eb->inner));
+ return SVN_NO_ERROR;
+}
+
+
+static svn_error_t *
+apply_revprops(svn_fs_t *fs,
+ const char *txn_name,
+ apr_hash_t *revprops,
+ apr_pool_t *scratch_pool)
+{
+ svn_fs_txn_t *txn;
+ const apr_array_header_t *revprops_array;
+
+ /* The FS editor has a TXN inside it, but we can't access it. Open another
+ based on the TXN_NAME. */
+ SVN_ERR(svn_fs_open_txn(&txn, fs, txn_name, scratch_pool));
+
+ /* Validate and apply the revision properties. */
+ revprops_array = svn_prop_hash_to_array(revprops, scratch_pool);
+ SVN_ERR(svn_repos_fs_change_txn_props(txn, revprops_array, scratch_pool));
+
+ /* ### do we need to force the txn to close, or is it enough to wait
+ ### for the pool to be cleared? */
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_repos__get_commit_ev2(svn_editor_t **editor,
+ svn_repos_t *repos,
+ svn_authz_t *authz,
+ const char *authz_repos_name,
+ const char *authz_user,
+ apr_hash_t *revprops,
+ svn_commit_callback2_t commit_cb,
+ void *commit_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ static const svn_editor_cb_many_t editor_cbs = {
+ add_directory_cb,
+ add_file_cb,
+ add_symlink_cb,
+ add_absent_cb,
+ alter_directory_cb,
+ alter_file_cb,
+ alter_symlink_cb,
+ delete_cb,
+ copy_cb,
+ move_cb,
+ rotate_cb,
+ complete_cb,
+ abort_cb
+ };
+ struct ev2_baton *eb;
+ const svn_string_t *author;
+ apr_hash_t *hooks_env;
+
+ /* Parse the hooks-env file (if any). */
+ SVN_ERR(svn_repos__parse_hooks_env(&hooks_env, repos->hooks_env_path,
+ scratch_pool, scratch_pool));
+
+ /* Can the user modify the repository at all? */
+ /* ### check against AUTHZ. */
+
+ author = svn_hash_gets(revprops, SVN_PROP_REVISION_AUTHOR);
+
+ eb = apr_palloc(result_pool, sizeof(*eb));
+ eb->repos = repos;
+ eb->authz = authz;
+ eb->authz_repos_name = authz_repos_name;
+ eb->authz_user = authz_user;
+ eb->commit_cb = commit_cb;
+ eb->commit_baton = commit_baton;
+
+ SVN_ERR(svn_fs__editor_create(&eb->inner, &eb->txn_name,
+ repos->fs, SVN_FS_TXN_CHECK_LOCKS,
+ cancel_func, cancel_baton,
+ result_pool, scratch_pool));
+
+ /* The TXN has been created. Go ahead and apply all revision properties. */
+ SVN_ERR(apply_revprops(repos->fs, eb->txn_name, revprops, scratch_pool));
+
+ /* Okay... some access is allowed. Let's run the start-commit hook. */
+ SVN_ERR(svn_repos__hooks_start_commit(repos, hooks_env,
+ author ? author->data : NULL,
+ repos->client_capabilities,
+ eb->txn_name, scratch_pool));
+
+ /* Wrap the FS editor within our editor. */
+ SVN_ERR(svn_editor_create(editor, eb, cancel_func, cancel_baton,
+ result_pool, scratch_pool));
+ SVN_ERR(svn_editor_setcb_many(*editor, &editor_cbs, scratch_pool));
+
return SVN_NO_ERROR;
}
diff --git a/subversion/libsvn_repos/delta.c b/subversion/libsvn_repos/delta.c
index cd7d73a..51cfda7 100644
--- a/subversion/libsvn_repos/delta.c
+++ b/subversion/libsvn_repos/delta.c
@@ -24,6 +24,7 @@
#include <apr_hash.h>
+#include "svn_hash.h"
#include "svn_types.h"
#include "svn_delta.h"
#include "svn_fs.h"
@@ -506,8 +507,7 @@ delta_proplists(struct context *c,
pool));
/* Transmit the committed-date. */
- committed_date = apr_hash_get(r_props, SVN_PROP_REVISION_DATE,
- APR_HASH_KEY_STRING);
+ committed_date = svn_hash_gets(r_props, SVN_PROP_REVISION_DATE);
if (committed_date || source_path)
{
SVN_ERR(change_fn(c, object, SVN_PROP_ENTRY_COMMITTED_DATE,
@@ -515,8 +515,7 @@ delta_proplists(struct context *c,
}
/* Transmit the last-author. */
- last_author = apr_hash_get(r_props, SVN_PROP_REVISION_AUTHOR,
- APR_HASH_KEY_STRING);
+ last_author = svn_hash_gets(r_props, SVN_PROP_REVISION_AUTHOR);
if (last_author || source_path)
{
SVN_ERR(change_fn(c, object, SVN_PROP_ENTRY_LAST_AUTHOR,
@@ -629,12 +628,23 @@ svn_repos__compare_files(svn_boolean_t *changed_p,
if (!*changed_p)
return SVN_NO_ERROR;
- /* From this point on, assume things haven't changed. */
+ /* If the SHA1 checksums match for these things, we'll claim they
+ have the same contents. (We don't give quite as much weight to
+ MD5 checksums.) */
+ SVN_ERR(svn_fs_file_checksum(&checksum1, svn_checksum_sha1,
+ root1, path1, FALSE, pool));
+ SVN_ERR(svn_fs_file_checksum(&checksum2, svn_checksum_sha1,
+ root2, path2, FALSE, pool));
+ if (checksum1 && checksum2)
+ {
+ *changed_p = !svn_checksum_match(checksum1, checksum2);
+ return SVN_NO_ERROR;
+ }
+
+ /* From this point on, our default answer is "Nothing's changed". */
*changed_p = FALSE;
- /* So, things have changed. But we need to know if the two sets of
- file contents are actually different. If they have differing
- sizes, then we know they differ. */
+ /* Different filesizes means the contents are different. */
SVN_ERR(svn_fs_file_length(&size1, root1, path1, pool));
SVN_ERR(svn_fs_file_length(&size2, root2, path2, pool));
if (size1 != size2)
@@ -643,8 +653,7 @@ svn_repos__compare_files(svn_boolean_t *changed_p,
return SVN_NO_ERROR;
}
- /* Same sizes, huh? Well, if their checksums differ, we know they
- differ. */
+ /* Different MD5 checksums means the contents are different. */
SVN_ERR(svn_fs_file_checksum(&checksum1, svn_checksum_md5, root1, path1,
FALSE, pool));
SVN_ERR(svn_fs_file_checksum(&checksum2, svn_checksum_md5, root2, path2,
@@ -655,13 +664,11 @@ svn_repos__compare_files(svn_boolean_t *changed_p,
return SVN_NO_ERROR;
}
- /* Same sizes, same checksums. Chances are reallllly good that they
- don't differ, but to be absolute sure, we need to compare bytes. */
+ /* And finally, different contents means the ... uh ... contents are
+ different. */
SVN_ERR(svn_fs_file_contents(&stream1, root1, path1, pool));
SVN_ERR(svn_fs_file_contents(&stream2, root2, path2, pool));
-
SVN_ERR(svn_stream_contents_same2(&same, stream1, stream2, pool));
-
*changed_p = !same;
return SVN_NO_ERROR;
@@ -1012,7 +1019,7 @@ delta_dirs(struct context *c,
}
/* Remove the entry from the source_hash. */
- apr_hash_set(s_entries, key, APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(s_entries, key, NULL);
}
else
{
diff --git a/subversion/libsvn_repos/deprecated.c b/subversion/libsvn_repos/deprecated.c
index ebcee8b..7208ba6 100644
--- a/subversion/libsvn_repos/deprecated.c
+++ b/subversion/libsvn_repos/deprecated.c
@@ -28,10 +28,13 @@
#include "svn_repos.h"
#include "svn_compat.h"
+#include "svn_hash.h"
#include "svn_props.h"
#include "svn_private_config.h"
+#include "repos.h"
+
@@ -46,24 +49,22 @@ svn_repos_get_commit_editor4(const svn_delta_editor_t **editor,
const char *base_path,
const char *user,
const char *log_msg,
- svn_commit_callback2_t callback,
- void *callback_baton,
+ svn_commit_callback2_t commit_callback,
+ void *commit_baton,
svn_repos_authz_callback_t authz_callback,
void *authz_baton,
apr_pool_t *pool)
{
apr_hash_t *revprop_table = apr_hash_make(pool);
if (user)
- apr_hash_set(revprop_table, SVN_PROP_REVISION_AUTHOR,
- APR_HASH_KEY_STRING,
- svn_string_create(user, pool));
+ svn_hash_sets(revprop_table, SVN_PROP_REVISION_AUTHOR,
+ svn_string_create(user, pool));
if (log_msg)
- apr_hash_set(revprop_table, SVN_PROP_REVISION_LOG,
- APR_HASH_KEY_STRING,
- svn_string_create(log_msg, pool));
+ svn_hash_sets(revprop_table, SVN_PROP_REVISION_LOG,
+ svn_string_create(log_msg, pool));
return svn_repos_get_commit_editor5(editor, edit_baton, repos, txn,
repos_url, base_path, revprop_table,
- callback, callback_baton,
+ commit_callback, commit_baton,
authz_callback, authz_baton, pool);
}
@@ -252,6 +253,41 @@ svn_repos_begin_report(void **report_baton,
}
svn_error_t *
+svn_repos_begin_report2(void **report_baton,
+ svn_revnum_t revnum,
+ svn_repos_t *repos,
+ const char *fs_base,
+ const char *target,
+ const char *tgt_path,
+ svn_boolean_t text_deltas,
+ svn_depth_t depth,
+ svn_boolean_t ignore_ancestry,
+ svn_boolean_t send_copyfrom_args,
+ const svn_delta_editor_t *editor,
+ void *edit_baton,
+ svn_repos_authz_func_t authz_read_func,
+ void *authz_read_baton,
+ apr_pool_t *pool)
+{
+ return svn_repos_begin_report3(report_baton,
+ revnum,
+ repos,
+ fs_base,
+ target,
+ tgt_path,
+ text_deltas,
+ depth,
+ ignore_ancestry,
+ send_copyfrom_args,
+ editor,
+ edit_baton,
+ authz_read_func,
+ authz_read_baton,
+ 0, /* disable zero-copy code path */
+ pool);
+}
+
+svn_error_t *
svn_repos_set_path2(void *baton, const char *path, svn_revnum_t rev,
svn_boolean_t start_empty, const char *lock_token,
apr_pool_t *pool)
@@ -570,8 +606,7 @@ repos_notify_handler(void *baton,
switch (notify->action)
{
case svn_repos_notify_warning:
- len = strlen(notify->warning_str);
- svn_error_clear(svn_stream_write(feedback_stream, notify->warning_str, &len));
+ svn_error_clear(svn_stream_puts(feedback_stream, notify->warning_str));
return;
case svn_repos_notify_dump_rev_end:
@@ -715,6 +750,28 @@ svn_repos_verify_fs(svn_repos_t *repos,
/*** From load.c ***/
svn_error_t *
+svn_repos_load_fs3(svn_repos_t *repos,
+ svn_stream_t *dumpstream,
+ enum svn_repos_load_uuid uuid_action,
+ const char *parent_dir,
+ svn_boolean_t use_pre_commit_hook,
+ svn_boolean_t use_post_commit_hook,
+ svn_boolean_t validate_props,
+ svn_repos_notify_func_t notify_func,
+ void *notify_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *pool)
+{
+ return svn_repos_load_fs4(repos, dumpstream,
+ SVN_INVALID_REVNUM, SVN_INVALID_REVNUM,
+ uuid_action, parent_dir,
+ use_pre_commit_hook, use_post_commit_hook,
+ validate_props, notify_func, notify_baton,
+ cancel_func, cancel_baton, pool);
+}
+
+svn_error_t *
svn_repos_load_fs2(svn_repos_t *repos,
svn_stream_t *dumpstream,
svn_stream_t *feedback_stream,
@@ -752,6 +809,27 @@ fns_from_fns2(const svn_repos_parse_fns2_t *fns2,
return fns;
}
+static svn_repos_parser_fns2_t *
+fns2_from_fns3(const svn_repos_parse_fns3_t *fns3,
+ apr_pool_t *pool)
+{
+ svn_repos_parser_fns2_t *fns2;
+
+ fns2 = apr_palloc(pool, sizeof(*fns2));
+ fns2->new_revision_record = fns3->new_revision_record;
+ fns2->uuid_record = fns3->uuid_record;
+ fns2->new_node_record = fns3->new_node_record;
+ fns2->set_revision_property = fns3->set_revision_property;
+ fns2->set_node_property = fns3->set_node_property;
+ fns2->remove_node_props = fns3->remove_node_props;
+ fns2->set_fulltext = fns3->set_fulltext;
+ fns2->close_node = fns3->close_node;
+ fns2->close_revision = fns3->close_revision;
+ fns2->delete_node_property = fns3->delete_node_property;
+ fns2->apply_textdelta = fns3->apply_textdelta;
+ return fns2;
+}
+
static svn_repos_parse_fns2_t *
fns2_from_fns(const svn_repos_parser_fns_t *fns,
apr_pool_t *pool)
@@ -773,6 +851,42 @@ fns2_from_fns(const svn_repos_parser_fns_t *fns,
return fns2;
}
+static svn_repos_parse_fns3_t *
+fns3_from_fns2(const svn_repos_parser_fns2_t *fns2,
+ apr_pool_t *pool)
+{
+ svn_repos_parse_fns3_t *fns3;
+
+ fns3 = apr_palloc(pool, sizeof(*fns3));
+ fns3->magic_header_record = NULL;
+ fns3->uuid_record = fns2->uuid_record;
+ fns3->new_revision_record = fns2->new_revision_record;
+ fns3->new_node_record = fns2->new_node_record;
+ fns3->set_revision_property = fns2->set_revision_property;
+ fns3->set_node_property = fns2->set_node_property;
+ fns3->remove_node_props = fns2->remove_node_props;
+ fns3->set_fulltext = fns2->set_fulltext;
+ fns3->close_node = fns2->close_node;
+ fns3->close_revision = fns2->close_revision;
+ fns3->delete_node_property = fns2->delete_node_property;
+ fns3->apply_textdelta = fns2->apply_textdelta;
+ return fns3;
+}
+
+svn_error_t *
+svn_repos_parse_dumpstream2(svn_stream_t *stream,
+ const svn_repos_parser_fns2_t *parse_fns,
+ void *parse_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *pool)
+{
+ svn_repos_parse_fns3_t *fns3 = fns3_from_fns2(parse_fns, pool);
+
+ return svn_repos_parse_dumpstream3(stream, fns3, parse_baton, FALSE,
+ cancel_func, cancel_baton, pool);
+}
+
svn_error_t *
svn_repos_parse_dumpstream(svn_stream_t *stream,
const svn_repos_parser_fns_t *parse_fns,
@@ -803,6 +917,31 @@ svn_repos_load_fs(svn_repos_t *repos,
}
svn_error_t *
+svn_repos_get_fs_build_parser3(const svn_repos_parse_fns2_t **callbacks,
+ void **parse_baton,
+ svn_repos_t *repos,
+ svn_boolean_t use_history,
+ svn_boolean_t validate_props,
+ enum svn_repos_load_uuid uuid_action,
+ const char *parent_dir,
+ svn_repos_notify_func_t notify_func,
+ void *notify_baton,
+ apr_pool_t *pool)
+{
+ const svn_repos_parse_fns3_t *fns3;
+
+ SVN_ERR(svn_repos_get_fs_build_parser4(&fns3, parse_baton, repos,
+ SVN_INVALID_REVNUM,
+ SVN_INVALID_REVNUM,
+ use_history, validate_props,
+ uuid_action, parent_dir,
+ notify_func, notify_baton, pool));
+
+ *callbacks = fns2_from_fns3(fns3, pool);
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
svn_repos_get_fs_build_parser2(const svn_repos_parse_fns2_t **parser,
void **parse_baton,
svn_repos_t *repos,
@@ -837,3 +976,42 @@ svn_repos_get_fs_build_parser(const svn_repos_parser_fns_t **parser_callbacks,
*parser_callbacks = fns_from_fns2(fns2, pool);
return SVN_NO_ERROR;
}
+
+
+svn_error_t *
+svn_repos_fs_begin_txn_for_update(svn_fs_txn_t **txn_p,
+ svn_repos_t *repos,
+ svn_revnum_t rev,
+ const char *author,
+ apr_pool_t *pool)
+{
+ /* ### someday, we might run a read-hook here. */
+
+ /* Begin the transaction. */
+ SVN_ERR(svn_fs_begin_txn2(txn_p, repos->fs, rev, 0, pool));
+
+ /* We pass the author to the filesystem by adding it as a property
+ on the txn. */
+
+ /* User (author). */
+ if (author)
+ {
+ svn_string_t val;
+ val.data = author;
+ val.len = strlen(author);
+ SVN_ERR(svn_fs_change_txn_prop(*txn_p, SVN_PROP_REVISION_AUTHOR,
+ &val, pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/*** From authz.c ***/
+
+svn_error_t *
+svn_repos_authz_read(svn_authz_t **authz_p, const char *file,
+ svn_boolean_t must_exist, apr_pool_t *pool)
+{
+ return svn_repos__authz_read(authz_p, file, NULL, must_exist,
+ FALSE, pool);
+}
diff --git a/subversion/libsvn_repos/dump.c b/subversion/libsvn_repos/dump.c
index ca23809..a64b180 100644
--- a/subversion/libsvn_repos/dump.c
+++ b/subversion/libsvn_repos/dump.c
@@ -34,6 +34,7 @@
#include "svn_time.h"
#include "svn_checksum.h"
#include "svn_props.h"
+#include "svn_sorts.h"
#include "private/svn_mergeinfo_private.h"
#include "private/svn_fs_private.h"
@@ -71,7 +72,8 @@ store_delta(apr_file_t **tempfile, svn_filesize_t *len,
/* Compute the delta and send it to the temporary file. */
SVN_ERR(svn_fs_get_file_delta_stream(&delta_stream, oldroot, oldpath,
newroot, newpath, pool));
- svn_txdelta_to_svndiff2(&wh, &whb, temp_stream, 0, pool);
+ svn_txdelta_to_svndiff3(&wh, &whb, temp_stream, 0,
+ SVN_DELTA_COMPRESSION_LEVEL_DEFAULT, pool);
SVN_ERR(svn_txdelta_send_txstream(delta_stream, wh, whb, pool));
/* Get the length of the temporary file and rewind it. */
@@ -105,6 +107,9 @@ struct edit_baton
svn_fs_root_t *fs_root;
svn_revnum_t current_rev;
+ /* The fs, so we can grab historic information if needed. */
+ svn_fs_t *fs;
+
/* True if dumped nodes should output deltas instead of full text. */
svn_boolean_t use_deltas;
@@ -114,13 +119,13 @@ struct edit_baton
/* The first revision dumped in this dumpstream. */
svn_revnum_t oldest_dumped_rev;
- /* Set to true if any references to revisions older than
+ /* If not NULL, set to true if any references to revisions older than
OLDEST_DUMPED_REV were found in the dumpstream. */
- svn_boolean_t found_old_reference;
+ svn_boolean_t *found_old_reference;
- /* Set to true if any mergeinfo was dumped which contains revisions
- older than OLDEST_DUMPED_REV. */
- svn_boolean_t found_old_mergeinfo;
+ /* If not NULL, set to true if any mergeinfo was dumped which contains
+ revisions older than OLDEST_DUMPED_REV. */
+ svn_boolean_t *found_old_mergeinfo;
/* reusable buffer for writing file contents */
char buffer[SVN__STREAM_CHUNK_SIZE];
@@ -212,6 +217,49 @@ make_dir_baton(const char *path,
}
+/* If the mergeinfo in MERGEINFO_STR refers to any revisions older than
+ * OLDEST_DUMPED_REV, issue a warning and set *FOUND_OLD_MERGEINFO to TRUE,
+ * otherwise leave *FOUND_OLD_MERGEINFO unchanged.
+ */
+static svn_error_t *
+verify_mergeinfo_revisions(svn_boolean_t *found_old_mergeinfo,
+ const char *mergeinfo_str,
+ svn_revnum_t oldest_dumped_rev,
+ svn_repos_notify_func_t notify_func,
+ void *notify_baton,
+ apr_pool_t *pool)
+{
+ svn_mergeinfo_t mergeinfo, old_mergeinfo;
+
+ SVN_ERR(svn_mergeinfo_parse(&mergeinfo, mergeinfo_str, pool));
+ SVN_ERR(svn_mergeinfo__filter_mergeinfo_by_ranges(
+ &old_mergeinfo, mergeinfo,
+ oldest_dumped_rev - 1, 0,
+ TRUE, pool, pool));
+
+ if (apr_hash_count(old_mergeinfo))
+ {
+ svn_repos_notify_t *notify =
+ svn_repos_notify_create(svn_repos_notify_warning, pool);
+
+ notify->warning = svn_repos_notify_warning_found_old_mergeinfo;
+ notify->warning_str = apr_psprintf(
+ pool,
+ _("Mergeinfo referencing revision(s) prior "
+ "to the oldest dumped revision (r%ld). "
+ "Loading this dump may result in invalid "
+ "mergeinfo."),
+ oldest_dumped_rev);
+
+ if (found_old_mergeinfo)
+ *found_old_mergeinfo = TRUE;
+ notify_func(notify_baton, notify, pool);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
/* This helper is the main "meat" of the editor -- it does all the
work of writing a node record.
@@ -279,11 +327,11 @@ dump_node(struct edit_baton *eb,
SVN_REPOS_DUMPFILE_NODE_PATH ": %s\n",
path));
if (kind == svn_node_file)
- SVN_ERR(svn_stream_printf(eb->stream, pool,
- SVN_REPOS_DUMPFILE_NODE_KIND ": file\n"));
+ SVN_ERR(svn_stream_puts(eb->stream,
+ SVN_REPOS_DUMPFILE_NODE_KIND ": file\n"));
else if (kind == svn_node_dir)
- SVN_ERR(svn_stream_printf(eb->stream, pool,
- SVN_REPOS_DUMPFILE_NODE_KIND ": dir\n"));
+ SVN_ERR(svn_stream_puts(eb->stream,
+ SVN_REPOS_DUMPFILE_NODE_KIND ": dir\n"));
/* Remove leading slashes from copyfrom paths. */
if (cmp_path)
@@ -298,9 +346,8 @@ dump_node(struct edit_baton *eb,
if (action == svn_node_action_change)
{
- SVN_ERR(svn_stream_printf(eb->stream, pool,
- SVN_REPOS_DUMPFILE_NODE_ACTION
- ": change\n"));
+ SVN_ERR(svn_stream_puts(eb->stream,
+ SVN_REPOS_DUMPFILE_NODE_ACTION ": change\n"));
/* either the text or props changed, or possibly both. */
SVN_ERR(svn_fs_revision_root(&compare_root,
@@ -320,9 +367,9 @@ dump_node(struct edit_baton *eb,
if (! is_copy)
{
/* a simple delete+add, implied by a single 'replace' action. */
- SVN_ERR(svn_stream_printf(eb->stream, pool,
- SVN_REPOS_DUMPFILE_NODE_ACTION
- ": replace\n"));
+ SVN_ERR(svn_stream_puts(eb->stream,
+ SVN_REPOS_DUMPFILE_NODE_ACTION
+ ": replace\n"));
/* definitely need to dump all content for a replace. */
if (kind == svn_node_file)
@@ -335,9 +382,9 @@ dump_node(struct edit_baton *eb,
/* the path & kind headers have already been printed; just
add a delete action, and end the current record.*/
- SVN_ERR(svn_stream_printf(eb->stream, pool,
- SVN_REPOS_DUMPFILE_NODE_ACTION
- ": delete\n\n"));
+ SVN_ERR(svn_stream_puts(eb->stream,
+ SVN_REPOS_DUMPFILE_NODE_ACTION
+ ": delete\n\n"));
/* recurse: print an additional add-with-history record. */
SVN_ERR(dump_node(eb, path, kind, svn_node_action_add,
@@ -351,9 +398,8 @@ dump_node(struct edit_baton *eb,
}
else if (action == svn_node_action_delete)
{
- SVN_ERR(svn_stream_printf(eb->stream, pool,
- SVN_REPOS_DUMPFILE_NODE_ACTION
- ": delete\n"));
+ SVN_ERR(svn_stream_puts(eb->stream,
+ SVN_REPOS_DUMPFILE_NODE_ACTION ": delete\n"));
/* we can leave this routine quietly now, don't need to dump
any content. */
@@ -362,8 +408,8 @@ dump_node(struct edit_baton *eb,
}
else if (action == svn_node_action_add)
{
- SVN_ERR(svn_stream_printf(eb->stream, pool,
- SVN_REPOS_DUMPFILE_NODE_ACTION ": add\n"));
+ SVN_ERR(svn_stream_puts(eb->stream,
+ SVN_REPOS_DUMPFILE_NODE_ACTION ": add\n"));
if (! is_copy)
{
@@ -389,7 +435,8 @@ dump_node(struct edit_baton *eb,
" into an empty repository"
" will fail."),
cmp_rev, eb->oldest_dumped_rev);
- eb->found_old_reference = TRUE;
+ if (eb->found_old_reference)
+ *eb->found_old_reference = TRUE;
eb->notify_func(eb->notify_baton, notify, pool);
}
@@ -467,36 +514,17 @@ dump_node(struct edit_baton *eb,
dumped. */
if (!eb->verify && eb->notify_func && eb->oldest_dumped_rev > 1)
{
- svn_string_t *mergeinfo_str = apr_hash_get(prophash,
- SVN_PROP_MERGEINFO,
- APR_HASH_KEY_STRING);
+ svn_string_t *mergeinfo_str = svn_hash_gets(prophash,
+ SVN_PROP_MERGEINFO);
if (mergeinfo_str)
{
- svn_mergeinfo_t mergeinfo, old_mergeinfo;
-
- SVN_ERR(svn_mergeinfo_parse(&mergeinfo, mergeinfo_str->data,
- pool));
- SVN_ERR(svn_mergeinfo__filter_mergeinfo_by_ranges(
- &old_mergeinfo, mergeinfo,
- eb->oldest_dumped_rev - 1, 0,
- TRUE, pool, pool));
- if (apr_hash_count(old_mergeinfo))
- {
- svn_repos_notify_t *notify =
- svn_repos_notify_create(svn_repos_notify_warning, pool);
-
- notify->warning = svn_repos_notify_warning_found_old_mergeinfo;
- notify->warning_str = apr_psprintf(
- pool,
- _("Mergeinfo referencing revision(s) prior "
- "to the oldest dumped revision (r%ld). "
- "Loading this dump may result in invalid "
- "mergeinfo."),
- eb->oldest_dumped_rev);
-
- eb->found_old_mergeinfo = TRUE;
- eb->notify_func(eb->notify_baton, notify, pool);
- }
+ /* An error in verifying the mergeinfo must not prevent dumping
+ the data. Ignore any such error. */
+ svn_error_clear(verify_mergeinfo_revisions(
+ eb->found_old_mergeinfo,
+ mergeinfo_str->data, eb->oldest_dumped_rev,
+ eb->notify_func, eb->notify_baton,
+ pool));
}
}
@@ -506,9 +534,8 @@ dump_node(struct edit_baton *eb,
saying that our property contents are a delta. */
SVN_ERR(svn_fs_node_proplist(&oldhash, compare_root, compare_path,
pool));
- SVN_ERR(svn_stream_printf(eb->stream, pool,
- SVN_REPOS_DUMPFILE_PROP_DELTA
- ": true\n"));
+ SVN_ERR(svn_stream_puts(eb->stream,
+ SVN_REPOS_DUMPFILE_PROP_DELTA ": true\n"));
}
else
oldhash = apr_hash_make(pool);
@@ -539,9 +566,8 @@ dump_node(struct edit_baton *eb,
saying our text contents are a delta. */
SVN_ERR(store_delta(&delta_file, &textlen, compare_root,
compare_path, eb->fs_root, path, pool));
- SVN_ERR(svn_stream_printf(eb->stream, pool,
- SVN_REPOS_DUMPFILE_TEXT_DELTA
- ": true\n"));
+ SVN_ERR(svn_stream_puts(eb->stream,
+ SVN_REPOS_DUMPFILE_TEXT_DELTA ": true\n"));
if (compare_root)
{
@@ -652,7 +678,7 @@ delete_entry(const char *path,
const char *mypath = apr_pstrdup(pb->pool, path);
/* remember this path needs to be deleted. */
- apr_hash_set(pb->deleted_entries, mypath, APR_HASH_KEY_STRING, pb);
+ svn_hash_sets(pb->deleted_entries, mypath, pb);
return SVN_NO_ERROR;
}
@@ -674,7 +700,7 @@ add_directory(const char *path,
= make_dir_baton(path, copyfrom_path, copyfrom_rev, eb, pb, TRUE, pool);
/* This might be a replacement -- is the path already deleted? */
- val = apr_hash_get(pb->deleted_entries, path, APR_HASH_KEY_STRING);
+ val = svn_hash_gets(pb->deleted_entries, path);
/* Detect an add-with-history. */
is_copy = ARE_VALID_COPY_ARGS(copyfrom_path, copyfrom_rev);
@@ -690,7 +716,7 @@ add_directory(const char *path,
if (val)
/* Delete the path, it's now been dumped. */
- apr_hash_set(pb->deleted_entries, path, APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(pb->deleted_entries, path, NULL);
new_db->written_out = TRUE;
@@ -733,17 +759,20 @@ close_directory(void *dir_baton,
{
struct dir_baton *db = dir_baton;
struct edit_baton *eb = db->edit_baton;
- apr_hash_index_t *hi;
apr_pool_t *subpool = svn_pool_create(pool);
-
- for (hi = apr_hash_first(pool, db->deleted_entries);
- hi;
- hi = apr_hash_next(hi))
+ int i;
+ apr_array_header_t *sorted_entries;
+
+ /* Sort entries lexically instead of as paths. Even though the entries
+ * are full paths they're all in the same directory (see comment in struct
+ * dir_baton definition). So we really want to sort by basename, in which
+ * case the lexical sort function is more efficient. */
+ sorted_entries = svn_sort__hash(db->deleted_entries,
+ svn_sort_compare_items_lexically, pool);
+ for (i = 0; i < sorted_entries->nelts; i++)
{
- const void *key;
- const char *path;
- apr_hash_this(hi, &key, NULL, NULL);
- path = key;
+ const char *path = APR_ARRAY_IDX(sorted_entries, i,
+ svn_sort__item_t).key;
svn_pool_clear(subpool);
@@ -774,7 +803,7 @@ add_file(const char *path,
svn_boolean_t is_copy = FALSE;
/* This might be a replacement -- is the path already deleted? */
- val = apr_hash_get(pb->deleted_entries, path, APR_HASH_KEY_STRING);
+ val = svn_hash_gets(pb->deleted_entries, path);
/* Detect add-with-history. */
is_copy = ARE_VALID_COPY_ARGS(copyfrom_path, copyfrom_rev);
@@ -790,7 +819,7 @@ add_file(const char *path,
if (val)
/* delete the path, it's now been dumped. */
- apr_hash_set(pb->deleted_entries, path, APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(pb->deleted_entries, path, NULL);
*file_baton = NULL; /* muhahahaha */
return SVN_NO_ERROR;
@@ -849,6 +878,94 @@ change_dir_prop(void *parent_baton,
return SVN_NO_ERROR;
}
+static svn_error_t *
+fetch_props_func(apr_hash_t **props,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton *eb = baton;
+ svn_error_t *err;
+ svn_fs_root_t *fs_root;
+
+ if (!SVN_IS_VALID_REVNUM(base_revision))
+ base_revision = eb->current_rev - 1;
+
+ SVN_ERR(svn_fs_revision_root(&fs_root, eb->fs, base_revision, scratch_pool));
+
+ err = svn_fs_node_proplist(props, fs_root, path, result_pool);
+ if (err && err->apr_err == SVN_ERR_FS_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ *props = apr_hash_make(result_pool);
+ return SVN_NO_ERROR;
+ }
+ else if (err)
+ return svn_error_trace(err);
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+fetch_kind_func(svn_node_kind_t *kind,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton *eb = baton;
+ svn_fs_root_t *fs_root;
+
+ if (!SVN_IS_VALID_REVNUM(base_revision))
+ base_revision = eb->current_rev - 1;
+
+ SVN_ERR(svn_fs_revision_root(&fs_root, eb->fs, base_revision, scratch_pool));
+
+ SVN_ERR(svn_fs_check_path(kind, fs_root, path, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+fetch_base_func(const char **filename,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton *eb = baton;
+ svn_stream_t *contents;
+ svn_stream_t *file_stream;
+ const char *tmp_filename;
+ svn_error_t *err;
+ svn_fs_root_t *fs_root;
+
+ if (!SVN_IS_VALID_REVNUM(base_revision))
+ base_revision = eb->current_rev - 1;
+
+ SVN_ERR(svn_fs_revision_root(&fs_root, eb->fs, base_revision, scratch_pool));
+
+ err = svn_fs_file_contents(&contents, fs_root, path, scratch_pool);
+ if (err && err->apr_err == SVN_ERR_FS_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ *filename = NULL;
+ return SVN_NO_ERROR;
+ }
+ else if (err)
+ return svn_error_trace(err);
+ SVN_ERR(svn_stream_open_unique(&file_stream, &tmp_filename, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_stream_copy3(contents, file_stream, NULL, NULL, scratch_pool));
+
+ *filename = apr_pstrdup(result_pool, tmp_filename);
+
+ return SVN_NO_ERROR;
+}
static svn_error_t *
@@ -858,6 +975,10 @@ get_dump_editor(const svn_delta_editor_t **editor,
svn_revnum_t to_rev,
const char *root_path,
svn_stream_t *stream,
+ svn_boolean_t *found_old_reference,
+ svn_boolean_t *found_old_mergeinfo,
+ svn_error_t *(*custom_close_directory)(void *dir_baton,
+ apr_pool_t *scratch_pool),
svn_repos_notify_func_t notify_func,
void *notify_baton,
svn_revnum_t oldest_dumped_rev,
@@ -870,6 +991,8 @@ get_dump_editor(const svn_delta_editor_t **editor,
root baton. */
struct edit_baton *eb = apr_pcalloc(pool, sizeof(*eb));
svn_delta_editor_t *dump_editor = svn_delta_default_editor(pool);
+ svn_delta_shim_callbacks_t *shim_callbacks =
+ svn_delta_shim_callbacks_default(pool);
/* Set up the edit baton. */
eb->stream = stream;
@@ -879,16 +1002,22 @@ get_dump_editor(const svn_delta_editor_t **editor,
eb->bufsize = sizeof(eb->buffer);
eb->path = apr_pstrdup(pool, root_path);
SVN_ERR(svn_fs_revision_root(&(eb->fs_root), fs, to_rev, pool));
+ eb->fs = fs;
eb->current_rev = to_rev;
eb->use_deltas = use_deltas;
eb->verify = verify;
+ eb->found_old_reference = found_old_reference;
+ eb->found_old_mergeinfo = found_old_mergeinfo;
/* Set up the editor. */
dump_editor->open_root = open_root;
dump_editor->delete_entry = delete_entry;
dump_editor->add_directory = add_directory;
dump_editor->open_directory = open_directory;
- dump_editor->close_directory = close_directory;
+ if (custom_close_directory)
+ dump_editor->close_directory = custom_close_directory;
+ else
+ dump_editor->close_directory = close_directory;
dump_editor->change_dir_prop = change_dir_prop;
dump_editor->add_file = add_file;
dump_editor->open_file = open_file;
@@ -896,6 +1025,14 @@ get_dump_editor(const svn_delta_editor_t **editor,
*edit_baton = eb;
*editor = dump_editor;
+ shim_callbacks->fetch_kind_func = fetch_kind_func;
+ shim_callbacks->fetch_props_func = fetch_props_func;
+ shim_callbacks->fetch_base_func = fetch_base_func;
+ shim_callbacks->fetch_baton = eb;
+
+ SVN_ERR(svn_editor__insert_shims(editor, edit_baton, *editor, *edit_baton,
+ NULL, NULL, shim_callbacks, pool, pool));
+
return SVN_NO_ERROR;
}
@@ -928,15 +1065,13 @@ write_revision_record(svn_stream_t *stream,
/* Run revision date properties through the time conversion to
canonicalize them. */
/* ### Remove this when it is no longer needed for sure. */
- datevalue = apr_hash_get(props, SVN_PROP_REVISION_DATE,
- APR_HASH_KEY_STRING);
+ datevalue = svn_hash_gets(props, SVN_PROP_REVISION_DATE);
if (datevalue)
{
SVN_ERR(svn_time_from_cstring(&timetemp, datevalue->data, pool));
datevalue = svn_string_create(svn_time_to_cstring(timetemp, pool),
pool);
- apr_hash_set(props, SVN_PROP_REVISION_DATE, APR_HASH_KEY_STRING,
- datevalue);
+ svn_hash_sets(props, SVN_PROP_REVISION_DATE, datevalue);
}
encoded_prophash = svn_stringbuf_create_ensure(0, pool);
@@ -1093,7 +1228,9 @@ svn_repos_dump_fs3(svn_repos_t *repos,
non-incremental dump. */
use_deltas_for_rev = use_deltas && (incremental || i != start_rev);
SVN_ERR(get_dump_editor(&dump_editor, &dump_edit_baton, fs, to_rev,
- "", stream, notify_func, notify_baton,
+ "", stream, &found_old_reference,
+ &found_old_mergeinfo, NULL,
+ notify_func, notify_baton,
start_rev, use_deltas_for_rev, FALSE, subpool));
/* Drive the editor in one way or another. */
@@ -1122,6 +1259,10 @@ svn_repos_dump_fs3(svn_repos_t *repos,
SVN_ERR(svn_repos_replay2(to_root, "", SVN_INVALID_REVNUM, FALSE,
dump_editor, dump_edit_baton,
NULL, NULL, subpool));
+
+ /* While our editor close_edit implementation is a no-op, we still
+ do this for completeness. */
+ SVN_ERR(dump_editor->close_edit(dump_edit_baton, subpool));
}
loop_end:
@@ -1130,14 +1271,6 @@ svn_repos_dump_fs3(svn_repos_t *repos,
notify->revision = to_rev;
notify_func(notify_baton, notify, subpool);
}
-
- if (dump_edit_baton) /* We never get an edit baton for r0. */
- {
- if (((struct edit_baton *)dump_edit_baton)->found_old_reference)
- found_old_reference = TRUE;
- if (((struct edit_baton *)dump_edit_baton)->found_old_mergeinfo)
- found_old_mergeinfo = TRUE;
- }
}
if (notify_func)
@@ -1207,13 +1340,15 @@ verify_directory_entry(void *baton, const void *key, apr_ssize_t klen,
void *val, apr_pool_t *pool)
{
struct dir_baton *db = baton;
+ svn_fs_dirent_t *dirent = (svn_fs_dirent_t *)val;
char *path = svn_relpath_join(db->path, (const char *)key, pool);
- svn_node_kind_t kind;
apr_hash_t *dirents;
svn_filesize_t len;
- SVN_ERR(svn_fs_check_path(&kind, db->edit_baton->fs_root, path, pool));
- switch (kind) {
+ /* since we can't access the directory entries directly by their ID,
+ we need to navigate from the FS_ROOT to them (relatively expensive
+ because we may start at a never rev than the last change to node). */
+ switch (dirent->kind) {
case svn_node_dir:
/* Getting this directory's contents is enough to ensure that our
link to it is correct. */
@@ -1226,7 +1361,8 @@ verify_directory_entry(void *baton, const void *key, apr_ssize_t klen,
break;
default:
return svn_error_createf(SVN_ERR_NODE_UNEXPECTED_KIND, NULL,
- _("Unexpected node kind %d for '%s'"), kind, path);
+ _("Unexpected node kind %d for '%s'"),
+ dirent->kind, path);
}
return SVN_NO_ERROR;
@@ -1245,6 +1381,32 @@ verify_close_directory(void *dir_baton,
return close_directory(dir_baton, pool);
}
+/* Baton type used for forwarding notifications from FS API to REPOS API. */
+struct verify_fs2_notify_func_baton_t
+{
+ /* notification function to call (must not be NULL) */
+ svn_repos_notify_func_t notify_func;
+
+ /* baton to use for it */
+ void *notify_baton;
+
+ /* type of notification to send (we will simply plug in the revision) */
+ svn_repos_notify_t *notify;
+};
+
+/* Forward the notification to BATON. */
+static void
+verify_fs2_notify_func(svn_revnum_t revision,
+ void *baton,
+ apr_pool_t *pool)
+{
+ struct verify_fs2_notify_func_baton_t *notify_baton = baton;
+
+ notify_baton->notify->revision = revision;
+ notify_baton->notify_func(notify_baton->notify_baton,
+ notify_baton->notify, pool);
+}
+
svn_error_t *
svn_repos_verify_fs2(svn_repos_t *repos,
svn_revnum_t start_rev,
@@ -1260,6 +1422,8 @@ svn_repos_verify_fs2(svn_repos_t *repos,
svn_revnum_t rev;
apr_pool_t *iterpool = svn_pool_create(pool);
svn_repos_notify_t *notify;
+ svn_fs_progress_notify_func_t verify_notify = NULL;
+ struct verify_fs2_notify_func_baton_t *verify_notify_baton = NULL;
/* Determine the current youngest revision of the filesystem. */
SVN_ERR(svn_fs_youngest_rev(&youngest, fs, pool));
@@ -1282,14 +1446,30 @@ svn_repos_verify_fs2(svn_repos_t *repos,
"(youngest revision is %ld)"),
end_rev, youngest);
- /* Create a notify object that we can reuse within the loop. */
+ /* Create a notify object that we can reuse within the loop and a
+ forwarding structure for notifications from inside svn_fs_verify(). */
if (notify_func)
- notify = svn_repos_notify_create(svn_repos_notify_verify_rev_end,
- pool);
+ {
+ notify = svn_repos_notify_create(svn_repos_notify_verify_rev_end,
+ pool);
+
+ verify_notify = verify_fs2_notify_func;
+ verify_notify_baton = apr_palloc(pool, sizeof(*verify_notify_baton));
+ verify_notify_baton->notify_func = notify_func;
+ verify_notify_baton->notify_baton = notify_baton;
+ verify_notify_baton->notify
+ = svn_repos_notify_create(svn_repos_notify_verify_rev_structure, pool);
+ }
+
+ /* Verify global metadata and backend-specific data first. */
+ SVN_ERR(svn_fs_verify(svn_fs_path(fs, pool), svn_fs_config(fs, pool),
+ start_rev, end_rev,
+ verify_notify, verify_notify_baton,
+ cancel_func, cancel_baton, pool));
for (rev = start_rev; rev <= end_rev; rev++)
{
- svn_delta_editor_t *dump_editor;
+ const svn_delta_editor_t *dump_editor;
void *dump_edit_baton;
const svn_delta_editor_t *cancel_editor;
void *cancel_edit_baton;
@@ -1299,14 +1479,15 @@ svn_repos_verify_fs2(svn_repos_t *repos,
svn_pool_clear(iterpool);
/* Get cancellable dump editor, but with our close_directory handler. */
- SVN_ERR(get_dump_editor((const svn_delta_editor_t **)&dump_editor,
- &dump_edit_baton, fs, rev, "",
- svn_stream_empty(pool),
+ SVN_ERR(get_dump_editor(&dump_editor, &dump_edit_baton,
+ fs, rev, "",
+ svn_stream_empty(iterpool),
+ NULL, NULL,
+ verify_close_directory,
notify_func, notify_baton,
start_rev,
FALSE, TRUE, /* use_deltas, verify */
iterpool));
- dump_editor->close_directory = verify_close_directory;
SVN_ERR(svn_delta_get_cancellation_editor(cancel_func, cancel_baton,
dump_editor, dump_edit_baton,
&cancel_editor,
@@ -1314,9 +1495,15 @@ svn_repos_verify_fs2(svn_repos_t *repos,
iterpool));
SVN_ERR(svn_fs_revision_root(&to_root, fs, rev, iterpool));
+ SVN_ERR(svn_fs_verify_root(to_root, iterpool));
+
SVN_ERR(svn_repos_replay2(to_root, "", SVN_INVALID_REVNUM, FALSE,
cancel_editor, cancel_edit_baton,
NULL, NULL, iterpool));
+ /* While our editor close_edit implementation is a no-op, we still
+ do this for completeness. */
+ SVN_ERR(cancel_editor->close_edit(cancel_edit_baton, iterpool));
+
SVN_ERR(svn_fs_revision_proplist(&props, fs, rev, iterpool));
if (notify_func)
@@ -1333,6 +1520,7 @@ svn_repos_verify_fs2(svn_repos_t *repos,
notify_func(notify_baton, notify, iterpool);
}
+ /* Per-backend verification. */
svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
diff --git a/subversion/libsvn_repos/fs-wrap.c b/subversion/libsvn_repos/fs-wrap.c
index a230ca8..006b286 100644
--- a/subversion/libsvn_repos/fs-wrap.c
+++ b/subversion/libsvn_repos/fs-wrap.c
@@ -24,6 +24,7 @@
#include <string.h>
#include <ctype.h>
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_error.h"
#include "svn_fs.h"
@@ -31,10 +32,12 @@
#include "svn_props.h"
#include "svn_repos.h"
#include "svn_time.h"
+#include "svn_sorts.h"
#include "repos.h"
#include "svn_private_config.h"
#include "private/svn_repos_private.h"
#include "private/svn_utf_private.h"
+#include "private/svn_fspath.h"
/*** Commit wrappers ***/
@@ -48,12 +51,38 @@ svn_repos_fs_commit_txn(const char **conflict_p,
{
svn_error_t *err, *err2;
const char *txn_name;
+ apr_hash_t *props;
+ apr_pool_t *iterpool;
+ apr_hash_index_t *hi;
+ apr_hash_t *hooks_env;
*new_rev = SVN_INVALID_REVNUM;
+ /* Parse the hooks-env file (if any). */
+ SVN_ERR(svn_repos__parse_hooks_env(&hooks_env, repos->hooks_env_path,
+ pool, pool));
+
/* Run pre-commit hooks. */
SVN_ERR(svn_fs_txn_name(&txn_name, txn, pool));
- SVN_ERR(svn_repos__hooks_pre_commit(repos, txn_name, pool));
+ SVN_ERR(svn_repos__hooks_pre_commit(repos, hooks_env, txn_name, pool));
+
+ /* Remove any ephemeral transaction properties. */
+ SVN_ERR(svn_fs_txn_proplist(&props, txn, pool));
+ iterpool = svn_pool_create(pool);
+ for (hi = apr_hash_first(pool, props); hi; hi = apr_hash_next(hi))
+ {
+ const void *key;
+ apr_hash_this(hi, &key, NULL, NULL);
+
+ svn_pool_clear(iterpool);
+
+ if (strncmp(key, SVN_PROP_TXN_PREFIX,
+ (sizeof(SVN_PROP_TXN_PREFIX) - 1)) == 0)
+ {
+ SVN_ERR(svn_fs_change_txn_prop(txn, key, NULL, iterpool));
+ }
+ }
+ svn_pool_destroy(iterpool);
/* Commit. */
err = svn_fs_commit_txn(conflict_p, new_rev, txn, pool);
@@ -61,7 +90,8 @@ svn_repos_fs_commit_txn(const char **conflict_p,
return err;
/* Run post-commit hooks. */
- if ((err2 = svn_repos__hooks_post_commit(repos, *new_rev, pool)))
+ if ((err2 = svn_repos__hooks_post_commit(repos, hooks_env,
+ *new_rev, txn_name, pool)))
{
err2 = svn_error_create
(SVN_ERR_REPOS_POST_COMMIT_HOOK_FAILED, err2,
@@ -83,23 +113,44 @@ svn_repos_fs_begin_txn_for_commit2(svn_fs_txn_t **txn_p,
apr_hash_t *revprop_table,
apr_pool_t *pool)
{
- svn_string_t *author = apr_hash_get(revprop_table, SVN_PROP_REVISION_AUTHOR,
- APR_HASH_KEY_STRING);
apr_array_header_t *revprops;
+ const char *txn_name;
+ svn_string_t *author = svn_hash_gets(revprop_table, SVN_PROP_REVISION_AUTHOR);
+ apr_hash_t *hooks_env;
+ svn_error_t *err;
+ svn_fs_txn_t *txn;
- /* Run start-commit hooks. */
- SVN_ERR(svn_repos__hooks_start_commit(repos, author ? author->data : NULL,
- repos->client_capabilities, pool));
+ /* Parse the hooks-env file (if any). */
+ SVN_ERR(svn_repos__parse_hooks_env(&hooks_env, repos->hooks_env_path,
+ pool, pool));
- /* Begin the transaction, ask for the fs to do on-the-fly lock checks. */
- SVN_ERR(svn_fs_begin_txn2(txn_p, repos->fs, rev,
+ /* Begin the transaction, ask for the fs to do on-the-fly lock checks.
+ We fetch its name, too, so the start-commit hook can use it. */
+ SVN_ERR(svn_fs_begin_txn2(&txn, repos->fs, rev,
SVN_FS_TXN_CHECK_LOCKS, pool));
+ err = svn_fs_txn_name(&txn_name, txn, pool);
+ if (err)
+ return svn_error_compose_create(err, svn_fs_abort_txn(txn, pool));
/* We pass the revision properties to the filesystem by adding them
as properties on the txn. Later, when we commit the txn, these
properties will be copied into the newly created revision. */
revprops = svn_prop_hash_to_array(revprop_table, pool);
- return svn_repos_fs_change_txn_props(*txn_p, revprops, pool);
+ err = svn_repos_fs_change_txn_props(txn, revprops, pool);
+ if (err)
+ return svn_error_compose_create(err, svn_fs_abort_txn(txn, pool));
+
+ /* Run start-commit hooks. */
+ err = svn_repos__hooks_start_commit(repos, hooks_env,
+ author ? author->data : NULL,
+ repos->client_capabilities, txn_name,
+ pool);
+ if (err)
+ return svn_error_compose_create(err, svn_fs_abort_txn(txn, pool));
+
+ /* We have API promise that *TXN_P is unaffected on faulure. */
+ *txn_p = txn;
+ return SVN_NO_ERROR;
}
@@ -113,47 +164,15 @@ svn_repos_fs_begin_txn_for_commit(svn_fs_txn_t **txn_p,
{
apr_hash_t *revprop_table = apr_hash_make(pool);
if (author)
- apr_hash_set(revprop_table, SVN_PROP_REVISION_AUTHOR,
- APR_HASH_KEY_STRING,
- svn_string_create(author, pool));
+ svn_hash_sets(revprop_table, SVN_PROP_REVISION_AUTHOR,
+ svn_string_create(author, pool));
if (log_msg)
- apr_hash_set(revprop_table, SVN_PROP_REVISION_LOG,
- APR_HASH_KEY_STRING,
- svn_string_create(log_msg, pool));
+ svn_hash_sets(revprop_table, SVN_PROP_REVISION_LOG,
+ svn_string_create(log_msg, pool));
return svn_repos_fs_begin_txn_for_commit2(txn_p, repos, rev, revprop_table,
pool);
}
-
-svn_error_t *
-svn_repos_fs_begin_txn_for_update(svn_fs_txn_t **txn_p,
- svn_repos_t *repos,
- svn_revnum_t rev,
- const char *author,
- apr_pool_t *pool)
-{
- /* ### someday, we might run a read-hook here. */
-
- /* Begin the transaction. */
- SVN_ERR(svn_fs_begin_txn2(txn_p, repos->fs, rev, 0, pool));
-
- /* We pass the author to the filesystem by adding it as a property
- on the txn. */
-
- /* User (author). */
- if (author)
- {
- svn_string_t val;
- val.data = author;
- val.len = strlen(author);
- SVN_ERR(svn_fs_change_txn_prop(*txn_p, SVN_PROP_REVISION_AUTHOR,
- &val, pool));
- }
-
- return SVN_NO_ERROR;
-}
-
-
/*** Property wrappers ***/
@@ -162,7 +181,11 @@ svn_repos__validate_prop(const char *name,
const svn_string_t *value,
apr_pool_t *pool)
{
- svn_prop_kind_t kind = svn_property_kind(NULL, name);
+ svn_prop_kind_t kind = svn_property_kind2(name);
+
+ /* Allow deleting any property, even a property we don't allow to set. */
+ if (value == NULL)
+ return SVN_NO_ERROR;
/* Disallow setting non-regular properties. */
if (kind != svn_prop_regular_kind)
@@ -179,7 +202,7 @@ svn_repos__validate_prop(const char *name,
* LF line endings. */
if (svn_prop_needs_translation(name))
{
- if (svn_utf__is_valid(value->data, value->len) == FALSE)
+ if (!svn_utf__is_valid(value->data, value->len))
{
return svn_error_createf
(SVN_ERR_BAD_PROPERTY_VALUE, NULL,
@@ -321,6 +344,7 @@ svn_repos_fs_change_rev_prop4(svn_repos_t *repos,
{
const svn_string_t *old_value;
char action;
+ apr_hash_t *hooks_env;
SVN_ERR(svn_repos__validate_prop(name, new_value, pool));
@@ -347,17 +371,24 @@ svn_repos_fs_change_rev_prop4(svn_repos_t *repos,
else
action = 'M';
+ /* Parse the hooks-env file (if any, and if to be used). */
+ if (use_pre_revprop_change_hook || use_post_revprop_change_hook)
+ SVN_ERR(svn_repos__parse_hooks_env(&hooks_env, repos->hooks_env_path,
+ pool, pool));
+
/* ### currently not passing the old_value to hooks */
if (use_pre_revprop_change_hook)
- SVN_ERR(svn_repos__hooks_pre_revprop_change(repos, rev, author, name,
- new_value, action, pool));
+ SVN_ERR(svn_repos__hooks_pre_revprop_change(repos, hooks_env, rev,
+ author, name, new_value,
+ action, pool));
SVN_ERR(svn_fs_change_rev_prop2(repos->fs, rev, name,
&old_value, new_value, pool));
if (use_post_revprop_change_hook)
- SVN_ERR(svn_repos__hooks_post_revprop_change(repos, rev, author, name,
- old_value, action, pool));
+ SVN_ERR(svn_repos__hooks_post_revprop_change(repos, hooks_env, rev,
+ author, name, old_value,
+ action, pool));
}
else /* rev is either unreadable or only partially readable */
{
@@ -393,10 +424,8 @@ svn_repos_fs_revision_prop(svn_string_t **value_p,
else if (readability == svn_repos_revision_access_partial)
{
/* Only svn:author and svn:date are fetchable. */
- if ((strncmp(propname, SVN_PROP_REVISION_AUTHOR,
- strlen(SVN_PROP_REVISION_AUTHOR)) != 0)
- && (strncmp(propname, SVN_PROP_REVISION_DATE,
- strlen(SVN_PROP_REVISION_DATE)) != 0))
+ if ((strcmp(propname, SVN_PROP_REVISION_AUTHOR) != 0)
+ && (strcmp(propname, SVN_PROP_REVISION_DATE) != 0))
*value_p = NULL;
else
@@ -443,17 +472,13 @@ svn_repos_fs_revision_proplist(apr_hash_t **table_p,
/* If they exist, we only copy svn:author and svn:date into the
'real' hashtable being returned. */
- value = apr_hash_get(tmphash, SVN_PROP_REVISION_AUTHOR,
- APR_HASH_KEY_STRING);
+ value = svn_hash_gets(tmphash, SVN_PROP_REVISION_AUTHOR);
if (value)
- apr_hash_set(*table_p, SVN_PROP_REVISION_AUTHOR,
- APR_HASH_KEY_STRING, value);
+ svn_hash_sets(*table_p, SVN_PROP_REVISION_AUTHOR, value);
- value = apr_hash_get(tmphash, SVN_PROP_REVISION_DATE,
- APR_HASH_KEY_STRING);
+ value = svn_hash_gets(tmphash, SVN_PROP_REVISION_DATE);
if (value)
- apr_hash_set(*table_p, SVN_PROP_REVISION_DATE,
- APR_HASH_KEY_STRING, value);
+ svn_hash_sets(*table_p, SVN_PROP_REVISION_DATE, value);
}
else /* wholly readable revision */
{
@@ -480,6 +505,11 @@ svn_repos_fs_lock(svn_lock_t **lock,
const char *username = NULL;
const char *new_token;
apr_array_header_t *paths;
+ apr_hash_t *hooks_env;
+
+ /* Parse the hooks-env file (if any). */
+ SVN_ERR(svn_repos__parse_hooks_env(&hooks_env, repos->hooks_env_path,
+ pool, pool));
/* Setup an array of paths in anticipation of the ra layers handling
multiple locks in one request (1.3 most likely). This is only
@@ -498,8 +528,8 @@ svn_repos_fs_lock(svn_lock_t **lock,
/* Run pre-lock hook. This could throw error, preventing
svn_fs_lock() from happening. */
- SVN_ERR(svn_repos__hooks_pre_lock(repos, &new_token, path, username, comment,
- steal_lock, pool));
+ SVN_ERR(svn_repos__hooks_pre_lock(repos, hooks_env, &new_token, path,
+ username, comment, steal_lock, pool));
if (*new_token)
token = new_token;
@@ -508,7 +538,8 @@ svn_repos_fs_lock(svn_lock_t **lock,
expiration_date, current_rev, steal_lock, pool));
/* Run post-lock hook. */
- if ((err = svn_repos__hooks_post_lock(repos, paths, username, pool)))
+ if ((err = svn_repos__hooks_post_lock(repos, hooks_env,
+ paths, username, pool)))
return svn_error_create
(SVN_ERR_REPOS_POST_LOCK_HOOK_FAILED, err,
"Lock succeeded, but post-lock hook failed");
@@ -527,10 +558,17 @@ svn_repos_fs_unlock(svn_repos_t *repos,
svn_error_t *err;
svn_fs_access_t *access_ctx = NULL;
const char *username = NULL;
+ apr_array_header_t *paths;
+ apr_hash_t *hooks_env;
+
+ /* Parse the hooks-env file (if any). */
+ SVN_ERR(svn_repos__parse_hooks_env(&hooks_env, repos->hooks_env_path,
+ pool, pool));
+
/* Setup an array of paths in anticipation of the ra layers handling
multiple locks in one request (1.3 most likely). This is only
used by svn_repos__hooks_post_lock. */
- apr_array_header_t *paths = apr_array_make(pool, 1, sizeof(const char *));
+ paths = apr_array_make(pool, 1, sizeof(const char *));
APR_ARRAY_PUSH(paths, const char *) = path;
SVN_ERR(svn_fs_get_access(&access_ctx, repos->fs));
@@ -545,14 +583,15 @@ svn_repos_fs_unlock(svn_repos_t *repos,
/* Run pre-unlock hook. This could throw error, preventing
svn_fs_unlock() from happening. */
- SVN_ERR(svn_repos__hooks_pre_unlock(repos, path, username, token,
+ SVN_ERR(svn_repos__hooks_pre_unlock(repos, hooks_env, path, username, token,
break_lock, pool));
/* Unlock. */
SVN_ERR(svn_fs_unlock(repos->fs, path, token, break_lock, pool));
/* Run post-unlock hook. */
- if ((err = svn_repos__hooks_post_unlock(repos, paths, username, pool)))
+ if ((err = svn_repos__hooks_post_unlock(repos, hooks_env, paths,
+ username, pool)))
return svn_error_create
(SVN_ERR_REPOS_POST_UNLOCK_HOOK_FAILED, err,
_("Unlock succeeded, but post-unlock hook failed"));
@@ -588,8 +627,8 @@ get_locks_callback(void *baton,
/* If we can read this lock path, add the lock to the return hash. */
if (readable)
- apr_hash_set(b->locks, apr_pstrdup(hash_pool, lock->path),
- APR_HASH_KEY_STRING, svn_lock_dup(lock, hash_pool));
+ svn_hash_sets(b->locks, apr_pstrdup(hash_pool, lock->path),
+ svn_lock_dup(lock, hash_pool));
return SVN_NO_ERROR;
}
@@ -689,8 +728,8 @@ svn_repos_fs_get_mergeinfo(svn_mergeinfo_catalog_t *mergeinfo,
the change itself. */
/* ### TODO(reint): ... but how about descendant merged-to paths? */
if (readable_paths->nelts > 0)
- SVN_ERR(svn_fs_get_mergeinfo(mergeinfo, root, readable_paths, inherit,
- include_descendants, pool));
+ SVN_ERR(svn_fs_get_mergeinfo2(mergeinfo, root, readable_paths, inherit,
+ include_descendants, TRUE, pool, pool));
else
*mergeinfo = apr_hash_make(pool);
@@ -714,7 +753,14 @@ pack_notify_func(void *baton,
struct pack_notify_baton *pnb = baton;
svn_repos_notify_t *notify;
- notify = svn_repos_notify_create(pack_action + 3, pool);
+ /* Simple conversion works for these values. */
+ SVN_ERR_ASSERT(pack_action >= svn_fs_pack_notify_start
+ && pack_action <= svn_fs_pack_notify_end_revprop);
+
+ notify = svn_repos_notify_create(pack_action
+ + svn_repos_notify_pack_shard_start
+ - svn_fs_pack_notify_start,
+ pool);
notify->shard = shard;
pnb->notify_func(pnb->notify_baton, notify, pool);
@@ -740,7 +786,71 @@ svn_repos_fs_pack2(svn_repos_t *repos,
cancel_func, cancel_baton, pool);
}
+svn_error_t *
+svn_repos_fs_get_inherited_props(apr_array_header_t **inherited_props_p,
+ svn_fs_root_t *root,
+ const char *path,
+ const char *propname,
+ svn_repos_authz_func_t authz_read_func,
+ void *authz_read_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ apr_array_header_t *inherited_props;
+ const char *parent_path = path;
+ inherited_props = apr_array_make(result_pool, 1,
+ sizeof(svn_prop_inherited_item_t *));
+ while (!(parent_path[0] == '/' && parent_path[1] == '\0'))
+ {
+ svn_boolean_t allowed = TRUE;
+ apr_hash_t *parent_properties = NULL;
+
+ svn_pool_clear(iterpool);
+ parent_path = svn_fspath__dirname(parent_path, scratch_pool);
+
+ if (authz_read_func)
+ SVN_ERR(authz_read_func(&allowed, root, parent_path,
+ authz_read_baton, iterpool));
+ if (allowed)
+ {
+ if (propname)
+ {
+ svn_string_t *propval;
+
+ SVN_ERR(svn_fs_node_prop(&propval, root, parent_path, propname,
+ result_pool));
+ if (propval)
+ {
+ parent_properties = apr_hash_make(result_pool);
+ svn_hash_sets(parent_properties, propname, propval);
+ }
+ }
+ else
+ {
+ SVN_ERR(svn_fs_node_proplist(&parent_properties, root,
+ parent_path, result_pool));
+ }
+
+ if (parent_properties && apr_hash_count(parent_properties))
+ {
+ svn_prop_inherited_item_t *i_props =
+ apr_pcalloc(result_pool, sizeof(*i_props));
+ i_props->path_or_url =
+ apr_pstrdup(result_pool, parent_path + 1);
+ i_props->prop_hash = parent_properties;
+ /* Build the output array in depth-first order. */
+ svn_sort__array_insert(&i_props, inherited_props, 0);
+ }
+ }
+ }
+
+ svn_pool_destroy(iterpool);
+
+ *inherited_props_p = inherited_props;
+ return SVN_NO_ERROR;
+}
/*
* vim:ts=4:sw=2:expandtab:tw=80:fo=tcroq
diff --git a/subversion/libsvn_repos/hooks.c b/subversion/libsvn_repos/hooks.c
index 0a1b447..9727599 100644
--- a/subversion/libsvn_repos/hooks.c
+++ b/subversion/libsvn_repos/hooks.c
@@ -27,9 +27,12 @@
#include <apr_pools.h>
#include <apr_file_io.h>
+#include "svn_config.h"
+#include "svn_hash.h"
#include "svn_error.h"
#include "svn_dirent_uri.h"
#include "svn_path.h"
+#include "svn_pools.h"
#include "svn_repos.h"
#include "svn_utf.h"
#include "repos.h"
@@ -159,6 +162,37 @@ check_hook_result(const char *name, const char *cmd, apr_proc_t *cmd_proc,
failure_message->data);
}
+/* Copy the environment given as key/value pairs of ENV_HASH into
+ * an array of C strings allocated in RESULT_POOL.
+ * If the hook environment is empty, return NULL.
+ * Use SCRATCH_POOL for temporary allocations. */
+static const char **
+env_from_env_hash(apr_hash_t *env_hash,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ apr_hash_index_t *hi;
+ const char **env;
+ const char **envp;
+
+ if (!env_hash)
+ return NULL;
+
+ env = apr_palloc(result_pool,
+ sizeof(const char *) * (apr_hash_count(env_hash) + 1));
+ envp = env;
+ for (hi = apr_hash_first(scratch_pool, env_hash); hi; hi = apr_hash_next(hi))
+ {
+ *envp = apr_psprintf(result_pool, "%s=%s",
+ (const char *)svn__apr_hash_index_key(hi),
+ (const char *)svn__apr_hash_index_val(hi));
+ envp++;
+ }
+ *envp = NULL;
+
+ return env;
+}
+
/* NAME, CMD and ARGS are the name, path to and arguments for the hook
program that is to be run. The hook's exit status will be checked,
and if an error occurred the hook's stderr output will be added to
@@ -174,13 +208,16 @@ run_hook_cmd(svn_string_t **result,
const char *name,
const char *cmd,
const char **args,
+ apr_hash_t *hooks_env,
apr_file_t *stdin_handle,
apr_pool_t *pool)
{
apr_file_t *null_handle;
apr_status_t apr_err;
svn_error_t *err;
- apr_proc_t cmd_proc;
+ apr_proc_t cmd_proc = {0};
+ apr_pool_t *cmd_pool;
+ apr_hash_t *hook_env = NULL;
if (result)
{
@@ -196,41 +233,49 @@ run_hook_cmd(svn_string_t **result,
(apr_err, _("Can't create null stdout for hook '%s'"), cmd);
}
- err = svn_io_start_cmd2(&cmd_proc, ".", cmd, args, FALSE,
- FALSE, stdin_handle, result != NULL, null_handle,
- TRUE, NULL, pool);
+ /* Tie resources allocated for the command to a special pool which we can
+ * destroy in order to clean up the stderr pipe opened for the process. */
+ cmd_pool = svn_pool_create(pool);
- if (err)
+ /* Check if a custom environment is defined for this hook, or else
+ * whether a default environment is defined. */
+ if (hooks_env)
{
- /* CMD_PROC is not safe to use. Bail. */
- return svn_error_createf
- (SVN_ERR_REPOS_HOOK_FAILURE, err, _("Failed to start '%s' hook"), cmd);
+ hook_env = svn_hash_gets(hooks_env, name);
+ if (hook_env == NULL)
+ hook_env = svn_hash_gets(hooks_env,
+ SVN_REPOS__HOOKS_ENV_DEFAULT_SECTION);
}
+
+ err = svn_io_start_cmd3(&cmd_proc, ".", cmd, args,
+ env_from_env_hash(hook_env, pool, pool),
+ FALSE, FALSE, stdin_handle, result != NULL,
+ null_handle, TRUE, NULL, cmd_pool);
+ if (!err)
+ err = check_hook_result(name, cmd, &cmd_proc, cmd_proc.err, pool);
else
{
- err = check_hook_result(name, cmd, &cmd_proc, cmd_proc.err, pool);
+ /* The command could not be started for some reason. */
+ err = svn_error_createf(SVN_ERR_REPOS_BAD_ARGS, err,
+ _("Failed to start '%s' hook"), cmd);
}
/* Hooks are fallible, and so hook failure is "expected" to occur at
times. When such a failure happens we still want to close the pipe
and null file */
- apr_err = apr_file_close(cmd_proc.err);
- if (!err && apr_err)
- return svn_error_wrap_apr
- (apr_err, _("Error closing read end of stderr pipe"));
-
- if (result)
+ if (!err && result)
{
svn_stringbuf_t *native_stdout;
- SVN_ERR(svn_stringbuf_from_aprfile(&native_stdout, cmd_proc.out, pool));
- apr_err = apr_file_close(cmd_proc.out);
- if (!err && apr_err)
- return svn_error_wrap_apr
- (apr_err, _("Error closing read end of stderr pipe"));
-
- *result = svn_stringbuf__morph_into_string(native_stdout);
+ err = svn_stringbuf_from_aprfile(&native_stdout, cmd_proc.out, pool);
+ if (!err)
+ *result = svn_stringbuf__morph_into_string(native_stdout);
}
- else
+
+ /* Close resources allocated by svn_io_start_cmd3(), such as the pipe. */
+ svn_pool_destroy(cmd_pool);
+
+ /* Close the null handle. */
+ if (null_handle)
{
apr_err = apr_file_close(null_handle);
if (!err && apr_err)
@@ -311,6 +356,86 @@ check_hook_cmd(const char *hook, svn_boolean_t *broken_link, apr_pool_t *pool)
return NULL;
}
+/* Baton for parse_hooks_env_option. */
+struct parse_hooks_env_option_baton {
+ /* The name of the section being parsed. If not the default section,
+ * the section name should match the name of a hook to which the
+ * options apply. */
+ const char *section;
+ apr_hash_t *hooks_env;
+} parse_hooks_env_option_baton;
+
+/* An implementation of svn_config_enumerator2_t.
+ * Set environment variable NAME to value VALUE in the environment for
+ * all hooks (in case the current section is the default section),
+ * or the hook with the name corresponding to the current section's name. */
+static svn_boolean_t
+parse_hooks_env_option(const char *name, const char *value,
+ void *baton, apr_pool_t *pool)
+{
+ struct parse_hooks_env_option_baton *bo = baton;
+ apr_pool_t *result_pool = apr_hash_pool_get(bo->hooks_env);
+ apr_hash_t *hook_env;
+
+ hook_env = svn_hash_gets(bo->hooks_env, bo->section);
+ if (hook_env == NULL)
+ {
+ hook_env = apr_hash_make(result_pool);
+ svn_hash_sets(bo->hooks_env, apr_pstrdup(result_pool, bo->section),
+ hook_env);
+ }
+ svn_hash_sets(hook_env, apr_pstrdup(result_pool, name),
+ apr_pstrdup(result_pool, value));
+
+ return TRUE;
+}
+
+struct parse_hooks_env_section_baton {
+ svn_config_t *cfg;
+ apr_hash_t *hooks_env;
+} parse_hooks_env_section_baton;
+
+/* An implementation of svn_config_section_enumerator2_t. */
+static svn_boolean_t
+parse_hooks_env_section(const char *name, void *baton, apr_pool_t *pool)
+{
+ struct parse_hooks_env_section_baton *b = baton;
+ struct parse_hooks_env_option_baton bo;
+
+ bo.section = name;
+ bo.hooks_env = b->hooks_env;
+
+ (void)svn_config_enumerate2(b->cfg, name, parse_hooks_env_option, &bo, pool);
+
+ return TRUE;
+}
+
+svn_error_t *
+svn_repos__parse_hooks_env(apr_hash_t **hooks_env_p,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_config_t *cfg;
+ struct parse_hooks_env_section_baton b;
+
+ if (local_abspath)
+ {
+ SVN_ERR(svn_config_read3(&cfg, local_abspath, FALSE,
+ TRUE, TRUE, scratch_pool));
+ b.cfg = cfg;
+ b.hooks_env = apr_hash_make(result_pool);
+ (void)svn_config_enumerate_sections2(cfg, parse_hooks_env_section, &b,
+ scratch_pool);
+ *hooks_env_p = b.hooks_env;
+ }
+ else
+ {
+ *hooks_env_p = NULL;
+ }
+
+ return SVN_NO_ERROR;
+}
/* Return an error for the failure of HOOK due to a broken symlink. */
static svn_error_t *
@@ -323,8 +448,10 @@ hook_symlink_error(const char *hook)
svn_error_t *
svn_repos__hooks_start_commit(svn_repos_t *repos,
+ apr_hash_t *hooks_env,
const char *user,
const apr_array_header_t *capabilities,
+ const char *txn_name,
apr_pool_t *pool)
{
const char *hook = svn_repos_start_commit_hook(repos, pool);
@@ -336,7 +463,7 @@ svn_repos__hooks_start_commit(svn_repos_t *repos,
}
else if (hook)
{
- const char *args[5];
+ const char *args[6];
char *capabilities_string;
if (capabilities)
@@ -356,10 +483,11 @@ svn_repos__hooks_start_commit(svn_repos_t *repos,
args[1] = svn_dirent_local_style(svn_repos_path(repos, pool), pool);
args[2] = user ? user : "";
args[3] = capabilities_string;
- args[4] = NULL;
+ args[4] = txn_name;
+ args[5] = NULL;
- SVN_ERR(run_hook_cmd(NULL, SVN_REPOS__HOOK_START_COMMIT, hook, args, NULL,
- pool));
+ SVN_ERR(run_hook_cmd(NULL, SVN_REPOS__HOOK_START_COMMIT, hook, args,
+ hooks_env, NULL, pool));
}
return SVN_NO_ERROR;
@@ -403,6 +531,7 @@ lock_token_content(apr_file_t **handle, apr_hash_t *lock_tokens,
svn_error_t *
svn_repos__hooks_pre_commit(svn_repos_t *repos,
+ apr_hash_t *hooks_env,
const char *txn_name,
apr_pool_t *pool)
{
@@ -438,7 +567,7 @@ svn_repos__hooks_pre_commit(svn_repos_t *repos,
APR_READ, APR_OS_DEFAULT, pool));
SVN_ERR(run_hook_cmd(NULL, SVN_REPOS__HOOK_PRE_COMMIT, hook, args,
- stdin_handle, pool));
+ hooks_env, stdin_handle, pool));
}
return SVN_NO_ERROR;
@@ -447,7 +576,9 @@ svn_repos__hooks_pre_commit(svn_repos_t *repos,
svn_error_t *
svn_repos__hooks_post_commit(svn_repos_t *repos,
+ apr_hash_t *hooks_env,
svn_revnum_t rev,
+ const char *txn_name,
apr_pool_t *pool)
{
const char *hook = svn_repos_post_commit_hook(repos, pool);
@@ -459,15 +590,16 @@ svn_repos__hooks_post_commit(svn_repos_t *repos,
}
else if (hook)
{
- const char *args[4];
+ const char *args[5];
args[0] = hook;
args[1] = svn_dirent_local_style(svn_repos_path(repos, pool), pool);
args[2] = apr_psprintf(pool, "%ld", rev);
- args[3] = NULL;
+ args[3] = txn_name;
+ args[4] = NULL;
- SVN_ERR(run_hook_cmd(NULL, SVN_REPOS__HOOK_POST_COMMIT, hook, args, NULL,
- pool));
+ SVN_ERR(run_hook_cmd(NULL, SVN_REPOS__HOOK_POST_COMMIT, hook, args,
+ hooks_env, NULL, pool));
}
return SVN_NO_ERROR;
@@ -476,6 +608,7 @@ svn_repos__hooks_post_commit(svn_repos_t *repos,
svn_error_t *
svn_repos__hooks_pre_revprop_change(svn_repos_t *repos,
+ apr_hash_t *hooks_env,
svn_revnum_t rev,
const char *author,
const char *name,
@@ -514,8 +647,8 @@ svn_repos__hooks_pre_revprop_change(svn_repos_t *repos,
args[5] = action_string;
args[6] = NULL;
- SVN_ERR(run_hook_cmd(NULL, SVN_REPOS__HOOK_PRE_REVPROP_CHANGE, hook, args,
- stdin_handle, pool));
+ SVN_ERR(run_hook_cmd(NULL, SVN_REPOS__HOOK_PRE_REVPROP_CHANGE, hook,
+ args, hooks_env, stdin_handle, pool));
SVN_ERR(svn_io_file_close(stdin_handle, pool));
}
@@ -538,6 +671,7 @@ svn_repos__hooks_pre_revprop_change(svn_repos_t *repos,
svn_error_t *
svn_repos__hooks_post_revprop_change(svn_repos_t *repos,
+ apr_hash_t *hooks_env,
svn_revnum_t rev,
const char *author,
const char *name,
@@ -577,7 +711,7 @@ svn_repos__hooks_post_revprop_change(svn_repos_t *repos,
args[6] = NULL;
SVN_ERR(run_hook_cmd(NULL, SVN_REPOS__HOOK_POST_REVPROP_CHANGE, hook,
- args, stdin_handle, pool));
+ args, hooks_env, stdin_handle, pool));
SVN_ERR(svn_io_file_close(stdin_handle, pool));
}
@@ -588,6 +722,7 @@ svn_repos__hooks_post_revprop_change(svn_repos_t *repos,
svn_error_t *
svn_repos__hooks_pre_lock(svn_repos_t *repos,
+ apr_hash_t *hooks_env,
const char **token,
const char *path,
const char *username,
@@ -607,6 +742,7 @@ svn_repos__hooks_pre_lock(svn_repos_t *repos,
const char *args[7];
svn_string_t *buf;
+
args[0] = hook;
args[1] = svn_dirent_local_style(svn_repos_path(repos, pool), pool);
args[2] = path;
@@ -615,8 +751,8 @@ svn_repos__hooks_pre_lock(svn_repos_t *repos,
args[5] = steal_lock ? "1" : "0";
args[6] = NULL;
- SVN_ERR(run_hook_cmd(&buf, SVN_REPOS__HOOK_PRE_LOCK, hook, args, NULL,
- pool));
+ SVN_ERR(run_hook_cmd(&buf, SVN_REPOS__HOOK_PRE_LOCK, hook, args,
+ hooks_env, NULL, pool));
if (token)
/* No validation here; the FS will take care of that. */
@@ -632,6 +768,7 @@ svn_repos__hooks_pre_lock(svn_repos_t *repos,
svn_error_t *
svn_repos__hooks_post_lock(svn_repos_t *repos,
+ apr_hash_t *hooks_env,
const apr_array_header_t *paths,
const char *username,
apr_pool_t *pool)
@@ -660,7 +797,7 @@ svn_repos__hooks_post_lock(svn_repos_t *repos,
args[4] = NULL;
SVN_ERR(run_hook_cmd(NULL, SVN_REPOS__HOOK_POST_LOCK, hook, args,
- stdin_handle, pool));
+ hooks_env, stdin_handle, pool));
SVN_ERR(svn_io_file_close(stdin_handle, pool));
}
@@ -671,6 +808,7 @@ svn_repos__hooks_post_lock(svn_repos_t *repos,
svn_error_t *
svn_repos__hooks_pre_unlock(svn_repos_t *repos,
+ apr_hash_t *hooks_env,
const char *path,
const char *username,
const char *token,
@@ -696,8 +834,8 @@ svn_repos__hooks_pre_unlock(svn_repos_t *repos,
args[5] = break_lock ? "1" : "0";
args[6] = NULL;
- SVN_ERR(run_hook_cmd(NULL, SVN_REPOS__HOOK_PRE_UNLOCK, hook, args, NULL,
- pool));
+ SVN_ERR(run_hook_cmd(NULL, SVN_REPOS__HOOK_PRE_UNLOCK, hook, args,
+ hooks_env, NULL, pool));
}
return SVN_NO_ERROR;
@@ -706,6 +844,7 @@ svn_repos__hooks_pre_unlock(svn_repos_t *repos,
svn_error_t *
svn_repos__hooks_post_unlock(svn_repos_t *repos,
+ apr_hash_t *hooks_env,
const apr_array_header_t *paths,
const char *username,
apr_pool_t *pool)
@@ -734,7 +873,7 @@ svn_repos__hooks_post_unlock(svn_repos_t *repos,
args[4] = NULL;
SVN_ERR(run_hook_cmd(NULL, SVN_REPOS__HOOK_POST_UNLOCK, hook, args,
- stdin_handle, pool));
+ hooks_env, stdin_handle, pool));
SVN_ERR(svn_io_file_close(stdin_handle, pool));
}
diff --git a/subversion/libsvn_repos/load-fs-vtable.c b/subversion/libsvn_repos/load-fs-vtable.c
index eaf8e9b..d1aa339 100644
--- a/subversion/libsvn_repos/load-fs-vtable.c
+++ b/subversion/libsvn_repos/load-fs-vtable.c
@@ -23,6 +23,7 @@
#include "svn_private_config.h"
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_error.h"
#include "svn_fs.h"
@@ -39,6 +40,7 @@
#include <apr_lib.h>
+#include "private/svn_repos_private.h"
#include "private/svn_fspath.h"
#include "private/svn_dep_compat.h"
#include "private/svn_mergeinfo_private.h"
@@ -60,9 +62,15 @@ struct parse_baton
const char *parent_dir; /* repository relpath, or NULL */
svn_repos_notify_func_t notify_func;
void *notify_baton;
- svn_repos_notify_t *notify;
+ apr_pool_t *notify_pool; /* scratch pool for notifications */
apr_pool_t *pool;
+ /* Start and end (inclusive) of revision range we'll pay attention
+ to, or a pair of SVN_INVALID_REVNUMs if we're not filtering by
+ revisions. */
+ svn_revnum_t start_rev;
+ svn_revnum_t end_rev;
+
/* A hash mapping copy-from revisions and mergeinfo range revisions
(svn_revnum_t *) in the dump stream to their corresponding revisions
(svn_revnum_t *) in the loaded repository. The hash and its
@@ -84,13 +92,13 @@ struct parse_baton
struct revision_baton
{
svn_revnum_t rev;
-
svn_fs_txn_t *txn;
svn_fs_root_t *txn_root;
const svn_string_t *datestamp;
apr_int32_t rev_offset;
+ svn_boolean_t skipped;
struct parse_baton *pb;
apr_pool_t *pool;
@@ -154,12 +162,12 @@ change_rev_prop(svn_repos_t *repos,
apr_pool_t *pool)
{
if (validate_props)
- return svn_fs_change_rev_prop2(svn_repos_fs(repos), revision, name,
- NULL, value, pool);
- else
return svn_repos_fs_change_rev_prop4(repos, revision, NULL, name,
NULL, value, FALSE, FALSE,
NULL, NULL, pool);
+ else
+ return svn_fs_change_rev_prop2(svn_repos_fs(repos), revision, name,
+ NULL, value, pool);
}
/* Change property NAME to VALUE for PATH in TXN_ROOT. If
@@ -207,7 +215,7 @@ prefix_mergeinfo_paths(svn_string_t **mergeinfo_val,
path = svn_fspath__canonicalize(svn_relpath_join(parent_dir,
merge_source, pool),
pool);
- apr_hash_set(prefixed_mergeinfo, path, APR_HASH_KEY_STRING, rangelist);
+ svn_hash_sets(prefixed_mergeinfo, path, rangelist);
}
return svn_mergeinfo_to_string(mergeinfo_val, prefixed_mergeinfo, pool);
}
@@ -258,7 +266,7 @@ renumber_mergeinfo_revs(svn_string_t **final_val,
for (hi = apr_hash_first(subpool, mergeinfo); hi; hi = apr_hash_next(hi))
{
const char *merge_source;
- apr_array_header_t *rangelist;
+ svn_rangelist_t *rangelist;
struct parse_baton *pb = rb->pb;
int i;
const void *key;
@@ -315,24 +323,14 @@ renumber_mergeinfo_revs(svn_string_t **final_val,
if (SVN_IS_VALID_REVNUM(rev_from_map))
range->end = rev_from_map;
}
- apr_hash_set(final_mergeinfo, merge_source,
- APR_HASH_KEY_STRING, rangelist);
+ svn_hash_sets(final_mergeinfo, merge_source, rangelist);
}
if (predates_stream_mergeinfo)
- SVN_ERR(svn_mergeinfo_merge(final_mergeinfo, predates_stream_mergeinfo,
- subpool));
-
- SVN_ERR(svn_mergeinfo_sort(final_mergeinfo, subpool));
+ SVN_ERR(svn_mergeinfo_merge2(final_mergeinfo, predates_stream_mergeinfo,
+ subpool, subpool));
- /* Mergeinfo revision sources for r0 and r1 are invalid; you can't merge r0
- or r1. However, svndumpfilter can be abused to produce r1 merge source
- revs. So if we encounter any, then strip them out, no need to put them
- into the load target. */
- SVN_ERR(svn_mergeinfo__filter_mergeinfo_by_ranges(&final_mergeinfo,
- final_mergeinfo,
- 1, 0, FALSE,
- subpool, subpool));
+ SVN_ERR(svn_mergeinfo__canonicalize_ranges(final_mergeinfo, subpool));
SVN_ERR(svn_mergeinfo_to_string(final_val, final_mergeinfo, pool));
svn_pool_destroy(subpool);
@@ -360,8 +358,7 @@ make_node_baton(struct node_baton **node_baton_p,
nb->kind = svn_node_unknown;
/* Then add info from the headers. */
- if ((val = apr_hash_get(headers, SVN_REPOS_DUMPFILE_NODE_PATH,
- APR_HASH_KEY_STRING)))
+ if ((val = svn_hash_gets(headers, SVN_REPOS_DUMPFILE_NODE_PATH)))
{
val = svn_relpath_canonicalize(val, pool);
if (rb->pb->parent_dir)
@@ -370,8 +367,7 @@ make_node_baton(struct node_baton **node_baton_p,
nb->path = val;
}
- if ((val = apr_hash_get(headers, SVN_REPOS_DUMPFILE_NODE_KIND,
- APR_HASH_KEY_STRING)))
+ if ((val = svn_hash_gets(headers, SVN_REPOS_DUMPFILE_NODE_KIND)))
{
if (! strcmp(val, "file"))
nb->kind = svn_node_file;
@@ -380,8 +376,7 @@ make_node_baton(struct node_baton **node_baton_p,
}
nb->action = (enum svn_node_action)(-1); /* an invalid action code */
- if ((val = apr_hash_get(headers, SVN_REPOS_DUMPFILE_NODE_ACTION,
- APR_HASH_KEY_STRING)))
+ if ((val = svn_hash_gets(headers, SVN_REPOS_DUMPFILE_NODE_ACTION)))
{
if (! strcmp(val, "change"))
nb->action = svn_node_action_change;
@@ -394,13 +389,11 @@ make_node_baton(struct node_baton **node_baton_p,
}
nb->copyfrom_rev = SVN_INVALID_REVNUM;
- if ((val = apr_hash_get(headers, SVN_REPOS_DUMPFILE_NODE_COPYFROM_REV,
- APR_HASH_KEY_STRING)))
+ if ((val = svn_hash_gets(headers, SVN_REPOS_DUMPFILE_NODE_COPYFROM_REV)))
{
nb->copyfrom_rev = SVN_STR_TO_REV(val);
}
- if ((val = apr_hash_get(headers, SVN_REPOS_DUMPFILE_NODE_COPYFROM_PATH,
- APR_HASH_KEY_STRING)))
+ if ((val = svn_hash_gets(headers, SVN_REPOS_DUMPFILE_NODE_COPYFROM_PATH)))
{
val = svn_relpath_canonicalize(val, pool);
if (rb->pb->parent_dir)
@@ -409,22 +402,21 @@ make_node_baton(struct node_baton **node_baton_p,
nb->copyfrom_path = val;
}
- if ((val = apr_hash_get(headers, SVN_REPOS_DUMPFILE_TEXT_CONTENT_CHECKSUM,
- APR_HASH_KEY_STRING)))
+ if ((val = svn_hash_gets(headers, SVN_REPOS_DUMPFILE_TEXT_CONTENT_CHECKSUM)))
{
SVN_ERR(svn_checksum_parse_hex(&nb->result_checksum, svn_checksum_md5,
val, pool));
}
- if ((val = apr_hash_get(headers, SVN_REPOS_DUMPFILE_TEXT_DELTA_BASE_CHECKSUM,
- APR_HASH_KEY_STRING)))
+ if ((val = svn_hash_gets(headers,
+ SVN_REPOS_DUMPFILE_TEXT_DELTA_BASE_CHECKSUM)))
{
SVN_ERR(svn_checksum_parse_hex(&nb->base_checksum, svn_checksum_md5, val,
pool));
}
- if ((val = apr_hash_get(headers, SVN_REPOS_DUMPFILE_TEXT_COPY_SOURCE_CHECKSUM,
- APR_HASH_KEY_STRING)))
+ if ((val = svn_hash_gets(headers,
+ SVN_REPOS_DUMPFILE_TEXT_COPY_SOURCE_CHECKSUM)))
{
SVN_ERR(svn_checksum_parse_hex(&nb->copy_source_checksum,
svn_checksum_md5, val, pool));
@@ -449,9 +441,15 @@ make_revision_baton(apr_hash_t *headers,
rb->pool = pool;
rb->rev = SVN_INVALID_REVNUM;
- if ((val = apr_hash_get(headers, SVN_REPOS_DUMPFILE_REVISION_NUMBER,
- APR_HASH_KEY_STRING)))
- rb->rev = SVN_STR_TO_REV(val);
+ if ((val = svn_hash_gets(headers, SVN_REPOS_DUMPFILE_REVISION_NUMBER)))
+ {
+ rb->rev = SVN_STR_TO_REV(val);
+
+ /* If we're filtering revisions, is this one we'll skip? */
+ rb->skipped = (SVN_IS_VALID_REVNUM(pb->start_rev)
+ && ((rb->rev < pb->start_rev) ||
+ (rb->rev > pb->end_rev)));
+ }
return rb;
}
@@ -468,15 +466,27 @@ new_revision_record(void **revision_baton,
svn_revnum_t head_rev;
rb = make_revision_baton(headers, pb, pool);
+
+ /* ### If we're filtering revisions, and this is one we've skipped,
+ ### and we've skipped it because it has a revision number younger
+ ### than the youngest in our acceptable range, then should we
+ ### just bail out here? */
+ /*
+ if (rb->skipped && (rb->rev > pb->end_rev))
+ return svn_error_createf(SVN_ERR_CEASE_INVOCATION, 0,
+ _("Finished processing acceptable load "
+ "revision range"));
+ */
+
SVN_ERR(svn_fs_youngest_rev(&head_rev, pb->fs, pool));
/* FIXME: This is a lame fallback loading multiple segments of dump in
several separate operations. It is highly susceptible to race conditions.
Calculate the revision 'offset' for finding copyfrom sources.
It might be positive or negative. */
- rb->rev_offset = (apr_int32_t) (rb->rev) - (head_rev + 1);
+ rb->rev_offset = (apr_int32_t) ((rb->rev) - (head_rev + 1));
- if (rb->rev > 0)
+ if ((rb->rev > 0) && (! rb->skipped))
{
/* Create a new fs txn. */
SVN_ERR(svn_fs_begin_txn2(&(rb->txn), pb->fs, head_rev, 0, pool));
@@ -484,9 +494,14 @@ new_revision_record(void **revision_baton,
if (pb->notify_func)
{
- pb->notify->action = svn_repos_notify_load_txn_start;
- pb->notify->old_revision = rb->rev;
- pb->notify_func(pb->notify_baton, pb->notify, rb->pool);
+ /* ### TODO: Use proper scratch pool instead of pb->notify_pool */
+ svn_repos_notify_t *notify = svn_repos_notify_create(
+ svn_repos_notify_load_txn_start,
+ pb->notify_pool);
+
+ notify->old_revision = rb->rev;
+ pb->notify_func(pb->notify_baton, notify, pb->notify_pool);
+ svn_pool_clear(pb->notify_pool);
}
/* Stash the oldest "old" revision committed from the load stream. */
@@ -494,6 +509,19 @@ new_revision_record(void **revision_baton,
pb->oldest_old_rev = rb->rev;
}
+ /* If we're skipping this revision, try to notify someone. */
+ if (rb->skipped && pb->notify_func)
+ {
+ /* ### TODO: Use proper scratch pool instead of pb->notify_pool */
+ svn_repos_notify_t *notify = svn_repos_notify_create(
+ svn_repos_notify_load_skipped_rev,
+ pb->notify_pool);
+
+ notify->old_revision = rb->rev;
+ pb->notify_func(pb->notify_baton, notify, pb->notify_pool);
+ svn_pool_clear(pb->notify_pool);
+ }
+
/* If we're parsing revision 0, only the revision are (possibly)
interesting to us: when loading the stream into an empty
filesystem, then we want new filesystem's revision 0 to have the
@@ -560,14 +588,26 @@ maybe_add_with_history(struct node_baton *nb,
if (pb->notify_func)
{
- pb->notify->action = svn_repos_notify_load_copied_node;
- pb->notify_func(pb->notify_baton, pb->notify, rb->pool);
+ /* ### TODO: Use proper scratch pool instead of pb->notify_pool */
+ svn_repos_notify_t *notify = svn_repos_notify_create(
+ svn_repos_notify_load_copied_node,
+ pb->notify_pool);
+
+ pb->notify_func(pb->notify_baton, notify, pb->notify_pool);
+ svn_pool_clear(pb->notify_pool);
}
}
return SVN_NO_ERROR;
}
+static svn_error_t *
+magic_header_record(int version,
+ void *parse_baton,
+ apr_pool_t *pool)
+{
+ return SVN_NO_ERROR;
+}
static svn_error_t *
uuid_record(const char *uuid,
@@ -607,6 +647,13 @@ new_node_record(void **node_baton,
SVN_ERR(make_node_baton(&nb, headers, rb, pool));
+ /* If we're skipping this revision, we're done here. */
+ if (rb->skipped)
+ {
+ *node_baton = nb;
+ return SVN_NO_ERROR;
+ }
+
/* Make sure we have an action we recognize. */
if (nb->action < svn_node_action_change
|| nb->action > svn_node_action_replace)
@@ -616,10 +663,14 @@ new_node_record(void **node_baton,
if (pb->notify_func)
{
- pb->notify->action = svn_repos_notify_load_node_start;
- pb->notify->node_action = nb->action;
- pb->notify->path = nb->path;
- pb->notify_func(pb->notify_baton, pb->notify, rb->pool);
+ /* ### TODO: Use proper scratch pool instead of pb->notify_pool */
+ svn_repos_notify_t *notify = svn_repos_notify_create(
+ svn_repos_notify_load_node_start,
+ pb->notify_pool);
+
+ notify->path = nb->path;
+ pb->notify_func(pb->notify_baton, notify, pb->notify_pool);
+ svn_pool_clear(pb->notify_pool);
}
switch (nb->action)
@@ -652,6 +703,10 @@ set_revision_property(void *baton,
{
struct revision_baton *rb = baton;
+ /* If we're skipping this revision, we're done here. */
+ if (rb->skipped)
+ return SVN_NO_ERROR;
+
if (rb->rev > 0)
{
if (rb->pb->validate_props)
@@ -682,6 +737,67 @@ set_revision_property(void *baton,
}
+/* Adjust mergeinfo:
+ * - normalize line endings (if all CRLF, change to LF; but error if mixed);
+ * - adjust revision numbers (see renumber_mergeinfo_revs());
+ * - adjust paths (see prefix_mergeinfo_paths()).
+ */
+static svn_error_t *
+adjust_mergeinfo_property(struct revision_baton *rb,
+ svn_string_t **new_value_p,
+ const svn_string_t *old_value,
+ apr_pool_t *result_pool)
+{
+ struct parse_baton *pb = rb->pb;
+ svn_string_t prop_val = *old_value;
+
+ /* Tolerate mergeinfo with "\r\n" line endings because some
+ dumpstream sources might contain as much. If so normalize
+ the line endings to '\n' and make a notification to
+ PARSE_BATON->FEEDBACK_STREAM that we have made this
+ correction. */
+ if (strstr(prop_val.data, "\r"))
+ {
+ const char *prop_eol_normalized;
+
+ SVN_ERR(svn_subst_translate_cstring2(prop_val.data,
+ &prop_eol_normalized,
+ "\n", /* translate to LF */
+ FALSE, /* no repair */
+ NULL, /* no keywords */
+ FALSE, /* no expansion */
+ result_pool));
+ prop_val.data = prop_eol_normalized;
+ prop_val.len = strlen(prop_eol_normalized);
+
+ if (pb->notify_func)
+ {
+ /* ### TODO: Use proper scratch pool instead of pb->notify_pool */
+ svn_repos_notify_t *notify
+ = svn_repos_notify_create(
+ svn_repos_notify_load_normalized_mergeinfo,
+ pb->notify_pool);
+
+ pb->notify_func(pb->notify_baton, notify, pb->notify_pool);
+ svn_pool_clear(pb->notify_pool);
+ }
+ }
+
+ /* Renumber mergeinfo as appropriate. */
+ SVN_ERR(renumber_mergeinfo_revs(new_value_p, &prop_val, rb,
+ result_pool));
+ if (pb->parent_dir)
+ {
+ /* Prefix the merge source paths with PB->parent_dir. */
+ /* ASSUMPTION: All source paths are included in the dump stream. */
+ SVN_ERR(prefix_mergeinfo_paths(new_value_p, *new_value_p,
+ pb->parent_dir, result_pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
static svn_error_t *
set_node_property(void *baton,
const char *name,
@@ -691,51 +807,46 @@ set_node_property(void *baton,
struct revision_baton *rb = nb->rb;
struct parse_baton *pb = rb->pb;
+ /* If we're skipping this revision, we're done here. */
+ if (rb->skipped)
+ return SVN_NO_ERROR;
+
+ /* Adjust mergeinfo. If this fails, presumably because the mergeinfo
+ property has an ill-formed value, then we must not fail to load
+ the repository (at least if it's a simple load with no revision
+ offset adjustments, path changes, etc.) so just warn and leave it
+ as it is. */
if (strcmp(name, SVN_PROP_MERGEINFO) == 0)
{
- svn_string_t *renumbered_mergeinfo;
- /* ### Need to cast away const. We cannot change the declaration of
- * ### this function since it is part of svn_repos_parse_fns2_t. */
- svn_string_t *prop_val = (svn_string_t *)value;
-
- /* Tolerate mergeinfo with "\r\n" line endings because some
- dumpstream sources might contain as much. If so normalize
- the line endings to '\n' and make a notification to
- PARSE_BATON->FEEDBACK_STREAM that we have made this
- correction. */
- if (strstr(prop_val->data, "\r"))
- {
- const char *prop_eol_normalized;
-
- SVN_ERR(svn_subst_translate_cstring2(prop_val->data,
- &prop_eol_normalized,
- "\n", /* translate to LF */
- FALSE, /* no repair */
- NULL, /* no keywords */
- FALSE, /* no expansion */
- nb->pool));
- prop_val->data = prop_eol_normalized;
- prop_val->len = strlen(prop_eol_normalized);
+ svn_string_t *new_value;
+ svn_error_t *err;
+ err = adjust_mergeinfo_property(rb, &new_value, value, nb->pool);
+ if (err)
+ {
+ if (pb->validate_props)
+ {
+ return svn_error_quick_wrap(
+ err,
+ _("Invalid svn:mergeinfo value"));
+ }
if (pb->notify_func)
{
- pb->notify->action = svn_repos_notify_load_normalized_mergeinfo;
- pb->notify_func(pb->notify_baton, pb->notify, nb->pool);
+ svn_repos_notify_t *notify
+ = svn_repos_notify_create(svn_repos_notify_warning,
+ pb->notify_pool);
+
+ notify->warning = svn_repos__notify_warning_invalid_mergeinfo;
+ notify->warning_str = _("Invalid svn:mergeinfo value; "
+ "leaving unchanged");
+ pb->notify_func(pb->notify_baton, notify, pb->notify_pool);
+ svn_pool_clear(pb->notify_pool);
}
+ svn_error_clear(err);
}
-
- /* Renumber mergeinfo as appropriate. */
- SVN_ERR(renumber_mergeinfo_revs(&renumbered_mergeinfo, prop_val, rb,
- nb->pool));
- value = renumbered_mergeinfo;
- if (pb->parent_dir)
+ else
{
- /* Prefix the merge source paths with PB->parent_dir. */
- /* ASSUMPTION: All source paths are included in the dump stream. */
- svn_string_t *mergeinfo_val;
- SVN_ERR(prefix_mergeinfo_paths(&mergeinfo_val, value,
- pb->parent_dir, nb->pool));
- value = mergeinfo_val;
+ value = new_value;
}
}
@@ -751,6 +862,10 @@ delete_node_property(void *baton,
struct node_baton *nb = baton;
struct revision_baton *rb = nb->rb;
+ /* If we're skipping this revision, we're done here. */
+ if (rb->skipped)
+ return SVN_NO_ERROR;
+
return change_node_prop(rb->txn_root, nb->path, name, NULL,
rb->pb->validate_props, nb->pool);
}
@@ -764,6 +879,10 @@ remove_node_props(void *baton)
apr_hash_t *proplist;
apr_hash_index_t *hi;
+ /* If we're skipping this revision, we're done here. */
+ if (rb->skipped)
+ return SVN_NO_ERROR;
+
SVN_ERR(svn_fs_node_proplist(&proplist,
rb->txn_root, nb->path, nb->pool));
@@ -788,6 +907,13 @@ apply_textdelta(svn_txdelta_window_handler_t *handler,
struct node_baton *nb = node_baton;
struct revision_baton *rb = nb->rb;
+ /* If we're skipping this revision, we're done here. */
+ if (rb->skipped)
+ {
+ *handler = NULL;
+ return SVN_NO_ERROR;
+ }
+
return svn_fs_apply_textdelta(handler, handler_baton,
rb->txn_root, nb->path,
svn_checksum_to_cstring(nb->base_checksum,
@@ -805,6 +931,13 @@ set_fulltext(svn_stream_t **stream,
struct node_baton *nb = node_baton;
struct revision_baton *rb = nb->rb;
+ /* If we're skipping this revision, we're done here. */
+ if (rb->skipped)
+ {
+ *stream = NULL;
+ return SVN_NO_ERROR;
+ }
+
return svn_fs_apply_text(stream,
rb->txn_root, nb->path,
svn_checksum_to_cstring(nb->result_checksum,
@@ -820,10 +953,19 @@ close_node(void *baton)
struct revision_baton *rb = nb->rb;
struct parse_baton *pb = rb->pb;
+ /* If we're skipping this revision, we're done here. */
+ if (rb->skipped)
+ return SVN_NO_ERROR;
+
if (pb->notify_func)
{
- pb->notify->action = svn_repos_notify_load_node_done;
- pb->notify_func(pb->notify_baton, pb->notify, rb->pool);
+ /* ### TODO: Use proper scratch pool instead of pb->notify_pool */
+ svn_repos_notify_t *notify = svn_repos_notify_create(
+ svn_repos_notify_load_node_done,
+ pb->notify_pool);
+
+ pb->notify_func(pb->notify_baton, notify, pb->notify_pool);
+ svn_pool_clear(pb->notify_pool);
}
return SVN_NO_ERROR;
@@ -838,17 +980,33 @@ close_revision(void *baton)
const char *conflict_msg = NULL;
svn_revnum_t committed_rev;
svn_error_t *err;
+ const char *txn_name = NULL;
+ apr_hash_t *hooks_env;
- if (rb->rev <= 0)
+ /* If we're skipping this revision or it has an invalid revision
+ number, we're done here. */
+ if (rb->skipped || (rb->rev <= 0))
return SVN_NO_ERROR;
+ /* Get the txn name and hooks environment if they will be needed. */
+ if (pb->use_pre_commit_hook || pb->use_post_commit_hook)
+ {
+ SVN_ERR(svn_repos__parse_hooks_env(&hooks_env, pb->repos->hooks_env_path,
+ rb->pool, rb->pool));
+
+ err = svn_fs_txn_name(&txn_name, rb->txn, rb->pool);
+ if (err)
+ {
+ svn_error_clear(svn_fs_abort_txn(rb->txn, rb->pool));
+ return svn_error_trace(err);
+ }
+ }
+
/* Run the pre-commit hook, if so commanded. */
if (pb->use_pre_commit_hook)
{
- const char *txn_name;
- err = svn_fs_txn_name(&txn_name, rb->txn, rb->pool);
- if (! err)
- err = svn_repos__hooks_pre_commit(pb->repos, txn_name, rb->pool);
+ err = svn_repos__hooks_pre_commit(pb->repos, hooks_env,
+ txn_name, rb->pool);
if (err)
{
svn_error_clear(svn_fs_abort_txn(rb->txn, rb->pool));
@@ -880,7 +1038,8 @@ close_revision(void *baton)
/* Run post-commit hook, if so commanded. */
if (pb->use_post_commit_hook)
{
- if ((err = svn_repos__hooks_post_commit(pb->repos, committed_rev,
+ if ((err = svn_repos__hooks_post_commit(pb->repos, hooks_env,
+ committed_rev, txn_name,
rb->pool)))
return svn_error_create
(SVN_ERR_REPOS_POST_COMMIT_HOOK_FAILED, err,
@@ -925,12 +1084,17 @@ close_revision(void *baton)
if (pb->notify_func)
{
- pb->notify->action = svn_repos_notify_load_txn_committed;
- pb->notify->new_revision = committed_rev;
- pb->notify->old_revision = ((committed_rev == rb->rev)
+ /* ### TODO: Use proper scratch pool instead of pb->notify_pool */
+ svn_repos_notify_t *notify = svn_repos_notify_create(
+ svn_repos_notify_load_txn_committed,
+ pb->notify_pool);
+
+ notify->new_revision = committed_rev;
+ notify->old_revision = ((committed_rev == rb->rev)
? SVN_INVALID_REVNUM
: rb->rev);
- pb->notify_func(pb->notify_baton, pb->notify, rb->pool);
+ pb->notify_func(pb->notify_baton, notify, pb->notify_pool);
+ svn_pool_clear(pb->notify_pool);
}
return SVN_NO_ERROR;
@@ -943,9 +1107,11 @@ close_revision(void *baton)
svn_error_t *
-svn_repos_get_fs_build_parser3(const svn_repos_parse_fns2_t **callbacks,
+svn_repos_get_fs_build_parser4(const svn_repos_parse_fns3_t **callbacks,
void **parse_baton,
svn_repos_t *repos,
+ svn_revnum_t start_rev,
+ svn_revnum_t end_rev,
svn_boolean_t use_history,
svn_boolean_t validate_props,
enum svn_repos_load_uuid uuid_action,
@@ -954,15 +1120,23 @@ svn_repos_get_fs_build_parser3(const svn_repos_parse_fns2_t **callbacks,
void *notify_baton,
apr_pool_t *pool)
{
- svn_repos_parse_fns2_t *parser = apr_pcalloc(pool, sizeof(*parser));
+ svn_repos_parse_fns3_t *parser = apr_pcalloc(pool, sizeof(*parser));
struct parse_baton *pb = apr_pcalloc(pool, sizeof(*pb));
if (parent_dir)
parent_dir = svn_relpath_canonicalize(parent_dir, pool);
+ SVN_ERR_ASSERT((SVN_IS_VALID_REVNUM(start_rev) &&
+ SVN_IS_VALID_REVNUM(end_rev))
+ || ((! SVN_IS_VALID_REVNUM(start_rev)) &&
+ (! SVN_IS_VALID_REVNUM(end_rev))));
+ if (SVN_IS_VALID_REVNUM(start_rev))
+ SVN_ERR_ASSERT(start_rev <= end_rev);
+
+ parser->magic_header_record = magic_header_record;
+ parser->uuid_record = uuid_record;
parser->new_revision_record = new_revision_record;
parser->new_node_record = new_node_record;
- parser->uuid_record = uuid_record;
parser->set_revision_property = set_revision_property;
parser->set_node_property = set_node_property;
parser->remove_node_props = remove_node_props;
@@ -978,13 +1152,15 @@ svn_repos_get_fs_build_parser3(const svn_repos_parse_fns2_t **callbacks,
pb->validate_props = validate_props;
pb->notify_func = notify_func;
pb->notify_baton = notify_baton;
- pb->notify = svn_repos_notify_create(svn_repos_notify_load_txn_start, pool);
pb->uuid_action = uuid_action;
pb->parent_dir = parent_dir;
pb->pool = pool;
+ pb->notify_pool = svn_pool_create(pool);
pb->rev_map = apr_hash_make(pool);
pb->oldest_old_rev = SVN_INVALID_REVNUM;
pb->last_rev_mapped = SVN_INVALID_REVNUM;
+ pb->start_rev = start_rev;
+ pb->end_rev = end_rev;
*callbacks = parser;
*parse_baton = pb;
@@ -994,8 +1170,10 @@ svn_repos_get_fs_build_parser3(const svn_repos_parse_fns2_t **callbacks,
svn_error_t *
-svn_repos_load_fs3(svn_repos_t *repos,
+svn_repos_load_fs4(svn_repos_t *repos,
svn_stream_t *dumpstream,
+ svn_revnum_t start_rev,
+ svn_revnum_t end_rev,
enum svn_repos_load_uuid uuid_action,
const char *parent_dir,
svn_boolean_t use_pre_commit_hook,
@@ -1007,14 +1185,15 @@ svn_repos_load_fs3(svn_repos_t *repos,
void *cancel_baton,
apr_pool_t *pool)
{
- const svn_repos_parse_fns2_t *parser;
+ const svn_repos_parse_fns3_t *parser;
void *parse_baton;
struct parse_baton *pb;
/* This is really simple. */
- SVN_ERR(svn_repos_get_fs_build_parser3(&parser, &parse_baton,
+ SVN_ERR(svn_repos_get_fs_build_parser4(&parser, &parse_baton,
repos,
+ start_rev, end_rev,
TRUE, /* look for copyfrom revs */
validate_props,
uuid_action,
@@ -1029,6 +1208,6 @@ svn_repos_load_fs3(svn_repos_t *repos,
pb->use_pre_commit_hook = use_pre_commit_hook;
pb->use_post_commit_hook = use_post_commit_hook;
- return svn_repos_parse_dumpstream2(dumpstream, parser, parse_baton,
+ return svn_repos_parse_dumpstream3(dumpstream, parser, parse_baton, FALSE,
cancel_func, cancel_baton, pool);
}
diff --git a/subversion/libsvn_repos/load.c b/subversion/libsvn_repos/load.c
index f305118..691ff92 100644
--- a/subversion/libsvn_repos/load.c
+++ b/subversion/libsvn_repos/load.c
@@ -22,6 +22,7 @@
#include "svn_private_config.h"
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_error.h"
#include "svn_fs.h"
@@ -127,7 +128,7 @@ read_header_block(svn_stream_t *stream,
value = header_str->data + i;
/* Store name/value in hash. */
- apr_hash_set(*headers, name, APR_HASH_KEY_STRING, value);
+ svn_hash_sets(*headers, name, value);
}
return SVN_NO_ERROR;
@@ -181,7 +182,7 @@ read_key_or_val(char **pbuf,
static svn_error_t *
parse_property_block(svn_stream_t *stream,
svn_filesize_t content_length,
- const svn_repos_parse_fns2_t *parse_fns,
+ const svn_repos_parse_fns3_t *parse_fns,
void *record_baton,
void *parse_baton,
svn_boolean_t is_node,
@@ -299,7 +300,7 @@ static svn_error_t *
parse_text_block(svn_stream_t *stream,
svn_filesize_t content_length,
svn_boolean_t is_delta,
- const svn_repos_parse_fns2_t *parse_fns,
+ const svn_repos_parse_fns3_t *parse_fns,
void *record_baton,
char *buffer,
apr_size_t buflen,
@@ -336,7 +337,7 @@ parse_text_block(svn_stream_t *stream,
need to read it. */
while (content_length)
{
- if (content_length >= buflen)
+ if (content_length >= (svn_filesize_t)buflen)
rlen = buflen;
else
rlen = (apr_size_t) content_length;
@@ -373,7 +374,8 @@ parse_text_block(svn_stream_t *stream,
/* Parse VERSIONSTRING and verify that we support the dumpfile format
version number, setting *VERSION appropriately. */
static svn_error_t *
-parse_format_version(const char *versionstring, int *version)
+parse_format_version(int *version,
+ const char *versionstring)
{
static const int magic_len = sizeof(SVN_REPOS_DUMPFILE_MAGIC_HEADER) - 1;
const char *p = strchr(versionstring, ':');
@@ -406,9 +408,10 @@ parse_format_version(const char *versionstring, int *version)
/** The public routines **/
svn_error_t *
-svn_repos_parse_dumpstream2(svn_stream_t *stream,
- const svn_repos_parse_fns2_t *parse_fns,
+svn_repos_parse_dumpstream3(svn_stream_t *stream,
+ const svn_repos_parse_fns3_t *parse_fns,
void *parse_baton,
+ svn_boolean_t deltas_are_text,
svn_cancel_func_t cancel_func,
void *cancel_baton,
apr_pool_t *pool)
@@ -428,16 +431,11 @@ svn_repos_parse_dumpstream2(svn_stream_t *stream,
return stream_ran_dry();
/* The first two lines of the stream are the dumpfile-format version
- number, and a blank line. */
- SVN_ERR(parse_format_version(linebuf->data, &version));
-
- /* If we were called from svn_repos_parse_dumpstream(), the
- callbacks to handle delta contents will be NULL, so we have to
- reject dumpfiles with the current version. */
- if (version == SVN_REPOS_DUMPFILE_FORMAT_VERSION
- && (!parse_fns->delete_node_property || !parse_fns->apply_textdelta))
- return svn_error_createf(SVN_ERR_STREAM_MALFORMED_DATA, NULL,
- _("Unsupported dumpfile version: %d"), version);
+ number, and a blank line. To preserve backward compatibility,
+ don't assume the existence of newer parser-vtable functions. */
+ SVN_ERR(parse_format_version(&version, linebuf->data));
+ if (parse_fns->magic_header_record != NULL)
+ SVN_ERR(parse_fns->magic_header_record(version, parse_baton, pool));
/* A dumpfile "record" is defined to be a header-block of
rfc822-style headers, possibly followed by a content-block.
@@ -496,8 +494,7 @@ svn_repos_parse_dumpstream2(svn_stream_t *stream,
/*** Handle the various header blocks. ***/
/* Is this a revision record? */
- if (apr_hash_get(headers, SVN_REPOS_DUMPFILE_REVISION_NUMBER,
- APR_HASH_KEY_STRING))
+ if (svn_hash_gets(headers, SVN_REPOS_DUMPFILE_REVISION_NUMBER))
{
/* If we already have a rev_baton open, we need to close it
and clear the per-revision subpool. */
@@ -512,8 +509,7 @@ svn_repos_parse_dumpstream2(svn_stream_t *stream,
revpool));
}
/* Or is this, perhaps, a node record? */
- else if (apr_hash_get(headers, SVN_REPOS_DUMPFILE_NODE_PATH,
- APR_HASH_KEY_STRING))
+ else if (svn_hash_gets(headers, SVN_REPOS_DUMPFILE_NODE_PATH))
{
SVN_ERR(parse_fns->new_node_record(&node_baton,
headers,
@@ -522,15 +518,14 @@ svn_repos_parse_dumpstream2(svn_stream_t *stream,
found_node = TRUE;
}
/* Or is this the repos UUID? */
- else if ((value = apr_hash_get(headers, SVN_REPOS_DUMPFILE_UUID,
- APR_HASH_KEY_STRING)))
+ else if ((value = svn_hash_gets(headers, SVN_REPOS_DUMPFILE_UUID)))
{
SVN_ERR(parse_fns->uuid_record(value, parse_baton, pool));
}
/* Or perhaps a dumpfile format? */
- else if ((value = apr_hash_get(headers,
- SVN_REPOS_DUMPFILE_MAGIC_HEADER,
- APR_HASH_KEY_STRING)))
+ /* ### TODO: use parse_format_version */
+ else if ((value = svn_hash_gets(headers,
+ SVN_REPOS_DUMPFILE_MAGIC_HEADER)))
{
/* ### someday, switch modes of operation here. */
SVN_ERR(svn_cstring_atoi(&version, value));
@@ -549,24 +544,18 @@ svn_repos_parse_dumpstream2(svn_stream_t *stream,
and Text-content-length fields, but always have a properties
block in a block with Content-Length > 0 */
- content_length = apr_hash_get(headers,
- SVN_REPOS_DUMPFILE_CONTENT_LENGTH,
- APR_HASH_KEY_STRING);
- prop_cl = apr_hash_get(headers,
- SVN_REPOS_DUMPFILE_PROP_CONTENT_LENGTH,
- APR_HASH_KEY_STRING);
- text_cl = apr_hash_get(headers,
- SVN_REPOS_DUMPFILE_TEXT_CONTENT_LENGTH,
- APR_HASH_KEY_STRING);
+ content_length = svn_hash_gets(headers,
+ SVN_REPOS_DUMPFILE_CONTENT_LENGTH);
+ prop_cl = svn_hash_gets(headers, SVN_REPOS_DUMPFILE_PROP_CONTENT_LENGTH);
+ text_cl = svn_hash_gets(headers, SVN_REPOS_DUMPFILE_TEXT_CONTENT_LENGTH);
old_v1_with_cl =
version == 1 && content_length && ! prop_cl && ! text_cl;
/* Is there a props content-block to parse? */
if (prop_cl || old_v1_with_cl)
{
- const char *delta = apr_hash_get(headers,
- SVN_REPOS_DUMPFILE_PROP_DELTA,
- APR_HASH_KEY_STRING);
+ const char *delta = svn_hash_gets(headers,
+ SVN_REPOS_DUMPFILE_PROP_DELTA);
svn_boolean_t is_delta = (delta && strcmp(delta, "true") == 0);
/* First, remove all node properties, unless this is a delta
@@ -588,10 +577,11 @@ svn_repos_parse_dumpstream2(svn_stream_t *stream,
/* Is there a text content-block to parse? */
if (text_cl)
{
- const char *delta = apr_hash_get(headers,
- SVN_REPOS_DUMPFILE_TEXT_DELTA,
- APR_HASH_KEY_STRING);
- svn_boolean_t is_delta = (delta && strcmp(delta, "true") == 0);
+ const char *delta = svn_hash_gets(headers,
+ SVN_REPOS_DUMPFILE_TEXT_DELTA);
+ svn_boolean_t is_delta = FALSE;
+ if (! deltas_are_text)
+ is_delta = (delta && strcmp(delta, "true") == 0);
SVN_ERR(parse_text_block(stream,
svn__atoui64(text_cl),
@@ -623,9 +613,8 @@ svn_repos_parse_dumpstream2(svn_stream_t *stream,
- actual_prop_length;
if (cl_value ||
- ((node_kind = apr_hash_get(headers,
- SVN_REPOS_DUMPFILE_NODE_KIND,
- APR_HASH_KEY_STRING))
+ ((node_kind = svn_hash_gets(headers,
+ SVN_REPOS_DUMPFILE_NODE_KIND))
&& strcmp(node_kind, "file") == 0)
)
SVN_ERR(parse_text_block(stream,
@@ -659,7 +648,7 @@ svn_repos_parse_dumpstream2(svn_stream_t *stream,
/* Consume remaining bytes in this content block */
while (remaining > 0)
{
- if (remaining >= buflen)
+ if (remaining >= (svn_filesize_t)buflen)
rlen = buflen;
else
rlen = (apr_size_t) remaining;
diff --git a/subversion/libsvn_repos/log.c b/subversion/libsvn_repos/log.c
index c0d00d6..8ca870b 100644
--- a/subversion/libsvn_repos/log.c
+++ b/subversion/libsvn_repos/log.c
@@ -27,6 +27,7 @@
#include "svn_compat.h"
#include "svn_private_config.h"
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_error.h"
#include "svn_path.h"
@@ -39,6 +40,7 @@
#include "repos.h"
#include "private/svn_fspath.h"
#include "private/svn_mergeinfo_private.h"
+#include "private/svn_subr_private.h"
@@ -159,6 +161,10 @@ svn_repos_check_revision_access(svn_repos_revision_access_level_t *access_level,
* The CHANGED hash set and its keys and values are allocated in POOL;
* keys are const char * paths and values are svn_log_changed_path_t.
*
+ * To prevent changes from being processed over and over again, the
+ * changed paths for ROOT may be passed in PREFETCHED_CHANGES. If the
+ * latter is NULL, we will request the list inside this function.
+ *
* If optional AUTHZ_READ_FUNC is non-NULL, then use it (with
* AUTHZ_READ_BATON and FS) to check whether each changed-path (and
* copyfrom_path) is readable:
@@ -177,18 +183,20 @@ static svn_error_t *
detect_changed(apr_hash_t **changed,
svn_fs_root_t *root,
svn_fs_t *fs,
+ apr_hash_t *prefetched_changes,
svn_repos_authz_func_t authz_read_func,
void *authz_read_baton,
apr_pool_t *pool)
{
- apr_hash_t *changes;
+ apr_hash_t *changes = prefetched_changes;
apr_hash_index_t *hi;
apr_pool_t *subpool;
svn_boolean_t found_readable = FALSE;
svn_boolean_t found_unreadable = FALSE;
- *changed = apr_hash_make(pool);
- SVN_ERR(svn_fs_paths_changed2(&changes, root, pool));
+ *changed = svn_hash__make(pool);
+ if (changes == NULL)
+ SVN_ERR(svn_fs_paths_changed2(&changes, root, pool));
if (apr_hash_count(changes) == 0)
/* No paths changed in this revision? Uh, sure, I guess the
@@ -264,13 +272,54 @@ detect_changed(apr_hash_t **changed,
: svn_tristate_false;
item->props_modified = change->prop_mod ? svn_tristate_true
: svn_tristate_false;
+
+ /* Pre-1.6 revision files don't store the change path kind, so fetch
+ it manually. */
+ if (item->node_kind == svn_node_unknown)
+ {
+ svn_fs_root_t *check_root = root;
+ const char *check_path = path;
+
+ /* Deleted items don't exist so check earlier revision. We
+ know the parent must exist and could be a copy */
+ if (change->change_kind == svn_fs_path_change_delete)
+ {
+ svn_fs_history_t *history;
+ svn_revnum_t prev_rev;
+ const char *parent_path, *name;
+
+ svn_fspath__split(&parent_path, &name, path, subpool);
+
+ SVN_ERR(svn_fs_node_history(&history, root, parent_path,
+ subpool));
+
+ /* Two calls because the first call returns the original
+ revision as the deleted child means it is 'interesting' */
+ SVN_ERR(svn_fs_history_prev(&history, history, TRUE, subpool));
+ SVN_ERR(svn_fs_history_prev(&history, history, TRUE, subpool));
+
+ SVN_ERR(svn_fs_history_location(&parent_path, &prev_rev, history,
+ subpool));
+ SVN_ERR(svn_fs_revision_root(&check_root, fs, prev_rev, subpool));
+ check_path = svn_fspath__join(parent_path, name, subpool);
+ }
+
+ SVN_ERR(svn_fs_check_path(&item->node_kind, check_root, check_path,
+ subpool));
+ }
+
+
if ((action == 'A') || (action == 'R'))
{
- const char *copyfrom_path;
- svn_revnum_t copyfrom_rev;
+ const char *copyfrom_path = change->copyfrom_path;
+ svn_revnum_t copyfrom_rev = change->copyfrom_rev;
- SVN_ERR(svn_fs_copied_from(&copyfrom_rev, &copyfrom_path,
- root, path, subpool));
+ /* the following is a potentially expensive operation since on FSFS
+ we will follow the DAG from ROOT to PATH and that requires
+ actually reading the directories along the way. */
+ if (!change->copyfrom_known)
+ SVN_ERR(svn_fs_copied_from(&copyfrom_rev, &copyfrom_path,
+ root, path, subpool));
if (copyfrom_path && SVN_IS_VALID_REVNUM(copyfrom_rev))
{
@@ -296,8 +345,7 @@ detect_changed(apr_hash_t **changed,
}
}
}
- apr_hash_set(*changed, apr_pstrdup(pool, path),
- APR_HASH_KEY_STRING, item);
+ svn_hash_sets(*changed, apr_pstrdup(pool, path), item);
}
svn_pool_destroy(subpool);
@@ -514,26 +562,28 @@ next_history_rev(const apr_array_header_t *histories)
/* Set *DELETED_MERGEINFO_CATALOG and *ADDED_MERGEINFO_CATALOG to
catalogs describing how mergeinfo values on paths (which are the
- keys of those catalogs) were changed in REV. */
+ keys of those catalogs) were changed in REV. If *PREFETCHED_CAHNGES
+ already contains the changed paths for REV, use that. Otherwise,
+ request that data and return it in *PREFETCHED_CHANGES. */
/* ### TODO: This would make a *great*, useful public function,
### svn_repos_fs_mergeinfo_changed()! -- cmpilato */
static svn_error_t *
fs_mergeinfo_changed(svn_mergeinfo_catalog_t *deleted_mergeinfo_catalog,
svn_mergeinfo_catalog_t *added_mergeinfo_catalog,
+ apr_hash_t **prefetched_changes,
svn_fs_t *fs,
svn_revnum_t rev,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- apr_hash_t *changes;
svn_fs_root_t *root;
apr_pool_t *iterpool;
apr_hash_index_t *hi;
/* Initialize return variables. */
- *deleted_mergeinfo_catalog = apr_hash_make(result_pool);
- *added_mergeinfo_catalog = apr_hash_make(result_pool);
+ *deleted_mergeinfo_catalog = svn_hash__make(result_pool);
+ *added_mergeinfo_catalog = svn_hash__make(result_pool);
/* Revision 0 has no mergeinfo and no mergeinfo changes. */
if (rev == 0)
@@ -542,17 +592,20 @@ fs_mergeinfo_changed(svn_mergeinfo_catalog_t *deleted_mergeinfo_catalog,
/* We're going to use the changed-paths information for REV to
narrow down our search. */
SVN_ERR(svn_fs_revision_root(&root, fs, rev, scratch_pool));
- SVN_ERR(svn_fs_paths_changed2(&changes, root, scratch_pool));
+ if (*prefetched_changes == NULL)
+ SVN_ERR(svn_fs_paths_changed2(prefetched_changes, root, scratch_pool));
/* No changed paths? We're done. */
- if (apr_hash_count(changes) == 0)
+ if (apr_hash_count(*prefetched_changes) == 0)
return SVN_NO_ERROR;
/* Loop over changes, looking for anything that might carry an
svn:mergeinfo change and is one of our paths of interest, or a
child or [grand]parent directory thereof. */
iterpool = svn_pool_create(scratch_pool);
- for (hi = apr_hash_first(scratch_pool, changes); hi; hi = apr_hash_next(hi))
+ for (hi = apr_hash_first(scratch_pool, *prefetched_changes);
+ hi;
+ hi = apr_hash_next(hi))
{
const void *key;
void *val;
@@ -663,11 +716,10 @@ fs_mergeinfo_changed(svn_mergeinfo_catalog_t *deleted_mergeinfo_catalog,
svn_mergeinfo_catalog_t tmp_catalog;
APR_ARRAY_PUSH(query_paths, const char *) = changed_path;
- SVN_ERR(svn_fs_get_mergeinfo(&tmp_catalog, root,
- query_paths, svn_mergeinfo_inherited,
- FALSE, iterpool));
- tmp_mergeinfo = apr_hash_get(tmp_catalog, changed_path,
- APR_HASH_KEY_STRING);
+ SVN_ERR(svn_fs_get_mergeinfo2(&tmp_catalog, root,
+ query_paths, svn_mergeinfo_inherited,
+ FALSE, TRUE, iterpool, iterpool));
+ tmp_mergeinfo = svn_hash_gets(tmp_catalog, changed_path);
if (tmp_mergeinfo)
SVN_ERR(svn_mergeinfo_to_string(&mergeinfo_value,
tmp_mergeinfo,
@@ -682,11 +734,10 @@ fs_mergeinfo_changed(svn_mergeinfo_catalog_t *deleted_mergeinfo_catalog,
svn_mergeinfo_catalog_t tmp_catalog;
APR_ARRAY_PUSH(query_paths, const char *) = base_path;
- SVN_ERR(svn_fs_get_mergeinfo(&tmp_catalog, base_root,
- query_paths, svn_mergeinfo_inherited,
- FALSE, iterpool));
- tmp_mergeinfo = apr_hash_get(tmp_catalog, base_path,
- APR_HASH_KEY_STRING);
+ SVN_ERR(svn_fs_get_mergeinfo2(&tmp_catalog, base_root,
+ query_paths, svn_mergeinfo_inherited,
+ FALSE, TRUE, iterpool, iterpool));
+ tmp_mergeinfo = svn_hash_gets(tmp_catalog, base_path);
if (tmp_mergeinfo)
SVN_ERR(svn_mergeinfo_to_string(&prev_mergeinfo_value,
tmp_mergeinfo,
@@ -711,17 +762,14 @@ fs_mergeinfo_changed(svn_mergeinfo_catalog_t *deleted_mergeinfo_catalog,
if (prev_mergeinfo_value)
SVN_ERR(svn_mergeinfo_parse(&prev_mergeinfo,
prev_mergeinfo_value->data, iterpool));
- SVN_ERR(svn_mergeinfo_diff(&deleted, &added, prev_mergeinfo,
- mergeinfo, FALSE, iterpool));
+ SVN_ERR(svn_mergeinfo_diff2(&deleted, &added, prev_mergeinfo,
+ mergeinfo, FALSE, result_pool,
+ iterpool));
/* Toss interesting stuff into our return catalogs. */
hash_path = apr_pstrdup(result_pool, changed_path);
- apr_hash_set(*deleted_mergeinfo_catalog, hash_path,
- APR_HASH_KEY_STRING, svn_mergeinfo_dup(deleted,
- result_pool));
- apr_hash_set(*added_mergeinfo_catalog, hash_path,
- APR_HASH_KEY_STRING, svn_mergeinfo_dup(added,
- result_pool));
+ svn_hash_sets(*deleted_mergeinfo_catalog, hash_path, deleted);
+ svn_hash_sets(*added_mergeinfo_catalog, hash_path, added);
}
}
@@ -733,10 +781,14 @@ fs_mergeinfo_changed(svn_mergeinfo_catalog_t *deleted_mergeinfo_catalog,
/* Determine what (if any) mergeinfo for PATHS was modified in
revision REV, returning the differences for added mergeinfo in
*ADDED_MERGEINFO and deleted mergeinfo in *DELETED_MERGEINFO.
+ If *PREFETCHED_CAHNGES already contains the changed paths for
+ REV, use that. Otherwise, request that data and return it in
+ *PREFETCHED_CHANGES.
Use POOL for all allocations. */
static svn_error_t *
get_combined_mergeinfo_changes(svn_mergeinfo_t *added_mergeinfo,
svn_mergeinfo_t *deleted_mergeinfo,
+ apr_hash_t **prefetched_changes,
svn_fs_t *fs,
const apr_array_header_t *paths,
svn_revnum_t rev,
@@ -751,8 +803,8 @@ get_combined_mergeinfo_changes(svn_mergeinfo_t *added_mergeinfo,
svn_error_t *err;
/* Initialize return value. */
- *added_mergeinfo = apr_hash_make(result_pool);
- *deleted_mergeinfo = apr_hash_make(result_pool);
+ *added_mergeinfo = svn_hash__make(result_pool);
+ *deleted_mergeinfo = svn_hash__make(result_pool);
/* If we're asking about revision 0, there's no mergeinfo to be found. */
if (rev == 0)
@@ -768,6 +820,7 @@ get_combined_mergeinfo_changes(svn_mergeinfo_t *added_mergeinfo,
/* Fetch the mergeinfo changes for REV. */
err = fs_mergeinfo_changed(&deleted_mergeinfo_catalog,
&added_mergeinfo_catalog,
+ prefetched_changes,
fs, rev, scratch_pool, scratch_pool);
if (err)
{
@@ -785,6 +838,11 @@ get_combined_mergeinfo_changes(svn_mergeinfo_t *added_mergeinfo,
}
}
+ /* In most revisions, there will be no mergeinfo change at all. */
+ if ( apr_hash_count(deleted_mergeinfo_catalog) == 0
+ && apr_hash_count(added_mergeinfo_catalog) == 0)
+ return SVN_NO_ERROR;
+
/* Check our PATHS for any changes to their inherited mergeinfo.
(We deal with changes to mergeinfo directly *on* the paths in the
following loop.) */
@@ -793,17 +851,19 @@ get_combined_mergeinfo_changes(svn_mergeinfo_t *added_mergeinfo,
{
const char *path = APR_ARRAY_IDX(paths, i, const char *);
const char *prev_path;
+ apr_ssize_t klen;
svn_revnum_t appeared_rev, prev_rev;
svn_fs_root_t *prev_root;
- svn_mergeinfo_catalog_t catalog;
- svn_mergeinfo_t prev_mergeinfo, mergeinfo, deleted, added;
+ svn_mergeinfo_catalog_t catalog, inherited_catalog;
+ svn_mergeinfo_t prev_mergeinfo, mergeinfo, deleted, added,
+ prev_inherited_mergeinfo, inherited_mergeinfo;
apr_array_header_t *query_paths;
svn_pool_clear(iterpool);
/* If this path is represented in the changed-mergeinfo hashes,
we'll deal with it in the loop below. */
- if (apr_hash_get(deleted_mergeinfo_catalog, path, APR_HASH_KEY_STRING))
+ if (svn_hash_gets(deleted_mergeinfo_catalog, path))
continue;
/* Figure out what path/rev to compare against. Ignore
@@ -835,8 +895,9 @@ get_combined_mergeinfo_changes(svn_mergeinfo_t *added_mergeinfo,
SVN_ERR(svn_fs_revision_root(&prev_root, fs, prev_rev, iterpool));
query_paths = apr_array_make(iterpool, 1, sizeof(const char *));
APR_ARRAY_PUSH(query_paths, const char *) = prev_path;
- err = svn_fs_get_mergeinfo(&catalog, prev_root, query_paths,
- svn_mergeinfo_inherited, FALSE, iterpool);
+ err = svn_fs_get_mergeinfo2(&catalog, prev_root, query_paths,
+ svn_mergeinfo_inherited, FALSE, TRUE,
+ iterpool, iterpool);
if (err && (err->apr_err == SVN_ERR_FS_NOT_FOUND ||
err->apr_err == SVN_ERR_FS_NOT_DIRECTORY ||
err->apr_err == SVN_ERR_MERGEINFO_PARSE_ERROR))
@@ -846,29 +907,78 @@ get_combined_mergeinfo_changes(svn_mergeinfo_t *added_mergeinfo,
continue;
}
SVN_ERR(err);
- prev_mergeinfo = apr_hash_get(catalog, prev_path, APR_HASH_KEY_STRING);
+
+ /* Issue #4022 'svn log -g interprets change in inherited mergeinfo due
+ to move as a merge': A copy where the source and destination inherit
+ mergeinfo from the same parent means the inherited mergeinfo of the
+ source and destination will differ, but this diffrence is not
+ indicative of a merge unless the mergeinfo on the inherited parent
+ has actually changed.
+
+ To check for this we must fetch the "raw" previous inherited
+ mergeinfo and the "raw" mergeinfo @REV then compare these. */
+ SVN_ERR(svn_fs_get_mergeinfo2(&inherited_catalog, prev_root, query_paths,
+ svn_mergeinfo_nearest_ancestor, FALSE,
+ FALSE, /* adjust_inherited_mergeinfo */
+ iterpool, iterpool));
+
+ klen = strlen(prev_path);
+ prev_mergeinfo = apr_hash_get(catalog, prev_path, klen);
+ prev_inherited_mergeinfo = apr_hash_get(inherited_catalog, prev_path, klen);
/* Fetch the current mergeinfo (as of REV, and including
inherited stuff) for this path. */
APR_ARRAY_IDX(query_paths, 0, const char *) = path;
- SVN_ERR(svn_fs_get_mergeinfo(&catalog, root, query_paths,
- svn_mergeinfo_inherited, FALSE, iterpool));
- mergeinfo = apr_hash_get(catalog, path, APR_HASH_KEY_STRING);
+ SVN_ERR(svn_fs_get_mergeinfo2(&catalog, root, query_paths,
+ svn_mergeinfo_inherited, FALSE, TRUE,
+ iterpool, iterpool));
+
+ /* Issue #4022 again, fetch the raw inherited mergeinfo. */
+ SVN_ERR(svn_fs_get_mergeinfo2(&inherited_catalog, root, query_paths,
+ svn_mergeinfo_nearest_ancestor, FALSE,
+ FALSE, /* adjust_inherited_mergeinfo */
+ iterpool, iterpool));
+
+ klen = strlen(path);
+ mergeinfo = apr_hash_get(catalog, path, klen);
+ inherited_mergeinfo = apr_hash_get(inherited_catalog, path, klen);
if (!prev_mergeinfo && !mergeinfo)
continue;
+ /* Last bit of issue #4022 checking. */
+ if (prev_inherited_mergeinfo && inherited_mergeinfo)
+ {
+ svn_boolean_t inherits_same_mergeinfo;
+
+ SVN_ERR(svn_mergeinfo__equals(&inherits_same_mergeinfo,
+ prev_inherited_mergeinfo,
+ inherited_mergeinfo,
+ TRUE, iterpool));
+ /* If a copy rather than an actual merge brought about an
+ inherited mergeinfo change then we are finished. */
+ if (inherits_same_mergeinfo)
+ continue;
+ }
+ else
+ {
+ svn_boolean_t same_mergeinfo;
+ SVN_ERR(svn_mergeinfo__equals(&same_mergeinfo,
+ prev_inherited_mergeinfo,
+ FALSE,
+ TRUE, iterpool));
+ if (same_mergeinfo)
+ continue;
+ }
+
/* Compare, constrast, and combine the results. */
- SVN_ERR(svn_mergeinfo_diff(&deleted, &added, prev_mergeinfo,
- mergeinfo, FALSE, iterpool));
- SVN_ERR(svn_mergeinfo_merge(*deleted_mergeinfo,
- svn_mergeinfo_dup(deleted, result_pool),
- result_pool));
- SVN_ERR(svn_mergeinfo_merge(*added_mergeinfo,
- svn_mergeinfo_dup(added, result_pool),
- result_pool));
+ SVN_ERR(svn_mergeinfo_diff2(&deleted, &added, prev_mergeinfo,
+ mergeinfo, FALSE, result_pool, iterpool));
+ SVN_ERR(svn_mergeinfo_merge2(*deleted_mergeinfo, deleted,
+ result_pool, iterpool));
+ SVN_ERR(svn_mergeinfo_merge2(*added_mergeinfo, added,
+ result_pool, iterpool));
}
- svn_pool_destroy(iterpool);
/* Merge all the mergeinfos which are, or are children of, one of
our paths of interest into one giant delta mergeinfo. */
@@ -889,20 +999,22 @@ get_combined_mergeinfo_changes(svn_mergeinfo_t *added_mergeinfo,
for (i = 0; i < paths->nelts; i++)
{
const char *path = APR_ARRAY_IDX(paths, i, const char *);
- if (! svn_dirent_is_ancestor(path, changed_path))
+ if (! svn_fspath__skip_ancestor(path, changed_path))
continue;
+ svn_pool_clear(iterpool);
deleted = apr_hash_get(deleted_mergeinfo_catalog, key, klen);
- SVN_ERR(svn_mergeinfo_merge(*deleted_mergeinfo,
- svn_mergeinfo_dup(deleted, result_pool),
- result_pool));
- SVN_ERR(svn_mergeinfo_merge(*added_mergeinfo,
- svn_mergeinfo_dup(added, result_pool),
- result_pool));
+ SVN_ERR(svn_mergeinfo_merge2(*deleted_mergeinfo,
+ svn_mergeinfo_dup(deleted, result_pool),
+ result_pool, iterpool));
+ SVN_ERR(svn_mergeinfo_merge2(*added_mergeinfo,
+ svn_mergeinfo_dup(added, result_pool),
+ result_pool, iterpool));
break;
}
}
+ svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
@@ -912,6 +1024,7 @@ static svn_error_t *
fill_log_entry(svn_log_entry_t *log_entry,
svn_revnum_t rev,
svn_fs_t *fs,
+ apr_hash_t *prefetched_changes,
svn_boolean_t discover_changed_paths,
const apr_array_header_t *revprops,
svn_repos_authz_func_t authz_read_func,
@@ -931,7 +1044,7 @@ fill_log_entry(svn_log_entry_t *log_entry,
SVN_ERR(svn_fs_revision_root(&newroot, fs, rev, pool));
patherr = detect_changed(&changed_paths,
- newroot, fs,
+ newroot, fs, prefetched_changes,
authz_read_func, authz_read_baton,
pool);
@@ -971,15 +1084,11 @@ fill_log_entry(svn_log_entry_t *log_entry,
if (censor_revprops)
{
/* ... but we can only return author/date. */
- log_entry->revprops = apr_hash_make(pool);
- apr_hash_set(log_entry->revprops, SVN_PROP_REVISION_AUTHOR,
- APR_HASH_KEY_STRING,
- apr_hash_get(r_props, SVN_PROP_REVISION_AUTHOR,
- APR_HASH_KEY_STRING));
- apr_hash_set(log_entry->revprops, SVN_PROP_REVISION_DATE,
- APR_HASH_KEY_STRING,
- apr_hash_get(r_props, SVN_PROP_REVISION_DATE,
- APR_HASH_KEY_STRING));
+ log_entry->revprops = svn_hash__make(pool);
+ svn_hash_sets(log_entry->revprops, SVN_PROP_REVISION_AUTHOR,
+ svn_hash_gets(r_props, SVN_PROP_REVISION_AUTHOR));
+ svn_hash_sets(log_entry->revprops, SVN_PROP_REVISION_DATE,
+ svn_hash_gets(r_props, SVN_PROP_REVISION_DATE));
}
else
/* ... so return all we got. */
@@ -992,17 +1101,15 @@ fill_log_entry(svn_log_entry_t *log_entry,
for (i = 0; i < revprops->nelts; i++)
{
char *name = APR_ARRAY_IDX(revprops, i, char *);
- svn_string_t *value = apr_hash_get(r_props, name,
- APR_HASH_KEY_STRING);
+ svn_string_t *value = svn_hash_gets(r_props, name);
if (censor_revprops
&& !(strcmp(name, SVN_PROP_REVISION_AUTHOR) == 0
|| strcmp(name, SVN_PROP_REVISION_DATE) == 0))
/* ... but we can only return author/date. */
continue;
if (log_entry->revprops == NULL)
- log_entry->revprops = apr_hash_make(pool);
- apr_hash_set(log_entry->revprops, name,
- APR_HASH_KEY_STRING, value);
+ log_entry->revprops = svn_hash__make(pool);
+ svn_hash_sets(log_entry->revprops, name, value);
}
}
}
@@ -1024,8 +1131,9 @@ fill_log_entry(svn_log_entry_t *log_entry,
If DESCENDING_ORDER is true, send child messages in descending order.
- If REVPROPS is NULL, retrieve all revprops; else, retrieve only the
- revprops named in the array (i.e. retrieve none if the array is empty).
+ If REVPROPS is NULL, retrieve all revision properties; else, retrieve
+ only the revision properties named by the (const char *) array elements
+ (i.e. retrieve none if the array is empty).
LOG_TARGET_HISTORY_AS_MERGEINFO, HANDLING_MERGED_REVISION, and
NESTED_MERGES are as per the arguments of the same name to DO_LOGS. If
@@ -1041,6 +1149,7 @@ fill_log_entry(svn_log_entry_t *log_entry,
static svn_error_t *
send_log(svn_revnum_t rev,
svn_fs_t *fs,
+ apr_hash_t *prefetched_changes,
svn_mergeinfo_t log_target_history_as_mergeinfo,
apr_hash_t *nested_merges,
svn_boolean_t discover_changed_paths,
@@ -1059,7 +1168,7 @@ send_log(svn_revnum_t rev,
svn_boolean_t found_rev_of_interest = TRUE;
log_entry = svn_log_entry_create(pool);
- SVN_ERR(fill_log_entry(log_entry, rev, fs,
+ SVN_ERR(fill_log_entry(log_entry, rev, fs, prefetched_changes,
discover_changed_paths || handling_merged_revision,
revprops, authz_read_func, authz_read_baton,
pool));
@@ -1091,6 +1200,7 @@ send_log(svn_revnum_t rev,
apr_hash_index_t *hi2;
apr_pool_t *inner_subpool = svn_pool_create(subpool);
+ /* Look at each path on the log target's mergeinfo. */
for (hi2 = apr_hash_first(inner_subpool,
log_target_history_as_mergeinfo);
hi2;
@@ -1098,11 +1208,12 @@ send_log(svn_revnum_t rev,
{
const char *mergeinfo_path =
svn__apr_hash_index_key(hi2);
- apr_array_header_t *rangelist =
+ svn_rangelist_t *rangelist =
svn__apr_hash_index_val(hi2);
- if (svn_fspath__is_ancestor(mergeinfo_path,
- changed_path))
+ /* Check whether CHANGED_PATH at revision REV is a child of
+ a (path, revision) tuple in LOG_TARGET_HISTORY_AS_MERGEINFO. */
+ if (svn_fspath__skip_ancestor(mergeinfo_path, changed_path))
{
int i;
@@ -1317,7 +1428,7 @@ struct path_list_range
the paths can be accessed by revision. */
struct rangelist_path
{
- apr_array_header_t *rangelist;
+ svn_rangelist_t *rangelist;
const char *path;
};
@@ -1655,14 +1766,13 @@ reduce_search(apr_array_header_t *paths,
for (i = 0; i < paths->nelts; ++i)
{
const char *path = APR_ARRAY_IDX(paths, i, const char *);
- apr_array_header_t *ranges = apr_hash_get(processed, path,
- APR_HASH_KEY_STRING);
+ svn_rangelist_t *ranges = svn_hash_gets(processed, path);
int j;
if (!ranges)
continue;
- /* ranges is ordered, could we use some sort of binay search
+ /* ranges is ordered, could we use some sort of binary search
rather than iterating? */
for (j = 0; j < ranges->nelts; ++j)
{
@@ -1720,27 +1830,26 @@ store_search(svn_mergeinfo_t processed,
singe revisions where HIST_START is equal to HIST_END. */
svn_revnum_t start = hist_start <= hist_end ? hist_start : hist_end;
svn_revnum_t end = hist_start <= hist_end ? hist_end + 1 : hist_start + 1;
- svn_mergeinfo_t mergeinfo = apr_hash_make(scratch_pool);
+ svn_mergeinfo_t mergeinfo = svn_hash__make(scratch_pool);
apr_pool_t *processed_pool = apr_hash_pool_get(processed);
int i;
for (i = 0; i < paths->nelts; ++i)
{
const char *path = APR_ARRAY_IDX(paths, i, const char *);
- apr_array_header_t *ranges = apr_array_make(processed_pool, 1,
- sizeof(svn_merge_range_t*));
+ svn_rangelist_t *ranges = apr_array_make(processed_pool, 1,
+ sizeof(svn_merge_range_t*));
svn_merge_range_t *range = apr_palloc(processed_pool,
sizeof(svn_merge_range_t));
-
+
range->start = start;
range->end = end;
range->inheritable = TRUE;
APR_ARRAY_PUSH(ranges, svn_merge_range_t *) = range;
- apr_hash_set(mergeinfo, apr_pstrdup(processed_pool, path),
- APR_HASH_KEY_STRING, ranges);
+ svn_hash_sets(mergeinfo, apr_pstrdup(processed_pool, path), ranges);
}
- SVN_ERR(svn_mergeinfo_merge(processed, mergeinfo,
- apr_hash_pool_get(processed)));
+ SVN_ERR(svn_mergeinfo_merge2(processed, mergeinfo,
+ apr_hash_pool_get(processed), scratch_pool));
return SVN_NO_ERROR;
}
@@ -1769,7 +1878,7 @@ store_search(svn_mergeinfo_t processed,
do_logs()/send_logs()/handle_merge_revisions() recursions, see also the
argument of the same name in send_logs().
- If PROCESSED is a mergeinfo hash that represents the paths and
+ PROCESSED is a mergeinfo hash that represents the paths and
revisions that have already been searched. Allocated like
NESTED_MERGES above.
@@ -1861,6 +1970,7 @@ do_logs(svn_fs_t *fs,
svn_mergeinfo_t added_mergeinfo = NULL;
svn_mergeinfo_t deleted_mergeinfo = NULL;
svn_boolean_t has_children = FALSE;
+ apr_hash_t *changes = NULL;
/* If we're including merged revisions, we need to calculate
the mergeinfo deltas committed in this revision to our
@@ -1881,6 +1991,7 @@ do_logs(svn_fs_t *fs,
}
SVN_ERR(get_combined_mergeinfo_changes(&added_mergeinfo,
&deleted_mergeinfo,
+ &changes,
fs, cur_paths,
current, iterpool,
iterpool));
@@ -1893,7 +2004,7 @@ do_logs(svn_fs_t *fs,
in anyway). */
if (descending_order)
{
- SVN_ERR(send_log(current, fs,
+ SVN_ERR(send_log(current, fs, changes,
log_target_history_as_mergeinfo, nested_merges,
discover_changed_paths,
subtractive_merge, handling_merged_revisions,
@@ -1909,8 +2020,8 @@ do_logs(svn_fs_t *fs,
single hash to be shared across all of the merged
recursions so we can track and squelch duplicates. */
subpool = svn_pool_create(pool);
- nested_merges = apr_hash_make(subpool);
- processed = apr_hash_make(subpool);
+ nested_merges = svn_hash__make(subpool);
+ processed = svn_hash__make(subpool);
}
SVN_ERR(handle_merged_revisions(
@@ -1955,7 +2066,7 @@ do_logs(svn_fs_t *fs,
*cur_rev = current;
if (! rev_mergeinfo)
- rev_mergeinfo = apr_hash_make(pool);
+ rev_mergeinfo = svn_hash__make(pool);
apr_hash_set(rev_mergeinfo, cur_rev, sizeof(*cur_rev),
add_and_del_mergeinfo);
}
@@ -1998,8 +2109,8 @@ do_logs(svn_fs_t *fs,
|| apr_hash_count(deleted_mergeinfo) > 0);
}
- SVN_ERR(send_log(current, fs, log_target_history_as_mergeinfo,
- nested_merges,
+ SVN_ERR(send_log(current, fs, NULL,
+ log_target_history_as_mergeinfo, nested_merges,
discover_changed_paths, subtractive_merge,
handling_merged_revisions, revprops, has_children,
receiver, receiver_baton, authz_read_func,
@@ -2009,7 +2120,7 @@ do_logs(svn_fs_t *fs,
if (!nested_merges)
{
subpool = svn_pool_create(pool);
- nested_merges = apr_hash_make(subpool);
+ nested_merges = svn_hash__make(subpool);
}
SVN_ERR(handle_merged_revisions(current, fs,
@@ -2089,7 +2200,7 @@ get_paths_history_as_mergeinfo(svn_mergeinfo_t *paths_history_mergeinfo,
end_rev = tmp_rev;
}
- *paths_history_mergeinfo = apr_hash_make(result_pool);
+ *paths_history_mergeinfo = svn_hash__make(result_pool);
for (i = 0; i < paths->nelts; i++)
{
@@ -2111,10 +2222,10 @@ get_paths_history_as_mergeinfo(svn_mergeinfo_t *paths_history_mergeinfo,
SVN_ERR(svn_mergeinfo__mergeinfo_from_segments(
&path_history_mergeinfo, loc_seg_baton.history_segments, iterpool));
- SVN_ERR(svn_mergeinfo_merge(*paths_history_mergeinfo,
- svn_mergeinfo_dup(path_history_mergeinfo,
- result_pool),
- result_pool));
+ SVN_ERR(svn_mergeinfo_merge2(*paths_history_mergeinfo,
+ svn_mergeinfo_dup(path_history_mergeinfo,
+ result_pool),
+ result_pool, iterpool));
}
svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
@@ -2188,18 +2299,42 @@ svn_repos_get_logs4(svn_repos_t *repos,
int i;
apr_pool_t *iterpool = svn_pool_create(pool);
+ /* If we are provided an authz callback function, use it to
+ verify that the user has read access to the root path in the
+ first of our revisions.
+
+ ### FIXME: Strictly speaking, we should be checking this
+ ### access in every revision along the line. But currently,
+ ### there are no known authz implementations which concern
+ ### themselves with per-revision access. */
+ if (authz_read_func)
+ {
+ svn_boolean_t readable;
+ svn_fs_root_t *rev_root;
+
+ SVN_ERR(svn_fs_revision_root(&rev_root, fs,
+ descending_order ? end : start, pool));
+ SVN_ERR(authz_read_func(&readable, rev_root, "",
+ authz_read_baton, pool));
+ if (! readable)
+ return svn_error_create(SVN_ERR_AUTHZ_UNREADABLE, NULL, NULL);
+ }
+
send_count = end - start + 1;
if (limit && send_count > limit)
send_count = limit;
for (i = 0; i < send_count; ++i)
{
- svn_revnum_t rev = start + i;
+ svn_revnum_t rev;
svn_pool_clear(iterpool);
if (descending_order)
rev = end - i;
- SVN_ERR(send_log(rev, fs, NULL, NULL, discover_changed_paths, FALSE,
+ else
+ rev = start + i;
+ SVN_ERR(send_log(rev, fs, NULL, NULL, NULL,
+ discover_changed_paths, FALSE,
FALSE, revprops, FALSE, receiver,
receiver_baton, authz_read_func,
authz_read_baton, iterpool));
diff --git a/subversion/libsvn_repos/replay.c b/subversion/libsvn_repos/replay.c
index 5103280..985a673 100644
--- a/subversion/libsvn_repos/replay.c
+++ b/subversion/libsvn_repos/replay.c
@@ -27,14 +27,18 @@
#include "svn_types.h"
#include "svn_delta.h"
+#include "svn_hash.h"
#include "svn_fs.h"
#include "svn_checksum.h"
#include "svn_repos.h"
+#include "svn_sorts.h"
#include "svn_props.h"
#include "svn_pools.h"
#include "svn_path.h"
#include "svn_private_config.h"
#include "private/svn_fspath.h"
+#include "private/svn_repos_private.h"
+#include "private/svn_delta_private.h"
/*** Backstory ***/
@@ -99,6 +103,7 @@
(though not necessarily in the same order in which they
occurred). */
+/* #define USE_EV2_IMPL */
/*** Helper functions. ***/
@@ -136,7 +141,6 @@ struct path_driver_cb_baton
void *authz_read_baton;
const char *base_path; /* relpath */
- int base_path_len;
svn_revnum_t low_water_mark;
/* Stack of active copy operations. */
@@ -214,10 +218,10 @@ add_subdir(svn_fs_root_t *source_root,
changed path (because it was modified after the copy but before the
commit), we remove it from the changed_paths hash so that future
calls to path_driver_cb_func will ignore it. */
- change = apr_hash_get(changed_paths, new_edit_path, APR_HASH_KEY_STRING);
+ change = svn_hash_gets(changed_paths, new_edit_path);
if (change)
{
- apr_hash_set(changed_paths, new_edit_path, APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(changed_paths, new_edit_path, NULL);
/* If it's a delete, skip this entry. */
if (change->change_kind == svn_fs_path_change_delete)
@@ -338,20 +342,6 @@ add_subdir(svn_fs_root_t *source_root,
return SVN_NO_ERROR;
}
-static svn_boolean_t
-is_within_base_path(const char *path, const char *base_path,
- apr_ssize_t base_len)
-{
- if (base_path[0] == '\0')
- return TRUE;
-
- if (strncmp(base_path, path, base_len) == 0
- && (path[base_len] == '/' || path[base_len] == '\0'))
- return TRUE;
-
- return FALSE;
-}
-
/* Given PATH deleted under ROOT, return in READABLE whether the path was
readable prior to the deletion. Consult COPIES (a stack of 'struct
copy_info') and AUTHZ_READ_FUNC. */
@@ -378,7 +368,7 @@ was_readable(svn_boolean_t *readable,
}
if (copies->nelts != 0)
- info = &APR_ARRAY_IDX(copies, copies->nelts - 1, struct copy_info);
+ info = APR_ARRAY_IDX(copies, copies->nelts - 1, struct copy_info *);
/* Are we under a copy? */
if (info && (relpath = svn_relpath_skip_ancestor(info->path, path)))
@@ -415,7 +405,12 @@ was_readable(svn_boolean_t *readable,
revision root, fspath, and revnum of the copyfrom of CHANGE, which
corresponds to PATH under ROOT. If the copyfrom info is valid
(i.e., is not (NULL, SVN_INVALID_REVNUM)), then initialize SRC_READABLE
- too, consulting AUTHZ_READ_FUNC and AUTHZ_READ_BATON if provided. */
+ too, consulting AUTHZ_READ_FUNC and AUTHZ_READ_BATON if provided.
+
+ NOTE: If the copyfrom information in CHANGE is marked as unknown
+ (meaning, its ->copyfrom_rev and ->copyfrom_path cannot be
+ trusted), this function will also update those members of the
+ CHANGE structure to carry accurate copyfrom information. */
static svn_error_t *
fill_copyfrom(svn_fs_root_t **copyfrom_root,
const char **copyfrom_path,
@@ -481,7 +476,6 @@ path_driver_cb_func(void **dir_baton,
svn_fs_root_t *source_root = cb->compare_root;
const char *source_fspath = NULL;
const char *base_path = cb->base_path;
- int base_path_len = cb->base_path_len;
*dir_baton = NULL;
@@ -493,11 +487,11 @@ path_driver_cb_func(void **dir_baton,
while (cb->copies->nelts > 0
&& ! svn_dirent_is_ancestor(APR_ARRAY_IDX(cb->copies,
cb->copies->nelts - 1,
- struct copy_info).path,
+ struct copy_info *)->path,
edit_path))
- cb->copies->nelts--;
+ apr_array_pop(cb->copies);
- change = apr_hash_get(cb->changed_paths, edit_path, APR_HASH_KEY_STRING);
+ change = svn_hash_gets(cb->changed_paths, edit_path);
if (! change)
{
/* This can only happen if the path was removed from cb->changed_paths
@@ -571,8 +565,7 @@ path_driver_cb_func(void **dir_baton,
all. */
if (copyfrom_path
&& ((! src_readable)
- || (! is_within_base_path(copyfrom_path + 1, base_path,
- base_path_len))
+ || (svn_relpath_skip_ancestor(base_path, copyfrom_path + 1) == NULL)
|| (cb->low_water_mark > copyfrom_rev)))
{
copyfrom_path = NULL;
@@ -613,11 +606,13 @@ path_driver_cb_func(void **dir_baton,
(possibly nested) copy operation. */
if (change->node_kind == svn_node_dir)
{
- struct copy_info *info = &APR_ARRAY_PUSH(cb->copies,
- struct copy_info);
+ struct copy_info *info = apr_pcalloc(cb->pool, sizeof(*info));
+
info->path = apr_pstrdup(cb->pool, edit_path);
info->copyfrom_path = apr_pstrdup(cb->pool, copyfrom_path);
info->copyfrom_rev = copyfrom_rev;
+
+ APR_ARRAY_PUSH(cb->copies, struct copy_info *) = info;
}
/* Save the source so that we can use it later, when we
@@ -633,11 +628,13 @@ path_driver_cb_func(void **dir_baton,
past... */
if (change->node_kind == svn_node_dir && cb->copies->nelts > 0)
{
- struct copy_info *info = &APR_ARRAY_PUSH(cb->copies,
- struct copy_info);
+ struct copy_info *info = apr_pcalloc(cb->pool, sizeof(*info));
+
info->path = apr_pstrdup(cb->pool, edit_path);
info->copyfrom_path = NULL;
info->copyfrom_rev = SVN_INVALID_REVNUM;
+
+ APR_ARRAY_PUSH(cb->copies, struct copy_info *) = info;
}
source_root = NULL;
source_fspath = NULL;
@@ -670,13 +667,14 @@ path_driver_cb_func(void **dir_baton,
delta source. */
if (cb->copies->nelts > 0)
{
- struct copy_info *info = &APR_ARRAY_IDX(cb->copies,
- cb->copies->nelts - 1,
- struct copy_info);
+ struct copy_info *info = APR_ARRAY_IDX(cb->copies,
+ cb->copies->nelts - 1,
+ struct copy_info *);
if (info->copyfrom_path)
{
- const char *relpath = svn_relpath__is_child(info->path,
- edit_path, pool);
+ const char *relpath = svn_relpath_skip_ancestor(info->path,
+ edit_path);
+ SVN_ERR_ASSERT(relpath && *relpath);
SVN_ERR(svn_fs_revision_root(&source_root,
svn_fs_root_fs(root),
info->copyfrom_rev, pool));
@@ -797,6 +795,49 @@ path_driver_cb_func(void **dir_baton,
return SVN_NO_ERROR;
}
+#ifdef USE_EV2_IMPL
+static svn_error_t *
+fetch_kind_func(svn_node_kind_t *kind,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *scratch_pool)
+{
+ svn_fs_root_t *root = baton;
+ svn_fs_root_t *prev_root;
+ svn_fs_t *fs = svn_fs_root_fs(root);
+
+ if (!SVN_IS_VALID_REVNUM(base_revision))
+ base_revision = svn_fs_revision_root_revision(root) - 1;
+
+ SVN_ERR(svn_fs_revision_root(&prev_root, fs, base_revision, scratch_pool));
+ SVN_ERR(svn_fs_check_path(kind, prev_root, path, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+fetch_props_func(apr_hash_t **props,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_fs_root_t *root = baton;
+ svn_fs_root_t *prev_root;
+ svn_fs_t *fs = svn_fs_root_fs(root);
+
+ if (!SVN_IS_VALID_REVNUM(base_revision))
+ base_revision = svn_fs_revision_root_revision(root) - 1;
+
+ SVN_ERR(svn_fs_revision_root(&prev_root, fs, base_revision, scratch_pool));
+ SVN_ERR(svn_fs_node_proplist(props, prev_root, path, result_pool));
+
+ return SVN_NO_ERROR;
+}
+#endif
+
@@ -811,12 +852,12 @@ svn_repos_replay2(svn_fs_root_t *root,
void *authz_read_baton,
apr_pool_t *pool)
{
+#ifndef USE_EV2_IMPL
apr_hash_t *fs_changes;
apr_hash_t *changed_paths;
apr_hash_index_t *hi;
apr_array_header_t *paths;
struct path_driver_cb_baton cb_baton;
- size_t base_path_len;
/* Special-case r0, which we know is an empty revision; if we don't
special-case it we might end up trying to compare it to "r-1". */
@@ -834,8 +875,6 @@ svn_repos_replay2(svn_fs_root_t *root,
else if (base_path[0] == '/')
++base_path;
- base_path_len = strlen(base_path);
-
/* Make an array from the keys of our CHANGED_PATHS hash, and copy
the values into a new hash whose keys have no leading slashes. */
paths = apr_array_make(pool, apr_hash_count(fs_changes),
@@ -868,14 +907,14 @@ svn_repos_replay2(svn_fs_root_t *root,
/* If the base_path doesn't match the top directory of this path
we don't want anything to do with it... */
- if (is_within_base_path(path, base_path, base_path_len))
+ if (svn_relpath_skip_ancestor(base_path, path) != NULL)
{
APR_ARRAY_PUSH(paths, const char *) = path;
apr_hash_set(changed_paths, path, keylen, change);
}
/* ...unless this was a change to one of the parent directories of
base_path. */
- else if (is_within_base_path(base_path, path, keylen))
+ else if (svn_relpath_skip_ancestor(path, base_path) != NULL)
{
APR_ARRAY_PUSH(paths, const char *) = path;
apr_hash_set(changed_paths, path, keylen, change);
@@ -896,7 +935,6 @@ svn_repos_replay2(svn_fs_root_t *root,
cb_baton.authz_read_func = authz_read_func;
cb_baton.authz_read_baton = authz_read_baton;
cb_baton.base_path = base_path;
- cb_baton.base_path_len = base_path_len;
cb_baton.low_water_mark = low_water_mark;
cb_baton.compare_root = NULL;
@@ -910,7 +948,7 @@ svn_repos_replay2(svn_fs_root_t *root,
pool));
}
- cb_baton.copies = apr_array_make(pool, 4, sizeof(struct copy_info));
+ cb_baton.copies = apr_array_make(pool, 4, sizeof(struct copy_info *));
cb_baton.pool = pool;
/* Determine the revision to use throughout the edit, and call
@@ -922,7 +960,632 @@ svn_repos_replay2(svn_fs_root_t *root,
}
/* Call the path-based editor driver. */
- return svn_delta_path_driver(editor, edit_baton,
- SVN_INVALID_REVNUM, paths,
- path_driver_cb_func, &cb_baton, pool);
+ return svn_delta_path_driver2(editor, edit_baton,
+ paths, TRUE,
+ path_driver_cb_func, &cb_baton, pool);
+#else
+ svn_editor_t *editorv2;
+ struct svn_delta__extra_baton *exb;
+ svn_delta__unlock_func_t unlock_func;
+ svn_boolean_t send_abs_paths;
+ const char *repos_root = "";
+ void *unlock_baton;
+
+ /* Special-case r0, which we know is an empty revision; if we don't
+ special-case it we might end up trying to compare it to "r-1". */
+ if (svn_fs_is_revision_root(root)
+ && svn_fs_revision_root_revision(root) == 0)
+ {
+ SVN_ERR(editor->set_target_revision(edit_baton, 0, pool));
+ return SVN_NO_ERROR;
+ }
+
+ /* Determine the revision to use throughout the edit, and call
+ EDITOR's set_target_revision() function. */
+ if (svn_fs_is_revision_root(root))
+ {
+ svn_revnum_t revision = svn_fs_revision_root_revision(root);
+ SVN_ERR(editor->set_target_revision(edit_baton, revision, pool));
+ }
+
+ if (! base_path)
+ base_path = "";
+ else if (base_path[0] == '/')
+ ++base_path;
+
+ /* Use the shim to convert our editor to an Ev2 editor, and pass it down
+ the stack. */
+ SVN_ERR(svn_delta__editor_from_delta(&editorv2, &exb,
+ &unlock_func, &unlock_baton,
+ editor, edit_baton,
+ &send_abs_paths,
+ repos_root, "",
+ NULL, NULL,
+ fetch_kind_func, root,
+ fetch_props_func, root,
+ pool, pool));
+
+ /* Tell the shim that we're starting the process. */
+ SVN_ERR(exb->start_edit(exb->baton, svn_fs_revision_root_revision(root)));
+
+ /* ### We're ignoring SEND_DELTAS here. */
+ SVN_ERR(svn_repos__replay_ev2(root, base_path, low_water_mark,
+ editorv2, authz_read_func, authz_read_baton,
+ pool));
+
+ return SVN_NO_ERROR;
+#endif
+}
+
+
+/*****************************************************************
+ * Ev2 Implementation *
+ *****************************************************************/
+
+/* Recursively traverse EDIT_PATH (as it exists under SOURCE_ROOT) emitting
+ the appropriate editor calls to add it and its children without any
+ history. This is meant to be used when either a subset of the tree
+ has been ignored and we need to copy something from that subset to
+ the part of the tree we do care about, or if a subset of the tree is
+ unavailable because of authz and we need to use it as the source of
+ a copy. */
+static svn_error_t *
+add_subdir_ev2(svn_fs_root_t *source_root,
+ svn_fs_root_t *target_root,
+ svn_editor_t *editor,
+ const char *repos_relpath,
+ const char *source_fspath,
+ svn_repos_authz_func_t authz_read_func,
+ void *authz_read_baton,
+ apr_hash_t *changed_paths,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ apr_hash_index_t *hi;
+ apr_hash_t *dirents;
+ apr_hash_t *props = NULL;
+ apr_array_header_t *children = NULL;
+
+ SVN_ERR(svn_fs_node_proplist(&props, target_root, repos_relpath,
+ scratch_pool));
+
+ SVN_ERR(svn_editor_add_directory(editor, repos_relpath, children,
+ props, SVN_INVALID_REVNUM));
+
+ /* We have to get the dirents from the source path, not the target,
+ because we want nested copies from *readable* paths to be handled by
+ path_driver_cb_func, not add_subdir (in order to preserve history). */
+ SVN_ERR(svn_fs_dir_entries(&dirents, source_root, source_fspath,
+ scratch_pool));
+
+ for (hi = apr_hash_first(scratch_pool, dirents); hi; hi = apr_hash_next(hi))
+ {
+ svn_fs_path_change2_t *change;
+ svn_boolean_t readable = TRUE;
+ svn_fs_dirent_t *dent = svn__apr_hash_index_val(hi);
+ const char *copyfrom_path = NULL;
+ svn_revnum_t copyfrom_rev = SVN_INVALID_REVNUM;
+ const char *child_relpath;
+
+ svn_pool_clear(iterpool);
+
+ child_relpath = svn_relpath_join(repos_relpath, dent->name, iterpool);
+
+ /* If a file or subdirectory of the copied directory is listed as a
+ changed path (because it was modified after the copy but before the
+ commit), we remove it from the changed_paths hash so that future
+ calls to path_driver_cb_func will ignore it. */
+ change = svn_hash_gets(changed_paths, child_relpath);
+ if (change)
+ {
+ svn_hash_sets(changed_paths, child_relpath, NULL);
+
+ /* If it's a delete, skip this entry. */
+ if (change->change_kind == svn_fs_path_change_delete)
+ continue;
+
+ /* If it's a replacement, check for copyfrom info (if we
+ don't have it already. */
+ if (change->change_kind == svn_fs_path_change_replace)
+ {
+ if (! change->copyfrom_known)
+ {
+ SVN_ERR(svn_fs_copied_from(&change->copyfrom_rev,
+ &change->copyfrom_path,
+ target_root, child_relpath,
+ result_pool));
+ change->copyfrom_known = TRUE;
+ }
+ copyfrom_path = change->copyfrom_path;
+ copyfrom_rev = change->copyfrom_rev;
+ }
+ }
+
+ if (authz_read_func)
+ SVN_ERR(authz_read_func(&readable, target_root, child_relpath,
+ authz_read_baton, iterpool));
+
+ if (! readable)
+ continue;
+
+ if (dent->kind == svn_node_dir)
+ {
+ svn_fs_root_t *new_source_root;
+ const char *new_source_fspath;
+
+ if (copyfrom_path)
+ {
+ svn_fs_t *fs = svn_fs_root_fs(source_root);
+ SVN_ERR(svn_fs_revision_root(&new_source_root, fs,
+ copyfrom_rev, result_pool));
+ new_source_fspath = copyfrom_path;
+ }
+ else
+ {
+ new_source_root = source_root;
+ new_source_fspath = svn_fspath__join(source_fspath, dent->name,
+ iterpool);
+ }
+
+ /* ### authz considerations?
+ *
+ * I think not; when path_driver_cb_func() calls add_subdir(), it
+ * passes SOURCE_ROOT and SOURCE_FSPATH that are unreadable.
+ */
+ if (change && change->change_kind == svn_fs_path_change_replace
+ && copyfrom_path == NULL)
+ {
+ SVN_ERR(svn_editor_add_directory(editor, child_relpath,
+ children, props,
+ SVN_INVALID_REVNUM));
+ }
+ else
+ {
+ SVN_ERR(add_subdir_ev2(new_source_root, target_root,
+ editor, child_relpath,
+ new_source_fspath,
+ authz_read_func, authz_read_baton,
+ changed_paths, result_pool, iterpool));
+ }
+ }
+ else if (dent->kind == svn_node_file)
+ {
+ svn_checksum_t *checksum;
+ svn_stream_t *contents;
+
+ SVN_ERR(svn_fs_node_proplist(&props, target_root,
+ child_relpath, iterpool));
+
+ SVN_ERR(svn_fs_file_contents(&contents, target_root,
+ child_relpath, iterpool));
+
+ SVN_ERR(svn_fs_file_checksum(&checksum, svn_checksum_sha1,
+ target_root,
+ child_relpath, TRUE, iterpool));
+
+ SVN_ERR(svn_editor_add_file(editor, child_relpath, checksum,
+ contents, props, SVN_INVALID_REVNUM));
+ }
+ else
+ SVN_ERR_MALFUNCTION();
+ }
+
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+replay_node(svn_fs_root_t *root,
+ const char *repos_relpath,
+ svn_editor_t *editor,
+ svn_revnum_t low_water_mark,
+ const char *base_repos_relpath,
+ apr_array_header_t *copies,
+ apr_hash_t *changed_paths,
+ svn_repos_authz_func_t authz_read_func,
+ void *authz_read_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_fs_path_change2_t *change;
+ svn_boolean_t do_add = FALSE;
+ svn_boolean_t do_delete = FALSE;
+ svn_revnum_t copyfrom_rev;
+ const char *copyfrom_path;
+ svn_revnum_t replaces_rev;
+
+ /* First, flush the copies stack so it only contains ancestors of path. */
+ while (copies->nelts > 0
+ && (svn_relpath_skip_ancestor(APR_ARRAY_IDX(copies,
+ copies->nelts - 1,
+ struct copy_info *)->path,
+ repos_relpath) == NULL) )
+ apr_array_pop(copies);
+
+ change = svn_hash_gets(changed_paths, repos_relpath);
+ if (! change)
+ {
+ /* This can only happen if the path was removed from changed_paths
+ by an earlier call to add_subdir, which means the path was already
+ handled and we should simply ignore it. */
+ return SVN_NO_ERROR;
+ }
+ switch (change->change_kind)
+ {
+ case svn_fs_path_change_add:
+ do_add = TRUE;
+ break;
+
+ case svn_fs_path_change_delete:
+ do_delete = TRUE;
+ break;
+
+ case svn_fs_path_change_replace:
+ do_add = TRUE;
+ do_delete = TRUE;
+ break;
+
+ case svn_fs_path_change_modify:
+ default:
+ /* do nothing */
+ break;
+ }
+
+ /* Handle any deletions. */
+ if (do_delete && ! do_add)
+ {
+ svn_boolean_t readable;
+
+ /* Issue #4121: delete under under a copy, of a path that was unreadable
+ at its pre-copy location. */
+ SVN_ERR(was_readable(&readable, root, repos_relpath, copies,
+ authz_read_func, authz_read_baton,
+ scratch_pool, scratch_pool));
+ if (readable)
+ SVN_ERR(svn_editor_delete(editor, repos_relpath, SVN_INVALID_REVNUM));
+
+ return SVN_NO_ERROR;
+ }
+
+ /* Handle replacements. */
+ if (do_delete && do_add)
+ replaces_rev = svn_fs_revision_root_revision(root);
+ else
+ replaces_rev = SVN_INVALID_REVNUM;
+
+ /* Fetch the node kind if it makes sense to do so. */
+ if (! do_delete || do_add)
+ {
+ if (change->node_kind == svn_node_unknown)
+ SVN_ERR(svn_fs_check_path(&(change->node_kind), root, repos_relpath,
+ scratch_pool));
+ if ((change->node_kind != svn_node_dir) &&
+ (change->node_kind != svn_node_file))
+ return svn_error_createf(SVN_ERR_FS_NOT_FOUND, NULL,
+ _("Filesystem path '%s' is neither a file "
+ "nor a directory"), repos_relpath);
+ }
+
+ /* Handle any adds/opens. */
+ if (do_add)
+ {
+ svn_boolean_t src_readable;
+ svn_fs_root_t *copyfrom_root;
+
+ /* Was this node copied? */
+ SVN_ERR(fill_copyfrom(&copyfrom_root, &copyfrom_path, &copyfrom_rev,
+ &src_readable, root, change,
+ authz_read_func, authz_read_baton,
+ repos_relpath, scratch_pool, scratch_pool));
+
+ /* If we have a copyfrom path, and we can't read it or we're just
+ ignoring it, or the copyfrom rev is prior to the low water mark
+ then we just null them out and do a raw add with no history at
+ all. */
+ if (copyfrom_path
+ && ((! src_readable)
+ || (svn_relpath_skip_ancestor(base_repos_relpath,
+ copyfrom_path + 1) == NULL)
+ || (low_water_mark > copyfrom_rev)))
+ {
+ copyfrom_path = NULL;
+ copyfrom_rev = SVN_INVALID_REVNUM;
+ }
+
+ /* Do the right thing based on the path KIND. */
+ if (change->node_kind == svn_node_dir)
+ {
+ /* If this is a copy, but we can't represent it as such,
+ then we just do a recursive add of the source path
+ contents. */
+ if (change->copyfrom_path && ! copyfrom_path)
+ {
+ SVN_ERR(add_subdir_ev2(copyfrom_root, root, editor,
+ repos_relpath, change->copyfrom_path,
+ authz_read_func, authz_read_baton,
+ changed_paths, result_pool,
+ scratch_pool));
+ }
+ else
+ {
+ if (copyfrom_path)
+ {
+ if (copyfrom_path[0] == '/')
+ ++copyfrom_path;
+ SVN_ERR(svn_editor_copy(editor, copyfrom_path, copyfrom_rev,
+ repos_relpath, replaces_rev));
+ }
+ else
+ {
+ apr_array_header_t *children;
+ apr_hash_t *props;
+ apr_hash_t *dirents;
+
+ SVN_ERR(svn_fs_dir_entries(&dirents, root, repos_relpath,
+ scratch_pool));
+ SVN_ERR(svn_hash_keys(&children, dirents, scratch_pool));
+
+ SVN_ERR(svn_fs_node_proplist(&props, root, repos_relpath,
+ scratch_pool));
+
+ SVN_ERR(svn_editor_add_directory(editor, repos_relpath,
+ children, props,
+ replaces_rev));
+ }
+ }
+ }
+ else
+ {
+ if (copyfrom_path)
+ {
+ if (copyfrom_path[0] == '/')
+ ++copyfrom_path;
+ SVN_ERR(svn_editor_copy(editor, copyfrom_path, copyfrom_rev,
+ repos_relpath, replaces_rev));
+ }
+ else
+ {
+ apr_hash_t *props;
+ svn_checksum_t *checksum;
+ svn_stream_t *contents;
+
+ SVN_ERR(svn_fs_node_proplist(&props, root, repos_relpath,
+ scratch_pool));
+
+ SVN_ERR(svn_fs_file_contents(&contents, root, repos_relpath,
+ scratch_pool));
+
+ SVN_ERR(svn_fs_file_checksum(&checksum, svn_checksum_sha1, root,
+ repos_relpath, TRUE, scratch_pool));
+
+ SVN_ERR(svn_editor_add_file(editor, repos_relpath, checksum,
+ contents, props, replaces_rev));
+ }
+ }
+
+ /* If we represent this as a copy... */
+ if (copyfrom_path)
+ {
+ /* If it is a directory, make sure descendants get the correct
+ delta source by remembering that we are operating inside a
+ (possibly nested) copy operation. */
+ if (change->node_kind == svn_node_dir)
+ {
+ struct copy_info *info = apr_pcalloc(result_pool, sizeof(*info));
+
+ info->path = apr_pstrdup(result_pool, repos_relpath);
+ info->copyfrom_path = apr_pstrdup(result_pool, copyfrom_path);
+ info->copyfrom_rev = copyfrom_rev;
+
+ APR_ARRAY_PUSH(copies, struct copy_info *) = info;
+ }
+ }
+ else
+ /* Else, we are an add without history... */
+ {
+ /* If an ancestor is added with history, we need to forget about
+ that here, go on with life and repeat all the mistakes of our
+ past... */
+ if (change->node_kind == svn_node_dir && copies->nelts > 0)
+ {
+ struct copy_info *info = apr_pcalloc(result_pool, sizeof(*info));
+
+ info->path = apr_pstrdup(result_pool, repos_relpath);
+ info->copyfrom_path = NULL;
+ info->copyfrom_rev = SVN_INVALID_REVNUM;
+
+ APR_ARRAY_PUSH(copies, struct copy_info *) = info;
+ }
+ }
+ }
+ else if (! do_delete)
+ {
+ /* If we are inside an add with history, we need to adjust the
+ delta source. */
+ if (copies->nelts > 0)
+ {
+ struct copy_info *info = APR_ARRAY_IDX(copies,
+ copies->nelts - 1,
+ struct copy_info *);
+ if (info->copyfrom_path)
+ {
+ const char *relpath = svn_relpath_skip_ancestor(info->path,
+ repos_relpath);
+ SVN_ERR_ASSERT(relpath && *relpath);
+ repos_relpath = svn_relpath_join(info->copyfrom_path,
+ relpath, scratch_pool);
+ }
+ }
+ }
+
+ if (! do_delete && !do_add)
+ {
+ apr_hash_t *props = NULL;
+
+ /* Is this a copy that was downgraded to a raw add? (If so,
+ we'll need to transmit properties and file contents and such
+ for it regardless of what the CHANGE structure's text_mod
+ and prop_mod flags say.) */
+ svn_boolean_t downgraded_copy = (change->copyfrom_known
+ && change->copyfrom_path
+ && (! copyfrom_path));
+
+ /* Handle property modifications. */
+ if (change->prop_mod || downgraded_copy)
+ {
+ SVN_ERR(svn_fs_node_proplist(&props, root, repos_relpath,
+ scratch_pool));
+ }
+
+ /* Handle textual modifications. */
+ if (change->node_kind == svn_node_file
+ && (change->text_mod || change->prop_mod || downgraded_copy))
+ {
+ svn_checksum_t *checksum = NULL;
+ svn_stream_t *contents = NULL;
+
+ if (change->text_mod)
+ {
+ SVN_ERR(svn_fs_file_checksum(&checksum, svn_checksum_sha1,
+ root, repos_relpath, TRUE,
+ scratch_pool));
+
+ SVN_ERR(svn_fs_file_contents(&contents, root, repos_relpath,
+ scratch_pool));
+ }
+
+ SVN_ERR(svn_editor_alter_file(editor, repos_relpath,
+ SVN_INVALID_REVNUM, props, checksum,
+ contents));
+ }
+
+ if (change->node_kind == svn_node_dir
+ && (change->prop_mod || downgraded_copy))
+ {
+ apr_array_header_t *children = NULL;
+
+ SVN_ERR(svn_editor_alter_directory(editor, repos_relpath,
+ SVN_INVALID_REVNUM, children,
+ props));
+ }
+ }
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_repos__replay_ev2(svn_fs_root_t *root,
+ const char *base_repos_relpath,
+ svn_revnum_t low_water_mark,
+ svn_editor_t *editor,
+ svn_repos_authz_func_t authz_read_func,
+ void *authz_read_baton,
+ apr_pool_t *scratch_pool)
+{
+ apr_hash_t *fs_changes;
+ apr_hash_t *changed_paths;
+ apr_hash_index_t *hi;
+ apr_array_header_t *paths;
+ apr_array_header_t *copies;
+ apr_pool_t *iterpool;
+ svn_error_t *err = SVN_NO_ERROR;
+ int i;
+
+ SVN_ERR_ASSERT(!svn_dirent_is_absolute(base_repos_relpath));
+
+ /* Special-case r0, which we know is an empty revision; if we don't
+ special-case it we might end up trying to compare it to "r-1". */
+ if (svn_fs_is_revision_root(root)
+ && svn_fs_revision_root_revision(root) == 0)
+ {
+ return SVN_NO_ERROR;
+ }
+
+ /* Fetch the paths changed under ROOT. */
+ SVN_ERR(svn_fs_paths_changed2(&fs_changes, root, scratch_pool));
+
+ /* Make an array from the keys of our CHANGED_PATHS hash, and copy
+ the values into a new hash whose keys have no leading slashes. */
+ paths = apr_array_make(scratch_pool, apr_hash_count(fs_changes),
+ sizeof(const char *));
+ changed_paths = apr_hash_make(scratch_pool);
+ for (hi = apr_hash_first(scratch_pool, fs_changes); hi;
+ hi = apr_hash_next(hi))
+ {
+ const void *key;
+ void *val;
+ apr_ssize_t keylen;
+ const char *path;
+ svn_fs_path_change2_t *change;
+ svn_boolean_t allowed = TRUE;
+
+ apr_hash_this(hi, &key, &keylen, &val);
+ path = key;
+ change = val;
+
+ if (authz_read_func)
+ SVN_ERR(authz_read_func(&allowed, root, path, authz_read_baton,
+ scratch_pool));
+
+ if (allowed)
+ {
+ if (path[0] == '/')
+ {
+ path++;
+ keylen--;
+ }
+
+ /* If the base_path doesn't match the top directory of this path
+ we don't want anything to do with it... */
+ if (svn_relpath_skip_ancestor(base_repos_relpath, path) != NULL)
+ {
+ APR_ARRAY_PUSH(paths, const char *) = path;
+ apr_hash_set(changed_paths, path, keylen, change);
+ }
+ /* ...unless this was a change to one of the parent directories of
+ base_path. */
+ else if (svn_relpath_skip_ancestor(path, base_repos_relpath) != NULL)
+ {
+ APR_ARRAY_PUSH(paths, const char *) = path;
+ apr_hash_set(changed_paths, path, keylen, change);
+ }
+ }
+ }
+
+ /* If we were not given a low water mark, assume that everything is there,
+ all the way back to revision 0. */
+ if (! SVN_IS_VALID_REVNUM(low_water_mark))
+ low_water_mark = 0;
+
+ copies = apr_array_make(scratch_pool, 4, sizeof(struct copy_info *));
+
+ /* Sort the paths. Although not strictly required by the API, this has
+ the pleasant side effect of maintaining a consistent ordering of
+ dumpfile contents. */
+ qsort(paths->elts, paths->nelts, paths->elt_size, svn_sort_compare_paths);
+
+ /* Now actually handle the various paths. */
+ iterpool = svn_pool_create(scratch_pool);
+ for (i = 0; i < paths->nelts; i++)
+ {
+ const char *repos_relpath = APR_ARRAY_IDX(paths, i, const char *);
+
+ svn_pool_clear(iterpool);
+ err = replay_node(root, repos_relpath, editor, low_water_mark,
+ base_repos_relpath, copies, changed_paths,
+ authz_read_func, authz_read_baton,
+ scratch_pool, iterpool);
+ if (err)
+ break;
+ }
+
+ if (err)
+ return svn_error_compose_create(err, svn_editor_abort(editor));
+ else
+ SVN_ERR(svn_editor_complete(editor));
+
+ svn_pool_destroy(iterpool);
+ return SVN_NO_ERROR;
}
diff --git a/subversion/libsvn_repos/reporter.c b/subversion/libsvn_repos/reporter.c
index bcee14e..de46858 100644
--- a/subversion/libsvn_repos/reporter.c
+++ b/subversion/libsvn_repos/reporter.c
@@ -22,6 +22,7 @@
*/
#include "svn_dirent_uri.h"
+#include "svn_hash.h"
#include "svn_path.h"
#include "svn_types.h"
#include "svn_error.h"
@@ -32,17 +33,20 @@
#include "svn_props.h"
#include "repos.h"
#include "svn_private_config.h"
+
#include "private/svn_dep_compat.h"
#include "private/svn_fspath.h"
+#include "private/svn_subr_private.h"
+#include "private/svn_string_private.h"
#define NUM_CACHED_SOURCE_ROOTS 4
-/* Theory of operation: we write report operations out to a temporary
- file as we receive them. When the report is finished, we read the
+/* Theory of operation: we write report operations out to a spill-buffer
+ as we receive them. When the report is finished, we read the
operations back out again, using them to guide the progression of
the delta between the source and target revs.
- Temporary file format: we use a simple ad-hoc format to store the
+ Spill-buffer content format: we use a simple ad-hoc format to store the
report operations. Each report operation is the concatention of
the following ("+/-" indicates the single character '+' or '-';
<length> and <revnum> are written out as decimal strings):
@@ -100,13 +104,15 @@ typedef struct revision_info_t
driven by the client as it describes its working copy revisions. */
typedef struct report_baton_t
{
- /* Parameters remembered from svn_repos_begin_report2 */
+ /* Parameters remembered from svn_repos_begin_report3 */
svn_repos_t *repos;
const char *fs_base; /* fspath corresponding to wc anchor */
const char *s_operand; /* anchor-relative wc target (may be empty) */
svn_revnum_t t_rev; /* Revnum which the edit will bring the wc to */
const char *t_path; /* FS path the edit will bring the wc to */
svn_boolean_t text_deltas; /* Whether to report text deltas */
+ apr_size_t zero_copy_limit; /* Max item size that will be sent using
+ the zero-copy code path. */
/* If the client requested a specific depth, record it here; if the
client did not, then this is svn_depth_unknown, and the depth of
@@ -122,8 +128,8 @@ typedef struct report_baton_t
svn_repos_authz_func_t authz_read_func;
void *authz_read_baton;
- /* The temporary file in which we are stashing the report. */
- apr_file_t *tempfile;
+ /* The spill-buffer holding the report. */
+ svn_spillbuf_reader_t *reader;
/* For the actual editor drive, we'll need a lookahead path info
entry, a cache of FS roots, and a pool to store them. */
@@ -133,8 +139,10 @@ typedef struct report_baton_t
/* Cache for revision properties. This is used to eliminate redundant
revprop fetching. */
- apr_hash_t* revision_infos;
+ apr_hash_t *revision_infos;
+ /* This will not change. So, fetch it once and reuse it. */
+ svn_string_t *repos_uuid;
apr_pool_t *pool;
} report_baton_t;
@@ -158,14 +166,14 @@ static svn_error_t *delta_dirs(report_baton_t *b, svn_revnum_t s_rev,
/* --- READING PREVIOUSLY STORED REPORT INFORMATION --- */
static svn_error_t *
-read_number(apr_uint64_t *num, apr_file_t *temp, apr_pool_t *pool)
+read_number(apr_uint64_t *num, svn_spillbuf_reader_t *reader, apr_pool_t *pool)
{
char c;
*num = 0;
while (1)
{
- SVN_ERR(svn_io_file_getc(&c, temp, pool));
+ SVN_ERR(svn_spillbuf__reader_getc(&c, reader, pool));
if (c == ':')
break;
*num = *num * 10 + (c - '0');
@@ -174,13 +182,14 @@ read_number(apr_uint64_t *num, apr_file_t *temp, apr_pool_t *pool)
}
static svn_error_t *
-read_string(const char **str, apr_file_t *temp, apr_pool_t *pool)
+read_string(const char **str, svn_spillbuf_reader_t *reader, apr_pool_t *pool)
{
apr_uint64_t len;
apr_size_t size;
+ apr_size_t amt;
char *buf;
- SVN_ERR(read_number(&len, temp, pool));
+ SVN_ERR(read_number(&len, reader, pool));
/* Len can never be less than zero. But could len be so large that
len + 1 wraps around and we end up passing 0 to apr_palloc(),
@@ -201,22 +210,26 @@ read_string(const char **str, apr_file_t *temp, apr_pool_t *pool)
size = (apr_size_t)len;
buf = apr_palloc(pool, size+1);
- SVN_ERR(svn_io_file_read_full2(temp, buf, size, NULL, NULL, pool));
+ if (size > 0)
+ {
+ SVN_ERR(svn_spillbuf__reader_read(&amt, reader, buf, size, pool));
+ SVN_ERR_ASSERT(amt == size);
+ }
buf[len] = 0;
*str = buf;
return SVN_NO_ERROR;
}
static svn_error_t *
-read_rev(svn_revnum_t *rev, apr_file_t *temp, apr_pool_t *pool)
+read_rev(svn_revnum_t *rev, svn_spillbuf_reader_t *reader, apr_pool_t *pool)
{
char c;
apr_uint64_t num;
- SVN_ERR(svn_io_file_getc(&c, temp, pool));
+ SVN_ERR(svn_spillbuf__reader_getc(&c, reader, pool));
if (c == '+')
{
- SVN_ERR(read_number(&num, temp, pool));
+ SVN_ERR(read_number(&num, reader, pool));
*rev = (svn_revnum_t) num;
}
else
@@ -225,15 +238,15 @@ read_rev(svn_revnum_t *rev, apr_file_t *temp, apr_pool_t *pool)
}
/* Read a single character to set *DEPTH (having already read '+')
- from TEMP. PATH is the path to which the depth applies, and is
+ from READER. PATH is the path to which the depth applies, and is
used for error reporting only. */
static svn_error_t *
-read_depth(svn_depth_t *depth, apr_file_t *temp, const char *path,
+read_depth(svn_depth_t *depth, svn_spillbuf_reader_t *reader, const char *path,
apr_pool_t *pool)
{
char c;
- SVN_ERR(svn_io_file_getc(&c, temp, pool));
+ SVN_ERR(svn_spillbuf__reader_getc(&c, reader, pool));
switch (c)
{
case 'X':
@@ -260,14 +273,16 @@ read_depth(svn_depth_t *depth, apr_file_t *temp, const char *path,
return SVN_NO_ERROR;
}
-/* Read a report operation *PI out of TEMP. Set *PI to NULL if we
+/* Read a report operation *PI out of READER. Set *PI to NULL if we
have reached the end of the report. */
static svn_error_t *
-read_path_info(path_info_t **pi, apr_file_t *temp, apr_pool_t *pool)
+read_path_info(path_info_t **pi,
+ svn_spillbuf_reader_t *reader,
+ apr_pool_t *pool)
{
char c;
- SVN_ERR(svn_io_file_getc(&c, temp, pool));
+ SVN_ERR(svn_spillbuf__reader_getc(&c, reader, pool));
if (c == '-')
{
*pi = NULL;
@@ -275,23 +290,23 @@ read_path_info(path_info_t **pi, apr_file_t *temp, apr_pool_t *pool)
}
*pi = apr_palloc(pool, sizeof(**pi));
- SVN_ERR(read_string(&(*pi)->path, temp, pool));
- SVN_ERR(svn_io_file_getc(&c, temp, pool));
+ SVN_ERR(read_string(&(*pi)->path, reader, pool));
+ SVN_ERR(svn_spillbuf__reader_getc(&c, reader, pool));
if (c == '+')
- SVN_ERR(read_string(&(*pi)->link_path, temp, pool));
+ SVN_ERR(read_string(&(*pi)->link_path, reader, pool));
else
(*pi)->link_path = NULL;
- SVN_ERR(read_rev(&(*pi)->rev, temp, pool));
- SVN_ERR(svn_io_file_getc(&c, temp, pool));
+ SVN_ERR(read_rev(&(*pi)->rev, reader, pool));
+ SVN_ERR(svn_spillbuf__reader_getc(&c, reader, pool));
if (c == '+')
- SVN_ERR(read_depth(&((*pi)->depth), temp, (*pi)->path, pool));
+ SVN_ERR(read_depth(&((*pi)->depth), reader, (*pi)->path, pool));
else
(*pi)->depth = svn_depth_infinity;
- SVN_ERR(svn_io_file_getc(&c, temp, pool));
+ SVN_ERR(svn_spillbuf__reader_getc(&c, reader, pool));
(*pi)->start_empty = (c == '+');
- SVN_ERR(svn_io_file_getc(&c, temp, pool));
+ SVN_ERR(svn_spillbuf__reader_getc(&c, reader, pool));
if (c == '+')
- SVN_ERR(read_string(&(*pi)->lock_token, temp, pool));
+ SVN_ERR(read_string(&(*pi)->lock_token, reader, pool));
else
(*pi)->lock_token = NULL;
(*pi)->pool = pool;
@@ -306,7 +321,7 @@ relevant(path_info_t *pi, const char *prefix, apr_size_t plen)
(!*prefix || pi->path[plen] == '/'));
}
-/* Fetch the next pathinfo from B->tempfile for a descendant of
+/* Fetch the next pathinfo from B->reader for a descendant of
PREFIX. If the next pathinfo is for an immediate child of PREFIX,
set *ENTRY to the path component of the report information and
*INFO to the path information for that entry. If the next pathinfo
@@ -353,7 +368,7 @@ fetch_path_info(report_baton_t *b, const char **entry, path_info_t **info,
*entry = relpath;
*info = b->lookahead;
subpool = svn_pool_create(b->pool);
- SVN_ERR(read_path_info(&b->lookahead, b->tempfile, subpool));
+ SVN_ERR(read_path_info(&b->lookahead, b->reader, subpool));
}
}
return SVN_NO_ERROR;
@@ -371,7 +386,7 @@ skip_path_info(report_baton_t *b, const char *prefix)
{
svn_pool_destroy(b->lookahead->pool);
subpool = svn_pool_create(b->pool);
- SVN_ERR(read_path_info(&b->lookahead, b->tempfile, subpool));
+ SVN_ERR(read_path_info(&b->lookahead, b->reader, subpool));
}
return SVN_NO_ERROR;
}
@@ -433,7 +448,8 @@ static svn_error_t *
change_dir_prop(report_baton_t *b, void *dir_baton, const char *name,
const svn_string_t *value, apr_pool_t *pool)
{
- return b->editor->change_dir_prop(dir_baton, name, value, pool);
+ return svn_error_trace(b->editor->change_dir_prop(dir_baton, name, value,
+ pool));
}
/* Call the file property-setting function of B->editor to set the
@@ -442,7 +458,8 @@ static svn_error_t *
change_file_prop(report_baton_t *b, void *file_baton, const char *name,
const svn_string_t *value, apr_pool_t *pool)
{
- return b->editor->change_file_prop(file_baton, name, value, pool);
+ return svn_error_trace(b->editor->change_file_prop(file_baton, name, value,
+ pool));
}
/* For the report B, return the relevant revprop data of revision REV in
@@ -470,12 +487,10 @@ get_revision_info(report_baton_t *b,
scratch_pool));
/* Extract the committed-date. */
- cdate = apr_hash_get(r_props, SVN_PROP_REVISION_DATE,
- APR_HASH_KEY_STRING);
+ cdate = svn_hash_gets(r_props, SVN_PROP_REVISION_DATE);
/* Extract the last-author. */
- author = apr_hash_get(r_props, SVN_PROP_REVISION_AUTHOR,
- APR_HASH_KEY_STRING);
+ author = svn_hash_gets(r_props, SVN_PROP_REVISION_AUTHOR);
/* Create a result object */
info = apr_palloc(b->pool, sizeof(*info));
@@ -504,25 +519,29 @@ delta_proplists(report_baton_t *b, svn_revnum_t s_rev, const char *s_path,
void *object, apr_pool_t *pool)
{
svn_fs_root_t *s_root;
- apr_hash_t *s_props, *t_props;
+ apr_hash_t *s_props = NULL, *t_props;
apr_array_header_t *prop_diffs;
int i;
svn_revnum_t crev;
- const char *uuid;
- svn_string_t *cr_str;
- revision_info_t* revision_info;
+ revision_info_t *revision_info;
svn_boolean_t changed;
const svn_prop_t *pc;
svn_lock_t *lock;
+ apr_hash_index_t *hi;
/* Fetch the created-rev and send entry props. */
SVN_ERR(svn_fs_node_created_rev(&crev, b->t_root, t_path, pool));
if (SVN_IS_VALID_REVNUM(crev))
{
+ /* convert committed-rev to string */
+ char buf[SVN_INT64_BUFFER_SIZE];
+ svn_string_t cr_str;
+ cr_str.data = buf;
+ cr_str.len = svn__i64toa(buf, crev);
+
/* Transmit the committed-rev. */
- cr_str = svn_string_createf(pool, "%ld", crev);
SVN_ERR(change_fn(b, object,
- SVN_PROP_ENTRY_COMMITTED_REV, cr_str, pool));
+ SVN_PROP_ENTRY_COMMITTED_REV, &cr_str, pool));
SVN_ERR(get_revision_info(b, crev, &revision_info, pool));
@@ -537,9 +556,8 @@ delta_proplists(report_baton_t *b, svn_revnum_t s_rev, const char *s_path,
revision_info->author, pool));
/* Transmit the UUID. */
- SVN_ERR(svn_fs_get_uuid(b->repos->fs, &uuid, pool));
SVN_ERR(change_fn(b, object, SVN_PROP_ENTRY_UUID,
- svn_string_create(uuid, pool), pool));
+ b->repos_uuid, pool));
}
/* Update lock properties. */
@@ -566,23 +584,83 @@ delta_proplists(report_baton_t *b, svn_revnum_t s_rev, const char *s_path,
/* If so, go ahead and get the source path's properties. */
SVN_ERR(svn_fs_node_proplist(&s_props, s_root, s_path, pool));
}
- else
- s_props = apr_hash_make(pool);
/* Get the target path's properties */
SVN_ERR(svn_fs_node_proplist(&t_props, b->t_root, t_path, pool));
- /* Now transmit the differences. */
- SVN_ERR(svn_prop_diffs(&prop_diffs, t_props, s_props, pool));
- for (i = 0; i < prop_diffs->nelts; i++)
+ if (s_props && apr_hash_count(s_props))
+ {
+ /* Now transmit the differences. */
+ SVN_ERR(svn_prop_diffs(&prop_diffs, t_props, s_props, pool));
+ for (i = 0; i < prop_diffs->nelts; i++)
+ {
+ pc = &APR_ARRAY_IDX(prop_diffs, i, svn_prop_t);
+ SVN_ERR(change_fn(b, object, pc->name, pc->value, pool));
+ }
+ }
+ else if (apr_hash_count(t_props))
+ {
+ /* So source, i.e. all new. Transmit all target props. */
+ for (hi = apr_hash_first(pool, t_props); hi; hi = apr_hash_next(hi))
+ {
+ const void *key;
+ void *val;
+
+ apr_hash_this(hi, &key, NULL, &val);
+ SVN_ERR(change_fn(b, object, key, val, pool));
+ }
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Baton type to be passed into send_zero_copy_delta.
+ */
+typedef struct zero_copy_baton_t
+{
+ /* don't process data larger than this limit */
+ apr_size_t zero_copy_limit;
+
+ /* window handler and baton to send the data to */
+ svn_txdelta_window_handler_t dhandler;
+ void *dbaton;
+
+ /* return value: will be set to TRUE, if the data was processed. */
+ svn_boolean_t zero_copy_succeeded;
+} zero_copy_baton_t;
+
+/* Implement svn_fs_process_contents_func_t. If LEN is smaller than the
+ * limit given in *BATON, send the CONTENTS as an delta windows to the
+ * handler given in BATON and set the ZERO_COPY_SUCCEEDED flag in that
+ * BATON. Otherwise, reset it to FALSE.
+ * Use POOL for temporary allocations.
+ */
+static svn_error_t *
+send_zero_copy_delta(const unsigned char *contents,
+ apr_size_t len,
+ void *baton,
+ apr_pool_t *pool)
+{
+ zero_copy_baton_t *zero_copy_baton = baton;
+
+ /* if the item is too large, the caller must revert to traditional
+ streaming code. */
+ if (len > zero_copy_baton->zero_copy_limit)
{
- pc = &APR_ARRAY_IDX(prop_diffs, i, svn_prop_t);
- SVN_ERR(change_fn(b, object, pc->name, pc->value, pool));
+ zero_copy_baton->zero_copy_succeeded = FALSE;
+ return SVN_NO_ERROR;
}
+ SVN_ERR(svn_txdelta_send_contents(contents, len,
+ zero_copy_baton->dhandler,
+ zero_copy_baton->dbaton, pool));
+
+ /* all fine now */
+ zero_copy_baton->zero_copy_succeeded = TRUE;
return SVN_NO_ERROR;
}
+
/* Make the appropriate edits on FILE_BATON to change its contents and
properties from those in S_REV/S_PATH to those in B->t_root/T_PATH,
possibly using LOCK_TOKEN to determine if the client's lock on the file
@@ -608,18 +686,13 @@ delta_files(report_baton_t *b, void *file_baton, svn_revnum_t s_rev,
{
SVN_ERR(get_source_root(b, &s_root, s_rev));
- /* Is this delta calculation worth our time? If we are ignoring
- ancestry, then our editor implementor isn't concerned by the
- theoretical differences between "has contents which have not
- changed with respect to" and "has the same actual contents
- as". We'll do everything we can to avoid transmitting even
- an empty text-delta in that case. */
- if (b->ignore_ancestry)
- SVN_ERR(svn_repos__compare_files(&changed, b->t_root, t_path,
- s_root, s_path, pool));
- else
- SVN_ERR(svn_fs_contents_changed(&changed, b->t_root, t_path, s_root,
- s_path, pool));
+ /* We're not interested in the theoretical difference between "has
+ contents which have not changed with respect to" and "has the same
+ actual contents as" when sending text-deltas. If we know the
+ delta is an empty one, we avoiding sending it in either case. */
+ SVN_ERR(svn_repos__compare_files(&changed, b->t_root, t_path,
+ s_root, s_path, pool));
+
if (!changed)
return SVN_NO_ERROR;
@@ -631,14 +704,42 @@ delta_files(report_baton_t *b, void *file_baton, svn_revnum_t s_rev,
/* Send the delta stream if desired, or just a NULL window if not. */
SVN_ERR(b->editor->apply_textdelta(file_baton, s_hex_digest, pool,
&dhandler, &dbaton));
- if (b->text_deltas)
+
+ if (dhandler != svn_delta_noop_window_handler)
{
- SVN_ERR(svn_fs_get_file_delta_stream(&dstream, s_root, s_path,
- b->t_root, t_path, pool));
- return svn_txdelta_send_txstream(dstream, dhandler, dbaton, pool);
+ if (b->text_deltas)
+ {
+ /* if we send deltas against empty streams, we may use our
+ zero-copy code. */
+ if (b->zero_copy_limit > 0 && s_path == NULL)
+ {
+ zero_copy_baton_t baton;
+ svn_boolean_t called = FALSE;
+
+ baton.zero_copy_limit = b->zero_copy_limit;
+ baton.dhandler = dhandler;
+ baton.dbaton = dbaton;
+ baton.zero_copy_succeeded = FALSE;
+ SVN_ERR(svn_fs_try_process_file_contents(&called,
+ b->t_root, t_path,
+ send_zero_copy_delta,
+ &baton, pool));
+
+ /* data has been available and small enough,
+ i.e. been processed? */
+ if (called && baton.zero_copy_succeeded)
+ return SVN_NO_ERROR;
+ }
+
+ SVN_ERR(svn_fs_get_file_delta_stream(&dstream, s_root, s_path,
+ b->t_root, t_path, pool));
+ SVN_ERR(svn_txdelta_send_txstream(dstream, dhandler, dbaton, pool));
+ }
+ else
+ SVN_ERR(dhandler(NULL, dbaton));
}
- else
- return dhandler(NULL, dbaton);
+
+ return SVN_NO_ERROR;
}
/* Determine if the user is authorized to view B->t_root/PATH. */
@@ -647,8 +748,8 @@ check_auth(report_baton_t *b, svn_boolean_t *allowed, const char *path,
apr_pool_t *pool)
{
if (b->authz_read_func)
- return b->authz_read_func(allowed, b->t_root, path,
- b->authz_read_baton, pool);
+ return svn_error_trace(b->authz_read_func(allowed, b->t_root, path,
+ b->authz_read_baton, pool));
*allowed = TRUE;
return SVN_NO_ERROR;
}
@@ -774,9 +875,9 @@ add_file_smartly(report_baton_t *b,
}
}
- return b->editor->add_file(path, parent_baton,
- *copyfrom_path, *copyfrom_rev,
- pool, new_file_baton);
+ return svn_error_trace(b->editor->add_file(path, parent_baton,
+ *copyfrom_path, *copyfrom_rev,
+ pool, new_file_baton));
}
@@ -889,6 +990,21 @@ update_entry(report_baton_t *b, svn_revnum_t s_rev, const char *s_path,
SVN_ERR(svn_repos_deleted_rev(svn_fs_root_fs(b->t_root), t_path,
s_rev, b->t_rev, &deleted_rev,
pool));
+
+ if (!SVN_IS_VALID_REVNUM(deleted_rev))
+ {
+ /* Two possibilities: either the thing doesn't exist in S_REV; or
+ it wasn't deleted between S_REV and B->T_REV. In the first case,
+ I think we should leave DELETED_REV as SVN_INVALID_REVNUM, but
+ in the second, it should be set to B->T_REV-1 for the call to
+ delete_entry() below. */
+ svn_node_kind_t kind;
+
+ SVN_ERR(svn_fs_check_path(&kind, b->t_root, t_path, pool));
+ if (kind != svn_node_none)
+ deleted_rev = b->t_rev - 1;
+ }
+
SVN_ERR(b->editor->delete_entry(e_path, deleted_rev, dir_baton,
pool));
s_path = NULL;
@@ -896,7 +1012,7 @@ update_entry(report_baton_t *b, svn_revnum_t s_rev, const char *s_path,
/* If there's no target, we have nothing more to do. */
if (!t_entry)
- return skip_path_info(b, e_path);
+ return svn_error_trace(skip_path_info(b, e_path));
/* Check if the user is authorized to find out about the target. */
SVN_ERR(check_auth(b, &allowed, t_path, pool));
@@ -906,7 +1022,7 @@ update_entry(report_baton_t *b, svn_revnum_t s_rev, const char *s_path,
SVN_ERR(b->editor->absent_directory(e_path, dir_baton, pool));
else
SVN_ERR(b->editor->absent_file(e_path, dir_baton, pool));
- return skip_path_info(b, e_path);
+ return svn_error_trace(skip_path_info(b, e_path));
}
if (t_entry->kind == svn_node_dir)
@@ -922,7 +1038,7 @@ update_entry(report_baton_t *b, svn_revnum_t s_rev, const char *s_path,
SVN_ERR(delta_dirs(b, s_rev, s_path, t_path, new_baton, e_path,
info ? info->start_empty : FALSE,
wc_depth, requested_depth, pool));
- return b->editor->close_directory(new_baton, pool);
+ return svn_error_trace(b->editor->close_directory(new_baton, pool));
}
else
{
@@ -954,7 +1070,8 @@ update_entry(report_baton_t *b, svn_revnum_t s_rev, const char *s_path,
SVN_ERR(svn_fs_file_checksum(&checksum, svn_checksum_md5, b->t_root,
t_path, TRUE, pool));
hex_digest = svn_checksum_to_cstring(checksum, pool);
- return b->editor->close_file(new_baton, hex_digest, pool);
+ return svn_error_trace(b->editor->close_file(new_baton, hex_digest,
+ pool));
}
}
@@ -1026,7 +1143,8 @@ delta_dirs(report_baton_t *b, svn_revnum_t s_rev, const char *s_path,
svn_fs_root_t *s_root;
apr_hash_t *s_entries = NULL, *t_entries;
apr_hash_index_t *hi;
- apr_pool_t *subpool;
+ apr_pool_t *subpool = svn_pool_create(pool);
+ apr_pool_t *iterpool;
const char *name, *s_fullpath, *t_fullpath, *e_fullpath;
path_info_t *info;
@@ -1035,7 +1153,8 @@ delta_dirs(report_baton_t *b, svn_revnum_t s_rev, const char *s_path,
When we support directory locks, we must pass the lock token here. */
SVN_ERR(delta_proplists(b, s_rev, start_empty ? NULL : s_path, t_path,
- NULL, change_dir_prop, dir_baton, pool));
+ NULL, change_dir_prop, dir_baton, subpool));
+ svn_pool_clear(subpool);
if (requested_depth > svn_depth_empty
|| requested_depth == svn_depth_unknown)
@@ -1044,19 +1163,19 @@ delta_dirs(report_baton_t *b, svn_revnum_t s_rev, const char *s_path,
if (s_path && !start_empty)
{
SVN_ERR(get_source_root(b, &s_root, s_rev));
- SVN_ERR(svn_fs_dir_entries(&s_entries, s_root, s_path, pool));
+ SVN_ERR(svn_fs_dir_entries(&s_entries, s_root, s_path, subpool));
}
- SVN_ERR(svn_fs_dir_entries(&t_entries, b->t_root, t_path, pool));
+ SVN_ERR(svn_fs_dir_entries(&t_entries, b->t_root, t_path, subpool));
/* Iterate over the report information for this directory. */
- subpool = svn_pool_create(pool);
+ iterpool = svn_pool_create(pool);
while (1)
{
const svn_fs_dirent_t *s_entry, *t_entry;
- svn_pool_clear(subpool);
- SVN_ERR(fetch_path_info(b, &name, &info, e_path, subpool));
+ svn_pool_clear(iterpool);
+ SVN_ERR(fetch_path_info(b, &name, &info, e_path, iterpool));
if (!name)
break;
@@ -1072,16 +1191,16 @@ delta_dirs(report_baton_t *b, svn_revnum_t s_rev, const char *s_path,
item is a delete, remove the entry from the source hash,
but don't update the entry yet. */
if (s_entries)
- apr_hash_set(s_entries, name, APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(s_entries, name, NULL);
continue;
}
- e_fullpath = svn_relpath_join(e_path, name, subpool);
- t_fullpath = svn_fspath__join(t_path, name, subpool);
- t_entry = apr_hash_get(t_entries, name, APR_HASH_KEY_STRING);
- s_fullpath = s_path ? svn_fspath__join(s_path, name, subpool) : NULL;
+ e_fullpath = svn_relpath_join(e_path, name, iterpool);
+ t_fullpath = svn_fspath__join(t_path, name, iterpool);
+ t_entry = svn_hash_gets(t_entries, name);
+ s_fullpath = s_path ? svn_fspath__join(s_path, name, iterpool) : NULL;
s_entry = s_entries ?
- apr_hash_get(s_entries, name, APR_HASH_KEY_STRING) : NULL;
+ svn_hash_gets(s_entries, name) : NULL;
/* The only special cases here are
@@ -1099,15 +1218,15 @@ delta_dirs(report_baton_t *b, svn_revnum_t s_rev, const char *s_path,
t_entry, dir_baton, e_fullpath, info,
info ? info->depth
: DEPTH_BELOW_HERE(wc_depth),
- DEPTH_BELOW_HERE(requested_depth), subpool));
+ DEPTH_BELOW_HERE(requested_depth), iterpool));
/* Don't revisit this name in the target or source entries. */
- apr_hash_set(t_entries, name, APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(t_entries, name, NULL);
if (s_entries
/* Keep the entry for later process if it is reported as
excluded and got deleted in repos. */
&& (! info || info->depth != svn_depth_exclude || t_entry))
- apr_hash_set(s_entries, name, APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(s_entries, name, NULL);
/* pathinfo entries live in their own subpools due to lookahead,
so we need to clear each one out as we finish with it. */
@@ -1119,17 +1238,16 @@ delta_dirs(report_baton_t *b, svn_revnum_t s_rev, const char *s_path,
target, for graceful handling of case-only renames. */
if (s_entries)
{
- for (hi = apr_hash_first(pool, s_entries);
+ for (hi = apr_hash_first(subpool, s_entries);
hi;
hi = apr_hash_next(hi))
{
const svn_fs_dirent_t *s_entry;
- svn_pool_clear(subpool);
+ svn_pool_clear(iterpool);
s_entry = svn__apr_hash_index_val(hi);
- if (apr_hash_get(t_entries, s_entry->name,
- APR_HASH_KEY_STRING) == NULL)
+ if (svn_hash_gets(t_entries, s_entry->name) == NULL)
{
svn_revnum_t deleted_rev;
@@ -1143,27 +1261,29 @@ delta_dirs(report_baton_t *b, svn_revnum_t s_rev, const char *s_path,
continue;
/* There is no corresponding target entry, so delete. */
- e_fullpath = svn_relpath_join(e_path, s_entry->name, subpool);
+ e_fullpath = svn_relpath_join(e_path, s_entry->name, iterpool);
SVN_ERR(svn_repos_deleted_rev(svn_fs_root_fs(b->t_root),
svn_fspath__join(t_path,
s_entry->name,
- subpool),
+ iterpool),
s_rev, b->t_rev,
- &deleted_rev, subpool));
+ &deleted_rev, iterpool));
SVN_ERR(b->editor->delete_entry(e_fullpath,
deleted_rev,
- dir_baton, subpool));
+ dir_baton, iterpool));
}
}
}
/* Loop over the dirents in the target. */
- for (hi = apr_hash_first(pool, t_entries); hi; hi = apr_hash_next(hi))
+ for (hi = apr_hash_first(subpool, t_entries);
+ hi;
+ hi = apr_hash_next(hi))
{
const svn_fs_dirent_t *s_entry, *t_entry;
- svn_pool_clear(subpool);
+ svn_pool_clear(iterpool);
t_entry = svn__apr_hash_index_val(hi);
if (is_depth_upgrade(wc_depth, requested_depth, t_entry->kind))
@@ -1188,27 +1308,30 @@ delta_dirs(report_baton_t *b, svn_revnum_t s_rev, const char *s_path,
/* Look for an entry with the same name
in the source dirents. */
s_entry = s_entries ?
- apr_hash_get(s_entries, t_entry->name, APR_HASH_KEY_STRING)
+ svn_hash_gets(s_entries, t_entry->name)
: NULL;
s_fullpath = s_entry ?
- svn_fspath__join(s_path, t_entry->name, subpool) : NULL;
+ svn_fspath__join(s_path, t_entry->name, iterpool) : NULL;
}
/* Compose the report, editor, and target paths for this entry. */
- e_fullpath = svn_relpath_join(e_path, t_entry->name, subpool);
- t_fullpath = svn_fspath__join(t_path, t_entry->name, subpool);
+ e_fullpath = svn_relpath_join(e_path, t_entry->name, iterpool);
+ t_fullpath = svn_fspath__join(t_path, t_entry->name, iterpool);
SVN_ERR(update_entry(b, s_rev, s_fullpath, s_entry, t_fullpath,
t_entry, dir_baton, e_fullpath, NULL,
DEPTH_BELOW_HERE(wc_depth),
DEPTH_BELOW_HERE(requested_depth),
- subpool));
+ iterpool));
}
/* Destroy iteration subpool. */
- svn_pool_destroy(subpool);
+ svn_pool_destroy(iterpool);
}
+
+ svn_pool_destroy(subpool);
+
return SVN_NO_ERROR;
}
@@ -1270,14 +1393,13 @@ drive(report_baton_t *b, svn_revnum_t s_rev, path_info_t *info,
t_entry, root_baton, b->s_operand, info,
info->depth, b->requested_depth, pool));
- return b->editor->close_directory(root_baton, pool);
+ return svn_error_trace(b->editor->close_directory(root_baton, pool));
}
/* Initialize the baton fields for editor-driving, and drive the editor. */
static svn_error_t *
finish_report(report_baton_t *b, apr_pool_t *pool)
{
- apr_off_t offset;
path_info_t *info;
apr_pool_t *subpool;
svn_revnum_t s_rev;
@@ -1286,14 +1408,12 @@ finish_report(report_baton_t *b, apr_pool_t *pool)
/* Save our pool to manage the lookahead and fs_root cache with. */
b->pool = pool;
- /* Add an end marker and rewind the temporary file. */
- SVN_ERR(svn_io_file_write_full(b->tempfile, "-", 1, NULL, pool));
- offset = 0;
- SVN_ERR(svn_io_file_seek(b->tempfile, APR_SET, &offset, pool));
+ /* Add the end marker. */
+ SVN_ERR(svn_spillbuf__reader_write(b->reader, "-", 1, pool));
/* Read the first pathinfo from the report and verify that it is a top-level
set_path entry. */
- SVN_ERR(read_path_info(&info, b->tempfile, pool));
+ SVN_ERR(read_path_info(&info, b->reader, pool));
if (!info || strcmp(info->path, b->s_operand) != 0
|| info->link_path || !SVN_IS_VALID_REVNUM(info->rev))
return svn_error_create(SVN_ERR_REPOS_BAD_REVISION_REPORT, NULL,
@@ -1302,7 +1422,7 @@ finish_report(report_baton_t *b, apr_pool_t *pool)
/* Initialize the lookahead pathinfo. */
subpool = svn_pool_create(pool);
- SVN_ERR(read_path_info(&b->lookahead, b->tempfile, subpool));
+ SVN_ERR(read_path_info(&b->lookahead, b->reader, subpool));
if (b->lookahead && strcmp(b->lookahead->path, b->s_operand) == 0)
{
@@ -1320,7 +1440,7 @@ finish_report(report_baton_t *b, apr_pool_t *pool)
b->lookahead->depth = info->depth;
}
info = b->lookahead;
- SVN_ERR(read_path_info(&b->lookahead, b->tempfile, subpool));
+ SVN_ERR(read_path_info(&b->lookahead, b->reader, subpool));
}
/* Open the target root and initialize the source root cache. */
@@ -1329,7 +1449,8 @@ finish_report(report_baton_t *b, apr_pool_t *pool)
b->s_roots[i] = NULL;
{
- svn_error_t *err = drive(b, s_rev, info, pool);
+ svn_error_t *err = svn_error_trace(drive(b, s_rev, info, pool));
+
if (err == SVN_NO_ERROR)
return svn_error_trace(b->editor->close_edit(b->edit_baton, pool));
@@ -1342,7 +1463,7 @@ finish_report(report_baton_t *b, apr_pool_t *pool)
/* --- COLLECTING THE REPORT INFORMATION --- */
-/* Record a report operation into the temporary file. Return an error
+/* Record a report operation into the spill buffer. Return an error
if DEPTH is svn_depth_unknown. */
static svn_error_t *
write_path_info(report_baton_t *b, const char *path, const char *lpath,
@@ -1381,7 +1502,8 @@ write_path_info(report_baton_t *b, const char *path, const char *lpath,
rep = apr_psprintf(pool, "+%" APR_SIZE_T_FMT ":%s%s%s%s%c%s",
strlen(path), path, lrep, rrep, drep,
start_empty ? '+' : '-', ltrep);
- return svn_io_file_write_full(b->tempfile, rep, strlen(rep), NULL, pool);
+ return svn_error_trace(
+ svn_spillbuf__reader_write(b->reader, rep, strlen(rep), pool));
}
svn_error_t *
@@ -1389,8 +1511,9 @@ svn_repos_set_path3(void *baton, const char *path, svn_revnum_t rev,
svn_depth_t depth, svn_boolean_t start_empty,
const char *lock_token, apr_pool_t *pool)
{
- return write_path_info(baton, path, NULL, rev, depth, start_empty,
- lock_token, pool);
+ return svn_error_trace(
+ write_path_info(baton, path, NULL, rev, depth, start_empty,
+ lock_token, pool));
}
svn_error_t *
@@ -1403,8 +1526,9 @@ svn_repos_link_path3(void *baton, const char *path, const char *link_path,
return svn_error_create(SVN_ERR_REPOS_BAD_ARGS, NULL,
_("Depth 'exclude' not supported for link"));
- return write_path_info(baton, path, link_path, rev, depth,
- start_empty, lock_token, pool);
+ return svn_error_trace(
+ write_path_info(baton, path, link_path, rev, depth,
+ start_empty, lock_token, pool));
}
svn_error_t *
@@ -1412,35 +1536,30 @@ svn_repos_delete_path(void *baton, const char *path, apr_pool_t *pool)
{
/* We pass svn_depth_infinity because deletion of a path always
deletes everything underneath it. */
- return write_path_info(baton, path, NULL, SVN_INVALID_REVNUM,
- svn_depth_infinity, FALSE, NULL, pool);
+ return svn_error_trace(
+ write_path_info(baton, path, NULL, SVN_INVALID_REVNUM,
+ svn_depth_infinity, FALSE, NULL, pool));
}
svn_error_t *
svn_repos_finish_report(void *baton, apr_pool_t *pool)
{
report_baton_t *b = baton;
- svn_error_t *finish_err, *close_err;
- finish_err = finish_report(b, pool);
- close_err = svn_io_file_close(b->tempfile, pool);
-
- return svn_error_trace(svn_error_compose_create(finish_err, close_err));
+ return svn_error_trace(finish_report(b, pool));
}
svn_error_t *
svn_repos_abort_report(void *baton, apr_pool_t *pool)
{
- report_baton_t *b = baton;
-
- return svn_error_trace(svn_io_file_close(b->tempfile, pool));
+ return SVN_NO_ERROR;
}
/* --- BEGINNING THE REPORT --- */
svn_error_t *
-svn_repos_begin_report2(void **report_baton,
+svn_repos_begin_report3(void **report_baton,
svn_revnum_t revnum,
svn_repos_t *repos,
const char *fs_base,
@@ -1454,14 +1573,18 @@ svn_repos_begin_report2(void **report_baton,
void *edit_baton,
svn_repos_authz_func_t authz_read_func,
void *authz_read_baton,
+ apr_size_t zero_copy_limit,
apr_pool_t *pool)
{
report_baton_t *b;
+ const char *uuid;
if (depth == svn_depth_exclude)
return svn_error_create(SVN_ERR_REPOS_BAD_ARGS, NULL,
_("Request depth 'exclude' not supported"));
+ SVN_ERR(svn_fs_get_uuid(repos->fs, &uuid, pool));
+
/* Build a reporter baton. Copy strings in case the caller doesn't
keep track of them. */
b = apr_palloc(pool, sizeof(*b));
@@ -1472,6 +1595,7 @@ svn_repos_begin_report2(void **report_baton,
b->t_path = switch_path ? svn_fspath__canonicalize(switch_path, pool)
: svn_fspath__join(b->fs_base, s_operand, pool);
b->text_deltas = text_deltas;
+ b->zero_copy_limit = zero_copy_limit;
b->requested_depth = depth;
b->ignore_ancestry = ignore_ancestry;
b->send_copyfrom_args = send_copyfrom_args;
@@ -1482,10 +1606,10 @@ svn_repos_begin_report2(void **report_baton,
b->authz_read_baton = authz_read_baton;
b->revision_infos = apr_hash_make(pool);
b->pool = pool;
-
- SVN_ERR(svn_io_open_unique_file3(&b->tempfile, NULL, NULL,
- svn_io_file_del_on_pool_cleanup,
- pool, pool));
+ b->reader = svn_spillbuf__reader_create(1000 /* blocksize */,
+ 1000000 /* maxsize */,
+ pool);
+ b->repos_uuid = svn_string_create(uuid, pool);
/* Hand reporter back to client. */
*report_baton = b;
diff --git a/subversion/libsvn_repos/repos.c b/subversion/libsvn_repos/repos.c
index a22ca23..9f10c06 100644
--- a/subversion/libsvn_repos/repos.c
+++ b/subversion/libsvn_repos/repos.c
@@ -34,8 +34,10 @@
#include "svn_repos.h"
#include "svn_hash.h"
#include "svn_version.h"
+#include "svn_config.h"
#include "private/svn_repos_private.h"
+#include "private/svn_subr_private.h"
#include "svn_private_config.h" /* for SVN_TEMPLATE_ROOT_DIR */
#include "repos.h"
@@ -165,7 +167,6 @@ svn_repos_post_revprop_change_hook(svn_repos_t *repos, apr_pool_t *pool)
pool);
}
-
static svn_error_t *
create_repos_dir(const char *path, apr_pool_t *pool)
{
@@ -304,16 +305,17 @@ create_hooks(svn_repos_t *repos, apr_pool_t *pool)
"" NL
"# START-COMMIT HOOK" NL
"#" NL
-"# The start-commit hook is invoked before a Subversion txn is created" NL
-"# in the process of doing a commit. Subversion runs this hook" NL
-"# by invoking a program (script, executable, binary, etc.) named" NL
-"# '"SCRIPT_NAME"' (for which this file is a template)" NL
-"# with the following ordered arguments:" NL
+"# The start-commit hook is invoked immediately after a Subversion txn is" NL
+"# created and populated with initial revprops in the process of doing a" NL
+"# commit. Subversion runs this hook by invoking a program (script, " NL
+"# executable, binary, etc.) named '"SCRIPT_NAME"' (for which this file" NL
+"# is a template) with the following ordered arguments:" NL
"#" NL
"# [1] REPOS-PATH (the path to this repository)" NL
"# [2] USER (the authenticated user attempting to commit)" NL
"# [3] CAPABILITIES (a colon-separated list of capabilities reported" NL
"# by the client; see note below)" NL
+"# [4] TXN-NAME (the name of the commit txn just created)" NL
"#" NL
"# Note: The CAPABILITIES parameter is new in Subversion 1.5, and 1.5" NL
"# clients will typically report at least the \"" \
@@ -322,6 +324,11 @@ create_hooks(svn_repos_t *repos, apr_pool_t *pool)
"# e.g.: \"" SVN_RA_CAPABILITY_MERGEINFO ":some-other-capability\" " \
"(the order is undefined)." NL
"#" NL
+"# Note: The TXN-NAME parameter is new in Subversion 1.8. Prior to version" NL
+"# 1.8, the start-commit hook was invoked before the commit txn was even" NL
+"# created, so the ability to inspect the commit txn and its metadata from" NL
+"# within the start-commit hook was not possible." NL
+"# " NL
"# The list is self-reported by the client. Therefore, you should not" NL
"# make security assumptions based on the capabilities list, nor should" NL
"# you assume that clients reliably report every capability they have." NL
@@ -364,6 +371,8 @@ PREWRITTEN_HOOKS_TEXT
SVN_ERR_W(svn_io_file_create(this_path, contents, pool),
_("Creating start-commit hook"));
+
+ SVN_ERR(svn_io_set_file_executable(this_path, TRUE, FALSE, pool));
} /* end start-commit hook */
/* Pre-commit hook. */
@@ -454,6 +463,8 @@ PREWRITTEN_HOOKS_TEXT
SVN_ERR_W(svn_io_file_create(this_path, contents, pool),
_("Creating pre-commit hook"));
+
+ SVN_ERR(svn_io_set_file_executable(this_path, TRUE, FALSE, pool));
} /* end pre-commit hook */
@@ -530,6 +541,8 @@ PREWRITTEN_HOOKS_TEXT
SVN_ERR_W(svn_io_file_create(this_path, contents, pool),
_("Creating pre-revprop-change hook"));
+
+ SVN_ERR(svn_io_set_file_executable(this_path, TRUE, FALSE, pool));
} /* end pre-revprop-change hook */
@@ -620,6 +633,8 @@ PREWRITTEN_HOOKS_TEXT
SVN_ERR_W(svn_io_file_create(this_path, contents, pool),
"Creating pre-lock hook");
+
+ SVN_ERR(svn_io_set_file_executable(this_path, TRUE, FALSE, pool));
} /* end pre-lock hook */
@@ -702,6 +717,8 @@ PREWRITTEN_HOOKS_TEXT
SVN_ERR_W(svn_io_file_create(this_path, contents, pool),
"Creating pre-unlock hook");
+
+ SVN_ERR(svn_io_set_file_executable(this_path, TRUE, FALSE, pool));
} /* end pre-unlock hook */
@@ -726,6 +743,7 @@ PREWRITTEN_HOOKS_TEXT
"#" NL
"# [1] REPOS-PATH (the path to this repository)" NL
"# [2] REV (the number of the revision just committed)" NL
+"# [3] TXN-NAME (the name of the transaction that has become REV)" NL
"#" NL
"# The default working directory for the invocation is undefined, so" NL
"# the program should set one explicitly if it cares." NL
@@ -755,6 +773,7 @@ PREWRITTEN_HOOKS_TEXT
"" NL
"REPOS=\"$1\"" NL
"REV=\"$2\"" NL
+"TXN_NAME=\"$3\"" NL
NL
"mailer.py commit \"$REPOS\" \"$REV\" /path/to/mailer.conf" NL;
@@ -762,6 +781,8 @@ PREWRITTEN_HOOKS_TEXT
SVN_ERR_W(svn_io_file_create(this_path, contents, pool),
_("Creating post-commit hook"));
+
+ SVN_ERR(svn_io_set_file_executable(this_path, TRUE, FALSE, pool));
} /* end post-commit hook */
@@ -823,6 +844,8 @@ PREWRITTEN_HOOKS_TEXT
SVN_ERR_W(svn_io_file_create(this_path, contents, pool),
"Creating post-lock hook");
+
+ SVN_ERR(svn_io_set_file_executable(this_path, TRUE, FALSE, pool));
} /* end post-lock hook */
@@ -882,6 +905,8 @@ PREWRITTEN_HOOKS_TEXT
SVN_ERR_W(svn_io_file_create(this_path, contents, pool),
"Creating post-unlock hook");
+
+ SVN_ERR(svn_io_set_file_executable(this_path, TRUE, FALSE, pool));
} /* end post-unlock hook */
@@ -948,6 +973,8 @@ PREWRITTEN_HOOKS_TEXT
SVN_ERR_W(svn_io_file_create(this_path, contents, pool),
_("Creating post-revprop-change hook"));
+
+ SVN_ERR(svn_io_set_file_executable(this_path, TRUE, FALSE, pool));
} /* end post-revprop-change hook */
return SVN_NO_ERROR;
@@ -991,11 +1018,19 @@ create_conf(svn_repos_t *repos, apr_pool_t *pool)
"# password-db = passwd" NL
"### The authz-db option controls the location of the authorization" NL
"### rules for path-based access control. Unless you specify a path" NL
-"### starting with a /, the file's location is relative to the the" NL
-"### directory containing this file. If you don't specify an" NL
-"### authz-db, no path-based access control is done." NL
+"### starting with a /, the file's location is relative to the" NL
+"### directory containing this file. The specified path may be a" NL
+"### repository relative URL (^/) or an absolute file:// URL to a text" NL
+"### file in a Subversion repository. If you don't specify an authz-db," NL
+"### no path-based access control is done." NL
"### Uncomment the line below to use the default authorization file." NL
"# authz-db = " SVN_REPOS__CONF_AUTHZ NL
+"### The groups-db option controls the location of the groups file." NL
+"### Unless you specify a path starting with a /, the file's location is" NL
+"### relative to the directory containing this file. The specified path" NL
+"### may be a repository relative URL (^/) or an absolute file:// URL to a" NL
+"### text file in a Subversion repository." NL
+"# groups-db = " SVN_REPOS__CONF_GROUPS NL
"### This option specifies the authentication realm of the repository." NL
"### If two repositories have the same authentication realm, they should" NL
"### have the same password database, and vice versa. The default realm" NL
@@ -1008,6 +1043,13 @@ create_conf(svn_repos_t *repos, apr_pool_t *pool)
"### \"none\" (to compare usernames as-is without case conversion, which" NL
"### is the default behavior)." NL
"# force-username-case = none" NL
+"### The hooks-env options specifies a path to the hook script environment " NL
+"### configuration file. This option overrides the per-repository default" NL
+"### and can be used to configure the hook script environment for multiple " NL
+"### repositories in a single file, if an absolute path is specified." NL
+"### Unless you specify an absolute path, the file's location is relative" NL
+"### to the directory containing this file." NL
+"# hooks-env = " SVN_REPOS__CONF_HOOKS_ENV NL
"" NL
"[sasl]" NL
"### This option specifies whether you want to use the Cyrus SASL" NL
@@ -1089,6 +1131,55 @@ create_conf(svn_repos_t *repos, apr_pool_t *pool)
_("Creating authz file"));
}
+ {
+ static const char * const hooks_env_contents =
+"### This file is an example hook script environment configuration file." NL
+"### Hook scripts run in an empty environment by default." NL
+"### As shown below each section defines environment variables for a" NL
+"### particular hook script. The [default] section defines environment" NL
+"### variables for all hook scripts, unless overridden by a hook-specific" NL
+"### section." NL
+"" NL
+"### This example configures a UTF-8 locale for all hook scripts, so that " NL
+"### special characters, such as umlauts, may be printed to stderr." NL
+"### If UTF-8 is used with a mod_dav_svn server, the SVNUseUTF8 option must" NL
+"### also be set to 'yes' in httpd.conf." NL
+"### With svnserve, the LANG environment variable of the svnserve process" NL
+"### must be set to the same value as given here." NL
+"[default]" NL
+"LANG = en_US.UTF-8" NL
+"" NL
+"### This sets the PATH environment variable for the pre-commit hook." NL
+"[pre-commit]" NL
+"PATH = /usr/local/bin:/usr/bin:/usr/sbin" NL;
+
+ SVN_ERR_W(svn_io_file_create(svn_dirent_join(repos->conf_path,
+ SVN_REPOS__CONF_HOOKS_ENV \
+ SVN_REPOS__HOOK_DESC_EXT,
+ pool),
+ hooks_env_contents, pool),
+ _("Creating hooks-env file"));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_repos_hooks_setenv(svn_repos_t *repos,
+ const char *hooks_env_path,
+ apr_pool_t *scratch_pool)
+{
+ if (hooks_env_path == NULL)
+ repos->hooks_env_path = svn_dirent_join(repos->conf_path,
+ SVN_REPOS__CONF_HOOKS_ENV,
+ repos->pool);
+ else if (!svn_dirent_is_absolute(hooks_env_path))
+ repos->hooks_env_path = svn_dirent_join(repos->conf_path,
+ hooks_env_path,
+ repos->pool);
+ else
+ repos->hooks_env_path = apr_pstrdup(repos->pool, hooks_env_path);
+
return SVN_NO_ERROR;
}
@@ -1107,7 +1198,9 @@ create_svn_repos_t(const char *path, apr_pool_t *pool)
repos->conf_path = svn_dirent_join(path, SVN_REPOS__CONF_DIR, pool);
repos->hook_path = svn_dirent_join(path, SVN_REPOS__HOOK_DIR, pool);
repos->lock_path = svn_dirent_join(path, SVN_REPOS__LOCK_DIR, pool);
+ repos->hooks_env_path = NULL;
repos->repository_capabilities = apr_hash_make(pool);
+ repos->pool = pool;
return repos;
}
@@ -1125,10 +1218,8 @@ create_repos_structure(svn_repos_t *repos,
/* Create the DAV sandbox directory if pre-1.4 or pre-1.5-compatible. */
if (fs_config
- && (apr_hash_get(fs_config, SVN_FS_CONFIG_PRE_1_4_COMPATIBLE,
- APR_HASH_KEY_STRING)
- || apr_hash_get(fs_config, SVN_FS_CONFIG_PRE_1_5_COMPATIBLE,
- APR_HASH_KEY_STRING)))
+ && (svn_hash_gets(fs_config, SVN_FS_CONFIG_PRE_1_4_COMPATIBLE)
+ || svn_hash_gets(fs_config, SVN_FS_CONFIG_PRE_1_5_COMPATIBLE)))
{
const char *dav_path = svn_dirent_join(repos->path,
SVN_REPOS__DAV_DIR, pool);
@@ -1148,9 +1239,9 @@ create_repos_structure(svn_repos_t *repos,
/* Write the top-level README file. */
{
const char * const readme_header =
- "This is a Subversion repository; use the 'svnadmin' tool to examine" NL
- "it. Do not add, delete, or modify files here unless you know how" NL
- "to avoid corrupting the repository." NL
+ "This is a Subversion repository; use the 'svnadmin' and 'svnlook' " NL
+ "tools to examine it. Do not add, delete, or modify files here " NL
+ "unless you know how to avoid corrupting the repository." NL
"" NL;
const char * const readme_bdb_insert =
"The directory \"" SVN_REPOS__DB_DIR "\" contains a Berkeley DB environment." NL
@@ -1379,6 +1470,23 @@ get_repos(svn_repos_t **repos_p,
if (open_fs)
SVN_ERR(svn_fs_open(&repos->fs, repos->db_path, fs_config, pool));
+#ifdef SVN_DEBUG_CRASH_AT_REPOS_OPEN
+ /* If $PATH/config/debug-abort exists, crash the server here.
+ This debugging feature can be used to test client recovery
+ when the server crashes.
+
+ See: Issue #4274 */
+ {
+ svn_node_kind_t kind;
+ svn_error_t *err = svn_io_check_path(
+ svn_dirent_join(repos->conf_path, "debug-abort", pool),
+ &kind, pool);
+ svn_error_clear(err);
+ if (!err && kind == svn_node_file)
+ SVN_ERR_MALFUNCTION_NO_RETURN();
+ }
+#endif /* SVN_DEBUG_CRASH_AT_REPOS_OPEN */
+
*repos_p = repos;
return SVN_NO_ERROR;
}
@@ -1505,8 +1613,7 @@ svn_repos_has_capability(svn_repos_t *repos,
const char *capability,
apr_pool_t *pool)
{
- const char *val = apr_hash_get(repos->repository_capabilities,
- capability, APR_HASH_KEY_STRING);
+ const char *val = svn_hash_gets(repos->repository_capabilities, capability);
if (val == capability_yes)
{
@@ -1527,16 +1634,16 @@ svn_repos_has_capability(svn_repos_t *repos,
SVN_ERR(svn_fs_revision_root(&root, repos->fs, 0, pool));
APR_ARRAY_PUSH(paths, const char *) = "";
- err = svn_fs_get_mergeinfo(&ignored, root, paths, FALSE, FALSE, pool);
+ err = svn_fs_get_mergeinfo2(&ignored, root, paths, FALSE, FALSE,
+ TRUE, pool, pool);
if (err)
{
if (err->apr_err == SVN_ERR_UNSUPPORTED_FEATURE)
{
svn_error_clear(err);
- apr_hash_set(repos->repository_capabilities,
- SVN_REPOS_CAPABILITY_MERGEINFO,
- APR_HASH_KEY_STRING, capability_no);
+ svn_hash_sets(repos->repository_capabilities,
+ SVN_REPOS_CAPABILITY_MERGEINFO, capability_no);
*has = FALSE;
}
else if (err->apr_err == SVN_ERR_FS_NOT_FOUND)
@@ -1545,9 +1652,8 @@ svn_repos_has_capability(svn_repos_t *repos,
in r0, so we're likely to get this error -- but it
means the repository supports mergeinfo! */
svn_error_clear(err);
- apr_hash_set(repos->repository_capabilities,
- SVN_REPOS_CAPABILITY_MERGEINFO,
- APR_HASH_KEY_STRING, capability_yes);
+ svn_hash_sets(repos->repository_capabilities,
+ SVN_REPOS_CAPABILITY_MERGEINFO, capability_yes);
*has = TRUE;
}
else
@@ -1557,9 +1663,8 @@ svn_repos_has_capability(svn_repos_t *repos,
}
else
{
- apr_hash_set(repos->repository_capabilities,
- SVN_REPOS_CAPABILITY_MERGEINFO,
- APR_HASH_KEY_STRING, capability_yes);
+ svn_hash_sets(repos->repository_capabilities,
+ SVN_REPOS_CAPABILITY_MERGEINFO, capability_yes);
*has = TRUE;
}
}
@@ -1572,7 +1677,6 @@ svn_repos_has_capability(svn_repos_t *repos,
return SVN_NO_ERROR;
}
-
svn_fs_t *
svn_repos_fs(svn_repos_t *repos)
{
@@ -1647,6 +1751,86 @@ svn_repos_recover4(const char *path,
return SVN_NO_ERROR;
}
+struct freeze_baton_t {
+ apr_array_header_t *paths;
+ int counter;
+ svn_repos_freeze_func_t freeze_func;
+ void *freeze_baton;
+};
+
+static svn_error_t *
+multi_freeze(void *baton,
+ apr_pool_t *pool)
+{
+ struct freeze_baton_t *fb = baton;
+
+ if (fb->counter == fb->paths->nelts)
+ {
+ SVN_ERR(fb->freeze_func(fb->freeze_baton, pool));
+ return SVN_NO_ERROR;
+ }
+ else
+ {
+ /* Using a subpool as the only way to unlock the repos lock used
+ by BDB is to clear the pool used to take the lock. */
+ apr_pool_t *subpool = svn_pool_create(pool);
+ const char *path = APR_ARRAY_IDX(fb->paths, fb->counter, const char *);
+ svn_repos_t *repos;
+
+ ++fb->counter;
+
+ SVN_ERR(get_repos(&repos, path,
+ TRUE /* exclusive (only applies to BDB) */,
+ FALSE /* non-blocking */,
+ FALSE /* open-fs */,
+ NULL, subpool));
+
+
+ if (strcmp(repos->fs_type, SVN_FS_TYPE_BDB) == 0)
+ {
+ svn_error_t *err = multi_freeze(fb, subpool);
+
+ svn_pool_destroy(subpool);
+
+ return err;
+ }
+ else
+ {
+ SVN_ERR(svn_fs_open(&repos->fs, repos->db_path, NULL, subpool));
+ SVN_ERR(svn_fs_freeze(svn_repos_fs(repos), multi_freeze, fb,
+ subpool));
+ }
+
+ svn_pool_destroy(subpool);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* For BDB we fall back on BDB's repos layer lock which means that the
+ repository is unreadable while frozen.
+
+ For FSFS we delegate to the FS layer which uses the FSFS write-lock
+ and an SQLite reserved lock which means the repository is readable
+ while frozen. */
+svn_error_t *
+svn_repos_freeze(apr_array_header_t *paths,
+ svn_repos_freeze_func_t freeze_func,
+ void *freeze_baton,
+ apr_pool_t *pool)
+{
+ struct freeze_baton_t fb;
+
+ fb.paths = paths;
+ fb.counter = 0;
+ fb.freeze_func = freeze_func;
+ fb.freeze_baton = freeze_baton;
+
+ SVN_ERR(multi_freeze(&fb, pool));
+
+ return SVN_NO_ERROR;
+}
+
svn_error_t *svn_repos_db_logfiles(apr_array_header_t **logfiles,
const char *path,
svn_boolean_t only_unused,
@@ -1676,31 +1860,38 @@ svn_error_t *svn_repos_db_logfiles(apr_array_header_t **logfiles,
return SVN_NO_ERROR;
}
-/** Hot copy structure copy context.
- */
+/* Baton for hotcopy_structure(). */
struct hotcopy_ctx_t {
const char *dest; /* target location to construct */
size_t src_len; /* len of the source path*/
+
+ /* As in svn_repos_hotcopy2() */
+ svn_boolean_t incremental;
+ svn_cancel_func_t cancel_func;
+ void *cancel_baton;
};
-/** Called by (svn_io_dir_walk2).
- * Copies the repository structure with exception of @c SVN_REPOS__DB_DIR,
- * @c SVN_REPOS__LOCK_DIR and @c SVN_REPOS__FORMAT.
- * Those directories and files are handled separetly.
- * @a baton is a pointer to (struct hotcopy_ctx_t) specifying
- * destination path to copy to and the length of the source path.
+/* Copy the repository structure of PATH to BATON->DEST, with exception of
+ * @c SVN_REPOS__DB_DIR, @c SVN_REPOS__LOCK_DIR and @c SVN_REPOS__FORMAT;
+ * those directories and files are handled separately.
+ *
+ * BATON is a (struct hotcopy_ctx_t *). BATON->SRC_LEN is the length
+ * of PATH.
*
- * @copydoc svn_io_dir_walk2()
+ * Implements svn_io_walk_func_t.
*/
static svn_error_t *hotcopy_structure(void *baton,
const char *path,
const apr_finfo_t *finfo,
apr_pool_t *pool)
{
- const struct hotcopy_ctx_t *ctx = ((struct hotcopy_ctx_t *) baton);
+ const struct hotcopy_ctx_t *ctx = baton;
const char *sub_path;
const char *target;
+ if (ctx->cancel_func)
+ SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
+
if (strlen(path) == ctx->src_len)
{
sub_path = "";
@@ -1730,7 +1921,17 @@ static svn_error_t *hotcopy_structure(void *baton,
target = svn_dirent_join(ctx->dest, sub_path, pool);
if (finfo->filetype == APR_DIR)
- return create_repos_dir(target, pool);
+ {
+ svn_error_t *err;
+
+ err = create_repos_dir(target, pool);
+ if (ctx->incremental && err && err->apr_err == SVN_ERR_DIR_NOT_EMPTY)
+ {
+ svn_error_clear(err);
+ err = SVN_NO_ERROR;
+ }
+ return svn_error_trace(err);
+ }
else if (finfo->filetype == APR_REG)
return svn_io_copy_file(path, target, TRUE, pool);
else if (finfo->filetype == APR_LNK)
@@ -1759,17 +1960,29 @@ lock_db_logs_file(svn_repos_t *repos,
/* Make a copy of a repository with hot backup of fs. */
svn_error_t *
-svn_repos_hotcopy(const char *src_path,
- const char *dst_path,
- svn_boolean_t clean_logs,
- apr_pool_t *pool)
+svn_repos_hotcopy2(const char *src_path,
+ const char *dst_path,
+ svn_boolean_t clean_logs,
+ svn_boolean_t incremental,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *pool)
{
svn_repos_t *src_repos;
svn_repos_t *dst_repos;
struct hotcopy_ctx_t hotcopy_context;
+ svn_error_t *err;
+ const char *src_abspath;
+ const char *dst_abspath;
+
+ SVN_ERR(svn_dirent_get_absolute(&src_abspath, src_path, pool));
+ SVN_ERR(svn_dirent_get_absolute(&dst_abspath, dst_path, pool));
+ if (strcmp(src_abspath, dst_abspath) == 0)
+ return svn_error_create(SVN_ERR_INCORRECT_PARAMS, NULL,
+ _("Hotcopy source and destination are equal"));
/* Try to open original repository */
- SVN_ERR(get_repos(&src_repos, src_path,
+ SVN_ERR(get_repos(&src_repos, src_abspath,
FALSE, FALSE,
FALSE, /* don't try to open the db yet. */
NULL,
@@ -1786,9 +1999,12 @@ svn_repos_hotcopy(const char *src_path,
/* Copy the repository to a new path, with exception of
specially handled directories */
- hotcopy_context.dest = dst_path;
- hotcopy_context.src_len = strlen(src_path);
- SVN_ERR(svn_io_dir_walk2(src_path,
+ hotcopy_context.dest = dst_abspath;
+ hotcopy_context.src_len = strlen(src_abspath);
+ hotcopy_context.incremental = incremental;
+ hotcopy_context.cancel_func = cancel_func;
+ hotcopy_context.cancel_baton = cancel_baton;
+ SVN_ERR(svn_io_dir_walk2(src_abspath,
0,
hotcopy_structure,
&hotcopy_context,
@@ -1797,20 +2013,35 @@ svn_repos_hotcopy(const char *src_path,
/* Prepare dst_repos object so that we may create locks,
so that we may open repository */
- dst_repos = create_svn_repos_t(dst_path, pool);
+ dst_repos = create_svn_repos_t(dst_abspath, pool);
dst_repos->fs_type = src_repos->fs_type;
dst_repos->format = src_repos->format;
- SVN_ERR(create_locks(dst_repos, pool));
+ err = create_locks(dst_repos, pool);
+ if (err)
+ {
+ if (incremental && err->apr_err == SVN_ERR_DIR_NOT_EMPTY)
+ svn_error_clear(err);
+ else
+ return svn_error_trace(err);
+ }
- SVN_ERR(svn_io_dir_make_sgid(dst_repos->db_path, APR_OS_DEFAULT, pool));
+ err = svn_io_dir_make_sgid(dst_repos->db_path, APR_OS_DEFAULT, pool);
+ if (err)
+ {
+ if (incremental && APR_STATUS_IS_EEXIST(err->apr_err))
+ svn_error_clear(err);
+ else
+ return svn_error_trace(err);
+ }
/* Exclusively lock the new repository.
No one should be accessing it at the moment */
SVN_ERR(lock_repos(dst_repos, TRUE, FALSE, pool));
- SVN_ERR(svn_fs_hotcopy(src_repos->db_path, dst_repos->db_path,
- clean_logs, pool));
+ SVN_ERR(svn_fs_hotcopy2(src_repos->db_path, dst_repos->db_path,
+ clean_logs, incremental,
+ cancel_func, cancel_baton, pool));
/* Destination repository is ready. Stamp it with a format number. */
return svn_io_write_version_file
@@ -1818,6 +2049,16 @@ svn_repos_hotcopy(const char *src_path,
dst_repos->format, pool);
}
+svn_error_t *
+svn_repos_hotcopy(const char *src_path,
+ const char *dst_path,
+ svn_boolean_t clean_logs,
+ apr_pool_t *pool)
+{
+ return svn_error_trace(svn_repos_hotcopy2(src_path, dst_path, clean_logs,
+ FALSE, NULL, NULL, pool));
+}
+
/* Return the library version number. */
const svn_version_t *
svn_repos_version(void)
@@ -1846,7 +2087,7 @@ svn_repos_stat(svn_dirent_t **dirent,
return SVN_NO_ERROR;
}
- ent = apr_pcalloc(pool, sizeof(*ent));
+ ent = svn_dirent_create(pool);
ent->kind = kind;
if (kind == svn_node_file)
diff --git a/subversion/libsvn_repos/repos.h b/subversion/libsvn_repos/repos.h
index 3d1ee30..fd5b0b4 100644
--- a/subversion/libsvn_repos/repos.h
+++ b/subversion/libsvn_repos/repos.h
@@ -47,7 +47,8 @@ extern "C" {
formats are accepted by some versions of Subversion which do not
pay attention to the FS format number.
*/
-#define SVN_REPOS__FORMAT_NUMBER 5
+#define SVN_REPOS__FORMAT_NUMBER SVN_REPOS__FORMAT_NUMBER_1_4
+#define SVN_REPOS__FORMAT_NUMBER_1_4 5
#define SVN_REPOS__FORMAT_NUMBER_LEGACY 3
@@ -85,15 +86,21 @@ extern "C" {
/* The extension added to the names of example hook scripts. */
#define SVN_REPOS__HOOK_DESC_EXT ".tmpl"
+/* The file which contains a custom set of environment variables
+ * passed inherited to hook scripts, in the repository conf directory. */
+#define SVN_REPOS__CONF_HOOKS_ENV "hooks-env"
+/* The name of the default section in the hooks-env config file. */
+#define SVN_REPOS__HOOKS_ENV_DEFAULT_SECTION "default"
/* The configuration file for svnserve, in the repository conf directory. */
#define SVN_REPOS__CONF_SVNSERVE_CONF "svnserve.conf"
/* In the svnserve default configuration, these are the suggested
- locations for the passwd and authz files (in the repository conf
- directory), and we put example templates there. */
+ locations for the passwd, authz and groups files (in the repository
+ conf directory), and we put example templates there. */
#define SVN_REPOS__CONF_PASSWD "passwd"
#define SVN_REPOS__CONF_AUTHZ "authz"
+#define SVN_REPOS__CONF_GROUPS "groups"
/* The Repository object, created by svn_repos_open2() and
svn_repos_create(). */
@@ -120,6 +127,10 @@ struct svn_repos_t
/* The format number of this repository. */
int format;
+ /* The path to the repository's hooks enviroment file. If NULL, hooks run
+ * in an empty environment. */
+ const char *hooks_env_path;
+
/* The FS backend in use within this repository. */
const char *fs_type;
@@ -140,47 +151,91 @@ struct svn_repos_t
sufficiently well-informed internal code may just compare against
those constants' addresses, therefore). */
apr_hash_t *repository_capabilities;
+
+ /* Pool from which this structure was allocated. Also used for
+ auxiliary repository-related data that requires a matching
+ lifespan. (As the svn_repos_t structure tends to be relatively
+ long-lived, please be careful regarding this pool's usage.) */
+ apr_pool_t *pool;
};
/*** Hook-running Functions ***/
+/* Set *HOOKS_ENV_P to the parsed contents of the hooks-env file
+ LOCAL_ABSPATH, allocated in RESULT_POOL. (This result is suitable
+ for delivery to the various hook wrapper functions which accept a
+ 'hooks_env' parameter.) If LOCAL_ABSPATH is NULL, set *HOOKS_ENV_P
+ to NULL.
+
+ Use SCRATCH_POOL for temporary allocations. */
+svn_error_t *
+svn_repos__parse_hooks_env(apr_hash_t **hooks_env_p,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
/* Run the start-commit hook for REPOS. Use POOL for any temporary
allocations. If the hook fails, return SVN_ERR_REPOS_HOOK_FAILURE.
+ HOOKS_ENV is a hash of hook script environment information returned
+ via svn_repos__parse_hooks_env() (or NULL if no such information is
+ available).
+
USER is the authenticated name of the user starting the commit.
+
CAPABILITIES is a list of 'const char *' capability names (using
SVN_RA_CAPABILITY_*) that the client has self-reported. Note that
there is no guarantee the client is telling the truth: the hook
- should not make security assumptions based on the capabilities. */
+ should not make security assumptions based on the capabilities.
+
+ TXN_NAME is the name of the commit transaction that's just been
+ created. */
svn_error_t *
svn_repos__hooks_start_commit(svn_repos_t *repos,
+ apr_hash_t *hooks_env,
const char *user,
const apr_array_header_t *capabilities,
+ const char *txn_name,
apr_pool_t *pool);
/* Run the pre-commit hook for REPOS. Use POOL for any temporary
allocations. If the hook fails, return SVN_ERR_REPOS_HOOK_FAILURE.
+ HOOKS_ENV is a hash of hook script environment information returned
+ via svn_repos__parse_hooks_env() (or NULL if no such information is
+ available).
+
TXN_NAME is the name of the transaction that is being committed. */
svn_error_t *
svn_repos__hooks_pre_commit(svn_repos_t *repos,
+ apr_hash_t *hooks_env,
const char *txn_name,
apr_pool_t *pool);
/* Run the post-commit hook for REPOS. Use POOL for any temporary
allocations. If the hook fails, run SVN_ERR_REPOS_HOOK_FAILURE.
+ HOOKS_ENV is a hash of hook script environment information returned
+ via svn_repos__parse_hooks_env() (or NULL if no such information is
+ available).
+
REV is the revision that was created as a result of the commit. */
svn_error_t *
svn_repos__hooks_post_commit(svn_repos_t *repos,
+ apr_hash_t *hooks_env,
svn_revnum_t rev,
+ const char *txn_name,
apr_pool_t *pool);
/* Run the pre-revprop-change hook for REPOS. Use POOL for any
temporary allocations. If the hook fails, return
SVN_ERR_REPOS_HOOK_FAILURE.
+ HOOKS_ENV is a hash of hook script environment information returned
+ via svn_repos__parse_hooks_env() (or NULL if no such information is
+ available).
+
REV is the revision whose property is being changed.
AUTHOR is the authenticated name of the user changing the prop.
NAME is the name of the property being changed.
@@ -193,6 +248,7 @@ svn_repos__hooks_post_commit(svn_repos_t *repos,
will be written. */
svn_error_t *
svn_repos__hooks_pre_revprop_change(svn_repos_t *repos,
+ apr_hash_t *hooks_env,
svn_revnum_t rev,
const char *author,
const char *name,
@@ -204,6 +260,10 @@ svn_repos__hooks_pre_revprop_change(svn_repos_t *repos,
temporary allocations. If the hook fails, return
SVN_ERR_REPOS_HOOK_FAILURE.
+ HOOKS_ENV is a hash of hook script environment information returned
+ via svn_repos__parse_hooks_env() (or NULL if no such information is
+ available).
+
REV is the revision whose property was changed.
AUTHOR is the authenticated name of the user who changed the prop.
NAME is the name of the property that was changed, and OLD_VALUE is
@@ -215,6 +275,7 @@ svn_repos__hooks_pre_revprop_change(svn_repos_t *repos,
the property is being created, no data will be written. */
svn_error_t *
svn_repos__hooks_post_revprop_change(svn_repos_t *repos,
+ apr_hash_t *hooks_env,
svn_revnum_t rev,
const char *author,
const char *name,
@@ -225,6 +286,10 @@ svn_repos__hooks_post_revprop_change(svn_repos_t *repos,
/* Run the pre-lock hook for REPOS. Use POOL for any temporary
allocations. If the hook fails, return SVN_ERR_REPOS_HOOK_FAILURE.
+ HOOKS_ENV is a hash of hook script environment information returned
+ via svn_repos__parse_hooks_env() (or NULL if no such information is
+ available).
+
PATH is the path being locked, USERNAME is the person doing it,
COMMENT is the comment of the lock, and is treated as an empty
string when NULL is given. STEAL-LOCK is a flag if the user is
@@ -237,6 +302,7 @@ svn_repos__hooks_post_revprop_change(svn_repos_t *repos,
svn_error_t *
svn_repos__hooks_pre_lock(svn_repos_t *repos,
+ apr_hash_t *hooks_env,
const char **token,
const char *path,
const char *username,
@@ -247,10 +313,15 @@ svn_repos__hooks_pre_lock(svn_repos_t *repos,
/* Run the post-lock hook for REPOS. Use POOL for any temporary
allocations. If the hook fails, return SVN_ERR_REPOS_HOOK_FAILURE.
+ HOOKS_ENV is a hash of hook script environment information returned
+ via svn_repos__parse_hooks_env() (or NULL if no such information is
+ available).
+
PATHS is an array of paths being locked, USERNAME is the person
who did it. */
svn_error_t *
svn_repos__hooks_post_lock(svn_repos_t *repos,
+ apr_hash_t *hooks_env,
const apr_array_header_t *paths,
const char *username,
apr_pool_t *pool);
@@ -258,11 +329,16 @@ svn_repos__hooks_post_lock(svn_repos_t *repos,
/* Run the pre-unlock hook for REPOS. Use POOL for any temporary
allocations. If the hook fails, return SVN_ERR_REPOS_HOOK_FAILURE.
+ HOOKS_ENV is a hash of hook script environment information returned
+ via svn_repos__parse_hooks_env() (or NULL if no such information is
+ available).
+
PATH is the path being unlocked, USERNAME is the person doing it,
TOKEN is the lock token to be unlocked which should not be NULL,
and BREAK-LOCK is a flag if the user is breaking the lock. */
svn_error_t *
svn_repos__hooks_pre_unlock(svn_repos_t *repos,
+ apr_hash_t *hooks_env,
const char *path,
const char *username,
const char *token,
@@ -272,15 +348,41 @@ svn_repos__hooks_pre_unlock(svn_repos_t *repos,
/* Run the post-unlock hook for REPOS. Use POOL for any temporary
allocations. If the hook fails, return SVN_ERR_REPOS_HOOK_FAILURE.
+ HOOKS_ENV is a hash of hook script environment information returned
+ via svn_repos__parse_hooks_env() (or NULL if no such information is
+ available).
+
PATHS is an array of paths being unlocked, USERNAME is the person
who did it. */
svn_error_t *
svn_repos__hooks_post_unlock(svn_repos_t *repos,
+ apr_hash_t *hooks_env,
const apr_array_header_t *paths,
const char *username,
apr_pool_t *pool);
+/*** Authz Functions ***/
+
+/* Read authz configuration data from PATH into *AUTHZ_P, allocated
+ in POOL. If GROUPS_PATH is set, use the global groups parsed from it.
+
+ PATH and GROUPS_PATH may be a dirent or a registry path and iff ACCEPT_URLS
+ is set it may also be an absolute file url.
+
+ If PATH or GROUPS_PATH is not a valid authz rule file, then return
+ SVN_AUTHZ_INVALID_CONFIG. The contents of *AUTHZ_P is then
+ undefined. If MUST_EXIST is TRUE, a missing authz or global groups file
+ is also an error. */
+svn_error_t *
+svn_repos__authz_read(svn_authz_t **authz_p,
+ const char *path,
+ const char *groups_path,
+ svn_boolean_t must_exist,
+ svn_boolean_t accept_urls,
+ apr_pool_t *pool);
+
+
/*** Utility Functions ***/
/* Set *CHANGED_P to TRUE if ROOT1/PATH1 and ROOT2/PATH2 have
diff --git a/subversion/libsvn_repos/rev_hunt.c b/subversion/libsvn_repos/rev_hunt.c
index 5d8331d..77b1f2a 100644
--- a/subversion/libsvn_repos/rev_hunt.c
+++ b/subversion/libsvn_repos/rev_hunt.c
@@ -25,6 +25,7 @@
#include <string.h>
#include "svn_compat.h"
#include "svn_private_config.h"
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_error.h"
#include "svn_error_codes.h"
@@ -154,6 +155,8 @@ svn_repos_get_committed_info(svn_revnum_t *committed_rev,
const char *path,
apr_pool_t *pool)
{
+ apr_hash_t *revprops;
+
svn_fs_t *fs = svn_fs_root_fs(root);
/* ### It might be simpler just to declare that revision
@@ -164,13 +167,16 @@ svn_repos_get_committed_info(svn_revnum_t *committed_rev,
/* Get the CR field out of the node's skel. */
SVN_ERR(svn_fs_node_created_rev(committed_rev, root, path, pool));
- /* Get the date property of this revision. */
- SVN_ERR(svn_fs_revision_prop(&committed_date_s, fs, *committed_rev,
- SVN_PROP_REVISION_DATE, pool));
+ /* Get the revision properties of this revision. */
+ SVN_ERR(svn_fs_revision_proplist(&revprops, fs, *committed_rev, pool));
- /* Get the author property of this revision. */
- SVN_ERR(svn_fs_revision_prop(&last_author_s, fs, *committed_rev,
- SVN_PROP_REVISION_AUTHOR, pool));
+ /* Extract date and author from these revprops. */
+ committed_date_s = apr_hash_get(revprops,
+ SVN_PROP_REVISION_DATE,
+ sizeof(SVN_PROP_REVISION_DATE)-1);
+ last_author_s = apr_hash_get(revprops,
+ SVN_PROP_REVISION_AUTHOR,
+ sizeof(SVN_PROP_REVISION_AUTHOR)-1);
*committed_date = committed_date_s ? committed_date_s->data : NULL;
*last_author = last_author_s ? last_author_s->data : NULL;
@@ -527,7 +533,7 @@ check_ancestry_of_peg_path(svn_boolean_t *is_ancestor,
{
svn_fs_root_t *root;
svn_fs_history_t *history;
- const char *path;
+ const char *path = NULL;
svn_revnum_t revision;
apr_pool_t *lastpool, *currpool;
@@ -590,7 +596,7 @@ svn_repos__prev_location(svn_revnum_t *appeared_rev,
apr_pool_t *pool)
{
svn_fs_root_t *root, *copy_root;
- const char *copy_path, *copy_src_path, *remainder = "";
+ const char *copy_path, *copy_src_path, *remainder;
svn_revnum_t copy_src_rev;
/* Initialize return variables. */
@@ -623,8 +629,7 @@ svn_repos__prev_location(svn_revnum_t *appeared_rev,
*/
SVN_ERR(svn_fs_copied_from(&copy_src_rev, &copy_src_path,
copy_root, copy_path, pool));
- if (! strcmp(copy_path, path) == 0)
- remainder = svn_fspath__is_child(copy_path, path, pool);
+ remainder = svn_fspath__skip_ancestor(copy_path, path);
if (prev_path)
*prev_path = svn_fspath__join(copy_src_path, remainder, pool);
if (appeared_rev)
@@ -983,30 +988,27 @@ get_path_mergeinfo(apr_hash_t **mergeinfo,
svn_fs_t *fs,
const char *path,
svn_revnum_t revnum,
- apr_pool_t *pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
svn_mergeinfo_catalog_t tmp_catalog;
svn_fs_root_t *root;
- apr_pool_t *subpool = svn_pool_create(pool);
- apr_array_header_t *paths = apr_array_make(subpool, 1,
+ apr_array_header_t *paths = apr_array_make(scratch_pool, 1,
sizeof(const char *));
APR_ARRAY_PUSH(paths, const char *) = path;
- SVN_ERR(svn_fs_revision_root(&root, fs, revnum, subpool));
+ SVN_ERR(svn_fs_revision_root(&root, fs, revnum, scratch_pool));
/* We do not need to call svn_repos_fs_get_mergeinfo() (which performs authz)
because we will filter out unreadable revisions in
find_interesting_revision(), above */
- SVN_ERR(svn_fs_get_mergeinfo(&tmp_catalog, root, paths,
- svn_mergeinfo_inherited, FALSE, subpool));
-
- *mergeinfo = apr_hash_get(tmp_catalog, path, APR_HASH_KEY_STRING);
- if (*mergeinfo)
- *mergeinfo = svn_mergeinfo_dup(*mergeinfo, pool);
- else
- *mergeinfo = apr_hash_make(pool);
+ SVN_ERR(svn_fs_get_mergeinfo2(&tmp_catalog, root, paths,
+ svn_mergeinfo_inherited, FALSE, TRUE,
+ result_pool, scratch_pool));
- svn_pool_destroy(subpool);
+ *mergeinfo = svn_hash_gets(tmp_catalog, path);
+ if (!*mergeinfo)
+ *mergeinfo = apr_hash_make(result_pool);
return SVN_NO_ERROR;
}
@@ -1020,7 +1022,7 @@ is_path_in_hash(apr_hash_t *duplicate_path_revs,
const char *key = apr_psprintf(pool, "%s:%ld", path, revision);
void *ptr;
- ptr = apr_hash_get(duplicate_path_revs, key, APR_HASH_KEY_STRING);
+ ptr = svn_hash_gets(duplicate_path_revs, key);
return ptr != NULL;
}
@@ -1043,9 +1045,9 @@ static svn_error_t *
get_merged_mergeinfo(apr_hash_t **merged_mergeinfo,
svn_repos_t *repos,
struct path_revision *old_path_rev,
- apr_pool_t *pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- apr_pool_t *subpool = svn_pool_create(pool);
apr_hash_t *curr_mergeinfo, *prev_mergeinfo, *deleted, *changed;
svn_error_t *err;
svn_fs_root_t *root;
@@ -1055,28 +1057,26 @@ get_merged_mergeinfo(apr_hash_t **merged_mergeinfo,
/* Getting/parsing/diffing svn:mergeinfo is expensive, so only do it
if there is a property change. */
SVN_ERR(svn_fs_revision_root(&root, repos->fs, old_path_rev->revnum,
- subpool));
- SVN_ERR(svn_fs_paths_changed2(&changed_paths, root, subpool));
+ scratch_pool));
+ SVN_ERR(svn_fs_paths_changed2(&changed_paths, root, scratch_pool));
while (1)
{
- svn_fs_path_change2_t *changed_path = apr_hash_get(changed_paths,
- path,
- APR_HASH_KEY_STRING);
+ svn_fs_path_change2_t *changed_path = svn_hash_gets(changed_paths, path);
if (changed_path && changed_path->prop_mod)
break;
if (svn_fspath__is_root(path, strlen(path)))
{
- svn_pool_destroy(subpool);
*merged_mergeinfo = NULL;
return SVN_NO_ERROR;
}
- path = svn_fspath__dirname(path, subpool);
+ path = svn_fspath__dirname(path, scratch_pool);
}
/* First, find the mergeinfo difference for old_path_rev->revnum, and
old_path_rev->revnum - 1. */
err = get_path_mergeinfo(&curr_mergeinfo, repos->fs, old_path_rev->path,
- old_path_rev->revnum, subpool);
+ old_path_rev->revnum, scratch_pool,
+ scratch_pool);
if (err)
{
if (err->apr_err == SVN_ERR_MERGEINFO_PARSE_ERROR)
@@ -1085,7 +1085,6 @@ get_merged_mergeinfo(apr_hash_t **merged_mergeinfo,
best we can do is ignore it and act is if there are
no mergeinfo differences. */
svn_error_clear(err);
- svn_pool_destroy(subpool);
*merged_mergeinfo = NULL;
return SVN_NO_ERROR;
}
@@ -1096,14 +1095,14 @@ get_merged_mergeinfo(apr_hash_t **merged_mergeinfo,
}
err = get_path_mergeinfo(&prev_mergeinfo, repos->fs, old_path_rev->path,
- old_path_rev->revnum - 1, subpool);
+ old_path_rev->revnum - 1, scratch_pool,
+ scratch_pool);
if (err && (err->apr_err == SVN_ERR_FS_NOT_FOUND
|| err->apr_err == SVN_ERR_MERGEINFO_PARSE_ERROR))
{
/* If the path doesn't exist in the previous revision or it does exist
but has invalid mergeinfo (Issue #3896), assume no merges. */
svn_error_clear(err);
- svn_pool_destroy(subpool);
*merged_mergeinfo = NULL;
return SVN_NO_ERROR;
}
@@ -1111,18 +1110,17 @@ get_merged_mergeinfo(apr_hash_t **merged_mergeinfo,
SVN_ERR(err);
/* Then calculate and merge the differences. */
- SVN_ERR(svn_mergeinfo_diff(&deleted, &changed, prev_mergeinfo, curr_mergeinfo,
- FALSE, subpool));
- SVN_ERR(svn_mergeinfo_merge(changed, deleted, subpool));
+ SVN_ERR(svn_mergeinfo_diff2(&deleted, &changed, prev_mergeinfo,
+ curr_mergeinfo, FALSE, result_pool,
+ scratch_pool));
+ SVN_ERR(svn_mergeinfo_merge2(changed, deleted, result_pool, scratch_pool));
/* Store the result. */
if (apr_hash_count(changed))
- *merged_mergeinfo = svn_mergeinfo_dup(changed, pool);
+ *merged_mergeinfo = changed;
else
*merged_mergeinfo = NULL;
- svn_pool_destroy(subpool);
-
return SVN_NO_ERROR;
}
@@ -1205,17 +1203,17 @@ find_interesting_revisions(apr_array_header_t *path_revisions,
if (include_merged_revisions)
SVN_ERR(get_merged_mergeinfo(&path_rev->merged_mergeinfo, repos,
- path_rev, result_pool));
+ path_rev, result_pool, iterpool));
else
path_rev->merged_mergeinfo = NULL;
/* Add the path/rev pair to the hash, so we can filter out future
occurrences of it. We only care about this if including merged
revisions, 'cause that's the only time we can have duplicates. */
- apr_hash_set(duplicate_path_revs,
- apr_psprintf(result_pool, "%s:%ld", path_rev->path,
- path_rev->revnum),
- APR_HASH_KEY_STRING, (void *)0xdeadbeef);
+ svn_hash_sets(duplicate_path_revs,
+ apr_psprintf(result_pool, "%s:%ld", path_rev->path,
+ path_rev->revnum),
+ (void *)0xdeadbeef);
if (path_rev->revnum <= start)
break;
@@ -1253,17 +1251,18 @@ find_merged_revisions(apr_array_header_t **merged_path_revisions_out,
apr_hash_t *duplicate_path_revs,
svn_repos_authz_func_t authz_read_func,
void *authz_read_baton,
- apr_pool_t *pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
const apr_array_header_t *old;
apr_array_header_t *new_merged_path_revs;
apr_pool_t *iterpool, *last_pool;
apr_array_header_t *merged_path_revisions =
- apr_array_make(pool, 0, sizeof(struct path_revision *));
+ apr_array_make(scratch_pool, 0, sizeof(struct path_revision *));
old = mainline_path_revisions;
- iterpool = svn_pool_create(pool);
- last_pool = svn_pool_create(pool);
+ iterpool = svn_pool_create(scratch_pool);
+ last_pool = svn_pool_create(scratch_pool);
do
{
@@ -1292,7 +1291,7 @@ find_merged_revisions(apr_array_header_t **merged_path_revisions_out,
hi = apr_hash_next(hi))
{
apr_pool_t *iterpool3;
- apr_array_header_t *rangelist;
+ svn_rangelist_t *rangelist;
const char *path;
int j;
@@ -1326,8 +1325,8 @@ find_merged_revisions(apr_array_header_t **merged_path_revisions_out,
TRUE, TRUE,
duplicate_path_revs,
authz_read_func,
- authz_read_baton, pool,
- iterpool3));
+ authz_read_baton,
+ result_pool, iterpool3));
}
svn_pool_destroy(iterpool3);
}
@@ -1351,7 +1350,8 @@ find_merged_revisions(apr_array_header_t **merged_path_revisions_out,
sizeof(struct path_revision *), compare_path_revisions);
/* Copy to the output array. */
- *merged_path_revisions_out = apr_array_copy(pool, merged_path_revisions);
+ *merged_path_revisions_out = apr_array_copy(result_pool,
+ merged_path_revisions);
svn_pool_destroy(iterpool);
svn_pool_destroy(last_pool);
@@ -1448,6 +1448,114 @@ send_path_revision(struct path_revision *path_rev,
return SVN_NO_ERROR;
}
+/* Similar to svn_repos_get_file_revs2() but returns paths while walking
+ history instead of after collecting all history.
+
+ This allows implementing clients to immediately start processing and
+ stop when they got the information they need. (E.g. all or a specific set
+ of lines were modified) */
+static svn_error_t *
+get_file_revs_backwards(svn_repos_t *repos,
+ const char *path,
+ svn_revnum_t start,
+ svn_revnum_t end,
+ svn_repos_authz_func_t authz_read_func,
+ void *authz_read_baton,
+ svn_file_rev_handler_t handler,
+ void *handler_baton,
+ apr_pool_t *scratch_pool)
+{
+ apr_pool_t *iterpool, *last_pool;
+ svn_fs_history_t *history;
+ svn_fs_root_t *root;
+ svn_node_kind_t kind;
+ struct send_baton sb;
+
+ /* We switch between two pools while looping and so does the path-rev
+ handler for actually reported revisions. We do this as we
+ need just information from last iteration to be available. */
+
+ iterpool = svn_pool_create(scratch_pool);
+ last_pool = svn_pool_create(scratch_pool);
+ sb.iterpool = svn_pool_create(scratch_pool);
+ sb.last_pool = svn_pool_create(scratch_pool);
+
+ /* We want the first txdelta to be against the empty file. */
+ sb.last_root = NULL;
+ sb.last_path = NULL;
+
+ /* Create an empty hash table for the first property diff. */
+ sb.last_props = apr_hash_make(sb.last_pool);
+
+ /* The path had better be a file in this revision. */
+ SVN_ERR(svn_fs_revision_root(&root, repos->fs, end, scratch_pool));
+ SVN_ERR(svn_fs_check_path(&kind, root, path, scratch_pool));
+ if (kind != svn_node_file)
+ return svn_error_createf(SVN_ERR_FS_NOT_FILE,
+ NULL, _("'%s' is not a file in revision %ld"),
+ path, end);
+
+ /* Open a history object. */
+ SVN_ERR(svn_fs_node_history(&history, root, path, scratch_pool));
+ while (1)
+ {
+ struct path_revision *path_rev;
+ svn_revnum_t tmp_revnum;
+ const char *tmp_path;
+
+ svn_pool_clear(iterpool);
+
+ /* Fetch the history object to walk through. */
+ SVN_ERR(svn_fs_history_prev(&history, history, TRUE, iterpool));
+ if (!history)
+ break;
+ SVN_ERR(svn_fs_history_location(&tmp_path, &tmp_revnum,
+ history, iterpool));
+
+ /* Check authorization. */
+ if (authz_read_func)
+ {
+ svn_boolean_t readable;
+ svn_fs_root_t *tmp_root;
+
+ SVN_ERR(svn_fs_revision_root(&tmp_root, repos->fs, tmp_revnum,
+ iterpool));
+ SVN_ERR(authz_read_func(&readable, tmp_root, tmp_path,
+ authz_read_baton, iterpool));
+ if (! readable)
+ break;
+ }
+
+ /* We didn't break, so we must really want this path-rev. */
+ path_rev = apr_palloc(iterpool, sizeof(*path_rev));
+ path_rev->path = tmp_path;
+ path_rev->revnum = tmp_revnum;
+ path_rev->merged = FALSE;
+
+ SVN_ERR(send_path_revision(path_rev, repos, &sb,
+ handler, handler_baton));
+
+ if (path_rev->revnum <= start)
+ break;
+
+ /* Swap pools. */
+ {
+ apr_pool_t *tmp_pool = iterpool;
+ iterpool = last_pool;
+ last_pool = tmp_pool;
+ }
+ }
+
+ svn_pool_destroy(iterpool);
+ svn_pool_destroy(last_pool);
+ svn_pool_destroy(sb.last_pool);
+ svn_pool_destroy(sb.iterpool);
+
+ return SVN_NO_ERROR;
+
+}
+
+
/* We don't yet support sending revisions in reverse order; the caller wait
* until we've traced back through the entire history, and then accept
* them from oldest to youngest. Someday this may change, but in the meantime,
@@ -1464,6 +1572,10 @@ send_path_revision(struct path_revision *path_rev,
* oldest to youngest, interleaving as appropriate. This is implemented
* similar to an insertion sort, but instead of inserting into another
* array, we just call the appropriate handler.
+ *
+ * 2013-02: Added a very simple reverse for mainline only changes. Before this,
+ * this would return an error (path not found) or just the first
+ * revision before end.
*/
svn_error_t *
svn_repos_get_file_revs2(svn_repos_t *repos,
@@ -1475,48 +1587,65 @@ svn_repos_get_file_revs2(svn_repos_t *repos,
void *authz_read_baton,
svn_file_rev_handler_t handler,
void *handler_baton,
- apr_pool_t *pool)
+ apr_pool_t *scratch_pool)
{
apr_array_header_t *mainline_path_revisions, *merged_path_revisions;
apr_hash_t *duplicate_path_revs;
struct send_baton sb;
int mainline_pos, merged_pos;
+ if (end < start)
+ {
+ if (include_merged_revisions)
+ return svn_error_create(SVN_ERR_UNSUPPORTED_FEATURE, NULL, NULL);
+
+ return svn_error_trace(
+ get_file_revs_backwards(repos, path,
+ end, start,
+ authz_read_func,
+ authz_read_baton,
+ handler,
+ handler_baton,
+ scratch_pool));
+ }
+
+ /* We switch between two pools while looping, since we need information from
+ the last iteration to be available. */
+ sb.iterpool = svn_pool_create(scratch_pool);
+ sb.last_pool = svn_pool_create(scratch_pool);
+
+ /* We want the first txdelta to be against the empty file. */
+ sb.last_root = NULL;
+ sb.last_path = NULL;
+
+ /* Create an empty hash table for the first property diff. */
+ sb.last_props = apr_hash_make(sb.last_pool);
+
+
/* Get the revisions we are interested in. */
- duplicate_path_revs = apr_hash_make(pool);
- mainline_path_revisions = apr_array_make(pool, 0,
+ duplicate_path_revs = apr_hash_make(scratch_pool);
+ mainline_path_revisions = apr_array_make(scratch_pool, 100,
sizeof(struct path_revision *));
SVN_ERR(find_interesting_revisions(mainline_path_revisions, repos, path,
start, end, include_merged_revisions,
FALSE, duplicate_path_revs,
- authz_read_func, authz_read_baton, pool,
- pool));
+ authz_read_func, authz_read_baton,
+ scratch_pool, sb.iterpool));
/* If we are including merged revisions, go get those, too. */
if (include_merged_revisions)
SVN_ERR(find_merged_revisions(&merged_path_revisions, start,
mainline_path_revisions, repos,
duplicate_path_revs, authz_read_func,
- authz_read_baton, pool));
+ authz_read_baton,
+ scratch_pool, sb.iterpool));
else
- merged_path_revisions = apr_array_make(pool, 0,
+ merged_path_revisions = apr_array_make(scratch_pool, 0,
sizeof(struct path_revision *));
/* We must have at least one revision to get. */
SVN_ERR_ASSERT(mainline_path_revisions->nelts > 0);
- /* We switch betwwen two pools while looping, since we need information from
- the last iteration to be available. */
- sb.iterpool = svn_pool_create(pool);
- sb.last_pool = svn_pool_create(pool);
-
- /* We want the first txdelta to be against the empty file. */
- sb.last_root = NULL;
- sb.last_path = NULL;
-
- /* Create an empty hash table for the first property diff. */
- sb.last_props = apr_hash_make(sb.last_pool);
-
/* Walk through both mainline and merged revisions, and send them in
reverse chronological order, interleaving as appropriate. */
mainline_pos = mainline_path_revisions->nelts - 1;
diff --git a/subversion/libsvn_subr/adler32.c b/subversion/libsvn_subr/adler32.c
index c289fd0..e290e68 100644
--- a/subversion/libsvn_subr/adler32.c
+++ b/subversion/libsvn_subr/adler32.c
@@ -61,7 +61,9 @@ svn__adler32(apr_uint32_t checksum, const char *data, apr_off_t len)
* optimized code. Also, new zlib versions will come with
* SIMD code for x86 and x64.
*/
- return adler32(checksum, (const Bytef *)data, len);
+ return (apr_uint32_t)adler32(checksum,
+ (const Bytef *)data,
+ (uInt)len);
}
else
{
diff --git a/subversion/libsvn_subr/auth.c b/subversion/libsvn_subr/auth.c
index 945a7f3..3c874cf 100644
--- a/subversion/libsvn_subr/auth.c
+++ b/subversion/libsvn_subr/auth.c
@@ -26,6 +26,7 @@
#include <apr_tables.h>
#include <apr_strings.h>
+#include "svn_hash.h"
#include "svn_types.h"
#include "svn_string.h"
#include "svn_error.h"
@@ -34,14 +35,26 @@
#include "svn_private_config.h"
#include "svn_dso.h"
#include "svn_version.h"
+#include "private/svn_auth_private.h"
+#include "private/svn_dep_compat.h"
+#include "private/svn_subr_private.h"
-/* The good way to think of this machinery is as a set of tables.
+#include "auth.h"
- - Each type of credentials selects a single table.
+/* AN OVERVIEW
+ ===========
- - In a given table, each row is a 'provider' capable of returning
- the same type of credentials. Each column represents a
- provider's repeated attempts to provide credentials.
+ A good way to think of this machinery is as a set of tables.
+
+ - Each type of credentials selects a single table.
+
+ - In a given table, each row is a 'provider' capable of returning
+ the same type of credentials. Each column represents a
+ provider's repeated attempts to provide credentials.
+
+
+ Fetching Credentials from Providers
+ -----------------------------------
When the caller asks for a particular type of credentials, the
machinery in this file walks over the appropriate table. It starts
@@ -55,6 +68,23 @@
Note that the caller cannot see the table traversal, and thus has
no idea when we switch providers.
+
+
+ Storing Credentials with Providers
+ ----------------------------------
+
+ When the server has validated a set of credentials, and when
+ credential caching is enabled, we have the chance to store those
+ credentials for later use. The provider which provided the working
+ credentials is the first one given the opportunity to (re)cache
+ those credentials. Its save_credentials() function is invoked with
+ the working credentials. If that provider reports that it
+ successfully stored the credentials, we're done. Otherwise, we
+ walk the providers (rows) for that type of credentials in order
+ from the top of the table, allowing each in turn the opportunity to
+ store the credentials. When one reports that it has done so
+ successfully -- or when we run out of providers (rows) to try --
+ the table walk ends.
*/
@@ -125,17 +155,14 @@ svn_auth_open(svn_auth_baton_t **auth_baton,
provider = APR_ARRAY_IDX(providers, i, svn_auth_provider_object_t *);
/* Add it to the appropriate table in the auth_baton */
- table = apr_hash_get(ab->tables,
- provider->vtable->cred_kind, APR_HASH_KEY_STRING);
+ table = svn_hash_gets(ab->tables, provider->vtable->cred_kind);
if (! table)
{
table = apr_pcalloc(pool, sizeof(*table));
table->providers
= apr_array_make(pool, 1, sizeof(svn_auth_provider_object_t *));
- apr_hash_set(ab->tables,
- provider->vtable->cred_kind, APR_HASH_KEY_STRING,
- table);
+ svn_hash_sets(ab->tables, provider->vtable->cred_kind, table);
}
APR_ARRAY_PUSH(table->providers, svn_auth_provider_object_t *)
= provider;
@@ -151,17 +178,26 @@ svn_auth_set_parameter(svn_auth_baton_t *auth_baton,
const char *name,
const void *value)
{
- apr_hash_set(auth_baton->parameters, name, APR_HASH_KEY_STRING, value);
+ svn_hash_sets(auth_baton->parameters, name, value);
}
const void *
svn_auth_get_parameter(svn_auth_baton_t *auth_baton,
const char *name)
{
- return apr_hash_get(auth_baton->parameters, name, APR_HASH_KEY_STRING);
+ return svn_hash_gets(auth_baton->parameters, name);
}
+/* Return the key used to address the in-memory cache of auth
+ credentials of type CRED_KIND and associated with REALMSTRING. */
+static const char *
+make_cache_key(const char *cred_kind,
+ const char *realmstring,
+ apr_pool_t *pool)
+{
+ return apr_pstrcat(pool, cred_kind, ":", realmstring, (char *)NULL);
+}
svn_error_t *
svn_auth_first_credentials(void **credentials,
@@ -181,16 +217,15 @@ svn_auth_first_credentials(void **credentials,
const char *cache_key;
/* Get the appropriate table of providers for CRED_KIND. */
- table = apr_hash_get(auth_baton->tables, cred_kind, APR_HASH_KEY_STRING);
+ table = svn_hash_gets(auth_baton->tables, cred_kind);
if (! table)
return svn_error_createf(SVN_ERR_AUTHN_NO_PROVIDER, NULL,
_("No provider registered for '%s' credentials"),
cred_kind);
/* First, see if we have cached creds in the auth_baton. */
- cache_key = apr_pstrcat(pool, cred_kind, ":", realmstring, (char *)NULL);
- creds = apr_hash_get(auth_baton->creds_cache,
- cache_key, APR_HASH_KEY_STRING);
+ cache_key = make_cache_key(cred_kind, realmstring, pool);
+ creds = svn_hash_gets(auth_baton->creds_cache, cache_key);
if (creds)
{
got_first = FALSE;
@@ -203,9 +238,11 @@ svn_auth_first_credentials(void **credentials,
{
provider = APR_ARRAY_IDX(table->providers, i,
svn_auth_provider_object_t *);
- SVN_ERR(provider->vtable->first_credentials
- (&creds, &iter_baton, provider->provider_baton,
- auth_baton->parameters, realmstring, auth_baton->pool));
+ SVN_ERR(provider->vtable->first_credentials(&creds, &iter_baton,
+ provider->provider_baton,
+ auth_baton->parameters,
+ realmstring,
+ auth_baton->pool));
if (creds != NULL)
{
@@ -231,10 +268,9 @@ svn_auth_first_credentials(void **credentials,
*state = iterstate;
/* Put the creds in the cache */
- apr_hash_set(auth_baton->creds_cache,
- apr_pstrdup(auth_baton->pool, cache_key),
- APR_HASH_KEY_STRING,
- creds);
+ svn_hash_sets(auth_baton->creds_cache,
+ apr_pstrdup(auth_baton->pool, cache_key),
+ creds);
}
*credentials = creds;
@@ -263,27 +299,24 @@ svn_auth_next_credentials(void **credentials,
svn_auth_provider_object_t *);
if (! state->got_first)
{
- SVN_ERR(provider->vtable->first_credentials
- (&creds, &(state->provider_iter_baton),
- provider->provider_baton, auth_baton->parameters,
- state->realmstring, auth_baton->pool));
+ SVN_ERR(provider->vtable->first_credentials(
+ &creds, &(state->provider_iter_baton),
+ provider->provider_baton, auth_baton->parameters,
+ state->realmstring, auth_baton->pool));
state->got_first = TRUE;
}
- else
+ else if (provider->vtable->next_credentials)
{
- if (provider->vtable->next_credentials)
- SVN_ERR(provider->vtable->next_credentials
- (&creds, state->provider_iter_baton,
- provider->provider_baton, auth_baton->parameters,
- state->realmstring, auth_baton->pool));
+ SVN_ERR(provider->vtable->next_credentials(
+ &creds, state->provider_iter_baton,
+ provider->provider_baton, auth_baton->parameters,
+ state->realmstring, auth_baton->pool));
}
if (creds != NULL)
{
/* Put the creds in the cache */
- apr_hash_set(auth_baton->creds_cache,
- state->cache_key, APR_HASH_KEY_STRING,
- creds);
+ svn_hash_sets(auth_baton->creds_cache, state->cache_key, creds);
break;
}
@@ -311,15 +344,13 @@ svn_auth_save_credentials(svn_auth_iterstate_t *state,
return SVN_NO_ERROR;
auth_baton = state->auth_baton;
- creds = apr_hash_get(state->auth_baton->creds_cache,
- state->cache_key, APR_HASH_KEY_STRING);
+ creds = svn_hash_gets(state->auth_baton->creds_cache, state->cache_key);
if (! creds)
return SVN_NO_ERROR;
/* Do not save the creds if SVN_AUTH_PARAM_NO_AUTH_CACHE is set */
- no_auth_cache = apr_hash_get(auth_baton->parameters,
- SVN_AUTH_PARAM_NO_AUTH_CACHE,
- APR_HASH_KEY_STRING);
+ no_auth_cache = svn_hash_gets(auth_baton->parameters,
+ SVN_AUTH_PARAM_NO_AUTH_CACHE);
if (no_auth_cache)
return SVN_NO_ERROR;
@@ -362,6 +393,32 @@ svn_auth_save_credentials(svn_auth_iterstate_t *state,
return SVN_NO_ERROR;
}
+
+svn_error_t *
+svn_auth_forget_credentials(svn_auth_baton_t *auth_baton,
+ const char *cred_kind,
+ const char *realmstring,
+ apr_pool_t *scratch_pool)
+{
+ SVN_ERR_ASSERT((cred_kind && realmstring) || (!cred_kind && !realmstring));
+
+ /* If we have a CRED_KIND and REALMSTRING, we clear out just the
+ cached item (if any). Otherwise, empty the whole hash. */
+ if (cred_kind)
+ {
+ svn_hash_sets(auth_baton->creds_cache,
+ make_cache_key(cred_kind, realmstring, scratch_pool),
+ NULL);
+ }
+ else
+ {
+ apr_hash_clear(auth_baton->creds_cache);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
svn_auth_ssl_server_cert_info_t *
svn_auth_ssl_server_cert_info_dup
(const svn_auth_ssl_server_cert_info_t *info, apr_pool_t *pool)
@@ -382,11 +439,10 @@ svn_auth_ssl_server_cert_info_dup
}
svn_error_t *
-svn_auth_get_platform_specific_provider
- (svn_auth_provider_object_t **provider,
- const char *provider_name,
- const char *provider_type,
- apr_pool_t *pool)
+svn_auth_get_platform_specific_provider(svn_auth_provider_object_t **provider,
+ const char *provider_name,
+ const char *provider_type,
+ apr_pool_t *pool)
{
*provider = NULL;
@@ -399,9 +455,9 @@ svn_auth_get_platform_specific_provider
const char *library_label, *library_name;
const char *provider_function_name, *version_function_name;
library_name = apr_psprintf(pool,
- "libsvn_auth_%s-%d.so.0",
+ "libsvn_auth_%s-%d.so.%d",
provider_name,
- SVN_VER_MAJOR);
+ SVN_VER_MAJOR, SVN_SOVERSION);
library_label = apr_psprintf(pool, "svn_%s", provider_name);
provider_function_name = apr_psprintf(pool,
"svn_auth_get_%s_%s_provider",
@@ -424,7 +480,8 @@ svn_auth_get_platform_specific_provider
check_list[0].version_query = version_function;
check_list[1].label = NULL;
check_list[1].version_query = NULL;
- SVN_ERR(svn_ver_check_list(svn_subr_version(), check_list));
+ SVN_ERR(svn_ver_check_list2(svn_subr_version(), check_list,
+ svn_ver_equal));
}
if (apr_dso_sym(&provider_function_symbol,
dso,
@@ -448,6 +505,13 @@ svn_auth_get_platform_specific_provider
}
else
{
+#if defined(SVN_HAVE_GPG_AGENT)
+ if (strcmp(provider_name, "gpg_agent") == 0 &&
+ strcmp(provider_type, "simple") == 0)
+ {
+ svn_auth_get_gpg_agent_simple_provider(provider, pool);
+ }
+#endif
#ifdef SVN_HAVE_KEYCHAIN_SERVICES
if (strcmp(provider_name, "keychain") == 0 &&
strcmp(provider_type, "simple") == 0)
@@ -477,6 +541,11 @@ svn_auth_get_platform_specific_provider
{
svn_auth_get_windows_ssl_server_trust_provider(provider, pool);
}
+ else if (strcmp(provider_name, "windows") == 0 &&
+ strcmp(provider_type, "ssl_server_authority") == 0)
+ {
+ svn_auth__get_windows_ssl_server_authority_provider(provider, pool);
+ }
#endif
}
@@ -484,40 +553,38 @@ svn_auth_get_platform_specific_provider
}
svn_error_t *
-svn_auth_get_platform_specific_client_providers
- (apr_array_header_t **providers,
- svn_config_t *config,
- apr_pool_t *pool)
+svn_auth_get_platform_specific_client_providers(apr_array_header_t **providers,
+ svn_config_t *config,
+ apr_pool_t *pool)
{
svn_auth_provider_object_t *provider;
const char *password_stores_config_option;
apr_array_header_t *password_stores;
int i;
- if (config)
- {
- svn_config_get(config,
- &password_stores_config_option,
- SVN_CONFIG_SECTION_AUTH,
- SVN_CONFIG_OPTION_PASSWORD_STORES,
- "gnome-keyring,kwallet,keychain,windows-cryptoapi");
- }
- else
- {
- password_stores_config_option = "gnome-keyring,kwallet,keychain,windows-cryptoapi";
- }
+#define SVN__MAYBE_ADD_PROVIDER(list, p) \
+ { if (p) APR_ARRAY_PUSH(list, svn_auth_provider_object_t *) = p; }
+
+#define SVN__DEFAULT_AUTH_PROVIDER_LIST \
+ "gnome-keyring,kwallet,keychain,gpg-agent,windows-cryptoapi"
*providers = apr_array_make(pool, 12, sizeof(svn_auth_provider_object_t *));
- password_stores
- = svn_cstring_split(password_stores_config_option, " ,", TRUE, pool);
+ /* Fetch the configured list of password stores, and split them into
+ an array. */
+ svn_config_get(config,
+ &password_stores_config_option,
+ SVN_CONFIG_SECTION_AUTH,
+ SVN_CONFIG_OPTION_PASSWORD_STORES,
+ SVN__DEFAULT_AUTH_PROVIDER_LIST);
+ password_stores = svn_cstring_split(password_stores_config_option,
+ " ,", TRUE, pool);
for (i = 0; i < password_stores->nelts; i++)
{
const char *password_store = APR_ARRAY_IDX(password_stores, i,
const char *);
-
/* GNOME Keyring */
if (apr_strnatcmp(password_store, "gnome-keyring") == 0)
{
@@ -525,90 +592,68 @@ svn_auth_get_platform_specific_client_providers
"gnome_keyring",
"simple",
pool));
-
- if (provider)
- APR_ARRAY_PUSH(*providers, svn_auth_provider_object_t *) = provider;
+ SVN__MAYBE_ADD_PROVIDER(*providers, provider);
SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
"gnome_keyring",
"ssl_client_cert_pw",
pool));
-
- if (provider)
- APR_ARRAY_PUSH(*providers, svn_auth_provider_object_t *) = provider;
-
- continue;
+ SVN__MAYBE_ADD_PROVIDER(*providers, provider);
+ }
+ /* GPG-AGENT */
+ else if (apr_strnatcmp(password_store, "gpg-agent") == 0)
+ {
+ SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
+ "gpg_agent",
+ "simple",
+ pool));
+ SVN__MAYBE_ADD_PROVIDER(*providers, provider);
}
-
/* KWallet */
- if (apr_strnatcmp(password_store, "kwallet") == 0)
+ else if (apr_strnatcmp(password_store, "kwallet") == 0)
{
SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
"kwallet",
"simple",
pool));
-
- if (provider)
- APR_ARRAY_PUSH(*providers, svn_auth_provider_object_t *) = provider;
+ SVN__MAYBE_ADD_PROVIDER(*providers, provider);
SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
"kwallet",
"ssl_client_cert_pw",
pool));
- if (provider)
- APR_ARRAY_PUSH(*providers, svn_auth_provider_object_t *) = provider;
-
- continue;
+ SVN__MAYBE_ADD_PROVIDER(*providers, provider);
}
-
/* Keychain */
- if (apr_strnatcmp(password_store, "keychain") == 0)
+ else if (apr_strnatcmp(password_store, "keychain") == 0)
{
SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
"keychain",
"simple",
pool));
-
- if (provider)
- APR_ARRAY_PUSH(*providers, svn_auth_provider_object_t *) = provider;
+ SVN__MAYBE_ADD_PROVIDER(*providers, provider);
SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
"keychain",
"ssl_client_cert_pw",
pool));
-
- if (provider)
- APR_ARRAY_PUSH(*providers, svn_auth_provider_object_t *) = provider;
-
- continue;
+ SVN__MAYBE_ADD_PROVIDER(*providers, provider);
}
-
/* Windows */
- if (apr_strnatcmp(password_store, "windows-cryptoapi") == 0)
+ else if (apr_strnatcmp(password_store, "windows-cryptoapi") == 0)
{
SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
"windows",
"simple",
pool));
-
- if (provider)
- APR_ARRAY_PUSH(*providers, svn_auth_provider_object_t *) = provider;
+ SVN__MAYBE_ADD_PROVIDER(*providers, provider);
SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
"windows",
"ssl_client_cert_pw",
pool));
-
- if (provider)
- APR_ARRAY_PUSH(*providers, svn_auth_provider_object_t *) = provider;
-
- continue;
+ SVN__MAYBE_ADD_PROVIDER(*providers, provider);
}
-
- return svn_error_createf(SVN_ERR_BAD_CONFIG_VALUE, NULL,
- _("Invalid config: unknown password store "
- "'%s'"),
- password_store);
}
return SVN_NO_ERROR;
diff --git a/subversion/libsvn_subr/auth.h b/subversion/libsvn_subr/auth.h
new file mode 100644
index 0000000..0885f6d
--- /dev/null
+++ b/subversion/libsvn_subr/auth.h
@@ -0,0 +1,49 @@
+/*
+ * auth.h : shared stuff internal to the subr library.
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#ifndef SVN_LIBSVN_SUBR_AUTH_H
+#define SVN_LIBSVN_SUBR_AUTH_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "svn_auth.h"
+
+/* Helper for svn_config_{read|write}_auth_data. Return a path to a
+ file within ~/.subversion/auth/ that holds CRED_KIND credentials
+ within REALMSTRING. If no path is available *PATH will be set to
+ NULL. */
+svn_error_t *
+svn_auth__file_path(const char **path,
+ const char *cred_kind,
+ const char *realmstring,
+ const char *config_dir,
+ apr_pool_t *pool);
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* SVN_LIBSVN_SUBR_AUTH_H */
diff --git a/subversion/libsvn_subr/svn_base64.c b/subversion/libsvn_subr/base64.c
index 6076459..97ee3d2 100644
--- a/subversion/libsvn_subr/svn_base64.c
+++ b/subversion/libsvn_subr/base64.c
@@ -34,8 +34,9 @@
#include "svn_error.h"
#include "svn_base64.h"
#include "private/svn_string_private.h"
+#include "private/svn_subr_private.h"
-/* When asked to format the the base64-encoded output as multiple lines,
+/* When asked to format the base64-encoded output as multiple lines,
we put this many chars in each line (plus one new line char) unless
we run out of data.
It is vital for some of the optimizations below that this value is
@@ -208,7 +209,7 @@ static svn_error_t *
encode_data(void *baton, const char *data, apr_size_t *len)
{
struct encode_baton *eb = baton;
- svn_stringbuf_t *encoded = svn_stringbuf_create("", eb->scratch_pool);
+ svn_stringbuf_t *encoded = svn_stringbuf_create_empty(eb->scratch_pool);
apr_size_t enclen;
svn_error_t *err = SVN_NO_ERROR;
@@ -227,7 +228,7 @@ static svn_error_t *
finish_encoding_data(void *baton)
{
struct encode_baton *eb = baton;
- svn_stringbuf_t *encoded = svn_stringbuf_create("", eb->scratch_pool);
+ svn_stringbuf_t *encoded = svn_stringbuf_create_empty(eb->scratch_pool);
apr_size_t enclen;
svn_error_t *err = SVN_NO_ERROR;
@@ -267,7 +268,7 @@ svn_base64_encode_string2(const svn_string_t *str,
svn_boolean_t break_lines,
apr_pool_t *pool)
{
- svn_stringbuf_t *encoded = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *encoded = svn_stringbuf_create_empty(pool);
unsigned char ingroup[3];
size_t ingrouplen = 0;
size_t linelen = 0;
@@ -305,9 +306,9 @@ struct decode_baton {
static APR_INLINE void
decode_group(const unsigned char *in, char *out)
{
- out[0] = (in[0] << 2) | (in[1] >> 4);
- out[1] = ((in[1] & 0xf) << 4) | (in[2] >> 2);
- out[2] = ((in[2] & 0x3) << 6) | in[3];
+ out[0] = (char)((in[0] << 2) | (in[1] >> 4));
+ out[1] = (char)(((in[1] & 0xf) << 4) | (in[2] >> 2));
+ out[2] = (char)(((in[2] & 0x3) << 6) | in[3]);
}
/* Lookup table for base64 characters; reverse_base64[ch] gives a
@@ -414,9 +415,9 @@ decode_bytes(svn_stringbuf_t *str, const char *data, apr_size_t len,
(*inbuflen+len) is encoded data length
(*inbuflen+len)/4 is the number of complete 4-bytes sets
(*inbuflen+len)/4*3 is the number of decoded bytes
- (*inbuflen+len)/4*3+1 is the number of decoded bytes plus a null
+ svn_stringbuf_ensure will add an additional byte for the terminating 0.
*/
- svn_stringbuf_ensure(str, str->len + ((*inbuflen + len) / 4) * 3 + 1);
+ svn_stringbuf_ensure(str, str->len + ((*inbuflen + len) / 4) * 3);
while ( !*done && p < end )
{
@@ -467,7 +468,7 @@ decode_data(void *baton, const char *data, apr_size_t *len)
svn_error_t *err = SVN_NO_ERROR;
/* Decode this block of data. */
- decoded = svn_stringbuf_create("", db->scratch_pool);
+ decoded = svn_stringbuf_create_empty(db->scratch_pool);
decode_bytes(decoded, data, *len, db->buf, &db->buflen, &db->done);
/* Write the output, clean up, go home. */
@@ -513,7 +514,7 @@ svn_base64_decode(svn_stream_t *output, apr_pool_t *pool)
const svn_string_t *
svn_base64_decode_string(const svn_string_t *str, apr_pool_t *pool)
{
- svn_stringbuf_t *decoded = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *decoded = svn_stringbuf_create_empty(pool);
unsigned char ingroup[4];
int ingrouplen = 0;
svn_boolean_t done = FALSE;
@@ -537,7 +538,7 @@ base64_from_checksum(const svn_checksum_t *checksum, apr_pool_t *pool)
unsigned char ingroup[3];
size_t ingrouplen = 0;
size_t linelen = 0;
- checksum_str = svn_stringbuf_create("", pool);
+ checksum_str = svn_stringbuf_create_empty(pool);
encode_bytes(checksum_str, checksum->digest,
svn_checksum_size(checksum), ingroup, &ingrouplen,
@@ -560,7 +561,7 @@ svn_stringbuf_t *
svn_base64_from_md5(unsigned char digest[], apr_pool_t *pool)
{
svn_checksum_t *checksum
- = svn_checksum__from_digest(digest, svn_checksum_md5, pool);
+ = svn_checksum__from_digest_md5(digest, pool);
return base64_from_checksum(checksum, pool);
}
diff --git a/subversion/libsvn_subr/cache-inprocess.c b/subversion/libsvn_subr/cache-inprocess.c
index 8cefe3e..6401f9f 100644
--- a/subversion/libsvn_subr/cache-inprocess.c
+++ b/subversion/libsvn_subr/cache-inprocess.c
@@ -30,6 +30,7 @@
#include "svn_private_config.h"
#include "cache.h"
+#include "private/svn_mutex.h"
/* The (internal) cache object. */
typedef struct inprocess_cache_t {
@@ -80,12 +81,10 @@ typedef struct inprocess_cache_t {
*/
apr_size_t data_size;
-#if APR_HAS_THREADS
/* A lock for intra-process synchronization to the cache, or NULL if
* the cache's creator doesn't feel the cache needs to be
* thread-safe. */
- apr_thread_mutex_t *mutex;
-#endif
+ svn_mutex__t *mutex;
} inprocess_cache_t;
/* A cache page; all items on the page are allocated from the same
@@ -182,39 +181,28 @@ duplicate_key(inprocess_cache_t *cache,
return apr_pmemdup(pool, key, cache->klen);
}
-/* If applicable, locks CACHE's mutex. */
static svn_error_t *
-lock_cache(inprocess_cache_t *cache)
+inprocess_cache_get_internal(char **buffer,
+ apr_size_t *size,
+ inprocess_cache_t *cache,
+ const void *key,
+ apr_pool_t *result_pool)
{
-#if APR_HAS_THREADS
- apr_status_t status;
- if (! cache->mutex)
- return SVN_NO_ERROR;
-
- status = apr_thread_mutex_lock(cache->mutex);
- if (status)
- return svn_error_wrap_apr(status, _("Can't lock cache mutex"));
-#endif
+ struct cache_entry *entry = apr_hash_get(cache->hash, key, cache->klen);
- return SVN_NO_ERROR;
-}
+ *buffer = NULL;
+ if (entry)
+ {
+ SVN_ERR(move_page_to_front(cache, entry->page));
-/* If applicable, unlocks CACHE's mutex, then returns ERR. */
-static svn_error_t *
-unlock_cache(inprocess_cache_t *cache,
- svn_error_t *err)
-{
-#if APR_HAS_THREADS
- apr_status_t status;
- if (! cache->mutex)
- return err;
+ /* duplicate the buffer entry */
+ *buffer = apr_palloc(result_pool, entry->size);
+ memcpy(*buffer, entry->value, entry->size);
- status = apr_thread_mutex_unlock(cache->mutex);
- if (status && !err)
- return svn_error_wrap_apr(status, _("Can't unlock cache mutex"));
-#endif
+ *size = entry->size;
+ }
- return err;
+ return SVN_NO_ERROR;
}
static svn_error_t *
@@ -225,38 +213,25 @@ inprocess_cache_get(void **value_p,
apr_pool_t *result_pool)
{
inprocess_cache_t *cache = cache_void;
- svn_error_t *err = NULL;
- struct cache_entry *entry;
- char* buffer;
-
- SVN_ERR(lock_cache(cache));
-
- entry = apr_hash_get(cache->hash, key, cache->klen);
- if (! entry)
- {
- *found = FALSE;
- return unlock_cache(cache, SVN_NO_ERROR);
- }
-
- SVN_ERR(move_page_to_front(cache, entry->page));
-
- /* duplicate the buffer entry */
- buffer = apr_palloc(result_pool, entry->size);
- memcpy(buffer, entry->value, entry->size);
+ char* buffer = NULL;
+ apr_size_t size;
- /* the cache is no longer being accessed */
- SVN_ERR(unlock_cache(cache, SVN_NO_ERROR));
+ if (key)
+ SVN_MUTEX__WITH_LOCK(cache->mutex,
+ inprocess_cache_get_internal(&buffer,
+ &size,
+ cache,
+ key,
+ result_pool));
/* deserialize the buffer content. Usually, this will directly
modify the buffer content directly.
*/
- *found = TRUE;
- if (entry->value)
- err = cache->deserialize_func(value_p, buffer, entry->size, result_pool);
- else
- *value_p = NULL;
-
- return err;
+ *value_p = NULL;
+ *found = buffer != NULL;
+ return buffer && size
+ ? cache->deserialize_func(value_p, buffer, size, result_pool)
+ : SVN_NO_ERROR;
}
/* Removes PAGE from the LRU list, removes all of its entries from
@@ -292,16 +267,12 @@ erase_page(inprocess_cache_t *cache,
static svn_error_t *
-inprocess_cache_set(void *cache_void,
- const void *key,
- void *value,
- apr_pool_t *scratch_pool)
+inprocess_cache_set_internal(inprocess_cache_t *cache,
+ const void *key,
+ void *value,
+ apr_pool_t *scratch_pool)
{
- inprocess_cache_t *cache = cache_void;
struct cache_entry *existing_entry;
- svn_error_t *err = SVN_NO_ERROR;
-
- SVN_ERR(lock_cache(cache));
existing_entry = apr_hash_get(cache->hash, key, cache->klen);
@@ -333,11 +304,13 @@ inprocess_cache_set(void *cache_void,
cache->data_size -= existing_entry->size;
if (value)
{
- err = cache->serialize_func((char **)&existing_entry->value,
- &existing_entry->size,
- value,
- page->page_pool);
+ SVN_ERR(cache->serialize_func(&existing_entry->value,
+ &existing_entry->size,
+ value,
+ page->page_pool));
cache->data_size += existing_entry->size;
+ if (existing_entry->size == 0)
+ existing_entry->value = NULL;
}
else
{
@@ -345,7 +318,7 @@ inprocess_cache_set(void *cache_void,
existing_entry->size = 0;
}
- goto cleanup;
+ return SVN_NO_ERROR;
}
/* Do we not have a partial page to put it on, but we are allowed to
@@ -383,11 +356,13 @@ inprocess_cache_set(void *cache_void,
new_entry->key = duplicate_key(cache, key, page->page_pool);
if (value)
{
- err = cache->serialize_func((char **)&new_entry->value,
- &new_entry->size,
- value,
- page->page_pool);
+ SVN_ERR(cache->serialize_func(&new_entry->value,
+ &new_entry->size,
+ value,
+ page->page_pool));
cache->data_size += new_entry->size;
+ if (new_entry->size == 0)
+ new_entry->value = NULL;
}
else
{
@@ -395,9 +370,6 @@ inprocess_cache_set(void *cache_void,
new_entry->size = 0;
}
- if (err)
- goto cleanup;
-
/* Add the entry to the page's list. */
new_entry->page = page;
new_entry->next_entry = page->first_entry;
@@ -418,8 +390,25 @@ inprocess_cache_set(void *cache_void,
}
}
- cleanup:
- return unlock_cache(cache, err);
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+inprocess_cache_set(void *cache_void,
+ const void *key,
+ void *value,
+ apr_pool_t *scratch_pool)
+{
+ inprocess_cache_t *cache = cache_void;
+
+ if (key)
+ SVN_MUTEX__WITH_LOCK(cache->mutex,
+ inprocess_cache_set_internal(cache,
+ key,
+ value,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
}
/* Baton type for svn_cache__iter. */
@@ -455,10 +444,33 @@ inprocess_cache_iter(svn_boolean_t *completed,
b.user_cb = user_cb;
b.user_baton = user_baton;
- SVN_ERR(lock_cache(cache));
- return unlock_cache(cache,
- svn_iter_apr_hash(completed, cache->hash, iter_cb, &b,
- scratch_pool));
+ SVN_MUTEX__WITH_LOCK(cache->mutex,
+ svn_iter_apr_hash(completed, cache->hash,
+ iter_cb, &b, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+inprocess_cache_get_partial_internal(void **value_p,
+ svn_boolean_t *found,
+ inprocess_cache_t *cache,
+ const void *key,
+ svn_cache__partial_getter_func_t func,
+ void *baton,
+ apr_pool_t *result_pool)
+{
+ struct cache_entry *entry = apr_hash_get(cache->hash, key, cache->klen);
+ if (! entry)
+ {
+ *found = FALSE;
+ return SVN_NO_ERROR;
+ }
+
+ SVN_ERR(move_page_to_front(cache, entry->page));
+
+ *found = TRUE;
+ return func(value_p, entry->value, entry->size, baton, result_pool);
}
static svn_error_t *
@@ -471,23 +483,43 @@ inprocess_cache_get_partial(void **value_p,
apr_pool_t *result_pool)
{
inprocess_cache_t *cache = cache_void;
- struct cache_entry *entry;
- SVN_ERR(lock_cache(cache));
+ if (key)
+ SVN_MUTEX__WITH_LOCK(cache->mutex,
+ inprocess_cache_get_partial_internal(value_p,
+ found,
+ cache,
+ key,
+ func,
+ baton,
+ result_pool));
+ else
+ *found = FALSE;
- entry = apr_hash_get(cache->hash, key, cache->klen);
- if (! entry)
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+inprocess_cache_set_partial_internal(inprocess_cache_t *cache,
+ const void *key,
+ svn_cache__partial_setter_func_t func,
+ void *baton,
+ apr_pool_t *scratch_pool)
+{
+ struct cache_entry *entry = apr_hash_get(cache->hash, key, cache->klen);
+ if (entry)
{
- *found = FALSE;
- return unlock_cache(cache, SVN_NO_ERROR);
+ SVN_ERR(move_page_to_front(cache, entry->page));
+
+ cache->data_size -= entry->size;
+ SVN_ERR(func(&entry->value,
+ &entry->size,
+ baton,
+ entry->page->page_pool));
+ cache->data_size += entry->size;
}
- SVN_ERR(move_page_to_front(cache, entry->page));
-
- *found = TRUE;
- return unlock_cache(cache,
- func(value_p, entry->value, entry->size, baton,
- result_pool));
+ return SVN_NO_ERROR;
}
static svn_error_t *
@@ -498,25 +530,16 @@ inprocess_cache_set_partial(void *cache_void,
apr_pool_t *scratch_pool)
{
inprocess_cache_t *cache = cache_void;
- struct cache_entry *entry;
- svn_error_t *err = SVN_NO_ERROR;
-
- SVN_ERR(lock_cache(cache));
- entry = apr_hash_get(cache->hash, key, cache->klen);
- if (! entry)
- return unlock_cache(cache, err);
-
- SVN_ERR(move_page_to_front(cache, entry->page));
+ if (key)
+ SVN_MUTEX__WITH_LOCK(cache->mutex,
+ inprocess_cache_set_partial_internal(cache,
+ key,
+ func,
+ baton,
+ scratch_pool));
- cache->data_size -= entry->size;
- err = func((char **)&entry->value,
- &entry->size,
- baton,
- entry->page->page_pool);
- cache->data_size += entry->size;
-
- return unlock_cache(cache, err);
+ return SVN_NO_ERROR;
}
static svn_boolean_t
@@ -532,15 +555,10 @@ inprocess_cache_is_cachable(void *cache_void, apr_size_t size)
}
static svn_error_t *
-inprocess_cache_get_info(void *cache_void,
- svn_cache__info_t *info,
- svn_boolean_t reset,
- apr_pool_t *result_pool)
+inprocess_cache_get_info_internal(inprocess_cache_t *cache,
+ svn_cache__info_t *info,
+ apr_pool_t *result_pool)
{
- inprocess_cache_t *cache = cache_void;
-
- SVN_ERR(lock_cache(cache));
-
info->id = apr_pstrdup(result_pool, cache->id);
info->used_entries = apr_hash_count(cache->hash);
@@ -552,10 +570,26 @@ inprocess_cache_get_info(void *cache_void,
+ cache->items_per_page * sizeof(struct cache_page)
+ info->used_entries * sizeof(struct cache_entry);
- return unlock_cache(cache, SVN_NO_ERROR);
+ return SVN_NO_ERROR;
}
+static svn_error_t *
+inprocess_cache_get_info(void *cache_void,
+ svn_cache__info_t *info,
+ svn_boolean_t reset,
+ apr_pool_t *result_pool)
+{
+ inprocess_cache_t *cache = cache_void;
+
+ SVN_MUTEX__WITH_LOCK(cache->mutex,
+ inprocess_cache_get_info_internal(cache,
+ info,
+ result_pool));
+
+ return SVN_NO_ERROR;
+}
+
static svn_cache__vtable_t inprocess_cache_vtable = {
inprocess_cache_get,
inprocess_cache_set,
@@ -602,17 +636,7 @@ svn_cache__create_inprocess(svn_cache__t **cache_p,
/* The sentinel doesn't need a pool. (We're happy to crash if we
* accidentally try to treat it like a real page.) */
-#if APR_HAS_THREADS
- if (thread_safe)
- {
- apr_status_t status = apr_thread_mutex_create(&(cache->mutex),
- APR_THREAD_MUTEX_DEFAULT,
- pool);
- if (status)
- return svn_error_wrap_apr(status,
- _("Can't create cache mutex"));
- }
-#endif
+ SVN_ERR(svn_mutex__init(&cache->mutex, thread_safe, pool));
cache->cache_pool = pool;
diff --git a/subversion/libsvn_subr/cache-membuffer.c b/subversion/libsvn_subr/cache-membuffer.c
index 6122945..7aa90cd 100644
--- a/subversion/libsvn_subr/cache-membuffer.c
+++ b/subversion/libsvn_subr/cache-membuffer.c
@@ -23,6 +23,8 @@
#include <assert.h>
#include <apr_md5.h>
+#include <apr_thread_rwlock.h>
+
#include "svn_pools.h"
#include "svn_checksum.h"
#include "md5.h"
@@ -30,11 +32,13 @@
#include "cache.h"
#include "svn_string.h"
#include "private/svn_dep_compat.h"
+#include "private/svn_mutex.h"
+#include "private/svn_pseudo_md5.h"
/*
* This svn_cache__t implementation actually consists of two parts:
* a shared (per-process) singleton membuffer cache instance and shallow
- * svn_cache__t frontend instances that each use different key spaces.
+ * svn_cache__t front-end instances that each use different key spaces.
* For data management, they all forward to the singleton membuffer cache.
*
* A membuffer cache consists of two parts:
@@ -55,14 +59,14 @@
* The data buffer usage information is implicitly given by the directory
* entries. Every USED entry has a reference to the previous and the next
* used dictionary entry and this double-linked list is ordered by the
- * offsets of their item data within the the data buffer. So removing data,
+ * offsets of their item data within the data buffer. So removing data,
* for instance, is done simply by unlinking it from the chain, implicitly
* marking the entry as well as the data buffer section previously
* associated to it as unused.
*
* Insertion can occur at only one, sliding position. It is marked by its
* offset in the data buffer plus the index of the first used entry at or
- * behind that position. If this gap is too small to accomodate the new
+ * behind that position. If this gap is too small to accommodate the new
* item, the insertion window is extended as described below. The new entry
* will always be inserted at the bottom end of the window and since the
* next used entry is known, properly sorted insertion is possible.
@@ -76,7 +80,7 @@
* get evicted, it is moved to the begin of that window and the window is
* moved.
*
- * Moreover, the entry's hits get halfed to make that entry more likely to
+ * Moreover, the entry's hits get halved to make that entry more likely to
* be removed the next time the sliding insertion / removal window comes by.
* As a result, frequently used entries are likely not to be dropped until
* they get not used for a while. Also, even a cache thrashing situation
@@ -97,33 +101,61 @@
* on their hash key.
*/
-/* A 4-way associative cache seems to be the best compromise between
- * performance (worst-case lookups) and efficiency-loss due to collisions.
+/* APR's read-write lock implementation on Windows is horribly inefficient.
+ * Even with very low contention a runtime overhead of 35% percent has been
+ * measured for 'svn-bench null-export' over ra_serf.
*
- * This value may be changed to any positive integer.
+ * Use a simple mutex on Windows. Because there is one mutex per segment,
+ * large machines should (and usually can) be configured with large caches
+ * such that read contention is kept low. This is basically the situation
+ * we head before 1.8.
*/
-#define GROUP_SIZE 4
+#ifdef WIN32
+# define USE_SIMPLE_MUTEX 1
+#else
+# define USE_SIMPLE_MUTEX 0
+#endif
-/* We use MD5 for digest size and speed (SHA1 is >2x slower, for instance).
+/* A 16-way associative cache seems to be a good compromise between
+ * performance (worst-case lookups) and efficiency-loss due to collisions.
+ *
+ * This value may be changed to any positive integer.
*/
-#define KEY_SIZE APR_MD5_DIGESTSIZE
+#define GROUP_SIZE 16
-/* For more efficient copy operations, let'a align all data items properly.
+/* For more efficient copy operations, let's align all data items properly.
* Must be a power of 2.
*/
#define ITEM_ALIGNMENT 16
-/* Don't create cache segments smaller than this value unless the total
- * cache size itself is smaller.
+/* By default, don't create cache segments smaller than this value unless
+ * the total cache size itself is smaller.
*/
-#define MIN_SEGMENT_SIZE 0x2000000ull
+#define DEFAULT_MIN_SEGMENT_SIZE APR_UINT64_C(0x2000000)
+
+/* The minimum segment size we will allow for multi-segmented caches
+ */
+#define MIN_SEGMENT_SIZE APR_UINT64_C(0x10000)
+
+/* The maximum number of segments allowed. Larger numbers reduce the size
+ * of each segment, in turn reducing the max size of a cachable item.
+ * Also, each segment gets its own lock object. The actual number supported
+ * by the OS may therefore be lower and svn_cache__membuffer_cache_create
+ * may return an error.
+ */
+#define MAX_SEGMENT_COUNT 0x10000
+
+/* As of today, APR won't allocate chunks of 4GB or more. So, limit the
+ * segment size to slightly below that.
+ */
+#define MAX_SEGMENT_SIZE APR_UINT64_C(0xffff0000)
/* We don't mark the initialization status for every group but initialize
* a number of groups at once. That will allow for a very small init flags
* vector that is likely to fit into the CPU caches even for fairly large
- * caches. For instance, the default of 32 means 8x32 groups per byte, i.e.
- * 8 flags/byte x 32 groups/flag x 4 entries/group x 40 index bytes/entry
- * x 16 cache bytes/index byte = 1kB init vector / 640MB cache.
+ * membuffer caches. For instance, the default of 32 means 8x32 groups per
+ * byte, i.e. 8 flags/byte x 32 groups/flag x 8 entries/group x 40 index
+ * bytes/entry x 8 cache bytes/index byte = 1kB init vector / 640MB cache.
*/
#define GROUP_INIT_GRANULARITY 32
@@ -131,9 +163,18 @@
*/
#define NO_INDEX APR_UINT32_MAX
-/* Invalid buffer offset reference value. Equivalent to APR_UINT32_T(-1)
+/* To save space in our group structure, we only use 32 bit size values
+ * and, therefore, limit the size of each entry to just below 4GB.
+ * Supporting larger items is not a good idea as the data transfer
+ * to and from the cache would block other threads for a very long time.
*/
-#define NO_OFFSET APR_UINT64_MAX
+#define MAX_ITEM_SIZE ((apr_uint32_t)(0 - ITEM_ALIGNMENT))
+
+/* A 16 byte key type. We use that to identify cache entries.
+ * The notation as just two integer values will cause many compilers
+ * to create better code.
+ */
+typedef apr_uint64_t entry_key_t[2];
/* Debugging / corruption detection support.
* If you define this macro, the getter functions will performed expensive
@@ -194,25 +235,25 @@ static void get_prefix_tail(const char *prefix, char *prefix_tail)
/* Initialize all members of TAG except for the content hash.
*/
-static svn_error_t* store_key_part(entry_tag_t *tag,
- unsigned char *prefix_hash,
+static svn_error_t *store_key_part(entry_tag_t *tag,
+ entry_key_t prefix_hash,
char *prefix_tail,
const void *key,
- apr_size_t size,
+ apr_size_t key_len,
apr_pool_t *pool)
{
svn_checksum_t *checksum;
SVN_ERR(svn_checksum(&checksum,
svn_checksum_md5,
key,
- size,
+ key_len,
pool));
memcpy(tag->prefix_hash, prefix_hash, sizeof(tag->prefix_hash));
memcpy(tag->key_hash, checksum->digest, sizeof(tag->key_hash));
memcpy(tag->prefix_tail, prefix_tail, sizeof(tag->prefix_tail));
- tag->key_len = size;
+ tag->key_len = key_len;
return SVN_NO_ERROR;
}
@@ -255,16 +296,17 @@ static svn_error_t* assert_equal_tags(const entry_tag_t *lhs,
return SVN_NO_ERROR;
}
-/* Reoccuring code snippets.
+/* Reoccurring code snippets.
*/
#define DEBUG_CACHE_MEMBUFFER_TAG_ARG entry_tag_t *tag,
-#define DEBUG_CACHE_MEMBUFFER_TAG &tag,
+#define DEBUG_CACHE_MEMBUFFER_TAG tag,
#define DEBUG_CACHE_MEMBUFFER_INIT_TAG \
- entry_tag_t tag; \
- SVN_ERR(store_key_part(&tag, \
+ entry_tag_t _tag; \
+ entry_tag_t *tag = &_tag; \
+ SVN_ERR(store_key_part(tag, \
cache->prefix, \
cache->prefix_tail, \
key, \
@@ -286,24 +328,22 @@ static svn_error_t* assert_equal_tags(const entry_tag_t *lhs,
/* A single dictionary entry. Since all entries will be allocated once
* during cache creation, those entries might be either used or unused.
* An entry is used if and only if it is contained in the doubly-linked
- * list of used entries. An entry is unused if and only if its OFFSET
- * member is NO_OFFSET.
+ * list of used entries.
*/
typedef struct entry_t
{
/* Identifying the data item. Only valid for used entries.
*/
- unsigned char key [KEY_SIZE];
+ entry_key_t key;
- /* If NO_OFFSET, the entry is not in used. Otherwise, it is the offset
- * of the cached item's serialized data within the data buffer.
+ /* The offset of the cached item's serialized data within the data buffer.
*/
apr_uint64_t offset;
/* Size of the serialized item data. May be 0.
* Only valid for used entries.
*/
- apr_uint32_t size;
+ apr_size_t size;
/* Number of (read) hits for this entry. Will be reset upon write.
* Only valid for used entries.
@@ -332,9 +372,16 @@ typedef struct entry_t
#endif
} entry_t;
-/* We group dictionary entries to make this GROUP-SIZE-way assicative.
+/* We group dictionary entries to make this GROUP-SIZE-way associative.
*/
-typedef entry_t entry_group_t[GROUP_SIZE];
+typedef struct entry_group_t
+{
+ /* number of entries used [0 .. USED-1] */
+ apr_uint32_t used;
+
+ /* the actual entries */
+ entry_t entries[GROUP_SIZE];
+} entry_group_t;
/* The cache header structure.
*/
@@ -390,13 +437,18 @@ struct svn_membuffer_t
*/
apr_uint64_t current_data;
- /* Total number of data buffer bytes in use. This is for statistics only.
+ /* Total number of data buffer bytes in use.
*/
apr_uint64_t data_used;
+ /* Largest entry size that we would accept. For total cache sizes
+ * less than 4TB (sic!), this is determined by the total cache size.
+ */
+ apr_uint64_t max_entry_size;
+
/* Number of used dictionary entries, i.e. number of cached items.
- * In conjunction with hit_cout, this is used calculate the average
+ * In conjunction with hit_count, this is used calculate the average
* hit count as part of the randomized LFU algorithm.
*/
apr_uint32_t used_entries;
@@ -428,7 +480,17 @@ struct svn_membuffer_t
* the cache's creator doesn't feel the cache needs to be
* thread-safe.
*/
- apr_thread_mutex_t *mutex;
+# if USE_SIMPLE_MUTEX
+ svn_mutex__t *lock;
+# else
+ apr_thread_rwlock_t *lock;
+# endif
+
+ /* If set, write access will wait until they get exclusive access.
+ * Otherwise, they will become no-ops if the segment is currently
+ * read-locked. Only used when LOCK is an r/w lock.
+ */
+ svn_boolean_t allow_blocking_writes;
#endif
};
@@ -440,50 +502,158 @@ struct svn_membuffer_t
*/
#define ALIGN_POINTER(pointer) ((void*)ALIGN_VALUE((apr_size_t)(char*)(pointer)))
-/* Acquire the cache mutex, if necessary.
+/* If locking is supported for CACHE, acquire a read lock for it.
*/
static svn_error_t *
-lock_cache(svn_membuffer_t *cache)
+read_lock_cache(svn_membuffer_t *cache)
{
#if APR_HAS_THREADS
- if (cache->mutex)
+# if USE_SIMPLE_MUTEX
+ return svn_mutex__lock(cache->lock);
+# else
+ if (cache->lock)
{
- apr_status_t status = apr_thread_mutex_lock(cache->mutex);
+ apr_status_t status = apr_thread_rwlock_rdlock(cache->lock);
if (status)
return svn_error_wrap_apr(status, _("Can't lock cache mutex"));
}
+# endif
+#endif
+ return SVN_NO_ERROR;
+}
+
+/* If locking is supported for CACHE, acquire a write lock for it.
+ */
+static svn_error_t *
+write_lock_cache(svn_membuffer_t *cache, svn_boolean_t *success)
+{
+#if APR_HAS_THREADS
+# if USE_SIMPLE_MUTEX
+
+ return svn_mutex__lock(cache->lock);
+
+# else
+
+ if (cache->lock)
+ {
+ apr_status_t status;
+ if (cache->allow_blocking_writes)
+ {
+ status = apr_thread_rwlock_wrlock(cache->lock);
+ }
+ else
+ {
+ status = apr_thread_rwlock_trywrlock(cache->lock);
+ if (SVN_LOCK_IS_BUSY(status))
+ {
+ *success = FALSE;
+ status = APR_SUCCESS;
+ }
+ }
+
+ if (status)
+ return svn_error_wrap_apr(status,
+ _("Can't write-lock cache mutex"));
+ }
+
+# endif
#endif
+ return SVN_NO_ERROR;
+}
+
+/* If locking is supported for CACHE, acquire an unconditional write lock
+ * for it.
+ */
+static svn_error_t *
+force_write_lock_cache(svn_membuffer_t *cache)
+{
+#if APR_HAS_THREADS
+# if USE_SIMPLE_MUTEX
+
+ return svn_mutex__lock(cache->lock);
+
+# else
+ apr_status_t status = apr_thread_rwlock_wrlock(cache->lock);
+ if (status)
+ return svn_error_wrap_apr(status,
+ _("Can't write-lock cache mutex"));
+
+# endif
+#endif
return SVN_NO_ERROR;
}
-/* Release the cache mutex, if necessary.
+/* If locking is supported for CACHE, release the current lock
+ * (read or write).
*/
static svn_error_t *
unlock_cache(svn_membuffer_t *cache, svn_error_t *err)
{
#if APR_HAS_THREADS
- if (cache->mutex)
+# if USE_SIMPLE_MUTEX
+
+ return svn_mutex__unlock(cache->lock, err);
+
+# else
+
+ if (cache->lock)
{
- apr_status_t status = apr_thread_mutex_unlock(cache->mutex);
+ apr_status_t status = apr_thread_rwlock_unlock(cache->lock);
if (err)
return err;
if (status)
return svn_error_wrap_apr(status, _("Can't unlock cache mutex"));
}
-#endif
+# endif
+#endif
return err;
}
+/* If supported, guard the execution of EXPR with a read lock to cache.
+ * Macro has been modeled after SVN_MUTEX__WITH_LOCK.
+ */
+#define WITH_READ_LOCK(cache, expr) \
+do { \
+ SVN_ERR(read_lock_cache(cache)); \
+ SVN_ERR(unlock_cache(cache, (expr))); \
+} while (0)
+
+/* If supported, guard the execution of EXPR with a write lock to cache.
+ * Macro has been modeled after SVN_MUTEX__WITH_LOCK.
+ *
+ * The write lock process is complicated if we don't allow to wait for
+ * the lock: If we didn't get the lock, we may still need to remove an
+ * existing entry for the given key because that content is now stale.
+ * Once we discovered such an entry, we unconditionally do a blocking
+ * wait for the write lock. In case no old content could be found, a
+ * failing lock attempt is simply a no-op and we exit the macro.
+ */
+#define WITH_WRITE_LOCK(cache, expr) \
+do { \
+ svn_boolean_t got_lock = TRUE; \
+ SVN_ERR(write_lock_cache(cache, &got_lock)); \
+ if (!got_lock) \
+ { \
+ svn_boolean_t exists; \
+ SVN_ERR(entry_exists(cache, group_index, key, &exists)); \
+ if (exists) \
+ SVN_ERR(force_write_lock_cache(cache)); \
+ else \
+ break; \
+ } \
+ SVN_ERR(unlock_cache(cache, (expr))); \
+} while (0)
+
/* Resolve a dictionary entry reference, i.e. return the entry
* for the given IDX.
*/
static APR_INLINE entry_t *
get_entry(svn_membuffer_t *cache, apr_uint32_t idx)
{
- return &cache->directory[idx / GROUP_SIZE][idx % GROUP_SIZE];
+ return &cache->directory[idx / GROUP_SIZE].entries[idx % GROUP_SIZE];
}
/* Get the entry references for the given ENTRY.
@@ -491,7 +661,11 @@ get_entry(svn_membuffer_t *cache, apr_uint32_t idx)
static APR_INLINE apr_uint32_t
get_index(svn_membuffer_t *cache, entry_t *entry)
{
- return (apr_uint32_t)(entry - (entry_t *)cache->directory);
+ apr_size_t group_index
+ = ((char *)entry - (char *)cache->directory) / sizeof(entry_group_t);
+
+ return (apr_uint32_t)group_index * GROUP_SIZE
+ + (apr_uint32_t)(entry - cache->directory[group_index].entries);
}
/* Remove the used ENTRY from the CACHE, i.e. make it "unused".
@@ -500,11 +674,16 @@ get_index(svn_membuffer_t *cache, entry_t *entry)
static void
drop_entry(svn_membuffer_t *cache, entry_t *entry)
{
+ /* the group that ENTRY belongs to plus a number of useful index values
+ */
apr_uint32_t idx = get_index(cache, entry);
+ apr_uint32_t group_index = idx / GROUP_SIZE;
+ entry_group_t *group = &cache->directory[group_index];
+ apr_uint32_t last_in_group = group_index * GROUP_SIZE + group->used - 1;
/* Only valid to be called for used entries.
*/
- assert(entry->offset != NO_OFFSET);
+ assert(idx <= last_in_group);
/* update global cache usage counters
*/
@@ -526,7 +705,7 @@ drop_entry(svn_membuffer_t *cache, entry_t *entry)
/* remove the first entry -> insertion may start at pos 0, now */
cache->current_data = 0;
}
- else
+ else
{
/* insertion may start right behind the previous entry */
entry_t *previous = get_entry(cache, entry->previous);
@@ -547,9 +726,35 @@ drop_entry(svn_membuffer_t *cache, entry_t *entry)
else
get_entry(cache, entry->next)->previous = entry->previous;
- /* Mark the entry as unused.
+ /* Move last entry into hole (if the removed one is not the last used).
+ * We need to do this since all used entries are at the beginning of
+ * the group's entries array.
*/
- entry->offset = NO_OFFSET;
+ if (idx < last_in_group)
+ {
+ /* copy the last used entry to the removed entry's index
+ */
+ *entry = group->entries[group->used-1];
+
+ /* update foreign links to new index
+ */
+ if (last_in_group == cache->next)
+ cache->next = idx;
+
+ if (entry->previous == NO_INDEX)
+ cache->first = idx;
+ else
+ get_entry(cache, entry->previous)->next = idx;
+
+ if (entry->next == NO_INDEX)
+ cache->last = idx;
+ else
+ get_entry(cache, entry->next)->previous = idx;
+ }
+
+ /* Update the number of used entries.
+ */
+ group->used--;
}
/* Insert ENTRY into the chain of used dictionary entries. The entry's
@@ -559,21 +764,28 @@ drop_entry(svn_membuffer_t *cache, entry_t *entry)
static void
insert_entry(svn_membuffer_t *cache, entry_t *entry)
{
+ /* the group that ENTRY belongs to plus a number of useful index values
+ */
apr_uint32_t idx = get_index(cache, entry);
+ apr_uint32_t group_index = idx / GROUP_SIZE;
+ entry_group_t *group = &cache->directory[group_index];
entry_t *next = cache->next == NO_INDEX
? NULL
: get_entry(cache, cache->next);
/* The entry must start at the beginning of the insertion window.
+ * It must also be the first unused entry in the group.
*/
assert(entry->offset == cache->current_data);
+ assert(idx == group_index * GROUP_SIZE + group->used);
cache->current_data = ALIGN_VALUE(entry->offset + entry->size);
- /* update global cache usage counters
+ /* update usage counters
*/
cache->used_entries++;
cache->data_used += entry->size;
entry->hit_count = 0;
+ group->used++;
/* update entry chain
*/
@@ -608,47 +820,28 @@ insert_entry(svn_membuffer_t *cache, entry_t *entry)
else
cache->first = idx;
}
+
+ /* The current insertion position must never point outside our
+ * data buffer.
+ */
+ assert(cache->current_data <= cache->data_size);
}
-/* Map a KEY of length LEN to the CACHE and group that shall contain the
- * respective item. Return the hash value in TO_FIND. Returns -1 upon error.
+/* Map a KEY of 16 bytes to the CACHE and group that shall contain the
+ * respective item.
*/
static apr_uint32_t
get_group_index(svn_membuffer_t **cache,
- const void *key,
- apr_size_t len,
- unsigned char *to_find,
- apr_pool_t *pool)
+ entry_key_t key)
{
- apr_uint32_t hash = 0;
- int i;
-
- /* calculate a hash value for the key */
- svn_checksum_t *checksum;
- svn_error_t *err;
-
- err = svn_checksum(&checksum, svn_checksum_md5, key, len, pool);
- if (err != NULL)
- {
- svn_error_clear(err);
- return NO_INDEX;
- }
-
- memcpy(to_find, checksum->digest, APR_MD5_DIGESTSIZE);
-
- /* select the cache segment to use */
- *cache = &(*cache)[to_find[0] & ((*cache)->segment_count -1)];
-
- /* Get the group that *must* contain the entry. Fold the hash value
- * just to be sure (it should not be necessary for perfect hashes).
- */
- for (i = 0; i < sizeof(to_find) / sizeof(apr_uint32_t); ++i)
- hash += ((apr_uint32_t*)to_find)[i] ^ ((hash >> 19) || (hash << 13));
+ svn_membuffer_t *segment0 = *cache;
- return hash % (*cache)->group_count;
+ /* select the cache segment to use. they have all the same group_count */
+ *cache = &segment0[key[0] & (segment0->segment_count -1)];
+ return key[1] % segment0->group_count;
}
-/* Reduce the hit count of ENTRY and update the accumunated hit info
+/* Reduce the hit count of ENTRY and update the accumulated hit info
* in CACHE accordingly.
*/
static APR_INLINE void
@@ -660,26 +853,28 @@ let_entry_age(svn_membuffer_t *cache, entry_t *entry)
entry->hit_count -= hits_removed;
}
-/* Returns 0 if the entry group idenified by GROUP_INDEX in CACHE has not
- * been intialized, yet. In that case, this group can not data. Otherwise,
+/* Returns 0 if the entry group identified by GROUP_INDEX in CACHE has not
+ * been initialized, yet. In that case, this group can not data. Otherwise,
* a non-zero value is returned.
*/
static APR_INLINE unsigned char
is_group_initialized(svn_membuffer_t *cache, apr_uint32_t group_index)
{
- unsigned char flags = cache->group_initialized
- [group_index / (8 * GROUP_INIT_GRANULARITY)];
- unsigned char bit_mask = 1 << ((group_index / GROUP_INIT_GRANULARITY) % 8);
+ unsigned char flags
+ = cache->group_initialized[group_index / (8 * GROUP_INIT_GRANULARITY)];
+ unsigned char bit_mask
+ = (unsigned char)(1 << ((group_index / GROUP_INIT_GRANULARITY) % 8));
+
return flags & bit_mask;
}
/* Initializes the section of the directory in CACHE that contains
- * the entry group indentified by GROUP_INDEX. */
+ * the entry group identified by GROUP_INDEX. */
static void
initialize_group(svn_membuffer_t *cache, apr_uint32_t group_index)
{
unsigned char bit_mask;
- apr_uint32_t i, j;
+ apr_uint32_t i;
/* range of groups to initialize due to GROUP_INIT_GRANULARITY */
apr_uint32_t first_index =
@@ -689,11 +884,11 @@ initialize_group(svn_membuffer_t *cache, apr_uint32_t group_index)
last_index = cache->group_count;
for (i = first_index; i < last_index; ++i)
- for (j = 0; j < GROUP_SIZE; j++)
- cache->directory[i][j].offset = NO_OFFSET;
+ cache->directory[i].used = 0;
/* set the "initialized" bit for these groups */
- bit_mask = 1 << ((group_index / GROUP_INIT_GRANULARITY) % 8);
+ bit_mask
+ = (unsigned char)(1 << ((group_index / GROUP_INIT_GRANULARITY) % 8));
cache->group_initialized[group_index / (8 * GROUP_INIT_GRANULARITY)]
|= bit_mask;
}
@@ -713,16 +908,16 @@ initialize_group(svn_membuffer_t *cache, apr_uint32_t group_index)
static entry_t *
find_entry(svn_membuffer_t *cache,
apr_uint32_t group_index,
- unsigned char *to_find,
+ const apr_uint64_t to_find[2],
svn_boolean_t find_empty)
{
- entry_t *group;
+ entry_group_t *group;
entry_t *entry = NULL;
- int i;
+ apr_size_t i;
/* get the group that *must* contain the entry
*/
- group = &cache->directory[group_index][0];
+ group = &cache->directory[group_index];
/* If the entry group has not been initialized, yet, there is no data.
*/
@@ -731,10 +926,11 @@ find_entry(svn_membuffer_t *cache,
if (find_empty)
{
initialize_group(cache, group_index);
- entry = group;
+ entry = &group->entries[0];
/* initialize entry for the new key */
- memcpy(entry->key, to_find, KEY_SIZE);
+ entry->key[0] = to_find[0];
+ entry->key[1] = to_find[1];
}
return entry;
@@ -742,54 +938,53 @@ find_entry(svn_membuffer_t *cache,
/* try to find the matching entry
*/
- for (i = 0; i < GROUP_SIZE; ++i)
- if (group[i].offset != NO_OFFSET &&
- !memcmp(to_find, group[i].key, KEY_SIZE))
+ for (i = 0; i < group->used; ++i)
+ if ( to_find[0] == group->entries[i].key[0]
+ && to_find[1] == group->entries[i].key[1])
{
/* found it
*/
- entry = &group[i];
+ entry = &group->entries[i];
if (find_empty)
drop_entry(cache, entry);
-
- return entry;
+ else
+ return entry;
}
/* None found. Are we looking for a free entry?
*/
if (find_empty)
{
- /* look for an empty entry and return that ...
- */
- for (i = 0; i < GROUP_SIZE; ++i)
- if (group[i].offset == NO_OFFSET)
- {
- entry = &group[i];
- break;
- }
-
- /* ... or, if none is empty, delete the oldest entry
+ /* if there is no empty entry, delete the oldest entry
*/
- if (entry == NULL)
+ if (group->used == GROUP_SIZE)
{
- entry = &group[0];
+ /* every entry gets the same chance of being removed.
+ * Otherwise, we free the first entry, fill it and
+ * remove it again on the next occasion without considering
+ * the other entries in this group.
+ */
+ entry = &group->entries[rand() % GROUP_SIZE];
for (i = 1; i < GROUP_SIZE; ++i)
- if (entry->hit_count > group[i].hit_count)
- entry = &group[i];
+ if (entry->hit_count > group->entries[i].hit_count)
+ entry = &group->entries[i];
/* for the entries that don't have been removed,
- * reduce their hitcounts to put them at a relative
+ * reduce their hit counts to put them at a relative
* disadvantage the next time.
*/
for (i = 0; i < GROUP_SIZE; ++i)
- if (entry != &group[i])
+ if (entry != &group->entries[i])
let_entry_age(cache, entry);
drop_entry(cache, entry);
}
- /* initialize entry for the new key */
- memcpy(entry->key, to_find, KEY_SIZE);
+ /* initialize entry for the new key
+ */
+ entry = &group->entries[group->used];
+ entry->key[0] = to_find[0];
+ entry->key[1] = to_find[1];
}
return entry;
@@ -811,7 +1006,7 @@ move_entry(svn_membuffer_t *cache, entry_t *entry)
/* Move the entry to the start of the empty / insertion section
* (if it isn't there already). Size-aligned moves are legal
- * since all offsets and block sizes share this same aligment.
+ * since all offsets and block sizes share this same alignment.
* Size-aligned moves tend to be faster than non-aligned ones
* because no "odd" bytes at the end need to special treatment.
*/
@@ -827,6 +1022,11 @@ move_entry(svn_membuffer_t *cache, entry_t *entry)
*/
cache->current_data = entry->offset + size;
cache->next = entry->next;
+
+ /* The current insertion position must never point outside our
+ * data buffer.
+ */
+ assert(cache->current_data <= cache->data_size);
}
/* If necessary, enlarge the insertion window until it is at least
@@ -868,7 +1068,7 @@ ensure_data_insertable(svn_membuffer_t *cache, apr_size_t size)
/* leave function as soon as the insertion window is large enough
*/
- if (end - cache->current_data >= size)
+ if (end >= size + cache->current_data)
return TRUE;
/* Don't be too eager to cache data. Smaller items will fit into
@@ -910,22 +1110,38 @@ ensure_data_insertable(svn_membuffer_t *cache, apr_size_t size)
}
else
{
- /* Roll the dice and determine a threshold somewhere from 0 up
- * to 2 times the average hit count.
- */
- average_hit_value = cache->hit_count / cache->used_entries;
- threshold = (average_hit_value+1) * (rand() % 4096) / 2048;
+ svn_boolean_t keep;
- /* Drop the entry from the end of the insertion window, if it
- * has been hit less than the threshold. Otherwise, keep it and
- * move the insertion window one entry further.
- */
- if (entry->hit_count >= threshold)
+ if (cache->hit_count > cache->used_entries)
+ {
+ /* Roll the dice and determine a threshold somewhere from 0 up
+ * to 2 times the average hit count.
+ */
+ average_hit_value = cache->hit_count / cache->used_entries;
+ threshold = (average_hit_value+1) * (rand() % 4096) / 2048;
+
+ keep = entry->hit_count >= threshold;
+ }
+ else
+ {
+ /* general hit count is low. Keep everything that got hit
+ * at all and assign some 50% survival chance to everything
+ * else.
+ */
+ keep = (entry->hit_count > 0) || (rand() & 1);
+ }
+
+ /* keepers or destroyers? */
+ if (keep)
{
move_entry(cache, entry);
}
else
{
+ /* Drop the entry from the end of the insertion window, if it
+ * has been hit less than the threshold. Otherwise, keep it and
+ * move the insertion window one entry further.
+ */
drop_size += entry->size;
drop_entry(cache, entry);
}
@@ -959,55 +1175,82 @@ static void* secure_aligned_alloc(apr_pool_t *pool,
return memory;
}
-/* Create a new membuffer cache instance. If the TOTAL_SIZE of the
- * memory i too small to accomodate the DICTIONARY_SIZE, the latte
- * will be resized automatically. Also, a minumum size is assured
- * for the DICTIONARY_SIZE. THREAD_SAFE may be FALSE, if there will
- * be no concurrent acccess to the CACHE returned.
- *
- * All allocations, in particular the data buffer and dictionary will
- * be made from POOL.
- */
svn_error_t *
svn_cache__membuffer_cache_create(svn_membuffer_t **cache,
apr_size_t total_size,
apr_size_t directory_size,
+ apr_size_t segment_count,
svn_boolean_t thread_safe,
+ svn_boolean_t allow_blocking_writes,
apr_pool_t *pool)
{
svn_membuffer_t *c;
- apr_uint32_t segment_count_shift = 0;
- apr_uint32_t segment_count = 1;
-
apr_uint32_t seg;
apr_uint32_t group_count;
apr_uint32_t group_init_size;
apr_uint64_t data_size;
+ apr_uint64_t max_entry_size;
- /* Determine a reasonable number of cache segments. Segmentation is
- * only useful for multi-threaded / multi-core servers as it reduces
- * lock contention on these systems.
- *
- * But on these systems, we can assume that ample memory has been
- * allocated to this cache. Smaller caches should not be segmented
- * as this severely limites the maximum size of cachable items.
- *
- * Segments should not be smaller than 32MB and max. cachable item
- * size should grow as fast as segmentation.
+ /* Limit the total size (only relevant if we can address > 4GB)
*/
- while (((2 * MIN_SEGMENT_SIZE) << (2 * segment_count_shift)) < total_size)
- ++segment_count_shift;
+#if APR_SIZEOF_VOIDP > 4
+ if (total_size > MAX_SEGMENT_SIZE * MAX_SEGMENT_COUNT)
+ total_size = MAX_SEGMENT_SIZE * MAX_SEGMENT_COUNT;
+#endif
- segment_count = 1 << segment_count_shift;
+ /* Limit the segment count
+ */
+ if (segment_count > MAX_SEGMENT_COUNT)
+ segment_count = MAX_SEGMENT_COUNT;
+ if (segment_count * MIN_SEGMENT_SIZE > total_size)
+ segment_count = total_size / MIN_SEGMENT_SIZE;
+
+ /* The segment count must be a power of two. Round it down as necessary.
+ */
+ while ((segment_count & (segment_count-1)) != 0)
+ segment_count &= segment_count-1;
+
+ /* if the caller hasn't provided a reasonable segment count or the above
+ * limitations set it to 0, derive one from the absolute cache size
+ */
+ if (segment_count < 1)
+ {
+ /* Determine a reasonable number of cache segments. Segmentation is
+ * only useful for multi-threaded / multi-core servers as it reduces
+ * lock contention on these systems.
+ *
+ * But on these systems, we can assume that ample memory has been
+ * allocated to this cache. Smaller caches should not be segmented
+ * as this severely limits the maximum size of cachable items.
+ *
+ * Segments should not be smaller than 32MB and max. cachable item
+ * size should grow as fast as segmentation.
+ */
+
+ apr_uint32_t segment_count_shift = 0;
+ while (((2 * DEFAULT_MIN_SEGMENT_SIZE) << (2 * segment_count_shift))
+ < total_size)
+ ++segment_count_shift;
+
+ segment_count = (apr_size_t)1 << segment_count_shift;
+ }
+
+ /* If we have an extremely large cache (>512 GB), the default segment
+ * size may exceed the amount allocatable as one chunk. In that case,
+ * increase segmentation until we are under the threshold.
+ */
+ while ( total_size / segment_count > MAX_SEGMENT_SIZE
+ && segment_count < MAX_SEGMENT_COUNT)
+ segment_count *= 2;
/* allocate cache as an array of segments / cache objects */
c = apr_palloc(pool, segment_count * sizeof(*c));
/* Split total cache size into segments of equal size
*/
- total_size >>= segment_count_shift;
- directory_size >>= segment_count_shift;
+ total_size /= segment_count;
+ directory_size /= segment_count;
/* prevent pathological conditions: ensure a certain minimum cache size
*/
@@ -1024,24 +1267,36 @@ svn_cache__membuffer_cache_create(svn_membuffer_t **cache,
/* limit the data size to what we can address.
* Note that this cannot overflow since all values are of size_t.
+ * Also, make it a multiple of the item placement granularity to
+ * prevent subtle overflows.
*/
- data_size = total_size - directory_size;
+ data_size = ALIGN_VALUE(total_size - directory_size + 1) - ITEM_ALIGNMENT;
- /* to keep the entries small, we use 32 bit indices only
- * -> we need to ensure that no more then 4G entries exist
+ /* For cache sizes > 4TB, individual cache segments will be larger
+ * than 16GB allowing for >4GB entries. But caching chunks larger
+ * than 4GB is simply not supported.
*/
- group_count = directory_size / sizeof(entry_group_t);
- if (group_count >= (APR_UINT32_MAX / GROUP_SIZE))
- {
- group_count = (APR_UINT32_MAX / GROUP_SIZE) - 1;
- }
+ max_entry_size = data_size / 4 > MAX_ITEM_SIZE
+ ? MAX_ITEM_SIZE
+ : data_size / 4;
+
+ /* to keep the entries small, we use 32 bit indexes only
+ * -> we need to ensure that no more then 4G entries exist.
+ *
+ * Note, that this limit could only be exceeded in a very
+ * theoretical setup with about 1EB of cache.
+ */
+ group_count = directory_size / sizeof(entry_group_t)
+ >= (APR_UINT32_MAX / GROUP_SIZE)
+ ? (APR_UINT32_MAX / GROUP_SIZE) - 1
+ : (apr_uint32_t)(directory_size / sizeof(entry_group_t));
group_init_size = 1 + group_count / (8 * GROUP_INIT_GRANULARITY);
for (seg = 0; seg < segment_count; ++seg)
{
/* allocate buffers and initialize cache members
*/
- c[seg].segment_count = segment_count;
+ c[seg].segment_count = (apr_uint32_t)segment_count;
c[seg].group_count = group_count;
c[seg].directory = apr_pcalloc(pool,
@@ -1059,6 +1314,7 @@ svn_cache__membuffer_cache_create(svn_membuffer_t **cache,
c[seg].data = secure_aligned_alloc(pool, (apr_size_t)data_size, FALSE);
c[seg].current_data = 0;
c[seg].data_used = 0;
+ c[seg].max_entry_size = max_entry_size;
c[seg].used_entries = 0;
c[seg].hit_count = 0;
@@ -1073,27 +1329,34 @@ svn_cache__membuffer_cache_create(svn_membuffer_t **cache,
{
/* We are OOM. There is no need to proceed with "half a cache".
*/
- return svn_error_wrap_apr(APR_ENOMEM, _("OOM"));
+ return svn_error_wrap_apr(APR_ENOMEM, "OOM");
}
#if APR_HAS_THREADS
/* A lock for intra-process synchronization to the cache, or NULL if
* the cache's creator doesn't feel the cache needs to be
- * thread-safe. */
+ * thread-safe.
+ */
+# if USE_SIMPLE_MUTEX
+
+ SVN_ERR(svn_mutex__init(&c[seg].lock, thread_safe, pool));
+
+# else
- c[seg].mutex = NULL;
+ c[seg].lock = NULL;
if (thread_safe)
{
apr_status_t status =
- apr_thread_mutex_create(&(c[seg].mutex),
- APR_THREAD_MUTEX_DEFAULT,
- pool);
+ apr_thread_rwlock_create(&(c[seg].lock), pool);
if (status)
return svn_error_wrap_apr(status, _("Can't create cache mutex"));
}
-#else
- if (thread_safe)
- return svn_error_wrap_apr(APR_ENOTIMPL, _("APR doesn't support threads"));
+
+# endif
+
+ /* Select the behavior of write operations.
+ */
+ c[seg].allow_blocking_writes = allow_blocking_writes;
#endif
}
@@ -1103,55 +1366,101 @@ svn_cache__membuffer_cache_create(svn_membuffer_t **cache,
return SVN_NO_ERROR;
}
+/* Look for the cache entry in group GROUP_INDEX of CACHE, identified
+ * by the hash value TO_FIND and set *FOUND accordingly.
+ *
+ * Note: This function requires the caller to serialize access.
+ * Don't call it directly, call entry_exists instead.
+ */
+static svn_error_t *
+entry_exists_internal(svn_membuffer_t *cache,
+ apr_uint32_t group_index,
+ entry_key_t to_find,
+ svn_boolean_t *found)
+{
+ *found = find_entry(cache, group_index, to_find, FALSE) != NULL;
+ return SVN_NO_ERROR;
+}
+
+/* Look for the cache entry in group GROUP_INDEX of CACHE, identified
+ * by the hash value TO_FIND and set *FOUND accordingly.
+ */
+static svn_error_t *
+entry_exists(svn_membuffer_t *cache,
+ apr_uint32_t group_index,
+ entry_key_t to_find,
+ svn_boolean_t *found)
+{
+ WITH_READ_LOCK(cache,
+ entry_exists_internal(cache,
+ group_index,
+ to_find,
+ found));
-/* Try to insert the ITEM and use the KEY to unqiuely identify it.
+ return SVN_NO_ERROR;
+}
+
+
+/* Try to insert the serialized item given in BUFFER with SIZE into
+ * the group GROUP_INDEX of CACHE and uniquely identify it by hash
+ * value TO_FIND.
+ *
* However, there is no guarantee that it will actually be put into
- * the cache. If there is already some data associated to the KEY,
+ * the cache. If there is already some data associated with TO_FIND,
* it will be removed from the cache even if the new data cannot
* be inserted.
*
- * The SERIALIZER is called to transform the ITEM into a single,
- * flat data buffer. Temporary allocations may be done in POOL.
+ * Note: This function requires the caller to serialization access.
+ * Don't call it directly, call membuffer_cache_get_partial instead.
*/
static svn_error_t *
-membuffer_cache_set(svn_membuffer_t *cache,
- const void *key,
- apr_size_t key_len,
- void *item,
- svn_cache__serialize_func_t serializer,
- DEBUG_CACHE_MEMBUFFER_TAG_ARG
- apr_pool_t *scratch_pool)
+membuffer_cache_set_internal(svn_membuffer_t *cache,
+ entry_key_t to_find,
+ apr_uint32_t group_index,
+ char *buffer,
+ apr_size_t size,
+ DEBUG_CACHE_MEMBUFFER_TAG_ARG
+ apr_pool_t *scratch_pool)
{
- apr_uint32_t group_index;
- unsigned char to_find[KEY_SIZE];
- entry_t *entry;
- char *buffer;
- apr_size_t size;
+ /* first, look for a previous entry for the given key */
+ entry_t *entry = find_entry(cache, group_index, to_find, FALSE);
- /* find the entry group that will hold the key.
- */
- group_index = get_group_index(&cache, key, key_len, to_find, scratch_pool);
- if (group_index == NO_INDEX)
- return SVN_NO_ERROR;
+ /* if there is an old version of that entry and the new data fits into
+ * the old spot, just re-use that space. */
+ if (entry && ALIGN_VALUE(entry->size) >= size && buffer)
+ {
+ /* Careful! We need to cast SIZE to the full width of CACHE->DATA_USED
+ * lest we run into trouble with 32 bit underflow *not* treated as a
+ * negative value.
+ */
+ cache->data_used += (apr_uint64_t)size - entry->size;
+ entry->size = size;
- /* Serialize data data.
- */
- if (item)
- SVN_ERR(serializer(&buffer, &size, item, scratch_pool));
+#ifdef SVN_DEBUG_CACHE_MEMBUFFER
- /* The actual cache data access needs to sync'ed
- */
- SVN_ERR(lock_cache(cache));
+ /* Remember original content, type and key (hashes)
+ */
+ SVN_ERR(store_content_part(tag, buffer, size, scratch_pool));
+ memcpy(&entry->tag, tag, sizeof(*tag));
+
+#endif
+
+ if (size)
+ memcpy(cache->data + entry->offset, buffer, size);
+
+ cache->total_writes++;
+ return SVN_NO_ERROR;
+ }
/* if necessary, enlarge the insertion window.
*/
- if ( item != NULL
- && cache->data_size / 4 > size
+ if ( buffer != NULL
+ && cache->max_entry_size >= size
&& ensure_data_insertable(cache, size))
{
/* Remove old data for this key, if that exists.
* Get an unused entry for the key and and initialize it with
- * the serialized item's (future) posion within data buffer.
+ * the serialized item's (future) position within data buffer.
*/
entry = find_entry(cache, group_index, to_find, TRUE);
entry->size = size;
@@ -1166,60 +1475,94 @@ membuffer_cache_set(svn_membuffer_t *cache,
#endif
+ /* Link the entry properly.
+ */
+ insert_entry(cache, entry);
+
/* Copy the serialized item data into the cache.
*/
if (size)
memcpy(cache->data + entry->offset, buffer, size);
- /* Link the entry properly.
- */
- insert_entry(cache, entry);
cache->total_writes++;
}
else
{
/* if there is already an entry for this key, drop it.
+ * Since ensure_data_insertable may have removed entries from
+ * ENTRY's group, re-do the lookup.
*/
- find_entry(cache, group_index, to_find, TRUE);
+ entry = find_entry(cache, group_index, to_find, FALSE);
+ if (entry)
+ drop_entry(cache, entry);
}
- /* done here -> unlock the cache
- */
- return unlock_cache(cache, SVN_NO_ERROR);
+ return SVN_NO_ERROR;
}
-/* Look for the *ITEM identified by KEY. If no item has been stored
- * for KEY, *ITEM will be NULL. Otherwise, the DESERIALIZER is called
- * re-construct the proper object from the serialized data.
- * Allocations will be done in POOL.
+/* Try to insert the ITEM and use the KEY to uniquely identify it.
+ * However, there is no guarantee that it will actually be put into
+ * the cache. If there is already some data associated to the KEY,
+ * it will be removed from the cache even if the new data cannot
+ * be inserted.
+ *
+ * The SERIALIZER is called to transform the ITEM into a single,
+ * flat data buffer. Temporary allocations may be done in POOL.
*/
static svn_error_t *
-membuffer_cache_get(svn_membuffer_t *cache,
- const void *key,
- apr_size_t key_len,
- void **item,
- svn_cache__deserialize_func_t deserializer,
+membuffer_cache_set(svn_membuffer_t *cache,
+ entry_key_t key,
+ void *item,
+ svn_cache__serialize_func_t serializer,
DEBUG_CACHE_MEMBUFFER_TAG_ARG
- apr_pool_t *result_pool)
+ apr_pool_t *scratch_pool)
{
apr_uint32_t group_index;
- unsigned char to_find[KEY_SIZE];
- entry_t *entry;
- char *buffer;
- apr_size_t size;
+ void *buffer = NULL;
+ apr_size_t size = 0;
/* find the entry group that will hold the key.
*/
- group_index = get_group_index(&cache, key, key_len, to_find, result_pool);
- if (group_index == NO_INDEX)
- {
- /* Some error occured, return "item not found".
- */
- *item = NULL;
- return SVN_NO_ERROR;
- }
+ group_index = get_group_index(&cache, key);
- SVN_ERR(lock_cache(cache));
+ /* Serialize data data.
+ */
+ if (item)
+ SVN_ERR(serializer(&buffer, &size, item, scratch_pool));
+
+ /* The actual cache data access needs to sync'ed
+ */
+ WITH_WRITE_LOCK(cache,
+ membuffer_cache_set_internal(cache,
+ key,
+ group_index,
+ buffer,
+ size,
+ DEBUG_CACHE_MEMBUFFER_TAG
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+/* Look for the cache entry in group GROUP_INDEX of CACHE, identified
+ * by the hash value TO_FIND. If no item has been stored for KEY,
+ * *BUFFER will be NULL. Otherwise, return a copy of the serialized
+ * data in *BUFFER and return its size in *ITEM_SIZE. Allocations will
+ * be done in POOL.
+ *
+ * Note: This function requires the caller to serialization access.
+ * Don't call it directly, call membuffer_cache_get_partial instead.
+ */
+static svn_error_t *
+membuffer_cache_get_internal(svn_membuffer_t *cache,
+ apr_uint32_t group_index,
+ entry_key_t to_find,
+ char **buffer,
+ apr_size_t *item_size,
+ DEBUG_CACHE_MEMBUFFER_TAG_ARG
+ apr_pool_t *result_pool)
+{
+ entry_t *entry;
+ apr_size_t size;
/* The actual cache data access needs to sync'ed
*/
@@ -1229,13 +1572,15 @@ membuffer_cache_get(svn_membuffer_t *cache,
{
/* no such entry found.
*/
- *item = NULL;
- return unlock_cache(cache, SVN_NO_ERROR);
+ *buffer = NULL;
+ *item_size = 0;
+
+ return SVN_NO_ERROR;
}
size = ALIGN_VALUE(entry->size);
- buffer = ALIGN_POINTER(apr_palloc(result_pool, size + ITEM_ALIGNMENT-1));
- memcpy(buffer, (const char*)cache->data + entry->offset, size);
+ *buffer = ALIGN_POINTER(apr_palloc(result_pool, size + ITEM_ALIGNMENT-1));
+ memcpy(*buffer, (const char*)cache->data + entry->offset, size);
#ifdef SVN_DEBUG_CACHE_MEMBUFFER
@@ -1247,7 +1592,7 @@ membuffer_cache_get(svn_membuffer_t *cache,
/* Compare original content, type and key (hashes)
*/
- SVN_ERR(store_content_part(tag, buffer, entry->size, result_pool));
+ SVN_ERR(store_content_part(tag, *buffer, entry->size, result_pool));
SVN_ERR(assert_equal_tags(&entry->tag, tag));
#endif
@@ -1258,45 +1603,81 @@ membuffer_cache_get(svn_membuffer_t *cache,
cache->hit_count++;
cache->total_hits++;
- SVN_ERR(unlock_cache(cache, SVN_NO_ERROR));
+ *item_size = entry->size;
- /* re-construct the original data object from its serialized form.
- */
- return deserializer(item, buffer, entry->size, result_pool);
+ return SVN_NO_ERROR;
}
-/* Look for the cache entry identified by KEY and KEY_LEN. FOUND indicates
- * whether that entry exists. If not found, *ITEM will be NULL. Otherwise,
- * the DESERIALIZER is called with that entry and the BATON provided
- * and will extract the desired information. The result is set in *ITEM.
+/* Look for the *ITEM identified by KEY. If no item has been stored
+ * for KEY, *ITEM will be NULL. Otherwise, the DESERIALIZER is called
+ * re-construct the proper object from the serialized data.
* Allocations will be done in POOL.
*/
static svn_error_t *
-membuffer_cache_get_partial(svn_membuffer_t *cache,
- const void *key,
- apr_size_t key_len,
- void **item,
- svn_boolean_t *found,
- svn_cache__partial_getter_func_t deserializer,
- void *baton,
- DEBUG_CACHE_MEMBUFFER_TAG_ARG
- apr_pool_t *result_pool)
+membuffer_cache_get(svn_membuffer_t *cache,
+ entry_key_t key,
+ void **item,
+ svn_cache__deserialize_func_t deserializer,
+ DEBUG_CACHE_MEMBUFFER_TAG_ARG
+ apr_pool_t *result_pool)
{
apr_uint32_t group_index;
- unsigned char to_find[KEY_SIZE];
- entry_t *entry;
- svn_error_t *err = SVN_NO_ERROR;
+ char *buffer;
+ apr_size_t size;
- group_index = get_group_index(&cache, key, key_len, to_find, result_pool);
+ /* find the entry group that will hold the key.
+ */
+ group_index = get_group_index(&cache, key);
+ WITH_READ_LOCK(cache,
+ membuffer_cache_get_internal(cache,
+ group_index,
+ key,
+ &buffer,
+ &size,
+ DEBUG_CACHE_MEMBUFFER_TAG
+ result_pool));
- SVN_ERR(lock_cache(cache));
+ /* re-construct the original data object from its serialized form.
+ */
+ if (buffer == NULL)
+ {
+ *item = NULL;
+ return SVN_NO_ERROR;
+ }
- entry = find_entry(cache, group_index, to_find, FALSE);
+ return deserializer(item, buffer, size, result_pool);
+}
+
+/* Look for the cache entry in group GROUP_INDEX of CACHE, identified
+ * by the hash value TO_FIND. FOUND indicates whether that entry exists.
+ * If not found, *ITEM will be NULL.
+ *
+ * Otherwise, the DESERIALIZER is called with that entry and the BATON
+ * provided and will extract the desired information. The result is set
+ * in *ITEM. Allocations will be done in POOL.
+ *
+ * Note: This function requires the caller to serialization access.
+ * Don't call it directly, call membuffer_cache_get_partial instead.
+ */
+static svn_error_t *
+membuffer_cache_get_partial_internal(svn_membuffer_t *cache,
+ apr_uint32_t group_index,
+ entry_key_t to_find,
+ void **item,
+ svn_boolean_t *found,
+ svn_cache__partial_getter_func_t deserializer,
+ void *baton,
+ DEBUG_CACHE_MEMBUFFER_TAG_ARG
+ apr_pool_t *result_pool)
+{
+ entry_t *entry = find_entry(cache, group_index, to_find, FALSE);
cache->total_reads++;
if (entry == NULL)
{
*item = NULL;
*found = FALSE;
+
+ return SVN_NO_ERROR;
}
else
{
@@ -1324,50 +1705,71 @@ membuffer_cache_get_partial(svn_membuffer_t *cache,
#endif
- err = deserializer(item,
- (const char*)cache->data + entry->offset,
- entry->size,
- baton,
- result_pool);
+ return deserializer(item,
+ (const char*)cache->data + entry->offset,
+ entry->size,
+ baton,
+ result_pool);
}
-
- /* done here -> unlock the cache
- */
- return unlock_cache(cache, err);
}
-/* Look for the cache entry identified by KEY and KEY_LEN. If no entry
- * has been found, the function returns without modifying the cache.
- * Otherwise, FUNC is called with that entry and the BATON provided
- * and may modify the cache entry. Allocations will be done in POOL.
+/* Look for the cache entry identified by KEY. FOUND indicates
+ * whether that entry exists. If not found, *ITEM will be NULL. Otherwise,
+ * the DESERIALIZER is called with that entry and the BATON provided
+ * and will extract the desired information. The result is set in *ITEM.
+ * Allocations will be done in POOL.
*/
static svn_error_t *
-membuffer_cache_set_partial(svn_membuffer_t *cache,
- const void *key,
- apr_size_t key_len,
- svn_cache__partial_setter_func_t func,
+membuffer_cache_get_partial(svn_membuffer_t *cache,
+ entry_key_t key,
+ void **item,
+ svn_boolean_t *found,
+ svn_cache__partial_getter_func_t deserializer,
void *baton,
DEBUG_CACHE_MEMBUFFER_TAG_ARG
- apr_pool_t *scratch_pool)
+ apr_pool_t *result_pool)
{
- apr_uint32_t group_index;
- unsigned char to_find[KEY_SIZE];
- entry_t *entry;
- svn_error_t *err = SVN_NO_ERROR;
+ apr_uint32_t group_index = get_group_index(&cache, key);
- /* cache item lookup
- */
- group_index = get_group_index(&cache, key, key_len, to_find, scratch_pool);
+ WITH_READ_LOCK(cache,
+ membuffer_cache_get_partial_internal
+ (cache, group_index, key, item, found,
+ deserializer, baton, DEBUG_CACHE_MEMBUFFER_TAG
+ result_pool));
- SVN_ERR(lock_cache(cache));
+ return SVN_NO_ERROR;
+}
- entry = find_entry(cache, group_index, to_find, FALSE);
+/* Look for the cache entry in group GROUP_INDEX of CACHE, identified
+ * by the hash value TO_FIND. If no entry has been found, the function
+ * returns without modifying the cache.
+ *
+ * Otherwise, FUNC is called with that entry and the BATON provided
+ * and may modify the cache entry. Allocations will be done in POOL.
+ *
+ * Note: This function requires the caller to serialization access.
+ * Don't call it directly, call membuffer_cache_set_partial instead.
+ */
+static svn_error_t *
+membuffer_cache_set_partial_internal(svn_membuffer_t *cache,
+ apr_uint32_t group_index,
+ entry_key_t to_find,
+ svn_cache__partial_setter_func_t func,
+ void *baton,
+ DEBUG_CACHE_MEMBUFFER_TAG_ARG
+ apr_pool_t *scratch_pool)
+{
+ /* cache item lookup
+ */
+ entry_t *entry = find_entry(cache, group_index, to_find, FALSE);
cache->total_reads++;
/* this function is a no-op if the item is not in cache
*/
if (entry != NULL)
{
+ svn_error_t *err;
+
/* access the serialized cache item */
char *data = (char*)cache->data + entry->offset;
char *orig_data = data;
@@ -1392,9 +1794,9 @@ membuffer_cache_set_partial(svn_membuffer_t *cache,
#endif
- /* modify it, preferrably in-situ.
+ /* modify it, preferably in-situ.
*/
- err = func(&data, &size, baton, scratch_pool);
+ err = func((void **)&data, &size, baton, scratch_pool);
if (err)
{
@@ -1414,11 +1816,12 @@ membuffer_cache_set_partial(svn_membuffer_t *cache,
/* Remove the old entry and try to make space for the new one.
*/
drop_entry(cache, entry);
- if ( (cache->data_size / 4 > size)
+ if ( (cache->max_entry_size >= size)
&& ensure_data_insertable(cache, size))
{
/* Write the new entry.
*/
+ entry = find_entry(cache, group_index, to_find, TRUE);
entry->size = size;
entry->offset = cache->current_data;
if (size)
@@ -1427,23 +1830,48 @@ membuffer_cache_set_partial(svn_membuffer_t *cache,
/* Link the entry properly.
*/
insert_entry(cache, entry);
+ }
+ }
#ifdef SVN_DEBUG_CACHE_MEMBUFFER
- /* Remember original content, type and key (hashes)
- */
- SVN_ERR(store_content_part(tag, data, size, scratch_pool));
- memcpy(&entry->tag, tag, sizeof(*tag));
+ /* Remember original content, type and key (hashes)
+ */
+ SVN_ERR(store_content_part(tag, data, size, scratch_pool));
+ memcpy(&entry->tag, tag, sizeof(*tag));
#endif
- }
- }
}
}
+ return SVN_NO_ERROR;
+}
+
+/* Look for the cache entry identified by KEY. If no entry
+ * has been found, the function returns without modifying the cache.
+ * Otherwise, FUNC is called with that entry and the BATON provided
+ * and may modify the cache entry. Allocations will be done in POOL.
+ */
+static svn_error_t *
+membuffer_cache_set_partial(svn_membuffer_t *cache,
+ entry_key_t key,
+ svn_cache__partial_setter_func_t func,
+ void *baton,
+ DEBUG_CACHE_MEMBUFFER_TAG_ARG
+ apr_pool_t *scratch_pool)
+{
+ /* cache item lookup
+ */
+ apr_uint32_t group_index = get_group_index(&cache, key);
+ WITH_WRITE_LOCK(cache,
+ membuffer_cache_set_partial_internal
+ (cache, group_index, key, func, baton,
+ DEBUG_CACHE_MEMBUFFER_TAG
+ scratch_pool));
+
/* done here -> unlock the cache
*/
- return unlock_cache(cache, err);
+ return SVN_NO_ERROR;
}
/* Implement the svn_cache__t interface on top of a shared membuffer cache.
@@ -1451,11 +1879,11 @@ membuffer_cache_set_partial(svn_membuffer_t *cache,
* Because membuffer caches tend to be very large, there will be rather few
* of them (usually only one). Thus, the same instance shall be used as the
* backend to many application-visible svn_cache__t instances. This should
- * also achive global resource usage fairness.
+ * also achieve global resource usage fairness.
*
- * To accomodate items from multiple resources, the individual keys must be
- * unique over all sources. This is achived by simply adding a prefix key
- * that unambigously identifies the item's context (e.g. path to the
+ * To accommodate items from multiple resources, the individual keys must be
+ * unique over all sources. This is achieved by simply adding a prefix key
+ * that unambiguously identifies the item's context (e.g. path to the
* respective repository). The prefix will be set upon construction of the
* svn_cache__t instance.
*/
@@ -1482,7 +1910,7 @@ typedef struct svn_membuffer_cache_t
* This makes (very likely) our keys different from all keys used
* by other svn_membuffer_cache_t instances.
*/
- unsigned char prefix [APR_MD5_DIGESTSIZE];
+ entry_key_t prefix;
/* A copy of the unmodified prefix. It is being used as a user-visible
* ID for this cache instance.
@@ -1494,6 +1922,10 @@ typedef struct svn_membuffer_cache_t
*/
apr_ssize_t key_len;
+ /* Temporary buffer containing the hash key for the current access
+ */
+ entry_key_t combined_key;
+
/* a pool for temporary allocations during get() and set()
*/
apr_pool_t *pool;
@@ -1503,6 +1935,9 @@ typedef struct svn_membuffer_cache_t
*/
int alloc_counter;
+ /* if enabled, this will serialize the access to this instance.
+ */
+ svn_mutex__t *mutex;
#ifdef SVN_DEBUG_CACHE_MEMBUFFER
/* Invariant tag info for all items stored by this cache instance.
@@ -1518,29 +1953,48 @@ typedef struct svn_membuffer_cache_t
#define ALLOCATIONS_PER_POOL_CLEAR 10
-/* Basically concatenate PREFIX and KEY and return the result in FULL_KEY.
- * Allocations will be made in POOL.
+/* Basically calculate a hash value for KEY of length KEY_LEN, combine it
+ * with the CACHE->PREFIX and write the result in CACHE->COMBINED_KEY.
*/
static void
-combine_key(const void *prefix,
- apr_size_t prefix_len,
+combine_key(svn_membuffer_cache_t *cache,
const void *key,
- apr_ssize_t key_len,
- void **full_key,
- apr_size_t *full_key_len,
- apr_pool_t *pool)
+ apr_ssize_t key_len)
{
if (key_len == APR_HASH_KEY_STRING)
key_len = strlen((const char *) key);
- *full_key_len = prefix_len + key_len;
- *full_key = apr_palloc(pool, *full_key_len);
+ if (key_len < 16)
+ {
+ apr_uint32_t data[4] = { 0 };
+ memcpy(data, key, key_len);
+
+ svn__pseudo_md5_15((apr_uint32_t *)cache->combined_key, data);
+ }
+ else if (key_len < 32)
+ {
+ apr_uint32_t data[8] = { 0 };
+ memcpy(data, key, key_len);
+
+ svn__pseudo_md5_31((apr_uint32_t *)cache->combined_key, data);
+ }
+ else if (key_len < 64)
+ {
+ apr_uint32_t data[16] = { 0 };
+ memcpy(data, key, key_len);
+
+ svn__pseudo_md5_63((apr_uint32_t *)cache->combined_key, data);
+ }
+ else
+ {
+ apr_md5((unsigned char*)cache->combined_key, key, key_len);
+ }
- memcpy(*full_key, prefix, prefix_len);
- memcpy((char *)*full_key + prefix_len, key, key_len);
+ cache->combined_key[0] ^= cache->prefix[0];
+ cache->combined_key[1] ^= cache->prefix[1];
}
-/* Implement svn_cache__vtable_t.get
+/* Implement svn_cache__vtable_t.get (not thread-safe)
*/
static svn_error_t *
svn_membuffer_cache_get(void **value_p,
@@ -1551,47 +2005,36 @@ svn_membuffer_cache_get(void **value_p,
{
svn_membuffer_cache_t *cache = cache_void;
+ DEBUG_CACHE_MEMBUFFER_INIT_TAG
+
+ /* special case */
+ if (key == NULL)
+ {
+ *value_p = NULL;
+ *found = FALSE;
+
+ return SVN_NO_ERROR;
+ }
+
/* construct the full, i.e. globally unique, key by adding
* this cache instances' prefix
*/
- void *full_key;
- apr_size_t full_key_len;
-
- DEBUG_CACHE_MEMBUFFER_INIT_TAG
-
- combine_key(cache->prefix,
- sizeof(cache->prefix),
- key,
- cache->key_len,
- &full_key,
- &full_key_len,
- cache->pool);
+ combine_key(cache, key, cache->key_len);
/* Look the item up. */
SVN_ERR(membuffer_cache_get(cache->membuffer,
- full_key,
- full_key_len,
+ cache->combined_key,
value_p,
cache->deserializer,
DEBUG_CACHE_MEMBUFFER_TAG
result_pool));
- /* We don't need more the key anymore.
- * But since we allocate only small amounts of data per get() call and
- * apr_pool_clear is somewhat expensive, we clear it only now and then.
- */
- if (++cache->alloc_counter > ALLOCATIONS_PER_POOL_CLEAR)
- {
- apr_pool_clear(cache->pool);
- cache->alloc_counter = 0;
- }
-
/* return result */
*found = *value_p != NULL;
return SVN_NO_ERROR;
}
-/* Implement svn_cache__vtable_t.set
+/* Implement svn_cache__vtable_t.set (not thread-safe)
*/
static svn_error_t *
svn_membuffer_cache_set(void *cache_void,
@@ -1601,38 +2044,32 @@ svn_membuffer_cache_set(void *cache_void,
{
svn_membuffer_cache_t *cache = cache_void;
- void *full_key;
- apr_size_t full_key_len;
-
DEBUG_CACHE_MEMBUFFER_INIT_TAG
+ /* special case */
+ if (key == NULL)
+ return SVN_NO_ERROR;
+
/* we do some allocations below, so increase the allocation counter
* by a slightly larger amount. Free allocated memory every now and then.
*/
cache->alloc_counter += 3;
if (cache->alloc_counter > ALLOCATIONS_PER_POOL_CLEAR)
{
- apr_pool_clear(cache->pool);
+ svn_pool_clear(cache->pool);
cache->alloc_counter = 0;
}
/* construct the full, i.e. globally unique, key by adding
* this cache instances' prefix
*/
- combine_key(cache->prefix,
- sizeof(cache->prefix),
- key,
- cache->key_len,
- &full_key,
- &full_key_len,
- cache->pool);
+ combine_key(cache, key, cache->key_len);
/* (probably) add the item to the cache. But there is no real guarantee
* that the item will actually be cached afterwards.
*/
return membuffer_cache_set(cache->membuffer,
- full_key,
- full_key_len,
+ cache->combined_key,
value,
cache->serializer,
DEBUG_CACHE_MEMBUFFER_TAG
@@ -1652,6 +2089,8 @@ svn_membuffer_cache_iter(svn_boolean_t *completed,
_("Can't iterate a membuffer-based cache"));
}
+/* Implement svn_cache__vtable_t.get_partial (not thread-safe)
+ */
static svn_error_t *
svn_membuffer_cache_get_partial(void **value_p,
svn_boolean_t *found,
@@ -1663,28 +2102,19 @@ svn_membuffer_cache_get_partial(void **value_p,
{
svn_membuffer_cache_t *cache = cache_void;
- void *full_key;
- apr_size_t full_key_len;
-
DEBUG_CACHE_MEMBUFFER_INIT_TAG
- if (++cache->alloc_counter > ALLOCATIONS_PER_POOL_CLEAR)
+ if (key == NULL)
{
- apr_pool_clear(cache->pool);
- cache->alloc_counter = 0;
- }
+ *value_p = NULL;
+ *found = FALSE;
- combine_key(cache->prefix,
- sizeof(cache->prefix),
- key,
- cache->key_len,
- &full_key,
- &full_key_len,
- cache->pool);
+ return SVN_NO_ERROR;
+ }
+ combine_key(cache, key, cache->key_len);
SVN_ERR(membuffer_cache_get_partial(cache->membuffer,
- full_key,
- full_key_len,
+ cache->combined_key,
value_p,
found,
func,
@@ -1695,6 +2125,8 @@ svn_membuffer_cache_get_partial(void **value_p,
return SVN_NO_ERROR;
}
+/* Implement svn_cache__vtable_t.set_partial (not thread-safe)
+ */
static svn_error_t *
svn_membuffer_cache_set_partial(void *cache_void,
const void *key,
@@ -1704,30 +2136,24 @@ svn_membuffer_cache_set_partial(void *cache_void,
{
svn_membuffer_cache_t *cache = cache_void;
- void *full_key;
- apr_size_t full_key_len;
-
DEBUG_CACHE_MEMBUFFER_INIT_TAG
- combine_key(cache->prefix,
- sizeof(cache->prefix),
- key,
- cache->key_len,
- &full_key,
- &full_key_len,
- scratch_pool);
-
- SVN_ERR(membuffer_cache_set_partial(cache->membuffer,
- full_key,
- full_key_len,
- func,
- baton,
- DEBUG_CACHE_MEMBUFFER_TAG
- scratch_pool));
-
+ if (key != NULL)
+ {
+ combine_key(cache, key, cache->key_len);
+ SVN_ERR(membuffer_cache_set_partial(cache->membuffer,
+ cache->combined_key,
+ func,
+ baton,
+ DEBUG_CACHE_MEMBUFFER_TAG
+ scratch_pool));
+ }
return SVN_NO_ERROR;
}
+/* Implement svn_cache__vtable_t.is_cachable
+ * (thread-safe even without mutex)
+ */
static svn_boolean_t
svn_membuffer_cache_is_cachable(void *cache_void, apr_size_t size)
{
@@ -1736,10 +2162,29 @@ svn_membuffer_cache_is_cachable(void *cache_void, apr_size_t size)
* must be small enough to be stored in a 32 bit value.
*/
svn_membuffer_cache_t *cache = cache_void;
- return (size < cache->membuffer->data_size / 4)
- && (size < APR_UINT32_MAX - ITEM_ALIGNMENT);
+ return size <= cache->membuffer->max_entry_size;
}
+/* Add statistics of SEGMENT to INFO.
+ */
+static svn_error_t *
+svn_membuffer_get_segment_info(svn_membuffer_t *segment,
+ svn_cache__info_t *info)
+{
+ info->data_size += segment->data_size;
+ info->used_size += segment->data_used;
+ info->total_size += segment->data_size +
+ segment->group_count * GROUP_SIZE * sizeof(entry_t);
+
+ info->used_entries += segment->used_entries;
+ info->total_entries += segment->group_count * GROUP_SIZE;
+
+ return SVN_NO_ERROR;
+}
+
+/* Implement svn_cache__vtable_t.get_info
+ * (thread-safe even without mutex)
+ */
static svn_error_t *
svn_membuffer_cache_get_info(void *cache_void,
svn_cache__info_t *info,
@@ -1749,11 +2194,11 @@ svn_membuffer_cache_get_info(void *cache_void,
svn_membuffer_cache_t *cache = cache_void;
apr_uint32_t i;
- /* cache frontend specific data */
+ /* cache front-end specific data */
info->id = apr_pstrdup(result_pool, cache->full_prefix);
- /* collect info from shared cache backend */
+ /* collect info from shared cache back-end */
info->data_size = 0;
info->used_size = 0;
@@ -1765,25 +2210,15 @@ svn_membuffer_cache_get_info(void *cache_void,
for (i = 0; i < cache->membuffer->segment_count; ++i)
{
svn_membuffer_t *segment = cache->membuffer + i;
-
- SVN_ERR(lock_cache(segment));
-
- info->data_size += segment->data_size;
- info->used_size += segment->data_used;
- info->total_size += segment->data_size +
- segment->group_count * GROUP_SIZE * sizeof(entry_t);
-
- info->used_entries += segment->used_entries;
- info->total_entries += segment->group_count * GROUP_SIZE;
-
- SVN_ERR(unlock_cache(segment, SVN_NO_ERROR));
+ WITH_READ_LOCK(segment,
+ svn_membuffer_get_segment_info(segment, info));
}
return SVN_NO_ERROR;
}
-/* the v-table for membuffer-based caches
+/* the v-table for membuffer-based caches (single-threaded access)
*/
static svn_cache__vtable_t membuffer_cache_vtable = {
svn_membuffer_cache_get,
@@ -1795,11 +2230,105 @@ static svn_cache__vtable_t membuffer_cache_vtable = {
svn_membuffer_cache_get_info
};
+/* Implement svn_cache__vtable_t.get and serialize all cache access.
+ */
+static svn_error_t *
+svn_membuffer_cache_get_synced(void **value_p,
+ svn_boolean_t *found,
+ void *cache_void,
+ const void *key,
+ apr_pool_t *result_pool)
+{
+ svn_membuffer_cache_t *cache = cache_void;
+ SVN_MUTEX__WITH_LOCK(cache->mutex,
+ svn_membuffer_cache_get(value_p,
+ found,
+ cache_void,
+ key,
+ result_pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* Implement svn_cache__vtable_t.set and serialize all cache access.
+ */
+static svn_error_t *
+svn_membuffer_cache_set_synced(void *cache_void,
+ const void *key,
+ void *value,
+ apr_pool_t *scratch_pool)
+{
+ svn_membuffer_cache_t *cache = cache_void;
+ SVN_MUTEX__WITH_LOCK(cache->mutex,
+ svn_membuffer_cache_set(cache_void,
+ key,
+ value,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* Implement svn_cache__vtable_t.get_partial and serialize all cache access.
+ */
+static svn_error_t *
+svn_membuffer_cache_get_partial_synced(void **value_p,
+ svn_boolean_t *found,
+ void *cache_void,
+ const void *key,
+ svn_cache__partial_getter_func_t func,
+ void *baton,
+ apr_pool_t *result_pool)
+{
+ svn_membuffer_cache_t *cache = cache_void;
+ SVN_MUTEX__WITH_LOCK(cache->mutex,
+ svn_membuffer_cache_get_partial(value_p,
+ found,
+ cache_void,
+ key,
+ func,
+ baton,
+ result_pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* Implement svn_cache__vtable_t.set_partial and serialize all cache access.
+ */
+static svn_error_t *
+svn_membuffer_cache_set_partial_synced(void *cache_void,
+ const void *key,
+ svn_cache__partial_setter_func_t func,
+ void *baton,
+ apr_pool_t *scratch_pool)
+{
+ svn_membuffer_cache_t *cache = cache_void;
+ SVN_MUTEX__WITH_LOCK(cache->mutex,
+ svn_membuffer_cache_set_partial(cache_void,
+ key,
+ func,
+ baton,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* the v-table for membuffer-based caches with multi-threading support)
+ */
+static svn_cache__vtable_t membuffer_cache_synced_vtable = {
+ svn_membuffer_cache_get_synced,
+ svn_membuffer_cache_set_synced,
+ svn_membuffer_cache_iter, /* no sync required */
+ svn_membuffer_cache_is_cachable, /* no sync required */
+ svn_membuffer_cache_get_partial_synced,
+ svn_membuffer_cache_set_partial_synced,
+ svn_membuffer_cache_get_info /* no sync required */
+};
+
/* standard serialization function for svn_stringbuf_t items.
* Implements svn_cache__serialize_func_t.
*/
static svn_error_t *
-serialize_svn_stringbuf(char **buffer,
+serialize_svn_stringbuf(void **buffer,
apr_size_t *buffer_size,
void *item,
apr_pool_t *result_pool)
@@ -1817,12 +2346,14 @@ serialize_svn_stringbuf(char **buffer,
*/
static svn_error_t *
deserialize_svn_stringbuf(void **item,
- char *buffer,
+ void *buffer,
apr_size_t buffer_size,
apr_pool_t *result_pool)
{
- svn_string_t *value_str = apr_palloc(result_pool, sizeof(svn_string_t));
+ svn_stringbuf_t *value_str = apr_palloc(result_pool, sizeof(svn_stringbuf_t));
+ value_str->pool = result_pool;
+ value_str->blocksize = buffer_size;
value_str->data = buffer;
value_str->len = buffer_size-1;
*item = value_str;
@@ -1839,6 +2370,7 @@ svn_cache__create_membuffer_cache(svn_cache__t **cache_p,
svn_cache__deserialize_func_t deserializer,
apr_ssize_t klen,
const char *prefix,
+ svn_boolean_t thread_safe,
apr_pool_t *pool)
{
svn_checksum_t *checksum;
@@ -1862,6 +2394,8 @@ svn_cache__create_membuffer_cache(svn_cache__t **cache_p,
cache->pool = svn_pool_create(pool);
cache->alloc_counter = 0;
+ SVN_ERR(svn_mutex__init(&cache->mutex, thread_safe, pool));
+
/* for performance reasons, we don't actually store the full prefix but a
* hash value of it
*/
@@ -1882,7 +2416,8 @@ svn_cache__create_membuffer_cache(svn_cache__t **cache_p,
/* initialize the generic cache wrapper
*/
- wrapper->vtable = &membuffer_cache_vtable;
+ wrapper->vtable = thread_safe ? &membuffer_cache_synced_vtable
+ : &membuffer_cache_vtable;
wrapper->cache_internal = cache;
wrapper->error_handler = 0;
wrapper->error_baton = 0;
diff --git a/subversion/libsvn_subr/cache-memcache.c b/subversion/libsvn_subr/cache-memcache.c
index 6427c26..500426d 100644
--- a/subversion/libsvn_subr/cache-memcache.c
+++ b/subversion/libsvn_subr/cache-memcache.c
@@ -29,6 +29,7 @@
#include "svn_private_config.h"
#include "private/svn_cache.h"
+#include "private/svn_dep_compat.h"
#include "cache.h"
@@ -141,8 +142,15 @@ memcache_internal_get(char **data,
memcache_t *cache = cache_void;
apr_status_t apr_err;
const char *mc_key;
- apr_pool_t *subpool = svn_pool_create(pool);
+ apr_pool_t *subpool;
+
+ if (key == NULL)
+ {
+ *found = FALSE;
+ return SVN_NO_ERROR;
+ }
+ subpool = svn_pool_create(pool);
SVN_ERR(build_key(&mc_key, cache, key, subpool));
apr_err = apr_memcache_getp(cache->memcache,
@@ -195,9 +203,10 @@ memcache_get(void **value_p,
}
else
{
- svn_string_t *value = apr_pcalloc(result_pool, sizeof(*value));
+ svn_stringbuf_t *value = svn_stringbuf_create_empty(result_pool);
value->data = data;
- value->len = data_len;
+ value->blocksize = data_len;
+ value->len = data_len - 1; /* account for trailing NUL */
*value_p = value;
}
}
@@ -240,10 +249,13 @@ memcache_set(void *cache_void,
{
memcache_t *cache = cache_void;
apr_pool_t *subpool = svn_pool_create(scratch_pool);
- char *data;
+ void *data;
apr_size_t data_len;
svn_error_t *err;
+ if (key == NULL)
+ return SVN_NO_ERROR;
+
if (cache->serialize_func)
{
SVN_ERR((cache->serialize_func)(&data, &data_len, value, subpool));
@@ -252,7 +264,7 @@ memcache_set(void *cache_void,
{
svn_stringbuf_t *value_str = value;
data = value_str->data;
- data_len = value_str->len;
+ data_len = value_str->len + 1; /* copy trailing NUL */
}
err = memcache_internal_set(cache_void, key, data, data_len, subpool);
@@ -297,12 +309,12 @@ memcache_set_partial(void *cache_void,
{
svn_error_t *err = SVN_NO_ERROR;
- char *data;
+ void *data;
apr_size_t size;
svn_boolean_t found = FALSE;
apr_pool_t *subpool = svn_pool_create(scratch_pool);
- SVN_ERR(memcache_internal_get(&data,
+ SVN_ERR(memcache_internal_get((char **)&data,
&size,
&found,
cache_void,
@@ -459,7 +471,8 @@ add_memcache_server(const char *name,
0, /* min connections */
5, /* soft max connections */
10, /* hard max connections */
- 50, /* connection time to live (secs) */
+ /* time to live (in microseconds) */
+ apr_time_from_sec(50),
&server);
if (apr_err != APR_SUCCESS)
{
@@ -517,7 +530,7 @@ svn_cache__make_memcache_from_config(svn_memcache_t **memcache_p,
svn_config_t *config,
apr_pool_t *pool)
{
- apr_uint16_t server_count;
+ int server_count;
apr_pool_t *subpool = svn_pool_create(pool);
server_count =
@@ -532,12 +545,15 @@ svn_cache__make_memcache_from_config(svn_memcache_t **memcache_p,
return SVN_NO_ERROR;
}
+ if (server_count > APR_INT16_MAX)
+ return svn_error_create(SVN_ERR_TOO_MANY_MEMCACHED_SERVERS, NULL, NULL);
+
#ifdef SVN_HAVE_MEMCACHE
{
struct ams_baton b;
svn_memcache_t *memcache = apr_pcalloc(pool, sizeof(*memcache));
apr_status_t apr_err = apr_memcache_create(pool,
- server_count,
+ (apr_uint16_t)server_count,
0, /* flags */
&(memcache->c));
if (apr_err != APR_SUCCESS)
diff --git a/subversion/libsvn_subr/cache.c b/subversion/libsvn_subr/cache.c
index a8085a0..70e189f 100644
--- a/subversion/libsvn_subr/cache.c
+++ b/subversion/libsvn_subr/cache.c
@@ -75,6 +75,10 @@ svn_cache__get(void **value_p,
/* In case any errors happen and are quelched, make sure we start
out with FOUND set to false. */
*found = FALSE;
+#ifdef SVN_DEBUG
+ if (getenv("SVN_X_DOES_NOT_MARK_THE_SPOT"))
+ return SVN_NO_ERROR;
+#endif
cache->reads++;
err = handle_error(cache,
@@ -114,6 +118,12 @@ svn_cache__iter(svn_boolean_t *completed,
void *user_baton,
apr_pool_t *scratch_pool)
{
+#ifdef SVN_DEBUG
+ if (getenv("SVN_X_DOES_NOT_MARK_THE_SPOT"))
+ /* Pretend CACHE is empty. */
+ return SVN_NO_ERROR;
+#endif
+
return (cache->vtable->iter)(completed,
cache->cache_internal,
user_cb,
@@ -135,6 +145,10 @@ svn_cache__get_partial(void **value,
/* In case any errors happen and are quelched, make sure we start
out with FOUND set to false. */
*found = FALSE;
+#ifdef SVN_DEBUG
+ if (getenv("SVN_X_DOES_NOT_MARK_THE_SPOT"))
+ return SVN_NO_ERROR;
+#endif
cache->reads++;
err = handle_error(cache,
@@ -212,14 +226,14 @@ svn_cache__format_info(const svn_cache__info_t *info,
enum { _1MB = 1024 * 1024 };
apr_uint64_t misses = info->gets - info->hits;
- double hit_rate = (100.0 * info->hits)
- / (info->gets ? info->gets : 1);
- double write_rate = (100.0 * info->sets)
- / (misses ? misses : 1);
- double data_usage_rate = (100.0 * info->used_size)
- / (info->data_size ? info->data_size : 1);
- double data_entry_rate = (100.0 * info->used_entries)
- / (info->total_entries ? info->total_entries : 1);
+ double hit_rate = (100.0 * (double)info->hits)
+ / (double)(info->gets ? info->gets : 1);
+ double write_rate = (100.0 * (double)info->sets)
+ / (double)(misses ? misses : 1);
+ double data_usage_rate = (100.0 * (double)info->used_size)
+ / (double)(info->data_size ? info->data_size : 1);
+ double data_entry_rate = (100.0 * (double)info->used_entries)
+ / (double)(info->total_entries ? info->total_entries : 1);
return svn_string_createf(result_pool,
diff --git a/subversion/libsvn_subr/svn_cache_config.c b/subversion/libsvn_subr/cache_config.c
index adce479..17659f8 100644
--- a/subversion/libsvn_subr/svn_cache_config.c
+++ b/subversion/libsvn_subr/cache_config.c
@@ -23,6 +23,7 @@
#include <apr_atomic.h>
#include "svn_cache_config.h"
+#include "private/svn_atomic.h"
#include "private/svn_cache.h"
#include "svn_pools.h"
@@ -52,7 +53,7 @@ static svn_cache_config_t cache_settings =
* has little impact on performance and a more modest
* value (< 100) may be more suitable.
*/
-#ifdef APR_HAS_THREADS
+#if APR_HAS_THREADS
FALSE /* assume multi-threaded operation.
* Because this simply activates proper synchronization
* between threads, it is a safe default.
@@ -69,30 +70,27 @@ svn_cache_config_get(void)
return &cache_settings;
}
-/* Access the process-global (singleton) membuffer cache. The first call
- * will automatically allocate the cache using the current cache config.
- * NULL will be returned if the desired cache size is 0 or if the cache
- * could not be created for some reason.
+/* Initializer function as required by svn_atomic__init_once. Allocate
+ * the process-global (singleton) membuffer cache and return it in the
+ * svn_membuffer_t * in *BATON. UNUSED_POOL is unused and should be NULL.
*/
-svn_membuffer_t *
-svn_cache__get_global_membuffer_cache(void)
+static svn_error_t *
+initialize_cache(void *baton, apr_pool_t *unused_pool)
{
- static svn_membuffer_t * volatile cache = NULL;
+ svn_membuffer_t **cache_p = baton;
+ svn_membuffer_t *cache = NULL;
apr_uint64_t cache_size = cache_settings.cache_size;
- if (!cache && cache_size)
+ if (cache_size)
{
svn_error_t *err;
- svn_membuffer_t *old_cache = NULL;
- svn_membuffer_t *new_cache = NULL;
-
/* auto-allocate cache */
apr_allocator_t *allocator = NULL;
apr_pool_t *pool = NULL;
if (apr_allocator_create(&allocator))
- return NULL;
+ return SVN_NO_ERROR;
/* Ensure that we free partially allocated data if we run OOM
* before the cache is complete: If the cache cannot be allocated
@@ -112,48 +110,57 @@ svn_cache__get_global_membuffer_cache(void)
*/
apr_pool_create_ex(&pool, NULL, NULL, allocator);
if (pool == NULL)
- return NULL;
+ return SVN_NO_ERROR;
apr_allocator_owner_set(allocator, pool);
err = svn_cache__membuffer_cache_create(
- &new_cache,
+ &cache,
(apr_size_t)cache_size,
- (apr_size_t)(cache_size / 16),
+ (apr_size_t)(cache_size / 10),
+ 0,
! svn_cache_config_get()->single_threaded,
+ FALSE,
pool);
- /* Some error occured. Most likely it's an OOM error but we don't
+ /* Some error occurred. Most likely it's an OOM error but we don't
* really care. Simply release all cache memory and disable caching
*/
if (err)
{
- /* Memory and error cleanup */
- svn_error_clear(err);
- apr_pool_destroy(pool);
+ /* Memory cleanup */
+ svn_pool_destroy(pool);
- /* Prevent future attempts to create the cache. However, an
- * existing cache instance (see next comment) remains valid.
- */
+ /* Document that we actually don't have a cache. */
cache_settings.cache_size = 0;
- /* The current caller won't get the cache object.
- * However, a concurrent call might have succeeded in creating
- * the cache object. That call and all following ones will then
- * use the successfully created cache instance.
- */
- return NULL;
+ return svn_error_trace(err);
}
- /* Handle race condition: if we are the first to create a
- * cache object, make it our global singleton. Otherwise,
- * discard the new cache and keep the existing one.
- *
- * Cast is necessary because of APR bug:
- * https://issues.apache.org/bugzilla/show_bug.cgi?id=50731
- */
- old_cache = apr_atomic_casptr((volatile void **)&cache, new_cache, NULL);
- if (old_cache != NULL)
- apr_pool_destroy(pool);
+ /* done */
+ *cache_p = cache;
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Access the process-global (singleton) membuffer cache. The first call
+ * will automatically allocate the cache using the current cache config.
+ * NULL will be returned if the desired cache size is 0 or if the cache
+ * could not be created for some reason.
+ */
+svn_membuffer_t *
+svn_cache__get_global_membuffer_cache(void)
+{
+ static svn_membuffer_t *cache = NULL;
+ static svn_atomic_t initialized = 0;
+
+ svn_error_t *err
+ = svn_atomic__init_once(&initialized, initialize_cache, &cache, NULL);
+ if (err)
+ {
+ /* no caches today ... */
+ svn_error_clear(err);
+ return NULL;
}
return cache;
diff --git a/subversion/libsvn_subr/checksum.c b/subversion/libsvn_subr/checksum.c
index 1732d2e..e5d6a62 100644
--- a/subversion/libsvn_subr/checksum.c
+++ b/subversion/libsvn_subr/checksum.c
@@ -34,6 +34,8 @@
#include "sha1.h"
#include "md5.h"
+#include "private/svn_subr_private.h"
+
#include "svn_private_config.h"
@@ -54,36 +56,71 @@ validate_kind(svn_checksum_kind_t kind)
return svn_error_create(SVN_ERR_BAD_CHECKSUM_KIND, NULL, NULL);
}
+/* Create a svn_checksum_t with everything but the contents of the
+ digest populated. */
+static svn_checksum_t *
+checksum_create_without_digest(svn_checksum_kind_t kind,
+ apr_size_t digest_size,
+ apr_pool_t *pool)
+{
+ /* Use apr_palloc() instead of apr_pcalloc() so that the digest
+ * contents are only set once by the caller. */
+ svn_checksum_t *checksum = apr_palloc(pool, sizeof(*checksum) + digest_size);
+ checksum->digest = (unsigned char *)checksum + sizeof(*checksum);
+ checksum->kind = kind;
+ return checksum;
+}
+
+static svn_checksum_t *
+checksum_create(svn_checksum_kind_t kind,
+ apr_size_t digest_size,
+ const unsigned char *digest,
+ apr_pool_t *pool)
+{
+ svn_checksum_t *checksum = checksum_create_without_digest(kind, digest_size,
+ pool);
+ memcpy((unsigned char *)checksum->digest, digest, digest_size);
+ return checksum;
+}
svn_checksum_t *
svn_checksum_create(svn_checksum_kind_t kind,
apr_pool_t *pool)
{
svn_checksum_t *checksum;
+ apr_size_t digest_size;
switch (kind)
{
case svn_checksum_md5:
+ digest_size = APR_MD5_DIGESTSIZE;
+ break;
case svn_checksum_sha1:
- checksum = apr_pcalloc(pool, sizeof(*checksum) + DIGESTSIZE(kind));
- checksum->digest = (unsigned char *)checksum + sizeof(*checksum);
- checksum->kind = kind;
- return checksum;
-
+ digest_size = APR_SHA1_DIGESTSIZE;
+ break;
default:
return NULL;
}
+
+ checksum = checksum_create_without_digest(kind, digest_size, pool);
+ memset((unsigned char *) checksum->digest, 0, digest_size);
+ return checksum;
}
svn_checksum_t *
-svn_checksum__from_digest(const unsigned char *digest,
- svn_checksum_kind_t kind,
- apr_pool_t *result_pool)
+svn_checksum__from_digest_md5(const unsigned char *digest,
+ apr_pool_t *result_pool)
{
- svn_checksum_t *checksum = svn_checksum_create(kind, result_pool);
+ return checksum_create(svn_checksum_md5, APR_MD5_DIGESTSIZE, digest,
+ result_pool);
+}
- memcpy((unsigned char *)checksum->digest, digest, DIGESTSIZE(kind));
- return checksum;
+svn_checksum_t *
+svn_checksum__from_digest_sha1(const unsigned char *digest,
+ apr_pool_t *result_pool)
+{
+ return checksum_create(svn_checksum_sha1, APR_SHA1_DIGESTSIZE, digest,
+ result_pool);
}
svn_error_t *
@@ -160,6 +197,8 @@ svn_checksum_serialize(const svn_checksum_t *checksum,
{
const char *ckind_str;
+ SVN_ERR_ASSERT_NO_RETURN(checksum->kind == svn_checksum_md5
+ || checksum->kind == svn_checksum_sha1);
ckind_str = (checksum->kind == svn_checksum_md5 ? "$md5 $" : "$sha1$");
return apr_pstrcat(result_pool,
ckind_str,
@@ -237,8 +276,8 @@ svn_checksum_parse_hex(svn_checksum_t **checksum,
if (x1 == (char)-1 || x2 == (char)-1)
return svn_error_create(SVN_ERR_BAD_CHECKSUM_PARSE, NULL, NULL);
- digest[i] = (x1 << 4) | x2;
- is_nonzero |= (x1 << 4) | x2;
+ digest[i] = (char)((x1 << 4) | x2);
+ is_nonzero |= (char)((x1 << 4) | x2);
}
if (!is_nonzero)
@@ -255,7 +294,23 @@ svn_checksum_dup(const svn_checksum_t *checksum,
if (checksum == NULL)
return NULL;
- return svn_checksum__from_digest(checksum->digest, checksum->kind, pool);
+ /* Without this check on valid checksum kind a NULL svn_checksum_t
+ * pointer is returned which could cause a core dump at an
+ * indeterminate time in the future because callers are not
+ * expecting a NULL pointer. This commit forces an early abort() so
+ * it's easier to track down where the issue arose. */
+ switch (checksum->kind)
+ {
+ case svn_checksum_md5:
+ return svn_checksum__from_digest_md5(checksum->digest, pool);
+ break;
+ case svn_checksum_sha1:
+ return svn_checksum__from_digest_sha1(checksum->digest, pool);
+ break;
+ default:
+ SVN_ERR_MALFUNCTION_NO_RETURN();
+ break;
+ }
}
svn_error_t *
@@ -278,7 +333,7 @@ svn_checksum(svn_checksum_t **checksum,
case svn_checksum_sha1:
apr_sha1_init(&sha1_ctx);
- apr_sha1_update(&sha1_ctx, data, len);
+ apr_sha1_update(&sha1_ctx, data, (unsigned int)len);
apr_sha1_final((unsigned char *)(*checksum)->digest, &sha1_ctx);
break;
@@ -295,24 +350,20 @@ svn_checksum_t *
svn_checksum_empty_checksum(svn_checksum_kind_t kind,
apr_pool_t *pool)
{
- const unsigned char *digest;
-
switch (kind)
{
case svn_checksum_md5:
- digest = svn_md5__empty_string_digest();
- break;
+ return svn_checksum__from_digest_md5(svn_md5__empty_string_digest(),
+ pool);
case svn_checksum_sha1:
- digest = svn_sha1__empty_string_digest();
- break;
+ return svn_checksum__from_digest_sha1(svn_sha1__empty_string_digest(),
+ pool);
default:
/* We really shouldn't get here, but if we do... */
- return NULL;
+ SVN_ERR_MALFUNCTION_NO_RETURN();
}
-
- return svn_checksum__from_digest(digest, kind, pool);
}
struct svn_checksum_ctx_t
@@ -341,7 +392,7 @@ svn_checksum_ctx_create(svn_checksum_kind_t kind,
break;
default:
- return NULL;
+ SVN_ERR_MALFUNCTION_NO_RETURN();
}
return ctx;
@@ -359,7 +410,7 @@ svn_checksum_update(svn_checksum_ctx_t *ctx,
break;
case svn_checksum_sha1:
- apr_sha1_update(ctx->apr_ctx, data, len);
+ apr_sha1_update(ctx->apr_ctx, data, (unsigned int)len);
break;
default:
@@ -423,3 +474,27 @@ svn_checksum_mismatch_err(const svn_checksum_t *expected,
svn_checksum_to_cstring_display(expected, scratch_pool),
svn_checksum_to_cstring_display(actual, scratch_pool));
}
+
+svn_boolean_t
+svn_checksum_is_empty_checksum(svn_checksum_t *checksum)
+{
+ /* By definition, the NULL checksum matches all others, including the
+ empty one. */
+ if (!checksum)
+ return TRUE;
+
+ switch (checksum->kind)
+ {
+ case svn_checksum_md5:
+ return svn_md5__digests_match(checksum->digest,
+ svn_md5__empty_string_digest());
+
+ case svn_checksum_sha1:
+ return svn_sha1__digests_match(checksum->digest,
+ svn_sha1__empty_string_digest());
+
+ default:
+ /* We really shouldn't get here, but if we do... */
+ SVN_ERR_MALFUNCTION_NO_RETURN();
+ }
+}
diff --git a/subversion/libsvn_subr/cmdline.c b/subversion/libsvn_subr/cmdline.c
index 7dbcbc0..89d1ff3 100644
--- a/subversion/libsvn_subr/cmdline.c
+++ b/subversion/libsvn_subr/cmdline.c
@@ -33,17 +33,20 @@
#include <unistd.h>
#else
#include <crtdbg.h>
+#include <io.h>
#endif
+#include <apr.h> /* for STDIN_FILENO */
#include <apr_errno.h> /* for apr_strerror */
#include <apr_general.h> /* for apr_initialize/apr_terminate */
-#include <apr_atomic.h> /* for apr_atomic_init */
#include <apr_strings.h> /* for apr_snprintf */
#include <apr_pools.h>
#include "svn_cmdline.h"
+#include "svn_ctype.h"
#include "svn_dso.h"
#include "svn_dirent_uri.h"
+#include "svn_hash.h"
#include "svn_path.h"
#include "svn_pools.h"
#include "svn_error.h"
@@ -53,9 +56,13 @@
#include "svn_xml.h"
#include "svn_base64.h"
#include "svn_config.h"
+#include "svn_sorts.h"
+#include "svn_props.h"
+#include "svn_subst.h"
#include "private/svn_cmdline_private.h"
#include "private/svn_utf_private.h"
+#include "private/svn_string_private.h"
#include "svn_private_config.h"
@@ -74,6 +81,7 @@ svn_cmdline_init(const char *progname, FILE *error_stream)
apr_status_t status;
apr_pool_t *pool;
svn_error_t *err;
+ char prefix_buf[64]; /* 64 is probably bigger than most program names */
#ifndef WIN32
{
@@ -137,7 +145,9 @@ svn_cmdline_init(const char *progname, FILE *error_stream)
_set_error_mode(_OUT_TO_STDERR);
/* In _DEBUG mode: Redirect all debug output (E.g. assert() to stderr.
- (Ignored in releas builds) */
+ (Ignored in release builds) */
+ _CrtSetReportFile( _CRT_WARN, _CRTDBG_FILE_STDERR);
+ _CrtSetReportFile( _CRT_ERROR, _CRTDBG_FILE_STDERR);
_CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDERR);
_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
@@ -198,11 +208,17 @@ svn_cmdline_init(const char *progname, FILE *error_stream)
return EXIT_FAILURE;
}
- /* This has to happen before any pools are created. */
+ strncpy(prefix_buf, progname, sizeof(prefix_buf) - 3);
+ prefix_buf[sizeof(prefix_buf) - 3] = '\0';
+ strcat(prefix_buf, ": ");
+
+ /* DSO pool must be created before any other pools used by the
+ application so that pool cleanup doesn't unload DSOs too
+ early. See docstring of svn_dso_initialize2(). */
if ((err = svn_dso_initialize2()))
{
- if (error_stream && err->message)
- fprintf(error_stream, "%s", err->message);
+ if (error_stream)
+ svn_handle_error2(err, error_stream, TRUE, prefix_buf);
svn_error_clear(err);
return EXIT_FAILURE;
@@ -220,12 +236,12 @@ svn_cmdline_init(const char *progname, FILE *error_stream)
/* Create a pool for use by the UTF-8 routines. It will be cleaned
up by APR at exit time. */
pool = svn_pool_create(NULL);
- svn_utf_initialize(pool);
+ svn_utf_initialize2(FALSE, pool);
if ((err = svn_nls_init()))
{
- if (error_stream && err->message)
- fprintf(error_stream, "%s", err->message);
+ if (error_stream)
+ svn_handle_error2(err, error_stream, TRUE, prefix_buf);
svn_error_clear(err);
return EXIT_FAILURE;
@@ -340,7 +356,7 @@ svn_cmdline_fputs(const char *string, FILE* stream, apr_pool_t *pool)
{
/* ### Issue #3014: Return a specific error for broken pipes,
* ### with a single element in the error chain. */
- if (APR_STATUS_IS_EPIPE(apr_get_os_error()))
+ if (SVN__APR_STATUS_IS_EPIPE(apr_get_os_error()))
return svn_error_create(SVN_ERR_IO_PIPE_WRITE_ERROR, NULL, NULL);
else
return svn_error_wrap_apr(apr_get_os_error(), _("Write error"));
@@ -363,7 +379,7 @@ svn_cmdline_fflush(FILE *stream)
{
/* ### Issue #3014: Return a specific error for broken pipes,
* ### with a single element in the error chain. */
- if (APR_STATUS_IS_EPIPE(apr_get_os_error()))
+ if (SVN__APR_STATUS_IS_EPIPE(apr_get_os_error()))
return svn_error_create(SVN_ERR_IO_PIPE_WRITE_ERROR, NULL, NULL);
else
return svn_error_wrap_apr(apr_get_os_error(), _("Write error"));
@@ -459,8 +475,8 @@ svn_cmdline_create_auth_baton(svn_auth_baton_t **ab,
apr_array_header_t *providers;
/* Populate the registered providers with the platform-specific providers */
- SVN_ERR(svn_auth_get_platform_specific_client_providers
- (&providers, cfg, pool));
+ SVN_ERR(svn_auth_get_platform_specific_client_providers(&providers,
+ cfg, pool));
/* If we have a cancellation function, cram it and the stuff it
needs into the prompt baton. */
@@ -472,7 +488,7 @@ svn_cmdline_create_auth_baton(svn_auth_baton_t **ab,
pb->config_dir = config_dir;
}
- if (non_interactive == FALSE)
+ if (!non_interactive)
{
/* This provider doesn't prompt the user in order to get creds;
it prompts the user regarding the caching of creds. */
@@ -489,7 +505,7 @@ svn_cmdline_create_auth_baton(svn_auth_baton_t **ab,
svn_auth_get_username_provider(&provider, pool);
APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
- /* The server-cert, client-cert, and client-cert-password providers. */
+ /* The windows ssl server certificate CRYPTOAPI provider. */
SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
"windows",
"ssl_server_trust",
@@ -498,12 +514,21 @@ svn_cmdline_create_auth_baton(svn_auth_baton_t **ab,
if (provider)
APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
+ /* The windows ssl authority certificate CRYPTOAPI provider. */
+ SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
+ "windows",
+ "ssl_server_authority",
+ pool));
+
+ if (provider)
+ APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
+
svn_auth_get_ssl_server_trust_file_provider(&provider, pool);
APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
svn_auth_get_ssl_client_cert_file_provider(&provider, pool);
APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
- if (non_interactive == FALSE)
+ if (!non_interactive)
{
/* This provider doesn't prompt the user in order to get creds;
it prompts the user regarding the caching of creds. */
@@ -518,8 +543,15 @@ svn_cmdline_create_auth_baton(svn_auth_baton_t **ab,
}
APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
- if (non_interactive == FALSE)
+ if (!non_interactive)
{
+ svn_boolean_t ssl_client_cert_file_prompt;
+
+ SVN_ERR(svn_config_get_bool(cfg, &ssl_client_cert_file_prompt,
+ SVN_CONFIG_SECTION_AUTH,
+ SVN_CONFIG_OPTION_SSL_CLIENT_CERT_FILE_PROMPT,
+ FALSE));
+
/* Two basic prompt providers: username/password, and just username. */
svn_auth_get_simple_prompt_provider(&provider,
svn_cmdline_auth_simple_prompt,
@@ -533,19 +565,23 @@ svn_cmdline_create_auth_baton(svn_auth_baton_t **ab,
2, /* retry limit */ pool);
APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
- /* Three ssl prompt providers, for server-certs, client-certs,
- and client-cert-passphrases. */
+ /* SSL prompt providers: server-certs and client-cert-passphrases. */
svn_auth_get_ssl_server_trust_prompt_provider
(&provider, svn_cmdline_auth_ssl_server_trust_prompt, pb, pool);
APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
- svn_auth_get_ssl_client_cert_prompt_provider
- (&provider, svn_cmdline_auth_ssl_client_cert_prompt, pb, 2, pool);
- APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
-
svn_auth_get_ssl_client_cert_pw_prompt_provider
(&provider, svn_cmdline_auth_ssl_client_cert_pw_prompt, pb, 2, pool);
APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
+
+ /* If configuration allows, add a provider for client-cert path
+ prompting, too. */
+ if (ssl_client_cert_file_prompt)
+ {
+ svn_auth_get_ssl_client_cert_prompt_provider
+ (&provider, svn_cmdline_auth_ssl_client_cert_prompt, pb, 2, pool);
+ APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
+ }
}
else if (trust_server_cert)
{
@@ -625,13 +661,14 @@ void
svn_cmdline__print_xml_prop(svn_stringbuf_t **outstr,
const char* propname,
svn_string_t *propval,
+ svn_boolean_t inherited_prop,
apr_pool_t *pool)
{
const char *xml_safe;
const char *encoding = NULL;
if (*outstr == NULL)
- *outstr = svn_stringbuf_create("", pool);
+ *outstr = svn_stringbuf_create_empty(pool);
if (svn_xml_is_xml_safe(propval->data, propval->len))
{
@@ -648,16 +685,22 @@ svn_cmdline__print_xml_prop(svn_stringbuf_t **outstr,
}
if (encoding)
- svn_xml_make_open_tag(outstr, pool, svn_xml_protect_pcdata,
- "property", "name", propname,
- "encoding", encoding, NULL);
+ svn_xml_make_open_tag(
+ outstr, pool, svn_xml_protect_pcdata,
+ inherited_prop ? "inherited_property" : "property",
+ "name", propname,
+ "encoding", encoding, NULL);
else
- svn_xml_make_open_tag(outstr, pool, svn_xml_protect_pcdata,
- "property", "name", propname, NULL);
+ svn_xml_make_open_tag(
+ outstr, pool, svn_xml_protect_pcdata,
+ inherited_prop ? "inherited_property" : "property",
+ "name", propname, NULL);
svn_stringbuf_appendcstr(*outstr, xml_safe);
- svn_xml_make_close_tag(outstr, pool, "property");
+ svn_xml_make_close_tag(
+ outstr, pool,
+ inherited_prop ? "inherited_property" : "property");
return;
}
@@ -716,7 +759,7 @@ svn_cmdline__apply_config_options(apr_hash_t *config,
APR_ARRAY_IDX(config_options, i,
svn_cmdline__config_argument_t *);
- cfg = apr_hash_get(config, arg->file, APR_HASH_KEY_STRING);
+ cfg = svn_hash_gets(config, arg->file);
if (cfg)
{
@@ -734,3 +777,545 @@ svn_cmdline__apply_config_options(apr_hash_t *config,
return SVN_NO_ERROR;
}
+
+/* Return a copy, allocated in POOL, of the next line of text from *STR
+ * up to and including a CR and/or an LF. Change *STR to point to the
+ * remainder of the string after the returned part. If there are no
+ * characters to be returned, return NULL; never return an empty string.
+ */
+static const char *
+next_line(const char **str, apr_pool_t *pool)
+{
+ const char *start = *str;
+ const char *p = *str;
+
+ /* n.b. Throughout this fn, we never read any character after a '\0'. */
+ /* Skip over all non-EOL characters, if any. */
+ while (*p != '\r' && *p != '\n' && *p != '\0')
+ p++;
+ /* Skip over \r\n or \n\r or \r or \n, if any. */
+ if (*p == '\r' || *p == '\n')
+ {
+ char c = *p++;
+
+ if ((c == '\r' && *p == '\n') || (c == '\n' && *p == '\r'))
+ p++;
+ }
+
+ /* Now p points after at most one '\n' and/or '\r'. */
+ *str = p;
+
+ if (p == start)
+ return NULL;
+
+ return svn_string_ncreate(start, p - start, pool)->data;
+}
+
+const char *
+svn_cmdline__indent_string(const char *str,
+ const char *indent,
+ apr_pool_t *pool)
+{
+ svn_stringbuf_t *out = svn_stringbuf_create_empty(pool);
+ const char *line;
+
+ while ((line = next_line(&str, pool)))
+ {
+ svn_stringbuf_appendcstr(out, indent);
+ svn_stringbuf_appendcstr(out, line);
+ }
+ return out->data;
+}
+
+svn_error_t *
+svn_cmdline__print_prop_hash(svn_stream_t *out,
+ apr_hash_t *prop_hash,
+ svn_boolean_t names_only,
+ apr_pool_t *pool)
+{
+ apr_array_header_t *sorted_props;
+ int i;
+
+ sorted_props = svn_sort__hash(prop_hash, svn_sort_compare_items_lexically,
+ pool);
+ for (i = 0; i < sorted_props->nelts; i++)
+ {
+ svn_sort__item_t item = APR_ARRAY_IDX(sorted_props, i, svn_sort__item_t);
+ const char *pname = item.key;
+ svn_string_t *propval = item.value;
+ const char *pname_stdout;
+
+ if (svn_prop_needs_translation(pname))
+ SVN_ERR(svn_subst_detranslate_string(&propval, propval,
+ TRUE, pool));
+
+ SVN_ERR(svn_cmdline_cstring_from_utf8(&pname_stdout, pname, pool));
+
+ if (out)
+ {
+ pname_stdout = apr_psprintf(pool, " %s\n", pname_stdout);
+ SVN_ERR(svn_subst_translate_cstring2(pname_stdout, &pname_stdout,
+ APR_EOL_STR, /* 'native' eol */
+ FALSE, /* no repair */
+ NULL, /* no keywords */
+ FALSE, /* no expansion */
+ pool));
+
+ SVN_ERR(svn_stream_puts(out, pname_stdout));
+ }
+ else
+ {
+ /* ### We leave these printfs for now, since if propval wasn't
+ translated above, we don't know anything about its encoding.
+ In fact, it might be binary data... */
+ printf(" %s\n", pname_stdout);
+ }
+
+ if (!names_only)
+ {
+ /* Add an extra newline to the value before indenting, so that
+ * every line of output has the indentation whether the value
+ * already ended in a newline or not. */
+ const char *newval = apr_psprintf(pool, "%s\n", propval->data);
+ const char *indented_newval = svn_cmdline__indent_string(newval,
+ " ",
+ pool);
+ if (out)
+ {
+ SVN_ERR(svn_stream_puts(out, indented_newval));
+ }
+ else
+ {
+ printf("%s", indented_newval);
+ }
+ }
+ }
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_cmdline__print_xml_prop_hash(svn_stringbuf_t **outstr,
+ apr_hash_t *prop_hash,
+ svn_boolean_t names_only,
+ svn_boolean_t inherited_props,
+ apr_pool_t *pool)
+{
+ apr_array_header_t *sorted_props;
+ int i;
+
+ if (*outstr == NULL)
+ *outstr = svn_stringbuf_create_empty(pool);
+
+ sorted_props = svn_sort__hash(prop_hash, svn_sort_compare_items_lexically,
+ pool);
+ for (i = 0; i < sorted_props->nelts; i++)
+ {
+ svn_sort__item_t item = APR_ARRAY_IDX(sorted_props, i, svn_sort__item_t);
+ const char *pname = item.key;
+ svn_string_t *propval = item.value;
+
+ if (names_only)
+ {
+ svn_xml_make_open_tag(
+ outstr, pool, svn_xml_self_closing,
+ inherited_props ? "inherited_property" : "property",
+ "name", pname, NULL);
+ }
+ else
+ {
+ const char *pname_out;
+
+ if (svn_prop_needs_translation(pname))
+ SVN_ERR(svn_subst_detranslate_string(&propval, propval,
+ TRUE, pool));
+
+ SVN_ERR(svn_cmdline_cstring_from_utf8(&pname_out, pname, pool));
+
+ svn_cmdline__print_xml_prop(outstr, pname_out, propval,
+ inherited_props, pool);
+ }
+ }
+
+ return SVN_NO_ERROR;
+}
+
+svn_boolean_t
+svn_cmdline__be_interactive(svn_boolean_t non_interactive,
+ svn_boolean_t force_interactive)
+{
+ /* If neither --non-interactive nor --force-interactive was passed,
+ * be interactive if stdin is a terminal.
+ * If --force-interactive was passed, always be interactive. */
+ if (!force_interactive && !non_interactive)
+ {
+#ifdef WIN32
+ return (_isatty(STDIN_FILENO) != 0);
+#else
+ return (isatty(STDIN_FILENO) != 0);
+#endif
+ }
+ else if (force_interactive)
+ return TRUE;
+
+ return !non_interactive;
+}
+
+
+/* Helper for the next two functions. Set *EDITOR to some path to an
+ editor binary. Sources to search include: the EDITOR_CMD argument
+ (if not NULL), $SVN_EDITOR, the runtime CONFIG variable (if CONFIG
+ is not NULL), $VISUAL, $EDITOR. Return
+ SVN_ERR_CL_NO_EXTERNAL_EDITOR if no binary can be found. */
+static svn_error_t *
+find_editor_binary(const char **editor,
+ const char *editor_cmd,
+ apr_hash_t *config)
+{
+ const char *e;
+ struct svn_config_t *cfg;
+
+ /* Use the editor specified on the command line via --editor-cmd, if any. */
+ e = editor_cmd;
+
+ /* Otherwise look for the Subversion-specific environment variable. */
+ if (! e)
+ e = getenv("SVN_EDITOR");
+
+ /* If not found then fall back on the config file. */
+ if (! e)
+ {
+ cfg = config ? svn_hash_gets(config, SVN_CONFIG_CATEGORY_CONFIG) : NULL;
+ svn_config_get(cfg, &e, SVN_CONFIG_SECTION_HELPERS,
+ SVN_CONFIG_OPTION_EDITOR_CMD, NULL);
+ }
+
+ /* If not found yet then try general purpose environment variables. */
+ if (! e)
+ e = getenv("VISUAL");
+ if (! e)
+ e = getenv("EDITOR");
+
+#ifdef SVN_CLIENT_EDITOR
+ /* If still not found then fall back on the hard-coded default. */
+ if (! e)
+ e = SVN_CLIENT_EDITOR;
+#endif
+
+ /* Error if there is no editor specified */
+ if (e)
+ {
+ const char *c;
+
+ for (c = e; *c; c++)
+ if (!svn_ctype_isspace(*c))
+ break;
+
+ if (! *c)
+ return svn_error_create
+ (SVN_ERR_CL_NO_EXTERNAL_EDITOR, NULL,
+ _("The EDITOR, SVN_EDITOR or VISUAL environment variable or "
+ "'editor-cmd' run-time configuration option is empty or "
+ "consists solely of whitespace. Expected a shell command."));
+ }
+ else
+ return svn_error_create
+ (SVN_ERR_CL_NO_EXTERNAL_EDITOR, NULL,
+ _("None of the environment variables SVN_EDITOR, VISUAL or EDITOR are "
+ "set, and no 'editor-cmd' run-time configuration option was found"));
+
+ *editor = e;
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_cmdline__edit_file_externally(const char *path,
+ const char *editor_cmd,
+ apr_hash_t *config,
+ apr_pool_t *pool)
+{
+ const char *editor, *cmd, *base_dir, *file_name, *base_dir_apr;
+ char *old_cwd;
+ int sys_err;
+ apr_status_t apr_err;
+
+ svn_dirent_split(&base_dir, &file_name, path, pool);
+
+ SVN_ERR(find_editor_binary(&editor, editor_cmd, config));
+
+ apr_err = apr_filepath_get(&old_cwd, APR_FILEPATH_NATIVE, pool);
+ if (apr_err)
+ return svn_error_wrap_apr(apr_err, _("Can't get working directory"));
+
+ /* APR doesn't like "" directories */
+ if (base_dir[0] == '\0')
+ base_dir_apr = ".";
+ else
+ SVN_ERR(svn_path_cstring_from_utf8(&base_dir_apr, base_dir, pool));
+
+ apr_err = apr_filepath_set(base_dir_apr, pool);
+ if (apr_err)
+ return svn_error_wrap_apr
+ (apr_err, _("Can't change working directory to '%s'"), base_dir);
+
+ cmd = apr_psprintf(pool, "%s %s", editor, file_name);
+ sys_err = system(cmd);
+
+ apr_err = apr_filepath_set(old_cwd, pool);
+ if (apr_err)
+ svn_handle_error2(svn_error_wrap_apr
+ (apr_err, _("Can't restore working directory")),
+ stderr, TRUE /* fatal */, "svn: ");
+
+ if (sys_err)
+ /* Extracting any meaning from sys_err is platform specific, so just
+ use the raw value. */
+ return svn_error_createf(SVN_ERR_EXTERNAL_PROGRAM, NULL,
+ _("system('%s') returned %d"), cmd, sys_err);
+
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_cmdline__edit_string_externally(svn_string_t **edited_contents /* UTF-8! */,
+ const char **tmpfile_left /* UTF-8! */,
+ const char *editor_cmd,
+ const char *base_dir /* UTF-8! */,
+ const svn_string_t *contents /* UTF-8! */,
+ const char *filename,
+ apr_hash_t *config,
+ svn_boolean_t as_text,
+ const char *encoding,
+ apr_pool_t *pool)
+{
+ const char *editor;
+ const char *cmd;
+ apr_file_t *tmp_file;
+ const char *tmpfile_name;
+ const char *tmpfile_native;
+ const char *tmpfile_apr, *base_dir_apr;
+ svn_string_t *translated_contents;
+ apr_status_t apr_err, apr_err2;
+ apr_size_t written;
+ apr_finfo_t finfo_before, finfo_after;
+ svn_error_t *err = SVN_NO_ERROR, *err2;
+ char *old_cwd;
+ int sys_err;
+ svn_boolean_t remove_file = TRUE;
+
+ SVN_ERR(find_editor_binary(&editor, editor_cmd, config));
+
+ /* Convert file contents from UTF-8/LF if desired. */
+ if (as_text)
+ {
+ const char *translated;
+ SVN_ERR(svn_subst_translate_cstring2(contents->data, &translated,
+ APR_EOL_STR, FALSE,
+ NULL, FALSE, pool));
+ translated_contents = svn_string_create_empty(pool);
+ if (encoding)
+ SVN_ERR(svn_utf_cstring_from_utf8_ex2(&translated_contents->data,
+ translated, encoding, pool));
+ else
+ SVN_ERR(svn_utf_cstring_from_utf8(&translated_contents->data,
+ translated, pool));
+ translated_contents->len = strlen(translated_contents->data);
+ }
+ else
+ translated_contents = svn_string_dup(contents, pool);
+
+ /* Move to BASE_DIR to avoid getting characters that need quoting
+ into tmpfile_name */
+ apr_err = apr_filepath_get(&old_cwd, APR_FILEPATH_NATIVE, pool);
+ if (apr_err)
+ return svn_error_wrap_apr(apr_err, _("Can't get working directory"));
+
+ /* APR doesn't like "" directories */
+ if (base_dir[0] == '\0')
+ base_dir_apr = ".";
+ else
+ SVN_ERR(svn_path_cstring_from_utf8(&base_dir_apr, base_dir, pool));
+ apr_err = apr_filepath_set(base_dir_apr, pool);
+ if (apr_err)
+ {
+ return svn_error_wrap_apr
+ (apr_err, _("Can't change working directory to '%s'"), base_dir);
+ }
+
+ /*** From here on, any problems that occur require us to cd back!! ***/
+
+ /* Ask the working copy for a temporary file named FILENAME-something. */
+ err = svn_io_open_uniquely_named(&tmp_file, &tmpfile_name,
+ "" /* dirpath */,
+ filename,
+ ".tmp",
+ svn_io_file_del_none, pool, pool);
+
+ if (err && (APR_STATUS_IS_EACCES(err->apr_err) || err->apr_err == EROFS))
+ {
+ const char *temp_dir_apr;
+
+ svn_error_clear(err);
+
+ SVN_ERR(svn_io_temp_dir(&base_dir, pool));
+
+ SVN_ERR(svn_path_cstring_from_utf8(&temp_dir_apr, base_dir, pool));
+ apr_err = apr_filepath_set(temp_dir_apr, pool);
+ if (apr_err)
+ {
+ return svn_error_wrap_apr
+ (apr_err, _("Can't change working directory to '%s'"), base_dir);
+ }
+
+ err = svn_io_open_uniquely_named(&tmp_file, &tmpfile_name,
+ "" /* dirpath */,
+ filename,
+ ".tmp",
+ svn_io_file_del_none, pool, pool);
+ }
+
+ if (err)
+ goto cleanup2;
+
+ /*** From here on, any problems that occur require us to cleanup
+ the file we just created!! ***/
+
+ /* Dump initial CONTENTS to TMP_FILE. */
+ apr_err = apr_file_write_full(tmp_file, translated_contents->data,
+ translated_contents->len, &written);
+
+ apr_err2 = apr_file_close(tmp_file);
+ if (! apr_err)
+ apr_err = apr_err2;
+
+ /* Make sure the whole CONTENTS were written, else return an error. */
+ if (apr_err)
+ {
+ err = svn_error_wrap_apr(apr_err, _("Can't write to '%s'"),
+ tmpfile_name);
+ goto cleanup;
+ }
+
+ err = svn_path_cstring_from_utf8(&tmpfile_apr, tmpfile_name, pool);
+ if (err)
+ goto cleanup;
+
+ /* Get information about the temporary file before the user has
+ been allowed to edit its contents. */
+ apr_err = apr_stat(&finfo_before, tmpfile_apr,
+ APR_FINFO_MTIME, pool);
+ if (apr_err)
+ {
+ err = svn_error_wrap_apr(apr_err, _("Can't stat '%s'"), tmpfile_name);
+ goto cleanup;
+ }
+
+ /* Backdate the file a little bit in case the editor is very fast
+ and doesn't change the size. (Use two seconds, since some
+ filesystems have coarse granularity.) It's OK if this call
+ fails, so we don't check its return value.*/
+ apr_file_mtime_set(tmpfile_apr, finfo_before.mtime - 2000, pool);
+
+ /* Stat it again to get the mtime we actually set. */
+ apr_err = apr_stat(&finfo_before, tmpfile_apr,
+ APR_FINFO_MTIME | APR_FINFO_SIZE, pool);
+ if (apr_err)
+ {
+ err = svn_error_wrap_apr(apr_err, _("Can't stat '%s'"), tmpfile_name);
+ goto cleanup;
+ }
+
+ /* Prepare the editor command line. */
+ err = svn_utf_cstring_from_utf8(&tmpfile_native, tmpfile_name, pool);
+ if (err)
+ goto cleanup;
+ cmd = apr_psprintf(pool, "%s %s", editor, tmpfile_native);
+
+ /* If the caller wants us to leave the file around, return the path
+ of the file we'll use, and make a note not to destroy it. */
+ if (tmpfile_left)
+ {
+ *tmpfile_left = svn_dirent_join(base_dir, tmpfile_name, pool);
+ remove_file = FALSE;
+ }
+
+ /* Now, run the editor command line. */
+ sys_err = system(cmd);
+ if (sys_err != 0)
+ {
+ /* Extracting any meaning from sys_err is platform specific, so just
+ use the raw value. */
+ err = svn_error_createf(SVN_ERR_EXTERNAL_PROGRAM, NULL,
+ _("system('%s') returned %d"), cmd, sys_err);
+ goto cleanup;
+ }
+
+ /* Get information about the temporary file after the assumed editing. */
+ apr_err = apr_stat(&finfo_after, tmpfile_apr,
+ APR_FINFO_MTIME | APR_FINFO_SIZE, pool);
+ if (apr_err)
+ {
+ err = svn_error_wrap_apr(apr_err, _("Can't stat '%s'"), tmpfile_name);
+ goto cleanup;
+ }
+
+ /* If the file looks changed... */
+ if ((finfo_before.mtime != finfo_after.mtime) ||
+ (finfo_before.size != finfo_after.size))
+ {
+ svn_stringbuf_t *edited_contents_s;
+ err = svn_stringbuf_from_file2(&edited_contents_s, tmpfile_name, pool);
+ if (err)
+ goto cleanup;
+
+ *edited_contents = svn_stringbuf__morph_into_string(edited_contents_s);
+
+ /* Translate back to UTF8/LF if desired. */
+ if (as_text)
+ {
+ err = svn_subst_translate_string2(edited_contents, FALSE, FALSE,
+ *edited_contents, encoding, FALSE,
+ pool, pool);
+ if (err)
+ {
+ err = svn_error_quick_wrap
+ (err,
+ _("Error normalizing edited contents to internal format"));
+ goto cleanup;
+ }
+ }
+ }
+ else
+ {
+ /* No edits seem to have been made */
+ *edited_contents = NULL;
+ }
+
+ cleanup:
+ if (remove_file)
+ {
+ /* Remove the file from disk. */
+ err2 = svn_io_remove_file2(tmpfile_name, FALSE, pool);
+
+ /* Only report remove error if there was no previous error. */
+ if (! err && err2)
+ err = err2;
+ else
+ svn_error_clear(err2);
+ }
+
+ cleanup2:
+ /* If we against all probability can't cd back, all further relative
+ file references would be screwed up, so we have to abort. */
+ apr_err = apr_filepath_set(old_cwd, pool);
+ if (apr_err)
+ {
+ svn_handle_error2(svn_error_wrap_apr
+ (apr_err, _("Can't restore working directory")),
+ stderr, TRUE /* fatal */, "svn: ");
+ }
+
+ return svn_error_trace(err);
+}
diff --git a/subversion/libsvn_subr/compat.c b/subversion/libsvn_subr/compat.c
index 8e2aff8..2089828 100644
--- a/subversion/libsvn_subr/compat.c
+++ b/subversion/libsvn_subr/compat.c
@@ -24,6 +24,7 @@
#include <apr_pools.h>
#include <apr_strings.h>
+#include "svn_hash.h"
#include "svn_types.h"
#include "svn_error.h"
#include "svn_compat.h"
@@ -75,12 +76,9 @@ svn_compat_log_revprops_clear(apr_hash_t *revprops)
{
if (revprops)
{
- apr_hash_set(revprops, SVN_PROP_REVISION_AUTHOR,
- APR_HASH_KEY_STRING, NULL);
- apr_hash_set(revprops, SVN_PROP_REVISION_DATE,
- APR_HASH_KEY_STRING, NULL);
- apr_hash_set(revprops, SVN_PROP_REVISION_LOG,
- APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(revprops, SVN_PROP_REVISION_AUTHOR, NULL);
+ svn_hash_sets(revprops, SVN_PROP_REVISION_DATE, NULL);
+ svn_hash_sets(revprops, SVN_PROP_REVISION_LOG, NULL);
}
}
@@ -105,14 +103,11 @@ svn_compat_log_revprops_out(const char **author, const char **date,
*author = *date = *message = NULL;
if (revprops)
{
- if ((author_s = apr_hash_get(revprops, SVN_PROP_REVISION_AUTHOR,
- APR_HASH_KEY_STRING)))
+ if ((author_s = svn_hash_gets(revprops, SVN_PROP_REVISION_AUTHOR)))
*author = author_s->data;
- if ((date_s = apr_hash_get(revprops, SVN_PROP_REVISION_DATE,
- APR_HASH_KEY_STRING)))
+ if ((date_s = svn_hash_gets(revprops, SVN_PROP_REVISION_DATE)))
*date = date_s->data;
- if ((message_s = apr_hash_get(revprops, SVN_PROP_REVISION_LOG,
- APR_HASH_KEY_STRING)))
+ if ((message_s = svn_hash_gets(revprops, SVN_PROP_REVISION_LOG)))
*message = message_s->data;
}
}
diff --git a/subversion/libsvn_subr/config.c b/subversion/libsvn_subr/config.c
index 152c1ff..cf97f0d 100644
--- a/subversion/libsvn_subr/config.c
+++ b/subversion/libsvn_subr/config.c
@@ -29,11 +29,13 @@
#include <apr_general.h>
#include <apr_lib.h>
+#include "svn_hash.h"
#include "svn_error.h"
#include "svn_pools.h"
#include "config_impl.h"
#include "svn_private_config.h"
+#include "private/svn_dep_compat.h"
@@ -45,9 +47,6 @@ struct cfg_section_t
/* The section name. */
const char *name;
- /* The section name, converted into a hash key. */
- const char *hash_key;
-
/* Table of cfg_option_t's. */
apr_hash_t *options;
};
@@ -78,9 +77,10 @@ struct cfg_option_t
svn_error_t *
-svn_config_create(svn_config_t **cfgp,
- svn_boolean_t section_names_case_sensitive,
- apr_pool_t *result_pool)
+svn_config_create2(svn_config_t **cfgp,
+ svn_boolean_t section_names_case_sensitive,
+ svn_boolean_t option_names_case_sensitive,
+ apr_pool_t *result_pool)
{
svn_config_t *cfg = apr_palloc(result_pool, sizeof(*cfg));
@@ -88,24 +88,29 @@ svn_config_create(svn_config_t **cfgp,
cfg->pool = result_pool;
cfg->x_pool = svn_pool_create(result_pool);
cfg->x_values = FALSE;
- cfg->tmp_key = svn_stringbuf_create("", result_pool);
- cfg->tmp_value = svn_stringbuf_create("", result_pool);
+ cfg->tmp_key = svn_stringbuf_create_empty(result_pool);
+ cfg->tmp_value = svn_stringbuf_create_empty(result_pool);
cfg->section_names_case_sensitive = section_names_case_sensitive;
+ cfg->option_names_case_sensitive = option_names_case_sensitive;
*cfgp = cfg;
return SVN_NO_ERROR;
}
svn_error_t *
-svn_config_read2(svn_config_t **cfgp, const char *file,
+svn_config_read3(svn_config_t **cfgp, const char *file,
svn_boolean_t must_exist,
svn_boolean_t section_names_case_sensitive,
- apr_pool_t *pool)
+ svn_boolean_t option_names_case_sensitive,
+ apr_pool_t *result_pool)
{
svn_config_t *cfg;
svn_error_t *err;
- SVN_ERR(svn_config_create(&cfg, section_names_case_sensitive, pool));
+ SVN_ERR(svn_config_create2(&cfg,
+ section_names_case_sensitive,
+ option_names_case_sensitive,
+ result_pool));
/* Yes, this is platform-specific code in Subversion, but there's no
practical way to migrate it into APR, as it's simultaneously
@@ -115,10 +120,10 @@ svn_config_read2(svn_config_t **cfgp, const char *file,
#ifdef WIN32
if (0 == strncmp(file, SVN_REGISTRY_PREFIX, SVN_REGISTRY_PREFIX_LEN))
err = svn_config__parse_registry(cfg, file + SVN_REGISTRY_PREFIX_LEN,
- must_exist, pool);
+ must_exist, result_pool);
else
#endif /* WIN32 */
- err = svn_config__parse_file(cfg, file, must_exist, pool);
+ err = svn_config__parse_file(cfg, file, must_exist, result_pool);
if (err != SVN_NO_ERROR)
return err;
@@ -128,7 +133,31 @@ svn_config_read2(svn_config_t **cfgp, const char *file,
return SVN_NO_ERROR;
}
+svn_error_t *
+svn_config_parse(svn_config_t **cfgp, svn_stream_t *stream,
+ svn_boolean_t section_names_case_sensitive,
+ svn_boolean_t option_names_case_sensitive,
+ apr_pool_t *result_pool)
+{
+ svn_config_t *cfg;
+ svn_error_t *err;
+ apr_pool_t *scratch_pool = svn_pool_create(result_pool);
+ err = svn_config_create2(&cfg,
+ section_names_case_sensitive,
+ option_names_case_sensitive,
+ result_pool);
+
+ if (err == SVN_NO_ERROR)
+ err = svn_config__parse_stream(cfg, stream, result_pool, scratch_pool);
+
+ if (err == SVN_NO_ERROR)
+ *cfgp = cfg;
+
+ svn_pool_destroy(scratch_pool);
+
+ return err;
+}
/* Read various configuration sources into *CFGP, in this order, with
* later reads overriding the results of earlier ones:
@@ -170,7 +199,8 @@ read_all(svn_config_t **cfgp,
SVN_ERR(svn_config_merge(*cfgp, sys_file_path, FALSE));
else
{
- SVN_ERR(svn_config_read2(cfgp, sys_file_path, FALSE, FALSE, pool));
+ SVN_ERR(svn_config_read3(cfgp, sys_file_path,
+ FALSE, FALSE, FALSE, pool));
red_config = TRUE;
}
}
@@ -197,13 +227,14 @@ read_all(svn_config_t **cfgp,
SVN_ERR(svn_config_merge(*cfgp, usr_file_path, FALSE));
else
{
- SVN_ERR(svn_config_read2(cfgp, usr_file_path, FALSE, FALSE, pool));
+ SVN_ERR(svn_config_read3(cfgp, usr_file_path,
+ FALSE, FALSE, FALSE, pool));
red_config = TRUE;
}
}
if (! red_config)
- *cfgp = NULL;
+ SVN_ERR(svn_config_create2(cfgp, FALSE, FALSE, pool));
return SVN_NO_ERROR;
}
@@ -333,7 +364,10 @@ svn_config_merge(svn_config_t *cfg, const char *file,
### We could use a tmp subpool for this, since merge_cfg is going
to be tossed afterwards. Premature optimization, though? */
svn_config_t *merge_cfg;
- SVN_ERR(svn_config_read2(&merge_cfg, file, must_exist, FALSE, cfg->pool));
+ SVN_ERR(svn_config_read3(&merge_cfg, file, must_exist,
+ cfg->section_names_case_sensitive,
+ cfg->option_names_case_sensitive,
+ cfg->pool));
/* Now copy the new options into the original table. */
for_each_option(merge_cfg, cfg, merge_cfg->pool, merge_callback);
@@ -408,7 +442,8 @@ find_option(svn_config_t *cfg, const char *section, const char *option,
/* Canonicalize the option key */
svn_stringbuf_set(cfg->tmp_key, option);
- make_hash_key(cfg->tmp_key->data);
+ if (! cfg->option_names_case_sensitive)
+ make_hash_key(cfg->tmp_key->data);
opt = apr_hash_get(sec->options, cfg->tmp_key->data,
cfg->tmp_key->len);
@@ -442,19 +477,30 @@ make_string_from_option(const char **valuep, svn_config_t *cfg,
/* Expand the option value if necessary. */
if (!opt->expanded)
{
- apr_pool_t *tmp_pool = (x_pool ? x_pool : svn_pool_create(cfg->x_pool));
+ /* before attempting to expand an option, check for the placeholder.
+ * If none is there, there is no point in calling expand_option_value.
+ */
+ if (opt->value && strchr(opt->value, '%'))
+ {
+ apr_pool_t *tmp_pool = (x_pool ? x_pool : svn_pool_create(cfg->x_pool));
- expand_option_value(cfg, section, opt->value, &opt->x_value, tmp_pool);
- opt->expanded = TRUE;
+ expand_option_value(cfg, section, opt->value, &opt->x_value, tmp_pool);
+ opt->expanded = TRUE;
- if (!x_pool)
+ if (x_pool != cfg->x_pool)
+ {
+ /* Grab the fully expanded value from tmp_pool before its
+ disappearing act. */
+ if (opt->x_value)
+ opt->x_value = apr_pstrmemdup(cfg->x_pool, opt->x_value,
+ strlen(opt->x_value));
+ if (!x_pool)
+ svn_pool_destroy(tmp_pool);
+ }
+ }
+ else
{
- /* Grab the fully expanded value from tmp_pool before its
- disappearing act. */
- if (opt->x_value)
- opt->x_value = apr_pstrmemdup(cfg->x_pool, opt->x_value,
- strlen(opt->x_value));
- svn_pool_destroy(tmp_pool);
+ opt->expanded = TRUE;
}
}
@@ -554,6 +600,47 @@ expand_option_value(svn_config_t *cfg, cfg_section_t *section,
*opt_x_valuep = NULL;
}
+static cfg_section_t *
+svn_config_addsection(svn_config_t *cfg,
+ const char *section)
+{
+ cfg_section_t *s;
+ const char *hash_key;
+
+ s = apr_palloc(cfg->pool, sizeof(cfg_section_t));
+ s->name = apr_pstrdup(cfg->pool, section);
+ if(cfg->section_names_case_sensitive)
+ hash_key = s->name;
+ else
+ hash_key = make_hash_key(apr_pstrdup(cfg->pool, section));
+ s->options = apr_hash_make(cfg->pool);
+ svn_hash_sets(cfg->sections, hash_key, s);
+
+ return s;
+}
+
+static void
+svn_config_create_option(cfg_option_t **opt,
+ const char *option,
+ const char *value,
+ svn_boolean_t option_names_case_sensitive,
+ apr_pool_t *pool)
+{
+ cfg_option_t *o;
+
+ o = apr_palloc(pool, sizeof(cfg_option_t));
+ o->name = apr_pstrdup(pool, option);
+ if(option_names_case_sensitive)
+ o->hash_key = o->name;
+ else
+ o->hash_key = make_hash_key(apr_pstrdup(pool, option));
+
+ o->value = apr_pstrdup(pool, value);
+ o->x_value = NULL;
+ o->expanded = FALSE;
+
+ *opt = o;
+}
void
@@ -561,6 +648,7 @@ svn_config_get(svn_config_t *cfg, const char **valuep,
const char *section, const char *option,
const char *default_value)
{
+ *valuep = default_value;
if (cfg)
{
cfg_section_t *sec;
@@ -570,23 +658,21 @@ svn_config_get(svn_config_t *cfg, const char **valuep,
make_string_from_option(valuep, cfg, sec, opt, NULL);
}
else
- {
- apr_pool_t *tmp_pool = svn_pool_create(cfg->x_pool);
- const char *x_default;
- expand_option_value(cfg, sec, default_value, &x_default, tmp_pool);
- if (x_default)
- {
- svn_stringbuf_set(cfg->tmp_value, x_default);
- *valuep = cfg->tmp_value->data;
- }
- else
- *valuep = default_value;
- svn_pool_destroy(tmp_pool);
- }
- }
- else
- {
- *valuep = default_value;
+ /* before attempting to expand an option, check for the placeholder.
+ * If none is there, there is no point in calling expand_option_value.
+ */
+ if (default_value && strchr(default_value, '%'))
+ {
+ apr_pool_t *tmp_pool = svn_pool_create(cfg->x_pool);
+ const char *x_default;
+ expand_option_value(cfg, sec, default_value, &x_default, tmp_pool);
+ if (x_default)
+ {
+ svn_stringbuf_set(cfg->tmp_value, x_default);
+ *valuep = cfg->tmp_value->data;
+ }
+ svn_pool_destroy(tmp_pool);
+ }
}
}
@@ -612,28 +698,17 @@ svn_config_set(svn_config_t *cfg,
}
/* Create a new option */
- opt = apr_palloc(cfg->pool, sizeof(*opt));
- opt->name = apr_pstrdup(cfg->pool, option);
- opt->hash_key = make_hash_key(apr_pstrdup(cfg->pool, option));
-
- opt->value = apr_pstrdup(cfg->pool, value);
- opt->x_value = NULL;
- opt->expanded = FALSE;
+ svn_config_create_option(&opt, option, value,
+ cfg->option_names_case_sensitive,
+ cfg->pool);
if (sec == NULL)
{
/* Even the section doesn't exist. Create it. */
- sec = apr_palloc(cfg->pool, sizeof(*sec));
- sec->name = apr_pstrdup(cfg->pool, section);
- if(cfg->section_names_case_sensitive)
- sec->hash_key = sec->name;
- else
- sec->hash_key = make_hash_key(apr_pstrdup(cfg->pool, section));
- sec->options = apr_hash_make(cfg->pool);
- apr_hash_set(cfg->sections, sec->hash_key, APR_HASH_KEY_STRING, sec);
+ sec = svn_config_addsection(cfg, section);
}
- apr_hash_set(sec->options, opt->hash_key, APR_HASH_KEY_STRING, opt);
+ svn_hash_sets(sec->options, opt->hash_key, opt);
}
@@ -697,6 +772,33 @@ svn_config_set_bool(svn_config_t *cfg,
}
svn_error_t *
+svn_config_get_int64(svn_config_t *cfg,
+ apr_int64_t *valuep,
+ const char *section,
+ const char *option,
+ apr_int64_t default_value)
+{
+ const char *tmp_value;
+ svn_config_get(cfg, &tmp_value, section, option, NULL);
+ if (tmp_value)
+ return svn_cstring_strtoi64(valuep, tmp_value,
+ APR_INT64_MIN, APR_INT64_MAX, 10);
+
+ *valuep = default_value;
+ return SVN_NO_ERROR;
+}
+
+void
+svn_config_set_int64(svn_config_t *cfg,
+ const char *section,
+ const char *option,
+ apr_int64_t value)
+{
+ svn_config_set(cfg, section, option,
+ apr_psprintf(cfg->pool, "%" APR_INT64_T_FMT, value));
+}
+
+svn_error_t *
svn_config_get_yes_no_ask(svn_config_t *cfg, const char **valuep,
const char *section, const char *option,
const char* default_value)
@@ -725,6 +827,36 @@ svn_config_get_yes_no_ask(svn_config_t *cfg, const char **valuep,
return SVN_NO_ERROR;
}
+svn_error_t *
+svn_config_get_tristate(svn_config_t *cfg, svn_tristate_t *valuep,
+ const char *section, const char *option,
+ const char *unknown_value,
+ svn_tristate_t default_value)
+{
+ const char *tmp_value;
+
+ svn_config_get(cfg, &tmp_value, section, option, NULL);
+
+ if (! tmp_value)
+ {
+ *valuep = default_value;
+ }
+ else if (0 == svn_cstring_casecmp(tmp_value, unknown_value))
+ {
+ *valuep = svn_tristate_unknown;
+ }
+ else
+ {
+ svn_boolean_t bool_val;
+ /* We already incorporated default_value into tmp_value if
+ necessary, so the FALSE below will be ignored unless the
+ caller is doing something it shouldn't be doing. */
+ SVN_ERR(get_bool(&bool_val, tmp_value, FALSE, section, option));
+ *valuep = bool_val ? svn_tristate_true : svn_tristate_false;
+ }
+
+ return SVN_NO_ERROR;
+}
int
svn_config_enumerate_sections(svn_config_t *cfg,
@@ -903,7 +1035,7 @@ const char *svn_config_find_group(svn_config_t *cfg, const char *key,
gb.key = key;
gb.match = NULL;
gb.pool = pool;
- svn_config_enumerate2(cfg, master_section, search_groups, &gb, pool);
+ (void) svn_config_enumerate2(cfg, master_section, search_groups, &gb, pool);
return gb.match;
}
@@ -924,6 +1056,97 @@ svn_config_get_server_setting(svn_config_t *cfg,
return retval;
}
+
+svn_error_t *
+svn_config_dup(svn_config_t **cfgp,
+ svn_config_t *src,
+ apr_pool_t *pool)
+{
+ apr_hash_index_t *sectidx;
+ apr_hash_index_t *optidx;
+
+ *cfgp = 0;
+ SVN_ERR(svn_config_create2(cfgp, FALSE, FALSE, pool));
+
+ (*cfgp)->x_values = src->x_values;
+ (*cfgp)->section_names_case_sensitive = src->section_names_case_sensitive;
+ (*cfgp)->option_names_case_sensitive = src->option_names_case_sensitive;
+
+ for (sectidx = apr_hash_first(pool, src->sections);
+ sectidx != NULL;
+ sectidx = apr_hash_next(sectidx))
+ {
+ const void *sectkey;
+ void *sectval;
+ apr_ssize_t sectkeyLength;
+ cfg_section_t * srcsect;
+ cfg_section_t * destsec;
+
+ apr_hash_this(sectidx, &sectkey, &sectkeyLength, &sectval);
+ srcsect = sectval;
+
+ destsec = svn_config_addsection(*cfgp, srcsect->name);
+
+ for (optidx = apr_hash_first(pool, srcsect->options);
+ optidx != NULL;
+ optidx = apr_hash_next(optidx))
+ {
+ const void *optkey;
+ void *optval;
+ apr_ssize_t optkeyLength;
+ cfg_option_t *srcopt;
+ cfg_option_t *destopt;
+
+ apr_hash_this(optidx, &optkey, &optkeyLength, &optval);
+ srcopt = optval;
+
+ svn_config_create_option(&destopt, srcopt->name, srcopt->value,
+ (*cfgp)->option_names_case_sensitive,
+ pool);
+
+ destopt->value = apr_pstrdup(pool, srcopt->value);
+ destopt->x_value = apr_pstrdup(pool, srcopt->x_value);
+ destopt->expanded = srcopt->expanded;
+ apr_hash_set(destsec->options,
+ apr_pstrdup(pool, (const char*)optkey),
+ optkeyLength, destopt);
+ }
+ }
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_config_copy_config(apr_hash_t **cfg_hash,
+ apr_hash_t *src_hash,
+ apr_pool_t *pool)
+{
+ apr_hash_index_t *cidx;
+
+ *cfg_hash = apr_hash_make(pool);
+ for (cidx = apr_hash_first(pool, src_hash);
+ cidx != NULL;
+ cidx = apr_hash_next(cidx))
+ {
+ const void *ckey;
+ void *cval;
+ apr_ssize_t ckeyLength;
+ svn_config_t * srcconfig;
+ svn_config_t * destconfig;
+
+ apr_hash_this(cidx, &ckey, &ckeyLength, &cval);
+ srcconfig = cval;
+
+ SVN_ERR(svn_config_dup(&destconfig, srcconfig, pool));
+
+ apr_hash_set(*cfg_hash,
+ apr_pstrdup(pool, (const char*)ckey),
+ ckeyLength, destconfig);
+ }
+
+ return SVN_NO_ERROR;
+}
+
svn_error_t*
svn_config_get_server_setting_int(svn_config_t *cfg,
const char *server_group,
@@ -974,5 +1197,13 @@ svn_config_get_server_setting_bool(svn_config_t *cfg,
svn_boolean_t
svn_config_has_section(svn_config_t *cfg, const char *section)
{
- return apr_hash_get(cfg->sections, section, APR_HASH_KEY_STRING) != NULL;
+ cfg_section_t *sec;
+
+ /* Canonicalize the hash key */
+ svn_stringbuf_set(cfg->tmp_key, section);
+ if (! cfg->section_names_case_sensitive)
+ make_hash_key(cfg->tmp_key->data);
+
+ sec = svn_hash_gets(cfg->sections, cfg->tmp_key->data);
+ return sec != NULL;
}
diff --git a/subversion/libsvn_subr/config_auth.c b/subversion/libsvn_subr/config_auth.c
index bdf8f2f..ed26a58 100644
--- a/subversion/libsvn_subr/config_auth.c
+++ b/subversion/libsvn_subr/config_auth.c
@@ -26,21 +26,25 @@
#include "svn_dirent_uri.h"
#include "svn_hash.h"
#include "svn_io.h"
-
+#include "svn_pools.h"
#include "config_impl.h"
+#include "auth.h"
+
#include "svn_private_config.h"
+#include "private/svn_auth_private.h"
+
/* Helper for svn_config_{read|write}_auth_data. Return a path to a
file within ~/.subversion/auth/ that holds CRED_KIND credentials
within REALMSTRING. If no path is available *PATH will be set to
NULL. */
-static svn_error_t *
-auth_file_path(const char **path,
- const char *cred_kind,
- const char *realmstring,
- const char *config_dir,
- apr_pool_t *pool)
+svn_error_t *
+svn_auth__file_path(const char **path,
+ const char *cred_kind,
+ const char *realmstring,
+ const char *config_dir,
+ apr_pool_t *pool)
{
const char *authdir_path, *hexname;
svn_checksum_t *checksum;
@@ -81,8 +85,8 @@ svn_config_read_auth_data(apr_hash_t **hash,
*hash = NULL;
- SVN_ERR(auth_file_path(&auth_path, cred_kind, realmstring, config_dir,
- pool));
+ SVN_ERR(svn_auth__file_path(&auth_path, cred_kind, realmstring, config_dir,
+ pool));
if (! auth_path)
return SVN_NO_ERROR;
@@ -90,6 +94,7 @@ svn_config_read_auth_data(apr_hash_t **hash,
if (kind == svn_node_file)
{
svn_stream_t *stream;
+ svn_string_t *stored_realm;
SVN_ERR_W(svn_stream_open_readonly(&stream, auth_path, pool, pool),
_("Unable to open auth file for reading"));
@@ -100,6 +105,11 @@ svn_config_read_auth_data(apr_hash_t **hash,
apr_psprintf(pool, _("Error parsing '%s'"),
svn_dirent_local_style(auth_path, pool)));
+ stored_realm = svn_hash_gets(*hash, SVN_CONFIG_REALMSTRING_KEY);
+
+ if (!stored_realm || strcmp(stored_realm->data, realmstring) != 0)
+ *hash = NULL; /* Hash collision, or somebody tampering with storage */
+
SVN_ERR(svn_stream_close(stream));
}
@@ -118,16 +128,16 @@ svn_config_write_auth_data(apr_hash_t *hash,
svn_stream_t *stream;
const char *auth_path;
- SVN_ERR(auth_file_path(&auth_path, cred_kind, realmstring, config_dir,
- pool));
+ SVN_ERR(svn_auth__file_path(&auth_path, cred_kind, realmstring, config_dir,
+ pool));
if (! auth_path)
return svn_error_create(SVN_ERR_NO_AUTH_FILE_PATH, NULL,
_("Unable to locate auth file"));
/* Add the realmstring to the hash, so programs (or users) can
verify exactly which set of credentials this file holds. */
- apr_hash_set(hash, SVN_CONFIG_REALMSTRING_KEY, APR_HASH_KEY_STRING,
- svn_string_create(realmstring, pool));
+ svn_hash_sets(hash, SVN_CONFIG_REALMSTRING_KEY,
+ svn_string_create(realmstring, pool));
SVN_ERR_W(svn_io_file_open(&authfile, auth_path,
(APR_WRITE | APR_CREATE | APR_TRUNCATE
@@ -144,7 +154,124 @@ svn_config_write_auth_data(apr_hash_t *hash,
/* To be nice, remove the realmstring from the hash again, just in
case the caller wants their hash unchanged. */
- apr_hash_set(hash, SVN_CONFIG_REALMSTRING_KEY, APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(hash, SVN_CONFIG_REALMSTRING_KEY, NULL);
+
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_config_walk_auth_data(const char *config_dir,
+ svn_config_auth_walk_func_t walk_func,
+ void *walk_baton,
+ apr_pool_t *scratch_pool)
+{
+ int i;
+ apr_pool_t *iterpool;
+ svn_boolean_t finished = FALSE;
+ const char *cred_kinds[] =
+ {
+ SVN_AUTH_CRED_SIMPLE,
+ SVN_AUTH_CRED_USERNAME,
+ SVN_AUTH_CRED_SSL_CLIENT_CERT,
+ SVN_AUTH_CRED_SSL_CLIENT_CERT_PW,
+ SVN_AUTH_CRED_SSL_SERVER_TRUST,
+ NULL
+ };
+
+ iterpool = svn_pool_create(scratch_pool);
+ for (i = 0; cred_kinds[i]; i++)
+ {
+ const char *item_path;
+ const char *dir_path;
+ apr_hash_t *nodes;
+ svn_error_t *err;
+ apr_pool_t *itempool;
+ apr_hash_index_t *hi;
+
+ svn_pool_clear(iterpool);
+
+ if (finished)
+ break;
+
+ SVN_ERR(svn_auth__file_path(&item_path, cred_kinds[i], "!", config_dir,
+ iterpool));
+
+ dir_path = svn_dirent_dirname(item_path, iterpool);
+
+ err = svn_io_get_dirents3(&nodes, dir_path, TRUE, iterpool, iterpool);
+ if (err)
+ {
+ if (!APR_STATUS_IS_ENOENT(err->apr_err)
+ && !SVN__APR_STATUS_IS_ENOTDIR(err->apr_err))
+ return svn_error_trace(err);
+
+ svn_error_clear(err);
+ continue;
+ }
+
+ itempool = svn_pool_create(iterpool);
+ for (hi = apr_hash_first(iterpool, nodes); hi; hi = apr_hash_next(hi))
+ {
+ svn_io_dirent2_t *dirent = svn__apr_hash_index_val(hi);
+ svn_stream_t *stream;
+ apr_hash_t *creds_hash;
+ const svn_string_t *realm;
+ svn_boolean_t delete_file = FALSE;
+
+ if (finished)
+ break;
+
+ if (dirent->kind != svn_node_file)
+ continue;
+
+ svn_pool_clear(itempool);
+
+ item_path = svn_dirent_join(dir_path, svn__apr_hash_index_key(hi),
+ itempool);
+
+ err = svn_stream_open_readonly(&stream, item_path,
+ itempool, itempool);
+ if (err)
+ {
+ /* Ignore this file. There are no credentials in it anyway */
+ svn_error_clear(err);
+ continue;
+ }
+
+ creds_hash = apr_hash_make(itempool);
+ err = svn_hash_read2(creds_hash, stream,
+ SVN_HASH_TERMINATOR, itempool);
+ err = svn_error_compose_create(err, svn_stream_close(stream));
+ if (err)
+ {
+ /* Ignore this file. There are no credentials in it anyway */
+ svn_error_clear(err);
+ continue;
+ }
+
+ realm = svn_hash_gets(creds_hash, SVN_CONFIG_REALMSTRING_KEY);
+ if (! realm)
+ continue; /* Not an auth file */
+
+ err = walk_func(&delete_file, walk_baton, cred_kinds[i],
+ realm->data, creds_hash, itempool);
+ if (err && err->apr_err == SVN_ERR_CEASE_INVOCATION)
+ {
+ svn_error_clear(err);
+ err = SVN_NO_ERROR;
+ finished = TRUE;
+ }
+ SVN_ERR(err);
+
+ if (delete_file)
+ {
+ /* Delete the file on disk */
+ SVN_ERR(svn_io_remove_file2(item_path, TRUE, itempool));
+ }
+ }
+ }
+ svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
diff --git a/subversion/libsvn_subr/config_file.c b/subversion/libsvn_subr/config_file.c
index 185d990..9969b8e 100644
--- a/subversion/libsvn_subr/config_file.c
+++ b/subversion/libsvn_subr/config_file.c
@@ -50,25 +50,28 @@
/* File parsing context */
typedef struct parse_context_t
{
- /* This config struct and file */
+ /* This config struct */
svn_config_t *cfg;
- const char *file;
- /* The file descriptor */
+ /* The stream struct */
svn_stream_t *stream;
/* The current line in the file */
int line;
- /* Cached ungotten character - streams don't support ungetc()
- [emulate it] */
+ /* Emulate an ungetc */
int ungotten_char;
- svn_boolean_t have_ungotten_char;
- /* Temporary strings, allocated from the temp pool */
+ /* Temporary strings */
svn_stringbuf_t *section;
svn_stringbuf_t *option;
svn_stringbuf_t *value;
+
+ /* Parser buffer for getc() to avoid call overhead into several libraries
+ for every character */
+ char parser_buffer[SVN__STREAM_CHUNK_SIZE]; /* Larger than most config files */
+ size_t buffer_pos; /* Current position within parser_buffer */
+ size_t buffer_size; /* parser_buffer contains this many bytes */
} parse_context_t;
@@ -82,27 +85,61 @@ typedef struct parse_context_t
static APR_INLINE svn_error_t *
parser_getc(parse_context_t *ctx, int *c)
{
- if (ctx->have_ungotten_char)
- {
- *c = ctx->ungotten_char;
- ctx->have_ungotten_char = FALSE;
- }
- else
+ do
{
- char char_buf;
- apr_size_t readlen = 1;
+ if (ctx->ungotten_char != EOF)
+ {
+ *c = ctx->ungotten_char;
+ ctx->ungotten_char = EOF;
+ }
+ else if (ctx->buffer_pos < ctx->buffer_size)
+ {
+ *c = (unsigned char)ctx->parser_buffer[ctx->buffer_pos];
+ ctx->buffer_pos++;
+ }
+ else
+ {
+ ctx->buffer_pos = 0;
+ ctx->buffer_size = sizeof(ctx->parser_buffer);
- SVN_ERR(svn_stream_read(ctx->stream, &char_buf, &readlen));
+ SVN_ERR(svn_stream_read(ctx->stream, ctx->parser_buffer,
+ &(ctx->buffer_size)));
- if (readlen == 1)
- *c = char_buf;
- else
- *c = EOF;
+ if (ctx->buffer_pos < ctx->buffer_size)
+ {
+ *c = (unsigned char)ctx->parser_buffer[ctx->buffer_pos];
+ ctx->buffer_pos++;
+ }
+ else
+ *c = EOF;
+ }
}
+ while (*c == '\r');
return SVN_NO_ERROR;
}
+/* Simplified version of parser_getc() to be used inside skipping loops.
+ * It will not check for 'ungotton' chars and may or may not ignore '\r'.
+ *
+ * In a 'while(cond) getc();' loop, the first iteration must call
+ * parser_getc to handle all the special cases. Later iterations should
+ * use parser_getc_plain for maximum performance.
+ */
+static APR_INLINE svn_error_t *
+parser_getc_plain(parse_context_t *ctx, int *c)
+{
+ if (ctx->buffer_pos < ctx->buffer_size)
+ {
+ *c = (unsigned char)ctx->parser_buffer[ctx->buffer_pos];
+ ctx->buffer_pos++;
+
+ return SVN_NO_ERROR;
+ }
+
+ return parser_getc(ctx, c);
+}
+
/* Emulate ungetc() because streams don't support it.
*
* Use CTX to store the ungotten character C.
@@ -111,7 +148,6 @@ static APR_INLINE svn_error_t *
parser_ungetc(parse_context_t *ctx, int c)
{
ctx->ungotten_char = c;
- ctx->have_ungotten_char = TRUE;
return SVN_NO_ERROR;
}
@@ -123,14 +159,14 @@ parser_ungetc(parse_context_t *ctx, int c)
static APR_INLINE svn_error_t *
skip_whitespace(parse_context_t *ctx, int *c, int *pcount)
{
- int ch;
+ int ch = 0;
int count = 0;
SVN_ERR(parser_getc(ctx, &ch));
- while (ch != EOF && ch != '\n' && svn_ctype_isspace(ch))
+ while (svn_ctype_isspace(ch) && ch != '\n' && ch != EOF)
{
++count;
- SVN_ERR(parser_getc(ctx, &ch));
+ SVN_ERR(parser_getc_plain(ctx, &ch));
}
*pcount = count;
*c = ch;
@@ -146,13 +182,39 @@ skip_to_eoln(parse_context_t *ctx, int *c)
int ch;
SVN_ERR(parser_getc(ctx, &ch));
- while (ch != EOF && ch != '\n')
- SVN_ERR(parser_getc(ctx, &ch));
+ while (ch != '\n' && ch != EOF)
+ SVN_ERR(parser_getc_plain(ctx, &ch));
*c = ch;
return SVN_NO_ERROR;
}
+/* Skip a UTF-8 Byte Order Mark if found. */
+static APR_INLINE svn_error_t *
+skip_bom(parse_context_t *ctx)
+{
+ int ch;
+
+ SVN_ERR(parser_getc(ctx, &ch));
+ if (ch == 0xEF)
+ {
+ const unsigned char *buf = (unsigned char *)ctx->parser_buffer;
+ /* This makes assumptions about the implementation of parser_getc and
+ * the use of skip_bom. Specifically that parser_getc() will get all
+ * of the BOM characters into the parse_context_t buffer. This can
+ * safely be assumed as long as we only try to use skip_bom() at the
+ * start of the stream and the buffer is longer than 3 characters. */
+ SVN_ERR_ASSERT(ctx->buffer_size > ctx->buffer_pos + 1);
+ if (buf[ctx->buffer_pos] == 0xBB && buf[ctx->buffer_pos + 1] == 0xBF)
+ ctx->buffer_pos += 2;
+ else
+ SVN_ERR(parser_ungetc(ctx, ch));
+ }
+ else
+ SVN_ERR(parser_ungetc(ctx, ch));
+
+ return SVN_NO_ERROR;
+}
/* Parse a single option value */
static svn_error_t *
@@ -241,7 +303,7 @@ parse_value(int *pch, parse_context_t *ctx)
/* Parse a single option */
static svn_error_t *
-parse_option(int *pch, parse_context_t *ctx, apr_pool_t *pool)
+parse_option(int *pch, parse_context_t *ctx, apr_pool_t *scratch_pool)
{
svn_error_t *err = SVN_NO_ERROR;
int ch;
@@ -259,8 +321,7 @@ parse_option(int *pch, parse_context_t *ctx, apr_pool_t *pool)
{
ch = EOF;
err = svn_error_createf(SVN_ERR_MALFORMED_FILE, NULL,
- "%s:%d: Option must end with ':' or '='",
- svn_dirent_local_style(ctx->file, pool),
+ "line %d: Option must end with ':' or '='",
ctx->line);
}
else
@@ -284,7 +345,8 @@ parse_option(int *pch, parse_context_t *ctx, apr_pool_t *pool)
* starts a section name.
*/
static svn_error_t *
-parse_section_name(int *pch, parse_context_t *ctx, apr_pool_t *pool)
+parse_section_name(int *pch, parse_context_t *ctx,
+ apr_pool_t *scratch_pool)
{
svn_error_t *err = SVN_NO_ERROR;
int ch;
@@ -302,8 +364,7 @@ parse_section_name(int *pch, parse_context_t *ctx, apr_pool_t *pool)
{
ch = EOF;
err = svn_error_createf(SVN_ERR_MALFORMED_FILE, NULL,
- "%s:%d: Section header must end with ']'",
- svn_dirent_local_style(ctx->file, pool),
+ "line %d: Section header must end with ']'",
ctx->line);
}
else
@@ -363,91 +424,113 @@ svn_config__sys_config_path(const char **path_p,
svn_error_t *
svn_config__parse_file(svn_config_t *cfg, const char *file,
- svn_boolean_t must_exist, apr_pool_t *pool)
+ svn_boolean_t must_exist, apr_pool_t *result_pool)
{
svn_error_t *err = SVN_NO_ERROR;
- parse_context_t ctx;
- int ch, count;
svn_stream_t *stream;
+ apr_pool_t *scratch_pool = svn_pool_create(result_pool);
- err = svn_stream_open_readonly(&stream, file, pool, pool);
+ err = svn_stream_open_readonly(&stream, file, scratch_pool, scratch_pool);
if (! must_exist && err && APR_STATUS_IS_ENOENT(err->apr_err))
{
svn_error_clear(err);
+ svn_pool_destroy(scratch_pool);
return SVN_NO_ERROR;
}
else
SVN_ERR(err);
- ctx.cfg = cfg;
- ctx.file = file;
- ctx.stream = svn_subst_stream_translated(stream, "\n", TRUE, NULL, FALSE,
- pool);
- ctx.line = 1;
- ctx.have_ungotten_char = FALSE;
- ctx.section = svn_stringbuf_create("", pool);
- ctx.option = svn_stringbuf_create("", pool);
- ctx.value = svn_stringbuf_create("", pool);
+ err = svn_config__parse_stream(cfg, stream, result_pool, scratch_pool);
+
+ if (err != SVN_NO_ERROR)
+ {
+ /* Add the filename to the error stack. */
+ err = svn_error_createf(err->apr_err, err,
+ "Error while parsing config file: %s:",
+ svn_dirent_local_style(file, scratch_pool));
+ }
+
+ /* Close the streams (and other cleanup): */
+ svn_pool_destroy(scratch_pool);
+
+ return err;
+}
+
+svn_error_t *
+svn_config__parse_stream(svn_config_t *cfg, svn_stream_t *stream,
+ apr_pool_t *result_pool, apr_pool_t *scratch_pool)
+{
+ parse_context_t *ctx;
+ int ch, count;
+
+ ctx = apr_palloc(scratch_pool, sizeof(*ctx));
+
+ ctx->cfg = cfg;
+ ctx->stream = stream;
+ ctx->line = 1;
+ ctx->ungotten_char = EOF;
+ ctx->section = svn_stringbuf_create_empty(scratch_pool);
+ ctx->option = svn_stringbuf_create_empty(scratch_pool);
+ ctx->value = svn_stringbuf_create_empty(scratch_pool);
+ ctx->buffer_pos = 0;
+ ctx->buffer_size = 0;
+
+ SVN_ERR(skip_bom(ctx));
do
{
- SVN_ERR(skip_whitespace(&ctx, &ch, &count));
+ SVN_ERR(skip_whitespace(ctx, &ch, &count));
switch (ch)
{
case '[': /* Start of section header */
if (count == 0)
- SVN_ERR(parse_section_name(&ch, &ctx, pool));
+ SVN_ERR(parse_section_name(&ch, ctx, scratch_pool));
else
return svn_error_createf(SVN_ERR_MALFORMED_FILE, NULL,
- "%s:%d: Section header"
+ "line %d: Section header"
" must start in the first column",
- svn_dirent_local_style(file, pool),
- ctx.line);
+ ctx->line);
break;
case '#': /* Comment */
if (count == 0)
{
- SVN_ERR(skip_to_eoln(&ctx, &ch));
- ++ctx.line;
+ SVN_ERR(skip_to_eoln(ctx, &ch));
+ ++(ctx->line);
}
else
return svn_error_createf(SVN_ERR_MALFORMED_FILE, NULL,
- "%s:%d: Comment"
+ "line %d: Comment"
" must start in the first column",
- svn_dirent_local_style(file, pool),
- ctx.line);
+ ctx->line);
break;
case '\n': /* Empty line */
- ++ctx.line;
+ ++(ctx->line);
break;
case EOF: /* End of file or read error */
break;
default:
- if (svn_stringbuf_isempty(ctx.section))
+ if (svn_stringbuf_isempty(ctx->section))
return svn_error_createf(SVN_ERR_MALFORMED_FILE, NULL,
- "%s:%d: Section header expected",
- svn_dirent_local_style(file, pool),
- ctx.line);
+ "line %d: Section header expected",
+ ctx->line);
else if (count != 0)
return svn_error_createf(SVN_ERR_MALFORMED_FILE, NULL,
- "%s:%d: Option expected",
- svn_dirent_local_style(file, pool),
- ctx.line);
+ "line %d: Option expected",
+ ctx->line);
else
- SVN_ERR(parse_option(&ch, &ctx, pool));
+ SVN_ERR(parse_option(&ch, ctx, scratch_pool));
break;
}
}
while (ch != EOF);
- /* Close the streams (and other cleanup): */
- return svn_stream_close(ctx.stream);
+ return SVN_NO_ERROR;
}
@@ -748,10 +831,12 @@ svn_config_ensure(const char *config_dir, apr_pool_t *pool)
"### http-timeout Timeout for HTTP requests in seconds"
NL
"### http-compression Whether to compress HTTP requests" NL
+ "### http-max-connections Maximum number of parallel server" NL
+ "### connections to use for any given" NL
+ "### HTTP operation." NL
+ "### http-chunked-requests Whether to use chunked transfer" NL
+ "### encoding for HTTP requests body." NL
"### neon-debug-mask Debug mask for Neon HTTP library" NL
-#ifdef SVN_NEON_0_26
- "### http-auth-types Auth types to use for HTTP library"NL
-#endif
"### ssl-authority-files List of files, each of a trusted CA"
NL
"### ssl-trust-default-ca Trust the system 'default' CAs" NL
@@ -761,37 +846,42 @@ svn_config_ensure(const char *config_dir, apr_pool_t *pool)
"### ssl-pkcs11-provider Name of PKCS#11 provider to use." NL
"### http-library Which library to use for http/https"
NL
- "### connections (neon or serf)" NL
+ "### connections." NL
+ "### http-bulk-updates Whether to request bulk update" NL
+ "### responses or to fetch each file" NL
+ "### in an individual request. " NL
"### store-passwords Specifies whether passwords used" NL
"### to authenticate against a" NL
"### Subversion server may be cached" NL
"### to disk in any way." NL
+#ifndef SVN_DISABLE_PLAINTEXT_PASSWORD_STORAGE
"### store-plaintext-passwords Specifies whether passwords may" NL
"### be cached on disk unencrypted." NL
+#endif
"### store-ssl-client-cert-pp Specifies whether passphrase used" NL
"### to authenticate against a client" NL
"### certificate may be cached to disk" NL
"### in any way" NL
+#ifndef SVN_DISABLE_PLAINTEXT_PASSWORD_STORAGE
"### store-ssl-client-cert-pp-plaintext" NL
"### Specifies whether client cert" NL
"### passphrases may be cached on disk" NL
"### unencrypted (i.e., as plaintext)." NL
+#endif
"### store-auth-creds Specifies whether any auth info" NL
- "### (passwords as well as server certs)"
- NL
+ "### (passwords, server certs, etc.)" NL
"### may be cached to disk." NL
"### username Specifies the default username." NL
"###" NL
"### Set store-passwords to 'no' to avoid storing passwords on disk" NL
- "### in any way, including in password stores. It defaults to 'yes',"
- NL
- "### but Subversion will never save your password to disk in plaintext"
- NL
- "### unless you tell it to." NL
+ "### in any way, including in password stores. It defaults to" NL
+ "### 'yes', but Subversion will never save your password to disk in" NL
+ "### plaintext unless explicitly configured to do so." NL
"### Note that this option only prevents saving of *new* passwords;" NL
"### it doesn't invalidate existing passwords. (To do that, remove" NL
"### the cache files by hand as described in the Subversion book.)" NL
"###" NL
+#ifndef SVN_DISABLE_PLAINTEXT_PASSWORD_STORAGE
"### Set store-plaintext-passwords to 'no' to avoid storing" NL
"### passwords in unencrypted form in the auth/ area of your config" NL
"### directory. Set it to 'yes' to allow Subversion to store" NL
@@ -801,11 +891,12 @@ svn_config_ensure(const char *config_dir, apr_pool_t *pool)
"### this option has no effect if either 'store-passwords' or " NL
"### 'store-auth-creds' is set to 'no'." NL
"###" NL
+#endif
"### Set store-ssl-client-cert-pp to 'no' to avoid storing ssl" NL
"### client certificate passphrases in the auth/ area of your" NL
"### config directory. It defaults to 'yes', but Subversion will" NL
- "### never save your passphrase to disk in plaintext unless you tell"NL
- "### it to via 'store-ssl-client-cert-pp-plaintext' (see below)." NL
+ "### never save your passphrase to disk in plaintext unless" NL
+ "### explicitly configured to do so." NL
"###" NL
"### Note store-ssl-client-cert-pp only prevents the saving of *new*"NL
"### passphrases; it doesn't invalidate existing passphrases. To do"NL
@@ -814,6 +905,7 @@ svn_config_ensure(const char *config_dir, apr_pool_t *pool)
"### svn.serverconfig.netmodel.html\\" NL
"### #svn.serverconfig.netmodel.credcache" NL
"###" NL
+#ifndef SVN_DISABLE_PLAINTEXT_PASSWORD_STORAGE
"### Set store-ssl-client-cert-pp-plaintext to 'no' to avoid storing"NL
"### passphrases in unencrypted form in the auth/ area of your" NL
"### config directory. Set it to 'yes' to allow Subversion to" NL
@@ -823,6 +915,7 @@ svn_config_ensure(const char *config_dir, apr_pool_t *pool)
"### this option has no effect if either 'store-auth-creds' or " NL
"### 'store-ssl-client-cert-pp' is set to 'no'." NL
"###" NL
+#endif
"### Set store-auth-creds to 'no' to avoid storing any Subversion" NL
"### credentials in the auth/ area of your config directory." NL
"### Note that this includes SSL server certificates." NL
@@ -833,6 +926,13 @@ svn_config_ensure(const char *config_dir, apr_pool_t *pool)
"### HTTP timeouts, if given, are specified in seconds. A timeout" NL
"### of 0, i.e. zero, causes a builtin default to be used." NL
"###" NL
+ "### Most users will not need to explicitly set the http-library" NL
+ "### option, but valid values for the option include:" NL
+ "### 'serf': Serf-based module (Subversion 1.5 - present)" NL
+ "### 'neon': Neon-based module (Subversion 1.0 - 1.7)" NL
+ "### Availability of these modules may depend on your specific" NL
+ "### Subversion distribution." NL
+ "###" NL
"### The commented-out examples below are intended only to" NL
"### demonstrate how to use this file; any resemblance to actual" NL
"### servers, living or dead, is entirely coincidental." NL
@@ -854,11 +954,10 @@ svn_config_ensure(const char *config_dir, apr_pool_t *pool)
"# http-proxy-username = blah" NL
"# http-proxy-password = doubleblah" NL
"# http-timeout = 60" NL
-#ifdef SVN_NEON_0_26
- "# http-auth-types = basic;digest;negotiate" NL
-#endif
"# neon-debug-mask = 130" NL
+#ifndef SVN_DISABLE_PLAINTEXT_PASSWORD_STORAGE
"# store-plaintext-passwords = no" NL
+#endif
"# username = harry" NL
"" NL
"### Information for the second group:" NL
@@ -895,18 +994,18 @@ svn_config_ensure(const char *config_dir, apr_pool_t *pool)
"# http-proxy-username = defaultusername" NL
"# http-proxy-password = defaultpassword" NL
"# http-compression = no" NL
-#ifdef SVN_NEON_0_26
- "# http-auth-types = basic;digest;negotiate" NL
-#endif
"# No http-timeout, so just use the builtin default." NL
"# No neon-debug-mask, so neon debugging is disabled." NL
"# ssl-authority-files = /path/to/CAcert.pem;/path/to/CAcert2.pem" NL
"#" NL
"# Password / passphrase caching parameters:" NL
"# store-passwords = no" NL
- "# store-plaintext-passwords = no" NL
"# store-ssl-client-cert-pp = no" NL
- "# store-ssl-client-cert-pp-plaintext = no" NL;
+#ifndef SVN_DISABLE_PLAINTEXT_PASSWORD_STORAGE
+ "# store-plaintext-passwords = no" NL
+ "# store-ssl-client-cert-pp-plaintext = no" NL
+#endif
+ ;
err = svn_io_file_open(&f, path,
(APR_WRITE | APR_CREATE | APR_EXCL),
@@ -954,6 +1053,7 @@ svn_config_ensure(const char *config_dir, apr_pool_t *pool)
"### Valid password stores:" NL
"### gnome-keyring (Unix-like systems)" NL
"### kwallet (Unix-like systems)" NL
+ "### gpg-agent (Unix-like systems)" NL
"### keychain (Mac OS X)" NL
"### windows-cryptoapi (Windows)" NL
#ifdef SVN_HAVE_KEYCHAIN_SERVICES
@@ -961,7 +1061,7 @@ svn_config_ensure(const char *config_dir, apr_pool_t *pool)
#elif defined(WIN32) && !defined(__MINGW32__)
"# password-stores = windows-cryptoapi" NL
#else
- "# password-stores = gnome-keyring,kwallet" NL
+ "# password-stores = gpg-agent,gnome-keyring,kwallet" NL
#endif
"### To disable all password stores, use an empty list:" NL
"# password-stores =" NL
@@ -976,6 +1076,13 @@ svn_config_ensure(const char *config_dir, apr_pool_t *pool)
"# kwallet-svn-application-name-with-pid = yes" NL
#endif
"###" NL
+ "### Set ssl-client-cert-file-prompt to 'yes' to cause the client" NL
+ "### to prompt for a path to a client cert file when the server" NL
+ "### requests a client cert but no client cert file is found in the" NL
+ "### expected place (see the 'ssl-client-cert-file' option in the" NL
+ "### 'servers' configuration file). Defaults to 'no'." NL
+ "# ssl-client-cert-file-prompt = no" NL
+ "###" NL
"### The rest of the [auth] section in this file has been deprecated."
NL
"### Both 'store-passwords' and 'store-auth-creds' can now be" NL
@@ -1038,7 +1145,7 @@ svn_config_ensure(const char *config_dir, apr_pool_t *pool)
"### path separator. A single backslash will be treated as an" NL
"### escape for the following character." NL
"" NL
- "### Section for configuring miscelleneous Subversion options." NL
+ "### Section for configuring miscellaneous Subversion options." NL
"[miscellany]" NL
"### Set global-ignores to a set of whitespace-delimited globs" NL
"### which Subversion will ignore in its 'status' output, and" NL
@@ -1095,7 +1202,22 @@ svn_config_ensure(const char *config_dir, apr_pool_t *pool)
"# *.png = svn:mime-type=image/png" NL
"# *.jpg = svn:mime-type=image/jpeg" NL
"# Makefile = svn:eol-style=native" NL
- "" NL;
+ "" NL
+ "### Section for configuring working copies." NL
+ "[working-copy]" NL
+ "### Set to a list of the names of specific clients that should use" NL
+ "### exclusive SQLite locking of working copies. This increases the"NL
+ "### performance of the client but prevents concurrent access by" NL
+ "### other clients. Third-party clients may also support this" NL
+ "### option." NL
+ "### Possible values:" NL
+ "### svn (the command line client)" NL
+ "# exclusive-locking-clients =" NL
+ "### Set to true to enable exclusive SQLite locking of working" NL
+ "### copies by all clients using the 1.8 APIs. Enabling this may" NL
+ "### cause some clients to fail to work properly. This does not have"NL
+ "### to be set for exclusive-locking-clients to work." NL
+ "# exclusive-locking = false" NL;
err = svn_io_file_open(&f, path,
(APR_WRITE | APR_CREATE | APR_EXCL),
diff --git a/subversion/libsvn_subr/config_impl.h b/subversion/libsvn_subr/config_impl.h
index d795771..a3ab8fa 100644
--- a/subversion/libsvn_subr/config_impl.h
+++ b/subversion/libsvn_subr/config_impl.h
@@ -32,6 +32,7 @@
#include <apr_hash.h>
#include "svn_types.h"
#include "svn_string.h"
+#include "svn_io.h"
#include "svn_config.h"
#include "svn_private_config.h"
@@ -66,6 +67,9 @@ struct svn_config_t
/* Specifies whether section names are populated case sensitively. */
svn_boolean_t section_names_case_sensitive;
+
+ /* Specifies whether option names are populated case sensitively. */
+ svn_boolean_t option_names_case_sensitive;
};
@@ -75,6 +79,12 @@ svn_error_t *svn_config__parse_file(svn_config_t *cfg,
svn_boolean_t must_exist,
apr_pool_t *pool);
+/* Read sections and options from a stream. */
+svn_error_t *svn_config__parse_stream(svn_config_t *cfg,
+ svn_stream_t *stream,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
/* The name of the magic [DEFAULT] section. */
#define SVN_CONFIG__DEFAULT_SECTION "DEFAULT"
diff --git a/subversion/libsvn_subr/config_win.c b/subversion/libsvn_subr/config_win.c
index c35ad47..0a15129 100644
--- a/subversion/libsvn_subr/config_win.c
+++ b/subversion/libsvn_subr/config_win.c
@@ -56,7 +56,7 @@ svn_config__win_config_path(const char **folder, int system_path,
| CSIDL_FLAG_CREATE);
WCHAR folder_ucs2[MAX_PATH];
- apr_size_t inwords, outbytes, outlength;
+ int inwords, outbytes, outlength;
char *folder_utf8;
if (S_OK != SHGetFolderPathW(NULL, csidl, NULL, SHGFP_TYPE_CURRENT,
@@ -109,7 +109,7 @@ parse_section(svn_config_t *cfg, HKEY hkey, const char *section,
svn_stringbuf_ensure(value, SVN_REG_DEFAULT_VALUE_SIZE);
for (index = 0; ; ++index)
{
- option_len = option->blocksize;
+ option_len = (DWORD)option->blocksize;
err = RegEnumValue(hkey, index, option->data, &option_len,
NULL, &type, NULL, NULL);
if (err == ERROR_NO_MORE_ITEMS)
@@ -128,7 +128,7 @@ parse_section(svn_config_t *cfg, HKEY hkey, const char *section,
http://subversion.tigris.org/issues/show_bug.cgi?id=671 */
if (type == REG_SZ && option->data[0] != '#')
{
- DWORD value_len = value->blocksize;
+ DWORD value_len = (DWORD)value->blocksize;
err = RegQueryValueEx(hkey, option->data, NULL, NULL,
(LPBYTE)value->data, &value_len);
if (err == ERROR_MORE_DATA)
@@ -200,9 +200,9 @@ svn_config__parse_registry(svn_config_t *cfg, const char *file,
subpool = svn_pool_create(pool);
- section = svn_stringbuf_create("", subpool);
- option = svn_stringbuf_create("", subpool);
- value = svn_stringbuf_create("", subpool);
+ section = svn_stringbuf_create_empty(subpool);
+ option = svn_stringbuf_create_empty(subpool);
+ value = svn_stringbuf_create_empty(subpool);
/* The top-level values belong to the [DEFAULT] section */
svn_err = parse_section(cfg, hkey, SVN_CONFIG__DEFAULT_SECTION,
@@ -214,19 +214,18 @@ svn_config__parse_registry(svn_config_t *cfg, const char *file,
svn_stringbuf_ensure(section, SVN_REG_DEFAULT_NAME_SIZE);
for (index = 0; ; ++index)
{
- DWORD section_len = section->blocksize;
- FILETIME last_write_time;
+ DWORD section_len = (DWORD)section->blocksize;
HKEY sub_hkey;
err = RegEnumKeyEx(hkey, index, section->data, &section_len,
- NULL, NULL, NULL, &last_write_time);
+ NULL, NULL, NULL, NULL);
if (err == ERROR_NO_MORE_ITEMS)
break;
if (err == ERROR_MORE_DATA)
{
svn_stringbuf_ensure(section, section_len);
err = RegEnumKeyEx(hkey, index, section->data, &section_len,
- NULL, NULL, NULL, &last_write_time);
+ NULL, NULL, NULL, NULL);
}
if (err != ERROR_SUCCESS)
{
diff --git a/subversion/libsvn_subr/constructors.c b/subversion/libsvn_subr/constructors.c
deleted file mode 100644
index 8320ec7..0000000
--- a/subversion/libsvn_subr/constructors.c
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * constructors.c : Constructors for various data structures.
- *
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- * ====================================================================
- */
-
-#include <apr_pools.h>
-#include <apr_strings.h>
-
-#include "svn_types.h"
-#include "svn_props.h"
-#include "svn_string.h"
-
-
-svn_commit_info_t *
-svn_create_commit_info(apr_pool_t *pool)
-{
- svn_commit_info_t *commit_info
- = apr_pcalloc(pool, sizeof(*commit_info));
-
- commit_info->revision = SVN_INVALID_REVNUM;
- /* All other fields were initialized to NULL above. */
-
- return commit_info;
-}
-
-svn_commit_info_t *
-svn_commit_info_dup(const svn_commit_info_t *src_commit_info,
- apr_pool_t *pool)
-{
- svn_commit_info_t *dst_commit_info
- = apr_palloc(pool, sizeof(*dst_commit_info));
-
- dst_commit_info->date = src_commit_info->date
- ? apr_pstrdup(pool, src_commit_info->date) : NULL;
- dst_commit_info->author = src_commit_info->author
- ? apr_pstrdup(pool, src_commit_info->author) : NULL;
- dst_commit_info->revision = src_commit_info->revision;
- dst_commit_info->post_commit_err = src_commit_info->post_commit_err
- ? apr_pstrdup(pool, src_commit_info->post_commit_err) : NULL;
- dst_commit_info->repos_root = src_commit_info->repos_root
- ? apr_pstrdup(pool, src_commit_info->repos_root) : NULL;
-
- return dst_commit_info;
-}
-
-svn_log_changed_path2_t *
-svn_log_changed_path2_create(apr_pool_t *pool)
-{
- svn_log_changed_path2_t *new_changed_path
- = apr_pcalloc(pool, sizeof(*new_changed_path));
-
- new_changed_path->text_modified = svn_tristate_unknown;
- new_changed_path->props_modified = svn_tristate_unknown;
-
- return new_changed_path;
-}
-
-svn_log_changed_path2_t *
-svn_log_changed_path2_dup(const svn_log_changed_path2_t *changed_path,
- apr_pool_t *pool)
-{
- svn_log_changed_path2_t *new_changed_path
- = apr_palloc(pool, sizeof(*new_changed_path));
-
- *new_changed_path = *changed_path;
-
- if (new_changed_path->copyfrom_path)
- new_changed_path->copyfrom_path =
- apr_pstrdup(pool, new_changed_path->copyfrom_path);
-
- return new_changed_path;
-}
-
-/**
- * Reallocate the members of PROP using POOL.
- */
-static void
-svn_prop__members_dup(svn_prop_t *prop, apr_pool_t *pool)
-{
- if (prop->name)
- prop->name = apr_pstrdup(pool, prop->name);
- if (prop->value)
- prop->value = svn_string_dup(prop->value, pool);
-}
-
-svn_prop_t *
-svn_prop_dup(const svn_prop_t *prop, apr_pool_t *pool)
-{
- svn_prop_t *new_prop = apr_palloc(pool, sizeof(*new_prop));
-
- *new_prop = *prop;
-
- svn_prop__members_dup(new_prop, pool);
-
- return new_prop;
-}
-
-apr_array_header_t *
-svn_prop_array_dup(const apr_array_header_t *array, apr_pool_t *pool)
-{
- int i;
- apr_array_header_t *new_array = apr_array_copy(pool, array);
- for (i = 0; i < new_array->nelts; ++i)
- {
- svn_prop_t *elt = &APR_ARRAY_IDX(new_array, i, svn_prop_t);
- svn_prop__members_dup(elt, pool);
- }
- return new_array;
-}
-
-apr_array_header_t *
-svn_prop_hash_to_array(apr_hash_t *hash, apr_pool_t *pool)
-{
- apr_hash_index_t *hi;
- apr_array_header_t *array = apr_array_make(pool, apr_hash_count(hash),
- sizeof(svn_prop_t));
-
- for (hi = apr_hash_first(pool, hash); hi; hi = apr_hash_next(hi))
- {
- const void *key;
- void *val;
- svn_prop_t prop;
-
- apr_hash_this(hi, &key, NULL, &val);
- prop.name = key;
- prop.value = val;
- APR_ARRAY_PUSH(array, svn_prop_t) = prop;
- }
-
- return array;
-}
-
-apr_hash_t *
-svn_prop_hash_dup(apr_hash_t *hash,
- apr_pool_t *pool)
-{
- apr_hash_index_t *hi;
- apr_hash_t *new_hash = apr_hash_make(pool);
-
- for (hi = apr_hash_first(pool, hash); hi; hi = apr_hash_next(hi))
- {
- const void *key;
- apr_ssize_t klen;
- void *prop;
-
- apr_hash_this(hi, &key, &klen, &prop);
- apr_hash_set(new_hash, apr_pstrdup(pool, key), klen,
- svn_string_dup(prop, pool));
- }
- return new_hash;
-}
-
-
-svn_dirent_t *
-svn_dirent_dup(const svn_dirent_t *dirent,
- apr_pool_t *pool)
-{
- svn_dirent_t *new_dirent = apr_palloc(pool, sizeof(*new_dirent));
-
- *new_dirent = *dirent;
-
- new_dirent->last_author = apr_pstrdup(pool, dirent->last_author);
-
- return new_dirent;
-}
-
-svn_log_entry_t *
-svn_log_entry_create(apr_pool_t *pool)
-{
- svn_log_entry_t *log_entry = apr_pcalloc(pool, sizeof(*log_entry));
-
- return log_entry;
-}
-
-svn_log_entry_t *
-svn_log_entry_dup(const svn_log_entry_t *log_entry, apr_pool_t *pool)
-{
- apr_hash_index_t *hi;
- svn_log_entry_t *new_entry = apr_palloc(pool, sizeof(*new_entry));
-
- *new_entry = *log_entry;
-
- if (log_entry->revprops)
- new_entry->revprops = svn_prop_hash_dup(log_entry->revprops, pool);
-
- if (log_entry->changed_paths2)
- {
- new_entry->changed_paths2 = apr_hash_make(pool);
-
- for (hi = apr_hash_first(pool, log_entry->changed_paths2);
- hi; hi = apr_hash_next(hi))
- {
- const void *key;
- void *change;
-
- apr_hash_this(hi, &key, NULL, &change);
-
- apr_hash_set(new_entry->changed_paths2, apr_pstrdup(pool, key),
- APR_HASH_KEY_STRING,
- svn_log_changed_path2_dup(change, pool));
- }
- }
-
- /* We can't copy changed_paths by itself without using deprecated code,
- but we don't have to, as this function was new after the introduction
- of the changed_paths2 field. */
- new_entry->changed_paths = new_entry->changed_paths2;
-
- return new_entry;
-}
-
-svn_location_segment_t *
-svn_location_segment_dup(const svn_location_segment_t *segment,
- apr_pool_t *pool)
-{
- svn_location_segment_t *new_segment =
- apr_palloc(pool, sizeof(*new_segment));
-
- *new_segment = *segment;
- if (segment->path)
- new_segment->path = apr_pstrdup(pool, segment->path);
- return new_segment;
-}
diff --git a/subversion/libsvn_subr/crypto.c b/subversion/libsvn_subr/crypto.c
new file mode 100644
index 0000000..f3611a1
--- /dev/null
+++ b/subversion/libsvn_subr/crypto.c
@@ -0,0 +1,705 @@
+/*
+ * crypto.c : cryptographic routines
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#include "crypto.h"
+
+#ifdef SVN_HAVE_CRYPTO
+#include <apr_random.h>
+#include <apr_crypto.h>
+#endif /* SVN_HAVE_CRYPTO */
+
+#include "svn_types.h"
+#include "svn_checksum.h"
+
+#include "svn_private_config.h"
+#include "private/svn_atomic.h"
+
+
+/* 1000 iterations is the recommended minimum, per RFC 2898, section 4.2. */
+#define NUM_ITERATIONS 1000
+
+
+/* Size (in bytes) of the random data we'll prepend to encrypted data. */
+#define RANDOM_PREFIX_LEN 4
+
+
+/* A structure for containing Subversion's cryptography-related bits
+ (so we can avoid passing around APR-isms outside this module). */
+struct svn_crypto__ctx_t {
+#ifdef SVN_HAVE_CRYPTO
+ apr_crypto_t *crypto; /* APR cryptography context. */
+
+#if 0
+ /* ### For now, we will use apr_generate_random_bytes(). If we need
+ ### more strength, then we can set this member using
+ ### apr_random_standard_new(), then use
+ ### apr_generate_random_bytes() to generate entropy for seeding
+ ### apr_random_t. See httpd/server/core.c:ap_init_rng() */
+ apr_random_t *rand;
+#endif /* 0 */
+#else /* SVN_HAVE_CRYPTO */
+ int unused_but_required_to_satisfy_c_compilers;
+#endif /* SVN_HAVE_CRYPTO */
+};
+
+
+
+/*** Helper Functions ***/
+#ifdef SVN_HAVE_CRYPTO
+
+
+/* One-time initialization of the cryptography subsystem. */
+static volatile svn_atomic_t crypto_init_state = 0;
+
+
+#define CRYPTO_INIT(scratch_pool) \
+ SVN_ERR(svn_atomic__init_once(&crypto_init_state, \
+ crypto_init, NULL, (scratch_pool)))
+
+
+/* Initialize the APR cryptography subsystem (if available), using
+ ANY_POOL's ancestor root pool for the registration of cleanups,
+ shutdowns, etc. */
+/* Don't call this function directly! Use svn_atomic__init_once(). */
+static svn_error_t *
+crypto_init(void *baton, apr_pool_t *any_pool)
+{
+ /* NOTE: this function will locate the topmost ancestor of ANY_POOL
+ for its cleanup handlers. We don't have to worry about ANY_POOL
+ being cleared. */
+ apr_status_t apr_err = apr_crypto_init(any_pool);
+ if (apr_err)
+ return svn_error_wrap_apr(apr_err,
+ _("Failed to initialize cryptography "
+ "subsystem"));
+
+ return SVN_NO_ERROR;
+}
+
+
+/* If APU_ERR is non-NULL, create and return a Subversion error using
+ APR_ERR and APU_ERR. */
+static svn_error_t *
+err_from_apu_err(apr_status_t apr_err,
+ const apu_err_t *apu_err)
+{
+ if (apu_err)
+ return svn_error_createf(apr_err, NULL,
+ _("code (%d), reason (\"%s\"), msg (\"%s\")"),
+ apu_err->rc,
+ apu_err->reason ? apu_err->reason : "",
+ apu_err->msg ? apu_err->msg : "");
+ return SVN_NO_ERROR;
+}
+
+
+/* Generate a Subversion error which describes the state reflected by
+ APR_ERR and any crypto errors registered with CTX. */
+static svn_error_t *
+crypto_error_create(svn_crypto__ctx_t *ctx,
+ apr_status_t apr_err,
+ const char *msg)
+{
+ const apu_err_t *apu_err;
+ apr_status_t rv = apr_crypto_error(&apu_err, ctx->crypto);
+ svn_error_t *child;
+
+ /* Ugh. The APIs are a bit slippery, so be wary. */
+ if (apr_err == APR_SUCCESS)
+ apr_err = APR_EGENERAL;
+
+ if (rv == APR_SUCCESS)
+ child = err_from_apu_err(apr_err, apu_err);
+ else
+ child = svn_error_wrap_apr(rv, _("Fetching error from APR"));
+
+ return svn_error_create(apr_err, child, msg);
+}
+
+
+/* Set RAND_BYTES to a block of bytes containing random data RAND_LEN
+ long and allocated from RESULT_POOL. */
+static svn_error_t *
+get_random_bytes(const unsigned char **rand_bytes,
+ svn_crypto__ctx_t *ctx,
+ apr_size_t rand_len,
+ apr_pool_t *result_pool)
+{
+ apr_status_t apr_err;
+ unsigned char *bytes;
+
+ bytes = apr_palloc(result_pool, rand_len);
+ apr_err = apr_generate_random_bytes(bytes, rand_len);
+ if (apr_err != APR_SUCCESS)
+ return svn_error_wrap_apr(apr_err, _("Error obtaining random data"));
+
+ *rand_bytes = bytes;
+ return SVN_NO_ERROR;
+}
+
+
+/* Return an svn_string_t allocated from RESULT_POOL, with its .data
+ and .len members set to DATA and LEN, respective.
+
+ WARNING: No lifetime management of DATA is offered here, so you
+ probably want to ensure that that information is allocated in a
+ sufficiently long-lived pool (such as, for example, RESULT_POOL). */
+static const svn_string_t *
+wrap_as_string(const unsigned char *data,
+ apr_size_t len,
+ apr_pool_t *result_pool)
+{
+ svn_string_t *s = apr_palloc(result_pool, sizeof(*s));
+
+ s->data = (const char *)data; /* better already be in RESULT_POOL */
+ s->len = len;
+ return s;
+}
+
+
+#endif /* SVN_HAVE_CRYPTO */
+
+
+
+/*** Semi-public APIs ***/
+
+/* Return TRUE iff Subversion's cryptographic support is available. */
+svn_boolean_t svn_crypto__is_available(void)
+{
+#ifdef SVN_HAVE_CRYPTO
+ return TRUE;
+#else /* SVN_HAVE_CRYPTO */
+ return FALSE;
+#endif /* SVN_HAVE_CRYPTO */
+}
+
+
+/* Set CTX to a Subversion cryptography context allocated from
+ RESULT_POOL. */
+svn_error_t *
+svn_crypto__context_create(svn_crypto__ctx_t **ctx,
+ apr_pool_t *result_pool)
+{
+#ifdef SVN_HAVE_CRYPTO
+ apr_status_t apr_err;
+ const apu_err_t *apu_err = NULL;
+ apr_crypto_t *apr_crypto;
+ const apr_crypto_driver_t *driver;
+
+ CRYPTO_INIT(result_pool);
+
+ /* Load the crypto driver.
+
+ ### TODO: For the sake of flexibility, should we use
+ ### APU_CRYPTO_RECOMMENDED_DRIVER instead of hard coding
+ ### "openssl" here?
+
+ NOTE: Potential bugs in get_driver() imply we might get
+ APR_SUCCESS and NULL. Sigh. Just be a little more careful in
+ error generation here. */
+ apr_err = apr_crypto_get_driver(&driver, "openssl", NULL, &apu_err,
+ result_pool);
+ if (apr_err != APR_SUCCESS)
+ return svn_error_create(apr_err, err_from_apu_err(apr_err, apu_err),
+ _("OpenSSL crypto driver error"));
+ if (driver == NULL)
+ return svn_error_create(APR_EGENERAL,
+ err_from_apu_err(APR_EGENERAL, apu_err),
+ _("Bad return value while loading crypto "
+ "driver"));
+
+ apr_err = apr_crypto_make(&apr_crypto, driver, NULL, result_pool);
+ if (apr_err != APR_SUCCESS || apr_crypto == NULL)
+ return svn_error_create(apr_err, NULL,
+ _("Error creating OpenSSL crypto context"));
+
+ /* Allocate and initialize our crypto context. */
+ *ctx = apr_palloc(result_pool, sizeof(**ctx));
+ (*ctx)->crypto = apr_crypto;
+
+ return SVN_NO_ERROR;
+#else /* SVN_HAVE_CRYPTO */
+ return svn_error_create(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
+ "Cryptographic support is not available");
+#endif /* SVN_HAVE_CRYPTO */
+}
+
+
+svn_error_t *
+svn_crypto__encrypt_password(const svn_string_t **ciphertext,
+ const svn_string_t **iv,
+ const svn_string_t **salt,
+ svn_crypto__ctx_t *ctx,
+ const char *password,
+ const svn_string_t *master,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+#ifdef SVN_HAVE_CRYPTO
+ svn_error_t *err = SVN_NO_ERROR;
+ const unsigned char *salt_vector;
+ const unsigned char *iv_vector;
+ apr_size_t iv_len;
+ apr_crypto_key_t *key = NULL;
+ apr_status_t apr_err;
+ const unsigned char *prefix;
+ apr_crypto_block_t *block_ctx = NULL;
+ apr_size_t block_size;
+ unsigned char *assembled;
+ apr_size_t password_len, assembled_len = 0;
+ apr_size_t result_len;
+ unsigned char *result;
+ apr_size_t ignored_result_len = 0;
+
+ SVN_ERR_ASSERT(ctx != NULL);
+
+ /* Generate the salt. */
+#define SALT_LEN 8
+ SVN_ERR(get_random_bytes(&salt_vector, ctx, SALT_LEN, result_pool));
+
+ /* Initialize the passphrase. */
+ apr_err = apr_crypto_passphrase(&key, &iv_len,
+ master->data, master->len,
+ salt_vector, SALT_LEN,
+ APR_KEY_AES_256, APR_MODE_CBC,
+ FALSE /* doPad */, NUM_ITERATIONS,
+ ctx->crypto,
+ scratch_pool);
+ if (apr_err != APR_SUCCESS)
+ return svn_error_trace(crypto_error_create(
+ ctx, apr_err,
+ _("Error creating derived key")));
+ if (! key)
+ return svn_error_create(APR_EGENERAL, NULL,
+ _("Error creating derived key"));
+ if (iv_len == 0)
+ return svn_error_create(APR_EGENERAL, NULL,
+ _("Unexpected IV length returned"));
+
+ /* Generate the proper length IV. */
+ SVN_ERR(get_random_bytes(&iv_vector, ctx, iv_len, result_pool));
+
+ /* Initialize block encryption. */
+ apr_err = apr_crypto_block_encrypt_init(&block_ctx, &iv_vector, key,
+ &block_size, scratch_pool);
+ if ((apr_err != APR_SUCCESS) || (! block_ctx))
+ return svn_error_trace(crypto_error_create(
+ ctx, apr_err,
+ _("Error initializing block encryption")));
+
+ /* Generate a 4-byte prefix. */
+ SVN_ERR(get_random_bytes(&prefix, ctx, RANDOM_PREFIX_LEN, scratch_pool));
+
+ /* Combine our prefix, original password, and appropriate padding.
+ We won't bother padding if the prefix and password combined
+ perfectly align on the block boundary. If they don't,
+ however, we'll drop a NUL byte after the password and pad with
+ random stuff after that to the block boundary. */
+ password_len = strlen(password);
+ assembled_len = RANDOM_PREFIX_LEN + password_len;
+ if ((assembled_len % block_size) == 0)
+ {
+ assembled = apr_palloc(scratch_pool, assembled_len);
+ memcpy(assembled, prefix, RANDOM_PREFIX_LEN);
+ memcpy(assembled + RANDOM_PREFIX_LEN, password, password_len);
+ }
+ else
+ {
+ const unsigned char *padding;
+ apr_size_t pad_len = block_size - (assembled_len % block_size) - 1;
+
+ SVN_ERR(get_random_bytes(&padding, ctx, pad_len, scratch_pool));
+ assembled_len = assembled_len + 1 + pad_len;
+ assembled = apr_palloc(scratch_pool, assembled_len);
+ memcpy(assembled, prefix, RANDOM_PREFIX_LEN);
+ memcpy(assembled + RANDOM_PREFIX_LEN, password, password_len);
+ *(assembled + RANDOM_PREFIX_LEN + password_len) = '\0';
+ memcpy(assembled + RANDOM_PREFIX_LEN + password_len + 1,
+ padding, pad_len);
+ }
+
+ /* Get the length that we need to allocate. */
+ apr_err = apr_crypto_block_encrypt(NULL, &result_len, assembled,
+ assembled_len, block_ctx);
+ if (apr_err != APR_SUCCESS)
+ {
+ err = crypto_error_create(ctx, apr_err,
+ _("Error fetching result length"));
+ goto cleanup;
+ }
+
+ /* Allocate our result buffer. */
+ result = apr_palloc(result_pool, result_len);
+
+ /* Encrypt the block. */
+ apr_err = apr_crypto_block_encrypt(&result, &result_len, assembled,
+ assembled_len, block_ctx);
+ if (apr_err != APR_SUCCESS)
+ {
+ err = crypto_error_create(ctx, apr_err,
+ _("Error during block encryption"));
+ goto cleanup;
+ }
+
+ /* Finalize the block encryption. Since we padded everything, this should
+ not produce any more encrypted output. */
+ apr_err = apr_crypto_block_encrypt_finish(NULL,
+ &ignored_result_len,
+ block_ctx);
+ if (apr_err != APR_SUCCESS)
+ {
+ err = crypto_error_create(ctx, apr_err,
+ _("Error finalizing block encryption"));
+ goto cleanup;
+ }
+
+ *ciphertext = wrap_as_string(result, result_len, result_pool);
+ *iv = wrap_as_string(iv_vector, iv_len, result_pool);
+ *salt = wrap_as_string(salt_vector, SALT_LEN, result_pool);
+
+ cleanup:
+ apr_crypto_block_cleanup(block_ctx);
+ return err;
+#else /* SVN_HAVE_CRYPTO */
+ return svn_error_create(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
+ "Cryptographic support is not available");
+#endif /* SVN_HAVE_CRYPTO */
+}
+
+
+svn_error_t *
+svn_crypto__decrypt_password(const char **plaintext,
+ svn_crypto__ctx_t *ctx,
+ const svn_string_t *ciphertext,
+ const svn_string_t *iv,
+ const svn_string_t *salt,
+ const svn_string_t *master,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+#ifdef SVN_HAVE_CRYPTO
+ svn_error_t *err = SVN_NO_ERROR;
+ apr_status_t apr_err;
+ apr_crypto_block_t *block_ctx = NULL;
+ apr_size_t block_size, iv_len;
+ apr_crypto_key_t *key = NULL;
+ unsigned char *result;
+ apr_size_t result_len = 0, final_len = 0;
+
+ /* Initialize the passphrase. */
+ apr_err = apr_crypto_passphrase(&key, &iv_len,
+ master->data, master->len,
+ (unsigned char *)salt->data, salt->len,
+ APR_KEY_AES_256, APR_MODE_CBC,
+ FALSE /* doPad */, NUM_ITERATIONS,
+ ctx->crypto, scratch_pool);
+ if (apr_err != APR_SUCCESS)
+ return svn_error_trace(crypto_error_create(
+ ctx, apr_err,
+ _("Error creating derived key")));
+ if (! key)
+ return svn_error_create(APR_EGENERAL, NULL,
+ _("Error creating derived key"));
+ if (iv_len == 0)
+ return svn_error_create(APR_EGENERAL, NULL,
+ _("Unexpected IV length returned"));
+ if (iv_len != iv->len)
+ return svn_error_create(SVN_ERR_INCORRECT_PARAMS, NULL,
+ _("Provided IV has incorrect length"));
+
+ apr_err = apr_crypto_block_decrypt_init(&block_ctx, &block_size,
+ (unsigned char *)iv->data,
+ key, scratch_pool);
+ if ((apr_err != APR_SUCCESS) || (! block_ctx))
+ return svn_error_trace(crypto_error_create(
+ ctx, apr_err,
+ _("Error initializing block decryption")));
+
+ apr_err = apr_crypto_block_decrypt(NULL, &result_len,
+ (unsigned char *)ciphertext->data,
+ ciphertext->len, block_ctx);
+ if (apr_err != APR_SUCCESS)
+ {
+ err = crypto_error_create(ctx, apr_err,
+ _("Error fetching result length"));
+ goto cleanup;
+ }
+
+ result = apr_palloc(scratch_pool, result_len);
+ apr_err = apr_crypto_block_decrypt(&result, &result_len,
+ (unsigned char *)ciphertext->data,
+ ciphertext->len, block_ctx);
+ if (apr_err != APR_SUCCESS)
+ {
+ err = crypto_error_create(ctx, apr_err,
+ _("Error during block decryption"));
+ goto cleanup;
+ }
+
+ apr_err = apr_crypto_block_decrypt_finish(result + result_len, &final_len,
+ block_ctx);
+ if (apr_err != APR_SUCCESS)
+ {
+ err = crypto_error_create(ctx, apr_err,
+ _("Error finalizing block decryption"));
+ goto cleanup;
+ }
+
+ /* Copy the non-random bits of the resulting plaintext, skipping the
+ prefix and ignoring any trailing padding. */
+ *plaintext = apr_pstrndup(result_pool,
+ (const char *)(result + RANDOM_PREFIX_LEN),
+ result_len + final_len - RANDOM_PREFIX_LEN);
+
+ cleanup:
+ apr_crypto_block_cleanup(block_ctx);
+ return err;
+#else /* SVN_HAVE_CRYPTO */
+ return svn_error_create(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
+ "Cryptographic support is not available");
+#endif /* SVN_HAVE_CRYPTO */
+}
+
+
+svn_error_t *
+svn_crypto__generate_secret_checktext(const svn_string_t **ciphertext,
+ const svn_string_t **iv,
+ const svn_string_t **salt,
+ const char **checktext,
+ svn_crypto__ctx_t *ctx,
+ const svn_string_t *master,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+#ifdef SVN_HAVE_CRYPTO
+ svn_error_t *err = SVN_NO_ERROR;
+ const unsigned char *salt_vector;
+ const unsigned char *iv_vector;
+ const unsigned char *stuff_vector;
+ apr_size_t iv_len;
+ apr_crypto_key_t *key = NULL;
+ apr_status_t apr_err;
+ apr_crypto_block_t *block_ctx = NULL;
+ apr_size_t block_size;
+ apr_size_t result_len;
+ unsigned char *result;
+ apr_size_t ignored_result_len = 0;
+ apr_size_t stuff_len;
+ svn_checksum_t *stuff_sum;
+
+ SVN_ERR_ASSERT(ctx != NULL);
+
+ /* Generate the salt. */
+ SVN_ERR(get_random_bytes(&salt_vector, ctx, SALT_LEN, result_pool));
+
+ /* Initialize the passphrase. */
+ apr_err = apr_crypto_passphrase(&key, &iv_len,
+ master->data, master->len,
+ salt_vector, SALT_LEN,
+ APR_KEY_AES_256, APR_MODE_CBC,
+ FALSE /* doPad */, NUM_ITERATIONS,
+ ctx->crypto,
+ scratch_pool);
+ if (apr_err != APR_SUCCESS)
+ return svn_error_trace(crypto_error_create(
+ ctx, apr_err,
+ _("Error creating derived key")));
+ if (! key)
+ return svn_error_create(APR_EGENERAL, NULL,
+ _("Error creating derived key"));
+ if (iv_len == 0)
+ return svn_error_create(APR_EGENERAL, NULL,
+ _("Unexpected IV length returned"));
+
+ /* Generate the proper length IV. */
+ SVN_ERR(get_random_bytes(&iv_vector, ctx, iv_len, result_pool));
+
+ /* Initialize block encryption. */
+ apr_err = apr_crypto_block_encrypt_init(&block_ctx, &iv_vector, key,
+ &block_size, scratch_pool);
+ if ((apr_err != APR_SUCCESS) || (! block_ctx))
+ return svn_error_trace(crypto_error_create(
+ ctx, apr_err,
+ _("Error initializing block encryption")));
+
+ /* Generate a blob of random data, block-aligned per the
+ requirements of the encryption algorithm, but with a minimum size
+ of our choosing. */
+#define MIN_STUFF_LEN 32
+ if (MIN_STUFF_LEN % block_size)
+ stuff_len = MIN_STUFF_LEN + (block_size - (MIN_STUFF_LEN % block_size));
+ else
+ stuff_len = MIN_STUFF_LEN;
+ SVN_ERR(get_random_bytes(&stuff_vector, ctx, stuff_len, scratch_pool));
+
+ /* ### FIXME: This should be a SHA-256. */
+ SVN_ERR(svn_checksum(&stuff_sum, svn_checksum_sha1, stuff_vector,
+ stuff_len, scratch_pool));
+
+ /* Get the length that we need to allocate. */
+ apr_err = apr_crypto_block_encrypt(NULL, &result_len, stuff_vector,
+ stuff_len, block_ctx);
+ if (apr_err != APR_SUCCESS)
+ {
+ err = crypto_error_create(ctx, apr_err,
+ _("Error fetching result length"));
+ goto cleanup;
+ }
+
+ /* Allocate our result buffer. */
+ result = apr_palloc(result_pool, result_len);
+
+ /* Encrypt the block. */
+ apr_err = apr_crypto_block_encrypt(&result, &result_len, stuff_vector,
+ stuff_len, block_ctx);
+ if (apr_err != APR_SUCCESS)
+ {
+ err = crypto_error_create(ctx, apr_err,
+ _("Error during block encryption"));
+ goto cleanup;
+ }
+
+ /* Finalize the block encryption. Since we padded everything, this should
+ not produce any more encrypted output. */
+ apr_err = apr_crypto_block_encrypt_finish(NULL,
+ &ignored_result_len,
+ block_ctx);
+ if (apr_err != APR_SUCCESS)
+ {
+ err = crypto_error_create(ctx, apr_err,
+ _("Error finalizing block encryption"));
+ goto cleanup;
+ }
+
+ *ciphertext = wrap_as_string(result, result_len, result_pool);
+ *iv = wrap_as_string(iv_vector, iv_len, result_pool);
+ *salt = wrap_as_string(salt_vector, SALT_LEN, result_pool);
+ *checktext = svn_checksum_to_cstring(stuff_sum, result_pool);
+
+ cleanup:
+ apr_crypto_block_cleanup(block_ctx);
+ return err;
+#else /* SVN_HAVE_CRYPTO */
+ return svn_error_create(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
+ "Cryptographic support is not available");
+#endif /* SVN_HAVE_CRYPTO */
+}
+
+
+svn_error_t *
+svn_crypto__verify_secret(svn_boolean_t *is_valid,
+ svn_crypto__ctx_t *ctx,
+ const svn_string_t *master,
+ const svn_string_t *ciphertext,
+ const svn_string_t *iv,
+ const svn_string_t *salt,
+ const char *checktext,
+ apr_pool_t *scratch_pool)
+{
+#ifdef SVN_HAVE_CRYPTO
+ svn_error_t *err = SVN_NO_ERROR;
+ apr_status_t apr_err;
+ apr_crypto_block_t *block_ctx = NULL;
+ apr_size_t block_size, iv_len;
+ apr_crypto_key_t *key = NULL;
+ unsigned char *result;
+ apr_size_t result_len = 0, final_len = 0;
+ svn_checksum_t *result_sum;
+
+ *is_valid = FALSE;
+
+ /* Initialize the passphrase. */
+ apr_err = apr_crypto_passphrase(&key, &iv_len,
+ master->data, master->len,
+ (unsigned char *)salt->data, salt->len,
+ APR_KEY_AES_256, APR_MODE_CBC,
+ FALSE /* doPad */, NUM_ITERATIONS,
+ ctx->crypto, scratch_pool);
+ if (apr_err != APR_SUCCESS)
+ return svn_error_trace(crypto_error_create(
+ ctx, apr_err,
+ _("Error creating derived key")));
+ if (! key)
+ return svn_error_create(APR_EGENERAL, NULL,
+ _("Error creating derived key"));
+ if (iv_len == 0)
+ return svn_error_create(APR_EGENERAL, NULL,
+ _("Unexpected IV length returned"));
+ if (iv_len != iv->len)
+ return svn_error_create(SVN_ERR_INCORRECT_PARAMS, NULL,
+ _("Provided IV has incorrect length"));
+
+ apr_err = apr_crypto_block_decrypt_init(&block_ctx, &block_size,
+ (unsigned char *)iv->data,
+ key, scratch_pool);
+ if ((apr_err != APR_SUCCESS) || (! block_ctx))
+ return svn_error_trace(crypto_error_create(
+ ctx, apr_err,
+ _("Error initializing block decryption")));
+
+ apr_err = apr_crypto_block_decrypt(NULL, &result_len,
+ (unsigned char *)ciphertext->data,
+ ciphertext->len, block_ctx);
+ if (apr_err != APR_SUCCESS)
+ {
+ err = crypto_error_create(ctx, apr_err,
+ _("Error fetching result length"));
+ goto cleanup;
+ }
+
+ result = apr_palloc(scratch_pool, result_len);
+ apr_err = apr_crypto_block_decrypt(&result, &result_len,
+ (unsigned char *)ciphertext->data,
+ ciphertext->len, block_ctx);
+ if (apr_err != APR_SUCCESS)
+ {
+ err = crypto_error_create(ctx, apr_err,
+ _("Error during block decryption"));
+ goto cleanup;
+ }
+
+ apr_err = apr_crypto_block_decrypt_finish(result + result_len, &final_len,
+ block_ctx);
+ if (apr_err != APR_SUCCESS)
+ {
+ err = crypto_error_create(ctx, apr_err,
+ _("Error finalizing block decryption"));
+ goto cleanup;
+ }
+
+ /* ### FIXME: This should be a SHA-256. */
+ SVN_ERR(svn_checksum(&result_sum, svn_checksum_sha1, result,
+ result_len + final_len, scratch_pool));
+
+ *is_valid = strcmp(checktext,
+ svn_checksum_to_cstring(result_sum, scratch_pool)) == 0;
+
+ cleanup:
+ apr_crypto_block_cleanup(block_ctx);
+ return err;
+#else /* SVN_HAVE_CRYPTO */
+ *is_valid = FALSE;
+ return svn_error_create(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
+ "Cryptographic support is not available");
+#endif /* SVN_HAVE_CRYPTO */
+}
diff --git a/subversion/libsvn_subr/crypto.h b/subversion/libsvn_subr/crypto.h
new file mode 100644
index 0000000..5e7be86
--- /dev/null
+++ b/subversion/libsvn_subr/crypto.h
@@ -0,0 +1,141 @@
+/*
+ * crypto.h : cryptographic routines
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#ifndef SVN_LIBSVN_SUBR_CRYPTO_H
+#define SVN_LIBSVN_SUBR_CRYPTO_H
+
+/* Test for APR crypto and RNG support */
+#undef SVN_HAVE_CRYPTO
+#include <apr.h>
+#include <apu.h>
+#if APR_HAS_RANDOM
+#if defined(APU_HAVE_CRYPTO) && APU_HAVE_CRYPTO
+#define SVN_HAVE_CRYPTO
+#endif
+#endif
+
+#include "svn_types.h"
+#include "svn_string.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/* Opaque context for cryptographic operations. */
+typedef struct svn_crypto__ctx_t svn_crypto__ctx_t;
+
+
+/* Return TRUE iff Subversion's cryptographic support is available. */
+svn_boolean_t svn_crypto__is_available(void);
+
+
+/* Set *CTX to new Subversion cryptographic context, based on an
+ APR-managed OpenSSL cryptography context object allocated
+ within RESULT_POOL. */
+/* ### TODO: Should this be something done once with the resulting
+ ### svn_crypto__ctx_t object stored in svn_client_ctx_t? */
+svn_error_t *
+svn_crypto__context_create(svn_crypto__ctx_t **ctx,
+ apr_pool_t *result_pool);
+
+
+/* Using a PBKDF2 derivative key based on MASTER, encrypt PLAINTEXT.
+ The salt used for PBKDF2 is returned in SALT, and the IV used for
+ the (AES-256/CBC) encryption is returned in IV. The resulting
+ encrypted data is returned in CIPHERTEXT.
+
+ Note that MASTER may be the plaintext obtained from the user or
+ some other OS-provided cryptographic store, or it can be a derivation
+ such as SHA1(plaintext). As long as the same octets are passed to
+ the decryption function, everything works just fine. (the SHA1
+ approach is suggested, to avoid keeping the plaintext master in
+ the process' memory space) */
+svn_error_t *
+svn_crypto__encrypt_password(const svn_string_t **ciphertext,
+ const svn_string_t **iv,
+ const svn_string_t **salt,
+ svn_crypto__ctx_t *ctx,
+ const char *plaintext,
+ const svn_string_t *master,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
+/* Given the CIPHERTEXT which was encrypted using (AES-256/CBC) with
+ initialization vector given by IV, and a key derived using PBKDF2
+ with SALT and MASTER... return the decrypted password in PLAINTEXT. */
+svn_error_t *
+svn_crypto__decrypt_password(const char **plaintext,
+ svn_crypto__ctx_t *ctx,
+ const svn_string_t *ciphertext,
+ const svn_string_t *iv,
+ const svn_string_t *salt,
+ const svn_string_t *master,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Generate the stuff Subversion needs to store in order to validate a
+ user-provided MASTER password:
+
+ Set *CIPHERTEXT to a block of encrypted data.
+
+ Set *IV and *SALT to the initialization vector and salt used for
+ encryption.
+
+ Set *CHECKTEXT to the check text used for validation.
+
+ CTX is a Subversion cryptographic context. MASTER is the
+ encryption secret.
+*/
+svn_error_t *
+svn_crypto__generate_secret_checktext(const svn_string_t **ciphertext,
+ const svn_string_t **iv,
+ const svn_string_t **salt,
+ const char **checktext,
+ svn_crypto__ctx_t *ctx,
+ const svn_string_t *master,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Set *IS_VALID to TRUE iff the encryption secret MASTER successfully
+ validates using Subversion cryptographic context CTX against
+ CIPHERTEXT, IV, SALT, and CHECKTEXT (which where probably generated
+ via previous call to svn_crypto__generate_secret_checktext()).
+
+ Use SCRATCH_POOL for necessary allocations. */
+svn_error_t *
+svn_crypto__verify_secret(svn_boolean_t *is_valid,
+ svn_crypto__ctx_t *ctx,
+ const svn_string_t *master,
+ const svn_string_t *ciphertext,
+ const svn_string_t *iv,
+ const svn_string_t *salt,
+ const char *checktext,
+ apr_pool_t *scratch_pool);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* SVN_LIBSVN_SUBR_CRYPTO_H */
diff --git a/subversion/libsvn_subr/debug.c b/subversion/libsvn_subr/debug.c
index 5b89c8b..be331ed 100644
--- a/subversion/libsvn_subr/debug.c
+++ b/subversion/libsvn_subr/debug.c
@@ -25,13 +25,24 @@
be used in release code. One of the reasons to avoid this code in release
builds is that this code is not thread-safe. */
#include <stdarg.h>
+#include <assert.h>
+#include <apr_pools.h>
+#include <apr_strings.h>
#include "svn_types.h"
+#include "svn_string.h"
+#ifndef SVN_DBG__PROTOTYPES
+#define SVN_DBG__PROTOTYPES
+#endif
#include "private/svn_debug.h"
+#define DBG_FLAG "DBG: "
+
/* This will be tweaked by the preamble code. */
+static const char *debug_file = NULL;
+static long debug_line = 0;
static FILE * volatile debug_output = NULL;
@@ -54,26 +65,91 @@ svn_dbg__preamble(const char *file, long line, FILE *output)
if (slash == NULL)
slash = strrchr(file, '\\');
- if (slash == NULL)
- slash = file;
+ if (slash)
+ debug_file = slash + 1;
else
- ++slash;
-
- fprintf(output, "DBG: %s:%4ld: ", slash, line);
+ debug_file = file;
}
+ debug_line = line;
}
-void
-svn_dbg__printf(const char *fmt, ...)
+/* Print a formatted string using format FMT and argument-list AP,
+ * prefixing each line of output with a debug header. */
+static void
+debug_vprintf(const char *fmt, va_list ap)
{
FILE *output = debug_output;
- va_list ap;
+ char prefix[80], buffer[1000];
+ char *s = buffer;
+ int n;
if (output == NULL || quiet_mode())
return;
+ n = apr_snprintf(prefix, sizeof(prefix), DBG_FLAG "%s:%4ld: ",
+ debug_file, debug_line);
+ assert(n < sizeof(prefix) - 1);
+ n = apr_vsnprintf(buffer, sizeof(buffer), fmt, ap);
+ assert(n < sizeof(buffer) - 1);
+ do
+ {
+ char *newline = strchr(s, '\n');
+ if (newline)
+ *newline = '\0';
+
+ fputs(prefix, output);
+ fputs(s, output);
+ fputc('\n', output);
+
+ if (! newline)
+ break;
+ s = newline + 1;
+ }
+ while (*s); /* print another line, except after a final newline */
+}
+
+
+void
+svn_dbg__printf(const char *fmt, ...)
+{
+ va_list ap;
+
va_start(ap, fmt);
- (void) vfprintf(output, fmt, ap);
+ debug_vprintf(fmt, ap);
va_end(ap);
}
+
+
+void
+svn_dbg__print_props(apr_hash_t *props,
+ const char *header_fmt,
+ ...)
+{
+/* We only build this code if SVN_DEBUG is defined. */
+#ifdef SVN_DEBUG
+
+ apr_hash_index_t *hi;
+ va_list ap;
+
+ va_start(ap, header_fmt);
+ debug_vprintf(header_fmt, ap);
+ va_end(ap);
+
+ if (props == NULL)
+ {
+ svn_dbg__printf(" (null)\n");
+ return;
+ }
+
+ for (hi = apr_hash_first(apr_hash_pool_get(props), props); hi;
+ hi = apr_hash_next(hi))
+ {
+ const char *name = svn__apr_hash_index_key(hi);
+ svn_string_t *val = svn__apr_hash_index_val(hi);
+
+ svn_dbg__printf(" '%s' -> '%s'\n", name, val->data);
+ }
+#endif /* SVN_DEBUG */
+}
+
diff --git a/subversion/libsvn_subr/deprecated.c b/subversion/libsvn_subr/deprecated.c
index ec51333..93bd89d 100644
--- a/subversion/libsvn_subr/deprecated.c
+++ b/subversion/libsvn_subr/deprecated.c
@@ -32,17 +32,22 @@
deprecated functions in this file. */
#define SVN_DEPRECATED
+#include "svn_hash.h"
#include "svn_subst.h"
#include "svn_path.h"
#include "svn_opt.h"
#include "svn_cmdline.h"
+#include "svn_version.h"
#include "svn_pools.h"
#include "svn_dso.h"
#include "svn_mergeinfo.h"
+#include "svn_utf.h"
#include "svn_xml.h"
#include "opt.h"
#include "private/svn_opt_private.h"
+#include "private/svn_mergeinfo_private.h"
+#include "private/svn_subr_private.h"
#include "svn_private_config.h"
@@ -69,38 +74,28 @@ kwstruct_to_kwhash(const svn_subst_keywords_t *kwstruct,
if (kwstruct->revision)
{
- apr_hash_set(kwhash, SVN_KEYWORD_REVISION_LONG,
- APR_HASH_KEY_STRING, kwstruct->revision);
- apr_hash_set(kwhash, SVN_KEYWORD_REVISION_MEDIUM,
- APR_HASH_KEY_STRING, kwstruct->revision);
- apr_hash_set(kwhash, SVN_KEYWORD_REVISION_SHORT,
- APR_HASH_KEY_STRING, kwstruct->revision);
+ svn_hash_sets(kwhash, SVN_KEYWORD_REVISION_LONG, kwstruct->revision);
+ svn_hash_sets(kwhash, SVN_KEYWORD_REVISION_MEDIUM, kwstruct->revision);
+ svn_hash_sets(kwhash, SVN_KEYWORD_REVISION_SHORT, kwstruct->revision);
}
if (kwstruct->date)
{
- apr_hash_set(kwhash, SVN_KEYWORD_DATE_LONG,
- APR_HASH_KEY_STRING, kwstruct->date);
- apr_hash_set(kwhash, SVN_KEYWORD_DATE_SHORT,
- APR_HASH_KEY_STRING, kwstruct->date);
+ svn_hash_sets(kwhash, SVN_KEYWORD_DATE_LONG, kwstruct->date);
+ svn_hash_sets(kwhash, SVN_KEYWORD_DATE_SHORT, kwstruct->date);
}
if (kwstruct->author)
{
- apr_hash_set(kwhash, SVN_KEYWORD_AUTHOR_LONG,
- APR_HASH_KEY_STRING, kwstruct->author);
- apr_hash_set(kwhash, SVN_KEYWORD_AUTHOR_SHORT,
- APR_HASH_KEY_STRING, kwstruct->author);
+ svn_hash_sets(kwhash, SVN_KEYWORD_AUTHOR_LONG, kwstruct->author);
+ svn_hash_sets(kwhash, SVN_KEYWORD_AUTHOR_SHORT, kwstruct->author);
}
if (kwstruct->url)
{
- apr_hash_set(kwhash, SVN_KEYWORD_URL_LONG,
- APR_HASH_KEY_STRING, kwstruct->url);
- apr_hash_set(kwhash, SVN_KEYWORD_URL_SHORT,
- APR_HASH_KEY_STRING, kwstruct->url);
+ svn_hash_sets(kwhash, SVN_KEYWORD_URL_LONG, kwstruct->url);
+ svn_hash_sets(kwhash, SVN_KEYWORD_URL_SHORT, kwstruct->url);
}
if (kwstruct->id)
{
- apr_hash_set(kwhash, SVN_KEYWORD_ID,
- APR_HASH_KEY_STRING, kwstruct->id);
+ svn_hash_sets(kwhash, SVN_KEYWORD_ID, kwstruct->id);
}
return kwhash;
@@ -361,7 +356,7 @@ print_command_info(const svn_opt_subcommand_desc_t *cmd,
{
if (cmd->valid_options[i])
{
- if (have_options == FALSE)
+ if (!have_options)
{
SVN_ERR(svn_cmdline_fputs(_("\nValid options:\n"),
stream, pool));
@@ -523,6 +518,33 @@ svn_opt_args_to_target_array(apr_array_header_t **targets_p,
}
svn_error_t *
+svn_opt_print_help3(apr_getopt_t *os,
+ const char *pgm_name,
+ svn_boolean_t print_version,
+ svn_boolean_t quiet,
+ const char *version_footer,
+ const char *header,
+ const svn_opt_subcommand_desc2_t *cmd_table,
+ const apr_getopt_option_t *option_table,
+ const int *global_options,
+ const char *footer,
+ apr_pool_t *pool)
+{
+ return svn_error_trace(svn_opt_print_help4(os,
+ pgm_name,
+ print_version,
+ quiet,
+ FALSE,
+ version_footer,
+ header,
+ cmd_table,
+ option_table,
+ global_options,
+ footer,
+ pool));
+}
+
+svn_error_t *
svn_opt_print_help2(apr_getopt_t *os,
const char *pgm_name,
svn_boolean_t print_version,
@@ -534,10 +556,11 @@ svn_opt_print_help2(apr_getopt_t *os,
const char *footer,
apr_pool_t *pool)
{
- return svn_error_trace(svn_opt_print_help3(os,
+ return svn_error_trace(svn_opt_print_help4(os,
pgm_name,
print_version,
quiet,
+ FALSE,
version_footer,
header,
cmd_table,
@@ -575,8 +598,11 @@ svn_opt_print_help(apr_getopt_t *os,
}
}
else if (print_version) /* just --version */
- SVN_ERR(svn_opt__print_version_info(pgm_name, version_footer, quiet,
- pool));
+ {
+ SVN_ERR(svn_opt__print_version_info(pgm_name, version_footer,
+ svn_version_extended(FALSE, pool),
+ quiet, FALSE, pool));
+ }
else if (os && !targets->nelts) /* `-h', `--help', or `help' */
svn_opt_print_generic_help(header,
cmd_table,
@@ -766,6 +792,25 @@ svn_io_get_dirents(apr_hash_t **dirents,
}
svn_error_t *
+svn_io_start_cmd2(apr_proc_t *cmd_proc,
+ const char *path,
+ const char *cmd,
+ const char *const *args,
+ svn_boolean_t inherit,
+ svn_boolean_t infile_pipe,
+ apr_file_t *infile,
+ svn_boolean_t outfile_pipe,
+ apr_file_t *outfile,
+ svn_boolean_t errfile_pipe,
+ apr_file_t *errfile,
+ apr_pool_t *pool)
+{
+ return svn_io_start_cmd3(cmd_proc, path, cmd, args, NULL, inherit,
+ infile_pipe, infile, outfile_pipe, outfile,
+ errfile_pipe, errfile, pool);
+}
+
+svn_error_t *
svn_io_start_cmd(apr_proc_t *cmd_proc,
const char *path,
const char *cmd,
@@ -825,6 +870,22 @@ svn_io_dir_walk(const char *dirname,
&baton, pool));
}
+svn_error_t *
+svn_io_stat_dirent(const svn_io_dirent2_t **dirent_p,
+ const char *path,
+ svn_boolean_t ignore_enoent,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ return svn_error_trace(
+ svn_io_stat_dirent2(dirent_p,
+ path,
+ FALSE,
+ ignore_enoent,
+ result_pool,
+ scratch_pool));
+}
+
/*** From constructors.c ***/
svn_log_changed_path_t *
svn_log_changed_path_dup(const svn_log_changed_path_t *changed_path,
@@ -1036,14 +1097,6 @@ svn_path_canonicalize(const char *path, apr_pool_t *pool)
return svn_dirent_canonicalize(path, pool);
}
-svn_boolean_t
-svn_path_is_canonical(const char *path, apr_pool_t *pool)
-{
- return svn_uri_is_canonical(path, pool) ||
- svn_dirent_is_canonical(path, pool) ||
- svn_relpath_is_canonical(path);
-}
-
/*** From mergeinfo.c ***/
@@ -1061,8 +1114,8 @@ svn_mergeinfo_inheritable(svn_mergeinfo_t *output,
}
svn_error_t *
-svn_rangelist_inheritable(apr_array_header_t **inheritable_rangelist,
- const apr_array_header_t *rangelist,
+svn_rangelist_inheritable(svn_rangelist_t **inheritable_rangelist,
+ const svn_rangelist_t *rangelist,
svn_revnum_t start,
svn_revnum_t end,
apr_pool_t *pool)
@@ -1073,17 +1126,90 @@ svn_rangelist_inheritable(apr_array_header_t **inheritable_rangelist,
pool, pool));
}
+svn_error_t *
+svn_rangelist_merge(svn_rangelist_t **rangelist,
+ const svn_rangelist_t *changes,
+ apr_pool_t *pool)
+{
+ SVN_ERR(svn_rangelist_merge2(*rangelist, changes,
+ pool, pool));
+
+ return svn_error_trace(
+ svn_rangelist__combine_adjacent_ranges(*rangelist, pool));
+}
+
+svn_error_t *
+svn_mergeinfo_diff(svn_mergeinfo_t *deleted, svn_mergeinfo_t *added,
+ svn_mergeinfo_t from, svn_mergeinfo_t to,
+ svn_boolean_t consider_inheritance,
+ apr_pool_t *pool)
+{
+ return svn_error_trace(svn_mergeinfo_diff2(deleted, added, from, to,
+ consider_inheritance, pool,
+ pool));
+}
+
+svn_error_t *
+svn_mergeinfo_merge(svn_mergeinfo_t mergeinfo,
+ svn_mergeinfo_t changes,
+ apr_pool_t *pool)
+{
+ return svn_error_trace(svn_mergeinfo_merge2(mergeinfo, changes, pool,
+ pool));
+}
+
+svn_error_t *
+svn_mergeinfo_remove(svn_mergeinfo_t *mergeinfo, svn_mergeinfo_t eraser,
+ svn_mergeinfo_t whiteboard, apr_pool_t *pool)
+{
+ return svn_mergeinfo_remove2(mergeinfo, eraser, whiteboard, TRUE, pool,
+ pool);
+}
+
+svn_error_t *
+svn_mergeinfo_intersect(svn_mergeinfo_t *mergeinfo,
+ svn_mergeinfo_t mergeinfo1,
+ svn_mergeinfo_t mergeinfo2,
+ apr_pool_t *pool)
+{
+ return svn_mergeinfo_intersect2(mergeinfo, mergeinfo1, mergeinfo2,
+ TRUE, pool, pool);
+}
+
/*** From config.c ***/
+svn_error_t *
+svn_config_create(svn_config_t **cfgp,
+ svn_boolean_t section_names_case_sensitive,
+ apr_pool_t *result_pool)
+{
+ return svn_error_trace(svn_config_create2(cfgp,
+ section_names_case_sensitive,
+ FALSE,
+ result_pool));
+}
+
+svn_error_t *
+svn_config_read2(svn_config_t **cfgp, const char *file,
+ svn_boolean_t must_exist,
+ svn_boolean_t section_names_case_sensitive,
+ apr_pool_t *result_pool)
+{
+ return svn_error_trace(svn_config_read3(cfgp, file,
+ must_exist,
+ section_names_case_sensitive,
+ FALSE,
+ result_pool));
+}
svn_error_t *
svn_config_read(svn_config_t **cfgp, const char *file,
svn_boolean_t must_exist,
- apr_pool_t *pool)
+ apr_pool_t *result_pool)
{
- return svn_error_trace(svn_config_read2(cfgp, file,
+ return svn_error_trace(svn_config_read3(cfgp, file,
must_exist,
- FALSE,
- pool));
+ FALSE, FALSE,
+ result_pool));
}
#ifdef SVN_DISABLE_FULL_VERSION_MATCH
@@ -1126,3 +1252,60 @@ svn_xml_make_header(svn_stringbuf_t **str, apr_pool_t *pool)
{
svn_xml_make_header2(str, NULL, pool);
}
+
+void
+svn_utf_initialize(apr_pool_t *pool)
+{
+ svn_utf_initialize2(FALSE, pool);
+}
+
+svn_error_t *
+svn_subst_build_keywords(svn_subst_keywords_t *kw,
+ const char *keywords_val,
+ const char *rev,
+ const char *url,
+ apr_time_t date,
+ const char *author,
+ apr_pool_t *pool)
+{
+ apr_hash_t *kwhash;
+ const svn_string_t *val;
+
+ SVN_ERR(svn_subst_build_keywords2(&kwhash, keywords_val, rev,
+ url, date, author, pool));
+
+ /* The behaviour of pre-1.3 svn_subst_build_keywords, which we are
+ * replicating here, is to write to a slot in the svn_subst_keywords_t
+ * only if the relevant keyword was present in keywords_val, otherwise
+ * leaving that slot untouched. */
+
+ val = svn_hash_gets(kwhash, SVN_KEYWORD_REVISION_LONG);
+ if (val)
+ kw->revision = val;
+
+ val = svn_hash_gets(kwhash, SVN_KEYWORD_DATE_LONG);
+ if (val)
+ kw->date = val;
+
+ val = svn_hash_gets(kwhash, SVN_KEYWORD_AUTHOR_LONG);
+ if (val)
+ kw->author = val;
+
+ val = svn_hash_gets(kwhash, SVN_KEYWORD_URL_LONG);
+ if (val)
+ kw->url = val;
+
+ val = svn_hash_gets(kwhash, SVN_KEYWORD_ID);
+ if (val)
+ kw->id = val;
+
+ return SVN_NO_ERROR;
+}
+
+/*** From version.c ***/
+svn_error_t *
+svn_ver_check_list(const svn_version_t *my_version,
+ const svn_version_checklist_t *checklist)
+{
+ return svn_ver_check_list2(my_version, checklist, svn_ver_compatible);
+}
diff --git a/subversion/libsvn_subr/dirent_uri.c b/subversion/libsvn_subr/dirent_uri.c
index d2a93db..6886a3e 100644
--- a/subversion/libsvn_subr/dirent_uri.c
+++ b/subversion/libsvn_subr/dirent_uri.c
@@ -38,6 +38,7 @@
#include "dirent_uri.h"
#include "private/svn_fspath.h"
+#include "private/svn_cert.h"
/* The canonical empty path. Can this be changed? Well, change the empty
test below and the path library will work, not so sure about the fs/wc
@@ -104,7 +105,7 @@ canonicalize_to_lower(char c)
if (c < 'A' || c > 'Z')
return c;
else
- return c - 'A' + 'a';
+ return (char)(c - 'A' + 'a');
}
/* Locale insensitive toupper() for converting parts of dirents and urls
@@ -115,7 +116,7 @@ canonicalize_to_upper(char c)
if (c < 'a' || c > 'z')
return c;
else
- return c - 'a' + 'A';
+ return (char)(c - 'a' + 'A');
}
/* Calculates the length of the dirent absolute or non absolute root in
@@ -359,8 +360,24 @@ canonicalize(path_type_t type, const char *path, apr_pool_t *pool)
src = seg;
/* Found a hostname, convert to lowercase and copy to dst. */
- while (*src && (*src != '/') && (*src != ':'))
- *(dst++) = canonicalize_to_lower((*src++));
+ if (*src == '[')
+ {
+ *(dst++) = *(src++); /* Copy '[' */
+
+ while (*src == ':'
+ || (*src >= '0' && (*src <= '9'))
+ || (*src >= 'a' && (*src <= 'f'))
+ || (*src >= 'A' && (*src <= 'F')))
+ {
+ *(dst++) = canonicalize_to_lower((*src++));
+ }
+
+ if (*src == ']')
+ *(dst++) = *(src++); /* Copy ']' */
+ }
+ else
+ while (*src && (*src != '/') && (*src != ':'))
+ *(dst++) = canonicalize_to_lower((*src++));
if (*src == ':')
{
@@ -884,10 +901,10 @@ svn_dirent_local_style(const char *dirent, apr_pool_t *pool)
}
const char *
-svn_relpath__internal_style(const char *dirent,
- apr_pool_t *pool)
+svn_relpath__internal_style(const char *relpath,
+ apr_pool_t *pool)
{
- return svn_relpath_canonicalize(internal_style(dirent, pool), pool);
+ return svn_relpath_canonicalize(internal_style(relpath, pool), pool);
}
@@ -911,7 +928,7 @@ svn_dirent_is_root(const char *dirent, apr_size_t len)
&& dirent[len - 1] != '/')
{
int segments = 0;
- int i;
+ apr_size_t i;
for (i = len; i >= 2; i--)
{
if (dirent[i] == '/')
@@ -1295,25 +1312,17 @@ svn_uri_basename(const char *uri, apr_pool_t *pool)
{
apr_size_t len = strlen(uri);
apr_size_t start;
- const char *base_name;
assert(svn_uri_is_canonical(uri, NULL));
if (svn_uri_is_root(uri, len))
return "";
- else
- {
- start = len;
- while (start > 0 && uri[start - 1] != '/')
- --start;
- }
- if (pool)
- base_name = apr_pstrmemdup(pool, uri + start, len - start);
- else
- base_name = uri + start;
+ start = len;
+ while (start > 0 && uri[start - 1] != '/')
+ --start;
- return svn_path_uri_decode(base_name, pool);
+ return svn_path_uri_decode(uri + start, pool);
}
void
@@ -1403,41 +1412,13 @@ svn_dirent_is_child(const char *parent_dirent,
}
const char *
-svn_relpath__is_child(const char *parent_relpath,
- const char *child_relpath,
- apr_pool_t *pool)
-{
- /* assert(relpath_is_canonical(parent_relpath)); */
- /* assert(relpath_is_canonical(child_relpath)); */
-
- return is_child(type_relpath, parent_relpath, child_relpath, pool);
-}
-
-const char *
-svn_uri__is_child(const char *parent_uri,
- const char *child_uri,
- apr_pool_t *pool)
-{
- const char *relpath;
-
- assert(pool); /* hysterical raisins. */
- assert(svn_uri_is_canonical(parent_uri, NULL));
- assert(svn_uri_is_canonical(child_uri, NULL));
-
- relpath = is_child(type_uri, parent_uri, child_uri, pool);
- if (relpath)
- relpath = svn_path_uri_decode(relpath, pool);
- return relpath;
-}
-
-const char *
svn_dirent_skip_ancestor(const char *parent_dirent,
const char *child_dirent)
{
apr_size_t len = strlen(parent_dirent);
apr_size_t root_len;
- if (0 != memcmp(parent_dirent, child_dirent, len))
+ if (0 != strncmp(parent_dirent, child_dirent, len))
return NULL; /* parent_dirent is no ancestor of child_dirent */
if (child_dirent[len] == 0)
@@ -1495,7 +1476,7 @@ svn_relpath_skip_ancestor(const char *parent_relpath,
if (len == 0)
return child_relpath;
- if (0 != memcmp(parent_relpath, child_relpath, len))
+ if (0 != strncmp(parent_relpath, child_relpath, len))
return NULL; /* parent_relpath is no ancestor of child_relpath */
if (child_relpath[len] == 0)
@@ -1518,7 +1499,7 @@ uri_skip_ancestor(const char *parent_uri,
assert(svn_uri_is_canonical(parent_uri, NULL));
assert(svn_uri_is_canonical(child_uri, NULL));
- if (0 != memcmp(parent_uri, child_uri, len))
+ if (0 != strncmp(parent_uri, child_uri, len))
return NULL; /* parent_uri is no ancestor of child_uri */
if (child_uri[len] == 0)
@@ -1547,12 +1528,6 @@ svn_dirent_is_ancestor(const char *parent_dirent, const char *child_dirent)
}
svn_boolean_t
-svn_relpath__is_ancestor(const char *parent_relpath, const char *child_relpath)
-{
- return svn_relpath_skip_ancestor(parent_relpath, child_relpath) != NULL;
-}
-
-svn_boolean_t
svn_uri__is_ancestor(const char *parent_uri, const char *child_uri)
{
return uri_skip_ancestor(parent_uri, child_uri) != NULL;
@@ -1675,7 +1650,7 @@ svn_dirent_canonicalize(const char *dirent, apr_pool_t *pool)
}
svn_boolean_t
-svn_dirent_is_canonical(const char *dirent, apr_pool_t *pool)
+svn_dirent_is_canonical(const char *dirent, apr_pool_t *scratch_pool)
{
const char *ptr = dirent;
if (*ptr == '/')
@@ -1688,7 +1663,8 @@ svn_dirent_is_canonical(const char *dirent, apr_pool_t *pool)
/* TODO: Scan hostname and sharename and fall back to part code */
/* ### Fall back to old implementation */
- return (strcmp(dirent, svn_dirent_canonicalize(dirent, pool)) == 0);
+ return (strcmp(dirent, svn_dirent_canonicalize(dirent, scratch_pool))
+ == 0);
}
#endif /* SVN_USE_DOS_PATHS */
}
@@ -1762,7 +1738,7 @@ svn_relpath_is_canonical(const char *relpath)
}
svn_boolean_t
-svn_uri_is_canonical(const char *uri, apr_pool_t *pool)
+svn_uri_is_canonical(const char *uri, apr_pool_t *scratch_pool)
{
const char *ptr = uri, *seg = uri;
const char *schema_data = NULL;
@@ -1815,12 +1791,28 @@ svn_uri_is_canonical(const char *uri, apr_pool_t *pool)
/* Found a hostname, check that it's all lowercase. */
ptr = seg;
- while (*ptr && *ptr != '/' && *ptr != ':')
+
+ if (*ptr == '[')
{
- if (*ptr >= 'A' && *ptr <= 'Z')
+ ptr++;
+ while (*ptr == ':'
+ || (*ptr >= '0' && *ptr <= '9')
+ || (*ptr >= 'a' && *ptr <= 'f'))
+ {
+ ptr++;
+ }
+
+ if (*ptr != ']')
return FALSE;
ptr++;
}
+ else
+ while (*ptr && *ptr != '/' && *ptr != ':')
+ {
+ if (*ptr >= 'A' && *ptr <= 'Z')
+ return FALSE;
+ ptr++;
+ }
/* Found a portnumber */
if (*ptr == ':')
@@ -1866,6 +1858,9 @@ svn_uri_is_canonical(const char *uri, apr_pool_t *pool)
#endif /* SVN_USE_DOS_PATHS */
/* Now validate the rest of the URI. */
+ seg = ptr;
+ while (*ptr && (*ptr != '/'))
+ ptr++;
while(1)
{
apr_size_t seglen = ptr - seg;
@@ -1884,9 +1879,8 @@ svn_uri_is_canonical(const char *uri, apr_pool_t *pool)
if (*ptr == '/')
ptr++;
- seg = ptr;
-
+ seg = ptr;
while (*ptr && (*ptr != '/'))
ptr++;
}
@@ -2443,7 +2437,17 @@ svn_uri_get_file_url_from_dirent(const char **url,
*url = apr_pstrcat(pool, "file:", dirent, NULL);
}
else
- *url = apr_pstrcat(pool, "file:///", dirent, NULL);
+ {
+ char *uri = apr_pstrcat(pool, "file:///", dirent, NULL);
+ apr_size_t len = 8 /* strlen("file:///") */ + strlen(dirent);
+
+ /* "C:/" is a canonical dirent on Windows,
+ but "file:///C:/" is not a canonical uri */
+ if (uri[len-1] == '/')
+ uri[len-1] = '\0';
+
+ *url = uri;
+ }
#endif
return SVN_NO_ERROR;
@@ -2481,21 +2485,6 @@ svn_fspath__is_root(const char *fspath, apr_size_t len)
const char *
-svn_fspath__is_child(const char *parent_fspath,
- const char *child_fspath,
- apr_pool_t *pool)
-{
- const char *result;
- assert(svn_fspath__is_canonical(parent_fspath));
- assert(svn_fspath__is_canonical(child_fspath));
-
- result = svn_relpath__is_child(parent_fspath + 1, child_fspath + 1, pool);
-
- assert(result == NULL || svn_relpath_is_canonical(result));
- return result;
-}
-
-const char *
svn_fspath__skip_ancestor(const char *parent_fspath,
const char *child_fspath)
{
@@ -2505,16 +2494,6 @@ svn_fspath__skip_ancestor(const char *parent_fspath,
return svn_relpath_skip_ancestor(parent_fspath + 1, child_fspath + 1);
}
-svn_boolean_t
-svn_fspath__is_ancestor(const char *parent_fspath,
- const char *child_fspath)
-{
- assert(svn_fspath__is_canonical(parent_fspath));
- assert(svn_fspath__is_canonical(child_fspath));
-
- return svn_relpath__is_ancestor(parent_fspath + 1, child_fspath + 1);
-}
-
const char *
svn_fspath__dirname(const char *fspath,
@@ -2619,3 +2598,81 @@ svn_urlpath__canonicalize(const char *uri,
}
return uri;
}
+
+
+/* -------------- The cert API (see private/svn_cert.h) ------------- */
+
+svn_boolean_t
+svn_cert__match_dns_identity(svn_string_t *pattern, svn_string_t *hostname)
+{
+ apr_size_t pattern_pos = 0, hostname_pos = 0;
+
+ /* support leading wildcards that composed of the only character in the
+ * left-most label. */
+ if (pattern->len >= 2 &&
+ pattern->data[pattern_pos] == '*' &&
+ pattern->data[pattern_pos + 1] == '.')
+ {
+ while (hostname_pos < hostname->len &&
+ hostname->data[hostname_pos] != '.')
+ {
+ hostname_pos++;
+ }
+ /* Assume that the wildcard must match something. Rule 2 says
+ * that *.example.com should not match example.com. If the wildcard
+ * ends up not matching anything then it matches .example.com which
+ * seems to be essentially the same as just example.com */
+ if (hostname_pos == 0)
+ return FALSE;
+
+ pattern_pos++;
+ }
+
+ while (pattern_pos < pattern->len && hostname_pos < hostname->len)
+ {
+ char pattern_c = pattern->data[pattern_pos];
+ char hostname_c = hostname->data[hostname_pos];
+
+ /* fold case as described in RFC 4343.
+ * Note: We actually convert to lowercase, since our URI
+ * canonicalization code converts to lowercase and generally
+ * most certs are issued with lowercase DNS names, meaning
+ * this avoids the fold operation in most cases. The RFC
+ * suggests the opposite transformation, but doesn't require
+ * any specific implementation in any case. It is critical
+ * that this folding be locale independent so you can't use
+ * tolower(). */
+ pattern_c = canonicalize_to_lower(pattern_c);
+ hostname_c = canonicalize_to_lower(hostname_c);
+
+ if (pattern_c != hostname_c)
+ {
+ /* doesn't match */
+ return FALSE;
+ }
+ else
+ {
+ /* characters match so skip both */
+ pattern_pos++;
+ hostname_pos++;
+ }
+ }
+
+ /* ignore a trailing period on the hostname since this has no effect on the
+ * security of the matching. See the following for the long explanation as
+ * to why:
+ * https://bugzilla.mozilla.org/show_bug.cgi?id=134402#c28
+ */
+ if (pattern_pos == pattern->len &&
+ hostname_pos == hostname->len - 1 &&
+ hostname->data[hostname_pos] == '.')
+ hostname_pos++;
+
+ if (pattern_pos != pattern->len || hostname_pos != hostname->len)
+ {
+ /* end didn't match */
+ return FALSE;
+ }
+
+ return TRUE;
+}
diff --git a/subversion/libsvn_subr/dso.c b/subversion/libsvn_subr/dso.c
index e6872c0..7cce2fd 100644
--- a/subversion/libsvn_subr/dso.c
+++ b/subversion/libsvn_subr/dso.c
@@ -22,14 +22,16 @@
#include <apr_thread_mutex.h>
#include <apr_hash.h>
+#include "svn_hash.h"
#include "svn_dso.h"
#include "svn_pools.h"
#include "svn_private_config.h"
+#include "private/svn_mutex.h"
+#include "private/svn_atomic.h"
+
/* A mutex to protect our global pool and cache. */
-#if APR_HAS_THREADS
-static apr_thread_mutex_t *dso_mutex;
-#endif
+static svn_mutex__t *dso_mutex = NULL;
/* Global pool to allocate DSOs in. */
static apr_pool_t *dso_pool;
@@ -40,50 +42,40 @@ static apr_hash_t *dso_cache;
/* Just an arbitrary location in memory... */
static int not_there_sentinel;
+static volatile svn_atomic_t atomic_init_status = 0;
+
/* A specific value we store in the dso_cache to indicate that the
library wasn't found. This keeps us from allocating extra memory
from dso_pool when trying to find libraries we already know aren't
there. */
#define NOT_THERE ((void *) &not_there_sentinel)
-svn_error_t *
-svn_dso_initialize2(void)
+static svn_error_t *
+atomic_init_func(void *baton,
+ apr_pool_t *pool)
{
-#if APR_HAS_THREADS
- apr_status_t status;
-#endif
- if (dso_pool)
- return SVN_NO_ERROR;
-
dso_pool = svn_pool_create(NULL);
-#if APR_HAS_THREADS
- status = apr_thread_mutex_create(&dso_mutex,
- APR_THREAD_MUTEX_DEFAULT, dso_pool);
- if (status)
- return svn_error_wrap_apr(status, _("Can't create DSO mutex"));
-#endif
+ SVN_ERR(svn_mutex__init(&dso_mutex, TRUE, dso_pool));
dso_cache = apr_hash_make(dso_pool);
return SVN_NO_ERROR;
}
-#if APR_HAS_DSO
svn_error_t *
-svn_dso_load(apr_dso_handle_t **dso, const char *fname)
+svn_dso_initialize2(void)
{
- apr_status_t status;
-
- if (! dso_pool)
- SVN_ERR(svn_dso_initialize2());
+ SVN_ERR(svn_atomic__init_once(&atomic_init_status, atomic_init_func,
+ NULL, NULL));
-#if APR_HAS_THREADS
- status = apr_thread_mutex_lock(dso_mutex);
- if (status)
- return svn_error_wrap_apr(status, _("Can't grab DSO mutex"));
-#endif
+ return SVN_NO_ERROR;
+}
- *dso = apr_hash_get(dso_cache, fname, APR_HASH_KEY_STRING);
+#if APR_HAS_DSO
+static svn_error_t *
+svn_dso_load_internal(apr_dso_handle_t **dso, const char *fname)
+{
+ *dso = svn_hash_gets(dso_cache, fname);
/* First check to see if we've been through this before... We do this
to avoid calling apr_dso_load multiple times for a given library,
@@ -91,52 +83,43 @@ svn_dso_load(apr_dso_handle_t **dso, const char *fname)
if (*dso == NOT_THERE)
{
*dso = NULL;
-#if APR_HAS_THREADS
- status = apr_thread_mutex_unlock(dso_mutex);
- if (status)
- return svn_error_wrap_apr(status, _("Can't ungrab DSO mutex"));
-#endif
return SVN_NO_ERROR;
}
/* If we got nothing back from the cache, try and load the library. */
if (! *dso)
{
- status = apr_dso_load(dso, fname, dso_pool);
+ apr_status_t status = apr_dso_load(dso, fname, dso_pool);
if (status)
{
-#if 0
+#ifdef SVN_DEBUG_DSO
char buf[1024];
- fprintf(stderr, "%s\n", apr_dso_error(*dso, buf, 1024));
+ fprintf(stderr,
+ "Dynamic loading of '%s' failed with the following error:\n%s\n",
+ fname,
+ apr_dso_error(*dso, buf, 1024));
#endif
*dso = NULL;
/* It wasn't found, so set the special "we didn't find it" value. */
- apr_hash_set(dso_cache,
- apr_pstrdup(dso_pool, fname),
- APR_HASH_KEY_STRING,
- NOT_THERE);
-
-#if APR_HAS_THREADS
- status = apr_thread_mutex_unlock(dso_mutex);
- if (status)
- return svn_error_wrap_apr(status, _("Can't ungrab DSO mutex"));
-#endif
+ svn_hash_sets(dso_cache, apr_pstrdup(dso_pool, fname), NOT_THERE);
+
return SVN_NO_ERROR;
}
/* Stash the dso so we can use it next time. */
- apr_hash_set(dso_cache,
- apr_pstrdup(dso_pool, fname),
- APR_HASH_KEY_STRING,
- *dso);
+ svn_hash_sets(dso_cache, apr_pstrdup(dso_pool, fname), *dso);
}
-#if APR_HAS_THREADS
- status = apr_thread_mutex_unlock(dso_mutex);
- if (status)
- return svn_error_wrap_apr(status, _("Can't ungrab DSO mutex"));
-#endif
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_dso_load(apr_dso_handle_t **dso, const char *fname)
+{
+ SVN_ERR(svn_dso_initialize2());
+
+ SVN_MUTEX__WITH_LOCK(dso_mutex, svn_dso_load_internal(dso, fname));
return SVN_NO_ERROR;
}
diff --git a/subversion/libsvn_subr/eol.c b/subversion/libsvn_subr/eol.c
index 180010f..88a6a37 100644
--- a/subversion/libsvn_subr/eol.c
+++ b/subversion/libsvn_subr/eol.c
@@ -32,18 +32,6 @@
/* Machine-word-sized masks used in svn_eol__find_eol_start.
*/
-#if APR_SIZEOF_VOIDP == 8
-# define LOWER_7BITS_SET 0x7f7f7f7f7f7f7f7f
-# define BIT_7_SET 0x8080808080808080
-# define R_MASK 0x0a0a0a0a0a0a0a0a
-# define N_MASK 0x0d0d0d0d0d0d0d0d
-#else
-# define LOWER_7BITS_SET 0x7f7f7f7f
-# define BIT_7_SET 0x80808080
-# define R_MASK 0x0a0a0a0a
-# define N_MASK 0x0d0d0d0d
-#endif
-
char *
svn_eol__find_eol_start(char *buf, apr_size_t len)
{
@@ -69,19 +57,19 @@ svn_eol__find_eol_start(char *buf, apr_size_t len)
/* This is a variant of the well-known strlen test: */
apr_uintptr_t chunk = *(const apr_uintptr_t *)buf;
- /* A byte in R_TEST is \0, iff it was \r in *BUF.
- * Similarly, N_TEST is an indicator for \n. */
- apr_uintptr_t r_test = chunk ^ R_MASK;
- apr_uintptr_t n_test = chunk ^ N_MASK;
+ /* A byte in SVN__R_TEST is \0, iff it was \r in *BUF.
+ * Similarly, SVN__N_TEST is an indicator for \n. */
+ apr_uintptr_t r_test = chunk ^ SVN__R_MASK;
+ apr_uintptr_t n_test = chunk ^ SVN__N_MASK;
- /* A byte in R_TEST can by < 0x80, iff it has been \0 before
- * (i.e. \r in *BUF). Dito for N_TEST. */
- r_test |= (r_test & LOWER_7BITS_SET) + LOWER_7BITS_SET;
- n_test |= (n_test & LOWER_7BITS_SET) + LOWER_7BITS_SET;
+ /* A byte in SVN__R_TEST can by < 0x80, iff it has been \0 before
+ * (i.e. \r in *BUF). Dito for SVN__N_TEST. */
+ r_test |= (r_test & SVN__LOWER_7BITS_SET) + SVN__LOWER_7BITS_SET;
+ n_test |= (n_test & SVN__LOWER_7BITS_SET) + SVN__LOWER_7BITS_SET;
/* Check whether at least one of the words contains a byte <0x80
* (if one is detected, there was a \r or \n in CHUNK). */
- if ((r_test & n_test & BIT_7_SET) != BIT_7_SET)
+ if ((r_test & n_test & SVN__BIT_7_SET) != SVN__BIT_7_SET)
break;
}
diff --git a/subversion/libsvn_subr/error.c b/subversion/libsvn_subr/error.c
index ac8aa6d..48ac906 100644
--- a/subversion/libsvn_subr/error.c
+++ b/subversion/libsvn_subr/error.c
@@ -28,6 +28,11 @@
#include <apr_pools.h>
#include <apr_strings.h>
+#include <zlib.h>
+
+#ifndef SVN_ERR__TRACING
+#define SVN_ERR__TRACING
+#endif
#include "svn_cmdline.h"
#include "svn_error.h"
#include "svn_pools.h"
@@ -64,8 +69,9 @@ static const char SVN_FILE_LINE_UNDEFINED[] = "svn:<undefined>";
#undef svn_error_quick_wrap
#undef svn_error_wrap_apr
-/* Note: This function was historically in the public API, so we need
- * to define it even when !SVN_DEBUG. */
+/* Note: Although this is a "__" function, it was historically in the
+ * public ABI, so we can never change it or remove its signature, even
+ * though it is now only used in SVN_DEBUG mode. */
void
svn_error__locate(const char *file, long line)
{
@@ -193,9 +199,14 @@ svn_error_wrap_apr(apr_status_t status,
va_start(ap, fmt);
msg = apr_pvsprintf(err->pool, fmt, ap);
va_end(ap);
- err->message = apr_psprintf(err->pool, "%s%s%s", msg,
- (msg_apr) ? ": " : "",
- (msg_apr) ? msg_apr : "");
+ if (msg_apr)
+ {
+ err->message = apr_pstrcat(err->pool, msg, ": ", msg_apr, NULL);
+ }
+ else
+ {
+ err->message = msg;
+ }
}
return err;
@@ -213,6 +224,33 @@ svn_error_quick_wrap(svn_error_t *child, const char *new_msg)
new_msg);
}
+/* Messages in tracing errors all point to this static string. */
+static const char error_tracing_link[] = "traced call";
+
+svn_error_t *
+svn_error__trace(const char *file, long line, svn_error_t *err)
+{
+#ifndef SVN_DEBUG
+
+ /* We shouldn't even be here, but whatever. Just return the error as-is. */
+ return err;
+
+#else
+
+ /* Only do the work when an error occurs. */
+ if (err)
+ {
+ svn_error_t *trace;
+ svn_error__locate(file, line);
+ trace = make_error_internal(err->apr_err, err);
+ trace->message = error_tracing_link;
+ return trace;
+ }
+ return SVN_NO_ERROR;
+
+#endif
+}
+
svn_error_t *
svn_error_compose_create(svn_error_t *err1,
@@ -220,7 +258,9 @@ svn_error_compose_create(svn_error_t *err1,
{
if (err1 && err2)
{
- svn_error_compose(err1, err2);
+ svn_error_compose(err1,
+ svn_error_quick_wrap(err2,
+ _("Additional errors:")));
return err1;
}
return err1 ? err1 : err2;
@@ -249,6 +289,8 @@ svn_error_compose(svn_error_t *chain, svn_error_t *new_err)
*chain = *new_err;
if (chain->message)
chain->message = apr_pstrdup(pool, new_err->message);
+ if (chain->file)
+ chain->file = apr_pstrdup(pool, new_err->file);
chain->pool = pool;
#if defined(SVN_DEBUG)
if (! new_err->child)
@@ -318,6 +360,8 @@ svn_error_dup(svn_error_t *err)
tmp_err->pool = pool;
if (tmp_err->message)
tmp_err->message = apr_pstrdup(pool, tmp_err->message);
+ if (tmp_err->file)
+ tmp_err->file = apr_pstrdup(pool, tmp_err->file);
}
#if defined(SVN_DEBUG)
@@ -351,7 +395,7 @@ svn_error__is_tracing_link(svn_error_t *err)
### we add a boolean field to svn_error_t that's set only for
### these "placeholder error chain" items. Not such a bad idea,
### really... */
- return (err && err->message && !strcmp(err->message, SVN_ERR__TRACED));
+ return (err && err->message && !strcmp(err->message, error_tracing_link));
#else
return FALSE;
#endif
@@ -414,6 +458,8 @@ svn_error_purge_tracing(svn_error_t *err)
#endif /* SVN_ERR__TRACING */
}
+/* ### The logic around omitting (sic) apr_err= in maintainer mode is tightly
+ ### coupled to the current sole caller.*/
static void
print_error(svn_error_t *err, FILE *stream, const char *prefix)
{
@@ -441,8 +487,18 @@ print_error(svn_error_t *err, FILE *stream, const char *prefix)
svn_error_clear(temp_err);
}
- svn_error_clear(svn_cmdline_fprintf(stream, err->pool,
- ": (apr_err=%d)\n", err->apr_err));
+ {
+ const char *symbolic_name;
+ if (svn_error__is_tracing_link(err))
+ /* Skip it; the error code will be printed by the real link. */
+ svn_error_clear(svn_cmdline_fprintf(stream, err->pool, ",\n"));
+ else if ((symbolic_name = svn_error_symbolic_name(err->apr_err)))
+ svn_error_clear(svn_cmdline_fprintf(stream, err->pool,
+ ": (apr_err=%s)\n", symbolic_name));
+ else
+ svn_error_clear(svn_cmdline_fprintf(stream, err->pool,
+ ": (apr_err=%d)\n", err->apr_err));
+ }
#endif /* SVN_DEBUG */
/* "traced call" */
@@ -590,9 +646,11 @@ svn_err_best_message(svn_error_t *err, char *buf, apr_size_t bufsize)
/* svn_strerror() and helpers */
+/* Duplicate of the same typedef in tests/libsvn_subr/error-code-test.c */
typedef struct err_defn {
- svn_errno_t errcode;
- const char *errdesc;
+ svn_errno_t errcode; /* 160004 */
+ const char *errname; /* SVN_ERR_FS_CORRUPT */
+ const char *errdesc; /* default message */
} err_defn;
/* To understand what is going on here, read svn_error_codes.h. */
@@ -614,6 +672,26 @@ svn_strerror(apr_status_t statcode, char *buf, apr_size_t bufsize)
return apr_strerror(statcode, buf, bufsize);
}
+const char *
+svn_error_symbolic_name(apr_status_t statcode)
+{
+ const err_defn *defn;
+
+ for (defn = error_table; defn->errdesc != NULL; ++defn)
+ if (defn->errcode == (svn_errno_t)statcode)
+ return defn->errname;
+
+ /* "No error" is not in error_table. */
+ if (statcode == SVN_NO_ERROR)
+ return "SVN_NO_ERROR";
+
+ return NULL;
+}
+
+
+
+/* Malfunctions. */
+
svn_error_t *
svn_error_raise_on_malfunction(svn_boolean_t can_return,
const char *file, int line,
@@ -663,6 +741,8 @@ svn_error_set_malfunction_handler(svn_error_malfunction_handler_t func)
return old_malfunction_handler;
}
+/* Note: Although this is a "__" function, it is in the public ABI, so
+ * we can never remove it or change its signature. */
svn_error_t *
svn_error__malfunction(svn_boolean_t can_return,
const char *file, int line,
@@ -670,3 +750,55 @@ svn_error__malfunction(svn_boolean_t can_return,
{
return malfunction_handler(can_return, file, line, expr);
}
+
+
+/* Misc. */
+
+svn_error_t *
+svn_error__wrap_zlib(int zerr, const char *function, const char *message)
+{
+ apr_status_t status;
+ const char *zmsg;
+
+ if (zerr == Z_OK)
+ return SVN_NO_ERROR;
+
+ switch (zerr)
+ {
+ case Z_STREAM_ERROR:
+ status = SVN_ERR_STREAM_MALFORMED_DATA;
+ zmsg = _("stream error");
+ break;
+
+ case Z_MEM_ERROR:
+ status = APR_ENOMEM;
+ zmsg = _("out of memory");
+ break;
+
+ case Z_BUF_ERROR:
+ status = APR_ENOMEM;
+ zmsg = _("buffer error");
+ break;
+
+ case Z_VERSION_ERROR:
+ status = SVN_ERR_STREAM_UNRECOGNIZED_DATA;
+ zmsg = _("version error");
+ break;
+
+ case Z_DATA_ERROR:
+ status = SVN_ERR_STREAM_MALFORMED_DATA;
+ zmsg = _("corrupt data");
+ break;
+
+ default:
+ status = SVN_ERR_STREAM_UNRECOGNIZED_DATA;
+ zmsg = _("unknown error");
+ break;
+ }
+
+ if (message != NULL)
+ return svn_error_createf(status, NULL, "zlib (%s): %s: %s", function,
+ zmsg, message);
+ else
+ return svn_error_createf(status, NULL, "zlib (%s): %s", function, zmsg);
+}
diff --git a/subversion/libsvn_subr/gpg_agent.c b/subversion/libsvn_subr/gpg_agent.c
new file mode 100644
index 0000000..4dbf118
--- /dev/null
+++ b/subversion/libsvn_subr/gpg_agent.c
@@ -0,0 +1,642 @@
+/*
+ * gpg_agent.c: GPG Agent provider for SVN_AUTH_CRED_*
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+/* ==================================================================== */
+
+/* This auth provider stores a plaintext password in memory managed by
+ * a running gpg-agent. In contrast to other password store providers
+ * it does not save the password to disk.
+ *
+ * Prompting is performed by the gpg-agent using a "pinentry" program
+ * which needs to be installed separately. There are several pinentry
+ * implementations with different front-ends (e.g. qt, gtk, ncurses).
+ *
+ * The gpg-agent will let the password time out after a while,
+ * or immediately when it receives the SIGHUP signal.
+ * When the password has timed out it will automatically prompt the
+ * user for the password again. This is transparent to Subversion.
+ *
+ * SECURITY CONSIDERATIONS:
+ *
+ * Communication to the agent happens over a UNIX socket, which is located
+ * in a directory which only the user running Subversion can access.
+ * However, any program the user runs could access this socket and get
+ * the Subversion password if the program knows the "cache ID" Subversion
+ * uses for the password.
+ * The cache ID is very easy to obtain for programs running as the same user.
+ * Subversion uses the MD5 of the realmstring as cache ID, and these checksums
+ * are also used as filenames within ~/.subversion/auth/svn.simple.
+ * Unlike GNOME Keyring or KDE Wallet, the user is not prompted for
+ * permission if another program attempts to access the password.
+ *
+ * Therefore, while the gpg-agent is running and has the password cached,
+ * this provider is no more secure than a file storing the password in
+ * plaintext.
+ */
+
+
+/*** Includes. ***/
+
+#ifndef WIN32
+
+#include <unistd.h>
+
+#include <sys/socket.h>
+#include <sys/un.h>
+
+#include <apr_pools.h>
+#include "svn_auth.h"
+#include "svn_config.h"
+#include "svn_error.h"
+#include "svn_pools.h"
+#include "svn_cmdline.h"
+#include "svn_checksum.h"
+#include "svn_string.h"
+#include "svn_hash.h"
+#include "svn_user.h"
+#include "svn_dirent_uri.h"
+
+#include "private/svn_auth_private.h"
+
+#include "svn_private_config.h"
+
+#ifdef SVN_HAVE_GPG_AGENT
+
+#define BUFFER_SIZE 1024
+#define ATTEMPT_PARAMETER "svn.simple.gpg_agent.attempt"
+
+/* Modify STR in-place such that blanks are escaped as required by the
+ * gpg-agent protocol. Return a pointer to STR. */
+static char *
+escape_blanks(char *str)
+{
+ char *s = str;
+
+ while (*s)
+ {
+ if (*s == ' ')
+ *s = '+';
+ s++;
+ }
+
+ return str;
+}
+
+/* Generate the string CACHE_ID_P based on the REALMSTRING allocated in
+ * RESULT_POOL using SCRATCH_POOL for temporary allocations. This is similar
+ * to other password caching mechanisms. */
+static svn_error_t *
+get_cache_id(const char **cache_id_p, const char *realmstring,
+ apr_pool_t *scratch_pool, apr_pool_t *result_pool)
+{
+ const char *cache_id = NULL;
+ svn_checksum_t *digest = NULL;
+
+ SVN_ERR(svn_checksum(&digest, svn_checksum_md5, realmstring,
+ strlen(realmstring), scratch_pool));
+ cache_id = svn_checksum_to_cstring(digest, result_pool);
+ *cache_id_p = cache_id;
+
+ return SVN_NO_ERROR;
+}
+
+/* Attempt to read a gpg-agent response message from the socket SD into
+ * buffer BUF. Buf is assumed to be N bytes large. Return TRUE if a response
+ * message could be read that fits into the buffer. Else return FALSE.
+ * If a message could be read it will always be NUL-terminated and the
+ * trailing newline is retained. */
+static svn_boolean_t
+receive_from_gpg_agent(int sd, char *buf, size_t n)
+{
+ int i = 0;
+ size_t recvd;
+ char c;
+
+ /* Clear existing buffer content before reading response. */
+ if (n > 0)
+ *buf = '\0';
+
+ /* Require the message to fit into the buffer and be terminated
+ * with a newline. */
+ while (i < n)
+ {
+ recvd = read(sd, &c, 1);
+ if (recvd == -1)
+ return FALSE;
+ buf[i] = c;
+ i++;
+ if (i < n && c == '\n')
+ {
+ buf[i] = '\0';
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+/* Using socket SD, send the option OPTION with the specified VALUE
+ * to the gpg agent. Store the response in BUF, assumed to be N bytes
+ * in size, and evaluate the response. Return TRUE if the agent liked
+ * the smell of the option, if there is such a thing, and doesn't feel
+ * saturated by it. Else return FALSE.
+ * Do temporary allocations in scratch_pool. */
+static svn_boolean_t
+send_option(int sd, char *buf, size_t n, const char *option, const char *value,
+ apr_pool_t *scratch_pool)
+{
+ const char *request;
+
+ request = apr_psprintf(scratch_pool, "OPTION %s=%s\n", option, value);
+
+ if (write(sd, request, strlen(request)) == -1)
+ return FALSE;
+
+ if (!receive_from_gpg_agent(sd, buf, n))
+ return FALSE;
+
+ return (strncmp(buf, "OK", 2) == 0);
+}
+
+/* Send the BYE command and disconnect from the gpg-agent. Doing this avoids
+ * gpg-agent emitting a "Connection reset by peer" log message with some
+ * versions of gpg-agent. */
+static void
+bye_gpg_agent(int sd)
+{
+ /* don't bother to check the result of the write, it either worked or it
+ * didn't, but either way we're closing. */
+ write(sd, "BYE\n", 4);
+ close(sd);
+}
+
+/* Locate a running GPG Agent, and return an open file descriptor
+ * for communication with the agent in *NEW_SD. If no running agent
+ * can be found, set *NEW_SD to -1. */
+static svn_error_t *
+find_running_gpg_agent(int *new_sd, apr_pool_t *pool)
+{
+ char *buffer;
+ char *gpg_agent_info = NULL;
+ const char *socket_name = NULL;
+ const char *request = NULL;
+ const char *p = NULL;
+ char *ep = NULL;
+ int sd;
+
+ *new_sd = -1;
+
+ /* This implements the method of finding the socket as described in
+ * the gpg-agent man page under the --use-standard-socket option.
+ * The manage page misleadingly says the standard socket is
+ * "named 'S.gpg-agent' located in the home directory." The standard
+ * socket path is actually in the .gnupg directory in the home directory,
+ * i.e. ~/.gnupg/S.gpg-agent */
+ gpg_agent_info = getenv("GPG_AGENT_INFO");
+ if (gpg_agent_info != NULL)
+ {
+ apr_array_header_t *socket_details;
+
+ /* For reference GPG_AGENT_INFO consists of 3 : separated fields.
+ * The path to the socket, the pid of the gpg-agent process and
+ * finally the version of the protocol the agent talks. */
+ socket_details = svn_cstring_split(gpg_agent_info, ":", TRUE,
+ pool);
+ socket_name = APR_ARRAY_IDX(socket_details, 0, const char *);
+ }
+ else
+ {
+ const char *homedir = svn_user_get_homedir(pool);
+
+ if (!homedir)
+ return SVN_NO_ERROR;
+
+ socket_name = svn_dirent_join_many(pool, homedir, ".gnupg",
+ "S.gpg-agent", NULL);
+ }
+
+ if (socket_name != NULL)
+ {
+ struct sockaddr_un addr;
+
+ addr.sun_family = AF_UNIX;
+ strncpy(addr.sun_path, socket_name, sizeof(addr.sun_path) - 1);
+ addr.sun_path[sizeof(addr.sun_path) - 1] = '\0';
+
+ sd = socket(AF_UNIX, SOCK_STREAM, 0);
+ if (sd == -1)
+ return SVN_NO_ERROR;
+
+ if (connect(sd, (struct sockaddr *)&addr, sizeof(addr)) == -1)
+ {
+ close(sd);
+ return SVN_NO_ERROR;
+ }
+ }
+ else
+ return SVN_NO_ERROR;
+
+ /* Receive the connection status from the gpg-agent daemon. */
+ buffer = apr_palloc(pool, BUFFER_SIZE);
+ if (!receive_from_gpg_agent(sd, buffer, BUFFER_SIZE))
+ {
+ bye_gpg_agent(sd);
+ return SVN_NO_ERROR;
+ }
+
+ if (strncmp(buffer, "OK", 2) != 0)
+ {
+ bye_gpg_agent(sd);
+ return SVN_NO_ERROR;
+ }
+
+ /* The GPG-Agent documentation says:
+ * "Clients should deny to access an agent with a socket name which does
+ * not match its own configuration". */
+ request = "GETINFO socket_name\n";
+ if (write(sd, request, strlen(request)) == -1)
+ {
+ bye_gpg_agent(sd);
+ return SVN_NO_ERROR;
+ }
+ if (!receive_from_gpg_agent(sd, buffer, BUFFER_SIZE))
+ {
+ bye_gpg_agent(sd);
+ return SVN_NO_ERROR;
+ }
+ if (strncmp(buffer, "D", 1) == 0)
+ p = &buffer[2];
+ if (!p)
+ {
+ bye_gpg_agent(sd);
+ return SVN_NO_ERROR;
+ }
+ ep = strchr(p, '\n');
+ if (ep != NULL)
+ *ep = '\0';
+ if (strcmp(socket_name, p) != 0)
+ {
+ bye_gpg_agent(sd);
+ return SVN_NO_ERROR;
+ }
+ /* The agent will terminate its response with "OK". */
+ if (!receive_from_gpg_agent(sd, buffer, BUFFER_SIZE))
+ {
+ bye_gpg_agent(sd);
+ return SVN_NO_ERROR;
+ }
+ if (strncmp(buffer, "OK", 2) != 0)
+ {
+ bye_gpg_agent(sd);
+ return SVN_NO_ERROR;
+ }
+
+ *new_sd = sd;
+ return SVN_NO_ERROR;
+}
+
+static svn_boolean_t
+send_options(int sd, char *buf, size_t n, apr_pool_t *scratch_pool)
+{
+ const char *tty_name;
+ const char *tty_type;
+ const char *lc_ctype;
+ const char *display;
+
+ /* Send TTY_NAME to the gpg-agent daemon. */
+ tty_name = getenv("GPG_TTY");
+ if (tty_name != NULL)
+ {
+ if (!send_option(sd, buf, n, "ttyname", tty_name, scratch_pool))
+ return FALSE;
+ }
+
+ /* Send TTY_TYPE to the gpg-agent daemon. */
+ tty_type = getenv("TERM");
+ if (tty_type != NULL)
+ {
+ if (!send_option(sd, buf, n, "ttytype", tty_type, scratch_pool))
+ return FALSE;
+ }
+
+ /* Compute LC_CTYPE. */
+ lc_ctype = getenv("LC_ALL");
+ if (lc_ctype == NULL)
+ lc_ctype = getenv("LC_CTYPE");
+ if (lc_ctype == NULL)
+ lc_ctype = getenv("LANG");
+
+ /* Send LC_CTYPE to the gpg-agent daemon. */
+ if (lc_ctype != NULL)
+ {
+ if (!send_option(sd, buf, n, "lc-ctype", lc_ctype, scratch_pool))
+ return FALSE;
+ }
+
+ /* Send DISPLAY to the gpg-agent daemon. */
+ display = getenv("DISPLAY");
+ if (display != NULL)
+ {
+ if (!send_option(sd, buf, n, "display", display, scratch_pool))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/* Implementation of svn_auth__password_get_t that retrieves the password
+ from gpg-agent */
+static svn_error_t *
+password_get_gpg_agent(svn_boolean_t *done,
+ const char **password,
+ apr_hash_t *creds,
+ const char *realmstring,
+ const char *username,
+ apr_hash_t *parameters,
+ svn_boolean_t non_interactive,
+ apr_pool_t *pool)
+{
+ int sd;
+ const char *p = NULL;
+ char *ep = NULL;
+ char *buffer;
+ const char *request = NULL;
+ const char *cache_id = NULL;
+ char *password_prompt;
+ char *realm_prompt;
+ char *error_prompt;
+ int *attempt;
+
+ *done = FALSE;
+
+ attempt = svn_hash_gets(parameters, ATTEMPT_PARAMETER);
+
+ SVN_ERR(find_running_gpg_agent(&sd, pool));
+ if (sd == -1)
+ return SVN_NO_ERROR;
+
+ buffer = apr_palloc(pool, BUFFER_SIZE);
+
+ if (!send_options(sd, buffer, BUFFER_SIZE, pool))
+ {
+ bye_gpg_agent(sd);
+ return SVN_NO_ERROR;
+ }
+
+ SVN_ERR(get_cache_id(&cache_id, realmstring, pool, pool));
+
+ password_prompt = apr_psprintf(pool, _("Password for '%s': "), username);
+ realm_prompt = apr_psprintf(pool, _("Enter your Subversion password for %s"),
+ realmstring);
+ if (*attempt == 1)
+ /* X means no error to the gpg-agent protocol */
+ error_prompt = apr_pstrdup(pool, "X");
+ else
+ error_prompt = apr_pstrdup(pool, _("Authentication failed"));
+
+ request = apr_psprintf(pool,
+ "GET_PASSPHRASE --data %s"
+ "%s %s %s %s\n",
+ non_interactive ? "--no-ask " : "",
+ cache_id,
+ escape_blanks(error_prompt),
+ escape_blanks(password_prompt),
+ escape_blanks(realm_prompt));
+
+ if (write(sd, request, strlen(request)) == -1)
+ {
+ bye_gpg_agent(sd);
+ return SVN_NO_ERROR;
+ }
+ if (!receive_from_gpg_agent(sd, buffer, BUFFER_SIZE))
+ {
+ bye_gpg_agent(sd);
+ return SVN_NO_ERROR;
+ }
+
+ bye_gpg_agent(sd);
+
+ if (strncmp(buffer, "ERR", 3) == 0)
+ return SVN_NO_ERROR;
+
+ p = NULL;
+ if (strncmp(buffer, "D", 1) == 0)
+ p = &buffer[2];
+
+ if (!p)
+ return SVN_NO_ERROR;
+
+ ep = strchr(p, '\n');
+ if (ep != NULL)
+ *ep = '\0';
+
+ *password = p;
+
+ *done = TRUE;
+ return SVN_NO_ERROR;
+}
+
+
+/* Implementation of svn_auth__password_set_t that would store the
+ password in GPG Agent if that's how this particular integration
+ worked. But it isn't. GPG Agent stores the password provided by
+ the user via the pinentry program immediately upon its provision
+ (and regardless of its accuracy as passwords go), so we just need
+ to check if a running GPG Agent exists. */
+static svn_error_t *
+password_set_gpg_agent(svn_boolean_t *done,
+ apr_hash_t *creds,
+ const char *realmstring,
+ const char *username,
+ const char *password,
+ apr_hash_t *parameters,
+ svn_boolean_t non_interactive,
+ apr_pool_t *pool)
+{
+ int sd;
+
+ *done = FALSE;
+
+ SVN_ERR(find_running_gpg_agent(&sd, pool));
+ if (sd == -1)
+ return SVN_NO_ERROR;
+
+ bye_gpg_agent(sd);
+ *done = TRUE;
+
+ return SVN_NO_ERROR;
+}
+
+
+/* An implementation of svn_auth_provider_t::first_credentials() */
+static svn_error_t *
+simple_gpg_agent_first_creds(void **credentials,
+ void **iter_baton,
+ void *provider_baton,
+ apr_hash_t *parameters,
+ const char *realmstring,
+ apr_pool_t *pool)
+{
+ svn_error_t *err;
+ int *attempt = apr_palloc(pool, sizeof(*attempt));
+
+ *attempt = 1;
+ svn_hash_sets(parameters, ATTEMPT_PARAMETER, attempt);
+ err = svn_auth__simple_creds_cache_get(credentials, iter_baton,
+ provider_baton, parameters,
+ realmstring, password_get_gpg_agent,
+ SVN_AUTH__GPG_AGENT_PASSWORD_TYPE,
+ pool);
+ *iter_baton = attempt;
+
+ return err;
+}
+
+/* An implementation of svn_auth_provider_t::next_credentials() */
+static svn_error_t *
+simple_gpg_agent_next_creds(void **credentials,
+ void *iter_baton,
+ void *provider_baton,
+ apr_hash_t *parameters,
+ const char *realmstring,
+ apr_pool_t *pool)
+{
+ int *attempt = (int *)iter_baton;
+ int sd;
+ char *buffer;
+ const char *cache_id = NULL;
+ const char *request = NULL;
+
+ *credentials = NULL;
+
+ /* The users previous credentials failed so first remove the cached entry,
+ * before trying to retrieve them again. Because gpg-agent stores cached
+ * credentials immediately upon retrieving them, this gives us the
+ * opportunity to remove the invalid credentials and prompt the
+ * user again. While it's possible that server side issues could trigger
+ * this, this cache is ephemeral so at worst we're just speeding up
+ * when the user would need to re-enter their password. */
+
+ if (svn_hash_gets(parameters, SVN_AUTH_PARAM_NON_INTERACTIVE))
+ {
+ /* In this case since we're running non-interactively we do not
+ * want to clear the cache since the user was never prompted by
+ * gpg-agent to set a password. */
+ return SVN_NO_ERROR;
+ }
+
+ *attempt = *attempt + 1;
+
+ SVN_ERR(find_running_gpg_agent(&sd, pool));
+ if (sd == -1)
+ return SVN_NO_ERROR;
+
+ buffer = apr_palloc(pool, BUFFER_SIZE);
+
+ if (!send_options(sd, buffer, BUFFER_SIZE, pool))
+ {
+ bye_gpg_agent(sd);
+ return SVN_NO_ERROR;
+ }
+
+ SVN_ERR(get_cache_id(&cache_id, realmstring, pool, pool));
+
+ request = apr_psprintf(pool, "CLEAR_PASSPHRASE %s\n", cache_id);
+
+ if (write(sd, request, strlen(request)) == -1)
+ {
+ bye_gpg_agent(sd);
+ return SVN_NO_ERROR;
+ }
+
+ if (!receive_from_gpg_agent(sd, buffer, BUFFER_SIZE))
+ {
+ bye_gpg_agent(sd);
+ return SVN_NO_ERROR;
+ }
+
+ if (strncmp(buffer, "OK\n", 3) != 0)
+ {
+ bye_gpg_agent(sd);
+ return SVN_NO_ERROR;
+ }
+
+ /* TODO: This attempt limit hard codes it at 3 attempts (or 2 retries)
+ * which matches svn command line client's retry_limit as set in
+ * svn_cmdline_create_auth_baton(). It would be nice to have that
+ * limit reflected here but that violates the boundry between the
+ * prompt provider and the cache provider. gpg-agent is acting as
+ * both here due to the peculiarties of their design so we'll have to
+ * live with this for now. Note that when these failures get exceeded
+ * it'll eventually fall back on the retry limits of whatever prompt
+ * provider is in effect, so this effectively doubles the limit. */
+ if (*attempt < 4)
+ return svn_auth__simple_creds_cache_get(credentials, &iter_baton,
+ provider_baton, parameters,
+ realmstring,
+ password_get_gpg_agent,
+ SVN_AUTH__GPG_AGENT_PASSWORD_TYPE,
+ pool);
+
+ return SVN_NO_ERROR;
+}
+
+
+/* An implementation of svn_auth_provider_t::save_credentials() */
+static svn_error_t *
+simple_gpg_agent_save_creds(svn_boolean_t *saved,
+ void *credentials,
+ void *provider_baton,
+ apr_hash_t *parameters,
+ const char *realmstring,
+ apr_pool_t *pool)
+{
+ return svn_auth__simple_creds_cache_set(saved, credentials,
+ provider_baton, parameters,
+ realmstring, password_set_gpg_agent,
+ SVN_AUTH__GPG_AGENT_PASSWORD_TYPE,
+ pool);
+}
+
+
+static const svn_auth_provider_t gpg_agent_simple_provider = {
+ SVN_AUTH_CRED_SIMPLE,
+ simple_gpg_agent_first_creds,
+ simple_gpg_agent_next_creds,
+ simple_gpg_agent_save_creds
+};
+
+
+/* Public API */
+void
+svn_auth_get_gpg_agent_simple_provider(svn_auth_provider_object_t **provider,
+ apr_pool_t *pool)
+{
+ svn_auth_provider_object_t *po = apr_pcalloc(pool, sizeof(*po));
+
+ po->vtable = &gpg_agent_simple_provider;
+ *provider = po;
+}
+
+#endif /* SVN_HAVE_GPG_AGENT */
+#endif /* !WIN32 */
diff --git a/subversion/libsvn_subr/hash.c b/subversion/libsvn_subr/hash.c
index 740e805..7868cac 100644
--- a/subversion/libsvn_subr/hash.c
+++ b/subversion/libsvn_subr/hash.c
@@ -40,6 +40,7 @@
#include "svn_pools.h"
#include "private/svn_dep_compat.h"
+#include "private/svn_subr_private.h"
#include "svn_private_config.h"
@@ -95,11 +96,14 @@ hash_read(apr_hash_t *hash, svn_stream_t *stream, const char *terminator,
svn_stringbuf_t *buf;
svn_boolean_t eof;
apr_size_t len, keylen, vallen;
- char c, *end, *keybuf, *valbuf;
+ char c, *keybuf, *valbuf;
apr_pool_t *iterpool = svn_pool_create(pool);
while (1)
{
+ svn_error_t *err;
+ apr_uint64_t ui64;
+
svn_pool_clear(iterpool);
/* Read a key length line. Might be END, though. */
@@ -118,10 +122,12 @@ hash_read(apr_hash_t *hash, svn_stream_t *stream, const char *terminator,
if ((buf->len >= 3) && (buf->data[0] == 'K') && (buf->data[1] == ' '))
{
/* Get the length of the key */
- keylen = (size_t) strtoul(buf->data + 2, &end, 10);
- if (keylen == (size_t) ULONG_MAX || *end != '\0')
- return svn_error_create(SVN_ERR_MALFORMED_FILE, NULL,
+ err = svn_cstring_strtoui64(&ui64, buf->data + 2,
+ 0, APR_SIZE_MAX, 10);
+ if (err)
+ return svn_error_create(SVN_ERR_MALFORMED_FILE, err,
_("Serialized hash malformed"));
+ keylen = (apr_size_t)ui64;
/* Now read that much into a buffer. */
keybuf = apr_palloc(pool, keylen + 1);
@@ -140,10 +146,12 @@ hash_read(apr_hash_t *hash, svn_stream_t *stream, const char *terminator,
if ((buf->data[0] == 'V') && (buf->data[1] == ' '))
{
- vallen = (size_t) strtoul(buf->data + 2, &end, 10);
- if (vallen == (size_t) ULONG_MAX || *end != '\0')
- return svn_error_create(SVN_ERR_MALFORMED_FILE, NULL,
+ err = svn_cstring_strtoui64(&ui64, buf->data + 2,
+ 0, APR_SIZE_MAX, 10);
+ if (err)
+ return svn_error_create(SVN_ERR_MALFORMED_FILE, err,
_("Serialized hash malformed"));
+ vallen = (apr_size_t)ui64;
valbuf = apr_palloc(iterpool, vallen + 1);
SVN_ERR(svn_stream_read(stream, valbuf, &vallen));
@@ -168,10 +176,12 @@ hash_read(apr_hash_t *hash, svn_stream_t *stream, const char *terminator,
&& (buf->data[0] == 'D') && (buf->data[1] == ' '))
{
/* Get the length of the key */
- keylen = (size_t) strtoul(buf->data + 2, &end, 10);
- if (keylen == (size_t) ULONG_MAX || *end != '\0')
- return svn_error_create(SVN_ERR_MALFORMED_FILE, NULL,
+ err = svn_cstring_strtoui64(&ui64, buf->data + 2,
+ 0, APR_SIZE_MAX, 10);
+ if (err)
+ return svn_error_create(SVN_ERR_MALFORMED_FILE, err,
_("Serialized hash malformed"));
+ keylen = (apr_size_t)ui64;
/* Now read that much into a buffer. */
keybuf = apr_palloc(iterpool, keylen + 1);
@@ -229,15 +239,20 @@ hash_write(apr_hash_t *hash, apr_hash_t *oldhash, svn_stream_t *stream,
continue;
}
+ if (item->klen < 0)
+ return svn_error_create(SVN_ERR_MALFORMED_FILE, NULL,
+ _("Cannot serialize negative length"));
+
/* Write it out. */
SVN_ERR(svn_stream_printf(stream, subpool,
- "K %" APR_SSIZE_T_FMT "\n%s\n"
+ "K %" APR_SIZE_T_FMT "\n%s\n"
"V %" APR_SIZE_T_FMT "\n",
- item->klen, (const char *) item->key,
+ (apr_size_t) item->klen,
+ (const char *) item->key,
valstr->len));
len = valstr->len;
SVN_ERR(svn_stream_write(stream, valstr->data, &len));
- SVN_ERR(svn_stream_printf(stream, subpool, "\n"));
+ SVN_ERR(svn_stream_puts(stream, "\n"));
}
if (oldhash)
@@ -495,36 +510,33 @@ svn_hash_from_cstring_keys(apr_hash_t **hash_p,
apr_pool_t *pool)
{
int i;
- apr_hash_t *hash = apr_hash_make(pool);
+ apr_hash_t *hash = svn_hash__make(pool);
for (i = 0; i < keys->nelts; i++)
{
const char *key =
apr_pstrdup(pool, APR_ARRAY_IDX(keys, i, const char *));
- apr_hash_set(hash, key, APR_HASH_KEY_STRING, key);
+ svn_hash_sets(hash, key, key);
}
*hash_p = hash;
return SVN_NO_ERROR;
}
-svn_error_t *
-svn_hash__clear(apr_hash_t *hash, apr_pool_t *pool)
+#if !APR_VERSION_AT_LEAST(1, 3, 0)
+void
+svn_hash__clear(apr_hash_t *hash)
{
-#if APR_VERSION_AT_LEAST(1, 3, 0)
- apr_hash_clear(hash);
-#else
apr_hash_index_t *hi;
const void *key;
apr_ssize_t klen;
- for (hi = apr_hash_first(pool, hash); hi; hi = apr_hash_next(hi))
+ for (hi = apr_hash_first(NULL, hash); hi; hi = apr_hash_next(hi))
{
apr_hash_this(hi, &key, &klen, NULL);
apr_hash_set(hash, key, klen, NULL);
}
-#endif
- return SVN_NO_ERROR;
}
+#endif
@@ -537,7 +549,7 @@ svn_hash__get_cstring(apr_hash_t *hash,
{
if (hash)
{
- const char *value = apr_hash_get(hash, key, APR_HASH_KEY_STRING);
+ const char *value = svn_hash_gets(hash, key);
return value ? value : default_value;
}
@@ -560,3 +572,71 @@ svn_hash__get_bool(apr_hash_t *hash, const char *key,
return default_value;
}
+
+
+/*** Optimized hash function ***/
+
+/* Optimized version of apr_hashfunc_default in APR 1.4.5 and earlier.
+ * It assumes that the CPU has 32-bit multiplications with high throughput
+ * of at least 1 operation every 3 cycles. Latency is not an issue. Another
+ * optimization is a mildly unrolled main loop and breaking the dependency
+ * chain within the loop.
+ *
+ * Note that most CPUs including Intel Atom, VIA Nano, ARM feature the
+ * assumed pipelined multiplication circuitry. They can do one MUL every
+ * or every other cycle.
+ *
+ * The performance is ultimately limited by the fact that most CPUs can
+ * do only one LOAD and only one BRANCH operation per cycle. The best we
+ * can do is to process one character per cycle - provided the processor
+ * is wide enough to do 1 LOAD, COMPARE, BRANCH, MUL and ADD per cycle.
+ */
+static unsigned int
+hashfunc_compatible(const char *char_key, apr_ssize_t *klen)
+{
+ unsigned int hash = 0;
+ const unsigned char *key = (const unsigned char *)char_key;
+ const unsigned char *p;
+ apr_ssize_t i;
+
+ if (*klen == APR_HASH_KEY_STRING)
+ {
+ for (p = key; ; p+=4)
+ {
+ unsigned int new_hash = hash * 33 * 33 * 33 * 33;
+ if (!p[0]) break;
+ new_hash += p[0] * 33 * 33 * 33;
+ if (!p[1]) break;
+ new_hash += p[1] * 33 * 33;
+ if (!p[2]) break;
+ new_hash += p[2] * 33;
+ if (!p[3]) break;
+ hash = new_hash + p[3];
+ }
+ for (; *p; p++)
+ hash = hash * 33 + *p;
+
+ *klen = p - key;
+ }
+ else
+ {
+ for (p = key, i = *klen; i >= 4; i-=4, p+=4)
+ {
+ hash = hash * 33 * 33 * 33 * 33
+ + p[0] * 33 * 33 * 33
+ + p[1] * 33 * 33
+ + p[2] * 33
+ + p[3];
+ }
+ for (; i; i--, p++)
+ hash = hash * 33 + *p;
+ }
+
+ return hash;
+}
+
+apr_hash_t *
+svn_hash__make(apr_pool_t *pool)
+{
+ return apr_hash_make_custom(pool, hashfunc_compatible);
+}
diff --git a/subversion/libsvn_subr/internal_statements.h b/subversion/libsvn_subr/internal_statements.h
index 08bee51..3aa2169 100644
--- a/subversion/libsvn_subr/internal_statements.h
+++ b/subversion/libsvn_subr/internal_statements.h
@@ -1,13 +1,76 @@
-/* This file is automatically generated from internal_statements.sql.
+/* This file is automatically generated from internal_statements.sql and .dist_sandbox/subversion-1.8.13/subversion/libsvn_subr/token-map.h.
* Do not edit this file -- edit the source and rerun gen-make.py */
-#define STMT_DUMMY_SELECT_FOR_BACKUP 0
+#define STMT_INTERNAL_SAVEPOINT_SVN 0
+#define STMT_0_INFO {"STMT_INTERNAL_SAVEPOINT_SVN", NULL}
#define STMT_0 \
- "SELECT * FROM SQLITE_MASTER; " \
+ "SAVEPOINT svn " \
+ ""
+
+#define STMT_INTERNAL_RELEASE_SAVEPOINT_SVN 1
+#define STMT_1_INFO {"STMT_INTERNAL_RELEASE_SAVEPOINT_SVN", NULL}
+#define STMT_1 \
+ "RELEASE SAVEPOINT svn " \
+ ""
+
+#define STMT_INTERNAL_ROLLBACK_TO_SAVEPOINT_SVN 2
+#define STMT_2_INFO {"STMT_INTERNAL_ROLLBACK_TO_SAVEPOINT_SVN", NULL}
+#define STMT_2 \
+ "ROLLBACK TO SAVEPOINT svn " \
+ ""
+
+#define STMT_INTERNAL_BEGIN_TRANSACTION 3
+#define STMT_3_INFO {"STMT_INTERNAL_BEGIN_TRANSACTION", NULL}
+#define STMT_3 \
+ "BEGIN TRANSACTION " \
+ ""
+
+#define STMT_INTERNAL_BEGIN_IMMEDIATE_TRANSACTION 4
+#define STMT_4_INFO {"STMT_INTERNAL_BEGIN_IMMEDIATE_TRANSACTION", NULL}
+#define STMT_4 \
+ "BEGIN IMMEDIATE TRANSACTION " \
+ ""
+
+#define STMT_INTERNAL_COMMIT_TRANSACTION 5
+#define STMT_5_INFO {"STMT_INTERNAL_COMMIT_TRANSACTION", NULL}
+#define STMT_5 \
+ "COMMIT TRANSACTION " \
+ ""
+
+#define STMT_INTERNAL_ROLLBACK_TRANSACTION 6
+#define STMT_6_INFO {"STMT_INTERNAL_ROLLBACK_TRANSACTION", NULL}
+#define STMT_6 \
+ "ROLLBACK TRANSACTION " \
+ ""
+
+#define STMT_INTERNAL_LAST 7
+#define STMT_7_INFO {"STMT_INTERNAL_LAST", NULL}
+#define STMT_7 \
+ "; " \
""
#define INTERNAL_STATEMENTS_SQL_DECLARE_STATEMENTS(varname) \
static const char * const varname[] = { \
STMT_0, \
+ STMT_1, \
+ STMT_2, \
+ STMT_3, \
+ STMT_4, \
+ STMT_5, \
+ STMT_6, \
+ STMT_7, \
NULL \
}
+
+#define INTERNAL_STATEMENTS_SQL_DECLARE_STATEMENT_INFO(varname) \
+ static const char * const varname[][2] = { \
+ STMT_0_INFO, \
+ STMT_1_INFO, \
+ STMT_2_INFO, \
+ STMT_3_INFO, \
+ STMT_4_INFO, \
+ STMT_5_INFO, \
+ STMT_6_INFO, \
+ STMT_7_INFO, \
+ {NULL, NULL} \
+ }
diff --git a/subversion/libsvn_subr/internal_statements.sql b/subversion/libsvn_subr/internal_statements.sql
index 95f527d..c78e855 100644
--- a/subversion/libsvn_subr/internal_statements.sql
+++ b/subversion/libsvn_subr/internal_statements.sql
@@ -21,5 +21,27 @@
* ====================================================================
*/
--- STMT_DUMMY_SELECT_FOR_BACKUP
-SELECT * FROM SQLITE_MASTER;
+-- STMT_INTERNAL_SAVEPOINT_SVN
+SAVEPOINT svn
+
+-- STMT_INTERNAL_RELEASE_SAVEPOINT_SVN
+RELEASE SAVEPOINT svn
+
+-- STMT_INTERNAL_ROLLBACK_TO_SAVEPOINT_SVN
+ROLLBACK TO SAVEPOINT svn
+
+-- STMT_INTERNAL_BEGIN_TRANSACTION
+BEGIN TRANSACTION
+
+-- STMT_INTERNAL_BEGIN_IMMEDIATE_TRANSACTION
+BEGIN IMMEDIATE TRANSACTION
+
+-- STMT_INTERNAL_COMMIT_TRANSACTION
+COMMIT TRANSACTION
+
+-- STMT_INTERNAL_ROLLBACK_TRANSACTION
+ROLLBACK TRANSACTION
+
+/* Dummmy statement to determine the number of internal statements */
+-- STMT_INTERNAL_LAST
+;
diff --git a/subversion/libsvn_subr/io.c b/subversion/libsvn_subr/io.c
index 8bdacdb..e27411e 100644
--- a/subversion/libsvn_subr/io.c
+++ b/subversion/libsvn_subr/io.c
@@ -51,6 +51,7 @@
#include <arch/win32/apr_arch_file_io.h>
#endif
+#include "svn_hash.h"
#include "svn_types.h"
#include "svn_dirent_uri.h"
#include "svn_path.h"
@@ -138,6 +139,14 @@
#endif
#endif
+/* Forward declaration */
+static apr_status_t
+dir_is_empty(const char *dir, apr_pool_t *pool);
+static APR_INLINE svn_error_t *
+do_io_file_wrapper_cleanup(apr_file_t *file, apr_status_t status,
+ const char *msg, const char *msg_no_name,
+ apr_pool_t *pool);
+
/* Local wrapper of svn_path_cstring_to_utf8() that does no copying on
* operating systems where APR always uses utf-8 as native path format */
static svn_error_t *
@@ -168,9 +177,44 @@ cstring_from_utf8(const char **path_apr,
#endif
}
+/* Helper function that allows to convert an APR-level PATH to something
+ * that we can pass the svn_error_wrap_apr. Since we use it in context
+ * of error reporting, having *some* path info may be more useful than
+ * having none. Therefore, we use a best effort approach here.
+ *
+ * This is different from svn_io_file_name_get in that it uses a different
+ * signature style and will never fail.
+ */
+static const char *
+try_utf8_from_internal_style(const char *path, apr_pool_t *pool)
+{
+ svn_error_t *error;
+ const char *path_utf8;
+
+ /* Special case. */
+ if (path == NULL)
+ return "(NULL)";
+
+ /* (try to) convert PATH to UTF-8. If that fails, continue with the plain
+ * PATH because it is the best we have. It may actually be UTF-8 already.
+ */
+ error = cstring_to_utf8(&path_utf8, path, pool);
+ if (error)
+ {
+ /* fallback to best representation we have */
+
+ svn_error_clear(error);
+ path_utf8 = path;
+ }
+
+ /* Toggle (back-)slashes etc. as necessary.
+ */
+ return svn_dirent_local_style(path_utf8, pool);
+}
+
/* Set *NAME_P to the UTF-8 representation of directory entry NAME.
- * NAME is in the the internal encoding used by APR; PARENT is in
+ * NAME is in the internal encoding used by APR; PARENT is in
* UTF-8 and in internal (not local) style.
*
* Use PARENT only for generating an error string if the conversion
@@ -193,6 +237,10 @@ entry_name_to_utf8(const char **name_p,
const char *parent,
apr_pool_t *pool)
{
+#if defined(WIN32) || defined(DARWIN)
+ *name_p = apr_pstrdup(pool, name);
+ return SVN_NO_ERROR;
+#else
svn_error_t *err = svn_path_cstring_to_utf8(name_p, name, pool);
if (err && err->apr_err == APR_EINVAL)
{
@@ -202,6 +250,7 @@ entry_name_to_utf8(const char **name_p,
svn_dirent_local_style(parent, pool));
}
return err;
+#endif
}
@@ -438,7 +487,7 @@ svn_io_open_uniquely_named(apr_file_t **file,
/* The variable parts of unique_name will not require UTF8
conversion. Therefore, if UTF8 conversion had no effect
on it in the first iteration, it won't require conversion
- in any future interation. */
+ in any future iteration. */
needs_utf8_conversion = strcmp(unique_name_apr, unique_name);
}
}
@@ -786,7 +835,7 @@ svn_io_copy_file(const char *src,
return SVN_NO_ERROR;
#endif
- SVN_ERR(svn_io_file_open(&from_file, src, APR_READ | APR_BINARY,
+ SVN_ERR(svn_io_file_open(&from_file, src, APR_READ,
APR_OS_DEFAULT, pool));
/* For atomicity, we copy to a tmp file and then rename the tmp
@@ -851,10 +900,10 @@ file_perms_set(const char *fname, apr_fileperms_t perms,
/* Set permissions PERMS on the FILE. This is a cheaper variant of the
* file_perms_set wrapper() function because no locale-dependent string
- * conversion is required.
+ * conversion is required. POOL will be used for allocations.
*/
static svn_error_t *
-file_perms_set2(apr_file_t* file, apr_fileperms_t perms)
+file_perms_set2(apr_file_t* file, apr_fileperms_t perms, apr_pool_t *pool)
{
const char *fname_apr;
apr_status_t status;
@@ -866,7 +915,7 @@ file_perms_set2(apr_file_t* file, apr_fileperms_t perms)
status = apr_file_perms_set(fname_apr, perms);
if (status)
return svn_error_wrap_apr(status, _("Can't set permissions on '%s'"),
- fname_apr);
+ try_utf8_from_internal_style(fname_apr, pool));
else
return SVN_NO_ERROR;
}
@@ -1194,32 +1243,44 @@ svn_io_sleep_for_timestamps(const char *path, apr_pool_t *pool)
{
/* Very simplistic but safe approach:
If the filesystem has < sec mtime we can be reasonably sure
- that the filesystem has <= millisecond precision.
+ that the filesystem has some sub-second resolution. On Windows
+ it is likely to be sub-millisecond; on Linux systems it depends
+ on the filesystem, ext4 is typically 1ms, 4ms or 10ms resolution.
## Perhaps find a better algorithm here. This will fail once
- in every 1000 cases on a millisecond precision filesystem.
+ in every 1000 cases on a millisecond precision filesystem
+ if the mtime happens to be an exact second.
But better to fail once in every thousand cases than every
time, like we did before.
- (All tested filesystems I know have at least microsecond precision.)
Note for further research on algorithm:
- FAT32 has < 1 sec precision on ctime, but 2 sec on mtime */
+ FAT32 has < 1 sec precision on ctime, but 2 sec on mtime.
- /* Sleep for at least 1 millisecond.
- (t < 1000 will be round to 0 in apr) */
- apr_sleep(1000);
+ Linux/ext4 with CONFIG_HZ=250 has high resolution
+ apr_time_now and although the filesystem timestamps
+ have similar high precision they are only updated with
+ a coarser 4ms resolution. */
- return;
+ /* 10 milliseconds after now. */
+#ifndef SVN_HI_RES_SLEEP_MS
+#define SVN_HI_RES_SLEEP_MS 10
+#endif
+ then = now + apr_time_from_msec(SVN_HI_RES_SLEEP_MS);
}
- now = apr_time_now(); /* Extract the time used for the path stat */
-
- if (now >= then)
- return; /* Passing negative values may suspend indefinitely (Windows) */
+ /* Remove time taken to do stat() from sleep. */
+ now = apr_time_now();
}
- apr_sleep(then - now);
+ if (now >= then)
+ return; /* Passing negative values may suspend indefinitely (Windows) */
+
+ /* (t < 1000 will be round to 0 in apr) */
+ if (then - now < 1000)
+ apr_sleep(1000);
+ else
+ apr_sleep(then - now);
}
@@ -1271,6 +1332,43 @@ svn_io_filesizes_different_p(svn_boolean_t *different_p,
svn_error_t *
+svn_io_filesizes_three_different_p(svn_boolean_t *different_p12,
+ svn_boolean_t *different_p23,
+ svn_boolean_t *different_p13,
+ const char *file1,
+ const char *file2,
+ const char *file3,
+ apr_pool_t *scratch_pool)
+{
+ apr_finfo_t finfo1, finfo2, finfo3;
+ apr_status_t status1, status2, status3;
+ const char *file1_apr, *file2_apr, *file3_apr;
+
+ /* Not using svn_io_stat() because don't want to generate
+ svn_error_t objects for non-error conditions. */
+
+ SVN_ERR(cstring_from_utf8(&file1_apr, file1, scratch_pool));
+ SVN_ERR(cstring_from_utf8(&file2_apr, file2, scratch_pool));
+ SVN_ERR(cstring_from_utf8(&file3_apr, file3, scratch_pool));
+
+ /* Stat all three files */
+ status1 = apr_stat(&finfo1, file1_apr, APR_FINFO_MIN, scratch_pool);
+ status2 = apr_stat(&finfo2, file2_apr, APR_FINFO_MIN, scratch_pool);
+ status3 = apr_stat(&finfo3, file3_apr, APR_FINFO_MIN, scratch_pool);
+
+ /* If we got an error stat'ing a file, it could be because the
+ file was removed... or who knows. Whatever the case, we
+ don't know if the filesizes are definitely different, so
+ assume that they're not. */
+ *different_p12 = !status1 && !status2 && finfo1.size != finfo2.size;
+ *different_p23 = !status2 && !status3 && finfo2.size != finfo3.size;
+ *different_p13 = !status1 && !status3 && finfo1.size != finfo3.size;
+
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
svn_io_file_checksum2(svn_checksum_t **checksum,
const char *file,
svn_checksum_kind_t kind,
@@ -1343,7 +1441,7 @@ get_default_file_perms(apr_fileperms_t *perms, apr_pool_t *scratch_pool)
static apr_fileperms_t default_perms = 0;
/* Technically, this "racy": Multiple threads may use enter here and
- try to figure out the default permisission concurrently. That's fine
+ try to figure out the default permission concurrently. That's fine
since they will end up with the same results. Even more technical,
apr_fileperms_t is an atomic type on 32+ bit machines.
*/
@@ -1351,28 +1449,32 @@ get_default_file_perms(apr_fileperms_t *perms, apr_pool_t *scratch_pool)
{
apr_finfo_t finfo;
apr_file_t *fd;
+ const char *fname_base, *fname;
+ apr_uint32_t randomish;
+ svn_error_t *err;
/* Get the perms for a newly created file to find out what bits
should be set.
- Normally del_on_close can be problematic because APR might
- delete the file if we spawned any child processes. In this
- case, the lifetime of this file handle is about 3 lines of
- code, so we can safely use del_on_close here.
-
- Not so fast! If some other thread forks off a child, then the
- APR cleanups run, and the file will disappear. So use
- del_on_pool_cleanup instead.
+ Explictly delete the file because we want this file to be as
+ short-lived as possible since its presence means other
+ processes may have to try multiple names.
Using svn_io_open_uniquely_named() here because other tempfile
creation functions tweak the permission bits of files they create.
*/
- SVN_ERR(svn_io_open_uniquely_named(&fd, NULL, NULL, "default-perms", NULL,
- svn_io_file_del_on_pool_cleanup,
- scratch_pool, scratch_pool));
- SVN_ERR(svn_io_file_info_get(&finfo, APR_FINFO_PROT, fd, scratch_pool));
- SVN_ERR(svn_io_file_close(fd, scratch_pool));
+ randomish = ((apr_uint32_t)(apr_uintptr_t)scratch_pool
+ + (apr_uint32_t)apr_time_now());
+ fname_base = apr_psprintf(scratch_pool, "svn-%08x", randomish);
+ SVN_ERR(svn_io_open_uniquely_named(&fd, &fname, NULL, fname_base,
+ NULL, svn_io_file_del_none,
+ scratch_pool, scratch_pool));
+ err = svn_io_file_info_get(&finfo, APR_FINFO_PROT, fd, scratch_pool);
+ err = svn_error_compose_create(err, svn_io_file_close(fd, scratch_pool));
+ err = svn_error_compose_create(err, svn_io_remove_file2(fname, TRUE,
+ scratch_pool));
+ SVN_ERR(err);
*perms = finfo.protection;
default_perms = finfo.protection;
}
@@ -1443,14 +1545,9 @@ io_set_file_perms(const char *path,
{
if (enable_write) /* Make read-write. */
{
- apr_file_t *fd;
-
- /* Get the perms for the original file so we'll have any other bits
- * that were already set (like the execute bits, for example). */
- SVN_ERR(svn_io_file_open(&fd, path, APR_READ | APR_BINARY,
- APR_OS_DEFAULT, pool));
- SVN_ERR(merge_default_file_perms(fd, &perms_to_set, pool));
- SVN_ERR(svn_io_file_close(fd, pool));
+ /* Tweak the owner bits only. The group/other bits aren't safe to
+ * touch because we may end up setting them in undesired ways. */
+ perms_to_set |= (APR_UREAD|APR_UWRITE);
}
else
{
@@ -1555,7 +1652,7 @@ static apr_status_t io_utf8_to_unicode_path(apr_wchar_t* retstr, apr_size_t retl
* Allocate the maximum string length based on leading 4
* characters of \\?\ (allowing nearly unlimited path lengths)
* plus the trailing null, then transform /'s into \\'s since
- * the \\?\ form doesn't allow '/' path seperators.
+ * the \\?\ form doesn't allow '/' path separators.
*
* Note that the \\?\ form only works for local drive paths, and
* \\?\UNC\ is needed UNC paths.
@@ -1565,7 +1662,7 @@ static apr_status_t io_utf8_to_unicode_path(apr_wchar_t* retstr, apr_size_t retl
apr_status_t rv;
/* This is correct, we don't twist the filename if it will
- * definately be shorter than 248 characters. It merits some
+ * definitely be shorter than 248 characters. It merits some
* performance testing to see if this has any effect, but there
* seem to be applications that get confused by the resulting
* Unicode \\?\ style file names, especially if they use argv[0]
@@ -1866,29 +1963,25 @@ file_clear_locks(void *arg)
#endif
svn_error_t *
-svn_io_file_lock2(const char *lock_file,
- svn_boolean_t exclusive,
- svn_boolean_t nonblocking,
- apr_pool_t *pool)
+svn_io_lock_open_file(apr_file_t *lockfile_handle,
+ svn_boolean_t exclusive,
+ svn_boolean_t nonblocking,
+ apr_pool_t *pool)
{
int locktype = APR_FLOCK_SHARED;
- apr_file_t *lockfile_handle;
- apr_int32_t flags;
apr_status_t apr_err;
+ const char *fname;
if (exclusive)
locktype = APR_FLOCK_EXCLUSIVE;
-
- flags = APR_READ;
- if (locktype == APR_FLOCK_EXCLUSIVE)
- flags |= APR_WRITE;
-
if (nonblocking)
locktype |= APR_FLOCK_NONBLOCK;
- SVN_ERR(svn_io_file_open(&lockfile_handle, lock_file, flags,
- APR_OS_DEFAULT,
- pool));
+ /* We need this only in case of an error but this is cheap to get -
+ * so we do it here for clarity. */
+ apr_err = apr_file_name_get(&fname, lockfile_handle);
+ if (apr_err)
+ return svn_error_wrap_apr(apr_err, _("Can't get file name"));
/* Get lock on the filehandle. */
apr_err = apr_file_lock(lockfile_handle, locktype);
@@ -1915,11 +2008,11 @@ svn_io_file_lock2(const char *lock_file,
case APR_FLOCK_SHARED:
return svn_error_wrap_apr(apr_err,
_("Can't get shared lock on file '%s'"),
- svn_dirent_local_style(lock_file, pool));
+ try_utf8_from_internal_style(fname, pool));
case APR_FLOCK_EXCLUSIVE:
return svn_error_wrap_apr(apr_err,
_("Can't get exclusive lock on file '%s'"),
- svn_dirent_local_style(lock_file, pool));
+ try_utf8_from_internal_style(fname, pool));
default:
SVN_ERR_MALFUNCTION();
}
@@ -1936,15 +2029,70 @@ svn_io_file_lock2(const char *lock_file,
return SVN_NO_ERROR;
}
+svn_error_t *
+svn_io_unlock_open_file(apr_file_t *lockfile_handle,
+ apr_pool_t *pool)
+{
+ const char *fname;
+ apr_status_t apr_err;
+
+ /* We need this only in case of an error but this is cheap to get -
+ * so we do it here for clarity. */
+ apr_err = apr_file_name_get(&fname, lockfile_handle);
+ if (apr_err)
+ return svn_error_wrap_apr(apr_err, _("Can't get file name"));
+
+ /* The actual unlock attempt. */
+ apr_err = apr_file_unlock(lockfile_handle);
+ if (apr_err)
+ return svn_error_wrap_apr(apr_err, _("Can't unlock file '%s'"),
+ try_utf8_from_internal_style(fname, pool));
+
+/* On Windows and OS/2 file locks are automatically released when
+ the file handle closes */
+#if !defined(WIN32) && !defined(__OS2__)
+ apr_pool_cleanup_kill(pool, lockfile_handle, file_clear_locks);
+#endif
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_io_file_lock2(const char *lock_file,
+ svn_boolean_t exclusive,
+ svn_boolean_t nonblocking,
+ apr_pool_t *pool)
+{
+ int locktype = APR_FLOCK_SHARED;
+ apr_file_t *lockfile_handle;
+ apr_int32_t flags;
+
+ if (exclusive)
+ locktype = APR_FLOCK_EXCLUSIVE;
+
+ flags = APR_READ;
+ if (locktype == APR_FLOCK_EXCLUSIVE)
+ flags |= APR_WRITE;
+
+ /* locktype is never read after this block, so we don't need to bother
+ setting it. If that were to ever change, uncomment the following
+ block.
+ if (nonblocking)
+ locktype |= APR_FLOCK_NONBLOCK;
+ */
+
+ SVN_ERR(svn_io_file_open(&lockfile_handle, lock_file, flags,
+ APR_OS_DEFAULT,
+ pool));
+
+ /* Get lock on the filehandle. */
+ return svn_io_lock_open_file(lockfile_handle, exclusive, nonblocking, pool);
+}
+
/* Data consistency/coherency operations. */
-static APR_INLINE svn_error_t *
-do_io_file_wrapper_cleanup(apr_file_t *file, apr_status_t status,
- const char *msg, const char *msg_no_name,
- apr_pool_t *pool);
-
svn_error_t *svn_io_file_flush_to_disk(apr_file_t *file,
apr_pool_t *pool)
{
@@ -2034,7 +2182,7 @@ stringbuf_from_aprfile(svn_stringbuf_t **result,
{
apr_finfo_t finfo;
if (! (status = apr_stat(&finfo, filename, APR_FINFO_MIN, pool)))
- res_initial_len = finfo.size;
+ res_initial_len = (apr_size_t)finfo.size;
}
}
@@ -2118,20 +2266,29 @@ svn_io_remove_file2(const char *path,
apr_status_t apr_err;
const char *path_apr;
-#if defined(WIN32) || defined(__OS2__)
- /* Set the file writable but only on Windows & OS/2, because Windows and OS/2
- will not allow us to remove files that are read-only. */
- SVN_ERR(svn_io_set_file_read_write(path, TRUE, scratch_pool));
-#endif /* WIN32 */
-
SVN_ERR(cstring_from_utf8(&path_apr, path, scratch_pool));
apr_err = apr_file_remove(path_apr, scratch_pool);
if (!apr_err
- || (ignore_enoent && APR_STATUS_IS_ENOENT(apr_err)))
+ || (ignore_enoent
+ && (APR_STATUS_IS_ENOENT(apr_err)
+ || SVN__APR_STATUS_IS_ENOTDIR(apr_err))))
return SVN_NO_ERROR;
#ifdef WIN32
+ /* If the target is read only NTFS reports EACCESS and FAT/FAT32
+ reports EEXIST */
+ if (APR_STATUS_IS_EACCES(apr_err) || APR_STATUS_IS_EEXIST(apr_err))
+ {
+ /* Set the destination file writable because Windows will not
+ allow us to delete when path is read-only */
+ SVN_ERR(svn_io_set_file_read_write(path, ignore_enoent, scratch_pool));
+ apr_err = apr_file_remove(path_apr, scratch_pool);
+
+ if (!apr_err)
+ return SVN_NO_ERROR;
+ }
+
{
apr_status_t os_err = APR_TO_OS_ERROR(apr_err);
/* Check to make sure we aren't trying to delete a directory */
@@ -2166,7 +2323,7 @@ svn_io_remove_dir(const char *path, apr_pool_t *pool)
}
/*
- Mac OS X has a bug where if you're readding the contents of a
+ Mac OS X has a bug where if you're reading the contents of a
directory via readdir in a loop, and you remove one of the entries in
the directory and the directory has 338 or more files in it you will
skip over some of the entries in the directory. Needless to say,
@@ -2327,7 +2484,7 @@ svn_io_get_dirents3(apr_hash_t **dirents,
dirent->mtime = this_entry.mtime;
}
- apr_hash_set(*dirents, name, APR_HASH_KEY_STRING, dirent);
+ svn_hash_sets(*dirents, name, dirent);
}
}
@@ -2344,20 +2501,25 @@ svn_io_get_dirents3(apr_hash_t **dirents,
}
svn_error_t *
-svn_io_stat_dirent(const svn_io_dirent2_t **dirent_p,
- const char *path,
- svn_boolean_t ignore_enoent,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+svn_io_stat_dirent2(const svn_io_dirent2_t **dirent_p,
+ const char *path,
+ svn_boolean_t verify_truename,
+ svn_boolean_t ignore_enoent,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
apr_finfo_t finfo;
svn_io_dirent2_t *dirent;
svn_error_t *err;
+ apr_int32_t wanted = APR_FINFO_TYPE | APR_FINFO_LINK
+ | APR_FINFO_SIZE | APR_FINFO_MTIME;
- err = svn_io_stat(&finfo, path,
- APR_FINFO_TYPE | APR_FINFO_LINK
- | APR_FINFO_SIZE | APR_FINFO_MTIME,
- scratch_pool);
+#if defined(WIN32) || defined(__OS2__)
+ if (verify_truename)
+ wanted |= APR_FINFO_NAME;
+#endif
+
+ err = svn_io_stat(&finfo, path, wanted, scratch_pool);
if (err && ignore_enoent &&
(APR_STATUS_IS_ENOENT(err->apr_err)
@@ -2372,6 +2534,78 @@ svn_io_stat_dirent(const svn_io_dirent2_t **dirent_p,
}
SVN_ERR(err);
+#if defined(WIN32) || defined(__OS2__) || defined(DARWIN)
+ if (verify_truename)
+ {
+ const char *requested_name = svn_dirent_basename(path, NULL);
+
+ if (requested_name[0] == '\0')
+ {
+ /* No parent directory. No need to stat/verify */
+ }
+#if defined(WIN32) || defined(__OS2__)
+ else if (finfo.name)
+ {
+ const char *name_on_disk;
+ SVN_ERR(entry_name_to_utf8(&name_on_disk, finfo.name, path,
+ scratch_pool));
+
+ if (strcmp(name_on_disk, requested_name) /* != 0 */)
+ {
+ if (ignore_enoent)
+ {
+ *dirent_p = svn_io_dirent2_create(result_pool);
+ return SVN_NO_ERROR;
+ }
+ else
+ return svn_error_createf(APR_ENOENT, NULL,
+ _("Path '%s' not found, case obstructed by '%s'"),
+ svn_dirent_local_style(path, scratch_pool),
+ name_on_disk);
+ }
+ }
+#elif defined(DARWIN)
+ /* Currently apr doesn't set finfo.name on DARWIN, returning
+ APR_INCOMPLETE.
+ ### Can we optimize this in another way? */
+ else
+ {
+ apr_hash_t *dirents;
+
+ err = svn_io_get_dirents3(&dirents,
+ svn_dirent_dirname(path, scratch_pool),
+ TRUE /* only_check_type */,
+ scratch_pool, scratch_pool);
+
+ if (err && ignore_enoent
+ && (APR_STATUS_IS_ENOENT(err->apr_err)
+ || SVN__APR_STATUS_IS_ENOTDIR(err->apr_err)))
+ {
+ svn_error_clear(err);
+
+ *dirent_p = svn_io_dirent2_create(result_pool);
+ return SVN_NO_ERROR;
+ }
+ else
+ SVN_ERR(err);
+
+ if (! svn_hash_gets(dirents, requested_name))
+ {
+ if (ignore_enoent)
+ {
+ *dirent_p = svn_io_dirent2_create(result_pool);
+ return SVN_NO_ERROR;
+ }
+ else
+ return svn_error_createf(APR_ENOENT, NULL,
+ _("Path '%s' not found"),
+ svn_dirent_local_style(path, scratch_pool));
+ }
+ }
+#endif
+ }
+#endif
+
dirent = svn_io_dirent2_create(result_pool);
map_apr_finfo_to_node_kind(&(dirent->kind), &(dirent->special), &finfo);
@@ -2410,10 +2644,11 @@ handle_child_process_error(apr_pool_t *pool, apr_status_t status,
svn_error_t *
-svn_io_start_cmd2(apr_proc_t *cmd_proc,
+svn_io_start_cmd3(apr_proc_t *cmd_proc,
const char *path,
const char *cmd,
const char *const *args,
+ const char *const *env,
svn_boolean_t inherit,
svn_boolean_t infile_pipe,
apr_file_t *infile,
@@ -2535,8 +2770,8 @@ svn_io_start_cmd2(apr_proc_t *cmd_proc,
/* Start the cmd command. */
- apr_err = apr_proc_create(cmd_proc, cmd_apr, args_native, NULL,
- cmdproc_attr, pool);
+ apr_err = apr_proc_create(cmd_proc, cmd_apr, args_native,
+ inherit ? NULL : env, cmdproc_attr, pool);
if (apr_err)
return svn_error_wrap_apr(apr_err, _("Can't start process '%s'"), cmd);
@@ -2567,10 +2802,23 @@ svn_io_wait_for_cmd(apr_proc_t *cmd_proc,
if (exitwhy)
*exitwhy = exitwhy_val;
+ else if (APR_PROC_CHECK_SIGNALED(exitwhy_val)
+ && APR_PROC_CHECK_CORE_DUMP(exitwhy_val))
+ return svn_error_createf
+ (SVN_ERR_EXTERNAL_PROGRAM, NULL,
+ _("Process '%s' failed (signal %d, core dumped)"),
+ cmd, exitcode_val);
+ else if (APR_PROC_CHECK_SIGNALED(exitwhy_val))
+ return svn_error_createf
+ (SVN_ERR_EXTERNAL_PROGRAM, NULL,
+ _("Process '%s' failed (signal %d)"),
+ cmd, exitcode_val);
else if (! APR_PROC_CHECK_EXIT(exitwhy_val))
+ /* Don't really know what happened here. */
return svn_error_createf
(SVN_ERR_EXTERNAL_PROGRAM, NULL,
- _("Process '%s' failed (exitwhy %d)"), cmd, exitwhy_val);
+ _("Process '%s' failed (exitwhy %d, exitcode %d)"),
+ cmd, exitwhy_val, exitcode_val);
if (exitcode)
*exitcode = exitcode_val;
@@ -2597,7 +2845,7 @@ svn_io_run_cmd(const char *path,
{
apr_proc_t cmd_proc;
- SVN_ERR(svn_io_start_cmd2(&cmd_proc, path, cmd, args, inherit,
+ SVN_ERR(svn_io_start_cmd3(&cmd_proc, path, cmd, args, NULL, inherit,
FALSE, infile, FALSE, outfile, FALSE, errfile,
pool));
@@ -2767,8 +3015,7 @@ svn_io_run_diff3_3(int *exitcode,
svn_config_t *cfg;
SVN_ERR(svn_config_get_config(&config, pool));
- cfg = config ? apr_hash_get(config, SVN_CONFIG_CATEGORY_CONFIG,
- APR_HASH_KEY_STRING) : NULL;
+ cfg = config ? svn_hash_gets(config, SVN_CONFIG_CATEGORY_CONFIG) : NULL;
SVN_ERR(svn_config_get_bool(cfg, &has_arg, SVN_CONFIG_SECTION_HELPERS,
SVN_CONFIG_OPTION_DIFF3_HAS_PROGRAM_ARG,
TRUE));
@@ -2884,7 +3131,7 @@ svn_io_parse_mimetypes_file(apr_hash_t **type_map,
* we know svn_cstring_split() allocated it in 'pool' for us. */
char *ext = APR_ARRAY_IDX(tokens, i, char *);
fileext_tolower(ext);
- apr_hash_set(types, ext, APR_HASH_KEY_STRING, type);
+ svn_hash_sets(types, ext, type);
}
}
if (eof)
@@ -2931,11 +3178,11 @@ svn_io_detect_mimetype2(const char **mimetype,
if (mimetype_map)
{
const char *type_from_map;
- char *path_ext;
+ char *path_ext; /* Can point to physical const memory but only when
+ svn_path_splitext sets it to "". */
svn_path_splitext(NULL, (const char **)&path_ext, file, pool);
fileext_tolower(path_ext);
- if ((type_from_map = apr_hash_get(mimetype_map, path_ext,
- APR_HASH_KEY_STRING)))
+ if ((type_from_map = svn_hash_gets(mimetype_map, path_ext)))
{
*mimetype = type_from_map;
return SVN_NO_ERROR;
@@ -3066,12 +3313,12 @@ do_io_file_wrapper_cleanup(apr_file_t *file, apr_status_t status,
/* ### Issue #3014: Return a specific error for broken pipes,
* ### with a single element in the error chain. */
- if (APR_STATUS_IS_EPIPE(status))
+ if (SVN__APR_STATUS_IS_EPIPE(status))
return svn_error_create(SVN_ERR_IO_PIPE_WRITE_ERROR, NULL, NULL);
if (name)
return svn_error_wrap_apr(status, _(msg),
- svn_dirent_local_style(name, pool));
+ try_utf8_from_internal_style(name, pool));
else
return svn_error_wrap_apr(status, "%s", _(msg_no_name));
}
@@ -3080,33 +3327,30 @@ do_io_file_wrapper_cleanup(apr_file_t *file, apr_status_t status,
svn_error_t *
svn_io_file_close(apr_file_t *file, apr_pool_t *pool)
{
- return do_io_file_wrapper_cleanup
- (file, apr_file_close(file),
- N_("Can't close file '%s'"),
- N_("Can't close stream"),
- pool);
+ return do_io_file_wrapper_cleanup(file, apr_file_close(file),
+ N_("Can't close file '%s'"),
+ N_("Can't close stream"),
+ pool);
}
svn_error_t *
svn_io_file_getc(char *ch, apr_file_t *file, apr_pool_t *pool)
{
- return do_io_file_wrapper_cleanup
- (file, apr_file_getc(ch, file),
- N_("Can't read file '%s'"),
- N_("Can't read stream"),
- pool);
+ return do_io_file_wrapper_cleanup(file, apr_file_getc(ch, file),
+ N_("Can't read file '%s'"),
+ N_("Can't read stream"),
+ pool);
}
svn_error_t *
svn_io_file_putc(char ch, apr_file_t *file, apr_pool_t *pool)
{
- return do_io_file_wrapper_cleanup
- (file, apr_file_putc(ch, file),
- N_("Can't write file '%s'"),
- N_("Can't write stream"),
- pool);
+ return do_io_file_wrapper_cleanup(file, apr_file_putc(ch, file),
+ N_("Can't write file '%s'"),
+ N_("Can't write stream"),
+ pool);
}
@@ -3117,11 +3361,11 @@ svn_io_file_info_get(apr_finfo_t *finfo, apr_int32_t wanted,
/* Quoting APR: On NT this request is incredibly expensive, but accurate. */
wanted &= ~SVN__APR_FINFO_MASK_OUT;
- return do_io_file_wrapper_cleanup
- (file, apr_file_info_get(finfo, wanted, file),
- N_("Can't get attribute information from file '%s'"),
- N_("Can't get attribute information from stream"),
- pool);
+ return do_io_file_wrapper_cleanup(
+ file, apr_file_info_get(finfo, wanted, file),
+ N_("Can't get attribute information from file '%s'"),
+ N_("Can't get attribute information from stream"),
+ pool);
}
@@ -3129,11 +3373,10 @@ svn_error_t *
svn_io_file_read(apr_file_t *file, void *buf,
apr_size_t *nbytes, apr_pool_t *pool)
{
- return do_io_file_wrapper_cleanup
- (file, apr_file_read(file, buf, nbytes),
- N_("Can't read file '%s'"),
- N_("Can't read stream"),
- pool);
+ return do_io_file_wrapper_cleanup(file, apr_file_read(file, buf, nbytes),
+ N_("Can't read file '%s'"),
+ N_("Can't read stream"),
+ pool);
}
@@ -3155,11 +3398,10 @@ svn_io_file_read_full2(apr_file_t *file, void *buf,
*hit_eof = FALSE;
}
- return do_io_file_wrapper_cleanup
- (file, status,
- N_("Can't read file '%s'"),
- N_("Can't read stream"),
- pool);
+ return do_io_file_wrapper_cleanup(file, status,
+ N_("Can't read file '%s'"),
+ N_("Can't read stream"),
+ pool);
}
@@ -3167,11 +3409,11 @@ svn_error_t *
svn_io_file_seek(apr_file_t *file, apr_seek_where_t where,
apr_off_t *offset, apr_pool_t *pool)
{
- return do_io_file_wrapper_cleanup
- (file, apr_file_seek(file, where, offset),
- N_("Can't set position pointer in file '%s'"),
- N_("Can't set position pointer in stream"),
- pool);
+ return do_io_file_wrapper_cleanup(
+ file, apr_file_seek(file, where, offset),
+ N_("Can't set position pointer in file '%s'"),
+ N_("Can't set position pointer in stream"),
+ pool);
}
@@ -3250,17 +3492,8 @@ svn_io_write_unique(const char **tmp_path,
err = svn_io_file_write_full(new_file, buf, nbytes, NULL, pool);
- /* ### BH: Windows doesn't have the race condition between the write and the
- ### rename that other operating systems might have. So allow windows
- ### to decide when it wants to perform the disk synchronization using
- ### the normal file locking and journaling filesystem rules.
-
- ### Note that this function doesn't handle the rename, so we aren't even
- ### sure that we really have to sync. */
-#ifndef WIN32
- if (!err && nbytes > 0)
+ if (!err)
err = svn_io_file_flush_to_disk(new_file, pool);
-#endif
return svn_error_trace(
svn_error_compose_create(err,
@@ -3274,17 +3507,15 @@ svn_io_file_trunc(apr_file_t *file, apr_off_t offset, apr_pool_t *pool)
/* This is a work-around. APR would flush the write buffer
_after_ truncating the file causing now invalid buffered
data to be written behind OFFSET. */
- SVN_ERR(do_io_file_wrapper_cleanup
- (file, apr_file_flush(file),
- N_("Can't flush file '%s'"),
- N_("Can't flush stream"),
- pool));
+ SVN_ERR(do_io_file_wrapper_cleanup(file, apr_file_flush(file),
+ N_("Can't flush file '%s'"),
+ N_("Can't flush stream"),
+ pool));
- return do_io_file_wrapper_cleanup
- (file, apr_file_trunc(file, offset),
- N_("Can't truncate file '%s'"),
- N_("Can't truncate stream"),
- pool);
+ return do_io_file_wrapper_cleanup(file, apr_file_trunc(file, offset),
+ N_("Can't truncate file '%s'"),
+ N_("Can't truncate stream"),
+ pool);
}
@@ -3292,30 +3523,63 @@ svn_error_t *
svn_io_read_length_line(apr_file_t *file, char *buf, apr_size_t *limit,
apr_pool_t *pool)
{
+ /* variables */
+ apr_size_t total_read = 0;
+ svn_boolean_t eof = FALSE;
const char *name;
svn_error_t *err;
- apr_size_t i;
- char c;
+ apr_size_t buf_size = *limit;
- for (i = 0; i < *limit; i++)
+ while (buf_size > 0)
{
- SVN_ERR(svn_io_file_getc(&c, file, pool));
- /* Note: this error could be APR_EOF, which
- is totally fine. The caller should be aware of
- this. */
+ /* read a fair chunk of data at once. But don't get too ambitious
+ * as that would result in too much waste. Also make sure we can
+ * put a NUL after the last byte read.
+ */
+ apr_size_t to_read = buf_size < 129 ? buf_size - 1 : 128;
+ apr_size_t bytes_read = 0;
+ char *eol;
+
+ if (to_read == 0)
+ break;
- if (c == '\n')
+ /* read data block (or just a part of it) */
+ SVN_ERR(svn_io_file_read_full2(file, buf, to_read,
+ &bytes_read, &eof, pool));
+
+ /* look or a newline char */
+ buf[bytes_read] = 0;
+ eol = strchr(buf, '\n');
+ if (eol)
{
- buf[i] = '\0';
- *limit = i;
+ apr_off_t offset = (eol + 1 - buf) - (apr_off_t)bytes_read;
+
+ *eol = 0;
+ *limit = total_read + (eol - buf);
+
+ /* correct the file pointer:
+ * appear as though we just had read the newline char
+ */
+ SVN_ERR(svn_io_file_seek(file, APR_CUR, &offset, pool));
+
return SVN_NO_ERROR;
}
- else
+ else if (eof)
{
- buf[i] = c;
+ /* no EOL found but we hit the end of the file.
+ * Generate a nice EOF error object and return it.
+ */
+ char dummy;
+ SVN_ERR(svn_io_file_getc(&dummy, file, pool));
}
+
+ /* next data chunk */
+ buf_size -= bytes_read;
+ buf += bytes_read;
+ total_read += bytes_read;
}
+ /* buffer limit has been exceeded without finding the EOL */
err = svn_io_file_name_get(&name, file, pool);
if (err)
name = NULL;
@@ -3554,11 +3818,6 @@ svn_io_dir_open(apr_dir_t **new_dir, const char *dirname, apr_pool_t *pool)
return SVN_NO_ERROR;
}
-/* Forward declaration */
-static apr_status_t
-dir_is_empty(const char *dir, apr_pool_t *pool);
-
-
svn_error_t *
svn_io_dir_remove_nonrecursive(const char *dirname, apr_pool_t *pool)
{
@@ -3926,8 +4185,8 @@ contents_identical_p(svn_boolean_t *identical_p,
apr_size_t bytes_read1, bytes_read2;
char *buf1 = apr_palloc(pool, SVN__STREAM_CHUNK_SIZE);
char *buf2 = apr_palloc(pool, SVN__STREAM_CHUNK_SIZE);
- apr_file_t *file1_h = NULL;
- apr_file_t *file2_h = NULL;
+ apr_file_t *file1_h;
+ apr_file_t *file2_h;
svn_boolean_t eof1 = FALSE;
svn_boolean_t eof2 = FALSE;
@@ -3978,6 +4237,138 @@ contents_identical_p(svn_boolean_t *identical_p,
+/* Do a byte-for-byte comparison of FILE1, FILE2 and FILE3. */
+static svn_error_t *
+contents_three_identical_p(svn_boolean_t *identical_p12,
+ svn_boolean_t *identical_p23,
+ svn_boolean_t *identical_p13,
+ const char *file1,
+ const char *file2,
+ const char *file3,
+ apr_pool_t *scratch_pool)
+{
+ svn_error_t *err;
+ apr_size_t bytes_read1, bytes_read2, bytes_read3;
+ char *buf1 = apr_palloc(scratch_pool, SVN__STREAM_CHUNK_SIZE);
+ char *buf2 = apr_palloc(scratch_pool, SVN__STREAM_CHUNK_SIZE);
+ char *buf3 = apr_palloc(scratch_pool, SVN__STREAM_CHUNK_SIZE);
+ apr_file_t *file1_h;
+ apr_file_t *file2_h;
+ apr_file_t *file3_h;
+ svn_boolean_t eof1 = FALSE;
+ svn_boolean_t eof2 = FALSE;
+ svn_boolean_t eof3 = FALSE;
+ svn_boolean_t read_1, read_2, read_3;
+
+ SVN_ERR(svn_io_file_open(&file1_h, file1, APR_READ, APR_OS_DEFAULT,
+ scratch_pool));
+
+ err = svn_io_file_open(&file2_h, file2, APR_READ, APR_OS_DEFAULT,
+ scratch_pool);
+
+ if (err)
+ return svn_error_trace(
+ svn_error_compose_create(err,
+ svn_io_file_close(file1_h, scratch_pool)));
+
+ err = svn_io_file_open(&file3_h, file3, APR_READ, APR_OS_DEFAULT,
+ scratch_pool);
+
+ if (err)
+ return svn_error_trace(
+ svn_error_compose_create(
+ err,
+ svn_error_compose_create(svn_io_file_close(file1_h,
+ scratch_pool),
+ svn_io_file_close(file2_h,
+ scratch_pool))));
+
+ /* assume TRUE, until disproved below */
+ *identical_p12 = *identical_p23 = *identical_p13 = TRUE;
+ /* We need to read as long as no error occurs, and as long as one of the
+ * flags could still change due to a read operation */
+ while (!err
+ && ((*identical_p12 && !eof1 && !eof2)
+ || (*identical_p23 && !eof2 && !eof3)
+ || (*identical_p13 && !eof1 && !eof3)))
+ {
+ read_1 = read_2 = read_3 = FALSE;
+
+ /* As long as a file is not at the end yet, and it is still
+ * potentially identical to another file, we read the next chunk.*/
+ if (!eof1 && (*identical_p12 || *identical_p13))
+ {
+ err = svn_io_file_read_full2(file1_h, buf1,
+ SVN__STREAM_CHUNK_SIZE, &bytes_read1,
+ &eof1, scratch_pool);
+ if (err)
+ break;
+ read_1 = TRUE;
+ }
+
+ if (!eof2 && (*identical_p12 || *identical_p23))
+ {
+ err = svn_io_file_read_full2(file2_h, buf2,
+ SVN__STREAM_CHUNK_SIZE, &bytes_read2,
+ &eof2, scratch_pool);
+ if (err)
+ break;
+ read_2 = TRUE;
+ }
+
+ if (!eof3 && (*identical_p13 || *identical_p23))
+ {
+ err = svn_io_file_read_full2(file3_h, buf3,
+ SVN__STREAM_CHUNK_SIZE, &bytes_read3,
+ &eof3, scratch_pool);
+ if (err)
+ break;
+ read_3 = TRUE;
+ }
+
+ /* If the files are still marked identical, and at least one of them
+ * is not at the end of file, we check whether they differ, and set
+ * their flag to false then. */
+ if (*identical_p12
+ && (read_1 || read_2)
+ && ((eof1 != eof2)
+ || (bytes_read1 != bytes_read2)
+ || memcmp(buf1, buf2, bytes_read1)))
+ {
+ *identical_p12 = FALSE;
+ }
+
+ if (*identical_p23
+ && (read_2 || read_3)
+ && ((eof2 != eof3)
+ || (bytes_read2 != bytes_read3)
+ || memcmp(buf2, buf3, bytes_read2)))
+ {
+ *identical_p23 = FALSE;
+ }
+
+ if (*identical_p13
+ && (read_1 || read_3)
+ && ((eof1 != eof3)
+ || (bytes_read1 != bytes_read3)
+ || memcmp(buf1, buf3, bytes_read3)))
+ {
+ *identical_p13 = FALSE;
+ }
+ }
+
+ return svn_error_trace(
+ svn_error_compose_create(
+ err,
+ svn_error_compose_create(
+ svn_io_file_close(file1_h, scratch_pool),
+ svn_error_compose_create(
+ svn_io_file_close(file2_h, scratch_pool),
+ svn_io_file_close(file3_h, scratch_pool)))));
+}
+
+
+
svn_error_t *
svn_io_files_contents_same_p(svn_boolean_t *same,
const char *file1,
@@ -3990,16 +4381,65 @@ svn_io_files_contents_same_p(svn_boolean_t *same,
if (q)
{
- *same = 0;
+ *same = FALSE;
return SVN_NO_ERROR;
}
SVN_ERR(contents_identical_p(&q, file1, file2, pool));
if (q)
- *same = 1;
+ *same = TRUE;
else
- *same = 0;
+ *same = FALSE;
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_io_files_contents_three_same_p(svn_boolean_t *same12,
+ svn_boolean_t *same23,
+ svn_boolean_t *same13,
+ const char *file1,
+ const char *file2,
+ const char *file3,
+ apr_pool_t *scratch_pool)
+{
+ svn_boolean_t diff_size12, diff_size23, diff_size13;
+
+ SVN_ERR(svn_io_filesizes_three_different_p(&diff_size12,
+ &diff_size23,
+ &diff_size13,
+ file1,
+ file2,
+ file3,
+ scratch_pool));
+
+ if (diff_size12 && diff_size23 && diff_size13)
+ {
+ *same12 = *same23 = *same13 = FALSE;
+ }
+ else if (diff_size12 && diff_size23)
+ {
+ *same12 = *same23 = FALSE;
+ SVN_ERR(contents_identical_p(same13, file1, file3, scratch_pool));
+ }
+ else if (diff_size23 && diff_size13)
+ {
+ *same23 = *same13 = FALSE;
+ SVN_ERR(contents_identical_p(same12, file1, file2, scratch_pool));
+ }
+ else if (diff_size12 && diff_size13)
+ {
+ *same12 = *same13 = FALSE;
+ SVN_ERR(contents_identical_p(same23, file2, file3, scratch_pool));
+ }
+ else
+ {
+ SVN_ERR_ASSERT(!diff_size12 && !diff_size23 && !diff_size13);
+ SVN_ERR(contents_three_identical_p(same12, same23, same13,
+ file1, file2, file3,
+ scratch_pool));
+ }
return SVN_NO_ERROR;
}
@@ -4235,8 +4675,25 @@ svn_io_open_unique_file3(apr_file_t **file,
* case, but only if the umask allows it. */
if (!using_system_temp_dir)
{
+ svn_error_t *err;
+
SVN_ERR(merge_default_file_perms(tempfile, &perms, scratch_pool));
- SVN_ERR(file_perms_set2(tempfile, perms));
+ err = file_perms_set2(tempfile, perms, scratch_pool);
+ if (err)
+ {
+ if (APR_STATUS_IS_INCOMPLETE(err->apr_err) ||
+ APR_STATUS_IS_ENOTIMPL(err->apr_err))
+ svn_error_clear(err);
+ else
+ {
+ const char *message;
+ message = apr_psprintf(scratch_pool,
+ _("Can't set permissions on '%s'"),
+ svn_dirent_local_style(tempname,
+ scratch_pool));
+ return svn_error_quick_wrap(err, message);
+ }
+ }
}
#endif
@@ -4253,3 +4710,86 @@ svn_io_open_unique_file3(apr_file_t **file,
return SVN_NO_ERROR;
}
+
+svn_error_t *
+svn_io_file_readline(apr_file_t *file,
+ svn_stringbuf_t **stringbuf,
+ const char **eol,
+ svn_boolean_t *eof,
+ apr_size_t max_len,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_stringbuf_t *str;
+ const char *eol_str;
+ apr_size_t numbytes;
+ char c;
+ apr_size_t len;
+ svn_boolean_t found_eof;
+
+ str = svn_stringbuf_create_ensure(80, result_pool);
+
+ /* Read bytes into STR up to and including, but not storing,
+ * the next EOL sequence. */
+ eol_str = NULL;
+ numbytes = 1;
+ len = 0;
+ found_eof = FALSE;
+ while (!found_eof)
+ {
+ if (len < max_len)
+ SVN_ERR(svn_io_file_read_full2(file, &c, sizeof(c), &numbytes,
+ &found_eof, scratch_pool));
+ len++;
+ if (numbytes != 1 || len > max_len)
+ {
+ found_eof = TRUE;
+ break;
+ }
+
+ if (c == '\n')
+ {
+ eol_str = "\n";
+ }
+ else if (c == '\r')
+ {
+ eol_str = "\r";
+
+ if (!found_eof && len < max_len)
+ {
+ apr_off_t pos;
+
+ /* Check for "\r\n" by peeking at the next byte. */
+ pos = 0;
+ SVN_ERR(svn_io_file_seek(file, APR_CUR, &pos, scratch_pool));
+ SVN_ERR(svn_io_file_read_full2(file, &c, sizeof(c), &numbytes,
+ &found_eof, scratch_pool));
+ if (numbytes == 1 && c == '\n')
+ {
+ eol_str = "\r\n";
+ len++;
+ }
+ else
+ {
+ /* Pretend we never peeked. */
+ SVN_ERR(svn_io_file_seek(file, APR_SET, &pos, scratch_pool));
+ found_eof = FALSE;
+ numbytes = 1;
+ }
+ }
+ }
+ else
+ svn_stringbuf_appendbyte(str, c);
+
+ if (eol_str)
+ break;
+ }
+
+ if (eol)
+ *eol = eol_str;
+ if (eof)
+ *eof = found_eof;
+ *stringbuf = str;
+
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/libsvn_subr/iter.c b/subversion/libsvn_subr/iter.c
index a4f0228..45ec489 100644
--- a/subversion/libsvn_subr/iter.c
+++ b/subversion/libsvn_subr/iter.c
@@ -176,6 +176,8 @@ svn_iter_apr_array(svn_boolean_t *completed,
return err;
}
+/* Note: Although this is a "__" function, it is in the public ABI, so
+ * we can never remove it or change its signature. */
svn_error_t *
svn_iter__break(void)
{
diff --git a/subversion/libsvn_subr/lock.c b/subversion/libsvn_subr/lock.c
index d15492b..71dd8c7 100644
--- a/subversion/libsvn_subr/lock.c
+++ b/subversion/libsvn_subr/lock.c
@@ -54,8 +54,7 @@ svn_lock_dup(const svn_lock_t *lock, apr_pool_t *pool)
new_l->path = apr_pstrdup(pool, new_l->path);
new_l->token = apr_pstrdup(pool, new_l->token);
new_l->owner = apr_pstrdup(pool, new_l->owner);
- if (new_l->comment)
- new_l->comment = apr_pstrdup(pool, new_l->comment);
+ new_l->comment = apr_pstrdup(pool, new_l->comment);
return new_l;
}
diff --git a/subversion/libsvn_subr/log.c b/subversion/libsvn_subr/log.c
index 1120c38..9e0b22a 100644
--- a/subversion/libsvn_subr/log.c
+++ b/subversion/libsvn_subr/log.c
@@ -121,7 +121,7 @@ svn_log__get_mergeinfo(const apr_array_header_t *paths,
{
int i;
apr_pool_t *iterpool = svn_pool_create(pool);
- svn_stringbuf_t *space_separated_paths = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *space_separated_paths = svn_stringbuf_create_empty(pool);
for (i = 0; i < paths->nelts; i++)
{
@@ -210,8 +210,8 @@ svn_log__log(const apr_array_header_t *paths,
{
int i;
apr_pool_t *iterpool = svn_pool_create(pool);
- svn_stringbuf_t *space_separated_paths = svn_stringbuf_create("", pool);
- svn_stringbuf_t *options = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *space_separated_paths = svn_stringbuf_create_empty(pool);
+ svn_stringbuf_t *options = svn_stringbuf_create_empty(pool);
for (i = 0; i < paths->nelts; i++)
{
@@ -264,7 +264,7 @@ svn_log__get_locations(const char *path, svn_revnum_t peg_revision,
{
const svn_revnum_t *revision_ptr, *revision_ptr_start, *revision_ptr_end;
apr_pool_t *iterpool = svn_pool_create(pool);
- svn_stringbuf_t *space_separated_revnums = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *space_separated_revnums = svn_stringbuf_create_empty(pool);
revision_ptr_start = (const svn_revnum_t *)location_revisions->elts;
revision_ptr = revision_ptr_start;
@@ -311,7 +311,7 @@ svn_log__lock(const apr_array_header_t *paths,
{
int i;
apr_pool_t *iterpool = svn_pool_create(pool);
- svn_stringbuf_t *space_separated_paths = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *space_separated_paths = svn_stringbuf_create_empty(pool);
for (i = 0; i < paths->nelts; i++)
{
@@ -334,7 +334,7 @@ svn_log__unlock(const apr_array_header_t *paths,
{
int i;
apr_pool_t *iterpool = svn_pool_create(pool);
- svn_stringbuf_t *space_separated_paths = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *space_separated_paths = svn_stringbuf_create_empty(pool);
for (i = 0; i < paths->nelts; i++)
{
@@ -380,3 +380,17 @@ svn_log__replay(const char *path, svn_revnum_t rev, apr_pool_t *pool)
log_path = "/";
return apr_psprintf(pool, "replay %s r%ld", log_path, rev);
}
+
+const char *
+svn_log__get_inherited_props(const char *path,
+ svn_revnum_t rev,
+ apr_pool_t *pool)
+{
+ const char *log_path;
+
+ if (path && path[0] != '\0')
+ log_path = svn_path_uri_encode(path, pool);
+ else
+ log_path = "/";
+ return apr_psprintf(pool, "get-inherited-props %s r%ld", log_path, rev);
+}
diff --git a/subversion/libsvn_subr/macos_keychain.c b/subversion/libsvn_subr/macos_keychain.c
index e99261a..f15324e 100644
--- a/subversion/libsvn_subr/macos_keychain.c
+++ b/subversion/libsvn_subr/macos_keychain.c
@@ -65,8 +65,9 @@
/* Implementation of svn_auth__password_set_t that stores
the password in the OS X KeyChain. */
-static svn_boolean_t
-keychain_password_set(apr_hash_t *creds,
+static svn_error_t *
+keychain_password_set(svn_boolean_t *done,
+ apr_hash_t *creds,
const char *realmstring,
const char *username,
const char *password,
@@ -106,13 +107,16 @@ keychain_password_set(apr_hash_t *creds,
if (non_interactive)
SecKeychainSetUserInteractionAllowed(TRUE);
- return status == 0;
+ *done = (status == 0);
+
+ return SVN_NO_ERROR;
}
/* Implementation of svn_auth__password_get_t that retrieves
the password from the OS X KeyChain. */
-static svn_boolean_t
-keychain_password_get(const char **password,
+static svn_error_t *
+keychain_password_get(svn_boolean_t *done,
+ const char **password,
apr_hash_t *creds,
const char *realmstring,
const char *username,
@@ -124,6 +128,8 @@ keychain_password_get(const char **password,
UInt32 length;
void *data;
+ *done = FALSE;
+
if (non_interactive)
SecKeychainSetUserInteractionAllowed(FALSE);
@@ -137,11 +143,12 @@ keychain_password_get(const char **password,
SecKeychainSetUserInteractionAllowed(TRUE);
if (status != 0)
- return FALSE;
+ return SVN_NO_ERROR;
*password = apr_pstrmemdup(pool, data, length);
SecKeychainItemFreeContent(NULL, data);
- return TRUE;
+ *done = TRUE;
+ return SVN_NO_ERROR;
}
/* Get cached encrypted credentials from the simple provider's cache. */
@@ -153,14 +160,14 @@ keychain_simple_first_creds(void **credentials,
const char *realmstring,
apr_pool_t *pool)
{
- return svn_auth__simple_first_creds_helper(credentials,
- iter_baton,
- provider_baton,
- parameters,
- realmstring,
- keychain_password_get,
- SVN_AUTH__KEYCHAIN_PASSWORD_TYPE,
- pool);
+ return svn_auth__simple_creds_cache_get(credentials,
+ iter_baton,
+ provider_baton,
+ parameters,
+ realmstring,
+ keychain_password_get,
+ SVN_AUTH__KEYCHAIN_PASSWORD_TYPE,
+ pool);
}
/* Save encrypted credentials to the simple provider's cache. */
@@ -172,13 +179,13 @@ keychain_simple_save_creds(svn_boolean_t *saved,
const char *realmstring,
apr_pool_t *pool)
{
- return svn_auth__simple_save_creds_helper(saved, credentials,
- provider_baton,
- parameters,
- realmstring,
- keychain_password_set,
- SVN_AUTH__KEYCHAIN_PASSWORD_TYPE,
- pool);
+ return svn_auth__simple_creds_cache_set(saved, credentials,
+ provider_baton,
+ parameters,
+ realmstring,
+ keychain_password_set,
+ SVN_AUTH__KEYCHAIN_PASSWORD_TYPE,
+ pool);
}
static const svn_auth_provider_t keychain_simple_provider = {
@@ -198,13 +205,12 @@ keychain_ssl_client_cert_pw_first_creds(void **credentials,
const char *realmstring,
apr_pool_t *pool)
{
- return svn_auth__ssl_client_cert_pw_file_first_creds_helper
- (credentials,
- iter_baton, provider_baton,
- parameters, realmstring,
- keychain_password_get,
- SVN_AUTH__KEYCHAIN_PASSWORD_TYPE,
- pool);
+ return svn_auth__ssl_client_cert_pw_cache_get(credentials,
+ iter_baton, provider_baton,
+ parameters, realmstring,
+ keychain_password_get,
+ SVN_AUTH__KEYCHAIN_PASSWORD_TYPE,
+ pool);
}
/* Save encrypted credentials to the ssl client cert password provider's
@@ -217,13 +223,12 @@ keychain_ssl_client_cert_pw_save_creds(svn_boolean_t *saved,
const char *realmstring,
apr_pool_t *pool)
{
- return svn_auth__ssl_client_cert_pw_file_save_creds_helper
- (saved, credentials,
- provider_baton, parameters,
- realmstring,
- keychain_password_set,
- SVN_AUTH__KEYCHAIN_PASSWORD_TYPE,
- pool);
+ return svn_auth__ssl_client_cert_pw_cache_set(saved, credentials,
+ provider_baton, parameters,
+ realmstring,
+ keychain_password_set,
+ SVN_AUTH__KEYCHAIN_PASSWORD_TYPE,
+ pool);
}
static const svn_auth_provider_t keychain_ssl_client_cert_pw_provider = {
diff --git a/subversion/libsvn_subr/magic.c b/subversion/libsvn_subr/magic.c
index 155e80a..812a263 100644
--- a/subversion/libsvn_subr/magic.c
+++ b/subversion/libsvn_subr/magic.c
@@ -45,8 +45,9 @@
struct svn_magic__cookie_t {
#ifdef SVN_HAVE_LIBMAGIC
magic_t magic;
-#endif
+#else
char dummy;
+#endif
};
#ifdef SVN_HAVE_LIBMAGIC
diff --git a/subversion/libsvn_subr/mergeinfo.c b/subversion/libsvn_subr/mergeinfo.c
index b7cca49..131fe59 100644
--- a/subversion/libsvn_subr/mergeinfo.c
+++ b/subversion/libsvn_subr/mergeinfo.c
@@ -35,8 +35,10 @@
#include "private/svn_fspath.h"
#include "private/svn_mergeinfo_private.h"
#include "private/svn_string_private.h"
+#include "private/svn_subr_private.h"
#include "svn_private_config.h"
#include "svn_hash.h"
+#include "private/svn_dep_compat.h"
/* Attempt to combine two ranges, IN1 and IN2. If they are adjacent or
overlapping, and their inheritability allows them to be combined, put
@@ -238,15 +240,13 @@ get_type_of_intersection(const svn_merge_range_t *r1,
When replacing the last range in RANGELIST, either allocate a new range in
RESULT_POOL or modify the existing range in place. Any new ranges added
- to RANGELIST are allocated in RESULT_POOL. SCRATCH_POOL is used for any
- temporary allocations.
+ to RANGELIST are allocated in RESULT_POOL.
*/
static svn_error_t *
combine_with_lastrange(const svn_merge_range_t *new_range,
- apr_array_header_t *rangelist,
+ svn_rangelist_t *rangelist,
svn_boolean_t consider_inheritance,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+ apr_pool_t *result_pool)
{
svn_merge_range_t *lastrange;
svn_merge_range_t combined_range;
@@ -299,163 +299,163 @@ combine_with_lastrange(const svn_merge_range_t *new_range,
SVN_ERR(get_type_of_intersection(new_range, lastrange,
&intersection_type));
- switch (intersection_type)
+ switch (intersection_type)
+ {
+ case svn__no_intersection:
+ /* NEW_RANGE and *LASTRANGE *really* don't intersect so
+ just push NEW_RANGE only RANGELIST. */
+ APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) =
+ svn_merge_range_dup(new_range, result_pool);
+ sorted = (svn_sort_compare_ranges(&lastrange,
+ &new_range) < 0);
+ break;
+
+ case svn__equal_intersection:
+ /* They range are equal so all we do is force the
+ inheritability of lastrange to true. */
+ lastrange->inheritable = TRUE;
+ sorted = TRUE;
+ break;
+
+ case svn__adjoining_intersection:
+ /* They adjoin but don't overlap so just push NEW_RANGE
+ onto RANGELIST. */
+ APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) =
+ svn_merge_range_dup(new_range, result_pool);
+ sorted = (svn_sort_compare_ranges(&lastrange,
+ &new_range) < 0);
+ break;
+
+ case svn__overlapping_intersection:
+ /* They ranges overlap but neither is a proper subset of
+ the other. We'll end up pusing two new ranges onto
+ RANGELIST, the intersecting part and the part unique to
+ NEW_RANGE.*/
{
- case svn__no_intersection:
- /* NEW_RANGE and *LASTRANGE *really* don't intersect so
- just push NEW_RANGE only RANGELIST. */
- APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) =
- svn_merge_range_dup(new_range, result_pool);
- sorted = (svn_sort_compare_ranges(&lastrange,
- &new_range) < 0);
- break;
-
- case svn__equal_intersection:
- /* They range are equal so all we do is force the
- inheritability of lastrange to true. */
- lastrange->inheritable = TRUE;
- sorted = TRUE;
- break;
-
- case svn__adjoining_intersection:
- /* They adjoin but don't overlap so just push NEW_RANGE
- onto RANGELIST. */
- APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) =
- svn_merge_range_dup(new_range, result_pool);
- sorted = (svn_sort_compare_ranges(&lastrange,
- &new_range) < 0);
- break;
-
- case svn__overlapping_intersection:
- /* They ranges overlap but neither is a proper subset of
- the other. We'll end up pusing two new ranges onto
- RANGELIST, the intersecting part and the part unique to
- NEW_RANGE.*/
+ svn_merge_range_t *r1 = svn_merge_range_dup(lastrange,
+ result_pool);
+ svn_merge_range_t *r2 = svn_merge_range_dup(new_range,
+ result_pool);
+
+ /* Pop off *LASTRANGE to make our manipulations
+ easier. */
+ apr_array_pop(rangelist);
+
+ /* Ensure R1 is the older range. */
+ if (r2->start < r1->start)
{
- svn_merge_range_t *r1 = svn_merge_range_dup(lastrange,
- result_pool);
- svn_merge_range_t *r2 = svn_merge_range_dup(new_range,
- result_pool);
+ /* Swap R1 and R2. */
+ *r2 = *r1;
+ *r1 = *new_range;
+ }
- /* Pop off *LASTRANGE to make our manipulations
- easier. */
- apr_array_pop(rangelist);
+ /* Absorb the intersecting ranges into the
+ inheritable range. */
+ if (r1->inheritable)
+ r2->start = r1->end;
+ else
+ r1->end = r2->start;
+
+ /* Push everything back onto RANGELIST. */
+ APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = r1;
+ sorted = (svn_sort_compare_ranges(&lastrange,
+ &r1) < 0);
+ APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = r2;
+ if (sorted)
+ sorted = (svn_sort_compare_ranges(&r1, &r2) < 0);
+ break;
+ }
- /* Ensure R1 is the older range. */
- if (r2->start < r1->start)
- {
- /* Swap R1 and R2. */
- *r2 = *r1;
- *r1 = *new_range;
- }
+ default: /* svn__proper_subset_intersection */
+ {
+ /* One range is a proper subset of the other. */
+ svn_merge_range_t *r1 = svn_merge_range_dup(lastrange,
+ result_pool);
+ svn_merge_range_t *r2 = svn_merge_range_dup(new_range,
+ result_pool);
+ svn_merge_range_t *r3 = NULL;
+
+ /* Pop off *LASTRANGE to make our manipulations
+ easier. */
+ apr_array_pop(rangelist);
+
+ /* Ensure R1 is the superset. */
+ if (r2->start < r1->start || r2->end > r1->end)
+ {
+ /* Swap R1 and R2. */
+ *r2 = *r1;
+ *r1 = *new_range;
+ }
- /* Absorb the intersecting ranges into the
- inheritable range. */
- if (r1->inheritable)
- r2->start = r1->end;
- else
- r1->end = r2->start;
+ if (r1->inheritable)
+ {
+ /* The simple case: The superset is inheritable, so
+ just combine r1 and r2. */
+ r1->start = MIN(r1->start, r2->start);
+ r1->end = MAX(r1->end, r2->end);
+ r2 = NULL;
+ }
+ else if (r1->start == r2->start)
+ {
+ svn_revnum_t tmp_revnum;
+
+ /* *LASTRANGE and NEW_RANGE share an end point. */
+ tmp_revnum = r1->end;
+ r1->end = r2->end;
+ r2->inheritable = r1->inheritable;
+ r1->inheritable = TRUE;
+ r2->start = r1->end;
+ r2->end = tmp_revnum;
+ }
+ else if (r1->end == r2->end)
+ {
+ /* *LASTRANGE and NEW_RANGE share an end point. */
+ r1->end = r2->start;
+ r2->inheritable = TRUE;
+ }
+ else
+ {
+ /* NEW_RANGE and *LASTRANGE share neither start
+ nor end points. */
+ r3 = apr_pcalloc(result_pool, sizeof(*r3));
+ r3->start = r2->end;
+ r3->end = r1->end;
+ r3->inheritable = r1->inheritable;
+ r2->inheritable = TRUE;
+ r1->end = r2->start;
+ }
- /* Push everything back onto RANGELIST. */
- APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = r1;
- sorted = (svn_sort_compare_ranges(&lastrange,
- &r1) < 0);
+ /* Push everything back onto RANGELIST. */
+ APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = r1;
+ sorted = (svn_sort_compare_ranges(&lastrange, &r1) < 0);
+ if (r2)
+ {
APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = r2;
if (sorted)
sorted = (svn_sort_compare_ranges(&r1, &r2) < 0);
- break;
}
-
- default: /* svn__proper_subset_intersection */
+ if (r3)
{
- /* One range is a proper subset of the other. */
- svn_merge_range_t *r1 = svn_merge_range_dup(lastrange,
- result_pool);
- svn_merge_range_t *r2 = svn_merge_range_dup(new_range,
- result_pool);
- svn_merge_range_t *r3 = NULL;
-
- /* Pop off *LASTRANGE to make our manipulations
- easier. */
- apr_array_pop(rangelist);
-
- /* Ensure R1 is the superset. */
- if (r2->start < r1->start || r2->end > r1->end)
- {
- /* Swap R1 and R2. */
- *r2 = *r1;
- *r1 = *new_range;
- }
-
- if (r1->inheritable)
- {
- /* The simple case: The superset is inheritable, so
- just combine r1 and r2. */
- r1->start = MIN(r1->start, r2->start);
- r1->end = MAX(r1->end, r2->end);
- r2 = NULL;
- }
- else if (r1->start == r2->start)
- {
- svn_revnum_t tmp_revnum;
-
- /* *LASTRANGE and NEW_RANGE share an end point. */
- tmp_revnum = r1->end;
- r1->end = r2->end;
- r2->inheritable = r1->inheritable;
- r1->inheritable = TRUE;
- r2->start = r1->end;
- r2->end = tmp_revnum;
- }
- else if (r1->end == r2->end)
- {
- /* *LASTRANGE and NEW_RANGE share an end point. */
- r1->end = r2->start;
- r2->inheritable = TRUE;
- }
- else
- {
- /* NEW_RANGE and *LASTRANGE share neither start
- nor end points. */
- r3 = apr_pcalloc(result_pool, sizeof(*r3));
- r3->start = r2->end;
- r3->end = r1->end;
- r3->inheritable = r1->inheritable;
- r2->inheritable = TRUE;
- r1->end = r2->start;
- }
-
- /* Push everything back onto RANGELIST. */
- APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = r1;
- sorted = (svn_sort_compare_ranges(&lastrange, &r1) < 0);
- if (r2)
- {
- APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = r2;
- if (sorted)
- sorted = (svn_sort_compare_ranges(&r1, &r2) < 0);
- }
- if (r3)
+ APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = r3;
+ if (sorted)
{
- APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = r3;
- if (sorted)
- {
- if (r2)
- sorted = (svn_sort_compare_ranges(&r2,
- &r3) < 0);
- else
- sorted = (svn_sort_compare_ranges(&r1,
- &r3) < 0);
- }
+ if (r2)
+ sorted = (svn_sort_compare_ranges(&r2,
+ &r3) < 0);
+ else
+ sorted = (svn_sort_compare_ranges(&r1,
+ &r3) < 0);
}
- break;
}
+ break;
}
+ }
- /* Some of the above cases might have put *RANGELIST out of
- order, so re-sort.*/
- if (!sorted)
- qsort(rangelist->elts, rangelist->nelts, rangelist->elt_size,
- svn_sort_compare_ranges);
+ /* Some of the above cases might have put *RANGELIST out of
+ order, so re-sort.*/
+ if (!sorted)
+ qsort(rangelist->elts, rangelist->nelts, rangelist->elt_size,
+ svn_sort_compare_ranges);
}
}
@@ -489,13 +489,10 @@ range_to_string(const svn_merge_range_t *range,
revisionlist -> (revisionelement)(COMMA revisionelement)*
revisionrange -> REVISION "-" REVISION("*")
revisionelement -> revisionrange | REVISION("*")
-
- PATHNAME is the path this revisionlist is mapped to. It is
- used only for producing a more descriptive error message.
*/
static svn_error_t *
parse_rangelist(const char **input, const char *end,
- apr_array_header_t *rangelist, const char *pathname,
+ svn_rangelist_t *rangelist,
apr_pool_t *pool)
{
const char *curr = *input;
@@ -508,9 +505,7 @@ parse_rangelist(const char **input, const char *end,
{
/* Empty range list. */
*input = curr;
- return svn_error_createf(SVN_ERR_MERGEINFO_PARSE_ERROR, NULL,
- _("Mergeinfo for '%s' maps to an "
- "empty revision range"), pathname);
+ return SVN_NO_ERROR;
}
while (curr < end && *curr != '\n')
@@ -604,17 +599,115 @@ parse_rangelist(const char **input, const char *end,
return SVN_NO_ERROR;
}
+svn_error_t *
+svn_rangelist__parse(svn_rangelist_t **rangelist,
+ const char *str,
+ apr_pool_t *result_pool)
+{
+ const char *s = str;
+
+ *rangelist = apr_array_make(result_pool, 1, sizeof(svn_merge_range_t *));
+ SVN_ERR(parse_rangelist(&s, s + strlen(s), *rangelist, result_pool));
+ return SVN_NO_ERROR;
+}
+
+/* Return TRUE, if all ranges in RANGELIST are in ascending order and do
+ * not overlap and are not adjacent.
+ *
+ * ### Can yield false negatives: ranges of differing inheritance are
+ * allowed to be adjacent.
+ *
+ * If this returns FALSE, you probaly want to qsort() the
+ * ranges and then call svn_rangelist__combine_adjacent_ranges().
+ */
+static svn_boolean_t
+is_rangelist_normalized(svn_rangelist_t *rangelist)
+{
+ int i;
+ svn_merge_range_t **ranges = (svn_merge_range_t **)rangelist->elts;
+
+ for (i = 0; i < rangelist->nelts-1; ++i)
+ if (ranges[i]->end >= ranges[i+1]->start)
+ return FALSE;
+
+ return TRUE;
+}
+
+svn_error_t *
+svn_rangelist__canonicalize(svn_rangelist_t *rangelist,
+ apr_pool_t *scratch_pool)
+{
+ if (! is_rangelist_normalized(rangelist))
+ {
+ qsort(rangelist->elts, rangelist->nelts, rangelist->elt_size,
+ svn_sort_compare_ranges);
+
+ SVN_ERR(svn_rangelist__combine_adjacent_ranges(rangelist, scratch_pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_rangelist__combine_adjacent_ranges(svn_rangelist_t *rangelist,
+ apr_pool_t *scratch_pool)
+{
+ int i;
+ svn_merge_range_t *range, *lastrange;
+
+ lastrange = APR_ARRAY_IDX(rangelist, 0, svn_merge_range_t *);
+
+ for (i = 1; i < rangelist->nelts; i++)
+ {
+ range = APR_ARRAY_IDX(rangelist, i, svn_merge_range_t *);
+ if (lastrange->start <= range->end
+ && range->start <= lastrange->end)
+ {
+ /* The ranges are adjacent or intersect. */
+
+ /* svn_mergeinfo_parse promises to combine overlapping
+ ranges as long as their inheritability is the same. */
+ if (range->start < lastrange->end
+ && range->inheritable != lastrange->inheritable)
+ {
+ return svn_error_createf(SVN_ERR_MERGEINFO_PARSE_ERROR, NULL,
+ _("Unable to parse overlapping "
+ "revision ranges '%s' and '%s' "
+ "with different inheritance "
+ "types"),
+ range_to_string(lastrange,
+ scratch_pool),
+ range_to_string(range,
+ scratch_pool));
+ }
+
+ /* Combine overlapping or adjacent ranges with the
+ same inheritability. */
+ if (lastrange->inheritable == range->inheritable)
+ {
+ lastrange->end = MAX(range->end, lastrange->end);
+ svn_sort__array_delete(rangelist, i, 1);
+ i--;
+ }
+ }
+ lastrange = APR_ARRAY_IDX(rangelist, i, svn_merge_range_t *);
+ }
+
+ return SVN_NO_ERROR;
+}
+
/* revisionline -> PATHNAME COLON revisionlist */
static svn_error_t *
parse_revision_line(const char **input, const char *end, svn_mergeinfo_t hash,
- apr_pool_t *pool)
+ apr_pool_t *scratch_pool)
{
- const char *pathname;
- apr_array_header_t *existing_rangelist;
- apr_array_header_t *rangelist = apr_array_make(pool, 1,
- sizeof(svn_merge_range_t *));
+ const char *pathname = "";
+ apr_ssize_t klen;
+ svn_rangelist_t *existing_rangelist;
+ svn_rangelist_t *rangelist = apr_array_make(scratch_pool, 1,
+ sizeof(svn_merge_range_t *));
- SVN_ERR(parse_pathname(input, end, &pathname, pool));
+ SVN_ERR(parse_pathname(input, end, &pathname, scratch_pool));
if (*(*input) != ':')
return svn_error_create(SVN_ERR_MERGEINFO_PARSE_ERROR, NULL,
@@ -622,8 +715,12 @@ parse_revision_line(const char **input, const char *end, svn_mergeinfo_t hash,
*input = *input + 1;
- SVN_ERR(parse_rangelist(input, end, rangelist, pathname, pool));
+ SVN_ERR(parse_rangelist(input, end, rangelist, scratch_pool));
+ if (rangelist->nelts == 0)
+ return svn_error_createf(SVN_ERR_MERGEINFO_PARSE_ERROR, NULL,
+ _("Mergeinfo for '%s' maps to an "
+ "empty revision range"), pathname);
if (*input != end && *(*input) != '\n')
return svn_error_createf(SVN_ERR_MERGEINFO_PARSE_ERROR, NULL,
_("Could not find end of line in range list line "
@@ -632,55 +729,11 @@ parse_revision_line(const char **input, const char *end, svn_mergeinfo_t hash,
if (*input != end)
*input = *input + 1;
- /* Sort the rangelist, combine adjacent ranges into single ranges,
- and make sure there are no overlapping ranges. */
- if (rangelist->nelts > 1)
- {
- int i;
- svn_merge_range_t *range, *lastrange;
-
- qsort(rangelist->elts, rangelist->nelts, rangelist->elt_size,
- svn_sort_compare_ranges);
- lastrange = APR_ARRAY_IDX(rangelist, 0, svn_merge_range_t *);
-
- for (i = 1; i < rangelist->nelts; i++)
- {
- range = APR_ARRAY_IDX(rangelist, i, svn_merge_range_t *);
- if (lastrange->start <= range->end
- && range->start <= lastrange->end)
- {
- /* The ranges are adjacent or intersect. */
-
- /* svn_mergeinfo_parse promises to combine overlapping
- ranges as long as their inheritability is the same. */
- if (range->start < lastrange->end
- && range->inheritable != lastrange->inheritable)
- {
- return svn_error_createf(SVN_ERR_MERGEINFO_PARSE_ERROR, NULL,
- _("Unable to parse overlapping "
- "revision ranges '%s' and '%s' "
- "with different inheritance "
- "types"),
- range_to_string(lastrange, pool),
- range_to_string(range, pool));
- }
-
- /* Combine overlapping or adjacent ranges with the
- same inheritability. */
- if (lastrange->inheritable == range->inheritable)
- {
- lastrange->end = MAX(range->end, lastrange->end);
- if (i + 1 < rangelist->nelts)
- memmove(rangelist->elts + (rangelist->elt_size * i),
- rangelist->elts + (rangelist->elt_size * (i + 1)),
- rangelist->elt_size * (rangelist->nelts - i));
- rangelist->nelts--;
- i--;
- }
- }
- lastrange = APR_ARRAY_IDX(rangelist, i, svn_merge_range_t *);
- }
- }
+ /* Sort the rangelist, combine adjacent ranges into single ranges, and
+ make sure there are no overlapping ranges. Luckily, most data in
+ svn:mergeinfo will already be in normalized form and this will be quick.
+ */
+ SVN_ERR(svn_rangelist__canonicalize(rangelist, scratch_pool));
/* Handle any funky mergeinfo with relative merge source paths that
might exist due to issue #3547. It's possible that this issue allowed
@@ -688,11 +741,14 @@ parse_revision_line(const char **input, const char *end, svn_mergeinfo_t hash,
leading slash, e.g. "trunk:4033\n/trunk:4039-4995". In the event
we encounter this we merge the rangelists together under a single
absolute path key. */
- existing_rangelist = apr_hash_get(hash, pathname, APR_HASH_KEY_STRING);
+ klen = strlen(pathname);
+ existing_rangelist = apr_hash_get(hash, pathname, klen);
if (existing_rangelist)
- SVN_ERR(svn_rangelist_merge(&rangelist, existing_rangelist, pool));
+ SVN_ERR(svn_rangelist_merge2(rangelist, existing_rangelist,
+ scratch_pool, scratch_pool));
- apr_hash_set(hash, pathname, APR_HASH_KEY_STRING, rangelist);
+ apr_hash_set(hash, apr_pstrmemdup(apr_hash_pool_get(hash), pathname, klen),
+ klen, svn_rangelist_dup(rangelist, apr_hash_pool_get(hash)));
return SVN_NO_ERROR;
}
@@ -702,8 +758,14 @@ static svn_error_t *
parse_top(const char **input, const char *end, svn_mergeinfo_t hash,
apr_pool_t *pool)
{
+ apr_pool_t *iterpool = svn_pool_create(pool);
+
while (*input < end)
- SVN_ERR(parse_revision_line(input, end, hash, pool));
+ {
+ svn_pool_clear(iterpool);
+ SVN_ERR(parse_revision_line(input, end, hash, iterpool));
+ }
+ svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
@@ -715,7 +777,7 @@ svn_mergeinfo_parse(svn_mergeinfo_t *mergeinfo,
{
svn_error_t *err;
- *mergeinfo = apr_hash_make(pool);
+ *mergeinfo = svn_hash__make(pool);
err = parse_top(&input, input + strlen(input), *mergeinfo, pool);
/* Always return SVN_ERR_MERGEINFO_PARSE_ERROR as the topmost error. */
@@ -726,28 +788,28 @@ svn_mergeinfo_parse(svn_mergeinfo_t *mergeinfo,
return err;
}
-/* Cleanup after svn_rangelist_merge when it modifies the ending range of
+/* Cleanup after svn_rangelist_merge2 when it modifies the ending range of
a single rangelist element in-place.
- If *INDEX is not a valid element in RANGELIST do nothing. Otherwise ensure
- that RANGELIST[*INDEX]->END does not adjoin or overlap any subsequent
- ranges in RANGELIST.
+ If *RANGE_INDEX is not a valid element in RANGELIST do nothing. Otherwise
+ ensure that RANGELIST[*RANGE_INDEX]->END does not adjoin or overlap any
+ subsequent ranges in RANGELIST.
If overlap is found, then remove, modify, and/or add elements to RANGELIST
as per the invariants for rangelists documented in svn_mergeinfo.h. If
- RANGELIST[*INDEX]->END adjoins a subsequent element then combine the
+ RANGELIST[*RANGE_INDEX]->END adjoins a subsequent element then combine the
elements if their inheritability permits -- The inheritance of intersecting
and adjoining ranges is handled as per svn_mergeinfo_merge2. Upon return
- set *INDEX to the index of the youngest element modified, added, or
- adjoined to RANGELIST[*INDEX].
+ set *RANGE_INDEX to the index of the youngest element modified, added, or
+ adjoined to RANGELIST[*RANGE_INDEX].
Note: Adjoining rangelist elements are those where the end rev of the older
element is equal to the start rev of the younger element.
Any new elements inserted into RANGELIST are allocated in RESULT_POOL.*/
static void
-adjust_remaining_ranges(apr_array_header_t *rangelist,
- int *index,
+adjust_remaining_ranges(svn_rangelist_t *rangelist,
+ int *range_index,
apr_pool_t *result_pool)
{
int i;
@@ -755,13 +817,13 @@ adjust_remaining_ranges(apr_array_header_t *rangelist,
int elements_to_delete = 0;
svn_merge_range_t *modified_range;
- if (*index >= rangelist->nelts)
+ if (*range_index >= rangelist->nelts)
return;
- starting_index = *index + 1;
- modified_range = APR_ARRAY_IDX(rangelist, *index, svn_merge_range_t *);
+ starting_index = *range_index + 1;
+ modified_range = APR_ARRAY_IDX(rangelist, *range_index, svn_merge_range_t *);
- for (i = *index + 1; i < rangelist->nelts; i++)
+ for (i = *range_index + 1; i < rangelist->nelts; i++)
{
svn_merge_range_t *next_range = APR_ARRAY_IDX(rangelist, i,
svn_merge_range_t *);
@@ -783,7 +845,7 @@ adjust_remaining_ranges(apr_array_header_t *rangelist,
else
{
/* Cannot join because inheritance differs. */
- (*index)++;
+ (*range_index)++;
}
break;
}
@@ -829,10 +891,11 @@ adjust_remaining_ranges(apr_array_header_t *rangelist,
new_modified_range->end = modified_range->end;
new_modified_range->inheritable = FALSE;
modified_range->end = next_range->start;
- (*index)+=2;
- svn_sort__array_insert(&new_modified_range, rangelist, *index);
+ (*range_index)+=2;
+ svn_sort__array_insert(&new_modified_range, rangelist,
+ *range_index);
/* Recurse with the new range. */
- adjust_remaining_ranges(rangelist, index, result_pool);
+ adjust_remaining_ranges(rangelist, range_index, result_pool);
break;
}
}
@@ -851,7 +914,7 @@ adjust_remaining_ranges(apr_array_header_t *rangelist,
/* The intersection between MODIFIED_RANGE and NEXT_RANGE is
absorbed by the latter. */
modified_range->end = next_range->start;
- (*index)++;
+ (*range_index)++;
}
break;
}
@@ -871,14 +934,14 @@ adjust_remaining_ranges(apr_array_header_t *rangelist,
/* MODIFIED_RANGE absorbs the portion of NEXT_RANGE it overlaps
and NEXT_RANGE is truncated. */
next_range->start = modified_range->end;
- (*index)++;
+ (*range_index)++;
}
else
{
/* NEXT_RANGE absorbs the portion of MODIFIED_RANGE it overlaps
and MODIFIED_RANGE is truncated. */
modified_range->end = next_range->start;
- (*index)++;
+ (*range_index)++;
}
break;
}
@@ -889,21 +952,21 @@ adjust_remaining_ranges(apr_array_header_t *rangelist,
}
svn_error_t *
-svn_rangelist_merge(apr_array_header_t **rangelist,
- const apr_array_header_t *changes,
- apr_pool_t *pool)
+svn_rangelist_merge2(svn_rangelist_t *rangelist,
+ const svn_rangelist_t *changes,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
int i = 0;
int j = 0;
- apr_pool_t *subpool = svn_pool_create(pool);
- /* We may modify CHANGES, so make a copy in SUBPOOL. */
- changes = svn_rangelist_dup(changes, subpool);
+ /* We may modify CHANGES, so make a copy in SCRATCH_POOL. */
+ changes = svn_rangelist_dup(changes, scratch_pool);
- while (i < (*rangelist)->nelts && j < changes->nelts)
+ while (i < rangelist->nelts && j < changes->nelts)
{
svn_merge_range_t *range =
- APR_ARRAY_IDX(*rangelist, i, svn_merge_range_t *);
+ APR_ARRAY_IDX(rangelist, i, svn_merge_range_t *);
svn_merge_range_t *change =
APR_ARRAY_IDX(changes, j, svn_merge_range_t *);
int res = svn_sort_compare_ranges(&range, &change);
@@ -934,7 +997,7 @@ svn_rangelist_merge(apr_array_header_t **rangelist,
/* RANGE and CHANGE have the same inheritability so
RANGE expands to absord CHANGE. */
range->end = change->end;
- adjust_remaining_ranges(*rangelist, &i, pool);
+ adjust_remaining_ranges(rangelist, &i, result_pool);
j++;
}
else
@@ -967,10 +1030,10 @@ svn_rangelist_merge(apr_array_header_t **rangelist,
/* CHANGE absorbs intersection with RANGE and RANGE
is truncated. */
svn_merge_range_t *range_copy =
- svn_merge_range_dup(range, pool);
+ svn_merge_range_dup(range, result_pool);
range_copy->end = change->start;
range->start = change->start;
- svn_sort__array_insert(&range_copy, *rangelist, i++);
+ svn_sort__array_insert(&range_copy, rangelist, i++);
}
else
{
@@ -989,10 +1052,10 @@ svn_rangelist_merge(apr_array_header_t **rangelist,
{
/* CHANGE is older than RANGE and the two do not
adjoin or overlap, so insert a copy of CHANGE
- into *RANGELIST. */
+ into RANGELIST. */
svn_merge_range_t *change_copy =
- svn_merge_range_dup(change, pool);
- svn_sort__array_insert(&change_copy, *rangelist, i++);
+ svn_merge_range_dup(change, result_pool);
+ svn_sort__array_insert(&change_copy, rangelist, i++);
j++;
}
else if (change->end == range->start)
@@ -1008,10 +1071,10 @@ svn_rangelist_merge(apr_array_header_t **rangelist,
else
{
/* RANGE and CHANGE have different inheritability so insert
- a copy of CHANGE into *RANGELIST. */
+ a copy of CHANGE into RANGELIST. */
svn_merge_range_t *change_copy =
- svn_merge_range_dup(change, pool);
- svn_sort__array_insert(&change_copy, *rangelist, i);
+ svn_merge_range_dup(change, result_pool);
+ svn_sort__array_insert(&change_copy, rangelist, i);
j++;
}
}
@@ -1028,7 +1091,7 @@ svn_rangelist_merge(apr_array_header_t **rangelist,
/* ...but if RANGE is expanded ensure that we don't
violate any rangelist invariants. */
range->end = change->end;
- adjust_remaining_ranges(*rangelist, &i, pool);
+ adjust_remaining_ranges(rangelist, &i, result_pool);
}
j++;
}
@@ -1038,12 +1101,12 @@ svn_rangelist_merge(apr_array_header_t **rangelist,
{
/* RANGE is inheritable so absorbs any part of CHANGE
it overlaps. CHANGE is truncated and the remainder
- inserted into *RANGELIST. */
+ inserted into RANGELIST. */
svn_merge_range_t *change_copy =
- svn_merge_range_dup(change, pool);
+ svn_merge_range_dup(change, result_pool);
change_copy->end = range->start;
change->start = range->start;
- svn_sort__array_insert(&change_copy, *rangelist, i++);
+ svn_sort__array_insert(&change_copy, rangelist, i++);
}
else
{
@@ -1079,32 +1142,32 @@ svn_rangelist_merge(apr_array_header_t **rangelist,
{
/* CHANGE and RANGE overlap. Set RANGE equal to its
intersection with CHANGE and take the remainder
- of RANGE and insert it into *RANGELIST. */
+ of RANGE and insert it into RANGELIST. */
svn_merge_range_t *range_copy =
- svn_merge_range_dup(range, pool);
+ svn_merge_range_dup(range, result_pool);
range_copy->start = change->end;
range->start = change->start;
range->end = change->end;
range->inheritable = TRUE;
- svn_sort__array_insert(&range_copy, *rangelist, ++i);
+ svn_sort__array_insert(&range_copy, rangelist, ++i);
j++;
}
}
- else
+ else
{
/* CHANGE and RANGE share the same start rev, but
CHANGE is considered older because its end rev
is older.
-
+
Insert the intersection of RANGE and CHANGE into
- *RANGELIST and then set RANGE to the non-intersecting
+ RANGELIST and then set RANGE to the non-intersecting
portion of RANGE. */
svn_merge_range_t *range_copy =
- svn_merge_range_dup(range, pool);
+ svn_merge_range_dup(range, result_pool);
range_copy->end = change->end;
range_copy->inheritable = TRUE;
range->start = change->end;
- svn_sort__array_insert(&range_copy, *rangelist, i++);
+ svn_sort__array_insert(&range_copy, rangelist, i++);
j++;
}
}
@@ -1112,17 +1175,16 @@ svn_rangelist_merge(apr_array_header_t **rangelist,
}
}
- /* Copy any remaining elements in CHANGES into *RANGELIST. */
+ /* Copy any remaining elements in CHANGES into RANGELIST. */
for (; j < (changes)->nelts; j++)
{
svn_merge_range_t *change =
APR_ARRAY_IDX(changes, j, svn_merge_range_t *);
svn_merge_range_t *change_copy = svn_merge_range_dup(change,
- pool);
- svn_sort__array_insert(&change_copy, *rangelist, (*rangelist)->nelts);
+ result_pool);
+ svn_sort__array_insert(&change_copy, rangelist, rangelist->nelts);
}
- svn_pool_destroy(subpool);
return SVN_NO_ERROR;
}
@@ -1166,33 +1228,22 @@ range_swap_endpoints(svn_merge_range_t *range)
}
svn_error_t *
-svn_rangelist_reverse(apr_array_header_t *rangelist, apr_pool_t *pool)
+svn_rangelist_reverse(svn_rangelist_t *rangelist, apr_pool_t *pool)
{
- int i, swap_index;
- svn_merge_range_t range;
- for (i = 0; i < rangelist->nelts / 2; i++)
+ int i;
+
+ svn_sort__array_reverse(rangelist, pool);
+
+ for (i = 0; i < rangelist->nelts; i++)
{
- swap_index = rangelist->nelts - i - 1;
- range = *APR_ARRAY_IDX(rangelist, i, svn_merge_range_t *);
- *APR_ARRAY_IDX(rangelist, i, svn_merge_range_t *) =
- *APR_ARRAY_IDX(rangelist, swap_index, svn_merge_range_t *);
- *APR_ARRAY_IDX(rangelist, swap_index, svn_merge_range_t *) = range;
- range_swap_endpoints(APR_ARRAY_IDX(rangelist, swap_index,
- svn_merge_range_t *));
range_swap_endpoints(APR_ARRAY_IDX(rangelist, i, svn_merge_range_t *));
}
- /* If there's an odd number of elements, we still need to swap the
- end points of the remaining range. */
- if (rangelist->nelts % 2 == 1)
- range_swap_endpoints(APR_ARRAY_IDX(rangelist, rangelist->nelts / 2,
- svn_merge_range_t *));
-
return SVN_NO_ERROR;
}
void
-svn_rangelist__set_inheritance(apr_array_header_t *rangelist,
+svn_rangelist__set_inheritance(svn_rangelist_t *rangelist,
svn_boolean_t inheritable)
{
if (rangelist)
@@ -1222,7 +1273,7 @@ svn_mergeinfo__set_inheritance(svn_mergeinfo_t mergeinfo,
hi;
hi = apr_hash_next(hi))
{
- apr_array_header_t *rangelist = svn__apr_hash_index_val(hi);
+ svn_rangelist_t *rangelist = svn__apr_hash_index_val(hi);
if (rangelist)
svn_rangelist__set_inheritance(rangelist, inheritable);
@@ -1242,7 +1293,7 @@ svn_mergeinfo__set_inheritance(svn_mergeinfo_t mergeinfo,
If CONSIDER_INHERITANCE is true, then take the inheritance of the
ranges in RANGELIST1 and RANGELIST2 into account when comparing them
- for intersection, see the doc string for svn_rangelist_intersection().
+ for intersection, see the doc string for svn_rangelist_intersect().
If CONSIDER_INHERITANCE is false, then ranges with differing inheritance
may intersect, but the resulting intersection is non-inheritable only
@@ -1264,9 +1315,9 @@ svn_mergeinfo__set_inheritance(svn_mergeinfo_t mergeinfo,
Allocate the contents of *OUTPUT in POOL. */
static svn_error_t *
-rangelist_intersect_or_remove(apr_array_header_t **output,
- const apr_array_header_t *rangelist1,
- const apr_array_header_t *rangelist2,
+rangelist_intersect_or_remove(svn_rangelist_t **output,
+ const svn_rangelist_t *rangelist1,
+ const svn_rangelist_t *rangelist2,
svn_boolean_t do_remove,
svn_boolean_t consider_inheritance,
apr_pool_t *pool)
@@ -1318,7 +1369,7 @@ rangelist_intersect_or_remove(apr_array_header_t **output,
tmp_range.inheritable =
(elt2->inheritable || elt1->inheritable);
SVN_ERR(combine_with_lastrange(&tmp_range, *output,
- consider_inheritance, pool,
+ consider_inheritance,
pool));
}
@@ -1355,7 +1406,7 @@ rangelist_intersect_or_remove(apr_array_header_t **output,
SVN_ERR(combine_with_lastrange(&tmp_range,
*output, consider_inheritance,
- pool, pool));
+ pool));
}
/* Set up the rest of the rangelist2 range for further
@@ -1376,7 +1427,7 @@ rangelist_intersect_or_remove(apr_array_header_t **output,
SVN_ERR(combine_with_lastrange(&tmp_range,
*output,
consider_inheritance,
- pool, pool));
+ pool));
}
working_elt2.start = elt1->end;
@@ -1428,7 +1479,7 @@ rangelist_intersect_or_remove(apr_array_header_t **output,
if (i2 == lasti2 && i2 < rangelist2->nelts)
{
SVN_ERR(combine_with_lastrange(&working_elt2, *output,
- consider_inheritance, pool, pool));
+ consider_inheritance, pool));
i2++;
}
@@ -1439,7 +1490,7 @@ rangelist_intersect_or_remove(apr_array_header_t **output,
svn_merge_range_t *);
SVN_ERR(combine_with_lastrange(elt, *output,
- consider_inheritance, pool, pool));
+ consider_inheritance, pool));
}
}
@@ -1448,9 +1499,9 @@ rangelist_intersect_or_remove(apr_array_header_t **output,
svn_error_t *
-svn_rangelist_intersect(apr_array_header_t **output,
- const apr_array_header_t *rangelist1,
- const apr_array_header_t *rangelist2,
+svn_rangelist_intersect(svn_rangelist_t **output,
+ const svn_rangelist_t *rangelist1,
+ const svn_rangelist_t *rangelist2,
svn_boolean_t consider_inheritance,
apr_pool_t *pool)
{
@@ -1459,9 +1510,9 @@ svn_rangelist_intersect(apr_array_header_t **output,
}
svn_error_t *
-svn_rangelist_remove(apr_array_header_t **output,
- const apr_array_header_t *eraser,
- const apr_array_header_t *whiteboard,
+svn_rangelist_remove(svn_rangelist_t **output,
+ const svn_rangelist_t *eraser,
+ const svn_rangelist_t *whiteboard,
svn_boolean_t consider_inheritance,
apr_pool_t *pool)
{
@@ -1470,8 +1521,8 @@ svn_rangelist_remove(apr_array_header_t **output,
}
svn_error_t *
-svn_rangelist_diff(apr_array_header_t **deleted, apr_array_header_t **added,
- const apr_array_header_t *from, const apr_array_header_t *to,
+svn_rangelist_diff(svn_rangelist_t **deleted, svn_rangelist_t **added,
+ const svn_rangelist_t *from, const svn_rangelist_t *to,
svn_boolean_t consider_inheritance,
apr_pool_t *pool)
{
@@ -1532,35 +1583,34 @@ mergeinfo_hash_diff_cb(const void *key, apr_ssize_t klen,
/* hash_a is FROM mergeinfo,
hash_b is TO mergeinfo. */
struct mergeinfo_diff_baton *cb = baton;
- apr_array_header_t *from_rangelist, *to_rangelist;
+ svn_rangelist_t *from_rangelist, *to_rangelist;
const char *path = key;
if (status == svn_hash_diff_key_both)
{
/* Record any deltas (additions or deletions). */
- apr_array_header_t *deleted_rangelist, *added_rangelist;
- from_rangelist = apr_hash_get(cb->from, path, APR_HASH_KEY_STRING);
- to_rangelist = apr_hash_get(cb->to, path, APR_HASH_KEY_STRING);
+ svn_rangelist_t *deleted_rangelist, *added_rangelist;
+ from_rangelist = apr_hash_get(cb->from, path, klen);
+ to_rangelist = apr_hash_get(cb->to, path, klen);
SVN_ERR(svn_rangelist_diff(&deleted_rangelist, &added_rangelist,
from_rangelist, to_rangelist,
cb->consider_inheritance, cb->pool));
if (cb->deleted && deleted_rangelist->nelts > 0)
- apr_hash_set(cb->deleted, apr_pstrdup(cb->pool, path),
- APR_HASH_KEY_STRING, deleted_rangelist);
+ apr_hash_set(cb->deleted, apr_pstrmemdup(cb->pool, path, klen),
+ klen, deleted_rangelist);
if (cb->added && added_rangelist->nelts > 0)
- apr_hash_set(cb->added, apr_pstrdup(cb->pool, path),
- APR_HASH_KEY_STRING, added_rangelist);
+ apr_hash_set(cb->added, apr_pstrmemdup(cb->pool, path, klen),
+ klen, added_rangelist);
}
else if ((status == svn_hash_diff_key_a) && cb->deleted)
{
- from_rangelist = apr_hash_get(cb->from, path, APR_HASH_KEY_STRING);
- apr_hash_set(cb->deleted, apr_pstrdup(cb->pool, path),
- APR_HASH_KEY_STRING,
+ from_rangelist = apr_hash_get(cb->from, path, klen);
+ apr_hash_set(cb->deleted, apr_pstrmemdup(cb->pool, path, klen), klen,
svn_rangelist_dup(from_rangelist, cb->pool));
}
else if ((status == svn_hash_diff_key_b) && cb->added)
{
- to_rangelist = apr_hash_get(cb->to, path, APR_HASH_KEY_STRING);
- apr_hash_set(cb->added, apr_pstrdup(cb->pool, path), APR_HASH_KEY_STRING,
+ to_rangelist = apr_hash_get(cb->to, path, klen);
+ apr_hash_set(cb->added, apr_pstrmemdup(cb->pool, path, klen), klen,
svn_rangelist_dup(to_rangelist, cb->pool));
}
return SVN_NO_ERROR;
@@ -1588,31 +1638,32 @@ walk_mergeinfo_hash_for_diff(svn_mergeinfo_t from, svn_mergeinfo_t to,
}
svn_error_t *
-svn_mergeinfo_diff(svn_mergeinfo_t *deleted, svn_mergeinfo_t *added,
- svn_mergeinfo_t from, svn_mergeinfo_t to,
- svn_boolean_t consider_inheritance,
- apr_pool_t *pool)
+svn_mergeinfo_diff2(svn_mergeinfo_t *deleted, svn_mergeinfo_t *added,
+ svn_mergeinfo_t from, svn_mergeinfo_t to,
+ svn_boolean_t consider_inheritance,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
if (from && to == NULL)
{
- *deleted = svn_mergeinfo_dup(from, pool);
- *added = apr_hash_make(pool);
+ *deleted = svn_mergeinfo_dup(from, result_pool);
+ *added = svn_hash__make(result_pool);
}
else if (from == NULL && to)
{
- *deleted = apr_hash_make(pool);
- *added = svn_mergeinfo_dup(to, pool);
+ *deleted = svn_hash__make(result_pool);
+ *added = svn_mergeinfo_dup(to, result_pool);
}
else
{
- *deleted = apr_hash_make(pool);
- *added = apr_hash_make(pool);
+ *deleted = svn_hash__make(result_pool);
+ *added = svn_hash__make(result_pool);
if (from && to)
{
SVN_ERR(walk_mergeinfo_hash_for_diff(from, to, *deleted, *added,
- consider_inheritance, pool,
- pool));
+ consider_inheritance,
+ result_pool, scratch_pool));
}
}
@@ -1626,74 +1677,117 @@ svn_mergeinfo__equals(svn_boolean_t *is_equal,
svn_boolean_t consider_inheritance,
apr_pool_t *pool)
{
- if (apr_hash_count(info1) == apr_hash_count(info2))
+ apr_hash_index_t *hi;
+
+ *is_equal = FALSE;
+
+ /* special cases: at least one side has no merge info */
+ if (info1 == NULL && info2 == NULL)
{
- svn_mergeinfo_t deleted, added;
- SVN_ERR(svn_mergeinfo_diff(&deleted, &added, info1, info2,
- consider_inheritance, pool));
- *is_equal = apr_hash_count(deleted) == 0 && apr_hash_count(added) == 0;
+ *is_equal = TRUE;
+ return SVN_NO_ERROR;
}
- else
+
+ if (info1 == NULL || info2 == NULL)
+ return SVN_NO_ERROR;
+
+ /* trivial case: different number of paths -> unequal */
+ if (apr_hash_count(info1) != apr_hash_count(info2))
+ return SVN_NO_ERROR;
+
+ /* compare range lists for all paths */
+ for (hi = apr_hash_first(pool, info1); hi; hi = apr_hash_next(hi))
{
- *is_equal = FALSE;
+ const char *key;
+ apr_ssize_t key_length;
+ svn_rangelist_t *lhs, *rhs;
+ int i;
+ svn_rangelist_t *deleted, *added;
+
+ /* get both path lists */
+ apr_hash_this(hi, (const void**)&key, &key_length, (void **)&lhs);
+ rhs = apr_hash_get(info2, key, key_length);
+
+ /* missing on one side? */
+ if (rhs == NULL)
+ return SVN_NO_ERROR;
+
+ /* quick compare: the range lists will often be a perfect match */
+ if (lhs->nelts == rhs->nelts)
+ {
+ for (i = 0; i < lhs->nelts; ++i)
+ {
+ svn_merge_range_t *lrange
+ = APR_ARRAY_IDX(lhs, i, svn_merge_range_t *);
+ svn_merge_range_t *rrange
+ = APR_ARRAY_IDX(rhs, i, svn_merge_range_t *);
+
+ /* range mismatch? -> needs detailed comparison */
+ if ( lrange->start != rrange->start
+ || lrange->end != rrange->end)
+ break;
+
+ /* inheritance mismatch? -> merge info differs */
+ if ( consider_inheritance
+ && lrange->inheritable != rrange->inheritable)
+ return SVN_NO_ERROR;
+ }
+
+ /* all ranges found to match -> next path */
+ if (i == lhs->nelts)
+ continue;
+ }
+
+ /* range lists differ but there are many ways to sort and aggregate
+ revisions into ranges. Do a full diff on them. */
+ SVN_ERR(svn_rangelist_diff(&deleted, &added, lhs, rhs,
+ consider_inheritance, pool));
+ if (deleted->nelts || added->nelts)
+ return SVN_NO_ERROR;
}
+
+ /* no mismatch found */
+ *is_equal = TRUE;
return SVN_NO_ERROR;
}
svn_error_t *
-svn_mergeinfo_merge(svn_mergeinfo_t mergeinfo, svn_mergeinfo_t changes,
- apr_pool_t *pool)
+svn_mergeinfo_merge2(svn_mergeinfo_t mergeinfo,
+ svn_mergeinfo_t changes,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- apr_array_header_t *sorted1, *sorted2;
- int i, j;
+ apr_hash_index_t *hi;
+ apr_pool_t *iterpool;
if (!apr_hash_count(changes))
return SVN_NO_ERROR;
- sorted1 = svn_sort__hash(mergeinfo, svn_sort_compare_items_as_paths, pool);
- sorted2 = svn_sort__hash(changes, svn_sort_compare_items_as_paths, pool);
-
- i = 0;
- j = 0;
- while (i < sorted1->nelts && j < sorted2->nelts)
+ iterpool = svn_pool_create(scratch_pool);
+ for (hi = apr_hash_first(scratch_pool, changes); hi; hi = apr_hash_next(hi))
{
- svn_sort__item_t elt1, elt2;
- int res;
-
- elt1 = APR_ARRAY_IDX(sorted1, i, svn_sort__item_t);
- elt2 = APR_ARRAY_IDX(sorted2, j, svn_sort__item_t);
- res = svn_sort_compare_items_as_paths(&elt1, &elt2);
-
- if (res == 0)
+ const char *key;
+ apr_ssize_t klen;
+ svn_rangelist_t *to_insert;
+ svn_rangelist_t *target;
+
+ /* get ranges to insert and the target ranges list of that insertion */
+ apr_hash_this(hi, (const void**)&key, &klen, (void*)&to_insert);
+ target = apr_hash_get(mergeinfo, key, klen);
+
+ /* if range list exists, just expand on it.
+ * Otherwise, add new hash entry. */
+ if (target)
{
- apr_array_header_t *rl1, *rl2;
-
- rl1 = elt1.value;
- rl2 = elt2.value;
-
- SVN_ERR(svn_rangelist_merge(&rl1, rl2,
- pool));
- apr_hash_set(mergeinfo, elt1.key, elt1.klen, rl1);
- i++;
- j++;
- }
- else if (res < 0)
- {
- i++;
+ SVN_ERR(svn_rangelist_merge2(target, to_insert, result_pool,
+ iterpool));
+ svn_pool_clear(iterpool);
}
else
- {
- apr_hash_set(mergeinfo, elt2.key, elt2.klen, elt2.value);
- j++;
- }
+ apr_hash_set(mergeinfo, key, klen, to_insert);
}
- /* Copy back any remaining elements from the second hash. */
- for (; j < sorted2->nelts; j++)
- {
- svn_sort__item_t elt = APR_ARRAY_IDX(sorted2, j, svn_sort__item_t);
- apr_hash_set(mergeinfo, elt.key, elt.klen, elt.value);
- }
+ svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
@@ -1727,8 +1821,8 @@ svn_mergeinfo_catalog_merge(svn_mergeinfo_catalog_t mergeinfo_cat,
svn_mergeinfo_t mergeinfo = cat_elt.value;
svn_mergeinfo_t changes_mergeinfo = change_elt.value;
- SVN_ERR(svn_mergeinfo_merge(mergeinfo, changes_mergeinfo,
- result_pool));
+ SVN_ERR(svn_mergeinfo_merge2(mergeinfo, changes_mergeinfo,
+ result_pool, scratch_pool));
apr_hash_set(mergeinfo_cat, cat_elt.key, cat_elt.klen, mergeinfo);
i++;
j++;
@@ -1762,16 +1856,6 @@ svn_mergeinfo_catalog_merge(svn_mergeinfo_catalog_t mergeinfo_cat,
}
svn_error_t *
-svn_mergeinfo_intersect(svn_mergeinfo_t *mergeinfo,
- svn_mergeinfo_t mergeinfo1,
- svn_mergeinfo_t mergeinfo2,
- apr_pool_t *pool)
-{
- return svn_mergeinfo_intersect2(mergeinfo, mergeinfo1, mergeinfo2,
- TRUE, pool, pool);
-}
-
-svn_error_t *
svn_mergeinfo_intersect2(svn_mergeinfo_t *mergeinfo,
svn_mergeinfo_t mergeinfo1,
svn_mergeinfo_t mergeinfo2,
@@ -1794,20 +1878,18 @@ svn_mergeinfo_intersect2(svn_mergeinfo_t *mergeinfo,
hi; hi = apr_hash_next(hi))
{
const char *path = svn__apr_hash_index_key(hi);
- apr_array_header_t *rangelist1 = svn__apr_hash_index_val(hi);
- apr_array_header_t *rangelist2;
+ svn_rangelist_t *rangelist1 = svn__apr_hash_index_val(hi);
+ svn_rangelist_t *rangelist2;
svn_pool_clear(iterpool);
- rangelist2 = apr_hash_get(mergeinfo2, path, APR_HASH_KEY_STRING);
+ rangelist2 = svn_hash_gets(mergeinfo2, path);
if (rangelist2)
{
SVN_ERR(svn_rangelist_intersect(&rangelist2, rangelist1, rangelist2,
consider_inheritance, iterpool));
if (rangelist2->nelts > 0)
- apr_hash_set(*mergeinfo,
- apr_pstrdup(result_pool, path),
- APR_HASH_KEY_STRING,
- svn_rangelist_dup(rangelist2, result_pool));
+ svn_hash_sets(*mergeinfo, apr_pstrdup(result_pool, path),
+ svn_rangelist_dup(rangelist2, result_pool));
}
}
svn_pool_destroy(iterpool);
@@ -1815,14 +1897,6 @@ svn_mergeinfo_intersect2(svn_mergeinfo_t *mergeinfo,
}
svn_error_t *
-svn_mergeinfo_remove(svn_mergeinfo_t *mergeinfo, svn_mergeinfo_t eraser,
- svn_mergeinfo_t whiteboard, apr_pool_t *pool)
-{
- return svn_mergeinfo_remove2(mergeinfo, eraser, whiteboard, TRUE, pool,
- pool);
-}
-
-svn_error_t *
svn_mergeinfo_remove2(svn_mergeinfo_t *mergeinfo,
svn_mergeinfo_t eraser,
svn_mergeinfo_t whiteboard,
@@ -1838,10 +1912,10 @@ svn_mergeinfo_remove2(svn_mergeinfo_t *mergeinfo,
svn_error_t *
svn_rangelist_to_string(svn_string_t **output,
- const apr_array_header_t *rangelist,
+ const svn_rangelist_t *rangelist,
apr_pool_t *pool)
{
- svn_stringbuf_t *buf = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *buf = svn_stringbuf_create_empty(pool);
if (rangelist->nelts > 0)
{
@@ -1878,7 +1952,7 @@ mergeinfo_to_stringbuf(svn_stringbuf_t **output,
const char *prefix,
apr_pool_t *pool)
{
- *output = svn_stringbuf_create("", pool);
+ *output = svn_stringbuf_create_empty(pool);
if (apr_hash_count(input) > 0)
{
@@ -1911,16 +1985,10 @@ svn_error_t *
svn_mergeinfo_to_string(svn_string_t **output, svn_mergeinfo_t input,
apr_pool_t *pool)
{
- if (apr_hash_count(input) > 0)
- {
- svn_stringbuf_t *mergeinfo_buf;
- SVN_ERR(mergeinfo_to_stringbuf(&mergeinfo_buf, input, NULL, pool));
- *output = svn_stringbuf__morph_into_string(mergeinfo_buf);
- }
- else
- {
- *output = svn_string_create("", pool);
- }
+ svn_stringbuf_t *mergeinfo_buf;
+
+ SVN_ERR(mergeinfo_to_stringbuf(&mergeinfo_buf, input, NULL, pool));
+ *output = svn_stringbuf__morph_into_string(mergeinfo_buf);
return SVN_NO_ERROR;
}
@@ -1938,6 +2006,22 @@ svn_mergeinfo_sort(svn_mergeinfo_t input, apr_pool_t *pool)
return SVN_NO_ERROR;
}
+svn_error_t *
+svn_mergeinfo__canonicalize_ranges(svn_mergeinfo_t mergeinfo,
+ apr_pool_t *scratch_pool)
+{
+ apr_hash_index_t *hi;
+
+ for (hi = apr_hash_first(scratch_pool, mergeinfo); hi; hi = apr_hash_next(hi))
+ {
+ apr_array_header_t *rl = svn__apr_hash_index_val(hi);
+
+ SVN_ERR(svn_rangelist__canonicalize(rl, scratch_pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
svn_mergeinfo_catalog_t
svn_mergeinfo_catalog_dup(svn_mergeinfo_catalog_t mergeinfo_catalog,
apr_pool_t *pool)
@@ -1952,10 +2036,8 @@ svn_mergeinfo_catalog_dup(svn_mergeinfo_catalog_t mergeinfo_catalog,
const char *key = svn__apr_hash_index_key(hi);
svn_mergeinfo_t val = svn__apr_hash_index_val(hi);
- apr_hash_set(new_mergeinfo_catalog,
- apr_pstrdup(pool, key),
- APR_HASH_KEY_STRING,
- svn_mergeinfo_dup(val, pool));
+ svn_hash_sets(new_mergeinfo_catalog, apr_pstrdup(pool, key),
+ svn_mergeinfo_dup(val, pool));
}
return new_mergeinfo_catalog;
@@ -1964,14 +2046,14 @@ svn_mergeinfo_catalog_dup(svn_mergeinfo_catalog_t mergeinfo_catalog,
svn_mergeinfo_t
svn_mergeinfo_dup(svn_mergeinfo_t mergeinfo, apr_pool_t *pool)
{
- svn_mergeinfo_t new_mergeinfo = apr_hash_make(pool);
+ svn_mergeinfo_t new_mergeinfo = svn_hash__make(pool);
apr_hash_index_t *hi;
for (hi = apr_hash_first(pool, mergeinfo); hi; hi = apr_hash_next(hi))
{
const char *path = svn__apr_hash_index_key(hi);
apr_ssize_t pathlen = svn__apr_hash_index_klen(hi);
- apr_array_header_t *rangelist = svn__apr_hash_index_val(hi);
+ svn_rangelist_t *rangelist = svn__apr_hash_index_val(hi);
apr_hash_set(new_mergeinfo, apr_pstrmemdup(pool, path, pathlen), pathlen,
svn_rangelist_dup(rangelist, pool));
@@ -1999,8 +2081,8 @@ svn_mergeinfo_inheritable2(svn_mergeinfo_t *output,
{
const char *key = svn__apr_hash_index_key(hi);
apr_ssize_t keylen = svn__apr_hash_index_klen(hi);
- apr_array_header_t *rangelist = svn__apr_hash_index_val(hi);
- apr_array_header_t *inheritable_rangelist;
+ svn_rangelist_t *rangelist = svn__apr_hash_index_val(hi);
+ svn_rangelist_t *inheritable_rangelist;
if (!path || svn_path_compare_paths(path, key) == 0)
SVN_ERR(svn_rangelist_inheritable2(&inheritable_rangelist, rangelist,
@@ -2022,8 +2104,8 @@ svn_mergeinfo_inheritable2(svn_mergeinfo_t *output,
svn_error_t *
-svn_rangelist_inheritable2(apr_array_header_t **inheritable_rangelist,
- const apr_array_header_t *rangelist,
+svn_rangelist_inheritable2(svn_rangelist_t **inheritable_rangelist,
+ const svn_rangelist_t *rangelist,
svn_revnum_t start,
svn_revnum_t end,
svn_boolean_t inheritable,
@@ -2060,7 +2142,7 @@ svn_rangelist_inheritable2(apr_array_header_t **inheritable_rangelist,
{
/* We want only the non-inheritable ranges bound by START
and END removed. */
- apr_array_header_t *ranges_inheritable =
+ svn_rangelist_t *ranges_inheritable =
svn_rangelist__initialize(start, end, inheritable, scratch_pool);
if (rangelist->nelts)
@@ -2086,11 +2168,11 @@ svn_mergeinfo__remove_empty_rangelists(svn_mergeinfo_t mergeinfo,
for (hi = apr_hash_first(pool, mergeinfo); hi; hi = apr_hash_next(hi))
{
const char *path = svn__apr_hash_index_key(hi);
- apr_array_header_t *rangelist = svn__apr_hash_index_val(hi);
+ svn_rangelist_t *rangelist = svn__apr_hash_index_val(hi);
if (rangelist->nelts == 0)
{
- apr_hash_set(mergeinfo, path, APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(mergeinfo, path, NULL);
removed_some_ranges = TRUE;
}
}
@@ -2105,7 +2187,6 @@ svn_mergeinfo__remove_prefix_from_catalog(svn_mergeinfo_catalog_t *out_catalog,
apr_pool_t *pool)
{
apr_hash_index_t *hi;
- apr_ssize_t prefix_len = strlen(prefix_path);
SVN_ERR_ASSERT(prefix_path[0] == '/');
@@ -2114,23 +2195,13 @@ svn_mergeinfo__remove_prefix_from_catalog(svn_mergeinfo_catalog_t *out_catalog,
for (hi = apr_hash_first(pool, in_catalog); hi; hi = apr_hash_next(hi))
{
const char *original_path = svn__apr_hash_index_key(hi);
- apr_ssize_t klen = svn__apr_hash_index_klen(hi);
svn_mergeinfo_t value = svn__apr_hash_index_val(hi);
- apr_ssize_t padding = 0;
-
- SVN_ERR_ASSERT(klen >= prefix_len);
- SVN_ERR_ASSERT(svn_fspath__is_ancestor(prefix_path, original_path));
+ const char *new_path;
- /* If the ORIGINAL_PATH doesn't match the PREFIX_PATH exactly
- and we're not simply removing a single leading slash (such as
- when PREFIX_PATH is "/"), we advance our string offset by an
- extra character (to get past the directory separator that
- follows the prefix). */
- if ((strcmp(original_path, prefix_path) != 0) && (prefix_len != 1))
- padding = 1;
+ new_path = svn_fspath__skip_ancestor(prefix_path, original_path);
+ SVN_ERR_ASSERT(new_path);
- apr_hash_set(*out_catalog, original_path + prefix_len + padding,
- klen - prefix_len - padding, value);
+ svn_hash_sets(*out_catalog, new_path, value);
}
return SVN_NO_ERROR;
@@ -2157,9 +2228,9 @@ svn_mergeinfo__add_prefix_to_catalog(svn_mergeinfo_catalog_t *out_catalog,
if (original_path[0] == '/')
original_path++;
- apr_hash_set(*out_catalog,
- svn_dirent_join(prefix_path, original_path, result_pool),
- APR_HASH_KEY_STRING, value);
+ svn_hash_sets(*out_catalog,
+ svn_dirent_join(prefix_path, original_path, result_pool),
+ value);
}
return SVN_NO_ERROR;
@@ -2182,30 +2253,34 @@ svn_mergeinfo__add_suffix_to_mergeinfo(svn_mergeinfo_t *out_mergeinfo,
hi;
hi = apr_hash_next(hi))
{
- const char *path = svn__apr_hash_index_key(hi);
- apr_array_header_t *rangelist = svn__apr_hash_index_val(hi);
+ const char *fspath = svn__apr_hash_index_key(hi);
+ svn_rangelist_t *rangelist = svn__apr_hash_index_val(hi);
- apr_hash_set(*out_mergeinfo,
- svn_dirent_join(path, suffix_relpath, result_pool),
- APR_HASH_KEY_STRING,
- svn_rangelist_dup(rangelist, result_pool));
+ svn_hash_sets(*out_mergeinfo,
+ svn_fspath__join(fspath, suffix_relpath, result_pool),
+ rangelist);
}
return SVN_NO_ERROR;
}
-apr_array_header_t *
-svn_rangelist_dup(const apr_array_header_t *rangelist, apr_pool_t *pool)
+svn_rangelist_t *
+svn_rangelist_dup(const svn_rangelist_t *rangelist, apr_pool_t *pool)
{
- apr_array_header_t *new_rl = apr_array_make(pool, rangelist->nelts,
- sizeof(svn_merge_range_t *));
+ svn_rangelist_t *new_rl = apr_array_make(pool, rangelist->nelts,
+ sizeof(svn_merge_range_t *));
+
+ /* allocate target range buffer with a single operation */
+ svn_merge_range_t *copy = apr_palloc(pool, sizeof(*copy) * rangelist->nelts);
int i;
+ /* fill it iteratively and link it into the range list */
for (i = 0; i < rangelist->nelts; i++)
{
- APR_ARRAY_PUSH(new_rl, svn_merge_range_t *) =
- svn_merge_range_dup(APR_ARRAY_IDX(rangelist, i, svn_merge_range_t *),
- pool);
+ memcpy(copy + i,
+ APR_ARRAY_IDX(rangelist, i, svn_merge_range_t *),
+ sizeof(*copy));
+ APR_ARRAY_PUSH(new_rl, svn_merge_range_t *) = copy + i;
}
return new_rl;
@@ -2247,7 +2322,7 @@ svn_mergeinfo__catalog_to_formatted_string(svn_string_t **output,
apr_array_header_t *sorted_catalog =
svn_sort__hash(catalog, svn_sort_compare_items_as_paths, pool);
- output_buf = svn_stringbuf_create("", pool);
+ output_buf = svn_stringbuf_create_empty(pool);
for (i = 0; i < sorted_catalog->nelts; i++)
{
svn_sort__item_t elt =
@@ -2293,38 +2368,6 @@ svn_mergeinfo__catalog_to_formatted_string(svn_string_t **output,
}
svn_error_t *
-svn_mergeinfo__to_formatted_string(svn_string_t **output,
- svn_mergeinfo_t mergeinfo,
- const char *prefix,
- apr_pool_t *pool)
-{
- svn_stringbuf_t *output_buf = NULL;
-
- if (mergeinfo && apr_hash_count(mergeinfo))
- {
- SVN_ERR(mergeinfo_to_stringbuf(&output_buf, mergeinfo,
- prefix ? prefix : "", pool));
- svn_stringbuf_appendcstr(output_buf, "\n");
- }
-#if SVN_DEBUG
- else if (!mergeinfo)
- {
- output_buf = svn_stringbuf_create(prefix ? prefix : "", pool);
- svn_stringbuf_appendcstr(output_buf, _("NULL mergeinfo\n"));
- }
- else if (apr_hash_count(mergeinfo) == 0)
- {
- output_buf = svn_stringbuf_create(prefix ? prefix : "", pool);
- svn_stringbuf_appendcstr(output_buf, _("empty mergeinfo\n"));
- }
-#endif
-
- *output = output_buf ? svn_stringbuf__morph_into_string(output_buf)
- : svn_string_create("", pool);
- return SVN_NO_ERROR;
-}
-
-svn_error_t *
svn_mergeinfo__get_range_endpoints(svn_revnum_t *youngest_rev,
svn_revnum_t *oldest_rev,
svn_mergeinfo_t mergeinfo,
@@ -2337,7 +2380,7 @@ svn_mergeinfo__get_range_endpoints(svn_revnum_t *youngest_rev,
for (hi = apr_hash_first(pool, mergeinfo); hi; hi = apr_hash_next(hi))
{
- apr_array_header_t *rangelist = svn__apr_hash_index_val(hi);
+ svn_rangelist_t *rangelist = svn__apr_hash_index_val(hi);
if (rangelist->nelts)
{
@@ -2386,10 +2429,8 @@ svn_mergeinfo__filter_catalog_by_ranges(svn_mergeinfo_catalog_t *filtered_cat,
result_pool,
scratch_pool));
if (apr_hash_count(filtered_mergeinfo))
- apr_hash_set(*filtered_cat,
- apr_pstrdup(result_pool, path),
- APR_HASH_KEY_STRING,
- filtered_mergeinfo);
+ svn_hash_sets(*filtered_cat,
+ apr_pstrdup(result_pool, path), filtered_mergeinfo);
}
return SVN_NO_ERROR;
@@ -2413,7 +2454,7 @@ svn_mergeinfo__filter_mergeinfo_by_ranges(svn_mergeinfo_t *filtered_mergeinfo,
if (mergeinfo)
{
apr_hash_index_t *hi;
- apr_array_header_t *filter_rangelist =
+ svn_rangelist_t *filter_rangelist =
svn_rangelist__initialize(oldest_rev, youngest_rev, TRUE,
scratch_pool);
@@ -2422,21 +2463,19 @@ svn_mergeinfo__filter_mergeinfo_by_ranges(svn_mergeinfo_t *filtered_mergeinfo,
hi = apr_hash_next(hi))
{
const char *path = svn__apr_hash_index_key(hi);
- apr_array_header_t *rangelist = svn__apr_hash_index_val(hi);
+ svn_rangelist_t *rangelist = svn__apr_hash_index_val(hi);
if (rangelist->nelts)
{
- apr_array_header_t *new_rangelist;
+ svn_rangelist_t *new_rangelist;
SVN_ERR(rangelist_intersect_or_remove(
&new_rangelist, filter_rangelist, rangelist,
! include_range, FALSE, result_pool));
if (new_rangelist->nelts)
- apr_hash_set(*filtered_mergeinfo,
- apr_pstrdup(result_pool, path),
- APR_HASH_KEY_STRING,
- new_rangelist);
+ svn_hash_sets(*filtered_mergeinfo,
+ apr_pstrdup(result_pool, path), new_rangelist);
}
}
}
@@ -2461,8 +2500,8 @@ svn_mergeinfo__adjust_mergeinfo_rangelists(svn_mergeinfo_t *adjusted_mergeinfo,
{
int i;
const char *path = svn__apr_hash_index_key(hi);
- apr_array_header_t *rangelist = svn__apr_hash_index_val(hi);
- apr_array_header_t *adjusted_rangelist =
+ svn_rangelist_t *rangelist = svn__apr_hash_index_val(hi);
+ svn_rangelist_t *adjusted_rangelist =
apr_array_make(result_pool, rangelist->nelts,
sizeof(svn_merge_range_t *));
@@ -2488,8 +2527,8 @@ svn_mergeinfo__adjust_mergeinfo_rangelists(svn_mergeinfo_t *adjusted_mergeinfo,
}
if (adjusted_rangelist->nelts)
- apr_hash_set(*adjusted_mergeinfo, apr_pstrdup(result_pool, path),
- APR_HASH_KEY_STRING, adjusted_rangelist);
+ svn_hash_sets(*adjusted_mergeinfo, apr_pstrdup(result_pool, path),
+ adjusted_rangelist);
}
}
return SVN_NO_ERROR;
@@ -2507,7 +2546,7 @@ svn_mergeinfo__is_noninheritable(svn_mergeinfo_t mergeinfo,
hi;
hi = apr_hash_next(hi))
{
- apr_array_header_t *rangelist = svn__apr_hash_index_val(hi);
+ svn_rangelist_t *rangelist = svn__apr_hash_index_val(hi);
int i;
for (i = 0; i < rangelist->nelts; i++)
@@ -2522,32 +2561,13 @@ svn_mergeinfo__is_noninheritable(svn_mergeinfo_t mergeinfo,
return FALSE;
}
-svn_error_t *
-svn_mergeinfo__string_has_noninheritable(svn_boolean_t *is_noninheritable,
- const char *mergeinfo_str,
- apr_pool_t *scratch_pool)
-{
- *is_noninheritable = FALSE;
-
- if (mergeinfo_str)
- {
- svn_mergeinfo_t mergeinfo;
-
- SVN_ERR(svn_mergeinfo_parse(&mergeinfo, mergeinfo_str, scratch_pool));
- *is_noninheritable = svn_mergeinfo__is_noninheritable(mergeinfo,
- scratch_pool);
- }
-
- return SVN_NO_ERROR;
-}
-
-apr_array_header_t *
+svn_rangelist_t *
svn_rangelist__initialize(svn_revnum_t start,
svn_revnum_t end,
svn_boolean_t inheritable,
apr_pool_t *result_pool)
{
- apr_array_header_t *rangelist =
+ svn_rangelist_t *rangelist =
apr_array_make(result_pool, 1, sizeof(svn_merge_range_t *));
svn_merge_range_t *range = apr_pcalloc(result_pool, sizeof(*range));
@@ -2571,7 +2591,7 @@ svn_mergeinfo__mergeinfo_from_segments(svn_mergeinfo_t *mergeinfo_p,
{
svn_location_segment_t *segment =
APR_ARRAY_IDX(segments, i, svn_location_segment_t *);
- apr_array_header_t *path_ranges;
+ svn_rangelist_t *path_ranges;
svn_merge_range_t *range;
const char *source_path;
@@ -2584,7 +2604,7 @@ svn_mergeinfo__mergeinfo_from_segments(svn_mergeinfo_t *mergeinfo_p,
/* See if we already stored ranges for this path. If not, make
a new list. */
- path_ranges = apr_hash_get(mergeinfo, source_path, APR_HASH_KEY_STRING);
+ path_ranges = svn_hash_gets(mergeinfo, source_path);
if (! path_ranges)
path_ranges = apr_array_make(pool, 1, sizeof(range));
@@ -2601,9 +2621,60 @@ svn_mergeinfo__mergeinfo_from_segments(svn_mergeinfo_t *mergeinfo_p,
range->end = segment->range_end;
range->inheritable = TRUE;
APR_ARRAY_PUSH(path_ranges, svn_merge_range_t *) = range;
- apr_hash_set(mergeinfo, source_path, APR_HASH_KEY_STRING, path_ranges);
+ svn_hash_sets(mergeinfo, source_path, path_ranges);
}
*mergeinfo_p = mergeinfo;
return SVN_NO_ERROR;
}
+
+svn_error_t *
+svn_rangelist__merge_many(svn_rangelist_t *merged_rangelist,
+ svn_mergeinfo_t merge_history,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ if (apr_hash_count(merge_history))
+ {
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ apr_hash_index_t *hi;
+
+ for (hi = apr_hash_first(scratch_pool, merge_history);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ svn_rangelist_t *subtree_rangelist = svn__apr_hash_index_val(hi);
+
+ svn_pool_clear(iterpool);
+ SVN_ERR(svn_rangelist_merge2(merged_rangelist, subtree_rangelist,
+ result_pool, iterpool));
+ }
+ svn_pool_destroy(iterpool);
+ }
+ return SVN_NO_ERROR;
+}
+
+
+const char *
+svn_inheritance_to_word(svn_mergeinfo_inheritance_t inherit)
+{
+ switch (inherit)
+ {
+ case svn_mergeinfo_inherited:
+ return "inherited";
+ case svn_mergeinfo_nearest_ancestor:
+ return "nearest-ancestor";
+ default:
+ return "explicit";
+ }
+}
+
+svn_mergeinfo_inheritance_t
+svn_inheritance_from_word(const char *word)
+{
+ if (strcmp(word, "inherited") == 0)
+ return svn_mergeinfo_inherited;
+ if (strcmp(word, "nearest-ancestor") == 0)
+ return svn_mergeinfo_nearest_ancestor;
+ return svn_mergeinfo_explicit;
+}
diff --git a/subversion/libsvn_subr/mutex.c b/subversion/libsvn_subr/mutex.c
new file mode 100644
index 0000000..04988eb
--- /dev/null
+++ b/subversion/libsvn_subr/mutex.c
@@ -0,0 +1,83 @@
+/*
+ * svn_mutex.c: routines for mutual exclusion.
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#include "svn_private_config.h"
+#include "private/svn_mutex.h"
+
+svn_error_t *
+svn_mutex__init(svn_mutex__t **mutex_p,
+ svn_boolean_t mutex_required,
+ apr_pool_t *result_pool)
+{
+ /* always initialize the mutex pointer, even though it is not
+ strictly necessary if APR_HAS_THREADS has not been set */
+ *mutex_p = NULL;
+
+#if APR_HAS_THREADS
+ if (mutex_required)
+ {
+ apr_thread_mutex_t *apr_mutex;
+ apr_status_t status =
+ apr_thread_mutex_create(&apr_mutex,
+ APR_THREAD_MUTEX_DEFAULT,
+ result_pool);
+ if (status)
+ return svn_error_wrap_apr(status, _("Can't create mutex"));
+
+ *mutex_p = apr_mutex;
+ }
+#endif
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_mutex__lock(svn_mutex__t *mutex)
+{
+#if APR_HAS_THREADS
+ if (mutex)
+ {
+ apr_status_t status = apr_thread_mutex_lock(mutex);
+ if (status)
+ return svn_error_wrap_apr(status, _("Can't lock mutex"));
+ }
+#endif
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_mutex__unlock(svn_mutex__t *mutex,
+ svn_error_t *err)
+{
+#if APR_HAS_THREADS
+ if (mutex)
+ {
+ apr_status_t status = apr_thread_mutex_unlock(mutex);
+ if (status && !err)
+ return svn_error_wrap_apr(status, _("Can't unlock mutex"));
+ }
+#endif
+
+ return err;
+}
diff --git a/subversion/libsvn_subr/named_atomic.c b/subversion/libsvn_subr/named_atomic.c
new file mode 100644
index 0000000..cd58bbb
--- /dev/null
+++ b/subversion/libsvn_subr/named_atomic.c
@@ -0,0 +1,665 @@
+/*
+ * svn_named_atomic.c: routines for machine-wide named atomics.
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#include "private/svn_named_atomic.h"
+
+#include <apr_global_mutex.h>
+#include <apr_mmap.h>
+
+#include "svn_private_config.h"
+#include "private/svn_atomic.h"
+#include "private/svn_mutex.h"
+#include "svn_pools.h"
+#include "svn_dirent_uri.h"
+#include "svn_io.h"
+
+/* Implementation aspects.
+ *
+ * We use a single shared memory block (memory mapped file) that will be
+ * created by the first user and merely mapped by all subsequent ones.
+ * The memory block contains an short header followed by a fixed-capacity
+ * array of named atomics. The number of entries currently in use is stored
+ * in the header part.
+ *
+ * Finding / creating the MMAP object as well as adding new array entries
+ * is being guarded by an APR global mutex. Since releasing the MMAP
+ * structure and closing the underlying does not affect other users of the
+ * same, cleanup will not be synchronized.
+ *
+ * The array is append-only. Once a process mapped the block into its
+ * address space, it may freely access any of the used entries. However,
+ * it must synchronize access to the volatile data within the entries.
+ * On Windows and where otherwise supported by GCC, lightweight "lock-free"
+ * synchronization will be used. Other targets serialize all access using
+ * a global mutex.
+ *
+ * Atomics will be identified by their name (a short string) and lookup
+ * takes linear time. But even that takes only about 10 microseconds for a
+ * full array scan -- which is in the same order of magnitude than e.g. a
+ * single global mutex lock / unlock pair.
+ */
+
+/* Capacity of our shared memory object, i.e. max number of named atomics
+ * that may be created. Should have the form 2**N - 1.
+ */
+#define MAX_ATOMIC_COUNT 1023
+
+/* We choose the size of a single named atomic object to fill a complete
+ * cache line (on most architectures). Thereby, we minimize the cache
+ * sync. overhead between different CPU cores.
+ */
+#define CACHE_LINE_LENGTH 64
+
+/* We need 8 bytes for the actual value and the remainder is used to
+ * store the NUL-terminated name.
+ *
+ * Must not be smaller than SVN_NAMED_ATOMIC__MAX_NAME_LENGTH.
+ */
+#define MAX_NAME_LENGTH (CACHE_LINE_LENGTH - sizeof(apr_int64_t) - 1)
+
+/* Particle that will be appended to the namespace name to form the
+ * name of the mutex / lock file used for that namespace.
+ */
+#define MUTEX_NAME_SUFFIX ".mutex"
+
+/* Particle that will be appended to the namespace name to form the
+ * name of the shared memory file that backs that namespace.
+ */
+#define SHM_NAME_SUFFIX ".shm"
+
+/* Platform-dependent implementations of our basic atomic operations.
+ * NA_SYNCHRONIZE(op) will ensure that the OP gets executed atomically.
+ * This will be zero-overhead if OP itself is already atomic.
+ *
+ * (We don't call it SYNCHRONIZE because Windows has a preprocess macro by
+ * that name.)
+ *
+ * The default implementation will use the same mutex for initialization
+ * as well as any type of data access. This is quite expensive and we
+ * can do much better on most platforms.
+ */
+#if defined(WIN32) && ((_WIN32_WINNT >= 0x0502) || defined(InterlockedExchangeAdd64))
+
+/* Interlocked API / intrinsics guarantee full data synchronization
+ */
+#define synched_read(mem) *mem
+#define synched_write(mem, value) InterlockedExchange64(mem, value)
+#define synched_add(mem, delta) InterlockedExchangeAdd64(mem, delta)
+#define synched_cmpxchg(mem, value, comperand) \
+ InterlockedCompareExchange64(mem, value, comperand)
+
+#define NA_SYNCHRONIZE(_atomic,op) op;
+#define NA_SYNCHRONIZE_IS_FAST TRUE
+
+#elif SVN_HAS_ATOMIC_BUILTINS
+
+/* GCC provides atomic intrinsics for most common CPU types
+ */
+#define synched_read(mem) *mem
+#define synched_write(mem, value) __sync_lock_test_and_set(mem, value)
+#define synched_add(mem, delta) __sync_add_and_fetch(mem, delta)
+#define synched_cmpxchg(mem, value, comperand) \
+ __sync_val_compare_and_swap(mem, comperand, value)
+
+#define NA_SYNCHRONIZE(_atomic,op) op;
+#define NA_SYNCHRONIZE_IS_FAST TRUE
+
+#else
+
+/* Default implementation
+ */
+static apr_int64_t
+synched_read(volatile apr_int64_t *mem)
+{
+ return *mem;
+}
+
+static apr_int64_t
+synched_write(volatile apr_int64_t *mem, apr_int64_t value)
+{
+ apr_int64_t old_value = *mem;
+ *mem = value;
+
+ return old_value;
+}
+
+static apr_int64_t
+synched_add(volatile apr_int64_t *mem, apr_int64_t delta)
+{
+ return *mem += delta;
+}
+
+static apr_int64_t
+synched_cmpxchg(volatile apr_int64_t *mem,
+ apr_int64_t value,
+ apr_int64_t comperand)
+{
+ apr_int64_t old_value = *mem;
+ if (old_value == comperand)
+ *mem = value;
+
+ return old_value;
+}
+
+#define NA_SYNCHRONIZE(_atomic,op)\
+ do{\
+ SVN_ERR(lock(_atomic->mutex));\
+ op;\
+ SVN_ERR(unlock(_atomic->mutex,SVN_NO_ERROR));\
+ }while(0)
+
+#define NA_SYNCHRONIZE_IS_FAST FALSE
+
+#endif
+
+/* Structure describing a single atomic: its VALUE and NAME.
+ */
+struct named_atomic_data_t
+{
+ volatile apr_int64_t value;
+ char name[MAX_NAME_LENGTH + 1];
+};
+
+/* Content of our shared memory buffer. COUNT is the number
+ * of used entries in ATOMICS. Insertion is append-only.
+ * PADDING is used to align the header information with the
+ * atomics to create a favorable data alignment.
+ */
+struct shared_data_t
+{
+ volatile apr_uint32_t count;
+ char padding [sizeof(struct named_atomic_data_t) - sizeof(apr_uint32_t)];
+
+ struct named_atomic_data_t atomics[MAX_ATOMIC_COUNT];
+};
+
+/* Structure combining all objects that we need for access serialization.
+ */
+struct mutex_t
+{
+ /* Inter-process sync. is handled by through lock file. */
+ apr_file_t *lock_file;
+
+ /* Pool to be used with lock / unlock functions */
+ apr_pool_t *pool;
+};
+
+/* API structure combining the atomic data and the access mutex
+ */
+struct svn_named_atomic__t
+{
+ /* pointer into the shared memory */
+ struct named_atomic_data_t *data;
+
+ /* sync. object; never NULL (even if unused) */
+ struct mutex_t *mutex;
+};
+
+/* This is intended to be a singleton struct. It contains all
+ * information necessary to initialize and access the shared
+ * memory.
+ */
+struct svn_atomic_namespace__t
+{
+ /* Pointer to the shared data mapped into our process */
+ struct shared_data_t *data;
+
+ /* Last time we checked, this was the number of used
+ * (i.e. fully initialized) items. I.e. we can read
+ * their names without further sync. */
+ volatile svn_atomic_t min_used;
+
+ /* for each atomic in the shared memory, we hand out
+ * at most one API-level object. */
+ struct svn_named_atomic__t atomics[MAX_ATOMIC_COUNT];
+
+ /* Synchronization object for this namespace */
+ struct mutex_t mutex;
+};
+
+/* On most operating systems APR implements file locks per process, not
+ * per file. I.e. the lock file will only sync. among processes but within
+ * a process, we must use a mutex to sync the threads. */
+/* Compare ../libsvn_fs_fs/fs.h:SVN_FS_FS__USE_LOCK_MUTEX */
+#if APR_HAS_THREADS && !defined(WIN32)
+#define USE_THREAD_MUTEX 1
+#else
+#define USE_THREAD_MUTEX 0
+#endif
+
+/* Used for process-local thread sync.
+ */
+static svn_mutex__t *thread_mutex = NULL;
+
+#if APR_HAS_MMAP
+/* Initialization flag for the above used by svn_atomic__init_once.
+ */
+static volatile svn_atomic_t mutex_initialized = FALSE;
+
+/* Initialize the thread sync. structures.
+ * To be called by svn_atomic__init_once.
+ */
+static svn_error_t *
+init_thread_mutex(void *baton, apr_pool_t *pool)
+{
+ /* let the mutex live as long as the APR */
+ apr_pool_t *global_pool = svn_pool_create(NULL);
+
+ return svn_mutex__init(&thread_mutex, USE_THREAD_MUTEX, global_pool);
+}
+#endif /* APR_HAS_MMAP */
+
+/* Utility that acquires our global mutex and converts error types.
+ */
+static svn_error_t *
+lock(struct mutex_t *mutex)
+{
+ svn_error_t *err;
+
+ /* Get lock on the filehandle. */
+ SVN_ERR(svn_mutex__lock(thread_mutex));
+ err = svn_io_lock_open_file(mutex->lock_file, TRUE, FALSE, mutex->pool);
+
+ return err
+ ? svn_mutex__unlock(thread_mutex, err)
+ : err;
+}
+
+/* Utility that releases the lock previously acquired via lock(). If the
+ * unlock succeeds and OUTER_ERR is not NULL, OUTER_ERR will be returned.
+ * Otherwise, return the result of the unlock operation.
+ */
+static svn_error_t *
+unlock(struct mutex_t *mutex, svn_error_t * outer_err)
+{
+ svn_error_t *unlock_err
+ = svn_io_unlock_open_file(mutex->lock_file, mutex->pool);
+ return svn_mutex__unlock(thread_mutex,
+ svn_error_compose_create(outer_err,
+ unlock_err));
+}
+
+#if APR_HAS_MMAP
+/* The last user to close a particular namespace should also remove the
+ * lock file. Failure to do so, however, does not affect further uses
+ * of the same namespace.
+ */
+static apr_status_t
+delete_lock_file(void *arg)
+{
+ struct mutex_t *mutex = arg;
+ const char *lock_name = NULL;
+
+ /* locks have already been cleaned up. Simply close the file */
+ apr_status_t status = apr_file_close(mutex->lock_file);
+
+ /* Remove the file from disk. This will fail if there ares still other
+ * users of this lock file, i.e. namespace. */
+ apr_file_name_get(&lock_name, mutex->lock_file);
+ if (lock_name)
+ apr_file_remove(lock_name, mutex->pool);
+
+ return status;
+}
+#endif /* APR_HAS_MMAP */
+
+/* Validate the ATOMIC parameter, i.e it's address. Correct code will
+ * never need this but if someone should accidentally to use a NULL or
+ * incomplete structure, let's catch that here instead of segfaulting.
+ */
+static svn_error_t *
+validate(svn_named_atomic__t *atomic)
+{
+ return atomic && atomic->data && atomic->mutex
+ ? SVN_NO_ERROR
+ : svn_error_create(SVN_ERR_BAD_ATOMIC, 0, _("Not a valid atomic"));
+}
+
+/* Auto-initialize and return in *ATOMIC the API-level object for the
+ * atomic with index I within NS. */
+static void
+return_atomic(svn_named_atomic__t **atomic,
+ svn_atomic_namespace__t *ns,
+ int i)
+{
+ *atomic = &ns->atomics[i];
+ if (ns->atomics[i].data == NULL)
+ {
+ (*atomic)->mutex = &ns->mutex;
+ (*atomic)->data = &ns->data->atomics[i];
+ }
+}
+
+/* Implement API */
+
+svn_boolean_t
+svn_named_atomic__is_supported(void)
+{
+#if !APR_HAS_MMAP
+ return FALSE;
+#elif !defined(_WIN32)
+ return TRUE;
+#else
+ static svn_tristate_t result = svn_tristate_unknown;
+
+ if (result == svn_tristate_unknown)
+ {
+ /* APR SHM implementation requires the creation of global objects */
+ HANDLE handle = CreateFileMappingA(INVALID_HANDLE_VALUE,
+ NULL,
+ PAGE_READONLY,
+ 0,
+ 1,
+ "Global\\__RandomXZY_svn");
+ if (handle != NULL)
+ {
+ CloseHandle(handle);
+ result = svn_tristate_true;
+ }
+ else
+ result = svn_tristate_false;
+ }
+
+ return result == svn_tristate_true;
+#endif /* _WIN32 */
+}
+
+svn_boolean_t
+svn_named_atomic__is_efficient(void)
+{
+ return NA_SYNCHRONIZE_IS_FAST;
+}
+
+svn_error_t *
+svn_atomic_namespace__create(svn_atomic_namespace__t **ns,
+ const char *name,
+ apr_pool_t *result_pool)
+{
+#if !APR_HAS_MMAP
+ return svn_error_create(APR_ENOTIMPL, NULL, NULL);
+#else
+ apr_status_t apr_err;
+ svn_error_t *err;
+ apr_file_t *file;
+ apr_mmap_t *mmap;
+ const char *shm_name, *lock_name;
+ apr_finfo_t finfo;
+
+ apr_pool_t *subpool = svn_pool_create(result_pool);
+
+ /* allocate the namespace data structure
+ */
+ svn_atomic_namespace__t *new_ns = apr_pcalloc(result_pool, sizeof(**ns));
+
+ /* construct the names of the system objects that we need
+ */
+ shm_name = apr_pstrcat(subpool, name, SHM_NAME_SUFFIX, NULL);
+ lock_name = apr_pstrcat(subpool, name, MUTEX_NAME_SUFFIX, NULL);
+
+ /* initialize the lock objects
+ */
+ SVN_ERR(svn_atomic__init_once(&mutex_initialized, init_thread_mutex, NULL,
+ result_pool));
+
+ new_ns->mutex.pool = result_pool;
+ SVN_ERR(svn_io_file_open(&new_ns->mutex.lock_file, lock_name,
+ APR_READ | APR_WRITE | APR_CREATE,
+ APR_OS_DEFAULT,
+ result_pool));
+
+ /* Make sure the last user of our lock file will actually remove it.
+ * Please note that only the last file handle begin closed will actually
+ * remove the underlying file (see docstring for apr_file_remove).
+ */
+ apr_pool_cleanup_register(result_pool, &new_ns->mutex,
+ delete_lock_file,
+ apr_pool_cleanup_null);
+
+ /* Prevent concurrent initialization.
+ */
+ SVN_ERR(lock(&new_ns->mutex));
+
+ /* First, make sure that the underlying file exists. If it doesn't
+ * exist, create one and initialize its content.
+ */
+ err = svn_io_file_open(&file, shm_name,
+ APR_READ | APR_WRITE | APR_CREATE,
+ APR_OS_DEFAULT,
+ result_pool);
+ if (!err)
+ {
+ err = svn_io_stat(&finfo, shm_name, APR_FINFO_SIZE, subpool);
+ if (!err && finfo.size < sizeof(struct shared_data_t))
+ {
+ /* Zero all counters, values and names.
+ */
+ struct shared_data_t initial_data;
+ memset(&initial_data, 0, sizeof(initial_data));
+ err = svn_io_file_write_full(file, &initial_data,
+ sizeof(initial_data), NULL,
+ subpool);
+ }
+ }
+
+ /* Now, map it into memory.
+ */
+ if (!err)
+ {
+ apr_err = apr_mmap_create(&mmap, file, 0, sizeof(*new_ns->data),
+ APR_MMAP_READ | APR_MMAP_WRITE , result_pool);
+ if (!apr_err)
+ new_ns->data = mmap->mm;
+ else
+ err = svn_error_createf(apr_err, NULL,
+ _("MMAP failed for file '%s'"), shm_name);
+ }
+
+ svn_pool_destroy(subpool);
+
+ if (!err && new_ns->data)
+ {
+ /* Detect severe cases of corruption (i.e. when some outsider messed
+ * with our data file)
+ */
+ if (new_ns->data->count > MAX_ATOMIC_COUNT)
+ return svn_error_create(SVN_ERR_CORRUPTED_ATOMIC_STORAGE, 0,
+ _("Number of atomics in namespace is too large."));
+
+ /* Cache the number of existing, complete entries. There can't be
+ * incomplete ones from other processes because we hold the mutex.
+ * Our process will also not access this information since we are
+ * either being called from within svn_atomic__init_once or by
+ * svn_atomic_namespace__create for a new object.
+ */
+ new_ns->min_used = new_ns->data->count;
+ *ns = new_ns;
+ }
+
+ /* Unlock to allow other processes may access the shared memory as well.
+ */
+ return unlock(&new_ns->mutex, err);
+#endif /* APR_HAS_MMAP */
+}
+
+svn_error_t *
+svn_atomic_namespace__cleanup(const char *name,
+ apr_pool_t *pool)
+{
+ const char *shm_name, *lock_name;
+
+ /* file names used for the specified namespace */
+ shm_name = apr_pstrcat(pool, name, SHM_NAME_SUFFIX, NULL);
+ lock_name = apr_pstrcat(pool, name, MUTEX_NAME_SUFFIX, NULL);
+
+ /* remove these files if they exist */
+ SVN_ERR(svn_io_remove_file2(shm_name, TRUE, pool));
+ SVN_ERR(svn_io_remove_file2(lock_name, TRUE, pool));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_named_atomic__get(svn_named_atomic__t **atomic,
+ svn_atomic_namespace__t *ns,
+ const char *name,
+ svn_boolean_t auto_create)
+{
+ apr_uint32_t i, count;
+ svn_error_t *error = SVN_NO_ERROR;
+ apr_size_t len = strlen(name);
+
+ /* Check parameters and make sure we return a NULL atomic
+ * in case of failure.
+ */
+ *atomic = NULL;
+ if (len > SVN_NAMED_ATOMIC__MAX_NAME_LENGTH)
+ return svn_error_create(SVN_ERR_BAD_ATOMIC, 0,
+ _("Atomic's name is too long."));
+
+ /* If no namespace has been provided, bail out.
+ */
+ if (ns == NULL || ns->data == NULL)
+ return svn_error_create(SVN_ERR_BAD_ATOMIC, 0,
+ _("Namespace has not been initialized."));
+
+ /* Optimistic lookup.
+ * Because we never change the name of existing atomics and may only
+ * append new ones, we can safely compare the name of existing ones
+ * with the name that we are looking for.
+ */
+ for (i = 0, count = svn_atomic_read(&ns->min_used); i < count; ++i)
+ if (strncmp(ns->data->atomics[i].name, name, len + 1) == 0)
+ {
+ return_atomic(atomic, ns, i);
+ return SVN_NO_ERROR;
+ }
+
+ /* Try harder:
+ * Serialize all lookup and insert the item, if necessary and allowed.
+ */
+ SVN_ERR(lock(&ns->mutex));
+
+ /* We only need to check for new entries.
+ */
+ for (i = count; i < ns->data->count; ++i)
+ if (strncmp(ns->data->atomics[i].name, name, len + 1) == 0)
+ {
+ return_atomic(atomic, ns, i);
+
+ /* Update our cached number of complete entries. */
+ svn_atomic_set(&ns->min_used, ns->data->count);
+
+ return unlock(&ns->mutex, error);
+ }
+
+ /* Not found. Append a new entry, if allowed & possible.
+ */
+ if (auto_create)
+ {
+ if (ns->data->count < MAX_ATOMIC_COUNT)
+ {
+ ns->data->atomics[ns->data->count].value = 0;
+ memcpy(ns->data->atomics[ns->data->count].name,
+ name,
+ len+1);
+
+ return_atomic(atomic, ns, ns->data->count);
+ ++ns->data->count;
+ }
+ else
+ error = svn_error_create(SVN_ERR_BAD_ATOMIC, 0,
+ _("Out of slots for named atomic."));
+ }
+
+ /* We are mainly done here. Let others continue their work.
+ */
+ SVN_ERR(unlock(&ns->mutex, error));
+
+ /* Only now can we be sure that a full memory barrier has been set
+ * and that the new entry has been written to memory in full.
+ */
+ svn_atomic_set(&ns->min_used, ns->data->count);
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_named_atomic__read(apr_int64_t *value,
+ svn_named_atomic__t *atomic)
+{
+ SVN_ERR(validate(atomic));
+ NA_SYNCHRONIZE(atomic, *value = synched_read(&atomic->data->value));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_named_atomic__write(apr_int64_t *old_value,
+ apr_int64_t new_value,
+ svn_named_atomic__t *atomic)
+{
+ apr_int64_t temp;
+
+ SVN_ERR(validate(atomic));
+ NA_SYNCHRONIZE(atomic, temp = synched_write(&atomic->data->value, new_value));
+
+ if (old_value)
+ *old_value = temp;
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_named_atomic__add(apr_int64_t *new_value,
+ apr_int64_t delta,
+ svn_named_atomic__t *atomic)
+{
+ apr_int64_t temp;
+
+ SVN_ERR(validate(atomic));
+ NA_SYNCHRONIZE(atomic, temp = synched_add(&atomic->data->value, delta));
+
+ if (new_value)
+ *new_value = temp;
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_named_atomic__cmpxchg(apr_int64_t *old_value,
+ apr_int64_t new_value,
+ apr_int64_t comperand,
+ svn_named_atomic__t *atomic)
+{
+ apr_int64_t temp;
+
+ SVN_ERR(validate(atomic));
+ NA_SYNCHRONIZE(atomic, temp = synched_cmpxchg(&atomic->data->value,
+ new_value,
+ comperand));
+
+ if (old_value)
+ *old_value = temp;
+
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/libsvn_subr/nls.c b/subversion/libsvn_subr/nls.c
index 9bc96f8..b026e39 100644
--- a/subversion/libsvn_subr/nls.c
+++ b/subversion/libsvn_subr/nls.c
@@ -56,7 +56,6 @@ svn_nls_init(void)
char* utf8_path;
const char* internal_path;
apr_pool_t* pool;
- apr_status_t apr_err;
apr_size_t inwords, outbytes, outlength;
apr_pool_create(&pool, 0);
@@ -99,10 +98,10 @@ svn_nls_init(void)
if (outbytes == 0)
{
- err = svn_error_createf(apr_err, NULL,
- _("Can't convert module path "
- "to UTF-8 from UCS-2: '%s'"),
- ucs2_path);
+ err = svn_error_wrap_apr(apr_get_os_error(),
+ _("Can't convert module path "
+ "to UTF-8 from UCS-2: '%s'"),
+ ucs2_path);
}
else
{
@@ -121,10 +120,12 @@ svn_nls_init(void)
#else /* ! WIN32 */
bindtextdomain(PACKAGE_NAME, SVN_LOCALE_DIR);
}
+#endif /* WIN32 */
+
#ifdef HAVE_BIND_TEXTDOMAIN_CODESET
bind_textdomain_codeset(PACKAGE_NAME, "UTF-8");
#endif /* HAVE_BIND_TEXTDOMAIN_CODESET */
-#endif /* WIN32 */
+
#endif /* ENABLE_NLS */
return err;
diff --git a/subversion/libsvn_subr/opt.c b/subversion/libsvn_subr/opt.c
index d30384b..bfaa8b4 100644
--- a/subversion/libsvn_subr/opt.c
+++ b/subversion/libsvn_subr/opt.c
@@ -34,6 +34,7 @@
#include <apr_lib.h>
#include <apr_file_info.h>
+#include "svn_hash.h"
#include "svn_cmdline.h"
#include "svn_version.h"
#include "svn_types.h"
@@ -296,7 +297,7 @@ print_command_info2(const svn_opt_subcommand_desc2_t *cmd,
{
if (cmd->valid_options[i])
{
- if (have_options == FALSE)
+ if (!have_options)
{
SVN_ERR(svn_cmdline_fputs(_("\nValid options:\n"),
stream, pool));
@@ -416,7 +417,9 @@ svn_opt_subcommand_help3(const char *subcommand,
_("\"%s\": unknown command.\n\n"), subcommand);
if (err) {
- svn_handle_error2(err, stderr, FALSE, "svn: ");
+ /* Issue #3014: Don't print anything on broken pipes. */
+ if (err->apr_err != SVN_ERR_IO_PIPE_WRITE_ERROR)
+ svn_handle_error2(err, stderr, FALSE, "svn: ");
svn_error_clear(err);
}
}
@@ -644,6 +647,32 @@ svn_opt__revision_to_string(const svn_opt_revision_t *revision,
}
}
+svn_opt_revision_range_t *
+svn_opt__revision_range_create(const svn_opt_revision_t *start_revision,
+ const svn_opt_revision_t *end_revision,
+ apr_pool_t *result_pool)
+{
+ svn_opt_revision_range_t *range = apr_palloc(result_pool, sizeof(*range));
+
+ range->start = *start_revision;
+ range->end = *end_revision;
+ return range;
+}
+
+svn_opt_revision_range_t *
+svn_opt__revision_range_from_revnums(svn_revnum_t start_revnum,
+ svn_revnum_t end_revnum,
+ apr_pool_t *result_pool)
+{
+ svn_opt_revision_range_t *range = apr_palloc(result_pool, sizeof(*range));
+
+ range->start.kind = svn_opt_revision_number;
+ range->start.value.number = start_revnum;
+ range->end.kind = svn_opt_revision_number;
+ range->end.value.number = end_revnum;
+ return range;
+}
+
/*** Parsing arguments. ***/
@@ -944,7 +973,7 @@ svn_opt_parse_revprop(apr_hash_t **revprop_table_p, const char *revprop_spec,
else
{
SVN_ERR(svn_utf_cstring_to_utf8(&propname, revprop_spec, pool));
- propval = svn_string_create("", pool);
+ propval = svn_string_create_empty(pool);
}
if (!svn_prop_name_is_valid(propname))
@@ -952,7 +981,7 @@ svn_opt_parse_revprop(apr_hash_t **revprop_table_p, const char *revprop_spec,
_("'%s' is not a valid Subversion property name"),
propname);
- apr_hash_set(*revprop_table_p, propname, APR_HASH_KEY_STRING, propval);
+ svn_hash_sets(*revprop_table_p, propname, propval);
return SVN_NO_ERROR;
}
@@ -1075,41 +1104,99 @@ svn_opt__arg_canonicalize_path(const char **path_out, const char *path_in,
return SVN_NO_ERROR;
}
+
svn_error_t *
svn_opt__print_version_info(const char *pgm_name,
const char *footer,
+ const svn_version_extended_t *info,
svn_boolean_t quiet,
+ svn_boolean_t verbose,
apr_pool_t *pool)
{
if (quiet)
return svn_cmdline_printf(pool, "%s\n", SVN_VER_NUMBER);
SVN_ERR(svn_cmdline_printf(pool, _("%s, version %s\n"
- " compiled %s, %s\n\n"), pgm_name,
- SVN_VERSION, __DATE__, __TIME__));
- SVN_ERR(svn_cmdline_fputs(
- _("Copyright (C) 2012 The Apache Software Foundation.\n"
- "This software consists of contributions made by many "
- "people; see the NOTICE\n"
- "file for more information.\n"
- "Subversion is open source software, see "
- "http://subversion.apache.org/\n\n"),
- stdout, pool));
+ " compiled %s, %s on %s\n\n"),
+ pgm_name, SVN_VERSION,
+ svn_version_ext_build_date(info),
+ svn_version_ext_build_time(info),
+ svn_version_ext_build_host(info)));
+ SVN_ERR(svn_cmdline_printf(pool, "%s\n", svn_version_ext_copyright(info)));
if (footer)
{
SVN_ERR(svn_cmdline_printf(pool, "%s\n", footer));
}
+ if (verbose)
+ {
+ const apr_array_header_t *libs;
+
+ SVN_ERR(svn_cmdline_fputs(_("System information:\n\n"), stdout, pool));
+ SVN_ERR(svn_cmdline_printf(pool, _("* running on %s\n"),
+ svn_version_ext_runtime_host(info)));
+ if (svn_version_ext_runtime_osname(info))
+ {
+ SVN_ERR(svn_cmdline_printf(pool, _(" - %s\n"),
+ svn_version_ext_runtime_osname(info)));
+ }
+
+ libs = svn_version_ext_linked_libs(info);
+ if (libs && libs->nelts)
+ {
+ const svn_version_ext_linked_lib_t *lib;
+ int i;
+
+ SVN_ERR(svn_cmdline_fputs(_("* linked dependencies:\n"),
+ stdout, pool));
+ for (i = 0; i < libs->nelts; ++i)
+ {
+ lib = &APR_ARRAY_IDX(libs, i, svn_version_ext_linked_lib_t);
+ if (lib->runtime_version)
+ SVN_ERR(svn_cmdline_printf(pool,
+ " - %s %s (compiled with %s)\n",
+ lib->name,
+ lib->runtime_version,
+ lib->compiled_version));
+ else
+ SVN_ERR(svn_cmdline_printf(pool,
+ " - %s %s (static)\n",
+ lib->name,
+ lib->compiled_version));
+ }
+ }
+
+ libs = svn_version_ext_loaded_libs(info);
+ if (libs && libs->nelts)
+ {
+ const svn_version_ext_loaded_lib_t *lib;
+ int i;
+
+ SVN_ERR(svn_cmdline_fputs(_("* loaded shared libraries:\n"),
+ stdout, pool));
+ for (i = 0; i < libs->nelts; ++i)
+ {
+ lib = &APR_ARRAY_IDX(libs, i, svn_version_ext_loaded_lib_t);
+ if (lib->version)
+ SVN_ERR(svn_cmdline_printf(pool,
+ " - %s (%s)\n",
+ lib->name, lib->version));
+ else
+ SVN_ERR(svn_cmdline_printf(pool, " - %s\n", lib->name));
+ }
+ }
+ }
+
return SVN_NO_ERROR;
}
-
svn_error_t *
-svn_opt_print_help3(apr_getopt_t *os,
+svn_opt_print_help4(apr_getopt_t *os,
const char *pgm_name,
svn_boolean_t print_version,
svn_boolean_t quiet,
+ svn_boolean_t verbose,
const char *version_footer,
const char *header,
const svn_opt_subcommand_desc2_t *cmd_table,
@@ -1135,8 +1222,11 @@ svn_opt_print_help3(apr_getopt_t *os,
}
}
else if (print_version) /* just --version */
- SVN_ERR(svn_opt__print_version_info(pgm_name, version_footer, quiet,
- pool));
+ {
+ SVN_ERR(svn_opt__print_version_info(pgm_name, version_footer,
+ svn_version_extended(verbose, pool),
+ quiet, verbose, pool));
+ }
else if (os && !targets->nelts) /* `-h', `--help', or `help' */
svn_opt_print_generic_help2(header,
cmd_table,
diff --git a/subversion/libsvn_subr/opt.h b/subversion/libsvn_subr/opt.h
index fc8bff8..ddf3984 100644
--- a/subversion/libsvn_subr/opt.h
+++ b/subversion/libsvn_subr/opt.h
@@ -24,23 +24,27 @@
#ifndef SVN_LIBSVN_SUBR_OPT_H
#define SVN_LIBSVN_SUBR_OPT_H
+#include "svn_version.h"
#include "svn_opt.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
-/* Print version info for PGM_NAME. If QUIET is true, print in
- * brief. Else if QUIET is not true, print the version more
- * verbosely, and if FOOTER is non-null, print it following the
- * version information.
+
+/* Print version version info for PGM_NAME to the console. If QUIET is
+ * true, print in brief. Else if QUIET is not true, print the version
+ * more verbosely, and if FOOTER is non-null, print it following the
+ * version information. If VERBOSE is true, print running system info.
*
* Use POOL for temporary allocations.
*/
svn_error_t *
svn_opt__print_version_info(const char *pgm_name,
const char *footer,
+ const svn_version_extended_t *info,
svn_boolean_t quiet,
+ svn_boolean_t verbose,
apr_pool_t *pool);
#ifdef __cplusplus
diff --git a/subversion/libsvn_subr/path.c b/subversion/libsvn_subr/path.c
index 24fcd8f..84368f3 100644
--- a/subversion/libsvn_subr/path.c
+++ b/subversion/libsvn_subr/path.c
@@ -91,16 +91,33 @@ is_canonical(const char *path,
#endif
-char *svn_path_join(const char *base,
- const char *component,
- apr_pool_t *pool)
+/* functionality of svn_path_is_canonical but without the deprecation */
+static svn_boolean_t
+svn_path_is_canonical_internal(const char *path, apr_pool_t *pool)
+{
+ return svn_uri_is_canonical(path, pool) ||
+ svn_dirent_is_canonical(path, pool) ||
+ svn_relpath_is_canonical(path);
+}
+
+svn_boolean_t
+svn_path_is_canonical(const char *path, apr_pool_t *pool)
+{
+ return svn_path_is_canonical_internal(path, pool);
+}
+
+/* functionality of svn_path_join but without the deprecation */
+static char *
+svn_path_join_internal(const char *base,
+ const char *component,
+ apr_pool_t *pool)
{
apr_size_t blen = strlen(base);
apr_size_t clen = strlen(component);
char *path;
- assert(svn_path_is_canonical(base, pool));
- assert(svn_path_is_canonical(component, pool));
+ assert(svn_path_is_canonical_internal(base, pool));
+ assert(svn_path_is_canonical_internal(component, pool));
/* If the component is absolute, then return it. */
if (*component == '/')
@@ -124,6 +141,13 @@ char *svn_path_join(const char *base,
return path;
}
+char *svn_path_join(const char *base,
+ const char *component,
+ apr_pool_t *pool)
+{
+ return svn_path_join_internal(base, component, pool);
+}
+
char *svn_path_join_many(apr_pool_t *pool, const char *base, ...)
{
#define MAX_SAVED_LENGTHS 10
@@ -140,7 +164,7 @@ char *svn_path_join_many(apr_pool_t *pool, const char *base, ...)
total_len = strlen(base);
- assert(svn_path_is_canonical(base, pool));
+ assert(svn_path_is_canonical_internal(base, pool));
if (total_len == 1 && *base == '/')
base_is_root = TRUE;
@@ -160,7 +184,7 @@ char *svn_path_join_many(apr_pool_t *pool, const char *base, ...)
{
len = strlen(s);
- assert(svn_path_is_canonical(s, pool));
+ assert(svn_path_is_canonical_internal(s, pool));
if (SVN_PATH_IS_EMPTY(s))
continue;
@@ -353,7 +377,7 @@ svn_path_dirname(const char *path, apr_pool_t *pool)
{
apr_size_t len = strlen(path);
- assert(svn_path_is_canonical(path, pool));
+ assert(svn_path_is_canonical_internal(path, pool));
return apr_pstrmemdup(pool, path, previous_segment(path, len));
}
@@ -365,7 +389,7 @@ svn_path_basename(const char *path, apr_pool_t *pool)
apr_size_t len = strlen(path);
apr_size_t start;
- assert(svn_path_is_canonical(path, pool));
+ assert(svn_path_is_canonical_internal(path, pool));
if (len == 1 && path[0] == '/')
start = 0;
@@ -399,8 +423,8 @@ svn_path_compare_paths(const char *path1,
apr_size_t min_len = ((path1_len < path2_len) ? path1_len : path2_len);
apr_size_t i = 0;
- assert(is_canonical(path1, strlen(path1)));
- assert(is_canonical(path2, strlen(path2)));
+ assert(is_canonical(path1, path1_len));
+ assert(is_canonical(path2, path2_len));
/* Skip past common prefix. */
while (i < min_len && path1[i] == path2[i])
@@ -593,7 +617,7 @@ svn_path_decompose(const char *path,
apr_array_header_t *components =
apr_array_make(pool, 1, sizeof(const char *));
- assert(svn_path_is_canonical(path, pool));
+ assert(svn_path_is_canonical_internal(path, pool));
if (SVN_PATH_IS_EMPTY(path))
return components; /* ### Should we return a "" component? */
@@ -1058,7 +1082,7 @@ svn_path_url_add_component2(const char *url,
/* = svn_path_uri_encode() but without always copying */
component = uri_escape(component, svn_uri__char_validity, pool);
- return svn_path_join(url, component, pool);
+ return svn_path_join_internal(url, component, pool);
}
svn_error_t *
@@ -1076,7 +1100,7 @@ svn_path_get_absolute(const char **pabsolute,
}
-
+#if !defined(WIN32) && !defined(DARWIN)
/** Get APR's internal path encoding. */
static svn_error_t *
get_path_encoding(svn_boolean_t *path_is_utf8, apr_pool_t *pool)
@@ -1095,6 +1119,7 @@ get_path_encoding(svn_boolean_t *path_is_utf8, apr_pool_t *pool)
*path_is_utf8 = (encoding_style == APR_FILEPATH_ENCODING_UTF8);
return SVN_NO_ERROR;
}
+#endif
svn_error_t *
@@ -1102,15 +1127,19 @@ svn_path_cstring_from_utf8(const char **path_apr,
const char *path_utf8,
apr_pool_t *pool)
{
+#if !defined(WIN32) && !defined(DARWIN)
svn_boolean_t path_is_utf8;
SVN_ERR(get_path_encoding(&path_is_utf8, pool));
if (path_is_utf8)
+#endif
{
*path_apr = apr_pstrdup(pool, path_utf8);
return SVN_NO_ERROR;
}
+#if !defined(WIN32) && !defined(DARWIN)
else
return svn_utf_cstring_from_utf8(path_apr, path_utf8, pool);
+#endif
}
@@ -1119,23 +1148,27 @@ svn_path_cstring_to_utf8(const char **path_utf8,
const char *path_apr,
apr_pool_t *pool)
{
+#if !defined(WIN32) && !defined(DARWIN)
svn_boolean_t path_is_utf8;
SVN_ERR(get_path_encoding(&path_is_utf8, pool));
if (path_is_utf8)
+#endif
{
*path_utf8 = apr_pstrdup(pool, path_apr);
return SVN_NO_ERROR;
}
+#if !defined(WIN32) && !defined(DARWIN)
else
return svn_utf_cstring_to_utf8(path_utf8, path_apr, pool);
+#endif
}
/* Return a copy of PATH, allocated from POOL, for which control
characters have been escaped using the form \NNN (where NNN is the
octal representation of the byte's ordinal value). */
-static const char *
-illegal_path_escape(const char *path, apr_pool_t *pool)
+const char *
+svn_path_illegal_path_escape(const char *path, apr_pool_t *pool)
{
svn_stringbuf_t *retstr;
apr_size_t i, copied = 0;
@@ -1160,7 +1193,7 @@ illegal_path_escape(const char *path, apr_pool_t *pool)
svn_stringbuf_appendbytes(retstr, path + copied,
i - copied);
- /* Make sure buffer is big enough for '\' 'N' 'N' 'N' null */
+ /* Make sure buffer is big enough for '\' 'N' 'N' 'N' (and NUL) */
svn_stringbuf_ensure(retstr, retstr->len + 5);
/*### The backslash separator doesn't work too great with Windows,
but it's what we'll use for consistency with invalid utf8
@@ -1199,7 +1232,8 @@ svn_path_check_valid(const char *path, apr_pool_t *pool)
(SVN_ERR_FS_PATH_SYNTAX, NULL,
_("Invalid control character '0x%02x' in path '%s'"),
(unsigned char)*c,
- illegal_path_escape(svn_dirent_local_style(path, pool), pool));
+ svn_path_illegal_path_escape(svn_dirent_local_style(path, pool),
+ pool));
}
}
@@ -1248,3 +1282,34 @@ svn_path_splitext(const char **path_root,
if (path_ext)
*path_ext = "";
}
+
+
+/* Repository relative URLs (^/). */
+
+svn_boolean_t
+svn_path_is_repos_relative_url(const char *path)
+{
+ return (0 == strncmp("^/", path, 2));
+}
+
+svn_error_t *
+svn_path_resolve_repos_relative_url(const char **absolute_url,
+ const char *relative_url,
+ const char *repos_root_url,
+ apr_pool_t *pool)
+{
+ if (! svn_path_is_repos_relative_url(relative_url))
+ return svn_error_createf(SVN_ERR_BAD_URL, NULL,
+ _("Improper relative URL '%s'"),
+ relative_url);
+
+ /* No assumptions are made about the canonicalization of the inut
+ * arguments, it is presumed that the output will be canonicalized after
+ * this function, which will remove any duplicate path separator.
+ */
+ *absolute_url = apr_pstrcat(pool, repos_root_url, relative_url + 1,
+ (char *)NULL);
+
+ return SVN_NO_ERROR;
+}
+
diff --git a/subversion/libsvn_subr/pool.c b/subversion/libsvn_subr/pool.c
index 4b7b3f6..179ef79 100644
--- a/subversion/libsvn_subr/pool.c
+++ b/subversion/libsvn_subr/pool.c
@@ -28,6 +28,7 @@
#include <apr_general.h>
#include <apr_pools.h>
+#include <apr_thread_mutex.h>
#include "svn_pools.h"
@@ -52,6 +53,7 @@ abort_on_pool_failure(int retcode)
And we don't have any of it... */
printf("Out of memory - terminating application.\n");
abort();
+ return 0; /* not reached */
}
@@ -97,3 +99,44 @@ svn_pool_create_ex(apr_pool_t *pool, apr_allocator_t *allocator)
}
#endif /* APR_POOL_DEBUG */
+
+apr_allocator_t *
+svn_pool_create_allocator(svn_boolean_t thread_safe)
+{
+ apr_allocator_t *allocator;
+ apr_pool_t *pool;
+
+ /* create the allocator and limit it's internal free list to keep
+ * memory usage in check */
+
+ if (apr_allocator_create(&allocator))
+ abort_on_pool_failure(EXIT_FAILURE);
+
+ apr_allocator_max_free_set(allocator, SVN_ALLOCATOR_RECOMMENDED_MAX_FREE);
+
+ /* create the root pool */
+
+ pool = svn_pool_create_ex(NULL, allocator);
+ apr_allocator_owner_set(allocator, pool);
+
+#if APR_POOL_DEBUG
+ apr_pool_tag (pool, "svn root pool");
+#endif
+
+ /* By default, allocators are *not* thread-safe. We must provide a mutex
+ * if we want thread-safety for that mutex. */
+
+#if APR_HAS_THREADS
+ if (thread_safe)
+ {
+ apr_thread_mutex_t *mutex;
+ apr_thread_mutex_create(&mutex, APR_THREAD_MUTEX_DEFAULT, pool);
+ apr_allocator_mutex_set(allocator, mutex);
+ }
+#endif
+
+ /* better safe than sorry */
+ SVN_ERR_ASSERT_NO_RETURN(allocator != NULL);
+
+ return allocator;
+}
diff --git a/subversion/libsvn_subr/prompt.c b/subversion/libsvn_subr/prompt.c
index a4363a6..d0c29d0 100644
--- a/subversion/libsvn_subr/prompt.c
+++ b/subversion/libsvn_subr/prompt.c
@@ -29,8 +29,10 @@
#include <apr_lib.h>
#include <apr_poll.h>
+#include <apr_portable.h>
#include "svn_cmdline.h"
+#include "svn_ctype.h"
#include "svn_string.h"
#include "svn_auth.h"
#include "svn_error.h"
@@ -39,41 +41,441 @@
#include "private/svn_cmdline_private.h"
#include "svn_private_config.h"
+#ifdef WIN32
+#include <conio.h>
+#elif defined(HAVE_TERMIOS_H)
+#include <signal.h>
+#include <termios.h>
+#endif
+
-/* Wait for input on @a *f. Doing all allocations
- * in @a pool. This functions is based on apr_wait_for_io_or_timeout().
- * Note that this will return an EINTR on a signal.
- *
- * ### FIX: When APR gives us a better way of doing this use it. */
-static apr_status_t wait_for_input(apr_file_t *f,
- apr_pool_t *pool)
+/* Descriptor of an open terminal */
+typedef struct terminal_handle_t terminal_handle_t;
+struct terminal_handle_t
{
-#ifndef WIN32
- apr_pollfd_t pollset;
- int srv, n;
-
- pollset.desc_type = APR_POLL_FILE;
- pollset.desc.f = f;
- pollset.p = pool;
- pollset.reqevents = APR_POLLIN;
-
- srv = apr_poll(&pollset, 1, &n, -1);
-
- if (n == 1 && pollset.rtnevents & APR_POLLIN)
- return APR_SUCCESS;
-
- return srv;
-#else
- /* APR specs say things that are unimplemented are supposed to return
- * APR_ENOTIMPL. But when trying to use APR_POLL_FILE with apr_poll
- * on Windows it returns APR_EBADF instead. So just return APR_ENOTIMPL
- * ourselves here.
- */
- return APR_ENOTIMPL;
+ apr_file_t *infd; /* input file handle */
+ apr_file_t *outfd; /* output file handle */
+ svn_boolean_t noecho; /* terminal echo was turned off */
+ svn_boolean_t close_handles; /* close handles when closing the terminal */
+ apr_pool_t *pool; /* pool associated with the file handles */
+
+#ifdef HAVE_TERMIOS_H
+ svn_boolean_t restore_state; /* terminal state was changed */
+ apr_os_file_t osinfd; /* OS-specific handle for infd */
+ struct termios attr; /* saved terminal attributes */
#endif
+};
+
+/* Initialize safe state of terminal_handle_t. */
+static void
+terminal_handle_init(terminal_handle_t *terminal,
+ apr_file_t *infd, apr_file_t *outfd,
+ svn_boolean_t noecho, svn_boolean_t close_handles,
+ apr_pool_t *pool)
+{
+ memset(terminal, 0, sizeof(*terminal));
+ terminal->infd = infd;
+ terminal->outfd = outfd;
+ terminal->noecho = noecho;
+ terminal->close_handles = close_handles;
+ terminal->pool = pool;
+}
+
+/*
+ * Common pool cleanup handler for terminal_handle_t. Closes TERMINAL.
+ * If CLOSE_HANDLES is TRUE, close the terminal file handles.
+ * If RESTORE_STATE is TRUE, restores the TERMIOS flags of the terminal.
+ */
+static apr_status_t
+terminal_cleanup_handler(terminal_handle_t *terminal,
+ svn_boolean_t close_handles,
+ svn_boolean_t restore_state)
+{
+ apr_status_t status = APR_SUCCESS;
+
+#ifdef HAVE_TERMIOS_H
+ /* Restore terminal state flags. */
+ if (restore_state && terminal->restore_state)
+ tcsetattr(terminal->osinfd, TCSANOW, &terminal->attr);
+#endif
+
+ /* Close terminal handles. */
+ if (close_handles && terminal->close_handles)
+ {
+ apr_file_t *const infd = terminal->infd;
+ apr_file_t *const outfd = terminal->outfd;
+
+ if (infd)
+ {
+ terminal->infd = NULL;
+ status = apr_file_close(infd);
+ }
+
+ if (!status && outfd && outfd != infd)
+ {
+ terminal->outfd = NULL;
+ status = apr_file_close(terminal->outfd);
+ }
+ }
+ return status;
}
+/* Normal pool cleanup for a terminal. */
+static apr_status_t terminal_plain_cleanup(void *baton)
+{
+ return terminal_cleanup_handler(baton, FALSE, TRUE);
+}
+
+/* Child pool cleanup for a terminal -- does not restore echo state. */
+static apr_status_t terminal_child_cleanup(void *baton)
+{
+ return terminal_cleanup_handler(baton, FALSE, FALSE);
+}
+
+/* Explicitly close the terminal, removing its cleanup handlers. */
+static svn_error_t *
+terminal_close(terminal_handle_t *terminal)
+{
+ apr_status_t status;
+
+ /* apr_pool_cleanup_kill() removes both normal and child cleanup */
+ apr_pool_cleanup_kill(terminal->pool, terminal, terminal_plain_cleanup);
+
+ status = terminal_cleanup_handler(terminal, TRUE, TRUE);
+ if (status)
+ return svn_error_create(status, NULL, _("Can't close terminal"));
+ return SVN_NO_ERROR;
+}
+
+/* Allocate and open *TERMINAL. If NOECHO is TRUE, try to turn off
+ terminal echo. Use POOL for all allocations.*/
+static svn_error_t *
+terminal_open(terminal_handle_t **terminal, svn_boolean_t noecho,
+ apr_pool_t *pool)
+{
+ apr_status_t status;
+
+#ifdef WIN32
+ /* On Windows, we'll use the console API directly if the process has
+ a console attached; otherwise we'll just use stdin and stderr. */
+ const HANDLE conin = CreateFileW(L"CONIN$", GENERIC_READ,
+ FILE_SHARE_READ | FILE_SHARE_WRITE,
+ NULL, OPEN_EXISTING,
+ FILE_ATTRIBUTE_NORMAL, NULL);
+ *terminal = apr_palloc(pool, sizeof(terminal_handle_t));
+ if (conin != INVALID_HANDLE_VALUE)
+ {
+ /* The process has a console. */
+ CloseHandle(conin);
+ terminal_handle_init(*terminal, NULL, NULL, noecho, FALSE, NULL);
+ return SVN_NO_ERROR;
+ }
+#else /* !WIN32 */
+ /* Without evidence to the contrary, we'll assume this is *nix and
+ try to open /dev/tty. If that fails, we'll use stdin for input
+ and stderr for prompting. */
+ apr_file_t *tmpfd;
+ status = apr_file_open(&tmpfd, "/dev/tty",
+ APR_READ | APR_WRITE,
+ APR_OS_DEFAULT, pool);
+ *terminal = apr_palloc(pool, sizeof(terminal_handle_t));
+ if (!status)
+ {
+ /* We have a terminal handle that we can use for input and output. */
+ terminal_handle_init(*terminal, tmpfd, tmpfd, FALSE, TRUE, pool);
+ }
+#endif /* !WIN32 */
+ else
+ {
+ /* There is no terminal. Sigh. */
+ apr_file_t *infd;
+ apr_file_t *outfd;
+
+ status = apr_file_open_stdin(&infd, pool);
+ if (status)
+ return svn_error_wrap_apr(status, _("Can't open stdin"));
+ status = apr_file_open_stderr(&outfd, pool);
+ if (status)
+ return svn_error_wrap_apr(status, _("Can't open stderr"));
+ terminal_handle_init(*terminal, infd, outfd, FALSE, FALSE, pool);
+ }
+
+#ifdef HAVE_TERMIOS_H
+ /* Set terminal state */
+ if (0 == apr_os_file_get(&(*terminal)->osinfd, (*terminal)->infd))
+ {
+ if (0 == tcgetattr((*terminal)->osinfd, &(*terminal)->attr))
+ {
+ struct termios attr = (*terminal)->attr;
+ /* Turn off signal handling and canonical input mode */
+ attr.c_lflag &= ~(ISIG | ICANON);
+ attr.c_cc[VMIN] = 1; /* Read one byte at a time */
+ attr.c_cc[VTIME] = 0; /* No timeout, wait indefinitely */
+ attr.c_lflag &= ~(ECHO); /* Turn off echo */
+ if (0 == tcsetattr((*terminal)->osinfd, TCSAFLUSH, &attr))
+ {
+ (*terminal)->noecho = noecho;
+ (*terminal)->restore_state = TRUE;
+ }
+ }
+ }
+#endif /* HAVE_TERMIOS_H */
+
+ /* Register pool cleanup to close handles and restore echo state. */
+ apr_pool_cleanup_register((*terminal)->pool, *terminal,
+ terminal_plain_cleanup,
+ terminal_child_cleanup);
+ return SVN_NO_ERROR;
+}
+
+/* Write a null-terminated STRING to TERMINAL.
+ Use POOL for allocations related to converting STRING from UTF-8. */
+static svn_error_t *
+terminal_puts(const char *string, terminal_handle_t *terminal,
+ apr_pool_t *pool)
+{
+ svn_error_t *err;
+ apr_status_t status;
+ const char *converted;
+
+ err = svn_cmdline_cstring_from_utf8(&converted, string, pool);
+ if (err)
+ {
+ svn_error_clear(err);
+ converted = svn_cmdline_cstring_from_utf8_fuzzy(string, pool);
+ }
+
+#ifdef WIN32
+ if (!terminal->outfd)
+ {
+ /* See terminal_open; we're using Console I/O. */
+ _cputs(converted);
+ return SVN_NO_ERROR;
+ }
+#endif
+
+ status = apr_file_write_full(terminal->outfd, converted,
+ strlen(converted), NULL);
+ if (!status)
+ status = apr_file_flush(terminal->outfd);
+ if (status)
+ return svn_error_wrap_apr(status, _("Can't write to terminal"));
+ return SVN_NO_ERROR;
+}
+
+/* These codes can be returned from terminal_getc instead of a character. */
+#define TERMINAL_NONE 0x80000 /* no character read, retry */
+#define TERMINAL_DEL (TERMINAL_NONE + 1) /* the input was a deleteion */
+#define TERMINAL_EOL (TERMINAL_NONE + 2) /* end of input/end of line */
+#define TERMINAL_EOF (TERMINAL_NONE + 3) /* end of file during input */
+
+/* Helper for terminal_getc: writes CH to OUTFD as a control char. */
+#ifndef WIN32
+static void
+echo_control_char(char ch, apr_file_t *outfd)
+{
+ if (svn_ctype_iscntrl(ch))
+ {
+ const char substitute = (ch < 32? '@' + ch : '?');
+ apr_file_putc('^', outfd);
+ apr_file_putc(substitute, outfd);
+ }
+ else if (svn_ctype_isprint(ch))
+ {
+ /* Pass printable characters unchanged. */
+ apr_file_putc(ch, outfd);
+ }
+ else
+ {
+ /* Everything else is strange. */
+ apr_file_putc('^', outfd);
+ apr_file_putc('!', outfd);
+ }
+}
+#endif /* WIN32 */
+
+/* Read one character or control code from TERMINAL, returning it in CODE.
+ if CAN_ERASE and the input was a deletion, emit codes to erase the
+ last character displayed on the terminal.
+ Use POOL for all allocations. */
+static svn_error_t *
+terminal_getc(int *code, terminal_handle_t *terminal,
+ svn_boolean_t can_erase, apr_pool_t *pool)
+{
+ const svn_boolean_t echo = !terminal->noecho;
+ apr_status_t status = APR_SUCCESS;
+ char ch;
+
+#ifdef WIN32
+ if (!terminal->infd)
+ {
+ /* See terminal_open; we're using Console I/O. */
+
+ /* The following was hoisted from APR's getpass for Windows. */
+ int concode = _getch();
+ switch (concode)
+ {
+ case '\r': /* end-of-line */
+ *code = TERMINAL_EOL;
+ if (echo)
+ _cputs("\r\n");
+ break;
+
+ case EOF: /* end-of-file */
+ case 26: /* Ctrl+Z */
+ *code = TERMINAL_EOF;
+ if (echo)
+ _cputs((concode == EOF ? "[EOF]\r\n" : "^Z\r\n"));
+ break;
+
+ case 3: /* Ctrl+C, Ctrl+Break */
+ /* _getch() bypasses Ctrl+C but not Ctrl+Break detection! */
+ if (echo)
+ _cputs("^C\r\n");
+ return svn_error_create(SVN_ERR_CANCELLED, NULL, NULL);
+
+ case 0: /* Function code prefix */
+ case 0xE0:
+ concode = (concode << 4) | _getch();
+ /* Catch {DELETE}, {<--}, Num{DEL} and Num{<--} */
+ if (concode == 0xE53 || concode == 0xE4B
+ || concode == 0x053 || concode == 0x04B)
+ {
+ *code = TERMINAL_DEL;
+ if (can_erase)
+ _cputs("\b \b");
+ }
+ else
+ {
+ *code = TERMINAL_NONE;
+ _putch('\a');
+ }
+ break;
+
+ case '\b': /* BS */
+ case 127: /* DEL */
+ *code = TERMINAL_DEL;
+ if (can_erase)
+ _cputs("\b \b");
+ break;
+
+ default:
+ if (!apr_iscntrl(concode))
+ {
+ *code = (int)(unsigned char)concode;
+ _putch(echo ? concode : '*');
+ }
+ else
+ {
+ *code = TERMINAL_NONE;
+ _putch('\a');
+ }
+ }
+ return SVN_NO_ERROR;
+ }
+#elif defined(HAVE_TERMIOS_H)
+ if (terminal->restore_state)
+ {
+ /* We're using a bytewise-immediate termios input */
+ const struct termios *const attr = &terminal->attr;
+
+ status = apr_file_getc(&ch, terminal->infd);
+ if (status)
+ return svn_error_wrap_apr(status, _("Can't read from terminal"));
+
+ if (ch == attr->c_cc[VINTR] || ch == attr->c_cc[VQUIT])
+ {
+ /* Break */
+ echo_control_char(ch, terminal->outfd);
+ return svn_error_create(SVN_ERR_CANCELLED, NULL, NULL);
+ }
+ else if (ch == '\r' || ch == '\n' || ch == attr->c_cc[VEOL])
+ {
+ /* Newline */
+ *code = TERMINAL_EOL;
+ apr_file_putc('\n', terminal->outfd);
+ }
+ else if (ch == '\b' || ch == attr->c_cc[VERASE])
+ {
+ /* Delete */
+ *code = TERMINAL_DEL;
+ if (can_erase)
+ {
+ apr_file_putc('\b', terminal->outfd);
+ apr_file_putc(' ', terminal->outfd);
+ apr_file_putc('\b', terminal->outfd);
+ }
+ }
+ else if (ch == attr->c_cc[VEOF])
+ {
+ /* End of input */
+ *code = TERMINAL_EOF;
+ echo_control_char(ch, terminal->outfd);
+ }
+ else if (ch == attr->c_cc[VSUSP])
+ {
+ /* Suspend */
+ *code = TERMINAL_NONE;
+ kill(0, SIGTSTP);
+ }
+ else if (!apr_iscntrl(ch))
+ {
+ /* Normal character */
+ *code = (int)(unsigned char)ch;
+ apr_file_putc((echo ? ch : '*'), terminal->outfd);
+ }
+ else
+ {
+ /* Ignored character */
+ *code = TERMINAL_NONE;
+ apr_file_putc('\a', terminal->outfd);
+ }
+ return SVN_NO_ERROR;
+ }
+#endif /* HAVE_TERMIOS_H */
+
+ /* Fall back to plain stream-based I/O. */
+#ifndef WIN32
+ /* Wait for input on termin. This code is based on
+ apr_wait_for_io_or_timeout().
+ Note that this will return an EINTR on a signal. */
+ {
+ apr_pollfd_t pollset;
+ int n;
+
+ pollset.desc_type = APR_POLL_FILE;
+ pollset.desc.f = terminal->infd;
+ pollset.p = pool;
+ pollset.reqevents = APR_POLLIN;
+
+ status = apr_poll(&pollset, 1, &n, -1);
+
+ if (n == 1 && pollset.rtnevents & APR_POLLIN)
+ status = APR_SUCCESS;
+ }
+#endif /* !WIN32 */
+
+ if (!status)
+ status = apr_file_getc(&ch, terminal->infd);
+ if (APR_STATUS_IS_EINTR(status))
+ {
+ *code = TERMINAL_NONE;
+ return SVN_NO_ERROR;
+ }
+ else if (APR_STATUS_IS_EOF(status))
+ {
+ *code = TERMINAL_EOF;
+ return SVN_NO_ERROR;
+ }
+ else if (status)
+ return svn_error_wrap_apr(status, _("Can't read from terminal"));
+
+ *code = (int)(unsigned char)ch;
+ return SVN_NO_ERROR;
+}
+
+
/* Set @a *result to the result of prompting the user with @a
* prompt_msg. Use @ *pb to get the cancel_func and cancel_baton.
* Do not call the cancel_func if @a *pb is NULL.
@@ -91,77 +493,91 @@ prompt(const char **result,
/* XXX: If this functions ever starts using members of *pb
* which were not included in svn_cmdline_prompt_baton_t,
* we need to update svn_cmdline_prompt_user2 and its callers. */
- apr_status_t status;
- apr_file_t *fp;
+
+ svn_boolean_t saw_first_half_of_eol = FALSE;
+ svn_stringbuf_t *strbuf = svn_stringbuf_create_empty(pool);
+ terminal_handle_t *terminal;
+ int code;
char c;
- svn_stringbuf_t *strbuf = svn_stringbuf_create("", pool);
+ SVN_ERR(terminal_open(&terminal, hide, pool));
+ SVN_ERR(terminal_puts(prompt_msg, terminal, pool));
- status = apr_file_open_stdin(&fp, pool);
- if (status)
- return svn_error_wrap_apr(status, _("Can't open stdin"));
-
- if (! hide)
+ while (1)
{
- svn_boolean_t saw_first_half_of_eol = FALSE;
- SVN_ERR(svn_cmdline_fputs(prompt_msg, stderr, pool));
- fflush(stderr);
+ SVN_ERR(terminal_getc(&code, terminal, (strbuf->len > 0), pool));
+
+ /* Check for cancellation after a character has been read, some
+ input processing modes may eat ^C and we'll only notice a
+ cancellation signal after characters have been read --
+ sometimes even after a newline. */
+ if (pb)
+ SVN_ERR(pb->cancel_func(pb->cancel_baton));
- while (1)
+ switch (code)
{
- /* Hack to allow us to not block for io on the prompt, so
- * we can cancel. */
- if (pb)
- SVN_ERR(pb->cancel_func(pb->cancel_baton));
- status = wait_for_input(fp, pool);
- if (APR_STATUS_IS_EINTR(status))
- continue;
- else if (status && status != APR_ENOTIMPL)
- return svn_error_wrap_apr(status, _("Can't read stdin"));
-
- status = apr_file_getc(&c, fp);
- if (status)
- return svn_error_wrap_apr(status, _("Can't read stdin"));
-
- if (saw_first_half_of_eol)
- {
- if (c == APR_EOL_STR[1])
- break;
- else
- saw_first_half_of_eol = FALSE;
- }
- else if (c == APR_EOL_STR[0])
+ case TERMINAL_NONE:
+ /* Nothing useful happened; retry. */
+ continue;
+
+ case TERMINAL_DEL:
+ /* Delete the last input character. terminal_getc takes care
+ of erasing the feedback from the terminal, if applicable. */
+ svn_stringbuf_chop(strbuf, 1);
+ continue;
+
+ case TERMINAL_EOL:
+ /* End-of-line means end of input. Trick the EOL-detection code
+ below to stop reading. */
+ saw_first_half_of_eol = TRUE;
+ c = APR_EOL_STR[1]; /* Could be \0 but still stops reading. */
+ break;
+
+ case TERMINAL_EOF:
+ return svn_error_create(
+ APR_EOF,
+ terminal_close(terminal),
+ _("End of file while reading from terminal"));
+
+ default:
+ /* Convert the returned code back to the character. */
+ c = (char)code;
+ }
+
+ if (saw_first_half_of_eol)
+ {
+ if (c == APR_EOL_STR[1])
+ break;
+ else
+ saw_first_half_of_eol = FALSE;
+ }
+ else if (c == APR_EOL_STR[0])
+ {
+ /* GCC might complain here: "warning: will never be executed"
+ * That's fine. This is a compile-time check for "\r\n\0" */
+ if (sizeof(APR_EOL_STR) == 3)
{
- /* GCC might complain here: "warning: will never be executed"
- * That's fine. This is a compile-time check for "\r\n\0" */
- if (sizeof(APR_EOL_STR) == 3)
- {
- saw_first_half_of_eol = TRUE;
- continue;
- }
- else if (sizeof(APR_EOL_STR) == 2)
- break;
- else
- /* ### APR_EOL_STR holds more than two chars? Who
- ever heard of such a thing? */
- SVN_ERR_MALFUNCTION();
+ saw_first_half_of_eol = TRUE;
+ continue;
}
-
- svn_stringbuf_appendbyte(strbuf, c);
+ else if (sizeof(APR_EOL_STR) == 2)
+ break;
+ else
+ /* ### APR_EOL_STR holds more than two chars? Who
+ ever heard of such a thing? */
+ SVN_ERR_MALFUNCTION();
}
+
+ svn_stringbuf_appendbyte(strbuf, c);
}
- else
- {
- const char *prompt_stdout;
- size_t bufsize = 300;
- SVN_ERR(svn_cmdline_cstring_from_utf8(&prompt_stdout, prompt_msg,
- pool));
- svn_stringbuf_ensure(strbuf, bufsize);
- status = apr_password_get(prompt_stdout, strbuf->data, &bufsize);
- if (status)
- return svn_error_wrap_apr(status, _("Can't get password"));
+ if (terminal->noecho)
+ {
+ /* If terminal echo was turned off, make sure future output
+ to the terminal starts on a new line, as expected. */
+ SVN_ERR(terminal_puts(APR_EOL_STR, terminal, pool));
}
+ SVN_ERR(terminal_close(terminal));
return svn_cmdline_cstring_to_utf8(result, strbuf->data, pool);
}
@@ -179,9 +595,13 @@ maybe_print_realm(const char *realm, apr_pool_t *pool)
{
if (realm)
{
- SVN_ERR(svn_cmdline_fprintf(stderr, pool,
- _("Authentication realm: %s\n"), realm));
- fflush(stderr);
+ terminal_handle_t *terminal;
+ SVN_ERR(terminal_open(&terminal, FALSE, pool));
+ SVN_ERR(terminal_puts(
+ apr_psprintf(pool,
+ _("Authentication realm: %s\n"), realm),
+ terminal, pool));
+ SVN_ERR(terminal_close(terminal));
}
return SVN_NO_ERROR;
@@ -396,13 +816,17 @@ plaintext_prompt_helper(svn_boolean_t *may_save_plaintext,
svn_boolean_t answered = FALSE;
svn_cmdline_prompt_baton2_t *pb = baton;
const char *config_path = NULL;
+ terminal_handle_t *terminal;
if (pb)
SVN_ERR(svn_config_get_user_config_path(&config_path, pb->config_dir,
SVN_CONFIG_CATEGORY_SERVERS, pool));
- SVN_ERR(svn_cmdline_fprintf(stderr, pool, prompt_text, realmstring,
- config_path));
+ SVN_ERR(terminal_open(&terminal, FALSE, pool));
+ SVN_ERR(terminal_puts(apr_psprintf(pool, prompt_text,
+ realmstring, config_path),
+ terminal, pool));
+ SVN_ERR(terminal_close(terminal));
do
{
diff --git a/subversion/libsvn_subr/properties.c b/subversion/libsvn_subr/properties.c
index 442b88a..738d00f 100644
--- a/subversion/libsvn_subr/properties.c
+++ b/subversion/libsvn_subr/properties.c
@@ -27,10 +27,96 @@
#include <apr_hash.h>
#include <apr_tables.h>
#include <string.h> /* for strncmp() */
+#include "svn_hash.h"
#include "svn_string.h"
#include "svn_props.h"
#include "svn_error.h"
#include "svn_ctype.h"
+#include "private/svn_subr_private.h"
+
+
+/* All Subversion-specific versioned node properties
+ * known to this client, that are applicable to both a file and a dir.
+ */
+#define SVN_PROP__NODE_COMMON_PROPS SVN_PROP_MERGEINFO, \
+ SVN_PROP_TEXT_TIME, \
+ SVN_PROP_OWNER, \
+ SVN_PROP_GROUP, \
+ SVN_PROP_UNIX_MODE,
+
+/* All Subversion-specific versioned node properties
+ * known to this client, that are applicable to a dir only.
+ */
+#define SVN_PROP__NODE_DIR_ONLY_PROPS SVN_PROP_IGNORE, \
+ SVN_PROP_INHERITABLE_IGNORES, \
+ SVN_PROP_INHERITABLE_AUTO_PROPS, \
+ SVN_PROP_EXTERNALS,
+
+/* All Subversion-specific versioned node properties
+ * known to this client, that are applicable to a file only.
+ */
+#define SVN_PROP__NODE_FILE_ONLY_PROPS SVN_PROP_MIME_TYPE, \
+ SVN_PROP_EOL_STYLE, \
+ SVN_PROP_KEYWORDS, \
+ SVN_PROP_EXECUTABLE, \
+ SVN_PROP_NEEDS_LOCK, \
+ SVN_PROP_SPECIAL,
+
+static const char *const known_rev_props[]
+ = { SVN_PROP_REVISION_ALL_PROPS
+ NULL };
+
+static const char *const known_node_props[]
+ = { SVN_PROP__NODE_COMMON_PROPS
+ SVN_PROP__NODE_DIR_ONLY_PROPS
+ SVN_PROP__NODE_FILE_ONLY_PROPS
+ NULL };
+
+static const char *const known_dir_props[]
+ = { SVN_PROP__NODE_COMMON_PROPS
+ SVN_PROP__NODE_DIR_ONLY_PROPS
+ NULL };
+
+static const char *const known_file_props[]
+ = { SVN_PROP__NODE_COMMON_PROPS
+ SVN_PROP__NODE_FILE_ONLY_PROPS
+ NULL };
+
+static svn_boolean_t
+is_known_prop(const char *prop_name,
+ const char *const *known_props)
+{
+ while (*known_props)
+ {
+ if (strcmp(prop_name, *known_props++) == 0)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+svn_boolean_t
+svn_prop_is_known_svn_rev_prop(const char *prop_name)
+{
+ return is_known_prop(prop_name, known_rev_props);
+}
+
+svn_boolean_t
+svn_prop_is_known_svn_node_prop(const char *prop_name)
+{
+ return is_known_prop(prop_name, known_node_props);
+}
+
+svn_boolean_t
+svn_prop_is_known_svn_file_prop(const char *prop_name)
+{
+ return is_known_prop(prop_name, known_file_props);
+}
+
+svn_boolean_t
+svn_prop_is_known_svn_dir_prop(const char *prop_name)
+{
+ return is_known_prop(prop_name, known_dir_props);
+}
svn_boolean_t
@@ -62,31 +148,42 @@ svn_prop_has_svn_prop(const apr_hash_t *props, apr_pool_t *pool)
}
+#define SIZEOF_WC_PREFIX (sizeof(SVN_PROP_WC_PREFIX) - 1)
+#define SIZEOF_ENTRY_PREFIX (sizeof(SVN_PROP_ENTRY_PREFIX) - 1)
+
+svn_prop_kind_t
+svn_property_kind2(const char *prop_name)
+{
+
+ if (strncmp(prop_name, SVN_PROP_WC_PREFIX, SIZEOF_WC_PREFIX) == 0)
+ return svn_prop_wc_kind;
+
+ if (strncmp(prop_name, SVN_PROP_ENTRY_PREFIX, SIZEOF_ENTRY_PREFIX) == 0)
+ return svn_prop_entry_kind;
+
+ return svn_prop_regular_kind;
+}
+
+
+/* NOTE: this function is deprecated, but we cannot move it to deprecated.c
+ because we need the SIZEOF_*_PREFIX constant symbols defined above. */
svn_prop_kind_t
svn_property_kind(int *prefix_len,
const char *prop_name)
{
- apr_size_t wc_prefix_len = sizeof(SVN_PROP_WC_PREFIX) - 1;
- apr_size_t entry_prefix_len = sizeof(SVN_PROP_ENTRY_PREFIX) - 1;
-
- if (strncmp(prop_name, SVN_PROP_WC_PREFIX, wc_prefix_len) == 0)
- {
- if (prefix_len)
- *prefix_len = (int) wc_prefix_len;
- return svn_prop_wc_kind;
- }
+ svn_prop_kind_t kind = svn_property_kind2(prop_name);
- if (strncmp(prop_name, SVN_PROP_ENTRY_PREFIX, entry_prefix_len) == 0)
+ if (prefix_len)
{
- if (prefix_len)
- *prefix_len = (int) entry_prefix_len;
- return svn_prop_entry_kind;
+ if (kind == svn_prop_wc_kind)
+ *prefix_len = SIZEOF_WC_PREFIX;
+ else if (kind == svn_prop_entry_kind)
+ *prefix_len = SIZEOF_ENTRY_PREFIX;
+ else
+ *prefix_len = 0;
}
- /* else... */
- if (prefix_len)
- *prefix_len = 0;
- return svn_prop_regular_kind;
+ return kind;
}
@@ -111,7 +208,7 @@ svn_categorize_props(const apr_array_header_t *proplist,
enum svn_prop_kind kind;
prop = &APR_ARRAY_IDX(proplist, i, svn_prop_t);
- kind = svn_property_kind(NULL, prop->name);
+ kind = svn_property_kind2(prop->name);
newprop = NULL;
if (kind == svn_prop_regular_kind)
@@ -149,8 +246,8 @@ svn_categorize_props(const apr_array_header_t *proplist,
svn_error_t *
svn_prop_diffs(apr_array_header_t **propdiffs,
- apr_hash_t *target_props,
- apr_hash_t *source_props,
+ const apr_hash_t *target_props,
+ const apr_hash_t *source_props,
apr_pool_t *pool)
{
apr_hash_index_t *hi;
@@ -162,7 +259,8 @@ svn_prop_diffs(apr_array_header_t **propdiffs,
/* Loop over SOURCE_PROPS and examine each key. This will allow us to
detect any `deletion' events or `set-modification' events. */
- for (hi = apr_hash_first(pool, source_props); hi; hi = apr_hash_next(hi))
+ for (hi = apr_hash_first(pool, (apr_hash_t *)source_props); hi;
+ hi = apr_hash_next(hi))
{
const void *key;
apr_ssize_t klen;
@@ -174,7 +272,7 @@ svn_prop_diffs(apr_array_header_t **propdiffs,
propval1 = val;
/* Does property name exist in TARGET_PROPS? */
- propval2 = apr_hash_get(target_props, key, klen);
+ propval2 = apr_hash_get((apr_hash_t *)target_props, key, klen);
if (propval2 == NULL)
{
@@ -194,7 +292,8 @@ svn_prop_diffs(apr_array_header_t **propdiffs,
/* Loop over TARGET_PROPS and examine each key. This allows us to
detect `set-creation' events */
- for (hi = apr_hash_first(pool, target_props); hi; hi = apr_hash_next(hi))
+ for (hi = apr_hash_first(pool, (apr_hash_t *)target_props); hi;
+ hi = apr_hash_next(hi))
{
const void *key;
apr_ssize_t klen;
@@ -206,7 +305,7 @@ svn_prop_diffs(apr_array_header_t **propdiffs,
propval = val;
/* Does property name exist in SOURCE_PROPS? */
- if (NULL == apr_hash_get(source_props, key, klen))
+ if (NULL == apr_hash_get((apr_hash_t *)source_props, key, klen))
{
/* Add a set (creation) event to the array */
svn_prop_t *p = apr_array_push(ary);
@@ -222,6 +321,106 @@ svn_prop_diffs(apr_array_header_t **propdiffs,
}
apr_hash_t *
+svn_prop__patch(const apr_hash_t *original_props,
+ const apr_array_header_t *prop_changes,
+ apr_pool_t *pool)
+{
+ apr_hash_t *props = apr_hash_copy(pool, original_props);
+ int i;
+
+ for (i = 0; i < prop_changes->nelts; i++)
+ {
+ const svn_prop_t *p = &APR_ARRAY_IDX(prop_changes, i, svn_prop_t);
+
+ svn_hash_sets(props, p->name, p->value);
+ }
+ return props;
+}
+
+/**
+ * Reallocate the members of PROP using POOL.
+ */
+static void
+svn_prop__members_dup(svn_prop_t *prop, apr_pool_t *pool)
+{
+ if (prop->name)
+ prop->name = apr_pstrdup(pool, prop->name);
+ if (prop->value)
+ prop->value = svn_string_dup(prop->value, pool);
+}
+
+svn_prop_t *
+svn_prop_dup(const svn_prop_t *prop, apr_pool_t *pool)
+{
+ svn_prop_t *new_prop = apr_palloc(pool, sizeof(*new_prop));
+
+ *new_prop = *prop;
+
+ svn_prop__members_dup(new_prop, pool);
+
+ return new_prop;
+}
+
+apr_array_header_t *
+svn_prop_array_dup(const apr_array_header_t *array, apr_pool_t *pool)
+{
+ int i;
+ apr_array_header_t *new_array = apr_array_copy(pool, array);
+ for (i = 0; i < new_array->nelts; ++i)
+ {
+ svn_prop_t *elt = &APR_ARRAY_IDX(new_array, i, svn_prop_t);
+ svn_prop__members_dup(elt, pool);
+ }
+ return new_array;
+}
+
+apr_array_header_t *
+svn_prop_hash_to_array(const apr_hash_t *hash,
+ apr_pool_t *pool)
+{
+ apr_hash_index_t *hi;
+ apr_array_header_t *array = apr_array_make(pool,
+ apr_hash_count((apr_hash_t *)hash),
+ sizeof(svn_prop_t));
+
+ for (hi = apr_hash_first(pool, (apr_hash_t *)hash); hi;
+ hi = apr_hash_next(hi))
+ {
+ const void *key;
+ void *val;
+ svn_prop_t prop;
+
+ apr_hash_this(hi, &key, NULL, &val);
+ prop.name = key;
+ prop.value = val;
+ APR_ARRAY_PUSH(array, svn_prop_t) = prop;
+ }
+
+ return array;
+}
+
+apr_hash_t *
+svn_prop_hash_dup(const apr_hash_t *hash,
+ apr_pool_t *pool)
+{
+ apr_hash_index_t *hi;
+ apr_hash_t *new_hash = apr_hash_make(pool);
+
+ for (hi = apr_hash_first(pool, (apr_hash_t *)hash); hi;
+ hi = apr_hash_next(hi))
+ {
+ const void *key;
+ apr_ssize_t klen;
+ void *prop;
+
+ apr_hash_this(hi, &key, &klen, &prop);
+ apr_hash_set(new_hash, apr_pstrmemdup(pool, key, klen), klen,
+ svn_string_dup(prop, pool));
+ }
+ return new_hash;
+}
+
+apr_hash_t *
svn_prop_array_to_hash(const apr_array_header_t *properties,
apr_pool_t *pool)
{
@@ -231,7 +430,7 @@ svn_prop_array_to_hash(const apr_array_header_t *properties,
for (i = 0; i < properties->nelts; i++)
{
const svn_prop_t *prop = &APR_ARRAY_IDX(properties, i, svn_prop_t);
- apr_hash_set(prop_hash, prop->name, APR_HASH_KEY_STRING, prop->value);
+ svn_hash_sets(prop_hash, prop->name, prop->value);
}
return prop_hash;
@@ -291,7 +490,7 @@ svn_prop_name_is_valid(const char *prop_name)
}
const char *
-svn_prop_get_value(apr_hash_t *props,
+svn_prop_get_value(const apr_hash_t *props,
const char *prop_name)
{
svn_string_t *str;
@@ -299,7 +498,7 @@ svn_prop_get_value(apr_hash_t *props,
if (!props)
return NULL;
- str = apr_hash_get(props, prop_name, APR_HASH_KEY_STRING);
+ str = svn_hash_gets((apr_hash_t *)props, prop_name);
if (str)
return str->data;
diff --git a/subversion/libsvn_subr/pseudo_md5.c b/subversion/libsvn_subr/pseudo_md5.c
new file mode 100644
index 0000000..8c194f7
--- /dev/null
+++ b/subversion/libsvn_subr/pseudo_md5.c
@@ -0,0 +1,422 @@
+/*
+ * This is work is derived from material Copyright RSA Data Security, Inc.
+ *
+ * The RSA copyright statement and Licence for that original material is
+ * included below. This is followed by the Apache copyright statement and
+ * licence for the modifications made to that material.
+ */
+
+/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
+ */
+
+/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
+ rights reserved.
+
+ License to copy and use this software is granted provided that it
+ is identified as the "RSA Data Security, Inc. MD5 Message-Digest
+ Algorithm" in all material mentioning or referencing this software
+ or this function.
+
+ License is also granted to make and use derivative works provided
+ that such works are identified as "derived from the RSA Data
+ Security, Inc. MD5 Message-Digest Algorithm" in all material
+ mentioning or referencing the derived work.
+
+ RSA Data Security, Inc. makes no representations concerning either
+ the merchantability of this software or the suitability of this
+ software for any particular purpose. It is provided "as is"
+ without express or implied warranty of any kind.
+
+ These notices must be retained in any copies of any part of this
+ documentation and/or software.
+ */
+
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * The apr_md5_encode() routine uses much code obtained from the FreeBSD 3.0
+ * MD5 crypt() function, which is licenced as follows:
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * <phk@login.dknet.dk> wrote this file. As long as you retain this notice you
+ * can do whatever you want with this stuff. If we meet some day, and you think
+ * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
+ * ----------------------------------------------------------------------------
+ */
+
+/*
+ * pseudo_md5.c: md5-esque hash sum calculation for short data blocks.
+ * Code taken and adapted from the APR (see licenses above).
+ */
+#include "private/svn_pseudo_md5.h"
+
+/* Constants for MD5 calculation.
+ */
+
+#define S11 7
+#define S12 12
+#define S13 17
+#define S14 22
+#define S21 5
+#define S22 9
+#define S23 14
+#define S24 20
+#define S31 4
+#define S32 11
+#define S33 16
+#define S34 23
+#define S41 6
+#define S42 10
+#define S43 15
+#define S44 21
+
+/* F, G, H and I are basic MD5 functions.
+ */
+#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
+#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
+#define H(x, y, z) ((x) ^ (y) ^ (z))
+#define I(x, y, z) ((y) ^ ((x) | (~z)))
+
+/* ROTATE_LEFT rotates x left n bits.
+ */
+#if defined(_MSC_VER) && _MSC_VER >= 1310
+#pragma intrinsic(_rotl)
+#define ROTATE_LEFT(x, n) (_rotl(x,n))
+#else
+#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
+#endif
+
+/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
+ * Rotation is separate from addition to prevent recomputation.
+ */
+#define FF(a, b, c, d, x, s, ac) { \
+ (a) += F ((b), (c), (d)) + (x) + (apr_uint32_t)(ac); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+ }
+#define GG(a, b, c, d, x, s, ac) { \
+ (a) += G ((b), (c), (d)) + (x) + (apr_uint32_t)(ac); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+ }
+#define HH(a, b, c, d, x, s, ac) { \
+ (a) += H ((b), (c), (d)) + (x) + (apr_uint32_t)(ac); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+ }
+#define II(a, b, c, d, x, s, ac) { \
+ (a) += I ((b), (c), (d)) + (x) + (apr_uint32_t)(ac); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+ }
+
+/* The idea of the functions below is as follows:
+ *
+ * - The core MD5 algorithm does not assume that the "important" data
+ * is at the begin of the encryption block, followed by e.g. 0.
+ * Instead, all bits are equally relevant.
+ *
+ * - If some bytes in the input are known to be 0, we may hard-code them.
+ * With the previous property, it is safe to move them to the upper end
+ * of the encryption block to maximize the number of steps that can be
+ * pre-calculated.
+ *
+ * - Variable-length streams will use the upper 8 byte of the last
+ * encryption block to store the stream length in bits (to make 0, 00,
+ * 000, ... etc. produce different hash sums).
+ *
+ * - We will hash at most 63 bytes, i.e. 504 bits. In the standard stream
+ * implementation, the upper 6 bytes of the last encryption block would
+ * be 0. We will put at least one non-NULL value in the last 4 bytes.
+ * Therefore, our input will always be different to a standard MD5 stream
+ * implementation in either block count, content or both.
+ *
+ * - Our length indicator also varies with the number bytes in the input.
+ * Hence, different pseudo-MD5 input length produces different output
+ * (with "cryptographic probability") even if the content is all 0 or
+ * otherwise identical.
+ *
+ * - Collisions between pseudo-MD5 and pseudo-MD5 as well as pseudo-MD5
+ * and standard MD5 are as likely as any other MD5 collision.
+ */
+
+void svn__pseudo_md5_15(apr_uint32_t digest[4],
+ const apr_uint32_t x[4])
+{
+ apr_uint32_t a = 0x67452301;
+ apr_uint32_t b = 0xefcdab89;
+ apr_uint32_t c = 0x98badcfe;
+ apr_uint32_t d = 0x10325476;
+
+ /* make sure byte 63 gets the marker independently of BE / LE */
+ apr_uint32_t x3n = x[3] ^ 0xffffffff;
+
+ /* Round 1 */
+ FF(a, b, c, d, 0, S11, 0xd76aa478); /* 1 */
+ FF(d, a, b, c, 0, S12, 0xe8c7b756); /* 2 */
+ FF(c, d, a, b, 0, S13, 0x242070db); /* 3 */
+ FF(b, c, d, a, 0, S14, 0xc1bdceee); /* 4 */
+ FF(a, b, c, d, 0, S11, 0xf57c0faf); /* 5 */
+ FF(d, a, b, c, 0, S12, 0x4787c62a); /* 6 */
+ FF(c, d, a, b, 0, S13, 0xa8304613); /* 7 */
+ FF(b, c, d, a, 0, S14, 0xfd469501); /* 8 */
+ FF(a, b, c, d, 0, S11, 0x698098d8); /* 9 */
+ FF(d, a, b, c, 0, S12, 0x8b44f7af); /* 10 */
+ FF(c, d, a, b, 0, S13, 0xffff5bb1); /* 11 */
+ FF(b, c, d, a, 0, S14, 0x895cd7be); /* 12 */
+ FF(a, b, c, d, x[0], S11, 0x6b901122); /* 13 */
+ FF(d, a, b, c, x[1], S12, 0xfd987193); /* 14 */
+ FF(c, d, a, b, x[2], S13, 0xa679438e); /* 15 */
+ FF(b, c, d, a, x3n, S14, 0x49b40821); /* 16 */
+
+ /* Round 2 */
+ GG(a, b, c, d, 0, S21, 0xf61e2562); /* 17 */
+ GG(d, a, b, c, 0, S22, 0xc040b340); /* 18 */
+ GG(c, d, a, b, 0, S23, 0x265e5a51); /* 19 */
+ GG(b, c, d, a, 0, S24, 0xe9b6c7aa); /* 20 */
+ GG(a, b, c, d, 0, S21, 0xd62f105d); /* 21 */
+ GG(d, a, b, c, 0, S22, 0x2441453); /* 22 */
+ GG(c, d, a, b, x3n, S23, 0xd8a1e681); /* 23 */
+ GG(b, c, d, a, 0, S24, 0xe7d3fbc8); /* 24 */
+ GG(a, b, c, d, 0, S21, 0x21e1cde6); /* 25 */
+ GG(d, a, b, c, x[2], S22, 0xc33707d6); /* 26 */
+ GG(c, d, a, b, 0, S23, 0xf4d50d87); /* 27 */
+ GG(b, c, d, a, 0, S24, 0x455a14ed); /* 28 */
+ GG(a, b, c, d, x[1], S21, 0xa9e3e905); /* 29 */
+ GG(d, a, b, c, 0, S22, 0xfcefa3f8); /* 30 */
+ GG(c, d, a, b, 0, S23, 0x676f02d9); /* 31 */
+ GG(b, c, d, a, x[0], S24, 0x8d2a4c8a); /* 32 */
+
+ /* Round 3 */
+ HH(a, b, c, d, 0, S31, 0xfffa3942); /* 33 */
+ HH(d, a, b, c, 0, S32, 0x8771f681); /* 34 */
+ HH(c, d, a, b, 0, S33, 0x6d9d6122); /* 35 */
+ HH(b, c, d, a, x[2], S34, 0xfde5380c); /* 36 */
+ HH(a, b, c, d, 0, S31, 0xa4beea44); /* 37 */
+ HH(d, a, b, c, 0, S32, 0x4bdecfa9); /* 38 */
+ HH(c, d, a, b, 0, S33, 0xf6bb4b60); /* 39 */
+ HH(b, c, d, a, 0, S34, 0xbebfbc70); /* 40 */
+ HH(a, b, c, d, x[1], S31, 0x289b7ec6); /* 41 */
+ HH(d, a, b, c, 0, S32, 0xeaa127fa); /* 42 */
+ HH(c, d, a, b, 0, S33, 0xd4ef3085); /* 43 */
+ HH(b, c, d, a, 0, S34, 0x4881d05); /* 44 */
+ HH(a, b, c, d, 0, S31, 0xd9d4d039); /* 45 */
+ HH(d, a, b, c, x[0], S32, 0xe6db99e5); /* 46 */
+ HH(c, d, a, b, x3n, S33, 0x1fa27cf8); /* 47 */
+ HH(b, c, d, a, 0, S34, 0xc4ac5665); /* 48 */
+
+ /* Round 4 */
+ II(a, b, c, d, 0, S41, 0xf4292244); /* 49 */
+ II(d, a, b, c, 0, S42, 0x432aff97); /* 50 */
+ II(c, d, a, b, x[2], S43, 0xab9423a7); /* 51 */
+ II(b, c, d, a, 0, S44, 0xfc93a039); /* 52 */
+ II(a, b, c, d, x[0], S41, 0x655b59c3); /* 53 */
+ II(d, a, b, c, 0, S42, 0x8f0ccc92); /* 54 */
+ II(c, d, a, b, 0, S43, 0xffeff47d); /* 55 */
+ II(b, c, d, a, 0, S44, 0x85845dd1); /* 56 */
+ II(a, b, c, d, 0, S41, 0x6fa87e4f); /* 57 */
+ II(d, a, b, c, x3n, S42, 0xfe2ce6e0); /* 58 */
+ II(c, d, a, b, 0, S43, 0xa3014314); /* 59 */
+ II(b, c, d, a, x[1], S44, 0x4e0811a1); /* 60 */
+ II(a, b, c, d, 0, S41, 0xf7537e82); /* 61 */
+ II(d, a, b, c, 0, S42, 0xbd3af235); /* 62 */
+ II(c, d, a, b, 0, S43, 0x2ad7d2bb); /* 63 */
+ II(b, c, d, a, 0, S44, 0xeb86d391); /* 64 */
+
+ digest[0] = a;
+ digest[1] = b;
+ digest[2] = c;
+ digest[3] = d;
+}
+
+void svn__pseudo_md5_31(apr_uint32_t digest[4],
+ const apr_uint32_t x[8])
+{
+ apr_uint32_t a = 0x67452301;
+ apr_uint32_t b = 0xefcdab89;
+ apr_uint32_t c = 0x98badcfe;
+ apr_uint32_t d = 0x10325476;
+
+ /* make sure byte 63 gets the marker independently of BE / LE */
+ apr_uint32_t x7n = x[7] ^ 0xfefefefe;
+
+ /* Round 1 */
+ FF(a, b, c, d, 0, S11, 0xd76aa478); /* 1 */
+ FF(d, a, b, c, 0, S12, 0xe8c7b756); /* 2 */
+ FF(c, d, a, b, 0, S13, 0x242070db); /* 3 */
+ FF(b, c, d, a, 0, S14, 0xc1bdceee); /* 4 */
+ FF(a, b, c, d, 0, S11, 0xf57c0faf); /* 5 */
+ FF(d, a, b, c, 0, S12, 0x4787c62a); /* 6 */
+ FF(c, d, a, b, 0, S13, 0xa8304613); /* 7 */
+ FF(b, c, d, a, 0, S14, 0xfd469501); /* 8 */
+ FF(a, b, c, d, x[0], S11, 0x698098d8); /* 9 */
+ FF(d, a, b, c, x[1], S12, 0x8b44f7af); /* 10 */
+ FF(c, d, a, b, x[2], S13, 0xffff5bb1); /* 11 */
+ FF(b, c, d, a, x[3], S14, 0x895cd7be); /* 12 */
+ FF(a, b, c, d, x[4], S11, 0x6b901122); /* 13 */
+ FF(d, a, b, c, x[5], S12, 0xfd987193); /* 14 */
+ FF(c, d, a, b, x[6], S13, 0xa679438e); /* 15 */
+ FF(b, c, d, a, x7n, S14, 0x49b40821); /* 16 */
+
+ /* Round 2 */
+ GG(a, b, c, d, 0, S21, 0xf61e2562); /* 17 */
+ GG(d, a, b, c, 0, S22, 0xc040b340); /* 18 */
+ GG(c, d, a, b, x[3], S23, 0x265e5a51); /* 19 */
+ GG(b, c, d, a, 0, S24, 0xe9b6c7aa); /* 20 */
+ GG(a, b, c, d, 0, S21, 0xd62f105d); /* 21 */
+ GG(d, a, b, c, x[2], S22, 0x2441453); /* 22 */
+ GG(c, d, a, b, x7n, S23, 0xd8a1e681); /* 23 */
+ GG(b, c, d, a, 0, S24, 0xe7d3fbc8); /* 24 */
+ GG(a, b, c, d, x[1], S21, 0x21e1cde6); /* 25 */
+ GG(d, a, b, c, x[6], S22, 0xc33707d6); /* 26 */
+ GG(c, d, a, b, 0, S23, 0xf4d50d87); /* 27 */
+ GG(b, c, d, a, x[0], S24, 0x455a14ed); /* 28 */
+ GG(a, b, c, d, x[5], S21, 0xa9e3e905); /* 29 */
+ GG(d, a, b, c, 0, S22, 0xfcefa3f8); /* 30 */
+ GG(c, d, a, b, 0, S23, 0x676f02d9); /* 31 */
+ GG(b, c, d, a, x[4], S24, 0x8d2a4c8a); /* 32 */
+
+ /* Round 3 */
+ HH(a, b, c, d, 0, S31, 0xfffa3942); /* 33 */
+ HH(d, a, b, c, x[0], S32, 0x8771f681); /* 34 */
+ HH(c, d, a, b, x[3], S33, 0x6d9d6122); /* 35 */
+ HH(b, c, d, a, x[6], S34, 0xfde5380c); /* 36 */
+ HH(a, b, c, d, 0, S31, 0xa4beea44); /* 37 */
+ HH(d, a, b, c, 0, S32, 0x4bdecfa9); /* 38 */
+ HH(c, d, a, b, 0, S33, 0xf6bb4b60); /* 39 */
+ HH(b, c, d, a, x[2], S34, 0xbebfbc70); /* 40 */
+ HH(a, b, c, d, x[5], S31, 0x289b7ec6); /* 41 */
+ HH(d, a, b, c, 0, S32, 0xeaa127fa); /* 42 */
+ HH(c, d, a, b, 0, S33, 0xd4ef3085); /* 43 */
+ HH(b, c, d, a, 0, S34, 0x4881d05); /* 44 */
+ HH(a, b, c, d, x[1], S31, 0xd9d4d039); /* 45 */
+ HH(d, a, b, c, x[4], S32, 0xe6db99e5); /* 46 */
+ HH(c, d, a, b, x7n, S33, 0x1fa27cf8); /* 47 */
+ HH(b, c, d, a, 0, S34, 0xc4ac5665); /* 48 */
+
+ /* Round 4 */
+ II(a, b, c, d, 0, S41, 0xf4292244); /* 49 */
+ II(d, a, b, c, 0, S42, 0x432aff97); /* 50 */
+ II(c, d, a, b, x[6], S43, 0xab9423a7); /* 51 */
+ II(b, c, d, a, 0, S44, 0xfc93a039); /* 52 */
+ II(a, b, c, d, x[4], S41, 0x655b59c3); /* 53 */
+ II(d, a, b, c, 0, S42, 0x8f0ccc92); /* 54 */
+ II(c, d, a, b, x[2], S43, 0xffeff47d); /* 55 */
+ II(b, c, d, a, 0, S44, 0x85845dd1); /* 56 */
+ II(a, b, c, d, x[0], S41, 0x6fa87e4f); /* 57 */
+ II(d, a, b, c, x7n, S42, 0xfe2ce6e0); /* 58 */
+ II(c, d, a, b, 0, S43, 0xa3014314); /* 59 */
+ II(b, c, d, a, x[5], S44, 0x4e0811a1); /* 60 */
+ II(a, b, c, d, 0, S41, 0xf7537e82); /* 61 */
+ II(d, a, b, c, x[3], S42, 0xbd3af235); /* 62 */
+ II(c, d, a, b, 0, S43, 0x2ad7d2bb); /* 63 */
+ II(b, c, d, a, x[1], S44, 0xeb86d391); /* 64 */
+
+ digest[0] = a;
+ digest[1] = b;
+ digest[2] = c;
+ digest[3] = d;
+}
+
+void svn__pseudo_md5_63(apr_uint32_t digest[4],
+ const apr_uint32_t x[16])
+{
+ apr_uint32_t a = 0x67452301;
+ apr_uint32_t b = 0xefcdab89;
+ apr_uint32_t c = 0x98badcfe;
+ apr_uint32_t d = 0x10325476;
+
+ /* make sure byte 63 gets the marker independently of BE / LE */
+ apr_uint32_t x15n = x[15] ^ 0xfcfcfcfc;
+
+ /* Round 1 */
+ FF(a, b, c, d, x[0], S11, 0xd76aa478); /* 1 */
+ FF(d, a, b, c, x[1], S12, 0xe8c7b756); /* 2 */
+ FF(c, d, a, b, x[2], S13, 0x242070db); /* 3 */
+ FF(b, c, d, a, x[3], S14, 0xc1bdceee); /* 4 */
+ FF(a, b, c, d, x[4], S11, 0xf57c0faf); /* 5 */
+ FF(d, a, b, c, x[5], S12, 0x4787c62a); /* 6 */
+ FF(c, d, a, b, x[6], S13, 0xa8304613); /* 7 */
+ FF(b, c, d, a, x[7], S14, 0xfd469501); /* 8 */
+ FF(a, b, c, d, x[8], S11, 0x698098d8); /* 9 */
+ FF(d, a, b, c, x[9], S12, 0x8b44f7af); /* 10 */
+ FF(c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
+ FF(b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
+ FF(a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
+ FF(d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
+ FF(c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
+ FF(b, c, d, a, x15n, S14, 0x49b40821); /* 16 */
+
+ /* Round 2 */
+ GG(a, b, c, d, x[1], S21, 0xf61e2562); /* 17 */
+ GG(d, a, b, c, x[6], S22, 0xc040b340); /* 18 */
+ GG(c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
+ GG(b, c, d, a, x[0], S24, 0xe9b6c7aa); /* 20 */
+ GG(a, b, c, d, x[5], S21, 0xd62f105d); /* 21 */
+ GG(d, a, b, c, x[10], S22, 0x2441453); /* 22 */
+ GG(c, d, a, b, x15n, S23, 0xd8a1e681); /* 23 */
+ GG(b, c, d, a, x[4], S24, 0xe7d3fbc8); /* 24 */
+ GG(a, b, c, d, x[9], S21, 0x21e1cde6); /* 25 */
+ GG(d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
+ GG(c, d, a, b, x[3], S23, 0xf4d50d87); /* 27 */
+ GG(b, c, d, a, x[8], S24, 0x455a14ed); /* 28 */
+ GG(a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
+ GG(d, a, b, c, x[2], S22, 0xfcefa3f8); /* 30 */
+ GG(c, d, a, b, x[7], S23, 0x676f02d9); /* 31 */
+ GG(b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
+
+ /* Round 3 */
+ HH(a, b, c, d, x[5], S31, 0xfffa3942); /* 33 */
+ HH(d, a, b, c, x[8], S32, 0x8771f681); /* 34 */
+ HH(c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
+ HH(b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
+ HH(a, b, c, d, x[1], S31, 0xa4beea44); /* 37 */
+ HH(d, a, b, c, x[4], S32, 0x4bdecfa9); /* 38 */
+ HH(c, d, a, b, x[7], S33, 0xf6bb4b60); /* 39 */
+ HH(b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
+ HH(a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
+ HH(d, a, b, c, x[0], S32, 0xeaa127fa); /* 42 */
+ HH(c, d, a, b, x[3], S33, 0xd4ef3085); /* 43 */
+ HH(b, c, d, a, x[6], S34, 0x4881d05); /* 44 */
+ HH(a, b, c, d, x[9], S31, 0xd9d4d039); /* 45 */
+ HH(d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
+ HH(c, d, a, b, x15n, S33, 0x1fa27cf8); /* 47 */
+ HH(b, c, d, a, x[2], S34, 0xc4ac5665); /* 48 */
+
+ /* Round 4 */
+ II(a, b, c, d, x[0], S41, 0xf4292244); /* 49 */
+ II(d, a, b, c, x[7], S42, 0x432aff97); /* 50 */
+ II(c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
+ II(b, c, d, a, x[5], S44, 0xfc93a039); /* 52 */
+ II(a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
+ II(d, a, b, c, x[3], S42, 0x8f0ccc92); /* 54 */
+ II(c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
+ II(b, c, d, a, x[1], S44, 0x85845dd1); /* 56 */
+ II(a, b, c, d, x[8], S41, 0x6fa87e4f); /* 57 */
+ II(d, a, b, c, x15n, S42, 0xfe2ce6e0); /* 58 */
+ II(c, d, a, b, x[6], S43, 0xa3014314); /* 59 */
+ II(b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
+ II(a, b, c, d, x[4], S41, 0xf7537e82); /* 61 */
+ II(d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
+ II(c, d, a, b, x[2], S43, 0x2ad7d2bb); /* 63 */
+ II(b, c, d, a, x[9], S44, 0xeb86d391); /* 64 */
+
+ digest[0] = a;
+ digest[1] = b;
+ digest[2] = c;
+ digest[3] = d;
+}
diff --git a/subversion/libsvn_subr/quoprint.c b/subversion/libsvn_subr/quoprint.c
index ef56933..bb9869d 100644
--- a/subversion/libsvn_subr/quoprint.c
+++ b/subversion/libsvn_subr/quoprint.c
@@ -120,7 +120,7 @@ encode_data(void *baton, const char *data, apr_size_t *len)
{
struct encode_baton *eb = baton;
apr_pool_t *subpool = svn_pool_create(eb->pool);
- svn_stringbuf_t *encoded = svn_stringbuf_create("", subpool);
+ svn_stringbuf_t *encoded = svn_stringbuf_create_empty(subpool);
apr_size_t enclen;
svn_error_t *err = SVN_NO_ERROR;
@@ -177,7 +177,7 @@ svn_quoprint_encode(svn_stream_t *output, apr_pool_t *pool)
svn_stringbuf_t *
svn_quoprint_encode_string(const svn_stringbuf_t *str, apr_pool_t *pool)
{
- svn_stringbuf_t *encoded = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *encoded = svn_stringbuf_create_empty(pool);
int linelen = 0;
encode_bytes(encoded, str->data, str->len, &linelen);
@@ -233,7 +233,7 @@ decode_bytes(svn_stringbuf_t *str, const char *data, apr_size_t len,
find2 = strchr(hextab, inbuf[2]);
if (find1 != NULL && find2 != NULL)
{
- c = ((find1 - hextab) << 4) | (find2 - hextab);
+ c = (char)(((find1 - hextab) << 4) | (find2 - hextab));
svn_stringbuf_appendbyte(str, c);
}
*inbuflen = 0;
@@ -254,7 +254,7 @@ decode_data(void *baton, const char *data, apr_size_t *len)
/* Decode this block of data. */
subpool = svn_pool_create(db->pool);
- decoded = svn_stringbuf_create("", subpool);
+ decoded = svn_stringbuf_create_empty(subpool);
decode_bytes(decoded, data, *len, db->buf, &db->buflen);
/* Write the output, clean up, go home. */
@@ -300,7 +300,7 @@ svn_quoprint_decode(svn_stream_t *output, apr_pool_t *pool)
svn_stringbuf_t *
svn_quoprint_decode_string(const svn_stringbuf_t *str, apr_pool_t *pool)
{
- svn_stringbuf_t *decoded = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *decoded = svn_stringbuf_create_empty(pool);
char ingroup[4];
int ingrouplen = 0;
diff --git a/subversion/libsvn_subr/simple_providers.c b/subversion/libsvn_subr/simple_providers.c
index 3baed24..e70770a 100644
--- a/subversion/libsvn_subr/simple_providers.c
+++ b/subversion/libsvn_subr/simple_providers.c
@@ -29,6 +29,9 @@
#include <apr_pools.h>
#include "svn_auth.h"
+#include "svn_dirent_uri.h"
+#include "svn_hash.h"
+#include "svn_pools.h"
#include "svn_error.h"
#include "svn_utf.h"
#include "svn_config.h"
@@ -37,6 +40,8 @@
#include "private/svn_auth_private.h"
#include "svn_private_config.h"
+
+#include "auth.h"
/*-----------------------------------------------------------------------*/
/* File provider */
@@ -62,8 +67,9 @@ typedef struct simple_provider_baton_t
/* Implementation of svn_auth__password_get_t that retrieves
the plaintext password from CREDS. */
-svn_boolean_t
-svn_auth__simple_password_get(const char **password,
+svn_error_t *
+svn_auth__simple_password_get(svn_boolean_t *done,
+ const char **password,
apr_hash_t *creds,
const char *realmstring,
const char *username,
@@ -72,23 +78,28 @@ svn_auth__simple_password_get(const char **password,
apr_pool_t *pool)
{
svn_string_t *str;
- str = apr_hash_get(creds, AUTHN_USERNAME_KEY, APR_HASH_KEY_STRING);
+
+ *done = FALSE;
+
+ str = svn_hash_gets(creds, AUTHN_USERNAME_KEY);
if (str && username && strcmp(str->data, username) == 0)
{
- str = apr_hash_get(creds, AUTHN_PASSWORD_KEY, APR_HASH_KEY_STRING);
+ str = svn_hash_gets(creds, AUTHN_PASSWORD_KEY);
if (str && str->data)
{
*password = str->data;
- return TRUE;
+ *done = TRUE;
}
}
- return FALSE;
+
+ return SVN_NO_ERROR;
}
/* Implementation of svn_auth__password_set_t that stores
the plaintext password in CREDS. */
-svn_boolean_t
-svn_auth__simple_password_set(apr_hash_t *creds,
+svn_error_t *
+svn_auth__simple_password_set(svn_boolean_t *done,
+ apr_hash_t *creds,
const char *realmstring,
const char *username,
const char *password,
@@ -96,9 +107,10 @@ svn_auth__simple_password_set(apr_hash_t *creds,
svn_boolean_t non_interactive,
apr_pool_t *pool)
{
- apr_hash_set(creds, AUTHN_PASSWORD_KEY, APR_HASH_KEY_STRING,
- svn_string_create(password, pool));
- return TRUE;
+ svn_hash_sets(creds, AUTHN_PASSWORD_KEY, svn_string_create(password, pool));
+ *done = TRUE;
+
+ return SVN_NO_ERROR;
}
/* Set **USERNAME to the username retrieved from CREDS; ignore
@@ -110,7 +122,7 @@ simple_username_get(const char **username,
svn_boolean_t non_interactive)
{
svn_string_t *str;
- str = apr_hash_get(creds, AUTHN_USERNAME_KEY, APR_HASH_KEY_STRING);
+ str = svn_hash_gets(creds, AUTHN_USERNAME_KEY);
if (str && str->data)
{
*username = str->data;
@@ -119,39 +131,29 @@ simple_username_get(const char **username,
return FALSE;
}
-/* Common implementation for simple_first_creds. Uses PARAMETERS, REALMSTRING
- and the simple auth provider's username and password cache to fill a set of
- CREDENTIALS. PASSWORD_GET is used to obtain the password value.
- PASSTYPE identifies the type of the cached password. CREDENTIALS are
- allocated from POOL. */
+
svn_error_t *
-svn_auth__simple_first_creds_helper(void **credentials,
- void **iter_baton,
- void *provider_baton,
- apr_hash_t *parameters,
- const char *realmstring,
- svn_auth__password_get_t password_get,
- const char *passtype,
- apr_pool_t *pool)
+svn_auth__simple_creds_cache_get(void **credentials,
+ void **iter_baton,
+ void *provider_baton,
+ apr_hash_t *parameters,
+ const char *realmstring,
+ svn_auth__password_get_t password_get,
+ const char *passtype,
+ apr_pool_t *pool)
{
- const char *config_dir = apr_hash_get(parameters,
- SVN_AUTH_PARAM_CONFIG_DIR,
- APR_HASH_KEY_STRING);
- svn_config_t *cfg = apr_hash_get(parameters,
- SVN_AUTH_PARAM_CONFIG_CATEGORY_SERVERS,
- APR_HASH_KEY_STRING);
- const char *server_group = apr_hash_get(parameters,
- SVN_AUTH_PARAM_SERVER_GROUP,
- APR_HASH_KEY_STRING);
- const char *username = apr_hash_get(parameters,
- SVN_AUTH_PARAM_DEFAULT_USERNAME,
- APR_HASH_KEY_STRING);
- const char *password = apr_hash_get(parameters,
- SVN_AUTH_PARAM_DEFAULT_PASSWORD,
- APR_HASH_KEY_STRING);
- svn_boolean_t non_interactive = apr_hash_get(parameters,
- SVN_AUTH_PARAM_NON_INTERACTIVE,
- APR_HASH_KEY_STRING) != NULL;
+ const char *config_dir = svn_hash_gets(parameters, SVN_AUTH_PARAM_CONFIG_DIR);
+ svn_config_t *cfg = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_CONFIG_CATEGORY_SERVERS);
+ const char *server_group = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_SERVER_GROUP);
+ const char *username = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_DEFAULT_USERNAME);
+ const char *password = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_DEFAULT_PASSWORD);
+ svn_boolean_t non_interactive = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_NON_INTERACTIVE)
+ != NULL;
const char *default_username = NULL; /* Default username from cache. */
const char *default_password = NULL; /* Default password from cache. */
@@ -182,7 +184,7 @@ svn_auth__simple_first_creds_helper(void **credentials,
/* The password type in the auth data must match the
mangler's type, otherwise the password must be
interpreted by another provider. */
- str = apr_hash_get(creds_hash, AUTHN_PASSTYPE_KEY, APR_HASH_KEY_STRING);
+ str = svn_hash_gets(creds_hash, AUTHN_PASSTYPE_KEY);
if (str && str->data)
if (passtype && (0 == strcmp(str->data, passtype)))
have_passtype = TRUE;
@@ -198,9 +200,7 @@ svn_auth__simple_first_creds_helper(void **credentials,
}
else
{
- if (0 == strcmp(default_username, username))
- need_to_save = FALSE;
- else
+ if (strcmp(default_username, username) != 0)
need_to_save = TRUE;
}
}
@@ -211,16 +211,18 @@ svn_auth__simple_first_creds_helper(void **credentials,
{
if (have_passtype)
{
- if (!password_get(&default_password, creds_hash, realmstring,
- username, parameters, non_interactive, pool))
+ svn_boolean_t done;
+
+ SVN_ERR(password_get(&done, &default_password, creds_hash,
+ realmstring, username, parameters,
+ non_interactive, pool));
+ if (!done)
{
need_to_save = TRUE;
}
else
{
- if (0 == strcmp(default_password, password))
- need_to_save = FALSE;
- else
+ if (strcmp(default_password, password) != 0)
need_to_save = TRUE;
}
}
@@ -241,9 +243,12 @@ svn_auth__simple_first_creds_helper(void **credentials,
password = NULL;
else
{
- if (!password_get(&password, creds_hash, realmstring,
- username, parameters, non_interactive,
- pool))
+ svn_boolean_t done;
+
+ SVN_ERR(password_get(&done, &password, creds_hash,
+ realmstring, username, parameters,
+ non_interactive, pool));
+ if (!done)
password = NULL;
/* If the auth data didn't contain a password type,
@@ -292,41 +297,29 @@ svn_auth__simple_first_creds_helper(void **credentials,
}
-/* Common implementation for simple_save_creds. Uses PARAMETERS and
- REALMSTRING to save a set of CREDENTIALS to the simple auth provider's
- username and password cache. PASSWORD_SET is used to store the password.
- PASSTYPE identifies the type of the cached password. Allocates from POOL. */
svn_error_t *
-svn_auth__simple_save_creds_helper(svn_boolean_t *saved,
- void *credentials,
- void *provider_baton,
- apr_hash_t *parameters,
- const char *realmstring,
- svn_auth__password_set_t password_set,
- const char *passtype,
- apr_pool_t *pool)
+svn_auth__simple_creds_cache_set(svn_boolean_t *saved,
+ void *credentials,
+ void *provider_baton,
+ apr_hash_t *parameters,
+ const char *realmstring,
+ svn_auth__password_set_t password_set,
+ const char *passtype,
+ apr_pool_t *pool)
{
svn_auth_cred_simple_t *creds = credentials;
apr_hash_t *creds_hash = NULL;
const char *config_dir;
svn_error_t *err;
svn_boolean_t dont_store_passwords =
- apr_hash_get(parameters,
- SVN_AUTH_PARAM_DONT_STORE_PASSWORDS,
- APR_HASH_KEY_STRING) != NULL;
- const char *store_plaintext_passwords =
- apr_hash_get(parameters,
- SVN_AUTH_PARAM_STORE_PLAINTEXT_PASSWORDS,
- APR_HASH_KEY_STRING);
- svn_boolean_t non_interactive = apr_hash_get(parameters,
- SVN_AUTH_PARAM_NON_INTERACTIVE,
- APR_HASH_KEY_STRING) != NULL;
- simple_provider_baton_t *b = (simple_provider_baton_t *)provider_baton;
-
+ svn_hash_gets(parameters, SVN_AUTH_PARAM_DONT_STORE_PASSWORDS) != NULL;
+ svn_boolean_t non_interactive = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_NON_INTERACTIVE)
+ != NULL;
svn_boolean_t no_auth_cache =
- (! creds->may_save) || (apr_hash_get(parameters,
- SVN_AUTH_PARAM_NO_AUTH_CACHE,
- APR_HASH_KEY_STRING) != NULL);
+ (! creds->may_save) || (svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_NO_AUTH_CACHE)
+ != NULL);
/* Make sure we've been passed a passtype. */
SVN_ERR_ASSERT(passtype != NULL);
@@ -336,14 +329,12 @@ svn_auth__simple_save_creds_helper(svn_boolean_t *saved,
if (no_auth_cache)
return SVN_NO_ERROR;
- config_dir = apr_hash_get(parameters,
- SVN_AUTH_PARAM_CONFIG_DIR,
- APR_HASH_KEY_STRING);
+ config_dir = svn_hash_gets(parameters, SVN_AUTH_PARAM_CONFIG_DIR);
/* Put the username into the credentials hash. */
creds_hash = apr_hash_make(pool);
- apr_hash_set(creds_hash, AUTHN_USERNAME_KEY, APR_HASH_KEY_STRING,
- svn_string_create(creds->username, pool));
+ svn_hash_sets(creds_hash, AUTHN_USERNAME_KEY,
+ svn_string_create(creds->username, pool));
/* Don't store passwords in any form if the user has told
* us not to do so. */
@@ -358,14 +349,24 @@ svn_auth__simple_save_creds_helper(svn_boolean_t *saved,
(strcmp(passtype, SVN_AUTH__WINCRYPT_PASSWORD_TYPE) == 0
|| strcmp(passtype, SVN_AUTH__KEYCHAIN_PASSWORD_TYPE) == 0
|| strcmp(passtype, SVN_AUTH__KWALLET_PASSWORD_TYPE) == 0
- || strcmp(passtype, SVN_AUTH__GNOME_KEYRING_PASSWORD_TYPE) == 0) )
+ || strcmp(passtype, SVN_AUTH__GNOME_KEYRING_PASSWORD_TYPE) == 0
+ || strcmp(passtype, SVN_AUTH__GPG_AGENT_PASSWORD_TYPE) == 0))
{
may_save_password = TRUE;
}
else
{
- if (svn_cstring_casecmp(store_plaintext_passwords,
- SVN_CONFIG_ASK) == 0)
+#ifdef SVN_DISABLE_PLAINTEXT_PASSWORD_STORAGE
+ may_save_password = FALSE;
+#else
+ const char *store_plaintext_passwords =
+ svn_hash_gets(parameters, SVN_AUTH_PARAM_STORE_PLAINTEXT_PASSWORDS);
+ simple_provider_baton_t *b =
+ (simple_provider_baton_t *)provider_baton;
+
+ if (store_plaintext_passwords
+ && svn_cstring_casecmp(store_plaintext_passwords,
+ SVN_CONFIG_ASK) == 0)
{
if (non_interactive)
/* In non-interactive mode, the default behaviour is
@@ -379,9 +380,8 @@ svn_auth__simple_save_creds_helper(svn_boolean_t *saved,
*
* Check for a cached answer before prompting. */
svn_boolean_t *cached_answer;
- cached_answer = apr_hash_get(b->plaintext_answers,
- realmstring,
- APR_HASH_KEY_STRING);
+ cached_answer = svn_hash_gets(b->plaintext_answers,
+ realmstring);
if (cached_answer != NULL)
may_save_password = *cached_answer;
else
@@ -407,8 +407,8 @@ svn_auth__simple_save_creds_helper(svn_boolean_t *saved,
cached_answer = apr_palloc(cached_answer_pool,
sizeof(svn_boolean_t));
*cached_answer = may_save_password;
- apr_hash_set(b->plaintext_answers, realmstring,
- APR_HASH_KEY_STRING, cached_answer);
+ svn_hash_sets(b->plaintext_answers, realmstring,
+ cached_answer);
}
}
else
@@ -430,13 +430,15 @@ svn_auth__simple_save_creds_helper(svn_boolean_t *saved,
may_save_password = TRUE;
}
}
- else if (svn_cstring_casecmp(store_plaintext_passwords,
- SVN_CONFIG_FALSE) == 0)
+ else if (store_plaintext_passwords
+ && svn_cstring_casecmp(store_plaintext_passwords,
+ SVN_CONFIG_FALSE) == 0)
{
may_save_password = FALSE;
}
- else if (svn_cstring_casecmp(store_plaintext_passwords,
- SVN_CONFIG_TRUE) == 0)
+ else if (!store_plaintext_passwords
+ || svn_cstring_casecmp(store_plaintext_passwords,
+ SVN_CONFIG_TRUE) == 0)
{
may_save_password = TRUE;
}
@@ -448,24 +450,29 @@ svn_auth__simple_save_creds_helper(svn_boolean_t *saved,
store_plaintext_passwords,
SVN_AUTH_PARAM_STORE_PLAINTEXT_PASSWORDS);
}
+#endif
}
if (may_save_password)
{
- *saved = password_set(creds_hash, realmstring,
- creds->username, creds->password,
- parameters, non_interactive, pool);
+ SVN_ERR(password_set(saved, creds_hash, realmstring,
+ creds->username, creds->password,
+ parameters, non_interactive, pool));
if (*saved && passtype)
/* Store the password type with the auth data, so that we
know which provider owns the password. */
- apr_hash_set(creds_hash, AUTHN_PASSTYPE_KEY, APR_HASH_KEY_STRING,
- svn_string_create(passtype, pool));
+ svn_hash_sets(creds_hash, AUTHN_PASSTYPE_KEY,
+ svn_string_create(passtype, pool));
}
}
/* Save credentials to disk. */
err = svn_config_write_auth_data(creds_hash, SVN_AUTH_CRED_SIMPLE,
realmstring, config_dir, pool);
+ if (err)
+ *saved = FALSE;
+
+ /* ### return error? */
svn_error_clear(err);
return SVN_NO_ERROR;
@@ -480,14 +487,12 @@ simple_first_creds(void **credentials,
const char *realmstring,
apr_pool_t *pool)
{
- return svn_auth__simple_first_creds_helper(credentials,
- iter_baton,
- provider_baton,
- parameters,
- realmstring,
- svn_auth__simple_password_get,
- SVN_AUTH__SIMPLE_PASSWORD_TYPE,
- pool);
+ return svn_auth__simple_creds_cache_get(credentials, iter_baton,
+ provider_baton, parameters,
+ realmstring,
+ svn_auth__simple_password_get,
+ SVN_AUTH__SIMPLE_PASSWORD_TYPE,
+ pool);
}
/* Save (unencrypted) credentials to the simple provider's cache. */
@@ -499,13 +504,11 @@ simple_save_creds(svn_boolean_t *saved,
const char *realmstring,
apr_pool_t *pool)
{
- return svn_auth__simple_save_creds_helper(saved, credentials,
- provider_baton,
- parameters,
- realmstring,
- svn_auth__simple_password_set,
- SVN_AUTH__SIMPLE_PASSWORD_TYPE,
- pool);
+ return svn_auth__simple_creds_cache_set(saved, credentials, provider_baton,
+ parameters, realmstring,
+ svn_auth__simple_password_set,
+ SVN_AUTH__SIMPLE_PASSWORD_TYPE,
+ pool);
}
static const svn_auth_provider_t simple_provider = {
@@ -580,16 +583,14 @@ prompt_for_simple_creds(svn_auth_cred_simple_t **cred_p,
so. */
if (first_time)
{
- default_username = apr_hash_get(parameters,
- SVN_AUTH_PARAM_DEFAULT_USERNAME,
- APR_HASH_KEY_STRING);
+ default_username = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_DEFAULT_USERNAME);
/* No default username? Try the auth cache. */
if (! default_username)
{
- const char *config_dir = apr_hash_get(parameters,
- SVN_AUTH_PARAM_CONFIG_DIR,
- APR_HASH_KEY_STRING);
+ const char *config_dir = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_CONFIG_DIR);
apr_hash_t *creds_hash = NULL;
svn_string_t *str;
svn_error_t *err;
@@ -599,8 +600,7 @@ prompt_for_simple_creds(svn_auth_cred_simple_t **cred_p,
svn_error_clear(err);
if (! err && creds_hash)
{
- str = apr_hash_get(creds_hash, AUTHN_USERNAME_KEY,
- APR_HASH_KEY_STRING);
+ str = svn_hash_gets(creds_hash, AUTHN_USERNAME_KEY);
if (str && str->data)
default_username = str->data;
}
@@ -609,12 +609,10 @@ prompt_for_simple_creds(svn_auth_cred_simple_t **cred_p,
/* Still no default username? Try the 'servers' file. */
if (! default_username)
{
- svn_config_t *cfg = apr_hash_get(parameters,
- SVN_AUTH_PARAM_CONFIG_CATEGORY_SERVERS,
- APR_HASH_KEY_STRING);
- const char *server_group = apr_hash_get(parameters,
- SVN_AUTH_PARAM_SERVER_GROUP,
- APR_HASH_KEY_STRING);
+ svn_config_t *cfg = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_CONFIG_CATEGORY_SERVERS);
+ const char *server_group = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_SERVER_GROUP);
default_username =
svn_config_get_server_setting(cfg, server_group,
SVN_CONFIG_OPTION_USERNAME,
@@ -625,9 +623,8 @@ prompt_for_simple_creds(svn_auth_cred_simple_t **cred_p,
if (! default_username)
default_username = svn_user_get_name(pool);
- default_password = apr_hash_get(parameters,
- SVN_AUTH_PARAM_DEFAULT_PASSWORD,
- APR_HASH_KEY_STRING);
+ default_password = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_DEFAULT_PASSWORD);
}
/* If we have defaults, just build the cred here and return it.
@@ -665,9 +662,8 @@ simple_prompt_first_creds(void **credentials_p,
{
simple_prompt_provider_baton_t *pb = provider_baton;
simple_prompt_iter_baton_t *ibaton = apr_pcalloc(pool, sizeof(*ibaton));
- const char *no_auth_cache = apr_hash_get(parameters,
- SVN_AUTH_PARAM_NO_AUTH_CACHE,
- APR_HASH_KEY_STRING);
+ const char *no_auth_cache = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_NO_AUTH_CACHE);
SVN_ERR(prompt_for_simple_creds((svn_auth_cred_simple_t **) credentials_p,
pb, parameters, realmstring, TRUE,
@@ -692,9 +688,8 @@ simple_prompt_next_creds(void **credentials_p,
{
simple_prompt_iter_baton_t *ib = iter_baton;
simple_prompt_provider_baton_t *pb = provider_baton;
- const char *no_auth_cache = apr_hash_get(parameters,
- SVN_AUTH_PARAM_NO_AUTH_CACHE,
- APR_HASH_KEY_STRING);
+ const char *no_auth_cache = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_NO_AUTH_CACHE);
if ((pb->retry_limit >= 0) && (ib->retries >= pb->retry_limit))
{
@@ -709,7 +704,6 @@ simple_prompt_next_creds(void **credentials_p,
! no_auth_cache, pool);
}
-
static const svn_auth_provider_t simple_prompt_provider = {
SVN_AUTH_CRED_SIMPLE,
simple_prompt_first_creds,
diff --git a/subversion/libsvn_subr/skel.c b/subversion/libsvn_subr/skel.c
index 8c7a0ee..ed12db0 100644
--- a/subversion/libsvn_subr/skel.c
+++ b/subversion/libsvn_subr/skel.c
@@ -23,7 +23,10 @@
#include <string.h>
#include "svn_string.h"
#include "svn_error.h"
+#include "svn_props.h"
+#include "svn_pools.h"
#include "private/svn_skel.h"
+#include "private/svn_string_private.h"
/* Parsing skeletons. */
@@ -135,41 +138,6 @@ getsize(const char *data, apr_size_t len,
}
}
-/* Store the ASCII decimal representation of VALUE at DATA. Return
- the length of the representation if all goes well; return zero if
- the result doesn't fit in LEN bytes. */
-static int
-putsize(char *data, apr_size_t len, apr_size_t value)
-{
- apr_size_t i = 0;
-
- /* Generate the digits, least-significant first. */
- do
- {
- if (i >= len)
- return 0;
-
- data[i] = (value % 10) + '0';
- value /= 10;
- i++;
- }
- while (value > 0);
-
- /* Put the digits in most-significant-first order. */
- {
- int left, right;
-
- for (left = 0, right = i-1; left < right; left++, right--)
- {
- char t = data[left];
- data[left] = data[right];
- data[right] = t;
- }
- }
-
- return i;
-}
-
/* Checking validity of skels. */
static svn_error_t *
@@ -201,6 +169,35 @@ is_valid_proplist_skel(const svn_skel_t *skel)
return FALSE;
}
+static svn_boolean_t
+is_valid_iproplist_skel(const svn_skel_t *skel)
+{
+ int len = svn_skel__list_length(skel);
+
+ if ((len >= 0) && (len & 1) == 0)
+ {
+ svn_skel_t *elt;
+
+ for (elt = skel->children; elt; elt = elt->next)
+ {
+ if (!elt->is_atom)
+ return FALSE;
+
+ if (elt->next == NULL)
+ return FALSE;
+
+ elt = elt->next;
+
+ if (! is_valid_proplist_skel(elt))
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
static svn_skel_t *parse(const char *data, apr_size_t len,
apr_pool_t *pool);
@@ -401,23 +398,16 @@ explicit_atom(const char *data,
static apr_size_t estimate_unparsed_size(const svn_skel_t *skel);
static svn_stringbuf_t *unparse(const svn_skel_t *skel,
- svn_stringbuf_t *str,
- apr_pool_t *pool);
+ svn_stringbuf_t *str);
svn_stringbuf_t *
svn_skel__unparse(const svn_skel_t *skel, apr_pool_t *pool)
{
- svn_stringbuf_t *str;
-
- /* Allocate a string to hold the data. */
- str = apr_palloc(pool, sizeof(*str));
- str->pool = pool;
- str->blocksize = estimate_unparsed_size(skel) + 200;
- str->data = apr_palloc(pool, str->blocksize);
- str->len = 0;
+ svn_stringbuf_t *str
+ = svn_stringbuf_create_ensure(estimate_unparsed_size(skel) + 200, pool);
- return unparse(skel, str, pool);
+ return unparse(skel, str);
}
@@ -440,7 +430,7 @@ estimate_unparsed_size(const svn_skel_t *skel)
}
else
{
- int total_len;
+ apr_size_t total_len;
svn_skel_t *child;
/* Allow space for opening and closing parens, and a space
@@ -486,10 +476,9 @@ use_implicit(const svn_skel_t *skel)
}
-/* Append the concrete representation of SKEL to the string STR.
- Grow S with new space from POOL as necessary. */
+/* Append the concrete representation of SKEL to the string STR. */
static svn_stringbuf_t *
-unparse(const svn_skel_t *skel, svn_stringbuf_t *str, apr_pool_t *pool)
+unparse(const svn_skel_t *skel, svn_stringbuf_t *str)
{
if (skel->is_atom)
{
@@ -498,11 +487,12 @@ unparse(const svn_skel_t *skel, svn_stringbuf_t *str, apr_pool_t *pool)
svn_stringbuf_appendbytes(str, skel->data, skel->len);
else
{
- /* Append the length to STR. */
- char buf[200];
- int length_len;
+ /* Append the length to STR. Ensure enough space for at least
+ * one 64 bit int. */
+ char buf[200 + SVN_INT64_BUFFER_SIZE];
+ apr_size_t length_len;
- length_len = putsize(buf, sizeof(buf), skel->len);
+ length_len = svn__ui64toa(buf, skel->len);
SVN_ERR_ASSERT_NO_RETURN(length_len > 0);
@@ -510,31 +500,25 @@ unparse(const svn_skel_t *skel, svn_stringbuf_t *str, apr_pool_t *pool)
atom's contents. */
svn_stringbuf_ensure(str, str->len + length_len + 1 + skel->len);
svn_stringbuf_appendbytes(str, buf, length_len);
- str->data[str->len++] = ' ';
+ svn_stringbuf_appendbyte(str, ' ');
svn_stringbuf_appendbytes(str, skel->data, skel->len);
}
}
else
{
- /* Append a list to STR. */
+ /* Append a list to STR: an opening parenthesis, the list elements
+ * separated by a space, and a closing parenthesis. */
svn_skel_t *child;
- /* Emit an opening parenthesis. */
- svn_stringbuf_ensure(str, str->len + 1);
- str->data[str->len++] = '(';
+ svn_stringbuf_appendbyte(str, '(');
- /* Append each element. Emit a space between each pair of elements. */
for (child = skel->children; child; child = child->next)
{
- unparse(child, str, pool);
+ unparse(child, str);
if (child->next)
- {
- svn_stringbuf_ensure(str, str->len + 1);
- str->data[str->len++] = ' ';
- }
+ svn_stringbuf_appendbyte(str, ' ');
}
- /* Emit a closing parenthesis. */
svn_stringbuf_appendbyte(str, ')');
}
@@ -579,6 +563,33 @@ svn_skel__make_empty_list(apr_pool_t *pool)
return skel;
}
+svn_skel_t *svn_skel__dup(const svn_skel_t *src_skel, svn_boolean_t dup_data,
+ apr_pool_t *result_pool)
+{
+ svn_skel_t *skel = apr_pmemdup(result_pool, src_skel, sizeof(svn_skel_t));
+
+ if (dup_data && skel->data)
+ {
+ if (skel->is_atom)
+ skel->data = apr_pmemdup(result_pool, skel->data, skel->len);
+ else
+ {
+ /* When creating a skel this would be NULL, 0 for a list.
+ When parsing a string to a skel this might point to real data
+ delimiting the sublist. We don't copy that from here. */
+ skel->data = NULL;
+ skel->len = 0;
+ }
+ }
+
+ if (skel->children)
+ skel->children = svn_skel__dup(skel->children, dup_data, result_pool);
+
+ if (skel->next)
+ skel->next = svn_skel__dup(skel->next, dup_data, result_pool);
+
+ return skel;
+}
void
svn_skel__prepend(svn_skel_t *skel, svn_skel_t *list_skel)
@@ -596,9 +607,10 @@ void svn_skel__prepend_int(apr_int64_t value,
svn_skel_t *skel,
apr_pool_t *result_pool)
{
- const char *str = apr_psprintf(result_pool, "%" APR_INT64_T_FMT, value);
+ char *val_string = apr_palloc(result_pool, SVN_INT64_BUFFER_SIZE);
+ svn__i64toa(val_string, value);
- svn_skel__prepend_str(str, skel, result_pool);
+ svn_skel__prepend_str(val_string, skel, result_pool);
}
@@ -708,6 +720,34 @@ svn_skel__parse_proplist(apr_hash_t **proplist_p,
return SVN_NO_ERROR;
}
+svn_error_t *
+svn_skel__parse_iprops(apr_array_header_t **iprops,
+ const svn_skel_t *skel,
+ apr_pool_t *result_pool)
+{
+ svn_skel_t *elt;
+
+ /* Validate the skel. */
+ if (! is_valid_iproplist_skel(skel))
+ return skel_err("iprops");
+
+ /* Create the returned structure */
+ *iprops = apr_array_make(result_pool, 1,
+ sizeof(svn_prop_inherited_item_t *));
+
+ for (elt = skel->children; elt; elt = elt->next->next)
+ {
+ svn_prop_inherited_item_t *new_iprop = apr_palloc(result_pool,
+ sizeof(*new_iprop));
+ svn_string_t *repos_parent = svn_string_ncreate(elt->data, elt->len,
+ result_pool);
+ SVN_ERR(svn_skel__parse_proplist(&(new_iprop->prop_hash), elt->next,
+ result_pool));
+ new_iprop->path_or_url = repos_parent->data;
+ APR_ARRAY_PUSH(*iprops, svn_prop_inherited_item_t *) = new_iprop;
+ }
+ return SVN_NO_ERROR;
+}
svn_error_t *
svn_skel__parse_prop(svn_string_t **propval,
@@ -744,7 +784,7 @@ svn_skel__parse_prop(svn_string_t **propval,
svn_error_t *
svn_skel__unparse_proplist(svn_skel_t **skel_p,
- apr_hash_t *proplist,
+ const apr_hash_t *proplist,
apr_pool_t *pool)
{
svn_skel_t *skel = svn_skel__make_empty_list(pool);
@@ -754,7 +794,8 @@ svn_skel__unparse_proplist(svn_skel_t **skel_p,
if (proplist)
{
/* Loop over hash entries */
- for (hi = apr_hash_first(pool, proplist); hi; hi = apr_hash_next(hi))
+ for (hi = apr_hash_first(pool, (apr_hash_t *)proplist); hi;
+ hi = apr_hash_next(hi))
{
const void *key;
void *val;
@@ -779,3 +820,62 @@ svn_skel__unparse_proplist(svn_skel_t **skel_p,
*skel_p = skel;
return SVN_NO_ERROR;
}
+
+svn_error_t *
+svn_skel__unparse_iproplist(svn_skel_t **skel_p,
+ const apr_array_header_t *inherited_props,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_skel_t *skel = svn_skel__make_empty_list(result_pool);
+
+ /* Create the skel. */
+ if (inherited_props)
+ {
+ int i;
+ apr_hash_index_t *hi;
+
+ for (i = 0; i < inherited_props->nelts; i++)
+ {
+ svn_prop_inherited_item_t *iprop =
+ APR_ARRAY_IDX(inherited_props, i, svn_prop_inherited_item_t *);
+
+ svn_skel_t *skel_list = svn_skel__make_empty_list(result_pool);
+ svn_skel_t *skel_atom;
+
+ /* Loop over hash entries */
+ for (hi = apr_hash_first(scratch_pool, iprop->prop_hash);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ const void *key;
+ void *val;
+ apr_ssize_t klen;
+ svn_string_t *value;
+
+ apr_hash_this(hi, &key, &klen, &val);
+ value = val;
+
+ /* VALUE */
+ svn_skel__prepend(svn_skel__mem_atom(value->data, value->len,
+ result_pool), skel_list);
+
+ /* NAME */
+ svn_skel__prepend(svn_skel__mem_atom(key, klen, result_pool),
+ skel_list);
+ }
+
+ skel_atom = svn_skel__str_atom(
+ apr_pstrdup(result_pool, iprop->path_or_url), result_pool);
+ svn_skel__append(skel, skel_atom);
+ svn_skel__append(skel, skel_list);
+ }
+ }
+
+ /* Validate and return the skel. */
+ if (! is_valid_iproplist_skel(skel))
+ return skel_err("iproplist");
+
+ *skel_p = skel;
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/libsvn_subr/sorts.c b/subversion/libsvn_subr/sorts.c
index 953b47c..bdec8e4 100644
--- a/subversion/libsvn_subr/sorts.c
+++ b/subversion/libsvn_subr/sorts.c
@@ -28,6 +28,7 @@
#include <apr_tables.h>
#include <stdlib.h> /* for qsort() */
#include <assert.h>
+#include "svn_hash.h"
#include "svn_path.h"
#include "svn_sorts.h"
#include "svn_error.h"
@@ -257,23 +258,52 @@ svn_sort__array_delete(apr_array_header_t *arr,
&& elements_to_delete > 0
&& (elements_to_delete + delete_index) <= arr->nelts)
{
- if (delete_index == (arr->nelts - 1))
- {
- /* Deleting the last or only element in an array is easy. */
- apr_array_pop(arr);
- }
- else if ((delete_index + elements_to_delete) == arr->nelts)
+ /* If we are not deleting a block of elements that extends to the end
+ of the array, then we need to move the remaining elements to keep
+ the array contiguous. */
+ if ((elements_to_delete + delete_index) < arr->nelts)
+ memmove(
+ arr->elts + arr->elt_size * delete_index,
+ arr->elts + (arr->elt_size * (delete_index + elements_to_delete)),
+ arr->elt_size * (arr->nelts - elements_to_delete - delete_index));
+
+ /* Delete the last ELEMENTS_TO_DELETE elements. */
+ arr->nelts -= elements_to_delete;
+ }
+}
+
+void
+svn_sort__array_reverse(apr_array_header_t *array,
+ apr_pool_t *scratch_pool)
+{
+ int i;
+
+ if (array->elt_size == sizeof(void *))
+ {
+ for (i = 0; i < array->nelts / 2; i++)
{
- /* Delete the last ELEMENTS_TO_DELETE elements. */
- arr->nelts -= elements_to_delete;
+ int swap_index = array->nelts - i - 1;
+ void *tmp = APR_ARRAY_IDX(array, i, void *);
+
+ APR_ARRAY_IDX(array, i, void *) =
+ APR_ARRAY_IDX(array, swap_index, void *);
+ APR_ARRAY_IDX(array, swap_index, void *) = tmp;
}
- else
+ }
+ else
+ {
+ apr_size_t sz = array->elt_size;
+ char *tmp = apr_palloc(scratch_pool, sz);
+
+ for (i = 0; i < array->nelts / 2; i++)
{
- memmove(
- arr->elts + arr->elt_size * delete_index,
- arr->elts + (arr->elt_size * (delete_index + elements_to_delete)),
- arr->elt_size * (arr->nelts - elements_to_delete - delete_index));
- arr->nelts -= elements_to_delete;
+ int swap_index = array->nelts - i - 1;
+ char *x = array->elts + (sz * i);
+ char *y = array->elts + (sz * swap_index);
+
+ memcpy(tmp, x, sz);
+ memcpy(x, y, sz);
+ memcpy(y, tmp, sz);
}
}
}
diff --git a/subversion/libsvn_subr/spillbuf.c b/subversion/libsvn_subr/spillbuf.c
new file mode 100644
index 0000000..e028741
--- /dev/null
+++ b/subversion/libsvn_subr/spillbuf.c
@@ -0,0 +1,615 @@
+/*
+ * spillbuf.c : an in-memory buffer that can spill to disk
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#include <apr_file_io.h>
+
+#include "svn_io.h"
+#include "svn_pools.h"
+
+#include "private/svn_subr_private.h"
+
+
+struct memblock_t {
+ apr_size_t size;
+ char *data;
+
+ struct memblock_t *next;
+};
+
+
+struct svn_spillbuf_t {
+ /* Pool for allocating blocks and the spill file. */
+ apr_pool_t *pool;
+
+ /* Size of in-memory blocks. */
+ apr_size_t blocksize;
+
+ /* Maximum in-memory size; start spilling when we reach this size. */
+ apr_size_t maxsize;
+
+ /* The amount of content in memory. */
+ apr_size_t memory_size;
+
+ /* HEAD points to the first block of the linked list of buffers.
+ TAIL points to the last block, for quickly appending more blocks
+ to the overall list. */
+ struct memblock_t *head;
+ struct memblock_t *tail;
+
+ /* Available blocks for storing pending data. These were allocated
+ previously, then the data consumed and returned to this list. */
+ struct memblock_t *avail;
+
+ /* When a block is borrowed for reading, it is listed here. */
+ struct memblock_t *out_for_reading;
+
+ /* Once MEMORY_SIZE exceeds SPILL_SIZE, then arriving content will be
+ appended to the (temporary) file indicated by SPILL. */
+ apr_file_t *spill;
+
+ /* As we consume content from SPILL, this value indicates where we
+ will begin reading. */
+ apr_off_t spill_start;
+
+ /* How much content remains in SPILL. */
+ svn_filesize_t spill_size;
+};
+
+
+struct svn_spillbuf_reader_t {
+ /* Embed the spill-buffer within the reader. */
+ struct svn_spillbuf_t buf;
+
+ /* When we read content from the underlying spillbuf, these fields store
+ the ptr/len pair. The ptr will be incremented as we "read" out of this
+ buffer since we don't have to retain the original pointer (it is
+ managed inside of the spillbuf). */
+ const char *sb_ptr;
+ apr_size_t sb_len;
+
+ /* If a write comes in, then we may need to save content from our
+ borrowed buffer (since that buffer may be destroyed by our call into
+ the spillbuf code). Note that we retain the original pointer since
+ this buffer is allocated by the reader code and re-used. The SAVE_POS
+ field indicates the current position within this save buffer. The
+ SAVE_LEN field describes how much content is present. */
+ char *save_ptr;
+ apr_size_t save_len;
+ apr_size_t save_pos;
+};
+
+
+svn_spillbuf_t *
+svn_spillbuf__create(apr_size_t blocksize,
+ apr_size_t maxsize,
+ apr_pool_t *result_pool)
+{
+ svn_spillbuf_t *buf = apr_pcalloc(result_pool, sizeof(*buf));
+
+ buf->pool = result_pool;
+ buf->blocksize = blocksize;
+ buf->maxsize = maxsize;
+ /* Note: changes here should also go into svn_spillbuf__reader_create() */
+
+ return buf;
+}
+
+
+svn_filesize_t
+svn_spillbuf__get_size(const svn_spillbuf_t *buf)
+{
+ return buf->memory_size + buf->spill_size;
+}
+
+
+/* Get a memblock from the spill-buffer. It will be the block that we
+ passed out for reading, come from the free list, or allocated. */
+static struct memblock_t *
+get_buffer(svn_spillbuf_t *buf)
+{
+ struct memblock_t *mem = buf->out_for_reading;
+
+ if (mem != NULL)
+ {
+ buf->out_for_reading = NULL;
+ return mem;
+ }
+
+ if (buf->avail == NULL)
+ {
+ mem = apr_palloc(buf->pool, sizeof(*mem));
+ mem->data = apr_palloc(buf->pool, buf->blocksize);
+ return mem;
+ }
+
+ mem = buf->avail;
+ buf->avail = mem->next;
+ return mem;
+}
+
+
+/* Return MEM to the list of available buffers in BUF. */
+static void
+return_buffer(svn_spillbuf_t *buf,
+ struct memblock_t *mem)
+{
+ mem->next = buf->avail;
+ buf->avail = mem;
+}
+
+
+svn_error_t *
+svn_spillbuf__write(svn_spillbuf_t *buf,
+ const char *data,
+ apr_size_t len,
+ apr_pool_t *scratch_pool)
+{
+ struct memblock_t *mem;
+
+ /* We do not (yet) have a spill file, but the amount stored in memory
+ will grow too large. Create the file and place the pending data into
+ the temporary file. */
+ if (buf->spill == NULL
+ && (buf->memory_size + len) > buf->maxsize)
+ {
+ SVN_ERR(svn_io_open_unique_file3(&buf->spill,
+ NULL /* temp_path */,
+ NULL /* dirpath */,
+ svn_io_file_del_on_close,
+ buf->pool, scratch_pool));
+ }
+
+ /* Once a spill file has been constructed, then we need to put all
+ arriving data into the file. We will no longer attempt to hold it
+ in memory. */
+ if (buf->spill != NULL)
+ {
+ apr_off_t output_unused = 0; /* ### stupid API */
+
+ /* Seek to the end of the spill file. We don't know if a read has
+ occurred since our last write, and moved the file position. */
+ SVN_ERR(svn_io_file_seek(buf->spill,
+ APR_END, &output_unused,
+ scratch_pool));
+
+ SVN_ERR(svn_io_file_write_full(buf->spill, data, len,
+ NULL, scratch_pool));
+ buf->spill_size += len;
+
+ return SVN_NO_ERROR;
+ }
+
+ while (len > 0)
+ {
+ apr_size_t amt;
+
+ if (buf->tail == NULL || buf->tail->size == buf->blocksize)
+ {
+ /* There is no existing memblock (that may have space), or the
+ tail memblock has no space, so we need a new memblock. */
+ mem = get_buffer(buf);
+ mem->size = 0;
+ mem->next = NULL;
+ }
+ else
+ {
+ mem = buf->tail;
+ }
+
+ /* Compute how much to write into the memblock. */
+ amt = buf->blocksize - mem->size;
+ if (amt > len)
+ amt = len;
+
+ /* Copy some data into this memblock. */
+ memcpy(&mem->data[mem->size], data, amt);
+ mem->size += amt;
+ data += amt;
+ len -= amt;
+
+ /* We need to record how much is buffered in memory. Once we reach
+ buf->maxsize (or thereabouts, it doesn't have to be precise), then
+ we'll switch to putting the content into a file. */
+ buf->memory_size += amt;
+
+ /* Start a list of buffers, or (if we're not writing into the tail)
+ append to the end of the linked list of buffers. */
+ if (buf->tail == NULL)
+ {
+ buf->head = mem;
+ buf->tail = mem;
+ }
+ else if (mem != buf->tail)
+ {
+ buf->tail->next = mem;
+ buf->tail = mem;
+ }
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
+/* Return a memblock of content, if any is available. *mem will be NULL if
+ no further content is available. The memblock should eventually be
+ passed to return_buffer() (or stored into buf->out_for_reading which
+ will grab that block at the next get_buffer() call). */
+static svn_error_t *
+read_data(struct memblock_t **mem,
+ svn_spillbuf_t *buf,
+ apr_pool_t *scratch_pool)
+{
+ svn_error_t *err;
+
+ /* If we have some in-memory blocks, then return one. */
+ if (buf->head != NULL)
+ {
+ *mem = buf->head;
+ if (buf->tail == *mem)
+ buf->head = buf->tail = NULL;
+ else
+ buf->head = (*mem)->next;
+
+ /* We're using less memory now. If we haven't hit the spill file,
+ then we may be able to keep using memory. */
+ buf->memory_size -= (*mem)->size;
+
+ return SVN_NO_ERROR;
+ }
+
+ /* No file? Done. */
+ if (buf->spill == NULL)
+ {
+ *mem = NULL;
+ return SVN_NO_ERROR;
+ }
+
+ /* Assume that the caller has seeked the spill file to the correct pos. */
+
+ /* Get a buffer that we can read content into. */
+ *mem = get_buffer(buf);
+ /* NOTE: mem's size/next are uninitialized. */
+
+ if ((apr_uint64_t)buf->spill_size < (apr_uint64_t)buf->blocksize)
+ (*mem)->size = (apr_size_t)buf->spill_size;
+ else
+ (*mem)->size = buf->blocksize; /* The size of (*mem)->data */
+ (*mem)->next = NULL;
+
+ /* Read some data from the spill file into the memblock. */
+ err = svn_io_file_read(buf->spill, (*mem)->data, &(*mem)->size,
+ scratch_pool);
+ if (err)
+ {
+ return_buffer(buf, *mem);
+ return svn_error_trace(err);
+ }
+
+ /* Mark the data that we consumed from the spill file. */
+ buf->spill_start += (*mem)->size;
+
+ /* Did we consume all the data from the spill file? */
+ if ((buf->spill_size -= (*mem)->size) == 0)
+ {
+ /* Close and reset our spill file information. */
+ SVN_ERR(svn_io_file_close(buf->spill, scratch_pool));
+ buf->spill = NULL;
+ buf->spill_start = 0;
+ }
+
+ /* *mem has been initialized. Done. */
+ return SVN_NO_ERROR;
+}
+
+
+/* If the next read would consume data from the file, then seek to the
+ correct position. */
+static svn_error_t *
+maybe_seek(svn_boolean_t *seeked,
+ const svn_spillbuf_t *buf,
+ apr_pool_t *scratch_pool)
+{
+ if (buf->head == NULL && buf->spill != NULL)
+ {
+ apr_off_t output_unused;
+
+ /* Seek to where we left off reading. */
+ output_unused = buf->spill_start; /* ### stupid API */
+ SVN_ERR(svn_io_file_seek(buf->spill,
+ APR_SET, &output_unused,
+ scratch_pool));
+ if (seeked != NULL)
+ *seeked = TRUE;
+ }
+ else if (seeked != NULL)
+ {
+ *seeked = FALSE;
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_spillbuf__read(const char **data,
+ apr_size_t *len,
+ svn_spillbuf_t *buf,
+ apr_pool_t *scratch_pool)
+{
+ struct memblock_t *mem;
+
+ /* Possibly seek... */
+ SVN_ERR(maybe_seek(NULL, buf, scratch_pool));
+
+ SVN_ERR(read_data(&mem, buf, scratch_pool));
+ if (mem == NULL)
+ {
+ *data = NULL;
+ *len = 0;
+ }
+ else
+ {
+ *data = mem->data;
+ *len = mem->size;
+
+ /* If a block was out for reading, then return it. */
+ if (buf->out_for_reading != NULL)
+ return_buffer(buf, buf->out_for_reading);
+
+ /* Remember that we've passed this block out for reading. */
+ buf->out_for_reading = mem;
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_spillbuf__process(svn_boolean_t *exhausted,
+ svn_spillbuf_t *buf,
+ svn_spillbuf_read_t read_func,
+ void *read_baton,
+ apr_pool_t *scratch_pool)
+{
+ svn_boolean_t has_seeked = FALSE;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+
+ *exhausted = FALSE;
+
+ while (TRUE)
+ {
+ struct memblock_t *mem;
+ svn_error_t *err;
+ svn_boolean_t stop;
+
+ svn_pool_clear(iterpool);
+
+ /* If this call to read_data() will read from the spill file, and we
+ have not seek'd the file... then do it now. */
+ if (!has_seeked)
+ SVN_ERR(maybe_seek(&has_seeked, buf, iterpool));
+
+ /* Get some content to pass to the read callback. */
+ SVN_ERR(read_data(&mem, buf, iterpool));
+ if (mem == NULL)
+ {
+ *exhausted = TRUE;
+ break;
+ }
+
+ err = read_func(&stop, read_baton, mem->data, mem->size, iterpool);
+
+ return_buffer(buf, mem);
+
+ if (err)
+ return svn_error_trace(err);
+
+ /* If the callbacks told us to stop, then we're done for now. */
+ if (stop)
+ break;
+ }
+
+ svn_pool_destroy(iterpool);
+ return SVN_NO_ERROR;
+}
+
+
+svn_spillbuf_reader_t *
+svn_spillbuf__reader_create(apr_size_t blocksize,
+ apr_size_t maxsize,
+ apr_pool_t *result_pool)
+{
+ svn_spillbuf_reader_t *sbr = apr_pcalloc(result_pool, sizeof(*sbr));
+
+ /* See svn_spillbuf__create() */
+ sbr->buf.pool = result_pool;
+ sbr->buf.blocksize = blocksize;
+ sbr->buf.maxsize = maxsize;
+
+ return sbr;
+}
+
+
+svn_error_t *
+svn_spillbuf__reader_read(apr_size_t *amt,
+ svn_spillbuf_reader_t *reader,
+ char *data,
+ apr_size_t len,
+ apr_pool_t *scratch_pool)
+{
+ if (len == 0)
+ return svn_error_create(SVN_ERR_INCORRECT_PARAMS, NULL, NULL);
+
+ *amt = 0;
+
+ while (len > 0)
+ {
+ apr_size_t copy_amt;
+
+ if (reader->save_len > 0)
+ {
+ /* We have some saved content, so use this first. */
+
+ if (len < reader->save_len)
+ copy_amt = len;
+ else
+ copy_amt = reader->save_len;
+
+ memcpy(data, reader->save_ptr + reader->save_pos, copy_amt);
+ reader->save_pos += copy_amt;
+ reader->save_len -= copy_amt;
+ }
+ else
+ {
+ /* No saved content. We should now copy from spillbuf-provided
+ buffers of content. */
+
+ /* We may need more content from the spillbuf. */
+ if (reader->sb_len == 0)
+ {
+ SVN_ERR(svn_spillbuf__read(&reader->sb_ptr, &reader->sb_len,
+ &reader->buf,
+ scratch_pool));
+
+ /* We've run out of content, so return with whatever has
+ been copied into DATA and stored into AMT. */
+ if (reader->sb_ptr == NULL)
+ {
+ /* For safety, read() may not have set SB_LEN. We use it
+ as an indicator, so it needs to be cleared. */
+ reader->sb_len = 0;
+ return SVN_NO_ERROR;
+ }
+ }
+
+ if (len < reader->sb_len)
+ copy_amt = len;
+ else
+ copy_amt = reader->sb_len;
+
+ memcpy(data, reader->sb_ptr, copy_amt);
+ reader->sb_ptr += copy_amt;
+ reader->sb_len -= copy_amt;
+ }
+
+ data += copy_amt;
+ len -= copy_amt;
+ (*amt) += copy_amt;
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_spillbuf__reader_getc(char *c,
+ svn_spillbuf_reader_t *reader,
+ apr_pool_t *scratch_pool)
+{
+ apr_size_t amt;
+
+ SVN_ERR(svn_spillbuf__reader_read(&amt, reader, c, 1, scratch_pool));
+ if (amt == 0)
+ return svn_error_create(SVN_ERR_STREAM_UNEXPECTED_EOF, NULL, NULL);
+
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_spillbuf__reader_write(svn_spillbuf_reader_t *reader,
+ const char *data,
+ apr_size_t len,
+ apr_pool_t *scratch_pool)
+{
+ /* If we have a buffer of content from the spillbuf, then we need to
+ move that content to a safe place. */
+ if (reader->sb_len > 0)
+ {
+ if (reader->save_ptr == NULL)
+ reader->save_ptr = apr_palloc(reader->buf.pool, reader->buf.blocksize);
+
+ memcpy(reader->save_ptr, reader->sb_ptr, reader->sb_len);
+ reader->save_len = reader->sb_len;
+ reader->save_pos = 0;
+
+ /* No more content in the spillbuf-borrowed buffer. */
+ reader->sb_len = 0;
+ }
+
+ return svn_error_trace(svn_spillbuf__write(&reader->buf, data, len,
+ scratch_pool));
+}
+
+
+struct spillbuf_baton
+{
+ svn_spillbuf_reader_t *reader;
+ apr_pool_t *scratch_pool;
+};
+
+
+static svn_error_t *
+read_handler_spillbuf(void *baton, char *buffer, apr_size_t *len)
+{
+ struct spillbuf_baton *sb = baton;
+
+ SVN_ERR(svn_spillbuf__reader_read(len, sb->reader, buffer, *len,
+ sb->scratch_pool));
+
+ svn_pool_clear(sb->scratch_pool);
+ return SVN_NO_ERROR;
+}
+
+
+static svn_error_t *
+write_handler_spillbuf(void *baton, const char *data, apr_size_t *len)
+{
+ struct spillbuf_baton *sb = baton;
+
+ SVN_ERR(svn_spillbuf__reader_write(sb->reader, data, *len,
+ sb->scratch_pool));
+
+ svn_pool_clear(sb->scratch_pool);
+ return SVN_NO_ERROR;
+}
+
+
+svn_stream_t *
+svn_stream__from_spillbuf(apr_size_t blocksize,
+ apr_size_t maxsize,
+ apr_pool_t *result_pool)
+{
+ svn_stream_t *stream;
+ struct spillbuf_baton *sb = apr_palloc(result_pool, sizeof(*sb));
+
+ sb->reader = svn_spillbuf__reader_create(blocksize, maxsize, result_pool);
+ sb->scratch_pool = svn_pool_create(result_pool);
+
+ stream = svn_stream_create(sb, result_pool);
+
+ svn_stream_set_read(stream, read_handler_spillbuf);
+ svn_stream_set_write(stream, write_handler_spillbuf);
+
+ return stream;
+}
diff --git a/subversion/libsvn_subr/sqlite.c b/subversion/libsvn_subr/sqlite.c
index 7f5b279..295a11c 100644
--- a/subversion/libsvn_subr/sqlite.c
+++ b/subversion/libsvn_subr/sqlite.c
@@ -43,17 +43,37 @@
#endif
#ifdef SVN_SQLITE_INLINE
-/* Include sqlite3 inline, making all symbols private. */
- #define SQLITE_API static
- #include <sqlite3.c>
+/* Import the sqlite3 API vtable from sqlite3wrapper.c */
+# define SQLITE_OMIT_DEPRECATED
+# include <sqlite3ext.h>
+extern const sqlite3_api_routines *const svn_sqlite3__api_funcs;
+extern int (*const svn_sqlite3__api_initialize)(void);
+extern int (*const svn_sqlite3__api_config)(int, ...);
+# define sqlite3_api svn_sqlite3__api_funcs
+# define sqlite3_initialize svn_sqlite3__api_initialize
+# define sqlite3_config svn_sqlite3__api_config
#else
- #include <sqlite3.h>
+# include <sqlite3.h>
#endif
-#if !SQLITE_VERSION_AT_LEAST(3,6,18)
-#error SQLite is too old -- version 3.6.18 is the minimum required version
+#if !SQLITE_VERSION_AT_LEAST(3,7,12)
+#error SQLite is too old -- version 3.7.12 is the minimum required version
#endif
+const char *
+svn_sqlite__compiled_version(void)
+{
+ static const char sqlite_version[] = SQLITE_VERSION;
+ return sqlite_version;
+}
+
+const char *
+svn_sqlite__runtime_version(void)
+{
+ return sqlite3_libversion();
+}
+
+
INTERNAL_STATEMENTS_SQL_DECLARE_STATEMENTS(internal_statements);
@@ -84,7 +104,6 @@ struct svn_sqlite__db_t
int nbr_statements;
svn_sqlite__stmt_t **prepared_stmts;
apr_pool_t *state_pool;
- unsigned savepoint_nr;
};
struct svn_sqlite__stmt_t
@@ -121,8 +140,9 @@ struct svn_sqlite__value_t
int sqlite_err__temp = (x); \
if (sqlite_err__temp != SQLITE_OK) \
return svn_error_createf(SQLITE_ERROR_CODE(sqlite_err__temp), \
- NULL, "sqlite: %s", \
- sqlite3_errmsg((db)->db3)); \
+ NULL, "sqlite[S%d]: %s", \
+ sqlite_err__temp, \
+ sqlite3_errmsg((db)->db3)); \
} while (0)
#define SQLITE_ERR_MSG(x, msg) do \
@@ -130,10 +150,15 @@ struct svn_sqlite__value_t
int sqlite_err__temp = (x); \
if (sqlite_err__temp != SQLITE_OK) \
return svn_error_createf(SQLITE_ERROR_CODE(sqlite_err__temp), \
- NULL, "sqlite: %s", (msg)); \
+ NULL, "sqlite[S%d]: %s", \
+ sqlite_err__temp, msg); \
} while (0)
+/* Time (in milliseconds) to wait for sqlite locks before giving up. */
+#define BUSY_TIMEOUT 10000
+
+
/* Convenience wrapper around exec_sql2(). */
#define exec_sql(db, sql) exec_sql2((db), (sql), SQLITE_OK)
@@ -148,8 +173,9 @@ exec_sql2(svn_sqlite__db_t *db, const char *sql, int ignored_err)
if (sqlite_err != SQLITE_OK && sqlite_err != ignored_err)
{
svn_error_t *err = svn_error_createf(SQLITE_ERROR_CODE(sqlite_err), NULL,
- _("%s, executing statement '%s'"),
- err_msg, sql);
+ _("sqlite[S%d]: %s,"
+ " executing statement '%s'"),
+ sqlite_err, err_msg, sql);
sqlite3_free(err_msg);
return err;
}
@@ -200,6 +226,29 @@ svn_sqlite__get_statement(svn_sqlite__stmt_t **stmt, svn_sqlite__db_t *db,
return SVN_NO_ERROR;
}
+/* Like svn_sqlite__get_statement but gets an internal statement.
+
+ All internal statements that use this api are executed with step_done(),
+ so we don't need the fallback reset handling here or in the pool cleanup */
+static svn_error_t *
+get_internal_statement(svn_sqlite__stmt_t **stmt, svn_sqlite__db_t *db,
+ int stmt_idx)
+{
+ /* The internal statements are stored after the registered statements */
+ int prep_idx = db->nbr_statements + stmt_idx;
+ SVN_ERR_ASSERT(stmt_idx < STMT_INTERNAL_LAST);
+
+ if (db->prepared_stmts[prep_idx] == NULL)
+ SVN_ERR(prepare_statement(&db->prepared_stmts[prep_idx], db,
+ internal_statements[stmt_idx],
+ db->state_pool));
+
+ *stmt = db->prepared_stmts[prep_idx];
+
+ return SVN_NO_ERROR;
+}
+
+
static svn_error_t *
step_with_expectation(svn_sqlite__stmt_t* stmt,
svn_boolean_t expecting_row)
@@ -213,8 +262,8 @@ step_with_expectation(svn_sqlite__stmt_t* stmt,
return svn_error_create(SVN_ERR_SQLITE_ERROR,
svn_sqlite__reset(stmt),
expecting_row
- ? _("Expected database row missing")
- : _("Extra database row found"));
+ ? _("sqlite: Expected database row missing")
+ : _("sqlite: Extra database row found"));
return SVN_NO_ERROR;
}
@@ -243,7 +292,8 @@ svn_sqlite__step(svn_boolean_t *got_row, svn_sqlite__stmt_t *stmt)
svn_error_t *err1, *err2;
err1 = svn_error_createf(SQLITE_ERROR_CODE(sqlite_result), NULL,
- "sqlite: %s", sqlite3_errmsg(stmt->db->db3));
+ "sqlite[S%d]: %s",
+ sqlite_result, sqlite3_errmsg(stmt->db->db3));
err2 = svn_sqlite__reset(stmt);
return svn_error_compose_create(err1, err2);
}
@@ -296,7 +346,13 @@ vbindf(svn_sqlite__stmt_t *stmt, const char *fmt, va_list ap)
va_arg(ap, const char *)));
break;
+ case 'd':
+ SVN_ERR(svn_sqlite__bind_int(stmt, count,
+ va_arg(ap, int)));
+ break;
+
case 'i':
+ case 'L':
SVN_ERR(svn_sqlite__bind_int64(stmt, count,
va_arg(ap, apr_int64_t)));
break;
@@ -420,8 +476,28 @@ svn_sqlite__bind_properties(svn_sqlite__stmt_t *stmt,
if (props == NULL)
return svn_error_trace(svn_sqlite__bind_blob(stmt, slot, NULL, 0));
- SVN_ERR(svn_skel__unparse_proplist(&skel, (apr_hash_t *)props,
- scratch_pool));
+ SVN_ERR(svn_skel__unparse_proplist(&skel, props, scratch_pool));
+ properties = svn_skel__unparse(skel, scratch_pool);
+ return svn_error_trace(svn_sqlite__bind_blob(stmt,
+ slot,
+ properties->data,
+ properties->len));
+}
+
+svn_error_t *
+svn_sqlite__bind_iprops(svn_sqlite__stmt_t *stmt,
+ int slot,
+ const apr_array_header_t *inherited_props,
+ apr_pool_t *scratch_pool)
+{
+ svn_skel_t *skel;
+ svn_stringbuf_t *properties;
+
+ if (inherited_props == NULL)
+ return svn_error_trace(svn_sqlite__bind_blob(stmt, slot, NULL, 0));
+
+ SVN_ERR(svn_skel__unparse_iproplist(&skel, inherited_props,
+ scratch_pool, scratch_pool));
properties = svn_skel__unparse(skel, scratch_pool);
return svn_error_trace(svn_sqlite__bind_blob(stmt,
slot,
@@ -509,6 +585,21 @@ svn_sqlite__column_token(svn_sqlite__stmt_t *stmt,
return svn_token__from_word_strict(map, word);
}
+int
+svn_sqlite__column_token_null(svn_sqlite__stmt_t *stmt,
+ int column,
+ const svn_token_map_t *map,
+ int null_val)
+{
+ /* cast from 'unsigned char' to regular 'char' */
+ const char *word = (const char *)sqlite3_column_text(stmt->s3stmt, column);
+
+ if (!word)
+ return null_val;
+
+ return svn_token__from_word_strict(map, word);
+}
+
svn_error_t *
svn_sqlite__column_properties(apr_hash_t **props,
svn_sqlite__stmt_t *stmt,
@@ -535,6 +626,31 @@ svn_sqlite__column_properties(apr_hash_t **props,
}
svn_error_t *
+svn_sqlite__column_iprops(apr_array_header_t **iprops,
+ svn_sqlite__stmt_t *stmt,
+ int column,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ apr_size_t len;
+ const void *val;
+
+ /* svn_skel__parse_iprops copies everything needed to result_pool */
+ val = svn_sqlite__column_blob(stmt, column, &len, NULL);
+ if (val == NULL)
+ {
+ *iprops = NULL;
+ return SVN_NO_ERROR;
+ }
+
+ SVN_ERR(svn_skel__parse_iprops(iprops,
+ svn_skel__parse(val, len, scratch_pool),
+ result_pool));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
svn_sqlite__column_checksum(const svn_checksum_t **checksum,
svn_sqlite__stmt_t *stmt, int column,
apr_pool_t *result_pool)
@@ -580,108 +696,6 @@ svn_sqlite__reset(svn_sqlite__stmt_t *stmt)
svn_error_t *
-svn_sqlite__set_schema_version(svn_sqlite__db_t *db,
- int version,
- apr_pool_t *scratch_pool)
-{
- const char *pragma_cmd = apr_psprintf(scratch_pool,
- "PRAGMA user_version = %d;",
- version);
-
- return svn_error_trace(exec_sql(db, pragma_cmd));
-}
-
-
-/* Time (in milliseconds) to wait for sqlite locks before giving up. */
-#define BUSY_TIMEOUT 10000
-
-
-#if 0
-/*
- * EXAMPLE
- *
- * The following provide an example for a series of SQL statements to
- * create/upgrade a SQLite schema across multiple "formats". This array
- * and integer would be passed into svn_sqlite__open().
- */
-static const char *schema_create_sql[] = {
- NULL, /* An empty database is format 0 */
-
- /* USER_VERSION 1 */
- "PRAGMA auto_vacuum = 1;"
- APR_EOL_STR
- "CREATE TABLE mergeinfo (revision INTEGER NOT NULL, mergedfrom TEXT NOT "
- "NULL, mergedto TEXT NOT NULL, mergedrevstart INTEGER NOT NULL, "
- "mergedrevend INTEGER NOT NULL, inheritable INTEGER NOT NULL);"
- APR_EOL_STR
- "CREATE INDEX mi_mergedfrom_idx ON mergeinfo (mergedfrom);"
- APR_EOL_STR
- "CREATE INDEX mi_mergedto_idx ON mergeinfo (mergedto);"
- APR_EOL_STR
- "CREATE INDEX mi_revision_idx ON mergeinfo (revision);"
- APR_EOL_STR
- "CREATE TABLE mergeinfo_changed (revision INTEGER NOT NULL, path TEXT "
- "NOT NULL);"
- APR_EOL_STR
- "CREATE UNIQUE INDEX mi_c_revpath_idx ON mergeinfo_changed (revision, path);"
- APR_EOL_STR
- "CREATE INDEX mi_c_path_idx ON mergeinfo_changed (path);"
- APR_EOL_STR
- "CREATE INDEX mi_c_revision_idx ON mergeinfo_changed (revision);"
- APR_EOL_STR,
-
- /* USER_VERSION 2 */
- "CREATE TABLE node_origins (node_id TEXT NOT NULL, node_rev_id TEXT NOT "
- "NULL);"
- APR_EOL_STR
- "CREATE UNIQUE INDEX no_ni_idx ON node_origins (node_id);"
- APR_EOL_STR
-};
-
-static const int latest_schema_format =
- sizeof(schema_create_sql)/sizeof(schema_create_sql[0]) - 1;
-
-#endif
-
-struct upgrade_baton
-{
- int current_schema;
- int latest_schema;
- const char * const *upgrade_sql;
-};
-
-
-/* This implements svn_sqlite__transaction_callback_t */
-static svn_error_t *
-upgrade_format(void *baton,
- svn_sqlite__db_t *db,
- apr_pool_t *scratch_pool)
-{
- struct upgrade_baton *ub = baton;
- int current_schema = ub->current_schema;
- apr_pool_t *iterpool = svn_pool_create(scratch_pool);
-
- while (current_schema < ub->latest_schema)
- {
- svn_pool_clear(iterpool);
-
- /* Go to the next schema */
- current_schema++;
-
- /* Run the upgrade SQL */
- if (ub->upgrade_sql[current_schema])
- SVN_ERR(exec_sql(db, ub->upgrade_sql[current_schema]));
-
- /* Update the user version pragma */
- SVN_ERR(svn_sqlite__set_schema_version(db, current_schema, iterpool));
- }
-
- svn_pool_destroy(iterpool);
-
- return SVN_NO_ERROR;
-}
-
-svn_error_t *
svn_sqlite__read_schema_version(int *version,
svn_sqlite__db_t *db,
apr_pool_t *scratch_pool)
@@ -697,41 +711,6 @@ svn_sqlite__read_schema_version(int *version,
}
-/* Check the schema format of the database, upgrading it if necessary.
- Return SVN_ERR_SQLITE_UNSUPPORTED_SCHEMA if the schema format is too new,
- or SVN_ERR_SQLITE_ERROR if an sqlite error occurs during validation.
- Return SVN_NO_ERROR if everything is okay. */
-static svn_error_t *
-check_format(svn_sqlite__db_t *db,
- int latest_schema,
- const char * const *upgrade_sql,
- apr_pool_t *scratch_pool)
-{
- int current_schema;
-
- /* Validate that the schema exists as expected. */
- SVN_ERR(svn_sqlite__read_schema_version(&current_schema, db, scratch_pool));
-
- if (current_schema == latest_schema)
- return SVN_NO_ERROR;
-
- if (current_schema < latest_schema)
- {
- struct upgrade_baton ub;
-
- ub.current_schema = current_schema;
- ub.latest_schema = latest_schema;
- ub.upgrade_sql = upgrade_sql;
-
- return svn_error_trace(svn_sqlite__with_transaction(
- db, upgrade_format, &ub, scratch_pool));
- }
-
- return svn_error_createf(SVN_ERR_SQLITE_UNSUPPORTED_SCHEMA, NULL,
- _("Schema format %d not recognized"),
- current_schema);
-}
-
static volatile svn_atomic_t sqlite_init_state = 0;
/* If possible, verify that SQLite was compiled in a thread-safe
@@ -740,12 +719,12 @@ static volatile svn_atomic_t sqlite_init_state = 0;
static svn_error_t *
init_sqlite(void *baton, apr_pool_t *pool)
{
- if (sqlite3_libversion_number() < SQLITE_VERSION_NUMBER)
+ if (sqlite3_libversion_number() < SVN_SQLITE_MIN_VERSION_NUMBER)
{
return svn_error_createf(
SVN_ERR_SQLITE_ERROR, NULL,
_("SQLite compiled for %s, but running with %s"),
- SQLITE_VERSION, sqlite3_libversion());
+ SVN_SQLITE_MIN_VERSION, sqlite3_libversion());
}
#if APR_HAS_THREADS
@@ -764,8 +743,8 @@ init_sqlite(void *baton, apr_pool_t *pool)
{
int err = sqlite3_config(SQLITE_CONFIG_MULTITHREAD);
if (err != SQLITE_OK && err != SQLITE_MISUSE)
- return svn_error_create(SQLITE_ERROR_CODE(err), NULL,
- _("Could not configure SQLite"));
+ return svn_error_createf(SQLITE_ERROR_CODE(err), NULL,
+ _("Could not configure SQLite [S%d]"), err);
}
SQLITE_ERR_MSG(sqlite3_initialize(), _("Could not initialize SQLite"));
@@ -790,22 +769,35 @@ internal_open(sqlite3 **db3, const char *path, svn_sqlite__mode_t mode,
else
SVN_ERR_MALFUNCTION();
- /* If this flag is defined (3.6.x), then let's turn off SQLite's mutexes.
- All svn objects are single-threaded, so we can already guarantee that
- our use of the SQLite handle will be serialized properly.
+ /* Turn off SQLite's mutexes. All svn objects are single-threaded,
+ so we can already guarantee that our use of the SQLite handle
+ will be serialized properly.
Note: in 3.6.x, we've already config'd SQLite into MULTITHREAD mode,
so this is probably redundant, but if we are running in a process where
somebody initialized SQLite before us it is needed anyway. */
-#ifdef SQLITE_OPEN_NOMUTEX
flags |= SQLITE_OPEN_NOMUTEX;
+
+#if !defined(WIN32) && !defined(SVN_SQLITE_INLINE)
+ if (mode == svn_sqlite__mode_rwcreate)
+ {
+ svn_node_kind_t kind;
+
+ /* Create the file before SQLite to avoid any permissions
+ problems with an SQLite build that uses the default
+ SQLITE_DEFAULT_FILE_PERMISSIONS of 644 modified by umask.
+ We simply want umask permissions. */
+ SVN_ERR(svn_io_check_path(path, &kind, scratch_pool));
+ if (kind == svn_node_none)
+ SVN_ERR(svn_io_file_create(path, "", scratch_pool));
+ }
#endif
/* Open the database. Note that a handle is returned, even when an error
occurs (except for out-of-memory); thus, we can safely use it to
extract an error message and construct an svn_error_t. */
{
- /* We'd like to use SQLITE_ERR_MSG here, but we can't since it would
+ /* We'd like to use SQLITE_ERR here, but we can't since it would
just return an error and leave the database open. So, we need to
do this manually. */
/* ### SQLITE_CANTOPEN */
@@ -819,8 +811,7 @@ internal_open(sqlite3 **db3, const char *path, svn_sqlite__mode_t mode,
error than the close error at this point. */
sqlite3_close(*db3);
- return svn_error_createf(SQLITE_ERROR_CODE(err_code), NULL,
- "sqlite: %s: '%s'", msg, path);
+ SQLITE_ERR_MSG(err_code, msg);
}
}
}
@@ -832,22 +823,6 @@ internal_open(sqlite3 **db3, const char *path, svn_sqlite__mode_t mode,
return SVN_NO_ERROR;
}
-svn_error_t *
-svn_sqlite__get_schema_version(int *version,
- const char *path,
- apr_pool_t *scratch_pool)
-{
- svn_sqlite__db_t db;
-
- SVN_ERR(svn_atomic__init_once(&sqlite_init_state,
- init_sqlite, NULL, scratch_pool));
- SVN_ERR(internal_open(&db.db3, path, svn_sqlite__mode_readonly,
- scratch_pool));
- SVN_ERR(svn_sqlite__read_schema_version(version, &db, scratch_pool));
- SQLITE_ERR(sqlite3_close(db.db3), &db);
-
- return SVN_NO_ERROR;
-}
/* APR cleanup function used to close the database when its pool is destroyed.
DATA should be the svn_sqlite__db_t handle for the database. */
@@ -867,8 +842,32 @@ close_apr(void *data)
for (i = 0; i < db->nbr_statements; i++)
{
if (db->prepared_stmts[i])
- err = svn_error_compose_create(
+ {
+ if (db->prepared_stmts[i]->needs_reset)
+ {
+#ifdef SVN_DEBUG
+ const char *stmt_text = db->statement_strings[i];
+ stmt_text = stmt_text; /* Provide value for debugger */
+
+ SVN_ERR_MALFUNCTION_NO_RETURN();
+#else
+ err = svn_error_compose_create(
+ err,
+ svn_sqlite__reset(db->prepared_stmts[i]));
+#endif
+ }
+ err = svn_error_compose_create(
svn_sqlite__finalize(db->prepared_stmts[i]), err);
+ }
+ }
+ /* And finalize any used internal statements */
+ for (; i < db->nbr_statements + STMT_INTERNAL_LAST; i++)
+ {
+ if (db->prepared_stmts[i])
+ {
+ err = svn_error_compose_create(
+ svn_sqlite__finalize(db->prepared_stmts[i]), err);
+ }
}
result = sqlite3_close(db->db3);
@@ -882,7 +881,7 @@ close_apr(void *data)
}
if (result != SQLITE_OK)
- return SQLITE_ERROR_CODE(result);
+ return SQLITE_ERROR_CODE(result); /* ### lossy */
db->db3 = NULL;
@@ -893,7 +892,7 @@ close_apr(void *data)
svn_error_t *
svn_sqlite__open(svn_sqlite__db_t **db, const char *path,
svn_sqlite__mode_t mode, const char * const statements[],
- int latest_schema, const char * const *upgrade_sql,
+ int unused1, const char * const *unused2,
apr_pool_t *result_pool, apr_pool_t *scratch_pool)
{
SVN_ERR(svn_atomic__init_once(&sqlite_init_state,
@@ -903,6 +902,18 @@ svn_sqlite__open(svn_sqlite__db_t **db, const char *path,
SVN_ERR(internal_open(&(*db)->db3, path, mode, scratch_pool));
+#if SQLITE_VERSION_NUMBER >= 3008000 && SQLITE_VERSION_NUMBER < 3009000
+ /* disable SQLITE_ENABLE_STAT3/4 from 3.8.1 - 3.8.3 (but not 3.8.3.1+)
+ * to prevent using it when it's buggy.
+ * See: https://www.sqlite.org/src/info/4c86b126f2 */
+ if (sqlite3_libversion_number() > 3008000 &&
+ sqlite3_libversion_number() < 3008004 &&
+ strcmp(sqlite3_sourceid(),"2014-02-11")<0)
+ {
+ sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS, (*db)->db3, 0x800);
+ }
+#endif
+
#ifdef SQLITE3_DEBUG
sqlite3_trace((*db)->db3, sqlite_tracer, (*db)->db3);
#endif
@@ -910,23 +921,9 @@ svn_sqlite__open(svn_sqlite__db_t **db, const char *path,
sqlite3_profile((*db)->db3, sqlite_profiler, (*db)->db3);
#endif
- /* Work around a bug in SQLite 3.7.7. The bug was fixed in SQLite 3.7.7.1.
-
- See:
-
- Date: Sun, 26 Jun 2011 18:52:14 -0400
- From: Richard Hipp <drh@sqlite.org>
- To: General Discussion of SQLite Database <sqlite-users@sqlite.org>
- Cc: dev@subversion.apache.org
- Subject: Re: [sqlite] PRAGMA bug in 3.7.7 (but fine in 3.7.6.3)
- Message-ID: <BANLkTimDypWGY-8tHFgJsTxN6ty6OkdJ0Q@mail.gmail.com>
- */
+ /* ### simplify this. remnants of some old SQLite compat code. */
{
int ignored_err = SQLITE_OK;
-#if !SQLITE_VERSION_AT_LEAST(3,7,8) && defined(SQLITE_SCHEMA)
- if (!strcmp(sqlite3_libversion(), "3.7.7"))
- ignored_err = SQLITE_SCHEMA;
-#endif
SVN_ERR(exec_sql2(*db, "PRAGMA case_sensitive_like=1;", ignored_err));
}
@@ -948,24 +945,34 @@ svn_sqlite__open(svn_sqlite__db_t **db, const char *path,
/* Enable recursive triggers so that a user trigger will fire
in the deletion phase of an INSERT OR REPLACE statement.
Requires SQLite >= 3.6.18 */
- "PRAGMA recursive_triggers=ON;"));
-
-#if SQLITE_VERSION_AT_LEAST(3,6,19) && defined(SVN_DEBUG)
+ "PRAGMA recursive_triggers=ON;"
+ /* Enforce current Sqlite default behavior. Some distributions
+ might change the Sqlite defaults without realizing how this
+ affects application(read: Subversion) performance/behavior. */
+ "PRAGMA foreign_keys=OFF;" /* SQLITE_DEFAULT_FOREIGN_KEYS*/
+ "PRAGMA locking_mode = NORMAL;" /* SQLITE_DEFAULT_LOCKING_MODE */
+ ));
+
+#if defined(SVN_DEBUG)
/* When running in debug mode, enable the checking of foreign key
constraints. This has possible performance implications, so we don't
bother to do it for production...for now. */
SVN_ERR(exec_sql(*db, "PRAGMA foreign_keys=ON;"));
#endif
+#ifdef SVN_SQLITE_REVERSE_UNORDERED_SELECTS
+ /* When enabled, this PRAGMA causes SELECT statements without an ORDER BY
+ clause to emit their results in the reverse order of what they normally
+ would. This can help detecting invalid assumptions about the result
+ order.*/
+ SVN_ERR(exec_sql(*db, "PRAGMA reverse_unordered_selects=ON;"));
+#endif
+
/* Store temporary tables in RAM instead of in temporary files, but don't
fail on this if this option is disabled in the sqlite compilation by
setting SQLITE_TEMP_STORE to 0 (always to disk) */
svn_error_clear(exec_sql(*db, "PRAGMA temp_store = MEMORY;"));
- /* Validate the schema, upgrading if necessary. */
- if (upgrade_sql != NULL)
- SVN_ERR(check_format(*db, latest_schema, upgrade_sql, scratch_pool));
-
/* Store the provided statements. */
if (statements)
{
@@ -976,11 +983,19 @@ svn_sqlite__open(svn_sqlite__db_t **db, const char *path,
statements++;
(*db)->nbr_statements++;
}
- (*db)->prepared_stmts = apr_pcalloc(result_pool, (*db)->nbr_statements
+
+ (*db)->prepared_stmts = apr_pcalloc(
+ result_pool,
+ ((*db)->nbr_statements + STMT_INTERNAL_LAST)
* sizeof(svn_sqlite__stmt_t *));
}
else
- (*db)->nbr_statements = 0;
+ {
+ (*db)->nbr_statements = 0;
+ (*db)->prepared_stmts = apr_pcalloc(result_pool,
+ (0 + STMT_INTERNAL_LAST)
+ * sizeof(svn_sqlite__stmt_t *));
+ }
(*db)->state_pool = result_pool;
apr_pool_cleanup_register(result_pool, *db, close_apr, apr_pool_cleanup_null);
@@ -1021,22 +1036,54 @@ reset_all_statements(svn_sqlite__db_t *db,
return err;
}
-/* The body of svn_sqlite__with_transaction() and
- svn_sqlite__with_immediate_transaction(), which see. */
-static svn_error_t *
-with_transaction(svn_sqlite__db_t *db,
- svn_sqlite__transaction_callback_t cb_func,
- void *cb_baton,
- apr_pool_t *scratch_pool /* NULL allowed */)
+svn_error_t *
+svn_sqlite__begin_transaction(svn_sqlite__db_t *db)
{
- svn_error_t *err;
+ svn_sqlite__stmt_t *stmt;
- err = cb_func(cb_baton, db, scratch_pool);
+ SVN_ERR(get_internal_statement(&stmt, db,
+ STMT_INTERNAL_BEGIN_TRANSACTION));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_sqlite__begin_immediate_transaction(svn_sqlite__db_t *db)
+{
+ svn_sqlite__stmt_t *stmt;
+
+ SVN_ERR(get_internal_statement(&stmt, db,
+ STMT_INTERNAL_BEGIN_IMMEDIATE_TRANSACTION));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_sqlite__begin_savepoint(svn_sqlite__db_t *db)
+{
+ svn_sqlite__stmt_t *stmt;
+
+ SVN_ERR(get_internal_statement(&stmt, db,
+ STMT_INTERNAL_SAVEPOINT_SVN));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_sqlite__finish_transaction(svn_sqlite__db_t *db,
+ svn_error_t *err)
+{
+ svn_sqlite__stmt_t *stmt;
/* Commit or rollback the sqlite transaction. */
if (err)
{
- svn_error_t *err2 = exec_sql(db, "ROLLBACK TRANSACTION;");
+ svn_error_t *err2;
+
+ err2 = get_internal_statement(&stmt, db,
+ STMT_INTERNAL_ROLLBACK_TRANSACTION);
+ if (!err2)
+ err2 = svn_sqlite__step_done(stmt);
if (err2 && err2->apr_err == SVN_ERR_SQLITE_BUSY)
{
@@ -1061,7 +1108,7 @@ with_transaction(svn_sqlite__db_t *db,
err2 = reset_all_statements(db, err2);
err2 = svn_error_compose_create(
- exec_sql(db, "ROLLBACK TRANSACTION;"),
+ svn_sqlite__step_done(stmt),
err2);
}
@@ -1069,74 +1116,83 @@ with_transaction(svn_sqlite__db_t *db,
err2);
}
- return svn_error_trace(exec_sql(db, "COMMIT TRANSACTION;"));
+ SVN_ERR(get_internal_statement(&stmt, db, STMT_INTERNAL_COMMIT_TRANSACTION));
+ return svn_error_trace(svn_sqlite__step_done(stmt));
}
svn_error_t *
-svn_sqlite__with_transaction(svn_sqlite__db_t *db,
- svn_sqlite__transaction_callback_t cb_func,
- void *cb_baton,
- apr_pool_t *scratch_pool /* NULL allowed */)
+svn_sqlite__finish_savepoint(svn_sqlite__db_t *db,
+ svn_error_t *err)
{
- SVN_ERR(exec_sql(db, "BEGIN TRANSACTION;"));
- return svn_error_trace(with_transaction(db, cb_func, cb_baton,
- scratch_pool));
-}
-
-svn_error_t *
-svn_sqlite__with_immediate_transaction(
- svn_sqlite__db_t *db,
- svn_sqlite__transaction_callback_t cb_func,
- void *cb_baton,
- apr_pool_t *scratch_pool /* NULL allowed */)
-{
- SVN_ERR(exec_sql(db, "BEGIN IMMEDIATE TRANSACTION;"));
- return svn_error_trace(with_transaction(db, cb_func, cb_baton,
- scratch_pool));
-}
-
-svn_error_t *
-svn_sqlite__with_lock(svn_sqlite__db_t *db,
- svn_sqlite__transaction_callback_t cb_func,
- void *cb_baton,
- apr_pool_t *scratch_pool)
-{
- svn_error_t *err;
- int savepoint = db->savepoint_nr++;
- /* This buffer is plenty big to hold the SAVEPOINT and RELEASE commands. */
- char buf[32];
-
- snprintf(buf, sizeof(buf), "SAVEPOINT s%u", savepoint);
- SVN_ERR(exec_sql(db, buf));
- err = cb_func(cb_baton, db, scratch_pool);
+ svn_sqlite__stmt_t *stmt;
if (err)
{
svn_error_t *err2;
- snprintf(buf, sizeof(buf), "ROLLBACK TO s%u", savepoint);
- err2 = exec_sql(db, buf);
+ err2 = get_internal_statement(&stmt, db,
+ STMT_INTERNAL_ROLLBACK_TO_SAVEPOINT_SVN);
+
+ if (!err2)
+ err2 = svn_sqlite__step_done(stmt);
if (err2 && err2->apr_err == SVN_ERR_SQLITE_BUSY)
{
/* Ok, we have a major problem. Some statement is still open, which
makes it impossible to release this savepoint.
- ### See huge comment in svn_sqlite__with_transaction for
+ ### See huge comment in svn_sqlite__finish_transaction for
further details */
err2 = reset_all_statements(db, err2);
- err2 = svn_error_compose_create(exec_sql(db, buf), err2);
+ err2 = svn_error_compose_create(svn_sqlite__step_done(stmt), err2);
}
- snprintf(buf, sizeof(buf), "RELEASE s%u", savepoint);
- err2 = svn_error_compose_create(exec_sql(db, buf), err2);
+ err = svn_error_compose_create(err, err2);
+ err2 = get_internal_statement(&stmt, db,
+ STMT_INTERNAL_RELEASE_SAVEPOINT_SVN);
+
+ if (!err2)
+ err2 = svn_sqlite__step_done(stmt);
return svn_error_trace(svn_error_compose_create(err, err2));
}
- snprintf(buf, sizeof(buf), "RELEASE s%u", savepoint);
- return svn_error_trace(exec_sql(db, buf));
+ SVN_ERR(get_internal_statement(&stmt, db,
+ STMT_INTERNAL_RELEASE_SAVEPOINT_SVN));
+
+ return svn_error_trace(svn_sqlite__step_done(stmt));
+}
+
+svn_error_t *
+svn_sqlite__with_transaction(svn_sqlite__db_t *db,
+ svn_sqlite__transaction_callback_t cb_func,
+ void *cb_baton,
+ apr_pool_t *scratch_pool /* NULL allowed */)
+{
+ SVN_SQLITE__WITH_TXN(cb_func(cb_baton, db, scratch_pool), db);
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_sqlite__with_immediate_transaction(
+ svn_sqlite__db_t *db,
+ svn_sqlite__transaction_callback_t cb_func,
+ void *cb_baton,
+ apr_pool_t *scratch_pool /* NULL allowed */)
+{
+ SVN_SQLITE__WITH_IMMEDIATE_TXN(cb_func(cb_baton, db, scratch_pool), db);
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_sqlite__with_lock(svn_sqlite__db_t *db,
+ svn_sqlite__transaction_callback_t cb_func,
+ void *cb_baton,
+ apr_pool_t *scratch_pool /* NULL allowed */)
+{
+ SVN_SQLITE__WITH_LOCK(cb_func(cb_baton, db, scratch_pool), db);
+ return SVN_NO_ERROR;
}
svn_error_t *
@@ -1147,7 +1203,7 @@ svn_sqlite__hotcopy(const char *src_path,
svn_sqlite__db_t *src_db;
SVN_ERR(svn_sqlite__open(&src_db, src_path, svn_sqlite__mode_readonly,
- internal_statements, 0, NULL,
+ NULL, 0, NULL,
scratch_pool, scratch_pool));
{
diff --git a/subversion/libsvn_subr/sqlite3wrapper.c b/subversion/libsvn_subr/sqlite3wrapper.c
new file mode 100644
index 0000000..4bbb619
--- /dev/null
+++ b/subversion/libsvn_subr/sqlite3wrapper.c
@@ -0,0 +1,63 @@
+/* sqlite3wrapper.c
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#include "svn_private_config.h"
+
+/* Include sqlite3 inline, making all symbols private. */
+#ifdef SVN_SQLITE_INLINE
+# define SQLITE_OMIT_DEPRECATED 1
+# define SQLITE_API static
+# if __GNUC__ > 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ >= 6 || __APPLE_CC__))
+# if !__APPLE_CC__ || __GNUC_MINOR__ >= 6
+# pragma GCC diagnostic push
+# endif
+# pragma GCC diagnostic ignored "-Wunreachable-code"
+# pragma GCC diagnostic ignored "-Wunused-function"
+# pragma GCC diagnostic ignored "-Wcast-qual"
+# pragma GCC diagnostic ignored "-Wunused"
+# pragma GCC diagnostic ignored "-Wshadow"
+# if __APPLE_CC__
+# pragma GCC diagnostic ignored "-Wshorten-64-to-32"
+# endif
+# endif
+# ifdef __APPLE__
+# include <Availability.h>
+# if __MAC_OS_X_VERSION_MIN_REQUIRED < 1060
+ /* <libkern/OSAtomic.h> is included on OS X by sqlite3.c, and
+ on old systems (Leopard or older), it cannot be compiled
+ with -std=c89 because it uses inline. This is a work-around. */
+# define inline __inline__
+# include <libkern/OSAtomic.h>
+# undef inline
+# endif
+# endif
+# define SQLITE_DEFAULT_FILE_PERMISSIONS 0666
+# include <sqlite3.c>
+# if __GNUC__ > 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ >= 6))
+# pragma GCC diagnostic pop
+# endif
+
+/* Expose the sqlite API vtable and the two missing functions */
+const sqlite3_api_routines *const svn_sqlite3__api_funcs = &sqlite3Apis;
+int (*const svn_sqlite3__api_initialize)(void) = sqlite3_initialize;
+int (*const svn_sqlite3__api_config)(int, ...) = sqlite3_config;
+#endif
diff --git a/subversion/libsvn_subr/ssl_client_cert_providers.c b/subversion/libsvn_subr/ssl_client_cert_providers.c
index 7b2339a..cf86fa1 100644
--- a/subversion/libsvn_subr/ssl_client_cert_providers.c
+++ b/subversion/libsvn_subr/ssl_client_cert_providers.c
@@ -29,6 +29,7 @@
/*** Includes. ***/
#include <apr_pools.h>
+#include "svn_hash.h"
#include "svn_auth.h"
#include "svn_error.h"
#include "svn_config.h"
@@ -48,12 +49,10 @@ ssl_client_cert_file_first_credentials(void **credentials_p,
const char *realmstring,
apr_pool_t *pool)
{
- svn_config_t *cfg = apr_hash_get(parameters,
- SVN_AUTH_PARAM_CONFIG_CATEGORY_SERVERS,
- APR_HASH_KEY_STRING);
- const char *server_group = apr_hash_get(parameters,
- SVN_AUTH_PARAM_SERVER_GROUP,
- APR_HASH_KEY_STRING);
+ svn_config_t *cfg = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_CONFIG_CATEGORY_SERVERS);
+ const char *server_group = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_SERVER_GROUP);
const char *cert_file;
cert_file =
@@ -139,9 +138,8 @@ ssl_client_cert_prompt_first_cred(void **credentials_p,
ssl_client_cert_prompt_provider_baton_t *pb = provider_baton;
ssl_client_cert_prompt_iter_baton_t *ib =
apr_pcalloc(pool, sizeof(*ib));
- const char *no_auth_cache = apr_hash_get(parameters,
- SVN_AUTH_PARAM_NO_AUTH_CACHE,
- APR_HASH_KEY_STRING);
+ const char *no_auth_cache = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_NO_AUTH_CACHE);
SVN_ERR(pb->prompt_func((svn_auth_cred_ssl_client_cert_t **) credentials_p,
pb->prompt_baton, realmstring, ! no_auth_cache,
@@ -165,9 +163,8 @@ ssl_client_cert_prompt_next_cred(void **credentials_p,
apr_pool_t *pool)
{
ssl_client_cert_prompt_iter_baton_t *ib = iter_baton;
- const char *no_auth_cache = apr_hash_get(parameters,
- SVN_AUTH_PARAM_NO_AUTH_CACHE,
- APR_HASH_KEY_STRING);
+ const char *no_auth_cache = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_NO_AUTH_CACHE);
if ((ib->pb->retry_limit >= 0) && (ib->retries >= ib->pb->retry_limit))
{
diff --git a/subversion/libsvn_subr/ssl_client_cert_pw_providers.c b/subversion/libsvn_subr/ssl_client_cert_pw_providers.c
index 56b5444..6c1bcf1 100644
--- a/subversion/libsvn_subr/ssl_client_cert_pw_providers.c
+++ b/subversion/libsvn_subr/ssl_client_cert_pw_providers.c
@@ -25,6 +25,7 @@
#include <apr_pools.h>
+#include "svn_hash.h"
#include "svn_auth.h"
#include "svn_error.h"
#include "svn_config.h"
@@ -63,8 +64,9 @@ typedef struct ssl_client_cert_pw_file_provider_baton_t
/* This implements the svn_auth__password_get_t interface.
Set **PASSPHRASE to the plaintext passphrase retrieved from CREDS;
ignore other parameters. */
-svn_boolean_t
-svn_auth__ssl_client_cert_pw_get(const char **passphrase,
+svn_error_t *
+svn_auth__ssl_client_cert_pw_get(svn_boolean_t *done,
+ const char **passphrase,
apr_hash_t *creds,
const char *realmstring,
const char *username,
@@ -73,19 +75,22 @@ svn_auth__ssl_client_cert_pw_get(const char **passphrase,
apr_pool_t *pool)
{
svn_string_t *str;
- str = apr_hash_get(creds, AUTHN_PASSPHRASE_KEY, APR_HASH_KEY_STRING);
+ str = svn_hash_gets(creds, AUTHN_PASSPHRASE_KEY);
if (str && str->data)
{
*passphrase = str->data;
- return TRUE;
+ *done = TRUE;
+ return SVN_NO_ERROR;
}
- return FALSE;
+ *done = FALSE;
+ return SVN_NO_ERROR;
}
/* This implements the svn_auth__password_set_t interface.
Store PASSPHRASE in CREDS; ignore other parameters. */
-svn_boolean_t
-svn_auth__ssl_client_cert_pw_set(apr_hash_t *creds,
+svn_error_t *
+svn_auth__ssl_client_cert_pw_set(svn_boolean_t *done,
+ apr_hash_t *creds,
const char *realmstring,
const char *username,
const char *passphrase,
@@ -93,31 +98,29 @@ svn_auth__ssl_client_cert_pw_set(apr_hash_t *creds,
svn_boolean_t non_interactive,
apr_pool_t *pool)
{
- apr_hash_set(creds, AUTHN_PASSPHRASE_KEY, APR_HASH_KEY_STRING,
- svn_string_create(passphrase, pool));
- return TRUE;
+ svn_hash_sets(creds, AUTHN_PASSPHRASE_KEY,
+ svn_string_create(passphrase, pool));
+ *done = TRUE;
+ return SVN_NO_ERROR;
}
svn_error_t *
-svn_auth__ssl_client_cert_pw_file_first_creds_helper
- (void **credentials_p,
- void **iter_baton,
- void *provider_baton,
- apr_hash_t *parameters,
- const char *realmstring,
- svn_auth__password_get_t passphrase_get,
- const char *passtype,
- apr_pool_t *pool)
+svn_auth__ssl_client_cert_pw_cache_get(void **credentials_p,
+ void **iter_baton,
+ void *provider_baton,
+ apr_hash_t *parameters,
+ const char *realmstring,
+ svn_auth__password_get_t passphrase_get,
+ const char *passtype,
+ apr_pool_t *pool)
{
- svn_config_t *cfg = apr_hash_get(parameters,
- SVN_AUTH_PARAM_CONFIG_CATEGORY_SERVERS,
- APR_HASH_KEY_STRING);
- const char *server_group = apr_hash_get(parameters,
- SVN_AUTH_PARAM_SERVER_GROUP,
- APR_HASH_KEY_STRING);
- svn_boolean_t non_interactive = apr_hash_get(parameters,
- SVN_AUTH_PARAM_NON_INTERACTIVE,
- APR_HASH_KEY_STRING) != NULL;
+ svn_config_t *cfg = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_CONFIG_CATEGORY_SERVERS);
+ const char *server_group = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_SERVER_GROUP);
+ svn_boolean_t non_interactive = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_NON_INTERACTIVE)
+ != NULL;
const char *password =
svn_config_get_server_setting(cfg, server_group,
SVN_CONFIG_OPTION_SSL_CLIENT_CERT_PASSWORD,
@@ -126,9 +129,8 @@ svn_auth__ssl_client_cert_pw_file_first_creds_helper
{
svn_error_t *err;
apr_hash_t *creds_hash = NULL;
- const char *config_dir = apr_hash_get(parameters,
- SVN_AUTH_PARAM_CONFIG_DIR,
- APR_HASH_KEY_STRING);
+ const char *config_dir = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_CONFIG_DIR);
/* Try to load passphrase from the auth/ cache. */
err = svn_config_read_auth_data(&creds_hash,
@@ -137,8 +139,11 @@ svn_auth__ssl_client_cert_pw_file_first_creds_helper
svn_error_clear(err);
if (! err && creds_hash)
{
- if (!passphrase_get(&password, creds_hash, realmstring,
- NULL, parameters, non_interactive, pool))
+ svn_boolean_t done;
+
+ SVN_ERR(passphrase_get(&done, &password, creds_hash, realmstring,
+ NULL, parameters, non_interactive, pool));
+ if (!done)
password = NULL;
}
}
@@ -158,47 +163,34 @@ svn_auth__ssl_client_cert_pw_file_first_creds_helper
svn_error_t *
-svn_auth__ssl_client_cert_pw_file_save_creds_helper
- (svn_boolean_t *saved,
- void *credentials,
- void *provider_baton,
- apr_hash_t *parameters,
- const char *realmstring,
- svn_auth__password_set_t passphrase_set,
- const char *passtype,
- apr_pool_t *pool)
+svn_auth__ssl_client_cert_pw_cache_set(svn_boolean_t *saved,
+ void *credentials,
+ void *provider_baton,
+ apr_hash_t *parameters,
+ const char *realmstring,
+ svn_auth__password_set_t passphrase_set,
+ const char *passtype,
+ apr_pool_t *pool)
{
svn_auth_cred_ssl_client_cert_pw_t *creds = credentials;
apr_hash_t *creds_hash = NULL;
const char *config_dir;
svn_error_t *err;
svn_boolean_t dont_store_passphrase =
- apr_hash_get(parameters,
- SVN_AUTH_PARAM_DONT_STORE_SSL_CLIENT_CERT_PP,
- APR_HASH_KEY_STRING) != NULL;
- const char *store_ssl_client_cert_pp_plaintext =
- apr_hash_get(parameters,
- SVN_AUTH_PARAM_STORE_SSL_CLIENT_CERT_PP_PLAINTEXT,
- APR_HASH_KEY_STRING);
- svn_boolean_t non_interactive = apr_hash_get(parameters,
- SVN_AUTH_PARAM_NON_INTERACTIVE,
- APR_HASH_KEY_STRING) != NULL;
- ssl_client_cert_pw_file_provider_baton_t *b =
- (ssl_client_cert_pw_file_provider_baton_t *)provider_baton;
-
+ svn_hash_gets(parameters, SVN_AUTH_PARAM_DONT_STORE_SSL_CLIENT_CERT_PP)
+ != NULL;
+ svn_boolean_t non_interactive =
+ svn_hash_gets(parameters, SVN_AUTH_PARAM_NON_INTERACTIVE) != NULL;
svn_boolean_t no_auth_cache =
- (! creds->may_save) || (apr_hash_get(parameters,
- SVN_AUTH_PARAM_NO_AUTH_CACHE,
- APR_HASH_KEY_STRING) != NULL);
+ (! creds->may_save)
+ || (svn_hash_gets(parameters, SVN_AUTH_PARAM_NO_AUTH_CACHE) != NULL);
*saved = FALSE;
if (no_auth_cache)
return SVN_NO_ERROR;
- config_dir = apr_hash_get(parameters,
- SVN_AUTH_PARAM_CONFIG_DIR,
- APR_HASH_KEY_STRING);
+ config_dir = svn_hash_gets(parameters, SVN_AUTH_PARAM_CONFIG_DIR);
creds_hash = apr_hash_make(pool);
/* Don't store passphrase in any form if the user has told
@@ -219,6 +211,15 @@ svn_auth__ssl_client_cert_pw_file_save_creds_helper
}
else
{
+#ifdef SVN_DISABLE_PLAINTEXT_PASSWORD_STORAGE
+ may_save_passphrase = FALSE;
+#else
+ const char *store_ssl_client_cert_pp_plaintext =
+ svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_STORE_SSL_CLIENT_CERT_PP_PLAINTEXT);
+ ssl_client_cert_pw_file_provider_baton_t *b =
+ (ssl_client_cert_pw_file_provider_baton_t *)provider_baton;
+
if (svn_cstring_casecmp(store_ssl_client_cert_pp_plaintext,
SVN_CONFIG_ASK) == 0)
{
@@ -239,8 +240,7 @@ svn_auth__ssl_client_cert_pw_file_save_creds_helper
"cached answer is no" and "no answer has been
cached yet". */
svn_boolean_t *cached_answer =
- apr_hash_get(b->plaintext_answers, realmstring,
- APR_HASH_KEY_STRING);
+ svn_hash_gets(b->plaintext_answers, realmstring);
if (cached_answer != NULL)
{
@@ -270,8 +270,8 @@ svn_auth__ssl_client_cert_pw_file_save_creds_helper
cached_answer = apr_palloc(cached_answer_pool,
sizeof(*cached_answer));
*cached_answer = may_save_passphrase;
- apr_hash_set(b->plaintext_answers, realmstring,
- APR_HASH_KEY_STRING, cached_answer);
+ svn_hash_sets(b->plaintext_answers, realmstring,
+ cached_answer);
}
}
else
@@ -297,19 +297,19 @@ svn_auth__ssl_client_cert_pw_file_save_creds_helper
store_ssl_client_cert_pp_plaintext,
SVN_AUTH_PARAM_STORE_SSL_CLIENT_CERT_PP_PLAINTEXT);
}
+#endif
}
if (may_save_passphrase)
{
- *saved = passphrase_set(creds_hash, realmstring,
- NULL, creds->password, parameters,
- non_interactive, pool);
+ SVN_ERR(passphrase_set(saved, creds_hash, realmstring,
+ NULL, creds->password, parameters,
+ non_interactive, pool));
if (*saved && passtype)
{
- apr_hash_set(creds_hash, AUTHN_PASSTYPE_KEY,
- APR_HASH_KEY_STRING,
- svn_string_create(passtype, pool));
+ svn_hash_sets(creds_hash, AUTHN_PASSTYPE_KEY,
+ svn_string_create(passtype, pool));
}
/* Save credentials to disk. */
@@ -336,15 +336,12 @@ ssl_client_cert_pw_file_first_credentials(void **credentials_p,
const char *realmstring,
apr_pool_t *pool)
{
- return svn_auth__ssl_client_cert_pw_file_first_creds_helper
- (credentials_p,
- iter_baton,
- provider_baton,
- parameters,
- realmstring,
- svn_auth__ssl_client_cert_pw_get,
- SVN_AUTH__SIMPLE_PASSWORD_TYPE,
- pool);
+ return svn_auth__ssl_client_cert_pw_cache_get(credentials_p, iter_baton,
+ provider_baton, parameters,
+ realmstring,
+ svn_auth__ssl_client_cert_pw_get,
+ SVN_AUTH__SIMPLE_PASSWORD_TYPE,
+ pool);
}
@@ -358,14 +355,13 @@ ssl_client_cert_pw_file_save_credentials(svn_boolean_t *saved,
const char *realmstring,
apr_pool_t *pool)
{
- return svn_auth__ssl_client_cert_pw_file_save_creds_helper
- (saved, credentials,
- provider_baton,
- parameters,
- realmstring,
- svn_auth__ssl_client_cert_pw_set,
- SVN_AUTH__SIMPLE_PASSWORD_TYPE,
- pool);
+ return svn_auth__ssl_client_cert_pw_cache_set(saved, credentials,
+ provider_baton,
+ parameters,
+ realmstring,
+ svn_auth__ssl_client_cert_pw_set,
+ SVN_AUTH__SIMPLE_PASSWORD_TYPE,
+ pool);
}
@@ -439,9 +435,8 @@ ssl_client_cert_pw_prompt_first_cred(void **credentials_p,
ssl_client_cert_pw_prompt_provider_baton_t *pb = provider_baton;
ssl_client_cert_pw_prompt_iter_baton_t *ib =
apr_pcalloc(pool, sizeof(*ib));
- const char *no_auth_cache = apr_hash_get(parameters,
- SVN_AUTH_PARAM_NO_AUTH_CACHE,
- APR_HASH_KEY_STRING);
+ const char *no_auth_cache = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_NO_AUTH_CACHE);
SVN_ERR(pb->prompt_func((svn_auth_cred_ssl_client_cert_pw_t **)
credentials_p, pb->prompt_baton, realmstring,
@@ -465,9 +460,8 @@ ssl_client_cert_pw_prompt_next_cred(void **credentials_p,
apr_pool_t *pool)
{
ssl_client_cert_pw_prompt_iter_baton_t *ib = iter_baton;
- const char *no_auth_cache = apr_hash_get(parameters,
- SVN_AUTH_PARAM_NO_AUTH_CACHE,
- APR_HASH_KEY_STRING);
+ const char *no_auth_cache = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_NO_AUTH_CACHE);
if ((ib->pb->retry_limit >= 0) && (ib->retries >= ib->pb->retry_limit))
{
diff --git a/subversion/libsvn_subr/ssl_server_trust_providers.c b/subversion/libsvn_subr/ssl_server_trust_providers.c
index 56c5e4b..c69be77 100644
--- a/subversion/libsvn_subr/ssl_server_trust_providers.c
+++ b/subversion/libsvn_subr/ssl_server_trust_providers.c
@@ -24,6 +24,7 @@
#include <apr_pools.h>
+#include "svn_hash.h"
#include "svn_auth.h"
#include "svn_error.h"
#include "svn_config.h"
@@ -50,13 +51,10 @@ ssl_server_trust_file_first_credentials(void **credentials,
const char *realmstring,
apr_pool_t *pool)
{
- apr_uint32_t *failures = apr_hash_get(parameters,
- SVN_AUTH_PARAM_SSL_SERVER_FAILURES,
- APR_HASH_KEY_STRING);
+ apr_uint32_t *failures = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_SSL_SERVER_FAILURES);
const svn_auth_ssl_server_cert_info_t *cert_info =
- apr_hash_get(parameters,
- SVN_AUTH_PARAM_SSL_SERVER_CERT_INFO,
- APR_HASH_KEY_STRING);
+ svn_hash_gets(parameters, SVN_AUTH_PARAM_SSL_SERVER_CERT_INFO);
apr_hash_t *creds_hash = NULL;
const char *config_dir;
svn_error_t *error = SVN_NO_ERROR;
@@ -65,9 +63,7 @@ ssl_server_trust_file_first_credentials(void **credentials,
*iter_baton = NULL;
/* Check if this is a permanently accepted certificate */
- config_dir = apr_hash_get(parameters,
- SVN_AUTH_PARAM_CONFIG_DIR,
- APR_HASH_KEY_STRING);
+ config_dir = svn_hash_gets(parameters, SVN_AUTH_PARAM_CONFIG_DIR);
error =
svn_config_read_auth_data(&creds_hash, SVN_AUTH_CRED_SSL_SERVER_TRUST,
realmstring, config_dir, pool);
@@ -77,11 +73,9 @@ ssl_server_trust_file_first_credentials(void **credentials,
svn_string_t *trusted_cert, *this_cert, *failstr;
apr_uint32_t last_failures = 0;
- trusted_cert = apr_hash_get(creds_hash, AUTHN_ASCII_CERT_KEY,
- APR_HASH_KEY_STRING);
+ trusted_cert = svn_hash_gets(creds_hash, AUTHN_ASCII_CERT_KEY);
this_cert = svn_string_create(cert_info->ascii_cert, pool);
- failstr = apr_hash_get(creds_hash, AUTHN_FAILURES_KEY,
- APR_HASH_KEY_STRING);
+ failstr = svn_hash_gets(creds_hash, AUTHN_FAILURES_KEY);
if (failstr)
{
@@ -131,20 +125,17 @@ ssl_server_trust_file_save_credentials(svn_boolean_t *saved,
if (! creds->may_save)
return SVN_NO_ERROR;
- config_dir = apr_hash_get(parameters,
- SVN_AUTH_PARAM_CONFIG_DIR,
- APR_HASH_KEY_STRING);
+ config_dir = svn_hash_gets(parameters, SVN_AUTH_PARAM_CONFIG_DIR);
- cert_info = apr_hash_get(parameters,
- SVN_AUTH_PARAM_SSL_SERVER_CERT_INFO,
- APR_HASH_KEY_STRING);
+ cert_info = svn_hash_gets(parameters, SVN_AUTH_PARAM_SSL_SERVER_CERT_INFO);
creds_hash = apr_hash_make(pool);
- apr_hash_set(creds_hash, AUTHN_ASCII_CERT_KEY, APR_HASH_KEY_STRING,
- svn_string_create(cert_info->ascii_cert, pool));
- apr_hash_set(creds_hash, AUTHN_FAILURES_KEY, APR_HASH_KEY_STRING,
- svn_string_createf(pool, "%lu", (unsigned long)
- creds->accepted_failures));
+ svn_hash_sets(creds_hash, AUTHN_ASCII_CERT_KEY,
+ svn_string_create(cert_info->ascii_cert, pool));
+ svn_hash_sets(creds_hash,
+ AUTHN_FAILURES_KEY,
+ svn_string_createf(pool, "%lu",
+ (unsigned long)creds->accepted_failures));
SVN_ERR(svn_config_write_auth_data(creds_hash,
SVN_AUTH_CRED_SSL_SERVER_TRUST,
@@ -198,21 +189,18 @@ ssl_server_trust_prompt_first_cred(void **credentials_p,
apr_pool_t *pool)
{
ssl_server_trust_prompt_provider_baton_t *pb = provider_baton;
- apr_uint32_t *failures = apr_hash_get(parameters,
- SVN_AUTH_PARAM_SSL_SERVER_FAILURES,
- APR_HASH_KEY_STRING);
- const char *no_auth_cache = apr_hash_get(parameters,
- SVN_AUTH_PARAM_NO_AUTH_CACHE,
- APR_HASH_KEY_STRING);
+ apr_uint32_t *failures = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_SSL_SERVER_FAILURES);
+ const char *no_auth_cache = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_NO_AUTH_CACHE);
const svn_auth_ssl_server_cert_info_t *cert_info =
- apr_hash_get(parameters,
- SVN_AUTH_PARAM_SSL_SERVER_CERT_INFO,
- APR_HASH_KEY_STRING);
-
- SVN_ERR(pb->prompt_func((svn_auth_cred_ssl_server_trust_t **)
- credentials_p, pb->prompt_baton, realmstring,
- *failures, cert_info, ! no_auth_cache &&
- ! (*failures & SVN_AUTH_SSL_OTHER), pool));
+ svn_hash_gets(parameters, SVN_AUTH_PARAM_SSL_SERVER_CERT_INFO);
+ svn_boolean_t may_save = (!no_auth_cache
+ && !(*failures & SVN_AUTH_SSL_OTHER));
+
+ SVN_ERR(pb->prompt_func((svn_auth_cred_ssl_server_trust_t **)credentials_p,
+ pb->prompt_baton, realmstring, *failures, cert_info,
+ may_save, pool));
*iter_baton = NULL;
return SVN_NO_ERROR;
diff --git a/subversion/libsvn_subr/stream.c b/subversion/libsvn_subr/stream.c
index 65ecc6a..93a4c42 100644
--- a/subversion/libsvn_subr/stream.c
+++ b/subversion/libsvn_subr/stream.c
@@ -21,8 +21,6 @@
* ====================================================================
*/
-#include "svn_private_config.h"
-
#include <assert.h>
#include <stdio.h>
@@ -42,8 +40,11 @@
#include "svn_utf.h"
#include "svn_checksum.h"
#include "svn_path.h"
+#include "svn_private_config.h"
+#include "private/svn_error_private.h"
#include "private/svn_eol_private.h"
#include "private/svn_io_private.h"
+#include "private/svn_subr_private.h"
struct svn_stream_t {
@@ -55,6 +56,7 @@ struct svn_stream_t {
svn_stream_mark_fn_t mark_fn;
svn_stream_seek_fn_t seek_fn;
svn_stream__is_buffered_fn_t is_buffered_fn;
+ apr_file_t *file; /* Maybe NULL */
};
@@ -80,6 +82,7 @@ svn_stream_create(void *baton, apr_pool_t *pool)
stream->mark_fn = NULL;
stream->seek_fn = NULL;
stream->is_buffered_fn = NULL;
+ stream->file = NULL;
return stream;
}
@@ -138,7 +141,7 @@ svn_error_t *
svn_stream_read(svn_stream_t *stream, char *buffer, apr_size_t *len)
{
SVN_ERR_ASSERT(stream->read_fn != NULL);
- return stream->read_fn(stream->baton, buffer, len);
+ return svn_error_trace(stream->read_fn(stream->baton, buffer, len));
}
@@ -146,9 +149,10 @@ svn_error_t *
svn_stream_skip(svn_stream_t *stream, apr_size_t len)
{
if (stream->skip_fn == NULL)
- return skip_default_handler(stream->baton, len, stream->read_fn);
+ return svn_error_trace(
+ skip_default_handler(stream->baton, len, stream->read_fn));
- return stream->skip_fn(stream->baton, len);
+ return svn_error_trace(stream->skip_fn(stream->baton, len));
}
@@ -156,7 +160,7 @@ svn_error_t *
svn_stream_write(svn_stream_t *stream, const char *data, apr_size_t *len)
{
SVN_ERR_ASSERT(stream->write_fn != NULL);
- return stream->write_fn(stream->baton, data, len);
+ return svn_error_trace(stream->write_fn(stream->baton, data, len));
}
@@ -170,7 +174,7 @@ svn_stream_reset(svn_stream_t *stream)
svn_boolean_t
svn_stream_supports_mark(svn_stream_t *stream)
{
- return stream->mark_fn == NULL ? FALSE : TRUE;
+ return stream->mark_fn != NULL;
}
svn_error_t *
@@ -180,7 +184,7 @@ svn_stream_mark(svn_stream_t *stream, svn_stream_mark_t **mark,
if (stream->mark_fn == NULL)
return svn_error_create(SVN_ERR_STREAM_SEEK_NOT_SUPPORTED, NULL, NULL);
- return stream->mark_fn(stream->baton, mark, pool);
+ return svn_error_trace(stream->mark_fn(stream->baton, mark, pool));
}
svn_error_t *
@@ -189,7 +193,7 @@ svn_stream_seek(svn_stream_t *stream, const svn_stream_mark_t *mark)
if (stream->seek_fn == NULL)
return svn_error_create(SVN_ERR_STREAM_SEEK_NOT_SUPPORTED, NULL, NULL);
- return stream->seek_fn(stream->baton, mark);
+ return svn_error_trace(stream->seek_fn(stream->baton, mark));
}
svn_boolean_t
@@ -206,9 +210,17 @@ svn_stream_close(svn_stream_t *stream)
{
if (stream->close_fn == NULL)
return SVN_NO_ERROR;
- return stream->close_fn(stream->baton);
+ return svn_error_trace(stream->close_fn(stream->baton));
}
+svn_error_t *
+svn_stream_puts(svn_stream_t *stream,
+ const char *str)
+{
+ apr_size_t len;
+ len = strlen(str);
+ return svn_error_trace(svn_stream_write(stream, str, &len));
+}
svn_error_t *
svn_stream_printf(svn_stream_t *stream,
@@ -218,14 +230,12 @@ svn_stream_printf(svn_stream_t *stream,
{
const char *message;
va_list ap;
- apr_size_t len;
va_start(ap, fmt);
message = apr_pvsprintf(pool, fmt, ap);
va_end(ap);
- len = strlen(message);
- return svn_stream_write(stream, message, &len);
+ return svn_error_trace(svn_stream_puts(stream, message));
}
@@ -238,7 +248,6 @@ svn_stream_printf_from_utf8(svn_stream_t *stream,
{
const char *message, *translated;
va_list ap;
- apr_size_t len;
va_start(ap, fmt);
message = apr_pvsprintf(pool, fmt, ap);
@@ -247,9 +256,7 @@ svn_stream_printf_from_utf8(svn_stream_t *stream,
SVN_ERR(svn_utf_cstring_from_utf8_ex2(&translated, message, encoding,
pool));
- len = strlen(translated);
-
- return svn_stream_write(stream, translated, &len);
+ return svn_error_trace(svn_stream_puts(stream, translated));
}
/* Size that 90% of the lines we encounter will be not longer than.
@@ -409,7 +416,7 @@ stream_readline_chunky(svn_stringbuf_t **stringbuf,
/* Move the stream read pointer to the first position behind the EOL.
*/
SVN_ERR(svn_stream_seek(stream, mark));
- return svn_stream_skip(stream, total_parsed);
+ return svn_error_trace(svn_stream_skip(stream, total_parsed));
}
/* Guts of svn_stream_readline().
@@ -678,31 +685,31 @@ svn_stream_tee(svn_stream_t *out1,
static svn_error_t *
read_handler_disown(void *baton, char *buffer, apr_size_t *len)
{
- return svn_stream_read(baton, buffer, len);
+ return svn_error_trace(svn_stream_read(baton, buffer, len));
}
static svn_error_t *
skip_handler_disown(void *baton, apr_size_t len)
{
- return svn_stream_skip(baton, len);
+ return svn_error_trace(svn_stream_skip(baton, len));
}
static svn_error_t *
write_handler_disown(void *baton, const char *buffer, apr_size_t *len)
{
- return svn_stream_write(baton, buffer, len);
+ return svn_error_trace(svn_stream_write(baton, buffer, len));
}
static svn_error_t *
mark_handler_disown(void *baton, svn_stream_mark_t **mark, apr_pool_t *pool)
{
- return svn_stream_mark(baton, mark, pool);
+ return svn_error_trace(svn_stream_mark(baton, mark, pool));
}
static svn_error_t *
seek_handler_disown(void *baton, const svn_stream_mark_t *mark)
{
- return svn_stream_seek(baton, mark);
+ return svn_error_trace(svn_stream_seek(baton, mark));
}
static svn_boolean_t
@@ -763,7 +770,7 @@ read_handler_apr(void *baton, char *buffer, apr_size_t *len)
err = svn_io_file_read_full2(btn->file, buffer, *len, len,
&eof, btn->pool);
- return err;
+ return svn_error_trace(err);
}
static svn_error_t *
@@ -772,7 +779,8 @@ skip_handler_apr(void *baton, apr_size_t len)
struct baton_apr *btn = baton;
apr_off_t offset = len;
- return svn_io_file_seek(btn->file, APR_CUR, &offset, btn->pool);
+ return svn_error_trace(
+ svn_io_file_seek(btn->file, APR_CUR, &offset, btn->pool));
}
static svn_error_t *
@@ -790,7 +798,7 @@ write_handler_apr(void *baton, const char *data, apr_size_t *len)
else
err = svn_io_file_write_full(btn->file, data, *len, len, btn->pool);
- return err;
+ return svn_error_trace(err);
}
static svn_error_t *
@@ -798,7 +806,7 @@ close_handler_apr(void *baton)
{
struct baton_apr *btn = baton;
- return svn_io_file_close(btn->file, btn->pool);
+ return svn_error_trace(svn_io_file_close(btn->file, btn->pool));
}
static svn_error_t *
@@ -840,7 +848,7 @@ svn_stream_open_readonly(svn_stream_t **stream,
{
apr_file_t *file;
- SVN_ERR(svn_io_file_open(&file, path, APR_READ | APR_BUFFERED | APR_BINARY,
+ SVN_ERR(svn_io_file_open(&file, path, APR_READ | APR_BUFFERED,
APR_OS_DEFAULT, result_pool));
*stream = svn_stream_from_aprfile2(file, FALSE, result_pool);
@@ -859,7 +867,6 @@ svn_stream_open_writable(svn_stream_t **stream,
SVN_ERR(svn_io_file_open(&file, path,
APR_WRITE
| APR_BUFFERED
- | APR_BINARY
| APR_CREATE
| APR_EXCL,
APR_OS_DEFAULT, result_pool));
@@ -908,6 +915,7 @@ svn_stream_from_aprfile2(apr_file_t *file,
svn_stream_set_mark(stream, mark_handler_apr);
svn_stream_set_seek(stream, seek_handler_apr);
svn_stream__set_is_buffered(stream, is_buffered_handler_apr);
+ stream->file = file;
if (! disown)
svn_stream_set_close(stream, close_handler_apr);
@@ -915,6 +923,12 @@ svn_stream_from_aprfile2(apr_file_t *file,
return stream;
}
+apr_file_t *
+svn_stream__aprfile(svn_stream_t *stream)
+{
+ return stream->file;
+}
+
/* Compressed stream support */
@@ -955,59 +969,6 @@ zfree(voidpf opaque, voidpf address)
/* Empty, since we allocate on the pool */
}
-/* Converts a zlib error to an svn_error_t. zerr is the error code,
- function is the function name, and stream is the z_stream we are
- using. */
-static svn_error_t *
-zerr_to_svn_error(int zerr, const char *function, z_stream *stream)
-{
- apr_status_t status;
- const char *message;
-
- if (zerr == Z_OK)
- return SVN_NO_ERROR;
-
- switch (zerr)
- {
- case Z_STREAM_ERROR:
- status = SVN_ERR_STREAM_MALFORMED_DATA;
- message = "stream error";
- break;
-
- case Z_MEM_ERROR:
- status = APR_ENOMEM;
- message = "out of memory";
- break;
-
- case Z_BUF_ERROR:
- status = APR_ENOMEM;
- message = "buffer error";
- break;
-
- case Z_VERSION_ERROR:
- status = SVN_ERR_STREAM_UNRECOGNIZED_DATA;
- message = "version error";
- break;
-
- case Z_DATA_ERROR:
- status = SVN_ERR_STREAM_MALFORMED_DATA;
- message = "corrupted data";
- break;
-
- default:
- status = SVN_ERR_STREAM_UNRECOGNIZED_DATA;
- message = "error";
- break;
- }
-
- if (stream->msg != NULL)
- return svn_error_createf(status, NULL, "zlib (%s): %s: %s", function,
- message, stream->msg);
- else
- return svn_error_createf(status, NULL, "zlib (%s): %s", function,
- message);
-}
-
/* Helper function to figure out the sync mode */
static svn_error_t *
read_helper_gz(svn_read_fn_t read_fn,
@@ -1055,11 +1016,11 @@ read_handler_gz(void *baton, char *buffer, apr_size_t *len)
&btn->in->avail_in, &btn->read_flush));
zerr = inflateInit(btn->in);
- SVN_ERR(zerr_to_svn_error(zerr, "inflateInit", btn->in));
+ SVN_ERR(svn_error__wrap_zlib(zerr, "inflateInit", btn->in->msg));
}
btn->in->next_out = (Bytef *) buffer;
- btn->in->avail_out = *len;
+ btn->in->avail_out = (uInt) *len;
while (btn->in->avail_out > 0)
{
@@ -1082,7 +1043,8 @@ read_handler_gz(void *baton, char *buffer, apr_size_t *len)
if (zerr == Z_STREAM_END)
break;
else if (zerr != Z_OK)
- return zerr_to_svn_error(zerr, "inflate", btn->in);
+ return svn_error_trace(svn_error__wrap_zlib(zerr, "inflate",
+ btn->in->msg));
}
*len -= btn->in->avail_out;
@@ -1107,7 +1069,7 @@ write_handler_gz(void *baton, const char *buffer, apr_size_t *len)
btn->out->opaque = btn->pool;
zerr = deflateInit(btn->out, Z_DEFAULT_COMPRESSION);
- SVN_ERR(zerr_to_svn_error(zerr, "deflateInit", btn->out));
+ SVN_ERR(svn_error__wrap_zlib(zerr, "deflateInit", btn->out->msg));
}
/* The largest buffer we should need is 0.1% larger than the
@@ -1117,15 +1079,15 @@ write_handler_gz(void *baton, const char *buffer, apr_size_t *len)
write_buf = apr_palloc(subpool, buf_size);
btn->out->next_in = (Bytef *) buffer; /* Casting away const! */
- btn->out->avail_in = *len;
+ btn->out->avail_in = (uInt) *len;
while (btn->out->avail_in > 0)
{
btn->out->next_out = write_buf;
- btn->out->avail_out = buf_size;
+ btn->out->avail_out = (uInt) buf_size;
zerr = deflate(btn->out, Z_NO_FLUSH);
- SVN_ERR(zerr_to_svn_error(zerr, "deflate", btn->out));
+ SVN_ERR(svn_error__wrap_zlib(zerr, "deflate", btn->out->msg));
write_len = buf_size - btn->out->avail_out;
if (write_len > 0)
SVN_ERR(btn->write(btn->subbaton, write_buf, &write_len));
@@ -1146,7 +1108,7 @@ close_handler_gz(void *baton)
if (btn->in != NULL)
{
zerr = inflateEnd(btn->in);
- SVN_ERR(zerr_to_svn_error(zerr, "inflateEnd", btn->in));
+ SVN_ERR(svn_error__wrap_zlib(zerr, "inflateEnd", btn->in->msg));
}
if (btn->out != NULL)
@@ -1163,7 +1125,8 @@ close_handler_gz(void *baton)
zerr = deflate(btn->out, Z_FINISH);
if (zerr != Z_STREAM_END && zerr != Z_OK)
- return zerr_to_svn_error(zerr, "deflate", btn->out);
+ return svn_error_trace(svn_error__wrap_zlib(zerr, "deflate",
+ btn->out->msg));
write_len = ZBUFFER_SIZE - btn->out->avail_out;
if (write_len > 0)
SVN_ERR(btn->write(btn->subbaton, buf, &write_len));
@@ -1172,11 +1135,11 @@ close_handler_gz(void *baton)
}
zerr = deflateEnd(btn->out);
- SVN_ERR(zerr_to_svn_error(zerr, "deflateEnd", btn->out));
+ SVN_ERR(svn_error__wrap_zlib(zerr, "deflateEnd", btn->out->msg));
}
if (btn->close != NULL)
- return btn->close(btn->subbaton);
+ return svn_error_trace(btn->close(btn->subbaton));
else
return SVN_NO_ERROR;
}
@@ -1251,7 +1214,7 @@ write_handler_checksum(void *baton, const char *buffer, apr_size_t *len)
if (btn->write_checksum && *len > 0)
SVN_ERR(svn_checksum_update(btn->write_ctx, buffer, *len));
- return svn_stream_write(btn->proxy, buffer, len);
+ return svn_error_trace(svn_stream_write(btn->proxy, buffer, len));
}
@@ -1280,7 +1243,7 @@ close_handler_checksum(void *baton)
if (btn->write_ctx)
SVN_ERR(svn_checksum_final(btn->write_checksum, btn->write_ctx, btn->pool));
- return svn_stream_close(btn->proxy);
+ return svn_error_trace(svn_stream_close(btn->proxy));
}
@@ -1336,21 +1299,21 @@ static svn_error_t *
read_handler_md5(void *baton, char *buffer, apr_size_t *len)
{
struct md5_stream_baton *btn = baton;
- return svn_stream_read(btn->proxy, buffer, len);
+ return svn_error_trace(svn_stream_read(btn->proxy, buffer, len));
}
static svn_error_t *
skip_handler_md5(void *baton, apr_size_t len)
{
struct md5_stream_baton *btn = baton;
- return svn_stream_skip(btn->proxy, len);
+ return svn_error_trace(svn_stream_skip(btn->proxy, len));
}
static svn_error_t *
write_handler_md5(void *baton, const char *buffer, apr_size_t *len)
{
struct md5_stream_baton *btn = baton;
- return svn_stream_write(btn->proxy, buffer, len);
+ return svn_error_trace(svn_stream_write(btn->proxy, buffer, len));
}
static svn_error_t *
@@ -1692,3 +1655,181 @@ svn_string_from_stream(svn_string_t **result,
return SVN_NO_ERROR;
}
+
+
+/* These are somewhat arbirary, if we ever get good empirical data as to
+ actually valid values, feel free to update them. */
+#define BUFFER_BLOCK_SIZE 1024
+#define BUFFER_MAX_SIZE 100000
+
+svn_stream_t *
+svn_stream_buffered(apr_pool_t *result_pool)
+{
+ return svn_stream__from_spillbuf(BUFFER_BLOCK_SIZE, BUFFER_MAX_SIZE,
+ result_pool);
+}
+
+
+
+/*** Lazyopen Streams ***/
+
+/* Custom baton for lazyopen-style wrapper streams. */
+typedef struct lazyopen_baton_t {
+
+ /* Callback function and baton for opening the wrapped stream. */
+ svn_stream_lazyopen_func_t open_func;
+ void *open_baton;
+
+ /* The wrapped stream, or NULL if the stream hasn't yet been
+ opened. */
+ svn_stream_t *real_stream;
+ apr_pool_t *pool;
+
+ /* Whether to open the wrapped stream on a close call. */
+ svn_boolean_t open_on_close;
+
+} lazyopen_baton_t;
+
+
+/* Use B->open_func/baton to create and set B->real_stream iff it
+ isn't already set. */
+static svn_error_t *
+lazyopen_if_unopened(lazyopen_baton_t *b)
+{
+ if (b->real_stream == NULL)
+ {
+ svn_stream_t *stream;
+ apr_pool_t *scratch_pool = svn_pool_create(b->pool);
+
+ SVN_ERR(b->open_func(&stream, b->open_baton,
+ b->pool, scratch_pool));
+
+ svn_pool_destroy(scratch_pool);
+
+ b->real_stream = stream;
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Implements svn_read_fn_t */
+static svn_error_t *
+read_handler_lazyopen(void *baton,
+ char *buffer,
+ apr_size_t *len)
+{
+ lazyopen_baton_t *b = baton;
+
+ SVN_ERR(lazyopen_if_unopened(b));
+ SVN_ERR(svn_stream_read(b->real_stream, buffer, len));
+
+ return SVN_NO_ERROR;
+}
+
+/* Implements svn_stream_skip_fn_t */
+static svn_error_t *
+skip_handler_lazyopen(void *baton,
+ apr_size_t len)
+{
+ lazyopen_baton_t *b = baton;
+
+ SVN_ERR(lazyopen_if_unopened(b));
+ SVN_ERR(svn_stream_skip(b->real_stream, len));
+
+ return SVN_NO_ERROR;
+}
+
+/* Implements svn_write_fn_t */
+static svn_error_t *
+write_handler_lazyopen(void *baton,
+ const char *data,
+ apr_size_t *len)
+{
+ lazyopen_baton_t *b = baton;
+
+ SVN_ERR(lazyopen_if_unopened(b));
+ SVN_ERR(svn_stream_write(b->real_stream, data, len));
+
+ return SVN_NO_ERROR;
+}
+
+/* Implements svn_close_fn_t */
+static svn_error_t *
+close_handler_lazyopen(void *baton)
+{
+ lazyopen_baton_t *b = baton;
+
+ if (b->open_on_close)
+ SVN_ERR(lazyopen_if_unopened(b));
+ if (b->real_stream)
+ SVN_ERR(svn_stream_close(b->real_stream));
+
+ return SVN_NO_ERROR;
+}
+
+/* Implements svn_stream_mark_fn_t */
+static svn_error_t *
+mark_handler_lazyopen(void *baton,
+ svn_stream_mark_t **mark,
+ apr_pool_t *pool)
+{
+ lazyopen_baton_t *b = baton;
+
+ SVN_ERR(lazyopen_if_unopened(b));
+ SVN_ERR(svn_stream_mark(b->real_stream, mark, pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* Implements svn_stream_seek_fn_t */
+static svn_error_t *
+seek_handler_lazyopen(void *baton,
+ const svn_stream_mark_t *mark)
+{
+ lazyopen_baton_t *b = baton;
+
+ SVN_ERR(lazyopen_if_unopened(b));
+ SVN_ERR(svn_stream_seek(b->real_stream, mark));
+
+ return SVN_NO_ERROR;
+}
+
+/* Implements svn_stream__is_buffered_fn_t */
+static svn_boolean_t
+is_buffered_lazyopen(void *baton)
+{
+ lazyopen_baton_t *b = baton;
+
+ /* No lazy open as we cannot handle an open error. */
+ if (!b->real_stream)
+ return FALSE;
+
+ return svn_stream__is_buffered(b->real_stream);
+}
+
+svn_stream_t *
+svn_stream_lazyopen_create(svn_stream_lazyopen_func_t open_func,
+ void *open_baton,
+ svn_boolean_t open_on_close,
+ apr_pool_t *result_pool)
+{
+ lazyopen_baton_t *lob = apr_pcalloc(result_pool, sizeof(*lob));
+ svn_stream_t *stream;
+
+ lob->open_func = open_func;
+ lob->open_baton = open_baton;
+ lob->real_stream = NULL;
+ lob->pool = result_pool;
+ lob->open_on_close = open_on_close;
+
+ stream = svn_stream_create(lob, result_pool);
+ svn_stream_set_read(stream, read_handler_lazyopen);
+ svn_stream_set_skip(stream, skip_handler_lazyopen);
+ svn_stream_set_write(stream, write_handler_lazyopen);
+ svn_stream_set_close(stream, close_handler_lazyopen);
+ svn_stream_set_mark(stream, mark_handler_lazyopen);
+ svn_stream_set_seek(stream, seek_handler_lazyopen);
+ svn_stream__set_is_buffered(stream, is_buffered_lazyopen);
+
+ return stream;
+}
diff --git a/subversion/libsvn_subr/svn_string.c b/subversion/libsvn_subr/string.c
index 61d48e3..c3d7fec 100644
--- a/subversion/libsvn_subr/svn_string.c
+++ b/subversion/libsvn_subr/string.c
@@ -1,6 +1,6 @@
/*
- * svn_string.c: routines to manipulate counted-length strings
- * (svn_stringbuf_t and svn_string_t) and C strings.
+ * string.c: routines to manipulate counted-length strings
+ * (svn_stringbuf_t and svn_string_t) and C strings.
*
*
* ====================================================================
@@ -28,7 +28,6 @@
#include <apr.h>
#include <string.h> /* for memcpy(), memcmp(), strlen() */
-#include <apr_lib.h> /* for apr_isspace() */
#include <apr_fnmatch.h>
#include "svn_string.h" /* loads "svn_types.h" and <apr_pools.h> */
#include "svn_ctype.h"
@@ -38,30 +37,108 @@
#include "svn_private_config.h"
-/* Our own realloc, since APR doesn't have one. Note: this is a
- generic realloc for memory pools, *not* for strings. */
-static void *
-my__realloc(char *data, apr_size_t oldsize, apr_size_t request,
- apr_pool_t *pool)
+
+/* Allocate the space for a memory buffer from POOL.
+ * Return a pointer to the new buffer in *DATA and its size in *SIZE.
+ * The buffer size will be at least MINIMUM_SIZE.
+ *
+ * N.B.: The stringbuf creation functions use this, but since stringbufs
+ * always consume at least 1 byte for the NUL terminator, the
+ * resulting data pointers will never be NULL.
+ */
+static APR_INLINE void
+membuf_create(void **data, apr_size_t *size,
+ apr_size_t minimum_size, apr_pool_t *pool)
+{
+ /* apr_palloc will allocate multiples of 8.
+ * Thus, we would waste some of that memory if we stuck to the
+ * smaller size. Note that this is safe even if apr_palloc would
+ * use some other aligment or none at all. */
+ minimum_size = APR_ALIGN_DEFAULT(minimum_size);
+ *data = (!minimum_size ? NULL : apr_palloc(pool, minimum_size));
+ *size = minimum_size;
+}
+
+/* Ensure that the size of a given memory buffer is at least MINIMUM_SIZE
+ * bytes. If *SIZE is already greater than or equal to MINIMUM_SIZE,
+ * this function does nothing.
+ *
+ * If *SIZE is 0, the allocated buffer size will be MINIMUM_SIZE
+ * rounded up to the nearest APR alignment boundary. Otherwse, *SIZE
+ * will be multiplied by a power of two such that the result is
+ * greater or equal to MINIMUM_SIZE. The pointer to the new buffer
+ * will be returned in *DATA, and its size in *SIZE.
+ */
+static APR_INLINE void
+membuf_ensure(void **data, apr_size_t *size,
+ apr_size_t minimum_size, apr_pool_t *pool)
+{
+ if (minimum_size > *size)
+ {
+ apr_size_t new_size = *size;
+
+ if (new_size == 0)
+ /* APR will increase odd allocation sizes to the next
+ * multiple for 8, for instance. Take advantage of that
+ * knowledge and allow for the extra size to be used. */
+ new_size = minimum_size;
+ else
+ while (new_size < minimum_size)
+ {
+ /* new_size is aligned; doubling it should keep it aligned */
+ const apr_size_t prev_size = new_size;
+ new_size *= 2;
+
+ /* check for apr_size_t overflow */
+ if (prev_size > new_size)
+ {
+ new_size = minimum_size;
+ break;
+ }
+ }
+
+ membuf_create(data, size, new_size, pool);
+ }
+}
+
+void
+svn_membuf__create(svn_membuf_t *membuf, apr_size_t size, apr_pool_t *pool)
{
- void *new_area;
+ membuf_create(&membuf->data, &membuf->size, size, pool);
+ membuf->pool = pool;
+}
- /* kff todo: it's a pity APR doesn't give us this -- sometimes it
- could realloc the block merely by extending in place, sparing us
- a memcpy(), but only the pool would know enough to be able to do
- this. We should add a realloc() to APR if someone hasn't
- already. */
+void
+svn_membuf__ensure(svn_membuf_t *membuf, apr_size_t size)
+{
+ membuf_ensure(&membuf->data, &membuf->size, size, membuf->pool);
+}
- /* malloc new area */
- new_area = apr_palloc(pool, request);
+void
+svn_membuf__resize(svn_membuf_t *membuf, apr_size_t size)
+{
+ const void *const old_data = membuf->data;
+ const apr_size_t old_size = membuf->size;
- /* copy data to new area */
- memcpy(new_area, data, oldsize);
+ membuf_ensure(&membuf->data, &membuf->size, size, membuf->pool);
+ if (membuf->data && old_data && old_data != membuf->data)
+ memcpy(membuf->data, old_data, old_size);
+}
- /* I'm NOT freeing old area here -- cuz we're using pools, ugh. */
+/* Always provide an out-of-line implementation of svn_membuf__zero */
+#undef svn_membuf__zero
+void
+svn_membuf__zero(svn_membuf_t *membuf)
+{
+ SVN_MEMBUF__ZERO(membuf);
+}
- /* return new area */
- return new_area;
+/* Always provide an out-of-line implementation of svn_membuf__nzero */
+#undef svn_membuf__nzero
+void
+svn_membuf__nzero(svn_membuf_t *membuf, apr_size_t size)
+{
+ SVN_MEMBUF__NZERO(membuf, size);
}
static APR_INLINE svn_boolean_t
@@ -133,6 +210,21 @@ create_string(const char *data, apr_size_t size,
return new_string;
}
+/* A data buffer for a zero-length string (just a null terminator). Many
+ * svn_string_t instances may share this same buffer. */
+static const char empty_buffer[1] = {0};
+
+svn_string_t *
+svn_string_create_empty(apr_pool_t *pool)
+{
+ svn_string_t *new_string = apr_palloc(pool, sizeof(*new_string));
+ new_string->data = empty_buffer;
+ new_string->len = 0;
+
+ return new_string;
+}
+
+
svn_string_t *
svn_string_ncreate(const char *bytes, apr_size_t size, apr_pool_t *pool)
{
@@ -243,12 +335,12 @@ svn_stringbuf__morph_into_string(svn_stringbuf_t *strbuf)
*/
#ifdef SVN_DEBUG
strbuf->pool = NULL;
- strbuf->blocksize = strbuf->len;
+ strbuf->blocksize = strbuf->len + 1;
#endif
/* Both, svn_string_t and svn_stringbuf_t are public API structures
- * since a couple of releases now. Thus, we can rely on their precise
- * layout not to change.
+ * since the svn epoch. Thus, we can rely on their precise layout not
+ * to change.
*
* It just so happens that svn_string_t is structurally equivalent
* to the (data, len) sub-set of svn_stringbuf_t. There is also no
@@ -269,20 +361,10 @@ svn_stringbuf__morph_into_string(svn_stringbuf_t *strbuf)
/* svn_stringbuf functions */
-static svn_stringbuf_t *
-create_stringbuf(char *data, apr_size_t size, apr_size_t blocksize,
- apr_pool_t *pool)
+svn_stringbuf_t *
+svn_stringbuf_create_empty(apr_pool_t *pool)
{
- svn_stringbuf_t *new_string;
-
- new_string = apr_palloc(pool, sizeof(*new_string));
-
- new_string->data = data;
- new_string->len = size;
- new_string->blocksize = blocksize;
- new_string->pool = pool;
-
- return new_string;
+ return svn_stringbuf_create_ensure(0, pool);
}
svn_stringbuf_t *
@@ -291,24 +373,17 @@ svn_stringbuf_create_ensure(apr_size_t blocksize, apr_pool_t *pool)
void *mem;
svn_stringbuf_t *new_string;
- /* apr_palloc will allocate multiples of 8.
- * Thus, we would waste some of that memory if we stuck to the
- * smaller size. Note that this is safe even if apr_palloc would
- * use some other aligment or none at all. */
-
++blocksize; /* + space for '\0' */
- blocksize = APR_ALIGN_DEFAULT(blocksize);
/* Allocate memory for svn_string_t and data in one chunk. */
- mem = apr_palloc(pool, sizeof(*new_string) + blocksize);
+ membuf_create(&mem, &blocksize, blocksize + sizeof(*new_string), pool);
/* Initialize header and string */
new_string = mem;
-
new_string->data = (char*)mem + sizeof(*new_string);
new_string->data[0] = '\0';
new_string->len = 0;
- new_string->blocksize = blocksize;
+ new_string->blocksize = blocksize - sizeof(*new_string);
new_string->pool = pool;
return new_string;
@@ -349,9 +424,15 @@ svn_stringbuf_createv(apr_pool_t *pool, const char *fmt, va_list ap)
{
char *data = apr_pvsprintf(pool, fmt, ap);
apr_size_t size = strlen(data);
+ svn_stringbuf_t *new_string;
- /* wrap an svn_stringbuf_t around the new data */
- return create_stringbuf(data, size, size + 1, pool);
+ new_string = apr_palloc(pool, sizeof(*new_string));
+ new_string->data = data;
+ new_string->len = size;
+ new_string->blocksize = size + 1;
+ new_string->pool = pool;
+
+ return new_string;
}
@@ -381,7 +462,7 @@ svn_stringbuf_set(svn_stringbuf_t *str, const char *value)
{
apr_size_t amt = strlen(value);
- svn_stringbuf_ensure(str, amt + 1);
+ svn_stringbuf_ensure(str, amt);
memcpy(str->data, value, amt + 1);
str->len = amt;
}
@@ -418,36 +499,15 @@ svn_stringbuf_isempty(const svn_stringbuf_t *str)
void
svn_stringbuf_ensure(svn_stringbuf_t *str, apr_size_t minimum_size)
{
- /* Keep doubling capacity until have enough. */
- if (str->blocksize < minimum_size)
- {
- if (str->blocksize == 0)
- /* APR will increase odd allocation sizes to the next
- * multiple for 8, for instance. Take advantage of that
- * knowledge and allow for the extra size to be used. */
- str->blocksize = APR_ALIGN_DEFAULT(minimum_size);
- else
- while (str->blocksize < minimum_size)
- {
- /* str->blocksize is aligned;
- * doubling it should keep it aligned */
- apr_size_t prev_size = str->blocksize;
- str->blocksize *= 2;
+ void *mem = NULL;
+ ++minimum_size; /* + space for '\0' */
- /* check for apr_size_t overflow */
- if (prev_size > str->blocksize)
- {
- str->blocksize = minimum_size;
- break;
- }
- }
-
- str->data = (char *) my__realloc(str->data,
- str->len + 1,
- /* We need to maintain (and thus copy)
- the trailing nul */
- str->blocksize,
- str->pool);
+ membuf_ensure(&mem, &str->blocksize, minimum_size, str->pool);
+ if (mem && mem != str->data)
+ {
+ if (str->data)
+ memcpy(mem, str->data, str->len + 1);
+ str->data = mem;
}
}
@@ -521,8 +581,8 @@ svn_stringbuf_appendbytes(svn_stringbuf_t *str, const char *bytes,
total_len = str->len + count; /* total size needed */
- /* +1 for null terminator. */
- svn_stringbuf_ensure(str, (total_len + 1));
+ /* svn_stringbuf_ensure adds 1 for null terminator. */
+ svn_stringbuf_ensure(str, total_len);
/* get address 1 byte beyond end of original bytestring */
start_address = (str->data + str->len);
@@ -550,6 +610,80 @@ svn_stringbuf_appendcstr(svn_stringbuf_t *targetstr, const char *cstr)
svn_stringbuf_appendbytes(targetstr, cstr, strlen(cstr));
}
+void
+svn_stringbuf_insert(svn_stringbuf_t *str,
+ apr_size_t pos,
+ const char *bytes,
+ apr_size_t count)
+{
+ if (bytes + count > str->data && bytes < str->data + str->blocksize)
+ {
+ /* special case: BYTES overlaps with this string -> copy the source */
+ const char *temp = apr_pmemdup(str->pool, bytes, count);
+ svn_stringbuf_insert(str, pos, temp, count);
+ }
+ else
+ {
+ if (pos > str->len)
+ pos = str->len;
+
+ svn_stringbuf_ensure(str, str->len + count);
+ memmove(str->data + pos + count, str->data + pos, str->len - pos + 1);
+ memcpy(str->data + pos, bytes, count);
+
+ str->len += count;
+ }
+}
+
+void
+svn_stringbuf_remove(svn_stringbuf_t *str,
+ apr_size_t pos,
+ apr_size_t count)
+{
+ if (pos > str->len)
+ pos = str->len;
+ if (pos + count > str->len)
+ count = str->len - pos;
+
+ memmove(str->data + pos, str->data + pos + count, str->len - pos - count + 1);
+ str->len -= count;
+}
+
+void
+svn_stringbuf_replace(svn_stringbuf_t *str,
+ apr_size_t pos,
+ apr_size_t old_count,
+ const char *bytes,
+ apr_size_t new_count)
+{
+ if (bytes + new_count > str->data && bytes < str->data + str->blocksize)
+ {
+ /* special case: BYTES overlaps with this string -> copy the source */
+ const char *temp = apr_pmemdup(str->pool, bytes, new_count);
+ svn_stringbuf_replace(str, pos, old_count, temp, new_count);
+ }
+ else
+ {
+ if (pos > str->len)
+ pos = str->len;
+ if (pos + old_count > str->len)
+ old_count = str->len - pos;
+
+ if (old_count < new_count)
+ {
+ apr_size_t delta = new_count - old_count;
+ svn_stringbuf_ensure(str, str->len + delta);
+ }
+
+ if (old_count != new_count)
+ memmove(str->data + pos + new_count, str->data + pos + old_count,
+ str->len - pos - old_count + 1);
+
+ memcpy(str->data + pos, bytes, new_count);
+ str->len += new_count - old_count;
+ }
+}
+
svn_stringbuf_t *
svn_stringbuf_dup(const svn_stringbuf_t *original_string, apr_pool_t *pool)
@@ -619,12 +753,11 @@ svn_cstring_split_append(apr_array_header_t *array,
svn_boolean_t chop_whitespace,
apr_pool_t *pool)
{
- char *last;
char *pats;
char *p;
pats = apr_pstrdup(pool, input); /* strtok wants non-const data */
- p = apr_strtok(pats, sep_chars, &last);
+ p = svn_cstring_tokenize(sep_chars, &pats);
while (p)
{
@@ -644,7 +777,7 @@ svn_cstring_split_append(apr_array_header_t *array,
if (p[0] != '\0')
APR_ARRAY_PUSH(array, const char *) = p;
- p = apr_strtok(NULL, sep_chars, &last);
+ p = svn_cstring_tokenize(sep_chars, &pats);
}
return;
@@ -695,6 +828,47 @@ svn_cstring_match_list(const char *str, const apr_array_header_t *list)
return FALSE;
}
+char *
+svn_cstring_tokenize(const char *sep, char **str)
+{
+ char *token;
+ const char * next;
+ char csep;
+
+ /* check parameters */
+ if ((sep == NULL) || (str == NULL) || (*str == NULL))
+ return NULL;
+
+ /* let APR handle edge cases and multiple separators */
+ csep = *sep;
+ if (csep == '\0' || sep[1] != '\0')
+ return apr_strtok(NULL, sep, str);
+
+ /* skip characters in sep (will terminate at '\0') */
+ token = *str;
+ while (*token == csep)
+ ++token;
+
+ if (!*token) /* no more tokens */
+ return NULL;
+
+ /* skip valid token characters to terminate token and
+ * prepare for the next call (will terminate at '\0)
+ */
+ next = strchr(token, csep);
+ if (next == NULL)
+ {
+ *str = token + strlen(token);
+ }
+ else
+ {
+ *(char *)next = '\0';
+ *str = (char *)next + 1;
+ }
+
+ return token;
+}
+
int svn_cstring_count_newlines(const char *msg)
{
int count = 0;
@@ -724,8 +898,8 @@ svn_cstring_join(const apr_array_header_t *strings,
const char *separator,
apr_pool_t *pool)
{
- svn_stringbuf_t *new_str = svn_stringbuf_create("", pool);
- int sep_len = strlen(separator);
+ svn_stringbuf_t *new_str = svn_stringbuf_create_empty(pool);
+ size_t sep_len = strlen(separator);
int i;
for (i = 0; i < strings->nelts; i++)
@@ -852,3 +1026,248 @@ svn__strtoff(apr_off_t *offset, const char *buf, char **end, int base)
return apr_strtoff(offset, buf, end, base);
#endif
}
+
+/* "Precalculated" itoa values for 2 places (including leading zeros).
+ * For maximum performance, make sure all table entries are word-aligned.
+ */
+static const char decimal_table[100][4]
+ = { "00", "01", "02", "03", "04", "05", "06", "07", "08", "09"
+ , "10", "11", "12", "13", "14", "15", "16", "17", "18", "19"
+ , "20", "21", "22", "23", "24", "25", "26", "27", "28", "29"
+ , "30", "31", "32", "33", "34", "35", "36", "37", "38", "39"
+ , "40", "41", "42", "43", "44", "45", "46", "47", "48", "49"
+ , "50", "51", "52", "53", "54", "55", "56", "57", "58", "59"
+ , "60", "61", "62", "63", "64", "65", "66", "67", "68", "69"
+ , "70", "71", "72", "73", "74", "75", "76", "77", "78", "79"
+ , "80", "81", "82", "83", "84", "85", "86", "87", "88", "89"
+ , "90", "91", "92", "93", "94", "95", "96", "97", "98", "99"};
+
+/* Copy the two bytes at SOURCE[0] and SOURCE[1] to DEST[0] and DEST[1] */
+#define COPY_TWO_BYTES(dest,source)\
+ memcpy((dest), (source), 2)
+
+apr_size_t
+svn__ui64toa(char * dest, apr_uint64_t number)
+{
+ char buffer[SVN_INT64_BUFFER_SIZE];
+ apr_uint32_t reduced; /* used for 32 bit DIV */
+ char* target;
+
+ /* Small numbers are by far the most common case.
+ * Therefore, we use special code.
+ */
+ if (number < 100)
+ {
+ if (number < 10)
+ {
+ dest[0] = (char)('0' + number);
+ dest[1] = 0;
+ return 1;
+ }
+ else
+ {
+ COPY_TWO_BYTES(dest, decimal_table[(apr_size_t)number]);
+ dest[2] = 0;
+ return 2;
+ }
+ }
+
+ /* Standard code. Write string in pairs of chars back-to-front */
+ buffer[SVN_INT64_BUFFER_SIZE - 1] = 0;
+ target = &buffer[SVN_INT64_BUFFER_SIZE - 3];
+
+ /* Loop may be executed 0 .. 2 times. */
+ while (number >= 100000000)
+ {
+ /* Number is larger than 100^4, i.e. we can write 4x2 chars.
+ * Also, use 32 bit DIVs as these are about twice as fast.
+ */
+ reduced = (apr_uint32_t)(number % 100000000);
+ number /= 100000000;
+
+ COPY_TWO_BYTES(target - 0, decimal_table[reduced % 100]);
+ reduced /= 100;
+ COPY_TWO_BYTES(target - 2, decimal_table[reduced % 100]);
+ reduced /= 100;
+ COPY_TWO_BYTES(target - 4, decimal_table[reduced % 100]);
+ reduced /= 100;
+ COPY_TWO_BYTES(target - 6, decimal_table[reduced % 100]);
+ target -= 8;
+ }
+
+ /* Now, the number fits into 32 bits, but may still be larger than 99 */
+ reduced = (apr_uint32_t)(number);
+ while (reduced >= 100)
+ {
+ COPY_TWO_BYTES(target, decimal_table[reduced % 100]);
+ reduced /= 100;
+ target -= 2;
+ }
+
+ /* The number is now smaller than 100 but larger than 1 */
+ COPY_TWO_BYTES(target, decimal_table[reduced]);
+
+ /* Correction for uneven count of places. */
+ if (reduced < 10)
+ ++target;
+
+ /* Copy to target */
+ memcpy(dest, target, &buffer[SVN_INT64_BUFFER_SIZE] - target);
+ return &buffer[SVN_INT64_BUFFER_SIZE] - target - 1;
+}
+
+apr_size_t
+svn__i64toa(char * dest, apr_int64_t number)
+{
+ if (number >= 0)
+ return svn__ui64toa(dest, (apr_uint64_t)number);
+
+ *dest = '-';
+ return svn__ui64toa(dest + 1, (apr_uint64_t)(0-number)) + 1;
+}
+
+static void
+ui64toa_sep(apr_uint64_t number, char seperator, char *buffer)
+{
+ apr_size_t length = svn__ui64toa(buffer, number);
+ apr_size_t i;
+
+ for (i = length; i > 3; i -= 3)
+ {
+ memmove(&buffer[i - 2], &buffer[i - 3], length - i + 3);
+ buffer[i-3] = seperator;
+ length++;
+ }
+
+ buffer[length] = 0;
+}
+
+char *
+svn__ui64toa_sep(apr_uint64_t number, char seperator, apr_pool_t *pool)
+{
+ char buffer[2 * SVN_INT64_BUFFER_SIZE];
+ ui64toa_sep(number, seperator, buffer);
+
+ return apr_pstrdup(pool, buffer);
+}
+
+char *
+svn__i64toa_sep(apr_int64_t number, char seperator, apr_pool_t *pool)
+{
+ char buffer[2 * SVN_INT64_BUFFER_SIZE];
+ if (number < 0)
+ {
+ buffer[0] = '-';
+ ui64toa_sep((apr_uint64_t)(-number), seperator, &buffer[1]);
+ }
+ else
+ ui64toa_sep((apr_uint64_t)(number), seperator, buffer);
+
+ return apr_pstrdup(pool, buffer);
+}
+
+unsigned int
+svn_cstring__similarity(const char *stra, const char *strb,
+ svn_membuf_t *buffer, apr_size_t *rlcs)
+{
+ svn_string_t stringa, stringb;
+ stringa.data = stra;
+ stringa.len = strlen(stra);
+ stringb.data = strb;
+ stringb.len = strlen(strb);
+ return svn_string__similarity(&stringa, &stringb, buffer, rlcs);
+}
+
+unsigned int
+svn_string__similarity(const svn_string_t *stringa,
+ const svn_string_t *stringb,
+ svn_membuf_t *buffer, apr_size_t *rlcs)
+{
+ const char *stra = stringa->data;
+ const char *strb = stringb->data;
+ const apr_size_t lena = stringa->len;
+ const apr_size_t lenb = stringb->len;
+ const apr_size_t total = lena + lenb;
+ const char *enda = stra + lena;
+ const char *endb = strb + lenb;
+ apr_size_t lcs = 0;
+
+ /* Skip the common prefix ... */
+ while (stra < enda && strb < endb && *stra == *strb)
+ {
+ ++stra; ++strb;
+ ++lcs;
+ }
+
+ /* ... and the common suffix */
+ while (stra < enda && strb < endb)
+ {
+ --enda; --endb;
+ if (*enda != *endb)
+ {
+ ++enda; ++endb;
+ break;
+ }
+
+ ++lcs;
+ }
+
+ if (stra < enda && strb < endb)
+ {
+ const apr_size_t resta = enda - stra;
+ const apr_size_t restb = endb - strb;
+ const apr_size_t slots = (resta > restb ? restb : resta);
+ apr_size_t *curr, *prev;
+ const char *pstr;
+
+ /* The outer loop must iterate on the longer string. */
+ if (resta < restb)
+ {
+ pstr = stra;
+ stra = strb;
+ strb = pstr;
+
+ pstr = enda;
+ enda = endb;
+ endb = pstr;
+ }
+
+ /* Allocate two columns in the LCS matrix
+ ### Optimize this to (slots + 2) instesd of 2 * (slots + 1) */
+ svn_membuf__ensure(buffer, 2 * (slots + 1) * sizeof(apr_size_t));
+ svn_membuf__nzero(buffer, (slots + 2) * sizeof(apr_size_t));
+ prev = buffer->data;
+ curr = prev + slots + 1;
+
+ /* Calculate LCS length of the remainder */
+ for (pstr = stra; pstr < enda; ++pstr)
+ {
+ int i;
+ for (i = 1; i <= slots; ++i)
+ {
+ if (*pstr == strb[i-1])
+ curr[i] = prev[i-1] + 1;
+ else
+ curr[i] = (curr[i-1] > prev[i] ? curr[i-1] : prev[i]);
+ }
+
+ /* Swap the buffers, making the previous one current */
+ {
+ apr_size_t *const temp = prev;
+ prev = curr;
+ curr = temp;
+ }
+ }
+
+ lcs += prev[slots];
+ }
+
+ if (rlcs)
+ *rlcs = lcs;
+
+ /* Return similarity ratio rounded to 4 significant digits */
+ if (total)
+ return(unsigned int)((2000 * lcs + total/2) / total);
+ else
+ return 1000;
+}
diff --git a/subversion/libsvn_subr/subst.c b/subversion/libsvn_subr/subst.c
index 3be964f..223b269 100644
--- a/subversion/libsvn_subr/subst.c
+++ b/subversion/libsvn_subr/subst.c
@@ -33,6 +33,7 @@
#include <apr_file_io.h>
#include <apr_strings.h>
+#include "svn_hash.h"
#include "svn_cmdline.h"
#include "svn_types.h"
#include "svn_string.h"
@@ -135,16 +136,24 @@ svn_subst_translation_required(svn_subst_eol_style_t style,
* %b basename of the URL of this file
* %d short format of date of this revision
* %D long format of date of this revision
+ * %P path relative to root of repos
* %r number of this revision
+ * %R root url of repository
* %u URL of this file
+ * %_ a space
* %% a literal %
*
+ * The following special format codes are also recognized:
+ * %H is equivalent to %P%_%r%_%d%_%a
+ * %I is equivalent to %b%_%r%_%d%_%a
+ *
* All memory is allocated out of @a pool.
*/
static svn_string_t *
keyword_printf(const char *fmt,
const char *rev,
const char *url,
+ const char *repos_root_url,
apr_time_t date,
const char *author,
apr_pool_t *pool)
@@ -203,6 +212,20 @@ keyword_printf(const char *fmt,
svn_stringbuf_appendcstr(value,
svn_time_to_human_cstring(date, pool));
break;
+ case 'P': /* relative path of this file */
+ if (repos_root_url && *repos_root_url != '\0' && url && *url != '\0')
+ {
+ const char *repos_relpath;
+
+ repos_relpath = svn_uri_skip_ancestor(repos_root_url, url, pool);
+ if (repos_relpath)
+ svn_stringbuf_appendcstr(value, repos_relpath);
+ }
+ break;
+ case 'R': /* root of repos */
+ if (repos_root_url && *repos_root_url != '\0')
+ svn_stringbuf_appendcstr(value, repos_root_url);
+ break;
case 'r': /* number of this revision */
if (rev)
svn_stringbuf_appendcstr(value, rev);
@@ -211,6 +234,9 @@ keyword_printf(const char *fmt,
if (url)
svn_stringbuf_appendcstr(value, url);
break;
+ case '_': /* '%_' => a space */
+ svn_stringbuf_appendbyte(value, ' ');
+ break;
case '%': /* '%%' => a literal % */
svn_stringbuf_appendbyte(value, *cur);
break;
@@ -222,6 +248,22 @@ keyword_printf(const char *fmt,
* formatting random memory contents. */
cur--;
break;
+ case 'H':
+ {
+ svn_string_t *s = keyword_printf("%P%_%r%_%d%_%a", rev, url,
+ repos_root_url, date, author,
+ pool);
+ svn_stringbuf_appendcstr(value, s->data);
+ }
+ break;
+ case 'I':
+ {
+ svn_string_t *s = keyword_printf("%b%_%r%_%d%_%a", rev, url,
+ repos_root_url, date, author,
+ pool);
+ svn_stringbuf_appendcstr(value, s->data);
+ }
+ break;
default: /* Unrecognized code, just print it literally. */
svn_stringbuf_appendbytes(value, cur, 2);
break;
@@ -234,57 +276,16 @@ keyword_printf(const char *fmt,
return svn_stringbuf__morph_into_string(value);
}
-svn_error_t *
-svn_subst_build_keywords(svn_subst_keywords_t *kw,
- const char *keywords_val,
- const char *rev,
- const char *url,
- apr_time_t date,
- const char *author,
- apr_pool_t *pool)
-{
- apr_hash_t *kwhash;
- const svn_string_t *val;
-
- SVN_ERR(svn_subst_build_keywords2(&kwhash, keywords_val, rev,
- url, date, author, pool));
-
- /* The behaviour of pre-1.3 svn_subst_build_keywords, which we are
- * replicating here, is to write to a slot in the svn_subst_keywords_t
- * only if the relevant keyword was present in keywords_val, otherwise
- * leaving that slot untouched. */
-
- val = apr_hash_get(kwhash, SVN_KEYWORD_REVISION_LONG, APR_HASH_KEY_STRING);
- if (val)
- kw->revision = val;
-
- val = apr_hash_get(kwhash, SVN_KEYWORD_DATE_LONG, APR_HASH_KEY_STRING);
- if (val)
- kw->date = val;
-
- val = apr_hash_get(kwhash, SVN_KEYWORD_AUTHOR_LONG, APR_HASH_KEY_STRING);
- if (val)
- kw->author = val;
-
- val = apr_hash_get(kwhash, SVN_KEYWORD_URL_LONG, APR_HASH_KEY_STRING);
- if (val)
- kw->url = val;
-
- val = apr_hash_get(kwhash, SVN_KEYWORD_ID, APR_HASH_KEY_STRING);
- if (val)
- kw->id = val;
-
- return SVN_NO_ERROR;
-}
-
-svn_error_t *
-svn_subst_build_keywords2(apr_hash_t **kw,
- const char *keywords_val,
- const char *rev,
- const char *url,
- apr_time_t date,
- const char *author,
- apr_pool_t *pool)
+static svn_error_t *
+build_keywords(apr_hash_t **kw,
+ svn_boolean_t expand_custom_keywords,
+ const char *keywords_val,
+ const char *rev,
+ const char *url,
+ const char *repos_root_url,
+ apr_time_t date,
+ const char *author,
+ apr_pool_t *pool)
{
apr_array_header_t *keyword_tokens;
int i;
@@ -296,77 +297,126 @@ svn_subst_build_keywords2(apr_hash_t **kw,
for (i = 0; i < keyword_tokens->nelts; ++i)
{
const char *keyword = APR_ARRAY_IDX(keyword_tokens, i, const char *);
+ const char *custom_fmt = NULL;
+
+ if (expand_custom_keywords)
+ {
+ char *sep;
+
+ /* Check if there is a custom keyword definition, started by '='. */
+ sep = strchr(keyword, '=');
+ if (sep)
+ {
+ *sep = '\0'; /* Split keyword's name from custom format. */
+ custom_fmt = sep + 1;
+ }
+ }
- if ((! strcmp(keyword, SVN_KEYWORD_REVISION_LONG))
- || (! strcmp(keyword, SVN_KEYWORD_REVISION_MEDIUM))
- || (! svn_cstring_casecmp(keyword, SVN_KEYWORD_REVISION_SHORT)))
+ if (custom_fmt)
+ {
+ svn_string_t *custom_val;
+
+ /* Custom keywords must be allowed to match the name of an
+ * existing fixed keyword. This is for compatibility purposes,
+ * in case new fixed keywords are added to Subversion which
+ * happen to match a custom keyword defined somewhere.
+ * There is only one global namespace for keyword names. */
+ custom_val = keyword_printf(custom_fmt, rev, url, repos_root_url,
+ date, author, pool);
+ svn_hash_sets(*kw, keyword, custom_val);
+ }
+ else if ((! strcmp(keyword, SVN_KEYWORD_REVISION_LONG))
+ || (! strcmp(keyword, SVN_KEYWORD_REVISION_MEDIUM))
+ || (! svn_cstring_casecmp(keyword, SVN_KEYWORD_REVISION_SHORT)))
{
svn_string_t *revision_val;
- revision_val = keyword_printf("%r", rev, url, date, author, pool);
- apr_hash_set(*kw, SVN_KEYWORD_REVISION_LONG,
- APR_HASH_KEY_STRING, revision_val);
- apr_hash_set(*kw, SVN_KEYWORD_REVISION_MEDIUM,
- APR_HASH_KEY_STRING, revision_val);
- apr_hash_set(*kw, SVN_KEYWORD_REVISION_SHORT,
- APR_HASH_KEY_STRING, revision_val);
+ revision_val = keyword_printf("%r", rev, url, repos_root_url,
+ date, author, pool);
+ svn_hash_sets(*kw, SVN_KEYWORD_REVISION_LONG, revision_val);
+ svn_hash_sets(*kw, SVN_KEYWORD_REVISION_MEDIUM, revision_val);
+ svn_hash_sets(*kw, SVN_KEYWORD_REVISION_SHORT, revision_val);
}
else if ((! strcmp(keyword, SVN_KEYWORD_DATE_LONG))
|| (! svn_cstring_casecmp(keyword, SVN_KEYWORD_DATE_SHORT)))
{
svn_string_t *date_val;
- date_val = keyword_printf("%D", rev, url, date, author, pool);
- apr_hash_set(*kw, SVN_KEYWORD_DATE_LONG,
- APR_HASH_KEY_STRING, date_val);
- apr_hash_set(*kw, SVN_KEYWORD_DATE_SHORT,
- APR_HASH_KEY_STRING, date_val);
+ date_val = keyword_printf("%D", rev, url, repos_root_url, date,
+ author, pool);
+ svn_hash_sets(*kw, SVN_KEYWORD_DATE_LONG, date_val);
+ svn_hash_sets(*kw, SVN_KEYWORD_DATE_SHORT, date_val);
}
else if ((! strcmp(keyword, SVN_KEYWORD_AUTHOR_LONG))
|| (! svn_cstring_casecmp(keyword, SVN_KEYWORD_AUTHOR_SHORT)))
{
svn_string_t *author_val;
- author_val = keyword_printf("%a", rev, url, date, author, pool);
- apr_hash_set(*kw, SVN_KEYWORD_AUTHOR_LONG,
- APR_HASH_KEY_STRING, author_val);
- apr_hash_set(*kw, SVN_KEYWORD_AUTHOR_SHORT,
- APR_HASH_KEY_STRING, author_val);
+ author_val = keyword_printf("%a", rev, url, repos_root_url, date,
+ author, pool);
+ svn_hash_sets(*kw, SVN_KEYWORD_AUTHOR_LONG, author_val);
+ svn_hash_sets(*kw, SVN_KEYWORD_AUTHOR_SHORT, author_val);
}
else if ((! strcmp(keyword, SVN_KEYWORD_URL_LONG))
|| (! svn_cstring_casecmp(keyword, SVN_KEYWORD_URL_SHORT)))
{
svn_string_t *url_val;
- url_val = keyword_printf("%u", rev, url, date, author, pool);
- apr_hash_set(*kw, SVN_KEYWORD_URL_LONG,
- APR_HASH_KEY_STRING, url_val);
- apr_hash_set(*kw, SVN_KEYWORD_URL_SHORT,
- APR_HASH_KEY_STRING, url_val);
+ url_val = keyword_printf("%u", rev, url, repos_root_url, date,
+ author, pool);
+ svn_hash_sets(*kw, SVN_KEYWORD_URL_LONG, url_val);
+ svn_hash_sets(*kw, SVN_KEYWORD_URL_SHORT, url_val);
}
else if ((! svn_cstring_casecmp(keyword, SVN_KEYWORD_ID)))
{
svn_string_t *id_val;
- id_val = keyword_printf("%b %r %d %a", rev, url, date, author,
- pool);
- apr_hash_set(*kw, SVN_KEYWORD_ID,
- APR_HASH_KEY_STRING, id_val);
+ id_val = keyword_printf("%b %r %d %a", rev, url, repos_root_url,
+ date, author, pool);
+ svn_hash_sets(*kw, SVN_KEYWORD_ID, id_val);
}
else if ((! svn_cstring_casecmp(keyword, SVN_KEYWORD_HEADER)))
{
svn_string_t *header_val;
- header_val = keyword_printf("%u %r %d %a", rev, url, date, author,
- pool);
- apr_hash_set(*kw, SVN_KEYWORD_HEADER,
- APR_HASH_KEY_STRING, header_val);
+ header_val = keyword_printf("%u %r %d %a", rev, url, repos_root_url,
+ date, author, pool);
+ svn_hash_sets(*kw, SVN_KEYWORD_HEADER, header_val);
}
}
return SVN_NO_ERROR;
}
+svn_error_t *
+svn_subst_build_keywords2(apr_hash_t **kw,
+ const char *keywords_val,
+ const char *rev,
+ const char *url,
+ apr_time_t date,
+ const char *author,
+ apr_pool_t *pool)
+{
+ return svn_error_trace(build_keywords(kw, FALSE, keywords_val, rev, url,
+ NULL, date, author, pool));
+}
+
+
+svn_error_t *
+svn_subst_build_keywords3(apr_hash_t **kw,
+ const char *keywords_val,
+ const char *rev,
+ const char *url,
+ const char *repos_root_url,
+ apr_time_t date,
+ const char *author,
+ apr_pool_t *pool)
+{
+ return svn_error_trace(build_keywords(kw, TRUE, keywords_val,
+ rev, url, repos_root_url,
+ date, author, pool));
+}
+
/*** Helpers for svn_subst_translate_stream2 ***/
@@ -406,6 +456,11 @@ translate_keyword_subst(char *buf,
if (*len < keyword_len + 2)
return FALSE;
+ /* Need at least space for two $'s, two spaces and a colon, and that
+ leaves zero space for the value itself. */
+ if (keyword_len > SVN_KEYWORD_MAX_LEN - 5)
+ return FALSE;
+
/* The keyword needs to match what we're looking for. */
if (strncmp(buf + 1, keyword, keyword_len))
return FALSE;
@@ -518,8 +573,8 @@ translate_keyword_subst(char *buf,
apr_size_t vallen = value->len;
/* "$keyword: value $" */
- if (vallen > (SVN_KEYWORD_MAX_LEN - 5))
- vallen = SVN_KEYWORD_MAX_LEN - 5;
+ if (vallen > (SVN_KEYWORD_MAX_LEN - 5 - keyword_len))
+ vallen = SVN_KEYWORD_MAX_LEN - 5 - keyword_len;
strncpy(buf_ptr + 2, value->data, vallen);
buf_ptr[2 + vallen] = ' ';
buf_ptr[2 + vallen + 1] = '$';
@@ -559,7 +614,7 @@ match_keyword(char *buf,
keyword_name[i] = buf[i + 1];
keyword_name[i] = '\0';
- return apr_hash_get(keywords, keyword_name, APR_HASH_KEY_STRING) != NULL;
+ return svn_hash_gets(keywords, keyword_name) != NULL;
}
/* Try to translate keyword *KEYWORD_NAME in BUF (whose length is LEN):
@@ -595,7 +650,7 @@ translate_keyword(char *buf,
if (! keywords)
return FALSE;
- value = apr_hash_get(keywords, keyword_name, APR_HASH_KEY_STRING);
+ value = svn_hash_gets(keywords, keyword_name);
if (value)
{
@@ -987,14 +1042,14 @@ translate_chunk(svn_stream_t *dst,
b->keyword_buf[b->keyword_off++] = *p++;
keyword_matches = match_keyword(b->keyword_buf, b->keyword_off,
keyword_name, b->keywords);
- if (keyword_matches == FALSE)
+ if (!keyword_matches)
{
/* reuse the ending '$' */
p--;
b->keyword_off--;
}
- if (keyword_matches == FALSE ||
+ if (!keyword_matches ||
translate_keyword(b->keyword_buf, &b->keyword_off,
keyword_name, b->expand, b->keywords) ||
b->keyword_off >= SVN_KEYWORD_MAX_LEN)
@@ -1448,9 +1503,8 @@ stream_translated(svn_stream_t *stream,
void *val;
apr_hash_this(hi, &key, NULL, &val);
- apr_hash_set(copy, apr_pstrdup(result_pool, key),
- APR_HASH_KEY_STRING,
- svn_string_dup(val, result_pool));
+ svn_hash_sets(copy, apr_pstrdup(result_pool, key),
+ svn_string_dup(val, result_pool));
}
svn_pool_destroy(subpool);
@@ -1467,7 +1521,7 @@ stream_translated(svn_stream_t *stream,
= create_translation_baton(eol_str, translated_eol, repair, keywords,
expand, result_pool);
baton->written = FALSE;
- baton->readbuf = svn_stringbuf_create("", result_pool);
+ baton->readbuf = svn_stringbuf_create_empty(result_pool);
baton->readbuf_off = 0;
baton->iterpool = svn_pool_create(result_pool);
baton->buf = apr_palloc(result_pool, SVN__TRANSLATION_BUF_SIZE);
@@ -1522,7 +1576,7 @@ translate_cstring(const char **dst,
}
/* Create a stringbuf and wrapper stream to hold the output. */
- dst_stringbuf = svn_stringbuf_create("", pool);
+ dst_stringbuf = svn_stringbuf_create_empty(pool);
dst_stream = svn_stream_from_stringbuf(dst_stringbuf, pool);
if (translated_eol)
@@ -1613,7 +1667,7 @@ create_special_file_from_stream(svn_stream_t *source, const char *dst,
}
if (! strncmp(identifier, SVN_SUBST__SPECIAL_LINK_STR " ",
- strlen(SVN_SUBST__SPECIAL_LINK_STR " ")))
+ sizeof(SVN_SUBST__SPECIAL_LINK_STR " ")-1))
{
/* For symlinks, the type specific data is just a filesystem
path that the symlink should reference. */
@@ -1648,9 +1702,19 @@ create_special_file_from_stream(svn_stream_t *source, const char *dst,
### this only writes the first line!
*/
if (create_using_internal_representation)
- SVN_ERR(svn_io_write_unique(&dst_tmp, svn_dirent_dirname(dst, pool),
- contents->data, contents->len,
- svn_io_file_del_none, pool));
+ {
+ apr_file_t *new_file;
+ SVN_ERR(svn_io_open_unique_file3(&new_file, &dst_tmp,
+ svn_dirent_dirname(dst, pool),
+ svn_io_file_del_none,
+ pool, pool));
+
+ SVN_ERR(svn_io_file_write_full(new_file,
+ contents->data, contents->len, NULL,
+ pool));
+
+ SVN_ERR(svn_io_file_close(new_file, pool));
+ }
/* Do the atomic rename from our temporary location. */
return svn_io_file_rename(dst_tmp, dst, pool);
@@ -1743,7 +1807,12 @@ svn_subst_copy_and_translate4(const char *src,
}
/* Now that dst_tmp contains the translated data, do the atomic rename. */
- return svn_error_trace(svn_io_file_rename(dst_tmp, dst, pool));
+ SVN_ERR(svn_io_file_rename(dst_tmp, dst, pool));
+
+ /* Preserve the source file's permission bits. */
+ SVN_ERR(svn_io_copy_perms(src, dst, pool));
+
+ return SVN_NO_ERROR;
}
@@ -1813,7 +1882,7 @@ svn_subst_create_specialfile(svn_stream_t **stream,
/* SCRATCH_POOL may not exist after the function returns. */
baton->pool = result_pool;
- baton->write_content = svn_stringbuf_create("", result_pool);
+ baton->write_content = svn_stringbuf_create_empty(result_pool);
baton->write_stream = svn_stream_from_stringbuf(baton->write_content,
result_pool);
@@ -1852,7 +1921,7 @@ svn_subst_stream_from_specialfile(svn_stream_t **stream,
baton->read_stream = NULL;
}
- baton->write_content = svn_stringbuf_create("", pool);
+ baton->write_content = svn_stringbuf_create_empty(pool);
baton->write_stream = svn_stream_from_stringbuf(baton->write_content, pool);
*stream = svn_stream_create(baton, pool);
@@ -1885,7 +1954,11 @@ svn_subst_translate_string2(svn_string_t **new_value,
return SVN_NO_ERROR;
}
- if (encoding)
+ if (encoding && !strcmp(encoding, "UTF-8"))
+ {
+ val_utf8 = value->data;
+ }
+ else if (encoding)
{
SVN_ERR(svn_utf_cstring_to_utf8_ex2(&val_utf8, value->data,
encoding, scratch_pool));
diff --git a/subversion/libsvn_subr/sysinfo.c b/subversion/libsvn_subr/sysinfo.c
new file mode 100644
index 0000000..f20050c
--- /dev/null
+++ b/subversion/libsvn_subr/sysinfo.c
@@ -0,0 +1,1163 @@
+/*
+ * sysinfo.c : information about the running system
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+
+
+#ifdef WIN32
+#define WIN32_LEAN_AND_MEAN
+#define PSAPI_VERSION 1
+#include <windows.h>
+#include <psapi.h>
+#include <Ws2tcpip.h>
+#endif
+
+#define APR_WANT_STRFUNC
+#include <apr_want.h>
+
+#include <apr_lib.h>
+#include <apr_pools.h>
+#include <apr_file_info.h>
+#include <apr_signal.h>
+#include <apr_strings.h>
+#include <apr_thread_proc.h>
+#include <apr_version.h>
+#include <apu_version.h>
+
+#include "svn_pools.h"
+#include "svn_ctype.h"
+#include "svn_dirent_uri.h"
+#include "svn_error.h"
+#include "svn_io.h"
+#include "svn_string.h"
+#include "svn_utf.h"
+#include "svn_version.h"
+
+#include "private/svn_sqlite.h"
+
+#include "sysinfo.h"
+#include "svn_private_config.h"
+
+#if HAVE_SYS_UTSNAME_H
+#include <sys/utsname.h>
+#endif
+
+#ifdef SVN_HAVE_MACOS_PLIST
+#include <CoreFoundation/CoreFoundation.h>
+#endif
+
+#ifdef SVN_HAVE_MACHO_ITERATE
+#include <mach-o/dyld.h>
+#include <mach-o/loader.h>
+#endif
+
+#if HAVE_UNAME
+static const char *canonical_host_from_uname(apr_pool_t *pool);
+# ifndef SVN_HAVE_MACOS_PLIST
+static const char *release_name_from_uname(apr_pool_t *pool);
+# endif
+#endif
+
+#ifdef WIN32
+static const char *win32_canonical_host(apr_pool_t *pool);
+static const char *win32_release_name(apr_pool_t *pool);
+static const apr_array_header_t *win32_shared_libs(apr_pool_t *pool);
+#endif /* WIN32 */
+
+#ifdef SVN_HAVE_MACOS_PLIST
+static const char *macos_release_name(apr_pool_t *pool);
+#endif
+
+#ifdef SVN_HAVE_MACHO_ITERATE
+static const apr_array_header_t *macos_shared_libs(apr_pool_t *pool);
+#endif
+
+
+#if __linux__
+static const char *linux_release_name(apr_pool_t *pool);
+#endif
+
+const char *
+svn_sysinfo__canonical_host(apr_pool_t *pool)
+{
+#ifdef WIN32
+ return win32_canonical_host(pool);
+#elif HAVE_UNAME
+ return canonical_host_from_uname(pool);
+#else
+ return "unknown-unknown-unknown";
+#endif
+}
+
+
+const char *
+svn_sysinfo__release_name(apr_pool_t *pool)
+{
+#ifdef WIN32
+ return win32_release_name(pool);
+#elif defined(SVN_HAVE_MACOS_PLIST)
+ return macos_release_name(pool);
+#elif __linux__
+ return linux_release_name(pool);
+#elif HAVE_UNAME
+ return release_name_from_uname(pool);
+#else
+ return NULL;
+#endif
+}
+
+const apr_array_header_t *
+svn_sysinfo__linked_libs(apr_pool_t *pool)
+{
+ svn_version_ext_linked_lib_t *lib;
+ apr_array_header_t *array = apr_array_make(pool, 3, sizeof(*lib));
+
+ lib = &APR_ARRAY_PUSH(array, svn_version_ext_linked_lib_t);
+ lib->name = "APR";
+ lib->compiled_version = APR_VERSION_STRING;
+ lib->runtime_version = apr_pstrdup(pool, apr_version_string());
+
+/* Don't list APR-Util if it isn't linked in, which it may not be if
+ * we're using APR 2.x+ which combined APR-Util into APR. */
+#ifdef APU_VERSION_STRING
+ lib = &APR_ARRAY_PUSH(array, svn_version_ext_linked_lib_t);
+ lib->name = "APR-Util";
+ lib->compiled_version = APU_VERSION_STRING;
+ lib->runtime_version = apr_pstrdup(pool, apu_version_string());
+#endif
+
+ lib = &APR_ARRAY_PUSH(array, svn_version_ext_linked_lib_t);
+ lib->name = "SQLite";
+ lib->compiled_version = apr_pstrdup(pool, svn_sqlite__compiled_version());
+#ifdef SVN_SQLITE_INLINE
+ lib->runtime_version = NULL;
+#else
+ lib->runtime_version = apr_pstrdup(pool, svn_sqlite__runtime_version());
+#endif
+
+ return array;
+}
+
+const apr_array_header_t *
+svn_sysinfo__loaded_libs(apr_pool_t *pool)
+{
+#ifdef WIN32
+ return win32_shared_libs(pool);
+#elif defined(SVN_HAVE_MACHO_ITERATE)
+ return macos_shared_libs(pool);
+#else
+ return NULL;
+#endif
+}
+
+
+#if HAVE_UNAME
+static const char*
+canonical_host_from_uname(apr_pool_t *pool)
+{
+ const char *machine = "unknown";
+ const char *vendor = "unknown";
+ const char *sysname = "unknown";
+ const char *sysver = "";
+ struct utsname info;
+
+ if (0 <= uname(&info))
+ {
+ svn_error_t *err;
+ const char *tmp;
+
+ err = svn_utf_cstring_to_utf8(&tmp, info.machine, pool);
+ if (err)
+ svn_error_clear(err);
+ else
+ machine = tmp;
+
+ err = svn_utf_cstring_to_utf8(&tmp, info.sysname, pool);
+ if (err)
+ svn_error_clear(err);
+ else
+ {
+ char *lwr = apr_pstrdup(pool, tmp);
+ char *it = lwr;
+ while (*it)
+ {
+ if (svn_ctype_isupper(*it))
+ *it = apr_tolower(*it);
+ ++it;
+ }
+ sysname = lwr;
+ }
+
+ if (0 == strcmp(sysname, "darwin"))
+ vendor = "apple";
+ if (0 == strcmp(sysname, "linux"))
+ sysver = "-gnu";
+ else
+ {
+ err = svn_utf_cstring_to_utf8(&tmp, info.release, pool);
+ if (err)
+ svn_error_clear(err);
+ else
+ {
+ apr_size_t n = strspn(tmp, ".0123456789");
+ if (n > 0)
+ {
+ char *ver = apr_pstrdup(pool, tmp);
+ ver[n] = 0;
+ sysver = ver;
+ }
+ else
+ sysver = tmp;
+ }
+ }
+ }
+
+ return apr_psprintf(pool, "%s-%s-%s%s", machine, vendor, sysname, sysver);
+}
+
+# ifndef SVN_HAVE_MACOS_PLIST
+/* Generate a release name from the uname(3) info, effectively
+ returning "`uname -s` `uname -r`". */
+static const char *
+release_name_from_uname(apr_pool_t *pool)
+{
+ struct utsname info;
+ if (0 <= uname(&info))
+ {
+ svn_error_t *err;
+ const char *sysname;
+ const char *sysver;
+
+ err = svn_utf_cstring_to_utf8(&sysname, info.sysname, pool);
+ if (err)
+ {
+ sysname = NULL;
+ svn_error_clear(err);
+ }
+
+
+ err = svn_utf_cstring_to_utf8(&sysver, info.release, pool);
+ if (err)
+ {
+ sysver = NULL;
+ svn_error_clear(err);
+ }
+
+ if (sysname || sysver)
+ {
+ return apr_psprintf(pool, "%s%s%s",
+ (sysname ? sysname : ""),
+ (sysver ? (sysname ? " " : "") : ""),
+ (sysver ? sysver : ""));
+ }
+ }
+ return NULL;
+}
+# endif /* !SVN_HAVE_MACOS_PLIST */
+#endif /* HAVE_UNAME */
+
+
+#if __linux__
+/* Split a stringbuf into a key/value pair.
+ Return the key, leaving the striped value in the stringbuf. */
+static const char *
+stringbuf_split_key(svn_stringbuf_t *buffer, char delim)
+{
+ char *key;
+ char *end;
+
+ end = strchr(buffer->data, delim);
+ if (!end)
+ return NULL;
+
+ svn_stringbuf_strip_whitespace(buffer);
+
+ /* Now we split the currently allocated buffer in two parts:
+ - a const char * HEAD
+ - the remaining stringbuf_t. */
+
+ /* Create HEAD as '\0' terminated const char * */
+ key = buffer->data;
+ end = strchr(key, delim);
+ *end = '\0';
+
+ /* And update the TAIL to be a smaller, but still valid stringbuf */
+ buffer->data = end + 1;
+ buffer->len -= 1 + end - key;
+ buffer->blocksize -= 1 + end - key;
+
+ svn_stringbuf_strip_whitespace(buffer);
+
+ return key;
+}
+
+/* Parse `/usr/bin/lsb_rlease --all` */
+static const char *
+lsb_release(apr_pool_t *pool)
+{
+ static const char *const args[3] =
+ {
+ "/usr/bin/lsb_release",
+ "--all",
+ NULL
+ };
+
+ const char *distributor = NULL;
+ const char *description = NULL;
+ const char *release = NULL;
+ const char *codename = NULL;
+
+ apr_proc_t lsbproc;
+ svn_stream_t *lsbinfo;
+ svn_error_t *err;
+
+ /* Run /usr/bin/lsb_release --all < /dev/null 2>/dev/null */
+ {
+ apr_file_t *stdin_handle;
+ apr_file_t *stdout_handle;
+
+ err = svn_io_file_open(&stdin_handle, SVN_NULL_DEVICE_NAME,
+ APR_READ, APR_OS_DEFAULT, pool);
+ if (!err)
+ err = svn_io_file_open(&stdout_handle, SVN_NULL_DEVICE_NAME,
+ APR_WRITE, APR_OS_DEFAULT, pool);
+ if (!err)
+ err = svn_io_start_cmd3(&lsbproc, NULL, args[0], args, NULL, FALSE,
+ FALSE, stdin_handle,
+ TRUE, NULL,
+ FALSE, stdout_handle,
+ pool);
+ if (err)
+ {
+ svn_error_clear(err);
+ return NULL;
+ }
+ }
+
+ /* Parse the output and try to populate the */
+ lsbinfo = svn_stream_from_aprfile2(lsbproc.out, TRUE, pool);
+ if (lsbinfo)
+ {
+ for (;;)
+ {
+ svn_boolean_t eof = FALSE;
+ svn_stringbuf_t *line;
+ const char *key;
+
+ err = svn_stream_readline(lsbinfo, &line, "\n", &eof, pool);
+ if (err || eof)
+ break;
+
+ key = stringbuf_split_key(line, ':');
+ if (!key)
+ continue;
+
+ if (0 == svn_cstring_casecmp(key, "Distributor ID"))
+ distributor = line->data;
+ else if (0 == svn_cstring_casecmp(key, "Description"))
+ description = line->data;
+ else if (0 == svn_cstring_casecmp(key, "Release"))
+ release = line->data;
+ else if (0 == svn_cstring_casecmp(key, "Codename"))
+ codename = line->data;
+ }
+ err = svn_error_compose_create(err,
+ svn_stream_close(lsbinfo));
+ if (err)
+ {
+ svn_error_clear(err);
+ apr_proc_kill(&lsbproc, SIGKILL);
+ return NULL;
+ }
+ }
+
+ /* Reap the child process */
+ err = svn_io_wait_for_cmd(&lsbproc, "", NULL, NULL, pool);
+ if (err)
+ {
+ svn_error_clear(err);
+ return NULL;
+ }
+
+ if (description)
+ return apr_psprintf(pool, "%s%s%s%s", description,
+ (codename ? " (" : ""),
+ (codename ? codename : ""),
+ (codename ? ")" : ""));
+ if (distributor)
+ return apr_psprintf(pool, "%s%s%s%s%s%s", distributor,
+ (release ? " " : ""),
+ (release ? release : ""),
+ (codename ? " (" : ""),
+ (codename ? codename : ""),
+ (codename ? ")" : ""));
+
+ return NULL;
+}
+
+/* Read the whole contents of a file. */
+static svn_stringbuf_t *
+read_file_contents(const char *filename, apr_pool_t *pool)
+{
+ svn_error_t *err;
+ svn_stringbuf_t *buffer;
+
+ err = svn_stringbuf_from_file2(&buffer, filename, pool);
+ if (err)
+ {
+ svn_error_clear(err);
+ return NULL;
+ }
+
+ return buffer;
+}
+
+/* Strip everything but the first line from a stringbuf. */
+static void
+stringbuf_first_line_only(svn_stringbuf_t *buffer)
+{
+ char *eol = strchr(buffer->data, '\n');
+ if (eol)
+ {
+ *eol = '\0';
+ buffer->len = 1 + eol - buffer->data;
+ }
+ svn_stringbuf_strip_whitespace(buffer);
+}
+
+/* Look at /etc/redhat_release to detect RHEL/Fedora/CentOS. */
+static const char *
+redhat_release(apr_pool_t *pool)
+{
+ svn_stringbuf_t *buffer = read_file_contents("/etc/redhat-release", pool);
+ if (buffer)
+ {
+ stringbuf_first_line_only(buffer);
+ return buffer->data;
+ }
+ return NULL;
+}
+
+/* Look at /etc/SuSE-release to detect non-LSB SuSE. */
+static const char *
+suse_release(apr_pool_t *pool)
+{
+ const char *release = NULL;
+ const char *codename = NULL;
+
+ svn_stringbuf_t *buffer = read_file_contents("/etc/SuSE-release", pool);
+ svn_stringbuf_t *line;
+ svn_stream_t *stream;
+ svn_boolean_t eof;
+ svn_error_t *err;
+ if (!buffer)
+ return NULL;
+
+ stream = svn_stream_from_stringbuf(buffer, pool);
+ err = svn_stream_readline(stream, &line, "\n", &eof, pool);
+ if (err || eof)
+ {
+ svn_error_clear(err);
+ return NULL;
+ }
+
+ svn_stringbuf_strip_whitespace(line);
+ release = line->data;
+
+ for (;;)
+ {
+ const char *key;
+
+ err = svn_stream_readline(stream, &line, "\n", &eof, pool);
+ if (err || eof)
+ {
+ svn_error_clear(err);
+ break;
+ }
+
+ key = stringbuf_split_key(line, '=');
+ if (!key)
+ continue;
+
+ if (0 == strncmp(key, "CODENAME", 8))
+ codename = line->data;
+ }
+
+ return apr_psprintf(pool, "%s%s%s%s",
+ release,
+ (codename ? " (" : ""),
+ (codename ? codename : ""),
+ (codename ? ")" : ""));
+}
+
+/* Look at /etc/debian_version to detect non-LSB Debian. */
+static const char *
+debian_release(apr_pool_t *pool)
+{
+ svn_stringbuf_t *buffer = read_file_contents("/etc/debian_version", pool);
+ if (!buffer)
+ return NULL;
+
+ stringbuf_first_line_only(buffer);
+ return apr_pstrcat(pool, "Debian ", buffer->data, NULL);
+}
+
+/* Try to find the Linux distribution name, or return info from uname. */
+static const char *
+linux_release_name(apr_pool_t *pool)
+{
+ const char *uname_release = release_name_from_uname(pool);
+
+ /* Try anything that has /usr/bin/lsb_release.
+ Covers, for example, Debian, Ubuntu and SuSE. */
+ const char *release_name = lsb_release(pool);
+
+ /* Try RHEL/Fedora/CentOS */
+ if (!release_name)
+ release_name = redhat_release(pool);
+
+ /* Try Non-LSB SuSE */
+ if (!release_name)
+ release_name = suse_release(pool);
+
+ /* Try non-LSB Debian */
+ if (!release_name)
+ release_name = debian_release(pool);
+
+ if (!release_name)
+ return uname_release;
+
+ if (!uname_release)
+ return release_name;
+
+ return apr_psprintf(pool, "%s [%s]", release_name, uname_release);
+}
+#endif /* __linux__ */
+
+
+#ifdef WIN32
+typedef DWORD (WINAPI *FNGETNATIVESYSTEMINFO)(LPSYSTEM_INFO);
+typedef BOOL (WINAPI *FNENUMPROCESSMODULES) (HANDLE, HMODULE*, DWORD, LPDWORD);
+
+/* Get system and version info, and try to tell the difference
+ between the native system type and the runtime environment of the
+ current process. Populate results in SYSINFO, LOCAL_SYSINFO
+ (optional) and OSINFO. */
+static BOOL
+system_info(SYSTEM_INFO *sysinfo,
+ SYSTEM_INFO *local_sysinfo,
+ OSVERSIONINFOEXW *osinfo)
+{
+ FNGETNATIVESYSTEMINFO GetNativeSystemInfo_ = (FNGETNATIVESYSTEMINFO)
+ GetProcAddress(GetModuleHandleA("kernel32.dll"), "GetNativeSystemInfo");
+
+ ZeroMemory(sysinfo, sizeof *sysinfo);
+ if (local_sysinfo)
+ {
+ ZeroMemory(local_sysinfo, sizeof *local_sysinfo);
+ GetSystemInfo(local_sysinfo);
+ if (GetNativeSystemInfo_)
+ GetNativeSystemInfo_(sysinfo);
+ else
+ memcpy(sysinfo, local_sysinfo, sizeof *sysinfo);
+ }
+ else
+ GetSystemInfo(sysinfo);
+
+ ZeroMemory(osinfo, sizeof *osinfo);
+ osinfo->dwOSVersionInfoSize = sizeof *osinfo;
+ if (!GetVersionExW((LPVOID)osinfo))
+ return FALSE;
+
+ return TRUE;
+}
+
+/* Map the proccessor type from SYSINFO to a string. */
+static const char *
+processor_name(SYSTEM_INFO *sysinfo)
+{
+ switch (sysinfo->wProcessorArchitecture)
+ {
+ case PROCESSOR_ARCHITECTURE_AMD64: return "x86_64";
+ case PROCESSOR_ARCHITECTURE_IA64: return "ia64";
+ case PROCESSOR_ARCHITECTURE_INTEL: return "x86";
+ case PROCESSOR_ARCHITECTURE_MIPS: return "mips";
+ case PROCESSOR_ARCHITECTURE_ALPHA: return "alpha32";
+ case PROCESSOR_ARCHITECTURE_PPC: return "powerpc";
+ case PROCESSOR_ARCHITECTURE_SHX: return "shx";
+ case PROCESSOR_ARCHITECTURE_ARM: return "arm";
+ case PROCESSOR_ARCHITECTURE_ALPHA64: return "alpha";
+ case PROCESSOR_ARCHITECTURE_MSIL: return "msil";
+ case PROCESSOR_ARCHITECTURE_IA32_ON_WIN64: return "x86_wow64";
+ default: return "unknown";
+ }
+}
+
+/* Return the Windows-specific canonical host name. */
+static const char *
+win32_canonical_host(apr_pool_t *pool)
+{
+ SYSTEM_INFO sysinfo;
+ SYSTEM_INFO local_sysinfo;
+ OSVERSIONINFOEXW osinfo;
+
+ if (system_info(&sysinfo, &local_sysinfo, &osinfo))
+ {
+ const char *arch = processor_name(&local_sysinfo);
+ const char *machine = processor_name(&sysinfo);
+ const char *vendor = "microsoft";
+ const char *sysname = "windows";
+ const char *sysver = apr_psprintf(pool, "%u.%u.%u",
+ (unsigned int)osinfo.dwMajorVersion,
+ (unsigned int)osinfo.dwMinorVersion,
+ (unsigned int)osinfo.dwBuildNumber);
+
+ if (sysinfo.wProcessorArchitecture
+ == local_sysinfo.wProcessorArchitecture)
+ return apr_psprintf(pool, "%s-%s-%s%s",
+ machine, vendor, sysname, sysver);
+ return apr_psprintf(pool, "%s/%s-%s-%s%s",
+ arch, machine, vendor, sysname, sysver);
+ }
+
+ return "unknown-microsoft-windows";
+}
+
+/* Convert a Unicode string to UTF-8. */
+static char *
+wcs_to_utf8(const wchar_t *wcs, apr_pool_t *pool)
+{
+ const int bufsize = WideCharToMultiByte(CP_UTF8, 0, wcs, -1,
+ NULL, 0, NULL, NULL);
+ if (bufsize > 0)
+ {
+ char *const utf8 = apr_palloc(pool, bufsize + 1);
+ WideCharToMultiByte(CP_UTF8, 0, wcs, -1, utf8, bufsize, NULL, NULL);
+ return utf8;
+ }
+ return NULL;
+}
+
+/* Query the value called NAME of the registry key HKEY. */
+static char *
+registry_value(HKEY hkey, wchar_t *name, apr_pool_t *pool)
+{
+ DWORD size;
+ wchar_t *value;
+
+ if (RegQueryValueExW(hkey, name, NULL, NULL, NULL, &size))
+ return NULL;
+
+ value = apr_palloc(pool, size + sizeof *value);
+ if (RegQueryValueExW(hkey, name, NULL, NULL, (void*)value, &size))
+ return NULL;
+ value[size / sizeof *value] = 0;
+ return wcs_to_utf8(value, pool);
+}
+
+/* Try to glean the Windows release name and associated info from the
+ registry. Failing that, construct a release name from the version
+ info. */
+static const char *
+win32_release_name(apr_pool_t *pool)
+{
+ SYSTEM_INFO sysinfo;
+ OSVERSIONINFOEXW osinfo;
+ HKEY hkcv;
+
+ if (!system_info(&sysinfo, NULL, &osinfo))
+ return NULL;
+
+ if (!RegOpenKeyExW(HKEY_LOCAL_MACHINE,
+ L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion",
+ 0, KEY_QUERY_VALUE, &hkcv))
+ {
+ const char *release = registry_value(hkcv, L"ProductName", pool);
+ const char *spack = registry_value(hkcv, L"CSDVersion", pool);
+ const char *curver = registry_value(hkcv, L"CurrentVersion", pool);
+ const char *curtype = registry_value(hkcv, L"CurrentType", pool);
+ const char *install = registry_value(hkcv, L"InstallationType", pool);
+ const char *curbuild = registry_value(hkcv, L"CurrentBuildNumber", pool);
+
+ if (!spack && *osinfo.szCSDVersion)
+ spack = wcs_to_utf8(osinfo.szCSDVersion, pool);
+
+ if (!curbuild)
+ curbuild = registry_value(hkcv, L"CurrentBuild", pool);
+
+ if (release || spack || curver || curtype || curbuild)
+ {
+ const char *bootinfo = "";
+ if (curver || install || curtype)
+ {
+ bootinfo = apr_psprintf(pool, "[%s%s%s%s%s]",
+ (curver ? curver : ""),
+ (install ? (curver ? " " : "") : ""),
+ (install ? install : ""),
+ (curtype
+ ? (curver||install ? " " : "")
+ : ""),
+ (curtype ? curtype : ""));
+ }
+
+ return apr_psprintf(pool, "%s%s%s%s%s%s%s",
+ (release ? release : ""),
+ (spack ? (release ? ", " : "") : ""),
+ (spack ? spack : ""),
+ (curbuild
+ ? (release||spack ? ", build " : "build ")
+ : ""),
+ (curbuild ? curbuild : ""),
+ (bootinfo
+ ? (release||spack||curbuild ? " " : "")
+ : ""),
+ (bootinfo ? bootinfo : ""));
+ }
+ }
+
+ if (*osinfo.szCSDVersion)
+ {
+ const char *servicepack = wcs_to_utf8(osinfo.szCSDVersion, pool);
+
+ if (servicepack)
+ return apr_psprintf(pool, "Windows NT %u.%u, %s, build %u",
+ (unsigned int)osinfo.dwMajorVersion,
+ (unsigned int)osinfo.dwMinorVersion,
+ servicepack,
+ (unsigned int)osinfo.dwBuildNumber);
+
+ /* Assume wServicePackMajor > 0 if szCSDVersion is not empty */
+ if (osinfo.wServicePackMinor)
+ return apr_psprintf(pool, "Windows NT %u.%u SP%u.%u, build %u",
+ (unsigned int)osinfo.dwMajorVersion,
+ (unsigned int)osinfo.dwMinorVersion,
+ (unsigned int)osinfo.wServicePackMajor,
+ (unsigned int)osinfo.wServicePackMinor,
+ (unsigned int)osinfo.dwBuildNumber);
+
+ return apr_psprintf(pool, "Windows NT %u.%u SP%u, build %u",
+ (unsigned int)osinfo.dwMajorVersion,
+ (unsigned int)osinfo.dwMinorVersion,
+ (unsigned int)osinfo.wServicePackMajor,
+ (unsigned int)osinfo.dwBuildNumber);
+ }
+
+ return apr_psprintf(pool, "Windows NT %u.%u, build %u",
+ (unsigned int)osinfo.dwMajorVersion,
+ (unsigned int)osinfo.dwMinorVersion,
+ (unsigned int)osinfo.dwBuildNumber);
+}
+
+
+/* Get a list of handles of shared libs loaded by the current
+ process. Returns a NULL-terminated array alocated from POOL. */
+static HMODULE *
+enum_loaded_modules(apr_pool_t *pool)
+{
+ HMODULE psapi_dll = 0;
+ HANDLE current = GetCurrentProcess();
+ HMODULE dummy[1];
+ HMODULE *handles;
+ DWORD size;
+ FNENUMPROCESSMODULES EnumProcessModules_;
+
+ psapi_dll = GetModuleHandleA("psapi.dll");
+
+ if (!psapi_dll)
+ {
+ /* Load and never unload, just like static linking */
+ psapi_dll = LoadLibraryA("psapi.dll");
+ }
+
+ if (!psapi_dll)
+ return NULL;
+
+ EnumProcessModules_ = (FNENUMPROCESSMODULES)
+ GetProcAddress(psapi_dll, "EnumProcessModules");
+
+ /* Before Windows XP psapi was an optional module */
+ if (! EnumProcessModules_)
+ return NULL;
+
+ if (!EnumProcessModules_(current, dummy, sizeof(dummy), &size))
+ return NULL;
+
+ handles = apr_palloc(pool, size + sizeof *handles);
+ if (! EnumProcessModules_(current, handles, size, &size))
+ return NULL;
+ handles[size / sizeof *handles] = NULL;
+ return handles;
+}
+
+/* Find the version number, if any, embedded in FILENAME. */
+static const char *
+file_version_number(const wchar_t *filename, apr_pool_t *pool)
+{
+ VS_FIXEDFILEINFO info;
+ unsigned int major, minor, micro, nano;
+ void *data;
+ DWORD data_size = GetFileVersionInfoSizeW(filename, NULL);
+ void *vinfo;
+ UINT vinfo_size;
+
+ if (!data_size)
+ return NULL;
+
+ data = apr_palloc(pool, data_size);
+ if (!GetFileVersionInfoW(filename, 0, data_size, data))
+ return NULL;
+
+ if (!VerQueryValueW(data, L"\\", &vinfo, &vinfo_size))
+ return NULL;
+
+ if (vinfo_size != sizeof info)
+ return NULL;
+
+ memcpy(&info, vinfo, sizeof info);
+ major = (info.dwFileVersionMS >> 16) & 0xFFFF;
+ minor = info.dwFileVersionMS & 0xFFFF;
+ micro = (info.dwFileVersionLS >> 16) & 0xFFFF;
+ nano = info.dwFileVersionLS & 0xFFFF;
+
+ if (!nano)
+ {
+ if (!micro)
+ return apr_psprintf(pool, "%u.%u", major, minor);
+ else
+ return apr_psprintf(pool, "%u.%u.%u", major, minor, micro);
+ }
+ return apr_psprintf(pool, "%u.%u.%u.%u", major, minor, micro, nano);
+}
+
+/* List the shared libraries loaded by the current process. */
+static const apr_array_header_t *
+win32_shared_libs(apr_pool_t *pool)
+{
+ apr_array_header_t *array = NULL;
+ wchar_t buffer[MAX_PATH + 1];
+ HMODULE *handles = enum_loaded_modules(pool);
+ HMODULE *module;
+
+ for (module = handles; module && *module; ++module)
+ {
+ const char *filename;
+ const char *version;
+ if (GetModuleFileNameW(*module, buffer, MAX_PATH))
+ {
+ buffer[MAX_PATH] = 0;
+
+ version = file_version_number(buffer, pool);
+ filename = wcs_to_utf8(buffer, pool);
+ if (filename)
+ {
+ svn_version_ext_loaded_lib_t *lib;
+
+ if (!array)
+ {
+ array = apr_array_make(pool, 32, sizeof(*lib));
+ }
+ lib = &APR_ARRAY_PUSH(array, svn_version_ext_loaded_lib_t);
+ lib->name = svn_dirent_local_style(filename, pool);
+ lib->version = version;
+ }
+ }
+ }
+
+ return array;
+}
+#endif /* WIN32 */
+
+
+#ifdef SVN_HAVE_MACOS_PLIST
+/* Load the SystemVersion.plist or ServerVersion.plist file into a
+ property list. Set SERVER to TRUE if the file read was
+ ServerVersion.plist. */
+static CFDictionaryRef
+system_version_plist(svn_boolean_t *server, apr_pool_t *pool)
+{
+ static const UInt8 server_version[] =
+ "/System/Library/CoreServices/ServerVersion.plist";
+ static const UInt8 system_version[] =
+ "/System/Library/CoreServices/SystemVersion.plist";
+
+ CFPropertyListRef plist = NULL;
+ CFDataRef resource = NULL;
+ CFStringRef errstr = NULL;
+ CFURLRef url = NULL;
+ SInt32 errcode;
+
+ url = CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault,
+ server_version,
+ sizeof(server_version) - 1,
+ FALSE);
+ if (!url)
+ return NULL;
+
+ if (!CFURLCreateDataAndPropertiesFromResource(kCFAllocatorDefault,
+ url, &resource,
+ NULL, NULL, &errcode))
+ {
+ CFRelease(url);
+ url = CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault,
+ system_version,
+ sizeof(system_version) - 1,
+ FALSE);
+ if (!url)
+ return NULL;
+
+ if (!CFURLCreateDataAndPropertiesFromResource(kCFAllocatorDefault,
+ url, &resource,
+ NULL, NULL, &errcode))
+ {
+ CFRelease(url);
+ return NULL;
+ }
+ else
+ {
+ CFRelease(url);
+ *server = FALSE;
+ }
+ }
+ else
+ {
+ CFRelease(url);
+ *server = TRUE;
+ }
+
+ /* ### CFPropertyListCreateFromXMLData is obsolete, but its
+ replacement CFPropertyListCreateWithData is only available
+ from Mac OS 1.6 onward. */
+ plist = CFPropertyListCreateFromXMLData(kCFAllocatorDefault, resource,
+ kCFPropertyListImmutable,
+ &errstr);
+ if (resource)
+ CFRelease(resource);
+ if (errstr)
+ CFRelease(errstr);
+
+ if (CFDictionaryGetTypeID() != CFGetTypeID(plist))
+ {
+ /* Oops ... this really should be a dict. */
+ CFRelease(plist);
+ return NULL;
+ }
+
+ return plist;
+}
+
+/* Return the value for KEY from PLIST, or NULL if not available. */
+static const char *
+value_from_dict(CFDictionaryRef plist, CFStringRef key, apr_pool_t *pool)
+{
+ CFStringRef valref;
+ CFIndex bufsize;
+ const void *valptr;
+ const char *value;
+
+ if (!CFDictionaryGetValueIfPresent(plist, key, &valptr))
+ return NULL;
+
+ valref = valptr;
+ if (CFStringGetTypeID() != CFGetTypeID(valref))
+ return NULL;
+
+ value = CFStringGetCStringPtr(valref, kCFStringEncodingUTF8);
+ if (value)
+ return apr_pstrdup(pool, value);
+
+ bufsize = 5 * CFStringGetLength(valref) + 1;
+ value = apr_palloc(pool, bufsize);
+ if (!CFStringGetCString(valref, (char*)value, bufsize,
+ kCFStringEncodingUTF8))
+ value = NULL;
+
+ return value;
+}
+
+/* Return the commercial name of the OS, given the version number in
+ a format that matches the regular expression /^10\.\d+(\..*)?$/ */
+static const char *
+release_name_from_version(const char *osver)
+{
+ char *end = NULL;
+ unsigned long num = strtoul(osver, &end, 10);
+
+ if (!end || *end != '.' || num != 10)
+ return NULL;
+
+ osver = end + 1;
+ end = NULL;
+ num = strtoul(osver, &end, 10);
+ if (!end || (*end && *end != '.'))
+ return NULL;
+
+ /* See http://en.wikipedia.org/wiki/History_of_OS_X#Release_timeline */
+ switch(num)
+ {
+ case 0: return "Cheetah";
+ case 1: return "Puma";
+ case 2: return "Jaguar";
+ case 3: return "Panther";
+ case 4: return "Tiger";
+ case 5: return "Leopard";
+ case 6: return "Snow Leopard";
+ case 7: return "Lion";
+ case 8: return "Mountain Lion";
+ case 9: return "Mavericks";
+ }
+
+ return NULL;
+}
+
+/* Construct the release name from information stored in the Mac OS X
+ "SystemVersion.plist" file (or ServerVersion.plist, for Mac Os
+ Server. */
+static const char *
+macos_release_name(apr_pool_t *pool)
+{
+ svn_boolean_t server;
+ CFDictionaryRef plist = system_version_plist(&server, pool);
+
+ if (plist)
+ {
+ const char *osname = value_from_dict(plist, CFSTR("ProductName"), pool);
+ const char *osver = value_from_dict(plist,
+ CFSTR("ProductUserVisibleVersion"),
+ pool);
+ const char *build = value_from_dict(plist,
+ CFSTR("ProductBuildVersion"),
+ pool);
+ const char *release;
+
+ if (!osver)
+ osver = value_from_dict(plist, CFSTR("ProductVersion"), pool);
+ release = release_name_from_version(osver);
+
+ CFRelease(plist);
+ return apr_psprintf(pool, "%s%s%s%s%s%s%s%s",
+ (osname ? osname : ""),
+ (osver ? (osname ? " " : "") : ""),
+ (osver ? osver : ""),
+ (release ? (osname||osver ? " " : "") : ""),
+ (release ? release : ""),
+ (build
+ ? (osname||osver||release ? ", " : "")
+ : ""),
+ (build
+ ? (server ? "server build " : "build ")
+ : ""),
+ (build ? build : ""));
+ }
+
+ return NULL;
+}
+#endif /* SVN_HAVE_MACOS_PLIST */
+
+#ifdef SVN_HAVE_MACHO_ITERATE
+/* List the shared libraries loaded by the current process.
+ Ignore frameworks and system libraries, they're just clutter. */
+static const apr_array_header_t *
+macos_shared_libs(apr_pool_t *pool)
+{
+ static const char slb_prefix[] = "/usr/lib/system/";
+ static const char fwk_prefix[] = "/System/Library/Frameworks/";
+ static const char pfk_prefix[] = "/System/Library/PrivateFrameworks/";
+
+ const size_t slb_prefix_len = strlen(slb_prefix);
+ const size_t fwk_prefix_len = strlen(fwk_prefix);
+ const size_t pfk_prefix_len = strlen(pfk_prefix);
+
+ apr_array_header_t *result = NULL;
+ apr_array_header_t *dylibs = NULL;
+
+ uint32_t i;
+ for (i = 0;; ++i)
+ {
+ const struct mach_header *header = _dyld_get_image_header(i);
+ const char *filename = _dyld_get_image_name(i);
+ const char *version;
+ char *truename;
+ svn_version_ext_loaded_lib_t *lib;
+
+ if (!(header && filename))
+ break;
+
+ switch (header->cputype)
+ {
+ case CPU_TYPE_I386: version = _("Intel"); break;
+ case CPU_TYPE_X86_64: version = _("Intel 64-bit"); break;
+ case CPU_TYPE_POWERPC: version = _("PowerPC"); break;
+ case CPU_TYPE_POWERPC64: version = _("PowerPC 64-bit"); break;
+ default:
+ version = NULL;
+ }
+
+ if (0 == apr_filepath_merge(&truename, "", filename,
+ APR_FILEPATH_NATIVE
+ | APR_FILEPATH_TRUENAME,
+ pool))
+ filename = truename;
+ else
+ filename = apr_pstrdup(pool, filename);
+
+ if (0 == strncmp(filename, slb_prefix, slb_prefix_len)
+ || 0 == strncmp(filename, fwk_prefix, fwk_prefix_len)
+ || 0 == strncmp(filename, pfk_prefix, pfk_prefix_len))
+ {
+ /* Ignore frameworks and system libraries. */
+ continue;
+ }
+
+ if (header->filetype == MH_EXECUTE)
+ {
+ /* Make sure the program filename is first in the list */
+ if (!result)
+ {
+ result = apr_array_make(pool, 32, sizeof(*lib));
+ }
+ lib = &APR_ARRAY_PUSH(result, svn_version_ext_loaded_lib_t);
+ }
+ else
+ {
+ if (!dylibs)
+ {
+ dylibs = apr_array_make(pool, 32, sizeof(*lib));
+ }
+ lib = &APR_ARRAY_PUSH(dylibs, svn_version_ext_loaded_lib_t);
+ }
+
+ lib->name = filename;
+ lib->version = version;
+ }
+
+ /* Gather results into one array. */
+ if (dylibs)
+ {
+ if (result)
+ apr_array_cat(result, dylibs);
+ else
+ result = dylibs;
+ }
+
+ return result;
+}
+#endif /* SVN_HAVE_MACHO_ITERATE */
diff --git a/subversion/libsvn_subr/sysinfo.h b/subversion/libsvn_subr/sysinfo.h
new file mode 100644
index 0000000..6a6e74d
--- /dev/null
+++ b/subversion/libsvn_subr/sysinfo.h
@@ -0,0 +1,69 @@
+/*
+ * sysinfo.h: share svn_sysinfo__* functions
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#ifndef SVN_LIBSVN_SUBR_SYSINFO_H
+#define SVN_LIBSVN_SUBR_SYSINFO_H
+
+#include <apr_pools.h>
+#include <apr_tables.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/* Return a canonical name similar to the output of config.guess,
+ * identifying the running system.
+ *
+ * All allocations are done in POOL.
+ */
+const char *svn_sysinfo__canonical_host(apr_pool_t *pool);
+
+/* Return the release name (i.e., marketing name) of the running
+ * system, or NULL if it's not available.
+ *
+ * All allocations are done in POOL.
+ */
+const char *svn_sysinfo__release_name(apr_pool_t *pool);
+
+/* Return an array of svn_version_linked_lib_t of descriptions of the
+ * link-time and run-time versions of dependent libraries, or NULL of
+ * the info is not available.
+ *
+ * All allocations are done in POOL.
+ */
+const apr_array_header_t *svn_sysinfo__linked_libs(apr_pool_t *pool);
+
+/* Return an array of svn_version_loaded_lib_t of descriptions of
+ * shared libraries loaded by the running process, including their
+ * versions where applicable, or NULL if the information is not
+ * available.
+ *
+ * All allocations are done in POOL.
+ */
+const apr_array_header_t *svn_sysinfo__loaded_libs(apr_pool_t *pool);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* SVN_LIBSVN_SUBR_SYSINFO_H */
diff --git a/subversion/libsvn_subr/target.c b/subversion/libsvn_subr/target.c
index 10b737a..3525167 100644
--- a/subversion/libsvn_subr/target.c
+++ b/subversion/libsvn_subr/target.c
@@ -46,7 +46,7 @@ svn_path_condense_targets(const char **pcommon,
int i, j, num_condensed = targets->nelts;
svn_boolean_t *removed;
apr_array_header_t *abs_targets;
- int basedir_len;
+ size_t basedir_len;
const char *first_target;
svn_boolean_t first_target_is_url;
@@ -303,18 +303,12 @@ svn_path_remove_redundancies(apr_array_header_t **pcondensed_targets,
if (is_url != keeper_is_url)
continue;
- /* Quit here if we find this path already in the keepers. */
- if (strcmp(keeper, abs_path) == 0)
- {
- keep_me = FALSE;
- break;
- }
-
- /* Quit here if this path is a child of one of the keepers. */
+ /* Quit here if this path is the same as or a child of one of the
+ keepers. */
if (is_url)
- child_relpath = svn_uri__is_child(keeper, abs_path, temp_pool);
+ child_relpath = svn_uri_skip_ancestor(keeper, abs_path, temp_pool);
else
- child_relpath = svn_dirent_is_child(keeper, abs_path, temp_pool);
+ child_relpath = svn_dirent_skip_ancestor(keeper, abs_path);
if (child_relpath)
{
keep_me = FALSE;
diff --git a/subversion/libsvn_subr/svn_temp_serializer.c b/subversion/libsvn_subr/temp_serializer.c
index fa461b4..261267a 100644
--- a/subversion/libsvn_subr/svn_temp_serializer.c
+++ b/subversion/libsvn_subr/temp_serializer.c
@@ -51,7 +51,9 @@ typedef struct source_stack_t
/* offset within the target buffer to where the structure got copied */
apr_size_t target_offset;
- /* parent stack entry. Will be NULL for the root entry. */
+ /* parent stack entry. Will be NULL for the root entry.
+ * Items in the svn_temp_serializer__context_t recycler will use this
+ * to link to the next unused item. */
struct source_stack_t *upper;
} source_stack_t;
@@ -70,9 +72,12 @@ struct svn_temp_serializer__context_t
* process has been finished. However, it is not necessarily NULL when
* the application end serialization. */
source_stack_t *source;
+
+ /* unused stack elements will be put here for later reuse. */
+ source_stack_t *recycler;
};
-/* Mmake sure the serialized data len is a multiple of the default alignment,
+/* Make sure the serialized data len is a multiple of the default alignment,
* i.e. structures may be appended without violating member alignment
* guarantees.
*/
@@ -81,11 +86,11 @@ align_buffer_end(svn_temp_serializer__context_t *context)
{
apr_size_t current_len = context->buffer->len;
apr_size_t aligned_len = APR_ALIGN_DEFAULT(current_len);
- if (aligned_len != current_len)
- {
- svn_stringbuf_ensure(context->buffer, aligned_len+1);
- context->buffer->len = aligned_len;
- }
+
+ if (aligned_len + 1 > context->buffer->blocksize)
+ svn_stringbuf_ensure(context->buffer, aligned_len);
+
+ context->buffer->len = aligned_len;
}
/* Begin the serialization process for the SOURCE_STRUCT and all objects
@@ -110,6 +115,7 @@ svn_temp_serializer__init(const void *source_struct,
svn_temp_serializer__context_t *context = apr_palloc(pool, sizeof(*context));
context->pool = pool;
context->buffer = svn_stringbuf_create_ensure(init_size, pool);
+ context->recycler = NULL;
/* If a source struct has been given, make it the root struct. */
if (source_struct)
@@ -168,6 +174,9 @@ svn_temp_serializer__init_append(void *buffer,
context->source->target_offset = (char *)source_struct - (char *)buffer;
context->source->upper = NULL;
+ /* initialize the RECYCLER */
+ context->recycler = NULL;
+
/* done */
return context;
}
@@ -219,9 +228,16 @@ svn_temp_serializer__push(svn_temp_serializer__context_t *context,
apr_size_t struct_size)
{
const void *source = *source_struct;
+ source_stack_t *new;
- /* create a new entry for the structure stack */
- source_stack_t *new = apr_palloc(context->pool, sizeof(*new));
+ /* recycle an old entry or create a new one for the structure stack */
+ if (context->recycler)
+ {
+ new = context->recycler;
+ context->recycler = new->upper;
+ }
+ else
+ new = apr_palloc(context->pool, sizeof(*new));
/* the serialized structure must be properly aligned */
if (source)
@@ -250,11 +266,17 @@ svn_temp_serializer__push(svn_temp_serializer__context_t *context,
void
svn_temp_serializer__pop(svn_temp_serializer__context_t *context)
{
+ source_stack_t *old = context->source;
+
/* we may pop the original struct but not further */
assert(context->source);
/* one level up the structure stack */
context->source = context->source->upper;
+
+ /* put the old stack element into the recycler for later reuse */
+ old->upper = context->recycler;
+ context->recycler = old;
}
/* Serialize a string referenced from the current structure within the
@@ -311,7 +333,7 @@ svn_temp_serializer__get_length(svn_temp_serializer__context_t *context)
return context->buffer->len;
}
-/* Return the data buffer that receives the serialialized data from
+/* Return the data buffer that receives the serialized data from
* the given serialization CONTEXT.
*/
svn_stringbuf_t *
@@ -352,7 +374,7 @@ svn_temp_deserializer__resolve(void *buffer, void **ptr)
}
const void *
-svn_temp_deserializer__ptr(const void *buffer, const void **ptr)
+svn_temp_deserializer__ptr(const void *buffer, const void *const *ptr)
{
return (apr_size_t)*ptr == 0
? NULL
diff --git a/subversion/libsvn_subr/time.c b/subversion/libsvn_subr/time.c
index c640b3f..ccd6269 100644
--- a/subversion/libsvn_subr/time.c
+++ b/subversion/libsvn_subr/time.c
@@ -116,14 +116,14 @@ svn_time_to_cstring(apr_time_t when, apr_pool_t *pool)
}
-static int
+static apr_int32_t
find_matching_string(char *str, apr_size_t size, const char strings[][4])
{
apr_size_t i;
for (i = 0; i < size; i++)
if (strings[i] && (strcmp(str, strings[i]) == 0))
- return i;
+ return (apr_int32_t) i;
return -1;
}
@@ -140,19 +140,19 @@ svn_time_from_cstring(apr_time_t *when, const char *data, apr_pool_t *pool)
/* Open-code parsing of the new timestamp format, as this
is a hot path for reading the entries file. This format looks
like: "2001-08-31T04:24:14.966996Z" */
- exploded_time.tm_year = strtol(data, &c, 10);
+ exploded_time.tm_year = (apr_int32_t) strtol(data, &c, 10);
if (*c++ != '-') goto fail;
- exploded_time.tm_mon = strtol(c, &c, 10);
+ exploded_time.tm_mon = (apr_int32_t) strtol(c, &c, 10);
if (*c++ != '-') goto fail;
- exploded_time.tm_mday = strtol(c, &c, 10);
+ exploded_time.tm_mday = (apr_int32_t) strtol(c, &c, 10);
if (*c++ != 'T') goto fail;
- exploded_time.tm_hour = strtol(c, &c, 10);
+ exploded_time.tm_hour = (apr_int32_t) strtol(c, &c, 10);
if (*c++ != ':') goto fail;
- exploded_time.tm_min = strtol(c, &c, 10);
+ exploded_time.tm_min = (apr_int32_t) strtol(c, &c, 10);
if (*c++ != ':') goto fail;
- exploded_time.tm_sec = strtol(c, &c, 10);
+ exploded_time.tm_sec = (apr_int32_t) strtol(c, &c, 10);
if (*c++ != '.') goto fail;
- exploded_time.tm_usec = strtol(c, &c, 10);
+ exploded_time.tm_usec = (apr_int32_t) strtol(c, &c, 10);
if (*c++ != 'Z') goto fail;
exploded_time.tm_year -= 1900;
diff --git a/subversion/libsvn_subr/kitchensink.c b/subversion/libsvn_subr/types.c
index 441c8cb..30ebb65 100644
--- a/subversion/libsvn_subr/kitchensink.c
+++ b/subversion/libsvn_subr/types.c
@@ -1,5 +1,5 @@
/*
- * kitchensink.c : When no place else seems to fit...
+ * svn_types.c : Implementation for Subversion's data types.
*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
@@ -24,9 +24,11 @@
#include <apr_pools.h>
#include <apr_uuid.h>
+#include "svn_hash.h"
#include "svn_types.h"
#include "svn_error.h"
-#include "svn_mergeinfo.h"
+#include "svn_string.h"
+#include "svn_props.h"
#include "svn_private_config.h"
svn_error_t *
@@ -121,31 +123,6 @@ svn_depth_from_word(const char *word)
}
const char *
-svn_inheritance_to_word(svn_mergeinfo_inheritance_t inherit)
-{
- switch (inherit)
- {
- case svn_mergeinfo_inherited:
- return "inherited";
- case svn_mergeinfo_nearest_ancestor:
- return "nearest-ancestor";
- default:
- return "explicit";
- }
-}
-
-
-svn_mergeinfo_inheritance_t
-svn_inheritance_from_word(const char *word)
-{
- if (strcmp(word, "inherited") == 0)
- return svn_mergeinfo_inherited;
- if (strcmp(word, "nearest-ancestor") == 0)
- return svn_mergeinfo_nearest_ancestor;
- return svn_mergeinfo_explicit;
-}
-
-const char *
svn_node_kind_to_word(svn_node_kind_t kind)
{
switch (kind)
@@ -156,6 +133,8 @@ svn_node_kind_to_word(svn_node_kind_t kind)
return "file";
case svn_node_dir:
return "dir";
+ case svn_node_symlink:
+ return "symlink";
case svn_node_unknown:
default:
return "unknown";
@@ -175,6 +154,8 @@ svn_node_kind_from_word(const char *word)
return svn_node_file;
else if (strcmp(word, "dir") == 0)
return svn_node_dir;
+ else if (strcmp(word, "symlink") == 0)
+ return svn_node_symlink;
else
/* This also handles word == "unknown" */
return svn_node_unknown;
@@ -213,3 +194,147 @@ svn_tristate__from_word(const char *word)
return svn_tristate_unknown;
}
+
+svn_commit_info_t *
+svn_create_commit_info(apr_pool_t *pool)
+{
+ svn_commit_info_t *commit_info
+ = apr_pcalloc(pool, sizeof(*commit_info));
+
+ commit_info->revision = SVN_INVALID_REVNUM;
+ /* All other fields were initialized to NULL above. */
+
+ return commit_info;
+}
+
+svn_commit_info_t *
+svn_commit_info_dup(const svn_commit_info_t *src_commit_info,
+ apr_pool_t *pool)
+{
+ svn_commit_info_t *dst_commit_info
+ = apr_palloc(pool, sizeof(*dst_commit_info));
+
+ dst_commit_info->date = src_commit_info->date
+ ? apr_pstrdup(pool, src_commit_info->date) : NULL;
+ dst_commit_info->author = src_commit_info->author
+ ? apr_pstrdup(pool, src_commit_info->author) : NULL;
+ dst_commit_info->revision = src_commit_info->revision;
+ dst_commit_info->post_commit_err = src_commit_info->post_commit_err
+ ? apr_pstrdup(pool, src_commit_info->post_commit_err) : NULL;
+ dst_commit_info->repos_root = src_commit_info->repos_root
+ ? apr_pstrdup(pool, src_commit_info->repos_root) : NULL;
+
+ return dst_commit_info;
+}
+
+svn_log_changed_path2_t *
+svn_log_changed_path2_create(apr_pool_t *pool)
+{
+ svn_log_changed_path2_t *new_changed_path
+ = apr_pcalloc(pool, sizeof(*new_changed_path));
+
+ new_changed_path->text_modified = svn_tristate_unknown;
+ new_changed_path->props_modified = svn_tristate_unknown;
+
+ return new_changed_path;
+}
+
+svn_log_changed_path2_t *
+svn_log_changed_path2_dup(const svn_log_changed_path2_t *changed_path,
+ apr_pool_t *pool)
+{
+ svn_log_changed_path2_t *new_changed_path
+ = apr_palloc(pool, sizeof(*new_changed_path));
+
+ *new_changed_path = *changed_path;
+
+ if (new_changed_path->copyfrom_path)
+ new_changed_path->copyfrom_path =
+ apr_pstrdup(pool, new_changed_path->copyfrom_path);
+
+ return new_changed_path;
+}
+
+svn_dirent_t *
+svn_dirent_create(apr_pool_t *result_pool)
+{
+ svn_dirent_t *new_dirent = apr_pcalloc(result_pool, sizeof(*new_dirent));
+
+ new_dirent->kind = svn_node_unknown;
+ new_dirent->size = SVN_INVALID_FILESIZE;
+ new_dirent->created_rev = SVN_INVALID_REVNUM;
+ new_dirent->time = 0;
+ new_dirent->last_author = NULL;
+
+ return new_dirent;
+}
+
+svn_dirent_t *
+svn_dirent_dup(const svn_dirent_t *dirent,
+ apr_pool_t *pool)
+{
+ svn_dirent_t *new_dirent = apr_palloc(pool, sizeof(*new_dirent));
+
+ *new_dirent = *dirent;
+
+ new_dirent->last_author = apr_pstrdup(pool, dirent->last_author);
+
+ return new_dirent;
+}
+
+svn_log_entry_t *
+svn_log_entry_create(apr_pool_t *pool)
+{
+ svn_log_entry_t *log_entry = apr_pcalloc(pool, sizeof(*log_entry));
+
+ return log_entry;
+}
+
+svn_log_entry_t *
+svn_log_entry_dup(const svn_log_entry_t *log_entry, apr_pool_t *pool)
+{
+ apr_hash_index_t *hi;
+ svn_log_entry_t *new_entry = apr_palloc(pool, sizeof(*new_entry));
+
+ *new_entry = *log_entry;
+
+ if (log_entry->revprops)
+ new_entry->revprops = svn_prop_hash_dup(log_entry->revprops, pool);
+
+ if (log_entry->changed_paths2)
+ {
+ new_entry->changed_paths2 = apr_hash_make(pool);
+
+ for (hi = apr_hash_first(pool, log_entry->changed_paths2);
+ hi; hi = apr_hash_next(hi))
+ {
+ const void *key;
+ void *change;
+
+ apr_hash_this(hi, &key, NULL, &change);
+
+ svn_hash_sets(new_entry->changed_paths2, apr_pstrdup(pool, key),
+ svn_log_changed_path2_dup(change, pool));
+ }
+ }
+
+ /* We can't copy changed_paths by itself without using deprecated code,
+ but we don't have to, as this function was new after the introduction
+ of the changed_paths2 field. */
+ new_entry->changed_paths = new_entry->changed_paths2;
+
+ return new_entry;
+}
+
+svn_location_segment_t *
+svn_location_segment_dup(const svn_location_segment_t *segment,
+ apr_pool_t *pool)
+{
+ svn_location_segment_t *new_segment =
+ apr_palloc(pool, sizeof(*new_segment));
+
+ *new_segment = *segment;
+ if (segment->path)
+ new_segment->path = apr_pstrdup(pool, segment->path);
+ return new_segment;
+}
diff --git a/subversion/libsvn_subr/username_providers.c b/subversion/libsvn_subr/username_providers.c
index 4571d37..a6ef5b3 100644
--- a/subversion/libsvn_subr/username_providers.c
+++ b/subversion/libsvn_subr/username_providers.c
@@ -28,6 +28,7 @@
/*** Includes. ***/
#include <apr_pools.h>
+#include "svn_hash.h"
#include "svn_auth.h"
#include "svn_error.h"
#include "svn_utf.h"
@@ -54,12 +55,10 @@ username_first_creds(void **credentials,
const char *realmstring,
apr_pool_t *pool)
{
- const char *config_dir = apr_hash_get(parameters,
- SVN_AUTH_PARAM_CONFIG_DIR,
- APR_HASH_KEY_STRING);
- const char *username = apr_hash_get(parameters,
- SVN_AUTH_PARAM_DEFAULT_USERNAME,
- APR_HASH_KEY_STRING);
+ const char *config_dir = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_CONFIG_DIR);
+ const char *username = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_DEFAULT_USERNAME);
svn_boolean_t may_save = !! username;
svn_error_t *err;
@@ -78,8 +77,7 @@ username_first_creds(void **credentials,
svn_error_clear(err);
if (! err && creds_hash)
{
- svn_string_t *str = apr_hash_get(creds_hash, AUTHN_USERNAME_KEY,
- APR_HASH_KEY_STRING);
+ svn_string_t *str = svn_hash_gets(creds_hash, AUTHN_USERNAME_KEY);
if (str && str->data)
username = str->data;
}
@@ -123,14 +121,12 @@ username_save_creds(svn_boolean_t *saved,
if (! creds->may_save)
return SVN_NO_ERROR;
- config_dir = apr_hash_get(parameters,
- SVN_AUTH_PARAM_CONFIG_DIR,
- APR_HASH_KEY_STRING);
+ config_dir = svn_hash_gets(parameters, SVN_AUTH_PARAM_CONFIG_DIR);
/* Put the credentials in a hash and save it to disk */
creds_hash = apr_hash_make(pool);
- apr_hash_set(creds_hash, AUTHN_USERNAME_KEY, APR_HASH_KEY_STRING,
- svn_string_create(creds->username, pool));
+ svn_hash_sets(creds_hash, AUTHN_USERNAME_KEY,
+ svn_string_create(creds->username, pool));
err = svn_config_write_auth_data(creds_hash, SVN_AUTH_CRED_USERNAME,
realmstring, config_dir, pool);
svn_error_clear(err);
@@ -200,9 +196,7 @@ prompt_for_username_creds(svn_auth_cred_username_t **cred_p,
/* If we're allowed to check for default usernames, do so. */
if (first_time)
- def_username = apr_hash_get(parameters,
- SVN_AUTH_PARAM_DEFAULT_USERNAME,
- APR_HASH_KEY_STRING);
+ def_username = svn_hash_gets(parameters, SVN_AUTH_PARAM_DEFAULT_USERNAME);
/* If we have defaults, just build the cred here and return it.
*
@@ -238,9 +232,8 @@ username_prompt_first_creds(void **credentials_p,
{
username_prompt_provider_baton_t *pb = provider_baton;
username_prompt_iter_baton_t *ibaton = apr_pcalloc(pool, sizeof(*ibaton));
- const char *no_auth_cache = apr_hash_get(parameters,
- SVN_AUTH_PARAM_NO_AUTH_CACHE,
- APR_HASH_KEY_STRING);
+ const char *no_auth_cache = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_NO_AUTH_CACHE);
SVN_ERR(prompt_for_username_creds
((svn_auth_cred_username_t **) credentials_p, pb,
@@ -266,9 +259,8 @@ username_prompt_next_creds(void **credentials_p,
{
username_prompt_iter_baton_t *ib = iter_baton;
username_prompt_provider_baton_t *pb = provider_baton;
- const char *no_auth_cache = apr_hash_get(parameters,
- SVN_AUTH_PARAM_NO_AUTH_CACHE,
- APR_HASH_KEY_STRING);
+ const char *no_auth_cache = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_NO_AUTH_CACHE);
if ((pb->retry_limit >= 0) && (ib->retries >= pb->retry_limit))
{
diff --git a/subversion/libsvn_subr/utf.c b/subversion/libsvn_subr/utf.c
index 37a5f24..4f9102d 100644
--- a/subversion/libsvn_subr/utf.c
+++ b/subversion/libsvn_subr/utf.c
@@ -23,6 +23,7 @@
+#include <stdlib.h>
#include <string.h>
#include <assert.h>
@@ -31,6 +32,7 @@
#include <apr_xlate.h>
#include <apr_atomic.h>
+#include "svn_hash.h"
#include "svn_string.h"
#include "svn_error.h"
#include "svn_pools.h"
@@ -42,6 +44,7 @@
#include "private/svn_utf_private.h"
#include "private/svn_dep_compat.h"
#include "private/svn_string_private.h"
+#include "private/svn_mutex.h"
@@ -53,9 +56,8 @@ static const char *SVN_UTF_UTON_XLATE_HANDLE = "svn-utf-uton-xlate-handle";
static const char *SVN_APR_UTF8_CHARSET = "UTF-8";
-#if APR_HAS_THREADS
-static apr_thread_mutex_t *xlate_handle_mutex = NULL;
-#endif
+static svn_mutex__t *xlate_handle_mutex = NULL;
+static svn_boolean_t assume_native_charset_is_utf8 = FALSE;
/* The xlate handle cache is a global hash table with linked lists of xlate
* handles. In multi-threaded environments, a thread "borrows" an xlate
@@ -99,10 +101,6 @@ xlate_cleanup(void *arg)
{
/* We set the cache variables to NULL so that translation works in other
cleanup functions, even if it isn't cached then. */
-#if APR_HAS_THREADS
- apr_thread_mutex_destroy(xlate_handle_mutex);
- xlate_handle_mutex = NULL;
-#endif
xlate_handle_hash = NULL;
/* ensure no stale objects get accessed */
@@ -123,32 +121,33 @@ xlate_handle_node_cleanup(void *arg)
}
void
-svn_utf_initialize(apr_pool_t *pool)
+svn_utf_initialize2(svn_boolean_t assume_native_utf8,
+ apr_pool_t *pool)
{
- apr_pool_t *subpool;
-#if APR_HAS_THREADS
- apr_thread_mutex_t *mutex;
-#endif
-
if (!xlate_handle_hash)
{
/* We create our own subpool, which we protect with the mutex.
We can't use the pool passed to us by the caller, since we will
use it for xlate handle allocations, possibly in multiple threads,
and pool allocation is not thread-safe. */
- subpool = svn_pool_create(pool);
-#if APR_HAS_THREADS
- if (apr_thread_mutex_create(&mutex, APR_THREAD_MUTEX_DEFAULT, subpool)
- == APR_SUCCESS)
- xlate_handle_mutex = mutex;
- else
- return;
-#endif
+ apr_pool_t *subpool = svn_pool_create(pool);
+ svn_mutex__t *mutex;
+ svn_error_t *err = svn_mutex__init(&mutex, TRUE, subpool);
+ if (err)
+ {
+ svn_error_clear(err);
+ return;
+ }
+ xlate_handle_mutex = mutex;
xlate_handle_hash = apr_hash_make(subpool);
+
apr_pool_cleanup_register(subpool, NULL, xlate_cleanup,
apr_pool_cleanup_null);
}
+
+ if (!assume_native_charset_is_utf8)
+ assume_native_charset_is_utf8 = assume_native_utf8;
}
/* Return a unique string key based on TOPAGE and FROMPAGE. TOPAGE and
@@ -202,91 +201,18 @@ atomic_swap(void * volatile * mem, void *new_value)
#endif
}
-/* Set *RET to a handle node for converting from FROMPAGE to TOPAGE,
- creating the handle node if it doesn't exist in USERDATA_KEY.
- If a node is not cached and apr_xlate_open() returns APR_EINVAL or
- APR_ENOTIMPL, set (*RET)->handle to NULL. If fail for any other
- reason, return the error.
-
- Allocate *RET and its xlate handle in POOL if svn_utf_initialize()
- hasn't been called or USERDATA_KEY is NULL. Else, allocate them
- in the pool of xlate_handle_hash. */
+/* Set *RET to a newly created handle node for converting from FROMPAGE
+ to TOPAGE, If apr_xlate_open() returns APR_EINVAL or APR_ENOTIMPL, set
+ (*RET)->handle to NULL. If fail for any other reason, return the error.
+ Allocate *RET and its xlate handle in POOL. */
static svn_error_t *
-get_xlate_handle_node(xlate_handle_node_t **ret,
- const char *topage, const char *frompage,
- const char *userdata_key, apr_pool_t *pool)
+xlate_alloc_handle(xlate_handle_node_t **ret,
+ const char *topage, const char *frompage,
+ apr_pool_t *pool)
{
- xlate_handle_node_t **old_node_p;
- xlate_handle_node_t *old_node = NULL;
apr_status_t apr_err;
apr_xlate_t *handle;
- svn_error_t *err = NULL;
-
- /* If we already have a handle, just return it. */
- if (userdata_key)
- {
- if (xlate_handle_hash)
- {
- /* 1st level: global, static items */
- if (userdata_key == SVN_UTF_NTOU_XLATE_HANDLE)
- old_node = atomic_swap(&xlat_ntou_static_handle, NULL);
- else if (userdata_key == SVN_UTF_UTON_XLATE_HANDLE)
- old_node = atomic_swap(&xlat_uton_static_handle, NULL);
-
- if (old_node && old_node->valid)
- {
- *ret = old_node;
- return SVN_NO_ERROR;
- }
-
- /* 2nd level: hash lookup */
-#if APR_HAS_THREADS
- apr_err = apr_thread_mutex_lock(xlate_handle_mutex);
- if (apr_err != APR_SUCCESS)
- return svn_error_create(apr_err, NULL,
- _("Can't lock charset translation mutex"));
-#endif
- old_node_p = apr_hash_get(xlate_handle_hash, userdata_key,
- APR_HASH_KEY_STRING);
- if (old_node_p)
- old_node = *old_node_p;
- if (old_node)
- {
- /* Ensure that the handle is still valid. */
- if (old_node->valid)
- {
- /* Remove from the list. */
- *old_node_p = old_node->next;
- old_node->next = NULL;
-#if APR_HAS_THREADS
- apr_err = apr_thread_mutex_unlock(xlate_handle_mutex);
- if (apr_err != APR_SUCCESS)
- return svn_error_create(apr_err, NULL,
- _("Can't unlock charset "
- "translation mutex"));
-#endif
- *ret = old_node;
- return SVN_NO_ERROR;
- }
- }
- }
- else
- {
- void *p;
- /* We fall back on a per-pool cache instead. */
- apr_pool_userdata_get(&p, userdata_key, pool);
- old_node = p;
- /* Ensure that the handle is still valid. */
- if (old_node && old_node->valid)
- {
- *ret = old_node;
- return SVN_NO_ERROR;
- }
- }
- }
-
- /* Note that we still have the mutex locked (if it is initialized), so we
- can use the global pool for creating the new xlate handle. */
+ const char *name;
/* The error handling doesn't support the following cases, since we don't
use them currently. Catch this here. */
@@ -295,16 +221,14 @@ get_xlate_handle_node(xlate_handle_node_t **ret,
&& (frompage != SVN_APR_LOCALE_CHARSET
|| topage != SVN_APR_LOCALE_CHARSET));
- /* Use the correct pool for creating the handle. */
- if (userdata_key && xlate_handle_hash)
- pool = apr_hash_pool_get(xlate_handle_hash);
-
/* Try to create a handle. */
#if defined(WIN32)
apr_err = svn_subr__win32_xlate_open((win32_xlate_t **)&handle, topage,
frompage, pool);
+ name = "win32-xlate: ";
#else
apr_err = apr_xlate_open(&handle, topage, frompage, pool);
+ name = "APR: ";
#endif
if (APR_STATUS_IS_EINVAL(apr_err) || APR_STATUS_IS_ENOTIMPL(apr_err))
@@ -312,6 +236,8 @@ get_xlate_handle_node(xlate_handle_node_t **ret,
else if (apr_err != APR_SUCCESS)
{
const char *errstr;
+ char apr_strerr[512];
+
/* Can't use svn_error_wrap_apr here because it calls functions in
this file, leading to infinite recursion. */
if (frompage == SVN_APR_LOCALE_CHARSET)
@@ -327,8 +253,13 @@ get_xlate_handle_node(xlate_handle_node_t **ret,
_("Can't create a character converter from "
"'%s' to '%s'"), frompage, topage);
- err = svn_error_create(apr_err, NULL, errstr);
- goto cleanup;
+ /* Just put the error on the stack, since svn_error_create duplicates it
+ later. APR_STRERR will be in the local encoding, not in UTF-8, though.
+ */
+ svn_strerror(apr_err, apr_strerr, sizeof(apr_strerr));
+ return svn_error_createf(SVN_ERR_PLUGIN_LOAD_FAILURE,
+ svn_error_create(apr_err, NULL, apr_strerr),
+ "%s%s", name, errstr);
}
/* Allocate and initialize the node. */
@@ -350,76 +281,174 @@ get_xlate_handle_node(xlate_handle_node_t **ret,
apr_pool_cleanup_register(pool, *ret, xlate_handle_node_cleanup,
apr_pool_cleanup_null);
- cleanup:
- /* Don't need the lock anymore. */
-#if APR_HAS_THREADS
+ return SVN_NO_ERROR;
+}
+
+/* Extend xlate_alloc_handle by using USERDATA_KEY as a key in our
+ global hash map, if available.
+
+ Allocate *RET and its xlate handle in POOL if svn_utf_initialize()
+ hasn't been called or USERDATA_KEY is NULL. Else, allocate them
+ in the pool of xlate_handle_hash.
+
+ Note: this function is not thread-safe. Call get_xlate_handle_node
+ instead. */
+static svn_error_t *
+get_xlate_handle_node_internal(xlate_handle_node_t **ret,
+ const char *topage, const char *frompage,
+ const char *userdata_key, apr_pool_t *pool)
+{
+ /* If we already have a handle, just return it. */
if (userdata_key && xlate_handle_hash)
{
- apr_status_t unlock_err = apr_thread_mutex_unlock(xlate_handle_mutex);
- if (unlock_err != APR_SUCCESS)
- return svn_error_create(unlock_err, NULL,
- _("Can't unlock charset translation mutex"));
+ xlate_handle_node_t *old_node = NULL;
+
+ /* 2nd level: hash lookup */
+ xlate_handle_node_t **old_node_p = svn_hash_gets(xlate_handle_hash,
+ userdata_key);
+ if (old_node_p)
+ old_node = *old_node_p;
+ if (old_node)
+ {
+ /* Ensure that the handle is still valid. */
+ if (old_node->valid)
+ {
+ /* Remove from the list. */
+ *old_node_p = old_node->next;
+ old_node->next = NULL;
+ *ret = old_node;
+ return SVN_NO_ERROR;
+ }
+ }
}
-#endif
- return err;
+ /* Note that we still have the mutex locked (if it is initialized), so we
+ can use the global pool for creating the new xlate handle. */
+
+ /* Use the correct pool for creating the handle. */
+ pool = apr_hash_pool_get(xlate_handle_hash);
+
+ return xlate_alloc_handle(ret, topage, frompage, pool);
+}
+
+/* Set *RET to a handle node for converting from FROMPAGE to TOPAGE,
+ creating the handle node if it doesn't exist in USERDATA_KEY.
+ If a node is not cached and apr_xlate_open() returns APR_EINVAL or
+ APR_ENOTIMPL, set (*RET)->handle to NULL. If fail for any other
+ reason, return the error.
+
+ Allocate *RET and its xlate handle in POOL if svn_utf_initialize()
+ hasn't been called or USERDATA_KEY is NULL. Else, allocate them
+ in the pool of xlate_handle_hash. */
+static svn_error_t *
+get_xlate_handle_node(xlate_handle_node_t **ret,
+ const char *topage, const char *frompage,
+ const char *userdata_key, apr_pool_t *pool)
+{
+ xlate_handle_node_t *old_node = NULL;
+
+ /* If we already have a handle, just return it. */
+ if (userdata_key)
+ {
+ if (xlate_handle_hash)
+ {
+ /* 1st level: global, static items */
+ if (userdata_key == SVN_UTF_NTOU_XLATE_HANDLE)
+ old_node = atomic_swap(&xlat_ntou_static_handle, NULL);
+ else if (userdata_key == SVN_UTF_UTON_XLATE_HANDLE)
+ old_node = atomic_swap(&xlat_uton_static_handle, NULL);
+
+ if (old_node && old_node->valid)
+ {
+ *ret = old_node;
+ return SVN_NO_ERROR;
+ }
+ }
+ else
+ {
+ void *p;
+ /* We fall back on a per-pool cache instead. */
+ apr_pool_userdata_get(&p, userdata_key, pool);
+ old_node = p;
+ /* Ensure that the handle is still valid. */
+ if (old_node && old_node->valid)
+ {
+ *ret = old_node;
+ return SVN_NO_ERROR;
+ }
+
+ return xlate_alloc_handle(ret, topage, frompage, pool);
+ }
+ }
+
+ SVN_MUTEX__WITH_LOCK(xlate_handle_mutex,
+ get_xlate_handle_node_internal(ret,
+ topage,
+ frompage,
+ userdata_key,
+ pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* Put back NODE into the xlate handle cache for use by other calls.
+
+ Note: this function is not thread-safe. Call put_xlate_handle_node
+ instead. */
+static svn_error_t *
+put_xlate_handle_node_internal(xlate_handle_node_t *node,
+ const char *userdata_key)
+{
+ xlate_handle_node_t **node_p = svn_hash_gets(xlate_handle_hash, userdata_key);
+ if (node_p == NULL)
+ {
+ userdata_key = apr_pstrdup(apr_hash_pool_get(xlate_handle_hash),
+ userdata_key);
+ node_p = apr_palloc(apr_hash_pool_get(xlate_handle_hash),
+ sizeof(*node_p));
+ *node_p = NULL;
+ svn_hash_sets(xlate_handle_hash, userdata_key, node_p);
+ }
+ node->next = *node_p;
+ *node_p = node;
+
+ return SVN_NO_ERROR;
}
/* Put back NODE into the xlate handle cache for use by other calls.
If there is no global cache, store the handle in POOL.
- Ignore errors related to locking/unlocking the mutex.
- ### Mutex errors here are very weird. Should we handle them "correctly"
- ### even if that complicates error handling in the routines below? */
-static void
+ Ignore errors related to locking/unlocking the mutex. */
+static svn_error_t *
put_xlate_handle_node(xlate_handle_node_t *node,
const char *userdata_key,
apr_pool_t *pool)
{
assert(node->next == NULL);
if (!userdata_key)
- return;
+ return SVN_NO_ERROR;
/* push previous global node to the hash */
if (xlate_handle_hash)
{
- xlate_handle_node_t **node_p;
-
/* 1st level: global, static items */
if (userdata_key == SVN_UTF_NTOU_XLATE_HANDLE)
node = atomic_swap(&xlat_ntou_static_handle, node);
else if (userdata_key == SVN_UTF_UTON_XLATE_HANDLE)
node = atomic_swap(&xlat_uton_static_handle, node);
if (node == NULL)
- return;
+ return SVN_NO_ERROR;
-#if APR_HAS_THREADS
- if (apr_thread_mutex_lock(xlate_handle_mutex) != APR_SUCCESS)
- SVN_ERR_MALFUNCTION_NO_RETURN();
-#endif
- node_p = apr_hash_get(xlate_handle_hash, userdata_key,
- APR_HASH_KEY_STRING);
- if (node_p == NULL)
- {
- userdata_key = apr_pstrdup(apr_hash_pool_get(xlate_handle_hash),
- userdata_key);
- node_p = apr_palloc(apr_hash_pool_get(xlate_handle_hash),
- sizeof(*node_p));
- *node_p = NULL;
- apr_hash_set(xlate_handle_hash, userdata_key,
- APR_HASH_KEY_STRING, node_p);
- }
- node->next = *node_p;
- *node_p = node;
-#if APR_HAS_THREADS
- if (apr_thread_mutex_unlock(xlate_handle_mutex) != APR_SUCCESS)
- SVN_ERR_MALFUNCTION_NO_RETURN();
-#endif
+ SVN_MUTEX__WITH_LOCK(xlate_handle_mutex,
+ put_xlate_handle_node_internal(node,
+ userdata_key));
}
else
{
/* Store it in the per-pool cache. */
apr_pool_userdata_set(node, userdata_key, apr_pool_cleanup_null, pool);
}
+
+ return SVN_NO_ERROR;
}
/* Return the apr_xlate handle for converting native characters to UTF-8. */
@@ -427,7 +456,9 @@ static svn_error_t *
get_ntou_xlate_handle_node(xlate_handle_node_t **ret, apr_pool_t *pool)
{
return get_xlate_handle_node(ret, SVN_APR_UTF8_CHARSET,
- SVN_APR_LOCALE_CHARSET,
+ assume_native_charset_is_utf8
+ ? SVN_APR_UTF8_CHARSET
+ : SVN_APR_LOCALE_CHARSET,
SVN_UTF_NTOU_XLATE_HANDLE, pool);
}
@@ -440,7 +471,10 @@ get_ntou_xlate_handle_node(xlate_handle_node_t **ret, apr_pool_t *pool)
static svn_error_t *
get_uton_xlate_handle_node(xlate_handle_node_t **ret, apr_pool_t *pool)
{
- return get_xlate_handle_node(ret, SVN_APR_LOCALE_CHARSET,
+ return get_xlate_handle_node(ret,
+ assume_native_charset_is_utf8
+ ? SVN_APR_UTF8_CHARSET
+ : SVN_APR_LOCALE_CHARSET,
SVN_APR_UTF8_CHARSET,
SVN_UTF_UTON_XLATE_HANDLE, pool);
}
@@ -720,9 +754,11 @@ svn_utf_stringbuf_to_utf8(svn_stringbuf_t **dest,
*dest = svn_stringbuf_dup(src, pool);
}
- put_xlate_handle_node(node, SVN_UTF_NTOU_XLATE_HANDLE, pool);
-
- return err;
+ return svn_error_compose_create(err,
+ put_xlate_handle_node
+ (node,
+ SVN_UTF_NTOU_XLATE_HANDLE,
+ pool));
}
@@ -752,9 +788,11 @@ svn_utf_string_to_utf8(const svn_string_t **dest,
*dest = svn_string_dup(src, pool);
}
- put_xlate_handle_node(node, SVN_UTF_NTOU_XLATE_HANDLE, pool);
-
- return err;
+ return svn_error_compose_create(err,
+ put_xlate_handle_node
+ (node,
+ SVN_UTF_NTOU_XLATE_HANDLE,
+ pool));
}
@@ -795,8 +833,11 @@ svn_utf_cstring_to_utf8(const char **dest,
SVN_ERR(get_ntou_xlate_handle_node(&node, pool));
err = convert_cstring(dest, src, node, pool);
- put_xlate_handle_node(node, SVN_UTF_NTOU_XLATE_HANDLE, pool);
- SVN_ERR(err);
+ SVN_ERR(svn_error_compose_create(err,
+ put_xlate_handle_node
+ (node,
+ SVN_UTF_NTOU_XLATE_HANDLE,
+ pool)));
return check_cstring_utf8(*dest, pool);
}
@@ -815,8 +856,12 @@ svn_utf_cstring_to_utf8_ex2(const char **dest,
SVN_ERR(get_xlate_handle_node(&node, SVN_APR_UTF8_CHARSET, frompage,
convset_key, pool));
err = convert_cstring(dest, src, node, pool);
- put_xlate_handle_node(node, convset_key, pool);
- SVN_ERR(err);
+ SVN_ERR(svn_error_compose_create(err,
+ put_xlate_handle_node
+ (node,
+ SVN_UTF_NTOU_XLATE_HANDLE,
+ pool)));
+
return check_cstring_utf8(*dest, pool);
}
@@ -855,7 +900,9 @@ svn_utf_stringbuf_from_utf8(svn_stringbuf_t **dest,
*dest = svn_stringbuf_dup(src, pool);
}
- put_xlate_handle_node(node, SVN_UTF_UTON_XLATE_HANDLE, pool);
+ err = svn_error_compose_create(
+ err,
+ put_xlate_handle_node(node, SVN_UTF_UTON_XLATE_HANDLE, pool));
return err;
}
@@ -888,7 +935,9 @@ svn_utf_string_from_utf8(const svn_string_t **dest,
*dest = svn_string_dup(src, pool);
}
- put_xlate_handle_node(node, SVN_UTF_UTON_XLATE_HANDLE, pool);
+ err = svn_error_compose_create(
+ err,
+ put_xlate_handle_node(node, SVN_UTF_UTON_XLATE_HANDLE, pool));
return err;
}
@@ -902,11 +951,13 @@ svn_utf_cstring_from_utf8(const char **dest,
xlate_handle_node_t *node;
svn_error_t *err;
- SVN_ERR(check_utf8(src, strlen(src), pool));
+ SVN_ERR(check_cstring_utf8(src, pool));
SVN_ERR(get_uton_xlate_handle_node(&node, pool));
err = convert_cstring(dest, src, node, pool);
- put_xlate_handle_node(node, SVN_UTF_UTON_XLATE_HANDLE, pool);
+ err = svn_error_compose_create(
+ err,
+ put_xlate_handle_node(node, SVN_UTF_UTON_XLATE_HANDLE, pool));
return err;
}
@@ -923,12 +974,14 @@ svn_utf_cstring_from_utf8_ex2(const char **dest,
const char *convset_key = get_xlate_key(topage, SVN_APR_UTF8_CHARSET,
pool);
- SVN_ERR(check_utf8(src, strlen(src), pool));
+ SVN_ERR(check_cstring_utf8(src, pool));
SVN_ERR(get_xlate_handle_node(&node, topage, SVN_APR_UTF8_CHARSET,
convset_key, pool));
err = convert_cstring(dest, src, node, pool);
- put_xlate_handle_node(node, convset_key, pool);
+ err = svn_error_compose_create(
+ err,
+ put_xlate_handle_node(node, convset_key, pool));
return err;
}
@@ -1025,7 +1078,9 @@ svn_utf_cstring_from_utf8_string(const char **dest,
*dest = apr_pstrmemdup(pool, src->data, src->len);
}
- put_xlate_handle_node(node, SVN_UTF_UTON_XLATE_HANDLE, pool);
+ err = svn_error_compose_create(
+ err,
+ put_xlate_handle_node(node, SVN_UTF_UTON_XLATE_HANDLE, pool));
return err;
}
diff --git a/subversion/libsvn_subr/utf_validate.c b/subversion/libsvn_subr/utf_validate.c
index 6f00f73..8311fd7 100644
--- a/subversion/libsvn_subr/utf_validate.c
+++ b/subversion/libsvn_subr/utf_validate.c
@@ -57,6 +57,8 @@
*/
#include "private/svn_utf_private.h"
+#include "private/svn_eol_private.h"
+#include "private/svn_dep_compat.h"
/* Lookup table to categorise each octet in the string. */
static const char octet_category[256] = {
@@ -249,12 +251,100 @@ static const char machine [9][14] = {
FSM_ERROR}, /* 0xf5-0xff */
};
+/* Scan MAX_LEN bytes in *DATA for chars that are not in the octet
+ * category 0 (FSM_START). Return the position of the first such char
+ * or DATA + MAX_LEN if all were cat 0.
+ */
+static const char *
+first_non_fsm_start_char(const char *data, apr_size_t max_len)
+{
+#if !SVN_UNALIGNED_ACCESS_IS_OK
+
+ /* On some systems, we need to make sure that buf is properly aligned
+ * for chunky data access.
+ */
+ if ((apr_uintptr_t)data & (sizeof(apr_uintptr_t)-1))
+ {
+ apr_size_t len = (~(apr_uintptr_t)data) & (sizeof(apr_uintptr_t)-1);
+ if (len > max_len)
+ len = max_len;
+ max_len -= len;
+
+ for (; len > 0; ++data, --len)
+ if (*data < 0 || *data >= 0x80)
+ return data;
+ }
+
+#endif
+
+ /* Scan the input one machine word at a time. */
+ for (; max_len > sizeof(apr_uintptr_t)
+ ; data += sizeof(apr_uintptr_t), max_len -= sizeof(apr_uintptr_t))
+ if (*(const apr_uintptr_t *)data & SVN__BIT_7_SET)
+ break;
+
+ /* The remaining odd bytes will be examined the naive way: */
+ for (; max_len > 0; ++data, --max_len)
+ if (*data < 0 || *data >= 0x80)
+ break;
+
+ return data;
+}
+
+/* Scan the C string in *DATA for chars that are not in the octet
+ * category 0 (FSM_START). Return the position of either the such
+ * char or of the terminating NUL.
+ */
+static const char *
+first_non_fsm_start_char_cstring(const char *data)
+{
+ /* We need to make sure that BUF is properly aligned for chunky data
+ * access because we don't know the string's length. Unaligned chunk
+ * read access beyond the NUL terminator could therefore result in a
+ * segfault.
+ */
+ for (; (apr_uintptr_t)data & (sizeof(apr_uintptr_t)-1); ++data)
+ if (*data <= 0 || *data >= 0x80)
+ return data;
+
+ /* Scan the input one machine word at a time. */
+#ifndef SVN_UTF_NO_UNINITIALISED_ACCESS
+ /* This may read allocated but initialised bytes beyond the
+ terminating null. Any such bytes are always readable and this
+ code operates correctly whatever the uninitialised values happen
+ to be. However memory checking tools such as valgrind and GCC
+ 4.8's address santitizer will object so this bit of code can be
+ disabled at compile time. */
+ for (; ; data += sizeof(apr_uintptr_t))
+ {
+ /* Check for non-ASCII chars: */
+ apr_uintptr_t chunk = *(const apr_uintptr_t *)data;
+ if (chunk & SVN__BIT_7_SET)
+ break;
+
+ /* This is the well-known strlen test: */
+ chunk |= (chunk & SVN__LOWER_7BITS_SET) + SVN__LOWER_7BITS_SET;
+ if ((chunk & SVN__BIT_7_SET) != SVN__BIT_7_SET)
+ break;
+ }
+#endif
+
+ /* The remaining odd bytes will be examined the naive way: */
+ for (; ; ++data)
+ if (*data <= 0 || *data >= 0x80)
+ break;
+
+ return data;
+}
const char *
svn_utf__last_valid(const char *data, apr_size_t len)
{
- const char *start = data, *end = data + len;
+ const char *start = first_non_fsm_start_char(data, len);
+ const char *end = data + len;
int state = FSM_START;
+
+ data = start;
while (data < end)
{
unsigned char octet = *data++;
@@ -270,6 +360,12 @@ svn_boolean_t
svn_utf__cstring_is_valid(const char *data)
{
int state = FSM_START;
+
+ if (!data)
+ return FALSE;
+
+ data = first_non_fsm_start_char_cstring(data);
+
while (*data)
{
unsigned char octet = *data++;
@@ -284,6 +380,12 @@ svn_utf__is_valid(const char *data, apr_size_t len)
{
const char *end = data + len;
int state = FSM_START;
+
+ if (!data)
+ return FALSE;
+
+ data = first_non_fsm_start_char(data, len);
+
while (data < end)
{
unsigned char octet = *data++;
@@ -296,8 +398,11 @@ svn_utf__is_valid(const char *data, apr_size_t len)
const char *
svn_utf__last_valid2(const char *data, apr_size_t len)
{
- const char *start = data, *end = data + len;
+ const char *start = first_non_fsm_start_char(data, len);
+ const char *end = data + len;
int state = FSM_START;
+
+ data = start;
while (data < end)
{
unsigned char octet = *data++;
diff --git a/subversion/libsvn_subr/utf_width.c b/subversion/libsvn_subr/utf_width.c
new file mode 100644
index 0000000..3adff4c
--- /dev/null
+++ b/subversion/libsvn_subr/utf_width.c
@@ -0,0 +1,283 @@
+/*
+ * This is an implementation of wcwidth() and wcswidth() (defined in
+ * IEEE Std 1002.1-2001) for Unicode.
+ *
+ * http://www.opengroup.org/onlinepubs/007904975/functions/wcwidth.html
+ * http://www.opengroup.org/onlinepubs/007904975/functions/wcswidth.html
+ *
+ * In fixed-width output devices, Latin characters all occupy a single
+ * "cell" position of equal width, whereas ideographic CJK characters
+ * occupy two such cells. Interoperability between terminal-line
+ * applications and (teletype-style) character terminals using the
+ * UTF-8 encoding requires agreement on which character should advance
+ * the cursor by how many cell positions. No established formal
+ * standards exist at present on which Unicode character shall occupy
+ * how many cell positions on character terminals. These routines are
+ * a first attempt of defining such behavior based on simple rules
+ * applied to data provided by the Unicode Consortium.
+ *
+ * For some graphical characters, the Unicode standard explicitly
+ * defines a character-cell width via the definition of the East Asian
+ * FullWidth (F), Wide (W), Half-width (H), and Narrow (Na) classes.
+ * In all these cases, there is no ambiguity about which width a
+ * terminal shall use. For characters in the East Asian Ambiguous (A)
+ * class, the width choice depends purely on a preference of backward
+ * compatibility with either historic CJK or Western practice.
+ * Choosing single-width for these characters is easy to justify as
+ * the appropriate long-term solution, as the CJK practice of
+ * displaying these characters as double-width comes from historic
+ * implementation simplicity (8-bit encoded characters were displayed
+ * single-width and 16-bit ones double-width, even for Greek,
+ * Cyrillic, etc.) and not any typographic considerations.
+ *
+ * Much less clear is the choice of width for the Not East Asian
+ * (Neutral) class. Existing practice does not dictate a width for any
+ * of these characters. It would nevertheless make sense
+ * typographically to allocate two character cells to characters such
+ * as for instance EM SPACE or VOLUME INTEGRAL, which cannot be
+ * represented adequately with a single-width glyph. The following
+ * routines at present merely assign a single-cell width to all
+ * neutral characters, in the interest of simplicity. This is not
+ * entirely satisfactory and should be reconsidered before
+ * establishing a formal standard in this area. At the moment, the
+ * decision which Not East Asian (Neutral) characters should be
+ * represented by double-width glyphs cannot yet be answered by
+ * applying a simple rule from the Unicode database content. Setting
+ * up a proper standard for the behavior of UTF-8 character terminals
+ * will require a careful analysis not only of each Unicode character,
+ * but also of each presentation form, something the author of these
+ * routines has avoided to do so far.
+ *
+ * http://www.unicode.org/unicode/reports/tr11/
+ *
+ * Markus Kuhn -- 2007-05-26 (Unicode 5.0)
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * for any purpose and without fee is hereby granted. The author
+ * disclaims all warranties with regard to this software.
+ *
+ * Latest version: http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c
+ */
+
+#include <apr_lib.h>
+
+#include "svn_utf.h"
+#include "private/svn_utf_private.h"
+
+#include "svn_private_config.h"
+
+struct interval {
+ apr_uint32_t first;
+ apr_uint32_t last;
+};
+
+/* auxiliary function for binary search in interval table */
+static int
+bisearch(apr_uint32_t ucs, const struct interval *table, apr_uint32_t max)
+{
+ apr_uint32_t min = 0;
+ apr_uint32_t mid;
+
+ if (ucs < table[0].first || ucs > table[max].last)
+ return 0;
+ while (max >= min) {
+ mid = (min + max) / 2;
+ if (ucs > table[mid].last)
+ min = mid + 1;
+ else if (ucs < table[mid].first)
+ max = mid - 1; /* this is safe because ucs >= table[0].first */
+ else
+ return 1;
+ }
+
+ return 0;
+}
+
+
+/* The following two functions define the column width of an ISO 10646
+ * character as follows:
+ *
+ * - The null character (U+0000) has a column width of 0.
+ *
+ * - Other C0/C1 control characters and DEL will lead to a return
+ * value of -1.
+ *
+ * - Non-spacing and enclosing combining characters (general
+ * category code Mn or Me in the Unicode database) have a
+ * column width of 0.
+ *
+ * - SOFT HYPHEN (U+00AD) has a column width of 1.
+ *
+ * - Other format characters (general category code Cf in the Unicode
+ * database) and ZERO WIDTH SPACE (U+200B) have a column width of 0.
+ *
+ * - Hangul Jamo medial vowels and final consonants (U+1160-U+11FF)
+ * have a column width of 0.
+ *
+ * - Spacing characters in the East Asian Wide (W) or East Asian
+ * Full-width (F) category as defined in Unicode Technical
+ * Report #11 have a column width of 2.
+ *
+ * - All remaining characters (including all printable
+ * ISO 8859-1 and WGL4 characters, Unicode control characters,
+ * etc.) have a column width of 1.
+ *
+ * This implementation assumes that wchar_t characters are encoded
+ * in ISO 10646.
+ */
+
+static int
+mk_wcwidth(apr_uint32_t ucs)
+{
+ /* sorted list of non-overlapping intervals of non-spacing characters */
+ /* generated by "uniset +cat=Me +cat=Mn +cat=Cf -00AD +1160-11FF +200B c" */
+ static const struct interval combining[] = {
+ { 0x0300, 0x036F }, { 0x0483, 0x0486 }, { 0x0488, 0x0489 },
+ { 0x0591, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 },
+ { 0x05C4, 0x05C5 }, { 0x05C7, 0x05C7 }, { 0x0600, 0x0603 },
+ { 0x0610, 0x0615 }, { 0x064B, 0x065E }, { 0x0670, 0x0670 },
+ { 0x06D6, 0x06E4 }, { 0x06E7, 0x06E8 }, { 0x06EA, 0x06ED },
+ { 0x070F, 0x070F }, { 0x0711, 0x0711 }, { 0x0730, 0x074A },
+ { 0x07A6, 0x07B0 }, { 0x07EB, 0x07F3 }, { 0x0901, 0x0902 },
+ { 0x093C, 0x093C }, { 0x0941, 0x0948 }, { 0x094D, 0x094D },
+ { 0x0951, 0x0954 }, { 0x0962, 0x0963 }, { 0x0981, 0x0981 },
+ { 0x09BC, 0x09BC }, { 0x09C1, 0x09C4 }, { 0x09CD, 0x09CD },
+ { 0x09E2, 0x09E3 }, { 0x0A01, 0x0A02 }, { 0x0A3C, 0x0A3C },
+ { 0x0A41, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D },
+ { 0x0A70, 0x0A71 }, { 0x0A81, 0x0A82 }, { 0x0ABC, 0x0ABC },
+ { 0x0AC1, 0x0AC5 }, { 0x0AC7, 0x0AC8 }, { 0x0ACD, 0x0ACD },
+ { 0x0AE2, 0x0AE3 }, { 0x0B01, 0x0B01 }, { 0x0B3C, 0x0B3C },
+ { 0x0B3F, 0x0B3F }, { 0x0B41, 0x0B43 }, { 0x0B4D, 0x0B4D },
+ { 0x0B56, 0x0B56 }, { 0x0B82, 0x0B82 }, { 0x0BC0, 0x0BC0 },
+ { 0x0BCD, 0x0BCD }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 },
+ { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0CBC, 0x0CBC },
+ { 0x0CBF, 0x0CBF }, { 0x0CC6, 0x0CC6 }, { 0x0CCC, 0x0CCD },
+ { 0x0CE2, 0x0CE3 }, { 0x0D41, 0x0D43 }, { 0x0D4D, 0x0D4D },
+ { 0x0DCA, 0x0DCA }, { 0x0DD2, 0x0DD4 }, { 0x0DD6, 0x0DD6 },
+ { 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E },
+ { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EB9 }, { 0x0EBB, 0x0EBC },
+ { 0x0EC8, 0x0ECD }, { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 },
+ { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, { 0x0F71, 0x0F7E },
+ { 0x0F80, 0x0F84 }, { 0x0F86, 0x0F87 }, { 0x0F90, 0x0F97 },
+ { 0x0F99, 0x0FBC }, { 0x0FC6, 0x0FC6 }, { 0x102D, 0x1030 },
+ { 0x1032, 0x1032 }, { 0x1036, 0x1037 }, { 0x1039, 0x1039 },
+ { 0x1058, 0x1059 }, { 0x1160, 0x11FF }, { 0x135F, 0x135F },
+ { 0x1712, 0x1714 }, { 0x1732, 0x1734 }, { 0x1752, 0x1753 },
+ { 0x1772, 0x1773 }, { 0x17B4, 0x17B5 }, { 0x17B7, 0x17BD },
+ { 0x17C6, 0x17C6 }, { 0x17C9, 0x17D3 }, { 0x17DD, 0x17DD },
+ { 0x180B, 0x180D }, { 0x18A9, 0x18A9 }, { 0x1920, 0x1922 },
+ { 0x1927, 0x1928 }, { 0x1932, 0x1932 }, { 0x1939, 0x193B },
+ { 0x1A17, 0x1A18 }, { 0x1B00, 0x1B03 }, { 0x1B34, 0x1B34 },
+ { 0x1B36, 0x1B3A }, { 0x1B3C, 0x1B3C }, { 0x1B42, 0x1B42 },
+ { 0x1B6B, 0x1B73 }, { 0x1DC0, 0x1DCA }, { 0x1DFE, 0x1DFF },
+ { 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x2063 },
+ { 0x206A, 0x206F }, { 0x20D0, 0x20EF }, { 0x302A, 0x302F },
+ { 0x3099, 0x309A }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B },
+ { 0xA825, 0xA826 }, { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F },
+ { 0xFE20, 0xFE23 }, { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB },
+ { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F },
+ { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x1D167, 0x1D169 },
+ { 0x1D173, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD },
+ { 0x1D242, 0x1D244 }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F },
+ { 0xE0100, 0xE01EF }
+ };
+
+ /* test for 8-bit control characters */
+ if (ucs == 0)
+ return 0;
+ if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0))
+ return -1;
+
+ /* binary search in table of non-spacing characters */
+ if (bisearch(ucs, combining,
+ sizeof(combining) / sizeof(struct interval) - 1))
+ return 0;
+
+ /* if we arrive here, ucs is not a combining or C0/C1 control character */
+
+ return 1 +
+ (ucs >= 0x1100 &&
+ (ucs <= 0x115f || /* Hangul Jamo init. consonants */
+ ucs == 0x2329 || ucs == 0x232a ||
+ (ucs >= 0x2e80 && ucs <= 0xa4cf &&
+ ucs != 0x303f) || /* CJK ... Yi */
+ (ucs >= 0xac00 && ucs <= 0xd7a3) || /* Hangul Syllables */
+ (ucs >= 0xf900 && ucs <= 0xfaff) || /* CJK Compatibility Ideographs */
+ (ucs >= 0xfe10 && ucs <= 0xfe19) || /* Vertical forms */
+ (ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */
+ (ucs >= 0xff00 && ucs <= 0xff60) || /* Fullwidth Forms */
+ (ucs >= 0xffe0 && ucs <= 0xffe6) ||
+ (ucs >= 0x20000 && ucs <= 0x2fffd) ||
+ (ucs >= 0x30000 && ucs <= 0x3fffd)));
+}
+
+int
+svn_utf_cstring_utf8_width(const char *cstr)
+{
+ int width = 0;
+
+ if (*cstr == '\0')
+ return 0;
+
+ /* Ensure the conversion below doesn't fail because of encoding errors. */
+ if (!svn_utf__cstring_is_valid(cstr))
+ return -1;
+
+ /* Convert the UTF-8 string to UTF-32 (UCS4) which is the format
+ * mk_wcwidth() expects, and get the width of each character.
+ * We don't need much error checking since the input is valid UTF-8. */
+ while (*cstr)
+ {
+ apr_uint32_t ucs;
+ int nbytes;
+ int lead_mask;
+ int w;
+ int i;
+
+ if ((*cstr & 0x80) == 0)
+ {
+ nbytes = 1;
+ lead_mask = 0x7f;
+ }
+ else if ((*cstr & 0xe0) == 0xc0)
+ {
+ nbytes = 2;
+ lead_mask = 0x1f;
+ }
+ else if ((*cstr & 0xf0) == 0xe0)
+ {
+ nbytes = 3;
+ lead_mask = 0x0f;
+ }
+ else if ((*cstr & 0xf8) == 0xf0)
+ {
+ nbytes = 4;
+ lead_mask = 0x07;
+ }
+ else
+ {
+ /* RFC 3629 restricts UTF-8 to max 4 bytes per character. */
+ return -1;
+ }
+
+ /* Parse character data from leading byte. */
+ ucs = (apr_uint32_t)(*cstr & lead_mask);
+
+ /* Parse character data from continuation bytes. */
+ for (i = 1; i < nbytes; i++)
+ {
+ ucs <<= 6;
+ ucs |= (cstr[i] & 0x3f);
+ }
+
+ cstr += nbytes;
+
+ /* Determine the width of this character and add it to the total. */
+ w = mk_wcwidth(ucs);
+ if (w == -1)
+ return -1;
+ width += w;
+ }
+
+ return width;
+}
diff --git a/subversion/libsvn_subr/version.c b/subversion/libsvn_subr/version.c
index 78229d3..0859489 100644
--- a/subversion/libsvn_subr/version.c
+++ b/subversion/libsvn_subr/version.c
@@ -26,7 +26,9 @@
#include "svn_error.h"
#include "svn_version.h"
+#include "sysinfo.h"
#include "svn_private_config.h"
+#include "private/svn_subr_private.h"
const svn_version_t *
svn_subr_version(void)
@@ -73,8 +75,10 @@ svn_boolean_t svn_ver_equal(const svn_version_t *my_version,
svn_error_t *
-svn_ver_check_list(const svn_version_t *my_version,
- const svn_version_checklist_t *checklist)
+svn_ver__check_list2(const svn_version_t *my_version,
+ const svn_version_checklist_t *checklist,
+ svn_boolean_t (*comparator)(const svn_version_t *,
+ const svn_version_t *))
{
svn_error_t *err = SVN_NO_ERROR;
int i;
@@ -82,12 +86,17 @@ svn_ver_check_list(const svn_version_t *my_version,
for (i = 0; checklist[i].label != NULL; ++i)
{
const svn_version_t *lib_version = checklist[i].version_query();
- if (!svn_ver_compatible(my_version, lib_version))
+ if (!comparator(my_version, lib_version))
err = svn_error_createf(SVN_ERR_VERSION_MISMATCH, err,
- _("Version mismatch in '%s':"
+ _("Version mismatch in '%s'%s:"
" found %d.%d.%d%s,"
" expected %d.%d.%d%s"),
checklist[i].label,
+ comparator == svn_ver_equal
+ ? _(" (expecting equality)")
+ : comparator == svn_ver_compatible
+ ? _(" (expecting compatibility)")
+ : "",
lib_version->major, lib_version->minor,
lib_version->patch, lib_version->tag,
my_version->major, my_version->minor,
@@ -96,3 +105,194 @@ svn_ver_check_list(const svn_version_t *my_version,
return err;
}
+
+
+struct svn_version_extended_t
+{
+ const char *build_date; /* Compilation date */
+ const char *build_time; /* Compilation time */
+ const char *build_host; /* Build canonical host name */
+ const char *copyright; /* Copyright notice (localized) */
+ const char *runtime_host; /* Runtime canonical host name */
+ const char *runtime_osname; /* Running OS release name */
+
+ /* Array of svn_version_ext_linked_lib_t describing dependent
+ libraries. */
+ const apr_array_header_t *linked_libs;
+
+ /* Array of svn_version_ext_loaded_lib_t describing loaded shared
+ libraries. */
+ const apr_array_header_t *loaded_libs;
+};
+
+
+const svn_version_extended_t *
+svn_version_extended(svn_boolean_t verbose,
+ apr_pool_t *pool)
+{
+ svn_version_extended_t *info = apr_pcalloc(pool, sizeof(*info));
+
+ info->build_date = __DATE__;
+ info->build_time = __TIME__;
+ info->build_host = SVN_BUILD_HOST;
+ info->copyright = apr_pstrdup
+ (pool, _("Copyright (C) 2014 The Apache Software Foundation.\n"
+ "This software consists of contributions made by many people;\n"
+ "see the NOTICE file for more information.\n"
+ "Subversion is open source software, see "
+ "http://subversion.apache.org/\n"));
+
+ if (verbose)
+ {
+ info->runtime_host = svn_sysinfo__canonical_host(pool);
+ info->runtime_osname = svn_sysinfo__release_name(pool);
+ info->linked_libs = svn_sysinfo__linked_libs(pool);
+ info->loaded_libs = svn_sysinfo__loaded_libs(pool);
+ }
+
+ return info;
+}
+
+
+const char *
+svn_version_ext_build_date(const svn_version_extended_t *ext_info)
+{
+ return ext_info->build_date;
+}
+
+const char *
+svn_version_ext_build_time(const svn_version_extended_t *ext_info)
+{
+ return ext_info->build_time;
+}
+
+const char *
+svn_version_ext_build_host(const svn_version_extended_t *ext_info)
+{
+ return ext_info->build_host;
+}
+
+const char *
+svn_version_ext_copyright(const svn_version_extended_t *ext_info)
+{
+ return ext_info->copyright;
+}
+
+const char *
+svn_version_ext_runtime_host(const svn_version_extended_t *ext_info)
+{
+ return ext_info->runtime_host;
+}
+
+const char *
+svn_version_ext_runtime_osname(const svn_version_extended_t *ext_info)
+{
+ return ext_info->runtime_osname;
+}
+
+const apr_array_header_t *
+svn_version_ext_linked_libs(const svn_version_extended_t *ext_info)
+{
+ return ext_info->linked_libs;
+}
+
+const apr_array_header_t *
+svn_version_ext_loaded_libs(const svn_version_extended_t *ext_info)
+{
+ return ext_info->loaded_libs;
+}
+
+svn_error_t *
+svn_version__parse_version_string(svn_version_t **version_p,
+ const char *version_string,
+ apr_pool_t *result_pool)
+{
+ svn_error_t *err;
+ svn_version_t *version;
+ apr_array_header_t *pieces =
+ svn_cstring_split(version_string, ".", FALSE, result_pool);
+
+ if ((pieces->nelts < 2) || (pieces->nelts > 3))
+ return svn_error_createf(SVN_ERR_MALFORMED_VERSION_STRING, NULL,
+ _("Failed to parse version number string '%s'"),
+ version_string);
+
+ version = apr_pcalloc(result_pool, sizeof(*version));
+ version->tag = "";
+
+ /* Parse the major and minor integers strictly. */
+ err = svn_cstring_atoi(&(version->major),
+ APR_ARRAY_IDX(pieces, 0, const char *));
+ if (err)
+ return svn_error_createf(SVN_ERR_MALFORMED_VERSION_STRING, err,
+ _("Failed to parse version number string '%s'"),
+ version_string);
+ err = svn_cstring_atoi(&(version->minor),
+ APR_ARRAY_IDX(pieces, 1, const char *));
+ if (err)
+ return svn_error_createf(SVN_ERR_MALFORMED_VERSION_STRING, err,
+ _("Failed to parse version number string '%s'"),
+ version_string);
+
+ /* If there's a third component, we'll parse it, too. But we don't
+ require that it be present. */
+ if (pieces->nelts == 3)
+ {
+ const char *piece = APR_ARRAY_IDX(pieces, 2, const char *);
+ char *hyphen = strchr(piece, '-');
+ if (hyphen)
+ {
+ version->tag = apr_pstrdup(result_pool, hyphen + 1);
+ *hyphen = '\0';
+ }
+ err = svn_cstring_atoi(&(version->patch), piece);
+ if (err)
+ return svn_error_createf(SVN_ERR_MALFORMED_VERSION_STRING, err,
+ _("Failed to parse version number string '%s'"
+ ),
+ version_string);
+ }
+
+ if (version->major < 0 || version->minor < 0 || version->patch < 0)
+ return svn_error_createf(SVN_ERR_MALFORMED_VERSION_STRING, err,
+ _("Failed to parse version number string '%s'"),
+ version_string);
+
+ *version_p = version;
+ return SVN_NO_ERROR;
+}
+
+
+svn_boolean_t
+svn_version__at_least(svn_version_t *version,
+ int major,
+ int minor,
+ int patch)
+{
+ /* Compare major versions. */
+ if (version->major < major)
+ return FALSE;
+ if (version->major > major)
+ return TRUE;
+
+ /* Major versions are the same. Compare minor versions. */
+ if (version->minor < minor)
+ return FALSE;
+ if (version->minor > minor)
+ return TRUE;
+
+ /* Major and minor versions are the same. Compare patch
+ versions. */
+ if (version->patch < patch)
+ return FALSE;
+ if (version->patch > patch)
+ return TRUE;
+
+ /* Major, minor, and patch versions are identical matches. But tags
+ in our schema are always used for versions not yet quite at the
+ given patch level. */
+ if (version->tag && version->tag[0])
+ return FALSE;
+
+ return TRUE;
+}
diff --git a/subversion/libsvn_subr/win32_crashrpt.c b/subversion/libsvn_subr/win32_crashrpt.c
index d91cd06..4b665c1 100644
--- a/subversion/libsvn_subr/win32_crashrpt.c
+++ b/subversion/libsvn_subr/win32_crashrpt.c
@@ -21,6 +21,9 @@
* ====================================================================
*/
+/* prevent "empty compilation unit" warning on e.g. UNIX */
+typedef int win32_crashrpt__dummy;
+
#ifdef WIN32
#ifdef SVN_USE_WIN32_CRASHHANDLER
@@ -30,6 +33,7 @@
#include <direct.h>
#include <stdio.h>
#include <stdlib.h>
+#include <time.h>
#include "svn_version.h"
@@ -46,6 +50,12 @@ HANDLE dbghelp_dll = INVALID_HANDLE_VALUE;
#define LOGFILE_PREFIX "svn-crash-log"
+#if defined(_M_IX86)
+#define FORMAT_PTR "0x%08x"
+#elif defined(_M_X64)
+#define FORMAT_PTR "0x%016I64x"
+#endif
+
/*** Code. ***/
/* Convert a wide-character string to utf-8. This function will create a buffer
@@ -158,7 +168,7 @@ write_module_info_callback(void *data,
MINIDUMP_MODULE_CALLBACK module = callback_input->Module;
char *buf = convert_wbcs_to_utf8(module.FullPath);
- fprintf(log_file, "0x%08x", module.BaseOfImage);
+ fprintf(log_file, FORMAT_PTR, module.BaseOfImage);
fprintf(log_file, " %s", buf);
free(buf);
@@ -257,10 +267,10 @@ format_basic_type(char *buf, DWORD basic_type, DWORD64 length, void *address)
switch(length)
{
case 1:
- sprintf(buf, "%x", *(unsigned char *)address);
+ sprintf(buf, "0x%02x", (int)*(unsigned char *)address);
break;
case 2:
- sprintf(buf, "%x", *(unsigned short *)address);
+ sprintf(buf, "0x%04x", (int)*(unsigned short *)address);
break;
case 4:
switch(basic_type)
@@ -268,9 +278,9 @@ format_basic_type(char *buf, DWORD basic_type, DWORD64 length, void *address)
case 2: /* btChar */
{
if (!IsBadStringPtr(*(PSTR*)address, 32))
- sprintf(buf, "\"%.31s\"", *(unsigned long *)address);
+ sprintf(buf, "\"%.31s\"", *(const char **)address);
else
- sprintf(buf, "%x", *(unsigned long *)address);
+ sprintf(buf, FORMAT_PTR, *(DWORD_PTR *)address);
}
case 6: /* btInt */
sprintf(buf, "%d", *(int *)address);
@@ -279,7 +289,7 @@ format_basic_type(char *buf, DWORD basic_type, DWORD64 length, void *address)
sprintf(buf, "%f", *(float *)address);
break;
default:
- sprintf(buf, "%x", *(unsigned long *)address);
+ sprintf(buf, FORMAT_PTR, *(DWORD_PTR *)address);
break;
}
break;
@@ -287,7 +297,11 @@ format_basic_type(char *buf, DWORD basic_type, DWORD64 length, void *address)
if (basic_type == 8) /* btFloat */
sprintf(buf, "%lf", *(double *)address);
else
- sprintf(buf, "%I64X", *(unsigned __int64 *)address);
+ sprintf(buf, "0x%016I64X", *(unsigned __int64 *)address);
+ break;
+ default:
+ sprintf(buf, "[unhandled type 0x%08x of length " FORMAT_PTR "]",
+ basic_type, length);
break;
}
}
@@ -297,7 +311,7 @@ format_basic_type(char *buf, DWORD basic_type, DWORD64 length, void *address)
static void
format_value(char *value_str, DWORD64 mod_base, DWORD type, void *value_addr)
{
- DWORD tag;
+ DWORD tag = 0;
int ptr = 0;
HANDLE proc = GetCurrentProcess();
@@ -325,17 +339,19 @@ format_value(char *value_str, DWORD64 mod_base, DWORD type, void *value_addr)
LocalFree(type_name_wbcs);
if (ptr == 0)
- sprintf(value_str, "(%s) 0x%08x",
- type_name, (DWORD *)value_addr);
+ sprintf(value_str, "(%s) " FORMAT_PTR,
+ type_name, (DWORD_PTR *)value_addr);
else if (ptr == 1)
- sprintf(value_str, "(%s *) 0x%08x",
- type_name, *(DWORD *)value_addr);
+ sprintf(value_str, "(%s *) " FORMAT_PTR,
+ type_name, *(DWORD_PTR *)value_addr);
else
- sprintf(value_str, "(%s **) 0x%08x",
- type_name, (DWORD *)value_addr);
+ sprintf(value_str, "(%s **) " FORMAT_PTR,
+ type_name, *(DWORD_PTR *)value_addr);
free(type_name);
}
+ else
+ sprintf(value_str, "[no symbol tag]");
}
break;
case 16: /* SymTagBaseType */
@@ -347,29 +363,28 @@ format_value(char *value_str, DWORD64 mod_base, DWORD type, void *value_addr)
/* print a char * as a string */
if (ptr == 1 && length == 1)
{
- sprintf(value_str, "0x%08x \"%s\"",
- *(DWORD *)value_addr, (char *)*(DWORD*)value_addr);
- break;
+ sprintf(value_str, FORMAT_PTR " \"%s\"",
+ *(DWORD_PTR *)value_addr, *(const char **)value_addr);
}
- if (ptr >= 1)
+ else if (ptr >= 1)
{
- sprintf(value_str, "0x%08x", *(DWORD *)value_addr);
- break;
+ sprintf(value_str, FORMAT_PTR, *(DWORD_PTR *)value_addr);
}
- if (SymGetTypeInfo_(proc, mod_base, type, TI_GET_BASETYPE, &bt))
+ else if (SymGetTypeInfo_(proc, mod_base, type, TI_GET_BASETYPE, &bt))
{
format_basic_type(value_str, bt, length, value_addr);
- break;
}
}
break;
case 12: /* SymTagEnum */
- sprintf(value_str, "%d", *(DWORD *)value_addr);
+ sprintf(value_str, "%d", *(DWORD_PTR *)value_addr);
break;
case 13: /* SymTagFunctionType */
- sprintf(value_str, "0x%08x", *(DWORD *)value_addr);
+ sprintf(value_str, FORMAT_PTR, *(DWORD_PTR *)value_addr);
+ break;
+ default:
+ sprintf(value_str, "[unhandled tag: %d]", tag);
break;
- default: break;
}
}
@@ -412,13 +427,15 @@ write_var_values(PSYMBOL_INFO sym_info, ULONG sym_size, void *baton)
format_value(value_str, sym_info->ModBase, sym_info->TypeIndex,
(void *)var_data);
- fprintf(log_file, "%s=%s", sym_info->Name, value_str);
+ fprintf(log_file, "%.*s=%s", (int)sym_info->NameLen, sym_info->Name,
+ value_str);
}
- if (log_params == FALSE && sym_info->Flags & SYMFLAG_LOCAL)
+ if (!log_params && sym_info->Flags & SYMFLAG_LOCAL)
{
format_value(value_str, sym_info->ModBase, sym_info->TypeIndex,
(void *)var_data);
- fprintf(log_file, " %s = %s\n", sym_info->Name, value_str);
+ fprintf(log_file, " %.*s = %s\n", (int)sym_info->NameLen,
+ sym_info->Name, value_str);
}
return TRUE;
@@ -451,8 +468,10 @@ write_function_detail(STACKFRAME64 stack_frame, int nr_of_frame, FILE *log_file)
if (SymFromAddr_(proc, stack_frame.AddrPC.Offset, &func_disp, pIHS))
{
fprintf(log_file,
- "#%d 0x%08I64x in %.200s(",
- nr_of_frame, stack_frame.AddrPC.Offset, pIHS->Name);
+ "#%d 0x%08I64x in %.*s(",
+ nr_of_frame, stack_frame.AddrPC.Offset,
+ pIHS->NameLen > 200 ? 200 : (int)pIHS->NameLen,
+ pIHS->Name);
/* restrict symbol enumeration to this frame only */
ih_stack_frame.InstructionOffset = stack_frame.AddrPC.Offset;
@@ -724,13 +743,13 @@ svn__unhandled_exception_filter(PEXCEPTION_POINTERS ptrs)
return EXCEPTION_CONTINUE_SEARCH;
/* ... or if we can't create the log files ... */
- if (get_temp_filename(dmp_filename, LOGFILE_PREFIX, "dmp") == FALSE ||
- get_temp_filename(log_filename, LOGFILE_PREFIX, "log") == FALSE)
+ if (!get_temp_filename(dmp_filename, LOGFILE_PREFIX, "dmp") ||
+ !get_temp_filename(log_filename, LOGFILE_PREFIX, "log"))
return EXCEPTION_CONTINUE_SEARCH;
/* If we can't load a recent version of the dbghelp.dll, pass on this
exception */
- if (load_dbghelp_dll() == FALSE)
+ if (!load_dbghelp_dll())
return EXCEPTION_CONTINUE_SEARCH;
/* open log file */
diff --git a/subversion/libsvn_subr/win32_crypto.c b/subversion/libsvn_subr/win32_crypto.c
index 016bba9..e16866a 100644
--- a/subversion/libsvn_subr/win32_crypto.c
+++ b/subversion/libsvn_subr/win32_crypto.c
@@ -21,6 +21,9 @@
* ====================================================================
*/
+/* prevent "empty compilation unit" warning on e.g. UNIX */
+typedef int win32_crypto__dummy;
+
/* ==================================================================== */
#if defined(WIN32) && !defined(__MINGW32__)
@@ -28,32 +31,85 @@
/*** Includes. ***/
#include <apr_pools.h>
+#include <apr_base64.h>
#include "svn_auth.h"
#include "svn_error.h"
+#include "svn_hash.h"
#include "svn_utf.h"
#include "svn_config.h"
#include "svn_user.h"
+#include "svn_base64.h"
#include "private/svn_auth_private.h"
#include "svn_private_config.h"
#include <wincrypt.h>
-#include <apr_base64.h>
-
-/*-----------------------------------------------------------------------*/
-/* Windows simple provider, encrypts the password on Win2k and later. */
-/*-----------------------------------------------------------------------*/
+
/* The description string that's combined with unencrypted data by the
Windows CryptoAPI. Used during decryption to verify that the
encrypted data were valid. */
static const WCHAR description[] = L"auth_svn.simple.wincrypt";
+
+/* Return a copy of ORIG, encrypted using the Windows CryptoAPI and
+ allocated from POOL. */
+const svn_string_t *
+encrypt_data(const svn_string_t *orig,
+ apr_pool_t *pool)
+{
+ DATA_BLOB blobin;
+ DATA_BLOB blobout;
+ const svn_string_t *crypted = NULL;
+
+ blobin.cbData = orig->len;
+ blobin.pbData = (BYTE *)orig->data;
+ if (CryptProtectData(&blobin, description, NULL, NULL, NULL,
+ CRYPTPROTECT_UI_FORBIDDEN, &blobout))
+ {
+ crypted = svn_string_ncreate((const char *)blobout.pbData,
+ blobout.cbData, pool);
+ LocalFree(blobout.pbData);
+ }
+ return crypted;
+}
+
+/* Return a copy of CRYPTED, decrypted using the Windows CryptoAPI and
+ allocated from POOL. */
+const svn_string_t *
+decrypt_data(const svn_string_t *crypted,
+ apr_pool_t *pool)
+{
+ DATA_BLOB blobin;
+ DATA_BLOB blobout;
+ LPWSTR descr;
+ const svn_string_t *orig = NULL;
+
+ blobin.cbData = crypted->len;
+ blobin.pbData = (BYTE *)crypted->data;
+ if (CryptUnprotectData(&blobin, &descr, NULL, NULL, NULL,
+ CRYPTPROTECT_UI_FORBIDDEN, &blobout))
+ {
+ if (0 == lstrcmpW(descr, description))
+ orig = svn_string_ncreate((const char *)blobout.pbData,
+ blobout.cbData, pool);
+ LocalFree(blobout.pbData);
+ LocalFree(descr);
+ }
+ return orig;
+}
+
+
+/*-----------------------------------------------------------------------*/
+/* Windows simple provider, encrypts the password on Win2k and later. */
+/*-----------------------------------------------------------------------*/
+
/* Implementation of svn_auth__password_set_t that encrypts
the incoming password using the Windows CryptoAPI. */
-static svn_boolean_t
-windows_password_encrypter(apr_hash_t *creds,
+static svn_error_t *
+windows_password_encrypter(svn_boolean_t *done,
+ apr_hash_t *creds,
const char *realmstring,
const char *username,
const char *in,
@@ -61,32 +117,26 @@ windows_password_encrypter(apr_hash_t *creds,
svn_boolean_t non_interactive,
apr_pool_t *pool)
{
- DATA_BLOB blobin;
- DATA_BLOB blobout;
- svn_boolean_t crypted;
+ const svn_string_t *coded;
- blobin.cbData = strlen(in);
- blobin.pbData = (BYTE*) in;
- crypted = CryptProtectData(&blobin, description, NULL, NULL, NULL,
- CRYPTPROTECT_UI_FORBIDDEN, &blobout);
- if (crypted)
+ coded = encrypt_data(svn_string_create(in, pool), pool);
+ if (coded)
{
- char *coded = apr_palloc(pool, apr_base64_encode_len(blobout.cbData));
- apr_base64_encode(coded, (const char*)blobout.pbData, blobout.cbData);
- crypted = svn_auth__simple_password_set(creds, realmstring, username,
- coded, parameters,
- non_interactive, pool);
- LocalFree(blobout.pbData);
+ coded = svn_base64_encode_string2(coded, FALSE, pool);
+ SVN_ERR(svn_auth__simple_password_set(done, creds, realmstring, username,
+ coded->data, parameters,
+ non_interactive, pool));
}
- return crypted;
+ return SVN_NO_ERROR;
}
/* Implementation of svn_auth__password_get_t that decrypts
the incoming password using the Windows CryptoAPI and verifies its
validity. */
-static svn_boolean_t
-windows_password_decrypter(const char **out,
+static svn_error_t *
+windows_password_decrypter(svn_boolean_t *done,
+ const char **out,
apr_hash_t *creds,
const char *realmstring,
const char *username,
@@ -94,32 +144,26 @@ windows_password_decrypter(const char **out,
svn_boolean_t non_interactive,
apr_pool_t *pool)
{
- DATA_BLOB blobin;
- DATA_BLOB blobout;
- LPWSTR descr;
- svn_boolean_t decrypted;
- char *in;
-
- if (!svn_auth__simple_password_get(&in, creds, realmstring, username,
- parameters, non_interactive, pool))
- return FALSE;
-
- blobin.cbData = strlen(in);
- blobin.pbData = apr_palloc(pool, apr_base64_decode_len(in));
- apr_base64_decode((char*)blobin.pbData, in);
- decrypted = CryptUnprotectData(&blobin, &descr, NULL, NULL, NULL,
- CRYPTPROTECT_UI_FORBIDDEN, &blobout);
- if (decrypted)
+ const svn_string_t *orig;
+ const char *in;
+
+ SVN_ERR(svn_auth__simple_password_get(done, &in, creds, realmstring, username,
+ parameters, non_interactive, pool));
+ if (!*done)
+ return SVN_NO_ERROR;
+
+ orig = svn_base64_decode_string(svn_string_create(in, pool), pool);
+ orig = decrypt_data(orig, pool);
+ if (orig)
{
- if (0 == lstrcmpW(descr, description))
- *out = apr_pstrndup(pool, (const char*)blobout.pbData, blobout.cbData);
- else
- decrypted = FALSE;
- LocalFree(blobout.pbData);
- LocalFree(descr);
+ *out = orig->data;
+ *done = TRUE;
}
-
- return decrypted;
+ else
+ {
+ *done = FALSE;
+ }
+ return SVN_NO_ERROR;
}
/* Get cached encrypted credentials from the simple provider's cache. */
@@ -131,14 +175,14 @@ windows_simple_first_creds(void **credentials,
const char *realmstring,
apr_pool_t *pool)
{
- return svn_auth__simple_first_creds_helper(credentials,
- iter_baton,
- provider_baton,
- parameters,
- realmstring,
- windows_password_decrypter,
- SVN_AUTH__WINCRYPT_PASSWORD_TYPE,
- pool);
+ return svn_auth__simple_creds_cache_get(credentials,
+ iter_baton,
+ provider_baton,
+ parameters,
+ realmstring,
+ windows_password_decrypter,
+ SVN_AUTH__WINCRYPT_PASSWORD_TYPE,
+ pool);
}
/* Save encrypted credentials to the simple provider's cache. */
@@ -150,13 +194,13 @@ windows_simple_save_creds(svn_boolean_t *saved,
const char *realmstring,
apr_pool_t *pool)
{
- return svn_auth__simple_save_creds_helper(saved, credentials,
- provider_baton,
- parameters,
- realmstring,
- windows_password_encrypter,
- SVN_AUTH__WINCRYPT_PASSWORD_TYPE,
- pool);
+ return svn_auth__simple_creds_cache_set(saved, credentials,
+ provider_baton,
+ parameters,
+ realmstring,
+ windows_password_encrypter,
+ SVN_AUTH__WINCRYPT_PASSWORD_TYPE,
+ pool);
}
static const svn_auth_provider_t windows_simple_provider = {
@@ -186,8 +230,9 @@ svn_auth_get_windows_simple_provider(svn_auth_provider_object_t **provider,
/* Implementation of svn_auth__password_set_t that encrypts
the incoming password using the Windows CryptoAPI. */
-static svn_boolean_t
-windows_ssl_client_cert_pw_encrypter(apr_hash_t *creds,
+static svn_error_t *
+windows_ssl_client_cert_pw_encrypter(svn_boolean_t *done,
+ apr_hash_t *creds,
const char *realmstring,
const char *username,
const char *in,
@@ -195,32 +240,27 @@ windows_ssl_client_cert_pw_encrypter(apr_hash_t *creds,
svn_boolean_t non_interactive,
apr_pool_t *pool)
{
- DATA_BLOB blobin;
- DATA_BLOB blobout;
- svn_boolean_t crypted;
+ const svn_string_t *coded;
- blobin.cbData = strlen(in);
- blobin.pbData = (BYTE*) in;
- crypted = CryptProtectData(&blobin, description, NULL, NULL, NULL,
- CRYPTPROTECT_UI_FORBIDDEN, &blobout);
- if (crypted)
+ coded = encrypt_data(svn_string_create(in, pool), pool);
+ if (coded)
{
- char *coded = apr_palloc(pool, apr_base64_encode_len(blobout.cbData));
- apr_base64_encode(coded, (const char*)blobout.pbData, blobout.cbData);
- crypted = svn_auth__ssl_client_cert_pw_set(creds, realmstring, username,
- coded, parameters,
- non_interactive, pool);
- LocalFree(blobout.pbData);
+ coded = svn_base64_encode_string2(coded, FALSE, pool);
+ SVN_ERR(svn_auth__ssl_client_cert_pw_set(done, creds, realmstring,
+ username, coded->data,
+ parameters, non_interactive,
+ pool));
}
- return crypted;
+ return SVN_NO_ERROR;
}
/* Implementation of svn_auth__password_get_t that decrypts
the incoming password using the Windows CryptoAPI and verifies its
validity. */
-static svn_boolean_t
-windows_ssl_client_cert_pw_decrypter(const char **out,
+static svn_error_t *
+windows_ssl_client_cert_pw_decrypter(svn_boolean_t *done,
+ const char **out,
apr_hash_t *creds,
const char *realmstring,
const char *username,
@@ -228,32 +268,27 @@ windows_ssl_client_cert_pw_decrypter(const char **out,
svn_boolean_t non_interactive,
apr_pool_t *pool)
{
- DATA_BLOB blobin;
- DATA_BLOB blobout;
- LPWSTR descr;
- svn_boolean_t decrypted;
- char *in;
-
- if (!svn_auth__ssl_client_cert_pw_get(&in, creds, realmstring, username,
- parameters, non_interactive, pool))
- return FALSE;
-
- blobin.cbData = strlen(in);
- blobin.pbData = apr_palloc(pool, apr_base64_decode_len(in));
- apr_base64_decode((char*)blobin.pbData, in);
- decrypted = CryptUnprotectData(&blobin, &descr, NULL, NULL, NULL,
- CRYPTPROTECT_UI_FORBIDDEN, &blobout);
- if (decrypted)
+ const svn_string_t *orig;
+ const char *in;
+
+ SVN_ERR(svn_auth__ssl_client_cert_pw_get(done, &in, creds, realmstring,
+ username, parameters,
+ non_interactive, pool));
+ if (!*done)
+ return SVN_NO_ERROR;
+
+ orig = svn_base64_decode_string(svn_string_create(in, pool), pool);
+ orig = decrypt_data(orig, pool);
+ if (orig)
{
- if (0 == lstrcmpW(descr, description))
- *out = apr_pstrndup(pool, (const char*)blobout.pbData, blobout.cbData);
- else
- decrypted = FALSE;
- LocalFree(blobout.pbData);
- LocalFree(descr);
+ *out = orig->data;
+ *done = TRUE;
}
-
- return decrypted;
+ else
+ {
+ *done = FALSE;
+ }
+ return SVN_NO_ERROR;
}
/* Get cached encrypted credentials from the simple provider's cache. */
@@ -265,15 +300,10 @@ windows_ssl_client_cert_pw_first_creds(void **credentials,
const char *realmstring,
apr_pool_t *pool)
{
- return svn_auth__ssl_client_cert_pw_file_first_creds_helper
- (credentials,
- iter_baton,
- provider_baton,
- parameters,
- realmstring,
- windows_ssl_client_cert_pw_decrypter,
- SVN_AUTH__WINCRYPT_PASSWORD_TYPE,
- pool);
+ return svn_auth__ssl_client_cert_pw_cache_get(
+ credentials, iter_baton, provider_baton, parameters, realmstring,
+ windows_ssl_client_cert_pw_decrypter,
+ SVN_AUTH__WINCRYPT_PASSWORD_TYPE, pool);
}
/* Save encrypted credentials to the simple provider's cache. */
@@ -285,15 +315,10 @@ windows_ssl_client_cert_pw_save_creds(svn_boolean_t *saved,
const char *realmstring,
apr_pool_t *pool)
{
- return svn_auth__ssl_client_cert_pw_file_save_creds_helper
- (saved,
- credentials,
- provider_baton,
- parameters,
- realmstring,
- windows_ssl_client_cert_pw_encrypter,
- SVN_AUTH__WINCRYPT_PASSWORD_TYPE,
- pool);
+ return svn_auth__ssl_client_cert_pw_cache_set(
+ saved, credentials, provider_baton, parameters, realmstring,
+ windows_ssl_client_cert_pw_encrypter,
+ SVN_AUTH__WINCRYPT_PASSWORD_TYPE, pool);
}
static const svn_auth_provider_t windows_ssl_client_cert_pw_provider = {
@@ -411,19 +436,17 @@ windows_ssl_server_trust_first_credentials(void **credentials,
const char *realmstring,
apr_pool_t *pool)
{
- apr_uint32_t *failures = apr_hash_get(parameters,
- SVN_AUTH_PARAM_SSL_SERVER_FAILURES,
- APR_HASH_KEY_STRING);
+ apr_uint32_t *failure_ptr = svn_hash_gets(parameters,
+ SVN_AUTH_PARAM_SSL_SERVER_FAILURES);
+ apr_uint32_t failures = *failure_ptr;
const svn_auth_ssl_server_cert_info_t *cert_info =
- apr_hash_get(parameters,
- SVN_AUTH_PARAM_SSL_SERVER_CERT_INFO,
- APR_HASH_KEY_STRING);
+ svn_hash_gets(parameters, SVN_AUTH_PARAM_SSL_SERVER_CERT_INFO);
*credentials = NULL;
*iter_baton = NULL;
/* We can accept only unknown certificate authority. */
- if (*failures & SVN_AUTH_SSL_UNKNOWNCA)
+ if (failures & SVN_AUTH_SSL_UNKNOWNCA)
{
svn_boolean_t ok;
@@ -433,15 +456,16 @@ windows_ssl_server_trust_first_credentials(void **credentials,
if (ok)
{
/* Clear failure flag. */
- *failures &= ~SVN_AUTH_SSL_UNKNOWNCA;
+ failures &= ~SVN_AUTH_SSL_UNKNOWNCA;
}
}
/* If all failures are cleared now, we return the creds */
- if (! *failures)
+ if (! failures)
{
svn_auth_cred_ssl_server_trust_t *creds =
apr_pcalloc(pool, sizeof(*creds));
+ creds->accepted_failures = *failure_ptr & ~failures;
creds->may_save = FALSE; /* No need to save it. */
*credentials = creds;
}
@@ -467,4 +491,24 @@ svn_auth_get_windows_ssl_server_trust_provider
*provider = po;
}
+static const svn_auth_provider_t windows_server_authority_provider = {
+ SVN_AUTH_CRED_SSL_SERVER_AUTHORITY,
+ windows_ssl_server_trust_first_credentials,
+ NULL,
+ NULL,
+};
+
+/* Public API */
+void
+svn_auth__get_windows_ssl_server_authority_provider(
+ svn_auth_provider_object_t **provider,
+ apr_pool_t *pool)
+{
+ svn_auth_provider_object_t *po = apr_pcalloc(pool, sizeof(*po));
+
+ po->vtable = &windows_server_authority_provider;
+ *provider = po;
+}
+
+
#endif /* WIN32 */
diff --git a/subversion/libsvn_subr/win32_xlate.c b/subversion/libsvn_subr/win32_xlate.c
index 7d10382..efe9c05 100644
--- a/subversion/libsvn_subr/win32_xlate.c
+++ b/subversion/libsvn_subr/win32_xlate.c
@@ -21,6 +21,9 @@
* ====================================================================
*/
+/* prevent "empty compilation unit" warning on e.g. UNIX */
+typedef int win32_xlate__dummy;
+
#ifdef WIN32
/* Define _WIN32_DCOM for CoInitializeEx(). */
@@ -185,7 +188,7 @@ svn_subr__win32_xlate_to_stringbuf(win32_xlate_t *handle,
if (src_length == 0)
{
- *dest = svn_stringbuf_create("", pool);
+ *dest = svn_stringbuf_create_empty(pool);
return APR_SUCCESS;
}
diff --git a/subversion/libsvn_subr/xml.c b/subversion/libsvn_subr/xml.c
index c38dd10..a9d834a 100644
--- a/subversion/libsvn_subr/xml.c
+++ b/subversion/libsvn_subr/xml.c
@@ -27,6 +27,7 @@
#include <assert.h>
#include "svn_private_config.h" /* for SVN_HAVE_OLD_EXPAT */
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_xml.h"
#include "svn_error.h"
@@ -115,7 +116,7 @@ xml_escape_cdata(svn_stringbuf_t **outstr,
const char *p = data, *q;
if (*outstr == NULL)
- *outstr = svn_stringbuf_create("", pool);
+ *outstr = svn_stringbuf_create_empty(pool);
while (1)
{
@@ -277,7 +278,7 @@ svn_xml_fuzzy_escape(const char *string, apr_pool_t *pool)
if (q == end)
return string;
- outstr = svn_stringbuf_create("", pool);
+ outstr = svn_stringbuf_create_empty(pool);
while (1)
{
q = p;
@@ -455,7 +456,7 @@ void svn_xml_signal_bailout(svn_error_t *error,
/*** Attribute walking. ***/
const char *
-svn_xml_get_attr_value(const char *name, const char **atts)
+svn_xml_get_attr_value(const char *name, const char *const *atts)
{
while (atts && (*atts))
{
@@ -479,7 +480,7 @@ svn_xml_make_header2(svn_stringbuf_t **str, const char *encoding,
{
if (*str == NULL)
- *str = svn_stringbuf_create("", pool);
+ *str = svn_stringbuf_create_empty(pool);
svn_stringbuf_appendcstr(*str, "<?xml version=\"1.0\"");
if (encoding)
{
@@ -533,7 +534,7 @@ svn_xml_ap_to_hash(va_list ap, apr_pool_t *pool)
while ((key = va_arg(ap, char *)) != NULL)
{
const char *val = va_arg(ap, const char *);
- apr_hash_set(ht, key, APR_HASH_KEY_STRING, val);
+ svn_hash_sets(ht, key, val);
}
return ht;
@@ -646,7 +647,7 @@ void svn_xml_make_close_tag(svn_stringbuf_t **str,
const char *tagname)
{
if (*str == NULL)
- *str = svn_stringbuf_create("", pool);
+ *str = svn_stringbuf_create_empty(pool);
svn_stringbuf_appendcstr(*str, "</");
svn_stringbuf_appendcstr(*str, tagname);
diff --git a/subversion/libsvn_wc/adm_crawler.c b/subversion/libsvn_wc/adm_crawler.c
index e90cc1c..e5935a2 100644
--- a/subversion/libsvn_wc/adm_crawler.c
+++ b/subversion/libsvn_wc/adm_crawler.c
@@ -30,6 +30,7 @@
#include <apr_file_io.h>
#include <apr_hash.h>
+#include "svn_hash.h"
#include "svn_types.h"
#include "svn_pools.h"
#include "svn_wc.h"
@@ -58,8 +59,8 @@
last-commit-time. Either way, set entry-timestamp to match that of
the working file when all is finished.
- If REMOVE_TEXT_CONFLICT is TRUE, remove an existing text conflict
- from LOCAL_ABSPATH.
+ If MARK_RESOLVED_TEXT_CONFLICT is TRUE, mark as resolved any existing
+ text conflict on LOCAL_ABSPATH.
Not that a valid access baton with a write lock to the directory of
LOCAL_ABSPATH must be available in DB.*/
@@ -67,7 +68,7 @@ static svn_error_t *
restore_file(svn_wc__db_t *db,
const char *local_abspath,
svn_boolean_t use_commit_times,
- svn_boolean_t remove_text_conflicts,
+ svn_boolean_t mark_resolved_text_conflict,
apr_pool_t *scratch_pool)
{
svn_skel_t *work_item;
@@ -89,8 +90,8 @@ restore_file(svn_wc__db_t *db,
scratch_pool));
/* Remove any text conflict */
- if (remove_text_conflicts)
- SVN_ERR(svn_wc__resolve_text_conflict(db, local_abspath, scratch_pool));
+ if (mark_resolved_text_conflict)
+ SVN_ERR(svn_wc__mark_resolved_text_conflict(db, local_abspath, scratch_pool));
return SVN_NO_ERROR;
}
@@ -102,8 +103,9 @@ svn_wc_restore(svn_wc_context_t *wc_ctx,
apr_pool_t *scratch_pool)
{
svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
svn_node_kind_t disk_kind;
+ const svn_checksum_t *checksum;
SVN_ERR(svn_io_check_path(local_abspath, &disk_kind, scratch_pool));
@@ -113,27 +115,19 @@ svn_wc_restore(svn_wc_context_t *wc_ctx,
svn_dirent_local_style(local_abspath,
scratch_pool));
-
-
SVN_ERR(svn_wc__db_read_info(&status, &kind, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, &checksum, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
wc_ctx->db, local_abspath,
scratch_pool, scratch_pool));
- if (status == svn_wc__db_status_added)
- SVN_ERR(svn_wc__db_scan_addition(&status, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL,
- wc_ctx->db, local_abspath,
- scratch_pool, scratch_pool));
-
if (status != svn_wc__db_status_normal
- && status != svn_wc__db_status_copied
- && status != svn_wc__db_status_moved_here
- && !(kind == svn_wc__db_kind_dir
- && (status == svn_wc__db_status_added
- || status == svn_wc__db_status_incomplete)))
+ && !((status == svn_wc__db_status_added
+ || status == svn_wc__db_status_incomplete)
+ && (kind == svn_node_dir
+ || (kind == svn_node_file && checksum != NULL)
+ /* || (kind == svn_node_symlink && target)*/)))
{
return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
_("The node '%s' can not be restored."),
@@ -141,8 +135,9 @@ svn_wc_restore(svn_wc_context_t *wc_ctx,
scratch_pool));
}
- if (kind == svn_wc__db_kind_file || kind == svn_wc__db_kind_symlink)
- SVN_ERR(restore_file(wc_ctx->db, local_abspath, use_commit_times, FALSE,
+ if (kind == svn_node_file || kind == svn_node_symlink)
+ SVN_ERR(restore_file(wc_ctx->db, local_abspath, use_commit_times,
+ FALSE /*mark_resolved_text_conflict*/,
scratch_pool));
else
SVN_ERR(svn_io_dir_make(local_abspath, APR_OS_DEFAULT, scratch_pool));
@@ -160,19 +155,20 @@ svn_wc_restore(svn_wc_context_t *wc_ctx,
static svn_error_t *
restore_node(svn_wc__db_t *db,
const char *local_abspath,
- svn_wc__db_kind_t kind,
+ svn_node_kind_t kind,
svn_boolean_t use_commit_times,
svn_wc_notify_func2_t notify_func,
void *notify_baton,
apr_pool_t *scratch_pool)
{
- if (kind == svn_wc__db_kind_file || kind == svn_wc__db_kind_symlink)
+ if (kind == svn_node_file || kind == svn_node_symlink)
{
- /* Recreate file from text-base */
- SVN_ERR(restore_file(db, local_abspath, use_commit_times, TRUE,
+ /* Recreate file from text-base; mark any text conflict as resolved */
+ SVN_ERR(restore_file(db, local_abspath, use_commit_times,
+ TRUE /*mark_resolved_text_conflict*/,
scratch_pool));
}
- else if (kind == svn_wc__db_kind_dir)
+ else if (kind == svn_node_dir)
{
/* Recreating a directory is just a mkdir */
SVN_ERR(svn_io_dir_make(local_abspath, APR_OS_DEFAULT, scratch_pool));
@@ -278,7 +274,11 @@ report_revisions_and_depths(svn_wc__db_t *db,
|| SVN__APR_STATUS_IS_ENOTDIR(err->apr_err)))
{
svn_error_clear(err);
- dirents = apr_hash_make(scratch_pool);
+ /* There is no directory, and if we could create the directory
+ we would have already created it when walking the parent
+ directory */
+ restore_files = FALSE;
+ dirents = NULL;
}
else
SVN_ERR(err);
@@ -370,30 +370,23 @@ report_revisions_and_depths(svn_wc__db_t *db,
/* Is the entry NOT on the disk? We may be able to restore it. */
if (restore_files
- && apr_hash_get(dirents, child, APR_HASH_KEY_STRING) == NULL)
+ && svn_hash_gets(dirents, child) == NULL)
{
svn_wc__db_status_t wrk_status;
- svn_wc__db_kind_t wrk_kind;
+ svn_node_kind_t wrk_kind;
+ const svn_checksum_t *checksum;
SVN_ERR(svn_wc__db_read_info(&wrk_status, &wrk_kind, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
+ &checksum, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL,
db, this_abspath, iterpool, iterpool));
- if (wrk_status == svn_wc__db_status_added)
- SVN_ERR(svn_wc__db_scan_addition(&wrk_status, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL,
- db, this_abspath,
- iterpool, iterpool));
-
- if (wrk_status == svn_wc__db_status_normal
- || wrk_status == svn_wc__db_status_copied
- || wrk_status == svn_wc__db_status_moved_here
- || (wrk_kind == svn_wc__db_kind_dir
- && (wrk_status == svn_wc__db_status_added
- || wrk_status == svn_wc__db_status_incomplete)))
+ if ((wrk_status == svn_wc__db_status_normal
+ || wrk_status == svn_wc__db_status_added
+ || wrk_status == svn_wc__db_status_incomplete)
+ && (wrk_kind == svn_node_dir || checksum))
{
svn_node_kind_t dirent_kind;
@@ -420,9 +413,8 @@ report_revisions_and_depths(svn_wc__db_t *db,
}
else
{
- const char *childname = svn_relpath__is_child(dir_repos_relpath,
- ths->repos_relpath,
- NULL);
+ const char *childname
+ = svn_relpath_skip_ancestor(dir_repos_relpath, ths->repos_relpath);
if (childname == NULL || strcmp(childname, child) != 0)
{
@@ -435,8 +427,8 @@ report_revisions_and_depths(svn_wc__db_t *db,
ths->depth = svn_depth_infinity;
/*** Files ***/
- if (ths->kind == svn_wc__db_kind_file ||
- ths->kind == svn_wc__db_kind_symlink)
+ if (ths->kind == svn_node_file
+ || ths->kind == svn_node_symlink)
{
if (report_everything)
{
@@ -489,7 +481,7 @@ report_revisions_and_depths(svn_wc__db_t *db,
} /* end file case */
/*** Directories (in recursive mode) ***/
- else if (ths->kind == svn_wc__db_kind_dir
+ else if (ths->kind == svn_node_dir
&& (depth > svn_depth_files
|| depth == svn_depth_unknown))
{
@@ -646,7 +638,7 @@ svn_wc_crawl_revisions5(svn_wc_context_t *wc_ctx,
svn_revnum_t target_rev = SVN_INVALID_REVNUM;
svn_boolean_t start_empty;
svn_wc__db_status_t status;
- svn_wc__db_kind_t target_kind;
+ svn_node_kind_t target_kind;
const char *repos_relpath, *repos_root_url;
svn_depth_t target_depth;
svn_wc__db_lock_t *target_lock;
@@ -660,7 +652,7 @@ svn_wc_crawl_revisions5(svn_wc_context_t *wc_ctx,
&repos_relpath, &repos_root_url,
NULL, NULL, NULL, NULL, &target_depth,
NULL, NULL, &target_lock,
- NULL, NULL,
+ NULL, NULL, NULL,
db, local_abspath, scratch_pool,
scratch_pool);
@@ -693,11 +685,6 @@ svn_wc_crawl_revisions5(svn_wc_context_t *wc_ctx,
return SVN_NO_ERROR;
}
- if (! repos_relpath)
- SVN_ERR(svn_wc__db_scan_base_repos(&repos_relpath, &repos_root_url, NULL,
- db, local_abspath,
- scratch_pool, scratch_pool));
-
if (target_depth == svn_depth_unknown)
target_depth = svn_depth_infinity;
@@ -719,9 +706,11 @@ svn_wc_crawl_revisions5(svn_wc_context_t *wc_ctx,
&& disk_kind == svn_node_none)
{
svn_wc__db_status_t wrk_status;
- svn_wc__db_kind_t wrk_kind;
+ svn_node_kind_t wrk_kind;
+ const svn_checksum_t *checksum;
+
err = svn_wc__db_read_info(&wrk_status, &wrk_kind, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, &checksum, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL,
@@ -733,23 +722,15 @@ svn_wc_crawl_revisions5(svn_wc_context_t *wc_ctx,
{
svn_error_clear(err);
wrk_status = svn_wc__db_status_not_present;
- wrk_kind = svn_wc__db_kind_file;
+ wrk_kind = svn_node_file;
}
else
SVN_ERR(err);
- if (wrk_status == svn_wc__db_status_added)
- SVN_ERR(svn_wc__db_scan_addition(&wrk_status, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- db, local_abspath,
- scratch_pool, scratch_pool));
-
- if (wrk_status == svn_wc__db_status_normal
- || wrk_status == svn_wc__db_status_copied
- || wrk_status == svn_wc__db_status_moved_here
- || (wrk_kind == svn_wc__db_kind_dir
- && (wrk_status == svn_wc__db_status_added
- || wrk_status == svn_wc__db_status_incomplete)))
+ if ((wrk_status == svn_wc__db_status_normal
+ || wrk_status == svn_wc__db_status_added
+ || wrk_status == svn_wc__db_status_incomplete)
+ && (wrk_kind == svn_node_dir || checksum))
{
SVN_ERR(restore_node(wc_ctx->db, local_abspath,
wrk_kind, use_commit_times,
@@ -772,7 +753,7 @@ svn_wc_crawl_revisions5(svn_wc_context_t *wc_ctx,
SVN_ERR(reporter->set_path(report_baton, "", target_rev, report_depth,
start_empty, NULL, scratch_pool));
}
- if (target_kind == svn_wc__db_kind_dir)
+ if (target_kind == svn_node_dir)
{
if (depth != svn_depth_empty)
{
@@ -799,8 +780,7 @@ svn_wc_crawl_revisions5(svn_wc_context_t *wc_ctx,
}
}
- else if (target_kind == svn_wc__db_kind_file ||
- target_kind == svn_wc__db_kind_symlink)
+ else if (target_kind == svn_node_file || target_kind == svn_node_symlink)
{
const char *parent_abspath, *base;
svn_wc__db_status_t parent_status;
@@ -814,7 +794,7 @@ svn_wc_crawl_revisions5(svn_wc_context_t *wc_ctx,
err = svn_wc__db_base_get_info(&parent_status, NULL, NULL,
&parent_repos_relpath, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL,
+ NULL, NULL, NULL,
db, parent_abspath,
scratch_pool, scratch_pool);
@@ -1211,9 +1191,18 @@ svn_wc__internal_transmit_prop_deltas(svn_wc__db_t *db,
apr_pool_t *iterpool = svn_pool_create(scratch_pool);
int i;
apr_array_header_t *propmods;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
+
+ SVN_ERR(svn_wc__db_read_kind(&kind, db, local_abspath,
+ FALSE /* allow_missing */,
+ FALSE /* show_deleted */,
+ FALSE /* show_hidden */,
+ iterpool));
- SVN_ERR(svn_wc__db_read_kind(&kind, db, local_abspath, FALSE, iterpool));
+ if (kind == svn_node_none)
+ return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
+ _("The node '%s' was not found."),
+ svn_dirent_local_style(local_abspath, iterpool));
/* Get an array of local changes by comparing the hashes. */
SVN_ERR(svn_wc__internal_propdiff(&propmods, NULL, db, local_abspath,
@@ -1226,7 +1215,7 @@ svn_wc__internal_transmit_prop_deltas(svn_wc__db_t *db,
svn_pool_clear(iterpool);
- if (kind == svn_wc__db_kind_file)
+ if (kind == svn_node_file)
SVN_ERR(editor->change_file_prop(baton, p->name, p->value,
iterpool));
else
diff --git a/subversion/libsvn_wc/adm_files.c b/subversion/libsvn_wc/adm_files.c
index 452188b..11ad277 100644
--- a/subversion/libsvn_wc/adm_files.c
+++ b/subversion/libsvn_wc/adm_files.c
@@ -56,7 +56,7 @@ static const char default_adm_dir_name[] = ".svn";
/* The name that is actually used for the WC admin directory. The
commonest case where this won't be the default is in Windows
- ASP.NET development environments, which choke on ".svn". */
+ ASP.NET development environments, which used to choke on ".svn". */
static const char *adm_dir_name = default_adm_dir_name;
@@ -108,43 +108,19 @@ svn_wc_set_adm_dir(const char *name, apr_pool_t *pool)
}
-static const char *
-simple_extend(const char *adm_path, /* ### adm_abspath? */
- svn_boolean_t use_tmp,
- const char *subdir,
- const char *child,
- const char *extension,
- apr_pool_t *result_pool)
+const char *
+svn_wc__adm_child(const char *path,
+ const char *child,
+ apr_pool_t *result_pool)
{
- if (subdir)
- child = svn_dirent_join(subdir, child, result_pool);
- if (extension)
- child = apr_pstrcat(result_pool, child, extension, (char *)NULL);
-
- if (use_tmp)
- return svn_dirent_join_many(result_pool,
- adm_path,
- adm_dir_name,
- SVN_WC__ADM_TMP,
- child,
- NULL);
-
return svn_dirent_join_many(result_pool,
- adm_path,
+ path,
adm_dir_name,
child,
NULL);
}
-const char *svn_wc__adm_child(const char *path,
- const char *child,
- apr_pool_t *result_pool)
-{
- return simple_extend(path, FALSE, NULL, child, NULL, result_pool);
-}
-
-
svn_boolean_t
svn_wc__adm_area_exists(const char *adm_abspath,
apr_pool_t *pool)
@@ -173,12 +149,11 @@ svn_wc__adm_area_exists(const char *adm_abspath,
static svn_error_t *
make_adm_subdir(const char *path,
const char *subdir,
- svn_boolean_t tmp,
apr_pool_t *pool)
{
const char *fullpath;
- fullpath = simple_extend(path, tmp, NULL, subdir, NULL, pool);
+ fullpath = svn_wc__adm_child(path, subdir, pool);
return svn_io_dir_make(fullpath, APR_OS_DEFAULT, pool);
}
@@ -196,16 +171,16 @@ svn_wc__text_base_path_to_read(const char **result_abspath,
apr_pool_t *scratch_pool)
{
svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
const svn_checksum_t *checksum;
SVN_ERR(svn_wc__db_read_pristine_info(&status, &kind, NULL, NULL, NULL, NULL,
- &checksum, NULL, NULL,
+ &checksum, NULL, NULL, NULL,
db, local_abspath,
scratch_pool, scratch_pool));
/* Sanity */
- if (kind != svn_wc__db_kind_file)
+ if (kind != svn_node_file)
return svn_error_createf(SVN_ERR_NODE_UNEXPECTED_KIND, NULL,
_("Can only get the pristine contents of files; "
"'%s' is not a file"),
@@ -249,19 +224,19 @@ svn_wc__get_pristine_contents(svn_stream_t **contents,
apr_pool_t *scratch_pool)
{
svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
const svn_checksum_t *sha1_checksum;
if (size)
*size = SVN_INVALID_FILESIZE;
SVN_ERR(svn_wc__db_read_pristine_info(&status, &kind, NULL, NULL, NULL, NULL,
- &sha1_checksum, NULL, NULL,
+ &sha1_checksum, NULL, NULL, NULL,
db, local_abspath,
scratch_pool, scratch_pool));
/* Sanity */
- if (kind != svn_wc__db_kind_file)
+ if (kind != svn_node_file)
return svn_error_createf(SVN_ERR_NODE_UNEXPECTED_KIND, NULL,
_("Can only get the pristine contents of files; "
"'%s' is not a file"),
@@ -360,7 +335,7 @@ static svn_error_t *
init_adm_tmp_area(const char *path, apr_pool_t *pool)
{
/* SVN_WC__ADM_TMP */
- SVN_ERR(make_adm_subdir(path, SVN_WC__ADM_TMP, FALSE, pool));
+ SVN_ERR(make_adm_subdir(path, SVN_WC__ADM_TMP, pool));
return SVN_NO_ERROR;
}
@@ -387,7 +362,7 @@ init_adm(svn_wc__db_t *db,
/** Make subdirectories. ***/
/* SVN_WC__ADM_PRISTINE */
- SVN_ERR(make_adm_subdir(local_abspath, SVN_WC__ADM_PRISTINE, FALSE, pool));
+ SVN_ERR(make_adm_subdir(local_abspath, SVN_WC__ADM_PRISTINE, pool));
/* ### want to add another directory? do a format bump to ensure that
### all existing working copies get the new directories. or maybe
@@ -428,7 +403,11 @@ svn_wc__internal_ensure_adm(svn_wc__db_t *db,
apr_pool_t *scratch_pool)
{
int format;
- const char *repos_relpath;
+ const char *original_repos_relpath;
+ const char *original_root_url;
+ svn_boolean_t is_op_root;
+ const char *repos_relpath = svn_uri_skip_ancestor(repos_root_url, url,
+ scratch_pool);
svn_wc__db_status_t status;
const char *db_repos_relpath, *db_repos_root_url, *db_repos_uuid;
svn_revnum_t db_revision;
@@ -437,15 +416,11 @@ svn_wc__internal_ensure_adm(svn_wc__db_t *db,
SVN_ERR_ASSERT(url != NULL);
SVN_ERR_ASSERT(repos_root_url != NULL);
SVN_ERR_ASSERT(repos_uuid != NULL);
- SVN_ERR_ASSERT(svn_uri__is_ancestor(repos_root_url, url));
+ SVN_ERR_ASSERT(repos_relpath != NULL);
SVN_ERR(svn_wc__internal_check_wc(&format, db, local_abspath, TRUE,
scratch_pool));
- repos_relpath = svn_uri__is_child(repos_root_url, url, scratch_pool);
- if (repos_relpath == NULL)
- repos_relpath = "";
-
/* Early out: we know we're not dealing with an existing wc, so
just create one. */
if (format == 0)
@@ -456,9 +431,10 @@ svn_wc__internal_ensure_adm(svn_wc__db_t *db,
SVN_ERR(svn_wc__db_read_info(&status, NULL,
&db_revision, &db_repos_relpath,
&db_repos_root_url, &db_repos_uuid,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ &original_repos_relpath, &original_root_url,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, &is_op_root, NULL, NULL,
NULL, NULL, NULL,
db, local_abspath, scratch_pool, scratch_pool));
@@ -497,26 +473,17 @@ svn_wc__internal_ensure_adm(svn_wc__db_t *db,
/* The caller gives us a URL which should match the entry. However,
some callers compensate for an old problem in entry->url and pass
- the copyfrom_url instead. See ^/notes/api-errata/wc002.txt. As
+ the copyfrom_url instead. See ^/notes/api-errata/1.7/wc002.txt. As
a result, we allow the passed URL to match copyfrom_url if it
does not match the entry's primary URL. */
- /* ### comparing URLs, should they be canonicalized first? */
if (strcmp(db_repos_uuid, repos_uuid)
|| strcmp(db_repos_root_url, repos_root_url)
- || !svn_relpath__is_ancestor(db_repos_relpath, repos_relpath))
+ || !svn_relpath_skip_ancestor(db_repos_relpath, repos_relpath))
{
- const char *copyfrom_root_url, *copyfrom_repos_relpath;
-
- SVN_ERR(svn_wc__internal_get_copyfrom_info(&copyfrom_root_url,
- &copyfrom_repos_relpath,
- NULL, NULL, NULL,
- db, local_abspath,
- scratch_pool,
- scratch_pool));
-
- if (copyfrom_root_url == NULL
- || strcmp(copyfrom_root_url, repos_root_url)
- || strcmp(copyfrom_repos_relpath, repos_relpath))
+ if (!is_op_root /* copy_from was set on op-roots only */
+ || original_root_url == NULL
+ || strcmp(original_root_url, repos_root_url)
+ || strcmp(original_repos_relpath, repos_relpath))
return
svn_error_createf(SVN_ERR_WC_OBSTRUCTED_UPDATE, NULL,
_("URL '%s' (uuid: '%s') doesn't match existing "
@@ -556,23 +523,22 @@ svn_wc__adm_destroy(svn_wc__db_t *db,
void *cancel_baton,
apr_pool_t *scratch_pool)
{
- const char *adm_abspath;
+ svn_boolean_t is_wcroot;
SVN_ERR_ASSERT(svn_dirent_is_absolute(dir_abspath));
SVN_ERR(svn_wc__write_check(db, dir_abspath, scratch_pool));
- SVN_ERR(svn_wc__db_get_wcroot(&adm_abspath, db, dir_abspath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_is_wcroot(&is_wcroot, db, dir_abspath, scratch_pool));
/* Well, the coast is clear for blowing away the administrative
directory, which also removes remaining locks */
/* Now close the DB, and we can delete the working copy */
- if (strcmp(adm_abspath, dir_abspath) == 0)
+ if (is_wcroot)
{
- SVN_ERR(svn_wc__db_drop_root(db, adm_abspath, scratch_pool));
- SVN_ERR(svn_io_remove_dir2(svn_wc__adm_child(adm_abspath, NULL,
+ SVN_ERR(svn_wc__db_drop_root(db, dir_abspath, scratch_pool));
+ SVN_ERR(svn_io_remove_dir2(svn_wc__adm_child(dir_abspath, NULL,
scratch_pool),
FALSE,
cancel_func, cancel_baton,
@@ -604,36 +570,15 @@ svn_wc__adm_cleanup_tmp_area(svn_wc__db_t *db,
}
-
svn_error_t *
-svn_wc_create_tmp_file2(apr_file_t **fp,
- const char **new_name,
- const char *path,
- svn_io_file_del_t delete_when,
- apr_pool_t *pool)
+svn_wc__get_tmpdir(const char **tmpdir_abspath,
+ svn_wc_context_t *wc_ctx,
+ const char *wri_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- svn_wc__db_t *db;
- const char *local_abspath;
- const char *temp_dir;
- svn_error_t *err;
-
- SVN_ERR_ASSERT(fp || new_name);
-
- SVN_ERR(svn_wc__db_open(&db,
- NULL /* config */,
- TRUE /* auto_upgrade */,
- TRUE /* enforce_empty_wq */,
- pool, pool));
-
- SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, pool));
- err = svn_wc__db_temp_wcroot_tempdir(&temp_dir, db, local_abspath,
- pool, pool);
- err = svn_error_compose_create(err, svn_wc__db_close(db));
- if (err)
- return svn_error_trace(err);
-
- SVN_ERR(svn_io_open_unique_file3(fp, new_name, temp_dir,
- delete_when, pool, pool));
-
+ SVN_ERR(svn_wc__db_temp_wcroot_tempdir(tmpdir_abspath,
+ wc_ctx->db, wri_abspath,
+ result_pool, scratch_pool));
return SVN_NO_ERROR;
}
diff --git a/subversion/libsvn_wc/adm_ops.c b/subversion/libsvn_wc/adm_ops.c
index ff72d43..a0f8061 100644
--- a/subversion/libsvn_wc/adm_ops.c
+++ b/subversion/libsvn_wc/adm_ops.c
@@ -32,9 +32,7 @@
#include <stdlib.h>
#include <apr_pools.h>
-#include <apr_tables.h>
#include <apr_hash.h>
-#include <apr_file_io.h>
#include <apr_time.h>
#include <apr_errno.h>
@@ -52,14 +50,12 @@
#include "wc.h"
#include "adm_files.h"
-#include "props.h"
-#include "translate.h"
+#include "conflicts.h"
#include "workqueue.h"
#include "svn_private_config.h"
-#include "private/svn_io_private.h"
-#include "private/svn_wc_private.h"
-
+#include "private/svn_subr_private.h"
+#include "private/svn_dep_compat.h"
struct svn_wc_committed_queue_t
@@ -108,11 +104,19 @@ svn_wc__get_committed_queue_pool(const struct svn_wc_committed_queue_t *queue)
* - queue deletion of the old pristine texts by the remembered checksums.
*
* CHECKSUM is the checksum of the new text base for LOCAL_ABSPATH, and must
- * be provided if there is one, else NULL. */
+ * be provided if there is one, else NULL.
+ *
+ * STATUS, KIND, PROP_MODS and OLD_CHECKSUM are the current in-db values of
+ * the node LOCAL_ABSPATH.
+ */
static svn_error_t *
process_committed_leaf(svn_wc__db_t *db,
const char *local_abspath,
svn_boolean_t via_recurse,
+ svn_wc__db_status_t status,
+ svn_node_kind_t kind,
+ svn_boolean_t prop_mods,
+ const svn_checksum_t *old_checksum,
svn_revnum_t new_revnum,
apr_time_t new_changed_date,
const char *new_changed_author,
@@ -122,30 +126,15 @@ process_committed_leaf(svn_wc__db_t *db,
const svn_checksum_t *checksum,
apr_pool_t *scratch_pool)
{
- svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
- const svn_checksum_t *copied_checksum;
svn_revnum_t new_changed_rev = new_revnum;
- svn_boolean_t have_base;
- svn_boolean_t have_work;
- svn_boolean_t had_props;
- svn_boolean_t prop_mods;
svn_skel_t *work_item = NULL;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
- SVN_ERR(svn_wc__db_read_info(&status, &kind, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, &copied_checksum,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, &had_props, &prop_mods,
- &have_base, NULL, &have_work,
- db, local_abspath,
- scratch_pool, scratch_pool));
-
{
const char *adm_abspath;
- if (kind == svn_wc__db_kind_dir)
+ if (kind == svn_node_dir)
adm_abspath = local_abspath;
else
adm_abspath = svn_dirent_dirname(local_abspath, scratch_pool);
@@ -155,11 +144,14 @@ process_committed_leaf(svn_wc__db_t *db,
if (status == svn_wc__db_status_deleted)
{
return svn_error_trace(
- svn_wc__db_op_remove_node(
+ svn_wc__db_base_remove(
db, local_abspath,
- (have_base && !via_recurse)
+ FALSE /* keep_as_working */,
+ FALSE /* queue_deletes */,
+ TRUE /* remove_locks */,
+ (! via_recurse)
? new_revnum : SVN_INVALID_REVNUM,
- kind,
+ NULL, NULL,
scratch_pool));
}
else if (status == svn_wc__db_status_not_present)
@@ -177,7 +169,7 @@ process_committed_leaf(svn_wc__db_t *db,
|| status == svn_wc__db_status_incomplete
|| status == svn_wc__db_status_added);
- if (kind != svn_wc__db_kind_dir)
+ if (kind != svn_node_dir)
{
/* If we sent a delta (meaning: post-copy modification),
then this file will appear in the queue and so we should have
@@ -186,9 +178,9 @@ process_committed_leaf(svn_wc__db_t *db,
{
/* It was copied and not modified. We must have a text
base for it. And the node should have a checksum. */
- SVN_ERR_ASSERT(copied_checksum != NULL);
+ SVN_ERR_ASSERT(old_checksum != NULL);
- checksum = copied_checksum;
+ checksum = old_checksum;
/* Is the node completely unmodified and are we recursing? */
if (via_recurse && !prop_mods)
@@ -250,23 +242,41 @@ svn_wc__process_committed_internal(svn_wc__db_t *db,
const svn_wc_committed_queue_t *queue,
apr_pool_t *scratch_pool)
{
- svn_wc__db_kind_t kind;
+ svn_wc__db_status_t status;
+ svn_node_kind_t kind;
+ const svn_checksum_t *old_checksum;
+ svn_boolean_t prop_mods;
+
+ SVN_ERR(svn_wc__db_read_info(&status, &kind, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, &old_checksum, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, &prop_mods, NULL, NULL, NULL,
+ db, local_abspath,
+ scratch_pool, scratch_pool));
/* NOTE: be wary of making crazy semantic changes in this function, since
svn_wc_process_committed4() calls this. */
SVN_ERR(process_committed_leaf(db, local_abspath, !top_of_recurse,
+ status, kind, prop_mods, old_checksum,
new_revnum, new_date, rev_author,
new_dav_cache,
no_unlock, keep_changelist,
sha1_checksum,
scratch_pool));
- /* Only check kind after processing the node itself. The node might
- have been deleted */
- SVN_ERR(svn_wc__db_read_kind(&kind, db, local_abspath, TRUE, scratch_pool));
+ /* Only check for recursion on nodes that have children */
+ if (kind != svn_node_file
+ || status == svn_wc__db_status_not_present
+ || status == svn_wc__db_status_excluded
+ || status == svn_wc__db_status_server_excluded
+ /* Node deleted -> then no longer a directory */
+ || status == svn_wc__db_status_deleted)
+ {
+ return SVN_NO_ERROR;
+ }
- if (recurse && kind == svn_wc__db_kind_dir)
+ if (recurse)
{
const apr_array_header_t *children;
apr_pool_t *iterpool = svn_pool_create(scratch_pool);
@@ -281,38 +291,17 @@ svn_wc__process_committed_internal(svn_wc__db_t *db,
{
const char *name = APR_ARRAY_IDX(children, i, const char *);
const char *this_abspath;
- svn_wc__db_status_t status;
+ const committed_queue_item_t *cqi;
svn_pool_clear(iterpool);
this_abspath = svn_dirent_join(local_abspath, name, iterpool);
- SVN_ERR(svn_wc__db_read_info(&status, &kind, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- db, this_abspath,
- iterpool, iterpool));
-
- /* We come to this branch since we have committed a copied tree.
- svn_depth_exclude is possible in this situation. So check and
- skip */
- if (status == svn_wc__db_status_excluded)
- continue;
-
sha1_checksum = NULL;
- if (kind != svn_wc__db_kind_dir && queue != NULL)
- {
- const committed_queue_item_t *cqi;
+ cqi = svn_hash_gets(queue->queue, this_abspath);
- cqi = apr_hash_get(queue->queue, this_abspath,
- APR_HASH_KEY_STRING);
- if (cqi != NULL)
- {
- sha1_checksum = cqi->sha1_checksum;
- }
- }
+ if (cqi != NULL)
+ sha1_checksum = cqi->sha1_checksum;
/* Recurse. Pass NULL for NEW_DAV_CACHE, because the
ones present in the current call are only applicable to
@@ -354,7 +343,7 @@ svn_wc__prop_array_to_hash(const apr_array_header_t *props,
{
const svn_prop_t *prop = APR_ARRAY_IDX(props, i, const svn_prop_t *);
if (prop->value != NULL)
- apr_hash_set(prophash, prop->name, APR_HASH_KEY_STRING, prop->value);
+ svn_hash_sets(prophash, prop->name, prop->value);
}
return prophash;
@@ -405,7 +394,7 @@ svn_wc_queue_committed3(svn_wc_committed_queue_t *queue,
cqi->sha1_checksum = sha1_checksum;
cqi->new_dav_cache = svn_wc__prop_array_to_hash(wcprop_changes, queue->pool);
- apr_hash_set(queue->queue, local_abspath, APR_HASH_KEY_STRING, cqi);
+ svn_hash_sets(queue->queue, local_abspath, cqi);
return SVN_NO_ERROR;
}
@@ -500,16 +489,15 @@ svn_wc_process_committed_queue2(svn_wc_committed_queue_t *queue,
wc_ctx->db, cqi->local_abspath,
iterpool, iterpool));
- if (! apr_hash_get(run_wqs, wcroot_abspath, APR_HASH_KEY_STRING))
+ if (! svn_hash_gets(run_wqs, wcroot_abspath))
{
wcroot_abspath = apr_pstrdup(scratch_pool, wcroot_abspath);
- apr_hash_set(run_wqs, wcroot_abspath, APR_HASH_KEY_STRING,
- wcroot_abspath);
+ svn_hash_sets(run_wqs, wcroot_abspath, wcroot_abspath);
}
}
/* Make sure nothing happens if this function is called again. */
- SVN_ERR(svn_hash__clear(queue->queue, iterpool));
+ apr_hash_clear(queue->queue);
/* Ok; everything is committed now. Now we can start calling callbacks */
@@ -534,218 +522,42 @@ svn_wc_process_committed_queue2(svn_wc_committed_queue_t *queue,
return SVN_NO_ERROR;
}
-
-/* Remove/erase PATH from the working copy. This involves deleting PATH
- * from the physical filesystem. PATH is assumed to be an unversioned file
- * or directory.
+/* Schedule the single node at LOCAL_ABSPATH, of kind KIND, for addition in
+ * its parent directory in the WC. It will have the regular properties
+ * provided in PROPS, or none if that is NULL.
*
- * If ignore_enoent is TRUE, ignore missing targets.
+ * If the node is a file, set its on-disk executable and read-only bits to
+ * match its properties and lock state,
+ * ### only if it has an svn:executable or svn:needs-lock property.
+ * ### This is to match the previous behaviour of setting its props
+ * afterwards by calling svn_wc_prop_set4(), but is not very clean.
*
- * If CANCEL_FUNC is non-null, invoke it with CANCEL_BATON at various
- * points, return any error immediately.
+ * Sync the on-disk executable and read-only bits accordingly.
*/
static svn_error_t *
-erase_unversioned_from_wc(const char *path,
- svn_boolean_t ignore_enoent,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- apr_pool_t *scratch_pool)
-{
- svn_error_t *err;
-
- /* Optimize the common case: try to delete the file */
- err = svn_io_remove_file2(path, ignore_enoent, scratch_pool);
- if (err)
- {
- /* Then maybe it was a directory? */
- svn_error_clear(err);
-
- err = svn_io_remove_dir2(path, ignore_enoent, cancel_func, cancel_baton,
- scratch_pool);
-
- if (err)
- {
- /* We're unlikely to end up here. But we need this fallback
- to make sure we report the right error *and* try the
- correct deletion at least once. */
- svn_node_kind_t kind;
-
- svn_error_clear(err);
- SVN_ERR(svn_io_check_path(path, &kind, scratch_pool));
- if (kind == svn_node_file)
- SVN_ERR(svn_io_remove_file2(path, ignore_enoent, scratch_pool));
- else if (kind == svn_node_dir)
- SVN_ERR(svn_io_remove_dir2(path, ignore_enoent,
- cancel_func, cancel_baton,
- scratch_pool));
- else if (kind == svn_node_none)
- return svn_error_createf(SVN_ERR_BAD_FILENAME, NULL,
- _("'%s' does not exist"),
- svn_dirent_local_style(path,
- scratch_pool));
- else
- return svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
- _("Unsupported node kind for path '%s'"),
- svn_dirent_local_style(path,
- scratch_pool));
-
- }
- }
-
- return SVN_NO_ERROR;
-}
-
-
-svn_error_t *
-svn_wc_delete4(svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- svn_boolean_t keep_local,
- svn_boolean_t delete_unversioned_target,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- svn_wc_notify_func2_t notify_func,
- void *notify_baton,
- apr_pool_t *scratch_pool)
-{
- apr_pool_t *pool = scratch_pool;
- svn_wc__db_t *db = wc_ctx->db;
- svn_error_t *err;
- svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
- svn_boolean_t conflicted;
- const apr_array_header_t *conflicts;
-
- err = svn_wc__db_read_info(&status, &kind, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, &conflicted,
- NULL, NULL, NULL, NULL, NULL, NULL,
- db, local_abspath, pool, pool);
-
- if (delete_unversioned_target &&
- err != NULL && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
- {
- svn_error_clear(err);
-
- if (!keep_local)
- SVN_ERR(erase_unversioned_from_wc(local_abspath, FALSE,
- cancel_func, cancel_baton,
- pool));
- return SVN_NO_ERROR;
- }
- else
- SVN_ERR(err);
-
- switch (status)
- {
- /* svn_wc__db_status_server_excluded handled by svn_wc__db_op_delete */
- case svn_wc__db_status_excluded:
- case svn_wc__db_status_not_present:
- return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
- _("'%s' cannot be deleted"),
- svn_dirent_local_style(local_abspath, pool));
-
- /* Explicitly ignore other statii */
- default:
- break;
- }
-
- if (status == svn_wc__db_status_normal
- && kind == svn_wc__db_kind_dir)
- {
- svn_boolean_t is_wcroot;
- SVN_ERR(svn_wc__db_is_wcroot(&is_wcroot, db, local_abspath, pool));
-
- if (is_wcroot)
- return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
- _("'%s' is the root of a working copy and "
- "cannot be deleted"),
- svn_dirent_local_style(local_abspath, pool));
- }
-
- /* Verify if we have a write lock on the parent of this node as we might
- be changing the childlist of that directory. */
- SVN_ERR(svn_wc__write_check(db, svn_dirent_dirname(local_abspath, pool),
- pool));
-
- /* Read conflicts, to allow deleting the markers after updating the DB */
- if (!keep_local && conflicted)
- SVN_ERR(svn_wc__db_read_conflicts(&conflicts, db, local_abspath,
- scratch_pool, scratch_pool));
-
- SVN_ERR(svn_wc__db_op_delete(db, local_abspath,
- notify_func, notify_baton,
- cancel_func, cancel_baton,
- pool));
-
- if (!keep_local && conflicted && conflicts != NULL)
- {
- int i;
-
- /* Do we have conflict markers that should be removed? */
- for (i = 0; i < conflicts->nelts; i++)
- {
- const svn_wc_conflict_description2_t *desc;
-
- desc = APR_ARRAY_IDX(conflicts, i,
- const svn_wc_conflict_description2_t*);
-
- if (desc->kind == svn_wc_conflict_kind_text)
- {
- if (desc->base_abspath != NULL)
- {
- SVN_ERR(svn_io_remove_file2(desc->base_abspath, TRUE,
- scratch_pool));
- }
- if (desc->their_abspath != NULL)
- {
- SVN_ERR(svn_io_remove_file2(desc->their_abspath, TRUE,
- scratch_pool));
- }
- if (desc->my_abspath != NULL)
- {
- SVN_ERR(svn_io_remove_file2(desc->my_abspath, TRUE,
- scratch_pool));
- }
- }
- else if (desc->kind == svn_wc_conflict_kind_property
- && desc->their_abspath != NULL)
- {
- SVN_ERR(svn_io_remove_file2(desc->their_abspath, TRUE,
- scratch_pool));
- }
- }
- }
-
- /* By the time we get here, the db knows that everything that is still at
- LOCAL_ABSPATH is unversioned. */
- if (!keep_local)
- {
- SVN_ERR(erase_unversioned_from_wc(local_abspath, TRUE,
- cancel_func, cancel_baton,
- pool));
- }
-
- return SVN_NO_ERROR;
-}
-
-
-/* Schedule the single node at LOCAL_ABSPATH, of kind KIND, for addition in
- * its parent directory in the WC. It will have no properties. */
-static svn_error_t *
add_from_disk(svn_wc__db_t *db,
const char *local_abspath,
svn_node_kind_t kind,
- svn_wc_notify_func2_t notify_func,
- void *notify_baton,
+ const apr_hash_t *props,
apr_pool_t *scratch_pool)
{
if (kind == svn_node_file)
{
- SVN_ERR(svn_wc__db_op_add_file(db, local_abspath, NULL, scratch_pool));
+ svn_skel_t *work_item = NULL;
+
+ if (props && (svn_prop_get_value(props, SVN_PROP_EXECUTABLE)
+ || svn_prop_get_value(props, SVN_PROP_NEEDS_LOCK)))
+ SVN_ERR(svn_wc__wq_build_sync_file_flags(&work_item, db, local_abspath,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(svn_wc__db_op_add_file(db, local_abspath, props, work_item,
+ scratch_pool));
+ if (work_item)
+ SVN_ERR(svn_wc__wq_run(db, local_abspath, NULL, NULL, scratch_pool));
}
else
{
- SVN_ERR(svn_wc__db_op_add_directory(db, local_abspath, NULL,
+ SVN_ERR(svn_wc__db_op_add_directory(db, local_abspath, props, NULL,
scratch_pool));
}
@@ -768,7 +580,7 @@ check_can_add_to_parent(const char **repos_root_url,
{
const char *parent_abspath = svn_dirent_dirname(local_abspath, scratch_pool);
svn_wc__db_status_t parent_status;
- svn_wc__db_kind_t parent_kind;
+ svn_node_kind_t parent_kind;
svn_error_t *err;
SVN_ERR(svn_wc__write_check(db, parent_abspath, scratch_pool));
@@ -801,7 +613,7 @@ check_can_add_to_parent(const char **repos_root_url,
svn_dirent_local_style(local_abspath,
scratch_pool));
}
- else if (parent_kind != svn_wc__db_kind_dir)
+ else if (parent_kind != svn_node_dir)
return svn_error_createf(SVN_ERR_NODE_UNEXPECTED_KIND, NULL,
_("Can't schedule an addition of '%s'"
" below a not-directory node"),
@@ -851,6 +663,7 @@ check_can_add_node(svn_node_kind_t *kind_p,
const char *base_name = svn_dirent_basename(local_abspath, scratch_pool);
svn_boolean_t is_wc_root;
svn_node_kind_t kind;
+ svn_boolean_t is_special;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
SVN_ERR_ASSERT(!copyfrom_url || (svn_uri_is_canonical(copyfrom_url,
@@ -867,7 +680,8 @@ check_can_add_node(svn_node_kind_t *kind_p,
SVN_ERR(svn_path_check_valid(local_abspath, scratch_pool));
/* Make sure something's there; set KIND and *KIND_P. */
- SVN_ERR(svn_io_check_path(local_abspath, &kind, scratch_pool));
+ SVN_ERR(svn_io_check_special_path(local_abspath, &kind, &is_special,
+ scratch_pool));
if (kind == svn_node_none)
return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
_("'%s' not found"),
@@ -929,14 +743,20 @@ check_can_add_node(svn_node_kind_t *kind_p,
SVN_ERR_ASSERT(!is_wc_root);
break;
case svn_wc__db_status_normal:
- if (copyfrom_url)
- {
- SVN_ERR(svn_wc__check_wc_root(&is_wc_root, NULL, NULL,
- db, local_abspath,
- scratch_pool));
+ SVN_ERR(svn_wc__db_is_wcroot(&is_wc_root, db, local_abspath,
+ scratch_pool));
- if (is_wc_root)
- break;
+ if (is_wc_root && copyfrom_url)
+ {
+ /* Integrate a sub working copy in a parent working copy
+ (legacy behavior) */
+ break;
+ }
+ else if (is_wc_root && is_special)
+ {
+ /* Adding a symlink to a working copy root.
+ (special_tests.py 23: externals as symlink targets) */
+ break;
}
/* else: Fall through in default error */
@@ -1099,7 +919,7 @@ svn_wc_add4(svn_wc_context_t *wc_ctx,
if (!copyfrom_url) /* Case 2a: It's a simple add */
{
- SVN_ERR(add_from_disk(db, local_abspath, kind, notify_func, notify_baton,
+ SVN_ERR(add_from_disk(db, local_abspath, kind, NULL,
scratch_pool));
if (kind == svn_node_dir && !db_row_exists)
{
@@ -1146,6 +966,7 @@ svn_wc_add4(svn_wc_context_t *wc_ctx,
repos_root_url, repos_uuid,
copyfrom_rev,
NULL /* children */, depth,
+ FALSE /* is_move */,
NULL /* conflicts */,
NULL /* work items */,
scratch_pool));
@@ -1172,11 +993,12 @@ svn_wc_add4(svn_wc_context_t *wc_ctx,
svn_error_t *
-svn_wc_add_from_disk(svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- svn_wc_notify_func2_t notify_func,
- void *notify_baton,
- apr_pool_t *scratch_pool)
+svn_wc_add_from_disk2(svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ const apr_hash_t *props,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool)
{
svn_node_kind_t kind;
@@ -1184,8 +1006,21 @@ svn_wc_add_from_disk(svn_wc_context_t *wc_ctx,
NULL, SVN_INVALID_REVNUM, scratch_pool));
SVN_ERR(check_can_add_to_parent(NULL, NULL, wc_ctx->db, local_abspath,
scratch_pool, scratch_pool));
- SVN_ERR(add_from_disk(wc_ctx->db, local_abspath, kind,
- notify_func, notify_baton,
+
+ /* Canonicalize and check the props */
+ if (props)
+ {
+ apr_hash_t *new_props;
+
+ SVN_ERR(svn_wc__canonicalize_props(
+ &new_props,
+ local_abspath, kind, props, FALSE /* skip_some_checks */,
+ scratch_pool, scratch_pool));
+ props = new_props;
+ }
+
+ /* Add to the DB and maybe update on-disk executable read-only bits */
+ SVN_ERR(add_from_disk(wc_ctx->db, local_abspath, kind, props,
scratch_pool));
/* Report the addition to the caller. */
@@ -1195,817 +1030,13 @@ svn_wc_add_from_disk(svn_wc_context_t *wc_ctx,
svn_wc_notify_add,
scratch_pool);
notify->kind = kind;
+ notify->mime_type = svn_prop_get_value(props, SVN_PROP_MIME_TYPE);
(*notify_func)(notify_baton, notify, scratch_pool);
}
return SVN_NO_ERROR;
}
-/* Thoughts on Reversion.
-
- What does is mean to revert a given PATH in a tree? We'll
- consider things by their modifications.
-
- Adds
-
- - For files, svn_wc_remove_from_revision_control(), baby.
-
- - Added directories may contain nothing but added children, and
- reverting the addition of a directory necessarily means reverting
- the addition of all the directory's children. Again,
- svn_wc_remove_from_revision_control() should do the trick.
-
- Deletes
-
- - Restore properties to their unmodified state.
-
- - For files, restore the pristine contents, and reset the schedule
- to 'normal'.
-
- - For directories, reset the schedule to 'normal'. All children
- of a directory marked for deletion must also be marked for
- deletion, but it's okay for those children to remain deleted even
- if their parent directory is restored. That's what the
- recursive flag is for.
-
- Replaces
-
- - Restore properties to their unmodified state.
-
- - For files, restore the pristine contents, and reset the schedule
- to 'normal'.
-
- - For directories, reset the schedule to normal. A replaced
- directory can have deleted children (left over from the initial
- deletion), replaced children (children of the initial deletion
- now re-added), and added children (new entries under the
- replaced directory). Since this is technically an addition, it
- necessitates recursion.
-
- Modifications
-
- - Restore properties and, for files, contents to their unmodified
- state.
-
-*/
-
-
-/* Remove conflict file CONFLICT_ABSPATH, which may not exist, and set
- * *NOTIFY_REQUIRED to TRUE if the file was present and removed. */
-static svn_error_t *
-remove_conflict_file(svn_boolean_t *notify_required,
- const char *conflict_abspath,
- const char *local_abspath,
- apr_pool_t *scratch_pool)
-{
- if (conflict_abspath)
- {
- svn_error_t *err = svn_io_remove_file2(conflict_abspath, FALSE,
- scratch_pool);
- if (err)
- svn_error_clear(err);
- else
- *notify_required = TRUE;
- }
-
- return SVN_NO_ERROR;
-}
-
-
-/* Sort copied children obtained from the revert list based on
- * their paths in descending order (longest paths first). */
-static int
-compare_revert_list_copied_children(const void *a, const void *b)
-{
- const svn_wc__db_revert_list_copied_child_info_t * const *ca = a;
- const svn_wc__db_revert_list_copied_child_info_t * const *cb = b;
- int i;
-
- i = svn_path_compare_paths(ca[0]->abspath, cb[0]->abspath);
-
- /* Reverse the result of svn_path_compare_paths() to achieve
- * descending order. */
- return -i;
-}
-
-
-/* Remove all reverted copied children from the directory at LOCAL_ABSPATH.
- * If REMOVE_SELF is TRUE, try to remove LOCAL_ABSPATH itself (REMOVE_SELF
- * should be set if LOCAL_ABSPATH is itself a reverted copy).
- *
- * If REMOVED_SELF is not NULL, indicate in *REMOVED_SELF whether
- * LOCAL_ABSPATH itself was removed.
- *
- * All reverted copied file children are removed from disk. Reverted copied
- * directories left empty as a result are also removed from disk.
- */
-static svn_error_t *
-revert_restore_handle_copied_dirs(svn_boolean_t *removed_self,
- svn_wc__db_t *db,
- const char *local_abspath,
- svn_boolean_t remove_self,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- apr_pool_t *scratch_pool)
-{
- const apr_array_header_t *copied_children;
- svn_wc__db_revert_list_copied_child_info_t *child_info;
- int i;
- svn_node_kind_t on_disk;
- apr_pool_t *iterpool;
- svn_error_t *err;
-
- if (removed_self)
- *removed_self = FALSE;
-
- SVN_ERR(svn_wc__db_revert_list_read_copied_children(&copied_children,
- db, local_abspath,
- scratch_pool,
- scratch_pool));
- iterpool = svn_pool_create(scratch_pool);
-
- /* Remove all copied file children. */
- for (i = 0; i < copied_children->nelts; i++)
- {
- child_info = APR_ARRAY_IDX(
- copied_children, i,
- svn_wc__db_revert_list_copied_child_info_t *);
-
- if (cancel_func)
- SVN_ERR(cancel_func(cancel_baton));
-
- if (child_info->kind != svn_wc__db_kind_file)
- continue;
-
- svn_pool_clear(iterpool);
-
- /* Make sure what we delete from disk is really a file. */
- SVN_ERR(svn_io_check_path(child_info->abspath, &on_disk, iterpool));
- if (on_disk != svn_node_file)
- continue;
-
- SVN_ERR(svn_io_remove_file2(child_info->abspath, TRUE, iterpool));
- }
-
- /* Delete every empty child directory.
- * We cannot delete children recursively since we want to keep any files
- * that still exist on disk (e.g. unversioned files within the copied tree).
- * So sort the children list such that longest paths come first and try to
- * remove each child directory in order. */
- qsort(copied_children->elts, copied_children->nelts,
- sizeof(svn_wc__db_revert_list_copied_child_info_t *),
- compare_revert_list_copied_children);
- for (i = 0; i < copied_children->nelts; i++)
- {
- child_info = APR_ARRAY_IDX(
- copied_children, i,
- svn_wc__db_revert_list_copied_child_info_t *);
-
- if (cancel_func)
- SVN_ERR(cancel_func(cancel_baton));
-
- if (child_info->kind != svn_wc__db_kind_dir)
- continue;
-
- svn_pool_clear(iterpool);
-
- err = svn_io_dir_remove_nonrecursive(child_info->abspath, iterpool);
- if (err)
- {
- if (APR_STATUS_IS_ENOENT(err->apr_err) ||
- SVN__APR_STATUS_IS_ENOTDIR(err->apr_err) ||
- APR_STATUS_IS_ENOTEMPTY(err->apr_err))
- svn_error_clear(err);
- else
- return svn_error_trace(err);
- }
- }
-
- if (remove_self)
- {
- /* Delete LOCAL_ABSPATH itself if no children are left. */
- err = svn_io_dir_remove_nonrecursive(local_abspath, iterpool);
- if (err)
- {
- if (APR_STATUS_IS_ENOTEMPTY(err->apr_err))
- svn_error_clear(err);
- else
- return svn_error_trace(err);
- }
- else if (removed_self)
- *removed_self = TRUE;
- }
-
- svn_pool_destroy(iterpool);
-
- return SVN_NO_ERROR;
-}
-
-
-/* Make the working tree under LOCAL_ABSPATH to depth DEPTH match the
- versioned tree. This function is called after svn_wc__db_op_revert
- has done the database revert and created the revert list. Notifies
- for all paths equal to or below LOCAL_ABSPATH that are reverted. */
-static svn_error_t *
-revert_restore(svn_wc__db_t *db,
- const char *local_abspath,
- svn_depth_t depth,
- svn_boolean_t use_commit_times,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- svn_wc_notify_func2_t notify_func,
- void *notify_baton,
- apr_pool_t *scratch_pool)
-{
- svn_error_t *err;
- svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
- svn_node_kind_t on_disk;
- svn_boolean_t notify_required;
- const char *conflict_old;
- const char *conflict_new;
- const char *conflict_working;
- const char *prop_reject;
- svn_filesize_t recorded_size;
- apr_time_t recorded_mod_time;
- apr_finfo_t finfo;
-#ifdef HAVE_SYMLINK
- svn_boolean_t special;
-#endif
- svn_boolean_t copied_here;
- svn_wc__db_kind_t reverted_kind;
-
- if (cancel_func)
- SVN_ERR(cancel_func(cancel_baton));
-
- SVN_ERR(svn_wc__db_revert_list_read(&notify_required,
- &conflict_old, &conflict_new,
- &conflict_working, &prop_reject,
- &copied_here, &reverted_kind,
- db, local_abspath,
- scratch_pool, scratch_pool));
-
- err = svn_wc__db_read_info(&status, &kind,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- &recorded_size, &recorded_mod_time, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- db, local_abspath, scratch_pool, scratch_pool);
-
- if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
- {
- svn_error_clear(err);
-
- if (!copied_here)
- {
- if (notify_func && notify_required)
- notify_func(notify_baton,
- svn_wc_create_notify(local_abspath,
- svn_wc_notify_revert,
- scratch_pool),
- scratch_pool);
-
- if (notify_func)
- SVN_ERR(svn_wc__db_revert_list_notify(notify_func, notify_baton,
- db, local_abspath,
- scratch_pool));
- return SVN_NO_ERROR;
- }
- else
- {
- /* ### Initialise to values which prevent the code below from
- * ### trying to restore anything to disk.
- * ### 'status' should be status_unknown but that doesn't exist. */
- status = svn_wc__db_status_normal;
- kind = svn_wc__db_kind_unknown;
- recorded_size = SVN_INVALID_FILESIZE;
- recorded_mod_time = 0;
- }
- }
- else if (err)
- return svn_error_trace(err);
-
- err = svn_io_stat(&finfo, local_abspath,
- APR_FINFO_TYPE | APR_FINFO_LINK
- | APR_FINFO_SIZE | APR_FINFO_MTIME
- | SVN__APR_FINFO_EXECUTABLE
- | SVN__APR_FINFO_READONLY,
- scratch_pool);
-
- if (err && (APR_STATUS_IS_ENOENT(err->apr_err)
- || SVN__APR_STATUS_IS_ENOTDIR(err->apr_err)))
- {
- svn_error_clear(err);
- on_disk = svn_node_none;
-#ifdef HAVE_SYMLINK
- special = FALSE;
-#endif
- }
- else
- {
- if (finfo.filetype == APR_REG || finfo.filetype == APR_LNK)
- on_disk = svn_node_file;
- else if (finfo.filetype == APR_DIR)
- on_disk = svn_node_dir;
- else
- on_disk = svn_node_unknown;
-
-#ifdef HAVE_SYMLINK
- special = (finfo.filetype == APR_LNK);
-#endif
- }
-
- if (copied_here)
- {
- /* The revert target itself is the op-root of a copy. */
- if (reverted_kind == svn_wc__db_kind_file && on_disk == svn_node_file)
- {
- SVN_ERR(svn_io_remove_file2(local_abspath, TRUE, scratch_pool));
- on_disk = svn_node_none;
- }
- else if (reverted_kind == svn_wc__db_kind_dir && on_disk == svn_node_dir)
- {
- svn_boolean_t removed;
-
- SVN_ERR(revert_restore_handle_copied_dirs(&removed, db,
- local_abspath, TRUE,
- cancel_func, cancel_baton,
- scratch_pool));
- if (removed)
- on_disk = svn_node_none;
- }
- }
-
- /* If we expect a versioned item to be present then check that any
- item on disk matches the versioned item, if it doesn't match then
- fix it or delete it. */
- if (on_disk != svn_node_none
- && status != svn_wc__db_status_server_excluded
- && status != svn_wc__db_status_deleted
- && status != svn_wc__db_status_excluded
- && status != svn_wc__db_status_not_present)
- {
- if (on_disk == svn_node_dir && kind != svn_wc__db_kind_dir)
- {
- SVN_ERR(svn_io_remove_dir2(local_abspath, FALSE,
- cancel_func, cancel_baton, scratch_pool));
- on_disk = svn_node_none;
- }
- else if (on_disk == svn_node_file && kind != svn_wc__db_kind_file)
- {
-#ifdef HAVE_SYMLINK
- /* Preserve symlinks pointing at directories. Changes on the
- * directory node have been reverted. The symlink should remain. */
- if (!(special && kind == svn_wc__db_kind_dir))
-#endif
- {
- SVN_ERR(svn_io_remove_file2(local_abspath, FALSE, scratch_pool));
- on_disk = svn_node_none;
- }
- }
- else if (on_disk == svn_node_file)
- {
- svn_boolean_t modified;
- apr_hash_t *props;
-#ifdef HAVE_SYMLINK
- svn_string_t *special_prop;
-#endif
-
- SVN_ERR(svn_wc__db_read_pristine_props(&props, db, local_abspath,
- scratch_pool, scratch_pool));
-
-#ifdef HAVE_SYMLINK
- special_prop = apr_hash_get(props, SVN_PROP_SPECIAL,
- APR_HASH_KEY_STRING);
-
- if ((special_prop != NULL) != special)
- {
- /* File/symlink mismatch. */
- SVN_ERR(svn_io_remove_file2(local_abspath, FALSE, scratch_pool));
- on_disk = svn_node_none;
- }
- else
-#endif
- {
- /* Issue #1663 asserts that we should compare a file in its
- working copy format here, but before r1101473 we would only
- do that if the file was already unequal to its recorded
- information.
-
- r1101473 removes the option of asking for a working format
- compare but *also* check the recorded information first, as
- that combination doesn't guarantee a stable behavior.
- (See the revert_test.py: revert_reexpand_keyword)
-
- But to have the same issue #1663 behavior for revert as we
- had in <=1.6 we only have to check the recorded information
- ourselves. And we already have everything we need, because
- we called stat ourselves. */
- if (recorded_size != SVN_INVALID_FILESIZE
- && recorded_mod_time != 0
- && recorded_size == finfo.size
- && recorded_mod_time == finfo.mtime)
- {
- modified = FALSE;
- }
- else
- SVN_ERR(svn_wc__internal_file_modified_p(&modified,
- db, local_abspath,
- TRUE, scratch_pool));
-
- if (modified)
- {
- SVN_ERR(svn_io_remove_file2(local_abspath, FALSE,
- scratch_pool));
- on_disk = svn_node_none;
- }
- else
- {
- svn_boolean_t read_only;
- svn_string_t *needs_lock_prop;
-
- SVN_ERR(svn_io__is_finfo_read_only(&read_only, &finfo,
- scratch_pool));
-
- needs_lock_prop = apr_hash_get(props, SVN_PROP_NEEDS_LOCK,
- APR_HASH_KEY_STRING);
- if (needs_lock_prop && !read_only)
- {
- SVN_ERR(svn_io_set_file_read_only(local_abspath,
- FALSE, scratch_pool));
- notify_required = TRUE;
- }
- else if (!needs_lock_prop && read_only)
- {
- SVN_ERR(svn_io_set_file_read_write(local_abspath,
- FALSE, scratch_pool));
- notify_required = TRUE;
- }
-
-#if !defined(WIN32) && !defined(__OS2__)
-#ifdef HAVE_SYMLINK
- if (!special)
-#endif
- {
- svn_boolean_t executable;
- svn_string_t *executable_prop;
-
- SVN_ERR(svn_io__is_finfo_executable(&executable, &finfo,
- scratch_pool));
- executable_prop = apr_hash_get(props, SVN_PROP_EXECUTABLE,
- APR_HASH_KEY_STRING);
- if (executable_prop && !executable)
- {
- SVN_ERR(svn_io_set_file_executable(local_abspath,
- TRUE, FALSE,
- scratch_pool));
- notify_required = TRUE;
- }
- else if (!executable_prop && executable)
- {
- SVN_ERR(svn_io_set_file_executable(local_abspath,
- FALSE, FALSE,
- scratch_pool));
- notify_required = TRUE;
- }
- }
-#endif
- }
- }
- }
- }
-
- /* If we expect a versioned item to be present and there is nothing
- on disk then recreate it. */
- if (on_disk == svn_node_none
- && status != svn_wc__db_status_server_excluded
- && status != svn_wc__db_status_deleted
- && status != svn_wc__db_status_excluded
- && status != svn_wc__db_status_not_present)
- {
- if (kind == svn_wc__db_kind_dir)
- SVN_ERR(svn_io_dir_make(local_abspath, APR_OS_DEFAULT, scratch_pool));
-
- if (kind == svn_wc__db_kind_file)
- {
- svn_skel_t *work_item;
-
- /* ### Get the checksum from read_info above and pass in here? */
- SVN_ERR(svn_wc__wq_build_file_install(&work_item, db, local_abspath,
- NULL, use_commit_times, TRUE,
- scratch_pool, scratch_pool));
- SVN_ERR(svn_wc__db_wq_add(db, local_abspath, work_item,
- scratch_pool));
- SVN_ERR(svn_wc__wq_run(db, local_abspath, cancel_func, cancel_baton,
- scratch_pool));
- }
- notify_required = TRUE;
- }
-
- SVN_ERR(remove_conflict_file(&notify_required, conflict_old,
- local_abspath, scratch_pool));
- SVN_ERR(remove_conflict_file(&notify_required, conflict_new,
- local_abspath, scratch_pool));
- SVN_ERR(remove_conflict_file(&notify_required, conflict_working,
- local_abspath, scratch_pool));
- SVN_ERR(remove_conflict_file(&notify_required, prop_reject,
- local_abspath, scratch_pool));
-
- if (notify_func && notify_required)
- notify_func(notify_baton,
- svn_wc_create_notify(local_abspath, svn_wc_notify_revert,
- scratch_pool),
- scratch_pool);
-
- if (depth == svn_depth_infinity && kind == svn_wc__db_kind_dir)
- {
- apr_pool_t *iterpool = svn_pool_create(scratch_pool);
- const apr_array_header_t *children;
- int i;
-
- SVN_ERR(revert_restore_handle_copied_dirs(NULL, db, local_abspath, FALSE,
- cancel_func, cancel_baton,
- iterpool));
-
- SVN_ERR(svn_wc__db_read_children_of_working_node(&children, db,
- local_abspath,
- scratch_pool,
- iterpool));
- for (i = 0; i < children->nelts; ++i)
- {
- const char *child_abspath;
-
- svn_pool_clear(iterpool);
-
- child_abspath = svn_dirent_join(local_abspath,
- APR_ARRAY_IDX(children, i,
- const char *),
- iterpool);
-
- SVN_ERR(revert_restore(db, child_abspath, depth,
- use_commit_times,
- cancel_func, cancel_baton,
- notify_func, notify_baton,
- iterpool));
- }
-
- svn_pool_destroy(iterpool);
- }
-
- if (notify_func)
- SVN_ERR(svn_wc__db_revert_list_notify(notify_func, notify_baton,
- db, local_abspath, scratch_pool));
- return SVN_NO_ERROR;
-}
-
-
-/* Revert tree LOCAL_ABSPATH to depth DEPTH and notify for all
- reverts. */
-static svn_error_t *
-new_revert_internal(svn_wc__db_t *db,
- const char *local_abspath,
- svn_depth_t depth,
- svn_boolean_t use_commit_times,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- svn_wc_notify_func2_t notify_func,
- void *notify_baton,
- apr_pool_t *scratch_pool)
-{
- svn_error_t *err;
-
- SVN_ERR_ASSERT(depth == svn_depth_empty || depth == svn_depth_infinity);
-
- /* We should have a write lock on the parent of local_abspath, except
- when local_abspath is the working copy root. */
- {
- const char *dir_abspath;
-
- SVN_ERR(svn_wc__db_get_wcroot(&dir_abspath, db, local_abspath,
- scratch_pool, scratch_pool));
-
- if (svn_dirent_is_child(dir_abspath, local_abspath, NULL))
- dir_abspath = svn_dirent_dirname(local_abspath, scratch_pool);
-
- SVN_ERR(svn_wc__write_check(db, dir_abspath, scratch_pool));
- }
-
- err = svn_wc__db_op_revert(db, local_abspath, depth,
- scratch_pool, scratch_pool);
-
- if (!err)
- err = revert_restore(db, local_abspath, depth,
- use_commit_times,
- cancel_func, cancel_baton,
- notify_func, notify_baton,
- scratch_pool);
-
- err = svn_error_compose_create(err,
- svn_wc__db_revert_list_done(db,
- local_abspath,
- scratch_pool));
-
- return err;
-}
-
-
-/* Revert files in LOCAL_ABSPATH to depth DEPTH that match
- CHANGELIST_HASH and notify for all reverts. */
-static svn_error_t *
-new_revert_changelist(svn_wc__db_t *db,
- const char *local_abspath,
- svn_depth_t depth,
- svn_boolean_t use_commit_times,
- apr_hash_t *changelist_hash,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- svn_wc_notify_func2_t notify_func,
- void *notify_baton,
- apr_pool_t *scratch_pool)
-{
- apr_pool_t *iterpool;
- const apr_array_header_t *children;
- int i;
-
- if (cancel_func)
- SVN_ERR(cancel_func(cancel_baton));
-
- /* Revert this node (depth=empty) if it matches one of the changelists. */
- if (svn_wc__internal_changelist_match(db, local_abspath, changelist_hash,
- scratch_pool))
- SVN_ERR(new_revert_internal(db, local_abspath,
- svn_depth_empty, use_commit_times,
- cancel_func, cancel_baton,
- notify_func, notify_baton,
- scratch_pool));
-
- if (depth == svn_depth_empty)
- return SVN_NO_ERROR;
-
- iterpool = svn_pool_create(scratch_pool);
-
- /* We can handle both depth=files and depth=immediates by setting
- depth=empty here. We don't need to distinguish files and
- directories when making the recursive call because directories
- can never match a changelist, so making the recursive call for
- directories when asked for depth=files is a no-op. */
- if (depth == svn_depth_files || depth == svn_depth_immediates)
- depth = svn_depth_empty;
-
- SVN_ERR(svn_wc__db_read_children_of_working_node(&children, db,
- local_abspath,
- scratch_pool,
- iterpool));
- for (i = 0; i < children->nelts; ++i)
- {
- const char *child_abspath;
-
- svn_pool_clear(iterpool);
-
- child_abspath = svn_dirent_join(local_abspath,
- APR_ARRAY_IDX(children, i,
- const char *),
- iterpool);
-
- SVN_ERR(new_revert_changelist(db, child_abspath, depth,
- use_commit_times, changelist_hash,
- cancel_func, cancel_baton,
- notify_func, notify_baton,
- iterpool));
- }
-
- svn_pool_destroy(iterpool);
-
- return SVN_NO_ERROR;
-}
-
-
-/* Does a partially recursive revert of LOCAL_ABSPATH to depth DEPTH
- (which must be either svn_depth_files or svn_depth_immediates) by
- doing a non-recursive revert on each permissible path. Notifies
- all reverted paths.
-
- ### This won't revert a copied dir with one level of children since
- ### the non-recursive revert on the dir will fail. Not sure how a
- ### partially recursive revert should handle actual-only nodes. */
-static svn_error_t *
-new_revert_partial(svn_wc__db_t *db,
- const char *local_abspath,
- svn_depth_t depth,
- svn_boolean_t use_commit_times,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- svn_wc_notify_func2_t notify_func,
- void *notify_baton,
- apr_pool_t *scratch_pool)
-{
- apr_pool_t *iterpool;
- const apr_array_header_t *children;
- int i;
-
- SVN_ERR_ASSERT(depth == svn_depth_files || depth == svn_depth_immediates);
-
- if (cancel_func)
- SVN_ERR(cancel_func(cancel_baton));
-
- iterpool = svn_pool_create(scratch_pool);
-
- /* Revert the root node itself (depth=empty), then move on to the
- children. */
- SVN_ERR(new_revert_internal(db, local_abspath, svn_depth_empty,
- use_commit_times, cancel_func, cancel_baton,
- notify_func, notify_baton, iterpool));
-
- SVN_ERR(svn_wc__db_read_children_of_working_node(&children, db,
- local_abspath,
- scratch_pool,
- iterpool));
- for (i = 0; i < children->nelts; ++i)
- {
- const char *child_abspath;
-
- svn_pool_clear(iterpool);
-
- child_abspath = svn_dirent_join(local_abspath,
- APR_ARRAY_IDX(children, i, const char *),
- iterpool);
-
- /* For svn_depth_files: don't revert non-files. */
- if (depth == svn_depth_files)
- {
- svn_wc__db_kind_t kind;
-
- SVN_ERR(svn_wc__db_read_kind(&kind, db, child_abspath, TRUE,
- iterpool));
- if (kind != svn_wc__db_kind_file)
- continue;
- }
-
- /* Revert just this node (depth=empty). */
- SVN_ERR(new_revert_internal(db, child_abspath,
- svn_depth_empty, use_commit_times,
- cancel_func, cancel_baton,
- notify_func, notify_baton,
- iterpool));
- }
-
- svn_pool_destroy(iterpool);
-
- return SVN_NO_ERROR;
-}
-
-
-svn_error_t *
-svn_wc_revert4(svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- svn_depth_t depth,
- svn_boolean_t use_commit_times,
- const apr_array_header_t *changelist_filter,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- svn_wc_notify_func2_t notify_func,
- void *notify_baton,
- apr_pool_t *scratch_pool)
-{
- if (changelist_filter && changelist_filter->nelts)
- {
- apr_hash_t *changelist_hash;
-
- SVN_ERR(svn_hash_from_cstring_keys(&changelist_hash, changelist_filter,
- scratch_pool));
- return svn_error_trace(new_revert_changelist(wc_ctx->db, local_abspath,
- depth, use_commit_times,
- changelist_hash,
- cancel_func, cancel_baton,
- notify_func, notify_baton,
- scratch_pool));
- }
-
- if (depth == svn_depth_empty || depth == svn_depth_infinity)
- return svn_error_trace(new_revert_internal(wc_ctx->db, local_abspath,
- depth, use_commit_times,
- cancel_func, cancel_baton,
- notify_func, notify_baton,
- scratch_pool));
-
- /* The user may expect svn_depth_files/svn_depth_immediates to work
- on copied dirs with one level of children. It doesn't, the user
- will get an error and will need to invoke an infinite revert. If
- we identified those cases where svn_depth_infinity would not
- revert too much we could invoke the recursive call above. */
-
- if (depth == svn_depth_files || depth == svn_depth_immediates)
- return svn_error_trace(new_revert_partial(wc_ctx->db, local_abspath,
- depth, use_commit_times,
- cancel_func, cancel_baton,
- notify_func, notify_baton,
- scratch_pool));
-
- /* Bogus depth. Tell the caller. */
- return svn_error_create(SVN_ERR_WC_INVALID_OPERATION_DEPTH, NULL, NULL);
-}
-
-
/* Return a path where nothing exists on disk, within the admin directory
belonging to the WCROOT_ABSPATH directory. */
static const char *
@@ -2027,7 +1058,7 @@ svn_wc_get_pristine_copy_path(const char *path,
SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, pool));
- SVN_ERR(svn_wc__db_open(&db, NULL, TRUE, TRUE, pool, pool));
+ SVN_ERR(svn_wc__db_open(&db, NULL, FALSE, TRUE, pool, pool));
/* DB is now open. This is seemingly a "light" function that a caller
may use repeatedly despite error return values. The rest of this
function should aggressively close DB, even in the error case. */
@@ -2067,238 +1098,72 @@ svn_wc_get_pristine_contents2(svn_stream_t **contents,
}
-svn_error_t *
-svn_wc__internal_remove_from_revision_control(svn_wc__db_t *db,
- const char *local_abspath,
- svn_boolean_t destroy_wf,
- svn_boolean_t instant_error,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- apr_pool_t *scratch_pool)
+typedef struct get_pristine_lazyopen_baton_t
{
- svn_error_t *err;
- svn_boolean_t left_something = FALSE;
- svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
-
- /* ### This whole function should be rewritten to run inside a transaction,
- ### to allow a stable cancel behavior.
- ###
- ### Subversion < 1.7 marked the directory as incomplete to allow updating
- ### it from a canceled state. But this would not work because update
- ### doesn't retrieve deleted items.
- ###
- ### WC-NG doesn't support a delete+incomplete state, but we can't build
- ### transactions over multiple databases yet. */
+ svn_wc_context_t *wc_ctx;
+ const char *wri_abspath;
+ const svn_checksum_t *checksum;
- SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+} get_pristine_lazyopen_baton_t;
- /* Check cancellation here, so recursive calls get checked early. */
- if (cancel_func)
- SVN_ERR(cancel_func(cancel_baton));
- SVN_ERR(svn_wc__db_read_info(&status, &kind, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- db, local_abspath, scratch_pool, scratch_pool));
-
- if (kind == svn_wc__db_kind_file || kind == svn_wc__db_kind_symlink)
- {
- svn_boolean_t text_modified_p = FALSE;
-
- if (instant_error || destroy_wf)
- {
- svn_node_kind_t on_disk;
- SVN_ERR(svn_io_check_path(local_abspath, &on_disk, scratch_pool));
- if (on_disk == svn_node_file)
- {
- /* Check for local mods. before removing entry */
- SVN_ERR(svn_wc__internal_file_modified_p(&text_modified_p, db,
- local_abspath, FALSE,
- scratch_pool));
- if (text_modified_p && instant_error)
- return svn_error_createf(SVN_ERR_WC_LEFT_LOCAL_MOD, NULL,
- _("File '%s' has local modifications"),
- svn_dirent_local_style(local_abspath, scratch_pool));
- }
- }
-
- /* Remove NAME from DB */
- SVN_ERR(svn_wc__db_op_remove_node(db, local_abspath,
- SVN_INVALID_REVNUM,
- svn_wc__db_kind_unknown,
- scratch_pool));
-
- /* If we were asked to destroy the working file, do so unless
- it has local mods. */
- if (destroy_wf)
- {
- /* Don't kill local mods. */
- if (text_modified_p)
- return svn_error_create(SVN_ERR_WC_LEFT_LOCAL_MOD, NULL, NULL);
- else /* The working file is still present; remove it. */
- SVN_ERR(svn_io_remove_file2(local_abspath, TRUE, scratch_pool));
- }
-
- } /* done with file case */
- else /* looking at THIS_DIR */
- {
- apr_pool_t *iterpool = svn_pool_create(scratch_pool);
- const apr_array_header_t *children;
- int i;
-
- /* ### sanity check: check 2 places for DELETED flag? */
-
- /* Walk over every entry. */
- SVN_ERR(svn_wc__db_read_children(&children, db, local_abspath,
- scratch_pool, iterpool));
-
- for (i = 0; i < children->nelts; i++)
- {
- const char *node_name = APR_ARRAY_IDX(children, i, const char*);
- const char *node_abspath;
- svn_wc__db_status_t node_status;
- svn_wc__db_kind_t node_kind;
-
- svn_pool_clear(iterpool);
-
- node_abspath = svn_dirent_join(local_abspath, node_name, iterpool);
-
- SVN_ERR(svn_wc__db_read_info(&node_status, &node_kind, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL,
- db, node_abspath,
- iterpool, iterpool));
-
- if (node_status == svn_wc__db_status_normal
- && node_kind == svn_wc__db_kind_dir)
- {
- svn_boolean_t is_root;
-
- SVN_ERR(svn_wc__check_wc_root(&is_root, NULL, NULL,
- db, node_abspath, iterpool));
-
- if (is_root)
- continue; /* Just skip working copies as obstruction */
- }
-
- if (node_status != svn_wc__db_status_normal
- && node_status != svn_wc__db_status_added
- && node_status != svn_wc__db_status_incomplete)
- {
- /* The node is already 'deleted', so nothing to do on
- versioned nodes */
- SVN_ERR(svn_wc__db_op_remove_node(db, node_abspath,
- SVN_INVALID_REVNUM,
- svn_wc__db_kind_unknown,
- iterpool));
-
- continue;
- }
-
- err = svn_wc__internal_remove_from_revision_control(
- db, node_abspath,
- destroy_wf, instant_error,
- cancel_func, cancel_baton,
- iterpool);
-
- if (err && (err->apr_err == SVN_ERR_WC_LEFT_LOCAL_MOD))
- {
- if (instant_error)
- return svn_error_trace(err);
- else
- {
- svn_error_clear(err);
- left_something = TRUE;
- }
- }
- else if (err)
- return svn_error_trace(err);
- }
+/* Implements svn_stream_lazyopen_func_t */
+static svn_error_t *
+get_pristine_lazyopen_func(svn_stream_t **stream,
+ void *baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ get_pristine_lazyopen_baton_t *b = baton;
+ const svn_checksum_t *sha1_checksum;
- /* At this point, every directory below this one has been
- removed from revision control. */
+ /* svn_wc__db_pristine_read() wants a SHA1, so if we have an MD5,
+ we'll use it to lookup the SHA1. */
+ if (b->checksum->kind == svn_checksum_sha1)
+ sha1_checksum = b->checksum;
+ else
+ SVN_ERR(svn_wc__db_pristine_get_sha1(&sha1_checksum, b->wc_ctx->db,
+ b->wri_abspath, b->checksum,
+ scratch_pool, scratch_pool));
- /* Remove self from parent's entries file, but only if parent is
- a working copy. If it's not, that's fine, we just move on. */
- {
- svn_boolean_t is_root;
+ SVN_ERR(svn_wc__db_pristine_read(stream, NULL, b->wc_ctx->db,
+ b->wri_abspath, sha1_checksum,
+ result_pool, scratch_pool));
+ return SVN_NO_ERROR;
+}
- SVN_ERR(svn_wc__check_wc_root(&is_root, NULL, NULL,
- db, local_abspath, iterpool));
+svn_error_t *
+svn_wc__get_pristine_contents_by_checksum(svn_stream_t **contents,
+ svn_wc_context_t *wc_ctx,
+ const char *wri_abspath,
+ const svn_checksum_t *checksum,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_boolean_t present;
- /* If full_path is not the top of a wc, then its parent
- directory is also a working copy and has an entry for
- full_path. We need to remove that entry: */
- if (! is_root)
- {
- SVN_ERR(svn_wc__db_op_remove_node(db, local_abspath,
- SVN_INVALID_REVNUM,
- svn_wc__db_kind_unknown,
- iterpool));
- }
- else
- {
- /* Remove the entire administrative .svn area, thereby removing
- _this_ dir from revision control too. */
- SVN_ERR(svn_wc__adm_destroy(db, local_abspath,
- cancel_func, cancel_baton, iterpool));
- }
- }
+ *contents = NULL;
- /* If caller wants us to recursively nuke everything on disk, go
- ahead, provided that there are no dangling local-mod files
- below */
- if (destroy_wf && (! left_something))
- {
- /* If the dir is *truly* empty (i.e. has no unversioned
- resources, all versioned files are gone, all .svn dirs are
- gone, and contains nothing but empty dirs), then a
- *non*-recursive dir_remove should work. If it doesn't,
- no big deal. Just assume there are unversioned items in
- there and set "left_something" */
- err = svn_io_dir_remove_nonrecursive(local_abspath, iterpool);
- if (err)
- {
- if (!APR_STATUS_IS_ENOENT(err->apr_err))
- left_something = TRUE;
- svn_error_clear(err);
- }
- }
+ SVN_ERR(svn_wc__db_pristine_check(&present, wc_ctx->db, wri_abspath,
+ checksum, scratch_pool));
- svn_pool_destroy(iterpool);
+ if (present)
+ {
+ get_pristine_lazyopen_baton_t *gpl_baton;
- } /* end of directory case */
+ gpl_baton = apr_pcalloc(result_pool, sizeof(*gpl_baton));
+ gpl_baton->wc_ctx = wc_ctx;
+ gpl_baton->wri_abspath = wri_abspath;
+ gpl_baton->checksum = checksum;
- if (left_something)
- return svn_error_create(SVN_ERR_WC_LEFT_LOCAL_MOD, NULL, NULL);
+ *contents = svn_stream_lazyopen_create(get_pristine_lazyopen_func,
+ gpl_baton, FALSE, result_pool);
+ }
return SVN_NO_ERROR;
}
-svn_error_t *
-svn_wc_remove_from_revision_control2(svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- svn_boolean_t destroy_wf,
- svn_boolean_t instant_error,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- apr_pool_t *scratch_pool)
-{
- return svn_error_trace(
- svn_wc__internal_remove_from_revision_control(wc_ctx->db,
- local_abspath,
- destroy_wf,
- instant_error,
- cancel_func,
- cancel_baton,
- scratch_pool));
-}
-
svn_error_t *
svn_wc_add_lock2(svn_wc_context_t *wc_ctx,
@@ -2312,6 +1177,11 @@ svn_wc_add_lock2(svn_wc_context_t *wc_ctx,
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+ /* ### Enable after fixing callers */
+ /*SVN_ERR(svn_wc__write_check(wc_ctx->db,
+ svn_dirent_dirname(local_abspath, scratch_pool),
+ scratch_pool));*/
+
db_lock.token = lock->token;
db_lock.owner = lock->owner;
db_lock.comment = lock->comment;
@@ -2331,9 +1201,19 @@ svn_wc_add_lock2(svn_wc_context_t *wc_ctx,
}
/* if svn:needs-lock is present, then make the file read-write. */
- SVN_ERR(svn_wc__internal_propget(&needs_lock, wc_ctx->db, local_abspath,
- SVN_PROP_NEEDS_LOCK, scratch_pool,
- scratch_pool));
+ err = svn_wc__internal_propget(&needs_lock, wc_ctx->db, local_abspath,
+ SVN_PROP_NEEDS_LOCK, scratch_pool,
+ scratch_pool);
+
+ if (err && err->apr_err == SVN_ERR_WC_PATH_UNEXPECTED_STATUS)
+ {
+ /* The node has non wc representation (e.g. deleted), so
+ we don't want to touch the in-wc file */
+ svn_error_clear(err);
+ return SVN_NO_ERROR;
+ }
+ SVN_ERR(err);
+
if (needs_lock)
SVN_ERR(svn_io_set_file_read_write(local_abspath, FALSE, scratch_pool));
@@ -2351,6 +1231,11 @@ svn_wc_remove_lock2(svn_wc_context_t *wc_ctx,
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+ /* ### Enable after fixing callers */
+ /*SVN_ERR(svn_wc__write_check(wc_ctx->db,
+ svn_dirent_dirname(local_abspath, scratch_pool),
+ scratch_pool));*/
+
err = svn_wc__db_lock_remove(wc_ctx->db, local_abspath, scratch_pool);
if (err)
{
@@ -2366,9 +1251,19 @@ svn_wc_remove_lock2(svn_wc_context_t *wc_ctx,
}
/* if svn:needs-lock is present, then make the file read-only. */
- SVN_ERR(svn_wc__internal_propget(&needs_lock, wc_ctx->db, local_abspath,
- SVN_PROP_NEEDS_LOCK, scratch_pool,
- scratch_pool));
+ err = svn_wc__internal_propget(&needs_lock, wc_ctx->db, local_abspath,
+ SVN_PROP_NEEDS_LOCK, scratch_pool,
+ scratch_pool);
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_WC_PATH_UNEXPECTED_STATUS)
+ return svn_error_trace(err);
+
+ svn_error_clear(err);
+ return SVN_NO_ERROR; /* Node is shadowed and/or deleted,
+ so we shouldn't apply its lock */
+ }
+
if (needs_lock)
SVN_ERR(svn_io_set_file_read_only(local_abspath, FALSE, scratch_pool));
@@ -2448,6 +1343,7 @@ svn_wc_get_changelists(svn_wc_context_t *wc_ctx,
apr_pool_t *scratch_pool)
{
struct get_cl_fn_baton gnb;
+
gnb.db = wc_ctx->db;
gnb.clhash = NULL;
gnb.callback_func = callback_func;
@@ -2491,8 +1387,7 @@ svn_wc__internal_changelist_match(svn_wc__db_t *db,
}
return (changelist
- && apr_hash_get((apr_hash_t *)clhash, changelist,
- APR_HASH_KEY_STRING) != NULL);
+ && svn_hash_gets((apr_hash_t *)clhash, changelist) != NULL);
}
diff --git a/subversion/libsvn_wc/ambient_depth_filter_editor.c b/subversion/libsvn_wc/ambient_depth_filter_editor.c
index d8ebc75..ff9a5c3 100644
--- a/subversion/libsvn_wc/ambient_depth_filter_editor.c
+++ b/subversion/libsvn_wc/ambient_depth_filter_editor.c
@@ -113,11 +113,15 @@ struct dir_baton
void *wrapped_baton;
};
-/* Helper to call either svn_wc__db_base_get_info or svn_wc__db_read_info for
- obtaining information for the ambient depth editor */
+/* Fetch the STATUS, KIND and DEPTH of the base node at LOCAL_ABSPATH.
+ * If there is no such base node, report 'normal', 'unknown' and 'unknown'
+ * respectively.
+ *
+ * STATUS and/or DEPTH may be NULL if not wanted; KIND must not be NULL.
+ */
static svn_error_t *
ambient_read_info(svn_wc__db_status_t *status,
- svn_wc__db_kind_t *kind,
+ svn_node_kind_t *kind,
svn_depth_t *depth,
svn_wc__db_t *db,
const char *local_abspath,
@@ -128,7 +132,7 @@ ambient_read_info(svn_wc__db_status_t *status,
err = svn_wc__db_base_get_info(status, kind, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, depth, NULL, NULL,
- NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
db, local_abspath,
scratch_pool, scratch_pool);
@@ -136,7 +140,7 @@ ambient_read_info(svn_wc__db_status_t *status,
{
svn_error_clear(err);
- *kind = svn_wc__db_kind_unknown;
+ *kind = svn_node_unknown;
if (status)
*status = svn_wc__db_status_normal;
if (depth)
@@ -186,7 +190,7 @@ make_dir_baton(struct dir_baton **d_p,
{
svn_boolean_t exclude;
svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
svn_boolean_t exists = TRUE;
if (!added)
@@ -197,10 +201,10 @@ make_dir_baton(struct dir_baton **d_p,
else
{
status = svn_wc__db_status_not_present;
- kind = svn_wc__db_kind_unknown;
+ kind = svn_node_unknown;
}
- exists = (kind != svn_wc__db_kind_unknown);
+ exists = (kind != svn_node_unknown);
if (pb->ambient_depth == svn_depth_empty
|| pb->ambient_depth == svn_depth_files)
@@ -246,7 +250,7 @@ make_file_baton(struct file_baton **f_p,
struct file_baton *f = apr_pcalloc(pool, sizeof(*f));
struct edit_baton *eb = pb->edit_baton;
svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
const char *abspath;
SVN_ERR_ASSERT(path);
@@ -268,7 +272,7 @@ make_file_baton(struct file_baton **f_p,
else
{
status = svn_wc__db_status_not_present;
- kind = svn_wc__db_kind_unknown;
+ kind = svn_node_unknown;
}
if (pb->ambient_depth == svn_depth_empty)
@@ -281,7 +285,7 @@ make_file_baton(struct file_baton **f_p,
if (status == svn_wc__db_status_not_present
|| status == svn_wc__db_status_server_excluded
|| status == svn_wc__db_status_excluded
- || kind == svn_wc__db_kind_unknown)
+ || kind == svn_node_unknown)
{
f->ambiently_excluded = TRUE;
*f_p = f;
@@ -308,7 +312,7 @@ make_file_baton(struct file_baton **f_p,
/*** Editor Functions ***/
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
set_target_revision(void *edit_baton,
svn_revnum_t target_revision,
@@ -321,7 +325,7 @@ set_target_revision(void *edit_baton,
target_revision, pool);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
open_root(void *edit_baton,
svn_revnum_t base_revision,
@@ -340,7 +344,7 @@ open_root(void *edit_baton,
if (! *eb->target)
{
/* For an update with a NULL target, this is equivalent to open_dir(): */
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
svn_wc__db_status_t status;
svn_depth_t depth;
@@ -349,7 +353,7 @@ open_root(void *edit_baton,
eb->db, eb->anchor_abspath,
pool));
- if (kind != svn_wc__db_kind_unknown
+ if (kind != svn_node_unknown
&& status != svn_wc__db_status_not_present
&& status != svn_wc__db_status_excluded
&& status != svn_wc__db_status_server_excluded)
@@ -362,7 +366,7 @@ open_root(void *edit_baton,
pool, &b->wrapped_baton);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
delete_entry(const char *path,
svn_revnum_t base_revision,
@@ -380,7 +384,7 @@ delete_entry(const char *path,
/* If the entry we want to delete doesn't exist, that's OK.
It's probably an old server that doesn't understand
depths. */
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
svn_wc__db_status_t status;
const char *abspath;
@@ -389,7 +393,7 @@ delete_entry(const char *path,
SVN_ERR(ambient_read_info(&status, &kind, NULL,
eb->db, abspath, pool));
- if (kind == svn_wc__db_kind_unknown
+ if (kind == svn_node_unknown
|| status == svn_wc__db_status_not_present
|| status == svn_wc__db_status_excluded
|| status == svn_wc__db_status_server_excluded)
@@ -400,7 +404,7 @@ delete_entry(const char *path,
pb->wrapped_baton, pool);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
add_directory(const char *path,
void *parent_baton,
@@ -446,7 +450,7 @@ add_directory(const char *path,
pool, &b->wrapped_baton);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
open_directory(const char *path,
void *parent_baton,
@@ -458,7 +462,7 @@ open_directory(const char *path,
struct edit_baton *eb = pb->edit_baton;
struct dir_baton *b;
const char *local_abspath;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
svn_wc__db_status_t status;
svn_depth_t depth;
@@ -480,7 +484,7 @@ open_directory(const char *path,
SVN_ERR(ambient_read_info(&status, &kind, &depth,
eb->db, local_abspath, pool));
- if (kind != svn_wc__db_kind_unknown
+ if (kind != svn_node_unknown
&& status != svn_wc__db_status_not_present
&& status != svn_wc__db_status_excluded
&& status != svn_wc__db_status_server_excluded)
@@ -491,7 +495,7 @@ open_directory(const char *path,
return SVN_NO_ERROR;
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
add_file(const char *path,
void *parent_baton,
@@ -515,7 +519,7 @@ add_file(const char *path,
pool, &b->wrapped_baton);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
open_file(const char *path,
void *parent_baton,
@@ -537,7 +541,7 @@ open_file(const char *path,
&b->wrapped_baton);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
apply_textdelta(void *file_baton,
const char *base_checksum,
@@ -561,7 +565,7 @@ apply_textdelta(void *file_baton,
handler, handler_baton);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
close_file(void *file_baton,
const char *text_checksum,
@@ -577,7 +581,7 @@ close_file(void *file_baton,
text_checksum, pool);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
absent_file(const char *path,
void *parent_baton,
@@ -592,7 +596,7 @@ absent_file(const char *path,
return eb->wrapped_editor->absent_file(path, pb->wrapped_baton, pool);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
close_directory(void *dir_baton,
apr_pool_t *pool)
@@ -606,7 +610,7 @@ close_directory(void *dir_baton,
return eb->wrapped_editor->close_directory(db->wrapped_baton, pool);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
absent_directory(const char *path,
void *parent_baton,
@@ -622,7 +626,7 @@ absent_directory(const char *path,
return eb->wrapped_editor->absent_directory(path, pb->wrapped_baton, pool);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
change_file_prop(void *file_baton,
const char *name,
@@ -639,7 +643,7 @@ change_file_prop(void *file_baton,
name, value, pool);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
change_dir_prop(void *dir_baton,
const char *name,
@@ -656,7 +660,7 @@ change_dir_prop(void *dir_baton,
name, value, pool);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
close_edit(void *edit_baton,
apr_pool_t *pool)
diff --git a/subversion/libsvn_wc/cleanup.c b/subversion/libsvn_wc/cleanup.c
index 863dd5c..afe7371 100644
--- a/subversion/libsvn_wc/cleanup.c
+++ b/subversion/libsvn_wc/cleanup.c
@@ -67,69 +67,13 @@ can_be_cleaned(int *wc_format,
return SVN_NO_ERROR;
}
-/* Do a modifed check for LOCAL_ABSPATH, and all working children, to force
- timestamp repair. */
+/* Dummy svn_wc_status_func4_t implementation */
static svn_error_t *
-repair_timestamps(svn_wc__db_t *db,
- const char *local_abspath,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- apr_pool_t *scratch_pool)
+status_dummy_callback(void *baton,
+ const char *local_abspath,
+ const svn_wc_status3_t *status,
+ apr_pool_t *scratch_pool)
{
- svn_wc__db_kind_t kind;
- svn_wc__db_status_t status;
-
- if (cancel_func)
- SVN_ERR(cancel_func(cancel_baton));
-
- SVN_ERR(svn_wc__db_read_info(&status, &kind,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL,
- db, local_abspath, scratch_pool, scratch_pool));
-
- if (status == svn_wc__db_status_server_excluded
- || status == svn_wc__db_status_deleted
- || status == svn_wc__db_status_excluded
- || status == svn_wc__db_status_not_present)
- return SVN_NO_ERROR;
-
- if (kind == svn_wc__db_kind_file
- || kind == svn_wc__db_kind_symlink)
- {
- svn_boolean_t modified;
- SVN_ERR(svn_wc__internal_file_modified_p(&modified,
- db, local_abspath, FALSE,
- scratch_pool));
- }
- else if (kind == svn_wc__db_kind_dir)
- {
- apr_pool_t *iterpool = svn_pool_create(scratch_pool);
- const apr_array_header_t *children;
- int i;
-
- SVN_ERR(svn_wc__db_read_children_of_working_node(&children, db,
- local_abspath,
- scratch_pool,
- iterpool));
- for (i = 0; i < children->nelts; ++i)
- {
- const char *child_abspath;
-
- svn_pool_clear(iterpool);
-
- child_abspath = svn_dirent_join(local_abspath,
- APR_ARRAY_IDX(children, i,
- const char *),
- iterpool);
-
- SVN_ERR(repair_timestamps(db, child_abspath,
- cancel_func, cancel_baton, iterpool));
- }
- svn_pool_destroy(iterpool);
- }
-
return SVN_NO_ERROR;
}
@@ -142,13 +86,18 @@ cleanup_internal(svn_wc__db_t *db,
apr_pool_t *scratch_pool)
{
int wc_format;
- const char *cleanup_abspath;
+ svn_boolean_t is_wcroot;
+ const char *lock_abspath;
/* Can we even work with this directory? */
SVN_ERR(can_be_cleaned(&wc_format, db, dir_abspath, scratch_pool));
- /* ### This fails if ADM_ABSPATH is locked indirectly via a
- ### recursive lock on an ancestor. */
+ /* We cannot obtain a lock on a directory that's within a locked
+ subtree, so always run cleanup from the lock owner. */
+ SVN_ERR(svn_wc__db_wclock_find_root(&lock_abspath, db, dir_abspath,
+ scratch_pool, scratch_pool));
+ if (lock_abspath)
+ dir_abspath = lock_abspath;
SVN_ERR(svn_wc__db_wclock_obtain(db, dir_abspath, -1, TRUE, scratch_pool));
/* Run our changes before the subdirectories. We may not have to recurse
@@ -157,8 +106,7 @@ cleanup_internal(svn_wc__db_t *db,
SVN_ERR(svn_wc__wq_run(db, dir_abspath, cancel_func, cancel_baton,
scratch_pool));
- SVN_ERR(svn_wc__db_get_wcroot(&cleanup_abspath, db, dir_abspath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_is_wcroot(&is_wcroot, db, dir_abspath, scratch_pool));
#ifdef SVN_DEBUG
SVN_ERR(svn_wc__db_verify(db, dir_abspath, scratch_pool));
@@ -169,7 +117,7 @@ cleanup_internal(svn_wc__db_t *db,
svn_wc__check_wcroot() as that function, will just return true
once we start sharing databases with externals.
*/
- if (strcmp(cleanup_abspath, dir_abspath) == 0)
+ if (is_wcroot)
{
/* Cleanup the tmp area of the admin subdir, if running the log has not
removed it! The logs have been run, so anything left here has no hope
@@ -180,8 +128,17 @@ cleanup_internal(svn_wc__db_t *db,
SVN_ERR(svn_wc__db_pristine_cleanup(db, dir_abspath, scratch_pool));
}
- SVN_ERR(repair_timestamps(db, dir_abspath, cancel_func, cancel_baton,
- scratch_pool));
+ /* Instead of implementing a separate repair step here, use the standard
+ status walker's optimized implementation, which performs repairs when
+ there is a lock. */
+ SVN_ERR(svn_wc__internal_walk_status(db, dir_abspath, svn_depth_infinity,
+ FALSE /* get_all */,
+ FALSE /* no_ignore */,
+ FALSE /* ignore_text_mods */,
+ NULL /* ignore patterns */,
+ status_dummy_callback, NULL,
+ cancel_func, cancel_baton,
+ scratch_pool));
/* All done, toss the lock */
SVN_ERR(svn_wc__db_wclock_release(db, dir_abspath, scratch_pool));
@@ -207,7 +164,7 @@ svn_wc_cleanup3(svn_wc_context_t *wc_ctx,
/* We need a DB that allows a non-empty work queue (though it *will*
auto-upgrade). We'll handle everything manually. */
SVN_ERR(svn_wc__db_open(&db,
- NULL /* ### config */, TRUE, FALSE,
+ NULL /* ### config */, FALSE, FALSE,
scratch_pool, scratch_pool));
SVN_ERR(cleanup_internal(db, local_abspath, cancel_func, cancel_baton,
@@ -218,6 +175,8 @@ svn_wc_cleanup3(svn_wc_context_t *wc_ctx,
SVN_ERR(svn_wc__db_base_clear_dav_cache_recursive(db, local_abspath,
scratch_pool));
+ SVN_ERR(svn_wc__db_vacuum(db, local_abspath, scratch_pool));
+
/* We're done with this DB, so proactively close it. */
SVN_ERR(svn_wc__db_close(db));
diff --git a/subversion/libsvn_wc/conflicts.c b/subversion/libsvn_wc/conflicts.c
index 8a68805..f2d6f3e 100644
--- a/subversion/libsvn_wc/conflicts.c
+++ b/subversion/libsvn_wc/conflicts.c
@@ -32,6 +32,7 @@
#include <apr_hash.h>
#include <apr_errno.h>
+#include "svn_hash.h"
#include "svn_types.h"
#include "svn_pools.h"
#include "svn_string.h"
@@ -44,14 +45,1014 @@
#include "wc.h"
#include "wc_db.h"
#include "conflicts.h"
+#include "workqueue.h"
+#include "props.h"
#include "private/svn_wc_private.h"
#include "private/svn_skel.h"
+#include "private/svn_string_private.h"
#include "svn_private_config.h"
+/* --------------------------------------------------------------------
+ * Conflict skel management
+ */
+
svn_skel_t *
-svn_wc__conflict_skel_new(apr_pool_t *result_pool)
+svn_wc__conflict_skel_create(apr_pool_t *result_pool)
+{
+ svn_skel_t *conflict_skel = svn_skel__make_empty_list(result_pool);
+
+ /* Add empty CONFLICTS list */
+ svn_skel__prepend(svn_skel__make_empty_list(result_pool), conflict_skel);
+
+ /* Add empty WHY list */
+ svn_skel__prepend(svn_skel__make_empty_list(result_pool), conflict_skel);
+
+ return conflict_skel;
+}
+
+svn_error_t *
+svn_wc__conflict_skel_is_complete(svn_boolean_t *complete,
+ const svn_skel_t *conflict_skel)
+{
+ *complete = FALSE;
+
+ if (svn_skel__list_length(conflict_skel) < 2)
+ return svn_error_create(SVN_ERR_INCOMPLETE_DATA, NULL,
+ _("Not a conflict skel"));
+
+ if (svn_skel__list_length(conflict_skel->children) < 2)
+ return SVN_NO_ERROR; /* WHY is not set */
+
+ if (svn_skel__list_length(conflict_skel->children->next) == 0)
+ return SVN_NO_ERROR; /* No conflict set */
+
+ *complete = TRUE;
+ return SVN_NO_ERROR;
+}
+
+/* Serialize a svn_wc_conflict_version_t before the existing data in skel */
+static svn_error_t *
+conflict__prepend_location(svn_skel_t *skel,
+ const svn_wc_conflict_version_t *location,
+ svn_boolean_t allow_NULL,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_skel_t *loc;
+ SVN_ERR_ASSERT(location || allow_NULL);
+
+ if (!location)
+ {
+ svn_skel__prepend(svn_skel__make_empty_list(result_pool), skel);
+ return SVN_NO_ERROR;
+ }
+
+ /* ("subversion" repos_root_url repos_uuid repos_relpath rev kind) */
+ loc = svn_skel__make_empty_list(result_pool);
+
+ svn_skel__prepend_str(svn_node_kind_to_word(location->node_kind),
+ loc, result_pool);
+
+ svn_skel__prepend_int(location->peg_rev, loc, result_pool);
+
+ svn_skel__prepend_str(apr_pstrdup(result_pool, location->path_in_repos), loc,
+ result_pool);
+
+ if (!location->repos_uuid) /* Can theoretically be NULL */
+ svn_skel__prepend(svn_skel__make_empty_list(result_pool), loc);
+ else
+ svn_skel__prepend_str(location->repos_uuid, loc, result_pool);
+
+ svn_skel__prepend_str(apr_pstrdup(result_pool, location->repos_url), loc,
+ result_pool);
+
+ svn_skel__prepend_str(SVN_WC__CONFLICT_SRC_SUBVERSION, loc, result_pool);
+
+ svn_skel__prepend(loc, skel);
+ return SVN_NO_ERROR;
+}
+
+/* Deserialize a svn_wc_conflict_version_t from the skel.
+ Set *LOCATION to NULL when the data is not a svn_wc_conflict_version_t. */
+static svn_error_t *
+conflict__read_location(svn_wc_conflict_version_t **location,
+ const svn_skel_t *skel,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ const char *repos_root_url;
+ const char *repos_uuid;
+ const char *repos_relpath;
+ svn_revnum_t revision;
+ apr_int64_t v;
+ svn_node_kind_t node_kind; /* note that 'none' is a legitimate value */
+ const char *kind_str;
+
+ const svn_skel_t *c = skel->children;
+
+ if (!svn_skel__matches_atom(c, SVN_WC__CONFLICT_SRC_SUBVERSION))
+ {
+ *location = NULL;
+ return SVN_NO_ERROR;
+ }
+ c = c->next;
+
+ repos_root_url = apr_pstrmemdup(result_pool, c->data, c->len);
+ c = c->next;
+
+ if (c->is_atom)
+ repos_uuid = apr_pstrmemdup(result_pool, c->data, c->len);
+ else
+ repos_uuid = NULL;
+ c = c->next;
+
+ repos_relpath = apr_pstrmemdup(result_pool, c->data, c->len);
+ c = c->next;
+
+ SVN_ERR(svn_skel__parse_int(&v, c, scratch_pool));
+ revision = (svn_revnum_t)v;
+ c = c->next;
+
+ kind_str = apr_pstrmemdup(scratch_pool, c->data, c->len);
+ node_kind = svn_node_kind_from_word(kind_str);
+
+ *location = svn_wc_conflict_version_create2(repos_root_url,
+ repos_uuid,
+ repos_relpath,
+ revision,
+ node_kind,
+ result_pool);
+ return SVN_NO_ERROR;
+}
+
+/* Get the operation part of CONFLICT_SKELL or NULL if no operation is set
+ at this time */
+static svn_error_t *
+conflict__get_operation(svn_skel_t **why,
+ const svn_skel_t *conflict_skel)
+{
+ SVN_ERR_ASSERT(conflict_skel
+ && conflict_skel->children
+ && conflict_skel->children->next
+ && !conflict_skel->children->next->is_atom);
+
+ *why = conflict_skel->children;
+
+ if (!(*why)->children)
+ *why = NULL; /* Operation is not set yet */
+
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_wc__conflict_skel_set_op_update(svn_skel_t *conflict_skel,
+ const svn_wc_conflict_version_t *original,
+ const svn_wc_conflict_version_t *target,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_skel_t *why;
+ svn_skel_t *origins;
+
+ SVN_ERR_ASSERT(conflict_skel
+ && conflict_skel->children
+ && conflict_skel->children->next
+ && !conflict_skel->children->next->is_atom);
+
+ SVN_ERR(conflict__get_operation(&why, conflict_skel));
+
+ SVN_ERR_ASSERT(why == NULL); /* No operation set */
+
+ why = conflict_skel->children;
+
+ origins = svn_skel__make_empty_list(result_pool);
+
+ SVN_ERR(conflict__prepend_location(origins, target, TRUE,
+ result_pool, scratch_pool));
+ SVN_ERR(conflict__prepend_location(origins, original, TRUE,
+ result_pool, scratch_pool));
+
+ svn_skel__prepend(origins, why);
+ svn_skel__prepend_str(SVN_WC__CONFLICT_OP_UPDATE, why, result_pool);
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__conflict_skel_set_op_switch(svn_skel_t *conflict_skel,
+ const svn_wc_conflict_version_t *original,
+ const svn_wc_conflict_version_t *target,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_skel_t *why;
+ svn_skel_t *origins;
+
+ SVN_ERR_ASSERT(conflict_skel
+ && conflict_skel->children
+ && conflict_skel->children->next
+ && !conflict_skel->children->next->is_atom);
+
+ SVN_ERR(conflict__get_operation(&why, conflict_skel));
+
+ SVN_ERR_ASSERT(why == NULL); /* No operation set */
+
+ why = conflict_skel->children;
+
+ origins = svn_skel__make_empty_list(result_pool);
+
+ SVN_ERR(conflict__prepend_location(origins, target, TRUE,
+ result_pool, scratch_pool));
+ SVN_ERR(conflict__prepend_location(origins, original, TRUE,
+ result_pool, scratch_pool));
+
+ svn_skel__prepend(origins, why);
+ svn_skel__prepend_str(SVN_WC__CONFLICT_OP_SWITCH, why, result_pool);
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__conflict_skel_set_op_merge(svn_skel_t *conflict_skel,
+ const svn_wc_conflict_version_t *left,
+ const svn_wc_conflict_version_t *right,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_skel_t *why;
+ svn_skel_t *origins;
+
+ SVN_ERR_ASSERT(conflict_skel
+ && conflict_skel->children
+ && conflict_skel->children->next
+ && !conflict_skel->children->next->is_atom);
+
+ SVN_ERR(conflict__get_operation(&why, conflict_skel));
+
+ SVN_ERR_ASSERT(why == NULL); /* No operation set */
+
+ why = conflict_skel->children;
+
+ origins = svn_skel__make_empty_list(result_pool);
+
+ SVN_ERR(conflict__prepend_location(origins, right, TRUE,
+ result_pool, scratch_pool));
+
+ SVN_ERR(conflict__prepend_location(origins, left, TRUE,
+ result_pool, scratch_pool));
+
+ svn_skel__prepend(origins, why);
+ svn_skel__prepend_str(SVN_WC__CONFLICT_OP_MERGE, why, result_pool);
+
+ return SVN_NO_ERROR;
+}
+
+/* Gets the conflict data of the specified type CONFLICT_TYPE from
+ CONFLICT_SKEL, or NULL if no such conflict is recorded */
+static svn_error_t *
+conflict__get_conflict(svn_skel_t **conflict,
+ const svn_skel_t *conflict_skel,
+ const char *conflict_type)
+{
+ svn_skel_t *c;
+
+ SVN_ERR_ASSERT(conflict_skel
+ && conflict_skel->children
+ && conflict_skel->children->next
+ && !conflict_skel->children->next->is_atom);
+
+ for(c = conflict_skel->children->next->children;
+ c;
+ c = c->next)
+ {
+ if (svn_skel__matches_atom(c->children, conflict_type))
+ {
+ *conflict = c;
+ return SVN_NO_ERROR;
+ }
+ }
+
+ *conflict = NULL;
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__conflict_skel_add_text_conflict(svn_skel_t *conflict_skel,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
+ const char *mine_abspath,
+ const char *their_old_abspath,
+ const char *their_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_skel_t *text_conflict;
+ svn_skel_t *markers;
+
+ SVN_ERR(conflict__get_conflict(&text_conflict, conflict_skel,
+ SVN_WC__CONFLICT_KIND_TEXT));
+
+ SVN_ERR_ASSERT(!text_conflict); /* ### Use proper error? */
+
+ /* Current skel format
+ ("text"
+ (OLD MINE OLD-THEIRS THEIRS)) */
+
+ text_conflict = svn_skel__make_empty_list(result_pool);
+ markers = svn_skel__make_empty_list(result_pool);
+
+if (their_abspath)
+ {
+ const char *their_relpath;
+
+ SVN_ERR(svn_wc__db_to_relpath(&their_relpath,
+ db, wri_abspath, their_abspath,
+ result_pool, scratch_pool));
+ svn_skel__prepend_str(their_relpath, markers, result_pool);
+ }
+ else
+ svn_skel__prepend(svn_skel__make_empty_list(result_pool), markers);
+
+ if (mine_abspath)
+ {
+ const char *mine_relpath;
+
+ SVN_ERR(svn_wc__db_to_relpath(&mine_relpath,
+ db, wri_abspath, mine_abspath,
+ result_pool, scratch_pool));
+ svn_skel__prepend_str(mine_relpath, markers, result_pool);
+ }
+ else
+ svn_skel__prepend(svn_skel__make_empty_list(result_pool), markers);
+
+ if (their_old_abspath)
+ {
+ const char *original_relpath;
+
+ SVN_ERR(svn_wc__db_to_relpath(&original_relpath,
+ db, wri_abspath, their_old_abspath,
+ result_pool, scratch_pool));
+ svn_skel__prepend_str(original_relpath, markers, result_pool);
+ }
+ else
+ svn_skel__prepend(svn_skel__make_empty_list(result_pool), markers);
+
+ svn_skel__prepend(markers, text_conflict);
+ svn_skel__prepend_str(SVN_WC__CONFLICT_KIND_TEXT, text_conflict,
+ result_pool);
+
+ /* And add it to the conflict skel */
+ svn_skel__prepend(text_conflict, conflict_skel->children->next);
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__conflict_skel_add_prop_conflict(svn_skel_t *conflict_skel,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
+ const char *marker_abspath,
+ const apr_hash_t *mine_props,
+ const apr_hash_t *their_old_props,
+ const apr_hash_t *their_props,
+ const apr_hash_t *conflicted_prop_names,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_skel_t *prop_conflict;
+ svn_skel_t *props;
+ svn_skel_t *conflict_names;
+ svn_skel_t *markers;
+ apr_hash_index_t *hi;
+
+ SVN_ERR(conflict__get_conflict(&prop_conflict, conflict_skel,
+ SVN_WC__CONFLICT_KIND_PROP));
+
+ SVN_ERR_ASSERT(!prop_conflict); /* ### Use proper error? */
+
+ /* This function currently implements:
+ ("prop"
+ ("marker_relpath")
+ prop-conflicted_prop_names
+ old-props
+ mine-props
+ their-props)
+ NULL lists are recorded as "" */
+ /* ### Seems that this may not match what we read out. Read-out of
+ * 'theirs-old' comes as NULL. */
+
+ prop_conflict = svn_skel__make_empty_list(result_pool);
+
+ if (their_props)
+ {
+ SVN_ERR(svn_skel__unparse_proplist(&props, their_props, result_pool));
+ svn_skel__prepend(props, prop_conflict);
+ }
+ else
+ svn_skel__prepend_str("", prop_conflict, result_pool); /* No their_props */
+
+ if (mine_props)
+ {
+ SVN_ERR(svn_skel__unparse_proplist(&props, mine_props, result_pool));
+ svn_skel__prepend(props, prop_conflict);
+ }
+ else
+ svn_skel__prepend_str("", prop_conflict, result_pool); /* No mine_props */
+
+ if (their_old_props)
+ {
+ SVN_ERR(svn_skel__unparse_proplist(&props, their_old_props,
+ result_pool));
+ svn_skel__prepend(props, prop_conflict);
+ }
+ else
+ svn_skel__prepend_str("", prop_conflict, result_pool); /* No old_props */
+
+ conflict_names = svn_skel__make_empty_list(result_pool);
+ for (hi = apr_hash_first(scratch_pool, (apr_hash_t *)conflicted_prop_names);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ svn_skel__prepend_str(apr_pstrdup(result_pool,
+ svn__apr_hash_index_key(hi)),
+ conflict_names,
+ result_pool);
+ }
+ svn_skel__prepend(conflict_names, prop_conflict);
+
+ markers = svn_skel__make_empty_list(result_pool);
+
+ if (marker_abspath)
+ {
+ const char *marker_relpath;
+ SVN_ERR(svn_wc__db_to_relpath(&marker_relpath, db, wri_abspath,
+ marker_abspath,
+ result_pool, scratch_pool));
+
+ svn_skel__prepend_str(marker_relpath, markers, result_pool);
+ }
+/*else // ### set via svn_wc__conflict_create_markers
+ svn_skel__prepend(svn_skel__make_empty_list(result_pool), markers);*/
+
+ svn_skel__prepend(markers, prop_conflict);
+
+ svn_skel__prepend_str(SVN_WC__CONFLICT_KIND_PROP, prop_conflict, result_pool);
+
+ /* And add it to the conflict skel */
+ svn_skel__prepend(prop_conflict, conflict_skel->children->next);
+
+ return SVN_NO_ERROR;
+}
+
+/* A map for svn_wc_conflict_reason_t values. */
+static const svn_token_map_t local_change_map[] =
+{
+ { "edited", svn_wc_conflict_reason_edited },
+ { "obstructed", svn_wc_conflict_reason_obstructed },
+ { "deleted", svn_wc_conflict_reason_deleted },
+ { "missing", svn_wc_conflict_reason_missing },
+ { "unversioned", svn_wc_conflict_reason_unversioned },
+ { "added", svn_wc_conflict_reason_added },
+ { "replaced", svn_wc_conflict_reason_replaced },
+ { "moved-away", svn_wc_conflict_reason_moved_away },
+ { "moved-here", svn_wc_conflict_reason_moved_here },
+ { NULL }
+};
+
+static const svn_token_map_t incoming_change_map[] =
+{
+ { "edited", svn_wc_conflict_action_edit },
+ { "added", svn_wc_conflict_action_add },
+ { "deleted", svn_wc_conflict_action_delete },
+ { "replaced", svn_wc_conflict_action_replace },
+ { NULL }
+};
+
+svn_error_t *
+svn_wc__conflict_skel_add_tree_conflict(svn_skel_t *conflict_skel,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
+ svn_wc_conflict_reason_t local_change,
+ svn_wc_conflict_action_t incoming_change,
+ const char *move_src_op_root_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_skel_t *tree_conflict;
+ svn_skel_t *markers;
+
+ SVN_ERR(conflict__get_conflict(&tree_conflict, conflict_skel,
+ SVN_WC__CONFLICT_KIND_TREE));
+
+ SVN_ERR_ASSERT(!tree_conflict); /* ### Use proper error? */
+
+ SVN_ERR_ASSERT(local_change == svn_wc_conflict_reason_moved_away
+ || !move_src_op_root_abspath); /* ### Use proper error? */
+
+ tree_conflict = svn_skel__make_empty_list(result_pool);
+
+ if (local_change == svn_wc_conflict_reason_moved_away
+ && move_src_op_root_abspath)
+ {
+ const char *move_src_op_root_relpath;
+
+ SVN_ERR(svn_wc__db_to_relpath(&move_src_op_root_relpath,
+ db, wri_abspath,
+ move_src_op_root_abspath,
+ result_pool, scratch_pool));
+
+ svn_skel__prepend_str(move_src_op_root_relpath, tree_conflict,
+ result_pool);
+ }
+
+ svn_skel__prepend_str(
+ svn_token__to_word(incoming_change_map, incoming_change),
+ tree_conflict, result_pool);
+
+ svn_skel__prepend_str(
+ svn_token__to_word(local_change_map, local_change),
+ tree_conflict, result_pool);
+
+ /* Tree conflicts have no marker files */
+ markers = svn_skel__make_empty_list(result_pool);
+ svn_skel__prepend(markers, tree_conflict);
+
+ svn_skel__prepend_str(SVN_WC__CONFLICT_KIND_TREE, tree_conflict,
+ result_pool);
+
+ /* And add it to the conflict skel */
+ svn_skel__prepend(tree_conflict, conflict_skel->children->next);
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__conflict_skel_resolve(svn_boolean_t *completely_resolved,
+ svn_skel_t *conflict_skel,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
+ svn_boolean_t resolve_text,
+ const char *resolve_prop,
+ svn_boolean_t resolve_tree,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_skel_t *op;
+ svn_skel_t **pconflict;
+ SVN_ERR(conflict__get_operation(&op, conflict_skel));
+
+ if (!op)
+ return svn_error_create(SVN_ERR_INCOMPLETE_DATA, NULL,
+ _("Not a completed conflict skel"));
+
+ /* We are going to drop items from a linked list. Instead of keeping
+ a pointer to the item we want to drop we store a pointer to the
+ pointer of what we may drop, to allow setting it to the next item. */
+
+ pconflict = &(conflict_skel->children->next->children);
+ while (*pconflict)
+ {
+ svn_skel_t *c = (*pconflict)->children;
+
+ if (resolve_text
+ && svn_skel__matches_atom(c, SVN_WC__CONFLICT_KIND_TEXT))
+ {
+ /* Remove the text conflict from the linked list */
+ *pconflict = (*pconflict)->next;
+ continue;
+ }
+ else if (resolve_prop
+ && svn_skel__matches_atom(c, SVN_WC__CONFLICT_KIND_PROP))
+ {
+ svn_skel_t **ppropnames = &(c->next->next->children);
+
+ if (resolve_prop[0] == '\0')
+ *ppropnames = NULL; /* remove all conflicted property names */
+ else
+ while (*ppropnames)
+ {
+ if (svn_skel__matches_atom(*ppropnames, resolve_prop))
+ {
+ *ppropnames = (*ppropnames)->next;
+ break;
+ }
+ ppropnames = &((*ppropnames)->next);
+ }
+
+ /* If no conflicted property names left */
+ if (!c->next->next->children)
+ {
+ /* Remove the propery conflict skel from the linked list */
+ *pconflict = (*pconflict)->next;
+ continue;
+ }
+ }
+ else if (resolve_tree
+ && svn_skel__matches_atom(c, SVN_WC__CONFLICT_KIND_TREE))
+ {
+ /* Remove the tree conflict from the linked list */
+ *pconflict = (*pconflict)->next;
+ continue;
+ }
+
+ pconflict = &((*pconflict)->next);
+ }
+
+ if (completely_resolved)
+ {
+ /* Nice, we can just call the complete function */
+ svn_boolean_t complete_conflict;
+ SVN_ERR(svn_wc__conflict_skel_is_complete(&complete_conflict,
+ conflict_skel));
+
+ *completely_resolved = !complete_conflict;
+ }
+ return SVN_NO_ERROR;
+}
+
+
+/* A map for svn_wc_operation_t values. */
+static const svn_token_map_t operation_map[] =
+{
+ { "", svn_wc_operation_none },
+ { SVN_WC__CONFLICT_OP_UPDATE, svn_wc_operation_update },
+ { SVN_WC__CONFLICT_OP_SWITCH, svn_wc_operation_switch },
+ { SVN_WC__CONFLICT_OP_MERGE, svn_wc_operation_merge },
+ { NULL }
+};
+
+svn_error_t *
+svn_wc__conflict_read_info(svn_wc_operation_t *operation,
+ const apr_array_header_t **locations,
+ svn_boolean_t *text_conflicted,
+ svn_boolean_t *prop_conflicted,
+ svn_boolean_t *tree_conflicted,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
+ const svn_skel_t *conflict_skel,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_skel_t *op;
+ const svn_skel_t *c;
+
+ SVN_ERR(conflict__get_operation(&op, conflict_skel));
+
+ if (!op)
+ return svn_error_create(SVN_ERR_INCOMPLETE_DATA, NULL,
+ _("Not a completed conflict skel"));
+
+ c = op->children;
+ if (operation)
+ {
+ int value = svn_token__from_mem(operation_map, c->data, c->len);
+
+ if (value != SVN_TOKEN_UNKNOWN)
+ *operation = value;
+ else
+ *operation = svn_wc_operation_none;
+ }
+ c = c->next;
+
+ if (locations && c->children)
+ {
+ const svn_skel_t *loc_skel;
+ svn_wc_conflict_version_t *loc;
+ apr_array_header_t *locs = apr_array_make(result_pool, 2, sizeof(loc));
+
+ for (loc_skel = c->children; loc_skel; loc_skel = loc_skel->next)
+ {
+ SVN_ERR(conflict__read_location(&loc, loc_skel, result_pool,
+ scratch_pool));
+
+ APR_ARRAY_PUSH(locs, svn_wc_conflict_version_t *) = loc;
+ }
+
+ *locations = locs;
+ }
+ else if (locations)
+ *locations = NULL;
+
+ if (text_conflicted)
+ {
+ svn_skel_t *c_skel;
+ SVN_ERR(conflict__get_conflict(&c_skel, conflict_skel,
+ SVN_WC__CONFLICT_KIND_TEXT));
+
+ *text_conflicted = (c_skel != NULL);
+ }
+
+ if (prop_conflicted)
+ {
+ svn_skel_t *c_skel;
+ SVN_ERR(conflict__get_conflict(&c_skel, conflict_skel,
+ SVN_WC__CONFLICT_KIND_PROP));
+
+ *prop_conflicted = (c_skel != NULL);
+ }
+
+ if (tree_conflicted)
+ {
+ svn_skel_t *c_skel;
+ SVN_ERR(conflict__get_conflict(&c_skel, conflict_skel,
+ SVN_WC__CONFLICT_KIND_TREE));
+
+ *tree_conflicted = (c_skel != NULL);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_wc__conflict_read_text_conflict(const char **mine_abspath,
+ const char **their_old_abspath,
+ const char **their_abspath,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
+ const svn_skel_t *conflict_skel,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_skel_t *text_conflict;
+ const svn_skel_t *m;
+
+ SVN_ERR(conflict__get_conflict(&text_conflict, conflict_skel,
+ SVN_WC__CONFLICT_KIND_TEXT));
+
+ if (!text_conflict)
+ return svn_error_create(SVN_ERR_WC_MISSING, NULL, _("Conflict not set"));
+
+ m = text_conflict->children->next->children;
+
+ if (their_old_abspath)
+ {
+ if (m->is_atom)
+ {
+ const char *original_relpath;
+
+ original_relpath = apr_pstrmemdup(scratch_pool, m->data, m->len);
+ SVN_ERR(svn_wc__db_from_relpath(their_old_abspath,
+ db, wri_abspath, original_relpath,
+ result_pool, scratch_pool));
+ }
+ else
+ *their_old_abspath = NULL;
+ }
+ m = m->next;
+
+ if (mine_abspath)
+ {
+ if (m->is_atom)
+ {
+ const char *mine_relpath;
+
+ mine_relpath = apr_pstrmemdup(scratch_pool, m->data, m->len);
+ SVN_ERR(svn_wc__db_from_relpath(mine_abspath,
+ db, wri_abspath, mine_relpath,
+ result_pool, scratch_pool));
+ }
+ else
+ *mine_abspath = NULL;
+ }
+ m = m->next;
+
+ if (their_abspath)
+ {
+ if (m->is_atom)
+ {
+ const char *their_relpath;
+
+ their_relpath = apr_pstrmemdup(scratch_pool, m->data, m->len);
+ SVN_ERR(svn_wc__db_from_relpath(their_abspath,
+ db, wri_abspath, their_relpath,
+ result_pool, scratch_pool));
+ }
+ else
+ *their_abspath = NULL;
+ }
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__conflict_read_prop_conflict(const char **marker_abspath,
+ apr_hash_t **mine_props,
+ apr_hash_t **their_old_props,
+ apr_hash_t **their_props,
+ apr_hash_t **conflicted_prop_names,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
+ const svn_skel_t *conflict_skel,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_skel_t *prop_conflict;
+ const svn_skel_t *c;
+
+ SVN_ERR(conflict__get_conflict(&prop_conflict, conflict_skel,
+ SVN_WC__CONFLICT_KIND_PROP));
+
+ if (!prop_conflict)
+ return svn_error_create(SVN_ERR_WC_MISSING, NULL, _("Conflict not set"));
+
+ c = prop_conflict->children;
+
+ c = c->next; /* Skip "prop" */
+
+ /* Get marker file */
+ if (marker_abspath)
+ {
+ const char *marker_relpath;
+
+ if (c->children && c->children->is_atom)
+ {
+ marker_relpath = apr_pstrmemdup(result_pool, c->children->data,
+ c->children->len);
+
+ SVN_ERR(svn_wc__db_from_relpath(marker_abspath, db, wri_abspath,
+ marker_relpath,
+ result_pool, scratch_pool));
+ }
+ else
+ *marker_abspath = NULL;
+ }
+ c = c->next;
+
+ /* Get conflicted properties */
+ if (conflicted_prop_names)
+ {
+ const svn_skel_t *name;
+ *conflicted_prop_names = apr_hash_make(result_pool);
+
+ for (name = c->children; name; name = name->next)
+ {
+ svn_hash_sets(*conflicted_prop_names,
+ apr_pstrmemdup(result_pool, name->data, name->len),
+ "");
+ }
+ }
+ c = c->next;
+
+ /* Get original properties */
+ if (their_old_props)
+ {
+ if (c->is_atom)
+ *their_old_props = apr_hash_make(result_pool);
+ else
+ SVN_ERR(svn_skel__parse_proplist(their_old_props, c, result_pool));
+ }
+ c = c->next;
+
+ /* Get mine properties */
+ if (mine_props)
+ {
+ if (c->is_atom)
+ *mine_props = apr_hash_make(result_pool);
+ else
+ SVN_ERR(svn_skel__parse_proplist(mine_props, c, result_pool));
+ }
+ c = c->next;
+
+ /* Get their properties */
+ if (their_props)
+ {
+ if (c->is_atom)
+ *their_props = apr_hash_make(result_pool);
+ else
+ SVN_ERR(svn_skel__parse_proplist(their_props, c, result_pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__conflict_read_tree_conflict(svn_wc_conflict_reason_t *local_change,
+ svn_wc_conflict_action_t *incoming_change,
+ const char **move_src_op_root_abspath,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
+ const svn_skel_t *conflict_skel,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_skel_t *tree_conflict;
+ const svn_skel_t *c;
+ svn_boolean_t is_moved_away = FALSE;
+
+ SVN_ERR(conflict__get_conflict(&tree_conflict, conflict_skel,
+ SVN_WC__CONFLICT_KIND_TREE));
+
+ if (!tree_conflict)
+ return svn_error_create(SVN_ERR_WC_MISSING, NULL, _("Conflict not set"));
+
+ c = tree_conflict->children;
+
+ c = c->next; /* Skip "tree" */
+
+ c = c->next; /* Skip markers */
+
+ {
+ int value = svn_token__from_mem(local_change_map, c->data, c->len);
+
+ if (local_change)
+ {
+ if (value != SVN_TOKEN_UNKNOWN)
+ *local_change = value;
+ else
+ *local_change = svn_wc_conflict_reason_edited;
+ }
+
+ is_moved_away = (value == svn_wc_conflict_reason_moved_away);
+ }
+ c = c->next;
+
+ if (incoming_change)
+ {
+ int value = svn_token__from_mem(incoming_change_map, c->data, c->len);
+
+ if (value != SVN_TOKEN_UNKNOWN)
+ *incoming_change = value;
+ else
+ *incoming_change = svn_wc_conflict_action_edit;
+ }
+
+ c = c->next;
+
+ if (move_src_op_root_abspath)
+ {
+ /* Only set for update and switch tree conflicts */
+ if (c && is_moved_away)
+ {
+ const char *move_src_op_root_relpath
+ = apr_pstrmemdup(scratch_pool, c->data, c->len);
+
+ SVN_ERR(svn_wc__db_from_relpath(move_src_op_root_abspath,
+ db, wri_abspath,
+ move_src_op_root_relpath,
+ result_pool, scratch_pool));
+ }
+ else
+ *move_src_op_root_abspath = NULL;
+ }
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__conflict_read_markers(const apr_array_header_t **markers,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
+ const svn_skel_t *conflict_skel,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ const svn_skel_t *conflict;
+ apr_array_header_t *list = NULL;
+
+ SVN_ERR_ASSERT(conflict_skel != NULL);
+
+ /* Walk the conflicts */
+ for (conflict = conflict_skel->children->next->children;
+ conflict;
+ conflict = conflict->next)
+ {
+ const svn_skel_t *marker;
+
+ /* Get the list of markers stored per conflict */
+ for (marker = conflict->children->next->children;
+ marker;
+ marker = marker->next)
+ {
+ /* Skip placeholders */
+ if (! marker->is_atom)
+ continue;
+
+ if (! list)
+ list = apr_array_make(result_pool, 4, sizeof(const char *));
+
+ SVN_ERR(svn_wc__db_from_relpath(
+ &APR_ARRAY_PUSH(list, const char*),
+ db, wri_abspath,
+ apr_pstrmemdup(scratch_pool, marker->data,
+ marker->len),
+ result_pool, scratch_pool));
+ }
+ }
+ *markers = list;
+
+ return SVN_NO_ERROR;
+}
+
+/* --------------------------------------------------------------------
+ */
+/* Helper for svn_wc__conflict_create_markers */
+static svn_skel_t *
+prop_conflict_skel_new(apr_pool_t *result_pool)
{
svn_skel_t *operation = svn_skel__make_empty_list(result_pool);
svn_skel_t *result = svn_skel__make_empty_list(result_pool);
@@ -61,6 +1062,7 @@ svn_wc__conflict_skel_new(apr_pool_t *result_pool)
}
+/* Helper for prop_conflict_skel_add */
static void
prepend_prop_value(const svn_string_t *value,
svn_skel_t *skel,
@@ -80,8 +1082,9 @@ prepend_prop_value(const svn_string_t *value,
}
-svn_error_t *
-svn_wc__conflict_skel_add_prop_conflict(
+/* Helper for svn_wc__conflict_create_markers */
+static svn_error_t *
+prop_conflict_skel_add(
svn_skel_t *skel,
const char *prop_name,
const svn_string_t *original_value,
@@ -110,326 +1113,1890 @@ svn_wc__conflict_skel_add_prop_conflict(
return SVN_NO_ERROR;
}
+svn_error_t *
+svn_wc__conflict_create_markers(svn_skel_t **work_items,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_skel_t *conflict_skel,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_boolean_t prop_conflicted;
+ svn_wc_operation_t operation;
+ *work_items = NULL;
+ SVN_ERR(svn_wc__conflict_read_info(&operation, NULL,
+ NULL, &prop_conflicted, NULL,
+ db, local_abspath,
+ conflict_skel,
+ scratch_pool, scratch_pool));
-
-/*** Resolving a conflict automatically ***/
+ if (prop_conflicted)
+ {
+ const char *marker_abspath = NULL;
+ svn_node_kind_t kind;
+ const char *marker_dir;
+ const char *marker_name;
+ const char *marker_relpath;
+
+ /* Ok, currently we have to do a few things for property conflicts:
+ - Create a marker file
+ - Create a WQ item that sets the marker name
+ - Create a WQ item that fills the marker with the expected data
+ This can be simplified once we really store conflict_skel in wc.db */
-/* Helper for resolve_conflict_on_entry. Delete the file FILE_ABSPATH
- in if it exists. Set WAS_PRESENT to TRUE if the file existed, and
- leave it UNTOUCHED otherwise. */
+ SVN_ERR(svn_io_check_path(local_abspath, &kind, scratch_pool));
+
+ if (kind == svn_node_dir)
+ {
+ marker_dir = local_abspath;
+ marker_name = SVN_WC__THIS_DIR_PREJ;
+ }
+ else
+ svn_dirent_split(&marker_dir, &marker_name, local_abspath,
+ scratch_pool);
+
+ SVN_ERR(svn_io_open_uniquely_named(NULL, &marker_abspath,
+ marker_dir,
+ marker_name,
+ SVN_WC__PROP_REJ_EXT,
+ svn_io_file_del_none,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(svn_wc__db_to_relpath(&marker_relpath, db, local_abspath,
+ marker_abspath, result_pool, result_pool));
+
+ /* And store the marker in the skel */
+ {
+ svn_skel_t *prop_conflict;
+ SVN_ERR(conflict__get_conflict(&prop_conflict, conflict_skel,
+ SVN_WC__CONFLICT_KIND_PROP));
+
+ svn_skel__prepend_str(marker_relpath, prop_conflict->children->next,
+ result_pool);
+ }
+
+ /* Store the data in the WQ item in the same format used as 1.7.
+ Once we store the data in DB it is easier to just read it back
+ from the workqueue */
+ {
+ svn_skel_t *prop_data;
+ apr_hash_index_t *hi;
+ apr_hash_t *old_props;
+ apr_hash_t *mine_props;
+ apr_hash_t *their_original_props;
+ apr_hash_t *their_props;
+ apr_hash_t *conflicted_props;
+
+ SVN_ERR(svn_wc__conflict_read_prop_conflict(NULL,
+ &mine_props,
+ &their_original_props,
+ &their_props,
+ &conflicted_props,
+ db, local_abspath,
+ conflict_skel,
+ scratch_pool,
+ scratch_pool));
+
+ if (operation == svn_wc_operation_merge)
+ SVN_ERR(svn_wc__db_read_pristine_props(&old_props, db, local_abspath,
+ scratch_pool, scratch_pool));
+ else
+ old_props = their_original_props;
+
+ prop_data = prop_conflict_skel_new(result_pool);
+
+ for (hi = apr_hash_first(scratch_pool, conflicted_props);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ const char *propname = svn__apr_hash_index_key(hi);
+
+ SVN_ERR(prop_conflict_skel_add(
+ prop_data, propname,
+ old_props
+ ? svn_hash_gets(old_props, propname)
+ : NULL,
+ mine_props
+ ? svn_hash_gets(mine_props, propname)
+ : NULL,
+ their_props
+ ? svn_hash_gets(their_props, propname)
+ : NULL,
+ their_original_props
+ ? svn_hash_gets(their_original_props, propname)
+ : NULL,
+ result_pool, scratch_pool));
+ }
+
+ SVN_ERR(svn_wc__wq_build_prej_install(work_items,
+ db, local_abspath,
+ prop_data,
+ scratch_pool, scratch_pool));
+ }
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Helper function for the three apply_* functions below, used when
+ * merging properties together.
+ *
+ * Given property PROPNAME on LOCAL_ABSPATH, and four possible property
+ * values, generate four tmpfiles and pass them to CONFLICT_FUNC callback.
+ * This gives the client an opportunity to interactively resolve the
+ * property conflict.
+ *
+ * BASE_VAL/WORKING_VAL represent the current state of the working
+ * copy, and INCOMING_OLD_VAL/INCOMING_NEW_VAL represents the incoming
+ * propchange. Any of these values might be NULL, indicating either
+ * non-existence or intent-to-delete.
+ *
+ * If the callback isn't available, or if it responds with
+ * 'choose_postpone', then set *CONFLICT_REMAINS to TRUE and return.
+ *
+ * If the callback responds with a choice of 'base', 'theirs', 'mine',
+ * or 'merged', then install the proper value into ACTUAL_PROPS and
+ * set *CONFLICT_REMAINS to FALSE.
+ */
static svn_error_t *
-attempt_deletion(const char *file_abspath,
- svn_boolean_t *was_present,
- apr_pool_t *scratch_pool)
+generate_propconflict(svn_boolean_t *conflict_remains,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_wc_operation_t operation,
+ const svn_wc_conflict_version_t *left_version,
+ const svn_wc_conflict_version_t *right_version,
+ const char *propname,
+ const svn_string_t *base_val,
+ const svn_string_t *working_val,
+ const svn_string_t *incoming_old_val,
+ const svn_string_t *incoming_new_val,
+ svn_wc_conflict_resolver_func2_t conflict_func,
+ void *conflict_baton,
+ apr_pool_t *scratch_pool)
{
- svn_error_t *err;
+ svn_wc_conflict_result_t *result = NULL;
+ svn_wc_conflict_description2_t *cdesc;
+ const char *dirpath = svn_dirent_dirname(local_abspath, scratch_pool);
+ svn_node_kind_t kind;
+ const svn_string_t *new_value = NULL;
+
+ SVN_ERR(svn_wc__db_read_kind(&kind, db, local_abspath,
+ FALSE /* allow_missing */,
+ FALSE /* show_deleted */,
+ FALSE /* show_hidden */,
+ scratch_pool));
+
+ if (kind == svn_node_none)
+ return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
+ _("The node '%s' was not found."),
+ svn_dirent_local_style(local_abspath,
+ scratch_pool));
+
+ cdesc = svn_wc_conflict_description_create_prop2(
+ local_abspath,
+ (kind == svn_node_dir) ? svn_node_dir : svn_node_file,
+ propname, scratch_pool);
+
+ cdesc->operation = operation;
+ cdesc->src_left_version = left_version;
+ cdesc->src_right_version = right_version;
+
+ /* Create a tmpfile for each of the string_t's we've got. */
+ if (working_val)
+ {
+ const char *file_name;
- if (file_abspath == NULL)
- return SVN_NO_ERROR;
+ SVN_ERR(svn_io_write_unique(&file_name, dirpath, working_val->data,
+ working_val->len,
+ svn_io_file_del_on_pool_cleanup,
+ scratch_pool));
+ cdesc->my_abspath = svn_dirent_join(dirpath, file_name, scratch_pool);
+ }
+
+ if (incoming_new_val)
+ {
+ const char *file_name;
- err = svn_io_remove_file2(file_abspath, FALSE, scratch_pool);
+ SVN_ERR(svn_io_write_unique(&file_name, dirpath, incoming_new_val->data,
+ incoming_new_val->len,
+ svn_io_file_del_on_pool_cleanup,
+ scratch_pool));
+ cdesc->their_abspath = svn_dirent_join(dirpath, file_name, scratch_pool);
+ }
+
+ if (!base_val && !incoming_old_val)
+ {
+ /* If base and old are both NULL, then that's fine, we just let
+ base_file stay NULL as-is. Both agents are attempting to add a
+ new property. */
+ }
- if (err == NULL || !APR_STATUS_IS_ENOENT(err->apr_err))
+ else if ((base_val && !incoming_old_val)
+ || (!base_val && incoming_old_val))
{
- *was_present = TRUE;
- return svn_error_trace(err);
+ /* If only one of base and old are defined, then we've got a
+ situation where one agent is attempting to add the property
+ for the first time, and the other agent is changing a
+ property it thinks already exists. In this case, we return
+ whichever older-value happens to be defined, so that the
+ conflict-callback can still attempt a 3-way merge. */
+
+ const svn_string_t *conflict_base_val = base_val ? base_val
+ : incoming_old_val;
+ const char *file_name;
+
+ SVN_ERR(svn_io_write_unique(&file_name, dirpath,
+ conflict_base_val->data,
+ conflict_base_val->len,
+ svn_io_file_del_on_pool_cleanup,
+ scratch_pool));
+ cdesc->base_abspath = svn_dirent_join(dirpath, file_name, scratch_pool);
}
- svn_error_clear(err);
+ else /* base and old are both non-NULL */
+ {
+ const svn_string_t *conflict_base_val;
+ const char *file_name;
+
+ if (! svn_string_compare(base_val, incoming_old_val))
+ {
+ /* What happens if 'base' and 'old' don't match up? In an
+ ideal situation, they would. But if they don't, this is
+ a classic example of a patch 'hunk' failing to apply due
+ to a lack of context. For example: imagine that the user
+ is busy changing the property from a value of "cat" to
+ "dog", but the incoming propchange wants to change the
+ same property value from "red" to "green". Total context
+ mismatch.
+
+ HOWEVER: we can still pass one of the two base values as
+ 'base_file' to the callback anyway. It's still useful to
+ present the working and new values to the user to
+ compare. */
+
+ if (working_val && svn_string_compare(base_val, working_val))
+ conflict_base_val = incoming_old_val;
+ else
+ conflict_base_val = base_val;
+ }
+ else
+ {
+ conflict_base_val = base_val;
+ }
+
+ SVN_ERR(svn_io_write_unique(&file_name, dirpath, conflict_base_val->data,
+ conflict_base_val->len,
+ svn_io_file_del_on_pool_cleanup, scratch_pool));
+ cdesc->base_abspath = svn_dirent_join(dirpath, file_name, scratch_pool);
+
+ if (working_val && incoming_new_val)
+ {
+ svn_stream_t *mergestream;
+ svn_diff_t *diff;
+ svn_diff_file_options_t *options =
+ svn_diff_file_options_create(scratch_pool);
+
+ SVN_ERR(svn_stream_open_unique(&mergestream, &cdesc->merged_file,
+ NULL, svn_io_file_del_on_pool_cleanup,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_diff_mem_string_diff3(&diff, conflict_base_val,
+ working_val,
+ incoming_new_val, options, scratch_pool));
+ SVN_ERR(svn_diff_mem_string_output_merge2
+ (mergestream, diff, conflict_base_val, working_val,
+ incoming_new_val, NULL, NULL, NULL, NULL,
+ svn_diff_conflict_display_modified_latest, scratch_pool));
+ SVN_ERR(svn_stream_close(mergestream));
+ }
+ }
+
+ if (!incoming_old_val && incoming_new_val)
+ cdesc->action = svn_wc_conflict_action_add;
+ else if (incoming_old_val && !incoming_new_val)
+ cdesc->action = svn_wc_conflict_action_delete;
+ else
+ cdesc->action = svn_wc_conflict_action_edit;
+
+ if (base_val && !working_val)
+ cdesc->reason = svn_wc_conflict_reason_deleted;
+ else if (!base_val && working_val)
+ cdesc->reason = svn_wc_conflict_reason_obstructed;
+ else
+ cdesc->reason = svn_wc_conflict_reason_edited;
+
+ /* Invoke the interactive conflict callback. */
+ {
+ SVN_ERR(conflict_func(&result, cdesc, conflict_baton, scratch_pool,
+ scratch_pool));
+ }
+ if (result == NULL)
+ {
+ *conflict_remains = TRUE;
+ return svn_error_create(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE,
+ NULL, _("Conflict callback violated API:"
+ " returned no results"));
+ }
+
+
+ switch (result->choice)
+ {
+ default:
+ case svn_wc_conflict_choose_postpone:
+ {
+ *conflict_remains = TRUE;
+ break;
+ }
+ case svn_wc_conflict_choose_mine_full:
+ {
+ /* No need to change actual_props; it already contains working_val */
+ *conflict_remains = FALSE;
+ new_value = working_val;
+ break;
+ }
+ /* I think _mine_full and _theirs_full are appropriate for prop
+ behavior as well as the text behavior. There should even be
+ analogous behaviors for _mine and _theirs when those are
+ ready, namely: fold in all non-conflicting prop changes, and
+ then choose _mine side or _theirs side for conflicting ones. */
+ case svn_wc_conflict_choose_theirs_full:
+ {
+ *conflict_remains = FALSE;
+ new_value = incoming_new_val;
+ break;
+ }
+ case svn_wc_conflict_choose_base:
+ {
+ *conflict_remains = FALSE;
+ new_value = base_val;
+ break;
+ }
+ case svn_wc_conflict_choose_merged:
+ {
+ svn_stringbuf_t *merged_stringbuf;
+
+ if (!cdesc->merged_file && !result->merged_file)
+ return svn_error_create
+ (SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE,
+ NULL, _("Conflict callback violated API:"
+ " returned no merged file"));
+
+ SVN_ERR(svn_stringbuf_from_file2(&merged_stringbuf,
+ result->merged_file ?
+ result->merged_file :
+ cdesc->merged_file,
+ scratch_pool));
+ new_value = svn_stringbuf__morph_into_string(merged_stringbuf);
+ *conflict_remains = FALSE;
+ break;
+ }
+ }
+
+ if (!*conflict_remains)
+ {
+ apr_hash_t *props;
+
+ /* For now, just set the property values. This should really do some of the
+ more advanced things from svn_wc_prop_set() */
+
+ SVN_ERR(svn_wc__db_read_props(&props, db, local_abspath, scratch_pool,
+ scratch_pool));
+
+ svn_hash_sets(props, propname, new_value);
+
+ SVN_ERR(svn_wc__db_op_set_props(db, local_abspath, props,
+ FALSE, NULL, NULL,
+ scratch_pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Resolve the text conflict on DB/LOCAL_ABSPATH in the manner specified
+ * by CHOICE.
+ *
+ * Set *WORK_ITEMS to new work items that will make the on-disk changes
+ * needed to complete the resolution (but not to mark it as resolved).
+ * Set *IS_RESOLVED to true if the conflicts are resolved; otherwise
+ * (which is only if CHOICE is 'postpone') to false.
+ *
+ * LEFT_ABSPATH, RIGHT_ABSPATH, and DETRANSLATED_TARGET are the
+ * input files to the 3-way merge that will be performed if CHOICE is
+ * 'theirs-conflict' or 'mine-conflict'. LEFT_ABSPATH is also the file
+ * that will be used if CHOICE is 'base', and RIGHT_ABSPATH if CHOICE is
+ * 'theirs-full'. MERGED_ABSPATH will be used if CHOICE is 'merged'.
+ *
+ * DETRANSLATED_TARGET is the detranslated version of 'mine' (see
+ * detranslate_wc_file() above). MERGE_OPTIONS are passed to the
+ * diff3 implementation in case a 3-way merge has to be carried out.
+ */
+static svn_error_t *
+eval_text_conflict_func_result(svn_skel_t **work_items,
+ svn_boolean_t *is_resolved,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_wc_conflict_choice_t choice,
+ const apr_array_header_t *merge_options,
+ const char *left_abspath,
+ const char *right_abspath,
+ const char *merged_abspath,
+ const char *detranslated_target,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ const char *install_from_abspath = NULL;
+ svn_boolean_t remove_source = FALSE;
+
+ *work_items = NULL;
+
+ switch (choice)
+ {
+ /* If the callback wants to use one of the fulltexts
+ to resolve the conflict, so be it.*/
+ case svn_wc_conflict_choose_base:
+ {
+ install_from_abspath = left_abspath;
+ *is_resolved = TRUE;
+ break;
+ }
+ case svn_wc_conflict_choose_theirs_full:
+ {
+ install_from_abspath = right_abspath;
+ *is_resolved = TRUE;
+ break;
+ }
+ case svn_wc_conflict_choose_mine_full:
+ {
+ install_from_abspath = detranslated_target;
+ *is_resolved = TRUE;
+ break;
+ }
+ case svn_wc_conflict_choose_theirs_conflict:
+ case svn_wc_conflict_choose_mine_conflict:
+ {
+ const char *chosen_abspath;
+ const char *temp_dir;
+ svn_stream_t *chosen_stream;
+ svn_diff_t *diff;
+ svn_diff_conflict_display_style_t style;
+ svn_diff_file_options_t *diff3_options;
+
+ diff3_options = svn_diff_file_options_create(scratch_pool);
+
+ if (merge_options)
+ SVN_ERR(svn_diff_file_options_parse(diff3_options,
+ merge_options,
+ scratch_pool));
+
+ style = choice == svn_wc_conflict_choose_theirs_conflict
+ ? svn_diff_conflict_display_latest
+ : svn_diff_conflict_display_modified;
+
+ SVN_ERR(svn_wc__db_temp_wcroot_tempdir(&temp_dir, db,
+ local_abspath,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_stream_open_unique(&chosen_stream, &chosen_abspath,
+ temp_dir, svn_io_file_del_none,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(svn_diff_file_diff3_2(&diff,
+ left_abspath,
+ detranslated_target, right_abspath,
+ diff3_options, scratch_pool));
+ SVN_ERR(svn_diff_file_output_merge2(chosen_stream, diff,
+ left_abspath,
+ detranslated_target,
+ right_abspath,
+ /* markers ignored */
+ NULL, NULL,
+ NULL, NULL,
+ style,
+ scratch_pool));
+ SVN_ERR(svn_stream_close(chosen_stream));
+
+ install_from_abspath = chosen_abspath;
+ remove_source = TRUE;
+ *is_resolved = TRUE;
+ break;
+ }
+
+ /* For the case of 3-way file merging, we don't
+ really distinguish between these return values;
+ if the callback claims to have "generally
+ resolved" the situation, we still interpret
+ that as "OK, we'll assume the merged version is
+ good to use". */
+ case svn_wc_conflict_choose_merged:
+ {
+ install_from_abspath = merged_abspath;
+ *is_resolved = TRUE;
+ break;
+ }
+ case svn_wc_conflict_choose_postpone:
+ default:
+ {
+ /* Assume conflict remains. */
+ *is_resolved = FALSE;
+ return SVN_NO_ERROR;
+ }
+ }
+
+ SVN_ERR_ASSERT(install_from_abspath != NULL);
+
+ {
+ svn_skel_t *work_item;
+
+ SVN_ERR(svn_wc__wq_build_file_install(&work_item,
+ db, local_abspath,
+ install_from_abspath,
+ FALSE /* use_commit_times */,
+ FALSE /* record_fileinfo */,
+ result_pool, scratch_pool));
+ *work_items = svn_wc__wq_merge(*work_items, work_item, result_pool);
+
+ SVN_ERR(svn_wc__wq_build_sync_file_flags(&work_item, db, local_abspath,
+ result_pool, scratch_pool));
+ *work_items = svn_wc__wq_merge(*work_items, work_item, result_pool);
+
+ if (remove_source)
+ {
+ SVN_ERR(svn_wc__wq_build_file_remove(&work_item,
+ db, local_abspath,
+ install_from_abspath,
+ result_pool, scratch_pool));
+ *work_items = svn_wc__wq_merge(*work_items, work_item, result_pool);
+ }
+ }
+
return SVN_NO_ERROR;
}
-/* Conflict resolution involves removing the conflict files, if they exist,
- and clearing the conflict filenames from the entry. The latter needs to
- be done whether or not the conflict files exist.
+/* Create a new file in the same directory as LOCAL_ABSPATH, with the
+ same basename as LOCAL_ABSPATH, with a ".edited" extension, and set
+ *WORK_ITEM to a new work item that will copy and translate from the file
+ SOURCE_ABSPATH to that new file. It will be translated from repository-
+ normal form to working-copy form according to the versioned properties
+ of LOCAL_ABSPATH that are current when the work item is executed.
- Tree conflicts are not resolved here, because the data stored in one
- entry does not refer to that entry but to children of it.
+ DB should have a write lock for the directory containing SOURCE.
- PATH is the path to the item to be resolved, BASE_NAME is the basename
- of PATH, and CONFLICT_DIR is the access baton for PATH. ORIG_ENTRY is
- the entry prior to resolution. RESOLVE_TEXT and RESOLVE_PROPS are TRUE
- if text and property conflicts respectively are to be resolved.
+ Allocate *WORK_ITEM in RESULT_POOL. */
+static svn_error_t *
+save_merge_result(svn_skel_t **work_item,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ const char *source_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ const char *edited_copy_abspath;
+ const char *dir_abspath;
+ const char *filename;
+
+ svn_dirent_split(&dir_abspath, &filename, local_abspath, scratch_pool);
+
+ /* ### Should use preserved-conflict-file-exts. */
+ /* Create the .edited file within this file's DIR_ABSPATH */
+ SVN_ERR(svn_io_open_uniquely_named(NULL,
+ &edited_copy_abspath,
+ dir_abspath,
+ filename,
+ ".edited",
+ svn_io_file_del_none,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__wq_build_file_copy_translated(work_item,
+ db, local_abspath,
+ source_abspath,
+ edited_copy_abspath,
+ result_pool, scratch_pool));
+ return SVN_NO_ERROR;
+}
- If this call marks any conflict as resolved, set *DID_RESOLVE to true,
- else do not change *DID_RESOLVE.
- See svn_wc_resolved_conflict5() for how CONFLICT_CHOICE behaves.
+/* Call the conflict resolver callback for a text conflict, and resolve
+ * the conflict if it tells us to do so.
+ *
+ * Assume that there is a text conflict on the path DB/LOCAL_ABSPATH.
+ *
+ * Call CONFLICT_FUNC with CONFLICT_BATON to find out whether and how
+ * it wants to resolve the conflict. Pass it a conflict description
+ * containing OPERATION, LEFT/RIGHT_ABSPATH, LEFT/RIGHT_VERSION,
+ * RESULT_TARGET and DETRANSLATED_TARGET.
+ *
+ * If the callback returns a resolution other than 'postpone', then
+ * perform that requested resolution and prepare to mark the conflict
+ * as resolved.
+ *
+ * Return *WORK_ITEMS that will do the on-disk work required to complete
+ * the resolution (but not to mark the conflict as resolved), and set
+ * *WAS_RESOLVED to true, if it was resolved. Set *WORK_ITEMS to NULL
+ * and *WAS_RESOLVED to FALSE otherwise.
+ *
+ * RESULT_TARGET is the path to the merged file produced by the internal
+ * or external 3-way merge, which may contain conflict markers, in
+ * repository normal form. DETRANSLATED_TARGET is the 'mine' version of
+ * the file, also in RNF.
+ */
+static svn_error_t *
+resolve_text_conflict(svn_skel_t **work_items,
+ svn_boolean_t *was_resolved,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ const apr_array_header_t *merge_options,
+ svn_wc_operation_t operation,
+ const char *left_abspath,
+ const char *right_abspath,
+ const svn_wc_conflict_version_t *left_version,
+ const svn_wc_conflict_version_t *right_version,
+ const char *result_target,
+ const char *detranslated_target,
+ svn_wc_conflict_resolver_func2_t conflict_func,
+ void *conflict_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc_conflict_result_t *result;
+ svn_skel_t *work_item;
+ svn_wc_conflict_description2_t *cdesc;
+ apr_hash_t *props;
+
+ *work_items = NULL;
+ *was_resolved = FALSE;
+
+ /* Give the conflict resolution callback a chance to clean
+ up the conflicts before we mark the file 'conflicted' */
+
+ SVN_ERR(svn_wc__db_read_props(&props, db, local_abspath,
+ scratch_pool, scratch_pool));
+
+ cdesc = svn_wc_conflict_description_create_text2(local_abspath,
+ scratch_pool);
+ cdesc->is_binary = FALSE;
+ cdesc->mime_type = svn_prop_get_value(props, SVN_PROP_MIME_TYPE);
+ cdesc->base_abspath = left_abspath;
+ cdesc->their_abspath = right_abspath;
+ cdesc->my_abspath = detranslated_target;
+ cdesc->merged_file = result_target;
+ cdesc->operation = operation;
+ cdesc->src_left_version = left_version;
+ cdesc->src_right_version = right_version;
+
+ SVN_ERR(conflict_func(&result, cdesc, conflict_baton, scratch_pool,
+ scratch_pool));
+ if (result == NULL)
+ return svn_error_create(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE, NULL,
+ _("Conflict callback violated API:"
+ " returned no results"));
+
+ if (result->save_merged)
+ {
+ SVN_ERR(save_merge_result(work_items,
+ db, local_abspath,
+ /* Look for callback's own
+ merged-file first: */
+ result->merged_file
+ ? result->merged_file
+ : result_target,
+ result_pool, scratch_pool));
+ }
+
+ if (result->choice != svn_wc_conflict_choose_postpone)
+ {
+ SVN_ERR(eval_text_conflict_func_result(&work_item,
+ was_resolved,
+ db, local_abspath,
+ result->choice,
+ merge_options,
+ left_abspath,
+ right_abspath,
+ /* ### Sure this is an abspath? */
+ result->merged_file
+ ? result->merged_file
+ : result_target,
+ detranslated_target,
+ result_pool, scratch_pool));
+ *work_items = svn_wc__wq_merge(*work_items, work_item, result_pool);
+ }
+ else
+ *was_resolved = FALSE;
+
+ return SVN_NO_ERROR;
+}
- ### FIXME: This function should be loggy, otherwise an interruption can
- ### leave, for example, one of the conflict artifact files deleted but
- ### the entry still referring to it and trying to use it for the next
- ### attempt at resolving.
- ### Does this still apply in the world of WC-NG? -hkw
-*/
static svn_error_t *
-resolve_conflict_on_node(svn_wc__db_t *db,
+setup_tree_conflict_desc(svn_wc_conflict_description2_t **desc,
+ svn_wc__db_t *db,
const char *local_abspath,
- svn_boolean_t resolve_text,
- svn_boolean_t resolve_props,
- svn_wc_conflict_choice_t conflict_choice,
- svn_boolean_t *did_resolve,
- apr_pool_t *pool)
+ svn_wc_operation_t operation,
+ const svn_wc_conflict_version_t *left_version,
+ const svn_wc_conflict_version_t *right_version,
+ svn_wc_conflict_reason_t local_change,
+ svn_wc_conflict_action_t incoming_change,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- svn_boolean_t found_file;
- const char *conflict_old = NULL;
- const char *conflict_new = NULL;
- const char *conflict_working = NULL;
- const char *prop_reject_file = NULL;
- svn_wc__db_kind_t kind;
- int i;
- const apr_array_header_t *conflicts;
- const char *conflict_dir_abspath;
+ svn_node_kind_t tc_kind;
- *did_resolve = FALSE;
+ if (left_version)
+ tc_kind = left_version->node_kind;
+ else if (right_version)
+ tc_kind = right_version->node_kind;
+ else
+ tc_kind = svn_node_file; /* Avoid assertion */
- SVN_ERR(svn_wc__db_read_kind(&kind, db, local_abspath, TRUE, pool));
- SVN_ERR(svn_wc__db_read_conflicts(&conflicts, db, local_abspath,
- pool, pool));
+ *desc = svn_wc_conflict_description_create_tree2(local_abspath, tc_kind,
+ operation,
+ left_version, right_version,
+ result_pool);
+ (*desc)->reason = local_change;
+ (*desc)->action = incoming_change;
- for (i = 0; i < conflicts->nelts; i++)
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_wc__conflict_invoke_resolver(svn_wc__db_t *db,
+ const char *local_abspath,
+ const svn_skel_t *conflict_skel,
+ const apr_array_header_t *merge_options,
+ svn_wc_conflict_resolver_func2_t resolver_func,
+ void *resolver_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
+{
+ svn_boolean_t text_conflicted;
+ svn_boolean_t prop_conflicted;
+ svn_boolean_t tree_conflicted;
+ svn_wc_operation_t operation;
+ const apr_array_header_t *locations;
+ const svn_wc_conflict_version_t *left_version = NULL;
+ const svn_wc_conflict_version_t *right_version = NULL;
+
+ SVN_ERR(svn_wc__conflict_read_info(&operation, &locations,
+ &text_conflicted, &prop_conflicted,
+ &tree_conflicted,
+ db, local_abspath, conflict_skel,
+ scratch_pool, scratch_pool));
+
+ if (locations && locations->nelts > 0)
+ left_version = APR_ARRAY_IDX(locations, 0, const svn_wc_conflict_version_t *);
+
+ if (locations && locations->nelts > 1)
+ right_version = APR_ARRAY_IDX(locations, 1, const svn_wc_conflict_version_t *);
+
+ /* Quick and dirty compatibility wrapper. My guess would be that most resolvers
+ would want to look at all properties at the same time.
+
+ ### svn currently only invokes this from the merge code to collect the list of
+ ### conflicted paths. Eventually this code will be the base for 'svn resolve'
+ ### and at that time the test coverage will improve
+ */
+ if (prop_conflicted)
{
- const svn_wc_conflict_description2_t *desc;
+ apr_hash_t *old_props;
+ apr_hash_t *mine_props;
+ apr_hash_t *their_props;
+ apr_hash_t *old_their_props;
+ apr_hash_t *conflicted;
+ apr_pool_t *iterpool;
+ apr_hash_index_t *hi;
+ svn_boolean_t mark_resolved = TRUE;
+
+ SVN_ERR(svn_wc__conflict_read_prop_conflict(NULL,
+ &mine_props,
+ &old_their_props,
+ &their_props,
+ &conflicted,
+ db, local_abspath,
+ conflict_skel,
+ scratch_pool, scratch_pool));
+
+ if (operation == svn_wc_operation_merge)
+ SVN_ERR(svn_wc__db_read_pristine_props(&old_props, db, local_abspath,
+ scratch_pool, scratch_pool));
+ else
+ old_props = old_their_props;
- desc = APR_ARRAY_IDX(conflicts, i,
- const svn_wc_conflict_description2_t*);
+ iterpool = svn_pool_create(scratch_pool);
- if (desc->kind == svn_wc_conflict_kind_text)
+ for (hi = apr_hash_first(scratch_pool, conflicted);
+ hi;
+ hi = apr_hash_next(hi))
{
- conflict_old = desc->base_abspath;
- conflict_new = desc->their_abspath;
- conflict_working = desc->my_abspath;
+ const char *propname = svn__apr_hash_index_key(hi);
+ svn_boolean_t conflict_remains = TRUE;
+
+ svn_pool_clear(iterpool);
+
+ if (cancel_func)
+ SVN_ERR(cancel_func(cancel_baton));
+
+ SVN_ERR(generate_propconflict(&conflict_remains,
+ db, local_abspath,
+ operation,
+ left_version,
+ right_version,
+ propname,
+ old_props
+ ? svn_hash_gets(old_props, propname)
+ : NULL,
+ mine_props
+ ? svn_hash_gets(mine_props, propname)
+ : NULL,
+ old_their_props
+ ? svn_hash_gets(old_their_props, propname)
+ : NULL,
+ their_props
+ ? svn_hash_gets(their_props, propname)
+ : NULL,
+ resolver_func, resolver_baton,
+ iterpool));
+
+ if (conflict_remains)
+ mark_resolved = FALSE;
+ }
+
+ if (mark_resolved)
+ {
+ SVN_ERR(svn_wc__mark_resolved_prop_conflicts(db, local_abspath,
+ scratch_pool));
}
- else if (desc->kind == svn_wc_conflict_kind_property)
- prop_reject_file = desc->their_abspath;
}
- if (kind == svn_wc__db_kind_dir)
- conflict_dir_abspath = local_abspath;
- else
- conflict_dir_abspath = svn_dirent_dirname(local_abspath, pool);
+ if (text_conflicted)
+ {
+ const char *mine_abspath;
+ const char *their_original_abspath;
+ const char *their_abspath;
+ svn_skel_t *work_items;
+ svn_boolean_t was_resolved;
+
+ SVN_ERR(svn_wc__conflict_read_text_conflict(&mine_abspath,
+ &their_original_abspath,
+ &their_abspath,
+ db, local_abspath,
+ conflict_skel,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(resolve_text_conflict(&work_items, &was_resolved,
+ db, local_abspath,
+ merge_options,
+ operation,
+ their_original_abspath, their_abspath,
+ left_version, right_version,
+ local_abspath, mine_abspath,
+ resolver_func, resolver_baton,
+ scratch_pool, scratch_pool));
+
+ if (was_resolved)
+ {
+ if (work_items)
+ {
+ SVN_ERR(svn_wc__db_wq_add(db, local_abspath, work_items,
+ scratch_pool));
+ SVN_ERR(svn_wc__wq_run(db, local_abspath,
+ cancel_func, cancel_baton,
+ scratch_pool));
+ }
+ SVN_ERR(svn_wc__mark_resolved_text_conflict(db, local_abspath,
+ scratch_pool));
+ }
+ }
- if (resolve_text)
+ if (tree_conflicted)
+ {
+ svn_wc_conflict_reason_t local_change;
+ svn_wc_conflict_action_t incoming_change;
+ svn_wc_conflict_result_t *result;
+ svn_wc_conflict_description2_t *desc;
+
+ SVN_ERR(svn_wc__conflict_read_tree_conflict(&local_change,
+ &incoming_change,
+ NULL,
+ db, local_abspath,
+ conflict_skel,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(setup_tree_conflict_desc(&desc,
+ db, local_abspath,
+ operation, left_version, right_version,
+ local_change, incoming_change,
+ scratch_pool, scratch_pool));
+
+ /* Tell the resolver func about this conflict. */
+ SVN_ERR(resolver_func(&result, desc, resolver_baton, scratch_pool,
+ scratch_pool));
+
+ /* Ignore the result. We cannot apply it here since this code runs
+ * during an update or merge operation. Tree conflicts are always
+ * postponed and resolved after the operation has completed. */
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Read all property conflicts contained in CONFLICT_SKEL into
+ * individual conflict descriptions, and append those descriptions
+ * to the CONFLICTS array.
+ *
+ * If NOT create_tempfiles, always create a legacy property conflict
+ * descriptor.
+ *
+ * Use NODE_KIND, OPERATION and shallow copies of LEFT_VERSION and
+ * RIGHT_VERSION, rather than reading them from CONFLICT_SKEL.
+ *
+ * Allocate results in RESULT_POOL. SCRATCH_POOL is used for temporary
+ * allocations. */
+static svn_error_t *
+read_prop_conflicts(apr_array_header_t *conflicts,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_skel_t *conflict_skel,
+ svn_boolean_t create_tempfiles,
+ svn_node_kind_t node_kind,
+ svn_wc_operation_t operation,
+ const svn_wc_conflict_version_t *left_version,
+ const svn_wc_conflict_version_t *right_version,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ const char *prop_reject_file;
+ apr_hash_t *my_props;
+ apr_hash_t *their_old_props;
+ apr_hash_t *their_props;
+ apr_hash_t *conflicted_props;
+ apr_hash_index_t *hi;
+ apr_pool_t *iterpool;
+
+ SVN_ERR(svn_wc__conflict_read_prop_conflict(&prop_reject_file,
+ &my_props,
+ &their_old_props,
+ &their_props,
+ &conflicted_props,
+ db, local_abspath,
+ conflict_skel,
+ scratch_pool, scratch_pool));
+
+ if ((! create_tempfiles) || apr_hash_count(conflicted_props) == 0)
{
- const char *auto_resolve_src;
+ /* Legacy prop conflict with only a .reject file. */
+ svn_wc_conflict_description2_t *desc;
- /* Handle automatic conflict resolution before the temporary files are
- * deleted, if necessary. */
- switch (conflict_choice)
+ desc = svn_wc_conflict_description_create_prop2(local_abspath,
+ node_kind,
+ "", result_pool);
+
+ /* ### This should be changed. The prej file should be stored
+ * ### separately from the other files. We need to rev the
+ * ### conflict description struct for this. */
+ desc->their_abspath = apr_pstrdup(result_pool, prop_reject_file);
+
+ desc->operation = operation;
+ desc->src_left_version = left_version;
+ desc->src_right_version = right_version;
+
+ APR_ARRAY_PUSH(conflicts, svn_wc_conflict_description2_t*) = desc;
+
+ return SVN_NO_ERROR;
+ }
+
+ iterpool = svn_pool_create(scratch_pool);
+ for (hi = apr_hash_first(scratch_pool, conflicted_props);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ const char *propname = svn__apr_hash_index_key(hi);
+ svn_string_t *old_value;
+ svn_string_t *my_value;
+ svn_string_t *their_value;
+ svn_wc_conflict_description2_t *desc;
+
+ svn_pool_clear(iterpool);
+
+ desc = svn_wc_conflict_description_create_prop2(local_abspath,
+ node_kind,
+ propname,
+ result_pool);
+
+ desc->operation = operation;
+ desc->src_left_version = left_version;
+ desc->src_right_version = right_version;
+
+ desc->property_name = apr_pstrdup(result_pool, propname);
+
+ my_value = svn_hash_gets(my_props, propname);
+ their_value = svn_hash_gets(their_props, propname);
+ old_value = svn_hash_gets(their_old_props, propname);
+
+ /* Compute the incoming side of the conflict ('action'). */
+ if (their_value == NULL)
+ desc->action = svn_wc_conflict_action_delete;
+ else if (old_value == NULL)
+ desc->action = svn_wc_conflict_action_add;
+ else
+ desc->action = svn_wc_conflict_action_edit;
+
+ /* Compute the local side of the conflict ('reason'). */
+ if (my_value == NULL)
+ desc->reason = svn_wc_conflict_reason_deleted;
+ else if (old_value == NULL)
+ desc->reason = svn_wc_conflict_reason_added;
+ else
+ desc->reason = svn_wc_conflict_reason_edited;
+
+ /* ### This should be changed. The prej file should be stored
+ * ### separately from the other files. We need to rev the
+ * ### conflict description struct for this. */
+ desc->their_abspath = apr_pstrdup(result_pool, prop_reject_file);
+
+ /* ### This should be changed. The conflict description for
+ * ### props should contain these values as svn_string_t,
+ * ### rather than in temporary files. We need to rev the
+ * ### conflict description struct for this. */
+ if (my_value)
{
- case svn_wc_conflict_choose_base:
- auto_resolve_src = conflict_old;
- break;
- case svn_wc_conflict_choose_mine_full:
- auto_resolve_src = conflict_working;
- break;
- case svn_wc_conflict_choose_theirs_full:
- auto_resolve_src = conflict_new;
- break;
- case svn_wc_conflict_choose_merged:
- auto_resolve_src = NULL;
- break;
- case svn_wc_conflict_choose_theirs_conflict:
- case svn_wc_conflict_choose_mine_conflict:
- {
- if (conflict_old && conflict_working && conflict_new)
- {
- const char *temp_dir;
- svn_stream_t *tmp_stream = NULL;
- svn_diff_t *diff;
- svn_diff_conflict_display_style_t style =
- conflict_choice == svn_wc_conflict_choose_theirs_conflict
- ? svn_diff_conflict_display_latest
- : svn_diff_conflict_display_modified;
-
- SVN_ERR(svn_wc__db_temp_wcroot_tempdir(&temp_dir, db,
- conflict_dir_abspath,
- pool, pool));
- SVN_ERR(svn_stream_open_unique(&tmp_stream,
- &auto_resolve_src,
- temp_dir,
- svn_io_file_del_on_pool_cleanup,
- pool, pool));
-
- SVN_ERR(svn_diff_file_diff3_2(&diff,
- conflict_old,
- conflict_working,
- conflict_new,
- svn_diff_file_options_create(pool),
- pool));
- SVN_ERR(svn_diff_file_output_merge2(tmp_stream, diff,
- conflict_old,
- conflict_working,
- conflict_new,
- /* markers ignored */
- NULL, NULL, NULL, NULL,
- style,
- pool));
- SVN_ERR(svn_stream_close(tmp_stream));
- }
- else
- auto_resolve_src = NULL;
- break;
- }
- default:
- return svn_error_create(SVN_ERR_INCORRECT_PARAMS, NULL,
- _("Invalid 'conflict_result' argument"));
+ svn_stream_t *s;
+ apr_size_t len;
+
+ SVN_ERR(svn_stream_open_unique(&s, &desc->my_abspath, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ result_pool, iterpool));
+ len = my_value->len;
+ SVN_ERR(svn_stream_write(s, my_value->data, &len));
+ SVN_ERR(svn_stream_close(s));
}
- if (auto_resolve_src)
- SVN_ERR(svn_io_copy_file(
- svn_dirent_join(conflict_dir_abspath, auto_resolve_src, pool),
- local_abspath, TRUE, pool));
+ if (their_value)
+ {
+ svn_stream_t *s;
+ apr_size_t len;
+
+ /* ### Currently, their_abspath is used for the prop reject file.
+ * ### Put their value into merged instead...
+ * ### We need to rev the conflict description struct to fix this. */
+ SVN_ERR(svn_stream_open_unique(&s, &desc->merged_file, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ result_pool, iterpool));
+ len = their_value->len;
+ SVN_ERR(svn_stream_write(s, their_value->data, &len));
+ SVN_ERR(svn_stream_close(s));
+ }
+
+ if (old_value)
+ {
+ svn_stream_t *s;
+ apr_size_t len;
+
+ SVN_ERR(svn_stream_open_unique(&s, &desc->base_abspath, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ result_pool, iterpool));
+ len = old_value->len;
+ SVN_ERR(svn_stream_write(s, old_value->data, &len));
+ SVN_ERR(svn_stream_close(s));
+ }
+
+ APR_ARRAY_PUSH(conflicts, svn_wc_conflict_description2_t*) = desc;
}
+ svn_pool_destroy(iterpool);
- /* Records whether we found any of the conflict files. */
- found_file = FALSE;
+ return SVN_NO_ERROR;
+}
- if (resolve_text)
+svn_error_t *
+svn_wc__read_conflicts(const apr_array_header_t **conflicts,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_boolean_t create_tempfiles,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_skel_t *conflict_skel;
+ apr_array_header_t *cflcts;
+ svn_boolean_t prop_conflicted;
+ svn_boolean_t text_conflicted;
+ svn_boolean_t tree_conflicted;
+ svn_wc_operation_t operation;
+ const apr_array_header_t *locations;
+ const svn_wc_conflict_version_t *left_version = NULL;
+ const svn_wc_conflict_version_t *right_version = NULL;
+
+ SVN_ERR(svn_wc__db_read_conflict(&conflict_skel, db, local_abspath,
+ scratch_pool, scratch_pool));
+
+ if (!conflict_skel)
{
- SVN_ERR(attempt_deletion(conflict_old, &found_file, pool));
- SVN_ERR(attempt_deletion(conflict_new, &found_file, pool));
- SVN_ERR(attempt_deletion(conflict_working, &found_file, pool));
- resolve_text = conflict_old || conflict_new || conflict_working;
+ /* Some callers expect not NULL */
+ *conflicts = apr_array_make(result_pool, 0,
+ sizeof(svn_wc_conflict_description2_t*));;
+ return SVN_NO_ERROR;
}
- if (resolve_props)
+
+ SVN_ERR(svn_wc__conflict_read_info(&operation, &locations, &text_conflicted,
+ &prop_conflicted, &tree_conflicted,
+ db, local_abspath, conflict_skel,
+ result_pool, scratch_pool));
+
+ cflcts = apr_array_make(result_pool, 4,
+ sizeof(svn_wc_conflict_description2_t*));
+
+ if (locations && locations->nelts > 0)
+ left_version = APR_ARRAY_IDX(locations, 0, const svn_wc_conflict_version_t *);
+ if (locations && locations->nelts > 1)
+ right_version = APR_ARRAY_IDX(locations, 1, const svn_wc_conflict_version_t *);
+
+ if (prop_conflicted)
{
- if (prop_reject_file != NULL)
- SVN_ERR(attempt_deletion(prop_reject_file, &found_file, pool));
- else
- resolve_props = FALSE;
+ svn_node_kind_t node_kind
+ = left_version ? left_version->node_kind : svn_node_unknown;
+
+ SVN_ERR(read_prop_conflicts(cflcts, db, local_abspath, conflict_skel,
+ create_tempfiles, node_kind,
+ operation, left_version, right_version,
+ result_pool, scratch_pool));
}
- if (resolve_text || resolve_props)
+ if (text_conflicted)
{
- SVN_ERR(svn_wc__db_op_mark_resolved(db, local_abspath,
- resolve_text, resolve_props,
- FALSE, pool));
+ svn_wc_conflict_description2_t *desc;
+ desc = svn_wc_conflict_description_create_text2(local_abspath,
+ result_pool);
+
+ desc->operation = operation;
+ desc->src_left_version = left_version;
+ desc->src_right_version = right_version;
- /* No feedback if no files were deleted and all we did was change the
- entry, such a file did not appear as a conflict */
- if (found_file)
- *did_resolve = TRUE;
+ SVN_ERR(svn_wc__conflict_read_text_conflict(&desc->my_abspath,
+ &desc->base_abspath,
+ &desc->their_abspath,
+ db, local_abspath,
+ conflict_skel,
+ result_pool, scratch_pool));
+
+ desc->merged_file = apr_pstrdup(result_pool, local_abspath);
+
+ APR_ARRAY_PUSH(cflcts, svn_wc_conflict_description2_t*) = desc;
+ }
+
+ if (tree_conflicted)
+ {
+ svn_wc_conflict_reason_t local_change;
+ svn_wc_conflict_action_t incoming_change;
+ svn_wc_conflict_description2_t *desc;
+
+ SVN_ERR(svn_wc__conflict_read_tree_conflict(&local_change,
+ &incoming_change,
+ NULL,
+ db, local_abspath,
+ conflict_skel,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(setup_tree_conflict_desc(&desc,
+ db, local_abspath,
+ operation, left_version, right_version,
+ local_change, incoming_change,
+ result_pool, scratch_pool));
+
+ APR_ARRAY_PUSH(cflcts, const svn_wc_conflict_description2_t *) = desc;
}
+ *conflicts = cflcts;
return SVN_NO_ERROR;
}
+
+/*** Resolving a conflict automatically ***/
-svn_error_t *
-svn_wc__resolve_text_conflict(svn_wc__db_t *db,
+/* Prepare to delete an artifact file at ARTIFACT_FILE_ABSPATH in the
+ * working copy at DB/WRI_ABSPATH.
+ *
+ * Set *WORK_ITEMS to a new work item that, when run, will delete the
+ * artifact file; or to NULL if there is no file to delete.
+ *
+ * Set *FILE_FOUND to TRUE if the artifact file is found on disk and its
+ * node kind is 'file'; otherwise do not change *FILE_FOUND. FILE_FOUND
+ * may be NULL if not required.
+ */
+static svn_error_t *
+remove_artifact_file_if_exists(svn_skel_t **work_items,
+ svn_boolean_t *file_found,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
+ const char *artifact_file_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ *work_items = NULL;
+ if (artifact_file_abspath)
+ {
+ svn_node_kind_t node_kind;
+
+ SVN_ERR(svn_io_check_path(artifact_file_abspath, &node_kind,
+ scratch_pool));
+ if (node_kind == svn_node_file)
+ {
+ SVN_ERR(svn_wc__wq_build_file_remove(work_items,
+ db, wri_abspath,
+ artifact_file_abspath,
+ result_pool, scratch_pool));
+ if (file_found)
+ *file_found = TRUE;
+ }
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/*
+ * Resolve the text conflict found in DB/LOCAL_ABSPATH according
+ * to CONFLICT_CHOICE.
+ *
+ * It is not an error if there is no text conflict. If a text conflict
+ * existed and was resolved, set *DID_RESOLVE to TRUE, else set it to FALSE.
+ *
+ * Note: When there are no conflict markers to remove there is no existing
+ * text conflict; just a database containing old information, which we should
+ * remove to avoid checking all the time. Resolving a text conflict by
+ * removing all the marker files is a fully supported scenario since
+ * Subversion 1.0.
+ */
+static svn_error_t *
+resolve_text_conflict_on_node(svn_boolean_t *did_resolve,
+ svn_wc__db_t *db,
const char *local_abspath,
+ svn_wc_conflict_choice_t conflict_choice,
+ const char *merged_file,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
apr_pool_t *scratch_pool)
{
+ const char *conflict_old = NULL;
+ const char *conflict_new = NULL;
+ const char *conflict_working = NULL;
+ const char *auto_resolve_src;
+ svn_skel_t *work_item;
+ svn_skel_t *work_items = NULL;
+ svn_skel_t *conflicts;
+ svn_wc_operation_t operation;
+ svn_boolean_t text_conflicted;
+
+ *did_resolve = FALSE;
+
+ SVN_ERR(svn_wc__db_read_conflict(&conflicts, db, local_abspath,
+ scratch_pool, scratch_pool));
+ if (!conflicts)
+ return SVN_NO_ERROR;
+
+ SVN_ERR(svn_wc__conflict_read_info(&operation, NULL, &text_conflicted,
+ NULL, NULL, db, local_abspath, conflicts,
+ scratch_pool, scratch_pool));
+ if (!text_conflicted)
+ return SVN_NO_ERROR;
+
+ SVN_ERR(svn_wc__conflict_read_text_conflict(&conflict_working,
+ &conflict_old,
+ &conflict_new,
+ db, local_abspath, conflicts,
+ scratch_pool, scratch_pool));
+
+ /* Handle automatic conflict resolution before the temporary files are
+ * deleted, if necessary. */
+ switch (conflict_choice)
+ {
+ case svn_wc_conflict_choose_base:
+ auto_resolve_src = conflict_old;
+ break;
+ case svn_wc_conflict_choose_mine_full:
+ auto_resolve_src = conflict_working;
+ break;
+ case svn_wc_conflict_choose_theirs_full:
+ auto_resolve_src = conflict_new;
+ break;
+ case svn_wc_conflict_choose_merged:
+ auto_resolve_src = merged_file;
+ break;
+ case svn_wc_conflict_choose_theirs_conflict:
+ case svn_wc_conflict_choose_mine_conflict:
+ {
+ if (conflict_old && conflict_working && conflict_new)
+ {
+ const char *temp_dir;
+ svn_stream_t *tmp_stream = NULL;
+ svn_diff_t *diff;
+ svn_diff_conflict_display_style_t style =
+ conflict_choice == svn_wc_conflict_choose_theirs_conflict
+ ? svn_diff_conflict_display_latest
+ : svn_diff_conflict_display_modified;
+
+ SVN_ERR(svn_wc__db_temp_wcroot_tempdir(&temp_dir, db,
+ local_abspath,
+ scratch_pool,
+ scratch_pool));
+ SVN_ERR(svn_stream_open_unique(&tmp_stream,
+ &auto_resolve_src,
+ temp_dir,
+ svn_io_file_del_on_pool_cleanup,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(svn_diff_file_diff3_2(&diff,
+ conflict_old,
+ conflict_working,
+ conflict_new,
+ svn_diff_file_options_create(
+ scratch_pool),
+ scratch_pool));
+ SVN_ERR(svn_diff_file_output_merge2(tmp_stream, diff,
+ conflict_old,
+ conflict_working,
+ conflict_new,
+ /* markers ignored */
+ NULL, NULL, NULL, NULL,
+ style,
+ scratch_pool));
+ SVN_ERR(svn_stream_close(tmp_stream));
+ }
+ else
+ auto_resolve_src = NULL;
+ break;
+ }
+ default:
+ return svn_error_create(SVN_ERR_INCORRECT_PARAMS, NULL,
+ _("Invalid 'conflict_result' argument"));
+ }
+
+ if (auto_resolve_src)
+ {
+ SVN_ERR(svn_wc__wq_build_file_copy_translated(
+ &work_item, db, local_abspath,
+ auto_resolve_src, local_abspath, scratch_pool, scratch_pool));
+ work_items = svn_wc__wq_merge(work_items, work_item, scratch_pool);
+
+ SVN_ERR(svn_wc__wq_build_sync_file_flags(&work_item, db,
+ local_abspath,
+ scratch_pool, scratch_pool));
+ work_items = svn_wc__wq_merge(work_items, work_item, scratch_pool);
+ }
+
+ /* Legacy behavior: Only report text conflicts as resolved when at least
+ one conflict marker file exists.
+
+ If not the UI shows the conflict as already resolved
+ (and in this case we just remove the in-db conflict) */
+
+ SVN_ERR(remove_artifact_file_if_exists(&work_item, did_resolve,
+ db, local_abspath, conflict_old,
+ scratch_pool, scratch_pool));
+ work_items = svn_wc__wq_merge(work_items, work_item, scratch_pool);
+
+ SVN_ERR(remove_artifact_file_if_exists(&work_item, did_resolve,
+ db, local_abspath, conflict_new,
+ scratch_pool, scratch_pool));
+ work_items = svn_wc__wq_merge(work_items, work_item, scratch_pool);
+
+ SVN_ERR(remove_artifact_file_if_exists(&work_item, did_resolve,
+ db, local_abspath, conflict_working,
+ scratch_pool, scratch_pool));
+ work_items = svn_wc__wq_merge(work_items, work_item, scratch_pool);
+
+ SVN_ERR(svn_wc__db_op_mark_resolved(db, local_abspath,
+ TRUE, FALSE, FALSE,
+ work_items, scratch_pool));
+ SVN_ERR(svn_wc__wq_run(db, local_abspath, cancel_func, cancel_baton,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+/*
+ * Resolve the property conflicts found in DB/LOCAL_ABSPATH according
+ * to CONFLICT_CHOICE.
+ *
+ * It is not an error if there is no prop conflict. If a prop conflict
+ * existed and was resolved, set *DID_RESOLVE to TRUE, else set it to FALSE.
+ *
+ * Note: When there are no conflict markers on-disk to remove there is
+ * no existing text conflict (unless we are still in the process of
+ * creating the text conflict and we didn't register a marker file yet).
+ * In this case the database contains old information, which we should
+ * remove to avoid checking the next time. Resolving a property conflict
+ * by just removing the marker file is a fully supported scenario since
+ * Subversion 1.0.
+ *
+ * ### TODO [JAF] The '*_full' and '*_conflict' choices should differ.
+ * In my opinion, 'mine_full'/'theirs_full' should select
+ * the entire set of properties from 'mine' or 'theirs' respectively,
+ * while 'mine_conflict'/'theirs_conflict' should select just the
+ * properties that are in conflict. Or, '_full' should select the
+ * entire property whereas '_conflict' should do a text merge within
+ * each property, selecting hunks. Or all three kinds of behaviour
+ * should be available (full set of props, full value of conflicting
+ * props, or conflicting text hunks).
+ * ### BH: If we make *_full select the full set of properties, we should
+ * check if we shouldn't make it also select the full text for files.
+ *
+ * ### TODO [JAF] All this complexity should not be down here in libsvn_wc
+ * but in a layer above.
+ *
+ * ### TODO [JAF] Options for 'base' should be like options for 'mine' and
+ * for 'theirs' -- choose full set of props, full value of conflicting
+ * props, or conflicting text hunks.
+ *
+ */
+static svn_error_t *
+resolve_prop_conflict_on_node(svn_boolean_t *did_resolve,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ const char *conflicted_propname,
+ svn_wc_conflict_choice_t conflict_choice,
+ const char *merged_file,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
+{
+ const char *prop_reject_file;
+ apr_hash_t *mine_props;
+ apr_hash_t *their_old_props;
+ apr_hash_t *their_props;
+ apr_hash_t *conflicted_props;
+ apr_hash_t *old_props;
+ apr_hash_t *resolve_from = NULL;
+ svn_skel_t *work_items = NULL;
+ svn_skel_t *conflicts;
+ svn_wc_operation_t operation;
+ svn_boolean_t prop_conflicted;
+
+ *did_resolve = FALSE;
+
+ SVN_ERR(svn_wc__db_read_conflict(&conflicts, db, local_abspath,
+ scratch_pool, scratch_pool));
+
+ if (!conflicts)
+ return SVN_NO_ERROR;
+
+ SVN_ERR(svn_wc__conflict_read_info(&operation, NULL, NULL, &prop_conflicted,
+ NULL, db, local_abspath, conflicts,
+ scratch_pool, scratch_pool));
+ if (!prop_conflicted)
+ return SVN_NO_ERROR;
+
+ SVN_ERR(svn_wc__conflict_read_prop_conflict(&prop_reject_file,
+ &mine_props, &their_old_props,
+ &their_props, &conflicted_props,
+ db, local_abspath, conflicts,
+ scratch_pool, scratch_pool));
+
+ if (operation == svn_wc_operation_merge)
+ SVN_ERR(svn_wc__db_read_pristine_props(&old_props, db, local_abspath,
+ scratch_pool, scratch_pool));
+ else
+ old_props = their_old_props;
+
+ /* We currently handle *_conflict as *_full as this argument is currently
+ always applied for all conflicts on a node at the same time. Giving
+ an error would break some tests that assumed that this would just
+ resolve property conflicts to working.
+
+ An alternative way to handle these conflicts would be to just copy all
+ property state from mine/theirs on the _full option instead of just the
+ conflicted properties. In some ways this feels like a sensible option as
+ that would take both properties and text from mine/theirs, but when not
+ both properties and text are conflicted we would fail in doing so.
+ */
+ switch (conflict_choice)
+ {
+ case svn_wc_conflict_choose_base:
+ resolve_from = their_old_props ? their_old_props : old_props;
+ break;
+ case svn_wc_conflict_choose_mine_full:
+ case svn_wc_conflict_choose_mine_conflict:
+ resolve_from = mine_props;
+ break;
+ case svn_wc_conflict_choose_theirs_full:
+ case svn_wc_conflict_choose_theirs_conflict:
+ resolve_from = their_props;
+ break;
+ case svn_wc_conflict_choose_merged:
+ if (merged_file && conflicted_propname[0] != '\0')
+ {
+ apr_hash_t *actual_props;
+ svn_stream_t *stream;
+ svn_string_t *merged_propval;
+
+ SVN_ERR(svn_wc__db_read_props(&actual_props, db, local_abspath,
+ scratch_pool, scratch_pool));
+ resolve_from = actual_props;
+
+ SVN_ERR(svn_stream_open_readonly(&stream, merged_file,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_string_from_stream(&merged_propval, stream,
+ scratch_pool, scratch_pool));
+ svn_hash_sets(resolve_from, conflicted_propname, merged_propval);
+ }
+ else
+ resolve_from = NULL;
+ break;
+ default:
+ return svn_error_create(SVN_ERR_INCORRECT_PARAMS, NULL,
+ _("Invalid 'conflict_result' argument"));
+ }
+
+ if (conflicted_props && apr_hash_count(conflicted_props) && resolve_from)
+ {
+ apr_hash_index_t *hi;
+ apr_hash_t *actual_props;
+
+ SVN_ERR(svn_wc__db_read_props(&actual_props, db, local_abspath,
+ scratch_pool, scratch_pool));
+
+ for (hi = apr_hash_first(scratch_pool, conflicted_props);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ const char *propname = svn__apr_hash_index_key(hi);
+ svn_string_t *new_value = NULL;
+
+ new_value = svn_hash_gets(resolve_from, propname);
+
+ svn_hash_sets(actual_props, propname, new_value);
+ }
+ SVN_ERR(svn_wc__db_op_set_props(db, local_abspath, actual_props,
+ FALSE, NULL, NULL,
+ scratch_pool));
+ }
+
+ /* Legacy behavior: Only report property conflicts as resolved when the
+ property reject file exists
+
+ If not the UI shows the conflict as already resolved
+ (and in this case we just remove the in-db conflict) */
+
+ {
+ svn_skel_t *work_item;
+
+ SVN_ERR(remove_artifact_file_if_exists(&work_item, did_resolve,
+ db, local_abspath, prop_reject_file,
+ scratch_pool, scratch_pool));
+ work_items = svn_wc__wq_merge(work_items, work_item, scratch_pool);
+ }
+
+ SVN_ERR(svn_wc__db_op_mark_resolved(db, local_abspath, FALSE, TRUE, FALSE,
+ work_items, scratch_pool));
+ SVN_ERR(svn_wc__wq_run(db, local_abspath, cancel_func, cancel_baton,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+/*
+ * Resolve the tree conflict found in DB/LOCAL_ABSPATH according to
+ * CONFLICT_CHOICE.
+ *
+ * It is not an error if there is no tree conflict. If a tree conflict
+ * existed and was resolved, set *DID_RESOLVE to TRUE, else set it to FALSE.
+ *
+ * It is not an error if there is no tree conflict.
+ */
+static svn_error_t *
+resolve_tree_conflict_on_node(svn_boolean_t *did_resolve,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_wc_conflict_choice_t conflict_choice,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc_conflict_reason_t reason;
+ svn_wc_conflict_action_t action;
+ svn_skel_t *conflicts;
+ svn_wc_operation_t operation;
+ svn_boolean_t tree_conflicted;
+
+ *did_resolve = FALSE;
+
+ SVN_ERR(svn_wc__db_read_conflict(&conflicts, db, local_abspath,
+ scratch_pool, scratch_pool));
+ if (!conflicts)
+ return SVN_NO_ERROR;
+
+ SVN_ERR(svn_wc__conflict_read_info(&operation, NULL, NULL, NULL,
+ &tree_conflicted, db, local_abspath,
+ conflicts, scratch_pool, scratch_pool));
+ if (!tree_conflicted)
+ return SVN_NO_ERROR;
+
+ SVN_ERR(svn_wc__conflict_read_tree_conflict(&reason, &action, NULL,
+ db, local_abspath,
+ conflicts,
+ scratch_pool, scratch_pool));
+
+ if (operation == svn_wc_operation_update
+ || operation == svn_wc_operation_switch)
+ {
+ if (reason == svn_wc_conflict_reason_deleted ||
+ reason == svn_wc_conflict_reason_replaced)
+ {
+ if (conflict_choice == svn_wc_conflict_choose_merged)
+ {
+ /* Break moves for any children moved out of this directory,
+ * and leave this directory deleted. */
+ SVN_ERR(svn_wc__db_resolve_break_moved_away_children(
+ db, local_abspath, notify_func, notify_baton,
+ scratch_pool));
+ *did_resolve = TRUE;
+ }
+ else if (conflict_choice == svn_wc_conflict_choose_mine_conflict)
+ {
+ /* Raised moved-away conflicts on any children moved out of
+ * this directory, and leave this directory deleted.
+ * The newly conflicted moved-away children will be updated
+ * if they are resolved with 'mine_conflict' as well. */
+ SVN_ERR(svn_wc__db_resolve_delete_raise_moved_away(
+ db, local_abspath, notify_func, notify_baton,
+ scratch_pool));
+ *did_resolve = TRUE;
+ }
+ else
+ return svn_error_createf(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE,
+ NULL,
+ _("Tree conflict can only be resolved to "
+ "'working' or 'mine-conflict' state; "
+ "'%s' not resolved"),
+ svn_dirent_local_style(local_abspath,
+ scratch_pool));
+ }
+ else if (reason == svn_wc_conflict_reason_moved_away
+ && action == svn_wc_conflict_action_edit)
+ {
+ /* After updates, we can resolve local moved-away
+ * vs. any incoming change, either by updating the
+ * moved-away node (mine-conflict) or by breaking the
+ * move (theirs-conflict). */
+ if (conflict_choice == svn_wc_conflict_choose_mine_conflict)
+ {
+ SVN_ERR(svn_wc__db_update_moved_away_conflict_victim(
+ db, local_abspath,
+ notify_func, notify_baton,
+ cancel_func, cancel_baton,
+ scratch_pool));
+ *did_resolve = TRUE;
+ }
+ else if (conflict_choice == svn_wc_conflict_choose_merged)
+ {
+ /* We must break the move if the user accepts the current
+ * working copy state instead of updating the move.
+ * Else the move would be left in an invalid state. */
+
+ /* ### This breaks the move but leaves the conflict
+ ### involving the move until
+ ### svn_wc__db_op_mark_resolved. */
+ SVN_ERR(svn_wc__db_resolve_break_moved_away(db, local_abspath,
+ notify_func,
+ notify_baton,
+ scratch_pool));
+ *did_resolve = TRUE;
+ }
+ else
+ return svn_error_createf(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE,
+ NULL,
+ _("Tree conflict can only be resolved to "
+ "'working' or 'mine-conflict' state; "
+ "'%s' not resolved"),
+ svn_dirent_local_style(local_abspath,
+ scratch_pool));
+ }
+ }
+
+ if (! *did_resolve && conflict_choice != svn_wc_conflict_choose_merged)
+ {
+ /* For other tree conflicts, there is no way to pick
+ * theirs-full or mine-full, etc. Throw an error if the
+ * user expects us to be smarter than we really are. */
+ return svn_error_createf(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE,
+ NULL,
+ _("Tree conflict can only be "
+ "resolved to 'working' state; "
+ "'%s' not resolved"),
+ svn_dirent_local_style(local_abspath,
+ scratch_pool));
+ }
+
+ SVN_ERR(svn_wc__db_op_mark_resolved(db, local_abspath, FALSE, FALSE, TRUE,
+ NULL, scratch_pool));
+ SVN_ERR(svn_wc__wq_run(db, local_abspath, cancel_func, cancel_baton,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__mark_resolved_text_conflict(svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *scratch_pool)
+{
svn_boolean_t ignored_result;
- return svn_error_trace(resolve_conflict_on_node(
+ return svn_error_trace(resolve_text_conflict_on_node(
+ &ignored_result,
db, local_abspath,
- TRUE /* resolve_text */,
- FALSE /* resolve_props */,
- svn_wc_conflict_choose_merged,
+ svn_wc_conflict_choose_merged, NULL,
+ NULL, NULL,
+ scratch_pool));
+}
+
+svn_error_t *
+svn_wc__mark_resolved_prop_conflicts(svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *scratch_pool)
+{
+ svn_boolean_t ignored_result;
+
+ return svn_error_trace(resolve_prop_conflict_on_node(
&ignored_result,
+ db, local_abspath, "",
+ svn_wc_conflict_choose_merged, NULL,
+ NULL, NULL,
scratch_pool));
}
-/* */
+/* Baton for conflict_status_walker */
+struct conflict_status_walker_baton
+{
+ svn_wc__db_t *db;
+ svn_boolean_t resolve_text;
+ const char *resolve_prop;
+ svn_boolean_t resolve_tree;
+ svn_wc_conflict_choice_t conflict_choice;
+ svn_wc_conflict_resolver_func2_t conflict_func;
+ void *conflict_baton;
+ svn_cancel_func_t cancel_func;
+ void *cancel_baton;
+ svn_wc_notify_func2_t notify_func;
+ void *notify_baton;
+};
+
+/* Implements svn_wc_status4_t to walk all conflicts to resolve.
+ */
static svn_error_t *
-resolve_one_conflict(svn_wc__db_t *db,
- const char *local_abspath,
- svn_boolean_t resolve_text,
- const char *resolve_prop,
- svn_boolean_t resolve_tree,
- svn_wc_conflict_choice_t conflict_choice,
- svn_wc_notify_func2_t notify_func,
- void *notify_baton,
- apr_pool_t *scratch_pool)
+conflict_status_walker(void *baton,
+ const char *local_abspath,
+ const svn_wc_status3_t *status,
+ apr_pool_t *scratch_pool)
{
+ struct conflict_status_walker_baton *cswb = baton;
+ svn_wc__db_t *db = cswb->db;
+
const apr_array_header_t *conflicts;
- apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ apr_pool_t *iterpool;
int i;
svn_boolean_t resolved = FALSE;
- SVN_ERR(svn_wc__db_read_conflicts(&conflicts, db, local_abspath,
- scratch_pool, iterpool));
+ if (!status->conflicted)
+ return SVN_NO_ERROR;
+
+ iterpool = svn_pool_create(scratch_pool);
+
+ SVN_ERR(svn_wc__read_conflicts(&conflicts, db, local_abspath, TRUE,
+ scratch_pool, iterpool));
for (i = 0; i < conflicts->nelts; i++)
{
const svn_wc_conflict_description2_t *cd;
svn_boolean_t did_resolve;
+ svn_wc_conflict_choice_t my_choice = cswb->conflict_choice;
+ const char *merged_file = NULL;
cd = APR_ARRAY_IDX(conflicts, i, const svn_wc_conflict_description2_t *);
+ if ((cd->kind == svn_wc_conflict_kind_property && !cswb->resolve_prop)
+ || (cd->kind == svn_wc_conflict_kind_text && !cswb->resolve_text)
+ || (cd->kind == svn_wc_conflict_kind_tree && !cswb->resolve_tree))
+ {
+ continue; /* Easy out. Don't call resolver func and ignore result */
+ }
+
svn_pool_clear(iterpool);
+ if (my_choice == svn_wc_conflict_choose_unspecified)
+ {
+ svn_wc_conflict_result_t *result;
+
+ if (!cswb->conflict_func)
+ return svn_error_create(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE, NULL,
+ _("No conflict-callback and no "
+ "pre-defined conflict-choice provided"));
+
+ SVN_ERR(cswb->conflict_func(&result, cd, cswb->conflict_baton,
+ iterpool, iterpool));
+
+ my_choice = result->choice;
+ merged_file = result->merged_file;
+ /* ### Bug: ignores result->save_merged */
+ }
+
+
+ if (my_choice == svn_wc_conflict_choose_postpone)
+ continue;
+
switch (cd->kind)
{
case svn_wc_conflict_kind_tree:
- if (!resolve_tree)
+ if (!cswb->resolve_tree)
break;
-
- /* For now, we only clear tree conflict information and resolve
- * to the working state. There is no way to pick theirs-full
- * or mine-full, etc. Throw an error if the user expects us
- * to be smarter than we really are. */
- if (conflict_choice != svn_wc_conflict_choose_merged)
- {
- return svn_error_createf(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE,
- NULL,
- _("Tree conflicts can only be "
- "resolved to 'working' state; "
- "'%s' not resolved"),
- svn_dirent_local_style(local_abspath,
- iterpool));
- }
-
- SVN_ERR(svn_wc__db_op_set_tree_conflict(db, local_abspath, NULL,
- iterpool));
+ SVN_ERR(resolve_tree_conflict_on_node(&did_resolve,
+ db,
+ local_abspath,
+ my_choice,
+ cswb->notify_func,
+ cswb->notify_baton,
+ cswb->cancel_func,
+ cswb->cancel_baton,
+ iterpool));
resolved = TRUE;
break;
case svn_wc_conflict_kind_text:
- if (!resolve_text)
+ if (!cswb->resolve_text)
break;
- SVN_ERR(resolve_conflict_on_node(db,
- local_abspath,
- TRUE /* resolve_text */,
- FALSE /* resolve_props */,
- conflict_choice,
- &did_resolve,
- iterpool));
+ SVN_ERR(resolve_text_conflict_on_node(&did_resolve,
+ db,
+ local_abspath,
+ my_choice,
+ merged_file,
+ cswb->cancel_func,
+ cswb->cancel_baton,
+ iterpool));
if (did_resolve)
resolved = TRUE;
break;
case svn_wc_conflict_kind_property:
- if (!resolve_prop)
+ if (!cswb->resolve_prop)
break;
- /* ### this is bogus. resolve_conflict_on_node() does not handle
- ### individual property resolution. */
- if (*resolve_prop != '\0' &&
- strcmp(resolve_prop, cd->property_name) != 0)
+ if (*cswb->resolve_prop != '\0' &&
+ strcmp(cswb->resolve_prop, cd->property_name) != 0)
{
- break; /* Skip this property conflict */
+ break; /* This is not the property we want to resolve. */
}
-
- /* We don't have property name handling here yet :( */
- SVN_ERR(resolve_conflict_on_node(db,
- local_abspath,
- FALSE /* resolve_text */,
- TRUE /* resolve_props */,
- conflict_choice,
- &did_resolve,
- iterpool));
+ SVN_ERR(resolve_prop_conflict_on_node(&did_resolve,
+ db,
+ local_abspath,
+ cd->property_name,
+ my_choice,
+ merged_file,
+ cswb->cancel_func,
+ cswb->cancel_baton,
+ iterpool));
if (did_resolve)
resolved = TRUE;
@@ -442,169 +3009,38 @@ resolve_one_conflict(svn_wc__db_t *db,
}
/* Notify */
- if (notify_func && resolved)
- notify_func(notify_baton,
- svn_wc_create_notify(local_abspath, svn_wc_notify_resolved,
- iterpool),
- iterpool);
+ if (cswb->notify_func && resolved)
+ cswb->notify_func(cswb->notify_baton,
+ svn_wc_create_notify(local_abspath,
+ svn_wc_notify_resolved,
+ iterpool),
+ iterpool);
svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
-/* */
-static svn_error_t *
-recursive_resolve_conflict(svn_wc__db_t *db,
- const char *local_abspath,
- svn_boolean_t this_is_conflicted,
- svn_depth_t depth,
- svn_boolean_t resolve_text,
- const char *resolve_prop,
- svn_boolean_t resolve_tree,
- svn_wc_conflict_choice_t conflict_choice,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- svn_wc_notify_func2_t notify_func,
- void *notify_baton,
- apr_pool_t *scratch_pool)
-{
- apr_pool_t *iterpool = svn_pool_create(scratch_pool);
- const apr_array_header_t *children;
- apr_hash_t *visited = apr_hash_make(scratch_pool);
- svn_depth_t child_depth;
- int i;
-
- if (cancel_func)
- SVN_ERR(cancel_func(cancel_baton));
-
- if (this_is_conflicted)
- {
- SVN_ERR(resolve_one_conflict(db,
- local_abspath,
- resolve_text,
- resolve_prop,
- resolve_tree,
- conflict_choice,
- notify_func, notify_baton,
- iterpool));
- }
-
- if (depth < svn_depth_files)
- return SVN_NO_ERROR;
-
- child_depth = (depth < svn_depth_infinity) ? svn_depth_empty : depth;
-
- SVN_ERR(svn_wc__db_read_children(&children, db, local_abspath,
- scratch_pool, iterpool));
-
- for (i = 0; i < children->nelts; i++)
- {
- const char *name = APR_ARRAY_IDX(children, i, const char *);
- const char *child_abspath;
- svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
- svn_boolean_t conflicted;
-
- svn_pool_clear(iterpool);
-
- if (cancel_func)
- SVN_ERR(cancel_func(cancel_baton));
-
- child_abspath = svn_dirent_join(local_abspath, name, iterpool);
-
- SVN_ERR(svn_wc__db_read_info(&status, &kind, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- &conflicted, NULL, NULL, NULL, NULL, NULL,
- NULL,
- db, child_abspath, iterpool, iterpool));
-
- if (status == svn_wc__db_status_not_present
- || status == svn_wc__db_status_excluded
- || status == svn_wc__db_status_server_excluded)
- continue;
-
- apr_hash_set(visited, name, APR_HASH_KEY_STRING, name);
- if (kind == svn_wc__db_kind_dir && depth < svn_depth_immediates)
- continue;
-
- if (kind == svn_wc__db_kind_dir)
- SVN_ERR(recursive_resolve_conflict(db,
- child_abspath,
- conflicted,
- child_depth,
- resolve_text,
- resolve_prop,
- resolve_tree,
- conflict_choice,
- cancel_func, cancel_baton,
- notify_func, notify_baton,
- iterpool));
- else if (conflicted)
- SVN_ERR(resolve_one_conflict(db,
- child_abspath,
- resolve_text,
- resolve_prop,
- resolve_tree,
- conflict_choice,
- notify_func, notify_baton,
- iterpool));
- }
-
- SVN_ERR(svn_wc__db_read_conflict_victims(&children, db, local_abspath,
- scratch_pool, iterpool));
-
- for (i = 0; i < children->nelts; i++)
- {
- const char *name = APR_ARRAY_IDX(children, i, const char *);
- const char *child_abspath;
-
- svn_pool_clear(iterpool);
-
- if (apr_hash_get(visited, name, APR_HASH_KEY_STRING) != NULL)
- continue; /* Already visited */
-
- if (cancel_func)
- SVN_ERR(cancel_func(cancel_baton));
-
- child_abspath = svn_dirent_join(local_abspath, name, iterpool);
-
- /* We only have to resolve one level of tree conflicts. All other
- conflicts are resolved in the other loop */
- SVN_ERR(resolve_one_conflict(db,
- child_abspath,
- FALSE /*resolve_text*/,
- FALSE /*resolve_prop*/,
- resolve_tree,
- conflict_choice,
- notify_func, notify_baton,
- iterpool));
- }
-
-
- svn_pool_destroy(iterpool);
-
- return SVN_NO_ERROR;
-}
-
-
svn_error_t *
-svn_wc_resolved_conflict5(svn_wc_context_t *wc_ctx,
+svn_wc__resolve_conflicts(svn_wc_context_t *wc_ctx,
const char *local_abspath,
svn_depth_t depth,
svn_boolean_t resolve_text,
const char *resolve_prop,
svn_boolean_t resolve_tree,
svn_wc_conflict_choice_t conflict_choice,
+ svn_wc_conflict_resolver_func2_t conflict_func,
+ void *conflict_baton,
svn_cancel_func_t cancel_func,
void *cancel_baton,
svn_wc_notify_func2_t notify_func,
void *notify_baton,
apr_pool_t *scratch_pool)
{
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
svn_boolean_t conflicted;
+ struct conflict_status_walker_baton cswb;
+
/* ### the underlying code does NOT support resolving individual
### properties. bail out if the caller tries it. */
if (resolve_prop != NULL && *resolve_prop != '\0')
@@ -612,6 +3048,8 @@ svn_wc_resolved_conflict5(svn_wc_context_t *wc_ctx,
U_("Resolving a single property is not (yet) "
"supported."));
+ /* ### Just a versioned check? */
+ /* Conflicted is set to allow invoking on actual only nodes */
SVN_ERR(svn_wc__db_read_info(NULL, &kind, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, &conflicted,
@@ -621,21 +3059,90 @@ svn_wc_resolved_conflict5(svn_wc_context_t *wc_ctx,
/* When the implementation still used the entry walker, depth
unknown was translated to infinity. */
- if (kind != svn_wc__db_kind_dir)
+ if (kind != svn_node_dir)
depth = svn_depth_empty;
else if (depth == svn_depth_unknown)
depth = svn_depth_infinity;
- return svn_error_trace(recursive_resolve_conflict(
- wc_ctx->db,
- local_abspath,
- conflicted,
- depth,
- resolve_text,
- resolve_prop,
- resolve_tree,
- conflict_choice,
- cancel_func, cancel_baton,
- notify_func, notify_baton,
- scratch_pool));
+ cswb.db = wc_ctx->db;
+ cswb.resolve_text = resolve_text;
+ cswb.resolve_prop = resolve_prop;
+ cswb.resolve_tree = resolve_tree;
+ cswb.conflict_choice = conflict_choice;
+
+ cswb.conflict_func = conflict_func;
+ cswb.conflict_baton = conflict_baton;
+
+ cswb.cancel_func = cancel_func;
+ cswb.cancel_baton = cancel_baton;
+
+ cswb.notify_func = notify_func;
+ cswb.notify_baton = notify_baton;
+
+ if (notify_func)
+ notify_func(notify_baton,
+ svn_wc_create_notify(local_abspath,
+ svn_wc_notify_conflict_resolver_starting,
+ scratch_pool),
+ scratch_pool);
+
+ SVN_ERR(svn_wc_walk_status(wc_ctx,
+ local_abspath,
+ depth,
+ FALSE /* get_all */,
+ FALSE /* no_ignore */,
+ TRUE /* ignore_text_mods */,
+ NULL /* ignore_patterns */,
+ conflict_status_walker, &cswb,
+ cancel_func, cancel_baton,
+ scratch_pool));
+
+ if (notify_func)
+ notify_func(notify_baton,
+ svn_wc_create_notify(local_abspath,
+ svn_wc_notify_conflict_resolver_done,
+ scratch_pool),
+ scratch_pool);
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc_resolved_conflict5(svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ svn_depth_t depth,
+ svn_boolean_t resolve_text,
+ const char *resolve_prop,
+ svn_boolean_t resolve_tree,
+ svn_wc_conflict_choice_t conflict_choice,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool)
+{
+ return svn_error_trace(svn_wc__resolve_conflicts(wc_ctx, local_abspath,
+ depth, resolve_text,
+ resolve_prop, resolve_tree,
+ conflict_choice,
+ NULL, NULL,
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ scratch_pool));
+}
+
+/* Constructor for the result-structure returned by conflict callbacks. */
+svn_wc_conflict_result_t *
+svn_wc_create_conflict_result(svn_wc_conflict_choice_t choice,
+ const char *merged_file,
+ apr_pool_t *pool)
+{
+ svn_wc_conflict_result_t *result = apr_pcalloc(pool, sizeof(*result));
+ result->choice = choice;
+ result->merged_file = merged_file;
+ result->save_merged = FALSE;
+
+ /* If we add more fields to svn_wc_conflict_result_t, add them here. */
+
+ return result;
}
diff --git a/subversion/libsvn_wc/conflicts.h b/subversion/libsvn_wc/conflicts.h
index a0ded7f..839e8a0 100644
--- a/subversion/libsvn_wc/conflicts.h
+++ b/subversion/libsvn_wc/conflicts.h
@@ -49,24 +49,45 @@ extern "C" {
#define SVN_WC__CONFLICT_KIND_REJECT "reject"
#define SVN_WC__CONFLICT_KIND_OBSTRUCTED "obstructed"
+#define SVN_WC__CONFLICT_SRC_SUBVERSION "subversion"
+/* Return a new conflict skel, allocated in RESULT_POOL.
-/* Return a new conflict skel, allocated in RESULT_POOL. */
+ Typically creating a conflict starts with calling this function and then
+ collecting details via one or more calls to svn_wc__conflict_skel_add_*().
+
+ The caller can then (when necessary) add operation details via
+ svn_wc__conflict_skel_set_op_*() and store the resulting conflict together
+ with the result of its operation in the working copy database.
+*/
svn_skel_t *
-svn_wc__conflict_skel_new(apr_pool_t *result_pool);
+svn_wc__conflict_skel_create(apr_pool_t *result_pool);
+
+/* Return a boolean in *COMPLETE indicating whether CONFLICT_SKEL contains
+ everything needed for installing in the working copy database.
+
+ This typically checks if CONFLICT_SKEL contains at least one conflict
+ and an operation.
+ */
+svn_error_t *
+svn_wc__conflict_skel_is_complete(svn_boolean_t *complete,
+ const svn_skel_t *conflict_skel);
/* Set 'update' as the conflicting operation in CONFLICT_SKEL.
Allocate data stored in the skel in RESULT_POOL.
- BASE_REVISION is the revision the node was at before the update.
- TARGET_REVISION is the revision being updated to.
+ ORIGINAL and TARGET specify the BASE node before and after updating.
- Do temporary allocations in SCRATCH_POOL. */
+ It is an error to set another operation to a conflict skel that
+ already has an operation.
+
+ Do temporary allocations in SCRATCH_POOL. The new skel data is
+ completely stored in RESULT-POOL. */
svn_error_t *
svn_wc__conflict_skel_set_op_update(svn_skel_t *conflict_skel,
- svn_revnum_t base_revision,
- svn_revnum_t target_revision,
+ const svn_wc_conflict_version_t *original,
+ const svn_wc_conflict_version_t *target,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
@@ -74,216 +95,350 @@ svn_wc__conflict_skel_set_op_update(svn_skel_t *conflict_skel,
/* Set 'switch' as the conflicting operation in CONFLICT_SKEL.
Allocate data stored in the skel in RESULT_POOL.
- BASE_REVISION is the revision the node was at before the switch.
- TARGET_REVISION is the revision being switched to.
- REPOS_RELPATH is the path being switched to, relative to the
- repository root.
+ ORIGINAL and TARGET specify the BASE node before and after switching.
+
+ It is an error to set another operation to a conflict skel that
+ already has an operation.
Do temporary allocations in SCRATCH_POOL. */
svn_error_t *
svn_wc__conflict_skel_set_op_switch(svn_skel_t *conflict_skel,
- svn_revnum_t base_revision,
- svn_revnum_t target_revision,
- const char *repos_relpath,
+ const svn_wc_conflict_version_t *original,
+ const svn_wc_conflict_version_t *target,
+ apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
/* Set 'merge' as conflicting operation in CONFLICT_SKEL.
Allocate data stored in the skel in RESULT_POOL.
- REPOS_UUID is the UUID of the repository accessed via REPOS_ROOT_URL.
-
- LEFT_REPOS_RELPATH and RIGHT_REPOS_RELPATH paths to the merge-left
- and merge-right merge sources, relative to REPOS_URL
+ LEFT and RIGHT paths are the merge-left and merge-right merge
+ sources of the merge.
- LEFT_REVISION is the merge-left revision.
- RIGHT_REVISION is the merge-right revision.
+ It is an error to set another operation to a conflict skel that
+ already has an operation.
Do temporary allocations in SCRATCH_POOL. */
svn_error_t *
svn_wc__conflict_skel_set_op_merge(svn_skel_t *conflict_skel,
- const char *repos_uuid,
- const char *repos_root_url,
- svn_revnum_t left_revision,
- const char *left_repos_relpath,
- svn_revnum_t right_revision,
- const char *right_repos_relpath,
+ const svn_wc_conflict_version_t *left,
+ const svn_wc_conflict_version_t *right,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
-/* Set 'patch' as the conflicting operation in CONFLICT_SKEL.
+/* Add a text conflict to CONFLICT_SKEL.
Allocate data stored in the skel in RESULT_POOL.
- PATCH_SOURCE_LABEL is a string identifying the patch source in
- some way, for display purposes. It is usually the absolute path
- to the patch file, or a token such as "<stdin>" if the patch source
- is not a file.
+ The DB, WRI_ABSPATH pair specifies in which working copy the conflict
+ will be recorded. (Needed for making the paths relative).
+
+ MINE_ABSPATH, THEIR_OLD_ABSPATH and THEIR_ABSPATH specify the marker
+ files for this text conflict. Each of these values can be NULL to specify
+ that the node doesn't exist in this case.
+
+ ### It is expected that in a future version we will also want to store
+ ### the sha1 checksum of these files to allow reinstalling the conflict
+ ### markers from the pristine store.
+
+ It is an error to add another text conflict to a conflict skel that
+ already contains a text conflict.
Do temporary allocations in SCRATCH_POOL.
*/
svn_error_t *
-svn_wc__conflict_skel_set_op_patch(svn_skel_t *conflict_skel,
- const char *patch_source_label,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
+svn_wc__conflict_skel_add_text_conflict(svn_skel_t *conflict_skel,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
+ const char *mine_abspath,
+ const char *their_old_abspath,
+ const char *their_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
-/* Add a text conflict to CONFLICT_SKEL.
+/* Add property conflict details to CONFLICT_SKEL.
Allocate data stored in the skel in RESULT_POOL.
- All checksums passed should be suitable for retreiving conflicted
- versions of the file from the pristine store.
+ The DB, WRI_ABSPATH pair specifies in which working copy the conflict
+ will be recorded. (Needed for making the paths relative).
- ORIGINAL_CHECKSUM is the checksum of the BASE version of the conflicted
- file (without local modifications).
- MINE_CHECKSUM is the checksum of the WORKING version of the conflicted
- file as of the time the conflicting operation was run (i.e. including
- local modifications).
- INCOMING_CHECKSUM is the checksum of the incoming file causing the
- conflict. ### is this needed for update? what about merge?
+ The MARKER_ABSPATH is NULL when raising a conflict in v1.8+. See below.
- It is an error (### which one?) if no conflicting operation has been
- set on CONFLICT_SKEL before calling this function.
- It is an error (### which one?) if CONFLICT_SKEL already contains
- a text conflict.
+ The MINE_PROPS, THEIR_OLD_PROPS and THEIR_PROPS are hashes mapping a
+ const char * property name to a const svn_string_t* value.
- Do temporary allocations in SCRATCH_POOL.
-*/
-svn_error_t *
-svn_wc__conflict_skel_add_text_conflict(
- svn_skel_t *conflict_skel,
- const svn_checksum_t *original_checksum,
- const svn_checksum_t *mine_checksum,
- const svn_checksum_t *incoming_checksum,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
+ The CONFLICTED_PROP_NAMES is a const char * property name value mapping
+ to "", recording which properties aren't resolved yet in the current
+ property values.
+ ### Needed for creating the marker file from this conflict data.
+ ### Would also allow per property marking as resolved.
+ ### Maybe useful for calling (legacy) conflict resolvers that expect one
+ ### property conflict per invocation.
+ When raising a property conflict in the course of upgrading an old WC,
+ MARKER_ABSPATH is the path to the file containing a human-readable
+ description of the conflict, MINE_PROPS and THEIR_OLD_PROPS and
+ THEIR_PROPS are all NULL, and CONFLICTED_PROP_NAMES is an empty hash.
-/* Add a property conflict to SKEL.
+ It is an error to add another prop conflict to a conflict skel that
+ already contains a prop conflict. (A single call to this function can
+ record that multiple properties are in conflict.)
- PROP_NAME is the name of the conflicted property.
+ Do temporary allocations in SCRATCH_POOL.
+*/
+svn_error_t *
+svn_wc__conflict_skel_add_prop_conflict(svn_skel_t *conflict_skel,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
+ const char *marker_abspath,
+ const apr_hash_t *mine_props,
+ const apr_hash_t *their_old_props,
+ const apr_hash_t *their_props,
+ const apr_hash_t *conflicted_prop_names,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
- ORIGINAL_VALUE is the property's value at the BASE revision. MINE_VALUE
- is the property's value in WORKING (BASE + local modifications).
- INCOMING_VALUE is the incoming property value brought in by the
- operation. When merging, INCOMING_BASE_VALUE is the base value against
- which INCOMING_VALUE ws being applied. For updates, INCOMING_BASE_VALUE
- should be the same as ORIGINAL_VALUE.
- *_VALUE may be NULL, indicating no value was present.
+/* Add a tree conflict to CONFLICT_SKEL.
+ Allocate data stored in the skel in RESULT_POOL.
- It is an error (### which one?) if no conflicting operation has been
- set on CONFLICT_SKEL before calling this function.
- It is an error (### which one?) if CONFLICT_SKEL already cotains
- a propery conflict for PROP_NAME.
+ LOCAL_CHANGE is the local tree change made to the node.
+ INCOMING_CHANGE is the incoming change made to the node.
+
+ MOVE_SRC_OP_ROOT_ABSPATH must be set when LOCAL_CHANGE is
+ svn_wc_conflict_reason_moved_away and NULL otherwise and the operation
+ is svn_wc_operation_update or svn_wc_operation_switch. It should be
+ set to the op-root of the move-away unless the move is inside a
+ delete in which case it should be set to the op-root of the delete
+ (the delete can be a replace). So given:
+ A/B/C moved away (1)
+ A deleted and replaced
+ A/B/C moved away (2)
+ A/B deleted
+ MOVE_SRC_OP_ROOT_ABSPATH should be A for a conflict associated
+ with (1), MOVE_SRC_OP_ROOT_ABSPATH should be A/B for a conflict
+ associated with (2).
+
+ It is an error to add another tree conflict to a conflict skel that
+ already contains a tree conflict. (It is not an error, at this level,
+ to add a tree conflict to an existing text or property conflict skel.)
- The conflict recorded in SKEL will be allocated from RESULT_POOL. Do
- temporary allocations in SCRATCH_POOL.
+ Do temporary allocations in SCRATCH_POOL.
*/
svn_error_t *
-svn_wc__conflict_skel_add_prop_conflict(
- svn_skel_t *skel,
- const char *prop_name,
- const svn_string_t *original_value,
- const svn_string_t *mine_value,
- const svn_string_t *incoming_value,
- const svn_string_t *incoming_base_value,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
+svn_wc__conflict_skel_add_tree_conflict(svn_skel_t *conflict_skel,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
+ svn_wc_conflict_reason_t local_change,
+ svn_wc_conflict_action_t incoming_change,
+ const char *move_src_op_root_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+/* Allows resolving specific conflicts stored in CONFLICT_SKEL.
-/* Add a tree conflict to CONFLICT_SKEL.
- Allocate data stored in the skel in RESULT_POOL.
+ When RESOLVE_TEXT is TRUE and CONFLICT_SKEL contains a text conflict,
+ resolve/remove the text conflict in CONFLICT_SKEL.
- LOCAL_CHANGE is the local tree change made to the node.
- ORIGINAL_LOCAL_KIND is the kind of the local node in BASE.
- If ORIGINAL_LOCAL_KIND is svn_node_file, ORIGINAL_CHECKSUM is the checksum
- for the BASE of the file, for retrieval from the pristine store.
+ When RESOLVE_PROP is "" and CONFLICT_SKEL contains a property conflict,
+ resolve/remove all property conflicts in CONFLICT_SKEL.
- MINE_LOCAL_KIND is the kind of the local node in WORKING at the
- time the conflict was flagged.
- If MINE_LOCAL_KIND is svn_node_file, ORIGINAL_CHECKSUM is the checksum
- of the WORKING version of the file at the time the conflict was flagged,
- for retrieval from the pristine store.
+ When RESOLVE_PROP is not NULL and not "", remove the property conflict on
+ the property RESOLVE_PROP in CONFLICT_SKEL. When RESOLVE_PROP was the last
+ property in CONFLICT_SKEL remove the property conflict info from
+ CONFLICT_SKEL.
- INCOMING_KIND is the kind of the incoming node.
- If INCOMING_KIND is svn_node_file, INCOMING_CHECKSUM is the checksum
- of the INCOMING version of the file, for retrieval from the pristine store.
+ When RESOLVE_TREE is TRUE and CONFLICT_SKEL contains a tree conflict,
+ resolve/remove the tree conflict in CONFLICT_SKEL.
- It is an error (### which one?) if no conflicting operation has been
- set on CONFLICT_SKEL before calling this function.
- It is an error (### which one?) if CONFLICT_SKEL already contains
- a tree conflict.
+ If COMPLETELY_RESOLVED is not NULL, then set *COMPLETELY_RESOLVED to TRUE,
+ when no conflict registration is left in CONFLICT_SKEL after editting,
+ otherwise to FALSE.
- Do temporary allocations in SCRATCH_POOL.
-*/
-svn_error_t *
-svn_wc__conflict_skel_add_tree_conflict(
- svn_skel_t *skel,
- svn_wc_conflict_reason_t local_change,
- svn_wc__db_kind_t original_local_kind,
- const svn_checksum_t *original_checksum,
- svn_wc__db_kind_t mine_local_kind,
- const svn_checksum_t *mine_checksum,
- svn_wc_conflict_action_t incoming_change,
- svn_wc__db_kind_t incoming_kind,
- const svn_checksum_t *incoming_checksum,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-
-/* Add a reject conflict to CONFLICT_SKEL.
Allocate data stored in the skel in RESULT_POOL.
- HUNK_ORIGINAL_OFFSET, HUNK_ORIGINAL_LENGTH, HUNK_MODIFIED_OFFSET,
- and HUNK_MODIFIED_LENGTH is hunk-header data identifying the hunk
- which was rejected.
+ This functions edits CONFLICT_SKEL. New skels might be created in
+ RESULT_POOL. Temporary allocations will use SCRATCH_POOL.
+ */
+/* ### db, wri_abspath is currently unused. Remove? */
+svn_error_t *
+svn_wc__conflict_skel_resolve(svn_boolean_t *completely_resolved,
+ svn_skel_t *conflict_skel,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
+ svn_boolean_t resolve_text,
+ const char *resolve_prop,
+ svn_boolean_t resolve_tree,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
- REJECT_DIFF_CHECKSUM is the checksum of the text of the rejected
- diff, for retrieval from the pristine store.
+/*
+ * -----------------------------------------------------------
+ * Reading conflict skels. Maybe this can be made private later
+ * -----------------------------------------------------------
+ */
- It is an error (### which one?) if no conflicting operation has been
- set on CONFLICT_SKEL before calling this function.
- It is an error (### which one?) if CONFLICT_SKEL already contains
- a reject conflict for the hunk.
+/* Read common information from CONFLICT_SKEL to determine the operation
+ * and merge origins.
+ *
+ * Output arguments can be NULL if the value is not necessary.
+ *
+ * Set *LOCATIONS to an array of (svn_wc_conflict_version_t *). For
+ * conflicts written by current code, there are 2 elements: index [0] is
+ * the 'old' or 'left' side and [1] is the 'new' or 'right' side.
+ *
+ * For conflicts written by 1.6 or 1.7 there are 2 locations for a tree
+ * conflict, but none for a text or property conflict.
+ *
+ * TEXT_, PROP_ and TREE_CONFLICTED (when not NULL) will be set to TRUE
+ * when the conflict contains the specified kind of conflict, otherwise
+ * to false.
+ *
+ * Allocate the result in RESULT_POOL. Perform temporary allocations in
+ * SCRATCH_POOL.
+ */
+svn_error_t *
+svn_wc__conflict_read_info(svn_wc_operation_t *operation,
+ const apr_array_header_t **locations,
+ svn_boolean_t *text_conflicted,
+ svn_boolean_t *prop_conflicted,
+ svn_boolean_t *tree_conflicted,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
+ const svn_skel_t *conflict_skel,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Reads back the original data stored by svn_wc__conflict_skel_add_text_conflict()
+ * in CONFLICT_SKEL for a node in DB, WRI_ABSPATH.
+ *
+ * Values as documented for svn_wc__conflict_skel_add_text_conflict().
+ *
+ * Output arguments can be NULL if the value is not necessary.
+ *
+ * Allocate the result in RESULT_POOL. Perform temporary allocations in
+ * SCRATCH_POOL.
+ */
+svn_error_t *
+svn_wc__conflict_read_text_conflict(const char **mine_abspath,
+ const char **their_old_abspath,
+ const char **their_abspath,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
+ const svn_skel_t *conflict_skel,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
- Do temporary allocations in SCRATCH_POOL.
-*/
+/* Reads back the original data stored by svn_wc__conflict_skel_add_prop_conflict()
+ * in CONFLICT_SKEL for a node in DB, WRI_ABSPATH.
+ *
+ * Values as documented for svn_wc__conflict_skel_add_prop_conflict().
+ *
+ * Output arguments can be NULL if the value is not necessary
+ * Allocate the result in RESULT_POOL. Perform temporary allocations in
+ * SCRATCH_POOL.
+ */
svn_error_t *
-svn_wc__conflict_skel_add_reject_conflict(
- svn_skel_t *conflict_skel,
- svn_linenum_t hunk_original_offset,
- svn_linenum_t hunk_original_length,
- svn_linenum_t hunk_modified_offset,
- svn_linenum_t hunk_modified_length,
- const svn_checksum_t *reject_diff_checksum,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-
-/* Add an obstruction conflict to CONFLICT_SKEL.
- Allocate data stored in the skel in RESULT_POOL.
+svn_wc__conflict_read_prop_conflict(const char **marker_abspath,
+ apr_hash_t **mine_props,
+ apr_hash_t **their_old_props,
+ apr_hash_t **their_props,
+ apr_hash_t **conflicted_prop_names,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
+ const svn_skel_t *conflict_skel,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
- It is an error (### which one?) if no conflicting operation has been
- set on CONFLICT_SKEL before calling this function.
- It is an error (### which one?) if CONFLICT_SKEL already contains
- an obstruction.
+/* Reads back the original data stored by svn_wc__conflict_skel_add_tree_conflict()
+ * in CONFLICT_SKEL for a node in DB, WRI_ABSPATH.
+ *
+ * Values as documented for svn_wc__conflict_skel_add_tree_conflict().
+ *
+ * Output arguments can be NULL if the value is not necessary
+ * Allocate the result in RESULT_POOL. Perform temporary allocations in
+ * SCRATCH_POOL.
+ */
+svn_error_t *
+svn_wc__conflict_read_tree_conflict(svn_wc_conflict_reason_t *local_change,
+ svn_wc_conflict_action_t *incoming_change,
+ const char **move_src_op_root_abspath,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
+ const svn_skel_t *conflict_skel,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
- Do temporary allocations in SCRATCH_POOL.
-*/
+/* Reads in *MARKERS a list of const char * absolute paths of the marker files
+ referenced from CONFLICT_SKEL.
+ * Allocate the result in RESULT_POOL. Perform temporary allocations in
+ * SCRATCH_POOL.
+ */
+svn_error_t *
+svn_wc__conflict_read_markers(const apr_array_header_t **markers,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
+ const svn_skel_t *conflict_skel,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Create the necessary marker files for the conflicts stored in
+ * CONFLICT_SKEL and return the work items to fill the markers from
+ * the work queue.
+ *
+ * Currently only used for property conflicts as text conflict markers
+ * are just in-wc files.
+ *
+ * Allocate the result in RESULT_POOL. Perform temporary allocations in
+ * SCRATCH_POOL.
+ */
svn_error_t *
-svn_wc__conflict_skel_add_obstruction(svn_skel_t *conflict_skel,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
+svn_wc__conflict_create_markers(svn_skel_t **work_item,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_skel_t *conflict_skel,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Call the conflict resolver RESOLVER_FUNC with RESOLVER_BATON for each
+ of the conflicts on LOCAL_ABSPATH. Depending on the results that
+ the callback returns, perhaps resolve the conflicts, and perhaps mark
+ them as resolved in the WC DB.
+
+ Call RESOLVER_FUNC once for each property conflict, and again for any
+ text conflict, and again for any tree conflict on the node.
+ CONFLICT_SKEL contains the details of the conflicts on LOCAL_ABSPATH.
-/* Resolve text conflicts on the given node. */
+ Use MERGE_OPTIONS when the resolver requests a merge.
+
+ Resolver actions are directly applied to the in-db state of LOCAL_ABSPATH,
+ so the conflict and the state in CONFLICT_SKEL must already be installed in
+ wc.db. */
svn_error_t *
-svn_wc__resolve_text_conflict(svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *scratch_pool);
+svn_wc__conflict_invoke_resolver(svn_wc__db_t *db,
+ const char *local_abspath,
+ const svn_skel_t *conflict_skel,
+ const apr_array_header_t *merge_options,
+ svn_wc_conflict_resolver_func2_t resolver_func,
+ void *resolver_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool);
+
+
+/* Mark as resolved any text conflict on the node at DB/LOCAL_ABSPATH. */
+svn_error_t *
+svn_wc__mark_resolved_text_conflict(svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *scratch_pool);
+/* Mark as resolved any prop conflicts on the node at DB/LOCAL_ABSPATH. */
+svn_error_t *
+svn_wc__mark_resolved_prop_conflicts(svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *scratch_pool);
#ifdef __cplusplus
}
diff --git a/subversion/libsvn_wc/context.c b/subversion/libsvn_wc/context.c
index 6ae3fd9..4bf2369 100644
--- a/subversion/libsvn_wc/context.c
+++ b/subversion/libsvn_wc/context.c
@@ -65,10 +65,12 @@ svn_wc_context_create(svn_wc_context_t **wc_ctx,
{
svn_wc_context_t *ctx = apr_pcalloc(result_pool, sizeof(*ctx));
- /* Create the state_pool, and open up a wc_db in it. */
+ /* Create the state_pool, and open up a wc_db in it.
+ * Since config contains a private mutable member but C doesn't support
+ * we need to make it writable */
ctx->state_pool = result_pool;
- SVN_ERR(svn_wc__db_open(&ctx->db, config,
- TRUE, TRUE, ctx->state_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_open(&ctx->db, (svn_config_t *)config,
+ FALSE, TRUE, ctx->state_pool, scratch_pool));
ctx->close_db_on_destroy = TRUE;
apr_pool_cleanup_register(result_pool, ctx, close_ctx_apr,
diff --git a/subversion/libsvn_wc/copy.c b/subversion/libsvn_wc/copy.c
index b843b91..1e7d7cf 100644
--- a/subversion/libsvn_wc/copy.c
+++ b/subversion/libsvn_wc/copy.c
@@ -32,13 +32,12 @@
#include "svn_error.h"
#include "svn_dirent_uri.h"
#include "svn_path.h"
+#include "svn_hash.h"
#include "wc.h"
#include "workqueue.h"
-#include "adm_files.h"
#include "props.h"
-#include "translate.h"
-#include "entries.h"
+#include "conflicts.h"
#include "svn_private_config.h"
#include "private/svn_wc_private.h"
@@ -53,23 +52,32 @@
SRC_ABSPATH doesn't exist then set *DST_ABSPATH to NULL to indicate
that no copy was made. */
static svn_error_t *
-copy_to_tmpdir(const char **dst_abspath,
+copy_to_tmpdir(svn_skel_t **work_item,
svn_node_kind_t *kind,
+ svn_wc__db_t *db,
const char *src_abspath,
+ const char *dst_abspath,
const char *tmpdir_abspath,
- svn_boolean_t recursive,
+ svn_boolean_t file_copy,
+ svn_boolean_t unversioned,
svn_cancel_func_t cancel_func,
void *cancel_baton,
+ apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
svn_boolean_t is_special;
svn_io_file_del_t delete_when;
+ const char *dst_tmp_abspath;
+ svn_node_kind_t dsk_kind;
+ if (!kind)
+ kind = &dsk_kind;
+
+ *work_item = NULL;
SVN_ERR(svn_io_check_special_path(src_abspath, kind, &is_special,
scratch_pool));
if (*kind == svn_node_none)
{
- *dst_abspath = NULL;
return SVN_NO_ERROR;
}
else if (*kind == svn_node_unknown)
@@ -89,107 +97,91 @@ copy_to_tmpdir(const char **dst_abspath,
### handle the directory case and b) we need to be able to remove
### the cleanup before queueing the move work item. */
- /* Set DST_ABSPATH to a temporary unique path. If *KIND is file, leave a
- file there and then overwrite it; otherwise leave no node on disk at
+ if (file_copy && !unversioned)
+ {
+ svn_boolean_t modified;
+ /* It's faster to look for mods on the source now, as
+ the timestamp might match, than to examine the
+ destination later as the destination timestamp will
+ never match. */
+ SVN_ERR(svn_wc__internal_file_modified_p(&modified,
+ db, src_abspath,
+ FALSE, scratch_pool));
+ if (!modified)
+ {
+ /* Why create a temp copy if we can just reinstall from pristine? */
+ SVN_ERR(svn_wc__wq_build_file_install(work_item,
+ db, dst_abspath, NULL, FALSE,
+ TRUE,
+ result_pool, scratch_pool));
+ return SVN_NO_ERROR;
+ }
+ }
+
+ /* Set DST_TMP_ABSPATH to a temporary unique path. If *KIND is file, leave
+ a file there and then overwrite it; otherwise leave no node on disk at
that path. In the latter case, something else might use that path
before we get around to using it a moment later, but never mind. */
- SVN_ERR(svn_io_open_unique_file3(NULL, dst_abspath, tmpdir_abspath,
+ SVN_ERR(svn_io_open_unique_file3(NULL, &dst_tmp_abspath, tmpdir_abspath,
delete_when, scratch_pool, scratch_pool));
if (*kind == svn_node_dir)
{
- if (recursive)
- SVN_ERR(svn_io_copy_dir_recursively(src_abspath,
- tmpdir_abspath,
- svn_dirent_basename(*dst_abspath,
- scratch_pool),
- TRUE, /* copy_perms */
- cancel_func, cancel_baton,
- scratch_pool));
+ if (file_copy)
+ SVN_ERR(svn_io_copy_dir_recursively(
+ src_abspath,
+ tmpdir_abspath,
+ svn_dirent_basename(dst_tmp_abspath, scratch_pool),
+ TRUE, /* copy_perms */
+ cancel_func, cancel_baton,
+ scratch_pool));
else
- SVN_ERR(svn_io_dir_make(*dst_abspath, APR_OS_DEFAULT, scratch_pool));
+ SVN_ERR(svn_io_dir_make(dst_tmp_abspath, APR_OS_DEFAULT, scratch_pool));
}
else if (!is_special)
- SVN_ERR(svn_io_copy_file(src_abspath, *dst_abspath, TRUE, /* copy_perms */
+ SVN_ERR(svn_io_copy_file(src_abspath, dst_tmp_abspath,
+ TRUE /* copy_perms */,
scratch_pool));
else
- SVN_ERR(svn_io_copy_link(src_abspath, *dst_abspath, scratch_pool));
-
-
- return SVN_NO_ERROR;
-}
-
-
-/* If SRC_ABSPATH and DST_ABSPATH use different pristine stores, copy the
- pristine text of SRC_ABSPATH (if there is one) into the pristine text
- store connected to DST_ABSPATH. This will only happen when copying into
- a separate WC such as an external directory.
- */
-static svn_error_t *
-copy_pristine_text_if_necessary(svn_wc__db_t *db,
- const char *src_abspath,
- const char *dst_abspath,
- const char *tmpdir_abspath,
- const svn_checksum_t *checksum,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- apr_pool_t *scratch_pool)
-{
- svn_boolean_t present;
- svn_stream_t *src_pristine, *tmp_pristine;
- const char *tmp_pristine_abspath;
- const svn_checksum_t *sha1_checksum, *md5_checksum;
+ SVN_ERR(svn_io_copy_link(src_abspath, dst_tmp_abspath, scratch_pool));
- SVN_ERR_ASSERT(checksum->kind == svn_checksum_sha1);
-
- /* If it's already in DST_ABSPATH's pristine store, we're done. */
- SVN_ERR(svn_wc__db_pristine_check(&present, db, dst_abspath, checksum,
- scratch_pool));
- if (present)
- return SVN_NO_ERROR;
+ if (file_copy)
+ {
+ /* Remove 'read-only' from the destination file; it's a local add now. */
+ SVN_ERR(svn_io_set_file_read_write(dst_tmp_abspath,
+ FALSE, scratch_pool));
+ }
- sha1_checksum = checksum;
- SVN_ERR(svn_wc__db_pristine_get_md5(&md5_checksum, db,
- src_abspath, checksum,
- scratch_pool, scratch_pool));
-
- SVN_ERR(svn_wc__db_pristine_read(&src_pristine, NULL, db,
- src_abspath, sha1_checksum,
- scratch_pool, scratch_pool));
- SVN_ERR(svn_stream_open_unique(&tmp_pristine, &tmp_pristine_abspath,
- tmpdir_abspath, svn_io_file_del_none,
- scratch_pool, scratch_pool));
- SVN_ERR(svn_stream_copy3(src_pristine, tmp_pristine,
- cancel_func, cancel_baton,
- scratch_pool));
- SVN_ERR(svn_wc__db_pristine_install(db, tmp_pristine_abspath,
- sha1_checksum, md5_checksum,
- scratch_pool));
+ SVN_ERR(svn_wc__wq_build_file_move(work_item, db, dst_abspath,
+ dst_tmp_abspath, dst_abspath,
+ result_pool, scratch_pool));
return SVN_NO_ERROR;
}
-
/* Copy the versioned file SRC_ABSPATH in DB to the path DST_ABSPATH in DB.
If METADATA_ONLY is true, copy only the versioned metadata,
otherwise copy both the versioned metadata and the filesystem node (even
if it is the wrong kind, and recursively if it is a dir).
+ If IS_MOVE is true, record move information in working copy meta
+ data in addition to copying the file.
+
If the versioned file has a text conflict, and the .mine file exists in
the filesystem, copy the .mine file to DST_ABSPATH. Otherwise, copy the
versioned file itself.
This also works for versioned symlinks that are stored in the db as
- svn_wc__db_kind_file with svn:special set. */
+ svn_node_file with svn:special set. */
static svn_error_t *
copy_versioned_file(svn_wc__db_t *db,
const char *src_abspath,
const char *dst_abspath,
const char *dst_op_root_abspath,
const char *tmpdir_abspath,
- const svn_checksum_t *checksum,
svn_boolean_t metadata_only,
svn_boolean_t conflicted,
+ svn_boolean_t is_move,
svn_cancel_func_t cancel_func,
void *cancel_baton,
svn_wc_notify_func2_t notify_func,
@@ -197,52 +189,43 @@ copy_versioned_file(svn_wc__db_t *db,
apr_pool_t *scratch_pool)
{
svn_skel_t *work_items = NULL;
- const char *dir_abspath = svn_dirent_dirname(dst_abspath, scratch_pool);
/* In case we are copying from one WC to another (e.g. an external dir),
ensure the destination WC has a copy of the pristine text. */
- /* Checksum is NULL for local additions */
- if (checksum != NULL)
- SVN_ERR(copy_pristine_text_if_necessary(db, src_abspath, dst_abspath,
- tmpdir_abspath, checksum,
- cancel_func, cancel_baton,
- scratch_pool));
-
/* Prepare a temp copy of the filesystem node. It is usually a file, but
copy recursively if it's a dir. */
if (!metadata_only)
{
- const char *tmp_dst_abspath;
- svn_node_kind_t disk_kind;
const char *my_src_abspath = NULL;
- int i;
+ svn_boolean_t handle_as_unversioned = FALSE;
/* By default, take the copy source as given. */
my_src_abspath = src_abspath;
if (conflicted)
{
- const apr_array_header_t *conflicts;
- const char *conflict_working = NULL;
+ svn_skel_t *conflict;
+ const char *conflict_working;
+ svn_error_t *err;
/* Is there a text conflict at the source path? */
- SVN_ERR(svn_wc__db_read_conflicts(&conflicts, db, src_abspath,
- scratch_pool, scratch_pool));
-
- for (i = 0; i < conflicts->nelts; i++)
- {
- const svn_wc_conflict_description2_t *desc;
+ SVN_ERR(svn_wc__db_read_conflict(&conflict, db, src_abspath,
+ scratch_pool, scratch_pool));
- desc = APR_ARRAY_IDX(conflicts, i,
- const svn_wc_conflict_description2_t*);
+ err = svn_wc__conflict_read_text_conflict(&conflict_working, NULL, NULL,
+ db, src_abspath, conflict,
+ scratch_pool,
+ scratch_pool);
- if (desc->kind == svn_wc_conflict_kind_text)
- {
- conflict_working = desc->my_abspath;
- break;
- }
+ if (err && err->apr_err == SVN_ERR_WC_MISSING)
+ {
+ /* not text conflicted */
+ svn_error_clear(err);
+ conflict_working = NULL;
}
+ else
+ SVN_ERR(err);
if (conflict_working)
{
@@ -253,65 +236,27 @@ copy_versioned_file(svn_wc__db_t *db,
scratch_pool));
if (working_kind == svn_node_file)
- my_src_abspath = conflict_working;
- }
- }
-
- SVN_ERR(copy_to_tmpdir(&tmp_dst_abspath, &disk_kind, my_src_abspath,
- tmpdir_abspath,
- TRUE, /* recursive */
- cancel_func, cancel_baton, scratch_pool));
-
- if (tmp_dst_abspath)
- {
- svn_skel_t *work_item;
-
- /* Remove 'read-only' from the destination file; it's a local add. */
- {
- const svn_string_t *needs_lock;
- SVN_ERR(svn_wc__internal_propget(&needs_lock, db, src_abspath,
- SVN_PROP_NEEDS_LOCK,
- scratch_pool, scratch_pool));
- if (needs_lock)
- SVN_ERR(svn_io_set_file_read_write(tmp_dst_abspath,
- FALSE, scratch_pool));
- }
-
- SVN_ERR(svn_wc__wq_build_file_move(&work_item, db, dir_abspath,
- tmp_dst_abspath, dst_abspath,
- scratch_pool, scratch_pool));
- work_items = svn_wc__wq_merge(work_items, work_item, scratch_pool);
-
- if (disk_kind == svn_node_file)
- {
- svn_boolean_t modified;
-
- /* It's faster to look for mods on the source now, as
- the timestamp might match, than to examine the
- destination later as the destination timestamp will
- never match. */
- SVN_ERR(svn_wc__internal_file_modified_p(&modified,
- db, src_abspath,
- FALSE, scratch_pool));
- if (!modified)
{
- SVN_ERR(svn_wc__wq_build_record_fileinfo(&work_item,
- db, dst_abspath, 0,
- scratch_pool,
- scratch_pool));
- work_items = svn_wc__wq_merge(work_items, work_item,
- scratch_pool);
+ /* Don't perform unmodified/pristine optimization */
+ handle_as_unversioned = TRUE;
+ my_src_abspath = conflict_working;
}
}
}
+
+ SVN_ERR(copy_to_tmpdir(&work_items, NULL, db, my_src_abspath,
+ dst_abspath, tmpdir_abspath,
+ TRUE /* file_copy */,
+ handle_as_unversioned /* unversioned */,
+ cancel_func, cancel_baton,
+ scratch_pool, scratch_pool));
}
/* Copy the (single) node's metadata, and move the new filesystem node
into place. */
- SVN_ERR(svn_wc__db_op_copy(db, src_abspath, dst_abspath, dst_op_root_abspath,
- work_items, scratch_pool));
- SVN_ERR(svn_wc__wq_run(db, dir_abspath,
- cancel_func, cancel_baton, scratch_pool));
+ SVN_ERR(svn_wc__db_op_copy(db, src_abspath, dst_abspath,
+ dst_op_root_abspath, is_move, work_items,
+ scratch_pool));
if (notify_func)
{
@@ -319,6 +264,11 @@ copy_versioned_file(svn_wc__db_t *db,
= svn_wc_create_notify(dst_abspath, svn_wc_notify_add,
scratch_pool);
notify->kind = svn_node_file;
+
+ /* When we notify that we performed a copy, make sure we already did */
+ if (work_items != NULL)
+ SVN_ERR(svn_wc__wq_run(db, dst_abspath,
+ cancel_func, cancel_baton, scratch_pool));
(*notify_func)(notify_baton, notify, scratch_pool);
}
return SVN_NO_ERROR;
@@ -327,7 +277,12 @@ copy_versioned_file(svn_wc__db_t *db,
/* Copy the versioned dir SRC_ABSPATH in DB to the path DST_ABSPATH in DB,
recursively. If METADATA_ONLY is true, copy only the versioned metadata,
otherwise copy both the versioned metadata and the filesystem nodes (even
- if they are the wrong kind, and including unversioned children). */
+ if they are the wrong kind, and including unversioned children).
+ If IS_MOVE is true, record move information in working copy meta
+ data in addition to copying the directory.
+
+ WITHIN_ONE_WC is TRUE if the copy/move is within a single working copy (root)
+ */
static svn_error_t *
copy_versioned_dir(svn_wc__db_t *db,
const char *src_abspath,
@@ -335,6 +290,7 @@ copy_versioned_dir(svn_wc__db_t *db,
const char *dst_op_root_abspath,
const char *tmpdir_abspath,
svn_boolean_t metadata_only,
+ svn_boolean_t is_move,
svn_cancel_func_t cancel_func,
void *cancel_baton,
svn_wc_notify_func2_t notify_func,
@@ -343,37 +299,30 @@ copy_versioned_dir(svn_wc__db_t *db,
{
svn_skel_t *work_items = NULL;
const char *dir_abspath = svn_dirent_dirname(dst_abspath, scratch_pool);
- const apr_array_header_t *versioned_children;
+ apr_hash_t *versioned_children;
+ apr_hash_t *conflicted_children;
apr_hash_t *disk_children;
+ apr_hash_index_t *hi;
svn_node_kind_t disk_kind;
apr_pool_t *iterpool;
- int i;
/* Prepare a temp copy of the single filesystem node (usually a dir). */
if (!metadata_only)
{
- const char *tmp_dst_abspath;
-
- SVN_ERR(copy_to_tmpdir(&tmp_dst_abspath, &disk_kind, src_abspath,
- tmpdir_abspath, FALSE, /* recursive */
- cancel_func, cancel_baton, scratch_pool));
- if (tmp_dst_abspath)
- {
- svn_skel_t *work_item;
-
- SVN_ERR(svn_wc__wq_build_file_move(&work_item, db, dir_abspath,
- tmp_dst_abspath, dst_abspath,
- scratch_pool, scratch_pool));
- work_items = svn_wc__wq_merge(work_items, work_item, scratch_pool);
- }
+ SVN_ERR(copy_to_tmpdir(&work_items, &disk_kind,
+ db, src_abspath, dst_abspath,
+ tmpdir_abspath,
+ FALSE /* file_copy */,
+ FALSE /* unversioned */,
+ cancel_func, cancel_baton,
+ scratch_pool, scratch_pool));
}
/* Copy the (single) node's metadata, and move the new filesystem node
into place. */
- SVN_ERR(svn_wc__db_op_copy(db, src_abspath, dst_abspath, dst_op_root_abspath,
- work_items, scratch_pool));
- SVN_ERR(svn_wc__wq_run(db, dir_abspath,
- cancel_func, cancel_baton, scratch_pool));
+ SVN_ERR(svn_wc__db_op_copy(db, src_abspath, dst_abspath,
+ dst_op_root_abspath, is_move, work_items,
+ scratch_pool));
if (notify_func)
{
@@ -381,6 +330,12 @@ copy_versioned_dir(svn_wc__db_t *db,
= svn_wc_create_notify(dst_abspath, svn_wc_notify_add,
scratch_pool);
notify->kind = svn_node_dir;
+
+ /* When we notify that we performed a copy, make sure we already did */
+ if (work_items != NULL)
+ SVN_ERR(svn_wc__wq_run(db, dir_abspath,
+ cancel_func, cancel_baton, scratch_pool));
+
(*notify_func)(notify_baton, notify, scratch_pool);
}
@@ -394,77 +349,60 @@ copy_versioned_dir(svn_wc__db_t *db,
disk_children = NULL;
/* Copy all the versioned children */
- SVN_ERR(svn_wc__db_read_children(&versioned_children, db, src_abspath,
- scratch_pool, scratch_pool));
iterpool = svn_pool_create(scratch_pool);
- for (i = 0; i < versioned_children->nelts; ++i)
+ SVN_ERR(svn_wc__db_read_children_info(&versioned_children,
+ &conflicted_children,
+ db, src_abspath,
+ scratch_pool, iterpool));
+ for (hi = apr_hash_first(scratch_pool, versioned_children);
+ hi;
+ hi = apr_hash_next(hi))
{
const char *child_name, *child_src_abspath, *child_dst_abspath;
- svn_wc__db_status_t child_status;
- svn_wc__db_kind_t child_kind;
- svn_boolean_t op_root;
- svn_boolean_t conflicted;
- const svn_checksum_t *checksum;
+ struct svn_wc__db_info_t *info;
svn_pool_clear(iterpool);
+
if (cancel_func)
SVN_ERR(cancel_func(cancel_baton));
- child_name = APR_ARRAY_IDX(versioned_children, i, const char *);
+ child_name = svn__apr_hash_index_key(hi);
+ info = svn__apr_hash_index_val(hi);
child_src_abspath = svn_dirent_join(src_abspath, child_name, iterpool);
child_dst_abspath = svn_dirent_join(dst_abspath, child_name, iterpool);
- SVN_ERR(svn_wc__db_read_info(&child_status, &child_kind, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- &checksum, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, &conflicted,
- &op_root, NULL, NULL, NULL, NULL, NULL,
- db, child_src_abspath,
- iterpool, iterpool));
-
- if (op_root)
+ if (info->op_root)
SVN_ERR(svn_wc__db_op_copy_shadowed_layer(db,
child_src_abspath,
child_dst_abspath,
+ is_move,
scratch_pool));
- if (child_status == svn_wc__db_status_normal
- || child_status == svn_wc__db_status_added)
+ if (info->status == svn_wc__db_status_normal
+ || info->status == svn_wc__db_status_added)
{
/* We have more work to do than just changing the DB */
- if (child_kind == svn_wc__db_kind_file)
+ if (info->kind == svn_node_file)
{
- svn_boolean_t skip = FALSE;
-
/* We should skip this node if this child is a file external
(issues #3589, #4000) */
- if (child_status == svn_wc__db_status_normal)
- {
- SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- NULL, NULL, &skip,
- db, child_src_abspath,
- scratch_pool,
- scratch_pool));
- }
-
- if (!skip)
+ if (!info->file_external)
SVN_ERR(copy_versioned_file(db,
child_src_abspath,
child_dst_abspath,
dst_op_root_abspath,
- tmpdir_abspath, checksum,
- metadata_only, conflicted,
+ tmpdir_abspath,
+ metadata_only, info->conflicted,
+ is_move,
cancel_func, cancel_baton,
NULL, NULL,
iterpool));
}
- else if (child_kind == svn_wc__db_kind_dir)
+ else if (info->kind == svn_node_dir)
SVN_ERR(copy_versioned_dir(db,
child_src_abspath, child_dst_abspath,
dst_op_root_abspath, tmpdir_abspath,
- metadata_only,
+ metadata_only, is_move,
cancel_func, cancel_baton, NULL, NULL,
iterpool));
else
@@ -473,88 +411,90 @@ copy_versioned_dir(svn_wc__db_t *db,
svn_dirent_local_style(child_src_abspath,
scratch_pool));
}
- else if (child_status == svn_wc__db_status_deleted
- || child_status == svn_wc__db_status_not_present
- || child_status == svn_wc__db_status_excluded)
+ else if (info->status == svn_wc__db_status_deleted
+ || info->status == svn_wc__db_status_not_present
+ || info->status == svn_wc__db_status_excluded)
{
/* This will be copied as some kind of deletion. Don't touch
any actual files */
- SVN_ERR(svn_wc__db_op_copy(db, child_src_abspath, child_dst_abspath,
- dst_op_root_abspath,
- NULL, iterpool));
+ SVN_ERR(svn_wc__db_op_copy(db, child_src_abspath,
+ child_dst_abspath, dst_op_root_abspath,
+ is_move, NULL, iterpool));
/* Don't recurse on children while all we do is creating not-present
children */
}
+ else if (info->status == svn_wc__db_status_incomplete)
+ {
+ /* Should go ahead and copy incomplete to incomplete? Try to
+ copy as much as possible, or give up early? */
+ return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
+ _("Cannot handle status of '%s'"),
+ svn_dirent_local_style(child_src_abspath,
+ iterpool));
+ }
else
{
- SVN_ERR_ASSERT(child_status == svn_wc__db_status_server_excluded);
+ SVN_ERR_ASSERT(info->status == svn_wc__db_status_server_excluded);
return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
_("Cannot copy '%s' excluded by server"),
- svn_dirent_local_style(src_abspath,
+ svn_dirent_local_style(child_src_abspath,
iterpool));
}
if (disk_children
- && (child_status == svn_wc__db_status_normal
- || child_status == svn_wc__db_status_added))
+ && (info->status == svn_wc__db_status_normal
+ || info->status == svn_wc__db_status_added))
{
/* Remove versioned child as it has been handled */
- apr_hash_set(disk_children, child_name, APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(disk_children, child_name, NULL);
}
}
/* Copy the remaining filesystem children, which are unversioned, skipping
any conflict-marker files. */
- if (disk_children)
+ if (disk_children && apr_hash_count(disk_children))
{
- apr_hash_index_t *hi;
apr_hash_t *marker_files;
SVN_ERR(svn_wc__db_get_conflict_marker_files(&marker_files, db,
src_abspath, scratch_pool,
scratch_pool));
+ work_items = NULL;
+
for (hi = apr_hash_first(scratch_pool, disk_children); hi;
hi = apr_hash_next(hi))
{
const char *name = svn__apr_hash_index_key(hi);
const char *unver_src_abspath, *unver_dst_abspath;
- const char *tmp_dst_abspath;
+ svn_skel_t *work_item;
if (svn_wc_is_adm_dir(name, iterpool))
continue;
- if (marker_files &&
- apr_hash_get(marker_files, name, APR_HASH_KEY_STRING))
- continue;
-
- svn_pool_clear(iterpool);
if (cancel_func)
SVN_ERR(cancel_func(cancel_baton));
+ svn_pool_clear(iterpool);
unver_src_abspath = svn_dirent_join(src_abspath, name, iterpool);
unver_dst_abspath = svn_dirent_join(dst_abspath, name, iterpool);
- SVN_ERR(copy_to_tmpdir(&tmp_dst_abspath, &disk_kind,
- unver_src_abspath, tmpdir_abspath,
- TRUE, /* recursive */
- cancel_func, cancel_baton, iterpool));
- if (tmp_dst_abspath)
- {
- svn_skel_t *work_item;
- SVN_ERR(svn_wc__wq_build_file_move(&work_item, db, dir_abspath,
- tmp_dst_abspath,
- unver_dst_abspath,
- iterpool, iterpool));
- SVN_ERR(svn_wc__db_wq_add(db, dst_abspath, work_item,
- iterpool));
- }
+ if (marker_files &&
+ svn_hash_gets(marker_files, unver_src_abspath))
+ continue;
+ SVN_ERR(copy_to_tmpdir(&work_item, NULL, db, unver_src_abspath,
+ unver_dst_abspath, tmpdir_abspath,
+ TRUE /* recursive */, TRUE /* unversioned */,
+ cancel_func, cancel_baton,
+ scratch_pool, iterpool));
+
+ if (work_item)
+ work_items = svn_wc__wq_merge(work_items, work_item, scratch_pool);
}
- SVN_ERR(svn_wc__wq_run(db, dst_abspath, cancel_func, cancel_baton,
- scratch_pool));
+ SVN_ERR(svn_wc__db_wq_add(db, dst_abspath, work_items, iterpool));
}
svn_pool_destroy(iterpool);
@@ -563,13 +503,20 @@ copy_versioned_dir(svn_wc__db_t *db,
}
-/* Public Interface */
-
-svn_error_t *
-svn_wc_copy3(svn_wc_context_t *wc_ctx,
+/* The guts of svn_wc_copy3() and svn_wc_move().
+ * The additional parameter IS_MOVE indicates whether this is a copy or
+ * a move operation.
+ *
+ * If MOVE_DEGRADED_TO_COPY is not NULL and a move had to be degraded
+ * to a copy, then set *MOVE_DEGRADED_TO_COPY. */
+static svn_error_t *
+copy_or_move(svn_boolean_t *move_degraded_to_copy,
+ svn_wc_context_t *wc_ctx,
const char *src_abspath,
const char *dst_abspath,
svn_boolean_t metadata_only,
+ svn_boolean_t is_move,
+ svn_boolean_t allow_mixed_revisions,
svn_cancel_func_t cancel_func,
void *cancel_baton,
svn_wc_notify_func2_t notify_func,
@@ -577,11 +524,15 @@ svn_wc_copy3(svn_wc_context_t *wc_ctx,
apr_pool_t *scratch_pool)
{
svn_wc__db_t *db = wc_ctx->db;
- svn_wc__db_kind_t src_db_kind;
+ svn_node_kind_t src_db_kind;
const char *dstdir_abspath;
svn_boolean_t conflicted;
- const svn_checksum_t *checksum;
const char *tmpdir_abspath;
+ const char *src_wcroot_abspath;
+ const char *dst_wcroot_abspath;
+ svn_boolean_t within_one_wc;
+ svn_wc__db_status_t src_status;
+ svn_error_t *err;
SVN_ERR_ASSERT(svn_dirent_is_absolute(src_abspath));
SVN_ERR_ASSERT(svn_dirent_is_absolute(dst_abspath));
@@ -591,16 +542,17 @@ svn_wc_copy3(svn_wc_context_t *wc_ctx,
/* Ensure DSTDIR_ABSPATH belongs to the same repository as SRC_ABSPATH;
throw an error if not. */
{
- svn_wc__db_status_t src_status, dstdir_status;
+ svn_wc__db_status_t dstdir_status;
const char *src_repos_root_url, *dst_repos_root_url;
const char *src_repos_uuid, *dst_repos_uuid;
- svn_error_t *err;
+ const char *src_repos_relpath;
- err = svn_wc__db_read_info(&src_status, &src_db_kind, NULL, NULL,
- &src_repos_root_url, &src_repos_uuid, NULL,
- NULL, NULL, NULL, &checksum, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, &conflicted,
- NULL, NULL, NULL, NULL, NULL, NULL,
+ err = svn_wc__db_read_info(&src_status, &src_db_kind, NULL,
+ &src_repos_relpath, &src_repos_root_url,
+ &src_repos_uuid, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, &conflicted, NULL, NULL, NULL, NULL,
+ NULL, NULL,
db, src_abspath, scratch_pool, scratch_pool);
if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
@@ -615,6 +567,10 @@ svn_wc_copy3(svn_wc_context_t *wc_ctx,
else
SVN_ERR(err);
+ /* Do this now, as we know the right data is cached */
+ SVN_ERR(svn_wc__db_get_wcroot(&src_wcroot_abspath, db, src_abspath,
+ scratch_pool, scratch_pool));
+
switch (src_status)
{
case svn_wc__db_status_deleted:
@@ -634,14 +590,47 @@ svn_wc_copy3(svn_wc_context_t *wc_ctx,
break;
}
- SVN_ERR(svn_wc__db_read_info(&dstdir_status, NULL, NULL, NULL,
- &dst_repos_root_url, &dst_repos_uuid, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- NULL, NULL, NULL,
- db, dstdir_abspath,
- scratch_pool, scratch_pool));
+ if (is_move && ! strcmp(src_abspath, src_wcroot_abspath))
+ {
+ return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
+ _("'%s' is the root of a working copy and "
+ "cannot be moved"),
+ svn_dirent_local_style(src_abspath,
+ scratch_pool));
+ }
+ if (is_move && src_repos_relpath && !src_repos_relpath[0])
+ {
+ return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
+ _("'%s' represents the repository root "
+ "and cannot be moved"),
+ svn_dirent_local_style(src_abspath,
+ scratch_pool));
+ }
+
+ err = svn_wc__db_read_info(&dstdir_status, NULL, NULL, NULL,
+ &dst_repos_root_url, &dst_repos_uuid, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL,
+ db, dstdir_abspath,
+ scratch_pool, scratch_pool);
+
+ if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
+ {
+ /* An unversioned destination directory exists on disk. */
+ svn_error_clear(err);
+ return svn_error_createf(SVN_ERR_ENTRY_NOT_FOUND, NULL,
+ _("'%s' is not under version control"),
+ svn_dirent_local_style(dstdir_abspath,
+ scratch_pool));
+ }
+ else
+ SVN_ERR(err);
+
+ /* Do this now, as we know the right data is cached */
+ SVN_ERR(svn_wc__db_get_wcroot(&dst_wcroot_abspath, db, dstdir_abspath,
+ scratch_pool, scratch_pool));
if (!src_repos_root_url)
{
@@ -699,7 +688,6 @@ svn_wc_copy3(svn_wc_context_t *wc_ctx,
disk, before actually doing the file copy. */
{
svn_wc__db_status_t dst_status;
- svn_error_t *err;
err = svn_wc__db_read_info(&dst_status, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
@@ -755,32 +743,119 @@ svn_wc_copy3(svn_wc_context_t *wc_ctx,
}
SVN_ERR(svn_wc__db_temp_wcroot_tempdir(&tmpdir_abspath, db,
- dst_abspath,
+ dstdir_abspath,
scratch_pool, scratch_pool));
- if (src_db_kind == svn_wc__db_kind_file
- || src_db_kind == svn_wc__db_kind_symlink)
+ within_one_wc = (strcmp(src_wcroot_abspath, dst_wcroot_abspath) == 0);
+
+ if (is_move
+ && !within_one_wc)
{
- SVN_ERR(copy_versioned_file(db, src_abspath, dst_abspath, dst_abspath,
- tmpdir_abspath, checksum,
- metadata_only, conflicted,
- cancel_func, cancel_baton,
- notify_func, notify_baton,
- scratch_pool));
+ if (move_degraded_to_copy)
+ *move_degraded_to_copy = TRUE;
+
+ is_move = FALSE;
+ }
+
+ if (!within_one_wc)
+ SVN_ERR(svn_wc__db_pristine_transfer(db, src_abspath, dst_wcroot_abspath,
+ cancel_func, cancel_baton,
+ scratch_pool));
+
+ if (src_db_kind == svn_node_file
+ || src_db_kind == svn_node_symlink)
+ {
+ err = copy_versioned_file(db, src_abspath, dst_abspath, dst_abspath,
+ tmpdir_abspath,
+ metadata_only, conflicted, is_move,
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ scratch_pool);
}
else
{
- SVN_ERR(copy_versioned_dir(db, src_abspath, dst_abspath, dst_abspath,
- tmpdir_abspath,
- metadata_only,
- cancel_func, cancel_baton,
- notify_func, notify_baton,
- scratch_pool));
+ if (is_move
+ && src_status == svn_wc__db_status_normal)
+ {
+ svn_revnum_t min_rev;
+ svn_revnum_t max_rev;
+
+ /* Verify that the move source is a single-revision subtree. */
+ SVN_ERR(svn_wc__db_min_max_revisions(&min_rev, &max_rev, db,
+ src_abspath, FALSE, scratch_pool));
+ if (SVN_IS_VALID_REVNUM(min_rev) && SVN_IS_VALID_REVNUM(max_rev) &&
+ min_rev != max_rev)
+ {
+ if (!allow_mixed_revisions)
+ return svn_error_createf(SVN_ERR_WC_MIXED_REVISIONS, NULL,
+ _("Cannot move mixed-revision "
+ "subtree '%s' [%ld:%ld]; "
+ "try updating it first"),
+ svn_dirent_local_style(src_abspath,
+ scratch_pool),
+ min_rev, max_rev);
+
+ is_move = FALSE;
+ if (move_degraded_to_copy)
+ *move_degraded_to_copy = TRUE;
+ }
+ }
+
+ err = copy_versioned_dir(db, src_abspath, dst_abspath, dst_abspath,
+ tmpdir_abspath, metadata_only, is_move,
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ scratch_pool);
}
+ if (err && svn_error_find_cause(err, SVN_ERR_CANCELLED))
+ return svn_error_trace(err);
+
+ if (is_move)
+ err = svn_error_compose_create(err,
+ svn_wc__db_op_handle_move_back(NULL,
+ db, dst_abspath, src_abspath,
+ NULL /* work_items */,
+ scratch_pool));
+
+ /* Run the work queue with the remaining work */
+ SVN_ERR(svn_error_compose_create(
+ err,
+ svn_wc__wq_run(db, dst_abspath,
+ cancel_func, cancel_baton,
+ scratch_pool)));
+
return SVN_NO_ERROR;
}
+
+/* Public Interface */
+
+svn_error_t *
+svn_wc_copy3(svn_wc_context_t *wc_ctx,
+ const char *src_abspath,
+ const char *dst_abspath,
+ svn_boolean_t metadata_only,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool)
+{
+ /* Verify that we have the required write lock. */
+ SVN_ERR(svn_wc__write_check(wc_ctx->db,
+ svn_dirent_dirname(dst_abspath, scratch_pool),
+ scratch_pool));
+
+ return svn_error_trace(copy_or_move(NULL, wc_ctx, src_abspath, dst_abspath,
+ metadata_only, FALSE /* is_move */,
+ TRUE /* allow_mixed_revisions */,
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ scratch_pool));
+}
+
+
/* Remove the conflict markers of NODE_ABSPATH, that were left over after
copying NODE_ABSPATH from SRC_ABSPATH.
@@ -794,75 +869,40 @@ remove_node_conflict_markers(svn_wc__db_t *db,
const char *node_abspath,
apr_pool_t *scratch_pool)
{
- const apr_array_header_t *conflicts;
+ svn_skel_t *conflict;
- SVN_ERR(svn_wc__db_read_conflicts(&conflicts, db, src_abspath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_read_conflict(&conflict, db, src_abspath,
+ scratch_pool, scratch_pool));
/* Do we have conflict markers that should be removed? */
- if (conflicts != NULL)
+ if (conflict != NULL)
{
+ const apr_array_header_t *markers;
int i;
const char *src_dir = svn_dirent_dirname(src_abspath, scratch_pool);
const char *dst_dir = svn_dirent_dirname(node_abspath, scratch_pool);
- /* No iterpool: Maximum number of possible conflict markers is 4 */
+ SVN_ERR(svn_wc__conflict_read_markers(&markers, db, src_abspath,
+ conflict,
+ scratch_pool, scratch_pool));
- for (i = 0; i < conflicts->nelts; i++)
+ /* No iterpool: Maximum number of possible conflict markers is 4 */
+ for (i = 0; markers && (i < markers->nelts); i++)
{
- const svn_wc_conflict_description2_t *desc;
+ const char *marker_abspath;
const char *child_relpath;
- const char *child_abpath;
-
- desc = APR_ARRAY_IDX(conflicts, i,
- const svn_wc_conflict_description2_t*);
-
- if (desc->kind != svn_wc_conflict_kind_text
- && desc->kind != svn_wc_conflict_kind_property)
- continue;
-
- if (desc->base_abspath != NULL)
- {
- child_relpath = svn_dirent_is_child(src_dir, desc->base_abspath,
- NULL);
+ const char *child_abspath;
- if (child_relpath)
- {
- child_abpath = svn_dirent_join(dst_dir, child_relpath,
- scratch_pool);
+ marker_abspath = APR_ARRAY_IDX(markers, i, const char *);
- SVN_ERR(svn_io_remove_file2(child_abpath, TRUE,
- scratch_pool));
- }
- }
- if (desc->their_abspath != NULL)
- {
- child_relpath = svn_dirent_is_child(src_dir, desc->their_abspath,
- NULL);
-
- if (child_relpath)
- {
- child_abpath = svn_dirent_join(dst_dir, child_relpath,
- scratch_pool);
+ child_relpath = svn_dirent_skip_ancestor(src_dir, marker_abspath);
- SVN_ERR(svn_io_remove_file2(child_abpath, TRUE,
- scratch_pool));
- }
- }
- if (desc->my_abspath != NULL)
+ if (child_relpath)
{
- child_relpath = svn_dirent_is_child(src_dir, desc->my_abspath,
- NULL);
-
- if (child_relpath)
- {
- child_abpath = svn_dirent_join(dst_dir, child_relpath,
- scratch_pool);
+ child_abspath = svn_dirent_join(dst_dir, child_relpath,
+ scratch_pool);
- /* ### Copy child_abspath to node_abspath if it exists? */
- SVN_ERR(svn_io_remove_file2(child_abpath, TRUE,
- scratch_pool));
- }
+ SVN_ERR(svn_io_remove_file2(child_abspath, TRUE, scratch_pool));
}
}
}
@@ -882,7 +922,7 @@ remove_node_conflict_markers(svn_wc__db_t *db,
static svn_error_t *
remove_all_conflict_markers(svn_wc__db_t *db,
const char *src_dir_abspath,
- const char *wc_dir_abspath,
+ const char *dst_dir_abspath,
apr_pool_t *scratch_pool)
{
apr_pool_t *iterpool = svn_pool_create(scratch_pool);
@@ -911,16 +951,16 @@ remove_all_conflict_markers(svn_wc__db_t *db,
SVN_ERR(remove_node_conflict_markers(
db,
svn_dirent_join(src_dir_abspath, name, iterpool),
- svn_dirent_join(wc_dir_abspath, name, iterpool),
+ svn_dirent_join(dst_dir_abspath, name, iterpool),
iterpool));
}
- if (info->kind == svn_wc__db_kind_dir)
+ if (info->kind == svn_node_dir)
{
svn_pool_clear(iterpool);
SVN_ERR(remove_all_conflict_markers(
db,
svn_dirent_join(src_dir_abspath, name, iterpool),
- svn_dirent_join(wc_dir_abspath, name, iterpool),
+ svn_dirent_join(dst_dir_abspath, name, iterpool),
iterpool));
}
}
@@ -930,55 +970,87 @@ remove_all_conflict_markers(svn_wc__db_t *db,
}
svn_error_t *
-svn_wc_move(svn_wc_context_t *wc_ctx,
- const char *src_abspath,
- const char *dst_abspath,
- svn_boolean_t metadata_only,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- svn_wc_notify_func2_t notify_func,
- void *notify_baton,
- apr_pool_t *scratch_pool)
+svn_wc__move2(svn_wc_context_t *wc_ctx,
+ const char *src_abspath,
+ const char *dst_abspath,
+ svn_boolean_t metadata_only,
+ svn_boolean_t allow_mixed_revisions,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool)
{
svn_wc__db_t *db = wc_ctx->db;
- SVN_ERR(svn_wc_copy3(wc_ctx, src_abspath, dst_abspath,
+ svn_boolean_t move_degraded_to_copy = FALSE;
+ svn_node_kind_t kind;
+ svn_boolean_t conflicted;
+
+ /* Verify that we have the required write locks. */
+ SVN_ERR(svn_wc__write_check(wc_ctx->db,
+ svn_dirent_dirname(src_abspath, scratch_pool),
+ scratch_pool));
+ SVN_ERR(svn_wc__write_check(wc_ctx->db,
+ svn_dirent_dirname(dst_abspath, scratch_pool),
+ scratch_pool));
+
+ SVN_ERR(copy_or_move(&move_degraded_to_copy,
+ wc_ctx, src_abspath, dst_abspath,
TRUE /* metadata_only */,
+ TRUE /* is_move */,
+ allow_mixed_revisions,
cancel_func, cancel_baton,
notify_func, notify_baton,
scratch_pool));
+ /* An interrupt at this point will leave the new copy marked as
+ moved-here but the source has not yet been deleted or marked as
+ moved-to. */
+
/* Should we be using a workqueue for this move? It's not clear.
What should happen if the copy above is interrupted? The user
may want to abort the move and a workqueue might interfere with
- that. */
+ that.
+
+ BH: On Windows it is not unlikely to encounter an access denied on
+ this line. Installing the move in the workqueue via the copy_or_move
+ might make it hard to recover from that situation, while the DB
+ is still in a valid state. So be careful when switching this over
+ to the workqueue. */
if (!metadata_only)
SVN_ERR(svn_io_file_rename(src_abspath, dst_abspath, scratch_pool));
- {
- svn_wc__db_kind_t kind;
- svn_boolean_t conflicted;
-
- SVN_ERR(svn_wc__db_read_info(NULL, &kind, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- &conflicted, NULL, NULL, NULL,
- NULL, NULL, NULL,
- db, src_abspath,
- scratch_pool, scratch_pool));
-
- if (kind == svn_wc__db_kind_dir)
- SVN_ERR(remove_all_conflict_markers(db, src_abspath, dst_abspath,
- scratch_pool));
-
- if (conflicted)
- SVN_ERR(remove_node_conflict_markers(db, src_abspath, dst_abspath,
+ SVN_ERR(svn_wc__db_read_info(NULL, &kind, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ &conflicted, NULL, NULL, NULL,
+ NULL, NULL, NULL,
+ db, src_abspath,
+ scratch_pool, scratch_pool));
+
+ if (kind == svn_node_dir)
+ SVN_ERR(remove_all_conflict_markers(db, src_abspath, dst_abspath,
+ scratch_pool));
+
+ if (conflicted)
+ {
+ /* When we moved a directory, we moved the conflict markers
+ with the target... if we moved a file we only moved the
+ file itself and the markers are still in the old location */
+ SVN_ERR(remove_node_conflict_markers(db, src_abspath,
+ (kind == svn_node_dir)
+ ? dst_abspath
+ : src_abspath,
scratch_pool));
- }
+ }
- SVN_ERR(svn_wc_delete4(wc_ctx, src_abspath, TRUE, FALSE,
- cancel_func, cancel_baton,
- notify_func, notify_baton,
- scratch_pool));
+ SVN_ERR(svn_wc__db_op_delete(db, src_abspath,
+ move_degraded_to_copy ? NULL : dst_abspath,
+ TRUE /* delete_dir_externals */,
+ NULL /* conflict */, NULL /* work_items */,
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ scratch_pool));
return SVN_NO_ERROR;
}
diff --git a/subversion/libsvn_wc/crop.c b/subversion/libsvn_wc/crop.c
index 1ae1958..a8d5ce2 100644
--- a/subversion/libsvn_wc/crop.c
+++ b/subversion/libsvn_wc/crop.c
@@ -31,24 +31,10 @@
#include "svn_path.h"
#include "wc.h"
+#include "workqueue.h"
#include "svn_private_config.h"
-/* Evaluate EXPR. If it returns an error, return that error, unless
- the error's code is SVN_ERR_WC_LEFT_LOCAL_MOD, in which case clear
- the error and do not return. */
-#define IGNORE_LOCAL_MOD(expr) \
- do { \
- svn_error_t *__temp = (expr); \
- if (__temp) \
- { \
- if (__temp->apr_err == SVN_ERR_WC_LEFT_LOCAL_MOD) \
- svn_error_clear(__temp); \
- else \
- return svn_error_trace(__temp); \
- } \
- } while (0)
-
/* Helper function that crops the children of the LOCAL_ABSPATH, under the
* constraint of NEW_DEPTH. The DIR_PATH itself will never be cropped. The
* whole subtree should have been locked.
@@ -98,7 +84,7 @@ crop_children(svn_wc__db_t *db,
const char *child_name = APR_ARRAY_IDX(children, i, const char *);
const char *child_abspath;
svn_wc__db_status_t child_status;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
svn_depth_t child_depth;
svn_pool_clear(iterpool);
@@ -117,50 +103,50 @@ crop_children(svn_wc__db_t *db,
child_status == svn_wc__db_status_excluded ||
child_status == svn_wc__db_status_not_present)
{
- svn_depth_t remove_below = (kind == svn_wc__db_kind_dir)
+ svn_depth_t remove_below = (kind == svn_node_dir)
? svn_depth_immediates
: svn_depth_files;
if (new_depth < remove_below)
- SVN_ERR(svn_wc__db_op_remove_node(db, local_abspath,
- SVN_INVALID_REVNUM,
- svn_wc__db_kind_unknown,
- iterpool));
+ SVN_ERR(svn_wc__db_base_remove(db, child_abspath,
+ FALSE /* keep_as_working */,
+ FALSE /* queue_deletes */,
+ FALSE /* remove_locks */,
+ SVN_INVALID_REVNUM,
+ NULL, NULL, iterpool));
continue;
}
- else if (kind == svn_wc__db_kind_file)
+ else if (kind == svn_node_file)
{
- /* We currently crop on a directory basis. So don't worry about
- svn_depth_exclude here. And even we permit excluding a single
- file in the future, svn_wc_remove_from_revision_control() can
- also handle it. We only need to skip the notification in that
- case. */
if (new_depth == svn_depth_empty)
- IGNORE_LOCAL_MOD(
- svn_wc__internal_remove_from_revision_control(
- db,
- child_abspath,
- TRUE, /* destroy */
- FALSE, /* instant error */
- cancel_func, cancel_baton,
- iterpool));
+ SVN_ERR(svn_wc__db_op_remove_node(NULL,
+ db, child_abspath,
+ TRUE /* destroy */,
+ FALSE /* destroy_changes */,
+ SVN_INVALID_REVNUM,
+ svn_wc__db_status_not_present,
+ svn_node_none,
+ NULL, NULL,
+ cancel_func, cancel_baton,
+ iterpool));
else
continue;
}
- else if (kind == svn_wc__db_kind_dir)
+ else if (kind == svn_node_dir)
{
if (new_depth < svn_depth_immediates)
{
- IGNORE_LOCAL_MOD(
- svn_wc__internal_remove_from_revision_control(
- db,
- child_abspath,
- TRUE, /* destroy */
- FALSE, /* instant error */
- cancel_func,
- cancel_baton,
- iterpool));
+ SVN_ERR(svn_wc__db_op_remove_node(NULL,
+ db, child_abspath,
+ TRUE /* destroy */,
+ FALSE /* destroy_changes */,
+ SVN_INVALID_REVNUM,
+ svn_wc__db_status_not_present,
+ svn_node_none,
+ NULL, NULL,
+ cancel_func, cancel_baton,
+ iterpool));
}
else
{
@@ -209,12 +195,12 @@ svn_wc_exclude(svn_wc_context_t *wc_ctx,
{
svn_boolean_t is_root, is_switched;
svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
svn_revnum_t revision;
const char *repos_relpath, *repos_root, *repos_uuid;
- SVN_ERR(svn_wc__check_wc_root(&is_root, NULL, &is_switched,
- wc_ctx->db, local_abspath, scratch_pool));
+ SVN_ERR(svn_wc__db_is_switched(&is_root, &is_switched, NULL,
+ wc_ctx->db, local_abspath, scratch_pool));
if (is_root)
{
@@ -272,27 +258,21 @@ svn_wc_exclude(svn_wc_context_t *wc_ctx,
break; /* Ok to exclude */
}
- /* ### This could use some kind of transaction */
-
/* Remove all working copy data below local_abspath */
- IGNORE_LOCAL_MOD(svn_wc__internal_remove_from_revision_control(
- wc_ctx->db,
- local_abspath,
- TRUE,
- FALSE,
+ SVN_ERR(svn_wc__db_op_remove_node(NULL,
+ wc_ctx->db, local_abspath,
+ TRUE /* destroy */,
+ FALSE /* destroy_changes */,
+ revision,
+ svn_wc__db_status_excluded,
+ kind,
+ NULL, NULL,
cancel_func, cancel_baton,
scratch_pool));
- SVN_ERR(svn_wc__db_base_add_excluded_node(wc_ctx->db,
- local_abspath,
- repos_relpath,
- repos_root,
- repos_uuid,
- revision,
- kind,
- svn_wc__db_status_excluded,
- NULL, NULL,
- scratch_pool));
+ SVN_ERR(svn_wc__wq_run(wc_ctx->db, local_abspath,
+ cancel_func, cancel_baton,
+ scratch_pool));
if (notify_func)
{
@@ -318,7 +298,7 @@ svn_wc_crop_tree2(svn_wc_context_t *wc_ctx,
{
svn_wc__db_t *db = wc_ctx->db;
svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
svn_depth_t dir_depth;
/* Only makes sense when the depth is restrictive. */
@@ -335,7 +315,7 @@ svn_wc_crop_tree2(svn_wc_context_t *wc_ctx,
db, local_abspath,
scratch_pool, scratch_pool));
- if (kind != svn_wc__db_kind_dir)
+ if (kind != svn_node_dir)
return svn_error_create(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
_("Can only crop directories"));
@@ -372,7 +352,11 @@ svn_wc_crop_tree2(svn_wc_context_t *wc_ctx,
SVN_ERR_MALFUNCTION();
}
- return crop_children(db, local_abspath, dir_depth, depth,
- notify_func, notify_baton,
- cancel_func, cancel_baton, scratch_pool);
+ SVN_ERR(crop_children(db, local_abspath, dir_depth, depth,
+ notify_func, notify_baton,
+ cancel_func, cancel_baton, scratch_pool));
+
+ return svn_error_trace(svn_wc__wq_run(db, local_abspath,
+ cancel_func, cancel_baton,
+ scratch_pool));
}
diff --git a/subversion/libsvn_wc/delete.c b/subversion/libsvn_wc/delete.c
new file mode 100644
index 0000000..37c8af0
--- /dev/null
+++ b/subversion/libsvn_wc/delete.c
@@ -0,0 +1,508 @@
+/*
+ * delete.c: Handling of the in-wc side of the delete operation
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+
+
+#include <string.h>
+#include <stdlib.h>
+
+#include <apr_pools.h>
+
+#include "svn_types.h"
+#include "svn_pools.h"
+#include "svn_string.h"
+#include "svn_error.h"
+#include "svn_dirent_uri.h"
+#include "svn_wc.h"
+#include "svn_io.h"
+
+#include "wc.h"
+#include "adm_files.h"
+#include "conflicts.h"
+#include "workqueue.h"
+
+#include "svn_private_config.h"
+#include "private/svn_wc_private.h"
+
+
+/* Remove/erase PATH from the working copy. This involves deleting PATH
+ * from the physical filesystem. PATH is assumed to be an unversioned file
+ * or directory.
+ *
+ * If ignore_enoent is TRUE, ignore missing targets.
+ *
+ * If CANCEL_FUNC is non-null, invoke it with CANCEL_BATON at various
+ * points, return any error immediately.
+ */
+static svn_error_t *
+erase_unversioned_from_wc(const char *path,
+ svn_boolean_t ignore_enoent,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
+{
+ svn_error_t *err;
+
+ /* Optimize the common case: try to delete the file */
+ err = svn_io_remove_file2(path, ignore_enoent, scratch_pool);
+ if (err)
+ {
+ /* Then maybe it was a directory? */
+ svn_error_clear(err);
+
+ err = svn_io_remove_dir2(path, ignore_enoent, cancel_func, cancel_baton,
+ scratch_pool);
+
+ if (err)
+ {
+ /* We're unlikely to end up here. But we need this fallback
+ to make sure we report the right error *and* try the
+ correct deletion at least once. */
+ svn_node_kind_t kind;
+
+ svn_error_clear(err);
+ SVN_ERR(svn_io_check_path(path, &kind, scratch_pool));
+ if (kind == svn_node_file)
+ SVN_ERR(svn_io_remove_file2(path, ignore_enoent, scratch_pool));
+ else if (kind == svn_node_dir)
+ SVN_ERR(svn_io_remove_dir2(path, ignore_enoent,
+ cancel_func, cancel_baton,
+ scratch_pool));
+ else if (kind == svn_node_none)
+ return svn_error_createf(SVN_ERR_BAD_FILENAME, NULL,
+ _("'%s' does not exist"),
+ svn_dirent_local_style(path,
+ scratch_pool));
+ else
+ return svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
+ _("Unsupported node kind for path '%s'"),
+ svn_dirent_local_style(path,
+ scratch_pool));
+
+ }
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Helper for svn_wc__delete and svn_wc__delete_many */
+static svn_error_t *
+create_delete_wq_items(svn_skel_t **work_items,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_node_kind_t kind,
+ svn_boolean_t conflicted,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ *work_items = NULL;
+
+ /* Schedule the on-disk delete */
+ if (kind == svn_node_dir)
+ SVN_ERR(svn_wc__wq_build_dir_remove(work_items, db, local_abspath,
+ local_abspath,
+ TRUE /* recursive */,
+ result_pool, scratch_pool));
+ else
+ SVN_ERR(svn_wc__wq_build_file_remove(work_items, db, local_abspath,
+ local_abspath,
+ result_pool, scratch_pool));
+
+ /* Read conflicts, to allow deleting the markers after updating the DB */
+ if (conflicted)
+ {
+ svn_skel_t *conflict;
+ const apr_array_header_t *markers;
+ int i;
+
+ SVN_ERR(svn_wc__db_read_conflict(&conflict, db, local_abspath,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(svn_wc__conflict_read_markers(&markers, db, local_abspath,
+ conflict,
+ scratch_pool, scratch_pool));
+
+ /* Maximum number of markers is 4, so no iterpool */
+ for (i = 0; markers && i < markers->nelts; i++)
+ {
+ const char *marker_abspath;
+ svn_node_kind_t marker_kind;
+
+ marker_abspath = APR_ARRAY_IDX(markers, i, const char *);
+ SVN_ERR(svn_io_check_path(marker_abspath, &marker_kind,
+ scratch_pool));
+
+ if (marker_kind == svn_node_file)
+ {
+ svn_skel_t *work_item;
+
+ SVN_ERR(svn_wc__wq_build_file_remove(&work_item, db,
+ local_abspath,
+ marker_abspath,
+ result_pool,
+ scratch_pool));
+
+ *work_items = svn_wc__wq_merge(*work_items, work_item,
+ result_pool);
+ }
+ }
+ }
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__delete_many(svn_wc_context_t *wc_ctx,
+ const apr_array_header_t *targets,
+ svn_boolean_t keep_local,
+ svn_boolean_t delete_unversioned_target,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_t *db = wc_ctx->db;
+ svn_error_t *err;
+ svn_wc__db_status_t status;
+ svn_node_kind_t kind;
+ svn_skel_t *work_items = NULL;
+ apr_array_header_t *versioned_targets;
+ const char *local_abspath;
+ int i;
+ apr_pool_t *iterpool;
+
+ iterpool = svn_pool_create(scratch_pool);
+ versioned_targets = apr_array_make(scratch_pool, targets->nelts,
+ sizeof(const char *));
+ for (i = 0; i < targets->nelts; i++)
+ {
+ svn_boolean_t conflicted = FALSE;
+ const char *repos_relpath;
+
+ svn_pool_clear(iterpool);
+
+ local_abspath = APR_ARRAY_IDX(targets, i, const char *);
+ err = svn_wc__db_read_info(&status, &kind, NULL, &repos_relpath, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, &conflicted,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ db, local_abspath, iterpool, iterpool);
+
+ if (err)
+ {
+ if (err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ if (delete_unversioned_target && !keep_local)
+ SVN_ERR(erase_unversioned_from_wc(local_abspath, FALSE,
+ cancel_func, cancel_baton,
+ iterpool));
+ continue;
+ }
+ else
+ return svn_error_trace(err);
+ }
+
+ APR_ARRAY_PUSH(versioned_targets, const char *) = local_abspath;
+
+ switch (status)
+ {
+ /* svn_wc__db_status_server_excluded handled by
+ * svn_wc__db_op_delete_many */
+ case svn_wc__db_status_excluded:
+ case svn_wc__db_status_not_present:
+ return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
+ _("'%s' cannot be deleted"),
+ svn_dirent_local_style(local_abspath,
+ iterpool));
+
+ /* Explicitly ignore other statii */
+ default:
+ break;
+ }
+
+ if (status == svn_wc__db_status_normal
+ && kind == svn_node_dir)
+ {
+ svn_boolean_t is_wcroot;
+ SVN_ERR(svn_wc__db_is_wcroot(&is_wcroot, db, local_abspath,
+ iterpool));
+
+ if (is_wcroot)
+ return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
+ _("'%s' is the root of a working copy and "
+ "cannot be deleted"),
+ svn_dirent_local_style(local_abspath,
+ iterpool));
+ }
+ if (repos_relpath && !repos_relpath[0])
+ return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
+ _("'%s' represents the repository root "
+ "and cannot be deleted"),
+ svn_dirent_local_style(local_abspath,
+ iterpool));
+
+ /* Verify if we have a write lock on the parent of this node as we might
+ be changing the childlist of that directory. */
+ SVN_ERR(svn_wc__write_check(db, svn_dirent_dirname(local_abspath,
+ iterpool),
+ iterpool));
+
+ /* Prepare the on-disk delete */
+ if (!keep_local)
+ {
+ svn_skel_t *work_item;
+
+ SVN_ERR(create_delete_wq_items(&work_item, db, local_abspath, kind,
+ conflicted,
+ scratch_pool, iterpool));
+
+ work_items = svn_wc__wq_merge(work_items, work_item,
+ scratch_pool);
+ }
+ }
+
+ if (versioned_targets->nelts == 0)
+ return SVN_NO_ERROR;
+
+ SVN_ERR(svn_wc__db_op_delete_many(db, versioned_targets,
+ !keep_local /* delete_dir_externals */,
+ work_items,
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ iterpool));
+
+ if (work_items != NULL)
+ {
+ /* Our only caller locked the wc, so for now assume it only passed
+ nodes from a single wc (asserted in svn_wc__db_op_delete_many) */
+ local_abspath = APR_ARRAY_IDX(versioned_targets, 0, const char *);
+
+ SVN_ERR(svn_wc__wq_run(db, local_abspath, cancel_func, cancel_baton,
+ iterpool));
+ }
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc_delete4(svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ svn_boolean_t keep_local,
+ svn_boolean_t delete_unversioned_target,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool)
+{
+ apr_pool_t *pool = scratch_pool;
+ svn_wc__db_t *db = wc_ctx->db;
+ svn_error_t *err;
+ svn_wc__db_status_t status;
+ svn_node_kind_t kind;
+ svn_boolean_t conflicted;
+ svn_skel_t *work_items = NULL;
+ const char *repos_relpath;
+
+ err = svn_wc__db_read_info(&status, &kind, NULL, &repos_relpath, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, &conflicted,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ db, local_abspath, pool, pool);
+
+ if (delete_unversioned_target &&
+ err != NULL && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
+ {
+ svn_error_clear(err);
+
+ if (!keep_local)
+ SVN_ERR(erase_unversioned_from_wc(local_abspath, FALSE,
+ cancel_func, cancel_baton,
+ pool));
+ return SVN_NO_ERROR;
+ }
+ else
+ SVN_ERR(err);
+
+ switch (status)
+ {
+ /* svn_wc__db_status_server_excluded handled by svn_wc__db_op_delete */
+ case svn_wc__db_status_excluded:
+ case svn_wc__db_status_not_present:
+ return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
+ _("'%s' cannot be deleted"),
+ svn_dirent_local_style(local_abspath, pool));
+
+ /* Explicitly ignore other statii */
+ default:
+ break;
+ }
+
+ if (status == svn_wc__db_status_normal
+ && kind == svn_node_dir)
+ {
+ svn_boolean_t is_wcroot;
+ SVN_ERR(svn_wc__db_is_wcroot(&is_wcroot, db, local_abspath, pool));
+
+ if (is_wcroot)
+ return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
+ _("'%s' is the root of a working copy and "
+ "cannot be deleted"),
+ svn_dirent_local_style(local_abspath, pool));
+ }
+ if (repos_relpath && !repos_relpath[0])
+ return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
+ _("'%s' represents the repository root "
+ "and cannot be deleted"),
+ svn_dirent_local_style(local_abspath, pool));
+
+ /* Verify if we have a write lock on the parent of this node as we might
+ be changing the childlist of that directory. */
+ SVN_ERR(svn_wc__write_check(db, svn_dirent_dirname(local_abspath, pool),
+ pool));
+
+ /* Prepare the on-disk delete */
+ if (!keep_local)
+ {
+ SVN_ERR(create_delete_wq_items(&work_items, db, local_abspath, kind,
+ conflicted,
+ scratch_pool, scratch_pool));
+ }
+
+ SVN_ERR(svn_wc__db_op_delete(db, local_abspath,
+ NULL /*moved_to_abspath */,
+ !keep_local /* delete_dir_externals */,
+ NULL, work_items,
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ pool));
+
+ if (work_items)
+ SVN_ERR(svn_wc__wq_run(db, local_abspath, cancel_func, cancel_baton,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__internal_remove_from_revision_control(svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_boolean_t destroy_wf,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
+{
+ svn_boolean_t left_something = FALSE;
+ svn_boolean_t is_root;
+ svn_error_t *err = NULL;
+
+ SVN_ERR(svn_wc__db_is_wcroot(&is_root, db, local_abspath, scratch_pool));
+
+ SVN_ERR(svn_wc__write_check(db, is_root ? local_abspath
+ : svn_dirent_dirname(local_abspath,
+ scratch_pool),
+ scratch_pool));
+
+ SVN_ERR(svn_wc__db_op_remove_node(&left_something,
+ db, local_abspath,
+ destroy_wf /* destroy_wc */,
+ destroy_wf /* destroy_changes */,
+ SVN_INVALID_REVNUM,
+ svn_wc__db_status_not_present,
+ svn_node_none,
+ NULL, NULL,
+ cancel_func, cancel_baton,
+ scratch_pool));
+
+ SVN_ERR(svn_wc__wq_run(db, local_abspath,
+ cancel_func, cancel_baton,
+ scratch_pool));
+
+ if (is_root)
+ {
+ /* Destroy the administrative area */
+ SVN_ERR(svn_wc__adm_destroy(db, local_abspath, cancel_func, cancel_baton,
+ scratch_pool));
+
+ /* And if we didn't leave something interesting, remove the directory */
+ if (!left_something && destroy_wf)
+ err = svn_io_dir_remove_nonrecursive(local_abspath, scratch_pool);
+ }
+
+ if (left_something || err)
+ return svn_error_create(SVN_ERR_WC_LEFT_LOCAL_MOD, err, NULL);
+
+ return SVN_NO_ERROR;
+}
+
+/* Implements svn_wc_status_func4_t for svn_wc_remove_from_revision_control2 */
+static svn_error_t *
+remove_from_revision_status_callback(void *baton,
+ const char *local_abspath,
+ const svn_wc_status3_t *status,
+ apr_pool_t *scratch_pool)
+{
+ /* For legacy reasons we only check the file contents for changes */
+ if (status->versioned
+ && status->kind == svn_node_file
+ && (status->text_status == svn_wc_status_modified
+ || status->text_status == svn_wc_status_conflicted))
+ {
+ return svn_error_createf(SVN_ERR_WC_LEFT_LOCAL_MOD, NULL,
+ _("File '%s' has local modifications"),
+ svn_dirent_local_style(local_abspath,
+ scratch_pool));
+ }
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc_remove_from_revision_control2(svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ svn_boolean_t destroy_wf,
+ svn_boolean_t instant_error,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
+{
+ if (instant_error)
+ {
+ SVN_ERR(svn_wc_walk_status(wc_ctx, local_abspath, svn_depth_infinity,
+ FALSE, FALSE, FALSE, NULL,
+ remove_from_revision_status_callback, NULL,
+ cancel_func, cancel_baton,
+ scratch_pool));
+ }
+ return svn_error_trace(
+ svn_wc__internal_remove_from_revision_control(wc_ctx->db,
+ local_abspath,
+ destroy_wf,
+ cancel_func,
+ cancel_baton,
+ scratch_pool));
+}
+
diff --git a/subversion/libsvn_wc/deprecated.c b/subversion/libsvn_wc/deprecated.c
index d9dbdf4..79cdb30 100644
--- a/subversion/libsvn_wc/deprecated.c
+++ b/subversion/libsvn_wc/deprecated.c
@@ -32,10 +32,12 @@
#include "svn_subst.h"
#include "svn_pools.h"
#include "svn_props.h"
+#include "svn_hash.h"
#include "svn_time.h"
#include "svn_dirent_uri.h"
#include "svn_path.h"
+#include "private/svn_subr_private.h"
#include "private/svn_wc_private.h"
#include "wc.h"
@@ -84,8 +86,7 @@ traversal_info_update(void *baton,
{
dup_val = apr_pstrmemdup(dup_pool, old_val->data, old_val->len);
- apr_hash_set(ub->traversal->externals_old, dup_path, APR_HASH_KEY_STRING,
- dup_val);
+ svn_hash_sets(ub->traversal->externals_old, dup_path, dup_val);
}
if (new_val)
@@ -94,12 +95,10 @@ traversal_info_update(void *baton,
if (old_val != new_val)
dup_val = apr_pstrmemdup(dup_pool, new_val->data, new_val->len);
- apr_hash_set(ub->traversal->externals_new, dup_path, APR_HASH_KEY_STRING,
- dup_val);
+ svn_hash_sets(ub->traversal->externals_new, dup_path, dup_val);
}
- apr_hash_set(ub->traversal->depths, dup_path, APR_HASH_KEY_STRING,
- svn_depth_to_word(depth));
+ svn_hash_sets(ub->traversal->depths, dup_path, svn_depth_to_word(depth));
return SVN_NO_ERROR;
}
@@ -137,19 +136,15 @@ gather_traversal_info(svn_wc_context_t *wc_ctx,
traversal_info->pool);
if (gather_as_old)
- apr_hash_set(traversal_info->externals_old,
- relpath, APR_HASH_KEY_STRING,
- svn__apr_hash_index_val(hi));
+ svn_hash_sets(traversal_info->externals_old, relpath,
+ svn__apr_hash_index_val(hi));
if (gather_as_new)
- apr_hash_set(traversal_info->externals_new,
- relpath, APR_HASH_KEY_STRING,
- svn__apr_hash_index_val(hi));
-
- apr_hash_set(traversal_info->depths,
- relpath, APR_HASH_KEY_STRING,
- apr_hash_get(ambient_depths, node_abspath,
- APR_HASH_KEY_STRING));
+ svn_hash_sets(traversal_info->externals_new, relpath,
+ svn__apr_hash_index_val(hi));
+
+ svn_hash_sets(traversal_info->depths, relpath,
+ svn_hash_gets(ambient_depths, node_abspath));
}
return SVN_NO_ERROR;
@@ -606,6 +601,34 @@ svn_wc_create_tmp_file(apr_file_t **fp,
pool);
}
+svn_error_t *
+svn_wc_create_tmp_file2(apr_file_t **fp,
+ const char **new_name,
+ const char *path,
+ svn_io_file_del_t delete_when,
+ apr_pool_t *pool)
+{
+ svn_wc_context_t *wc_ctx;
+ const char *local_abspath;
+ const char *temp_dir;
+ svn_error_t *err;
+
+ SVN_ERR_ASSERT(fp || new_name);
+
+ SVN_ERR(svn_wc_context_create(&wc_ctx, NULL /* config */, pool, pool));
+
+ SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, pool));
+ err = svn_wc__get_tmpdir(&temp_dir, wc_ctx, local_abspath, pool, pool);
+ err = svn_error_compose_create(err, svn_wc_context_destroy(wc_ctx));
+ if (err)
+ return svn_error_trace(err);
+
+ SVN_ERR(svn_io_open_unique_file3(fp, new_name, temp_dir,
+ delete_when, pool, pool));
+
+ return SVN_NO_ERROR;
+}
+
/*** From adm_ops.c ***/
svn_error_t *
@@ -688,9 +711,8 @@ svn_wc_queue_committed(svn_wc_committed_queue_t **queue,
const svn_checksum_t *md5_checksum;
if (digest)
- md5_checksum = svn_checksum__from_digest(
- digest, svn_checksum_md5,
- svn_wc__get_committed_queue_pool(*queue));
+ md5_checksum = svn_checksum__from_digest_md5(
+ digest, svn_wc__get_committed_queue_pool(*queue));
else
md5_checksum = NULL;
@@ -748,7 +770,7 @@ svn_wc_process_committed4(const char *path,
new_date = 0;
if (digest)
- md5_checksum = svn_checksum__from_digest(digest, svn_checksum_md5, pool);
+ md5_checksum = svn_checksum__from_digest_md5(digest, pool);
else
md5_checksum = NULL;
@@ -903,6 +925,18 @@ svn_wc_delete(const char *path,
}
svn_error_t *
+svn_wc_add_from_disk(svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool)
+{
+ SVN_ERR(svn_wc_add_from_disk2(wc_ctx, local_abspath, NULL,
+ notify_func, notify_baton, scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
svn_wc_add3(const char *path,
svn_wc_adm_access_t *parent_access,
svn_depth_t depth,
@@ -930,10 +964,13 @@ svn_wc_add3(const char *path,
/* Make sure the caller gets the new access baton in the set. */
if (svn_wc__adm_retrieve_internal2(wc_db, local_abspath, pool) == NULL)
{
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
- SVN_ERR(svn_wc__db_read_kind(&kind, wc_db, local_abspath, FALSE, pool));
- if (kind == svn_wc__db_kind_dir)
+ SVN_ERR(svn_wc__db_read_kind(&kind, wc_db, local_abspath,
+ FALSE /* allow_missing */,
+ TRUE /* show_deleted */,
+ FALSE /* show_hidden */, pool));
+ if (kind == svn_node_dir)
{
svn_wc_adm_access_t *adm_access;
@@ -1907,6 +1944,43 @@ static struct svn_wc_diff_callbacks4_t diff_callbacks3_wrapper = {
wrap_4to3_dir_closed
};
+
+svn_error_t *
+svn_wc_get_diff_editor6(const svn_delta_editor_t **editor,
+ void **edit_baton,
+ svn_wc_context_t *wc_ctx,
+ const char *anchor_abspath,
+ const char *target,
+ svn_depth_t depth,
+ svn_boolean_t ignore_ancestry,
+ svn_boolean_t show_copies_as_adds,
+ svn_boolean_t use_git_diff_format,
+ svn_boolean_t use_text_base,
+ svn_boolean_t reverse_order,
+ svn_boolean_t server_performs_filtering,
+ const apr_array_header_t *changelist_filter,
+ const svn_wc_diff_callbacks4_t *callbacks,
+ void *callback_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ return svn_error_trace(
+ svn_wc__get_diff_editor(editor, edit_baton,
+ wc_ctx,
+ anchor_abspath, target,
+ depth,
+ ignore_ancestry, show_copies_as_adds,
+ use_git_diff_format, use_text_base,
+ reverse_order, server_performs_filtering,
+ changelist_filter,
+ callbacks, callback_baton,
+ cancel_func, cancel_baton,
+ result_pool, scratch_pool));
+}
+
+
svn_error_t *
svn_wc_get_diff_editor5(svn_wc_adm_access_t *anchor,
const char *target,
@@ -2277,8 +2351,7 @@ svn_wc_parse_externals_description(apr_hash_t **externals_p,
svn_wc_external_item_t *item;
item = APR_ARRAY_IDX(list, i, svn_wc_external_item_t *);
- apr_hash_set(*externals_p, item->target_dir,
- APR_HASH_KEY_STRING, item);
+ svn_hash_sets(*externals_p, item->target_dir, item);
}
}
return SVN_NO_ERROR;
@@ -2432,27 +2505,36 @@ svn_wc_merge_props2(svn_wc_notify_state_t *state,
{
const char *local_abspath;
svn_error_t *err;
+ svn_wc_context_t *wc_ctx;
struct conflict_func_1to2_baton conflict_wrapper;
+ if (base_merge && !dry_run)
+ return svn_error_create(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
+ U_("base_merge=TRUE is no longer supported; "
+ "see notes/api-errata/1.7/wc006.txt"));
+
SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, scratch_pool));
conflict_wrapper.inner_func = conflict_func;
conflict_wrapper.inner_baton = conflict_baton;
- err = svn_wc__perform_props_merge(state,
- svn_wc__adm_get_db(adm_access),
- local_abspath,
- NULL /* left_version */,
- NULL /* right_version */,
- baseprops,
- propchanges,
- base_merge,
- dry_run,
- conflict_func ? conflict_func_1to2_wrapper
- : NULL,
- &conflict_wrapper,
- NULL, NULL,
- scratch_pool);
+ SVN_ERR(svn_wc__context_create_with_db(&wc_ctx, NULL,
+ svn_wc__adm_get_db(adm_access),
+ scratch_pool));
+
+ err = svn_wc_merge_props3(state,
+ wc_ctx,
+ local_abspath,
+ NULL /* left_version */,
+ NULL /* right_version */,
+ baseprops,
+ propchanges,
+ dry_run,
+ conflict_func ? conflict_func_1to2_wrapper
+ : NULL,
+ &conflict_wrapper,
+ NULL, NULL,
+ scratch_pool);
if (err)
switch(err->apr_err)
@@ -2462,7 +2544,9 @@ svn_wc_merge_props2(svn_wc_notify_state_t *state,
err->apr_err = SVN_ERR_UNVERSIONED_RESOURCE;
break;
}
- return svn_error_trace(err);
+ return svn_error_trace(
+ svn_error_compose_create(err,
+ svn_wc_context_destroy(wc_ctx)));
}
svn_error_t *
@@ -2585,6 +2669,47 @@ status4_wrapper_func(void *baton,
return (*swb->old_func)(swb->old_baton, path, dup, scratch_pool);
}
+
+svn_error_t *
+svn_wc_get_status_editor5(const svn_delta_editor_t **editor,
+ void **edit_baton,
+ void **set_locks_baton,
+ svn_revnum_t *edit_revision,
+ svn_wc_context_t *wc_ctx,
+ const char *anchor_abspath,
+ const char *target_basename,
+ svn_depth_t depth,
+ svn_boolean_t get_all,
+ svn_boolean_t no_ignore,
+ svn_boolean_t depth_as_sticky,
+ svn_boolean_t server_performs_filtering,
+ const apr_array_header_t *ignore_patterns,
+ svn_wc_status_func4_t status_func,
+ void *status_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ return svn_error_trace(
+ svn_wc__get_status_editor(editor, edit_baton,
+ set_locks_baton,
+ edit_revision,
+ wc_ctx,
+ anchor_abspath,
+ target_basename,
+ depth,
+ get_all, no_ignore,
+ depth_as_sticky,
+ server_performs_filtering,
+ ignore_patterns,
+ status_func, status_baton,
+ cancel_func, cancel_baton,
+ result_pool,
+ scratch_pool));
+}
+
+
svn_error_t *
svn_wc_get_status_editor4(const svn_delta_editor_t **editor,
void **edit_baton,
@@ -3016,8 +3141,7 @@ svn_wc_add_repos_file2(const char *dst_path,
/* If the new file is special, then we can simply open the given
contents since it is already in normal form. */
- if (apr_hash_get(new_props,
- SVN_PROP_SPECIAL, APR_HASH_KEY_STRING) != NULL)
+ if (svn_hash_gets(new_props, SVN_PROP_SPECIAL) != NULL)
{
SVN_ERR(svn_stream_open_readonly(&new_contents, new_text_path,
pool, pool));
@@ -3030,8 +3154,7 @@ svn_wc_add_repos_file2(const char *dst_path,
apr_hash_t *keywords = NULL;
svn_string_t *list;
- list = apr_hash_get(new_props,
- SVN_PROP_KEYWORDS, APR_HASH_KEY_STRING);
+ list = svn_hash_gets(new_props, SVN_PROP_KEYWORDS);
if (list != NULL)
{
/* Since we are detranslating, all of the keyword values
@@ -3045,9 +3168,8 @@ svn_wc_add_repos_file2(const char *dst_path,
}
svn_subst_eol_style_from_value(&eol_style, &eol_str,
- apr_hash_get(new_props,
- SVN_PROP_EOL_STYLE,
- APR_HASH_KEY_STRING));
+ svn_hash_gets(new_props,
+ SVN_PROP_EOL_STYLE));
if (svn_subst_translation_required(eol_style, eol_str, keywords,
FALSE, FALSE))
@@ -3116,6 +3238,38 @@ svn_wc_get_actual_target(const char *path,
return svn_error_trace(svn_wc_context_destroy(wc_ctx));
}
+/* This function has no internal variant as its behavior on switched
+ non-directories is not what you would expect. But this happens to
+ be the legacy behavior of this function. */
+svn_error_t *
+svn_wc_is_wc_root2(svn_boolean_t *wc_root,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *scratch_pool)
+{
+ svn_boolean_t is_root;
+ svn_boolean_t is_switched;
+ svn_node_kind_t kind;
+ svn_error_t *err;
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+
+ err = svn_wc__db_is_switched(&is_root, &is_switched, &kind,
+ wc_ctx->db, local_abspath, scratch_pool);
+
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND &&
+ err->apr_err != SVN_ERR_WC_NOT_WORKING_COPY)
+ return svn_error_trace(err);
+
+ return svn_error_create(SVN_ERR_ENTRY_NOT_FOUND, err, err->message);
+ }
+
+ *wc_root = is_root || (kind == svn_node_dir && is_switched);
+
+ return SVN_NO_ERROR;
+}
+
svn_error_t *
svn_wc_is_wc_root(svn_boolean_t *wc_root,
const char *path,
@@ -3154,6 +3308,59 @@ svn_wc_is_wc_root(svn_boolean_t *wc_root,
return svn_error_trace(svn_wc_context_destroy(wc_ctx));
}
+
+svn_error_t *
+svn_wc_get_update_editor4(const svn_delta_editor_t **editor,
+ void **edit_baton,
+ svn_revnum_t *target_revision,
+ svn_wc_context_t *wc_ctx,
+ const char *anchor_abspath,
+ const char *target_basename,
+ svn_boolean_t use_commit_times,
+ svn_depth_t depth,
+ svn_boolean_t depth_is_sticky,
+ svn_boolean_t allow_unver_obstructions,
+ svn_boolean_t adds_as_modification,
+ svn_boolean_t server_performs_filtering,
+ svn_boolean_t clean_checkout,
+ const char *diff3_cmd,
+ const apr_array_header_t *preserved_exts,
+ svn_wc_dirents_func_t fetch_dirents_func,
+ void *fetch_dirents_baton,
+ svn_wc_conflict_resolver_func2_t conflict_func,
+ void *conflict_baton,
+ svn_wc_external_update_t external_func,
+ void *external_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ return svn_error_trace(
+ svn_wc__get_update_editor(editor, edit_baton,
+ target_revision,
+ wc_ctx,
+ anchor_abspath,
+ target_basename, NULL,
+ use_commit_times,
+ depth, depth_is_sticky,
+ allow_unver_obstructions,
+ adds_as_modification,
+ server_performs_filtering,
+ clean_checkout,
+ diff3_cmd,
+ preserved_exts,
+ fetch_dirents_func, fetch_dirents_baton,
+ conflict_func, conflict_baton,
+ external_func, external_baton,
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ result_pool, scratch_pool));
+}
+
+
svn_error_t *
svn_wc_get_update_editor3(svn_revnum_t *target_revision,
svn_wc_adm_access_t *anchor,
@@ -3288,6 +3495,56 @@ svn_wc_get_update_editor(svn_revnum_t *target_revision,
traversal_info, pool);
}
+
+svn_error_t *
+svn_wc_get_switch_editor4(const svn_delta_editor_t **editor,
+ void **edit_baton,
+ svn_revnum_t *target_revision,
+ svn_wc_context_t *wc_ctx,
+ const char *anchor_abspath,
+ const char *target_basename,
+ const char *switch_url,
+ svn_boolean_t use_commit_times,
+ svn_depth_t depth,
+ svn_boolean_t depth_is_sticky,
+ svn_boolean_t allow_unver_obstructions,
+ svn_boolean_t server_performs_filtering,
+ const char *diff3_cmd,
+ const apr_array_header_t *preserved_exts,
+ svn_wc_dirents_func_t fetch_dirents_func,
+ void *fetch_dirents_baton,
+ svn_wc_conflict_resolver_func2_t conflict_func,
+ void *conflict_baton,
+ svn_wc_external_update_t external_func,
+ void *external_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ return svn_error_trace(
+ svn_wc__get_switch_editor(editor, edit_baton,
+ target_revision,
+ wc_ctx,
+ anchor_abspath, target_basename,
+ switch_url, NULL,
+ use_commit_times,
+ depth, depth_is_sticky,
+ allow_unver_obstructions,
+ server_performs_filtering,
+ diff3_cmd,
+ preserved_exts,
+ fetch_dirents_func, fetch_dirents_baton,
+ conflict_func, conflict_baton,
+ external_func, external_baton,
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ result_pool, scratch_pool));
+}
+
+
svn_error_t *
svn_wc_get_switch_editor3(svn_revnum_t *target_revision,
svn_wc_adm_access_t *anchor,
@@ -3426,6 +3683,14 @@ svn_wc_get_switch_editor(svn_revnum_t *target_revision,
}
+svn_error_t *
+svn_wc_external_item_create(const svn_wc_external_item2_t **item,
+ apr_pool_t *pool)
+{
+ *item = apr_pcalloc(pool, sizeof(svn_wc_external_item2_t));
+ return SVN_NO_ERROR;
+}
+
svn_wc_external_item_t *
svn_wc_external_item_dup(const svn_wc_external_item_t *item,
apr_pool_t *pool)
@@ -3996,6 +4261,49 @@ svn_wc_copy(const char *src_path,
/*** From merge.c ***/
svn_error_t *
+svn_wc_merge4(enum svn_wc_merge_outcome_t *merge_outcome,
+ svn_wc_context_t *wc_ctx,
+ const char *left_abspath,
+ const char *right_abspath,
+ const char *target_abspath,
+ const char *left_label,
+ const char *right_label,
+ const char *target_label,
+ const svn_wc_conflict_version_t *left_version,
+ const svn_wc_conflict_version_t *right_version,
+ svn_boolean_t dry_run,
+ const char *diff3_cmd,
+ const apr_array_header_t *merge_options,
+ const apr_array_header_t *prop_diff,
+ svn_wc_conflict_resolver_func2_t conflict_func,
+ void *conflict_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
+{
+ return svn_error_trace(
+ svn_wc_merge5(merge_outcome,
+ NULL /* merge_props_outcome */,
+ wc_ctx,
+ left_abspath,
+ right_abspath,
+ target_abspath,
+ left_label,
+ right_label,
+ target_label,
+ left_version,
+ right_version,
+ dry_run,
+ diff3_cmd,
+ merge_options,
+ NULL /* original_props */,
+ prop_diff,
+ conflict_func, conflict_baton,
+ cancel_func, cancel_baton,
+ scratch_pool));
+}
+
+svn_error_t *
svn_wc_merge3(enum svn_wc_merge_outcome_t *merge_outcome,
const char *left,
const char *right,
@@ -4095,6 +4403,17 @@ svn_wc_merge(const char *left,
/*** From util.c ***/
+svn_wc_conflict_version_t *
+svn_wc_conflict_version_create(const char *repos_url,
+ const char *path_in_repos,
+ svn_revnum_t peg_rev,
+ svn_node_kind_t node_kind,
+ apr_pool_t *pool)
+{
+ return svn_wc_conflict_version_create2(repos_url, NULL, path_in_repos,
+ peg_rev, node_kind, pool);
+}
+
svn_wc_conflict_description_t *
svn_wc_conflict_description_create_text(const char *path,
svn_wc_adm_access_t *adm_access,
@@ -4218,3 +4537,46 @@ svn_wc_crop_tree(svn_wc_adm_access_t *anchor,
return svn_error_trace(svn_wc_context_destroy(wc_ctx));
}
+
+svn_error_t *
+svn_wc_move(svn_wc_context_t *wc_ctx,
+ const char *src_abspath,
+ const char *dst_abspath,
+ svn_boolean_t metadata_only,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool)
+{
+ return svn_error_trace(svn_wc__move2(wc_ctx, src_abspath, dst_abspath,
+ metadata_only,
+ TRUE, /* allow_mixed_revisions */
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ scratch_pool));
+}
+
+svn_error_t *
+svn_wc_read_kind(svn_node_kind_t *kind,
+ svn_wc_context_t *wc_ctx,
+ const char *abspath,
+ svn_boolean_t show_hidden,
+ apr_pool_t *scratch_pool)
+{
+ return svn_error_trace(
+ svn_wc_read_kind2(kind,
+ wc_ctx, abspath,
+ TRUE /* show_deleted */,
+ show_hidden,
+ scratch_pool));
+
+ /*if (db_kind == svn_node_dir)
+ *kind = svn_node_dir;
+ else if (db_kind == svn_node_file || db_kind == svn_node_symlink)
+ *kind = svn_node_file;
+ else
+ *kind = svn_node_none;*/
+
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/libsvn_wc/diff.h b/subversion/libsvn_wc/diff.h
new file mode 100644
index 0000000..3ddada6
--- /dev/null
+++ b/subversion/libsvn_wc/diff.h
@@ -0,0 +1,165 @@
+/*
+ * lock.h: routines for diffing local files and directories.
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#ifndef SVN_LIBSVN_WC_DIFF_H
+#define SVN_LIBSVN_WC_DIFF_H
+
+#include <apr_pools.h>
+#include <apr_hash.h>
+
+#include "svn_types.h"
+#include "svn_error.h"
+#include "svn_wc.h"
+
+#include "wc_db.h"
+#include "private/svn_diff_tree.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/* A function to diff locally added and locally copied files.
+
+ Reports the file LOCAL_ABSPATH as ADDED file with relpath RELPATH to
+ PROCESSOR with as parent baton PROCESSOR_PARENT_BATON.
+
+ The node is expected to have status svn_wc__db_status_normal, or
+ svn_wc__db_status_added. When DIFF_PRISTINE is TRUE, report the pristine
+ version of LOCAL_ABSPATH as ADDED. In this case an
+ svn_wc__db_status_deleted may shadow an added or deleted node.
+ */
+svn_error_t *
+svn_wc__diff_local_only_file(svn_wc__db_t *db,
+ const char *local_abspath,
+ const char *relpath,
+ const svn_diff_tree_processor_t *processor,
+ void *processor_parent_baton,
+ svn_boolean_t diff_pristine,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool);
+
+/* A function to diff locally added and locally copied directories.
+
+ Reports the directory LOCAL_ABSPATH and everything below it (limited by
+ DEPTH) as added with relpath RELPATH to PROCESSOR with as parent baton
+ PROCESSOR_PARENT_BATON.
+
+ The node is expected to have status svn_wc__db_status_normal, or
+ svn_wc__db_status_added. When DIFF_PRISTINE is TRUE, report the pristine
+ version of LOCAL_ABSPATH as ADDED. In this case an
+ svn_wc__db_status_deleted may shadow an added or deleted node.
+ */
+svn_error_t *
+svn_wc__diff_local_only_dir(svn_wc__db_t *db,
+ const char *local_abspath,
+ const char *relpath,
+ svn_depth_t depth,
+ const svn_diff_tree_processor_t *processor,
+ void *processor_parent_baton,
+ svn_boolean_t diff_pristine,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool);
+
+/* Reports the BASE-file LOCAL_ABSPATH as deleted to PROCESSOR with relpath
+ RELPATH, revision REVISION and parent baton PROCESSOR_PARENT_BATON.
+
+ If REVISION is invalid, the revision as stored in BASE is used.
+
+ The node is expected to have status svn_wc__db_status_normal in BASE. */
+svn_error_t *
+svn_wc__diff_base_only_file(svn_wc__db_t *db,
+ const char *local_abspath,
+ const char *relpath,
+ svn_revnum_t revision,
+ const svn_diff_tree_processor_t *processor,
+ void *processor_parent_baton,
+ apr_pool_t *scratch_pool);
+
+/* Reports the BASE-directory LOCAL_ABSPATH and everything below it (limited
+ by DEPTH) as deleted to PROCESSOR with relpath RELPATH and parent baton
+ PROCESSOR_PARENT_BATON.
+
+ If REVISION is invalid, the revision as stored in BASE is used.
+
+ The node is expected to have status svn_wc__db_status_normal in BASE. */
+svn_error_t *
+svn_wc__diff_base_only_dir(svn_wc__db_t *db,
+ const char *local_abspath,
+ const char *relpath,
+ svn_revnum_t revision,
+ svn_depth_t depth,
+ const svn_diff_tree_processor_t *processor,
+ void *processor_parent_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool);
+
+/* Diff the file PATH against the text base of its BASE layer. At this
+ * stage we are dealing with a file that does exist in the working copy.
+ */
+svn_error_t *
+svn_wc__diff_base_working_diff(svn_wc__db_t *db,
+ const char *local_abspath,
+ const char *relpath,
+ svn_revnum_t revision,
+ const svn_diff_tree_processor_t *processor,
+ void *processor_dir_baton,
+ svn_boolean_t diff_pristine,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool);
+
+/* Return a tree processor filter that filters by changelist membership.
+ *
+ * This filter only passes on the changes for a file if the file's path
+ * (in the WC) is assigned to one of the changelists in @a changelist_hash.
+ * It also passes on the opening and closing of each directory that contains
+ * such a change, and possibly also of other directories, but not addition
+ * or deletion or changes to a directory.
+ *
+ * If @a changelist_hash is null then no filtering is performed and the
+ * returned diff processor is driven exactly like the input @a processor.
+ *
+ * @a wc_ctx is the WC context and @a root_local_abspath is the WC path of
+ * the root of the diff (for which relpath = "" in the diff processor).
+ *
+ * Allocate the returned diff processor in @a result_pool, or if no
+ * filtering is required then the input pointer @a processor itself may be
+ * returned.
+ */
+const svn_diff_tree_processor_t *
+svn_wc__changelist_filter_tree_processor_create(
+ const svn_diff_tree_processor_t *processor,
+ svn_wc_context_t *wc_ctx,
+ const char *root_local_abspath,
+ apr_hash_t *changelist_hash,
+ apr_pool_t *result_pool);
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* SVN_LIBSVN_WC_DIFF_H */
diff --git a/subversion/libsvn_wc/diff_editor.c b/subversion/libsvn_wc/diff_editor.c
index 7b4bc5a..c9078ed 100644
--- a/subversion/libsvn_wc/diff_editor.c
+++ b/subversion/libsvn_wc/diff_editor.c
@@ -55,159 +55,48 @@
#include <apr_hash.h>
#include <apr_md5.h>
+#include <assert.h>
+
#include "svn_error.h"
#include "svn_pools.h"
#include "svn_dirent_uri.h"
#include "svn_path.h"
#include "svn_hash.h"
+#include "svn_sorts.h"
+#include "private/svn_subr_private.h"
#include "private/svn_wc_private.h"
+#include "private/svn_diff_tree.h"
+#include "private/svn_editor.h"
#include "wc.h"
#include "props.h"
#include "adm_files.h"
#include "translate.h"
+#include "diff.h"
#include "svn_private_config.h"
-
-/*-------------------------------------------------------------------------*/
-/* A little helper function.
-
- You see, when we ask the server to update us to a certain revision,
- we construct the new fulltext, and then run
-
- 'diff <repos_fulltext> <working_fulltext>'
-
- which is, of course, actually backwards from the repository's point
- of view. It thinks we want to move from working->repos.
-
- So when the server sends property changes, they're effectively
- backwards from what we want. We don't want working->repos, but
- repos->working. So this little helper "reverses" the value in
- BASEPROPS and PROPCHANGES before we pass them off to the
- prop_changed() diff-callback. */
-static void
-reverse_propchanges(apr_hash_t *baseprops,
- apr_array_header_t *propchanges,
- apr_pool_t *pool)
-{
- int i;
-
- /* ### todo: research lifetimes for property values below */
-
- for (i = 0; i < propchanges->nelts; i++)
- {
- svn_prop_t *propchange
- = &APR_ARRAY_IDX(propchanges, i, svn_prop_t);
-
- const svn_string_t *original_value =
- apr_hash_get(baseprops, propchange->name, APR_HASH_KEY_STRING);
-
- if ((original_value == NULL) && (propchange->value != NULL))
- {
- /* found an addition. make it look like a deletion. */
- apr_hash_set(baseprops, propchange->name, APR_HASH_KEY_STRING,
- svn_string_dup(propchange->value, pool));
- propchange->value = NULL;
- }
-
- else if ((original_value != NULL) && (propchange->value == NULL))
- {
- /* found a deletion. make it look like an addition. */
- propchange->value = svn_string_dup(original_value, pool);
- apr_hash_set(baseprops, propchange->name, APR_HASH_KEY_STRING,
- NULL);
- }
-
- else if ((original_value != NULL) && (propchange->value != NULL))
- {
- /* found a change. just swap the values. */
- const svn_string_t *str = svn_string_dup(propchange->value, pool);
- propchange->value = svn_string_dup(original_value, pool);
- apr_hash_set(baseprops, propchange->name, APR_HASH_KEY_STRING, str);
- }
- }
-}
-
-
-/* Set *RESULT_ABSPATH to the absolute path to a readable file containing
- the pristine text of LOCAL_ABSPATH in DB, or to NULL if it does not have
- any pristine text.
-
- If USE_BASE is FALSE it gets the pristine text of what is currently in the
- working copy. (So it returns the pristine file of a copy).
-
- If USE_BASE is TRUE, it looks in the lowest layer of the working copy and
- shows exactly what was originally checked out (or updated to).
-
- Rationale:
-
- Which text-base do we want to use for the diff? If the node is replaced
- by a new file, then the base of the replaced file is called (in WC-1) the
- "revert base". If the replacement is a copy or move, then there is also
- the base of the copied file to consider.
-
- One could argue that we should never diff against the revert
- base, and instead diff against the empty-file for both types of
- replacement. After all, there is no ancestry relationship
- between the working file and the base file. But my guess is that
- in practice, users want to see the diff between their working
- file and "the nearest versioned thing", whatever that is. I'm
- not 100% sure this is the right decision, but it at least seems
- to match our test suite's expectations. */
-static svn_error_t *
-get_pristine_file(const char **result_abspath,
- svn_wc__db_t *db,
- const char *local_abspath,
- svn_boolean_t use_base,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- const svn_checksum_t *checksum;
-
- if (!use_base)
- {
- SVN_ERR(svn_wc__db_read_pristine_info(NULL, NULL, NULL, NULL, NULL, NULL,
- &checksum, NULL, NULL,
- db, local_abspath,
- scratch_pool, scratch_pool));
- }
- else
- {
- SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, &checksum,
- NULL, NULL, NULL, NULL,
- db, local_abspath,
- scratch_pool, scratch_pool));
- }
-
- if (checksum != NULL)
- {
- SVN_ERR(svn_wc__db_pristine_get_path(result_abspath, db, local_abspath,
- checksum,
- result_pool, scratch_pool));
- return SVN_NO_ERROR;
- }
-
- *result_abspath = NULL;
- return SVN_NO_ERROR;
-}
-
-
/*-------------------------------------------------------------------------*/
/* Overall crawler editor baton.
*/
-struct edit_baton {
+struct edit_baton_t
+{
/* A wc db. */
svn_wc__db_t *db;
+ /* A diff tree processor, receiving the result of the diff. */
+ const svn_diff_tree_processor_t *processor;
+
+ /* A boolean indicating whether local additions should be reported before
+ remote deletes. The processor can transform adds in deletes and deletes
+ in adds, but it can't reorder the output. */
+ svn_boolean_t local_before_remote;
+
/* ANCHOR/TARGET represent the base of the hierarchy to be compared. */
const char *target;
-
- /* The absolute path of the anchor directory */
const char *anchor_abspath;
/* Target revision */
@@ -216,34 +105,14 @@ struct edit_baton {
/* Was the root opened? */
svn_boolean_t root_opened;
- /* The callbacks and callback argument that implement the file comparison
- functions */
- const svn_wc_diff_callbacks4_t *callbacks;
- void *callback_baton;
-
- /* How does this diff descend? */
+ /* How does this diff descend as seen from target? */
svn_depth_t depth;
/* Should this diff ignore node ancestry? */
svn_boolean_t ignore_ancestry;
- /* Should this diff not compare copied files with their source? */
- svn_boolean_t show_copies_as_adds;
-
- /* Are we producing a git-style diff? */
- svn_boolean_t use_git_diff_format;
-
/* Possibly diff repos against text-bases instead of working files. */
- svn_boolean_t use_text_base;
-
- /* Possibly show the diffs backwards. */
- svn_boolean_t reverse_order;
-
- /* Empty file used to diff adds / deletes */
- const char *empty_file;
-
- /* Hash whose keys are const char * changelist names. */
- apr_hash_t *changelist_hash;
+ svn_boolean_t diff_pristine;
/* Cancel function/baton */
svn_cancel_func_t cancel_func;
@@ -254,9 +123,10 @@ struct edit_baton {
/* Directory level baton.
*/
-struct dir_baton {
- /* Gets set if the directory is added rather than replaced/unchanged. */
- svn_boolean_t added;
+struct dir_baton_t
+{
+ /* Reference to parent directory baton (or NULL for the root) */
+ struct dir_baton_t *parent_baton;
/* The depth at which this directory should be diffed. */
svn_depth_t depth;
@@ -264,63 +134,95 @@ struct dir_baton {
/* The name and path of this directory as if they would be/are in the
local working copy. */
const char *name;
+ const char *relpath;
const char *local_abspath;
- /* The "correct" path of the directory, but it may not exist in the
- working copy. */
- const char *path;
+ /* TRUE if the file is added by the editor drive. */
+ svn_boolean_t added;
+ /* TRUE if the node exists only on the repository side (op_depth 0 or added) */
+ svn_boolean_t repos_only;
+ /* TRUE if the node is to be compared with an unrelated node*/
+ svn_boolean_t ignoring_ancestry;
+
+ /* Processor state */
+ void *pdb;
+ svn_boolean_t skip;
+ svn_boolean_t skip_children;
+
+ svn_diff_source_t *left_src;
+ svn_diff_source_t *right_src;
+
+ apr_hash_t *local_info;
+
+ /* A hash containing the basenames of the nodes reported deleted by the
+ repository (or NULL for no values). */
+ apr_hash_t *deletes;
/* Identifies those directory elements that get compared while running
the crawler. These elements should not be compared again when
recursively looking for local modifications.
- This hash maps the full path of the entry to an unimportant value
- (presence in the hash is the important factor here, not the value
- itself).
+ This hash maps the basename of the node to an unimportant value.
If the directory's properties have been compared, an item with hash
- key of path will be present in the hash. */
+ key of "" will be present in the hash. */
apr_hash_t *compared;
/* The list of incoming BASE->repos propchanges. */
apr_array_header_t *propchanges;
+ /* Has a change on regular properties */
+ svn_boolean_t has_propchange;
+
/* The overall crawler editor baton. */
- struct edit_baton *eb;
+ struct edit_baton_t *eb;
apr_pool_t *pool;
+ int users;
};
/* File level baton.
*/
-struct file_baton {
- /* Gets set if the file is added rather than replaced. */
- svn_boolean_t added;
+struct file_baton_t
+{
+ struct dir_baton_t *parent_baton;
/* The name and path of this file as if they would be/are in the
- local working copy. */
+ parent directory, diff session and local working copy. */
const char *name;
+ const char *relpath;
const char *local_abspath;
- /* PATH is the "correct" path of the file, but it may not exist in the
- working copy */
- const char *path;
+ /* Processor state */
+ void *pfb;
+ svn_boolean_t skip;
- /* When constructing the requested repository version of the file, we
- drop the result into a file at TEMP_FILE_PATH. */
- const char *temp_file_path;
+ /* TRUE if the file is added by the editor drive. */
+ svn_boolean_t added;
+ /* TRUE if the node exists only on the repository side (op_depth 0 or added) */
+ svn_boolean_t repos_only;
+ /* TRUE if the node is to be compared with an unrelated node*/
+ svn_boolean_t ignoring_ancestry;
+
+ const svn_diff_source_t *left_src;
+ const svn_diff_source_t *right_src;
/* The list of incoming BASE->repos propchanges. */
apr_array_header_t *propchanges;
- /* The current checksum on disk */
+ /* Has a change on regular properties */
+ svn_boolean_t has_propchange;
+
+ /* The current BASE checksum and props */
const svn_checksum_t *base_checksum;
+ apr_hash_t *base_props;
- /* The resulting checksum from apply_textdelta */
- svn_checksum_t *result_checksum;
+ /* The resulting from apply_textdelta */
+ const char *temp_file_path;
+ unsigned char result_digest[APR_MD5_DIGESTSIZE];
/* The overall crawler editor baton. */
- struct edit_baton *eb;
+ struct edit_baton_t *eb;
apr_pool_t *pool;
};
@@ -333,52 +235,46 @@ struct file_baton {
* calculating diffs. USE_TEXT_BASE defines whether to compare
* against working files or text-bases. REVERSE_ORDER defines which
* direction to perform the diff.
- *
- * CHANGELIST_FILTER is a list of const char * changelist names, used to
- * filter diff output responses to only those items in one of the
- * specified changelists, empty (or NULL altogether) if no changelist
- * filtering is requested.
*/
static svn_error_t *
-make_edit_baton(struct edit_baton **edit_baton,
+make_edit_baton(struct edit_baton_t **edit_baton,
svn_wc__db_t *db,
const char *anchor_abspath,
const char *target,
- const svn_wc_diff_callbacks4_t *callbacks,
- void *callback_baton,
+ const svn_diff_tree_processor_t *processor,
svn_depth_t depth,
svn_boolean_t ignore_ancestry,
svn_boolean_t show_copies_as_adds,
- svn_boolean_t use_git_diff_format,
svn_boolean_t use_text_base,
svn_boolean_t reverse_order,
- const apr_array_header_t *changelist_filter,
svn_cancel_func_t cancel_func,
void *cancel_baton,
apr_pool_t *pool)
{
- apr_hash_t *changelist_hash = NULL;
- struct edit_baton *eb;
+ struct edit_baton_t *eb;
SVN_ERR_ASSERT(svn_dirent_is_absolute(anchor_abspath));
- if (changelist_filter && changelist_filter->nelts)
- SVN_ERR(svn_hash_from_cstring_keys(&changelist_hash, changelist_filter,
- pool));
+ if (reverse_order)
+ processor = svn_diff__tree_processor_reverse_create(processor, NULL, pool);
+
+ /* --show-copies-as-adds implies --notice-ancestry */
+ if (show_copies_as_adds)
+ ignore_ancestry = FALSE;
+
+ if (! show_copies_as_adds)
+ processor = svn_diff__tree_processor_copy_as_changed_create(processor,
+ pool);
eb = apr_pcalloc(pool, sizeof(*eb));
eb->db = db;
eb->anchor_abspath = apr_pstrdup(pool, anchor_abspath);
eb->target = apr_pstrdup(pool, target);
- eb->callbacks = callbacks;
- eb->callback_baton = callback_baton;
+ eb->processor = processor;
eb->depth = depth;
eb->ignore_ancestry = ignore_ancestry;
- eb->show_copies_as_adds = show_copies_as_adds;
- eb->use_git_diff_format = use_git_diff_format;
- eb->use_text_base = use_text_base;
- eb->reverse_order = reverse_order;
- eb->changelist_hash = changelist_hash;
+ eb->local_before_remote = reverse_order;
+ eb->diff_pristine = use_text_base;
eb->cancel_func = cancel_func;
eb->cancel_baton = cancel_baton;
eb->pool = pool;
@@ -395,32 +291,38 @@ make_edit_baton(struct edit_baton **edit_baton,
* exist in the working copy. EDIT_BATON is the overall crawler
* editor baton.
*/
-static struct dir_baton *
+static struct dir_baton_t *
make_dir_baton(const char *path,
- struct dir_baton *parent_baton,
- struct edit_baton *eb,
+ struct dir_baton_t *parent_baton,
+ struct edit_baton_t *eb,
svn_boolean_t added,
svn_depth_t depth,
apr_pool_t *result_pool)
{
- apr_pool_t *dir_pool = svn_pool_create(result_pool);
- struct dir_baton *db = apr_pcalloc(dir_pool, sizeof(*db));
+ apr_pool_t *dir_pool = svn_pool_create(parent_baton ? parent_baton->pool
+ : eb->pool);
+ struct dir_baton_t *db = apr_pcalloc(dir_pool, sizeof(*db));
+
+ db->parent_baton = parent_baton;
+
+ /* Allocate 1 string for using as 3 strings */
+ db->local_abspath = svn_dirent_join(eb->anchor_abspath, path, dir_pool);
+ db->relpath = svn_dirent_skip_ancestor(eb->anchor_abspath, db->local_abspath);
+ db->name = svn_dirent_basename(db->relpath, NULL);
db->eb = eb;
db->added = added;
db->depth = depth;
db->pool = dir_pool;
- db->propchanges = apr_array_make(dir_pool, 1, sizeof(svn_prop_t));
+ db->propchanges = apr_array_make(dir_pool, 8, sizeof(svn_prop_t));
db->compared = apr_hash_make(dir_pool);
- db->path = apr_pstrdup(dir_pool, path);
-
- db->name = svn_dirent_basename(db->path, NULL);
if (parent_baton != NULL)
- db->local_abspath = svn_dirent_join(parent_baton->local_abspath, db->name,
- dir_pool);
- else
- db->local_abspath = apr_pstrdup(dir_pool, eb->anchor_abspath);
+ {
+ parent_baton->users++;
+ }
+
+ db->users = 1;
return db;
}
@@ -430,336 +332,241 @@ make_dir_baton(const char *path,
* replaced. PARENT_BATON is the baton of the parent directory.
* The directory and its parent may or may not exist in the working copy.
*/
-static struct file_baton *
+static struct file_baton_t *
make_file_baton(const char *path,
svn_boolean_t added,
- struct dir_baton *parent_baton,
+ struct dir_baton_t *parent_baton,
apr_pool_t *result_pool)
{
apr_pool_t *file_pool = svn_pool_create(result_pool);
- struct file_baton *fb = apr_pcalloc(file_pool, sizeof(*fb));
- struct edit_baton *eb = parent_baton->eb;
+ struct file_baton_t *fb = apr_pcalloc(file_pool, sizeof(*fb));
+ struct edit_baton_t *eb = parent_baton->eb;
fb->eb = eb;
+ fb->parent_baton = parent_baton;
+ fb->parent_baton->users++;
+
+ /* Allocate 1 string for using as 3 strings */
+ fb->local_abspath = svn_dirent_join(eb->anchor_abspath, path, file_pool);
+ fb->relpath = svn_dirent_skip_ancestor(eb->anchor_abspath, fb->local_abspath);
+ fb->name = svn_dirent_basename(fb->relpath, NULL);
+
fb->added = added;
fb->pool = file_pool;
- fb->propchanges = apr_array_make(file_pool, 1, sizeof(svn_prop_t));
- fb->path = apr_pstrdup(file_pool, path);
-
- fb->name = svn_dirent_basename(fb->path, NULL);
- fb->local_abspath = svn_dirent_join(parent_baton->local_abspath, fb->name,
- file_pool);
+ fb->propchanges = apr_array_make(file_pool, 8, sizeof(svn_prop_t));
return fb;
}
-/* Get the empty file associated with the edit baton. This is cached so
- * that it can be reused, all empty files are the same.
- */
+/* Destroy DB when there are no more registered users */
static svn_error_t *
-get_empty_file(struct edit_baton *b,
- const char **empty_file)
+maybe_done(struct dir_baton_t *db)
{
- /* Create the file if it does not exist */
- /* Note that we tried to use /dev/null in r857294, but
- that won't work on Windows: it's impossible to stat NUL */
- if (!b->empty_file)
- {
- SVN_ERR(svn_io_open_unique_file3(NULL, &b->empty_file, NULL,
- svn_io_file_del_on_pool_cleanup,
- b->pool, b->pool));
- }
-
- *empty_file = b->empty_file;
-
- return SVN_NO_ERROR;
-}
-
-
-/* Return the value of the svn:mime-type property held in PROPS, or NULL
- if no such property exists. */
-static const char *
-get_prop_mimetype(apr_hash_t *props)
-{
- return svn_prop_get_value(props, SVN_PROP_MIME_TYPE);
-}
+ db->users--;
+ if (!db->users)
+ {
+ struct dir_baton_t *pb = db->parent_baton;
-/* Return the property hash resulting from combining PROPS and PROPCHANGES.
- *
- * A note on pool usage: The returned hash and hash keys are allocated in
- * the same pool as PROPS, but the hash values will be taken directly from
- * either PROPS or PROPCHANGES, as appropriate. Caller must therefore
- * ensure that the returned hash is only used for as long as PROPS and
- * PROPCHANGES remain valid.
- */
-static apr_hash_t *
-apply_propchanges(apr_hash_t *props,
- const apr_array_header_t *propchanges)
-{
- apr_hash_t *newprops = apr_hash_copy(apr_hash_pool_get(props), props);
- int i;
+ svn_pool_clear(db->pool);
- for (i = 0; i < propchanges->nelts; ++i)
- {
- const svn_prop_t *prop = &APR_ARRAY_IDX(propchanges, i, svn_prop_t);
- apr_hash_set(newprops, prop->name, APR_HASH_KEY_STRING, prop->value);
+ if (pb != NULL)
+ SVN_ERR(maybe_done(pb));
}
- return newprops;
+ return SVN_NO_ERROR;
}
+/* Standard check to see if a node is represented in the local working copy */
+#define NOT_PRESENT(status) \
+ ((status) == svn_wc__db_status_not_present \
+ || (status) == svn_wc__db_status_excluded \
+ || (status) == svn_wc__db_status_server_excluded)
-/* Diff the file PATH against its text base. At this
- * stage we are dealing with a file that does exist in the working copy.
- *
- * DIR_BATON is the parent directory baton, PATH is the path to the file to
- * be compared.
- *
- * Do all allocation in POOL.
- *
- * ### TODO: Need to work on replace if the new filename used to be a
- * directory.
- */
-static svn_error_t *
-file_diff(struct edit_baton *eb,
- const char *local_abspath,
- const char *path,
- apr_pool_t *scratch_pool)
+svn_error_t *
+svn_wc__diff_base_working_diff(svn_wc__db_t *db,
+ const char *local_abspath,
+ const char *relpath,
+ svn_revnum_t revision,
+ const svn_diff_tree_processor_t *processor,
+ void *processor_dir_baton,
+ svn_boolean_t diff_pristine,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
{
- svn_wc__db_t *db = eb->db;
- const char *textbase;
- const char *empty_file;
- svn_boolean_t replaced;
+ void *file_baton = NULL;
+ svn_boolean_t skip = FALSE;
svn_wc__db_status_t status;
- const char *original_repos_relpath;
- svn_revnum_t revision;
- svn_revnum_t revert_base_revnum;
- svn_boolean_t have_base;
+ svn_revnum_t db_revision;
+ svn_boolean_t had_props;
+ svn_boolean_t props_mod;
+ svn_boolean_t files_same = FALSE;
svn_wc__db_status_t base_status;
- svn_boolean_t use_base = FALSE;
-
- SVN_ERR_ASSERT(! eb->use_text_base);
-
- /* If the item is not a member of a specified changelist (and there are
- some specified changelists), skip it. */
- if (! svn_wc__internal_changelist_match(db, local_abspath,
- eb->changelist_hash, scratch_pool))
- return SVN_NO_ERROR;
-
- SVN_ERR(svn_wc__db_read_info(&status, NULL, &revision, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL,
- &have_base, NULL, NULL,
+ const svn_checksum_t *working_checksum;
+ const svn_checksum_t *checksum;
+ svn_filesize_t recorded_size;
+ apr_time_t recorded_time;
+ const char *pristine_file;
+ const char *local_file;
+ svn_diff_source_t *left_src;
+ svn_diff_source_t *right_src;
+ apr_hash_t *base_props;
+ apr_hash_t *local_props;
+ apr_array_header_t *prop_changes;
+
+ SVN_ERR(svn_wc__db_read_info(&status, NULL, &db_revision, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, &working_checksum, NULL,
+ NULL, NULL, NULL, NULL, NULL, &recorded_size,
+ &recorded_time, NULL, NULL, NULL,
+ &had_props, &props_mod, NULL, NULL, NULL,
db, local_abspath, scratch_pool, scratch_pool));
- if (have_base)
- SVN_ERR(svn_wc__db_base_get_info(&base_status, NULL, &revert_base_revnum,
- NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- db, local_abspath,
- scratch_pool, scratch_pool));
+ checksum = working_checksum;
- replaced = ((status == svn_wc__db_status_added)
- && have_base
- && base_status != svn_wc__db_status_not_present);
+ assert(status == svn_wc__db_status_normal
+ || status == svn_wc__db_status_added
+ || (status == svn_wc__db_status_deleted && diff_pristine));
- /* Now refine ADDED to one of: ADDED, COPIED, MOVED_HERE. Note that only
- the latter two have corresponding pristine info to diff against. */
- if (status == svn_wc__db_status_added)
- SVN_ERR(svn_wc__db_scan_addition(&status, NULL, NULL, NULL, NULL,
- &original_repos_relpath, NULL, NULL,
- NULL, db, local_abspath,
- scratch_pool, scratch_pool));
-
- /* A wc-wc diff of replaced files actually shows a diff against the
- * revert-base, showing all previous lines as removed and adding all new
- * lines. This does not happen for copied/moved-here files, not even with
- * show_copies_as_adds == TRUE (in which case copy/move is really shown as
- * an add, diffing against the empty file).
- * So show the revert-base revision for plain replaces. */
- if (replaced
- && ! (status == svn_wc__db_status_copied
- || status == svn_wc__db_status_moved_here))
+ if (status != svn_wc__db_status_normal)
{
- use_base = TRUE;
- revision = revert_base_revnum;
+ SVN_ERR(svn_wc__db_base_get_info(&base_status, NULL, &db_revision,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, &checksum, NULL, NULL, &had_props,
+ NULL, NULL,
+ db, local_abspath,
+ scratch_pool, scratch_pool));
+ recorded_size = SVN_INVALID_FILESIZE;
+ recorded_time = 0;
+ props_mod = TRUE; /* Requires compare */
+ }
+ else if (diff_pristine)
+ files_same = TRUE;
+ else
+ {
+ const svn_io_dirent2_t *dirent;
+
+ /* Verify truename to mimic status for iota/IOTA difference on Windows */
+ SVN_ERR(svn_io_stat_dirent2(&dirent, local_abspath,
+ TRUE /* verify truename */,
+ TRUE /* ingore_enoent */,
+ scratch_pool, scratch_pool));
+
+ /* If a file does not exist on disk (missing/obstructed) then we
+ can't provide a text diff */
+ if (dirent->kind != svn_node_file
+ || (dirent->kind == svn_node_file
+ && dirent->filesize == recorded_size
+ && dirent->mtime == recorded_time))
+ {
+ files_same = TRUE;
+ }
}
- /* Set TEXTBASE to the path to the text-base file that we want to diff
- against.
-
- ### There shouldn't be cases where the result is NULL, but at present
- there might be - see get_nearest_pristine_text_as_file(). */
- SVN_ERR(get_pristine_file(&textbase, db, local_abspath,
- use_base, scratch_pool, scratch_pool));
+ if (files_same && !props_mod)
+ return SVN_NO_ERROR; /* Cheap exit */
- SVN_ERR(get_empty_file(eb, &empty_file));
+ assert(checksum);
- /* Delete compares text-base against empty file, modifications to the
- * working-copy version of the deleted file are not wanted.
- * Replace is treated like a delete plus an add: two comparisons are
- * generated, first one for the delete and then one for the add.
- * However, if this file was replaced and we are ignoring ancestry,
- * report it as a normal file modification instead. */
- if ((! replaced && status == svn_wc__db_status_deleted) ||
- (replaced && ! eb->ignore_ancestry))
- {
- const char *base_mimetype;
- apr_hash_t *baseprops;
+ if (!SVN_IS_VALID_REVNUM(revision))
+ revision = db_revision;
- /* Get svn:mime-type from pristine props (in BASE or WORKING) of PATH. */
- SVN_ERR(svn_wc__get_pristine_props(&baseprops, db, local_abspath,
- scratch_pool, scratch_pool));
- if (baseprops)
- base_mimetype = get_prop_mimetype(baseprops);
- else
- base_mimetype = NULL;
-
- SVN_ERR(eb->callbacks->file_deleted(NULL, NULL, path,
- textbase,
- empty_file,
- base_mimetype,
- NULL,
- baseprops,
- eb->callback_baton,
- scratch_pool));
+ left_src = svn_diff__source_create(revision, scratch_pool);
+ right_src = svn_diff__source_create(SVN_INVALID_REVNUM, scratch_pool);
- if (! (replaced && ! eb->ignore_ancestry))
- {
- /* We're here only for showing a delete, so we're done. */
- return SVN_NO_ERROR;
- }
- }
+ SVN_ERR(processor->file_opened(&file_baton, &skip, relpath,
+ left_src,
+ right_src,
+ NULL /* copyfrom_src */,
+ processor_dir_baton,
+ processor,
+ scratch_pool, scratch_pool));
- /* Now deal with showing additions, or the add-half of replacements.
- * If the item is schedule-add *with history*, then we usually want
- * to see the usual working vs. text-base comparison, which will show changes
- * made since the file was copied. But in case we're showing copies as adds,
- * we need to compare the copied file to the empty file. If we're doing a git
- * diff, and the file was copied, we need to report the file as added and
- * diff it against the text base, so that a "copied" git diff header, and
- * possibly a diff against the copy source, will be generated for it. */
- if ((! replaced && status == svn_wc__db_status_added) ||
- (replaced && ! eb->ignore_ancestry) ||
- ((status == svn_wc__db_status_copied ||
- status == svn_wc__db_status_moved_here) &&
- (eb->show_copies_as_adds || eb->use_git_diff_format)))
- {
- const char *translated = NULL;
- const char *working_mimetype;
- apr_hash_t *baseprops;
- apr_hash_t *workingprops;
- apr_array_header_t *propchanges;
+ if (skip)
+ return SVN_NO_ERROR;
- /* Get svn:mime-type from ACTUAL props of PATH. */
- SVN_ERR(svn_wc__get_actual_props(&workingprops, db, local_abspath,
+ SVN_ERR(svn_wc__db_pristine_get_path(&pristine_file,
+ db, local_abspath, checksum,
scratch_pool, scratch_pool));
- working_mimetype = get_prop_mimetype(workingprops);
-
- /* Set the original properties to empty, then compute "changes" from
- that. Essentially, all ACTUAL props will be "added". */
- baseprops = apr_hash_make(scratch_pool);
- SVN_ERR(svn_prop_diffs(&propchanges, workingprops, baseprops,
- scratch_pool));
- SVN_ERR(svn_wc__internal_translated_file(
- &translated, local_abspath, db, local_abspath,
- SVN_WC_TRANSLATE_TO_NF | SVN_WC_TRANSLATE_USE_GLOBAL_TMP,
- eb->cancel_func, eb->cancel_baton,
- scratch_pool, scratch_pool));
-
- SVN_ERR(eb->callbacks->file_added(NULL, NULL, NULL, path,
- (! eb->show_copies_as_adds &&
- eb->use_git_diff_format &&
- status != svn_wc__db_status_added) ?
- textbase : empty_file,
- translated,
- 0, revision,
- NULL,
- working_mimetype,
- original_repos_relpath,
- SVN_INVALID_REVNUM, propchanges,
- baseprops, eb->callback_baton,
- scratch_pool));
- }
+ if (diff_pristine)
+ SVN_ERR(svn_wc__db_pristine_get_path(&local_file,
+ db, local_abspath,
+ working_checksum,
+ scratch_pool, scratch_pool));
+ else if (! (had_props || props_mod))
+ local_file = local_abspath;
+ else if (files_same)
+ local_file = pristine_file;
else
- {
- const char *translated = NULL;
- apr_hash_t *baseprops;
- const char *base_mimetype;
- const char *working_mimetype;
- apr_hash_t *workingprops;
- apr_array_header_t *propchanges;
- svn_boolean_t modified;
+ SVN_ERR(svn_wc__internal_translated_file(
+ &local_file, local_abspath,
+ db, local_abspath,
+ SVN_WC_TRANSLATE_TO_NF
+ | SVN_WC_TRANSLATE_USE_GLOBAL_TMP,
+ cancel_func, cancel_baton,
+ scratch_pool, scratch_pool));
+
+ if (! files_same)
+ SVN_ERR(svn_io_files_contents_same_p(&files_same, local_file,
+ pristine_file, scratch_pool));
+
+ if (had_props)
+ SVN_ERR(svn_wc__db_base_get_props(&base_props, db, local_abspath,
+ scratch_pool, scratch_pool));
+ else
+ base_props = apr_hash_make(scratch_pool);
- /* Here we deal with showing pure modifications. */
- SVN_ERR(svn_wc__internal_file_modified_p(&modified, db, local_abspath,
- FALSE, scratch_pool));
- if (modified)
- {
- /* Note that this might be the _second_ time we translate
- the file, as svn_wc__text_modified_internal_p() might have used a
- tmp translated copy too. But what the heck, diff is
- already expensive, translating twice for the sake of code
- modularity is liveable. */
- SVN_ERR(svn_wc__internal_translated_file(
- &translated, local_abspath, db, local_abspath,
- SVN_WC_TRANSLATE_TO_NF | SVN_WC_TRANSLATE_USE_GLOBAL_TMP,
- eb->cancel_func, eb->cancel_baton,
- scratch_pool, scratch_pool));
- }
+ if (status == svn_wc__db_status_normal && (diff_pristine || !props_mod))
+ local_props = base_props;
+ else if (diff_pristine)
+ SVN_ERR(svn_wc__db_read_pristine_props(&local_props, db, local_abspath,
+ scratch_pool, scratch_pool));
+ else
+ SVN_ERR(svn_wc__db_read_props(&local_props, db, local_abspath,
+ scratch_pool, scratch_pool));
- /* Get the properties, the svn:mime-type values, and compute the
- differences between the two. */
- if (replaced
- && eb->ignore_ancestry)
- {
- /* We don't want the normal pristine properties (which are
- from the WORKING tree). We want the pristines associated
- with the BASE tree, which are saved as "revert" props. */
- SVN_ERR(svn_wc__db_base_get_props(&baseprops,
- db, local_abspath,
- scratch_pool, scratch_pool));
- }
- else
- {
- /* We can only fetch the pristine props (from BASE or WORKING) if
- the node has not been replaced, or it was copied/moved here. */
- SVN_ERR_ASSERT(!replaced
- || status == svn_wc__db_status_copied
- || status == svn_wc__db_status_moved_here);
+ SVN_ERR(svn_prop_diffs(&prop_changes, local_props, base_props, scratch_pool));
- SVN_ERR(svn_wc__get_pristine_props(&baseprops, db, local_abspath,
- scratch_pool, scratch_pool));
+ if (prop_changes->nelts || !files_same)
+ {
+ SVN_ERR(processor->file_changed(relpath,
+ left_src,
+ right_src,
+ pristine_file,
+ local_file,
+ base_props,
+ local_props,
+ ! files_same,
+ prop_changes,
+ file_baton,
+ processor,
+ scratch_pool));
+ }
+ else
+ {
+ SVN_ERR(processor->file_closed(relpath,
+ left_src,
+ right_src,
+ file_baton,
+ processor,
+ scratch_pool));
+ }
- /* baseprops will be NULL for added nodes */
- if (!baseprops)
- baseprops = apr_hash_make(scratch_pool);
- }
- base_mimetype = get_prop_mimetype(baseprops);
+ return SVN_NO_ERROR;
+}
- SVN_ERR(svn_wc__get_actual_props(&workingprops, db, local_abspath,
- scratch_pool, scratch_pool));
- working_mimetype = get_prop_mimetype(workingprops);
+static svn_error_t *
+ensure_local_info(struct dir_baton_t *db,
+ apr_pool_t *scratch_pool)
+{
+ apr_hash_t *conflicts;
- SVN_ERR(svn_prop_diffs(&propchanges, workingprops, baseprops, scratch_pool));
+ if (db->local_info)
+ return SVN_NO_ERROR;
- if (modified || propchanges->nelts > 0)
- {
- SVN_ERR(eb->callbacks->file_changed(NULL, NULL, NULL,
- path,
- modified ? textbase : NULL,
- translated,
- revision,
- SVN_INVALID_REVNUM,
- base_mimetype,
- working_mimetype,
- propchanges, baseprops,
- eb->callback_baton,
- scratch_pool));
- }
- }
+ SVN_ERR(svn_wc__db_read_children_info(&db->local_info, &conflicts,
+ db->eb->db, db->local_abspath,
+ db->pool, scratch_pool));
return SVN_NO_ERROR;
}
@@ -772,21 +579,27 @@ file_diff(struct edit_baton *eb,
* DIR_BATON is the baton for the directory.
*/
static svn_error_t *
-walk_local_nodes_diff(struct edit_baton *eb,
+walk_local_nodes_diff(struct edit_baton_t *eb,
const char *local_abspath,
const char *path,
svn_depth_t depth,
apr_hash_t *compared,
+ void *parent_baton,
apr_pool_t *scratch_pool)
{
svn_wc__db_t *db = eb->db;
- const apr_array_header_t *children;
- int i;
svn_boolean_t in_anchor_not_target;
apr_pool_t *iterpool;
+ void *dir_baton = NULL;
+ svn_boolean_t skip = FALSE;
+ svn_boolean_t skip_children = FALSE;
+ svn_revnum_t revision;
+ svn_boolean_t props_mod;
+ svn_diff_source_t *left_src;
+ svn_diff_source_t *right_src;
/* Everything we do below is useless if we are comparing to BASE. */
- if (eb->use_text_base)
+ if (eb->diff_pristine)
return SVN_NO_ERROR;
/* Determine if this is the anchor directory if the anchor is different
@@ -795,341 +608,555 @@ walk_local_nodes_diff(struct edit_baton *eb,
skipped. */
in_anchor_not_target = ((*path == '\0') && (*eb->target != '\0'));
- /* Check for local property mods on this directory, if we haven't
- already reported them and we aren't changelist-filted.
- ### it should be noted that we do not currently allow directories
- ### to be part of changelists, so if a changelist is provided, the
- ### changelist check will always fail. */
- if (svn_wc__internal_changelist_match(db, local_abspath,
- eb->changelist_hash, scratch_pool)
- && (! in_anchor_not_target)
- && (!compared || ! apr_hash_get(compared, path, 0)))
- {
- svn_boolean_t modified;
+ iterpool = svn_pool_create(scratch_pool);
- SVN_ERR(svn_wc__props_modified(&modified, db, local_abspath,
- scratch_pool));
- if (modified)
- {
- apr_array_header_t *propchanges;
- apr_hash_t *baseprops;
+ SVN_ERR(svn_wc__db_read_info(NULL, NULL, &revision, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, &props_mod, NULL, NULL, NULL,
+ db, local_abspath, scratch_pool, scratch_pool));
- SVN_ERR(svn_wc__internal_propdiff(&propchanges, &baseprops,
- db, local_abspath,
- scratch_pool, scratch_pool));
+ left_src = svn_diff__source_create(revision, scratch_pool);
+ right_src = svn_diff__source_create(SVN_INVALID_REVNUM, scratch_pool);
- SVN_ERR(eb->callbacks->dir_props_changed(NULL, NULL,
- path, FALSE /* ### ? */,
- propchanges, baseprops,
- eb->callback_baton,
- scratch_pool));
- }
+ if (compared)
+ {
+ dir_baton = parent_baton;
+ skip = TRUE;
}
-
- if (depth == svn_depth_empty && !in_anchor_not_target)
- return SVN_NO_ERROR;
-
- iterpool = svn_pool_create(scratch_pool);
-
- SVN_ERR(svn_wc__db_read_children(&children, db, local_abspath,
- scratch_pool, iterpool));
-
- for (i = 0; i < children->nelts; i++)
+ else if (!in_anchor_not_target)
+ SVN_ERR(eb->processor->dir_opened(&dir_baton, &skip, &skip_children,
+ path,
+ left_src,
+ right_src,
+ NULL /* copyfrom_src */,
+ parent_baton,
+ eb->processor,
+ scratch_pool, scratch_pool));
+
+
+ if (!skip_children && depth != svn_depth_empty)
{
- const char *name = APR_ARRAY_IDX(children, i, const char*);
- const char *child_abspath, *child_path;
- svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
+ apr_hash_t *nodes;
+ apr_hash_t *conflicts;
+ apr_array_header_t *children;
+ svn_depth_t depth_below_here = depth;
+ svn_boolean_t diff_files;
+ svn_boolean_t diff_dirs;
+ int i;
+
+ if (depth_below_here == svn_depth_immediates)
+ depth_below_here = svn_depth_empty;
+
+ diff_files = (depth == svn_depth_unknown
+ || depth >= svn_depth_files);
+ diff_dirs = (depth == svn_depth_unknown
+ || depth >= svn_depth_immediates);
+
+ SVN_ERR(svn_wc__db_read_children_info(&nodes, &conflicts,
+ db, local_abspath,
+ scratch_pool, iterpool));
- svn_pool_clear(iterpool);
+ children = svn_sort__hash(nodes, svn_sort_compare_items_lexically,
+ scratch_pool);
- if (eb->cancel_func)
- SVN_ERR(eb->cancel_func(eb->cancel_baton));
+ for (i = 0; i < children->nelts; i++)
+ {
+ svn_sort__item_t *item = &APR_ARRAY_IDX(children, i,
+ svn_sort__item_t);
+ const char *name = item->key;
+ struct svn_wc__db_info_t *info = item->value;
- /* In the anchor directory, if the anchor is not the target then all
- entries other than the target should not be diff'd. Running diff
- on one file in a directory should not diff other files in that
- directory. */
- if (in_anchor_not_target && strcmp(eb->target, name))
- continue;
+ const char *child_abspath;
+ const char *child_relpath;
+ svn_boolean_t repos_only;
+ svn_boolean_t local_only;
+ svn_node_kind_t base_kind;
- child_abspath = svn_dirent_join(local_abspath, name, iterpool);
+ if (eb->cancel_func)
+ SVN_ERR(eb->cancel_func(eb->cancel_baton));
- SVN_ERR(svn_wc__db_read_info(&status, &kind, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- db, child_abspath,
- iterpool, iterpool));
+ /* In the anchor directory, if the anchor is not the target then all
+ entries other than the target should not be diff'd. Running diff
+ on one file in a directory should not diff other files in that
+ directory. */
+ if (in_anchor_not_target && strcmp(eb->target, name))
+ continue;
- if (status == svn_wc__db_status_not_present
- || status == svn_wc__db_status_excluded
- || status == svn_wc__db_status_server_excluded)
- continue;
+ if (compared && svn_hash_gets(compared, name))
+ continue;
- child_path = svn_relpath_join(path, name, iterpool);
+ if (NOT_PRESENT(info->status))
+ continue;
- /* Skip this node if it is in the list of nodes already diff'd. */
- if (compared && apr_hash_get(compared, child_path, APR_HASH_KEY_STRING))
- continue;
+ assert(info->status == svn_wc__db_status_normal
+ || info->status == svn_wc__db_status_added
+ || info->status == svn_wc__db_status_deleted);
- switch (kind)
- {
- case svn_wc__db_kind_file:
- case svn_wc__db_kind_symlink:
- SVN_ERR(file_diff(eb, child_abspath, child_path, iterpool));
- break;
+ svn_pool_clear(iterpool);
+ child_abspath = svn_dirent_join(local_abspath, name, iterpool);
+ child_relpath = svn_relpath_join(path, name, iterpool);
+
+ repos_only = FALSE;
+ local_only = FALSE;
- case svn_wc__db_kind_dir:
- /* ### TODO: Don't know how to do replaced dirs. How do I get
- information about what is being replaced? If it was a
- directory then the directory elements are also going to be
- deleted. We need to show deletion diffs for these
- files. If it was a file we need to show a deletion diff
- for that file. */
-
- /* Check the subdir if in the anchor (the subdir is the target), or
- if recursive */
- if (in_anchor_not_target
- || (depth > svn_depth_files)
- || (depth == svn_depth_unknown))
+ if (!info->have_base)
+ {
+ local_only = TRUE; /* Only report additions */
+ }
+ else if (info->status == svn_wc__db_status_normal)
+ {
+ /* Simple diff */
+ base_kind = info->kind;
+ }
+ else if (info->status == svn_wc__db_status_deleted
+ && (!eb->diff_pristine || !info->have_more_work))
{
- svn_depth_t depth_below_here = depth;
+ svn_wc__db_status_t base_status;
+ repos_only = TRUE;
+ SVN_ERR(svn_wc__db_base_get_info(&base_status, &base_kind, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL,
+ db, child_abspath,
+ iterpool, iterpool));
+
+ if (NOT_PRESENT(base_status))
+ continue;
+ }
+ else
+ {
+ /* working status is either added or deleted */
+ svn_wc__db_status_t base_status;
+
+ SVN_ERR(svn_wc__db_base_get_info(&base_status, &base_kind, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL,
+ db, child_abspath,
+ iterpool, iterpool));
+
+ if (NOT_PRESENT(base_status))
+ local_only = TRUE;
+ else if (base_kind != info->kind || !eb->ignore_ancestry)
+ {
+ repos_only = TRUE;
+ local_only = TRUE;
+ }
+ }
- if (depth_below_here == svn_depth_immediates)
- depth_below_here = svn_depth_empty;
+ if (eb->local_before_remote && local_only)
+ {
+ if (info->kind == svn_node_file && diff_files)
+ SVN_ERR(svn_wc__diff_local_only_file(db, child_abspath,
+ child_relpath,
+ eb->processor, dir_baton,
+ eb->diff_pristine,
+ eb->cancel_func,
+ eb->cancel_baton,
+ iterpool));
+ else if (info->kind == svn_node_dir && diff_dirs)
+ SVN_ERR(svn_wc__diff_local_only_dir(db, child_abspath,
+ child_relpath,
+ depth_below_here,
+ eb->processor, dir_baton,
+ eb->diff_pristine,
+ eb->cancel_func,
+ eb->cancel_baton,
+ iterpool));
+ }
- SVN_ERR(walk_local_nodes_diff(eb,
- child_abspath,
- child_path,
- depth_below_here,
- NULL,
- iterpool));
+ if (repos_only)
+ {
+ /* Report repository form deleted */
+ if (base_kind == svn_node_file && diff_files)
+ SVN_ERR(svn_wc__diff_base_only_file(db, child_abspath,
+ child_relpath, eb->revnum,
+ eb->processor, dir_baton,
+ iterpool));
+ else if (base_kind == svn_node_dir && diff_dirs)
+ SVN_ERR(svn_wc__diff_base_only_dir(db, child_abspath,
+ child_relpath, eb->revnum,
+ depth_below_here,
+ eb->processor, dir_baton,
+ eb->cancel_func,
+ eb->cancel_baton,
+ iterpool));
+ }
+ else if (!local_only) /* Not local only nor remote only */
+ {
+ /* Diff base against actual */
+ if (info->kind == svn_node_file && diff_files)
+ {
+ if (info->status != svn_wc__db_status_normal
+ || !eb->diff_pristine)
+ {
+ SVN_ERR(svn_wc__diff_base_working_diff(
+ db, child_abspath,
+ child_relpath,
+ eb->revnum,
+ eb->processor, dir_baton,
+ eb->diff_pristine,
+ eb->cancel_func,
+ eb->cancel_baton,
+ scratch_pool));
+ }
+ }
+ else if (info->kind == svn_node_dir && diff_dirs)
+ SVN_ERR(walk_local_nodes_diff(eb, child_abspath,
+ child_relpath,
+ depth_below_here,
+ NULL /* compared */,
+ dir_baton,
+ scratch_pool));
}
- break;
- default:
- break;
+ if (!eb->local_before_remote && local_only)
+ {
+ if (info->kind == svn_node_file && diff_files)
+ SVN_ERR(svn_wc__diff_local_only_file(db, child_abspath,
+ child_relpath,
+ eb->processor, dir_baton,
+ eb->diff_pristine,
+ eb->cancel_func,
+ eb->cancel_baton,
+ iterpool));
+ else if (info->kind == svn_node_dir && diff_dirs)
+ SVN_ERR(svn_wc__diff_local_only_dir(db, child_abspath,
+ child_relpath, depth_below_here,
+ eb->processor, dir_baton,
+ eb->diff_pristine,
+ eb->cancel_func,
+ eb->cancel_baton,
+ iterpool));
+ }
}
}
+ if (compared)
+ return SVN_NO_ERROR;
+
+ /* Check for local property mods on this directory, if we haven't
+ already reported them. */
+ if (! skip
+ && ! in_anchor_not_target
+ && props_mod)
+ {
+ apr_array_header_t *propchanges;
+ apr_hash_t *left_props;
+ apr_hash_t *right_props;
+
+ SVN_ERR(svn_wc__internal_propdiff(&propchanges, &left_props,
+ db, local_abspath,
+ scratch_pool, scratch_pool));
+
+ right_props = svn_prop__patch(left_props, propchanges, scratch_pool);
+
+ SVN_ERR(eb->processor->dir_changed(path,
+ left_src,
+ right_src,
+ left_props,
+ right_props,
+ propchanges,
+ dir_baton,
+ eb->processor,
+ scratch_pool));
+ }
+ else if (! skip)
+ SVN_ERR(eb->processor->dir_closed(path,
+ left_src,
+ right_src,
+ dir_baton,
+ eb->processor,
+ scratch_pool));
+
svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
-/* Report an existing file in the working copy (either in BASE or WORKING)
- * as having been added.
- *
- * DIR_BATON is the parent directory baton, ADM_ACCESS/PATH is the path
- * to the file to be compared.
- *
- * Do all allocation in POOL.
- */
-static svn_error_t *
-report_wc_file_as_added(struct edit_baton *eb,
- const char *local_abspath,
- const char *path,
- apr_pool_t *scratch_pool)
+svn_error_t *
+svn_wc__diff_local_only_file(svn_wc__db_t *db,
+ const char *local_abspath,
+ const char *relpath,
+ const svn_diff_tree_processor_t *processor,
+ void *processor_parent_baton,
+ svn_boolean_t diff_pristine,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
{
- svn_wc__db_t *db = eb->db;
- apr_hash_t *emptyprops;
- const char *mimetype;
- apr_hash_t *wcprops = NULL;
- apr_array_header_t *propchanges;
- const char *empty_file;
- const char *source_file;
- const char *translated_file;
+ svn_diff_source_t *right_src;
+ svn_diff_source_t *copyfrom_src = NULL;
svn_wc__db_status_t status;
+ svn_node_kind_t kind;
+ const svn_checksum_t *checksum;
+ const char *original_repos_relpath;
+ svn_revnum_t original_revision;
+ svn_boolean_t had_props;
+ svn_boolean_t props_mod;
+ apr_hash_t *pristine_props;
+ apr_hash_t *right_props = NULL;
+ const char *pristine_file;
+ const char *translated_file;
svn_revnum_t revision;
-
- /* If this entry is filtered by changelist specification, do nothing. */
- if (! svn_wc__internal_changelist_match(db, local_abspath,
- eb->changelist_hash, scratch_pool))
- return SVN_NO_ERROR;
-
- SVN_ERR(get_empty_file(eb, &empty_file));
-
- SVN_ERR(svn_wc__db_read_info(&status, NULL, &revision, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ void *file_baton = NULL;
+ svn_boolean_t skip = FALSE;
+ svn_boolean_t file_mod = TRUE;
+
+ SVN_ERR(svn_wc__db_read_info(&status, &kind, &revision, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, &checksum, NULL,
+ &original_repos_relpath, NULL, NULL,
+ &original_revision, NULL, NULL, NULL,
+ NULL, NULL, NULL, &had_props,
+ &props_mod, NULL, NULL, NULL,
db, local_abspath,
scratch_pool, scratch_pool));
- if (status == svn_wc__db_status_added)
- SVN_ERR(svn_wc__db_scan_addition(&status, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, db, local_abspath,
- scratch_pool, scratch_pool));
+ assert(kind == svn_node_file
+ && (status == svn_wc__db_status_normal
+ || status == svn_wc__db_status_added
+ || (status == svn_wc__db_status_deleted && diff_pristine)));
- /* We can't show additions for files that don't exist. */
- SVN_ERR_ASSERT(status != svn_wc__db_status_deleted || eb->use_text_base);
- /* If the file was added *with history*, then we don't want to
- see a comparison to the empty file; we want the usual working
- vs. text-base comparison. */
- if (status == svn_wc__db_status_copied ||
- status == svn_wc__db_status_moved_here)
+ if (status == svn_wc__db_status_deleted)
{
- /* Don't show anything if we're comparing to BASE, since by
- definition there can't be any local modifications. */
- if (eb->use_text_base)
- return SVN_NO_ERROR;
+ assert(diff_pristine);
- /* Otherwise show just the local modifications. */
- return file_diff(eb, local_abspath, path, scratch_pool);
+ SVN_ERR(svn_wc__db_read_pristine_info(&status, &kind, NULL, NULL, NULL,
+ NULL, &checksum, NULL, &had_props,
+ &pristine_props,
+ db, local_abspath,
+ scratch_pool, scratch_pool));
+ props_mod = FALSE;
}
+ else if (!had_props)
+ pristine_props = apr_hash_make(scratch_pool);
+ else
+ SVN_ERR(svn_wc__db_read_pristine_props(&pristine_props,
+ db, local_abspath,
+ scratch_pool, scratch_pool));
- emptyprops = apr_hash_make(scratch_pool);
+ if (original_repos_relpath)
+ {
+ copyfrom_src = svn_diff__source_create(original_revision, scratch_pool);
+ copyfrom_src->repos_relpath = original_repos_relpath;
+ }
- if (eb->use_text_base)
- SVN_ERR(svn_wc__get_pristine_props(&wcprops, db, local_abspath,
- scratch_pool, scratch_pool));
+ if (props_mod || !SVN_IS_VALID_REVNUM(revision))
+ right_src = svn_diff__source_create(SVN_INVALID_REVNUM, scratch_pool);
else
- SVN_ERR(svn_wc__get_actual_props(&wcprops, db, local_abspath,
- scratch_pool, scratch_pool));
- mimetype = get_prop_mimetype(wcprops);
+ {
+ if (diff_pristine)
+ file_mod = FALSE;
+ else
+ SVN_ERR(svn_wc__internal_file_modified_p(&file_mod, db, local_abspath,
+ FALSE, scratch_pool));
+
+ if (!file_mod)
+ right_src = svn_diff__source_create(revision, scratch_pool);
+ else
+ right_src = svn_diff__source_create(SVN_INVALID_REVNUM, scratch_pool);
+ }
+
+ SVN_ERR(processor->file_opened(&file_baton, &skip,
+ relpath,
+ NULL /* left_source */,
+ right_src,
+ copyfrom_src,
+ processor_parent_baton,
+ processor,
+ scratch_pool, scratch_pool));
- SVN_ERR(svn_prop_diffs(&propchanges,
- wcprops, emptyprops, scratch_pool));
+ if (skip)
+ return SVN_NO_ERROR;
+ if (props_mod && !diff_pristine)
+ SVN_ERR(svn_wc__db_read_props(&right_props, db, local_abspath,
+ scratch_pool, scratch_pool));
+ else
+ right_props = svn_prop_hash_dup(pristine_props, scratch_pool);
- if (eb->use_text_base)
- SVN_ERR(get_pristine_file(&source_file, db, local_abspath,
- FALSE, scratch_pool, scratch_pool));
+ if (checksum)
+ SVN_ERR(svn_wc__db_pristine_get_path(&pristine_file, db, local_abspath,
+ checksum, scratch_pool, scratch_pool));
else
- source_file = local_abspath;
+ pristine_file = NULL;
- SVN_ERR(svn_wc__internal_translated_file(
- &translated_file, source_file, db, local_abspath,
+ if (diff_pristine)
+ {
+ translated_file = pristine_file; /* No translation needed */
+ }
+ else
+ {
+ SVN_ERR(svn_wc__internal_translated_file(
+ &translated_file, local_abspath, db, local_abspath,
SVN_WC_TRANSLATE_TO_NF | SVN_WC_TRANSLATE_USE_GLOBAL_TMP,
- eb->cancel_func, eb->cancel_baton,
+ cancel_func, cancel_baton,
scratch_pool, scratch_pool));
+ }
- SVN_ERR(eb->callbacks->file_added(NULL, NULL, NULL,
- path,
- empty_file, translated_file,
- 0, revision,
- NULL, mimetype,
- NULL, SVN_INVALID_REVNUM,
- propchanges, emptyprops,
- eb->callback_baton,
- scratch_pool));
+ SVN_ERR(processor->file_added(relpath,
+ copyfrom_src,
+ right_src,
+ copyfrom_src
+ ? pristine_file
+ : NULL,
+ translated_file,
+ copyfrom_src
+ ? pristine_props
+ : NULL,
+ right_props,
+ file_baton,
+ processor,
+ scratch_pool));
return SVN_NO_ERROR;
}
-/* Report an existing directory in the working copy (either in BASE
- * or WORKING) as having been added. If recursing, also report any
- * subdirectories as added.
- *
- * DIR_BATON is the baton for the directory.
- *
- * Do all allocation in POOL.
- */
-static svn_error_t *
-report_wc_directory_as_added(struct edit_baton *eb,
- const char *local_abspath,
- const char *path,
- svn_depth_t depth,
- apr_pool_t *scratch_pool)
+svn_error_t *
+svn_wc__diff_local_only_dir(svn_wc__db_t *db,
+ const char *local_abspath,
+ const char *relpath,
+ svn_depth_t depth,
+ const svn_diff_tree_processor_t *processor,
+ void *processor_parent_baton,
+ svn_boolean_t diff_pristine,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
{
- svn_wc__db_t *db = eb->db;
- apr_hash_t *emptyprops, *wcprops = NULL;
- apr_array_header_t *propchanges;
+ svn_wc__db_status_t status;
+ svn_node_kind_t kind;
+ svn_boolean_t had_props;
+ svn_boolean_t props_mod;
+ const char *original_repos_relpath;
+ svn_revnum_t original_revision;
+ svn_diff_source_t *copyfrom_src = NULL;
+ apr_hash_t *pristine_props;
const apr_array_header_t *children;
int i;
apr_pool_t *iterpool;
+ void *pdb = NULL;
+ svn_boolean_t skip = FALSE;
+ svn_boolean_t skip_children = FALSE;
+ svn_diff_source_t *right_src = svn_diff__source_create(SVN_INVALID_REVNUM,
+ scratch_pool);
+ svn_depth_t depth_below_here = depth;
+ apr_hash_t *nodes;
+ apr_hash_t *conflicts;
- emptyprops = apr_hash_make(scratch_pool);
-
- /* If this directory passes changelist filtering, get its BASE or
- WORKING properties, as appropriate, and simulate their
- addition.
- ### it should be noted that we do not currently allow directories
- ### to be part of changelists, so if a changelist is provided, this
- ### check will always fail. */
- if (svn_wc__internal_changelist_match(db, local_abspath,
- eb->changelist_hash, scratch_pool))
+ SVN_ERR(svn_wc__db_read_info(&status, &kind, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ &original_repos_relpath, NULL, NULL,
+ &original_revision, NULL, NULL, NULL,
+ NULL, NULL, NULL, &had_props,
+ &props_mod, NULL, NULL, NULL,
+ db, local_abspath,
+ scratch_pool, scratch_pool));
+ if (original_repos_relpath)
{
- if (eb->use_text_base)
- SVN_ERR(svn_wc__get_pristine_props(&wcprops, db, local_abspath,
- scratch_pool, scratch_pool));
- else
- SVN_ERR(svn_wc__get_actual_props(&wcprops, db, local_abspath,
- scratch_pool, scratch_pool));
+ copyfrom_src = svn_diff__source_create(original_revision, scratch_pool);
+ copyfrom_src->repos_relpath = original_repos_relpath;
+ }
- SVN_ERR(svn_prop_diffs(&propchanges, wcprops, emptyprops, scratch_pool));
+ /* svn_wc__db_status_incomplete should never happen, as the result won't be
+ stable or guaranteed related to what is in the repository for this
+ revision, but without this it would be hard to diagnose that status... */
+ assert(kind == svn_node_dir
+ && (status == svn_wc__db_status_normal
+ || status == svn_wc__db_status_incomplete
+ || status == svn_wc__db_status_added
+ || (status == svn_wc__db_status_deleted && diff_pristine)));
- if (propchanges->nelts > 0)
- SVN_ERR(eb->callbacks->dir_props_changed(NULL, NULL,
- path, TRUE,
- propchanges, emptyprops,
- eb->callback_baton,
- scratch_pool));
+ if (status == svn_wc__db_status_deleted)
+ {
+ assert(diff_pristine);
+
+ SVN_ERR(svn_wc__db_read_pristine_info(NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, &had_props,
+ &pristine_props,
+ db, local_abspath,
+ scratch_pool, scratch_pool));
+ props_mod = FALSE;
}
+ else if (!had_props)
+ pristine_props = apr_hash_make(scratch_pool);
+ else
+ SVN_ERR(svn_wc__db_read_pristine_props(&pristine_props,
+ db, local_abspath,
+ scratch_pool, scratch_pool));
/* Report the addition of the directory's contents. */
iterpool = svn_pool_create(scratch_pool);
- SVN_ERR(svn_wc__db_read_children(&children, db, local_abspath,
- scratch_pool, iterpool));
+ SVN_ERR(processor->dir_opened(&pdb, &skip, &skip_children,
+ relpath,
+ NULL,
+ right_src,
+ copyfrom_src,
+ processor_parent_baton,
+ processor,
+ scratch_pool, iterpool));
+ /* ### skip_children is not used */
+
+ SVN_ERR(svn_wc__db_read_children_info(&nodes, &conflicts, db, local_abspath,
+ scratch_pool, iterpool));
+
+ if (depth_below_here == svn_depth_immediates)
+ depth_below_here = svn_depth_empty;
+
+ children = svn_sort__hash(nodes, svn_sort_compare_items_lexically,
+ scratch_pool);
for (i = 0; i < children->nelts; i++)
{
- const char *name = APR_ARRAY_IDX(children, i, const char *);
- const char *child_abspath, *child_path;
- svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
+ svn_sort__item_t *item = &APR_ARRAY_IDX(children, i, svn_sort__item_t);
+ const char *name = item->key;
+ struct svn_wc__db_info_t *info = item->value;
+ const char *child_abspath;
+ const char *child_relpath;
svn_pool_clear(iterpool);
- if (eb->cancel_func)
- SVN_ERR(eb->cancel_func(eb->cancel_baton));
+ if (cancel_func)
+ SVN_ERR(cancel_func(cancel_baton));
child_abspath = svn_dirent_join(local_abspath, name, iterpool);
- SVN_ERR(svn_wc__db_read_info(&status, &kind, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- db, child_abspath, iterpool, iterpool));
-
- if (status == svn_wc__db_status_not_present
- || status == svn_wc__db_status_excluded
- || status == svn_wc__db_status_server_excluded)
+ if (NOT_PRESENT(info->status))
{
continue;
}
/* If comparing against WORKING, skip entries that are
schedule-deleted - they don't really exist. */
- if (!eb->use_text_base && status == svn_wc__db_status_deleted)
+ if (!diff_pristine && info->status == svn_wc__db_status_deleted)
continue;
- child_path = svn_relpath_join(path, name, iterpool);
+ child_relpath = svn_relpath_join(relpath, name, iterpool);
- switch (kind)
+ switch (info->kind)
{
- case svn_wc__db_kind_file:
- case svn_wc__db_kind_symlink:
- SVN_ERR(report_wc_file_as_added(eb, child_abspath, child_path,
- iterpool));
+ case svn_node_file:
+ case svn_node_symlink:
+ SVN_ERR(svn_wc__diff_local_only_file(db, child_abspath,
+ child_relpath,
+ processor, pdb,
+ diff_pristine,
+ cancel_func, cancel_baton,
+ scratch_pool));
break;
- case svn_wc__db_kind_dir:
+ case svn_node_dir:
if (depth > svn_depth_files || depth == svn_depth_unknown)
{
- svn_depth_t depth_below_here = depth;
-
- if (depth_below_here == svn_depth_immediates)
- depth_below_here = svn_depth_empty;
-
- SVN_ERR(report_wc_directory_as_added(eb,
- child_abspath,
- child_path,
- depth_below_here,
- iterpool));
+ SVN_ERR(svn_wc__diff_local_only_dir(db, child_abspath,
+ child_relpath, depth_below_here,
+ processor, pdb,
+ diff_pristine,
+ cancel_func, cancel_baton,
+ iterpool));
}
break;
@@ -1138,130 +1165,355 @@ report_wc_directory_as_added(struct edit_baton *eb,
}
}
+ if (!skip)
+ {
+ apr_hash_t *right_props;
+
+ if (props_mod && !diff_pristine)
+ SVN_ERR(svn_wc__db_read_props(&right_props, db, local_abspath,
+ scratch_pool, scratch_pool));
+ else
+ right_props = svn_prop_hash_dup(pristine_props, scratch_pool);
+
+ SVN_ERR(processor->dir_added(relpath,
+ copyfrom_src,
+ right_src,
+ copyfrom_src
+ ? pristine_props
+ : NULL,
+ right_props,
+ pdb,
+ processor,
+ iterpool));
+ }
svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
+/* Reports local changes. */
+static svn_error_t *
+handle_local_only(struct dir_baton_t *pb,
+ const char *name,
+ apr_pool_t *scratch_pool)
+{
+ struct edit_baton_t *eb = pb->eb;
+ const struct svn_wc__db_info_t *info;
+ svn_boolean_t repos_delete = (pb->deletes
+ && svn_hash_gets(pb->deletes, name));
+
+ assert(!strchr(name, '/'));
+ assert(!pb->added || eb->ignore_ancestry);
+
+ if (pb->skip_children)
+ return SVN_NO_ERROR;
+
+ SVN_ERR(ensure_local_info(pb, scratch_pool));
+
+ info = svn_hash_gets(pb->local_info, name);
+
+ if (info == NULL || NOT_PRESENT(info->status))
+ return SVN_NO_ERROR;
+
+ switch (info->status)
+ {
+ case svn_wc__db_status_incomplete:
+ return SVN_NO_ERROR; /* Not local only */
+
+ case svn_wc__db_status_normal:
+ if (!repos_delete)
+ return SVN_NO_ERROR; /* Local and remote */
+ svn_hash_sets(pb->deletes, name, NULL);
+ break;
+
+ case svn_wc__db_status_deleted:
+ if (!(eb->diff_pristine && repos_delete))
+ return SVN_NO_ERROR;
+ break;
+
+ case svn_wc__db_status_added:
+ default:
+ break;
+ }
+
+ if (info->kind == svn_node_dir)
+ {
+ svn_depth_t depth ;
+
+ if (pb->depth == svn_depth_infinity || pb->depth == svn_depth_unknown)
+ depth = pb->depth;
+ else
+ depth = svn_depth_empty;
+
+ SVN_ERR(svn_wc__diff_local_only_dir(
+ eb->db,
+ svn_dirent_join(pb->local_abspath, name, scratch_pool),
+ svn_relpath_join(pb->relpath, name, scratch_pool),
+ repos_delete ? svn_depth_infinity : depth,
+ eb->processor, pb->pdb,
+ eb->diff_pristine,
+ eb->cancel_func, eb->cancel_baton,
+ scratch_pool));
+ }
+ else
+ SVN_ERR(svn_wc__diff_local_only_file(
+ eb->db,
+ svn_dirent_join(pb->local_abspath, name, scratch_pool),
+ svn_relpath_join(pb->relpath, name, scratch_pool),
+ eb->processor, pb->pdb,
+ eb->diff_pristine,
+ eb->cancel_func, eb->cancel_baton,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* Reports a file LOCAL_ABSPATH in BASE as deleted */
+svn_error_t *
+svn_wc__diff_base_only_file(svn_wc__db_t *db,
+ const char *local_abspath,
+ const char *relpath,
+ svn_revnum_t revision,
+ const svn_diff_tree_processor_t *processor,
+ void *processor_parent_baton,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_status_t status;
+ svn_node_kind_t kind;
+ const svn_checksum_t *checksum;
+ apr_hash_t *props;
+ void *file_baton = NULL;
+ svn_boolean_t skip = FALSE;
+ svn_diff_source_t *left_src;
+ const char *pristine_file;
+
+ SVN_ERR(svn_wc__db_base_get_info(&status, &kind,
+ SVN_IS_VALID_REVNUM(revision)
+ ? NULL : &revision,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ &checksum, NULL, NULL, NULL, &props, NULL,
+ db, local_abspath,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR_ASSERT(status == svn_wc__db_status_normal
+ && kind == svn_node_file
+ && checksum);
+
+ left_src = svn_diff__source_create(revision, scratch_pool);
+
+ SVN_ERR(processor->file_opened(&file_baton, &skip,
+ relpath,
+ left_src,
+ NULL /* right_src */,
+ NULL /* copyfrom_source */,
+ processor_parent_baton,
+ processor,
+ scratch_pool, scratch_pool));
+
+ if (skip)
+ return SVN_NO_ERROR;
+
+ SVN_ERR(svn_wc__db_pristine_get_path(&pristine_file,
+ db, local_abspath, checksum,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(processor->file_deleted(relpath,
+ left_src,
+ pristine_file,
+ props,
+ file_baton,
+ processor,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__diff_base_only_dir(svn_wc__db_t *db,
+ const char *local_abspath,
+ const char *relpath,
+ svn_revnum_t revision,
+ svn_depth_t depth,
+ const svn_diff_tree_processor_t *processor,
+ void *processor_parent_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
+{
+ void *dir_baton = NULL;
+ svn_boolean_t skip = FALSE;
+ svn_boolean_t skip_children = FALSE;
+ svn_diff_source_t *left_src;
+ svn_revnum_t report_rev = revision;
+
+ if (!SVN_IS_VALID_REVNUM(report_rev))
+ SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, &report_rev, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL,
+ db, local_abspath,
+ scratch_pool, scratch_pool));
+
+ left_src = svn_diff__source_create(report_rev, scratch_pool);
+
+ SVN_ERR(processor->dir_opened(&dir_baton, &skip, &skip_children,
+ relpath,
+ left_src,
+ NULL /* right_src */,
+ NULL /* copyfrom_src */,
+ processor_parent_baton,
+ processor,
+ scratch_pool, scratch_pool));
+
+ if (!skip_children && (depth == svn_depth_unknown || depth > svn_depth_empty))
+ {
+ apr_hash_t *nodes;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ apr_array_header_t *children;
+ int i;
+
+ SVN_ERR(svn_wc__db_base_get_children_info(&nodes, db, local_abspath,
+ scratch_pool, iterpool));
+
+ children = svn_sort__hash(nodes, svn_sort_compare_items_lexically,
+ scratch_pool);
+
+ for (i = 0; i < children->nelts; i++)
+ {
+ svn_sort__item_t *item = &APR_ARRAY_IDX(children, i,
+ svn_sort__item_t);
+ const char *name = item->key;
+ struct svn_wc__db_base_info_t *info = item->value;
+ const char *child_abspath;
+ const char *child_relpath;
+
+ if (info->status != svn_wc__db_status_normal)
+ continue;
+
+ if (cancel_func)
+ SVN_ERR(cancel_func(cancel_baton));
+
+ svn_pool_clear(iterpool);
+
+ child_abspath = svn_dirent_join(local_abspath, name, iterpool);
+ child_relpath = svn_relpath_join(relpath, name, iterpool);
+
+ switch (info->kind)
+ {
+ case svn_node_file:
+ case svn_node_symlink:
+ SVN_ERR(svn_wc__diff_base_only_file(db, child_abspath,
+ child_relpath,
+ revision,
+ processor, dir_baton,
+ iterpool));
+ break;
+ case svn_node_dir:
+ if (depth > svn_depth_files || depth == svn_depth_unknown)
+ {
+ svn_depth_t depth_below_here = depth;
+
+ if (depth_below_here == svn_depth_immediates)
+ depth_below_here = svn_depth_empty;
+
+ SVN_ERR(svn_wc__diff_base_only_dir(db, child_abspath,
+ child_relpath,
+ revision,
+ depth_below_here,
+ processor, dir_baton,
+ cancel_func,
+ cancel_baton,
+ iterpool));
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+
+ if (!skip)
+ {
+ apr_hash_t *props;
+ SVN_ERR(svn_wc__db_base_get_props(&props, db, local_abspath,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(processor->dir_deleted(relpath,
+ left_src,
+ props,
+ dir_baton,
+ processor,
+ scratch_pool));
+ }
+
+ return SVN_NO_ERROR;
+}
-/* An editor function. */
+/* An svn_delta_editor_t function. */
static svn_error_t *
set_target_revision(void *edit_baton,
svn_revnum_t target_revision,
apr_pool_t *pool)
{
- struct edit_baton *eb = edit_baton;
+ struct edit_baton_t *eb = edit_baton;
eb->revnum = target_revision;
return SVN_NO_ERROR;
}
-/* An editor function. The root of the comparison hierarchy */
+/* An svn_delta_editor_t function. The root of the comparison hierarchy */
static svn_error_t *
open_root(void *edit_baton,
svn_revnum_t base_revision,
apr_pool_t *dir_pool,
void **root_baton)
{
- struct edit_baton *eb = edit_baton;
- struct dir_baton *db;
+ struct edit_baton_t *eb = edit_baton;
+ struct dir_baton_t *db;
eb->root_opened = TRUE;
db = make_dir_baton("", NULL, eb, FALSE, eb->depth, dir_pool);
*root_baton = db;
+ if (eb->target[0] == '\0')
+ {
+ db->left_src = svn_diff__source_create(eb->revnum, db->pool);
+ db->right_src = svn_diff__source_create(SVN_INVALID_REVNUM, db->pool);
+
+ SVN_ERR(eb->processor->dir_opened(&db->pdb, &db->skip,
+ &db->skip_children,
+ "",
+ db->left_src,
+ db->right_src,
+ NULL /* copyfrom_source */,
+ NULL /* parent_baton */,
+ eb->processor,
+ db->pool, db->pool));
+ }
+ else
+ db->skip = TRUE; /* Skip this, but not the children */
+
return SVN_NO_ERROR;
}
-/* An editor function. */
+/* An svn_delta_editor_t function. */
static svn_error_t *
delete_entry(const char *path,
svn_revnum_t base_revision,
void *parent_baton,
apr_pool_t *pool)
{
- struct dir_baton *pb = parent_baton;
- struct edit_baton *eb = pb->eb;
- svn_wc__db_t *db = eb->db;
- const char *empty_file;
- const char *name = svn_dirent_basename(path, NULL);
- const char *local_abspath = svn_dirent_join(pb->local_abspath, name, pool);
- svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
-
- /* Mark this node as compared in the parent directory's baton. */
- apr_hash_set(pb->compared, apr_pstrdup(pb->pool, path),
- APR_HASH_KEY_STRING, "");
+ struct dir_baton_t *pb = parent_baton;
+ const char *name = svn_dirent_basename(path, pb->pool);
- SVN_ERR(svn_wc__db_read_info(&status, &kind, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- db, local_abspath, pool, pool));
-
- /* If comparing against WORKING, skip nodes that are deleted
- - they don't really exist. */
- if (!eb->use_text_base && status == svn_wc__db_status_deleted)
- return SVN_NO_ERROR;
-
- SVN_ERR(get_empty_file(pb->eb, &empty_file));
- switch (kind)
- {
- case svn_wc__db_kind_file:
- case svn_wc__db_kind_symlink:
- /* A delete is required to change working-copy into requested
- revision, so diff should show this as an add. Thus compare
- the empty file against the current working copy. If
- 'reverse_order' is set, then show a deletion. */
-
- if (eb->reverse_order)
- {
- /* Whenever showing a deletion, we show the text-base vanishing. */
- /* ### This is wrong if we're diffing WORKING->repos. */
- const char *textbase;
-
- apr_hash_t *baseprops = NULL;
- const char *base_mimetype;
-
- SVN_ERR(get_pristine_file(&textbase, db, local_abspath,
- eb->use_text_base, pool, pool));
-
- SVN_ERR(svn_wc__get_pristine_props(&baseprops, eb->db, local_abspath,
- pool, pool));
- base_mimetype = get_prop_mimetype(baseprops);
-
- SVN_ERR(eb->callbacks->file_deleted(NULL, NULL, path,
- textbase,
- empty_file,
- base_mimetype,
- NULL,
- baseprops,
- eb->callback_baton,
- pool));
- }
- else
- {
- /* Or normally, show the working file being added. */
- SVN_ERR(report_wc_file_as_added(eb, local_abspath, path, pool));
- }
- break;
- case svn_wc__db_kind_dir:
- /* A delete is required to change working-copy into requested
- revision, so diff should show this as an add. */
- SVN_ERR(report_wc_directory_as_added(eb,
- local_abspath,
- path,
- svn_depth_infinity,
- pool));
-
- default:
- break;
- }
+ if (!pb->deletes)
+ pb->deletes = apr_hash_make(pb->pool);
+ svn_hash_sets(pb->deletes, name, "");
return SVN_NO_ERROR;
}
-/* An editor function. */
+/* An svn_delta_editor_t function. */
static svn_error_t *
add_directory(const char *path,
void *parent_baton,
@@ -1270,27 +1522,58 @@ add_directory(const char *path,
apr_pool_t *dir_pool,
void **child_baton)
{
- struct dir_baton *pb = parent_baton;
- struct dir_baton *db;
+ struct dir_baton_t *pb = parent_baton;
+ struct edit_baton_t *eb = pb->eb;
+ struct dir_baton_t *db;
svn_depth_t subdir_depth = (pb->depth == svn_depth_immediates)
? svn_depth_empty : pb->depth;
- /* ### TODO: support copyfrom? */
-
db = make_dir_baton(path, pb, pb->eb, TRUE, subdir_depth,
dir_pool);
*child_baton = db;
- /* Add this path to the parent directory's list of elements that
- have been compared. */
- apr_hash_set(pb->compared, apr_pstrdup(pb->pool, db->path),
- APR_HASH_KEY_STRING, "");
+ if (pb->repos_only || !eb->ignore_ancestry)
+ db->repos_only = TRUE;
+ else
+ {
+ struct svn_wc__db_info_t *info;
+ SVN_ERR(ensure_local_info(pb, dir_pool));
+
+ info = svn_hash_gets(pb->local_info, db->name);
+
+ if (!info || info->kind != svn_node_dir || NOT_PRESENT(info->status))
+ db->repos_only = TRUE;
+
+ if (!db->repos_only && info->status != svn_wc__db_status_added)
+ db->repos_only = TRUE;
+
+ if (!db->repos_only)
+ {
+ db->right_src = svn_diff__source_create(SVN_INVALID_REVNUM, db->pool);
+ db->ignoring_ancestry = TRUE;
+
+ svn_hash_sets(pb->compared, apr_pstrdup(pb->pool, db->name), "");
+ }
+ }
+
+ db->left_src = svn_diff__source_create(eb->revnum, db->pool);
+
+ if (eb->local_before_remote && !db->repos_only && !db->ignoring_ancestry)
+ SVN_ERR(handle_local_only(pb, db->name, dir_pool));
+ SVN_ERR(eb->processor->dir_opened(&db->pdb, &db->skip, &db->skip_children,
+ db->relpath,
+ db->left_src,
+ db->right_src,
+ NULL /* copyfrom src */,
+ pb->pdb,
+ eb->processor,
+ db->pool, db->pool));
return SVN_NO_ERROR;
}
-/* An editor function. */
+/* An svn_delta_editor_t function. */
static svn_error_t *
open_directory(const char *path,
void *parent_baton,
@@ -1298,8 +1581,9 @@ open_directory(const char *path,
apr_pool_t *dir_pool,
void **child_baton)
{
- struct dir_baton *pb = parent_baton;
- struct dir_baton *db;
+ struct dir_baton_t *pb = parent_baton;
+ struct edit_baton_t *eb = pb->eb;
+ struct dir_baton_t *db;
svn_depth_t subdir_depth = (pb->depth == svn_depth_immediates)
? svn_depth_empty : pb->depth;
@@ -1308,112 +1592,209 @@ open_directory(const char *path,
db = make_dir_baton(path, pb, pb->eb, FALSE, subdir_depth, dir_pool);
*child_baton = db;
- /* Add this path to the parent directory's list of elements that
- have been compared. */
- apr_hash_set(pb->compared, apr_pstrdup(pb->pool, db->path),
- APR_HASH_KEY_STRING, "");
+ if (pb->repos_only)
+ db->repos_only = TRUE;
+ else
+ {
+ struct svn_wc__db_info_t *info;
+ SVN_ERR(ensure_local_info(pb, dir_pool));
+
+ info = svn_hash_gets(pb->local_info, db->name);
+
+ if (!info || info->kind != svn_node_dir || NOT_PRESENT(info->status))
+ db->repos_only = TRUE;
+
+ if (!db->repos_only)
+ switch (info->status)
+ {
+ case svn_wc__db_status_normal:
+ break;
+ case svn_wc__db_status_deleted:
+ db->repos_only = TRUE;
+
+ if (!info->have_more_work)
+ svn_hash_sets(pb->compared,
+ apr_pstrdup(pb->pool, db->name), "");
+ break;
+ case svn_wc__db_status_added:
+ if (eb->ignore_ancestry)
+ db->ignoring_ancestry = TRUE;
+ else
+ db->repos_only = TRUE;
+ break;
+ default:
+ SVN_ERR_MALFUNCTION();
+ }
+
+ if (!db->repos_only)
+ {
+ db->right_src = svn_diff__source_create(SVN_INVALID_REVNUM, db->pool);
+ svn_hash_sets(pb->compared, apr_pstrdup(pb->pool, db->name), "");
+ }
+ }
- SVN_ERR(db->eb->callbacks->dir_opened(NULL, NULL, NULL,
- path, base_revision,
- db->eb->callback_baton, dir_pool));
+ db->left_src = svn_diff__source_create(eb->revnum, db->pool);
+
+ if (eb->local_before_remote && !db->repos_only && !db->ignoring_ancestry)
+ SVN_ERR(handle_local_only(pb, db->name, dir_pool));
+
+ SVN_ERR(eb->processor->dir_opened(&db->pdb, &db->skip, &db->skip_children,
+ db->relpath,
+ db->left_src,
+ db->right_src,
+ NULL /* copyfrom src */,
+ pb->pdb,
+ eb->processor,
+ db->pool, db->pool));
return SVN_NO_ERROR;
}
-/* An editor function. When a directory is closed, all the directory
- * elements that have been added or replaced will already have been
+/* An svn_delta_editor_t function. When a directory is closed, all the
+ * directory elements that have been added or replaced will already have been
* diff'd. However there may be other elements in the working copy
* that have not yet been considered. */
static svn_error_t *
close_directory(void *dir_baton,
apr_pool_t *pool)
{
- struct dir_baton *db = dir_baton;
- struct edit_baton *eb = db->eb;
+ struct dir_baton_t *db = dir_baton;
+ struct dir_baton_t *pb = db->parent_baton;
+ struct edit_baton_t *eb = db->eb;
apr_pool_t *scratch_pool = db->pool;
+ svn_boolean_t reported_closed = FALSE;
- /* Report the property changes on the directory itself, if necessary. */
- if (db->propchanges->nelts > 0)
+ if (!db->skip_children && db->deletes && apr_hash_count(db->deletes))
{
- /* The working copy properties at the base of the wc->repos comparison:
- either BASE or WORKING. */
- apr_hash_t *originalprops;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ apr_array_header_t *children;
+ int i;
+ children = svn_sort__hash(db->deletes, svn_sort_compare_items_lexically,
+ scratch_pool);
- if (db->added)
+ for (i = 0; i < children->nelts; i++)
{
- originalprops = apr_hash_make(scratch_pool);
- }
- else
- {
- if (db->eb->use_text_base)
- {
- SVN_ERR(svn_wc__get_pristine_props(&originalprops,
- eb->db, db->local_abspath,
- scratch_pool, scratch_pool));
- }
- else
- {
- apr_hash_t *base_props, *repos_props;
-
- SVN_ERR(svn_wc__get_actual_props(&originalprops,
- eb->db, db->local_abspath,
- scratch_pool, scratch_pool));
+ svn_sort__item_t *item = &APR_ARRAY_IDX(children, i,
+ svn_sort__item_t);
+ const char *name = item->key;
- /* Load the BASE and repository directory properties. */
- SVN_ERR(svn_wc__get_pristine_props(&base_props,
- eb->db, db->local_abspath,
- scratch_pool, scratch_pool));
+ svn_pool_clear(iterpool);
+ SVN_ERR(handle_local_only(db, name, iterpool));
- repos_props = apply_propchanges(base_props, db->propchanges);
-
- /* Recalculate b->propchanges as the change between WORKING
- and repos. */
- SVN_ERR(svn_prop_diffs(&db->propchanges, repos_props,
- originalprops, scratch_pool));
- }
+ svn_hash_sets(db->compared, name, "");
}
- if (!eb->reverse_order)
- reverse_propchanges(originalprops, db->propchanges, db->pool);
-
- SVN_ERR(eb->callbacks->dir_props_changed(NULL, NULL,
- db->path,
- db->added,
- db->propchanges,
- originalprops,
- eb->callback_baton,
- scratch_pool));
-
- /* Mark the properties of this directory as having already been
- compared so that we know not to show any local modifications
- later on. */
- apr_hash_set(db->compared, db->path, 0, "");
+ svn_pool_destroy(iterpool);
}
/* Report local modifications for this directory. Skip added
directories since they can only contain added elements, all of
which have already been diff'd. */
- if (!db->added)
+ if (!db->repos_only && !db->skip_children)
+ {
SVN_ERR(walk_local_nodes_diff(eb,
db->local_abspath,
- db->path,
+ db->relpath,
db->depth,
db->compared,
+ db->pdb,
scratch_pool));
+ }
+
+ /* Report the property changes on the directory itself, if necessary. */
+ if (db->skip)
+ {
+ /* Diff processor requested no directory details */
+ }
+ else if (db->propchanges->nelts > 0 || db->repos_only)
+ {
+ apr_hash_t *repos_props;
+
+ if (db->added)
+ {
+ repos_props = apr_hash_make(scratch_pool);
+ }
+ else
+ {
+ SVN_ERR(svn_wc__db_base_get_props(&repos_props,
+ eb->db, db->local_abspath,
+ scratch_pool, scratch_pool));
+ }
+
+ /* Add received property changes and entry props */
+ if (db->propchanges->nelts)
+ repos_props = svn_prop__patch(repos_props, db->propchanges,
+ scratch_pool);
+
+ if (db->repos_only)
+ {
+ SVN_ERR(eb->processor->dir_deleted(db->relpath,
+ db->left_src,
+ repos_props,
+ db->pdb,
+ eb->processor,
+ scratch_pool));
+ reported_closed = TRUE;
+ }
+ else
+ {
+ apr_hash_t *local_props;
+ apr_array_header_t *prop_changes;
+
+ if (eb->diff_pristine)
+ SVN_ERR(svn_wc__db_read_pristine_info(NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ &local_props,
+ eb->db, db->local_abspath,
+ scratch_pool, scratch_pool));
+ else
+ SVN_ERR(svn_wc__db_read_props(&local_props,
+ eb->db, db->local_abspath,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(svn_prop_diffs(&prop_changes, local_props, repos_props,
+ scratch_pool));
+
+ /* ### as a good diff processor we should now only report changes
+ if there are non-entry changes, but for now we stick to
+ compatibility */
+
+ if (prop_changes->nelts)
+ {
+ SVN_ERR(eb->processor->dir_changed(db->relpath,
+ db->left_src,
+ db->right_src,
+ repos_props,
+ local_props,
+ prop_changes,
+ db->pdb,
+ eb->processor,
+ scratch_pool));
+ reported_closed = TRUE;
+ }
+ }
+ }
/* Mark this directory as compared in the parent directory's baton,
unless this is the root of the comparison. */
- SVN_ERR(db->eb->callbacks->dir_closed(NULL, NULL, NULL, db->path,
- db->added, db->eb->callback_baton,
- scratch_pool));
+ if (!reported_closed && !db->skip)
+ SVN_ERR(eb->processor->dir_closed(db->relpath,
+ db->left_src,
+ db->right_src,
+ db->pdb,
+ eb->processor,
+ scratch_pool));
- svn_pool_destroy(db->pool); /* destroys scratch_pool */
+ if (pb && !eb->local_before_remote && !db->repos_only && !db->ignoring_ancestry)
+ SVN_ERR(handle_local_only(pb, db->name, scratch_pool));
+
+ SVN_ERR(maybe_done(db)); /* destroys scratch_pool */
return SVN_NO_ERROR;
}
-/* An editor function. */
+/* An svn_delta_editor_t function. */
static svn_error_t *
add_file(const char *path,
void *parent_baton,
@@ -1422,23 +1803,59 @@ add_file(const char *path,
apr_pool_t *file_pool,
void **file_baton)
{
- struct dir_baton *pb = parent_baton;
- struct file_baton *fb;
-
- /* ### TODO: support copyfrom? */
+ struct dir_baton_t *pb = parent_baton;
+ struct edit_baton_t *eb = pb->eb;
+ struct file_baton_t *fb;
fb = make_file_baton(path, TRUE, pb, file_pool);
*file_baton = fb;
- /* Add this filename to the parent directory's list of elements that
- have been compared. */
- apr_hash_set(pb->compared, apr_pstrdup(pb->pool, path),
- APR_HASH_KEY_STRING, "");
+ if (pb->skip_children)
+ {
+ fb->skip = TRUE;
+ return SVN_NO_ERROR;
+ }
+ else if (pb->repos_only || !eb->ignore_ancestry)
+ fb->repos_only = TRUE;
+ else
+ {
+ struct svn_wc__db_info_t *info;
+ SVN_ERR(ensure_local_info(pb, file_pool));
+
+ info = svn_hash_gets(pb->local_info, fb->name);
+
+ if (!info || info->kind != svn_node_file || NOT_PRESENT(info->status))
+ fb->repos_only = TRUE;
+
+ if (!fb->repos_only && info->status != svn_wc__db_status_added)
+ fb->repos_only = TRUE;
+
+ if (!fb->repos_only)
+ {
+ /* Add this path to the parent directory's list of elements that
+ have been compared. */
+ fb->right_src = svn_diff__source_create(SVN_INVALID_REVNUM, fb->pool);
+ fb->ignoring_ancestry = TRUE;
+
+ svn_hash_sets(pb->compared, apr_pstrdup(pb->pool, fb->name), "");
+ }
+ }
+
+ fb->left_src = svn_diff__source_create(eb->revnum, fb->pool);
+
+ SVN_ERR(eb->processor->file_opened(&fb->pfb, &fb->skip,
+ fb->relpath,
+ fb->left_src,
+ fb->right_src,
+ NULL /* copyfrom src */,
+ pb->pdb,
+ eb->processor,
+ fb->pool, fb->pool));
return SVN_NO_ERROR;
}
-/* An editor function. */
+/* An svn_delta_editor_t function. */
static svn_error_t *
open_file(const char *path,
void *parent_baton,
@@ -1446,81 +1863,141 @@ open_file(const char *path,
apr_pool_t *file_pool,
void **file_baton)
{
- struct dir_baton *pb = parent_baton;
- struct edit_baton *eb = pb->eb;
- struct file_baton *fb;
+ struct dir_baton_t *pb = parent_baton;
+ struct edit_baton_t *eb = pb->eb;
+ struct file_baton_t *fb;
fb = make_file_baton(path, FALSE, pb, file_pool);
*file_baton = fb;
- /* Add this filename to the parent directory's list of elements that
- have been compared. */
- apr_hash_set(pb->compared, apr_pstrdup(pb->pool, path),
- APR_HASH_KEY_STRING, "");
+ if (pb->skip_children)
+ fb->skip = TRUE;
+ else if (pb->repos_only)
+ fb->repos_only = TRUE;
+ else
+ {
+ struct svn_wc__db_info_t *info;
+ SVN_ERR(ensure_local_info(pb, file_pool));
+
+ info = svn_hash_gets(pb->local_info, fb->name);
+
+ if (!info || info->kind != svn_node_file || NOT_PRESENT(info->status))
+ fb->repos_only = TRUE;
+
+ if (!fb->repos_only)
+ switch (info->status)
+ {
+ case svn_wc__db_status_normal:
+ break;
+ case svn_wc__db_status_deleted:
+ fb->repos_only = TRUE;
+ if (!info->have_more_work)
+ svn_hash_sets(pb->compared,
+ apr_pstrdup(pb->pool, fb->name), "");
+ break;
+ case svn_wc__db_status_added:
+ if (eb->ignore_ancestry)
+ fb->ignoring_ancestry = TRUE;
+ else
+ fb->repos_only = TRUE;
+ break;
+ default:
+ SVN_ERR_MALFUNCTION();
+ }
+
+ if (!fb->repos_only)
+ {
+ /* Add this path to the parent directory's list of elements that
+ have been compared. */
+ fb->right_src = svn_diff__source_create(SVN_INVALID_REVNUM, fb->pool);
+ svn_hash_sets(pb->compared, apr_pstrdup(pb->pool, fb->name), "");
+ }
+ }
+
+ fb->left_src = svn_diff__source_create(eb->revnum, fb->pool);
SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, &fb->base_checksum, NULL,
- NULL, NULL, NULL,
+ NULL, NULL, &fb->base_props, NULL,
eb->db, fb->local_abspath,
fb->pool, fb->pool));
- SVN_ERR(eb->callbacks->file_opened(NULL, NULL, fb->path, base_revision,
- eb->callback_baton, fb->pool));
+ SVN_ERR(eb->processor->file_opened(&fb->pfb, &fb->skip,
+ fb->relpath,
+ fb->left_src,
+ fb->right_src,
+ NULL /* copyfrom src */,
+ pb->pdb,
+ eb->processor,
+ fb->pool, fb->pool));
return SVN_NO_ERROR;
}
-/* Baton for window_handler */
-struct window_handler_baton
-{
- struct file_baton *fb;
-
- /* APPLY_HANDLER/APPLY_BATON represent the delta applcation baton. */
- svn_txdelta_window_handler_t apply_handler;
- void *apply_baton;
-
- unsigned char result_digest[APR_MD5_DIGESTSIZE];
-};
-
-/* Do the work of applying the text delta. */
-static svn_error_t *
-window_handler(svn_txdelta_window_t *window,
- void *window_baton)
-{
- struct window_handler_baton *whb = window_baton;
- struct file_baton *fb = whb->fb;
-
- SVN_ERR(whb->apply_handler(window, whb->apply_baton));
-
- if (!window)
- {
- fb->result_checksum = svn_checksum__from_digest(whb->result_digest,
- svn_checksum_md5,
- fb->pool);
- }
-
- return SVN_NO_ERROR;
-}
-
-/* An editor function. */
+/* An svn_delta_editor_t function. */
static svn_error_t *
apply_textdelta(void *file_baton,
- const char *base_checksum,
+ const char *base_checksum_hex,
apr_pool_t *pool,
svn_txdelta_window_handler_t *handler,
void **handler_baton)
{
- struct file_baton *fb = file_baton;
- struct window_handler_baton *whb;
- struct edit_baton *eb = fb->eb;
+ struct file_baton_t *fb = file_baton;
+ struct edit_baton_t *eb = fb->eb;
svn_stream_t *source;
svn_stream_t *temp_stream;
+ svn_checksum_t *repos_checksum = NULL;
+
+ if (fb->skip)
+ {
+ *handler = svn_delta_noop_window_handler;
+ *handler_baton = NULL;
+ return SVN_NO_ERROR;
+ }
+
+ if (base_checksum_hex && fb->base_checksum)
+ {
+ const svn_checksum_t *base_md5;
+ SVN_ERR(svn_checksum_parse_hex(&repos_checksum, svn_checksum_md5,
+ base_checksum_hex, pool));
- if (fb->base_checksum)
- SVN_ERR(svn_wc__db_pristine_read(&source, NULL,
- eb->db, fb->local_abspath,
- fb->base_checksum,
- pool, pool));
+ SVN_ERR(svn_wc__db_pristine_get_md5(&base_md5,
+ eb->db, eb->anchor_abspath,
+ fb->base_checksum,
+ pool, pool));
+
+ if (! svn_checksum_match(repos_checksum, base_md5))
+ {
+ /* ### I expect that there are some bad drivers out there
+ ### that used to give bad results. We could look in
+ ### working to see if the expected checksum matches and
+ ### then return the pristine of that... But that only moves
+ ### the problem */
+
+ /* If needed: compare checksum obtained via md5 of working.
+ And if they match set fb->base_checksum and fb->base_props */
+
+ return svn_checksum_mismatch_err(
+ base_md5,
+ repos_checksum,
+ pool,
+ _("Checksum mismatch for '%s'"),
+ svn_dirent_local_style(fb->local_abspath,
+ pool));
+ }
+
+ SVN_ERR(svn_wc__db_pristine_read(&source, NULL,
+ eb->db, fb->local_abspath,
+ fb->base_checksum,
+ pool, pool));
+ }
+ else if (fb->base_checksum)
+ {
+ SVN_ERR(svn_wc__db_pristine_read(&source, NULL,
+ eb->db, fb->local_abspath,
+ fb->base_checksum,
+ pool, pool));
+ }
else
source = svn_stream_empty(pool);
@@ -1529,21 +2006,16 @@ apply_textdelta(void *file_baton,
svn_io_file_del_on_pool_cleanup,
fb->pool, fb->pool));
- whb = apr_pcalloc(fb->pool, sizeof(*whb));
- whb->fb = fb;
-
svn_txdelta_apply(source, temp_stream,
- whb->result_digest,
- fb->path /* error_info */,
+ fb->result_digest,
+ fb->local_abspath /* error_info */,
fb->pool,
- &whb->apply_handler, &whb->apply_baton);
+ handler, handler_baton);
- *handler = window_handler;
- *handler_baton = whb;
return SVN_NO_ERROR;
}
-/* An editor function. When the file is closed we have a temporary
+/* An svn_delta_editor_t function. When the file is closed we have a temporary
* file containing a pristine version of the repository file. This can
* be compared against the working copy.
*
@@ -1554,256 +2026,170 @@ close_file(void *file_baton,
const char *expected_md5_digest,
apr_pool_t *pool)
{
- struct file_baton *fb = file_baton;
- struct edit_baton *eb = fb->eb;
- svn_wc__db_t *db = eb->db;
+ struct file_baton_t *fb = file_baton;
+ struct dir_baton_t *pb = fb->parent_baton;
+ struct edit_baton_t *eb = fb->eb;
apr_pool_t *scratch_pool = fb->pool;
- svn_wc__db_status_t status;
- const char *empty_file;
- svn_error_t *err;
-
- /* The BASE information */
- const svn_checksum_t *pristine_checksum;
- const char *pristine_file;
- apr_hash_t *pristine_props;
/* The repository information; constructed from BASE + Changes */
const char *repos_file;
apr_hash_t *repos_props;
- const char *repos_mimetype;
- svn_boolean_t had_props, props_mod;
- /* The path to the wc file: either a pristine or actual. */
- const char *localfile;
- svn_boolean_t modified;
- /* The working copy properties at the base of the wc->repos
- comparison: either BASE or WORKING. */
- apr_hash_t *originalprops;
+ if (fb->skip)
+ {
+ svn_pool_destroy(fb->pool); /* destroys scratch_pool and fb */
+ SVN_ERR(maybe_done(pb));
+ return SVN_NO_ERROR;
+ }
if (expected_md5_digest != NULL)
{
svn_checksum_t *expected_checksum;
- const svn_checksum_t *repos_checksum = fb->result_checksum;
+ const svn_checksum_t *result_checksum;
+
+ if (fb->temp_file_path)
+ result_checksum = svn_checksum__from_digest_md5(fb->result_digest,
+ scratch_pool);
+ else
+ result_checksum = fb->base_checksum;
SVN_ERR(svn_checksum_parse_hex(&expected_checksum, svn_checksum_md5,
expected_md5_digest, scratch_pool));
- if (repos_checksum == NULL)
- repos_checksum = fb->base_checksum;
-
- if (repos_checksum->kind != svn_checksum_md5)
- SVN_ERR(svn_wc__db_pristine_get_md5(&repos_checksum,
+ if (result_checksum->kind != svn_checksum_md5)
+ SVN_ERR(svn_wc__db_pristine_get_md5(&result_checksum,
eb->db, fb->local_abspath,
- repos_checksum,
+ result_checksum,
scratch_pool, scratch_pool));
- if (!svn_checksum_match(expected_checksum, repos_checksum))
+ if (!svn_checksum_match(expected_checksum, result_checksum))
return svn_checksum_mismatch_err(
expected_checksum,
- repos_checksum,
+ result_checksum,
pool,
_("Checksum mismatch for '%s'"),
svn_dirent_local_style(fb->local_abspath,
scratch_pool));
}
- err = svn_wc__db_read_info(&status, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, &pristine_checksum, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, &had_props, &props_mod,
- NULL, NULL, NULL,
- db, fb->local_abspath,
- scratch_pool, scratch_pool);
- if (fb->added
- && err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
- {
- svn_error_clear(err);
- status = svn_wc__db_status_not_present;
- pristine_checksum = NULL;
- had_props = FALSE;
- props_mod = FALSE;
- }
- else
- SVN_ERR(err);
+ if (eb->local_before_remote && !fb->repos_only && !fb->ignoring_ancestry)
+ SVN_ERR(handle_local_only(pb, fb->name, scratch_pool));
- SVN_ERR(get_empty_file(eb, &empty_file));
+ {
+ apr_hash_t *prop_base;
- if (fb->added)
+ if (fb->added)
+ prop_base = apr_hash_make(scratch_pool);
+ else
+ prop_base = fb->base_props;
+
+ /* includes entry props */
+ repos_props = svn_prop__patch(prop_base, fb->propchanges, scratch_pool);
+
+ repos_file = fb->temp_file_path;
+ if (! repos_file)
+ {
+ assert(fb->base_checksum);
+ SVN_ERR(svn_wc__db_pristine_get_path(&repos_file,
+ eb->db, eb->anchor_abspath,
+ fb->base_checksum,
+ scratch_pool, scratch_pool));
+ }
+ }
+
+ if (fb->repos_only)
{
- pristine_props = apr_hash_make(scratch_pool);
- pristine_file = empty_file;
+ SVN_ERR(eb->processor->file_deleted(fb->relpath,
+ fb->left_src,
+ fb->temp_file_path,
+ repos_props,
+ fb->pfb,
+ eb->processor,
+ scratch_pool));
}
else
{
- if (status != svn_wc__db_status_normal)
- SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- &pristine_checksum,
- NULL, NULL,
- &had_props, NULL,
- db, fb->local_abspath,
- scratch_pool, scratch_pool));
+ /* Produce a diff of actual or pristine against repos */
+ apr_hash_t *local_props;
+ apr_array_header_t *prop_changes;
+ const char *localfile;
- SVN_ERR(svn_wc__db_pristine_get_path(&pristine_file,
- db, fb->local_abspath,
- pristine_checksum,
- scratch_pool, scratch_pool));
+ /* pb->local_info contains some information that might allow optimizing
+ this a bit */
- if (had_props)
- SVN_ERR(svn_wc__db_base_get_props(&pristine_props,
- db, fb->local_abspath,
- scratch_pool, scratch_pool));
+ if (eb->diff_pristine)
+ {
+ const svn_checksum_t *checksum;
+ SVN_ERR(svn_wc__db_read_pristine_info(NULL, NULL, NULL, NULL, NULL,
+ NULL, &checksum, NULL, NULL,
+ &local_props,
+ eb->db, fb->local_abspath,
+ scratch_pool, scratch_pool));
+ assert(checksum);
+ SVN_ERR(svn_wc__db_pristine_get_path(&localfile,
+ eb->db, eb->anchor_abspath,
+ checksum,
+ scratch_pool, scratch_pool));
+ }
else
- pristine_props = apr_hash_make(scratch_pool);
- }
-
- if (status == svn_wc__db_status_added)
- SVN_ERR(svn_wc__db_scan_addition(&status, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, eb->db,
- fb->local_abspath,
- scratch_pool, scratch_pool));
-
- repos_props = apply_propchanges(pristine_props, fb->propchanges);
- repos_mimetype = get_prop_mimetype(repos_props);
- repos_file = fb->temp_file_path ? fb->temp_file_path : pristine_file;
+ {
+ SVN_ERR(svn_wc__db_read_props(&local_props,
+ eb->db, fb->local_abspath,
+ scratch_pool, scratch_pool));
- /* If the file isn't in the working copy (either because it was added
- in the BASE->repos diff or because we're diffing against WORKING
- and it was marked as schedule-deleted), we show either an addition
- or a deletion of the complete contents of the repository file,
- depending upon the direction of the diff. */
- if (fb->added || (!eb->use_text_base && status == svn_wc__db_status_deleted))
- {
- if (eb->reverse_order)
- return eb->callbacks->file_added(NULL, NULL, NULL, fb->path,
- empty_file,
- repos_file,
- 0,
- eb->revnum,
- NULL,
- repos_mimetype,
- NULL, SVN_INVALID_REVNUM,
- fb->propchanges,
- apr_hash_make(pool),
- eb->callback_baton,
- scratch_pool);
- else
- return eb->callbacks->file_deleted(NULL, NULL, fb->path,
- repos_file,
- empty_file,
- repos_mimetype,
- NULL,
- repos_props,
- eb->callback_baton,
- scratch_pool);
- }
+ /* a detranslated version of the working file */
+ SVN_ERR(svn_wc__internal_translated_file(
+ &localfile, fb->local_abspath, eb->db, fb->local_abspath,
+ SVN_WC_TRANSLATE_TO_NF | SVN_WC_TRANSLATE_USE_GLOBAL_TMP,
+ eb->cancel_func, eb->cancel_baton,
+ scratch_pool, scratch_pool));
+ }
- /* If the file was locally added with history, and we want to show copies
- * as added, diff the file with the empty file. */
- if ((status == svn_wc__db_status_copied ||
- status == svn_wc__db_status_moved_here) && eb->show_copies_as_adds)
- return eb->callbacks->file_added(NULL, NULL, NULL, fb->path,
- empty_file,
- fb->local_abspath,
- 0,
- eb->revnum,
- NULL,
- repos_mimetype,
- NULL, SVN_INVALID_REVNUM,
- fb->propchanges,
- apr_hash_make(pool),
- eb->callback_baton,
- scratch_pool);
-
- /* If we didn't see any content changes between the BASE and repository
- versions (i.e. we only saw property changes), then, if we're diffing
- against WORKING, we also need to check whether there are any local
- (BASE:WORKING) modifications. */
- modified = (fb->temp_file_path != NULL);
- if (!modified && !eb->use_text_base)
- SVN_ERR(svn_wc__internal_file_modified_p(&modified, eb->db,
- fb->local_abspath,
- FALSE, scratch_pool));
-
- if (modified)
- {
- if (eb->use_text_base)
- SVN_ERR(get_pristine_file(&localfile, eb->db, fb->local_abspath,
- FALSE, scratch_pool, scratch_pool));
- else
- /* a detranslated version of the working file */
- SVN_ERR(svn_wc__internal_translated_file(
- &localfile, fb->local_abspath, eb->db, fb->local_abspath,
- SVN_WC_TRANSLATE_TO_NF | SVN_WC_TRANSLATE_USE_GLOBAL_TMP,
- eb->cancel_func, eb->cancel_baton,
- scratch_pool, scratch_pool));
- }
- else
- localfile = repos_file = NULL;
+ SVN_ERR(svn_prop_diffs(&prop_changes, local_props, repos_props,
+ scratch_pool));
- if (eb->use_text_base)
- {
- originalprops = pristine_props;
- }
- else
- {
- SVN_ERR(svn_wc__get_actual_props(&originalprops,
- eb->db, fb->local_abspath,
- scratch_pool, scratch_pool));
- /* We have the repository properties in repos_props, and the
- WORKING properties in originalprops. Recalculate
- fb->propchanges as the change between WORKING and repos. */
- SVN_ERR(svn_prop_diffs(&fb->propchanges,
- repos_props, originalprops, scratch_pool));
+ /* ### as a good diff processor we should now only report changes, and
+ report file_closed() in other cases */
+ SVN_ERR(eb->processor->file_changed(fb->relpath,
+ fb->left_src,
+ fb->right_src,
+ repos_file /* left file */,
+ localfile /* right file */,
+ repos_props /* left_props */,
+ local_props /* right props */,
+ TRUE /* ### file_modified */,
+ prop_changes,
+ fb->pfb,
+ eb->processor,
+ scratch_pool));
}
- if (localfile || fb->propchanges->nelts > 0)
- {
- const char *original_mimetype = get_prop_mimetype(originalprops);
-
- if (fb->propchanges->nelts > 0
- && ! eb->reverse_order)
- reverse_propchanges(originalprops, fb->propchanges, scratch_pool);
-
- SVN_ERR(eb->callbacks->file_changed(NULL, NULL, NULL,
- fb->path,
- eb->reverse_order ? localfile
- : repos_file,
- eb->reverse_order
- ? repos_file
- : localfile,
- eb->reverse_order
- ? SVN_INVALID_REVNUM
- : eb->revnum,
- eb->reverse_order
- ? eb->revnum
- : SVN_INVALID_REVNUM,
- eb->reverse_order
- ? original_mimetype
- : repos_mimetype,
- eb->reverse_order
- ? repos_mimetype
- : original_mimetype,
- fb->propchanges, originalprops,
- eb->callback_baton,
- scratch_pool));
- }
+ if (!eb->local_before_remote && !fb->repos_only && !fb->ignoring_ancestry)
+ SVN_ERR(handle_local_only(pb, fb->name, scratch_pool));
- svn_pool_destroy(fb->pool); /* destroys scratch_pool */
+ svn_pool_destroy(fb->pool); /* destroys scratch_pool and fb */
+ SVN_ERR(maybe_done(pb));
return SVN_NO_ERROR;
}
-/* An editor function. */
+/* An svn_delta_editor_t function. */
static svn_error_t *
change_file_prop(void *file_baton,
const char *name,
const svn_string_t *value,
apr_pool_t *pool)
{
- struct file_baton *fb = file_baton;
+ struct file_baton_t *fb = file_baton;
svn_prop_t *propchange;
+ svn_prop_kind_t propkind;
+
+ propkind = svn_property_kind2(name);
+ if (propkind == svn_prop_wc_kind)
+ return SVN_NO_ERROR;
+ else if (propkind == svn_prop_regular_kind)
+ fb->has_propchange = TRUE;
propchange = apr_array_push(fb->propchanges);
propchange->name = apr_pstrdup(fb->pool, name);
@@ -1813,15 +2199,22 @@ change_file_prop(void *file_baton,
}
-/* An editor function. */
+/* An svn_delta_editor_t function. */
static svn_error_t *
change_dir_prop(void *dir_baton,
const char *name,
const svn_string_t *value,
apr_pool_t *pool)
{
- struct dir_baton *db = dir_baton;
+ struct dir_baton_t *db = dir_baton;
svn_prop_t *propchange;
+ svn_prop_kind_t propkind;
+
+ propkind = svn_property_kind2(name);
+ if (propkind == svn_prop_wc_kind)
+ return SVN_NO_ERROR;
+ else if (propkind == svn_prop_regular_kind)
+ db->has_propchange = TRUE;
propchange = apr_array_push(db->propchanges);
propchange->name = apr_pstrdup(db->pool, name);
@@ -1831,12 +2224,12 @@ change_dir_prop(void *dir_baton,
}
-/* An editor function. */
+/* An svn_delta_editor_t function. */
static svn_error_t *
close_edit(void *edit_baton,
apr_pool_t *pool)
{
- struct edit_baton *eb = edit_baton;
+ struct edit_baton_t *eb = edit_baton;
if (!eb->root_opened)
{
@@ -1844,7 +2237,8 @@ close_edit(void *edit_baton,
eb->anchor_abspath,
"",
eb->depth,
- NULL,
+ NULL /* compared */,
+ NULL /* No parent_baton */,
eb->pool));
}
@@ -1856,7 +2250,7 @@ close_edit(void *edit_baton,
/* Create a diff editor and baton. */
svn_error_t *
-svn_wc_get_diff_editor6(const svn_delta_editor_t **editor,
+svn_wc__get_diff_editor(const svn_delta_editor_t **editor,
void **edit_baton,
svn_wc_context_t *wc_ctx,
const char *anchor_abspath,
@@ -1876,20 +2270,43 @@ svn_wc_get_diff_editor6(const svn_delta_editor_t **editor,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- struct edit_baton *eb;
+ struct edit_baton_t *eb;
void *inner_baton;
svn_delta_editor_t *tree_editor;
const svn_delta_editor_t *inner_editor;
+ struct svn_wc__shim_fetch_baton_t *sfb;
+ svn_delta_shim_callbacks_t *shim_callbacks =
+ svn_delta_shim_callbacks_default(result_pool);
+ const svn_diff_tree_processor_t *diff_processor;
SVN_ERR_ASSERT(svn_dirent_is_absolute(anchor_abspath));
+ /* --git implies --show-copies-as-adds */
+ if (use_git_diff_format)
+ show_copies_as_adds = TRUE;
+
+ SVN_ERR(svn_wc__wrap_diff_callbacks(&diff_processor,
+ callbacks, callback_baton, TRUE,
+ result_pool, scratch_pool));
+
+ /* Apply changelist filtering to the output */
+ if (changelist_filter && changelist_filter->nelts)
+ {
+ apr_hash_t *changelist_hash;
+
+ SVN_ERR(svn_hash_from_cstring_keys(&changelist_hash, changelist_filter,
+ result_pool));
+ diff_processor = svn_wc__changelist_filter_tree_processor_create(
+ diff_processor, wc_ctx, anchor_abspath,
+ changelist_hash, result_pool);
+ }
+
SVN_ERR(make_edit_baton(&eb,
wc_ctx->db,
anchor_abspath, target,
- callbacks, callback_baton,
+ diff_processor,
depth, ignore_ancestry, show_copies_as_adds,
- use_git_diff_format,
- use_text_base, reverse_order, changelist_filter,
+ use_text_base, reverse_order,
cancel_func, cancel_baton,
result_pool));
@@ -1923,11 +2340,761 @@ svn_wc_get_diff_editor6(const svn_delta_editor_t **editor,
inner_baton,
result_pool));
- return svn_delta_get_cancellation_editor(cancel_func,
- cancel_baton,
- inner_editor,
- inner_baton,
- editor,
- edit_baton,
- result_pool);
+ SVN_ERR(svn_delta_get_cancellation_editor(cancel_func,
+ cancel_baton,
+ inner_editor,
+ inner_baton,
+ editor,
+ edit_baton,
+ result_pool));
+
+ sfb = apr_palloc(result_pool, sizeof(*sfb));
+ sfb->db = wc_ctx->db;
+ sfb->base_abspath = eb->anchor_abspath;
+ sfb->fetch_base = TRUE;
+
+ shim_callbacks->fetch_kind_func = svn_wc__fetch_kind_func;
+ shim_callbacks->fetch_props_func = svn_wc__fetch_props_func;
+ shim_callbacks->fetch_base_func = svn_wc__fetch_base_func;
+ shim_callbacks->fetch_baton = sfb;
+
+
+ SVN_ERR(svn_editor__insert_shims(editor, edit_baton, *editor, *edit_baton,
+ NULL, NULL, shim_callbacks,
+ result_pool, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* Wrapping svn_wc_diff_callbacks4_t as svn_diff_tree_processor_t */
+
+/* baton for the svn_diff_tree_processor_t wrapper */
+typedef struct wc_diff_wrap_baton_t
+{
+ const svn_wc_diff_callbacks4_t *callbacks;
+ void *callback_baton;
+
+ svn_boolean_t walk_deleted_dirs;
+
+ apr_pool_t *result_pool;
+ const char *empty_file;
+
+} wc_diff_wrap_baton_t;
+
+static svn_error_t *
+wrap_ensure_empty_file(wc_diff_wrap_baton_t *wb,
+ apr_pool_t *scratch_pool)
+{
+ if (wb->empty_file)
+ return SVN_NO_ERROR;
+
+ /* Create a unique file in the tempdir */
+ SVN_ERR(svn_io_open_unique_file3(NULL, &wb->empty_file, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ wb->result_pool, scratch_pool));
+
+ return SVN_NO_ERROR;
}
+
+/* svn_diff_tree_processor_t function */
+static svn_error_t *
+wrap_dir_opened(void **new_dir_baton,
+ svn_boolean_t *skip,
+ svn_boolean_t *skip_children,
+ const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const svn_diff_source_t *copyfrom_source,
+ void *parent_dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ wc_diff_wrap_baton_t *wb = processor->baton;
+ svn_boolean_t tree_conflicted = FALSE;
+
+ assert(left_source || right_source); /* Must exist at one point. */
+ assert(!left_source || !copyfrom_source); /* Either existed or added. */
+
+ /* Maybe store state and tree_conflicted in baton? */
+ if (left_source != NULL)
+ {
+ /* Open for change or delete */
+ SVN_ERR(wb->callbacks->dir_opened(&tree_conflicted, skip, skip_children,
+ relpath,
+ right_source
+ ? right_source->revision
+ : (left_source
+ ? left_source->revision
+ : SVN_INVALID_REVNUM),
+ wb->callback_baton,
+ scratch_pool));
+
+ if (! right_source && !wb->walk_deleted_dirs)
+ *skip_children = TRUE;
+ }
+ else /* left_source == NULL -> Add */
+ {
+ svn_wc_notify_state_t state = svn_wc_notify_state_inapplicable;
+ SVN_ERR(wb->callbacks->dir_added(&state, &tree_conflicted,
+ skip, skip_children,
+ relpath,
+ right_source->revision,
+ copyfrom_source
+ ? copyfrom_source->repos_relpath
+ : NULL,
+ copyfrom_source
+ ? copyfrom_source->revision
+ : SVN_INVALID_REVNUM,
+ wb->callback_baton,
+ scratch_pool));
+ }
+
+ *new_dir_baton = NULL;
+
+ return SVN_NO_ERROR;
+}
+
+/* svn_diff_tree_processor_t function */
+static svn_error_t *
+wrap_dir_added(const char *relpath,
+ const svn_diff_source_t *right_source,
+ const svn_diff_source_t *copyfrom_source,
+ /*const*/ apr_hash_t *copyfrom_props,
+ /*const*/ apr_hash_t *right_props,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ wc_diff_wrap_baton_t *wb = processor->baton;
+ svn_boolean_t tree_conflicted = FALSE;
+ svn_wc_notify_state_t state = svn_wc_notify_state_unknown;
+ svn_wc_notify_state_t prop_state = svn_wc_notify_state_unknown;
+ apr_hash_t *pristine_props = copyfrom_props;
+ apr_array_header_t *prop_changes = NULL;
+
+ if (right_props && apr_hash_count(right_props))
+ {
+ if (!pristine_props)
+ pristine_props = apr_hash_make(scratch_pool);
+
+ SVN_ERR(svn_prop_diffs(&prop_changes, right_props, pristine_props,
+ scratch_pool));
+
+ SVN_ERR(wb->callbacks->dir_props_changed(&prop_state,
+ &tree_conflicted,
+ relpath,
+ TRUE /* dir_was_added */,
+ prop_changes, pristine_props,
+ wb->callback_baton,
+ scratch_pool));
+ }
+
+ SVN_ERR(wb->callbacks->dir_closed(&state, &prop_state,
+ &tree_conflicted,
+ relpath,
+ TRUE /* dir_was_added */,
+ wb->callback_baton,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+/* svn_diff_tree_processor_t function */
+static svn_error_t *
+wrap_dir_deleted(const char *relpath,
+ const svn_diff_source_t *left_source,
+ /*const*/ apr_hash_t *left_props,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ wc_diff_wrap_baton_t *wb = processor->baton;
+ svn_boolean_t tree_conflicted = FALSE;
+ svn_wc_notify_state_t state = svn_wc_notify_state_inapplicable;
+
+ SVN_ERR(wb->callbacks->dir_deleted(&state, &tree_conflicted,
+ relpath,
+ wb->callback_baton,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* svn_diff_tree_processor_t function */
+static svn_error_t *
+wrap_dir_closed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ wc_diff_wrap_baton_t *wb = processor->baton;
+
+ /* No previous implementations provided these arguments, so we
+ are not providing them either */
+ SVN_ERR(wb->callbacks->dir_closed(NULL, NULL, NULL,
+ relpath,
+ FALSE /* added */,
+ wb->callback_baton,
+ scratch_pool));
+
+return SVN_NO_ERROR;
+}
+
+/* svn_diff_tree_processor_t function */
+static svn_error_t *
+wrap_dir_changed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ /*const*/ apr_hash_t *left_props,
+ /*const*/ apr_hash_t *right_props,
+ const apr_array_header_t *prop_changes,
+ void *dir_baton,
+ const struct svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ wc_diff_wrap_baton_t *wb = processor->baton;
+ svn_boolean_t tree_conflicted = FALSE;
+ svn_wc_notify_state_t prop_state = svn_wc_notify_state_inapplicable;
+
+ assert(left_source && right_source);
+
+ SVN_ERR(wb->callbacks->dir_props_changed(&prop_state, &tree_conflicted,
+ relpath,
+ FALSE /* dir_was_added */,
+ prop_changes,
+ left_props,
+ wb->callback_baton,
+ scratch_pool));
+
+ /* And call dir_closed, etc */
+ SVN_ERR(wrap_dir_closed(relpath, left_source, right_source,
+ dir_baton, processor,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+/* svn_diff_tree_processor_t function */
+static svn_error_t *
+wrap_file_opened(void **new_file_baton,
+ svn_boolean_t *skip,
+ const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const svn_diff_source_t *copyfrom_source,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ wc_diff_wrap_baton_t *wb = processor->baton;
+ svn_boolean_t tree_conflicted = FALSE;
+
+ if (left_source) /* If ! added */
+ SVN_ERR(wb->callbacks->file_opened(&tree_conflicted, skip, relpath,
+ right_source
+ ? right_source->revision
+ : (left_source
+ ? left_source->revision
+ : SVN_INVALID_REVNUM),
+ wb->callback_baton, scratch_pool));
+
+ /* No old implementation used the output arguments for notify */
+
+ *new_file_baton = NULL;
+ return SVN_NO_ERROR;
+}
+
+/* svn_diff_tree_processor_t function */
+static svn_error_t *
+wrap_file_added(const char *relpath,
+ const svn_diff_source_t *copyfrom_source,
+ const svn_diff_source_t *right_source,
+ const char *copyfrom_file,
+ const char *right_file,
+ /*const*/ apr_hash_t *copyfrom_props,
+ /*const*/ apr_hash_t *right_props,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ wc_diff_wrap_baton_t *wb = processor->baton;
+ svn_boolean_t tree_conflicted = FALSE;
+ svn_wc_notify_state_t state = svn_wc_notify_state_inapplicable;
+ svn_wc_notify_state_t prop_state = svn_wc_notify_state_inapplicable;
+ apr_array_header_t *prop_changes;
+
+ if (! copyfrom_props)
+ copyfrom_props = apr_hash_make(scratch_pool);
+
+ SVN_ERR(svn_prop_diffs(&prop_changes, right_props, copyfrom_props,
+ scratch_pool));
+
+ if (! copyfrom_source)
+ SVN_ERR(wrap_ensure_empty_file(wb, scratch_pool));
+
+ SVN_ERR(wb->callbacks->file_added(&state, &prop_state, &tree_conflicted,
+ relpath,
+ copyfrom_source
+ ? copyfrom_file
+ : wb->empty_file,
+ right_file,
+ 0,
+ right_source->revision,
+ copyfrom_props
+ ? svn_prop_get_value(copyfrom_props,
+ SVN_PROP_MIME_TYPE)
+ : NULL,
+ right_props
+ ? svn_prop_get_value(right_props,
+ SVN_PROP_MIME_TYPE)
+ : NULL,
+ copyfrom_source
+ ? copyfrom_source->repos_relpath
+ : NULL,
+ copyfrom_source
+ ? copyfrom_source->revision
+ : SVN_INVALID_REVNUM,
+ prop_changes, copyfrom_props,
+ wb->callback_baton,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+wrap_file_deleted(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const char *left_file,
+ apr_hash_t *left_props,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ wc_diff_wrap_baton_t *wb = processor->baton;
+ svn_boolean_t tree_conflicted = FALSE;
+ svn_wc_notify_state_t state = svn_wc_notify_state_inapplicable;
+
+ SVN_ERR(wrap_ensure_empty_file(wb, scratch_pool));
+
+ SVN_ERR(wb->callbacks->file_deleted(&state, &tree_conflicted,
+ relpath,
+ left_file, wb->empty_file,
+ left_props
+ ? svn_prop_get_value(left_props,
+ SVN_PROP_MIME_TYPE)
+ : NULL,
+ NULL,
+ left_props,
+ wb->callback_baton,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+/* svn_diff_tree_processor_t function */
+static svn_error_t *
+wrap_file_changed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const char *left_file,
+ const char *right_file,
+ /*const*/ apr_hash_t *left_props,
+ /*const*/ apr_hash_t *right_props,
+ svn_boolean_t file_modified,
+ const apr_array_header_t *prop_changes,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ wc_diff_wrap_baton_t *wb = processor->baton;
+ svn_boolean_t tree_conflicted = FALSE;
+ svn_wc_notify_state_t state = svn_wc_notify_state_inapplicable;
+ svn_wc_notify_state_t prop_state = svn_wc_notify_state_inapplicable;
+
+ SVN_ERR(wrap_ensure_empty_file(wb, scratch_pool));
+
+ assert(left_source && right_source);
+
+ SVN_ERR(wb->callbacks->file_changed(&state, &prop_state, &tree_conflicted,
+ relpath,
+ file_modified ? left_file : NULL,
+ file_modified ? right_file : NULL,
+ left_source->revision,
+ right_source->revision,
+ left_props
+ ? svn_prop_get_value(left_props,
+ SVN_PROP_MIME_TYPE)
+ : NULL,
+ right_props
+ ? svn_prop_get_value(right_props,
+ SVN_PROP_MIME_TYPE)
+ : NULL,
+ prop_changes,
+ left_props,
+ wb->callback_baton,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__wrap_diff_callbacks(const svn_diff_tree_processor_t **diff_processor,
+ const svn_wc_diff_callbacks4_t *callbacks,
+ void *callback_baton,
+ svn_boolean_t walk_deleted_dirs,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ wc_diff_wrap_baton_t *wrap_baton;
+ svn_diff_tree_processor_t *processor;
+
+ wrap_baton = apr_pcalloc(result_pool, sizeof(*wrap_baton));
+
+ wrap_baton->result_pool = result_pool;
+ wrap_baton->callbacks = callbacks;
+ wrap_baton->callback_baton = callback_baton;
+ wrap_baton->empty_file = NULL;
+ wrap_baton->walk_deleted_dirs = walk_deleted_dirs;
+
+ processor = svn_diff__tree_processor_create(wrap_baton, result_pool);
+
+ processor->dir_opened = wrap_dir_opened;
+ processor->dir_added = wrap_dir_added;
+ processor->dir_deleted = wrap_dir_deleted;
+ processor->dir_changed = wrap_dir_changed;
+ processor->dir_closed = wrap_dir_closed;
+
+ processor->file_opened = wrap_file_opened;
+ processor->file_added = wrap_file_added;
+ processor->file_deleted = wrap_file_deleted;
+ processor->file_changed = wrap_file_changed;
+ /*processor->file_closed = wrap_file_closed*/; /* Not needed */
+
+ *diff_processor = processor;
+ return SVN_NO_ERROR;
+}
+
+/* =====================================================================
+ * A tree processor filter that filters by changelist membership
+ * =====================================================================
+ *
+ * The current implementation queries the WC for the changelist of each
+ * file as it comes through, and sets the 'skip' flag for a non-matching
+ * file.
+ *
+ * (It doesn't set the 'skip' flag for a directory, as we need to receive
+ * the changed/added/deleted/closed call to know when it is closed, in
+ * order to preserve the strict open-close semantics for the wrapped tree
+ * processor.)
+ *
+ * It passes on the opening and closing of every directory, even if there
+ * are no file changes to be passed on inside that directory.
+ */
+
+typedef struct filter_tree_baton_t
+{
+ const svn_diff_tree_processor_t *processor;
+ svn_wc_context_t *wc_ctx;
+ /* WC path of the root of the diff (where relpath = "") */
+ const char *root_local_abspath;
+ /* Hash whose keys are const char * changelist names. */
+ apr_hash_t *changelist_hash;
+} filter_tree_baton_t;
+
+static svn_error_t *
+filter_dir_opened(void **new_dir_baton,
+ svn_boolean_t *skip,
+ svn_boolean_t *skip_children,
+ const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const svn_diff_source_t *copyfrom_source,
+ void *parent_dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct filter_tree_baton_t *fb = processor->baton;
+
+ SVN_ERR(fb->processor->dir_opened(new_dir_baton, skip, skip_children,
+ relpath,
+ left_source, right_source,
+ copyfrom_source,
+ parent_dir_baton,
+ fb->processor,
+ result_pool, scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+filter_dir_added(const char *relpath,
+ const svn_diff_source_t *copyfrom_source,
+ const svn_diff_source_t *right_source,
+ /*const*/ apr_hash_t *copyfrom_props,
+ /*const*/ apr_hash_t *right_props,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct filter_tree_baton_t *fb = processor->baton;
+
+ SVN_ERR(fb->processor->dir_closed(relpath,
+ NULL,
+ right_source,
+ dir_baton,
+ fb->processor,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+filter_dir_deleted(const char *relpath,
+ const svn_diff_source_t *left_source,
+ /*const*/ apr_hash_t *left_props,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct filter_tree_baton_t *fb = processor->baton;
+
+ SVN_ERR(fb->processor->dir_closed(relpath,
+ left_source,
+ NULL,
+ dir_baton,
+ fb->processor,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+filter_dir_changed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ /*const*/ apr_hash_t *left_props,
+ /*const*/ apr_hash_t *right_props,
+ const apr_array_header_t *prop_changes,
+ void *dir_baton,
+ const struct svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct filter_tree_baton_t *fb = processor->baton;
+
+ SVN_ERR(fb->processor->dir_closed(relpath,
+ left_source,
+ right_source,
+ dir_baton,
+ fb->processor,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+filter_dir_closed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct filter_tree_baton_t *fb = processor->baton;
+
+ SVN_ERR(fb->processor->dir_closed(relpath,
+ left_source,
+ right_source,
+ dir_baton,
+ fb->processor,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+filter_file_opened(void **new_file_baton,
+ svn_boolean_t *skip,
+ const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const svn_diff_source_t *copyfrom_source,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct filter_tree_baton_t *fb = processor->baton;
+ const char *local_abspath
+ = svn_dirent_join(fb->root_local_abspath, relpath, scratch_pool);
+
+ /* Skip if not a member of a given changelist */
+ if (! svn_wc__changelist_match(fb->wc_ctx, local_abspath,
+ fb->changelist_hash, scratch_pool))
+ {
+ *skip = TRUE;
+ return SVN_NO_ERROR;
+ }
+
+ SVN_ERR(fb->processor->file_opened(new_file_baton,
+ skip,
+ relpath,
+ left_source,
+ right_source,
+ copyfrom_source,
+ dir_baton,
+ fb->processor,
+ result_pool,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+filter_file_added(const char *relpath,
+ const svn_diff_source_t *copyfrom_source,
+ const svn_diff_source_t *right_source,
+ const char *copyfrom_file,
+ const char *right_file,
+ /*const*/ apr_hash_t *copyfrom_props,
+ /*const*/ apr_hash_t *right_props,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct filter_tree_baton_t *fb = processor->baton;
+
+ SVN_ERR(fb->processor->file_added(relpath,
+ copyfrom_source,
+ right_source,
+ copyfrom_file,
+ right_file,
+ copyfrom_props,
+ right_props,
+ file_baton,
+ fb->processor,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+filter_file_deleted(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const char *left_file,
+ /*const*/ apr_hash_t *left_props,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct filter_tree_baton_t *fb = processor->baton;
+
+ SVN_ERR(fb->processor->file_deleted(relpath,
+ left_source,
+ left_file,
+ left_props,
+ file_baton,
+ fb->processor,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+filter_file_changed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ const char *left_file,
+ const char *right_file,
+ /*const*/ apr_hash_t *left_props,
+ /*const*/ apr_hash_t *right_props,
+ svn_boolean_t file_modified,
+ const apr_array_header_t *prop_changes,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct filter_tree_baton_t *fb = processor->baton;
+
+ SVN_ERR(fb->processor->file_changed(relpath,
+ left_source,
+ right_source,
+ left_file,
+ right_file,
+ left_props,
+ right_props,
+ file_modified,
+ prop_changes,
+ file_baton,
+ fb->processor,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+filter_file_closed(const char *relpath,
+ const svn_diff_source_t *left_source,
+ const svn_diff_source_t *right_source,
+ void *file_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct filter_tree_baton_t *fb = processor->baton;
+
+ SVN_ERR(fb->processor->file_closed(relpath,
+ left_source,
+ right_source,
+ file_baton,
+ fb->processor,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+filter_node_absent(const char *relpath,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct filter_tree_baton_t *fb = processor->baton;
+
+ SVN_ERR(fb->processor->node_absent(relpath,
+ dir_baton,
+ fb->processor,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+const svn_diff_tree_processor_t *
+svn_wc__changelist_filter_tree_processor_create(
+ const svn_diff_tree_processor_t *processor,
+ svn_wc_context_t *wc_ctx,
+ const char *root_local_abspath,
+ apr_hash_t *changelist_hash,
+ apr_pool_t *result_pool)
+{
+ struct filter_tree_baton_t *fb;
+ svn_diff_tree_processor_t *filter;
+
+ if (! changelist_hash)
+ return processor;
+
+ fb = apr_pcalloc(result_pool, sizeof(*fb));
+ fb->processor = processor;
+ fb->wc_ctx = wc_ctx;
+ fb->root_local_abspath = root_local_abspath;
+ fb->changelist_hash = changelist_hash;
+
+ filter = svn_diff__tree_processor_create(fb, result_pool);
+ filter->dir_opened = filter_dir_opened;
+ filter->dir_added = filter_dir_added;
+ filter->dir_deleted = filter_dir_deleted;
+ filter->dir_changed = filter_dir_changed;
+ filter->dir_closed = filter_dir_closed;
+
+ filter->file_opened = filter_file_opened;
+ filter->file_added = filter_file_added;
+ filter->file_deleted = filter_file_deleted;
+ filter->file_changed = filter_file_changed;
+ filter->file_closed = filter_file_closed;
+
+ filter->node_absent = filter_node_absent;
+
+ return filter;
+}
+
diff --git a/subversion/libsvn_wc/diff_local.c b/subversion/libsvn_wc/diff_local.c
index dc5bb76..22b498f 100644
--- a/subversion/libsvn_wc/diff_local.c
+++ b/subversion/libsvn_wc/diff_local.c
@@ -38,15 +38,40 @@
#include "svn_hash.h"
#include "private/svn_wc_private.h"
+#include "private/svn_diff_tree.h"
#include "wc.h"
#include "props.h"
#include "translate.h"
+#include "diff.h"
#include "svn_private_config.h"
/*-------------------------------------------------------------------------*/
+/* Baton containing the state of a directory
+ reported open via a diff processor */
+struct node_state_t
+{
+ struct node_state_t *parent;
+
+ apr_pool_t *pool;
+
+ const char *local_abspath;
+ const char *relpath;
+ void *baton;
+
+ svn_diff_source_t *left_src;
+ svn_diff_source_t *right_src;
+ svn_diff_source_t *copy_src;
+
+ svn_boolean_t skip;
+ svn_boolean_t skip_children;
+
+ apr_hash_t *left_props;
+ apr_hash_t *right_props;
+ const apr_array_header_t *propchanges;
+};
/* The diff baton */
struct diff_baton
@@ -57,10 +82,9 @@ struct diff_baton
/* Report editor paths relative from this directory */
const char *anchor_abspath;
- /* The callbacks and callback argument that implement the file comparison
- functions */
- const svn_wc_diff_callbacks4_t *callbacks;
- void *callback_baton;
+ struct node_state_t *cur;
+
+ const svn_diff_tree_processor_t *processor;
/* Should this diff ignore node ancestry? */
svn_boolean_t ignore_ancestry;
@@ -68,15 +92,6 @@ struct diff_baton
/* Should this diff not compare copied files with their source? */
svn_boolean_t show_copies_as_adds;
- /* Are we producing a git-style diff? */
- svn_boolean_t use_git_diff_format;
-
- /* Empty file used to diff adds / deletes */
- const char *empty_file;
-
- /* Hash whose keys are const char * changelist names. */
- apr_hash_t *changelist_hash;
-
/* Cancel function/baton */
svn_cancel_func_t cancel_func;
void *cancel_baton;
@@ -84,342 +99,93 @@ struct diff_baton
apr_pool_t *pool;
};
-/* Get the empty file associated with the edit baton. This is cached so
- * that it can be reused, all empty files are the same.
+/* Recursively opens directories on the stack in EB, until LOCAL_ABSPATH
+ is reached. If RECURSIVE_SKIP is TRUE, don't open LOCAL_ABSPATH itself,
+ but create it marked with skip+skip_children.
*/
static svn_error_t *
-get_empty_file(struct diff_baton *eb,
- const char **empty_file,
- apr_pool_t *scratch_pool)
-{
- /* Create the file if it does not exist */
- /* Note that we tried to use /dev/null in r857294, but
- that won't work on Windows: it's impossible to stat NUL */
- if (!eb->empty_file)
- {
- SVN_ERR(svn_io_open_unique_file3(NULL, &eb->empty_file, NULL,
- svn_io_file_del_on_pool_cleanup,
- eb->pool, scratch_pool));
- }
-
- *empty_file = eb->empty_file;
-
- return SVN_NO_ERROR;
-}
-
-
-/* Return the value of the svn:mime-type property held in PROPS, or NULL
- if no such property exists. */
-static const char *
-get_prop_mimetype(apr_hash_t *props)
-{
- return svn_prop_get_value(props, SVN_PROP_MIME_TYPE);
-}
-
-
-/* Diff the file PATH against its text base. At this
- * stage we are dealing with a file that does exist in the working copy.
- *
- * DIR_BATON is the parent directory baton, PATH is the path to the file to
- * be compared.
- *
- * Do all allocation in POOL.
- *
- * ### TODO: Need to work on replace if the new filename used to be a
- * directory.
- */
-static svn_error_t *
-file_diff(struct diff_baton *eb,
- const char *local_abspath,
- const char *path,
- apr_pool_t *scratch_pool)
+ensure_state(struct diff_baton *eb,
+ const char *local_abspath,
+ svn_boolean_t recursive_skip,
+ apr_pool_t *scratch_pool)
{
- svn_wc__db_t *db = eb->db;
- const char *empty_file;
- const char *original_repos_relpath;
- svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
- svn_revnum_t revision;
- const svn_checksum_t *checksum;
- svn_boolean_t op_root;
- svn_boolean_t had_props, props_mod;
- svn_boolean_t have_base, have_more_work;
- svn_boolean_t replaced = FALSE;
- svn_boolean_t base_replace = FALSE;
- svn_wc__db_status_t base_status;
- svn_revnum_t base_revision = SVN_INVALID_REVNUM;
- const svn_checksum_t *base_checksum;
- const char *pristine_abspath;
-
- SVN_ERR(svn_wc__db_read_info(&status, &kind, &revision, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, &checksum, NULL,
- &original_repos_relpath, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL,
- &op_root, &had_props, &props_mod,
- &have_base, &have_more_work, NULL,
- db, local_abspath, scratch_pool, scratch_pool));
-
- if ((status == svn_wc__db_status_added) && (have_base || have_more_work))
- {
- SVN_ERR(svn_wc__db_node_check_replace(&replaced, &base_replace,
- NULL, db, local_abspath,
- scratch_pool));
-
- if (replaced && base_replace /* && !have_more_work */)
- {
- svn_wc__db_kind_t base_kind;
- SVN_ERR(svn_wc__db_base_get_info(&base_status, &base_kind,
- &base_revision,
- NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, &base_checksum, NULL,
- NULL, NULL, NULL,
- db, local_abspath,
- scratch_pool, scratch_pool));
-
- if (base_status != svn_wc__db_status_normal
- || base_kind != kind)
- {
- /* We can't show a replacement here */
- replaced = FALSE;
- base_replace = FALSE;
- }
- }
- else
- {
- /* We can't look in this middle working layer (yet).
- We just report the change itself.
-
- And if we could look at it, how would we report the addition
- of this middle layer (and maybe different layers below that)?
-
- For 1.7 we just do what we did before: Ignore this layering
- problem and just show how the current file got in your wc.
- */
- replaced = FALSE;
- base_replace = FALSE;
- }
- }
-
- /* Now refine ADDED to one of: ADDED, COPIED, MOVED_HERE. Note that only
- the latter two have corresponding pristine info to diff against. */
- if (status == svn_wc__db_status_added)
- SVN_ERR(svn_wc__db_scan_addition(&status, NULL, NULL, NULL, NULL,
- &original_repos_relpath, NULL, NULL,
- NULL, db, local_abspath,
- scratch_pool, scratch_pool));
-
-
- SVN_ERR(get_empty_file(eb, &empty_file, scratch_pool));
-
- /* When we show a delete, we show a diff of the original pristine against
- * an empty file.
- * A base-replace is treated like a delete plus an add.
- *
- * For this kind of diff we prefer to show the deletion of what was checked
- * out over showing what was actually deleted (if that was defined by
- * a higher layer). */
- if (status == svn_wc__db_status_deleted ||
- (base_replace && ! eb->ignore_ancestry))
- {
- apr_hash_t *del_props;
- const svn_checksum_t *del_checksum;
- const char *del_text_abspath;
- const char *del_mimetype;
-
- if (base_replace && ! eb->ignore_ancestry)
- {
- /* We show a deletion of the information in the BASE layer */
- SVN_ERR(svn_wc__db_base_get_props(&del_props, db, local_abspath,
- scratch_pool, scratch_pool));
-
- del_checksum = base_checksum;
- }
- else
- {
- /* We show a deletion of what was actually deleted */
- SVN_ERR_ASSERT(status == svn_wc__db_status_deleted);
-
- SVN_ERR(svn_wc__get_pristine_props(&del_props, db, local_abspath,
- scratch_pool, scratch_pool));
-
- SVN_ERR(svn_wc__db_read_pristine_info(NULL, NULL, NULL, NULL, NULL,
- NULL, &del_checksum, NULL,
- NULL, db, local_abspath,
- scratch_pool, scratch_pool));
- }
-
- SVN_ERR_ASSERT(del_checksum != NULL);
-
- SVN_ERR(svn_wc__db_pristine_get_path(&del_text_abspath, db,
- local_abspath, del_checksum,
- scratch_pool, scratch_pool));
-
- if (del_props == NULL)
- del_props = apr_hash_make(scratch_pool);
-
- del_mimetype = get_prop_mimetype(del_props);
-
- SVN_ERR(eb->callbacks->file_deleted(NULL, NULL, path,
- del_text_abspath,
- empty_file,
- del_mimetype,
- NULL,
- del_props,
- eb->callback_baton,
- scratch_pool));
-
- if (status == svn_wc__db_status_deleted)
- {
- /* We're here only for showing a delete, so we're done. */
- return SVN_NO_ERROR;
- }
- }
-
- if (checksum != NULL)
- SVN_ERR(svn_wc__db_pristine_get_path(&pristine_abspath, db, local_abspath,
- checksum,
- scratch_pool, scratch_pool));
- else if (base_replace && eb->ignore_ancestry)
- SVN_ERR(svn_wc__db_pristine_get_path(&pristine_abspath, db, local_abspath,
- base_checksum,
- scratch_pool, scratch_pool));
- else
- pristine_abspath = empty_file;
-
- /* Now deal with showing additions, or the add-half of replacements.
- * If the item is schedule-add *with history*, then we usually want
- * to see the usual working vs. text-base comparison, which will show changes
- * made since the file was copied. But in case we're showing copies as adds,
- * we need to compare the copied file to the empty file. If we're doing a git
- * diff, and the file was copied, we need to report the file as added and
- * diff it against the text base, so that a "copied" git diff header, and
- * possibly a diff against the copy source, will be generated for it. */
- if ((! base_replace && status == svn_wc__db_status_added) ||
- (base_replace && ! eb->ignore_ancestry) ||
- ((status == svn_wc__db_status_copied ||
- status == svn_wc__db_status_moved_here) &&
- (eb->show_copies_as_adds || eb->use_git_diff_format)))
+ struct node_state_t *ns;
+ apr_pool_t *ns_pool;
+ if (!eb->cur)
{
- const char *translated = NULL;
- apr_hash_t *pristine_props;
- apr_hash_t *actual_props;
- const char *actual_mimetype;
- apr_array_header_t *propchanges;
-
-
- /* Get svn:mime-type from ACTUAL props of PATH. */
- SVN_ERR(svn_wc__get_actual_props(&actual_props, db, local_abspath,
- scratch_pool, scratch_pool));
- actual_mimetype = get_prop_mimetype(actual_props);
-
- /* Set the original properties to empty, then compute "changes" from
- that. Essentially, all ACTUAL props will be "added". */
- pristine_props = apr_hash_make(scratch_pool);
- SVN_ERR(svn_prop_diffs(&propchanges, actual_props, pristine_props,
+ const char *relpath;
+
+ relpath = svn_dirent_skip_ancestor(eb->anchor_abspath, local_abspath);
+ if (! relpath)
+ return SVN_NO_ERROR;
+
+ /* Don't recurse on the anchor, as that might loop infinately because
+ svn_dirent_dirname("/",...) -> "/"
+ svn_dirent_dirname("C:/",...) -> "C:/" (Windows) */
+ if (*relpath)
+ SVN_ERR(ensure_state(eb,
+ svn_dirent_dirname(local_abspath,scratch_pool),
+ FALSE,
scratch_pool));
-
- SVN_ERR(svn_wc__internal_translated_file(
- &translated, local_abspath, db, local_abspath,
- SVN_WC_TRANSLATE_TO_NF | SVN_WC_TRANSLATE_USE_GLOBAL_TMP,
- eb->cancel_func, eb->cancel_baton,
- scratch_pool, scratch_pool));
-
- SVN_ERR(eb->callbacks->file_added(NULL, NULL, NULL, path,
- (! eb->show_copies_as_adds &&
- eb->use_git_diff_format &&
- status != svn_wc__db_status_added) ?
- pristine_abspath : empty_file,
- translated,
- 0, revision,
- NULL,
- actual_mimetype,
- original_repos_relpath,
- SVN_INVALID_REVNUM, propchanges,
- pristine_props, eb->callback_baton,
- scratch_pool));
}
+ else if (svn_dirent_is_child(eb->cur->local_abspath, local_abspath, NULL))
+ SVN_ERR(ensure_state(eb, svn_dirent_dirname(local_abspath,scratch_pool),
+ FALSE,
+ scratch_pool));
else
- {
- const char *translated = NULL;
- apr_hash_t *pristine_props;
- const char *pristine_mimetype;
- const char *actual_mimetype;
- apr_hash_t *actual_props;
- apr_array_header_t *propchanges;
- svn_boolean_t modified;
-
- /* Here we deal with showing pure modifications. */
- SVN_ERR(svn_wc__internal_file_modified_p(&modified, db, local_abspath,
- FALSE, scratch_pool));
- if (modified)
- {
- /* Note that this might be the _second_ time we translate
- the file, as svn_wc__text_modified_internal_p() might have used a
- tmp translated copy too. But what the heck, diff is
- already expensive, translating twice for the sake of code
- modularity is liveable. */
- SVN_ERR(svn_wc__internal_translated_file(
- &translated, local_abspath, db, local_abspath,
- SVN_WC_TRANSLATE_TO_NF | SVN_WC_TRANSLATE_USE_GLOBAL_TMP,
- eb->cancel_func, eb->cancel_baton,
- scratch_pool, scratch_pool));
- }
+ return SVN_NO_ERROR;
- /* Get the properties, the svn:mime-type values, and compute the
- differences between the two. */
- if (base_replace
- && eb->ignore_ancestry)
- {
- /* We don't want the normal pristine properties (which are
- from the WORKING tree). We want the pristines associated
- with the BASE tree, which are saved as "revert" props. */
- SVN_ERR(svn_wc__db_base_get_props(&pristine_props,
- db, local_abspath,
- scratch_pool, scratch_pool));
- }
- else
- {
- /* We can only fetch the pristine props (from BASE or WORKING) if
- the node has not been replaced, or it was copied/moved here. */
- SVN_ERR_ASSERT(!replaced
- || status == svn_wc__db_status_copied
- || status == svn_wc__db_status_moved_here);
-
- SVN_ERR(svn_wc__db_read_pristine_props(&pristine_props, db,
- local_abspath,
- scratch_pool, scratch_pool));
-
- /* baseprops will be NULL for added nodes */
- if (!pristine_props)
- pristine_props = apr_hash_make(scratch_pool);
- }
- pristine_mimetype = get_prop_mimetype(pristine_props);
+ if (eb->cur && eb->cur->skip_children)
+ return SVN_NO_ERROR;
- SVN_ERR(svn_wc__db_read_props(&actual_props, db, local_abspath,
- scratch_pool, scratch_pool));
- actual_mimetype = get_prop_mimetype(actual_props);
+ ns_pool = svn_pool_create(eb->cur ? eb->cur->pool : eb->pool);
+ ns = apr_pcalloc(ns_pool, sizeof(*ns));
- SVN_ERR(svn_prop_diffs(&propchanges, actual_props, pristine_props,
- scratch_pool));
+ ns->pool = ns_pool;
+ ns->local_abspath = apr_pstrdup(ns_pool, local_abspath);
+ ns->relpath = svn_dirent_skip_ancestor(eb->anchor_abspath, ns->local_abspath);
+ ns->parent = eb->cur;
+ eb->cur = ns;
- if (modified || propchanges->nelts > 0)
- {
- SVN_ERR(eb->callbacks->file_changed(NULL, NULL, NULL,
- path,
- modified ? pristine_abspath
- : NULL,
- translated,
- revision,
- SVN_INVALID_REVNUM,
- pristine_mimetype,
- actual_mimetype,
- propchanges,
- pristine_props,
- eb->callback_baton,
- scratch_pool));
- }
+ if (recursive_skip)
+ {
+ ns->skip = TRUE;
+ ns->skip_children = TRUE;
+ return SVN_NO_ERROR;
}
+ {
+ svn_revnum_t revision;
+ svn_error_t *err;
+
+ err = svn_wc__db_base_get_info(NULL, NULL, &revision, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL,
+ eb->db, local_abspath,
+ scratch_pool, scratch_pool);
+
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND)
+ return svn_error_trace(err);
+ svn_error_clear(err);
+
+ revision = 0; /* Use original revision? */
+ }
+ ns->left_src = svn_diff__source_create(revision, ns->pool);
+ ns->right_src = svn_diff__source_create(SVN_INVALID_REVNUM, ns->pool);
+
+ SVN_ERR(eb->processor->dir_opened(&ns->baton, &ns->skip,
+ &ns->skip_children,
+ ns->relpath,
+ ns->left_src,
+ ns->right_src,
+ NULL /* copyfrom_source */,
+ ns->parent ? ns->parent->baton : NULL,
+ eb->processor,
+ ns->pool, scratch_pool));
+ }
+
return SVN_NO_ERROR;
}
@@ -431,74 +197,224 @@ diff_status_callback(void *baton,
apr_pool_t *scratch_pool)
{
struct diff_baton *eb = baton;
- switch (status->node_status)
- {
- case svn_wc_status_unversioned:
- case svn_wc_status_ignored:
- return SVN_NO_ERROR; /* No diff */
+ svn_wc__db_t *db = eb->db;
- case svn_wc_status_obstructed:
- case svn_wc_status_missing:
- return SVN_NO_ERROR; /* ### What should we do here? */
+ if (! status->versioned)
+ return SVN_NO_ERROR; /* unversioned (includes dir externals) */
- default:
- break; /* Go check other conditions */
+ if (status->node_status == svn_wc_status_conflicted
+ && status->text_status == svn_wc_status_none
+ && status->prop_status == svn_wc_status_none)
+ {
+ /* Node is an actual only node describing a tree conflict */
+ return SVN_NO_ERROR;
}
- if (eb->changelist_hash != NULL
- && (!status->changelist
- || ! apr_hash_get(eb->changelist_hash, status->changelist,
- APR_HASH_KEY_STRING)))
- return SVN_NO_ERROR; /* Filtered via changelist */
+ /* Not text/prop modified, not copied. Easy out */
+ if (status->node_status == svn_wc_status_normal && !status->copied)
+ return SVN_NO_ERROR;
- /* ### The following checks should probably be reversed as it should decide
- when *not* to show a diff, because generally all changed nodes should
- have a diff. */
- if (status->kind == svn_node_file)
+ /* Mark all directories where we are no longer inside as closed */
+ while (eb->cur
+ && !svn_dirent_is_ancestor(eb->cur->local_abspath, local_abspath))
{
- /* Show a diff when
- * - The text is modified
- * - Or the properties are modified
- * - Or when the node has been replaced
- * - Or (if in copies as adds or git mode) when a node is copied */
- if (status->text_status == svn_wc_status_modified
- || status->prop_status == svn_wc_status_modified
- || status->node_status == svn_wc_status_deleted
- || status->node_status == svn_wc_status_replaced
- || ((eb->show_copies_as_adds || eb->use_git_diff_format)
- && status->copied))
- {
- const char *path = svn_dirent_skip_ancestor(eb->anchor_abspath,
- local_abspath);
+ struct node_state_t *ns = eb->cur;
- SVN_ERR(file_diff(eb, local_abspath, path, scratch_pool));
+ if (!ns->skip)
+ {
+ if (ns->propchanges)
+ SVN_ERR(eb->processor->dir_changed(ns->relpath,
+ ns->left_src,
+ ns->right_src,
+ ns->left_props,
+ ns->right_props,
+ ns->propchanges,
+ ns->baton,
+ eb->processor,
+ ns->pool));
+ else
+ SVN_ERR(eb->processor->dir_closed(ns->relpath,
+ ns->left_src,
+ ns->right_src,
+ ns->baton,
+ eb->processor,
+ ns->pool));
}
+ eb->cur = ns->parent;
+ svn_pool_clear(ns->pool);
}
- else
- {
- /* ### This case should probably be extended for git-diff, but this
- is what the old diff code provided */
- if (status->node_status == svn_wc_status_deleted
- || status->node_status == svn_wc_status_replaced
- || status->prop_status == svn_wc_status_modified)
- {
- apr_array_header_t *propchanges;
- apr_hash_t *baseprops;
- const char *path = svn_dirent_skip_ancestor(eb->anchor_abspath,
- local_abspath);
-
+ SVN_ERR(ensure_state(eb, svn_dirent_dirname(local_abspath, scratch_pool),
+ FALSE, scratch_pool));
+
+ if (eb->cur && eb->cur->skip_children)
+ return SVN_NO_ERROR;
+
+ /* This code does about the same thing as the inner body of
+ walk_local_nodes_diff() in diff_editor.c, except that
+ it is already filtered by the status walker, doesn't have to
+ account for remote changes (and many tiny other details) */
+
+ {
+ svn_boolean_t repos_only;
+ svn_boolean_t local_only;
+ svn_wc__db_status_t db_status;
+ svn_boolean_t have_base;
+ svn_node_kind_t base_kind;
+ svn_node_kind_t db_kind = status->kind;
+ svn_depth_t depth_below_here = svn_depth_unknown;
+
+ const char *child_abspath = local_abspath;
+ const char *child_relpath = svn_dirent_skip_ancestor(eb->anchor_abspath,
+ local_abspath);
+
+
+ repos_only = FALSE;
+ local_only = FALSE;
+
+ /* ### optimize away this call using status info. Should
+ be possible in almost every case (except conflict, missing, obst.)*/
+ SVN_ERR(svn_wc__db_read_info(&db_status, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ &have_base, NULL, NULL,
+ eb->db, local_abspath,
+ scratch_pool, scratch_pool));
+ if (!have_base)
+ {
+ local_only = TRUE; /* Only report additions */
+ }
+ else if (db_status == svn_wc__db_status_normal)
+ {
+ /* Simple diff */
+ base_kind = db_kind;
+ }
+ else if (db_status == svn_wc__db_status_deleted)
+ {
+ svn_wc__db_status_t base_status;
+ repos_only = TRUE;
+ SVN_ERR(svn_wc__db_base_get_info(&base_status, &base_kind, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL,
+ eb->db, local_abspath,
+ scratch_pool, scratch_pool));
- SVN_ERR(svn_wc__internal_propdiff(&propchanges, &baseprops,
- eb->db, local_abspath,
- scratch_pool, scratch_pool));
+ if (base_status != svn_wc__db_status_normal)
+ return SVN_NO_ERROR;
+ }
+ else
+ {
+ /* working status is either added or deleted */
+ svn_wc__db_status_t base_status;
+
+ SVN_ERR(svn_wc__db_base_get_info(&base_status, &base_kind, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL,
+ eb->db, local_abspath,
+ scratch_pool, scratch_pool));
- SVN_ERR(eb->callbacks->dir_props_changed(NULL, NULL,
- path, FALSE /* ### ? */,
- propchanges, baseprops,
- eb->callback_baton,
+ if (base_status != svn_wc__db_status_normal)
+ local_only = TRUE;
+ else if (base_kind != db_kind || !eb->ignore_ancestry)
+ {
+ repos_only = TRUE;
+ local_only = TRUE;
+ }
+ }
+
+ if (repos_only)
+ {
+ /* Report repository form deleted */
+ if (base_kind == svn_node_file)
+ SVN_ERR(svn_wc__diff_base_only_file(db, child_abspath,
+ child_relpath,
+ SVN_INVALID_REVNUM,
+ eb->processor,
+ eb->cur ? eb->cur->baton : NULL,
+ scratch_pool));
+ else if (base_kind == svn_node_dir)
+ SVN_ERR(svn_wc__diff_base_only_dir(db, child_abspath,
+ child_relpath,
+ SVN_INVALID_REVNUM,
+ depth_below_here,
+ eb->processor,
+ eb->cur ? eb->cur->baton : NULL,
+ eb->cancel_func,
+ eb->cancel_baton,
+ scratch_pool));
+ }
+ else if (!local_only)
+ {
+ /* Diff base against actual */
+ if (db_kind == svn_node_file)
+ {
+ SVN_ERR(svn_wc__diff_base_working_diff(db, child_abspath,
+ child_relpath,
+ SVN_INVALID_REVNUM,
+ eb->processor,
+ eb->cur
+ ? eb->cur->baton
+ : NULL,
+ FALSE,
+ eb->cancel_func,
+ eb->cancel_baton,
scratch_pool));
- }
- }
+ }
+ else if (db_kind == svn_node_dir)
+ {
+ SVN_ERR(ensure_state(eb, local_abspath, FALSE, scratch_pool));
+
+ if (status->prop_status != svn_wc_status_none
+ && status->prop_status != svn_wc_status_normal)
+ {
+ apr_array_header_t *propchanges;
+ SVN_ERR(svn_wc__db_base_get_props(&eb->cur->left_props,
+ eb->db, local_abspath,
+ eb->cur->pool,
+ scratch_pool));
+ SVN_ERR(svn_wc__db_read_props(&eb->cur->right_props,
+ eb->db, local_abspath,
+ eb->cur->pool,
+ scratch_pool));
+
+ SVN_ERR(svn_prop_diffs(&propchanges,
+ eb->cur->right_props,
+ eb->cur->left_props,
+ eb->cur->pool));
+
+ eb->cur->propchanges = propchanges;
+ }
+ }
+ }
+
+ if (local_only && (db_status != svn_wc__db_status_deleted))
+ {
+ if (db_kind == svn_node_file)
+ SVN_ERR(svn_wc__diff_local_only_file(db, child_abspath,
+ child_relpath,
+ eb->processor,
+ eb->cur ? eb->cur->baton : NULL,
+ FALSE,
+ eb->cancel_func,
+ eb->cancel_baton,
+ scratch_pool));
+ else if (db_kind == svn_node_dir)
+ SVN_ERR(svn_wc__diff_local_only_dir(db, child_abspath,
+ child_relpath, depth_below_here,
+ eb->processor,
+ eb->cur ? eb->cur->baton : NULL,
+ FALSE,
+ eb->cancel_func,
+ eb->cancel_baton,
+ scratch_pool));
+ }
+
+ if (db_kind == svn_node_dir && (local_only || repos_only))
+ SVN_ERR(ensure_state(eb, local_abspath, TRUE /* skip */, scratch_pool));
+ }
+
return SVN_NO_ERROR;
}
@@ -519,32 +435,61 @@ svn_wc_diff6(svn_wc_context_t *wc_ctx,
apr_pool_t *scratch_pool)
{
struct diff_baton eb = { 0 };
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
svn_boolean_t get_all;
+ const svn_diff_tree_processor_t *processor;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
- SVN_ERR(svn_wc__db_read_kind(&kind, wc_ctx->db, local_abspath, FALSE,
+ SVN_ERR(svn_wc__db_read_kind(&kind, wc_ctx->db, local_abspath,
+ FALSE /* allow_missing */,
+ TRUE /* show_deleted */,
+ FALSE /* show_hidden */,
scratch_pool));
- if (kind == svn_wc__db_kind_dir)
- eb.anchor_abspath = local_abspath;
+ if (kind == svn_node_dir)
+ eb.anchor_abspath = local_abspath;
else
eb.anchor_abspath = svn_dirent_dirname(local_abspath, scratch_pool);
+ SVN_ERR(svn_wc__wrap_diff_callbacks(&processor,
+ callbacks, callback_baton, TRUE,
+ scratch_pool, scratch_pool));
+
+ if (use_git_diff_format)
+ show_copies_as_adds = TRUE;
+ if (show_copies_as_adds)
+ ignore_ancestry = FALSE;
+
+
+
+ /*
+ if (reverse_order)
+ processor = svn_diff__tree_processor_reverse_create(processor, NULL, pool);
+ */
+
+ if (! show_copies_as_adds && !use_git_diff_format)
+ processor = svn_diff__tree_processor_copy_as_changed_create(processor,
+ scratch_pool);
+
+ /* Apply changelist filtering to the output */
+ if (changelist_filter && changelist_filter->nelts)
+ {
+ apr_hash_t *changelist_hash;
+
+ SVN_ERR(svn_hash_from_cstring_keys(&changelist_hash, changelist_filter,
+ scratch_pool));
+ processor = svn_wc__changelist_filter_tree_processor_create(
+ processor, wc_ctx, local_abspath,
+ changelist_hash, scratch_pool);
+ }
+
eb.db = wc_ctx->db;
- eb.callbacks = callbacks;
- eb.callback_baton = callback_baton;
+ eb.processor = processor;
eb.ignore_ancestry = ignore_ancestry;
eb.show_copies_as_adds = show_copies_as_adds;
- eb.use_git_diff_format = use_git_diff_format;
- eb.empty_file = NULL;
eb.pool = scratch_pool;
- if (changelist_filter && changelist_filter->nelts)
- SVN_ERR(svn_hash_from_cstring_keys(&eb.changelist_hash, changelist_filter,
- scratch_pool));
-
- if (show_copies_as_adds || use_git_diff_format)
+ if (show_copies_as_adds || use_git_diff_format || !ignore_ancestry)
get_all = TRUE; /* We need unmodified descendants of copies */
else
get_all = FALSE;
@@ -559,5 +504,34 @@ svn_wc_diff6(svn_wc_context_t *wc_ctx,
cancel_func, cancel_baton,
scratch_pool));
+ /* Close the remaining open directories */
+ while (eb.cur)
+ {
+ struct node_state_t *ns = eb.cur;
+
+ if (!ns->skip)
+ {
+ if (ns->propchanges)
+ SVN_ERR(processor->dir_changed(ns->relpath,
+ ns->left_src,
+ ns->right_src,
+ ns->left_props,
+ ns->right_props,
+ ns->propchanges,
+ ns->baton,
+ processor,
+ ns->pool));
+ else
+ SVN_ERR(processor->dir_closed(ns->relpath,
+ ns->left_src,
+ ns->right_src,
+ ns->baton,
+ processor,
+ ns->pool));
+ }
+ eb.cur = ns->parent;
+ svn_pool_clear(ns->pool);
+ }
+
return SVN_NO_ERROR;
}
diff --git a/subversion/libsvn_wc/entries.c b/subversion/libsvn_wc/entries.c
index c4517b0..24dae50 100644
--- a/subversion/libsvn_wc/entries.c
+++ b/subversion/libsvn_wc/entries.c
@@ -34,9 +34,11 @@
#include "svn_path.h"
#include "svn_ctype.h"
#include "svn_string.h"
+#include "svn_hash.h"
#include "wc.h"
#include "adm_files.h"
+#include "conflicts.h"
#include "entries.h"
#include "lock.h"
#include "tree_conflicts.h"
@@ -55,22 +57,23 @@
typedef struct db_node_t {
apr_int64_t wc_id;
const char *local_relpath;
- apr_int64_t op_depth;
+ int op_depth;
apr_int64_t repos_id;
const char *repos_relpath;
const char *parent_relpath;
svn_wc__db_status_t presence;
svn_revnum_t revision;
- svn_node_kind_t kind; /* ### should switch to svn_wc__db_kind_t */
+ svn_node_kind_t kind;
svn_checksum_t *checksum;
- svn_filesize_t translated_size;
+ svn_filesize_t recorded_size;
svn_revnum_t changed_rev;
apr_time_t changed_date;
const char *changed_author;
svn_depth_t depth;
- apr_time_t last_mod_time;
+ apr_time_t recorded_time;
apr_hash_t *properties;
svn_boolean_t file_external;
+ apr_array_header_t *inherited_props;
} db_node_t;
typedef struct db_actual_node_t {
@@ -148,7 +151,7 @@ check_file_external(svn_wc_entry_t *entry,
apr_pool_t *scratch_pool)
{
svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
const char *repos_relpath;
svn_revnum_t peg_revision;
svn_revnum_t revision;
@@ -169,7 +172,7 @@ check_file_external(svn_wc_entry_t *entry,
}
if (status == svn_wc__db_status_normal
- && kind == svn_wc__db_kind_file)
+ && kind == svn_node_file)
{
entry->file_external_path = repos_relpath;
if (SVN_IS_VALID_REVNUM(peg_revision))
@@ -204,9 +207,10 @@ check_file_external(svn_wc_entry_t *entry,
*/
static svn_error_t *
get_info_for_deleted(svn_wc_entry_t *entry,
- svn_wc__db_kind_t *kind,
+ svn_node_kind_t *kind,
const char **repos_relpath,
const svn_checksum_t **checksum,
+ svn_wc__db_lock_t **lock,
svn_wc__db_t *db,
const char *entry_abspath,
const svn_wc_entry_t *parent_entry,
@@ -229,22 +233,13 @@ get_info_for_deleted(svn_wc_entry_t *entry,
&entry->depth,
checksum,
NULL,
- NULL /* lock */,
- &entry->has_props,
+ lock,
+ &entry->has_props, NULL,
NULL,
db,
entry_abspath,
result_pool,
scratch_pool));
-
- if (*repos_relpath == NULL)
- SVN_ERR(svn_wc__db_scan_base_repos(repos_relpath,
- &entry->repos,
- &entry->uuid,
- db,
- entry_abspath,
- result_pool,
- scratch_pool));
}
else
{
@@ -263,7 +258,7 @@ get_info_for_deleted(svn_wc_entry_t *entry,
&entry->depth,
checksum,
NULL,
- &entry->has_props,
+ &entry->has_props, NULL,
db,
entry_abspath,
result_pool,
@@ -272,7 +267,7 @@ get_info_for_deleted(svn_wc_entry_t *entry,
SVN_ERR(svn_wc__db_scan_deletion(NULL,
NULL,
- &work_del_abspath,
+ &work_del_abspath, NULL,
db, entry_abspath,
scratch_pool, scratch_pool));
@@ -304,7 +299,8 @@ get_info_for_deleted(svn_wc_entry_t *entry,
svn_wc__db_status_t status;
SVN_ERR(svn_wc__db_base_get_info(&status, NULL, &entry->revision,
NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, lock, NULL, NULL,
+ NULL,
db, entry_abspath,
result_pool, scratch_pool));
@@ -384,7 +380,7 @@ read_one_entry(const svn_wc_entry_t **new_entry,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
svn_wc__db_status_t status;
svn_wc__db_lock_t *lock;
const char *repos_relpath;
@@ -461,9 +457,10 @@ read_one_entry(const svn_wc_entry_t **new_entry,
child_abspath = svn_dirent_join(dir_abspath, child_name,
scratch_pool);
- SVN_ERR(svn_wc__db_read_conflicts(&child_conflicts,
- db, child_abspath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__read_conflicts(&child_conflicts,
+ db, child_abspath,
+ FALSE /* create tempfiles */,
+ scratch_pool, scratch_pool));
for (j = 0; j < child_conflicts->nelts; j++)
{
@@ -475,8 +472,7 @@ read_one_entry(const svn_wc_entry_t **new_entry,
{
if (!tree_conflicts)
tree_conflicts = apr_hash_make(scratch_pool);
- apr_hash_set(tree_conflicts, child_name,
- APR_HASH_KEY_STRING, conflict);
+ svn_hash_sets(tree_conflicts, child_name, conflict);
}
}
}
@@ -525,7 +521,7 @@ read_one_entry(const svn_wc_entry_t **new_entry,
{
const char *work_del_abspath;
SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL,
- &work_del_abspath,
+ &work_del_abspath, NULL,
db, entry_abspath,
scratch_pool, scratch_pool));
@@ -572,7 +568,7 @@ read_one_entry(const svn_wc_entry_t **new_entry,
NULL, NULL, NULL,
NULL, NULL, NULL,
NULL, NULL, NULL,
- NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
db, entry_abspath,
scratch_pool,
scratch_pool));
@@ -637,7 +633,10 @@ read_one_entry(const svn_wc_entry_t **new_entry,
/* ### scan_addition may need to be updated to avoid returning
### status_copied in this case. */
}
- else if (work_status == svn_wc__db_status_copied)
+ /* For backwards-compatiblity purposes we treat moves just like
+ * regular copies. */
+ else if (work_status == svn_wc__db_status_copied ||
+ work_status == svn_wc__db_status_moved_here)
{
entry->copied = TRUE;
@@ -662,7 +661,8 @@ read_one_entry(const svn_wc_entry_t **new_entry,
svn_boolean_t is_copied_child;
svn_boolean_t is_mixed_rev = FALSE;
- SVN_ERR_ASSERT(work_status == svn_wc__db_status_copied);
+ SVN_ERR_ASSERT(work_status == svn_wc__db_status_copied ||
+ work_status == svn_wc__db_status_moved_here);
/* If this node inherits copyfrom information from an
ancestor node, then it must be a copied child. */
@@ -713,8 +713,7 @@ read_one_entry(const svn_wc_entry_t **new_entry,
&parent_repos_relpath,
&parent_root_url,
NULL, NULL,
- db,
- parent_abspath,
+ db, parent_abspath,
scratch_pool,
scratch_pool);
if (err)
@@ -826,6 +825,7 @@ read_one_entry(const svn_wc_entry_t **new_entry,
&kind,
&repos_relpath,
&checksum,
+ &lock,
db, entry_abspath,
parent_entry,
have_base, have_more_work,
@@ -836,11 +836,11 @@ read_one_entry(const svn_wc_entry_t **new_entry,
if (entry->depth == svn_depth_unknown)
entry->depth = svn_depth_infinity;
- if (kind == svn_wc__db_kind_dir)
+ if (kind == svn_node_dir)
entry->kind = svn_node_dir;
- else if (kind == svn_wc__db_kind_file)
+ else if (kind == svn_node_file)
entry->kind = svn_node_file;
- else if (kind == svn_wc__db_kind_symlink)
+ else if (kind == svn_node_symlink)
entry->kind = svn_node_file; /* ### no symlink kind */
else
entry->kind = svn_node_unknown;
@@ -878,37 +878,53 @@ read_one_entry(const svn_wc_entry_t **new_entry,
if (conflicted)
{
- const apr_array_header_t *conflicts;
- int j;
- SVN_ERR(svn_wc__db_read_conflicts(&conflicts, db, entry_abspath,
- scratch_pool, scratch_pool));
+ svn_skel_t *conflict;
+ svn_boolean_t text_conflicted;
+ svn_boolean_t prop_conflicted;
+ SVN_ERR(svn_wc__db_read_conflict(&conflict, db, entry_abspath,
+ scratch_pool, scratch_pool));
- for (j = 0; j < conflicts->nelts; j++)
+ SVN_ERR(svn_wc__conflict_read_info(NULL, NULL, &text_conflicted,
+ &prop_conflicted, NULL,
+ db, dir_abspath, conflict,
+ scratch_pool, scratch_pool));
+
+ if (text_conflicted)
{
- const svn_wc_conflict_description2_t *cd;
- cd = APR_ARRAY_IDX(conflicts, j,
- const svn_wc_conflict_description2_t *);
+ const char *my_abspath;
+ const char *their_old_abspath;
+ const char *their_abspath;
+ SVN_ERR(svn_wc__conflict_read_text_conflict(&my_abspath,
+ &their_old_abspath,
+ &their_abspath,
+ db, dir_abspath,
+ conflict, scratch_pool,
+ scratch_pool));
- switch (cd->kind)
- {
- case svn_wc_conflict_kind_text:
- if (cd->base_abspath)
- entry->conflict_old = svn_dirent_basename(cd->base_abspath,
- result_pool);
- if (cd->their_abspath)
- entry->conflict_new = svn_dirent_basename(cd->their_abspath,
- result_pool);
- if (cd->my_abspath)
- entry->conflict_wrk = svn_dirent_basename(cd->my_abspath,
- result_pool);
- break;
- case svn_wc_conflict_kind_property:
- entry->prejfile = svn_dirent_basename(cd->their_abspath,
- result_pool);
- break;
- case svn_wc_conflict_kind_tree:
- break;
- }
+ if (my_abspath)
+ entry->conflict_wrk = svn_dirent_basename(my_abspath, result_pool);
+
+ if (their_old_abspath)
+ entry->conflict_old = svn_dirent_basename(their_old_abspath,
+ result_pool);
+
+ if (their_abspath)
+ entry->conflict_new = svn_dirent_basename(their_abspath,
+ result_pool);
+ }
+
+ if (prop_conflicted)
+ {
+ const char *prej_abspath;
+
+ SVN_ERR(svn_wc__conflict_read_prop_conflict(&prej_abspath, NULL,
+ NULL, NULL, NULL,
+ db, dir_abspath,
+ conflict, scratch_pool,
+ scratch_pool));
+
+ if (prej_abspath)
+ entry->prejfile = svn_dirent_basename(prej_abspath, result_pool);
}
}
@@ -922,7 +938,7 @@ read_one_entry(const svn_wc_entry_t **new_entry,
/* Let's check for a file external. ugh. */
if (status == svn_wc__db_status_normal
- && kind == svn_wc__db_kind_file)
+ && kind == svn_node_file)
SVN_ERR(check_file_external(entry, db, entry_abspath, dir_abspath,
result_pool, scratch_pool));
@@ -956,7 +972,7 @@ read_entries_new(apr_hash_t **result_entries,
"" /* name */,
NULL /* parent_entry */,
result_pool, iterpool));
- apr_hash_set(entries, "", APR_HASH_KEY_STRING, parent_entry);
+ svn_hash_sets(entries, "", parent_entry);
/* Use result_pool so that the child names (used by reference, rather
than copied) appear in result_pool. */
@@ -973,7 +989,7 @@ read_entries_new(apr_hash_t **result_entries,
SVN_ERR(read_one_entry(&entry,
db, wc_id, local_abspath, name, parent_entry,
result_pool, iterpool));
- apr_hash_set(entries, entry->name, APR_HASH_KEY_STRING, entry);
+ svn_hash_sets(entries, entry->name, entry);
}
svn_pool_destroy(iterpool);
@@ -1350,7 +1366,7 @@ prune_deleted(apr_hash_t **entries_pruned,
SVN_ERR(svn_wc__entry_is_hidden(&hidden, entry));
if (!hidden)
- apr_hash_set(*entries_pruned, key, APR_HASH_KEY_STRING, entry);
+ svn_hash_sets(*entries_pruned, key, entry);
}
return SVN_NO_ERROR;
@@ -1376,10 +1392,10 @@ entries_read_txn(void *baton, svn_sqlite__db_t *db, apr_pool_t *scratch_pool)
}
svn_error_t *
-svn_wc_entries_read(apr_hash_t **entries,
- svn_wc_adm_access_t *adm_access,
- svn_boolean_t show_hidden,
- apr_pool_t *pool)
+svn_wc__entries_read_internal(apr_hash_t **entries,
+ svn_wc_adm_access_t *adm_access,
+ svn_boolean_t show_hidden,
+ apr_pool_t *pool)
{
apr_hash_t *new_entries;
@@ -1388,7 +1404,7 @@ svn_wc_entries_read(apr_hash_t **entries,
{
svn_wc__db_t *db = svn_wc__adm_get_db(adm_access);
const char *local_abspath = svn_wc__adm_access_abspath(adm_access);
- apr_pool_t *result_pool = svn_wc_adm_access_pool(adm_access);
+ apr_pool_t *result_pool = svn_wc__adm_access_pool_internal(adm_access);
svn_sqlite__db_t *sdb;
struct entries_read_baton_t erb;
@@ -1412,12 +1428,21 @@ svn_wc_entries_read(apr_hash_t **entries,
*entries = new_entries;
else
SVN_ERR(prune_deleted(entries, new_entries,
- svn_wc_adm_access_pool(adm_access),
+ svn_wc__adm_access_pool_internal(adm_access),
pool));
return SVN_NO_ERROR;
}
+svn_error_t *
+svn_wc_entries_read(apr_hash_t **entries,
+ svn_wc_adm_access_t *adm_access,
+ svn_boolean_t show_hidden,
+ apr_pool_t *pool)
+{
+ return svn_error_trace(svn_wc__entries_read_internal(entries, adm_access,
+ show_hidden, pool));
+}
/* No transaction required: called from write_entry which is itself
transaction-wrapped. */
@@ -1431,7 +1456,7 @@ insert_node(svn_sqlite__db_t *sdb,
SVN_ERR_ASSERT(node->op_depth > 0 || node->repos_relpath);
SVN_ERR(svn_sqlite__get_statement(&stmt, sdb, STMT_INSERT_NODE));
- SVN_ERR(svn_sqlite__bindf(stmt, "isisnnnnsnrisnnni",
+ SVN_ERR(svn_sqlite__bindf(stmt, "isdsnnnnsnrisnnni",
node->wc_id,
node->local_relpath,
node->op_depth,
@@ -1441,7 +1466,7 @@ insert_node(svn_sqlite__db_t *sdb,
node->changed_rev,
node->changed_date,
node->changed_author,
- node->last_mod_time));
+ node->recorded_time));
if (node->repos_relpath)
{
@@ -1449,7 +1474,7 @@ insert_node(svn_sqlite__db_t *sdb,
node->repos_id));
SVN_ERR(svn_sqlite__bind_text(stmt, 6,
node->repos_relpath));
- SVN_ERR(svn_sqlite__bind_int64(stmt, 7, node->revision));
+ SVN_ERR(svn_sqlite__bind_revnum(stmt, 7, node->revision));
}
if (node->presence == svn_wc__db_status_normal)
@@ -1463,7 +1488,7 @@ insert_node(svn_sqlite__db_t *sdb,
else if (node->presence == svn_wc__db_status_excluded)
SVN_ERR(svn_sqlite__bind_text(stmt, 8, "excluded"));
else if (node->presence == svn_wc__db_status_server_excluded)
- SVN_ERR(svn_sqlite__bind_text(stmt, 8, "absent"));
+ SVN_ERR(svn_sqlite__bind_text(stmt, 8, "server-excluded"));
if (node->kind == svn_node_none)
SVN_ERR(svn_sqlite__bind_text(stmt, 10, "unknown"));
@@ -1491,12 +1516,16 @@ insert_node(svn_sqlite__db_t *sdb,
SVN_ERR(svn_sqlite__bind_properties(stmt, 15, node->properties,
scratch_pool));
- if (node->translated_size != SVN_INVALID_FILESIZE)
- SVN_ERR(svn_sqlite__bind_int64(stmt, 16, node->translated_size));
+ if (node->recorded_size != SVN_INVALID_FILESIZE)
+ SVN_ERR(svn_sqlite__bind_int64(stmt, 16, node->recorded_size));
if (node->file_external)
SVN_ERR(svn_sqlite__bind_int(stmt, 20, 1));
+ if (node->inherited_props)
+ SVN_ERR(svn_sqlite__bind_iprops(stmt, 23, node->inherited_props,
+ scratch_pool));
+
SVN_ERR(svn_sqlite__insert(NULL, stmt));
return SVN_NO_ERROR;
@@ -1506,10 +1535,13 @@ insert_node(svn_sqlite__db_t *sdb,
/* */
static svn_error_t *
insert_actual_node(svn_sqlite__db_t *sdb,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
const db_actual_node_t *actual_node,
apr_pool_t *scratch_pool)
{
svn_sqlite__stmt_t *stmt;
+ svn_skel_t *conflict_data = NULL;
SVN_ERR(svn_sqlite__get_statement(&stmt, sdb, STMT_INSERT_ACTUAL_NODE));
@@ -1521,24 +1553,57 @@ insert_actual_node(svn_sqlite__db_t *sdb,
SVN_ERR(svn_sqlite__bind_properties(stmt, 4, actual_node->properties,
scratch_pool));
- if (actual_node->conflict_old)
+ if (actual_node->changelist)
+ SVN_ERR(svn_sqlite__bind_text(stmt, 5, actual_node->changelist));
+
+ SVN_ERR(svn_wc__upgrade_conflict_skel_from_raw(
+ &conflict_data,
+ db, wri_abspath,
+ actual_node->local_relpath,
+ actual_node->conflict_old,
+ actual_node->conflict_working,
+ actual_node->conflict_new,
+ actual_node->prop_reject,
+ actual_node->tree_conflict_data,
+ actual_node->tree_conflict_data
+ ? strlen(actual_node->tree_conflict_data)
+ : 0,
+ scratch_pool, scratch_pool));
+
+ if (conflict_data)
{
- SVN_ERR(svn_sqlite__bind_text(stmt, 5, actual_node->conflict_old));
- SVN_ERR(svn_sqlite__bind_text(stmt, 6, actual_node->conflict_new));
- SVN_ERR(svn_sqlite__bind_text(stmt, 7, actual_node->conflict_working));
+ svn_stringbuf_t *data = svn_skel__unparse(conflict_data, scratch_pool);
+
+ SVN_ERR(svn_sqlite__bind_blob(stmt, 6, data->data, data->len));
}
- if (actual_node->prop_reject)
- SVN_ERR(svn_sqlite__bind_text(stmt, 8, actual_node->prop_reject));
+ /* Execute and reset the insert clause. */
+ return svn_error_trace(svn_sqlite__insert(NULL, stmt));
+}
- if (actual_node->changelist)
- SVN_ERR(svn_sqlite__bind_text(stmt, 9, actual_node->changelist));
+static svn_boolean_t
+is_switched(db_node_t *parent,
+ db_node_t *child,
+ apr_pool_t *scratch_pool)
+{
+ if (parent && child)
+ {
+ if (parent->repos_id != child->repos_id)
+ return TRUE;
- if (actual_node->tree_conflict_data)
- SVN_ERR(svn_sqlite__bind_text(stmt, 10, actual_node->tree_conflict_data));
+ if (parent->repos_relpath && child->repos_relpath)
+ {
+ const char *unswitched
+ = svn_relpath_join(parent->repos_relpath,
+ svn_relpath_basename(child->local_relpath,
+ scratch_pool),
+ scratch_pool);
+ if (strcmp(unswitched, child->repos_relpath))
+ return TRUE;
+ }
+ }
- /* Execute and reset the insert clause. */
- return svn_error_trace(svn_sqlite__insert(NULL, stmt));
+ return FALSE;
}
struct write_baton {
@@ -1548,6 +1613,15 @@ struct write_baton {
apr_hash_t *tree_conflicts;
};
+#define WRITE_ENTRY_ASSERT(expr) \
+ if (!(expr)) \
+ return svn_error_createf(SVN_ERR_ASSERTION_FAIL, NULL, \
+ _("Unable to upgrade '%s' at line %d"), \
+ svn_dirent_local_style( \
+ svn_dirent_join(root_abspath, \
+ local_relpath, \
+ scratch_pool), \
+ scratch_pool), __LINE__)
/* Write the information for ENTRY to WC_DB. The WC_ID, REPOS_ID and
REPOS_ROOT will all be used for writing ENTRY.
@@ -1663,9 +1737,10 @@ write_entry(struct write_baton **entry_node,
replace+copied replace+copied [base|work]+work [base|work]+work
*/
- SVN_ERR_ASSERT(parent_node || entry->schedule == svn_wc_schedule_normal);
- SVN_ERR_ASSERT(!parent_node || parent_node->base
- || parent_node->below_work || parent_node->work);
+ WRITE_ENTRY_ASSERT(parent_node || entry->schedule == svn_wc_schedule_normal);
+
+ WRITE_ENTRY_ASSERT(!parent_node || parent_node->base
+ || parent_node->below_work || parent_node->work);
switch (entry->schedule)
{
@@ -1710,8 +1785,8 @@ write_entry(struct write_baton **entry_node,
BASE node to indicate the not-present node. */
if (entry->deleted)
{
- SVN_ERR_ASSERT(base_node || below_working_node);
- SVN_ERR_ASSERT(!entry->incomplete);
+ WRITE_ENTRY_ASSERT(base_node || below_working_node);
+ WRITE_ENTRY_ASSERT(!entry->incomplete);
if (base_node)
base_node->presence = svn_wc__db_status_not_present;
else
@@ -1719,8 +1794,8 @@ write_entry(struct write_baton **entry_node,
}
else if (entry->absent)
{
- SVN_ERR_ASSERT(base_node && !working_node && !below_working_node);
- SVN_ERR_ASSERT(!entry->incomplete);
+ WRITE_ENTRY_ASSERT(base_node && !working_node && !below_working_node);
+ WRITE_ENTRY_ASSERT(!entry->incomplete);
base_node->presence = svn_wc__db_status_server_excluded;
}
@@ -1728,16 +1803,10 @@ write_entry(struct write_baton **entry_node,
{
if (entry->copyfrom_url)
{
- const char *relpath;
-
working_node->repos_id = repos_id;
- relpath = svn_uri__is_child(this_dir->repos,
- entry->copyfrom_url,
- result_pool);
- if (relpath == NULL)
- working_node->repos_relpath = "";
- else
- working_node->repos_relpath = relpath;
+ working_node->repos_relpath = svn_uri_skip_ancestor(
+ this_dir->repos, entry->copyfrom_url,
+ result_pool);
working_node->revision = entry->copyfrom_rev;
working_node->op_depth
= svn_wc__db_op_depth_for_upgrade(local_relpath);
@@ -1752,6 +1821,17 @@ write_entry(struct write_baton **entry_node,
working_node->revision = parent_node->work->revision;
working_node->op_depth = parent_node->work->op_depth;
}
+ else if (parent_node->below_work
+ && parent_node->below_work->repos_relpath)
+ {
+ working_node->repos_id = repos_id;
+ working_node->repos_relpath
+ = svn_relpath_join(parent_node->below_work->repos_relpath,
+ svn_relpath_basename(local_relpath, NULL),
+ result_pool);
+ working_node->revision = parent_node->below_work->revision;
+ working_node->op_depth = parent_node->below_work->op_depth;
+ }
else
return svn_error_createf(SVN_ERR_ENTRY_MISSING_URL, NULL,
_("No copyfrom URL for '%s'"),
@@ -1827,7 +1907,7 @@ write_entry(struct write_baton **entry_node,
scratch_pool),
scratch_pool, scratch_pool));
- SVN_ERR_ASSERT(conflict->kind == svn_wc_conflict_kind_tree);
+ WRITE_ENTRY_ASSERT(conflict->kind == svn_wc_conflict_kind_tree);
/* Fix dubious data stored by old clients, local adds don't have
a repository URL. */
@@ -1840,9 +1920,8 @@ write_entry(struct write_baton **entry_node,
/* Store in hash to be retrieved when writing the child
row. */
key = svn_dirent_skip_ancestor(root_abspath, conflict->local_abspath);
- apr_hash_set(tree_conflicts, apr_pstrdup(result_pool, key),
- APR_HASH_KEY_STRING,
- svn_skel__unparse(new_skel, result_pool)->data);
+ svn_hash_sets(tree_conflicts, apr_pstrdup(result_pool, key),
+ svn_skel__unparse(new_skel, result_pool)->data);
skel = skel->next;
}
}
@@ -1851,9 +1930,8 @@ write_entry(struct write_baton **entry_node,
if (parent_node && parent_node->tree_conflicts)
{
- const char *tree_conflict_data = apr_hash_get(parent_node->tree_conflicts,
- local_relpath,
- APR_HASH_KEY_STRING);
+ const char *tree_conflict_data =
+ svn_hash_gets(parent_node->tree_conflicts, local_relpath);
if (tree_conflict_data)
{
actual_node = MAYBE_ALLOC(actual_node, scratch_pool);
@@ -1862,8 +1940,7 @@ write_entry(struct write_baton **entry_node,
/* Reset hash so that we don't write the row again when writing
actual-only nodes */
- apr_hash_set(parent_node->tree_conflicts, local_relpath,
- APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(parent_node->tree_conflicts, local_relpath, NULL);
}
if (entry->file_external_path != NULL)
@@ -1880,8 +1957,8 @@ write_entry(struct write_baton **entry_node,
base_node->op_depth = 0;
base_node->parent_relpath = parent_relpath;
base_node->revision = entry->revision;
- base_node->last_mod_time = entry->text_time;
- base_node->translated_size = entry->working_size;
+ base_node->recorded_time = entry->text_time;
+ base_node->recorded_size = entry->working_size;
if (entry->depth != svn_depth_exclude)
base_node->depth = entry->depth;
@@ -1893,14 +1970,15 @@ write_entry(struct write_baton **entry_node,
if (entry->deleted)
{
- SVN_ERR_ASSERT(base_node->presence == svn_wc__db_status_not_present);
+ WRITE_ENTRY_ASSERT(base_node->presence
+ == svn_wc__db_status_not_present);
/* ### should be svn_node_unknown, but let's store what we have. */
base_node->kind = entry->kind;
}
else if (entry->absent)
{
- SVN_ERR_ASSERT(base_node->presence
- == svn_wc__db_status_server_excluded);
+ WRITE_ENTRY_ASSERT(base_node->presence
+ == svn_wc__db_status_server_excluded);
/* ### should be svn_node_unknown, but let's store what we have. */
base_node->kind = entry->kind;
@@ -1933,8 +2011,8 @@ write_entry(struct write_baton **entry_node,
else if (entry->incomplete)
{
/* ### nobody should have set the presence. */
- SVN_ERR_ASSERT(base_node->presence
- == svn_wc__db_status_normal);
+ WRITE_ENTRY_ASSERT(base_node->presence
+ == svn_wc__db_status_normal);
base_node->presence = svn_wc__db_status_incomplete;
}
}
@@ -1995,17 +2073,16 @@ write_entry(struct write_baton **entry_node,
if (entry->url != NULL)
{
- const char *relpath = svn_uri__is_child(this_dir->repos,
- entry->url,
- result_pool);
- base_node->repos_relpath = relpath ? relpath : "";
+ base_node->repos_relpath = svn_uri_skip_ancestor(
+ this_dir->repos, entry->url,
+ result_pool);
}
else
{
- const char *relpath = svn_uri__is_child(this_dir->repos,
- this_dir->url,
- scratch_pool);
- if (relpath == NULL)
+ const char *relpath = svn_uri_skip_ancestor(this_dir->repos,
+ this_dir->url,
+ scratch_pool);
+ if (relpath == NULL || *relpath == '\0')
base_node->repos_relpath = entry->name;
else
base_node->repos_relpath =
@@ -2026,6 +2103,12 @@ write_entry(struct write_baton **entry_node,
if (entry->file_external_path)
base_node->file_external = TRUE;
+ /* Switched nodes get an empty iprops cache. */
+ if (parent_node
+ && is_switched(parent_node->base, base_node, scratch_pool))
+ base_node->inherited_props
+ = apr_array_make(scratch_pool, 0, sizeof(svn_prop_inherited_item_t*));
+
SVN_ERR(insert_node(sdb, base_node, scratch_pool));
/* We have to insert the lock after the base node, because the node
@@ -2057,13 +2140,18 @@ write_entry(struct write_baton **entry_node,
below_working_node->presence = svn_wc__db_status_normal;
below_working_node->kind = entry->kind;
below_working_node->repos_id = work->repos_id;
+ below_working_node->revision = work->revision;
+
+ /* This is just guessing. If the node below would have been switched
+ or if it was updated to a different version, the guess would
+ fail. But we don't have better information pre wc-ng :( */
if (work->repos_relpath)
below_working_node->repos_relpath
- = svn_relpath_join(work->repos_relpath, entry->name,
+ = svn_relpath_join(work->repos_relpath,
+ svn_relpath_basename(local_relpath, NULL),
result_pool);
else
below_working_node->repos_relpath = NULL;
- below_working_node->revision = parent_node->work->revision;
/* The revert_base checksum isn't available in the entry structure,
so the caller provides it. */
@@ -2079,13 +2167,37 @@ write_entry(struct write_baton **entry_node,
below_working_node->checksum =
text_base_info->revert_base.sha1_checksum;
}
- below_working_node->translated_size = 0;
+ below_working_node->recorded_size = 0;
below_working_node->changed_rev = SVN_INVALID_REVNUM;
below_working_node->changed_date = 0;
below_working_node->changed_author = NULL;
below_working_node->depth = svn_depth_infinity;
- below_working_node->last_mod_time = 0;
+ below_working_node->recorded_time = 0;
below_working_node->properties = NULL;
+
+ if (working_node
+ && entry->schedule == svn_wc_schedule_delete
+ && working_node->repos_relpath)
+ {
+ /* We are lucky, our guesses above are not necessary. The known
+ correct information is in working. But our op_depth design
+ expects more information here */
+ below_working_node->repos_relpath = working_node->repos_relpath;
+ below_working_node->repos_id = working_node->repos_id;
+ below_working_node->revision = working_node->revision;
+
+ /* Nice for 'svn status' */
+ below_working_node->changed_rev = entry->cmt_rev;
+ below_working_node->changed_date = entry->cmt_date;
+ below_working_node->changed_author = entry->cmt_author;
+
+ /* And now remove it from WORKING, because in wc-ng code
+ should read it from the lower layer */
+ working_node->repos_relpath = NULL;
+ working_node->repos_id = 0;
+ working_node->revision = SVN_INVALID_REVNUM;
+ }
+
SVN_ERR(insert_node(sdb, below_working_node, scratch_pool));
}
@@ -2096,8 +2208,8 @@ write_entry(struct write_baton **entry_node,
working_node->local_relpath = local_relpath;
working_node->parent_relpath = parent_relpath;
working_node->changed_rev = SVN_INVALID_REVNUM;
- working_node->last_mod_time = entry->text_time;
- working_node->translated_size = entry->working_size;
+ working_node->recorded_time = entry->text_time;
+ working_node->recorded_size = entry->working_size;
if (entry->depth != svn_depth_exclude)
working_node->depth = entry->depth;
@@ -2157,8 +2269,8 @@ write_entry(struct write_baton **entry_node,
if (entry->incomplete)
{
/* We shouldn't be overwriting another status. */
- SVN_ERR_ASSERT(working_node->presence
- == svn_wc__db_status_normal);
+ WRITE_ENTRY_ASSERT(working_node->presence
+ == svn_wc__db_status_normal);
working_node->presence = svn_wc__db_status_incomplete;
}
}
@@ -2201,7 +2313,8 @@ write_entry(struct write_baton **entry_node,
actual_node->local_relpath = local_relpath;
actual_node->parent_relpath = parent_relpath;
- SVN_ERR(insert_actual_node(sdb, actual_node, scratch_pool));
+ SVN_ERR(insert_actual_node(sdb, db, tmp_entry_abspath,
+ actual_node, scratch_pool));
}
if (entry_node)
@@ -2229,6 +2342,8 @@ write_entry(struct write_baton **entry_node,
static svn_error_t *
write_actual_only_entries(apr_hash_t *tree_conflicts,
svn_sqlite__db_t *sdb,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
apr_int64_t wc_id,
const char *parent_relpath,
apr_pool_t *scratch_pool)
@@ -2247,7 +2362,8 @@ write_actual_only_entries(apr_hash_t *tree_conflicts,
actual_node->parent_relpath = parent_relpath;
actual_node->tree_conflict_data = svn__apr_hash_index_val(hi);
- SVN_ERR(insert_actual_node(sdb, actual_node, scratch_pool));
+ SVN_ERR(insert_actual_node(sdb, db, wri_abspath, actual_node,
+ scratch_pool));
}
return SVN_NO_ERROR;
@@ -2275,8 +2391,7 @@ svn_wc__write_upgraded_entries(void **dir_baton,
struct write_baton *dir_node;
/* Get a copy of the "this dir" entry for comparison purposes. */
- this_dir = apr_hash_get(entries, SVN_WC_ENTRY_THIS_DIR,
- APR_HASH_KEY_STRING);
+ this_dir = svn_hash_gets(entries, SVN_WC_ENTRY_THIS_DIR);
/* If there is no "this dir" entry, something is wrong. */
if (! this_dir)
@@ -2307,7 +2422,7 @@ svn_wc__write_upgraded_entries(void **dir_baton,
const svn_wc_entry_t *this_entry = svn__apr_hash_index_val(hi);
const char *child_abspath, *child_relpath;
svn_wc__text_base_info_t *text_base_info
- = apr_hash_get(text_bases_info, name, APR_HASH_KEY_STRING);
+ = svn_hash_gets(text_bases_info, name);
svn_pool_clear(iterpool);
@@ -2329,8 +2444,9 @@ svn_wc__write_upgraded_entries(void **dir_baton,
}
if (dir_node->tree_conflicts)
- SVN_ERR(write_actual_only_entries(dir_node->tree_conflicts, sdb,
- wc_id, dir_relpath, iterpool));
+ SVN_ERR(write_actual_only_entries(dir_node->tree_conflicts, sdb, db,
+ new_root_abspath, wc_id, dir_relpath,
+ iterpool));
*dir_baton = dir_node;
svn_pool_destroy(iterpool);
@@ -2425,14 +2541,14 @@ walker_helper(const char *dirpath,
svn_error_t *err;
svn_wc__db_t *db = svn_wc__adm_get_db(adm_access);
- err = svn_wc_entries_read(&entries, adm_access, show_hidden, pool);
+ err = svn_wc__entries_read_internal(&entries, adm_access, show_hidden,
+ pool);
if (err)
SVN_ERR(walk_callbacks->handle_error(dirpath, err, walk_baton, pool));
/* As promised, always return the '.' entry first. */
- dot_entry = apr_hash_get(entries, SVN_WC_ENTRY_THIS_DIR,
- APR_HASH_KEY_STRING);
+ dot_entry = svn_hash_gets(entries, SVN_WC_ENTRY_THIS_DIR);
if (! dot_entry)
return walk_callbacks->handle_error
(dirpath, svn_error_createf(SVN_ERR_ENTRY_NOT_FOUND, NULL,
@@ -2544,7 +2660,7 @@ svn_wc_walk_entries3(const char *path,
const char *local_abspath;
svn_wc__db_t *db = svn_wc__adm_get_db(adm_access);
svn_error_t *err;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
svn_depth_t depth;
SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, pool));
@@ -2568,7 +2684,7 @@ svn_wc_walk_entries3(const char *path,
walk_baton, pool);
}
- if (kind == svn_wc__db_kind_file || depth == svn_depth_exclude)
+ if (kind == svn_node_file || depth == svn_depth_exclude)
{
const svn_wc_entry_t *entry;
@@ -2610,7 +2726,7 @@ svn_wc_walk_entries3(const char *path,
return SVN_NO_ERROR;
}
- if (kind == svn_wc__db_kind_dir)
+ if (kind == svn_node_dir)
return walker_helper(path, adm_access, walk_callbacks, walk_baton,
walk_depth, show_hidden, cancel_func, cancel_baton,
pool);
diff --git a/subversion/libsvn_wc/entries.h b/subversion/libsvn_wc/entries.h
index 7e07266..87caa46 100644
--- a/subversion/libsvn_wc/entries.h
+++ b/subversion/libsvn_wc/entries.h
@@ -148,6 +148,15 @@ svn_wc__serialize_file_external(const char **str,
const svn_opt_revision_t *rev,
apr_pool_t *pool);
+/* Non-deprecated wrapper variant of svn_wc_entries_read used implement
+ legacy API functions. See svn_wc_entries_read for a detailed description.
+ */
+svn_error_t *
+svn_wc__entries_read_internal(apr_hash_t **entries,
+ svn_wc_adm_access_t *adm_access,
+ svn_boolean_t show_hidden,
+ apr_pool_t *pool);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/libsvn_wc/externals.c b/subversion/libsvn_wc/externals.c
index ccb86f9..3725b22 100644
--- a/subversion/libsvn_wc/externals.c
+++ b/subversion/libsvn_wc/externals.c
@@ -30,6 +30,7 @@
#include <apr_hash.h>
#include <apr_tables.h>
#include <apr_general.h>
+#include <apr_uri.h>
#include "svn_dirent_uri.h"
#include "svn_path.h"
@@ -44,6 +45,7 @@
#include "svn_wc.h"
#include "private/svn_skel.h"
+#include "private/svn_subr_private.h"
#include "wc.h"
#include "adm_files.h"
@@ -162,13 +164,16 @@ svn_wc_parse_externals_description3(apr_array_header_t **externals_p,
svn_boolean_t canonicalize_url,
apr_pool_t *pool)
{
- apr_array_header_t *lines = svn_cstring_split(desc, "\n\r", TRUE, pool);
int i;
+ apr_array_header_t *externals = NULL;
+ apr_array_header_t *lines = svn_cstring_split(desc, "\n\r", TRUE, pool);
const char *parent_directory_display = svn_path_is_url(parent_directory) ?
parent_directory : svn_dirent_local_style(parent_directory, pool);
+ /* If an error occurs halfway through parsing, *externals_p should stay
+ * untouched. So, store the list in a local var first. */
if (externals_p)
- *externals_p = apr_array_make(pool, 1, sizeof(svn_wc_external_item2_t *));
+ externals = apr_array_make(pool, 1, sizeof(svn_wc_external_item2_t *));
for (i = 0; i < lines->nelts; i++)
{
@@ -200,8 +205,7 @@ svn_wc_parse_externals_description3(apr_array_header_t **externals_p,
for (num_line_parts = 0; line_parts[num_line_parts]; num_line_parts++)
;
- SVN_ERR(svn_wc_external_item_create
- ((const svn_wc_external_item2_t **) &item, pool));
+ SVN_ERR(svn_wc_external_item2_create(&item, pool));
item->revision.kind = svn_opt_revision_unspecified;
item->peg_revision.kind = svn_opt_revision_unspecified;
@@ -327,13 +331,63 @@ svn_wc_parse_externals_description3(apr_array_header_t **externals_p,
item->url = svn_dirent_canonicalize(item->url, pool);
}
- if (externals_p)
- APR_ARRAY_PUSH(*externals_p, svn_wc_external_item2_t *) = item;
+ if (externals)
+ APR_ARRAY_PUSH(externals, svn_wc_external_item2_t *) = item;
}
+ if (externals_p)
+ *externals_p = externals;
+
return SVN_NO_ERROR;
}
+svn_error_t *
+svn_wc__externals_find_target_dups(apr_array_header_t **duplicate_targets,
+ apr_array_header_t *externals,
+ apr_pool_t *pool,
+ apr_pool_t *scratch_pool)
+{
+ int i;
+ unsigned int len;
+ unsigned int len2;
+ const char *target;
+ apr_hash_t *targets = apr_hash_make(scratch_pool);
+ apr_hash_t *targets2 = NULL;
+ *duplicate_targets = NULL;
+
+ for (i = 0; i < externals->nelts; i++)
+ {
+ target = APR_ARRAY_IDX(externals, i,
+ svn_wc_external_item2_t*)->target_dir;
+ len = apr_hash_count(targets);
+ svn_hash_sets(targets, target, "");
+ if (len == apr_hash_count(targets))
+ {
+ /* Hashtable length is unchanged. This must be a duplicate. */
+
+ /* Collapse multiple duplicates of the same target by using a second
+ * hash layer. */
+ if (! targets2)
+ targets2 = apr_hash_make(scratch_pool);
+ len2 = apr_hash_count(targets2);
+ svn_hash_sets(targets2, target, "");
+ if (len2 < apr_hash_count(targets2))
+ {
+ /* The second hash list just got bigger, i.e. this target has
+ * not been counted as duplicate before. */
+ if (! *duplicate_targets)
+ {
+ *duplicate_targets = apr_array_make(
+ pool, 1, sizeof(svn_wc_external_item2_t*));
+ }
+ APR_ARRAY_PUSH((*duplicate_targets), const char *) = target;
+ }
+ /* Else, this same target has already been recorded as a duplicate,
+ * don't count it again. */
+ }
+ }
+ return SVN_NO_ERROR;
+}
struct edit_baton
{
@@ -360,6 +414,9 @@ struct edit_baton
svn_revnum_t recorded_peg_revision;
svn_revnum_t recorded_revision;
+ /* Introducing a new file external */
+ svn_boolean_t added;
+
svn_wc_conflict_resolver_func2_t conflict_func;
void *conflict_baton;
svn_cancel_func_t cancel_func;
@@ -381,6 +438,10 @@ struct edit_baton
/* List of incoming propchanges */
apr_array_header_t *propchanges;
+ /* Array of svn_prop_inherited_item_t * structures representing the
+ properties inherited by the base node at LOCAL_ABSPATH. */
+ apr_array_header_t *iprops;
+
/* The last change information */
svn_revnum_t changed_rev;
apr_time_t changed_date;
@@ -433,6 +494,7 @@ add_file(const char *path,
*file_baton = eb;
eb->original_revision = SVN_INVALID_REVNUM;
+ eb->added = TRUE;
return SVN_NO_ERROR;
}
@@ -446,7 +508,7 @@ open_file(const char *path,
void **file_baton)
{
struct edit_baton *eb = parent_baton;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
if (strcmp(path, eb->name))
return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
_("This editor can only update '%s'"),
@@ -458,11 +520,11 @@ open_file(const char *path,
NULL, NULL, NULL, &eb->changed_rev,
&eb->changed_date, &eb->changed_author,
NULL, &eb->original_checksum, NULL, NULL,
- &eb->had_props, NULL,
+ &eb->had_props, NULL, NULL,
eb->db, eb->local_abspath,
eb->pool, file_pool));
- if (kind != svn_wc__db_kind_file)
+ if (kind != svn_node_file)
return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
_("Node '%s' is no existing file external"),
svn_dirent_local_style(eb->local_abspath,
@@ -559,6 +621,7 @@ close_file(void *file_baton,
eb->file_closed = TRUE; /* We bump the revision here */
+ /* Check the checksum, if provided */
if (expected_md5_digest)
{
svn_checksum_t *expected_md5_checksum;
@@ -600,10 +663,10 @@ close_file(void *file_baton,
eb->new_pristine_abspath = NULL;
}
- /* ### TODO: Merge the changes */
-
+ /* Merge the changes */
{
svn_skel_t *all_work_items = NULL;
+ svn_skel_t *conflict_skel = NULL;
svn_skel_t *work_item;
apr_hash_t *base_props = NULL;
apr_hash_t *actual_props = NULL;
@@ -614,20 +677,19 @@ close_file(void *file_baton,
const svn_checksum_t *original_checksum = NULL;
svn_boolean_t added = !SVN_IS_VALID_REVNUM(eb->original_revision);
- const char *repos_relpath = svn_uri__is_child(eb->repos_root_url,
- eb->url, pool);
+ const char *repos_relpath = svn_uri_skip_ancestor(eb->repos_root_url,
+ eb->url, pool);
if (! added)
{
new_checksum = eb->original_checksum;
if (eb->had_props)
- SVN_ERR(svn_wc__db_base_get_props(&base_props, eb->db,
- eb->local_abspath,
- pool, pool));
+ SVN_ERR(svn_wc__db_base_get_props(
+ &base_props, eb->db, eb->local_abspath, pool, pool));
- SVN_ERR(svn_wc__db_read_props(&actual_props, eb->db,
- eb->local_abspath, pool, pool));
+ SVN_ERR(svn_wc__db_read_props(
+ &actual_props, eb->db, eb->local_abspath, pool, pool));
}
if (!base_props)
@@ -639,6 +701,7 @@ close_file(void *file_baton,
if (eb->new_sha1_checksum)
new_checksum = eb->new_sha1_checksum;
+ /* Merge the properties */
{
apr_array_header_t *entry_prop_changes;
apr_array_header_t *dav_prop_changes;
@@ -649,6 +712,7 @@ close_file(void *file_baton,
&dav_prop_changes, &regular_prop_changes,
pool));
+ /* Read the entry-prop changes to update the last-changed info. */
for (i = 0; i < entry_prop_changes->nelts; i++)
{
const svn_prop_t *prop = &APR_ARRAY_IDX(entry_prop_changes, i,
@@ -670,31 +734,26 @@ close_file(void *file_baton,
pool));
}
+ /* Store the DAV-prop (aka WC-prop) changes. (This treats a list
+ * of changes as a list of new props, but we only use this when
+ * adding a new file and it's equivalent in that case.) */
if (dav_prop_changes->nelts > 0)
new_dav_props = svn_prop_array_to_hash(dav_prop_changes, pool);
+ /* Merge the regular prop changes. */
if (regular_prop_changes->nelts > 0)
{
- SVN_ERR(svn_wc__merge_props(&work_item, &prop_state,
- &new_pristine_props,
+ new_pristine_props = svn_prop__patch(base_props, regular_prop_changes,
+ pool);
+ SVN_ERR(svn_wc__merge_props(&conflict_skel,
+ &prop_state,
&new_actual_props,
eb->db, eb->local_abspath,
- svn_wc__db_kind_file,
- NULL, NULL,
NULL /* server_baseprops*/,
base_props,
actual_props,
regular_prop_changes,
- TRUE /* base_merge */,
- FALSE /* dry_run */,
- eb->conflict_func,
- eb->conflict_baton,
- eb->cancel_func, eb->cancel_baton,
pool, pool));
-
- if (work_item)
- all_work_items = svn_wc__wq_merge(all_work_items, work_item,
- pool);
}
else
{
@@ -703,6 +762,7 @@ close_file(void *file_baton,
}
}
+ /* Merge the text */
if (eb->new_sha1_checksum)
{
svn_node_kind_t disk_kind;
@@ -717,7 +777,8 @@ close_file(void *file_baton,
install_pristine = TRUE;
content_state = svn_wc_notify_state_changed;
}
- else if (disk_kind != svn_node_file)
+ else if (disk_kind != svn_node_file
+ || (eb->added && disk_kind == svn_node_file))
{
/* The node is obstructed; we just change the DB */
obstructed = TRUE;
@@ -737,10 +798,12 @@ close_file(void *file_baton,
}
else
{
- enum svn_wc_merge_outcome_t merge_outcome;
+ svn_boolean_t found_text_conflict;
+
/* Ok, we have to do some work to merge a local change */
SVN_ERR(svn_wc__perform_file_merge(&work_item,
- &merge_outcome,
+ &conflict_skel,
+ &found_text_conflict,
eb->db,
eb->local_abspath,
eb->wri_abspath,
@@ -752,8 +815,6 @@ close_file(void *file_baton,
*eb->target_revision,
eb->propchanges,
eb->diff3cmd,
- eb->conflict_func,
- eb->conflict_baton,
eb->cancel_func,
eb->cancel_baton,
pool, pool));
@@ -761,7 +822,7 @@ close_file(void *file_baton,
all_work_items = svn_wc__wq_merge(all_work_items, work_item,
pool);
- if (merge_outcome == svn_wc_merge_conflict)
+ if (found_text_conflict)
content_state = svn_wc_notify_state_conflicted;
else
content_state = svn_wc_notify_state_merged;
@@ -784,6 +845,35 @@ close_file(void *file_baton,
/* ### Retranslate on magic property changes, etc. */
}
+ /* Generate a conflict description, if needed */
+ if (conflict_skel)
+ {
+ SVN_ERR(svn_wc__conflict_skel_set_op_switch(
+ conflict_skel,
+ svn_wc_conflict_version_create2(
+ eb->repos_root_url,
+ eb->repos_uuid,
+ repos_relpath,
+ eb->original_revision,
+ svn_node_file,
+ pool),
+ svn_wc_conflict_version_create2(
+ eb->repos_root_url,
+ eb->repos_uuid,
+ repos_relpath,
+ *eb->target_revision,
+ svn_node_file,
+ pool),
+ pool, pool));
+ SVN_ERR(svn_wc__conflict_create_markers(&work_item,
+ eb->db, eb->local_abspath,
+ conflict_skel,
+ pool, pool));
+ all_work_items = svn_wc__wq_merge(all_work_items, work_item,
+ pool);
+ }
+
+ /* Install the file in the DB */
SVN_ERR(svn_wc__db_external_add_file(
eb->db,
eb->local_abspath,
@@ -793,6 +883,7 @@ close_file(void *file_baton,
eb->repos_uuid,
*eb->target_revision,
new_pristine_props,
+ eb->iprops,
eb->changed_rev,
eb->changed_date,
eb->changed_author,
@@ -804,19 +895,28 @@ close_file(void *file_baton,
eb->recorded_revision,
TRUE, new_actual_props,
FALSE /* keep_recorded_info */,
+ conflict_skel,
all_work_items,
pool));
+ /* close_edit may also update iprops for switched files, catching
+ those for which close_file is never called (e.g. an update of a
+ file external with no changes). So as a minor optimization we
+ clear the iprops so as not to set them again in close_edit. */
+ eb->iprops = NULL;
+
+ /* Run the work queue to complete the installation */
SVN_ERR(svn_wc__wq_run(eb->db, eb->wri_abspath,
eb->cancel_func, eb->cancel_baton, pool));
}
+ /* Notify */
if (eb->notify_func)
{
svn_wc_notify_action_t action;
svn_wc_notify_t *notify;
- if (SVN_IS_VALID_REVNUM(eb->original_revision))
+ if (!eb->added)
action = obstructed ? svn_wc_notify_update_shadowed_update
: svn_wc_notify_update_update;
else
@@ -835,7 +935,6 @@ close_file(void *file_baton,
eb->notify_func(eb->notify_baton, notify, pool);
}
-
return SVN_NO_ERROR;
}
@@ -848,14 +947,60 @@ close_edit(void *edit_baton,
if (!eb->file_closed)
{
- /* The node wasn't updated, so we just have to bump its revision */
- SVN_ERR(svn_wc__db_op_bump_revisions_post_update(eb->db,
- eb->local_abspath,
- svn_depth_infinity,
- NULL, NULL, NULL,
- *eb->target_revision,
- apr_hash_make(pool),
- pool));
+ /* The file wasn't updated, but its url or revision might have...
+ e.g. switch between branches for relative externals.
+
+ Just bump the information as that is just as expensive as
+ investigating when we should and shouldn't update it...
+ and avoid hard to debug edge cases */
+
+ svn_node_kind_t kind;
+ const char *old_repos_relpath;
+ svn_revnum_t changed_rev;
+ apr_time_t changed_date;
+ const char *changed_author;
+ const svn_checksum_t *checksum;
+ apr_hash_t *pristine_props;
+ const char *repos_relpath = svn_uri_skip_ancestor(eb->repos_root_url,
+ eb->url, pool);
+
+ SVN_ERR(svn_wc__db_base_get_info(NULL, &kind, NULL, &old_repos_relpath,
+ NULL, NULL, &changed_rev, &changed_date,
+ &changed_author, NULL, &checksum, NULL,
+ NULL, NULL, &pristine_props, NULL,
+ eb->db, eb->local_abspath,
+ pool, pool));
+
+ if (kind != svn_node_file)
+ return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
+ _("Node '%s' is no existing file external"),
+ svn_dirent_local_style(eb->local_abspath,
+ pool));
+
+ SVN_ERR(svn_wc__db_external_add_file(
+ eb->db,
+ eb->local_abspath,
+ eb->wri_abspath,
+ repos_relpath,
+ eb->repos_root_url,
+ eb->repos_uuid,
+ *eb->target_revision,
+ pristine_props,
+ eb->iprops,
+ eb->changed_rev,
+ eb->changed_date,
+ eb->changed_author,
+ checksum,
+ NULL /* clear dav props */,
+ eb->record_ancestor_abspath,
+ eb->recorded_repos_relpath,
+ eb->recorded_peg_revision,
+ eb->recorded_revision,
+ FALSE, NULL,
+ TRUE /* keep_recorded_info */,
+ NULL /* conflict_skel */,
+ NULL /* work_items */,
+ pool));
}
return SVN_NO_ERROR;
@@ -871,6 +1016,7 @@ svn_wc__get_file_external_editor(const svn_delta_editor_t **editor,
const char *url,
const char *repos_root_url,
const char *repos_uuid,
+ apr_array_header_t *iprops,
svn_boolean_t use_commit_times,
const char *diff3_cmd,
const apr_array_header_t *preserved_exts,
@@ -906,13 +1052,15 @@ svn_wc__get_file_external_editor(const svn_delta_editor_t **editor,
eb->repos_root_url = apr_pstrdup(edit_pool, repos_root_url);
eb->repos_uuid = apr_pstrdup(edit_pool, repos_uuid);
+ eb->iprops = iprops;
+
eb->use_commit_times = use_commit_times;
eb->ext_patterns = preserved_exts;
eb->diff3cmd = diff3_cmd;
eb->record_ancestor_abspath = apr_pstrdup(edit_pool,record_ancestor_abspath);
- eb->recorded_repos_relpath = svn_uri__is_child(repos_root_url, recorded_url,
- edit_pool);
+ eb->recorded_repos_relpath = svn_uri_skip_ancestor(repos_root_url, recorded_url,
+ edit_pool);
eb->changed_rev = SVN_INVALID_REVNUM;
@@ -965,7 +1113,7 @@ svn_wc__crawl_file_external(svn_wc_context_t *wc_ctx,
{
svn_wc__db_t *db = wc_ctx->db;
svn_error_t *err;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
svn_wc__db_lock_t *lock;
svn_revnum_t revision;
const char *repos_root_url;
@@ -975,12 +1123,12 @@ svn_wc__crawl_file_external(svn_wc_context_t *wc_ctx,
err = svn_wc__db_base_get_info(NULL, &kind, &revision,
&repos_relpath, &repos_root_url, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, &lock,
- NULL, &update_root,
+ NULL, NULL, &update_root,
db, local_abspath,
scratch_pool, scratch_pool);
if (err
- || kind == svn_wc__db_kind_dir
+ || kind == svn_node_dir
|| !update_root)
{
if (err && err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND)
@@ -1064,7 +1212,7 @@ svn_wc__read_external_info(svn_node_kind_t *external_kind,
{
const char *repos_root_url;
svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
svn_error_t *err;
err = svn_wc__db_external_read(&status, &kind, defining_abspath,
@@ -1106,11 +1254,11 @@ svn_wc__read_external_info(svn_node_kind_t *external_kind,
else
switch(kind)
{
- case svn_wc__db_kind_file:
- case svn_wc__db_kind_symlink:
+ case svn_node_file:
+ case svn_node_symlink:
*external_kind = svn_node_file;
break;
- case svn_wc__db_kind_dir:
+ case svn_node_dir:
*external_kind = svn_node_dir;
break;
default:
@@ -1125,6 +1273,108 @@ svn_wc__read_external_info(svn_node_kind_t *external_kind,
return SVN_NO_ERROR;
}
+/* Return TRUE in *IS_ROLLED_OUT iff a node exists at XINFO->LOCAL_ABSPATH and
+ * if that node's origin corresponds with XINFO->REPOS_ROOT_URL and
+ * XINFO->REPOS_RELPATH. All allocations are made in SCRATCH_POOL. */
+static svn_error_t *
+is_external_rolled_out(svn_boolean_t *is_rolled_out,
+ svn_wc_context_t *wc_ctx,
+ svn_wc__committable_external_info_t *xinfo,
+ apr_pool_t *scratch_pool)
+{
+ const char *repos_relpath;
+ const char *repos_root_url;
+ svn_error_t *err;
+
+ *is_rolled_out = FALSE;
+
+ err = svn_wc__db_base_get_info(NULL, NULL, NULL, &repos_relpath,
+ &repos_root_url, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ wc_ctx->db, xinfo->local_abspath,
+ scratch_pool, scratch_pool);
+
+ if (err)
+ {
+ if (err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ return SVN_NO_ERROR;
+ }
+ SVN_ERR(err);
+ }
+
+ *is_rolled_out = (strcmp(xinfo->repos_root_url, repos_root_url) == 0 &&
+ strcmp(xinfo->repos_relpath, repos_relpath) == 0);
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__committable_externals_below(apr_array_header_t **externals,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ svn_depth_t depth,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ apr_array_header_t *orig_externals;
+ int i;
+ apr_pool_t *iterpool;
+
+ /* For svn_depth_files, this also fetches dirs. They are filtered later. */
+ SVN_ERR(svn_wc__db_committable_externals_below(&orig_externals,
+ wc_ctx->db,
+ local_abspath,
+ depth != svn_depth_infinity,
+ result_pool, scratch_pool));
+
+ if (orig_externals == NULL)
+ return SVN_NO_ERROR;
+
+ iterpool = svn_pool_create(scratch_pool);
+
+ for (i = 0; i < orig_externals->nelts; i++)
+ {
+ svn_boolean_t is_rolled_out;
+
+ svn_wc__committable_external_info_t *xinfo =
+ APR_ARRAY_IDX(orig_externals, i,
+ svn_wc__committable_external_info_t *);
+
+ /* Discard dirs for svn_depth_files (s.a.). */
+ if (depth == svn_depth_files
+ && xinfo->kind == svn_node_dir)
+ continue;
+
+ svn_pool_clear(iterpool);
+
+ /* Discard those externals that are not currently checked out. */
+ SVN_ERR(is_external_rolled_out(&is_rolled_out, wc_ctx, xinfo,
+ iterpool));
+ if (! is_rolled_out)
+ continue;
+
+ if (*externals == NULL)
+ *externals = apr_array_make(
+ result_pool, 0,
+ sizeof(svn_wc__committable_external_info_t *));
+
+ APR_ARRAY_PUSH(*externals,
+ svn_wc__committable_external_info_t *) = xinfo;
+
+ if (depth != svn_depth_infinity)
+ continue;
+
+ /* Are there any nested externals? */
+ SVN_ERR(svn_wc__committable_externals_below(externals, wc_ctx,
+ xinfo->local_abspath,
+ svn_depth_infinity,
+ result_pool, iterpool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
svn_error_t *
svn_wc__externals_defined_below(apr_hash_t **externals,
svn_wc_context_t *wc_ctx,
@@ -1168,12 +1418,13 @@ svn_error_t *
svn_wc__external_remove(svn_wc_context_t *wc_ctx,
const char *wri_abspath,
const char *local_abspath,
+ svn_boolean_t declaration_only,
svn_cancel_func_t cancel_func,
void *cancel_baton,
apr_pool_t *scratch_pool)
{
svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
SVN_ERR(svn_wc__db_external_read(&status, &kind, NULL, NULL, NULL, NULL,
NULL, NULL,
@@ -1183,15 +1434,25 @@ svn_wc__external_remove(svn_wc_context_t *wc_ctx,
SVN_ERR(svn_wc__db_external_remove(wc_ctx->db, local_abspath, wri_abspath,
NULL, scratch_pool));
- if (kind == svn_wc__db_kind_dir)
+ if (declaration_only)
+ return SVN_NO_ERROR;
+
+ if (kind == svn_node_dir)
SVN_ERR(svn_wc_remove_from_revision_control2(wc_ctx, local_abspath,
- TRUE, FALSE,
+ TRUE, TRUE,
cancel_func, cancel_baton,
scratch_pool));
else
{
- SVN_ERR(svn_wc__db_base_remove(wc_ctx->db, local_abspath, scratch_pool));
- SVN_ERR(svn_io_remove_file2(local_abspath, TRUE, scratch_pool));
+ SVN_ERR(svn_wc__db_base_remove(wc_ctx->db, local_abspath,
+ FALSE /* keep_as_working */,
+ TRUE /* queue_deletes */,
+ FALSE /* remove_locks */,
+ SVN_INVALID_REVNUM,
+ NULL, NULL, scratch_pool));
+ SVN_ERR(svn_wc__wq_run(wc_ctx->db, local_abspath,
+ cancel_func, cancel_baton,
+ scratch_pool));
}
return SVN_NO_ERROR;
@@ -1235,8 +1496,7 @@ svn_wc__externals_gather_definitions(apr_hash_t **externals,
}
if (value)
- apr_hash_set(*externals, local_abspath, APR_HASH_KEY_STRING,
- value->data);
+ svn_hash_sets(*externals, local_abspath, value->data);
if (value && depths)
{
@@ -1251,8 +1511,7 @@ svn_wc__externals_gather_definitions(apr_hash_t **externals,
wc_ctx->db, local_abspath,
scratch_pool, scratch_pool));
- apr_hash_set(*depths, local_abspath, APR_HASH_KEY_STRING,
- svn_depth_to_word(node_depth));
+ svn_hash_sets(*depths, local_abspath, svn_depth_to_word(node_depth));
}
return SVN_NO_ERROR;
@@ -1268,3 +1527,195 @@ svn_wc__close_db(const char *external_abspath,
scratch_pool));
return SVN_NO_ERROR;
}
+
+/* Return the scheme of @a uri in @a scheme allocated from @a pool.
+ If @a uri does not appear to be a valid URI, then @a scheme will
+ not be updated. */
+static svn_error_t *
+uri_scheme(const char **scheme, const char *uri, apr_pool_t *pool)
+{
+ apr_size_t i;
+
+ for (i = 0; uri[i] && uri[i] != ':'; ++i)
+ if (uri[i] == '/')
+ goto error;
+
+ if (i > 0 && uri[i] == ':' && uri[i+1] == '/' && uri[i+2] == '/')
+ {
+ *scheme = apr_pstrmemdup(pool, uri, i);
+ return SVN_NO_ERROR;
+ }
+
+error:
+ return svn_error_createf(SVN_ERR_BAD_URL, 0,
+ _("URL '%s' does not begin with a scheme"),
+ uri);
+}
+
+svn_error_t *
+svn_wc__resolve_relative_external_url(const char **resolved_url,
+ const svn_wc_external_item2_t *item,
+ const char *repos_root_url,
+ const char *parent_dir_url,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ const char *url = item->url;
+ apr_uri_t parent_dir_uri;
+ apr_status_t status;
+
+ *resolved_url = item->url;
+
+ /* If the URL is already absolute, there is nothing to do. */
+ if (svn_path_is_url(url))
+ {
+ /* "http://server/path" */
+ *resolved_url = svn_uri_canonicalize(url, result_pool);
+ return SVN_NO_ERROR;
+ }
+
+ if (url[0] == '/')
+ {
+ /* "/path", "//path", and "///path" */
+ int num_leading_slashes = 1;
+ if (url[1] == '/')
+ {
+ num_leading_slashes++;
+ if (url[2] == '/')
+ num_leading_slashes++;
+ }
+
+ /* "//schema-relative" and in some cases "///schema-relative".
+ This last format is supported on file:// schema relative. */
+ url = apr_pstrcat(scratch_pool,
+ apr_pstrndup(scratch_pool, url, num_leading_slashes),
+ svn_relpath_canonicalize(url + num_leading_slashes,
+ scratch_pool),
+ (char*)NULL);
+ }
+ else
+ {
+ /* "^/path" and "../path" */
+ url = svn_relpath_canonicalize(url, scratch_pool);
+ }
+
+ /* Parse the parent directory URL into its parts. */
+ status = apr_uri_parse(scratch_pool, parent_dir_url, &parent_dir_uri);
+ if (status)
+ return svn_error_createf(SVN_ERR_BAD_URL, 0,
+ _("Illegal parent directory URL '%s'"),
+ parent_dir_url);
+
+ /* If the parent directory URL is at the server root, then the URL
+ may have no / after the hostname so apr_uri_parse() will leave
+ the URL's path as NULL. */
+ if (! parent_dir_uri.path)
+ parent_dir_uri.path = apr_pstrmemdup(scratch_pool, "/", 1);
+ parent_dir_uri.query = NULL;
+ parent_dir_uri.fragment = NULL;
+
+ /* Handle URLs relative to the current directory or to the
+ repository root. The backpaths may only remove path elements,
+ not the hostname. This allows an external to refer to another
+ repository in the same server relative to the location of this
+ repository, say using SVNParentPath. */
+ if ((0 == strncmp("../", url, 3)) ||
+ (0 == strncmp("^/", url, 2)))
+ {
+ apr_array_header_t *base_components;
+ apr_array_header_t *relative_components;
+ int i;
+
+ /* Decompose either the parent directory's URL path or the
+ repository root's URL path into components. */
+ if (0 == strncmp("../", url, 3))
+ {
+ base_components = svn_path_decompose(parent_dir_uri.path,
+ scratch_pool);
+ relative_components = svn_path_decompose(url, scratch_pool);
+ }
+ else
+ {
+ apr_uri_t repos_root_uri;
+
+ status = apr_uri_parse(scratch_pool, repos_root_url,
+ &repos_root_uri);
+ if (status)
+ return svn_error_createf(SVN_ERR_BAD_URL, 0,
+ _("Illegal repository root URL '%s'"),
+ repos_root_url);
+
+ /* If the repository root URL is at the server root, then
+ the URL may have no / after the hostname so
+ apr_uri_parse() will leave the URL's path as NULL. */
+ if (! repos_root_uri.path)
+ repos_root_uri.path = apr_pstrmemdup(scratch_pool, "/", 1);
+
+ base_components = svn_path_decompose(repos_root_uri.path,
+ scratch_pool);
+ relative_components = svn_path_decompose(url + 2, scratch_pool);
+ }
+
+ for (i = 0; i < relative_components->nelts; ++i)
+ {
+ const char *component = APR_ARRAY_IDX(relative_components,
+ i,
+ const char *);
+ if (0 == strcmp("..", component))
+ {
+ /* Constructing the final absolute URL together with
+ apr_uri_unparse() requires that the path be absolute,
+ so only pop a component if the component being popped
+ is not the component for the root directory. */
+ if (base_components->nelts > 1)
+ apr_array_pop(base_components);
+ }
+ else
+ APR_ARRAY_PUSH(base_components, const char *) = component;
+ }
+
+ parent_dir_uri.path = (char *)svn_path_compose(base_components,
+ scratch_pool);
+ *resolved_url = svn_uri_canonicalize(apr_uri_unparse(scratch_pool,
+ &parent_dir_uri, 0),
+ result_pool);
+ return SVN_NO_ERROR;
+ }
+
+ /* The remaining URLs are relative to either the scheme or server root
+ and can only refer to locations inside that scope, so backpaths are
+ not allowed. */
+ if (svn_path_is_backpath_present(url))
+ return svn_error_createf(SVN_ERR_BAD_URL, 0,
+ _("The external relative URL '%s' cannot have "
+ "backpaths, i.e. '..'"),
+ item->url);
+
+ /* Relative to the scheme: Build a new URL from the parts we know. */
+ if (0 == strncmp("//", url, 2))
+ {
+ const char *scheme;
+
+ SVN_ERR(uri_scheme(&scheme, repos_root_url, scratch_pool));
+ *resolved_url = svn_uri_canonicalize(apr_pstrcat(scratch_pool, scheme,
+ ":", url, (char *)NULL),
+ result_pool);
+ return SVN_NO_ERROR;
+ }
+
+ /* Relative to the server root: Just replace the path portion of the
+ parent's URL. */
+ if (url[0] == '/')
+ {
+ parent_dir_uri.path = (char *)url;
+ *resolved_url = svn_uri_canonicalize(apr_uri_unparse(scratch_pool,
+ &parent_dir_uri, 0),
+ result_pool);
+ return SVN_NO_ERROR;
+ }
+
+ return svn_error_createf(SVN_ERR_BAD_URL, 0,
+ _("Unrecognized format for the relative external "
+ "URL '%s'"),
+ item->url);
+}
diff --git a/subversion/libsvn_wc/info.c b/subversion/libsvn_wc/info.c
index f4e10cf..dc80ee7 100644
--- a/subversion/libsvn_wc/info.c
+++ b/subversion/libsvn_wc/info.c
@@ -22,6 +22,7 @@
*/
#include "svn_dirent_uri.h"
+#include "svn_hash.h"
#include "svn_path.h"
#include "svn_pools.h"
#include "svn_wc.h"
@@ -41,8 +42,7 @@ svn_wc_info_dup(const svn_wc_info_t *info,
if (info->changelist)
new_info->changelist = apr_pstrdup(pool, info->changelist);
- if (info->checksum)
- new_info->checksum = svn_checksum_dup(info->checksum, pool);
+ new_info->checksum = svn_checksum_dup(info->checksum, pool);
if (info->conflicts)
{
int i;
@@ -63,6 +63,11 @@ svn_wc_info_dup(const svn_wc_info_t *info,
new_info->copyfrom_url = apr_pstrdup(pool, info->copyfrom_url);
if (info->wcroot_abspath)
new_info->wcroot_abspath = apr_pstrdup(pool, info->wcroot_abspath);
+ if (info->moved_from_abspath)
+ new_info->moved_from_abspath = apr_pstrdup(pool, info->moved_from_abspath);
+ if (info->moved_to_abspath)
+ new_info->moved_to_abspath = apr_pstrdup(pool, info->moved_to_abspath);
+
return new_info;
}
@@ -81,7 +86,7 @@ build_info_for_node(svn_wc__info2_t **info,
svn_wc__info2_t *tmpinfo;
const char *repos_relpath;
svn_wc__db_status_t status;
- svn_wc__db_kind_t db_kind;
+ svn_node_kind_t db_kind;
const char *original_repos_relpath;
const char *original_repos_root_url;
const char *original_uuid;
@@ -90,6 +95,7 @@ build_info_for_node(svn_wc__info2_t **info,
svn_boolean_t conflicted;
svn_boolean_t op_root;
svn_boolean_t have_base;
+ svn_boolean_t have_more_work;
svn_wc_info_t *wc_info;
tmpinfo = apr_pcalloc(result_pool, sizeof(*tmpinfo));
@@ -114,7 +120,7 @@ build_info_for_node(svn_wc__info2_t **info,
&wc_info->recorded_time,
&wc_info->changelist,
&conflicted, &op_root, NULL, NULL,
- &have_base, NULL, NULL,
+ &have_base, &have_more_work, NULL,
db, local_abspath,
result_pool, scratch_pool));
@@ -139,12 +145,26 @@ build_info_for_node(svn_wc__info2_t **info,
if (op_root)
{
+ svn_error_t *err;
wc_info->copyfrom_url =
svn_path_url_add_component2(tmpinfo->repos_root_URL,
original_repos_relpath,
result_pool);
wc_info->copyfrom_rev = original_revision;
+
+ err = svn_wc__db_scan_moved(&wc_info->moved_from_abspath,
+ NULL, NULL, NULL,
+ db, local_abspath,
+ result_pool, scratch_pool);
+
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_WC_PATH_UNEXPECTED_STATUS)
+ return svn_error_trace(err);
+ svn_error_clear(err);
+ wc_info->moved_from_abspath = NULL;
+ }
}
}
else if (op_root)
@@ -161,7 +181,7 @@ build_info_for_node(svn_wc__info2_t **info,
SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, &tmpinfo->rev, NULL,
NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL,
- NULL,
+ NULL, NULL,
db, local_abspath,
scratch_pool, scratch_pool));
}
@@ -178,9 +198,30 @@ build_info_for_node(svn_wc__info2_t **info,
/* ### We should be able to avoid both these calls with the information
from read_info() in most cases */
- SVN_ERR(svn_wc__internal_node_get_schedule(&wc_info->schedule, NULL,
- db, local_abspath,
- scratch_pool));
+ if (! op_root)
+ wc_info->schedule = svn_wc_schedule_normal;
+ else if (! have_more_work && ! have_base)
+ wc_info->schedule = svn_wc_schedule_add;
+ else
+ {
+ svn_wc__db_status_t below_working;
+ svn_boolean_t have_work;
+
+ SVN_ERR(svn_wc__db_info_below_working(&have_base, &have_work,
+ &below_working,
+ db, local_abspath,
+ scratch_pool));
+
+ /* If the node is not present or deleted (read: not present
+ in working), then the node is not a replacement */
+ if (below_working != svn_wc__db_status_not_present
+ && below_working != svn_wc__db_status_deleted)
+ {
+ wc_info->schedule = svn_wc_schedule_replace;
+ }
+ else
+ wc_info->schedule = svn_wc_schedule_add;
+ }
SVN_ERR(svn_wc__db_read_url(&tmpinfo->URL, db, local_abspath,
result_pool, scratch_pool));
}
@@ -194,13 +235,13 @@ build_info_for_node(svn_wc__info2_t **info,
&tmpinfo->last_changed_author,
&wc_info->depth,
&wc_info->checksum,
- NULL, NULL,
+ NULL, NULL, NULL,
db, local_abspath,
result_pool, scratch_pool));
/* And now fetch the url and revision of what will be deleted */
- SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL,
- &work_del_abspath,
+ SVN_ERR(svn_wc__db_scan_deletion(NULL, &wc_info->moved_to_abspath,
+ &work_del_abspath, NULL,
db, local_abspath,
scratch_pool, scratch_pool));
if (work_del_abspath != NULL)
@@ -233,7 +274,7 @@ build_info_for_node(svn_wc__info2_t **info,
&tmpinfo->repos_root_URL,
&tmpinfo->repos_UUID, NULL, NULL,
NULL, NULL, NULL, NULL,
- NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
db, local_abspath,
result_pool, scratch_pool));
@@ -269,9 +310,10 @@ build_info_for_node(svn_wc__info2_t **info,
local_abspath, result_pool, scratch_pool));
if (conflicted)
- SVN_ERR(svn_wc__db_read_conflicts(&wc_info->conflicts, db,
- local_abspath,
- result_pool, scratch_pool));
+ SVN_ERR(svn_wc__read_conflicts(&wc_info->conflicts, db,
+ local_abspath,
+ TRUE /* ### create tempfiles */,
+ result_pool, scratch_pool));
else
wc_info->conflicts = NULL;
@@ -285,8 +327,6 @@ build_info_for_node(svn_wc__info2_t **info,
tmpinfo->lock->creation_date = lock->date;
}
- /* ### Temporary hacks to keep our test suite happy: */
-
*info = tmpinfo;
return SVN_NO_ERROR;
}
@@ -377,29 +417,28 @@ info_found_node_callback(const char *local_abspath,
* are not visited will remain in the list. */
if (fe_baton->actual_only && kind == svn_node_dir)
{
- apr_hash_t *conflicts;
- apr_hash_index_t *hi;
-
- SVN_ERR(svn_wc__db_op_read_all_tree_conflicts(
- &conflicts, fe_baton->db, local_abspath,
- fe_baton->pool, scratch_pool));
- for (hi = apr_hash_first(scratch_pool, conflicts); hi;
- hi = apr_hash_next(hi))
+ const apr_array_header_t *victims;
+ int i;
+
+ SVN_ERR(svn_wc__db_read_conflict_victims(&victims,
+ fe_baton->db, local_abspath,
+ scratch_pool, scratch_pool));
+
+ for (i = 0; i < victims->nelts; i++)
{
- const char *this_basename = svn__apr_hash_index_key(hi);
+ const char *this_basename = APR_ARRAY_IDX(victims, i, const char *);
- apr_hash_set(fe_baton->tree_conflicts,
- svn_dirent_join(local_abspath, this_basename,
- fe_baton->pool),
- APR_HASH_KEY_STRING, svn__apr_hash_index_val(hi));
+ svn_hash_sets(fe_baton->tree_conflicts,
+ svn_dirent_join(local_abspath, this_basename,
+ fe_baton->pool),
+ "");
}
}
/* Delete this path which we are currently visiting from the list of tree
* conflicts. This relies on the walker visiting a directory before visiting
* its children. */
- apr_hash_set(fe_baton->tree_conflicts, local_abspath, APR_HASH_KEY_STRING,
- NULL);
+ svn_hash_sets(fe_baton->tree_conflicts, local_abspath, NULL);
return SVN_NO_ERROR;
}
@@ -441,6 +480,8 @@ svn_wc__get_info(svn_wc_context_t *wc_ctx,
svn_error_t *err;
apr_pool_t *iterpool = svn_pool_create(scratch_pool);
apr_hash_index_t *hi;
+ const char *repos_root_url = NULL;
+ const char *repos_uuid = NULL;
fe_baton.receiver = receiver;
fe_baton.receiver_baton = receiver_baton;
@@ -465,25 +506,24 @@ svn_wc__get_info(svn_wc_context_t *wc_ctx,
&& fetch_actual_only
&& err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
{
- const svn_wc_conflict_description2_t *root_tree_conflict;
+ svn_boolean_t tree_conflicted;
svn_error_t *err2;
- err2 = svn_wc__db_op_read_tree_conflict(&root_tree_conflict,
- wc_ctx->db, local_abspath,
- scratch_pool, iterpool);
+ err2 = svn_wc__internal_conflicted_p(NULL, NULL, &tree_conflicted,
+ wc_ctx->db, local_abspath,
+ iterpool);
if ((err2 && err2->apr_err == SVN_ERR_WC_PATH_NOT_FOUND))
{
svn_error_clear(err2);
return svn_error_trace(err);
}
- else if (err2 || !root_tree_conflict)
+ else if (err2 || !tree_conflicted)
return svn_error_compose_create(err, err2);
svn_error_clear(err);
- apr_hash_set(fe_baton.tree_conflicts, local_abspath,
- APR_HASH_KEY_STRING, root_tree_conflict);
+ svn_hash_sets(fe_baton.tree_conflicts, local_abspath, "");
}
else
SVN_ERR(err);
@@ -494,30 +534,45 @@ svn_wc__get_info(svn_wc_context_t *wc_ctx,
hi = apr_hash_next(hi))
{
const char *this_abspath = svn__apr_hash_index_key(hi);
- const svn_wc_conflict_description2_t *tree_conflict
- = svn__apr_hash_index_val(hi);
+ const svn_wc_conflict_description2_t *tree_conflict;
+ svn_wc__info2_t *info;
svn_pool_clear(iterpool);
- if (depth_includes(local_abspath, depth, tree_conflict->local_abspath,
- tree_conflict->node_kind, iterpool))
+ SVN_ERR(build_info_for_unversioned(&info, iterpool));
+
+ if (!repos_root_url)
{
- apr_array_header_t *conflicts = apr_array_make(iterpool,
- 1, sizeof(const svn_wc_conflict_description2_t *));
- svn_wc__info2_t *info;
-
- SVN_ERR(build_info_for_unversioned(&info, iterpool));
- SVN_ERR(svn_wc__internal_get_repos_info(&info->repos_root_URL,
- &info->repos_UUID,
- fe_baton.db,
- local_abspath,
- iterpool, iterpool));
- APR_ARRAY_PUSH(conflicts, const svn_wc_conflict_description2_t *)
- = tree_conflict;
- info->wc_info->conflicts = conflicts;
-
- SVN_ERR(receiver(receiver_baton, this_abspath, info, iterpool));
+ SVN_ERR(svn_wc__internal_get_repos_info(NULL, NULL,
+ &repos_root_url,
+ &repos_uuid,
+ wc_ctx->db,
+ svn_dirent_dirname(
+ this_abspath,
+ iterpool),
+ scratch_pool,
+ iterpool));
}
+
+ info->repos_root_URL = repos_root_url;
+ info->repos_UUID = repos_uuid;
+
+ SVN_ERR(svn_wc__read_conflicts(&info->wc_info->conflicts,
+ wc_ctx->db, this_abspath,
+ TRUE /* ### create tempfiles */,
+ iterpool, iterpool));
+
+ if (! info->wc_info->conflicts || ! info->wc_info->conflicts->nelts)
+ continue;
+
+ tree_conflict = APR_ARRAY_IDX(info->wc_info->conflicts, 0,
+ svn_wc_conflict_description2_t *);
+
+ if (!depth_includes(local_abspath, depth, tree_conflict->local_abspath,
+ tree_conflict->node_kind, iterpool))
+ continue;
+
+ SVN_ERR(receiver(receiver_baton, this_abspath, info, iterpool));
}
svn_pool_destroy(iterpool);
diff --git a/subversion/libsvn_wc/lock.c b/subversion/libsvn_wc/lock.c
index 0f7e73b..36fbb0e 100644
--- a/subversion/libsvn_wc/lock.c
+++ b/subversion/libsvn_wc/lock.c
@@ -97,7 +97,9 @@ svn_wc__internal_check_wc(int *wc_format,
{
svn_node_kind_t kind;
- if (err->apr_err != SVN_ERR_WC_MISSING)
+ if (err->apr_err != SVN_ERR_WC_MISSING &&
+ err->apr_err != SVN_ERR_WC_UNSUPPORTED_FORMAT &&
+ err->apr_err != SVN_ERR_WC_UPGRADE_REQUIRED)
return svn_error_trace(err);
svn_error_clear(err);
@@ -122,64 +124,64 @@ svn_wc__internal_check_wc(int *wc_format,
}
}
- if (*wc_format >= SVN_WC__WC_NG_VERSION)
- {
- svn_wc__db_status_t db_status;
- svn_wc__db_kind_t db_kind;
-
- if (check_path)
- {
- /* If a node is not a directory, it is not a working copy
- directory. This allows creating new working copies as
- a path below an existing working copy. */
- svn_node_kind_t wc_kind;
-
- SVN_ERR(svn_io_check_path(local_abspath, &wc_kind, scratch_pool));
- if (wc_kind != svn_node_dir)
- {
- *wc_format = 0; /* Not a directory, so not a wc-directory */
- return SVN_NO_ERROR;
- }
- }
-
- err = svn_wc__db_read_info(&db_status, &db_kind, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL,
- db, local_abspath,
- scratch_pool, scratch_pool);
-
- if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
- {
- svn_error_clear(err);
- *wc_format = 0;
- return SVN_NO_ERROR;
- }
- else
- SVN_ERR(err);
-
- if (db_kind != svn_wc__db_kind_dir)
- {
- /* The WC thinks there must be a file, so this is not
- a wc-directory */
+ if (*wc_format >= SVN_WC__WC_NG_VERSION)
+ {
+ svn_wc__db_status_t db_status;
+ svn_node_kind_t db_kind;
+
+ if (check_path)
+ {
+ /* If a node is not a directory, it is not a working copy
+ directory. This allows creating new working copies as
+ a path below an existing working copy. */
+ svn_node_kind_t wc_kind;
+
+ SVN_ERR(svn_io_check_path(local_abspath, &wc_kind, scratch_pool));
+ if (wc_kind != svn_node_dir)
+ {
+ *wc_format = 0; /* Not a directory, so not a wc-directory */
+ return SVN_NO_ERROR;
+ }
+ }
+
+ err = svn_wc__db_read_info(&db_status, &db_kind, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL,
+ db, local_abspath,
+ scratch_pool, scratch_pool);
+
+ if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ *wc_format = 0;
+ return SVN_NO_ERROR;
+ }
+ else
+ SVN_ERR(err);
+
+ if (db_kind != svn_node_dir)
+ {
+ /* The WC thinks there must be a file, so this is not
+ a wc-directory */
+ *wc_format = 0;
+ return SVN_NO_ERROR;
+ }
+
+ switch (db_status)
+ {
+ case svn_wc__db_status_not_present:
+ case svn_wc__db_status_server_excluded:
+ case svn_wc__db_status_excluded:
+ /* If there is a directory here, it is not related to the parent
+ working copy: Obstruction */
*wc_format = 0;
return SVN_NO_ERROR;
- }
-
- switch (db_status)
- {
- case svn_wc__db_status_not_present:
- case svn_wc__db_status_server_excluded:
- case svn_wc__db_status_excluded:
- /* If there is a directory here, it is not related to the parent
- working copy: Obstruction */
- *wc_format = 0;
- return SVN_NO_ERROR;
- default:
- break;
- }
- }
+ default:
+ break;
+ }
+ }
return SVN_NO_ERROR;
}
@@ -330,7 +332,7 @@ pool_cleanup_locked(void *p)
run, but the subpools will NOT be destroyed) */
scratch_pool = svn_pool_create(lock->pool);
- err = svn_wc__db_open(&db, NULL /* ### config. need! */, TRUE, TRUE,
+ err = svn_wc__db_open(&db, NULL /* ### config. need! */, FALSE, TRUE,
scratch_pool, scratch_pool);
if (!err)
{
@@ -593,7 +595,7 @@ open_single(svn_wc_adm_access_t **adm_access,
### adminstrative area. */
static svn_error_t *
adm_available(svn_boolean_t *available,
- svn_wc__db_kind_t *kind,
+ svn_node_kind_t *kind,
svn_wc__db_t *db,
const char *local_abspath,
apr_pool_t *scratch_pool)
@@ -601,7 +603,7 @@ adm_available(svn_boolean_t *available,
svn_wc__db_status_t status;
if (kind)
- *kind = svn_wc__db_kind_unknown;
+ *kind = svn_node_unknown;
SVN_ERR(svn_wc__db_read_info(&status, kind, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
@@ -659,7 +661,7 @@ do_open(svn_wc_adm_access_t **adm_access,
for (i = 0; i < children->nelts; i++)
{
const char *node_abspath;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
svn_boolean_t available;
const char *name = APR_ARRAY_IDX(children, i, const char *);
@@ -677,7 +679,7 @@ do_open(svn_wc_adm_access_t **adm_access,
node_abspath,
scratch_pool));
- if (kind != svn_wc__db_kind_dir)
+ if (kind != svn_node_dir)
continue;
if (available)
@@ -780,7 +782,7 @@ svn_wc_adm_open3(svn_wc_adm_access_t **adm_access,
do it here. */
/* ### we could optimize around levels_to_lock==0, but much of this
### is going to be simplified soon anyways. */
- SVN_ERR(svn_wc__db_open(&db, NULL /* ### config. need! */, TRUE, TRUE,
+ SVN_ERR(svn_wc__db_open(&db, NULL /* ### config. need! */, FALSE, TRUE,
pool, pool));
db_provided = FALSE;
}
@@ -810,7 +812,7 @@ svn_wc_adm_probe_open3(svn_wc_adm_access_t **adm_access,
/* Ugh. Too bad about having to open a DB. */
SVN_ERR(svn_wc__db_open(&db,
- NULL /* ### config */, TRUE, TRUE, pool, pool));
+ NULL /* ### config */, FALSE, TRUE, pool, pool));
err = probe(db, &dir, path, pool);
svn_error_clear(svn_wc__db_close(db));
SVN_ERR(err);
@@ -885,7 +887,7 @@ svn_wc_adm_retrieve(svn_wc_adm_access_t **adm_access,
apr_pool_t *pool)
{
const char *local_abspath;
- svn_wc__db_kind_t kind = svn_wc__db_kind_unknown;
+ svn_node_kind_t kind = svn_node_unknown;
svn_node_kind_t wckind;
svn_error_t *err;
@@ -920,16 +922,19 @@ svn_wc_adm_retrieve(svn_wc_adm_access_t **adm_access,
if (associated)
{
err = svn_wc__db_read_kind(&kind, svn_wc__adm_get_db(associated),
- local_abspath, TRUE, pool);
+ local_abspath,
+ TRUE /* allow_missing */,
+ TRUE /* show_deleted */,
+ FALSE /* show_hidden */, pool);
if (err)
{
- kind = svn_wc__db_kind_unknown;
+ kind = svn_node_unknown;
svn_error_clear(err);
}
}
- if (kind == svn_wc__db_kind_dir && wckind == svn_node_file)
+ if (kind == svn_node_dir && wckind == svn_node_file)
{
err = svn_error_createf(
SVN_ERR_WC_NOT_WORKING_COPY, NULL,
@@ -939,7 +944,7 @@ svn_wc_adm_retrieve(svn_wc_adm_access_t **adm_access,
return svn_error_create(SVN_ERR_WC_NOT_LOCKED, err, err->message);
}
- if (kind != svn_wc__db_kind_dir && kind != svn_wc__db_kind_unknown)
+ if (kind != svn_node_dir && kind != svn_node_unknown)
{
err = svn_error_createf(
SVN_ERR_WC_NOT_WORKING_COPY, NULL,
@@ -949,7 +954,7 @@ svn_wc_adm_retrieve(svn_wc_adm_access_t **adm_access,
return svn_error_create(SVN_ERR_WC_NOT_LOCKED, err, err->message);
}
- if (kind == svn_wc__db_kind_unknown || wckind == svn_node_none)
+ if (kind == svn_node_unknown || wckind == svn_node_none)
{
err = svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
_("Directory '%s' is missing"),
@@ -974,17 +979,21 @@ svn_wc_adm_probe_retrieve(svn_wc_adm_access_t **adm_access,
{
const char *dir;
const char *local_abspath;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
svn_error_t *err;
SVN_ERR_ASSERT(associated != NULL);
SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, pool));
- SVN_ERR(svn_wc__db_read_kind(&kind, associated->db, local_abspath, TRUE, pool));
+ SVN_ERR(svn_wc__db_read_kind(&kind, associated->db, local_abspath,
+ TRUE /* allow_missing */,
+ TRUE /* show_deleted */,
+ FALSE /* show_hidden*/,
+ pool));
- if (kind == svn_wc__db_kind_dir)
+ if (kind == svn_node_dir)
dir = path;
- else if (kind != svn_wc__db_kind_unknown)
+ else if (kind != svn_node_unknown)
dir = svn_dirent_dirname(path, pool);
else
/* Not a versioned item, probe it */
@@ -1060,75 +1069,21 @@ child_is_disjoint(svn_boolean_t *disjoint,
const char *local_abspath,
apr_pool_t *scratch_pool)
{
- const char *node_repos_root, *node_repos_relpath, *node_repos_uuid;
- const char *parent_repos_root, *parent_repos_relpath, *parent_repos_uuid;
- svn_wc__db_status_t parent_status;
- const char *parent_abspath, *base;
+ svn_boolean_t is_switched;
/* Check if the parent directory knows about this node */
- SVN_ERR(svn_wc__db_is_wcroot(disjoint, db, local_abspath, scratch_pool));
+ SVN_ERR(svn_wc__db_is_switched(disjoint, &is_switched, NULL,
+ db, local_abspath, scratch_pool));
if (*disjoint)
return SVN_NO_ERROR;
- svn_dirent_split(&parent_abspath, &base, local_abspath, scratch_pool);
-
- SVN_ERR(svn_wc__db_read_info(NULL, NULL, NULL, &node_repos_relpath,
- &node_repos_root, &node_repos_uuid, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL,
- db, local_abspath,
- scratch_pool, scratch_pool));
-
- /* If the node does not have its own repos_relpath, its value is inherited
- from a parent node, which implies that the node is not disjoint. */
- if (node_repos_relpath == NULL)
- {
- *disjoint = FALSE;
- return SVN_NO_ERROR;
- }
-
- SVN_ERR(svn_wc__db_read_info(&parent_status, NULL, NULL,
- &parent_repos_relpath, &parent_repos_root,
- &parent_repos_uuid, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL,
- db, parent_abspath,
- scratch_pool, scratch_pool));
-
- if (parent_repos_relpath == NULL)
- {
- if (parent_status == svn_wc__db_status_added)
- SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, &parent_repos_relpath,
- &parent_repos_root,
- &parent_repos_uuid,
- NULL, NULL, NULL, NULL,
- db, parent_abspath,
- scratch_pool, scratch_pool));
- else
- SVN_ERR(svn_wc__db_scan_base_repos(&parent_repos_relpath,
- &parent_repos_root,
- &parent_repos_uuid,
- db, parent_abspath,
- scratch_pool, scratch_pool));
- }
-
- if (strcmp(parent_repos_root, node_repos_root) != 0 ||
- strcmp(parent_repos_uuid, node_repos_uuid) != 0 ||
- strcmp(svn_relpath_join(parent_repos_relpath, base, scratch_pool),
- node_repos_relpath) != 0)
- {
- *disjoint = TRUE;
- }
- else
- *disjoint = FALSE;
+ if (is_switched)
+ *disjoint = TRUE;
return SVN_NO_ERROR;
}
-
/* */
static svn_error_t *
open_anchor(svn_wc_adm_access_t **anchor_access,
@@ -1152,7 +1107,7 @@ open_anchor(svn_wc_adm_access_t **anchor_access,
### given that we need DB for format detection, may as well keep this.
### in any case, much of this is going to be simplified soon anyways. */
if (!db_provided)
- SVN_ERR(svn_wc__db_open(&db, NULL, /* ### config. need! */ TRUE, TRUE,
+ SVN_ERR(svn_wc__db_open(&db, NULL, /* ### config. need! */ FALSE, TRUE,
pool, pool));
if (svn_path_is_empty(path)
@@ -1284,7 +1239,7 @@ open_anchor(svn_wc_adm_access_t **anchor_access,
if (! t_access)
{
svn_boolean_t available;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
err = adm_available(&available, &kind, db, local_abspath, pool);
@@ -1473,6 +1428,11 @@ svn_wc_adm_access_pool(const svn_wc_adm_access_t *adm_access)
return adm_access->pool;
}
+apr_pool_t *
+svn_wc__adm_access_pool_internal(const svn_wc_adm_access_t *adm_access)
+{
+ return adm_access->pool;
+}
void
svn_wc__adm_access_set_entries(svn_wc_adm_access_t *adm_access,
@@ -1511,30 +1471,34 @@ svn_wc__acquire_write_lock(const char **lock_root_abspath,
apr_pool_t *scratch_pool)
{
svn_wc__db_t *db = wc_ctx->db;
- svn_wc__db_kind_t kind;
+ svn_boolean_t is_wcroot;
+ svn_boolean_t is_switched;
+ svn_node_kind_t kind;
svn_error_t *err;
- SVN_ERR(svn_wc__db_read_kind(&kind, wc_ctx->db, local_abspath,
- (lock_root_abspath != NULL),
- scratch_pool));
+ err = svn_wc__db_is_switched(&is_wcroot, &is_switched, &kind,
+ db, local_abspath, scratch_pool);
+
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND)
+ return svn_error_trace(err);
+
+ svn_error_clear(err);
+
+ kind = svn_node_none;
+ is_wcroot = FALSE;
+ is_switched = FALSE;
+ }
- if (!lock_root_abspath && kind != svn_wc__db_kind_dir)
+ if (!lock_root_abspath && kind != svn_node_dir)
return svn_error_createf(SVN_ERR_WC_NOT_DIRECTORY, NULL,
_("Can't obtain lock on non-directory '%s'."),
svn_dirent_local_style(local_abspath,
scratch_pool));
- if (lock_anchor && kind == svn_wc__db_kind_dir)
+ if (lock_anchor && kind == svn_node_dir)
{
- svn_boolean_t is_wcroot;
-
- SVN_ERR_ASSERT(lock_root_abspath != NULL);
-
- /* Perform a cheap check to avoid looking for a parent working copy,
- which might be very expensive in some specific scenarios */
- SVN_ERR(svn_wc__db_is_wcroot(&is_wcroot, db, local_abspath,
- scratch_pool));
-
if (is_wcroot)
lock_anchor = FALSE;
}
@@ -1542,54 +1506,49 @@ svn_wc__acquire_write_lock(const char **lock_root_abspath,
if (lock_anchor)
{
const char *parent_abspath;
- svn_wc__db_kind_t parent_kind;
-
SVN_ERR_ASSERT(lock_root_abspath != NULL);
parent_abspath = svn_dirent_dirname(local_abspath, scratch_pool);
- err = svn_wc__db_read_kind(&parent_kind, db, parent_abspath, TRUE,
- scratch_pool);
- if (err && SVN_WC__ERR_IS_NOT_CURRENT_WC(err))
+
+ if (kind == svn_node_dir)
{
- svn_error_clear(err);
- parent_kind = svn_wc__db_kind_unknown;
+ if (! is_switched)
+ local_abspath = parent_abspath;
+ }
+ else if (kind != svn_node_none && kind != svn_node_unknown)
+ {
+ /* In the single-DB world we know parent exists */
+ local_abspath = parent_abspath;
}
else
- SVN_ERR(err);
-
- if (kind == svn_wc__db_kind_dir && parent_kind == svn_wc__db_kind_dir)
{
- svn_boolean_t disjoint;
- SVN_ERR(child_is_disjoint(&disjoint, wc_ctx->db, local_abspath,
- scratch_pool));
- if (!disjoint)
- local_abspath = parent_abspath;
+ /* Can't lock parents that don't exist */
+ svn_node_kind_t parent_kind;
+ err = svn_wc__db_read_kind(&parent_kind, db, parent_abspath,
+ TRUE /* allow_missing */,
+ TRUE /* show_deleted */,
+ FALSE /* show_hidden */,
+ scratch_pool);
+ if (err && SVN_WC__ERR_IS_NOT_CURRENT_WC(err))
+ {
+ svn_error_clear(err);
+ parent_kind = svn_node_unknown;
+ }
+ else
+ SVN_ERR(err);
+
+ if (parent_kind != svn_node_dir)
+ return svn_error_createf(SVN_ERR_WC_NOT_WORKING_COPY, NULL,
+ _("'%s' is not a working copy"),
+ svn_dirent_local_style(local_abspath,
+ scratch_pool));
+
+ local_abspath = parent_abspath;
}
- else if (parent_kind == svn_wc__db_kind_dir)
- local_abspath = parent_abspath;
- else if (kind != svn_wc__db_kind_dir)
- return svn_error_createf(SVN_ERR_WC_NOT_WORKING_COPY, NULL,
- _("'%s' is not a working copy"),
- svn_dirent_local_style(local_abspath,
- scratch_pool));
}
- else if (kind != svn_wc__db_kind_dir)
+ else if (kind != svn_node_dir)
{
local_abspath = svn_dirent_dirname(local_abspath, scratch_pool);
-
- /* Can't lock parents that don't exist */
- if (kind == svn_wc__db_kind_unknown)
- {
- SVN_ERR(svn_wc__db_read_kind(&kind, db, local_abspath, FALSE,
- scratch_pool));
-
- if (kind != svn_wc__db_kind_dir)
- return svn_error_createf(
- SVN_ERR_WC_NOT_DIRECTORY, NULL,
- _("Can't obtain lock on non-directory '%s'."),
- svn_dirent_local_style(local_abspath,
- scratch_pool));
- }
}
if (lock_root_abspath)
@@ -1645,4 +1604,53 @@ svn_wc__call_with_write_lock(svn_wc__with_write_lock_func_t func,
}
+svn_error_t *
+svn_wc__acquire_write_lock_for_resolve(const char **lock_root_abspath,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_boolean_t locked = FALSE;
+ const char *obtained_abspath;
+ const char *requested_abspath = local_abspath;
+ while (!locked)
+ {
+ const char *required_abspath;
+ const char *child;
+
+ SVN_ERR(svn_wc__acquire_write_lock(&obtained_abspath, wc_ctx,
+ requested_abspath, FALSE,
+ scratch_pool, scratch_pool));
+ locked = TRUE;
+
+ SVN_ERR(svn_wc__required_lock_for_resolve(&required_abspath,
+ wc_ctx->db, local_abspath,
+ scratch_pool, scratch_pool));
+
+ /* It's possible for the required lock path to be an ancestor
+ of, a descendent of, or equal to, the obtained lock path. If
+ it's an ancestor we have to try again, otherwise the obtained
+ lock will do. */
+ child = svn_dirent_skip_ancestor(required_abspath, obtained_abspath);
+ if (child && child[0])
+ {
+ SVN_ERR(svn_wc__release_write_lock(wc_ctx, obtained_abspath,
+ scratch_pool));
+ locked = FALSE;
+ requested_abspath = required_abspath;
+ }
+ else
+ {
+ /* required should be a descendent of, or equal to, obtained */
+ SVN_ERR_ASSERT(!strcmp(required_abspath, obtained_abspath)
+ || svn_dirent_skip_ancestor(obtained_abspath,
+ required_abspath));
+ }
+ }
+
+ *lock_root_abspath = apr_pstrdup(result_pool, obtained_abspath);
+
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/libsvn_wc/lock.h b/subversion/libsvn_wc/lock.h
index f5b9874..e015c7e 100644
--- a/subversion/libsvn_wc/lock.h
+++ b/subversion/libsvn_wc/lock.h
@@ -77,6 +77,13 @@ svn_wc__adm_get_db(const svn_wc_adm_access_t *adm_access);
const char *
svn_wc__adm_access_abspath(const svn_wc_adm_access_t *adm_access);
+/* Return the pool used by access baton ADM_ACCESS.
+ * Note: This is a non-deprecated variant of svn_wc_adm_access_pool for
+ * libsvn_wc internal usage only.
+ */
+apr_pool_t *
+svn_wc__adm_access_pool_internal(const svn_wc_adm_access_t *adm_access);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/libsvn_wc/merge.c b/subversion/libsvn_wc/merge.c
index 7492cb9..7cff3e4 100644
--- a/subversion/libsvn_wc/merge.c
+++ b/subversion/libsvn_wc/merge.c
@@ -29,6 +29,7 @@
#include "wc.h"
#include "adm_files.h"
+#include "conflicts.h"
#include "translate.h"
#include "workqueue.h"
@@ -44,7 +45,7 @@ typedef struct merge_target_t
const char *local_abspath; /* The absolute path to target */
const char *wri_abspath; /* The working copy of target */
- apr_hash_t *actual_props; /* The set of actual properties
+ apr_hash_t *old_actual_props; /* The set of actual properties
before merging */
const apr_array_header_t *prop_diff; /* The property changes */
@@ -57,18 +58,18 @@ typedef struct merge_target_t
/* Return a pointer to the svn_prop_t structure from PROP_DIFF
belonging to PROP_NAME, if any. NULL otherwise.*/
static const svn_prop_t *
-get_prop(const merge_target_t *mt,
+get_prop(const apr_array_header_t *prop_diff,
const char *prop_name)
{
- if (mt && mt->prop_diff)
+ if (prop_diff)
{
int i;
- for (i = 0; i < mt->prop_diff->nelts; i++)
+ for (i = 0; i < prop_diff->nelts; i++)
{
- const svn_prop_t *elt = &APR_ARRAY_IDX(mt->prop_diff, i,
+ const svn_prop_t *elt = &APR_ARRAY_IDX(prop_diff, i,
svn_prop_t);
- if (strcmp(elt->name,prop_name) == 0)
+ if (strcmp(elt->name, prop_name) == 0)
return elt;
}
}
@@ -84,8 +85,8 @@ get_prop(const merge_target_t *mt,
3. Retranslate
4. Detranslate
- in 1 pass to get a file which can be compared with the left and right
- files which were created with the 'new props' above.
+ in one pass, to get a file which can be compared with the left and right
+ files which are in repository normal form.
Property changes make this a little complex though. Changes in
@@ -98,39 +99,48 @@ get_prop(const merge_target_t *mt,
Effect for svn:mime-type:
- The value for svn:mime-type affects the translation wrt keywords
- and eol-style settings.
+ If svn:mime-type is considered 'binary', we ignore svn:eol-style (but
+ still translate keywords).
- I) both old and new mime-types are texty
- -> just do the translation dance (as lined out below)
+ I) both old and new mime-types are texty
+ -> just do the translation dance (as lined out below)
+ ### actually we do a shortcut with just one translation:
+ detranslate with the old keywords and ... eol-style
+ (the new re+detranslation is a no-op w.r.t. keywords [1])
- II) the old one is texty, the new one is binary
- -> detranslate with the old eol-style and keywords
- (the new re+detranslation is a no-op)
+ II) the old one is texty, the new one is binary
+ -> detranslate with the old eol-style and keywords
+ (the new re+detranslation is a no-op [1])
- III) the old one is binary, the new one texty
- -> detranslate with the new eol-style
- (the old detranslation is a no-op)
-
- IV) the old and new ones are binary
- -> don't detranslate, just make a straight copy
+ III) the old one is binary, the new one texty
+ -> detranslate with the old keywords and new eol-style
+ (the old detranslation is a no-op w.r.t. eol, and
+ the new re+detranslation is a no-op w.r.t. keywords [1])
+ IV) the old and new ones are binary
+ -> detranslate with the old keywords
+ (the new re+detranslation is a no-op [1])
Effect for svn:eol-style
- I) On add or change use the new value
-
- II) otherwise: use the old value (absent means 'no translation')
+ I) On add or change of svn:eol-style, use the new value
+ II) otherwise: use the old value (absent means 'no translation')
Effect for svn:keywords
- Always use old settings (re+detranslation are no-op)
+ Always use the old settings (re+detranslation are no-op [1]).
+ [1] Translation of keywords from repository normal form to WC form and
+ back is normally a no-op, but is not a no-op if text contains a kw
+ that is only enabled by the new props and is present in non-
+ contracted form (such as "$Rev: 1234 $"). If we want to catch this
+ case we should detranslate with both the old & the new keywords
+ together.
Effect for svn:special
- Always use the old settings (same reasons as for svn:keywords)
+ Always use the old settings (re+detranslation are no-op).
Sets *DETRANSLATED_ABSPATH to the path to the detranslated file,
this may be the same as SOURCE_ABSPATH if FORCE_COPY is FALSE and no
@@ -155,54 +165,57 @@ detranslate_wc_file(const char **detranslated_abspath,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- svn_boolean_t is_binary;
- const svn_prop_t *prop;
+ svn_boolean_t old_is_binary, new_is_binary;
svn_subst_eol_style_t style;
const char *eol;
apr_hash_t *keywords;
svn_boolean_t special;
- const char *mime_value = svn_prop_get_value(mt->actual_props,
- SVN_PROP_MIME_TYPE);
-
- is_binary = (mime_value && svn_mime_type_is_binary(mime_value));
-
- /* See if we need to do a straight copy:
- - old and new mime-types are binary, or
- - old mime-type is binary and no new mime-type specified */
- if (is_binary
- && (((prop = get_prop(mt, SVN_PROP_MIME_TYPE))
- && prop->value && svn_mime_type_is_binary(prop->value->data))
- || prop == NULL))
+
+ {
+ const char *old_mime_value
+ = svn_prop_get_value(mt->old_actual_props, SVN_PROP_MIME_TYPE);
+ const svn_prop_t *prop = get_prop(mt->prop_diff, SVN_PROP_MIME_TYPE);
+ const char *new_mime_value
+ = prop ? (prop->value ? prop->value->data : NULL) : old_mime_value;
+
+ old_is_binary = old_mime_value && svn_mime_type_is_binary(old_mime_value);
+ new_is_binary = new_mime_value && svn_mime_type_is_binary(new_mime_value);;
+ }
+
+ /* See what translations we want to do */
+ if (old_is_binary && new_is_binary)
{
- /* this is case IV above */
- keywords = NULL;
+ /* Case IV. Old and new props 'binary': detranslate keywords only */
+ SVN_ERR(svn_wc__get_translate_info(NULL, NULL, &keywords, NULL,
+ mt->db, mt->local_abspath,
+ mt->old_actual_props, TRUE,
+ scratch_pool, scratch_pool));
+ /* ### Why override 'special'? Elsewhere it has precedence. */
special = FALSE;
eol = NULL;
style = svn_subst_eol_style_none;
}
- else if ((!is_binary)
- && (prop = get_prop(mt, SVN_PROP_MIME_TYPE))
- && prop->value && svn_mime_type_is_binary(prop->value->data))
+ else if (!old_is_binary && new_is_binary)
{
- /* Old props indicate texty, new props indicate binary:
+ /* Case II. Old props indicate texty, new props indicate binary:
detranslate keywords and old eol-style */
SVN_ERR(svn_wc__get_translate_info(&style, &eol,
&keywords,
&special,
mt->db, mt->local_abspath,
- mt->actual_props, TRUE,
+ mt->old_actual_props, TRUE,
scratch_pool, scratch_pool));
}
else
{
- /* New props indicate texty, regardless of old props */
+ /* Case I & III. New props indicate texty, regardless of old props */
/* In case the file used to be special, detranslate specially */
SVN_ERR(svn_wc__get_translate_info(&style, &eol,
&keywords,
&special,
mt->db, mt->local_abspath,
- mt->actual_props, TRUE,
+ mt->old_actual_props, TRUE,
scratch_pool, scratch_pool));
if (special)
@@ -213,13 +226,15 @@ detranslate_wc_file(const char **detranslated_abspath,
}
else
{
+ const svn_prop_t *prop;
+
/* In case a new eol style was set, use that for detranslation */
- if ((prop = get_prop(mt, SVN_PROP_EOL_STYLE)) && prop->value)
+ if ((prop = get_prop(mt->prop_diff, SVN_PROP_EOL_STYLE)) && prop->value)
{
/* Value added or changed */
svn_subst_eol_style_from_value(&style, &eol, prop->value->data);
}
- else if (!is_binary)
+ else if (!old_is_binary)
{
/* Already fetched */
}
@@ -228,11 +243,6 @@ detranslate_wc_file(const char **detranslated_abspath,
eol = NULL;
style = svn_subst_eol_style_none;
}
-
- /* In case there were keywords, detranslate with keywords
- (iff we were texty) */
- if (is_binary)
- keywords = NULL;
}
}
@@ -240,13 +250,11 @@ detranslate_wc_file(const char **detranslated_abspath,
if (force_copy || keywords || eol || special)
{
- const char *wcroot_abspath, *temp_dir_abspath;
+ const char *temp_dir_abspath;
const char *detranslated;
/* Force a copy into the temporary wc area to avoid having
temporary files created below to appear in the actual wc. */
- SVN_ERR(svn_wc__db_get_wcroot(&wcroot_abspath, mt->db, mt->wri_abspath,
- scratch_pool, scratch_pool));
SVN_ERR(svn_wc__db_temp_wcroot_tempdir(&temp_dir_abspath, mt->db,
mt->wri_abspath,
scratch_pool, scratch_pool));
@@ -289,19 +297,19 @@ detranslate_wc_file(const char **detranslated_abspath,
}
/* Updates (by copying and translating) the eol style in
- OLD_TARGET returning the filename containing the
- correct eol style in NEW_TARGET, if an eol style
- change is contained in PROP_DIFF */
+ OLD_TARGET_ABSPATH returning the filename containing the
+ correct eol style in NEW_TARGET_ABSPATH, if an eol style
+ change is contained in PROP_DIFF. */
static svn_error_t *
maybe_update_target_eols(const char **new_target_abspath,
- const merge_target_t *mt,
+ const apr_array_header_t *prop_diff,
const char *old_target_abspath,
svn_cancel_func_t cancel_func,
void *cancel_baton,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- const svn_prop_t *prop = get_prop(mt, SVN_PROP_EOL_STYLE);
+ const svn_prop_t *prop = get_prop(prop_diff, SVN_PROP_EOL_STYLE);
if (prop && prop->value)
{
@@ -367,16 +375,16 @@ init_conflict_markers(const char **target_marker,
}
/* Do a 3-way merge of the files at paths LEFT, DETRANSLATED_TARGET,
- * and RIGHT, using diff options provided in OPTIONS. Store the merge
+ * and RIGHT, using diff options provided in MERGE_OPTIONS. Store the merge
* result in the file RESULT_F.
* If there are conflicts, set *CONTAINS_CONFLICTS to true, and use
* TARGET_LABEL, LEFT_LABEL, and RIGHT_LABEL as labels for conflict
* markers. Else, set *CONTAINS_CONFLICTS to false.
* Do all allocations in POOL. */
-static svn_error_t*
+static svn_error_t *
do_text_merge(svn_boolean_t *contains_conflicts,
apr_file_t *result_f,
- const merge_target_t *mt,
+ const apr_array_header_t *merge_options,
const char *detranslated_target,
const char *left,
const char *right,
@@ -394,9 +402,9 @@ do_text_merge(svn_boolean_t *contains_conflicts,
diff3_options = svn_diff_file_options_create(pool);
- if (mt->merge_options)
+ if (merge_options)
SVN_ERR(svn_diff_file_options_parse(diff3_options,
- mt->merge_options, pool));
+ merge_options, pool));
init_conflict_markers(&target_marker, &left_marker, &right_marker,
@@ -425,10 +433,11 @@ do_text_merge(svn_boolean_t *contains_conflicts,
/* Same as do_text_merge() above, but use the external diff3
* command DIFF3_CMD to perform the merge. Pass MERGE_OPTIONS
* to the diff3 command. Do all allocations in POOL. */
-static svn_error_t*
+static svn_error_t *
do_text_merge_external(svn_boolean_t *contains_conflicts,
apr_file_t *result_f,
- const merge_target_t *mt,
+ const char *diff3_cmd,
+ const apr_array_header_t *merge_options,
const char *detranslated_target,
const char *left_abspath,
const char *right_abspath,
@@ -442,206 +451,14 @@ do_text_merge_external(svn_boolean_t *contains_conflicts,
SVN_ERR(svn_io_run_diff3_3(&exit_code, ".",
detranslated_target, left_abspath, right_abspath,
target_label, left_label, right_label,
- result_f, mt->diff3_cmd,
- mt->merge_options, scratch_pool));
+ result_f, diff3_cmd,
+ merge_options, scratch_pool));
*contains_conflicts = exit_code == 1;
return SVN_NO_ERROR;
}
-/* Create a new file in the same directory as VERSIONED_ABSPATH, with the
- same basename as VERSIONED_ABSPATH, with a ".edited" extension, and set
- *WORK_ITEM to a new work item that will copy and translate from the file
- SOURCE to that new file. It will be translated from repository-normal
- form to working-copy form according to the versioned properties of
- VERSIONED_ABSPATH that are current when the work item is executed.
-
- DB should have a write lock for the directory containing SOURCE.
-
- Allocate *WORK_ITEM in RESULT_POOL. */
-static svn_error_t*
-save_merge_result(svn_skel_t **work_item,
- const merge_target_t *mt,
- const char *source,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- const char *edited_copy_abspath;
- const char *dir_abspath;
- const char *filename;
-
- svn_dirent_split(&dir_abspath, &filename, mt->local_abspath, scratch_pool);
-
- /* ### Should use preserved-conflict-file-exts. */
- /* Create the .edited file within this file's DIR_ABSPATH */
- SVN_ERR(svn_io_open_uniquely_named(NULL,
- &edited_copy_abspath,
- dir_abspath,
- filename,
- ".edited",
- svn_io_file_del_none,
- scratch_pool, scratch_pool));
- SVN_ERR(svn_wc__wq_build_file_copy_translated(work_item,
- mt->db, mt->local_abspath,
- source, edited_copy_abspath,
- result_pool, scratch_pool));
-
- return SVN_NO_ERROR;
-}
-
-/* Deal with the result of the conflict resolution callback, as indicated by
- * CHOICE.
- *
- * Set *WORK_ITEMS to new work items that will ...
- * Set *MERGE_OUTCOME to the result of the 3-way merge.
- *
- * LEFT_ABSPATH, RIGHT_ABSPATH, and TARGET_ABSPATH are the input files to
- * the 3-way merge, and MERGED_FILE is the merged result as generated by the
- * internal or external merge or by the conflict resolution callback.
- *
- * DETRANSLATED_TARGET is the detranslated version of TARGET_ABSPATH
- * (see detranslate_wc_file() above). DIFF3_OPTIONS are passed to the
- * diff3 implementation in case a 3-way merge has to be carried out. */
-static svn_error_t*
-eval_conflict_func_result(svn_skel_t **work_items,
- enum svn_wc_merge_outcome_t *merge_outcome,
- svn_wc_conflict_choice_t choice,
- const merge_target_t *mt,
- const char *left_abspath,
- const char *right_abspath,
- const char *merged_file,
- const char *detranslated_target,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- const char *install_from = NULL;
- svn_boolean_t remove_source = FALSE;
-
- *work_items = NULL;
-
- switch (choice)
- {
- /* If the callback wants to use one of the fulltexts
- to resolve the conflict, so be it.*/
- case svn_wc_conflict_choose_base:
- {
- install_from = left_abspath;
- *merge_outcome = svn_wc_merge_merged;
- break;
- }
- case svn_wc_conflict_choose_theirs_full:
- {
- install_from = right_abspath;
- *merge_outcome = svn_wc_merge_merged;
- break;
- }
- case svn_wc_conflict_choose_mine_full:
- {
- /* Do nothing to merge_target, let it live untouched! */
- *merge_outcome = svn_wc_merge_merged;
- return SVN_NO_ERROR;
- }
- case svn_wc_conflict_choose_theirs_conflict:
- case svn_wc_conflict_choose_mine_conflict:
- {
- const char *chosen_path;
- const char *temp_dir;
- svn_stream_t *chosen_stream;
- svn_diff_t *diff;
- svn_diff_conflict_display_style_t style;
- svn_diff_file_options_t *diff3_options;
-
- diff3_options = svn_diff_file_options_create(scratch_pool);
-
- if (mt->merge_options)
- SVN_ERR(svn_diff_file_options_parse(diff3_options,
- mt->merge_options,
- scratch_pool));
-
- style = choice == svn_wc_conflict_choose_theirs_conflict
- ? svn_diff_conflict_display_latest
- : svn_diff_conflict_display_modified;
-
- SVN_ERR(svn_wc__db_temp_wcroot_tempdir(&temp_dir, mt->db,
- mt->wri_abspath,
- scratch_pool, scratch_pool));
- SVN_ERR(svn_stream_open_unique(&chosen_stream, &chosen_path,
- temp_dir, svn_io_file_del_none,
- scratch_pool, scratch_pool));
-
- SVN_ERR(svn_diff_file_diff3_2(&diff,
- left_abspath,
- detranslated_target, right_abspath,
- diff3_options, scratch_pool));
- SVN_ERR(svn_diff_file_output_merge2(chosen_stream, diff,
- left_abspath,
- detranslated_target,
- right_abspath,
- /* markers ignored */
- NULL, NULL,
- NULL, NULL,
- style,
- scratch_pool));
- SVN_ERR(svn_stream_close(chosen_stream));
-
- install_from = chosen_path;
- remove_source = TRUE;
- *merge_outcome = svn_wc_merge_merged;
- break;
- }
-
- /* For the case of 3-way file merging, we don't
- really distinguish between these return values;
- if the callback claims to have "generally
- resolved" the situation, we still interpret
- that as "OK, we'll assume the merged version is
- good to use". */
- case svn_wc_conflict_choose_merged:
- {
- install_from = merged_file;
- *merge_outcome = svn_wc_merge_merged;
- break;
- }
- case svn_wc_conflict_choose_postpone:
- default:
- {
-#if 0
- /* ### what should this value be? no caller appears to initialize
- ### it, so we really SHOULD be setting a value here. */
- *merge_outcome = svn_wc_merge_merged;
-#endif
-
- /* Assume conflict remains. */
- return SVN_NO_ERROR;
- }
- }
-
- SVN_ERR_ASSERT(install_from != NULL);
-
- {
- svn_skel_t *work_item;
-
- SVN_ERR(svn_wc__wq_build_file_install(&work_item,
- mt->db, mt->local_abspath,
- install_from,
- FALSE /* use_commit_times */,
- FALSE /* record_fileinfo */,
- result_pool, scratch_pool));
- *work_items = svn_wc__wq_merge(*work_items, work_item, result_pool);
-
- if (remove_source)
- {
- SVN_ERR(svn_wc__wq_build_file_remove(&work_item,
- mt->db, install_from,
- result_pool, scratch_pool));
- *work_items = svn_wc__wq_merge(*work_items, work_item, result_pool);
- }
- }
-
- return SVN_NO_ERROR;
-}
-
/* Preserve the three pre-merge files.
Create three empty files, with unique names that each include the
@@ -660,6 +477,7 @@ eval_conflict_func_result(svn_skel_t **work_items,
If target_abspath is not versioned use detranslated_target_abspath
as the target file.
+ ### NOT IMPLEMENTED -- 'detranslated_target_abspath' is not used.
*/
static svn_error_t *
preserve_pre_merge_files(svn_skel_t **work_items,
@@ -722,7 +540,8 @@ preserve_pre_merge_files(svn_skel_t **work_items,
SVN_ERR(svn_io_copy_file(left_abspath, tmp_left, TRUE, scratch_pool));
/* And create a wq item to remove the file later */
- SVN_ERR(svn_wc__wq_build_file_remove(&work_item, mt->db, tmp_left,
+ SVN_ERR(svn_wc__wq_build_file_remove(&work_item, mt->db, wcroot_abspath,
+ tmp_left,
result_pool, scratch_pool));
last_items = svn_wc__wq_merge(last_items, work_item, result_pool);
@@ -738,7 +557,8 @@ preserve_pre_merge_files(svn_skel_t **work_items,
SVN_ERR(svn_io_copy_file(right_abspath, tmp_right, TRUE, scratch_pool));
/* And create a wq item to remove the file later */
- SVN_ERR(svn_wc__wq_build_file_remove(&work_item, mt->db, tmp_right,
+ SVN_ERR(svn_wc__wq_build_file_remove(&work_item, mt->db, wcroot_abspath,
+ tmp_right,
result_pool, scratch_pool));
last_items = svn_wc__wq_merge(last_items, work_item, result_pool);
@@ -788,7 +608,7 @@ preserve_pre_merge_files(svn_skel_t **work_items,
*work_items = svn_wc__wq_merge(*work_items, work_item, result_pool);
/* And maybe delete some tempfiles */
- SVN_ERR(svn_wc__wq_build_file_remove(&work_item, mt->db,
+ SVN_ERR(svn_wc__wq_build_file_remove(&work_item, mt->db, wcroot_abspath,
detranslated_target_copy,
result_pool, scratch_pool));
*work_items = svn_wc__wq_merge(*work_items, work_item, result_pool);
@@ -798,146 +618,49 @@ preserve_pre_merge_files(svn_skel_t **work_items,
return SVN_NO_ERROR;
}
-/* Helper for maybe_resolve_conflicts() below. */
-static const svn_wc_conflict_description2_t *
-setup_text_conflict_desc(const char *left_abspath,
- const char *right_abspath,
- const char *target_abspath,
- const svn_wc_conflict_version_t *left_version,
- const svn_wc_conflict_version_t *right_version,
- const char *result_target,
- const char *detranslated_target,
- const svn_prop_t *mimeprop,
- svn_boolean_t is_binary,
- apr_pool_t *pool)
-{
- svn_wc_conflict_description2_t *cdesc;
-
- cdesc = svn_wc_conflict_description_create_text2(target_abspath, pool);
- cdesc->is_binary = is_binary;
- cdesc->mime_type = (mimeprop && mimeprop->value)
- ? mimeprop->value->data : NULL,
- cdesc->base_abspath = left_abspath;
- cdesc->their_abspath = right_abspath;
- cdesc->my_abspath = detranslated_target;
- cdesc->merged_file = result_target;
-
- cdesc->src_left_version = left_version;
- cdesc->src_right_version = right_version;
-
- return cdesc;
-}
-
-/* XXX Insane amount of parameters... */
-/* RESULT_TARGET is the path to the merged file produced by the internal or
- external 3-way merge. */
-static svn_error_t*
-maybe_resolve_conflicts(svn_skel_t **work_items,
- const merge_target_t *mt,
- const char *left_abspath,
- const char *right_abspath,
- const char *left_label,
- const char *right_label,
- const char *target_label,
- enum svn_wc_merge_outcome_t *merge_outcome,
- const svn_wc_conflict_version_t *left_version,
- const svn_wc_conflict_version_t *right_version,
- const char *result_target,
- const char *detranslated_target,
- svn_wc_conflict_resolver_func2_t conflict_func,
- void *conflict_baton,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- svn_wc_conflict_result_t *result;
- svn_skel_t *work_item;
-
- *work_items = NULL;
-
- /* Give the conflict resolution callback a chance to clean
- up the conflicts before we mark the file 'conflicted' */
- if (!conflict_func)
- {
- /* If there is no interactive conflict resolution then we are effectively
- postponing conflict resolution. */
- result = svn_wc_create_conflict_result(svn_wc_conflict_choose_postpone,
- NULL, result_pool);
- }
- else
- {
- const svn_wc_conflict_description2_t *cdesc;
-
- cdesc = setup_text_conflict_desc(left_abspath,
- right_abspath,
- mt->local_abspath,
- left_version,
- right_version,
- result_target,
- detranslated_target,
- get_prop(mt, SVN_PROP_MIME_TYPE),
- FALSE,
- scratch_pool);
-
- SVN_ERR(conflict_func(&result, cdesc, conflict_baton, scratch_pool,
- scratch_pool));
- if (result == NULL)
- return svn_error_create(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE,
- NULL, _("Conflict callback violated API:"
- " returned no results"));
-
- if (result->save_merged)
- {
- SVN_ERR(save_merge_result(work_items,
- mt,
- /* Look for callback's own
- merged-file first: */
- result->merged_file
- ? result->merged_file
- : result_target,
- result_pool, scratch_pool));
- }
- }
-
- SVN_ERR(eval_conflict_func_result(&work_item,
- merge_outcome,
- result->choice,
- mt,
- left_abspath,
- right_abspath,
- result->merged_file
- ? result->merged_file
- : result_target,
- detranslated_target,
- result_pool, scratch_pool));
- *work_items = svn_wc__wq_merge(*work_items, work_item, result_pool);
-
- if (result->choice != svn_wc_conflict_choose_postpone)
- /* The conflicts have been dealt with, nothing else
- * to do for us here. */
- return SVN_NO_ERROR;
-
- /* The conflicts have not been dealt with. */
- *merge_outcome = svn_wc_merge_conflict;
-
- return SVN_NO_ERROR;
-}
-
-
-/* Attempt a trivial merge of LEFT_ABSPATH and RIGHT_ABSPATH to TARGET_ABSPATH.
- * The merge is trivial if the file at LEFT_ABSPATH equals TARGET_ABSPATH,
- * because in this case the content of RIGHT_ABSPATH can be copied to the
- * target. On success, set *MERGE_OUTCOME to SVN_WC_MERGE_MERGED in case the
+/* Attempt a trivial merge of LEFT_ABSPATH and RIGHT_ABSPATH to
+ * the target file at TARGET_ABSPATH.
+ *
+ * These are the inherently trivial cases:
+ *
+ * left == right == target => no-op
+ * left != right, left == target => target := right
+ *
+ * This case is also treated as trivial:
+ *
+ * left != right, right == target => no-op
+ *
+ * ### Strictly, this case is a conflict, and the no-op outcome is only
+ * one of the possible resolutions.
+ *
+ * TODO: Raise a conflict at this level and implement the 'no-op'
+ * resolution of that conflict at a higher level, in preparation for
+ * being able to support stricter conflict detection.
+ *
+ * This case is inherently trivial but not currently handled here:
+ *
+ * left == right != target => no-op
+ *
+ * The files at LEFT_ABSPATH and RIGHT_ABSPATH are in repository normal
+ * form. The file at DETRANSLATED_TARGET_ABSPATH is a copy of the target,
+ * 'detranslated' to repository normal form, or may be the target file
+ * itself if no translation is necessary.
+ *
+ * When this function updates the target file, it translates to working copy
+ * form.
+ *
+ * On success, set *MERGE_OUTCOME to SVN_WC_MERGE_MERGED in case the
* target was changed, or to SVN_WC_MERGE_UNCHANGED if the target was not
* changed. Install work queue items allocated in RESULT_POOL in *WORK_ITEMS.
- * On failure, set *MERGE_OUTCOME to SVN_WC_MERGE_NO_MERGE. */
+ * On failure, set *MERGE_OUTCOME to SVN_WC_MERGE_NO_MERGE.
+ */
static svn_error_t *
merge_file_trivial(svn_skel_t **work_items,
enum svn_wc_merge_outcome_t *merge_outcome,
const char *left_abspath,
const char *right_abspath,
const char *target_abspath,
+ const char *detranslated_target_abspath,
svn_boolean_t dry_run,
svn_wc__db_t *db,
svn_cancel_func_t cancel_func,
@@ -946,7 +669,9 @@ merge_file_trivial(svn_skel_t **work_items,
apr_pool_t *scratch_pool)
{
svn_skel_t *work_item;
- svn_boolean_t same_contents = FALSE;
+ svn_boolean_t same_left_right;
+ svn_boolean_t same_right_target;
+ svn_boolean_t same_left_target;
svn_node_kind_t kind;
svn_boolean_t is_special;
@@ -959,18 +684,22 @@ merge_file_trivial(svn_skel_t **work_items,
return SVN_NO_ERROR;
}
+ /* Check the files */
+ SVN_ERR(svn_io_files_contents_three_same_p(&same_left_right,
+ &same_right_target,
+ &same_left_target,
+ left_abspath,
+ right_abspath,
+ detranslated_target_abspath,
+ scratch_pool));
+
/* If the LEFT side of the merge is equal to WORKING, then we can
* copy RIGHT directly. */
- SVN_ERR(svn_io_files_contents_same_p(&same_contents, left_abspath,
- target_abspath, scratch_pool));
- if (same_contents)
+ if (same_left_target)
{
- /* Check whether the left side equals the right side.
- * If it does, there is no change to merge so we leave the target
- * unchanged. */
- SVN_ERR(svn_io_files_contents_same_p(&same_contents, left_abspath,
- right_abspath, scratch_pool));
- if (same_contents)
+ /* If the left side equals the right side, there is no change to merge
+ * so we leave the target unchanged. */
+ if (same_left_right)
{
*merge_outcome = svn_wc_merge_unchanged;
}
@@ -984,7 +713,9 @@ merge_file_trivial(svn_skel_t **work_items,
/* The right_abspath might be outside our working copy. In that
case we should copy the file to a safe location before
- installing to avoid breaking the workqueue */
+ installing to avoid breaking the workqueue.
+
+ This matches the behavior in preserve_pre_merge_files */
SVN_ERR(svn_wc__db_get_wcroot(&wcroot_abspath,
db, target_abspath,
@@ -1009,8 +740,6 @@ merge_file_trivial(svn_skel_t **work_items,
cancel_func, cancel_baton,
scratch_pool));
- /* no need to strdup right_abspath, as the wq_build_()
- call already does that for us */
delete_src = TRUE;
}
@@ -1025,7 +754,8 @@ merge_file_trivial(svn_skel_t **work_items,
if (delete_src)
{
SVN_ERR(svn_wc__wq_build_file_remove(
- &work_item, db, right_abspath,
+ &work_item, db, wcroot_abspath,
+ right_abspath,
result_pool, scratch_pool));
*work_items = svn_wc__wq_merge(*work_items, work_item,
result_pool);
@@ -1035,15 +765,48 @@ merge_file_trivial(svn_skel_t **work_items,
return SVN_NO_ERROR;
}
+ else
+ {
+ /* If the locally existing, changed file equals the incoming 'right'
+ * file, there is no conflict. For binary files, we historically
+ * conflicted them needlessly, while merge_text_file figured it out
+ * eventually and returned svn_wc_merge_unchanged for them, which
+ * is what we do here. */
+ if (same_right_target)
+ {
+ *merge_outcome = svn_wc_merge_unchanged;
+ return SVN_NO_ERROR;
+ }
+ }
*merge_outcome = svn_wc_merge_no_merge;
return SVN_NO_ERROR;
}
-/* XXX Insane amount of parameters... */
+/* Handle a non-trivial merge of 'text' files. (Assume that a trivial
+ * merge was not possible.)
+ *
+ * Set *WORK_ITEMS, *CONFLICT_SKEL and *MERGE_OUTCOME according to the
+ * result -- to install the merged file, or to indicate a conflict.
+ *
+ * On successful merge, leave the result in a temporary file and set
+ * *WORK_ITEMS to hold work items that will translate and install that
+ * file into its proper form and place (unless DRY_RUN) and delete the
+ * temporary file (in any case). Set *MERGE_OUTCOME to 'merged' or
+ * 'unchanged'.
+ *
+ * If a conflict occurs, set *MERGE_OUTCOME to 'conflicted', and (unless
+ * DRY_RUN) set *WORK_ITEMS and *CONFLICT_SKEL to record the conflict
+ * and copies of the pre-merge files. See preserve_pre_merge_files()
+ * for details.
+ *
+ * On entry, all of the output pointers must be non-null and *CONFLICT_SKEL
+ * must either point to an existing conflict skel or be NULL.
+ */
static svn_error_t*
merge_text_file(svn_skel_t **work_items,
+ svn_skel_t **conflict_skel,
enum svn_wc_merge_outcome_t *merge_outcome,
const merge_target_t *mt,
const char *left_abspath,
@@ -1052,11 +815,7 @@ merge_text_file(svn_skel_t **work_items,
const char *right_label,
const char *target_label,
svn_boolean_t dry_run,
- const svn_wc_conflict_version_t *left_version,
- const svn_wc_conflict_version_t *right_version,
const char *detranslated_target_abspath,
- svn_wc_conflict_resolver_func2_t conflict_func,
- void *conflict_baton,
svn_cancel_func_t cancel_func,
void *cancel_baton,
apr_pool_t *result_pool,
@@ -1088,7 +847,8 @@ merge_text_file(svn_skel_t **work_items,
if (mt->diff3_cmd)
SVN_ERR(do_text_merge_external(&contains_conflicts,
result_f,
- mt,
+ mt->diff3_cmd,
+ mt->merge_options,
detranslated_target_abspath,
left_abspath,
right_abspath,
@@ -1099,7 +859,7 @@ merge_text_file(svn_skel_t **work_items,
else /* Use internal merge. */
SVN_ERR(do_text_merge(&contains_conflicts,
result_f,
- mt,
+ mt->merge_options,
detranslated_target_abspath,
left_abspath,
right_abspath,
@@ -1110,24 +870,10 @@ merge_text_file(svn_skel_t **work_items,
SVN_ERR(svn_io_file_close(result_f, pool));
+ /* Determine the MERGE_OUTCOME, and record any conflict. */
if (contains_conflicts && ! dry_run)
{
- SVN_ERR(maybe_resolve_conflicts(work_items,
- mt,
- left_abspath,
- right_abspath,
- left_label,
- right_label,
- target_label,
- merge_outcome,
- left_version,
- right_version,
- result_target,
- detranslated_target_abspath,
- conflict_func, conflict_baton,
- cancel_func, cancel_baton,
- result_pool, scratch_pool));
-
+ *merge_outcome = svn_wc_merge_conflict;
if (*merge_outcome == svn_wc_merge_conflict)
{
const char *left_copy, *right_copy, *target_copy;
@@ -1143,14 +889,18 @@ merge_text_file(svn_skel_t **work_items,
result_pool, scratch_pool));
*work_items = svn_wc__wq_merge(*work_items, work_item, result_pool);
- /* Track the three conflict files in the metadata.
- * ### TODO WC-NG: Do this outside the work queue: see
- * svn_wc__wq_tmp_build_set_text_conflict_markers()'s doc string. */
- SVN_ERR(svn_wc__wq_tmp_build_set_text_conflict_markers(
- &work_item, mt->db, mt->local_abspath,
- left_copy, right_copy, target_copy,
- result_pool, scratch_pool));
- *work_items = svn_wc__wq_merge(*work_items, work_item, result_pool);
+ /* Track the conflict marker files in the metadata. */
+
+ if (!*conflict_skel)
+ *conflict_skel = svn_wc__conflict_skel_create(result_pool);
+
+ SVN_ERR(svn_wc__conflict_skel_add_text_conflict(*conflict_skel,
+ mt->db, mt->local_abspath,
+ target_copy,
+ left_copy,
+ right_copy,
+ result_pool,
+ scratch_pool));
}
if (*merge_outcome == svn_wc_merge_merged)
@@ -1168,7 +918,7 @@ merge_text_file(svn_skel_t **work_items,
whatever special file types we may invent in the future. */
SVN_ERR(svn_wc__get_translate_info(NULL, NULL, NULL,
&special, mt->db, mt->local_abspath,
- mt->actual_props, TRUE,
+ mt->old_actual_props, TRUE,
pool, pool));
SVN_ERR(svn_io_files_contents_same_p(&same, result_target,
(special ?
@@ -1193,8 +943,8 @@ merge_text_file(svn_skel_t **work_items,
done:
/* Remove the tempfile after use */
- SVN_ERR(svn_wc__wq_build_file_remove(&work_item,
- mt->db, result_target,
+ SVN_ERR(svn_wc__wq_build_file_remove(&work_item, mt->db, mt->local_abspath,
+ result_target,
result_pool, scratch_pool));
*work_items = svn_wc__wq_merge(*work_items, work_item, result_pool);
@@ -1202,10 +952,35 @@ done:
return SVN_NO_ERROR;
}
-
-/* XXX Insane amount of parameters... */
+/* Handle a non-trivial merge of 'binary' files: don't actually merge, just
+ * flag a conflict. (Assume that a trivial merge was not possible.)
+ *
+ * Copy* the files at LEFT_ABSPATH and RIGHT_ABSPATH into the same directory
+ * as the target file, giving them unique names that start with the target
+ * file's name and end with LEFT_LABEL and RIGHT_LABEL respectively.
+ * If the merge target has been 'detranslated' to repository normal form,
+ * move the detranslated file similarly to a unique name ending with
+ * TARGET_LABEL.
+ *
+ * ### * Why do we copy the left and right temp files when we could (maybe
+ * not always?) move them?
+ *
+ * On entry, all of the output pointers must be non-null and *CONFLICT_SKEL
+ * must either point to an existing conflict skel or be NULL.
+ *
+ * Set *WORK_ITEMS, *CONFLICT_SKEL and *MERGE_OUTCOME to indicate the
+ * conflict.
+ *
+ * ### Why do we not use preserve_pre_merge_files() in here? The
+ * behaviour would be slightly different, more consistent: the
+ * preserved 'left' and 'right' files would be translated to working
+ * copy form, which may make a difference when a binary file
+ * contains keyword expansions or when some versions of the file are
+ * not 'binary' even though we're merging in 'binary files' mode.
+ */
static svn_error_t *
merge_binary_file(svn_skel_t **work_items,
+ svn_skel_t **conflict_skel,
enum svn_wc_merge_outcome_t *merge_outcome,
const merge_target_t *mt,
const char *left_abspath,
@@ -1214,11 +989,7 @@ merge_binary_file(svn_skel_t **work_items,
const char *right_label,
const char *target_label,
svn_boolean_t dry_run,
- const svn_wc_conflict_version_t *left_version,
- const svn_wc_conflict_version_t *right_version,
const char *detranslated_target_abspath,
- svn_wc_conflict_resolver_func2_t conflict_func,
- void *conflict_baton,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
@@ -1228,107 +999,17 @@ merge_binary_file(svn_skel_t **work_items,
const char *left_copy, *right_copy;
const char *merge_dirpath, *merge_filename;
const char *conflict_wrk;
- svn_skel_t *work_item;
*work_items = NULL;
svn_dirent_split(&merge_dirpath, &merge_filename, mt->local_abspath, pool);
- /* If we get here the binary files differ. Because we don't know how
- * to merge binary files in a non-trivial way we always flag a conflict. */
-
if (dry_run)
{
*merge_outcome = svn_wc_merge_conflict;
return SVN_NO_ERROR;
}
- /* Give the conflict resolution callback a chance to clean
- up the conflict before we mark the file 'conflicted' */
- if (conflict_func)
- {
- svn_wc_conflict_result_t *result = NULL;
- const svn_wc_conflict_description2_t *cdesc;
- const char *install_from = NULL;
-
- cdesc = setup_text_conflict_desc(left_abspath, right_abspath,
- mt->local_abspath,
- left_version, right_version,
- NULL /* result_target */,
- detranslated_target_abspath,
- get_prop(mt, SVN_PROP_MIME_TYPE),
- TRUE, pool);
-
- SVN_ERR(conflict_func(&result, cdesc, conflict_baton, pool, pool));
- if (result == NULL)
- return svn_error_create(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE,
- NULL, _("Conflict callback violated API:"
- " returned no results"));
-
- switch (result->choice)
- {
- /* For a binary file, there's no merged file to look at,
- unless the conflict-callback did the merging itself. */
- case svn_wc_conflict_choose_base:
- {
- install_from = left_abspath;
- *merge_outcome = svn_wc_merge_merged;
- break;
- }
- case svn_wc_conflict_choose_theirs_full:
- {
- install_from = right_abspath;
- *merge_outcome = svn_wc_merge_merged;
- break;
- }
- /* For a binary file, if the response is to use the
- user's file, we do nothing. We also do nothing if
- the response claims to have already resolved the
- problem.*/
- case svn_wc_conflict_choose_mine_full:
- {
- *merge_outcome = svn_wc_merge_merged;
- return SVN_NO_ERROR;
- }
- case svn_wc_conflict_choose_merged:
- {
- if (! result->merged_file)
- {
- /* Callback asked us to choose its own
- merged file, but didn't provide one! */
- return svn_error_create
- (SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE,
- NULL, _("Conflict callback violated API:"
- " returned no merged file"));
- }
- else
- {
- install_from = result->merged_file;
- *merge_outcome = svn_wc_merge_merged;
- break;
- }
- }
- case svn_wc_conflict_choose_postpone:
- default:
- {
- /* Assume conflict remains, fall through to code below. */
- }
- }
-
- if (install_from != NULL)
- {
- SVN_ERR(svn_wc__wq_build_file_install(work_items,
- mt->db, mt->local_abspath,
- install_from,
- FALSE /* use_commit_times */,
- FALSE /* record_fileinfo */,
- result_pool, scratch_pool));
-
- /* A merge choice was made, so we're done here. */
- return SVN_NO_ERROR;
- }
- }
-
/* reserve names for backups of left and right fulltexts */
SVN_ERR(svn_io_open_uniquely_named(NULL,
&left_copy,
@@ -1374,49 +1055,43 @@ merge_binary_file(svn_skel_t **work_items,
/* Mark target_abspath's entry as "Conflicted", and start tracking
the backup files in the entry as well. */
- SVN_ERR(svn_wc__wq_tmp_build_set_text_conflict_markers(&work_item,
- mt->db,
- mt->local_abspath,
- left_copy,
- right_copy,
- conflict_wrk,
- result_pool,
- scratch_pool));
+ if (!*conflict_skel)
+ *conflict_skel = svn_wc__conflict_skel_create(result_pool);
- *work_items = svn_wc__wq_merge(*work_items, work_item, result_pool);
+ SVN_ERR(svn_wc__conflict_skel_add_text_conflict(*conflict_skel,
+ mt->db, mt->local_abspath,
+ conflict_wrk,
+ left_copy,
+ right_copy,
+ result_pool, scratch_pool));
*merge_outcome = svn_wc_merge_conflict; /* a conflict happened */
return SVN_NO_ERROR;
}
-/* XXX Insane amount of parameters... */
svn_error_t *
svn_wc__internal_merge(svn_skel_t **work_items,
+ svn_skel_t **conflict_skel,
enum svn_wc_merge_outcome_t *merge_outcome,
svn_wc__db_t *db,
const char *left_abspath,
- const svn_wc_conflict_version_t *left_version,
const char *right_abspath,
- const svn_wc_conflict_version_t *right_version,
const char *target_abspath,
const char *wri_abspath,
const char *left_label,
const char *right_label,
const char *target_label,
- apr_hash_t *actual_props,
+ apr_hash_t *old_actual_props,
svn_boolean_t dry_run,
const char *diff3_cmd,
const apr_array_header_t *merge_options,
const apr_array_header_t *prop_diff,
- svn_wc_conflict_resolver_func2_t conflict_func,
- void *conflict_baton,
svn_cancel_func_t cancel_func,
void *cancel_baton,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- apr_pool_t *pool = scratch_pool; /* ### temporary rename */
const char *detranslated_target_abspath;
svn_boolean_t is_binary = FALSE;
const svn_prop_t *mimeprop;
@@ -1433,18 +1108,18 @@ svn_wc__internal_merge(svn_skel_t **work_items,
mt.db = db;
mt.local_abspath = target_abspath;
mt.wri_abspath = wri_abspath;
- mt.actual_props = actual_props;
+ mt.old_actual_props = old_actual_props;
mt.prop_diff = prop_diff;
mt.diff3_cmd = diff3_cmd;
mt.merge_options = merge_options;
/* Decide if the merge target is a text or binary file. */
- if ((mimeprop = get_prop(&mt, SVN_PROP_MIME_TYPE))
+ if ((mimeprop = get_prop(prop_diff, SVN_PROP_MIME_TYPE))
&& mimeprop->value)
is_binary = svn_mime_type_is_binary(mimeprop->value->data);
else
{
- const char *value = svn_prop_get_value(mt.actual_props,
+ const char *value = svn_prop_get_value(mt.old_actual_props,
SVN_PROP_MIME_TYPE);
is_binary = value && svn_mime_type_is_binary(value);
@@ -1453,24 +1128,31 @@ svn_wc__internal_merge(svn_skel_t **work_items,
SVN_ERR(detranslate_wc_file(&detranslated_target_abspath, &mt,
(! is_binary) && diff3_cmd != NULL,
target_abspath,
- cancel_func, cancel_baton, pool, pool));
+ cancel_func, cancel_baton,
+ scratch_pool, scratch_pool));
/* We cannot depend on the left file to contain the same eols as the
right file. If the merge target has mods, this will mark the entire
file as conflicted, so we need to compensate. */
- SVN_ERR(maybe_update_target_eols(&left_abspath, &mt, left_abspath,
- cancel_func, cancel_baton, pool, pool));
+ SVN_ERR(maybe_update_target_eols(&left_abspath, prop_diff, left_abspath,
+ cancel_func, cancel_baton,
+ scratch_pool, scratch_pool));
SVN_ERR(merge_file_trivial(work_items, merge_outcome,
left_abspath, right_abspath,
- target_abspath, dry_run, db,
- cancel_func, cancel_baton,
+ target_abspath, detranslated_target_abspath,
+ dry_run, db, cancel_func, cancel_baton,
result_pool, scratch_pool));
if (*merge_outcome == svn_wc_merge_no_merge)
{
+ /* We have a non-trivial merge. If we classify it as a merge of
+ * 'binary' files we'll just raise a conflict, otherwise we'll do
+ * the actual merge of 'text' file contents. */
if (is_binary)
{
+ /* Raise a text conflict */
SVN_ERR(merge_binary_file(work_items,
+ conflict_skel,
merge_outcome,
&mt,
left_abspath,
@@ -1479,16 +1161,13 @@ svn_wc__internal_merge(svn_skel_t **work_items,
right_label,
target_label,
dry_run,
- left_version,
- right_version,
detranslated_target_abspath,
- conflict_func,
- conflict_baton,
result_pool, scratch_pool));
}
else
{
SVN_ERR(merge_text_file(work_items,
+ conflict_skel,
merge_outcome,
&mt,
left_abspath,
@@ -1497,10 +1176,7 @@ svn_wc__internal_merge(svn_skel_t **work_items,
right_label,
target_label,
dry_run,
- left_version,
- right_version,
detranslated_target_abspath,
- conflict_func, conflict_baton,
cancel_func, cancel_baton,
result_pool, scratch_pool));
}
@@ -1522,7 +1198,8 @@ svn_wc__internal_merge(svn_skel_t **work_items,
svn_error_t *
-svn_wc_merge4(enum svn_wc_merge_outcome_t *merge_outcome,
+svn_wc_merge5(enum svn_wc_merge_outcome_t *merge_content_outcome,
+ enum svn_wc_notify_state_t *merge_props_outcome,
svn_wc_context_t *wc_ctx,
const char *left_abspath,
const char *right_abspath,
@@ -1535,6 +1212,7 @@ svn_wc_merge4(enum svn_wc_merge_outcome_t *merge_outcome,
svn_boolean_t dry_run,
const char *diff3_cmd,
const apr_array_header_t *merge_options,
+ apr_hash_t *original_props,
const apr_array_header_t *prop_diff,
svn_wc_conflict_resolver_func2_t conflict_func,
void *conflict_baton,
@@ -1544,7 +1222,10 @@ svn_wc_merge4(enum svn_wc_merge_outcome_t *merge_outcome,
{
const char *dir_abspath = svn_dirent_dirname(target_abspath, scratch_pool);
svn_skel_t *work_items;
- apr_hash_t *actual_props;
+ svn_skel_t *conflict_skel = NULL;
+ apr_hash_t *pristine_props = NULL;
+ apr_hash_t *old_actual_props;
+ apr_hash_t *new_actual_props = NULL;
SVN_ERR_ASSERT(svn_dirent_is_absolute(left_abspath));
SVN_ERR_ASSERT(svn_dirent_is_absolute(right_abspath));
@@ -1554,78 +1235,190 @@ svn_wc_merge4(enum svn_wc_merge_outcome_t *merge_outcome,
if (!dry_run)
SVN_ERR(svn_wc__write_check(wc_ctx->db, dir_abspath, scratch_pool));
- /* Sanity check: the merge target must be under revision control,
- * unless the merge target is a copyfrom text, which lives in a
- * temporary file and does not exist in ACTUAL yet. */
+ /* Sanity check: the merge target must be a file under revision control */
{
- svn_wc__db_kind_t kind;
- svn_boolean_t hidden;
- SVN_ERR(svn_wc__db_read_kind(&kind, wc_ctx->db, target_abspath, TRUE,
- scratch_pool));
+ svn_wc__db_status_t status;
+ svn_node_kind_t kind;
+ svn_boolean_t had_props;
+ svn_boolean_t props_mod;
+ svn_boolean_t conflicted;
+
+ SVN_ERR(svn_wc__db_read_info(&status, &kind, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ &conflicted, NULL, &had_props, &props_mod,
+ NULL, NULL, NULL,
+ wc_ctx->db, target_abspath,
+ scratch_pool, scratch_pool));
- if (kind == svn_wc__db_kind_unknown)
+ if (kind != svn_node_file || (status != svn_wc__db_status_normal
+ && status != svn_wc__db_status_added))
{
- *merge_outcome = svn_wc_merge_no_merge;
+ *merge_content_outcome = svn_wc_merge_no_merge;
+ if (merge_props_outcome)
+ *merge_props_outcome = svn_wc_notify_state_unchanged;
return SVN_NO_ERROR;
}
- SVN_ERR(svn_wc__db_node_hidden(&hidden, wc_ctx->db, target_abspath,
- scratch_pool));
+ if (conflicted)
+ {
+ svn_boolean_t text_conflicted;
+ svn_boolean_t prop_conflicted;
+ svn_boolean_t tree_conflicted;
+
+ SVN_ERR(svn_wc__internal_conflicted_p(&text_conflicted,
+ &prop_conflicted,
+ &tree_conflicted,
+ wc_ctx->db, target_abspath,
+ scratch_pool));
- if (hidden)
+ /* We can't install two prop conflicts on a single node, so
+ avoid even checking that we have to merge it */
+ if (text_conflicted || prop_conflicted || tree_conflicted)
+ {
+ return svn_error_createf(
+ SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
+ _("Can't merge into conflicted node '%s'"),
+ svn_dirent_local_style(target_abspath,
+ scratch_pool));
+ }
+ /* else: Conflict was resolved by removing markers */
+ }
+
+ if (merge_props_outcome && had_props)
{
- *merge_outcome = svn_wc_merge_no_merge;
- return SVN_NO_ERROR;
+ SVN_ERR(svn_wc__db_read_pristine_props(&pristine_props,
+ wc_ctx->db, target_abspath,
+ scratch_pool, scratch_pool));
}
+ else if (merge_props_outcome)
+ pristine_props = apr_hash_make(scratch_pool);
+
+ if (props_mod)
+ {
+ SVN_ERR(svn_wc__db_read_props(&old_actual_props,
+ wc_ctx->db, target_abspath,
+ scratch_pool, scratch_pool));
+ }
+ else if (pristine_props)
+ old_actual_props = pristine_props;
+ else
+ old_actual_props = apr_hash_make(scratch_pool);
}
- SVN_ERR(svn_wc__db_read_props(&actual_props, wc_ctx->db, target_abspath,
- scratch_pool, scratch_pool));
+ /* Merge the properties, if requested. We merge the properties first
+ * because the properties can affect the text (EOL style, keywords). */
+ if (merge_props_outcome)
+ {
+ int i;
+
+ /* The PROPCHANGES may not have non-"normal" properties in it. If entry
+ or wc props were allowed, then the following code would install them
+ into the BASE and/or WORKING properties(!). */
+ for (i = prop_diff->nelts; i--; )
+ {
+ const svn_prop_t *change = &APR_ARRAY_IDX(prop_diff, i, svn_prop_t);
+
+ if (!svn_wc_is_normal_prop(change->name))
+ return svn_error_createf(SVN_ERR_BAD_PROP_KIND, NULL,
+ _("The property '%s' may not be merged "
+ "into '%s'."),
+ change->name,
+ svn_dirent_local_style(target_abspath,
+ scratch_pool));
+ }
+
+ SVN_ERR(svn_wc__merge_props(&conflict_skel,
+ merge_props_outcome,
+ &new_actual_props,
+ wc_ctx->db, target_abspath,
+ original_props, pristine_props, old_actual_props,
+ prop_diff,
+ scratch_pool, scratch_pool));
+ }
- /* Queue all the work. */
+ /* Merge the text. */
SVN_ERR(svn_wc__internal_merge(&work_items,
- merge_outcome,
+ &conflict_skel,
+ merge_content_outcome,
wc_ctx->db,
- left_abspath, left_version,
- right_abspath, right_version,
+ left_abspath,
+ right_abspath,
target_abspath,
target_abspath,
left_label, right_label, target_label,
- actual_props,
+ old_actual_props,
dry_run,
diff3_cmd,
merge_options,
prop_diff,
- conflict_func, conflict_baton,
cancel_func, cancel_baton,
scratch_pool, scratch_pool));
- /* If this isn't a dry run, then run the work! */
+ /* If this isn't a dry run, then update the DB, run the work, and
+ * call the conflict resolver callback. */
if (!dry_run)
{
- SVN_ERR(svn_wc__db_wq_add(wc_ctx->db, target_abspath, work_items,
- scratch_pool));
- SVN_ERR(svn_wc__wq_run(wc_ctx->db, target_abspath,
- cancel_func, cancel_baton,
- scratch_pool));
- }
+ if (conflict_skel)
+ {
+ svn_skel_t *work_item;
- return SVN_NO_ERROR;
-}
+ SVN_ERR(svn_wc__conflict_skel_set_op_merge(conflict_skel,
+ left_version,
+ right_version,
+ scratch_pool,
+ scratch_pool));
+ SVN_ERR(svn_wc__conflict_create_markers(&work_item,
+ wc_ctx->db, target_abspath,
+ conflict_skel,
+ scratch_pool, scratch_pool));
-/* Constructor for the result-structure returned by conflict callbacks. */
-svn_wc_conflict_result_t *
-svn_wc_create_conflict_result(svn_wc_conflict_choice_t choice,
- const char *merged_file,
- apr_pool_t *pool)
-{
- svn_wc_conflict_result_t *result = apr_pcalloc(pool, sizeof(*result));
- result->choice = choice;
- result->merged_file = merged_file;
- result->save_merged = FALSE;
+ work_items = svn_wc__wq_merge(work_items, work_item, scratch_pool);
+ }
+
+ if (new_actual_props)
+ SVN_ERR(svn_wc__db_op_set_props(wc_ctx->db, target_abspath,
+ new_actual_props,
+ svn_wc__has_magic_property(prop_diff),
+ conflict_skel, work_items,
+ scratch_pool));
+ else if (conflict_skel)
+ SVN_ERR(svn_wc__db_op_mark_conflict(wc_ctx->db, target_abspath,
+ conflict_skel, work_items,
+ scratch_pool));
+ else if (work_items)
+ SVN_ERR(svn_wc__db_wq_add(wc_ctx->db, target_abspath, work_items,
+ scratch_pool));
- /* If we add more fields to svn_wc_conflict_result_t, add them here. */
+ if (work_items)
+ SVN_ERR(svn_wc__wq_run(wc_ctx->db, target_abspath,
+ cancel_func, cancel_baton,
+ scratch_pool));
- return result;
+ if (conflict_skel && conflict_func)
+ {
+ svn_boolean_t text_conflicted, prop_conflicted;
+
+ SVN_ERR(svn_wc__conflict_invoke_resolver(
+ wc_ctx->db, target_abspath,
+ conflict_skel, merge_options,
+ conflict_func, conflict_baton,
+ cancel_func, cancel_baton,
+ scratch_pool));
+
+ /* Reset *MERGE_CONTENT_OUTCOME etc. if a conflict was resolved. */
+ SVN_ERR(svn_wc__internal_conflicted_p(
+ &text_conflicted, &prop_conflicted, NULL,
+ wc_ctx->db, target_abspath, scratch_pool));
+ if (*merge_props_outcome == svn_wc_notify_state_conflicted
+ && ! prop_conflicted)
+ *merge_props_outcome = svn_wc_notify_state_merged;
+ if (*merge_content_outcome == svn_wc_merge_conflict
+ && ! text_conflicted)
+ *merge_content_outcome = svn_wc_merge_merged;
+ }
+ }
+
+ return SVN_NO_ERROR;
}
diff --git a/subversion/libsvn_wc/node.c b/subversion/libsvn_wc/node.c
index 0bd322f..a1d6b02 100644
--- a/subversion/libsvn_wc/node.c
+++ b/subversion/libsvn_wc/node.c
@@ -139,129 +139,145 @@ svn_wc__node_get_children(const apr_array_header_t **children,
svn_error_t *
-svn_wc__internal_get_repos_info(const char **repos_root_url,
+svn_wc__internal_get_repos_info(svn_revnum_t *revision,
+ const char **repos_relpath,
+ const char **repos_root_url,
const char **repos_uuid,
svn_wc__db_t *db,
const char *local_abspath,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- svn_error_t *err;
svn_wc__db_status_t status;
+ svn_boolean_t have_work;
- err = svn_wc__db_read_info(&status, NULL, NULL, NULL,
- repos_root_url, repos_uuid,
- NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL,
- db, local_abspath,
- result_pool, scratch_pool);
- if (err)
- {
- if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND
- && err->apr_err != SVN_ERR_WC_NOT_WORKING_COPY)
- return svn_error_trace(err);
+ SVN_ERR(svn_wc__db_read_info(&status, NULL, revision, repos_relpath,
+ repos_root_url, repos_uuid,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, &have_work,
+ db, local_abspath,
+ result_pool, scratch_pool));
- /* This node is not versioned. Return NULL repos info. */
- svn_error_clear(err);
+ if ((repos_relpath ? *repos_relpath != NULL : TRUE)
+ && (repos_root_url ? *repos_root_url != NULL: TRUE)
+ && (repos_uuid ? *repos_uuid != NULL : TRUE))
+ return SVN_NO_ERROR; /* We got the requested information */
- if (repos_root_url)
- *repos_root_url = NULL;
- if (repos_uuid)
- *repos_uuid = NULL;
- return SVN_NO_ERROR;
+ if (!have_work) /* not-present, (server-)excluded? */
+ {
+ return SVN_NO_ERROR; /* Can't fetch more */
}
- if (((repos_root_url && *repos_root_url) || !repos_root_url)
- && ((repos_uuid && *repos_uuid) || !repos_uuid))
- return SVN_NO_ERROR;
-
if (status == svn_wc__db_status_deleted)
{
const char *base_del_abspath, *wrk_del_abspath;
SVN_ERR(svn_wc__db_scan_deletion(&base_del_abspath, NULL,
- &wrk_del_abspath,
+ &wrk_del_abspath, NULL,
db, local_abspath,
scratch_pool, scratch_pool));
if (base_del_abspath)
- SVN_ERR(svn_wc__db_scan_base_repos(NULL,repos_root_url,
- repos_uuid, db, base_del_abspath,
+ {
+ SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, NULL, repos_relpath,
+ repos_root_url, repos_uuid, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL,
+ db, base_del_abspath,
result_pool, scratch_pool));
+
+ /* If we have a repos_relpath, it is of the op-root */
+ if (repos_relpath)
+ *repos_relpath = svn_relpath_join(*repos_relpath,
+ svn_dirent_skip_ancestor(base_del_abspath,
+ local_abspath),
+ result_pool);
+ /* We keep revision as SVN_INVALID_REVNUM */
+ }
else if (wrk_del_abspath)
- SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, NULL,
- repos_root_url, repos_uuid,
- NULL, NULL, NULL, NULL,
- db, svn_dirent_dirname(
+ {
+ const char *op_root_abspath = NULL;
+
+ SVN_ERR(svn_wc__db_scan_addition(NULL, repos_relpath
+ ? &op_root_abspath : NULL,
+ repos_relpath, repos_root_url,
+ repos_uuid, NULL, NULL, NULL, NULL,
+ db, svn_dirent_dirname(
wrk_del_abspath,
scratch_pool),
- result_pool, scratch_pool));
+ result_pool, scratch_pool));
+
+ /* If we have a repos_relpath, it is of the op-root */
+ if (repos_relpath)
+ *repos_relpath = svn_relpath_join(
+ *repos_relpath,
+ svn_dirent_skip_ancestor(op_root_abspath,
+ local_abspath),
+ result_pool);
+ }
}
- else if (status == svn_wc__db_status_added)
+ else /* added, or WORKING incomplete */
{
+ const char *op_root_abspath = NULL;
+
/* We have an addition. scan_addition() will find the intended
repository location by scanning up the tree. */
- SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, NULL,
- repos_root_url, repos_uuid,
- NULL, NULL, NULL, NULL,
+ SVN_ERR(svn_wc__db_scan_addition(NULL, repos_relpath
+ ? &op_root_abspath : NULL,
+ repos_relpath, repos_root_url,
+ repos_uuid, NULL, NULL, NULL, NULL,
db, local_abspath,
result_pool, scratch_pool));
}
- else
- SVN_ERR(svn_wc__db_scan_base_repos(NULL, repos_root_url, repos_uuid,
- db, local_abspath,
- result_pool, scratch_pool));
+ SVN_ERR_ASSERT(repos_root_url == NULL || *repos_root_url != NULL);
+ SVN_ERR_ASSERT(repos_uuid == NULL || *repos_uuid != NULL);
return SVN_NO_ERROR;
}
svn_error_t *
-svn_wc__node_get_repos_info(const char **repos_root_url,
+svn_wc__node_get_repos_info(svn_revnum_t *revision,
+ const char **repos_relpath,
+ const char **repos_root_url,
const char **repos_uuid,
svn_wc_context_t *wc_ctx,
const char *local_abspath,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- return svn_error_trace(svn_wc__internal_get_repos_info(
- repos_root_url, repos_uuid, wc_ctx->db, local_abspath,
- result_pool, scratch_pool));
+ return svn_error_trace(
+ svn_wc__internal_get_repos_info(revision,
+ repos_relpath,
+ repos_root_url,
+ repos_uuid,
+ wc_ctx->db, local_abspath,
+ result_pool, scratch_pool));
}
/* Convert DB_KIND into the appropriate NODE_KIND value.
* If SHOW_HIDDEN is TRUE, report the node kind as found in the DB
* even if DB_STATUS indicates that the node is hidden.
- * Else, return svn_kind_none for such nodes.
+ * Else, return svn_node_none for such nodes.
*
- * ### This is a bit ugly. We should consider promoting svn_wc__db_kind_t
+ * ### This is a bit ugly. We should consider promoting svn_kind_t
* ### to the de-facto node kind type instead of converting between them
* ### in non-backwards compat code.
- * ### See also comments at the definition of svn_wc__db_kind_t. */
+ * ### See also comments at the definition of svn_kind_t.
+ *
+ * ### In reality, the previous comment is out of date, as there is
+ * ### now only one enumeration for node kinds, and that is
+ * ### svn_node_kind_t (svn_kind_t was merged with that). But it's
+ * ### still ugly.
+ */
static svn_error_t *
convert_db_kind_to_node_kind(svn_node_kind_t *node_kind,
- svn_wc__db_kind_t db_kind,
+ svn_node_kind_t db_kind,
svn_wc__db_status_t db_status,
svn_boolean_t show_hidden)
{
- switch (db_kind)
- {
- case svn_wc__db_kind_file:
- *node_kind = svn_node_file;
- break;
- case svn_wc__db_kind_dir:
- *node_kind = svn_node_dir;
- break;
- case svn_wc__db_kind_symlink:
- *node_kind = svn_node_file;
- break;
- case svn_wc__db_kind_unknown:
- *node_kind = svn_node_unknown;
- break;
- default:
- SVN_ERR_MALFUNCTION();
- }
+ *node_kind = db_kind;
/* Make sure hidden nodes return svn_node_none. */
if (! show_hidden)
@@ -280,33 +296,28 @@ convert_db_kind_to_node_kind(svn_node_kind_t *node_kind,
}
svn_error_t *
-svn_wc_read_kind(svn_node_kind_t *kind,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- svn_boolean_t show_hidden,
- apr_pool_t *scratch_pool)
+svn_wc_read_kind2(svn_node_kind_t *kind,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ svn_boolean_t show_deleted,
+ svn_boolean_t show_hidden,
+ apr_pool_t *scratch_pool)
{
- svn_wc__db_status_t db_status;
- svn_wc__db_kind_t db_kind;
- svn_error_t *err;
-
- err = svn_wc__db_read_info(&db_status, &db_kind, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- wc_ctx->db, local_abspath,
- scratch_pool, scratch_pool);
+ svn_node_kind_t db_kind;
- if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
- {
- svn_error_clear(err);
- *kind = svn_node_none;
- return SVN_NO_ERROR;
- }
+ SVN_ERR(svn_wc__db_read_kind(&db_kind,
+ wc_ctx->db, local_abspath,
+ TRUE,
+ show_deleted,
+ show_hidden,
+ scratch_pool));
+
+ if (db_kind == svn_node_dir)
+ *kind = svn_node_dir;
+ else if (db_kind == svn_node_file || db_kind == svn_node_symlink)
+ *kind = svn_node_file;
else
- SVN_ERR(err);
-
- SVN_ERR(convert_db_kind_to_node_kind(kind, db_kind, db_status, show_hidden));
+ *kind = svn_node_none;
return SVN_NO_ERROR;
}
@@ -355,213 +366,6 @@ svn_wc__node_get_url(const char **url,
result_pool, scratch_pool));
}
-/* ### This is essentially a copy-paste of svn_wc__internal_get_url().
- * ### If we decide to keep this one, then it should be rewritten to avoid
- * ### code duplication.*/
-svn_error_t *
-svn_wc__node_get_repos_relpath(const char **repos_relpath,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- svn_wc__db_status_t status;
- svn_boolean_t have_base;
-
- SVN_ERR(svn_wc__db_read_info(&status, NULL, NULL, repos_relpath,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- &have_base, NULL, NULL,
- wc_ctx->db, local_abspath,
- result_pool, scratch_pool));
- if (*repos_relpath == NULL)
- {
- if (status == svn_wc__db_status_added)
- {
- SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, repos_relpath,
- NULL, NULL, NULL, NULL,
- NULL, NULL,
- wc_ctx->db, local_abspath,
- result_pool, scratch_pool));
- }
- else if (have_base)
- {
- SVN_ERR(svn_wc__db_scan_base_repos(repos_relpath, NULL,
- NULL,
- wc_ctx->db, local_abspath,
- result_pool, scratch_pool));
- }
- else if (status == svn_wc__db_status_excluded
- || (!have_base && (status == svn_wc__db_status_deleted)))
- {
- const char *parent_abspath, *name, *parent_relpath;
-
- svn_dirent_split(&parent_abspath, &name, local_abspath,
- scratch_pool);
- SVN_ERR(svn_wc__node_get_repos_relpath(&parent_relpath, wc_ctx,
- parent_abspath,
- scratch_pool,
- scratch_pool));
-
- if (parent_relpath)
- *repos_relpath = svn_relpath_join(parent_relpath, name,
- result_pool);
- }
- else
- {
- /* Status: obstructed, obstructed_add */
- *repos_relpath = NULL;
- return SVN_NO_ERROR;
- }
- }
-
- return SVN_NO_ERROR;
-}
-
-svn_error_t *
-svn_wc__internal_get_copyfrom_info(const char **copyfrom_root_url,
- const char **copyfrom_repos_relpath,
- const char **copyfrom_url,
- svn_revnum_t *copyfrom_rev,
- svn_boolean_t *is_copy_target,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- const char *original_root_url;
- const char *original_repos_relpath;
- svn_revnum_t original_revision;
- svn_wc__db_status_t status;
-
- if (copyfrom_root_url)
- *copyfrom_root_url = NULL;
- if (copyfrom_repos_relpath)
- *copyfrom_repos_relpath = NULL;
- if (copyfrom_url)
- *copyfrom_url = NULL;
- if (copyfrom_rev)
- *copyfrom_rev = SVN_INVALID_REVNUM;
- if (is_copy_target)
- *is_copy_target = FALSE;
-
- SVN_ERR(svn_wc__db_read_info(&status, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL,
- &original_repos_relpath,
- &original_root_url, NULL,
- &original_revision,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL,
- db, local_abspath, result_pool, scratch_pool));
- if (original_root_url && original_repos_relpath)
- {
- /* If this was the root of the copy then the URL is immediately
- available... */
- const char *my_copyfrom_url;
-
- if (copyfrom_url || is_copy_target)
- my_copyfrom_url = svn_path_url_add_component2(original_root_url,
- original_repos_relpath,
- result_pool);
-
- if (copyfrom_root_url)
- *copyfrom_root_url = original_root_url;
- if (copyfrom_repos_relpath)
- *copyfrom_repos_relpath = original_repos_relpath;
- if (copyfrom_url)
- *copyfrom_url = my_copyfrom_url;
-
- if (copyfrom_rev)
- *copyfrom_rev = original_revision;
-
- if (is_copy_target)
- {
- /* ### At this point we'd just set is_copy_target to TRUE, *but* we
- * currently want to model wc-1 behaviour. Particularly, this
- * affects mixed-revision copies (e.g. wc-wc copy):
- * - Wc-1 saw only the root of a mixed-revision copy as the copy's
- * root.
- * - Wc-ng returns an explicit original_root_url,
- * original_repos_relpath pair for each subtree with mismatching
- * revision.
- * We need to compensate for that: Find out if the parent of
- * this node is also copied and has a matching copy_from URL. If so,
- * nevermind the revision, just like wc-1 did, and say this was not
- * a separate copy target. */
- const char *parent_abspath;
- const char *base_name;
- const char *parent_copyfrom_url;
-
- svn_dirent_split(&parent_abspath, &base_name, local_abspath,
- scratch_pool);
-
- /* This is a copied node, so we should never fall off the top of a
- * working copy here. */
- SVN_ERR(svn_wc__internal_get_copyfrom_info(NULL, NULL,
- &parent_copyfrom_url,
- NULL, NULL,
- db, parent_abspath,
- scratch_pool,
- scratch_pool));
-
- /* So, count this as a separate copy target only if the URLs
- * don't match up, or if the parent isn't copied at all. */
- if (parent_copyfrom_url == NULL
- || strcmp(my_copyfrom_url,
- svn_path_url_add_component2(parent_copyfrom_url,
- base_name,
- scratch_pool)) != 0)
- *is_copy_target = TRUE;
- }
- }
- else if ((status == svn_wc__db_status_added)
- && (copyfrom_rev || copyfrom_url || copyfrom_root_url
- || copyfrom_repos_relpath))
- {
- /* ...But if this is merely the descendant of an explicitly
- copied/moved directory, we need to do a bit more work to
- determine copyfrom_url and copyfrom_rev. */
- const char *op_root_abspath;
-
- SVN_ERR(svn_wc__db_scan_addition(&status, &op_root_abspath, NULL, NULL,
- NULL, &original_repos_relpath,
- &original_root_url, NULL,
- &original_revision, db, local_abspath,
- result_pool, scratch_pool));
- if (status == svn_wc__db_status_copied ||
- status == svn_wc__db_status_moved_here)
- {
- const char *src_parent_url;
- const char *src_relpath;
-
- src_parent_url = svn_path_url_add_component2(original_root_url,
- original_repos_relpath,
- scratch_pool);
- src_relpath = svn_dirent_is_child(op_root_abspath, local_abspath,
- scratch_pool);
- if (src_relpath)
- {
- if (copyfrom_root_url)
- *copyfrom_root_url = original_root_url;
- if (copyfrom_repos_relpath)
- *copyfrom_repos_relpath = svn_relpath_join(
- original_repos_relpath,
- src_relpath, result_pool);
- if (copyfrom_url)
- *copyfrom_url = svn_path_url_add_component2(src_parent_url,
- src_relpath,
- result_pool);
- if (copyfrom_rev)
- *copyfrom_rev = original_revision;
- }
- }
- }
-
- return SVN_NO_ERROR;
-}
-
-
/* A recursive node-walker, helper for svn_wc__internal_walk_children().
*
* Call WALK_CALLBACK with WALK_BATON on all children (recursively) of
@@ -603,7 +407,7 @@ walker_helper(svn_wc__db_t *db,
{
const char *child_name = svn__apr_hash_index_key(hi);
struct svn_wc__db_walker_info_t *wi = svn__apr_hash_index_val(hi);
- svn_wc__db_kind_t child_kind = wi->kind;
+ svn_node_kind_t child_kind = wi->kind;
svn_wc__db_status_t child_status = wi->status;
const char *child_abspath;
@@ -627,7 +431,7 @@ walker_helper(svn_wc__db_t *db,
}
/* Return the child, if appropriate. */
- if ( (child_kind == svn_wc__db_kind_file
+ if ( (child_kind == svn_node_file
|| depth >= svn_depth_immediates)
&& svn_wc__internal_changelist_match(db, child_abspath,
changelist_filter,
@@ -646,7 +450,7 @@ walker_helper(svn_wc__db_t *db,
}
/* Recurse into this directory, if appropriate. */
- if (child_kind == svn_wc__db_kind_dir
+ if (child_kind == svn_node_dir
&& depth >= svn_depth_immediates)
{
svn_depth_t depth_below_here = depth;
@@ -681,7 +485,7 @@ svn_wc__internal_walk_children(svn_wc__db_t *db,
void *cancel_baton,
apr_pool_t *scratch_pool)
{
- svn_wc__db_kind_t db_kind;
+ svn_node_kind_t db_kind;
svn_node_kind_t kind;
svn_wc__db_status_t status;
apr_hash_t *changelist_hash = NULL;
@@ -706,13 +510,13 @@ svn_wc__internal_walk_children(svn_wc__db_t *db,
changelist_hash, scratch_pool))
SVN_ERR(walk_callback(local_abspath, kind, walk_baton, scratch_pool));
- if (db_kind == svn_wc__db_kind_file
+ if (db_kind == svn_node_file
|| status == svn_wc__db_status_not_present
|| status == svn_wc__db_status_excluded
|| status == svn_wc__db_status_server_excluded)
return SVN_NO_ERROR;
- if (db_kind == svn_wc__db_kind_dir)
+ if (db_kind == svn_node_dir)
{
return svn_error_trace(
walker_helper(db, local_abspath, show_hidden, changelist_hash,
@@ -748,13 +552,16 @@ svn_wc__node_is_status_deleted(svn_boolean_t *is_deleted,
}
svn_error_t *
-svn_wc__node_is_status_server_excluded(svn_boolean_t *is_server_excluded,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *scratch_pool)
+svn_wc__node_get_deleted_ancestor(const char **deleted_ancestor_abspath,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
svn_wc__db_status_t status;
+ *deleted_ancestor_abspath = NULL;
+
SVN_ERR(svn_wc__db_read_info(&status,
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
@@ -762,47 +569,54 @@ svn_wc__node_is_status_server_excluded(svn_boolean_t *is_server_excluded,
NULL, NULL, NULL, NULL, NULL,
wc_ctx->db, local_abspath,
scratch_pool, scratch_pool));
- *is_server_excluded = (status == svn_wc__db_status_server_excluded);
+
+ if (status == svn_wc__db_status_deleted)
+ SVN_ERR(svn_wc__db_scan_deletion(deleted_ancestor_abspath, NULL, NULL,
+ NULL, wc_ctx->db, local_abspath,
+ result_pool, scratch_pool));
return SVN_NO_ERROR;
}
svn_error_t *
-svn_wc__node_is_status_not_present(svn_boolean_t *is_not_present,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *scratch_pool)
+svn_wc__node_is_not_present(svn_boolean_t *is_not_present,
+ svn_boolean_t *is_excluded,
+ svn_boolean_t *is_server_excluded,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ svn_boolean_t base_only,
+ apr_pool_t *scratch_pool)
{
svn_wc__db_status_t status;
- SVN_ERR(svn_wc__db_read_info(&status,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL,
- wc_ctx->db, local_abspath,
- scratch_pool, scratch_pool));
- *is_not_present = (status == svn_wc__db_status_not_present);
+ if (base_only)
+ {
+ SVN_ERR(svn_wc__db_base_get_info(&status,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL,
+ wc_ctx->db, local_abspath,
+ scratch_pool, scratch_pool));
+ }
+ else
+ {
+ SVN_ERR(svn_wc__db_read_info(&status,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ wc_ctx->db, local_abspath,
+ scratch_pool, scratch_pool));
+ }
- return SVN_NO_ERROR;
-}
+ if (is_not_present)
+ *is_not_present = (status == svn_wc__db_status_not_present);
-svn_error_t *
-svn_wc__node_is_status_excluded(svn_boolean_t *is_excluded,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *scratch_pool)
-{
- svn_wc__db_status_t status;
+ if (is_excluded)
+ *is_excluded = (status == svn_wc__db_status_excluded);
- SVN_ERR(svn_wc__db_read_info(&status,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL,
- wc_ctx->db, local_abspath,
- scratch_pool, scratch_pool));
- *is_excluded = (status == svn_wc__db_status_excluded);
+ if (is_server_excluded)
+ *is_server_excluded = (status == svn_wc__db_status_server_excluded);
return SVN_NO_ERROR;
}
@@ -847,48 +661,80 @@ svn_wc__node_has_working(svn_boolean_t *has_working,
}
-static svn_error_t *
-get_base_rev(svn_revnum_t *base_revision,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *scratch_pool)
+svn_error_t *
+svn_wc__node_get_base(svn_node_kind_t *kind,
+ svn_revnum_t *revision,
+ const char **repos_relpath,
+ const char **repos_root_url,
+ const char **repos_uuid,
+ const char **lock_token,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ svn_boolean_t ignore_enoent,
+ svn_boolean_t show_hidden,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- svn_boolean_t have_base;
svn_error_t *err;
+ svn_wc__db_status_t status;
+ svn_wc__db_lock_t *lock;
+ svn_node_kind_t db_kind;
- err = svn_wc__db_base_get_info(NULL, NULL, base_revision, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- db, local_abspath,
- scratch_pool, scratch_pool);
+ err = svn_wc__db_base_get_info(&status, &db_kind, revision, repos_relpath,
+ repos_root_url, repos_uuid, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ lock_token ? &lock : NULL,
+ NULL, NULL, NULL,
+ wc_ctx->db, local_abspath,
+ result_pool, scratch_pool);
- if (!err || err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND)
+ if (err && err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND)
return svn_error_trace(err);
+ else if (err
+ || (!err && !show_hidden
+ && (status != svn_wc__db_status_normal
+ && status != svn_wc__db_status_incomplete)))
+ {
+ if (!ignore_enoent)
+ {
+ if (err)
+ return svn_error_trace(err);
+ else
+ return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
+ _("The node '%s' was not found."),
+ svn_dirent_local_style(local_abspath,
+ scratch_pool));
+ }
+ svn_error_clear(err);
- svn_error_clear(err);
+ if (kind)
+ *kind = svn_node_unknown;
+ if (revision)
+ *revision = SVN_INVALID_REVNUM;
+ if (repos_relpath)
+ *repos_relpath = NULL;
+ if (repos_root_url)
+ *repos_root_url = NULL;
+ if (repos_uuid)
+ *repos_uuid = NULL;
+ if (lock_token)
+ *lock_token = NULL;
+ return SVN_NO_ERROR;
+ }
- SVN_ERR(svn_wc__db_read_info(NULL, NULL, base_revision,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, &have_base, NULL,
- NULL, NULL, NULL, NULL, NULL,
- db, local_abspath,
- scratch_pool, scratch_pool));
+ if (kind)
+ *kind = db_kind;
+ if (lock_token)
+ *lock_token = lock ? lock->token : NULL;
+ SVN_ERR_ASSERT(!revision || SVN_IS_VALID_REVNUM(*revision));
+ SVN_ERR_ASSERT(!repos_relpath || *repos_relpath);
+ SVN_ERR_ASSERT(!repos_root_url || *repos_root_url);
+ SVN_ERR_ASSERT(!repos_uuid || *repos_uuid);
return SVN_NO_ERROR;
}
svn_error_t *
-svn_wc__node_get_base_rev(svn_revnum_t *base_revision,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *scratch_pool)
-{
- return svn_error_trace(get_base_rev(base_revision, wc_ctx->db,
- local_abspath, scratch_pool));
-}
-
-svn_error_t *
svn_wc__node_get_pre_ng_status_data(svn_revnum_t *revision,
svn_revnum_t *changed_rev,
apr_time_t *changed_date,
@@ -922,158 +768,16 @@ svn_wc__node_get_pre_ng_status_data(svn_revnum_t *revision,
SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, revision, NULL, NULL, NULL,
changed_rev, changed_date, changed_author,
NULL, NULL, NULL,
- NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
wc_ctx->db, local_abspath,
result_pool, scratch_pool));
- else
- {
- /* Sorry, we need a function to peek below the current working and
- the BASE layer. And we don't have one yet.
-
- ### Better to report nothing, than the wrong information */
- }
-
- return SVN_NO_ERROR;
-}
-
-
-svn_error_t *
-svn_wc__internal_get_commit_base_rev(svn_revnum_t *commit_base_revision,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *scratch_pool)
-{
- svn_wc__db_status_t status;
- svn_boolean_t have_base;
- svn_boolean_t have_more_work;
- svn_revnum_t revision;
- svn_revnum_t original_revision;
-
- *commit_base_revision = SVN_INVALID_REVNUM;
-
- SVN_ERR(svn_wc__db_read_info(&status, NULL, &revision, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, &original_revision, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL,
- &have_base, &have_more_work, NULL,
- db, local_abspath, scratch_pool, scratch_pool));
-
- if (SVN_IS_VALID_REVNUM(revision))
- {
- /* We are looking directly at BASE */
- *commit_base_revision = revision;
- return SVN_NO_ERROR;
- }
- else if (SVN_IS_VALID_REVNUM(original_revision))
- {
- /* We are looking at a copied node */
- *commit_base_revision = original_revision;
- return SVN_NO_ERROR;
- }
-
- if (status == svn_wc__db_status_added)
- {
- /* If the node was copied/moved-here, return the copy/move source
- revision (not this node's base revision). */
- SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, commit_base_revision,
- db, local_abspath,
- scratch_pool, scratch_pool));
-
-
- if (SVN_IS_VALID_REVNUM(*commit_base_revision))
- return SVN_NO_ERROR;
- /* Fall through to handle simple replacements */
- }
else if (status == svn_wc__db_status_deleted)
- {
- const char *work_del_abspath;
-
- SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL,
- &work_del_abspath,
- db, local_abspath,
- scratch_pool, scratch_pool));
- if (work_del_abspath != NULL)
- {
- /* This is a deletion within a copied subtree. Get the copied-from
- * revision. */
- SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL,
- commit_base_revision,
- db,
- svn_dirent_dirname(work_del_abspath,
- scratch_pool),
- scratch_pool, scratch_pool));
-
- SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(*commit_base_revision));
-
- return SVN_NO_ERROR;
- }
- /* else deletion of BASE node, fall through */
- }
-
- /* Catch replacement by local addition and deleted BASE nodes. */
- if (have_base && !have_more_work)
- {
- SVN_ERR(svn_wc__db_base_get_info(&status, NULL, commit_base_revision,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL,
- db, local_abspath,
- scratch_pool, scratch_pool));
-
- if (status == svn_wc__db_status_not_present)
- *commit_base_revision = SVN_INVALID_REVNUM; /* No replacement */
- }
-
- return SVN_NO_ERROR;
-}
-
-svn_error_t *
-svn_wc__node_get_commit_base_rev(svn_revnum_t *commit_base_revision,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *scratch_pool)
-{
- return svn_error_trace(svn_wc__internal_get_commit_base_rev(
- commit_base_revision, wc_ctx->db, local_abspath,
- scratch_pool));
-}
-
-svn_error_t *
-svn_wc__node_get_lock_info(const char **lock_token,
- const char **lock_owner,
- const char **lock_comment,
- apr_time_t *lock_date,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- svn_wc__db_lock_t *lock;
- svn_error_t *err;
-
- err = svn_wc__db_base_get_info(NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, &lock, NULL,
- NULL,
- wc_ctx->db, local_abspath,
- result_pool, scratch_pool);
-
- if (err)
- {
- if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND)
- return svn_error_trace(err);
-
- svn_error_clear(err);
- lock = NULL;
- }
- if (lock_token)
- *lock_token = lock ? lock->token : NULL;
- if (lock_owner)
- *lock_owner = lock ? lock->owner : NULL;
- if (lock_comment)
- *lock_comment = lock ? lock->comment : NULL;
- if (lock_date)
- *lock_date = lock ? lock->date : 0;
+ /* Check the information below a WORKING delete */
+ SVN_ERR(svn_wc__db_read_pristine_info(NULL, NULL, changed_rev,
+ changed_date, changed_author, NULL,
+ NULL, NULL, NULL, NULL,
+ wc_ctx->db, local_abspath,
+ result_pool, scratch_pool));
return SVN_NO_ERROR;
}
@@ -1133,7 +837,7 @@ svn_wc__internal_node_get_schedule(svn_wc_schedule_t *schedule,
/* Find out details of our deletion. */
SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL,
- &work_del_abspath,
+ &work_del_abspath, NULL,
db, local_abspath,
scratch_pool, scratch_pool));
@@ -1206,78 +910,6 @@ svn_wc__node_get_schedule(svn_wc_schedule_t *schedule,
}
svn_error_t *
-svn_wc__node_get_conflict_info(const char **conflict_old,
- const char **conflict_new,
- const char **conflict_wrk,
- const char **prejfile,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- svn_boolean_t conflicted;
-
- SVN_ERR(svn_wc__db_read_info(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, &conflicted,
- NULL, NULL, NULL, NULL, NULL, NULL,
- wc_ctx->db, local_abspath,
- scratch_pool, scratch_pool));
-
- if (conflict_old)
- *conflict_old = NULL;
- if (conflict_new)
- *conflict_new = NULL;
- if (conflict_wrk)
- *conflict_wrk = NULL;
- if (prejfile)
- *prejfile = NULL;
-
- if (conflicted
- && (conflict_old || conflict_new || conflict_wrk || prejfile))
- {
- const apr_array_header_t *conflicts;
- int j;
- SVN_ERR(svn_wc__db_read_conflicts(&conflicts, wc_ctx->db, local_abspath,
- scratch_pool, scratch_pool));
-
- for (j = 0; j < conflicts->nelts; j++)
- {
- const svn_wc_conflict_description2_t *cd;
- cd = APR_ARRAY_IDX(conflicts, j,
- const svn_wc_conflict_description2_t *);
-
- switch (cd->kind)
- {
- case svn_wc_conflict_kind_text:
- if (conflict_old)
- *conflict_old = svn_dirent_basename(cd->base_abspath,
- result_pool);
-
- if (conflict_new)
- *conflict_new = svn_dirent_basename(cd->their_abspath,
- result_pool);
-
- if (conflict_wrk)
- *conflict_wrk = svn_dirent_basename(cd->my_abspath,
- result_pool);
- break;
-
- case svn_wc_conflict_kind_property:
- if (prejfile)
- *prejfile = svn_dirent_basename(cd->their_abspath,
- result_pool);
- break;
- case svn_wc_conflict_kind_tree:
- break;
- }
- }
- }
-
- return SVN_NO_ERROR;
-}
-
-svn_error_t *
svn_wc__node_clear_dav_cache_recursive(svn_wc_context_t *wc_ctx,
const char *local_abspath,
apr_pool_t *scratch_pool)
@@ -1300,18 +932,18 @@ svn_wc__node_get_lock_tokens_recursive(apr_hash_t **lock_tokens,
}
svn_error_t *
-svn_wc__get_server_excluded_subtrees(apr_hash_t **server_excluded_subtrees,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+svn_wc__get_excluded_subtrees(apr_hash_t **server_excluded_subtrees,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
return svn_error_trace(
- svn_wc__db_get_server_excluded_subtrees(server_excluded_subtrees,
- wc_ctx->db,
- local_abspath,
- result_pool,
- scratch_pool));
+ svn_wc__db_get_excluded_subtrees(server_excluded_subtrees,
+ wc_ctx->db,
+ local_abspath,
+ result_pool,
+ scratch_pool));
}
svn_error_t *
@@ -1396,8 +1028,8 @@ svn_wc__internal_get_origin(svn_boolean_t *is_copy,
SVN_ERR(svn_wc__db_scan_addition(&status, &op_root_abspath, NULL,
NULL, NULL, &original_repos_relpath,
repos_root_url,
- repos_uuid,
- revision, db, local_abspath,
+ repos_uuid, revision,
+ db, local_abspath,
result_pool, scratch_pool));
if (status == svn_wc__db_status_added)
@@ -1432,7 +1064,7 @@ svn_wc__internal_get_origin(svn_boolean_t *is_copy,
SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, revision, repos_relpath,
repos_root_url, repos_uuid, NULL,
NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL,
+ NULL, NULL, NULL,
db, local_abspath,
result_pool, scratch_pool));
}
@@ -1462,68 +1094,38 @@ svn_wc__node_get_origin(svn_boolean_t *is_copy,
}
svn_error_t *
-svn_wc__node_get_commit_status(svn_node_kind_t *kind,
- svn_boolean_t *added,
+svn_wc__node_get_commit_status(svn_boolean_t *added,
svn_boolean_t *deleted,
svn_boolean_t *is_replace_root,
- svn_boolean_t *not_present,
- svn_boolean_t *excluded,
svn_boolean_t *is_op_root,
- svn_boolean_t *symlink,
svn_revnum_t *revision,
- const char **repos_relpath,
svn_revnum_t *original_revision,
const char **original_repos_relpath,
- svn_boolean_t *conflicted,
- const char **changelist,
- svn_boolean_t *props_mod,
- svn_boolean_t *update_root,
- const char **lock_token,
svn_wc_context_t *wc_ctx,
const char *local_abspath,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
svn_wc__db_status_t status;
- svn_wc__db_kind_t db_kind;
- svn_wc__db_lock_t *lock;
- svn_boolean_t had_props;
- svn_boolean_t props_mod_tmp;
svn_boolean_t have_base;
svn_boolean_t have_more_work;
svn_boolean_t op_root;
- if (!props_mod)
- props_mod = &props_mod_tmp;
-
/* ### All of this should be handled inside a single read transaction */
- SVN_ERR(svn_wc__db_read_info(&status, &db_kind, revision, repos_relpath,
+ SVN_ERR(svn_wc__db_read_info(&status, NULL, revision, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
original_repos_relpath, NULL, NULL,
- original_revision, &lock, NULL, NULL,
- changelist, conflicted,
- &op_root, &had_props, props_mod,
+ original_revision, NULL, NULL, NULL,
+ NULL, NULL,
+ &op_root, NULL, NULL,
&have_base, &have_more_work, NULL,
wc_ctx->db, local_abspath,
result_pool, scratch_pool));
- if (kind)
- {
- if (db_kind == svn_wc__db_kind_file)
- *kind = svn_node_file;
- else if (db_kind == svn_wc__db_kind_dir)
- *kind = svn_node_dir;
- else
- *kind = svn_node_unknown;
- }
if (added)
*added = (status == svn_wc__db_status_added);
if (deleted)
*deleted = (status == svn_wc__db_status_deleted);
- if (not_present)
- *not_present = (status == svn_wc__db_status_not_present);
- if (excluded)
- *excluded = (status == svn_wc__db_status_excluded);
if (is_op_root)
*is_op_root = op_root;
@@ -1539,40 +1141,19 @@ svn_wc__node_get_commit_status(svn_node_kind_t *kind,
*is_replace_root = FALSE;
}
- if (symlink)
- {
- apr_hash_t *props;
- *symlink = FALSE;
-
- if (db_kind == svn_wc__db_kind_file
- && (had_props || *props_mod))
- {
- SVN_ERR(svn_wc__db_read_props(&props, wc_ctx->db, local_abspath,
- scratch_pool, scratch_pool));
-
- *symlink = ((props != NULL)
- && (apr_hash_get(props, SVN_PROP_SPECIAL,
- APR_HASH_KEY_STRING) != NULL));
- }
- }
-
/* Retrieve some information from BASE which is needed for replacing
- and/or deleting BASE nodes. (We don't need lock here) */
+ and/or deleting BASE nodes. */
if (have_base
- && ((revision && !SVN_IS_VALID_REVNUM(*revision))
- || (update_root && status == svn_wc__db_status_normal)))
+ && !have_more_work
+ && op_root
+ && (revision && !SVN_IS_VALID_REVNUM(*revision)))
{
SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, revision, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, update_root,
+ NULL, NULL, NULL, NULL,
wc_ctx->db, local_abspath,
scratch_pool, scratch_pool));
}
- else if (update_root)
- *update_root = FALSE;
-
- if (lock_token)
- *lock_token = lock ? lock->token : NULL;
return SVN_NO_ERROR;
}
@@ -1637,35 +1218,34 @@ svn_wc__rename_wc(svn_wc_context_t *wc_ctx,
svn_error_t *
svn_wc__check_for_obstructions(svn_wc_notify_state_t *obstruction_state,
svn_node_kind_t *kind,
- svn_boolean_t *added,
svn_boolean_t *deleted,
- svn_boolean_t *conflicted,
+ svn_boolean_t *excluded,
+ svn_depth_t *parent_depth,
svn_wc_context_t *wc_ctx,
const char *local_abspath,
svn_boolean_t no_wcroot_check,
apr_pool_t *scratch_pool)
{
svn_wc__db_status_t status;
- svn_wc__db_kind_t db_kind;
+ svn_node_kind_t db_kind;
svn_node_kind_t disk_kind;
- svn_boolean_t conflicted_p;
svn_error_t *err;
*obstruction_state = svn_wc_notify_state_inapplicable;
if (kind)
*kind = svn_node_none;
- if (added)
- *added = FALSE;
if (deleted)
*deleted = FALSE;
- if (conflicted)
- *conflicted = FALSE;
+ if (excluded)
+ *excluded = FALSE;
+ if (parent_depth)
+ *parent_depth = svn_depth_unknown;
SVN_ERR(svn_io_check_path(local_abspath, &disk_kind, scratch_pool));
err = svn_wc__db_read_info(&status, &db_kind, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, &conflicted_p, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL,
wc_ctx->db, local_abspath,
scratch_pool, scratch_pool);
@@ -1682,9 +1262,10 @@ svn_wc__check_for_obstructions(svn_wc_notify_state_t *obstruction_state,
}
err = svn_wc__db_read_info(&status, &db_kind, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, parent_depth, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL,
wc_ctx->db, svn_dirent_dirname(local_abspath,
scratch_pool),
scratch_pool, scratch_pool);
@@ -1699,7 +1280,7 @@ svn_wc__check_for_obstructions(svn_wc_notify_state_t *obstruction_state,
else
SVN_ERR(err);
- if (db_kind != svn_wc__db_kind_dir
+ if (db_kind != svn_node_dir
|| (status != svn_wc__db_status_normal
&& status != svn_wc__db_status_added))
{
@@ -1714,7 +1295,7 @@ svn_wc__check_for_obstructions(svn_wc_notify_state_t *obstruction_state,
/* Check for obstructing working copies */
if (!no_wcroot_check
- && db_kind == svn_wc__db_kind_dir
+ && db_kind == svn_node_dir
&& status == svn_wc__db_status_normal)
{
svn_boolean_t is_root;
@@ -1745,14 +1326,14 @@ svn_wc__check_for_obstructions(svn_wc_notify_state_t *obstruction_state,
case svn_wc__db_status_excluded:
case svn_wc__db_status_server_excluded:
+ if (excluded)
+ *excluded = TRUE;
+ /* fall through */
case svn_wc__db_status_incomplete:
*obstruction_state = svn_wc_notify_state_missing;
break;
case svn_wc__db_status_added:
- if (added)
- *added = TRUE;
- /* Fall through to svn_wc__db_status_normal */
case svn_wc__db_status_normal:
if (disk_kind == svn_node_none)
*obstruction_state = svn_wc_notify_state_missing;
@@ -1771,17 +1352,67 @@ svn_wc__check_for_obstructions(svn_wc_notify_state_t *obstruction_state,
SVN_ERR_MALFUNCTION();
}
- if (conflicted_p && (conflicted != NULL))
- {
- svn_boolean_t text_c, prop_c, tree_c;
+ return SVN_NO_ERROR;
+}
- SVN_ERR(svn_wc__internal_conflicted_p(&text_c, &prop_c, &tree_c,
- wc_ctx->db, local_abspath,
- scratch_pool));
- *conflicted = (text_c || prop_c || tree_c);
- }
+svn_error_t *
+svn_wc__node_was_moved_away(const char **moved_to_abspath,
+ const char **op_root_abspath,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_boolean_t is_deleted;
+
+ if (moved_to_abspath)
+ *moved_to_abspath = NULL;
+ if (op_root_abspath)
+ *op_root_abspath = NULL;
+
+ SVN_ERR(svn_wc__node_is_status_deleted(&is_deleted, wc_ctx, local_abspath,
+ scratch_pool));
+ if (is_deleted)
+ SVN_ERR(svn_wc__db_scan_deletion(NULL, moved_to_abspath, NULL,
+ op_root_abspath, wc_ctx->db,
+ local_abspath,
+ result_pool, scratch_pool));
return SVN_NO_ERROR;
}
+
+svn_error_t *
+svn_wc__node_was_moved_here(const char **moved_from_abspath,
+ const char **delete_op_root_abspath,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_error_t *err;
+
+ if (moved_from_abspath)
+ *moved_from_abspath = NULL;
+ if (delete_op_root_abspath)
+ *delete_op_root_abspath = NULL;
+
+ err = svn_wc__db_scan_moved(moved_from_abspath, NULL, NULL,
+ delete_op_root_abspath,
+ wc_ctx->db, local_abspath,
+ result_pool, scratch_pool);
+
+ if (err)
+ {
+ /* Return error for not added nodes */
+ if (err->apr_err != SVN_ERR_WC_PATH_UNEXPECTED_STATUS)
+ return svn_error_trace(err);
+
+ /* Path not moved here */
+ svn_error_clear(err);
+ return SVN_NO_ERROR;
+ }
+
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/libsvn_wc/old-and-busted.c b/subversion/libsvn_wc/old-and-busted.c
index c7cc249..b87be85 100644
--- a/subversion/libsvn_wc/old-and-busted.c
+++ b/subversion/libsvn_wc/old-and-busted.c
@@ -26,6 +26,7 @@
#include "svn_time.h"
#include "svn_xml.h"
#include "svn_dirent_uri.h"
+#include "svn_hash.h"
#include "svn_path.h"
#include "svn_ctype.h"
#include "svn_pools.h"
@@ -382,7 +383,7 @@ opt_revision_to_string(const char **str,
*str = apr_pstrmemdup(pool, "HEAD", 4);
break;
case svn_opt_revision_number:
- *str = apr_itoa(pool, rev->value.number);
+ *str = apr_ltoa(pool, rev->value.number);
break;
default:
return svn_error_createf
@@ -716,7 +717,7 @@ do_bool_attr(svn_boolean_t *entry_flag,
apr_hash_t *atts, const char *attr_name,
const char *entry_name)
{
- const char *str = apr_hash_get(atts, attr_name, APR_HASH_KEY_STRING);
+ const char *str = svn_hash_gets(atts, attr_name);
*entry_flag = FALSE;
if (str)
@@ -741,7 +742,7 @@ extract_string(apr_hash_t *atts,
const char *att_name,
apr_pool_t *result_pool)
{
- const char *value = apr_hash_get(atts, att_name, APR_HASH_KEY_STRING);
+ const char *value = svn_hash_gets(atts, att_name);
if (value == NULL)
return NULL;
@@ -756,7 +757,7 @@ extract_string_normalize(apr_hash_t *atts,
const char *att_name,
apr_pool_t *result_pool)
{
- const char *value = apr_hash_get(atts, att_name, APR_HASH_KEY_STRING);
+ const char *value = svn_hash_gets(atts, att_name);
if (value == NULL)
return NULL;
@@ -790,7 +791,7 @@ atts_to_entry(svn_wc_entry_t **new_entry,
const char *name;
/* Find the name and set up the entry under that name. */
- name = apr_hash_get(atts, ENTRIES_ATTR_NAME, APR_HASH_KEY_STRING);
+ name = svn_hash_gets(atts, ENTRIES_ATTR_NAME);
entry->name = name ? apr_pstrdup(pool, name) : SVN_WC_ENTRY_THIS_DIR;
/* Attempt to set revision (resolve_to_defaults may do it later, too)
@@ -798,7 +799,7 @@ atts_to_entry(svn_wc_entry_t **new_entry,
### not used by loggy; no need to set MODIFY_FLAGS */
{
const char *revision_str
- = apr_hash_get(atts, ENTRIES_ATTR_REVISION, APR_HASH_KEY_STRING);
+ = svn_hash_gets(atts, ENTRIES_ATTR_REVISION);
if (revision_str)
entry->revision = SVN_STR_TO_REV(revision_str);
@@ -810,11 +811,15 @@ atts_to_entry(svn_wc_entry_t **new_entry,
### not used by loggy; no need to set MODIFY_FLAGS */
entry->url = extract_string(atts, ENTRIES_ATTR_URL, pool);
+ if (entry->url)
+ entry->url = svn_uri_canonicalize(entry->url, pool);
/* Set up repository root. Make sure it is a prefix of url.
### not used by loggy; no need to set MODIFY_FLAGS */
entry->repos = extract_string(atts, ENTRIES_ATTR_REPOS, pool);
+ if (entry->repos)
+ entry->repos = svn_uri_canonicalize(entry->repos, pool);
if (entry->url && entry->repos
&& !svn_uri__is_ancestor(entry->repos, entry->url))
@@ -827,7 +832,7 @@ atts_to_entry(svn_wc_entry_t **new_entry,
/* ### not used by loggy; no need to set MODIFY_FLAGS */
{
const char *kindstr
- = apr_hash_get(atts, ENTRIES_ATTR_KIND, APR_HASH_KEY_STRING);
+ = svn_hash_gets(atts, ENTRIES_ATTR_KIND);
entry->kind = svn_node_none;
if (kindstr)
@@ -848,7 +853,7 @@ atts_to_entry(svn_wc_entry_t **new_entry,
/* ### not used by loggy; no need to set MODIFY_FLAGS */
{
const char *schedulestr
- = apr_hash_get(atts, ENTRIES_ATTR_SCHEDULE, APR_HASH_KEY_STRING);
+ = svn_hash_gets(atts, ENTRIES_ATTR_SCHEDULE);
entry->schedule = svn_wc_schedule_normal;
if (schedulestr)
@@ -894,8 +899,7 @@ atts_to_entry(svn_wc_entry_t **new_entry,
{
const char *revstr;
- revstr = apr_hash_get(atts, ENTRIES_ATTR_COPYFROM_REV,
- APR_HASH_KEY_STRING);
+ revstr = svn_hash_gets(atts, ENTRIES_ATTR_COPYFROM_REV);
if (revstr)
entry->copyfrom_rev = SVN_STR_TO_REV(revstr);
}
@@ -921,8 +925,7 @@ atts_to_entry(svn_wc_entry_t **new_entry,
{
const char *text_timestr;
- text_timestr = apr_hash_get(atts, ENTRIES_ATTR_TEXT_TIME,
- APR_HASH_KEY_STRING);
+ text_timestr = svn_hash_gets(atts, ENTRIES_ATTR_TEXT_TIME);
if (text_timestr)
SVN_ERR(svn_time_from_cstring(&entry->text_time, text_timestr, pool));
@@ -945,8 +948,7 @@ atts_to_entry(svn_wc_entry_t **new_entry,
{
const char *cmt_datestr, *cmt_revstr;
- cmt_datestr = apr_hash_get(atts, ENTRIES_ATTR_CMT_DATE,
- APR_HASH_KEY_STRING);
+ cmt_datestr = svn_hash_gets(atts, ENTRIES_ATTR_CMT_DATE);
if (cmt_datestr)
{
SVN_ERR(svn_time_from_cstring(&entry->cmt_date, cmt_datestr, pool));
@@ -954,7 +956,7 @@ atts_to_entry(svn_wc_entry_t **new_entry,
else
entry->cmt_date = 0;
- cmt_revstr = apr_hash_get(atts, ENTRIES_ATTR_CMT_REV, APR_HASH_KEY_STRING);
+ cmt_revstr = svn_hash_gets(atts, ENTRIES_ATTR_CMT_REV);
if (cmt_revstr)
{
entry->cmt_rev = SVN_STR_TO_REV(cmt_revstr);
@@ -971,7 +973,7 @@ atts_to_entry(svn_wc_entry_t **new_entry,
entry->lock_comment = extract_string(atts, ENTRIES_ATTR_LOCK_COMMENT, pool);
{
const char *cdate_str =
- apr_hash_get(atts, ENTRIES_ATTR_LOCK_CREATION_DATE, APR_HASH_KEY_STRING);
+ svn_hash_gets(atts, ENTRIES_ATTR_LOCK_CREATION_DATE);
if (cdate_str)
{
SVN_ERR(svn_time_from_cstring(&entry->lock_creation_date,
@@ -987,8 +989,7 @@ atts_to_entry(svn_wc_entry_t **new_entry,
/* Translated size */
/* ### not used by loggy; no need to set MODIFY_FLAGS */
{
- const char *val = apr_hash_get(atts, ENTRIES_ATTR_WORKING_SIZE,
- APR_HASH_KEY_STRING);
+ const char *val = svn_hash_gets(atts, ENTRIES_ATTR_WORKING_SIZE);
if (val)
{
/* Cast to off_t; it's safe: we put in an off_t to start with... */
@@ -1045,7 +1046,7 @@ handle_start_tag(void *userData, const char *tagname, const char **atts)
/* Find the name and set up the entry under that name. This
should *NOT* be NULL, since svn_wc__atts_to_entry() should
have made it into SVN_WC_ENTRY_THIS_DIR. */
- apr_hash_set(accum->entries, entry->name, APR_HASH_KEY_STRING, entry);
+ svn_hash_sets(accum->entries, entry->name, entry);
}
/* Parse BUF of size SIZE as an entries file in XML format, storing the parsed
@@ -1131,7 +1132,7 @@ resolve_to_defaults(apr_hash_t *entries,
{
apr_hash_index_t *hi;
svn_wc_entry_t *default_entry
- = apr_hash_get(entries, SVN_WC_ENTRY_THIS_DIR, APR_HASH_KEY_STRING);
+ = svn_hash_gets(entries, SVN_WC_ENTRY_THIS_DIR);
/* First check the dir's own entry for consistency. */
if (! default_entry)
@@ -1259,12 +1260,12 @@ svn_wc__read_entries_old(apr_hash_t **entries,
++curp;
++entryno;
- apr_hash_set(*entries, entry->name, APR_HASH_KEY_STRING, entry);
+ svn_hash_sets(*entries, entry->name, entry);
}
}
/* Fill in any implied fields. */
- return resolve_to_defaults(*entries, result_pool);
+ return svn_error_trace(resolve_to_defaults(*entries, result_pool));
}
@@ -1327,8 +1328,8 @@ svn_wc_entry(const svn_wc_entry_t **entry,
/* Load an entries hash, and cache it into DIR_ACCESS. Go ahead and
fetch all entries here (optimization) since we know how to filter
out a "hidden" node. */
- SVN_ERR(svn_wc_entries_read(&entries, dir_access, TRUE, pool));
- *entry = apr_hash_get(entries, entry_name, APR_HASH_KEY_STRING);
+ SVN_ERR(svn_wc__entries_read_internal(&entries, dir_access, TRUE, pool));
+ *entry = svn_hash_gets(entries, entry_name);
if (!show_hidden && *entry != NULL)
{
diff --git a/subversion/libsvn_wc/props.c b/subversion/libsvn_wc/props.c
index 873ceca..a7b2339 100644
--- a/subversion/libsvn_wc/props.c
+++ b/subversion/libsvn_wc/props.c
@@ -46,11 +46,13 @@
#include "svn_wc.h"
#include "svn_utf.h"
#include "svn_diff.h"
+#include "svn_sorts.h"
#include "private/svn_wc_private.h"
#include "private/svn_mergeinfo_private.h"
#include "private/svn_skel.h"
#include "private/svn_string_private.h"
+#include "private/svn_subr_private.h"
#include "wc.h"
#include "props.h"
@@ -79,47 +81,10 @@ append_prop_conflict(svn_stream_t *stream,
/* TODO: someday, perhaps prefix each conflict_description with a
timestamp or something? */
const svn_string_t *conflict_desc;
- apr_size_t len;
- const char *native_text;
SVN_ERR(prop_conflict_from_skel(&conflict_desc, prop_skel, pool, pool));
- native_text = svn_utf_cstring_from_utf8_fuzzy(conflict_desc->data, pool);
- len = strlen(native_text);
- return svn_stream_write(stream, native_text, &len);
-}
-
-
-/* Get the property reject file for LOCAL_ABSPATH in DB. Set
- *PREJFILE_ABSPATH to the name of that file, or to NULL if no such
- file is named. The file may, or may not, exist on disk. */
-svn_error_t *
-svn_wc__get_prejfile_abspath(const char **prejfile_abspath,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- const apr_array_header_t *conflicts;
- int i;
-
- SVN_ERR(svn_wc__db_read_conflicts(&conflicts, db, local_abspath,
- scratch_pool, scratch_pool));
-
- for (i = 0; i < conflicts->nelts; i++)
- {
- const svn_wc_conflict_description2_t *cd;
- cd = APR_ARRAY_IDX(conflicts, i, const svn_wc_conflict_description2_t *);
-
- if (cd->kind == svn_wc_conflict_kind_property)
- {
- *prejfile_abspath = apr_pstrdup(result_pool, cd->their_abspath);
- return SVN_NO_ERROR;
- }
- }
-
- *prejfile_abspath = NULL;
- return SVN_NO_ERROR;
+ return svn_stream_puts(stream, conflict_desc->data);
}
/*---------------------------------------------------------------------*/
@@ -145,8 +110,8 @@ diff_mergeinfo_props(svn_mergeinfo_t *deleted, svn_mergeinfo_t *added,
svn_mergeinfo_t from, to;
SVN_ERR(svn_mergeinfo_parse(&from, from_prop_val->data, pool));
SVN_ERR(svn_mergeinfo_parse(&to, to_prop_val->data, pool));
- SVN_ERR(svn_mergeinfo_diff(deleted, added, from, to,
- TRUE, pool));
+ SVN_ERR(svn_mergeinfo_diff2(deleted, added, from, to,
+ TRUE, pool, pool));
}
return SVN_NO_ERROR;
}
@@ -167,7 +132,8 @@ combine_mergeinfo_props(const svn_string_t **output,
SVN_ERR(svn_mergeinfo_parse(&mergeinfo1, prop_val1->data, scratch_pool));
SVN_ERR(svn_mergeinfo_parse(&mergeinfo2, prop_val2->data, scratch_pool));
- SVN_ERR(svn_mergeinfo_merge(mergeinfo1, mergeinfo2, scratch_pool));
+ SVN_ERR(svn_mergeinfo_merge2(mergeinfo1, mergeinfo2, scratch_pool,
+ scratch_pool));
SVN_ERR(svn_mergeinfo_to_string(&mergeinfo_string, mergeinfo1, result_pool));
*output = mergeinfo_string;
return SVN_NO_ERROR;
@@ -181,65 +147,72 @@ combine_forked_mergeinfo_props(const svn_string_t **output,
const svn_string_t *from_prop_val,
const svn_string_t *working_prop_val,
const svn_string_t *to_prop_val,
- apr_pool_t *pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
svn_mergeinfo_t from_mergeinfo, l_deleted, l_added, r_deleted, r_added;
svn_string_t *mergeinfo_string;
/* ### OPTIMIZE: Use from_mergeinfo when diff'ing. */
SVN_ERR(diff_mergeinfo_props(&l_deleted, &l_added, from_prop_val,
- working_prop_val, pool));
+ working_prop_val, scratch_pool));
SVN_ERR(diff_mergeinfo_props(&r_deleted, &r_added, from_prop_val,
- to_prop_val, pool));
- SVN_ERR(svn_mergeinfo_merge(l_deleted, r_deleted, pool));
- SVN_ERR(svn_mergeinfo_merge(l_added, r_added, pool));
+ to_prop_val, scratch_pool));
+ SVN_ERR(svn_mergeinfo_merge2(l_deleted, r_deleted,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_mergeinfo_merge2(l_added, r_added,
+ scratch_pool, scratch_pool));
/* Apply the combined deltas to the base. */
- SVN_ERR(svn_mergeinfo_parse(&from_mergeinfo, from_prop_val->data, pool));
- SVN_ERR(svn_mergeinfo_merge(from_mergeinfo, l_added, pool));
+ SVN_ERR(svn_mergeinfo_parse(&from_mergeinfo, from_prop_val->data,
+ scratch_pool));
+ SVN_ERR(svn_mergeinfo_merge2(from_mergeinfo, l_added,
+ scratch_pool, scratch_pool));
- SVN_ERR(svn_mergeinfo_remove2(&from_mergeinfo, l_deleted,
- from_mergeinfo, TRUE, pool, pool));
+ SVN_ERR(svn_mergeinfo_remove2(&from_mergeinfo, l_deleted, from_mergeinfo,
+ TRUE, scratch_pool, scratch_pool));
- SVN_ERR(svn_mergeinfo_to_string(&mergeinfo_string, from_mergeinfo, pool));
+ SVN_ERR(svn_mergeinfo_to_string(&mergeinfo_string, from_mergeinfo,
+ result_pool));
*output = mergeinfo_string;
return SVN_NO_ERROR;
}
svn_error_t *
-svn_wc__perform_props_merge(svn_wc_notify_state_t *state,
- svn_wc__db_t *db,
- const char *local_abspath,
- const svn_wc_conflict_version_t *left_version,
- const svn_wc_conflict_version_t *right_version,
- apr_hash_t *baseprops,
- const apr_array_header_t *propchanges,
- svn_boolean_t base_merge,
- svn_boolean_t dry_run,
- svn_wc_conflict_resolver_func2_t conflict_func,
- void *conflict_baton,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- apr_pool_t *scratch_pool)
+svn_wc_merge_props3(svn_wc_notify_state_t *state,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ const svn_wc_conflict_version_t *left_version,
+ const svn_wc_conflict_version_t *right_version,
+ apr_hash_t *baseprops,
+ const apr_array_header_t *propchanges,
+ svn_boolean_t dry_run,
+ svn_wc_conflict_resolver_func2_t conflict_func,
+ void *conflict_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
{
int i;
svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
apr_hash_t *pristine_props = NULL;
- apr_hash_t *actual_props = NULL;
- apr_hash_t *new_pristine_props;
+ apr_hash_t *actual_props;
apr_hash_t *new_actual_props;
svn_boolean_t had_props, props_mod;
svn_boolean_t have_base;
- svn_skel_t *work_items;
+ svn_boolean_t conflicted;
+ svn_skel_t *work_items = NULL;
+ svn_skel_t *conflict_skel = NULL;
+ svn_wc__db_t *db = wc_ctx->db;
/* IMPORTANT: svn_wc_merge_prop_diffs relies on the fact that baseprops
may be NULL. */
SVN_ERR(svn_wc__db_read_info(&status, &kind, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, &conflicted, NULL,
&had_props, &props_mod, &have_base, NULL, NULL,
db, local_abspath,
scratch_pool, scratch_pool));
@@ -263,6 +236,30 @@ svn_wc__perform_props_merge(svn_wc_notify_state_t *state,
_("The node '%s' does not have properties in this state."),
svn_dirent_local_style(local_abspath, scratch_pool));
}
+ else if (conflicted)
+ {
+ svn_boolean_t text_conflicted;
+ svn_boolean_t prop_conflicted;
+ svn_boolean_t tree_conflicted;
+
+ SVN_ERR(svn_wc__internal_conflicted_p(&text_conflicted,
+ &prop_conflicted,
+ &tree_conflicted,
+ db, local_abspath,
+ scratch_pool));
+
+ /* We can't install two text/prop conflicts on a single node, so
+ avoid even checking that we have to merge it */
+ if (text_conflicted || prop_conflicted || tree_conflicted)
+ {
+ return svn_error_createf(
+ SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
+ _("Can't merge into conflicted node '%s'"),
+ svn_dirent_local_style(local_abspath,
+ scratch_pool));
+ }
+ /* else: Conflict was resolved by removing markers */
+ }
/* The PROPCHANGES may not have non-"normal" properties in it. If entry
or wc props were allowed, then the following code would install them
@@ -281,8 +278,8 @@ svn_wc__perform_props_merge(svn_wc_notify_state_t *state,
}
if (had_props)
- SVN_ERR(svn_wc__get_pristine_props(&pristine_props, db, local_abspath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_read_pristine_props(&pristine_props, db, local_abspath,
+ scratch_pool, scratch_pool));
if (pristine_props == NULL)
pristine_props = apr_hash_make(scratch_pool);
@@ -290,97 +287,86 @@ svn_wc__perform_props_merge(svn_wc_notify_state_t *state,
SVN_ERR(svn_wc__get_actual_props(&actual_props, db, local_abspath,
scratch_pool, scratch_pool));
else
- actual_props = apr_hash_copy(scratch_pool, pristine_props);
+ actual_props = pristine_props;
/* Note that while this routine does the "real" work, it's only
prepping tempfiles and writing log commands. */
- SVN_ERR(svn_wc__merge_props(&work_items, state,
- &new_pristine_props, &new_actual_props,
- db, local_abspath, kind,
- left_version, right_version,
+ SVN_ERR(svn_wc__merge_props(&conflict_skel, state,
+ &new_actual_props,
+ db, local_abspath,
baseprops /* server_baseprops */,
pristine_props,
actual_props,
- propchanges, base_merge, dry_run,
- conflict_func, conflict_baton,
- cancel_func, cancel_baton,
+ propchanges,
scratch_pool, scratch_pool));
if (dry_run)
{
- SVN_ERR_ASSERT(! work_items);
return SVN_NO_ERROR;
}
{
const char *dir_abspath;
- if (kind == svn_wc__db_kind_dir)
+ if (kind == svn_node_dir)
dir_abspath = local_abspath;
else
dir_abspath = svn_dirent_dirname(local_abspath, scratch_pool);
/* Verify that we're holding this directory's write lock. */
SVN_ERR(svn_wc__write_check(db, dir_abspath, scratch_pool));
+ }
- /* After a (not-dry-run) merge, we ALWAYS have props to save. */
- SVN_ERR_ASSERT(new_pristine_props != NULL && new_actual_props != NULL);
+ if (conflict_skel)
+ {
+ svn_skel_t *work_item;
+ SVN_ERR(svn_wc__conflict_skel_set_op_merge(conflict_skel,
+ left_version,
+ right_version,
+ scratch_pool,
+ scratch_pool));
-/* See props.h */
-#ifdef SVN__SUPPORT_BASE_MERGE
- if (status == svn_wc__db_status_added)
- SVN_ERR(svn_wc__db_temp_working_set_props(db, local_abspath,
- new_base_props, scratch_pool));
- else
- SVN_ERR(svn_wc__db_temp_base_set_props(db, local_abspath,
- new_base_props, scratch_pool));
-#else
- if (base_merge)
- return svn_error_create(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
- U_("base_merge=TRUE is no longer supported"));
-#endif
- SVN_ERR(svn_wc__db_op_set_props(db, local_abspath, new_actual_props,
- svn_wc__has_magic_property(propchanges),
- NULL /* conflict */,
- work_items,
- scratch_pool));
+ SVN_ERR(svn_wc__conflict_create_markers(&work_item,
+ db, local_abspath,
+ conflict_skel,
+ scratch_pool, scratch_pool));
- if (work_items != NULL)
- SVN_ERR(svn_wc__wq_run(db, local_abspath, cancel_func, cancel_baton,
- scratch_pool));
- }
+ work_items = svn_wc__wq_merge(work_items, work_item, scratch_pool);
+ }
- return SVN_NO_ERROR;
-}
+ /* After a (not-dry-run) merge, we ALWAYS have props to save. */
+ SVN_ERR_ASSERT(new_actual_props != NULL);
+ SVN_ERR(svn_wc__db_op_set_props(db, local_abspath, new_actual_props,
+ svn_wc__has_magic_property(propchanges),
+ conflict_skel,
+ work_items,
+ scratch_pool));
-svn_error_t *
-svn_wc_merge_props3(svn_wc_notify_state_t *state,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- const svn_wc_conflict_version_t *left_version,
- const svn_wc_conflict_version_t *right_version,
- apr_hash_t *baseprops,
- const apr_array_header_t *propchanges,
- svn_boolean_t dry_run,
- svn_wc_conflict_resolver_func2_t conflict_func,
- void *conflict_baton,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- apr_pool_t *scratch_pool)
-{
- return svn_error_trace(svn_wc__perform_props_merge(
- state,
- wc_ctx->db,
- local_abspath,
- left_version, right_version,
- baseprops,
- propchanges,
- FALSE /* base_merge */,
- dry_run,
- conflict_func, conflict_baton,
- cancel_func, cancel_baton,
+ if (work_items != NULL)
+ SVN_ERR(svn_wc__wq_run(db, local_abspath, cancel_func, cancel_baton,
scratch_pool));
+
+ /* If there is a conflict, try to resolve it. */
+ if (conflict_skel && conflict_func)
+ {
+ svn_boolean_t prop_conflicted;
+
+ SVN_ERR(svn_wc__conflict_invoke_resolver(db, local_abspath, conflict_skel,
+ NULL /* merge_options */,
+ conflict_func, conflict_baton,
+ cancel_func, cancel_baton,
+ scratch_pool));
+
+ /* Reset *STATE if all prop conflicts were resolved. */
+ SVN_ERR(svn_wc__internal_conflicted_p(
+ NULL, &prop_conflicted, NULL,
+ wc_ctx->db, local_abspath, scratch_pool));
+ if (! prop_conflicted)
+ *state = svn_wc_notify_state_merged;
+ }
+
+ return SVN_NO_ERROR;
}
@@ -588,9 +574,9 @@ prop_conflict_from_skel(const svn_string_t **conflict_desc,
incoming_base, scratch_pool);
if (mine == NULL)
- mine = svn_string_create("", scratch_pool);
+ mine = svn_string_create_empty(scratch_pool);
if (incoming == NULL)
- incoming = svn_string_create("", scratch_pool);
+ incoming = svn_string_create_empty(scratch_pool);
/* Pick a suitable base for the conflict diff.
* The incoming value is always a change,
@@ -600,7 +586,7 @@ prop_conflict_from_skel(const svn_string_t **conflict_desc,
if (incoming_base)
original = incoming_base;
else
- original = svn_string_create("", scratch_pool);
+ original = svn_string_create_empty(scratch_pool);
}
else if (incoming_base && svn_string_compare(original, mine))
original = incoming_base;
@@ -614,7 +600,7 @@ prop_conflict_from_skel(const svn_string_t **conflict_desc,
if (!(original_is_binary || mine_is_binary || incoming_is_binary))
{
diff_opts = svn_diff_file_options_create(scratch_pool);
- diff_opts->ignore_space = FALSE;
+ diff_opts->ignore_space = svn_diff_file_ignore_space_none;
diff_opts->ignore_eol_style = FALSE;
diff_opts->show_c_function = FALSE;
SVN_ERR(svn_diff_mem_string_diff3(&diff, original, mine, incoming,
@@ -626,12 +612,26 @@ prop_conflict_from_skel(const svn_string_t **conflict_desc,
const char *mine_marker = _("<<<<<<< (local property value)");
const char *incoming_marker = _(">>>>>>> (incoming property value)");
const char *separator = "=======";
+ svn_string_t *original_ascii =
+ svn_string_create(svn_utf_cstring_from_utf8_fuzzy(original->data,
+ scratch_pool),
+ scratch_pool);
+ svn_string_t *mine_ascii =
+ svn_string_create(svn_utf_cstring_from_utf8_fuzzy(mine->data,
+ scratch_pool),
+ scratch_pool);
+ svn_string_t *incoming_ascii =
+ svn_string_create(svn_utf_cstring_from_utf8_fuzzy(incoming->data,
+ scratch_pool),
+ scratch_pool);
style = svn_diff_conflict_display_modified_latest;
stream = svn_stream_from_stringbuf(buf, scratch_pool);
SVN_ERR(svn_stream_skip(stream, buf->len));
SVN_ERR(svn_diff_mem_string_output_merge2(stream, diff,
- original, mine, incoming,
+ original_ascii,
+ mine_ascii,
+ incoming_ascii,
NULL, mine_marker,
incoming_marker, separator,
style, scratch_pool));
@@ -764,313 +764,35 @@ set_prop_merge_state(svn_wc_notify_state_t *state,
*state = new_value;
}
-/* Helper function for the three apply_* functions below, used when
- * merging properties together.
- *
- * Given property PROPNAME on LOCAL_ABSPATH, and four possible property
- * values, generate four tmpfiles and pass them to CONFLICT_FUNC callback.
- * This gives the client an opportunity to interactively resolve the
- * property conflict.
- *
- * BASE_VAL/WORKING_VAL represent the current state of the working
- * copy, and INCOMING_OLD_VAL/INCOMING_NEW_VAL represents the incoming
- * propchange. Any of these values might be NULL, indicating either
- * non-existence or intent-to-delete.
- *
- * If the callback isn't available, or if it responds with
- * 'choose_postpone', then set *CONFLICT_REMAINS to TRUE and return.
- *
- * If the callback responds with a choice of 'base', 'theirs', 'mine',
- * or 'merged', then install the proper value into WORKING_PROPS and
- * set *CONFLICT_REMAINS to FALSE.
- */
-static svn_error_t *
-maybe_generate_propconflict(svn_boolean_t *conflict_remains,
- svn_wc__db_t *db,
- const char *local_abspath,
- const svn_wc_conflict_version_t *left_version,
- const svn_wc_conflict_version_t *right_version,
- svn_boolean_t is_dir,
- const char *propname,
- apr_hash_t *working_props,
- const svn_string_t *incoming_old_val,
- const svn_string_t *incoming_new_val,
- const svn_string_t *base_val,
- const svn_string_t *working_val,
- svn_wc_conflict_resolver_func2_t conflict_func,
- void *conflict_baton,
- svn_boolean_t dry_run,
- apr_pool_t *scratch_pool)
-{
- svn_wc_conflict_result_t *result = NULL;
- apr_pool_t *filepool = svn_pool_create(scratch_pool);
- svn_wc_conflict_description2_t *cdesc;
- const char *dirpath = svn_dirent_dirname(local_abspath, filepool);
-
- if (! conflict_func || dry_run)
- {
- /* Just postpone the conflict. */
- *conflict_remains = TRUE;
- return SVN_NO_ERROR;
- }
-
- cdesc = svn_wc_conflict_description_create_prop2(
- local_abspath,
- is_dir ? svn_node_dir : svn_node_file, propname, scratch_pool);
-
- cdesc->src_left_version = left_version;
- cdesc->src_right_version = right_version;
-
- /* Create a tmpfile for each of the string_t's we've got. */
- if (working_val)
- {
- const char *file_name;
-
- SVN_ERR(svn_io_write_unique(&file_name, dirpath, working_val->data,
- working_val->len,
- svn_io_file_del_on_pool_cleanup, filepool));
- cdesc->my_abspath = svn_dirent_join(dirpath, file_name, filepool);
- }
-
- if (incoming_new_val)
- {
- const char *file_name;
-
- SVN_ERR(svn_io_write_unique(&file_name, dirpath, incoming_new_val->data,
- incoming_new_val->len,
- svn_io_file_del_on_pool_cleanup, filepool));
- cdesc->their_abspath = svn_dirent_join(dirpath, file_name, filepool);
- }
-
- if (!base_val && !incoming_old_val)
- {
- /* If base and old are both NULL, then that's fine, we just let
- base_file stay NULL as-is. Both agents are attempting to add a
- new property. */
- }
-
- else if ((base_val && !incoming_old_val)
- || (!base_val && incoming_old_val))
- {
- /* If only one of base and old are defined, then we've got a
- situation where one agent is attempting to add the property
- for the first time, and the other agent is changing a
- property it thinks already exists. In this case, we return
- whichever older-value happens to be defined, so that the
- conflict-callback can still attempt a 3-way merge. */
-
- const svn_string_t *conflict_base_val = base_val ? base_val
- : incoming_old_val;
- const char *file_name;
-
- SVN_ERR(svn_io_write_unique(&file_name, dirpath,
- conflict_base_val->data,
- conflict_base_val->len,
- svn_io_file_del_on_pool_cleanup,
- filepool));
- cdesc->base_abspath = svn_dirent_join(dirpath, file_name, filepool);
- }
-
- else /* base and old are both non-NULL */
- {
- const svn_string_t *conflict_base_val;
- const char *file_name;
-
- if (! svn_string_compare(base_val, incoming_old_val))
- {
- /* What happens if 'base' and 'old' don't match up? In an
- ideal situation, they would. But if they don't, this is
- a classic example of a patch 'hunk' failing to apply due
- to a lack of context. For example: imagine that the user
- is busy changing the property from a value of "cat" to
- "dog", but the incoming propchange wants to change the
- same property value from "red" to "green". Total context
- mismatch.
-
- HOWEVER: we can still pass one of the two base values as
- 'base_file' to the callback anyway. It's still useful to
- present the working and new values to the user to
- compare. */
-
- if (working_val && svn_string_compare(base_val, working_val))
- conflict_base_val = incoming_old_val;
- else
- conflict_base_val = base_val;
- }
- else
- {
- conflict_base_val = base_val;
- }
-
- SVN_ERR(svn_io_write_unique(&file_name, dirpath, conflict_base_val->data,
- conflict_base_val->len,
- svn_io_file_del_on_pool_cleanup, filepool));
- cdesc->base_abspath = svn_dirent_join(dirpath, file_name, filepool);
-
- if (working_val && incoming_new_val)
- {
- svn_stream_t *mergestream;
- svn_diff_t *diff;
- svn_diff_file_options_t *options =
- svn_diff_file_options_create(filepool);
-
- SVN_ERR(svn_stream_open_unique(&mergestream, &cdesc->merged_file,
- NULL, svn_io_file_del_on_pool_cleanup,
- filepool, scratch_pool));
- SVN_ERR(svn_diff_mem_string_diff3(&diff, conflict_base_val,
- working_val,
- incoming_new_val, options, filepool));
- SVN_ERR(svn_diff_mem_string_output_merge2
- (mergestream, diff, conflict_base_val, working_val,
- incoming_new_val, NULL, NULL, NULL, NULL,
- svn_diff_conflict_display_modified_latest, filepool));
- SVN_ERR(svn_stream_close(mergestream));
- }
- }
-
- /* Build the rest of the description object: */
- cdesc->mime_type = (is_dir ? NULL : svn_prop_get_value(working_props,
- SVN_PROP_MIME_TYPE));
- cdesc->is_binary = (cdesc->mime_type
- && svn_mime_type_is_binary(cdesc->mime_type));
-
- if (!incoming_old_val && incoming_new_val)
- cdesc->action = svn_wc_conflict_action_add;
- else if (incoming_old_val && !incoming_new_val)
- cdesc->action = svn_wc_conflict_action_delete;
- else
- cdesc->action = svn_wc_conflict_action_edit;
-
- if (base_val && !working_val)
- cdesc->reason = svn_wc_conflict_reason_deleted;
- else if (!base_val && working_val)
- cdesc->reason = svn_wc_conflict_reason_obstructed;
- else
- cdesc->reason = svn_wc_conflict_reason_edited;
-
- /* Invoke the interactive conflict callback. */
- {
- SVN_ERR(conflict_func(&result, cdesc, conflict_baton, scratch_pool,
- scratch_pool));
- }
- if (result == NULL)
- {
- *conflict_remains = TRUE;
- return svn_error_create(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE,
- NULL, _("Conflict callback violated API:"
- " returned no results."));
- }
-
- switch (result->choice)
- {
- default:
- case svn_wc_conflict_choose_postpone:
- {
- *conflict_remains = TRUE;
- break;
- }
- case svn_wc_conflict_choose_mine_full:
- {
- /* No need to change working_props; it already contains working_val */
- *conflict_remains = FALSE;
- break;
- }
- /* I think _mine_full and _theirs_full are appropriate for prop
- behavior as well as the text behavior. There should even be
- analogous behaviors for _mine and _theirs when those are
- ready, namely: fold in all non-conflicting prop changes, and
- then choose _mine side or _theirs side for conflicting ones. */
- case svn_wc_conflict_choose_theirs_full:
- {
- apr_hash_set(working_props, propname, APR_HASH_KEY_STRING,
- incoming_new_val);
- *conflict_remains = FALSE;
- break;
- }
- case svn_wc_conflict_choose_base:
- {
- apr_hash_set(working_props, propname, APR_HASH_KEY_STRING, base_val);
- *conflict_remains = FALSE;
- break;
- }
- case svn_wc_conflict_choose_merged:
- {
- if (!cdesc->merged_file && !result->merged_file)
- return svn_error_create
- (SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE,
- NULL, _("Conflict callback violated API:"
- " returned no merged file."));
- else
- {
- svn_stringbuf_t *merged_stringbuf;
- svn_string_t *merged_string;
-
- SVN_ERR(svn_stringbuf_from_file2(&merged_stringbuf,
- result->merged_file ?
- result->merged_file :
- cdesc->merged_file,
- scratch_pool));
- merged_string = svn_stringbuf__morph_into_string(merged_stringbuf);
- apr_hash_set(working_props, propname,
- APR_HASH_KEY_STRING, merged_string);
- *conflict_remains = FALSE;
- }
- break;
- }
- }
-
- /* Delete any tmpfiles we made. */
- svn_pool_destroy(filepool);
-
- return SVN_NO_ERROR;
-}
-
-
-/* Add the property with name PROPNAME to the set of WORKING_PROPS on
- * PATH, setting *STATE or *CONFLICT_REMAINS according to merge outcomes.
- *
- * *STATE is an input and output parameter, its value is to be
- * set using set_merge_prop_state().
- *
- * BASE_VAL contains the working copy base property value
- *
- * NEW_VAL contains the value to be set.
+/* Apply the addition of a property with name PROPNAME and value NEW_VAL to
+ * the existing property with value WORKING_VAL, that originally had value
+ * PRISTINE_VAL.
*
- * CONFLICT_FUNC/BATON is a callback to be called before declaring a
- * property conflict; it gives the client a chance to resolve the
- * conflict interactively.
+ * Sets *RESULT_VAL to the resulting value.
+ * Sets *CONFLICT_REMAINS to TRUE if the change caused a conflict.
+ * Sets *DID_MERGE to true if the result is caused by a merge
*/
static svn_error_t *
-apply_single_prop_add(svn_wc_notify_state_t *state,
+apply_single_prop_add(const svn_string_t **result_val,
svn_boolean_t *conflict_remains,
- svn_wc__db_t *db,
- const char *local_abspath,
- const svn_wc_conflict_version_t *left_version,
- const svn_wc_conflict_version_t *right_version,
- svn_boolean_t is_dir,
- apr_hash_t *working_props,
+ svn_boolean_t *did_merge,
const char *propname,
- const svn_string_t *base_val,
+ const svn_string_t *pristine_val,
const svn_string_t *new_val,
- svn_wc_conflict_resolver_func2_t conflict_func,
- void *conflict_baton,
- svn_boolean_t dry_run,
+ const svn_string_t *working_val,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- svn_string_t *working_val
- = apr_hash_get(working_props, propname, APR_HASH_KEY_STRING);
-
*conflict_remains = FALSE;
if (working_val)
{
- /* the property already exists in working_props... */
+ /* the property already exists in actual_props... */
if (svn_string_compare(working_val, new_val))
/* The value we want is already there, so it's a merge. */
- set_prop_merge_state(state, svn_wc_notify_state_merged);
+ *did_merge = TRUE;
else
{
@@ -1100,83 +822,40 @@ apply_single_prop_add(svn_wc_notify_state_t *state,
else
{
merged_prop = TRUE;
- apr_hash_set(working_props, propname,
- APR_HASH_KEY_STRING, merged_val);
- set_prop_merge_state(state, svn_wc_notify_state_merged);
+ *result_val = merged_val;
+ *did_merge = TRUE;
}
}
if (!merged_prop)
- {
- SVN_ERR(maybe_generate_propconflict(conflict_remains,
- db, local_abspath,
- left_version, right_version,
- is_dir,
- propname, working_props,
- NULL, new_val,
- base_val, working_val,
- conflict_func,
- conflict_baton,
- dry_run, scratch_pool));
- }
+ *conflict_remains = TRUE;
}
}
- else if (base_val)
- {
- SVN_ERR(maybe_generate_propconflict(conflict_remains,
- db, local_abspath,
- left_version, right_version,
- is_dir, propname,
- working_props, NULL, new_val,
- base_val, NULL,
- conflict_func, conflict_baton,
- dry_run, scratch_pool));
- }
- else /* property doesn't yet exist in working_props... */
+ else if (pristine_val)
+ *conflict_remains = TRUE;
+ else /* property doesn't yet exist in actual_props... */
/* so just set it */
- apr_hash_set(working_props, propname, APR_HASH_KEY_STRING, new_val);
+ *result_val = new_val;
return SVN_NO_ERROR;
}
-/* Delete the property with name PROPNAME from the set of
- * WORKING_PROPS on PATH, setting *STATE or *CONFLICT_REMAINS according to
- * merge outcomes.
- *
- * *STATE is an input and output parameter, its value is to be
- * set using set_merge_prop_state().
- *
- * BASE_VAL contains the working copy base property value
+/* Apply the deletion of a property to the existing
+ * property with value WORKING_VAL, that originally had value PRISTINE_VAL.
*
- * OLD_VAL contains the value the of the property the server
- * thinks it's deleting.
- *
- * CONFLICT_FUNC/BATON is a callback to be called before declaring a
- * property conflict; it gives the client a chance to resolve the
- * conflict interactively.
+ * Sets *RESULT_VAL to the resulting value.
+ * Sets *CONFLICT_REMAINS to TRUE if the change caused a conflict.
+ * Sets *DID_MERGE to true if the result is caused by a merge
*/
static svn_error_t *
-apply_single_prop_delete(svn_wc_notify_state_t *state,
+apply_single_prop_delete(const svn_string_t **result_val,
svn_boolean_t *conflict_remains,
- svn_wc__db_t *db,
- const char *local_abspath,
- const svn_wc_conflict_version_t *left_version,
- const svn_wc_conflict_version_t *right_version,
- svn_boolean_t is_dir,
- apr_hash_t *working_props,
- const char *propname,
+ svn_boolean_t *did_merge,
const svn_string_t *base_val,
const svn_string_t *old_val,
- svn_wc_conflict_resolver_func2_t conflict_func,
- void *conflict_baton,
- svn_boolean_t dry_run,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+ const svn_string_t *working_val)
{
- svn_string_t *working_val
- = apr_hash_get(working_props, propname, APR_HASH_KEY_STRING);
-
*conflict_remains = FALSE;
if (! base_val)
@@ -1185,22 +864,15 @@ apply_single_prop_delete(svn_wc_notify_state_t *state,
&& !svn_string_compare(working_val, old_val))
{
/* We are trying to delete a locally-added prop. */
- SVN_ERR(maybe_generate_propconflict(conflict_remains,
- db, local_abspath,
- left_version, right_version,
- is_dir, propname,
- working_props, old_val, NULL,
- base_val, working_val,
- conflict_func, conflict_baton,
- dry_run, scratch_pool));
+ *conflict_remains = TRUE;
}
else
{
- apr_hash_set(working_props, propname, APR_HASH_KEY_STRING, NULL);
+ *result_val = NULL;
if (old_val)
/* This is a merge, merging a delete into non-existent
property or a local addition of same prop value. */
- set_prop_merge_state(state, svn_wc_notify_state_merged);
+ *did_merge = TRUE;
}
}
@@ -1210,72 +882,41 @@ apply_single_prop_delete(svn_wc_notify_state_t *state,
{
if (svn_string_compare(working_val, old_val))
/* they have the same values, so it's an update */
- apr_hash_set(working_props, propname, APR_HASH_KEY_STRING, NULL);
+ *result_val = NULL;
else
- {
- SVN_ERR(maybe_generate_propconflict(conflict_remains,
- db, local_abspath,
- left_version, right_version,
- is_dir,
- propname, working_props,
- old_val, NULL,
- base_val, working_val,
- conflict_func,
- conflict_baton,
- dry_run, scratch_pool));
- }
+ *conflict_remains = TRUE;
}
else
/* The property is locally deleted from the same value, so it's
a merge */
- set_prop_merge_state(state, svn_wc_notify_state_merged);
+ *did_merge = TRUE;
}
else
- {
- SVN_ERR(maybe_generate_propconflict(conflict_remains,
- db, local_abspath,
- left_version, right_version,
- is_dir, propname,
- working_props, old_val, NULL,
- base_val, working_val,
- conflict_func, conflict_baton,
- dry_run, scratch_pool));
- }
+ *conflict_remains = TRUE;
return SVN_NO_ERROR;
}
-/* Merge a change to the mergeinfo property. The same as
- apply_single_prop_change(), except that the PROPNAME is always
+/* Merge a change to the mergeinfo property. Similar to
+ apply_single_prop_change(), except that the property name is always
SVN_PROP_MERGEINFO. */
/* ### This function is extracted straight from the previous all-in-one
version of apply_single_prop_change() by removing the code paths that
were not followed for this property, but with no attempt to rationalize
the remainder. */
static svn_error_t *
-apply_single_mergeinfo_prop_change(svn_wc_notify_state_t *state,
+apply_single_mergeinfo_prop_change(const svn_string_t **result_val,
svn_boolean_t *conflict_remains,
- svn_wc__db_t *db,
- const char *local_abspath,
- const svn_wc_conflict_version_t *left_version,
- const svn_wc_conflict_version_t *right_version,
- svn_boolean_t is_dir,
- apr_hash_t *working_props,
- const char *propname,
+ svn_boolean_t *did_merge,
const svn_string_t *base_val,
const svn_string_t *old_val,
const svn_string_t *new_val,
- svn_wc_conflict_resolver_func2_t conflict_func,
- void *conflict_baton,
- svn_boolean_t dry_run,
+ const svn_string_t *working_val,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- svn_string_t *working_val
- = apr_hash_get(working_props, propname, APR_HASH_KEY_STRING);
-
if ((working_val && ! base_val)
|| (! working_val && base_val)
|| (working_val && base_val
@@ -1286,72 +927,62 @@ apply_single_mergeinfo_prop_change(svn_wc_notify_state_t *state,
{
if (svn_string_compare(working_val, new_val))
/* The new value equals the changed value: a no-op merge */
- set_prop_merge_state(state, svn_wc_notify_state_merged);
+ *did_merge = TRUE;
else
{
- /* We have base, WC, and new values. Discover
- deltas between base <-> WC, and base <->
- incoming. Combine those deltas, and apply
- them to base to get the new value. */
- SVN_ERR(combine_forked_mergeinfo_props(&new_val, old_val,
- working_val,
- new_val,
- result_pool));
- apr_hash_set(working_props, propname,
- APR_HASH_KEY_STRING, new_val);
- set_prop_merge_state(state, svn_wc_notify_state_merged);
+ /* We have base, WC, and new values. Discover
+ deltas between base <-> WC, and base <->
+ incoming. Combine those deltas, and apply
+ them to base to get the new value. */
+ SVN_ERR(combine_forked_mergeinfo_props(&new_val, old_val,
+ working_val,
+ new_val,
+ result_pool,
+ scratch_pool));
+ *result_val = new_val;
+ *did_merge = TRUE;
}
}
-
else
{
/* There is a base_val but no working_val */
- SVN_ERR(maybe_generate_propconflict(conflict_remains,
- db, local_abspath,
- left_version, right_version,
- is_dir, propname, working_props,
- old_val, new_val,
- base_val, working_val,
- conflict_func, conflict_baton,
- dry_run, scratch_pool));
+ *conflict_remains = TRUE;
}
}
else if (! working_val) /* means !working_val && !base_val due
to conditions above: no prop at all */
{
- /* Discover any mergeinfo additions in the
- incoming value relative to the base, and
- "combine" those with the empty WC value. */
- svn_mergeinfo_t deleted_mergeinfo, added_mergeinfo;
- svn_string_t *mergeinfo_string;
-
- SVN_ERR(diff_mergeinfo_props(&deleted_mergeinfo,
- &added_mergeinfo,
- old_val, new_val, scratch_pool));
- SVN_ERR(svn_mergeinfo_to_string(&mergeinfo_string,
- added_mergeinfo, result_pool));
- apr_hash_set(working_props, propname, APR_HASH_KEY_STRING,
- mergeinfo_string);
+ /* Discover any mergeinfo additions in the
+ incoming value relative to the base, and
+ "combine" those with the empty WC value. */
+ svn_mergeinfo_t deleted_mergeinfo, added_mergeinfo;
+ svn_string_t *mergeinfo_string;
+
+ SVN_ERR(diff_mergeinfo_props(&deleted_mergeinfo,
+ &added_mergeinfo,
+ old_val, new_val, scratch_pool));
+ SVN_ERR(svn_mergeinfo_to_string(&mergeinfo_string,
+ added_mergeinfo, result_pool));
+ *result_val = mergeinfo_string;
}
else /* means working && base && svn_string_compare(working, base) */
{
if (svn_string_compare(old_val, base_val))
- apr_hash_set(working_props, propname, APR_HASH_KEY_STRING, new_val);
-
+ *result_val = new_val;
else
{
- /* We have base, WC, and new values. Discover
- deltas between base <-> WC, and base <->
- incoming. Combine those deltas, and apply
- them to base to get the new value. */
- SVN_ERR(combine_forked_mergeinfo_props(&new_val, old_val,
- working_val,
- new_val, result_pool));
- apr_hash_set(working_props, propname,
- APR_HASH_KEY_STRING, new_val);
- set_prop_merge_state(state, svn_wc_notify_state_merged);
+ /* We have base, WC, and new values. Discover
+ deltas between base <-> WC, and base <->
+ incoming. Combine those deltas, and apply
+ them to base to get the new value. */
+ SVN_ERR(combine_forked_mergeinfo_props(&new_val, old_val,
+ working_val,
+ new_val, result_pool,
+ scratch_pool));
+ *result_val = new_val;
+ *did_merge = TRUE;
}
}
@@ -1365,27 +996,13 @@ apply_single_mergeinfo_prop_change(svn_wc_notify_state_t *state,
The definition of the arguments and behaviour is the same as
apply_single_prop_change(). */
static svn_error_t *
-apply_single_generic_prop_change(svn_wc_notify_state_t *state,
+apply_single_generic_prop_change(const svn_string_t **result_val,
svn_boolean_t *conflict_remains,
- svn_wc__db_t *db,
- const char *local_abspath,
- const svn_wc_conflict_version_t *left_version,
- const svn_wc_conflict_version_t *right_version,
- svn_boolean_t is_dir,
- apr_hash_t *working_props,
- const char *propname,
- const svn_string_t *base_val,
+ svn_boolean_t *did_merge,
const svn_string_t *old_val,
const svn_string_t *new_val,
- svn_wc_conflict_resolver_func2_t conflict_func,
- void *conflict_baton,
- svn_boolean_t dry_run,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+ const svn_string_t *working_val)
{
- svn_string_t *working_val
- = apr_hash_get(working_props, propname, APR_HASH_KEY_STRING);
-
SVN_ERR_ASSERT(old_val != NULL);
/* If working_val is the same as new_val already then there is
@@ -1395,36 +1012,26 @@ apply_single_generic_prop_change(svn_wc_notify_state_t *state,
{
/* All values identical is a trivial, non-notifiable merge */
if (! old_val || ! svn_string_compare(old_val, new_val))
- set_prop_merge_state(state, svn_wc_notify_state_merged);
+ *did_merge = TRUE;
}
/* If working_val is the same as old_val... */
else if (working_val && old_val
&& svn_string_compare(working_val, old_val))
{
/* A trivial update: change it to new_val. */
- apr_hash_set(working_props, propname, APR_HASH_KEY_STRING, new_val);
+ *result_val = new_val;
}
else
{
/* Merge the change. */
- SVN_ERR(maybe_generate_propconflict(conflict_remains,
- db, local_abspath,
- left_version, right_version,
- is_dir, propname, working_props,
- old_val, new_val,
- base_val, working_val,
- conflict_func, conflict_baton,
- dry_run, scratch_pool));
+ *conflict_remains = TRUE;
}
return SVN_NO_ERROR;
}
-/* Change the property with name PROPNAME in the set of WORKING_PROPS
- * on PATH, setting *STATE or *CONFLICT_REMAINS according to the merge outcome.
- *
- * *STATE is an input and output parameter, its value is to be
- * set using set_prop_merge_state(). (May be null.).
+/* Change the property with name PROPNAME, setting *RESULT_VAL,
+ * *CONFLICT_REMAINS and *DID_MERGE according to the merge outcome.
*
* BASE_VAL contains the working copy base property value. (May be null.)
*
@@ -1433,26 +1040,17 @@ apply_single_generic_prop_change(svn_wc_notify_state_t *state,
*
* NEW_VAL contains the value to be set. (Not null.)
*
- * CONFLICT_FUNC/BATON is a callback to be called before declaring a
- * property conflict; it gives the client a chance to resolve the
- * conflict interactively.
+ * WORKING_VAL contains the working copy actual value. (May be null.)
*/
static svn_error_t *
-apply_single_prop_change(svn_wc_notify_state_t *state,
+apply_single_prop_change(const svn_string_t **result_val,
svn_boolean_t *conflict_remains,
- svn_wc__db_t *db,
- const char *local_abspath,
- const svn_wc_conflict_version_t *left_version,
- const svn_wc_conflict_version_t *right_version,
- svn_boolean_t is_dir,
- apr_hash_t *working_props,
+ svn_boolean_t *did_merge,
const char *propname,
const svn_string_t *base_val,
const svn_string_t *old_val,
const svn_string_t *new_val,
- svn_wc_conflict_resolver_func2_t conflict_func,
- void *conflict_baton,
- svn_boolean_t dry_run,
+ const svn_string_t *working_val,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
@@ -1475,20 +1073,13 @@ apply_single_prop_change(svn_wc_notify_state_t *state,
gracefully' might thwart us. If bogus mergeinfo is present we
can't merge intelligently, so let the standard method deal with
it instead. */
- svn_error_t *err = apply_single_mergeinfo_prop_change(state,
+ svn_error_t *err = apply_single_mergeinfo_prop_change(result_val,
conflict_remains,
- db, local_abspath,
- left_version,
- right_version,
- is_dir,
- working_props,
- propname,
+ did_merge,
base_val,
old_val,
new_val,
- conflict_func,
- conflict_baton,
- dry_run,
+ working_val,
result_pool,
scratch_pool);
if (err)
@@ -1509,16 +1100,9 @@ apply_single_prop_change(svn_wc_notify_state_t *state,
/* The standard method: perform a simple update automatically, but
pass any other kind of merge to maybe_generate_propconflict(). */
- SVN_ERR(apply_single_generic_prop_change(state, conflict_remains,
- db, local_abspath,
- left_version, right_version,
- is_dir,
- working_props,
- propname, base_val, old_val,
- new_val,
- conflict_func, conflict_baton,
- dry_run,
- result_pool, scratch_pool));
+ SVN_ERR(apply_single_generic_prop_change(result_val, conflict_remains,
+ did_merge,
+ old_val, new_val, working_val));
}
return SVN_NO_ERROR;
@@ -1526,46 +1110,33 @@ apply_single_prop_change(svn_wc_notify_state_t *state,
svn_error_t *
-svn_wc__merge_props(svn_skel_t **work_items,
+svn_wc__merge_props(svn_skel_t **conflict_skel,
svn_wc_notify_state_t *state,
- apr_hash_t **new_pristine_props,
apr_hash_t **new_actual_props,
svn_wc__db_t *db,
const char *local_abspath,
- svn_wc__db_kind_t kind,
- const svn_wc_conflict_version_t *left_version,
- const svn_wc_conflict_version_t *right_version,
apr_hash_t *server_baseprops,
apr_hash_t *pristine_props,
apr_hash_t *actual_props,
const apr_array_header_t *propchanges,
- svn_boolean_t base_merge,
- svn_boolean_t dry_run,
- svn_wc_conflict_resolver_func2_t conflict_func,
- void *conflict_baton,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
apr_pool_t *iterpool;
int i;
- svn_boolean_t is_dir;
- svn_skel_t *conflict_skel = NULL;
+ apr_hash_t *conflict_props = NULL;
+ apr_hash_t *their_props;
SVN_ERR_ASSERT(pristine_props != NULL);
SVN_ERR_ASSERT(actual_props != NULL);
- *work_items = NULL;
-
- *new_pristine_props = NULL;
- *new_actual_props = NULL;
-
- is_dir = (kind == svn_wc__db_kind_dir);
+ *new_actual_props = apr_hash_copy(result_pool, actual_props);
if (!server_baseprops)
server_baseprops = pristine_props;
+ their_props = apr_hash_copy(scratch_pool, server_baseprops);
+
if (state)
{
/* Start out assuming no changes or conflicts. Don't bother to
@@ -1579,67 +1150,56 @@ svn_wc__merge_props(svn_skel_t **work_items,
iterpool = svn_pool_create(scratch_pool);
for (i = 0; i < propchanges->nelts; i++)
{
- const char *propname;
+ const svn_prop_t *incoming_change
+ = &APR_ARRAY_IDX(propchanges, i, svn_prop_t);
+ const char *propname = incoming_change->name;
+ const svn_string_t *base_val /* Pristine in WC */
+ = svn_hash_gets(pristine_props, propname);
+ const svn_string_t *from_val /* Merge left */
+ = svn_hash_gets(server_baseprops, propname);
+ const svn_string_t *to_val /* Merge right */
+ = incoming_change->value;
+ const svn_string_t *working_val /* Mine */
+ = svn_hash_gets(actual_props, propname);
+ const svn_string_t *result_val;
svn_boolean_t conflict_remains;
- const svn_prop_t *incoming_change;
- const svn_string_t *from_val, *to_val, *base_val;
- const svn_string_t *mine_val;
+ svn_boolean_t did_merge = FALSE;
svn_pool_clear(iterpool);
- /* Should we stop the prop merging process? */
- if (cancel_func)
- SVN_ERR(cancel_func(cancel_baton));
-
- /* For the incoming propchange, figure out the TO and FROM values. */
- incoming_change = &APR_ARRAY_IDX(propchanges, i, svn_prop_t);
- propname = incoming_change->name;
- to_val = incoming_change->value
- ? svn_string_dup(incoming_change->value, result_pool) : NULL;
- from_val = apr_hash_get(server_baseprops, propname, APR_HASH_KEY_STRING);
-
- base_val = apr_hash_get(pristine_props, propname, APR_HASH_KEY_STRING);
+ to_val = to_val ? svn_string_dup(to_val, result_pool) : NULL;
- if (base_merge)
- apr_hash_set(pristine_props, propname, APR_HASH_KEY_STRING, to_val);
+ svn_hash_sets(their_props, propname, to_val);
- /* Save MINE for later message generation. */
- mine_val = apr_hash_get(actual_props, propname, APR_HASH_KEY_STRING);
/* We already know that state is at least `changed', so mark
that, but remember that we may later upgrade to `merged' or
even `conflicted'. */
set_prop_merge_state(state, svn_wc_notify_state_changed);
+ result_val = working_val;
+
if (! from_val) /* adding a new property */
- SVN_ERR(apply_single_prop_add(state, &conflict_remains,
- db, local_abspath,
- left_version, right_version,
- is_dir, actual_props,
- propname, base_val, to_val,
- conflict_func, conflict_baton,
- dry_run, result_pool, iterpool));
+ SVN_ERR(apply_single_prop_add(&result_val, &conflict_remains,
+ &did_merge, propname,
+ base_val, to_val, working_val,
+ result_pool, iterpool));
else if (! to_val) /* delete an existing property */
- SVN_ERR(apply_single_prop_delete(state, &conflict_remains,
- db, local_abspath,
- left_version, right_version,
- is_dir,
- actual_props,
- propname, base_val, from_val,
- conflict_func, conflict_baton,
- dry_run, result_pool, iterpool));
+ SVN_ERR(apply_single_prop_delete(&result_val, &conflict_remains,
+ &did_merge,
+ base_val, from_val, working_val));
else /* changing an existing property */
- SVN_ERR(apply_single_prop_change(state, &conflict_remains,
- db, local_abspath,
- left_version, right_version,
- is_dir,
- actual_props,
- propname, base_val, from_val, to_val,
- conflict_func, conflict_baton,
- dry_run, result_pool, iterpool));
-
+ SVN_ERR(apply_single_prop_change(&result_val, &conflict_remains,
+ &did_merge, propname,
+ base_val, from_val, to_val, working_val,
+ result_pool, iterpool));
+
+ if (result_val != working_val)
+ svn_hash_sets(*new_actual_props, propname, result_val);
+ if (did_merge)
+ set_prop_merge_state(state, svn_wc_notify_state_merged);
/* merging logic complete, now we need to possibly log conflict
data to tmpfiles. */
@@ -1648,20 +1208,10 @@ svn_wc__merge_props(svn_skel_t **work_items,
{
set_prop_merge_state(state, svn_wc_notify_state_conflicted);
- if (dry_run)
- continue; /* skip to next incoming change */
-
- if (conflict_skel == NULL)
- conflict_skel = svn_wc__conflict_skel_new(result_pool);
+ if (!conflict_props)
+ conflict_props = apr_hash_make(scratch_pool);
- SVN_ERR(svn_wc__conflict_skel_add_prop_conflict(conflict_skel,
- propname,
- base_val,
- mine_val,
- to_val,
- from_val,
- result_pool,
- iterpool));
+ svn_hash_sets(conflict_props, propname, "");
}
} /* foreach propchange ... */
@@ -1669,69 +1219,23 @@ svn_wc__merge_props(svn_skel_t **work_items,
/* Finished applying all incoming propchanges to our hashes! */
- if (dry_run)
- return SVN_NO_ERROR;
-
- *new_pristine_props = pristine_props;
- *new_actual_props = actual_props;
-
- if (conflict_skel != NULL)
+ if (conflict_props != NULL)
{
- const char *reject_path;
-
- /* Now try to get the name of a pre-existing .prej file from the
- entries file */
- SVN_ERR(svn_wc__get_prejfile_abspath(&reject_path, db, local_abspath,
- scratch_pool, scratch_pool));
-
- if (! reject_path)
- {
- /* Reserve a new .prej file *above* the .svn/ directory by
- opening and closing it. */
- const char *reject_dirpath;
- const char *reject_filename;
- svn_skel_t *work_item;
-
- if (is_dir)
- {
- reject_dirpath = local_abspath;
- reject_filename = SVN_WC__THIS_DIR_PREJ;
- }
- else
- svn_dirent_split(&reject_dirpath, &reject_filename, local_abspath,
- scratch_pool);
-
- SVN_ERR(svn_io_open_uniquely_named(NULL, &reject_path,
- reject_dirpath,
- reject_filename,
- SVN_WC__PROP_REJ_EXT,
- svn_io_file_del_none,
- scratch_pool, scratch_pool));
-
- /* This file will be overwritten when the wq is run; that's
- ok, because at least now we have a reservation on
- disk. */
-
- /* Mark entry as "conflicted" with a particular .prej file. */
- SVN_ERR(svn_wc__wq_tmp_build_set_property_conflict_marker(
- &work_item,
- db, local_abspath, reject_path,
- result_pool, scratch_pool));
-
- *work_items = svn_wc__wq_merge(*work_items, work_item, result_pool);
- }
-
- /* Once the prejfile is recorded, then install the file. */
- {
- svn_skel_t *work_item;
+ /* Ok, we got some conflict. Lets store all the property knowledge we
+ have for resolving later */
- SVN_ERR(svn_wc__wq_build_prej_install(&work_item,
- db, local_abspath,
- conflict_skel,
- result_pool, scratch_pool));
+ if (!*conflict_skel)
+ *conflict_skel = svn_wc__conflict_skel_create(result_pool);
- *work_items = svn_wc__wq_merge(*work_items, work_item, result_pool);
- }
+ SVN_ERR(svn_wc__conflict_skel_add_prop_conflict(*conflict_skel,
+ db, local_abspath,
+ NULL /* reject_path */,
+ actual_props,
+ server_baseprops,
+ their_props,
+ conflict_props,
+ result_pool,
+ scratch_pool));
}
return SVN_NO_ERROR;
@@ -1763,7 +1267,7 @@ wcprop_set(svn_wc__db_t *db,
if (prophash == NULL)
prophash = apr_hash_make(scratch_pool);
- apr_hash_set(prophash, name, APR_HASH_KEY_STRING, value);
+ svn_hash_sets(prophash, name, value);
return svn_error_trace(svn_wc__db_base_set_dav_cache(db, local_abspath,
prophash,
scratch_pool));
@@ -1815,13 +1319,12 @@ propname_filter_receiver(void *baton,
apr_pool_t *scratch_pool)
{
struct propname_filter_baton_t *pfb = baton;
- const svn_string_t *propval = apr_hash_get(props, pfb->propname,
- APR_HASH_KEY_STRING);
+ const svn_string_t *propval = svn_hash_gets(props, pfb->propname);
if (propval)
{
props = apr_hash_make(scratch_pool);
- apr_hash_set(props, pfb->propname, APR_HASH_KEY_STRING, propval);
+ svn_hash_sets(props, pfb->propname, propval);
SVN_ERR(pfb->receiver_func(pfb->receiver_baton, local_abspath, props,
scratch_pool));
@@ -1835,7 +1338,6 @@ svn_wc__prop_list_recursive(svn_wc_context_t *wc_ctx,
const char *local_abspath,
const char *propname,
svn_depth_t depth,
- svn_boolean_t base_props,
svn_boolean_t pristine,
const apr_array_header_t *changelists,
svn_wc__proplist_receiver_t receiver_func,
@@ -1847,6 +1349,7 @@ svn_wc__prop_list_recursive(svn_wc_context_t *wc_ctx,
svn_wc__proplist_receiver_t receiver = receiver_func;
void *baton = receiver_baton;
struct propname_filter_baton_t pfb;
+
pfb.receiver_func = receiver_func;
pfb.receiver_baton = receiver_baton;
pfb.propname = propname;
@@ -1891,7 +1394,7 @@ svn_wc__prop_list_recursive(svn_wc_context_t *wc_ctx,
case svn_depth_infinity:
{
SVN_ERR(svn_wc__db_read_props_streamily(wc_ctx->db, local_abspath,
- depth, base_props, pristine,
+ depth, pristine,
changelists, receiver, baton,
cancel_func, cancel_baton,
scratch_pool));
@@ -1905,13 +1408,29 @@ svn_wc__prop_list_recursive(svn_wc_context_t *wc_ctx,
}
svn_error_t *
-svn_wc__get_pristine_props(apr_hash_t **props,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+svn_wc__prop_retrieve_recursive(apr_hash_t **values,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ const char *propname,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- svn_wc__db_status_t status;
+ return svn_error_trace(
+ svn_wc__db_prop_retrieve_recursive(values,
+ wc_ctx->db,
+ local_abspath,
+ propname,
+ result_pool, scratch_pool));
+}
+
+svn_error_t *
+svn_wc_get_pristine_props(apr_hash_t **props,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_error_t *err;
SVN_ERR_ASSERT(props != NULL);
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
@@ -1919,60 +1438,23 @@ svn_wc__get_pristine_props(apr_hash_t **props,
/* Certain node stats do not have properties defined on them. Check the
state, and return NULL for these situations. */
- SVN_ERR(svn_wc__db_read_info(&status, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- db, local_abspath,
- scratch_pool, scratch_pool));
- if (status == svn_wc__db_status_added)
- {
- /* Resolve the status. copied and moved_here arrive with properties,
- while a simple add does not. */
- SVN_ERR(svn_wc__db_scan_addition(&status, NULL,
- NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- db, local_abspath,
- scratch_pool, scratch_pool));
- }
- if (status == svn_wc__db_status_added
-#if 0
- /* ### the update editor needs to fetch properties while the directory
- ### is still marked incomplete */
- || status == svn_wc__db_status_incomplete
-#endif
- || status == svn_wc__db_status_excluded
- || status == svn_wc__db_status_server_excluded
- || status == svn_wc__db_status_not_present)
- {
- *props = NULL;
- return SVN_NO_ERROR;
- }
+ err = svn_wc__db_read_pristine_props(props, wc_ctx->db, local_abspath,
+ result_pool, scratch_pool);
- /* status: normal, moved_here, copied, deleted */
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_WC_PATH_UNEXPECTED_STATUS)
+ return svn_error_trace(err);
- /* After the above checks, these pristines should always be present. */
- return svn_error_trace(
- svn_wc__db_read_pristine_props(props, db, local_abspath,
- result_pool, scratch_pool));
-}
+ svn_error_clear(err);
+ /* Documented behavior is to set *PROPS to NULL */
+ *props = NULL;
+ }
-svn_error_t *
-svn_wc_get_pristine_props(apr_hash_t **props,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- return svn_error_trace(svn_wc__get_pristine_props(props,
- wc_ctx->db,
- local_abspath,
- result_pool,
- scratch_pool));
+ return SVN_NO_ERROR;
}
-
svn_error_t *
svn_wc_prop_get2(const svn_string_t **value,
svn_wc_context_t *wc_ctx,
@@ -1981,7 +1463,8 @@ svn_wc_prop_get2(const svn_string_t **value,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- enum svn_prop_kind kind = svn_property_kind(NULL, name);
+ enum svn_prop_kind kind = svn_property_kind2(name);
+ svn_error_t *err;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
@@ -1992,8 +1475,18 @@ svn_wc_prop_get2(const svn_string_t **value,
_("Property '%s' is an entry property"), name);
}
- SVN_ERR(svn_wc__internal_propget(value, wc_ctx->db, local_abspath, name,
- result_pool, scratch_pool));
+ err = svn_wc__internal_propget(value, wc_ctx->db, local_abspath, name,
+ result_pool, scratch_pool);
+
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_WC_PATH_UNEXPECTED_STATUS)
+ return svn_error_trace(err);
+
+ svn_error_clear(err);
+ /* Documented behavior is to set *VALUE to NULL */
+ *value = NULL;
+ }
return SVN_NO_ERROR;
}
@@ -2007,36 +1500,16 @@ svn_wc__internal_propget(const svn_string_t **value,
apr_pool_t *scratch_pool)
{
apr_hash_t *prophash = NULL;
- enum svn_prop_kind kind = svn_property_kind(NULL, name);
- svn_boolean_t hidden;
+ enum svn_prop_kind kind = svn_property_kind2(name);
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
SVN_ERR_ASSERT(kind != svn_prop_entry_kind);
- /* This returns SVN_ERR_WC_PATH_NOT_FOUND for unversioned paths for us */
- SVN_ERR(svn_wc__db_node_hidden(&hidden, db, local_abspath, scratch_pool));
- if (hidden)
- {
- /* The node is not present, or not really "here". Therefore, the
- property is not present. */
- *value = NULL;
- return SVN_NO_ERROR;
- }
-
if (kind == svn_prop_wc_kind)
{
- svn_error_t *err;
- /* If no dav cache can be found, just set VALUE to NULL (for
- compatibility with pre-WC-NG code). */
- err = svn_wc__db_base_get_dav_cache(&prophash, db, local_abspath,
- result_pool, scratch_pool);
- if (err && (err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND))
- {
- *value = NULL;
- svn_error_clear(err);
- return SVN_NO_ERROR;
- }
- SVN_ERR_W(err, _("Failed to load properties"));
+ SVN_ERR_W(svn_wc__db_base_get_dav_cache(&prophash, db, local_abspath,
+ result_pool, scratch_pool),
+ _("Failed to load properties"));
}
else
{
@@ -2047,7 +1520,7 @@ svn_wc__internal_propget(const svn_string_t **value,
}
if (prophash)
- *value = apr_hash_get(prophash, name, APR_HASH_KEY_STRING);
+ *value = svn_hash_gets(prophash, name);
else
*value = NULL;
@@ -2057,45 +1530,38 @@ svn_wc__internal_propget(const svn_string_t **value,
/* The special Subversion properties are not valid for all node kinds.
Return an error if NAME is an invalid Subversion property for PATH which
- is of kind NODE_KIND. */
+ is of kind NODE_KIND. NAME must be in the "svn:" name space.
+
+ Note that we only disallow the property if we're sure it's one that
+ already has a meaning for a different node kind. We don't disallow
+ setting an *unknown* svn: prop here, at this level; a higher level
+ should disallow that if desired.
+ */
static svn_error_t *
validate_prop_against_node_kind(const char *name,
const char *path,
svn_node_kind_t node_kind,
apr_pool_t *pool)
{
-
- const char *file_prohibit[] = { SVN_PROP_IGNORE,
- SVN_PROP_EXTERNALS,
- NULL };
- const char *dir_prohibit[] = { SVN_PROP_EXECUTABLE,
- SVN_PROP_KEYWORDS,
- SVN_PROP_EOL_STYLE,
- SVN_PROP_MIME_TYPE,
- SVN_PROP_NEEDS_LOCK,
- NULL };
- const char **node_kind_prohibit;
const char *path_display
= svn_path_is_url(path) ? path : svn_dirent_local_style(path, pool);
switch (node_kind)
{
case svn_node_dir:
- node_kind_prohibit = dir_prohibit;
- while (*node_kind_prohibit)
- if (strcmp(name, *node_kind_prohibit++) == 0)
- return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
- _("Cannot set '%s' on a directory ('%s')"),
- name, path_display);
+ if (! svn_prop_is_known_svn_dir_prop(name)
+ && svn_prop_is_known_svn_file_prop(name))
+ return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("Cannot set '%s' on a directory ('%s')"),
+ name, path_display);
break;
case svn_node_file:
- node_kind_prohibit = file_prohibit;
- while (*node_kind_prohibit)
- if (strcmp(name, *node_kind_prohibit++) == 0)
- return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
- _("Cannot set '%s' on a file ('%s')"),
- name,
- path_display);
+ if (! svn_prop_is_known_svn_file_prop(name)
+ && svn_prop_is_known_svn_dir_prop(name))
+ return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("Cannot set '%s' on a file ('%s')"),
+ name,
+ path_display);
break;
default:
return svn_error_createf(SVN_ERR_NODE_UNEXPECTED_KIND, NULL,
@@ -2108,12 +1574,15 @@ validate_prop_against_node_kind(const char *name,
struct getter_baton {
+ const svn_string_t *mime_type;
const char *local_abspath;
- svn_wc__db_t *db;
};
-/* */
+/* Provide the MIME_TYPE and/or push the content to STREAM for the file
+ * referenced by (getter_baton *) BATON.
+ *
+ * Implements svn_wc_canonicalize_svn_prop_get_file_t. */
static svn_error_t *
get_file_for_validation(const svn_string_t **mime_type,
svn_stream_t *stream,
@@ -2123,18 +1592,15 @@ get_file_for_validation(const svn_string_t **mime_type,
struct getter_baton *gb = baton;
if (mime_type)
- SVN_ERR(svn_wc__internal_propget(mime_type, gb->db, gb->local_abspath,
- SVN_PROP_MIME_TYPE, pool, pool));
+ *mime_type = gb->mime_type;
if (stream)
{
svn_stream_t *read_stream;
- /* Open PATH. */
+ /* Copy the text of GB->LOCAL_ABSPATH into STREAM. */
SVN_ERR(svn_stream_open_readonly(&read_stream, gb->local_abspath,
pool, pool));
-
- /* Copy from the file into the translating stream. */
SVN_ERR(svn_stream_copy3(read_stream, svn_stream_disown(stream, pool),
NULL, NULL, pool));
}
@@ -2143,7 +1609,16 @@ get_file_for_validation(const svn_string_t **mime_type,
}
-/* */
+/* Validate that a file has a 'non-binary' MIME type and contains
+ * self-consistent line endings. If not, then return an error.
+ *
+ * Call GETTER (which must not be NULL) with GETTER_BATON to get the
+ * file's MIME type and/or content. If the MIME type is non-null and
+ * is categorized as 'binary' then return an error and do not request
+ * the file content.
+ *
+ * Use PATH (a local path or a URL) only for error messages.
+ */
static svn_error_t *
validate_eol_prop_against_file(const char *path,
svn_wc_canonicalize_svn_prop_get_file_t getter,
@@ -2163,8 +1638,9 @@ validate_eol_prop_against_file(const char *path,
if (mime_type && svn_mime_type_is_binary(mime_type->data))
return svn_error_createf
(SVN_ERR_ILLEGAL_TARGET, NULL,
- _("File '%s' has binary mime type property"),
- path_display);
+ _("Can't set '%s': "
+ "file '%s' has binary mime type property"),
+ SVN_PROP_EOL_STYLE, path_display);
/* Now ask the getter for the contents of the file; this will do a
newline translation. All we really care about here is whether or
@@ -2177,17 +1653,14 @@ validate_eol_prop_against_file(const char *path,
err = getter(NULL, translating_stream, getter_baton, pool);
- if (!err)
- err = svn_stream_close(translating_stream);
+ err = svn_error_compose_create(err, svn_stream_close(translating_stream));
if (err && err->apr_err == SVN_ERR_IO_INCONSISTENT_EOL)
return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, err,
_("File '%s' has inconsistent newlines"),
path_display);
- else if (err)
- return err;
- return SVN_NO_ERROR;
+ return svn_error_trace(err);
}
static svn_error_t *
@@ -2203,31 +1676,14 @@ do_propset(svn_wc__db_t *db,
{
apr_hash_t *prophash;
svn_wc_notify_action_t notify_action;
- svn_wc__db_status_t status;
svn_skel_t *work_item = NULL;
svn_boolean_t clear_recorded_info = FALSE;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
- /* Get the node status for this path. */
- SVN_ERR(svn_wc__db_read_info(&status, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- db, local_abspath,
- scratch_pool, scratch_pool));
-
- if (status != svn_wc__db_status_normal
- && status != svn_wc__db_status_added
- && status != svn_wc__db_status_incomplete)
- return svn_error_createf(SVN_ERR_WC_INVALID_SCHEDULE, NULL,
- _("Can't set properties on '%s':"
- " invalid status for updating properties."),
- svn_dirent_local_style(local_abspath,
- scratch_pool));
-
- /* Else, handle a regular property: */
-
+ SVN_ERR_W(svn_wc__db_read_props(&prophash, db, local_abspath,
+ scratch_pool, scratch_pool),
+ _("Failed to load current properties"));
/* Setting an inappropriate property is not allowed (unless
overridden by 'skip_checks', in some circumstances). Deleting an
@@ -2239,8 +1695,8 @@ do_propset(svn_wc__db_t *db,
const svn_string_t *new_value;
struct getter_baton gb;
+ gb.mime_type = svn_hash_gets(prophash, SVN_PROP_MIME_TYPE);
gb.local_abspath = local_abspath;
- gb.db = db;
SVN_ERR(svn_wc_canonicalize_svn_prop(&new_value, name, value,
local_abspath, kind,
@@ -2258,10 +1714,6 @@ do_propset(svn_wc__db_t *db,
scratch_pool, scratch_pool));
}
- SVN_ERR_W(svn_wc__db_read_props(&prophash, db, local_abspath,
- scratch_pool, scratch_pool),
- _("Failed to load current properties"));
-
/* If we're changing this file's list of expanded keywords, then
* we'll need to invalidate its text timestamp, since keyword
* expansion affects the comparison of working file to text base.
@@ -2272,8 +1724,7 @@ do_propset(svn_wc__db_t *db,
*/
if (kind == svn_node_file && strcmp(name, SVN_PROP_KEYWORDS) == 0)
{
- svn_string_t *old_value = apr_hash_get(prophash, SVN_PROP_KEYWORDS,
- APR_HASH_KEY_STRING);
+ svn_string_t *old_value = svn_hash_gets(prophash, SVN_PROP_KEYWORDS);
apr_hash_t *old_keywords, *new_keywords;
if (old_value)
@@ -2296,25 +1747,24 @@ do_propset(svn_wc__db_t *db,
scratch_pool))
{
/* If the keywords have changed, then the translation of the file
- may be different. We should invalidate the cached TRANSLATED_SIZE
- and LAST_MOD_TIME on this node.
+ may be different. We should invalidate the RECORDED_SIZE
+ and RECORDED_TIME on this node.
Note that we don't immediately re-translate the file. But a
"has it changed?" check in the future will do a translation
from the pristine, and it will want to compare the (new)
- resulting TRANSLATED_SIZE against the working copy file.
+ resulting RECORDED_SIZE against the working copy file.
Also, when this file is (de)translated with the new keywords,
then it could be different, relative to the pristine. We want
- to ensure the LAST_MOD_TIME is different, to indicate that
+ to ensure the RECORDED_TIME is different, to indicate that
a full detranslate/compare is performed. */
clear_recorded_info = TRUE;
}
}
else if (kind == svn_node_file && strcmp(name, SVN_PROP_EOL_STYLE) == 0)
{
- svn_string_t *old_value = apr_hash_get(prophash, SVN_PROP_EOL_STYLE,
- APR_HASH_KEY_STRING);
+ svn_string_t *old_value = svn_hash_gets(prophash, SVN_PROP_EOL_STYLE);
if (((value == NULL) != (old_value == NULL))
|| (value && ! svn_string_compare(value, old_value)))
@@ -2325,7 +1775,7 @@ do_propset(svn_wc__db_t *db,
/* Find out what type of property change we are doing: add, modify, or
delete. */
- if (apr_hash_get(prophash, name, APR_HASH_KEY_STRING) == NULL)
+ if (svn_hash_gets(prophash, name) == NULL)
{
if (value == NULL)
/* Deleting a non-existent property. */
@@ -2346,7 +1796,7 @@ do_propset(svn_wc__db_t *db,
/* Now we have all the properties in our hash. Simply merge the new
property into it. */
- apr_hash_set(prophash, name, APR_HASH_KEY_STRING, value);
+ svn_hash_sets(prophash, name, value);
/* Drop it right into the db.. */
SVN_ERR(svn_wc__db_op_set_props(db, local_abspath, prophash,
@@ -2363,6 +1813,7 @@ do_propset(svn_wc__db_t *db,
notify_action,
scratch_pool);
notify->prop_name = name;
+ notify->kind = kind;
(*notify_func)(notify_baton, notify, scratch_pool);
}
@@ -2399,7 +1850,7 @@ propset_walk_cb(const char *local_abspath,
err = do_propset(wb->db, local_abspath, kind, wb->propname, wb->propval,
wb->force, wb->notify_func, wb->notify_baton, scratch_pool);
if (err && (err->apr_err == SVN_ERR_ILLEGAL_TARGET
- || err->apr_err == SVN_ERR_WC_INVALID_SCHEDULE))
+ || err->apr_err == SVN_ERR_WC_PATH_UNEXPECTED_STATUS))
{
svn_error_clear(err);
err = SVN_NO_ERROR;
@@ -2422,9 +1873,10 @@ svn_wc_prop_set4(svn_wc_context_t *wc_ctx,
void *notify_baton,
apr_pool_t *scratch_pool)
{
- enum svn_prop_kind prop_kind = svn_property_kind(NULL, name);
- svn_wc__db_kind_t kind;
- const char *dir_abspath;
+ enum svn_prop_kind prop_kind = svn_property_kind2(name);
+ svn_wc__db_status_t status;
+ svn_node_kind_t kind;
+ svn_wc__db_t *db = wc_ctx->db;
/* we don't do entry properties here */
if (prop_kind == svn_prop_entry_kind)
@@ -2439,22 +1891,46 @@ svn_wc_prop_set4(svn_wc_context_t *wc_ctx,
name, value, scratch_pool));
}
+ SVN_ERR(svn_wc__db_read_info(&status, &kind, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ wc_ctx->db, local_abspath,
+ scratch_pool, scratch_pool));
+
+ if (status != svn_wc__db_status_normal
+ && status != svn_wc__db_status_added
+ && status != svn_wc__db_status_incomplete)
+ {
+ return svn_error_createf(SVN_ERR_WC_INVALID_SCHEDULE, NULL,
+ _("Can't set properties on '%s':"
+ " invalid status for updating properties."),
+ svn_dirent_local_style(local_abspath,
+ scratch_pool));
+ }
+
/* We have to do this little DIR_ABSPATH dance for backwards compat.
But from 1.7 onwards, all locks are of infinite depth, and from 1.6
backward we never call this API with depth > empty, so we only need
to do the write check once per call, here (and not for every node in
- the node walker). */
- SVN_ERR(svn_wc__db_read_kind(&kind, wc_ctx->db, local_abspath, TRUE,
- scratch_pool));
+ the node walker).
- if (kind == svn_wc__db_kind_dir)
- dir_abspath = local_abspath;
- else
- dir_abspath = svn_dirent_dirname(local_abspath, scratch_pool);
+ ### Note that we could check for a write lock on local_abspath first
+ ### if we would want to. And then justy check for kind if that fails.
+ ### ... but we need kind for the "svn:" property checks anyway */
+ {
+ const char *dir_abspath;
- SVN_ERR(svn_wc__write_check(wc_ctx->db, dir_abspath, scratch_pool));
+ if (kind == svn_node_dir)
+ dir_abspath = local_abspath;
+ else
+ dir_abspath = svn_dirent_dirname(local_abspath, scratch_pool);
+
+ /* Verify that we're holding this directory's write lock. */
+ SVN_ERR(svn_wc__write_check(db, dir_abspath, scratch_pool));
+ }
- if (depth == svn_depth_empty)
+ if (depth == svn_depth_empty || kind != svn_node_dir)
{
apr_hash_t *changelist_hash = NULL;
@@ -2467,15 +1943,17 @@ svn_wc_prop_set4(svn_wc_context_t *wc_ctx,
return SVN_NO_ERROR;
SVN_ERR(do_propset(wc_ctx->db, local_abspath,
- kind == svn_wc__db_kind_dir
+ kind == svn_node_dir
? svn_node_dir
: svn_node_file,
name, value, skip_checks,
notify_func, notify_baton, scratch_pool));
+
}
else
{
struct propset_walk_baton wb;
+
wb.propname = name;
wb.propval = value;
wb.db = wc_ctx->db;
@@ -2494,6 +1972,81 @@ svn_wc_prop_set4(svn_wc_context_t *wc_ctx,
return SVN_NO_ERROR;
}
+/* Check that NAME names a regular prop. Return an error if it names an
+ * entry prop or a WC prop. */
+static svn_error_t *
+ensure_prop_is_regular_kind(const char *name)
+{
+ enum svn_prop_kind prop_kind = svn_property_kind2(name);
+
+ /* we don't do entry properties here */
+ if (prop_kind == svn_prop_entry_kind)
+ return svn_error_createf(SVN_ERR_BAD_PROP_KIND, NULL,
+ _("Property '%s' is an entry property"), name);
+
+ /* Check to see if we're setting the dav cache. */
+ if (prop_kind == svn_prop_wc_kind)
+ return svn_error_createf(SVN_ERR_BAD_PROP_KIND, NULL,
+ _("Property '%s' is a WC property, not "
+ "a regular property"), name);
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__canonicalize_props(apr_hash_t **prepared_props,
+ const char *local_abspath,
+ svn_node_kind_t node_kind,
+ const apr_hash_t *props,
+ svn_boolean_t skip_some_checks,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ const svn_string_t *mime_type;
+ struct getter_baton gb;
+ apr_hash_index_t *hi;
+
+ /* While we allocate new parts of *PREPARED_PROPS in RESULT_POOL, we
+ don't promise to deep-copy the unchanged keys and values. */
+ *prepared_props = apr_hash_make(result_pool);
+
+ /* Before we can canonicalize svn:eol-style we need to know svn:mime-type,
+ * so process that first. */
+ mime_type = svn_hash_gets((apr_hash_t *)props, SVN_PROP_MIME_TYPE);
+ if (mime_type)
+ {
+ SVN_ERR(svn_wc_canonicalize_svn_prop(
+ &mime_type, SVN_PROP_MIME_TYPE, mime_type,
+ local_abspath, node_kind, skip_some_checks,
+ NULL, NULL, scratch_pool));
+ svn_hash_sets(*prepared_props, SVN_PROP_MIME_TYPE, mime_type);
+ }
+
+ /* Set up the context for canonicalizing the other properties. */
+ gb.mime_type = mime_type;
+ gb.local_abspath = local_abspath;
+
+ /* Check and canonicalize the other properties. */
+ for (hi = apr_hash_first(scratch_pool, (apr_hash_t *)props); hi;
+ hi = apr_hash_next(hi))
+ {
+ const char *name = svn__apr_hash_index_key(hi);
+ const svn_string_t *value = svn__apr_hash_index_val(hi);
+
+ if (strcmp(name, SVN_PROP_MIME_TYPE) == 0)
+ continue;
+
+ SVN_ERR(ensure_prop_is_regular_kind(name));
+ SVN_ERR(svn_wc_canonicalize_svn_prop(
+ &value, name, value,
+ local_abspath, node_kind, skip_some_checks,
+ get_file_for_validation, &gb, scratch_pool));
+ svn_hash_sets(*prepared_props, name, value);
+ }
+
+ return SVN_NO_ERROR;
+}
+
svn_error_t *
svn_wc_canonicalize_svn_prop(const svn_string_t **propval_p,
@@ -2541,7 +2094,9 @@ svn_wc_canonicalize_svn_prop(const svn_string_t **propval_p,
SVN_ERR(svn_mime_type_validate(new_value->data, pool));
}
else if (strcmp(propname, SVN_PROP_IGNORE) == 0
- || strcmp(propname, SVN_PROP_EXTERNALS) == 0)
+ || strcmp(propname, SVN_PROP_EXTERNALS) == 0
+ || strcmp(propname, SVN_PROP_INHERITABLE_IGNORES) == 0
+ || strcmp(propname, SVN_PROP_INHERITABLE_AUTO_PROPS) == 0)
{
/* Make sure that the last line ends in a newline */
if (propval->len == 0
@@ -2561,9 +2116,34 @@ svn_wc_canonicalize_svn_prop(const svn_string_t **propval_p,
an svn:externals line. As it happens, our parse code
checks for this, so all we have to is invoke it --
we're not interested in the parsed result, only in
- whether or the parsing errored. */
- SVN_ERR(svn_wc_parse_externals_description3
- (NULL, path, propval->data, FALSE, pool));
+ whether or not the parsing errored. */
+ apr_array_header_t *externals = NULL;
+ apr_array_header_t *duplicate_targets = NULL;
+ SVN_ERR(svn_wc_parse_externals_description3(&externals, path,
+ propval->data, FALSE,
+ /*scratch_*/pool));
+ SVN_ERR(svn_wc__externals_find_target_dups(&duplicate_targets,
+ externals,
+ /*scratch_*/pool,
+ /*scratch_*/pool));
+ if (duplicate_targets && duplicate_targets->nelts > 0)
+ {
+ const char *more_str = "";
+ if (duplicate_targets->nelts > 1)
+ {
+ more_str = apr_psprintf(/*scratch_*/pool,
+ _(" (%d more duplicate targets found)"),
+ duplicate_targets->nelts - 1);
+ }
+ return svn_error_createf(
+ SVN_ERR_WC_DUPLICATE_EXTERNALS_TARGET, NULL,
+ _("Invalid %s property on '%s': "
+ "target '%s' appears more than once%s"),
+ SVN_PROP_EXTERNALS,
+ svn_dirent_local_style(path, pool),
+ APR_ARRAY_IDX(duplicate_targets, 0, const char*),
+ more_str);
+ }
}
}
else if (strcmp(propname, SVN_PROP_KEYWORDS) == 0)
@@ -2607,7 +2187,7 @@ svn_wc_canonicalize_svn_prop(const svn_string_t **propval_p,
svn_boolean_t
svn_wc_is_normal_prop(const char *name)
{
- enum svn_prop_kind kind = svn_property_kind(NULL, name);
+ enum svn_prop_kind kind = svn_property_kind2(name);
return (kind == svn_prop_regular_kind);
}
@@ -2615,7 +2195,7 @@ svn_wc_is_normal_prop(const char *name)
svn_boolean_t
svn_wc_is_wc_prop(const char *name)
{
- enum svn_prop_kind kind = svn_property_kind(NULL, name);
+ enum svn_prop_kind kind = svn_property_kind2(name);
return (kind == svn_prop_wc_kind);
}
@@ -2623,7 +2203,7 @@ svn_wc_is_wc_prop(const char *name)
svn_boolean_t
svn_wc_is_entry_prop(const char *name)
{
- enum svn_prop_kind kind = svn_property_kind(NULL, name);
+ enum svn_prop_kind kind = svn_property_kind2(name);
return (kind == svn_prop_entry_kind);
}
@@ -2730,3 +2310,35 @@ svn_wc__has_magic_property(const apr_array_header_t *properties)
}
return FALSE;
}
+
+svn_error_t *
+svn_wc__get_iprops(apr_array_header_t **inherited_props,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ const char *propname,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ return svn_error_trace(
+ svn_wc__db_read_inherited_props(inherited_props, NULL,
+ wc_ctx->db, local_abspath,
+ propname,
+ result_pool, scratch_pool));
+}
+
+svn_error_t *
+svn_wc__get_cached_iprop_children(apr_hash_t **iprop_paths,
+ svn_depth_t depth,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ SVN_ERR(svn_wc__db_get_children_with_cached_iprops(iprop_paths,
+ depth,
+ local_abspath,
+ wc_ctx->db,
+ result_pool,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/libsvn_wc/props.h b/subversion/libsvn_wc/props.h
index e41c13f..c648e3c 100644
--- a/subversion/libsvn_wc/props.h
+++ b/subversion/libsvn_wc/props.h
@@ -37,18 +37,6 @@
extern "C" {
#endif /* __cplusplus */
-/* BASE_MERGE is a pre-1.7 concept on property merging. It allowed callers
- to alter the pristine properties *outside* of an editor drive. That is
- very dangerous: the pristines should always correspond to something from
- the repository, and that should only arrive through the update editor.
-
- For 1.7, we're removing this support. Some old code is being left around
- in case we decide to change this.
-
- For more information, see ^/notes/api-errata/wc006.txt
-*/
-#undef SVN__SUPPORT_BASE_MERGE
-
/* Internal function for diffing props. See svn_wc_get_prop_diffs2(). */
svn_error_t *
svn_wc__internal_propdiff(apr_array_header_t **propchanges,
@@ -68,57 +56,65 @@ svn_wc__internal_propget(const svn_string_t **value,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
+/* Validate and canonicalize the PROPS like svn_wc_prop_set4() does;
+ * see that function for details of the SKIP_SOME_CHECKS option.
+ *
+ * The properties are checked against the node at LOCAL_ABSPATH (which
+ * need not be under version control) of kind KIND. This text of this
+ * node may be read (if it is a file) in order to validate the
+ * svn:eol-style property.
+ *
+ * Only regular props are accepted; WC props and entry props raise an error
+ * (unlike svn_wc_prop_set4() which accepts WC props).
+ *
+ * Set *PREPARED_PROPS to the resulting canonicalized properties,
+ * allocating any new data in RESULT_POOL but making shallow copies of
+ * keys and unchanged values from PROPS.
+ */
+svn_error_t *
+svn_wc__canonicalize_props(apr_hash_t **prepared_props,
+ const char *local_abspath,
+ svn_node_kind_t node_kind,
+ const apr_hash_t *props,
+ svn_boolean_t skip_some_checks,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
/* Given LOCAL_ABSPATH/DB and an array of PROPCHANGES based on
SERVER_BASEPROPS, calculate what changes should be applied to the working
copy.
- Return working queue operations in WORK_ITEMS and a new set of actual
- (NEW_ACTUAL_PROPS) and pristine properties (NEW_PRISTINE_PROPS).
-
We return the new property collections to the caller, so the caller
can combine the property update with other operations.
If SERVER_BASEPROPS is NULL then use the pristine props as PROPCHANGES
base.
- If BASE_MERGE is FALSE then only change working properties; if TRUE,
- change both the pristine and working properties. (Only the update editor
- should use BASE_MERGE is TRUE)
-
- If conflicts are found when merging, create a temporary .prej file,
- and provide working queue operations to write the conflict information
- into the .prej file later. Modify base properties unconditionally,
- if BASE_MERGE is TRUE, they do not generate conficts.
-
- TODO ### LEFT_VERSION and RIGHT_VERSION ...
+ Return the new set of actual properties in *NEW_ACTUAL_PROPS.
- TODO ### DRY_RUN ...
-
- TODO ### CONFLICT_FUNC/CONFLICT_BATON ...
+ Append any conflicts of the actual props to *CONFLICT_SKEL. (First
+ allocate *CONFLICT_SKEL from RESULT_POOL if it is initially NULL.
+ CONFLICT_SKEL itself must not be NULL.)
If STATE is non-null, set *STATE to the state of the local properties
- after the merge. */
+ after the merge, one of:
+
+ svn_wc_notify_state_unchanged
+ svn_wc_notify_state_changed
+ svn_wc_notify_state_merged
+ svn_wc_notify_state_conflicted
+ */
svn_error_t *
-svn_wc__merge_props(svn_skel_t **work_items,
+svn_wc__merge_props(svn_skel_t **conflict_skel,
svn_wc_notify_state_t *state,
- apr_hash_t **new_pristine_props,
apr_hash_t **new_actual_props,
svn_wc__db_t *db,
const char *local_abspath,
- svn_wc__db_kind_t kind,
- const svn_wc_conflict_version_t *left_version,
- const svn_wc_conflict_version_t *right_version,
- apr_hash_t *server_baseprops,
- apr_hash_t *pristine_props,
- apr_hash_t *actual_props,
+ /*const*/ apr_hash_t *server_baseprops,
+ /*const*/ apr_hash_t *pristine_props,
+ /*const*/ apr_hash_t *actual_props,
const apr_array_header_t *propchanges,
- svn_boolean_t base_merge,
- svn_boolean_t dry_run,
- svn_wc_conflict_resolver_func2_t conflict_func,
- void *conflict_baton,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
@@ -135,15 +131,6 @@ svn_wc__props_modified(svn_boolean_t *modified_p,
const char *local_abspath,
apr_pool_t *scratch_pool);
-/* Internal version of svn_wc_get_pristine_props(). */
-svn_error_t *
-svn_wc__get_pristine_props(apr_hash_t **props,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-
/* Internal version of svn_wc_prop_list2(). */
svn_error_t *
svn_wc__get_actual_props(apr_hash_t **props,
@@ -153,13 +140,6 @@ svn_wc__get_actual_props(apr_hash_t **props,
apr_pool_t *scratch_pool);
svn_error_t *
-svn_wc__get_prejfile_abspath(const char **prejfile_abspath,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-svn_error_t *
svn_wc__create_prejfile(const char **tmp_prejfile_abspath,
svn_wc__db_t *db,
const char *local_abspath,
@@ -167,24 +147,6 @@ svn_wc__create_prejfile(const char **tmp_prejfile_abspath,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
-
-/* Just like svn_wc_merge_props3(), but WITH a BASE_MERGE parameter. */
-svn_error_t *
-svn_wc__perform_props_merge(svn_wc_notify_state_t *state,
- svn_wc__db_t *db,
- const char *local_abspath,
- const svn_wc_conflict_version_t *left_version,
- const svn_wc_conflict_version_t *right_version,
- apr_hash_t *baseprops,
- const apr_array_header_t *propchanges,
- svn_boolean_t base_merge,
- svn_boolean_t dry_run,
- svn_wc_conflict_resolver_func2_t conflict_func,
- void *conflict_baton,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- apr_pool_t *scratch_pool);
-
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/libsvn_wc/questions.c b/subversion/libsvn_wc/questions.c
index a2eab90..c2a42b6 100644
--- a/subversion/libsvn_wc/questions.c
+++ b/subversion/libsvn_wc/questions.c
@@ -40,8 +40,7 @@
#include "svn_props.h"
#include "wc.h"
-#include "adm_files.h"
-#include "props.h"
+#include "conflicts.h"
#include "translate.h"
#include "wc_db.h"
@@ -149,26 +148,6 @@ compare_and_verify(svn_boolean_t *modified_p,
return svn_error_trace(svn_stream_close(pristine_stream));
}
-#if 0
- /* ### On second thought, I think this needs more review before enabling
- ### This case might break when we have a fixed "\r\n" EOL, because
- ### we use a repair mode in the compare itself. */
- if (need_translation
- && !special
- && !props_mod
- && (keywords == NULL)
- && (versioned_file_size < pristine_file_size))
- {
- *modified_p = TRUE; /* The file is < its repository normal form
- and the properties didn't change.
-
- That must be a change. */
-
- /* ### Why did we open the pristine? */
- return svn_error_trace(svn_stream_close(pristine_stream));
- }
-#endif
-
/* ### Other checks possible? */
if (need_translation)
@@ -192,7 +171,8 @@ compare_and_verify(svn_boolean_t *modified_p,
eol_str = SVN_SUBST_NATIVE_EOL_STR;
else if (eol_style != svn_subst_eol_style_fixed
&& eol_style != svn_subst_eol_style_none)
- return svn_error_create(SVN_ERR_IO_UNKNOWN_EOL, NULL, NULL);
+ return svn_error_create(SVN_ERR_IO_UNKNOWN_EOL,
+ svn_stream_close(v_stream), NULL);
/* Wrap file stream to detranslate into normal form,
* "repairing" the EOL style if it is inconsistent. */
@@ -244,7 +224,7 @@ svn_wc__internal_file_modified_p(svn_boolean_t *modified_p,
svn_stream_t *pristine_stream;
svn_filesize_t pristine_size;
svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
const svn_checksum_t *checksum;
svn_filesize_t recorded_size;
apr_time_t recorded_mod_time;
@@ -265,7 +245,7 @@ svn_wc__internal_file_modified_p(svn_boolean_t *modified_p,
/* If we don't have a pristine or the node has a status that allows a
pristine, just say that the node is modified */
if (!checksum
- || (kind != svn_wc__db_kind_file)
+ || (kind != svn_node_file)
|| ((status != svn_wc__db_status_normal)
&& (status != svn_wc__db_status_added)))
{
@@ -273,8 +253,8 @@ svn_wc__internal_file_modified_p(svn_boolean_t *modified_p,
return SVN_NO_ERROR;
}
- SVN_ERR(svn_io_stat_dirent(&dirent, local_abspath, TRUE,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_io_stat_dirent2(&dirent, local_abspath, FALSE, TRUE,
+ scratch_pool, scratch_pool));
if (dirent->kind != svn_node_file)
{
@@ -374,130 +354,209 @@ svn_error_t *
svn_wc_text_modified_p2(svn_boolean_t *modified_p,
svn_wc_context_t *wc_ctx,
const char *local_abspath,
- svn_boolean_t force_comparison,
+ svn_boolean_t unused,
apr_pool_t *scratch_pool)
{
- /* ### We ignore FORCE_COMPARISON, but we also fixed its only
- remaining use-case */
return svn_wc__internal_file_modified_p(modified_p, wc_ctx->db,
local_abspath, FALSE, scratch_pool);
}
-svn_error_t *
-svn_wc__internal_conflicted_p(svn_boolean_t *text_conflicted_p,
- svn_boolean_t *prop_conflicted_p,
- svn_boolean_t *tree_conflicted_p,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *scratch_pool)
+static svn_error_t *
+internal_conflicted_p(svn_boolean_t *text_conflicted_p,
+ svn_boolean_t *prop_conflicted_p,
+ svn_boolean_t *tree_conflicted_p,
+ svn_boolean_t *ignore_move_edit_p,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *scratch_pool)
{
svn_node_kind_t kind;
- svn_wc__db_kind_t node_kind;
- const apr_array_header_t *conflicts;
- int i;
- svn_boolean_t conflicted;
-
- if (text_conflicted_p)
- *text_conflicted_p = FALSE;
- if (prop_conflicted_p)
- *prop_conflicted_p = FALSE;
- if (tree_conflicted_p)
- *tree_conflicted_p = FALSE;
+ svn_skel_t *conflicts;
+ svn_boolean_t resolved_text = FALSE;
+ svn_boolean_t resolved_props = FALSE;
- SVN_ERR(svn_wc__db_read_info(NULL, &node_kind, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, &conflicted,
- NULL, NULL, NULL, NULL, NULL, NULL,
- db, local_abspath, scratch_pool,
- scratch_pool));
+ SVN_ERR(svn_wc__db_read_conflict(&conflicts, db, local_abspath,
+ scratch_pool, scratch_pool));
- if (!conflicted)
- return SVN_NO_ERROR;
+ if (!conflicts)
+ {
+ if (text_conflicted_p)
+ *text_conflicted_p = FALSE;
+ if (prop_conflicted_p)
+ *prop_conflicted_p = FALSE;
+ if (tree_conflicted_p)
+ *tree_conflicted_p = FALSE;
+ if (ignore_move_edit_p)
+ *ignore_move_edit_p = FALSE;
+ return SVN_NO_ERROR;
+ }
- SVN_ERR(svn_wc__db_read_conflicts(&conflicts, db, local_abspath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__conflict_read_info(NULL, NULL, text_conflicted_p,
+ prop_conflicted_p, tree_conflicted_p,
+ db, local_abspath, conflicts,
+ scratch_pool, scratch_pool));
- for (i = 0; i < conflicts->nelts; i++)
+ if (text_conflicted_p && *text_conflicted_p)
{
- const svn_wc_conflict_description2_t *cd;
- cd = APR_ARRAY_IDX(conflicts, i, const svn_wc_conflict_description2_t *);
+ const char *mine_abspath;
+ const char *their_old_abspath;
+ const char *their_abspath;
+ svn_boolean_t done = FALSE;
+
+ /* Look for any text conflict, exercising only as much effort as
+ necessary to obtain a definitive answer. This only applies to
+ files, but we don't have to explicitly check that entry is a
+ file, since these attributes would never be set on a directory
+ anyway. A conflict file entry notation only counts if the
+ conflict file still exists on disk. */
+
+ SVN_ERR(svn_wc__conflict_read_text_conflict(&mine_abspath,
+ &their_old_abspath,
+ &their_abspath,
+ db, local_abspath, conflicts,
+ scratch_pool, scratch_pool));
+
+ if (mine_abspath)
+ {
+ SVN_ERR(svn_io_check_path(mine_abspath, &kind, scratch_pool));
+
+ *text_conflicted_p = (kind == svn_node_file);
+
+ if (*text_conflicted_p)
+ done = TRUE;
+ }
- switch (cd->kind)
+ if (!done && their_abspath)
{
- case svn_wc_conflict_kind_text:
- /* Look for any text conflict, exercising only as much effort as
- necessary to obtain a definitive answer. This only applies to
- files, but we don't have to explicitly check that entry is a
- file, since these attributes would never be set on a directory
- anyway. A conflict file entry notation only counts if the
- conflict file still exists on disk. */
-
- if (!text_conflicted_p || *text_conflicted_p)
- break;
-
- if (cd->base_abspath)
- {
- SVN_ERR(svn_io_check_path(cd->base_abspath, &kind,
- scratch_pool));
+ SVN_ERR(svn_io_check_path(their_abspath, &kind, scratch_pool));
- *text_conflicted_p = (kind == svn_node_file);
+ *text_conflicted_p = (kind == svn_node_file);
- if (*text_conflicted_p)
- break;
- }
+ if (*text_conflicted_p)
+ done = TRUE;
+ }
- if (cd->their_abspath)
- {
- SVN_ERR(svn_io_check_path(cd->their_abspath, &kind,
- scratch_pool));
+ if (!done && their_old_abspath)
+ {
+ SVN_ERR(svn_io_check_path(their_old_abspath, &kind, scratch_pool));
- *text_conflicted_p = (kind == svn_node_file);
+ *text_conflicted_p = (kind == svn_node_file);
- if (*text_conflicted_p)
- break;
- }
+ if (*text_conflicted_p)
+ done = TRUE;
+ }
- if (cd->my_abspath)
- {
- SVN_ERR(svn_io_check_path(cd->my_abspath, &kind,
- scratch_pool));
+ if (!done && (mine_abspath || their_abspath || their_old_abspath))
+ resolved_text = TRUE; /* Remove in-db conflict marker */
+ }
- *text_conflicted_p = (kind == svn_node_file);
- }
- break;
+ if (prop_conflicted_p && *prop_conflicted_p)
+ {
+ const char *prej_abspath;
- case svn_wc_conflict_kind_property:
- if (!prop_conflicted_p || *prop_conflicted_p)
- break;
+ SVN_ERR(svn_wc__conflict_read_prop_conflict(&prej_abspath,
+ NULL, NULL, NULL, NULL,
+ db, local_abspath, conflicts,
+ scratch_pool, scratch_pool));
- if (cd->their_abspath)
- {
- SVN_ERR(svn_io_check_path(cd->their_abspath, &kind,
- scratch_pool));
+ if (prej_abspath)
+ {
+ SVN_ERR(svn_io_check_path(prej_abspath, &kind, scratch_pool));
- *prop_conflicted_p = (kind == svn_node_file);
- }
+ *prop_conflicted_p = (kind == svn_node_file);
- break;
+ if (! *prop_conflicted_p)
+ resolved_props = TRUE; /* Remove in-db conflict marker */
+ }
+ }
- case svn_wc_conflict_kind_tree:
- if (tree_conflicted_p)
- *tree_conflicted_p = TRUE;
+ if (ignore_move_edit_p)
+ {
+ *ignore_move_edit_p = FALSE;
+ if (tree_conflicted_p && *tree_conflicted_p)
+ {
+ svn_wc_conflict_reason_t reason;
+ svn_wc_conflict_action_t action;
- break;
+ SVN_ERR(svn_wc__conflict_read_tree_conflict(&reason, &action, NULL,
+ db, local_abspath,
+ conflicts,
+ scratch_pool,
+ scratch_pool));
- default:
- /* Ignore other conflict types */
- break;
+ if (reason == svn_wc_conflict_reason_moved_away
+ && action == svn_wc_conflict_action_edit)
+ {
+ *tree_conflicted_p = FALSE;
+ *ignore_move_edit_p = TRUE;
+ }
}
}
+
+ if (resolved_text || resolved_props)
+ {
+ svn_boolean_t own_lock;
+
+ /* The marker files are missing, so "repair" wc.db if we can */
+ SVN_ERR(svn_wc__db_wclock_owns_lock(&own_lock, db, local_abspath, FALSE,
+ scratch_pool));
+ if (own_lock)
+ SVN_ERR(svn_wc__db_op_mark_resolved(db, local_abspath,
+ resolved_text,
+ resolved_props,
+ FALSE /* resolved_tree */,
+ NULL /* work_items */,
+ scratch_pool));
+ }
+
return SVN_NO_ERROR;
}
svn_error_t *
+svn_wc__internal_conflicted_p(svn_boolean_t *text_conflicted_p,
+ svn_boolean_t *prop_conflicted_p,
+ svn_boolean_t *tree_conflicted_p,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *scratch_pool)
+{
+ SVN_ERR(internal_conflicted_p(text_conflicted_p, prop_conflicted_p,
+ tree_conflicted_p, NULL,
+ db, local_abspath, scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__conflicted_for_update_p(svn_boolean_t *conflicted_p,
+ svn_boolean_t *conflict_ignored_p,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_boolean_t tree_only,
+ apr_pool_t *scratch_pool)
+{
+ svn_boolean_t text_conflicted, prop_conflicted, tree_conflicted;
+ svn_boolean_t conflict_ignored;
+
+ if (!conflict_ignored_p)
+ conflict_ignored_p = &conflict_ignored;
+
+ SVN_ERR(internal_conflicted_p(tree_only ? NULL: &text_conflicted,
+ tree_only ? NULL: &prop_conflicted,
+ &tree_conflicted, conflict_ignored_p,
+ db, local_abspath, scratch_pool));
+ if (tree_only)
+ *conflicted_p = tree_conflicted;
+ else
+ *conflicted_p = text_conflicted || prop_conflicted || tree_conflicted;
+
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
svn_wc_conflicted_p3(svn_boolean_t *text_conflicted_p,
svn_boolean_t *prop_conflicted_p,
svn_boolean_t *tree_conflicted_p,
@@ -531,19 +590,6 @@ svn_wc__min_max_revisions(svn_revnum_t *min_revision,
svn_error_t *
-svn_wc__is_sparse_checkout(svn_boolean_t *is_sparse_checkout,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *scratch_pool)
-{
- return svn_error_trace(svn_wc__db_is_sparse_checkout(is_sparse_checkout,
- wc_ctx->db,
- local_abspath,
- scratch_pool));
-}
-
-
-svn_error_t *
svn_wc__has_switched_subtrees(svn_boolean_t *is_switched,
svn_wc_context_t *wc_ctx,
const char *local_abspath,
diff --git a/subversion/libsvn_wc/relocate.c b/subversion/libsvn_wc/relocate.c
index 7fcbcec..4a9df67 100644
--- a/subversion/libsvn_wc/relocate.c
+++ b/subversion/libsvn_wc/relocate.c
@@ -85,7 +85,7 @@ svn_wc_relocate4(svn_wc_context_t *wc_ctx,
void *validator_baton,
apr_pool_t *scratch_pool)
{
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
const char *repos_relpath;
const char *old_repos_root, *old_url;
const char *new_repos_root, *new_url;
@@ -94,8 +94,8 @@ svn_wc_relocate4(svn_wc_context_t *wc_ctx,
const char *uuid;
svn_boolean_t is_wc_root;
- SVN_ERR(svn_wc__strictly_is_wc_root(&is_wc_root, wc_ctx, local_abspath,
- scratch_pool));
+ SVN_ERR(svn_wc__is_wcroot(&is_wc_root, wc_ctx, local_abspath,
+ scratch_pool));
if (! is_wc_root)
{
const char *wcroot_abspath;
@@ -131,7 +131,7 @@ svn_wc_relocate4(svn_wc_context_t *wc_ctx,
wc_ctx->db, local_abspath, scratch_pool,
scratch_pool));
- if (kind != svn_wc__db_kind_dir)
+ if (kind != svn_node_dir)
return svn_error_create(SVN_ERR_CLIENT_INVALID_RELOCATION, NULL,
_("Cannot relocate a single file"));
diff --git a/subversion/libsvn_wc/revert.c b/subversion/libsvn_wc/revert.c
new file mode 100644
index 0000000..5e190e8
--- /dev/null
+++ b/subversion/libsvn_wc/revert.c
@@ -0,0 +1,886 @@
+/*
+ * revert.c: Handling of the in-wc side of the revert operation
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+
+
+#include <string.h>
+#include <stdlib.h>
+
+#include <apr_pools.h>
+#include <apr_tables.h>
+
+#include "svn_types.h"
+#include "svn_pools.h"
+#include "svn_string.h"
+#include "svn_error.h"
+#include "svn_dirent_uri.h"
+#include "svn_path.h"
+#include "svn_hash.h"
+#include "svn_wc.h"
+#include "svn_io.h"
+
+#include "wc.h"
+#include "adm_files.h"
+#include "workqueue.h"
+
+#include "svn_private_config.h"
+#include "private/svn_io_private.h"
+#include "private/svn_wc_private.h"
+
+/* Thoughts on Reversion.
+
+ What does is mean to revert a given PATH in a tree? We'll
+ consider things by their modifications.
+
+ Adds
+
+ - For files, svn_wc_remove_from_revision_control(), baby.
+
+ - Added directories may contain nothing but added children, and
+ reverting the addition of a directory necessarily means reverting
+ the addition of all the directory's children. Again,
+ svn_wc_remove_from_revision_control() should do the trick.
+
+ Deletes
+
+ - Restore properties to their unmodified state.
+
+ - For files, restore the pristine contents, and reset the schedule
+ to 'normal'.
+
+ - For directories, reset the schedule to 'normal'. All children
+ of a directory marked for deletion must also be marked for
+ deletion, but it's okay for those children to remain deleted even
+ if their parent directory is restored. That's what the
+ recursive flag is for.
+
+ Replaces
+
+ - Restore properties to their unmodified state.
+
+ - For files, restore the pristine contents, and reset the schedule
+ to 'normal'.
+
+ - For directories, reset the schedule to normal. A replaced
+ directory can have deleted children (left over from the initial
+ deletion), replaced children (children of the initial deletion
+ now re-added), and added children (new entries under the
+ replaced directory). Since this is technically an addition, it
+ necessitates recursion.
+
+ Modifications
+
+ - Restore properties and, for files, contents to their unmodified
+ state.
+
+*/
+
+
+/* Remove conflict file CONFLICT_ABSPATH, which may not exist, and set
+ * *NOTIFY_REQUIRED to TRUE if the file was present and removed. */
+static svn_error_t *
+remove_conflict_file(svn_boolean_t *notify_required,
+ const char *conflict_abspath,
+ const char *local_abspath,
+ apr_pool_t *scratch_pool)
+{
+ if (conflict_abspath)
+ {
+ svn_error_t *err = svn_io_remove_file2(conflict_abspath, FALSE,
+ scratch_pool);
+ if (err)
+ svn_error_clear(err);
+ else
+ *notify_required = TRUE;
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
+/* Sort copied children obtained from the revert list based on
+ * their paths in descending order (longest paths first). */
+static int
+compare_revert_list_copied_children(const void *a, const void *b)
+{
+ const svn_wc__db_revert_list_copied_child_info_t * const *ca = a;
+ const svn_wc__db_revert_list_copied_child_info_t * const *cb = b;
+ int i;
+
+ i = svn_path_compare_paths(ca[0]->abspath, cb[0]->abspath);
+
+ /* Reverse the result of svn_path_compare_paths() to achieve
+ * descending order. */
+ return -i;
+}
+
+
+/* Remove all reverted copied children from the directory at LOCAL_ABSPATH.
+ * If REMOVE_SELF is TRUE, try to remove LOCAL_ABSPATH itself (REMOVE_SELF
+ * should be set if LOCAL_ABSPATH is itself a reverted copy).
+ *
+ * If REMOVED_SELF is not NULL, indicate in *REMOVED_SELF whether
+ * LOCAL_ABSPATH itself was removed.
+ *
+ * All reverted copied file children are removed from disk. Reverted copied
+ * directories left empty as a result are also removed from disk.
+ */
+static svn_error_t *
+revert_restore_handle_copied_dirs(svn_boolean_t *removed_self,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_boolean_t remove_self,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
+{
+ const apr_array_header_t *copied_children;
+ svn_wc__db_revert_list_copied_child_info_t *child_info;
+ int i;
+ svn_node_kind_t on_disk;
+ apr_pool_t *iterpool;
+ svn_error_t *err;
+
+ if (removed_self)
+ *removed_self = FALSE;
+
+ SVN_ERR(svn_wc__db_revert_list_read_copied_children(&copied_children,
+ db, local_abspath,
+ scratch_pool,
+ scratch_pool));
+ iterpool = svn_pool_create(scratch_pool);
+
+ /* Remove all copied file children. */
+ for (i = 0; i < copied_children->nelts; i++)
+ {
+ child_info = APR_ARRAY_IDX(
+ copied_children, i,
+ svn_wc__db_revert_list_copied_child_info_t *);
+
+ if (cancel_func)
+ SVN_ERR(cancel_func(cancel_baton));
+
+ if (child_info->kind != svn_node_file)
+ continue;
+
+ svn_pool_clear(iterpool);
+
+ /* Make sure what we delete from disk is really a file. */
+ SVN_ERR(svn_io_check_path(child_info->abspath, &on_disk, iterpool));
+ if (on_disk != svn_node_file)
+ continue;
+
+ SVN_ERR(svn_io_remove_file2(child_info->abspath, TRUE, iterpool));
+ }
+
+ /* Delete every empty child directory.
+ * We cannot delete children recursively since we want to keep any files
+ * that still exist on disk (e.g. unversioned files within the copied tree).
+ * So sort the children list such that longest paths come first and try to
+ * remove each child directory in order. */
+ qsort(copied_children->elts, copied_children->nelts,
+ sizeof(svn_wc__db_revert_list_copied_child_info_t *),
+ compare_revert_list_copied_children);
+ for (i = 0; i < copied_children->nelts; i++)
+ {
+ child_info = APR_ARRAY_IDX(
+ copied_children, i,
+ svn_wc__db_revert_list_copied_child_info_t *);
+
+ if (cancel_func)
+ SVN_ERR(cancel_func(cancel_baton));
+
+ if (child_info->kind != svn_node_dir)
+ continue;
+
+ svn_pool_clear(iterpool);
+
+ err = svn_io_dir_remove_nonrecursive(child_info->abspath, iterpool);
+ if (err)
+ {
+ if (APR_STATUS_IS_ENOENT(err->apr_err) ||
+ SVN__APR_STATUS_IS_ENOTDIR(err->apr_err) ||
+ APR_STATUS_IS_ENOTEMPTY(err->apr_err))
+ svn_error_clear(err);
+ else
+ return svn_error_trace(err);
+ }
+ }
+
+ if (remove_self)
+ {
+ /* Delete LOCAL_ABSPATH itself if no children are left. */
+ err = svn_io_dir_remove_nonrecursive(local_abspath, iterpool);
+ if (err)
+ {
+ if (APR_STATUS_IS_ENOTEMPTY(err->apr_err))
+ svn_error_clear(err);
+ else
+ return svn_error_trace(err);
+ }
+ else if (removed_self)
+ *removed_self = TRUE;
+ }
+
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+
+/* Make the working tree under LOCAL_ABSPATH to depth DEPTH match the
+ versioned tree. This function is called after svn_wc__db_op_revert
+ has done the database revert and created the revert list. Notifies
+ for all paths equal to or below LOCAL_ABSPATH that are reverted.
+
+ REVERT_ROOT is true for explicit revert targets and FALSE for targets
+ reached via recursion.
+ */
+static svn_error_t *
+revert_restore(svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_depth_t depth,
+ svn_boolean_t use_commit_times,
+ svn_boolean_t revert_root,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool)
+{
+ svn_error_t *err;
+ svn_wc__db_status_t status;
+ svn_node_kind_t kind;
+ svn_node_kind_t on_disk;
+ svn_boolean_t notify_required;
+ const apr_array_header_t *conflict_files;
+ svn_filesize_t recorded_size;
+ apr_time_t recorded_time;
+ apr_finfo_t finfo;
+#ifdef HAVE_SYMLINK
+ svn_boolean_t special;
+#endif
+ svn_boolean_t copied_here;
+ svn_node_kind_t reverted_kind;
+ svn_boolean_t is_wcroot;
+
+ if (cancel_func)
+ SVN_ERR(cancel_func(cancel_baton));
+
+ SVN_ERR(svn_wc__db_is_wcroot(&is_wcroot, db, local_abspath, scratch_pool));
+ if (is_wcroot && !revert_root)
+ {
+ /* Issue #4162: Obstructing working copy. We can't access the working
+ copy data from the parent working copy for this node by just using
+ local_abspath */
+
+ if (notify_func)
+ {
+ svn_wc_notify_t *notify = svn_wc_create_notify(
+ local_abspath,
+ svn_wc_notify_update_skip_obstruction,
+ scratch_pool);
+
+ notify_func(notify_baton, notify, scratch_pool);
+ }
+
+ return SVN_NO_ERROR; /* We don't revert obstructing working copies */
+ }
+
+ SVN_ERR(svn_wc__db_revert_list_read(&notify_required,
+ &conflict_files,
+ &copied_here, &reverted_kind,
+ db, local_abspath,
+ scratch_pool, scratch_pool));
+
+ err = svn_wc__db_read_info(&status, &kind,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ &recorded_size, &recorded_time, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ db, local_abspath, scratch_pool, scratch_pool);
+
+ if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
+ {
+ svn_error_clear(err);
+
+ if (!copied_here)
+ {
+ if (notify_func && notify_required)
+ notify_func(notify_baton,
+ svn_wc_create_notify(local_abspath,
+ svn_wc_notify_revert,
+ scratch_pool),
+ scratch_pool);
+
+ if (notify_func)
+ SVN_ERR(svn_wc__db_revert_list_notify(notify_func, notify_baton,
+ db, local_abspath,
+ scratch_pool));
+ return SVN_NO_ERROR;
+ }
+ else
+ {
+ /* ### Initialise to values which prevent the code below from
+ * ### trying to restore anything to disk.
+ * ### 'status' should be status_unknown but that doesn't exist. */
+ status = svn_wc__db_status_normal;
+ kind = svn_node_unknown;
+ recorded_size = SVN_INVALID_FILESIZE;
+ recorded_time = 0;
+ }
+ }
+ else if (err)
+ return svn_error_trace(err);
+
+ err = svn_io_stat(&finfo, local_abspath,
+ APR_FINFO_TYPE | APR_FINFO_LINK
+ | APR_FINFO_SIZE | APR_FINFO_MTIME
+ | SVN__APR_FINFO_EXECUTABLE
+ | SVN__APR_FINFO_READONLY,
+ scratch_pool);
+
+ if (err && (APR_STATUS_IS_ENOENT(err->apr_err)
+ || SVN__APR_STATUS_IS_ENOTDIR(err->apr_err)))
+ {
+ svn_error_clear(err);
+ on_disk = svn_node_none;
+#ifdef HAVE_SYMLINK
+ special = FALSE;
+#endif
+ }
+ else if (!err)
+ {
+ if (finfo.filetype == APR_REG || finfo.filetype == APR_LNK)
+ on_disk = svn_node_file;
+ else if (finfo.filetype == APR_DIR)
+ on_disk = svn_node_dir;
+ else
+ on_disk = svn_node_unknown;
+
+#ifdef HAVE_SYMLINK
+ special = (finfo.filetype == APR_LNK);
+#endif
+ }
+ else
+ return svn_error_trace(err);
+
+ if (copied_here)
+ {
+ /* The revert target itself is the op-root of a copy. */
+ if (reverted_kind == svn_node_file && on_disk == svn_node_file)
+ {
+ SVN_ERR(svn_io_remove_file2(local_abspath, TRUE, scratch_pool));
+ on_disk = svn_node_none;
+ }
+ else if (reverted_kind == svn_node_dir && on_disk == svn_node_dir)
+ {
+ svn_boolean_t removed;
+
+ SVN_ERR(revert_restore_handle_copied_dirs(&removed, db,
+ local_abspath, TRUE,
+ cancel_func, cancel_baton,
+ scratch_pool));
+ if (removed)
+ on_disk = svn_node_none;
+ }
+ }
+
+ /* If we expect a versioned item to be present then check that any
+ item on disk matches the versioned item, if it doesn't match then
+ fix it or delete it. */
+ if (on_disk != svn_node_none
+ && status != svn_wc__db_status_server_excluded
+ && status != svn_wc__db_status_deleted
+ && status != svn_wc__db_status_excluded
+ && status != svn_wc__db_status_not_present)
+ {
+ if (on_disk == svn_node_dir && kind != svn_node_dir)
+ {
+ SVN_ERR(svn_io_remove_dir2(local_abspath, FALSE,
+ cancel_func, cancel_baton, scratch_pool));
+ on_disk = svn_node_none;
+ }
+ else if (on_disk == svn_node_file && kind != svn_node_file)
+ {
+#ifdef HAVE_SYMLINK
+ /* Preserve symlinks pointing at directories. Changes on the
+ * directory node have been reverted. The symlink should remain. */
+ if (!(special && kind == svn_node_dir))
+#endif
+ {
+ SVN_ERR(svn_io_remove_file2(local_abspath, FALSE, scratch_pool));
+ on_disk = svn_node_none;
+ }
+ }
+ else if (on_disk == svn_node_file)
+ {
+ svn_boolean_t modified;
+ apr_hash_t *props;
+#ifdef HAVE_SYMLINK
+ svn_string_t *special_prop;
+#endif
+
+ SVN_ERR(svn_wc__db_read_pristine_props(&props, db, local_abspath,
+ scratch_pool, scratch_pool));
+
+#ifdef HAVE_SYMLINK
+ special_prop = svn_hash_gets(props, SVN_PROP_SPECIAL);
+
+ if ((special_prop != NULL) != special)
+ {
+ /* File/symlink mismatch. */
+ SVN_ERR(svn_io_remove_file2(local_abspath, FALSE, scratch_pool));
+ on_disk = svn_node_none;
+ }
+ else
+#endif
+ {
+ /* Issue #1663 asserts that we should compare a file in its
+ working copy format here, but before r1101473 we would only
+ do that if the file was already unequal to its recorded
+ information.
+
+ r1101473 removes the option of asking for a working format
+ compare but *also* check the recorded information first, as
+ that combination doesn't guarantee a stable behavior.
+ (See the revert_test.py: revert_reexpand_keyword)
+
+ But to have the same issue #1663 behavior for revert as we
+ had in <=1.6 we only have to check the recorded information
+ ourselves. And we already have everything we need, because
+ we called stat ourselves. */
+ if (recorded_size != SVN_INVALID_FILESIZE
+ && recorded_time != 0
+ && recorded_size == finfo.size
+ && recorded_time == finfo.mtime)
+ {
+ modified = FALSE;
+ }
+ else
+ SVN_ERR(svn_wc__internal_file_modified_p(&modified,
+ db, local_abspath,
+ TRUE, scratch_pool));
+
+ if (modified)
+ {
+ SVN_ERR(svn_io_remove_file2(local_abspath, FALSE,
+ scratch_pool));
+ on_disk = svn_node_none;
+ }
+ else
+ {
+ if (status == svn_wc__db_status_normal)
+ {
+ svn_boolean_t read_only;
+ svn_string_t *needs_lock_prop;
+
+ SVN_ERR(svn_io__is_finfo_read_only(&read_only, &finfo,
+ scratch_pool));
+
+ needs_lock_prop = svn_hash_gets(props,
+ SVN_PROP_NEEDS_LOCK);
+ if (needs_lock_prop && !read_only)
+ {
+ SVN_ERR(svn_io_set_file_read_only(local_abspath,
+ FALSE,
+ scratch_pool));
+ notify_required = TRUE;
+ }
+ else if (!needs_lock_prop && read_only)
+ {
+ SVN_ERR(svn_io_set_file_read_write(local_abspath,
+ FALSE,
+ scratch_pool));
+ notify_required = TRUE;
+ }
+ }
+
+#if !defined(WIN32) && !defined(__OS2__)
+#ifdef HAVE_SYMLINK
+ if (!special)
+#endif
+ {
+ svn_boolean_t executable;
+ svn_string_t *executable_prop;
+
+ SVN_ERR(svn_io__is_finfo_executable(&executable, &finfo,
+ scratch_pool));
+ executable_prop = svn_hash_gets(props,
+ SVN_PROP_EXECUTABLE);
+ if (executable_prop && !executable)
+ {
+ SVN_ERR(svn_io_set_file_executable(local_abspath,
+ TRUE, FALSE,
+ scratch_pool));
+ notify_required = TRUE;
+ }
+ else if (!executable_prop && executable)
+ {
+ SVN_ERR(svn_io_set_file_executable(local_abspath,
+ FALSE, FALSE,
+ scratch_pool));
+ notify_required = TRUE;
+ }
+ }
+#endif
+ }
+ }
+ }
+ }
+
+ /* If we expect a versioned item to be present and there is nothing
+ on disk then recreate it. */
+ if (on_disk == svn_node_none
+ && status != svn_wc__db_status_server_excluded
+ && status != svn_wc__db_status_deleted
+ && status != svn_wc__db_status_excluded
+ && status != svn_wc__db_status_not_present)
+ {
+ if (kind == svn_node_dir)
+ SVN_ERR(svn_io_dir_make(local_abspath, APR_OS_DEFAULT, scratch_pool));
+
+ if (kind == svn_node_file)
+ {
+ svn_skel_t *work_item;
+
+ /* ### Get the checksum from read_info above and pass in here? */
+ SVN_ERR(svn_wc__wq_build_file_install(&work_item, db, local_abspath,
+ NULL, use_commit_times, TRUE,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_wq_add(db, local_abspath, work_item,
+ scratch_pool));
+ SVN_ERR(svn_wc__wq_run(db, local_abspath, cancel_func, cancel_baton,
+ scratch_pool));
+ }
+ notify_required = TRUE;
+ }
+
+ if (conflict_files)
+ {
+ int i;
+ for (i = 0; i < conflict_files->nelts; i++)
+ {
+ SVN_ERR(remove_conflict_file(&notify_required,
+ APR_ARRAY_IDX(conflict_files, i,
+ const char *),
+ local_abspath, scratch_pool));
+ }
+ }
+
+ if (notify_func && notify_required)
+ notify_func(notify_baton,
+ svn_wc_create_notify(local_abspath, svn_wc_notify_revert,
+ scratch_pool),
+ scratch_pool);
+
+ if (depth == svn_depth_infinity && kind == svn_node_dir)
+ {
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ const apr_array_header_t *children;
+ int i;
+
+ SVN_ERR(revert_restore_handle_copied_dirs(NULL, db, local_abspath, FALSE,
+ cancel_func, cancel_baton,
+ iterpool));
+
+ SVN_ERR(svn_wc__db_read_children_of_working_node(&children, db,
+ local_abspath,
+ scratch_pool,
+ iterpool));
+ for (i = 0; i < children->nelts; ++i)
+ {
+ const char *child_abspath;
+
+ svn_pool_clear(iterpool);
+
+ child_abspath = svn_dirent_join(local_abspath,
+ APR_ARRAY_IDX(children, i,
+ const char *),
+ iterpool);
+
+ SVN_ERR(revert_restore(db, child_abspath, depth,
+ use_commit_times, FALSE /* revert root */,
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ iterpool));
+ }
+
+ svn_pool_destroy(iterpool);
+ }
+
+ if (notify_func)
+ SVN_ERR(svn_wc__db_revert_list_notify(notify_func, notify_baton,
+ db, local_abspath, scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_wc__revert_internal(svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_depth_t depth,
+ svn_boolean_t use_commit_times,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool)
+{
+ svn_error_t *err;
+
+ SVN_ERR_ASSERT(depth == svn_depth_empty || depth == svn_depth_infinity);
+
+ /* We should have a write lock on the parent of local_abspath, except
+ when local_abspath is the working copy root. */
+ {
+ const char *dir_abspath;
+ svn_boolean_t is_wcroot;
+
+ SVN_ERR(svn_wc__db_is_wcroot(&is_wcroot, db, local_abspath, scratch_pool));
+
+ if (! is_wcroot)
+ dir_abspath = svn_dirent_dirname(local_abspath, scratch_pool);
+ else
+ dir_abspath = local_abspath;
+
+ SVN_ERR(svn_wc__write_check(db, dir_abspath, scratch_pool));
+ }
+
+ err = svn_wc__db_op_revert(db, local_abspath, depth,
+ scratch_pool, scratch_pool);
+
+ if (!err)
+ err = revert_restore(db, local_abspath, depth,
+ use_commit_times, TRUE /* revert root */,
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ scratch_pool);
+
+ err = svn_error_compose_create(err,
+ svn_wc__db_revert_list_done(db,
+ local_abspath,
+ scratch_pool));
+
+ return err;
+}
+
+
+/* Revert files in LOCAL_ABSPATH to depth DEPTH that match
+ CHANGELIST_HASH and notify for all reverts. */
+static svn_error_t *
+revert_changelist(svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_depth_t depth,
+ svn_boolean_t use_commit_times,
+ apr_hash_t *changelist_hash,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool)
+{
+ apr_pool_t *iterpool;
+ const apr_array_header_t *children;
+ int i;
+
+ if (cancel_func)
+ SVN_ERR(cancel_func(cancel_baton));
+
+ /* Revert this node (depth=empty) if it matches one of the changelists. */
+ if (svn_wc__internal_changelist_match(db, local_abspath, changelist_hash,
+ scratch_pool))
+ SVN_ERR(svn_wc__revert_internal(db, local_abspath,
+ svn_depth_empty, use_commit_times,
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ scratch_pool));
+
+ if (depth == svn_depth_empty)
+ return SVN_NO_ERROR;
+
+ iterpool = svn_pool_create(scratch_pool);
+
+ /* We can handle both depth=files and depth=immediates by setting
+ depth=empty here. We don't need to distinguish files and
+ directories when making the recursive call because directories
+ can never match a changelist, so making the recursive call for
+ directories when asked for depth=files is a no-op. */
+ if (depth == svn_depth_files || depth == svn_depth_immediates)
+ depth = svn_depth_empty;
+
+ SVN_ERR(svn_wc__db_read_children_of_working_node(&children, db,
+ local_abspath,
+ scratch_pool,
+ iterpool));
+ for (i = 0; i < children->nelts; ++i)
+ {
+ const char *child_abspath;
+
+ svn_pool_clear(iterpool);
+
+ child_abspath = svn_dirent_join(local_abspath,
+ APR_ARRAY_IDX(children, i,
+ const char *),
+ iterpool);
+
+ SVN_ERR(revert_changelist(db, child_abspath, depth,
+ use_commit_times, changelist_hash,
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ iterpool));
+ }
+
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+
+/* Does a partially recursive revert of LOCAL_ABSPATH to depth DEPTH
+ (which must be either svn_depth_files or svn_depth_immediates) by
+ doing a non-recursive revert on each permissible path. Notifies
+ all reverted paths.
+
+ ### This won't revert a copied dir with one level of children since
+ ### the non-recursive revert on the dir will fail. Not sure how a
+ ### partially recursive revert should handle actual-only nodes. */
+static svn_error_t *
+revert_partial(svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_depth_t depth,
+ svn_boolean_t use_commit_times,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool)
+{
+ apr_pool_t *iterpool;
+ const apr_array_header_t *children;
+ int i;
+
+ SVN_ERR_ASSERT(depth == svn_depth_files || depth == svn_depth_immediates);
+
+ if (cancel_func)
+ SVN_ERR(cancel_func(cancel_baton));
+
+ iterpool = svn_pool_create(scratch_pool);
+
+ /* Revert the root node itself (depth=empty), then move on to the
+ children. */
+ SVN_ERR(svn_wc__revert_internal(db, local_abspath, svn_depth_empty,
+ use_commit_times, cancel_func, cancel_baton,
+ notify_func, notify_baton, iterpool));
+
+ SVN_ERR(svn_wc__db_read_children_of_working_node(&children, db,
+ local_abspath,
+ scratch_pool,
+ iterpool));
+ for (i = 0; i < children->nelts; ++i)
+ {
+ const char *child_abspath;
+
+ svn_pool_clear(iterpool);
+
+ child_abspath = svn_dirent_join(local_abspath,
+ APR_ARRAY_IDX(children, i, const char *),
+ iterpool);
+
+ /* For svn_depth_files: don't revert non-files. */
+ if (depth == svn_depth_files)
+ {
+ svn_node_kind_t kind;
+
+ SVN_ERR(svn_wc__db_read_kind(&kind, db, child_abspath,
+ FALSE /* allow_missing */,
+ TRUE /* show_deleted */,
+ FALSE /* show_hidden */,
+ iterpool));
+ if (kind != svn_node_file)
+ continue;
+ }
+
+ /* Revert just this node (depth=empty). */
+ SVN_ERR(svn_wc__revert_internal(db, child_abspath,
+ svn_depth_empty, use_commit_times,
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ iterpool));
+ }
+
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_wc_revert4(svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ svn_depth_t depth,
+ svn_boolean_t use_commit_times,
+ const apr_array_header_t *changelist_filter,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool)
+{
+ if (changelist_filter && changelist_filter->nelts)
+ {
+ apr_hash_t *changelist_hash;
+
+ SVN_ERR(svn_hash_from_cstring_keys(&changelist_hash, changelist_filter,
+ scratch_pool));
+ return svn_error_trace(revert_changelist(wc_ctx->db, local_abspath,
+ depth, use_commit_times,
+ changelist_hash,
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ scratch_pool));
+ }
+
+ if (depth == svn_depth_empty || depth == svn_depth_infinity)
+ return svn_error_trace(svn_wc__revert_internal(wc_ctx->db, local_abspath,
+ depth, use_commit_times,
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ scratch_pool));
+
+ /* The user may expect svn_depth_files/svn_depth_immediates to work
+ on copied dirs with one level of children. It doesn't, the user
+ will get an error and will need to invoke an infinite revert. If
+ we identified those cases where svn_depth_infinity would not
+ revert too much we could invoke the recursive call above. */
+
+ if (depth == svn_depth_files || depth == svn_depth_immediates)
+ return svn_error_trace(revert_partial(wc_ctx->db, local_abspath,
+ depth, use_commit_times,
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ scratch_pool));
+
+ /* Bogus depth. Tell the caller. */
+ return svn_error_create(SVN_ERR_WC_INVALID_OPERATION_DEPTH, NULL, NULL);
+}
diff --git a/subversion/libsvn_wc/status.c b/subversion/libsvn_wc/status.c
index 51471d3..fa57b0a 100644
--- a/subversion/libsvn_wc/status.c
+++ b/subversion/libsvn_wc/status.c
@@ -53,6 +53,7 @@
#include "private/svn_wc_private.h"
#include "private/svn_fspath.h"
+#include "private/svn_editor.h"
@@ -241,70 +242,7 @@ struct file_baton
/** Code **/
-/* Fill in *INFO with the information it would contain if it were
- obtained from svn_wc__db_read_children_info. */
-static svn_error_t *
-read_info(const struct svn_wc__db_info_t **info,
- const char *local_abspath,
- svn_wc__db_t *db,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- struct svn_wc__db_info_t *mtb = apr_pcalloc(result_pool, sizeof(*mtb));
- const svn_checksum_t *checksum;
-
- SVN_ERR(svn_wc__db_read_info(&mtb->status, &mtb->kind,
- &mtb->revnum, &mtb->repos_relpath,
- &mtb->repos_root_url, &mtb->repos_uuid,
- &mtb->changed_rev, &mtb->changed_date,
- &mtb->changed_author, &mtb->depth,
- &checksum, NULL, NULL, NULL, NULL,
- NULL, &mtb->lock, &mtb->recorded_size,
- &mtb->recorded_mod_time, &mtb->changelist,
- &mtb->conflicted, &mtb->op_root,
- &mtb->had_props, &mtb->props_mod,
- &mtb->have_base, &mtb->have_more_work, NULL,
- db, local_abspath,
- result_pool, scratch_pool));
-
- SVN_ERR(svn_wc__db_wclocked(&mtb->locked, db, local_abspath, scratch_pool));
-
- /* Maybe we have to get some shadowed lock from BASE to make our test suite
- happy... (It might be completely unrelated, but...) */
- if (mtb->have_base
- && (mtb->status == svn_wc__db_status_added
- || mtb->status == svn_wc__db_status_deleted))
- {
- SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- &mtb->lock, NULL, NULL,
- db, local_abspath,
- result_pool, scratch_pool));
- }
-
- mtb->has_checksum = (checksum != NULL);
-
-#ifdef HAVE_SYMLINK
- if (mtb->kind == svn_wc__db_kind_file
- && (mtb->had_props || mtb->props_mod))
- {
- apr_hash_t *properties;
- if (mtb->props_mod)
- SVN_ERR(svn_wc__db_read_props(&properties, db, local_abspath,
- scratch_pool, scratch_pool));
- else
- SVN_ERR(svn_wc__db_read_pristine_props(&properties, db, local_abspath,
- scratch_pool, scratch_pool));
-
- mtb->special = (NULL != apr_hash_get(properties, SVN_PROP_SPECIAL,
- APR_HASH_KEY_STRING));
- }
-#endif
- *info = mtb;
-
- return SVN_NO_ERROR;
-}
/* Return *REPOS_RELPATH and *REPOS_ROOT_URL for LOCAL_ABSPATH using
information in INFO if available, falling back on
@@ -325,9 +263,9 @@ get_repos_root_url_relpath(const char **repos_relpath,
{
if (info->repos_relpath && info->repos_root_url)
{
- *repos_relpath = info->repos_relpath;
- *repos_root_url = info->repos_root_url;
- *repos_uuid = info->repos_uuid;
+ *repos_relpath = apr_pstrdup(result_pool, info->repos_relpath);
+ *repos_root_url = apr_pstrdup(result_pool, info->repos_root_url);
+ *repos_uuid = apr_pstrdup(result_pool, info->repos_uuid);
}
else if (parent_repos_relpath && parent_repos_root_url)
{
@@ -335,8 +273,8 @@ get_repos_root_url_relpath(const char **repos_relpath,
svn_dirent_basename(local_abspath,
NULL),
result_pool);
- *repos_root_url = parent_repos_root_url;
- *repos_uuid = parent_repos_uuid;
+ *repos_root_url = apr_pstrdup(result_pool, parent_repos_root_url);
+ *repos_uuid = apr_pstrdup(result_pool, parent_repos_uuid);
}
else if (info->status == svn_wc__db_status_added)
{
@@ -346,13 +284,42 @@ get_repos_root_url_relpath(const char **repos_relpath,
db, local_abspath,
result_pool, scratch_pool));
}
- else if (info->have_base)
+ else if (info->status == svn_wc__db_status_deleted
+ && !info->have_more_work
+ && info->have_base)
{
SVN_ERR(svn_wc__db_scan_base_repos(repos_relpath, repos_root_url,
repos_uuid,
db, local_abspath,
result_pool, scratch_pool));
}
+ else if (info->status == svn_wc__db_status_deleted)
+ {
+ const char *work_del_abspath;
+ const char *add_abspath;
+
+ /* Handles working DELETE and the special case where there is just
+ svn_wc__db_status_not_present in WORKING */
+
+ SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL, &work_del_abspath, NULL,
+ db, local_abspath,
+ scratch_pool, scratch_pool));
+
+ /* The parent of what has been deleted must be added */
+ add_abspath = svn_dirent_dirname(work_del_abspath, scratch_pool);
+
+ SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, repos_relpath,
+ repos_root_url, repos_uuid, NULL,
+ NULL, NULL, NULL,
+ db, add_abspath,
+ result_pool, scratch_pool));
+
+ *repos_relpath = svn_relpath_join(*repos_relpath,
+ svn_dirent_skip_ancestor(
+ add_abspath,
+ local_abspath),
+ result_pool);
+ }
else
{
*repos_relpath = NULL;
@@ -372,7 +339,7 @@ internal_status(svn_wc_status3_t **status,
/* Fill in *STATUS for LOCAL_ABSPATH, using DB. Allocate *STATUS in
RESULT_POOL and use SCRATCH_POOL for temporary allocations.
- PARENT_REPOS_ROOT_URL and PARENT_REPOS_RELPATH are the the repository root
+ PARENT_REPOS_ROOT_URL and PARENT_REPOS_RELPATH are the repository root
and repository relative path of the parent of LOCAL_ABSPATH or NULL if
LOCAL_ABSPATH doesn't have a versioned parent directory.
@@ -406,10 +373,7 @@ assemble_status(svn_wc_status3_t **status,
svn_boolean_t switched_p = FALSE;
svn_boolean_t copied = FALSE;
svn_boolean_t conflicted;
- svn_error_t *err;
- const char *repos_relpath;
- const char *repos_root_url;
- const char *repos_uuid;
+ const char *moved_from_abspath = NULL;
svn_filesize_t filesize = (dirent && (dirent->kind == svn_node_file))
? dirent->filesize
: SVN_INVALID_FILESIZE;
@@ -421,7 +385,8 @@ assemble_status(svn_wc_status3_t **status,
if (!info)
- SVN_ERR(read_info(&info, local_abspath, db, result_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_read_single_info(&info, db, local_abspath,
+ result_pool, scratch_pool));
if (!info->repos_relpath || !parent_repos_relpath)
switched_p = FALSE;
@@ -430,58 +395,48 @@ assemble_status(svn_wc_status3_t **status,
/* A node is switched if it doesn't have the implied repos_relpath */
const char *name = svn_relpath_skip_ancestor(parent_repos_relpath,
info->repos_relpath);
- switched_p = !name || (strcmp(name, svn_dirent_basename(local_abspath, NULL)) != 0);
+ switched_p = !name || (strcmp(name,
+ svn_dirent_basename(local_abspath, NULL))
+ != 0);
}
- /* Examine whether our target is missing or obstructed or missing.
-
- While we are not completely in single-db mode yet, data about
- obstructed or missing nodes might be incomplete here. This is
- reported by svn_wc_db_status_obstructed_XXXX. In single-db
- mode these obstructions are no longer reported and we have
- to detect obstructions by looking at the on disk status in DIRENT.
- */
- if (info->kind == svn_wc__db_kind_dir)
+ if (info->status == svn_wc__db_status_incomplete || info->incomplete)
{
- if (info->status == svn_wc__db_status_incomplete || info->incomplete)
- {
- /* Highest precedence. */
- node_status = svn_wc_status_incomplete;
- }
- else if (info->status == svn_wc__db_status_deleted)
- {
- node_status = svn_wc_status_deleted;
+ /* Highest precedence. */
+ node_status = svn_wc_status_incomplete;
+ }
+ else if (info->status == svn_wc__db_status_deleted)
+ {
+ node_status = svn_wc_status_deleted;
- if (!info->have_base)
- copied = TRUE;
- else
- SVN_ERR(svn_wc__internal_node_get_schedule(NULL, &copied,
- db, local_abspath,
- scratch_pool));
- }
- else if (!dirent || dirent->kind != svn_node_dir)
+ if (!info->have_base || info->have_more_work || info->copied)
+ copied = TRUE;
+ else if (!info->have_more_work && info->have_base)
+ copied = FALSE;
+ else
{
- /* A present or added directory should be on disk, so it is
- reported missing or obstructed. */
- if (!dirent || dirent->kind == svn_node_none)
- node_status = svn_wc_status_missing;
- else
- node_status = svn_wc_status_obstructed;
+ const char *work_del_abspath;
+
+ /* Find out details of our deletion. */
+ SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL,
+ &work_del_abspath, NULL,
+ db, local_abspath,
+ scratch_pool, scratch_pool));
+ if (work_del_abspath)
+ copied = TRUE; /* Working deletion */
}
}
else
{
- if (info->status == svn_wc__db_status_deleted)
- {
- node_status = svn_wc_status_deleted;
+ /* Examine whether our target is missing or obstructed. To detect
+ * obstructions, we have to look at the on-disk status in DIRENT. */
+ svn_node_kind_t expected_kind = (info->kind == svn_node_dir)
+ ? svn_node_dir
+ : svn_node_file;
- SVN_ERR(svn_wc__internal_node_get_schedule(NULL, &copied,
- db, local_abspath,
- scratch_pool));
- }
- else if (!dirent || dirent->kind != svn_node_file)
+ if (!dirent || dirent->kind != expected_kind)
{
- /* A present or added file should be on disk, so it is
+ /* A present or added node should be on disk, so it is
reported missing or obstructed. */
if (!dirent || dirent->kind == svn_node_none)
node_status = svn_wc_status_missing;
@@ -504,7 +459,7 @@ assemble_status(svn_wc_status3_t **status,
If it was changed, then the subdir is incomplete or missing/obstructed.
*/
- if (info->kind != svn_wc__db_kind_dir
+ if (info->kind != svn_node_dir
&& node_status == svn_wc_status_normal)
{
svn_boolean_t text_modified_p = FALSE;
@@ -516,8 +471,8 @@ assemble_status(svn_wc_status3_t **status,
precedence over M. */
/* If the entry is a file, check for textual modifications */
- if ((info->kind == svn_wc__db_kind_file
- || info->kind == svn_wc__db_kind_symlink)
+ if ((info->kind == svn_node_file
+ || info->kind == svn_node_symlink)
#ifdef HAVE_SYMLINK
&& (info->special == (dirent && dirent->special))
#endif /* HAVE_SYMLINK */
@@ -533,12 +488,13 @@ assemble_status(svn_wc_status3_t **status,
else if (ignore_text_mods
||(dirent
&& info->recorded_size != SVN_INVALID_FILESIZE
- && info->recorded_mod_time != 0
+ && info->recorded_time != 0
&& info->recorded_size == dirent->filesize
- && info->recorded_mod_time == dirent->mtime))
+ && info->recorded_time == dirent->mtime))
text_modified_p = FALSE;
else
{
+ svn_error_t *err;
err = svn_wc__internal_file_modified_p(&text_modified_p,
db, local_abspath,
FALSE, scratch_pool);
@@ -590,31 +546,59 @@ assemble_status(svn_wc_status3_t **status,
override a C text status.*/
if (info->status == svn_wc__db_status_added)
{
+ copied = info->copied;
if (!info->op_root)
- copied = TRUE; /* And keep status normal */
- else if (info->kind == svn_wc__db_kind_file
- && !info->have_base && !info->have_more_work)
+ { /* Keep status normal */ }
+ else if (!info->have_base && !info->have_more_work)
{
/* Simple addition or copy, no replacement */
node_status = svn_wc_status_added;
- /* If an added node has a pristine file, it was copied */
- copied = info->has_checksum;
}
else
{
- svn_wc_schedule_t schedule;
- SVN_ERR(svn_wc__internal_node_get_schedule(&schedule, &copied,
- db, local_abspath,
- scratch_pool));
-
- if (schedule == svn_wc_schedule_add)
+ svn_wc__db_status_t below_working;
+ svn_boolean_t have_base, have_work;
+
+ SVN_ERR(svn_wc__db_info_below_working(&have_base, &have_work,
+ &below_working,
+ db, local_abspath,
+ scratch_pool));
+
+ /* If the node is not present or deleted (read: not present
+ in working), then the node is not a replacement */
+ if (below_working != svn_wc__db_status_not_present
+ && below_working != svn_wc__db_status_deleted)
+ {
+ node_status = svn_wc_status_replaced;
+ }
+ else
node_status = svn_wc_status_added;
- else if (schedule == svn_wc_schedule_replace)
- node_status = svn_wc_status_replaced;
+ }
+
+ /* Get moved-from info (only for potential op-roots of a move). */
+ if (info->moved_here && info->op_root)
+ {
+ svn_error_t *err;
+ err = svn_wc__db_scan_moved(&moved_from_abspath, NULL, NULL, NULL,
+ db, local_abspath,
+ result_pool, scratch_pool);
+
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_WC_PATH_UNEXPECTED_STATUS)
+ return svn_error_trace(err);
+
+ svn_error_clear(err);
+ /* We are no longer moved... So most likely we are somehow
+ changing the db for things like resolving conflicts. */
+
+ moved_from_abspath = NULL;
+ }
}
}
}
+
if (node_status == svn_wc_status_normal)
node_status = text_status;
@@ -640,28 +624,20 @@ assemble_status(svn_wc_status3_t **status,
return SVN_NO_ERROR;
}
- SVN_ERR(get_repos_root_url_relpath(&repos_relpath, &repos_root_url,
- &repos_uuid, info,
- parent_repos_relpath,
- parent_repos_root_url,
- parent_repos_uuid,
- db, local_abspath,
- scratch_pool, scratch_pool));
-
/* 6. Build and return a status structure. */
stat = apr_pcalloc(result_pool, sizeof(**status));
switch (info->kind)
{
- case svn_wc__db_kind_dir:
+ case svn_node_dir:
stat->kind = svn_node_dir;
break;
- case svn_wc__db_kind_file:
- case svn_wc__db_kind_symlink:
+ case svn_node_file:
+ case svn_node_symlink:
stat->kind = svn_node_file;
break;
- case svn_wc__db_kind_unknown:
+ case svn_node_unknown:
default:
stat->kind = svn_node_unknown;
}
@@ -678,7 +654,8 @@ assemble_status(svn_wc_status3_t **status,
stat->repos_lock = repos_lock;
stat->revision = info->revnum;
stat->changed_rev = info->changed_rev;
- stat->changed_author = info->changed_author;
+ if (info->changed_author)
+ stat->changed_author = apr_pstrdup(result_pool, info->changed_author);
stat->changed_date = info->changed_date;
stat->ood_kind = svn_node_none;
@@ -686,10 +663,19 @@ assemble_status(svn_wc_status3_t **status,
stat->ood_changed_date = 0;
stat->ood_changed_author = NULL;
+ SVN_ERR(get_repos_root_url_relpath(&stat->repos_relpath,
+ &stat->repos_root_url,
+ &stat->repos_uuid, info,
+ parent_repos_relpath,
+ parent_repos_root_url,
+ parent_repos_uuid,
+ db, local_abspath,
+ result_pool, scratch_pool));
+
if (info->lock)
{
- svn_lock_t *lck = apr_pcalloc(result_pool, sizeof(*lck));
- lck->path = repos_relpath;
+ svn_lock_t *lck = svn_lock_create(result_pool);
+ lck->path = stat->repos_relpath;
lck->token = info->lock->token;
lck->owner = info->lock->owner;
lck->comment = info->lock->comment;
@@ -702,10 +688,17 @@ assemble_status(svn_wc_status3_t **status,
stat->locked = info->locked;
stat->conflicted = conflicted;
stat->versioned = TRUE;
- stat->changelist = info->changelist;
- stat->repos_root_url = repos_root_url;
- stat->repos_relpath = repos_relpath;
- stat->repos_uuid = repos_uuid;
+ if (info->changelist)
+ stat->changelist = apr_pstrdup(result_pool, info->changelist);
+
+ stat->moved_from_abspath = moved_from_abspath;
+
+ /* ### TODO: Handle multiple moved_to values properly */
+ if (info->moved_to)
+ stat->moved_to_abspath = apr_pstrdup(result_pool,
+ info->moved_to->moved_to_abspath);
+
+ stat->file_external = info->file_external;
*status = stat;
@@ -817,10 +810,9 @@ send_status_structure(const struct walk_status_baton *wb,
{
/* repos_lock still uses the deprecated filesystem absolute path
format */
- repos_lock = apr_hash_get(wb->repos_locks,
- svn_fspath__join("/", repos_relpath,
- scratch_pool),
- APR_HASH_KEY_STRING);
+ repos_lock = svn_hash_gets(wb->repos_locks,
+ svn_fspath__join("/", repos_relpath,
+ scratch_pool));
}
}
@@ -838,9 +830,10 @@ send_status_structure(const struct walk_status_baton *wb,
}
-/* Store in PATTERNS a list of all svn:ignore properties from
- the working copy directory, including the default ignores
- passed in as IGNORES.
+/* Store in *PATTERNS a list of ignores collected from svn:ignore properties
+ on LOCAL_ABSPATH and svn:global-ignores on LOCAL_ABSPATH and its
+ repository ancestors (as cached in the working copy), including the default
+ ignores passed in as IGNORES.
Upon return, *PATTERNS will contain zero or more (const char *)
patterns from the value of the SVN_PROP_IGNORE property set on
@@ -849,7 +842,7 @@ send_status_structure(const struct walk_status_baton *wb,
IGNORES is a list of patterns to include; typically this will
be the default ignores as, for example, specified in a config file.
- LOCAL_ABSPATH and DB control how to access the ignore information.
+ DB, LOCAL_ABSPATH is used to access the working copy.
Allocate results in RESULT_POOL, temporary stuffs in SCRATCH_POOL.
@@ -864,7 +857,9 @@ collect_ignore_patterns(apr_array_header_t **patterns,
apr_pool_t *scratch_pool)
{
int i;
- const svn_string_t *value;
+ apr_hash_t *props;
+ apr_array_header_t *inherited_props;
+ svn_error_t *err;
/* ### assert we are passed a directory? */
@@ -878,12 +873,47 @@ collect_ignore_patterns(apr_array_header_t **patterns,
ignore);
}
- /* Then add any svn:ignore globs to the PATTERNS array. */
- SVN_ERR(svn_wc__internal_propget(&value, db, local_abspath, SVN_PROP_IGNORE,
- scratch_pool, scratch_pool));
- if (value != NULL)
- svn_cstring_split_append(*patterns, value->data, "\n\r", FALSE,
- result_pool);
+ err = svn_wc__db_read_inherited_props(&inherited_props, &props,
+ db, local_abspath,
+ SVN_PROP_INHERITABLE_IGNORES,
+ scratch_pool, scratch_pool);
+
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_WC_PATH_UNEXPECTED_STATUS)
+ return svn_error_trace(err);
+
+ svn_error_clear(err);
+ return SVN_NO_ERROR;
+ }
+
+ if (props)
+ {
+ const svn_string_t *value;
+
+ value = svn_hash_gets(props, SVN_PROP_IGNORE);
+ if (value)
+ svn_cstring_split_append(*patterns, value->data, "\n\r", FALSE,
+ result_pool);
+
+ value = svn_hash_gets(props, SVN_PROP_INHERITABLE_IGNORES);
+ if (value)
+ svn_cstring_split_append(*patterns, value->data, "\n\r", FALSE,
+ result_pool);
+ }
+
+ for (i = 0; i < inherited_props->nelts; i++)
+ {
+ svn_prop_inherited_item_t *elt = APR_ARRAY_IDX(
+ inherited_props, i, svn_prop_inherited_item_t *);
+ const svn_string_t *value;
+
+ value = svn_hash_gets(elt->prop_hash, SVN_PROP_INHERITABLE_IGNORES);
+
+ if (value)
+ svn_cstring_split_append(*patterns, value->data,
+ "\n\r", FALSE, result_pool);
+ }
return SVN_NO_ERROR;
}
@@ -901,7 +931,7 @@ is_external_path(apr_hash_t *externals,
apr_hash_index_t *hi;
/* First try: does the path exist as a key in the hash? */
- if (apr_hash_get(externals, local_abspath, APR_HASH_KEY_STRING))
+ if (svn_hash_gets(externals, local_abspath))
return TRUE;
/* Failing that, we need to check if any external is a child of
@@ -928,13 +958,12 @@ is_external_path(apr_hash_t *externals,
requested. PATH_KIND is the node kind of NAME as determined by the
caller. PATH_SPECIAL is the special status of the path, also determined
by the caller.
- PATTERNS points to a list of filename patterns which are marked as
- ignored. None of these parameter may be NULL. EXTERNALS is a hash
- of known externals definitions for this status run.
+ PATTERNS points to a list of filename patterns which are marked as ignored.
+ None of these parameter may be NULL.
- If NO_IGNORE is non-zero, the item will be added regardless of
+ If NO_IGNORE is TRUE, the item will be added regardless of
whether it is ignored; otherwise we will only add the item if it
- does not match any of the patterns in PATTERNS.
+ does not match any of the patterns in PATTERN or INHERITED_IGNORES.
Allocate everything in POOL.
*/
@@ -952,14 +981,13 @@ send_unversioned_item(const struct walk_status_baton *wb,
svn_boolean_t is_ignored;
svn_boolean_t is_external;
svn_wc_status3_t *status;
+ const char *base_name = svn_dirent_basename(local_abspath, NULL);
- is_ignored = svn_wc_match_ignore_list(
- svn_dirent_basename(local_abspath, NULL),
- patterns, scratch_pool);
-
+ is_ignored = svn_wc_match_ignore_list(base_name, patterns, scratch_pool);
SVN_ERR(assemble_unversioned(&status,
wb->db, local_abspath,
- dirent, tree_conflicted, is_ignored,
+ dirent, tree_conflicted,
+ is_ignored,
scratch_pool, scratch_pool));
is_external = is_external_path(wb->externals, local_abspath, scratch_pool);
@@ -974,36 +1002,198 @@ send_unversioned_item(const struct walk_status_baton *wb,
/* If we aren't ignoring it, or if it's an externals path, pass this
entry to the status func. */
- if (no_ignore || (! is_ignored) || is_external)
+ if (no_ignore
+ || !is_ignored
+ || is_external)
return svn_error_trace((*status_func)(status_baton, local_abspath,
status, scratch_pool));
return SVN_NO_ERROR;
}
-/* Send svn_wc_status3_t * structures for the directory LOCAL_ABSPATH and
- for all its entries through STATUS_FUNC/STATUS_BATON, or, if SELECTED
- is non-NULL, only for that directory entry.
+static svn_error_t *
+get_dir_status(const struct walk_status_baton *wb,
+ const char *local_abspath,
+ svn_boolean_t skip_this_dir,
+ const char *parent_repos_root_url,
+ const char *parent_repos_relpath,
+ const char *parent_repos_uuid,
+ const struct svn_wc__db_info_t *dir_info,
+ const svn_io_dirent2_t *dirent,
+ const apr_array_header_t *ignore_patterns,
+ svn_depth_t depth,
+ svn_boolean_t get_all,
+ svn_boolean_t no_ignore,
+ svn_wc_status_func4_t status_func,
+ void *status_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool);
- PARENT_ENTRY is the entry for the parent of the directory or NULL
- if LOCAL_ABSPATH is a working copy root.
+/* Send out a status structure according to the information gathered on one
+ * child node. (Basically this function is the guts of the loop in
+ * get_dir_status() and of get_child_status().)
+ *
+ * Send a status structure of LOCAL_ABSPATH. PARENT_ABSPATH must be the
+ * dirname of LOCAL_ABSPATH.
+ *
+ * INFO should reflect the information on LOCAL_ABSPATH; LOCAL_ABSPATH must
+ * be an unversioned file or dir, or a versioned file. For versioned
+ * directories use get_dir_status() instead.
+ *
+ * INFO may be NULL for an unversioned node. If such node has a tree conflict,
+ * UNVERSIONED_TREE_CONFLICTED may be set to TRUE. If INFO is non-NULL,
+ * UNVERSIONED_TREE_CONFLICTED is ignored.
+ *
+ * DIRENT should reflect LOCAL_ABSPATH's dirent information.
+ *
+ * DIR_REPOS_* should reflect LOCAL_ABSPATH's parent URL, i.e. LOCAL_ABSPATH's
+ * URL treated with svn_uri_dirname(). ### TODO verify this (externals)
+ *
+ * If *COLLECTED_IGNORE_PATTERNS is NULL and ignore patterns are needed in this
+ * call, then *COLLECTED_IGNORE_PATTERNS will be set to an apr_array_header_t*
+ * containing all ignore patterns, as returned by collect_ignore_patterns() on
+ * PARENT_ABSPATH and IGNORE_PATTERNS. If *COLLECTED_IGNORE_PATTERNS is passed
+ * non-NULL, it is assumed it already holds those results.
+ * This speeds up repeated calls with the same PARENT_ABSPATH.
+ *
+ * *COLLECTED_IGNORE_PATTERNS will be allocated in RESULT_POOL. All other
+ * allocations are made in SCRATCH_POOL.
+ *
+ * The remaining parameters correspond to get_dir_status(). */
+static svn_error_t *
+one_child_status(const struct walk_status_baton *wb,
+ const char *local_abspath,
+ const char *parent_abspath,
+ const struct svn_wc__db_info_t *info,
+ const svn_io_dirent2_t *dirent,
+ const char *dir_repos_root_url,
+ const char *dir_repos_relpath,
+ const char *dir_repos_uuid,
+ svn_boolean_t unversioned_tree_conflicted,
+ apr_array_header_t **collected_ignore_patterns,
+ const apr_array_header_t *ignore_patterns,
+ svn_depth_t depth,
+ svn_boolean_t get_all,
+ svn_boolean_t no_ignore,
+ svn_wc_status_func4_t status_func,
+ void *status_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_boolean_t conflicted = info ? info->conflicted
+ : unversioned_tree_conflicted;
+
+ if (info
+ && info->status != svn_wc__db_status_not_present
+ && info->status != svn_wc__db_status_excluded
+ && info->status != svn_wc__db_status_server_excluded
+ && !(info->kind == svn_node_unknown
+ && info->status == svn_wc__db_status_normal))
+ {
+ if (depth == svn_depth_files
+ && info->kind == svn_node_dir)
+ {
+ return SVN_NO_ERROR;
+ }
+
+ SVN_ERR(send_status_structure(wb, local_abspath,
+ dir_repos_root_url,
+ dir_repos_relpath,
+ dir_repos_uuid,
+ info, dirent, get_all,
+ status_func, status_baton,
+ scratch_pool));
+
+ /* Descend in subdirectories. */
+ if (depth == svn_depth_infinity
+ && info->kind == svn_node_dir)
+ {
+ SVN_ERR(get_dir_status(wb, local_abspath, TRUE,
+ dir_repos_root_url, dir_repos_relpath,
+ dir_repos_uuid, info,
+ dirent, ignore_patterns,
+ svn_depth_infinity, get_all,
+ no_ignore,
+ status_func, status_baton,
+ cancel_func, cancel_baton,
+ scratch_pool));
+ }
+
+ return SVN_NO_ERROR;
+ }
+
+ /* If conflicted, fall right through to unversioned.
+ * With depth_files, show all conflicts, even if their report is only
+ * about directories. A tree conflict may actually report two different
+ * kinds, so it's not so easy to define what depth=files means. We could go
+ * look up the kinds in the conflict ... just show all. */
+ if (! conflicted)
+ {
+ /* Selected node, but not found */
+ if (dirent == NULL)
+ return SVN_NO_ERROR;
+
+ if (depth == svn_depth_files && dirent->kind == svn_node_dir)
+ return SVN_NO_ERROR;
+
+ if (svn_wc_is_adm_dir(svn_dirent_basename(local_abspath, NULL),
+ scratch_pool))
+ return SVN_NO_ERROR;
+ }
+
+ /* The node exists on disk but there is no versioned information about it,
+ * or it doesn't exist but is a tree conflicted path or should be
+ * reported not-present. */
+
+ /* Why pass ignore patterns on a tree conflicted node, even if it should
+ * always show up in clients' status reports anyway? Because the calling
+ * client decides whether to ignore, and thus this flag needs to be
+ * determined. For example, in 'svn status', plain unversioned nodes show
+ * as '? C', where ignored ones show as 'I C'. */
+
+ if (ignore_patterns && ! *collected_ignore_patterns)
+ SVN_ERR(collect_ignore_patterns(collected_ignore_patterns,
+ wb->db, parent_abspath, ignore_patterns,
+ result_pool, scratch_pool));
+
+ SVN_ERR(send_unversioned_item(wb,
+ local_abspath,
+ dirent,
+ conflicted,
+ *collected_ignore_patterns,
+ no_ignore,
+ status_func, status_baton,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* Send svn_wc_status3_t * structures for the directory LOCAL_ABSPATH and
+ for all its child nodes (according to DEPTH) through STATUS_FUNC /
+ STATUS_BATON.
If SKIP_THIS_DIR is TRUE, the directory's own status will not be reported.
- However, upon recursing, all subdirs *will* be reported, regardless of this
+ All subdirs reached by recursion will be reported regardless of this
parameter's value.
- DIRENT is LOCAL_ABSPATH's own dirent and is only needed if it is reported,
- so if SKIP_THIS_DIR or SELECTED is not-NULL DIRENT can be left NULL.
+ PARENT_REPOS_* parameters can be set to refer to LOCAL_ABSPATH's parent's
+ URL, i.e. the URL the WC reflects at the dirname of LOCAL_ABSPATH, to avoid
+ retrieving them again. Otherwise they must be NULL.
DIR_INFO can be set to the information of LOCAL_ABSPATH, to avoid retrieving
- it again.
+ it again. Otherwise it must be NULL.
+
+ DIRENT is LOCAL_ABSPATH's own dirent and is only needed if it is reported,
+ so if SKIP_THIS_DIR is TRUE, DIRENT can be left NULL.
Other arguments are the same as those passed to
svn_wc_get_status_editor5(). */
static svn_error_t *
get_dir_status(const struct walk_status_baton *wb,
const char *local_abspath,
- const char *selected,
svn_boolean_t skip_this_dir,
const char *parent_repos_root_url,
const char *parent_repos_relpath,
@@ -1024,9 +1214,9 @@ get_dir_status(const struct walk_status_baton *wb,
const char *dir_repos_relpath;
const char *dir_repos_uuid;
apr_hash_t *dirents, *nodes, *conflicts, *all_children;
- apr_array_header_t *patterns = NULL;
apr_array_header_t *sorted_children;
- apr_pool_t *iterpool, *subpool = svn_pool_create(scratch_pool);
+ apr_array_header_t *collected_ignore_patterns = NULL;
+ apr_pool_t *iterpool;
svn_error_t *err;
int i;
@@ -1036,83 +1226,78 @@ get_dir_status(const struct walk_status_baton *wb,
if (depth == svn_depth_unknown)
depth = svn_depth_infinity;
- iterpool = svn_pool_create(subpool);
+ iterpool = svn_pool_create(scratch_pool);
- err = svn_io_get_dirents3(&dirents, local_abspath, FALSE, subpool, iterpool);
+ err = svn_io_get_dirents3(&dirents, local_abspath, FALSE, scratch_pool,
+ iterpool);
if (err
&& (APR_STATUS_IS_ENOENT(err->apr_err)
|| SVN__APR_STATUS_IS_ENOTDIR(err->apr_err)))
{
svn_error_clear(err);
- dirents = apr_hash_make(subpool);
+ dirents = apr_hash_make(scratch_pool);
}
else
SVN_ERR(err);
if (!dir_info)
- SVN_ERR(read_info(&dir_info, local_abspath, wb->db,
- subpool, iterpool));
+ SVN_ERR(svn_wc__db_read_single_info(&dir_info, wb->db, local_abspath,
+ scratch_pool, iterpool));
SVN_ERR(get_repos_root_url_relpath(&dir_repos_relpath, &dir_repos_root_url,
&dir_repos_uuid, dir_info,
parent_repos_relpath,
parent_repos_root_url, parent_repos_uuid,
wb->db, local_abspath,
- subpool, iterpool));
- if (selected == NULL)
- {
- /* Create a hash containing all children. The source hashes
- don't all map the same types, but only the keys of the result
- hash are subsequently used. */
- SVN_ERR(svn_wc__db_read_children_info(&nodes, &conflicts,
- wb->db, local_abspath,
- subpool, iterpool));
+ scratch_pool, iterpool));
- all_children = apr_hash_overlay(subpool, nodes, dirents);
- if (apr_hash_count(conflicts) > 0)
- all_children = apr_hash_overlay(subpool, conflicts, all_children);
- }
- else
- {
- const struct svn_wc__db_info_t *info;
- const char *selected_abspath = svn_dirent_join(local_abspath, selected,
- iterpool);
- /* Create a hash containing just selected */
- all_children = apr_hash_make(subpool);
- nodes = apr_hash_make(subpool);
- conflicts = apr_hash_make(subpool);
+ /* Create a hash containing all children. The source hashes
+ don't all map the same types, but only the keys of the result
+ hash are subsequently used. */
+ SVN_ERR(svn_wc__db_read_children_info(&nodes, &conflicts,
+ wb->db, local_abspath,
+ scratch_pool, iterpool));
- err = read_info(&info, selected_abspath, wb->db, subpool, iterpool);
+ all_children = apr_hash_overlay(scratch_pool, nodes, dirents);
+ if (apr_hash_count(conflicts) > 0)
+ all_children = apr_hash_overlay(scratch_pool, conflicts, all_children);
- if (err)
- {
- if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND)
- return svn_error_trace(err);
- svn_error_clear(err);
- /* The node is neither a tree conflict nor a versioned node */
- }
- else
+ /* Handle "this-dir" first. */
+ if (! skip_this_dir)
+ {
+ /* This code is not conditional on HAVE_SYMLINK as some systems that do
+ not allow creating symlinks (!HAVE_SYMLINK) can still encounter
+ symlinks (or in case of Windows also 'Junctions') created by other
+ methods.
+
+ Without this block a working copy in the root of a junction is
+ reported as an obstruction, because the junction itself is reported as
+ special.
+
+ Systems that have no symlink support at all, would always see
+ dirent->special as FALSE, so even there enabling this code shouldn't
+ produce problems.
+ */
+ if (dirent->special)
{
- if (!info->conflicted
- || info->status != svn_wc__db_status_normal
- || info->kind != svn_wc__db_kind_unknown)
- {
- /* The node is a normal versioned node */
- apr_hash_set(nodes, selected, APR_HASH_KEY_STRING, info);
- }
-
- /* Drop it in the list of possible conflicts */
- if (info->conflicted)
- apr_hash_set(conflicts, selected, APR_HASH_KEY_STRING, info);
+ svn_io_dirent2_t *this_dirent = svn_io_dirent2_dup(dirent, iterpool);
+
+ /* We're being pointed to "this-dir" via a symlink.
+ * Get the real node kind and pretend the path is not a symlink.
+ * This prevents send_status_structure() from treating this-dir
+ * as a directory obstructed by a file. */
+ SVN_ERR(svn_io_check_resolved_path(local_abspath,
+ &this_dirent->kind, iterpool));
+ this_dirent->special = FALSE;
+ SVN_ERR(send_status_structure(wb, local_abspath,
+ parent_repos_root_url,
+ parent_repos_relpath,
+ parent_repos_uuid,
+ dir_info, this_dirent, get_all,
+ status_func, status_baton,
+ iterpool));
}
-
- apr_hash_set(all_children, selected, APR_HASH_KEY_STRING, selected);
- }
-
- if (!selected)
- {
- /* Handle "this-dir" first. */
- if (! skip_this_dir)
+ else
SVN_ERR(send_status_structure(wb, local_abspath,
parent_repos_root_url,
parent_repos_relpath,
@@ -1120,24 +1305,24 @@ get_dir_status(const struct walk_status_baton *wb,
dir_info, dirent, get_all,
status_func, status_baton,
iterpool));
-
- /* If the requested depth is empty, we only need status on this-dir. */
- if (depth == svn_depth_empty)
- return SVN_NO_ERROR;
}
+ /* If the requested depth is empty, we only need status on this-dir. */
+ if (depth == svn_depth_empty)
+ return SVN_NO_ERROR;
+
/* Walk all the children of this directory. */
sorted_children = svn_sort__hash(all_children,
svn_sort_compare_items_lexically,
- subpool);
+ scratch_pool);
for (i = 0; i < sorted_children->nelts; i++)
{
const void *key;
apr_ssize_t klen;
- const char *node_abspath;
- svn_io_dirent2_t *dirent_p;
- const struct svn_wc__db_info_t *info;
svn_sort__item_t item;
+ const char *child_abspath;
+ svn_io_dirent2_t *child_dirent;
+ const struct svn_wc__db_info_t *child_info;
svn_pool_clear(iterpool);
@@ -1145,97 +1330,113 @@ get_dir_status(const struct walk_status_baton *wb,
key = item.key;
klen = item.klen;
- node_abspath = svn_dirent_join(local_abspath, key, iterpool);
- dirent_p = apr_hash_get(dirents, key, klen);
-
- info = apr_hash_get(nodes, key, klen);
- if (info)
- {
- if (info->status != svn_wc__db_status_not_present
- && info->status != svn_wc__db_status_excluded
- && info->status != svn_wc__db_status_server_excluded)
- {
- if (depth == svn_depth_files
- && info->kind == svn_wc__db_kind_dir)
- {
- continue;
- }
-
- SVN_ERR(send_status_structure(wb, node_abspath,
- dir_repos_root_url,
- dir_repos_relpath,
- dir_repos_uuid,
- info, dirent_p, get_all,
- status_func, status_baton,
- iterpool));
-
- /* Descend in subdirectories. */
- if (depth == svn_depth_infinity
- && info->kind == svn_wc__db_kind_dir)
- {
- SVN_ERR(get_dir_status(wb, node_abspath, NULL, TRUE,
- dir_repos_root_url, dir_repos_relpath,
- dir_repos_uuid, info,
- dirent_p, ignore_patterns,
- svn_depth_infinity, get_all,
- no_ignore,
- status_func, status_baton,
- cancel_func, cancel_baton,
- iterpool));
- }
-
- continue;
- }
- }
-
- if (apr_hash_get(conflicts, key, klen))
- {
- /* Tree conflict */
-
- if (ignore_patterns && ! patterns)
- SVN_ERR(collect_ignore_patterns(&patterns, wb->db, local_abspath,
- ignore_patterns, subpool,
- iterpool));
-
- SVN_ERR(send_unversioned_item(wb,
- node_abspath,
- dirent_p, TRUE,
- patterns,
- no_ignore,
- status_func,
- status_baton,
- iterpool));
+ child_abspath = svn_dirent_join(local_abspath, key, iterpool);
+ child_dirent = apr_hash_get(dirents, key, klen);
+ child_info = apr_hash_get(nodes, key, klen);
+
+ SVN_ERR(one_child_status(wb,
+ child_abspath,
+ local_abspath,
+ child_info,
+ child_dirent,
+ dir_repos_root_url,
+ dir_repos_relpath,
+ dir_repos_uuid,
+ apr_hash_get(conflicts, key, klen) != NULL,
+ &collected_ignore_patterns,
+ ignore_patterns,
+ depth,
+ get_all,
+ no_ignore,
+ status_func,
+ status_baton,
+ cancel_func,
+ cancel_baton,
+ scratch_pool,
+ iterpool));
+ }
- continue;
- }
+ /* Destroy our subpools. */
+ svn_pool_destroy(iterpool);
- /* Unversioned node */
- if (dirent_p == NULL)
- continue; /* Selected node, but not found */
+ return SVN_NO_ERROR;
+}
- if (depth == svn_depth_files && dirent_p->kind == svn_node_dir)
- continue;
+/* Send an svn_wc_status3_t * structure for the versioned file, or for the
+ * unversioned file or directory, LOCAL_ABSPATH, which is not ignored (an
+ * explicit target). Does not recurse.
+ *
+ * INFO should reflect LOCAL_ABSPATH's information, but should be NULL for
+ * unversioned nodes. An unversioned and tree-conflicted node however should
+ * pass a non-NULL INFO as returned by read_info() (INFO->CONFLICTED = TRUE).
+ *
+ * DIRENT should reflect LOCAL_ABSPATH.
+ *
+ * All allocations made in SCRATCH_POOL.
+ *
+ * The remaining parameters correspond to get_dir_status(). */
+static svn_error_t *
+get_child_status(const struct walk_status_baton *wb,
+ const char *local_abspath,
+ const struct svn_wc__db_info_t *info,
+ const svn_io_dirent2_t *dirent,
+ const apr_array_header_t *ignore_patterns,
+ svn_boolean_t get_all,
+ svn_wc_status_func4_t status_func,
+ void *status_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
+{
+ const char *dir_repos_root_url;
+ const char *dir_repos_relpath;
+ const char *dir_repos_uuid;
+ const struct svn_wc__db_info_t *dir_info;
+ apr_array_header_t *collected_ignore_patterns = NULL;
+ const char *parent_abspath = svn_dirent_dirname(local_abspath,
+ scratch_pool);
- if (svn_wc_is_adm_dir(key, iterpool))
- continue;
+ if (cancel_func)
+ SVN_ERR(cancel_func(cancel_baton));
- if (ignore_patterns && ! patterns)
- SVN_ERR(collect_ignore_patterns(&patterns, wb->db, local_abspath,
- ignore_patterns, subpool,
- iterpool));
+ if (dirent->kind == svn_node_none)
+ dirent = NULL;
- SVN_ERR(send_unversioned_item(wb,
- node_abspath,
- dirent_p, FALSE,
- patterns,
- no_ignore || selected,
- status_func, status_baton,
- iterpool));
- }
+ SVN_ERR(svn_wc__db_read_single_info(&dir_info,
+ wb->db, parent_abspath,
+ scratch_pool, scratch_pool));
- /* Destroy our subpools. */
- svn_pool_destroy(subpool);
+ SVN_ERR(get_repos_root_url_relpath(&dir_repos_relpath, &dir_repos_root_url,
+ &dir_repos_uuid, dir_info,
+ NULL, NULL, NULL,
+ wb->db, parent_abspath,
+ scratch_pool, scratch_pool));
+ /* An unversioned node with a tree conflict will see an INFO != NULL here,
+ * in which case the FALSE passed for UNVERSIONED_TREE_CONFLICTED has no
+ * effect and INFO->CONFLICTED counts.
+ * ### Maybe svn_wc__db_read_children_info() and read_info() should be more
+ * ### alike? */
+ SVN_ERR(one_child_status(wb,
+ local_abspath,
+ parent_abspath,
+ info,
+ dirent,
+ dir_repos_root_url,
+ dir_repos_relpath,
+ dir_repos_uuid,
+ FALSE, /* unversioned_tree_conflicted */
+ &collected_ignore_patterns,
+ ignore_patterns,
+ svn_depth_empty,
+ get_all,
+ TRUE, /* no_ignore. This is an explicit target. */
+ status_func,
+ status_baton,
+ cancel_func,
+ cancel_baton,
+ scratch_pool,
+ scratch_pool));
return SVN_NO_ERROR;
}
@@ -1254,9 +1455,9 @@ hash_stash(void *baton,
{
apr_hash_t *stat_hash = baton;
apr_pool_t *hash_pool = apr_hash_pool_get(stat_hash);
- assert(! apr_hash_get(stat_hash, path, APR_HASH_KEY_STRING));
- apr_hash_set(stat_hash, apr_pstrdup(hash_pool, path),
- APR_HASH_KEY_STRING, svn_wc_dup_status3(status, hash_pool));
+ assert(! svn_hash_gets(stat_hash, path));
+ svn_hash_sets(stat_hash, apr_pstrdup(hash_pool, path),
+ svn_wc_dup_status3(status, hash_pool));
return SVN_NO_ERROR;
}
@@ -1297,7 +1498,6 @@ tweak_statushash(void *baton,
svn_boolean_t is_dir_baton,
svn_wc__db_t *db,
const char *local_abspath,
- svn_boolean_t is_dir,
enum svn_wc_status_kind repos_node_status,
enum svn_wc_status_kind repos_text_status,
enum svn_wc_status_kind repos_prop_status,
@@ -1316,7 +1516,7 @@ tweak_statushash(void *baton,
pool = apr_hash_pool_get(statushash);
/* Is PATH already a hash-key? */
- statstruct = apr_hash_get(statushash, local_abspath, APR_HASH_KEY_STRING);
+ statstruct = svn_hash_gets(statushash, local_abspath);
/* If not, make it so. */
if (! statstruct)
@@ -1339,8 +1539,7 @@ tweak_statushash(void *baton,
SVN_ERR(internal_status(&statstruct, db, local_abspath, pool,
scratch_pool));
statstruct->repos_lock = repos_lock;
- apr_hash_set(statushash, apr_pstrdup(pool, local_abspath),
- APR_HASH_KEY_STRING, statstruct);
+ svn_hash_sets(statushash, apr_pstrdup(pool, local_abspath), statstruct);
}
/* Merge a repos "delete" + "add" into a single "replace". */
@@ -1376,9 +1575,9 @@ tweak_statushash(void *baton,
else
statstruct->repos_relpath = apr_pstrdup(pool, b->repos_relpath);
- statstruct->repos_root_url =
+ statstruct->repos_root_url =
b->edit_baton->anchor_status->repos_root_url;
- statstruct->repos_uuid =
+ statstruct->repos_uuid =
b->edit_baton->anchor_status->repos_uuid;
}
@@ -1386,7 +1585,7 @@ tweak_statushash(void *baton,
isn't available. */
if (statstruct->repos_node_status == svn_wc_status_deleted)
{
- statstruct->ood_kind = is_dir ? svn_node_dir : svn_node_file;
+ statstruct->ood_kind = statstruct->kind;
/* Pre 1.5 servers don't provide the revision a path was deleted.
So we punt and use the last committed revision of the path's
@@ -1442,9 +1641,8 @@ find_dir_repos_relpath(const struct dir_baton *db, apr_pool_t *pool)
{
const char *repos_relpath;
struct dir_baton *pb = db->parent_baton;
- const svn_wc_status3_t *status = apr_hash_get(pb->statii,
- db->local_abspath,
- APR_HASH_KEY_STRING);
+ const svn_wc_status3_t *status = svn_hash_gets(pb->statii,
+ db->local_abspath);
/* Note that status->repos_relpath could be NULL in the case of a missing
* directory, which means we need to recurse up another level to get
* a useful relpath. */
@@ -1464,32 +1662,40 @@ make_dir_baton(void **dir_baton,
const char *path,
struct edit_baton *edit_baton,
struct dir_baton *parent_baton,
- apr_pool_t *pool)
+ apr_pool_t *result_pool)
{
struct dir_baton *pb = parent_baton;
struct edit_baton *eb = edit_baton;
- struct dir_baton *d = apr_pcalloc(pool, sizeof(*d));
+ struct dir_baton *d;
const char *local_abspath;
const svn_wc_status3_t *status_in_parent;
+ apr_pool_t *dir_pool;
+
+ if (parent_baton)
+ dir_pool = svn_pool_create(parent_baton->pool);
+ else
+ dir_pool = svn_pool_create(result_pool);
+
+ d = apr_pcalloc(dir_pool, sizeof(*d));
SVN_ERR_ASSERT(path || (! pb));
/* Construct the absolute path of this directory. */
if (pb)
- local_abspath = svn_dirent_join(eb->anchor_abspath, path, pool);
+ local_abspath = svn_dirent_join(eb->anchor_abspath, path, dir_pool);
else
local_abspath = eb->anchor_abspath;
/* Finish populating the baton members. */
+ d->pool = dir_pool;
d->local_abspath = local_abspath;
- d->name = path ? svn_dirent_basename(path, pool) : NULL;
+ d->name = path ? svn_dirent_basename(path, dir_pool) : NULL;
d->edit_baton = edit_baton;
d->parent_baton = parent_baton;
- d->pool = pool;
- d->statii = apr_hash_make(pool);
+ d->statii = apr_hash_make(dir_pool);
d->ood_changed_rev = SVN_INVALID_REVNUM;
d->ood_changed_date = 0;
- d->repos_relpath = apr_pstrdup(pool, find_dir_repos_relpath(d, pool));
+ d->repos_relpath = find_dir_repos_relpath(d, dir_pool);
d->ood_kind = svn_node_dir;
d->ood_changed_author = NULL;
@@ -1516,8 +1722,7 @@ make_dir_baton(void **dir_baton,
/* Get the status for this path's children. Of course, we only want
to do this if the path is versioned as a directory. */
if (pb)
- status_in_parent = apr_hash_get(pb->statii, d->local_abspath,
- APR_HASH_KEY_STRING);
+ status_in_parent = svn_hash_gets(pb->statii, d->local_abspath);
else
status_in_parent = eb->anchor_status;
@@ -1534,7 +1739,7 @@ make_dir_baton(void **dir_baton,
const svn_wc_status3_t *this_dir_status;
const apr_array_header_t *ignores = eb->ignores;
- SVN_ERR(get_dir_status(&eb->wb, local_abspath, NULL, TRUE,
+ SVN_ERR(get_dir_status(&eb->wb, local_abspath, TRUE,
status_in_parent->repos_root_url,
NULL /*parent_repos_relpath*/,
status_in_parent->repos_uuid,
@@ -1546,11 +1751,10 @@ make_dir_baton(void **dir_baton,
TRUE, TRUE,
hash_stash, d->statii,
eb->cancel_func, eb->cancel_baton,
- pool));
+ dir_pool));
/* If we found a depth here, it should govern. */
- this_dir_status = apr_hash_get(d->statii, d->local_abspath,
- APR_HASH_KEY_STRING);
+ this_dir_status = svn_hash_gets(d->statii, d->local_abspath);
if (this_dir_status && this_dir_status->versioned
&& (d->depth == svn_depth_unknown
|| d->depth > status_in_parent->depth))
@@ -1719,7 +1923,7 @@ handle_statii(struct edit_baton *eb,
|| depth == svn_depth_infinity))
{
SVN_ERR(get_dir_status(&eb->wb,
- local_abspath, NULL, TRUE,
+ local_abspath, TRUE,
dir_repos_root_url, dir_repos_relpath,
dir_repos_uuid,
NULL,
@@ -1747,7 +1951,7 @@ handle_statii(struct edit_baton *eb,
/*** The callbacks we'll plug into an svn_delta_editor_t structure. ***/
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
set_target_revision(void *edit_baton,
svn_revnum_t target_revision,
@@ -1759,7 +1963,7 @@ set_target_revision(void *edit_baton,
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
open_root(void *edit_baton,
svn_revnum_t base_revision,
@@ -1772,7 +1976,7 @@ open_root(void *edit_baton,
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
delete_entry(const char *path,
svn_revnum_t revision,
@@ -1782,16 +1986,13 @@ delete_entry(const char *path,
struct dir_baton *db = parent_baton;
struct edit_baton *eb = db->edit_baton;
const char *local_abspath = svn_dirent_join(eb->anchor_abspath, path, pool);
- svn_wc__db_kind_t kind;
/* Note: when something is deleted, it's okay to tweak the
statushash immediately. No need to wait until close_file or
close_dir, because there's no risk of having to honor the 'added'
flag. We already know this item exists in the working copy. */
-
- SVN_ERR(svn_wc__db_read_kind(&kind, eb->db, local_abspath, FALSE, pool));
SVN_ERR(tweak_statushash(db, db, TRUE, eb->db,
- local_abspath, kind == svn_wc__db_kind_dir,
+ local_abspath,
svn_wc_status_deleted, 0, 0, revision, NULL, pool));
/* Mark the parent dir -- it lost an entry (unless that parent dir
@@ -1800,7 +2001,6 @@ delete_entry(const char *path,
if (db->parent_baton && (! *eb->target_basename))
SVN_ERR(tweak_statushash(db->parent_baton, db, TRUE,eb->db,
db->local_abspath,
- kind == svn_wc__db_kind_dir,
svn_wc_status_modified, svn_wc_status_modified,
0, SVN_INVALID_REVNUM, NULL, pool));
@@ -1808,7 +2008,7 @@ delete_entry(const char *path,
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
add_directory(const char *path,
void *parent_baton,
@@ -1834,7 +2034,7 @@ add_directory(const char *path,
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
open_directory(const char *path,
void *parent_baton,
@@ -1847,7 +2047,7 @@ open_directory(const char *path,
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
change_dir_prop(void *dir_baton,
const char *name,
@@ -1878,7 +2078,7 @@ change_dir_prop(void *dir_baton,
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
close_directory(void *dir_baton,
apr_pool_t *pool)
@@ -1886,6 +2086,7 @@ close_directory(void *dir_baton,
struct dir_baton *db = dir_baton;
struct dir_baton *pb = db->parent_baton;
struct edit_baton *eb = db->edit_baton;
+ apr_pool_t *scratch_pool = db->pool;
/* If nothing has changed and directory has no out of
date descendants, return. */
@@ -1900,7 +2101,7 @@ close_directory(void *dir_baton,
if (db->added)
{
repos_node_status = svn_wc_status_added;
- repos_text_status = svn_wc_status_added;
+ repos_text_status = svn_wc_status_none;
repos_prop_status = db->prop_changed ? svn_wc_status_added
: svn_wc_status_none;
}
@@ -1923,9 +2124,9 @@ close_directory(void *dir_baton,
/* ### When we add directory locking, we need to find a
### directory lock here. */
SVN_ERR(tweak_statushash(pb, db, TRUE, eb->db, db->local_abspath,
- TRUE, repos_node_status, repos_text_status,
+ repos_node_status, repos_text_status,
repos_prop_status, SVN_INVALID_REVNUM, NULL,
- pool));
+ scratch_pool));
}
else
{
@@ -1956,8 +2157,7 @@ close_directory(void *dir_baton,
const svn_wc_status3_t *dir_status;
/* See if the directory was deleted or replaced. */
- dir_status = apr_hash_get(pb->statii, db->local_abspath,
- APR_HASH_KEY_STRING);
+ dir_status = svn_hash_gets(pb->statii, db->local_abspath);
if (dir_status &&
((dir_status->repos_node_status == svn_wc_status_deleted)
|| (dir_status->repos_node_status == svn_wc_status_replaced)))
@@ -1968,12 +2168,12 @@ close_directory(void *dir_baton,
dir_status ? dir_status->repos_root_url : NULL,
dir_status ? dir_status->repos_relpath : NULL,
dir_status ? dir_status->repos_uuid : NULL,
- db->statii, was_deleted, db->depth, pool));
+ db->statii, was_deleted, db->depth, scratch_pool));
if (dir_status && is_sendable_status(dir_status, eb->no_ignore,
eb->get_all))
SVN_ERR((eb->status_func)(eb->status_baton, db->local_abspath,
- dir_status, pool));
- apr_hash_set(pb->statii, db->local_abspath, APR_HASH_KEY_STRING, NULL);
+ dir_status, scratch_pool));
+ svn_hash_sets(pb->statii, db->local_abspath, NULL);
}
else if (! pb)
{
@@ -1983,15 +2183,14 @@ close_directory(void *dir_baton,
{
const svn_wc_status3_t *tgt_status;
- tgt_status = apr_hash_get(db->statii, eb->target_abspath,
- APR_HASH_KEY_STRING);
+ tgt_status = svn_hash_gets(db->statii, eb->target_abspath);
if (tgt_status)
{
if (tgt_status->versioned
&& tgt_status->kind == svn_node_dir)
{
SVN_ERR(get_dir_status(&eb->wb,
- eb->target_abspath, NULL, TRUE,
+ eb->target_abspath, TRUE,
NULL, NULL, NULL, NULL,
NULL /* dirent */,
eb->ignores,
@@ -1999,11 +2198,11 @@ close_directory(void *dir_baton,
eb->get_all, eb->no_ignore,
eb->status_func, eb->status_baton,
eb->cancel_func, eb->cancel_baton,
- pool));
+ scratch_pool));
}
if (is_sendable_status(tgt_status, eb->no_ignore, eb->get_all))
SVN_ERR((eb->status_func)(eb->status_baton, eb->target_abspath,
- tgt_status, pool));
+ tgt_status, scratch_pool));
}
}
else
@@ -2015,20 +2214,24 @@ close_directory(void *dir_baton,
eb->anchor_status->repos_root_url,
eb->anchor_status->repos_relpath,
eb->anchor_status->repos_uuid,
- db->statii, FALSE, eb->default_depth, pool));
+ db->statii, FALSE, eb->default_depth,
+ scratch_pool));
if (is_sendable_status(eb->anchor_status, eb->no_ignore,
eb->get_all))
SVN_ERR((eb->status_func)(eb->status_baton, db->local_abspath,
- eb->anchor_status, pool));
+ eb->anchor_status, scratch_pool));
eb->anchor_status = NULL;
}
}
+
+ svn_pool_clear(scratch_pool); /* Clear baton and its pool */
+
return SVN_NO_ERROR;
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
add_file(const char *path,
void *parent_baton,
@@ -2051,7 +2254,7 @@ add_file(const char *path,
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
open_file(const char *path,
void *parent_baton,
@@ -2067,7 +2270,7 @@ open_file(const char *path,
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
apply_textdelta(void *file_baton,
const char *base_checksum,
@@ -2088,7 +2291,7 @@ apply_textdelta(void *file_baton,
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
change_file_prop(void *file_baton,
const char *name,
@@ -2120,7 +2323,7 @@ change_file_prop(void *file_baton,
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
close_file(void *file_baton,
const char *text_checksum, /* ignored, as we receive no data */
@@ -2140,8 +2343,10 @@ close_file(void *file_baton,
if (fb->added)
{
repos_node_status = svn_wc_status_added;
- repos_text_status = svn_wc_status_added;
- repos_prop_status = fb->prop_changed ? svn_wc_status_added : 0;
+ repos_text_status = fb->text_changed ? svn_wc_status_modified
+ : 0 /* don't tweak */;
+ repos_prop_status = fb->prop_changed ? svn_wc_status_modified
+ : 0 /* don't tweak */;
if (fb->edit_baton->wb.repos_locks)
{
@@ -2153,27 +2358,29 @@ close_file(void *file_baton,
const char *repos_relpath = svn_relpath_join(dir_repos_relpath,
fb->name, pool);
- repos_lock = apr_hash_get(fb->edit_baton->wb.repos_locks,
- svn_fspath__join("/", repos_relpath,
- pool),
- APR_HASH_KEY_STRING);
+ repos_lock = svn_hash_gets(fb->edit_baton->wb.repos_locks,
+ svn_fspath__join("/", repos_relpath,
+ pool));
}
}
else
{
repos_node_status = (fb->text_changed || fb->prop_changed)
- ? svn_wc_status_modified : 0;
- repos_text_status = fb->text_changed ? svn_wc_status_modified : 0;
- repos_prop_status = fb->prop_changed ? svn_wc_status_modified : 0;
+ ? svn_wc_status_modified
+ : 0 /* don't tweak */;
+ repos_text_status = fb->text_changed ? svn_wc_status_modified
+ : 0 /* don't tweak */;
+ repos_prop_status = fb->prop_changed ? svn_wc_status_modified
+ : 0 /* don't tweak */;
}
return tweak_statushash(fb, NULL, FALSE, fb->edit_baton->db,
- fb->local_abspath, FALSE, repos_node_status,
+ fb->local_abspath, repos_node_status,
repos_text_status, repos_prop_status,
SVN_INVALID_REVNUM, repos_lock, pool);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
close_edit(void *edit_baton,
apr_pool_t *pool)
@@ -2207,7 +2414,7 @@ close_edit(void *edit_baton,
/*** Public API ***/
svn_error_t *
-svn_wc_get_status_editor5(const svn_delta_editor_t **editor,
+svn_wc__get_status_editor(const svn_delta_editor_t **editor,
void **edit_baton,
void **set_locks_baton,
svn_revnum_t *edit_revision,
@@ -2230,7 +2437,10 @@ svn_wc_get_status_editor5(const svn_delta_editor_t **editor,
struct edit_baton *eb;
svn_delta_editor_t *tree_editor = svn_delta_default_editor(result_pool);
void *inner_baton;
+ struct svn_wc__shim_fetch_baton_t *sfb;
const svn_delta_editor_t *inner_editor;
+ svn_delta_shim_callbacks_t *shim_callbacks =
+ svn_delta_shim_callbacks_default(result_pool);
/* Construct an edit baton. */
eb = apr_pcalloc(result_pool, sizeof(*eb));
@@ -2318,9 +2528,50 @@ svn_wc_get_status_editor5(const svn_delta_editor_t **editor,
if (set_locks_baton)
*set_locks_baton = eb;
+ sfb = apr_palloc(result_pool, sizeof(*sfb));
+ sfb->db = wc_ctx->db;
+ sfb->base_abspath = eb->anchor_abspath;
+ sfb->fetch_base = FALSE;
+
+ shim_callbacks->fetch_kind_func = svn_wc__fetch_kind_func;
+ shim_callbacks->fetch_props_func = svn_wc__fetch_props_func;
+ shim_callbacks->fetch_base_func = svn_wc__fetch_base_func;
+ shim_callbacks->fetch_baton = sfb;
+
+ SVN_ERR(svn_editor__insert_shims(editor, edit_baton, *editor, *edit_baton,
+ NULL, NULL, shim_callbacks,
+ result_pool, scratch_pool));
+
return SVN_NO_ERROR;
}
+/* Like svn_io_stat_dirent, but works case sensitive inside working
+ copies. Before 1.8 we handled this with a selection filter inside
+ a directory */
+static svn_error_t *
+stat_wc_dirent_case_sensitive(const svn_io_dirent2_t **dirent,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_boolean_t is_wcroot;
+
+ /* The wcroot is "" inside the wc; handle it as not in the wc, as
+ the case of the root is indifferent to us. */
+
+ /* Note that for performance this is really just a few hashtable lookups,
+ as we just used local_abspath for a db call in both our callers */
+ SVN_ERR(svn_wc__db_is_wcroot(&is_wcroot, db, local_abspath,
+ scratch_pool));
+
+ return svn_error_trace(
+ svn_io_stat_dirent2(dirent, local_abspath,
+ ! is_wcroot /* verify_truename */,
+ TRUE /* ignore_enoent */,
+ result_pool, scratch_pool));
+}
+
svn_error_t *
svn_wc__internal_walk_status(svn_wc__db_t *db,
const char *local_abspath,
@@ -2337,9 +2588,7 @@ svn_wc__internal_walk_status(svn_wc__db_t *db,
{
struct walk_status_baton wb;
const svn_io_dirent2_t *dirent;
- const char *anchor_abspath, *target_name;
- svn_boolean_t skip_root;
- const struct svn_wc__db_info_t *dir_info;
+ const struct svn_wc__db_info_t *info;
svn_error_t *err;
wb.db = db;
@@ -2348,9 +2597,6 @@ svn_wc__internal_walk_status(svn_wc__db_t *db,
wb.repos_root = NULL;
wb.repos_locks = NULL;
- SVN_ERR(svn_wc__db_externals_defined_below(&wb.externals, db, local_abspath,
- scratch_pool, scratch_pool));
-
/* Use the caller-provided ignore patterns if provided; the build-time
configured defaults otherwise. */
if (!ignore_patterns)
@@ -2361,71 +2607,81 @@ svn_wc__internal_walk_status(svn_wc__db_t *db,
ignore_patterns = ignores;
}
- err = read_info(&dir_info, local_abspath, db, scratch_pool, scratch_pool);
+ err = svn_wc__db_read_single_info(&info, db, local_abspath,
+ scratch_pool, scratch_pool);
- if (!err
- && dir_info->kind == svn_wc__db_kind_dir
- && dir_info->status != svn_wc__db_status_not_present
- && dir_info->status != svn_wc__db_status_excluded
- && dir_info->status != svn_wc__db_status_server_excluded)
+ if (err)
{
- anchor_abspath = local_abspath;
- target_name = NULL;
- skip_root = FALSE;
+ if (err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ info = NULL;
+ }
+ else
+ return svn_error_trace(err);
+
+ wb.externals = apr_hash_make(scratch_pool);
+
+ SVN_ERR(svn_io_stat_dirent2(&dirent, local_abspath, FALSE, TRUE,
+ scratch_pool, scratch_pool));
}
- else if (err && err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND)
- return svn_error_trace(err);
else
{
- svn_error_clear(err);
- dir_info = NULL; /* Don't pass information of the child */
+ SVN_ERR(svn_wc__db_externals_defined_below(&wb.externals,
+ db, local_abspath,
+ scratch_pool, scratch_pool));
- /* Walk the status of the parent of LOCAL_ABSPATH, but only report
- status on its child LOCAL_ABSPATH. */
- anchor_abspath = svn_dirent_dirname(local_abspath, scratch_pool);
- target_name = svn_dirent_basename(local_abspath, NULL);
- skip_root = TRUE;
+ SVN_ERR(stat_wc_dirent_case_sensitive(&dirent, db, local_abspath,
+ scratch_pool, scratch_pool));
}
- SVN_ERR(svn_io_stat_dirent(&dirent, local_abspath, TRUE,
- scratch_pool, scratch_pool));
-
-#ifdef HAVE_SYMLINK
- if (dirent->special && !skip_root)
+ if (info
+ && info->kind == svn_node_dir
+ && info->status != svn_wc__db_status_not_present
+ && info->status != svn_wc__db_status_excluded
+ && info->status != svn_wc__db_status_server_excluded)
{
- svn_io_dirent2_t *this_dirent = svn_io_dirent2_dup(dirent,
- scratch_pool);
-
- /* We're being pointed to the status root via a symlink.
- * Get the real node kind and pretend the path is not a symlink.
- * This prevents send_status_structure() from treating the root
- * as a directory obstructed by a file. */
- SVN_ERR(svn_io_check_resolved_path(local_abspath,
- &this_dirent->kind, scratch_pool));
- this_dirent->special = FALSE;
- SVN_ERR(send_status_structure(&wb, local_abspath,
- NULL, NULL, NULL,
- dir_info, this_dirent, get_all,
- status_func, status_baton,
- scratch_pool));
- skip_root = TRUE;
+ SVN_ERR(get_dir_status(&wb,
+ local_abspath,
+ FALSE /* skip_root */,
+ NULL, NULL, NULL,
+ info,
+ dirent,
+ ignore_patterns,
+ depth,
+ get_all,
+ no_ignore,
+ status_func, status_baton,
+ cancel_func, cancel_baton,
+ scratch_pool));
+ }
+ else
+ {
+ /* It may be a file or an unversioned item. And this is an explicit
+ * target, so no ignoring. An unversioned item (file or dir) shows a
+ * status like '?', and can yield a tree conflicted path. */
+ err = get_child_status(&wb,
+ local_abspath,
+ info,
+ dirent,
+ ignore_patterns,
+ get_all,
+ status_func, status_baton,
+ cancel_func, cancel_baton,
+ scratch_pool);
+
+ if (!info && err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
+ {
+ /* The parent is also not versioned, but it is not nice to show
+ an error about a path a user didn't intend to touch. */
+ svn_error_clear(err);
+ return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
+ _("The node '%s' was not found."),
+ svn_dirent_local_style(local_abspath,
+ scratch_pool));
+ }
+ SVN_ERR(err);
}
-#endif
-
- SVN_ERR(get_dir_status(&wb,
- anchor_abspath,
- target_name,
- skip_root,
- NULL, NULL, NULL,
- dir_info,
- dirent,
- ignore_patterns,
- depth,
- get_all,
- no_ignore,
- status_func, status_baton,
- cancel_func, cancel_baton,
- scratch_pool));
return SVN_NO_ERROR;
}
@@ -2480,9 +2736,9 @@ svn_wc_get_default_ignores(apr_array_header_t **patterns,
apr_hash_t *config,
apr_pool_t *pool)
{
- svn_config_t *cfg = config ? apr_hash_get(config,
- SVN_CONFIG_CATEGORY_CONFIG,
- APR_HASH_KEY_STRING) : NULL;
+ svn_config_t *cfg = config
+ ? svn_hash_gets(config, SVN_CONFIG_CATEGORY_CONFIG)
+ : NULL;
const char *val;
/* Check the Subversion run-time configuration for global ignores.
@@ -2507,7 +2763,7 @@ internal_status(svn_wc_status3_t **status,
apr_pool_t *scratch_pool)
{
const svn_io_dirent2_t *dirent;
- svn_wc__db_kind_t node_kind;
+ svn_node_kind_t node_kind;
const char *parent_repos_relpath;
const char *parent_repos_root_url;
const char *parent_repos_uuid;
@@ -2518,9 +2774,6 @@ internal_status(svn_wc_status3_t **status,
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
- SVN_ERR(svn_io_stat_dirent(&dirent, local_abspath, TRUE,
- scratch_pool, scratch_pool));
-
err = svn_wc__db_read_info(&node_status, &node_kind, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, &conflicted,
@@ -2528,26 +2781,33 @@ internal_status(svn_wc_status3_t **status,
db, local_abspath,
scratch_pool, scratch_pool);
- if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
+ if (err)
{
+ if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND)
+ return svn_error_trace(err);
+
svn_error_clear(err);
- node_kind = svn_wc__db_kind_unknown;
+ node_kind = svn_node_unknown;
/* Ensure conflicted is always set, but don't hide tree conflicts
on 'hidden' nodes. */
conflicted = FALSE;
+
+ SVN_ERR(svn_io_stat_dirent2(&dirent, local_abspath, FALSE, TRUE,
+ scratch_pool, scratch_pool));
}
- else if (err)
- {
- return svn_error_trace(err);
- }
- else if (node_status == svn_wc__db_status_not_present
- || node_status == svn_wc__db_status_server_excluded
- || node_status == svn_wc__db_status_excluded)
+ else
+ SVN_ERR(stat_wc_dirent_case_sensitive(&dirent, db, local_abspath,
+ scratch_pool, scratch_pool));
+
+ if (node_kind != svn_node_unknown
+ && (node_status == svn_wc__db_status_not_present
+ || node_status == svn_wc__db_status_server_excluded
+ || node_status == svn_wc__db_status_excluded))
{
- node_kind = svn_wc__db_kind_unknown;
+ node_kind = svn_node_unknown;
}
- if (node_kind == svn_wc__db_kind_unknown)
+ if (node_kind == svn_node_unknown)
return svn_error_trace(assemble_unversioned(status,
db, local_abspath,
dirent, conflicted,
@@ -2655,6 +2915,14 @@ svn_wc_dup_status3(const svn_wc_status3_t *orig_stat,
new_stat->repos_uuid
= apr_pstrdup(pool, orig_stat->repos_uuid);
+ if (orig_stat->moved_from_abspath)
+ new_stat->moved_from_abspath
+ = apr_pstrdup(pool, orig_stat->moved_from_abspath);
+
+ if (orig_stat->moved_to_abspath)
+ new_stat->moved_to_abspath
+ = apr_pstrdup(pool, orig_stat->moved_to_abspath);
+
/* Return the new hotness. */
return new_stat;
}
diff --git a/subversion/libsvn_wc/token-map.h b/subversion/libsvn_wc/token-map.h
new file mode 100644
index 0000000..9da12b8
--- /dev/null
+++ b/subversion/libsvn_wc/token-map.h
@@ -0,0 +1,70 @@
+/**
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ *
+ * This header is parsed by transform-sql.py to allow SQLite
+ * statements to refer to string values by symbolic names.
+ */
+
+#ifndef SVN_WC_TOKEN_MAP_H
+#define SVN_WC_TOKEN_MAP_H
+
+#include "svn_types.h"
+#include "wc_db.h"
+#include "private/svn_token.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+static const svn_token_map_t kind_map[] = {
+ { "file", svn_node_file }, /* MAP_FILE */
+ { "dir", svn_node_dir }, /* MAP_DIR */
+ { "symlink", svn_node_symlink }, /* MAP_SYMLINK */
+ { "unknown", svn_node_unknown }, /* MAP_UNKNOWN */
+ { NULL }
+};
+
+/* Note: we only decode presence values from the database. These are a
+ subset of all the status values. */
+static const svn_token_map_t presence_map[] = {
+ { "normal", svn_wc__db_status_normal }, /* MAP_NORMAL */
+ { "server-excluded", svn_wc__db_status_server_excluded }, /* MAP_SERVER_EXCLUDED */
+ { "excluded", svn_wc__db_status_excluded }, /* MAP_EXCLUDED */
+ { "not-present", svn_wc__db_status_not_present }, /* MAP_NOT_PRESENT */
+ { "incomplete", svn_wc__db_status_incomplete }, /* MAP_INCOMPLETE */
+ { "base-deleted", svn_wc__db_status_base_deleted }, /* MAP_BASE_DELETED */
+ { NULL }
+};
+
+/* The subset of svn_depth_t used in the database. */
+static const svn_token_map_t depth_map[] = {
+ { "unknown", svn_depth_unknown }, /* MAP_DEPTH_UNKNOWN */
+ { "empty", svn_depth_empty },
+ { "files", svn_depth_files },
+ { "immediates", svn_depth_immediates },
+ { "infinity", svn_depth_infinity }, /* MAP_DEPTH_INFINITY */
+ { NULL }
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/subversion/libsvn_wc/translate.c b/subversion/libsvn_wc/translate.c
index 2cb6a15..9e0b265 100644
--- a/subversion/libsvn_wc/translate.c
+++ b/subversion/libsvn_wc/translate.c
@@ -33,6 +33,7 @@
#include "svn_types.h"
#include "svn_string.h"
#include "svn_dirent_uri.h"
+#include "svn_hash.h"
#include "svn_path.h"
#include "svn_error.h"
#include "svn_subst.h"
@@ -313,10 +314,10 @@ svn_wc__expand_keywords(apr_hash_t **keywords,
apr_time_t changed_date;
const char *changed_author;
const char *url;
+ const char *repos_root_url;
if (! for_normalization)
{
- const char *repos_root_url;
const char *repos_relpath;
SVN_ERR(svn_wc__db_read_info(NULL, NULL, NULL, &repos_relpath,
@@ -341,15 +342,14 @@ svn_wc__expand_keywords(apr_hash_t **keywords,
changed_rev = SVN_INVALID_REVNUM;
changed_date = 0;
changed_author = "";
+ repos_root_url = "";
}
- SVN_ERR(svn_subst_build_keywords2(keywords,
- keyword_list,
+ SVN_ERR(svn_subst_build_keywords3(keywords, keyword_list,
apr_psprintf(scratch_pool, "%ld",
changed_rev),
- url,
- changed_date,
- changed_author,
+ url, repos_root_url,
+ changed_date, changed_author,
result_pool));
if (apr_hash_count(*keywords) == 0)
@@ -365,9 +365,11 @@ svn_wc__sync_flags_with_props(svn_boolean_t *did_set,
apr_pool_t *scratch_pool)
{
svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
svn_wc__db_lock_t *lock;
apr_hash_t *props = NULL;
+ svn_boolean_t had_props;
+ svn_boolean_t props_mod;
if (did_set)
*did_set = FALSE;
@@ -378,18 +380,25 @@ svn_wc__sync_flags_with_props(svn_boolean_t *did_set,
SVN_ERR(svn_wc__db_read_info(&status, &kind, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, &lock, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL,
+ &had_props, &props_mod, NULL, NULL, NULL,
db, local_abspath,
scratch_pool, scratch_pool));
- SVN_ERR(svn_wc__db_read_props(&props, db, local_abspath, scratch_pool,
- scratch_pool));
-
/* We actually only care about the following flags on files, so just
- early-out for all other types. */
- if (kind != svn_wc__db_kind_file)
+ early-out for all other types.
+
+ Also bail if there is no in-wc representation of the file. */
+ if (kind != svn_node_file
+ || (status != svn_wc__db_status_normal
+ && status != svn_wc__db_status_added))
return SVN_NO_ERROR;
+ if (props_mod || had_props)
+ SVN_ERR(svn_wc__db_read_props(&props, db, local_abspath, scratch_pool,
+ scratch_pool));
+ else
+ props = NULL;
+
/* If we get this far, we're going to change *something*, so just set
the flag appropriately. */
if (did_set)
@@ -398,7 +407,7 @@ svn_wc__sync_flags_with_props(svn_boolean_t *did_set,
/* Handle the read-write bit. */
if (status != svn_wc__db_status_normal
|| props == NULL
- || ! apr_hash_get(props, SVN_PROP_NEEDS_LOCK, APR_HASH_KEY_STRING)
+ || ! svn_hash_gets(props, SVN_PROP_NEEDS_LOCK)
|| lock)
{
SVN_ERR(svn_io_set_file_read_write(local_abspath, FALSE, scratch_pool));
@@ -409,12 +418,16 @@ svn_wc__sync_flags_with_props(svn_boolean_t *did_set,
set the file read_only just yet. That happens upon commit. */
apr_hash_t *pristine_props;
- SVN_ERR(svn_wc__get_pristine_props(&pristine_props, db, local_abspath,
- scratch_pool, scratch_pool));
+ if (! props_mod)
+ pristine_props = props;
+ else if (had_props)
+ SVN_ERR(svn_wc__db_read_pristine_props(&pristine_props, db, local_abspath,
+ scratch_pool, scratch_pool));
+ else
+ pristine_props = NULL;
if (pristine_props
- && apr_hash_get(pristine_props,
- SVN_PROP_NEEDS_LOCK, APR_HASH_KEY_STRING) )
+ && svn_hash_gets(pristine_props, SVN_PROP_NEEDS_LOCK) )
/*&& props
&& apr_hash_get(props, SVN_PROP_NEEDS_LOCK, APR_HASH_KEY_STRING) )*/
SVN_ERR(svn_io_set_file_read_only(local_abspath, FALSE, scratch_pool));
@@ -423,10 +436,8 @@ svn_wc__sync_flags_with_props(svn_boolean_t *did_set,
/* Windows doesn't care about the execute bit. */
#ifndef WIN32
- if ( ( status != svn_wc__db_status_normal
- && status != svn_wc__db_status_added )
- || props == NULL
- || ! apr_hash_get(props, SVN_PROP_EXECUTABLE, APR_HASH_KEY_STRING))
+ if (props == NULL
+ || ! svn_hash_gets(props, SVN_PROP_EXECUTABLE))
{
/* Turn off the execute bit */
SVN_ERR(svn_io_set_file_executable(local_abspath, FALSE, FALSE,
diff --git a/subversion/libsvn_wc/translate.h b/subversion/libsvn_wc/translate.h
index 3825529..c5203be 100644
--- a/subversion/libsvn_wc/translate.h
+++ b/subversion/libsvn_wc/translate.h
@@ -103,15 +103,21 @@ void svn_wc__eol_value_from_string(const char **value,
If a keyword is in the list, but no corresponding value is
available, do not create a hash entry for it. If no keywords are
found in the list, or if there is no list, set *KEYWORDS to NULL.
+ ### THIS LOOKS WRONG -- it creates a hash entry for every recognized kw
+ and expands each missing value as an empty string or "-1" or similar.
Use LOCAL_ABSPATH to expand keyword values.
If WRI_ABSPATH is not NULL, retrieve the information for LOCAL_ABSPATH
from the working copy identified by WRI_ABSPATH. Falling back to file
external information if the file is not present as versioned node.
+ ### THIS IS NOT IMPLEMENTED -- WRI_ABSPATH is ignored
If FOR_NORMALIZATION is TRUE, just return a list of keywords instead of
calculating their intended values.
+ ### This would be better done by a separate API, since in this case
+ only the KEYWORD_LIST input parameter is needed. (And there is no
+ need to print "-1" as the revision value.)
Use SCRATCH_POOL for any temporary allocations.
*/
diff --git a/subversion/libsvn_wc/tree_conflicts.c b/subversion/libsvn_wc/tree_conflicts.c
index 32b06d8..4445c96 100644
--- a/subversion/libsvn_wc/tree_conflicts.c
+++ b/subversion/libsvn_wc/tree_conflicts.c
@@ -27,6 +27,7 @@
#include "svn_pools.h"
#include "tree_conflicts.h"
+#include "conflicts.h"
#include "wc.h"
#include "private/svn_skel.h"
@@ -37,6 +38,8 @@
/* ### this should move to a more general location... */
/* A map for svn_node_kind_t values. */
+/* FIXME: this mapping defines a different representation of
+ svn_node_unknown than the one defined in token-map.h */
static const svn_token_map_t node_kind_map[] =
{
{ "none", svn_node_none },
@@ -76,6 +79,8 @@ const svn_token_map_t svn_wc__conflict_reason_map[] =
{ "added", svn_wc_conflict_reason_added },
{ "replaced", svn_wc_conflict_reason_replaced },
{ "unversioned", svn_wc_conflict_reason_unversioned },
+ { "moved-away", svn_wc_conflict_reason_moved_away },
+ { "moved-here", svn_wc_conflict_reason_moved_here },
{ NULL }
};
@@ -179,11 +184,12 @@ read_node_version_info(const svn_wc_conflict_version_t **version_info,
skel->children->next->next->next->next));
kind = (svn_node_kind_t)n;
- *version_info = svn_wc_conflict_version_create(repos_root,
- repos_relpath,
- peg_rev,
- kind,
- result_pool);
+ *version_info = svn_wc_conflict_version_create2(repos_root,
+ NULL,
+ repos_relpath,
+ peg_rev,
+ kind,
+ result_pool);
return SVN_NO_ERROR;
}
@@ -366,7 +372,7 @@ svn_wc__serialize_conflict(svn_skel_t **skel,
/* Victim path (escaping separator chars). */
victim_basename = svn_dirent_basename(conflict->local_abspath, result_pool);
- SVN_ERR_ASSERT(strlen(victim_basename) > 0);
+ SVN_ERR_ASSERT(victim_basename[0]);
svn_skel__prepend(svn_skel__str_atom(victim_basename, result_pool), c_skel);
svn_skel__prepend(svn_skel__str_atom("conflict", result_pool), c_skel);
@@ -386,8 +392,9 @@ svn_wc__del_tree_conflict(svn_wc_context_t *wc_ctx,
{
SVN_ERR_ASSERT(svn_dirent_is_absolute(victim_abspath));
- SVN_ERR(svn_wc__db_op_set_tree_conflict(wc_ctx->db, victim_abspath,
- NULL, scratch_pool));
+ SVN_ERR(svn_wc__db_op_mark_resolved(wc_ctx->db, victim_abspath,
+ FALSE, FALSE, TRUE, NULL,
+ scratch_pool));
return SVN_NO_ERROR;
}
@@ -397,66 +404,110 @@ svn_wc__add_tree_conflict(svn_wc_context_t *wc_ctx,
const svn_wc_conflict_description2_t *conflict,
apr_pool_t *scratch_pool)
{
- const svn_wc_conflict_description2_t *existing_conflict;
+ svn_boolean_t existing_conflict;
+ svn_skel_t *conflict_skel;
+ svn_error_t *err;
+
+ SVN_ERR_ASSERT(conflict != NULL);
+ SVN_ERR_ASSERT(conflict->operation == svn_wc_operation_merge
+ || (conflict->reason != svn_wc_conflict_reason_moved_away
+ && conflict->reason != svn_wc_conflict_reason_moved_here)
+ );
/* Re-adding an existing tree conflict victim is an error. */
- SVN_ERR(svn_wc__db_op_read_tree_conflict(&existing_conflict, wc_ctx->db,
- conflict->local_abspath,
- scratch_pool, scratch_pool));
- if (existing_conflict != NULL)
- return svn_error_createf(SVN_ERR_WC_CORRUPT, NULL,
+ err = svn_wc__internal_conflicted_p(NULL, NULL, &existing_conflict,
+ wc_ctx->db, conflict->local_abspath,
+ scratch_pool);
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND)
+ return svn_error_trace(err);
+
+ svn_error_clear(err);
+ }
+ else if (existing_conflict)
+ return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
_("Attempt to add tree conflict that already "
"exists at '%s'"),
svn_dirent_local_style(conflict->local_abspath,
scratch_pool));
+ else if (!conflict)
+ return SVN_NO_ERROR;
+
+ conflict_skel = svn_wc__conflict_skel_create(scratch_pool);
+
+ SVN_ERR(svn_wc__conflict_skel_add_tree_conflict(conflict_skel, wc_ctx->db,
+ conflict->local_abspath,
+ conflict->reason,
+ conflict->action,
+ NULL,
+ scratch_pool, scratch_pool));
+
+ switch(conflict->operation)
+ {
+ case svn_wc_operation_update:
+ default:
+ SVN_ERR(svn_wc__conflict_skel_set_op_update(conflict_skel,
+ conflict->src_left_version,
+ conflict->src_right_version,
+ scratch_pool, scratch_pool));
+ break;
+ case svn_wc_operation_switch:
+ SVN_ERR(svn_wc__conflict_skel_set_op_switch(conflict_skel,
+ conflict->src_left_version,
+ conflict->src_right_version,
+ scratch_pool, scratch_pool));
+ break;
+ case svn_wc_operation_merge:
+ SVN_ERR(svn_wc__conflict_skel_set_op_merge(conflict_skel,
+ conflict->src_left_version,
+ conflict->src_right_version,
+ scratch_pool, scratch_pool));
+ break;
+ }
return svn_error_trace(
- svn_wc__db_op_set_tree_conflict(wc_ctx->db, conflict->local_abspath,
- conflict, scratch_pool));
+ svn_wc__db_op_mark_conflict(wc_ctx->db, conflict->local_abspath,
+ conflict_skel, NULL, scratch_pool));
}
svn_error_t *
svn_wc__get_tree_conflict(const svn_wc_conflict_description2_t **tree_conflict,
svn_wc_context_t *wc_ctx,
- const char *victim_abspath,
+ const char *local_abspath,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- SVN_ERR_ASSERT(svn_dirent_is_absolute(victim_abspath));
-
- return svn_error_trace(
- svn_wc__db_op_read_tree_conflict(tree_conflict, wc_ctx->db, victim_abspath,
- result_pool, scratch_pool));
-}
+ const apr_array_header_t *conflicts;
+ int i;
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
-svn_error_t *
-svn_wc__get_all_tree_conflicts(apr_hash_t **tree_conflicts,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- apr_hash_t *conflicts;
- apr_hash_index_t *hi;
+ SVN_ERR(svn_wc__read_conflicts(&conflicts,
+ wc_ctx->db, local_abspath, FALSE,
+ scratch_pool, scratch_pool));
- SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+ if (!conflicts || conflicts->nelts == 0)
+ {
+ *tree_conflict = NULL;
+ return SVN_NO_ERROR;
+ }
- SVN_ERR(svn_wc__db_op_read_all_tree_conflicts(&conflicts, wc_ctx->db,
- local_abspath,
- result_pool, scratch_pool));
- *tree_conflicts = apr_hash_make(result_pool);
- /* Convert from basenames as keys to abspaths as keys. */
- for (hi = apr_hash_first(scratch_pool, conflicts); hi;
- hi = apr_hash_next(hi))
+ for (i = 0; i < conflicts->nelts; i++)
{
- const char *name = svn__apr_hash_index_key(hi);
- const svn_wc_conflict_description2_t *conflict
- = svn__apr_hash_index_val(hi);
- const char *abspath = svn_dirent_join(local_abspath, name, scratch_pool);
+ const svn_wc_conflict_description2_t *desc;
+
+ desc = APR_ARRAY_IDX(conflicts, i, svn_wc_conflict_description2_t *);
- apr_hash_set(*tree_conflicts, abspath, APR_HASH_KEY_STRING, conflict);
+ if (desc->kind == svn_wc_conflict_kind_tree)
+ {
+ *tree_conflict = svn_wc__conflict_description2_dup(desc,
+ result_pool);
+ return SVN_NO_ERROR;
+ }
}
+ *tree_conflict = NULL;
return SVN_NO_ERROR;
}
+
diff --git a/subversion/libsvn_wc/update_editor.c b/subversion/libsvn_wc/update_editor.c
index 6dad817..fd3e9ca 100644
--- a/subversion/libsvn_wc/update_editor.c
+++ b/subversion/libsvn_wc/update_editor.c
@@ -34,7 +34,7 @@
#include "svn_types.h"
#include "svn_pools.h"
-#include "svn_delta.h"
+#include "svn_hash.h"
#include "svn_string.h"
#include "svn_dirent_uri.h"
#include "svn_path.h"
@@ -45,11 +45,14 @@
#include "wc.h"
#include "adm_files.h"
-#include "entries.h"
+#include "conflicts.h"
#include "translate.h"
#include "workqueue.h"
+#include "private/svn_subr_private.h"
#include "private/svn_wc_private.h"
+#include "private/svn_editor.h"
+
/* Checks whether a svn_wc__db_status_t indicates whether a node is
present in a working copy. Used by the editor implementation */
#define IS_NODE_PRESENT(status) \
@@ -167,6 +170,12 @@ struct edit_baton
generated conflict files. */
const apr_array_header_t *ext_patterns;
+ /* Hash mapping const char * absolute working copy paths to depth-first
+ ordered arrays of svn_prop_inherited_item_t * structures representing
+ the properties inherited by the base node at that working copy path.
+ May be NULL. */
+ apr_hash_t *wcroot_iprops;
+
/* The revision we're targeting...or something like that. This
starts off as a pointer to the revision to which we are updating,
or SVN_INVALID_REVNUM, but by the end of the edit, should be
@@ -266,15 +275,17 @@ remember_skipped_tree(struct edit_baton *eb,
{
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
- apr_hash_set(eb->skipped_trees,
- apr_pstrdup(eb->pool,
- svn_dirent_skip_ancestor(eb->wcroot_abspath,
- local_abspath)),
- APR_HASH_KEY_STRING, (void*)1);
+ svn_hash_sets(eb->skipped_trees,
+ apr_pstrdup(eb->pool,
+ svn_dirent_skip_ancestor(eb->wcroot_abspath,
+ local_abspath)),
+ (void *)1);
return SVN_NO_ERROR;
}
+/* Per directory baton. Lives in its own subpool of the parent directory
+ or of the edit baton if there is no parent directory */
struct dir_baton
{
/* Basename of this directory. */
@@ -289,6 +300,9 @@ struct dir_baton
/* The revision of the directory before updating */
svn_revnum_t old_revision;
+ /* The repos_relpath before updating/switching */
+ const char *old_repos_relpath;
+
/* The global edit baton. */
struct edit_baton *edit_baton;
@@ -310,13 +324,17 @@ struct dir_baton
marked as deleted. */
svn_boolean_t shadowed;
+ /* Set on a node when the existing node is obstructed, and the edit operation
+ continues as semi-shadowed update */
+ svn_boolean_t edit_obstructed;
+
/* The (new) changed_* information, cached to avoid retrieving it later */
svn_revnum_t changed_rev;
apr_time_t changed_date;
const char *changed_author;
/* If not NULL, contains a mapping of const char* basenames of children that
- have been deleted to their svn_wc_conflict_description2_t* tree conflicts.
+ have been deleted to their svn_skel_t* tree conflicts.
We store this hash to allow replacements to continue under a just
installed tree conflict.
@@ -346,7 +364,7 @@ struct dir_baton
svn_boolean_t edited;
/* The tree conflict to install once the node is really edited */
- svn_wc_conflict_description2_t *edit_conflict;
+ svn_skel_t *edit_conflict;
/* The bump information for this directory. */
struct bump_dir_info *bump_info;
@@ -365,26 +383,10 @@ struct dir_baton
/* The pool in which this baton itself is allocated. */
apr_pool_t *pool;
-};
-
-/* The bump information is tracked separately from the directory batons.
- This is a small structure kept in the edit pool, while the heavier
- directory baton is managed by the editor driver.
-
- In a postfix delta case, the directory batons are going to disappear.
- The files will refer to these structures, rather than the full
- directory baton. */
-struct bump_dir_info
-{
- /* ptr to the bump information for the parent directory */
- struct bump_dir_info *parent;
-
- /* how many entries are referring to this bump information? */
+ /* how many nodes are referring to baton? */
int ref_count;
- /* Pool that should be cleared after the dir is bumped */
- apr_pool_t *pool;
};
@@ -484,19 +486,6 @@ cleanup_edit_baton(void *edit_baton)
return APR_SUCCESS;
}
-/* An APR pool cleanup handler. This is a child handler, it removes
- the mail pool handler.
- <stsp> mail pool?
- <hwright> that's where the missing commit mails are going! */
-static apr_status_t
-cleanup_edit_baton_child(void *edit_baton)
-{
- struct edit_baton *eb = edit_baton;
- apr_pool_cleanup_kill(eb->pool, eb, cleanup_edit_baton);
- return APR_SUCCESS;
-}
-
-
/* Make a new dir baton in a subpool of PB->pool. PB is the parent baton.
If PATH and PB are NULL, this is the root directory of the edit; in this
case, make the new dir baton in a subpool of EB->pool.
@@ -511,7 +500,6 @@ make_dir_baton(struct dir_baton **d_p,
{
apr_pool_t *dir_pool;
struct dir_baton *d;
- struct bump_dir_info *bdi;
if (pb != NULL)
dir_pool = svn_pool_create(pb->pool);
@@ -596,23 +584,13 @@ make_dir_baton(struct dir_baton **d_p,
}
}
- /* the bump information lives in the edit pool */
- bdi = apr_pcalloc(dir_pool, sizeof(*bdi));
- bdi->parent = pb ? pb->bump_info : NULL;
- bdi->ref_count = 1;
- bdi->pool = dir_pool;
-
- /* the parent's bump info has one more referer */
- if (pb)
- ++bdi->parent->ref_count;
-
d->edit_baton = eb;
d->parent_baton = pb;
d->pool = dir_pool;
d->propchanges = apr_array_make(dir_pool, 1, sizeof(svn_prop_t));
d->obstruction_found = FALSE;
d->add_existed = FALSE;
- d->bump_info = bdi;
+ d->ref_count = 1;
d->old_revision = SVN_INVALID_REVNUM;
d->adding_dir = adding;
d->changed_rev = SVN_INVALID_REVNUM;
@@ -622,7 +600,10 @@ make_dir_baton(struct dir_baton **d_p,
if (pb)
{
d->skip_this = pb->skip_this;
- d->shadowed = pb->shadowed;
+ d->shadowed = pb->shadowed || pb->edit_obstructed;
+
+ /* the parent's bump info has one more referer */
+ pb->ref_count++;
}
/* The caller of this function needs to fill these in. */
@@ -637,6 +618,7 @@ make_dir_baton(struct dir_baton **d_p,
/* Forward declarations. */
static svn_error_t *
already_in_a_tree_conflict(svn_boolean_t *conflicted,
+ svn_boolean_t *ignored,
svn_wc__db_t *db,
const char *local_abspath,
apr_pool_t *scratch_pool);
@@ -660,34 +642,32 @@ do_notification(const struct edit_baton *eb,
(*eb->notify_func)(eb->notify_baton, notify, scratch_pool);
}
-/* Decrement the bump_dir_info's reference count. If it hits zero,
+/* Decrement the directory's reference count. If it hits zero,
then this directory is "done". This means it is safe to clear its pool.
- In addition, when the directory is "done", we loop onto the parent's
- bump information to possibly mark it as done, too.
+ In addition, when the directory is "done", we recurse to possible cleanup
+ the parent directory.
*/
static svn_error_t *
-maybe_release_dir_info(struct bump_dir_info *bdi)
+maybe_release_dir_info(struct dir_baton *db)
{
- /* Keep moving up the tree of directories until we run out of parents,
- or a directory is not yet "done". */
- while (bdi != NULL)
- {
- apr_pool_t *destroy_pool;
+ db->ref_count--;
- if (--bdi->ref_count > 0)
- break; /* directory isn't done yet */
+ if (!db->ref_count)
+ {
+ struct dir_baton *pb = db->parent_baton;
- destroy_pool = bdi->pool;
- bdi = bdi->parent;
+ svn_pool_destroy(db->pool);
- svn_pool_destroy(destroy_pool);
+ if (pb)
+ SVN_ERR(maybe_release_dir_info(pb));
}
- /* we exited the for loop because there are no more parents */
return SVN_NO_ERROR;
}
+/* Per file baton. Lives in its own subpool below the pool of the parent
+ directory */
struct file_baton
{
/* Pool specific to this file_baton. */
@@ -705,6 +685,9 @@ struct file_baton
/* The revision of the file before updating */
svn_revnum_t old_revision;
+ /* The repos_relpath before updating/switching */
+ const char *old_repos_relpath;
+
/* The global edit baton. */
struct edit_baton *edit_baton;
@@ -732,6 +715,10 @@ struct file_baton
in the working copy (replaced, deleted, etc.). */
svn_boolean_t shadowed;
+ /* Set on a node when the existing node is obstructed, and the edit operation
+ continues as semi-shadowed update */
+ svn_boolean_t edit_obstructed;
+
/* The (new) changed_* information, cached to avoid retrieving it later */
svn_revnum_t changed_rev;
apr_time_t changed_date;
@@ -750,6 +737,10 @@ struct file_baton
initialized, this is never NULL, but it may have zero elements. */
apr_array_header_t *propchanges;
+ /* For existing files, whether there are local modifications. FALSE for added
+ files */
+ svn_boolean_t local_prop_mods;
+
/* Bump information for the directory this file lives in */
struct bump_dir_info *bump_info;
@@ -759,7 +750,7 @@ struct file_baton
svn_boolean_t edited;
/* The tree conflict to install once the node is really edited */
- svn_wc_conflict_description2_t *edit_conflict;
+ svn_skel_t *edit_conflict;
};
@@ -775,7 +766,6 @@ make_file_baton(struct file_baton **f_p,
{
struct edit_baton *eb = pb->edit_baton;
apr_pool_t *file_pool = svn_pool_create(pb->pool);
-
struct file_baton *f = apr_pcalloc(file_pool, sizeof(*f));
SVN_ERR_ASSERT(path);
@@ -825,17 +815,84 @@ make_file_baton(struct file_baton **f_p,
f->obstruction_found = FALSE;
f->add_existed = FALSE;
f->skip_this = pb->skip_this;
- f->shadowed = pb->shadowed;
+ f->shadowed = pb->shadowed || pb->edit_obstructed;
f->dir_baton = pb;
f->changed_rev = SVN_INVALID_REVNUM;
- /* the directory's bump info has one more referer now */
- ++f->bump_info->ref_count;
+ /* the directory has one more referer now */
+ pb->ref_count++;
*f_p = f;
return SVN_NO_ERROR;
}
+/* Complete a conflict skel by describing the update.
+ *
+ * LOCAL_KIND is the node kind of the tree conflict victim in the
+ * working copy.
+ *
+ * All temporary allocations are be made in SCRATCH_POOL, while allocations
+ * needed for the returned conflict struct are made in RESULT_POOL.
+ */
+static svn_error_t *
+complete_conflict(svn_skel_t *conflict,
+ const struct edit_baton *eb,
+ const char *local_abspath,
+ const char *old_repos_relpath,
+ svn_revnum_t old_revision,
+ const char *new_repos_relpath,
+ svn_node_kind_t local_kind,
+ svn_node_kind_t target_kind,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc_conflict_version_t *original_version;
+ svn_wc_conflict_version_t *target_version;
+ svn_boolean_t is_complete;
+
+ if (!conflict)
+ return SVN_NO_ERROR; /* Not conflicted */
+
+ SVN_ERR(svn_wc__conflict_skel_is_complete(&is_complete, conflict));
+
+ if (is_complete)
+ return SVN_NO_ERROR; /* Already completed */
+
+ if (old_repos_relpath)
+ original_version = svn_wc_conflict_version_create2(eb->repos_root,
+ eb->repos_uuid,
+ old_repos_relpath,
+ old_revision,
+ local_kind,
+ result_pool);
+ else
+ original_version = NULL;
+
+ if (new_repos_relpath)
+ target_version = svn_wc_conflict_version_create2(eb->repos_root,
+ eb->repos_uuid,
+ new_repos_relpath,
+ *eb->target_revision,
+ target_kind,
+ result_pool);
+ else
+ target_version = NULL;
+
+ if (eb->switch_relpath)
+ SVN_ERR(svn_wc__conflict_skel_set_op_switch(conflict,
+ original_version,
+ target_version,
+ result_pool, scratch_pool));
+ else
+ SVN_ERR(svn_wc__conflict_skel_set_op_update(conflict,
+ original_version,
+ target_version,
+ result_pool, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+
/* Called when a directory is really edited, to avoid marking a
tree conflict on a node for a no-change edit */
static svn_error_t *
@@ -852,14 +909,22 @@ mark_directory_edited(struct dir_baton *db, apr_pool_t *scratch_pool)
if (db->edit_conflict)
{
/* We have a (delayed) tree conflict to install */
- SVN_ERR(svn_wc__db_op_set_tree_conflict(db->edit_baton->db,
- db->local_abspath,
- db->edit_conflict,
- scratch_pool));
+
+ SVN_ERR(complete_conflict(db->edit_conflict, db->edit_baton,
+ db->local_abspath,
+ db->old_repos_relpath, db->old_revision,
+ db->new_relpath,
+ svn_node_dir, svn_node_dir,
+ db->pool, scratch_pool));
+ SVN_ERR(svn_wc__db_op_mark_conflict(db->edit_baton->db,
+ db->local_abspath,
+ db->edit_conflict, NULL,
+ scratch_pool));
do_notification(db->edit_baton, db->local_abspath, svn_node_dir,
svn_wc_notify_tree_conflict, scratch_pool);
db->already_notified = TRUE;
+
}
return SVN_NO_ERROR;
@@ -880,10 +945,17 @@ mark_file_edited(struct file_baton *fb, apr_pool_t *scratch_pool)
if (fb->edit_conflict)
{
/* We have a (delayed) tree conflict to install */
- SVN_ERR(svn_wc__db_op_set_tree_conflict(fb->edit_baton->db,
- fb->local_abspath,
- fb->edit_conflict,
- scratch_pool));
+
+ SVN_ERR(complete_conflict(fb->edit_conflict, fb->edit_baton,
+ fb->local_abspath, fb->old_repos_relpath,
+ fb->old_revision, fb->new_relpath,
+ svn_node_file, svn_node_file,
+ fb->pool, scratch_pool));
+
+ SVN_ERR(svn_wc__db_op_mark_conflict(fb->edit_baton->db,
+ fb->local_abspath,
+ fb->edit_conflict, NULL,
+ scratch_pool));
do_notification(fb->edit_baton, fb->local_abspath, svn_node_file,
svn_wc_notify_tree_conflict, scratch_pool);
@@ -940,16 +1012,19 @@ window_handler(svn_txdelta_window_t *window, void *baton)
if (err)
{
- /* We failed to apply the delta; clean up the temporary file. */
- svn_error_clear(svn_io_remove_file2(hb->new_text_base_tmp_abspath, TRUE,
- hb->pool));
+ /* We failed to apply the delta; clean up the temporary file if it
+ already created by lazy_open_target(). */
+ if (hb->new_text_base_tmp_abspath)
+ {
+ svn_error_clear(svn_io_remove_file2(hb->new_text_base_tmp_abspath,
+ TRUE, hb->pool));
+ }
}
else
{
/* Tell the file baton about the new text base's checksums. */
fb->new_text_base_md5_checksum =
- svn_checksum__from_digest(hb->new_text_base_md5_digest,
- svn_checksum_md5, fb->pool);
+ svn_checksum__from_digest_md5(hb->new_text_base_md5_digest, fb->pool);
fb->new_text_base_sha1_checksum =
svn_checksum_dup(hb->new_text_base_sha1_checksum, fb->pool);
@@ -1051,6 +1126,16 @@ path_join_under_root(const char **result_path,
pool));
}
+ /* This catches issue #3288 */
+ if (strcmp(add_path, svn_dirent_basename(*result_path, NULL)) != 0)
+ {
+ return svn_error_createf(
+ SVN_ERR_WC_OBSTRUCTED_UPDATE, NULL,
+ _("'%s' is not valid as filename in directory '%s'"),
+ svn_dirent_local_style(add_path, pool),
+ svn_dirent_local_style(base_path, pool));
+ }
+
return SVN_NO_ERROR;
}
@@ -1069,6 +1154,17 @@ set_target_revision(void *edit_baton,
return SVN_NO_ERROR;
}
+static svn_error_t *
+check_tree_conflict(svn_skel_t **pconflict,
+ struct edit_baton *eb,
+ const char *local_abspath,
+ svn_wc__db_status_t working_status,
+ svn_boolean_t exists_in_repos,
+ svn_node_kind_t expected_kind,
+ svn_wc_conflict_action_t action,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
/* An svn_delta_editor_t function. */
static svn_error_t *
open_root(void *edit_baton,
@@ -1078,8 +1174,12 @@ open_root(void *edit_baton,
{
struct edit_baton *eb = edit_baton;
struct dir_baton *db;
- svn_boolean_t already_conflicted;
+ svn_boolean_t already_conflicted, conflict_ignored;
svn_error_t *err;
+ svn_wc__db_status_t status;
+ svn_wc__db_status_t base_status;
+ svn_node_kind_t kind;
+ svn_boolean_t have_work;
/* Note that something interesting is actually happening in this
edit run. */
@@ -1088,8 +1188,8 @@ open_root(void *edit_baton,
SVN_ERR(make_dir_baton(&db, NULL, eb, NULL, FALSE, pool));
*dir_baton = db;
- err = already_in_a_tree_conflict(&already_conflicted, eb->db,
- db->local_abspath, pool);
+ err = already_in_a_tree_conflict(&already_conflicted, &conflict_ignored,
+ eb->db, db->local_abspath, pool);
if (err)
{
@@ -1097,10 +1197,15 @@ open_root(void *edit_baton,
return svn_error_trace(err);
svn_error_clear(err);
- already_conflicted = FALSE;
+ already_conflicted = conflict_ignored = FALSE;
}
else if (already_conflicted)
{
+ /* Record a skip of both the anchor and target in the skipped tree
+ as the anchor itself might not be updated */
+ SVN_ERR(remember_skipped_tree(eb, db->local_abspath, pool));
+ SVN_ERR(remember_skipped_tree(eb, eb->target_abspath, pool));
+
db->skip_this = TRUE;
db->already_notified = TRUE;
@@ -1112,19 +1217,94 @@ open_root(void *edit_baton,
return SVN_NO_ERROR;
}
+
+ SVN_ERR(svn_wc__db_read_info(&status, &kind, &db->old_revision,
+ &db->old_repos_relpath, NULL, NULL,
+ &db->changed_rev, &db->changed_date,
+ &db->changed_author, &db->ambient_depth,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, &have_work,
+ eb->db, db->local_abspath,
+ db->pool, pool));
+
+ if (conflict_ignored)
+ {
+ db->shadowed = TRUE;
+ }
+ else if (have_work)
+ {
+ const char *move_src_root_abspath;
+
+ SVN_ERR(svn_wc__db_base_moved_to(NULL, NULL, &move_src_root_abspath,
+ NULL, eb->db, db->local_abspath,
+ pool, pool));
+ if (move_src_root_abspath || *eb->target_basename == '\0')
+ SVN_ERR(svn_wc__db_base_get_info(&base_status, NULL,
+ &db->old_revision,
+ &db->old_repos_relpath, NULL, NULL,
+ &db->changed_rev, &db->changed_date,
+ &db->changed_author,
+ &db->ambient_depth,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ eb->db, db->local_abspath,
+ db->pool, pool));
+
+ if (move_src_root_abspath)
+ {
+ /* This is an update anchored inside a move. We need to
+ raise a move-edit tree-conflict on the move root to
+ update the move destination. */
+ svn_skel_t *tree_conflict = svn_wc__conflict_skel_create(pool);
+
+ SVN_ERR(svn_wc__conflict_skel_add_tree_conflict(
+ tree_conflict, eb->db, move_src_root_abspath,
+ svn_wc_conflict_reason_moved_away,
+ svn_wc_conflict_action_edit,
+ move_src_root_abspath, pool, pool));
+
+ if (strcmp(db->local_abspath, move_src_root_abspath))
+ {
+ /* We are raising the tree-conflict on some parent of
+ the edit root, we won't be handling that path again
+ so raise the conflict now. */
+ SVN_ERR(complete_conflict(tree_conflict, eb,
+ move_src_root_abspath,
+ db->old_repos_relpath,
+ db->old_revision, db->new_relpath,
+ svn_node_dir, svn_node_dir,
+ pool, pool));
+ SVN_ERR(svn_wc__db_op_mark_conflict(eb->db,
+ move_src_root_abspath,
+ tree_conflict,
+ NULL, pool));
+ do_notification(eb, move_src_root_abspath, svn_node_dir,
+ svn_wc_notify_tree_conflict, pool);
+ }
+ else
+ db->edit_conflict = tree_conflict;
+ }
+
+ db->shadowed = TRUE; /* Needed for the close_directory() on the root, to
+ make sure it doesn't use the ACTUAL tree */
+ }
+ else
+ base_status = status;
+
if (*eb->target_basename == '\0')
{
/* For an update with a NULL target, this is equivalent to open_dir(): */
- svn_wc__db_status_t status;
- /* Read the depth from the entry. */
- SVN_ERR(svn_wc__db_base_get_info(&status, NULL, NULL, NULL, NULL, NULL,
- &db->changed_rev, &db->changed_date,
- &db->changed_author, &db->ambient_depth,
- NULL, NULL, NULL, NULL, NULL,
- eb->db, db->local_abspath,
- db->pool, pool));
- db->was_incomplete = (status == svn_wc__db_status_incomplete);
+ db->was_incomplete = (base_status == svn_wc__db_status_incomplete);
+
+ /* ### TODO: Add some tree conflict and obstruction detection, etc. like
+ open_directory() does.
+ (or find a way to reuse that code here)
+
+ ### BH 2013: I don't think we need all of the detection here, as the
+ user explicitly asked to update this node. So we don't
+ have to tell that it is a local replacement/delete.
+ */
SVN_ERR(svn_wc__db_temp_op_start_directory_update(eb->db,
db->local_abspath,
@@ -1172,9 +1352,10 @@ modcheck_callback(void *baton,
case svn_wc_status_missing:
case svn_wc_status_obstructed:
- if (status->prop_status != svn_wc_status_modified)
- break;
- /* Fall through in the found modification case */
+ mb->found_mod = TRUE;
+ mb->found_not_delete = TRUE;
+ /* Exit from the status walker: We know what we want to know */
+ return svn_error_create(SVN_ERR_CEASE_INVOCATION, NULL, NULL);
default:
case svn_wc_status_added:
@@ -1195,14 +1376,14 @@ modcheck_callback(void *baton,
* is set to true and all the local modifications were deletes then set
* *ALL_EDITS_ARE_DELETES to true, set it to false otherwise. LOCAL_ABSPATH
* may be a file or a directory. */
-static svn_error_t *
-node_has_local_mods(svn_boolean_t *modified,
- svn_boolean_t *all_edits_are_deletes,
- svn_wc__db_t *db,
- const char *local_abspath,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- apr_pool_t *scratch_pool)
+svn_error_t *
+svn_wc__node_has_local_mods(svn_boolean_t *modified,
+ svn_boolean_t *all_edits_are_deletes,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
{
modcheck_baton_t modcheck_baton = { NULL, FALSE, FALSE };
svn_error_t *err;
@@ -1226,195 +1407,15 @@ node_has_local_mods(svn_boolean_t *modified,
SVN_ERR(err);
*modified = modcheck_baton.found_mod;
- *all_edits_are_deletes = !modcheck_baton.found_not_delete;
+ *all_edits_are_deletes = (modcheck_baton.found_mod
+ && !modcheck_baton.found_not_delete);
return SVN_NO_ERROR;
}
-
/* Indicates an unset svn_wc_conflict_reason_t. */
#define SVN_WC_CONFLICT_REASON_NONE (svn_wc_conflict_reason_t)(-1)
-/* Create a tree conflict struct.
- *
- * The REASON is stored directly in the tree conflict info.
- *
- * All temporary allocactions are be made in SCRATCH_POOL, while allocations
- * needed for the returned conflict struct are made in RESULT_POOL.
- *
- * All other parameters are identical to and described by
- * check_tree_conflict(), with the slight modification that this function
- * relies on the reason passed in REASON instead of actively looking for one. */
-static svn_error_t *
-create_tree_conflict(svn_wc_conflict_description2_t **pconflict,
- struct edit_baton *eb,
- const char *local_abspath,
- svn_wc_conflict_reason_t reason,
- svn_wc_conflict_action_t action,
- svn_node_kind_t their_node_kind,
- const char *their_relpath,
- apr_pool_t *result_pool, apr_pool_t *scratch_pool)
-{
- const char *repos_root_url = NULL;
- const char *left_repos_relpath;
- svn_revnum_t left_revision;
- svn_node_kind_t left_kind;
- const char *right_repos_relpath;
- const char *added_repos_relpath = NULL;
- svn_node_kind_t conflict_node_kind;
- svn_wc_conflict_version_t *src_left_version;
- svn_wc_conflict_version_t *src_right_version;
-
- *pconflict = NULL;
-
- SVN_ERR_ASSERT(reason != SVN_WC_CONFLICT_REASON_NONE);
- SVN_ERR_ASSERT(their_relpath != NULL);
-
- /* Get the source-left information, i.e. the local state of the node
- * before any changes were made to the working copy, i.e. the state the
- * node would have if it was reverted. */
- if (reason == svn_wc_conflict_reason_added)
- {
- svn_wc__db_status_t added_status;
-
- /* ###TODO: It would be nice to tell the user at which URL and
- * ### revision source-left was empty, which could be quite difficult
- * ### to code, and is a slight theoretical leap of the svn mind.
- * ### Update should show
- * ### URL: svn_wc__db_scan_addition( &repos_relpath )
- * ### REV: The base revision of the parent of before this update
- * ### started
- * ### ### BUT what if parent was updated/switched away with
- * ### ### depth=empty after this node was added?
- * ### Switch should show
- * ### URL: scan_addition URL of before this switch started
- * ### REV: same as above */
-
- /* In case of a local addition, source-left is non-existent / empty. */
- left_kind = svn_node_none;
- left_revision = SVN_INVALID_REVNUM;
- left_repos_relpath = NULL;
-
- /* Still get the repository root needed by both 'update' and 'switch',
- * and the would-be repos_relpath needed to construct the source-right
- * in case of an 'update'. Check sanity while we're at it. */
- SVN_ERR(svn_wc__db_scan_addition(&added_status, NULL,
- &added_repos_relpath,
- &repos_root_url,
- NULL, NULL, NULL, NULL, NULL,
- eb->db, local_abspath,
- result_pool, scratch_pool));
-
- /* This better really be an added status. */
- SVN_ERR_ASSERT(added_status == svn_wc__db_status_added
- || added_status == svn_wc__db_status_copied
- || added_status == svn_wc__db_status_moved_here);
- }
- else if (reason == svn_wc_conflict_reason_unversioned)
- {
- /* Obstructed by an unversioned node. Source-left is
- * non-existent/empty. */
- left_kind = svn_node_none;
- left_revision = SVN_INVALID_REVNUM;
- left_repos_relpath = NULL;
- repos_root_url = eb->repos_root;
- }
- else
- {
- /* A BASE node should exist. */
- svn_wc__db_kind_t base_kind;
-
- /* If anything else shows up, then this assertion is probably naive
- * and that other case should also be handled. */
- SVN_ERR_ASSERT(reason == svn_wc_conflict_reason_edited
- || reason == svn_wc_conflict_reason_deleted
- || reason == svn_wc_conflict_reason_replaced
- || reason == svn_wc_conflict_reason_obstructed);
-
- SVN_ERR(svn_wc__db_base_get_info(NULL, &base_kind,
- &left_revision,
- &left_repos_relpath,
- &repos_root_url,
- NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- eb->db,
- local_abspath,
- result_pool,
- scratch_pool));
- /* Translate the node kind. */
- if (base_kind == svn_wc__db_kind_file
- || base_kind == svn_wc__db_kind_symlink)
- left_kind = svn_node_file;
- else if (base_kind == svn_wc__db_kind_dir)
- left_kind = svn_node_dir;
- else
- SVN_ERR_MALFUNCTION();
- }
-
- SVN_ERR_ASSERT(strcmp(repos_root_url, eb->repos_root) == 0);
-
- /* Find the source-right information, i.e. the state in the repository
- * to which we would like to update. */
- if (eb->switch_relpath)
- {
- /* This is a 'switch' operation. */
- right_repos_relpath = their_relpath;
- }
- else
- {
- /* This is an 'update', so REPOS_RELPATH would be the same as for
- * source-left. However, we don't have a source-left for locally
- * added files. */
- right_repos_relpath = (reason == svn_wc_conflict_reason_added ?
- added_repos_relpath : left_repos_relpath);
- if (! right_repos_relpath)
- right_repos_relpath = their_relpath;
- }
-
- SVN_ERR_ASSERT(right_repos_relpath != NULL);
-
- /* Determine PCONFLICT's overall node kind, which is not allowed to be
- * svn_node_none. We give it the source-right revision (THEIR_NODE_KIND)
- * -- unless source-right is deleted and hence == svn_node_none, in which
- * case we take it from source-left, which has to be the node kind that
- * was deleted. */
- conflict_node_kind = (action == svn_wc_conflict_action_delete ?
- left_kind : their_node_kind);
- SVN_ERR_ASSERT(conflict_node_kind == svn_node_file
- || conflict_node_kind == svn_node_dir);
-
-
- /* Construct the tree conflict info structs. */
-
- if (left_repos_relpath == NULL)
- /* A locally added or unversioned path in conflict with an incoming add.
- * Send an 'empty' left revision. */
- src_left_version = NULL;
- else
- src_left_version = svn_wc_conflict_version_create(repos_root_url,
- left_repos_relpath,
- left_revision,
- left_kind,
- result_pool);
-
- src_right_version = svn_wc_conflict_version_create(repos_root_url,
- right_repos_relpath,
- *eb->target_revision,
- their_node_kind,
- result_pool);
-
- *pconflict = svn_wc_conflict_description_create_tree2(
- local_abspath, conflict_node_kind,
- eb->switch_relpath ?
- svn_wc_operation_switch : svn_wc_operation_update,
- src_left_version, src_right_version, result_pool);
- (*pconflict)->action = action;
- (*pconflict)->reason = reason;
-
- return SVN_NO_ERROR;
-}
-
-
/* Check whether the incoming change ACTION on FULL_PATH would conflict with
* LOCAL_ABSPATH's scheduled change. If so, then raise a tree conflict with
* LOCAL_ABSPATH as the victim.
@@ -1422,45 +1423,32 @@ create_tree_conflict(svn_wc_conflict_description2_t **pconflict,
* The edit baton EB gives information including whether the operation is
* an update or a switch.
*
- * WORKING_STATUS and WORKING_KIND are the current node status of LOCAL_ABSPATH
+ * WORKING_STATUS is the current node status of LOCAL_ABSPATH
* and EXISTS_IN_REPOS specifies whether a BASE_NODE representation for exists
- * for this node.
+ * for this node. In that case the on disk type is compared to EXPECTED_KIND.
*
* If a tree conflict reason was found for the incoming action, the resulting
* tree conflict info is returned in *PCONFLICT. PCONFLICT must be non-NULL,
* while *PCONFLICT is always overwritten.
*
- * THEIR_NODE_KIND should be the node kind reflected by the incoming edit
- * function. E.g. dir_opened() should pass svn_node_dir, etc.
- * In some cases of delete, svn_node_none may be used here.
- *
- * THEIR_RELPATH should be the involved node's repository-relative path on the
- * source-right side, the side that the target should become after the update.
- * Simply put, that's the URL obtained from the node's dir_baton->new_relpath
- * or file_baton->new_relpath (but it's more complex for a delete).
- *
* The tree conflict is allocated in RESULT_POOL. Temporary allocations use
- * SCRACTH_POOl.
+ * SCRATCH_POOL.
*/
static svn_error_t *
-check_tree_conflict(svn_wc_conflict_description2_t **pconflict,
+check_tree_conflict(svn_skel_t **pconflict,
struct edit_baton *eb,
const char *local_abspath,
svn_wc__db_status_t working_status,
- svn_wc__db_kind_t working_kind,
svn_boolean_t exists_in_repos,
+ svn_node_kind_t expected_kind,
svn_wc_conflict_action_t action,
- svn_node_kind_t their_node_kind,
- const char *their_relpath,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
svn_wc_conflict_reason_t reason = SVN_WC_CONFLICT_REASON_NONE;
- svn_boolean_t locally_replaced = FALSE;
svn_boolean_t modified = FALSE;
svn_boolean_t all_mods_are_deletes = FALSE;
-
- SVN_ERR_ASSERT(their_relpath != NULL);
+ const char *move_src_op_root_abspath = NULL;
*pconflict = NULL;
@@ -1471,21 +1459,7 @@ check_tree_conflict(svn_wc_conflict_description2_t **pconflict,
case svn_wc__db_status_added:
case svn_wc__db_status_moved_here:
case svn_wc__db_status_copied:
- /* Is it a replace? */
- if (exists_in_repos)
- {
- svn_wc__db_status_t base_status;
- SVN_ERR(svn_wc__db_base_get_info(&base_status, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL,
- NULL, NULL,
- eb->db, local_abspath,
- scratch_pool, scratch_pool));
- if (base_status != svn_wc__db_status_not_present)
- locally_replaced = TRUE;
- }
-
- if (!locally_replaced)
+ if (!exists_in_repos)
{
/* The node is locally added, and it did not exist before. This
* is an 'update', so the local add can only conflict with an
@@ -1497,19 +1471,45 @@ check_tree_conflict(svn_wc_conflict_description2_t **pconflict,
* would not have been called in the first place. */
SVN_ERR_ASSERT(action == svn_wc_conflict_action_add);
- reason = svn_wc_conflict_reason_added;
+ /* Scan the addition in case our caller didn't. */
+ if (working_status == svn_wc__db_status_added)
+ SVN_ERR(svn_wc__db_scan_addition(&working_status, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, NULL,
+ eb->db, local_abspath,
+ scratch_pool, scratch_pool));
+
+ if (working_status == svn_wc__db_status_moved_here)
+ reason = svn_wc_conflict_reason_moved_here;
+ else
+ reason = svn_wc_conflict_reason_added;
}
else
{
- /* The node is locally replaced. */
- reason = svn_wc_conflict_reason_replaced;
+ /* The node is locally replaced but could also be moved-away. */
+ SVN_ERR(svn_wc__db_base_moved_to(NULL, NULL, NULL,
+ &move_src_op_root_abspath,
+ eb->db, local_abspath,
+ scratch_pool, scratch_pool));
+ if (move_src_op_root_abspath)
+ reason = svn_wc_conflict_reason_moved_away;
+ else
+ reason = svn_wc_conflict_reason_replaced;
}
break;
case svn_wc__db_status_deleted:
- /* The node is locally deleted. */
- reason = svn_wc_conflict_reason_deleted;
+ {
+ SVN_ERR(svn_wc__db_base_moved_to(NULL, NULL, NULL,
+ &move_src_op_root_abspath,
+ eb->db, local_abspath,
+ scratch_pool, scratch_pool));
+ if (move_src_op_root_abspath)
+ reason = svn_wc_conflict_reason_moved_away;
+ else
+ reason = svn_wc_conflict_reason_deleted;
+ }
break;
case svn_wc__db_status_incomplete:
@@ -1521,10 +1521,33 @@ check_tree_conflict(svn_wc_conflict_description2_t **pconflict,
* missing information (hopefully). */
case svn_wc__db_status_normal:
if (action == svn_wc_conflict_action_edit)
- /* An edit onto a local edit or onto *no* local changes is no
- * tree-conflict. (It's possibly a text- or prop-conflict,
- * but we don't handle those here.) */
- return SVN_NO_ERROR;
+ {
+ /* An edit onto a local edit or onto *no* local changes is no
+ * tree-conflict. (It's possibly a text- or prop-conflict,
+ * but we don't handle those here.)
+ *
+ * Except when there is a local obstruction
+ */
+ if (exists_in_repos)
+ {
+ svn_node_kind_t disk_kind;
+
+ SVN_ERR(svn_io_check_path(local_abspath, &disk_kind,
+ scratch_pool));
+
+ if (disk_kind != expected_kind && disk_kind != svn_node_none)
+ {
+ reason = svn_wc_conflict_reason_obstructed;
+ break;
+ }
+
+ }
+ return SVN_NO_ERROR;
+ }
+
+ /* Replace is handled as delete and then specifically in
+ add_directory() and add_file(), so we only expect deletes here */
+ SVN_ERR_ASSERT(action == svn_wc_conflict_action_delete);
/* Check if the update wants to delete or replace a locally
* modified node. */
@@ -1534,10 +1557,10 @@ check_tree_conflict(svn_wc_conflict_description2_t **pconflict,
* not visit the subdirectories of a directory that it wants to delete.
* Therefore, we need to start a separate crawl here. */
- SVN_ERR(node_has_local_mods(&modified, &all_mods_are_deletes,
- eb->db, local_abspath,
- eb->cancel_func, eb->cancel_baton,
- scratch_pool));
+ SVN_ERR(svn_wc__node_has_local_mods(&modified, &all_mods_are_deletes,
+ eb->db, local_abspath,
+ eb->cancel_func, eb->cancel_baton,
+ scratch_pool));
if (modified)
{
@@ -1573,35 +1596,57 @@ check_tree_conflict(svn_wc_conflict_description2_t **pconflict,
/* Sanity checks. Note that if there was no action on the node, this function
* would not have been called in the first place.*/
if (reason == svn_wc_conflict_reason_edited
+ || reason == svn_wc_conflict_reason_obstructed
|| reason == svn_wc_conflict_reason_deleted
+ || reason == svn_wc_conflict_reason_moved_away
|| reason == svn_wc_conflict_reason_replaced)
- /* When the node existed before (it was locally deleted, replaced or
- * edited), then 'update' cannot add it "again". So it can only send
- * _action_edit, _delete or _replace. */
- SVN_ERR_ASSERT(action == svn_wc_conflict_action_edit
- || action == svn_wc_conflict_action_delete
- || action == svn_wc_conflict_action_replace);
- else if (reason == svn_wc_conflict_reason_added)
- /* When the node did not exist before (it was locally added), then 'update'
- * cannot want to modify it in any way. It can only send _action_add. */
- SVN_ERR_ASSERT(action == svn_wc_conflict_action_add);
-
-
- /* A conflict was detected. Append log commands to the log accumulator
- * to record it. */
- return svn_error_trace(create_tree_conflict(pconflict, eb, local_abspath,
- reason, action, their_node_kind,
- their_relpath,
- result_pool, scratch_pool));
+ {
+ /* When the node existed before (it was locally deleted, replaced or
+ * edited), then 'update' cannot add it "again". So it can only send
+ * _action_edit, _delete or _replace. */
+ if (action != svn_wc_conflict_action_edit
+ && action != svn_wc_conflict_action_delete
+ && action != svn_wc_conflict_action_replace)
+ return svn_error_createf(SVN_ERR_WC_FOUND_CONFLICT, NULL,
+ _("Unexpected attempt to add a node at path '%s'"),
+ svn_dirent_local_style(local_abspath, scratch_pool));
+ }
+ else if (reason == svn_wc_conflict_reason_added ||
+ reason == svn_wc_conflict_reason_moved_here)
+ {
+ /* When the node did not exist before (it was locally added),
+ * then 'update' cannot want to modify it in any way.
+ * It can only send _action_add. */
+ if (action != svn_wc_conflict_action_add)
+ return svn_error_createf(SVN_ERR_WC_FOUND_CONFLICT, NULL,
+ _("Unexpected attempt to edit, delete, or replace "
+ "a node at path '%s'"),
+ svn_dirent_local_style(local_abspath, scratch_pool));
+
+ }
+
+
+ /* A conflict was detected. Create a conflict skel to record it. */
+ *pconflict = svn_wc__conflict_skel_create(result_pool);
+
+ SVN_ERR(svn_wc__conflict_skel_add_tree_conflict(*pconflict,
+ eb->db, local_abspath,
+ reason,
+ action,
+ move_src_op_root_abspath,
+ result_pool, scratch_pool));
+
+ return SVN_NO_ERROR;
}
-/* If LOCAL_ABSPATH is inside a conflicted tree, set *CONFLICTED to TRUE,
- * Otherwise set *CONFLICTED to FALSE. Use SCRATCH_POOL for temporary
- * allocations.
+/* If LOCAL_ABSPATH is inside a conflicted tree and the conflict is
+ * not a moved-away-edit conflict, set *CONFLICTED to TRUE. Otherwise
+ * set *CONFLICTED to FALSE.
*/
static svn_error_t *
already_in_a_tree_conflict(svn_boolean_t *conflicted,
+ svn_boolean_t *ignored,
svn_wc__db_t *db,
const char *local_abspath,
apr_pool_t *scratch_pool)
@@ -1611,39 +1656,22 @@ already_in_a_tree_conflict(svn_boolean_t *conflicted,
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
- *conflicted = FALSE;
+ *conflicted = *ignored = FALSE;
while (TRUE)
{
- svn_boolean_t is_wc_root, has_conflict;
+ svn_boolean_t is_wc_root;
svn_pool_clear(iterpool);
- SVN_ERR(svn_wc__db_read_info(NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- &has_conflict, NULL, NULL, NULL,
- NULL, NULL, NULL,
- db, ancestor_abspath, iterpool, iterpool));
-
- if (has_conflict)
- {
- const svn_wc_conflict_description2_t *conflict;
-
- SVN_ERR(svn_wc__db_op_read_tree_conflict(&conflict, db,
- ancestor_abspath,
- iterpool, iterpool));
-
- if (conflict != NULL)
- {
- *conflicted = TRUE;
- break;
- }
- }
+ SVN_ERR(svn_wc__conflicted_for_update_p(conflicted, ignored, db,
+ ancestor_abspath, TRUE,
+ scratch_pool));
+ if (*conflicted || *ignored)
+ break;
SVN_ERR(svn_wc__db_is_wcroot(&is_wc_root, db, ancestor_abspath,
iterpool));
-
if (is_wc_root)
break;
@@ -1658,19 +1686,15 @@ already_in_a_tree_conflict(svn_boolean_t *conflicted,
/* Temporary helper until the new conflict handling is in place */
static svn_error_t *
node_already_conflicted(svn_boolean_t *conflicted,
+ svn_boolean_t *conflict_ignored,
svn_wc__db_t *db,
const char *local_abspath,
apr_pool_t *scratch_pool)
{
- svn_boolean_t text_conflicted, prop_conflicted, tree_conflicted;
-
- SVN_ERR(svn_wc__internal_conflicted_p(&text_conflicted,
- &prop_conflicted,
- &tree_conflicted,
- db, local_abspath,
- scratch_pool));
+ SVN_ERR(svn_wc__conflicted_for_update_p(conflicted, conflict_ignored, db,
+ local_abspath, FALSE,
+ scratch_pool));
- *conflicted = (text_conflicted || prop_conflicted || tree_conflicted);
return SVN_NO_ERROR;
}
@@ -1687,16 +1711,18 @@ delete_entry(const char *path,
const char *base = svn_relpath_basename(path, NULL);
const char *local_abspath;
const char *repos_relpath;
- svn_wc__db_kind_t kind, base_kind;
+ svn_node_kind_t kind, base_kind;
+ svn_revnum_t old_revision;
svn_boolean_t conflicted;
- svn_boolean_t have_base;
svn_boolean_t have_work;
- svn_wc_conflict_description2_t *tree_conflict = NULL;
- svn_skel_t *work_item = NULL;
+ svn_skel_t *tree_conflict = NULL;
svn_wc__db_status_t status;
svn_wc__db_status_t base_status;
apr_pool_t *scratch_pool;
svn_boolean_t deleting_target;
+ svn_boolean_t deleting_switched;
+ svn_boolean_t keep_as_working = FALSE;
+ svn_boolean_t queue_deletes = TRUE;
if (pb->skip_this)
return SVN_NO_ERROR;
@@ -1720,7 +1746,7 @@ delete_entry(const char *path,
if (is_root)
{
/* Just skip this node; a future update will handle it */
- remember_skipped_tree(eb, local_abspath, pool);
+ SVN_ERR(remember_skipped_tree(eb, local_abspath, pool));
do_notification(eb, local_abspath, svn_node_unknown,
svn_wc_notify_update_skip_obstruction, scratch_pool);
@@ -1730,11 +1756,11 @@ delete_entry(const char *path,
}
}
- SVN_ERR(svn_wc__db_read_info(&status, &kind, NULL, &repos_relpath, NULL, NULL,
+ SVN_ERR(svn_wc__db_read_info(&status, &kind, &old_revision, &repos_relpath,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, &conflicted,
- NULL, NULL, NULL,
- &have_base, NULL, &have_work,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ &conflicted, NULL, NULL, NULL,
+ NULL, NULL, &have_work,
eb->db, local_abspath,
scratch_pool, scratch_pool));
@@ -1744,17 +1770,31 @@ delete_entry(const char *path,
base_kind = kind;
}
else
- SVN_ERR(svn_wc__db_base_get_info(&base_status, &base_kind, NULL,
+ SVN_ERR(svn_wc__db_base_get_info(&base_status, &base_kind, &old_revision,
&repos_relpath,
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
eb->db, local_abspath,
scratch_pool, scratch_pool));
+ if (pb->old_repos_relpath && repos_relpath)
+ {
+ const char *expected_name;
+
+ expected_name = svn_relpath_skip_ancestor(pb->old_repos_relpath,
+ repos_relpath);
+
+ deleting_switched = (!expected_name || strcmp(expected_name, base) != 0);
+ }
+ else
+ deleting_switched = FALSE;
+
/* Is this path a conflict victim? */
- if (conflicted)
- SVN_ERR(node_already_conflicted(&conflicted, eb->db, local_abspath,
- scratch_pool));
+ if (pb->shadowed)
+ conflicted = FALSE; /* Conflict applies to WORKING */
+ else if (conflicted)
+ SVN_ERR(node_already_conflicted(&conflicted, NULL,
+ eb->db, local_abspath, scratch_pool));
if (conflicted)
{
SVN_ERR(remember_skipped_tree(eb, local_abspath, scratch_pool));
@@ -1769,14 +1809,19 @@ delete_entry(const char *path,
}
-
- /* Receive the remote removal of excluded/absent/not present node.
- Do not notify, but perform the change even when the node is shadowed */
+ /* Receive the remote removal of excluded/server-excluded/not present node.
+ Do not notify, but perform the change even when the node is shadowed */
if (base_status == svn_wc__db_status_not_present
|| base_status == svn_wc__db_status_excluded
|| base_status == svn_wc__db_status_server_excluded)
{
- SVN_ERR(svn_wc__db_base_remove(eb->db, local_abspath, scratch_pool));
+ SVN_ERR(svn_wc__db_base_remove(eb->db, local_abspath,
+ FALSE /* keep_as_working */,
+ FALSE /* queue_deletes */,
+ FALSE /* remove_locks */,
+ SVN_INVALID_REVNUM /* not_present_rev */,
+ NULL, NULL,
+ scratch_pool));
if (deleting_target)
eb->target_deleted = TRUE;
@@ -1793,16 +1838,22 @@ delete_entry(const char *path,
/* Check for conflicts only when we haven't already recorded
* a tree-conflict on a parent node. */
- if (!pb->shadowed)
+ if (!pb->shadowed && !pb->edit_obstructed)
{
SVN_ERR(check_tree_conflict(&tree_conflict, eb, local_abspath,
- status, kind, TRUE,
- svn_wc_conflict_action_delete, svn_node_none,
- repos_relpath, pb->pool, scratch_pool));
+ status, TRUE,
+ (kind == svn_node_dir)
+ ? svn_node_dir
+ : svn_node_file,
+ svn_wc_conflict_action_delete,
+ pb->pool, scratch_pool));
}
+ else
+ queue_deletes = FALSE; /* There is no in-wc representation */
if (tree_conflict != NULL)
{
+ svn_wc_conflict_reason_t reason;
/* When we raise a tree conflict on a node, we don't want to mark the
* node as skipped, to allow a replacement to continue doing at least
* a bit of its work (possibly adding a not present node, for the
@@ -1810,18 +1861,16 @@ delete_entry(const char *path,
if (!pb->deletion_conflicts)
pb->deletion_conflicts = apr_hash_make(pb->pool);
- apr_hash_set(pb->deletion_conflicts, apr_pstrdup(pb->pool, base),
- APR_HASH_KEY_STRING, tree_conflict);
+ svn_hash_sets(pb->deletion_conflicts, apr_pstrdup(pb->pool, base),
+ tree_conflict);
- SVN_ERR(svn_wc__db_op_set_tree_conflict(eb->db,
- local_abspath,
- tree_conflict,
- scratch_pool));
-
- do_notification(eb, local_abspath, svn_node_unknown,
- svn_wc_notify_tree_conflict, scratch_pool);
+ SVN_ERR(svn_wc__conflict_read_tree_conflict(&reason, NULL, NULL,
+ eb->db, local_abspath,
+ tree_conflict,
+ scratch_pool, scratch_pool));
- if (tree_conflict->reason == svn_wc_conflict_reason_edited)
+ if (reason == svn_wc_conflict_reason_edited
+ || reason == svn_wc_conflict_reason_obstructed)
{
/* The item exists locally and has some sort of local mod.
* It no longer exists in the repository at its target URL@REV.
@@ -1829,14 +1878,14 @@ delete_entry(const char *path,
* To prepare the "accept mine" resolution for the tree conflict,
* we must schedule the existing content for re-addition as a copy
* of what it was, but with its local modifications preserved. */
- SVN_ERR(svn_wc__db_temp_op_make_copy(eb->db, local_abspath,
- scratch_pool));
+ keep_as_working = TRUE;
/* Fall through to remove the BASE_NODEs properly, with potentially
keeping a not-present marker */
}
- else if (tree_conflict->reason == svn_wc_conflict_reason_deleted
- || tree_conflict->reason == svn_wc_conflict_reason_replaced)
+ else if (reason == svn_wc_conflict_reason_deleted
+ || reason == svn_wc_conflict_reason_moved_away
+ || reason == svn_wc_conflict_reason_replaced)
{
/* The item does not exist locally because it was already shadowed.
* We must complete the deletion, leaving the tree conflict info
@@ -1848,6 +1897,14 @@ delete_entry(const char *path,
SVN_ERR_MALFUNCTION(); /* other reasons are not expected here */
}
+ SVN_ERR(complete_conflict(tree_conflict, eb, local_abspath, repos_relpath,
+ old_revision, NULL,
+ (kind == svn_node_dir)
+ ? svn_node_dir
+ : svn_node_file,
+ svn_node_none,
+ pb->pool, scratch_pool));
+
/* Issue a wq operation to delete the BASE_NODE data and to delete actual
nodes based on that from disk, but leave any WORKING_NODEs on disk.
@@ -1856,43 +1913,60 @@ delete_entry(const char *path,
If the thing being deleted is the *target* of this update, then
we need to recreate a 'deleted' entry, so that the parent can give
accurate reports about itself in the future. */
- if (! deleting_target)
+ if (! deleting_target && ! deleting_switched)
{
/* Delete, and do not leave a not-present node. */
- SVN_ERR(svn_wc__wq_build_base_remove(&work_item,
- eb->db, local_abspath,
- SVN_INVALID_REVNUM,
- svn_wc__db_kind_unknown,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_base_remove(eb->db, local_abspath,
+ keep_as_working, queue_deletes, FALSE,
+ SVN_INVALID_REVNUM /* not_present_rev */,
+ tree_conflict, NULL,
+ scratch_pool));
}
else
{
/* Delete, leaving a not-present node. */
- SVN_ERR(svn_wc__wq_build_base_remove(&work_item,
- eb->db, local_abspath,
- *eb->target_revision,
- base_kind,
- scratch_pool, scratch_pool));
- eb->target_deleted = TRUE;
+ SVN_ERR(svn_wc__db_base_remove(eb->db, local_abspath,
+ keep_as_working, queue_deletes, FALSE,
+ *eb->target_revision,
+ tree_conflict, NULL,
+ scratch_pool));
+ if (deleting_target)
+ eb->target_deleted = TRUE;
+ else
+ {
+ /* Don't remove the not-present marker at the final bump */
+ SVN_ERR(remember_skipped_tree(eb, local_abspath, pool));
+ }
}
- SVN_ERR(svn_wc__db_wq_add(eb->db, pb->local_abspath, work_item,
- scratch_pool));
-
SVN_ERR(svn_wc__wq_run(eb->db, pb->local_abspath,
eb->cancel_func, eb->cancel_baton,
scratch_pool));
- /* Notify. (If tree_conflict, we've already notified.) */
- if (tree_conflict == NULL)
+ /* Notify. */
+ if (tree_conflict)
+ {
+ if (eb->conflict_func)
+ SVN_ERR(svn_wc__conflict_invoke_resolver(eb->db, local_abspath,
+ tree_conflict,
+ NULL /* merge_options */,
+ eb->conflict_func,
+ eb->conflict_baton,
+ eb->cancel_func,
+ eb->cancel_baton,
+ scratch_pool));
+ do_notification(eb, local_abspath, svn_node_unknown,
+ svn_wc_notify_tree_conflict, scratch_pool);
+ }
+ else
{
svn_wc_notify_action_t action = svn_wc_notify_update_delete;
svn_node_kind_t node_kind;
- if (pb->shadowed)
+ if (pb->shadowed || pb->edit_obstructed)
action = svn_wc_notify_update_shadowed_delete;
- if (kind == svn_wc__db_kind_dir)
+ if (kind == svn_node_dir)
node_kind = svn_node_dir;
else
node_kind = svn_node_file;
@@ -1919,10 +1993,11 @@ add_directory(const char *path,
struct dir_baton *db;
svn_node_kind_t kind;
svn_wc__db_status_t status;
- svn_wc__db_kind_t wc_kind;
+ svn_node_kind_t wc_kind;
svn_boolean_t conflicted;
+ svn_boolean_t conflict_ignored = FALSE;
svn_boolean_t versioned_locally_and_present;
- svn_wc_conflict_description2_t *tree_conflict = NULL;
+ svn_skel_t *tree_conflict = NULL;
svn_error_t *err;
SVN_ERR_ASSERT(! (copyfrom_path || SVN_IS_VALID_REVNUM(copyfrom_rev)));
@@ -1975,13 +2050,13 @@ add_directory(const char *path,
return svn_error_trace(err);
svn_error_clear(err);
- wc_kind = svn_wc__db_kind_unknown;
+ wc_kind = svn_node_unknown;
status = svn_wc__db_status_normal;
conflicted = FALSE;
versioned_locally_and_present = FALSE;
}
- else if (wc_kind == svn_wc__db_kind_dir
+ else if (wc_kind == svn_node_dir
&& status == svn_wc__db_status_normal)
{
/* !! We found the root of a separate working copy obstructing the wc !!
@@ -1999,11 +2074,11 @@ add_directory(const char *path,
eb->repos_root,
eb->repos_uuid,
*eb->target_revision,
- svn_wc__db_kind_file,
+ svn_node_file,
NULL, NULL,
pool));
- remember_skipped_tree(eb, db->local_abspath, pool);
+ SVN_ERR(remember_skipped_tree(eb, db->local_abspath, pool));
db->skip_this = TRUE;
db->already_notified = TRUE;
@@ -2013,8 +2088,8 @@ add_directory(const char *path,
return SVN_NO_ERROR;
}
else if (status == svn_wc__db_status_normal
- && (wc_kind == svn_wc__db_kind_file
- || wc_kind == svn_wc__db_kind_symlink))
+ && (wc_kind == svn_node_file
+ || wc_kind == svn_node_symlink))
{
/* We found a file external occupating the place we need in BASE.
@@ -2027,7 +2102,7 @@ add_directory(const char *path,
file externals.
*/
- remember_skipped_tree(eb, db->local_abspath, pool);
+ SVN_ERR(remember_skipped_tree(eb, db->local_abspath, pool));
db->skip_this = TRUE;
db->already_notified = TRUE;
@@ -2036,7 +2111,7 @@ add_directory(const char *path,
return SVN_NO_ERROR;
}
- else if (wc_kind == svn_wc__db_kind_unknown)
+ else if (wc_kind == svn_node_unknown)
versioned_locally_and_present = FALSE; /* Tree conflict ACTUAL-only node */
else
versioned_locally_and_present = IS_NODE_PRESENT(status);
@@ -2045,30 +2120,41 @@ add_directory(const char *path,
if (conflicted)
{
if (pb->deletion_conflicts)
- tree_conflict = apr_hash_get(pb->deletion_conflicts, db->name,
- APR_HASH_KEY_STRING);
+ tree_conflict = svn_hash_gets(pb->deletion_conflicts, db->name);
if (tree_conflict)
{
+ svn_wc_conflict_reason_t reason;
+ const char *move_src_op_root_abspath;
/* So this deletion wasn't just a deletion, it is actually a
- replacement. Luckily we still have the conflict so we can
- just update it. */
+ replacement. Let's install a better tree conflict. */
- /* ### What else should we update? */
- tree_conflict->action = svn_wc_conflict_action_replace;
+ SVN_ERR(svn_wc__conflict_read_tree_conflict(&reason, NULL,
+ &move_src_op_root_abspath,
+ eb->db,
+ db->local_abspath,
+ tree_conflict,
+ db->pool, db->pool));
- SVN_ERR(svn_wc__db_op_set_tree_conflict(eb->db, db->local_abspath,
- tree_conflict, pool));
+ tree_conflict = svn_wc__conflict_skel_create(db->pool);
+
+ SVN_ERR(svn_wc__conflict_skel_add_tree_conflict(
+ tree_conflict,
+ eb->db, db->local_abspath,
+ reason, svn_wc_conflict_action_replace,
+ move_src_op_root_abspath,
+ db->pool, db->pool));
/* And now stop checking for conflicts here and just perform
a shadowed update */
+ db->edit_conflict = tree_conflict; /* Cache for close_directory */
tree_conflict = NULL; /* No direct notification */
db->shadowed = TRUE; /* Just continue */
conflicted = FALSE; /* No skip */
}
else
- SVN_ERR(node_already_conflicted(&conflicted, eb->db,
- db->local_abspath, pool));
+ SVN_ERR(node_already_conflicted(&conflicted, &conflict_ignored,
+ eb->db, db->local_abspath, pool));
}
/* Now the "usual" behaviour if already conflicted. Skip it. */
@@ -2096,7 +2182,7 @@ add_directory(const char *path,
eb->repos_root,
eb->repos_uuid,
*eb->target_revision,
- svn_wc__db_kind_dir,
+ svn_node_dir,
NULL, NULL,
pool));
@@ -2105,6 +2191,10 @@ add_directory(const char *path,
svn_wc_notify_skip_conflicted, pool);
return SVN_NO_ERROR;
}
+ else if (conflict_ignored)
+ {
+ db->shadowed = TRUE;
+ }
if (db->shadowed)
{
@@ -2135,7 +2225,7 @@ add_directory(const char *path,
/* Is there *something* that is not a dir? */
- local_is_non_dir = (wc_kind != svn_wc__db_kind_dir
+ local_is_non_dir = (wc_kind != svn_node_dir
&& status != svn_wc__db_status_deleted);
/* Do tree conflict checking if
@@ -2152,9 +2242,8 @@ add_directory(const char *path,
{
SVN_ERR(check_tree_conflict(&tree_conflict, eb,
db->local_abspath,
- status, wc_kind, FALSE,
+ status, FALSE, svn_node_none,
svn_wc_conflict_action_add,
- svn_node_dir, db->new_relpath,
pool, pool));
}
@@ -2176,60 +2265,64 @@ add_directory(const char *path,
db->shadowed = TRUE;
/* Mark a conflict */
- SVN_ERR(create_tree_conflict(&tree_conflict, eb,
- db->local_abspath,
- svn_wc_conflict_reason_unversioned,
- svn_wc_conflict_action_add,
- svn_node_dir,
- db->new_relpath, pool, pool));
- SVN_ERR_ASSERT(tree_conflict != NULL);
+ tree_conflict = svn_wc__conflict_skel_create(db->pool);
+
+ SVN_ERR(svn_wc__conflict_skel_add_tree_conflict(
+ tree_conflict,
+ eb->db, db->local_abspath,
+ svn_wc_conflict_reason_unversioned,
+ svn_wc_conflict_action_add, NULL,
+ db->pool, pool));
+ db->edit_conflict = tree_conflict;
}
}
- SVN_ERR(svn_wc__db_temp_op_set_new_dir_to_incomplete(eb->db,
- db->local_abspath,
- db->new_relpath,
- eb->repos_root,
- eb->repos_uuid,
- *eb->target_revision,
- db->ambient_depth,
- pool));
+ if (tree_conflict)
+ SVN_ERR(complete_conflict(tree_conflict, eb, db->local_abspath,
+ db->old_repos_relpath, db->old_revision,
+ db->new_relpath,
+ wc_kind,
+ svn_node_dir,
+ db->pool, pool));
+
+ SVN_ERR(svn_wc__db_base_add_incomplete_directory(
+ eb->db, db->local_abspath,
+ db->new_relpath,
+ eb->repos_root,
+ eb->repos_uuid,
+ *eb->target_revision,
+ db->ambient_depth,
+ (db->shadowed && db->obstruction_found),
+ (! db->shadowed
+ && status == svn_wc__db_status_added),
+ tree_conflict, NULL,
+ pool));
/* Make sure there is a real directory at LOCAL_ABSPATH, unless we are just
updating the DB */
if (!db->shadowed)
SVN_ERR(svn_wc__ensure_directory(db->local_abspath, pool));
- if (!db->shadowed && status == svn_wc__db_status_added)
- /* If there is no conflict we take over any added directory */
- SVN_ERR(svn_wc__db_temp_op_remove_working(eb->db, db->local_abspath, pool));
-
- /* ### We can't record an unversioned obstruction yet, so
- ### we record a delete instead, which will allow resolving the conflict
- ### to theirs with 'svn revert'. */
- if (db->shadowed && db->obstruction_found)
- {
- SVN_ERR(svn_wc__db_op_delete(eb->db, db->local_abspath,
- NULL, NULL /* notification */,
- eb->cancel_func, eb->cancel_baton,
- pool));
- }
-
if (tree_conflict != NULL)
{
- SVN_ERR(svn_wc__db_op_set_tree_conflict(eb->db, db->local_abspath,
- tree_conflict, pool));
+ if (eb->conflict_func)
+ SVN_ERR(svn_wc__conflict_invoke_resolver(eb->db, db->local_abspath,
+ tree_conflict,
+ NULL /* merge_options */,
+ eb->conflict_func,
+ eb->conflict_baton,
+ eb->cancel_func,
+ eb->cancel_baton,
+ pool));
db->already_notified = TRUE;
-
do_notification(eb, db->local_abspath, svn_node_dir,
svn_wc_notify_tree_conflict, pool);
}
-
/* If this add was obstructed by dir scheduled for addition without
- history let close_file() handle the notification because there
+ history let close_directory() handle the notification because there
might be properties to deal with. If PATH was added inside a locally
deleted tree, then suppress notification, a tree conflict was already
issued. */
@@ -2239,7 +2332,7 @@ add_directory(const char *path,
if (db->shadowed)
action = svn_wc_notify_update_shadowed_add;
- else if (db->obstruction_found)
+ else if (db->obstruction_found || db->add_existed)
action = svn_wc_notify_exists;
else
action = svn_wc_notify_update_add;
@@ -2264,9 +2357,10 @@ open_directory(const char *path,
struct edit_baton *eb = pb->edit_baton;
svn_boolean_t have_work;
svn_boolean_t conflicted;
- svn_wc_conflict_description2_t *tree_conflict = NULL;
+ svn_boolean_t conflict_ignored = FALSE;
+ svn_skel_t *tree_conflict = NULL;
svn_wc__db_status_t status, base_status;
- svn_wc__db_kind_t wc_kind;
+ svn_node_kind_t wc_kind;
SVN_ERR(make_dir_baton(&db, path, eb, pb, FALSE, pool));
*child_baton = db;
@@ -2284,7 +2378,7 @@ open_directory(const char *path,
if (is_root)
{
/* Just skip this node; a future update will handle it */
- remember_skipped_tree(eb, db->local_abspath, pool);
+ SVN_ERR(remember_skipped_tree(eb, db->local_abspath, pool));
db->skip_this = TRUE;
db->already_notified = TRUE;
@@ -2298,8 +2392,9 @@ open_directory(const char *path,
/* We should have a write lock on every directory touched. */
SVN_ERR(svn_wc__write_check(eb->db, db->local_abspath, pool));
- SVN_ERR(svn_wc__db_read_info(&status, &wc_kind, &db->old_revision, NULL,
- NULL, NULL, &db->changed_rev, &db->changed_date,
+ SVN_ERR(svn_wc__db_read_info(&status, &wc_kind, &db->old_revision,
+ &db->old_repos_relpath, NULL, NULL,
+ &db->changed_rev, &db->changed_date,
&db->changed_author, &db->ambient_depth,
NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL,
@@ -2312,19 +2407,21 @@ open_directory(const char *path,
base_status = status;
else
SVN_ERR(svn_wc__db_base_get_info(&base_status, NULL, &db->old_revision,
- NULL, NULL, NULL, &db->changed_rev,
- &db->changed_date, &db->changed_author,
- &db->ambient_depth, NULL, NULL, NULL,
- NULL, NULL,
+ &db->old_repos_relpath, NULL, NULL,
+ &db->changed_rev, &db->changed_date,
+ &db->changed_author, &db->ambient_depth,
+ NULL, NULL, NULL, NULL, NULL, NULL,
eb->db, db->local_abspath,
db->pool, pool));
db->was_incomplete = (base_status == svn_wc__db_status_incomplete);
/* Is this path a conflict victim? */
- if (conflicted)
- SVN_ERR(node_already_conflicted(&conflicted, eb->db,
- db->local_abspath, pool));
+ if (db->shadowed)
+ conflicted = FALSE; /* Conflict applies to WORKING */
+ else if (conflicted)
+ SVN_ERR(node_already_conflicted(&conflicted, &conflict_ignored,
+ eb->db, db->local_abspath, pool));
if (conflicted)
{
SVN_ERR(remember_skipped_tree(eb, db->local_abspath, pool));
@@ -2337,6 +2434,10 @@ open_directory(const char *path,
return SVN_NO_ERROR;
}
+ else if (conflict_ignored)
+ {
+ db->shadowed = TRUE;
+ }
/* Is this path a fresh tree conflict victim? If so, skip the tree
with one notification. */
@@ -2345,21 +2446,31 @@ open_directory(const char *path,
* a tree-conflict on a parent node. */
if (!db->shadowed)
SVN_ERR(check_tree_conflict(&tree_conflict, eb, db->local_abspath,
- status, wc_kind, TRUE,
- svn_wc_conflict_action_edit, svn_node_dir,
- db->new_relpath, db->pool, pool));
+ status, TRUE, svn_node_dir,
+ svn_wc_conflict_action_edit,
+ db->pool, pool));
/* Remember the roots of any locally deleted trees. */
if (tree_conflict != NULL)
{
+ svn_wc_conflict_reason_t reason;
db->edit_conflict = tree_conflict;
/* Other modifications wouldn't be a tree conflict */
- SVN_ERR_ASSERT(
- tree_conflict->reason == svn_wc_conflict_reason_deleted ||
- tree_conflict->reason == svn_wc_conflict_reason_replaced);
+
+ SVN_ERR(svn_wc__conflict_read_tree_conflict(&reason, NULL, NULL,
+ eb->db, db->local_abspath,
+ tree_conflict,
+ db->pool, db->pool));
+ SVN_ERR_ASSERT(reason == svn_wc_conflict_reason_deleted
+ || reason == svn_wc_conflict_reason_moved_away
+ || reason == svn_wc_conflict_reason_replaced
+ || reason == svn_wc_conflict_reason_obstructed);
/* Continue updating BASE */
- db->shadowed = TRUE;
+ if (reason == svn_wc_conflict_reason_obstructed)
+ db->edit_obstructed = TRUE;
+ else
+ db->shadowed = TRUE;
}
/* Mark directory as being at target_revision and URL, but incomplete. */
@@ -2389,7 +2500,7 @@ change_dir_prop(void *dir_baton,
propchange->name = apr_pstrdup(db->pool, name);
propchange->value = value ? svn_string_dup(value, db->pool) : NULL;
- if (!db->edited && svn_property_kind(NULL, name) == svn_prop_regular_kind)
+ if (!db->edited && svn_property_kind2(name) == svn_prop_regular_kind)
SVN_ERR(mark_directory_edited(db, pool));
return SVN_NO_ERROR;
@@ -2436,16 +2547,20 @@ close_directory(void *dir_baton,
const char *new_changed_author = NULL;
apr_pool_t *scratch_pool = db->pool;
svn_skel_t *all_work_items = NULL;
+ svn_skel_t *conflict_skel = NULL;
/* Skip if we're in a conflicted tree. */
if (db->skip_this)
{
/* Allow the parent to complete its update. */
- SVN_ERR(maybe_release_dir_info(db->bump_info));
+ SVN_ERR(maybe_release_dir_info(db));
return SVN_NO_ERROR;
}
+ if (db->edited)
+ conflict_skel = db->edit_conflict;
+
SVN_ERR(svn_categorize_props(db->propchanges, &entry_prop_changes,
&dav_prop_changes, &regular_prop_changes, pool));
@@ -2463,9 +2578,9 @@ close_directory(void *dir_baton,
if (db->add_existed)
{
/* This node already exists. Grab the current pristine properties. */
- SVN_ERR(svn_wc__get_pristine_props(&base_props,
- eb->db, db->local_abspath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_read_pristine_props(&base_props,
+ eb->db, db->local_abspath,
+ scratch_pool, scratch_pool));
}
else if (!db->adding_dir)
{
@@ -2495,8 +2610,7 @@ close_directory(void *dir_baton,
{
const svn_prop_t *prop;
prop = &APR_ARRAY_IDX(regular_prop_changes, i, svn_prop_t);
- apr_hash_set(props_to_delete, prop->name,
- APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(props_to_delete, prop->name, NULL);
}
/* Add these props to the incoming propchanges (in
@@ -2518,8 +2632,6 @@ close_directory(void *dir_baton,
to deal with them. */
if (regular_prop_changes->nelts)
{
- svn_skel_t *work_item;
-
/* If recording traversal info, then see if the
SVN_PROP_EXTERNALS property on this directory changed,
and record before and after for the change. */
@@ -2533,8 +2645,7 @@ close_directory(void *dir_baton,
const svn_string_t *new_val_s = change->value;
const svn_string_t *old_val_s;
- old_val_s = apr_hash_get(base_props, SVN_PROP_EXTERNALS,
- APR_HASH_KEY_STRING);
+ old_val_s = svn_hash_gets(base_props, SVN_PROP_EXTERNALS);
if ((new_val_s == NULL) && (old_val_s == NULL))
; /* No value before, no value after... so do nothing. */
@@ -2565,34 +2676,23 @@ close_directory(void *dir_baton,
actual_props = base_props;
}
- /* Merge pending properties into temporary files (ignoring
- conflicts). */
- SVN_ERR_W(svn_wc__merge_props(&work_item,
+ /* Merge pending properties. */
+ new_base_props = svn_prop__patch(base_props, regular_prop_changes,
+ db->pool);
+ SVN_ERR_W(svn_wc__merge_props(&conflict_skel,
&prop_state,
- &new_base_props,
&new_actual_props,
eb->db,
db->local_abspath,
- svn_wc__db_kind_dir,
- NULL, /* left_version */
- NULL, /* right_version */
NULL /* use baseprops */,
base_props,
actual_props,
regular_prop_changes,
- TRUE /* base_merge */,
- FALSE /* dry_run */,
- eb->conflict_func,
- eb->conflict_baton,
- eb->cancel_func,
- eb->cancel_baton,
db->pool,
scratch_pool),
_("Couldn't do property merge"));
/* After a (not-dry-run) merge, we ALWAYS have props to save. */
SVN_ERR_ASSERT(new_base_props != NULL && new_actual_props != NULL);
- all_work_items = svn_wc__wq_merge(all_work_items, work_item,
- scratch_pool);
}
SVN_ERR(accumulate_last_change(&new_changed_rev, &new_changed_date,
@@ -2602,8 +2702,7 @@ close_directory(void *dir_baton,
/* Check if we should add some not-present markers before marking the
directory complete (Issue #3569) */
{
- apr_hash_t *new_children = apr_hash_get(eb->dir_dirents, db->new_relpath,
- APR_HASH_KEY_STRING);
+ apr_hash_t *new_children = svn_hash_gets(eb->dir_dirents, db->new_relpath);
if (new_children != NULL)
{
@@ -2619,7 +2718,7 @@ close_directory(void *dir_baton,
const char *child_relpath;
const svn_dirent_t *dirent;
svn_wc__db_status_t status;
- svn_wc__db_kind_t child_kind;
+ svn_node_kind_t child_kind;
svn_error_t *err;
svn_pool_clear(iterpool);
@@ -2630,17 +2729,17 @@ close_directory(void *dir_baton,
dirent = svn__apr_hash_index_val(hi);
child_kind = (dirent->kind == svn_node_dir)
- ? svn_wc__db_kind_dir
- : svn_wc__db_kind_file;
+ ? svn_node_dir
+ : svn_node_file;
if (db->ambient_depth < svn_depth_immediates
- && child_kind == svn_wc__db_kind_dir)
+ && child_kind == svn_node_dir)
continue; /* We don't need the subdirs */
/* ### We just check if there is some node in BASE at this path */
err = svn_wc__db_base_get_info(&status, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
eb->db, child_abspath,
iterpool, iterpool);
@@ -2705,7 +2804,7 @@ close_directory(void *dir_baton,
eb->repos_root,
eb->repos_uuid,
*eb->target_revision,
- svn_wc__db_kind_file,
+ svn_node_file,
NULL, NULL,
iterpool));
}
@@ -2725,6 +2824,7 @@ close_directory(void *dir_baton,
else
{
apr_hash_t *props;
+ apr_array_header_t *iprops = NULL;
/* ### we know a base node already exists. it was created in
### open_directory or add_directory. let's just preserve the
@@ -2763,6 +2863,42 @@ close_directory(void *dir_baton,
if (props == NULL)
props = base_props;
+ if (conflict_skel)
+ {
+ svn_skel_t *work_item;
+
+ SVN_ERR(complete_conflict(conflict_skel,
+ db->edit_baton,
+ db->local_abspath,
+ db->old_repos_relpath,
+ db->old_revision,
+ db->new_relpath,
+ svn_node_dir, svn_node_dir,
+ db->pool, scratch_pool));
+
+ SVN_ERR(svn_wc__conflict_create_markers(&work_item,
+ eb->db, db->local_abspath,
+ conflict_skel,
+ scratch_pool, scratch_pool));
+
+ all_work_items = svn_wc__wq_merge(all_work_items, work_item,
+ scratch_pool);
+ }
+
+ /* Any inherited props to be set set for this base node? */
+ if (eb->wcroot_iprops)
+ {
+ iprops = svn_hash_gets(eb->wcroot_iprops, db->local_abspath);
+
+ /* close_edit may also update iprops for switched nodes, catching
+ those for which close_directory is never called (e.g. a switch
+ with no changes). So as a minor optimization we remove any
+ iprops from the hash so as not to set them again in
+ close_edit. */
+ if (iprops)
+ svn_hash_sets(eb->wcroot_iprops, db->local_abspath, NULL);
+ }
+
/* Update the BASE data for the directory and mark the directory
complete */
SVN_ERR(svn_wc__db_base_add_directory(
@@ -2778,10 +2914,10 @@ close_directory(void *dir_baton,
(dav_prop_changes->nelts > 0)
? svn_prop_array_to_hash(dav_prop_changes, pool)
: NULL,
- NULL /* conflict */,
+ conflict_skel,
(! db->shadowed) && new_base_props != NULL,
new_actual_props,
- all_work_items,
+ iprops, all_work_items,
scratch_pool));
}
@@ -2790,6 +2926,16 @@ close_directory(void *dir_baton,
eb->cancel_func, eb->cancel_baton,
scratch_pool));
+ if (conflict_skel && eb->conflict_func)
+ SVN_ERR(svn_wc__conflict_invoke_resolver(eb->db, db->local_abspath,
+ conflict_skel,
+ NULL /* merge_options */,
+ eb->conflict_func,
+ eb->conflict_baton,
+ eb->cancel_func,
+ eb->cancel_baton,
+ scratch_pool));
+
/* Notify of any prop changes on this directory -- but do nothing if
it's an added or skipped directory, because notification has already
happened in that case - unless the add was obstructed by a dir
@@ -2800,7 +2946,7 @@ close_directory(void *dir_baton,
svn_wc_notify_t *notify;
svn_wc_notify_action_t action;
- if (db->shadowed)
+ if (db->shadowed || db->edit_obstructed)
action = svn_wc_notify_update_shadowed_update;
else if (db->obstruction_found || db->add_existed)
action = svn_wc_notify_exists;
@@ -2818,7 +2964,7 @@ close_directory(void *dir_baton,
/* We're done with this directory, so remove one reference from the
bump information. */
- SVN_ERR(maybe_release_dir_info(db->bump_info));
+ SVN_ERR(maybe_release_dir_info(db));
return SVN_NO_ERROR;
}
@@ -2827,7 +2973,7 @@ close_directory(void *dir_baton,
/* Common code for 'absent_file' and 'absent_directory'. */
static svn_error_t *
absent_node(const char *path,
- svn_wc__db_kind_t absent_kind,
+ svn_node_kind_t absent_kind,
void *parent_baton,
apr_pool_t *pool)
{
@@ -2838,7 +2984,7 @@ absent_node(const char *path,
const char *local_abspath;
svn_error_t *err;
svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
if (pb->skip_this)
return SVN_NO_ERROR;
@@ -2863,21 +3009,58 @@ absent_node(const char *path,
svn_error_clear(err);
status = svn_wc__db_status_not_present;
- kind = svn_wc__db_kind_unknown;
+ kind = svn_node_unknown;
}
- if (status == svn_wc__db_status_normal
- && kind == svn_wc__db_kind_dir)
+ if (status == svn_wc__db_status_normal)
{
- /* We found an obstructing working copy!
+ svn_boolean_t wcroot;
+ /* We found an obstructing working copy or a file external! */
- We can do two things now:
- 1) notify the user, record a skip, etc.
- 2) Just record the absent node in BASE in the parent
- working copy.
+ SVN_ERR(svn_wc__db_is_wcroot(&wcroot, eb->db, local_abspath,
+ scratch_pool));
- As option 2 happens to be exactly what we do anyway, lets do that.
- */
+ if (wcroot)
+ {
+ /*
+ We have an obstructing working copy; possibly a directory external
+
+ We can do two things now:
+ 1) notify the user, record a skip, etc.
+ 2) Just record the absent node in BASE in the parent
+ working copy.
+
+ As option 2 happens to be exactly what we do anyway, fall through.
+ */
+ }
+ else
+ {
+ /* The server asks us to replace a file external
+ (Existing BASE node; not reported by the working copy crawler or
+ there would have been a delete_entry() call.
+
+ There is no way we can store this state in the working copy as
+ the BASE layer is already filled.
+
+ We could error out, but that is not helping anybody; the user is not
+ even seeing with what the file external would be replaced, so let's
+ report a skip and continue the update.
+ */
+
+ if (eb->notify_func)
+ {
+ svn_wc_notify_t *notify;
+ notify = svn_wc_create_notify(
+ local_abspath,
+ svn_wc_notify_update_skip_obstruction,
+ scratch_pool);
+
+ eb->notify_func(eb->notify_baton, notify, scratch_pool);
+ }
+
+ svn_pool_destroy(scratch_pool);
+ return SVN_NO_ERROR;
+ }
}
else if (status == svn_wc__db_status_not_present
|| status == svn_wc__db_status_server_excluded
@@ -2933,7 +3116,7 @@ absent_file(const char *path,
void *parent_baton,
apr_pool_t *pool)
{
- return absent_node(path, svn_wc__db_kind_file, parent_baton, pool);
+ return absent_node(path, svn_node_file, parent_baton, pool);
}
@@ -2943,7 +3126,7 @@ absent_directory(const char *path,
void *parent_baton,
apr_pool_t *pool)
{
- return absent_node(path, svn_wc__db_kind_dir, parent_baton, pool);
+ return absent_node(path, svn_node_dir, parent_baton, pool);
}
@@ -2960,12 +3143,13 @@ add_file(const char *path,
struct edit_baton *eb = pb->edit_baton;
struct file_baton *fb;
svn_node_kind_t kind = svn_node_none;
- svn_wc__db_kind_t wc_kind = svn_wc__db_kind_unknown;
+ svn_node_kind_t wc_kind = svn_node_unknown;
svn_wc__db_status_t status = svn_wc__db_status_normal;
apr_pool_t *scratch_pool;
svn_boolean_t conflicted = FALSE;
+ svn_boolean_t conflict_ignored = FALSE;
svn_boolean_t versioned_locally_and_present = FALSE;
- svn_wc_conflict_description2_t *tree_conflict = NULL;
+ svn_skel_t *tree_conflict = NULL;
svn_error_t *err = SVN_NO_ERROR;
SVN_ERR_ASSERT(! (copyfrom_path || SVN_IS_VALID_REVNUM(copyfrom_rev)));
@@ -3009,12 +3193,12 @@ add_file(const char *path,
return svn_error_trace(err);
svn_error_clear(err);
- wc_kind = svn_wc__db_kind_unknown;
+ wc_kind = svn_node_unknown;
conflicted = FALSE;
versioned_locally_and_present = FALSE;
}
- else if (wc_kind == svn_wc__db_kind_dir
+ else if (wc_kind == svn_node_dir
&& status == svn_wc__db_status_normal)
{
/* !! We found the root of a separate working copy obstructing the wc !!
@@ -3025,10 +3209,10 @@ add_file(const char *path,
The only thing we can do is add a not-present node, to allow
a future update to bring in the new files when the problem is
resolved. */
- apr_hash_set(pb->not_present_files, apr_pstrdup(pb->pool, fb->name),
- APR_HASH_KEY_STRING, (void*)1);
+ svn_hash_sets(pb->not_present_files, apr_pstrdup(pb->pool, fb->name),
+ (void *)1);
- remember_skipped_tree(eb, fb->local_abspath, pool);
+ SVN_ERR(remember_skipped_tree(eb, fb->local_abspath, pool));
fb->skip_this = TRUE;
fb->already_notified = TRUE;
@@ -3040,8 +3224,8 @@ add_file(const char *path,
return SVN_NO_ERROR;
}
else if (status == svn_wc__db_status_normal
- && (wc_kind == svn_wc__db_kind_file
- || wc_kind == svn_wc__db_kind_symlink))
+ && (wc_kind == svn_node_file
+ || wc_kind == svn_node_symlink))
{
/* We found a file external occupating the place we need in BASE.
@@ -3053,7 +3237,7 @@ add_file(const char *path,
The reason we get here is that the adm crawler doesn't report
file externals.
*/
- remember_skipped_tree(eb, fb->local_abspath, pool);
+ SVN_ERR(remember_skipped_tree(eb, fb->local_abspath, pool));
fb->skip_this = TRUE;
fb->already_notified = TRUE;
@@ -3064,41 +3248,53 @@ add_file(const char *path,
return SVN_NO_ERROR;
}
- else if (wc_kind == svn_wc__db_kind_unknown)
+ else if (wc_kind == svn_node_unknown)
versioned_locally_and_present = FALSE; /* Tree conflict ACTUAL-only node */
else
versioned_locally_and_present = IS_NODE_PRESENT(status);
/* Is this path a conflict victim? */
- if (conflicted)
- if (conflicted)
+ if (fb->shadowed)
+ conflicted = FALSE; /* Conflict applies to WORKING */
+ else if (conflicted)
{
if (pb->deletion_conflicts)
- tree_conflict = apr_hash_get(pb->deletion_conflicts, fb->name,
- APR_HASH_KEY_STRING);
+ tree_conflict = svn_hash_gets(pb->deletion_conflicts, fb->name);
if (tree_conflict)
{
+ svn_wc_conflict_reason_t reason;
+ const char *move_src_op_root_abspath;
/* So this deletion wasn't just a deletion, it is actually a
- replacement. Luckily we still have the conflict so we can
- just update it. */
+ replacement. Let's install a better tree conflict. */
- /* ### What else should we update? */
- tree_conflict->action = svn_wc_conflict_action_replace;
+ SVN_ERR(svn_wc__conflict_read_tree_conflict(&reason, NULL,
+ &move_src_op_root_abspath,
+ eb->db,
+ fb->local_abspath,
+ tree_conflict,
+ fb->pool, fb->pool));
- SVN_ERR(svn_wc__db_op_set_tree_conflict(eb->db, fb->local_abspath,
- tree_conflict, pool));
+ tree_conflict = svn_wc__conflict_skel_create(fb->pool);
+
+ SVN_ERR(svn_wc__conflict_skel_add_tree_conflict(
+ tree_conflict,
+ eb->db, fb->local_abspath,
+ reason, svn_wc_conflict_action_replace,
+ move_src_op_root_abspath,
+ fb->pool, fb->pool));
/* And now stop checking for conflicts here and just perform
a shadowed update */
+ fb->edit_conflict = tree_conflict; /* Cache for close_file */
tree_conflict = NULL; /* No direct notification */
fb->shadowed = TRUE; /* Just continue */
conflicted = FALSE; /* No skip */
}
else
- SVN_ERR(node_already_conflicted(&conflicted, eb->db,
- fb->local_abspath, pool));
+ SVN_ERR(node_already_conflicted(&conflicted, &conflict_ignored,
+ eb->db, fb->local_abspath, pool));
}
/* Now the usual conflict handling: skip. */
@@ -3120,8 +3316,8 @@ add_file(const char *path,
Note that we can safely assume that no present base node exists,
because then we would not have received an add_file.
*/
- apr_hash_set(pb->not_present_files, apr_pstrdup(pb->pool, fb->name),
- APR_HASH_KEY_STRING, (void*)1);
+ svn_hash_sets(pb->not_present_files, apr_pstrdup(pb->pool, fb->name),
+ (void *)1);
do_notification(eb, fb->local_abspath, svn_node_unknown,
svn_wc_notify_skip_conflicted, scratch_pool);
@@ -3130,6 +3326,10 @@ add_file(const char *path,
return SVN_NO_ERROR;
}
+ else if (conflict_ignored)
+ {
+ fb->shadowed = TRUE;
+ }
if (fb->shadowed)
{
@@ -3161,8 +3361,8 @@ add_file(const char *path,
scratch_pool, scratch_pool));
/* Is there something that is a file? */
- local_is_file = (wc_kind == svn_wc__db_kind_file
- || wc_kind == svn_wc__db_kind_symlink);
+ local_is_file = (wc_kind == svn_node_file
+ || wc_kind == svn_node_symlink);
/* Do tree conflict checking if
* - if there is a local copy.
@@ -3178,9 +3378,8 @@ add_file(const char *path,
{
SVN_ERR(check_tree_conflict(&tree_conflict, eb,
fb->local_abspath,
- status, wc_kind, FALSE,
+ status, FALSE, svn_node_none,
svn_wc_conflict_action_add,
- svn_node_file, fb->new_relpath,
scratch_pool, scratch_pool));
}
@@ -3203,14 +3402,15 @@ add_file(const char *path,
fb->shadowed = TRUE;
/* Mark a conflict */
- SVN_ERR(create_tree_conflict(&tree_conflict, eb,
- fb->local_abspath,
- svn_wc_conflict_reason_unversioned,
- svn_wc_conflict_action_add,
- svn_node_file,
- fb->new_relpath,
- scratch_pool, scratch_pool));
- SVN_ERR_ASSERT(tree_conflict != NULL);
+ tree_conflict = svn_wc__conflict_skel_create(fb->pool);
+
+ SVN_ERR(svn_wc__conflict_skel_add_tree_conflict(
+ tree_conflict,
+ eb->db, fb->local_abspath,
+ svn_wc_conflict_reason_unversioned,
+ svn_wc_conflict_action_add,
+ NULL,
+ fb->pool, scratch_pool));
}
}
@@ -3221,16 +3421,36 @@ add_file(const char *path,
|| *eb->target_basename == '\0'
|| (strcmp(fb->local_abspath, eb->target_abspath) != 0))
{
- apr_hash_set(pb->not_present_files, apr_pstrdup(pb->pool, fb->name),
- APR_HASH_KEY_STRING, (void*)1);
+ svn_hash_sets(pb->not_present_files, apr_pstrdup(pb->pool, fb->name),
+ (void *)1);
}
if (tree_conflict != NULL)
{
- SVN_ERR(svn_wc__db_op_set_tree_conflict(eb->db,
- fb->local_abspath,
- tree_conflict,
- scratch_pool));
+ SVN_ERR(complete_conflict(tree_conflict,
+ fb->edit_baton,
+ fb->local_abspath,
+ fb->old_repos_relpath,
+ fb->old_revision,
+ fb->new_relpath,
+ wc_kind,
+ svn_node_file,
+ fb->pool, scratch_pool));
+
+ SVN_ERR(svn_wc__db_op_mark_conflict(eb->db,
+ fb->local_abspath,
+ tree_conflict, NULL,
+ scratch_pool));
+
+ if (eb->conflict_func)
+ SVN_ERR(svn_wc__conflict_invoke_resolver(eb->db, fb->local_abspath,
+ tree_conflict,
+ NULL /* merge_options */,
+ eb->conflict_func,
+ eb->conflict_baton,
+ eb->cancel_func,
+ eb->cancel_baton,
+ scratch_pool));
fb->already_notified = TRUE;
do_notification(eb, fb->local_abspath, svn_node_file,
@@ -3255,10 +3475,11 @@ open_file(const char *path,
struct edit_baton *eb = pb->edit_baton;
struct file_baton *fb;
svn_boolean_t conflicted;
+ svn_boolean_t conflict_ignored = FALSE;
svn_boolean_t have_work;
svn_wc__db_status_t status;
- svn_wc__db_kind_t wc_kind;
- svn_wc_conflict_description2_t *tree_conflict = NULL;
+ svn_node_kind_t wc_kind;
+ svn_skel_t *tree_conflict = NULL;
/* the file_pool can stick around for a *long* time, so we want to use
a subpool for any temporary allocations. */
@@ -3280,7 +3501,7 @@ open_file(const char *path,
if (is_root)
{
/* Just skip this node; a future update will handle it */
- remember_skipped_tree(eb, fb->local_abspath, pool);
+ SVN_ERR(remember_skipped_tree(eb, fb->local_abspath, pool));
fb->skip_this = TRUE;
fb->already_notified = TRUE;
@@ -3294,29 +3515,33 @@ open_file(const char *path,
/* Sanity check. */
/* If replacing, make sure the .svn entry already exists. */
- SVN_ERR(svn_wc__db_read_info(&status, &wc_kind, &fb->old_revision, NULL,
- NULL, NULL, &fb->changed_rev, &fb->changed_date,
+ SVN_ERR(svn_wc__db_read_info(&status, &wc_kind, &fb->old_revision,
+ &fb->old_repos_relpath, NULL, NULL,
+ &fb->changed_rev, &fb->changed_date,
&fb->changed_author, NULL,
&fb->original_checksum, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL,
- &conflicted, NULL, NULL, NULL,
+ &conflicted, NULL, NULL, &fb->local_prop_mods,
NULL, NULL, &have_work,
eb->db, fb->local_abspath,
fb->pool, scratch_pool));
if (have_work)
SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, &fb->old_revision,
- NULL, NULL, NULL, &fb->changed_rev,
- &fb->changed_date, &fb->changed_author,
- NULL, &fb->original_checksum, NULL, NULL,
- NULL, NULL,
+ &fb->old_repos_relpath, NULL, NULL,
+ &fb->changed_rev, &fb->changed_date,
+ &fb->changed_author, NULL,
+ &fb->original_checksum, NULL, NULL,
+ NULL, NULL, NULL,
eb->db, fb->local_abspath,
fb->pool, scratch_pool));
/* Is this path a conflict victim? */
- if (conflicted)
- SVN_ERR(node_already_conflicted(&conflicted, eb->db,
- fb->local_abspath, pool));
+ if (fb->shadowed)
+ conflicted = FALSE; /* Conflict applies to WORKING */
+ else if (conflicted)
+ SVN_ERR(node_already_conflicted(&conflicted, &conflict_ignored,
+ eb->db, fb->local_abspath, pool));
if (conflicted)
{
SVN_ERR(remember_skipped_tree(eb, fb->local_abspath, pool));
@@ -3331,29 +3556,40 @@ open_file(const char *path,
return SVN_NO_ERROR;
}
-
- fb->shadowed = pb->shadowed;
+ else if (conflict_ignored)
+ {
+ fb->shadowed = TRUE;
+ }
/* Check for conflicts only when we haven't already recorded
* a tree-conflict on a parent node. */
if (!fb->shadowed)
SVN_ERR(check_tree_conflict(&tree_conflict, eb, fb->local_abspath,
- status, wc_kind, TRUE,
- svn_wc_conflict_action_edit, svn_node_file,
- fb->new_relpath, fb->pool, scratch_pool));
+ status, TRUE, svn_node_file,
+ svn_wc_conflict_action_edit,
+ fb->pool, scratch_pool));
/* Is this path the victim of a newly-discovered tree conflict? */
if (tree_conflict != NULL)
{
+ svn_wc_conflict_reason_t reason;
fb->edit_conflict = tree_conflict;
-
/* Other modifications wouldn't be a tree conflict */
- SVN_ERR_ASSERT(
- tree_conflict->reason == svn_wc_conflict_reason_deleted ||
- tree_conflict->reason == svn_wc_conflict_reason_replaced);
+
+ SVN_ERR(svn_wc__conflict_read_tree_conflict(&reason, NULL, NULL,
+ eb->db, fb->local_abspath,
+ tree_conflict,
+ scratch_pool, scratch_pool));
+ SVN_ERR_ASSERT(reason == svn_wc_conflict_reason_deleted
+ || reason == svn_wc_conflict_reason_moved_away
+ || reason == svn_wc_conflict_reason_replaced
+ || reason == svn_wc_conflict_reason_obstructed);
/* Continue updating BASE */
- fb->shadowed = TRUE;
+ if (reason == svn_wc_conflict_reason_obstructed)
+ fb->edit_obstructed = TRUE;
+ else
+ fb->shadowed = TRUE;
}
svn_pool_destroy(scratch_pool);
@@ -3361,6 +3597,48 @@ open_file(const char *path,
return SVN_NO_ERROR;
}
+/* Implements svn_stream_lazyopen_func_t. */
+static svn_error_t *
+lazy_open_source(svn_stream_t **stream,
+ void *baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct file_baton *fb = baton;
+
+ SVN_ERR(svn_wc__db_pristine_read(stream, NULL, fb->edit_baton->db,
+ fb->local_abspath,
+ fb->original_checksum,
+ result_pool, scratch_pool));
+
+
+ return SVN_NO_ERROR;
+}
+
+struct lazy_target_baton {
+ struct file_baton *fb;
+ struct handler_baton *hb;
+ struct edit_baton *eb;
+};
+
+/* Implements svn_stream_lazyopen_func_t. */
+static svn_error_t *
+lazy_open_target(svn_stream_t **stream,
+ void *baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct lazy_target_baton *tb = baton;
+
+ SVN_ERR(svn_wc__open_writable_base(stream, &tb->hb->new_text_base_tmp_abspath,
+ NULL, &tb->hb->new_text_base_sha1_checksum,
+ tb->fb->edit_baton->db,
+ tb->eb->wcroot_abspath,
+ result_pool, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
/* An svn_delta_editor_t function. */
static svn_error_t *
apply_textdelta(void *file_baton,
@@ -3373,10 +3651,10 @@ apply_textdelta(void *file_baton,
apr_pool_t *handler_pool = svn_pool_create(fb->pool);
struct handler_baton *hb = apr_pcalloc(handler_pool, sizeof(*hb));
struct edit_baton *eb = fb->edit_baton;
- svn_error_t *err;
const svn_checksum_t *recorded_base_checksum;
svn_checksum_t *expected_base_checksum;
svn_stream_t *source;
+ struct lazy_target_baton *tb;
svn_stream_t *target;
if (fb->skip_this)
@@ -3443,10 +3721,8 @@ apply_textdelta(void *file_baton,
SVN_ERR_ASSERT(!fb->original_checksum
|| fb->original_checksum->kind == svn_checksum_sha1);
- SVN_ERR(svn_wc__db_pristine_read(&source, NULL, fb->edit_baton->db,
- fb->local_abspath,
- fb->original_checksum,
- handler_pool, handler_pool));
+ source = svn_stream_lazyopen_create(lazy_open_source, fb, FALSE,
+ handler_pool);
}
else
{
@@ -3472,16 +3748,11 @@ apply_textdelta(void *file_baton,
hb->source_checksum_stream = source;
}
- /* Open the text base for writing (this will get us a temporary file). */
- err = svn_wc__open_writable_base(&target, &hb->new_text_base_tmp_abspath,
- NULL, &hb->new_text_base_sha1_checksum,
- fb->edit_baton->db, eb->wcroot_abspath,
- handler_pool, pool);
- if (err)
- {
- svn_pool_destroy(handler_pool);
- return svn_error_trace(err);
- }
+ tb = apr_palloc(handler_pool, sizeof(struct lazy_target_baton));
+ tb->hb = hb;
+ tb->fb = fb;
+ tb->eb = eb;
+ target = svn_stream_lazyopen_create(lazy_open_target, tb, TRUE, handler_pool);
/* Prepare to apply the delta. */
svn_txdelta_apply(source, target,
@@ -3519,9 +3790,89 @@ change_file_prop(void *file_baton,
propchange->name = apr_pstrdup(fb->pool, name);
propchange->value = value ? svn_string_dup(value, fb->pool) : NULL;
- if (!fb->edited && svn_property_kind(NULL, name) == svn_prop_regular_kind)
+ if (!fb->edited && svn_property_kind2(name) == svn_prop_regular_kind)
SVN_ERR(mark_file_edited(fb, scratch_pool));
+ if (! fb->shadowed
+ && strcmp(name, SVN_PROP_SPECIAL) == 0)
+ {
+ struct edit_baton *eb = fb->edit_baton;
+ svn_boolean_t modified = FALSE;
+ svn_boolean_t becomes_symlink;
+ svn_boolean_t was_symlink;
+
+ /* Let's see if we have a change as in some scenarios servers report
+ non-changes of properties. */
+ becomes_symlink = (value != NULL);
+
+ if (fb->adding_file)
+ was_symlink = becomes_symlink; /* No change */
+ else
+ {
+ apr_hash_t *props;
+
+ /* We read the server-props, not the ACTUAL props here as we just
+ want to see if this is really an incoming prop change. */
+ SVN_ERR(svn_wc__db_base_get_props(&props, eb->db,
+ fb->local_abspath,
+ scratch_pool, scratch_pool));
+
+ was_symlink = ((props
+ && svn_hash_gets(props, SVN_PROP_SPECIAL) != NULL)
+ ? svn_tristate_true
+ : svn_tristate_false);
+ }
+
+ if (was_symlink != becomes_symlink)
+ {
+ /* If the local node was not modified, we continue as usual, if
+ modified we want a tree conflict just like how we would handle
+ it when receiving a delete + add (aka "replace") */
+ if (fb->local_prop_mods)
+ modified = TRUE;
+ else
+ SVN_ERR(svn_wc__internal_file_modified_p(&modified, eb->db,
+ fb->local_abspath,
+ FALSE, scratch_pool));
+ }
+
+ if (modified)
+ {
+ if (!fb->edit_conflict)
+ fb->edit_conflict = svn_wc__conflict_skel_create(fb->pool);
+
+ SVN_ERR(svn_wc__conflict_skel_add_tree_conflict(
+ fb->edit_conflict,
+ eb->db, fb->local_abspath,
+ svn_wc_conflict_reason_edited,
+ svn_wc_conflict_action_replace,
+ NULL,
+ fb->pool, scratch_pool));
+
+ SVN_ERR(complete_conflict(fb->edit_conflict, fb->edit_baton,
+ fb->local_abspath, fb->old_repos_relpath,
+ fb->old_revision, fb->new_relpath,
+ svn_node_file, svn_node_file,
+ fb->pool, scratch_pool));
+
+ /* Create a copy of the existing (pre update) BASE node in WORKING,
+ mark a tree conflict and handle the rest of the update as
+ shadowed */
+ SVN_ERR(svn_wc__db_op_make_copy(eb->db, fb->local_abspath,
+ fb->edit_conflict, NULL,
+ scratch_pool));
+
+ do_notification(eb, fb->local_abspath, svn_node_file,
+ svn_wc_notify_tree_conflict, scratch_pool);
+
+ /* Ok, we introduced a replacement, so we can now handle the rest
+ as a normal shadowed update */
+ fb->shadowed = TRUE;
+ fb->add_existed = FALSE;
+ fb->already_notified = TRUE;
+ }
+ }
+
return SVN_NO_ERROR;
}
@@ -3533,37 +3884,37 @@ change_file_prop(void *file_baton,
identified by WRI_ABSPATH. Use OLD_REVISION and TARGET_REVISION for naming
the intermediate files.
- The rest of the arguments are passed to svn_wc__internal_merge.
+ The rest of the arguments are passed to svn_wc__internal_merge().
*/
svn_error_t *
svn_wc__perform_file_merge(svn_skel_t **work_items,
- enum svn_wc_merge_outcome_t *merge_outcome,
+ svn_skel_t **conflict_skel,
+ svn_boolean_t *found_conflict,
svn_wc__db_t *db,
const char *local_abspath,
const char *wri_abspath,
const svn_checksum_t *new_checksum,
const svn_checksum_t *original_checksum,
- apr_hash_t *actual_props,
+ apr_hash_t *old_actual_props,
const apr_array_header_t *ext_patterns,
svn_revnum_t old_revision,
svn_revnum_t target_revision,
const apr_array_header_t *propchanges,
const char *diff3_cmd,
- svn_wc_conflict_resolver_func2_t conflict_func,
- void *conflict_baton,
svn_cancel_func_t cancel_func,
void *cancel_baton,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
/* Actual file exists and has local mods:
- Now we need to let loose svn_wc__merge_internal() to merge
+ Now we need to let loose svn_wc__internal_merge() to merge
the textual changes into the working file. */
const char *oldrev_str, *newrev_str, *mine_str;
const char *merge_left;
svn_boolean_t delete_left = FALSE;
const char *path_ext = "";
const char *new_text_base_tmp_abspath;
+ enum svn_wc_merge_outcome_t merge_outcome = svn_wc_merge_unchanged;
svn_skel_t *work_item;
*work_items = NULL;
@@ -3616,28 +3967,29 @@ svn_wc__perform_file_merge(svn_skel_t **work_items,
/* Merge the changes from the old textbase to the new
textbase into the file we're updating.
Remember that this function wants full paths! */
- /* ### TODO: Pass version info here. */
SVN_ERR(svn_wc__internal_merge(&work_item,
- merge_outcome,
+ conflict_skel,
+ &merge_outcome,
db,
- merge_left, NULL,
- new_text_base_tmp_abspath, NULL,
+ merge_left,
+ new_text_base_tmp_abspath,
local_abspath,
wri_abspath,
oldrev_str, newrev_str, mine_str,
- actual_props,
+ old_actual_props,
FALSE /* dry_run */,
diff3_cmd, NULL, propchanges,
- conflict_func, conflict_baton,
cancel_func, cancel_baton,
result_pool, scratch_pool));
*work_items = svn_wc__wq_merge(*work_items, work_item, result_pool);
+ *found_conflict = (merge_outcome == svn_wc_merge_conflict);
/* If we created a temporary left merge file, get rid of it. */
if (delete_left)
{
- SVN_ERR(svn_wc__wq_build_file_remove(&work_item, db, merge_left,
+ SVN_ERR(svn_wc__wq_build_file_remove(&work_item, db, wri_abspath,
+ merge_left,
result_pool, scratch_pool));
*work_items = svn_wc__wq_merge(*work_items, work_item, result_pool);
}
@@ -3670,6 +4022,7 @@ svn_wc__perform_file_merge(svn_skel_t **work_items,
*/
static svn_error_t *
merge_file(svn_skel_t **work_items,
+ svn_skel_t **conflict_skel,
svn_boolean_t *install_pristine,
const char **install_from,
svn_wc_notify_state_t *content_state,
@@ -3682,10 +4035,11 @@ merge_file(svn_skel_t **work_items,
struct edit_baton *eb = fb->edit_baton;
struct dir_baton *pb = fb->dir_baton;
svn_boolean_t is_locally_modified;
- enum svn_wc_merge_outcome_t merge_outcome = svn_wc_merge_unchanged;
- svn_skel_t *work_item;
+ svn_boolean_t found_text_conflict = FALSE;
- SVN_ERR_ASSERT(! fb->shadowed && !fb->obstruction_found);
+ SVN_ERR_ASSERT(! fb->shadowed
+ && ! fb->obstruction_found
+ && ! fb->edit_obstructed);
/*
When this function is called on file F, we assume the following
@@ -3770,7 +4124,8 @@ merge_file(svn_skel_t **work_items,
Now we need to let loose svn_wc__merge_internal() to merge
the textual changes into the working file. */
SVN_ERR(svn_wc__perform_file_merge(work_items,
- &merge_outcome,
+ conflict_skel,
+ &found_text_conflict,
eb->db,
fb->local_abspath,
pb->local_abspath,
@@ -3784,7 +4139,6 @@ merge_file(svn_skel_t **work_items,
*eb->target_revision,
fb->propchanges,
eb->diff3_cmd,
- eb->conflict_func, eb->conflict_baton,
eb->cancel_func, eb->cancel_baton,
result_pool, scratch_pool));
} /* end: working file exists and has mods */
@@ -3852,36 +4206,9 @@ merge_file(svn_skel_t **work_items,
}
}
- /* Installing from a pristine will handle timestamps and recording.
- However, if we are NOT creating a new working copy file, then create
- work items to handle the recording of the timestamp and working-size. */
- if (!*install_pristine
- && !is_locally_modified)
- {
- apr_time_t set_date = 0;
-
- if (eb->use_commit_times && last_changed_date != 0)
- {
- set_date = last_changed_date;
- }
-
- SVN_ERR(svn_wc__wq_build_record_fileinfo(&work_item,
- eb->db, fb->local_abspath,
- set_date,
- result_pool, scratch_pool));
- *work_items = svn_wc__wq_merge(*work_items, work_item, result_pool);
- }
-
/* Set the returned content state. */
- /* This is kind of interesting. Even if no new text was
- installed (i.e., NEW_TEXT_BASE_ABSPATH was null), we could still
- report a pre-existing conflict state. Say a file, already
- in a state of textual conflict, receives prop mods during an
- update. Then we'll notify that it has text conflicts. This
- seems okay to me. I guess. I dunno. You? */
-
- if (merge_outcome == svn_wc_merge_conflict)
+ if (found_text_conflict)
*content_state = svn_wc_notify_state_conflicted;
else if (fb->new_text_base_sha1_checksum)
{
@@ -3905,6 +4232,7 @@ close_file(void *file_baton,
apr_pool_t *pool)
{
struct file_baton *fb = file_baton;
+ struct dir_baton *pdb = fb->dir_baton;
struct edit_baton *eb = fb->edit_baton;
svn_wc_notify_state_t content_state, prop_state;
svn_wc_notify_lock_state_t lock_state;
@@ -3918,17 +4246,23 @@ close_file(void *file_baton,
apr_hash_t *current_actual_props = NULL;
apr_hash_t *local_actual_props = NULL;
svn_skel_t *all_work_items = NULL;
+ svn_skel_t *conflict_skel = NULL;
svn_skel_t *work_item;
apr_pool_t *scratch_pool = fb->pool; /* Destroyed at function exit */
svn_boolean_t keep_recorded_info = FALSE;
+ const svn_checksum_t *new_checksum;
+ apr_array_header_t *iprops = NULL;
if (fb->skip_this)
{
- SVN_ERR(maybe_release_dir_info(fb->bump_info));
svn_pool_destroy(fb->pool);
+ SVN_ERR(maybe_release_dir_info(pdb));
return SVN_NO_ERROR;
}
+ if (fb->edited)
+ conflict_skel = fb->edit_conflict;
+
if (expected_md5_digest)
SVN_ERR(svn_checksum_parse_hex(&expected_md5_checksum, svn_checksum_md5,
expected_md5_digest, scratch_pool));
@@ -3936,10 +4270,13 @@ close_file(void *file_baton,
if (fb->new_text_base_md5_checksum && expected_md5_checksum
&& !svn_checksum_match(expected_md5_checksum,
fb->new_text_base_md5_checksum))
- return svn_checksum_mismatch_err(expected_md5_checksum,
- fb->new_text_base_md5_checksum, scratch_pool,
- _("Checksum mismatch for '%s'"),
- svn_dirent_local_style(fb->local_abspath, pool));
+ return svn_error_trace(
+ svn_checksum_mismatch_err(expected_md5_checksum,
+ fb->new_text_base_md5_checksum,
+ scratch_pool,
+ _("Checksum mismatch for '%s'"),
+ svn_dirent_local_style(
+ fb->local_abspath, pool)));
/* Gather the changes for each kind of property. */
SVN_ERR(svn_categorize_props(fb->propchanges, &entry_prop_changes,
@@ -3982,11 +4319,17 @@ close_file(void *file_baton,
and we should likewise remove our cached copy of it. */
if (! strcmp(prop->name, SVN_PROP_ENTRY_LOCK_TOKEN))
{
- SVN_ERR_ASSERT(prop->value == NULL);
- SVN_ERR(svn_wc__db_lock_remove(eb->db, fb->local_abspath,
- scratch_pool));
+ /* If we lose the lock, but not because we are switching to
+ another url, remove the state lock from the wc */
+ if (! eb->switch_relpath
+ || strcmp(fb->new_relpath, fb->old_repos_relpath) == 0)
+ {
+ SVN_ERR_ASSERT(prop->value == NULL);
+ SVN_ERR(svn_wc__db_lock_remove(eb->db, fb->local_abspath,
+ scratch_pool));
- lock_state = svn_wc_notify_lock_state_unlocked;
+ lock_state = svn_wc_notify_lock_state_unlocked;
+ }
break;
}
}
@@ -4016,9 +4359,9 @@ close_file(void *file_baton,
if (fb->add_existed)
{
/* This node already exists. Grab the current pristine properties. */
- SVN_ERR(svn_wc__get_pristine_props(&current_base_props,
- eb->db, fb->local_abspath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_read_pristine_props(&current_base_props,
+ eb->db, fb->local_abspath,
+ scratch_pool, scratch_pool));
current_actual_props = local_actual_props;
}
else if (!fb->adding_file)
@@ -4039,67 +4382,6 @@ close_file(void *file_baton,
if (current_actual_props == NULL)
current_actual_props = apr_hash_make(scratch_pool);
- /* Catch symlink-ness change.
- * add_file() doesn't know whether the incoming added node is a file or
- * a symlink, because symlink-ness is saved in a prop :(
- * So add_file() cannot notice when update wants to add a symlink where
- * locally there already is a file scheduled for addition, or vice versa.
- * It sees incoming symlinks as simple files and may wrongly try to offer
- * a text conflict. So flag a tree conflict here. */
- if (!fb->shadowed
- && (! fb->adding_file || fb->add_existed))
- {
- svn_boolean_t local_is_link;
- svn_boolean_t incoming_is_link;
- int i;
-
- local_is_link = apr_hash_get(local_actual_props,
- SVN_PROP_SPECIAL,
- APR_HASH_KEY_STRING) != NULL;
-
- incoming_is_link = local_is_link;
-
- /* Does an incoming propchange affect symlink-ness? */
- for (i = 0; i < regular_prop_changes->nelts; ++i)
- {
- const svn_prop_t *prop = &APR_ARRAY_IDX(regular_prop_changes, i,
- svn_prop_t);
-
- if (strcmp(prop->name, SVN_PROP_SPECIAL) == 0)
- {
- incoming_is_link = (prop->value != NULL);
- break;
- }
- }
-
- if (local_is_link != incoming_is_link)
- {
- svn_wc_conflict_description2_t *tree_conflict = NULL;
-
- fb->shadowed = TRUE;
- fb->obstruction_found = TRUE;
- fb->add_existed = FALSE;
-
- /* ### Performance: We should just create the conflict here, without
- ### verifying again */
- SVN_ERR(check_tree_conflict(&tree_conflict, eb, fb->local_abspath,
- svn_wc__db_status_added,
- svn_wc__db_kind_file, TRUE,
- svn_wc_conflict_action_add,
- svn_node_file, fb->new_relpath,
- scratch_pool, scratch_pool));
- SVN_ERR_ASSERT(tree_conflict != NULL);
- SVN_ERR(svn_wc__db_op_set_tree_conflict(eb->db,
- fb->local_abspath,
- tree_conflict,
- scratch_pool));
-
- fb->already_notified = TRUE;
- do_notification(eb, fb->local_abspath, svn_node_unknown,
- svn_wc_notify_tree_conflict, scratch_pool);
- }
- }
-
prop_state = svn_wc_notify_state_unknown;
if (! fb->shadowed)
@@ -4111,35 +4393,28 @@ close_file(void *file_baton,
/* This will merge the old and new props into a new prop db, and
write <cp> commands to the logfile to install the merged
props. */
- SVN_ERR(svn_wc__merge_props(&work_item,
+ new_base_props = svn_prop__patch(current_base_props, regular_prop_changes,
+ scratch_pool);
+ SVN_ERR(svn_wc__merge_props(&conflict_skel,
&prop_state,
- &new_base_props,
&new_actual_props,
eb->db,
fb->local_abspath,
- svn_wc__db_kind_file,
- NULL /* left_version */,
- NULL /* right_version */,
NULL /* server_baseprops (update, not merge) */,
current_base_props,
current_actual_props,
regular_prop_changes, /* propchanges */
- TRUE /* base_merge */,
- FALSE /* dry_run */,
- eb->conflict_func, eb->conflict_baton,
- eb->cancel_func, eb->cancel_baton,
scratch_pool,
scratch_pool));
/* We will ALWAYS have properties to save (after a not-dry-run merge). */
SVN_ERR_ASSERT(new_base_props != NULL && new_actual_props != NULL);
- all_work_items = svn_wc__wq_merge(all_work_items, work_item,
- scratch_pool);
/* Merge the text. This will queue some additional work. */
- if (!fb->obstruction_found)
+ if (!fb->obstruction_found && !fb->edit_obstructed)
{
svn_error_t *err;
- err = merge_file(&work_item, &install_pristine, &install_from,
+ err = merge_file(&work_item, &conflict_skel,
+ &install_pristine, &install_from,
&content_state, fb, current_actual_props,
fb->changed_date, scratch_pool, scratch_pool);
@@ -4163,8 +4438,8 @@ close_file(void *file_baton,
scratch_pool));
fb->skip_this = TRUE;
- SVN_ERR(maybe_release_dir_info(fb->bump_info));
svn_pool_destroy(fb->pool);
+ SVN_ERR(maybe_release_dir_info(pdb));
return SVN_NO_ERROR;
}
else
@@ -4232,7 +4507,7 @@ close_file(void *file_baton,
&& strcmp(install_from, fb->local_abspath) != 0)
{
SVN_ERR(svn_wc__wq_build_file_remove(&work_item, eb->db,
- install_from,
+ fb->local_abspath, install_from,
scratch_pool, scratch_pool));
all_work_items = svn_wc__wq_merge(all_work_items, work_item,
scratch_pool);
@@ -4250,29 +4525,20 @@ close_file(void *file_baton,
/* Store the incoming props (sent as propchanges) in new_base_props
and create a set of new actual props to use for notifications */
- SVN_ERR(svn_wc__merge_props(&work_item,
+ new_base_props = svn_prop__patch(current_base_props, regular_prop_changes,
+ scratch_pool);
+ SVN_ERR(svn_wc__merge_props(&conflict_skel,
&prop_state,
- &new_base_props,
&new_actual_props,
eb->db,
fb->local_abspath,
- svn_wc__db_kind_file,
- NULL /* left_version */,
- NULL /* right_version */,
NULL /* server_baseprops (not merging) */,
- current_base_props /* base_props */,
- fake_actual_props /* working_props */,
+ current_base_props /* pristine_props */,
+ fake_actual_props /* actual_props */,
regular_prop_changes, /* propchanges */
- TRUE /* base_merge */,
- FALSE /* dry_run */,
- NULL, NULL, /* No conflict handling */
- eb->cancel_func, eb->cancel_baton,
scratch_pool,
scratch_pool));
- all_work_items = svn_wc__wq_merge(all_work_items, work_item,
- scratch_pool);
-
if (fb->new_text_base_sha1_checksum)
content_state = svn_wc_notify_state_changed;
else
@@ -4280,54 +4546,89 @@ close_file(void *file_baton,
}
/* Insert/replace the BASE node with all of the new metadata. */
- {
- /* Set the 'checksum' column of the file's BASE_NODE row to
- * NEW_TEXT_BASE_SHA1_CHECKSUM. The pristine text identified by that
- * checksum is already in the pristine store. */
- const svn_checksum_t *new_checksum = fb->new_text_base_sha1_checksum;
-
- /* If we don't have a NEW checksum, then the base must not have changed.
- Just carry over the old checksum. */
- if (new_checksum == NULL)
- new_checksum = fb->original_checksum;
-
- SVN_ERR(svn_wc__db_base_add_file(eb->db, fb->local_abspath,
- eb->wcroot_abspath,
- fb->new_relpath,
- eb->repos_root, eb->repos_uuid,
- *eb->target_revision,
- new_base_props,
- fb->changed_rev,
- fb->changed_date,
- fb->changed_author,
- new_checksum,
- (dav_prop_changes->nelts > 0)
- ? svn_prop_array_to_hash(
- dav_prop_changes,
- scratch_pool)
- : NULL,
- NULL /* conflict */,
- (! fb->shadowed) && new_base_props,
- new_actual_props,
- keep_recorded_info,
- (fb->shadowed && fb->obstruction_found),
- all_work_items,
- scratch_pool));
- }
- /* Deal with the WORKING tree, based on updates to the BASE tree. */
+ /* Set the 'checksum' column of the file's BASE_NODE row to
+ * NEW_TEXT_BASE_SHA1_CHECKSUM. The pristine text identified by that
+ * checksum is already in the pristine store. */
+ new_checksum = fb->new_text_base_sha1_checksum;
+
+ /* If we don't have a NEW checksum, then the base must not have changed.
+ Just carry over the old checksum. */
+ if (new_checksum == NULL)
+ new_checksum = fb->original_checksum;
- /* If this file was locally-added and is now being added by the update, we
- can toss the local-add, turning this into a local-edit.
- If the local file is replaced, we don't want to touch ACTUAL. */
- if (fb->add_existed && fb->adding_file)
+ if (conflict_skel)
{
- SVN_ERR(svn_wc__db_temp_op_remove_working(eb->db, fb->local_abspath,
- scratch_pool));
+ SVN_ERR(complete_conflict(conflict_skel,
+ fb->edit_baton,
+ fb->local_abspath,
+ fb->old_repos_relpath,
+ fb->old_revision,
+ fb->new_relpath,
+ svn_node_file, svn_node_file,
+ fb->pool, scratch_pool));
+
+ SVN_ERR(svn_wc__conflict_create_markers(&work_item,
+ eb->db, fb->local_abspath,
+ conflict_skel,
+ scratch_pool, scratch_pool));
+
+ all_work_items = svn_wc__wq_merge(all_work_items, work_item,
+ scratch_pool);
+ }
+
+ /* Any inherited props to be set set for this base node? */
+ if (eb->wcroot_iprops)
+ {
+ iprops = svn_hash_gets(eb->wcroot_iprops, fb->local_abspath);
+
+ /* close_edit may also update iprops for switched nodes, catching
+ those for which close_directory is never called (e.g. a switch
+ with no changes). So as a minor optimization we remove any
+ iprops from the hash so as not to set them again in
+ close_edit. */
+ if (iprops)
+ svn_hash_sets(eb->wcroot_iprops, fb->local_abspath, NULL);
}
- apr_hash_set(fb->dir_baton->not_present_files, fb->name,
- APR_HASH_KEY_STRING, NULL);
+ SVN_ERR(svn_wc__db_base_add_file(eb->db, fb->local_abspath,
+ eb->wcroot_abspath,
+ fb->new_relpath,
+ eb->repos_root, eb->repos_uuid,
+ *eb->target_revision,
+ new_base_props,
+ fb->changed_rev,
+ fb->changed_date,
+ fb->changed_author,
+ new_checksum,
+ (dav_prop_changes->nelts > 0)
+ ? svn_prop_array_to_hash(
+ dav_prop_changes,
+ scratch_pool)
+ : NULL,
+ (fb->add_existed && fb->adding_file),
+ (! fb->shadowed) && new_base_props,
+ new_actual_props,
+ iprops,
+ keep_recorded_info,
+ (fb->shadowed && fb->obstruction_found),
+ conflict_skel,
+ all_work_items,
+ scratch_pool));
+
+ if (conflict_skel && eb->conflict_func)
+ SVN_ERR(svn_wc__conflict_invoke_resolver(eb->db, fb->local_abspath,
+ conflict_skel,
+ NULL /* merge_options */,
+ eb->conflict_func,
+ eb->conflict_baton,
+ eb->cancel_func,
+ eb->cancel_baton,
+ scratch_pool));
+
+ /* Deal with the WORKING tree, based on updates to the BASE tree. */
+
+ svn_hash_sets(fb->dir_baton->not_present_files, fb->name, NULL);
/* Send a notification to the callback function. (Skip notifications
about files which were already notified for another reason.) */
@@ -4339,7 +4640,7 @@ close_file(void *file_baton,
if (fb->edited)
{
- if (fb->shadowed)
+ if (fb->shadowed || fb->edit_obstructed)
action = fb->adding_file
? svn_wc_notify_update_shadowed_add
: svn_wc_notify_update_shadowed_update;
@@ -4353,7 +4654,15 @@ close_file(void *file_baton,
action = svn_wc_notify_update_add;
}
}
+ else
+ {
+ SVN_ERR_ASSERT(lock_state == svn_wc_notify_lock_state_unlocked);
+ action = svn_wc_notify_update_broken_lock;
+ }
+ /* If the file was moved-away, notify for the moved-away node.
+ * The original location only had its BASE info changed and
+ * we don't usually notify about such changes. */
notify = svn_wc_create_notify(fb->local_abspath, action, scratch_pool);
notify->kind = svn_node_file;
notify->content_state = content_state;
@@ -4369,11 +4678,11 @@ close_file(void *file_baton,
eb->notify_func(eb->notify_baton, notify, scratch_pool);
}
- /* We have one less referrer to the directory's bump information. */
- SVN_ERR(maybe_release_dir_info(fb->bump_info));
-
svn_pool_destroy(fb->pool); /* Destroy scratch_pool */
+ /* We have one less referrer to the directory */
+ SVN_ERR(maybe_release_dir_info(pdb));
+
return SVN_NO_ERROR;
}
@@ -4424,6 +4733,9 @@ close_edit(void *edit_baton,
eb->repos_uuid,
*(eb->target_revision),
eb->skipped_trees,
+ eb->wcroot_iprops,
+ eb->notify_func,
+ eb->notify_baton,
eb->pool));
if (*eb->target_basename != '\0')
@@ -4442,7 +4754,7 @@ close_edit(void *edit_baton,
have to worry about removing it. */
err = svn_wc__db_base_get_info(&status, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
eb->db, eb->target_abspath,
scratch_pool, scratch_pool);
if (err)
@@ -4461,7 +4773,11 @@ close_edit(void *edit_baton,
If so, we should get rid of this excluded node now. */
SVN_ERR(svn_wc__db_base_remove(eb->db, eb->target_abspath,
- scratch_pool));
+ FALSE /* keep_as_working */,
+ FALSE /* queue_deletes */,
+ FALSE /* remove_locks */,
+ SVN_INVALID_REVNUM,
+ NULL, NULL, scratch_pool));
}
}
}
@@ -4487,7 +4803,6 @@ close_edit(void *edit_baton,
return SVN_NO_ERROR;
}
-
/*** Returning editors. ***/
@@ -4497,6 +4812,7 @@ make_editor(svn_revnum_t *target_revision,
svn_wc__db_t *db,
const char *anchor_abspath,
const char *target_basename,
+ apr_hash_t *wcroot_iprops,
svn_boolean_t use_commit_times,
const char *switch_url,
svn_depth_t depth,
@@ -4528,6 +4844,9 @@ make_editor(svn_revnum_t *target_revision,
svn_delta_editor_t *tree_editor = svn_delta_default_editor(edit_pool);
const svn_delta_editor_t *inner_editor;
const char *repos_root, *repos_uuid;
+ struct svn_wc__shim_fetch_baton_t *sfb;
+ svn_delta_shim_callbacks_t *shim_callbacks =
+ svn_delta_shim_callbacks_default(edit_pool);
/* An unknown depth can't be sticky. */
if (depth == svn_depth_unknown)
@@ -4559,6 +4878,7 @@ make_editor(svn_revnum_t *target_revision,
eb->db = db;
eb->target_basename = target_basename;
eb->anchor_abspath = anchor_abspath;
+ eb->wcroot_iprops = wcroot_iprops;
SVN_ERR(svn_wc__db_get_wcroot(&eb->wcroot_abspath, db, anchor_abspath,
edit_pool, scratch_pool));
@@ -4594,7 +4914,7 @@ make_editor(svn_revnum_t *target_revision,
eb->ext_patterns = preserved_exts;
apr_pool_cleanup_register(edit_pool, eb, cleanup_edit_baton,
- cleanup_edit_baton_child);
+ apr_pool_cleanup_null);
/* Construct an editor. */
tree_editor->set_target_revision = set_target_revision;
@@ -4626,7 +4946,7 @@ make_editor(svn_revnum_t *target_revision,
depth. In this case the update won't describe additions that would
have been reported if we updated at the ambient depth. */
svn_error_t *err;
- svn_wc__db_kind_t dir_kind;
+ svn_node_kind_t dir_kind;
svn_wc__db_status_t dir_status;
const char *dir_repos_relpath;
svn_depth_t dir_depth;
@@ -4635,12 +4955,12 @@ make_editor(svn_revnum_t *target_revision,
err = svn_wc__db_base_get_info(&dir_status, &dir_kind, NULL,
&dir_repos_relpath, NULL, NULL, NULL,
NULL, NULL, &dir_depth, NULL, NULL, NULL,
- NULL, NULL,
+ NULL, NULL, NULL,
db, eb->target_abspath,
scratch_pool, scratch_pool);
if (!err
- && dir_kind == svn_wc__db_kind_dir
+ && dir_kind == svn_node_dir
&& dir_status == svn_wc__db_status_normal)
{
if (dir_depth > depth)
@@ -4656,10 +4976,9 @@ make_editor(svn_revnum_t *target_revision,
edit_pool, scratch_pool));
if (dirents != NULL && apr_hash_count(dirents))
- apr_hash_set(eb->dir_dirents,
- apr_pstrdup(edit_pool, dir_repos_relpath),
- APR_HASH_KEY_STRING,
- dirents);
+ svn_hash_sets(eb->dir_dirents,
+ apr_pstrdup(edit_pool, dir_repos_relpath),
+ dirents);
}
if (depth == svn_depth_immediates)
@@ -4691,12 +5010,12 @@ make_editor(svn_revnum_t *target_revision,
NULL, &dir_repos_relpath,
NULL, NULL, NULL, NULL,
NULL, &dir_depth, NULL,
- NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
NULL,
db, child_abspath,
iterpool, iterpool));
- if (dir_kind == svn_wc__db_kind_dir
+ if (dir_kind == svn_node_dir
&& dir_status == svn_wc__db_status_normal
&& dir_depth > svn_depth_empty)
{
@@ -4713,10 +5032,10 @@ make_editor(svn_revnum_t *target_revision,
edit_pool, iterpool));
if (dirents != NULL && apr_hash_count(dirents))
- apr_hash_set(eb->dir_dirents,
- apr_pstrdup(edit_pool, dir_repos_relpath),
- APR_HASH_KEY_STRING,
- dirents);
+ svn_hash_sets(eb->dir_dirents,
+ apr_pstrdup(edit_pool,
+ dir_repos_relpath),
+ dirents);
}
}
}
@@ -4747,23 +5066,40 @@ make_editor(svn_revnum_t *target_revision,
inner_baton,
result_pool));
- return svn_delta_get_cancellation_editor(cancel_func,
- cancel_baton,
- inner_editor,
- inner_baton,
- editor,
- edit_baton,
- result_pool);
+ SVN_ERR(svn_delta_get_cancellation_editor(cancel_func,
+ cancel_baton,
+ inner_editor,
+ inner_baton,
+ editor,
+ edit_baton,
+ result_pool));
+
+ sfb = apr_palloc(result_pool, sizeof(*sfb));
+ sfb->db = db;
+ sfb->base_abspath = eb->anchor_abspath;
+ sfb->fetch_base = TRUE;
+
+ shim_callbacks->fetch_kind_func = svn_wc__fetch_kind_func;
+ shim_callbacks->fetch_props_func = svn_wc__fetch_props_func;
+ shim_callbacks->fetch_base_func = svn_wc__fetch_base_func;
+ shim_callbacks->fetch_baton = sfb;
+
+ SVN_ERR(svn_editor__insert_shims(editor, edit_baton, *editor, *edit_baton,
+ NULL, NULL, shim_callbacks,
+ result_pool, scratch_pool));
+
+ return SVN_NO_ERROR;
}
svn_error_t *
-svn_wc_get_update_editor4(const svn_delta_editor_t **editor,
+svn_wc__get_update_editor(const svn_delta_editor_t **editor,
void **edit_baton,
svn_revnum_t *target_revision,
svn_wc_context_t *wc_ctx,
const char *anchor_abspath,
const char *target_basename,
+ apr_hash_t *wcroot_iprops,
svn_boolean_t use_commit_times,
svn_depth_t depth,
svn_boolean_t depth_is_sticky,
@@ -4787,7 +5123,7 @@ svn_wc_get_update_editor4(const svn_delta_editor_t **editor,
apr_pool_t *scratch_pool)
{
return make_editor(target_revision, wc_ctx->db, anchor_abspath,
- target_basename, use_commit_times,
+ target_basename, wcroot_iprops, use_commit_times,
NULL, depth, depth_is_sticky, allow_unver_obstructions,
adds_as_modification, server_performs_filtering,
clean_checkout,
@@ -4801,13 +5137,14 @@ svn_wc_get_update_editor4(const svn_delta_editor_t **editor,
}
svn_error_t *
-svn_wc_get_switch_editor4(const svn_delta_editor_t **editor,
+svn_wc__get_switch_editor(const svn_delta_editor_t **editor,
void **edit_baton,
svn_revnum_t *target_revision,
svn_wc_context_t *wc_ctx,
const char *anchor_abspath,
const char *target_basename,
const char *switch_url,
+ apr_hash_t *wcroot_iprops,
svn_boolean_t use_commit_times,
svn_depth_t depth,
svn_boolean_t depth_is_sticky,
@@ -4831,7 +5168,7 @@ svn_wc_get_switch_editor4(const svn_delta_editor_t **editor,
SVN_ERR_ASSERT(switch_url && svn_uri_is_canonical(switch_url, scratch_pool));
return make_editor(target_revision, wc_ctx->db, anchor_abspath,
- target_basename, use_commit_times,
+ target_basename, wcroot_iprops, use_commit_times,
switch_url,
depth, depth_is_sticky, allow_unver_obstructions,
FALSE /* adds_as_modification */,
@@ -4847,319 +5184,6 @@ svn_wc_get_switch_editor4(const svn_delta_editor_t **editor,
result_pool, scratch_pool);
}
-/* ABOUT ANCHOR AND TARGET, AND svn_wc_get_actual_target2()
-
- THE GOAL
-
- Note the following actions, where X is the thing we wish to update,
- P is a directory whose repository URL is the parent of
- X's repository URL, N is directory whose repository URL is *not*
- the parent directory of X (including the case where N is not a
- versioned resource at all):
-
- 1. `svn up .' from inside X.
- 2. `svn up ...P/X' from anywhere.
- 3. `svn up ...N/X' from anywhere.
-
- For the purposes of the discussion, in the '...N/X' situation, X is
- said to be a "working copy (WC) root" directory.
-
- Now consider the four cases for X's type (file/dir) in the working
- copy vs. the repository:
-
- A. dir in working copy, dir in repos.
- B. dir in working copy, file in repos.
- C. file in working copy, dir in repos.
- D. file in working copy, file in repos.
-
- Here are the results we expect for each combination of the above:
-
- 1A. Successfully update X.
- 1B. Error (you don't want to remove your current working
- directory out from underneath the application).
- 1C. N/A (you can't be "inside X" if X is a file).
- 1D. N/A (you can't be "inside X" if X is a file).
-
- 2A. Successfully update X.
- 2B. Successfully update X.
- 2C. Successfully update X.
- 2D. Successfully update X.
-
- 3A. Successfully update X.
- 3B. Error (you can't create a versioned file X inside a
- non-versioned directory).
- 3C. N/A (you can't have a versioned file X in directory that is
- not its repository parent).
- 3D. N/A (you can't have a versioned file X in directory that is
- not its repository parent).
-
- To summarize, case 2 always succeeds, and cases 1 and 3 always fail
- (or can't occur) *except* when the target is a dir that remains a
- dir after the update.
-
- ACCOMPLISHING THE GOAL
-
- Updates are accomplished by driving an editor, and an editor is
- "rooted" on a directory. So, in order to update a file, we need to
- break off the basename of the file, rooting the editor in that
- file's parent directory, and then updating only that file, not the
- other stuff in its parent directory.
-
- Secondly, we look at the case where we wish to update a directory.
- This is typically trivial. However, one problematic case, exists
- when we wish to update a directory that has been removed from the
- repository and replaced with a file of the same name. If we root
- our edit at the initial directory, there is no editor mechanism for
- deleting that directory and replacing it with a file (this would be
- like having an editor now anchored on a file, which is disallowed).
-
- All that remains is to have a function with the knowledge required
- to properly decide where to root our editor, and what to act upon
- with that now-rooted editor. Given a path to be updated, this
- function should conditionally split that path into an "anchor" and
- a "target", where the "anchor" is the directory at which the update
- editor is rooted (meaning, editor->open_root() is called with
- this directory in mind), and the "target" is the actual intended
- subject of the update.
-
- svn_wc_get_actual_target2() is that function.
-
- So, what are the conditions?
-
- Case I: Any time X is '.' (implying it is a directory), we won't
- lop off a basename. So we'll root our editor at X, and update all
- of X.
-
- Cases II & III: Any time we are trying to update some path ...N/X,
- we again will not lop off a basename. We can't root an editor at
- ...N with X as a target, either because ...N isn't a versioned
- resource at all (Case II) or because X is X is not a child of ...N
- in the repository (Case III). We root at X, and update X.
-
- Cases IV-???: We lop off a basename when we are updating a
- path ...P/X, rooting our editor at ...P and updating X, or when X
- is missing from disk.
-
- These conditions apply whether X is a file or directory.
-
- ---
-
- As it turns out, commits need to have a similar check in place,
- too, specifically for the case where a single directory is being
- committed (we have to anchor at that directory's parent in case the
- directory itself needs to be modified).
-*/
-
-
-svn_error_t *
-svn_wc__check_wc_root(svn_boolean_t *wc_root,
- svn_wc__db_kind_t *kind,
- svn_boolean_t *switched,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *scratch_pool)
-{
- const char *parent_abspath, *name;
- const char *repos_relpath, *repos_root, *repos_uuid;
- svn_wc__db_status_t status;
- svn_wc__db_kind_t my_kind;
-
- if (!kind)
- kind = &my_kind;
-
- /* Initialize our return values to the most common (code-wise) values. */
- *wc_root = TRUE;
- if (switched)
- *switched = FALSE;
-
- SVN_ERR(svn_wc__db_read_info(&status, kind, NULL, &repos_relpath,
- &repos_root, &repos_uuid, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL,
- db, local_abspath,
- scratch_pool, scratch_pool));
-
- if (repos_relpath == NULL)
- {
- /* If we inherit our URL, then we can't be a root, nor switched. */
- *wc_root = FALSE;
- return SVN_NO_ERROR;
- }
- if (*kind != svn_wc__db_kind_dir)
- {
- /* File/symlinks cannot be a root. */
- *wc_root = FALSE;
- }
- else if (status == svn_wc__db_status_added
- || status == svn_wc__db_status_deleted)
- {
- *wc_root = FALSE;
- }
- else if (status == svn_wc__db_status_server_excluded
- || status == svn_wc__db_status_excluded
- || status == svn_wc__db_status_not_present)
- {
- return svn_error_createf(
- SVN_ERR_WC_PATH_NOT_FOUND, NULL,
- _("The node '%s' was not found."),
- svn_dirent_local_style(local_abspath, scratch_pool));
- }
- else if (svn_dirent_is_root(local_abspath, strlen(local_abspath)))
- return SVN_NO_ERROR;
-
- if (!*wc_root && switched == NULL )
- return SVN_NO_ERROR; /* No more info needed */
-
- svn_dirent_split(&parent_abspath, &name, local_abspath, scratch_pool);
-
- /* Check if the node is recorded in the parent */
- if (*wc_root)
- {
- svn_boolean_t is_root;
- SVN_ERR(svn_wc__db_is_wcroot(&is_root, db, local_abspath, scratch_pool));
-
- if (is_root)
- {
- /* We're not in the (versioned) parent directory's list of
- children, so we must be the root of a distinct working copy. */
- return SVN_NO_ERROR;
- }
- }
-
- {
- const char *parent_repos_root;
- const char *parent_repos_relpath;
- const char *parent_repos_uuid;
-
- SVN_ERR(svn_wc__db_scan_base_repos(&parent_repos_relpath,
- &parent_repos_root,
- &parent_repos_uuid,
- db, parent_abspath,
- scratch_pool, scratch_pool));
-
- if (strcmp(repos_root, parent_repos_root) != 0
- || strcmp(repos_uuid, parent_repos_uuid) != 0)
- {
- /* This should never happen (### until we get mixed-repos working
- copies). If we're in the parent, then we should be from the
- same repository. For this situation, just declare us the root
- of a separate, unswitched working copy. */
- return SVN_NO_ERROR;
- }
-
- *wc_root = FALSE;
-
- if (switched)
- {
- const char *expected_relpath = svn_relpath_join(parent_repos_relpath,
- name, scratch_pool);
-
- *switched = (strcmp(expected_relpath, repos_relpath) != 0);
- }
- }
-
- return SVN_NO_ERROR;
-}
-
-svn_error_t *
-svn_wc_is_wc_root2(svn_boolean_t *wc_root,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *scratch_pool)
-{
- svn_boolean_t is_root;
- svn_boolean_t is_switched;
- svn_wc__db_kind_t kind;
- svn_error_t *err;
- SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
-
- err = svn_wc__check_wc_root(&is_root, &kind, &is_switched,
- wc_ctx->db, local_abspath, scratch_pool);
-
- if (err)
- {
- if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND &&
- err->apr_err != SVN_ERR_WC_NOT_WORKING_COPY)
- return svn_error_trace(err);
-
- return svn_error_create(SVN_ERR_ENTRY_NOT_FOUND, err, err->message);
- }
-
- *wc_root = is_root || (kind == svn_wc__db_kind_dir && is_switched);
-
- return SVN_NO_ERROR;
-}
-
-
-svn_error_t*
-svn_wc__strictly_is_wc_root(svn_boolean_t *wc_root,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *scratch_pool)
-{
- return svn_error_trace(svn_wc__db_is_wcroot(wc_root,
- wc_ctx->db,
- local_abspath,
- scratch_pool));
-}
-
-
-svn_error_t *
-svn_wc__get_wc_root(const char **wcroot_abspath,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- return svn_wc__db_get_wcroot(wcroot_abspath, wc_ctx->db,
- local_abspath, result_pool, scratch_pool);
-}
-
-
-svn_error_t *
-svn_wc_get_actual_target2(const char **anchor,
- const char **target,
- svn_wc_context_t *wc_ctx,
- const char *path,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- svn_boolean_t is_wc_root, is_switched;
- svn_wc__db_kind_t kind;
- const char *local_abspath;
- svn_error_t *err;
-
- SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, scratch_pool));
-
- err = svn_wc__check_wc_root(&is_wc_root, &kind, &is_switched,
- wc_ctx->db, local_abspath,
- scratch_pool);
-
- if (err)
- {
- if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND &&
- err->apr_err != SVN_ERR_WC_NOT_WORKING_COPY)
- return svn_error_trace(err);
-
- svn_error_clear(err);
- is_wc_root = FALSE;
- is_switched = FALSE;
- }
-
- /* If PATH is not a WC root, or if it is a file, lop off a basename. */
- if (!(is_wc_root || is_switched) || (kind != svn_wc__db_kind_dir))
- {
- svn_dirent_split(anchor, target, path, result_pool);
- }
- else
- {
- *anchor = apr_pstrdup(result_pool, path);
- *target = "";
- }
-
- return SVN_NO_ERROR;
-}
/* ### Note that this function is completely different from the rest of the
@@ -5186,16 +5210,16 @@ svn_wc_add_repos_file4(svn_wc_context_t *wc_ctx,
svn_wc__db_t *db = wc_ctx->db;
const char *dir_abspath = svn_dirent_dirname(local_abspath, scratch_pool);
svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
const char *tmp_text_base_abspath;
svn_checksum_t *new_text_base_md5_checksum;
svn_checksum_t *new_text_base_sha1_checksum;
const char *source_abspath = NULL;
svn_skel_t *all_work_items = NULL;
svn_skel_t *work_item;
- const char *original_root_url;
+ const char *repos_root_url;
+ const char *repos_uuid;
const char *original_repos_relpath;
- const char *original_uuid;
svn_revnum_t changed_rev;
apr_time_t changed_date;
const char *changed_author;
@@ -5232,10 +5256,10 @@ svn_wc_add_repos_file4(svn_wc_context_t *wc_ctx,
scratch_pool));
}
- SVN_ERR(svn_wc__db_read_info(&status, &kind, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ SVN_ERR(svn_wc__db_read_info(&status, &kind, NULL, NULL, &repos_root_url,
+ &repos_uuid, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
db, dir_abspath, scratch_pool, scratch_pool));
switch (status)
@@ -5257,7 +5281,7 @@ svn_wc_add_repos_file4(svn_wc_context_t *wc_ctx,
svn_dirent_local_style(local_abspath,
scratch_pool));
}
- if (kind != svn_wc__db_kind_dir)
+ if (kind != svn_node_dir)
return svn_error_createf(SVN_ERR_NODE_UNEXPECTED_KIND, NULL,
_("Can't schedule an addition of '%s'"
" below a not-directory node"),
@@ -5270,26 +5294,30 @@ svn_wc_add_repos_file4(svn_wc_context_t *wc_ctx,
{
/* Find the repository_root via the parent directory, which
is always versioned before this function is called */
- SVN_ERR(svn_wc__internal_get_repos_info(&original_root_url,
- &original_uuid,
- wc_ctx->db,
- dir_abspath,
- pool, pool));
- if (!svn_uri__is_ancestor(original_root_url, copyfrom_url))
+ if (!repos_root_url)
+ {
+ /* The parent is an addition, scan upwards to find the right info */
+ SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, NULL,
+ &repos_root_url, &repos_uuid,
+ NULL, NULL, NULL, NULL,
+ wc_ctx->db, dir_abspath,
+ scratch_pool, scratch_pool));
+ }
+ SVN_ERR_ASSERT(repos_root_url);
+
+ original_repos_relpath =
+ svn_uri_skip_ancestor(repos_root_url, copyfrom_url, scratch_pool);
+
+ if (!original_repos_relpath)
return svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
_("Copyfrom-url '%s' has different repository"
" root than '%s'"),
- copyfrom_url, original_root_url);
-
- original_repos_relpath =
- svn_uri_skip_ancestor(original_root_url, copyfrom_url, pool);
+ copyfrom_url, repos_root_url);
}
else
{
- original_root_url = NULL;
original_repos_relpath = NULL;
- original_uuid = NULL;
copyfrom_rev = SVN_INVALID_REVNUM; /* Just to be sure. */
}
@@ -5390,7 +5418,7 @@ svn_wc_add_repos_file4(svn_wc_context_t *wc_ctx,
/* If new contents were provided, then we do NOT want to record the
file information. We assume the new contents do not match the
- "proper" values for TRANSLATED_SIZE and LAST_MOD_TIME. */
+ "proper" values for RECORDED_SIZE and RECORDED_TIME. */
record_fileinfo = (new_contents == NULL);
/* Install the working copy file (with appropriate translation) from
@@ -5410,8 +5438,8 @@ svn_wc_add_repos_file4(svn_wc_context_t *wc_ctx,
it is a temporary file, which needs to be removed. */
if (source_abspath != NULL)
{
- SVN_ERR(svn_wc__wq_build_file_remove(&work_item,
- db, source_abspath,
+ SVN_ERR(svn_wc__wq_build_file_remove(&work_item, db, local_abspath,
+ source_abspath,
pool, pool));
all_work_items = svn_wc__wq_merge(all_work_items, work_item, pool);
}
@@ -5426,18 +5454,14 @@ svn_wc_add_repos_file4(svn_wc_context_t *wc_ctx,
changed_date,
changed_author,
original_repos_relpath,
- original_root_url,
- original_uuid,
+ original_repos_relpath ? repos_root_url
+ : NULL,
+ original_repos_relpath ? repos_uuid : NULL,
copyfrom_rev,
new_text_base_sha1_checksum,
- NULL /* conflict */,
- NULL /* work_items */,
- pool));
-
- /* ### if below fails, then the above db change would remain :-( */
-
- SVN_ERR(svn_wc__db_op_set_props(db, local_abspath,
- new_props, FALSE,
+ TRUE,
+ new_props,
+ FALSE /* is_move */,
NULL /* conflict */,
all_work_items,
pool));
@@ -5446,3 +5470,90 @@ svn_wc_add_repos_file4(svn_wc_context_t *wc_ctx,
cancel_func, cancel_baton,
pool));
}
+
+svn_error_t *
+svn_wc__complete_directory_add(svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_hash_t *new_original_props,
+ const char *copyfrom_url,
+ svn_revnum_t copyfrom_rev,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_status_t status;
+ svn_node_kind_t kind;
+ const char *original_repos_relpath;
+ const char *original_root_url;
+ const char *original_uuid;
+ svn_boolean_t had_props;
+ svn_boolean_t props_mod;
+
+ svn_revnum_t original_revision;
+ svn_revnum_t changed_rev;
+ apr_time_t changed_date;
+ const char *changed_author;
+
+ SVN_ERR(svn_wc__db_read_info(&status, &kind, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ &original_repos_relpath, &original_root_url,
+ &original_uuid, &original_revision, NULL, NULL,
+ NULL, NULL, NULL, NULL, &had_props, &props_mod,
+ NULL, NULL, NULL,
+ wc_ctx->db, local_abspath,
+ scratch_pool, scratch_pool));
+
+ if (status != svn_wc__db_status_added
+ || kind != svn_node_dir
+ || had_props
+ || props_mod
+ || !original_repos_relpath)
+ {
+ return svn_error_createf(
+ SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
+ _("'%s' is not an unmodified copied directory"),
+ svn_dirent_local_style(local_abspath, scratch_pool));
+ }
+ if (original_revision != copyfrom_rev
+ || strcmp(copyfrom_url,
+ svn_path_url_add_component2(original_root_url,
+ original_repos_relpath,
+ scratch_pool)))
+ {
+ return svn_error_createf(
+ SVN_ERR_WC_COPYFROM_PATH_NOT_FOUND, NULL,
+ _("Copyfrom '%s' doesn't match original location of '%s'"),
+ copyfrom_url,
+ svn_dirent_local_style(local_abspath, scratch_pool));
+ }
+
+ {
+ apr_array_header_t *regular_props;
+ apr_array_header_t *entry_props;
+
+ SVN_ERR(svn_categorize_props(svn_prop_hash_to_array(new_original_props,
+ scratch_pool),
+ &entry_props, NULL, &regular_props,
+ scratch_pool));
+
+ /* Put regular props back into a hash table. */
+ new_original_props = svn_prop_array_to_hash(regular_props, scratch_pool);
+
+ /* Get the change_* info from the entry props. */
+ SVN_ERR(accumulate_last_change(&changed_rev,
+ &changed_date,
+ &changed_author,
+ entry_props, scratch_pool, scratch_pool));
+ }
+
+ return svn_error_trace(
+ svn_wc__db_op_copy_dir(wc_ctx->db, local_abspath,
+ new_original_props,
+ changed_rev, changed_date, changed_author,
+ original_repos_relpath, original_root_url,
+ original_uuid, original_revision,
+ NULL /* children */,
+ svn_depth_infinity,
+ FALSE /* is_move */,
+ NULL /* conflict */,
+ NULL /* work_items */,
+ scratch_pool));
+}
diff --git a/subversion/libsvn_wc/upgrade.c b/subversion/libsvn_wc/upgrade.c
index afb029c..af615fd 100644
--- a/subversion/libsvn_wc/upgrade.c
+++ b/subversion/libsvn_wc/upgrade.c
@@ -31,6 +31,7 @@
#include "wc.h"
#include "adm_files.h"
+#include "conflicts.h"
#include "entries.h"
#include "wc_db.h"
#include "tree_conflicts.h"
@@ -150,7 +151,7 @@ read_one_proplist(apr_hash_t *all_wcprops,
proplist = apr_hash_make(result_pool);
SVN_ERR(svn_hash_read2(proplist, stream, SVN_HASH_TERMINATOR, result_pool));
- apr_hash_set(all_wcprops, name, APR_HASH_KEY_STRING, proplist);
+ svn_hash_sets(all_wcprops, name, proplist);
return SVN_NO_ERROR;
}
@@ -179,8 +180,7 @@ read_many_wcprops(apr_hash_t **all_wcprops,
scratch_pool);
SVN_ERR(read_propfile(&wcprops, propfile_abspath, result_pool, iterpool));
if (wcprops != NULL)
- apr_hash_set(*all_wcprops, SVN_WC_ENTRY_THIS_DIR, APR_HASH_KEY_STRING,
- wcprops);
+ svn_hash_sets(*all_wcprops, SVN_WC_ENTRY_THIS_DIR, wcprops);
props_dir_abspath = svn_wc__adm_child(dir_abspath, WCPROPS_SUBDIR_FOR_FILES,
scratch_pool);
@@ -202,9 +202,7 @@ read_many_wcprops(apr_hash_t **all_wcprops,
SVN_ERR(read_propfile(&wcprops, propfile_abspath,
result_pool, iterpool));
SVN_ERR_ASSERT(wcprops != NULL);
- apr_hash_set(*all_wcprops,
- apr_pstrdup(result_pool, name), APR_HASH_KEY_STRING,
- wcprops);
+ svn_hash_sets(*all_wcprops, apr_pstrdup(result_pool, name), wcprops);
}
svn_pool_destroy(iterpool);
@@ -614,8 +612,7 @@ ensure_repos_info(svn_wc_entry_t *entry,
for (hi = apr_hash_first(scratch_pool, repos_cache);
hi; hi = apr_hash_next(hi))
{
- if (svn_uri__is_child(svn__apr_hash_index_key(hi), entry->url,
- scratch_pool))
+ if (svn_uri__is_ancestor(svn__apr_hash_index_key(hi), entry->url))
{
if (!entry->repos)
entry->repos = svn__apr_hash_index_key(hi);
@@ -701,9 +698,9 @@ read_tree_conflicts(apr_hash_t **conflicts,
SVN_ERR(svn_wc__deserialize_conflict(&conflict, skel, dir_path,
pool, iterpool));
if (conflict != NULL)
- apr_hash_set(*conflicts, svn_dirent_basename(conflict->local_abspath,
- pool),
- APR_HASH_KEY_STRING, conflict);
+ svn_hash_sets(*conflicts,
+ svn_dirent_basename(conflict->local_abspath, pool),
+ conflict);
}
svn_pool_destroy(iterpool);
@@ -793,7 +790,7 @@ migrate_tree_conflict_data(svn_sqlite__db_t *sdb, apr_pool_t *scratch_pool)
all of them into the new schema. */
SVN_ERR(svn_sqlite__get_statement(&stmt, sdb,
- STMT_SELECT_OLD_TREE_CONFLICT));
+ STMT_UPGRADE_21_SELECT_OLD_TREE_CONFLICT));
/* Get all the existing tree conflict data. */
SVN_ERR(svn_sqlite__step(&have_row, stmt));
@@ -820,7 +817,8 @@ migrate_tree_conflict_data(svn_sqlite__db_t *sdb, apr_pool_t *scratch_pool)
SVN_ERR(svn_sqlite__reset(stmt));
/* Erase all the old tree conflict data. */
- SVN_ERR(svn_sqlite__get_statement(&stmt, sdb, STMT_ERASE_OLD_CONFLICTS));
+ SVN_ERR(svn_sqlite__get_statement(&stmt, sdb,
+ STMT_UPGRADE_21_ERASE_OLD_CONFLICTS));
SVN_ERR(svn_sqlite__step_done(stmt));
svn_pool_destroy(iterpool);
@@ -1120,16 +1118,14 @@ migrate_text_bases(apr_hash_t **text_bases_info,
/* Create a new info struct for this versioned file, or fill in the
* existing one if this is the second text-base we've found for it. */
- info = apr_hash_get(*text_bases_info, versioned_file_name,
- APR_HASH_KEY_STRING);
+ info = svn_hash_gets(*text_bases_info, versioned_file_name);
if (info == NULL)
info = apr_pcalloc(result_pool, sizeof (*info));
file_info = (is_revert_base ? &info->revert_base : &info->normal_base);
file_info->sha1_checksum = svn_checksum_dup(sha1_checksum, result_pool);
file_info->md5_checksum = svn_checksum_dup(md5_checksum, result_pool);
- apr_hash_set(*text_bases_info, versioned_file_name, APR_HASH_KEY_STRING,
- info);
+ svn_hash_sets(*text_bases_info, versioned_file_name, info);
}
}
@@ -1168,7 +1164,8 @@ bump_to_23(void *baton, svn_sqlite__db_t *sdb, apr_pool_t *scratch_pool)
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
- SVN_ERR(svn_sqlite__get_statement(&stmt, sdb, STMT_HAS_WORKING_NODES));
+ SVN_ERR(svn_sqlite__get_statement(&stmt, sdb,
+ STMT_UPGRADE_23_HAS_WORKING_NODES));
SVN_ERR(svn_sqlite__step(&have_row, stmt));
SVN_ERR(svn_sqlite__reset(stmt));
if (have_row)
@@ -1212,7 +1209,7 @@ bump_to_27(void *baton, svn_sqlite__db_t *sdb, apr_pool_t *scratch_pool)
svn_boolean_t have_row;
SVN_ERR(svn_sqlite__get_statement(&stmt, sdb,
- STMT_HAS_ACTUAL_NODES_CONFLICTS));
+ STMT_UPGRADE_27_HAS_ACTUAL_NODES_CONFLICTS));
SVN_ERR(svn_sqlite__step(&have_row, stmt));
SVN_ERR(svn_sqlite__reset(stmt));
if (have_row)
@@ -1364,6 +1361,316 @@ bump_to_29(void *baton, svn_sqlite__db_t *sdb, apr_pool_t *scratch_pool)
return SVN_NO_ERROR;
}
+svn_error_t *
+svn_wc__upgrade_conflict_skel_from_raw(svn_skel_t **conflicts,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
+ const char *local_relpath,
+ const char *conflict_old,
+ const char *conflict_wrk,
+ const char *conflict_new,
+ const char *prej_file,
+ const char *tree_conflict_data,
+ apr_size_t tree_conflict_len,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_skel_t *conflict_data = NULL;
+ const char *wcroot_abspath;
+
+ SVN_ERR(svn_wc__db_get_wcroot(&wcroot_abspath, db, wri_abspath,
+ scratch_pool, scratch_pool));
+
+ if (conflict_old || conflict_new || conflict_wrk)
+ {
+ const char *old_abspath = NULL;
+ const char *new_abspath = NULL;
+ const char *wrk_abspath = NULL;
+
+ conflict_data = svn_wc__conflict_skel_create(result_pool);
+
+ if (conflict_old)
+ old_abspath = svn_dirent_join(wcroot_abspath, conflict_old,
+ scratch_pool);
+
+ if (conflict_new)
+ new_abspath = svn_dirent_join(wcroot_abspath, conflict_new,
+ scratch_pool);
+
+ if (conflict_wrk)
+ wrk_abspath = svn_dirent_join(wcroot_abspath, conflict_wrk,
+ scratch_pool);
+
+ SVN_ERR(svn_wc__conflict_skel_add_text_conflict(conflict_data,
+ db, wri_abspath,
+ wrk_abspath,
+ old_abspath,
+ new_abspath,
+ scratch_pool,
+ scratch_pool));
+ }
+
+ if (prej_file)
+ {
+ const char *prej_abspath;
+
+ if (!conflict_data)
+ conflict_data = svn_wc__conflict_skel_create(result_pool);
+
+ prej_abspath = svn_dirent_join(wcroot_abspath, prej_file, scratch_pool);
+
+ SVN_ERR(svn_wc__conflict_skel_add_prop_conflict(conflict_data,
+ db, wri_abspath,
+ prej_abspath,
+ NULL, NULL, NULL,
+ apr_hash_make(scratch_pool),
+ scratch_pool,
+ scratch_pool));
+ }
+
+ if (tree_conflict_data)
+ {
+ svn_skel_t *tc_skel;
+ const svn_wc_conflict_description2_t *tc;
+ const char *local_abspath;
+
+ if (!conflict_data)
+ conflict_data = svn_wc__conflict_skel_create(scratch_pool);
+
+ tc_skel = svn_skel__parse(tree_conflict_data, tree_conflict_len,
+ scratch_pool);
+
+ local_abspath = svn_dirent_join(wcroot_abspath, local_relpath,
+ scratch_pool);
+
+ SVN_ERR(svn_wc__deserialize_conflict(&tc, tc_skel,
+ svn_dirent_dirname(local_abspath,
+ scratch_pool),
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(svn_wc__conflict_skel_add_tree_conflict(conflict_data,
+ db, wri_abspath,
+ tc->reason,
+ tc->action,
+ NULL,
+ scratch_pool,
+ scratch_pool));
+
+ switch (tc->operation)
+ {
+ case svn_wc_operation_update:
+ default:
+ SVN_ERR(svn_wc__conflict_skel_set_op_update(conflict_data,
+ tc->src_left_version,
+ tc->src_right_version,
+ scratch_pool,
+ scratch_pool));
+ break;
+ case svn_wc_operation_switch:
+ SVN_ERR(svn_wc__conflict_skel_set_op_switch(conflict_data,
+ tc->src_left_version,
+ tc->src_right_version,
+ scratch_pool,
+ scratch_pool));
+ break;
+ case svn_wc_operation_merge:
+ SVN_ERR(svn_wc__conflict_skel_set_op_merge(conflict_data,
+ tc->src_left_version,
+ tc->src_right_version,
+ scratch_pool,
+ scratch_pool));
+ break;
+ }
+ }
+ else if (conflict_data)
+ {
+ SVN_ERR(svn_wc__conflict_skel_set_op_update(conflict_data, NULL, NULL,
+ scratch_pool,
+ scratch_pool));
+ }
+
+ *conflicts = conflict_data;
+ return SVN_NO_ERROR;
+}
+
+/* Helper function to upgrade a single conflict from bump_to_30 */
+static svn_error_t *
+bump_30_upgrade_one_conflict(svn_wc__db_t *wc_db,
+ const char *wcroot_abspath,
+ svn_sqlite__stmt_t *stmt,
+ svn_sqlite__db_t *sdb,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt_store;
+ svn_stringbuf_t *skel_data;
+ svn_skel_t *conflict_data;
+ apr_int64_t wc_id = svn_sqlite__column_int64(stmt, 0);
+ const char *local_relpath = svn_sqlite__column_text(stmt, 1, NULL);
+ const char *conflict_old = svn_sqlite__column_text(stmt, 2, NULL);
+ const char *conflict_wrk = svn_sqlite__column_text(stmt, 3, NULL);
+ const char *conflict_new = svn_sqlite__column_text(stmt, 4, NULL);
+ const char *prop_reject = svn_sqlite__column_text(stmt, 5, NULL);
+ apr_size_t tree_conflict_size;
+ const char *tree_conflict_data = svn_sqlite__column_blob(stmt, 6,
+ &tree_conflict_size, NULL);
+
+ SVN_ERR(svn_wc__upgrade_conflict_skel_from_raw(&conflict_data,
+ wc_db, wcroot_abspath,
+ local_relpath,
+ conflict_old,
+ conflict_wrk,
+ conflict_new,
+ prop_reject,
+ tree_conflict_data,
+ tree_conflict_size,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR_ASSERT(conflict_data != NULL);
+
+ skel_data = svn_skel__unparse(conflict_data, scratch_pool);
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt_store, sdb,
+ STMT_UPGRADE_30_SET_CONFLICT));
+ SVN_ERR(svn_sqlite__bindf(stmt_store, "isb", wc_id, local_relpath,
+ skel_data->data, skel_data->len));
+ SVN_ERR(svn_sqlite__step_done(stmt_store));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+bump_to_30(void *baton, svn_sqlite__db_t *sdb, apr_pool_t *scratch_pool)
+{
+ struct bump_baton *bb = baton;
+ svn_boolean_t have_row;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ svn_sqlite__stmt_t *stmt;
+ svn_wc__db_t *db; /* Read only temp db */
+
+ SVN_ERR(svn_wc__db_open(&db, NULL, TRUE /* open_without_upgrade */, FALSE,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, sdb,
+ STMT_UPGRADE_30_SELECT_CONFLICT_SEPARATE));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+
+ while (have_row)
+ {
+ svn_error_t *err;
+ svn_pool_clear(iterpool);
+
+ err = bump_30_upgrade_one_conflict(db, bb->wcroot_abspath, stmt, sdb,
+ iterpool);
+
+ if (err)
+ {
+ return svn_error_trace(
+ svn_error_compose_create(
+ err,
+ svn_sqlite__reset(stmt)));
+ }
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ }
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ SVN_ERR(svn_sqlite__exec_statements(sdb, STMT_UPGRADE_TO_30));
+ SVN_ERR(svn_wc__db_close(db));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+bump_to_31(void *baton,
+ svn_sqlite__db_t *sdb,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt, *stmt_mark_switch_roots;
+ svn_boolean_t have_row;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ apr_array_header_t *empty_iprops = apr_array_make(
+ scratch_pool, 0, sizeof(svn_prop_inherited_item_t *));
+ svn_boolean_t iprops_column_exists = FALSE;
+ svn_error_t *err;
+
+ /* Add the inherited_props column to NODES if it does not yet exist.
+ *
+ * When using a format >= 31 client to upgrade from old formats which
+ * did not yet have a NODES table, the inherited_props column has
+ * already been created as part of the NODES table. Attemping to add
+ * the inherited_props column will raise an error in this case, so check
+ * if the column exists first.
+ *
+ * Checking for the existence of a column before ALTER TABLE is not
+ * possible within SQLite. We need to run a separate query and evaluate
+ * its result in C first.
+ */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, sdb, STMT_PRAGMA_TABLE_INFO_NODES));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ while (have_row)
+ {
+ const char *column_name = svn_sqlite__column_text(stmt, 1, NULL);
+
+ if (strcmp(column_name, "inherited_props") == 0)
+ {
+ iprops_column_exists = TRUE;
+ break;
+ }
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ }
+ SVN_ERR(svn_sqlite__reset(stmt));
+ if (!iprops_column_exists)
+ SVN_ERR(svn_sqlite__exec_statements(sdb, STMT_UPGRADE_TO_31_ALTER_TABLE));
+
+ /* Run additional statements to finalize the upgrade to format 31. */
+ SVN_ERR(svn_sqlite__exec_statements(sdb, STMT_UPGRADE_TO_31_FINALIZE));
+
+ /* Set inherited_props to an empty array for the roots of all
+ switched subtrees in the WC. This allows subsequent updates
+ to recognize these roots as needing an iprops cache. */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, sdb,
+ STMT_UPGRADE_31_SELECT_WCROOT_NODES));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+
+ err = svn_sqlite__get_statement(&stmt_mark_switch_roots, sdb,
+ STMT_UPDATE_IPROP);
+ if (err)
+ return svn_error_compose_create(err, svn_sqlite__reset(stmt));
+
+ while (have_row)
+ {
+ const char *switched_relpath = svn_sqlite__column_text(stmt, 1, NULL);
+ apr_int64_t wc_id = svn_sqlite__column_int64(stmt, 0);
+
+ err = svn_sqlite__bindf(stmt_mark_switch_roots, "is", wc_id,
+ switched_relpath);
+ if (!err)
+ err = svn_sqlite__bind_iprops(stmt_mark_switch_roots, 3,
+ empty_iprops, iterpool);
+ if (!err)
+ err = svn_sqlite__step_done(stmt_mark_switch_roots);
+ if (!err)
+ err = svn_sqlite__step(&have_row, stmt);
+
+ if (err)
+ return svn_error_compose_create(
+ err,
+ svn_error_compose_create(
+ /* Reset in either order is OK. */
+ svn_sqlite__reset(stmt),
+ svn_sqlite__reset(stmt_mark_switch_roots)));
+ }
+
+ err = svn_sqlite__reset(stmt_mark_switch_roots);
+ if (err)
+ return svn_error_compose_create(err, svn_sqlite__reset(stmt));
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
struct upgrade_data_t {
svn_sqlite__db_t *sdb;
@@ -1449,21 +1756,20 @@ upgrade_to_wcng(void **dir_baton,
SVN_ERR(svn_wc__read_entries_old(&entries, dir_abspath,
scratch_pool, scratch_pool));
- this_dir = apr_hash_get(entries, SVN_WC_ENTRY_THIS_DIR, APR_HASH_KEY_STRING);
+ this_dir = svn_hash_gets(entries, SVN_WC_ENTRY_THIS_DIR);
SVN_ERR(ensure_repos_info(this_dir, dir_abspath,
repos_info_func, repos_info_baton,
repos_cache,
scratch_pool, scratch_pool));
/* Cache repos UUID pairs for when a subdir doesn't have this information */
- if (!apr_hash_get(repos_cache, this_dir->repos, APR_HASH_KEY_STRING))
+ if (!svn_hash_gets(repos_cache, this_dir->repos))
{
apr_pool_t *hash_pool = apr_hash_pool_get(repos_cache);
- apr_hash_set(repos_cache,
- apr_pstrdup(hash_pool, this_dir->repos),
- APR_HASH_KEY_STRING,
- apr_pstrdup(hash_pool, this_dir->uuid));
+ svn_hash_sets(repos_cache,
+ apr_pstrdup(hash_pool, this_dir->repos),
+ apr_pstrdup(hash_pool, this_dir->uuid));
}
old_wcroot_abspath = svn_dirent_get_longest_ancestor(dir_abspath,
@@ -1517,16 +1823,8 @@ upgrade_to_wcng(void **dir_baton,
return SVN_NO_ERROR;
}
-
-/* Return a string indicating the released version (or versions) of
- * Subversion that used WC format number WC_FORMAT, or some other
- * suitable string if no released version used WC_FORMAT.
- *
- * ### It's not ideal to encode this sort of knowledge in this low-level
- * library. On the other hand, it doesn't need to be updated often and
- * should be easily found when it does need to be updated. */
-static const char *
-version_string_from_format(int wc_format)
+const char *
+svn_wc__version_string_from_format(int wc_format)
{
switch (wc_format)
{
@@ -1534,6 +1832,7 @@ version_string_from_format(int wc_format)
case 8: return "1.4";
case 9: return "1.5";
case 10: return "1.6";
+ case SVN_WC__WC_NG_VERSION: return "1.7";
}
return _("(unreleased development version)");
}
@@ -1546,6 +1845,7 @@ svn_wc__upgrade_sdb(int *result_format,
apr_pool_t *scratch_pool)
{
struct bump_baton bb;
+
bb.wcroot_abspath = wcroot_abspath;
if (start_format < SVN_WC__WC_NG_VERSION /* 12 */)
@@ -1555,7 +1855,7 @@ svn_wc__upgrade_sdb(int *result_format,
svn_dirent_local_style(wcroot_abspath,
scratch_pool),
start_format,
- version_string_from_format(start_format));
+ svn_wc__version_string_from_format(start_format));
/* Early WCNG formats no longer supported. */
if (start_format < 19)
@@ -1636,6 +1936,16 @@ svn_wc__upgrade_sdb(int *result_format,
*result_format = 29;
/* FALLTHROUGH */
+ case 29:
+ SVN_ERR(svn_sqlite__with_transaction(sdb, bump_to_30, &bb,
+ scratch_pool));
+ *result_format = 30;
+
+ case 30:
+ SVN_ERR(svn_sqlite__with_transaction(sdb, bump_to_31, &bb,
+ scratch_pool));
+ *result_format = 31;
+ /* FALLTHROUGH */
/* ### future bumps go here. */
#if 0
case XXX-1:
@@ -1645,6 +1955,13 @@ svn_wc__upgrade_sdb(int *result_format,
*result_format = XXX;
/* FALLTHROUGH */
#endif
+ case SVN_WC__VERSION:
+ /* already upgraded */
+ *result_format = SVN_WC__VERSION;
+
+ SVN_SQLITE__WITH_LOCK(
+ svn_wc__db_install_schema_statistics(sdb, scratch_pool),
+ sdb);
}
#ifdef SVN_DEBUG
@@ -1772,7 +2089,7 @@ is_old_wcroot(const char *local_abspath,
{
return svn_error_createf(
SVN_ERR_WC_INVALID_OP_ON_CWD, err,
- _("Can't upgrade '%s' as it is not a pre-1.7 working copy directory"),
+ _("Can't upgrade '%s' as it is not a working copy"),
svn_dirent_local_style(local_abspath, scratch_pool));
}
else if (svn_dirent_is_root(local_abspath, strlen(local_abspath)))
@@ -1788,7 +2105,7 @@ is_old_wcroot(const char *local_abspath,
return SVN_NO_ERROR;
}
- entry = apr_hash_get(entries, name, APR_HASH_KEY_STRING);
+ entry = svn_hash_gets(entries, name);
if (!entry
|| entry->absent
|| (entry->deleted && entry->schedule != svn_wc_schedule_add)
@@ -1808,7 +2125,7 @@ is_old_wcroot(const char *local_abspath,
parent_abspath = svn_dirent_join(parent_abspath, name, scratch_pool);
break;
}
- entry = apr_hash_get(entries, name, APR_HASH_KEY_STRING);
+ entry = svn_hash_gets(entries, name);
if (!entry
|| entry->absent
|| (entry->deleted && entry->schedule != svn_wc_schedule_add)
@@ -1821,7 +2138,7 @@ is_old_wcroot(const char *local_abspath,
return svn_error_createf(
SVN_ERR_WC_INVALID_OP_ON_CWD, NULL,
- _("Can't upgrade '%s' as it is not a pre-1.7 working copy root,"
+ _("Can't upgrade '%s' as it is not a working copy root,"
" the root is '%s'"),
svn_dirent_local_style(local_abspath, scratch_pool),
svn_dirent_local_style(parent_abspath, scratch_pool));
@@ -1881,6 +2198,51 @@ svn_wc_upgrade(svn_wc_context_t *wc_ctx,
apr_hash_t *entries;
const char *root_adm_abspath;
upgrade_working_copy_baton_t cb_baton;
+ svn_error_t *err;
+ int result_format;
+ svn_boolean_t bumped_format;
+
+ /* Try upgrading a wc-ng-style working copy. */
+ SVN_ERR(svn_wc__db_open(&db, NULL /* ### config */, TRUE, FALSE,
+ scratch_pool, scratch_pool));
+
+
+ err = svn_wc__db_bump_format(&result_format, &bumped_format,
+ db, local_abspath,
+ scratch_pool);
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_WC_UPGRADE_REQUIRED)
+ {
+ return svn_error_trace(
+ svn_error_compose_create(
+ err,
+ svn_wc__db_close(db)));
+ }
+
+ svn_error_clear(err);
+ /* Pre 1.7: Fall through */
+ }
+ else
+ {
+ /* Auto-upgrade worked! */
+ SVN_ERR(svn_wc__db_close(db));
+
+ SVN_ERR_ASSERT(result_format == SVN_WC__VERSION);
+
+ if (bumped_format && notify_func)
+ {
+ svn_wc_notify_t *notify;
+
+ notify = svn_wc_create_notify(local_abspath,
+ svn_wc_notify_upgraded_path,
+ scratch_pool);
+
+ notify_func(notify_baton, notify, scratch_pool);
+ }
+
+ return SVN_NO_ERROR;
+ }
SVN_ERR(is_old_wcroot(local_abspath, scratch_pool));
@@ -1893,25 +2255,19 @@ svn_wc_upgrade(svn_wc_context_t *wc_ctx,
'cleanup' with a new client will complete any outstanding
upgrade. */
- SVN_ERR(svn_wc__db_open(&db,
- NULL /* ### config */, FALSE, FALSE,
- scratch_pool, scratch_pool));
-
SVN_ERR(svn_wc__read_entries_old(&entries, local_abspath,
scratch_pool, scratch_pool));
- this_dir = apr_hash_get(entries, SVN_WC_ENTRY_THIS_DIR,
- APR_HASH_KEY_STRING);
+ this_dir = svn_hash_gets(entries, SVN_WC_ENTRY_THIS_DIR);
SVN_ERR(ensure_repos_info(this_dir, local_abspath, repos_info_func,
repos_info_baton, repos_cache,
scratch_pool, scratch_pool));
/* Cache repos UUID pairs for when a subdir doesn't have this information */
- if (!apr_hash_get(repos_cache, this_dir->repos, APR_HASH_KEY_STRING))
- apr_hash_set(repos_cache,
- apr_pstrdup(scratch_pool, this_dir->repos),
- APR_HASH_KEY_STRING,
- apr_pstrdup(scratch_pool, this_dir->uuid));
+ if (!svn_hash_gets(repos_cache, this_dir->repos))
+ svn_hash_sets(repos_cache,
+ apr_pstrdup(scratch_pool, this_dir->repos),
+ apr_pstrdup(scratch_pool, this_dir->uuid));
/* Create the new DB in the temporary root wc/.svn/tmp/wcng/.svn */
data.root_abspath = svn_dirent_join(svn_wc__adm_child(local_abspath, "tmp",
@@ -1994,3 +2350,44 @@ svn_wc_upgrade(svn_wc_context_t *wc_ctx,
return SVN_NO_ERROR;
}
+svn_error_t *
+svn_wc__upgrade_add_external_info(svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ svn_node_kind_t kind,
+ const char *def_local_abspath,
+ const char *repos_relpath,
+ const char *repos_root_url,
+ const char *repos_uuid,
+ svn_revnum_t def_peg_revision,
+ svn_revnum_t def_revision,
+ apr_pool_t *scratch_pool)
+{
+ svn_node_kind_t db_kind;
+ switch (kind)
+ {
+ case svn_node_dir:
+ db_kind = svn_node_dir;
+ break;
+
+ case svn_node_file:
+ db_kind = svn_node_file;
+ break;
+
+ case svn_node_unknown:
+ db_kind = svn_node_unknown;
+ break;
+
+ default:
+ SVN_ERR_MALFUNCTION();
+ }
+
+ SVN_ERR(svn_wc__db_upgrade_insert_external(wc_ctx->db, local_abspath,
+ db_kind,
+ svn_dirent_dirname(local_abspath,
+ scratch_pool),
+ def_local_abspath, repos_relpath,
+ repos_root_url, repos_uuid,
+ def_peg_revision, def_revision,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/libsvn_wc/util.c b/subversion/libsvn_wc/util.c
index 91196cb..a527eda 100644
--- a/subversion/libsvn_wc/util.c
+++ b/subversion/libsvn_wc/util.c
@@ -150,8 +150,8 @@ svn_wc_dup_notify(const svn_wc_notify_t *notify,
}
svn_error_t *
-svn_wc_external_item_create(const svn_wc_external_item2_t **item,
- apr_pool_t *pool)
+svn_wc_external_item2_create(svn_wc_external_item2_t **item,
+ apr_pool_t *pool)
{
*item = apr_pcalloc(pool, sizeof(svn_wc_external_item2_t));
return SVN_NO_ERROR;
@@ -285,24 +285,27 @@ svn_wc__conflict_description2_dup(const svn_wc_conflict_description2_t *conflict
}
svn_wc_conflict_version_t *
-svn_wc_conflict_version_create(const char *repos_url,
- const char *path_in_repos,
- svn_revnum_t peg_rev,
- svn_node_kind_t node_kind,
- apr_pool_t *pool)
+svn_wc_conflict_version_create2(const char *repos_url,
+ const char *repos_uuid,
+ const char *repos_relpath,
+ svn_revnum_t revision,
+ svn_node_kind_t kind,
+ apr_pool_t *result_pool)
{
svn_wc_conflict_version_t *version;
- version = apr_pcalloc(pool, sizeof(*version));
+ version = apr_pcalloc(result_pool, sizeof(*version));
- SVN_ERR_ASSERT_NO_RETURN(svn_uri_is_canonical(repos_url, pool) &&
- svn_relpath_is_canonical(path_in_repos) &&
- SVN_IS_VALID_REVNUM(peg_rev));
+ SVN_ERR_ASSERT_NO_RETURN(svn_uri_is_canonical(repos_url, result_pool)
+ && svn_relpath_is_canonical(repos_relpath)
+ && SVN_IS_VALID_REVNUM(revision)
+ /* ### repos_uuid can be NULL :( */);
version->repos_url = repos_url;
- version->peg_rev = peg_rev;
- version->path_in_repos = path_in_repos;
- version->node_kind = node_kind;
+ version->peg_rev = revision;
+ version->path_in_repos = repos_relpath;
+ version->node_kind = kind;
+ version->repos_uuid = repos_uuid;
return version;
}
@@ -310,7 +313,7 @@ svn_wc_conflict_version_create(const char *repos_url,
svn_wc_conflict_version_t *
svn_wc_conflict_version_dup(const svn_wc_conflict_version_t *version,
- apr_pool_t *pool)
+ apr_pool_t *result_pool)
{
svn_wc_conflict_version_t *new_version;
@@ -318,16 +321,20 @@ svn_wc_conflict_version_dup(const svn_wc_conflict_version_t *version,
if (version == NULL)
return NULL;
- new_version = apr_pcalloc(pool, sizeof(*new_version));
+ new_version = apr_pcalloc(result_pool, sizeof(*new_version));
/* Shallow copy all members. */
*new_version = *version;
if (version->repos_url)
- new_version->repos_url = apr_pstrdup(pool, version->repos_url);
+ new_version->repos_url = apr_pstrdup(result_pool, version->repos_url);
if (version->path_in_repos)
- new_version->path_in_repos = apr_pstrdup(pool, version->path_in_repos);
+ new_version->path_in_repos = apr_pstrdup(result_pool,
+ version->path_in_repos);
+
+ if (version->repos_uuid)
+ new_version->repos_uuid = apr_pstrdup(result_pool, version->repos_uuid);
return new_version;
}
@@ -441,9 +448,8 @@ svn_wc__status2_from_3(svn_wc_status2_t **status,
if (old_status->conflicted)
{
const svn_wc_conflict_description2_t *tree_conflict;
- SVN_ERR(svn_wc__db_op_read_tree_conflict(&tree_conflict, wc_ctx->db,
- local_abspath, scratch_pool,
- scratch_pool));
+ SVN_ERR(svn_wc__get_tree_conflict(&tree_conflict, wc_ctx, local_abspath,
+ scratch_pool, scratch_pool));
(*status)->tree_conflict = svn_wc__cd2_to_cd(tree_conflict, result_pool);
}
@@ -463,7 +469,7 @@ svn_wc__status2_from_3(svn_wc_status2_t **status,
/* (Currently a no-op, but just make sure it is ok) */
if (old_status->repos_node_status == svn_wc_status_modified
|| old_status->repos_node_status == svn_wc_status_conflicted)
- (*status)->text_status = old_status->repos_text_status;
+ (*status)->repos_text_status = old_status->repos_text_status;
if (old_status->node_status == svn_wc_status_added)
(*status)->prop_status = svn_wc_status_none; /* No separate info */
@@ -533,3 +539,98 @@ svn_wc__status2_from_3(svn_wc_status2_t **status,
return SVN_NO_ERROR;
}
+
+
+svn_error_t *
+svn_wc__fetch_kind_func(svn_node_kind_t *kind,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *scratch_pool)
+{
+ struct svn_wc__shim_fetch_baton_t *sfb = baton;
+ const char *local_abspath = svn_dirent_join(sfb->base_abspath, path,
+ scratch_pool);
+
+ SVN_ERR(svn_wc__db_read_kind(kind, sfb->db, local_abspath,
+ FALSE /* allow_missing */,
+ TRUE /* show_deleted */,
+ FALSE /* show_hidden */,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_wc__fetch_props_func(apr_hash_t **props,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct svn_wc__shim_fetch_baton_t *sfb = baton;
+ const char *local_abspath = svn_dirent_join(sfb->base_abspath, path,
+ scratch_pool);
+ svn_error_t *err;
+
+ if (sfb->fetch_base)
+ err = svn_wc__db_base_get_props(props, sfb->db, local_abspath, result_pool,
+ scratch_pool);
+ else
+ err = svn_wc__db_read_props(props, sfb->db, local_abspath,
+ result_pool, scratch_pool);
+
+ /* If the path doesn't exist, just return an empty set of props. */
+ if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ *props = apr_hash_make(result_pool);
+ }
+ else if (err)
+ return svn_error_trace(err);
+
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_wc__fetch_base_func(const char **filename,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct svn_wc__shim_fetch_baton_t *sfb = baton;
+ const svn_checksum_t *checksum;
+ svn_error_t *err;
+ const char *local_abspath = svn_dirent_join(sfb->base_abspath, path,
+ scratch_pool);
+
+ err = svn_wc__db_base_get_info(NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, &checksum,
+ NULL, NULL, NULL, NULL, NULL,
+ sfb->db, local_abspath,
+ scratch_pool, scratch_pool);
+ if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ *filename = NULL;
+ return SVN_NO_ERROR;
+ }
+ else if (err)
+ return svn_error_trace(err);
+
+ if (checksum == NULL)
+ {
+ *filename = NULL;
+ return SVN_NO_ERROR;
+ }
+
+ SVN_ERR(svn_wc__db_pristine_get_path(filename, sfb->db, local_abspath,
+ checksum, scratch_pool, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/libsvn_wc/wc-checks.h b/subversion/libsvn_wc/wc-checks.h
index 96f9d80..58d2273 100644
--- a/subversion/libsvn_wc/wc-checks.h
+++ b/subversion/libsvn_wc/wc-checks.h
@@ -1,7 +1,8 @@
-/* This file is automatically generated from wc-checks.sql.
+/* This file is automatically generated from wc-checks.sql and .dist_sandbox/subversion-1.8.13/subversion/libsvn_wc/token-map.h.
* Do not edit this file -- edit the source and rerun gen-make.py */
#define STMT_VERIFICATION_TRIGGERS 0
+#define STMT_0_INFO {"STMT_VERIFICATION_TRIGGERS", NULL}
#define STMT_0 \
"CREATE TEMPORARY TRIGGER no_repository_updates BEFORE UPDATE ON repository " \
"BEGIN " \
@@ -46,3 +47,9 @@
STMT_0, \
NULL \
}
+
+#define WC_CHECKS_SQL_DECLARE_STATEMENT_INFO(varname) \
+ static const char * const varname[][2] = { \
+ STMT_0_INFO, \
+ {NULL, NULL} \
+ }
diff --git a/subversion/libsvn_wc/wc-metadata.h b/subversion/libsvn_wc/wc-metadata.h
index c3a18d5..25e392a 100644
--- a/subversion/libsvn_wc/wc-metadata.h
+++ b/subversion/libsvn_wc/wc-metadata.h
@@ -1,7 +1,8 @@
-/* This file is automatically generated from wc-metadata.sql.
+/* This file is automatically generated from wc-metadata.sql and .dist_sandbox/subversion-1.8.13/subversion/libsvn_wc/token-map.h.
* Do not edit this file -- edit the source and rerun gen-make.py */
#define STMT_CREATE_SCHEMA 0
+#define STMT_0_INFO {"STMT_CREATE_SCHEMA", NULL}
#define STMT_0 \
"CREATE TABLE REPOSITORY ( " \
" id INTEGER PRIMARY KEY AUTOINCREMENT, " \
@@ -22,6 +23,7 @@
" refcount INTEGER NOT NULL, " \
" md5_checksum TEXT NOT NULL " \
" ); " \
+ "CREATE INDEX I_PRISTINE_MD5 ON PRISTINE (md5_checksum); " \
"CREATE TABLE ACTUAL_NODE ( " \
" wc_id INTEGER NOT NULL REFERENCES WCROOT (id), " \
" local_relpath TEXT NOT NULL, " \
@@ -40,8 +42,8 @@
" right_checksum TEXT REFERENCES PRISTINE (checksum), " \
" PRIMARY KEY (wc_id, local_relpath) " \
" ); " \
- "CREATE INDEX I_ACTUAL_PARENT ON ACTUAL_NODE (wc_id, parent_relpath); " \
- "CREATE INDEX I_ACTUAL_CHANGELIST ON ACTUAL_NODE (changelist); " \
+ "CREATE UNIQUE INDEX I_ACTUAL_PARENT ON ACTUAL_NODE (wc_id, parent_relpath, " \
+ " local_relpath); " \
"CREATE TABLE LOCK ( " \
" repos_id INTEGER NOT NULL REFERENCES REPOSITORY (id), " \
" repos_relpath TEXT NOT NULL, " \
@@ -67,6 +69,7 @@
""
#define STMT_CREATE_NODES 1
+#define STMT_1_INFO {"STMT_CREATE_NODES", NULL}
#define STMT_1 \
"CREATE TABLE NODES ( " \
" wc_id INTEGER NOT NULL REFERENCES WCROOT (id), " \
@@ -90,10 +93,13 @@
" translated_size INTEGER, " \
" last_mod_time INTEGER, " \
" dav_cache BLOB, " \
- " file_external TEXT, " \
+ " file_external INTEGER, " \
+ " inherited_props BLOB, " \
" PRIMARY KEY (wc_id, local_relpath, op_depth) " \
" ); " \
- "CREATE INDEX I_NODES_PARENT ON NODES (wc_id, parent_relpath, op_depth); " \
+ "CREATE UNIQUE INDEX I_NODES_PARENT ON NODES (wc_id, parent_relpath, " \
+ " local_relpath, op_depth); " \
+ "CREATE UNIQUE INDEX I_NODES_MOVED ON NODES (wc_id, moved_to, op_depth); " \
"CREATE VIEW NODES_CURRENT AS " \
" SELECT * FROM nodes AS n " \
" WHERE op_depth = (SELECT MAX(op_depth) FROM nodes AS n2 " \
@@ -105,6 +111,7 @@
""
#define STMT_CREATE_NODES_TRIGGERS 2
+#define STMT_2_INFO {"STMT_CREATE_NODES_TRIGGERS", NULL}
#define STMT_2 \
"CREATE TRIGGER nodes_insert_trigger " \
"AFTER INSERT ON nodes " \
@@ -132,6 +139,7 @@
""
#define STMT_CREATE_EXTERNALS 3
+#define STMT_3_INFO {"STMT_CREATE_EXTERNALS", NULL}
#define STMT_3 \
"CREATE TABLE EXTERNALS ( " \
" wc_id INTEGER NOT NULL REFERENCES WCROOT (id), " \
@@ -146,20 +154,44 @@
" def_revision TEXT, " \
" PRIMARY KEY (wc_id, local_relpath) " \
"); " \
- "CREATE INDEX I_EXTERNALS_PARENT ON EXTERNALS (wc_id, parent_relpath); " \
"CREATE UNIQUE INDEX I_EXTERNALS_DEFINED ON EXTERNALS (wc_id, " \
" def_local_relpath, " \
" local_relpath); " \
""
-#define STMT_UPGRADE_TO_20 4
+#define STMT_INSTALL_SCHEMA_STATISTICS 4
+#define STMT_4_INFO {"STMT_INSTALL_SCHEMA_STATISTICS", NULL}
#define STMT_4 \
- "UPDATE BASE_NODE SET checksum=(SELECT checksum FROM pristine " \
- " WHERE md5_checksum=BASE_NODE.checksum) " \
- "WHERE EXISTS(SELECT 1 FROM pristine WHERE md5_checksum=BASE_NODE.checksum); " \
- "UPDATE WORKING_NODE SET checksum=(SELECT checksum FROM pristine " \
- " WHERE md5_checksum=WORKING_NODE.checksum) " \
- "WHERE EXISTS(SELECT 1 FROM pristine WHERE md5_checksum=WORKING_NODE.checksum); " \
+ "ANALYZE sqlite_master; " \
+ "DELETE FROM sqlite_stat1 " \
+ "WHERE tbl in ('NODES', 'ACTUAL_NODE', 'LOCK', 'WC_LOCK'); " \
+ "INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES " \
+ " ('NODES', 'sqlite_autoindex_NODES_1', '8000 8000 2 1'); " \
+ "INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES " \
+ " ('NODES', 'I_NODES_PARENT', '8000 8000 10 2 1'); " \
+ "INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES " \
+ " ('NODES', 'I_NODES_MOVED', '8000 8000 1 1'); " \
+ "INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES " \
+ " ('ACTUAL_NODE', 'sqlite_autoindex_ACTUAL_NODE_1', '8000 8000 1'); " \
+ "INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES " \
+ " ('ACTUAL_NODE', 'I_ACTUAL_PARENT', '8000 8000 10 1'); " \
+ "INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES " \
+ " ('LOCK', 'sqlite_autoindex_LOCK_1', '100 100 1'); " \
+ "INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES " \
+ " ('WC_LOCK', 'sqlite_autoindex_WC_LOCK_1', '100 100 1'); " \
+ "ANALYZE sqlite_master; " \
+ ""
+
+#define STMT_UPGRADE_TO_20 5
+#define STMT_5_INFO {"STMT_UPGRADE_TO_20", NULL}
+#define STMT_5 \
+ "UPDATE BASE_NODE SET checksum = (SELECT checksum FROM pristine " \
+ " WHERE md5_checksum = BASE_NODE.checksum) " \
+ "WHERE EXISTS (SELECT 1 FROM pristine WHERE md5_checksum = BASE_NODE.checksum); " \
+ "UPDATE WORKING_NODE SET checksum = (SELECT checksum FROM pristine " \
+ " WHERE md5_checksum = WORKING_NODE.checksum) " \
+ "WHERE EXISTS (SELECT 1 FROM pristine " \
+ " WHERE md5_checksum = WORKING_NODE.checksum); " \
"INSERT INTO NODES ( " \
" wc_id, local_relpath, op_depth, parent_relpath, " \
" repos_id, repos_path, revision, " \
@@ -193,33 +225,59 @@
"PRAGMA user_version = 20; " \
""
-#define STMT_UPGRADE_TO_21 5
-#define STMT_5 \
+#define STMT_UPGRADE_TO_21 6
+#define STMT_6_INFO {"STMT_UPGRADE_TO_21", NULL}
+#define STMT_6 \
"PRAGMA user_version = 21; " \
""
-#define STMT_UPGRADE_TO_22 6
-#define STMT_6 \
+#define STMT_UPGRADE_21_SELECT_OLD_TREE_CONFLICT 7
+#define STMT_7_INFO {"STMT_UPGRADE_21_SELECT_OLD_TREE_CONFLICT", NULL}
+#define STMT_7 \
+ "SELECT wc_id, local_relpath, tree_conflict_data " \
+ "FROM actual_node " \
+ "WHERE tree_conflict_data IS NOT NULL " \
+ ""
+
+#define STMT_UPGRADE_21_ERASE_OLD_CONFLICTS 8
+#define STMT_8_INFO {"STMT_UPGRADE_21_ERASE_OLD_CONFLICTS", NULL}
+#define STMT_8 \
+ "UPDATE actual_node SET tree_conflict_data = NULL " \
+ ""
+
+#define STMT_UPGRADE_TO_22 9
+#define STMT_9_INFO {"STMT_UPGRADE_TO_22", NULL}
+#define STMT_9 \
"UPDATE actual_node SET tree_conflict_data = conflict_data; " \
"UPDATE actual_node SET conflict_data = NULL; " \
"PRAGMA user_version = 22; " \
""
-#define STMT_UPGRADE_TO_23 7
-#define STMT_7 \
+#define STMT_UPGRADE_TO_23 10
+#define STMT_10_INFO {"STMT_UPGRADE_TO_23", NULL}
+#define STMT_10 \
"PRAGMA user_version = 23; " \
""
-#define STMT_UPGRADE_TO_24 8
-#define STMT_8 \
+#define STMT_UPGRADE_23_HAS_WORKING_NODES 11
+#define STMT_11_INFO {"STMT_UPGRADE_23_HAS_WORKING_NODES", NULL}
+#define STMT_11 \
+ "SELECT 1 FROM nodes WHERE op_depth > 0 " \
+ "LIMIT 1 " \
+ ""
+
+#define STMT_UPGRADE_TO_24 12
+#define STMT_12_INFO {"STMT_UPGRADE_TO_24", NULL}
+#define STMT_12 \
"UPDATE pristine SET refcount = " \
" (SELECT COUNT(*) FROM nodes " \
" WHERE checksum = pristine.checksum ); " \
"PRAGMA user_version = 24; " \
""
-#define STMT_UPGRADE_TO_25 9
-#define STMT_9 \
+#define STMT_UPGRADE_TO_25 13
+#define STMT_13_INFO {"STMT_UPGRADE_TO_25", NULL}
+#define STMT_13 \
"DROP VIEW IF EXISTS NODES_CURRENT; " \
"CREATE VIEW NODES_CURRENT AS " \
" SELECT * FROM nodes " \
@@ -231,8 +289,9 @@
"PRAGMA user_version = 25; " \
""
-#define STMT_UPGRADE_TO_26 10
-#define STMT_10 \
+#define STMT_UPGRADE_TO_26 14
+#define STMT_14_INFO {"STMT_UPGRADE_TO_26", NULL}
+#define STMT_14 \
"DROP VIEW IF EXISTS NODES_BASE; " \
"CREATE VIEW NODES_BASE AS " \
" SELECT * FROM nodes " \
@@ -240,21 +299,34 @@
"PRAGMA user_version = 26; " \
""
-#define STMT_UPGRADE_TO_27 11
-#define STMT_11 \
+#define STMT_UPGRADE_TO_27 15
+#define STMT_15_INFO {"STMT_UPGRADE_TO_27", NULL}
+#define STMT_15 \
"PRAGMA user_version = 27; " \
""
-#define STMT_UPGRADE_TO_28 12
-#define STMT_12 \
- "UPDATE NODES SET checksum=(SELECT checksum FROM pristine " \
- " WHERE md5_checksum=nodes.checksum) " \
- "WHERE EXISTS(SELECT 1 FROM pristine WHERE md5_checksum=nodes.checksum); " \
+#define STMT_UPGRADE_27_HAS_ACTUAL_NODES_CONFLICTS 16
+#define STMT_16_INFO {"STMT_UPGRADE_27_HAS_ACTUAL_NODES_CONFLICTS", NULL}
+#define STMT_16 \
+ "SELECT 1 FROM actual_node " \
+ "WHERE NOT ((prop_reject IS NULL) AND (conflict_old IS NULL) " \
+ " AND (conflict_new IS NULL) AND (conflict_working IS NULL) " \
+ " AND (tree_conflict_data IS NULL)) " \
+ "LIMIT 1 " \
+ ""
+
+#define STMT_UPGRADE_TO_28 17
+#define STMT_17_INFO {"STMT_UPGRADE_TO_28", NULL}
+#define STMT_17 \
+ "UPDATE NODES SET checksum = (SELECT checksum FROM pristine " \
+ " WHERE md5_checksum = nodes.checksum) " \
+ "WHERE EXISTS (SELECT 1 FROM pristine WHERE md5_checksum = nodes.checksum); " \
"PRAGMA user_version = 28; " \
""
-#define STMT_UPGRADE_TO_29 13
-#define STMT_13 \
+#define STMT_UPGRADE_TO_29 18
+#define STMT_18_INFO {"STMT_UPGRADE_TO_29", NULL}
+#define STMT_18 \
"DROP TRIGGER IF EXISTS nodes_update_checksum_trigger; " \
"DROP TRIGGER IF EXISTS nodes_insert_trigger; " \
"DROP TRIGGER IF EXISTS nodes_delete_trigger; " \
@@ -282,6 +354,87 @@
" WHERE checksum = OLD.checksum; " \
"END; " \
"PRAGMA user_version = 29; " \
+ ""
+
+#define STMT_UPGRADE_TO_30 19
+#define STMT_19_INFO {"STMT_UPGRADE_TO_30", NULL}
+#define STMT_19 \
+ "CREATE UNIQUE INDEX IF NOT EXISTS I_NODES_MOVED " \
+ "ON NODES (wc_id, moved_to, op_depth); " \
+ "CREATE INDEX IF NOT EXISTS I_PRISTINE_MD5 ON PRISTINE (md5_checksum); " \
+ "UPDATE nodes SET presence = \"server-excluded\" WHERE presence = \"absent\"; " \
+ "UPDATE nodes SET file_external=1 WHERE file_external IS NOT NULL; " \
+ ""
+
+#define STMT_UPGRADE_30_SELECT_CONFLICT_SEPARATE 20
+#define STMT_20_INFO {"STMT_UPGRADE_30_SELECT_CONFLICT_SEPARATE", NULL}
+#define STMT_20 \
+ "SELECT wc_id, local_relpath, " \
+ " conflict_old, conflict_working, conflict_new, prop_reject, tree_conflict_data " \
+ "FROM actual_node " \
+ "WHERE conflict_old IS NOT NULL " \
+ " OR conflict_working IS NOT NULL " \
+ " OR conflict_new IS NOT NULL " \
+ " OR prop_reject IS NOT NULL " \
+ " OR tree_conflict_data IS NOT NULL " \
+ "ORDER by wc_id, local_relpath " \
+ ""
+
+#define STMT_UPGRADE_30_SET_CONFLICT 21
+#define STMT_21_INFO {"STMT_UPGRADE_30_SET_CONFLICT", NULL}
+#define STMT_21 \
+ "UPDATE actual_node SET conflict_data = ?3, conflict_old = NULL, " \
+ " conflict_working = NULL, conflict_new = NULL, prop_reject = NULL, " \
+ " tree_conflict_data = NULL " \
+ "WHERE wc_id = ?1 and local_relpath = ?2 " \
+ ""
+
+#define STMT_UPGRADE_TO_31_ALTER_TABLE 22
+#define STMT_22_INFO {"STMT_UPGRADE_TO_31_ALTER_TABLE", NULL}
+#define STMT_22 \
+ "ALTER TABLE NODES ADD COLUMN inherited_props BLOB; " \
+ ""
+
+#define STMT_UPGRADE_TO_31_FINALIZE 23
+#define STMT_23_INFO {"STMT_UPGRADE_TO_31_FINALIZE", NULL}
+#define STMT_23 \
+ "DROP INDEX IF EXISTS I_ACTUAL_CHANGELIST; " \
+ "DROP INDEX IF EXISTS I_EXTERNALS_PARENT; " \
+ "DROP INDEX I_NODES_PARENT; " \
+ "CREATE UNIQUE INDEX I_NODES_PARENT ON NODES (wc_id, parent_relpath, " \
+ " local_relpath, op_depth); " \
+ "DROP INDEX I_ACTUAL_PARENT; " \
+ "CREATE UNIQUE INDEX I_ACTUAL_PARENT ON ACTUAL_NODE (wc_id, parent_relpath, " \
+ " local_relpath); " \
+ "PRAGMA user_version = 31; " \
+ ""
+
+#define STMT_UPGRADE_31_SELECT_WCROOT_NODES 24
+#define STMT_24_INFO {"STMT_UPGRADE_31_SELECT_WCROOT_NODES", NULL}
+#define STMT_24 \
+ "SELECT l.wc_id, l.local_relpath FROM nodes as l " \
+ "LEFT OUTER JOIN nodes as r " \
+ "ON l.wc_id = r.wc_id " \
+ " AND r.local_relpath = l.parent_relpath " \
+ " AND r.op_depth = 0 " \
+ "WHERE l.op_depth = 0 " \
+ " AND l.repos_path != '' " \
+ " AND ((l.repos_id IS NOT r.repos_id) " \
+ " OR (l.repos_path IS NOT (CASE WHEN (r.local_relpath) = '' THEN (CASE WHEN (r.repos_path) = '' THEN (l.local_relpath) WHEN (l.local_relpath) = '' THEN (r.repos_path) ELSE (r.repos_path) || '/' || (l.local_relpath) END) WHEN (r.repos_path) = '' THEN (CASE WHEN (r.local_relpath) = '' THEN (l.local_relpath) WHEN SUBSTR((l.local_relpath), 1, LENGTH(r.local_relpath)) = (r.local_relpath) THEN CASE WHEN LENGTH(r.local_relpath) = LENGTH(l.local_relpath) THEN '' WHEN SUBSTR((l.local_relpath), LENGTH(r.local_relpath)+1, 1) = '/' THEN SUBSTR((l.local_relpath), LENGTH(r.local_relpath)+2) END END) WHEN SUBSTR((l.local_relpath), 1, LENGTH(r.local_relpath)) = (r.local_relpath) THEN CASE WHEN LENGTH(r.local_relpath) = LENGTH(l.local_relpath) THEN (r.repos_path) WHEN SUBSTR((l.local_relpath), LENGTH(r.local_relpath)+1, 1) = '/' THEN (r.repos_path) || SUBSTR((l.local_relpath), LENGTH(r.local_relpath)+1) END END))) " \
+ ""
+
+#define STMT_UPGRADE_TO_32 25
+#define STMT_25_INFO {"STMT_UPGRADE_TO_32", NULL}
+#define STMT_25 \
+ "DROP INDEX IF EXISTS I_ACTUAL_CHANGELIST; " \
+ "DROP INDEX IF EXISTS I_EXTERNALS_PARENT; " \
+ "CREATE INDEX I_EXTERNALS_PARENT ON EXTERNALS (wc_id, parent_relpath); " \
+ "DROP INDEX I_NODES_PARENT; " \
+ "CREATE UNIQUE INDEX I_NODES_PARENT ON NODES (wc_id, parent_relpath, " \
+ " local_relpath, op_depth); " \
+ "DROP INDEX I_ACTUAL_PARENT; " \
+ "CREATE UNIQUE INDEX I_ACTUAL_PARENT ON ACTUAL_NODE (wc_id, parent_relpath, " \
+ " local_relpath); " \
"-- format: YYY " \
""
@@ -316,8 +469,8 @@
" text_mod TEXT, " \
" PRIMARY KEY (wc_id, local_relpath) " \
" ); " \
- "CREATE INDEX I_ACTUAL_PARENT ON ACTUAL_NODE (wc_id, parent_relpath); " \
- "CREATE INDEX I_ACTUAL_CHANGELIST ON ACTUAL_NODE (changelist); " \
+ "CREATE UNIQUE INDEX I_ACTUAL_PARENT ON ACTUAL_NODE (wc_id, parent_relpath, " \
+ " local_relpath); " \
"INSERT INTO ACTUAL_NODE SELECT " \
" wc_id, local_relpath, parent_relpath, properties, conflict_old, " \
" conflict_new, conflict_working, prop_reject, changelist, text_mod " \
@@ -341,5 +494,48 @@
STMT_11, \
STMT_12, \
STMT_13, \
+ STMT_14, \
+ STMT_15, \
+ STMT_16, \
+ STMT_17, \
+ STMT_18, \
+ STMT_19, \
+ STMT_20, \
+ STMT_21, \
+ STMT_22, \
+ STMT_23, \
+ STMT_24, \
+ STMT_25, \
NULL \
}
+
+#define WC_METADATA_SQL_DECLARE_STATEMENT_INFO(varname) \
+ static const char * const varname[][2] = { \
+ STMT_0_INFO, \
+ STMT_1_INFO, \
+ STMT_2_INFO, \
+ STMT_3_INFO, \
+ STMT_4_INFO, \
+ STMT_5_INFO, \
+ STMT_6_INFO, \
+ STMT_7_INFO, \
+ STMT_8_INFO, \
+ STMT_9_INFO, \
+ STMT_10_INFO, \
+ STMT_11_INFO, \
+ STMT_12_INFO, \
+ STMT_13_INFO, \
+ STMT_14_INFO, \
+ STMT_15_INFO, \
+ STMT_16_INFO, \
+ STMT_17_INFO, \
+ STMT_18_INFO, \
+ STMT_19_INFO, \
+ STMT_20_INFO, \
+ STMT_21_INFO, \
+ STMT_22_INFO, \
+ STMT_23_INFO, \
+ STMT_24_INFO, \
+ STMT_25_INFO, \
+ {NULL, NULL} \
+ }
diff --git a/subversion/libsvn_wc/wc-metadata.sql b/subversion/libsvn_wc/wc-metadata.sql
index 18f8fc6..e4b226e 100644
--- a/subversion/libsvn_wc/wc-metadata.sql
+++ b/subversion/libsvn_wc/wc-metadata.sql
@@ -23,17 +23,16 @@
/*
* the KIND column in these tables has one of the following values
- * (documented in the corresponding C type #svn_wc__db_kind_t):
+ * (documented in the corresponding C type #svn_kind_t):
* "file"
* "dir"
* "symlink"
* "unknown"
- * "subdir"
*
* the PRESENCE column in these tables has one of the following values
* (see also the C type #svn_wc__db_status_t):
* "normal"
- * "absent" -- server has declared it "absent" (ie. authz failure)
+ * "server-excluded" -- server has declared it excluded (ie. authz failure)
* "excluded" -- administratively excluded (ie. sparse WC)
* "not-present" -- node not present at this REV
* "incomplete" -- state hasn't been filled in
@@ -108,7 +107,8 @@ CREATE TABLE PRISTINE (
md5_checksum TEXT NOT NULL
);
-
+CREATE INDEX I_PRISTINE_MD5 ON PRISTINE (md5_checksum);
+
/* ------------------------------------------------------------------------- */
/* The ACTUAL_NODE table describes text changes and property changes
@@ -170,7 +170,10 @@ CREATE TABLE ACTUAL_NODE (
/* stsp: This is meant for text conflicts, right? What about property
conflicts? Why do we need these in a column to refer to the
pristine store? Can't we just parse the checksums from
- conflict_data as well? */
+ conflict_data as well?
+ rhuijben: Because that won't allow triggers to handle refcounts.
+ We would have to scan all conflict skels before cleaning up the
+ a single file from the pristine stor */
older_checksum TEXT REFERENCES PRISTINE (checksum),
left_checksum TEXT REFERENCES PRISTINE (checksum),
right_checksum TEXT REFERENCES PRISTINE (checksum),
@@ -178,8 +181,8 @@ CREATE TABLE ACTUAL_NODE (
PRIMARY KEY (wc_id, local_relpath)
);
-CREATE INDEX I_ACTUAL_PARENT ON ACTUAL_NODE (wc_id, parent_relpath);
-CREATE INDEX I_ACTUAL_CHANGELIST ON ACTUAL_NODE (changelist);
+CREATE UNIQUE INDEX I_ACTUAL_PARENT ON ACTUAL_NODE (wc_id, parent_relpath,
+ local_relpath);
/* ------------------------------------------------------------------------- */
@@ -250,19 +253,10 @@ PRAGMA user_version =
op_depth values are not normally visible to the user but may become
visible after reverting local changes.
- ### The following text needs revision
-
- Each row in BASE_NODE has an associated row NODE_DATA. Additionally, each
- row in WORKING_NODE has one or more associated rows in NODE_DATA.
-
This table contains full node descriptions for nodes in either the BASE
or WORKING trees as described in notes/wc-ng/design. Fields relate
both to BASE and WORKING trees, unless documented otherwise.
- ### This table is to be integrated into the SCHEMA statement as soon
- the experimental status of NODES is lifted.
- ### This table superseeds NODE_DATA
-
For illustration, with a scenario like this:
# (0)
@@ -272,12 +266,11 @@ PRAGMA user_version =
touch foo/bar
svn add foo/bar # (2)
- , these are the NODES for the path foo/bar (before single-db, the
- numbering of op_depth is still a bit different):
+ , these are the NODES table rows for the path foo/bar:
- (0) BASE_NODE -----> NODES (op_depth == 0)
- (1) NODES (op_depth == 1) ( <----_ )
- (2) NODES (op_depth == 2) <----- WORKING_NODE
+ (0) "BASE" ---> NODES (op_depth == 0)
+ (1) NODES (op_depth == 1)
+ (2) NODES (op_depth == 2)
0 is the original data for foo/bar before 'svn rm foo' (if it existed).
1 is the data for foo/bar copied in from ^/moo/bar.
@@ -316,8 +309,8 @@ CREATE TABLE NODES (
BASE node, the location of the initial checkout.
When op_depth != 0, they indicate where this node was copied/moved from.
- In this case, the fields are set only on the root of the operation,
- and are NULL for all children. */
+ In this case, the fields are set for the root of the operation and for all
+ children. */
repos_id INTEGER REFERENCES REPOSITORY (id),
repos_path TEXT,
revision INTEGER,
@@ -364,7 +357,7 @@ CREATE TABLE NODES (
current 'op_depth'. This state is badly named, it should be
something like 'deleted'.
- absent: in the 'BASE' tree this is a node that is excluded by
+ server-excluded: in the 'BASE' tree this is a node that is excluded by
authz. The name of the node is known from the parent, but no
other information is available. Not valid in the 'WORKING'
tree as there is no way to commit such a node.
@@ -384,16 +377,19 @@ CREATE TABLE NODES (
perhaps add a column called "moved_from". */
/* Boolean value, specifying if this node was moved here (rather than just
- copied). The source of the move is specified in copyfrom_*. */
+ copied). This is set on all the nodes in the moved tree. The source of
+ the move is implied by a different node with a moved_to column pointing
+ at the root node of the moved tree. */
moved_here INTEGER,
/* If the underlying node was moved away (rather than just deleted), this
- specifies the local_relpath of where the BASE node was moved to.
+ specifies the local_relpath of where the node was moved to.
This is set only on the root of a move, and is NULL for all children.
- Note that moved_to never refers to *this* node. It always refers
- to the "underlying" node, whether that is BASE or a child node
- implied from a parent's move/copy. */
+ The op-depth of the moved-to node is not recorded. A moved_to path
+ always points at a node within the highest op-depth layer at the
+ destination. This invariant must be maintained by operations which
+ change existing move information. */
moved_to TEXT,
@@ -402,8 +398,11 @@ CREATE TABLE NODES (
/* the kind of the new node. may be "unknown" if the node is not present. */
kind TEXT NOT NULL,
- /* serialized skel of this node's properties. NULL if we
- have no information about the properties (a non-present node). */
+ /* serialized skel of this node's properties (when presence is 'normal' or
+ 'incomplete'); an empty skel or NULL indicates no properties. NULL if
+ we have no information about the properties (any other presence).
+ TODO: Choose & require a single representation for 'no properties'.
+ */
properties BLOB,
/* NULL depth means "default" (typically svn_depth_infinity) */
@@ -460,24 +459,27 @@ CREATE TABLE NODES (
node does not have any dav-cache. */
dav_cache BLOB,
- /* The serialized file external information. */
- /* ### hack. hack. hack.
- ### This information is already stored in properties, but because the
- ### current working copy implementation is such a pain, we can't
- ### readily retrieve it, hence this temporary cache column.
- ### When it is removed, be sure to remove the extra column from
- ### the db-tests.
-
- ### Note: This is only here as a hack, and should *NOT* be added
- ### to any wc_db APIs. */
- file_external TEXT,
+ /* Is there a file external in this location. NULL if there
+ is no file external, otherwise '1' */
+ /* ### Originally we had a wc-1.0 like skel in this place, so we
+ ### check for NULL.
+ ### In Subversion 1.7 we defined this column as TEXT, but Sqlite
+ ### only uses this information for deciding how to optimize
+ ### anyway. */
+ file_external INTEGER,
+ /* serialized skel of this node's inherited properties. NULL if this
+ is not the BASE of a WC root node. */
+ inherited_props BLOB,
PRIMARY KEY (wc_id, local_relpath, op_depth)
);
-CREATE INDEX I_NODES_PARENT ON NODES (wc_id, parent_relpath, op_depth);
+CREATE UNIQUE INDEX I_NODES_PARENT ON NODES (wc_id, parent_relpath,
+ local_relpath, op_depth);
+/* I_NODES_MOVED is introduced in format 30 */
+CREATE UNIQUE INDEX I_NODES_MOVED ON NODES (wc_id, moved_to, op_depth);
/* Many queries have to filter the nodes table to pick only that version
of each node with the highest (most "current") op_depth. This view
@@ -495,7 +497,7 @@ CREATE VIEW NODES_CURRENT AS
AND n2.local_relpath = n.local_relpath);
/* Many queries have to filter the nodes table to pick only that version
- of each node with the base (least "current") op_depth. This view
+ of each node with the BASE ("as checked out") op_depth. This view
does the heavy lifting for such queries. */
CREATE VIEW NODES_BASE AS
SELECT * FROM nodes
@@ -539,13 +541,13 @@ CREATE TABLE EXTERNALS (
local_relpath TEXT NOT NULL,
/* The working copy root can't be recorded as an external in itself
- so this will never be NULL. */
+ so this will never be NULL. ### ATM only inserted, never queried */
parent_relpath TEXT NOT NULL,
/* Repository location fields */
repos_id INTEGER NOT NULL REFERENCES REPOSITORY (id),
- /* Either 'normal' or 'excluded' */
+ /* Either MAP_NORMAL or MAP_EXCLUDED */
presence TEXT NOT NULL,
/* the kind of the external. */
@@ -566,22 +568,75 @@ CREATE TABLE EXTERNALS (
PRIMARY KEY (wc_id, local_relpath)
);
-CREATE INDEX I_EXTERNALS_PARENT ON EXTERNALS (wc_id, parent_relpath);
CREATE UNIQUE INDEX I_EXTERNALS_DEFINED ON EXTERNALS (wc_id,
def_local_relpath,
local_relpath);
+/* ------------------------------------------------------------------------- */
+/* This statement provides SQLite with the necessary information about our
+ indexes to make better decisions in the query planner.
+
+ For every interesting index this contains a number of rows where the
+ statistics ar calculated for and then for every column in the index the
+ average number of rows with the same value in all columns left of this
+ column including the column itself.
+
+ See http://www.sqlite.org/fileformat2.html#stat1tab for more details.
+
+ The important thing here is that this tells Sqlite that the wc_id column
+ of the NODES and ACTUAL_NODE table is usually a single value, so queries
+ should use more than one column for index usage.
+
+ The current hints describe NODES+ACTUAL_NODE as a working copy with
+ 8000 nodes in 1 a single working copy(=wc_id), 10 nodes per directory
+ and an average of 2 op-depth layers per node.
+
+ The number of integers must be number of index columns + 1, which is
+ verified via the test_schema_statistics() test.
+ */
+-- STMT_INSTALL_SCHEMA_STATISTICS
+ANALYZE sqlite_master; /* Creates empty sqlite_stat1 if necessary */
+
+DELETE FROM sqlite_stat1
+WHERE tbl in ('NODES', 'ACTUAL_NODE', 'LOCK', 'WC_LOCK');
+
+INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES
+ ('NODES', 'sqlite_autoindex_NODES_1', '8000 8000 2 1');
+INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES
+ ('NODES', 'I_NODES_PARENT', '8000 8000 10 2 1');
+/* Tell a lie: We ignore that 99.9% of all moved_to values are NULL */
+INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES
+ ('NODES', 'I_NODES_MOVED', '8000 8000 1 1');
+
+INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES
+ ('ACTUAL_NODE', 'sqlite_autoindex_ACTUAL_NODE_1', '8000 8000 1');
+INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES
+ ('ACTUAL_NODE', 'I_ACTUAL_PARENT', '8000 8000 10 1');
+
+INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES
+ ('LOCK', 'sqlite_autoindex_LOCK_1', '100 100 1');
+
+INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES
+ ('WC_LOCK', 'sqlite_autoindex_WC_LOCK_1', '100 100 1');
+
+/* sqlite_autoindex_WORK_QUEUE_1 doesn't exist because WORK_QUEUE is
+ a INTEGER PRIMARY KEY AUTOINCREMENT table */
+
+ANALYZE sqlite_master; /* Loads sqlite_stat1 data for query optimizer */
+/* ------------------------------------------------------------------------- */
+
/* Format 20 introduces NODES and removes BASE_NODE and WORKING_NODE */
-- STMT_UPGRADE_TO_20
-UPDATE BASE_NODE SET checksum=(SELECT checksum FROM pristine
- WHERE md5_checksum=BASE_NODE.checksum)
-WHERE EXISTS(SELECT 1 FROM pristine WHERE md5_checksum=BASE_NODE.checksum);
+UPDATE BASE_NODE SET checksum = (SELECT checksum FROM pristine
+ WHERE md5_checksum = BASE_NODE.checksum)
+WHERE EXISTS (SELECT 1 FROM pristine WHERE md5_checksum = BASE_NODE.checksum);
-UPDATE WORKING_NODE SET checksum=(SELECT checksum FROM pristine
- WHERE md5_checksum=WORKING_NODE.checksum)
-WHERE EXISTS(SELECT 1 FROM pristine WHERE md5_checksum=WORKING_NODE.checksum);
+UPDATE WORKING_NODE SET checksum = (SELECT checksum FROM pristine
+ WHERE md5_checksum = WORKING_NODE.checksum)
+WHERE EXISTS (SELECT 1 FROM pristine
+ WHERE md5_checksum = WORKING_NODE.checksum);
INSERT INTO NODES (
wc_id, local_relpath, op_depth, parent_relpath,
@@ -626,6 +681,15 @@ PRAGMA user_version = 20;
-- STMT_UPGRADE_TO_21
PRAGMA user_version = 21;
+/* For format 21 bump code */
+-- STMT_UPGRADE_21_SELECT_OLD_TREE_CONFLICT
+SELECT wc_id, local_relpath, tree_conflict_data
+FROM actual_node
+WHERE tree_conflict_data IS NOT NULL
+
+/* For format 21 bump code */
+-- STMT_UPGRADE_21_ERASE_OLD_CONFLICTS
+UPDATE actual_node SET tree_conflict_data = NULL
/* ------------------------------------------------------------------------- */
@@ -647,6 +711,9 @@ PRAGMA user_version = 22;
-- STMT_UPGRADE_TO_23
PRAGMA user_version = 23;
+-- STMT_UPGRADE_23_HAS_WORKING_NODES
+SELECT 1 FROM nodes WHERE op_depth > 0
+LIMIT 1
/* ------------------------------------------------------------------------- */
@@ -696,6 +763,15 @@ PRAGMA user_version = 26;
-- STMT_UPGRADE_TO_27
PRAGMA user_version = 27;
+/* For format 27 bump code */
+-- STMT_UPGRADE_27_HAS_ACTUAL_NODES_CONFLICTS
+SELECT 1 FROM actual_node
+WHERE NOT ((prop_reject IS NULL) AND (conflict_old IS NULL)
+ AND (conflict_new IS NULL) AND (conflict_working IS NULL)
+ AND (tree_conflict_data IS NULL))
+LIMIT 1
+
+
/* ------------------------------------------------------------------------- */
/* Format 28 involves no schema changes, it only converts MD5 pristine
@@ -703,9 +779,9 @@ PRAGMA user_version = 27;
-- STMT_UPGRADE_TO_28
-UPDATE NODES SET checksum=(SELECT checksum FROM pristine
- WHERE md5_checksum=nodes.checksum)
-WHERE EXISTS(SELECT 1 FROM pristine WHERE md5_checksum=nodes.checksum);
+UPDATE NODES SET checksum = (SELECT checksum FROM pristine
+ WHERE md5_checksum = nodes.checksum)
+WHERE EXISTS (SELECT 1 FROM pristine WHERE md5_checksum = nodes.checksum);
PRAGMA user_version = 28;
@@ -751,6 +827,97 @@ PRAGMA user_version = 29;
/* ------------------------------------------------------------------------- */
+/* Format 30 creates a new NODES index for move information, and a new
+ PRISTINE index for the md5_checksum column. It also activates use of
+ skel-based conflict storage -- see notes/wc-ng/conflict-storage-2.0.
+ It also renames the "absent" presence to "server-excluded". */
+-- STMT_UPGRADE_TO_30
+CREATE UNIQUE INDEX IF NOT EXISTS I_NODES_MOVED
+ON NODES (wc_id, moved_to, op_depth);
+
+CREATE INDEX IF NOT EXISTS I_PRISTINE_MD5 ON PRISTINE (md5_checksum);
+
+UPDATE nodes SET presence = "server-excluded" WHERE presence = "absent";
+
+/* Just to be sure clear out file external skels from pre 1.7.0 development
+ working copies that were never updated by 1.7.0+ style clients */
+UPDATE nodes SET file_external=1 WHERE file_external IS NOT NULL;
+
+-- STMT_UPGRADE_30_SELECT_CONFLICT_SEPARATE
+SELECT wc_id, local_relpath,
+ conflict_old, conflict_working, conflict_new, prop_reject, tree_conflict_data
+FROM actual_node
+WHERE conflict_old IS NOT NULL
+ OR conflict_working IS NOT NULL
+ OR conflict_new IS NOT NULL
+ OR prop_reject IS NOT NULL
+ OR tree_conflict_data IS NOT NULL
+ORDER by wc_id, local_relpath
+
+-- STMT_UPGRADE_30_SET_CONFLICT
+UPDATE actual_node SET conflict_data = ?3, conflict_old = NULL,
+ conflict_working = NULL, conflict_new = NULL, prop_reject = NULL,
+ tree_conflict_data = NULL
+WHERE wc_id = ?1 and local_relpath = ?2
+
+/* ------------------------------------------------------------------------- */
+
+/* Format 31 adds the inherited_props column to the NODES table. C code then
+ initializes the update/switch roots to make sure future updates fetch the
+ inherited properties */
+-- STMT_UPGRADE_TO_31_ALTER_TABLE
+ALTER TABLE NODES ADD COLUMN inherited_props BLOB;
+-- STMT_UPGRADE_TO_31_FINALIZE
+DROP INDEX IF EXISTS I_ACTUAL_CHANGELIST;
+DROP INDEX IF EXISTS I_EXTERNALS_PARENT;
+
+DROP INDEX I_NODES_PARENT;
+CREATE UNIQUE INDEX I_NODES_PARENT ON NODES (wc_id, parent_relpath,
+ local_relpath, op_depth);
+
+DROP INDEX I_ACTUAL_PARENT;
+CREATE UNIQUE INDEX I_ACTUAL_PARENT ON ACTUAL_NODE (wc_id, parent_relpath,
+ local_relpath);
+
+PRAGMA user_version = 31;
+
+-- STMT_UPGRADE_31_SELECT_WCROOT_NODES
+/* Select all base nodes which are the root of a WC, including
+ switched subtrees, but excluding those which map to the root
+ of the repos.
+
+ ### IPROPS: Is this query horribly inefficient? Quite likely,
+ ### but it only runs during an upgrade, so do we care? */
+SELECT l.wc_id, l.local_relpath FROM nodes as l
+LEFT OUTER JOIN nodes as r
+ON l.wc_id = r.wc_id
+ AND r.local_relpath = l.parent_relpath
+ AND r.op_depth = 0
+WHERE l.op_depth = 0
+ AND l.repos_path != ''
+ AND ((l.repos_id IS NOT r.repos_id)
+ OR (l.repos_path IS NOT RELPATH_SKIP_JOIN(r.local_relpath, r.repos_path, l.local_relpath)))
+
+
+/* ------------------------------------------------------------------------- */
+/* Format 32 .... */
+-- STMT_UPGRADE_TO_32
+
+/* Drop old index. ### Remove this part from the upgrade to 31 once bumped */
+DROP INDEX IF EXISTS I_ACTUAL_CHANGELIST;
+DROP INDEX IF EXISTS I_EXTERNALS_PARENT;
+CREATE INDEX I_EXTERNALS_PARENT ON EXTERNALS (wc_id, parent_relpath);
+
+DROP INDEX I_NODES_PARENT;
+CREATE UNIQUE INDEX I_NODES_PARENT ON NODES (wc_id, parent_relpath,
+ local_relpath, op_depth);
+
+DROP INDEX I_ACTUAL_PARENT;
+CREATE UNIQUE INDEX I_ACTUAL_PARENT ON ACTUAL_NODE (wc_id, parent_relpath,
+ local_relpath);
+
+/* ------------------------------------------------------------------------- */
+
/* Format YYY introduces new handling for conflict information. */
-- format: YYY
@@ -763,9 +930,12 @@ PRAGMA user_version = 29;
number will be, however, so we're just marking it as 99 for now. */
-- format: 99
-/* TODO: Rename the "absent" presence value to "server-excluded" before
- the 1.7 release. wc_db.c and this file have references to "absent" which
- still need to be changed to "server-excluded". */
+/* TODO: Un-confuse *_revision column names in the EXTERNALS table to
+ "-r<operative> foo@<peg>", as suggested by the patch attached to
+ http://svn.haxx.se/dev/archive-2011-09/0478.shtml */
+/* TODO: Remove column parent_relpath from EXTERNALS. We're not using it and
+ never will. It's not interesting like in the NODES table: the external's
+ parent path may be *anything*: unversioned, "behind" a another WC... */
/* Now "drop" the tree_conflict_data column from actual_node. */
CREATE TABLE ACTUAL_NODE_BACKUP (
@@ -803,8 +973,8 @@ CREATE TABLE ACTUAL_NODE (
PRIMARY KEY (wc_id, local_relpath)
);
-CREATE INDEX I_ACTUAL_PARENT ON ACTUAL_NODE (wc_id, parent_relpath);
-CREATE INDEX I_ACTUAL_CHANGELIST ON ACTUAL_NODE (changelist);
+CREATE UNIQUE INDEX I_ACTUAL_PARENT ON ACTUAL_NODE (wc_id, parent_relpath,
+ local_relpath);
INSERT INTO ACTUAL_NODE SELECT
wc_id, local_relpath, parent_relpath, properties, conflict_old,
diff --git a/subversion/libsvn_wc/wc-queries.h b/subversion/libsvn_wc/wc-queries.h
index 198f9be..e33af98 100644
--- a/subversion/libsvn_wc/wc-queries.h
+++ b/subversion/libsvn_wc/wc-queries.h
@@ -1,22 +1,26 @@
-/* This file is automatically generated from wc-queries.sql.
+/* This file is automatically generated from wc-queries.sql and .dist_sandbox/subversion-1.8.13/subversion/libsvn_wc/token-map.h.
* Do not edit this file -- edit the source and rerun gen-make.py */
#define STMT_SELECT_NODE_INFO 0
+#define STMT_0_INFO {"STMT_SELECT_NODE_INFO", NULL}
#define STMT_0 \
"SELECT op_depth, repos_id, repos_path, presence, kind, revision, checksum, " \
" translated_size, changed_revision, changed_date, changed_author, depth, " \
- " symlink_target, last_mod_time, properties " \
+ " symlink_target, last_mod_time, properties, moved_here, inherited_props, " \
+ " moved_to " \
"FROM nodes " \
"WHERE wc_id = ?1 AND local_relpath = ?2 " \
"ORDER BY op_depth DESC " \
""
#define STMT_SELECT_NODE_INFO_WITH_LOCK 1
+#define STMT_1_INFO {"STMT_SELECT_NODE_INFO_WITH_LOCK", NULL}
#define STMT_1 \
"SELECT op_depth, nodes.repos_id, nodes.repos_path, presence, kind, revision, " \
" checksum, translated_size, changed_revision, changed_date, changed_author, " \
- " depth, symlink_target, last_mod_time, properties, lock_token, lock_owner, " \
- " lock_comment, lock_date " \
+ " depth, symlink_target, last_mod_time, properties, moved_here, " \
+ " inherited_props, " \
+ " lock_token, lock_owner, lock_comment, lock_date " \
"FROM nodes " \
"LEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id " \
" AND nodes.repos_path = lock.repos_relpath " \
@@ -25,19 +29,21 @@
""
#define STMT_SELECT_BASE_NODE 2
+#define STMT_2_INFO {"STMT_SELECT_BASE_NODE", NULL}
#define STMT_2 \
"SELECT repos_id, repos_path, presence, kind, revision, checksum, " \
" translated_size, changed_revision, changed_date, changed_author, depth, " \
- " symlink_target, last_mod_time, properties, file_external IS NOT NULL " \
+ " symlink_target, last_mod_time, properties, file_external " \
"FROM nodes " \
"WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 " \
""
#define STMT_SELECT_BASE_NODE_WITH_LOCK 3
+#define STMT_3_INFO {"STMT_SELECT_BASE_NODE_WITH_LOCK", NULL}
#define STMT_3 \
"SELECT nodes.repos_id, nodes.repos_path, presence, kind, revision, " \
" checksum, translated_size, changed_revision, changed_date, changed_author, " \
- " depth, symlink_target, last_mod_time, properties, file_external IS NOT NULL, " \
+ " depth, symlink_target, last_mod_time, properties, file_external, " \
" lock_token, lock_owner, lock_comment, lock_date " \
"FROM nodes " \
"LEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id " \
@@ -46,9 +52,10 @@
""
#define STMT_SELECT_BASE_CHILDREN_INFO 4
+#define STMT_4_INFO {"STMT_SELECT_BASE_CHILDREN_INFO", NULL}
#define STMT_4 \
"SELECT local_relpath, nodes.repos_id, nodes.repos_path, presence, kind, " \
- " revision, depth, file_external IS NOT NULL, " \
+ " revision, depth, file_external, " \
" lock_token, lock_owner, lock_comment, lock_date " \
"FROM nodes " \
"LEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id " \
@@ -57,6 +64,7 @@
""
#define STMT_SELECT_WORKING_NODE 5
+#define STMT_5_INFO {"STMT_SELECT_WORKING_NODE", NULL}
#define STMT_5 \
"SELECT op_depth, presence, kind, checksum, translated_size, " \
" changed_revision, changed_date, changed_author, depth, symlink_target, " \
@@ -69,6 +77,7 @@
""
#define STMT_SELECT_DEPTH_NODE 6
+#define STMT_6_INFO {"STMT_SELECT_DEPTH_NODE", NULL}
#define STMT_6 \
"SELECT repos_id, repos_path, presence, kind, revision, checksum, " \
" translated_size, changed_revision, changed_date, changed_author, depth, " \
@@ -78,149 +87,329 @@
""
#define STMT_SELECT_LOWEST_WORKING_NODE 7
+#define STMT_7_INFO {"STMT_SELECT_LOWEST_WORKING_NODE", NULL}
#define STMT_7 \
- "SELECT op_depth, presence " \
+ "SELECT op_depth, presence, kind, moved_to " \
"FROM nodes " \
- "WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > 0 " \
+ "WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3 " \
"ORDER BY op_depth " \
"LIMIT 1 " \
""
-#define STMT_SELECT_ACTUAL_NODE 8
+#define STMT_SELECT_HIGHEST_WORKING_NODE 8
+#define STMT_8_INFO {"STMT_SELECT_HIGHEST_WORKING_NODE", NULL}
#define STMT_8 \
- "SELECT prop_reject, changelist, conflict_old, conflict_new, " \
- "conflict_working, tree_conflict_data, properties " \
- "FROM actual_node " \
- "WHERE wc_id = ?1 AND local_relpath = ?2 " \
+ "SELECT op_depth " \
+ "FROM nodes " \
+ "WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth < ?3 " \
+ "ORDER BY op_depth DESC " \
+ "LIMIT 1 " \
""
-#define STMT_SELECT_ACTUAL_TREE_CONFLICT 9
+#define STMT_SELECT_ACTUAL_NODE 9
+#define STMT_9_INFO {"STMT_SELECT_ACTUAL_NODE", NULL}
#define STMT_9 \
- "SELECT tree_conflict_data " \
+ "SELECT changelist, properties, conflict_data " \
"FROM actual_node " \
- "WHERE wc_id = ?1 AND local_relpath = ?2 AND tree_conflict_data IS NOT NULL " \
+ "WHERE wc_id = ?1 AND local_relpath = ?2 " \
""
-#define STMT_SELECT_ACTUAL_CHANGELIST 10
+#define STMT_SELECT_NODE_CHILDREN_INFO 10
+#define STMT_10_INFO {"STMT_SELECT_NODE_CHILDREN_INFO", NULL}
#define STMT_10 \
- "SELECT changelist " \
- "FROM actual_node " \
- "WHERE wc_id = ?1 AND local_relpath = ?2 AND changelist IS NOT NULL " \
- ""
-
-#define STMT_SELECT_NODE_CHILDREN_INFO 11
-#define STMT_11 \
"SELECT op_depth, nodes.repos_id, nodes.repos_path, presence, kind, revision, " \
" checksum, translated_size, changed_revision, changed_date, changed_author, " \
" depth, symlink_target, last_mod_time, properties, lock_token, lock_owner, " \
- " lock_comment, lock_date, local_relpath " \
+ " lock_comment, lock_date, local_relpath, moved_here, moved_to, file_external " \
"FROM nodes " \
"LEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id " \
- " AND nodes.repos_path = lock.repos_relpath " \
+ " AND nodes.repos_path = lock.repos_relpath AND op_depth = 0 " \
"WHERE wc_id = ?1 AND parent_relpath = ?2 " \
""
-#define STMT_SELECT_NODE_CHILDREN_WALKER_INFO 12
-#define STMT_12 \
+#define STMT_SELECT_NODE_CHILDREN_WALKER_INFO 11
+#define STMT_11_INFO {"STMT_SELECT_NODE_CHILDREN_WALKER_INFO", NULL}
+#define STMT_11 \
"SELECT local_relpath, op_depth, presence, kind " \
"FROM nodes_current " \
"WHERE wc_id = ?1 AND parent_relpath = ?2 " \
""
-#define STMT_SELECT_ACTUAL_CHILDREN_INFO 13
-#define STMT_13 \
- "SELECT prop_reject, changelist, conflict_old, conflict_new, " \
- "conflict_working, tree_conflict_data, properties, local_relpath, " \
- "conflict_data " \
+#define STMT_SELECT_ACTUAL_CHILDREN_INFO 12
+#define STMT_12_INFO {"STMT_SELECT_ACTUAL_CHILDREN_INFO", NULL}
+#define STMT_12 \
+ "SELECT local_relpath, changelist, properties, conflict_data " \
"FROM actual_node " \
"WHERE wc_id = ?1 AND parent_relpath = ?2 " \
""
-#define STMT_SELECT_REPOSITORY_BY_ID 14
-#define STMT_14 \
+#define STMT_SELECT_REPOSITORY_BY_ID 13
+#define STMT_13_INFO {"STMT_SELECT_REPOSITORY_BY_ID", NULL}
+#define STMT_13 \
"SELECT root, uuid FROM repository WHERE id = ?1 " \
""
-#define STMT_SELECT_WCROOT_NULL 15
-#define STMT_15 \
+#define STMT_SELECT_WCROOT_NULL 14
+#define STMT_14_INFO {"STMT_SELECT_WCROOT_NULL", NULL}
+#define STMT_14 \
"SELECT id FROM wcroot WHERE local_abspath IS NULL " \
""
-#define STMT_SELECT_REPOSITORY 16
-#define STMT_16 \
+#define STMT_SELECT_REPOSITORY 15
+#define STMT_15_INFO {"STMT_SELECT_REPOSITORY", NULL}
+#define STMT_15 \
"SELECT id FROM repository WHERE root = ?1 " \
""
-#define STMT_INSERT_REPOSITORY 17
-#define STMT_17 \
+#define STMT_INSERT_REPOSITORY 16
+#define STMT_16_INFO {"STMT_INSERT_REPOSITORY", NULL}
+#define STMT_16 \
"INSERT INTO repository (root, uuid) VALUES (?1, ?2) " \
""
-#define STMT_INSERT_NODE 18
-#define STMT_18 \
+#define STMT_INSERT_NODE 17
+#define STMT_17_INFO {"STMT_INSERT_NODE", NULL}
+#define STMT_17 \
"INSERT OR REPLACE INTO nodes ( " \
" wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path, " \
" revision, presence, depth, kind, changed_revision, changed_date, " \
" changed_author, checksum, properties, translated_size, last_mod_time, " \
- " dav_cache, symlink_target, file_external) " \
+ " dav_cache, symlink_target, file_external, moved_to, moved_here, " \
+ " inherited_props) " \
"VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, " \
- " ?15, ?16, ?17, ?18, ?19, ?20) " \
+ " ?15, ?16, ?17, ?18, ?19, ?20, ?21, ?22, ?23) " \
+ ""
+
+#define STMT_SELECT_BASE_PRESENT 18
+#define STMT_18_INFO {"STMT_SELECT_BASE_PRESENT", NULL}
+#define STMT_18 \
+ "SELECT local_relpath, kind FROM nodes n " \
+ "WHERE wc_id = ?1 AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ " AND op_depth = 0 " \
+ " AND presence in ('normal', 'incomplete') " \
+ " AND NOT EXISTS(SELECT 1 FROM NODES w " \
+ " WHERE w.wc_id = ?1 AND w.local_relpath = n.local_relpath " \
+ " AND op_depth > 0) " \
+ "ORDER BY local_relpath DESC " \
""
-#define STMT_SELECT_OP_DEPTH_CHILDREN 19
+#define STMT_SELECT_WORKING_PRESENT 19
+#define STMT_19_INFO {"STMT_SELECT_WORKING_PRESENT", NULL}
#define STMT_19 \
- "SELECT local_relpath FROM nodes " \
- "WHERE wc_id = ?1 AND parent_relpath = ?2 AND op_depth = ?3 " \
- " AND (?3 != 0 OR file_external is NULL) " \
+ "SELECT local_relpath, kind, checksum, translated_size, last_mod_time " \
+ "FROM nodes n " \
+ "WHERE wc_id = ?1 " \
+ " AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ " AND presence in ('normal', 'incomplete') " \
+ " AND op_depth = (SELECT MAX(op_depth) " \
+ " FROM NODES w " \
+ " WHERE w.wc_id = ?1 " \
+ " AND w.local_relpath = n.local_relpath) " \
+ "ORDER BY local_relpath DESC " \
""
-#define STMT_SELECT_GE_OP_DEPTH_CHILDREN 20
+#define STMT_DELETE_NODE_RECURSIVE 20
+#define STMT_20_INFO {"STMT_DELETE_NODE_RECURSIVE", NULL}
#define STMT_20 \
+ "DELETE FROM NODES " \
+ "WHERE wc_id = ?1 " \
+ " AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ ""
+
+#define STMT_DELETE_NODE 21
+#define STMT_21_INFO {"STMT_DELETE_NODE", NULL}
+#define STMT_21 \
+ "DELETE " \
+ "FROM NODES " \
+ "WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 " \
+ ""
+
+#define STMT_DELETE_ACTUAL_FOR_BASE_RECURSIVE 22
+#define STMT_22_INFO {"STMT_DELETE_ACTUAL_FOR_BASE_RECURSIVE", NULL}
+#define STMT_22 \
+ "DELETE FROM actual_node " \
+ "WHERE wc_id = ?1 AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ " AND EXISTS(SELECT 1 FROM NODES b " \
+ " WHERE b.wc_id = ?1 " \
+ " AND b.local_relpath = actual_node.local_relpath " \
+ " AND op_depth = 0) " \
+ " AND NOT EXISTS(SELECT 1 FROM NODES w " \
+ " WHERE w.wc_id = ?1 " \
+ " AND w.local_relpath = actual_node.local_relpath " \
+ " AND op_depth > 0 " \
+ " AND presence in ('normal', 'incomplete', 'not-present')) " \
+ ""
+
+#define STMT_DELETE_WORKING_BASE_DELETE 23
+#define STMT_23_INFO {"STMT_DELETE_WORKING_BASE_DELETE", NULL}
+#define STMT_23 \
+ "DELETE FROM nodes " \
+ "WHERE wc_id = ?1 AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ " AND presence = 'base-deleted' " \
+ " AND op_depth > 0 " \
+ " AND op_depth = (SELECT MIN(op_depth) FROM nodes n " \
+ " WHERE n.wc_id = ?1 " \
+ " AND n.local_relpath = nodes.local_relpath " \
+ " AND op_depth > 0) " \
+ ""
+
+#define STMT_DELETE_WORKING_RECURSIVE 24
+#define STMT_24_INFO {"STMT_DELETE_WORKING_RECURSIVE", NULL}
+#define STMT_24 \
+ "DELETE FROM nodes " \
+ "WHERE wc_id = ?1 AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ " AND op_depth > 0 " \
+ ""
+
+#define STMT_DELETE_BASE_RECURSIVE 25
+#define STMT_25_INFO {"STMT_DELETE_BASE_RECURSIVE", NULL}
+#define STMT_25 \
+ "DELETE FROM nodes " \
+ "WHERE wc_id = ?1 AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ " AND op_depth = 0 " \
+ ""
+
+#define STMT_DELETE_WORKING_OP_DEPTH 26
+#define STMT_26_INFO {"STMT_DELETE_WORKING_OP_DEPTH", NULL}
+#define STMT_26 \
+ "DELETE FROM nodes " \
+ "WHERE wc_id = ?1 " \
+ " AND (local_relpath = ?2 OR (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
+ " AND op_depth = ?3 " \
+ ""
+
+#define STMT_DELETE_WORKING_OP_DEPTH_ABOVE 27
+#define STMT_27_INFO {"STMT_DELETE_WORKING_OP_DEPTH_ABOVE", NULL}
+#define STMT_27 \
+ "DELETE FROM nodes " \
+ "WHERE wc_id = ?1 " \
+ " AND (local_relpath = ?2 OR (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
+ " AND op_depth > ?3 " \
+ ""
+
+#define STMT_SELECT_LOCAL_RELPATH_OP_DEPTH 28
+#define STMT_28_INFO {"STMT_SELECT_LOCAL_RELPATH_OP_DEPTH", NULL}
+#define STMT_28 \
+ "SELECT local_relpath " \
+ "FROM nodes " \
+ "WHERE wc_id = ?1 " \
+ " AND (local_relpath = ?2 OR (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
+ " AND op_depth = ?3 " \
+ ""
+
+#define STMT_SELECT_CHILDREN_OP_DEPTH 29
+#define STMT_29_INFO {"STMT_SELECT_CHILDREN_OP_DEPTH", NULL}
+#define STMT_29 \
+ "SELECT local_relpath, kind " \
+ "FROM nodes " \
+ "WHERE wc_id = ?1 " \
+ " AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ " AND op_depth = ?3 " \
+ "ORDER BY local_relpath DESC " \
+ ""
+
+#define STMT_COPY_NODE_MOVE 30
+#define STMT_30_INFO {"STMT_COPY_NODE_MOVE", NULL}
+#define STMT_30 \
+ "INSERT OR REPLACE INTO nodes ( " \
+ " wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path, " \
+ " revision, presence, depth, kind, changed_revision, changed_date, " \
+ " changed_author, checksum, properties, translated_size, last_mod_time, " \
+ " symlink_target, moved_here, moved_to ) " \
+ "SELECT " \
+ " wc_id, ?4 , ?5 , ?6 , " \
+ " repos_id, " \
+ " repos_path, revision, presence, depth, kind, changed_revision, " \
+ " changed_date, changed_author, checksum, properties, translated_size, " \
+ " last_mod_time, symlink_target, 1, " \
+ " (SELECT dst.moved_to FROM nodes AS dst " \
+ " WHERE dst.wc_id = ?1 " \
+ " AND dst.local_relpath = ?4 " \
+ " AND dst.op_depth = ?5) " \
+ "FROM nodes " \
+ "WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 " \
+ ""
+
+#define STMT_SELECT_OP_DEPTH_CHILDREN 31
+#define STMT_31_INFO {"STMT_SELECT_OP_DEPTH_CHILDREN", NULL}
+#define STMT_31 \
+ "SELECT local_relpath, kind FROM nodes " \
+ "WHERE wc_id = ?1 " \
+ " AND parent_relpath = ?2 " \
+ " AND op_depth = ?3 " \
+ " AND presence != 'base-deleted' " \
+ " AND file_external is NULL " \
+ ""
+
+#define STMT_SELECT_GE_OP_DEPTH_CHILDREN 32
+#define STMT_32_INFO {"STMT_SELECT_GE_OP_DEPTH_CHILDREN", NULL}
+#define STMT_32 \
"SELECT 1 FROM nodes " \
"WHERE wc_id = ?1 AND parent_relpath = ?2 " \
" AND (op_depth > ?3 OR (op_depth = ?3 AND presence != 'base-deleted')) " \
- "UNION " \
- "SELECT 1 FROM ACTUAL_NODE " \
+ "UNION ALL " \
+ "SELECT 1 FROM ACTUAL_NODE a " \
"WHERE wc_id = ?1 AND parent_relpath = ?2 " \
+ " AND NOT EXISTS (SELECT 1 FROM nodes n " \
+ " WHERE wc_id = ?1 AND n.local_relpath = a.local_relpath) " \
""
-#define STMT_DELETE_SHADOWED_RECURSIVE 21
-#define STMT_21 \
+#define STMT_DELETE_SHADOWED_RECURSIVE 33
+#define STMT_33_INFO {"STMT_DELETE_SHADOWED_RECURSIVE", NULL}
+#define STMT_33 \
"DELETE FROM nodes " \
"WHERE wc_id = ?1 " \
- " AND (local_relpath = ?2 " \
- " OR ((local_relpath) > (?2) || '/' AND (local_relpath) < (?2) || '0') ) " \
+ " AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
" AND (op_depth < ?3 " \
" OR (op_depth = ?3 AND presence = 'base-deleted')) " \
""
-#define STMT_SELECT_NOT_PRESENT_DESCENDANTS 22
-#define STMT_22 \
+#define STMT_CLEAR_MOVED_TO_FROM_DEST 34
+#define STMT_34_INFO {"STMT_CLEAR_MOVED_TO_FROM_DEST", NULL}
+#define STMT_34 \
+ "UPDATE NODES SET moved_to = NULL " \
+ "WHERE wc_id = ?1 " \
+ " AND moved_to = ?2 " \
+ ""
+
+#define STMT_SELECT_NOT_PRESENT_DESCENDANTS 35
+#define STMT_35_INFO {"STMT_SELECT_NOT_PRESENT_DESCENDANTS", NULL}
+#define STMT_35 \
"SELECT local_relpath FROM nodes " \
"WHERE wc_id = ?1 AND op_depth = ?3 " \
- " AND (parent_relpath = ?2 " \
- " OR ((parent_relpath) > (?2) || '/' AND (parent_relpath) < (?2) || '0') ) " \
- " AND presence == 'not-present' " \
+ " AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ " AND presence = 'not-present' " \
""
-#define STMT_COMMIT_DESCENDANT_TO_BASE 23
-#define STMT_23 \
- "UPDATE NODES SET op_depth = 0, repos_id = ?4, repos_path = ?5, revision = ?6, " \
- " moved_here = NULL, moved_to = NULL, dav_cache = NULL, " \
- " presence = CASE presence WHEN 'normal' THEN 'normal' " \
- " WHEN 'excluded' THEN 'excluded' " \
- " ELSE 'not-present' END " \
- "WHERE wc_id = ?1 AND local_relpath = ?2 and op_depth = ?3 " \
+#define STMT_COMMIT_DESCENDANTS_TO_BASE 36
+#define STMT_36_INFO {"STMT_COMMIT_DESCENDANTS_TO_BASE", NULL}
+#define STMT_36 \
+ "UPDATE NODES SET op_depth = 0, " \
+ " repos_id = ?4, " \
+ " repos_path = ?5 || SUBSTR(local_relpath, LENGTH(?2)+1), " \
+ " revision = ?6, " \
+ " dav_cache = NULL, " \
+ " moved_here = NULL, " \
+ " presence = CASE presence " \
+ " WHEN 'normal' THEN 'normal' " \
+ " WHEN 'excluded' THEN 'excluded' " \
+ " ELSE 'not-present' " \
+ " END " \
+ "WHERE wc_id = ?1 " \
+ " AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ " AND op_depth = ?3 " \
""
-#define STMT_SELECT_NODE_CHILDREN 24
-#define STMT_24 \
+#define STMT_SELECT_NODE_CHILDREN 37
+#define STMT_37_INFO {"STMT_SELECT_NODE_CHILDREN", NULL}
+#define STMT_37 \
"SELECT local_relpath FROM nodes " \
"WHERE wc_id = ?1 AND parent_relpath = ?2 " \
""
-#define STMT_SELECT_WORKING_CHILDREN 25
-#define STMT_25 \
+#define STMT_SELECT_WORKING_CHILDREN 38
+#define STMT_38_INFO {"STMT_SELECT_WORKING_CHILDREN", NULL}
+#define STMT_38 \
"SELECT local_relpath FROM nodes " \
"WHERE wc_id = ?1 AND parent_relpath = ?2 " \
" AND (op_depth > (SELECT MAX(op_depth) FROM nodes " \
@@ -231,475 +420,532 @@
" AND presence != 'base-deleted')) " \
""
-#define STMT_SELECT_BASE_PROPS 26
-#define STMT_26 \
- "SELECT properties FROM nodes " \
- "WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 " \
- ""
-
-#define STMT_SELECT_NODE_PROPS 27
-#define STMT_27 \
+#define STMT_SELECT_NODE_PROPS 39
+#define STMT_39_INFO {"STMT_SELECT_NODE_PROPS", NULL}
+#define STMT_39 \
"SELECT properties, presence FROM nodes " \
"WHERE wc_id = ?1 AND local_relpath = ?2 " \
"ORDER BY op_depth DESC " \
""
-#define STMT_SELECT_ACTUAL_PROPS 28
-#define STMT_28 \
+#define STMT_SELECT_ACTUAL_PROPS 40
+#define STMT_40_INFO {"STMT_SELECT_ACTUAL_PROPS", NULL}
+#define STMT_40 \
"SELECT properties FROM actual_node " \
"WHERE wc_id = ?1 AND local_relpath = ?2 " \
""
-#define STMT_UPDATE_NODE_BASE_PROPS 29
-#define STMT_29 \
- "UPDATE nodes SET properties = ?3 " \
- "WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 " \
- ""
-
-#define STMT_UPDATE_NODE_WORKING_PROPS 30
-#define STMT_30 \
- "UPDATE nodes SET properties = ?3 " \
- "WHERE wc_id = ?1 AND local_relpath = ?2 " \
- " AND op_depth = " \
- " (SELECT MAX(op_depth) FROM nodes " \
- " WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > 0) " \
- ""
-
-#define STMT_UPDATE_ACTUAL_PROPS 31
-#define STMT_31 \
+#define STMT_UPDATE_ACTUAL_PROPS 41
+#define STMT_41_INFO {"STMT_UPDATE_ACTUAL_PROPS", NULL}
+#define STMT_41 \
"UPDATE actual_node SET properties = ?3 " \
"WHERE wc_id = ?1 AND local_relpath = ?2 " \
""
-#define STMT_INSERT_ACTUAL_PROPS 32
-#define STMT_32 \
+#define STMT_INSERT_ACTUAL_PROPS 42
+#define STMT_42_INFO {"STMT_INSERT_ACTUAL_PROPS", NULL}
+#define STMT_42 \
"INSERT INTO actual_node (wc_id, local_relpath, parent_relpath, properties) " \
"VALUES (?1, ?2, ?3, ?4) " \
""
-#define STMT_INSERT_LOCK 33
-#define STMT_33 \
+#define STMT_INSERT_LOCK 43
+#define STMT_43_INFO {"STMT_INSERT_LOCK", NULL}
+#define STMT_43 \
"INSERT OR REPLACE INTO lock " \
"(repos_id, repos_relpath, lock_token, lock_owner, lock_comment, " \
" lock_date) " \
"VALUES (?1, ?2, ?3, ?4, ?5, ?6) " \
""
-#define STMT_SELECT_BASE_NODE_LOCK_TOKENS_RECURSIVE 34
-#define STMT_34 \
+#define STMT_SELECT_BASE_NODE_LOCK_TOKENS_RECURSIVE 44
+#define STMT_44_INFO {"STMT_SELECT_BASE_NODE_LOCK_TOKENS_RECURSIVE", NULL}
+#define STMT_44 \
"SELECT nodes.repos_id, nodes.repos_path, lock_token " \
"FROM nodes " \
"LEFT JOIN lock ON nodes.repos_id = lock.repos_id " \
" AND nodes.repos_path = lock.repos_relpath " \
"WHERE wc_id = ?1 AND op_depth = 0 " \
- " AND (?2 = '' " \
- " OR local_relpath = ?2 " \
- " OR ((local_relpath) > (?2) || '/' AND (local_relpath) < (?2) || '0') ) " \
+ " AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
""
-#define STMT_INSERT_WCROOT 35
-#define STMT_35 \
+#define STMT_INSERT_WCROOT 45
+#define STMT_45_INFO {"STMT_INSERT_WCROOT", NULL}
+#define STMT_45 \
"INSERT INTO wcroot (local_abspath) " \
"VALUES (?1) " \
""
-#define STMT_UPDATE_BASE_NODE_DAV_CACHE 36
-#define STMT_36 \
+#define STMT_UPDATE_BASE_NODE_DAV_CACHE 46
+#define STMT_46_INFO {"STMT_UPDATE_BASE_NODE_DAV_CACHE", NULL}
+#define STMT_46 \
"UPDATE nodes SET dav_cache = ?3 " \
"WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 " \
""
-#define STMT_SELECT_BASE_DAV_CACHE 37
-#define STMT_37 \
+#define STMT_SELECT_BASE_DAV_CACHE 47
+#define STMT_47_INFO {"STMT_SELECT_BASE_DAV_CACHE", NULL}
+#define STMT_47 \
"SELECT dav_cache FROM nodes " \
"WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 " \
""
-#define STMT_SELECT_DELETION_INFO 38
-#define STMT_38 \
- "SELECT nodes_base.presence, nodes_work.presence, nodes_work.moved_to, " \
- " nodes_work.op_depth " \
- "FROM nodes AS nodes_work " \
- "LEFT OUTER JOIN nodes nodes_base ON nodes_base.wc_id = nodes_work.wc_id " \
- " AND nodes_base.local_relpath = nodes_work.local_relpath " \
- " AND nodes_base.op_depth = 0 " \
- "WHERE nodes_work.wc_id = ?1 AND nodes_work.local_relpath = ?2 " \
- " AND nodes_work.op_depth = (SELECT MAX(op_depth) FROM nodes " \
- " WHERE wc_id = ?1 AND local_relpath = ?2 " \
- " AND op_depth > 0) " \
- ""
-
-#define STMT_DELETE_LOCK 39
-#define STMT_39 \
+#define STMT_SELECT_DELETION_INFO 48
+#define STMT_48_INFO {"STMT_SELECT_DELETION_INFO", NULL}
+#define STMT_48 \
+ "SELECT (SELECT b.presence FROM nodes AS b " \
+ " WHERE b.wc_id = ?1 AND b.local_relpath = ?2 AND b.op_depth = 0), " \
+ " work.presence, work.op_depth " \
+ "FROM nodes_current AS work " \
+ "WHERE work.wc_id = ?1 AND work.local_relpath = ?2 AND work.op_depth > 0 " \
+ "LIMIT 1 " \
+ ""
+
+#define STMT_SELECT_DELETION_INFO_SCAN 49
+#define STMT_49_INFO {"STMT_SELECT_DELETION_INFO_SCAN", NULL}
+#define STMT_49 \
+ "SELECT (SELECT b.presence FROM nodes AS b " \
+ " WHERE b.wc_id = ?1 AND b.local_relpath = ?2 AND b.op_depth = 0), " \
+ " work.presence, work.op_depth, moved.moved_to " \
+ "FROM nodes_current AS work " \
+ "LEFT OUTER JOIN nodes AS moved " \
+ " ON moved.wc_id = work.wc_id " \
+ " AND moved.local_relpath = work.local_relpath " \
+ " AND moved.moved_to IS NOT NULL " \
+ "WHERE work.wc_id = ?1 AND work.local_relpath = ?2 AND work.op_depth > 0 " \
+ "LIMIT 1 " \
+ ""
+
+#define STMT_SELECT_MOVED_TO_NODE 50
+#define STMT_50_INFO {"STMT_SELECT_MOVED_TO_NODE", NULL}
+#define STMT_50 \
+ "SELECT op_depth, moved_to " \
+ "FROM nodes " \
+ "WHERE wc_id = ?1 AND local_relpath = ?2 AND moved_to IS NOT NULL " \
+ "ORDER BY op_depth DESC " \
+ ""
+
+#define STMT_SELECT_OP_DEPTH_MOVED_TO 51
+#define STMT_51_INFO {"STMT_SELECT_OP_DEPTH_MOVED_TO", NULL}
+#define STMT_51 \
+ "SELECT op_depth, moved_to, repos_path, revision " \
+ "FROM nodes " \
+ "WHERE wc_id = ?1 AND local_relpath = ?2 " \
+ " AND op_depth <= (SELECT MIN(op_depth) FROM nodes " \
+ " WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3) " \
+ "ORDER BY op_depth DESC " \
+ ""
+
+#define STMT_SELECT_MOVED_TO 52
+#define STMT_52_INFO {"STMT_SELECT_MOVED_TO", NULL}
+#define STMT_52 \
+ "SELECT moved_to " \
+ "FROM nodes " \
+ "WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 " \
+ ""
+
+#define STMT_SELECT_MOVED_HERE 53
+#define STMT_53_INFO {"STMT_SELECT_MOVED_HERE", NULL}
+#define STMT_53 \
+ "SELECT moved_here, presence, repos_path, revision " \
+ "FROM nodes " \
+ "WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth >= ?3 " \
+ "ORDER BY op_depth " \
+ ""
+
+#define STMT_SELECT_MOVED_BACK 54
+#define STMT_54_INFO {"STMT_SELECT_MOVED_BACK", NULL}
+#define STMT_54 \
+ "SELECT u.local_relpath, " \
+ " u.presence, u.repos_id, u.repos_path, u.revision, " \
+ " l.presence, l.repos_id, l.repos_path, l.revision, " \
+ " u.moved_here, u.moved_to " \
+ "FROM nodes u " \
+ "LEFT OUTER JOIN nodes l ON l.wc_id = ?1 " \
+ " AND l.local_relpath = u.local_relpath " \
+ " AND l.op_depth = ?3 " \
+ "WHERE u.wc_id = ?1 " \
+ " AND u.local_relpath = ?2 " \
+ " AND u.op_depth = ?4 " \
+ "UNION ALL " \
+ "SELECT u.local_relpath, " \
+ " u.presence, u.repos_id, u.repos_path, u.revision, " \
+ " l.presence, l.repos_id, l.repos_path, l.revision, " \
+ " u.moved_here, NULL " \
+ "FROM nodes u " \
+ "LEFT OUTER JOIN nodes l ON l.wc_id=?1 " \
+ " AND l.local_relpath=u.local_relpath " \
+ " AND l.op_depth=?3 " \
+ "WHERE u.wc_id = ?1 " \
+ " AND (((u.local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((u.local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ " AND u.op_depth = ?4 " \
+ ""
+
+#define STMT_DELETE_MOVED_BACK 55
+#define STMT_55_INFO {"STMT_DELETE_MOVED_BACK", NULL}
+#define STMT_55 \
+ "DELETE FROM nodes " \
+ "WHERE wc_id = ?1 " \
+ " AND (local_relpath = ?2 " \
+ " OR (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
+ " AND op_depth = ?3 " \
+ ""
+
+#define STMT_DELETE_LOCK 56
+#define STMT_56_INFO {"STMT_DELETE_LOCK", NULL}
+#define STMT_56 \
"DELETE FROM lock " \
"WHERE repos_id = ?1 AND repos_relpath = ?2 " \
""
-#define STMT_CLEAR_BASE_NODE_RECURSIVE_DAV_CACHE 40
-#define STMT_40 \
+#define STMT_DELETE_LOCK_RECURSIVELY 57
+#define STMT_57_INFO {"STMT_DELETE_LOCK_RECURSIVELY", NULL}
+#define STMT_57 \
+ "DELETE FROM lock " \
+ "WHERE repos_id = ?1 AND (repos_relpath = ?2 OR (((repos_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((repos_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
+ ""
+
+#define STMT_CLEAR_BASE_NODE_RECURSIVE_DAV_CACHE 58
+#define STMT_58_INFO {"STMT_CLEAR_BASE_NODE_RECURSIVE_DAV_CACHE", NULL}
+#define STMT_58 \
"UPDATE nodes SET dav_cache = NULL " \
"WHERE dav_cache IS NOT NULL AND wc_id = ?1 AND op_depth = 0 " \
- " AND (?2 = '' " \
- " OR local_relpath = ?2 " \
- " OR ((local_relpath) > (?2) || '/' AND (local_relpath) < (?2) || '0') ) " \
+ " AND (local_relpath = ?2 " \
+ " OR (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
""
-#define STMT_RECURSIVE_UPDATE_NODE_REPO 41
-#define STMT_41 \
+#define STMT_RECURSIVE_UPDATE_NODE_REPO 59
+#define STMT_59_INFO {"STMT_RECURSIVE_UPDATE_NODE_REPO", NULL}
+#define STMT_59 \
"UPDATE nodes SET repos_id = ?4, dav_cache = NULL " \
- "WHERE wc_id = ?1 " \
- " AND repos_id = ?3 " \
- " AND (?2 = '' " \
- " OR local_relpath = ?2 " \
- " OR ((local_relpath) > (?2) || '/' AND (local_relpath) < (?2) || '0') ) " \
+ "WHERE (wc_id = ?1 AND local_relpath = ?2 AND repos_id = ?3) " \
+ " OR (wc_id = ?1 AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ " AND repos_id = ?3) " \
""
-#define STMT_UPDATE_LOCK_REPOS_ID 42
-#define STMT_42 \
+#define STMT_UPDATE_LOCK_REPOS_ID 60
+#define STMT_60_INFO {"STMT_UPDATE_LOCK_REPOS_ID", NULL}
+#define STMT_60 \
"UPDATE lock SET repos_id = ?2 " \
"WHERE repos_id = ?1 " \
""
-#define STMT_UPDATE_NODE_FILEINFO 43
-#define STMT_43 \
+#define STMT_UPDATE_NODE_FILEINFO 61
+#define STMT_61_INFO {"STMT_UPDATE_NODE_FILEINFO", NULL}
+#define STMT_61 \
"UPDATE nodes SET translated_size = ?3, last_mod_time = ?4 " \
"WHERE wc_id = ?1 AND local_relpath = ?2 " \
" AND op_depth = (SELECT MAX(op_depth) FROM nodes " \
" WHERE wc_id = ?1 AND local_relpath = ?2) " \
""
-#define STMT_UPDATE_ACTUAL_TREE_CONFLICTS 44
-#define STMT_44 \
- "UPDATE actual_node SET tree_conflict_data = ?3 " \
- "WHERE wc_id = ?1 AND local_relpath = ?2 " \
- ""
-
-#define STMT_INSERT_ACTUAL_TREE_CONFLICTS 45
-#define STMT_45 \
- "INSERT INTO actual_node ( " \
- " wc_id, local_relpath, tree_conflict_data, parent_relpath) " \
+#define STMT_INSERT_ACTUAL_CONFLICT 62
+#define STMT_62_INFO {"STMT_INSERT_ACTUAL_CONFLICT", NULL}
+#define STMT_62 \
+ "INSERT INTO actual_node (wc_id, local_relpath, conflict_data, parent_relpath) " \
"VALUES (?1, ?2, ?3, ?4) " \
""
-#define STMT_UPDATE_ACTUAL_TEXT_CONFLICTS 46
-#define STMT_46 \
- "UPDATE actual_node SET conflict_old = ?3, conflict_new = ?4, " \
- " conflict_working = ?5 " \
- "WHERE wc_id = ?1 AND local_relpath = ?2 " \
- ""
-
-#define STMT_INSERT_ACTUAL_TEXT_CONFLICTS 47
-#define STMT_47 \
- "INSERT INTO actual_node ( " \
- " wc_id, local_relpath, conflict_old, conflict_new, conflict_working, " \
- " parent_relpath) " \
- "VALUES (?1, ?2, ?3, ?4, ?5, ?6) " \
- ""
-
-#define STMT_UPDATE_ACTUAL_PROPERTY_CONFLICTS 48
-#define STMT_48 \
- "UPDATE actual_node SET prop_reject = ?3 " \
+#define STMT_UPDATE_ACTUAL_CONFLICT 63
+#define STMT_63_INFO {"STMT_UPDATE_ACTUAL_CONFLICT", NULL}
+#define STMT_63 \
+ "UPDATE actual_node SET conflict_data = ?3 " \
"WHERE wc_id = ?1 AND local_relpath = ?2 " \
""
-#define STMT_INSERT_ACTUAL_PROPERTY_CONFLICTS 49
-#define STMT_49 \
- "INSERT INTO actual_node ( " \
- " wc_id, local_relpath, prop_reject, parent_relpath) " \
- "VALUES (?1, ?2, ?3, ?4) " \
- ""
-
-#define STMT_UPDATE_ACTUAL_CHANGELISTS 50
-#define STMT_50 \
- "UPDATE actual_node SET changelist = ?2 " \
- "WHERE wc_id = ?1 AND local_relpath IN " \
- "(SELECT local_relpath FROM targets_list WHERE kind = 'file' AND wc_id = ?1) " \
+#define STMT_UPDATE_ACTUAL_CHANGELISTS 64
+#define STMT_64_INFO {"STMT_UPDATE_ACTUAL_CHANGELISTS", NULL}
+#define STMT_64 \
+ "UPDATE actual_node SET changelist = ?3 " \
+ "WHERE wc_id = ?1 " \
+ " AND (local_relpath = ?2 OR (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
+ " AND local_relpath = (SELECT local_relpath FROM targets_list AS t " \
+ " WHERE wc_id = ?1 " \
+ " AND t.local_relpath = actual_node.local_relpath " \
+ " AND kind = 'file') " \
""
-#define STMT_UPDATE_ACTUAL_CLEAR_CHANGELIST 51
-#define STMT_51 \
+#define STMT_UPDATE_ACTUAL_CLEAR_CHANGELIST 65
+#define STMT_65_INFO {"STMT_UPDATE_ACTUAL_CLEAR_CHANGELIST", NULL}
+#define STMT_65 \
"UPDATE actual_node SET changelist = NULL " \
" WHERE wc_id = ?1 AND local_relpath = ?2 " \
""
-#define STMT_MARK_SKIPPED_CHANGELIST_DIRS 52
-#define STMT_52 \
+#define STMT_MARK_SKIPPED_CHANGELIST_DIRS 66
+#define STMT_66_INFO {"STMT_MARK_SKIPPED_CHANGELIST_DIRS", NULL}
+#define STMT_66 \
"INSERT INTO changelist_list (wc_id, local_relpath, notify, changelist) " \
- "SELECT wc_id, local_relpath, 7, ?1 FROM targets_list WHERE kind = 'dir' " \
+ "SELECT wc_id, local_relpath, 7, ?3 " \
+ "FROM targets_list " \
+ "WHERE wc_id = ?1 " \
+ " AND (local_relpath = ?2 OR (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
+ " AND kind = 'dir' " \
""
-#define STMT_RESET_ACTUAL_WITH_CHANGELIST 53
-#define STMT_53 \
+#define STMT_RESET_ACTUAL_WITH_CHANGELIST 67
+#define STMT_67_INFO {"STMT_RESET_ACTUAL_WITH_CHANGELIST", NULL}
+#define STMT_67 \
"REPLACE INTO actual_node ( " \
" wc_id, local_relpath, parent_relpath, changelist) " \
"VALUES (?1, ?2, ?3, ?4) " \
""
-#define STMT_CREATE_CHANGELIST_LIST 54
-#define STMT_54 \
+#define STMT_CREATE_CHANGELIST_LIST 68
+#define STMT_68_INFO {"STMT_CREATE_CHANGELIST_LIST", NULL}
+#define STMT_68 \
"DROP TABLE IF EXISTS changelist_list; " \
"CREATE TEMPORARY TABLE changelist_list ( " \
" wc_id INTEGER NOT NULL, " \
" local_relpath TEXT NOT NULL, " \
- " notify INTEGER, " \
- " changelist TEXT NOT NULL " \
- " ); " \
- "CREATE INDEX changelist_list_index ON changelist_list(wc_id, local_relpath); " \
- "DROP TRIGGER IF EXISTS trigger_changelist_list_actual_cl_insert; " \
- "CREATE TEMPORARY TRIGGER trigger_changelist_list_actual_cl_insert " \
- "BEFORE INSERT ON actual_node " \
- "BEGIN " \
- " INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist) " \
- " VALUES (NEW.wc_id, NEW.local_relpath, 26, NEW.changelist); " \
- "END; " \
- "DROP TRIGGER IF EXISTS trigger_changelist_list_actual_cl_clear; " \
- "CREATE TEMPORARY TRIGGER trigger_changelist_list_actual_cl_clear " \
- "BEFORE UPDATE ON actual_node " \
- "WHEN OLD.changelist IS NOT NULL AND " \
- " (OLD.changelist != NEW.changelist OR NEW.changelist IS NULL) " \
- "BEGIN " \
- " INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist) " \
- " VALUES (OLD.wc_id, OLD.local_relpath, 27, OLD.changelist); " \
- "END; " \
- "DROP TRIGGER IF EXISTS trigger_changelist_list_actual_cl_set; " \
- "CREATE TEMPORARY TRIGGER trigger_changelist_list_actual_cl_set " \
+ " notify INTEGER NOT NULL, " \
+ " changelist TEXT NOT NULL, " \
+ " PRIMARY KEY (wc_id, local_relpath, notify DESC) " \
+ ") " \
+ ""
+
+#define STMT_CREATE_CHANGELIST_TRIGGER 69
+#define STMT_69_INFO {"STMT_CREATE_CHANGELIST_TRIGGER", NULL}
+#define STMT_69 \
+ "DROP TRIGGER IF EXISTS trigger_changelist_list_change; " \
+ "CREATE TEMPORARY TRIGGER trigger_changelist_list_change " \
"BEFORE UPDATE ON actual_node " \
- "WHEN NEW.CHANGELIST IS NOT NULL AND " \
- " (OLD.changelist != NEW.changelist OR OLD.changelist IS NULL) " \
+ "WHEN old.changelist IS NOT new.changelist " \
"BEGIN " \
- " INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist) " \
- " VALUES (NEW.wc_id, NEW.local_relpath, 26, NEW.changelist); " \
+ " INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist) " \
+ " SELECT old.wc_id, old.local_relpath, 27, old.changelist " \
+ " WHERE old.changelist is NOT NULL; " \
+ " INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist) " \
+ " SELECT new.wc_id, new.local_relpath, 26, new.changelist " \
+ " WHERE new.changelist IS NOT NULL; " \
"END " \
""
-#define STMT_INSERT_CHANGELIST_LIST 55
-#define STMT_55 \
- "INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist) " \
- "VALUES (?1, ?2, ?3, ?4) " \
- ""
-
-#define STMT_FINALIZE_CHANGELIST 56
-#define STMT_56 \
- "DROP TRIGGER IF EXISTS trigger_changelist_list_actual_cl_insert; " \
- "DROP TRIGGER IF EXISTS trigger_changelist_list_actual_cl_set; " \
- "DROP TRIGGER IF EXISTS trigger_changelist_list_actual_cl_clear; " \
- "DROP TABLE IF EXISTS changelist_list; " \
- "DROP TABLE IF EXISTS targets_list " \
+#define STMT_FINALIZE_CHANGELIST 70
+#define STMT_70_INFO {"STMT_FINALIZE_CHANGELIST", NULL}
+#define STMT_70 \
+ "DROP TRIGGER trigger_changelist_list_change; " \
+ "DROP TABLE changelist_list; " \
+ "DROP TABLE targets_list " \
""
-#define STMT_SELECT_CHANGELIST_LIST 57
-#define STMT_57 \
+#define STMT_SELECT_CHANGELIST_LIST 71
+#define STMT_71_INFO {"STMT_SELECT_CHANGELIST_LIST", NULL}
+#define STMT_71 \
"SELECT wc_id, local_relpath, notify, changelist " \
"FROM changelist_list " \
- "ORDER BY wc_id, local_relpath " \
+ "ORDER BY wc_id, local_relpath ASC, notify DESC " \
""
-#define STMT_CREATE_TARGETS_LIST 58
-#define STMT_58 \
+#define STMT_CREATE_TARGETS_LIST 72
+#define STMT_72_INFO {"STMT_CREATE_TARGETS_LIST", NULL}
+#define STMT_72 \
"DROP TABLE IF EXISTS targets_list; " \
"CREATE TEMPORARY TABLE targets_list ( " \
" wc_id INTEGER NOT NULL, " \
" local_relpath TEXT NOT NULL, " \
" parent_relpath TEXT, " \
- " kind TEXT NOT NULL " \
+ " kind TEXT NOT NULL, " \
+ " PRIMARY KEY (wc_id, local_relpath) " \
" ); " \
- "CREATE INDEX targets_list_kind " \
- " ON targets_list (kind) " \
""
-#define STMT_DROP_TARGETS_LIST 59
-#define STMT_59 \
- "DROP TABLE IF EXISTS targets_list " \
+#define STMT_DROP_TARGETS_LIST 73
+#define STMT_73_INFO {"STMT_DROP_TARGETS_LIST", NULL}
+#define STMT_73 \
+ "DROP TABLE targets_list " \
""
-#define STMT_INSERT_TARGET 60
-#define STMT_60 \
+#define STMT_INSERT_TARGET 74
+#define STMT_74_INFO {"STMT_INSERT_TARGET", NULL}
+#define STMT_74 \
"INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) " \
"SELECT wc_id, local_relpath, parent_relpath, kind " \
- "FROM nodes_current WHERE wc_id = ?1 AND local_relpath = ?2 " \
+ "FROM nodes_current " \
+ "WHERE wc_id = ?1 " \
+ " AND local_relpath = ?2 " \
""
-#define STMT_INSERT_TARGET_DEPTH_FILES 61
-#define STMT_61 \
+#define STMT_INSERT_TARGET_DEPTH_FILES 75
+#define STMT_75_INFO {"STMT_INSERT_TARGET_DEPTH_FILES", NULL}
+#define STMT_75 \
"INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) " \
"SELECT wc_id, local_relpath, parent_relpath, kind " \
"FROM nodes_current " \
- "WHERE wc_id = ?1 AND ((parent_relpath = ?2 AND kind = 'file') " \
- " OR local_relpath = ?2) " \
+ "WHERE wc_id = ?1 " \
+ " AND parent_relpath = ?2 " \
+ " AND kind = 'file' " \
""
-#define STMT_INSERT_TARGET_DEPTH_IMMEDIATES 62
-#define STMT_62 \
+#define STMT_INSERT_TARGET_DEPTH_IMMEDIATES 76
+#define STMT_76_INFO {"STMT_INSERT_TARGET_DEPTH_IMMEDIATES", NULL}
+#define STMT_76 \
"INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) " \
"SELECT wc_id, local_relpath, parent_relpath, kind " \
"FROM nodes_current " \
- "WHERE wc_id = ?1 AND (parent_relpath = ?2 OR local_relpath = ?2) " \
+ "WHERE wc_id = ?1 " \
+ " AND parent_relpath = ?2 " \
""
-#define STMT_INSERT_TARGET_DEPTH_INFINITY 63
-#define STMT_63 \
+#define STMT_INSERT_TARGET_DEPTH_INFINITY 77
+#define STMT_77_INFO {"STMT_INSERT_TARGET_DEPTH_INFINITY", NULL}
+#define STMT_77 \
"INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) " \
"SELECT wc_id, local_relpath, parent_relpath, kind " \
"FROM nodes_current " \
"WHERE wc_id = ?1 " \
- " AND (?2 = '' " \
- " OR local_relpath = ?2 " \
- " OR ((local_relpath) > (?2) || '/' AND (local_relpath) < (?2) || '0') ) " \
+ " AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
""
-#define STMT_INSERT_TARGET_WITH_CHANGELIST 64
-#define STMT_64 \
+#define STMT_INSERT_TARGET_WITH_CHANGELIST 78
+#define STMT_78_INFO {"STMT_INSERT_TARGET_WITH_CHANGELIST", NULL}
+#define STMT_78 \
"INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) " \
"SELECT N.wc_id, N.local_relpath, N.parent_relpath, N.kind " \
" FROM actual_node AS A JOIN nodes_current AS N " \
" ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath " \
- " WHERE N.wc_id = ?1 AND A.changelist = ?3 AND N.local_relpath = ?2 " \
+ " WHERE N.wc_id = ?1 " \
+ " AND N.local_relpath = ?2 " \
+ " AND A.changelist = ?3 " \
""
-#define STMT_INSERT_TARGET_WITH_CHANGELIST_DEPTH_FILES 65
-#define STMT_65 \
+#define STMT_INSERT_TARGET_WITH_CHANGELIST_DEPTH_FILES 79
+#define STMT_79_INFO {"STMT_INSERT_TARGET_WITH_CHANGELIST_DEPTH_FILES", NULL}
+#define STMT_79 \
"INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) " \
"SELECT N.wc_id, N.local_relpath, N.parent_relpath, N.kind " \
" FROM actual_node AS A JOIN nodes_current AS N " \
" ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath " \
- " WHERE N.wc_id = ?1 AND A.changelist = ?3 " \
- " AND ((N.parent_relpath = ?2 AND kind = 'file') OR N.local_relpath = ?2) " \
+ " WHERE N.wc_id = ?1 " \
+ " AND N.parent_relpath = ?2 " \
+ " AND kind = 'file' " \
+ " AND A.changelist = ?3 " \
""
-#define STMT_INSERT_TARGET_WITH_CHANGELIST_DEPTH_IMMEDIATES 66
-#define STMT_66 \
+#define STMT_INSERT_TARGET_WITH_CHANGELIST_DEPTH_IMMEDIATES 80
+#define STMT_80_INFO {"STMT_INSERT_TARGET_WITH_CHANGELIST_DEPTH_IMMEDIATES", NULL}
+#define STMT_80 \
"INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) " \
"SELECT N.wc_id, N.local_relpath, N.parent_relpath, N.kind " \
" FROM actual_node AS A JOIN nodes_current AS N " \
" ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath " \
- " WHERE N.wc_id = ?1 AND A.changelist = ?3 " \
- " AND (N.parent_relpath = ?2 OR N.local_relpath = ?2) " \
+ " WHERE N.wc_id = ?1 " \
+ " AND N.parent_relpath = ?2 " \
+ " AND A.changelist = ?3 " \
""
-#define STMT_INSERT_TARGET_WITH_CHANGELIST_DEPTH_INFINITY 67
-#define STMT_67 \
+#define STMT_INSERT_TARGET_WITH_CHANGELIST_DEPTH_INFINITY 81
+#define STMT_81_INFO {"STMT_INSERT_TARGET_WITH_CHANGELIST_DEPTH_INFINITY", NULL}
+#define STMT_81 \
"INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) " \
"SELECT N.wc_id, N.local_relpath, N.parent_relpath, N.kind " \
" FROM actual_node AS A JOIN nodes_current AS N " \
" ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath " \
" WHERE N.wc_id = ?1 " \
- " AND (?2 = '' " \
- " OR N.local_relpath = ?2 " \
- " OR ((N.local_relpath) > (?2) || '/' AND (N.local_relpath) < (?2) || '0') ) " \
- " AND A.changelist = ?3 " \
- ""
-
-#define STMT_SELECT_TARGETS 68
-#define STMT_68 \
- "SELECT local_relpath, parent_relpath from targets_list " \
+ " AND (((N.local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((N.local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ " AND A.changelist = ?3 " \
""
-#define STMT_INSERT_ACTUAL_EMPTIES 69
-#define STMT_69 \
+#define STMT_INSERT_ACTUAL_EMPTIES 82
+#define STMT_82_INFO {"STMT_INSERT_ACTUAL_EMPTIES", NULL}
+#define STMT_82 \
"INSERT OR IGNORE INTO actual_node ( " \
- " wc_id, local_relpath, parent_relpath, properties, " \
- " conflict_old, conflict_new, conflict_working, " \
- " prop_reject, changelist, text_mod, tree_conflict_data ) " \
- "SELECT wc_id, local_relpath, parent_relpath, NULL, NULL, NULL, NULL, " \
- " NULL, NULL, NULL, NULL " \
+ " wc_id, local_relpath, parent_relpath) " \
+ "SELECT wc_id, local_relpath, parent_relpath " \
"FROM targets_list " \
""
-#define STMT_DELETE_ACTUAL_EMPTY 70
-#define STMT_70 \
+#define STMT_DELETE_ACTUAL_EMPTY 83
+#define STMT_83_INFO {"STMT_DELETE_ACTUAL_EMPTY", NULL}
+#define STMT_83 \
"DELETE FROM actual_node " \
"WHERE wc_id = ?1 AND local_relpath = ?2 " \
" AND properties IS NULL " \
- " AND conflict_old IS NULL " \
- " AND conflict_new IS NULL " \
- " AND prop_reject IS NULL " \
+ " AND conflict_data IS NULL " \
" AND changelist IS NULL " \
" AND text_mod IS NULL " \
- " AND tree_conflict_data IS NULL " \
" AND older_checksum IS NULL " \
" AND right_checksum IS NULL " \
" AND left_checksum IS NULL " \
""
-#define STMT_DELETE_ACTUAL_EMPTIES 71
-#define STMT_71 \
+#define STMT_DELETE_ACTUAL_EMPTIES 84
+#define STMT_84_INFO {"STMT_DELETE_ACTUAL_EMPTIES", NULL}
+#define STMT_84 \
"DELETE FROM actual_node " \
"WHERE wc_id = ?1 " \
+ " AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
" AND properties IS NULL " \
- " AND conflict_old IS NULL " \
- " AND conflict_new IS NULL " \
- " AND prop_reject IS NULL " \
+ " AND conflict_data IS NULL " \
" AND changelist IS NULL " \
" AND text_mod IS NULL " \
- " AND tree_conflict_data IS NULL " \
" AND older_checksum IS NULL " \
" AND right_checksum IS NULL " \
" AND left_checksum IS NULL " \
""
-#define STMT_DELETE_BASE_NODE 72
-#define STMT_72 \
+#define STMT_DELETE_BASE_NODE 85
+#define STMT_85_INFO {"STMT_DELETE_BASE_NODE", NULL}
+#define STMT_85 \
"DELETE FROM nodes " \
"WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 " \
""
-#define STMT_DELETE_WORKING_NODE 73
-#define STMT_73 \
+#define STMT_DELETE_WORKING_NODE 86
+#define STMT_86_INFO {"STMT_DELETE_WORKING_NODE", NULL}
+#define STMT_86 \
"DELETE FROM nodes " \
"WHERE wc_id = ?1 AND local_relpath = ?2 " \
" AND op_depth = (SELECT MAX(op_depth) FROM nodes " \
" WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > 0) " \
""
-#define STMT_DELETE_LOWEST_WORKING_NODE 74
-#define STMT_74 \
+#define STMT_DELETE_LOWEST_WORKING_NODE 87
+#define STMT_87_INFO {"STMT_DELETE_LOWEST_WORKING_NODE", NULL}
+#define STMT_87 \
"DELETE FROM nodes " \
"WHERE wc_id = ?1 AND local_relpath = ?2 " \
" AND op_depth = (SELECT MIN(op_depth) FROM nodes " \
- " WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > 0) " \
+ " WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3) " \
" AND presence = 'base-deleted' " \
""
-#define STMT_DELETE_ALL_LAYERS 75
-#define STMT_75 \
+#define STMT_DELETE_NODE_ALL_LAYERS 88
+#define STMT_88_INFO {"STMT_DELETE_NODE_ALL_LAYERS", NULL}
+#define STMT_88 \
"DELETE FROM nodes " \
"WHERE wc_id = ?1 AND local_relpath = ?2 " \
""
-#define STMT_DELETE_NODES_RECURSIVE 76
-#define STMT_76 \
+#define STMT_DELETE_NODES_ABOVE_DEPTH_RECURSIVE 89
+#define STMT_89_INFO {"STMT_DELETE_NODES_ABOVE_DEPTH_RECURSIVE", NULL}
+#define STMT_89 \
"DELETE FROM nodes " \
"WHERE wc_id = ?1 " \
- " AND (?2 = '' " \
- " OR local_relpath = ?2 " \
- " OR ((local_relpath) > (?2) || '/' AND (local_relpath) < (?2) || '0') ) " \
+ " AND (local_relpath = ?2 " \
+ " OR (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
" AND op_depth >= ?3 " \
""
-#define STMT_DELETE_ACTUAL_NODE 77
-#define STMT_77 \
+#define STMT_DELETE_ACTUAL_NODE 90
+#define STMT_90_INFO {"STMT_DELETE_ACTUAL_NODE", NULL}
+#define STMT_90 \
"DELETE FROM actual_node " \
"WHERE wc_id = ?1 AND local_relpath = ?2 " \
""
-#define STMT_DELETE_ACTUAL_NODE_RECURSIVE 78
-#define STMT_78 \
+#define STMT_DELETE_ACTUAL_NODE_RECURSIVE 91
+#define STMT_91_INFO {"STMT_DELETE_ACTUAL_NODE_RECURSIVE", NULL}
+#define STMT_91 \
"DELETE FROM actual_node " \
"WHERE wc_id = ?1 " \
- " AND (?2 = '' " \
- " OR local_relpath = ?2 " \
- " OR ((local_relpath) > (?2) || '/' AND (local_relpath) < (?2) || '0') ) " \
- ""
-
-#define STMT_DELETE_ACTUAL_NODE_WITHOUT_CONFLICT 79
-#define STMT_79 \
- "DELETE FROM actual_node " \
- "WHERE wc_id = ?1 AND local_relpath = ?2 " \
- " AND tree_conflict_data IS NULL " \
+ " AND (local_relpath = ?2 " \
+ " OR (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
""
-#define STMT_DELETE_ACTUAL_NODE_LEAVING_CHANGELIST 80
-#define STMT_80 \
+#define STMT_DELETE_ACTUAL_NODE_LEAVING_CHANGELIST 92
+#define STMT_92_INFO {"STMT_DELETE_ACTUAL_NODE_LEAVING_CHANGELIST", NULL}
+#define STMT_92 \
"DELETE FROM actual_node " \
"WHERE wc_id = ?1 " \
" AND local_relpath = ?2 " \
@@ -709,13 +955,13 @@
" AND c.kind = 'file')) " \
""
-#define STMT_DELETE_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE 81
-#define STMT_81 \
+#define STMT_DELETE_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE 93
+#define STMT_93_INFO {"STMT_DELETE_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE", NULL}
+#define STMT_93 \
"DELETE FROM actual_node " \
"WHERE wc_id = ?1 " \
- " AND (?2 = '' " \
- " OR local_relpath = ?2 " \
- " OR ((local_relpath) > (?2) || '/' AND (local_relpath) < (?2) || '0') ) " \
+ " AND (local_relpath = ?2 " \
+ " OR (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
" AND (changelist IS NULL " \
" OR NOT EXISTS (SELECT 1 FROM nodes_current c " \
" WHERE c.wc_id = ?1 " \
@@ -723,211 +969,211 @@
" AND c.kind = 'file')) " \
""
-#define STMT_CLEAR_ACTUAL_NODE_LEAVING_CHANGELIST 82
-#define STMT_82 \
+#define STMT_CLEAR_ACTUAL_NODE_LEAVING_CHANGELIST 94
+#define STMT_94_INFO {"STMT_CLEAR_ACTUAL_NODE_LEAVING_CHANGELIST", NULL}
+#define STMT_94 \
"UPDATE actual_node " \
"SET properties = NULL, " \
" text_mod = NULL, " \
+ " conflict_data = NULL, " \
" tree_conflict_data = NULL, " \
- " conflict_old = NULL, " \
- " conflict_new = NULL, " \
- " conflict_working = NULL, " \
- " prop_reject = NULL, " \
" older_checksum = NULL, " \
" left_checksum = NULL, " \
" right_checksum = NULL " \
"WHERE wc_id = ?1 AND local_relpath = ?2 " \
""
-#define STMT_CLEAR_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE 83
-#define STMT_83 \
+#define STMT_CLEAR_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE 95
+#define STMT_95_INFO {"STMT_CLEAR_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE", NULL}
+#define STMT_95 \
"UPDATE actual_node " \
"SET properties = NULL, " \
" text_mod = NULL, " \
+ " conflict_data = NULL, " \
" tree_conflict_data = NULL, " \
- " conflict_old = NULL, " \
- " conflict_new = NULL, " \
- " conflict_working = NULL, " \
- " prop_reject = NULL, " \
" older_checksum = NULL, " \
" left_checksum = NULL, " \
" right_checksum = NULL " \
"WHERE wc_id = ?1 " \
- " AND (?2 = '' " \
- " OR local_relpath = ?2 " \
- " OR ((local_relpath) > (?2) || '/' AND (local_relpath) < (?2) || '0') ) " \
+ " AND (local_relpath = ?2 " \
+ " OR (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
""
-#define STMT_UPDATE_NODE_BASE_DEPTH 84
-#define STMT_84 \
+#define STMT_UPDATE_NODE_BASE_DEPTH 96
+#define STMT_96_INFO {"STMT_UPDATE_NODE_BASE_DEPTH", NULL}
+#define STMT_96 \
"UPDATE nodes SET depth = ?3 " \
"WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 " \
" AND kind='dir' " \
""
-#define STMT_UPDATE_NODE_BASE_PRESENCE 85
-#define STMT_85 \
+#define STMT_UPDATE_NODE_BASE_PRESENCE 97
+#define STMT_97_INFO {"STMT_UPDATE_NODE_BASE_PRESENCE", NULL}
+#define STMT_97 \
"UPDATE nodes SET presence = ?3 " \
"WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 " \
""
-#define STMT_UPDATE_BASE_NODE_PRESENCE_REVNUM_AND_REPOS_PATH 86
-#define STMT_86 \
+#define STMT_UPDATE_BASE_NODE_PRESENCE_REVNUM_AND_REPOS_PATH 98
+#define STMT_98_INFO {"STMT_UPDATE_BASE_NODE_PRESENCE_REVNUM_AND_REPOS_PATH", NULL}
+#define STMT_98 \
"UPDATE nodes SET presence = ?3, revision = ?4, repos_path = ?5 " \
"WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 " \
""
-#define STMT_LOOK_FOR_WORK 87
-#define STMT_87 \
+#define STMT_LOOK_FOR_WORK 99
+#define STMT_99_INFO {"STMT_LOOK_FOR_WORK", NULL}
+#define STMT_99 \
"SELECT id FROM work_queue LIMIT 1 " \
""
-#define STMT_INSERT_WORK_ITEM 88
-#define STMT_88 \
+#define STMT_INSERT_WORK_ITEM 100
+#define STMT_100_INFO {"STMT_INSERT_WORK_ITEM", NULL}
+#define STMT_100 \
"INSERT INTO work_queue (work) VALUES (?1) " \
""
-#define STMT_SELECT_WORK_ITEM 89
-#define STMT_89 \
+#define STMT_SELECT_WORK_ITEM 101
+#define STMT_101_INFO {"STMT_SELECT_WORK_ITEM", NULL}
+#define STMT_101 \
"SELECT id, work FROM work_queue ORDER BY id LIMIT 1 " \
""
-#define STMT_DELETE_WORK_ITEM 90
-#define STMT_90 \
+#define STMT_DELETE_WORK_ITEM 102
+#define STMT_102_INFO {"STMT_DELETE_WORK_ITEM", NULL}
+#define STMT_102 \
"DELETE FROM work_queue WHERE id = ?1 " \
""
-#define STMT_INSERT_OR_IGNORE_PRISTINE 91
-#define STMT_91 \
+#define STMT_INSERT_OR_IGNORE_PRISTINE 103
+#define STMT_103_INFO {"STMT_INSERT_OR_IGNORE_PRISTINE", NULL}
+#define STMT_103 \
"INSERT OR IGNORE INTO pristine (checksum, md5_checksum, size, refcount) " \
"VALUES (?1, ?2, ?3, 0) " \
""
-#define STMT_INSERT_PRISTINE 92
-#define STMT_92 \
+#define STMT_INSERT_PRISTINE 104
+#define STMT_104_INFO {"STMT_INSERT_PRISTINE", NULL}
+#define STMT_104 \
"INSERT INTO pristine (checksum, md5_checksum, size, refcount) " \
"VALUES (?1, ?2, ?3, 0) " \
""
-#define STMT_SELECT_PRISTINE 93
-#define STMT_93 \
+#define STMT_SELECT_PRISTINE 105
+#define STMT_105_INFO {"STMT_SELECT_PRISTINE", NULL}
+#define STMT_105 \
"SELECT md5_checksum " \
"FROM pristine " \
"WHERE checksum = ?1 " \
""
-#define STMT_SELECT_PRISTINE_SIZE 94
-#define STMT_94 \
+#define STMT_SELECT_PRISTINE_SIZE 106
+#define STMT_106_INFO {"STMT_SELECT_PRISTINE_SIZE", NULL}
+#define STMT_106 \
"SELECT size " \
"FROM pristine " \
"WHERE checksum = ?1 LIMIT 1 " \
""
-#define STMT_SELECT_PRISTINE_BY_MD5 95
-#define STMT_95 \
+#define STMT_SELECT_PRISTINE_BY_MD5 107
+#define STMT_107_INFO {"STMT_SELECT_PRISTINE_BY_MD5", NULL}
+#define STMT_107 \
"SELECT checksum " \
"FROM pristine " \
"WHERE md5_checksum = ?1 " \
""
-#define STMT_SELECT_UNREFERENCED_PRISTINES 96
-#define STMT_96 \
+#define STMT_SELECT_UNREFERENCED_PRISTINES 108
+#define STMT_108_INFO {"STMT_SELECT_UNREFERENCED_PRISTINES", NULL}
+#define STMT_108 \
"SELECT checksum " \
"FROM pristine " \
"WHERE refcount = 0 " \
""
-#define STMT_DELETE_PRISTINE_IF_UNREFERENCED 97
-#define STMT_97 \
+#define STMT_DELETE_PRISTINE_IF_UNREFERENCED 109
+#define STMT_109_INFO {"STMT_DELETE_PRISTINE_IF_UNREFERENCED", NULL}
+#define STMT_109 \
"DELETE FROM pristine " \
"WHERE checksum = ?1 AND refcount = 0 " \
""
-#define STMT_SELECT_ACTUAL_CONFLICT_VICTIMS 98
-#define STMT_98 \
- "SELECT local_relpath " \
- "FROM actual_node " \
- "WHERE wc_id = ?1 AND parent_relpath = ?2 AND " \
- " NOT ((prop_reject IS NULL) AND (conflict_old IS NULL) " \
- " AND (conflict_new IS NULL) AND (conflict_working IS NULL) " \
- " AND (tree_conflict_data IS NULL)) " \
- ""
-
-#define STMT_SELECT_CONFLICT_MARKER_FILES 99
-#define STMT_99 \
- "SELECT prop_reject, conflict_old, conflict_new, conflict_working " \
- "FROM actual_node " \
- "WHERE wc_id = ?1 AND (local_relpath = ?2 OR parent_relpath = ?2) " \
- " AND ((prop_reject IS NOT NULL) OR (conflict_old IS NOT NULL) " \
- " OR (conflict_new IS NOT NULL) OR (conflict_working IS NOT NULL)) " \
+#define STMT_SELECT_COPY_PRISTINES 110
+#define STMT_110_INFO {"STMT_SELECT_COPY_PRISTINES", NULL}
+#define STMT_110 \
+ "SELECT n.checksum, md5_checksum, size " \
+ "FROM nodes_current n " \
+ "LEFT JOIN pristine p ON n.checksum = p.checksum " \
+ "WHERE wc_id = ?1 " \
+ " AND n.local_relpath = ?2 " \
+ " AND n.checksum IS NOT NULL " \
+ "UNION ALL " \
+ "SELECT n.checksum, md5_checksum, size " \
+ "FROM nodes n " \
+ "LEFT JOIN pristine p ON n.checksum = p.checksum " \
+ "WHERE wc_id = ?1 " \
+ " AND (((n.local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((n.local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ " AND op_depth >= " \
+ " (SELECT MAX(op_depth) FROM nodes WHERE wc_id = ?1 AND local_relpath = ?2) " \
+ " AND n.checksum IS NOT NULL " \
""
-#define STMT_SELECT_ACTUAL_CHILDREN_TREE_CONFLICT 100
-#define STMT_100 \
- "SELECT local_relpath, tree_conflict_data " \
- "FROM actual_node " \
- "WHERE wc_id = ?1 AND parent_relpath = ?2 AND tree_conflict_data IS NOT NULL " \
+#define STMT_VACUUM 111
+#define STMT_111_INFO {"STMT_VACUUM", NULL}
+#define STMT_111 \
+ "VACUUM " \
""
-#define STMT_SELECT_CONFLICT_DETAILS 101
-#define STMT_101 \
- "SELECT prop_reject, conflict_old, conflict_new, conflict_working, " \
- " tree_conflict_data " \
+#define STMT_SELECT_CONFLICT_VICTIMS 112
+#define STMT_112_INFO {"STMT_SELECT_CONFLICT_VICTIMS", NULL}
+#define STMT_112 \
+ "SELECT local_relpath, conflict_data " \
"FROM actual_node " \
- "WHERE wc_id = ?1 AND local_relpath = ?2 " \
- ""
-
-#define STMT_CLEAR_TEXT_CONFLICT 102
-#define STMT_102 \
- "UPDATE actual_node SET " \
- " conflict_old = NULL, " \
- " conflict_new = NULL, " \
- " conflict_working = NULL " \
- "WHERE wc_id = ?1 AND local_relpath = ?2 " \
- ""
-
-#define STMT_CLEAR_PROPS_CONFLICT 103
-#define STMT_103 \
- "UPDATE actual_node SET " \
- " prop_reject = NULL " \
- "WHERE wc_id = ?1 AND local_relpath = ?2 " \
+ "WHERE wc_id = ?1 AND parent_relpath = ?2 AND " \
+ " NOT (conflict_data IS NULL) " \
""
-#define STMT_INSERT_WC_LOCK 104
-#define STMT_104 \
+#define STMT_INSERT_WC_LOCK 113
+#define STMT_113_INFO {"STMT_INSERT_WC_LOCK", NULL}
+#define STMT_113 \
"INSERT INTO wc_lock (wc_id, local_dir_relpath, locked_levels) " \
"VALUES (?1, ?2, ?3) " \
""
-#define STMT_SELECT_WC_LOCK 105
-#define STMT_105 \
+#define STMT_SELECT_WC_LOCK 114
+#define STMT_114_INFO {"STMT_SELECT_WC_LOCK", NULL}
+#define STMT_114 \
"SELECT locked_levels FROM wc_lock " \
"WHERE wc_id = ?1 AND local_dir_relpath = ?2 " \
""
-#define STMT_SELECT_ANCESTOR_WCLOCKS 106
-#define STMT_106 \
+#define STMT_SELECT_ANCESTOR_WCLOCKS 115
+#define STMT_115_INFO {"STMT_SELECT_ANCESTOR_WCLOCKS", NULL}
+#define STMT_115 \
"SELECT local_dir_relpath, locked_levels FROM wc_lock " \
"WHERE wc_id = ?1 " \
- " AND ((local_dir_relpath <= ?2 AND local_dir_relpath >= ?3) " \
+ " AND ((local_dir_relpath >= ?3 AND local_dir_relpath <= ?2) " \
" OR local_dir_relpath = '') " \
- "ORDER BY local_dir_relpath DESC " \
""
-#define STMT_DELETE_WC_LOCK 107
-#define STMT_107 \
+#define STMT_DELETE_WC_LOCK 116
+#define STMT_116_INFO {"STMT_DELETE_WC_LOCK", NULL}
+#define STMT_116 \
"DELETE FROM wc_lock " \
"WHERE wc_id = ?1 AND local_dir_relpath = ?2 " \
""
-#define STMT_FIND_WC_LOCK 108
-#define STMT_108 \
+#define STMT_FIND_WC_LOCK 117
+#define STMT_117_INFO {"STMT_FIND_WC_LOCK", NULL}
+#define STMT_117 \
"SELECT local_dir_relpath FROM wc_lock " \
- "WHERE wc_id = ?1 AND local_dir_relpath LIKE ?2 ESCAPE '#' " \
+ "WHERE wc_id = ?1 " \
+ " AND (((local_dir_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_dir_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
""
-#define STMT_DELETE_WC_LOCK_ORPHAN 109
-#define STMT_109 \
+#define STMT_DELETE_WC_LOCK_ORPHAN 118
+#define STMT_118_INFO {"STMT_DELETE_WC_LOCK_ORPHAN", NULL}
+#define STMT_118 \
"DELETE FROM wc_lock " \
"WHERE wc_id = ?1 AND local_dir_relpath = ?2 " \
"AND NOT EXISTS (SELECT 1 FROM nodes " \
@@ -935,46 +1181,73 @@
" AND nodes.local_relpath = wc_lock.local_dir_relpath) " \
""
-#define STMT_DELETE_WC_LOCK_ORPHAN_RECURSIVE 110
-#define STMT_110 \
+#define STMT_DELETE_WC_LOCK_ORPHAN_RECURSIVE 119
+#define STMT_119_INFO {"STMT_DELETE_WC_LOCK_ORPHAN_RECURSIVE", NULL}
+#define STMT_119 \
"DELETE FROM wc_lock " \
"WHERE wc_id = ?1 " \
- " AND (?2 = '' " \
- " OR local_dir_relpath = ?2 " \
- " OR ((local_dir_relpath) > (?2) || '/' AND (local_dir_relpath) < (?2) || '0') ) " \
+ " AND (local_dir_relpath = ?2 " \
+ " OR (((local_dir_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_dir_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
" AND NOT EXISTS (SELECT 1 FROM nodes " \
" WHERE nodes.wc_id = ?1 " \
" AND nodes.local_relpath = wc_lock.local_dir_relpath) " \
""
-#define STMT_APPLY_CHANGES_TO_BASE_NODE 111
-#define STMT_111 \
+#define STMT_APPLY_CHANGES_TO_BASE_NODE 120
+#define STMT_120_INFO {"STMT_APPLY_CHANGES_TO_BASE_NODE", NULL}
+#define STMT_120 \
"INSERT OR REPLACE INTO nodes ( " \
" wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path, " \
" revision, presence, depth, kind, changed_revision, changed_date, " \
" changed_author, checksum, properties, dav_cache, symlink_target, " \
- " file_external ) " \
+ " inherited_props, file_external ) " \
"VALUES (?1, ?2, 0, " \
- " ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, ?15, ?16, " \
+ " ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, ?15, ?16, ?17, " \
" (SELECT file_external FROM nodes " \
" WHERE wc_id = ?1 " \
" AND local_relpath = ?2 " \
" AND op_depth = 0)) " \
""
-#define STMT_INSTALL_WORKING_NODE_FOR_DELETE 112
-#define STMT_112 \
+#define STMT_INSTALL_WORKING_NODE_FOR_DELETE 121
+#define STMT_121_INFO {"STMT_INSTALL_WORKING_NODE_FOR_DELETE", NULL}
+#define STMT_121 \
"INSERT OR REPLACE INTO nodes ( " \
" wc_id, local_relpath, op_depth, " \
" parent_relpath, presence, kind) " \
- "SELECT wc_id, local_relpath, ?3 , " \
- " parent_relpath, ?4 , kind " \
- "FROM nodes " \
- "WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 " \
+ "VALUES(?1, ?2, ?3, ?4, 'base-deleted', ?5) " \
""
-#define STMT_INSERT_DELETE_FROM_NODE_RECURSIVE 113
-#define STMT_113 \
+#define STMT_DELETE_NO_LOWER_LAYER 122
+#define STMT_122_INFO {"STMT_DELETE_NO_LOWER_LAYER", NULL}
+#define STMT_122 \
+ "DELETE FROM nodes " \
+ " WHERE wc_id = ?1 " \
+ " AND (local_relpath = ?2 OR (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
+ " AND op_depth = ?3 " \
+ " AND NOT EXISTS (SELECT 1 FROM nodes n " \
+ " WHERE n.wc_id = ?1 " \
+ " AND n.local_relpath = nodes.local_relpath " \
+ " AND n.op_depth = ?4 " \
+ " AND n.presence IN ('normal', 'incomplete')) " \
+ ""
+
+#define STMT_REPLACE_WITH_BASE_DELETED 123
+#define STMT_123_INFO {"STMT_REPLACE_WITH_BASE_DELETED", NULL}
+#define STMT_123 \
+ "INSERT OR REPLACE INTO nodes (wc_id, local_relpath, op_depth, parent_relpath, " \
+ " kind, moved_to, presence) " \
+ "SELECT wc_id, local_relpath, op_depth, parent_relpath, " \
+ " kind, moved_to, 'base-deleted' " \
+ " FROM nodes " \
+ " WHERE wc_id = ?1 " \
+ " AND (local_relpath = ?2 OR (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
+ " AND op_depth = ?3 " \
+ ""
+
+#define STMT_INSERT_DELETE_FROM_NODE_RECURSIVE 124
+#define STMT_124_INFO {"STMT_INSERT_DELETE_FROM_NODE_RECURSIVE", NULL}
+#define STMT_124 \
"INSERT INTO nodes ( " \
" wc_id, local_relpath, op_depth, parent_relpath, presence, kind) " \
"SELECT wc_id, local_relpath, ?4 , parent_relpath, 'base-deleted', " \
@@ -982,13 +1255,15 @@
"FROM nodes " \
"WHERE wc_id = ?1 " \
" AND (local_relpath = ?2 " \
- " OR ((local_relpath) > (?2) || '/' AND (local_relpath) < (?2) || '0') ) " \
+ " OR (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
" AND op_depth = ?3 " \
- " AND presence NOT IN ('base-deleted', 'not-present', 'excluded', 'absent') " \
+ " AND presence NOT IN ('base-deleted', 'not-present', 'excluded', 'server-excluded') " \
+ " AND file_external IS NULL " \
""
-#define STMT_INSERT_WORKING_NODE_FROM_BASE_COPY 114
-#define STMT_114 \
+#define STMT_INSERT_WORKING_NODE_FROM_BASE_COPY 125
+#define STMT_125_INFO {"STMT_INSERT_WORKING_NODE_FROM_BASE_COPY", NULL}
+#define STMT_125 \
"INSERT INTO nodes ( " \
" wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path, " \
" revision, presence, depth, kind, changed_revision, changed_date, " \
@@ -1002,8 +1277,9 @@
"WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 " \
""
-#define STMT_INSERT_DELETE_FROM_BASE 115
-#define STMT_115 \
+#define STMT_INSERT_DELETE_FROM_BASE 126
+#define STMT_126_INFO {"STMT_INSERT_DELETE_FROM_BASE", NULL}
+#define STMT_126 \
"INSERT INTO nodes ( " \
" wc_id, local_relpath, op_depth, parent_relpath, presence, kind) " \
"SELECT wc_id, local_relpath, ?3 , parent_relpath, " \
@@ -1012,332 +1288,377 @@
"WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 " \
""
-#define STMT_UPDATE_OP_DEPTH_INCREASE_RECURSIVE 116
-#define STMT_116 \
+#define STMT_UPDATE_OP_DEPTH_INCREASE_RECURSIVE 127
+#define STMT_127_INFO {"STMT_UPDATE_OP_DEPTH_INCREASE_RECURSIVE", NULL}
+#define STMT_127 \
"UPDATE nodes SET op_depth = ?3 + 1 " \
"WHERE wc_id = ?1 " \
- " AND (?2 = '' " \
- " OR ((local_relpath) > (?2) || '/' AND (local_relpath) < (?2) || '0') ) " \
+ " AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
" AND op_depth = ?3 " \
""
-#define STMT_DOES_NODE_EXIST 117
-#define STMT_117 \
+#define STMT_UPDATE_OP_DEPTH_RECURSIVE 128
+#define STMT_128_INFO {"STMT_UPDATE_OP_DEPTH_RECURSIVE", NULL}
+#define STMT_128 \
+ "UPDATE nodes SET op_depth = ?4, moved_here = NULL " \
+ "WHERE wc_id = ?1 " \
+ " AND (local_relpath = ?2 OR (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
+ " AND op_depth = ?3 " \
+ ""
+
+#define STMT_DOES_NODE_EXIST 129
+#define STMT_129_INFO {"STMT_DOES_NODE_EXIST", NULL}
+#define STMT_129 \
"SELECT 1 FROM nodes WHERE wc_id = ?1 AND local_relpath = ?2 " \
"LIMIT 1 " \
""
-#define STMT_HAS_SERVER_EXCLUDED_NODES 118
-#define STMT_118 \
+#define STMT_HAS_SERVER_EXCLUDED_DESCENDANTS 130
+#define STMT_130_INFO {"STMT_HAS_SERVER_EXCLUDED_DESCENDANTS", NULL}
+#define STMT_130 \
"SELECT local_relpath FROM nodes " \
"WHERE wc_id = ?1 " \
- " AND (?2 = '' " \
- " OR local_relpath = ?2 " \
- " OR ((local_relpath) > (?2) || '/' AND (local_relpath) < (?2) || '0') ) " \
- " AND op_depth = 0 AND presence = 'absent' " \
+ " AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ " AND op_depth = 0 AND presence = 'server-excluded' " \
"LIMIT 1 " \
""
-#define STMT_SELECT_ALL_SERVER_EXCLUDED_NODES 119
-#define STMT_119 \
+#define STMT_SELECT_ALL_EXCLUDED_DESCENDANTS 131
+#define STMT_131_INFO {"STMT_SELECT_ALL_EXCLUDED_DESCENDANTS", NULL}
+#define STMT_131 \
"SELECT local_relpath FROM nodes " \
"WHERE wc_id = ?1 " \
- " AND (?2 = '' " \
- " OR local_relpath = ?2 " \
- " OR ((local_relpath) > (?2) || '/' AND (local_relpath) < (?2) || '0') ) " \
+ " AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
" AND op_depth = 0 " \
- " AND presence = 'absent' " \
+ " AND (presence = 'server-excluded' OR presence = 'excluded') " \
""
-#define STMT_INSERT_WORKING_NODE_COPY_FROM_BASE 120
-#define STMT_120 \
+#define STMT_INSERT_WORKING_NODE_COPY_FROM 132
+#define STMT_132_INFO {"STMT_INSERT_WORKING_NODE_COPY_FROM", NULL}
+#define STMT_132 \
"INSERT OR REPLACE INTO nodes ( " \
" wc_id, local_relpath, op_depth, parent_relpath, repos_id, " \
- " repos_path, revision, presence, depth, kind, changed_revision, " \
+ " repos_path, revision, presence, depth, moved_here, kind, changed_revision, " \
" changed_date, changed_author, checksum, properties, translated_size, " \
- " last_mod_time, symlink_target ) " \
+ " last_mod_time, symlink_target, moved_to ) " \
"SELECT wc_id, ?3 , ?4 , ?5 , " \
" repos_id, repos_path, revision, ?6 , depth, " \
- " kind, changed_revision, changed_date, changed_author, checksum, properties, " \
- " translated_size, last_mod_time, symlink_target " \
- "FROM nodes " \
- "WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 " \
+ " ?7, kind, changed_revision, changed_date, " \
+ " changed_author, checksum, properties, translated_size, " \
+ " last_mod_time, symlink_target, " \
+ " (SELECT dst.moved_to FROM nodes AS dst " \
+ " WHERE dst.wc_id = ?1 " \
+ " AND dst.local_relpath = ?3 " \
+ " AND dst.op_depth = ?4) " \
+ "FROM nodes_current " \
+ "WHERE wc_id = ?1 AND local_relpath = ?2 " \
""
-#define STMT_INSERT_WORKING_NODE_COPY_FROM_WORKING 121
-#define STMT_121 \
+#define STMT_INSERT_WORKING_NODE_COPY_FROM_DEPTH 133
+#define STMT_133_INFO {"STMT_INSERT_WORKING_NODE_COPY_FROM_DEPTH", NULL}
+#define STMT_133 \
"INSERT OR REPLACE INTO nodes ( " \
- " wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path, " \
- " revision, presence, depth, kind, changed_revision, changed_date, " \
- " changed_author, checksum, properties, translated_size, last_mod_time, " \
- " symlink_target ) " \
+ " wc_id, local_relpath, op_depth, parent_relpath, repos_id, " \
+ " repos_path, revision, presence, depth, moved_here, kind, changed_revision, " \
+ " changed_date, changed_author, checksum, properties, translated_size, " \
+ " last_mod_time, symlink_target, moved_to ) " \
"SELECT wc_id, ?3 , ?4 , ?5 , " \
" repos_id, repos_path, revision, ?6 , depth, " \
- " kind, changed_revision, changed_date, changed_author, checksum, properties, " \
- " translated_size, last_mod_time, symlink_target " \
- "FROM nodes " \
- "WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > 0 " \
- "ORDER BY op_depth DESC " \
- "LIMIT 1 " \
- ""
-
-#define STMT_INSERT_WORKING_NODE_COPY_FROM_DEPTH 122
-#define STMT_122 \
- "INSERT OR REPLACE INTO nodes ( " \
- " wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path, " \
- " revision, presence, depth, kind, changed_revision, changed_date, " \
- " changed_author, checksum, properties, translated_size, last_mod_time, " \
- " symlink_target ) " \
- "SELECT wc_id, ?3 , ?4 , ?5 , " \
- " repos_id, repos_path, revision, ?6 , " \
- " depth, kind, changed_revision, changed_date, changed_author, checksum, " \
- " properties, translated_size, last_mod_time, symlink_target " \
+ " ?8 , kind, changed_revision, changed_date, " \
+ " changed_author, checksum, properties, translated_size, " \
+ " last_mod_time, symlink_target, " \
+ " (SELECT dst.moved_to FROM nodes AS dst " \
+ " WHERE dst.wc_id = ?1 " \
+ " AND dst.local_relpath = ?3 " \
+ " AND dst.op_depth = ?4) " \
"FROM nodes " \
"WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?7 " \
""
-#define STMT_INSERT_ACTUAL_NODE_FROM_ACTUAL_NODE 123
-#define STMT_123 \
- "INSERT OR REPLACE INTO actual_node ( " \
- " wc_id, local_relpath, parent_relpath, properties, " \
- " conflict_old, conflict_new, conflict_working, " \
- " prop_reject, changelist, text_mod, tree_conflict_data ) " \
- "SELECT wc_id, ?3 , ?4 , properties, " \
- " conflict_old, conflict_new, conflict_working, " \
- " prop_reject, changelist, text_mod, tree_conflict_data " \
- "FROM actual_node " \
- "WHERE wc_id = ?1 AND local_relpath = ?2 " \
- ""
-
-#define STMT_UPDATE_BASE_REVISION 124
-#define STMT_124 \
+#define STMT_UPDATE_BASE_REVISION 134
+#define STMT_134_INFO {"STMT_UPDATE_BASE_REVISION", NULL}
+#define STMT_134 \
"UPDATE nodes SET revision = ?3 " \
"WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 " \
""
-#define STMT_UPDATE_BASE_REPOS 125
-#define STMT_125 \
+#define STMT_UPDATE_BASE_REPOS 135
+#define STMT_135_INFO {"STMT_UPDATE_BASE_REPOS", NULL}
+#define STMT_135 \
"UPDATE nodes SET repos_id = ?3, repos_path = ?4 " \
"WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 " \
""
-#define STMT_ACTUAL_HAS_CHILDREN 126
-#define STMT_126 \
+#define STMT_ACTUAL_HAS_CHILDREN 136
+#define STMT_136_INFO {"STMT_ACTUAL_HAS_CHILDREN", NULL}
+#define STMT_136 \
"SELECT 1 FROM actual_node " \
"WHERE wc_id = ?1 AND parent_relpath = ?2 " \
"LIMIT 1 " \
""
-#define STMT_INSERT_EXTERNAL 127
-#define STMT_127 \
+#define STMT_INSERT_EXTERNAL 137
+#define STMT_137_INFO {"STMT_INSERT_EXTERNAL", NULL}
+#define STMT_137 \
"INSERT OR REPLACE INTO externals ( " \
" wc_id, local_relpath, parent_relpath, presence, kind, def_local_relpath, " \
" repos_id, def_repos_relpath, def_operational_revision, def_revision) " \
"VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10) " \
""
-#define STMT_INSERT_EXTERNAL_UPGRADE 128
-#define STMT_128 \
- "INSERT OR REPLACE INTO externals ( " \
- " wc_id, local_relpath, parent_relpath, presence, kind, def_local_relpath, " \
- " repos_id, def_repos_relpath, def_operational_revision, def_revision) " \
- "VALUES (?1, ?2, ?3, ?4, " \
- " CASE WHEN (SELECT file_external FROM nodes " \
- " WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0) " \
- " IS NOT NULL THEN 'file' ELSE 'unknown' END, " \
- " ?5, ?6, ?7, ?8, ?9) " \
- ""
-
-#define STMT_SELECT_EXTERNAL_INFO 129
-#define STMT_129 \
+#define STMT_SELECT_EXTERNAL_INFO 138
+#define STMT_138_INFO {"STMT_SELECT_EXTERNAL_INFO", NULL}
+#define STMT_138 \
"SELECT presence, kind, def_local_relpath, repos_id, " \
- " def_repos_relpath, def_operational_revision, def_revision, presence " \
+ " def_repos_relpath, def_operational_revision, def_revision " \
"FROM externals WHERE wc_id = ?1 AND local_relpath = ?2 " \
"LIMIT 1 " \
""
-#define STMT_SELECT_EXTERNAL_CHILDREN 130
-#define STMT_130 \
- "SELECT local_relpath " \
- "FROM externals WHERE wc_id = ?1 AND parent_relpath = ?2 " \
+#define STMT_DELETE_FILE_EXTERNALS 139
+#define STMT_139_INFO {"STMT_DELETE_FILE_EXTERNALS", NULL}
+#define STMT_139 \
+ "DELETE FROM nodes " \
+ "WHERE wc_id = ?1 " \
+ " AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ " AND op_depth = 0 " \
+ " AND file_external IS NOT NULL " \
""
-#define STMT_SELECT_EXTERNALS_DEFINED 131
-#define STMT_131 \
- "SELECT local_relpath, def_local_relpath " \
- "FROM externals " \
+#define STMT_DELETE_FILE_EXTERNAL_REGISTATIONS 140
+#define STMT_140_INFO {"STMT_DELETE_FILE_EXTERNAL_REGISTATIONS", NULL}
+#define STMT_140 \
+ "DELETE FROM externals " \
"WHERE wc_id = ?1 " \
- " AND (?2 = '' " \
- " OR def_local_relpath = ?2 " \
- " OR ((def_local_relpath) > (?2) || '/' AND (def_local_relpath) < (?2) || '0') ) " \
+ " AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ " AND kind != 'dir' " \
""
-#define STMT_UPDATE_EXTERNAL_FILEINFO 132
-#define STMT_132 \
- "UPDATE externals SET recorded_size = ?3, recorded_mod_time = ?4 " \
- "WHERE wc_id = ?1 AND local_relpath = ?2 " \
+#define STMT_DELETE_EXTERNAL_REGISTATIONS 141
+#define STMT_141_INFO {"STMT_DELETE_EXTERNAL_REGISTATIONS", NULL}
+#define STMT_141 \
+ "DELETE FROM externals " \
+ "WHERE wc_id = ?1 " \
+ " AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
""
-#define STMT_DELETE_EXTERNAL 133
-#define STMT_133 \
+#define STMT_SELECT_COMMITTABLE_EXTERNALS_BELOW 142
+#define STMT_142_INFO {"STMT_SELECT_COMMITTABLE_EXTERNALS_BELOW", NULL}
+#define STMT_142 \
+ "SELECT local_relpath, kind, def_repos_relpath, " \
+ " (SELECT root FROM repository AS r WHERE r.id = e.repos_id) " \
+ "FROM externals e " \
+ "WHERE wc_id = ?1 " \
+ " AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ " AND def_revision IS NULL " \
+ " AND repos_id = (SELECT repos_id " \
+ " FROM nodes AS n " \
+ " WHERE n.wc_id = ?1 " \
+ " AND n.local_relpath = '' " \
+ " AND n.op_depth = 0) " \
+ " AND ((kind='dir') " \
+ " OR EXISTS (SELECT 1 FROM nodes " \
+ " WHERE nodes.wc_id = e.wc_id " \
+ " AND nodes.local_relpath = e.parent_relpath)) " \
+ ""
+
+#define STMT_SELECT_COMMITTABLE_EXTERNALS_IMMEDIATELY_BELOW 143
+#define STMT_143_INFO {"STMT_SELECT_COMMITTABLE_EXTERNALS_IMMEDIATELY_BELOW", NULL}
+#define STMT_143 \
+ "SELECT local_relpath, kind, def_repos_relpath, " \
+ " (SELECT root FROM repository AS r WHERE r.id = e.repos_id) " \
+ "FROM externals e " \
+ "WHERE wc_id = ?1 " \
+ " AND (((e.local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((e.local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ " AND parent_relpath = ?2 " \
+ " AND def_revision IS NULL " \
+ " AND repos_id = (SELECT repos_id " \
+ " FROM nodes AS n " \
+ " WHERE n.wc_id = ?1 " \
+ " AND n.local_relpath = '' " \
+ " AND n.op_depth = 0) " \
+ " AND ((kind='dir') " \
+ " OR EXISTS (SELECT 1 FROM nodes " \
+ " WHERE nodes.wc_id = e.wc_id " \
+ " AND nodes.local_relpath = e.parent_relpath)) " \
+ ""
+
+#define STMT_SELECT_EXTERNALS_DEFINED 144
+#define STMT_144_INFO {"STMT_SELECT_EXTERNALS_DEFINED", NULL}
+#define STMT_144 \
+ "SELECT local_relpath, def_local_relpath " \
+ "FROM externals " \
+ "WHERE (wc_id = ?1 AND def_local_relpath = ?2) " \
+ " OR (wc_id = ?1 AND (((def_local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((def_local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
+ ""
+
+#define STMT_DELETE_EXTERNAL 145
+#define STMT_145_INFO {"STMT_DELETE_EXTERNAL", NULL}
+#define STMT_145 \
"DELETE FROM externals " \
"WHERE wc_id = ?1 AND local_relpath = ?2 " \
""
-#define STMT_SELECT_EXTERNAL_PROPERTIES 134
-#define STMT_134 \
+#define STMT_SELECT_EXTERNAL_PROPERTIES 146
+#define STMT_146_INFO {"STMT_SELECT_EXTERNAL_PROPERTIES", NULL}
+#define STMT_146 \
"SELECT IFNULL((SELECT properties FROM actual_node a " \
" WHERE a.wc_id = ?1 AND A.local_relpath = n.local_relpath), " \
" properties), " \
" local_relpath, depth " \
- "FROM nodes n " \
- "WHERE wc_id = ?1 " \
- " AND (?2 = '' " \
- " OR local_relpath = ?2 " \
- " OR ((local_relpath) > (?2) || '/' AND (local_relpath) < (?2) || '0') ) " \
- " AND kind = 'dir' AND presence='normal' " \
- " AND op_depth=(SELECT MAX(op_depth) FROM nodes o " \
- " WHERE o.wc_id = ?1 AND o.local_relpath = n.local_relpath) " \
+ "FROM nodes_current n " \
+ "WHERE wc_id = ?1 AND local_relpath = ?2 " \
+ " AND kind = 'dir' AND presence IN ('normal', 'incomplete') " \
+ "UNION ALL " \
+ "SELECT IFNULL((SELECT properties FROM actual_node a " \
+ " WHERE a.wc_id = ?1 AND A.local_relpath = n.local_relpath), " \
+ " properties), " \
+ " local_relpath, depth " \
+ "FROM nodes_current n " \
+ "WHERE wc_id = ?1 AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ " AND kind = 'dir' AND presence IN ('normal', 'incomplete') " \
""
-#define STMT_INSERT_ACTUAL_NODE 135
-#define STMT_135 \
- "INSERT OR REPLACE INTO actual_node ( " \
- " wc_id, local_relpath, parent_relpath, properties, conflict_old, " \
- " conflict_new, " \
- " conflict_working, prop_reject, changelist, text_mod, " \
- " tree_conflict_data) " \
- "VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, NULL, ?10) " \
+#define STMT_SELECT_CURRENT_PROPS_RECURSIVE 147
+#define STMT_147_INFO {"STMT_SELECT_CURRENT_PROPS_RECURSIVE", NULL}
+#define STMT_147 \
+ "SELECT IFNULL((SELECT properties FROM actual_node a " \
+ " WHERE a.wc_id = ?1 AND A.local_relpath = n.local_relpath), " \
+ " properties), " \
+ " local_relpath " \
+ "FROM nodes_current n " \
+ "WHERE (wc_id = ?1 AND local_relpath = ?2) " \
+ " OR (wc_id = ?1 AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
""
-#define STMT_UPDATE_ACTUAL_CONFLICT_DATA 136
-#define STMT_136 \
- "UPDATE actual_node SET conflict_data = ?3 " \
- "WHERE wc_id = ?1 AND local_relpath = ?2 " \
+#define STMT_PRAGMA_LOCKING_MODE 148
+#define STMT_148_INFO {"STMT_PRAGMA_LOCKING_MODE", NULL}
+#define STMT_148 \
+ "PRAGMA locking_mode = exclusive " \
""
-#define STMT_INSERT_ACTUAL_CONFLICT_DATA 137
-#define STMT_137 \
- "INSERT INTO actual_node ( " \
- " wc_id, local_relpath, conflict_data, parent_relpath) " \
- "VALUES (?1, ?2, ?3, ?4) " \
+#define STMT_INSERT_ACTUAL_NODE 149
+#define STMT_149_INFO {"STMT_INSERT_ACTUAL_NODE", NULL}
+#define STMT_149 \
+ "INSERT OR REPLACE INTO actual_node ( " \
+ " wc_id, local_relpath, parent_relpath, properties, changelist, conflict_data) " \
+ "VALUES (?1, ?2, ?3, ?4, ?5, ?6) " \
""
-#define STMT_SELECT_OLD_TREE_CONFLICT 138
-#define STMT_138 \
- "SELECT wc_id, local_relpath, tree_conflict_data " \
- "FROM actual_node " \
- "WHERE tree_conflict_data IS NOT NULL " \
+#define STMT_UPDATE_ACTUAL_CONFLICT_DATA 150
+#define STMT_150_INFO {"STMT_UPDATE_ACTUAL_CONFLICT_DATA", NULL}
+#define STMT_150 \
+ "UPDATE actual_node SET conflict_data = ?3 " \
+ "WHERE wc_id = ?1 AND local_relpath = ?2 " \
""
-#define STMT_ERASE_OLD_CONFLICTS 139
-#define STMT_139 \
- "UPDATE actual_node SET tree_conflict_data = NULL " \
+#define STMT_INSERT_ACTUAL_CONFLICT_DATA 151
+#define STMT_151_INFO {"STMT_INSERT_ACTUAL_CONFLICT_DATA", NULL}
+#define STMT_151 \
+ "INSERT INTO actual_node (wc_id, local_relpath, conflict_data, parent_relpath) " \
+ "VALUES (?1, ?2, ?3, ?4) " \
""
-#define STMT_SELECT_ALL_FILES 140
-#define STMT_140 \
+#define STMT_SELECT_ALL_FILES 152
+#define STMT_152_INFO {"STMT_SELECT_ALL_FILES", NULL}
+#define STMT_152 \
"SELECT local_relpath FROM nodes_current " \
"WHERE wc_id = ?1 AND parent_relpath = ?2 AND kind = 'file' " \
""
-#define STMT_UPDATE_NODE_PROPS 141
-#define STMT_141 \
+#define STMT_UPDATE_NODE_PROPS 153
+#define STMT_153_INFO {"STMT_UPDATE_NODE_PROPS", NULL}
+#define STMT_153 \
"UPDATE nodes SET properties = ?4 " \
"WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 " \
""
-#define STMT_HAS_WORKING_NODES 142
-#define STMT_142 \
- "SELECT 1 FROM nodes WHERE op_depth > 0 " \
- "LIMIT 1 " \
- ""
-
-#define STMT_HAS_ACTUAL_NODES_CONFLICTS 143
-#define STMT_143 \
- "SELECT 1 FROM actual_node " \
- "WHERE NOT ((prop_reject IS NULL) AND (conflict_old IS NULL) " \
- " AND (conflict_new IS NULL) AND (conflict_working IS NULL) " \
- " AND (tree_conflict_data IS NULL)) " \
- "LIMIT 1 " \
+#define STMT_PRAGMA_TABLE_INFO_NODES 154
+#define STMT_154_INFO {"STMT_PRAGMA_TABLE_INFO_NODES", NULL}
+#define STMT_154 \
+ "PRAGMA table_info(\"NODES\") " \
""
-#define STMT_CREATE_NODE_PROPS_CACHE 144
-#define STMT_144 \
- "DROP TABLE IF EXISTS temp__node_props_cache; " \
- "CREATE TEMPORARY TABLE temp__node_props_cache ( " \
- " local_Relpath TEXT NOT NULL, " \
+#define STMT_CREATE_TARGET_PROP_CACHE 155
+#define STMT_155_INFO {"STMT_CREATE_TARGET_PROP_CACHE", NULL}
+#define STMT_155 \
+ "DROP TABLE IF EXISTS target_prop_cache; " \
+ "CREATE TEMPORARY TABLE target_prop_cache ( " \
+ " local_relpath TEXT NOT NULL PRIMARY KEY, " \
" kind TEXT NOT NULL, " \
" properties BLOB " \
- " ); " \
- ""
-
-#define STMT_CACHE_NODE_PROPS 145
-#define STMT_145 \
- "INSERT INTO temp__node_props_cache(local_relpath, kind, properties) " \
- " SELECT local_relpath, kind, properties FROM nodes_current " \
- " WHERE wc_id = ?1 " \
- " AND local_relpath IN (SELECT local_relpath FROM targets_list) " \
- " AND presence IN ('normal', 'incomplete') " \
- ""
-
-#define STMT_CACHE_ACTUAL_PROPS 146
-#define STMT_146 \
- "UPDATE temp__node_props_cache " \
- " SET properties= " \
- " IFNULL((SELECT properties FROM actual_node a " \
- " WHERE a.wc_id = ?1 " \
- " AND a.local_relpath = temp__node_props_cache.local_relpath), " \
- " properties) " \
- ""
-
-#define STMT_CACHE_NODE_BASE_PROPS 147
-#define STMT_147 \
- "INSERT INTO temp__node_props_cache (local_relpath, kind, properties) " \
- " SELECT local_relpath, kind, properties FROM nodes_base " \
- " WHERE wc_id = ?1 " \
- " AND local_relpath IN (SELECT local_relpath FROM targets_list) " \
- " AND presence IN ('normal', 'incomplete') " \
- ""
-
-#define STMT_CACHE_NODE_PRISTINE_PROPS 148
-#define STMT_148 \
- "INSERT INTO temp__node_props_cache(local_relpath, kind, properties) " \
- " SELECT local_relpath, kind, " \
- " IFNULL((SELECT properties FROM nodes nn " \
- " WHERE n.presence = 'base-deleted' " \
- " AND nn.wc_id = n.wc_id " \
- " AND nn.local_relpath = n.local_relpath " \
- " AND nn.op_depth < n.op_depth " \
- " ORDER BY op_depth DESC), " \
- " properties) " \
- " FROM nodes_current n " \
- " WHERE wc_id = ?1 " \
- " AND local_relpath IN (SELECT local_relpath FROM targets_list) " \
- " AND presence IN ('normal', 'incomplete', 'base-deleted') " \
+ "); " \
""
-#define STMT_SELECT_RELEVANT_PROPS_FROM_CACHE 149
-#define STMT_149 \
- "SELECT local_relpath, properties FROM temp__node_props_cache " \
+#define STMT_CACHE_TARGET_PROPS 156
+#define STMT_156_INFO {"STMT_CACHE_TARGET_PROPS", NULL}
+#define STMT_156 \
+ "INSERT INTO target_prop_cache(local_relpath, kind, properties) " \
+ " SELECT n.local_relpath, n.kind, " \
+ " IFNULL((SELECT properties FROM actual_node AS a " \
+ " WHERE a.wc_id = n.wc_id " \
+ " AND a.local_relpath = n.local_relpath), " \
+ " n.properties) " \
+ " FROM targets_list AS t " \
+ " JOIN nodes AS n " \
+ " ON n.wc_id = ?1 " \
+ " AND n.local_relpath = t.local_relpath " \
+ " AND n.op_depth = (SELECT MAX(op_depth) FROM nodes AS n3 " \
+ " WHERE n3.wc_id = ?1 " \
+ " AND n3.local_relpath = t.local_relpath) " \
+ " WHERE t.wc_id = ?1 " \
+ " AND (presence='normal' OR presence='incomplete') " \
+ " ORDER BY t.local_relpath " \
+ ""
+
+#define STMT_CACHE_TARGET_PRISTINE_PROPS 157
+#define STMT_157_INFO {"STMT_CACHE_TARGET_PRISTINE_PROPS", NULL}
+#define STMT_157 \
+ "INSERT INTO target_prop_cache(local_relpath, kind, properties) " \
+ " SELECT n.local_relpath, n.kind, " \
+ " CASE n.presence " \
+ " WHEN 'base-deleted' " \
+ " THEN (SELECT properties FROM nodes AS p " \
+ " WHERE p.wc_id = n.wc_id " \
+ " AND p.local_relpath = n.local_relpath " \
+ " AND p.op_depth < n.op_depth " \
+ " ORDER BY p.op_depth DESC ) " \
+ " ELSE properties END " \
+ " FROM targets_list AS t " \
+ " JOIN nodes AS n " \
+ " ON n.wc_id = ?1 " \
+ " AND n.local_relpath = t.local_relpath " \
+ " AND n.op_depth = (SELECT MAX(op_depth) FROM nodes AS n3 " \
+ " WHERE n3.wc_id = ?1 " \
+ " AND n3.local_relpath = t.local_relpath) " \
+ " WHERE t.wc_id = ?1 " \
+ " AND (presence = 'normal' " \
+ " OR presence = 'incomplete' " \
+ " OR presence = 'base-deleted') " \
+ " ORDER BY t.local_relpath " \
+ ""
+
+#define STMT_SELECT_ALL_TARGET_PROP_CACHE 158
+#define STMT_158_INFO {"STMT_SELECT_ALL_TARGET_PROP_CACHE", NULL}
+#define STMT_158 \
+ "SELECT local_relpath, properties FROM target_prop_cache " \
"ORDER BY local_relpath " \
""
-#define STMT_DROP_NODE_PROPS_CACHE 150
-#define STMT_150 \
- "DROP TABLE IF EXISTS temp__node_props_cache; " \
+#define STMT_DROP_TARGET_PROP_CACHE 159
+#define STMT_159_INFO {"STMT_DROP_TARGET_PROP_CACHE", NULL}
+#define STMT_159 \
+ "DROP TABLE target_prop_cache; " \
""
-#define STMT_CREATE_REVERT_LIST 151
-#define STMT_151 \
+#define STMT_CREATE_REVERT_LIST 160
+#define STMT_160_INFO {"STMT_CREATE_REVERT_LIST", NULL}
+#define STMT_160 \
"DROP TABLE IF EXISTS revert_list; " \
"CREATE TEMPORARY TABLE revert_list ( " \
" local_relpath TEXT NOT NULL, " \
" actual INTEGER NOT NULL, " \
- " conflict_old TEXT, " \
- " conflict_new TEXT, " \
- " conflict_working TEXT, " \
- " prop_reject TEXT, " \
+ " conflict_data BLOB, " \
" notify INTEGER, " \
" op_depth INTEGER, " \
" repos_id INTEGER, " \
@@ -1356,246 +1677,511 @@
"CREATE TEMPORARY TRIGGER trigger_revert_list_actual_delete " \
"BEFORE DELETE ON actual_node " \
"BEGIN " \
- " INSERT OR REPLACE INTO revert_list(local_relpath, actual, conflict_old, " \
- " conflict_new, conflict_working, " \
- " prop_reject, notify) " \
- " SELECT OLD.local_relpath, 1, " \
- " OLD.conflict_old, OLD.conflict_new, OLD.conflict_working, " \
- " OLD.prop_reject, " \
+ " INSERT OR REPLACE INTO revert_list(local_relpath, actual, conflict_data, " \
+ " notify) " \
+ " SELECT OLD.local_relpath, 1, OLD.conflict_data, " \
" CASE " \
- " WHEN OLD.properties IS NOT NULL OR OLD.tree_conflict_data IS NOT NULL " \
- " THEN 1 ELSE NULL END; " \
+ " WHEN OLD.properties IS NOT NULL " \
+ " THEN 1 " \
+ " WHEN NOT EXISTS(SELECT 1 FROM NODES n " \
+ " WHERE n.wc_id = OLD.wc_id " \
+ " AND n.local_relpath = OLD.local_relpath) " \
+ " THEN 1 " \
+ " ELSE NULL " \
+ " END; " \
"END; " \
"DROP TRIGGER IF EXISTS trigger_revert_list_actual_update; " \
"CREATE TEMPORARY TRIGGER trigger_revert_list_actual_update " \
"BEFORE UPDATE ON actual_node " \
"BEGIN " \
- " INSERT OR REPLACE INTO revert_list(local_relpath, actual, conflict_old, " \
- " conflict_new, conflict_working, " \
- " prop_reject, notify) " \
- " SELECT OLD.local_relpath, 1, " \
- " OLD.conflict_old, OLD.conflict_new, OLD.conflict_working, " \
- " OLD.prop_reject, " \
+ " INSERT OR REPLACE INTO revert_list(local_relpath, actual, conflict_data, " \
+ " notify) " \
+ " SELECT OLD.local_relpath, 1, OLD.conflict_data, " \
" CASE " \
- " WHEN OLD.properties IS NOT NULL OR OLD.tree_conflict_data IS NOT NULL " \
- " THEN 1 ELSE NULL END; " \
+ " WHEN OLD.properties IS NOT NULL " \
+ " THEN 1 " \
+ " WHEN NOT EXISTS(SELECT 1 FROM NODES n " \
+ " WHERE n.wc_id = OLD.wc_id " \
+ " AND n.local_relpath = OLD.local_relpath) " \
+ " THEN 1 " \
+ " ELSE NULL " \
+ " END; " \
"END " \
""
-#define STMT_DROP_REVERT_LIST_TRIGGERS 152
-#define STMT_152 \
- "DROP TRIGGER IF EXISTS trigger_revert_list_nodes; " \
- "DROP TRIGGER IF EXISTS trigger_revert_list_actual_delete; " \
- "DROP TRIGGER IF EXISTS trigger_revert_list_actual_update " \
+#define STMT_DROP_REVERT_LIST_TRIGGERS 161
+#define STMT_161_INFO {"STMT_DROP_REVERT_LIST_TRIGGERS", NULL}
+#define STMT_161 \
+ "DROP TRIGGER trigger_revert_list_nodes; " \
+ "DROP TRIGGER trigger_revert_list_actual_delete; " \
+ "DROP TRIGGER trigger_revert_list_actual_update " \
""
-#define STMT_SELECT_REVERT_LIST 153
-#define STMT_153 \
- "SELECT conflict_old, conflict_new, conflict_working, prop_reject, notify, " \
- " actual, op_depth, repos_id, kind " \
+#define STMT_SELECT_REVERT_LIST 162
+#define STMT_162_INFO {"STMT_SELECT_REVERT_LIST", NULL}
+#define STMT_162 \
+ "SELECT actual, notify, kind, op_depth, repos_id, conflict_data " \
"FROM revert_list " \
"WHERE local_relpath = ?1 " \
"ORDER BY actual DESC " \
""
-#define STMT_SELECT_REVERT_LIST_COPIED_CHILDREN 154
-#define STMT_154 \
+#define STMT_SELECT_REVERT_LIST_COPIED_CHILDREN 163
+#define STMT_163_INFO {"STMT_SELECT_REVERT_LIST_COPIED_CHILDREN", NULL}
+#define STMT_163 \
"SELECT local_relpath, kind " \
"FROM revert_list " \
- "WHERE local_relpath LIKE ?1 ESCAPE '#' " \
+ "WHERE (((local_relpath) > (CASE (?1) WHEN '' THEN '' ELSE (?1) || '/' END)) AND ((local_relpath) < CASE (?1) WHEN '' THEN X'FFFF' ELSE (?1) || '0' END)) " \
" AND op_depth >= ?2 " \
" AND repos_id IS NOT NULL " \
"ORDER BY local_relpath " \
""
-#define STMT_DELETE_REVERT_LIST 155
-#define STMT_155 \
+#define STMT_DELETE_REVERT_LIST 164
+#define STMT_164_INFO {"STMT_DELETE_REVERT_LIST", NULL}
+#define STMT_164 \
"DELETE FROM revert_list WHERE local_relpath = ?1 " \
""
-#define STMT_SELECT_REVERT_LIST_RECURSIVE 156
-#define STMT_156 \
+#define STMT_SELECT_REVERT_LIST_RECURSIVE 165
+#define STMT_165_INFO {"STMT_SELECT_REVERT_LIST_RECURSIVE", NULL}
+#define STMT_165 \
"SELECT DISTINCT local_relpath " \
"FROM revert_list " \
- "WHERE (local_relpath = ?1 OR local_relpath LIKE ?2 ESCAPE '#') " \
+ "WHERE (local_relpath = ?1 " \
+ " OR (((local_relpath) > (CASE (?1) WHEN '' THEN '' ELSE (?1) || '/' END)) AND ((local_relpath) < CASE (?1) WHEN '' THEN X'FFFF' ELSE (?1) || '0' END))) " \
" AND (notify OR actual = 0) " \
"ORDER BY local_relpath " \
""
-#define STMT_DELETE_REVERT_LIST_RECURSIVE 157
-#define STMT_157 \
+#define STMT_DELETE_REVERT_LIST_RECURSIVE 166
+#define STMT_166_INFO {"STMT_DELETE_REVERT_LIST_RECURSIVE", NULL}
+#define STMT_166 \
"DELETE FROM revert_list " \
- "WHERE local_relpath = ?1 OR local_relpath LIKE ?2 ESCAPE '#' " \
+ "WHERE (local_relpath = ?1 " \
+ " OR (((local_relpath) > (CASE (?1) WHEN '' THEN '' ELSE (?1) || '/' END)) AND ((local_relpath) < CASE (?1) WHEN '' THEN X'FFFF' ELSE (?1) || '0' END))) " \
""
-#define STMT_DROP_REVERT_LIST 158
-#define STMT_158 \
+#define STMT_DROP_REVERT_LIST 167
+#define STMT_167_INFO {"STMT_DROP_REVERT_LIST", NULL}
+#define STMT_167 \
"DROP TABLE IF EXISTS revert_list " \
""
-#define STMT_CREATE_DELETE_LIST 159
-#define STMT_159 \
+#define STMT_CREATE_DELETE_LIST 168
+#define STMT_168_INFO {"STMT_CREATE_DELETE_LIST", NULL}
+#define STMT_168 \
"DROP TABLE IF EXISTS delete_list; " \
"CREATE TEMPORARY TABLE delete_list ( " \
- " local_relpath TEXT PRIMARY KEY NOT NULL " \
+ " local_relpath TEXT PRIMARY KEY NOT NULL UNIQUE " \
" ) " \
""
-#define STMT_INSERT_DELETE_LIST 160
-#define STMT_160 \
+#define STMT_INSERT_DELETE_LIST 169
+#define STMT_169_INFO {"STMT_INSERT_DELETE_LIST", NULL}
+#define STMT_169 \
"INSERT INTO delete_list(local_relpath) " \
- "SELECT local_relpath FROM nodes n " \
+ "SELECT local_relpath FROM nodes AS n " \
"WHERE wc_id = ?1 " \
" AND (local_relpath = ?2 " \
- " OR ((local_relpath) > (?2) || '/' AND (local_relpath) < (?2) || '0') ) " \
+ " OR (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
" AND op_depth >= ?3 " \
- " AND presence NOT IN ('base-deleted', 'not-present', 'excluded', 'absent') " \
- " AND op_depth = (SELECT MAX(op_depth) FROM nodes s " \
- " WHERE s.wc_id = n.wc_id " \
+ " AND op_depth = (SELECT MAX(s.op_depth) FROM nodes AS s " \
+ " WHERE s.wc_id = ?1 " \
" AND s.local_relpath = n.local_relpath) " \
+ " AND presence NOT IN ('base-deleted', 'not-present', 'excluded', 'server-excluded') " \
+ " AND file_external IS NULL " \
""
-#define STMT_SELECT_DELETE_LIST 161
-#define STMT_161 \
+#define STMT_SELECT_DELETE_LIST 170
+#define STMT_170_INFO {"STMT_SELECT_DELETE_LIST", NULL}
+#define STMT_170 \
"SELECT local_relpath FROM delete_list " \
"ORDER BY local_relpath " \
""
-#define STMT_FINALIZE_DELETE 162
-#define STMT_162 \
+#define STMT_FINALIZE_DELETE 171
+#define STMT_171_INFO {"STMT_FINALIZE_DELETE", NULL}
+#define STMT_171 \
"DROP TABLE IF EXISTS delete_list " \
""
-#define STMT_SELECT_MIN_MAX_REVISIONS 163
-#define STMT_163 \
+#define STMT_CREATE_UPDATE_MOVE_LIST 172
+#define STMT_172_INFO {"STMT_CREATE_UPDATE_MOVE_LIST", NULL}
+#define STMT_172 \
+ "DROP TABLE IF EXISTS update_move_list; " \
+ "CREATE TEMPORARY TABLE update_move_list ( " \
+ " local_relpath TEXT PRIMARY KEY NOT NULL UNIQUE, " \
+ " action INTEGER NOT NULL, " \
+ " kind INTEGER NOT NULL, " \
+ " content_state INTEGER NOT NULL, " \
+ " prop_state INTEGER NOT NULL " \
+ " ) " \
+ ""
+
+#define STMT_INSERT_UPDATE_MOVE_LIST 173
+#define STMT_173_INFO {"STMT_INSERT_UPDATE_MOVE_LIST", NULL}
+#define STMT_173 \
+ "INSERT INTO update_move_list(local_relpath, action, kind, content_state, " \
+ " prop_state) " \
+ "VALUES (?1, ?2, ?3, ?4, ?5) " \
+ ""
+
+#define STMT_SELECT_UPDATE_MOVE_LIST 174
+#define STMT_174_INFO {"STMT_SELECT_UPDATE_MOVE_LIST", NULL}
+#define STMT_174 \
+ "SELECT local_relpath, action, kind, content_state, prop_state " \
+ "FROM update_move_list " \
+ "ORDER BY local_relpath " \
+ ""
+
+#define STMT_FINALIZE_UPDATE_MOVE 175
+#define STMT_175_INFO {"STMT_FINALIZE_UPDATE_MOVE", NULL}
+#define STMT_175 \
+ "DROP TABLE IF EXISTS update_move_list " \
+ ""
+
+#define STMT_SELECT_MIN_MAX_REVISIONS 176
+#define STMT_176_INFO {"STMT_SELECT_MIN_MAX_REVISIONS", NULL}
+#define STMT_176 \
"SELECT MIN(revision), MAX(revision), " \
" MIN(changed_revision), MAX(changed_revision) FROM nodes " \
" WHERE wc_id = ?1 " \
- " AND (?2 = '' " \
- " OR local_relpath = ?2 " \
- " OR ((local_relpath) > (?2) || '/' AND (local_relpath) < (?2) || '0') ) " \
+ " AND (local_relpath = ?2 " \
+ " OR (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
" AND presence IN ('normal', 'incomplete') " \
" AND file_external IS NULL " \
" AND op_depth = 0 " \
""
-#define STMT_HAS_SPARSE_NODES 164
-#define STMT_164 \
+#define STMT_HAS_SPARSE_NODES 177
+#define STMT_177_INFO {"STMT_HAS_SPARSE_NODES", NULL}
+#define STMT_177 \
"SELECT 1 FROM nodes " \
"WHERE wc_id = ?1 " \
- " AND (?2 = '' " \
- " OR local_relpath = ?2 " \
- " OR ((local_relpath) > (?2) || '/' AND (local_relpath) < (?2) || '0') ) " \
+ " AND (local_relpath = ?2 " \
+ " OR (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
" AND op_depth = 0 " \
- " AND (presence IN ('absent', 'excluded') " \
+ " AND (presence IN ('server-excluded', 'excluded') " \
" OR depth NOT IN ('infinity', 'unknown')) " \
" AND file_external IS NULL " \
"LIMIT 1 " \
""
-#define STMT_SUBTREE_HAS_TREE_MODIFICATIONS 165
-#define STMT_165 \
+#define STMT_SUBTREE_HAS_TREE_MODIFICATIONS 178
+#define STMT_178_INFO {"STMT_SUBTREE_HAS_TREE_MODIFICATIONS", NULL}
+#define STMT_178 \
"SELECT 1 FROM nodes " \
"WHERE wc_id = ?1 " \
- " AND (?2 = '' " \
- " OR local_relpath = ?2 " \
- " OR ((local_relpath) > (?2) || '/' AND (local_relpath) < (?2) || '0') ) " \
+ " AND (local_relpath = ?2 " \
+ " OR (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
" AND op_depth > 0 " \
"LIMIT 1 " \
""
-#define STMT_SUBTREE_HAS_PROP_MODIFICATIONS 166
-#define STMT_166 \
+#define STMT_SUBTREE_HAS_PROP_MODIFICATIONS 179
+#define STMT_179_INFO {"STMT_SUBTREE_HAS_PROP_MODIFICATIONS", NULL}
+#define STMT_179 \
"SELECT 1 FROM actual_node " \
"WHERE wc_id = ?1 " \
- " AND (?2 = '' " \
- " OR local_relpath = ?2 " \
- " OR ((local_relpath) > (?2) || '/' AND (local_relpath) < (?2) || '0') ) " \
+ " AND (local_relpath = ?2 " \
+ " OR (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
" AND properties IS NOT NULL " \
"LIMIT 1 " \
""
-#define STMT_HAS_SWITCHED 167
-#define STMT_167 \
- "SELECT o.repos_path || '/' || SUBSTR(s.local_relpath, LENGTH(?2)+2) AS expected " \
- "FROM nodes AS o " \
- "LEFT JOIN nodes AS s " \
- "ON o.wc_id = s.wc_id " \
- " AND ((s.local_relpath) > (?2) || '/' AND (s.local_relpath) < (?2) || '0') " \
- " AND s.op_depth = 0 " \
- " AND s.repos_id = o.repos_id " \
- " AND s.file_external IS NULL " \
- "WHERE o.wc_id = ?1 AND o.local_relpath=?2 AND o.op_depth=0 " \
- " AND s.repos_path != expected " \
+#define STMT_HAS_SWITCHED 180
+#define STMT_180_INFO {"STMT_HAS_SWITCHED", NULL}
+#define STMT_180 \
+ "SELECT 1 " \
+ "FROM nodes " \
+ "WHERE wc_id = ?1 " \
+ " AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ " AND op_depth = 0 " \
+ " AND file_external IS NULL " \
+ " AND presence IN ('normal', 'incomplete') " \
+ " AND repos_path IS NOT (CASE WHEN (?2) = '' THEN (CASE WHEN (?3) = '' THEN (local_relpath) WHEN (local_relpath) = '' THEN (?3) ELSE (?3) || '/' || (local_relpath) END) WHEN (?3) = '' THEN (CASE WHEN (?2) = '' THEN (local_relpath) WHEN SUBSTR((local_relpath), 1, LENGTH(?2)) = (?2) THEN CASE WHEN LENGTH(?2) = LENGTH(local_relpath) THEN '' WHEN SUBSTR((local_relpath), LENGTH(?2)+1, 1) = '/' THEN SUBSTR((local_relpath), LENGTH(?2)+2) END END) WHEN SUBSTR((local_relpath), 1, LENGTH(?2)) = (?2) THEN CASE WHEN LENGTH(?2) = LENGTH(local_relpath) THEN (?3) WHEN SUBSTR((local_relpath), LENGTH(?2)+1, 1) = '/' THEN (?3) || SUBSTR((local_relpath), LENGTH(?2)+1) END END) " \
"LIMIT 1 " \
""
-#define STMT_HAS_SWITCHED_REPOS_ROOT 168
-#define STMT_168 \
- "SELECT SUBSTR(s.local_relpath, LENGTH(?2)+2) AS expected " \
- "FROM nodes AS o " \
- "LEFT JOIN nodes AS s " \
- "ON o.wc_id = s.wc_id " \
- " AND ((s.local_relpath) > (?2) || '/' AND (s.local_relpath) < (?2) || '0') " \
- " AND s.op_depth = 0 " \
- " AND s.repos_id = o.repos_id " \
- " AND s.file_external IS NULL " \
- "WHERE o.wc_id = ?1 AND o.local_relpath=?2 AND o.op_depth=0 " \
- " AND s.repos_path != expected " \
- "LIMIT 1 " \
+#define STMT_SELECT_BASE_FILES_RECURSIVE 181
+#define STMT_181_INFO {"STMT_SELECT_BASE_FILES_RECURSIVE", NULL}
+#define STMT_181 \
+ "SELECT local_relpath, translated_size, last_mod_time FROM nodes AS n " \
+ "WHERE wc_id = ?1 " \
+ " AND (local_relpath = ?2 " \
+ " OR (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
+ " AND op_depth = 0 " \
+ " AND kind='file' " \
+ " AND presence='normal' " \
+ " AND file_external IS NULL " \
""
-#define STMT_HAS_SWITCHED_WCROOT 169
-#define STMT_169 \
- "SELECT o.repos_path || '/' || s.local_relpath AS expected " \
- "FROM nodes AS o " \
- "LEFT JOIN nodes AS s " \
- "ON o.wc_id = s.wc_id " \
- " AND s.local_relpath != '' " \
- " AND s.op_depth = 0 " \
- " AND s.repos_id = o.repos_id " \
- " AND s.file_external IS NULL " \
- "WHERE o.wc_id = ?1 AND o.local_relpath=?2 AND o.op_depth=0 " \
- " AND s.repos_path != expected " \
- "LIMIT 1 " \
+#define STMT_SELECT_MOVED_FROM_RELPATH 182
+#define STMT_182_INFO {"STMT_SELECT_MOVED_FROM_RELPATH", NULL}
+#define STMT_182 \
+ "SELECT local_relpath, op_depth FROM nodes " \
+ "WHERE wc_id = ?1 AND moved_to = ?2 AND op_depth > 0 " \
""
-#define STMT_HAS_SWITCHED_WCROOT_REPOS_ROOT 170
-#define STMT_170 \
- "SELECT s.local_relpath AS expected " \
- "FROM nodes AS o " \
- "LEFT JOIN nodes AS s " \
- "ON o.wc_id = s.wc_id " \
- " AND s.local_relpath != '' " \
- " AND s.op_depth = 0 " \
- " AND s.repos_id = o.repos_id " \
- " AND s.file_external IS NULL " \
- "WHERE o.wc_id = ?1 AND o.local_relpath=?2 AND o.op_depth=0 " \
- " AND s.repos_path != expected " \
- "LIMIT 1 " \
+#define STMT_UPDATE_MOVED_TO_RELPATH 183
+#define STMT_183_INFO {"STMT_UPDATE_MOVED_TO_RELPATH", NULL}
+#define STMT_183 \
+ "UPDATE nodes SET moved_to = ?4 " \
+ "WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 " \
""
-#define STMT_SELECT_BASE_FILES_RECURSIVE 171
-#define STMT_171 \
- "SELECT local_relpath, translated_size, last_mod_time FROM nodes AS n " \
+#define STMT_CLEAR_MOVED_TO_RELPATH 184
+#define STMT_184_INFO {"STMT_CLEAR_MOVED_TO_RELPATH", NULL}
+#define STMT_184 \
+ "UPDATE nodes SET moved_to = NULL " \
+ "WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 " \
+ ""
+
+#define STMT_CLEAR_MOVED_HERE_RECURSIVE 185
+#define STMT_185_INFO {"STMT_CLEAR_MOVED_HERE_RECURSIVE", NULL}
+#define STMT_185 \
+ "UPDATE nodes SET moved_here = NULL " \
+ "WHERE wc_id = ?1 " \
+ " AND (local_relpath = ?2 OR (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
+ " AND op_depth = ?3 " \
+ ""
+
+#define STMT_SELECT_MOVED_HERE_CHILDREN 186
+#define STMT_186_INFO {"STMT_SELECT_MOVED_HERE_CHILDREN", NULL}
+#define STMT_186 \
+ "SELECT moved_to, local_relpath FROM nodes " \
+ "WHERE wc_id = ?1 AND op_depth > 0 " \
+ " AND (((moved_to) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((moved_to) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ ""
+
+#define STMT_SELECT_MOVED_FOR_DELETE 187
+#define STMT_187_INFO {"STMT_SELECT_MOVED_FOR_DELETE", NULL}
+#define STMT_187 \
+ "SELECT local_relpath, moved_to, op_depth, " \
+ " (SELECT CASE WHEN r.moved_here THEN r.op_depth END FROM nodes r " \
+ " WHERE r.wc_id = ?1 " \
+ " AND r.local_relpath = n.local_relpath " \
+ " AND r.op_depth < n.op_depth " \
+ " ORDER BY r.op_depth DESC LIMIT 1) AS moved_here_op_depth " \
+ " FROM nodes n " \
"WHERE wc_id = ?1 " \
- " AND (?2 = '' " \
- " OR local_relpath = ?2 " \
- " OR ((local_relpath) > (?2) || '/' AND (local_relpath) < (?2) || '0') ) " \
+ " AND (local_relpath = ?2 OR (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
+ " AND moved_to IS NOT NULL " \
+ " AND op_depth >= ?3 " \
+ ""
+
+#define STMT_SELECT_MOVED_FROM_FOR_DELETE 188
+#define STMT_188_INFO {"STMT_SELECT_MOVED_FROM_FOR_DELETE", NULL}
+#define STMT_188 \
+ "SELECT local_relpath, op_depth, " \
+ " (SELECT CASE WHEN r.moved_here THEN r.op_depth END FROM nodes r " \
+ " WHERE r.wc_id = ?1 " \
+ " AND r.local_relpath = n.local_relpath " \
+ " AND r.op_depth < n.op_depth " \
+ " ORDER BY r.op_depth DESC LIMIT 1) AS moved_here_op_depth " \
+ " FROM nodes n " \
+ "WHERE wc_id = ?1 AND moved_to = ?2 AND op_depth > 0 " \
+ ""
+
+#define STMT_UPDATE_MOVED_TO_DESCENDANTS 189
+#define STMT_189_INFO {"STMT_UPDATE_MOVED_TO_DESCENDANTS", NULL}
+#define STMT_189 \
+ "UPDATE nodes SET moved_to = (CASE WHEN (?2) = '' THEN (CASE WHEN (?3) = '' THEN (moved_to) WHEN (moved_to) = '' THEN (?3) ELSE (?3) || '/' || (moved_to) END) WHEN (?3) = '' THEN (CASE WHEN (?2) = '' THEN (moved_to) WHEN SUBSTR((moved_to), 1, LENGTH(?2)) = (?2) THEN CASE WHEN LENGTH(?2) = LENGTH(moved_to) THEN '' WHEN SUBSTR((moved_to), LENGTH(?2)+1, 1) = '/' THEN SUBSTR((moved_to), LENGTH(?2)+2) END END) WHEN SUBSTR((moved_to), 1, LENGTH(?2)) = (?2) THEN CASE WHEN LENGTH(?2) = LENGTH(moved_to) THEN (?3) WHEN SUBSTR((moved_to), LENGTH(?2)+1, 1) = '/' THEN (?3) || SUBSTR((moved_to), LENGTH(?2)+1) END END) " \
+ " WHERE wc_id = ?1 " \
+ " AND (((moved_to) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((moved_to) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ ""
+
+#define STMT_CLEAR_MOVED_TO_DESCENDANTS 190
+#define STMT_190_INFO {"STMT_CLEAR_MOVED_TO_DESCENDANTS", NULL}
+#define STMT_190 \
+ "UPDATE nodes SET moved_to = NULL " \
+ " WHERE wc_id = ?1 " \
+ " AND (((moved_to) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((moved_to) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ ""
+
+#define STMT_SELECT_MOVED_PAIR2 191
+#define STMT_191_INFO {"STMT_SELECT_MOVED_PAIR2", NULL}
+#define STMT_191 \
+ "SELECT local_relpath, moved_to, op_depth FROM nodes " \
+ "WHERE wc_id = ?1 " \
+ " AND (local_relpath = ?2 OR (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
+ " AND moved_to IS NOT NULL " \
+ " AND NOT (((moved_to) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((moved_to) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ " AND op_depth >= (SELECT MAX(op_depth) FROM nodes o " \
+ " WHERE o.wc_id = ?1 " \
+ " AND o.local_relpath = ?2) " \
+ ""
+
+#define STMT_SELECT_MOVED_PAIR3 192
+#define STMT_192_INFO {"STMT_SELECT_MOVED_PAIR3", NULL}
+#define STMT_192 \
+ "SELECT local_relpath, moved_to, op_depth, kind FROM nodes " \
+ "WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3 " \
+ " AND moved_to IS NOT NULL " \
+ "UNION ALL " \
+ "SELECT local_relpath, moved_to, op_depth, kind FROM nodes " \
+ "WHERE wc_id = ?1 " \
+ " AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ " AND op_depth > ?3 " \
+ " AND moved_to IS NOT NULL " \
+ "ORDER BY local_relpath, op_depth " \
+ ""
+
+#define STMT_SELECT_MOVED_OUTSIDE 193
+#define STMT_193_INFO {"STMT_SELECT_MOVED_OUTSIDE", NULL}
+#define STMT_193 \
+ "SELECT local_relpath, moved_to, op_depth FROM nodes " \
+ "WHERE wc_id = ?1 " \
+ " AND (local_relpath = ?2 OR (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
+ " AND op_depth >= ?3 " \
+ " AND moved_to IS NOT NULL " \
+ " AND NOT (((moved_to) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((moved_to) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ ""
+
+#define STMT_SELECT_OP_DEPTH_MOVED_PAIR 194
+#define STMT_194_INFO {"STMT_SELECT_OP_DEPTH_MOVED_PAIR", NULL}
+#define STMT_194 \
+ "SELECT n.local_relpath, n.moved_to, " \
+ " (SELECT o.repos_path FROM nodes AS o " \
+ " WHERE o.wc_id = n.wc_id " \
+ " AND o.local_relpath = n.local_relpath " \
+ " AND o.op_depth < ?3 ORDER BY o.op_depth DESC LIMIT 1) " \
+ "FROM nodes AS n " \
+ "WHERE n.wc_id = ?1 " \
+ " AND (((n.local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((n.local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ " AND n.op_depth = ?3 " \
+ " AND n.moved_to IS NOT NULL " \
+ ""
+
+#define STMT_SELECT_MOVED_DESCENDANTS 195
+#define STMT_195_INFO {"STMT_SELECT_MOVED_DESCENDANTS", NULL}
+#define STMT_195 \
+ "SELECT n.local_relpath, h.moved_to " \
+ "FROM nodes n, nodes h " \
+ "WHERE n.wc_id = ?1 " \
+ " AND h.wc_id = ?1 " \
+ " AND (((n.local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((n.local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ " AND h.local_relpath = n.local_relpath " \
+ " AND n.op_depth = ?3 " \
+ " AND h.op_depth = (SELECT MIN(o.op_depth) " \
+ " FROM nodes o " \
+ " WHERE o.wc_id = ?1 " \
+ " AND o.local_relpath = n.local_relpath " \
+ " AND o.op_depth > ?3) " \
+ " AND h.moved_to IS NOT NULL " \
+ ""
+
+#define STMT_COMMIT_UPDATE_ORIGIN 196
+#define STMT_196_INFO {"STMT_COMMIT_UPDATE_ORIGIN", NULL}
+#define STMT_196 \
+ "UPDATE nodes SET repos_id = ?4, " \
+ " repos_path = ?5 || SUBSTR(local_relpath, LENGTH(?2)+1), " \
+ " revision = ?6 " \
+ "WHERE wc_id = ?1 " \
+ " AND (local_relpath = ?2 " \
+ " OR (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END))) " \
+ " AND op_depth = ?3 " \
+ ""
+
+#define STMT_HAS_LAYER_BETWEEN 197
+#define STMT_197_INFO {"STMT_HAS_LAYER_BETWEEN", NULL}
+#define STMT_197 \
+ "SELECT 1 FROM NODES " \
+ "WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3 AND op_depth < ?4 " \
+ ""
+
+#define STMT_SELECT_REPOS_PATH_REVISION 198
+#define STMT_198_INFO {"STMT_SELECT_REPOS_PATH_REVISION", NULL}
+#define STMT_198 \
+ "SELECT local_relpath, repos_path, revision FROM nodes " \
+ "WHERE wc_id = ?1 " \
+ " AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ " AND op_depth = 0 " \
+ "ORDER BY local_relpath " \
+ ""
+
+#define STMT_SELECT_HAS_NON_FILE_CHILDREN 199
+#define STMT_199_INFO {"STMT_SELECT_HAS_NON_FILE_CHILDREN", NULL}
+#define STMT_199 \
+ "SELECT 1 FROM nodes " \
+ "WHERE wc_id = ?1 AND parent_relpath = ?2 AND op_depth = 0 AND kind != 'file' " \
+ ""
+
+#define STMT_SELECT_HAS_GRANDCHILDREN 200
+#define STMT_200_INFO {"STMT_SELECT_HAS_GRANDCHILDREN", NULL}
+#define STMT_200 \
+ "SELECT 1 FROM nodes " \
+ "WHERE wc_id = ?1 " \
+ " AND (((parent_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((parent_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
" AND op_depth = 0 " \
- " AND kind='file' " \
- " AND presence='normal' " \
" AND file_external IS NULL " \
""
-#define STMT_SELECT_ALL_NODES 172
-#define STMT_172 \
+#define STMT_SELECT_ALL_NODES 201
+#define STMT_201_INFO {"STMT_SELECT_ALL_NODES", NULL}
+#define STMT_201 \
"SELECT op_depth, local_relpath, parent_relpath, file_external FROM nodes " \
- "WHERE wc_id == ?1 " \
+ "WHERE wc_id = ?1 " \
""
-#define STMT_CREATE_SCHEMA 173
-#define STMT_173 \
+#define STMT_SELECT_IPROPS 202
+#define STMT_202_INFO {"STMT_SELECT_IPROPS", NULL}
+#define STMT_202 \
+ "SELECT inherited_props FROM nodes " \
+ "WHERE wc_id = ?1 " \
+ " AND local_relpath = ?2 " \
+ " AND op_depth = 0 " \
+ ""
+
+#define STMT_UPDATE_IPROP 203
+#define STMT_203_INFO {"STMT_UPDATE_IPROP", NULL}
+#define STMT_203 \
+ "UPDATE nodes " \
+ "SET inherited_props = ?3 " \
+ "WHERE (wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0) " \
+ ""
+
+#define STMT_SELECT_IPROPS_NODE 204
+#define STMT_204_INFO {"STMT_SELECT_IPROPS_NODE", NULL}
+#define STMT_204 \
+ "SELECT local_relpath, repos_path FROM nodes " \
+ "WHERE wc_id = ?1 " \
+ " AND local_relpath = ?2 " \
+ " AND op_depth = 0 " \
+ " AND (inherited_props not null) " \
+ ""
+
+#define STMT_SELECT_IPROPS_RECURSIVE 205
+#define STMT_205_INFO {"STMT_SELECT_IPROPS_RECURSIVE", NULL}
+#define STMT_205 \
+ "SELECT local_relpath, repos_path FROM nodes " \
+ "WHERE wc_id = ?1 " \
+ " AND (((local_relpath) > (CASE (?2) WHEN '' THEN '' ELSE (?2) || '/' END)) AND ((local_relpath) < CASE (?2) WHEN '' THEN X'FFFF' ELSE (?2) || '0' END)) " \
+ " AND op_depth = 0 " \
+ " AND (inherited_props not null) " \
+ ""
+
+#define STMT_SELECT_IPROPS_CHILDREN 206
+#define STMT_206_INFO {"STMT_SELECT_IPROPS_CHILDREN", NULL}
+#define STMT_206 \
+ "SELECT local_relpath, repos_path FROM nodes " \
+ "WHERE wc_id = ?1 " \
+ " AND parent_relpath = ?2 " \
+ " AND op_depth = 0 " \
+ " AND (inherited_props not null) " \
+ ""
+
+#define STMT_HAVE_STAT1_TABLE 207
+#define STMT_207_INFO {"STMT_HAVE_STAT1_TABLE", NULL}
+#define STMT_207 \
+ "SELECT 1 FROM sqlite_master WHERE name='sqlite_stat1' AND type='table' " \
+ "LIMIT 1 " \
+ ""
+
+#define STMT_CREATE_SCHEMA 208
+#define STMT_208_INFO {"STMT_CREATE_SCHEMA", NULL}
+#define STMT_208 \
"CREATE TABLE REPOSITORY ( " \
" id INTEGER PRIMARY KEY AUTOINCREMENT, " \
" root TEXT UNIQUE NOT NULL, " \
@@ -1615,6 +2201,7 @@
" refcount INTEGER NOT NULL, " \
" md5_checksum TEXT NOT NULL " \
" ); " \
+ "CREATE INDEX I_PRISTINE_MD5 ON PRISTINE (md5_checksum); " \
"CREATE TABLE ACTUAL_NODE ( " \
" wc_id INTEGER NOT NULL REFERENCES WCROOT (id), " \
" local_relpath TEXT NOT NULL, " \
@@ -1633,8 +2220,8 @@
" right_checksum TEXT REFERENCES PRISTINE (checksum), " \
" PRIMARY KEY (wc_id, local_relpath) " \
" ); " \
- "CREATE INDEX I_ACTUAL_PARENT ON ACTUAL_NODE (wc_id, parent_relpath); " \
- "CREATE INDEX I_ACTUAL_CHANGELIST ON ACTUAL_NODE (changelist); " \
+ "CREATE UNIQUE INDEX I_ACTUAL_PARENT ON ACTUAL_NODE (wc_id, parent_relpath, " \
+ " local_relpath); " \
"CREATE TABLE LOCK ( " \
" repos_id INTEGER NOT NULL REFERENCES REPOSITORY (id), " \
" repos_relpath TEXT NOT NULL, " \
@@ -1659,8 +2246,9 @@
"; " \
""
-#define STMT_CREATE_NODES 174
-#define STMT_174 \
+#define STMT_CREATE_NODES 209
+#define STMT_209_INFO {"STMT_CREATE_NODES", NULL}
+#define STMT_209 \
"CREATE TABLE NODES ( " \
" wc_id INTEGER NOT NULL REFERENCES WCROOT (id), " \
" local_relpath TEXT NOT NULL, " \
@@ -1683,10 +2271,13 @@
" translated_size INTEGER, " \
" last_mod_time INTEGER, " \
" dav_cache BLOB, " \
- " file_external TEXT, " \
+ " file_external INTEGER, " \
+ " inherited_props BLOB, " \
" PRIMARY KEY (wc_id, local_relpath, op_depth) " \
" ); " \
- "CREATE INDEX I_NODES_PARENT ON NODES (wc_id, parent_relpath, op_depth); " \
+ "CREATE UNIQUE INDEX I_NODES_PARENT ON NODES (wc_id, parent_relpath, " \
+ " local_relpath, op_depth); " \
+ "CREATE UNIQUE INDEX I_NODES_MOVED ON NODES (wc_id, moved_to, op_depth); " \
"CREATE VIEW NODES_CURRENT AS " \
" SELECT * FROM nodes AS n " \
" WHERE op_depth = (SELECT MAX(op_depth) FROM nodes AS n2 " \
@@ -1697,8 +2288,9 @@
" WHERE op_depth = 0; " \
""
-#define STMT_CREATE_NODES_TRIGGERS 175
-#define STMT_175 \
+#define STMT_CREATE_NODES_TRIGGERS 210
+#define STMT_210_INFO {"STMT_CREATE_NODES_TRIGGERS", NULL}
+#define STMT_210 \
"CREATE TRIGGER nodes_insert_trigger " \
"AFTER INSERT ON nodes " \
"WHEN NEW.checksum IS NOT NULL " \
@@ -1724,8 +2316,9 @@
"END; " \
""
-#define STMT_CREATE_EXTERNALS 176
-#define STMT_176 \
+#define STMT_CREATE_EXTERNALS 211
+#define STMT_211_INFO {"STMT_CREATE_EXTERNALS", NULL}
+#define STMT_211 \
"CREATE TABLE EXTERNALS ( " \
" wc_id INTEGER NOT NULL REFERENCES WCROOT (id), " \
" local_relpath TEXT NOT NULL, " \
@@ -1739,20 +2332,44 @@
" def_revision TEXT, " \
" PRIMARY KEY (wc_id, local_relpath) " \
"); " \
- "CREATE INDEX I_EXTERNALS_PARENT ON EXTERNALS (wc_id, parent_relpath); " \
"CREATE UNIQUE INDEX I_EXTERNALS_DEFINED ON EXTERNALS (wc_id, " \
" def_local_relpath, " \
" local_relpath); " \
""
-#define STMT_UPGRADE_TO_20 177
-#define STMT_177 \
- "UPDATE BASE_NODE SET checksum=(SELECT checksum FROM pristine " \
- " WHERE md5_checksum=BASE_NODE.checksum) " \
- "WHERE EXISTS(SELECT 1 FROM pristine WHERE md5_checksum=BASE_NODE.checksum); " \
- "UPDATE WORKING_NODE SET checksum=(SELECT checksum FROM pristine " \
- " WHERE md5_checksum=WORKING_NODE.checksum) " \
- "WHERE EXISTS(SELECT 1 FROM pristine WHERE md5_checksum=WORKING_NODE.checksum); " \
+#define STMT_INSTALL_SCHEMA_STATISTICS 212
+#define STMT_212_INFO {"STMT_INSTALL_SCHEMA_STATISTICS", NULL}
+#define STMT_212 \
+ "ANALYZE sqlite_master; " \
+ "DELETE FROM sqlite_stat1 " \
+ "WHERE tbl in ('NODES', 'ACTUAL_NODE', 'LOCK', 'WC_LOCK'); " \
+ "INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES " \
+ " ('NODES', 'sqlite_autoindex_NODES_1', '8000 8000 2 1'); " \
+ "INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES " \
+ " ('NODES', 'I_NODES_PARENT', '8000 8000 10 2 1'); " \
+ "INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES " \
+ " ('NODES', 'I_NODES_MOVED', '8000 8000 1 1'); " \
+ "INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES " \
+ " ('ACTUAL_NODE', 'sqlite_autoindex_ACTUAL_NODE_1', '8000 8000 1'); " \
+ "INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES " \
+ " ('ACTUAL_NODE', 'I_ACTUAL_PARENT', '8000 8000 10 1'); " \
+ "INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES " \
+ " ('LOCK', 'sqlite_autoindex_LOCK_1', '100 100 1'); " \
+ "INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES " \
+ " ('WC_LOCK', 'sqlite_autoindex_WC_LOCK_1', '100 100 1'); " \
+ "ANALYZE sqlite_master; " \
+ ""
+
+#define STMT_UPGRADE_TO_20 213
+#define STMT_213_INFO {"STMT_UPGRADE_TO_20", NULL}
+#define STMT_213 \
+ "UPDATE BASE_NODE SET checksum = (SELECT checksum FROM pristine " \
+ " WHERE md5_checksum = BASE_NODE.checksum) " \
+ "WHERE EXISTS (SELECT 1 FROM pristine WHERE md5_checksum = BASE_NODE.checksum); " \
+ "UPDATE WORKING_NODE SET checksum = (SELECT checksum FROM pristine " \
+ " WHERE md5_checksum = WORKING_NODE.checksum) " \
+ "WHERE EXISTS (SELECT 1 FROM pristine " \
+ " WHERE md5_checksum = WORKING_NODE.checksum); " \
"INSERT INTO NODES ( " \
" wc_id, local_relpath, op_depth, parent_relpath, " \
" repos_id, repos_path, revision, " \
@@ -1786,33 +2403,59 @@
"PRAGMA user_version = 20; " \
""
-#define STMT_UPGRADE_TO_21 178
-#define STMT_178 \
+#define STMT_UPGRADE_TO_21 214
+#define STMT_214_INFO {"STMT_UPGRADE_TO_21", NULL}
+#define STMT_214 \
"PRAGMA user_version = 21; " \
""
-#define STMT_UPGRADE_TO_22 179
-#define STMT_179 \
+#define STMT_UPGRADE_21_SELECT_OLD_TREE_CONFLICT 215
+#define STMT_215_INFO {"STMT_UPGRADE_21_SELECT_OLD_TREE_CONFLICT", NULL}
+#define STMT_215 \
+ "SELECT wc_id, local_relpath, tree_conflict_data " \
+ "FROM actual_node " \
+ "WHERE tree_conflict_data IS NOT NULL " \
+ ""
+
+#define STMT_UPGRADE_21_ERASE_OLD_CONFLICTS 216
+#define STMT_216_INFO {"STMT_UPGRADE_21_ERASE_OLD_CONFLICTS", NULL}
+#define STMT_216 \
+ "UPDATE actual_node SET tree_conflict_data = NULL " \
+ ""
+
+#define STMT_UPGRADE_TO_22 217
+#define STMT_217_INFO {"STMT_UPGRADE_TO_22", NULL}
+#define STMT_217 \
"UPDATE actual_node SET tree_conflict_data = conflict_data; " \
"UPDATE actual_node SET conflict_data = NULL; " \
"PRAGMA user_version = 22; " \
""
-#define STMT_UPGRADE_TO_23 180
-#define STMT_180 \
+#define STMT_UPGRADE_TO_23 218
+#define STMT_218_INFO {"STMT_UPGRADE_TO_23", NULL}
+#define STMT_218 \
"PRAGMA user_version = 23; " \
""
-#define STMT_UPGRADE_TO_24 181
-#define STMT_181 \
+#define STMT_UPGRADE_23_HAS_WORKING_NODES 219
+#define STMT_219_INFO {"STMT_UPGRADE_23_HAS_WORKING_NODES", NULL}
+#define STMT_219 \
+ "SELECT 1 FROM nodes WHERE op_depth > 0 " \
+ "LIMIT 1 " \
+ ""
+
+#define STMT_UPGRADE_TO_24 220
+#define STMT_220_INFO {"STMT_UPGRADE_TO_24", NULL}
+#define STMT_220 \
"UPDATE pristine SET refcount = " \
" (SELECT COUNT(*) FROM nodes " \
" WHERE checksum = pristine.checksum ); " \
"PRAGMA user_version = 24; " \
""
-#define STMT_UPGRADE_TO_25 182
-#define STMT_182 \
+#define STMT_UPGRADE_TO_25 221
+#define STMT_221_INFO {"STMT_UPGRADE_TO_25", NULL}
+#define STMT_221 \
"DROP VIEW IF EXISTS NODES_CURRENT; " \
"CREATE VIEW NODES_CURRENT AS " \
" SELECT * FROM nodes " \
@@ -1824,8 +2467,9 @@
"PRAGMA user_version = 25; " \
""
-#define STMT_UPGRADE_TO_26 183
-#define STMT_183 \
+#define STMT_UPGRADE_TO_26 222
+#define STMT_222_INFO {"STMT_UPGRADE_TO_26", NULL}
+#define STMT_222 \
"DROP VIEW IF EXISTS NODES_BASE; " \
"CREATE VIEW NODES_BASE AS " \
" SELECT * FROM nodes " \
@@ -1833,21 +2477,34 @@
"PRAGMA user_version = 26; " \
""
-#define STMT_UPGRADE_TO_27 184
-#define STMT_184 \
+#define STMT_UPGRADE_TO_27 223
+#define STMT_223_INFO {"STMT_UPGRADE_TO_27", NULL}
+#define STMT_223 \
"PRAGMA user_version = 27; " \
""
-#define STMT_UPGRADE_TO_28 185
-#define STMT_185 \
- "UPDATE NODES SET checksum=(SELECT checksum FROM pristine " \
- " WHERE md5_checksum=nodes.checksum) " \
- "WHERE EXISTS(SELECT 1 FROM pristine WHERE md5_checksum=nodes.checksum); " \
+#define STMT_UPGRADE_27_HAS_ACTUAL_NODES_CONFLICTS 224
+#define STMT_224_INFO {"STMT_UPGRADE_27_HAS_ACTUAL_NODES_CONFLICTS", NULL}
+#define STMT_224 \
+ "SELECT 1 FROM actual_node " \
+ "WHERE NOT ((prop_reject IS NULL) AND (conflict_old IS NULL) " \
+ " AND (conflict_new IS NULL) AND (conflict_working IS NULL) " \
+ " AND (tree_conflict_data IS NULL)) " \
+ "LIMIT 1 " \
+ ""
+
+#define STMT_UPGRADE_TO_28 225
+#define STMT_225_INFO {"STMT_UPGRADE_TO_28", NULL}
+#define STMT_225 \
+ "UPDATE NODES SET checksum = (SELECT checksum FROM pristine " \
+ " WHERE md5_checksum = nodes.checksum) " \
+ "WHERE EXISTS (SELECT 1 FROM pristine WHERE md5_checksum = nodes.checksum); " \
"PRAGMA user_version = 28; " \
""
-#define STMT_UPGRADE_TO_29 186
-#define STMT_186 \
+#define STMT_UPGRADE_TO_29 226
+#define STMT_226_INFO {"STMT_UPGRADE_TO_29", NULL}
+#define STMT_226 \
"DROP TRIGGER IF EXISTS nodes_update_checksum_trigger; " \
"DROP TRIGGER IF EXISTS nodes_insert_trigger; " \
"DROP TRIGGER IF EXISTS nodes_delete_trigger; " \
@@ -1875,6 +2532,87 @@
" WHERE checksum = OLD.checksum; " \
"END; " \
"PRAGMA user_version = 29; " \
+ ""
+
+#define STMT_UPGRADE_TO_30 227
+#define STMT_227_INFO {"STMT_UPGRADE_TO_30", NULL}
+#define STMT_227 \
+ "CREATE UNIQUE INDEX IF NOT EXISTS I_NODES_MOVED " \
+ "ON NODES (wc_id, moved_to, op_depth); " \
+ "CREATE INDEX IF NOT EXISTS I_PRISTINE_MD5 ON PRISTINE (md5_checksum); " \
+ "UPDATE nodes SET presence = \"server-excluded\" WHERE presence = \"absent\"; " \
+ "UPDATE nodes SET file_external=1 WHERE file_external IS NOT NULL; " \
+ ""
+
+#define STMT_UPGRADE_30_SELECT_CONFLICT_SEPARATE 228
+#define STMT_228_INFO {"STMT_UPGRADE_30_SELECT_CONFLICT_SEPARATE", NULL}
+#define STMT_228 \
+ "SELECT wc_id, local_relpath, " \
+ " conflict_old, conflict_working, conflict_new, prop_reject, tree_conflict_data " \
+ "FROM actual_node " \
+ "WHERE conflict_old IS NOT NULL " \
+ " OR conflict_working IS NOT NULL " \
+ " OR conflict_new IS NOT NULL " \
+ " OR prop_reject IS NOT NULL " \
+ " OR tree_conflict_data IS NOT NULL " \
+ "ORDER by wc_id, local_relpath " \
+ ""
+
+#define STMT_UPGRADE_30_SET_CONFLICT 229
+#define STMT_229_INFO {"STMT_UPGRADE_30_SET_CONFLICT", NULL}
+#define STMT_229 \
+ "UPDATE actual_node SET conflict_data = ?3, conflict_old = NULL, " \
+ " conflict_working = NULL, conflict_new = NULL, prop_reject = NULL, " \
+ " tree_conflict_data = NULL " \
+ "WHERE wc_id = ?1 and local_relpath = ?2 " \
+ ""
+
+#define STMT_UPGRADE_TO_31_ALTER_TABLE 230
+#define STMT_230_INFO {"STMT_UPGRADE_TO_31_ALTER_TABLE", NULL}
+#define STMT_230 \
+ "ALTER TABLE NODES ADD COLUMN inherited_props BLOB; " \
+ ""
+
+#define STMT_UPGRADE_TO_31_FINALIZE 231
+#define STMT_231_INFO {"STMT_UPGRADE_TO_31_FINALIZE", NULL}
+#define STMT_231 \
+ "DROP INDEX IF EXISTS I_ACTUAL_CHANGELIST; " \
+ "DROP INDEX IF EXISTS I_EXTERNALS_PARENT; " \
+ "DROP INDEX I_NODES_PARENT; " \
+ "CREATE UNIQUE INDEX I_NODES_PARENT ON NODES (wc_id, parent_relpath, " \
+ " local_relpath, op_depth); " \
+ "DROP INDEX I_ACTUAL_PARENT; " \
+ "CREATE UNIQUE INDEX I_ACTUAL_PARENT ON ACTUAL_NODE (wc_id, parent_relpath, " \
+ " local_relpath); " \
+ "PRAGMA user_version = 31; " \
+ ""
+
+#define STMT_UPGRADE_31_SELECT_WCROOT_NODES 232
+#define STMT_232_INFO {"STMT_UPGRADE_31_SELECT_WCROOT_NODES", NULL}
+#define STMT_232 \
+ "SELECT l.wc_id, l.local_relpath FROM nodes as l " \
+ "LEFT OUTER JOIN nodes as r " \
+ "ON l.wc_id = r.wc_id " \
+ " AND r.local_relpath = l.parent_relpath " \
+ " AND r.op_depth = 0 " \
+ "WHERE l.op_depth = 0 " \
+ " AND l.repos_path != '' " \
+ " AND ((l.repos_id IS NOT r.repos_id) " \
+ " OR (l.repos_path IS NOT (CASE WHEN (r.local_relpath) = '' THEN (CASE WHEN (r.repos_path) = '' THEN (l.local_relpath) WHEN (l.local_relpath) = '' THEN (r.repos_path) ELSE (r.repos_path) || '/' || (l.local_relpath) END) WHEN (r.repos_path) = '' THEN (CASE WHEN (r.local_relpath) = '' THEN (l.local_relpath) WHEN SUBSTR((l.local_relpath), 1, LENGTH(r.local_relpath)) = (r.local_relpath) THEN CASE WHEN LENGTH(r.local_relpath) = LENGTH(l.local_relpath) THEN '' WHEN SUBSTR((l.local_relpath), LENGTH(r.local_relpath)+1, 1) = '/' THEN SUBSTR((l.local_relpath), LENGTH(r.local_relpath)+2) END END) WHEN SUBSTR((l.local_relpath), 1, LENGTH(r.local_relpath)) = (r.local_relpath) THEN CASE WHEN LENGTH(r.local_relpath) = LENGTH(l.local_relpath) THEN (r.repos_path) WHEN SUBSTR((l.local_relpath), LENGTH(r.local_relpath)+1, 1) = '/' THEN (r.repos_path) || SUBSTR((l.local_relpath), LENGTH(r.local_relpath)+1) END END))) " \
+ ""
+
+#define STMT_UPGRADE_TO_32 233
+#define STMT_233_INFO {"STMT_UPGRADE_TO_32", NULL}
+#define STMT_233 \
+ "DROP INDEX IF EXISTS I_ACTUAL_CHANGELIST; " \
+ "DROP INDEX IF EXISTS I_EXTERNALS_PARENT; " \
+ "CREATE INDEX I_EXTERNALS_PARENT ON EXTERNALS (wc_id, parent_relpath); " \
+ "DROP INDEX I_NODES_PARENT; " \
+ "CREATE UNIQUE INDEX I_NODES_PARENT ON NODES (wc_id, parent_relpath, " \
+ " local_relpath, op_depth); " \
+ "DROP INDEX I_ACTUAL_PARENT; " \
+ "CREATE UNIQUE INDEX I_ACTUAL_PARENT ON ACTUAL_NODE (wc_id, parent_relpath, " \
+ " local_relpath); " \
"-- format: YYY " \
""
@@ -1909,8 +2647,8 @@
" text_mod TEXT, " \
" PRIMARY KEY (wc_id, local_relpath) " \
" ); " \
- "CREATE INDEX I_ACTUAL_PARENT ON ACTUAL_NODE (wc_id, parent_relpath); " \
- "CREATE INDEX I_ACTUAL_CHANGELIST ON ACTUAL_NODE (changelist); " \
+ "CREATE UNIQUE INDEX I_ACTUAL_PARENT ON ACTUAL_NODE (wc_id, parent_relpath, " \
+ " local_relpath); " \
"INSERT INTO ACTUAL_NODE SELECT " \
" wc_id, local_relpath, parent_relpath, properties, conflict_old, " \
" conflict_new, conflict_working, prop_reject, changelist, text_mod " \
@@ -1918,8 +2656,9 @@
"DROP TABLE ACTUAL_NODE_BACKUP; " \
""
-#define STMT_VERIFICATION_TRIGGERS 187
-#define STMT_187 \
+#define STMT_VERIFICATION_TRIGGERS 234
+#define STMT_234_INFO {"STMT_VERIFICATION_TRIGGERS", NULL}
+#define STMT_234 \
"CREATE TEMPORARY TRIGGER no_repository_updates BEFORE UPDATE ON repository " \
"BEGIN " \
" SELECT RAISE(FAIL, 'Updates to REPOSITORY are not allowed.'); " \
@@ -2148,5 +2887,292 @@
STMT_185, \
STMT_186, \
STMT_187, \
+ STMT_188, \
+ STMT_189, \
+ STMT_190, \
+ STMT_191, \
+ STMT_192, \
+ STMT_193, \
+ STMT_194, \
+ STMT_195, \
+ STMT_196, \
+ STMT_197, \
+ STMT_198, \
+ STMT_199, \
+ STMT_200, \
+ STMT_201, \
+ STMT_202, \
+ STMT_203, \
+ STMT_204, \
+ STMT_205, \
+ STMT_206, \
+ STMT_207, \
+ STMT_208, \
+ STMT_209, \
+ STMT_210, \
+ STMT_211, \
+ STMT_212, \
+ STMT_213, \
+ STMT_214, \
+ STMT_215, \
+ STMT_216, \
+ STMT_217, \
+ STMT_218, \
+ STMT_219, \
+ STMT_220, \
+ STMT_221, \
+ STMT_222, \
+ STMT_223, \
+ STMT_224, \
+ STMT_225, \
+ STMT_226, \
+ STMT_227, \
+ STMT_228, \
+ STMT_229, \
+ STMT_230, \
+ STMT_231, \
+ STMT_232, \
+ STMT_233, \
+ STMT_234, \
NULL \
}
+
+#define WC_QUERIES_SQL_DECLARE_STATEMENT_INFO(varname) \
+ static const char * const varname[][2] = { \
+ STMT_0_INFO, \
+ STMT_1_INFO, \
+ STMT_2_INFO, \
+ STMT_3_INFO, \
+ STMT_4_INFO, \
+ STMT_5_INFO, \
+ STMT_6_INFO, \
+ STMT_7_INFO, \
+ STMT_8_INFO, \
+ STMT_9_INFO, \
+ STMT_10_INFO, \
+ STMT_11_INFO, \
+ STMT_12_INFO, \
+ STMT_13_INFO, \
+ STMT_14_INFO, \
+ STMT_15_INFO, \
+ STMT_16_INFO, \
+ STMT_17_INFO, \
+ STMT_18_INFO, \
+ STMT_19_INFO, \
+ STMT_20_INFO, \
+ STMT_21_INFO, \
+ STMT_22_INFO, \
+ STMT_23_INFO, \
+ STMT_24_INFO, \
+ STMT_25_INFO, \
+ STMT_26_INFO, \
+ STMT_27_INFO, \
+ STMT_28_INFO, \
+ STMT_29_INFO, \
+ STMT_30_INFO, \
+ STMT_31_INFO, \
+ STMT_32_INFO, \
+ STMT_33_INFO, \
+ STMT_34_INFO, \
+ STMT_35_INFO, \
+ STMT_36_INFO, \
+ STMT_37_INFO, \
+ STMT_38_INFO, \
+ STMT_39_INFO, \
+ STMT_40_INFO, \
+ STMT_41_INFO, \
+ STMT_42_INFO, \
+ STMT_43_INFO, \
+ STMT_44_INFO, \
+ STMT_45_INFO, \
+ STMT_46_INFO, \
+ STMT_47_INFO, \
+ STMT_48_INFO, \
+ STMT_49_INFO, \
+ STMT_50_INFO, \
+ STMT_51_INFO, \
+ STMT_52_INFO, \
+ STMT_53_INFO, \
+ STMT_54_INFO, \
+ STMT_55_INFO, \
+ STMT_56_INFO, \
+ STMT_57_INFO, \
+ STMT_58_INFO, \
+ STMT_59_INFO, \
+ STMT_60_INFO, \
+ STMT_61_INFO, \
+ STMT_62_INFO, \
+ STMT_63_INFO, \
+ STMT_64_INFO, \
+ STMT_65_INFO, \
+ STMT_66_INFO, \
+ STMT_67_INFO, \
+ STMT_68_INFO, \
+ STMT_69_INFO, \
+ STMT_70_INFO, \
+ STMT_71_INFO, \
+ STMT_72_INFO, \
+ STMT_73_INFO, \
+ STMT_74_INFO, \
+ STMT_75_INFO, \
+ STMT_76_INFO, \
+ STMT_77_INFO, \
+ STMT_78_INFO, \
+ STMT_79_INFO, \
+ STMT_80_INFO, \
+ STMT_81_INFO, \
+ STMT_82_INFO, \
+ STMT_83_INFO, \
+ STMT_84_INFO, \
+ STMT_85_INFO, \
+ STMT_86_INFO, \
+ STMT_87_INFO, \
+ STMT_88_INFO, \
+ STMT_89_INFO, \
+ STMT_90_INFO, \
+ STMT_91_INFO, \
+ STMT_92_INFO, \
+ STMT_93_INFO, \
+ STMT_94_INFO, \
+ STMT_95_INFO, \
+ STMT_96_INFO, \
+ STMT_97_INFO, \
+ STMT_98_INFO, \
+ STMT_99_INFO, \
+ STMT_100_INFO, \
+ STMT_101_INFO, \
+ STMT_102_INFO, \
+ STMT_103_INFO, \
+ STMT_104_INFO, \
+ STMT_105_INFO, \
+ STMT_106_INFO, \
+ STMT_107_INFO, \
+ STMT_108_INFO, \
+ STMT_109_INFO, \
+ STMT_110_INFO, \
+ STMT_111_INFO, \
+ STMT_112_INFO, \
+ STMT_113_INFO, \
+ STMT_114_INFO, \
+ STMT_115_INFO, \
+ STMT_116_INFO, \
+ STMT_117_INFO, \
+ STMT_118_INFO, \
+ STMT_119_INFO, \
+ STMT_120_INFO, \
+ STMT_121_INFO, \
+ STMT_122_INFO, \
+ STMT_123_INFO, \
+ STMT_124_INFO, \
+ STMT_125_INFO, \
+ STMT_126_INFO, \
+ STMT_127_INFO, \
+ STMT_128_INFO, \
+ STMT_129_INFO, \
+ STMT_130_INFO, \
+ STMT_131_INFO, \
+ STMT_132_INFO, \
+ STMT_133_INFO, \
+ STMT_134_INFO, \
+ STMT_135_INFO, \
+ STMT_136_INFO, \
+ STMT_137_INFO, \
+ STMT_138_INFO, \
+ STMT_139_INFO, \
+ STMT_140_INFO, \
+ STMT_141_INFO, \
+ STMT_142_INFO, \
+ STMT_143_INFO, \
+ STMT_144_INFO, \
+ STMT_145_INFO, \
+ STMT_146_INFO, \
+ STMT_147_INFO, \
+ STMT_148_INFO, \
+ STMT_149_INFO, \
+ STMT_150_INFO, \
+ STMT_151_INFO, \
+ STMT_152_INFO, \
+ STMT_153_INFO, \
+ STMT_154_INFO, \
+ STMT_155_INFO, \
+ STMT_156_INFO, \
+ STMT_157_INFO, \
+ STMT_158_INFO, \
+ STMT_159_INFO, \
+ STMT_160_INFO, \
+ STMT_161_INFO, \
+ STMT_162_INFO, \
+ STMT_163_INFO, \
+ STMT_164_INFO, \
+ STMT_165_INFO, \
+ STMT_166_INFO, \
+ STMT_167_INFO, \
+ STMT_168_INFO, \
+ STMT_169_INFO, \
+ STMT_170_INFO, \
+ STMT_171_INFO, \
+ STMT_172_INFO, \
+ STMT_173_INFO, \
+ STMT_174_INFO, \
+ STMT_175_INFO, \
+ STMT_176_INFO, \
+ STMT_177_INFO, \
+ STMT_178_INFO, \
+ STMT_179_INFO, \
+ STMT_180_INFO, \
+ STMT_181_INFO, \
+ STMT_182_INFO, \
+ STMT_183_INFO, \
+ STMT_184_INFO, \
+ STMT_185_INFO, \
+ STMT_186_INFO, \
+ STMT_187_INFO, \
+ STMT_188_INFO, \
+ STMT_189_INFO, \
+ STMT_190_INFO, \
+ STMT_191_INFO, \
+ STMT_192_INFO, \
+ STMT_193_INFO, \
+ STMT_194_INFO, \
+ STMT_195_INFO, \
+ STMT_196_INFO, \
+ STMT_197_INFO, \
+ STMT_198_INFO, \
+ STMT_199_INFO, \
+ STMT_200_INFO, \
+ STMT_201_INFO, \
+ STMT_202_INFO, \
+ STMT_203_INFO, \
+ STMT_204_INFO, \
+ STMT_205_INFO, \
+ STMT_206_INFO, \
+ STMT_207_INFO, \
+ STMT_208_INFO, \
+ STMT_209_INFO, \
+ STMT_210_INFO, \
+ STMT_211_INFO, \
+ STMT_212_INFO, \
+ STMT_213_INFO, \
+ STMT_214_INFO, \
+ STMT_215_INFO, \
+ STMT_216_INFO, \
+ STMT_217_INFO, \
+ STMT_218_INFO, \
+ STMT_219_INFO, \
+ STMT_220_INFO, \
+ STMT_221_INFO, \
+ STMT_222_INFO, \
+ STMT_223_INFO, \
+ STMT_224_INFO, \
+ STMT_225_INFO, \
+ STMT_226_INFO, \
+ STMT_227_INFO, \
+ STMT_228_INFO, \
+ STMT_229_INFO, \
+ STMT_230_INFO, \
+ STMT_231_INFO, \
+ STMT_232_INFO, \
+ STMT_233_INFO, \
+ STMT_234_INFO, \
+ {NULL, NULL} \
+ }
diff --git a/subversion/libsvn_wc/wc-queries.sql b/subversion/libsvn_wc/wc-queries.sql
index 702663e..7cdb46c 100644
--- a/subversion/libsvn_wc/wc-queries.sql
+++ b/subversion/libsvn_wc/wc-queries.sql
@@ -29,7 +29,8 @@
-- STMT_SELECT_NODE_INFO
SELECT op_depth, repos_id, repos_path, presence, kind, revision, checksum,
translated_size, changed_revision, changed_date, changed_author, depth,
- symlink_target, last_mod_time, properties
+ symlink_target, last_mod_time, properties, moved_here, inherited_props,
+ moved_to
FROM nodes
WHERE wc_id = ?1 AND local_relpath = ?2
ORDER BY op_depth DESC
@@ -37,8 +38,12 @@ ORDER BY op_depth DESC
-- STMT_SELECT_NODE_INFO_WITH_LOCK
SELECT op_depth, nodes.repos_id, nodes.repos_path, presence, kind, revision,
checksum, translated_size, changed_revision, changed_date, changed_author,
- depth, symlink_target, last_mod_time, properties, lock_token, lock_owner,
- lock_comment, lock_date
+ depth, symlink_target, last_mod_time, properties, moved_here,
+ inherited_props,
+ /* All the columns until now must match those returned by
+ STMT_SELECT_NODE_INFO. The implementation of svn_wc__db_read_info()
+ assumes that these columns are followed by the lock information) */
+ lock_token, lock_owner, lock_comment, lock_date
FROM nodes
LEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id
AND nodes.repos_path = lock.repos_relpath
@@ -48,14 +53,17 @@ ORDER BY op_depth DESC
-- STMT_SELECT_BASE_NODE
SELECT repos_id, repos_path, presence, kind, revision, checksum,
translated_size, changed_revision, changed_date, changed_author, depth,
- symlink_target, last_mod_time, properties, file_external IS NOT NULL
+ symlink_target, last_mod_time, properties, file_external
FROM nodes
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
-- STMT_SELECT_BASE_NODE_WITH_LOCK
SELECT nodes.repos_id, nodes.repos_path, presence, kind, revision,
checksum, translated_size, changed_revision, changed_date, changed_author,
- depth, symlink_target, last_mod_time, properties, file_external IS NOT NULL,
+ depth, symlink_target, last_mod_time, properties, file_external,
+ /* All the columns until now must match those returned by
+ STMT_SELECT_BASE_NODE. The implementation of svn_wc__db_base_get_info()
+ assumes that these columns are followed by the lock information) */
lock_token, lock_owner, lock_comment, lock_date
FROM nodes
LEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id
@@ -64,7 +72,7 @@ WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
-- STMT_SELECT_BASE_CHILDREN_INFO
SELECT local_relpath, nodes.repos_id, nodes.repos_path, presence, kind,
- revision, depth, file_external IS NOT NULL,
+ revision, depth, file_external,
lock_token, lock_owner, lock_comment, lock_date
FROM nodes
LEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id
@@ -89,28 +97,24 @@ FROM nodes
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3
-- STMT_SELECT_LOWEST_WORKING_NODE
-SELECT op_depth, presence
+SELECT op_depth, presence, kind, moved_to
FROM nodes
-WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > 0
+WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3
ORDER BY op_depth
LIMIT 1
+-- STMT_SELECT_HIGHEST_WORKING_NODE
+SELECT op_depth
+FROM nodes
+WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth < ?3
+ORDER BY op_depth DESC
+LIMIT 1
+
-- STMT_SELECT_ACTUAL_NODE
-SELECT prop_reject, changelist, conflict_old, conflict_new,
-conflict_working, tree_conflict_data, properties
+SELECT changelist, properties, conflict_data
FROM actual_node
WHERE wc_id = ?1 AND local_relpath = ?2
--- STMT_SELECT_ACTUAL_TREE_CONFLICT
-SELECT tree_conflict_data
-FROM actual_node
-WHERE wc_id = ?1 AND local_relpath = ?2 AND tree_conflict_data IS NOT NULL
-
--- STMT_SELECT_ACTUAL_CHANGELIST
-SELECT changelist
-FROM actual_node
-WHERE wc_id = ?1 AND local_relpath = ?2 AND changelist IS NOT NULL
-
-- STMT_SELECT_NODE_CHILDREN_INFO
/* Getting rows in an advantageous order using
ORDER BY local_relpath, op_depth DESC
@@ -119,10 +123,10 @@ WHERE wc_id = ?1 AND local_relpath = ?2 AND changelist IS NOT NULL
SELECT op_depth, nodes.repos_id, nodes.repos_path, presence, kind, revision,
checksum, translated_size, changed_revision, changed_date, changed_author,
depth, symlink_target, last_mod_time, properties, lock_token, lock_owner,
- lock_comment, lock_date, local_relpath
+ lock_comment, lock_date, local_relpath, moved_here, moved_to, file_external
FROM nodes
LEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id
- AND nodes.repos_path = lock.repos_relpath
+ AND nodes.repos_path = lock.repos_relpath AND op_depth = 0
WHERE wc_id = ?1 AND parent_relpath = ?2
-- STMT_SELECT_NODE_CHILDREN_WALKER_INFO
@@ -131,9 +135,7 @@ FROM nodes_current
WHERE wc_id = ?1 AND parent_relpath = ?2
-- STMT_SELECT_ACTUAL_CHILDREN_INFO
-SELECT prop_reject, changelist, conflict_old, conflict_new,
-conflict_working, tree_conflict_data, properties, local_relpath,
-conflict_data
+SELECT local_relpath, changelist, properties, conflict_data
FROM actual_node
WHERE wc_id = ?1 AND parent_relpath = ?2
@@ -154,45 +156,180 @@ INSERT OR REPLACE INTO nodes (
wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path,
revision, presence, depth, kind, changed_revision, changed_date,
changed_author, checksum, properties, translated_size, last_mod_time,
- dav_cache, symlink_target, file_external)
+ dav_cache, symlink_target, file_external, moved_to, moved_here,
+ inherited_props)
VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14,
- ?15, ?16, ?17, ?18, ?19, ?20)
+ ?15, ?16, ?17, ?18, ?19, ?20, ?21, ?22, ?23)
+
+-- STMT_SELECT_BASE_PRESENT
+SELECT local_relpath, kind FROM nodes n
+WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
+ AND op_depth = 0
+ AND presence in (MAP_NORMAL, MAP_INCOMPLETE)
+ AND NOT EXISTS(SELECT 1 FROM NODES w
+ WHERE w.wc_id = ?1 AND w.local_relpath = n.local_relpath
+ AND op_depth > 0)
+ORDER BY local_relpath DESC
+
+-- STMT_SELECT_WORKING_PRESENT
+SELECT local_relpath, kind, checksum, translated_size, last_mod_time
+FROM nodes n
+WHERE wc_id = ?1
+ AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
+ AND presence in (MAP_NORMAL, MAP_INCOMPLETE)
+ AND op_depth = (SELECT MAX(op_depth)
+ FROM NODES w
+ WHERE w.wc_id = ?1
+ AND w.local_relpath = n.local_relpath)
+ORDER BY local_relpath DESC
+
+-- STMT_DELETE_NODE_RECURSIVE
+DELETE FROM NODES
+WHERE wc_id = ?1
+ AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
+
+-- STMT_DELETE_NODE
+DELETE
+FROM NODES
+WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3
+
+-- STMT_DELETE_ACTUAL_FOR_BASE_RECURSIVE
+/* The ACTUAL_NODE applies to BASE, unless there is in at least one op_depth
+ a WORKING node that could have a conflict */
+DELETE FROM actual_node
+WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
+ AND EXISTS(SELECT 1 FROM NODES b
+ WHERE b.wc_id = ?1
+ AND b.local_relpath = actual_node.local_relpath
+ AND op_depth = 0)
+ AND NOT EXISTS(SELECT 1 FROM NODES w
+ WHERE w.wc_id = ?1
+ AND w.local_relpath = actual_node.local_relpath
+ AND op_depth > 0
+ AND presence in (MAP_NORMAL, MAP_INCOMPLETE, MAP_NOT_PRESENT))
+
+-- STMT_DELETE_WORKING_BASE_DELETE
+DELETE FROM nodes
+WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
+ AND presence = MAP_BASE_DELETED
+ AND op_depth > 0
+ AND op_depth = (SELECT MIN(op_depth) FROM nodes n
+ WHERE n.wc_id = ?1
+ AND n.local_relpath = nodes.local_relpath
+ AND op_depth > 0)
+
+-- STMT_DELETE_WORKING_RECURSIVE
+DELETE FROM nodes
+WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
+ AND op_depth > 0
+
+-- STMT_DELETE_BASE_RECURSIVE
+DELETE FROM nodes
+WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
+ AND op_depth = 0
+
+-- STMT_DELETE_WORKING_OP_DEPTH
+DELETE FROM nodes
+WHERE wc_id = ?1
+ AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
+ AND op_depth = ?3
+
+-- STMT_DELETE_WORKING_OP_DEPTH_ABOVE
+DELETE FROM nodes
+WHERE wc_id = ?1
+ AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
+ AND op_depth > ?3
+
+-- STMT_SELECT_LOCAL_RELPATH_OP_DEPTH
+SELECT local_relpath
+FROM nodes
+WHERE wc_id = ?1
+ AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
+ AND op_depth = ?3
+
+-- STMT_SELECT_CHILDREN_OP_DEPTH
+SELECT local_relpath, kind
+FROM nodes
+WHERE wc_id = ?1
+ AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
+ AND op_depth = ?3
+ORDER BY local_relpath DESC
+
+-- STMT_COPY_NODE_MOVE
+INSERT OR REPLACE INTO nodes (
+ wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path,
+ revision, presence, depth, kind, changed_revision, changed_date,
+ changed_author, checksum, properties, translated_size, last_mod_time,
+ symlink_target, moved_here, moved_to )
+SELECT
+ wc_id, ?4 /*local_relpath */, ?5 /*op_depth*/, ?6 /* parent_relpath */,
+ repos_id,
+ repos_path, revision, presence, depth, kind, changed_revision,
+ changed_date, changed_author, checksum, properties, translated_size,
+ last_mod_time, symlink_target, 1,
+ (SELECT dst.moved_to FROM nodes AS dst
+ WHERE dst.wc_id = ?1
+ AND dst.local_relpath = ?4
+ AND dst.op_depth = ?5)
+FROM nodes
+WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3
-- STMT_SELECT_OP_DEPTH_CHILDREN
-SELECT local_relpath FROM nodes
-WHERE wc_id = ?1 AND parent_relpath = ?2 AND op_depth = ?3
- AND (?3 != 0 OR file_external is NULL)
+SELECT local_relpath, kind FROM nodes
+WHERE wc_id = ?1
+ AND parent_relpath = ?2
+ AND op_depth = ?3
+ AND presence != MAP_BASE_DELETED
+ AND file_external is NULL
+/* Used by non-recursive revert to detect higher level children, and
+ actual-only rows that would be left orphans, if the revert
+ proceeded. */
-- STMT_SELECT_GE_OP_DEPTH_CHILDREN
SELECT 1 FROM nodes
WHERE wc_id = ?1 AND parent_relpath = ?2
- AND (op_depth > ?3 OR (op_depth = ?3 AND presence != 'base-deleted'))
-UNION
-SELECT 1 FROM ACTUAL_NODE
+ AND (op_depth > ?3 OR (op_depth = ?3 AND presence != MAP_BASE_DELETED))
+UNION ALL
+SELECT 1 FROM ACTUAL_NODE a
WHERE wc_id = ?1 AND parent_relpath = ?2
+ AND NOT EXISTS (SELECT 1 FROM nodes n
+ WHERE wc_id = ?1 AND n.local_relpath = a.local_relpath)
+/* Delete the nodes shadowed by local_relpath. Not valid for the wc-root */
-- STMT_DELETE_SHADOWED_RECURSIVE
DELETE FROM nodes
WHERE wc_id = ?1
- AND (local_relpath = ?2
- OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
+ AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
AND (op_depth < ?3
- OR (op_depth = ?3 AND presence = 'base-deleted'))
+ OR (op_depth = ?3 AND presence = MAP_BASE_DELETED))
+
+-- STMT_CLEAR_MOVED_TO_FROM_DEST
+UPDATE NODES SET moved_to = NULL
+WHERE wc_id = ?1
+ AND moved_to = ?2
+/* Get not-present descendants of a copied node. Not valid for the wc-root */
-- STMT_SELECT_NOT_PRESENT_DESCENDANTS
SELECT local_relpath FROM nodes
WHERE wc_id = ?1 AND op_depth = ?3
- AND (parent_relpath = ?2
- OR IS_STRICT_DESCENDANT_OF(parent_relpath, ?2))
- AND presence == 'not-present'
-
--- STMT_COMMIT_DESCENDANT_TO_BASE
-UPDATE NODES SET op_depth = 0, repos_id = ?4, repos_path = ?5, revision = ?6,
- moved_here = NULL, moved_to = NULL, dav_cache = NULL,
- presence = CASE presence WHEN 'normal' THEN 'normal'
- WHEN 'excluded' THEN 'excluded'
- ELSE 'not-present' END
-WHERE wc_id = ?1 AND local_relpath = ?2 and op_depth = ?3
+ AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
+ AND presence = MAP_NOT_PRESENT
+
+-- STMT_COMMIT_DESCENDANTS_TO_BASE
+UPDATE NODES SET op_depth = 0,
+ repos_id = ?4,
+ repos_path = ?5 || SUBSTR(local_relpath, LENGTH(?2)+1),
+ revision = ?6,
+ dav_cache = NULL,
+ moved_here = NULL,
+ presence = CASE presence
+ WHEN MAP_NORMAL THEN MAP_NORMAL
+ WHEN MAP_EXCLUDED THEN MAP_EXCLUDED
+ ELSE MAP_NOT_PRESENT
+ END
+WHERE wc_id = ?1
+ AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
+ AND op_depth = ?3
-- STMT_SELECT_NODE_CHILDREN
/* Return all paths that are children of the directory (?1, ?2) in any
@@ -212,11 +349,7 @@ WHERE wc_id = ?1 AND parent_relpath = ?2
OR
(op_depth = (SELECT MAX(op_depth) FROM nodes
WHERE wc_id = ?1 AND local_relpath = ?2)
- AND presence != 'base-deleted'))
-
--- STMT_SELECT_BASE_PROPS
-SELECT properties FROM nodes
-WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
+ AND presence != MAP_BASE_DELETED))
-- STMT_SELECT_NODE_PROPS
SELECT properties, presence FROM nodes
@@ -227,17 +360,6 @@ ORDER BY op_depth DESC
SELECT properties FROM actual_node
WHERE wc_id = ?1 AND local_relpath = ?2
--- STMT_UPDATE_NODE_BASE_PROPS
-UPDATE nodes SET properties = ?3
-WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
-
--- STMT_UPDATE_NODE_WORKING_PROPS
-UPDATE nodes SET properties = ?3
-WHERE wc_id = ?1 AND local_relpath = ?2
- AND op_depth =
- (SELECT MAX(op_depth) FROM nodes
- WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > 0)
-
-- STMT_UPDATE_ACTUAL_PROPS
UPDATE actual_node SET properties = ?3
WHERE wc_id = ?1 AND local_relpath = ?2
@@ -252,15 +374,14 @@ INSERT OR REPLACE INTO lock
lock_date)
VALUES (?1, ?2, ?3, ?4, ?5, ?6)
+/* Not valid for the working copy root */
-- STMT_SELECT_BASE_NODE_LOCK_TOKENS_RECURSIVE
SELECT nodes.repos_id, nodes.repos_path, lock_token
FROM nodes
LEFT JOIN lock ON nodes.repos_id = lock.repos_id
AND nodes.repos_path = lock.repos_relpath
WHERE wc_id = ?1 AND op_depth = 0
- AND (?2 = ''
- OR local_relpath = ?2
- OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
+ AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
-- STMT_INSERT_WCROOT
INSERT INTO wcroot (local_abspath)
@@ -275,35 +396,109 @@ SELECT dav_cache FROM nodes
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
-- STMT_SELECT_DELETION_INFO
-SELECT nodes_base.presence, nodes_work.presence, nodes_work.moved_to,
- nodes_work.op_depth
-FROM nodes AS nodes_work
-LEFT OUTER JOIN nodes nodes_base ON nodes_base.wc_id = nodes_work.wc_id
- AND nodes_base.local_relpath = nodes_work.local_relpath
- AND nodes_base.op_depth = 0
-WHERE nodes_work.wc_id = ?1 AND nodes_work.local_relpath = ?2
- AND nodes_work.op_depth = (SELECT MAX(op_depth) FROM nodes
- WHERE wc_id = ?1 AND local_relpath = ?2
- AND op_depth > 0)
+SELECT (SELECT b.presence FROM nodes AS b
+ WHERE b.wc_id = ?1 AND b.local_relpath = ?2 AND b.op_depth = 0),
+ work.presence, work.op_depth
+FROM nodes_current AS work
+WHERE work.wc_id = ?1 AND work.local_relpath = ?2 AND work.op_depth > 0
+LIMIT 1
+
+-- STMT_SELECT_DELETION_INFO_SCAN
+/* ### FIXME. moved.moved_to IS NOT NULL works when there is
+ only one move but we need something else when there are several. */
+SELECT (SELECT b.presence FROM nodes AS b
+ WHERE b.wc_id = ?1 AND b.local_relpath = ?2 AND b.op_depth = 0),
+ work.presence, work.op_depth, moved.moved_to
+FROM nodes_current AS work
+LEFT OUTER JOIN nodes AS moved
+ ON moved.wc_id = work.wc_id
+ AND moved.local_relpath = work.local_relpath
+ AND moved.moved_to IS NOT NULL
+WHERE work.wc_id = ?1 AND work.local_relpath = ?2 AND work.op_depth > 0
+LIMIT 1
+
+-- STMT_SELECT_MOVED_TO_NODE
+SELECT op_depth, moved_to
+FROM nodes
+WHERE wc_id = ?1 AND local_relpath = ?2 AND moved_to IS NOT NULL
+ORDER BY op_depth DESC
+
+-- STMT_SELECT_OP_DEPTH_MOVED_TO
+SELECT op_depth, moved_to, repos_path, revision
+FROM nodes
+WHERE wc_id = ?1 AND local_relpath = ?2
+ AND op_depth <= (SELECT MIN(op_depth) FROM nodes
+ WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3)
+ORDER BY op_depth DESC
+
+-- STMT_SELECT_MOVED_TO
+SELECT moved_to
+FROM nodes
+WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3
+
+-- STMT_SELECT_MOVED_HERE
+SELECT moved_here, presence, repos_path, revision
+FROM nodes
+WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth >= ?3
+ORDER BY op_depth
+
+-- STMT_SELECT_MOVED_BACK
+SELECT u.local_relpath,
+ u.presence, u.repos_id, u.repos_path, u.revision,
+ l.presence, l.repos_id, l.repos_path, l.revision,
+ u.moved_here, u.moved_to
+FROM nodes u
+LEFT OUTER JOIN nodes l ON l.wc_id = ?1
+ AND l.local_relpath = u.local_relpath
+ AND l.op_depth = ?3
+WHERE u.wc_id = ?1
+ AND u.local_relpath = ?2
+ AND u.op_depth = ?4
+UNION ALL
+SELECT u.local_relpath,
+ u.presence, u.repos_id, u.repos_path, u.revision,
+ l.presence, l.repos_id, l.repos_path, l.revision,
+ u.moved_here, NULL
+FROM nodes u
+LEFT OUTER JOIN nodes l ON l.wc_id=?1
+ AND l.local_relpath=u.local_relpath
+ AND l.op_depth=?3
+WHERE u.wc_id = ?1
+ AND IS_STRICT_DESCENDANT_OF(u.local_relpath, ?2)
+ AND u.op_depth = ?4
+
+-- STMT_DELETE_MOVED_BACK
+DELETE FROM nodes
+WHERE wc_id = ?1
+ AND (local_relpath = ?2
+ OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
+ AND op_depth = ?3
-- STMT_DELETE_LOCK
DELETE FROM lock
WHERE repos_id = ?1 AND repos_relpath = ?2
+-- STMT_DELETE_LOCK_RECURSIVELY
+DELETE FROM lock
+WHERE repos_id = ?1 AND (repos_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(repos_relpath, ?2))
+
-- STMT_CLEAR_BASE_NODE_RECURSIVE_DAV_CACHE
UPDATE nodes SET dav_cache = NULL
WHERE dav_cache IS NOT NULL AND wc_id = ?1 AND op_depth = 0
- AND (?2 = ''
- OR local_relpath = ?2
+ AND (local_relpath = ?2
OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
-- STMT_RECURSIVE_UPDATE_NODE_REPO
UPDATE nodes SET repos_id = ?4, dav_cache = NULL
-WHERE wc_id = ?1
- AND repos_id = ?3
- AND (?2 = ''
- OR local_relpath = ?2
- OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
+/* ### The Sqlite optimizer needs help here ###
+ * WHERE wc_id = ?1
+ * AND repos_id = ?3
+ * AND (local_relpath = ?2
+ * OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))*/
+WHERE (wc_id = ?1 AND local_relpath = ?2 AND repos_id = ?3)
+ OR (wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
+ AND repos_id = ?3)
+
-- STMT_UPDATE_LOCK_REPOS_ID
UPDATE lock SET repos_id = ?2
@@ -315,39 +510,22 @@ WHERE wc_id = ?1 AND local_relpath = ?2
AND op_depth = (SELECT MAX(op_depth) FROM nodes
WHERE wc_id = ?1 AND local_relpath = ?2)
--- STMT_UPDATE_ACTUAL_TREE_CONFLICTS
-UPDATE actual_node SET tree_conflict_data = ?3
-WHERE wc_id = ?1 AND local_relpath = ?2
-
--- STMT_INSERT_ACTUAL_TREE_CONFLICTS
-INSERT INTO actual_node (
- wc_id, local_relpath, tree_conflict_data, parent_relpath)
+-- STMT_INSERT_ACTUAL_CONFLICT
+INSERT INTO actual_node (wc_id, local_relpath, conflict_data, parent_relpath)
VALUES (?1, ?2, ?3, ?4)
--- STMT_UPDATE_ACTUAL_TEXT_CONFLICTS
-UPDATE actual_node SET conflict_old = ?3, conflict_new = ?4,
- conflict_working = ?5
-WHERE wc_id = ?1 AND local_relpath = ?2
-
--- STMT_INSERT_ACTUAL_TEXT_CONFLICTS
-INSERT INTO actual_node (
- wc_id, local_relpath, conflict_old, conflict_new, conflict_working,
- parent_relpath)
-VALUES (?1, ?2, ?3, ?4, ?5, ?6)
-
--- STMT_UPDATE_ACTUAL_PROPERTY_CONFLICTS
-UPDATE actual_node SET prop_reject = ?3
+-- STMT_UPDATE_ACTUAL_CONFLICT
+UPDATE actual_node SET conflict_data = ?3
WHERE wc_id = ?1 AND local_relpath = ?2
--- STMT_INSERT_ACTUAL_PROPERTY_CONFLICTS
-INSERT INTO actual_node (
- wc_id, local_relpath, prop_reject, parent_relpath)
-VALUES (?1, ?2, ?3, ?4)
-
-- STMT_UPDATE_ACTUAL_CHANGELISTS
-UPDATE actual_node SET changelist = ?2
-WHERE wc_id = ?1 AND local_relpath IN
-(SELECT local_relpath FROM targets_list WHERE kind = 'file' AND wc_id = ?1)
+UPDATE actual_node SET changelist = ?3
+WHERE wc_id = ?1
+ AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
+ AND local_relpath = (SELECT local_relpath FROM targets_list AS t
+ WHERE wc_id = ?1
+ AND t.local_relpath = actual_node.local_relpath
+ AND kind = MAP_FILE)
-- STMT_UPDATE_ACTUAL_CLEAR_CHANGELIST
UPDATE actual_node SET changelist = NULL
@@ -356,7 +534,11 @@ UPDATE actual_node SET changelist = NULL
-- STMT_MARK_SKIPPED_CHANGELIST_DIRS
/* 7 corresponds to svn_wc_notify_skip */
INSERT INTO changelist_list (wc_id, local_relpath, notify, changelist)
-SELECT wc_id, local_relpath, 7, ?1 FROM targets_list WHERE kind = 'dir'
+SELECT wc_id, local_relpath, 7, ?3
+FROM targets_list
+WHERE wc_id = ?1
+ AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
+ AND kind = MAP_DIR
-- STMT_RESET_ACTUAL_WITH_CHANGELIST
REPLACE INTO actual_node (
@@ -368,70 +550,42 @@ DROP TABLE IF EXISTS changelist_list;
CREATE TEMPORARY TABLE changelist_list (
wc_id INTEGER NOT NULL,
local_relpath TEXT NOT NULL,
- notify INTEGER,
- changelist TEXT NOT NULL
- );
-CREATE INDEX changelist_list_index ON changelist_list(wc_id, local_relpath);
-/* We have four cases upon which we wish to notify. The first is easy:
-
- Action Notification
- ------ ------------
- INSERT ACTUAL cl-set
-
- The others are a bit more complex:
- Action Old CL New CL Notification
- ------ ------ ------ ------------
- UPDATE ACTUAL NULL NOT NULL cl-set
- UPDATE ACTUAL NOT NULL NOT NULL cl-set
- UPDATE ACTUAL NOT NULL NULL cl-clear
-
-Of the following triggers, the first address the first case, and the second
-two address the last three cases.
+ notify INTEGER NOT NULL,
+ changelist TEXT NOT NULL,
+ /* Order NOTIFY descending to make us show clears (27) before adds (26) */
+ PRIMARY KEY (wc_id, local_relpath, notify DESC)
+)
+
+/* Create notify items for when a node is removed from a changelist and
+ when a node is added to a changelist. Make sure nothing is notified
+ if there were no changes.
*/
-DROP TRIGGER IF EXISTS trigger_changelist_list_actual_cl_insert;
-CREATE TEMPORARY TRIGGER trigger_changelist_list_actual_cl_insert
-BEFORE INSERT ON actual_node
-BEGIN
- /* 26 corresponds to svn_wc_notify_changelist_set */
- INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist)
- VALUES (NEW.wc_id, NEW.local_relpath, 26, NEW.changelist);
-END;
-DROP TRIGGER IF EXISTS trigger_changelist_list_actual_cl_clear;
-CREATE TEMPORARY TRIGGER trigger_changelist_list_actual_cl_clear
+-- STMT_CREATE_CHANGELIST_TRIGGER
+DROP TRIGGER IF EXISTS trigger_changelist_list_change;
+CREATE TEMPORARY TRIGGER trigger_changelist_list_change
BEFORE UPDATE ON actual_node
-WHEN OLD.changelist IS NOT NULL AND
- (OLD.changelist != NEW.changelist OR NEW.changelist IS NULL)
+WHEN old.changelist IS NOT new.changelist
BEGIN
- /* 27 corresponds to svn_wc_notify_changelist_clear */
- INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist)
- VALUES (OLD.wc_id, OLD.local_relpath, 27, OLD.changelist);
-END;
-DROP TRIGGER IF EXISTS trigger_changelist_list_actual_cl_set;
-CREATE TEMPORARY TRIGGER trigger_changelist_list_actual_cl_set
-BEFORE UPDATE ON actual_node
-WHEN NEW.CHANGELIST IS NOT NULL AND
- (OLD.changelist != NEW.changelist OR OLD.changelist IS NULL)
-BEGIN
- /* 26 corresponds to svn_wc_notify_changelist_set */
- INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist)
- VALUES (NEW.wc_id, NEW.local_relpath, 26, NEW.changelist);
+ /* 27 corresponds to svn_wc_notify_changelist_clear */
+ INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist)
+ SELECT old.wc_id, old.local_relpath, 27, old.changelist
+ WHERE old.changelist is NOT NULL;
+
+ /* 26 corresponds to svn_wc_notify_changelist_set */
+ INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist)
+ SELECT new.wc_id, new.local_relpath, 26, new.changelist
+ WHERE new.changelist IS NOT NULL;
END
--- STMT_INSERT_CHANGELIST_LIST
-INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist)
-VALUES (?1, ?2, ?3, ?4)
-
-- STMT_FINALIZE_CHANGELIST
-DROP TRIGGER IF EXISTS trigger_changelist_list_actual_cl_insert;
-DROP TRIGGER IF EXISTS trigger_changelist_list_actual_cl_set;
-DROP TRIGGER IF EXISTS trigger_changelist_list_actual_cl_clear;
-DROP TABLE IF EXISTS changelist_list;
-DROP TABLE IF EXISTS targets_list
+DROP TRIGGER trigger_changelist_list_change;
+DROP TABLE changelist_list;
+DROP TABLE targets_list
-- STMT_SELECT_CHANGELIST_LIST
SELECT wc_id, local_relpath, notify, changelist
FROM changelist_list
-ORDER BY wc_id, local_relpath
+ORDER BY wc_id, local_relpath ASC, notify DESC
-- STMT_CREATE_TARGETS_LIST
DROP TABLE IF EXISTS targets_list;
@@ -439,64 +593,70 @@ CREATE TEMPORARY TABLE targets_list (
wc_id INTEGER NOT NULL,
local_relpath TEXT NOT NULL,
parent_relpath TEXT,
- kind TEXT NOT NULL
+ kind TEXT NOT NULL,
+ PRIMARY KEY (wc_id, local_relpath)
);
-CREATE INDEX targets_list_kind
- ON targets_list (kind)
/* need more indicies? */
-- STMT_DROP_TARGETS_LIST
-DROP TABLE IF EXISTS targets_list
+DROP TABLE targets_list
-- STMT_INSERT_TARGET
INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind)
SELECT wc_id, local_relpath, parent_relpath, kind
-FROM nodes_current WHERE wc_id = ?1 AND local_relpath = ?2
+FROM nodes_current
+WHERE wc_id = ?1
+ AND local_relpath = ?2
-- STMT_INSERT_TARGET_DEPTH_FILES
INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind)
SELECT wc_id, local_relpath, parent_relpath, kind
FROM nodes_current
-WHERE wc_id = ?1 AND ((parent_relpath = ?2 AND kind = 'file')
- OR local_relpath = ?2)
+WHERE wc_id = ?1
+ AND parent_relpath = ?2
+ AND kind = MAP_FILE
-- STMT_INSERT_TARGET_DEPTH_IMMEDIATES
INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind)
SELECT wc_id, local_relpath, parent_relpath, kind
FROM nodes_current
-WHERE wc_id = ?1 AND (parent_relpath = ?2 OR local_relpath = ?2)
+WHERE wc_id = ?1
+ AND parent_relpath = ?2
-- STMT_INSERT_TARGET_DEPTH_INFINITY
INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind)
SELECT wc_id, local_relpath, parent_relpath, kind
FROM nodes_current
WHERE wc_id = ?1
- AND (?2 = ''
- OR local_relpath = ?2
- OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
+ AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
-- STMT_INSERT_TARGET_WITH_CHANGELIST
INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind)
SELECT N.wc_id, N.local_relpath, N.parent_relpath, N.kind
FROM actual_node AS A JOIN nodes_current AS N
ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath
- WHERE N.wc_id = ?1 AND A.changelist = ?3 AND N.local_relpath = ?2
+ WHERE N.wc_id = ?1
+ AND N.local_relpath = ?2
+ AND A.changelist = ?3
-- STMT_INSERT_TARGET_WITH_CHANGELIST_DEPTH_FILES
INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind)
SELECT N.wc_id, N.local_relpath, N.parent_relpath, N.kind
FROM actual_node AS A JOIN nodes_current AS N
ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath
- WHERE N.wc_id = ?1 AND A.changelist = ?3
- AND ((N.parent_relpath = ?2 AND kind = 'file') OR N.local_relpath = ?2)
+ WHERE N.wc_id = ?1
+ AND N.parent_relpath = ?2
+ AND kind = MAP_FILE
+ AND A.changelist = ?3
-- STMT_INSERT_TARGET_WITH_CHANGELIST_DEPTH_IMMEDIATES
INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind)
SELECT N.wc_id, N.local_relpath, N.parent_relpath, N.kind
FROM actual_node AS A JOIN nodes_current AS N
ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath
- WHERE N.wc_id = ?1 AND A.changelist = ?3
- AND (N.parent_relpath = ?2 OR N.local_relpath = ?2)
+ WHERE N.wc_id = ?1
+ AND N.parent_relpath = ?2
+ AND A.changelist = ?3
-- STMT_INSERT_TARGET_WITH_CHANGELIST_DEPTH_INFINITY
INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind)
@@ -504,33 +664,26 @@ SELECT N.wc_id, N.local_relpath, N.parent_relpath, N.kind
FROM actual_node AS A JOIN nodes_current AS N
ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath
WHERE N.wc_id = ?1
- AND (?2 = ''
- OR N.local_relpath = ?2
- OR IS_STRICT_DESCENDANT_OF(N.local_relpath, ?2))
- AND A.changelist = ?3
+ AND IS_STRICT_DESCENDANT_OF(N.local_relpath, ?2)
+ AND A.changelist = ?3
--- STMT_SELECT_TARGETS
-SELECT local_relpath, parent_relpath from targets_list
+/* Only used by commented dump_targets() in wc_db.c */
+/*-- STMT_SELECT_TARGETS
+SELECT local_relpath, parent_relpath from targets_list*/
-- STMT_INSERT_ACTUAL_EMPTIES
INSERT OR IGNORE INTO actual_node (
- wc_id, local_relpath, parent_relpath, properties,
- conflict_old, conflict_new, conflict_working,
- prop_reject, changelist, text_mod, tree_conflict_data )
-SELECT wc_id, local_relpath, parent_relpath, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL
+ wc_id, local_relpath, parent_relpath)
+SELECT wc_id, local_relpath, parent_relpath
FROM targets_list
-- STMT_DELETE_ACTUAL_EMPTY
DELETE FROM actual_node
WHERE wc_id = ?1 AND local_relpath = ?2
AND properties IS NULL
- AND conflict_old IS NULL
- AND conflict_new IS NULL
- AND prop_reject IS NULL
+ AND conflict_data IS NULL
AND changelist IS NULL
AND text_mod IS NULL
- AND tree_conflict_data IS NULL
AND older_checksum IS NULL
AND right_checksum IS NULL
AND left_checksum IS NULL
@@ -538,13 +691,11 @@ WHERE wc_id = ?1 AND local_relpath = ?2
-- STMT_DELETE_ACTUAL_EMPTIES
DELETE FROM actual_node
WHERE wc_id = ?1
+ AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
AND properties IS NULL
- AND conflict_old IS NULL
- AND conflict_new IS NULL
- AND prop_reject IS NULL
+ AND conflict_data IS NULL
AND changelist IS NULL
AND text_mod IS NULL
- AND tree_conflict_data IS NULL
AND older_checksum IS NULL
AND right_checksum IS NULL
AND left_checksum IS NULL
@@ -563,18 +714,17 @@ WHERE wc_id = ?1 AND local_relpath = ?2
DELETE FROM nodes
WHERE wc_id = ?1 AND local_relpath = ?2
AND op_depth = (SELECT MIN(op_depth) FROM nodes
- WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > 0)
- AND presence = 'base-deleted'
+ WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3)
+ AND presence = MAP_BASE_DELETED
--- STMT_DELETE_ALL_LAYERS
+-- STMT_DELETE_NODE_ALL_LAYERS
DELETE FROM nodes
WHERE wc_id = ?1 AND local_relpath = ?2
--- STMT_DELETE_NODES_RECURSIVE
+-- STMT_DELETE_NODES_ABOVE_DEPTH_RECURSIVE
DELETE FROM nodes
WHERE wc_id = ?1
- AND (?2 = ''
- OR local_relpath = ?2
+ AND (local_relpath = ?2
OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
AND op_depth >= ?3
@@ -582,18 +732,13 @@ WHERE wc_id = ?1
DELETE FROM actual_node
WHERE wc_id = ?1 AND local_relpath = ?2
+/* Will not delete recursive when run on the wcroot */
-- STMT_DELETE_ACTUAL_NODE_RECURSIVE
DELETE FROM actual_node
WHERE wc_id = ?1
- AND (?2 = ''
- OR local_relpath = ?2
+ AND (local_relpath = ?2
OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
--- STMT_DELETE_ACTUAL_NODE_WITHOUT_CONFLICT
-DELETE FROM actual_node
-WHERE wc_id = ?1 AND local_relpath = ?2
- AND tree_conflict_data IS NULL
-
-- STMT_DELETE_ACTUAL_NODE_LEAVING_CHANGELIST
DELETE FROM actual_node
WHERE wc_id = ?1
@@ -601,29 +746,25 @@ WHERE wc_id = ?1
AND (changelist IS NULL
OR NOT EXISTS (SELECT 1 FROM nodes_current c
WHERE c.wc_id = ?1 AND c.local_relpath = ?2
- AND c.kind = 'file'))
+ AND c.kind = MAP_FILE))
-- STMT_DELETE_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE
DELETE FROM actual_node
WHERE wc_id = ?1
- AND (?2 = ''
- OR local_relpath = ?2
+ AND (local_relpath = ?2
OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
AND (changelist IS NULL
OR NOT EXISTS (SELECT 1 FROM nodes_current c
WHERE c.wc_id = ?1
AND c.local_relpath = actual_node.local_relpath
- AND c.kind = 'file'))
+ AND c.kind = MAP_FILE))
-- STMT_CLEAR_ACTUAL_NODE_LEAVING_CHANGELIST
UPDATE actual_node
SET properties = NULL,
text_mod = NULL,
+ conflict_data = NULL,
tree_conflict_data = NULL,
- conflict_old = NULL,
- conflict_new = NULL,
- conflict_working = NULL,
- prop_reject = NULL,
older_checksum = NULL,
left_checksum = NULL,
right_checksum = NULL
@@ -633,23 +774,19 @@ WHERE wc_id = ?1 AND local_relpath = ?2
UPDATE actual_node
SET properties = NULL,
text_mod = NULL,
+ conflict_data = NULL,
tree_conflict_data = NULL,
- conflict_old = NULL,
- conflict_new = NULL,
- conflict_working = NULL,
- prop_reject = NULL,
older_checksum = NULL,
left_checksum = NULL,
right_checksum = NULL
WHERE wc_id = ?1
- AND (?2 = ''
- OR local_relpath = ?2
+ AND (local_relpath = ?2
OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
-- STMT_UPDATE_NODE_BASE_DEPTH
UPDATE nodes SET depth = ?3
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
- AND kind='dir'
+ AND kind=MAP_DIR
-- STMT_UPDATE_NODE_BASE_PRESENCE
UPDATE nodes SET presence = ?3
@@ -703,43 +840,33 @@ WHERE refcount = 0
DELETE FROM pristine
WHERE checksum = ?1 AND refcount = 0
--- STMT_SELECT_ACTUAL_CONFLICT_VICTIMS
-SELECT local_relpath
-FROM actual_node
-WHERE wc_id = ?1 AND parent_relpath = ?2 AND
- NOT ((prop_reject IS NULL) AND (conflict_old IS NULL)
- AND (conflict_new IS NULL) AND (conflict_working IS NULL)
- AND (tree_conflict_data IS NULL))
-
--- STMT_SELECT_CONFLICT_MARKER_FILES
-SELECT prop_reject, conflict_old, conflict_new, conflict_working
-FROM actual_node
-WHERE wc_id = ?1 AND (local_relpath = ?2 OR parent_relpath = ?2)
- AND ((prop_reject IS NOT NULL) OR (conflict_old IS NOT NULL)
- OR (conflict_new IS NOT NULL) OR (conflict_working IS NOT NULL))
+-- STMT_SELECT_COPY_PRISTINES
+/* For the root itself */
+SELECT n.checksum, md5_checksum, size
+FROM nodes_current n
+LEFT JOIN pristine p ON n.checksum = p.checksum
+WHERE wc_id = ?1
+ AND n.local_relpath = ?2
+ AND n.checksum IS NOT NULL
+UNION ALL
+/* And all descendants */
+SELECT n.checksum, md5_checksum, size
+FROM nodes n
+LEFT JOIN pristine p ON n.checksum = p.checksum
+WHERE wc_id = ?1
+ AND IS_STRICT_DESCENDANT_OF(n.local_relpath, ?2)
+ AND op_depth >=
+ (SELECT MAX(op_depth) FROM nodes WHERE wc_id = ?1 AND local_relpath = ?2)
+ AND n.checksum IS NOT NULL
--- STMT_SELECT_ACTUAL_CHILDREN_TREE_CONFLICT
-SELECT local_relpath, tree_conflict_data
-FROM actual_node
-WHERE wc_id = ?1 AND parent_relpath = ?2 AND tree_conflict_data IS NOT NULL
+-- STMT_VACUUM
+VACUUM
--- STMT_SELECT_CONFLICT_DETAILS
-SELECT prop_reject, conflict_old, conflict_new, conflict_working,
- tree_conflict_data
+-- STMT_SELECT_CONFLICT_VICTIMS
+SELECT local_relpath, conflict_data
FROM actual_node
-WHERE wc_id = ?1 AND local_relpath = ?2
-
--- STMT_CLEAR_TEXT_CONFLICT
-UPDATE actual_node SET
- conflict_old = NULL,
- conflict_new = NULL,
- conflict_working = NULL
-WHERE wc_id = ?1 AND local_relpath = ?2
-
--- STMT_CLEAR_PROPS_CONFLICT
-UPDATE actual_node SET
- prop_reject = NULL
-WHERE wc_id = ?1 AND local_relpath = ?2
+WHERE wc_id = ?1 AND parent_relpath = ?2 AND
+ NOT (conflict_data IS NULL)
-- STMT_INSERT_WC_LOCK
INSERT INTO wc_lock (wc_id, local_dir_relpath, locked_levels)
@@ -752,9 +879,8 @@ WHERE wc_id = ?1 AND local_dir_relpath = ?2
-- STMT_SELECT_ANCESTOR_WCLOCKS
SELECT local_dir_relpath, locked_levels FROM wc_lock
WHERE wc_id = ?1
- AND ((local_dir_relpath <= ?2 AND local_dir_relpath >= ?3)
+ AND ((local_dir_relpath >= ?3 AND local_dir_relpath <= ?2)
OR local_dir_relpath = '')
-ORDER BY local_dir_relpath DESC
-- STMT_DELETE_WC_LOCK
DELETE FROM wc_lock
@@ -762,7 +888,8 @@ WHERE wc_id = ?1 AND local_dir_relpath = ?2
-- STMT_FIND_WC_LOCK
SELECT local_dir_relpath FROM wc_lock
-WHERE wc_id = ?1 AND local_dir_relpath LIKE ?2 ESCAPE '#'
+WHERE wc_id = ?1
+ AND IS_STRICT_DESCENDANT_OF(local_dir_relpath, ?2)
-- STMT_DELETE_WC_LOCK_ORPHAN
DELETE FROM wc_lock
@@ -774,8 +901,7 @@ AND NOT EXISTS (SELECT 1 FROM nodes
-- STMT_DELETE_WC_LOCK_ORPHAN_RECURSIVE
DELETE FROM wc_lock
WHERE wc_id = ?1
- AND (?2 = ''
- OR local_dir_relpath = ?2
+ AND (local_dir_relpath = ?2
OR IS_STRICT_DESCENDANT_OF(local_dir_relpath, ?2))
AND NOT EXISTS (SELECT 1 FROM nodes
WHERE nodes.wc_id = ?1
@@ -789,9 +915,9 @@ INSERT OR REPLACE INTO nodes (
wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path,
revision, presence, depth, kind, changed_revision, changed_date,
changed_author, checksum, properties, dav_cache, symlink_target,
- file_external )
+ inherited_props, file_external )
VALUES (?1, ?2, 0,
- ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, ?15, ?16,
+ ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, ?15, ?16, ?17,
(SELECT file_external FROM nodes
WHERE wc_id = ?1
AND local_relpath = ?2
@@ -801,23 +927,42 @@ VALUES (?1, ?2, 0,
INSERT OR REPLACE INTO nodes (
wc_id, local_relpath, op_depth,
parent_relpath, presence, kind)
-SELECT wc_id, local_relpath, ?3 /*op_depth*/,
- parent_relpath, ?4 /*presence*/, kind
-FROM nodes
-WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
+VALUES(?1, ?2, ?3, ?4, MAP_BASE_DELETED, ?5)
+
+-- STMT_DELETE_NO_LOWER_LAYER
+DELETE FROM nodes
+ WHERE wc_id = ?1
+ AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
+ AND op_depth = ?3
+ AND NOT EXISTS (SELECT 1 FROM nodes n
+ WHERE n.wc_id = ?1
+ AND n.local_relpath = nodes.local_relpath
+ AND n.op_depth = ?4
+ AND n.presence IN (MAP_NORMAL, MAP_INCOMPLETE))
+
+-- STMT_REPLACE_WITH_BASE_DELETED
+INSERT OR REPLACE INTO nodes (wc_id, local_relpath, op_depth, parent_relpath,
+ kind, moved_to, presence)
+SELECT wc_id, local_relpath, op_depth, parent_relpath,
+ kind, moved_to, MAP_BASE_DELETED
+ FROM nodes
+ WHERE wc_id = ?1
+ AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
+ AND op_depth = ?3
/* If this query is updated, STMT_INSERT_DELETE_LIST should too. */
-- STMT_INSERT_DELETE_FROM_NODE_RECURSIVE
INSERT INTO nodes (
wc_id, local_relpath, op_depth, parent_relpath, presence, kind)
-SELECT wc_id, local_relpath, ?4 /*op_depth*/, parent_relpath, 'base-deleted',
+SELECT wc_id, local_relpath, ?4 /*op_depth*/, parent_relpath, MAP_BASE_DELETED,
kind
FROM nodes
WHERE wc_id = ?1
AND (local_relpath = ?2
OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
AND op_depth = ?3
- AND presence NOT IN ('base-deleted', 'not-present', 'excluded', 'absent')
+ AND presence NOT IN (MAP_BASE_DELETED, MAP_NOT_PRESENT, MAP_EXCLUDED, MAP_SERVER_EXCLUDED)
+ AND file_external IS NULL
-- STMT_INSERT_WORKING_NODE_FROM_BASE_COPY
INSERT INTO nodes (
@@ -836,92 +981,79 @@ WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
INSERT INTO nodes (
wc_id, local_relpath, op_depth, parent_relpath, presence, kind)
SELECT wc_id, local_relpath, ?3 /*op_depth*/, parent_relpath,
- 'base-deleted', kind
+ MAP_BASE_DELETED, kind
FROM nodes
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
+/* Not valid on the wc-root */
-- STMT_UPDATE_OP_DEPTH_INCREASE_RECURSIVE
UPDATE nodes SET op_depth = ?3 + 1
WHERE wc_id = ?1
- AND (?2 = ''
- OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
+ AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
+ AND op_depth = ?3
+
+-- STMT_UPDATE_OP_DEPTH_RECURSIVE
+UPDATE nodes SET op_depth = ?4, moved_here = NULL
+WHERE wc_id = ?1
+ AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
AND op_depth = ?3
-- STMT_DOES_NODE_EXIST
SELECT 1 FROM nodes WHERE wc_id = ?1 AND local_relpath = ?2
LIMIT 1
--- STMT_HAS_SERVER_EXCLUDED_NODES
+-- STMT_HAS_SERVER_EXCLUDED_DESCENDANTS
SELECT local_relpath FROM nodes
WHERE wc_id = ?1
- AND (?2 = ''
- OR local_relpath = ?2
- OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
- AND op_depth = 0 AND presence = 'absent'
+ AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
+ AND op_depth = 0 AND presence = MAP_SERVER_EXCLUDED
LIMIT 1
-/* ### Select all server-excluded nodes. */
--- STMT_SELECT_ALL_SERVER_EXCLUDED_NODES
+/* Select all excluded nodes. Not valid on the WC-root */
+-- STMT_SELECT_ALL_EXCLUDED_DESCENDANTS
SELECT local_relpath FROM nodes
WHERE wc_id = ?1
- AND (?2 = ''
- OR local_relpath = ?2
- OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
+ AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
AND op_depth = 0
- AND presence = 'absent'
+ AND (presence = MAP_SERVER_EXCLUDED OR presence = MAP_EXCLUDED)
--- STMT_INSERT_WORKING_NODE_COPY_FROM_BASE
+/* Creates a copy from one top level NODE to a different location */
+-- STMT_INSERT_WORKING_NODE_COPY_FROM
INSERT OR REPLACE INTO nodes (
wc_id, local_relpath, op_depth, parent_relpath, repos_id,
- repos_path, revision, presence, depth, kind, changed_revision,
+ repos_path, revision, presence, depth, moved_here, kind, changed_revision,
changed_date, changed_author, checksum, properties, translated_size,
- last_mod_time, symlink_target )
-SELECT wc_id, ?3 /*local_relpath*/, ?4 /*op_depth*/, ?5 /*parent_relpath*/,
- repos_id, repos_path, revision, ?6 /*presence*/, depth,
- kind, changed_revision, changed_date, changed_author, checksum, properties,
- translated_size, last_mod_time, symlink_target
-FROM nodes
-WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
-
--- STMT_INSERT_WORKING_NODE_COPY_FROM_WORKING
-INSERT OR REPLACE INTO nodes (
- wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path,
- revision, presence, depth, kind, changed_revision, changed_date,
- changed_author, checksum, properties, translated_size, last_mod_time,
- symlink_target )
+ last_mod_time, symlink_target, moved_to )
SELECT wc_id, ?3 /*local_relpath*/, ?4 /*op_depth*/, ?5 /*parent_relpath*/,
repos_id, repos_path, revision, ?6 /*presence*/, depth,
- kind, changed_revision, changed_date, changed_author, checksum, properties,
- translated_size, last_mod_time, symlink_target
-FROM nodes
-WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > 0
-ORDER BY op_depth DESC
-LIMIT 1
+ ?7/*moved_here*/, kind, changed_revision, changed_date,
+ changed_author, checksum, properties, translated_size,
+ last_mod_time, symlink_target,
+ (SELECT dst.moved_to FROM nodes AS dst
+ WHERE dst.wc_id = ?1
+ AND dst.local_relpath = ?3
+ AND dst.op_depth = ?4)
+FROM nodes_current
+WHERE wc_id = ?1 AND local_relpath = ?2
-- STMT_INSERT_WORKING_NODE_COPY_FROM_DEPTH
INSERT OR REPLACE INTO nodes (
- wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path,
- revision, presence, depth, kind, changed_revision, changed_date,
- changed_author, checksum, properties, translated_size, last_mod_time,
- symlink_target )
+ wc_id, local_relpath, op_depth, parent_relpath, repos_id,
+ repos_path, revision, presence, depth, moved_here, kind, changed_revision,
+ changed_date, changed_author, checksum, properties, translated_size,
+ last_mod_time, symlink_target, moved_to )
SELECT wc_id, ?3 /*local_relpath*/, ?4 /*op_depth*/, ?5 /*parent_relpath*/,
- repos_id, repos_path, revision, ?6 /*presence*/,
- depth, kind, changed_revision, changed_date, changed_author, checksum,
- properties, translated_size, last_mod_time, symlink_target
+ repos_id, repos_path, revision, ?6 /*presence*/, depth,
+ ?8 /*moved_here*/, kind, changed_revision, changed_date,
+ changed_author, checksum, properties, translated_size,
+ last_mod_time, symlink_target,
+ (SELECT dst.moved_to FROM nodes AS dst
+ WHERE dst.wc_id = ?1
+ AND dst.local_relpath = ?3
+ AND dst.op_depth = ?4)
FROM nodes
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?7
--- STMT_INSERT_ACTUAL_NODE_FROM_ACTUAL_NODE
-INSERT OR REPLACE INTO actual_node (
- wc_id, local_relpath, parent_relpath, properties,
- conflict_old, conflict_new, conflict_working,
- prop_reject, changelist, text_mod, tree_conflict_data )
-SELECT wc_id, ?3 /*local_relpath*/, ?4 /*parent_relpath*/, properties,
- conflict_old, conflict_new, conflict_working,
- prop_reject, changelist, text_mod, tree_conflict_data
-FROM actual_node
-WHERE wc_id = ?1 AND local_relpath = ?2
-
-- STMT_UPDATE_BASE_REVISION
UPDATE nodes SET revision = ?3
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
@@ -941,55 +1073,132 @@ INSERT OR REPLACE INTO externals (
repos_id, def_repos_relpath, def_operational_revision, def_revision)
VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10)
--- STMT_INSERT_EXTERNAL_UPGRADE
-INSERT OR REPLACE INTO externals (
- wc_id, local_relpath, parent_relpath, presence, kind, def_local_relpath,
- repos_id, def_repos_relpath, def_operational_revision, def_revision)
-VALUES (?1, ?2, ?3, ?4,
- CASE WHEN (SELECT file_external FROM nodes
- WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0)
- IS NOT NULL THEN 'file' ELSE 'unknown' END,
- ?5, ?6, ?7, ?8, ?9)
-
-- STMT_SELECT_EXTERNAL_INFO
SELECT presence, kind, def_local_relpath, repos_id,
- def_repos_relpath, def_operational_revision, def_revision, presence
+ def_repos_relpath, def_operational_revision, def_revision
FROM externals WHERE wc_id = ?1 AND local_relpath = ?2
LIMIT 1
--- STMT_SELECT_EXTERNAL_CHILDREN
-SELECT local_relpath
-FROM externals WHERE wc_id = ?1 AND parent_relpath = ?2
+-- STMT_DELETE_FILE_EXTERNALS
+DELETE FROM nodes
+WHERE wc_id = ?1
+ AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
+ AND op_depth = 0
+ AND file_external IS NOT NULL
+
+-- STMT_DELETE_FILE_EXTERNAL_REGISTATIONS
+DELETE FROM externals
+WHERE wc_id = ?1
+ AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
+ AND kind != MAP_DIR
+
+-- STMT_DELETE_EXTERNAL_REGISTATIONS
+DELETE FROM externals
+WHERE wc_id = ?1
+ AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
+
+/* Select all committable externals, i.e. only unpegged ones on the same
+ * repository as the target path ?2, that are defined by WC ?1 to
+ * live below the target path. It does not matter which ancestor has the
+ * svn:externals definition, only the local path at which the external is
+ * supposed to be checked out is queried.
+ * Arguments:
+ * ?1: wc_id.
+ * ?2: the target path, local relpath inside ?1.
+ *
+ * ### NOTE: This statement deliberately removes file externals that live
+ * inside an unversioned dir, because commit still breaks on those.
+ * Once that's been fixed, the conditions below "--->8---" become obsolete. */
+-- STMT_SELECT_COMMITTABLE_EXTERNALS_BELOW
+SELECT local_relpath, kind, def_repos_relpath,
+ (SELECT root FROM repository AS r WHERE r.id = e.repos_id)
+FROM externals e
+WHERE wc_id = ?1
+ AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
+ AND def_revision IS NULL
+ AND repos_id = (SELECT repos_id
+ FROM nodes AS n
+ WHERE n.wc_id = ?1
+ AND n.local_relpath = ''
+ AND n.op_depth = 0)
+ AND ((kind='dir')
+ OR EXISTS (SELECT 1 FROM nodes
+ WHERE nodes.wc_id = e.wc_id
+ AND nodes.local_relpath = e.parent_relpath))
+
+-- STMT_SELECT_COMMITTABLE_EXTERNALS_IMMEDIATELY_BELOW
+SELECT local_relpath, kind, def_repos_relpath,
+ (SELECT root FROM repository AS r WHERE r.id = e.repos_id)
+FROM externals e
+WHERE wc_id = ?1
+ AND IS_STRICT_DESCENDANT_OF(e.local_relpath, ?2)
+ AND parent_relpath = ?2
+ AND def_revision IS NULL
+ AND repos_id = (SELECT repos_id
+ FROM nodes AS n
+ WHERE n.wc_id = ?1
+ AND n.local_relpath = ''
+ AND n.op_depth = 0)
+ AND ((kind='dir')
+ OR EXISTS (SELECT 1 FROM nodes
+ WHERE nodes.wc_id = e.wc_id
+ AND nodes.local_relpath = e.parent_relpath))
-- STMT_SELECT_EXTERNALS_DEFINED
SELECT local_relpath, def_local_relpath
FROM externals
-WHERE wc_id = ?1
- AND (?2 = ''
- OR def_local_relpath = ?2
- OR IS_STRICT_DESCENDANT_OF(def_local_relpath, ?2))
-
--- STMT_UPDATE_EXTERNAL_FILEINFO
-UPDATE externals SET recorded_size = ?3, recorded_mod_time = ?4
-WHERE wc_id = ?1 AND local_relpath = ?2
+/* ### The Sqlite optimizer needs help here ###
+ * WHERE wc_id = ?1
+ * AND (def_local_relpath = ?2
+ * OR IS_STRICT_DESCENDANT_OF(def_local_relpath, ?2)) */
+WHERE (wc_id = ?1 AND def_local_relpath = ?2)
+ OR (wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(def_local_relpath, ?2))
-- STMT_DELETE_EXTERNAL
DELETE FROM externals
WHERE wc_id = ?1 AND local_relpath = ?2
-- STMT_SELECT_EXTERNAL_PROPERTIES
+/* ### It would be nice if Sqlite would handle
+ * SELECT IFNULL((SELECT properties FROM actual_node a
+ * WHERE a.wc_id = ?1 AND A.local_relpath = n.local_relpath),
+ * properties),
+ * local_relpath, depth
+ * FROM nodes_current n
+ * WHERE wc_id = ?1
+ * AND (local_relpath = ?2
+ * OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
+ * AND kind = MAP_DIR AND presence IN (MAP_NORMAL, MAP_INCOMPLETE)
+ * ### But it would take a double table scan execution plan for it.
+ * ### Maybe there is something else going on? */
SELECT IFNULL((SELECT properties FROM actual_node a
WHERE a.wc_id = ?1 AND A.local_relpath = n.local_relpath),
properties),
local_relpath, depth
-FROM nodes n
-WHERE wc_id = ?1
- AND (?2 = ''
- OR local_relpath = ?2
- OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
- AND kind = 'dir' AND presence='normal'
- AND op_depth=(SELECT MAX(op_depth) FROM nodes o
- WHERE o.wc_id = ?1 AND o.local_relpath = n.local_relpath)
+FROM nodes_current n
+WHERE wc_id = ?1 AND local_relpath = ?2
+ AND kind = MAP_DIR AND presence IN (MAP_NORMAL, MAP_INCOMPLETE)
+UNION ALL
+SELECT IFNULL((SELECT properties FROM actual_node a
+ WHERE a.wc_id = ?1 AND A.local_relpath = n.local_relpath),
+ properties),
+ local_relpath, depth
+FROM nodes_current n
+WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
+ AND kind = MAP_DIR AND presence IN (MAP_NORMAL, MAP_INCOMPLETE)
+
+-- STMT_SELECT_CURRENT_PROPS_RECURSIVE
+/* ### Ugly OR to make sqlite use the proper optimizations */
+SELECT IFNULL((SELECT properties FROM actual_node a
+ WHERE a.wc_id = ?1 AND A.local_relpath = n.local_relpath),
+ properties),
+ local_relpath
+FROM nodes_current n
+WHERE (wc_id = ?1 AND local_relpath = ?2)
+ OR (wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
+
+-- STMT_PRAGMA_LOCKING_MODE
+PRAGMA locking_mode = exclusive
/* ------------------------------------------------------------------------- */
@@ -997,11 +1206,8 @@ WHERE wc_id = ?1
-- STMT_INSERT_ACTUAL_NODE
INSERT OR REPLACE INTO actual_node (
- wc_id, local_relpath, parent_relpath, properties, conflict_old,
- conflict_new,
- conflict_working, prop_reject, changelist, text_mod,
- tree_conflict_data)
-VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, NULL, ?10)
+ wc_id, local_relpath, parent_relpath, properties, changelist, conflict_data)
+VALUES (?1, ?2, ?3, ?4, ?5, ?6)
/* ------------------------------------------------------------------------- */
@@ -1012,96 +1218,85 @@ UPDATE actual_node SET conflict_data = ?3
WHERE wc_id = ?1 AND local_relpath = ?2
-- STMT_INSERT_ACTUAL_CONFLICT_DATA
-INSERT INTO actual_node (
- wc_id, local_relpath, conflict_data, parent_relpath)
+INSERT INTO actual_node (wc_id, local_relpath, conflict_data, parent_relpath)
VALUES (?1, ?2, ?3, ?4)
--- STMT_SELECT_OLD_TREE_CONFLICT
-SELECT wc_id, local_relpath, tree_conflict_data
-FROM actual_node
-WHERE tree_conflict_data IS NOT NULL
-
--- STMT_ERASE_OLD_CONFLICTS
-UPDATE actual_node SET tree_conflict_data = NULL
-
-- STMT_SELECT_ALL_FILES
SELECT local_relpath FROM nodes_current
-WHERE wc_id = ?1 AND parent_relpath = ?2 AND kind = 'file'
+WHERE wc_id = ?1 AND parent_relpath = ?2 AND kind = MAP_FILE
-- STMT_UPDATE_NODE_PROPS
UPDATE nodes SET properties = ?4
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3
--- STMT_HAS_WORKING_NODES
-SELECT 1 FROM nodes WHERE op_depth > 0
-LIMIT 1
-
--- STMT_HAS_ACTUAL_NODES_CONFLICTS
-SELECT 1 FROM actual_node
-WHERE NOT ((prop_reject IS NULL) AND (conflict_old IS NULL)
- AND (conflict_new IS NULL) AND (conflict_working IS NULL)
- AND (tree_conflict_data IS NULL))
-LIMIT 1
+-- STMT_PRAGMA_TABLE_INFO_NODES
+PRAGMA table_info("NODES")
-/* ------------------------------------------------------------------------- */
-/* PROOF OF CONCEPT: Complex queries for callback walks, caching results
- in a temporary table. */
+/* --------------------------------------------------------------------------
+ * Complex queries for callback walks, caching results in a temporary table.
+ *
+ * These target table are then used for joins against NODES, or for reporting
+ */
--- STMT_CREATE_NODE_PROPS_CACHE
-DROP TABLE IF EXISTS temp__node_props_cache;
-CREATE TEMPORARY TABLE temp__node_props_cache (
- local_Relpath TEXT NOT NULL,
+-- STMT_CREATE_TARGET_PROP_CACHE
+DROP TABLE IF EXISTS target_prop_cache;
+CREATE TEMPORARY TABLE target_prop_cache (
+ local_relpath TEXT NOT NULL PRIMARY KEY,
kind TEXT NOT NULL,
properties BLOB
- );
+);
/* ### Need index?
CREATE UNIQUE INDEX temp__node_props_cache_unique
ON temp__node_props_cache (local_relpath) */
--- STMT_CACHE_NODE_PROPS
-INSERT INTO temp__node_props_cache(local_relpath, kind, properties)
- SELECT local_relpath, kind, properties FROM nodes_current
- WHERE wc_id = ?1
- AND local_relpath IN (SELECT local_relpath FROM targets_list)
- AND presence IN ('normal', 'incomplete')
-
--- STMT_CACHE_ACTUAL_PROPS
-UPDATE temp__node_props_cache
- SET properties=
- IFNULL((SELECT properties FROM actual_node a
- WHERE a.wc_id = ?1
- AND a.local_relpath = temp__node_props_cache.local_relpath),
- properties)
-
--- STMT_CACHE_NODE_BASE_PROPS
-INSERT INTO temp__node_props_cache (local_relpath, kind, properties)
- SELECT local_relpath, kind, properties FROM nodes_base
- WHERE wc_id = ?1
- AND local_relpath IN (SELECT local_relpath FROM targets_list)
- AND presence IN ('normal', 'incomplete')
-
--- STMT_CACHE_NODE_PRISTINE_PROPS
-INSERT INTO temp__node_props_cache(local_relpath, kind, properties)
- SELECT local_relpath, kind,
- IFNULL((SELECT properties FROM nodes nn
- WHERE n.presence = 'base-deleted'
- AND nn.wc_id = n.wc_id
- AND nn.local_relpath = n.local_relpath
- AND nn.op_depth < n.op_depth
- ORDER BY op_depth DESC),
- properties)
- FROM nodes_current n
- WHERE wc_id = ?1
- AND local_relpath IN (SELECT local_relpath FROM targets_list)
- AND presence IN ('normal', 'incomplete', 'base-deleted')
-
--- STMT_SELECT_RELEVANT_PROPS_FROM_CACHE
-SELECT local_relpath, properties FROM temp__node_props_cache
+-- STMT_CACHE_TARGET_PROPS
+INSERT INTO target_prop_cache(local_relpath, kind, properties)
+ SELECT n.local_relpath, n.kind,
+ IFNULL((SELECT properties FROM actual_node AS a
+ WHERE a.wc_id = n.wc_id
+ AND a.local_relpath = n.local_relpath),
+ n.properties)
+ FROM targets_list AS t
+ JOIN nodes AS n
+ ON n.wc_id = ?1
+ AND n.local_relpath = t.local_relpath
+ AND n.op_depth = (SELECT MAX(op_depth) FROM nodes AS n3
+ WHERE n3.wc_id = ?1
+ AND n3.local_relpath = t.local_relpath)
+ WHERE t.wc_id = ?1
+ AND (presence=MAP_NORMAL OR presence=MAP_INCOMPLETE)
+ ORDER BY t.local_relpath
+
+-- STMT_CACHE_TARGET_PRISTINE_PROPS
+INSERT INTO target_prop_cache(local_relpath, kind, properties)
+ SELECT n.local_relpath, n.kind,
+ CASE n.presence
+ WHEN MAP_BASE_DELETED
+ THEN (SELECT properties FROM nodes AS p
+ WHERE p.wc_id = n.wc_id
+ AND p.local_relpath = n.local_relpath
+ AND p.op_depth < n.op_depth
+ ORDER BY p.op_depth DESC /* LIMIT 1 */)
+ ELSE properties END
+ FROM targets_list AS t
+ JOIN nodes AS n
+ ON n.wc_id = ?1
+ AND n.local_relpath = t.local_relpath
+ AND n.op_depth = (SELECT MAX(op_depth) FROM nodes AS n3
+ WHERE n3.wc_id = ?1
+ AND n3.local_relpath = t.local_relpath)
+ WHERE t.wc_id = ?1
+ AND (presence = MAP_NORMAL
+ OR presence = MAP_INCOMPLETE
+ OR presence = MAP_BASE_DELETED)
+ ORDER BY t.local_relpath
+
+-- STMT_SELECT_ALL_TARGET_PROP_CACHE
+SELECT local_relpath, properties FROM target_prop_cache
ORDER BY local_relpath
--- STMT_DROP_NODE_PROPS_CACHE
-DROP TABLE IF EXISTS temp__node_props_cache;
-
+-- STMT_DROP_TARGET_PROP_CACHE
+DROP TABLE target_prop_cache;
-- STMT_CREATE_REVERT_LIST
DROP TABLE IF EXISTS revert_list;
@@ -1109,10 +1304,7 @@ CREATE TEMPORARY TABLE revert_list (
/* need wc_id if/when revert spans multiple working copies */
local_relpath TEXT NOT NULL,
actual INTEGER NOT NULL, /* 1 if an actual row, 0 if a nodes row */
- conflict_old TEXT,
- conflict_new TEXT,
- conflict_working TEXT,
- prop_reject TEXT,
+ conflict_data BLOB,
notify INTEGER, /* 1 if an actual row had props or tree conflict */
op_depth INTEGER,
repos_id INTEGER,
@@ -1131,39 +1323,44 @@ DROP TRIGGER IF EXISTS trigger_revert_list_actual_delete;
CREATE TEMPORARY TRIGGER trigger_revert_list_actual_delete
BEFORE DELETE ON actual_node
BEGIN
- INSERT OR REPLACE INTO revert_list(local_relpath, actual, conflict_old,
- conflict_new, conflict_working,
- prop_reject, notify)
- SELECT OLD.local_relpath, 1,
- OLD.conflict_old, OLD.conflict_new, OLD.conflict_working,
- OLD.prop_reject,
+ INSERT OR REPLACE INTO revert_list(local_relpath, actual, conflict_data,
+ notify)
+ SELECT OLD.local_relpath, 1, OLD.conflict_data,
CASE
- WHEN OLD.properties IS NOT NULL OR OLD.tree_conflict_data IS NOT NULL
- THEN 1 ELSE NULL END;
+ WHEN OLD.properties IS NOT NULL
+ THEN 1
+ WHEN NOT EXISTS(SELECT 1 FROM NODES n
+ WHERE n.wc_id = OLD.wc_id
+ AND n.local_relpath = OLD.local_relpath)
+ THEN 1
+ ELSE NULL
+ END;
END;
DROP TRIGGER IF EXISTS trigger_revert_list_actual_update;
CREATE TEMPORARY TRIGGER trigger_revert_list_actual_update
BEFORE UPDATE ON actual_node
BEGIN
- INSERT OR REPLACE INTO revert_list(local_relpath, actual, conflict_old,
- conflict_new, conflict_working,
- prop_reject, notify)
- SELECT OLD.local_relpath, 1,
- OLD.conflict_old, OLD.conflict_new, OLD.conflict_working,
- OLD.prop_reject,
+ INSERT OR REPLACE INTO revert_list(local_relpath, actual, conflict_data,
+ notify)
+ SELECT OLD.local_relpath, 1, OLD.conflict_data,
CASE
- WHEN OLD.properties IS NOT NULL OR OLD.tree_conflict_data IS NOT NULL
- THEN 1 ELSE NULL END;
+ WHEN OLD.properties IS NOT NULL
+ THEN 1
+ WHEN NOT EXISTS(SELECT 1 FROM NODES n
+ WHERE n.wc_id = OLD.wc_id
+ AND n.local_relpath = OLD.local_relpath)
+ THEN 1
+ ELSE NULL
+ END;
END
-- STMT_DROP_REVERT_LIST_TRIGGERS
-DROP TRIGGER IF EXISTS trigger_revert_list_nodes;
-DROP TRIGGER IF EXISTS trigger_revert_list_actual_delete;
-DROP TRIGGER IF EXISTS trigger_revert_list_actual_update
+DROP TRIGGER trigger_revert_list_nodes;
+DROP TRIGGER trigger_revert_list_actual_delete;
+DROP TRIGGER trigger_revert_list_actual_update
-- STMT_SELECT_REVERT_LIST
-SELECT conflict_old, conflict_new, conflict_working, prop_reject, notify,
- actual, op_depth, repos_id, kind
+SELECT actual, notify, kind, op_depth, repos_id, conflict_data
FROM revert_list
WHERE local_relpath = ?1
ORDER BY actual DESC
@@ -1171,7 +1368,7 @@ ORDER BY actual DESC
-- STMT_SELECT_REVERT_LIST_COPIED_CHILDREN
SELECT local_relpath, kind
FROM revert_list
-WHERE local_relpath LIKE ?1 ESCAPE '#'
+WHERE IS_STRICT_DESCENDANT_OF(local_relpath, ?1)
AND op_depth >= ?2
AND repos_id IS NOT NULL
ORDER BY local_relpath
@@ -1182,13 +1379,15 @@ DELETE FROM revert_list WHERE local_relpath = ?1
-- STMT_SELECT_REVERT_LIST_RECURSIVE
SELECT DISTINCT local_relpath
FROM revert_list
-WHERE (local_relpath = ?1 OR local_relpath LIKE ?2 ESCAPE '#')
+WHERE (local_relpath = ?1
+ OR IS_STRICT_DESCENDANT_OF(local_relpath, ?1))
AND (notify OR actual = 0)
ORDER BY local_relpath
-- STMT_DELETE_REVERT_LIST_RECURSIVE
DELETE FROM revert_list
-WHERE local_relpath = ?1 OR local_relpath LIKE ?2 ESCAPE '#'
+WHERE (local_relpath = ?1
+ OR IS_STRICT_DESCENDANT_OF(local_relpath, ?1))
-- STMT_DROP_REVERT_LIST
DROP TABLE IF EXISTS revert_list
@@ -1198,21 +1397,23 @@ DROP TABLE IF EXISTS delete_list;
CREATE TEMPORARY TABLE delete_list (
/* ### we should put the wc_id in here in case a delete spans multiple
### working copies. queries, etc will need to be adjusted. */
- local_relpath TEXT PRIMARY KEY NOT NULL
+ local_relpath TEXT PRIMARY KEY NOT NULL UNIQUE
)
-/* This matches the selection in STMT_INSERT_DELETE_FROM_NODE_RECURSIVE */
+/* This matches the selection in STMT_INSERT_DELETE_FROM_NODE_RECURSIVE.
+ A subquery is used instead of nodes_current to avoid a table scan */
-- STMT_INSERT_DELETE_LIST
INSERT INTO delete_list(local_relpath)
-SELECT local_relpath FROM nodes n
+SELECT local_relpath FROM nodes AS n
WHERE wc_id = ?1
AND (local_relpath = ?2
OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
AND op_depth >= ?3
- AND presence NOT IN ('base-deleted', 'not-present', 'excluded', 'absent')
- AND op_depth = (SELECT MAX(op_depth) FROM nodes s
- WHERE s.wc_id = n.wc_id
+ AND op_depth = (SELECT MAX(s.op_depth) FROM nodes AS s
+ WHERE s.wc_id = ?1
AND s.local_relpath = n.local_relpath)
+ AND presence NOT IN (MAP_BASE_DELETED, MAP_NOT_PRESENT, MAP_EXCLUDED, MAP_SERVER_EXCLUDED)
+ AND file_external IS NULL
-- STMT_SELECT_DELETE_LIST
SELECT local_relpath FROM delete_list
@@ -1221,6 +1422,30 @@ ORDER BY local_relpath
-- STMT_FINALIZE_DELETE
DROP TABLE IF EXISTS delete_list
+-- STMT_CREATE_UPDATE_MOVE_LIST
+DROP TABLE IF EXISTS update_move_list;
+CREATE TEMPORARY TABLE update_move_list (
+/* ### we should put the wc_id in here in case a move update spans multiple
+ ### working copies. queries, etc will need to be adjusted. */
+ local_relpath TEXT PRIMARY KEY NOT NULL UNIQUE,
+ action INTEGER NOT NULL,
+ kind INTEGER NOT NULL,
+ content_state INTEGER NOT NULL,
+ prop_state INTEGER NOT NULL
+ )
+
+-- STMT_INSERT_UPDATE_MOVE_LIST
+INSERT INTO update_move_list(local_relpath, action, kind, content_state,
+ prop_state)
+VALUES (?1, ?2, ?3, ?4, ?5)
+
+-- STMT_SELECT_UPDATE_MOVE_LIST
+SELECT local_relpath, action, kind, content_state, prop_state
+FROM update_move_list
+ORDER BY local_relpath
+
+-- STMT_FINALIZE_UPDATE_MOVE
+DROP TABLE IF EXISTS update_move_list
/* ------------------------------------------------------------------------- */
@@ -1230,30 +1455,27 @@ DROP TABLE IF EXISTS delete_list
SELECT MIN(revision), MAX(revision),
MIN(changed_revision), MAX(changed_revision) FROM nodes
WHERE wc_id = ?1
- AND (?2 = ''
- OR local_relpath = ?2
- OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
- AND presence IN ('normal', 'incomplete')
+ AND (local_relpath = ?2
+ OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
+ AND presence IN (MAP_NORMAL, MAP_INCOMPLETE)
AND file_external IS NULL
AND op_depth = 0
-- STMT_HAS_SPARSE_NODES
SELECT 1 FROM nodes
WHERE wc_id = ?1
- AND (?2 = ''
- OR local_relpath = ?2
+ AND (local_relpath = ?2
OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
AND op_depth = 0
- AND (presence IN ('absent', 'excluded')
- OR depth NOT IN ('infinity', 'unknown'))
+ AND (presence IN (MAP_SERVER_EXCLUDED, MAP_EXCLUDED)
+ OR depth NOT IN (MAP_DEPTH_INFINITY, MAP_DEPTH_UNKNOWN))
AND file_external IS NULL
LIMIT 1
-- STMT_SUBTREE_HAS_TREE_MODIFICATIONS
SELECT 1 FROM nodes
WHERE wc_id = ?1
- AND (?2 = ''
- OR local_relpath = ?2
+ AND (local_relpath = ?2
OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
AND op_depth > 0
LIMIT 1
@@ -1261,90 +1483,188 @@ LIMIT 1
-- STMT_SUBTREE_HAS_PROP_MODIFICATIONS
SELECT 1 FROM actual_node
WHERE wc_id = ?1
- AND (?2 = ''
- OR local_relpath = ?2
+ AND (local_relpath = ?2
OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
AND properties IS NOT NULL
LIMIT 1
-/* Determine if there is some switched subtree in just SQL. This looks easy,
- but it really isn't, because we don't have a simple (and optimizable)
- path join operation in SQL.
-
- To work around that we have 4 different cases:
- * Check on a node that is neither wcroot nor repos root
- * Check on a node that is repos_root, but not wcroot.
- * Check on a node that is wcroot, but not repos root.
- * Check on a node that is both wcroot and repos root.
-
- To make things easier, our testsuite is usually in that last category,
- while normal working copies are almost always in one of the others.
-*/
-- STMT_HAS_SWITCHED
-SELECT o.repos_path || '/' || SUBSTR(s.local_relpath, LENGTH(?2)+2) AS expected
- /*,s.local_relpath, s.repos_path, o.local_relpath, o.repos_path*/
-FROM nodes AS o
-LEFT JOIN nodes AS s
-ON o.wc_id = s.wc_id
- AND IS_STRICT_DESCENDANT_OF(s.local_relpath, ?2)
- AND s.op_depth = 0
- AND s.repos_id = o.repos_id
- AND s.file_external IS NULL
-WHERE o.wc_id = ?1 AND o.local_relpath=?2 AND o.op_depth=0
- AND s.repos_path != expected
+SELECT 1
+FROM nodes
+WHERE wc_id = ?1
+ AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
+ AND op_depth = 0
+ AND file_external IS NULL
+ AND presence IN (MAP_NORMAL, MAP_INCOMPLETE)
+ AND repos_path IS NOT RELPATH_SKIP_JOIN(?2, ?3, local_relpath)
LIMIT 1
--- STMT_HAS_SWITCHED_REPOS_ROOT
-SELECT SUBSTR(s.local_relpath, LENGTH(?2)+2) AS expected
- /*,s.local_relpath, s.repos_path, o.local_relpath, o.repos_path*/
-FROM nodes AS o
-LEFT JOIN nodes AS s
-ON o.wc_id = s.wc_id
- AND IS_STRICT_DESCENDANT_OF(s.local_relpath, ?2)
- AND s.op_depth = 0
- AND s.repos_id = o.repos_id
- AND s.file_external IS NULL
-WHERE o.wc_id = ?1 AND o.local_relpath=?2 AND o.op_depth=0
- AND s.repos_path != expected
-LIMIT 1
+-- STMT_SELECT_BASE_FILES_RECURSIVE
+SELECT local_relpath, translated_size, last_mod_time FROM nodes AS n
+WHERE wc_id = ?1
+ AND (local_relpath = ?2
+ OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
+ AND op_depth = 0
+ AND kind=MAP_FILE
+ AND presence=MAP_NORMAL
+ AND file_external IS NULL
--- STMT_HAS_SWITCHED_WCROOT
-SELECT o.repos_path || '/' || s.local_relpath AS expected
- /*,s.local_relpath, s.repos_path, o.local_relpath, o.repos_path*/
-FROM nodes AS o
-LEFT JOIN nodes AS s
-ON o.wc_id = s.wc_id
- AND s.local_relpath != ''
- AND s.op_depth = 0
- AND s.repos_id = o.repos_id
- AND s.file_external IS NULL
-WHERE o.wc_id = ?1 AND o.local_relpath=?2 AND o.op_depth=0
- AND s.repos_path != expected
-LIMIT 1
+-- STMT_SELECT_MOVED_FROM_RELPATH
+SELECT local_relpath, op_depth FROM nodes
+WHERE wc_id = ?1 AND moved_to = ?2 AND op_depth > 0
--- STMT_HAS_SWITCHED_WCROOT_REPOS_ROOT
-SELECT s.local_relpath AS expected
- /*,s.local_relpath, s.repos_path, o.local_relpath, o.repos_path*/
-FROM nodes AS o
-LEFT JOIN nodes AS s
-ON o.wc_id = s.wc_id
- AND s.local_relpath != ''
- AND s.op_depth = 0
- AND s.repos_id = o.repos_id
- AND s.file_external IS NULL
-WHERE o.wc_id = ?1 AND o.local_relpath=?2 AND o.op_depth=0
- AND s.repos_path != expected
-LIMIT 1
+-- STMT_UPDATE_MOVED_TO_RELPATH
+UPDATE nodes SET moved_to = ?4
+WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3
--- STMT_SELECT_BASE_FILES_RECURSIVE
-SELECT local_relpath, translated_size, last_mod_time FROM nodes AS n
+-- STMT_CLEAR_MOVED_TO_RELPATH
+UPDATE nodes SET moved_to = NULL
+WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3
+
+-- STMT_CLEAR_MOVED_HERE_RECURSIVE
+UPDATE nodes SET moved_here = NULL
WHERE wc_id = ?1
- AND (?2 = ''
- OR local_relpath = ?2
+ AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
+ AND op_depth = ?3
+
+/* This statement returns pairs of move-roots below the path ?2 in WC_ID ?1.
+ * Each row returns a moved-here path (always a child of ?2) in the first
+ * column, and its matching moved-away (deleted) path in the second column. */
+-- STMT_SELECT_MOVED_HERE_CHILDREN
+SELECT moved_to, local_relpath FROM nodes
+WHERE wc_id = ?1 AND op_depth > 0
+ AND IS_STRICT_DESCENDANT_OF(moved_to, ?2)
+
+/* If the node is moved here (r.moved_here = 1) we are really interested in
+ where the node was moved from. To obtain that we need the op_depth, but
+ this form of select only allows a single return value */
+-- STMT_SELECT_MOVED_FOR_DELETE
+SELECT local_relpath, moved_to, op_depth,
+ (SELECT CASE WHEN r.moved_here THEN r.op_depth END FROM nodes r
+ WHERE r.wc_id = ?1
+ AND r.local_relpath = n.local_relpath
+ AND r.op_depth < n.op_depth
+ ORDER BY r.op_depth DESC LIMIT 1) AS moved_here_op_depth
+ FROM nodes n
+WHERE wc_id = ?1
+ AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
+ AND moved_to IS NOT NULL
+ AND op_depth >= ?3
+
+-- STMT_SELECT_MOVED_FROM_FOR_DELETE
+SELECT local_relpath, op_depth,
+ (SELECT CASE WHEN r.moved_here THEN r.op_depth END FROM nodes r
+ WHERE r.wc_id = ?1
+ AND r.local_relpath = n.local_relpath
+ AND r.op_depth < n.op_depth
+ ORDER BY r.op_depth DESC LIMIT 1) AS moved_here_op_depth
+ FROM nodes n
+WHERE wc_id = ?1 AND moved_to = ?2 AND op_depth > 0
+
+-- STMT_UPDATE_MOVED_TO_DESCENDANTS
+UPDATE nodes SET moved_to = RELPATH_SKIP_JOIN(?2, ?3, moved_to)
+ WHERE wc_id = ?1
+ AND IS_STRICT_DESCENDANT_OF(moved_to, ?2)
+
+-- STMT_CLEAR_MOVED_TO_DESCENDANTS
+UPDATE nodes SET moved_to = NULL
+ WHERE wc_id = ?1
+ AND IS_STRICT_DESCENDANT_OF(moved_to, ?2)
+
+
+/* This statement returns pairs of move-roots below the path ?2 in WC_ID ?1,
+ * where the source of the move is within the subtree rooted at path ?2, and
+ * the destination of the move is outside the subtree rooted at path ?2. */
+-- STMT_SELECT_MOVED_PAIR2
+SELECT local_relpath, moved_to, op_depth FROM nodes
+WHERE wc_id = ?1
+ AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
+ AND moved_to IS NOT NULL
+ AND NOT IS_STRICT_DESCENDANT_OF(moved_to, ?2)
+ AND op_depth >= (SELECT MAX(op_depth) FROM nodes o
+ WHERE o.wc_id = ?1
+ AND o.local_relpath = ?2)
+
+-- STMT_SELECT_MOVED_PAIR3
+SELECT local_relpath, moved_to, op_depth, kind FROM nodes
+WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3
+ AND moved_to IS NOT NULL
+UNION ALL
+SELECT local_relpath, moved_to, op_depth, kind FROM nodes
+WHERE wc_id = ?1
+ AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
+ AND op_depth > ?3
+ AND moved_to IS NOT NULL
+ORDER BY local_relpath, op_depth
+
+-- STMT_SELECT_MOVED_OUTSIDE
+SELECT local_relpath, moved_to, op_depth FROM nodes
+WHERE wc_id = ?1
+ AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
+ AND op_depth >= ?3
+ AND moved_to IS NOT NULL
+ AND NOT IS_STRICT_DESCENDANT_OF(moved_to, ?2)
+
+-- STMT_SELECT_OP_DEPTH_MOVED_PAIR
+SELECT n.local_relpath, n.moved_to,
+ (SELECT o.repos_path FROM nodes AS o
+ WHERE o.wc_id = n.wc_id
+ AND o.local_relpath = n.local_relpath
+ AND o.op_depth < ?3 ORDER BY o.op_depth DESC LIMIT 1)
+FROM nodes AS n
+WHERE n.wc_id = ?1
+ AND IS_STRICT_DESCENDANT_OF(n.local_relpath, ?2)
+ AND n.op_depth = ?3
+ AND n.moved_to IS NOT NULL
+
+-- STMT_SELECT_MOVED_DESCENDANTS
+SELECT n.local_relpath, h.moved_to
+FROM nodes n, nodes h
+WHERE n.wc_id = ?1
+ AND h.wc_id = ?1
+ AND IS_STRICT_DESCENDANT_OF(n.local_relpath, ?2)
+ AND h.local_relpath = n.local_relpath
+ AND n.op_depth = ?3
+ AND h.op_depth = (SELECT MIN(o.op_depth)
+ FROM nodes o
+ WHERE o.wc_id = ?1
+ AND o.local_relpath = n.local_relpath
+ AND o.op_depth > ?3)
+ AND h.moved_to IS NOT NULL
+
+-- STMT_COMMIT_UPDATE_ORIGIN
+/* Note that the only reason this SUBSTR() trick is valid is that you
+ can move neither the working copy nor the repository root.
+
+ SUBSTR(local_relpath, LENGTH(?2)+1) includes the '/' of the path */
+UPDATE nodes SET repos_id = ?4,
+ repos_path = ?5 || SUBSTR(local_relpath, LENGTH(?2)+1),
+ revision = ?6
+WHERE wc_id = ?1
+ AND (local_relpath = ?2
OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
+ AND op_depth = ?3
+
+-- STMT_HAS_LAYER_BETWEEN
+SELECT 1 FROM NODES
+WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3 AND op_depth < ?4
+
+-- STMT_SELECT_REPOS_PATH_REVISION
+SELECT local_relpath, repos_path, revision FROM nodes
+WHERE wc_id = ?1
+ AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
+ AND op_depth = 0
+ORDER BY local_relpath
+
+-- STMT_SELECT_HAS_NON_FILE_CHILDREN
+SELECT 1 FROM nodes
+WHERE wc_id = ?1 AND parent_relpath = ?2 AND op_depth = 0 AND kind != MAP_FILE
+
+-- STMT_SELECT_HAS_GRANDCHILDREN
+SELECT 1 FROM nodes
+WHERE wc_id = ?1
+ AND IS_STRICT_DESCENDANT_OF(parent_relpath, ?2)
AND op_depth = 0
- AND kind='file'
- AND presence='normal'
AND file_external IS NULL
/* ------------------------------------------------------------------------- */
@@ -1353,7 +1673,52 @@ WHERE wc_id = ?1
-- STMT_SELECT_ALL_NODES
SELECT op_depth, local_relpath, parent_relpath, file_external FROM nodes
-WHERE wc_id == ?1
+WHERE wc_id = ?1
+
+/* ------------------------------------------------------------------------- */
+
+/* Queries for cached inherited properties. */
+
+/* Select the inherited properties of a single base node. */
+-- STMT_SELECT_IPROPS
+SELECT inherited_props FROM nodes
+WHERE wc_id = ?1
+ AND local_relpath = ?2
+ AND op_depth = 0
+
+/* Update the inherited properties of a single base node. */
+-- STMT_UPDATE_IPROP
+UPDATE nodes
+SET inherited_props = ?3
+WHERE (wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0)
+
+/* Select a single path if its base node has cached inherited properties. */
+-- STMT_SELECT_IPROPS_NODE
+SELECT local_relpath, repos_path FROM nodes
+WHERE wc_id = ?1
+ AND local_relpath = ?2
+ AND op_depth = 0
+ AND (inherited_props not null)
+
+/* Select all paths whose base nodes are below a given path, which
+ have cached inherited properties. */
+-- STMT_SELECT_IPROPS_RECURSIVE
+SELECT local_relpath, repos_path FROM nodes
+WHERE wc_id = ?1
+ AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
+ AND op_depth = 0
+ AND (inherited_props not null)
+
+-- STMT_SELECT_IPROPS_CHILDREN
+SELECT local_relpath, repos_path FROM nodes
+WHERE wc_id = ?1
+ AND parent_relpath = ?2
+ AND op_depth = 0
+ AND (inherited_props not null)
+
+-- STMT_HAVE_STAT1_TABLE
+SELECT 1 FROM sqlite_master WHERE name='sqlite_stat1' AND type='table'
+LIMIT 1
/* ------------------------------------------------------------------------- */
diff --git a/subversion/libsvn_wc/wc.h b/subversion/libsvn_wc/wc.h
index 1b9ab7a..d7cf017 100644
--- a/subversion/libsvn_wc/wc.h
+++ b/subversion/libsvn_wc/wc.h
@@ -149,12 +149,20 @@ extern "C" {
* The bump to 29 renamed the pristine files from '<SHA1>' to '<SHA1>.svn-base'
* and introduced the EXTERNALS store. Bumped in r1129286.
*
- * == 1.7.x shipped with format ???
+ * == 1.7.x shipped with format 29
*
+ * The bump to 30 switched the conflict storage to a skel inside conflict_data.
+ * Also clears some known invalid state. Bumped in r1387742.
+ *
+ * The bump to 31 added the inherited_props column in the NODES table.
+ * Bumped in r1395109.
+ *
+ * == 1.8.x shipped with format 31
+ *
* Please document any further format changes here.
*/
-#define SVN_WC__VERSION 29
+#define SVN_WC__VERSION 31
/* Formats <= this have no concept of "revert text-base/props". */
@@ -182,6 +190,20 @@ extern "C" {
/* A version < this has no work queue (see workqueue.h). */
#define SVN_WC__HAS_WORK_QUEUE 13
+/* While we still have this DB version we should verify if there is
+ sqlite_stat1 table on opening */
+#define SVN_WC__ENSURE_STAT1_TABLE 31
+
+/* Return a string indicating the released version (or versions) of
+ * Subversion that used WC format number WC_FORMAT, or some other
+ * suitable string if no released version used WC_FORMAT.
+ *
+ * ### It's not ideal to encode this sort of knowledge in this low-level
+ * library. On the other hand, it doesn't need to be updated often and
+ * should be easily found when it does need to be updated. */
+const char *
+svn_wc__version_string_from_format(int wc_format);
+
/* Return true iff error E indicates an "is not a working copy" type
of error, either because something wasn't a working copy at all, or
because it's a working copy from a previous version (in need of
@@ -350,10 +372,8 @@ svn_wc__prop_array_to_hash(const apr_array_header_t *props,
*
* If EXACT_COMPARISON is FALSE, translate LOCAL_ABSPATH's EOL
* style and keywords to repository-normal form according to its properties,
- * and compare the result with the text base. If COMPARE_TEXTBASES is
- * TRUE, translate the text base's EOL style and keywords to working-copy
- * form according to LOCAL_ABSPATH's properties, and compare the
- * result with LOCAL_ABSPATH. Usually, EXACT_COMPARISON should be FALSE.
+ * and compare the result with the text base.
+ * Usually, EXACT_COMPARISON should be FALSE.
*
* If LOCAL_ABSPATH does not exist, consider it unmodified. If it exists
* but is not under revision control (not even scheduled for
@@ -374,17 +394,26 @@ svn_wc__internal_file_modified_p(svn_boolean_t *modified_p,
apr_pool_t *scratch_pool);
-/* Merge the difference between LEFT_ABSPATH and RIGHT_ABSPATH into
- TARGET_ABSPATH, return the appropriate work queue operations in
- *WORK_ITEMS.
+/* Prepare to merge a file content change into the working copy.
- Note that, in the case of updating, the update can have sent new
- properties, which could affect the way the wc target is
- detranslated and compared with LEFT and RIGHT for merging.
+ This does not merge properties; see svn_wc__merge_props() for that.
+ This does not necessarily change the file TARGET_ABSPATH on disk; it
+ may instead return work items that will replace the file on disk when
+ they are run. ### Can we be more consistent about this?
- The merge result is stored in *MERGE_OUTCOME and merge conflicts
- are marked in MERGE_RESULT using LEFT_LABEL, RIGHT_LABEL and
- TARGET_LABEL.
+ Merge the difference between LEFT_ABSPATH and RIGHT_ABSPATH into
+ TARGET_ABSPATH.
+
+ Set *WORK_ITEMS to the appropriate work queue operations.
+
+ If there are any conflicts, append a conflict description to
+ *CONFLICT_SKEL. (First allocate *CONFLICT_SKEL from RESULT_POOL if
+ it is initially NULL. CONFLICT_SKEL itself must not be NULL.)
+ Also, unless it is considered to be a 'binary' file, mark any
+ conflicts in the text of the file TARGET_ABSPATH using LEFT_LABEL,
+ RIGHT_LABEL and TARGET_LABEL.
+
+ Set *MERGE_OUTCOME to indicate the result.
When DRY_RUN is true, no actual changes are made to the working copy.
@@ -394,25 +423,21 @@ svn_wc__internal_file_modified_p(svn_boolean_t *modified_p,
When MERGE_OPTIONS are specified, they are used by the internal
diff3 routines, or passed to the external diff3 tool.
- If CONFLICT_FUNC is non-NULL, then call it with CONFLICT_BATON if a
- conflict is encountered, giving the callback a chance to resolve
- the conflict (before marking the file 'conflicted').
-
- When LEFT_VERSION and RIGHT_VERSION are non-NULL, pass them to the
- conflict resolver as older_version and their_version.
-
- ## TODO: We should store the information in LEFT_VERSION and RIGHT_VERSION
- in the workingcopy for future retrieval via svn info.
-
WRI_ABSPATH describes in which working copy information should be
retrieved. (Interesting for merging file externals).
- ACTUAL_PROPS is the set of actual properties before merging; used for
- detranslating the file before merging.
+ OLD_ACTUAL_PROPS is the set of actual properties before merging; used for
+ detranslating the file before merging. This is necessary because, in
+ the case of updating, the update can have sent new properties, so we
+ cannot simply fetch and use the current actual properties.
+
+ ### Is OLD_ACTUAL_PROPS still necessary, now that we first prepare the
+ content change and property change and then apply them both to
+ the WC together?
Property changes sent by the update are provided in PROP_DIFF.
- For a complete description, see svn_wc_merge3() for which this is
+ For a complete description, see svn_wc_merge5() for which this is
the (loggy) implementation.
*WORK_ITEMS will be allocated in RESULT_POOL. All temporary allocations
@@ -420,24 +445,21 @@ svn_wc__internal_file_modified_p(svn_boolean_t *modified_p,
*/
svn_error_t *
svn_wc__internal_merge(svn_skel_t **work_items,
+ svn_skel_t **conflict_skel,
enum svn_wc_merge_outcome_t *merge_outcome,
svn_wc__db_t *db,
const char *left_abspath,
- const svn_wc_conflict_version_t *left_version,
const char *right_abspath,
- const svn_wc_conflict_version_t *right_version,
const char *target_abspath,
const char *wri_abspath,
const char *left_label,
const char *right_label,
const char *target_label,
- apr_hash_t *actual_props,
+ apr_hash_t *old_actual_props,
svn_boolean_t dry_run,
const char *diff3_cmd,
const apr_array_header_t *merge_options,
const apr_array_header_t *prop_diff,
- svn_wc_conflict_resolver_func2_t conflict_func,
- void *conflict_baton,
svn_cancel_func_t cancel_func,
void *cancel_baton,
apr_pool_t *result_pool,
@@ -487,6 +509,19 @@ svn_wc__internal_conflicted_p(svn_boolean_t *text_conflicted_p,
const char *local_abspath,
apr_pool_t *scratch_pool);
+/* Similar to svn_wc__internal_conflicted_p(), but ignores
+ * moved-away-edit tree conflicts. If CONFLICT_IGNORED_P is not NULL
+ * then sets *CONFLICT_IGNORED_P TRUE if a tree-conflict is ignored
+ * and FALSE otherwise. Also ignores text and property conflicts if
+ * TREE_ONLY is TRUE */
+svn_error_t *
+svn_wc__conflicted_for_update_p(svn_boolean_t *conflicted_p,
+ svn_boolean_t *conflict_ignored_p,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_boolean_t tree_only,
+ apr_pool_t *scratch_pool);
+
/* Internal version of svn_wc_transmit_text_deltas3(). */
svn_error_t *
@@ -573,7 +608,6 @@ svn_error_t *
svn_wc__internal_remove_from_revision_control(svn_wc__db_t *db,
const char *local_abspath,
svn_boolean_t destroy_wf,
- svn_boolean_t instant_error,
svn_cancel_func_t cancel_func,
void *cancel_baton,
apr_pool_t *scratch_pool);
@@ -586,35 +620,6 @@ svn_wc__internal_node_get_schedule(svn_wc_schedule_t *schedule,
const char *local_abspath,
apr_pool_t *scratch_pool);
-/**
- * Set @a *copyfrom_url to the corresponding copy-from URL (allocated
- * from @a result_pool), and @a copyfrom_rev to the corresponding
- * copy-from revision, of @a local_abspath, using @a db. Set @a
- * is_copy_target to TRUE iff @a local_abspath was the target of a
- * copy information (versus being a member of the subtree beneath such
- * a copy target).
- *
- * @a copyfrom_root_url and @a copyfrom_repos_relpath return the exact same
- * information as @a copyfrom_url, just still separated as root and relpath.
- *
- * If @a local_abspath is not copied, set @a *copyfrom_root_url,
- * @a *copyfrom_repos_relpath and @a copyfrom_url to NULL and
- * @a *copyfrom_rev to @c SVN_INVALID_REVNUM.
- *
- * Any out parameters may be NULL if the caller doesn't care about those
- * values.
- */
-svn_error_t *
-svn_wc__internal_get_copyfrom_info(const char **copyfrom_root_url,
- const char **copyfrom_repos_relpath,
- const char **copyfrom_url,
- svn_revnum_t *copyfrom_rev,
- svn_boolean_t *is_copy_target,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
/* Internal version of svn_wc__node_get_origin() */
svn_error_t *
svn_wc__internal_get_origin(svn_boolean_t *is_copy,
@@ -629,17 +634,11 @@ svn_wc__internal_get_origin(svn_boolean_t *is_copy,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
-/* Internal version of svn_wc__node_get_commit_base_rev */
-svn_error_t *
-svn_wc__internal_get_commit_base_rev(svn_revnum_t *commit_base_revision,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *scratch_pool);
-
-
/* Internal version of svn_wc__node_get_repos_info() */
svn_error_t *
-svn_wc__internal_get_repos_info(const char **repos_root_url,
+svn_wc__internal_get_repos_info(svn_revnum_t *revision,
+ const char **repos_relpath,
+ const char **repos_root_url,
const char **repos_uuid,
svn_wc__db_t *db,
const char *local_abspath,
@@ -658,6 +657,20 @@ svn_wc__upgrade_sdb(int *result_format,
int start_format,
apr_pool_t *scratch_pool);
+/* Create a conflict skel from the old separated data */
+svn_error_t *
+svn_wc__upgrade_conflict_skel_from_raw(svn_skel_t **conflicts,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
+ const char *local_relpath,
+ const char *conflict_old,
+ const char *conflict_wrk,
+ const char *conflict_new,
+ const char *prej_file,
+ const char *tree_conflict_data,
+ apr_size_t tree_conflict_len,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
svn_error_t *
svn_wc__wipe_postupgrade(const char *dir_abspath,
@@ -666,27 +679,6 @@ svn_wc__wipe_postupgrade(const char *dir_abspath,
void *cancel_baton,
apr_pool_t *scratch_pool);
-/* Check whether a node is a working copy root or switched.
- *
- * If LOCAL_ABSPATH is the root of a working copy, set *WC_ROOT to TRUE,
- * otherwise to FALSE.
- *
- * If KIND is not null, set *KIND to the node type of LOCAL_ABSPATH.
- *
- * If LOCAL_ABSPATH is switched against its parent in the same working copy
- * set *SWITCHED to TRUE, otherwise to FALSE. SWITCHED can be NULL
- * if the result is not important.
- *
- * Use SCRATCH_POOL for temporary allocations.
- */
-svn_error_t *
-svn_wc__check_wc_root(svn_boolean_t *wc_root,
- svn_wc__db_kind_t *kind,
- svn_boolean_t *switched,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *scratch_pool);
-
/* Ensure LOCAL_ABSPATH is still locked in DB. Returns the error
* SVN_ERR_WC_NOT_LOCKED if this is not the case.
*/
@@ -695,6 +687,25 @@ svn_wc__write_check(svn_wc__db_t *db,
const char *local_abspath,
apr_pool_t *scratch_pool);
+/* Read into CONFLICTS svn_wc_conflict_description2_t* structs
+ * for all conflicts that have LOCAL_ABSPATH as victim.
+ *
+ * Victim must be versioned or be part of a tree conflict.
+ *
+ * If CREATE_TEMPFILES is TRUE, create temporary files for property conflicts.
+ *
+ * Allocate *CONFLICTS in RESULT_POOL and do temporary allocations in
+ * SCRATCH_POOL
+ */
+svn_error_t *
+svn_wc__read_conflicts(const apr_array_header_t **conflicts,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_boolean_t create_tempfiles,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
/* Perform the actual merge of file changes between an original file,
identified by ORIGINAL_CHECKSUM (an empty file if NULL) to a new file
identified by NEW_CHECKSUM in the working copy identified by WRI_ABSPATH.
@@ -703,30 +714,99 @@ svn_wc__write_check(svn_wc__db_t *db,
identified by WRI_ABSPATH. Use OLD_REVISION and TARGET_REVISION for naming
the intermediate files.
+ Set *FOUND_TEXT_CONFLICT to TRUE when the merge encountered a conflict,
+ otherwise to FALSE.
+
The rest of the arguments are passed to svn_wc__internal_merge.
*/
svn_error_t *
svn_wc__perform_file_merge(svn_skel_t **work_items,
- enum svn_wc_merge_outcome_t *merge_outcome,
+ svn_skel_t **conflict_skel,
+ svn_boolean_t *found_conflict,
svn_wc__db_t *db,
const char *local_abspath,
const char *wri_abspath,
const svn_checksum_t *new_checksum,
const svn_checksum_t *original_checksum,
- apr_hash_t *actual_props,
+ apr_hash_t *old_actual_props,
const apr_array_header_t *ext_patterns,
svn_revnum_t old_revision,
svn_revnum_t target_revision,
const apr_array_header_t *propchanges,
const char *diff3_cmd,
- svn_wc_conflict_resolver_func2_t conflict_func,
- void *conflict_baton,
svn_cancel_func_t cancel_func,
void *cancel_baton,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
+/* Couple of random helpers for the Ev2 shims.
+ ### These will eventually be obsoleted and removed. */
+struct svn_wc__shim_fetch_baton_t
+{
+ svn_wc__db_t *db;
+ const char *base_abspath;
+ svn_boolean_t fetch_base;
+};
+
+/* Using a BATON of struct shim_fetch_baton, return KIND for PATH. */
+svn_error_t *
+svn_wc__fetch_kind_func(svn_node_kind_t *kind,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *scratch_pool);
+
+/* Using a BATON of struct shim_fetch_baton, return PROPS for PATH. */
+svn_error_t *
+svn_wc__fetch_props_func(apr_hash_t **props,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Using a BATON of struct shim_fetch_baton, return a delta base for PATH. */
+svn_error_t *
+svn_wc__fetch_base_func(const char **filename,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Find duplicate targets in *EXTERNALS, a list of svn_wc_external_item2_t*
+ * elements, and store each target string in *DUPLICATE_TARGETS as const
+ * char * elements. *DUPLICATE_TARGETS will be NULL if no duplicates were
+ * found. */
+svn_error_t *
+svn_wc__externals_find_target_dups(apr_array_header_t **duplicate_targets,
+ apr_array_header_t *externals,
+ apr_pool_t *pool,
+ apr_pool_t *scratch_pool);
+
+/* Revert tree LOCAL_ABSPATH to depth DEPTH and notify for all
+ reverts. */
+svn_error_t *
+svn_wc__revert_internal(svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_depth_t depth,
+ svn_boolean_t use_commit_times,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool);
+
+svn_error_t *
+svn_wc__node_has_local_mods(svn_boolean_t *modified,
+ svn_boolean_t *all_edits_are_deletes,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/libsvn_wc/wc_db.c b/subversion/libsvn_wc/wc_db.c
index 5368437..6c0dd61 100644
--- a/subversion/libsvn_wc/wc_db.c
+++ b/subversion/libsvn_wc/wc_db.c
@@ -32,6 +32,7 @@
#include "svn_dirent_uri.h"
#include "svn_path.h"
#include "svn_hash.h"
+#include "svn_sorts.h"
#include "svn_wc.h"
#include "svn_checksum.h"
#include "svn_pools.h"
@@ -42,9 +43,10 @@
#include "wc-queries.h"
#include "entries.h"
#include "lock.h"
-#include "tree_conflicts.h"
+#include "conflicts.h"
#include "wc_db_private.h"
#include "workqueue.h"
+#include "token-map.h"
#include "svn_private_config.h"
#include "private/svn_sqlite.h"
@@ -103,46 +105,24 @@
#define UNKNOWN_WC_ID ((apr_int64_t) -1)
#define FORMAT_FROM_SDB (-1)
-/* Check if the column contains actual properties. The empty set of properties
- is stored as "()", so we have properties if the size of the column is
- larger then 2. */
+/* Check if column number I, a property-skel column, contains a non-empty
+ set of properties. The empty set of properties is stored as "()", so we
+ have properties if the size of the column is larger than 2. */
#define SQLITE_PROPERTIES_AVAILABLE(stmt, i) \
(svn_sqlite__column_bytes(stmt, i) > 2)
-/* This is a character used to escape itself and the globbing character in
- globbing sql expressions below. See escape_sqlite_like().
-
- NOTE: this should match the character used within wc-metadata.sql */
-#define LIKE_ESCAPE_CHAR "#"
-
-/* Calculates the depth of the relpath below "" */
-APR_INLINE static apr_int64_t relpath_depth(const char *relpath)
-{
- int n = 1;
- if (*relpath == '\0')
- return 0;
-
- do
- {
- if (*relpath == '/')
- n++;
- }
- while (*(++relpath));
-
- return n;
-}
-
-
-apr_int64_t svn_wc__db_op_depth_for_upgrade(const char *local_relpath)
+int
+svn_wc__db_op_depth_for_upgrade(const char *local_relpath)
{
return relpath_depth(local_relpath);
}
+/* Representation of a new base row for the NODES table */
typedef struct insert_base_baton_t {
/* common to all insertions into BASE */
svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
apr_int64_t repos_id;
const char *repos_relpath;
svn_revnum_t revision;
@@ -177,23 +157,32 @@ typedef struct insert_base_baton_t {
svn_boolean_t update_actual_props;
const apr_hash_t *new_actual_props;
+ /* A depth-first ordered array of svn_prop_inherited_item_t *
+ structures representing the properties inherited by the base
+ node. */
+ apr_array_header_t *iprops;
+
/* maybe we should copy information from a previous record? */
svn_boolean_t keep_recorded_info;
/* insert a base-deleted working node as well as a base node */
svn_boolean_t insert_base_deleted;
+ /* delete the current working nodes above BASE */
+ svn_boolean_t delete_working;
+
/* may have work items to queue in this transaction */
const svn_skel_t *work_items;
} insert_base_baton_t;
+/* Representation of a new working row for the NODES table */
typedef struct insert_working_baton_t {
/* common to all insertions into WORKING (including NODE_DATA) */
svn_wc__db_status_t presence;
- svn_wc__db_kind_t kind;
- apr_int64_t op_depth;
+ svn_node_kind_t kind;
+ int op_depth;
/* common to all "normal" presence insertions */
const apr_hash_t *props;
@@ -215,18 +204,25 @@ typedef struct insert_working_baton_t {
/* for inserting symlinks */
const char *target;
+ svn_boolean_t update_actual_props;
+ const apr_hash_t *new_actual_props;
+
/* may have work items to queue in this transaction */
const svn_skel_t *work_items;
+ /* may have conflict to install in this transaction */
+ const svn_skel_t *conflict;
+
/* If the value is > 0 and < op_depth, also insert a not-present
at op-depth NOT_PRESENT_OP_DEPTH, based on this same information */
- apr_int64_t not_present_op_depth;
+ int not_present_op_depth;
} insert_working_baton_t;
+/* Representation of a new row for the EXTERNALS table */
typedef struct insert_external_baton_t {
/* common to all insertions into EXTERNALS */
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
svn_wc__db_status_t presence;
/* The repository of the external */
@@ -241,6 +237,7 @@ typedef struct insert_external_baton_t {
/* for file and symlink externals */
const apr_hash_t *props;
+ apr_array_header_t *iprops;
svn_revnum_t changed_rev;
apr_time_t changed_date;
const char *changed_author;
@@ -273,29 +270,6 @@ typedef struct insert_external_baton_t {
} insert_external_baton_t;
-static const svn_token_map_t kind_map[] = {
- { "file", svn_wc__db_kind_file },
- { "dir", svn_wc__db_kind_dir },
- { "symlink", svn_wc__db_kind_symlink },
- { "unknown", svn_wc__db_kind_unknown },
- { NULL }
-};
-
-/* Note: we only decode presence values from the database. These are a subset
- of all the status values. */
-static const svn_token_map_t presence_map[] = {
- { "normal", svn_wc__db_status_normal },
- /* ### "absent" is the former name of the "server-excluded" presence.
- * ### We should change it to "server-excluded" with a format bump. */
- { "absent", svn_wc__db_status_server_excluded },
- { "excluded", svn_wc__db_status_excluded },
- { "not-present", svn_wc__db_status_not_present },
- { "incomplete", svn_wc__db_status_incomplete },
- { "base-deleted", svn_wc__db_status_base_deleted },
- { NULL }
-};
-
-
/* Forward declarations */
static svn_error_t *
add_work_items(svn_sqlite__db_t *sdb,
@@ -317,19 +291,20 @@ insert_incomplete_children(svn_sqlite__db_t *sdb,
const char *repos_relpath,
svn_revnum_t revision,
const apr_array_header_t *children,
- apr_int64_t op_depth,
+ int op_depth,
apr_pool_t *scratch_pool);
static svn_error_t *
db_read_pristine_props(apr_hash_t **props,
svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
+ svn_boolean_t deleted_ok,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
static svn_error_t *
read_info(svn_wc__db_status_t *status,
- svn_wc__db_kind_t *kind,
+ svn_node_kind_t *kind,
svn_revnum_t *revision,
const char **repos_relpath,
apr_int64_t *repos_id,
@@ -344,7 +319,7 @@ read_info(svn_wc__db_status_t *status,
svn_revnum_t *original_revision,
svn_wc__db_lock_t **lock,
svn_filesize_t *recorded_size,
- apr_time_t *recorded_mod_time,
+ apr_time_t *recorded_time,
const char **changelist,
svn_boolean_t *conflicted,
svn_boolean_t *op_root,
@@ -366,15 +341,9 @@ scan_addition(svn_wc__db_status_t *status,
const char **original_repos_relpath,
apr_int64_t *original_repos_id,
svn_revnum_t *original_revision,
- svn_wc__db_wcroot_t *wcroot,
- const char *local_relpath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-static svn_error_t *
-scan_deletion(const char **base_del_relpath,
- const char **moved_to_relpath,
- const char **work_del_relpath,
+ const char **moved_from_relpath,
+ const char **moved_from_op_root_relpath,
+ int *moved_from_op_depth,
svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
apr_pool_t *result_pool,
@@ -391,8 +360,14 @@ wclock_owns_lock(svn_boolean_t *own_lock,
svn_boolean_t exact,
apr_pool_t *scratch_pool);
+static svn_error_t *
+db_is_switched(svn_boolean_t *is_switched,
+ svn_node_kind_t *kind,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *scratch_pool);
+
-
/* Return the absolute path, in local path style, of LOCAL_RELPATH
in WCROOT. */
static const char *
@@ -446,74 +421,12 @@ lock_from_columns(svn_sqlite__stmt_t *stmt,
}
-/* */
-static const char *
-escape_sqlite_like(const char * const str, apr_pool_t *result_pool)
-{
- char *result;
- const char *old_ptr;
- char *new_ptr;
- int len = 0;
-
- /* Count the number of extra characters we'll need in the escaped string.
- We could just use the worst case (double) value, but we'd still need to
- iterate over the string to get it's length. So why not do something
- useful why iterating over it, and save some memory at the same time? */
- for (old_ptr = str; *old_ptr; ++old_ptr)
- {
- len++;
- if (*old_ptr == '%'
- || *old_ptr == '_'
- || *old_ptr == LIKE_ESCAPE_CHAR[0])
- len++;
- }
-
- result = apr_palloc(result_pool, len + 1);
-
- /* Now do the escaping. */
- for (old_ptr = str, new_ptr = result; *old_ptr; ++old_ptr, ++new_ptr)
- {
- if (*old_ptr == '%'
- || *old_ptr == '_'
- || *old_ptr == LIKE_ESCAPE_CHAR[0])
- *(new_ptr++) = LIKE_ESCAPE_CHAR[0];
- *new_ptr = *old_ptr;
- }
- *new_ptr = '\0';
-
- return result;
-}
-
-
-/* Return a string that can be used as the argument to a SQLite 'LIKE'
- operator, in order to match any path that is a child of LOCAL_RELPATH
- (at any depth below LOCAL_RELPATH), *excluding* LOCAL_RELPATH itself.
- LOCAL_RELPATH may be the empty string, in which case the result will
- match any path except the empty path.
-
- Allocate the result either statically or in RESULT_POOL. */
-static const char *construct_like_arg(const char *local_relpath,
- apr_pool_t *result_pool)
-{
- if (local_relpath[0] == '\0')
- return "_%";
-
- return apr_pstrcat(result_pool,
- escape_sqlite_like(local_relpath, result_pool),
- "/%", (char *)NULL);
-}
-
-
-/* Look up REPOS_ID in SDB and set *REPOS_ROOT_URL and/or *REPOS_UUID to
- its root URL and UUID respectively. If REPOS_ID is INVALID_REPOS_ID,
- use NULL for both URL and UUID. Either or both output parameters may be
- NULL if not wanted. */
-static svn_error_t *
-fetch_repos_info(const char **repos_root_url,
- const char **repos_uuid,
- svn_sqlite__db_t *sdb,
- apr_int64_t repos_id,
- apr_pool_t *result_pool)
+svn_error_t *
+svn_wc__db_fetch_repos_info(const char **repos_root_url,
+ const char **repos_uuid,
+ svn_sqlite__db_t *sdb,
+ apr_int64_t repos_id,
+ apr_pool_t *result_pool)
{
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
@@ -547,12 +460,11 @@ fetch_repos_info(const char **repos_root_url,
return svn_error_trace(svn_sqlite__reset(stmt));
}
-
-/* Set *REPOS_ID, *REVISION and *REPOS_RELPATH from the
- given columns of the SQLITE statement STMT, or to NULL if the respective
+/* Set *REPOS_ID, *REVISION and *REPOS_RELPATH from the given columns of the
+ SQLITE statement STMT, or to NULL/SVN_INVALID_REVNUM if the respective
column value is null. Any of the output parameters may be NULL if not
required. */
-static svn_error_t *
+static void
repos_location_from_columns(apr_int64_t *repos_id,
svn_revnum_t *revision,
const char **repos_relpath,
@@ -562,8 +474,6 @@ repos_location_from_columns(apr_int64_t *repos_id,
int col_repos_relpath,
apr_pool_t *result_pool)
{
- svn_error_t *err = SVN_NO_ERROR;
-
if (repos_id)
{
/* Fetch repository information via REPOS_ID. */
@@ -581,8 +491,6 @@ repos_location_from_columns(apr_int64_t *repos_id,
*repos_relpath = svn_sqlite__column_text(stmt, col_repos_relpath,
result_pool);
}
-
- return err;
}
@@ -667,74 +575,45 @@ blank_ibb(insert_base_baton_t *pibb)
}
-/* Extend any delete of the parent of LOCAL_RELPATH to LOCAL_RELPATH.
-
- Given a wc:
-
- 0 1 2 3 4
- normal
- A normal
- A/B normal normal
- A/B/C not-pres normal
- A/B/C/D normal
-
- That is checkout, delete A/B, copy a replacement A/B, delete copied
- child A/B/C, add replacement A/B/C, add A/B/C/D.
-
- Now an update that adds base nodes for A/B/C, A/B/C/D and A/B/C/D/E
- must extend the A/B deletion:
-
- 0 1 2 3 4
- normal
- A normal
- A/B normal normal
- A/B/C normal not-pres normal
- A/B/C/D normal base-del normal
- A/B/C/D/E normal base-del
-
- When adding a base node if the parent has a working node then the
- parent base is deleted and this must be extended to cover new base
- node.
-
- In the example above A/B/C/D and A/B/C/D/E are the nodes that get
- the extended delete, A/B/C is already deleted.
- */
-static svn_error_t *
-extend_parent_delete(svn_wc__db_wcroot_t *wcroot,
- const char *local_relpath,
- apr_pool_t *scratch_pool)
+svn_error_t *
+svn_wc__db_extend_parent_delete(svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ svn_node_kind_t kind,
+ int op_depth,
+ apr_pool_t *scratch_pool)
{
svn_boolean_t have_row;
svn_sqlite__stmt_t *stmt;
- apr_int64_t parent_op_depth;
+ int parent_op_depth;
const char *parent_relpath = svn_relpath_dirname(local_relpath, scratch_pool);
SVN_ERR_ASSERT(local_relpath[0]);
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_SELECT_LOWEST_WORKING_NODE));
- SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, parent_relpath));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id, parent_relpath,
+ op_depth));
SVN_ERR(svn_sqlite__step(&have_row, stmt));
if (have_row)
- parent_op_depth = svn_sqlite__column_int64(stmt, 0);
+ parent_op_depth = svn_sqlite__column_int(stmt, 0);
SVN_ERR(svn_sqlite__reset(stmt));
if (have_row)
{
- apr_int64_t op_depth;
+ int existing_op_depth;
- SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id, local_relpath,
+ op_depth));
SVN_ERR(svn_sqlite__step(&have_row, stmt));
if (have_row)
- op_depth = svn_sqlite__column_int64(stmt, 0);
+ existing_op_depth = svn_sqlite__column_int(stmt, 0);
SVN_ERR(svn_sqlite__reset(stmt));
- if (!have_row || parent_op_depth < op_depth)
+ if (!have_row || parent_op_depth < existing_op_depth)
{
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_INSTALL_WORKING_NODE_FOR_DELETE));
- SVN_ERR(svn_sqlite__bindf(stmt, "isit", wcroot->wc_id,
+ STMT_INSTALL_WORKING_NODE_FOR_DELETE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isdst", wcroot->wc_id,
local_relpath, parent_op_depth,
- presence_map,
- svn_wc__db_status_base_deleted));
+ parent_relpath, kind_map, kind));
SVN_ERR(svn_sqlite__update(NULL, stmt));
}
}
@@ -743,41 +622,93 @@ extend_parent_delete(svn_wc__db_wcroot_t *wcroot,
}
-/* This is the reverse of extend_parent_delete.
+/* This is the reverse of svn_wc__db_extend_parent_delete.
- When removing a base node if the parent has a working node then the
- parent base and this node are both deleted and so the delete of
- this node must be removed.
+ When removing a node if the parent has a higher working node then
+ the parent node and this node are both deleted or replaced and any
+ delete over this node must be removed.
+
+ This function (like most wcroot functions) assumes that its caller
+ only uses this function within an sqlite transaction if atomic
+ behavior is needed.
*/
-static svn_error_t *
-retract_parent_delete(svn_wc__db_wcroot_t *wcroot,
- const char *local_relpath,
- apr_pool_t *scratch_pool)
+svn_error_t *
+svn_wc__db_retract_parent_delete(svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ int op_depth,
+ apr_pool_t *scratch_pool)
{
svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+ int working_depth;
+ svn_wc__db_status_t presence;
+ const char *moved_to;
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_DELETE_LOWEST_WORKING_NODE));
- SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
- SVN_ERR(svn_sqlite__step_done(stmt));
+ STMT_SELECT_LOWEST_WORKING_NODE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id, local_relpath,
+ op_depth));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
- return SVN_NO_ERROR;
+ if (!have_row)
+ return svn_error_trace(svn_sqlite__reset(stmt));
+
+ working_depth = svn_sqlite__column_int(stmt, 0);
+ presence = svn_sqlite__column_token(stmt, 1, presence_map);
+ moved_to = svn_sqlite__column_text(stmt, 3, scratch_pool);
+
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ if (moved_to)
+ {
+ /* Turn the move into a copy to keep the NODES table valid */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_CLEAR_MOVED_HERE_RECURSIVE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id,
+ moved_to, relpath_depth(moved_to)));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+
+ /* This leaves just the moved_to information on the origin,
+ which we will remove in the next step */
+ }
+
+ if (presence == svn_wc__db_status_base_deleted)
+ {
+ /* Nothing left to shadow; remove the base-deleted node */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb, STMT_DELETE_NODE));
+ }
+ else if (moved_to)
+ {
+ /* Clear moved to information, as this node is no longer base-deleted */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_CLEAR_MOVED_TO_RELPATH));
+ }
+ else
+ {
+ /* Nothing to update */
+ return SVN_NO_ERROR;
+ }
+
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id, local_relpath,
+ working_depth));
+
+ return svn_error_trace(svn_sqlite__update(NULL, stmt));
}
-/* */
+/* Insert the base row represented by (insert_base_baton_t *) BATON. */
static svn_error_t *
-insert_base_node(void *baton,
+insert_base_node(const insert_base_baton_t *pibb,
svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
apr_pool_t *scratch_pool)
{
- const insert_base_baton_t *pibb = baton;
apr_int64_t repos_id = pibb->repos_id;
svn_sqlite__stmt_t *stmt;
svn_filesize_t recorded_size = SVN_INVALID_FILESIZE;
- apr_int64_t recorded_mod_time;
+ apr_int64_t recorded_time;
+ svn_boolean_t present;
/* The directory at the WCROOT has a NULL parent_relpath. Otherwise,
bind the appropriate parent_relpath. */
@@ -792,45 +723,47 @@ insert_base_node(void *baton,
SVN_ERR_ASSERT(repos_id != INVALID_REPOS_ID);
SVN_ERR_ASSERT(pibb->repos_relpath != NULL);
- /* ### we can't handle this right now */
- SVN_ERR_ASSERT(pibb->conflict == NULL);
-
if (pibb->keep_recorded_info)
{
+ svn_boolean_t have_row;
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_SELECT_BASE_NODE));
-
SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
- SVN_ERR(svn_sqlite__step_row(stmt));
-
- recorded_size = get_recorded_size(stmt, 6);
- recorded_mod_time = svn_sqlite__column_int64(stmt, 12);
-
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ if (have_row)
+ {
+ /* Preserve size and modification time if caller asked us to. */
+ recorded_size = get_recorded_size(stmt, 6);
+ recorded_time = svn_sqlite__column_int64(stmt, 12);
+ }
SVN_ERR(svn_sqlite__reset(stmt));
}
+ present = (pibb->status == svn_wc__db_status_normal
+ || pibb->status == svn_wc__db_status_incomplete);
+
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb, STMT_INSERT_NODE));
- SVN_ERR(svn_sqlite__bindf(stmt, "isisisr"
+ SVN_ERR(svn_sqlite__bindf(stmt, "isdsisr"
"tstr" /* 8 - 11 */
"isnnnnns", /* 12 - 19 */
wcroot->wc_id, /* 1 */
local_relpath, /* 2 */
- (apr_int64_t)0, /* op_depth is 0 for base */
+ 0, /* op_depth is 0 for base */
parent_relpath, /* 4 */
repos_id,
pibb->repos_relpath,
pibb->revision,
presence_map, pibb->status, /* 8 */
- (pibb->kind == svn_wc__db_kind_dir) ? /* 9 */
- svn_depth_to_word(pibb->depth) : NULL,
+ (pibb->kind == svn_node_dir && present) /* 9 */
+ ? svn_token__to_word(depth_map, pibb->depth)
+ : NULL,
kind_map, pibb->kind, /* 10 */
pibb->changed_rev, /* 11 */
pibb->changed_date, /* 12 */
pibb->changed_author, /* 13 */
- (pibb->kind == svn_wc__db_kind_symlink) ?
+ (pibb->kind == svn_node_symlink && present) ?
pibb->target : NULL)); /* 19 */
-
- if (pibb->kind == svn_wc__db_kind_file)
+ if (pibb->kind == svn_node_file && present)
{
if (!pibb->checksum
&& pibb->status != svn_wc__db_status_not_present
@@ -847,12 +780,23 @@ insert_base_node(void *baton,
if (recorded_size != SVN_INVALID_FILESIZE)
{
SVN_ERR(svn_sqlite__bind_int64(stmt, 16, recorded_size));
- SVN_ERR(svn_sqlite__bind_int64(stmt, 17, recorded_mod_time));
+ SVN_ERR(svn_sqlite__bind_int64(stmt, 17, recorded_time));
}
}
- SVN_ERR(svn_sqlite__bind_properties(stmt, 15, pibb->props,
+ /* Set properties. Must be null if presence not normal or incomplete. */
+ assert(pibb->status == svn_wc__db_status_normal
+ || pibb->status == svn_wc__db_status_incomplete
+ || pibb->props == NULL);
+ if (present)
+ {
+ SVN_ERR(svn_sqlite__bind_properties(stmt, 15, pibb->props,
+ scratch_pool));
+
+ SVN_ERR(svn_sqlite__bind_iprops(stmt, 23, pibb->iprops,
scratch_pool));
+ }
+
if (pibb->dav_cache)
SVN_ERR(svn_sqlite__bind_properties(stmt, 18, pibb->dav_cache,
scratch_pool));
@@ -885,7 +829,7 @@ insert_base_node(void *baton,
wcroot->sdb, scratch_pool));
}
- if (pibb->kind == svn_wc__db_kind_dir && pibb->children)
+ if (pibb->kind == svn_node_dir && pibb->children)
SVN_ERR(insert_incomplete_children(wcroot->sdb, wcroot->wc_id,
local_relpath,
repos_id,
@@ -903,32 +847,47 @@ insert_base_node(void *baton,
|| (pibb->status == svn_wc__db_status_incomplete))
&& ! pibb->file_external)
{
- SVN_ERR(extend_parent_delete(wcroot, local_relpath, scratch_pool));
+ SVN_ERR(svn_wc__db_extend_parent_delete(wcroot, local_relpath,
+ pibb->kind, 0,
+ scratch_pool));
}
else if (pibb->status == svn_wc__db_status_not_present
|| pibb->status == svn_wc__db_status_server_excluded
|| pibb->status == svn_wc__db_status_excluded)
{
- SVN_ERR(retract_parent_delete(wcroot, local_relpath, scratch_pool));
+ SVN_ERR(svn_wc__db_retract_parent_delete(wcroot, local_relpath, 0,
+ scratch_pool));
}
}
+ if (pibb->delete_working)
+ {
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_DELETE_WORKING_NODE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+ }
if (pibb->insert_base_deleted)
{
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_INSERT_DELETE_FROM_BASE));
- SVN_ERR(svn_sqlite__bindf(stmt, "isi",
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd",
wcroot->wc_id, local_relpath,
relpath_depth(local_relpath)));
SVN_ERR(svn_sqlite__step_done(stmt));
}
SVN_ERR(add_work_items(wcroot->sdb, pibb->work_items, scratch_pool));
+ if (pibb->conflict)
+ SVN_ERR(svn_wc__db_mark_conflict_internal(wcroot, local_relpath,
+ pibb->conflict, scratch_pool));
return SVN_NO_ERROR;
}
+/* Initialize the baton with appropriate "blank" values. This allows the
+ insertion function to leave certain columns null. */
static void
blank_iwb(insert_working_baton_t *piwb)
{
@@ -956,57 +915,92 @@ insert_incomplete_children(svn_sqlite__db_t *sdb,
const char *repos_path,
svn_revnum_t revision,
const apr_array_header_t *children,
- apr_int64_t op_depth,
+ int op_depth,
apr_pool_t *scratch_pool)
{
svn_sqlite__stmt_t *stmt;
int i;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ apr_hash_t *moved_to_relpaths = apr_hash_make(scratch_pool);
SVN_ERR_ASSERT(repos_path != NULL || op_depth > 0);
SVN_ERR_ASSERT((repos_id != INVALID_REPOS_ID)
== (repos_path != NULL));
+ /* If we're inserting WORKING nodes, we might be replacing existing
+ * nodes which were moved-away. We need to retain the moved-to relpath of
+ * such nodes in order not to lose move information during replace. */
+ if (op_depth > 0)
+ {
+ for (i = children->nelts; i--; )
+ {
+ const char *name = APR_ARRAY_IDX(children, i, const char *);
+ svn_boolean_t have_row;
+
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, sdb,
+ STMT_SELECT_WORKING_NODE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wc_id,
+ svn_relpath_join(local_relpath, name,
+ iterpool)));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ if (have_row && !svn_sqlite__column_is_null(stmt, 14))
+ svn_hash_sets(moved_to_relpaths, name,
+ svn_sqlite__column_text(stmt, 14, scratch_pool));
+
+ SVN_ERR(svn_sqlite__reset(stmt));
+ }
+ }
+
SVN_ERR(svn_sqlite__get_statement(&stmt, sdb, STMT_INSERT_NODE));
for (i = children->nelts; i--; )
{
const char *name = APR_ARRAY_IDX(children, i, const char *);
- SVN_ERR(svn_sqlite__bindf(stmt, "isisnnrsns",
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(svn_sqlite__bindf(stmt, "isdsnnrsnsnnnnnnnnnnsn",
wc_id,
svn_relpath_join(local_relpath, name,
- scratch_pool),
+ iterpool),
op_depth,
local_relpath,
revision,
"incomplete", /* 8, presence */
- "unknown")); /* 10, kind */
-
+ "unknown", /* 10, kind */
+ /* 21, moved_to */
+ svn_hash_gets(moved_to_relpaths, name)));
if (repos_id != INVALID_REPOS_ID)
{
SVN_ERR(svn_sqlite__bind_int64(stmt, 5, repos_id));
SVN_ERR(svn_sqlite__bind_text(stmt, 6,
svn_relpath_join(repos_path, name,
- scratch_pool)));
+ iterpool)));
}
SVN_ERR(svn_sqlite__insert(NULL, stmt));
}
+ svn_pool_destroy(iterpool);
+
return SVN_NO_ERROR;
}
-/* */
+/* Insert the working row represented by (insert_working_baton_t *) BATON. */
static svn_error_t *
-insert_working_node(void *baton,
+insert_working_node(const insert_working_baton_t *piwb,
svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
apr_pool_t *scratch_pool)
{
- const insert_working_baton_t *piwb = baton;
const char *parent_relpath;
+ const char *moved_to_relpath = NULL;
svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+ svn_boolean_t present;
SVN_ERR_ASSERT(piwb->op_depth > 0);
@@ -1014,25 +1008,45 @@ insert_working_node(void *baton,
SVN_ERR_ASSERT(*local_relpath != '\0');
parent_relpath = svn_relpath_dirname(local_relpath, scratch_pool);
+ /* Preserve existing moved-to information for this relpath,
+ * which might exist in case we're replacing an existing base-deleted
+ * node. */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb, STMT_SELECT_MOVED_TO));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id, local_relpath,
+ piwb->op_depth));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ if (have_row)
+ moved_to_relpath = svn_sqlite__column_text(stmt, 0, scratch_pool);
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ present = (piwb->presence == svn_wc__db_status_normal
+ || piwb->presence == svn_wc__db_status_incomplete);
+
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb, STMT_INSERT_NODE));
- SVN_ERR(svn_sqlite__bindf(stmt, "isisnnntstrisn"
+ SVN_ERR(svn_sqlite__bindf(stmt, "isdsnnntstrisn"
"nnnn" /* properties translated_size last_mod_time dav_cache */
- "s",
+ "sns", /* symlink_target, file_external, moved_to */
wcroot->wc_id, local_relpath,
piwb->op_depth,
parent_relpath,
presence_map, piwb->presence,
- (piwb->kind == svn_wc__db_kind_dir)
- ? svn_depth_to_word(piwb->depth) : NULL,
+ (piwb->kind == svn_node_dir && present)
+ ? svn_token__to_word(depth_map, piwb->depth) : NULL,
kind_map, piwb->kind,
piwb->changed_rev,
piwb->changed_date,
piwb->changed_author,
/* Note: incomplete nodes may have a NULL target. */
- (piwb->kind == svn_wc__db_kind_symlink)
- ? piwb->target : NULL));
+ (piwb->kind == svn_node_symlink && present)
+ ? piwb->target : NULL,
+ moved_to_relpath));
+
+ if (piwb->moved_here)
+ {
+ SVN_ERR(svn_sqlite__bind_int(stmt, 8, TRUE));
+ }
- if (piwb->kind == svn_wc__db_kind_file)
+ if (piwb->kind == svn_node_file && present)
{
SVN_ERR(svn_sqlite__bind_checksum(stmt, 14, piwb->checksum,
scratch_pool));
@@ -1042,10 +1056,15 @@ insert_working_node(void *baton,
{
SVN_ERR(svn_sqlite__bind_int64(stmt, 5, piwb->original_repos_id));
SVN_ERR(svn_sqlite__bind_text(stmt, 6, piwb->original_repos_relpath));
- SVN_ERR(svn_sqlite__bind_int64(stmt, 7, piwb->original_revnum));
+ SVN_ERR(svn_sqlite__bind_revnum(stmt, 7, piwb->original_revnum));
}
- SVN_ERR(svn_sqlite__bind_properties(stmt, 15, piwb->props, scratch_pool));
+ /* Set properties. Must be null if presence not normal or incomplete. */
+ assert(piwb->presence == svn_wc__db_status_normal
+ || piwb->presence == svn_wc__db_status_incomplete
+ || piwb->props == NULL);
+ if (present && piwb->original_repos_relpath)
+ SVN_ERR(svn_sqlite__bind_properties(stmt, 15, piwb->props, scratch_pool));
SVN_ERR(svn_sqlite__insert(NULL, stmt));
@@ -1053,7 +1072,7 @@ insert_working_node(void *baton,
The children are part of the same op and so have the same op_depth.
(The only time we'd want a different depth is during a recursive
simple add, but we never insert children here during a simple add.) */
- if (piwb->kind == svn_wc__db_kind_dir && piwb->children)
+ if (piwb->kind == svn_node_dir && piwb->children)
SVN_ERR(insert_incomplete_children(wcroot->sdb, wcroot->wc_id,
local_relpath,
INVALID_REPOS_ID /* inherit repos_id */,
@@ -1063,7 +1082,30 @@ insert_working_node(void *baton,
piwb->op_depth,
scratch_pool));
- if (piwb->kind == svn_wc__db_kind_dir)
+ if (piwb->update_actual_props)
+ {
+ /* Cast away const, to allow calling property helpers */
+ apr_hash_t *base_props = (apr_hash_t *)piwb->props;
+ apr_hash_t *new_actual_props = (apr_hash_t *)piwb->new_actual_props;
+
+ if (base_props != NULL
+ && new_actual_props != NULL
+ && (apr_hash_count(base_props) == apr_hash_count(new_actual_props)))
+ {
+ apr_array_header_t *diffs;
+
+ SVN_ERR(svn_prop_diffs(&diffs, new_actual_props, base_props,
+ scratch_pool));
+
+ if (diffs->nelts == 0)
+ new_actual_props = NULL;
+ }
+
+ SVN_ERR(set_actual_props(wcroot->wc_id, local_relpath, new_actual_props,
+ wcroot->sdb, scratch_pool));
+ }
+
+ if (piwb->kind == svn_node_dir)
{
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_UPDATE_ACTUAL_CLEAR_CHANGELIST));
@@ -1076,8 +1118,6 @@ insert_working_node(void *baton,
SVN_ERR(svn_sqlite__step_done(stmt));
}
- SVN_ERR(add_work_items(wcroot->sdb, piwb->work_items, scratch_pool));
-
if (piwb->not_present_op_depth > 0
&& piwb->not_present_op_depth < piwb->op_depth)
{
@@ -1086,7 +1126,7 @@ insert_working_node(void *baton,
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_INSERT_NODE));
- SVN_ERR(svn_sqlite__bindf(stmt, "isisisrtnt",
+ SVN_ERR(svn_sqlite__bindf(stmt, "isdsisrtnt",
wcroot->wc_id, local_relpath,
piwb->not_present_op_depth, parent_relpath,
piwb->original_repos_id,
@@ -1099,6 +1139,11 @@ insert_working_node(void *baton,
SVN_ERR(svn_sqlite__step_done(stmt));
}
+ SVN_ERR(add_work_items(wcroot->sdb, piwb->work_items, scratch_pool));
+ if (piwb->conflict)
+ SVN_ERR(svn_wc__db_mark_conflict_internal(wcroot, local_relpath,
+ piwb->conflict, scratch_pool));
+
return SVN_NO_ERROR;
}
@@ -1124,7 +1169,7 @@ add_children_to_hash(apr_hash_t *children,
const char *child_relpath = svn_sqlite__column_text(stmt, 0, NULL);
const char *name = svn_relpath_basename(child_relpath, result_pool);
- apr_hash_set(children, name, APR_HASH_KEY_STRING, name);
+ svn_hash_sets(children, name, name);
SVN_ERR(svn_sqlite__step(&have_row, stmt));
}
@@ -1190,7 +1235,7 @@ static svn_error_t *
gather_repo_children(const apr_array_header_t **children,
svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
- apr_int64_t op_depth,
+ int op_depth,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
@@ -1201,7 +1246,7 @@ gather_repo_children(const apr_array_header_t **children,
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_SELECT_OP_DEPTH_CHILDREN));
- SVN_ERR(svn_sqlite__bindf(stmt, "isi", wcroot->wc_id, local_relpath,
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id, local_relpath,
op_depth));
SVN_ERR(svn_sqlite__step(&have_row, stmt));
while (have_row)
@@ -1220,6 +1265,41 @@ gather_repo_children(const apr_array_header_t **children,
return SVN_NO_ERROR;
}
+svn_error_t *
+svn_wc__db_get_children_op_depth(apr_hash_t **children,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ int op_depth,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+
+ *children = apr_hash_make(result_pool);
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_OP_DEPTH_CHILDREN));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id, local_relpath,
+ op_depth));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ while (have_row)
+ {
+ const char *child_relpath = svn_sqlite__column_text(stmt, 0, NULL);
+ svn_node_kind_t *child_kind = apr_palloc(result_pool, sizeof(svn_node_kind_t));
+
+ *child_kind = svn_sqlite__column_token(stmt, 1, kind_map);
+ svn_hash_sets(*children,
+ svn_relpath_basename(child_relpath, result_pool),
+ child_kind);
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ }
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ return SVN_NO_ERROR;
+}
+
/* Return TRUE if CHILD_ABSPATH is an immediate child of PARENT_ABSPATH.
* Else, return FALSE. */
@@ -1242,7 +1322,7 @@ remove_from_access_cache(apr_hash_t *access_cache,
{
svn_wc_adm_access_t *adm_access;
- adm_access = apr_hash_get(access_cache, local_abspath, APR_HASH_KEY_STRING);
+ adm_access = svn_hash_gets(access_cache, local_abspath);
if (adm_access)
svn_wc__adm_access_set_entries(adm_access, NULL);
}
@@ -1321,7 +1401,7 @@ add_single_work_item(svn_sqlite__db_t *sdb,
}
-/* Add work item(s) to the given SDB. Also see add_one_work_item(). This
+/* Add work item(s) to the given SDB. Also see add_single_work_item(). This
SKEL is usually passed to the various wc_db operation functions. It may
be NULL, indicating no additional work items are needed, it may be a
single work item, or it may be a list of work items. */
@@ -1373,11 +1453,85 @@ does_node_exist(svn_boolean_t *exists,
return svn_error_trace(svn_sqlite__reset(stmt));
}
+svn_error_t *
+svn_wc__db_install_schema_statistics(svn_sqlite__db_t *sdb,
+ apr_pool_t *scratch_pool)
+{
+ SVN_ERR(svn_sqlite__exec_statements(sdb, STMT_INSTALL_SCHEMA_STATISTICS));
+
+ return SVN_NO_ERROR;
+}
+
+/* Helper for create_db(). Initializes our wc.db schema.
+ */
+static svn_error_t *
+init_db(/* output values */
+ apr_int64_t *repos_id,
+ apr_int64_t *wc_id,
+ /* input values */
+ svn_sqlite__db_t *db,
+ const char *repos_root_url,
+ const char *repos_uuid,
+ const char *root_node_repos_relpath,
+ svn_revnum_t root_node_revision,
+ svn_depth_t root_node_depth,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt;
+
+ /* Create the database's schema. */
+ SVN_ERR(svn_sqlite__exec_statements(db, STMT_CREATE_SCHEMA));
+ SVN_ERR(svn_sqlite__exec_statements(db, STMT_CREATE_NODES));
+ SVN_ERR(svn_sqlite__exec_statements(db, STMT_CREATE_NODES_TRIGGERS));
+ SVN_ERR(svn_sqlite__exec_statements(db, STMT_CREATE_EXTERNALS));
+
+ /* Insert the repository. */
+ SVN_ERR(create_repos_id(repos_id, repos_root_url, repos_uuid,
+ db, scratch_pool));
+
+ SVN_ERR(svn_wc__db_install_schema_statistics(db, scratch_pool));
+
+ /* Insert the wcroot. */
+ /* ### Right now, this just assumes wc metadata is being stored locally. */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, db, STMT_INSERT_WCROOT));
+ SVN_ERR(svn_sqlite__insert(wc_id, stmt));
+
+ if (root_node_repos_relpath)
+ {
+ svn_wc__db_status_t status = svn_wc__db_status_normal;
+
+ if (root_node_revision > 0)
+ status = svn_wc__db_status_incomplete; /* Will be filled by update */
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, db, STMT_INSERT_NODE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isdsisrtst",
+ *wc_id, /* 1 */
+ "", /* 2 */
+ 0, /* op_depth is 0 for base */
+ NULL, /* 4 */
+ *repos_id,
+ root_node_repos_relpath,
+ root_node_revision,
+ presence_map, status, /* 8 */
+ svn_token__to_word(depth_map,
+ root_node_depth),
+ kind_map, svn_node_dir /* 10 */));
+
+ SVN_ERR(svn_sqlite__insert(NULL, stmt));
+ }
+
+ return SVN_NO_ERROR;
+}
/* Create an sqlite database at DIR_ABSPATH/SDB_FNAME and insert
records for REPOS_ID (using REPOS_ROOT_URL and REPOS_UUID) into
REPOSITORY and for WC_ID into WCROOT. Return the DB connection
- in *SDB. */
+ in *SDB.
+
+ If ROOT_NODE_REPOS_RELPATH is not NULL, insert a BASE node at
+ the working copy root with repository relpath ROOT_NODE_REPOS_RELPATH,
+ revision ROOT_NODE_REVISION and depth ROOT_NODE_DEPTH.
+ */
static svn_error_t *
create_db(svn_sqlite__db_t **sdb,
apr_int64_t *repos_id,
@@ -1386,30 +1540,23 @@ create_db(svn_sqlite__db_t **sdb,
const char *repos_root_url,
const char *repos_uuid,
const char *sdb_fname,
+ const char *root_node_repos_relpath,
+ svn_revnum_t root_node_revision,
+ svn_depth_t root_node_depth,
+ svn_boolean_t exclusive,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- svn_sqlite__stmt_t *stmt;
-
SVN_ERR(svn_wc__db_util_open_db(sdb, dir_abspath, sdb_fname,
- svn_sqlite__mode_rwcreate,
+ svn_sqlite__mode_rwcreate, exclusive,
NULL /* my_statements */,
result_pool, scratch_pool));
- /* Create the database's schema. */
- SVN_ERR(svn_sqlite__exec_statements(*sdb, STMT_CREATE_SCHEMA));
- SVN_ERR(svn_sqlite__exec_statements(*sdb, STMT_CREATE_NODES));
- SVN_ERR(svn_sqlite__exec_statements(*sdb, STMT_CREATE_NODES_TRIGGERS));
- SVN_ERR(svn_sqlite__exec_statements(*sdb, STMT_CREATE_EXTERNALS));
-
- /* Insert the repository. */
- SVN_ERR(create_repos_id(repos_id, repos_root_url, repos_uuid, *sdb,
- scratch_pool));
-
- /* Insert the wcroot. */
- /* ### Right now, this just assumes wc metadata is being stored locally. */
- SVN_ERR(svn_sqlite__get_statement(&stmt, *sdb, STMT_INSERT_WCROOT));
- SVN_ERR(svn_sqlite__insert(wc_id, stmt));
+ SVN_SQLITE__WITH_LOCK(init_db(repos_id, wc_id,
+ *sdb, repos_root_url, repos_uuid,
+ root_node_repos_relpath, root_node_revision,
+ root_node_depth, scratch_pool),
+ *sdb);
return SVN_NO_ERROR;
}
@@ -1429,7 +1576,7 @@ svn_wc__db_init(svn_wc__db_t *db,
apr_int64_t repos_id;
apr_int64_t wc_id;
svn_wc__db_wcroot_t *wcroot;
- insert_base_baton_t ibb;
+ svn_boolean_t sqlite_exclusive = FALSE;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
SVN_ERR_ASSERT(repos_relpath != NULL);
@@ -1440,9 +1587,16 @@ svn_wc__db_init(svn_wc__db_t *db,
/* ### REPOS_ROOT_URL and REPOS_UUID may be NULL. ... more doc: tbd */
+ SVN_ERR(svn_config_get_bool((svn_config_t *)db->config, &sqlite_exclusive,
+ SVN_CONFIG_SECTION_WORKING_COPY,
+ SVN_CONFIG_OPTION_SQLITE_EXCLUSIVE,
+ FALSE));
+
/* Create the SDB and insert the basic rows. */
SVN_ERR(create_db(&sdb, &repos_id, &wc_id, local_abspath, repos_root_url,
- repos_uuid, SDB_FILE, db->state_pool, scratch_pool));
+ repos_uuid, SDB_FILE,
+ repos_relpath, initial_rev, depth, sqlite_exclusive,
+ db->state_pool, scratch_pool));
/* Create the WCROOT for this directory. */
SVN_ERR(svn_wc__db_pdh_create_wcroot(&wcroot,
@@ -1453,26 +1607,9 @@ svn_wc__db_init(svn_wc__db_t *db,
db->state_pool, scratch_pool));
/* The WCROOT is complete. Stash it into DB. */
- apr_hash_set(db->dir_data, wcroot->abspath, APR_HASH_KEY_STRING, wcroot);
-
- blank_ibb(&ibb);
+ svn_hash_sets(db->dir_data, wcroot->abspath, wcroot);
- if (initial_rev > 0)
- ibb.status = svn_wc__db_status_incomplete;
- else
- ibb.status = svn_wc__db_status_normal;
- ibb.kind = svn_wc__db_kind_dir;
- ibb.repos_id = repos_id;
- ibb.repos_relpath = repos_relpath;
- ibb.revision = initial_rev;
-
- /* ### what about the children? */
- ibb.children = NULL;
- ibb.depth = depth;
-
- /* ### no children, conflicts, or work items to install in a txn... */
-
- return svn_error_trace(insert_base_node(&ibb, wcroot, "", scratch_pool));
+ return SVN_NO_ERROR;
}
@@ -1494,7 +1631,7 @@ svn_wc__db_to_relpath(const char **local_relpath,
/* This function is indirectly called from the upgrade code, so we
can't verify the wcroot here. Just check that it is not NULL */
- SVN_ERR_ASSERT(wcroot != NULL);
+ CHECK_MINIMAL_WCROOT(wcroot, wri_abspath, scratch_pool);
if (svn_dirent_is_ancestor(wcroot->abspath, local_abspath))
{
@@ -1526,7 +1663,11 @@ svn_wc__db_from_relpath(const char **local_abspath,
SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &unused_relpath, db,
wri_abspath, scratch_pool, scratch_pool));
- VERIFY_USABLE_WCROOT(wcroot);
+
+ /* This function is indirectly called from the upgrade code, so we
+ can't verify the wcroot here. Just check that it is not NULL */
+ CHECK_MINIMAL_WCROOT(wcroot, wri_abspath, scratch_pool);
+
*local_abspath = svn_dirent_join(wcroot->abspath,
local_relpath,
@@ -1550,12 +1691,7 @@ svn_wc__db_get_wcroot(const char **wcroot_abspath,
/* Can't use VERIFY_USABLE_WCROOT, as this should be usable to detect
where call upgrade */
-
- if (wcroot == NULL)
- return svn_error_createf(SVN_ERR_WC_NOT_WORKING_COPY, NULL,
- _("The node '%s' is not in a workingcopy."),
- svn_dirent_local_style(wri_abspath,
- scratch_pool));
+ CHECK_MINIMAL_WCROOT(wcroot, wri_abspath, scratch_pool);
*wcroot_abspath = apr_pstrdup(result_pool, wcroot->abspath);
@@ -1581,6 +1717,7 @@ svn_wc__db_base_add_directory(svn_wc__db_t *db,
const svn_skel_t *conflict,
svn_boolean_t update_actual_props,
apr_hash_t *new_actual_props,
+ apr_array_header_t *new_iprops,
const svn_skel_t *work_items,
apr_pool_t *scratch_pool)
{
@@ -1611,10 +1748,11 @@ svn_wc__db_base_add_directory(svn_wc__db_t *db,
ibb.repos_uuid = repos_uuid;
ibb.status = svn_wc__db_status_normal;
- ibb.kind = svn_wc__db_kind_dir;
+ ibb.kind = svn_node_dir;
ibb.repos_relpath = repos_relpath;
ibb.revision = revision;
+ ibb.iprops = new_iprops;
ibb.props = props;
ibb.changed_rev = changed_rev;
ibb.changed_date = changed_date;
@@ -1637,13 +1775,68 @@ svn_wc__db_base_add_directory(svn_wc__db_t *db,
Note: old children can stick around, even if they are no longer present
in this directory's revision. */
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, insert_base_node, &ibb,
- scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ insert_base_node(&ibb, wcroot, local_relpath, scratch_pool),
+ wcroot);
SVN_ERR(flush_entries(wcroot, local_abspath, depth, scratch_pool));
return SVN_NO_ERROR;
}
+svn_error_t *
+svn_wc__db_base_add_incomplete_directory(svn_wc__db_t *db,
+ const char *local_abspath,
+ const char *repos_relpath,
+ const char *repos_root_url,
+ const char *repos_uuid,
+ svn_revnum_t revision,
+ svn_depth_t depth,
+ svn_boolean_t insert_base_deleted,
+ svn_boolean_t delete_working,
+ svn_skel_t *conflict,
+ svn_skel_t *work_items,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_wcroot_t *wcroot;
+ const char *local_relpath;
+ struct insert_base_baton_t ibb;
+
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+ SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(revision));
+ SVN_ERR_ASSERT(repos_relpath && repos_root_url && repos_uuid);
+
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath,
+ db, local_abspath,
+ scratch_pool, scratch_pool));
+
+ VERIFY_USABLE_WCROOT(wcroot);
+
+ blank_ibb(&ibb);
+
+ /* Calculate repos_id in insert_base_node() to avoid extra transaction */
+ ibb.repos_root_url = repos_root_url;
+ ibb.repos_uuid = repos_uuid;
+
+ ibb.status = svn_wc__db_status_incomplete;
+ ibb.kind = svn_node_dir;
+ ibb.repos_relpath = repos_relpath;
+ ibb.revision = revision;
+ ibb.depth = depth;
+ ibb.insert_base_deleted = insert_base_deleted;
+ ibb.delete_working = delete_working;
+
+ ibb.conflict = conflict;
+ ibb.work_items = work_items;
+
+ SVN_WC__DB_WITH_TXN(
+ insert_base_node(&ibb, wcroot, local_relpath, scratch_pool),
+ wcroot);
+
+ SVN_ERR(flush_entries(wcroot, local_abspath, svn_depth_empty, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
svn_error_t *
svn_wc__db_base_add_file(svn_wc__db_t *db,
@@ -1659,11 +1852,13 @@ svn_wc__db_base_add_file(svn_wc__db_t *db,
const char *changed_author,
const svn_checksum_t *checksum,
apr_hash_t *dav_cache,
- const svn_skel_t *conflict,
+ svn_boolean_t delete_working,
svn_boolean_t update_actual_props,
apr_hash_t *new_actual_props,
+ apr_array_header_t *new_iprops,
svn_boolean_t keep_recorded_info,
svn_boolean_t insert_base_deleted,
+ const svn_skel_t *conflict,
const svn_skel_t *work_items,
apr_pool_t *scratch_pool)
{
@@ -1692,7 +1887,7 @@ svn_wc__db_base_add_file(svn_wc__db_t *db,
ibb.repos_uuid = repos_uuid;
ibb.status = svn_wc__db_status_normal;
- ibb.kind = svn_wc__db_kind_file;
+ ibb.kind = svn_node_file;
ibb.repos_relpath = repos_relpath;
ibb.revision = revision;
@@ -1704,8 +1899,7 @@ svn_wc__db_base_add_file(svn_wc__db_t *db,
ibb.checksum = checksum;
ibb.dav_cache = dav_cache;
- ibb.conflict = conflict;
- ibb.work_items = work_items;
+ ibb.iprops = new_iprops;
if (update_actual_props)
{
@@ -1715,9 +1909,14 @@ svn_wc__db_base_add_file(svn_wc__db_t *db,
ibb.keep_recorded_info = keep_recorded_info;
ibb.insert_base_deleted = insert_base_deleted;
+ ibb.delete_working = delete_working;
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, insert_base_node, &ibb,
- scratch_pool));
+ ibb.conflict = conflict;
+ ibb.work_items = work_items;
+
+ SVN_WC__DB_WITH_TXN(
+ insert_base_node(&ibb, wcroot, local_relpath, scratch_pool),
+ wcroot);
/* If this used to be a directory we should remove children so pass
* depth infinity. */
@@ -1741,9 +1940,13 @@ svn_wc__db_base_add_symlink(svn_wc__db_t *db,
const char *changed_author,
const char *target,
apr_hash_t *dav_cache,
- const svn_skel_t *conflict,
+ svn_boolean_t delete_working,
svn_boolean_t update_actual_props,
apr_hash_t *new_actual_props,
+ apr_array_header_t *new_iprops,
+ svn_boolean_t keep_recorded_info,
+ svn_boolean_t insert_base_deleted,
+ const svn_skel_t *conflict,
const svn_skel_t *work_items,
apr_pool_t *scratch_pool)
{
@@ -1771,7 +1974,7 @@ svn_wc__db_base_add_symlink(svn_wc__db_t *db,
ibb.repos_uuid = repos_uuid;
ibb.status = svn_wc__db_status_normal;
- ibb.kind = svn_wc__db_kind_symlink;
+ ibb.kind = svn_node_symlink;
ibb.repos_relpath = repos_relpath;
ibb.revision = revision;
@@ -1783,8 +1986,7 @@ svn_wc__db_base_add_symlink(svn_wc__db_t *db,
ibb.target = target;
ibb.dav_cache = dav_cache;
- ibb.conflict = conflict;
- ibb.work_items = work_items;
+ ibb.iprops = new_iprops;
if (update_actual_props)
{
@@ -1792,8 +1994,16 @@ svn_wc__db_base_add_symlink(svn_wc__db_t *db,
ibb.new_actual_props = new_actual_props;
}
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, insert_base_node, &ibb,
- scratch_pool));
+ ibb.keep_recorded_info = keep_recorded_info;
+ ibb.insert_base_deleted = insert_base_deleted;
+ ibb.delete_working = delete_working;
+
+ ibb.conflict = conflict;
+ ibb.work_items = work_items;
+
+ SVN_WC__DB_WITH_TXN(
+ insert_base_node(&ibb, wcroot, local_relpath, scratch_pool),
+ wcroot);
/* If this used to be a directory we should remove children so pass
* depth infinity. */
@@ -1810,7 +2020,7 @@ add_excluded_or_not_present_node(svn_wc__db_t *db,
const char *repos_root_url,
const char *repos_uuid,
svn_revnum_t revision,
- svn_wc__db_kind_t kind,
+ svn_node_kind_t kind,
svn_wc__db_status_t status,
const svn_skel_t *conflict,
const svn_skel_t *work_items,
@@ -1863,8 +2073,9 @@ add_excluded_or_not_present_node(svn_wc__db_t *db,
ibb.conflict = conflict;
ibb.work_items = work_items;
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, insert_base_node, &ibb,
- scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ insert_base_node(&ibb, wcroot, local_relpath, scratch_pool),
+ wcroot);
/* If this used to be a directory we should remove children so pass
* depth infinity. */
@@ -1882,7 +2093,7 @@ svn_wc__db_base_add_excluded_node(svn_wc__db_t *db,
const char *repos_root_url,
const char *repos_uuid,
svn_revnum_t revision,
- svn_wc__db_kind_t kind,
+ svn_node_kind_t kind,
svn_wc__db_status_t status,
const svn_skel_t *conflict,
const svn_skel_t *work_items,
@@ -1904,7 +2115,7 @@ svn_wc__db_base_add_not_present_node(svn_wc__db_t *db,
const char *repos_root_url,
const char *repos_uuid,
svn_revnum_t revision,
- svn_wc__db_kind_t kind,
+ svn_node_kind_t kind,
const svn_skel_t *conflict,
const svn_skel_t *work_items,
apr_pool_t *scratch_pool)
@@ -1914,39 +2125,296 @@ svn_wc__db_base_add_not_present_node(svn_wc__db_t *db,
kind, svn_wc__db_status_not_present, conflict, work_items, scratch_pool);
}
+/* Recursively clear moved-here information at the copy-half of the move
+ * which moved the node at SRC_RELPATH away. This transforms the move into
+ * a simple copy. */
+static svn_error_t *
+clear_moved_here(const char *src_relpath,
+ svn_wc__db_wcroot_t *wcroot,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt;
+ const char *dst_relpath;
-/* This implements svn_wc__db_txn_callback_t */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb, STMT_SELECT_MOVED_TO));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id,
+ src_relpath, relpath_depth(src_relpath)));
+ SVN_ERR(svn_sqlite__step_row(stmt));
+ dst_relpath = svn_sqlite__column_text(stmt, 0, scratch_pool);
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_CLEAR_MOVED_HERE_RECURSIVE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id,
+ dst_relpath, relpath_depth(dst_relpath)));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+
+ return SVN_NO_ERROR;
+}
+
+/* The body of svn_wc__db_base_remove().
+ */
static svn_error_t *
-db_base_remove(void *baton,
- svn_wc__db_wcroot_t *wcroot,
+db_base_remove(svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
+ svn_wc__db_t *db, /* For checking conflicts */
+ svn_boolean_t keep_as_working,
+ svn_boolean_t queue_deletes,
+ svn_boolean_t remove_locks,
+ svn_revnum_t not_present_revision,
+ svn_skel_t *conflict,
+ svn_skel_t *work_items,
apr_pool_t *scratch_pool)
{
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
+ svn_wc__db_status_t status;
+ apr_int64_t repos_id;
+ const char *repos_relpath;
+ svn_node_kind_t kind;
+ svn_boolean_t keep_working;
+
+ SVN_ERR(svn_wc__db_base_get_info_internal(&status, &kind, NULL,
+ &repos_relpath, &repos_id,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool));
+
+ if (remove_locks)
+ {
+ svn_sqlite__stmt_t *lock_stmt;
+
+ SVN_ERR(svn_sqlite__get_statement(&lock_stmt, wcroot->sdb,
+ STMT_DELETE_LOCK_RECURSIVELY));
+ SVN_ERR(svn_sqlite__bindf(lock_stmt, "is", repos_id, repos_relpath));
+ SVN_ERR(svn_sqlite__step_done(lock_stmt));
+ }
+
+ if (status == svn_wc__db_status_normal
+ && keep_as_working)
+ {
+ SVN_ERR(svn_wc__db_op_make_copy(db,
+ svn_dirent_join(wcroot->abspath,
+ local_relpath,
+ scratch_pool),
+ NULL, NULL,
+ scratch_pool));
+ keep_working = TRUE;
+ }
+ else
+ {
+ /* Check if there is already a working node */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_WORKING_NODE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__step(&keep_working, stmt));
+ SVN_ERR(svn_sqlite__reset(stmt));
+ }
+
+ /* Step 1: Create workqueue operations to remove files and dirs in the
+ local-wc */
+ if (!keep_working
+ && queue_deletes
+ && (status == svn_wc__db_status_normal
+ || status == svn_wc__db_status_incomplete))
+ {
+ svn_skel_t *work_item;
+ const char *local_abspath;
+
+ local_abspath = svn_dirent_join(wcroot->abspath, local_relpath,
+ scratch_pool);
+ if (kind == svn_node_dir)
+ {
+ apr_pool_t *iterpool;
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_BASE_PRESENT));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+
+ iterpool = svn_pool_create(scratch_pool);
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+
+ while (have_row)
+ {
+ const char *node_relpath = svn_sqlite__column_text(stmt, 0, NULL);
+ svn_node_kind_t node_kind = svn_sqlite__column_token(stmt, 1,
+ kind_map);
+ const char *node_abspath;
+ svn_error_t *err;
+
+ svn_pool_clear(iterpool);
+ node_abspath = svn_dirent_join(wcroot->abspath, node_relpath,
+ iterpool);
+
+ if (node_kind == svn_node_dir)
+ err = svn_wc__wq_build_dir_remove(&work_item,
+ db, wcroot->abspath,
+ node_abspath, FALSE,
+ iterpool, iterpool);
+ else
+ err = svn_wc__wq_build_file_remove(&work_item,
+ db,
+ wcroot->abspath,
+ node_abspath,
+ iterpool, iterpool);
+
+ if (!err)
+ err = add_work_items(wcroot->sdb, work_item, iterpool);
+ if (err)
+ return svn_error_compose_create(err, svn_sqlite__reset(stmt));
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ }
+
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ SVN_ERR(svn_wc__wq_build_dir_remove(&work_item,
+ db, wcroot->abspath,
+ local_abspath, FALSE,
+ scratch_pool, iterpool));
+ svn_pool_destroy(iterpool);
+ }
+ else
+ SVN_ERR(svn_wc__wq_build_file_remove(&work_item,
+ db, wcroot->abspath,
+ local_abspath,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(add_work_items(wcroot->sdb, work_item, scratch_pool));
+ }
+
+ /* Step 2: Delete ACTUAL nodes */
+ if (! keep_working)
+ {
+ /* There won't be a record in NODE left for this node, so we want
+ to remove *all* ACTUAL nodes, including ACTUAL ONLY. */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_DELETE_ACTUAL_NODE_RECURSIVE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+ }
+ else if (! keep_as_working)
+ {
+ /* Delete only the ACTUAL nodes that apply to a delete of a BASE node */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_DELETE_ACTUAL_FOR_BASE_RECURSIVE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+ }
+ /* Else: Everything has been turned into a copy, so we want to keep all
+ ACTUAL_NODE records */
+
+ /* Step 3: Delete WORKING nodes */
+ if (conflict)
+ {
+ apr_pool_t *iterpool;
+
+ /*
+ * When deleting a conflicted node, moves of any moved-outside children
+ * of the node must be broken. Else, the destination will still be marked
+ * moved-here after the move source disappears from the working copy.
+ *
+ * ### FIXME: It would be nicer to have the conflict resolver
+ * break the move instead. It might also be a good idea to
+ * flag a tree conflict on each moved-away child. But doing so
+ * might introduce actual-only nodes without direct parents,
+ * and we're not yet sure if other existing code is prepared
+ * to handle such nodes. To be revisited post-1.8.
+ *
+ * ### In case of a conflict we are most likely creating WORKING nodes
+ * describing a copy of what was in BASE. The move information
+ * should be updated to describe a move from the WORKING layer.
+ * When stored that way the resolver of the tree conflict still has
+ * the knowledge of what was moved.
+ */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_MOVED_OUTSIDE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id,
+ local_relpath,
+ relpath_depth(local_relpath)));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ iterpool = svn_pool_create(scratch_pool);
+ while (have_row)
+ {
+ const char *child_relpath;
+ svn_error_t *err;
+
+ svn_pool_clear(iterpool);
+ child_relpath = svn_sqlite__column_text(stmt, 0, iterpool);
+ err = clear_moved_here(child_relpath, wcroot, iterpool);
+ if (err)
+ return svn_error_compose_create(err, svn_sqlite__reset(stmt));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ }
+ svn_pool_destroy(iterpool);
+ SVN_ERR(svn_sqlite__reset(stmt));
+ }
+ if (keep_working)
+ {
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_DELETE_WORKING_BASE_DELETE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+ }
+ else
+ {
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_DELETE_WORKING_RECURSIVE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+ }
+
+ /* Step 4: Delete the BASE node descendants */
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_DELETE_BASE_NODE));
+ STMT_DELETE_BASE_RECURSIVE));
SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
SVN_ERR(svn_sqlite__step_done(stmt));
- SVN_ERR(retract_parent_delete(wcroot, local_relpath, scratch_pool));
-
- /* If there is no working node then any actual node must be deleted,
- unless it marks a conflict */
+ /* Step 5: handle the BASE node itself */
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_SELECT_WORKING_NODE));
+ STMT_DELETE_BASE_NODE));
SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
- SVN_ERR(svn_sqlite__step(&have_row, stmt));
- SVN_ERR(svn_sqlite__reset(stmt));
- if (!have_row)
+ SVN_ERR(svn_sqlite__step_done(stmt));
+
+ SVN_ERR(svn_wc__db_retract_parent_delete(wcroot, local_relpath, 0,
+ scratch_pool));
+
+ /* Step 6: Delete actual node if we don't keep working */
+ if (! keep_working)
{
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_DELETE_ACTUAL_NODE_WITHOUT_CONFLICT));
+ STMT_DELETE_ACTUAL_NODE));
SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
SVN_ERR(svn_sqlite__step_done(stmt));
}
+ if (SVN_IS_VALID_REVNUM(not_present_revision))
+ {
+ struct insert_base_baton_t ibb;
+ blank_ibb(&ibb);
+
+ ibb.repos_id = repos_id;
+ ibb.status = svn_wc__db_status_not_present;
+ ibb.kind = kind;
+ ibb.repos_relpath = repos_relpath;
+ ibb.revision = not_present_revision;
+
+ /* Depending upon KIND, any of these might get used. */
+ ibb.children = NULL;
+ ibb.depth = svn_depth_unknown;
+ ibb.checksum = NULL;
+ ibb.target = NULL;
+
+ SVN_ERR(insert_base_node(&ibb, wcroot, local_relpath, scratch_pool));
+ }
+
+ SVN_ERR(add_work_items(wcroot->sdb, work_items, scratch_pool));
+ if (conflict)
+ SVN_ERR(svn_wc__db_mark_conflict_internal(wcroot, local_relpath,
+ conflict, scratch_pool));
+
return SVN_NO_ERROR;
}
@@ -1954,6 +2422,12 @@ db_base_remove(void *baton,
svn_error_t *
svn_wc__db_base_remove(svn_wc__db_t *db,
const char *local_abspath,
+ svn_boolean_t keep_as_working,
+ svn_boolean_t queue_deletes,
+ svn_boolean_t remove_locks,
+ svn_revnum_t not_present_revision,
+ svn_skel_t *conflict,
+ svn_skel_t *work_items,
apr_pool_t *scratch_pool)
{
svn_wc__db_wcroot_t *wcroot;
@@ -1965,8 +2439,11 @@ svn_wc__db_base_remove(svn_wc__db_t *db,
local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, db_base_remove, NULL,
- scratch_pool));
+ SVN_WC__DB_WITH_TXN(db_base_remove(wcroot, local_relpath,
+ db, keep_as_working, queue_deletes,
+ remove_locks, not_present_revision,
+ conflict, work_items, scratch_pool),
+ wcroot);
/* If this used to be a directory we should remove children so pass
* depth infinity. */
@@ -1977,27 +2454,26 @@ svn_wc__db_base_remove(svn_wc__db_t *db,
}
-/* Like svn_wc__db_base_get_info(), but taking WCROOT+LOCAL_RELPATH instead of
- DB+LOCAL_ABSPATH and outputting REPOS_ID instead of URL+UUID. */
-static svn_error_t *
-base_get_info(svn_wc__db_status_t *status,
- svn_wc__db_kind_t *kind,
- svn_revnum_t *revision,
- const char **repos_relpath,
- apr_int64_t *repos_id,
- svn_revnum_t *changed_rev,
- apr_time_t *changed_date,
- const char **changed_author,
- svn_depth_t *depth,
- const svn_checksum_t **checksum,
- const char **target,
- svn_wc__db_lock_t **lock,
- svn_boolean_t *had_props,
- svn_boolean_t *update_root,
- svn_wc__db_wcroot_t *wcroot,
- const char *local_relpath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+svn_error_t *
+svn_wc__db_base_get_info_internal(svn_wc__db_status_t *status,
+ svn_node_kind_t *kind,
+ svn_revnum_t *revision,
+ const char **repos_relpath,
+ apr_int64_t *repos_id,
+ svn_revnum_t *changed_rev,
+ apr_time_t *changed_date,
+ const char **changed_author,
+ svn_depth_t *depth,
+ const svn_checksum_t **checksum,
+ const char **target,
+ svn_wc__db_lock_t **lock,
+ svn_boolean_t *had_props,
+ apr_hash_t **props,
+ svn_boolean_t *update_root,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
@@ -2011,8 +2487,9 @@ base_get_info(svn_wc__db_status_t *status,
if (have_row)
{
- svn_wc__db_kind_t node_kind = svn_sqlite__column_token(stmt, 3,
- kind_map);
+ svn_wc__db_status_t node_status = svn_sqlite__column_token(stmt, 2,
+ presence_map);
+ svn_node_kind_t node_kind = svn_sqlite__column_token(stmt, 3, kind_map);
if (kind)
{
@@ -2020,10 +2497,10 @@ base_get_info(svn_wc__db_status_t *status,
}
if (status)
{
- *status = svn_sqlite__column_token(stmt, 2, presence_map);
+ *status = node_status;
}
- err = repos_location_from_columns(repos_id, revision, repos_relpath,
- stmt, 0, 4, 1, result_pool);
+ repos_location_from_columns(repos_id, revision, repos_relpath,
+ stmt, 0, 4, 1, result_pool);
SVN_ERR_ASSERT(!repos_id || *repos_id != INVALID_REPOS_ID);
SVN_ERR_ASSERT(!repos_relpath || *repos_relpath);
if (lock)
@@ -2045,23 +2522,19 @@ base_get_info(svn_wc__db_status_t *status,
}
if (depth)
{
- if (node_kind != svn_wc__db_kind_dir)
+ if (node_kind != svn_node_dir)
{
*depth = svn_depth_unknown;
}
else
{
- const char *depth_str = svn_sqlite__column_text(stmt, 10, NULL);
-
- if (depth_str == NULL)
- *depth = svn_depth_unknown;
- else
- *depth = svn_depth_from_word(depth_str);
+ *depth = svn_sqlite__column_token_null(stmt, 10, depth_map,
+ svn_depth_unknown);
}
}
if (checksum)
{
- if (node_kind != svn_wc__db_kind_file)
+ if (node_kind != svn_node_file)
{
*checksum = NULL;
}
@@ -2079,7 +2552,7 @@ base_get_info(svn_wc__db_status_t *status,
}
if (target)
{
- if (node_kind != svn_wc__db_kind_symlink)
+ if (node_kind != svn_node_symlink)
*target = NULL;
else
*target = svn_sqlite__column_text(stmt, 11, result_pool);
@@ -2088,8 +2561,25 @@ base_get_info(svn_wc__db_status_t *status,
{
*had_props = SQLITE_PROPERTIES_AVAILABLE(stmt, 13);
}
+ if (props)
+ {
+ if (node_status == svn_wc__db_status_normal
+ || node_status == svn_wc__db_status_incomplete)
+ {
+ SVN_ERR(svn_sqlite__column_properties(props, stmt, 13,
+ result_pool, scratch_pool));
+ if (*props == NULL)
+ *props = apr_hash_make(result_pool);
+ }
+ else
+ {
+ assert(svn_sqlite__column_is_null(stmt, 13));
+ *props = NULL;
+ }
+ }
if (update_root)
{
+ /* It's an update root iff it's a file external. */
*update_root = svn_sqlite__column_boolean(stmt, 14);
}
}
@@ -2108,7 +2598,7 @@ base_get_info(svn_wc__db_status_t *status,
svn_error_t *
svn_wc__db_base_get_info(svn_wc__db_status_t *status,
- svn_wc__db_kind_t *kind,
+ svn_node_kind_t *kind,
svn_revnum_t *revision,
const char **repos_relpath,
const char **repos_root_url,
@@ -2121,6 +2611,7 @@ svn_wc__db_base_get_info(svn_wc__db_status_t *status,
const char **target,
svn_wc__db_lock_t **lock,
svn_boolean_t *had_props,
+ apr_hash_t **props,
svn_boolean_t *update_root,
svn_wc__db_t *db,
const char *local_abspath,
@@ -2137,14 +2628,21 @@ svn_wc__db_base_get_info(svn_wc__db_status_t *status,
local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- SVN_ERR(base_get_info(status, kind, revision, repos_relpath, &repos_id,
- changed_rev, changed_date, changed_author, depth,
- checksum, target, lock, had_props,
- update_root,
- wcroot, local_relpath, result_pool, scratch_pool));
+ SVN_WC__DB_WITH_TXN4(
+ svn_wc__db_base_get_info_internal(status, kind, revision,
+ repos_relpath, &repos_id,
+ changed_rev, changed_date,
+ changed_author, depth,
+ checksum, target, lock,
+ had_props, props, update_root,
+ wcroot, local_relpath,
+ result_pool, scratch_pool),
+ svn_wc__db_fetch_repos_info(repos_root_url, repos_uuid,
+ wcroot->sdb, repos_id, result_pool),
+ SVN_NO_ERROR,
+ SVN_NO_ERROR,
+ wcroot);
SVN_ERR_ASSERT(repos_id != INVALID_REPOS_ID);
- SVN_ERR(fetch_repos_info(repos_root_url, repos_uuid,
- wcroot->sdb, repos_id, result_pool));
return SVN_NO_ERROR;
}
@@ -2180,7 +2678,6 @@ svn_wc__db_base_get_children_info(apr_hash_t **nodes,
struct svn_wc__db_base_info_t *info;
svn_error_t *err;
apr_int64_t repos_id;
- const char *depth_str;
const char *child_relpath = svn_sqlite__column_text(stmt, 0, NULL);
const char *name = svn_relpath_basename(child_relpath, result_pool);
@@ -2192,17 +2689,15 @@ svn_wc__db_base_get_children_info(apr_hash_t **nodes,
info->kind = svn_sqlite__column_token(stmt, 4, kind_map);
info->revnum = svn_sqlite__column_revnum(stmt, 5);
- depth_str = svn_sqlite__column_text(stmt, 6, NULL);
-
- info->depth = (depth_str != NULL) ? svn_depth_from_word(depth_str)
- : svn_depth_unknown;
+ info->depth = svn_sqlite__column_token_null(stmt, 6, depth_map,
+ svn_depth_unknown);
info->update_root = svn_sqlite__column_boolean(stmt, 7);
info->lock = lock_from_columns(stmt, 8, 9, 10, 11, result_pool);
- err = fetch_repos_info(&info->repos_root_url, NULL, wcroot->sdb,
- repos_id, result_pool);
+ err = svn_wc__db_fetch_repos_info(&info->repos_root_url, NULL,
+ wcroot->sdb, repos_id, result_pool);
if (err)
return svn_error_trace(
@@ -2210,7 +2705,7 @@ svn_wc__db_base_get_children_info(apr_hash_t **nodes,
svn_sqlite__reset(stmt)));
- apr_hash_set(*nodes, name, APR_HASH_KEY_STRING, info);
+ svn_hash_sets(*nodes, name, info);
SVN_ERR(svn_sqlite__step(&have_row, stmt));
}
@@ -2228,32 +2723,24 @@ svn_wc__db_base_get_props(apr_hash_t **props,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- svn_sqlite__stmt_t *stmt;
- svn_boolean_t have_row;
- svn_error_t *err;
+ svn_wc__db_status_t presence;
- SVN_ERR(get_statement_for_path(&stmt, db, local_abspath,
- STMT_SELECT_BASE_PROPS, scratch_pool));
- SVN_ERR(svn_sqlite__step(&have_row, stmt));
- if (!have_row)
+ SVN_ERR(svn_wc__db_base_get_info(&presence, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, props, NULL,
+ db, local_abspath,
+ result_pool, scratch_pool));
+ if (presence != svn_wc__db_status_normal
+ && presence != svn_wc__db_status_incomplete)
{
- err = svn_sqlite__reset(stmt);
- return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, err,
- _("The node '%s' was not found."),
+ return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
+ _("The node '%s' has a BASE status that"
+ " has no properties."),
svn_dirent_local_style(local_abspath,
scratch_pool));
}
- err = svn_sqlite__column_properties(props, stmt, 0, result_pool,
- scratch_pool);
- if (err == NULL && *props == NULL)
- {
- /* ### is this a DB constraint violation? the column "probably" should
- ### never be null. */
- *props = apr_hash_make(result_pool);
- }
-
- return svn_error_compose_create(err, svn_sqlite__reset(stmt));
+ return SVN_NO_ERROR;
}
@@ -2355,27 +2842,25 @@ svn_wc__db_base_clear_dav_cache_recursive(svn_wc__db_t *db,
}
-
-/* Like svn_wc__db_base_get_info(), but taking WCROOT+LOCAL_RELPATH instead of
- DB+LOCAL_ABSPATH and outputting REPOS_ID instead of URL+UUID. */
-static svn_error_t *
-depth_get_info(svn_wc__db_status_t *status,
- svn_wc__db_kind_t *kind,
- svn_revnum_t *revision,
- const char **repos_relpath,
- apr_int64_t *repos_id,
- svn_revnum_t *changed_rev,
- apr_time_t *changed_date,
- const char **changed_author,
- svn_depth_t *depth,
- const svn_checksum_t **checksum,
- const char **target,
- svn_boolean_t *had_props,
- svn_wc__db_wcroot_t *wcroot,
- const char *local_relpath,
- apr_int64_t op_depth,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+svn_error_t *
+svn_wc__db_depth_get_info(svn_wc__db_status_t *status,
+ svn_node_kind_t *kind,
+ svn_revnum_t *revision,
+ const char **repos_relpath,
+ apr_int64_t *repos_id,
+ svn_revnum_t *changed_rev,
+ apr_time_t *changed_date,
+ const char **changed_author,
+ svn_depth_t *depth,
+ const svn_checksum_t **checksum,
+ const char **target,
+ svn_boolean_t *had_props,
+ apr_hash_t **props,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ int op_depth,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
@@ -2383,14 +2868,15 @@ depth_get_info(svn_wc__db_status_t *status,
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_SELECT_DEPTH_NODE));
- SVN_ERR(svn_sqlite__bindf(stmt, "isi",
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd",
wcroot->wc_id, local_relpath, op_depth));
SVN_ERR(svn_sqlite__step(&have_row, stmt));
if (have_row)
{
- svn_wc__db_kind_t node_kind = svn_sqlite__column_token(stmt, 3,
- kind_map);
+ svn_wc__db_status_t node_status = svn_sqlite__column_token(stmt, 2,
+ presence_map);
+ svn_node_kind_t node_kind = svn_sqlite__column_token(stmt, 3, kind_map);
if (kind)
{
@@ -2398,13 +2884,13 @@ depth_get_info(svn_wc__db_status_t *status,
}
if (status)
{
- *status = svn_sqlite__column_token(stmt, 2, presence_map);
+ *status = node_status;
if (op_depth > 0)
SVN_ERR(convert_to_working_status(status, *status));
}
- err = repos_location_from_columns(repos_id, revision, repos_relpath,
- stmt, 0, 4, 1, result_pool);
+ repos_location_from_columns(repos_id, revision, repos_relpath,
+ stmt, 0, 4, 1, result_pool);
if (changed_rev)
{
@@ -2421,23 +2907,19 @@ depth_get_info(svn_wc__db_status_t *status,
}
if (depth)
{
- if (node_kind != svn_wc__db_kind_dir)
+ if (node_kind != svn_node_dir)
{
*depth = svn_depth_unknown;
}
else
{
- const char *depth_str = svn_sqlite__column_text(stmt, 10, NULL);
-
- if (depth_str == NULL)
- *depth = svn_depth_unknown;
- else
- *depth = svn_depth_from_word(depth_str);
+ *depth = svn_sqlite__column_token_null(stmt, 10, depth_map,
+ svn_depth_unknown);
}
}
if (checksum)
{
- if (node_kind != svn_wc__db_kind_file)
+ if (node_kind != svn_node_file)
{
*checksum = NULL;
}
@@ -2455,7 +2937,7 @@ depth_get_info(svn_wc__db_status_t *status,
}
if (target)
{
- if (node_kind != svn_wc__db_kind_symlink)
+ if (node_kind != svn_node_symlink)
*target = NULL;
else
*target = svn_sqlite__column_text(stmt, 11, result_pool);
@@ -2464,6 +2946,22 @@ depth_get_info(svn_wc__db_status_t *status,
{
*had_props = SQLITE_PROPERTIES_AVAILABLE(stmt, 13);
}
+ if (props)
+ {
+ if (node_status == svn_wc__db_status_normal
+ || node_status == svn_wc__db_status_incomplete)
+ {
+ SVN_ERR(svn_sqlite__column_properties(props, stmt, 13,
+ result_pool, scratch_pool));
+ if (*props == NULL)
+ *props = apr_hash_make(result_pool);
+ }
+ else
+ {
+ assert(svn_sqlite__column_is_null(stmt, 13));
+ *props = NULL;
+ }
+ }
}
else
{
@@ -2478,11 +2976,7 @@ depth_get_info(svn_wc__db_status_t *status,
}
-/* Helper for creating SQLite triggers, running the main transaction
- callback, and then dropping the triggers. It guarantees that the
- triggers will not survive the transaction. This could be used for
- any general prefix/postscript statements where the postscript
- *must* be executed if the transaction completes. */
+/* Baton for passing args to with_triggers(). */
struct with_triggers_baton_t {
int create_trigger;
int drop_trigger;
@@ -2490,7 +2984,13 @@ struct with_triggers_baton_t {
void *cb_baton;
};
-/* conforms to svn_wc__db_txn_callback_t */
+/* Helper for creating SQLite triggers, running the main transaction
+ callback, and then dropping the triggers. It guarantees that the
+ triggers will not survive the transaction. This could be used for
+ any general prefix/postscript statements where the postscript
+ *must* be executed if the transaction completes.
+
+ Implements svn_wc__db_txn_callback_t. */
static svn_error_t *
with_triggers(void *baton,
svn_wc__db_wcroot_t *wcroot,
@@ -2569,6 +3069,8 @@ with_finalization(svn_wc__db_wcroot_t *wcroot,
}
+/* Initialize the baton with appropriate "blank" values. This allows the
+ insertion function to leave certain columns null. */
static void
blank_ieb(insert_external_baton_t *ieb)
{
@@ -2581,13 +3083,15 @@ blank_ieb(insert_external_baton_t *ieb)
ieb->recorded_revision = SVN_INVALID_REVNUM;
}
+/* Insert the externals row represented by (insert_external_baton_t *) BATON.
+ *
+ * Implements svn_wc__db_txn_callback_t. */
static svn_error_t *
-insert_external_node(void *baton,
+insert_external_node(const insert_external_baton_t *ieb,
svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
apr_pool_t *scratch_pool)
{
- const insert_external_baton_t *ieb = baton;
svn_wc__db_status_t status;
svn_error_t *err;
svn_boolean_t update_root;
@@ -2601,9 +3105,11 @@ insert_external_node(void *baton,
wcroot->sdb, scratch_pool));
/* And there must be no existing BASE node or it must be a file external */
- err = base_get_info(&status, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, &update_root,
- wcroot, local_relpath, scratch_pool, scratch_pool);
+ err = svn_wc__db_base_get_info_internal(&status, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, &update_root,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool);
if (err)
{
if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND)
@@ -2614,8 +3120,8 @@ insert_external_node(void *baton,
else if (status == svn_wc__db_status_normal && !update_root)
return svn_error_create(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL, NULL);
- if (ieb->kind == svn_wc__db_kind_file
- || ieb->kind == svn_wc__db_kind_symlink)
+ if (ieb->kind == svn_node_file
+ || ieb->kind == svn_node_symlink)
{
struct insert_base_baton_t ibb;
@@ -2629,6 +3135,7 @@ insert_external_node(void *baton,
ibb.revision = ieb->revision;
ibb.props = ieb->props;
+ ibb.iprops = ieb->iprops;
ibb.changed_rev = ieb->changed_rev;
ibb.changed_date = ieb->changed_date;
ibb.changed_author = ieb->changed_author;
@@ -2693,6 +3200,7 @@ svn_wc__db_external_add_file(svn_wc__db_t *db,
svn_revnum_t revision,
const apr_hash_t *props,
+ apr_array_header_t *iprops,
svn_revnum_t changed_rev,
apr_time_t changed_date,
@@ -2711,6 +3219,7 @@ svn_wc__db_external_add_file(svn_wc__db_t *db,
apr_hash_t *new_actual_props,
svn_boolean_t keep_recorded_info,
+ const svn_skel_t *conflict,
const svn_skel_t *work_items,
apr_pool_t *scratch_pool)
{
@@ -2736,7 +3245,7 @@ svn_wc__db_external_add_file(svn_wc__db_t *db,
blank_ieb(&ieb);
- ieb.kind = svn_wc__db_kind_file;
+ ieb.kind = svn_node_file;
ieb.presence = svn_wc__db_status_normal;
ieb.repos_root_url = repos_root_url;
@@ -2746,6 +3255,7 @@ svn_wc__db_external_add_file(svn_wc__db_t *db,
ieb.revision = revision;
ieb.props = props;
+ ieb.iprops = iprops;
ieb.changed_rev = changed_rev;
ieb.changed_date = changed_date;
@@ -2767,11 +3277,14 @@ svn_wc__db_external_add_file(svn_wc__db_t *db,
ieb.keep_recorded_info = keep_recorded_info;
+ ieb.conflict = conflict;
ieb.work_items = work_items;
- return svn_error_trace(
- svn_wc__db_with_txn(wcroot, local_relpath, insert_external_node,
- &ieb, scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ insert_external_node(&ieb, wcroot, local_relpath, scratch_pool),
+ wcroot);
+
+ return SVN_NO_ERROR;
}
svn_error_t *
@@ -2820,7 +3333,7 @@ svn_wc__db_external_add_symlink(svn_wc__db_t *db,
blank_ieb(&ieb);
- ieb.kind = svn_wc__db_kind_symlink;
+ ieb.kind = svn_node_symlink;
ieb.presence = svn_wc__db_status_normal;
ieb.repos_root_url = repos_root_url;
@@ -2853,9 +3366,11 @@ svn_wc__db_external_add_symlink(svn_wc__db_t *db,
ieb.work_items = work_items;
- return svn_error_trace(
- svn_wc__db_with_txn(wcroot, local_relpath, insert_external_node,
- &ieb, scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ insert_external_node(&ieb, wcroot, local_relpath, scratch_pool),
+ wcroot);
+
+ return SVN_NO_ERROR;
}
svn_error_t *
@@ -2893,7 +3408,7 @@ svn_wc__db_external_add_dir(svn_wc__db_t *db,
blank_ieb(&ieb);
- ieb.kind = svn_wc__db_kind_dir;
+ ieb.kind = svn_node_dir;
ieb.presence = svn_wc__db_status_normal;
ieb.repos_root_url = repos_root_url;
@@ -2908,30 +3423,28 @@ svn_wc__db_external_add_dir(svn_wc__db_t *db,
ieb.work_items = work_items;
- return svn_error_trace(
- svn_wc__db_with_txn(wcroot, local_relpath, insert_external_node,
- &ieb, scratch_pool));
-}
+ SVN_WC__DB_WITH_TXN(
+ insert_external_node(&ieb, wcroot, local_relpath, scratch_pool),
+ wcroot);
-/* Baton for db_external_remove */
-struct external_remove_baton
-{
- const svn_skel_t *work_items;
-};
+ return SVN_NO_ERROR;
+}
+/* The body of svn_wc__db_external_remove(). */
static svn_error_t *
-db_external_remove(void *baton, svn_wc__db_wcroot_t *wcroot,
- const char *local_relpath, apr_pool_t *scratch_pool)
+db_external_remove(const svn_skel_t *work_items,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *scratch_pool)
{
svn_sqlite__stmt_t *stmt;
- struct external_remove_baton *rb = baton;
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_DELETE_EXTERNAL));
SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
SVN_ERR(svn_sqlite__step_done(stmt));
- SVN_ERR(add_work_items(wcroot->sdb, rb->work_items, scratch_pool));
+ SVN_ERR(add_work_items(wcroot->sdb, work_items, scratch_pool));
/* ### What about actual? */
return SVN_NO_ERROR;
@@ -2946,7 +3459,6 @@ svn_wc__db_external_remove(svn_wc__db_t *db,
{
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
- struct external_remove_baton rb;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
@@ -2961,16 +3473,16 @@ svn_wc__db_external_remove(svn_wc__db_t *db,
local_relpath = svn_dirent_skip_ancestor(wcroot->abspath, local_abspath);
- rb.work_items = work_items;
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, db_external_remove,
- &rb, scratch_pool));
+ SVN_WC__DB_WITH_TXN(db_external_remove(work_items, wcroot, local_relpath,
+ scratch_pool),
+ wcroot);
return SVN_NO_ERROR;
}
svn_error_t *
svn_wc__db_external_read(svn_wc__db_status_t *status,
- svn_wc__db_kind_t *kind,
+ svn_node_kind_t *kind,
const char **definining_abspath,
const char **repos_root_url,
const char **repos_uuid,
@@ -3030,8 +3542,9 @@ svn_wc__db_external_read(svn_wc__db_status_t *status,
err = svn_error_compose_create(
err,
- fetch_repos_info(repos_root_url, repos_uuid,
- wcroot->sdb, repos_id, result_pool));
+ svn_wc__db_fetch_repos_info(repos_root_url, repos_uuid,
+ wcroot->sdb, repos_id,
+ result_pool));
}
if (recorded_repos_relpath)
@@ -3057,6 +3570,66 @@ svn_wc__db_external_read(svn_wc__db_status_t *status,
}
svn_error_t *
+svn_wc__db_committable_externals_below(apr_array_header_t **externals,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_boolean_t immediates_only,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_wcroot_t *wcroot;
+ svn_sqlite__stmt_t *stmt;
+ const char *local_relpath;
+ svn_boolean_t have_row;
+ svn_wc__committable_external_info_t *info;
+ svn_node_kind_t db_kind;
+ apr_array_header_t *result = NULL;
+
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
+ local_abspath, scratch_pool, scratch_pool));
+ VERIFY_USABLE_WCROOT(wcroot);
+
+ SVN_ERR(svn_sqlite__get_statement(
+ &stmt, wcroot->sdb,
+ immediates_only
+ ? STMT_SELECT_COMMITTABLE_EXTERNALS_IMMEDIATELY_BELOW
+ : STMT_SELECT_COMMITTABLE_EXTERNALS_BELOW));
+
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+
+ if (have_row)
+ result = apr_array_make(result_pool, 0,
+ sizeof(svn_wc__committable_external_info_t *));
+
+ while (have_row)
+ {
+ info = apr_palloc(result_pool, sizeof(*info));
+
+ local_relpath = svn_sqlite__column_text(stmt, 0, NULL);
+ info->local_abspath = svn_dirent_join(wcroot->abspath, local_relpath,
+ result_pool);
+
+ db_kind = svn_sqlite__column_token(stmt, 1, kind_map);
+ SVN_ERR_ASSERT(db_kind == svn_node_file || db_kind == svn_node_dir);
+ info->kind = db_kind;
+
+ info->repos_relpath = svn_sqlite__column_text(stmt, 2, result_pool);
+ info->repos_root_url = svn_sqlite__column_text(stmt, 3, result_pool);
+
+ APR_ARRAY_PUSH(result, svn_wc__committable_external_info_t *) = info;
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ }
+
+ *externals = result;
+ return svn_error_trace(svn_sqlite__reset(stmt));
+}
+
+svn_error_t *
svn_wc__db_externals_defined_below(apr_hash_t **externals,
svn_wc__db_t *db,
const char *local_abspath,
@@ -3089,12 +3662,11 @@ svn_wc__db_externals_defined_below(apr_hash_t **externals,
local_relpath = svn_sqlite__column_text(stmt, 0, NULL);
def_local_relpath = svn_sqlite__column_text(stmt, 1, NULL);
- apr_hash_set(*externals,
- svn_dirent_join(wcroot->abspath, local_relpath,
- result_pool),
- APR_HASH_KEY_STRING,
- svn_dirent_join(wcroot->abspath, def_local_relpath,
- result_pool));
+ svn_hash_sets(*externals,
+ svn_dirent_join(wcroot->abspath, local_relpath,
+ result_pool),
+ svn_dirent_join(wcroot->abspath, def_local_relpath,
+ result_pool));
SVN_ERR(svn_sqlite__step(&have_row, stmt));
}
@@ -3156,20 +3728,18 @@ svn_wc__db_externals_gather_definitions(apr_hash_t **externals,
node_abspath = svn_dirent_join(wcroot->abspath, node_relpath,
result_pool);
- apr_hash_set(*externals, node_abspath, APR_HASH_KEY_STRING,
- apr_pstrdup(result_pool, external_value));
+ svn_hash_sets(*externals, node_abspath,
+ apr_pstrdup(result_pool, external_value));
if (depths)
{
- const char *depth_word = svn_sqlite__column_text(stmt, 2, NULL);
- svn_depth_t depth = svn_depth_unknown;
-
- if (depth_word)
- depth = svn_depth_from_word(depth_word);
+ svn_depth_t depth
+ = svn_sqlite__column_token_null(stmt, 2, depth_map,
+ svn_depth_unknown);
- apr_hash_set(*depths, node_abspath,
- APR_HASH_KEY_STRING,
- svn_depth_to_word(depth)); /* Use static string */
+ svn_hash_sets(*depths, node_abspath,
+ /* Use static string */
+ svn_token__to_word(depth_map, depth));
}
}
@@ -3205,9 +3775,9 @@ copy_actual(svn_wc__db_wcroot_t *src_wcroot,
const char *properties;
/* Skipping conflict data... */
- changelist = svn_sqlite__column_text(stmt, 1, scratch_pool);
+ changelist = svn_sqlite__column_text(stmt, 0, scratch_pool);
/* No need to parse the properties when simply copying. */
- properties = svn_sqlite__column_blob(stmt, 6, &props_size, scratch_pool);
+ properties = svn_sqlite__column_blob(stmt, 1, &props_size, scratch_pool);
if (changelist || properties)
{
@@ -3215,11 +3785,10 @@ copy_actual(svn_wc__db_wcroot_t *src_wcroot,
SVN_ERR(svn_sqlite__get_statement(&stmt, dst_wcroot->sdb,
STMT_INSERT_ACTUAL_NODE));
- SVN_ERR(svn_sqlite__bindf(stmt, "issbssssss",
+ SVN_ERR(svn_sqlite__bindf(stmt, "issbs",
dst_wcroot->wc_id, dst_relpath,
svn_relpath_dirname(dst_relpath, scratch_pool),
- properties, props_size, NULL, NULL, NULL,
- NULL, changelist, NULL));
+ properties, props_size, changelist));
SVN_ERR(svn_sqlite__step(&have_row, stmt));
}
}
@@ -3236,9 +3805,9 @@ cross_db_copy(svn_wc__db_wcroot_t *src_wcroot,
svn_wc__db_wcroot_t *dst_wcroot,
const char *dst_relpath,
svn_wc__db_status_t dst_status,
- apr_int64_t dst_op_depth,
- apr_int64_t dst_np_op_depth,
- svn_wc__db_kind_t kind,
+ int dst_op_depth,
+ int dst_np_op_depth,
+ svn_node_kind_t kind,
const apr_array_header_t *children,
apr_int64_t copyfrom_id,
const char *copyfrom_relpath,
@@ -3253,8 +3822,8 @@ cross_db_copy(svn_wc__db_wcroot_t *src_wcroot,
apr_hash_t *props;
svn_depth_t depth;
- SVN_ERR_ASSERT(kind == svn_wc__db_kind_file
- || kind == svn_wc__db_kind_dir
+ SVN_ERR_ASSERT(kind == svn_node_file
+ || kind == svn_node_dir
);
SVN_ERR(read_info(NULL, NULL, NULL, NULL, NULL,
@@ -3263,8 +3832,15 @@ cross_db_copy(svn_wc__db_wcroot_t *src_wcroot,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
src_wcroot, src_relpath, scratch_pool, scratch_pool));
- SVN_ERR(db_read_pristine_props(&props, src_wcroot, src_relpath,
- scratch_pool, scratch_pool));
+ if (dst_status != svn_wc__db_status_not_present
+ && dst_status != svn_wc__db_status_excluded
+ && dst_status != svn_wc__db_status_server_excluded)
+ {
+ SVN_ERR(db_read_pristine_props(&props, src_wcroot, src_relpath, FALSE,
+ scratch_pool, scratch_pool));
+ }
+ else
+ props = NULL;
blank_iwb(&iwb);
iwb.presence = dst_status;
@@ -3295,6 +3871,273 @@ cross_db_copy(svn_wc__db_wcroot_t *src_wcroot,
return SVN_NO_ERROR;
}
+/* Helper for scan_deletion_txn. Extracts the moved-to information, if
+ any, from STMT. Sets *SCAN to FALSE if moved-to was available. */
+static svn_error_t *
+get_moved_to(const char **moved_to_relpath_p,
+ const char **moved_to_op_root_relpath_p,
+ svn_boolean_t *scan,
+ svn_sqlite__stmt_t *stmt,
+ const char *current_relpath,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ const char *moved_to_relpath = svn_sqlite__column_text(stmt, 3, NULL);
+
+ if (moved_to_relpath)
+ {
+ const char *moved_to_op_root_relpath = moved_to_relpath;
+
+ if (strcmp(current_relpath, local_relpath))
+ {
+ /* LOCAL_RELPATH is a child inside the move op-root. */
+ const char *moved_child_relpath;
+
+ /* The CURRENT_RELPATH is the op_root of the delete-half of
+ * the move. LOCAL_RELPATH is a child that was moved along.
+ * Compute the child's new location within the move target. */
+ moved_child_relpath = svn_relpath_skip_ancestor(current_relpath,
+ local_relpath);
+ SVN_ERR_ASSERT(moved_child_relpath &&
+ strlen(moved_child_relpath) > 0);
+ moved_to_relpath = svn_relpath_join(moved_to_op_root_relpath,
+ moved_child_relpath,
+ result_pool);
+ }
+
+ if (moved_to_op_root_relpath && moved_to_op_root_relpath_p)
+ *moved_to_op_root_relpath_p
+ = apr_pstrdup(result_pool, moved_to_op_root_relpath);
+
+ if (moved_to_relpath && moved_to_relpath_p)
+ *moved_to_relpath_p
+ = apr_pstrdup(result_pool, moved_to_relpath);
+
+ *scan = FALSE;
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
+/* The body of svn_wc__db_scan_deletion().
+ */
+static svn_error_t *
+scan_deletion_txn(const char **base_del_relpath,
+ const char **moved_to_relpath,
+ const char **work_del_relpath,
+ const char **moved_to_op_root_relpath,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ const char *current_relpath = local_relpath;
+ svn_sqlite__stmt_t *stmt;
+ svn_wc__db_status_t work_presence;
+ svn_boolean_t have_row, scan, have_base;
+ int op_depth;
+
+ /* Initialize all the OUT parameters. */
+ if (base_del_relpath != NULL)
+ *base_del_relpath = NULL;
+ if (moved_to_relpath != NULL)
+ *moved_to_relpath = NULL;
+ if (work_del_relpath != NULL)
+ *work_del_relpath = NULL;
+ if (moved_to_op_root_relpath != NULL)
+ *moved_to_op_root_relpath = NULL;
+
+ /* If looking for moved-to info then we need to scan every path
+ until we find it. If not looking for moved-to we only need to
+ check op-roots and parents of op-roots. */
+ scan = (moved_to_op_root_relpath || moved_to_relpath);
+
+ SVN_ERR(svn_sqlite__get_statement(
+ &stmt, wcroot->sdb,
+ scan ? STMT_SELECT_DELETION_INFO_SCAN
+ : STMT_SELECT_DELETION_INFO));
+
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, current_relpath));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ if (!have_row)
+ return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, svn_sqlite__reset(stmt),
+ _("The node '%s' was not found."),
+ path_for_error_message(wcroot, local_relpath,
+ scratch_pool));
+
+ work_presence = svn_sqlite__column_token(stmt, 1, presence_map);
+ have_base = !svn_sqlite__column_is_null(stmt, 0);
+ if (work_presence != svn_wc__db_status_not_present
+ && work_presence != svn_wc__db_status_base_deleted)
+ return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS,
+ svn_sqlite__reset(stmt),
+ _("Expected node '%s' to be deleted."),
+ path_for_error_message(wcroot, local_relpath,
+ scratch_pool));
+
+ op_depth = svn_sqlite__column_int(stmt, 2);
+
+ /* Special case: LOCAL_RELPATH not-present within a WORKING tree, we
+ treat this as an op-root. At commit time we need to explicitly
+ delete such nodes otherwise they will be present in the
+ repository copy. */
+ if (work_presence == svn_wc__db_status_not_present
+ && work_del_relpath && !*work_del_relpath)
+ {
+ *work_del_relpath = apr_pstrdup(result_pool, current_relpath);
+
+ if (!scan && !base_del_relpath)
+ {
+ /* We have all we need, exit early */
+ SVN_ERR(svn_sqlite__reset(stmt));
+ return SVN_NO_ERROR;
+ }
+ }
+
+
+ while (TRUE)
+ {
+ svn_error_t *err;
+ const char *parent_relpath;
+ int current_depth = relpath_depth(current_relpath);
+
+ /* Step CURRENT_RELPATH to op-root */
+
+ while (TRUE)
+ {
+ if (scan)
+ {
+ err = get_moved_to(moved_to_relpath, moved_to_op_root_relpath,
+ &scan, stmt, current_relpath,
+ wcroot, local_relpath,
+ result_pool, scratch_pool);
+ if (err || (!scan
+ && !base_del_relpath
+ && !work_del_relpath))
+ {
+ /* We have all we need (or an error occurred) */
+ SVN_ERR(svn_sqlite__reset(stmt));
+ return svn_error_trace(err);
+ }
+ }
+
+ if (current_depth <= op_depth)
+ break;
+
+ current_relpath = svn_relpath_dirname(current_relpath, scratch_pool);
+ --current_depth;
+
+ if (scan || current_depth == op_depth)
+ {
+ SVN_ERR(svn_sqlite__reset(stmt));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id,
+ current_relpath));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ SVN_ERR_ASSERT(have_row);
+ have_base = !svn_sqlite__column_is_null(stmt, 0);
+ }
+ }
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ /* Now CURRENT_RELPATH is an op-root, have a look at the parent. */
+
+ SVN_ERR_ASSERT(current_relpath[0] != '\0'); /* Catch invalid data */
+ parent_relpath = svn_relpath_dirname(current_relpath, scratch_pool);
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, parent_relpath));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ if (!have_row)
+ {
+ /* No row means no WORKING node which mean we just fell off
+ the WORKING tree, so CURRENT_RELPATH is the op-root
+ closest to the wc root. */
+ if (have_base && base_del_relpath)
+ *base_del_relpath = apr_pstrdup(result_pool, current_relpath);
+ break;
+ }
+
+ /* Still in the WORKING tree so the first time we get here
+ CURRENT_RELPATH is a delete op-root in the WORKING tree. */
+ if (work_del_relpath && !*work_del_relpath)
+ {
+ *work_del_relpath = apr_pstrdup(result_pool, current_relpath);
+
+ if (!scan && !base_del_relpath)
+ break; /* We have all we need */
+ }
+
+ current_relpath = parent_relpath;
+ op_depth = svn_sqlite__column_int(stmt, 2);
+ have_base = !svn_sqlite__column_is_null(stmt, 0);
+ }
+
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__db_scan_deletion(const char **base_del_abspath,
+ const char **moved_to_abspath,
+ const char **work_del_abspath,
+ const char **moved_to_op_root_abspath,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_wcroot_t *wcroot;
+ const char *local_relpath;
+ const char *base_del_relpath, *moved_to_relpath, *work_del_relpath;
+ const char *moved_to_op_root_relpath;
+
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
+ local_abspath, scratch_pool, scratch_pool));
+ VERIFY_USABLE_WCROOT(wcroot);
+
+ SVN_WC__DB_WITH_TXN(
+ scan_deletion_txn(&base_del_relpath, &moved_to_relpath,
+ &work_del_relpath, &moved_to_op_root_relpath,
+ wcroot, local_relpath, result_pool, scratch_pool),
+ wcroot);
+
+ if (base_del_abspath)
+ {
+ *base_del_abspath = (base_del_relpath
+ ? svn_dirent_join(wcroot->abspath,
+ base_del_relpath, result_pool)
+ : NULL);
+ }
+ if (moved_to_abspath)
+ {
+ *moved_to_abspath = (moved_to_relpath
+ ? svn_dirent_join(wcroot->abspath,
+ moved_to_relpath, result_pool)
+ : NULL);
+ }
+ if (work_del_abspath)
+ {
+ *work_del_abspath = (work_del_relpath
+ ? svn_dirent_join(wcroot->abspath,
+ work_del_relpath, result_pool)
+ : NULL);
+ }
+ if (moved_to_op_root_abspath)
+ {
+ *moved_to_op_root_abspath = (moved_to_op_root_relpath
+ ? svn_dirent_join(wcroot->abspath,
+ moved_to_op_root_relpath,
+ result_pool)
+ : NULL);
+ }
+
+ return SVN_NO_ERROR;
+}
+
/* Set *COPYFROM_ID, *COPYFROM_RELPATH, *COPYFROM_REV to the values
appropriate for the copy. Also return *STATUS, *KIND and *HAVE_WORK, *OP_ROOT
@@ -3305,71 +4148,62 @@ get_info_for_copy(apr_int64_t *copyfrom_id,
const char **copyfrom_relpath,
svn_revnum_t *copyfrom_rev,
svn_wc__db_status_t *status,
- svn_wc__db_kind_t *kind,
+ svn_node_kind_t *kind,
svn_boolean_t *op_root,
- svn_boolean_t *have_work,
- svn_wc__db_wcroot_t *wcroot,
+ svn_wc__db_wcroot_t *src_wcroot,
const char *local_relpath,
+ svn_wc__db_wcroot_t *dst_wcroot,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
const char *repos_relpath;
svn_revnum_t revision;
+ svn_wc__db_status_t node_status;
+ apr_int64_t repos_id;
+ svn_boolean_t is_op_root;
- SVN_ERR(read_info(status, kind, &revision, &repos_relpath, copyfrom_id,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, op_root, NULL, NULL,
+ SVN_ERR(read_info(&node_status, kind, &revision, &repos_relpath, &repos_id,
+ NULL, NULL, NULL, NULL, NULL, NULL, copyfrom_relpath,
+ copyfrom_id, copyfrom_rev, NULL, NULL, NULL, NULL,
+ NULL, &is_op_root, NULL, NULL,
NULL /* have_base */,
NULL /* have_more_work */,
- have_work,
- wcroot, local_relpath, result_pool, scratch_pool));
+ NULL /* have_work */,
+ src_wcroot, local_relpath, result_pool, scratch_pool));
+
+ if (op_root)
+ *op_root = is_op_root;
- if (*status == svn_wc__db_status_excluded)
+ if (node_status == svn_wc__db_status_excluded)
{
/* The parent cannot be excluded, so look at the parent and then
adjust the relpath */
const char *parent_relpath, *base_name;
- svn_wc__db_status_t parent_status;
- svn_wc__db_kind_t parent_kind;
- svn_boolean_t parent_have_work;
svn_dirent_split(&parent_relpath, &base_name, local_relpath,
scratch_pool);
SVN_ERR(get_info_for_copy(copyfrom_id, copyfrom_relpath, copyfrom_rev,
- &parent_status,
- &parent_kind,
- NULL, &parent_have_work,
- wcroot, parent_relpath,
+ NULL, NULL, NULL,
+ src_wcroot, parent_relpath, dst_wcroot,
scratch_pool, scratch_pool));
if (*copyfrom_relpath)
*copyfrom_relpath = svn_relpath_join(*copyfrom_relpath, base_name,
result_pool);
}
- else if (*status == svn_wc__db_status_added)
+ else if (node_status == svn_wc__db_status_added)
{
- const char *op_root_relpath;
-
- SVN_ERR(scan_addition(NULL, &op_root_relpath,
- NULL, NULL, /* repos_* */
- copyfrom_relpath, copyfrom_id, copyfrom_rev,
- wcroot, local_relpath,
+ SVN_ERR(scan_addition(&node_status, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, src_wcroot, local_relpath,
scratch_pool, scratch_pool));
- if (*copyfrom_relpath)
- {
- *copyfrom_relpath
- = svn_relpath_join(*copyfrom_relpath,
- svn_relpath_skip_ancestor(op_root_relpath,
- local_relpath),
- result_pool);
- }
}
- else if (*status == svn_wc__db_status_deleted)
+ else if (node_status == svn_wc__db_status_deleted && is_op_root)
{
const char *base_del_relpath, *work_del_relpath;
- SVN_ERR(scan_deletion(&base_del_relpath, NULL, &work_del_relpath,
- wcroot, local_relpath, scratch_pool,
- scratch_pool));
+ SVN_ERR(scan_deletion_txn(&base_del_relpath, NULL,
+ &work_del_relpath,
+ NULL, src_wcroot, local_relpath,
+ scratch_pool, scratch_pool));
if (work_del_relpath)
{
const char *op_root_relpath;
@@ -3381,7 +4215,8 @@ get_info_for_copy(apr_int64_t *copyfrom_id,
SVN_ERR(scan_addition(NULL, &op_root_relpath,
NULL, NULL, /* repos_* */
copyfrom_relpath, copyfrom_id, copyfrom_rev,
- wcroot, parent_del_relpath,
+ NULL, NULL, NULL,
+ src_wcroot, parent_del_relpath,
scratch_pool, scratch_pool));
*copyfrom_relpath
= svn_relpath_join(*copyfrom_relpath,
@@ -3391,54 +4226,195 @@ get_info_for_copy(apr_int64_t *copyfrom_id,
}
else if (base_del_relpath)
{
- SVN_ERR(base_get_info(NULL, NULL, copyfrom_rev, copyfrom_relpath,
- copyfrom_id,
- NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- wcroot, local_relpath,
- result_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_base_get_info_internal(NULL, NULL, copyfrom_rev,
+ copyfrom_relpath,
+ copyfrom_id, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ src_wcroot, local_relpath,
+ result_pool,
+ scratch_pool));
}
else
SVN_ERR_MALFUNCTION();
}
+ else if (node_status == svn_wc__db_status_deleted)
+ {
+ /* Keep original_* from read_info() to allow seeing the difference
+ between base-deleted and not present */
+ }
else
{
*copyfrom_relpath = repos_relpath;
*copyfrom_rev = revision;
+ *copyfrom_id = repos_id;
+ }
+
+ if (status)
+ *status = node_status;
+
+ if (src_wcroot != dst_wcroot && *copyfrom_relpath)
+ {
+ const char *repos_root_url;
+ const char *repos_uuid;
+
+ /* Pass the right repos-id for the destination db. We can't just use
+ the id of the source database, as this value can change after
+ relocation (and perhaps also when we start storing multiple
+ working copies in a single db)! */
+
+ SVN_ERR(svn_wc__db_fetch_repos_info(&repos_root_url, &repos_uuid,
+ src_wcroot->sdb, *copyfrom_id,
+ scratch_pool));
+
+ SVN_ERR(create_repos_id(copyfrom_id, repos_root_url, repos_uuid,
+ dst_wcroot->sdb, scratch_pool));
}
return SVN_NO_ERROR;
}
-/* Forward declarations for db_op_copy() to use.
-
- ### these are just to avoid churn. a future commit should shuffle the
- ### functions around. */
+/* Set *OP_DEPTH to the highest op depth of WCROOT:LOCAL_RELPATH. */
static svn_error_t *
-op_depth_of(apr_int64_t *op_depth,
+op_depth_of(int *op_depth,
svn_wc__db_wcroot_t *wcroot,
- const char *local_relpath);
+ const char *local_relpath)
+{
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_NODE_INFO));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ SVN_ERR_ASSERT(have_row);
+ *op_depth = svn_sqlite__column_int(stmt, 0);
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ return SVN_NO_ERROR;
+}
+
+/* Determine at which OP_DEPTH a copy of COPYFROM_REPOS_ID, COPYFROM_RELPATH at
+ revision COPYFROM_REVISION should be inserted as LOCAL_RELPATH. Do this
+ by checking if this would be a direct child of a copy of its parent
+ directory. If it is then set *OP_DEPTH to the op_depth of its parent.
+
+ If the node is not a direct copy at the same revision of the parent
+ *NP_OP_DEPTH will be set to the op_depth of the parent when a not-present
+ node should be inserted at this op_depth. This will be the case when the
+ parent already defined an incomplete child with the same name. Otherwise
+ *NP_OP_DEPTH will be set to -1.
+
+ If the parent node is not the parent of the to be copied node, then
+ *OP_DEPTH will be set to the proper op_depth for a new operation root.
+
+ Set *PARENT_OP_DEPTH to the op_depth of the parent.
+
+ */
static svn_error_t *
-op_depth_for_copy(apr_int64_t *op_depth,
- apr_int64_t *np_op_depth,
+op_depth_for_copy(int *op_depth,
+ int *np_op_depth,
+ int *parent_op_depth,
apr_int64_t copyfrom_repos_id,
const char *copyfrom_relpath,
svn_revnum_t copyfrom_revision,
svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
- apr_pool_t *scratch_pool);
+ apr_pool_t *scratch_pool)
+{
+ const char *parent_relpath, *name;
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+ int incomplete_op_depth = -1;
+ int min_op_depth = 1; /* Never touch BASE */
+
+ *op_depth = relpath_depth(local_relpath);
+ *np_op_depth = -1;
+
+ svn_relpath_split(&parent_relpath, &name, local_relpath, scratch_pool);
+ *parent_op_depth = relpath_depth(parent_relpath);
+
+ if (!copyfrom_relpath)
+ return SVN_NO_ERROR;
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_WORKING_NODE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ if (have_row)
+ {
+ svn_wc__db_status_t status = svn_sqlite__column_token(stmt, 1,
+ presence_map);
+
+ min_op_depth = svn_sqlite__column_int(stmt, 0);
+ if (status == svn_wc__db_status_incomplete)
+ incomplete_op_depth = min_op_depth;
+ }
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_WORKING_NODE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, parent_relpath));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ if (have_row)
+ {
+ svn_wc__db_status_t presence = svn_sqlite__column_token(stmt, 1,
+ presence_map);
+
+ *parent_op_depth = svn_sqlite__column_int(stmt, 0);
+ if (*parent_op_depth < min_op_depth)
+ {
+ /* We want to create a copy; not overwrite the lower layers */
+ SVN_ERR(svn_sqlite__reset(stmt));
+ return SVN_NO_ERROR;
+ }
+ /* You can only add children below a node that exists.
+ In WORKING that must be status added, which is represented
+ as presence normal */
+ SVN_ERR_ASSERT(presence == svn_wc__db_status_normal);
-/* Like svn_wc__db_op_copy(), but with WCROOT+LOCAL_RELPATH instead of
- DB+LOCAL_ABSPATH. */
+ if ((incomplete_op_depth < 0)
+ || (incomplete_op_depth == *parent_op_depth))
+ {
+ apr_int64_t parent_copyfrom_repos_id
+ = svn_sqlite__column_int64(stmt, 10);
+ const char *parent_copyfrom_relpath
+ = svn_sqlite__column_text(stmt, 11, NULL);
+ svn_revnum_t parent_copyfrom_revision
+ = svn_sqlite__column_revnum(stmt, 12);
+
+ if (parent_copyfrom_repos_id == copyfrom_repos_id)
+ {
+ if (copyfrom_revision == parent_copyfrom_revision
+ && !strcmp(copyfrom_relpath,
+ svn_relpath_join(parent_copyfrom_relpath, name,
+ scratch_pool)))
+ *op_depth = *parent_op_depth;
+ else if (incomplete_op_depth > 0)
+ *np_op_depth = incomplete_op_depth;
+ }
+ }
+ }
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ return SVN_NO_ERROR;
+}
+
+
+/* Like svn_wc__db_op_copy(), but with WCROOT+LOCAL_RELPATH
+ * instead of DB+LOCAL_ABSPATH. A non-zero MOVE_OP_DEPTH implies that the
+ * copy operation is part of a move, and indicates the op-depth of the
+ * move destination op-root. */
static svn_error_t *
db_op_copy(svn_wc__db_wcroot_t *src_wcroot,
const char *src_relpath,
svn_wc__db_wcroot_t *dst_wcroot,
const char *dst_relpath,
const svn_skel_t *work_items,
+ int move_op_depth,
apr_pool_t *scratch_pool)
{
const char *copyfrom_relpath;
@@ -3446,22 +4422,24 @@ db_op_copy(svn_wc__db_wcroot_t *src_wcroot,
svn_wc__db_status_t status;
svn_wc__db_status_t dst_presence;
svn_boolean_t op_root;
- svn_boolean_t have_work;
apr_int64_t copyfrom_id;
- apr_int64_t dst_op_depth;
- apr_int64_t dst_np_op_depth;
- svn_wc__db_kind_t kind;
+ int dst_op_depth;
+ int dst_np_op_depth;
+ int dst_parent_op_depth;
+ svn_node_kind_t kind;
const apr_array_header_t *children;
SVN_ERR(get_info_for_copy(&copyfrom_id, &copyfrom_relpath, &copyfrom_rev,
- &status, &kind, &op_root, &have_work, src_wcroot,
- src_relpath, scratch_pool, scratch_pool));
+ &status, &kind, &op_root,
+ src_wcroot, src_relpath, dst_wcroot,
+ scratch_pool, scratch_pool));
- SVN_ERR(op_depth_for_copy(&dst_op_depth, &dst_np_op_depth, copyfrom_id,
- copyfrom_relpath, copyfrom_rev,
+ SVN_ERR(op_depth_for_copy(&dst_op_depth, &dst_np_op_depth,
+ &dst_parent_op_depth,
+ copyfrom_id, copyfrom_relpath, copyfrom_rev,
dst_wcroot, dst_relpath, scratch_pool));
- SVN_ERR_ASSERT(kind == svn_wc__db_kind_file || kind == svn_wc__db_kind_dir);
+ SVN_ERR_ASSERT(kind == svn_node_file || kind == svn_node_dir);
/* ### New status, not finished, see notes/wc-ng/copying */
switch (status)
@@ -3501,7 +4479,24 @@ db_op_copy(svn_wc__db_wcroot_t *src_wcroot,
return SVN_NO_ERROR;
}
}
- /* else: fall through */
+ else
+ {
+ /* This node is either a not-present node (which should be copied), or
+ a base-delete of some lower layer (which shouldn't).
+ Subversion <= 1.7 always added a not-present node here, which is
+ safe (as it postpones the hard work until commit time and then we
+ ask the repository), but it breaks some move scenarios.
+ */
+
+ if (! copyfrom_relpath)
+ {
+ SVN_ERR(add_work_items(dst_wcroot->sdb, work_items,
+ scratch_pool));
+ return SVN_NO_ERROR;
+ }
+
+ /* Fall through. Install not present node */
+ }
case svn_wc__db_status_not_present:
case svn_wc__db_status_excluded:
/* These presence values should not create a new op depth */
@@ -3522,6 +4517,9 @@ db_op_copy(svn_wc__db_wcroot_t *src_wcroot,
src_relpath,
scratch_pool));
default:
+ /* Perhaps we should allow incomplete to incomplete? We can't
+ avoid incomplete working nodes as one step in copying a
+ directory is to add incomplete children. */
return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
_("Cannot handle status of '%s'"),
path_for_error_message(src_wcroot,
@@ -3529,9 +4527,9 @@ db_op_copy(svn_wc__db_wcroot_t *src_wcroot,
scratch_pool));
}
- if (kind == svn_wc__db_kind_dir)
+ if (kind == svn_node_dir)
{
- apr_int64_t src_op_depth;
+ int src_op_depth;
SVN_ERR(op_depth_of(&src_op_depth, src_wcroot, src_relpath));
SVN_ERR(gather_repo_children(&children, src_wcroot, src_relpath,
@@ -3546,20 +4544,73 @@ db_op_copy(svn_wc__db_wcroot_t *src_wcroot,
const char *dst_parent_relpath = svn_relpath_dirname(dst_relpath,
scratch_pool);
- if (have_work)
- SVN_ERR(svn_sqlite__get_statement(&stmt, src_wcroot->sdb,
- STMT_INSERT_WORKING_NODE_COPY_FROM_WORKING));
- else
- SVN_ERR(svn_sqlite__get_statement(&stmt, src_wcroot->sdb,
- STMT_INSERT_WORKING_NODE_COPY_FROM_BASE));
+ SVN_ERR(svn_sqlite__get_statement(&stmt, src_wcroot->sdb,
+ STMT_INSERT_WORKING_NODE_COPY_FROM));
- SVN_ERR(svn_sqlite__bindf(stmt, "issist",
+ SVN_ERR(svn_sqlite__bindf(stmt, "issdst",
src_wcroot->wc_id, src_relpath,
dst_relpath,
dst_op_depth,
dst_parent_relpath,
presence_map, dst_presence));
+ if (move_op_depth > 0)
+ {
+ if (relpath_depth(dst_relpath) == move_op_depth)
+ {
+ /* We're moving the root of the move operation.
+ *
+ * When an added node or the op-root of a copy is moved,
+ * there is no 'moved-from' corresponding to the moved-here
+ * node. So the net effect is the same as copy+delete.
+ * Perform a normal copy operation in these cases. */
+ if (!(status == svn_wc__db_status_added ||
+ (status == svn_wc__db_status_copied && op_root)))
+ SVN_ERR(svn_sqlite__bind_int(stmt, 7, 1));
+ }
+ else
+ {
+ svn_sqlite__stmt_t *info_stmt;
+ svn_boolean_t have_row;
+
+ /* We're moving a child along with the root of the move.
+ *
+ * Set moved-here depending on dst_parent, propagating the
+ * above decision to moved-along children at the same op_depth.
+ * We can't use scan_addition() to detect moved-here because
+ * the delete-half of the move might not yet exist. */
+ SVN_ERR(svn_sqlite__get_statement(&info_stmt, dst_wcroot->sdb,
+ STMT_SELECT_NODE_INFO));
+ SVN_ERR(svn_sqlite__bindf(info_stmt, "is", dst_wcroot->wc_id,
+ dst_parent_relpath));
+ SVN_ERR(svn_sqlite__step(&have_row, info_stmt));
+ SVN_ERR_ASSERT(have_row);
+ if (svn_sqlite__column_boolean(info_stmt, 15) &&
+ dst_op_depth == dst_parent_op_depth)
+ {
+ SVN_ERR(svn_sqlite__bind_int(stmt, 7, 1));
+ SVN_ERR(svn_sqlite__reset(info_stmt));
+ }
+ else
+ {
+ SVN_ERR(svn_sqlite__reset(info_stmt));
+
+ /* If the child has been moved into the tree we're moving,
+ * keep its moved-here bit set. */
+ SVN_ERR(svn_sqlite__get_statement(&info_stmt,
+ dst_wcroot->sdb,
+ STMT_SELECT_NODE_INFO));
+ SVN_ERR(svn_sqlite__bindf(info_stmt, "is",
+ dst_wcroot->wc_id, src_relpath));
+ SVN_ERR(svn_sqlite__step(&have_row, info_stmt));
+ SVN_ERR_ASSERT(have_row);
+ if (svn_sqlite__column_boolean(info_stmt, 15))
+ SVN_ERR(svn_sqlite__bind_int(stmt, 7, 1));
+ SVN_ERR(svn_sqlite__reset(info_stmt));
+ }
+ }
+ }
+
SVN_ERR(svn_sqlite__step_done(stmt));
/* ### Copying changelist is OK for a move but what about a copy? */
@@ -3575,7 +4626,7 @@ db_op_copy(svn_wc__db_wcroot_t *src_wcroot,
SVN_ERR(svn_sqlite__get_statement(&stmt, dst_wcroot->sdb,
STMT_INSERT_NODE));
- SVN_ERR(svn_sqlite__bindf(stmt, "isisisrtnt",
+ SVN_ERR(svn_sqlite__bindf(stmt, "isdsisrtnt",
src_wcroot->wc_id, dst_relpath,
dst_np_op_depth, dst_parent_relpath,
copyfrom_id, copyfrom_relpath,
@@ -3591,14 +4642,14 @@ db_op_copy(svn_wc__db_wcroot_t *src_wcroot,
The children are part of the same op and so have the same op_depth.
(The only time we'd want a different depth is during a recursive
simple add, but we never insert children here during a simple add.) */
- if (kind == svn_wc__db_kind_dir
+ if (kind == svn_node_dir
&& dst_presence == svn_wc__db_status_normal)
SVN_ERR(insert_incomplete_children(
dst_wcroot->sdb,
dst_wcroot->wc_id,
dst_relpath,
- INVALID_REPOS_ID /* inherit repos_id */,
- NULL /* inherit repos_path */,
+ copyfrom_id,
+ copyfrom_relpath,
copyfrom_rev,
children,
dst_op_depth,
@@ -3618,7 +4669,7 @@ db_op_copy(svn_wc__db_wcroot_t *src_wcroot,
return SVN_NO_ERROR;
}
-/* Baton for op_copy_txn */
+/* Baton for passing args to op_copy_txn(). */
struct op_copy_baton
{
svn_wc__db_wcroot_t *src_wcroot;
@@ -3628,14 +4679,21 @@ struct op_copy_baton
const char *dst_relpath;
const svn_skel_t *work_items;
+
+ svn_boolean_t is_move;
+ const char *dst_op_root_relpath;
};
-/* Helper for svn_wc__db_op_copy.
- Implements svn_sqlite__transaction_callback_t */
+/* Helper for svn_wc__db_op_copy().
+ *
+ * Implements svn_sqlite__transaction_callback_t. */
static svn_error_t *
-op_copy_txn(void * baton, svn_sqlite__db_t *sdb, apr_pool_t *scratch_pool)
+op_copy_txn(void * baton,
+ svn_sqlite__db_t *sdb,
+ apr_pool_t *scratch_pool)
{
struct op_copy_baton *ocb = baton;
+ int move_op_depth;
if (sdb != ocb->dst_wcroot->sdb)
{
@@ -3649,9 +4707,14 @@ op_copy_txn(void * baton, svn_sqlite__db_t *sdb, apr_pool_t *scratch_pool)
/* From this point we can assume a lock in the src and dst databases */
+ if (ocb->is_move)
+ move_op_depth = relpath_depth(ocb->dst_op_root_relpath);
+ else
+ move_op_depth = 0;
+
SVN_ERR(db_op_copy(ocb->src_wcroot, ocb->src_relpath,
ocb->dst_wcroot, ocb->dst_relpath,
- ocb->work_items, scratch_pool));
+ ocb->work_items, move_op_depth, scratch_pool));
return SVN_NO_ERROR;
}
@@ -3661,6 +4724,7 @@ svn_wc__db_op_copy(svn_wc__db_t *db,
const char *src_abspath,
const char *dst_abspath,
const char *dst_op_root_abspath,
+ svn_boolean_t is_move,
const svn_skel_t *work_items,
apr_pool_t *scratch_pool)
{
@@ -3668,6 +4732,7 @@ svn_wc__db_op_copy(svn_wc__db_t *db,
SVN_ERR_ASSERT(svn_dirent_is_absolute(src_abspath));
SVN_ERR_ASSERT(svn_dirent_is_absolute(dst_abspath));
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(dst_op_root_abspath));
SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&ocb.src_wcroot,
&ocb.src_relpath, db,
@@ -3682,6 +4747,9 @@ svn_wc__db_op_copy(svn_wc__db_t *db,
VERIFY_USABLE_WCROOT(ocb.dst_wcroot);
ocb.work_items = work_items;
+ ocb.is_move = is_move;
+ ocb.dst_op_root_relpath = svn_dirent_skip_ancestor(ocb.dst_wcroot->abspath,
+ dst_op_root_abspath);
/* Call with the sdb in src_wcroot. It might call itself again to
also obtain a lock in dst_wcroot */
@@ -3691,25 +4759,247 @@ svn_wc__db_op_copy(svn_wc__db_t *db,
return SVN_NO_ERROR;
}
+/* The txn body of svn_wc__db_op_handle_move_back */
+static svn_error_t *
+handle_move_back(svn_boolean_t *moved_back,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ const char *moved_from_relpath,
+ const svn_skel_t *work_items,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt;
+ svn_wc__db_status_t status;
+ svn_boolean_t op_root;
+ svn_boolean_t have_more_work;
+ int from_op_depth = 0;
+ svn_boolean_t have_row;
+ svn_boolean_t different = FALSE;
+
+ SVN_ERR(add_work_items(wcroot->sdb, work_items, scratch_pool));
+
+ SVN_ERR(svn_wc__db_read_info_internal(&status, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ &op_root, NULL, NULL, NULL,
+ &have_more_work, NULL,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool));
+
+ if (status != svn_wc__db_status_added || !op_root)
+ return SVN_NO_ERROR;
+
+ /* We have two cases here: BASE-move-back and WORKING-move-back */
+ if (have_more_work)
+ SVN_ERR(op_depth_of(&from_op_depth, wcroot,
+ svn_relpath_dirname(local_relpath, scratch_pool)));
+ else
+ from_op_depth = 0;
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_MOVED_BACK));
+
+ SVN_ERR(svn_sqlite__bindf(stmt, "isdd", wcroot->wc_id,
+ local_relpath,
+ from_op_depth,
+ relpath_depth(local_relpath)));
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+
+ SVN_ERR_ASSERT(have_row); /* We checked that the node is an op-root */
+
+ {
+ svn_boolean_t moved_here = svn_sqlite__column_boolean(stmt, 9);
+ const char *moved_to = svn_sqlite__column_text(stmt, 10, NULL);
+
+ if (!moved_here
+ || !moved_to
+ || strcmp(moved_to, moved_from_relpath))
+ {
+ different = TRUE;
+ have_row = FALSE;
+ }
+ }
+
+ while (have_row)
+ {
+ svn_wc__db_status_t upper_status;
+ svn_wc__db_status_t lower_status;
+
+ upper_status = svn_sqlite__column_token(stmt, 1, presence_map);
+
+ if (svn_sqlite__column_is_null(stmt, 5))
+ {
+ /* No lower layer replaced. */
+ if (upper_status != svn_wc__db_status_not_present)
+ {
+ different = TRUE;
+ break;
+ }
+ continue;
+ }
+
+ lower_status = svn_sqlite__column_token(stmt, 5, presence_map);
+
+ if (upper_status != lower_status)
+ {
+ different = TRUE;
+ break;
+ }
+
+ if (upper_status == svn_wc__db_status_not_present
+ || upper_status == svn_wc__db_status_excluded)
+ {
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ continue; /* Nothing to check */
+ }
+ else if (upper_status != svn_wc__db_status_normal)
+ {
+ /* Not a normal move. Mixed revision move? */
+ different = TRUE;
+ break;
+ }
+
+ {
+ const char *upper_repos_relpath;
+ const char *lower_repos_relpath;
+
+ upper_repos_relpath = svn_sqlite__column_text(stmt, 3, NULL);
+ lower_repos_relpath = svn_sqlite__column_text(stmt, 7, NULL);
+
+ if (! upper_repos_relpath
+ || strcmp(upper_repos_relpath, lower_repos_relpath))
+ {
+ different = TRUE;
+ break;
+ }
+ }
+
+ {
+ svn_revnum_t upper_rev;
+ svn_revnum_t lower_rev;
+
+ upper_rev = svn_sqlite__column_revnum(stmt, 4);
+ lower_rev = svn_sqlite__column_revnum(stmt, 8);
+
+ if (upper_rev != lower_rev)
+ {
+ different = TRUE;
+ break;
+ }
+ }
+
+ {
+ apr_int64_t upper_repos_id;
+ apr_int64_t lower_repos_id;
+
+ upper_repos_id = svn_sqlite__column_int64(stmt, 2);
+ lower_repos_id = svn_sqlite__column_int64(stmt, 6);
+
+ if (upper_repos_id != lower_repos_id)
+ {
+ different = TRUE;
+ break;
+ }
+ }
+
+ /* Check moved_here? */
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ }
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ if (! different)
+ {
+ /* Ok, we can now safely remove this complete move, because we
+ determined that it 100% matches the layer below it. */
+
+ /* ### We could copy the recorded timestamps from the higher to the
+ lower layer in an attempt to improve status performance, but
+ generally these values should be the same anyway as it was
+ a no-op move. */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_DELETE_MOVED_BACK));
+
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id,
+ local_relpath,
+ relpath_depth(local_relpath)));
+
+ SVN_ERR(svn_sqlite__step_done(stmt));
+
+ if (moved_back)
+ *moved_back = TRUE;
+ }
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__db_op_handle_move_back(svn_boolean_t *moved_back,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ const char *moved_from_abspath,
+ const svn_skel_t *work_items,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_wcroot_t *wcroot;
+ const char *local_relpath;
+ const char *moved_from_relpath;
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
+ local_abspath,
+ scratch_pool, scratch_pool));
+ VERIFY_USABLE_WCROOT(wcroot);
+
+ if (moved_back)
+ *moved_back = FALSE;
+
+ moved_from_relpath = svn_dirent_skip_ancestor(wcroot->abspath,
+ moved_from_abspath);
+
+ if (! local_relpath[0]
+ || !moved_from_relpath)
+ {
+ /* WC-Roots can't be moved */
+ SVN_ERR(add_work_items(wcroot->sdb, work_items, scratch_pool));
+ return SVN_NO_ERROR;
+ }
+
+ SVN_WC__DB_WITH_TXN(handle_move_back(moved_back, wcroot, local_relpath,
+ moved_from_relpath, work_items,
+ scratch_pool),
+ wcroot);
+
+ SVN_ERR(flush_entries(wcroot, local_abspath, svn_depth_infinity,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
-/* The recursive implementation of svn_wc__db_op_copy_shadowed_layer */
+/* The recursive implementation of svn_wc__db_op_copy_shadowed_layer.
+ *
+ * A non-zero MOVE_OP_DEPTH implies that the copy operation is part of
+ * a move, and indicates the op-depth of the move destination op-root. */
static svn_error_t *
db_op_copy_shadowed_layer(svn_wc__db_wcroot_t *src_wcroot,
const char *src_relpath,
- apr_int64_t src_op_depth,
+ int src_op_depth,
svn_wc__db_wcroot_t *dst_wcroot,
const char *dst_relpath,
- apr_int64_t dst_op_depth,
- apr_int64_t del_op_depth,
+ int dst_op_depth,
+ int del_op_depth,
apr_int64_t repos_id,
const char *repos_relpath,
svn_revnum_t revision,
+ int move_op_depth,
apr_pool_t *scratch_pool)
{
const apr_array_header_t *children;
apr_pool_t *iterpool;
svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
svn_revnum_t node_revision;
const char *node_repos_relpath;
apr_int64_t node_repos_id;
@@ -3719,11 +5009,12 @@ db_op_copy_shadowed_layer(svn_wc__db_wcroot_t *src_wcroot,
{
svn_error_t *err;
- err = depth_get_info(&status, &kind, &node_revision, &node_repos_relpath,
- &node_repos_id, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL,
- src_wcroot, src_relpath, src_op_depth,
- scratch_pool, scratch_pool);
+ err = svn_wc__db_depth_get_info(&status, &kind, &node_revision,
+ &node_repos_relpath, &node_repos_id,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL,
+ src_wcroot, src_relpath, src_op_depth,
+ scratch_pool, scratch_pool);
if (err)
{
@@ -3752,9 +5043,9 @@ db_op_copy_shadowed_layer(svn_wc__db_wcroot_t *src_wcroot,
const char *repos_root_url;
const char *repos_uuid;
- SVN_ERR(fetch_repos_info(&repos_root_url, &repos_uuid,
- src_wcroot->sdb, node_repos_id,
- scratch_pool));
+ SVN_ERR(svn_wc__db_fetch_repos_info(&repos_root_url, &repos_uuid,
+ src_wcroot->sdb, node_repos_id,
+ scratch_pool));
SVN_ERR(create_repos_id(&node_repos_id, repos_root_url, repos_uuid,
dst_wcroot->sdb, scratch_pool));
@@ -3814,22 +5105,20 @@ db_op_copy_shadowed_layer(svn_wc__db_wcroot_t *src_wcroot,
if (dst_presence == svn_wc__db_status_normal
&& src_wcroot == dst_wcroot) /* ### Remove limitation */
{
- if (src_op_depth > 0)
- SVN_ERR(svn_sqlite__get_statement(&stmt, src_wcroot->sdb,
+ SVN_ERR(svn_sqlite__get_statement(&stmt, src_wcroot->sdb,
STMT_INSERT_WORKING_NODE_COPY_FROM_DEPTH));
- else
- SVN_ERR(svn_sqlite__get_statement(&stmt, src_wcroot->sdb,
- STMT_INSERT_WORKING_NODE_COPY_FROM_BASE));
- SVN_ERR(svn_sqlite__bindf(stmt, "issist",
+ SVN_ERR(svn_sqlite__bindf(stmt, "issdstd",
src_wcroot->wc_id, src_relpath,
dst_relpath,
dst_op_depth,
svn_relpath_dirname(dst_relpath, iterpool),
- presence_map, dst_presence));
+ presence_map, dst_presence,
+ src_op_depth));
- if (src_op_depth > 0)
- SVN_ERR(svn_sqlite__bind_int64(stmt, 7, src_op_depth));
+ /* moved_here */
+ if (dst_op_depth == move_op_depth)
+ SVN_ERR(svn_sqlite__bind_int(stmt, 8, TRUE));
SVN_ERR(svn_sqlite__step_done(stmt));
@@ -3866,6 +5155,17 @@ db_op_copy_shadowed_layer(svn_wc__db_wcroot_t *src_wcroot,
scratch_pool));
}
+ if (dst_presence == svn_wc__db_status_not_present)
+ {
+ /* Don't create descendants of a not present node! */
+
+ /* This code is currently still triggered by copying deleted nodes
+ between separate working copies. See ### comment above. */
+
+ svn_pool_destroy(iterpool);
+ return SVN_NO_ERROR;
+ }
+
SVN_ERR(gather_repo_children(&children, src_wcroot, src_relpath,
src_op_depth, scratch_pool, iterpool));
@@ -3888,7 +5188,7 @@ db_op_copy_shadowed_layer(svn_wc__db_wcroot_t *src_wcroot,
dst_wcroot, child_dst_relpath, dst_op_depth,
del_op_depth,
repos_id, child_repos_relpath, revision,
- scratch_pool));
+ move_op_depth, scratch_pool));
}
svn_pool_destroy(iterpool);
@@ -3896,18 +5196,20 @@ db_op_copy_shadowed_layer(svn_wc__db_wcroot_t *src_wcroot,
return SVN_NO_ERROR;
}
-/* Helper for svn_wc__db_op_copy_shadowed_layer.
- Implements svn_sqlite__transaction_callback_t */
+/* Helper for svn_wc__db_op_copy_shadowed_layer().
+ *
+ * Implements svn_sqlite__transaction_callback_t. */
static svn_error_t *
-op_copy_shadowed_layer_txn(void * baton, svn_sqlite__db_t *sdb,
+op_copy_shadowed_layer_txn(void *baton,
+ svn_sqlite__db_t *sdb,
apr_pool_t *scratch_pool)
{
struct op_copy_baton *ocb = baton;
const char *src_parent_relpath;
const char *dst_parent_relpath;
- apr_int64_t src_op_depth;
- apr_int64_t dst_op_depth;
- apr_int64_t del_op_depth;
+ int src_op_depth;
+ int dst_op_depth;
+ int del_op_depth;
const char *repos_relpath = NULL;
apr_int64_t repos_id = INVALID_REPOS_ID;
svn_revnum_t revision = SVN_INVALID_REVNUM;
@@ -3941,10 +5243,12 @@ op_copy_shadowed_layer_txn(void * baton, svn_sqlite__db_t *sdb,
del_op_depth = relpath_depth(ocb->dst_relpath);
/* Get some information from the parent */
- SVN_ERR(depth_get_info(NULL, NULL, &revision, &repos_relpath, &repos_id,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- ocb->src_wcroot, src_parent_relpath, src_op_depth,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_depth_get_info(NULL, NULL, &revision, &repos_relpath,
+ &repos_id, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL,
+ ocb->src_wcroot,
+ src_parent_relpath, src_op_depth,
+ scratch_pool, scratch_pool));
if (repos_relpath == NULL)
{
@@ -3963,6 +5267,7 @@ op_copy_shadowed_layer_txn(void * baton, svn_sqlite__db_t *sdb,
ocb->dst_wcroot, ocb->dst_relpath, dst_op_depth,
del_op_depth,
repos_id, repos_relpath, revision,
+ (ocb->is_move ? dst_op_depth : 0),
scratch_pool));
return SVN_NO_ERROR;
@@ -3972,6 +5277,7 @@ svn_error_t *
svn_wc__db_op_copy_shadowed_layer(svn_wc__db_t *db,
const char *src_abspath,
const char *dst_abspath,
+ svn_boolean_t is_move,
apr_pool_t *scratch_pool)
{
struct op_copy_baton ocb = {0};
@@ -3991,6 +5297,9 @@ svn_wc__db_op_copy_shadowed_layer(svn_wc__db_t *db,
scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(ocb.dst_wcroot);
+ ocb.is_move = is_move;
+ ocb.dst_op_root_relpath = NULL; /* not used by op_copy_shadowed_layer_txn */
+
ocb.work_items = NULL;
/* Call with the sdb in src_wcroot. It might call itself again to
@@ -4003,27 +5312,6 @@ svn_wc__db_op_copy_shadowed_layer(svn_wc__db_t *db,
}
-/* Set *OP_DEPTH to the highest op depth of WCROOT:LOCAL_RELPATH. */
-static svn_error_t *
-op_depth_of(apr_int64_t *op_depth,
- svn_wc__db_wcroot_t *wcroot,
- const char *local_relpath)
-{
- svn_sqlite__stmt_t *stmt;
- svn_boolean_t have_row;
-
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_SELECT_NODE_INFO));
- SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
- SVN_ERR(svn_sqlite__step(&have_row, stmt));
- SVN_ERR_ASSERT(have_row);
- *op_depth = svn_sqlite__column_int64(stmt, 0);
- SVN_ERR(svn_sqlite__reset(stmt));
-
- return SVN_NO_ERROR;
-}
-
-
/* If there are any server-excluded base nodes then the copy must fail
as it's not possible to commit such a copy.
Return an error if there are any server-excluded nodes. */
@@ -4037,7 +5325,7 @@ catch_copy_of_server_excluded(svn_wc__db_wcroot_t *wcroot,
const char *server_excluded_relpath;
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_HAS_SERVER_EXCLUDED_NODES));
+ STMT_HAS_SERVER_EXCLUDED_DESCENDANTS));
SVN_ERR(svn_sqlite__bindf(stmt, "is",
wcroot->wc_id,
local_relpath));
@@ -4056,108 +5344,6 @@ catch_copy_of_server_excluded(svn_wc__db_wcroot_t *wcroot,
}
-/* Determine at which OP_DEPTH a copy of COPYFROM_REPOS_ID, COPYFROM_RELPATH at
- revision COPYFROM_REVISION should be inserted as LOCAL_RELPATH. Do this
- by checking if this would be a direct child of a copy of its parent
- directory. If it is then set *OP_DEPTH to the op_depth of its parent.
-
- If the node is not a direct copy at the same revision of the parent
- *NP_OP_DEPTH will be set to the op_depth of the parent when a not-present
- node should be inserted at this op_depth. This will be the case when the
- parent already defined an incomplete child with the same name. Otherwise
- *NP_OP_DEPTH will be set to -1.
-
- If the parent node is not the parent of the to be copied node, then
- *OP_DEPTH will be set to the proper op_depth for a new operation root.
- */
-static svn_error_t *
-op_depth_for_copy(apr_int64_t *op_depth,
- apr_int64_t *np_op_depth,
- apr_int64_t copyfrom_repos_id,
- const char *copyfrom_relpath,
- svn_revnum_t copyfrom_revision,
- svn_wc__db_wcroot_t *wcroot,
- const char *local_relpath,
- apr_pool_t *scratch_pool)
-{
- const char *parent_relpath, *name;
- svn_sqlite__stmt_t *stmt;
- svn_boolean_t have_row;
- apr_int64_t incomplete_op_depth = -1;
- apr_int64_t min_op_depth = 1; /* Never touch BASE */
-
- *op_depth = relpath_depth(local_relpath);
- *np_op_depth = -1;
-
- if (!copyfrom_relpath)
- return SVN_NO_ERROR;
-
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_SELECT_WORKING_NODE));
- SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
- SVN_ERR(svn_sqlite__step(&have_row, stmt));
- if (have_row)
- {
- svn_wc__db_status_t status = svn_sqlite__column_token(stmt, 1,
- presence_map);
-
- min_op_depth = svn_sqlite__column_int64(stmt, 0);
- if (status == svn_wc__db_status_incomplete)
- incomplete_op_depth = min_op_depth;
- }
- SVN_ERR(svn_sqlite__reset(stmt));
-
- svn_relpath_split(&parent_relpath, &name, local_relpath, scratch_pool);
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_SELECT_WORKING_NODE));
- SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, parent_relpath));
- SVN_ERR(svn_sqlite__step(&have_row, stmt));
- if (have_row)
- {
- apr_int64_t parent_op_depth = svn_sqlite__column_int64(stmt, 0);
- svn_wc__db_status_t presence = svn_sqlite__column_token(stmt, 1,
- presence_map);
-
- if (parent_op_depth < min_op_depth)
- {
- /* We want to create a copy; not overwrite the lower layers */
- SVN_ERR(svn_sqlite__reset(stmt));
- return SVN_NO_ERROR;
- }
-
- /* You can only add children below a node that exists.
- In WORKING that must be status added, which is represented
- as presence normal */
- SVN_ERR_ASSERT(presence == svn_wc__db_status_normal);
-
- if ((incomplete_op_depth < 0)
- || (incomplete_op_depth == parent_op_depth))
- {
- apr_int64_t parent_copyfrom_repos_id
- = svn_sqlite__column_int64(stmt, 10);
- const char *parent_copyfrom_relpath
- = svn_sqlite__column_text(stmt, 11, NULL);
- svn_revnum_t parent_copyfrom_revision
- = svn_sqlite__column_revnum(stmt, 12);
-
- if (parent_copyfrom_repos_id == copyfrom_repos_id)
- {
- if (copyfrom_revision == parent_copyfrom_revision
- && !strcmp(copyfrom_relpath,
- svn_relpath_join(parent_copyfrom_relpath, name,
- scratch_pool)))
- *op_depth = parent_op_depth;
- else if (incomplete_op_depth > 0)
- *np_op_depth = incomplete_op_depth;
- }
- }
- }
- SVN_ERR(svn_sqlite__reset(stmt));
-
- return SVN_NO_ERROR;
-}
-
-
svn_error_t *
svn_wc__db_op_copy_dir(svn_wc__db_t *db,
const char *local_abspath,
@@ -4171,6 +5357,7 @@ svn_wc__db_op_copy_dir(svn_wc__db_t *db,
svn_revnum_t original_revision,
const apr_array_header_t *children,
svn_depth_t depth,
+ svn_boolean_t is_move,
const svn_skel_t *conflict,
const svn_skel_t *work_items,
apr_pool_t *scratch_pool)
@@ -4178,6 +5365,7 @@ svn_wc__db_op_copy_dir(svn_wc__db_t *db,
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
insert_working_baton_t iwb;
+ int parent_op_depth;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
SVN_ERR_ASSERT(props != NULL);
@@ -4186,7 +5374,6 @@ svn_wc__db_op_copy_dir(svn_wc__db_t *db,
#if 0
SVN_ERR_ASSERT(children != NULL);
#endif
- SVN_ERR_ASSERT(conflict == NULL); /* ### can't handle yet */
SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
local_abspath, scratch_pool, scratch_pool));
@@ -4195,13 +5382,7 @@ svn_wc__db_op_copy_dir(svn_wc__db_t *db,
blank_iwb(&iwb);
iwb.presence = svn_wc__db_status_normal;
- iwb.kind = svn_wc__db_kind_dir;
-
- iwb.props = props;
- iwb.changed_rev = changed_rev;
- iwb.changed_date = changed_date;
- iwb.changed_author = changed_author;
- iwb.moved_here = FALSE;
+ iwb.kind = svn_node_dir;
if (original_root_url != NULL)
{
@@ -4210,21 +5391,30 @@ svn_wc__db_op_copy_dir(svn_wc__db_t *db,
wcroot->sdb, scratch_pool));
iwb.original_repos_relpath = original_repos_relpath;
iwb.original_revnum = original_revision;
+
+ iwb.props = props;
+ iwb.changed_rev = changed_rev;
+ iwb.changed_date = changed_date;
+ iwb.changed_author = changed_author;
}
/* ### Should we do this inside the transaction? */
SVN_ERR(op_depth_for_copy(&iwb.op_depth, &iwb.not_present_op_depth,
- iwb.original_repos_id,
+ &parent_op_depth, iwb.original_repos_id,
original_repos_relpath, original_revision,
wcroot, local_relpath, scratch_pool));
iwb.children = children;
iwb.depth = depth;
+ iwb.moved_here = is_move && (parent_op_depth == 0 ||
+ iwb.op_depth == parent_op_depth);
iwb.work_items = work_items;
+ iwb.conflict = conflict;
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, insert_working_node, &iwb,
- scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ insert_working_node(&iwb, wcroot, local_relpath, scratch_pool),
+ wcroot);
SVN_ERR(flush_entries(wcroot, local_abspath, depth, scratch_pool));
return SVN_NO_ERROR;
@@ -4243,6 +5433,9 @@ svn_wc__db_op_copy_file(svn_wc__db_t *db,
const char *original_uuid,
svn_revnum_t original_revision,
const svn_checksum_t *checksum,
+ svn_boolean_t update_actual_props,
+ const apr_hash_t *new_actual_props,
+ svn_boolean_t is_move,
const svn_skel_t *conflict,
const svn_skel_t *work_items,
apr_pool_t *scratch_pool)
@@ -4250,6 +5443,7 @@ svn_wc__db_op_copy_file(svn_wc__db_t *db,
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
insert_working_baton_t iwb;
+ int parent_op_depth;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
SVN_ERR_ASSERT(props != NULL);
@@ -4260,7 +5454,6 @@ svn_wc__db_op_copy_file(svn_wc__db_t *db,
|| (original_repos_relpath && original_root_url
&& original_uuid && checksum
&& original_revision != SVN_INVALID_REVNUM));
- SVN_ERR_ASSERT(conflict == NULL); /* ### can't handle yet */
SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
local_abspath, scratch_pool, scratch_pool));
@@ -4269,13 +5462,7 @@ svn_wc__db_op_copy_file(svn_wc__db_t *db,
blank_iwb(&iwb);
iwb.presence = svn_wc__db_status_normal;
- iwb.kind = svn_wc__db_kind_file;
-
- iwb.props = props;
- iwb.changed_rev = changed_rev;
- iwb.changed_date = changed_date;
- iwb.changed_author = changed_author;
- iwb.moved_here = FALSE;
+ iwb.kind = svn_node_file;
if (original_root_url != NULL)
{
@@ -4284,20 +5471,35 @@ svn_wc__db_op_copy_file(svn_wc__db_t *db,
wcroot->sdb, scratch_pool));
iwb.original_repos_relpath = original_repos_relpath;
iwb.original_revnum = original_revision;
+
+ iwb.props = props;
+ iwb.changed_rev = changed_rev;
+ iwb.changed_date = changed_date;
+ iwb.changed_author = changed_author;
}
/* ### Should we do this inside the transaction? */
SVN_ERR(op_depth_for_copy(&iwb.op_depth, &iwb.not_present_op_depth,
- iwb.original_repos_id,
+ &parent_op_depth, iwb.original_repos_id,
original_repos_relpath, original_revision,
wcroot, local_relpath, scratch_pool));
iwb.checksum = checksum;
+ iwb.moved_here = is_move && (parent_op_depth == 0 ||
+ iwb.op_depth == parent_op_depth);
+
+ if (update_actual_props)
+ {
+ iwb.update_actual_props = update_actual_props;
+ iwb.new_actual_props = new_actual_props;
+ }
iwb.work_items = work_items;
+ iwb.conflict = conflict;
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, insert_working_node, &iwb,
- scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ insert_working_node(&iwb, wcroot, local_relpath, scratch_pool),
+ wcroot);
SVN_ERR(flush_entries(wcroot, local_abspath, svn_depth_empty, scratch_pool));
return SVN_NO_ERROR;
@@ -4316,6 +5518,7 @@ svn_wc__db_op_copy_symlink(svn_wc__db_t *db,
const char *original_uuid,
svn_revnum_t original_revision,
const char *target,
+ svn_boolean_t is_move,
const svn_skel_t *conflict,
const svn_skel_t *work_items,
apr_pool_t *scratch_pool)
@@ -4323,13 +5526,13 @@ svn_wc__db_op_copy_symlink(svn_wc__db_t *db,
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
insert_working_baton_t iwb;
+ int parent_op_depth;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
SVN_ERR_ASSERT(props != NULL);
/* ### any assertions for CHANGED_* ? */
/* ### any assertions for ORIGINAL_* ? */
SVN_ERR_ASSERT(target != NULL);
- SVN_ERR_ASSERT(conflict == NULL); /* ### can't handle yet */
SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
local_abspath, scratch_pool, scratch_pool));
@@ -4338,13 +5541,8 @@ svn_wc__db_op_copy_symlink(svn_wc__db_t *db,
blank_iwb(&iwb);
iwb.presence = svn_wc__db_status_normal;
- iwb.kind = svn_wc__db_kind_symlink;
+ iwb.kind = svn_node_symlink;
- iwb.props = props;
- iwb.changed_rev = changed_rev;
- iwb.changed_date = changed_date;
- iwb.changed_author = changed_author;
- iwb.moved_here = FALSE;
if (original_root_url != NULL)
{
@@ -4353,20 +5551,29 @@ svn_wc__db_op_copy_symlink(svn_wc__db_t *db,
wcroot->sdb, scratch_pool));
iwb.original_repos_relpath = original_repos_relpath;
iwb.original_revnum = original_revision;
+
+ iwb.props = props;
+ iwb.changed_rev = changed_rev;
+ iwb.changed_date = changed_date;
+ iwb.changed_author = changed_author;
}
/* ### Should we do this inside the transaction? */
SVN_ERR(op_depth_for_copy(&iwb.op_depth, &iwb.not_present_op_depth,
- iwb.original_repos_id,
+ &parent_op_depth, iwb.original_repos_id,
original_repos_relpath, original_revision,
wcroot, local_relpath, scratch_pool));
iwb.target = target;
+ iwb.moved_here = is_move && (parent_op_depth == 0 ||
+ iwb.op_depth == parent_op_depth);
iwb.work_items = work_items;
+ iwb.conflict = conflict;
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, insert_working_node, &iwb,
- scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ insert_working_node(&iwb, wcroot, local_relpath, scratch_pool),
+ wcroot);
SVN_ERR(flush_entries(wcroot, local_abspath, svn_depth_empty, scratch_pool));
return SVN_NO_ERROR;
@@ -4376,29 +5583,41 @@ svn_wc__db_op_copy_symlink(svn_wc__db_t *db,
svn_error_t *
svn_wc__db_op_add_directory(svn_wc__db_t *db,
const char *local_abspath,
+ const apr_hash_t *props,
const svn_skel_t *work_items,
apr_pool_t *scratch_pool)
{
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
+ const char *dir_abspath;
+ const char *name;
insert_working_baton_t iwb;
+ /* Resolve wcroot via parent directory to avoid obstruction handling */
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+ svn_dirent_split(&dir_abspath, &name, local_abspath, scratch_pool);
SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
- local_abspath, scratch_pool, scratch_pool));
+ dir_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
blank_iwb(&iwb);
+ local_relpath = svn_relpath_join(local_relpath, name, scratch_pool);
iwb.presence = svn_wc__db_status_normal;
- iwb.kind = svn_wc__db_kind_dir;
+ iwb.kind = svn_node_dir;
iwb.op_depth = relpath_depth(local_relpath);
+ if (props && apr_hash_count((apr_hash_t *)props))
+ {
+ iwb.update_actual_props = TRUE;
+ iwb.new_actual_props = props;
+ }
iwb.work_items = work_items;
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, insert_working_node, &iwb,
- scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ insert_working_node(&iwb, wcroot, local_relpath, scratch_pool),
+ wcroot);
/* Use depth infinity to make sure we have no invalid cached information
* about children of this dir. */
SVN_ERR(flush_entries(wcroot, local_abspath, svn_depth_infinity,
@@ -4411,29 +5630,41 @@ svn_wc__db_op_add_directory(svn_wc__db_t *db,
svn_error_t *
svn_wc__db_op_add_file(svn_wc__db_t *db,
const char *local_abspath,
+ const apr_hash_t *props,
const svn_skel_t *work_items,
apr_pool_t *scratch_pool)
{
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
insert_working_baton_t iwb;
+ const char *dir_abspath;
+ const char *name;
+ /* Resolve wcroot via parent directory to avoid obstruction handling */
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+ svn_dirent_split(&dir_abspath, &name, local_abspath, scratch_pool);
SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
- local_abspath, scratch_pool, scratch_pool));
+ dir_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
blank_iwb(&iwb);
+ local_relpath = svn_relpath_join(local_relpath, name, scratch_pool);
iwb.presence = svn_wc__db_status_normal;
- iwb.kind = svn_wc__db_kind_file;
+ iwb.kind = svn_node_file;
iwb.op_depth = relpath_depth(local_relpath);
+ if (props && apr_hash_count((apr_hash_t *)props))
+ {
+ iwb.update_actual_props = TRUE;
+ iwb.new_actual_props = props;
+ }
iwb.work_items = work_items;
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, insert_working_node, &iwb,
- scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ insert_working_node(&iwb, wcroot, local_relpath, scratch_pool),
+ wcroot);
SVN_ERR(flush_entries(wcroot, local_abspath, svn_depth_empty, scratch_pool));
return SVN_NO_ERROR;
@@ -4444,58 +5675,66 @@ svn_error_t *
svn_wc__db_op_add_symlink(svn_wc__db_t *db,
const char *local_abspath,
const char *target,
+ const apr_hash_t *props,
const svn_skel_t *work_items,
apr_pool_t *scratch_pool)
{
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
insert_working_baton_t iwb;
+ const char *dir_abspath;
+ const char *name;
+ /* Resolve wcroot via parent directory to avoid obstruction handling */
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
SVN_ERR_ASSERT(target != NULL);
+ svn_dirent_split(&dir_abspath, &name, local_abspath, scratch_pool);
+
SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
- local_abspath, scratch_pool, scratch_pool));
+ dir_abspath, scratch_pool, scratch_pool));
+
VERIFY_USABLE_WCROOT(wcroot);
blank_iwb(&iwb);
+ local_relpath = svn_relpath_join(local_relpath, name, scratch_pool);
iwb.presence = svn_wc__db_status_normal;
- iwb.kind = svn_wc__db_kind_symlink;
+ iwb.kind = svn_node_symlink;
iwb.op_depth = relpath_depth(local_relpath);
+ if (props && apr_hash_count((apr_hash_t *)props))
+ {
+ iwb.update_actual_props = TRUE;
+ iwb.new_actual_props = props;
+ }
iwb.target = target;
iwb.work_items = work_items;
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, insert_working_node, &iwb,
- scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ insert_working_node(&iwb, wcroot, local_relpath, scratch_pool),
+ wcroot);
SVN_ERR(flush_entries(wcroot, local_abspath, svn_depth_empty, scratch_pool));
return SVN_NO_ERROR;
}
-struct record_baton_t {
- svn_filesize_t translated_size;
- apr_time_t last_mod_time;
-};
-
-
-/* Record TRANSLATED_SIZE and LAST_MOD_TIME into top layer in NODES */
+/* Record RECORDED_SIZE and RECORDED_TIME into top layer in NODES */
static svn_error_t *
-db_record_fileinfo(void *baton,
- svn_wc__db_wcroot_t *wcroot,
+db_record_fileinfo(svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
+ apr_int64_t recorded_size,
+ apr_int64_t recorded_time,
apr_pool_t *scratch_pool)
{
- struct record_baton_t *rb = baton;
svn_sqlite__stmt_t *stmt;
int affected_rows;
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_UPDATE_NODE_FILEINFO));
SVN_ERR(svn_sqlite__bindf(stmt, "isii", wcroot->wc_id, local_relpath,
- rb->translated_size, rb->last_mod_time));
+ recorded_size, recorded_time));
SVN_ERR(svn_sqlite__update(&affected_rows, stmt));
SVN_ERR_ASSERT(affected_rows == 1);
@@ -4507,13 +5746,12 @@ db_record_fileinfo(void *baton,
svn_error_t *
svn_wc__db_global_record_fileinfo(svn_wc__db_t *db,
const char *local_abspath,
- svn_filesize_t translated_size,
- apr_time_t last_mod_time,
+ svn_filesize_t recorded_size,
+ apr_time_t recorded_time,
apr_pool_t *scratch_pool)
{
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
- struct record_baton_t rb;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
@@ -4521,11 +5759,8 @@ svn_wc__db_global_record_fileinfo(svn_wc__db_t *db,
local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- rb.translated_size = translated_size;
- rb.last_mod_time = last_mod_time;
-
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, db_record_fileinfo, &rb,
- scratch_pool));
+ SVN_ERR(db_record_fileinfo(wcroot, local_relpath,
+ recorded_size, recorded_time, scratch_pool));
/* We *totally* monkeyed the entries. Toss 'em. */
SVN_ERR(flush_entries(wcroot, local_abspath, svn_depth_empty, scratch_pool));
@@ -4534,18 +5769,12 @@ svn_wc__db_global_record_fileinfo(svn_wc__db_t *db,
}
-struct set_props_baton_t
-{
- apr_hash_t *props;
- svn_boolean_t clear_recorded_info;
-
- const svn_skel_t *conflict;
- const svn_skel_t *work_items;
-};
-
-
/* Set the ACTUAL_NODE properties column for (WC_ID, LOCAL_RELPATH) to
- * PROPS. */
+ * PROPS.
+ *
+ * Note: PROPS=NULL means the actual props are the same as the pristine
+ * props; to indicate no properties when the pristine has some props,
+ * PROPS must be an empty hash. */
static svn_error_t *
set_actual_props(apr_int64_t wc_id,
const char *local_relpath,
@@ -4577,52 +5806,56 @@ set_actual_props(apr_int64_t wc_id,
}
-/* Set the 'properties' column in the 'ACTUAL_NODE' table to BATON->props.
+/* The body of svn_wc__db_op_set_props().
+
+ Set the 'properties' column in the 'ACTUAL_NODE' table to BATON->props.
Create an entry in the ACTUAL table for the node if it does not yet
have one.
To specify no properties, BATON->props must be an empty hash, not NULL.
- BATON is of type 'struct set_props_baton_t'. */
+ BATON is of type 'struct set_props_baton_t'.
+*/
static svn_error_t *
-set_props_txn(void *baton,
- svn_wc__db_wcroot_t *wcroot,
+set_props_txn(svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
+ apr_hash_t *props,
+ svn_boolean_t clear_recorded_info,
+ const svn_skel_t *conflict,
+ const svn_skel_t *work_items,
apr_pool_t *scratch_pool)
{
- struct set_props_baton_t *spb = baton;
apr_hash_t *pristine_props;
- /* ### we dunno what to do with CONFLICT yet. */
- SVN_ERR_ASSERT(spb->conflict == NULL);
-
- /* First order of business: insert all the work items. */
- SVN_ERR(add_work_items(wcroot->sdb, spb->work_items, scratch_pool));
-
/* Check if the props are modified. If no changes, then wipe out the
ACTUAL props. PRISTINE_PROPS==NULL means that any
ACTUAL props are okay as provided, so go ahead and set them. */
- SVN_ERR(db_read_pristine_props(&pristine_props, wcroot, local_relpath,
+ SVN_ERR(db_read_pristine_props(&pristine_props, wcroot, local_relpath, FALSE,
scratch_pool, scratch_pool));
- if (spb->props && pristine_props)
+ if (props && pristine_props)
{
apr_array_header_t *prop_diffs;
- SVN_ERR(svn_prop_diffs(&prop_diffs, spb->props, pristine_props,
+ SVN_ERR(svn_prop_diffs(&prop_diffs, props, pristine_props,
scratch_pool));
if (prop_diffs->nelts == 0)
- spb->props = NULL;
+ props = NULL;
}
SVN_ERR(set_actual_props(wcroot->wc_id, local_relpath,
- spb->props, wcroot->sdb, scratch_pool));
+ props, wcroot->sdb, scratch_pool));
- if (spb->clear_recorded_info)
+ if (clear_recorded_info)
{
- struct record_baton_t rb;
- rb.translated_size = SVN_INVALID_FILESIZE;
- rb.last_mod_time = 0;
- SVN_ERR(db_record_fileinfo(&rb, wcroot, local_relpath, scratch_pool));
+ SVN_ERR(db_record_fileinfo(wcroot, local_relpath,
+ SVN_INVALID_FILESIZE, 0,
+ scratch_pool));
}
+ /* And finally. */
+ SVN_ERR(add_work_items(wcroot->sdb, work_items, scratch_pool));
+ if (conflict)
+ SVN_ERR(svn_wc__db_mark_conflict_internal(wcroot, local_relpath,
+ conflict, scratch_pool));
+
return SVN_NO_ERROR;
}
@@ -4636,7 +5869,6 @@ svn_wc__db_op_set_props(svn_wc__db_t *db,
const svn_skel_t *work_items,
apr_pool_t *scratch_pool)
{
- struct set_props_baton_t spb;
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
@@ -4646,92 +5878,15 @@ svn_wc__db_op_set_props(svn_wc__db_t *db,
db, local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- spb.props = props;
- spb.clear_recorded_info = clear_recorded_info;
- spb.conflict = conflict;
- spb.work_items = work_items;
-
- return svn_error_trace(svn_wc__db_with_txn(wcroot, local_relpath,
- set_props_txn, &spb,
- scratch_pool));
-}
-
-
-#ifdef SVN__SUPPORT_BASE_MERGE
-
-/* Set properties in a given table. The row must exist. */
-static svn_error_t *
-set_properties(svn_wc__db_t *db,
- const char *local_abspath,
- const apr_hash_t *props,
- int stmt_idx,
- const char *table_name,
- apr_pool_t *scratch_pool)
-{
- svn_sqlite__stmt_t *stmt;
- int affected_rows;
-
- SVN_ERR_ASSERT(props != NULL);
-
- SVN_ERR(get_statement_for_path(&stmt, db, local_abspath, stmt_idx,
- scratch_pool));
-
- SVN_ERR(svn_sqlite__bind_properties(stmt, 3, props, scratch_pool));
- SVN_ERR(svn_sqlite__update(&affected_rows, stmt));
-
- if (affected_rows != 1)
- return svn_error_createf(SVN_ERR_WC_DB_ERROR, NULL,
- _("Can't store properties for '%s' in '%s'."),
- svn_dirent_local_style(local_abspath,
- scratch_pool),
- table_name);
-
+ SVN_WC__DB_WITH_TXN(set_props_txn(wcroot, local_relpath, props,
+ clear_recorded_info, conflict, work_items,
+ scratch_pool),
+ wcroot);
return SVN_NO_ERROR;
}
svn_error_t *
-svn_wc__db_temp_base_set_props(svn_wc__db_t *db,
- const char *local_abspath,
- const apr_hash_t *props,
- apr_pool_t *scratch_pool)
-{
- SVN_ERR(set_properties(db, local_abspath, props,
- STMT_UPDATE_NODE_BASE_PROPS,
- "base node", scratch_pool));
- return SVN_NO_ERROR;
-}
-
-
-svn_error_t *
-svn_wc__db_temp_working_set_props(svn_wc__db_t *db,
- const char *local_abspath,
- const apr_hash_t *props,
- apr_pool_t *scratch_pool)
-{
- SVN_ERR(set_properties(db, local_abspath, props,
- STMT_UPDATE_NODE_WORKING_PROPS,
- "working node", scratch_pool));
- return SVN_NO_ERROR;
-}
-
-#endif /* SVN__SUPPORT_BASE_MERGE */
-
-
-svn_error_t *
-svn_wc__db_op_move(svn_wc__db_t *db,
- const char *src_abspath,
- const char *dst_abspath,
- apr_pool_t *scratch_pool)
-{
- SVN_ERR_ASSERT(svn_dirent_is_absolute(src_abspath));
- SVN_ERR_ASSERT(svn_dirent_is_absolute(dst_abspath));
-
- NOT_IMPLEMENTED();
-}
-
-
-svn_error_t *
svn_wc__db_op_modified(svn_wc__db_t *db,
const char *local_abspath,
apr_pool_t *scratch_pool)
@@ -4792,17 +5947,29 @@ populate_targets_tree(svn_wc__db_wcroot_t *wcroot,
const char *changelist = APR_ARRAY_IDX(changelist_filter, i,
const char *);
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb, stmt_idx));
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_INSERT_TARGET_WITH_CHANGELIST));
SVN_ERR(svn_sqlite__bindf(stmt, "iss", wcroot->wc_id,
local_relpath, changelist));
SVN_ERR(svn_sqlite__update(&sub_affected, stmt));
+ /* If the root is matched by the changelist, we don't have to match
+ the children. As that tells us the root is a file */
+ if (!sub_affected && depth > svn_depth_empty)
+ {
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb, stmt_idx));
+ SVN_ERR(svn_sqlite__bindf(stmt, "iss", wcroot->wc_id,
+ local_relpath, changelist));
+ SVN_ERR(svn_sqlite__update(&sub_affected, stmt));
+ }
+
affected_rows += sub_affected;
}
}
else /* No changelist filtering */
{
int stmt_idx;
+ int sub_affected;
switch (depth)
{
@@ -4828,9 +5995,19 @@ populate_targets_tree(svn_wc__db_wcroot_t *wcroot,
break;
}
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb, stmt_idx));
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_INSERT_TARGET));
SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
- SVN_ERR(svn_sqlite__update(&affected_rows, stmt));
+ SVN_ERR(svn_sqlite__update(&sub_affected, stmt));
+ affected_rows += sub_affected;
+
+ if (depth > svn_depth_empty)
+ {
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb, stmt_idx));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__update(&sub_affected, stmt));
+ affected_rows += sub_affected;
+ }
}
/* Does the target exist? */
@@ -4884,7 +6061,9 @@ struct set_changelist_baton_t
};
-/* */
+/* The main part of svn_wc__db_op_set_changelist().
+ *
+ * Implements svn_wc__db_txn_callback_t. */
static svn_error_t *
set_changelist_txn(void *baton,
svn_wc__db_wcroot_t *wcroot,
@@ -4898,17 +6077,24 @@ set_changelist_txn(void *baton,
scb->changelist_filter, scratch_pool));
/* Ensure we have actual nodes for our targets. */
- SVN_ERR(svn_sqlite__exec_statements(wcroot->sdb,
- STMT_INSERT_ACTUAL_EMPTIES));
+ if (scb->new_changelist)
+ {
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_INSERT_ACTUAL_EMPTIES));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+ }
/* Now create our notification table. */
SVN_ERR(svn_sqlite__exec_statements(wcroot->sdb,
STMT_CREATE_CHANGELIST_LIST));
+ SVN_ERR(svn_sqlite__exec_statements(wcroot->sdb,
+ STMT_CREATE_CHANGELIST_TRIGGER));
/* Update our changelists. */
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_UPDATE_ACTUAL_CHANGELISTS));
- SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, scb->new_changelist));
+ SVN_ERR(svn_sqlite__bindf(stmt, "iss", wcroot->wc_id, local_relpath,
+ scb->new_changelist));
SVN_ERR(svn_sqlite__step_done(stmt));
if (scb->new_changelist)
@@ -4916,7 +6102,8 @@ set_changelist_txn(void *baton,
/* We have to notify that we skipped directories, so do that now. */
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_MARK_SKIPPED_CHANGELIST_DIRS));
- SVN_ERR(svn_sqlite__bind_text(stmt, 1, scb->new_changelist));
+ SVN_ERR(svn_sqlite__bindf(stmt, "iss", wcroot->wc_id, local_relpath,
+ scb->new_changelist));
SVN_ERR(svn_sqlite__step_done(stmt));
}
@@ -4926,7 +6113,7 @@ set_changelist_txn(void *baton,
{
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_DELETE_ACTUAL_EMPTIES));
- SVN_ERR(svn_sqlite__bind_int64(stmt, 1, wcroot->wc_id));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
SVN_ERR(svn_sqlite__step_done(stmt));
}
@@ -4934,7 +6121,9 @@ set_changelist_txn(void *baton,
}
-/* Implement work_callback_t. */
+/* Send notifications for svn_wc__db_op_set_changelist().
+ *
+ * Implements work_callback_t. */
static svn_error_t *
do_changelist_notify(void *baton,
svn_wc__db_wcroot_t *wcroot,
@@ -4964,7 +6153,14 @@ do_changelist_notify(void *baton,
svn_pool_clear(iterpool);
if (cancel_func)
- SVN_ERR(cancel_func(cancel_baton));
+ {
+ svn_error_t *err = cancel_func(cancel_baton);
+
+ if (err)
+ return svn_error_trace(svn_error_compose_create(
+ err,
+ svn_sqlite__reset(stmt)));
+ }
notify_abspath = svn_dirent_join(wcroot->abspath, notify_relpath,
iterpool);
@@ -4995,6 +6191,7 @@ svn_wc__db_op_set_changelist(svn_wc__db_t *db,
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
struct set_changelist_baton_t scb;
+
scb.new_changelist = new_changelist;
scb.changelist_filter = changelist_filter;
scb.depth = depth;
@@ -5021,123 +6218,160 @@ svn_wc__db_op_set_changelist(svn_wc__db_t *db,
scratch_pool));
}
-
+/* Implementation of svn_wc__db_op_mark_conflict() */
svn_error_t *
-svn_wc__db_op_mark_conflict(svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *scratch_pool)
+svn_wc__db_mark_conflict_internal(svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ const svn_skel_t *conflict_skel,
+ apr_pool_t *scratch_pool)
{
- SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t got_row;
+ svn_boolean_t is_complete;
- NOT_IMPLEMENTED();
-}
+ SVN_ERR(svn_wc__conflict_skel_is_complete(&is_complete, conflict_skel));
+ SVN_ERR_ASSERT(is_complete);
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_ACTUAL_NODE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__step(&got_row, stmt));
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ if (got_row)
+ {
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_UPDATE_ACTUAL_CONFLICT));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ }
+ else
+ {
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_INSERT_ACTUAL_CONFLICT));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ if (*local_relpath != '\0')
+ SVN_ERR(svn_sqlite__bind_text(stmt, 4,
+ svn_relpath_dirname(local_relpath,
+ scratch_pool)));
+ }
+
+ {
+ svn_stringbuf_t *sb = svn_skel__unparse(conflict_skel, scratch_pool);
+
+ SVN_ERR(svn_sqlite__bind_blob(stmt, 3, sb->data, sb->len));
+ }
+
+ SVN_ERR(svn_sqlite__update(NULL, stmt));
+
+ return SVN_NO_ERROR;
+}
svn_error_t *
-svn_wc__db_op_mark_resolved(svn_wc__db_t *db,
+svn_wc__db_op_mark_conflict(svn_wc__db_t *db,
const char *local_abspath,
- svn_boolean_t resolved_text,
- svn_boolean_t resolved_props,
- svn_boolean_t resolved_tree,
+ const svn_skel_t *conflict_skel,
+ const svn_skel_t *work_items,
apr_pool_t *scratch_pool)
{
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
- svn_sqlite__stmt_t *stmt;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
- /* ### we're not ready to handy RESOLVED_TREE just yet. */
- SVN_ERR_ASSERT(!resolved_tree);
-
SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- /* ### these two statements are not transacted together. is this a
- ### problem? I suspect a failure simply leaves the other in a
- ### continued, unresolved state. However, that still retains
- ### "integrity", so another re-run by the user will fix it. */
+ SVN_ERR(svn_wc__db_mark_conflict_internal(wcroot, local_relpath,
+ conflict_skel, scratch_pool));
- if (resolved_text)
- {
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_CLEAR_TEXT_CONFLICT));
- SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
- SVN_ERR(svn_sqlite__step_done(stmt));
- }
- if (resolved_props)
- {
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_CLEAR_PROPS_CONFLICT));
- SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
- SVN_ERR(svn_sqlite__step_done(stmt));
- }
+ /* ### Should be handled in the same transaction as setting the conflict */
+ if (work_items)
+ SVN_ERR(add_work_items(wcroot->sdb, work_items, scratch_pool));
- /* Some entries have cached the above values. Kapow!! */
SVN_ERR(flush_entries(wcroot, local_abspath, svn_depth_empty, scratch_pool));
return SVN_NO_ERROR;
-}
+}
-/* */
+/* The body of svn_wc__db_op_mark_resolved().
+ */
static svn_error_t *
-set_tc_txn(void *baton,
- svn_wc__db_wcroot_t *wcroot,
- const char *local_relpath,
- apr_pool_t *scratch_pool)
+db_op_mark_resolved(svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ svn_wc__db_t *db,
+ svn_boolean_t resolved_text,
+ svn_boolean_t resolved_props,
+ svn_boolean_t resolved_tree,
+ const svn_skel_t *work_items,
+ apr_pool_t *scratch_pool)
{
- const svn_wc_conflict_description2_t *tree_conflict = baton;
- const char *parent_relpath;
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
- const char *tree_conflict_data;
+ int total_affected_rows = 0;
+ svn_boolean_t resolved_all;
+ apr_size_t conflict_len;
+ const void *conflict_data;
+ svn_skel_t *conflicts;
- /* ### does this work correctly? */
- parent_relpath = svn_relpath_dirname(local_relpath, scratch_pool);
-
- /* Get existing conflict information for LOCAL_RELPATH. */
+ /* Check if we have a conflict in ACTUAL */
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_SELECT_ACTUAL_NODE));
SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+
SVN_ERR(svn_sqlite__step(&have_row, stmt));
- SVN_ERR(svn_sqlite__reset(stmt));
- if (tree_conflict)
+ if (! have_row)
{
- svn_skel_t *skel;
-
- SVN_ERR(svn_wc__serialize_conflict(&skel, tree_conflict,
- scratch_pool, scratch_pool));
- tree_conflict_data = svn_skel__unparse(skel, scratch_pool)->data;
- }
- else
- tree_conflict_data = NULL;
+ SVN_ERR(svn_sqlite__reset(stmt));
- if (have_row)
- {
- /* There is an existing ACTUAL row, so just update it. */
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_UPDATE_ACTUAL_TREE_CONFLICTS));
+ STMT_SELECT_NODE_INFO));
+
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ if (have_row)
+ return SVN_NO_ERROR;
+
+ return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
+ _("The node '%s' was not found."),
+ path_for_error_message(wcroot,
+ local_relpath,
+ scratch_pool));
}
- else
+
+ conflict_data = svn_sqlite__column_blob(stmt, 2, &conflict_len,
+ scratch_pool);
+ conflicts = svn_skel__parse(conflict_data, conflict_len, scratch_pool);
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ SVN_ERR(svn_wc__conflict_skel_resolve(&resolved_all, conflicts,
+ db, wcroot->abspath,
+ resolved_text,
+ resolved_props ? "" : NULL,
+ resolved_tree,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_UPDATE_ACTUAL_CONFLICT));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+
+ if (! resolved_all)
{
- /* We need to insert an ACTUAL row with the tree conflict data. */
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_INSERT_ACTUAL_TREE_CONFLICTS));
- }
+ svn_stringbuf_t *sb = svn_skel__unparse(conflicts, scratch_pool);
- SVN_ERR(svn_sqlite__bindf(stmt, "iss", wcroot->wc_id, local_relpath,
- tree_conflict_data));
- if (!have_row)
- SVN_ERR(svn_sqlite__bind_text(stmt, 4, parent_relpath));
+ SVN_ERR(svn_sqlite__bind_blob(stmt, 3, sb->data, sb->len));
+ }
- SVN_ERR(svn_sqlite__step_done(stmt));
+ SVN_ERR(svn_sqlite__update(&total_affected_rows, stmt));
/* Now, remove the actual node if it doesn't have any more useful
information. We only need to do this if we've remove data ourselves. */
- if (!tree_conflict_data)
+ if (total_affected_rows > 0)
{
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_DELETE_ACTUAL_EMPTY));
@@ -5145,46 +6379,89 @@ set_tc_txn(void *baton,
SVN_ERR(svn_sqlite__step_done(stmt));
}
+ SVN_ERR(add_work_items(wcroot->sdb, work_items, scratch_pool));
+
return SVN_NO_ERROR;
}
-
svn_error_t *
-svn_wc__db_op_set_tree_conflict(svn_wc__db_t *db,
- const char *local_abspath,
- const svn_wc_conflict_description2_t *tree_conflict,
- apr_pool_t *scratch_pool)
+svn_wc__db_op_mark_resolved(svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_boolean_t resolved_text,
+ svn_boolean_t resolved_props,
+ svn_boolean_t resolved_tree,
+ const svn_skel_t *work_items,
+ apr_pool_t *scratch_pool)
{
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
- SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath,
- db, local_abspath, scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
+ local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, set_tc_txn,
- (void *) tree_conflict, scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ db_op_mark_resolved(wcroot, local_relpath, db,
+ resolved_text, resolved_props, resolved_tree,
+ work_items, scratch_pool),
+ wcroot);
- /* There may be some entries, and the conflict info is now out of date. */
SVN_ERR(flush_entries(wcroot, local_abspath, svn_depth_empty, scratch_pool));
-
return SVN_NO_ERROR;
}
+/* Clear moved-to information at the delete-half of the move which
+ * moved LOCAL_RELPATH here. This transforms the move into a simple delete. */
+static svn_error_t *
+clear_moved_to(const char *local_relpath,
+ svn_wc__db_wcroot_t *wcroot,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+ const char *moved_from_relpath;
-/* This implements svn_wc__db_txn_callback_t */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_MOVED_FROM_RELPATH));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ if (!have_row)
+ {
+ SVN_ERR(svn_sqlite__reset(stmt));
+ return SVN_NO_ERROR;
+ }
+
+ moved_from_relpath = svn_sqlite__column_text(stmt, 0, scratch_pool);
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_CLEAR_MOVED_TO_RELPATH));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id,
+ moved_from_relpath,
+ relpath_depth(moved_from_relpath)));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+
+ return SVN_NO_ERROR;
+}
+
+/* One of the two alternative bodies of svn_wc__db_op_revert().
+ *
+ * Implements svn_wc__db_txn_callback_t. */
static svn_error_t *
op_revert_txn(void *baton,
svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
apr_pool_t *scratch_pool)
{
+ svn_wc__db_t *db = baton;
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
- apr_int64_t op_depth;
+ int op_depth;
+ svn_boolean_t moved_here;
int affected_rows;
+ const char *moved_to;
/* ### Similar structure to op_revert_recursive_txn, should they be
combined? */
@@ -5228,15 +6505,65 @@ op_revert_txn(void *baton,
scratch_pool));
}
- op_depth = svn_sqlite__column_int64(stmt, 0);
+ op_depth = svn_sqlite__column_int(stmt, 0);
+ moved_here = svn_sqlite__column_boolean(stmt, 15);
+ moved_to = svn_sqlite__column_text(stmt, 17, scratch_pool);
SVN_ERR(svn_sqlite__reset(stmt));
+ if (moved_to)
+ {
+ SVN_ERR(svn_wc__db_resolve_break_moved_away_internal(wcroot,
+ local_relpath,
+ op_depth,
+ scratch_pool));
+ }
+ else
+ {
+ svn_skel_t *conflict;
+
+ SVN_ERR(svn_wc__db_read_conflict_internal(&conflict, wcroot,
+ local_relpath,
+ scratch_pool, scratch_pool));
+ if (conflict)
+ {
+ svn_wc_operation_t operation;
+ svn_boolean_t tree_conflicted;
+
+ SVN_ERR(svn_wc__conflict_read_info(&operation, NULL, NULL, NULL,
+ &tree_conflicted,
+ db, wcroot->abspath,
+ conflict,
+ scratch_pool, scratch_pool));
+ if (tree_conflicted
+ && (operation == svn_wc_operation_update
+ || operation == svn_wc_operation_switch))
+ {
+ svn_wc_conflict_reason_t reason;
+ svn_wc_conflict_action_t action;
+
+ SVN_ERR(svn_wc__conflict_read_tree_conflict(&reason, &action,
+ NULL,
+ db, wcroot->abspath,
+ conflict,
+ scratch_pool,
+ scratch_pool));
+
+ if (reason == svn_wc_conflict_reason_deleted)
+ SVN_ERR(svn_wc__db_resolve_delete_raise_moved_away(
+ db, svn_dirent_join(wcroot->abspath, local_relpath,
+ scratch_pool),
+ NULL, NULL /* ### How do we notify this? */,
+ scratch_pool));
+ }
+ }
+ }
+
if (op_depth > 0 && op_depth == relpath_depth(local_relpath))
{
/* Can't do non-recursive revert if children exist */
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_SELECT_GE_OP_DEPTH_CHILDREN));
- SVN_ERR(svn_sqlite__bindf(stmt, "isi", wcroot->wc_id,
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id,
local_relpath, op_depth));
SVN_ERR(svn_sqlite__step(&have_row, stmt));
SVN_ERR(svn_sqlite__reset(stmt));
@@ -5252,7 +6579,7 @@ op_revert_txn(void *baton,
direct children into roots of deletes. */
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_UPDATE_OP_DEPTH_INCREASE_RECURSIVE));
- SVN_ERR(svn_sqlite__bindf(stmt, "isi", wcroot->wc_id,
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id,
local_relpath,
op_depth));
SVN_ERR(svn_sqlite__step_done(stmt));
@@ -5267,6 +6594,10 @@ op_revert_txn(void *baton,
STMT_DELETE_WC_LOCK_ORPHAN));
SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
SVN_ERR(svn_sqlite__step_done(stmt));
+
+ /* If this node was moved-here, clear moved-to at the move source. */
+ if (moved_here)
+ SVN_ERR(clear_moved_to(local_relpath, wcroot, scratch_pool));
}
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
@@ -5285,7 +6616,9 @@ op_revert_txn(void *baton,
}
-/* This implements svn_wc__db_txn_callback_t */
+/* One of the two alternative bodies of svn_wc__db_op_revert().
+ *
+ * Implements svn_wc__db_txn_callback_t. */
static svn_error_t *
op_revert_recursive_txn(void *baton,
svn_wc__db_wcroot_t *wcroot,
@@ -5294,8 +6627,11 @@ op_revert_recursive_txn(void *baton,
{
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
- apr_int64_t op_depth;
+ int op_depth;
+ int select_op_depth;
+ svn_boolean_t moved_here;
int affected_rows;
+ apr_pool_t *iterpool;
/* ### Similar structure to op_revert_txn, should they be
combined? */
@@ -5309,10 +6645,10 @@ op_revert_recursive_txn(void *baton,
SVN_ERR(svn_sqlite__reset(stmt));
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_DELETE_ACTUAL_NODE_RECURSIVE));
+ STMT_DELETE_ACTUAL_NODE));
SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id,
local_relpath));
- SVN_ERR(svn_sqlite__step(&affected_rows, stmt));
+ SVN_ERR(svn_sqlite__update(&affected_rows, stmt));
if (affected_rows)
return SVN_NO_ERROR; /* actual-only revert */
@@ -5324,7 +6660,8 @@ op_revert_recursive_txn(void *baton,
scratch_pool));
}
- op_depth = svn_sqlite__column_int64(stmt, 0);
+ op_depth = svn_sqlite__column_int(stmt, 0);
+ moved_here = svn_sqlite__column_boolean(stmt, 15);
SVN_ERR(svn_sqlite__reset(stmt));
if (op_depth > 0 && op_depth != relpath_depth(local_relpath))
@@ -5335,25 +6672,50 @@ op_revert_recursive_txn(void *baton,
local_relpath,
scratch_pool));
- if (!op_depth)
- op_depth = 1; /* Don't delete BASE nodes */
+ /* Remove moved-here from move destinations outside the tree. */
+ SVN_ERR(svn_sqlite__get_statement(
+ &stmt, wcroot->sdb, STMT_SELECT_MOVED_OUTSIDE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id, local_relpath,
+ op_depth));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ while (have_row)
+ {
+ const char *move_src_relpath = svn_sqlite__column_text(stmt, 0, NULL);
+ int move_op_depth = svn_sqlite__column_int(stmt, 2);
+ svn_error_t *err;
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_DELETE_NODES_RECURSIVE));
- SVN_ERR(svn_sqlite__bindf(stmt, "isi", wcroot->wc_id,
- local_relpath, op_depth));
+ err = svn_wc__db_resolve_break_moved_away_internal(wcroot,
+ move_src_relpath,
+ move_op_depth,
+ scratch_pool);
+ if (err)
+ return svn_error_compose_create(err, svn_sqlite__reset(stmt));
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ }
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ /* Don't delete BASE nodes */
+ select_op_depth = op_depth ? op_depth : 1;
+
+ /* Reverting any non wc-root node */
+ SVN_ERR(svn_sqlite__get_statement(
+ &stmt, wcroot->sdb,
+ STMT_DELETE_NODES_ABOVE_DEPTH_RECURSIVE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id,
+ local_relpath, select_op_depth));
SVN_ERR(svn_sqlite__step_done(stmt));
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_DELETE_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE));
- SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id,
- local_relpath));
+ SVN_ERR(svn_sqlite__get_statement(
+ &stmt, wcroot->sdb,
+ STMT_DELETE_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
SVN_ERR(svn_sqlite__step_done(stmt));
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_CLEAR_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE));
- SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id,
- local_relpath));
+ SVN_ERR(svn_sqlite__get_statement(
+ &stmt, wcroot->sdb,
+ STMT_CLEAR_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
SVN_ERR(svn_sqlite__step_done(stmt));
/* ### This removes the locks, but what about the access batons? */
@@ -5363,6 +6725,37 @@ op_revert_recursive_txn(void *baton,
local_relpath));
SVN_ERR(svn_sqlite__step_done(stmt));
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_MOVED_HERE_CHILDREN));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+
+ iterpool = svn_pool_create(scratch_pool);
+ while (have_row)
+ {
+ const char *moved_here_child_relpath;
+ svn_error_t *err;
+
+ svn_pool_clear(iterpool);
+
+ moved_here_child_relpath = svn_sqlite__column_text(stmt, 0, iterpool);
+ err = clear_moved_to(moved_here_child_relpath, wcroot, iterpool);
+ if (err)
+ return svn_error_trace(svn_error_compose_create(
+ err,
+ svn_sqlite__reset(stmt)));
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ }
+ SVN_ERR(svn_sqlite__reset(stmt));
+ svn_pool_destroy(iterpool);
+
+ /* Clear potential moved-to pointing at the target node itself. */
+ if (op_depth > 0 && op_depth == relpath_depth(local_relpath)
+ && moved_here)
+ SVN_ERR(clear_moved_to(local_relpath, wcroot, scratch_pool));
+
return SVN_NO_ERROR;
}
@@ -5385,6 +6778,7 @@ svn_wc__db_op_revert(svn_wc__db_t *db,
{
case svn_depth_empty:
wtb.cb_func = op_revert_txn;
+ wtb.cb_baton = db;
break;
case svn_depth_infinity:
wtb.cb_func = op_revert_recursive_txn;
@@ -5400,40 +6794,34 @@ svn_wc__db_op_revert(svn_wc__db_t *db,
db, local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, with_triggers, &wtb,
- scratch_pool));
+ SVN_WC__DB_WITH_TXN(with_triggers(&wtb, wcroot, local_relpath, scratch_pool),
+ wcroot);
SVN_ERR(flush_entries(wcroot, local_abspath, depth, scratch_pool));
return SVN_NO_ERROR;
}
-struct revert_list_read_baton {
- svn_boolean_t *reverted;
- const char **conflict_old;
- const char **conflict_new;
- const char **conflict_working;
- const char **prop_reject;
- svn_boolean_t *copied_here;
- svn_wc__db_kind_t *kind;
- apr_pool_t *result_pool;
-};
-
+/* The body of svn_wc__db_revert_list_read().
+ */
static svn_error_t *
-revert_list_read(void *baton,
+revert_list_read(svn_boolean_t *reverted,
+ const apr_array_header_t **marker_paths,
+ svn_boolean_t *copied_here,
+ svn_node_kind_t *kind,
svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
+ svn_wc__db_t *db,
+ apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- struct revert_list_read_baton *b = baton;
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
- *(b->reverted) = FALSE;
- *(b->conflict_new) = *(b->conflict_old) = *(b->conflict_working) = NULL;
- *(b->prop_reject) = NULL;
- *(b->copied_here) = FALSE;
- *(b->kind) = svn_wc__db_kind_unknown;
+ *reverted = FALSE;
+ *marker_paths = NULL;
+ *copied_here = FALSE;
+ *kind = svn_node_unknown;
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_SELECT_REVERT_LIST));
@@ -5441,50 +6829,44 @@ revert_list_read(void *baton,
SVN_ERR(svn_sqlite__step(&have_row, stmt));
if (have_row)
{
- svn_boolean_t is_actual = (svn_sqlite__column_int64(stmt, 5) != 0);
+ svn_boolean_t is_actual = svn_sqlite__column_boolean(stmt, 0);
svn_boolean_t another_row = FALSE;
if (is_actual)
{
- if (!svn_sqlite__column_is_null(stmt, 4))
- *(b->reverted) = TRUE;
-
- if (!svn_sqlite__column_is_null(stmt, 0))
- *(b->conflict_new)
- = svn_dirent_join(wcroot->abspath,
- svn_sqlite__column_text(stmt, 0, NULL),
- b->result_pool);
-
- if (!svn_sqlite__column_is_null(stmt, 1))
- *(b->conflict_old)
- = svn_dirent_join(wcroot->abspath,
- svn_sqlite__column_text(stmt, 1, NULL),
- b->result_pool);
-
- if (!svn_sqlite__column_is_null(stmt, 2))
- *(b->conflict_working)
- = svn_dirent_join(wcroot->abspath,
- svn_sqlite__column_text(stmt, 2, NULL),
- b->result_pool);
-
- if (!svn_sqlite__column_is_null(stmt, 3))
- *(b->prop_reject)
- = svn_dirent_join(wcroot->abspath,
- svn_sqlite__column_text(stmt, 3, NULL),
- b->result_pool);
+ apr_size_t conflict_len;
+ const void *conflict_data;
+
+ conflict_data = svn_sqlite__column_blob(stmt, 5, &conflict_len,
+ scratch_pool);
+ if (conflict_data)
+ {
+ svn_skel_t *conflicts = svn_skel__parse(conflict_data,
+ conflict_len,
+ scratch_pool);
+
+ SVN_ERR(svn_wc__conflict_read_markers(marker_paths,
+ db, wcroot->abspath,
+ conflicts,
+ result_pool,
+ scratch_pool));
+ }
+
+ if (!svn_sqlite__column_is_null(stmt, 1)) /* notify */
+ *reverted = TRUE;
SVN_ERR(svn_sqlite__step(&another_row, stmt));
}
if (!is_actual || another_row)
{
- *(b->reverted) = TRUE;
- if (!svn_sqlite__column_is_null(stmt, 7))
+ *reverted = TRUE;
+ if (!svn_sqlite__column_is_null(stmt, 4)) /* repos_id */
{
- apr_int64_t op_depth = svn_sqlite__column_int64(stmt, 6);
- *(b->copied_here) = (op_depth == relpath_depth(local_relpath));
+ int op_depth = svn_sqlite__column_int(stmt, 3);
+ *copied_here = (op_depth == relpath_depth(local_relpath));
}
- *(b->kind) = svn_sqlite__column_token(stmt, 8, kind_map);
+ *kind = svn_sqlite__column_token(stmt, 2, kind_map);
}
}
@@ -5503,12 +6885,9 @@ revert_list_read(void *baton,
svn_error_t *
svn_wc__db_revert_list_read(svn_boolean_t *reverted,
- const char **conflict_old,
- const char **conflict_new,
- const char **conflict_working,
- const char **prop_reject,
+ const apr_array_header_t **marker_files,
svn_boolean_t *copied_here,
- svn_wc__db_kind_t *kind,
+ svn_node_kind_t *kind,
svn_wc__db_t *db,
const char *local_abspath,
apr_pool_t *result_pool,
@@ -5516,62 +6895,52 @@ svn_wc__db_revert_list_read(svn_boolean_t *reverted,
{
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
- struct revert_list_read_baton b;
- b.reverted = reverted;
- b.conflict_old = conflict_old;
- b.conflict_new = conflict_new;
- b.conflict_working = conflict_working;
- b.prop_reject = prop_reject;
- b.copied_here = copied_here;
- b.kind = kind;
- b.result_pool = result_pool;
SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath,
db, local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, revert_list_read, &b,
- scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ revert_list_read(reverted, marker_files, copied_here, kind,
+ wcroot, local_relpath, db,
+ result_pool, scratch_pool),
+ wcroot);
return SVN_NO_ERROR;
}
-struct revert_list_read_copied_children_baton {
- const apr_array_header_t **children;
- apr_pool_t *result_pool;
-};
-
+/* The body of svn_wc__db_revert_list_read_copied_children().
+ */
static svn_error_t *
-revert_list_read_copied_children(void *baton,
- svn_wc__db_wcroot_t *wcroot,
+revert_list_read_copied_children(svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
+ const apr_array_header_t **children_p,
+ apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- struct revert_list_read_copied_children_baton *b = baton;
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
apr_array_header_t *children;
children =
- apr_array_make(b->result_pool, 0,
+ apr_array_make(result_pool, 0,
sizeof(svn_wc__db_revert_list_copied_child_info_t *));
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_SELECT_REVERT_LIST_COPIED_CHILDREN));
- SVN_ERR(svn_sqlite__bindf(stmt, "si",
- construct_like_arg(local_relpath, scratch_pool),
- relpath_depth(local_relpath)));
+ SVN_ERR(svn_sqlite__bindf(stmt, "sd",
+ local_relpath, relpath_depth(local_relpath)));
SVN_ERR(svn_sqlite__step(&have_row, stmt));
while (have_row)
{
svn_wc__db_revert_list_copied_child_info_t *child_info;
const char *child_relpath;
- child_info = apr_palloc(b->result_pool, sizeof(*child_info));
+ child_info = apr_palloc(result_pool, sizeof(*child_info));
child_relpath = svn_sqlite__column_text(stmt, 0, NULL);
child_info->abspath = svn_dirent_join(wcroot->abspath, child_relpath,
- b->result_pool);
+ result_pool);
child_info->kind = svn_sqlite__column_token(stmt, 1, kind_map);
APR_ARRAY_PUSH(
children,
@@ -5581,7 +6950,7 @@ revert_list_read_copied_children(void *baton,
}
SVN_ERR(svn_sqlite__reset(stmt));
- *b->children = children;
+ *children_p = children;
return SVN_NO_ERROR;
}
@@ -5596,17 +6965,15 @@ svn_wc__db_revert_list_read_copied_children(const apr_array_header_t **children,
{
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
- struct revert_list_read_copied_children_baton b;
- b.children = children;
- b.result_pool = result_pool;
SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath,
db, local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath,
- revert_list_read_copied_children, &b,
- scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ revert_list_read_copied_children(wcroot, local_relpath, children,
+ result_pool, scratch_pool),
+ wcroot);
return SVN_NO_ERROR;
}
@@ -5619,7 +6986,7 @@ svn_wc__db_revert_list_notify(svn_wc_notify_func2_t notify_func,
apr_pool_t *scratch_pool)
{
svn_wc__db_wcroot_t *wcroot;
- const char *local_relpath, *like_arg;
+ const char *local_relpath;
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
apr_pool_t *iterpool = svn_pool_create(scratch_pool);
@@ -5628,11 +6995,9 @@ svn_wc__db_revert_list_notify(svn_wc_notify_func2_t notify_func,
db, local_abspath, scratch_pool, iterpool));
VERIFY_USABLE_WCROOT(wcroot);
- like_arg = construct_like_arg(local_relpath, scratch_pool);
-
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_SELECT_REVERT_LIST_RECURSIVE));
- SVN_ERR(svn_sqlite__bindf(stmt, "ss", local_relpath, like_arg));
+ SVN_ERR(svn_sqlite__bindf(stmt, "s", local_relpath));
SVN_ERR(svn_sqlite__step(&have_row, stmt));
if (!have_row)
return svn_error_trace(svn_sqlite__reset(stmt)); /* optimise for no row */
@@ -5656,7 +7021,7 @@ svn_wc__db_revert_list_notify(svn_wc_notify_func2_t notify_func,
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_DELETE_REVERT_LIST_RECURSIVE));
- SVN_ERR(svn_sqlite__bindf(stmt, "ss", local_relpath, like_arg));
+ SVN_ERR(svn_sqlite__bindf(stmt, "s", local_relpath));
SVN_ERR(svn_sqlite__step_done(stmt));
svn_pool_destroy(iterpool);
@@ -5681,189 +7046,235 @@ svn_wc__db_revert_list_done(svn_wc__db_t *db,
return SVN_NO_ERROR;
}
-/* Like svn_wc__db_op_read_all_tree_conflicts(), but with WCROOT+LOCAL_RELPATH
- instead of DB+LOCAL_ABSPATH. */
+/* The body of svn_wc__db_op_remove_node().
+ */
static svn_error_t *
-read_all_tree_conflicts(apr_hash_t **tree_conflicts,
- svn_wc__db_wcroot_t *wcroot,
- const char *local_relpath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+remove_node_txn(svn_boolean_t *left_changes,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ svn_wc__db_t *db,
+ svn_boolean_t destroy_wc,
+ svn_boolean_t destroy_changes,
+ svn_revnum_t not_present_rev,
+ svn_wc__db_status_t not_present_status,
+ svn_node_kind_t not_present_kind,
+ const svn_skel_t *conflict,
+ const svn_skel_t *work_items,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
{
svn_sqlite__stmt_t *stmt;
- svn_boolean_t have_row;
- apr_pool_t *iterpool = svn_pool_create(scratch_pool);
- *tree_conflicts = apr_hash_make(result_pool);
-
- /* Get the conflict information for children of LOCAL_ABSPATH. */
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_SELECT_ACTUAL_CHILDREN_TREE_CONFLICT));
- SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
- SVN_ERR(svn_sqlite__step(&have_row, stmt));
- while (have_row)
- {
- const char *child_basename;
- const char *child_relpath;
- const char *child_abspath;
- const char *conflict_data;
- const svn_skel_t *skel;
- const svn_wc_conflict_description2_t *conflict;
-
- svn_pool_clear(iterpool);
-
- child_relpath = svn_sqlite__column_text(stmt, 0, NULL);
- child_basename = svn_relpath_basename(child_relpath, result_pool);
- child_abspath = svn_dirent_join(wcroot->abspath, child_relpath, iterpool);
-
- conflict_data = svn_sqlite__column_text(stmt, 1, NULL);
- skel = svn_skel__parse(conflict_data, strlen(conflict_data), iterpool);
- SVN_ERR(svn_wc__deserialize_conflict(&conflict, skel,
- svn_dirent_dirname(child_abspath, iterpool),
- result_pool, iterpool));
-
- apr_hash_set(*tree_conflicts, child_basename, APR_HASH_KEY_STRING,
- conflict);
+ apr_int64_t repos_id;
+ const char *repos_relpath;
- SVN_ERR(svn_sqlite__step(&have_row, stmt));
- }
- SVN_ERR(svn_sqlite__reset(stmt));
+ /* Note that unlike many similar functions it is a valid scenario for this
+ function to be called on a wcroot! */
- svn_pool_destroy(iterpool);
+ /* db set when destroying wc */
+ SVN_ERR_ASSERT(!destroy_wc || db != NULL);
- return SVN_NO_ERROR;
-}
+ if (left_changes)
+ *left_changes = FALSE;
+ /* Need info for not_present node? */
+ if (SVN_IS_VALID_REVNUM(not_present_rev))
+ SVN_ERR(svn_wc__db_base_get_info_internal(NULL, NULL, NULL,
+ &repos_relpath, &repos_id,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool));
-svn_error_t *
-svn_wc__db_op_read_all_tree_conflicts(apr_hash_t **tree_conflicts,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- svn_wc__db_wcroot_t *wcroot;
- const char *local_relpath;
+ if (destroy_wc
+ && (!destroy_changes || *local_relpath == '\0'))
+ {
+ svn_boolean_t have_row;
+ apr_pool_t *iterpool;
+ svn_error_t *err = NULL;
- SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+ /* Install WQ items for deleting the unmodified files and all dirs */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_WORKING_PRESENT));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is",
+ wcroot->wc_id, local_relpath));
- SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
- local_abspath, scratch_pool, scratch_pool));
- VERIFY_USABLE_WCROOT(wcroot);
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
- SVN_ERR(read_all_tree_conflicts(tree_conflicts, wcroot, local_relpath,
- result_pool, scratch_pool));
+ iterpool = svn_pool_create(scratch_pool);
- return SVN_NO_ERROR;
-}
+ while (have_row)
+ {
+ const char *child_relpath;
+ const char *child_abspath;
+ svn_node_kind_t child_kind;
+ svn_boolean_t have_checksum;
+ svn_filesize_t recorded_size;
+ apr_int64_t recorded_time;
+ const svn_io_dirent2_t *dirent;
+ svn_boolean_t modified_p = TRUE;
+ svn_skel_t *work_item = NULL;
+ svn_pool_clear(iterpool);
-/* Like svn_wc__db_op_read_tree_conflict(), but with WCROOT+LOCAL_RELPATH
- instead of DB+LOCAL_ABSPATH. */
-static svn_error_t *
-read_tree_conflict(const svn_wc_conflict_description2_t **tree_conflict,
- svn_wc__db_wcroot_t *wcroot,
- const char *local_relpath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- svn_sqlite__stmt_t *stmt;
- svn_boolean_t have_row;
- const char *conflict_data;
- const svn_skel_t *skel;
- svn_error_t *err;
+ child_relpath = svn_sqlite__column_text(stmt, 0, NULL);
+ child_kind = svn_sqlite__column_token(stmt, 1, kind_map);
- *tree_conflict = NULL;
+ child_abspath = svn_dirent_join(wcroot->abspath, child_relpath,
+ iterpool);
- if (!local_relpath[0])
- return SVN_NO_ERROR;
+ if (child_kind == svn_node_file)
+ {
+ have_checksum = !svn_sqlite__column_is_null(stmt, 2);
+ recorded_size = get_recorded_size(stmt, 3);
+ recorded_time = svn_sqlite__column_int64(stmt, 4);
+ }
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_SELECT_ACTUAL_TREE_CONFLICT));
- SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
- SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ if (cancel_func)
+ err = cancel_func(cancel_baton);
- if (!have_row)
- return svn_error_trace(svn_sqlite__reset(stmt));
+ if (err)
+ break;
- conflict_data = svn_sqlite__column_text(stmt, 0, NULL);
- skel = svn_skel__parse(conflict_data, strlen(conflict_data), scratch_pool);
+ err = svn_io_stat_dirent2(&dirent, child_abspath, FALSE, TRUE,
+ iterpool, iterpool);
- {
- const char *local_abspath
- = svn_dirent_join(wcroot->abspath, local_relpath, scratch_pool);
- const char *dir_abspath = svn_dirent_dirname(local_abspath, scratch_pool);
+ if (err)
+ break;
- err = svn_wc__deserialize_conflict(tree_conflict, skel,
- dir_abspath, result_pool,
- scratch_pool);
- }
+ if (destroy_changes
+ || dirent->kind != svn_node_file
+ || child_kind != svn_node_file)
+ {
+ /* Not interested in keeping changes */
+ modified_p = FALSE;
+ }
+ else if (child_kind == svn_node_file
+ && dirent->kind == svn_node_file
+ && dirent->filesize == recorded_size
+ && dirent->mtime == recorded_time)
+ {
+ modified_p = FALSE; /* File matches recorded state */
+ }
+ else if (have_checksum)
+ err = svn_wc__internal_file_modified_p(&modified_p,
+ db, child_abspath,
+ FALSE, iterpool);
- return svn_error_compose_create(err,
- svn_sqlite__reset(stmt));
-}
+ if (err)
+ break;
+ if (modified_p)
+ {
+ if (left_changes)
+ *left_changes = TRUE;
+ }
+ else if (child_kind == svn_node_dir)
+ {
+ err = svn_wc__wq_build_dir_remove(&work_item,
+ db, wcroot->abspath,
+ child_abspath, FALSE,
+ iterpool, iterpool);
+ }
+ else /* svn_node_file || svn_node_symlink */
+ {
+ err = svn_wc__wq_build_file_remove(&work_item,
+ db, wcroot->abspath,
+ child_abspath,
+ iterpool, iterpool);
+ }
-svn_error_t *
-svn_wc__db_op_read_tree_conflict(
- const svn_wc_conflict_description2_t **tree_conflict,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- svn_wc__db_wcroot_t *wcroot;
- const char *local_relpath;
+ if (err)
+ break;
- SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+ if (work_item)
+ {
+ err = add_work_items(wcroot->sdb, work_item, iterpool);
+ if (err)
+ break;
+ }
- SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
- local_abspath, scratch_pool, scratch_pool));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ }
+ svn_pool_destroy(iterpool);
- SVN_ERR(read_tree_conflict(tree_conflict, wcroot, local_relpath,
- result_pool, scratch_pool));
+ SVN_ERR(svn_error_compose_create(err, svn_sqlite__reset(stmt)));
+ }
- return SVN_NO_ERROR;
-}
+ if (destroy_wc && *local_relpath != '\0')
+ {
+ /* Create work item for destroying the root */
+ svn_wc__db_status_t status;
+ svn_node_kind_t kind;
+ SVN_ERR(read_info(&status, &kind, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool));
-/* Baton for remove_node_txn */
-struct remove_node_baton
-{
- svn_revnum_t not_present_rev;
- svn_wc__db_kind_t not_present_kind;
-};
+ if (status == svn_wc__db_status_normal
+ || status == svn_wc__db_status_added
+ || status == svn_wc__db_status_incomplete)
+ {
+ svn_skel_t *work_item = NULL;
+ const char *local_abspath = svn_dirent_join(wcroot->abspath,
+ local_relpath,
+ scratch_pool);
-/* Implements svn_wc__db_txn_callback_t for svn_wc__db_op_remove_node */
-static svn_error_t *
-remove_node_txn(void *baton,
- svn_wc__db_wcroot_t *wcroot,
- const char *local_relpath,
- apr_pool_t *scratch_pool)
-{
- struct remove_node_baton *rnb = baton;
- svn_sqlite__stmt_t *stmt;
+ if (kind == svn_node_dir)
+ {
+ SVN_ERR(svn_wc__wq_build_dir_remove(&work_item,
+ db, wcroot->abspath,
+ local_abspath,
+ destroy_changes
+ /* recursive */,
+ scratch_pool, scratch_pool));
+ }
+ else
+ {
+ svn_boolean_t modified_p = FALSE;
- apr_int64_t repos_id;
- const char *repos_relpath;
+ if (!destroy_changes)
+ {
+ SVN_ERR(svn_wc__internal_file_modified_p(&modified_p,
+ db, local_abspath,
+ FALSE,
+ scratch_pool));
+ }
- SVN_ERR_ASSERT(*local_relpath != '\0'); /* Never on a wcroot */
+ if (!modified_p)
+ SVN_ERR(svn_wc__wq_build_file_remove(&work_item,
+ db, wcroot->abspath,
+ local_abspath,
+ scratch_pool,
+ scratch_pool));
+ else
+ {
+ if (left_changes)
+ *left_changes = TRUE;
+ }
+ }
- /* Need info for not_present node? */
- if (SVN_IS_VALID_REVNUM(rnb->not_present_rev))
- SVN_ERR(base_get_info(NULL, NULL, NULL, &repos_relpath, &repos_id,
- NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- wcroot, local_relpath,
- scratch_pool, scratch_pool));
+ SVN_ERR(add_work_items(wcroot->sdb, work_item, scratch_pool));
+ }
+ }
+ /* Remove all nodes below local_relpath */
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_DELETE_NODES_RECURSIVE));
-
- /* Remove all nodes at or below local_relpath where op_depth >= 0 */
- SVN_ERR(svn_sqlite__bindf(stmt, "isi",
- wcroot->wc_id, local_relpath, (apr_int64_t)0));
+ STMT_DELETE_NODE_RECURSIVE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
SVN_ERR(svn_sqlite__step_done(stmt));
+ /* Delete the root NODE when this is not the working copy root */
+ if (local_relpath[0] != '\0')
+ {
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_DELETE_NODE_ALL_LAYERS));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+ }
+
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_DELETE_ACTUAL_NODE_RECURSIVE));
@@ -5873,33 +7284,49 @@ remove_node_txn(void *baton,
SVN_ERR(svn_sqlite__step_done(stmt));
/* Should we leave a not-present node? */
- if (SVN_IS_VALID_REVNUM(rnb->not_present_rev))
+ if (SVN_IS_VALID_REVNUM(not_present_rev))
{
insert_base_baton_t ibb;
blank_ibb(&ibb);
ibb.repos_id = repos_id;
- ibb.status = svn_wc__db_status_not_present;
- ibb.kind = rnb->not_present_kind;
+
+ SVN_ERR_ASSERT(not_present_status == svn_wc__db_status_not_present
+ || not_present_status == svn_wc__db_status_excluded);
+
+ ibb.status = not_present_status;
+ ibb.kind = not_present_kind;
ibb.repos_relpath = repos_relpath;
- ibb.revision = rnb->not_present_rev;
+ ibb.revision = not_present_rev;
SVN_ERR(insert_base_node(&ibb, wcroot, local_relpath, scratch_pool));
}
+ SVN_ERR(add_work_items(wcroot->sdb, work_items, scratch_pool));
+ if (conflict)
+ SVN_ERR(svn_wc__db_mark_conflict_internal(wcroot, local_relpath,
+ conflict, scratch_pool));
+
return SVN_NO_ERROR;
}
svn_error_t *
-svn_wc__db_op_remove_node(svn_wc__db_t *db,
+svn_wc__db_op_remove_node(svn_boolean_t *left_changes,
+ svn_wc__db_t *db,
const char *local_abspath,
+ svn_boolean_t destroy_wc,
+ svn_boolean_t destroy_changes,
svn_revnum_t not_present_revision,
- svn_wc__db_kind_t not_present_kind,
+ svn_wc__db_status_t not_present_status,
+ svn_node_kind_t not_present_kind,
+ const svn_skel_t *conflict,
+ const svn_skel_t *work_items,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
apr_pool_t *scratch_pool)
{
svn_wc__db_wcroot_t *wcroot;
- struct remove_node_baton rnb;
const char *local_relpath;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
@@ -5908,11 +7335,13 @@ svn_wc__db_op_remove_node(svn_wc__db_t *db,
local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- rnb.not_present_rev = not_present_revision;
- rnb.not_present_kind = not_present_kind;
-
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, remove_node_txn,
- &rnb, scratch_pool));
+ SVN_WC__DB_WITH_TXN(remove_node_txn(left_changes,
+ wcroot, local_relpath, db,
+ destroy_wc, destroy_changes,
+ not_present_revision, not_present_status,
+ not_present_kind, conflict, work_items,
+ cancel_func, cancel_baton, scratch_pool),
+ wcroot);
/* Flush everything below this node in all ways */
SVN_ERR(flush_entries(wcroot, local_abspath, svn_depth_infinity,
@@ -5922,46 +7351,14 @@ svn_wc__db_op_remove_node(svn_wc__db_t *db,
}
-svn_error_t *
-svn_wc__db_temp_op_remove_working(svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *scratch_pool)
-{
- svn_wc__db_wcroot_t *wcroot;
- svn_sqlite__stmt_t *stmt;
- const char *local_relpath;
-
- SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
-
- SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
- local_abspath, scratch_pool, scratch_pool));
- VERIFY_USABLE_WCROOT(wcroot);
-
- /* ### Use depth value other than empty? */
- SVN_ERR(flush_entries(wcroot, local_abspath, svn_depth_empty,
- scratch_pool));
-
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_DELETE_WORKING_NODE));
- SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
- SVN_ERR(svn_sqlite__step_done(stmt));
-
- return SVN_NO_ERROR;
-}
-
-/* Baton for db_op_set_base_depth */
-struct set_base_depth_baton_t
-{
- svn_depth_t depth;
-};
-
+/* The body of svn_wc__db_op_set_base_depth().
+ */
static svn_error_t *
-db_op_set_base_depth(void *baton,
- svn_wc__db_wcroot_t *wcroot,
+db_op_set_base_depth(svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
+ svn_depth_t depth,
apr_pool_t *scratch_pool)
{
- struct set_base_depth_baton_t *sbd = baton;
svn_sqlite__stmt_t *stmt;
int affected_rows;
@@ -5969,7 +7366,7 @@ db_op_set_base_depth(void *baton,
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_UPDATE_NODE_BASE_DEPTH));
SVN_ERR(svn_sqlite__bindf(stmt, "iss", wcroot->wc_id, local_relpath,
- svn_depth_to_word(sbd->depth)));
+ svn_token__to_word(depth_map, depth)));
SVN_ERR(svn_sqlite__update(&affected_rows, stmt));
if (affected_rows == 0)
@@ -5990,7 +7387,6 @@ svn_wc__db_op_set_base_depth(svn_wc__db_t *db,
{
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
- struct set_base_depth_baton_t sbd;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
SVN_ERR_ASSERT(depth >= svn_depth_empty && depth <= svn_depth_infinity);
@@ -6001,10 +7397,9 @@ svn_wc__db_op_set_base_depth(svn_wc__db_t *db,
/* ### We set depth on working and base to match entry behavior.
Maybe these should be separated later? */
- sbd.depth = depth;
-
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, db_op_set_base_depth,
- &sbd, scratch_pool));
+ SVN_WC__DB_WITH_TXN(db_op_set_base_depth(wcroot, local_relpath, depth,
+ scratch_pool),
+ wcroot);
SVN_ERR(flush_entries(wcroot, local_abspath, svn_depth_empty, scratch_pool));
@@ -6018,7 +7413,7 @@ info_below_working(svn_boolean_t *have_base,
svn_wc__db_status_t *status,
svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
- apr_int64_t below_op_depth, /* < 0 is ignored */
+ int below_op_depth, /* < 0 is ignored */
apr_pool_t *scratch_pool);
@@ -6075,7 +7470,7 @@ info_below_working(svn_boolean_t *have_base,
svn_wc__db_status_t *status,
svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
- apr_int64_t below_op_depth,
+ int below_op_depth,
apr_pool_t *scratch_pool)
{
svn_sqlite__stmt_t *stmt;
@@ -6092,7 +7487,7 @@ info_below_working(svn_boolean_t *have_base,
if (below_op_depth >= 0)
{
while (have_row &&
- (svn_sqlite__column_int64(stmt, 0) > below_op_depth))
+ (svn_sqlite__column_int(stmt, 0) > below_op_depth))
{
SVN_ERR(svn_sqlite__step(&have_row, stmt));
}
@@ -6105,7 +7500,7 @@ info_below_working(svn_boolean_t *have_base,
while (have_row)
{
- apr_int64_t op_depth = svn_sqlite__column_int64(stmt, 0);
+ int op_depth = svn_sqlite__column_int(stmt, 0);
if (op_depth > 0)
*have_work = TRUE;
@@ -6123,100 +7518,510 @@ info_below_working(svn_boolean_t *have_base,
return SVN_NO_ERROR;
}
+/* Helper function for op_delete_txn */
+static svn_error_t *
+delete_update_movedto(svn_wc__db_wcroot_t *wcroot,
+ const char *child_moved_from_relpath,
+ int op_depth,
+ const char *new_moved_to_relpath,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt;
+ int affected;
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_UPDATE_MOVED_TO_RELPATH));
+
+ SVN_ERR(svn_sqlite__bindf(stmt, "isds",
+ wcroot->wc_id,
+ child_moved_from_relpath,
+ op_depth,
+ new_moved_to_relpath));
+ SVN_ERR(svn_sqlite__update(&affected, stmt));
+#ifdef SVN_DEBUG
+ /* Not fatal in release mode. The move recording is broken,
+ but the rest of the working copy can handle this. */
+ SVN_ERR_ASSERT(affected == 1);
+#endif
+
+ return SVN_NO_ERROR;
+}
+
struct op_delete_baton_t {
- apr_int64_t delete_depth; /* op-depth for root of delete */
+ const char *moved_to_relpath; /* NULL if delete is not part of a move */
+ svn_skel_t *conflict;
+ svn_skel_t *work_items;
+ svn_boolean_t delete_dir_externals;
+ svn_boolean_t notify;
+};
+
+/* This structure is used while rewriting move information for nodes.
+ *
+ * The most simple case of rewriting move information happens when
+ * a moved-away subtree is moved again: mv A B; mv B C
+ * The second move requires rewriting moved-to info at or within A.
+ *
+ * Another example is a move of a subtree which had nodes moved into it:
+ * mv A B/F; mv B G
+ * This requires rewriting such that A/F is marked has having moved to G/F.
+ *
+ * Another case is where a node becomes a nested moved node.
+ * A nested move happens when a subtree child is moved before or after
+ * the subtree itself is moved. For example:
+ * mv A/F A/G; mv A B
+ * In this case, the move A/F -> A/G is rewritten to B/F -> B/G.
+ * Note that the following sequence results in the same DB state:
+ * mv A B; mv B/F B/G
+ * We do not care about the order the moves were performed in.
+ * For details, see http://wiki.apache.org/subversion/MultiLayerMoves
+ */
+struct moved_node_t {
+ /* The source of the move. */
+ const char *local_relpath;
+
+ /* The move destination. */
+ const char *moved_to_relpath;
+
+ /* The op-depth of the deleted node at the source of the move. */
+ int op_depth;
+
+ /* When >= 1 the op_depth at which local_relpath was moved to its
+ location. Used to find its original location outside the delete */
+ int moved_from_depth;
};
+/* Helper function to resolve the original location of local_relpath at OP_DEPTH
+ before it was moved into the tree rooted at ROOT_RELPATH. */
static svn_error_t *
-op_delete_txn(void *baton,
- svn_wc__db_wcroot_t *wcroot,
- const char *local_relpath,
- apr_pool_t *scratch_pool)
+resolve_moved_from(const char **moved_from_relpath,
+ int *moved_from_op_depth,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *root_relpath,
+ const char *local_relpath,
+ int op_depth,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ const char *suffix = "";
+ svn_sqlite__stmt_t *stmt;
+ const char *m_from_relpath;
+ int m_from_op_depth;
+ int m_move_from_depth;
+ svn_boolean_t have_row;
+
+ while (relpath_depth(local_relpath) > op_depth)
+ {
+ const char *name;
+ svn_relpath_split(&local_relpath, &name, local_relpath, scratch_pool);
+ suffix = svn_relpath_join(suffix, name, scratch_pool);
+ }
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_MOVED_FROM_FOR_DELETE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is",
+ wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+
+ if (!have_row)
+ {
+ /* assert(have_row); */
+ *moved_from_relpath = NULL;
+ *moved_from_op_depth = -1;
+
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ return SVN_NO_ERROR;
+ }
+
+ m_from_relpath = svn_sqlite__column_text(stmt, 0, scratch_pool);
+ m_from_op_depth = svn_sqlite__column_int(stmt, 1);
+ m_move_from_depth = svn_sqlite__column_int(stmt, 2);
+
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ if (! svn_relpath_skip_ancestor(root_relpath, m_from_relpath))
+ {
+ *moved_from_relpath = svn_relpath_join(m_from_relpath, suffix,
+ result_pool);
+ *moved_from_op_depth = m_from_op_depth; /* ### Ok? */
+ return SVN_NO_ERROR;
+ }
+ else if (!m_move_from_depth)
+ {
+ *moved_from_relpath = NULL;
+ *moved_from_op_depth = -1;
+ return SVN_NO_ERROR;
+ }
+
+ return svn_error_trace(
+ resolve_moved_from(moved_from_relpath,
+ moved_from_op_depth,
+ wcroot,
+ root_relpath,
+ svn_relpath_join(m_from_relpath, suffix,
+ scratch_pool),
+ m_move_from_depth,
+ result_pool, scratch_pool));
+}
+
+static svn_error_t *
+delete_node(void *baton,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *scratch_pool)
{
struct op_delete_baton_t *b = baton;
svn_wc__db_status_t status;
svn_boolean_t have_row, op_root;
svn_boolean_t add_work = FALSE;
svn_sqlite__stmt_t *stmt;
- apr_int64_t select_depth; /* Depth of what is to be deleted */
- svn_boolean_t refetch_depth = FALSE;
+ int working_op_depth; /* Depth of what is to be deleted */
+ int keep_op_depth = 0; /* Depth of what is below what is deleted */
+ svn_node_kind_t kind;
+ apr_array_header_t *moved_nodes = NULL;
+ int delete_op_depth = relpath_depth(local_relpath);
- SVN_ERR(svn_sqlite__exec_statements(wcroot->sdb, STMT_CREATE_DELETE_LIST));
+ assert(*local_relpath); /* Can't delete wcroot */
- SVN_ERR(read_info(&status,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- &op_root, NULL, NULL,
- NULL, NULL, NULL,
- wcroot, local_relpath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_NODE_INFO));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+
+ if (!have_row)
+ {
+ return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND,
+ svn_sqlite__reset(stmt),
+ _("The node '%s' was not found."),
+ path_for_error_message(wcroot,
+ local_relpath,
+ scratch_pool));
+ }
+
+ working_op_depth = svn_sqlite__column_int(stmt, 0);
+ status = svn_sqlite__column_token(stmt, 3, presence_map);
+ kind = svn_sqlite__column_token(stmt, 4, kind_map);
+
+ if (working_op_depth < delete_op_depth)
+ {
+ op_root = FALSE;
+ add_work = TRUE;
+ keep_op_depth = working_op_depth;
+ }
+ else
+ {
+ op_root = TRUE;
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+
+ if (have_row)
+ {
+ svn_wc__db_status_t below_status;
+ int below_op_depth;
+
+ below_op_depth = svn_sqlite__column_int(stmt, 0);
+ below_status = svn_sqlite__column_token(stmt, 3, presence_map);
+
+ if (below_status != svn_wc__db_status_not_present
+ && below_status != svn_wc__db_status_base_deleted)
+ {
+ add_work = TRUE;
+ keep_op_depth = below_op_depth;
+ }
+ else
+ keep_op_depth = 0;
+ }
+ else
+ keep_op_depth = -1;
+ }
+
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ if (working_op_depth != 0) /* WORKING */
+ SVN_ERR(convert_to_working_status(&status, status));
if (status == svn_wc__db_status_deleted
|| status == svn_wc__db_status_not_present)
return SVN_NO_ERROR;
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_HAS_SERVER_EXCLUDED_NODES));
- SVN_ERR(svn_sqlite__bindf(stmt, "is",
- wcroot->wc_id, local_relpath));
- SVN_ERR(svn_sqlite__step(&have_row, stmt));
- if (have_row)
+ /* Don't copy BASE directories with server excluded nodes */
+ if (status == svn_wc__db_status_normal && kind == svn_node_dir)
{
- const char *absent_path = svn_sqlite__column_text(stmt, 0, scratch_pool);
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_HAS_SERVER_EXCLUDED_DESCENDANTS));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is",
+ wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ if (have_row)
+ {
+ const char *absent_path = svn_sqlite__column_text(stmt, 0,
+ scratch_pool);
- return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS,
+ return svn_error_createf(
+ SVN_ERR_WC_PATH_UNEXPECTED_STATUS,
svn_sqlite__reset(stmt),
_("Cannot delete '%s' as '%s' is excluded by server"),
path_for_error_message(wcroot, local_relpath,
scratch_pool),
path_for_error_message(wcroot, absent_path,
scratch_pool));
+ }
+ SVN_ERR(svn_sqlite__reset(stmt));
+ }
+ else if (status == svn_wc__db_status_server_excluded)
+ {
+ return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
+ _("Cannot delete '%s' as it is excluded by server"),
+ path_for_error_message(wcroot, local_relpath,
+ scratch_pool));
+ }
+ else if (status == svn_wc__db_status_excluded)
+ {
+ return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
+ _("Cannot delete '%s' as it is excluded"),
+ path_for_error_message(wcroot, local_relpath,
+ scratch_pool));
}
- SVN_ERR(svn_sqlite__reset(stmt));
- if (op_root)
+ if (b->moved_to_relpath)
{
- svn_boolean_t below_base;
- svn_boolean_t below_work;
- svn_wc__db_status_t below_status;
+ const char *moved_from_relpath = NULL;
+ struct moved_node_t *moved_node;
+ int move_op_depth;
+
+ moved_nodes = apr_array_make(scratch_pool, 1,
+ sizeof(struct moved_node_t *));
+
+ /* The node is being moved-away.
+ * Figure out if the node was moved-here before, or whether this
+ * is the first time the node is moved. */
+ if (status == svn_wc__db_status_added)
+ SVN_ERR(scan_addition(&status, NULL, NULL, NULL, NULL, NULL, NULL,
+ &moved_from_relpath,
+ NULL,
+ &move_op_depth,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool));
- /* Use STMT_SELECT_NODE_INFO directly instead of read_info plus
- info_below_working */
- SVN_ERR(info_below_working(&below_base, &below_work, &below_status,
- wcroot, local_relpath, -1, scratch_pool));
- if ((below_base || below_work)
- && below_status != svn_wc__db_status_not_present
- && below_status != svn_wc__db_status_deleted)
+ if (op_root && moved_from_relpath)
{
- add_work = TRUE;
- refetch_depth = TRUE;
+ const char *part = svn_relpath_skip_ancestor(local_relpath,
+ moved_from_relpath);
+
+ /* Existing move-root is moved to another location */
+ moved_node = apr_palloc(scratch_pool, sizeof(struct moved_node_t));
+ if (!part)
+ moved_node->local_relpath = moved_from_relpath;
+ else
+ moved_node->local_relpath = svn_relpath_join(b->moved_to_relpath,
+ part, scratch_pool);
+ moved_node->op_depth = move_op_depth;
+ moved_node->moved_to_relpath = b->moved_to_relpath;
+ moved_node->moved_from_depth = -1;
+
+ APR_ARRAY_PUSH(moved_nodes, const struct moved_node_t *) = moved_node;
+ }
+ else if (!op_root && (status == svn_wc__db_status_normal
+ || status == svn_wc__db_status_copied
+ || status == svn_wc__db_status_moved_here))
+ {
+ /* The node is becoming a move-root for the first time,
+ * possibly because of a nested move operation. */
+ moved_node = apr_palloc(scratch_pool, sizeof(struct moved_node_t));
+ moved_node->local_relpath = local_relpath;
+ moved_node->op_depth = delete_op_depth;
+ moved_node->moved_to_relpath = b->moved_to_relpath;
+ moved_node->moved_from_depth = -1;
+
+ APR_ARRAY_PUSH(moved_nodes, const struct moved_node_t *) = moved_node;
}
+ /* Else: We can't track history of local additions and/or of things we are
+ about to delete. */
- select_depth = relpath_depth(local_relpath);
+ /* And update all moved_to values still pointing to this location */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_UPDATE_MOVED_TO_DESCENDANTS));
+ SVN_ERR(svn_sqlite__bindf(stmt, "iss", wcroot->wc_id,
+ local_relpath,
+ b->moved_to_relpath));
+ SVN_ERR(svn_sqlite__update(NULL, stmt));
}
- else
+
+ /* Find children that were moved out of the subtree rooted at this node.
+ * We'll need to update their op-depth columns because their deletion
+ * is now implied by the deletion of their parent (i.e. this node). */
{
- add_work = TRUE;
- SVN_ERR(op_depth_of(&select_depth, wcroot, local_relpath));
+ apr_pool_t *iterpool;
+ int i;
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_MOVED_FOR_DELETE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id, local_relpath,
+ delete_op_depth));
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ iterpool = svn_pool_create(scratch_pool);
+ while (have_row)
+ {
+ struct moved_node_t *mn;
+ const char *child_relpath = svn_sqlite__column_text(stmt, 0, NULL);
+ const char *mv_to_relpath = svn_sqlite__column_text(stmt, 1, NULL);
+ int child_op_depth = svn_sqlite__column_int(stmt, 2);
+ int moved_from_depth = -1;
+ svn_boolean_t fixup = FALSE;
+
+ if (! b->moved_to_relpath
+ && ! svn_relpath_skip_ancestor(local_relpath, mv_to_relpath))
+ {
+ /* a NULL moved_here_depth will be reported as 0 */
+ int moved_here_depth = svn_sqlite__column_int(stmt, 3);
+
+ /* Plain delete. Fixup move information of descendants that were
+ moved here, or that were moved out */
+
+ if (moved_here_depth >= delete_op_depth)
+ {
+ /* The move we recorded here must be moved to the location
+ this node had before it was moved here.
+
+ This might contain multiple steps when the node was moved
+ in several places within the to be deleted tree */
+
+ /* ### TODO: Add logic */
+ fixup = TRUE;
+ moved_from_depth = moved_here_depth;
+ }
+ else
+ {
+ /* Update the op-depth of an moved away node that was
+ registered as moved by the records that we are about
+ to delete */
+ fixup = TRUE;
+ child_op_depth = delete_op_depth;
+ }
+ }
+ else if (b->moved_to_relpath)
+ {
+ /* The node is moved to a new location */
+
+ if (delete_op_depth == child_op_depth)
+ {
+ /* Update the op-depth of a tree shadowed by this tree */
+ fixup = TRUE;
+ /*child_op_depth = delete_depth;*/
+ }
+ else if (child_op_depth >= delete_op_depth
+ && !svn_relpath_skip_ancestor(local_relpath,
+ mv_to_relpath))
+ {
+ /* Update the move destination of something that is now moved
+ away further */
+
+ child_relpath = svn_relpath_skip_ancestor(local_relpath,
+ child_relpath);
+
+ if (child_relpath)
+ {
+ child_relpath = svn_relpath_join(b->moved_to_relpath,
+ child_relpath,
+ scratch_pool);
+
+ if (child_op_depth > delete_op_depth
+ && svn_relpath_skip_ancestor(local_relpath,
+ child_relpath))
+ child_op_depth = delete_op_depth;
+ else
+ {
+ /* Calculate depth of the shadowing at the new location */
+ child_op_depth = child_op_depth
+ - relpath_depth(local_relpath)
+ + relpath_depth(b->moved_to_relpath);
+ }
+
+ fixup = TRUE;
+ }
+ }
+ }
+
+ if (fixup)
+ {
+ mn = apr_palloc(scratch_pool, sizeof(struct moved_node_t));
+
+ mn->local_relpath = apr_pstrdup(scratch_pool, child_relpath);
+ mn->moved_to_relpath = apr_pstrdup(scratch_pool, mv_to_relpath);
+ mn->op_depth = child_op_depth;
+ mn->moved_from_depth = moved_from_depth;
+
+ if (!moved_nodes)
+ moved_nodes = apr_array_make(scratch_pool, 1,
+ sizeof(struct moved_node_t *));
+ APR_ARRAY_PUSH(moved_nodes, struct moved_node_t *) = mn;
+ }
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ }
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ for (i = 0; moved_nodes && (i < moved_nodes->nelts); i++)
+ {
+ struct moved_node_t *mn = APR_ARRAY_IDX(moved_nodes, i,
+ struct moved_node_t *);
+
+ if (mn->moved_from_depth > 0)
+ {
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(resolve_moved_from(&mn->local_relpath, &mn->op_depth,
+ wcroot, local_relpath,
+ mn->local_relpath,
+ mn->moved_from_depth,
+ scratch_pool, iterpool));
+
+ if (!mn->local_relpath)
+ svn_sort__array_delete(moved_nodes, i--, 1);
+ }
+ }
+
+ svn_pool_destroy(iterpool);
}
+ if (!b->moved_to_relpath)
+ {
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_CLEAR_MOVED_TO_DESCENDANTS));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id,
+ local_relpath));
+ SVN_ERR(svn_sqlite__update(NULL, stmt));
+
+ if (op_root)
+ {
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_CLEAR_MOVED_TO_FROM_DEST));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id,
+ local_relpath));
+
+ SVN_ERR(svn_sqlite__update(NULL, stmt));
+ }
+ }
+
+
/* ### Put actual-only nodes into the list? */
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_INSERT_DELETE_LIST));
- SVN_ERR(svn_sqlite__bindf(stmt, "isi",
- wcroot->wc_id, local_relpath, select_depth));
- SVN_ERR(svn_sqlite__step_done(stmt));
+ if (b->notify)
+ {
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_INSERT_DELETE_LIST));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd",
+ wcroot->wc_id, local_relpath, working_op_depth));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+ }
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_DELETE_NODES_RECURSIVE));
- SVN_ERR(svn_sqlite__bindf(stmt, "isi",
- wcroot->wc_id, local_relpath, b->delete_depth));
+ STMT_DELETE_NODES_ABOVE_DEPTH_RECURSIVE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd",
+ wcroot->wc_id, local_relpath, delete_op_depth));
SVN_ERR(svn_sqlite__step_done(stmt));
- if (refetch_depth)
- SVN_ERR(op_depth_of(&select_depth, wcroot, local_relpath));
-
/* Delete ACTUAL_NODE rows, but leave those that have changelist
and a NODES row. */
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
@@ -6239,14 +8044,105 @@ op_delete_txn(void *baton,
if (add_work)
{
+ /* Delete the node at LOCAL_RELPATH, and possibly mark it as moved. */
+
+ /* Delete the node and possible descendants. */
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_INSERT_DELETE_FROM_NODE_RECURSIVE));
- SVN_ERR(svn_sqlite__bindf(stmt, "isii",
+ SVN_ERR(svn_sqlite__bindf(stmt, "isdd",
wcroot->wc_id, local_relpath,
- select_depth, b->delete_depth));
+ keep_op_depth, delete_op_depth));
SVN_ERR(svn_sqlite__step_done(stmt));
}
+ if (moved_nodes)
+ {
+ int i;
+
+ for (i = 0; i < moved_nodes->nelts; ++i)
+ {
+ const struct moved_node_t *moved_node
+ = APR_ARRAY_IDX(moved_nodes, i, void *);
+
+ SVN_ERR(delete_update_movedto(wcroot,
+ moved_node->local_relpath,
+ moved_node->op_depth,
+ moved_node->moved_to_relpath,
+ scratch_pool));
+ }
+ }
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_DELETE_FILE_EXTERNALS));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ b->delete_dir_externals
+ ? STMT_DELETE_EXTERNAL_REGISTATIONS
+ : STMT_DELETE_FILE_EXTERNAL_REGISTATIONS));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+
+ SVN_ERR(add_work_items(wcroot->sdb, b->work_items, scratch_pool));
+ if (b->conflict)
+ SVN_ERR(svn_wc__db_mark_conflict_internal(wcroot, local_relpath,
+ b->conflict, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+op_delete_txn(void *baton,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *scratch_pool)
+{
+
+ SVN_ERR(svn_sqlite__exec_statements(wcroot->sdb, STMT_CREATE_DELETE_LIST));
+ SVN_ERR(delete_node(baton, wcroot, local_relpath, scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+
+struct op_delete_many_baton_t {
+ apr_array_header_t *rel_targets;
+ svn_boolean_t delete_dir_externals;
+ const svn_skel_t *work_items;
+} op_delete_many_baton_t;
+
+static svn_error_t *
+op_delete_many_txn(void *baton,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *scratch_pool)
+{
+ struct op_delete_many_baton_t *odmb = baton;
+ struct op_delete_baton_t odb;
+ int i;
+ apr_pool_t *iterpool;
+
+ odb.moved_to_relpath = NULL;
+ odb.conflict = NULL;
+ odb.work_items = NULL;
+ odb.delete_dir_externals = odmb->delete_dir_externals;
+ odb.notify = TRUE;
+
+ SVN_ERR(svn_sqlite__exec_statements(wcroot->sdb, STMT_CREATE_DELETE_LIST));
+ iterpool = svn_pool_create(scratch_pool);
+ for (i = 0; i < odmb->rel_targets->nelts; i++)
+ {
+ const char *target_relpath = APR_ARRAY_IDX(odmb->rel_targets, i,
+ const char *);
+
+
+ svn_pool_clear(iterpool);
+ SVN_ERR(delete_node(&odb, wcroot, target_relpath, iterpool));
+ }
+ svn_pool_destroy(iterpool);
+
+ SVN_ERR(add_work_items(wcroot->sdb, odmb->work_items, scratch_pool));
+
return SVN_NO_ERROR;
}
@@ -6276,9 +8172,6 @@ do_delete_notify(void *baton,
svn_pool_clear(iterpool);
- if (cancel_func)
- SVN_ERR(cancel_func(cancel_baton));
-
notify_relpath = svn_sqlite__column_text(stmt, 0, NULL);
notify_abspath = svn_dirent_join(wcroot->abspath,
notify_relpath,
@@ -6294,21 +8187,35 @@ do_delete_notify(void *baton,
}
svn_pool_destroy(iterpool);
- return svn_error_trace(svn_sqlite__reset(stmt));
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ /* We only allow cancellation after notification for all deleted nodes
+ * has happened. The nodes are already deleted so we should notify for
+ * all of them. */
+ if (cancel_func)
+ SVN_ERR(cancel_func(cancel_baton));
+
+ return SVN_NO_ERROR;
}
svn_error_t *
svn_wc__db_op_delete(svn_wc__db_t *db,
const char *local_abspath,
- svn_wc_notify_func2_t notify_func,
- void *notify_baton,
+ const char *moved_to_abspath,
+ svn_boolean_t delete_dir_externals,
+ svn_skel_t *conflict,
+ svn_skel_t *work_items,
svn_cancel_func_t cancel_func,
void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
apr_pool_t *scratch_pool)
{
svn_wc__db_wcroot_t *wcroot;
+ svn_wc__db_wcroot_t *moved_to_wcroot;
const char *local_relpath;
+ const char *moved_to_relpath;
struct op_delete_baton_t odb;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
@@ -6318,15 +8225,118 @@ svn_wc__db_op_delete(svn_wc__db_t *db,
scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- odb.delete_depth = relpath_depth(local_relpath);
+ if (moved_to_abspath)
+ {
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&moved_to_wcroot,
+ &moved_to_relpath,
+ db, moved_to_abspath,
+ scratch_pool,
+ scratch_pool));
+ VERIFY_USABLE_WCROOT(moved_to_wcroot);
+
+ if (strcmp(wcroot->abspath, moved_to_wcroot->abspath) != 0)
+ return svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
+ _("Cannot move '%s' to '%s' because they "
+ "are not in the same working copy"),
+ svn_dirent_local_style(local_abspath,
+ scratch_pool),
+ svn_dirent_local_style(moved_to_abspath,
+ scratch_pool));
+ }
+ else
+ moved_to_relpath = NULL;
+
+ odb.moved_to_relpath = moved_to_relpath;
+ odb.conflict = conflict;
+ odb.work_items = work_items;
+ odb.delete_dir_externals = delete_dir_externals;
+
+ if (notify_func)
+ {
+ /* Perform the deletion operation (transactionally), perform any
+ notifications necessary, and then clean out our temporary tables. */
+ odb.notify = TRUE;
+ SVN_ERR(with_finalization(wcroot, local_relpath,
+ op_delete_txn, &odb,
+ do_delete_notify, NULL,
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ STMT_FINALIZE_DELETE,
+ scratch_pool));
+ }
+ else
+ {
+ /* Avoid the trigger work */
+ odb.notify = FALSE;
+ SVN_WC__DB_WITH_TXN(
+ delete_node(&odb, wcroot, local_relpath, scratch_pool),
+ wcroot);
+ }
SVN_ERR(flush_entries(wcroot, local_abspath, svn_depth_infinity,
scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_wc__db_op_delete_many(svn_wc__db_t *db,
+ apr_array_header_t *targets,
+ svn_boolean_t delete_dir_externals,
+ const svn_skel_t *work_items,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_wcroot_t *wcroot;
+ const char *local_relpath;
+ struct op_delete_many_baton_t odmb;
+ int i;
+ apr_pool_t *iterpool;
+
+ odmb.rel_targets = apr_array_make(scratch_pool, targets->nelts,
+ sizeof(const char *));
+ odmb.work_items = work_items;
+ odmb.delete_dir_externals = delete_dir_externals;
+ iterpool = svn_pool_create(scratch_pool);
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath,
+ db,
+ APR_ARRAY_IDX(targets, 0,
+ const char *),
+ scratch_pool, iterpool));
+ VERIFY_USABLE_WCROOT(wcroot);
+ for (i = 0; i < targets->nelts; i++)
+ {
+ const char *local_abspath = APR_ARRAY_IDX(targets, i, const char*);
+ svn_wc__db_wcroot_t *target_wcroot;
+
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&target_wcroot,
+ &local_relpath, db,
+ APR_ARRAY_IDX(targets, i,
+ const char *),
+ scratch_pool, iterpool));
+ VERIFY_USABLE_WCROOT(target_wcroot);
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+
+ /* Assert that all targets are within the same working copy. */
+ SVN_ERR_ASSERT(wcroot->wc_id == target_wcroot->wc_id);
+
+ APR_ARRAY_PUSH(odmb.rel_targets, const char *) = local_relpath;
+ SVN_ERR(flush_entries(target_wcroot, local_abspath, svn_depth_infinity,
+ iterpool));
+
+ }
+ svn_pool_destroy(iterpool);
+
/* Perform the deletion operation (transactionally), perform any
notifications necessary, and then clean out our temporary tables. */
- return svn_error_trace(with_finalization(wcroot, local_relpath,
- op_delete_txn, &odb,
+ return svn_error_trace(with_finalization(wcroot, wcroot->abspath,
+ op_delete_many_txn, &odmb,
do_delete_notify, NULL,
cancel_func, cancel_baton,
notify_func, notify_baton,
@@ -6339,7 +8349,7 @@ svn_wc__db_op_delete(svn_wc__db_t *db,
DB+LOCAL_ABSPATH, and outputting repos ids instead of URL+UUID. */
static svn_error_t *
read_info(svn_wc__db_status_t *status,
- svn_wc__db_kind_t *kind,
+ svn_node_kind_t *kind,
svn_revnum_t *revision,
const char **repos_relpath,
apr_int64_t *repos_id,
@@ -6354,7 +8364,7 @@ read_info(svn_wc__db_status_t *status,
svn_revnum_t *original_revision,
svn_wc__db_lock_t **lock,
svn_filesize_t *recorded_size,
- apr_time_t *recorded_mod_time,
+ apr_time_t *recorded_time,
const char **changelist,
svn_boolean_t *conflicted,
svn_boolean_t *op_root,
@@ -6397,10 +8407,10 @@ read_info(svn_wc__db_status_t *status,
if (have_info)
{
- apr_int64_t op_depth;
- svn_wc__db_kind_t node_kind;
+ int op_depth;
+ svn_node_kind_t node_kind;
- op_depth = svn_sqlite__column_int64(stmt_info, 0);
+ op_depth = svn_sqlite__column_int(stmt_info, 0);
node_kind = svn_sqlite__column_token(stmt_info, 4, kind_map);
if (status)
@@ -6434,9 +8444,8 @@ read_info(svn_wc__db_status_t *status,
WORKING_NODE (and have been added), then the repository
we're being added to will be dependent upon a parent. The
caller can scan upwards to locate the repository. */
- err = svn_error_compose_create(
- err, repos_location_from_columns(repos_id, revision, repos_relpath,
- stmt_info, 1, 5, 2, result_pool));
+ repos_location_from_columns(repos_id, revision, repos_relpath,
+ stmt_info, 1, 5, 2, result_pool);
}
if (changed_rev)
{
@@ -6451,31 +8460,25 @@ read_info(svn_wc__db_status_t *status,
*changed_author = svn_sqlite__column_text(stmt_info, 10,
result_pool);
}
- if (recorded_mod_time)
+ if (recorded_time)
{
- *recorded_mod_time = svn_sqlite__column_int64(stmt_info, 13);
+ *recorded_time = svn_sqlite__column_int64(stmt_info, 13);
}
if (depth)
{
- if (node_kind != svn_wc__db_kind_dir)
+ if (node_kind != svn_node_dir)
{
*depth = svn_depth_unknown;
}
else
{
- const char *depth_str;
-
- depth_str = svn_sqlite__column_text(stmt_info, 11, NULL);
-
- if (depth_str == NULL)
- *depth = svn_depth_unknown;
- else
- *depth = svn_depth_from_word(depth_str);
+ *depth = svn_sqlite__column_token_null(stmt_info, 11, depth_map,
+ svn_depth_unknown);
}
}
if (checksum)
{
- if (node_kind != svn_wc__db_kind_file)
+ if (node_kind != svn_node_file)
{
*checksum = NULL;
}
@@ -6493,7 +8496,7 @@ read_info(svn_wc__db_status_t *status,
}
if (target)
{
- if (node_kind != svn_wc__db_kind_symlink)
+ if (node_kind != svn_node_symlink)
*target = NULL;
else
*target = svn_sqlite__column_text(stmt_info, 12, result_pool);
@@ -6501,7 +8504,7 @@ read_info(svn_wc__db_status_t *status,
if (changelist)
{
if (have_act)
- *changelist = svn_sqlite__column_text(stmt_act, 1, result_pool);
+ *changelist = svn_sqlite__column_text(stmt_act, 0, result_pool);
else
*changelist = NULL;
}
@@ -6516,15 +8519,14 @@ read_info(svn_wc__db_status_t *status,
}
else
{
- err = svn_error_compose_create(
- err, repos_location_from_columns(original_repos_id,
- original_revision,
- original_repos_relpath,
- stmt_info, 1, 5, 2, result_pool));
+ repos_location_from_columns(original_repos_id,
+ original_revision,
+ original_repos_relpath,
+ stmt_info, 1, 5, 2, result_pool);
}
if (props_mod)
{
- *props_mod = have_act && !svn_sqlite__column_is_null(stmt_act, 6);
+ *props_mod = have_act && !svn_sqlite__column_is_null(stmt_act, 1);
}
if (had_props)
{
@@ -6535,11 +8537,7 @@ read_info(svn_wc__db_status_t *status,
if (have_act)
{
*conflicted =
- !svn_sqlite__column_is_null(stmt_act, 2) || /* old */
- !svn_sqlite__column_is_null(stmt_act, 3) || /* new */
- !svn_sqlite__column_is_null(stmt_act, 4) || /* working */
- !svn_sqlite__column_is_null(stmt_act, 0) || /* prop_reject */
- !svn_sqlite__column_is_null(stmt_act, 5); /* tree_conflict_data */
+ !svn_sqlite__column_is_null(stmt_act, 2); /* conflict_data */
}
else
*conflicted = FALSE;
@@ -6550,7 +8548,7 @@ read_info(svn_wc__db_status_t *status,
if (op_depth != 0)
*lock = NULL;
else
- *lock = lock_from_columns(stmt_info, 15, 16, 17, 18, result_pool);
+ *lock = lock_from_columns(stmt_info, 17, 18, 19, 20, result_pool);
}
if (have_work)
@@ -6574,7 +8572,7 @@ read_info(svn_wc__db_status_t *status,
if (err || !have_info)
break;
- op_depth = svn_sqlite__column_int64(stmt_info, 0);
+ op_depth = svn_sqlite__column_int(stmt_info, 0);
if (have_more_work)
{
@@ -6594,7 +8592,7 @@ read_info(svn_wc__db_status_t *status,
{
/* A row in ACTUAL_NODE should never exist without a corresponding
node in BASE_NODE and/or WORKING_NODE unless it flags a tree conflict. */
- if (svn_sqlite__column_is_null(stmt_act, 5)) /* tree_conflict_data */
+ if (svn_sqlite__column_is_null(stmt_act, 2)) /* conflict_data */
err = svn_error_createf(SVN_ERR_WC_CORRUPT, NULL,
_("Corrupt data for '%s'"),
path_for_error_message(wcroot, local_relpath,
@@ -6610,7 +8608,7 @@ read_info(svn_wc__db_status_t *status,
if (status)
*status = svn_wc__db_status_normal; /* What! No it's not! */
if (kind)
- *kind = svn_wc__db_kind_unknown;
+ *kind = svn_node_unknown;
if (revision)
*revision = SVN_INVALID_REVNUM;
if (repos_relpath)
@@ -6637,10 +8635,10 @@ read_info(svn_wc__db_status_t *status,
*lock = NULL;
if (recorded_size)
*recorded_size = 0;
- if (recorded_mod_time)
- *recorded_mod_time = 0;
+ if (recorded_time)
+ *recorded_time = 0;
if (changelist)
- *changelist = svn_sqlite__column_text(stmt_act, 1, result_pool);
+ *changelist = svn_sqlite__column_text(stmt_act, 0, result_pool);
if (op_root)
*op_root = FALSE;
if (had_props)
@@ -6668,7 +8666,7 @@ read_info(svn_wc__db_status_t *status,
err = svn_error_compose_create(err, svn_sqlite__reset(stmt_act));
if (err && err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND)
- err = svn_error_quick_wrap(err,
+ err = svn_error_quick_wrap(err,
apr_psprintf(scratch_pool,
"Error reading node '%s'",
local_relpath));
@@ -6681,7 +8679,7 @@ read_info(svn_wc__db_status_t *status,
svn_error_t *
svn_wc__db_read_info_internal(svn_wc__db_status_t *status,
- svn_wc__db_kind_t *kind,
+ svn_node_kind_t *kind,
svn_revnum_t *revision,
const char **repos_relpath,
apr_int64_t *repos_id,
@@ -6696,7 +8694,7 @@ svn_wc__db_read_info_internal(svn_wc__db_status_t *status,
svn_revnum_t *original_revision,
svn_wc__db_lock_t **lock,
svn_filesize_t *recorded_size,
- apr_time_t *recorded_mod_time,
+ apr_time_t *recorded_time,
const char **changelist,
svn_boolean_t *conflicted,
svn_boolean_t *op_root,
@@ -6715,7 +8713,7 @@ svn_wc__db_read_info_internal(svn_wc__db_status_t *status,
changed_rev, changed_date, changed_author,
depth, checksum, target, original_repos_relpath,
original_repos_id, original_revision, lock,
- recorded_size, recorded_mod_time, changelist, conflicted,
+ recorded_size, recorded_time, changelist, conflicted,
op_root, had_props, props_mod,
have_base, have_more_work, have_work,
wcroot, local_relpath, result_pool, scratch_pool));
@@ -6724,7 +8722,7 @@ svn_wc__db_read_info_internal(svn_wc__db_status_t *status,
svn_error_t *
svn_wc__db_read_info(svn_wc__db_status_t *status,
- svn_wc__db_kind_t *kind,
+ svn_node_kind_t *kind,
svn_revnum_t *revision,
const char **repos_relpath,
const char **repos_root_url,
@@ -6741,7 +8739,7 @@ svn_wc__db_read_info(svn_wc__db_status_t *status,
svn_revnum_t *original_revision,
svn_wc__db_lock_t **lock,
svn_filesize_t *recorded_size,
- apr_time_t *recorded_mod_time,
+ apr_time_t *recorded_time,
const char **changelist,
svn_boolean_t *conflicted,
svn_boolean_t *op_root,
@@ -6765,60 +8763,54 @@ svn_wc__db_read_info(svn_wc__db_status_t *status,
local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- SVN_ERR(read_info(status, kind, revision, repos_relpath, &repos_id,
+ SVN_WC__DB_WITH_TXN4(
+ read_info(status, kind, revision, repos_relpath, &repos_id,
changed_rev, changed_date, changed_author,
depth, checksum, target, original_repos_relpath,
&original_repos_id, original_revision, lock,
- recorded_size, recorded_mod_time, changelist, conflicted,
+ recorded_size, recorded_time, changelist, conflicted,
op_root, have_props, props_mod,
have_base, have_more_work, have_work,
- wcroot, local_relpath, result_pool, scratch_pool));
- SVN_ERR(fetch_repos_info(repos_root_url, repos_uuid,
- wcroot->sdb, repos_id, result_pool));
- SVN_ERR(fetch_repos_info(original_root_url, original_uuid,
- wcroot->sdb, original_repos_id, result_pool));
+ wcroot, local_relpath, result_pool, scratch_pool),
+ svn_wc__db_fetch_repos_info(repos_root_url, repos_uuid,
+ wcroot->sdb, repos_id, result_pool),
+ svn_wc__db_fetch_repos_info(original_root_url, original_uuid,
+ wcroot->sdb, original_repos_id,
+ result_pool),
+ SVN_NO_ERROR,
+ wcroot);
return SVN_NO_ERROR;
}
static svn_error_t *
-is_wclocked(void *baton,
+is_wclocked(svn_boolean_t *locked,
svn_wc__db_wcroot_t *wcroot,
const char *dir_relpath,
apr_pool_t *scratch_pool);
-/* baton for read_children_info() */
-struct read_children_info_baton_t
-{
- apr_hash_t *nodes;
- apr_hash_t *conflicts;
- apr_pool_t *result_pool;
-};
-
/* What we really want to store about a node. This relies on the
offset of svn_wc__db_info_t being zero. */
struct read_children_info_item_t
{
struct svn_wc__db_info_t info;
- apr_int64_t op_depth;
+ int op_depth;
int nr_layers;
};
static svn_error_t *
-read_children_info(void *baton,
- svn_wc__db_wcroot_t *wcroot,
+read_children_info(svn_wc__db_wcroot_t *wcroot,
const char *dir_relpath,
+ apr_hash_t *conflicts,
+ apr_hash_t *nodes,
+ apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- struct read_children_info_baton_t *rci = baton;
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
const char *repos_root_url = NULL;
const char *repos_uuid = NULL;
apr_int64_t last_repos_id = INVALID_REPOS_ID;
- apr_hash_t *nodes = rci->nodes;
- apr_hash_t *conflicts = rci->conflicts;
- apr_pool_t *result_pool = rci->result_pool;
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_SELECT_NODE_CHILDREN_INFO));
@@ -6833,10 +8825,10 @@ read_children_info(void *baton,
const char *child_relpath = svn_sqlite__column_text(stmt, 19, NULL);
const char *name = svn_relpath_basename(child_relpath, NULL);
svn_error_t *err;
- apr_int64_t op_depth;
+ int op_depth;
svn_boolean_t new_child;
- child_item = apr_hash_get(nodes, name, APR_HASH_KEY_STRING);
+ child_item = svn_hash_gets(nodes, name);
if (child_item)
new_child = FALSE;
else
@@ -6884,7 +8876,6 @@ read_children_info(void *baton,
else
{
const char *last_repos_root_url = NULL;
- const char *last_repos_uuid = NULL;
apr_int64_t repos_id = svn_sqlite__column_int64(stmt, 1);
if (!repos_root_url ||
@@ -6892,9 +8883,10 @@ read_children_info(void *baton,
repos_id != last_repos_id))
{
last_repos_root_url = repos_root_url;
- last_repos_uuid = repos_uuid;
- err = fetch_repos_info(&repos_root_url, &repos_uuid,
- wcroot->sdb, repos_id, result_pool);
+ err = svn_wc__db_fetch_repos_info(&repos_root_url,
+ &repos_uuid,
+ wcroot->sdb, repos_id,
+ result_pool);
if (err)
SVN_ERR(svn_error_compose_create(err,
svn_sqlite__reset(stmt)));
@@ -6906,13 +8898,16 @@ read_children_info(void *baton,
/* Assume working copy is all one repos_id so that a
single cached value is sufficient. */
if (repos_id != last_repos_id)
- return svn_error_createf(
+ {
+ err= svn_error_createf(
SVN_ERR_WC_DB_ERROR, NULL,
_("The node '%s' comes from unexpected repository "
"'%s', expected '%s'; if this node is a file "
"external using the correct URL in the external "
"definition can fix the problem, see issue #4087"),
child_relpath, repos_root_url, last_repos_root_url);
+ return svn_error_compose_create(err, svn_sqlite__reset(stmt));
+ }
child->repos_root_url = repos_root_url;
child->repos_uuid = repos_uuid;
}
@@ -6924,25 +8919,21 @@ read_children_info(void *baton,
child->changed_author = svn_sqlite__column_text(stmt, 10,
result_pool);
- if (child->kind != svn_wc__db_kind_dir)
+ if (child->kind != svn_node_dir)
child->depth = svn_depth_unknown;
else
{
- const char *depth = svn_sqlite__column_text(stmt, 11,
- scratch_pool);
- if (depth)
- child->depth = svn_depth_from_word(depth);
- else
- child->depth = svn_depth_unknown;
-
+ child->depth = svn_sqlite__column_token_null(stmt, 11, depth_map,
+ svn_depth_unknown);
if (new_child)
SVN_ERR(is_wclocked(&child->locked, wcroot, child_relpath,
scratch_pool));
}
- child->recorded_mod_time = svn_sqlite__column_int64(stmt, 13);
+ child->recorded_time = svn_sqlite__column_int64(stmt, 13);
child->recorded_size = get_recorded_size(stmt, 7);
child->has_checksum = !svn_sqlite__column_is_null(stmt, 6);
+ child->copied = op_depth > 0 && !svn_sqlite__column_is_null(stmt, 2);
child->had_props = SQLITE_PROPERTIES_AVAILABLE(stmt, 14);
#ifdef HAVE_SYMLINK
if (child->had_props)
@@ -6954,8 +8945,7 @@ read_children_info(void *baton,
SVN_ERR(svn_error_compose_create(err, svn_sqlite__reset(stmt)));
child->special = (child->had_props
- && apr_hash_get(properties, SVN_PROP_SPECIAL,
- APR_HASH_KEY_STRING));
+ && svn_hash_gets(properties, SVN_PROP_SPECIAL));
}
#endif
if (op_depth == 0)
@@ -6963,29 +8953,77 @@ read_children_info(void *baton,
else
child->op_root = (op_depth == relpath_depth(child_relpath));
- apr_hash_set(nodes, apr_pstrdup(result_pool, name),
- APR_HASH_KEY_STRING, child);
+ if (op_depth && child->op_root)
+ child_item->info.moved_here = svn_sqlite__column_boolean(stmt, 20);
+
+ if (new_child)
+ svn_hash_sets(nodes, apr_pstrdup(result_pool, name), child);
}
if (op_depth == 0)
{
child_item->info.have_base = TRUE;
- /* Get the lock info. The query only reports lock info in the row at
- * op_depth 0. */
- if (op_depth == 0)
- child_item->info.lock = lock_from_columns(stmt, 15, 16, 17, 18,
- result_pool);
+ /* Get the lock info, available only at op_depth 0. */
+ child_item->info.lock = lock_from_columns(stmt, 15, 16, 17, 18,
+ result_pool);
+
+ /* FILE_EXTERNAL flag only on op_depth 0. */
+ child_item->info.file_external = svn_sqlite__column_boolean(stmt,
+ 22);
}
else
{
+ const char *moved_to_relpath;
+
child_item->nr_layers++;
child_item->info.have_more_work = (child_item->nr_layers > 1);
+
+
+ /* A local_relpath can be moved multiple times at different op
+ depths and it really depends on the caller what is interesting.
+ We provide a simple linked list with the moved_from information */
+
+ moved_to_relpath = svn_sqlite__column_text(stmt, 21, NULL);
+ if (moved_to_relpath)
+ {
+ struct svn_wc__db_moved_to_info_t *moved_to;
+ struct svn_wc__db_moved_to_info_t **next;
+ const char *shadow_op_relpath;
+ int cur_op_depth;
+
+ moved_to = apr_pcalloc(result_pool, sizeof(*moved_to));
+ moved_to->moved_to_abspath = svn_dirent_join(wcroot->abspath,
+ moved_to_relpath,
+ result_pool);
+
+ cur_op_depth = relpath_depth(child_relpath);
+ shadow_op_relpath = child_relpath;
+
+ while (cur_op_depth > op_depth)
+ {
+ shadow_op_relpath = svn_relpath_dirname(shadow_op_relpath,
+ scratch_pool);
+ cur_op_depth--;
+ }
+
+ moved_to->shadow_op_root_abspath =
+ svn_dirent_join(wcroot->abspath, shadow_op_relpath,
+ result_pool);
+
+ next = &child_item->info.moved_to;
+
+ while (*next &&
+ 0 < strcmp((*next)->shadow_op_root_abspath,
+ moved_to->shadow_op_root_abspath))
+ next = &((*next)->next);
+
+ moved_to->next = *next;
+ *next = moved_to;
+ }
}
- err = svn_sqlite__step(&have_row, stmt);
- if (err)
- SVN_ERR(svn_error_compose_create(err, svn_sqlite__reset(stmt)));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
}
SVN_ERR(svn_sqlite__reset(stmt));
@@ -6999,11 +9037,10 @@ read_children_info(void *baton,
{
struct read_children_info_item_t *child_item;
struct svn_wc__db_info_t *child;
- const char *child_relpath = svn_sqlite__column_text(stmt, 7, NULL);
+ const char *child_relpath = svn_sqlite__column_text(stmt, 0, NULL);
const char *name = svn_relpath_basename(child_relpath, NULL);
- svn_error_t *err;
- child_item = apr_hash_get(nodes, name, APR_HASH_KEY_STRING);
+ child_item = svn_hash_gets(nodes, name);
if (!child_item)
{
child_item = apr_pcalloc(result_pool, sizeof(*child_item));
@@ -7014,34 +9051,28 @@ read_children_info(void *baton,
child->changelist = svn_sqlite__column_text(stmt, 1, result_pool);
- child->props_mod = !svn_sqlite__column_is_null(stmt, 6);
+ child->props_mod = !svn_sqlite__column_is_null(stmt, 2);
#ifdef HAVE_SYMLINK
if (child->props_mod)
{
+ svn_error_t *err;
apr_hash_t *properties;
- err = svn_sqlite__column_properties(&properties, stmt, 6,
+ err = svn_sqlite__column_properties(&properties, stmt, 2,
scratch_pool, scratch_pool);
if (err)
SVN_ERR(svn_error_compose_create(err, svn_sqlite__reset(stmt)));
- child->special = (NULL != apr_hash_get(properties, SVN_PROP_SPECIAL,
- APR_HASH_KEY_STRING));
+ child->special = (NULL != svn_hash_gets(properties,
+ SVN_PROP_SPECIAL));
}
#endif
- child->conflicted = !svn_sqlite__column_is_null(stmt, 2) || /* old */
- !svn_sqlite__column_is_null(stmt, 3) || /* new */
- !svn_sqlite__column_is_null(stmt, 4) || /* work */
- !svn_sqlite__column_is_null(stmt, 0) || /* prop */
- !svn_sqlite__column_is_null(stmt, 5); /* tree */
+ child->conflicted = !svn_sqlite__column_is_null(stmt, 3); /* conflict */
if (child->conflicted)
- apr_hash_set(conflicts, apr_pstrdup(result_pool, name),
- APR_HASH_KEY_STRING, "");
+ svn_hash_sets(conflicts, apr_pstrdup(result_pool, name), "");
- err = svn_sqlite__step(&have_row, stmt);
- if (err)
- SVN_ERR(svn_error_compose_create(err, svn_sqlite__reset(stmt)));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
}
SVN_ERR(svn_sqlite__reset(stmt));
@@ -7057,7 +9088,6 @@ svn_wc__db_read_children_info(apr_hash_t **nodes,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- struct read_children_info_baton_t rci;
svn_wc__db_wcroot_t *wcroot;
const char *dir_relpath;
@@ -7070,19 +9100,189 @@ svn_wc__db_read_children_info(apr_hash_t **nodes,
scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- rci.result_pool = result_pool;
- rci.conflicts = *conflicts;
- rci.nodes = *nodes;
+ SVN_WC__DB_WITH_TXN(
+ read_children_info(wcroot, dir_relpath, *conflicts, *nodes,
+ result_pool, scratch_pool),
+ wcroot);
- SVN_ERR(svn_wc__db_with_txn(wcroot, dir_relpath, read_children_info, &rci,
- scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+db_read_props(apr_hash_t **props,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+static svn_error_t *
+read_single_info(const struct svn_wc__db_info_t **info,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct svn_wc__db_info_t *mtb;
+ apr_int64_t repos_id;
+ const svn_checksum_t *checksum;
+ const char *original_repos_relpath;
+ svn_boolean_t have_work;
+
+ mtb = apr_pcalloc(result_pool, sizeof(*mtb));
+
+ SVN_ERR(read_info(&mtb->status, &mtb->kind, &mtb->revnum,
+ &mtb->repos_relpath, &repos_id, &mtb->changed_rev,
+ &mtb->changed_date, &mtb->changed_author, &mtb->depth,
+ &checksum, NULL, &original_repos_relpath, NULL, NULL,
+ &mtb->lock, &mtb->recorded_size, &mtb->recorded_time,
+ &mtb->changelist, &mtb->conflicted, &mtb->op_root,
+ &mtb->had_props, &mtb->props_mod, &mtb->have_base,
+ &mtb->have_more_work, &have_work,
+ wcroot, local_relpath,
+ result_pool, scratch_pool));
+
+ /* Query the same rows in the database again for move information */
+ if (have_work && (mtb->have_base || mtb->have_more_work))
+ {
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+ const char *cur_relpath = NULL;
+ int cur_op_depth;
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_MOVED_TO_NODE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+
+ while (have_row)
+ {
+ struct svn_wc__db_moved_to_info_t *move;
+ int op_depth = svn_sqlite__column_int(stmt, 0);
+ const char *moved_to_relpath = svn_sqlite__column_text(stmt, 1, NULL);
+
+ move = apr_pcalloc(result_pool, sizeof(*move));
+ move->moved_to_abspath = svn_dirent_join(wcroot->abspath,
+ moved_to_relpath,
+ result_pool);
+
+ if (!cur_relpath)
+ {
+ cur_relpath = local_relpath;
+ cur_op_depth = relpath_depth(cur_relpath);
+ }
+ while (cur_op_depth > op_depth)
+ {
+ cur_relpath = svn_relpath_dirname(cur_relpath, scratch_pool);
+ cur_op_depth--;
+ }
+ move->shadow_op_root_abspath = svn_dirent_join(wcroot->abspath,
+ cur_relpath,
+ result_pool);
+
+ move->next = mtb->moved_to;
+ mtb->moved_to = move;
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ }
+
+ SVN_ERR(svn_sqlite__reset(stmt));
+ }
+
+ /* Maybe we have to get some shadowed lock from BASE to make our test suite
+ happy... (It might be completely unrelated, but...)
+ This queries the same BASE row again, joined to the lock table */
+ if (mtb->have_base && (have_work || mtb->kind == svn_node_file))
+ {
+ svn_boolean_t update_root;
+ svn_wc__db_lock_t **lock_arg = NULL;
+
+ if (have_work)
+ lock_arg = &mtb->lock;
+
+ SVN_ERR(svn_wc__db_base_get_info_internal(NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, lock_arg, NULL, NULL,
+ &update_root,
+ wcroot, local_relpath,
+ result_pool, scratch_pool));
+
+ mtb->file_external = (update_root && mtb->kind == svn_node_file);
+ }
+
+ if (mtb->status == svn_wc__db_status_added)
+ {
+ svn_wc__db_status_t status;
+
+ SVN_ERR(scan_addition(&status, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL,
+ wcroot, local_relpath,
+ result_pool, scratch_pool));
+
+ mtb->moved_here = (status == svn_wc__db_status_moved_here);
+ mtb->incomplete = (status == svn_wc__db_status_incomplete);
+ }
+
+#ifdef HAVE_SYMLINK
+ if (mtb->kind == svn_node_file
+ && (mtb->had_props || mtb->props_mod))
+ {
+ apr_hash_t *properties;
+
+ if (mtb->props_mod)
+ SVN_ERR(db_read_props(&properties,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool));
+ else
+ SVN_ERR(db_read_pristine_props(&properties, wcroot, local_relpath,
+ TRUE /* deleted_ok */,
+ scratch_pool, scratch_pool));
+
+ mtb->special = (NULL != svn_hash_gets(properties, SVN_PROP_SPECIAL));
+ }
+#endif
+
+ mtb->has_checksum = (checksum != NULL);
+ mtb->copied = (original_repos_relpath != NULL);
+
+ SVN_ERR(svn_wc__db_fetch_repos_info(&mtb->repos_root_url, &mtb->repos_uuid,
+ wcroot->sdb, repos_id, result_pool));
+
+ if (mtb->kind == svn_node_dir)
+ SVN_ERR(is_wclocked(&mtb->locked, wcroot, local_relpath, scratch_pool));
+
+ *info = mtb;
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__db_read_single_info(const struct svn_wc__db_info_t **info,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_wcroot_t *wcroot;
+ const char *local_relpath;
+
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
+ local_abspath,
+ scratch_pool, scratch_pool));
+ VERIFY_USABLE_WCROOT(wcroot);
+
+ SVN_WC__DB_WITH_TXN(read_single_info(info, wcroot, local_relpath,
+ result_pool, scratch_pool),
+ wcroot);
return SVN_NO_ERROR;
}
svn_error_t *
svn_wc__db_read_pristine_info(svn_wc__db_status_t *status,
- svn_wc__db_kind_t *kind,
+ svn_node_kind_t *kind,
svn_revnum_t *changed_rev,
apr_time_t *changed_date,
const char **changed_author,
@@ -7090,6 +9290,7 @@ svn_wc__db_read_pristine_info(svn_wc__db_status_t *status,
const svn_checksum_t **checksum, /* files only */
const char **target, /* symlinks only */
svn_boolean_t *had_props,
+ apr_hash_t **props,
svn_wc__db_t *db,
const char *local_abspath,
apr_pool_t *result_pool,
@@ -7100,9 +9301,9 @@ svn_wc__db_read_pristine_info(svn_wc__db_status_t *status,
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
svn_error_t *err = NULL;
- apr_int64_t op_depth;
+ int op_depth;
svn_wc__db_status_t raw_status;
- svn_wc__db_kind_t node_kind;
+ svn_node_kind_t node_kind;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
@@ -7128,14 +9329,14 @@ svn_wc__db_read_pristine_info(svn_wc__db_status_t *status,
scratch_pool));
}
- op_depth = svn_sqlite__column_int64(stmt, 0);
+ op_depth = svn_sqlite__column_int(stmt, 0);
raw_status = svn_sqlite__column_token(stmt, 3, presence_map);
if (op_depth > 0 && raw_status == svn_wc__db_status_base_deleted)
{
SVN_ERR(svn_sqlite__step_row(stmt));
- op_depth = svn_sqlite__column_int64(stmt, 0);
+ op_depth = svn_sqlite__column_int(stmt, 0);
raw_status = svn_sqlite__column_token(stmt, 3, presence_map);
}
@@ -7172,25 +9373,19 @@ svn_wc__db_read_pristine_info(svn_wc__db_status_t *status,
}
if (depth)
{
- if (node_kind != svn_wc__db_kind_dir)
+ if (node_kind != svn_node_dir)
{
*depth = svn_depth_unknown;
}
else
{
- const char *depth_str;
-
- depth_str = svn_sqlite__column_text(stmt, 11, NULL);
-
- if (depth_str == NULL)
- *depth = svn_depth_unknown;
- else
- *depth = svn_depth_from_word(depth_str);
+ *depth = svn_sqlite__column_token_null(stmt, 11, depth_map,
+ svn_depth_unknown);
}
}
if (checksum)
{
- if (node_kind != svn_wc__db_kind_file)
+ if (node_kind != svn_node_file)
{
*checksum = NULL;
}
@@ -7216,7 +9411,7 @@ svn_wc__db_read_pristine_info(svn_wc__db_status_t *status,
}
if (target)
{
- if (node_kind != svn_wc__db_kind_symlink)
+ if (node_kind != svn_node_symlink)
*target = NULL;
else
*target = svn_sqlite__column_text(stmt, 12, result_pool);
@@ -7225,6 +9420,22 @@ svn_wc__db_read_pristine_info(svn_wc__db_status_t *status,
{
*had_props = SQLITE_PROPERTIES_AVAILABLE(stmt, 14);
}
+ if (props)
+ {
+ if (raw_status == svn_wc__db_status_normal
+ || raw_status == svn_wc__db_status_incomplete)
+ {
+ SVN_ERR(svn_sqlite__column_properties(props, stmt, 14,
+ result_pool, scratch_pool));
+ if (*props == NULL)
+ *props = apr_hash_make(result_pool);
+ }
+ else
+ {
+ assert(svn_sqlite__column_is_null(stmt, 14));
+ *props = NULL;
+ }
+ }
return svn_error_trace(
svn_error_compose_create(err,
@@ -7261,7 +9472,7 @@ svn_wc__db_read_children_walker_info(apr_hash_t **nodes,
struct svn_wc__db_walker_info_t *child;
const char *child_relpath = svn_sqlite__column_text(stmt, 0, NULL);
const char *name = svn_relpath_basename(child_relpath, NULL);
- apr_int64_t op_depth = svn_sqlite__column_int(stmt, 1);
+ int op_depth = svn_sqlite__column_int(stmt, 1);
svn_error_t *err;
child = apr_palloc(result_pool, sizeof(*child));
@@ -7273,12 +9484,9 @@ svn_wc__db_read_children_walker_info(apr_hash_t **nodes,
SVN_ERR(svn_error_compose_create(err, svn_sqlite__reset(stmt)));
}
child->kind = svn_sqlite__column_token(stmt, 3, kind_map);
- apr_hash_set(*nodes, apr_pstrdup(result_pool, name),
- APR_HASH_KEY_STRING, child);
+ svn_hash_sets(*nodes, apr_pstrdup(result_pool, name), child);
- err = svn_sqlite__step(&have_row, stmt);
- if (err)
- SVN_ERR(svn_error_compose_create(err, svn_sqlite__reset(stmt)));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
}
SVN_ERR(svn_sqlite__reset(stmt));
@@ -7341,8 +9549,13 @@ svn_wc__db_read_node_install_info(const char **wcroot_abspath,
err = svn_sqlite__column_checksum(sha1_checksum, stmt, 6, result_pool);
if (!err && pristine_props)
- err = svn_sqlite__column_properties(pristine_props, stmt, 14,
- result_pool, scratch_pool);
+ {
+ err = svn_sqlite__column_properties(pristine_props, stmt, 14,
+ result_pool, scratch_pool);
+ /* Null means no props (assuming presence normal or incomplete). */
+ if (*pristine_props == NULL)
+ *pristine_props = apr_hash_make(result_pool);
+ }
if (changed_date)
*changed_date = svn_sqlite__column_int64(stmt, 9);
@@ -7361,19 +9574,15 @@ svn_wc__db_read_node_install_info(const char **wcroot_abspath,
-struct read_url_baton_t {
- const char **url;
- apr_pool_t *result_pool;
-};
-
-
+/* The body of svn_wc__db_read_url().
+ */
static svn_error_t *
-read_url_txn(void *baton,
+read_url_txn(const char **url,
svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
+ apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- struct read_url_baton_t *rub = baton;
svn_wc__db_status_t status;
const char *repos_relpath;
const char *repos_root_url;
@@ -7391,7 +9600,8 @@ read_url_txn(void *baton,
if (status == svn_wc__db_status_added)
{
SVN_ERR(scan_addition(NULL, NULL, &repos_relpath, &repos_id, NULL,
- NULL, NULL, wcroot, local_relpath,
+ NULL, NULL, NULL, NULL, NULL,
+ wcroot, local_relpath,
scratch_pool, scratch_pool));
}
else if (status == svn_wc__db_status_deleted)
@@ -7399,17 +9609,25 @@ read_url_txn(void *baton,
const char *base_del_relpath;
const char *work_del_relpath;
- SVN_ERR(scan_deletion(&base_del_relpath, NULL, &work_del_relpath,
- wcroot, local_relpath,
- scratch_pool, scratch_pool));
+ SVN_ERR(scan_deletion_txn(&base_del_relpath, NULL,
+ &work_del_relpath,
+ NULL, wcroot,
+ local_relpath,
+ scratch_pool,
+ scratch_pool));
if (base_del_relpath)
{
- SVN_ERR(base_get_info(NULL, NULL, NULL, &repos_relpath,
- &repos_id, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- wcroot, base_del_relpath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_base_get_info_internal(NULL, NULL, NULL,
+ &repos_relpath,
+ &repos_id,
+ NULL, NULL, NULL,
+ NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ wcroot,
+ base_del_relpath,
+ scratch_pool,
+ scratch_pool));
repos_relpath = svn_relpath_join(
repos_relpath,
@@ -7431,7 +9649,7 @@ read_url_txn(void *baton,
scratch_pool);
SVN_ERR(scan_addition(NULL, NULL, &repos_relpath, &repos_id,
- NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
wcroot, work_relpath,
scratch_pool, scratch_pool));
@@ -7446,8 +9664,7 @@ read_url_txn(void *baton,
{
const char *parent_relpath;
const char *name;
- struct read_url_baton_t new_rub;
- const char *url;
+ const char *url2;
/* Set 'url' to the *full URL* of the parent WC dir,
* and 'name' to the *single path component* that is the
@@ -7455,12 +9672,10 @@ read_url_txn(void *baton,
* in the correct full URL. */
svn_relpath_split(&parent_relpath, &name, local_relpath,
scratch_pool);
- new_rub.result_pool = scratch_pool;
- new_rub.url = &url;
- SVN_ERR(read_url_txn(&new_rub, wcroot, parent_relpath,
- scratch_pool));
+ SVN_ERR(read_url_txn(&url2, wcroot, parent_relpath,
+ scratch_pool, scratch_pool));
- *rub->url = svn_path_url_add_component2(url, name, rub->result_pool);
+ *url = svn_path_url_add_component2(url2, name, result_pool);
return SVN_NO_ERROR;
}
@@ -7472,29 +9687,12 @@ read_url_txn(void *baton,
}
}
- SVN_ERR(fetch_repos_info(&repos_root_url, NULL, wcroot->sdb, repos_id,
- scratch_pool));
+ SVN_ERR(svn_wc__db_fetch_repos_info(&repos_root_url, NULL, wcroot->sdb,
+ repos_id, scratch_pool));
SVN_ERR_ASSERT(repos_root_url != NULL && repos_relpath != NULL);
- *rub->url = svn_path_url_add_component2(repos_root_url, repos_relpath,
- rub->result_pool);
-
- return SVN_NO_ERROR;
-}
-
-
-static svn_error_t *
-read_url(const char **url,
- svn_wc__db_wcroot_t *wcroot,
- const char *local_relpath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- struct read_url_baton_t rub;
- rub.url = url;
- rub.result_pool = result_pool;
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, read_url_txn, &rub,
- scratch_pool));
+ *url = svn_path_url_add_component2(repos_root_url, repos_relpath,
+ result_pool);
return SVN_NO_ERROR;
}
@@ -7517,8 +9715,11 @@ svn_wc__db_read_url(const char **url,
scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- return svn_error_trace(read_url(url, wcroot, local_relpath, result_pool,
- scratch_pool));
+ SVN_WC__DB_WITH_TXN(read_url_txn(url, wcroot, local_relpath,
+ result_pool, scratch_pool),
+ wcroot);
+
+ return SVN_NO_ERROR;
}
@@ -7532,7 +9733,6 @@ svn_wc__db_read_url(const char **url,
typedef struct cache_props_baton_t
{
svn_depth_t depth;
- svn_boolean_t base_props;
svn_boolean_t pristine;
const apr_array_header_t *changelists;
svn_cancel_func_t cancel_func;
@@ -7554,31 +9754,17 @@ cache_props_recursive(void *cb_baton,
baton->changelists, scratch_pool));
SVN_ERR(svn_sqlite__exec_statements(wcroot->sdb,
- STMT_CREATE_NODE_PROPS_CACHE));
+ STMT_CREATE_TARGET_PROP_CACHE));
- if (baton->base_props)
- stmt_idx = STMT_CACHE_NODE_BASE_PROPS;
- else if (baton->pristine)
- stmt_idx = STMT_CACHE_NODE_PRISTINE_PROPS;
+ if (baton->pristine)
+ stmt_idx = STMT_CACHE_TARGET_PRISTINE_PROPS;
else
- stmt_idx = STMT_CACHE_NODE_PROPS;
+ stmt_idx = STMT_CACHE_TARGET_PROPS;
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb, stmt_idx));
SVN_ERR(svn_sqlite__bind_int64(stmt, 1, wcroot->wc_id));
SVN_ERR(svn_sqlite__step_done(stmt));
- /* ACTUAL props aren't relevant in the pristine case. */
- if (baton->base_props || baton->pristine)
- return SVN_NO_ERROR;
-
- if (baton->cancel_func)
- SVN_ERR(baton->cancel_func(baton->cancel_baton));
-
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_CACHE_ACTUAL_PROPS));
- SVN_ERR(svn_sqlite__bind_int64(stmt, 1, wcroot->wc_id));
- SVN_ERR(svn_sqlite__step_done(stmt));
-
return SVN_NO_ERROR;
}
@@ -7587,7 +9773,6 @@ svn_error_t *
svn_wc__db_read_props_streamily(svn_wc__db_t *db,
const char *local_abspath,
svn_depth_t depth,
- svn_boolean_t base_props,
svn_boolean_t pristine,
const apr_array_header_t *changelists,
svn_wc__proplist_receiver_t receiver_func,
@@ -7602,6 +9787,7 @@ svn_wc__db_read_props_streamily(svn_wc__db_t *db,
cache_props_baton_t baton;
svn_boolean_t have_row;
apr_pool_t *iterpool;
+ svn_error_t *err = NULL;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
SVN_ERR_ASSERT(receiver_func);
@@ -7615,7 +9801,6 @@ svn_wc__db_read_props_streamily(svn_wc__db_t *db,
VERIFY_USABLE_WCROOT(wcroot);
baton.depth = depth;
- baton.base_props = base_props;
baton.pristine = pristine;
baton.changelists = changelists;
baton.cancel_func = cancel_func;
@@ -7632,21 +9817,22 @@ svn_wc__db_read_props_streamily(svn_wc__db_t *db,
iterpool = svn_pool_create(scratch_pool);
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_SELECT_RELEVANT_PROPS_FROM_CACHE));
+ STMT_SELECT_ALL_TARGET_PROP_CACHE));
SVN_ERR(svn_sqlite__step(&have_row, stmt));
- while (have_row)
+ while (!err && have_row)
{
apr_hash_t *props;
svn_pool_clear(iterpool);
+ SVN_ERR(svn_sqlite__column_properties(&props, stmt, 1, iterpool,
+ iterpool));
+
/* see if someone wants to cancel this operation. */
if (cancel_func)
- SVN_ERR(cancel_func(cancel_baton));
+ err = cancel_func(cancel_baton);
- SVN_ERR(svn_sqlite__column_properties(&props, stmt, 1, iterpool,
- iterpool));
- if (props && apr_hash_count(props) != 0)
+ if (!err && props && apr_hash_count(props) != 0)
{
const char *child_relpath;
const char *child_abspath;
@@ -7655,39 +9841,33 @@ svn_wc__db_read_props_streamily(svn_wc__db_t *db,
child_abspath = svn_dirent_join(wcroot->abspath,
child_relpath, iterpool);
- SVN_ERR(receiver_func(receiver_baton, child_abspath, props,
- iterpool));
+ err = receiver_func(receiver_baton, child_abspath, props, iterpool);
}
- SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ err = svn_error_compose_create(err, svn_sqlite__step(&have_row, stmt));
}
- SVN_ERR(svn_sqlite__reset(stmt));
+ err = svn_error_compose_create(err, svn_sqlite__reset(stmt));
svn_pool_destroy(iterpool);
- SVN_ERR(svn_sqlite__exec_statements(wcroot->sdb,
- STMT_DROP_NODE_PROPS_CACHE));
+ SVN_ERR(svn_error_compose_create(
+ err,
+ svn_sqlite__exec_statements(wcroot->sdb,
+ STMT_DROP_TARGET_PROP_CACHE)));
return SVN_NO_ERROR;
}
-/* Baton for db_read_props */
-struct db_read_props_baton_t
-{
- apr_hash_t *props;
- apr_pool_t *result_pool;
-};
-
-
-/* Helper for svn_wc__db_read_props(). Implements svn_wc__db_txn_callback_t */
+/* Helper for svn_wc__db_read_props().
+ */
static svn_error_t *
-db_read_props(void *baton,
+db_read_props(apr_hash_t **props,
svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
+ apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- struct db_read_props_baton_t *rpb = baton;
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
svn_error_t *err = NULL;
@@ -7699,8 +9879,8 @@ db_read_props(void *baton,
if (have_row && !svn_sqlite__column_is_null(stmt, 0))
{
- err = svn_sqlite__column_properties(&rpb->props, stmt, 0,
- rpb->result_pool, scratch_pool);
+ err = svn_sqlite__column_properties(props, stmt, 0,
+ result_pool, scratch_pool);
}
else
have_row = FALSE;
@@ -7711,16 +9891,16 @@ db_read_props(void *baton,
return SVN_NO_ERROR;
/* No local changes. Return the pristine props for this node. */
- SVN_ERR(db_read_pristine_props(&rpb->props, wcroot, local_relpath,
- rpb->result_pool, scratch_pool));
- if (rpb->props == NULL)
+ SVN_ERR(db_read_pristine_props(props, wcroot, local_relpath, FALSE,
+ result_pool, scratch_pool));
+ if (*props == NULL)
{
/* Pristine properties are not defined for this node.
### we need to determine whether this node is in a state that
### allows for ACTUAL properties (ie. not deleted). for now,
### just say all nodes, no matter the state, have at least an
### empty set of props. */
- rpb->props = apr_hash_make(rpb->result_pool);
+ *props = apr_hash_make(result_pool);
}
return SVN_NO_ERROR;
@@ -7736,7 +9916,6 @@ svn_wc__db_read_props(apr_hash_t **props,
{
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
- struct db_read_props_baton_t rpb;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
@@ -7744,12 +9923,9 @@ svn_wc__db_read_props(apr_hash_t **props,
local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- rpb.result_pool = result_pool;
-
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, db_read_props, &rpb,
- scratch_pool));
-
- *props = rpb.props;
+ SVN_WC__DB_WITH_TXN(db_read_props(props, wcroot, local_relpath,
+ result_pool, scratch_pool),
+ wcroot);
return SVN_NO_ERROR;
}
@@ -7759,6 +9935,7 @@ static svn_error_t *
db_read_pristine_props(apr_hash_t **props,
svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
+ svn_boolean_t deleted_ok,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
@@ -7786,9 +9963,8 @@ db_read_pristine_props(apr_hash_t **props,
presence = svn_sqlite__column_token(stmt, 1, presence_map);
/* For "base-deleted", it is obvious the pristine props are located
- in the BASE table. Fall through to fetch them.
- ### BH: Is this really the behavior we want here? */
- if (presence == svn_wc__db_status_base_deleted)
+ below the current node. Fetch the NODE from the next record. */
+ if (presence == svn_wc__db_status_base_deleted && deleted_ok)
{
SVN_ERR(svn_sqlite__step(&have_row, stmt));
@@ -7814,8 +9990,13 @@ db_read_pristine_props(apr_hash_t **props,
return SVN_NO_ERROR;
}
- *props = NULL;
- return svn_error_trace(svn_sqlite__reset(stmt));
+ return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS,
+ svn_sqlite__reset(stmt),
+ _("The node '%s' has a status that"
+ " has no properties."),
+ path_for_error_message(wcroot,
+ local_relpath,
+ scratch_pool));
}
@@ -7835,11 +10016,529 @@ svn_wc__db_read_pristine_props(apr_hash_t **props,
local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- SVN_ERR(db_read_pristine_props(props, wcroot, local_relpath,
+ SVN_ERR(db_read_pristine_props(props, wcroot, local_relpath, TRUE,
result_pool, scratch_pool));
return SVN_NO_ERROR;
}
+svn_error_t *
+svn_wc__db_prop_retrieve_recursive(apr_hash_t **values,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ const char *propname,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_wcroot_t *wcroot;
+ const char *local_relpath;
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+ apr_pool_t *iterpool;
+
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
+ local_abspath, scratch_pool, scratch_pool));
+ VERIFY_USABLE_WCROOT(wcroot);
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_CURRENT_PROPS_RECURSIVE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+
+ *values = apr_hash_make(result_pool);
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ iterpool = svn_pool_create(scratch_pool);
+ while (have_row)
+ {
+ apr_hash_t *node_props;
+ svn_string_t *value;
+
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(svn_sqlite__column_properties(&node_props, stmt, 0,
+ iterpool, iterpool));
+
+ value = (node_props
+ ? svn_hash_gets(node_props, propname)
+ : NULL);
+
+ if (value)
+ {
+ svn_hash_sets(*values,
+ svn_dirent_join(wcroot->abspath,
+ svn_sqlite__column_text(stmt, 1, NULL),
+ result_pool),
+ svn_string_dup(value, result_pool));
+ }
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ }
+
+ svn_pool_destroy(iterpool);
+
+ return svn_error_trace(svn_sqlite__reset(stmt));
+}
+
+/* The body of svn_wc__db_read_cached_iprops(). */
+static svn_error_t *
+db_read_cached_iprops(apr_array_header_t **iprops,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb, STMT_SELECT_IPROPS));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+
+ if (!have_row)
+ {
+ return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND,
+ svn_sqlite__reset(stmt),
+ _("The node '%s' was not found."),
+ path_for_error_message(wcroot, local_relpath,
+ scratch_pool));
+ }
+
+ SVN_ERR(svn_sqlite__column_iprops(iprops, stmt, 0,
+ result_pool, scratch_pool));
+
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__db_read_cached_iprops(apr_array_header_t **iprops,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_wcroot_t *wcroot;
+ const char *local_relpath;
+
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath,
+ db, local_abspath,
+ scratch_pool, scratch_pool));
+ VERIFY_USABLE_WCROOT(wcroot);
+
+ /* Don't use with_txn yet, as we perform just a single transaction */
+ SVN_ERR(db_read_cached_iprops(iprops, wcroot, local_relpath,
+ result_pool, scratch_pool));
+
+ if (!*iprops)
+ {
+ *iprops = apr_array_make(result_pool, 0,
+ sizeof(svn_prop_inherited_item_t *));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Remove all prop name value pairs from PROP_HASH where the property
+ name is not PROPNAME. */
+static void
+filter_unwanted_props(apr_hash_t *prop_hash,
+ const char * propname,
+ apr_pool_t *scratch_pool)
+{
+ apr_hash_index_t *hi;
+
+ for (hi = apr_hash_first(scratch_pool, prop_hash);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ const char *ipropname = svn__apr_hash_index_key(hi);
+
+ if (strcmp(ipropname, propname) != 0)
+ svn_hash_sets(prop_hash, ipropname, NULL);
+ }
+ return;
+}
+
+/* Get the changed properties as stored in the ACTUAL table */
+static svn_error_t *
+db_get_changed_props(apr_hash_t **actual_props,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_ACTUAL_PROPS));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+
+ if (have_row && !svn_sqlite__column_is_null(stmt, 0))
+ SVN_ERR(svn_sqlite__column_properties(actual_props, stmt, 0,
+ result_pool, scratch_pool));
+ else
+ *actual_props = NULL; /* Cached when we read that record */
+
+ return svn_error_trace(svn_sqlite__reset(stmt));
+}
+
+/* The body of svn_wc__db_read_inherited_props(). */
+static svn_error_t *
+db_read_inherited_props(apr_array_header_t **inherited_props,
+ apr_hash_t **actual_props,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ const char *propname,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ int i;
+ apr_array_header_t *cached_iprops = NULL;
+ apr_array_header_t *iprops;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ svn_sqlite__stmt_t *stmt;
+ const char *relpath;
+ const char *expected_parent_repos_relpath = NULL;
+ const char *parent_relpath;
+
+ iprops = apr_array_make(result_pool, 1,
+ sizeof(svn_prop_inherited_item_t *));
+ *inherited_props = iprops;
+
+ if (actual_props)
+ *actual_props = NULL;
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_NODE_INFO));
+
+ relpath = local_relpath;
+
+ /* Walk up to the root of the WC looking for inherited properties. When we
+ reach the WC root also check for cached inherited properties. */
+ for (relpath = local_relpath; relpath; relpath = parent_relpath)
+ {
+ svn_boolean_t have_row;
+ int op_depth;
+ svn_wc__db_status_t status;
+ apr_hash_t *node_props;
+
+ parent_relpath = relpath[0] ? svn_relpath_dirname(relpath, scratch_pool)
+ : NULL;
+
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, relpath));
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+
+ if (!have_row)
+ return svn_error_createf(
+ SVN_ERR_WC_PATH_NOT_FOUND, svn_sqlite__reset(stmt),
+ _("The node '%s' was not found."),
+ path_for_error_message(wcroot, relpath,
+ scratch_pool));
+
+ op_depth = svn_sqlite__column_int(stmt, 0);
+
+ status = svn_sqlite__column_token(stmt, 3, presence_map);
+
+ if (status != svn_wc__db_status_normal
+ && status != svn_wc__db_status_incomplete)
+ return svn_error_createf(
+ SVN_ERR_WC_PATH_UNEXPECTED_STATUS, svn_sqlite__reset(stmt),
+ _("The node '%s' has a status that has no properties."),
+ path_for_error_message(wcroot, relpath,
+ scratch_pool));
+
+ if (op_depth > 0)
+ {
+ /* WORKING node. Nothing to check */
+ }
+ else if (expected_parent_repos_relpath)
+ {
+ const char *repos_relpath = svn_sqlite__column_text(stmt, 2, NULL);
+
+ if (strcmp(expected_parent_repos_relpath, repos_relpath) != 0)
+ {
+ /* The child of this node has a different parent than this node
+ (It is "switched"), so we can stop here. Note that switched
+ with the same parent is not interesting for us here. */
+ SVN_ERR(svn_sqlite__reset(stmt));
+ break;
+ }
+
+ expected_parent_repos_relpath =
+ svn_relpath_dirname(expected_parent_repos_relpath, scratch_pool);
+ }
+ else
+ {
+ const char *repos_relpath = svn_sqlite__column_text(stmt, 2, NULL);
+
+ expected_parent_repos_relpath =
+ svn_relpath_dirname(repos_relpath, scratch_pool);
+ }
+
+ if (op_depth == 0
+ && !svn_sqlite__column_is_null(stmt, 16))
+ {
+ /* The node contains a cache. No reason to look further */
+ SVN_ERR(svn_sqlite__column_iprops(&cached_iprops, stmt, 16,
+ result_pool, iterpool));
+
+ parent_relpath = NULL; /* Stop after this */
+ }
+
+ SVN_ERR(svn_sqlite__column_properties(&node_props, stmt, 14,
+ iterpool, iterpool));
+
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ /* If PARENT_ABSPATH is a parent of LOCAL_ABSPATH, then LOCAL_ABSPATH
+ can inherit properties from it. */
+ if (relpath != local_relpath)
+ {
+ apr_hash_t *changed_props;
+
+ SVN_ERR(db_get_changed_props(&changed_props, wcroot, relpath,
+ result_pool, iterpool));
+
+ if (changed_props)
+ node_props = changed_props;
+ else if (node_props)
+ node_props = svn_prop_hash_dup(node_props, result_pool);
+
+ if (node_props && apr_hash_count(node_props))
+ {
+ /* If we only want PROPNAME filter out any other properties. */
+ if (propname)
+ filter_unwanted_props(node_props, propname, iterpool);
+
+ if (apr_hash_count(node_props))
+ {
+ svn_prop_inherited_item_t *iprop_elt =
+ apr_pcalloc(result_pool,
+ sizeof(svn_prop_inherited_item_t));
+ iprop_elt->path_or_url = svn_dirent_join(wcroot->abspath,
+ relpath,
+ result_pool);
+
+ iprop_elt->prop_hash = node_props;
+ /* Build the output array in depth-first order. */
+ svn_sort__array_insert(&iprop_elt, iprops, 0);
+ }
+ }
+ }
+ else if (actual_props)
+ {
+ apr_hash_t *changed_props;
+
+ SVN_ERR(db_get_changed_props(&changed_props, wcroot, relpath,
+ result_pool, iterpool));
+
+ if (changed_props)
+ *actual_props = changed_props;
+ else if (node_props)
+ *actual_props = svn_prop_hash_dup(node_props, result_pool);
+ }
+ }
+
+ if (cached_iprops)
+ {
+ for (i = cached_iprops->nelts - 1; i >= 0; i--)
+ {
+ svn_prop_inherited_item_t *cached_iprop =
+ APR_ARRAY_IDX(cached_iprops, i, svn_prop_inherited_item_t *);
+
+ /* An empty property hash in the iprops cache means there are no
+ inherited properties. */
+ if (apr_hash_count(cached_iprop->prop_hash) == 0)
+ continue;
+
+ if (propname)
+ filter_unwanted_props(cached_iprop->prop_hash, propname,
+ scratch_pool);
+
+ /* If we didn't filter everything then keep this iprop. */
+ if (apr_hash_count(cached_iprop->prop_hash))
+ svn_sort__array_insert(&cached_iprop, iprops, 0);
+ }
+ }
+
+ if (actual_props && !*actual_props)
+ *actual_props = apr_hash_make(result_pool);
+
+ svn_pool_destroy(iterpool);
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__db_read_inherited_props(apr_array_header_t **iprops,
+ apr_hash_t **actual_props,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ const char *propname,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_wcroot_t *wcroot;
+ const char *local_relpath;
+
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath,
+ db, local_abspath,
+ scratch_pool, scratch_pool));
+ VERIFY_USABLE_WCROOT(wcroot);
+
+ SVN_WC__DB_WITH_TXN(db_read_inherited_props(iprops, actual_props,
+ wcroot, local_relpath, propname,
+ result_pool, scratch_pool),
+ wcroot);
+
+ return SVN_NO_ERROR;
+}
+
+/* The body of svn_wc__db_get_children_with_cached_iprops().
+ */
+static svn_error_t *
+get_children_with_cached_iprops(apr_hash_t **iprop_paths,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ svn_depth_t depth,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+
+ *iprop_paths = apr_hash_make(result_pool);
+
+ /* First check if LOCAL_RELPATH itself has iprops */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_IPROPS_NODE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+
+ if (have_row)
+ {
+ const char *relpath_with_cache = svn_sqlite__column_text(stmt, 0,
+ NULL);
+ const char *abspath_with_cache = svn_dirent_join(wcroot->abspath,
+ relpath_with_cache,
+ result_pool);
+ svn_hash_sets(*iprop_paths, abspath_with_cache,
+ svn_sqlite__column_text(stmt, 1, result_pool));
+ }
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ if (depth == svn_depth_empty)
+ return SVN_NO_ERROR;
+
+ /* Now fetch information for children or all descendants */
+ if (depth == svn_depth_files
+ || depth == svn_depth_immediates)
+ {
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_IPROPS_CHILDREN));
+ }
+ else /* Default to svn_depth_infinity. */
+ {
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_IPROPS_RECURSIVE));
+ }
+
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+
+ while (have_row)
+ {
+ const char *relpath_with_cache = svn_sqlite__column_text(stmt, 0,
+ NULL);
+ const char *abspath_with_cache = svn_dirent_join(wcroot->abspath,
+ relpath_with_cache,
+ result_pool);
+ svn_hash_sets(*iprop_paths, abspath_with_cache,
+ svn_sqlite__column_text(stmt, 1, result_pool));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ }
+
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ /* For depth files we should filter non files */
+ if (depth == svn_depth_files)
+ {
+ apr_hash_index_t *hi;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+
+ for (hi = apr_hash_first(scratch_pool, *iprop_paths);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ const char *child_abspath = svn__apr_hash_index_key(hi);
+ const char *child_relpath;
+ svn_node_kind_t child_kind;
+
+ svn_pool_clear(iterpool);
+
+ child_relpath = svn_dirent_is_child(local_relpath, child_abspath,
+ NULL);
+
+ if (! child_relpath)
+ {
+ continue; /* local_relpath itself */
+ }
+
+ SVN_ERR(svn_wc__db_base_get_info_internal(NULL, &child_kind, NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ wcroot, child_relpath,
+ scratch_pool,
+ scratch_pool));
+
+ /* Filter if not a file */
+ if (child_kind != svn_node_file)
+ {
+ svn_hash_sets(*iprop_paths, child_abspath, NULL);
+ }
+ }
+
+ svn_pool_destroy(iterpool);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__db_get_children_with_cached_iprops(apr_hash_t **iprop_paths,
+ svn_depth_t depth,
+ const char *local_abspath,
+ svn_wc__db_t *db,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_wcroot_t *wcroot;
+ const char *local_relpath;
+
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
+ local_abspath, scratch_pool,
+ scratch_pool));
+ VERIFY_USABLE_WCROOT(wcroot);
+
+ SVN_WC__DB_WITH_TXN(
+ get_children_with_cached_iprops(iprop_paths, wcroot, local_relpath,
+ depth, result_pool, scratch_pool),
+ wcroot);
+
+ return SVN_NO_ERROR;
+}
svn_error_t *
svn_wc__db_read_children_of_working_node(const apr_array_header_t **children,
@@ -7862,29 +10561,23 @@ svn_wc__db_read_children_of_working_node(const apr_array_header_t **children,
result_pool, scratch_pool);
}
-/* Baton for check_replace_txn */
-struct check_replace_baton
-{
- svn_boolean_t *is_replace_root;
- svn_boolean_t *base_replace;
- svn_boolean_t is_replace;
-};
-
-/* Helper for svn_wc__db_node_check_replace. Implements
- svn_wc__db_txn_callback_t */
+/* Helper for svn_wc__db_node_check_replace().
+ */
static svn_error_t *
-check_replace_txn(void *baton,
+check_replace_txn(svn_boolean_t *is_replace_root_p,
+ svn_boolean_t *base_replace_p,
+ svn_boolean_t *is_replace_p,
svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
apr_pool_t *scratch_pool)
{
- struct check_replace_baton *crb = baton;
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
- apr_int64_t replaced_op_depth;
+ svn_boolean_t is_replace = FALSE;
+ int replaced_op_depth;
svn_wc__db_status_t replaced_status;
- /* Our caller initialized the output values in crb to FALSE */
+ /* Our caller initialized the output values to FALSE */
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_SELECT_NODE_INFO));
@@ -7923,20 +10616,24 @@ check_replace_txn(void *baton,
&& replaced_status != svn_wc__db_status_excluded
&& replaced_status != svn_wc__db_status_server_excluded
&& replaced_status != svn_wc__db_status_base_deleted)
- crb->is_replace = TRUE;
+ {
+ is_replace = TRUE;
+ if (is_replace_p)
+ *is_replace_p = TRUE;
+ }
- replaced_op_depth = svn_sqlite__column_int64(stmt, 0);
+ replaced_op_depth = svn_sqlite__column_int(stmt, 0);
- if (crb->base_replace)
+ if (base_replace_p)
{
- apr_int64_t op_depth = svn_sqlite__column_int64(stmt, 0);
+ int op_depth = svn_sqlite__column_int(stmt, 0);
while (op_depth != 0 && have_row)
{
SVN_ERR(svn_sqlite__step(&have_row, stmt));
if (have_row)
- op_depth = svn_sqlite__column_int64(stmt, 0);
+ op_depth = svn_sqlite__column_int(stmt, 0);
}
if (have_row && op_depth == 0)
@@ -7945,18 +10642,18 @@ check_replace_txn(void *baton,
base_status = svn_sqlite__column_token(stmt, 3, presence_map);
- *crb->base_replace = (base_status != svn_wc__db_status_not_present);
+ *base_replace_p = (base_status != svn_wc__db_status_not_present);
}
}
SVN_ERR(svn_sqlite__reset(stmt));
- if (!crb->is_replace_root || !crb->is_replace)
+ if (!is_replace_root_p || !is_replace)
return SVN_NO_ERROR;
if (replaced_status != svn_wc__db_status_base_deleted)
{
- apr_int64_t parent_op_depth;
+ int parent_op_depth;
/* Check the current op-depth of the parent to see if we are a replacement
root */
@@ -7966,13 +10663,13 @@ check_replace_txn(void *baton,
SVN_ERR(svn_sqlite__step_row(stmt)); /* Parent must exist as 'normal' */
- parent_op_depth = svn_sqlite__column_int64(stmt, 0);
+ parent_op_depth = svn_sqlite__column_int(stmt, 0);
if (parent_op_depth >= replaced_op_depth)
{
/* Did we replace inside our directory? */
- *crb->is_replace_root = (parent_op_depth == replaced_op_depth);
+ *is_replace_root_p = (parent_op_depth == replaced_op_depth);
SVN_ERR(svn_sqlite__reset(stmt));
return SVN_NO_ERROR;
}
@@ -7980,14 +10677,14 @@ check_replace_txn(void *baton,
SVN_ERR(svn_sqlite__step(&have_row, stmt));
if (have_row)
- parent_op_depth = svn_sqlite__column_int64(stmt, 0);
+ parent_op_depth = svn_sqlite__column_int(stmt, 0);
SVN_ERR(svn_sqlite__reset(stmt));
if (!have_row)
- *crb->is_replace_root = TRUE; /* Parent is no replacement */
+ *is_replace_root_p = TRUE; /* Parent is no replacement */
else if (parent_op_depth < replaced_op_depth)
- *crb->is_replace_root = TRUE; /* Parent replaces a lower layer */
+ *is_replace_root_p = TRUE; /* Parent replaces a lower layer */
/*else // No replacement root */
}
@@ -8004,7 +10701,6 @@ svn_wc__db_node_check_replace(svn_boolean_t *is_replace_root,
{
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
- struct check_replace_baton crb;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
@@ -8015,23 +10711,18 @@ svn_wc__db_node_check_replace(svn_boolean_t *is_replace_root,
if (is_replace_root)
*is_replace_root = FALSE;
- if (is_replace)
- *is_replace = FALSE;
if (base_replace)
*base_replace = FALSE;
+ if (is_replace)
+ *is_replace = FALSE;
if (local_relpath[0] == '\0')
return SVN_NO_ERROR; /* Working copy root can't be replaced */
- crb.is_replace_root = is_replace_root;
- crb.base_replace = base_replace;
- crb.is_replace = FALSE;
-
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, check_replace_txn, &crb,
- scratch_pool));
-
- if (is_replace)
- *is_replace = crb.is_replace;
+ SVN_WC__DB_WITH_TXN(
+ check_replace_txn(is_replace_root, base_replace, is_replace,
+ wcroot, local_relpath, scratch_pool),
+ wcroot);
return SVN_NO_ERROR;
}
@@ -8058,23 +10749,16 @@ svn_wc__db_read_children(const apr_array_header_t **children,
}
-struct relocate_baton_t
-{
- const char *repos_root_url;
- const char *repos_uuid;
- svn_boolean_t have_base_node;
- apr_int64_t old_repos_id;
-};
-
-
/* */
static svn_error_t *
-relocate_txn(void *baton,
- svn_wc__db_wcroot_t *wcroot,
+relocate_txn(svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
+ const char *repos_root_url,
+ const char *repos_uuid,
+ svn_boolean_t have_base_node,
+ apr_int64_t old_repos_id,
apr_pool_t *scratch_pool)
{
- struct relocate_baton_t *rb = baton;
svn_sqlite__stmt_t *stmt;
apr_int64_t new_repos_id;
@@ -8086,22 +10770,22 @@ relocate_txn(void *baton,
*/
/* Get the repos_id for the new repository. */
- SVN_ERR(create_repos_id(&new_repos_id, rb->repos_root_url, rb->repos_uuid,
+ SVN_ERR(create_repos_id(&new_repos_id, repos_root_url, repos_uuid,
wcroot->sdb, scratch_pool));
/* Set the (base and working) repos_ids and clear the dav_caches */
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_RECURSIVE_UPDATE_NODE_REPO));
SVN_ERR(svn_sqlite__bindf(stmt, "isii", wcroot->wc_id, local_relpath,
- rb->old_repos_id, new_repos_id));
+ old_repos_id, new_repos_id));
SVN_ERR(svn_sqlite__step_done(stmt));
- if (rb->have_base_node)
+ if (have_base_node)
{
/* Update any locks for the root or its children. */
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_UPDATE_LOCK_REPOS_ID));
- SVN_ERR(svn_sqlite__bindf(stmt, "ii", rb->old_repos_id, new_repos_id));
+ SVN_ERR(svn_sqlite__bindf(stmt, "ii", old_repos_id, new_repos_id));
SVN_ERR(svn_sqlite__step_done(stmt));
}
@@ -8119,7 +10803,9 @@ svn_wc__db_global_relocate(svn_wc__db_t *db,
const char *local_relpath;
const char *local_dir_relpath;
svn_wc__db_status_t status;
- struct relocate_baton_t rb;
+ const char *repos_uuid;
+ svn_boolean_t have_base_node;
+ apr_int64_t old_repos_id;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_dir_abspath));
/* ### assert that we were passed a directory? */
@@ -8130,11 +10816,11 @@ svn_wc__db_global_relocate(svn_wc__db_t *db,
local_relpath = local_dir_relpath;
SVN_ERR(read_info(&status,
- NULL, NULL, NULL, &rb.old_repos_id,
+ NULL, NULL, NULL, &old_repos_id,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL,
- &rb.have_base_node, NULL, NULL,
+ &have_base_node, NULL, NULL,
wcroot, local_relpath,
scratch_pool, scratch_pool));
@@ -8145,7 +10831,7 @@ svn_wc__db_global_relocate(svn_wc__db_t *db,
const char *parent_relpath = svn_relpath_dirname(local_dir_relpath,
scratch_pool);
SVN_ERR(read_info(&status,
- NULL, NULL, NULL, &rb.old_repos_id,
+ NULL, NULL, NULL, &old_repos_id,
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL,
@@ -8155,7 +10841,7 @@ svn_wc__db_global_relocate(svn_wc__db_t *db,
local_dir_relpath = parent_relpath;
}
- if (rb.old_repos_id == INVALID_REPOS_ID)
+ if (old_repos_id == INVALID_REPOS_ID)
{
/* Do we need to support relocating something that is
added/deleted/excluded without relocating the parent? If not
@@ -8165,9 +10851,12 @@ svn_wc__db_global_relocate(svn_wc__db_t *db,
if (status == svn_wc__db_status_deleted)
{
const char *work_del_relpath;
- SVN_ERR(scan_deletion(NULL, NULL, &work_del_relpath,
- wcroot, local_dir_relpath,
- scratch_pool, scratch_pool));
+
+ SVN_ERR(scan_deletion_txn(NULL, NULL,
+ &work_del_relpath, NULL,
+ wcroot, local_dir_relpath,
+ scratch_pool,
+ scratch_pool));
if (work_del_relpath)
{
/* Deleted within a copy/move */
@@ -8181,172 +10870,290 @@ svn_wc__db_global_relocate(svn_wc__db_t *db,
if (status == svn_wc__db_status_added)
{
- SVN_ERR(scan_addition(NULL, NULL, NULL, &rb.old_repos_id,
- NULL, NULL, NULL,
+ SVN_ERR(scan_addition(NULL, NULL, NULL, &old_repos_id,
+ NULL, NULL, NULL, NULL, NULL, NULL,
wcroot, local_dir_relpath,
scratch_pool, scratch_pool));
}
else
- SVN_ERR(base_get_info(NULL, NULL, NULL, NULL, &rb.old_repos_id,
- NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- wcroot, local_dir_relpath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_base_get_info_internal(NULL, NULL, NULL, NULL,
+ &old_repos_id,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ wcroot, local_dir_relpath,
+ scratch_pool, scratch_pool));
}
- SVN_ERR(fetch_repos_info(NULL, &rb.repos_uuid,
- wcroot->sdb, rb.old_repos_id, scratch_pool));
- SVN_ERR_ASSERT(rb.repos_uuid);
+ SVN_ERR(svn_wc__db_fetch_repos_info(NULL, &repos_uuid, wcroot->sdb,
+ old_repos_id, scratch_pool));
+ SVN_ERR_ASSERT(repos_uuid);
- rb.repos_root_url = repos_root_url;
-
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, relocate_txn, &rb,
- scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ relocate_txn(wcroot, local_relpath, repos_root_url, repos_uuid,
+ have_base_node, old_repos_id, scratch_pool),
+ wcroot);
return SVN_NO_ERROR;
}
-/* Set *REPOS_ID and *REPOS_RELPATH to the BASE repository location of
+/* Helper for commit_node()
+ Set *REPOS_ID and *REPOS_RELPATH to the BASE repository location of
(WCROOT, LOCAL_RELPATH), directly if its BASE row exists or implied from
its parent's BASE row if not. In the latter case, error if the parent
BASE row does not exist. */
static svn_error_t *
-determine_repos_info(apr_int64_t *repos_id,
- const char **repos_relpath,
- svn_wc__db_wcroot_t *wcroot,
- const char *local_relpath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+determine_commit_repos_info(apr_int64_t *repos_id,
+ const char **repos_relpath,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
- const char *repos_parent_relpath;
- const char *local_parent_relpath, *name;
-
- /* ### is it faster to fetch fewer columns? */
+ int op_depth;
/* Prefer the current node's repository information. */
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_SELECT_BASE_NODE));
+ STMT_SELECT_NODE_INFO));
SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
SVN_ERR(svn_sqlite__step(&have_row, stmt));
- if (have_row)
+ if (!have_row)
+ return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND,
+ svn_sqlite__reset(stmt),
+ _("The node '%s' was not found."),
+ path_for_error_message(wcroot, local_relpath,
+ scratch_pool));
+
+ op_depth = svn_sqlite__column_int(stmt, 0);
+
+ if (op_depth > 0)
{
- SVN_ERR_ASSERT(!svn_sqlite__column_is_null(stmt, 0));
- SVN_ERR_ASSERT(!svn_sqlite__column_is_null(stmt, 1));
+ svn_wc__db_status_t presence = svn_sqlite__column_token(stmt, 3,
+ presence_map);
- *repos_id = svn_sqlite__column_int64(stmt, 0);
- *repos_relpath = svn_sqlite__column_text(stmt, 1, result_pool);
+ if (presence == svn_wc__db_status_base_deleted)
+ {
+ SVN_ERR(svn_sqlite__step_row(stmt)); /* There must be a row */
+ op_depth = svn_sqlite__column_int(stmt, 0);
+ }
+ else
+ {
+ const char *parent_repos_relpath;
+ const char *parent_relpath;
+ const char *name;
- return svn_error_trace(svn_sqlite__reset(stmt));
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ /* The repository relative path of an add/copy is based on its
+ ancestor, not on the shadowed base layer.
+
+ As this function is only used from the commit processing we know
+ the parent directory has only a BASE row, so we can just obtain
+ the information directly by recursing (once!) */
+
+ svn_relpath_split(&parent_relpath, &name, local_relpath,
+ scratch_pool);
+
+ SVN_ERR(determine_commit_repos_info(repos_id, &parent_repos_relpath,
+ wcroot, parent_relpath,
+ scratch_pool, scratch_pool));
+
+ *repos_relpath = svn_relpath_join(parent_repos_relpath, name,
+ result_pool);
+ return SVN_NO_ERROR;
+ }
}
- SVN_ERR(svn_sqlite__reset(stmt));
- /* This was a child node within this wcroot. We want to look at the
- BASE node of the directory. */
- svn_relpath_split(&local_parent_relpath, &name, local_relpath, scratch_pool);
+ SVN_ERR_ASSERT(op_depth == 0); /* And that row must be BASE */
- /* The REPOS_ID will be the same (### until we support mixed-repos) */
- SVN_ERR(base_get_info(NULL, NULL, NULL, &repos_parent_relpath, repos_id,
- NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- wcroot, local_parent_relpath,
- scratch_pool, scratch_pool));
+ SVN_ERR_ASSERT(!svn_sqlite__column_is_null(stmt, 1));
+ SVN_ERR_ASSERT(!svn_sqlite__column_is_null(stmt, 2));
- *repos_relpath = svn_relpath_join(repos_parent_relpath, name, result_pool);
+ *repos_id = svn_sqlite__column_int64(stmt, 1);
+ *repos_relpath = svn_sqlite__column_text(stmt, 2, result_pool);
- return SVN_NO_ERROR;
+ return svn_error_trace(svn_sqlite__reset(stmt));
}
-/* Moves all nodes below PARENT_LOCAL_RELPATH from op-depth OP_DEPTH to
- op-depth 0 (BASE), setting their presence to 'not-present' if their presence
- wasn't 'normal'. */
+/* Helper for svn_wc__db_global_commit()
+
+ Makes local_relpath and all its descendants at the same op-depth represent
+ the copy origin repos_id:repos_relpath@revision.
+
+ This code is only valid to fix-up a move from an old location, to a new
+ location during a commit.
+
+ Assumptions:
+ * local_relpath is not the working copy root (can't be moved)
+ * repos_relpath is not the repository root (can't be moved)
+ */
static svn_error_t *
-descendant_commit(svn_wc__db_wcroot_t *wcroot,
- const char *parent_local_relpath,
- apr_int64_t op_depth,
- apr_int64_t repos_id,
- const char *parent_repos_relpath,
- svn_revnum_t revision,
- apr_pool_t *scratch_pool)
+moved_descendant_commit(svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ int op_depth,
+ apr_int64_t repos_id,
+ const char *repos_relpath,
+ svn_revnum_t revision,
+ apr_pool_t *scratch_pool)
{
- const apr_array_header_t *children;
- apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ apr_hash_t *children;
+ apr_pool_t *iterpool;
svn_sqlite__stmt_t *stmt;
- int i;
+ svn_boolean_t have_row;
+ apr_hash_index_t *hi;
+
+ SVN_ERR_ASSERT(*local_relpath != '\0'
+ && *repos_relpath != '\0');
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_COMMIT_DESCENDANT_TO_BASE));
+ STMT_SELECT_MOVED_DESCENDANTS));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id,
+ local_relpath,
+ op_depth));
- SVN_ERR(gather_repo_children(&children, wcroot, parent_local_relpath,
- op_depth, scratch_pool, iterpool));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ if (! have_row)
+ return svn_error_trace(svn_sqlite__reset(stmt));
- for (i = 0; i < children->nelts; i++)
+ children = apr_hash_make(scratch_pool);
+
+ /* First, obtain all moved children */
+ /* To keep error handling simple, first cache them in a hashtable */
+ while (have_row)
{
- const char *local_relpath;
- const char *repos_relpath;
- const char *name = APR_ARRAY_IDX(children, i, const char *);
+ const char *src_relpath = svn_sqlite__column_text(stmt, 0, scratch_pool);
+ const char *to_relpath = svn_sqlite__column_text(stmt, 1, scratch_pool);
+
+ svn_hash_sets(children, src_relpath, to_relpath);
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ }
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ /* Then update them */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_COMMIT_UPDATE_ORIGIN));
+
+ iterpool = svn_pool_create(scratch_pool);
+ for (hi = apr_hash_first(scratch_pool, children); hi; hi = apr_hash_next(hi))
+ {
+ const char *src_relpath = svn__apr_hash_index_key(hi);
+ const char *to_relpath = svn__apr_hash_index_val(hi);
+ const char *new_repos_relpath;
+ int to_op_depth = relpath_depth(to_relpath);
+ int affected;
svn_pool_clear(iterpool);
- local_relpath = svn_relpath_join(parent_local_relpath, name, iterpool);
- repos_relpath = svn_relpath_join(parent_repos_relpath, name, iterpool);
- SVN_ERR(svn_sqlite__bindf(stmt, "isiisr",
- wcroot->wc_id,
- local_relpath,
- op_depth,
- repos_id,
- repos_relpath,
- revision));
- SVN_ERR(svn_sqlite__step_done(stmt));
+ SVN_ERR_ASSERT(to_op_depth > 0);
+
+ new_repos_relpath = svn_relpath_join(
+ repos_relpath,
+ svn_relpath_skip_ancestor(local_relpath,
+ src_relpath),
+ iterpool);
+
+ SVN_ERR(svn_sqlite__bindf(stmt, "isdisr", wcroot->wc_id,
+ to_relpath,
+ to_op_depth,
+ repos_id,
+ new_repos_relpath,
+ revision));
+ SVN_ERR(svn_sqlite__update(&affected, stmt));
+
+#ifdef SVN_DEBUG
+ /* Enable in release code?
+ Broken moves are not fatal yet, but this assertion would break
+ committing them */
+ SVN_ERR_ASSERT(affected >= 1); /* If this fails there is no move dest */
+#endif
- SVN_ERR(descendant_commit(wcroot, local_relpath, op_depth, repos_id,
- repos_relpath, revision, iterpool));
+ SVN_ERR(moved_descendant_commit(wcroot, to_relpath, to_op_depth,
+ repos_id, new_repos_relpath, revision,
+ iterpool));
}
- svn_pool_destroy(iterpool);
+ svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
-struct commit_baton_t {
- svn_revnum_t new_revision;
- svn_revnum_t changed_rev;
- apr_time_t changed_date;
- const char *changed_author;
- const svn_checksum_t *new_checksum;
- const apr_array_header_t *new_children;
- apr_hash_t *new_dav_cache;
- svn_boolean_t keep_changelist;
- svn_boolean_t no_unlock;
+/* Helper for svn_wc__db_global_commit()
- const svn_skel_t *work_items;
-};
+ Moves all nodes below LOCAL_RELPATH from op-depth OP_DEPTH to op-depth 0
+ (BASE), setting their presence to 'not-present' if their presence wasn't
+ 'normal'.
+ Makes all nodes below LOCAL_RELPATH represent the descendants of repository
+ location repos_id:repos_relpath@revision.
-/* */
+ Assumptions:
+ * local_relpath is not the working copy root (can't be replaced)
+ * repos_relpath is not the repository root (can't be replaced)
+ */
static svn_error_t *
-commit_node(void *baton,
- svn_wc__db_wcroot_t *wcroot,
+descendant_commit(svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ int op_depth,
+ apr_int64_t repos_id,
+ const char *repos_relpath,
+ svn_revnum_t revision,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt;
+
+ SVN_ERR_ASSERT(*local_relpath != '\0'
+ && *repos_relpath != '\0');
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_COMMIT_DESCENDANTS_TO_BASE));
+
+ SVN_ERR(svn_sqlite__bindf(stmt, "isdisr", wcroot->wc_id,
+ local_relpath,
+ op_depth,
+ repos_id,
+ repos_relpath,
+ revision));
+
+ SVN_ERR(svn_sqlite__update(NULL, stmt));
+
+ return SVN_NO_ERROR;
+}
+
+/* The body of svn_wc__db_global_commit().
+ */
+static svn_error_t *
+commit_node(svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
+ svn_revnum_t new_revision,
+ svn_revnum_t changed_rev,
+ apr_time_t changed_date,
+ const char *changed_author,
+ const svn_checksum_t *new_checksum,
+ const apr_array_header_t *new_children,
+ apr_hash_t *new_dav_cache,
+ svn_boolean_t keep_changelist,
+ svn_boolean_t no_unlock,
+ const svn_skel_t *work_items,
apr_pool_t *scratch_pool)
{
- struct commit_baton_t *cb = baton;
svn_sqlite__stmt_t *stmt_info;
svn_sqlite__stmt_t *stmt_act;
svn_boolean_t have_act;
svn_string_t prop_blob = { 0 };
+ svn_string_t inherited_prop_blob = { 0 };
const char *changelist = NULL;
const char *parent_relpath;
svn_wc__db_status_t new_presence;
- svn_wc__db_kind_t new_kind;
+ svn_node_kind_t new_kind;
const char *new_depth_str = NULL;
svn_sqlite__stmt_t *stmt;
apr_int64_t repos_id;
const char *repos_relpath;
- apr_int64_t op_depth;
+ int op_depth;
svn_wc__db_status_t old_presence;
/* If we are adding a file or directory, then we need to get
@@ -8355,9 +11162,9 @@ commit_node(void *baton,
For existing nodes, we should retain the (potentially-switched)
repository information. */
- SVN_ERR(determine_repos_info(&repos_id, &repos_relpath,
- wcroot, local_relpath,
- scratch_pool, scratch_pool));
+ SVN_ERR(determine_commit_repos_info(&repos_id, &repos_relpath,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool));
/* ### is it better to select only the data needed? */
SVN_ERR(svn_sqlite__get_statement(&stmt_info, wcroot->sdb,
@@ -8373,14 +11180,14 @@ commit_node(void *baton,
/* There should be something to commit! */
- op_depth = svn_sqlite__column_int64(stmt_info, 0);
+ op_depth = svn_sqlite__column_int(stmt_info, 0);
/* Figure out the new node's kind. It will be whatever is in WORKING_NODE,
or there will be a BASE_NODE that has it. */
new_kind = svn_sqlite__column_token(stmt_info, 4, kind_map);
/* What will the new depth be? */
- if (new_kind == svn_wc__db_kind_dir)
+ if (new_kind == svn_node_dir)
new_depth_str = svn_sqlite__column_text(stmt_info, 11, scratch_pool);
/* Check that the repository information is not being changed. */
@@ -8401,14 +11208,18 @@ commit_node(void *baton,
Note: we'll keep them as a big blob of data, rather than
deserialize/serialize them. */
if (have_act)
- prop_blob.data = svn_sqlite__column_blob(stmt_act, 6, &prop_blob.len,
+ prop_blob.data = svn_sqlite__column_blob(stmt_act, 1, &prop_blob.len,
scratch_pool);
if (prop_blob.data == NULL)
prop_blob.data = svn_sqlite__column_blob(stmt_info, 14, &prop_blob.len,
scratch_pool);
- if (cb->keep_changelist && have_act)
- changelist = svn_sqlite__column_text(stmt_act, 1, scratch_pool);
+ inherited_prop_blob.data = svn_sqlite__column_blob(stmt_info, 16,
+ &inherited_prop_blob.len,
+ scratch_pool);
+
+ if (keep_changelist && have_act)
+ changelist = svn_sqlite__column_text(stmt_act, 0, scratch_pool);
old_presence = svn_sqlite__column_token(stmt_info, 3, presence_map);
@@ -8425,7 +11236,7 @@ commit_node(void *baton,
if we need to remove shadowed layers below our descendants. */
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_DELETE_ALL_LAYERS));
+ STMT_DELETE_NODE_ALL_LAYERS));
SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
SVN_ERR(svn_sqlite__update(&affected_rows, stmt));
@@ -8435,19 +11246,13 @@ commit_node(void *baton,
1) Remove all shadowed nodes
2) And remove all nodes that have a base-deleted as lowest layer,
- because 1) removed that layer
-
- Possible followup:
- 3) ### Collapse descendants of the current op_depth in layer 0,
- to commit a remote copy in one step (but don't touch/use
- ACTUAL!!)
- */
+ because 1) removed that layer */
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_DELETE_SHADOWED_RECURSIVE));
SVN_ERR(svn_sqlite__bindf(stmt,
- "isi",
+ "isd",
wcroot->wc_id,
local_relpath,
op_depth));
@@ -8455,9 +11260,28 @@ commit_node(void *baton,
SVN_ERR(svn_sqlite__step_done(stmt));
}
+ /* Note that while these two calls look so similar that they might
+ be integrated, they really affect a different op-depth and
+ completely different nodes (via a different recursion pattern). */
+
+ /* Collapse descendants of the current op_depth in layer 0 */
SVN_ERR(descendant_commit(wcroot, local_relpath, op_depth,
- repos_id, repos_relpath, cb->new_revision,
+ repos_id, repos_relpath, new_revision,
scratch_pool));
+
+ /* And make the recorded local moves represent moves of the node we just
+ committed. */
+ SVN_ERR(moved_descendant_commit(wcroot, local_relpath, 0,
+ repos_id, repos_relpath, new_revision,
+ scratch_pool));
+
+ /* This node is no longer modified, so no node was moved here */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_CLEAR_MOVED_TO_FROM_DEST));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id,
+ local_relpath));
+
+ SVN_ERR(svn_sqlite__step_done(stmt));
}
/* Update or add the BASE_NODE row with all the new information. */
@@ -8480,25 +11304,30 @@ commit_node(void *baton,
parent_relpath,
repos_id,
repos_relpath,
- cb->new_revision,
+ new_revision,
presence_map, new_presence,
new_depth_str,
kind_map, new_kind,
- cb->changed_rev,
- cb->changed_date,
- cb->changed_author,
+ changed_rev,
+ changed_date,
+ changed_author,
prop_blob.data, prop_blob.len));
- SVN_ERR(svn_sqlite__bind_checksum(stmt, 13, cb->new_checksum,
+ SVN_ERR(svn_sqlite__bind_checksum(stmt, 13, new_checksum,
scratch_pool));
- SVN_ERR(svn_sqlite__bind_properties(stmt, 15, cb->new_dav_cache,
+ SVN_ERR(svn_sqlite__bind_properties(stmt, 15, new_dav_cache,
scratch_pool));
+ if (inherited_prop_blob.data != NULL)
+ {
+ SVN_ERR(svn_sqlite__bind_blob(stmt, 17, inherited_prop_blob.data,
+ inherited_prop_blob.len));
+ }
SVN_ERR(svn_sqlite__step_done(stmt));
if (have_act)
{
- if (cb->keep_changelist && changelist != NULL)
+ if (keep_changelist && changelist != NULL)
{
/* The user told us to keep the changelist. Replace the row in
ACTUAL_NODE with the basic keys and the changelist. */
@@ -8522,29 +11351,29 @@ commit_node(void *baton,
}
}
- if (new_kind == svn_wc__db_kind_dir)
+ if (new_kind == svn_node_dir)
{
/* When committing a directory, we should have its new children. */
/* ### one day. just not today. */
#if 0
- SVN_ERR_ASSERT(cb->new_children != NULL);
+ SVN_ERR_ASSERT(new_children != NULL);
#endif
/* ### process the children */
}
- if (!cb->no_unlock)
+ if (!no_unlock)
{
svn_sqlite__stmt_t *lock_stmt;
SVN_ERR(svn_sqlite__get_statement(&lock_stmt, wcroot->sdb,
- STMT_DELETE_LOCK));
+ STMT_DELETE_LOCK_RECURSIVELY));
SVN_ERR(svn_sqlite__bindf(lock_stmt, "is", repos_id, repos_relpath));
SVN_ERR(svn_sqlite__step_done(lock_stmt));
}
/* Install any work items into the queue, as part of this transaction. */
- SVN_ERR(add_work_items(wcroot->sdb, cb->work_items, scratch_pool));
+ SVN_ERR(add_work_items(wcroot->sdb, work_items, scratch_pool));
return SVN_NO_ERROR;
}
@@ -8567,7 +11396,6 @@ svn_wc__db_global_commit(svn_wc__db_t *db,
{
const char *local_relpath;
svn_wc__db_wcroot_t *wcroot;
- struct commit_baton_t cb;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(new_revision));
@@ -8577,20 +11405,12 @@ svn_wc__db_global_commit(svn_wc__db_t *db,
local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- cb.new_revision = new_revision;
-
- cb.changed_rev = changed_revision;
- cb.changed_date = changed_date;
- cb.changed_author = changed_author;
- cb.new_checksum = new_checksum;
- cb.new_children = new_children;
- cb.new_dav_cache = new_dav_cache;
- cb.keep_changelist = keep_changelist;
- cb.no_unlock = no_unlock;
- cb.work_items = work_items;
-
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, commit_node, &cb,
- scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ commit_node(wcroot, local_relpath,
+ new_revision, changed_revision, changed_date, changed_author,
+ new_checksum, new_children, new_dav_cache, keep_changelist,
+ no_unlock, work_items, scratch_pool),
+ wcroot);
/* We *totally* monkeyed the entries. Toss 'em. */
SVN_ERR(flush_entries(wcroot, local_abspath, svn_depth_empty, scratch_pool));
@@ -8599,27 +11419,10 @@ svn_wc__db_global_commit(svn_wc__db_t *db,
}
-#if 0
-struct update_baton_t {
- const char *new_repos_relpath;
- svn_revnum_t new_revision;
- const apr_hash_t *new_props;
- svn_revnum_t new_changed_rev;
- apr_time_t new_changed_date;
- const char *new_changed_author;
- const apr_array_header_t *new_children;
- const svn_checksum_t *new_checksum;
- const char *new_target;
- const svn_skel_t *conflict;
- const svn_skel_t *work_items;
-};
-#endif
-
-
svn_error_t *
svn_wc__db_global_update(svn_wc__db_t *db,
const char *local_abspath,
- svn_wc__db_kind_t new_kind,
+ svn_node_kind_t new_kind,
const char *new_repos_relpath,
svn_revnum_t new_revision,
const apr_hash_t *new_props,
@@ -8639,7 +11442,6 @@ svn_wc__db_global_update(svn_wc__db_t *db,
#if 0
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
- struct update_baton_t ub;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
/* ### allow NULL for NEW_REPOS_RELPATH to indicate "no change"? */
@@ -8661,21 +11463,13 @@ svn_wc__db_global_update(svn_wc__db_t *db,
local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- ub.new_repos_relpath = new_repos_relpath;
- ub.new_revision = new_revision;
- ub.new_props = new_props;
- ub.new_changed_rev = new_changed_rev;
- ub.new_changed_date = new_changed_date;
- ub.new_changed_author = new_changed_author;
- ub.new_children = new_children;
- ub.new_checksum = new_checksum;
- ub.new_target = new_target;
-
- ub.conflict = conflict;
- ub.work_items = work_items;
-
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, update_node, &ub,
- scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ update_node(wcroot, local_relpath,
+ new_repos_relpath, new_revision, new_props,
+ new_changed_rev, new_changed_date, new_changed_author,
+ new_children, new_checksum, new_target,
+ conflict, work_items, scratch_pool),
+ wcroot);
/* We *totally* monkeyed the entries. Toss 'em. */
SVN_ERR(flush_entries(wcroot, local_abspath, scratch_pool));
@@ -8684,19 +11478,22 @@ svn_wc__db_global_update(svn_wc__db_t *db,
#endif
}
-/* Sets a base nodes revision and/or repository relative path. If
- LOCAL_ABSPATH's rev (REV) is valid, set is revision and if SET_REPOS_RELPATH
- is TRUE set its repository relative path to REPOS_RELPATH (and make sure its
- REPOS_ID is still valid).
+/* Sets a base nodes revision, repository relative path, and/or inherited
+ propertis. If LOCAL_ABSPATH's rev (REV) is valid, set its revision. If
+ SET_REPOS_RELPATH is TRUE set its repository relative path to REPOS_RELPATH
+ (and make sure its REPOS_ID is still valid). If IPROPS is not NULL set its
+ inherited properties to IPROPS, if IPROPS is NULL then clear any the iprops
+ cache for the base node.
*/
static svn_error_t *
-db_op_set_rev_and_repos_relpath(svn_wc__db_wcroot_t *wcroot,
- const char *local_relpath,
- svn_revnum_t rev,
- svn_boolean_t set_repos_relpath,
- const char *repos_relpath,
- apr_int64_t repos_id,
- apr_pool_t *scratch_pool)
+db_op_set_rev_repos_relpath_iprops(svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_array_header_t *iprops,
+ svn_revnum_t rev,
+ svn_boolean_t set_repos_relpath,
+ const char *repos_relpath,
+ apr_int64_t repos_id,
+ apr_pool_t *scratch_pool)
{
svn_sqlite__stmt_t *stmt;
@@ -8728,14 +11525,29 @@ db_op_set_rev_and_repos_relpath(svn_wc__db_wcroot_t *wcroot,
SVN_ERR(svn_sqlite__step_done(stmt));
}
+ /* Set or clear iprops. */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_UPDATE_IPROP));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is",
+ wcroot->wc_id,
+ local_relpath));
+ SVN_ERR(svn_sqlite__bind_iprops(stmt, 3, iprops, scratch_pool));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+
return SVN_NO_ERROR;
}
-/* The main body of bump_revisions_post_update.
+/* The main body of bump_revisions_post_update().
*
* Tweak the information for LOCAL_RELPATH in WCROOT. If NEW_REPOS_RELPATH is
* non-NULL update the entry to the new url specified by NEW_REPOS_RELPATH,
- * NEW_REPOS_ID.. If NEW_REV is valid, make this the node's working revision.
+ * NEW_REPOS_ID. If NEW_REV is valid, make this the node's working revision.
+ *
+ * If WCROOT_IPROPS is not NULL it is a hash mapping const char * absolute
+ * working copy paths to depth-first ordered arrays of
+ * svn_prop_inherited_item_t * structures. If the absolute path equivalent
+ * of LOCAL_RELPATH exists in WCROOT_IPROPS, then set the hashed value as the
+ * node's inherited properties.
*
* Unless S_ROOT is TRUE the tweaks might cause the node for LOCAL_ABSPATH to
* be removed from the WC; if IS_ROOT is TRUE this will not happen.
@@ -8748,39 +11560,43 @@ bump_node_revision(svn_wc__db_wcroot_t *wcroot,
svn_revnum_t new_rev,
svn_depth_t depth,
apr_hash_t *exclude_relpaths,
+ apr_hash_t *wcroot_iprops,
svn_boolean_t is_root,
svn_boolean_t skip_when_dir,
+ svn_wc__db_t *db,
apr_pool_t *scratch_pool)
{
apr_pool_t *iterpool;
const apr_array_header_t *children;
int i;
svn_wc__db_status_t status;
- svn_wc__db_kind_t db_kind;
+ svn_node_kind_t db_kind;
svn_revnum_t revision;
const char *repos_relpath;
apr_int64_t repos_id;
svn_boolean_t set_repos_relpath = FALSE;
svn_boolean_t update_root;
svn_depth_t depth_below_here = depth;
+ apr_array_header_t *iprops = NULL;
/* Skip an excluded path and its descendants. */
- if (apr_hash_get(exclude_relpaths, local_relpath, APR_HASH_KEY_STRING))
+ if (svn_hash_gets(exclude_relpaths, local_relpath))
return SVN_NO_ERROR;
- SVN_ERR(base_get_info(&status, &db_kind, &revision, &repos_relpath,
- &repos_id, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, &update_root,
- wcroot, local_relpath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_base_get_info_internal(&status, &db_kind, &revision,
+ &repos_relpath, &repos_id,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, &update_root,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool));
/* Skip file externals */
if (update_root
- && db_kind == svn_wc__db_kind_file
+ && db_kind == svn_node_file
&& !is_root)
return SVN_NO_ERROR;
- if (skip_when_dir && db_kind == svn_wc__db_kind_dir)
+ if (skip_when_dir && db_kind == svn_node_dir)
return SVN_NO_ERROR;
/* If the node is still marked 'not-present', then the server did not
@@ -8794,25 +11610,35 @@ bump_node_revision(svn_wc__db_wcroot_t *wcroot,
|| (status == svn_wc__db_status_server_excluded &&
revision != new_rev)))
{
- return svn_error_trace(db_base_remove(NULL, wcroot, local_relpath,
- scratch_pool));
+ return svn_error_trace(db_base_remove(wcroot, local_relpath,
+ db, FALSE, FALSE, FALSE,
+ SVN_INVALID_REVNUM,
+ NULL, NULL, scratch_pool));
}
if (new_repos_relpath != NULL && strcmp(repos_relpath, new_repos_relpath))
set_repos_relpath = TRUE;
- if (set_repos_relpath
+ if (wcroot_iprops)
+ iprops = svn_hash_gets(wcroot_iprops,
+ svn_dirent_join(wcroot->abspath, local_relpath,
+ scratch_pool));
+
+ if (iprops
+ || set_repos_relpath
|| (SVN_IS_VALID_REVNUM(new_rev) && new_rev != revision))
- SVN_ERR(db_op_set_rev_and_repos_relpath(wcroot, local_relpath,
- new_rev,
- set_repos_relpath,
- new_repos_relpath,
- new_repos_id,
- scratch_pool));
+ {
+ SVN_ERR(db_op_set_rev_repos_relpath_iprops(wcroot, local_relpath,
+ iprops, new_rev,
+ set_repos_relpath,
+ new_repos_relpath,
+ new_repos_id,
+ scratch_pool));
+ }
/* Early out */
if (depth <= svn_depth_empty
- || db_kind != svn_wc__db_kind_dir
+ || db_kind != svn_node_dir
|| status == svn_wc__db_status_server_excluded
|| status == svn_wc__db_status_excluded
|| status == svn_wc__db_status_not_present)
@@ -8848,8 +11674,9 @@ bump_node_revision(svn_wc__db_wcroot_t *wcroot,
SVN_ERR(bump_node_revision(wcroot, child_local_relpath, new_repos_id,
child_repos_relpath, new_rev,
depth_below_here,
- exclude_relpaths, FALSE /* is_root */,
- (depth < svn_depth_immediates),
+ exclude_relpaths, wcroot_iprops,
+ FALSE /* is_root */,
+ (depth < svn_depth_immediates), db,
iterpool));
}
@@ -8859,31 +11686,33 @@ bump_node_revision(svn_wc__db_wcroot_t *wcroot,
return SVN_NO_ERROR;
}
-struct bump_revisions_baton_t
-{
- svn_depth_t depth;
- const char *new_repos_relpath;
- const char *new_repos_root_url;
- const char *new_repos_uuid;
- svn_revnum_t new_revision;
- apr_hash_t *exclude_relpaths;
-};
-
+/* Helper for svn_wc__db_op_bump_revisions_post_update().
+ */
static svn_error_t *
-bump_revisions_post_update(void *baton,
- svn_wc__db_wcroot_t *wcroot,
+bump_revisions_post_update(svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
+ svn_wc__db_t *db,
+ svn_depth_t depth,
+ const char *new_repos_relpath,
+ const char *new_repos_root_url,
+ const char *new_repos_uuid,
+ svn_revnum_t new_revision,
+ apr_hash_t *exclude_relpaths,
+ apr_hash_t *wcroot_iprops,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
apr_pool_t *scratch_pool)
{
- struct bump_revisions_baton_t *brb = baton;
svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
svn_error_t *err;
apr_int64_t new_repos_id = INVALID_REPOS_ID;
- err = base_get_info(&status, &kind, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- wcroot, local_relpath, scratch_pool, scratch_pool);
+ err = svn_wc__db_base_get_info_internal(&status, &kind, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool);
if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
{
svn_error_clear(err);
@@ -8904,15 +11733,24 @@ bump_revisions_post_update(void *baton,
break;
}
- if (brb->new_repos_root_url != NULL)
- SVN_ERR(create_repos_id(&new_repos_id, brb->new_repos_root_url,
- brb->new_repos_uuid,
+ if (new_repos_root_url != NULL)
+ SVN_ERR(create_repos_id(&new_repos_id, new_repos_root_url,
+ new_repos_uuid,
wcroot->sdb, scratch_pool));
SVN_ERR(bump_node_revision(wcroot, local_relpath, new_repos_id,
- brb->new_repos_relpath, brb->new_revision,
- brb->depth, brb->exclude_relpaths,
- TRUE /* is_root */, FALSE, scratch_pool));
+ new_repos_relpath, new_revision,
+ depth, exclude_relpaths,
+ wcroot_iprops,
+ TRUE /* is_root */, FALSE, db,
+ scratch_pool));
+
+ SVN_ERR(svn_wc__db_bump_moved_away(wcroot, local_relpath, depth, db,
+ scratch_pool));
+
+ SVN_ERR(svn_wc__db_update_move_list_notify(wcroot, SVN_INVALID_REVNUM,
+ SVN_INVALID_REVNUM, notify_func,
+ notify_baton, scratch_pool));
return SVN_NO_ERROR;
}
@@ -8926,52 +11764,54 @@ svn_wc__db_op_bump_revisions_post_update(svn_wc__db_t *db,
const char *new_repos_uuid,
svn_revnum_t new_revision,
apr_hash_t *exclude_relpaths,
+ apr_hash_t *wcroot_iprops,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
apr_pool_t *scratch_pool)
{
const char *local_relpath;
svn_wc__db_wcroot_t *wcroot;
- struct bump_revisions_baton_t brb;
SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- if (apr_hash_get(exclude_relpaths, local_relpath, APR_HASH_KEY_STRING))
+ if (svn_hash_gets(exclude_relpaths, local_relpath))
return SVN_NO_ERROR;
if (depth == svn_depth_unknown)
depth = svn_depth_infinity;
- brb.depth = depth;
- brb.new_repos_relpath = new_repos_relpath;
- brb.new_repos_root_url = new_repos_root_url;
- brb.new_repos_uuid = new_repos_uuid;
- brb.new_revision = new_revision;
- brb.exclude_relpaths = exclude_relpaths;
-
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath,
- bump_revisions_post_update, &brb, scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ bump_revisions_post_update(wcroot, local_relpath, db,
+ depth, new_repos_relpath, new_repos_root_url,
+ new_repos_uuid, new_revision,
+ exclude_relpaths, wcroot_iprops,
+ notify_func, notify_baton, scratch_pool),
+ wcroot);
return SVN_NO_ERROR;
}
+/* The body of svn_wc__db_lock_add().
+ */
static svn_error_t *
-lock_add_txn(void *baton,
- svn_wc__db_wcroot_t *wcroot,
+lock_add_txn(svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
+ const svn_wc__db_lock_t *lock,
apr_pool_t *scratch_pool)
{
- const svn_wc__db_lock_t *lock = baton;
svn_sqlite__stmt_t *stmt;
const char *repos_relpath;
apr_int64_t repos_id;
- SVN_ERR(base_get_info(NULL, NULL, NULL, &repos_relpath, &repos_id,
- NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- wcroot, local_relpath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_base_get_info_internal(NULL, NULL, NULL,
+ &repos_relpath, &repos_id,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool));
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb, STMT_INSERT_LOCK));
SVN_ERR(svn_sqlite__bindf(stmt, "iss",
@@ -9008,8 +11848,9 @@ svn_wc__db_lock_add(svn_wc__db_t *db,
local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, lock_add_txn,
- (void *) lock, scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ lock_add_txn(wcroot, local_relpath, lock, scratch_pool),
+ wcroot);
/* There may be some entries, and the lock info is now out of date. */
SVN_ERR(flush_entries(wcroot, local_abspath, svn_depth_empty, scratch_pool));
@@ -9018,9 +11859,10 @@ svn_wc__db_lock_add(svn_wc__db_t *db,
}
+/* The body of svn_wc__db_lock_remove().
+ */
static svn_error_t *
-lock_remove_txn(void *baton,
- svn_wc__db_wcroot_t *wcroot,
+lock_remove_txn(svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
apr_pool_t *scratch_pool)
{
@@ -9028,11 +11870,12 @@ lock_remove_txn(void *baton,
apr_int64_t repos_id;
svn_sqlite__stmt_t *stmt;
- SVN_ERR(base_get_info(NULL, NULL, NULL, &repos_relpath, &repos_id,
- NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- wcroot, local_relpath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_base_get_info_internal(NULL, NULL, NULL,
+ &repos_relpath, &repos_id,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool));
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_DELETE_LOCK));
@@ -9058,8 +11901,9 @@ svn_wc__db_lock_remove(svn_wc__db_t *db,
local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, lock_remove_txn, NULL,
- scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ lock_remove_txn(wcroot, local_relpath, scratch_pool),
+ wcroot);
/* There may be some entries, and the lock info is now out of date. */
SVN_ERR(flush_entries(wcroot, local_abspath, svn_depth_empty, scratch_pool));
@@ -9087,57 +11931,162 @@ svn_wc__db_scan_base_repos(const char **repos_relpath,
local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- SVN_ERR(base_get_info(NULL, NULL, NULL, repos_relpath, &repos_id,
- NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- wcroot, local_relpath, result_pool, scratch_pool));
- SVN_ERR(fetch_repos_info(repos_root_url, repos_uuid, wcroot->sdb,
- repos_id, result_pool));
+ SVN_ERR(svn_wc__db_base_get_info_internal(NULL, NULL, NULL,
+ repos_relpath, &repos_id,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ wcroot, local_relpath,
+ result_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_fetch_repos_info(repos_root_url, repos_uuid, wcroot->sdb,
+ repos_id, result_pool));
return SVN_NO_ERROR;
}
-struct scan_addition_baton_t
+/* A helper for scan_addition().
+ * Compute moved-from information for the node at LOCAL_RELPATH which
+ * has been determined as having been moved-here.
+ * If MOVED_FROM_RELPATH is not NULL, set *MOVED_FROM_RELPATH to the
+ * path of the move-source node in *MOVED_FROM_RELPATH.
+ * If DELETE_OP_ROOT_RELPATH is not NULL, set *DELETE_OP_ROOT_RELPATH
+ * to the path of the op-root of the delete-half of the move.
+ * If moved-from information cannot be derived, set both *MOVED_FROM_RELPATH
+ * and *DELETE_OP_ROOT_RELPATH to NULL, and return a "copied" status.
+ * COPY_OPT_ROOT_RELPATH is the relpath of the op-root of the copied-half
+ * of the move. */
+static svn_error_t *
+get_moved_from_info(const char **moved_from_relpath,
+ const char **moved_from_op_root_relpath,
+ const char *moved_to_op_root_relpath,
+ int *op_depth,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- svn_wc__db_status_t *status;
- const char **op_root_relpath;
- const char **repos_relpath;
- apr_int64_t *repos_id;
- const char **original_repos_relpath;
- apr_int64_t *original_repos_id;
- svn_revnum_t *original_revision;
- apr_pool_t *result_pool;
-};
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+
+ /* Run a query to get the moved-from path from the DB. */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_MOVED_FROM_RELPATH));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is",
+ wcroot->wc_id, moved_to_op_root_relpath));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+
+ if (!have_row)
+ {
+ /* The move was only recorded at the copy-half, possibly because
+ * the move operation was interrupted mid-way between the copy
+ * and the delete. Treat this node as a normal copy. */
+ if (moved_from_relpath)
+ *moved_from_relpath = NULL;
+ if (moved_from_op_root_relpath)
+ *moved_from_op_root_relpath = NULL;
+ SVN_ERR(svn_sqlite__reset(stmt));
+ return SVN_NO_ERROR;
+ }
+
+ if (op_depth)
+ *op_depth = svn_sqlite__column_int(stmt, 1);
+
+ if (moved_from_relpath || moved_from_op_root_relpath)
+ {
+ const char *db_delete_op_root_relpath;
+
+ /* The moved-from path from the DB is the relpath of
+ * the op_root of the delete-half of the move. */
+ db_delete_op_root_relpath = svn_sqlite__column_text(stmt, 0,
+ result_pool);
+ if (moved_from_op_root_relpath)
+ *moved_from_op_root_relpath = db_delete_op_root_relpath;
+
+ if (moved_from_relpath)
+ {
+ if (strcmp(moved_to_op_root_relpath, local_relpath) == 0)
+ {
+ /* LOCAL_RELPATH is the op_root of the copied-half of the
+ * move, so the correct MOVED_FROM_ABSPATH is the op-root
+ * of the delete-half. */
+ *moved_from_relpath = db_delete_op_root_relpath;
+ }
+ else
+ {
+ const char *child_relpath;
+
+ /* LOCAL_RELPATH is a child that was copied along with the
+ * op_root of the copied-half of the move. Construct the
+ * corresponding path beneath the op_root of the delete-half. */
+
+ /* Grab the child path relative to the op_root of the move
+ * destination. */
+ child_relpath = svn_relpath_skip_ancestor(
+ moved_to_op_root_relpath, local_relpath);
+
+ SVN_ERR_ASSERT(child_relpath && strlen(child_relpath) > 0);
+
+ /* This join is valid because LOCAL_RELPATH has not been moved
+ * within the copied-half of the move yet -- else, it would
+ * be its own op_root. */
+ *moved_from_relpath = svn_relpath_join(db_delete_op_root_relpath,
+ child_relpath,
+ result_pool);
+ }
+ }
+ }
+
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ return SVN_NO_ERROR;
+}
+
+/* The body of scan_addition().
+ */
static svn_error_t *
-scan_addition_txn(void *baton,
+scan_addition_txn(svn_wc__db_status_t *status,
+ const char **op_root_relpath_p,
+ const char **repos_relpath,
+ apr_int64_t *repos_id,
+ const char **original_repos_relpath,
+ apr_int64_t *original_repos_id,
+ svn_revnum_t *original_revision,
+ const char **moved_from_relpath,
+ const char **moved_from_op_root_relpath,
+ int *moved_from_op_depth,
svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
+ apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- struct scan_addition_baton_t *sab = baton;
- const char *current_relpath = local_relpath;
+ const char *op_root_relpath;
const char *build_relpath = "";
/* Initialize most of the OUT parameters. Generally, we'll only be filling
in a subset of these, so it is easier to init all up front. Note that
the STATUS parameter will be initialized once we read the status of
the specified node. */
- if (sab->op_root_relpath)
- *sab->op_root_relpath = NULL;
- if (sab->original_repos_relpath)
- *sab->original_repos_relpath = NULL;
- if (sab->original_repos_id)
- *sab->original_repos_id = INVALID_REPOS_ID;
- if (sab->original_revision)
- *sab->original_revision = SVN_INVALID_REVNUM;
+ if (op_root_relpath_p)
+ *op_root_relpath_p = NULL;
+ if (original_repos_relpath)
+ *original_repos_relpath = NULL;
+ if (original_repos_id)
+ *original_repos_id = INVALID_REPOS_ID;
+ if (original_revision)
+ *original_revision = SVN_INVALID_REVNUM;
+ if (moved_from_relpath)
+ *moved_from_relpath = NULL;
+ if (moved_from_op_root_relpath)
+ *moved_from_op_root_relpath = NULL;
+ if (moved_from_op_depth)
+ *moved_from_op_depth = 0;
{
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
svn_wc__db_status_t presence;
- apr_int64_t op_depth;
+ int op_depth;
const char *repos_prefix_path = "";
int i;
@@ -9163,7 +12112,7 @@ scan_addition_txn(void *baton,
presence = svn_sqlite__column_token(stmt, 1, presence_map);
/* The starting node should exist normally. */
- op_depth = svn_sqlite__column_int64(stmt, 0);
+ op_depth = svn_sqlite__column_int(stmt, 0);
if (op_depth == 0 || (presence != svn_wc__db_status_normal
&& presence != svn_wc__db_status_incomplete))
/* reset the statement as part of the error generation process */
@@ -9174,48 +12123,53 @@ scan_addition_txn(void *baton,
local_relpath,
scratch_pool));
- if (sab->original_revision)
- *sab->original_revision = svn_sqlite__column_revnum(stmt, 12);
+ if (original_revision)
+ *original_revision = svn_sqlite__column_revnum(stmt, 12);
/* Provide the default status; we'll override as appropriate. */
- if (sab->status)
+ if (status)
{
if (presence == svn_wc__db_status_normal)
- *sab->status = svn_wc__db_status_added;
+ *status = svn_wc__db_status_added;
else
- *sab->status = svn_wc__db_status_incomplete;
+ *status = svn_wc__db_status_incomplete;
}
/* Calculate the op root local path components */
- current_relpath = local_relpath;
+ op_root_relpath = local_relpath;
- for (i = (int)relpath_depth(local_relpath); i > op_depth; --i)
+ for (i = relpath_depth(local_relpath); i > op_depth; --i)
{
/* Calculate the path of the operation root */
repos_prefix_path =
- svn_relpath_join(svn_relpath_basename(current_relpath, NULL),
+ svn_relpath_join(svn_relpath_basename(op_root_relpath, NULL),
repos_prefix_path,
scratch_pool);
- current_relpath = svn_relpath_dirname(current_relpath, scratch_pool);
+ op_root_relpath = svn_relpath_dirname(op_root_relpath, scratch_pool);
}
- if (sab->op_root_relpath)
- *sab->op_root_relpath = apr_pstrdup(sab->result_pool, current_relpath);
-
- if (sab->original_repos_relpath
- || sab->original_repos_id
- || (sab->original_revision
- && *sab->original_revision == SVN_INVALID_REVNUM)
- || sab->status)
+ if (op_root_relpath_p)
+ *op_root_relpath_p = apr_pstrdup(result_pool, op_root_relpath);
+
+ /* ### This if-statement is quite redundant.
+ * ### We're checking all these values again within the body anyway.
+ * ### The body should be broken up appropriately and move into the
+ * ### outer scope. */
+ if (original_repos_relpath
+ || original_repos_id
+ || (original_revision
+ && *original_revision == SVN_INVALID_REVNUM)
+ || status
+ || moved_from_relpath || moved_from_op_root_relpath)
{
- if (local_relpath != current_relpath)
+ if (local_relpath != op_root_relpath)
/* requery to get the add/copy root */
{
SVN_ERR(svn_sqlite__reset(stmt));
SVN_ERR(svn_sqlite__bindf(stmt, "is",
- wcroot->wc_id, current_relpath));
+ wcroot->wc_id, op_root_relpath));
SVN_ERR(svn_sqlite__step(&have_row, stmt));
if (!have_row)
@@ -9227,45 +12181,64 @@ scan_addition_txn(void *baton,
return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
_("The node '%s' was not found."),
path_for_error_message(wcroot,
- current_relpath,
+ op_root_relpath,
scratch_pool));
}
- if (sab->original_revision
- && *sab->original_revision == SVN_INVALID_REVNUM)
- *sab->original_revision = svn_sqlite__column_revnum(stmt, 12);
+ if (original_revision
+ && *original_revision == SVN_INVALID_REVNUM)
+ *original_revision = svn_sqlite__column_revnum(stmt, 12);
}
- /* current_relpath / current_abspath
- as well as the record in stmt contain the data of the op_root */
- if (sab->original_repos_relpath)
- *sab->original_repos_relpath = svn_sqlite__column_text(stmt, 11,
- sab->result_pool);
+ if (original_repos_relpath)
+ *original_repos_relpath = svn_sqlite__column_text(stmt, 11,
+ result_pool);
if (!svn_sqlite__column_is_null(stmt, 10)
- && (sab->status
- || sab->original_repos_id))
+ && (status
+ || original_repos_id
+ || moved_from_relpath || moved_from_op_root_relpath))
/* If column 10 (original_repos_id) is NULL,
this is a plain add, not a copy or a move */
{
- if (sab->original_repos_id)
- *sab->original_repos_id = svn_sqlite__column_int64(stmt, 10);
+ svn_boolean_t moved_here;
+ if (original_repos_id)
+ *original_repos_id = svn_sqlite__column_int64(stmt, 10);
- if (sab->status)
+ moved_here = svn_sqlite__column_boolean(stmt, 13 /* moved_here */);
+ if (status)
+ *status = moved_here ? svn_wc__db_status_moved_here
+ : svn_wc__db_status_copied;
+
+ if (moved_here
+ && (moved_from_relpath || moved_from_op_root_relpath))
{
- if (svn_sqlite__column_boolean(stmt, 13 /* moved_here */))
- *sab->status = svn_wc__db_status_moved_here;
- else
- *sab->status = svn_wc__db_status_copied;
+ svn_error_t *err;
+
+ err = get_moved_from_info(moved_from_relpath,
+ moved_from_op_root_relpath,
+ op_root_relpath,
+ moved_from_op_depth,
+ wcroot, local_relpath,
+ result_pool,
+ scratch_pool);
+
+ if (err)
+ return svn_error_compose_create(
+ err, svn_sqlite__reset(stmt));
}
}
}
/* ### This loop here is to skip up to the first node which is a BASE node,
- because base_get_info() doesn't accomodate the scenario that
+ because base_get_info() doesn't accommodate the scenario that
we're looking at here; we found the true op_root, which may be inside
further changed trees. */
+ if (repos_relpath || repos_id)
+ {
+ const char *base_relpath;
+
while (TRUE)
{
@@ -9273,85 +12246,86 @@ scan_addition_txn(void *baton,
/* Pointing at op_depth, look at the parent */
repos_prefix_path =
- svn_relpath_join(svn_relpath_basename(current_relpath, NULL),
+ svn_relpath_join(svn_relpath_basename(op_root_relpath, NULL),
repos_prefix_path,
scratch_pool);
- current_relpath = svn_relpath_dirname(current_relpath, scratch_pool);
+ op_root_relpath = svn_relpath_dirname(op_root_relpath, scratch_pool);
- SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, current_relpath));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, op_root_relpath));
SVN_ERR(svn_sqlite__step(&have_row, stmt));
if (! have_row)
break;
- op_depth = svn_sqlite__column_int64(stmt, 0);
+ op_depth = svn_sqlite__column_int(stmt, 0);
/* Skip to op_depth */
- for (i = (int)relpath_depth(current_relpath); i > op_depth; i--)
+ for (i = relpath_depth(op_root_relpath); i > op_depth; i--)
{
/* Calculate the path of the operation root */
repos_prefix_path =
- svn_relpath_join(svn_relpath_basename(current_relpath, NULL),
+ svn_relpath_join(svn_relpath_basename(op_root_relpath, NULL),
repos_prefix_path,
scratch_pool);
- current_relpath =
- svn_relpath_dirname(current_relpath, scratch_pool);
+ op_root_relpath =
+ svn_relpath_dirname(op_root_relpath, scratch_pool);
}
}
- SVN_ERR(svn_sqlite__reset(stmt));
-
- build_relpath = repos_prefix_path;
- }
-
- /* If we're here, then we have an added/copied/moved (start) node, and
- CURRENT_ABSPATH now points to a BASE node. Figure out the repository
- information for the current node, and use that to compute the start
- node's repository information. */
- if (sab->repos_relpath || sab->repos_id)
- {
- const char *base_relpath;
-
- SVN_ERR(base_get_info(NULL, NULL, NULL, &base_relpath, sab->repos_id,
- NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- wcroot, current_relpath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_sqlite__reset(stmt));
- if (sab->repos_relpath)
- *sab->repos_relpath = svn_relpath_join(base_relpath, build_relpath,
- sab->result_pool);
- }
+ build_relpath = repos_prefix_path;
+
+ /* If we're here, then we have an added/copied/moved (start) node, and
+ CURRENT_ABSPATH now points to a BASE node. Figure out the repository
+ information for the current node, and use that to compute the start
+ node's repository information. */
+ SVN_ERR(svn_wc__db_base_get_info_internal(NULL, NULL, NULL,
+ &base_relpath, repos_id,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ wcroot, op_root_relpath,
+ scratch_pool, scratch_pool));
+ if (repos_relpath)
+ *repos_relpath = svn_relpath_join(base_relpath, build_relpath,
+ result_pool);
+ }
+ else
+ SVN_ERR(svn_sqlite__reset(stmt));
+ }
/* Postconditions */
#ifdef SVN_DEBUG
- if (sab->status)
+ if (status)
{
- SVN_ERR_ASSERT(*sab->status == svn_wc__db_status_added
- || *sab->status == svn_wc__db_status_copied
- || *sab->status == svn_wc__db_status_incomplete
- || *sab->status == svn_wc__db_status_moved_here);
- if (*sab->status == svn_wc__db_status_added)
+ SVN_ERR_ASSERT(*status == svn_wc__db_status_added
+ || *status == svn_wc__db_status_copied
+ || *status == svn_wc__db_status_incomplete
+ || *status == svn_wc__db_status_moved_here);
+ if (*status == svn_wc__db_status_added)
{
- SVN_ERR_ASSERT(!sab->original_repos_relpath
- || *sab->original_repos_relpath == NULL);
- SVN_ERR_ASSERT(!sab->original_revision
- || *sab->original_revision == SVN_INVALID_REVNUM);
- SVN_ERR_ASSERT(!sab->original_repos_id
- || *sab->original_repos_id == INVALID_REPOS_ID);
+ SVN_ERR_ASSERT(!original_repos_relpath
+ || *original_repos_relpath == NULL);
+ SVN_ERR_ASSERT(!original_revision
+ || *original_revision == SVN_INVALID_REVNUM);
+ SVN_ERR_ASSERT(!original_repos_id
+ || *original_repos_id == INVALID_REPOS_ID);
}
- else
+ /* An upgrade with a missing directory can leave INCOMPLETE working
+ op-roots. See upgrade_tests.py 29: upgrade with missing replaced dir
+ */
+ else if (*status != svn_wc__db_status_incomplete)
{
- SVN_ERR_ASSERT(!sab->original_repos_relpath
- || *sab->original_repos_relpath != NULL);
- SVN_ERR_ASSERT(!sab->original_revision
- || *sab->original_revision != SVN_INVALID_REVNUM);
- SVN_ERR_ASSERT(!sab->original_repos_id
- || *sab->original_repos_id != INVALID_REPOS_ID);
+ SVN_ERR_ASSERT(!original_repos_relpath
+ || *original_repos_relpath != NULL);
+ SVN_ERR_ASSERT(!original_revision
+ || *original_revision != SVN_INVALID_REVNUM);
+ SVN_ERR_ASSERT(!original_repos_id
+ || *original_repos_id != INVALID_REPOS_ID);
}
}
- SVN_ERR_ASSERT(!sab->op_root_relpath || *sab->op_root_relpath != NULL);
+ SVN_ERR_ASSERT(!op_root_relpath_p || *op_root_relpath_p != NULL);
#endif
return SVN_NO_ERROR;
@@ -9371,25 +12345,22 @@ scan_addition(svn_wc__db_status_t *status,
const char **original_repos_relpath,
apr_int64_t *original_repos_id,
svn_revnum_t *original_revision,
+ const char **moved_from_relpath,
+ const char **moved_from_op_root_relpath,
+ int *moved_from_op_depth,
svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- struct scan_addition_baton_t sab;
-
- sab.status = status;
- sab.op_root_relpath = op_root_relpath;
- sab.repos_relpath = repos_relpath;
- sab.repos_id = repos_id;
- sab.original_repos_relpath = original_repos_relpath;
- sab.original_repos_id = original_repos_id;
- sab.original_revision = original_revision;
- sab.result_pool = result_pool;
-
- return svn_error_trace(svn_wc__db_with_txn(wcroot, local_relpath,
- scan_addition_txn,
- &sab, scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ scan_addition_txn(status, op_root_relpath, repos_relpath, repos_id,
+ original_repos_relpath, original_repos_id,
+ original_revision, moved_from_relpath,
+ moved_from_op_root_relpath, moved_from_op_depth,
+ wcroot, local_relpath, result_pool, scratch_pool),
+ wcroot);
+ return SVN_NO_ERROR;
}
@@ -9410,7 +12381,7 @@ svn_wc__db_scan_addition(svn_wc__db_status_t *status,
{
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
- const char *op_root_relpath;
+ const char *op_root_relpath = NULL;
apr_int64_t repos_id = INVALID_REPOS_ID;
apr_int64_t original_repos_id = INVALID_REPOS_ID;
apr_int64_t *repos_id_p
@@ -9424,10 +12395,15 @@ svn_wc__db_scan_addition(svn_wc__db_status_t *status,
local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- SVN_ERR(scan_addition(status, &op_root_relpath, repos_relpath, repos_id_p,
+ SVN_ERR(scan_addition(status,
+ op_root_abspath
+ ? &op_root_relpath
+ : NULL,
+ repos_relpath, repos_id_p,
original_repos_relpath, original_repos_id_p,
- original_revision, wcroot, local_relpath,
- result_pool, scratch_pool));
+ original_revision,
+ NULL, NULL, NULL,
+ wcroot, local_relpath, result_pool, scratch_pool));
if (op_root_abspath)
*op_root_abspath = svn_dirent_join(wcroot->abspath, op_root_relpath,
@@ -9435,243 +12411,359 @@ svn_wc__db_scan_addition(svn_wc__db_status_t *status,
/* REPOS_ID must be valid if requested; ORIGINAL_REPOS_ID need not be. */
SVN_ERR_ASSERT(repos_id_p == NULL || repos_id != INVALID_REPOS_ID);
- SVN_ERR(fetch_repos_info(repos_root_url, repos_uuid, wcroot->sdb,
- repos_id, result_pool));
- SVN_ERR(fetch_repos_info(original_root_url, original_uuid,
- wcroot->sdb, original_repos_id,
- result_pool));
+ SVN_ERR(svn_wc__db_fetch_repos_info(repos_root_url, repos_uuid, wcroot->sdb,
+ repos_id, result_pool));
+ SVN_ERR(svn_wc__db_fetch_repos_info(original_root_url, original_uuid,
+ wcroot->sdb, original_repos_id,
+ result_pool));
return SVN_NO_ERROR;
}
-
-struct scan_deletion_baton_t
+svn_error_t *
+svn_wc__db_scan_moved(const char **moved_from_abspath,
+ const char **op_root_abspath,
+ const char **op_root_moved_from_abspath,
+ const char **moved_from_delete_abspath,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- const char **base_del_relpath;
- const char **moved_to_relpath;
- const char **work_del_relpath;
- apr_pool_t *result_pool;
-};
+ svn_wc__db_wcroot_t *wcroot;
+ const char *local_relpath;
+ svn_wc__db_status_t status;
+ const char *op_root_relpath = NULL;
+ const char *moved_from_relpath = NULL;
+ const char *moved_from_op_root_relpath = NULL;
+ int moved_from_op_depth = -1;
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
-static svn_error_t *
-scan_deletion_txn(void *baton,
- svn_wc__db_wcroot_t *wcroot,
- const char *local_relpath,
- apr_pool_t *scratch_pool)
-{
- struct scan_deletion_baton_t *sd_baton = baton;
- const char *current_relpath = local_relpath;
- const char *child_relpath = NULL;
- svn_wc__db_status_t child_presence;
- svn_boolean_t child_has_base = FALSE;
- svn_boolean_t found_moved_to = FALSE;
- apr_int64_t local_op_depth, op_depth;
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
+ local_abspath, scratch_pool, scratch_pool));
+ VERIFY_USABLE_WCROOT(wcroot);
- /* Initialize all the OUT parameters. */
- if (sd_baton->base_del_relpath != NULL)
- *sd_baton->base_del_relpath = NULL;
- if (sd_baton->moved_to_relpath != NULL)
- *sd_baton->moved_to_relpath = NULL;
- if (sd_baton->work_del_relpath != NULL)
- *sd_baton->work_del_relpath = NULL;
+ SVN_ERR(scan_addition(&status,
+ op_root_abspath
+ ? &op_root_relpath
+ : NULL,
+ NULL, NULL,
+ NULL, NULL, NULL,
+ moved_from_abspath
+ ? &moved_from_relpath
+ : NULL,
+ (op_root_moved_from_abspath
+ || moved_from_delete_abspath)
+ ? &moved_from_op_root_relpath
+ : NULL,
+ moved_from_delete_abspath
+ ? &moved_from_op_depth
+ : NULL,
+ wcroot, local_relpath, scratch_pool, scratch_pool));
- /* Initialize to something that won't denote an important parent/child
- transition. */
- child_presence = svn_wc__db_status_base_deleted;
+ if (status != svn_wc__db_status_moved_here || !moved_from_relpath)
+ return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
+ _("Path '%s' was not moved here"),
+ path_for_error_message(wcroot, local_relpath,
+ scratch_pool));
- while (TRUE)
+ if (op_root_abspath)
+ *op_root_abspath = svn_dirent_join(wcroot->abspath, op_root_relpath,
+ result_pool);
+
+ if (moved_from_abspath)
+ *moved_from_abspath = svn_dirent_join(wcroot->abspath, moved_from_relpath,
+ result_pool);
+
+ if (op_root_moved_from_abspath)
+ *op_root_moved_from_abspath = svn_dirent_join(wcroot->abspath,
+ moved_from_op_root_relpath,
+ result_pool);
+
+ /* The deleted node is either where we moved from, or one of its ancestors */
+ if (moved_from_delete_abspath)
{
- svn_sqlite__stmt_t *stmt;
- svn_boolean_t have_row;
- svn_boolean_t have_base;
- svn_wc__db_status_t work_presence;
+ const char *tmp = moved_from_op_root_relpath;
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_SELECT_DELETION_INFO));
- SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, current_relpath));
- SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ SVN_ERR_ASSERT(moved_from_op_depth >= 0);
- if (!have_row)
+ while (relpath_depth(tmp) > moved_from_op_depth)
+ tmp = svn_relpath_dirname(tmp, scratch_pool);
+
+ *moved_from_delete_abspath = svn_dirent_join(wcroot->abspath, tmp,
+ scratch_pool);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* ###
+ */
+static svn_error_t *
+follow_moved_to(apr_array_header_t **moved_tos,
+ int op_depth,
+ const char *repos_path,
+ svn_revnum_t revision,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+ int working_op_depth;
+ const char *ancestor_relpath, *node_moved_to = NULL;
+ int i;
+
+ SVN_ERR_ASSERT((!op_depth && !repos_path) || (op_depth && repos_path));
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_OP_DEPTH_MOVED_TO));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id, local_relpath,
+ op_depth));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ if (have_row)
+ {
+ working_op_depth = svn_sqlite__column_int(stmt, 0);
+ node_moved_to = svn_sqlite__column_text(stmt, 1, result_pool);
+ if (!repos_path)
{
- /* There better be a row for the starting node! */
- if (current_relpath == local_relpath)
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ if (!have_row || svn_sqlite__column_revnum(stmt, 0))
return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND,
svn_sqlite__reset(stmt),
- _("The node '%s' was not found."),
+ _("The base node '%s' was not found."),
path_for_error_message(wcroot,
local_relpath,
scratch_pool));
+ repos_path = svn_sqlite__column_text(stmt, 2, scratch_pool);
+ revision = svn_sqlite__column_revnum(stmt, 3);
+ }
+ }
+ SVN_ERR(svn_sqlite__reset(stmt));
- /* There are no values, so go ahead and reset the stmt now. */
- SVN_ERR(svn_sqlite__reset(stmt));
+ if (node_moved_to)
+ {
+ svn_boolean_t have_row2;
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_MOVED_HERE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id, node_moved_to,
+ relpath_depth(node_moved_to)));
+ SVN_ERR(svn_sqlite__step(&have_row2, stmt));
+ if (!have_row2 || !svn_sqlite__column_int(stmt, 0)
+ || revision != svn_sqlite__column_revnum(stmt, 3)
+ || strcmp(repos_path, svn_sqlite__column_text(stmt, 2, NULL)))
+ node_moved_to = NULL;
+ SVN_ERR(svn_sqlite__reset(stmt));
+ }
- /* No row means no WORKING node at this path, which means we just
- fell off the top of the WORKING tree.
+ if (node_moved_to)
+ {
+ struct svn_wc__db_moved_to_t *moved_to;
- The child cannot be not-present, as that would imply the
- root of the (added) WORKING subtree was deleted. */
- SVN_ERR_ASSERT(child_presence != svn_wc__db_status_not_present);
+ moved_to = apr_palloc(result_pool, sizeof(*moved_to));
+ moved_to->op_depth = working_op_depth;
+ moved_to->local_relpath = node_moved_to;
+ APR_ARRAY_PUSH(*moved_tos, struct svn_wc__db_moved_to_t *) = moved_to;
+ }
- /* If the child did not have a BASE node associated with it, then
- we're looking at a deletion that occurred within an added tree.
- There is no root of a deleted/replaced BASE tree.
+ /* A working row with moved_to, or no working row, and we are done. */
+ if (node_moved_to || !have_row)
+ return SVN_NO_ERROR;
- If the child was base-deleted, then the whole tree is a
- simple (explicit) deletion of the BASE tree.
+ /* Need to handle being moved via an ancestor. */
+ ancestor_relpath = local_relpath;
+ for (i = relpath_depth(local_relpath); i > working_op_depth; --i)
+ {
+ const char *ancestor_moved_to;
- If the child was normal, then it is the root of a replacement,
- which means an (implicit) deletion of the BASE tree.
+ ancestor_relpath = svn_relpath_dirname(ancestor_relpath, scratch_pool);
- In both cases, set the root of the operation (if we have not
- already set it as part of a moved-away). */
- if (sd_baton->base_del_relpath != NULL
- && child_has_base
- && *sd_baton->base_del_relpath == NULL)
- *sd_baton->base_del_relpath = apr_pstrdup(sd_baton->result_pool,
- child_relpath);
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_MOVED_TO));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id, ancestor_relpath,
+ working_op_depth));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ SVN_ERR_ASSERT(have_row);
+ ancestor_moved_to = svn_sqlite__column_text(stmt, 0, scratch_pool);
+ SVN_ERR(svn_sqlite__reset(stmt));
+ if (ancestor_moved_to)
+ {
+ node_moved_to
+ = svn_relpath_join(ancestor_moved_to,
+ svn_relpath_skip_ancestor(ancestor_relpath,
+ local_relpath),
+ result_pool);
- /* We found whatever roots we needed. This BASE node and its
- ancestors are unchanged, so we're done. */
- break;
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_MOVED_HERE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id, node_moved_to,
+ relpath_depth(ancestor_moved_to)));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ if (!have_row)
+ ancestor_moved_to = NULL;
+ else if (!svn_sqlite__column_int(stmt, 0))
+ {
+ svn_wc__db_status_t presence
+ = svn_sqlite__column_token(stmt, 1, presence_map);
+ if (presence != svn_wc__db_status_not_present)
+ ancestor_moved_to = NULL;
+ else
+ {
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ if (!have_row && !svn_sqlite__column_int(stmt, 0))
+ ancestor_moved_to = NULL;
+ }
+ }
+ SVN_ERR(svn_sqlite__reset(stmt));
+ if (!ancestor_moved_to)
+ break;
+ /* verify repos_path points back? */
}
+ if (ancestor_moved_to)
+ {
+ struct svn_wc__db_moved_to_t *moved_to;
- /* We need the presence of the WORKING node. Note that legal values
- are: normal, not-present, base-deleted, incomplete. */
- work_presence = svn_sqlite__column_token(stmt, 1, presence_map);
+ moved_to = apr_palloc(result_pool, sizeof(*moved_to));
+ moved_to->op_depth = working_op_depth;
+ moved_to->local_relpath = node_moved_to;
+ APR_ARRAY_PUSH(*moved_tos, struct svn_wc__db_moved_to_t *) = moved_to;
- /* The starting node should be deleted. */
- if (current_relpath == local_relpath
- && work_presence != svn_wc__db_status_not_present
- && work_presence != svn_wc__db_status_base_deleted)
- return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS,
- svn_sqlite__reset(stmt),
- _("Expected node '%s' to be deleted."),
- path_for_error_message(wcroot,
- local_relpath,
- scratch_pool));
+ SVN_ERR(follow_moved_to(moved_tos, relpath_depth(ancestor_moved_to),
+ repos_path, revision, wcroot, node_moved_to,
+ result_pool, scratch_pool));
+ break;
+ }
+ }
- SVN_ERR_ASSERT(work_presence == svn_wc__db_status_normal
- || work_presence == svn_wc__db_status_incomplete
- || work_presence == svn_wc__db_status_not_present
- || work_presence == svn_wc__db_status_base_deleted);
+ return SVN_NO_ERROR;
+}
- have_base = !svn_sqlite__column_is_null(stmt,
- 0 /* BASE_NODE.presence */);
- if (have_base)
- {
- svn_wc__db_status_t base_presence
- = svn_sqlite__column_token(stmt, 0, presence_map);
-
- /* Only "normal" and "not-present" are allowed. */
- SVN_ERR_ASSERT(base_presence == svn_wc__db_status_normal
- || base_presence == svn_wc__db_status_not_present
-
- /* ### there are cases where the BASE node is
- ### marked as incomplete. we should treat this
- ### as a "normal" node for the purposes of
- ### this function. we really should not allow
- ### it, but this situation occurs within the
- ### following tests:
- ### switch_tests 31
- ### update_tests 46
- ### update_tests 53
- */
- || base_presence == svn_wc__db_status_incomplete
- );
-
-#if 1
- /* ### see above comment */
- if (base_presence == svn_wc__db_status_incomplete)
- base_presence = svn_wc__db_status_normal;
-#endif
+svn_error_t *
+svn_wc__db_follow_moved_to(apr_array_header_t **moved_tos,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_wcroot_t *wcroot;
+ const char *local_relpath;
- /* If a BASE node is marked as not-present, then we'll ignore
- it within this function. That status is simply a bookkeeping
- gimmick, not a real node that may have been deleted. */
- }
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
- /* Only grab the nearest ancestor. */
- if (!found_moved_to &&
- (sd_baton->moved_to_relpath != NULL
- || sd_baton->base_del_relpath != NULL)
- && !svn_sqlite__column_is_null(stmt, 2 /* moved_to */))
- {
- /* There better be a BASE_NODE (that was moved-away). */
- SVN_ERR_ASSERT(have_base);
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
+ local_abspath, scratch_pool, scratch_pool));
+ VERIFY_USABLE_WCROOT(wcroot);
- found_moved_to = TRUE;
+ *moved_tos = apr_array_make(result_pool, 0,
+ sizeof(struct svn_wc__db_moved_to_t *));
- /* This makes things easy. It's the BASE_DEL_ABSPATH! */
- if (sd_baton->base_del_relpath != NULL)
- *sd_baton->base_del_relpath = apr_pstrdup(sd_baton->result_pool,
- current_relpath);
+ /* ### Wrap in a transaction */
+ SVN_ERR(follow_moved_to(moved_tos, 0, NULL, SVN_INVALID_REVNUM,
+ wcroot, local_relpath,
+ result_pool, scratch_pool));
- if (sd_baton->moved_to_relpath != NULL)
- *sd_baton->moved_to_relpath = apr_pstrdup(sd_baton->result_pool,
- svn_sqlite__column_text(stmt, 2, NULL));
- }
+ /* ### Convert moved_to to abspath */
- op_depth = svn_sqlite__column_int64(stmt, 3);
- if (current_relpath == local_relpath)
- local_op_depth = op_depth;
+ return SVN_NO_ERROR;
+}
- if (sd_baton->work_del_relpath && !sd_baton->work_del_relpath[0]
- && ((op_depth < local_op_depth && op_depth > 0)
- || child_presence == svn_wc__db_status_not_present))
- {
- *sd_baton->work_del_relpath = apr_pstrdup(sd_baton->result_pool,
- child_relpath);
- }
+/* Extract the moved-to information for LOCAL_RELPATH at OP-DEPTH by
+ examining the lowest working node above OP_DEPTH. The output paths
+ are NULL if there is no move, otherwise:
- /* We're all done examining the return values. */
- SVN_ERR(svn_sqlite__reset(stmt));
+ *MOVE_DST_RELPATH: the moved-to destination of LOCAL_RELPATH.
- /* Move to the parent node. Remember the information about this node
- for our parent to use. */
- child_relpath = current_relpath;
- child_presence = work_presence;
- child_has_base = have_base;
+ *MOVE_DST_OP_ROOT_RELPATH: the moved-to destination of the root of
+ the move of LOCAL_RELPATH. This may be equal to *MOVE_DST_RELPATH
+ if LOCAL_RELPATH is the root of the move.
- /* The wcroot can't be deleted, but make sure we don't loop on invalid
- data */
- SVN_ERR_ASSERT(current_relpath[0] != '\0');
+ *MOVE_SRC_ROOT_RELPATH: the root of the move source. For moves
+ inside a delete this will be different from *MOVE_SRC_OP_ROOT_RELPATH.
- current_relpath = svn_relpath_dirname(current_relpath, scratch_pool);
- }
+ *MOVE_SRC_OP_ROOT_RELPATH: the root of the source layer that
+ contains the move. For moves inside deletes this is the root of
+ the delete, for other moves this is the root of the move.
- return SVN_NO_ERROR;
-}
+ Given a path A/B/C with A/B moved to X then for A/B/C
+ MOVE_DST_RELPATH is X/C
+ MOVE_DST_OP_ROOT_RELPATH is X
+ MOVE_SRC_ROOT_RELPATH is A/B
+ MOVE_SRC_OP_ROOT_RELPATH is A/B
-/* Like svn_wc__db_scan_deletion(), but with WCROOT+LOCAL_RELPATH instead of
- DB+LOCAL_ABSPATH, and outputting relpaths instead of abspaths. */
-static svn_error_t *
-scan_deletion(const char **base_del_relpath,
- const char **moved_to_relpath,
- const char **work_del_relpath,
- svn_wc__db_wcroot_t *wcroot,
- const char *local_relpath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+ If A is then deleted the MOVE_DST_RELPATH, MOVE_DST_OP_ROOT_RELPATH
+ and MOVE_SRC_ROOT_RELPATH remain the same but MOVE_SRC_OP_ROOT_RELPATH
+ changes to A.
+
+ ### Think about combining with scan_deletion? Also with
+ ### scan_addition to get moved-to for replaces? Do we need to
+ ### return the op-root of the move source, i.e. A/B in the example
+ ### above? */
+svn_error_t *
+svn_wc__db_op_depth_moved_to(const char **move_dst_relpath,
+ const char **move_dst_op_root_relpath,
+ const char **move_src_root_relpath,
+ const char **move_src_op_root_relpath,
+ int op_depth,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- struct scan_deletion_baton_t sd_baton;
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+ int delete_op_depth;
+ const char *relpath = local_relpath;
- sd_baton.base_del_relpath = base_del_relpath;
- sd_baton.moved_to_relpath = moved_to_relpath;
- sd_baton.work_del_relpath = work_del_relpath;
- sd_baton.result_pool = result_pool;
+ *move_dst_relpath = *move_dst_op_root_relpath = NULL;
+ *move_src_root_relpath = *move_src_op_root_relpath = NULL;
- return svn_error_trace(svn_wc__db_with_txn(wcroot, local_relpath,
- scan_deletion_txn, &sd_baton,
- scratch_pool));
-}
+ do
+ {
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_LOWEST_WORKING_NODE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id, relpath, op_depth));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ if (have_row)
+ {
+ delete_op_depth = svn_sqlite__column_int(stmt, 0);
+ *move_dst_op_root_relpath = svn_sqlite__column_text(stmt, 3,
+ result_pool);
+ if (*move_dst_op_root_relpath)
+ *move_src_root_relpath = apr_pstrdup(result_pool, relpath);
+ }
+ SVN_ERR(svn_sqlite__reset(stmt));
+ if (!*move_dst_op_root_relpath)
+ relpath = svn_relpath_dirname(relpath, scratch_pool);
+ }
+ while (!*move_dst_op_root_relpath
+ && have_row && delete_op_depth <= relpath_depth(relpath));
+ if (*move_dst_op_root_relpath)
+ {
+ *move_dst_relpath
+ = svn_relpath_join(*move_dst_op_root_relpath,
+ svn_relpath_skip_ancestor(relpath, local_relpath),
+ result_pool);
+ while (delete_op_depth < relpath_depth(relpath))
+ relpath = svn_relpath_dirname(relpath, scratch_pool);
+ *move_src_op_root_relpath = apr_pstrdup(result_pool, relpath);
+ }
+ return SVN_NO_ERROR;
+}
+
+/* Public (within libsvn_wc) absolute path version of
+ svn_wc__db_op_depth_moved_to with the op-depth hard-coded to
+ BASE. */
svn_error_t *
-svn_wc__db_scan_deletion(const char **base_del_abspath,
- const char **moved_to_abspath,
- const char **work_del_abspath,
+svn_wc__db_base_moved_to(const char **move_dst_abspath,
+ const char **move_dst_op_root_abspath,
+ const char **move_src_root_abspath,
+ const char **move_src_op_root_abspath,
svn_wc__db_t *db,
const char *local_abspath,
apr_pool_t *result_pool,
@@ -9679,7 +12771,8 @@ svn_wc__db_scan_deletion(const char **base_del_abspath,
{
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
- const char *base_del_relpath, *moved_to_relpath, *work_del_relpath;
+ const char *move_dst_relpath, *move_dst_op_root_relpath;
+ const char *move_src_root_relpath, *move_src_op_root_relpath;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
@@ -9687,36 +12780,42 @@ svn_wc__db_scan_deletion(const char **base_del_abspath,
local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- SVN_ERR(scan_deletion(&base_del_relpath, &moved_to_relpath,
- &work_del_relpath, wcroot,
- local_relpath, scratch_pool, scratch_pool));
+ SVN_WC__DB_WITH_TXN(svn_wc__db_op_depth_moved_to(&move_dst_relpath,
+ &move_dst_op_root_relpath,
+ &move_src_root_relpath,
+ &move_src_op_root_relpath,
+ 0 /* BASE op-depth */,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool),
+ wcroot);
- if (base_del_abspath)
- {
- *base_del_abspath = (base_del_relpath
- ? svn_dirent_join(wcroot->abspath,
- base_del_relpath, result_pool)
- : NULL);
- }
- if (moved_to_abspath)
- {
- *moved_to_abspath = (moved_to_relpath
- ? svn_dirent_join(wcroot->abspath,
- moved_to_relpath, result_pool)
- : NULL);
- }
- if (work_del_abspath)
- {
- *work_del_abspath = (work_del_relpath
- ? svn_dirent_join(wcroot->abspath,
- work_del_relpath, result_pool)
- : NULL);
- }
+ if (move_dst_abspath)
+ *move_dst_abspath
+ = move_dst_relpath
+ ? svn_dirent_join(wcroot->abspath, move_dst_relpath, result_pool)
+ : NULL;
+
+ if (move_dst_op_root_abspath)
+ *move_dst_op_root_abspath
+ = move_dst_op_root_relpath
+ ? svn_dirent_join(wcroot->abspath, move_dst_op_root_relpath, result_pool)
+ : NULL;
+
+ if (move_src_root_abspath)
+ *move_src_root_abspath
+ = move_src_root_relpath
+ ? svn_dirent_join(wcroot->abspath, move_src_root_relpath, result_pool)
+ : NULL;
+
+ if (move_src_op_root_abspath)
+ *move_src_op_root_abspath
+ = move_src_op_root_relpath
+ ? svn_dirent_join(wcroot->abspath, move_src_op_root_relpath, result_pool)
+ : NULL;
return SVN_NO_ERROR;
}
-
svn_error_t *
svn_wc__db_upgrade_begin(svn_sqlite__db_t **sdb,
apr_int64_t *repos_id,
@@ -9728,9 +12827,13 @@ svn_wc__db_upgrade_begin(svn_sqlite__db_t **sdb,
apr_pool_t *scratch_pool)
{
svn_wc__db_wcroot_t *wcroot;
+
+ /* Upgrade is inherently exclusive so specify exclusive locking. */
SVN_ERR(create_db(sdb, repos_id, wc_id, dir_abspath,
repos_root_url, repos_uuid,
SDB_FILE,
+ NULL, SVN_INVALID_REVNUM, svn_depth_unknown,
+ TRUE /* exclusive */,
wc_db->state_pool, scratch_pool));
SVN_ERR(svn_wc__db_pdh_create_wcroot(&wcroot,
@@ -9742,7 +12845,7 @@ svn_wc__db_upgrade_begin(svn_sqlite__db_t **sdb,
wc_db->state_pool, scratch_pool));
/* The WCROOT is complete. Stash it into DB. */
- apr_hash_set(wc_db->dir_data, wcroot->abspath, APR_HASH_KEY_STRING, wcroot);
+ svn_hash_sets(wc_db->dir_data, wcroot->abspath, wcroot);
return SVN_NO_ERROR;
}
@@ -9801,11 +12904,10 @@ svn_wc__db_upgrade_apply_props(svn_sqlite__db_t *sdb,
{
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
- apr_int64_t top_op_depth = -1;
- apr_int64_t below_op_depth = -1;
+ int top_op_depth = -1;
+ int below_op_depth = -1;
svn_wc__db_status_t top_presence;
svn_wc__db_status_t below_presence;
- svn_wc__db_kind_t kind = svn_wc__db_kind_unknown;
int affected_rows;
/* ### working_props: use set_props_txn.
@@ -9840,13 +12942,12 @@ svn_wc__db_upgrade_apply_props(svn_sqlite__db_t *sdb,
SVN_ERR(svn_sqlite__step(&have_row, stmt));
if (have_row)
{
- top_op_depth = svn_sqlite__column_int64(stmt, 0);
+ top_op_depth = svn_sqlite__column_int(stmt, 0);
top_presence = svn_sqlite__column_token(stmt, 3, presence_map);
- kind = svn_sqlite__column_token(stmt, 4, kind_map);
SVN_ERR(svn_sqlite__step(&have_row, stmt));
if (have_row)
{
- below_op_depth = svn_sqlite__column_int64(stmt, 0);
+ below_op_depth = svn_sqlite__column_int(stmt, 0);
below_presence = svn_sqlite__column_token(stmt, 3, presence_map);
}
}
@@ -9891,7 +12992,7 @@ svn_wc__db_upgrade_apply_props(svn_sqlite__db_t *sdb,
{
SVN_ERR(svn_sqlite__get_statement(&stmt, sdb,
STMT_UPDATE_NODE_PROPS));
- SVN_ERR(svn_sqlite__bindf(stmt, "isi",
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd",
wc_id, local_relpath, top_op_depth));
SVN_ERR(svn_sqlite__bind_properties(stmt, 4, base_props, scratch_pool));
SVN_ERR(svn_sqlite__update(&affected_rows, stmt));
@@ -9905,7 +13006,7 @@ svn_wc__db_upgrade_apply_props(svn_sqlite__db_t *sdb,
SVN_ERR(svn_sqlite__get_statement(&stmt, sdb,
STMT_UPDATE_NODE_PROPS));
- SVN_ERR(svn_sqlite__bindf(stmt, "isi",
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd",
wc_id, local_relpath, below_op_depth));
SVN_ERR(svn_sqlite__bind_properties(stmt, 4, props, scratch_pool));
SVN_ERR(svn_sqlite__update(&affected_rows, stmt));
@@ -9931,56 +13032,83 @@ svn_wc__db_upgrade_apply_props(svn_sqlite__db_t *sdb,
sdb, scratch_pool));
}
- if (kind == svn_wc__db_kind_dir)
- {
- const char *externals;
- apr_hash_t *props = working_props;
+ return SVN_NO_ERROR;
+}
- if (props == NULL)
- props = base_props;
+svn_error_t *
+svn_wc__db_upgrade_insert_external(svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_node_kind_t kind,
+ const char *parent_abspath,
+ const char *def_local_abspath,
+ const char *repos_relpath,
+ const char *repos_root_url,
+ const char *repos_uuid,
+ svn_revnum_t def_peg_revision,
+ svn_revnum_t def_revision,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_wcroot_t *wcroot;
+ const char *def_local_relpath;
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+ apr_int64_t repos_id;
- externals = svn_prop_get_value(props, SVN_PROP_EXTERNALS);
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
- if (externals != NULL)
- {
- int i;
- apr_array_header_t *ext;
+ /* We know only of DEF_LOCAL_ABSPATH that it definitely belongs to "this"
+ * WC, i.e. where the svn:externals prop is set. The external target path
+ * itself may be "hidden behind" other working copies. */
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &def_local_relpath,
+ db, def_local_abspath,
+ scratch_pool, scratch_pool));
+ VERIFY_USABLE_WCROOT(wcroot);
- SVN_ERR(svn_sqlite__get_statement(&stmt, sdb,
- STMT_INSERT_EXTERNAL_UPGRADE));
- SVN_ERR(svn_wc_parse_externals_description3(
- &ext, svn_dirent_join(dir_abspath, local_relpath,
- scratch_pool),
- externals, FALSE, scratch_pool));
- for (i = 0; i < ext->nelts; i++)
- {
- const svn_wc_external_item2_t *item;
- const char *item_relpath;
-
- item = APR_ARRAY_IDX(ext, i, const svn_wc_external_item2_t *);
- item_relpath = svn_relpath_join(local_relpath, item->target_dir,
- scratch_pool);
-
- SVN_ERR(svn_sqlite__bindf(stmt, "issssis",
- wc_id,
- item_relpath,
- svn_relpath_dirname(item_relpath,
- scratch_pool),
- "normal",
- local_relpath,
- (apr_int64_t)1, /* repos_id */
- "" /* repos_relpath */));
-
- SVN_ERR(svn_sqlite__insert(NULL, stmt));
- }
- }
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_REPOSITORY));
+ SVN_ERR(svn_sqlite__bindf(stmt, "s", repos_root_url));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+
+ if (have_row)
+ repos_id = svn_sqlite__column_int64(stmt, 0);
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ if (!have_row)
+ {
+ /* Need to set up a new repository row. */
+ SVN_ERR(create_repos_id(&repos_id, repos_root_url, repos_uuid,
+ wcroot->sdb, scratch_pool));
}
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_INSERT_EXTERNAL));
+
+ /* wc_id, local_relpath, parent_relpath, presence, kind, def_local_relpath,
+ * repos_id, def_repos_relpath, def_operational_revision, def_revision */
+ SVN_ERR(svn_sqlite__bindf(stmt, "issstsis",
+ wcroot->wc_id,
+ svn_dirent_skip_ancestor(wcroot->abspath,
+ local_abspath),
+ svn_dirent_skip_ancestor(wcroot->abspath,
+ parent_abspath),
+ "normal",
+ kind_map, kind,
+ def_local_relpath,
+ repos_id,
+ repos_relpath));
+
+ if (SVN_IS_VALID_REVNUM(def_peg_revision))
+ SVN_ERR(svn_sqlite__bind_revnum(stmt, 9, def_peg_revision));
+
+ if (SVN_IS_VALID_REVNUM(def_revision))
+ SVN_ERR(svn_sqlite__bind_revnum(stmt, 10, def_revision));
+
+ SVN_ERR(svn_sqlite__insert(NULL, stmt));
+
return SVN_NO_ERROR;
}
-
svn_error_t *
svn_wc__db_upgrade_get_repos_id(apr_int64_t *repos_id,
svn_sqlite__db_t *sdb,
@@ -10028,29 +13156,25 @@ svn_wc__db_wq_add(svn_wc__db_t *db,
scratch_pool));
}
-/* Baton for wq_fetch_next */
-struct wq_fetch_next_baton_t
-{
- apr_uint64_t id;
- svn_skel_t *work_item;
- apr_pool_t *result_pool;
-};
-
+/* The body of svn_wc__db_wq_fetch_next().
+ */
static svn_error_t *
-wq_fetch_next(void *baton,
- svn_wc__db_wcroot_t *wcroot,
- const char *local_relpath,
- apr_pool_t *scratch_pool)
+wq_fetch_next(apr_uint64_t *id,
+ svn_skel_t **work_item,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_uint64_t completed_id,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
svn_sqlite__stmt_t *stmt;
- struct wq_fetch_next_baton_t *fnb = baton;
svn_boolean_t have_row;
- if (fnb->id != 0)
+ if (completed_id != 0)
{
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_DELETE_WORK_ITEM));
- SVN_ERR(svn_sqlite__bind_int64(stmt, 1, fnb->id));
+ SVN_ERR(svn_sqlite__bind_int64(stmt, 1, completed_id));
SVN_ERR(svn_sqlite__step_done(stmt));
}
@@ -10061,19 +13185,19 @@ wq_fetch_next(void *baton,
if (!have_row)
{
- fnb->id = 0;
- fnb->work_item = NULL;
+ *id = 0;
+ *work_item = NULL;
}
else
{
apr_size_t len;
const void *val;
- fnb->id = svn_sqlite__column_int64(stmt, 0);
+ *id = svn_sqlite__column_int64(stmt, 0);
- val = svn_sqlite__column_blob(stmt, 1, &len, fnb->result_pool);
+ val = svn_sqlite__column_blob(stmt, 1, &len, result_pool);
- fnb->work_item = svn_skel__parse(val, len, fnb->result_pool);
+ *work_item = svn_skel__parse(val, len, result_pool);
}
return svn_error_trace(svn_sqlite__reset(stmt));
@@ -10090,7 +13214,6 @@ svn_wc__db_wq_fetch_next(apr_uint64_t *id,
{
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
- struct wq_fetch_next_baton_t fnb;
SVN_ERR_ASSERT(id != NULL);
SVN_ERR_ASSERT(work_item != NULL);
@@ -10100,19 +13223,80 @@ svn_wc__db_wq_fetch_next(apr_uint64_t *id,
wri_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- fnb.id = completed_id;
- fnb.result_pool = result_pool;
+ SVN_WC__DB_WITH_TXN(
+ wq_fetch_next(id, work_item,
+ wcroot, local_relpath, completed_id,
+ result_pool, scratch_pool),
+ wcroot);
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, wq_fetch_next, &fnb,
- scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+/* Records timestamp and date for one or more files in wcroot */
+static svn_error_t *
+wq_record(svn_wc__db_wcroot_t *wcroot,
+ apr_hash_t *record_map,
+ apr_pool_t *scratch_pool)
+{
+ apr_hash_index_t *hi;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+
+ for (hi = apr_hash_first(scratch_pool, record_map); hi;
+ hi = apr_hash_next(hi))
+ {
+ const char *local_abspath = svn__apr_hash_index_key(hi);
+ const svn_io_dirent2_t *dirent = svn__apr_hash_index_val(hi);
+ const char *local_relpath = svn_dirent_skip_ancestor(wcroot->abspath,
+ local_abspath);
+
+ svn_pool_clear(iterpool);
+
+ if (! local_relpath)
+ continue;
+
+ SVN_ERR(db_record_fileinfo(wcroot, local_relpath,
+ dirent->filesize, dirent->mtime,
+ iterpool));
+ }
+
+ svn_pool_destroy(iterpool);
+ return SVN_NO_ERROR;
+}
- *id = fnb.id;
- *work_item = fnb.work_item;
+svn_error_t *
+svn_wc__db_wq_record_and_fetch_next(apr_uint64_t *id,
+ svn_skel_t **work_item,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
+ apr_uint64_t completed_id,
+ apr_hash_t *record_map,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_wcroot_t *wcroot;
+ const char *local_relpath;
+
+ SVN_ERR_ASSERT(id != NULL);
+ SVN_ERR_ASSERT(work_item != NULL);
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(wri_abspath));
+
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
+ wri_abspath, scratch_pool, scratch_pool));
+ VERIFY_USABLE_WCROOT(wcroot);
+
+ SVN_WC__DB_WITH_TXN(
+ svn_error_compose_create(
+ wq_fetch_next(id, work_item,
+ wcroot, local_relpath, completed_id,
+ result_pool, scratch_pool),
+ wq_record(wcroot, record_map, scratch_pool)),
+ wcroot);
return SVN_NO_ERROR;
}
+
/* ### temporary API. remove before release. */
svn_error_t *
svn_wc__db_temp_get_format(int *format,
@@ -10134,7 +13318,7 @@ svn_wc__db_temp_get_format(int *format,
directory to not be a working copy. */
if (err)
{
- if (err && err->apr_err != SVN_ERR_WC_NOT_WORKING_COPY)
+ if (err->apr_err != SVN_ERR_WC_NOT_WORKING_COPY)
return svn_error_trace(err);
svn_error_clear(err);
@@ -10182,8 +13366,7 @@ svn_wc__db_temp_get_access(svn_wc__db_t *db,
if (!wcroot)
return NULL;
- return apr_hash_get(wcroot->access_cache, local_dir_abspath,
- APR_HASH_KEY_STRING);
+ return svn_hash_gets(wcroot->access_cache, local_dir_abspath);
}
@@ -10211,11 +13394,10 @@ svn_wc__db_temp_set_access(svn_wc__db_t *db,
}
/* Better not override something already there. */
- SVN_ERR_ASSERT_NO_RETURN(apr_hash_get(wcroot->access_cache,
- local_dir_abspath,
- APR_HASH_KEY_STRING) == NULL);
- apr_hash_set(wcroot->access_cache, local_dir_abspath,
- APR_HASH_KEY_STRING, adm_access);
+ SVN_ERR_ASSERT_NO_RETURN(
+ svn_hash_gets(wcroot->access_cache, local_dir_abspath) == NULL
+ );
+ svn_hash_sets(wcroot->access_cache, local_dir_abspath, adm_access);
}
@@ -10234,8 +13416,7 @@ svn_wc__db_temp_close_access(svn_wc__db_t *db,
SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
local_dir_abspath, scratch_pool, scratch_pool));
- apr_hash_set(wcroot->access_cache, local_dir_abspath,
- APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(wcroot->access_cache, local_dir_abspath, NULL);
return SVN_NO_ERROR;
}
@@ -10262,8 +13443,7 @@ svn_wc__db_temp_clear_access(svn_wc__db_t *db,
return;
}
- apr_hash_set(wcroot->access_cache, local_dir_abspath,
- APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(wcroot->access_cache, local_dir_abspath, NULL);
}
@@ -10333,7 +13513,7 @@ svn_wc__db_read_conflict_victims(const apr_array_header_t **victims,
/* Look for text, tree and property conflicts in ACTUAL */
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_SELECT_ACTUAL_CONFLICT_VICTIMS));
+ STMT_SELECT_CONFLICT_VICTIMS));
SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
new_victims = apr_array_make(result_pool, 0, sizeof(const char *));
@@ -10355,174 +13535,214 @@ svn_wc__db_read_conflict_victims(const apr_array_header_t **victims,
return SVN_NO_ERROR;
}
-
-svn_error_t *
-svn_wc__db_get_conflict_marker_files(apr_hash_t **marker_files,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+/* The body of svn_wc__db_get_conflict_marker_files().
+ */
+static svn_error_t *
+get_conflict_marker_files(apr_hash_t **marker_files_p,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ svn_wc__db_t *db,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- svn_wc__db_wcroot_t *wcroot;
- const char *local_relpath;
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
+ apr_hash_t *marker_files = apr_hash_make(result_pool);
- /* The parent should be a working copy directory. */
- SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
- local_abspath, scratch_pool, scratch_pool));
- VERIFY_USABLE_WCROOT(wcroot);
-
- /* Look for text and property conflicts in ACTUAL */
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_SELECT_CONFLICT_MARKER_FILES));
+ STMT_SELECT_ACTUAL_NODE));
SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
SVN_ERR(svn_sqlite__step(&have_row, stmt));
- if (have_row)
- *marker_files = apr_hash_make(result_pool);
- else
- *marker_files = NULL;
+ if (have_row && !svn_sqlite__column_is_null(stmt, 2))
+ {
+ apr_size_t len;
+ const void *data = svn_sqlite__column_blob(stmt, 2, &len, NULL);
+ svn_skel_t *conflicts;
+ const apr_array_header_t *markers;
+ int i;
+
+ conflicts = svn_skel__parse(data, len, scratch_pool);
+
+ /* ### ADD markers to *marker_files */
+ SVN_ERR(svn_wc__conflict_read_markers(&markers, db, wcroot->abspath,
+ conflicts,
+ result_pool, scratch_pool));
+
+ for (i = 0; markers && (i < markers->nelts); i++)
+ {
+ const char *marker_abspath = APR_ARRAY_IDX(markers, i, const char*);
+
+ svn_hash_sets(marker_files, marker_abspath, "");
+ }
+ }
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_CONFLICT_VICTIMS));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
while (have_row)
{
- /* Collect the basenames of any conflict marker files. */
- const char *marker_relpath;
- const char *base_name;
+ apr_size_t len;
+ const void *data = svn_sqlite__column_blob(stmt, 1, &len, NULL);
+
+ const apr_array_header_t *markers;
int i;
- for (i = 0; i < 4; i++)
+ if (data)
{
- marker_relpath = svn_sqlite__column_text(stmt, i, scratch_pool);
- if (marker_relpath)
+ svn_skel_t *conflicts;
+ conflicts = svn_skel__parse(data, len, scratch_pool);
+
+ SVN_ERR(svn_wc__conflict_read_markers(&markers, db, wcroot->abspath,
+ conflicts,
+ result_pool, scratch_pool));
+
+ for (i = 0; markers && (i < markers->nelts); i++)
{
- base_name = svn_relpath_basename(marker_relpath, result_pool);
- apr_hash_set(*marker_files, base_name, APR_HASH_KEY_STRING,
- base_name);
+ const char *marker_abspath = APR_ARRAY_IDX(markers, i, const char*);
+
+ svn_hash_sets(marker_files, marker_abspath, "");
}
}
SVN_ERR(svn_sqlite__step(&have_row, stmt));
}
- return svn_sqlite__reset(stmt);
+ if (apr_hash_count(marker_files))
+ *marker_files_p = marker_files;
+ else
+ *marker_files_p = NULL;
+
+ return svn_error_trace(svn_sqlite__reset(stmt));
+}
+
+svn_error_t *
+svn_wc__db_get_conflict_marker_files(apr_hash_t **marker_files,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_wcroot_t *wcroot;
+ const char *local_relpath;
+
+ /* The parent should be a working copy directory. */
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
+ local_abspath, scratch_pool, scratch_pool));
+ VERIFY_USABLE_WCROOT(wcroot);
+
+ SVN_WC__DB_WITH_TXN(
+ get_conflict_marker_files(marker_files, wcroot, local_relpath, db,
+ result_pool, scratch_pool),
+ wcroot);
+
+ return SVN_NO_ERROR;
}
svn_error_t *
-svn_wc__db_read_conflicts(const apr_array_header_t **conflicts,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+svn_wc__db_read_conflict(svn_skel_t **conflict,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
- svn_sqlite__stmt_t *stmt;
- svn_boolean_t have_row;
- apr_array_header_t *cflcts;
/* The parent should be a working copy directory. */
SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- /* ### This will be much easier once we have all conflicts in one
- field of actual.*/
+ return svn_error_trace(svn_wc__db_read_conflict_internal(conflict, wcroot,
+ local_relpath,
+ result_pool,
+ scratch_pool));
+}
- /* First look for text and property conflicts in ACTUAL */
+svn_error_t *
+svn_wc__db_read_conflict_internal(svn_skel_t **conflict,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+
+ /* Check if we have a conflict in ACTUAL */
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_SELECT_CONFLICT_DETAILS));
+ STMT_SELECT_ACTUAL_NODE));
SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
- cflcts = apr_array_make(result_pool, 4,
- sizeof(svn_wc_conflict_description2_t*));
-
SVN_ERR(svn_sqlite__step(&have_row, stmt));
- if (have_row)
+ if (! have_row)
{
- const char *prop_reject;
- const char *conflict_old;
- const char *conflict_new;
- const char *conflict_working;
- const char *conflict_data;
+ /* Do this while stmt is still open to avoid closing the sqlite
+ transaction and then reopening. */
+ svn_sqlite__stmt_t *stmt_node;
+ svn_error_t *err;
- /* ### Store in description! */
- prop_reject = svn_sqlite__column_text(stmt, 0, NULL);
- if (prop_reject)
- {
- svn_wc_conflict_description2_t *desc;
+ err = svn_sqlite__get_statement(&stmt_node, wcroot->sdb,
+ STMT_SELECT_NODE_INFO);
- desc = svn_wc_conflict_description_create_prop2(local_abspath,
- svn_node_unknown,
- "",
- result_pool);
+ if (err)
+ stmt_node = NULL;
+ else
+ err = svn_sqlite__bindf(stmt_node, "is", wcroot->wc_id,
+ local_relpath);
- desc->their_abspath = svn_dirent_join(wcroot->abspath, prop_reject,
- result_pool);
+ if (!err)
+ err = svn_sqlite__step(&have_row, stmt_node);
- APR_ARRAY_PUSH(cflcts, svn_wc_conflict_description2_t*) = desc;
- }
+ if (stmt_node)
+ err = svn_error_compose_create(err,
+ svn_sqlite__reset(stmt_node));
- conflict_old = svn_sqlite__column_text(stmt, 1, NULL);
- conflict_new = svn_sqlite__column_text(stmt, 2, NULL);
- conflict_working = svn_sqlite__column_text(stmt, 3, NULL);
+ SVN_ERR(svn_error_compose_create(err, svn_sqlite__reset(stmt)));
- if (conflict_old || conflict_new || conflict_working)
+ if (have_row)
{
- svn_wc_conflict_description2_t *desc
- = svn_wc_conflict_description_create_text2(local_abspath,
- result_pool);
-
- if (conflict_old)
- desc->base_abspath = svn_dirent_join(wcroot->abspath, conflict_old,
- result_pool);
- if (conflict_new)
- desc->their_abspath = svn_dirent_join(wcroot->abspath, conflict_new,
- result_pool);
- if (conflict_working)
- desc->my_abspath = svn_dirent_join(wcroot->abspath,
- conflict_working, result_pool);
- desc->merged_file = svn_dirent_basename(local_abspath, result_pool);
-
- APR_ARRAY_PUSH(cflcts, svn_wc_conflict_description2_t*) = desc;
+ *conflict = NULL;
+ return SVN_NO_ERROR;
}
- conflict_data = svn_sqlite__column_text(stmt, 4, scratch_pool);
- if (conflict_data)
- {
- const svn_wc_conflict_description2_t *desc;
- const svn_skel_t *skel;
- svn_error_t *err;
-
- skel = svn_skel__parse(conflict_data, strlen(conflict_data),
- scratch_pool);
- err = svn_wc__deserialize_conflict(&desc, skel,
- svn_dirent_dirname(local_abspath, scratch_pool),
- result_pool, scratch_pool);
-
- if (err)
- SVN_ERR(svn_error_compose_create(err,
- svn_sqlite__reset(stmt)));
-
- APR_ARRAY_PUSH(cflcts, const svn_wc_conflict_description2_t *) = desc;
- }
+ return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
+ _("The node '%s' was not found."),
+ path_for_error_message(wcroot,
+ local_relpath,
+ scratch_pool));
}
- SVN_ERR(svn_sqlite__reset(stmt));
+ {
+ apr_size_t cfl_len;
+ const void *cfl_data;
- *conflicts = cflcts;
+ /* svn_skel__parse doesn't copy data, so store in result_pool */
+ cfl_data = svn_sqlite__column_blob(stmt, 2, &cfl_len, result_pool);
- return SVN_NO_ERROR;
+ if (cfl_data)
+ *conflict = svn_skel__parse(cfl_data, cfl_len, result_pool);
+ else
+ *conflict = NULL;
+
+ return svn_error_trace(svn_sqlite__reset(stmt));
+ }
}
svn_error_t *
-svn_wc__db_read_kind(svn_wc__db_kind_t *kind,
+svn_wc__db_read_kind(svn_node_kind_t *kind,
svn_wc__db_t *db,
const char *local_abspath,
svn_boolean_t allow_missing,
+ svn_boolean_t show_deleted,
+ svn_boolean_t show_hidden,
apr_pool_t *scratch_pool)
{
svn_wc__db_wcroot_t *wcroot;
@@ -10545,7 +13765,7 @@ svn_wc__db_read_kind(svn_wc__db_kind_t *kind,
{
if (allow_missing)
{
- *kind = svn_wc__db_kind_unknown;
+ *kind = svn_node_unknown;
SVN_ERR(svn_sqlite__reset(stmt_info));
return SVN_NO_ERROR;
}
@@ -10560,6 +13780,42 @@ svn_wc__db_read_kind(svn_wc__db_kind_t *kind,
}
}
+ if (!(show_deleted && show_hidden))
+ {
+ int op_depth = svn_sqlite__column_int(stmt_info, 0);
+ svn_boolean_t report_none = FALSE;
+ svn_wc__db_status_t status = svn_sqlite__column_token(stmt_info, 3,
+ presence_map);
+
+ if (op_depth > 0)
+ SVN_ERR(convert_to_working_status(&status, status));
+
+ switch (status)
+ {
+ case svn_wc__db_status_not_present:
+ if (! (show_hidden && show_deleted))
+ report_none = TRUE;
+ break;
+ case svn_wc__db_status_excluded:
+ case svn_wc__db_status_server_excluded:
+ if (! show_hidden)
+ report_none = TRUE;
+ break;
+ case svn_wc__db_status_deleted:
+ if (! show_deleted)
+ report_none = TRUE;
+ break;
+ default:
+ break;
+ }
+
+ if (report_none)
+ {
+ *kind = svn_node_none;
+ return svn_error_trace(svn_sqlite__reset(stmt_info));
+ }
+ }
+
*kind = svn_sqlite__column_token(stmt_info, 4, kind_map);
return svn_error_trace(svn_sqlite__reset(stmt_info));
@@ -10598,7 +13854,7 @@ svn_wc__db_node_hidden(svn_boolean_t *hidden,
svn_error_t *
-svn_wc__db_is_wcroot(svn_boolean_t *is_root,
+svn_wc__db_is_wcroot(svn_boolean_t *is_wcroot,
svn_wc__db_t *db,
const char *local_abspath,
apr_pool_t *scratch_pool)
@@ -10614,16 +13870,131 @@ svn_wc__db_is_wcroot(svn_boolean_t *is_root,
if (*local_relpath != '\0')
{
- *is_root = FALSE; /* Node is a file, or has a parent directory within
+ *is_wcroot = FALSE; /* Node is a file, or has a parent directory within
the same wcroot */
return SVN_NO_ERROR;
}
- *is_root = TRUE;
+ *is_wcroot = TRUE;
return SVN_NO_ERROR;
}
+/* Find a node's kind and whether it is switched, putting the outputs in
+ * *IS_SWITCHED and *KIND. Either of the outputs may be NULL if not wanted.
+ */
+static svn_error_t *
+db_is_switched(svn_boolean_t *is_switched,
+ svn_node_kind_t *kind,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_status_t status;
+ apr_int64_t repos_id;
+ const char *repos_relpath;
+ const char *name;
+ const char *parent_local_relpath;
+ apr_int64_t parent_repos_id;
+ const char *parent_repos_relpath;
+
+ SVN_ERR_ASSERT(*local_relpath != '\0'); /* Handled in wrapper */
+
+ SVN_ERR(read_info(&status, kind, NULL, &repos_relpath, &repos_id, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ wcroot, local_relpath, scratch_pool, scratch_pool));
+
+ if (status == svn_wc__db_status_server_excluded
+ || status == svn_wc__db_status_excluded
+ || status == svn_wc__db_status_not_present)
+ {
+ return svn_error_createf(
+ SVN_ERR_WC_PATH_NOT_FOUND, NULL,
+ _("The node '%s' was not found."),
+ path_for_error_message(wcroot, local_relpath,
+ scratch_pool));
+ }
+ else if (! repos_relpath)
+ {
+ /* Node is shadowed; easy out */
+ if (is_switched)
+ *is_switched = FALSE;
+
+ return SVN_NO_ERROR;
+ }
+
+ if (! is_switched)
+ return SVN_NO_ERROR;
+
+ svn_relpath_split(&parent_local_relpath, &name, local_relpath, scratch_pool);
+
+ SVN_ERR(svn_wc__db_base_get_info_internal(NULL, NULL, NULL,
+ &parent_repos_relpath,
+ &parent_repos_id, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL,
+ wcroot, parent_local_relpath,
+ scratch_pool, scratch_pool));
+
+ if (repos_id != parent_repos_id)
+ *is_switched = TRUE;
+ else
+ {
+ const char *expected_relpath;
+
+ expected_relpath = svn_relpath_join(parent_repos_relpath, name,
+ scratch_pool);
+
+ *is_switched = (strcmp(expected_relpath, repos_relpath) != 0);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__db_is_switched(svn_boolean_t *is_wcroot,
+ svn_boolean_t *is_switched,
+ svn_node_kind_t *kind,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_wcroot_t *wcroot;
+ const char *local_relpath;
+
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
+ local_abspath, scratch_pool, scratch_pool));
+ VERIFY_USABLE_WCROOT(wcroot);
+
+ if (is_switched)
+ *is_switched = FALSE;
+
+ if (*local_relpath == '\0')
+ {
+ /* Easy out */
+ if (is_wcroot)
+ *is_wcroot = TRUE;
+
+ if (kind)
+ *kind = svn_node_dir;
+ return SVN_NO_ERROR;
+ }
+
+ if (is_wcroot)
+ *is_wcroot = FALSE;
+
+ if (! is_switched && ! kind)
+ return SVN_NO_ERROR;
+
+ SVN_WC__DB_WITH_TXN(
+ db_is_switched(is_switched, kind, wcroot, local_relpath, scratch_pool),
+ wcroot);
+ return SVN_NO_ERROR;
+}
+
svn_error_t *
svn_wc__db_temp_wcroot_tempdir(const char **temp_dir_abspath,
@@ -10651,14 +14022,6 @@ svn_wc__db_temp_wcroot_tempdir(const char **temp_dir_abspath,
}
-/* Baton for wclock_obtain_cb() */
-struct wclock_obtain_baton_t
-{
- int levels_to_lock;
- svn_boolean_t steal_lock;
-};
-
-
/* Helper for wclock_obtain_cb() to steal an existing lock */
static svn_error_t *
wclock_steal(svn_wc__db_wcroot_t *wcroot,
@@ -10676,21 +14039,21 @@ wclock_steal(svn_wc__db_wcroot_t *wcroot,
}
-/* svn_sqlite__transaction_callback_t for svn_wc__db_wclock_obtain() */
+/* The body of svn_wc__db_wclock_obtain().
+ */
static svn_error_t *
-wclock_obtain_cb(void *baton,
- svn_wc__db_wcroot_t *wcroot,
+wclock_obtain_cb(svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
+ int levels_to_lock,
+ svn_boolean_t steal_lock,
apr_pool_t *scratch_pool)
{
- struct wclock_obtain_baton_t *bt = baton;
svn_sqlite__stmt_t *stmt;
svn_error_t *err;
const char *lock_relpath;
int max_depth;
int lock_depth;
svn_boolean_t got_row;
- const char *filter;
svn_wc__db_wclock_t lock;
@@ -10712,14 +14075,12 @@ wclock_obtain_cb(void *baton,
scratch_pool));
}
- filter = construct_like_arg(local_relpath, scratch_pool);
-
/* Check if there are nodes locked below the new lock root */
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb, STMT_FIND_WC_LOCK));
- SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, filter));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
- lock_depth = (int)relpath_depth(local_relpath);
- max_depth = lock_depth + bt->levels_to_lock;
+ lock_depth = relpath_depth(local_relpath);
+ max_depth = lock_depth + levels_to_lock;
SVN_ERR(svn_sqlite__step(&got_row, stmt));
@@ -10731,7 +14092,7 @@ wclock_obtain_cb(void *baton,
/* If we are not locking with depth infinity, check if this lock
voids our lock request */
- if (bt->levels_to_lock >= 0
+ if (levels_to_lock >= 0
&& relpath_depth(lock_relpath) > max_depth)
{
SVN_ERR(svn_sqlite__step(&got_row, stmt));
@@ -10746,7 +14107,7 @@ wclock_obtain_cb(void *baton,
if (err)
SVN_ERR(svn_error_compose_create(err, svn_sqlite__reset(stmt)));
- if (!own_lock && !bt->steal_lock)
+ if (!own_lock && !steal_lock)
{
SVN_ERR(svn_sqlite__reset(stmt));
err = svn_error_createf(SVN_ERR_WC_LOCKED, NULL,
@@ -10773,7 +14134,7 @@ wclock_obtain_cb(void *baton,
SVN_ERR(svn_sqlite__reset(stmt));
- if (bt->steal_lock)
+ if (steal_lock)
SVN_ERR(wclock_steal(wcroot, local_relpath, scratch_pool));
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb, STMT_SELECT_WC_LOCK));
@@ -10789,7 +14150,7 @@ wclock_obtain_cb(void *baton,
{
int levels = svn_sqlite__column_int(stmt, 0);
if (levels >= 0)
- levels += (int)relpath_depth(lock_relpath);
+ levels += relpath_depth(lock_relpath);
SVN_ERR(svn_sqlite__reset(stmt));
@@ -10824,8 +14185,8 @@ wclock_obtain_cb(void *baton,
}
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb, STMT_INSERT_WC_LOCK));
- SVN_ERR(svn_sqlite__bindf(stmt, "isi", wcroot->wc_id, local_relpath,
- (apr_int64_t) bt->levels_to_lock));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id, local_relpath,
+ levels_to_lock));
err = svn_sqlite__insert(NULL, stmt);
if (err)
return svn_error_createf(SVN_ERR_WC_LOCKED, err,
@@ -10836,7 +14197,7 @@ wclock_obtain_cb(void *baton,
/* And finally store that we obtained the lock */
lock.local_relpath = apr_pstrdup(wcroot->owned_locks->pool, local_relpath);
- lock.levels = bt->levels_to_lock;
+ lock.levels = levels_to_lock;
APR_ARRAY_PUSH(wcroot->owned_locks, svn_wc__db_wclock_t) = lock;
return SVN_NO_ERROR;
@@ -10852,7 +14213,6 @@ svn_wc__db_wclock_obtain(svn_wc__db_t *db,
{
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
- struct wclock_obtain_baton_t baton;
SVN_ERR_ASSERT(levels_to_lock >= -1);
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
@@ -10865,14 +14225,14 @@ svn_wc__db_wclock_obtain(svn_wc__db_t *db,
if (!steal_lock)
{
int i;
- int depth = (int)relpath_depth(local_relpath);
+ int depth = relpath_depth(local_relpath);
for (i = 0; i < wcroot->owned_locks->nelts; i++)
{
svn_wc__db_wclock_t* lock = &APR_ARRAY_IDX(wcroot->owned_locks,
i, svn_wc__db_wclock_t);
- if (svn_relpath__is_ancestor(lock->local_relpath, local_relpath)
+ if (svn_relpath_skip_ancestor(lock->local_relpath, local_relpath)
&& (lock->levels == -1
|| (lock->levels + relpath_depth(lock->local_relpath))
>= depth))
@@ -10887,26 +14247,25 @@ svn_wc__db_wclock_obtain(svn_wc__db_t *db,
}
}
- baton.steal_lock = steal_lock;
- baton.levels_to_lock = levels_to_lock;
-
- return svn_error_trace(svn_wc__db_with_txn(wcroot, local_relpath,
- wclock_obtain_cb, &baton,
- scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ wclock_obtain_cb(wcroot, local_relpath, levels_to_lock, steal_lock,
+ scratch_pool),
+ wcroot);
+ return SVN_NO_ERROR;
}
-/* Implements svn_wc__db_txn_callback_t. */
+/* The body of svn_wc__db_wclock_find_root() and svn_wc__db_wclocked(). */
static svn_error_t *
-is_wclocked(void *baton,
+find_wclock(const char **lock_relpath,
svn_wc__db_wcroot_t *wcroot,
const char *dir_relpath,
+ apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- svn_boolean_t *locked = baton;
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
- apr_int64_t dir_depth = relpath_depth(dir_relpath);
+ int dir_depth = relpath_depth(dir_relpath);
const char *first_relpath;
/* Check for locks on all directories that might be ancestors.
@@ -10937,27 +14296,71 @@ is_wclocked(void *baton,
{
const char *relpath = svn_sqlite__column_text(stmt, 0, NULL);
- if (svn_relpath__is_ancestor(relpath, dir_relpath))
+ if (svn_relpath_skip_ancestor(relpath, dir_relpath))
{
- /* Any row here means there can be no locks closer to root
- that extend past here. */
- apr_int64_t locked_levels = svn_sqlite__column_int64(stmt, 1);
- apr_int64_t row_depth = relpath_depth(relpath);
+ int locked_levels = svn_sqlite__column_int(stmt, 1);
+ int row_depth = relpath_depth(relpath);
- *locked = (locked_levels == -1
- || locked_levels + row_depth >= dir_depth);
- SVN_ERR(svn_sqlite__reset(stmt));
- return SVN_NO_ERROR;
+ if (locked_levels == -1
+ || locked_levels + row_depth >= dir_depth)
+ {
+ *lock_relpath = apr_pstrdup(result_pool, relpath);
+ SVN_ERR(svn_sqlite__reset(stmt));
+ return SVN_NO_ERROR;
+ }
}
SVN_ERR(svn_sqlite__step(&have_row, stmt));
}
- *locked = FALSE;
+ *lock_relpath = NULL;
return svn_error_trace(svn_sqlite__reset(stmt));
}
+static svn_error_t *
+is_wclocked(svn_boolean_t *locked,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *dir_relpath,
+ apr_pool_t *scratch_pool)
+{
+ const char *lock_relpath;
+
+ SVN_ERR(find_wclock(&lock_relpath, wcroot, dir_relpath,
+ scratch_pool, scratch_pool));
+ *locked = (lock_relpath != NULL);
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t*
+svn_wc__db_wclock_find_root(const char **lock_abspath,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_wcroot_t *wcroot;
+ const char *local_relpath;
+ const char *lock_relpath;
+
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
+ local_abspath, scratch_pool, scratch_pool));
+ VERIFY_USABLE_WCROOT(wcroot);
+
+ SVN_WC__DB_WITH_TXN(
+ find_wclock(&lock_relpath, wcroot, local_relpath,
+ scratch_pool, scratch_pool),
+ wcroot);
+
+ if (!lock_relpath)
+ *lock_abspath = NULL;
+ else
+ SVN_ERR(svn_wc__db_from_relpath(lock_abspath, db, wcroot->abspath,
+ lock_relpath, result_pool, scratch_pool));
+ return SVN_NO_ERROR;
+}
+
svn_error_t *
svn_wc__db_wclocked(svn_boolean_t *locked,
@@ -10972,8 +14375,9 @@ svn_wc__db_wclocked(svn_boolean_t *locked,
local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, is_wclocked, locked,
- scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ is_wclocked(locked, wcroot, local_relpath, scratch_pool),
+ wcroot);
return SVN_NO_ERROR;
}
@@ -11049,7 +14453,7 @@ wclock_owns_lock(svn_boolean_t *own_lock,
*own_lock = FALSE;
owned_locks = wcroot->owned_locks;
- lock_level = (int)relpath_depth(local_relpath);
+ lock_level = relpath_depth(local_relpath);
if (exact)
{
@@ -11072,7 +14476,7 @@ wclock_owns_lock(svn_boolean_t *own_lock,
svn_wc__db_wclock_t *lock = &APR_ARRAY_IDX(owned_locks, i,
svn_wc__db_wclock_t);
- if (svn_relpath__is_ancestor(lock->local_relpath, local_relpath)
+ if (svn_relpath_skip_ancestor(lock->local_relpath, local_relpath)
&& (lock->levels == -1
|| ((relpath_depth(lock->local_relpath) + lock->levels)
>= lock_level)))
@@ -11114,19 +14518,21 @@ svn_wc__db_wclock_owns_lock(svn_boolean_t *own_lock,
return SVN_NO_ERROR;
}
-/* Lock helper for svn_wc__db_temp_op_end_directory_update */
+/* The body of svn_wc__db_temp_op_end_directory_update().
+ */
static svn_error_t *
-end_directory_update(void *baton,
- svn_wc__db_wcroot_t *wcroot,
+end_directory_update(svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
apr_pool_t *scratch_pool)
{
svn_sqlite__stmt_t *stmt;
svn_wc__db_status_t base_status;
- SVN_ERR(base_get_info(&base_status, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- wcroot, local_relpath, scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_base_get_info_internal(&base_status, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool));
if (base_status == svn_wc__db_status_normal)
return SVN_NO_ERROR;
@@ -11156,8 +14562,9 @@ svn_wc__db_temp_op_end_directory_update(svn_wc__db_t *db,
local_dir_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, end_directory_update,
- NULL, scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ end_directory_update(wcroot, local_relpath, scratch_pool),
+ wcroot);
SVN_ERR(flush_entries(wcroot, local_dir_abspath, svn_depth_empty,
scratch_pool));
@@ -11166,20 +14573,15 @@ svn_wc__db_temp_op_end_directory_update(svn_wc__db_t *db,
}
-struct start_directory_update_baton_t
-{
- svn_revnum_t new_rev;
- const char *new_repos_relpath;
-};
-
-
+/* The body of svn_wc__db_temp_op_start_directory_update().
+ */
static svn_error_t *
-start_directory_update_txn(void *baton,
- svn_wc__db_wcroot_t *wcroot,
+start_directory_update_txn(svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
+ const char *new_repos_relpath,
+ svn_revnum_t new_rev,
apr_pool_t *scratch_pool)
{
- struct start_directory_update_baton_t *du = baton;
svn_sqlite__stmt_t *stmt;
/* Note: In the majority of calls, the repos_relpath is unchanged. */
@@ -11191,8 +14593,8 @@ start_directory_update_txn(void *baton,
wcroot->wc_id,
local_relpath,
presence_map, svn_wc__db_status_incomplete,
- du->new_rev,
- du->new_repos_relpath));
+ new_rev,
+ new_repos_relpath));
SVN_ERR(svn_sqlite__step_done(stmt));
return SVN_NO_ERROR;
@@ -11208,7 +14610,6 @@ svn_wc__db_temp_op_start_directory_update(svn_wc__db_t *db,
{
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
- struct start_directory_update_baton_t du;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(new_rev));
@@ -11218,11 +14619,10 @@ svn_wc__db_temp_op_start_directory_update(svn_wc__db_t *db,
local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- du.new_rev = new_rev;
- du.new_repos_relpath = new_repos_relpath;
-
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath,
- start_directory_update_txn, &du, scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ start_directory_update_txn(wcroot, local_relpath,
+ new_repos_relpath, new_rev, scratch_pool),
+ wcroot);
SVN_ERR(flush_entries(wcroot, local_abspath, svn_depth_empty, scratch_pool));
@@ -11230,14 +14630,7 @@ svn_wc__db_temp_op_start_directory_update(svn_wc__db_t *db,
}
-/* Baton for make_copy_txn */
-struct make_copy_baton_t
-{
- apr_int64_t op_depth;
-};
-
-
-/* Transaction callback for svn_wc__db_temp_op_make_copy. This is
+/* The body of svn_wc__db_temp_op_make_copy(). This is
used by the update editor when deleting a base node tree would be a
tree-conflict because there are changes to subtrees. This function
inserts a copy of the base node tree below any existing working
@@ -11271,12 +14664,13 @@ struct make_copy_baton_t
A/X/Y incomplete incomplete
*/
static svn_error_t *
-make_copy_txn(void *baton,
- svn_wc__db_wcroot_t *wcroot,
+make_copy_txn(svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
+ int op_depth,
+ const svn_skel_t *conflicts,
+ const svn_skel_t *work_items,
apr_pool_t *scratch_pool)
{
- struct make_copy_baton_t *mcb = baton;
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
svn_boolean_t add_working_base_deleted = FALSE;
@@ -11287,16 +14681,16 @@ make_copy_txn(void *baton,
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_SELECT_LOWEST_WORKING_NODE));
- SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id, local_relpath, 0));
SVN_ERR(svn_sqlite__step(&have_row, stmt));
if (have_row)
{
svn_wc__db_status_t working_status;
- apr_int64_t working_op_depth;
+ int working_op_depth;
working_status = svn_sqlite__column_token(stmt, 1, presence_map);
- working_op_depth = svn_sqlite__column_int64(stmt, 0);
+ working_op_depth = svn_sqlite__column_int(stmt, 0);
SVN_ERR(svn_sqlite__reset(stmt));
SVN_ERR_ASSERT(working_status == svn_wc__db_status_normal
@@ -11306,7 +14700,7 @@ make_copy_txn(void *baton,
/* Only change nodes in the layers where we are creating the copy.
Deletes in higher layers will just apply to the copy */
- if (working_op_depth <= mcb->op_depth)
+ if (working_op_depth <= op_depth)
{
add_working_base_deleted = TRUE;
@@ -11329,16 +14723,16 @@ make_copy_txn(void *baton,
{
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_INSERT_DELETE_FROM_BASE));
- SVN_ERR(svn_sqlite__bindf(stmt, "isi", wcroot->wc_id, local_relpath,
- mcb->op_depth));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id, local_relpath,
+ op_depth));
SVN_ERR(svn_sqlite__step_done(stmt));
}
else
{
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_INSERT_WORKING_NODE_FROM_BASE_COPY));
- SVN_ERR(svn_sqlite__bindf(stmt, "isi", wcroot->wc_id, local_relpath,
- mcb->op_depth));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id, local_relpath,
+ op_depth));
SVN_ERR(svn_sqlite__step_done(stmt));
}
@@ -11349,22 +14743,26 @@ make_copy_txn(void *baton,
for (i = 0; i < children->nelts; i++)
{
const char *name = APR_ARRAY_IDX(children, i, const char *);
- struct make_copy_baton_t cbt;
const char *copy_relpath;
svn_pool_clear(iterpool);
copy_relpath = svn_relpath_join(local_relpath, name, iterpool);
- cbt.op_depth = mcb->op_depth;
-
- SVN_ERR(make_copy_txn(&cbt, wcroot, copy_relpath, iterpool));
+ SVN_ERR(make_copy_txn(wcroot, copy_relpath, op_depth, NULL, NULL,
+ iterpool));
}
SVN_ERR(flush_entries(wcroot, svn_dirent_join(wcroot->abspath, local_relpath,
iterpool),
svn_depth_empty, iterpool));
+ if (conflicts)
+ SVN_ERR(svn_wc__db_mark_conflict_internal(wcroot, local_relpath,
+ conflicts, iterpool));
+
+ SVN_ERR(add_work_items(wcroot->sdb, work_items, iterpool));
+
svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
@@ -11372,13 +14770,14 @@ make_copy_txn(void *baton,
svn_error_t *
-svn_wc__db_temp_op_make_copy(svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *scratch_pool)
+svn_wc__db_op_make_copy(svn_wc__db_t *db,
+ const char *local_abspath,
+ const svn_skel_t *conflicts,
+ const svn_skel_t *work_items,
+ apr_pool_t *scratch_pool)
{
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
- struct make_copy_baton_t mcb;
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
@@ -11406,218 +14805,16 @@ svn_wc__db_temp_op_make_copy(svn_wc__db_t *db,
the update editor is going to have to bail out. */
SVN_ERR(catch_copy_of_server_excluded(wcroot, local_relpath, scratch_pool));
- mcb.op_depth = relpath_depth(local_relpath);
-
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, make_copy_txn, &mcb,
- scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ make_copy_txn(wcroot, local_relpath,
+ relpath_depth(local_relpath), conflicts, work_items,
+ scratch_pool),
+ wcroot);
return SVN_NO_ERROR;
}
svn_error_t *
-svn_wc__db_temp_op_set_text_conflict_marker_files(svn_wc__db_t *db,
- const char *local_abspath,
- const char *old_abspath,
- const char *new_abspath,
- const char *wrk_abspath,
- apr_pool_t *scratch_pool)
-{
- svn_wc__db_wcroot_t *wcroot;
- const char *local_relpath, *old_relpath, *new_relpath, *wrk_relpath;
- svn_sqlite__stmt_t *stmt;
- svn_boolean_t got_row;
-
- SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
- SVN_ERR_ASSERT(svn_dirent_is_absolute(old_abspath));
- SVN_ERR_ASSERT(svn_dirent_is_absolute(new_abspath));
- /* Binary files usually send NULL */
- SVN_ERR_ASSERT(!wrk_abspath || svn_dirent_is_absolute(wrk_abspath));
-
- SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
- local_abspath,
- scratch_pool, scratch_pool));
- VERIFY_USABLE_WCROOT(wcroot);
-
- /* This should be handled in a transaction, but we can assume a db lock
- and this code won't survive until 1.7 */
-
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_SELECT_ACTUAL_NODE));
- SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
-
- SVN_ERR(svn_sqlite__step(&got_row, stmt));
- SVN_ERR(svn_sqlite__reset(stmt));
-
- if (got_row)
- {
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_UPDATE_ACTUAL_TEXT_CONFLICTS));
- }
- else if (old_abspath == NULL
- && new_abspath == NULL
- && wrk_abspath == NULL)
- {
- return SVN_NO_ERROR; /* We don't have to add anything */
- }
- else
- {
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_INSERT_ACTUAL_TEXT_CONFLICTS));
-
- SVN_ERR(svn_sqlite__bind_text(stmt, 6,
- svn_relpath_dirname(local_relpath,
- scratch_pool)));
- }
-
- old_relpath = svn_dirent_skip_ancestor(wcroot->abspath, old_abspath);
- if (old_relpath == old_abspath)
- return svn_error_createf(SVN_ERR_BAD_FILENAME, svn_sqlite__reset(stmt),
- _("Invalid conflict file '%s' for '%s'"),
- svn_dirent_local_style(old_abspath, scratch_pool),
- svn_dirent_local_style(local_abspath,
- scratch_pool));
- new_relpath = svn_dirent_skip_ancestor(wcroot->abspath, new_abspath);
- if (new_relpath == new_abspath)
- return svn_error_createf(SVN_ERR_BAD_FILENAME, svn_sqlite__reset(stmt),
- _("Invalid conflict file '%s' for '%s'"),
- svn_dirent_local_style(new_abspath, scratch_pool),
- svn_dirent_local_style(local_abspath,
- scratch_pool));
-
- if (wrk_abspath)
- {
- wrk_relpath = svn_dirent_skip_ancestor(wcroot->abspath, wrk_abspath);
- if (wrk_relpath == wrk_abspath)
- return svn_error_createf(SVN_ERR_BAD_FILENAME, svn_sqlite__reset(stmt),
- _("Invalid conflict file '%s' for '%s'"),
- svn_dirent_local_style(wrk_abspath,
- scratch_pool),
- svn_dirent_local_style(local_abspath,
- scratch_pool));
- }
- else
- wrk_relpath = NULL;
-
- SVN_ERR(svn_sqlite__bindf(stmt, "issss", wcroot->wc_id,
- local_relpath,
- old_relpath,
- new_relpath,
- wrk_relpath));
-
- return svn_error_trace(svn_sqlite__step_done(stmt));
-}
-
-
-/* Set the conflict marker information on LOCAL_ABSPATH to the specified
- values */
-svn_error_t *
-svn_wc__db_temp_op_set_property_conflict_marker_file(svn_wc__db_t *db,
- const char *local_abspath,
- const char *prej_abspath,
- apr_pool_t *scratch_pool)
-{
- svn_wc__db_wcroot_t *wcroot;
- const char *local_relpath, *prej_relpath;
- svn_sqlite__stmt_t *stmt;
- svn_boolean_t got_row;
-
- SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
-
- SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
- local_abspath,
- scratch_pool, scratch_pool));
- VERIFY_USABLE_WCROOT(wcroot);
-
- /* This should be handled in a transaction, but we can assume a db locl\
- and this code won't survive until 1.7 */
-
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_SELECT_ACTUAL_NODE));
- SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
-
- SVN_ERR(svn_sqlite__step(&got_row, stmt));
- SVN_ERR(svn_sqlite__reset(stmt));
-
- if (got_row)
- {
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_UPDATE_ACTUAL_PROPERTY_CONFLICTS));
- }
- else if (!prej_abspath)
- return SVN_NO_ERROR;
- else
- {
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_INSERT_ACTUAL_PROPERTY_CONFLICTS));
-
- if (*local_relpath != '\0')
- SVN_ERR(svn_sqlite__bind_text(stmt, 4,
- svn_relpath_dirname(local_relpath,
- scratch_pool)));
- }
-
- prej_relpath = svn_dirent_skip_ancestor(wcroot->abspath, prej_abspath);
- if (prej_relpath == prej_abspath)
- return svn_error_createf(SVN_ERR_BAD_FILENAME, svn_sqlite__reset(stmt),
- _("Invalid property reject file '%s' for '%s'"),
- svn_dirent_local_style(prej_abspath, scratch_pool),
- svn_dirent_local_style(local_abspath,
- scratch_pool));
-
- SVN_ERR(svn_sqlite__bindf(stmt, "iss", wcroot->wc_id,
- local_relpath,
- prej_relpath));
-
- return svn_error_trace(svn_sqlite__step_done(stmt));
-}
-
-svn_error_t *
-svn_wc__db_temp_op_set_new_dir_to_incomplete(svn_wc__db_t *db,
- const char *local_abspath,
- const char *repos_relpath,
- const char *repos_root_url,
- const char *repos_uuid,
- svn_revnum_t revision,
- svn_depth_t depth,
- apr_pool_t *scratch_pool)
-{
- svn_wc__db_wcroot_t *wcroot;
- const char *local_relpath;
- struct insert_base_baton_t ibb;
-
- SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
- SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(revision));
- SVN_ERR_ASSERT(repos_relpath && repos_root_url && repos_uuid);
-
- SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath,
- db, local_abspath,
- scratch_pool, scratch_pool));
-
- VERIFY_USABLE_WCROOT(wcroot);
-
- blank_ibb(&ibb);
-
- /* Calculate repos_id in insert_base_node() to avoid extra transaction */
- ibb.repos_root_url = repos_root_url;
- ibb.repos_uuid = repos_uuid;
-
- ibb.status = svn_wc__db_status_incomplete;
- ibb.kind = svn_wc__db_kind_dir;
- ibb.repos_relpath = repos_relpath;
- ibb.revision = revision;
- ibb.depth = depth;
-
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath,
- insert_base_node,
- &ibb, scratch_pool));
-
- SVN_ERR(flush_entries(wcroot, local_abspath, svn_depth_empty, scratch_pool));
-
- return SVN_NO_ERROR;
-}
-
-
-svn_error_t *
svn_wc__db_info_below_working(svn_boolean_t *have_base,
svn_boolean_t *have_work,
svn_wc__db_status_t *status,
@@ -11660,10 +14857,10 @@ svn_wc__db_get_not_present_descendants(const apr_array_header_t **descendants,
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_SELECT_NOT_PRESENT_DESCENDANTS));
- SVN_ERR(svn_sqlite__bindf(stmt, "isi",
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd",
wcroot->wc_id,
local_relpath,
- (apr_int64_t)relpath_depth(local_relpath)));
+ relpath_depth(local_relpath)));
SVN_ERR(svn_sqlite__step(&have_row, stmt));
@@ -11677,8 +14874,8 @@ svn_wc__db_get_not_present_descendants(const apr_array_header_t **descendants,
const char *found_relpath = svn_sqlite__column_text(stmt, 0, NULL);
APR_ARRAY_PUSH(paths, const char *)
- = svn_relpath__is_child(local_relpath, found_relpath,
- result_pool);
+ = apr_pstrdup(result_pool, svn_relpath_skip_ancestor(
+ local_relpath, found_relpath));
SVN_ERR(svn_sqlite__step(&have_row, stmt));
}
@@ -11757,8 +14954,8 @@ svn_wc__db_min_max_revisions(svn_revnum_t *min_revision,
}
-/* Like svn_wc__db_is_sparse_checkout,
- * but accepts a WCROOT/LOCAL_RELPATH pair. */
+/* Set *IS_SPARSE_CHECKOUT TRUE if LOCAL_RELPATH or any of the nodes
+ * within LOCAL_RELPATH is sparse, FALSE otherwise. */
static svn_error_t *
is_sparse_checkout_internal(svn_boolean_t *is_sparse_checkout,
svn_wc__db_wcroot_t *wcroot,
@@ -11782,28 +14979,6 @@ is_sparse_checkout_internal(svn_boolean_t *is_sparse_checkout,
}
-svn_error_t *
-svn_wc__db_is_sparse_checkout(svn_boolean_t *is_sparse_checkout,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *scratch_pool)
-{
- svn_wc__db_wcroot_t *wcroot;
- const char *local_relpath;
-
- SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
-
- SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath,
- db, local_abspath,
- scratch_pool, scratch_pool));
- VERIFY_USABLE_WCROOT(wcroot);
-
- return svn_error_trace(is_sparse_checkout_internal(is_sparse_checkout,
- wcroot, local_relpath,
- scratch_pool));
-}
-
-
/* Like svn_wc__db_has_switched_subtrees(),
* but accepts a WCROOT/LOCAL_RELPATH pair. */
static svn_error_t *
@@ -11824,10 +14999,12 @@ has_switched_subtrees(svn_boolean_t *is_switched,
*is_switched = FALSE;
- SVN_ERR(base_get_info(NULL, NULL, NULL, &repos_relpath, &repos_id, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- wcroot, local_relpath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_base_get_info_internal(NULL, NULL, NULL,
+ &repos_relpath, &repos_id,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool));
/* First do the cheap check where we only need info on the origin itself */
if (trail_url != NULL)
@@ -11840,8 +15017,8 @@ has_switched_subtrees(svn_boolean_t *is_switched,
does not match the given trailing URL then the whole working
copy is switched. */
- SVN_ERR(fetch_repos_info(&repos_root_url, NULL, wcroot->sdb, repos_id,
- scratch_pool));
+ SVN_ERR(svn_wc__db_fetch_repos_info(&repos_root_url, NULL, wcroot->sdb,
+ repos_id, scratch_pool));
url = svn_path_url_add_component2(repos_root_url, repos_relpath,
scratch_pool);
@@ -11854,36 +15031,9 @@ has_switched_subtrees(svn_boolean_t *is_switched,
}
}
- /* Select the right query based on whether the node is the wcroot, repos root
- or neither. */
- if (*local_relpath == '\0')
- {
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- (*repos_relpath == '\0')
- ? STMT_HAS_SWITCHED_WCROOT_REPOS_ROOT
- : STMT_HAS_SWITCHED_WCROOT));
- }
- else
- {
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- (*repos_relpath == '\0')
- ? STMT_HAS_SWITCHED_REPOS_ROOT
- : STMT_HAS_SWITCHED));
- }
-
- SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
-
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb, STMT_HAS_SWITCHED));
+ SVN_ERR(svn_sqlite__bindf(stmt, "iss", wcroot->wc_id, local_relpath, repos_relpath));
SVN_ERR(svn_sqlite__step(&have_row, stmt));
- /* ### Please keep this code for a little while or until the code has enough
- test coverage. These columns are only available in the 4 queries
- after their selection is uncommented. */
-/*if (have_row)
- SVN_DBG(("Expected %s for %s, but got %s. Origin=%s with %s\n",
- svn_sqlite__column_text(stmt, 0, scratch_pool),
- svn_sqlite__column_text(stmt, 1, scratch_pool),
- svn_sqlite__column_text(stmt, 2, scratch_pool),
- svn_sqlite__column_text(stmt, 3, scratch_pool),
- svn_sqlite__column_text(stmt, 4, scratch_pool)));*/
if (have_row)
*is_switched = TRUE;
SVN_ERR(svn_sqlite__reset(stmt));
@@ -11915,11 +15065,11 @@ svn_wc__db_has_switched_subtrees(svn_boolean_t *is_switched,
}
svn_error_t *
-svn_wc__db_get_server_excluded_subtrees(apr_hash_t **server_excluded_subtrees,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+svn_wc__db_get_excluded_subtrees(apr_hash_t **excluded_subtrees,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
@@ -11931,26 +15081,26 @@ svn_wc__db_get_server_excluded_subtrees(apr_hash_t **server_excluded_subtrees,
db, local_abspath,
scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
+
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_SELECT_ALL_SERVER_EXCLUDED_NODES));
+ STMT_SELECT_ALL_EXCLUDED_DESCENDANTS));
SVN_ERR(svn_sqlite__bindf(stmt, "is",
wcroot->wc_id,
local_relpath));
SVN_ERR(svn_sqlite__step(&have_row, stmt));
if (have_row)
- *server_excluded_subtrees = apr_hash_make(result_pool);
+ *excluded_subtrees = apr_hash_make(result_pool);
else
- *server_excluded_subtrees = NULL;
+ *excluded_subtrees = NULL;
while (have_row)
{
const char *abs_path =
svn_dirent_join(wcroot->abspath,
- svn_sqlite__column_text(stmt, 0, scratch_pool),
+ svn_sqlite__column_text(stmt, 0, NULL),
result_pool);
- apr_hash_set(*server_excluded_subtrees, abs_path, APR_HASH_KEY_STRING,
- abs_path);
+ svn_hash_sets(*excluded_subtrees, abs_path, abs_path);
SVN_ERR(svn_sqlite__step(&have_row, stmt));
}
@@ -12013,7 +15163,7 @@ has_local_mods(svn_boolean_t *is_modified,
{
const char *node_abspath;
svn_filesize_t recorded_size;
- apr_time_t recorded_mod_time;
+ apr_time_t recorded_time;
svn_boolean_t skip_check = FALSE;
svn_error_t *err;
@@ -12034,15 +15184,15 @@ has_local_mods(svn_boolean_t *is_modified,
iterpool);
recorded_size = get_recorded_size(stmt, 1);
- recorded_mod_time = svn_sqlite__column_int64(stmt, 2);
+ recorded_time = svn_sqlite__column_int64(stmt, 2);
if (recorded_size != SVN_INVALID_FILESIZE
- && recorded_mod_time != 0)
+ && recorded_time != 0)
{
const svn_io_dirent2_t *dirent;
- err = svn_io_stat_dirent(&dirent, node_abspath, TRUE,
- iterpool, iterpool);
+ err = svn_io_stat_dirent2(&dirent, node_abspath, FALSE, TRUE,
+ iterpool, iterpool);
if (err)
return svn_error_trace(svn_error_compose_create(
err,
@@ -12054,7 +15204,7 @@ has_local_mods(svn_boolean_t *is_modified,
break;
}
else if (dirent->filesize == recorded_size
- && dirent->mtime == recorded_mod_time)
+ && dirent->mtime == recorded_time)
{
/* The file is not modified */
skip_check = TRUE;
@@ -12112,31 +15262,23 @@ svn_wc__db_has_local_mods(svn_boolean_t *is_modified,
}
-struct revision_status_baton_t
-{
- svn_revnum_t *min_revision;
- svn_revnum_t *max_revision;
- svn_boolean_t *is_sparse_checkout;
- svn_boolean_t *is_modified;
- svn_boolean_t *is_switched;
-
- const char *trail_url;
- svn_boolean_t committed;
- svn_cancel_func_t cancel_func;
- void *cancel_baton;
-
- /* We really shouldn't have to have one of these... */
- svn_wc__db_t *db;
-};
-
-
+/* The body of svn_wc__db_revision_status().
+ */
static svn_error_t *
-revision_status_txn(void *baton,
+revision_status_txn(svn_revnum_t *min_revision,
+ svn_revnum_t *max_revision,
+ svn_boolean_t *is_sparse_checkout,
+ svn_boolean_t *is_modified,
+ svn_boolean_t *is_switched,
svn_wc__db_wcroot_t *wcroot,
const char *local_relpath,
+ svn_wc__db_t *db,
+ const char *trail_url,
+ svn_boolean_t committed,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
apr_pool_t *scratch_pool)
{
- struct revision_status_baton_t *rsb = baton;
svn_error_t *err;
svn_boolean_t exists;
@@ -12151,23 +15293,23 @@ revision_status_txn(void *baton,
}
/* Determine mixed-revisionness. */
- SVN_ERR(get_min_max_revisions(rsb->min_revision, rsb->max_revision, wcroot,
- local_relpath, rsb->committed, scratch_pool));
+ SVN_ERR(get_min_max_revisions(min_revision, max_revision, wcroot,
+ local_relpath, committed, scratch_pool));
- if (rsb->cancel_func)
- SVN_ERR(rsb->cancel_func(rsb->cancel_baton));
+ if (cancel_func)
+ SVN_ERR(cancel_func(cancel_baton));
/* Determine sparseness. */
- SVN_ERR(is_sparse_checkout_internal(rsb->is_sparse_checkout, wcroot,
+ SVN_ERR(is_sparse_checkout_internal(is_sparse_checkout, wcroot,
local_relpath, scratch_pool));
- if (rsb->cancel_func)
- SVN_ERR(rsb->cancel_func(rsb->cancel_baton));
+ if (cancel_func)
+ SVN_ERR(cancel_func(cancel_baton));
/* Check for switched nodes. */
{
- err = has_switched_subtrees(rsb->is_switched, wcroot, local_relpath,
- rsb->trail_url, scratch_pool);
+ err = has_switched_subtrees(is_switched, wcroot, local_relpath,
+ trail_url, scratch_pool);
if (err)
{
@@ -12175,16 +15317,16 @@ revision_status_txn(void *baton,
return svn_error_trace(err);
svn_error_clear(err); /* No Base node, but no fatal error */
- *rsb->is_switched = FALSE;
+ *is_switched = FALSE;
}
}
- if (rsb->cancel_func)
- SVN_ERR(rsb->cancel_func(rsb->cancel_baton));
+ if (cancel_func)
+ SVN_ERR(cancel_func(cancel_baton));
/* Check for local mods. */
- SVN_ERR(has_local_mods(rsb->is_modified, wcroot, local_relpath, rsb->db,
- rsb->cancel_func, rsb->cancel_baton, scratch_pool));
+ SVN_ERR(has_local_mods(is_modified, wcroot, local_relpath, db,
+ cancel_func, cancel_baton, scratch_pool));
return SVN_NO_ERROR;
}
@@ -12206,17 +15348,6 @@ svn_wc__db_revision_status(svn_revnum_t *min_revision,
{
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
- struct revision_status_baton_t rsb;
- rsb.min_revision = min_revision;
- rsb.max_revision = max_revision;
- rsb.is_sparse_checkout = is_sparse_checkout;
- rsb.is_modified = is_modified;
- rsb.is_switched = is_switched;
- rsb.trail_url = trail_url;
- rsb.committed = committed;
- rsb.cancel_func = cancel_func;
- rsb.cancel_baton = cancel_baton;
- rsb.db = db;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
@@ -12225,9 +15356,14 @@ svn_wc__db_revision_status(svn_revnum_t *min_revision,
scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- return svn_error_trace(svn_wc__db_with_txn(wcroot, local_relpath,
- revision_status_txn, &rsb,
- scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ revision_status_txn(min_revision, max_revision,
+ is_sparse_checkout, is_modified, is_switched,
+ wcroot, local_relpath, db,
+ trail_url, committed, cancel_func, cancel_baton,
+ scratch_pool),
+ wcroot);
+ return SVN_NO_ERROR;
}
@@ -12269,9 +15405,10 @@ svn_wc__db_base_get_lock_tokens_recursive(apr_hash_t **lock_tokens,
if (child_repos_id != last_repos_id)
{
- svn_error_t *err = fetch_repos_info(&last_repos_root_url, NULL,
- wcroot->sdb, child_repos_id,
- scratch_pool);
+ svn_error_t *err = svn_wc__db_fetch_repos_info(&last_repos_root_url,
+ NULL, wcroot->sdb,
+ child_repos_id,
+ scratch_pool);
if (err)
{
@@ -12284,12 +15421,10 @@ svn_wc__db_base_get_lock_tokens_recursive(apr_hash_t **lock_tokens,
}
SVN_ERR_ASSERT(last_repos_root_url != NULL);
- apr_hash_set(*lock_tokens,
- svn_path_url_add_component2(last_repos_root_url,
- child_relpath,
- result_pool),
- APR_HASH_KEY_STRING,
- lock_token);
+ svn_hash_sets(*lock_tokens,
+ svn_path_url_add_component2(last_repos_root_url,
+ child_relpath, result_pool),
+ lock_token);
SVN_ERR(svn_sqlite__step(&have_row, stmt));
}
@@ -12334,7 +15469,7 @@ verify_wcroot(svn_wc__db_wcroot_t *wcroot,
{
svn_boolean_t have_row;
const char *local_relpath, *parent_relpath;
- apr_int64_t op_depth;
+ int op_depth;
svn_pool_clear(iterpool);
@@ -12393,3 +15528,83 @@ svn_wc__db_verify(svn_wc__db_t *db,
SVN_ERR(verify_wcroot(wcroot, scratch_pool));
return SVN_NO_ERROR;
}
+
+svn_error_t *
+svn_wc__db_bump_format(int *result_format,
+ svn_boolean_t *bumped_format,
+ svn_wc__db_t *db,
+ const char *wcroot_abspath,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__db_t *sdb;
+ svn_error_t *err;
+ int format;
+
+ if (bumped_format)
+ *bumped_format = FALSE;
+
+ /* Do not scan upwards for a working copy root here to prevent accidental
+ * upgrades of any working copies the WCROOT might be nested in.
+ * Just try to open a DB at the specified path instead. */
+ err = svn_wc__db_util_open_db(&sdb, wcroot_abspath, SDB_FILE,
+ svn_sqlite__mode_readwrite,
+ TRUE, /* exclusive */
+ NULL, /* my statements */
+ scratch_pool, scratch_pool);
+ if (err)
+ {
+ svn_error_t *err2;
+ apr_hash_t *entries;
+
+ /* Could not open an sdb. Check for an entries file instead. */
+ err2 = svn_wc__read_entries_old(&entries, wcroot_abspath,
+ scratch_pool, scratch_pool);
+ if (err2 || apr_hash_count(entries) == 0)
+ return svn_error_createf(SVN_ERR_WC_INVALID_OP_ON_CWD,
+ svn_error_compose_create(err, err2),
+ _("Can't upgrade '%s' as it is not a working copy root"),
+ svn_dirent_local_style(wcroot_abspath, scratch_pool));
+
+ /* An entries file was found. This is a pre-wc-ng working copy
+ * so suggest an upgrade. */
+ return svn_error_createf(SVN_ERR_WC_UPGRADE_REQUIRED, err,
+ _("Working copy '%s' is too old and must be upgraded to "
+ "at least format %d, as created by Subversion %s"),
+ svn_dirent_local_style(wcroot_abspath, scratch_pool),
+ SVN_WC__WC_NG_VERSION,
+ svn_wc__version_string_from_format(SVN_WC__WC_NG_VERSION));
+ }
+
+ SVN_ERR(svn_sqlite__read_schema_version(&format, sdb, scratch_pool));
+ err = svn_wc__upgrade_sdb(result_format, wcroot_abspath,
+ sdb, format, scratch_pool);
+
+ if (err == SVN_NO_ERROR && bumped_format)
+ *bumped_format = (*result_format > format);
+
+ /* Make sure we return a different error than expected for upgrades from
+ entries */
+ if (err && err->apr_err == SVN_ERR_WC_UPGRADE_REQUIRED)
+ err = svn_error_create(SVN_ERR_WC_UNSUPPORTED_FORMAT, err,
+ _("Working copy upgrade failed"));
+
+ err = svn_error_compose_create(err, svn_sqlite__close(sdb));
+
+ return svn_error_trace(err);
+}
+
+svn_error_t *
+svn_wc__db_vacuum(svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_wcroot_t *wcroot;
+ const char *local_relpath;
+
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath,
+ db, local_abspath,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_sqlite__exec_statements(wcroot->sdb, STMT_VACUUM));
+
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/libsvn_wc/wc_db.h b/subversion/libsvn_wc/wc_db.h
index 83dd99d..0fcce5e 100644
--- a/subversion/libsvn_wc/wc_db.h
+++ b/subversion/libsvn_wc/wc_db.h
@@ -74,7 +74,7 @@ extern "C" {
The pool that DB is allocated within (the "state" pool) is only used
for a few, limited allocations to track each of the working copy roots
that the DB is asked to operate upon. The memory usage on this pool
- os O(# wcroots), which should normally be one or a few. Custom clients
+ is O(# wcroots), which should normally be one or a few. Custom clients
which hold open structures over a significant period of time should
pay particular attention to the number of roots touched, and the
resulting impact on memory consumption (which should still be minimal).
@@ -128,44 +128,14 @@ extern "C" {
typedef struct svn_wc__db_t svn_wc__db_t;
-/* Enum indicating what kind of versioned object we're talking about.
-
- ### KFF: That is, my understanding is that this is *not* an enum
- ### indicating what kind of storage the DB is using, even though
- ### one might think that from its name. Rather, the "svn_wc__db_"
- ### is a generic prefix, and this "_kind_t" type indicates the kind
- ### of something that's being stored in the DB.
-
- ### KFF: Does this overlap too much with what svn_node_kind_t does?
-
- ### gjs: possibly. but that doesn't have a symlink kind. and that
- ### cannot simply be added. it would surprise too much code.
- ### (we could probably create svn_node_kind2_t though)
-*/
-typedef enum svn_wc__db_kind_t {
- /* The node is a directory. */
- svn_wc__db_kind_dir,
-
- /* The node is a file. */
- svn_wc__db_kind_file,
-
- /* The node is a symbolic link. */
- svn_wc__db_kind_symlink,
-
- /* The type of the node is not known, due to its absence, exclusion,
- deletion, or incomplete status. */
- svn_wc__db_kind_unknown
-
-} svn_wc__db_kind_t;
-
-
/* Enumerated values describing the state of a node. */
typedef enum svn_wc__db_status_t {
/* The node is present and has no known modifications applied to it. */
svn_wc__db_status_normal,
/* The node has been added (potentially obscuring a delete or move of
- the BASE node; see HAVE_BASE param). The text will be marked as
+ the BASE node; see HAVE_BASE param [### What param? This is an enum
+ not a function.] ). The text will be marked as
modified, and if properties exist, they will be marked as modified.
In many cases svn_wc__db_status_added means any of added, moved-here
@@ -243,7 +213,7 @@ typedef struct svn_wc__db_lock_t {
/*
- @defgroup svn_wc__db_admin General administractive functions
+ @defgroup svn_wc__db_admin General administrative functions
@{
*/
@@ -259,11 +229,12 @@ typedef struct svn_wc__db_lock_t {
the administrative operation. It should live at least as long as the
RESULT_POOL parameter.
- When AUTO_UPGRADE is TRUE, then the working copy databases will be
- upgraded when possible (when an old database is found/detected during
- the operation of a wc_db API). If it is detected that a manual upgrade is
- required, then SVN_ERR_WC_UPGRADE_REQUIRED will be returned from that API.
- Passing FALSE will allow a bare minimum of APIs to function (most notably,
+ When OPEN_WITHOUT_UPGRADE is TRUE, then the working copy databases will
+ be opened even when an old database format is found/detected during
+ the operation of a wc_db API). If open_without_upgrade is FALSE and an
+ upgrade is required, then SVN_ERR_WC_UPGRADE_REQUIRED will be returned
+ from that API.
+ Passing TRUE will allow a bare minimum of APIs to function (most notably,
the temp_get_format() function will always return a value) since most of
these APIs expect a current-format database to be present.
@@ -286,8 +257,8 @@ typedef struct svn_wc__db_lock_t {
*/
svn_error_t *
svn_wc__db_open(svn_wc__db_t **db,
- const svn_config_t *config,
- svn_boolean_t auto_upgrade,
+ svn_config_t *config,
+ svn_boolean_t open_without_upgrade,
svn_boolean_t enforce_empty_wq,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
@@ -338,13 +309,16 @@ svn_wc__db_init(svn_wc__db_t *db,
be returned.
The LOCAL_RELPATH should ONLY be used for persisting paths to disk.
- Those patsh should not be an abspath, otherwise the working copy cannot
+ Those paths should not be abspaths, otherwise the working copy cannot
be moved. The working copy library should not make these paths visible
in its API (which should all be abspaths), and it should not be using
relpaths for other processing.
LOCAL_RELPATH will be allocated in RESULT_POOL. All other (temporary)
allocations will be made in SCRATCH_POOL.
+
+ This function is available when DB is opened with the OPEN_WITHOUT_UPGRADE
+ option.
*/
svn_error_t *
svn_wc__db_to_relpath(const char **local_relpath,
@@ -363,7 +337,10 @@ svn_wc__db_to_relpath(const char **local_relpath,
LOCAL_ABSPATH will be allocated in RESULT_POOL. All other (temporary)
allocations will be made in SCRATCH_POOL.
-*/
+
+ This function is available when DB is opened with the OPEN_WITHOUT_UPGRADE
+ option.
+ */
svn_error_t *
svn_wc__db_from_relpath(const char **local_abspath,
svn_wc__db_t *db,
@@ -373,6 +350,9 @@ svn_wc__db_from_relpath(const char **local_abspath,
apr_pool_t *scratch_pool);
/* Compute the working copy root WCROOT_ABSPATH for WRI_ABSPATH using DB.
+
+ This function is available when DB is opened with the OPEN_WITHOUT_UPGRADE
+ option.
*/
svn_error_t *
svn_wc__db_get_wcroot(const char **wcroot_abspath,
@@ -401,7 +381,7 @@ svn_wc__db_get_wcroot(const char **wcroot_abspath,
In the BASE tree, each node corresponds to a particular node-rev in the
repository. It can be a mixed-revision tree. Each node holds either a
copy of the node-rev as it exists in the repository (if presence =
- 'normal'), or a place-holder (if presence = 'absent' or 'excluded' or
+ 'normal'), or a place-holder (if presence = 'server-excluded' or 'excluded' or
'not-present').
@{
@@ -440,6 +420,10 @@ svn_wc__db_get_wcroot(const char **wcroot_abspath,
when the value of NEW_ACTUAL_PROPS matches NEW_PROPS, store NULL in
ACTUAL, to mark the properties unmodified.
+ If NEW_IPROPS is not NULL, then it is a depth-first ordered array of
+ svn_prop_inherited_item_t * structures that is set as the base node's
+ inherited_properties.
+
Any work items that are necessary as part of this node construction may
be passed in WORK_ITEMS.
@@ -463,9 +447,29 @@ svn_wc__db_base_add_directory(svn_wc__db_t *db,
const svn_skel_t *conflict,
svn_boolean_t update_actual_props,
apr_hash_t *new_actual_props,
+ apr_array_header_t *new_iprops,
const svn_skel_t *work_items,
apr_pool_t *scratch_pool);
+/* Add a new directory in BASE, whether WORKING nodes exist or not. Mark it
+ as incomplete and with revision REVISION. If REPOS_RELPATH is not NULL,
+ apply REPOS_RELPATH, REPOS_ROOT_URL and REPOS_UUID.
+ Perform all temporary allocations in SCRATCH_POOL.
+ */
+svn_error_t *
+svn_wc__db_base_add_incomplete_directory(svn_wc__db_t *db,
+ const char *local_abspath,
+ const char *repos_relpath,
+ const char *repos_root_url,
+ const char *repos_uuid,
+ svn_revnum_t revision,
+ svn_depth_t depth,
+ svn_boolean_t insert_base_deleted,
+ svn_boolean_t delete_working,
+ svn_skel_t *conflict,
+ svn_skel_t *work_items,
+ apr_pool_t *scratch_pool);
+
/* Add or replace a file in the BASE tree.
@@ -515,11 +519,13 @@ svn_wc__db_base_add_file(svn_wc__db_t *db,
const char *changed_author,
const svn_checksum_t *checksum,
apr_hash_t *dav_cache,
- const svn_skel_t *conflict,
+ svn_boolean_t delete_working,
svn_boolean_t update_actual_props,
apr_hash_t *new_actual_props,
+ apr_array_header_t *new_iprops,
svn_boolean_t keep_recorded_info,
svn_boolean_t insert_base_deleted,
+ const svn_skel_t *conflict,
const svn_skel_t *work_items,
apr_pool_t *scratch_pool);
@@ -596,9 +602,13 @@ svn_wc__db_base_add_symlink(svn_wc__db_t *db,
const char *changed_author,
const char *target,
apr_hash_t *dav_cache,
- const svn_skel_t *conflict,
+ svn_boolean_t delete_working,
svn_boolean_t update_actual_props,
apr_hash_t *new_actual_props,
+ apr_array_header_t *new_iprops,
+ svn_boolean_t keep_recorded_info,
+ svn_boolean_t insert_base_deleted,
+ const svn_skel_t *conflict,
const svn_skel_t *work_items,
apr_pool_t *scratch_pool);
@@ -630,7 +640,7 @@ svn_wc__db_base_add_excluded_node(svn_wc__db_t *db,
const char *repos_root_url,
const char *repos_uuid,
svn_revnum_t revision,
- svn_wc__db_kind_t kind,
+ svn_node_kind_t kind,
svn_wc__db_status_t status,
const svn_skel_t *conflict,
const svn_skel_t *work_items,
@@ -661,19 +671,21 @@ svn_wc__db_base_add_not_present_node(svn_wc__db_t *db,
const char *repos_root_url,
const char *repos_uuid,
svn_revnum_t revision,
- svn_wc__db_kind_t kind,
+ svn_node_kind_t kind,
const svn_skel_t *conflict,
const svn_skel_t *work_items,
apr_pool_t *scratch_pool);
-/* Remove a node from the BASE tree.
+/* Remove a node and all its descendants from the BASE tree. This handles
+ the deletion of a tree from the update editor and some file external
+ scenarios.
The node to remove is indicated by LOCAL_ABSPATH from the local
filesystem.
- Note that no changes are made to the local filesystem; LOCAL_ABSPATH
- is merely the key to figure out which BASE node to remove.
+ This operation *installs* workqueue operations to update the local
+ filesystem after the database operation.
To maintain a consistent database this function will also remove
any working node that marks LOCAL_ABSPATH as base-deleted. If this
@@ -681,12 +693,35 @@ svn_wc__db_base_add_not_present_node(svn_wc__db_t *db,
actual node will be removed if the actual node does not mark a
conflict.
- Note the caller is responsible for removing base node
- children before calling this function (this may change).
+ If KEEP_AS_WORKING is TRUE, then the base tree is copied to higher
+ layers as a copy of itself before deleting the BASE nodes.
+
+ If KEEP_AS_WORKING is FALSE, and QUEUE_DELETES is TRUE, also queue
+ workqueue items to delete all in-wc representations that aren't
+ shadowed by higher layers.
+ (With KEEP_AS_WORKING TRUE, this is a no-op, as everything is
+ automatically shadowed by the created copy)
+
+ If REMOVE_LOCKS is TRUE, all locks of this node and any subnodes
+ are also removed. This is to be done during commit of deleted nodes.
+
+ If NOT_PRESENT_REVISION specifies a valid revision a not-present
+ node is installed in BASE node with kind NOT_PRESENT_KIND after
+ deleting.
+
+ If CONFLICT and/or WORK_ITEMS are passed they are installed as part
+ of the operation, after the work items inserted by the operation
+ itself.
*/
svn_error_t *
svn_wc__db_base_remove(svn_wc__db_t *db,
const char *local_abspath,
+ svn_boolean_t keep_as_working,
+ svn_boolean_t queue_deletes,
+ svn_boolean_t remove_locks,
+ svn_revnum_t not_present_revision,
+ svn_skel_t *conflict,
+ svn_skel_t *work_items,
apr_pool_t *scratch_pool);
@@ -715,12 +750,11 @@ svn_wc__db_base_remove(svn_wc__db_t *db,
LOCK NULL
HAD_PROPS FALSE
+ PROPS NULL
UPDATE_ROOT FALSE
- If the STATUS is normal, and the REPOS_* values are NULL, then the
- caller should use svn_wc__db_scan_base_repos() to scan up the BASE
- tree for the repository information.
+ If the STATUS is normal, the REPOS_* values will be non-NULL.
If DEPTH is requested, and the node is NOT a directory, then the
value will be set to svn_depth_unknown. If LOCAL_ABSPATH is a link,
@@ -732,6 +766,11 @@ svn_wc__db_base_remove(svn_wc__db_t *db,
If TARGET is requested, and the node is NOT a symlink, then it will
be set to NULL.
+ *PROPS maps "const char *" names to "const svn_string_t *" values. If
+ the base node is capable of having properties but has none, set
+ *PROPS to an empty hash. If its status is such that it cannot have
+ properties, set *PROPS to NULL.
+
If UPDATE_ROOT is requested, set it to TRUE if the node should only
be updated when it is the root of an update (e.g. file externals).
@@ -740,7 +779,7 @@ svn_wc__db_base_remove(svn_wc__db_t *db,
*/
svn_error_t *
svn_wc__db_base_get_info(svn_wc__db_status_t *status,
- svn_wc__db_kind_t *kind,
+ svn_node_kind_t *kind,
svn_revnum_t *revision,
const char **repos_relpath,
const char **repos_root_url,
@@ -753,6 +792,7 @@ svn_wc__db_base_get_info(svn_wc__db_status_t *status,
const char **target,
svn_wc__db_lock_t **lock,
svn_boolean_t *had_props,
+ apr_hash_t **props,
svn_boolean_t *update_root,
svn_wc__db_t *db,
const char *local_abspath,
@@ -763,7 +803,7 @@ svn_wc__db_base_get_info(svn_wc__db_status_t *status,
fields needed by the adm crawler. */
struct svn_wc__db_base_info_t {
svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
svn_revnum_t revnum;
const char *repos_relpath;
const char *repos_root_url;
@@ -788,7 +828,8 @@ svn_wc__db_base_get_children_info(apr_hash_t **nodes,
*PROPS maps "const char *" names to "const svn_string_t *" values.
If the node has no properties, set *PROPS to an empty hash.
*PROPS will never be set to NULL.
- If the node is not present in the BASE tree, return an error.
+ If the node is not present in the BASE tree (with presence 'normal'
+ or 'incomplete'), return an error.
Allocate *PROPS and its keys and values in RESULT_POOL.
*/
svn_error_t *
@@ -974,6 +1015,16 @@ svn_wc__db_pristine_get_sha1(const svn_checksum_t **sha1_checksum,
apr_pool_t *scratch_pool);
+/* If necessary transfers the PRISTINE files of the tree rooted at
+ SRC_LOCAL_ABSPATH to the working copy identified by DST_WRI_ABSPATH. */
+svn_error_t *
+svn_wc__db_pristine_transfer(svn_wc__db_t *db,
+ const char *src_local_abspath,
+ const char *dst_wri_abspath,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool);
+
/* Remove the pristine text with SHA-1 checksum SHA1_CHECKSUM from the
* pristine store, iff it is not referenced by any of the (other) WC DB
* tables. */
@@ -1020,6 +1071,7 @@ svn_wc__db_external_add_file(svn_wc__db_t *db,
svn_revnum_t revision,
const apr_hash_t *props,
+ apr_array_header_t *iprops,
svn_revnum_t changed_rev,
apr_time_t changed_date,
@@ -1038,6 +1090,7 @@ svn_wc__db_external_add_file(svn_wc__db_t *db,
apr_hash_t *new_actual_props,
svn_boolean_t keep_recorded_info,
+ const svn_skel_t *conflict,
const svn_skel_t *work_items,
apr_pool_t *scratch_pool);
@@ -1124,7 +1177,7 @@ svn_wc__db_external_remove(svn_wc__db_t *db,
When KIND is requested then the value will be set to the kind of external.
- If DEFININING_ABSPATH is requested, then the value will be set to the
+ If DEFINING_ABSPATH is requested, then the value will be set to the
absolute path of the directory which originally defined the external.
(The path with the svn:externals property)
@@ -1148,7 +1201,7 @@ svn_wc__db_external_remove(svn_wc__db_t *db,
*/
svn_error_t *
svn_wc__db_external_read(svn_wc__db_status_t *status,
- svn_wc__db_kind_t *kind,
+ svn_node_kind_t *kind,
const char **defining_abspath,
const char **repos_root_url,
@@ -1164,6 +1217,37 @@ svn_wc__db_external_read(svn_wc__db_status_t *status,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
+/* Return in *EXTERNALS a list of svn_wc__committable_external_info_t *
+ * containing info on externals defined to be checked out below LOCAL_ABSPATH,
+ * returning only those externals that are not fixed to a specific revision.
+ *
+ * If IMMEDIATES_ONLY is TRUE, only those externals defined to be checked out
+ * as immediate children of LOCAL_ABSPATH are returned (this is useful for
+ * treating user requested depth < infinity).
+ *
+ * If there are no externals to be returned, set *EXTERNALS to NULL. Otherwise
+ * set *EXTERNALS to an APR array newly cleated in RESULT_POOL.
+ *
+ * NOTE: This only returns the externals known by the immediate WC root for
+ * LOCAL_ABSPATH; i.e.:
+ * - If there is a further parent WC "above" the immediate WC root, and if
+ * that parent WC defines externals to live somewhere within this WC, these
+ * externals will appear to be foreign/unversioned and won't be picked up.
+ * - Likewise, only the topmost level of externals nestings (externals
+ * defined within a checked out external dir) is picked up by this function.
+ * (For recursion, see svn_wc__committable_externals_below().)
+ *
+ * ###TODO: Add a WRI_ABSPATH (wc root indicator) separate from LOCAL_ABSPATH,
+ * to allow searching any wc-root for externals under LOCAL_ABSPATH, not only
+ * LOCAL_ABSPATH's most immediate wc-root. */
+svn_error_t *
+svn_wc__db_committable_externals_below(apr_array_header_t **externals,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_boolean_t immediates_only,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
/* Gets a mapping from const char * local abspaths of externals to the const
char * local abspath of where they are defined for all externals defined
at or below LOCAL_ABSPATH.
@@ -1209,20 +1293,41 @@ svn_wc__db_externals_gather_definitions(apr_hash_t **externals,
* This copy is NOT recursive. It simply establishes this one node, plus
* incomplete nodes for the children.
*
+ * If IS_MOVE is TRUE, mark this copy operation as the copy-half of
+ * a move. The delete-half of the move needs to be created separately
+ * with svn_wc__db_op_delete().
+ *
* Add WORK_ITEMS to the work queue. */
svn_error_t *
svn_wc__db_op_copy(svn_wc__db_t *db,
const char *src_abspath,
const char *dst_abspath,
const char *dst_op_root_abspath,
+ svn_boolean_t is_move,
const svn_skel_t *work_items,
apr_pool_t *scratch_pool);
+/* Checks if LOCAL_ABSPATH represents a move back to its original location,
+ * and if it is reverts the move while keeping local changes after it has been
+ * moved from MOVED_FROM_ABSPATH.
+ *
+ * If MOVED_BACK is not NULL, set *MOVED_BACK to TRUE when a move was reverted,
+ * otherwise to FALSE.
+ */
+svn_error_t *
+svn_wc__db_op_handle_move_back(svn_boolean_t *moved_back,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ const char *moved_from_abspath,
+ const svn_skel_t *work_items,
+ apr_pool_t *scratch_pool);
+
+
/* Copy the leaves of the op_depth layer directly shadowed by the operation
* of SRC_ABSPATH (so SRC_ABSPATH must be an op_root) to dst_abspaths
* parents layer.
*
- * This operation is recursive. It copies all the descandants at the lower
+ * This operation is recursive. It copies all the descendants at the lower
* layer and adds base-deleted nodes on dst_abspath layer to mark these nodes
* properly deleted.
*
@@ -1233,6 +1338,7 @@ svn_error_t *
svn_wc__db_op_copy_shadowed_layer(svn_wc__db_t *db,
const char *src_abspath,
const char *dst_abspath,
+ svn_boolean_t is_move,
apr_pool_t *scratch_pool);
@@ -1256,6 +1362,7 @@ svn_wc__db_op_copy_dir(svn_wc__db_t *db,
svn_revnum_t original_revision,
const apr_array_header_t *children,
svn_depth_t depth,
+ svn_boolean_t is_move,
const svn_skel_t *conflict,
const svn_skel_t *work_items,
apr_pool_t *scratch_pool);
@@ -1276,6 +1383,9 @@ svn_wc__db_op_copy_file(svn_wc__db_t *db,
const char *original_uuid,
svn_revnum_t original_revision,
const svn_checksum_t *checksum,
+ svn_boolean_t update_actual_props,
+ const apr_hash_t *new_actual_props,
+ svn_boolean_t is_move,
const svn_skel_t *conflict,
const svn_skel_t *work_items,
apr_pool_t *scratch_pool);
@@ -1293,41 +1403,48 @@ svn_wc__db_op_copy_symlink(svn_wc__db_t *db,
const char *original_uuid,
svn_revnum_t original_revision,
const char *target,
+ svn_boolean_t is_move,
const svn_skel_t *conflict,
const svn_skel_t *work_items,
apr_pool_t *scratch_pool);
-/* ### do we need svn_wc__db_op_copy_absent() ?? */
+/* ### do we need svn_wc__db_op_copy_server_excluded() ?? */
/* ### add a new versioned directory. a list of children is NOT passed
### since they are added in future, distinct calls to db_op_add_*.
- ### this is freshly added, so it has no properties. */
+ PROPS gives the properties; empty or NULL means none. */
/* ### do we need a CONFLICTS param? */
svn_error_t *
svn_wc__db_op_add_directory(svn_wc__db_t *db,
const char *local_abspath,
+ const apr_hash_t *props,
const svn_skel_t *work_items,
apr_pool_t *scratch_pool);
-/* ### as a new file, there are no properties. this file has no "pristine"
+/* Add a file.
+ PROPS gives the properties; empty or NULL means none.
+ ### this file has no "pristine"
### contents, so a checksum [reference] is not required. */
/* ### do we need a CONFLICTS param? */
svn_error_t *
svn_wc__db_op_add_file(svn_wc__db_t *db,
const char *local_abspath,
+ const apr_hash_t *props,
const svn_skel_t *work_items,
apr_pool_t *scratch_pool);
-/* ### newly added symlinks have no properties. */
+/* Add a symlink.
+ PROPS gives the properties; empty or NULL means none. */
/* ### do we need a CONFLICTS param? */
svn_error_t *
svn_wc__db_op_add_symlink(svn_wc__db_t *db,
const char *local_abspath,
const char *target,
+ const apr_hash_t *props,
const svn_skel_t *work_items,
apr_pool_t *scratch_pool);
@@ -1342,8 +1459,8 @@ svn_wc__db_op_add_symlink(svn_wc__db_t *db,
If PROPS is NULL, set the properties to be the same as the pristine
properties.
- CONFLICT is used to register a conflict on this node at the same time
- the properties are changed.
+ If CONFLICT is not NULL, it is used to register a conflict on this
+ node at the same time the properties are changed.
WORK_ITEMS are inserted into the work queue, as additional things that
need to be completed before the working copy is stable.
@@ -1370,44 +1487,15 @@ svn_wc__db_op_set_props(svn_wc__db_t *db,
const svn_skel_t *work_items,
apr_pool_t *scratch_pool);
-/* See props.h */
-#ifdef SVN__SUPPORT_BASE_MERGE
-/* ### Set the properties of the node LOCAL_ABSPATH in the BASE tree to PROPS.
- ###
- ### This function should not exist because properties should be stored
- ### onto the BASE node at construction time, in a single atomic operation.
- ###
- ### PROPS maps "const char *" names to "const svn_string_t *" values.
- ### To specify no properties, PROPS must be an empty hash, not NULL.
- ### If the node is not present, SVN_ERR_WC_PATH_NOT_FOUND is returned.
-*/
-svn_error_t *
-svn_wc__db_temp_base_set_props(svn_wc__db_t *db,
- const char *local_abspath,
- const apr_hash_t *props,
- apr_pool_t *scratch_pool);
-
-
-/* ### Set the properties of the node LOCAL_ABSPATH in the WORKING tree
- ### to PROPS.
- ###
- ### This function should not exist because properties should be stored
- ### onto the WORKING node at construction time, in a single atomic
- ### operation.
- ###
- ### PROPS maps "const char *" names to "const svn_string_t *" values.
- ### To specify no properties, PROPS must be an empty hash, not NULL.
- ### If the node is not present, SVN_ERR_WC_PATH_NOT_FOUND is returned.
-*/
-svn_error_t *
-svn_wc__db_temp_working_set_props(svn_wc__db_t *db,
- const char *local_abspath,
- const apr_hash_t *props,
- apr_pool_t *scratch_pool);
-#endif
-
/* Mark LOCAL_ABSPATH, and all children, for deletion.
*
+ * This function removes the file externals (and if DELETE_DIR_EXTERNALS is
+ * TRUE also the directory externals) registered below LOCAL_ABSPATH.
+ * (DELETE_DIR_EXTERNALS should be true if also removing unversioned nodes)
+ *
+ * If MOVED_TO_ABSPATH is not NULL, mark the deletion of LOCAL_ABSPATH
+ * as the delete-half of a move from LOCAL_ABSPATH to MOVED_TO_ABSPATH.
+ *
* If NOTIFY_FUNC is not NULL, then it will be called (with NOTIFY_BATON)
* for each node deleted. While this processing occurs, if CANCEL_FUNC is
* not NULL, then it will be called (with CANCEL_BATON) to detect cancellation
@@ -1419,21 +1507,47 @@ svn_wc__db_temp_working_set_props(svn_wc__db_t *db,
svn_error_t *
svn_wc__db_op_delete(svn_wc__db_t *db,
const char *local_abspath,
- /* ### flip to CANCEL, then NOTIFY. precedent. */
- svn_wc_notify_func2_t notify_func,
- void *notify_baton,
+ const char *moved_to_abspath,
+ svn_boolean_t delete_dir_externals,
+ svn_skel_t *conflict,
+ svn_skel_t *work_items,
svn_cancel_func_t cancel_func,
void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
apr_pool_t *scratch_pool);
-/* ### KFF: Would like to know behavior when dst_path already exists
- ### and is a) a dir or b) a non-dir. */
+/* Mark all LOCAL_ABSPATH in the TARGETS array, and all of their children,
+ * for deletion.
+ *
+ * This function is more efficient than svn_wc__db_op_delete() because
+ * only one sqlite transaction is used for all targets.
+ * It currently lacks support for moves (though this could be changed,
+ * at which point svn_wc__db_op_delete() becomes redundant).
+ *
+ * This function removes the file externals (and if DELETE_DIR_EXTERNALS is
+ * TRUE also the directory externals) registered below the targets.
+ * (DELETE_DIR_EXTERNALS should be true if also removing unversioned nodes)
+ *
+ * If NOTIFY_FUNC is not NULL, then it will be called (with NOTIFY_BATON)
+ * for each node deleted. While this processing occurs, if CANCEL_FUNC is
+ * not NULL, then it will be called (with CANCEL_BATON) to detect cancellation
+ * during the processing.
+ *
+ * Note: the notification (and cancellation) occur outside of a SQLite
+ * transaction.
+ */
svn_error_t *
-svn_wc__db_op_move(svn_wc__db_t *db,
- const char *src_abspath,
- const char *dst_abspath,
- apr_pool_t *scratch_pool);
+svn_wc__db_op_delete_many(svn_wc__db_t *db,
+ apr_array_header_t *targets,
+ svn_boolean_t delete_dir_externals,
+ const svn_skel_t *conflict,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool);
/* ### mark PATH as (possibly) modified. "svn edit" ... right API here? */
@@ -1460,12 +1574,21 @@ svn_wc__db_op_set_changelist(svn_wc__db_t *db,
void *cancel_baton,
apr_pool_t *scratch_pool);
+/* Record CONFLICT on LOCAL_ABSPATH, potentially replacing other conflicts
+ recorded on LOCAL_ABSPATH.
+
+ Users should in most cases pass CONFLICT to another WC_DB call instead of
+ calling svn_wc__db_op_mark_conflict() directly outside a transaction, to
+ allow recording atomically with the operation involved.
-/* ### caller maintains ACTUAL. we're just recording state. */
-/* ### we probably need to record details of the conflict. how? */
+ Any work items that are necessary as part of marking this node conflicted
+ can be passed in WORK_ITEMS.
+ */
svn_error_t *
svn_wc__db_op_mark_conflict(svn_wc__db_t *db,
const char *local_abspath,
+ const svn_skel_t *conflict,
+ const svn_skel_t *work_items,
apr_pool_t *scratch_pool);
@@ -1480,6 +1603,7 @@ svn_wc__db_op_mark_resolved(svn_wc__db_t *db,
svn_boolean_t resolved_text,
svn_boolean_t resolved_props,
svn_boolean_t resolved_tree,
+ const svn_skel_t *work_items,
apr_pool_t *scratch_pool);
@@ -1503,10 +1627,9 @@ svn_wc__db_op_revert(svn_wc__db_t *db,
apr_pool_t *scratch_pool);
/* Query the revert list for LOCAL_ABSPATH and set *REVERTED if the
- * path was reverted. Set *CONFLICT_OLD, *CONFLICT_NEW,
- * *CONFLICT_WORKING and *PROP_REJECT to the names of the conflict
- * files, or NULL if the names are not stored.
- *
+ * path was reverted. Set *MARKER_FILES to a const char *list of
+ * marker files if any were recorded on LOCAL_ABSPATH.
+ *
* Set *COPIED_HERE if the reverted node was copied here and is the
* operation root of the copy.
* Set *KIND to the node kind of the reverted node.
@@ -1515,12 +1638,9 @@ svn_wc__db_op_revert(svn_wc__db_t *db,
*/
svn_error_t *
svn_wc__db_revert_list_read(svn_boolean_t *reverted,
- const char **conflict_old,
- const char **conflict_new,
- const char **conflict_working,
- const char **prop_reject,
+ const apr_array_header_t **marker_files,
svn_boolean_t *copied_here,
- svn_wc__db_kind_t *kind,
+ svn_node_kind_t *kind,
svn_wc__db_t *db,
const char *local_abspath,
apr_pool_t *result_pool,
@@ -1530,7 +1650,7 @@ svn_wc__db_revert_list_read(svn_boolean_t *reverted,
* svn_wc__db_revert_list_read_copied_children(). */
typedef struct svn_wc__db_revert_list_copied_child_info_t {
const char *abspath;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
} svn_wc__db_revert_list_copied_child_info_t ;
/* Return in *CHILDREN a list of reverted copied nodes at or within
@@ -1566,50 +1686,6 @@ svn_wc__db_revert_list_done(svn_wc__db_t *db,
const char *local_abspath,
apr_pool_t *scratch_pool);
-
-/* Return a hash @a *tree_conflicts of all the children of @a
- * local_abspath that are in tree conflicts. The hash maps local
- * basenames to pointers to svn_wc_conflict_description2_t, all
- * allocated in result pool.
- */
-/* ### this is not an OPERATION. remove the _op_. */
-svn_error_t *
-svn_wc__db_op_read_all_tree_conflicts(apr_hash_t **tree_conflicts,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-/* Get any tree conflict associated with LOCAL_ABSPATH in DB, and put it
- in *TREE_CONFLICT, allocated in RESULT_POOL.
-
- Use SCRATCH_POOL for any temporary allocations.
-*/
-/* ### this is not an OPERATION. remove the _op_. */
-svn_error_t *
-svn_wc__db_op_read_tree_conflict(
- const svn_wc_conflict_description2_t **tree_conflict,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-
-/* Set the tree conflict on LOCAL_ABSPATH in DB to TREE_CONFLICT. Use
- NULL to remove a tree conflict.
-
- Use SCRATCH_POOL for any temporary allocations.
-*/
-/* ### can this also record text/prop conflicts? drop "tree"? */
-/* ### dunno if it can, but it definitely should be able to. */
-/* ### gjs: also ref: db_op_mark_conflict() */
-svn_error_t *
-svn_wc__db_op_set_tree_conflict(svn_wc__db_t *db,
- const char *local_abspath,
- const svn_wc_conflict_description2_t *tree_conflict,
- apr_pool_t *scratch_pool);
-
-
/* ### status */
@@ -1641,7 +1717,7 @@ svn_wc__db_op_set_tree_conflict(svn_wc__db_t *db,
The OUT parameters, and their "not available" values are:
STATUS n/a (always available)
- KIND svn_wc__db_kind_unknown (For ACTUAL only nodes)
+ KIND svn_node_unknown (For ACTUAL only nodes)
REVISION SVN_INVALID_REVNUM
REPOS_RELPATH NULL
REPOS_ROOT_URL NULL
@@ -1661,7 +1737,7 @@ svn_wc__db_op_set_tree_conflict(svn_wc__db_t *db,
LOCK NULL
RECORDED_SIZE SVN_INVALID_FILESIZE
- RECORDED_MOD_TIME 0
+ RECORDED_TIME 0
CHANGELIST NULL
CONFLICTED FALSE
@@ -1745,7 +1821,7 @@ svn_wc__db_op_set_tree_conflict(svn_wc__db_t *db,
If HAD_PROPS is requested and the node has pristine props, the value will
be set to TRUE.
- If PROP_MODS is requested and the node has property modification the value
+ If PROPS_MOD is requested and the node has property modification the value
will be set to TRUE.
### add information about the need to scan upwards to get a complete
@@ -1756,7 +1832,7 @@ svn_wc__db_op_set_tree_conflict(svn_wc__db_t *db,
### the TEXT_MOD may become an enumerated value at some point to
### indicate different states of knowledge about text modifications.
### for example, an "svn edit" command in the future might set a
- ### flag indicating adminstratively-defined modification. and/or we
+ ### flag indicating administratively-defined modification. and/or we
### might have a status indicating that we saw it was modified while
### performing a filesystem traversal.
@@ -1790,7 +1866,7 @@ svn_wc__db_op_set_tree_conflict(svn_wc__db_t *db,
*/
svn_error_t *
svn_wc__db_read_info(svn_wc__db_status_t *status, /* ### derived */
- svn_wc__db_kind_t *kind,
+ svn_node_kind_t *kind,
svn_revnum_t *revision,
const char **repos_relpath,
const char **repos_root_url,
@@ -1813,7 +1889,7 @@ svn_wc__db_read_info(svn_wc__db_status_t *status, /* ### derived */
/* Recorded for files present in the working copy */
svn_filesize_t *recorded_size,
- apr_time_t *recorded_mod_time,
+ apr_time_t *recorded_time,
/* From ACTUAL */
const char **changelist,
@@ -1834,11 +1910,21 @@ svn_wc__db_read_info(svn_wc__db_status_t *status, /* ### derived */
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
+/* Structure used as linked list in svn_wc__db_info_t to describe all nodes
+ in this location that were moved to another location */
+struct svn_wc__db_moved_to_info_t
+{
+ const char *moved_to_abspath;
+ const char *shadow_op_root_abspath;
+
+ struct svn_wc__db_moved_to_info_t *next;
+};
+
/* Structure returned by svn_wc__db_read_children_info. Only has the
fields needed by status. */
struct svn_wc__db_info_t {
svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
svn_revnum_t revnum;
const char *repos_relpath;
const char *repos_root_url;
@@ -1849,7 +1935,7 @@ struct svn_wc__db_info_t {
svn_depth_t depth;
svn_filesize_t recorded_size;
- apr_time_t recorded_mod_time;
+ apr_time_t recorded_time;
const char *changelist;
svn_boolean_t conflicted;
@@ -1859,6 +1945,7 @@ struct svn_wc__db_info_t {
svn_boolean_t op_root;
svn_boolean_t has_checksum;
+ svn_boolean_t copied;
svn_boolean_t had_props;
svn_boolean_t props_mod;
@@ -1868,6 +1955,14 @@ struct svn_wc__db_info_t {
svn_boolean_t locked; /* WC directory lock */
svn_wc__db_lock_t *lock; /* Repository file lock */
svn_boolean_t incomplete; /* TRUE if a working node is incomplete */
+
+ struct svn_wc__db_moved_to_info_t *moved_to; /* A linked list of locations
+ where nodes at this path
+ are moved to. Highest layers
+ first */
+ svn_boolean_t moved_here; /* Only on op-roots. */
+
+ svn_boolean_t file_external;
};
/* Return in *NODES a hash mapping name->struct svn_wc__db_info_t for
@@ -1886,12 +1981,20 @@ svn_wc__db_read_children_info(apr_hash_t **nodes,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
+/* Like svn_wc__db_read_children_info, but only gets an info node for the root
+ element. */
+svn_error_t *
+svn_wc__db_read_single_info(const struct svn_wc__db_info_t **info,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
/* Structure returned by svn_wc__db_read_walker_info. Only has the
fields needed by svn_wc__internal_walk_children(). */
struct svn_wc__db_walker_info_t {
svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
};
/* When a node is deleted in WORKING, some of its information is no longer
@@ -1907,10 +2010,15 @@ struct svn_wc__db_walker_info_t {
calling svn_wc__db_read_info().
(All other information (like original_*) can be obtained via other apis).
+
+ *PROPS maps "const char *" names to "const svn_string_t *" values. If
+ the pristine node is capable of having properties but has none, set
+ *PROPS to an empty hash. If its status is such that it cannot have
+ properties, set *PROPS to NULL.
*/
svn_error_t *
svn_wc__db_read_pristine_info(svn_wc__db_status_t *status,
- svn_wc__db_kind_t *kind,
+ svn_node_kind_t *kind,
svn_revnum_t *changed_rev,
apr_time_t *changed_date,
const char **changed_author,
@@ -1918,6 +2026,7 @@ svn_wc__db_read_pristine_info(svn_wc__db_status_t *status,
const svn_checksum_t **checksum, /* files only */
const char **target, /* symlinks only */
svn_boolean_t *had_props,
+ apr_hash_t **props,
svn_wc__db_t *db,
const char *local_abspath,
apr_pool_t *result_pool,
@@ -1945,7 +2054,7 @@ svn_wc__db_read_node_install_info(const char **wcroot_abspath,
apr_pool_t *scratch_pool);
/* Return in *NODES a hash mapping name->struct svn_wc__db_walker_info_t for
- the children of DIR_ABSPATH. "name" is the child's name relatve to
+ the children of DIR_ABSPATH. "name" is the child's name relative to
DIR_ABSPATH, not an absolute path. */
svn_error_t *
svn_wc__db_read_children_walker_info(apr_hash_t **nodes,
@@ -1989,20 +2098,13 @@ svn_wc__db_read_props(apr_hash_t **props,
* a hash table mapping <tt>char *</tt> names onto svn_string_t *
* values for any properties of child nodes of LOCAL_ABSPATH (up to DEPTH).
*
- * If BASE_PROPS is TRUE, read the properties from the BASE layer (op_depth=0),
- * without local modifications.
- *
- * If BASE_PROPS is FALSE, read the properties from the WORKING layer (highest
- * op_depth).
- *
- * If BASE_PROPS is FALSE and, PRISTINE is TRUE, the local modifications will
- * be suppressed. If PRISTINE is FALSE, local modifications will be visible.
+ * If PRISTINE is FALSE, read the properties from the WORKING layer (highest
+ * op_depth); if PRISTINE is FALSE, local modifications will be visible.
*/
svn_error_t *
svn_wc__db_read_props_streamily(svn_wc__db_t *db,
const char *local_abspath,
svn_depth_t depth,
- svn_boolean_t base_props,
svn_boolean_t pristine,
const apr_array_header_t *changelists,
svn_wc__proplist_receiver_t receiver_func,
@@ -2030,13 +2132,93 @@ svn_wc__db_read_pristine_props(apr_hash_t **props,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
+
+/**
+ * Set @a *iprops to a depth-first ordered array of
+ * #svn_prop_inherited_item_t * structures representing the properties
+ * inherited by @a local_abspath from the ACTUAL tree above
+ * @a local_abspath (looking through to the WORKING or BASE tree as
+ * required), up to and including the root of the working copy and
+ * any cached inherited properties inherited by the root.
+ *
+ * The #svn_prop_inherited_item_t->path_or_url members of the
+ * #svn_prop_inherited_item_t * structures in @a *iprops are
+ * paths relative to the repository root URL for cached inherited
+ * properties and absolute working copy paths otherwise.
+ *
+ * If ACTUAL_PROPS is not NULL, then set *ACTUAL_PROPS to the actual
+ * properties stored on LOCAL_ABSPATH.
+ *
+ * Allocate @a *iprops in @a result_pool. Use @a scratch_pool
+ * for temporary allocations.
+ */
+svn_error_t *
+svn_wc__db_read_inherited_props(apr_array_header_t **iprops,
+ apr_hash_t **actual_props,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ const char *propname,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Read a BASE node's inherited property information.
+
+ Set *IPROPS to to a depth-first ordered array of
+ svn_prop_inherited_item_t * structures representing the cached
+ inherited properties for the BASE node at LOCAL_ABSPATH.
+
+ If no cached properties are found, then set *IPROPS to NULL.
+ If LOCAL_ABSPATH represents the root of the repository, then set
+ *IPROPS to an empty array.
+
+ Allocate *IPROPS in RESULT_POOL, use SCRATCH_POOL for temporary
+ allocations. */
+svn_error_t *
+svn_wc__db_read_cached_iprops(apr_array_header_t **iprops,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Find BASE nodes with cached inherited properties.
+
+ Set *IPROPS_PATHS to a hash mapping const char * absolute working copy
+ paths to the repos_relpath of the path for each path in the working copy
+ at or below LOCAL_ABSPATH, limited by DEPTH, that has cached inherited
+ properties for the BASE node of the path.
+
+ Allocate *IPROP_PATHS in RESULT_POOL.
+ Use SCRATCH_POOL for temporary allocations. */
+svn_error_t *
+svn_wc__db_get_children_with_cached_iprops(apr_hash_t **iprop_paths,
+ svn_depth_t depth,
+ const char *local_abspath,
+ svn_wc__db_t *db,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/** Obtain a mapping of const char * local_abspaths to const svn_string_t*
+ * property values in *VALUES, of all PROPNAME properties on LOCAL_ABSPATH
+ * and its descendants.
+ *
+ * Allocate the result in RESULT_POOL, and perform temporary allocations in
+ * SCRATCH_POOL.
+ */
+svn_error_t *
+svn_wc__db_prop_retrieve_recursive(apr_hash_t **values,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ const char *propname,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
/* Set *CHILDREN to a new array of the (const char *) basenames of the
immediate children of the working node at LOCAL_ABSPATH in DB.
Return every path that refers to a child of the working node at
LOCAL_ABSPATH. Do not include a path just because it was a child of a
deleted directory that existed at LOCAL_ABSPATH if that directory is now
- sheduled to be replaced by the working node at LOCAL_ABSPATH.
+ scheduled to be replaced by the working node at LOCAL_ABSPATH.
Allocate *CHILDREN in RESULT_POOL and do temporary allocations in
SCRATCH_POOL.
@@ -2083,13 +2265,12 @@ svn_wc__db_read_conflict_victims(const apr_array_header_t **victims,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
-/* Read into *MARKER_FILES the basenames of the immediate children of
- LOCAL_ABSPATH in DB that are unversioned marker files for text or
- property conflicts. The files may have been deleted by the user.
+/* Read into *MARKER_FILES the absolute paths of the marker files
+ of conflicts stored on LOCAL_ABSPATH and its immediate children in DB.
+ The on-disk files may have been deleted by the user.
Allocate *MARKER_FILES in RESULT_POOL and do temporary allocations
in SCRATCH_POOL */
-/* ### This function will probably be removed. */
svn_error_t *
svn_wc__db_get_conflict_marker_files(apr_hash_t **markers,
svn_wc__db_t *db,
@@ -2097,36 +2278,49 @@ svn_wc__db_get_conflict_marker_files(apr_hash_t **markers,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
-/* Read into CONFLICTS svn_wc_conflict_description2_t* structs
- for all conflicts that have LOCAL_ABSPATH as victim.
+/* Read the conflict information recorded on LOCAL_ABSPATH in *CONFLICT,
+ an editable conflict skel.
- Victim must be versioned or be part of a tree conflict.
+ If the node exists, but does not have a conflict set *CONFLICT to NULL,
+ otherwise return a SVN_ERR_WC_PATH_NOT_FOUND error.
Allocate *CONFLICTS in RESULT_POOL and do temporary allocations in
SCRATCH_POOL */
-/* ### Currently there can be just one property conflict recorded
- per victim */
-/* ### This function will probably be removed. */
svn_error_t *
-svn_wc__db_read_conflicts(const apr_array_header_t **conflicts,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
+svn_wc__db_read_conflict(svn_skel_t **conflict,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
/* Return the kind of the node in DB at LOCAL_ABSPATH. The WORKING tree will
be examined first, then the BASE tree. If the node is not present in either
- tree and ALLOW_MISSING is TRUE, then svn_wc__db_kind_unknown is returned.
+ tree and ALLOW_MISSING is TRUE, then svn_node_unknown is returned.
If the node is missing and ALLOW_MISSING is FALSE, then it will return
SVN_ERR_WC_PATH_NOT_FOUND.
+ The SHOW_HIDDEN and SHOW_DELETED flags report certain states as kind none.
+
+ When nodes have certain statee they are only reported when:
+ svn_wc__db_status_not_present when show_hidden && show_deleted
+
+ svn_wc__db_status_excluded when show_hidden
+ svn_wc__db_status_server_excluded when show_hidden
+
+ svn_wc__db_status_deleted when show_deleted
+
+ In other cases these nodes are reported with *KIND as svn_node_none.
+ (See also svn_wc_read_kind2()'s documentation)
+
Uses SCRATCH_POOL for temporary allocations. */
svn_error_t *
-svn_wc__db_read_kind(svn_wc__db_kind_t *kind,
+svn_wc__db_read_kind(svn_node_kind_t *kind,
svn_wc__db_t *db,
const char *local_abspath,
svn_boolean_t allow_missing,
+ svn_boolean_t show_deleted,
+ svn_boolean_t show_hidden,
apr_pool_t *scratch_pool);
@@ -2166,16 +2360,36 @@ svn_wc__db_node_check_replace(svn_boolean_t *is_replace_root,
### changelist usage -- we may already assume the list fits in memory.
*/
-/* Checks if LOCAL_ABSPATH has a parent directory that knows about its
- * existance. Set *IS_ROOT to FALSE if a parent is found, and to TRUE
- * if there is no such parent.
+/* The DB-private version of svn_wc__is_wcroot(), which see.
*/
svn_error_t *
-svn_wc__db_is_wcroot(svn_boolean_t *is_root,
+svn_wc__db_is_wcroot(svn_boolean_t *is_wcroot,
svn_wc__db_t *db,
const char *local_abspath,
apr_pool_t *scratch_pool);
+/* Check whether a node is a working copy root and/or switched.
+
+ If LOCAL_ABSPATH is the root of a working copy, set *IS_WC_ROOT to TRUE,
+ otherwise to FALSE.
+
+ If LOCAL_ABSPATH is switched against its parent in the same working copy
+ set *IS_SWITCHED to TRUE, otherwise to FALSE.
+
+ If KIND is not null, set *KIND to the node type of LOCAL_ABSPATH.
+
+ Any of the output arguments can be null to specify that the result is not
+ interesting to the caller.
+
+ Use SCRATCH_POOL for temporary allocations.
+ */
+svn_error_t *
+svn_wc__db_is_switched(svn_boolean_t *is_wcroot,
+ svn_boolean_t *is_switched,
+ svn_node_kind_t *kind,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *scratch_pool);
/* @} */
@@ -2220,9 +2434,9 @@ svn_wc__db_global_relocate(svn_wc__db_t *db,
the commit. It will become the BASE node's 'revnum' and 'changed_rev'
values in the BASE_NODE table.
- CHANGED_REVISION is the the new 'last changed' revision. If the node is
+ CHANGED_REVISION is the new 'last changed' revision. If the node is
modified its value is equivalent to NEW_REVISION, but in case of a
- decendant of a copy/move it can be an older revision.
+ descendant of a copy/move it can be an older revision.
CHANGED_DATE is the (server-side) date of CHANGED_REVISION. It may be 0 if
the revprop is missing on the revision.
@@ -2283,7 +2497,7 @@ svn_wc__db_global_commit(svn_wc__db_t *db,
svn_error_t *
svn_wc__db_global_update(svn_wc__db_t *db,
const char *local_abspath,
- svn_wc__db_kind_t new_kind,
+ svn_node_kind_t new_kind,
const char *new_repos_relpath,
svn_revnum_t new_revision,
const apr_hash_t *new_props,
@@ -2325,6 +2539,12 @@ svn_wc__db_global_update(svn_wc__db_t *db,
EXCLUDE_RELPATHS is a hash containing const char *local_relpath. Nodes
for pathnames contained in EXCLUDE_RELPATHS are not touched by this
function. These pathnames should be paths relative to the wcroot.
+
+ If WCROOT_IPROPS is not NULL it is a hash mapping const char * absolute
+ working copy paths to depth-first ordered arrays of
+ svn_prop_inherited_item_t * structures. If LOCAL_ABSPATH exists in
+ WCROOT_IPROPS, then set the hashed value as the node's inherited
+ properties.
*/
svn_error_t *
svn_wc__db_op_bump_revisions_post_update(svn_wc__db_t *db,
@@ -2335,26 +2555,29 @@ svn_wc__db_op_bump_revisions_post_update(svn_wc__db_t *db,
const char *new_repos_uuid,
svn_revnum_t new_revision,
apr_hash_t *exclude_relpaths,
+ apr_hash_t *wcroot_iprops,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
apr_pool_t *scratch_pool);
-/* Record the TRANSLATED_SIZE and LAST_MOD_TIME for a versioned node.
+/* Record the RECORDED_SIZE and RECORDED_TIME for a versioned node.
This function will record the information within the WORKING node,
if present, or within the BASE tree. If neither node is present, then
SVN_ERR_WC_PATH_NOT_FOUND will be returned.
- TRANSLATED_SIZE may be SVN_INVALID_FILESIZE, which will be recorded
+ RECORDED_SIZE may be SVN_INVALID_FILESIZE, which will be recorded
as such, implying "unknown size".
- LAST_MOD_TIME may be 0, which will be recorded as such, implying
+ RECORDED_TIME may be 0, which will be recorded as such, implying
"unknown last mod time".
*/
svn_error_t *
svn_wc__db_global_record_fileinfo(svn_wc__db_t *db,
const char *local_abspath,
- svn_filesize_t translated_size,
- apr_time_t last_mod_time,
+ svn_filesize_t recorded_size,
+ apr_time_t recorded_time,
apr_pool_t *scratch_pool);
@@ -2405,6 +2628,10 @@ svn_wc__db_lock_remove(svn_wc__db_t *db,
All returned data will be allocated in RESULT_POOL. All temporary
allocations will be made in SCRATCH_POOL.
+
+ ### Either delete this function and use _base_get_info instead, or
+ ### add a 'revision' output to make a complete repository node location
+ ### and rename to not say 'scan', because it doesn't.
*/
svn_error_t *
svn_wc__db_scan_base_repos(const char **repos_relpath,
@@ -2479,6 +2706,41 @@ svn_wc__db_scan_addition(svn_wc__db_status_t *status,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
+/* Scan the working copy for move information of the node LOCAL_ABSPATH.
+ * If LOCAL_ABSPATH return a SVN_ERR_WC_PATH_UNEXPECTED_STATUS error.
+ *
+ * If not NULL *MOVED_FROM_ABSPATH will be set to the previous location
+ * of LOCAL_ABSPATH, before it or an ancestror was moved.
+ *
+ * If not NULL *OP_ROOT_ABSPATH will be set to the new location of the
+ * path that was actually moved
+ *
+ * If not NULL *OP_ROOT_MOVED_FROM_ABSPATH will be set to the old location
+ * of the path that was actually moved.
+ *
+ * If not NULL *MOVED_FROM_DELETE_ABSPATH will be set to the ancestor of the
+ * moved from location that deletes the original location
+ *
+ * Given a working copy
+ * A/B/C
+ * svn mv A/B D
+ * svn rm A
+ *
+ * You can call this function on D and D/C. When called on D/C all output
+ * MOVED_FROM_ABSPATH will be A/B/C
+ * OP_ROOT_ABSPATH will be D
+ * OP_ROOT_MOVED_FROM_ABSPATH will be A/B
+ * MOVED_FROM_DELETE_ABSPATH will be A
+ */
+svn_error_t *
+svn_wc__db_scan_moved(const char **moved_from_abspath,
+ const char **op_root_abspath,
+ const char **op_root_moved_from_abspath,
+ const char **moved_from_delete_abspath,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
/* Scan upwards for additional information about a deleted node.
@@ -2523,7 +2785,8 @@ svn_wc__db_scan_addition(svn_wc__db_status_t *status,
If the user moves-away B/W/D from the WORKING tree, then behavior is
again dependent upon the origination of B/W. For a plain add, the nodes
- simply move to the destination. For a copy, a deletion is made at B/W/D,
+ simply move to the destination; this means that B/W/D ceases to be a
+ node and so cannot be scanned. For a copy, a deletion is made at B/W/D,
and a new copy (of a subtree of the original source) is made at the
destination. For a move-here, a deletion is made, and a copy is made at
the destination (we do not track multiple moves; the source is moved to
@@ -2533,13 +2796,6 @@ svn_wc__db_scan_addition(svn_wc__db_status_t *status,
There are three further considerations when resolving a deleted node:
- If the BASE B/W/D was moved-away, then BASE_DEL_ABSPATH will specify
- B/W/D as the root of the BASE deletion (not necessarily B/W as an
- implicit delete caused by a replacement; only the closest ancestor is
- reported). The other parameters will operate as normal, based on what
- is happening in the WORKING tree. Also note that ancestors of B/W/D
- may report additional, explicit moved-away status.
-
If the BASE B/W/D was deleted explicitly *and* B/W is a replacement,
then the explicit deletion is subsumed by the implicit deletion that
occurred with the B/W replacement. Thus, BASE_DEL_ABSPATH will point
@@ -2557,13 +2813,18 @@ svn_wc__db_scan_addition(svn_wc__db_status_t *status,
BASE_DEL_ABSPATH will specify the nearest ancestor of the explicit or
implicit deletion (if any) that applies to the BASE tree.
- MOVED_TO_ABSPATH will specify the nearest ancestor that has moved-away,
- if any. If no ancestors have been moved-away, then this is set to NULL.
-
WORK_DEL_ABSPATH will specify the root of a deleted subtree within
the WORKING tree (note there is no concept of layered delete operations
in WORKING, so there is only one deletion root in the ancestry).
+ MOVED_TO_ABSPATH will specify the path where this node was moved to
+ if the node has moved-away.
+
+ If the node was moved-away, MOVED_TO_OP_ROOT_ABSPATH will specify the
+ target path of the root of the move operation. If LOCAL_ABSPATH itself
+ is the source path of the root of the move operation, then
+ MOVED_TO_OP_ROOT_ABSPATH equals MOVED_TO_ABSPATH.
+
All OUT parameters may be set to NULL to indicate a lack of interest in
that piece of information.
@@ -2578,6 +2839,7 @@ svn_error_t *
svn_wc__db_scan_deletion(const char **base_del_abspath,
const char **moved_to_abspath,
const char **work_del_abspath,
+ const char **moved_to_op_root_abspath,
svn_wc__db_t *db,
const char *local_abspath,
apr_pool_t *result_pool,
@@ -2591,6 +2853,16 @@ svn_wc__db_scan_deletion(const char **base_del_abspath,
@{
*/
+/* Installs or updates Sqlite schema statistics for the current (aka latest)
+ working copy schema.
+
+ This function should be called once on initializing the database and after
+ an schema update completes */
+svn_error_t *
+svn_wc__db_install_schema_statistics(svn_sqlite__db_t *sdb,
+ apr_pool_t *scratch_pool);
+
+
/* Create a new wc.db file for LOCAL_DIR_ABSPATH, which is going to be a
working copy for the repository REPOS_ROOT_URL with uuid REPOS_UUID.
Return the raw sqlite handle, repository id and working copy id
@@ -2635,6 +2907,19 @@ svn_wc__db_upgrade_apply_props(svn_sqlite__db_t *sdb,
apr_int64_t wc_id,
apr_pool_t *scratch_pool);
+/* Simply insert (or replace) one row in the EXTERNALS table. */
+svn_error_t *
+svn_wc__db_upgrade_insert_external(svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_node_kind_t kind,
+ const char *parent_abspath,
+ const char *def_local_abspath,
+ const char *repos_relpath,
+ const char *repos_root_url,
+ const char *repos_uuid,
+ svn_revnum_t def_peg_revision,
+ svn_revnum_t def_revision,
+ apr_pool_t *scratch_pool);
/* Get the repository identifier corresponding to REPOS_ROOT_URL from the
database in SDB. The value is returned in *REPOS_ID. All allocations
@@ -2650,6 +2935,27 @@ svn_wc__db_upgrade_get_repos_id(apr_int64_t *repos_id,
const char *repos_root_url,
apr_pool_t *scratch_pool);
+/* Upgrade the metadata concerning the WC at WCROOT_ABSPATH, in DB,
+ * to the SVN_WC__VERSION format.
+ *
+ * This function is used for upgrading wc-ng working copies to a newer
+ * wc-ng format. If a pre-1.7 working copy is found, this function
+ * returns SVN_ERR_WC_UPGRADE_REQUIRED.
+ *
+ * Upgrading subdirectories of a working copy is not supported.
+ * If WCROOT_ABSPATH is not a working copy root SVN_ERR_WC_INVALID_OP_ON_CWD
+ * is returned.
+ *
+ * If BUMPED_FORMAT is not NULL, set *BUMPED_FORMAT to TRUE if the format
+ * was bumped or to FALSE if the wc was already at the resulting format.
+ */
+svn_error_t *
+svn_wc__db_bump_format(int *result_format,
+ svn_boolean_t *bumped_format,
+ svn_wc__db_t *db,
+ const char *wcroot_abspath,
+ apr_pool_t *scratch_pool);
+
/* @} */
@@ -2691,6 +2997,19 @@ svn_wc__db_wq_fetch_next(apr_uint64_t *id,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
+/* Special variant of svn_wc__db_wq_fetch_next(), which in the same transaction
+ also records timestamps and sizes for one or more nodes */
+svn_error_t *
+svn_wc__db_wq_record_and_fetch_next(apr_uint64_t *id,
+ svn_skel_t **work_item,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
+ apr_uint64_t completed_id,
+ apr_hash_t *record_map,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
/* @} */
@@ -2710,6 +3029,15 @@ svn_wc__db_wclock_obtain(svn_wc__db_t *db,
svn_boolean_t steal_lock,
apr_pool_t *scratch_pool);
+/* Set LOCK_ABSPATH to the path of the the directory that owns the
+ lock on LOCAL_ABSPATH, or NULL, if LOCAL_ABSPATH is not locked. */
+svn_error_t*
+svn_wc__db_wclock_find_root(const char **lock_abspath,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
/* Check if somebody has a wclock on LOCAL_ABSPATH */
svn_error_t *
svn_wc__db_wclocked(svn_boolean_t *locked,
@@ -2742,27 +3070,41 @@ svn_wc__db_wclock_owns_lock(svn_boolean_t *own_lock,
*/
/* Removes all references to LOCAL_ABSPATH from DB, while optionally leaving
- tree conflicts and/or a not present node.
+ a not present node.
This operation always recursively removes all nodes at and below
LOCAL_ABSPATH from NODES and ACTUAL.
If NOT_PRESENT_REVISION specifies a valid revision, leave a not_present
- BASE node at local_abspath. (Requires an existing BASE node before removing)
+ BASE node at local_abspath of the specified status and kind.
+ (Requires an existing BASE node before removing)
+
+ If DESTROY_WC is TRUE, this operation *installs* workqueue operations to
+ update the local filesystem after the database operation. If DESTROY_CHANGES
+ is FALSE, modified and unversioned files are left after running this
+ operation (and the WQ). If DESTROY_CHANGES and DESTROY_WC are TRUE,
+ LOCAL_ABSPATH and everything below it will be removed by the WQ.
+
+
+ Note: Unlike many similar functions it is a valid scenario for this
+ function to be called on a wcroot! In this case it will just leave the root
+ record in BASE
*/
svn_error_t *
-svn_wc__db_op_remove_node(svn_wc__db_t *db,
+svn_wc__db_op_remove_node(svn_boolean_t *left_changes,
+ svn_wc__db_t *db,
const char *local_abspath,
+ svn_boolean_t destroy_wc,
+ svn_boolean_t destroy_changes,
svn_revnum_t not_present_revision,
- svn_wc__db_kind_t not_present_kind,
+ svn_wc__db_status_t not_present_status,
+ svn_node_kind_t not_present_kind,
+ const svn_skel_t *conflict,
+ const svn_skel_t *work_items,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
apr_pool_t *scratch_pool);
-/* Remove the WORKING_NODE row of LOCAL_ABSPATH in DB. */
-svn_error_t *
-svn_wc__db_temp_op_remove_working(svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *scratch_pool);
-
/* Sets the depth of LOCAL_ABSPATH in its working copy to DEPTH using DB.
Returns SVN_ERR_WC_PATH_NOT_FOUND if LOCAL_ABSPATH is not a BASE directory
@@ -2854,43 +3196,11 @@ svn_wc__db_temp_op_end_directory_update(svn_wc__db_t *db,
leaving any subtree additions and copies as-is. This allows the
base node tree to be removed. */
svn_error_t *
-svn_wc__db_temp_op_make_copy(svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *scratch_pool);
-
-
-/* Set the conflict marker information on LOCAL_ABSPATH to the specified
- values */
-svn_error_t *
-svn_wc__db_temp_op_set_text_conflict_marker_files(svn_wc__db_t *db,
- const char *local_abspath,
- const char *old_abspath,
- const char *new_abspath,
- const char *wrk_abspath,
- apr_pool_t *scratch_pool);
-
-/* Set the conflict marker information on LOCAL_ABSPATH to the specified
- values */
-svn_error_t *
-svn_wc__db_temp_op_set_property_conflict_marker_file(svn_wc__db_t *db,
- const char *local_abspath,
- const char *prej_abspath,
- apr_pool_t *scratch_pool);
-
-/* Add a new directory in BASE, whether WORKING nodes exist or not. Mark it
- as incomplete and with revision REVISION. If REPOS_RELPATH is not NULL,
- apply REPOS_RELPATH, REPOS_ROOT_URL and REPOS_UUID.
- Perform all temporary allocations in SCRATCH_POOL.
- */
-svn_error_t *
-svn_wc__db_temp_op_set_new_dir_to_incomplete(svn_wc__db_t *db,
- const char *local_abspath,
- const char *repos_relpath,
- const char *repos_root_url,
- const char *repos_uuid,
- svn_revnum_t revision,
- svn_depth_t depth,
- apr_pool_t *scratch_pool);
+svn_wc__db_op_make_copy(svn_wc__db_t *db,
+ const char *local_abspath,
+ const svn_skel_t *conflicts,
+ const svn_skel_t *work_items,
+ apr_pool_t *scratch_pool);
/* Close the wc root LOCAL_ABSPATH and remove any per-directory
handles associated with it. */
@@ -2900,7 +3210,8 @@ svn_wc__db_drop_root(svn_wc__db_t *db,
apr_pool_t *scratch_pool);
/* Return the OP_DEPTH for LOCAL_RELPATH. */
-apr_int64_t svn_wc__db_op_depth_for_upgrade(const char *local_relpath);
+int
+svn_wc__db_op_depth_for_upgrade(const char *local_relpath);
/* Set *HAVE_WORK TRUE if there is a working layer below the top layer and
*HAVE_BASE if there is a base layer. Set *STATUS to the status of the
@@ -2933,7 +3244,7 @@ svn_wc__db_get_not_present_descendants(const apr_array_header_t **descendants,
* Only nodes with op_depth zero and presence 'normal' or 'incomplete'
* are considered, so that added, deleted or excluded nodes do not affect
* the result. If COMMITTED is TRUE, set *MIN_REVISION and *MAX_REVISION
- * to the lowest and highest comitted (i.e. "last changed") revision numbers,
+ * to the lowest and highest committed (i.e. "last changed") revision numbers,
* respectively.
*
* Indicate in *IS_SPARSE_CHECKOUT whether any of the nodes within
@@ -2968,7 +3279,7 @@ svn_wc__db_revision_status(svn_revnum_t *min_revision,
* Only nodes with op_depth zero and presence 'normal' or 'incomplete'
* are considered, so that added, deleted or excluded nodes do not affect
* the result. If COMMITTED is TRUE, set *MIN_REVISION and *MAX_REVISION
- * to the lowest and highest comitted (i.e. "last changed") revision numbers,
+ * to the lowest and highest committed (i.e. "last changed") revision numbers,
* respectively. Use SCRATCH_POOL for temporary allocations.
*
* Either of MIN_REVISION and MAX_REVISION may be passed as NULL if
@@ -2985,19 +3296,6 @@ svn_wc__db_min_max_revisions(svn_revnum_t *min_revision,
svn_boolean_t committed,
apr_pool_t *scratch_pool);
-/* Indicate in *IS_SPARSE_CHECKOUT whether any of the nodes within
- * LOCAL_ABSPATH is sparse, using DB.
- * Use SCRATCH_POOL for temporary allocations.
- *
- * This function provides a subset of the functionality of
- * svn_wc__db_revision_status() and is more efficient if the caller
- * doesn't need all information returned by svn_wc__db_revision_status(). */
-svn_error_t *
-svn_wc__db_is_sparse_checkout(svn_boolean_t *is_sparse_checkout,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *scratch_pool);
-
/* Indicate in *IS_SWITCHED whether any node beneath LOCAL_ABSPATH
* is switched, using DB. Use SCRATCH_POOL for temporary allocations.
*
@@ -3017,19 +3315,19 @@ svn_wc__db_has_switched_subtrees(svn_boolean_t *is_switched,
const char *trail_url,
apr_pool_t *scratch_pool);
-/* Set @a *server_excluded_subtrees to a hash mapping <tt>const char *</tt>
+/* Set @a *excluded_subtrees to a hash mapping <tt>const char *</tt>
* local absolute paths to <tt>const char *</tt> local absolute paths for
- * every path at or under @a local_abspath in @a db which are excluded by
- * the server (e.g. due to authz). If no such paths are found then
+ * every path under @a local_abspath in @a db which are excluded by
+ * the server (e.g. due to authz), or user. If no such paths are found then
* @a *server_excluded_subtrees is set to @c NULL.
* Allocate the hash and all items therein from @a result_pool.
*/
svn_error_t *
-svn_wc__db_get_server_excluded_subtrees(apr_hash_t **server_excluded_subtrees,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
+svn_wc__db_get_excluded_subtrees(apr_hash_t **server_excluded_subtrees,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
/* Indicate in *IS_MODIFIED whether the working copy has local modifications,
* using DB. Use SCRATCH_POOL for temporary allocations.
@@ -3054,6 +3352,104 @@ svn_wc__db_verify(svn_wc__db_t *db,
apr_pool_t *scratch_pool);
+/* Possibly need two structures, one with relpaths and with abspaths?
+ * Only exposed for testing at present. */
+struct svn_wc__db_moved_to_t {
+ const char *local_relpath; /* moved-to destination */
+ int op_depth; /* op-root of source */
+};
+
+/* Set *FINAL_ABSPATH to an array of svn_wc__db_moved_to_t for
+ * LOCAL_ABSPATH after following any and all nested moves.
+ * Only exposed for testing at present. */
+svn_error_t *
+svn_wc__db_follow_moved_to(apr_array_header_t **moved_tos,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Update a moved-away tree conflict victim at VICTIM_ABSPATH with changes
+ * brought in by the update operation which flagged the tree conflict. */
+svn_error_t *
+svn_wc__db_update_moved_away_conflict_victim(svn_wc__db_t *db,
+ const char *victim_abspath,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool);
+
+/* LOCAL_ABSPATH is moved to MOVE_DST_ABSPATH. MOVE_SRC_ROOT_ABSPATH
+ * is the root of the move to MOVE_DST_OP_ROOT_ABSPATH.
+ * MOVE_SRC_OP_ROOT_ABSPATH is the op-root of the move; it's the same
+ * as MOVE_SRC_ROOT_ABSPATH except for moves inside deletes when it is
+ * the op-root of the delete. */
+svn_error_t *
+svn_wc__db_base_moved_to(const char **move_dst_abspath,
+ const char **move_dst_op_root_abspath,
+ const char **move_src_root_abspath,
+ const char **move_src_op_root_abspath,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Recover space from the database file for LOCAL_ABSPATH by running
+ * the "vacuum" command. */
+svn_error_t *
+svn_wc__db_vacuum(svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *scratch_pool);
+
+/* This raises move-edit tree-conflicts on any moves inside the
+ delete-edit conflict on LOCAL_ABSPATH. This is experimental: see
+ comment in resolve_conflict_on_node about combining with another
+ function. */
+svn_error_t *
+svn_wc__db_resolve_delete_raise_moved_away(svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool);
+
+/* Like svn_wc__db_resolve_delete_raise_moved_away this should be
+ combined.
+
+ ### LOCAL_ABSPATH specifies the move origin, but the move origin
+ ### is not necessary unique enough. This function needs an op_root_abspath
+ ### argument to differentiate between different origins.
+
+ ### See move_tests.py: move_many_update_delete for an example case.
+ */
+svn_error_t *
+svn_wc__db_resolve_break_moved_away(svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool);
+
+/* Break moves for all moved-away children of LOCAL_ABSPATH, within
+ * a single transaction.
+ *
+ * ### Like svn_wc__db_resolve_delete_raise_moved_away this should be
+ * combined. */
+svn_error_t *
+svn_wc__db_resolve_break_moved_away_children(svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool);
+
+/* Set *REQUIRED_ABSPATH to the path that should be locked to ensure
+ * that the lock covers all paths affected by resolving the conflicts
+ * in the tree LOCAL_ABSPATH. */
+svn_error_t *
+svn_wc__required_lock_for_resolve(const char **required_abspath,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
/* @} */
diff --git a/subversion/libsvn_wc/wc_db_pristine.c b/subversion/libsvn_wc/wc_db_pristine.c
index 762a661..d9dc8f3 100644
--- a/subversion/libsvn_wc/wc_db_pristine.c
+++ b/subversion/libsvn_wc/wc_db_pristine.c
@@ -25,6 +25,7 @@
#define SVN_WC__I_AM_WC_DB
+#include "svn_pools.h"
#include "svn_dirent_uri.h"
#include "wc.h"
@@ -121,7 +122,10 @@ svn_wc__db_pristine_get_path(const char **pristine_abspath,
scratch_pool));
if (! present)
return svn_error_createf(SVN_ERR_WC_DB_ERROR, NULL,
- _("Pristine text not found"));
+ _("The pristine text with checksum '%s' was "
+ "not found"),
+ svn_checksum_to_cstring_display(sha1_checksum,
+ scratch_pool));
SVN_ERR(get_pristine_fname(pristine_abspath, wcroot->abspath,
sha1_checksum,
@@ -143,43 +147,30 @@ svn_wc__db_pristine_get_future_path(const char **pristine_abspath,
return SVN_NO_ERROR;
}
-/* Data for pristine_read_txn(). */
-typedef struct pristine_read_baton_t
-{
- /* Where to put the result stream. */
- svn_stream_t **contents;
- /* The pristine text's SHA-1 checksum. */
- const svn_checksum_t *sha1_checksum;
- /* The path to the pristine file (within the pristine store). */
- const char *pristine_abspath;
-
- /* Pointer to where to place the size (if requested) */
- svn_filesize_t *size;
-
- /* The pool from which to allocate the result stream. */
- apr_pool_t *result_pool;
-} pristine_read_baton_t;
-
-/* Set (*BATON->contents) to a readable stream from which the pristine text
- * identified by BATON->sha1_checksum can be read from the pristine store of
- * SDB. If that text is not in the pristine store, return an error.
+/* Set *CONTENTS to a readable stream from which the pristine text
+ * identified by SHA1_CHECKSUM and PRISTINE_ABSPATH can be read from the
+ * pristine store of WCROOT. If SIZE is not null, set *SIZE to the size
+ * in bytes of that text. If that text is not in the pristine store,
+ * return an error.
*
* Even if the pristine text is removed from the store while it is being
* read, the stream will remain valid and readable until it is closed.
*
- * Allocate the stream in BATON->result_pool.
+ * Allocate the stream in RESULT_POOL.
*
* This function expects to be executed inside a SQLite txn.
*
* Implements 'notes/wc-ng/pristine-store' section A-3(d).
- * Implements svn_sqlite__transaction_callback_t. */
+ */
static svn_error_t *
-pristine_read_txn(void *baton,
+pristine_read_txn(svn_stream_t **contents,
+ svn_filesize_t *size,
svn_wc__db_wcroot_t *wcroot,
- const char *local_relpath,
+ const svn_checksum_t *sha1_checksum,
+ const char *pristine_abspath,
+ apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- pristine_read_baton_t *b = baton;
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
@@ -187,11 +178,11 @@ pristine_read_txn(void *baton,
* of the file is not sufficient.) */
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_SELECT_PRISTINE_SIZE));
- SVN_ERR(svn_sqlite__bind_checksum(stmt, 1, b->sha1_checksum, scratch_pool));
+ SVN_ERR(svn_sqlite__bind_checksum(stmt, 1, sha1_checksum, scratch_pool));
SVN_ERR(svn_sqlite__step(&have_row, stmt));
- if (b->size)
- *b->size = svn_sqlite__column_int64(stmt, 0);
+ if (size)
+ *size = svn_sqlite__column_int64(stmt, 0);
SVN_ERR(svn_sqlite__reset(stmt));
if (! have_row)
@@ -199,14 +190,14 @@ pristine_read_txn(void *baton,
return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
_("Pristine text '%s' not present"),
svn_checksum_to_cstring_display(
- b->sha1_checksum, scratch_pool));
+ sha1_checksum, scratch_pool));
}
/* Open the file as a readable stream. It will remain readable even when
* deleted from disk; APR guarantees that on Windows as well as Unix. */
- if (b->contents)
- SVN_ERR(svn_stream_open_readonly(b->contents, b->pristine_abspath,
- b->result_pool, scratch_pool));
+ if (contents)
+ SVN_ERR(svn_stream_open_readonly(contents, pristine_abspath,
+ result_pool, scratch_pool));
return SVN_NO_ERROR;
}
@@ -221,7 +212,7 @@ svn_wc__db_pristine_read(svn_stream_t **contents,
{
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
- pristine_read_baton_t b;
+ const char *pristine_abspath;
SVN_ERR_ASSERT(contents != NULL);
SVN_ERR_ASSERT(svn_dirent_is_absolute(wri_abspath));
@@ -240,15 +231,14 @@ svn_wc__db_pristine_read(svn_stream_t **contents,
wri_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- b.contents = contents;
- b.sha1_checksum = sha1_checksum;
- b.size = size;
- b.result_pool = result_pool;
- SVN_ERR(get_pristine_fname(&b.pristine_abspath, wcroot->abspath,
+ SVN_ERR(get_pristine_fname(&pristine_abspath, wcroot->abspath,
sha1_checksum,
scratch_pool, scratch_pool));
- SVN_ERR(svn_wc__db_with_txn(wcroot, local_relpath, pristine_read_txn, &b,
- scratch_pool));
+ SVN_WC__DB_WITH_TXN(
+ pristine_read_txn(contents, size,
+ wcroot, sha1_checksum, pristine_abspath,
+ result_pool, scratch_pool),
+ wcroot);
return SVN_NO_ERROR;
}
@@ -288,20 +278,6 @@ svn_wc__db_pristine_get_tempdir(const char **temp_dir_abspath,
}
-/* Data for pristine_install_txn(). */
-typedef struct pristine_install_baton_t
-{
- /* The path to the source file that is to be moved into place. */
- const char *tempfile_abspath;
- /* The target path for the file (within the pristine store). */
- const char *pristine_abspath;
- /* The pristine text's SHA-1 checksum. */
- const svn_checksum_t *sha1_checksum;
- /* The pristine text's MD-5 checksum. */
- const svn_checksum_t *md5_checksum;
-} pristine_install_baton_t;
-
-
/* Install the pristine text described by BATON into the pristine store of
* SDB. If it is already stored then just delete the new file
* BATON->tempfile_abspath.
@@ -310,13 +286,19 @@ typedef struct pristine_install_baton_t
* acquired a 'RESERVED' lock.
*
* Implements 'notes/wc-ng/pristine-store' section A-3(a).
- * Implements svn_sqlite__transaction_callback_t. */
+ */
static svn_error_t *
-pristine_install_txn(void *baton,
- svn_sqlite__db_t *sdb,
+pristine_install_txn(svn_sqlite__db_t *sdb,
+ /* The path to the source file that is to be moved into place. */
+ const char *tempfile_abspath,
+ /* The target path for the file (within the pristine store). */
+ const char *pristine_abspath,
+ /* The pristine text's SHA-1 checksum. */
+ const svn_checksum_t *sha1_checksum,
+ /* The pristine text's MD-5 checksum. */
+ const svn_checksum_t *md5_checksum,
apr_pool_t *scratch_pool)
{
- pristine_install_baton_t *b = baton;
apr_finfo_t finfo;
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
@@ -325,7 +307,7 @@ pristine_install_txn(void *baton,
/* If this pristine text is already present in the store, just keep it:
* delete the new one and return. */
SVN_ERR(svn_sqlite__get_statement(&stmt, sdb, STMT_SELECT_PRISTINE));
- SVN_ERR(svn_sqlite__bind_checksum(stmt, 1, b->sha1_checksum, scratch_pool));
+ SVN_ERR(svn_sqlite__bind_checksum(stmt, 1, sha1_checksum, scratch_pool));
SVN_ERR(svn_sqlite__step(&have_row, stmt));
SVN_ERR(svn_sqlite__reset(stmt));
if (have_row)
@@ -335,30 +317,30 @@ pristine_install_txn(void *baton,
* ### We could check much more. */
{
apr_finfo_t finfo1, finfo2;
- SVN_ERR(svn_io_stat(&finfo1, b->tempfile_abspath, APR_FINFO_SIZE,
+ SVN_ERR(svn_io_stat(&finfo1, tempfile_abspath, APR_FINFO_SIZE,
scratch_pool));
- SVN_ERR(svn_io_stat(&finfo2, b->pristine_abspath, APR_FINFO_SIZE,
+ SVN_ERR(svn_io_stat(&finfo2, pristine_abspath, APR_FINFO_SIZE,
scratch_pool));
if (finfo1.size != finfo2.size)
{
return svn_error_createf(
SVN_ERR_WC_CORRUPT_TEXT_BASE, NULL,
_("New pristine text '%s' has different size: %ld versus %ld"),
- svn_checksum_to_cstring_display(b->sha1_checksum, scratch_pool),
+ svn_checksum_to_cstring_display(sha1_checksum, scratch_pool),
(long int)finfo1.size, (long int)finfo2.size);
}
}
#endif
/* Remove the temp file: it's already there */
- SVN_ERR(svn_io_remove_file2(b->tempfile_abspath,
+ SVN_ERR(svn_io_remove_file2(tempfile_abspath,
FALSE /* ignore_enoent */, scratch_pool));
return SVN_NO_ERROR;
}
/* Move the file to its target location. (If it is already there, it is
* an orphan file and it doesn't matter if we overwrite it.) */
- err = svn_io_file_rename(b->tempfile_abspath, b->pristine_abspath,
+ err = svn_io_file_rename(tempfile_abspath, pristine_abspath,
scratch_pool);
/* Maybe the directory doesn't exist yet? */
@@ -366,7 +348,7 @@ pristine_install_txn(void *baton,
{
svn_error_t *err2;
- err2 = svn_io_dir_make(svn_dirent_dirname(b->pristine_abspath,
+ err2 = svn_io_dir_make(svn_dirent_dirname(pristine_abspath,
scratch_pool),
APR_OS_DEFAULT, scratch_pool);
@@ -377,19 +359,19 @@ pristine_install_txn(void *baton,
/* We could create a directory: retry install */
svn_error_clear(err);
- SVN_ERR(svn_io_file_rename(b->tempfile_abspath, b->pristine_abspath,
+ SVN_ERR(svn_io_file_rename(tempfile_abspath, pristine_abspath,
scratch_pool));
}
else
SVN_ERR(err);
- SVN_ERR(svn_io_stat(&finfo, b->pristine_abspath, APR_FINFO_SIZE,
+ SVN_ERR(svn_io_stat(&finfo, pristine_abspath, APR_FINFO_SIZE,
scratch_pool));
SVN_ERR(svn_sqlite__get_statement(&stmt, sdb,
STMT_INSERT_PRISTINE));
- SVN_ERR(svn_sqlite__bind_checksum(stmt, 1, b->sha1_checksum, scratch_pool));
- SVN_ERR(svn_sqlite__bind_checksum(stmt, 2, b->md5_checksum, scratch_pool));
+ SVN_ERR(svn_sqlite__bind_checksum(stmt, 1, sha1_checksum, scratch_pool));
+ SVN_ERR(svn_sqlite__bind_checksum(stmt, 2, md5_checksum, scratch_pool));
SVN_ERR(svn_sqlite__bind_int64(stmt, 3, finfo.size));
SVN_ERR(svn_sqlite__insert(NULL, stmt));
@@ -407,7 +389,7 @@ svn_wc__db_pristine_install(svn_wc__db_t *db,
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
const char *wri_abspath;
- struct pristine_install_baton_t b;
+ const char *pristine_abspath;
SVN_ERR_ASSERT(svn_dirent_is_absolute(tempfile_abspath));
SVN_ERR_ASSERT(sha1_checksum != NULL);
@@ -429,19 +411,18 @@ svn_wc__db_pristine_install(svn_wc__db_t *db,
wri_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- b.tempfile_abspath = tempfile_abspath;
- b.sha1_checksum = sha1_checksum;
- b.md5_checksum = md5_checksum;
-
- SVN_ERR(get_pristine_fname(&b.pristine_abspath, wcroot->abspath,
+ SVN_ERR(get_pristine_fname(&pristine_abspath, wcroot->abspath,
sha1_checksum,
scratch_pool, scratch_pool));
/* Ensure the SQL txn has at least a 'RESERVED' lock before we start looking
* at the disk, to ensure no concurrent pristine install/delete txn. */
- SVN_ERR(svn_sqlite__with_immediate_transaction(wcroot->sdb,
- pristine_install_txn, &b,
- scratch_pool));
+ SVN_SQLITE__WITH_IMMEDIATE_TXN(
+ pristine_install_txn(wcroot->sdb,
+ tempfile_abspath, pristine_abspath,
+ sha1_checksum, md5_checksum,
+ scratch_pool),
+ wcroot->sdb);
return SVN_NO_ERROR;
}
@@ -523,6 +504,177 @@ svn_wc__db_pristine_get_sha1(const svn_checksum_t **sha1_checksum,
return svn_error_trace(svn_sqlite__reset(stmt));
}
+/* Handle the moving of a pristine from SRC_WCROOT to DST_WCROOT. The existing
+ pristine in SRC_WCROOT is described by CHECKSUM, MD5_CHECKSUM and SIZE */
+static svn_error_t *
+maybe_transfer_one_pristine(svn_wc__db_wcroot_t *src_wcroot,
+ svn_wc__db_wcroot_t *dst_wcroot,
+ const svn_checksum_t *checksum,
+ const svn_checksum_t *md5_checksum,
+ apr_int64_t size,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
+{
+ const char *pristine_abspath;
+ svn_sqlite__stmt_t *stmt;
+ svn_stream_t *src_stream;
+ svn_stream_t *dst_stream;
+ const char *tmp_abspath;
+ const char *src_abspath;
+ int affected_rows;
+ svn_error_t *err;
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, dst_wcroot->sdb,
+ STMT_INSERT_OR_IGNORE_PRISTINE));
+ SVN_ERR(svn_sqlite__bind_checksum(stmt, 1, checksum, scratch_pool));
+ SVN_ERR(svn_sqlite__bind_checksum(stmt, 2, md5_checksum, scratch_pool));
+ SVN_ERR(svn_sqlite__bind_int64(stmt, 3, size));
+
+ SVN_ERR(svn_sqlite__update(&affected_rows, stmt));
+
+ if (affected_rows == 0)
+ return SVN_NO_ERROR;
+
+ SVN_ERR(svn_stream_open_unique(&dst_stream, &tmp_abspath,
+ pristine_get_tempdir(dst_wcroot,
+ scratch_pool,
+ scratch_pool),
+ svn_io_file_del_on_pool_cleanup,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(get_pristine_fname(&src_abspath, src_wcroot->abspath, checksum,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(svn_stream_open_readonly(&src_stream, src_abspath,
+ scratch_pool, scratch_pool));
+
+ /* ### Should we verify the SHA1 or MD5 here, or is that too expensive? */
+ SVN_ERR(svn_stream_copy3(src_stream, dst_stream,
+ cancel_func, cancel_baton,
+ scratch_pool));
+
+ SVN_ERR(get_pristine_fname(&pristine_abspath, dst_wcroot->abspath, checksum,
+ scratch_pool, scratch_pool));
+
+ /* Move the file to its target location. (If it is already there, it is
+ * an orphan file and it doesn't matter if we overwrite it.) */
+ err = svn_io_file_rename(tmp_abspath, pristine_abspath, scratch_pool);
+
+ /* Maybe the directory doesn't exist yet? */
+ if (err && APR_STATUS_IS_ENOENT(err->apr_err))
+ {
+ svn_error_t *err2;
+
+ err2 = svn_io_dir_make(svn_dirent_dirname(pristine_abspath,
+ scratch_pool),
+ APR_OS_DEFAULT, scratch_pool);
+
+ if (err2)
+ /* Creating directory didn't work: Return all errors */
+ return svn_error_trace(svn_error_compose_create(err, err2));
+ else
+ /* We could create a directory: retry install */
+ svn_error_clear(err);
+
+ SVN_ERR(svn_io_file_rename(tmp_abspath, pristine_abspath, scratch_pool));
+ }
+ else
+ SVN_ERR(err);
+
+ return SVN_NO_ERROR;
+}
+
+/* Transaction implementation of svn_wc__db_pristine_transfer().
+ We have a lock on DST_WCROOT.
+ */
+static svn_error_t *
+pristine_transfer_txn(svn_wc__db_wcroot_t *src_wcroot,
+ svn_wc__db_wcroot_t *dst_wcroot,
+ const char *src_relpath,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t got_row;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, src_wcroot->sdb,
+ STMT_SELECT_COPY_PRISTINES));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", src_wcroot->wc_id, src_relpath));
+
+ /* This obtains an sqlite read lock on src_wcroot */
+ SVN_ERR(svn_sqlite__step(&got_row, stmt));
+
+ while (got_row)
+ {
+ const svn_checksum_t *checksum;
+ const svn_checksum_t *md5_checksum;
+ apr_int64_t size;
+ svn_error_t *err;
+
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(svn_sqlite__column_checksum(&checksum, stmt, 0, iterpool));
+ SVN_ERR(svn_sqlite__column_checksum(&md5_checksum, stmt, 1, iterpool));
+ size = svn_sqlite__column_int64(stmt, 2);
+
+ err = maybe_transfer_one_pristine(src_wcroot, dst_wcroot,
+ checksum, md5_checksum, size,
+ cancel_func, cancel_baton,
+ iterpool);
+
+ if (err)
+ return svn_error_trace(svn_error_compose_create(
+ err,
+ svn_sqlite__reset(stmt)));
+
+ SVN_ERR(svn_sqlite__step(&got_row, stmt));
+ }
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__db_pristine_transfer(svn_wc__db_t *db,
+ const char *src_local_abspath,
+ const char *dst_wri_abspath,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_wcroot_t *src_wcroot, *dst_wcroot;
+ const char *src_relpath, *dst_relpath;
+
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&src_wcroot, &src_relpath,
+ db, src_local_abspath,
+ scratch_pool, scratch_pool));
+ VERIFY_USABLE_WCROOT(src_wcroot);
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&dst_wcroot, &dst_relpath,
+ db, dst_wri_abspath,
+ scratch_pool, scratch_pool));
+ VERIFY_USABLE_WCROOT(dst_wcroot);
+
+ if (src_wcroot == dst_wcroot
+ || src_wcroot->sdb == dst_wcroot->sdb)
+ {
+ return SVN_NO_ERROR; /* Nothing to transfer */
+ }
+
+ SVN_WC__DB_WITH_TXN(
+ pristine_transfer_txn(src_wcroot, dst_wcroot, src_relpath,
+ cancel_func, cancel_baton, scratch_pool),
+ dst_wcroot);
+
+ return SVN_NO_ERROR;
+}
+
+
+
/* Remove the file at FILE_ABSPATH in such a way that we could re-create a
* new file of the same name at any time thereafter.
@@ -560,36 +712,27 @@ remove_file(const char *file_abspath,
return SVN_NO_ERROR;
}
-/* Data for pristine_remove_if_unreferenced_txn(). */
-typedef struct pristine_remove_baton_t
-{
- svn_wc__db_wcroot_t *wcroot;
- /* The pristine text's SHA-1 checksum. */
- const svn_checksum_t *sha1_checksum;
- /* The path to the pristine file (within the pristine store). */
- const char *pristine_abspath;
-} pristine_remove_baton_t;
-
-/* If the pristine text referenced by BATON in SDB has a reference count of
+/* If the pristine text referenced by SHA1_CHECKSUM in WCROOT/SDB, whose path
+ * within the pristine store is PRISTINE_ABSPATH, has a reference count of
* zero, delete it (both the database row and the disk file).
*
* This function expects to be executed inside a SQLite txn that has already
* acquired a 'RESERVED' lock.
- *
- * Implements svn_sqlite__transaction_callback_t. */
+ */
static svn_error_t *
-pristine_remove_if_unreferenced_txn(void *baton,
- svn_sqlite__db_t *sdb,
+pristine_remove_if_unreferenced_txn(svn_sqlite__db_t *sdb,
+ svn_wc__db_wcroot_t *wcroot,
+ const svn_checksum_t *sha1_checksum,
+ const char *pristine_abspath,
apr_pool_t *scratch_pool)
{
- pristine_remove_baton_t *b = baton;
svn_sqlite__stmt_t *stmt;
int affected_rows;
/* Remove the DB row, if refcount is 0. */
SVN_ERR(svn_sqlite__get_statement(&stmt, sdb,
STMT_DELETE_PRISTINE_IF_UNREFERENCED));
- SVN_ERR(svn_sqlite__bind_checksum(stmt, 1, b->sha1_checksum, scratch_pool));
+ SVN_ERR(svn_sqlite__bind_checksum(stmt, 1, sha1_checksum, scratch_pool));
SVN_ERR(svn_sqlite__update(&affected_rows, stmt));
/* If we removed the DB row, then remove the file. */
@@ -604,7 +747,7 @@ pristine_remove_if_unreferenced_txn(void *baton,
svn_boolean_t ignore_enoent = TRUE;
#endif
- SVN_ERR(remove_file(b->pristine_abspath, b->wcroot, ignore_enoent,
+ SVN_ERR(remove_file(pristine_abspath, wcroot, ignore_enoent,
scratch_pool));
}
@@ -621,17 +764,17 @@ pristine_remove_if_unreferenced(svn_wc__db_wcroot_t *wcroot,
const svn_checksum_t *sha1_checksum,
apr_pool_t *scratch_pool)
{
- pristine_remove_baton_t b;
+ const char *pristine_abspath;
- b.wcroot = wcroot;
- b.sha1_checksum = sha1_checksum;
- SVN_ERR(get_pristine_fname(&b.pristine_abspath, wcroot->abspath,
+ SVN_ERR(get_pristine_fname(&pristine_abspath, wcroot->abspath,
sha1_checksum, scratch_pool, scratch_pool));
/* Ensure the SQL txn has at least a 'RESERVED' lock before we start looking
* at the disk, to ensure no concurrent pristine install/delete txn. */
- SVN_ERR(svn_sqlite__with_immediate_transaction(
- wcroot->sdb, pristine_remove_if_unreferenced_txn, &b, scratch_pool));
+ SVN_SQLITE__WITH_IMMEDIATE_TXN(
+ pristine_remove_if_unreferenced_txn(
+ wcroot->sdb, wcroot, sha1_checksum, pristine_abspath, scratch_pool),
+ wcroot->sdb);
return SVN_NO_ERROR;
}
@@ -685,11 +828,12 @@ pristine_cleanup_wcroot(svn_wc__db_wcroot_t *wcroot,
apr_pool_t *scratch_pool)
{
svn_sqlite__stmt_t *stmt;
+ svn_error_t *err = NULL;
/* Find each unreferenced pristine in the DB and remove it. */
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_SELECT_UNREFERENCED_PRISTINES));
- while (1)
+ while (! err)
{
svn_boolean_t have_row;
const svn_checksum_t *sha1_checksum;
@@ -700,15 +844,14 @@ pristine_cleanup_wcroot(svn_wc__db_wcroot_t *wcroot,
SVN_ERR(svn_sqlite__column_checksum(&sha1_checksum, stmt, 0,
scratch_pool));
- SVN_ERR(pristine_remove_if_unreferenced(wcroot, sha1_checksum,
- scratch_pool));
+ err = pristine_remove_if_unreferenced(wcroot, sha1_checksum,
+ scratch_pool);
}
- SVN_ERR(svn_sqlite__reset(stmt));
- return SVN_NO_ERROR;
+ return svn_error_trace(
+ svn_error_compose_create(err, svn_sqlite__reset(stmt)));
}
-
svn_error_t *
svn_wc__db_pristine_cleanup(svn_wc__db_t *db,
const char *wri_abspath,
@@ -741,46 +884,42 @@ svn_wc__db_pristine_check(svn_boolean_t *present,
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
- SVN_ERR_ASSERT(present != NULL);
SVN_ERR_ASSERT(svn_dirent_is_absolute(wri_abspath));
SVN_ERR_ASSERT(sha1_checksum != NULL);
- /* ### Transitional: accept MD-5 and look up the SHA-1. Return an error
- * if the pristine text is not in the store. */
+
if (sha1_checksum->kind != svn_checksum_sha1)
- SVN_ERR(svn_wc__db_pristine_get_sha1(&sha1_checksum, db, wri_abspath,
- sha1_checksum,
- scratch_pool, scratch_pool));
- SVN_ERR_ASSERT(sha1_checksum->kind == svn_checksum_sha1);
+ {
+ *present = FALSE;
+ return SVN_NO_ERROR;
+ }
SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
wri_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
+ /* A filestat is much cheaper than a sqlite transaction especially on NFS,
+ so first check if there is a pristine file and then if we are allowed
+ to use it. */
+ {
+ const char *pristine_abspath;
+ svn_node_kind_t kind_on_disk;
+
+ SVN_ERR(get_pristine_fname(&pristine_abspath, wcroot->abspath,
+ sha1_checksum, scratch_pool, scratch_pool));
+ SVN_ERR(svn_io_check_path(pristine_abspath, &kind_on_disk, scratch_pool));
+ if (kind_on_disk != svn_node_file)
+ {
+ *present = FALSE;
+ return SVN_NO_ERROR;
+ }
+ }
+
/* Check that there is an entry in the PRISTINE table. */
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb, STMT_SELECT_PRISTINE));
SVN_ERR(svn_sqlite__bind_checksum(stmt, 1, sha1_checksum, scratch_pool));
SVN_ERR(svn_sqlite__step(&have_row, stmt));
SVN_ERR(svn_sqlite__reset(stmt));
-#ifdef SVN_DEBUG
- /* Check that the pristine text file exists iff the DB says it does. */
- if (have_row)
- {
- const char *pristine_abspath;
- svn_node_kind_t kind_on_disk;
- SVN_ERR(get_pristine_fname(&pristine_abspath, wcroot->abspath,
- sha1_checksum, scratch_pool, scratch_pool));
- SVN_ERR(svn_io_check_path(pristine_abspath, &kind_on_disk, scratch_pool));
-
- if (kind_on_disk != svn_node_file)
- return svn_error_createf(SVN_ERR_WC_DB_ERROR, svn_sqlite__reset(stmt),
- _("The pristine text with checksum '%s' was "
- "found in the DB but not on disk"),
- svn_checksum_to_cstring_display(sha1_checksum,
- scratch_pool));
- }
-#endif
-
*present = have_row;
return SVN_NO_ERROR;
}
diff --git a/subversion/libsvn_wc/wc_db_private.h b/subversion/libsvn_wc/wc_db_private.h
index 5a9b624..a4bf98f 100644
--- a/subversion/libsvn_wc/wc_db_private.h
+++ b/subversion/libsvn_wc/wc_db_private.h
@@ -36,15 +36,18 @@
struct svn_wc__db_t {
/* We need the config whenever we run into a new WC directory, in order
to figure out where we should look for the corresponding datastore. */
- const svn_config_t *config;
+ svn_config_t *config;
- /* Should we attempt to automatically upgrade the database when it is
+ /* Should we fail with SVN_ERR_WC_UPGRADE_REQUIRED when it is
opened, and found to be not-current? */
- svn_boolean_t auto_upgrade;
+ svn_boolean_t verify_format;
/* Should we ensure the WORK_QUEUE is empty when a WCROOT is opened? */
svn_boolean_t enforce_empty_wq;
+ /* Should we open Sqlite databases EXCLUSIVE */
+ svn_boolean_t exclusive;
+
/* Map a given working copy directory to its relevant data.
const char *local_abspath -> svn_wc__db_wcroot_t *wcroot */
apr_hash_t *dir_data;
@@ -55,7 +58,6 @@ struct svn_wc__db_t {
{
svn_stringbuf_t *abspath;
svn_node_kind_t kind;
- svn_boolean_t is_symlink;
} parse_cache;
/* As we grow the state of this DB, allocate that state here. */
@@ -97,7 +99,7 @@ typedef struct svn_wc__db_wcroot_t {
Typically just one or two locks maximum. */
apr_array_header_t *owned_locks;
- /* Map a working copy diretory to a cached adm_access baton.
+ /* Map a working copy directory to a cached adm_access baton.
const char *local_abspath -> svn_wc_adm_access_t *adm_access */
apr_hash_t *access_cache;
@@ -119,7 +121,7 @@ svn_wc__db_pdh_create_wcroot(svn_wc__db_wcroot_t **wcroot,
svn_sqlite__db_t *sdb,
apr_int64_t wc_id,
int format,
- svn_boolean_t auto_upgrade,
+ svn_boolean_t verify_format,
svn_boolean_t enforce_empty_wq,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
@@ -149,6 +151,37 @@ svn_wc__db_wcroot_parse_local_abspath(svn_wc__db_wcroot_t **wcroot,
#define VERIFY_USABLE_WCROOT(wcroot) SVN_ERR_ASSERT( \
(wcroot) != NULL && (wcroot)->format == SVN_WC__VERSION)
+/* Check if the WCROOT is usable for light db operations such as path
+ calculations */
+#define CHECK_MINIMAL_WCROOT(wcroot, abspath, scratch_pool) \
+ do \
+ { \
+ if (wcroot == NULL) \
+ return svn_error_createf(SVN_ERR_WC_NOT_WORKING_COPY, NULL, \
+ _("The node '%s' is not in a working copy."), \
+ svn_dirent_local_style(wri_abspath, \
+ scratch_pool)); \
+ } \
+ while (0)
+
+/* Calculates the depth of the relpath below "" */
+APR_INLINE static int
+relpath_depth(const char *relpath)
+{
+ int n = 1;
+ if (*relpath == '\0')
+ return 0;
+
+ do
+ {
+ if (*relpath == '/')
+ n++;
+ }
+ while (*(++relpath));
+
+ return n;
+}
+
/* */
svn_error_t *
@@ -171,6 +204,7 @@ svn_wc__db_util_open_db(svn_sqlite__db_t **sdb,
const char *dir_abspath,
const char *sdb_fname,
svn_sqlite__mode_t smode,
+ svn_boolean_t exclusive,
const char *const *my_statements,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
@@ -179,7 +213,7 @@ svn_wc__db_util_open_db(svn_sqlite__db_t **sdb,
DB+LOCAL_ABSPATH, and outputting repos ids instead of URL+UUID. */
svn_error_t *
svn_wc__db_read_info_internal(svn_wc__db_status_t *status,
- svn_wc__db_kind_t *kind,
+ svn_node_kind_t *kind,
svn_revnum_t *revision,
const char **repos_relpath,
apr_int64_t *repos_id,
@@ -208,6 +242,91 @@ svn_wc__db_read_info_internal(svn_wc__db_status_t *status,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
+/* Like svn_wc__db_base_get_info(), but taking WCROOT+LOCAL_RELPATH instead of
+ DB+LOCAL_ABSPATH and outputting REPOS_ID instead of URL+UUID. */
+svn_error_t *
+svn_wc__db_base_get_info_internal(svn_wc__db_status_t *status,
+ svn_node_kind_t *kind,
+ svn_revnum_t *revision,
+ const char **repos_relpath,
+ apr_int64_t *repos_id,
+ svn_revnum_t *changed_rev,
+ apr_time_t *changed_date,
+ const char **changed_author,
+ svn_depth_t *depth,
+ const svn_checksum_t **checksum,
+ const char **target,
+ svn_wc__db_lock_t **lock,
+ svn_boolean_t *had_props,
+ apr_hash_t **props,
+ svn_boolean_t *update_root,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Similar to svn_wc__db_base_get_info(), but taking WCROOT+LOCAL_RELPATH
+ * instead of DB+LOCAL_ABSPATH, an explicit op-depth of the node to get
+ * information about, and outputting REPOS_ID instead of URL+UUID, and
+ * without the LOCK or UPDATE_ROOT outputs.
+ *
+ * OR
+ *
+ * Similar to svn_wc__db_base_get_info_internal(), but taking an explicit
+ * op-depth OP_DEPTH of the node to get information about, and without the
+ * LOCK or UPDATE_ROOT outputs.
+ *
+ * ### [JAF] TODO: Harmonize svn_wc__db_base_get_info[_internal] with
+ * svn_wc__db_depth_get_info -- common API, common implementation.
+ */
+svn_error_t *
+svn_wc__db_depth_get_info(svn_wc__db_status_t *status,
+ svn_node_kind_t *kind,
+ svn_revnum_t *revision,
+ const char **repos_relpath,
+ apr_int64_t *repos_id,
+ svn_revnum_t *changed_rev,
+ apr_time_t *changed_date,
+ const char **changed_author,
+ svn_depth_t *depth,
+ const svn_checksum_t **checksum,
+ const char **target,
+ svn_boolean_t *had_props,
+ apr_hash_t **props,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ int op_depth,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Look up REPOS_ID in SDB and set *REPOS_ROOT_URL and/or *REPOS_UUID to
+ its root URL and UUID respectively. If REPOS_ID is INVALID_REPOS_ID,
+ use NULL for both URL and UUID. Either or both output parameters may be
+ NULL if not wanted. */
+svn_error_t *
+svn_wc__db_fetch_repos_info(const char **repos_root_url,
+ const char **repos_uuid,
+ svn_sqlite__db_t *sdb,
+ apr_int64_t repos_id,
+ apr_pool_t *result_pool);
+
+/* Like svn_wc__db_read_conflict(), but with WCROOT+LOCAL_RELPATH instead of
+ DB+LOCAL_ABSPATH, and outputting relpaths instead of abspaths. */
+svn_error_t *
+svn_wc__db_read_conflict_internal(svn_skel_t **conflict,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Like svn_wc__db_op_mark_conflict(), but with WCROOT+LOCAL_RELPATH instead of
+ DB+LOCAL_ABSPATH. */
+svn_error_t *
+svn_wc__db_mark_conflict_internal(svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ const svn_skel_t *conflict_skel,
+ apr_pool_t *scratch_pool);
+
/* Transaction handling */
@@ -228,5 +347,127 @@ svn_wc__db_with_txn(svn_wc__db_wcroot_t *wcroot,
void *cb_baton,
apr_pool_t *scratch_pool);
+/* Evaluate the expression EXPR within a transaction.
+ *
+ * Begin a transaction in WCROOT's DB; evaluate the expression EXPR, which would
+ * typically be a function call that does some work in DB; finally commit
+ * the transaction if EXPR evaluated to SVN_NO_ERROR, otherwise roll back
+ * the transaction.
+ */
+#define SVN_WC__DB_WITH_TXN(expr, wcroot) \
+ SVN_SQLITE__WITH_LOCK(expr, (wcroot)->sdb)
+
+
+/* Evaluate the expressions EXPR1..EXPR4 within a transaction, returning the
+ * first error if an error occurs.
+ *
+ * Begin a transaction in WCROOT's DB; evaluate the expressions, which would
+ * typically be function calls that do some work in DB; finally commit
+ * the transaction if EXPR evaluated to SVN_NO_ERROR, otherwise roll back
+ * the transaction.
+ */
+#define SVN_WC__DB_WITH_TXN4(expr1, expr2, expr3, expr4, wcroot) \
+ SVN_SQLITE__WITH_LOCK4(expr1, expr2, expr3, expr4, (wcroot)->sdb)
+
+
+/* Return CHILDREN mapping const char * names to svn_node_kind_t * for the
+ children of LOCAL_RELPATH at OP_DEPTH. */
+svn_error_t *
+svn_wc__db_get_children_op_depth(apr_hash_t **children,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ int op_depth,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
+/* Extend any delete of the parent of LOCAL_RELPATH to LOCAL_RELPATH.
+
+ ### What about KIND and OP_DEPTH? KIND ought to be redundant; I'm
+ discussing on dev@ whether we can let that be null for presence
+ == base-deleted. OP_DEPTH is the op-depth of what, and why?
+ It is used to select the lowest working node higher than OP_DEPTH,
+ so, in terms of the API, OP_DEPTH means ...?
+
+ Given a wc:
+
+ 0 1 2 3 4
+ normal
+ A normal
+ A/B normal normal
+ A/B/C not-pres normal
+ A/B/C/D normal
+
+ That is checkout, delete A/B, copy a replacement A/B, delete copied
+ child A/B/C, add replacement A/B/C, add A/B/C/D.
+
+ Now an update that adds base nodes for A/B/C, A/B/C/D and A/B/C/D/E
+ must extend the A/B deletion:
+
+ 0 1 2 3 4
+ normal
+ A normal
+ A/B normal normal
+ A/B/C normal not-pres normal
+ A/B/C/D normal base-del normal
+ A/B/C/D/E normal base-del
+
+ When adding a node if the parent has a higher working node then the
+ parent node is deleted (or replaced) and the delete must be extended
+ to cover new node.
+
+ In the example above A/B/C/D and A/B/C/D/E are the nodes that get
+ the extended delete, A/B/C is already deleted.
+ */
+svn_error_t *
+svn_wc__db_extend_parent_delete(svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ svn_node_kind_t kind,
+ int op_depth,
+ apr_pool_t *scratch_pool);
+
+svn_error_t *
+svn_wc__db_retract_parent_delete(svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ int op_depth,
+ apr_pool_t *scratch_pool);
+
+svn_error_t *
+svn_wc__db_op_depth_moved_to(const char **move_dst_relpath,
+ const char **move_dst_op_root_relpath,
+ const char **move_src_root_relpath,
+ const char **move_src_op_root_relpath,
+ int op_depth,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Do a post-drive revision bump for the moved-away destination for
+ any move sources under LOCAL_RELPATH. This is called from within
+ the revision bump transaction after the tree at LOCAL_RELPATH has
+ been bumped. */
+svn_error_t *
+svn_wc__db_bump_moved_away(svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ svn_depth_t depth,
+ svn_wc__db_t *db,
+ apr_pool_t *scratch_pool);
+
+/* Unbreak the move from LOCAL_RELPATH on op-depth in WCROOT, by making
+ the destination a normal copy */
+svn_error_t *
+svn_wc__db_resolve_break_moved_away_internal(svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ int op_depth,
+ apr_pool_t *scratch_pool);
+
+svn_error_t *
+svn_wc__db_update_move_list_notify(svn_wc__db_wcroot_t *wcroot,
+ svn_revnum_t old_revision,
+ svn_revnum_t new_revision,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool);
#endif /* WC_DB_PRIVATE_H */
diff --git a/subversion/libsvn_wc/wc_db_update_move.c b/subversion/libsvn_wc/wc_db_update_move.c
new file mode 100644
index 0000000..7f4f853
--- /dev/null
+++ b/subversion/libsvn_wc/wc_db_update_move.c
@@ -0,0 +1,2648 @@
+/*
+ * wc_db_update_move.c : updating moves during tree-conflict resolution
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+/* This file implements an editor and an edit driver which are used
+ * to resolve an "incoming edit, local move-away" tree conflict resulting
+ * from an update (or switch).
+ *
+ * Our goal is to be able to resolve this conflict such that the end
+ * result is just the same as if the user had run the update *before*
+ * the local move.
+ *
+ * When an update (or switch) produces incoming changes for a locally
+ * moved-away subtree, it updates the base nodes of the moved-away tree
+ * and flags a tree-conflict on the moved-away root node.
+ * This editor transfers these changes from the moved-away part of the
+ * working copy to the corresponding moved-here part of the working copy.
+ *
+ * Both the driver and receiver components of the editor are implemented
+ * in this file.
+ *
+ * The driver sees two NODES trees: the move source tree and the move
+ * destination tree. When the move is initially made these trees are
+ * equivalent, the destination is a copy of the source. The source is
+ * a single-op-depth, single-revision, deleted layer [1] and the
+ * destination has an equivalent single-op-depth, single-revision
+ * layer. The destination may have additional higher op-depths
+ * representing adds, deletes, moves within the move destination. [2]
+ *
+ * After the intial move an update has modified the NODES in the move
+ * source and may have introduced a tree-conflict since the source and
+ * destination trees are no longer equivalent. The source is a
+ * different revision and may have text, property and tree changes
+ * compared to the destination. The driver will compare the two NODES
+ * trees and drive an editor to change the destination tree so that it
+ * once again matches the source tree. Changes made to the
+ * destination NODES tree to achieve this match will be merged into
+ * the working files/directories.
+ *
+ * The whole drive occurs as one single wc.db transaction. At the end
+ * of the transaction the destination NODES table should have a layer
+ * that is equivalent to the source NODES layer, there should be
+ * workqueue items to make any required changes to working
+ * files/directories in the move destination, and there should be
+ * tree-conflicts in the move destination where it was not possible to
+ * update the working files/directories.
+ *
+ * [1] The move source tree is single-revision because we currently do
+ * not allow a mixed-rev move, and therefore it is single op-depth
+ * regardless whether it is a base layer or a nested move.
+ *
+ * [2] The source tree also may have additional higher op-depths,
+ * representing a replacement, but this editor only reads from the
+ * single-op-depth layer of it, and makes no changes of any kind
+ * within the source tree.
+ */
+
+#define SVN_WC__I_AM_WC_DB
+
+#include <assert.h>
+
+#include "svn_checksum.h"
+#include "svn_dirent_uri.h"
+#include "svn_error.h"
+#include "svn_hash.h"
+#include "svn_wc.h"
+#include "svn_props.h"
+#include "svn_pools.h"
+#include "svn_sorts.h"
+
+#include "private/svn_skel.h"
+#include "private/svn_sqlite.h"
+#include "private/svn_wc_private.h"
+#include "private/svn_editor.h"
+
+#include "wc.h"
+#include "props.h"
+#include "wc_db_private.h"
+#include "wc-queries.h"
+#include "conflicts.h"
+#include "workqueue.h"
+#include "token-map.h"
+
+/*
+ * Receiver code.
+ *
+ * The receiver is an editor that, when driven with a certain change, will
+ * merge the edits into the working/actual state of the move destination
+ * at MOVE_ROOT_DST_RELPATH (in struct tc_editor_baton), perhaps raising
+ * conflicts if necessary.
+ *
+ * The receiver should not need to refer directly to the move source, as
+ * the driver should provide all relevant information about the change to
+ * be made at the move destination.
+ */
+
+struct tc_editor_baton {
+ svn_wc__db_t *db;
+ svn_wc__db_wcroot_t *wcroot;
+ const char *move_root_dst_relpath;
+
+ /* The most recent conflict raised during this drive. We rely on the
+ non-Ev2, depth-first, drive for this to make sense. */
+ const char *conflict_root_relpath;
+
+ svn_wc_operation_t operation;
+ svn_wc_conflict_version_t *old_version;
+ svn_wc_conflict_version_t *new_version;
+ apr_pool_t *result_pool; /* For things that live as long as the baton. */
+};
+
+/*
+ * Notifications are delayed until the entire update-move transaction
+ * completes. These functions provide the necessary support by storing
+ * notification information in a temporary db table (the "update_move_list")
+ * and spooling notifications out of that table after the transaction.
+ */
+
+/* Add an entry to the notification list. */
+static svn_error_t *
+update_move_list_add(svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ svn_wc_notify_action_t action,
+ svn_node_kind_t kind,
+ svn_wc_notify_state_t content_state,
+ svn_wc_notify_state_t prop_state)
+
+{
+ svn_sqlite__stmt_t *stmt;
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_INSERT_UPDATE_MOVE_LIST));
+ SVN_ERR(svn_sqlite__bindf(stmt, "sdddd", local_relpath,
+ action, kind, content_state, prop_state));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+
+ return SVN_NO_ERROR;
+}
+
+/* Send all notifications stored in the notification list, and then
+ * remove the temporary database table. */
+svn_error_t *
+svn_wc__db_update_move_list_notify(svn_wc__db_wcroot_t *wcroot,
+ svn_revnum_t old_revision,
+ svn_revnum_t new_revision,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt;
+
+ if (notify_func)
+ {
+ apr_pool_t *iterpool;
+ svn_boolean_t have_row;
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_UPDATE_MOVE_LIST));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+
+ iterpool = svn_pool_create(scratch_pool);
+ while (have_row)
+ {
+ const char *local_relpath;
+ svn_wc_notify_action_t action;
+ svn_wc_notify_t *notify;
+
+ svn_pool_clear(iterpool);
+
+ local_relpath = svn_sqlite__column_text(stmt, 0, NULL);
+ action = svn_sqlite__column_int(stmt, 1);
+ notify = svn_wc_create_notify(svn_dirent_join(wcroot->abspath,
+ local_relpath,
+ iterpool),
+ action, iterpool);
+ notify->kind = svn_sqlite__column_int(stmt, 2);
+ notify->content_state = svn_sqlite__column_int(stmt, 3);
+ notify->prop_state = svn_sqlite__column_int(stmt, 4);
+ notify->old_revision = old_revision;
+ notify->revision = new_revision;
+ notify_func(notify_baton, notify, scratch_pool);
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ }
+ svn_pool_destroy(iterpool);
+ SVN_ERR(svn_sqlite__reset(stmt));
+ }
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_FINALIZE_UPDATE_MOVE));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+
+ return SVN_NO_ERROR;
+}
+
+/* Mark a tree-conflict on LOCAL_RELPATH if such a tree-conflict does
+ not already exist. */
+static svn_error_t *
+mark_tree_conflict(const char *local_relpath,
+ svn_wc__db_wcroot_t *wcroot,
+ svn_wc__db_t *db,
+ const svn_wc_conflict_version_t *old_version,
+ const svn_wc_conflict_version_t *new_version,
+ const char *move_root_dst_relpath,
+ svn_wc_operation_t operation,
+ svn_node_kind_t old_kind,
+ svn_node_kind_t new_kind,
+ const char *old_repos_relpath,
+ svn_wc_conflict_reason_t reason,
+ svn_wc_conflict_action_t action,
+ const char *move_src_op_root_relpath,
+ apr_pool_t *scratch_pool)
+{
+ svn_error_t *err;
+ svn_skel_t *conflict;
+ svn_wc_conflict_version_t *conflict_old_version, *conflict_new_version;
+ const char *move_src_op_root_abspath
+ = move_src_op_root_relpath
+ ? svn_dirent_join(wcroot->abspath,
+ move_src_op_root_relpath, scratch_pool)
+ : NULL;
+ const char *old_repos_relpath_part
+ = old_repos_relpath
+ ? svn_relpath_skip_ancestor(old_version->path_in_repos,
+ old_repos_relpath)
+ : NULL;
+ const char *new_repos_relpath
+ = old_repos_relpath_part
+ ? svn_relpath_join(new_version->path_in_repos, old_repos_relpath_part,
+ scratch_pool)
+ : NULL;
+
+ if (!new_repos_relpath)
+ new_repos_relpath
+ = svn_relpath_join(new_version->path_in_repos,
+ svn_relpath_skip_ancestor(move_root_dst_relpath,
+ local_relpath),
+ scratch_pool);
+
+ err = svn_wc__db_read_conflict_internal(&conflict, wcroot, local_relpath,
+ scratch_pool, scratch_pool);
+ if (err && err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND)
+ return svn_error_trace(err);
+ else if (err)
+ {
+ svn_error_clear(err);
+ conflict = NULL;
+ }
+
+ if (conflict)
+ {
+ svn_wc_operation_t conflict_operation;
+ svn_boolean_t tree_conflicted;
+
+ SVN_ERR(svn_wc__conflict_read_info(&conflict_operation, NULL, NULL, NULL,
+ &tree_conflicted,
+ db, wcroot->abspath, conflict,
+ scratch_pool, scratch_pool));
+
+ if (conflict_operation != svn_wc_operation_update
+ && conflict_operation != svn_wc_operation_switch)
+ return svn_error_createf(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE, NULL,
+ _("'%s' already in conflict"),
+ svn_dirent_local_style(local_relpath,
+ scratch_pool));
+
+ if (tree_conflicted)
+ {
+ svn_wc_conflict_reason_t existing_reason;
+ svn_wc_conflict_action_t existing_action;
+ const char *existing_abspath;
+
+ SVN_ERR(svn_wc__conflict_read_tree_conflict(&existing_reason,
+ &existing_action,
+ &existing_abspath,
+ db, wcroot->abspath,
+ conflict,
+ scratch_pool,
+ scratch_pool));
+ if (reason != existing_reason
+ || action != existing_action
+ || (reason == svn_wc_conflict_reason_moved_away
+ && strcmp(move_src_op_root_relpath,
+ svn_dirent_skip_ancestor(wcroot->abspath,
+ existing_abspath))))
+ return svn_error_createf(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE, NULL,
+ _("'%s' already in conflict"),
+ svn_dirent_local_style(local_relpath,
+ scratch_pool));
+
+ /* Already a suitable tree-conflict. */
+ return SVN_NO_ERROR;
+ }
+ }
+ else
+ conflict = svn_wc__conflict_skel_create(scratch_pool);
+
+ SVN_ERR(svn_wc__conflict_skel_add_tree_conflict(
+ conflict, db,
+ svn_dirent_join(wcroot->abspath, local_relpath,
+ scratch_pool),
+ reason,
+ action,
+ move_src_op_root_abspath,
+ scratch_pool,
+ scratch_pool));
+
+ if (reason != svn_wc_conflict_reason_unversioned
+ && old_repos_relpath != NULL /* no local additions */)
+ {
+ conflict_old_version = svn_wc_conflict_version_create2(
+ old_version->repos_url, old_version->repos_uuid,
+ old_repos_relpath, old_version->peg_rev,
+ old_kind, scratch_pool);
+ }
+ else
+ conflict_old_version = NULL;
+
+ conflict_new_version = svn_wc_conflict_version_create2(
+ new_version->repos_url, new_version->repos_uuid,
+ new_repos_relpath, new_version->peg_rev,
+ new_kind, scratch_pool);
+
+ if (operation == svn_wc_operation_update)
+ {
+ SVN_ERR(svn_wc__conflict_skel_set_op_update(
+ conflict, conflict_old_version, conflict_new_version,
+ scratch_pool, scratch_pool));
+ }
+ else
+ {
+ assert(operation == svn_wc_operation_switch);
+ SVN_ERR(svn_wc__conflict_skel_set_op_switch(
+ conflict, conflict_old_version, conflict_new_version,
+ scratch_pool, scratch_pool));
+ }
+
+ SVN_ERR(svn_wc__db_mark_conflict_internal(wcroot, local_relpath,
+ conflict, scratch_pool));
+
+ SVN_ERR(update_move_list_add(wcroot, local_relpath,
+ svn_wc_notify_tree_conflict,
+ new_kind,
+ svn_wc_notify_state_inapplicable,
+ svn_wc_notify_state_inapplicable));
+ return SVN_NO_ERROR;
+}
+
+/* If LOCAL_RELPATH is a child of the most recently raised
+ tree-conflict or is shadowed then set *IS_CONFLICTED to TRUE and
+ raise a tree-conflict on the root of the obstruction if such a
+ tree-conflict does not already exist. KIND is the kind of the
+ incoming LOCAL_RELPATH. This relies on the non-Ev2, depth-first,
+ drive. */
+static svn_error_t *
+check_tree_conflict(svn_boolean_t *is_conflicted,
+ struct tc_editor_baton *b,
+ const char *local_relpath,
+ svn_node_kind_t old_kind,
+ svn_node_kind_t new_kind,
+ const char *old_repos_relpath,
+ svn_wc_conflict_action_t action,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+ int dst_op_depth = relpath_depth(b->move_root_dst_relpath);
+ int op_depth;
+ const char *conflict_root_relpath = local_relpath;
+ const char *move_dst_relpath, *dummy1;
+ const char *dummy2, *move_src_op_root_relpath;
+
+ if (b->conflict_root_relpath)
+ {
+ if (svn_relpath_skip_ancestor(b->conflict_root_relpath, local_relpath))
+ {
+ *is_conflicted = TRUE;
+ return SVN_NO_ERROR;
+ }
+ b->conflict_root_relpath = NULL;
+ }
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, b->wcroot->sdb,
+ STMT_SELECT_LOWEST_WORKING_NODE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", b->wcroot->wc_id, local_relpath,
+ dst_op_depth));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ if (have_row)
+ op_depth = svn_sqlite__column_int(stmt, 0);
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ if (!have_row)
+ {
+ *is_conflicted = FALSE;
+ return SVN_NO_ERROR;
+ }
+
+ *is_conflicted = TRUE;
+
+ while (relpath_depth(conflict_root_relpath) > op_depth)
+ {
+ conflict_root_relpath = svn_relpath_dirname(conflict_root_relpath,
+ scratch_pool);
+ old_kind = new_kind = svn_node_dir;
+ if (old_repos_relpath)
+ old_repos_relpath = svn_relpath_dirname(old_repos_relpath,
+ scratch_pool);
+ action = svn_wc_conflict_action_edit;
+ }
+
+ SVN_ERR(svn_wc__db_op_depth_moved_to(&move_dst_relpath,
+ &dummy1,
+ &dummy2,
+ &move_src_op_root_relpath,
+ dst_op_depth,
+ b->wcroot, conflict_root_relpath,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(mark_tree_conflict(conflict_root_relpath,
+ b->wcroot, b->db, b->old_version, b->new_version,
+ b->move_root_dst_relpath, b->operation,
+ old_kind, new_kind,
+ old_repos_relpath,
+ (move_dst_relpath
+ ? svn_wc_conflict_reason_moved_away
+ : svn_wc_conflict_reason_deleted),
+ action, move_src_op_root_relpath,
+ scratch_pool));
+ b->conflict_root_relpath = apr_pstrdup(b->result_pool, conflict_root_relpath);
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+tc_editor_add_directory(void *baton,
+ const char *relpath,
+ const apr_array_header_t *children,
+ apr_hash_t *props,
+ svn_revnum_t replaces_rev,
+ apr_pool_t *scratch_pool)
+{
+ struct tc_editor_baton *b = baton;
+ int op_depth = relpath_depth(b->move_root_dst_relpath);
+ const char *move_dst_repos_relpath;
+ svn_node_kind_t move_dst_kind;
+ svn_boolean_t is_conflicted;
+ const char *abspath;
+ svn_node_kind_t old_kind;
+ svn_skel_t *work_item;
+ svn_wc_notify_action_t action = svn_wc_notify_update_add;
+ svn_error_t *err;
+
+ /* Update NODES, only the bits not covered by the later call to
+ replace_moved_layer. */
+ SVN_ERR(svn_wc__db_extend_parent_delete(b->wcroot, relpath, svn_node_dir,
+ op_depth, scratch_pool));
+
+ err = svn_wc__db_depth_get_info(NULL, &move_dst_kind, NULL,
+ &move_dst_repos_relpath, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ b->wcroot, relpath,
+ relpath_depth(b->move_root_dst_relpath),
+ scratch_pool, scratch_pool);
+ if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ old_kind = svn_node_none;
+ move_dst_repos_relpath = NULL;
+ }
+ else
+ {
+ SVN_ERR(err);
+ old_kind = move_dst_kind;
+ }
+
+ /* Check for NODES tree-conflict. */
+ SVN_ERR(check_tree_conflict(&is_conflicted, b, relpath,
+ old_kind, svn_node_dir,
+ move_dst_repos_relpath,
+ svn_wc_conflict_action_add,
+ scratch_pool));
+ if (is_conflicted)
+ return SVN_NO_ERROR;
+
+ /* Check for unversioned tree-conflict */
+ abspath = svn_dirent_join(b->wcroot->abspath, relpath, scratch_pool);
+ SVN_ERR(svn_io_check_path(abspath, &old_kind, scratch_pool));
+
+ switch (old_kind)
+ {
+ case svn_node_file:
+ default:
+ SVN_ERR(mark_tree_conflict(relpath, b->wcroot, b->db, b->old_version,
+ b->new_version, b->move_root_dst_relpath,
+ b->operation, old_kind, svn_node_dir,
+ move_dst_repos_relpath,
+ svn_wc_conflict_reason_unversioned,
+ svn_wc_conflict_action_add, NULL,
+ scratch_pool));
+ b->conflict_root_relpath = apr_pstrdup(b->result_pool, relpath);
+ action = svn_wc_notify_tree_conflict;
+ is_conflicted = TRUE;
+ break;
+
+ case svn_node_none:
+ SVN_ERR(svn_wc__wq_build_dir_install(&work_item, b->db, abspath,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(svn_wc__db_wq_add(b->db, b->wcroot->abspath, work_item,
+ scratch_pool));
+ /* Fall through */
+ case svn_node_dir:
+ break;
+ }
+
+ if (!is_conflicted)
+ SVN_ERR(update_move_list_add(b->wcroot, relpath,
+ action,
+ svn_node_dir,
+ svn_wc_notify_state_inapplicable,
+ svn_wc_notify_state_inapplicable));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+tc_editor_add_file(void *baton,
+ const char *relpath,
+ const svn_checksum_t *checksum,
+ svn_stream_t *contents,
+ apr_hash_t *props,
+ svn_revnum_t replaces_rev,
+ apr_pool_t *scratch_pool)
+{
+ struct tc_editor_baton *b = baton;
+ int op_depth = relpath_depth(b->move_root_dst_relpath);
+ const char *move_dst_repos_relpath;
+ svn_node_kind_t move_dst_kind;
+ svn_node_kind_t old_kind;
+ svn_boolean_t is_conflicted;
+ const char *abspath;
+ svn_skel_t *work_item;
+ svn_error_t *err;
+
+ /* Update NODES, only the bits not covered by the later call to
+ replace_moved_layer. */
+ SVN_ERR(svn_wc__db_extend_parent_delete(b->wcroot, relpath, svn_node_file,
+ op_depth, scratch_pool));
+
+ err = svn_wc__db_depth_get_info(NULL, &move_dst_kind, NULL,
+ &move_dst_repos_relpath, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ b->wcroot, relpath,
+ relpath_depth(b->move_root_dst_relpath),
+ scratch_pool, scratch_pool);
+ if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ old_kind = svn_node_none;
+ move_dst_repos_relpath = NULL;
+ }
+ else
+ {
+ SVN_ERR(err);
+ old_kind = move_dst_kind;
+ }
+
+ /* Check for NODES tree-conflict. */
+ SVN_ERR(check_tree_conflict(&is_conflicted, b, relpath,
+ old_kind, svn_node_file, move_dst_repos_relpath,
+ svn_wc_conflict_action_add,
+ scratch_pool));
+ if (is_conflicted)
+ return SVN_NO_ERROR;
+
+ /* Check for unversioned tree-conflict */
+ abspath = svn_dirent_join(b->wcroot->abspath, relpath, scratch_pool);
+ SVN_ERR(svn_io_check_path(abspath, &old_kind, scratch_pool));
+
+ if (old_kind != svn_node_none)
+ {
+ SVN_ERR(mark_tree_conflict(relpath, b->wcroot, b->db, b->old_version,
+ b->new_version, b->move_root_dst_relpath,
+ b->operation, old_kind, svn_node_file,
+ move_dst_repos_relpath,
+ svn_wc_conflict_reason_unversioned,
+ svn_wc_conflict_action_add, NULL,
+ scratch_pool));
+ b->conflict_root_relpath = apr_pstrdup(b->result_pool, relpath);
+ return SVN_NO_ERROR;
+ }
+
+ /* Update working file. */
+ SVN_ERR(svn_wc__wq_build_file_install(&work_item, b->db,
+ svn_dirent_join(b->wcroot->abspath,
+ relpath,
+ scratch_pool),
+ NULL,
+ FALSE /* FIXME: use_commit_times? */,
+ TRUE /* record_file_info */,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(svn_wc__db_wq_add(b->db, b->wcroot->abspath, work_item,
+ scratch_pool));
+
+ SVN_ERR(update_move_list_add(b->wcroot, relpath,
+ svn_wc_notify_update_add,
+ svn_node_file,
+ svn_wc_notify_state_inapplicable,
+ svn_wc_notify_state_inapplicable));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+tc_editor_add_symlink(void *baton,
+ const char *relpath,
+ const char *target,
+ apr_hash_t *props,
+ svn_revnum_t replaces_rev,
+ apr_pool_t *scratch_pool)
+{
+ return svn_error_create(SVN_ERR_UNSUPPORTED_FEATURE, NULL, NULL);
+}
+
+static svn_error_t *
+tc_editor_add_absent(void *baton,
+ const char *relpath,
+ svn_node_kind_t kind,
+ svn_revnum_t replaces_rev,
+ apr_pool_t *scratch_pool)
+{
+ return svn_error_create(SVN_ERR_UNSUPPORTED_FEATURE, NULL, NULL);
+}
+
+/* All the info we need about one version of a working node. */
+typedef struct working_node_version_t
+{
+ svn_wc_conflict_version_t *location_and_kind;
+ apr_hash_t *props;
+ const svn_checksum_t *checksum; /* for files only */
+} working_node_version_t;
+
+/* Return *WORK_ITEMS to create a conflict on LOCAL_ABSPATH. */
+static svn_error_t *
+create_conflict_markers(svn_skel_t **work_items,
+ const char *local_abspath,
+ svn_wc__db_t *db,
+ const char *repos_relpath,
+ svn_skel_t *conflict_skel,
+ svn_wc_operation_t operation,
+ const working_node_version_t *old_version,
+ const working_node_version_t *new_version,
+ svn_node_kind_t kind,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc_conflict_version_t *original_version;
+ svn_wc_conflict_version_t *conflicted_version;
+ const char *part;
+
+ original_version = svn_wc_conflict_version_dup(
+ old_version->location_and_kind, scratch_pool);
+ original_version->node_kind = kind;
+ conflicted_version = svn_wc_conflict_version_dup(
+ new_version->location_and_kind, scratch_pool);
+ conflicted_version->node_kind = kind;
+
+ part = svn_relpath_skip_ancestor(original_version->path_in_repos,
+ repos_relpath);
+ conflicted_version->path_in_repos
+ = svn_relpath_join(conflicted_version->path_in_repos, part, scratch_pool);
+ original_version->path_in_repos = repos_relpath;
+
+ if (operation == svn_wc_operation_update)
+ {
+ SVN_ERR(svn_wc__conflict_skel_set_op_update(
+ conflict_skel, original_version,
+ conflicted_version,
+ scratch_pool, scratch_pool));
+ }
+ else
+ {
+ SVN_ERR(svn_wc__conflict_skel_set_op_switch(
+ conflict_skel, original_version,
+ conflicted_version,
+ scratch_pool, scratch_pool));
+ }
+
+ /* According to this func's doc string, it is "Currently only used for
+ * property conflicts as text conflict markers are just in-wc files." */
+ SVN_ERR(svn_wc__conflict_create_markers(work_items, db,
+ local_abspath,
+ conflict_skel,
+ result_pool,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+update_working_props(svn_wc_notify_state_t *prop_state,
+ svn_skel_t **conflict_skel,
+ apr_array_header_t **propchanges,
+ apr_hash_t **actual_props,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ const struct working_node_version_t *old_version,
+ const struct working_node_version_t *new_version,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ apr_hash_t *new_actual_props;
+ apr_array_header_t *new_propchanges;
+
+ /*
+ * Run a 3-way prop merge to update the props, using the pre-update
+ * props as the merge base, the post-update props as the
+ * merge-left version, and the current props of the
+ * moved-here working file as the merge-right version.
+ */
+ SVN_ERR(svn_wc__db_read_props(actual_props,
+ db, local_abspath,
+ result_pool, scratch_pool));
+ SVN_ERR(svn_prop_diffs(propchanges, new_version->props, old_version->props,
+ result_pool));
+ SVN_ERR(svn_wc__merge_props(conflict_skel, prop_state,
+ &new_actual_props,
+ db, local_abspath,
+ old_version->props, old_version->props,
+ *actual_props, *propchanges,
+ result_pool, scratch_pool));
+
+ /* Setting properties in ACTUAL_NODE with svn_wc__db_op_set_props
+ relies on NODES row having been updated first which we don't do
+ at present. So this extra property diff has the same effect.
+
+ ### Perhaps we should update NODES first (but after
+ ### svn_wc__db_read_props above)? */
+ SVN_ERR(svn_prop_diffs(&new_propchanges, new_actual_props, new_version->props,
+ scratch_pool));
+ if (!new_propchanges->nelts)
+ new_actual_props = NULL;
+
+ /* Install the new actual props. Don't set the conflict_skel yet, because
+ we might need to add a text conflict to it as well. */
+ SVN_ERR(svn_wc__db_op_set_props(db, local_abspath,
+ new_actual_props,
+ svn_wc__has_magic_property(*propchanges),
+ NULL/*conflict_skel*/, NULL/*work_items*/,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+tc_editor_alter_directory(void *baton,
+ const char *dst_relpath,
+ svn_revnum_t expected_move_dst_revision,
+ const apr_array_header_t *children,
+ apr_hash_t *new_props,
+ apr_pool_t *scratch_pool)
+{
+ struct tc_editor_baton *b = baton;
+ const char *move_dst_repos_relpath;
+ svn_revnum_t move_dst_revision;
+ svn_node_kind_t move_dst_kind;
+ working_node_version_t old_version, new_version;
+ svn_wc__db_status_t status;
+ svn_boolean_t is_conflicted;
+
+ SVN_ERR_ASSERT(expected_move_dst_revision == b->old_version->peg_rev);
+
+ SVN_ERR(svn_wc__db_depth_get_info(&status, &move_dst_kind, &move_dst_revision,
+ &move_dst_repos_relpath, NULL, NULL, NULL,
+ NULL, NULL, &old_version.checksum, NULL,
+ NULL, &old_version.props,
+ b->wcroot, dst_relpath,
+ relpath_depth(b->move_root_dst_relpath),
+ scratch_pool, scratch_pool));
+
+ /* If the node would be recorded as svn_wc__db_status_base_deleted it
+ wouldn't have a repos_relpath */
+ /* ### Can svn_wc__db_depth_get_info() do this for us without this hint? */
+ if (status == svn_wc__db_status_deleted && move_dst_repos_relpath)
+ status = svn_wc__db_status_not_present;
+
+ /* There might be not-present nodes of a different revision as the same
+ depth as a copy. This is commonly caused by copying/moving mixed revision
+ directories */
+ SVN_ERR_ASSERT(move_dst_revision == expected_move_dst_revision
+ || status == svn_wc__db_status_not_present);
+ SVN_ERR_ASSERT(move_dst_kind == svn_node_dir);
+
+ SVN_ERR(check_tree_conflict(&is_conflicted, b, dst_relpath,
+ move_dst_kind,
+ svn_node_dir,
+ move_dst_repos_relpath,
+ svn_wc_conflict_action_edit,
+ scratch_pool));
+ if (is_conflicted)
+ return SVN_NO_ERROR;
+
+ old_version.location_and_kind = b->old_version;
+ new_version.location_and_kind = b->new_version;
+
+ new_version.checksum = NULL; /* not a file */
+ new_version.props = new_props ? new_props : old_version.props;
+
+ if (new_props)
+ {
+ const char *dst_abspath = svn_dirent_join(b->wcroot->abspath,
+ dst_relpath,
+ scratch_pool);
+ svn_wc_notify_state_t prop_state;
+ svn_skel_t *conflict_skel = NULL;
+ apr_hash_t *actual_props;
+ apr_array_header_t *propchanges;
+
+ SVN_ERR(update_working_props(&prop_state, &conflict_skel,
+ &propchanges, &actual_props,
+ b->db, dst_abspath,
+ &old_version, &new_version,
+ scratch_pool, scratch_pool));
+
+ if (conflict_skel)
+ {
+ svn_skel_t *work_items;
+
+ SVN_ERR(create_conflict_markers(&work_items, dst_abspath,
+ b->db, move_dst_repos_relpath,
+ conflict_skel, b->operation,
+ &old_version, &new_version,
+ svn_node_dir,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_mark_conflict_internal(b->wcroot, dst_relpath,
+ conflict_skel,
+ scratch_pool));
+ SVN_ERR(svn_wc__db_wq_add(b->db, b->wcroot->abspath, work_items,
+ scratch_pool));
+ }
+
+ SVN_ERR(update_move_list_add(b->wcroot, dst_relpath,
+ svn_wc_notify_update_update,
+ svn_node_dir,
+ svn_wc_notify_state_inapplicable,
+ prop_state));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
+/* Merge the difference between OLD_VERSION and NEW_VERSION into
+ * the working file at LOCAL_RELPATH.
+ *
+ * The term 'old' refers to the pre-update state, which is the state of
+ * (some layer of) LOCAL_RELPATH while this function runs; and 'new'
+ * refers to the post-update state, as found at the (base layer of) the
+ * move source path while this function runs.
+ *
+ * LOCAL_RELPATH is a file in the working copy at WCROOT in DB, and
+ * REPOS_RELPATH is the repository path it would be committed to.
+ *
+ * Use NOTIFY_FUNC and NOTIFY_BATON for notifications.
+ * Set *WORK_ITEMS to any required work items, allocated in RESULT_POOL.
+ * Use SCRATCH_POOL for temporary allocations. */
+static svn_error_t *
+update_working_file(const char *local_relpath,
+ const char *repos_relpath,
+ svn_wc_operation_t operation,
+ const working_node_version_t *old_version,
+ const working_node_version_t *new_version,
+ svn_wc__db_wcroot_t *wcroot,
+ svn_wc__db_t *db,
+ apr_pool_t *scratch_pool)
+{
+ const char *local_abspath = svn_dirent_join(wcroot->abspath,
+ local_relpath,
+ scratch_pool);
+ const char *old_pristine_abspath;
+ const char *new_pristine_abspath;
+ svn_skel_t *conflict_skel = NULL;
+ apr_hash_t *actual_props;
+ apr_array_header_t *propchanges;
+ enum svn_wc_merge_outcome_t merge_outcome;
+ svn_wc_notify_state_t prop_state, content_state;
+ svn_skel_t *work_item, *work_items = NULL;
+
+ SVN_ERR(update_working_props(&prop_state, &conflict_skel, &propchanges,
+ &actual_props, db, local_abspath,
+ old_version, new_version,
+ scratch_pool, scratch_pool));
+
+ if (!svn_checksum_match(new_version->checksum, old_version->checksum))
+ {
+ svn_boolean_t is_locally_modified;
+
+ SVN_ERR(svn_wc__internal_file_modified_p(&is_locally_modified,
+ db, local_abspath,
+ FALSE /* exact_comparison */,
+ scratch_pool));
+ if (!is_locally_modified)
+ {
+ SVN_ERR(svn_wc__wq_build_file_install(&work_item, db,
+ local_abspath,
+ NULL,
+ FALSE /* FIXME: use_commit_times? */,
+ TRUE /* record_file_info */,
+ scratch_pool, scratch_pool));
+
+ work_items = svn_wc__wq_merge(work_items, work_item, scratch_pool);
+
+ content_state = svn_wc_notify_state_changed;
+ }
+ else
+ {
+ /*
+ * Run a 3-way merge to update the file, using the pre-update
+ * pristine text as the merge base, the post-update pristine
+ * text as the merge-left version, and the current content of the
+ * moved-here working file as the merge-right version.
+ */
+ SVN_ERR(svn_wc__db_pristine_get_path(&old_pristine_abspath,
+ db, wcroot->abspath,
+ old_version->checksum,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_pristine_get_path(&new_pristine_abspath,
+ db, wcroot->abspath,
+ new_version->checksum,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__internal_merge(&work_item, &conflict_skel,
+ &merge_outcome, db,
+ old_pristine_abspath,
+ new_pristine_abspath,
+ local_abspath,
+ local_abspath,
+ NULL, NULL, NULL, /* diff labels */
+ actual_props,
+ FALSE, /* dry-run */
+ NULL, /* diff3-cmd */
+ NULL, /* merge options */
+ propchanges,
+ NULL, NULL, /* cancel_func + baton */
+ scratch_pool, scratch_pool));
+
+ work_items = svn_wc__wq_merge(work_items, work_item, scratch_pool);
+
+ if (merge_outcome == svn_wc_merge_conflict)
+ content_state = svn_wc_notify_state_conflicted;
+ else
+ content_state = svn_wc_notify_state_merged;
+ }
+ }
+ else
+ content_state = svn_wc_notify_state_unchanged;
+
+ /* If there are any conflicts to be stored, convert them into work items
+ * too. */
+ if (conflict_skel)
+ {
+ SVN_ERR(create_conflict_markers(&work_item, local_abspath, db,
+ repos_relpath, conflict_skel,
+ operation, old_version, new_version,
+ svn_node_file,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(svn_wc__db_mark_conflict_internal(wcroot, local_relpath,
+ conflict_skel,
+ scratch_pool));
+
+ work_items = svn_wc__wq_merge(work_items, work_item, scratch_pool);
+ }
+
+ SVN_ERR(svn_wc__db_wq_add(db, wcroot->abspath, work_items, scratch_pool));
+
+ SVN_ERR(update_move_list_add(wcroot, local_relpath,
+ svn_wc_notify_update_update,
+ svn_node_file,
+ content_state,
+ prop_state));
+
+ return SVN_NO_ERROR;
+}
+
+
+/* Edit the file found at the move destination, which is initially at
+ * the old state. Merge the changes into the "working"/"actual" file.
+ */
+static svn_error_t *
+tc_editor_alter_file(void *baton,
+ const char *dst_relpath,
+ svn_revnum_t expected_move_dst_revision,
+ apr_hash_t *new_props,
+ const svn_checksum_t *new_checksum,
+ svn_stream_t *new_contents,
+ apr_pool_t *scratch_pool)
+{
+ struct tc_editor_baton *b = baton;
+ const char *move_dst_repos_relpath;
+ svn_revnum_t move_dst_revision;
+ svn_node_kind_t move_dst_kind;
+ working_node_version_t old_version, new_version;
+ svn_boolean_t is_conflicted;
+ svn_wc__db_status_t status;
+
+ SVN_ERR(svn_wc__db_depth_get_info(&status, &move_dst_kind, &move_dst_revision,
+ &move_dst_repos_relpath, NULL, NULL, NULL,
+ NULL, NULL, &old_version.checksum, NULL,
+ NULL, &old_version.props,
+ b->wcroot, dst_relpath,
+ relpath_depth(b->move_root_dst_relpath),
+ scratch_pool, scratch_pool));
+
+ /* If the node would be recorded as svn_wc__db_status_base_deleted it
+ wouldn't have a repos_relpath */
+ /* ### Can svn_wc__db_depth_get_info() do this for us without this hint? */
+ if (status == svn_wc__db_status_deleted && move_dst_repos_relpath)
+ status = svn_wc__db_status_not_present;
+
+ SVN_ERR_ASSERT(move_dst_revision == expected_move_dst_revision
+ || status == svn_wc__db_status_not_present);
+ SVN_ERR_ASSERT(move_dst_kind == svn_node_file);
+
+ SVN_ERR(check_tree_conflict(&is_conflicted, b, dst_relpath,
+ move_dst_kind,
+ svn_node_file,
+ move_dst_repos_relpath,
+ svn_wc_conflict_action_edit,
+ scratch_pool));
+ if (is_conflicted)
+ return SVN_NO_ERROR;
+
+ old_version.location_and_kind = b->old_version;
+ new_version.location_and_kind = b->new_version;
+
+ /* If new checksum is null that means no change; similarly props. */
+ new_version.checksum = new_checksum ? new_checksum : old_version.checksum;
+ new_version.props = new_props ? new_props : old_version.props;
+
+ /* Update file and prop contents if the update has changed them. */
+ if (!svn_checksum_match(new_checksum, old_version.checksum) || new_props)
+ {
+ SVN_ERR(update_working_file(dst_relpath, move_dst_repos_relpath,
+ b->operation, &old_version, &new_version,
+ b->wcroot, b->db,
+ scratch_pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+tc_editor_alter_symlink(void *baton,
+ const char *relpath,
+ svn_revnum_t revision,
+ apr_hash_t *props,
+ const char *target,
+ apr_pool_t *scratch_pool)
+{
+ return svn_error_create(SVN_ERR_UNSUPPORTED_FEATURE, NULL, NULL);
+}
+
+static svn_error_t *
+tc_editor_delete(void *baton,
+ const char *relpath,
+ svn_revnum_t revision,
+ apr_pool_t *scratch_pool)
+{
+ struct tc_editor_baton *b = baton;
+ svn_sqlite__stmt_t *stmt;
+ int op_depth = relpath_depth(b->move_root_dst_relpath);
+ const char *move_dst_repos_relpath;
+ svn_node_kind_t move_dst_kind;
+ svn_boolean_t is_conflicted;
+ svn_boolean_t must_delete_working_nodes = FALSE;
+ const char *local_abspath = svn_dirent_join(b->wcroot->abspath, relpath,
+ scratch_pool);
+ const char *parent_relpath = svn_relpath_dirname(relpath, scratch_pool);
+ int op_depth_below;
+ svn_boolean_t have_row;
+
+ SVN_ERR(svn_wc__db_depth_get_info(NULL, &move_dst_kind, NULL,
+ &move_dst_repos_relpath, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ b->wcroot, relpath,
+ relpath_depth(b->move_root_dst_relpath),
+ scratch_pool, scratch_pool));
+
+ /* Check before retracting delete to catch delete-delete
+ conflicts. This catches conflicts on the node itself; deleted
+ children are caught as local modifications below.*/
+ SVN_ERR(check_tree_conflict(&is_conflicted, b, relpath,
+ move_dst_kind,
+ svn_node_unknown,
+ move_dst_repos_relpath,
+ svn_wc_conflict_action_delete,
+ scratch_pool));
+
+ if (!is_conflicted)
+ {
+ svn_boolean_t is_modified, is_all_deletes;
+
+ SVN_ERR(svn_wc__node_has_local_mods(&is_modified, &is_all_deletes, b->db,
+ local_abspath,
+ NULL, NULL, scratch_pool));
+ if (is_modified)
+ {
+ svn_wc_conflict_reason_t reason;
+
+ if (!is_all_deletes)
+ {
+ /* No conflict means no NODES rows at the relpath op-depth
+ so it's easy to convert the modified tree into a copy. */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, b->wcroot->sdb,
+ STMT_UPDATE_OP_DEPTH_RECURSIVE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isdd", b->wcroot->wc_id, relpath,
+ op_depth, relpath_depth(relpath)));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+
+ reason = svn_wc_conflict_reason_edited;
+ }
+ else
+ {
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, b->wcroot->sdb,
+ STMT_DELETE_WORKING_OP_DEPTH_ABOVE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", b->wcroot->wc_id, relpath,
+ op_depth));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+
+ reason = svn_wc_conflict_reason_deleted;
+ must_delete_working_nodes = TRUE;
+ }
+ is_conflicted = TRUE;
+ SVN_ERR(mark_tree_conflict(relpath, b->wcroot, b->db, b->old_version,
+ b->new_version, b->move_root_dst_relpath,
+ b->operation,
+ move_dst_kind,
+ svn_node_none,
+ move_dst_repos_relpath, reason,
+ svn_wc_conflict_action_delete, NULL,
+ scratch_pool));
+ b->conflict_root_relpath = apr_pstrdup(b->result_pool, relpath);
+ }
+ }
+
+ if (!is_conflicted || must_delete_working_nodes)
+ {
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ svn_skel_t *work_item;
+ svn_node_kind_t del_kind;
+ const char *del_abspath;
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, b->wcroot->sdb,
+ STMT_SELECT_CHILDREN_OP_DEPTH));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", b->wcroot->wc_id, relpath,
+ op_depth));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ while (have_row)
+ {
+ svn_error_t *err;
+
+ svn_pool_clear(iterpool);
+
+ del_kind = svn_sqlite__column_token(stmt, 1, kind_map);
+ del_abspath = svn_dirent_join(b->wcroot->abspath,
+ svn_sqlite__column_text(stmt, 0, NULL),
+ iterpool);
+ if (del_kind == svn_node_dir)
+ err = svn_wc__wq_build_dir_remove(&work_item, b->db,
+ b->wcroot->abspath, del_abspath,
+ FALSE /* recursive */,
+ iterpool, iterpool);
+ else
+ err = svn_wc__wq_build_file_remove(&work_item, b->db,
+ b->wcroot->abspath, del_abspath,
+ iterpool, iterpool);
+ if (!err)
+ err = svn_wc__db_wq_add(b->db, b->wcroot->abspath, work_item,
+ iterpool);
+ if (err)
+ return svn_error_compose_create(err, svn_sqlite__reset(stmt));
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ }
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ SVN_ERR(svn_wc__db_depth_get_info(NULL, &del_kind, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL,
+ b->wcroot, relpath, op_depth,
+ iterpool, iterpool));
+ if (del_kind == svn_node_dir)
+ SVN_ERR(svn_wc__wq_build_dir_remove(&work_item, b->db,
+ b->wcroot->abspath, local_abspath,
+ FALSE /* recursive */,
+ iterpool, iterpool));
+ else
+ SVN_ERR(svn_wc__wq_build_file_remove(&work_item, b->db,
+ b->wcroot->abspath, local_abspath,
+ iterpool, iterpool));
+ SVN_ERR(svn_wc__db_wq_add(b->db, b->wcroot->abspath, work_item,
+ iterpool));
+
+ if (!is_conflicted)
+ SVN_ERR(update_move_list_add(b->wcroot, relpath,
+ svn_wc_notify_update_delete,
+ del_kind,
+ svn_wc_notify_state_inapplicable,
+ svn_wc_notify_state_inapplicable));
+ svn_pool_destroy(iterpool);
+ }
+
+ /* Deleting the ROWS is valid so long as we update the parent before
+ committing the transaction. The removed rows could have been
+ replacing a lower layer in which case we need to add base-deleted
+ rows. */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, b->wcroot->sdb,
+ STMT_SELECT_HIGHEST_WORKING_NODE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", b->wcroot->wc_id, parent_relpath,
+ op_depth));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ if (have_row)
+ op_depth_below = svn_sqlite__column_int(stmt, 0);
+ SVN_ERR(svn_sqlite__reset(stmt));
+ if (have_row)
+ {
+ /* Remove non-shadowing nodes. */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, b->wcroot->sdb,
+ STMT_DELETE_NO_LOWER_LAYER));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isdd", b->wcroot->wc_id, relpath,
+ op_depth, op_depth_below));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+
+ /* Convert remaining shadowing nodes to presence='base-deleted'. */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, b->wcroot->sdb,
+ STMT_REPLACE_WITH_BASE_DELETED));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", b->wcroot->wc_id, relpath,
+ op_depth));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+ }
+ else
+ {
+ SVN_ERR(svn_sqlite__get_statement(&stmt, b->wcroot->sdb,
+ STMT_DELETE_WORKING_OP_DEPTH));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", b->wcroot->wc_id, relpath,
+ op_depth));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+ }
+
+ /* Retract any base-delete. */
+ SVN_ERR(svn_wc__db_retract_parent_delete(b->wcroot, relpath, op_depth,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+tc_editor_copy(void *baton,
+ const char *src_relpath,
+ svn_revnum_t src_revision,
+ const char *dst_relpath,
+ svn_revnum_t replaces_rev,
+ apr_pool_t *scratch_pool)
+{
+ return svn_error_create(SVN_ERR_UNSUPPORTED_FEATURE, NULL, NULL);
+}
+
+static svn_error_t *
+tc_editor_move(void *baton,
+ const char *src_relpath,
+ svn_revnum_t src_revision,
+ const char *dst_relpath,
+ svn_revnum_t replaces_rev,
+ apr_pool_t *scratch_pool)
+{
+ return svn_error_create(SVN_ERR_UNSUPPORTED_FEATURE, NULL, NULL);
+}
+
+static svn_error_t *
+tc_editor_rotate(void *baton,
+ const apr_array_header_t *relpaths,
+ const apr_array_header_t *revisions,
+ apr_pool_t *scratch_pool)
+{
+ return svn_error_create(SVN_ERR_UNSUPPORTED_FEATURE, NULL, NULL);
+}
+
+static svn_error_t *
+tc_editor_complete(void *baton,
+ apr_pool_t *scratch_pool)
+{
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+tc_editor_abort(void *baton,
+ apr_pool_t *scratch_pool)
+{
+ return SVN_NO_ERROR;
+}
+
+/* The editor callback table implementing the receiver. */
+static const svn_editor_cb_many_t editor_ops = {
+ tc_editor_add_directory,
+ tc_editor_add_file,
+ tc_editor_add_symlink,
+ tc_editor_add_absent,
+ tc_editor_alter_directory,
+ tc_editor_alter_file,
+ tc_editor_alter_symlink,
+ tc_editor_delete,
+ tc_editor_copy,
+ tc_editor_move,
+ tc_editor_rotate,
+ tc_editor_complete,
+ tc_editor_abort
+};
+
+
+/*
+ * Driver code.
+ *
+ * The scenario is that a subtree has been locally moved, and then the base
+ * layer on the source side of the move has received an update to a new
+ * state. The destination subtree has not yet been updated, and still
+ * matches the pre-update state of the source subtree.
+ *
+ * The edit driver drives the receiver with the difference between the
+ * pre-update state (as found now at the move-destination) and the
+ * post-update state (found now at the move-source).
+ *
+ * We currently assume that both the pre-update and post-update states are
+ * single-revision.
+ */
+
+/* Set *OPERATION, *LOCAL_CHANGE, *INCOMING_CHANGE, *OLD_VERSION, *NEW_VERSION
+ * to reflect the tree conflict on the victim SRC_ABSPATH in DB.
+ *
+ * If SRC_ABSPATH is not a tree-conflict victim, return an error.
+ */
+static svn_error_t *
+get_tc_info(svn_wc_operation_t *operation,
+ svn_wc_conflict_reason_t *local_change,
+ svn_wc_conflict_action_t *incoming_change,
+ const char **move_src_op_root_abspath,
+ svn_wc_conflict_version_t **old_version,
+ svn_wc_conflict_version_t **new_version,
+ svn_wc__db_t *db,
+ const char *src_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ const apr_array_header_t *locations;
+ svn_boolean_t tree_conflicted;
+ svn_skel_t *conflict_skel;
+
+ /* Check for tree conflict on src. */
+ SVN_ERR(svn_wc__db_read_conflict(&conflict_skel, db,
+ src_abspath,
+ scratch_pool, scratch_pool));
+ if (!conflict_skel)
+ return svn_error_createf(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE, NULL,
+ _("'%s' is not in conflict"),
+ svn_dirent_local_style(src_abspath,
+ scratch_pool));
+
+ SVN_ERR(svn_wc__conflict_read_info(operation, &locations,
+ NULL, NULL, &tree_conflicted,
+ db, src_abspath,
+ conflict_skel, result_pool,
+ scratch_pool));
+ if ((*operation != svn_wc_operation_update
+ && *operation != svn_wc_operation_switch)
+ || !tree_conflicted)
+ return svn_error_createf(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE, NULL,
+ _("'%s' is not a tree-conflict victim"),
+ svn_dirent_local_style(src_abspath,
+ scratch_pool));
+ if (locations)
+ {
+ SVN_ERR_ASSERT(locations->nelts >= 2);
+ *old_version = APR_ARRAY_IDX(locations, 0,
+ svn_wc_conflict_version_t *);
+ *new_version = APR_ARRAY_IDX(locations, 1,
+ svn_wc_conflict_version_t *);
+ }
+
+ SVN_ERR(svn_wc__conflict_read_tree_conflict(local_change,
+ incoming_change,
+ move_src_op_root_abspath,
+ db, src_abspath,
+ conflict_skel, scratch_pool,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* Return *PROPS, *CHECKSUM, *CHILDREN and *KIND for LOCAL_RELPATH at
+ OP_DEPTH provided the row exists. Return *KIND of svn_node_none if
+ the row does not exist. *CHILDREN is a sorted array of basenames of
+ type 'const char *', rather than a hash, to allow the driver to
+ process children in a defined order. */
+static svn_error_t *
+get_info(apr_hash_t **props,
+ const svn_checksum_t **checksum,
+ apr_array_header_t **children,
+ svn_node_kind_t *kind,
+ const char *local_relpath,
+ int op_depth,
+ svn_wc__db_wcroot_t *wcroot,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ apr_hash_t *hash_children;
+ apr_array_header_t *sorted_children;
+ svn_error_t *err;
+ int i;
+
+ err = svn_wc__db_depth_get_info(NULL, kind, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, checksum, NULL, NULL, props,
+ wcroot, local_relpath, op_depth,
+ result_pool, scratch_pool);
+ if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ *kind = svn_node_none;
+ }
+ else
+ SVN_ERR(err);
+
+
+ SVN_ERR(svn_wc__db_get_children_op_depth(&hash_children, wcroot,
+ local_relpath, op_depth,
+ scratch_pool, scratch_pool));
+
+ sorted_children = svn_sort__hash(hash_children,
+ svn_sort_compare_items_lexically,
+ scratch_pool);
+
+ *children = apr_array_make(result_pool, sorted_children->nelts,
+ sizeof(const char *));
+ for (i = 0; i < sorted_children->nelts; ++i)
+ APR_ARRAY_PUSH(*children, const char *)
+ = apr_pstrdup(result_pool, APR_ARRAY_IDX(sorted_children, i,
+ svn_sort__item_t).key);
+
+ return SVN_NO_ERROR;
+}
+
+/* Return TRUE if SRC_CHILDREN and DST_CHILDREN represent the same
+ children, FALSE otherwise. SRC_CHILDREN and DST_CHILDREN are
+ sorted arrays of basenames of type 'const char *'. */
+static svn_boolean_t
+children_match(apr_array_header_t *src_children,
+ apr_array_header_t *dst_children) { int i;
+
+ if (src_children->nelts != dst_children->nelts)
+ return FALSE;
+
+ for(i = 0; i < src_children->nelts; ++i)
+ {
+ const char *src_child =
+ APR_ARRAY_IDX(src_children, i, const char *);
+ const char *dst_child =
+ APR_ARRAY_IDX(dst_children, i, const char *);
+
+ if (strcmp(src_child, dst_child))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/* Return TRUE if SRC_PROPS and DST_PROPS contain the same properties,
+ FALSE otherwise. SRC_PROPS and DST_PROPS are standard property
+ hashes. */
+static svn_error_t *
+props_match(svn_boolean_t *match,
+ apr_hash_t *src_props,
+ apr_hash_t *dst_props,
+ apr_pool_t *scratch_pool)
+{
+ if (!src_props && !dst_props)
+ *match = TRUE;
+ else if (!src_props || ! dst_props)
+ *match = FALSE;
+ else
+ {
+ apr_array_header_t *propdiffs;
+
+ SVN_ERR(svn_prop_diffs(&propdiffs, src_props, dst_props, scratch_pool));
+ *match = propdiffs->nelts ? FALSE : TRUE;
+ }
+ return SVN_NO_ERROR;
+}
+
+/* ### Drive TC_EDITOR so as to ...
+ */
+static svn_error_t *
+update_moved_away_node(svn_editor_t *tc_editor,
+ const char *src_relpath,
+ const char *dst_relpath,
+ int src_op_depth,
+ const char *move_root_dst_relpath,
+ svn_revnum_t move_root_dst_revision,
+ svn_wc__db_t *db,
+ svn_wc__db_wcroot_t *wcroot,
+ apr_pool_t *scratch_pool)
+{
+ svn_node_kind_t src_kind, dst_kind;
+ const svn_checksum_t *src_checksum, *dst_checksum;
+ apr_hash_t *src_props, *dst_props;
+ apr_array_header_t *src_children, *dst_children;
+ int dst_op_depth = relpath_depth(move_root_dst_relpath);
+
+ SVN_ERR(get_info(&src_props, &src_checksum, &src_children, &src_kind,
+ src_relpath, src_op_depth,
+ wcroot, scratch_pool, scratch_pool));
+
+ SVN_ERR(get_info(&dst_props, &dst_checksum, &dst_children, &dst_kind,
+ dst_relpath, dst_op_depth,
+ wcroot, scratch_pool, scratch_pool));
+
+ if (src_kind == svn_node_none
+ || (dst_kind != svn_node_none && src_kind != dst_kind))
+ {
+ SVN_ERR(svn_editor_delete(tc_editor, dst_relpath,
+ move_root_dst_revision));
+ }
+
+ if (src_kind != svn_node_none && src_kind != dst_kind)
+ {
+ if (src_kind == svn_node_file || src_kind == svn_node_symlink)
+ {
+ svn_stream_t *contents;
+
+ SVN_ERR(svn_wc__db_pristine_read(&contents, NULL, db,
+ wcroot->abspath, src_checksum,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_editor_add_file(tc_editor, dst_relpath,
+ src_checksum, contents, src_props,
+ move_root_dst_revision));
+ }
+ else if (src_kind == svn_node_dir)
+ {
+ SVN_ERR(svn_editor_add_directory(tc_editor, dst_relpath,
+ src_children, src_props,
+ move_root_dst_revision));
+ }
+ }
+ else if (src_kind != svn_node_none)
+ {
+ svn_boolean_t match;
+ apr_hash_t *props;
+
+ SVN_ERR(props_match(&match, src_props, dst_props, scratch_pool));
+ props = match ? NULL: src_props;
+
+
+ if (src_kind == svn_node_file || src_kind == svn_node_symlink)
+ {
+ svn_stream_t *contents;
+
+ if (svn_checksum_match(src_checksum, dst_checksum))
+ src_checksum = NULL;
+
+ if (src_checksum)
+ SVN_ERR(svn_wc__db_pristine_read(&contents, NULL, db,
+ wcroot->abspath, src_checksum,
+ scratch_pool, scratch_pool));
+ else
+ contents = NULL;
+
+ if (props || src_checksum)
+ SVN_ERR(svn_editor_alter_file(tc_editor, dst_relpath,
+ move_root_dst_revision,
+ props, src_checksum, contents));
+ }
+ else if (src_kind == svn_node_dir)
+ {
+ apr_array_header_t *children
+ = children_match(src_children, dst_children) ? NULL : src_children;
+
+ if (props || children)
+ SVN_ERR(svn_editor_alter_directory(tc_editor, dst_relpath,
+ move_root_dst_revision,
+ children, props));
+ }
+ }
+
+ if (src_kind == svn_node_dir)
+ {
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ int i = 0, j = 0;
+
+ while (i < src_children->nelts || j < dst_children->nelts)
+ {
+ const char *child_name;
+ const char *src_child_relpath, *dst_child_relpath;
+ svn_boolean_t src_only = FALSE, dst_only = FALSE;
+
+ svn_pool_clear(iterpool);
+ if (i >= src_children->nelts)
+ {
+ dst_only = TRUE;
+ child_name = APR_ARRAY_IDX(dst_children, j, const char *);
+ }
+ else if (j >= dst_children->nelts)
+ {
+ src_only = TRUE;
+ child_name = APR_ARRAY_IDX(src_children, i, const char *);
+ }
+ else
+ {
+ const char *src_name = APR_ARRAY_IDX(src_children, i,
+ const char *);
+ const char *dst_name = APR_ARRAY_IDX(dst_children, j,
+ const char *);
+ int cmp = strcmp(src_name, dst_name);
+
+ if (cmp > 0)
+ dst_only = TRUE;
+ else if (cmp < 0)
+ src_only = TRUE;
+
+ child_name = dst_only ? dst_name : src_name;
+ }
+
+ src_child_relpath = svn_relpath_join(src_relpath, child_name,
+ iterpool);
+ dst_child_relpath = svn_relpath_join(dst_relpath, child_name,
+ iterpool);
+
+ SVN_ERR(update_moved_away_node(tc_editor, src_child_relpath,
+ dst_child_relpath, src_op_depth,
+ move_root_dst_relpath,
+ move_root_dst_revision,
+ db, wcroot, scratch_pool));
+
+ if (!dst_only)
+ ++i;
+ if (!src_only)
+ ++j;
+ }
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Update the single op-depth layer in the move destination subtree
+ rooted at DST_RELPATH to make it match the move source subtree
+ rooted at SRC_RELPATH. */
+static svn_error_t *
+replace_moved_layer(const char *src_relpath,
+ const char *dst_relpath,
+ int src_op_depth,
+ svn_wc__db_wcroot_t *wcroot,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+ int dst_op_depth = relpath_depth(dst_relpath);
+
+ /* Replace entire subtree at one op-depth. */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_LOCAL_RELPATH_OP_DEPTH));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id,
+ src_relpath, src_op_depth));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ while (have_row)
+ {
+ svn_error_t *err;
+ svn_sqlite__stmt_t *stmt2;
+ const char *src_cp_relpath = svn_sqlite__column_text(stmt, 0, NULL);
+ const char *dst_cp_relpath
+ = svn_relpath_join(dst_relpath,
+ svn_relpath_skip_ancestor(src_relpath,
+ src_cp_relpath),
+ scratch_pool);
+
+ err = svn_sqlite__get_statement(&stmt2, wcroot->sdb,
+ STMT_COPY_NODE_MOVE);
+ if (!err)
+ err = svn_sqlite__bindf(stmt2, "isdsds", wcroot->wc_id,
+ src_cp_relpath, src_op_depth,
+ dst_cp_relpath, dst_op_depth,
+ svn_relpath_dirname(dst_cp_relpath,
+ scratch_pool));
+ if (!err)
+ err = svn_sqlite__step_done(stmt2);
+ if (err)
+ return svn_error_compose_create(err, svn_sqlite__reset(stmt));
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ }
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ return SVN_NO_ERROR;
+}
+
+/* Transfer changes from the move source to the move destination.
+ *
+ * Drive the editor TC_EDITOR with the difference between DST_RELPATH
+ * (at its own op-depth) and SRC_RELPATH (at op-depth zero).
+ *
+ * Then update the single op-depth layer in the move destination subtree
+ * rooted at DST_RELPATH to make it match the move source subtree
+ * rooted at SRC_RELPATH.
+ *
+ * ### And the other params?
+ */
+static svn_error_t *
+drive_tree_conflict_editor(svn_editor_t *tc_editor,
+ const char *src_relpath,
+ const char *dst_relpath,
+ int src_op_depth,
+ svn_wc_operation_t operation,
+ svn_wc_conflict_reason_t local_change,
+ svn_wc_conflict_action_t incoming_change,
+ svn_wc_conflict_version_t *old_version,
+ svn_wc_conflict_version_t *new_version,
+ svn_wc__db_t *db,
+ svn_wc__db_wcroot_t *wcroot,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
+{
+ /*
+ * Refuse to auto-resolve unsupported tree conflicts.
+ */
+ /* ### Only handle conflicts created by update/switch operations for now. */
+ if (operation != svn_wc_operation_update &&
+ operation != svn_wc_operation_switch)
+ return svn_error_createf(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE, NULL,
+ _("Cannot auto-resolve tree-conflict on '%s'"),
+ svn_dirent_local_style(
+ svn_dirent_join(wcroot->abspath,
+ src_relpath, scratch_pool),
+ scratch_pool));
+
+ /* We walk the move source (i.e. the post-update tree), comparing each node
+ * with the equivalent node at the move destination and applying the update
+ * to nodes at the move destination. */
+ SVN_ERR(update_moved_away_node(tc_editor, src_relpath, dst_relpath,
+ src_op_depth,
+ dst_relpath, old_version->peg_rev,
+ db, wcroot, scratch_pool));
+
+ SVN_ERR(replace_moved_layer(src_relpath, dst_relpath, src_op_depth,
+ wcroot, scratch_pool));
+
+ SVN_ERR(svn_editor_complete(tc_editor));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+suitable_for_move(svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+ svn_revnum_t revision;
+ const char *repos_relpath;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_BASE_NODE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ if (have_row)
+ {
+ revision = svn_sqlite__column_revnum(stmt, 4);
+ repos_relpath = svn_sqlite__column_text(stmt, 1, scratch_pool);
+ }
+ SVN_ERR(svn_sqlite__reset(stmt));
+ if (!have_row)
+ return SVN_NO_ERROR; /* Return an error? */
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_REPOS_PATH_REVISION));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ while (have_row)
+ {
+ svn_revnum_t node_revision = svn_sqlite__column_revnum(stmt, 2);
+ const char *relpath = svn_sqlite__column_text(stmt, 0, NULL);
+
+ svn_pool_clear(iterpool);
+
+ relpath = svn_relpath_skip_ancestor(local_relpath, relpath);
+ relpath = svn_relpath_join(repos_relpath, relpath, iterpool);
+
+ if (revision != node_revision)
+ return svn_error_createf(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE,
+ svn_sqlite__reset(stmt),
+ _("Cannot apply update because move source "
+ "%s' is a mixed-revision working copy"),
+ svn_dirent_local_style(svn_dirent_join(
+ wcroot->abspath,
+ local_relpath,
+ scratch_pool),
+ scratch_pool));
+
+ if (strcmp(relpath, svn_sqlite__column_text(stmt, 1, NULL)))
+ return svn_error_createf(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE,
+ svn_sqlite__reset(stmt),
+ _("Cannot apply update because move source "
+ "'%s' is a switched subtree"),
+ svn_dirent_local_style(svn_dirent_join(
+ wcroot->abspath,
+ local_relpath,
+ scratch_pool),
+ scratch_pool));
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ }
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+/* The body of svn_wc__db_update_moved_away_conflict_victim(), which see.
+ */
+static svn_error_t *
+update_moved_away_conflict_victim(svn_wc__db_t *db,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *victim_relpath,
+ svn_wc_operation_t operation,
+ svn_wc_conflict_reason_t local_change,
+ svn_wc_conflict_action_t incoming_change,
+ const char *move_src_op_root_relpath,
+ svn_wc_conflict_version_t *old_version,
+ svn_wc_conflict_version_t *new_version,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
+{
+ svn_editor_t *tc_editor;
+ struct tc_editor_baton *tc_editor_baton;
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+ const char *dummy1, *dummy2, *dummy3;
+ int src_op_depth;
+ const char *move_root_dst_abspath;
+
+ /* ### assumes wc write lock already held */
+
+ /* Construct editor baton. */
+ tc_editor_baton = apr_pcalloc(scratch_pool, sizeof(*tc_editor_baton));
+ SVN_ERR(svn_wc__db_op_depth_moved_to(
+ &dummy1, &tc_editor_baton->move_root_dst_relpath, &dummy2, &dummy3,
+ relpath_depth(move_src_op_root_relpath) - 1,
+ wcroot, victim_relpath, scratch_pool, scratch_pool));
+ if (tc_editor_baton->move_root_dst_relpath == NULL)
+ return svn_error_createf(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE, NULL,
+ _("The node '%s' has not been moved away"),
+ svn_dirent_local_style(
+ svn_dirent_join(wcroot->abspath, victim_relpath,
+ scratch_pool),
+ scratch_pool));
+
+ move_root_dst_abspath
+ = svn_dirent_join(wcroot->abspath, tc_editor_baton->move_root_dst_relpath,
+ scratch_pool);
+ SVN_ERR(svn_wc__write_check(db, move_root_dst_abspath, scratch_pool));
+
+ tc_editor_baton->operation = operation;
+ tc_editor_baton->old_version= old_version;
+ tc_editor_baton->new_version= new_version;
+ tc_editor_baton->db = db;
+ tc_editor_baton->wcroot = wcroot;
+ tc_editor_baton->result_pool = scratch_pool;
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_HIGHEST_WORKING_NODE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id,
+ move_src_op_root_relpath,
+ relpath_depth(move_src_op_root_relpath)));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ if (have_row)
+ src_op_depth = svn_sqlite__column_int(stmt, 0);
+ SVN_ERR(svn_sqlite__reset(stmt));
+ if (!have_row)
+ return svn_error_createf(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE, NULL,
+ _("'%s' is not deleted"),
+ svn_dirent_local_style(
+ svn_dirent_join(wcroot->abspath, victim_relpath,
+ scratch_pool),
+ scratch_pool));
+
+ if (src_op_depth == 0)
+ SVN_ERR(suitable_for_move(wcroot, victim_relpath, scratch_pool));
+
+ /* Create a new, and empty, list for notification information. */
+ SVN_ERR(svn_sqlite__exec_statements(wcroot->sdb,
+ STMT_CREATE_UPDATE_MOVE_LIST));
+ /* Create the editor... */
+ SVN_ERR(svn_editor_create(&tc_editor, tc_editor_baton,
+ cancel_func, cancel_baton,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_editor_setcb_many(tc_editor, &editor_ops, scratch_pool));
+
+ /* ... and drive it. */
+ SVN_ERR(drive_tree_conflict_editor(tc_editor,
+ victim_relpath,
+ tc_editor_baton->move_root_dst_relpath,
+ src_op_depth,
+ operation,
+ local_change, incoming_change,
+ tc_editor_baton->old_version,
+ tc_editor_baton->new_version,
+ db, wcroot,
+ cancel_func, cancel_baton,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_wc__db_update_moved_away_conflict_victim(svn_wc__db_t *db,
+ const char *victim_abspath,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_wcroot_t *wcroot;
+ const char *local_relpath;
+ svn_wc_operation_t operation;
+ svn_wc_conflict_reason_t local_change;
+ svn_wc_conflict_action_t incoming_change;
+ svn_wc_conflict_version_t *old_version;
+ svn_wc_conflict_version_t *new_version;
+ const char *move_src_op_root_abspath, *move_src_op_root_relpath;
+
+ /* ### Check for mixed-rev src or dst? */
+
+ SVN_ERR(get_tc_info(&operation, &local_change, &incoming_change,
+ &move_src_op_root_abspath,
+ &old_version, &new_version,
+ db, victim_abspath,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(svn_wc__write_check(db, move_src_op_root_abspath, scratch_pool));
+
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath,
+ db, victim_abspath,
+ scratch_pool, scratch_pool));
+ VERIFY_USABLE_WCROOT(wcroot);
+
+ move_src_op_root_relpath
+ = svn_dirent_skip_ancestor(wcroot->abspath, move_src_op_root_abspath);
+
+ SVN_WC__DB_WITH_TXN(
+ update_moved_away_conflict_victim(
+ db, wcroot, local_relpath,
+ operation, local_change, incoming_change,
+ move_src_op_root_relpath,
+ old_version, new_version,
+ cancel_func, cancel_baton,
+ scratch_pool),
+ wcroot);
+
+ /* Send all queued up notifications. */
+ SVN_ERR(svn_wc__db_update_move_list_notify(wcroot,
+ (old_version
+ ? old_version->peg_rev
+ : SVN_INVALID_REVNUM),
+ (new_version
+ ? new_version->peg_rev
+ : SVN_INVALID_REVNUM),
+ notify_func, notify_baton,
+ scratch_pool));
+ if (notify_func)
+ {
+ svn_wc_notify_t *notify;
+
+ notify = svn_wc_create_notify(svn_dirent_join(wcroot->abspath,
+ local_relpath,
+ scratch_pool),
+ svn_wc_notify_update_completed,
+ scratch_pool);
+ notify->kind = svn_node_none;
+ notify->content_state = svn_wc_notify_state_inapplicable;
+ notify->prop_state = svn_wc_notify_state_inapplicable;
+ notify->revision = new_version->peg_rev;
+ notify_func(notify_baton, notify, scratch_pool);
+ }
+
+
+ return SVN_NO_ERROR;
+}
+
+/* Set *CAN_BUMP to TRUE if DEPTH is sufficient to cover the entire
+ BASE tree at LOCAL_RELPATH, to FALSE otherwise. */
+static svn_error_t *
+depth_sufficient_to_bump(svn_boolean_t *can_bump,
+ const char *local_relpath,
+ svn_wc__db_wcroot_t *wcroot,
+ svn_depth_t depth,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+
+ switch (depth)
+ {
+ case svn_depth_infinity:
+ *can_bump = TRUE;
+ return SVN_NO_ERROR;
+
+ case svn_depth_empty:
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_OP_DEPTH_CHILDREN));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id,
+ local_relpath, 0));
+ break;
+
+ case svn_depth_files:
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_HAS_NON_FILE_CHILDREN));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id,
+ local_relpath));
+ break;
+
+ case svn_depth_immediates:
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_HAS_GRANDCHILDREN));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id,
+ local_relpath));
+ break;
+ default:
+ SVN_ERR_MALFUNCTION();
+ }
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ *can_bump = !have_row;
+ return SVN_NO_ERROR;
+}
+
+/* Mark a move-edit conflict on MOVE_SRC_ROOT_RELPATH. */
+static svn_error_t *
+bump_mark_tree_conflict(svn_wc__db_wcroot_t *wcroot,
+ const char *move_src_root_relpath,
+ const char *move_src_op_root_relpath,
+ const char *move_dst_op_root_relpath,
+ svn_wc__db_t *db,
+ apr_pool_t *scratch_pool)
+{
+ apr_int64_t repos_id;
+ const char *repos_root_url;
+ const char *repos_uuid;
+ const char *old_repos_relpath;
+ const char *new_repos_relpath;
+ svn_revnum_t old_rev;
+ svn_revnum_t new_rev;
+ svn_node_kind_t old_kind;
+ svn_node_kind_t new_kind;
+ svn_wc_conflict_version_t *old_version;
+ svn_wc_conflict_version_t *new_version;
+
+ /* Read new (post-update) information from the new move source BASE node. */
+ SVN_ERR(svn_wc__db_base_get_info_internal(NULL, &new_kind, &new_rev,
+ &new_repos_relpath, &repos_id,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ wcroot, move_src_op_root_relpath,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_fetch_repos_info(&repos_root_url, &repos_uuid,
+ wcroot->sdb, repos_id, scratch_pool));
+
+ /* Read old (pre-update) information from the move destination node. */
+ SVN_ERR(svn_wc__db_depth_get_info(NULL, &old_kind, &old_rev,
+ &old_repos_relpath, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ wcroot, move_dst_op_root_relpath,
+ relpath_depth(move_dst_op_root_relpath),
+ scratch_pool, scratch_pool));
+
+ old_version = svn_wc_conflict_version_create2(
+ repos_root_url, repos_uuid, old_repos_relpath, old_rev,
+ old_kind, scratch_pool);
+ new_version = svn_wc_conflict_version_create2(
+ repos_root_url, repos_uuid, new_repos_relpath, new_rev,
+ new_kind, scratch_pool);
+
+ SVN_ERR(mark_tree_conflict(move_src_root_relpath,
+ wcroot, db, old_version, new_version,
+ move_dst_op_root_relpath,
+ svn_wc_operation_update,
+ old_kind, new_kind,
+ old_repos_relpath,
+ svn_wc_conflict_reason_moved_away,
+ svn_wc_conflict_action_edit,
+ move_src_op_root_relpath,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* Bump LOCAL_RELPATH, and all the children of LOCAL_RELPATH, that are
+ moved-to at op-depth greater than OP_DEPTH. SRC_DONE is a hash
+ with keys that are 'const char *' relpaths that have already been
+ bumped. Any bumped paths are added to SRC_DONE. */
+static svn_error_t *
+bump_moved_away(svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ int op_depth,
+ apr_hash_t *src_done,
+ svn_depth_t depth,
+ svn_wc__db_t *db,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+ apr_pool_t *iterpool;
+
+ iterpool = svn_pool_create(scratch_pool);
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_MOVED_PAIR3));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id, local_relpath,
+ op_depth));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ while(have_row)
+ {
+ svn_sqlite__stmt_t *stmt2;
+ const char *src_relpath, *dst_relpath;
+ int src_op_depth = svn_sqlite__column_int(stmt, 2);
+ svn_error_t *err;
+ svn_skel_t *conflict;
+ svn_depth_t src_depth = depth;
+
+ svn_pool_clear(iterpool);
+
+ src_relpath = svn_sqlite__column_text(stmt, 0, iterpool);
+ dst_relpath = svn_sqlite__column_text(stmt, 1, iterpool);
+
+ if (depth != svn_depth_infinity)
+ {
+ svn_boolean_t skip_this_src = FALSE;
+ svn_node_kind_t src_kind;
+
+ if (strcmp(src_relpath, local_relpath))
+ {
+ switch (depth)
+ {
+ case svn_depth_empty:
+ skip_this_src = TRUE;
+ break;
+ case svn_depth_files:
+ src_kind = svn_sqlite__column_token(stmt, 3, kind_map);
+ if (src_kind != svn_node_file)
+ {
+ skip_this_src = TRUE;
+ break;
+ }
+ /* Fallthrough */
+ case svn_depth_immediates:
+ if (strcmp(svn_relpath_dirname(src_relpath, scratch_pool),
+ local_relpath))
+ skip_this_src = TRUE;
+ src_depth = svn_depth_empty;
+ break;
+ default:
+ SVN_ERR_MALFUNCTION();
+ }
+ }
+
+ if (skip_this_src)
+ {
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ continue;
+ }
+ }
+
+ err = svn_sqlite__get_statement(&stmt2, wcroot->sdb,
+ STMT_HAS_LAYER_BETWEEN);
+ if (!err)
+ err = svn_sqlite__bindf(stmt2, "isdd", wcroot->wc_id, local_relpath,
+ op_depth, src_op_depth);
+ if (!err)
+ err = svn_sqlite__step(&have_row, stmt2);
+ if (!err)
+ err = svn_sqlite__reset(stmt2);
+ if (!err && !have_row)
+ {
+ svn_boolean_t can_bump;
+ const char *src_root_relpath = src_relpath;
+
+ if (op_depth == 0)
+ err = depth_sufficient_to_bump(&can_bump, src_relpath, wcroot,
+ src_depth, scratch_pool);
+ else
+ /* Having chosen to bump an entire BASE tree move we
+ always have sufficient depth to bump subtree moves. */
+ can_bump = TRUE;
+
+ if (!err)
+ {
+ if (!can_bump)
+ {
+ err = bump_mark_tree_conflict(wcroot, src_relpath,
+ src_root_relpath, dst_relpath,
+ db, scratch_pool);
+ if (err)
+ return svn_error_compose_create(err,
+ svn_sqlite__reset(stmt));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ continue;
+ }
+
+ while (relpath_depth(src_root_relpath) > src_op_depth)
+ src_root_relpath = svn_relpath_dirname(src_root_relpath,
+ iterpool);
+
+ if (!svn_hash_gets(src_done, src_relpath))
+ {
+ svn_hash_sets(src_done,
+ apr_pstrdup(result_pool, src_relpath), "");
+ err = svn_wc__db_read_conflict_internal(&conflict, wcroot,
+ src_root_relpath,
+ iterpool, iterpool);
+ /* ### TODO: check this is the right sort of tree-conflict? */
+ if (!err && !conflict)
+ {
+ /* ### TODO: verify moved_here? */
+ err = replace_moved_layer(src_relpath, dst_relpath,
+ op_depth, wcroot, iterpool);
+
+ if (!err)
+ err = bump_moved_away(wcroot, dst_relpath,
+ relpath_depth(dst_relpath),
+ src_done, depth, db,
+ result_pool, iterpool);
+ }
+ }
+ }
+ }
+
+ if (err)
+ return svn_error_compose_create(err, svn_sqlite__reset(stmt));
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ }
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__db_bump_moved_away(svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ svn_depth_t depth,
+ svn_wc__db_t *db,
+ apr_pool_t *scratch_pool)
+{
+ apr_hash_t *src_done;
+
+ SVN_ERR(svn_sqlite__exec_statements(wcroot->sdb,
+ STMT_CREATE_UPDATE_MOVE_LIST));
+
+ if (local_relpath[0] != '\0')
+ {
+ const char *dummy1, *move_dst_op_root_relpath;
+ const char *move_src_root_relpath, *move_src_op_root_relpath;
+
+ /* Is the root of the update moved away? (Impossible for the wcroot) */
+ SVN_ERR(svn_wc__db_op_depth_moved_to(&dummy1, &move_dst_op_root_relpath,
+ &move_src_root_relpath,
+ &move_src_op_root_relpath, 0,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool));
+
+ if (move_src_root_relpath)
+ {
+ if (strcmp(move_src_root_relpath, local_relpath))
+ {
+ SVN_ERR(bump_mark_tree_conflict(wcroot, move_src_root_relpath,
+ move_src_op_root_relpath,
+ move_dst_op_root_relpath,
+ db, scratch_pool));
+ return SVN_NO_ERROR;
+ }
+ }
+ }
+
+ src_done = apr_hash_make(scratch_pool);
+ SVN_ERR(bump_moved_away(wcroot, local_relpath, 0, src_done, depth, db,
+ scratch_pool, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+resolve_delete_raise_moved_away(svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ svn_wc__db_t *db,
+ svn_wc_operation_t operation,
+ svn_wc_conflict_action_t action,
+ svn_wc_conflict_version_t *old_version,
+ svn_wc_conflict_version_t *new_version,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+ int op_depth = relpath_depth(local_relpath);
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+
+ SVN_ERR(svn_sqlite__exec_statements(wcroot->sdb,
+ STMT_CREATE_UPDATE_MOVE_LIST));
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_OP_DEPTH_MOVED_PAIR));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id, local_relpath,
+ op_depth));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ while(have_row)
+ {
+ const char *moved_relpath = svn_sqlite__column_text(stmt, 0, NULL);
+ const char *move_root_dst_relpath = svn_sqlite__column_text(stmt, 1,
+ NULL);
+ const char *moved_dst_repos_relpath = svn_sqlite__column_text(stmt, 2,
+ NULL);
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(mark_tree_conflict(moved_relpath,
+ wcroot, db, old_version, new_version,
+ move_root_dst_relpath, operation,
+ svn_node_dir /* ### ? */,
+ svn_node_dir /* ### ? */,
+ moved_dst_repos_relpath,
+ svn_wc_conflict_reason_moved_away,
+ action, local_relpath,
+ iterpool));
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ }
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__db_resolve_delete_raise_moved_away(svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_wcroot_t *wcroot;
+ const char *local_relpath;
+ svn_wc_operation_t operation;
+ svn_wc_conflict_reason_t reason;
+ svn_wc_conflict_action_t action;
+ svn_wc_conflict_version_t *old_version, *new_version;
+
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath,
+ db, local_abspath,
+ scratch_pool, scratch_pool));
+ VERIFY_USABLE_WCROOT(wcroot);
+
+ SVN_ERR(get_tc_info(&operation, &reason, &action, NULL,
+ &old_version, &new_version,
+ db, local_abspath, scratch_pool, scratch_pool));
+
+ SVN_WC__DB_WITH_TXN(
+ resolve_delete_raise_moved_away(wcroot, local_relpath,
+ db, operation, action,
+ old_version, new_version,
+ scratch_pool),
+ wcroot);
+
+ SVN_ERR(svn_wc__db_update_move_list_notify(wcroot,
+ (old_version
+ ? old_version->peg_rev
+ : SVN_INVALID_REVNUM),
+ (new_version
+ ? new_version->peg_rev
+ : SVN_INVALID_REVNUM),
+ notify_func, notify_baton,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+break_move(svn_wc__db_wcroot_t *wcroot,
+ const char *src_relpath,
+ int src_op_depth,
+ const char *dst_relpath,
+ int dst_op_depth,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt;
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_CLEAR_MOVED_TO_RELPATH));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id, src_relpath,
+ src_op_depth));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+
+ /* This statement clears moved_here. */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_UPDATE_OP_DEPTH_RECURSIVE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isdd", wcroot->wc_id,
+ dst_relpath, dst_op_depth, dst_op_depth));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__db_resolve_break_moved_away_internal(svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ int op_depth,
+ apr_pool_t *scratch_pool)
+{
+ const char *dummy1, *move_dst_op_root_relpath;
+ const char *dummy2, *move_src_op_root_relpath;
+
+ /* We want to include the passed op-depth, but the function does a > check */
+ SVN_ERR(svn_wc__db_op_depth_moved_to(&dummy1, &move_dst_op_root_relpath,
+ &dummy2,
+ &move_src_op_root_relpath,
+ op_depth - 1,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR_ASSERT(move_src_op_root_relpath != NULL
+ && move_dst_op_root_relpath != NULL);
+
+ SVN_ERR(break_move(wcroot, local_relpath,
+ relpath_depth(move_src_op_root_relpath),
+ move_dst_op_root_relpath,
+ relpath_depth(move_dst_op_root_relpath),
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+break_moved_away_children_internal(svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+ apr_pool_t *iterpool;
+
+ SVN_ERR(svn_sqlite__exec_statements(wcroot->sdb,
+ STMT_CREATE_UPDATE_MOVE_LIST));
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_MOVED_PAIR2));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+
+ iterpool = svn_pool_create(scratch_pool);
+ while (have_row)
+ {
+ const char *src_relpath = svn_sqlite__column_text(stmt, 0, iterpool);
+ const char *dst_relpath = svn_sqlite__column_text(stmt, 1, iterpool);
+ int src_op_depth = svn_sqlite__column_int(stmt, 2);
+
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(break_move(wcroot, src_relpath, src_op_depth, dst_relpath,
+ relpath_depth(dst_relpath), iterpool));
+ SVN_ERR(update_move_list_add(wcroot, src_relpath,
+ svn_wc_notify_move_broken,
+ svn_node_unknown,
+ svn_wc_notify_state_inapplicable,
+ svn_wc_notify_state_inapplicable));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ }
+ svn_pool_destroy(iterpool);
+
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__db_resolve_break_moved_away(svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_wcroot_t *wcroot;
+ const char *local_relpath;
+
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath,
+ db, local_abspath,
+ scratch_pool, scratch_pool));
+ VERIFY_USABLE_WCROOT(wcroot);
+
+ SVN_WC__DB_WITH_TXN(
+ svn_wc__db_resolve_break_moved_away_internal(wcroot, local_relpath,
+ relpath_depth(local_relpath),
+ scratch_pool),
+ wcroot);
+
+ if (notify_func)
+ {
+ svn_wc_notify_t *notify;
+
+ notify = svn_wc_create_notify(svn_dirent_join(wcroot->abspath,
+ local_relpath,
+ scratch_pool),
+ svn_wc_notify_move_broken,
+ scratch_pool);
+ notify->kind = svn_node_unknown;
+ notify->content_state = svn_wc_notify_state_inapplicable;
+ notify->prop_state = svn_wc_notify_state_inapplicable;
+ notify->revision = SVN_INVALID_REVNUM;
+ notify_func(notify_baton, notify, scratch_pool);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__db_resolve_break_moved_away_children(svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_wcroot_t *wcroot;
+ const char *local_relpath;
+
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath,
+ db, local_abspath,
+ scratch_pool, scratch_pool));
+ VERIFY_USABLE_WCROOT(wcroot);
+
+ SVN_WC__DB_WITH_TXN(
+ break_moved_away_children_internal(wcroot, local_relpath, scratch_pool),
+ wcroot);
+
+ SVN_ERR(svn_wc__db_update_move_list_notify(wcroot,
+ SVN_INVALID_REVNUM,
+ SVN_INVALID_REVNUM,
+ notify_func, notify_baton,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+required_lock_for_resolve(const char **required_relpath,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+
+ *required_relpath = local_relpath;
+
+ /* This simply looks for all moves out of the LOCAL_RELPATH tree. We
+ could attempt to limit it to only those moves that are going to
+ be resolved but that would require second guessing the resolver.
+ This simple algorithm is sufficient although it may give a
+ strictly larger/deeper lock than necessary. */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_MOVED_OUTSIDE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id, local_relpath, 0));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+
+ while (have_row)
+ {
+ const char *move_dst_relpath = svn_sqlite__column_text(stmt, 1,
+ NULL);
+
+ *required_relpath
+ = svn_relpath_get_longest_ancestor(*required_relpath,
+ move_dst_relpath,
+ scratch_pool);
+
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ }
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ *required_relpath = apr_pstrdup(result_pool, *required_relpath);
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__required_lock_for_resolve(const char **required_abspath,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_wcroot_t *wcroot;
+ const char *local_relpath;
+ const char *required_relpath;
+
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath,
+ db, local_abspath,
+ scratch_pool, scratch_pool));
+ VERIFY_USABLE_WCROOT(wcroot);
+
+ SVN_WC__DB_WITH_TXN(
+ required_lock_for_resolve(&required_relpath, wcroot, local_relpath,
+ scratch_pool, scratch_pool),
+ wcroot);
+
+ *required_abspath = svn_dirent_join(wcroot->abspath, required_relpath,
+ result_pool);
+
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/libsvn_wc/wc_db_util.c b/subversion/libsvn_wc/wc_db_util.c
index 42ab5cc..a6616e4 100644
--- a/subversion/libsvn_wc/wc_db_util.c
+++ b/subversion/libsvn_wc/wc_db_util.c
@@ -80,10 +80,10 @@ svn_wc__db_util_fetch_wc_id(apr_int64_t *wc_id,
/* An SQLite application defined function that allows SQL queries to
use "relpath_depth(local_relpath)". */
static svn_error_t *
-relpath_depth(svn_sqlite__context_t *sctx,
- int argc,
- svn_sqlite__value_t *values[],
- apr_pool_t *scratch_pool)
+relpath_depth_sqlite(svn_sqlite__context_t *sctx,
+ int argc,
+ svn_sqlite__value_t *values[],
+ apr_pool_t *scratch_pool)
{
const char *path = NULL;
apr_int64_t depth;
@@ -114,6 +114,7 @@ svn_wc__db_util_open_db(svn_sqlite__db_t **sdb,
const char *dir_abspath,
const char *sdb_fname,
svn_sqlite__mode_t smode,
+ svn_boolean_t exclusive,
const char *const *my_statements,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
@@ -140,8 +141,11 @@ svn_wc__db_util_open_db(svn_sqlite__db_t **sdb,
my_statements ? my_statements : statements,
0, NULL, result_pool, scratch_pool));
+ if (exclusive)
+ SVN_ERR(svn_sqlite__exec_statements(*sdb, STMT_PRAGMA_LOCKING_MODE));
+
SVN_ERR(svn_sqlite__create_scalar_function(*sdb, "relpath_depth", 1,
- relpath_depth, NULL));
+ relpath_depth_sqlite, NULL));
return SVN_NO_ERROR;
}
@@ -149,8 +153,8 @@ svn_wc__db_util_open_db(svn_sqlite__db_t **sdb,
/* Some helpful transaction helpers.
- Instead of directly using SQLite transactions, these wrappers take care of
- simple cases by allowing consumers to worry about wrapping the wcroot and
+ Instead of directly using SQLite transactions, these wrappers
+ relieve the consumer from the need to wrap the wcroot and
local_relpath, which are almost always used within the transaction.
This also means if we later want to implement some wc_db-specific txn
@@ -197,6 +201,7 @@ svn_wc__db_with_txn(svn_wc__db_wcroot_t *wcroot,
apr_pool_t *scratch_pool)
{
struct txn_baton_t tb;
+
tb.wcroot = wcroot;
tb.local_relpath = local_relpath;
tb.cb_func = cb_func;
diff --git a/subversion/libsvn_wc/wc_db_wcroot.c b/subversion/libsvn_wc/wc_db_wcroot.c
index bdcbb7f..a111073 100644
--- a/subversion/libsvn_wc/wc_db_wcroot.c
+++ b/subversion/libsvn_wc/wc_db_wcroot.c
@@ -26,6 +26,9 @@
#include <assert.h>
#include "svn_dirent_uri.h"
+#include "svn_hash.h"
+#include "svn_path.h"
+#include "svn_version.h"
#include "wc.h"
#include "adm_files.h"
@@ -100,16 +103,16 @@ get_old_version(int *version,
of LOCAL_ABSPATH, using DB and SCRATCH_POOL as needed.
This function may do strange things, but at long as it comes up with the
- Right Answer, we should be happy.
-
- Sets *KIND to svn_node_dir for symlinks. */
+ Right Answer, we should be happy. */
static svn_error_t *
get_path_kind(svn_node_kind_t *kind,
- svn_boolean_t *is_symlink,
svn_wc__db_t *db,
const char *local_abspath,
apr_pool_t *scratch_pool)
{
+ svn_boolean_t special;
+ svn_node_kind_t node_kind;
+
/* This implements a *really* simple LRU cache, where "simple" is defined
as "only one element". In other words, we remember the most recently
queried path, and nothing else. This gives >80% cache hits. */
@@ -119,7 +122,6 @@ get_path_kind(svn_node_kind_t *kind,
{
/* Cache hit! */
*kind = db->parse_cache.kind;
- *is_symlink = db->parse_cache.is_symlink;
return SVN_NO_ERROR;
}
@@ -133,17 +135,17 @@ get_path_kind(svn_node_kind_t *kind,
svn_stringbuf_set(db->parse_cache.abspath, local_abspath);
}
- SVN_ERR(svn_io_check_special_path(local_abspath, kind,
- is_symlink, scratch_pool));
+ SVN_ERR(svn_io_check_special_path(local_abspath, &node_kind,
+ &special, scratch_pool));
- db->parse_cache.kind = *kind;
- db->parse_cache.is_symlink = *is_symlink;
+ db->parse_cache.kind = (special ? svn_node_symlink : node_kind);
+ *kind = db->parse_cache.kind;
return SVN_NO_ERROR;
}
-/* */
+/* Return an error if the work queue in SDB is non-empty. */
static svn_error_t *
verify_no_work(svn_sqlite__db_t *sdb)
{
@@ -186,21 +188,37 @@ close_wcroot(void *data)
svn_error_t *
svn_wc__db_open(svn_wc__db_t **db,
- const svn_config_t *config,
- svn_boolean_t auto_upgrade,
+ svn_config_t *config,
+ svn_boolean_t open_without_upgrade,
svn_boolean_t enforce_empty_wq,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
*db = apr_pcalloc(result_pool, sizeof(**db));
(*db)->config = config;
- (*db)->auto_upgrade = auto_upgrade;
+ (*db)->verify_format = !open_without_upgrade;
(*db)->enforce_empty_wq = enforce_empty_wq;
(*db)->dir_data = apr_hash_make(result_pool);
+ (*db)->state_pool = result_pool;
+
/* Don't need to initialize (*db)->parse_cache, due to the calloc above */
+ if (config)
+ {
+ svn_error_t *err;
+ svn_boolean_t sqlite_exclusive = FALSE;
- (*db)->state_pool = result_pool;
+ err = svn_config_get_bool(config, &sqlite_exclusive,
+ SVN_CONFIG_SECTION_WORKING_COPY,
+ SVN_CONFIG_OPTION_SQLITE_EXCLUSIVE,
+ FALSE);
+ if (err)
+ {
+ svn_error_clear(err);
+ }
+ else
+ (*db)->exclusive = sqlite_exclusive;
+ }
return SVN_NO_ERROR;
}
@@ -222,9 +240,9 @@ svn_wc__db_close(svn_wc__db_t *db)
const char *local_abspath = svn__apr_hash_index_key(hi);
if (wcroot->sdb)
- apr_hash_set(roots, wcroot->abspath, APR_HASH_KEY_STRING, wcroot);
+ svn_hash_sets(roots, wcroot->abspath, wcroot);
- apr_hash_set(db->dir_data, local_abspath, APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(db->dir_data, local_abspath, NULL);
}
/* Run the cleanup for each WCROOT. */
@@ -239,12 +257,12 @@ svn_wc__db_pdh_create_wcroot(svn_wc__db_wcroot_t **wcroot,
svn_sqlite__db_t *sdb,
apr_int64_t wc_id,
int format,
- svn_boolean_t auto_upgrade,
+ svn_boolean_t verify_format,
svn_boolean_t enforce_empty_wq,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- if (sdb != NULL)
+ if (sdb && format == FORMAT_FROM_SDB)
SVN_ERR(svn_sqlite__read_schema_version(&format, sdb, scratch_pool));
/* If we construct a wcroot, then we better have a format. */
@@ -277,7 +295,7 @@ svn_wc__db_pdh_create_wcroot(svn_wc__db_wcroot_t **wcroot,
/* Verify that no work items exists. If they do, then our integrity is
suspect and, thus, we cannot use this database. */
if (format >= SVN_WC__HAS_WORK_QUEUE
- && (enforce_empty_wq || (format < SVN_WC__VERSION && auto_upgrade)))
+ && (enforce_empty_wq || (format < SVN_WC__VERSION && verify_format)))
{
svn_error_t *err = verify_no_work(sdb);
if (err)
@@ -285,7 +303,7 @@ svn_wc__db_pdh_create_wcroot(svn_wc__db_wcroot_t **wcroot,
/* Special message for attempts to upgrade a 1.7-dev wc with
outstanding workqueue items. */
if (err->apr_err == SVN_ERR_WC_CLEANUP_REQUIRED
- && format < SVN_WC__VERSION && auto_upgrade)
+ && format < SVN_WC__VERSION && verify_format)
err = svn_error_quick_wrap(err, _("Cleanup with an older 1.7 "
"client before upgrading with "
"this client"));
@@ -294,9 +312,17 @@ svn_wc__db_pdh_create_wcroot(svn_wc__db_wcroot_t **wcroot,
}
/* Auto-upgrade the SDB if possible. */
- if (format < SVN_WC__VERSION && auto_upgrade)
- SVN_ERR(svn_wc__upgrade_sdb(&format, wcroot_abspath, sdb, format,
- scratch_pool));
+ if (format < SVN_WC__VERSION && verify_format)
+ {
+ return svn_error_createf(SVN_ERR_WC_UPGRADE_REQUIRED, NULL,
+ _("The working copy at '%s'\nis too old "
+ "(format %d) to work with client version "
+ "'%s' (expects format %d). You need to "
+ "upgrade the working copy first.\n"),
+ svn_dirent_local_style(wcroot_abspath,
+ scratch_pool),
+ format, SVN_VERSION, SVN_WC__VERSION);
+ }
*wcroot = apr_palloc(result_pool, sizeof(**wcroot));
@@ -354,6 +380,90 @@ compute_relpath(const svn_wc__db_wcroot_t *wcroot,
}
+/* Return in *LINK_TARGET_ABSPATH the absolute path the symlink at
+ * LOCAL_ABSPATH is pointing to. Perform all allocations in POOL. */
+static svn_error_t *
+read_link_target(const char **link_target_abspath,
+ const char *local_abspath,
+ apr_pool_t *pool)
+{
+ svn_string_t *link_target;
+ const char *canon_link_target;
+
+ SVN_ERR(svn_io_read_link(&link_target, local_abspath, pool));
+ if (link_target->len == 0)
+ return svn_error_createf(SVN_ERR_WC_NOT_SYMLINK, NULL,
+ _("The symlink at '%s' points nowhere"),
+ svn_dirent_local_style(local_abspath, pool));
+
+ canon_link_target = svn_dirent_canonicalize(link_target->data, pool);
+
+ /* Treat relative symlinks as relative to LOCAL_ABSPATH's parent. */
+ if (!svn_dirent_is_absolute(canon_link_target))
+ canon_link_target = svn_dirent_join(svn_dirent_dirname(local_abspath,
+ pool),
+ canon_link_target, pool);
+
+ /* Collapse any .. in the symlink part of the path. */
+ if (svn_path_is_backpath_present(canon_link_target))
+ SVN_ERR(svn_dirent_get_absolute(link_target_abspath, canon_link_target,
+ pool));
+ else
+ *link_target_abspath = canon_link_target;
+
+ return SVN_NO_ERROR;
+}
+
+/* Verify if the sqlite_stat1 table exists and if not tries to add
+ this table (but ignores errors on adding the schema) */
+static svn_error_t *
+verify_stats_table(svn_sqlite__db_t *sdb,
+ int format,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+
+ if (format != SVN_WC__ENSURE_STAT1_TABLE)
+ return SVN_NO_ERROR;
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, sdb,
+ STMT_HAVE_STAT1_TABLE));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ SVN_ERR(svn_sqlite__reset(stmt));
+
+ if (!have_row)
+ {
+ svn_error_clear(
+ svn_wc__db_install_schema_statistics(sdb, scratch_pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Sqlite transaction helper for opening the db in
+ svn_wc__db_wcroot_parse_local_abspath() to avoid multiple
+ db operations that each obtain and release a lock */
+static svn_error_t *
+fetch_sdb_info(apr_int64_t *wc_id,
+ int *format,
+ svn_sqlite__db_t *sdb,
+ apr_pool_t *scratch_pool)
+{
+ *wc_id = -1;
+ *format = -1;
+
+ SVN_SQLITE__WITH_LOCK4(
+ svn_wc__db_util_fetch_wc_id(wc_id, sdb, scratch_pool),
+ svn_sqlite__read_schema_version(format, sdb, scratch_pool),
+ verify_stats_table(sdb, *format, scratch_pool),
+ SVN_NO_ERROR,
+ sdb);
+
+ return SVN_NO_ERROR;
+}
+
+
svn_error_t *
svn_wc__db_wcroot_parse_local_abspath(svn_wc__db_wcroot_t **wcroot,
const char **local_relpath,
@@ -369,19 +479,19 @@ svn_wc__db_wcroot_parse_local_abspath(svn_wc__db_wcroot_t **wcroot,
svn_wc__db_wcroot_t *probe_wcroot;
svn_wc__db_wcroot_t *found_wcroot = NULL;
const char *scan_abspath;
- svn_sqlite__db_t *sdb;
+ svn_sqlite__db_t *sdb = NULL;
svn_boolean_t moved_upwards = FALSE;
svn_boolean_t always_check = FALSE;
- svn_boolean_t is_symlink;
int wc_format = 0;
const char *adm_relpath;
+ /* Non-NULL if WCROOT is found through a symlink: */
+ const char *symlink_wcroot_abspath = NULL;
/* ### we need more logic for finding the database (if it is located
### outside of the wcroot) and then managing all of that within DB.
### for now: play quick & dirty. */
- probe_wcroot = apr_hash_get(db->dir_data, local_abspath,
- APR_HASH_KEY_STRING);
+ probe_wcroot = svn_hash_gets(db->dir_data, local_abspath);
if (probe_wcroot != NULL)
{
*wcroot = probe_wcroot;
@@ -401,8 +511,8 @@ svn_wc__db_wcroot_parse_local_abspath(svn_wc__db_wcroot_t **wcroot,
### rid of this stat() call. it is going to happen for EVERY call
### into wc_db which references a file. calls for directories could
### get an early-exit in the hash lookup just above. */
- SVN_ERR(get_path_kind(&kind, &is_symlink, db, local_abspath, scratch_pool));
- if (kind != svn_node_dir || is_symlink)
+ SVN_ERR(get_path_kind(&kind, db, local_abspath, scratch_pool));
+ if (kind != svn_node_dir)
{
/* If the node specified by the path is NOT present, then it cannot
possibly be a directory containing ".svn/wc.db".
@@ -416,8 +526,7 @@ svn_wc__db_wcroot_parse_local_abspath(svn_wc__db_wcroot_t **wcroot,
scratch_pool);
/* Is this directory in our hash? */
- probe_wcroot = apr_hash_get(db->dir_data, local_dir_abspath,
- APR_HASH_KEY_STRING);
+ probe_wcroot = svn_hash_gets(db->dir_data, local_dir_abspath);
if (probe_wcroot != NULL)
{
const char *dir_relpath;
@@ -484,14 +593,24 @@ svn_wc__db_wcroot_parse_local_abspath(svn_wc__db_wcroot_t **wcroot,
we're caching database handles, it make sense to be as permissive
as the filesystem allows. */
err = svn_wc__db_util_open_db(&sdb, local_abspath, SDB_FILE,
- svn_sqlite__mode_readwrite, NULL,
+ svn_sqlite__mode_readwrite,
+ db->exclusive, NULL,
db->state_pool, scratch_pool);
if (err == NULL)
{
#ifdef SVN_DEBUG
/* Install self-verification trigger statements. */
- SVN_ERR(svn_sqlite__exec_statements(sdb,
- STMT_VERIFICATION_TRIGGERS));
+ err = svn_sqlite__exec_statements(sdb,
+ STMT_VERIFICATION_TRIGGERS);
+ if (err && err->apr_err == SVN_ERR_SQLITE_ERROR)
+ {
+ /* Verification triggers can fail to install on old 1.7-dev
+ * formats which didn't have a NODES table yet. Ignore sqlite
+ * errors so such working copies can be upgraded. */
+ svn_error_clear(err);
+ }
+ else
+ SVN_ERR(err);
#endif
break;
}
@@ -528,7 +647,7 @@ svn_wc__db_wcroot_parse_local_abspath(svn_wc__db_wcroot_t **wcroot,
* (Issue #2557, #3987). If so, try again, this time scanning
* for a db within the directory the symlink points to,
* rather than within the symlink's parent directory. */
- if (is_symlink)
+ if (kind == svn_node_symlink)
{
svn_node_kind_t resolved_kind;
@@ -540,14 +659,15 @@ svn_wc__db_wcroot_parse_local_abspath(svn_wc__db_wcroot_t **wcroot,
if (resolved_kind == svn_node_dir)
{
/* Is this directory recorded in our hash? */
- found_wcroot = apr_hash_get(db->dir_data, local_abspath,
- APR_HASH_KEY_STRING);
+ found_wcroot = svn_hash_gets(db->dir_data, local_abspath);
if (found_wcroot)
break;
+ symlink_wcroot_abspath = local_abspath;
+ SVN_ERR(read_link_target(&local_abspath, local_abspath,
+ scratch_pool));
try_symlink_as_dir:
kind = svn_node_dir;
- is_symlink = FALSE;
moved_upwards = FALSE;
local_dir_abspath = local_abspath;
build_relpath = "";
@@ -565,10 +685,10 @@ try_symlink_as_dir:
local_abspath = svn_dirent_dirname(local_abspath, scratch_pool);
moved_upwards = TRUE;
+ symlink_wcroot_abspath = NULL;
/* Is the parent directory recorded in our hash? */
- found_wcroot = apr_hash_get(db->dir_data, local_abspath,
- APR_HASH_KEY_STRING);
+ found_wcroot = svn_hash_gets(db->dir_data, local_abspath);
if (found_wcroot != NULL)
break;
}
@@ -584,9 +704,10 @@ try_symlink_as_dir:
/* We finally found the database. Construct a wcroot_t for it. */
apr_int64_t wc_id;
+ int format;
svn_error_t *err;
- err = svn_wc__db_util_fetch_wc_id(&wc_id, sdb, scratch_pool);
+ err = fetch_sdb_info(&wc_id, &format, sdb, scratch_pool);
if (err)
{
if (err->apr_err == SVN_ERR_WC_CORRUPT)
@@ -602,34 +723,111 @@ try_symlink_as_dir:
inside the wcroot, but we know the abspath is this directory
(ie. where we found it). */
- SVN_ERR(svn_wc__db_pdh_create_wcroot(wcroot,
- apr_pstrdup(db->state_pool, local_abspath),
- sdb, wc_id, FORMAT_FROM_SDB,
- db->auto_upgrade, db->enforce_empty_wq,
- db->state_pool, scratch_pool));
+ err = svn_wc__db_pdh_create_wcroot(wcroot,
+ apr_pstrdup(db->state_pool,
+ symlink_wcroot_abspath
+ ? symlink_wcroot_abspath
+ : local_abspath),
+ sdb, wc_id, format,
+ db->verify_format, db->enforce_empty_wq,
+ db->state_pool, scratch_pool);
+ if (err && (err->apr_err == SVN_ERR_WC_UNSUPPORTED_FORMAT ||
+ err->apr_err == SVN_ERR_WC_UPGRADE_REQUIRED) &&
+ kind == svn_node_symlink)
+ {
+ /* We found an unsupported WC after traversing upwards from a
+ * symlink. Fall through to code below to check if the symlink
+ * points at a supported WC. */
+ svn_error_clear(err);
+ *wcroot = NULL;
+ }
+ else if (err)
+ {
+ /* Close handle if we are not going to use it to support
+ upgrading with exclusive wc locking. */
+ return svn_error_compose_create(err, svn_sqlite__close(sdb));
+ }
}
else
{
- /* We found a wc-1 working copy directory. */
+ /* We found something that looks like a wc-1 working copy directory.
+ However, if the format version is 12 and the .svn/entries file
+ is only 3 bytes long, then it's a breadcrumb in a wc-ng working
+ copy that's missing an .svn/wc.db, or its .svn/wc.db is corrupt. */
+ if (wc_format == SVN_WC__WC_NG_VERSION /* 12 */)
+ {
+ apr_finfo_t info;
+
+ /* Check attributes of .svn/entries */
+ const char *admin_abspath = svn_wc__adm_child(
+ local_abspath, SVN_WC__ADM_ENTRIES, scratch_pool);
+ svn_error_t *err = svn_io_stat(&info, admin_abspath, APR_FINFO_SIZE,
+ scratch_pool);
+
+ /* If the former does not succeed, something is seriously wrong. */
+ if (err)
+ return svn_error_createf(
+ SVN_ERR_WC_CORRUPT, err,
+ _("The working copy at '%s' is corrupt."),
+ svn_dirent_local_style(local_abspath, scratch_pool));
+ svn_error_clear(err);
+
+ if (3 == info.size)
+ {
+ /* Check existence of .svn/wc.db */
+ admin_abspath = svn_wc__adm_child(local_abspath, SDB_FILE,
+ scratch_pool);
+ err = svn_io_stat(&info, admin_abspath, APR_FINFO_SIZE,
+ scratch_pool);
+ if (err && APR_STATUS_IS_ENOENT(err->apr_err))
+ {
+ svn_error_clear(err);
+ return svn_error_createf(
+ SVN_ERR_WC_CORRUPT, NULL,
+ _("The working copy database at '%s' is missing."),
+ svn_dirent_local_style(local_abspath, scratch_pool));
+ }
+ else
+ /* We should never have reached this point in the code
+ if .svn/wc.db exists; therefore it's best to assume
+ it's corrupt. */
+ return svn_error_createf(
+ SVN_ERR_WC_CORRUPT, err,
+ _("The working copy database at '%s' is corrupt."),
+ svn_dirent_local_style(local_abspath, scratch_pool));
+ }
+ }
+
SVN_ERR(svn_wc__db_pdh_create_wcroot(wcroot,
- apr_pstrdup(db->state_pool, local_abspath),
+ apr_pstrdup(db->state_pool,
+ symlink_wcroot_abspath
+ ? symlink_wcroot_abspath
+ : local_abspath),
NULL, UNKNOWN_WC_ID, wc_format,
- db->auto_upgrade, db->enforce_empty_wq,
+ db->verify_format, db->enforce_empty_wq,
db->state_pool, scratch_pool));
}
- {
- const char *dir_relpath;
+ if (*wcroot)
+ {
+ const char *dir_relpath;
+
+ if (symlink_wcroot_abspath)
+ {
+ /* The WCROOT was found through a symlink pointing at the root of
+ * the WC. Cache the WCROOT under the symlink's path. */
+ local_dir_abspath = symlink_wcroot_abspath;
+ }
- /* The subdirectory's relpath is easily computed relative to the
- wcroot that we just found. */
- dir_relpath = compute_relpath(*wcroot, local_dir_abspath, NULL);
+ /* The subdirectory's relpath is easily computed relative to the
+ wcroot that we just found. */
+ dir_relpath = compute_relpath(*wcroot, local_dir_abspath, NULL);
- /* And the result local_relpath may include a filename. */
- *local_relpath = svn_relpath_join(dir_relpath, build_relpath, result_pool);
- }
+ /* And the result local_relpath may include a filename. */
+ *local_relpath = svn_relpath_join(dir_relpath, build_relpath, result_pool);
+ }
- if (is_symlink)
+ if (kind == svn_node_symlink)
{
svn_boolean_t retry_if_dir = FALSE;
svn_wc__db_status_t status;
@@ -640,34 +838,39 @@ try_symlink_as_dir:
* in this DB -- in that case, use this wcroot. Else, if the symlink
* points to a directory, try to find a wcroot in that directory
* instead. */
-
- err = svn_wc__db_read_info_internal(&status, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, &conflicted, NULL, NULL, NULL,
- NULL, NULL, NULL,
- *wcroot, *local_relpath,
- scratch_pool, scratch_pool);
- if (err)
+
+ if (*wcroot)
{
- if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND
- && !SVN_WC__ERR_IS_NOT_CURRENT_WC(err))
- return svn_error_trace(err);
+ err = svn_wc__db_read_info_internal(&status, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, &conflicted,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, *wcroot, *local_relpath,
+ scratch_pool, scratch_pool);
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND
+ && !SVN_WC__ERR_IS_NOT_CURRENT_WC(err))
+ return svn_error_trace(err);
- svn_error_clear(err);
- retry_if_dir = TRUE; /* The symlink is unversioned. */
+ svn_error_clear(err);
+ retry_if_dir = TRUE; /* The symlink is unversioned. */
+ }
+ else
+ {
+ /* The symlink is versioned, or obstructs a versioned node.
+ * Ignore non-conflicted not-present/excluded nodes.
+ * This allows the symlink to redirect the wcroot query to a
+ * directory, regardless of 'invisible' nodes in this WC. */
+ retry_if_dir = ((status == svn_wc__db_status_not_present ||
+ status == svn_wc__db_status_excluded ||
+ status == svn_wc__db_status_server_excluded)
+ && !conflicted);
+ }
}
else
- {
- /* The symlink is versioned, or obstructs a versioned node.
- * Ignore non-conflicted not-present/excluded nodes.
- * This allows the symlink to redirect the wcroot query to a
- * directory, regardless of 'invisible' nodes in this WC. */
- retry_if_dir = ((status == svn_wc__db_status_not_present ||
- status == svn_wc__db_status_excluded ||
- status == svn_wc__db_status_server_excluded)
- && !conflicted);
- }
+ retry_if_dir = TRUE;
if (retry_if_dir)
{
@@ -678,18 +881,23 @@ try_symlink_as_dir:
scratch_pool));
if (resolved_kind == svn_node_dir)
{
- local_abspath = original_abspath;
+ symlink_wcroot_abspath = original_abspath;
+ SVN_ERR(read_link_target(&local_abspath, original_abspath,
+ scratch_pool));
+ /* This handle was opened in this function but is not going
+ to be used further so close it. */
+ if (sdb)
+ SVN_ERR(svn_sqlite__close(sdb));
goto try_symlink_as_dir;
}
}
- }
+ }
/* We've found the appropriate WCROOT for the requested path. Stash
it into that path's directory. */
- apr_hash_set(db->dir_data,
- apr_pstrdup(db->state_pool, local_dir_abspath),
- APR_HASH_KEY_STRING,
- *wcroot);
+ svn_hash_sets(db->dir_data,
+ apr_pstrdup(db->state_pool, local_dir_abspath),
+ *wcroot);
/* Did we traverse up to parent directories? */
if (!moved_upwards)
@@ -712,12 +920,11 @@ try_symlink_as_dir:
const char *parent_dir = svn_dirent_dirname(scan_abspath, scratch_pool);
svn_wc__db_wcroot_t *parent_wcroot;
- parent_wcroot = apr_hash_get(db->dir_data, parent_dir,
- APR_HASH_KEY_STRING);
+ parent_wcroot = svn_hash_gets(db->dir_data, parent_dir);
if (parent_wcroot == NULL)
{
- apr_hash_set(db->dir_data, apr_pstrdup(db->state_pool, parent_dir),
- APR_HASH_KEY_STRING, *wcroot);
+ svn_hash_sets(db->dir_data, apr_pstrdup(db->state_pool, parent_dir),
+ *wcroot);
}
/* Move up a directory, stopping when we reach the directory where
@@ -735,8 +942,7 @@ svn_wc__db_drop_root(svn_wc__db_t *db,
const char *local_abspath,
apr_pool_t *scratch_pool)
{
- svn_wc__db_wcroot_t *root_wcroot = apr_hash_get(db->dir_data, local_abspath,
- APR_HASH_KEY_STRING);
+ svn_wc__db_wcroot_t *root_wcroot = svn_hash_gets(db->dir_data, local_abspath);
apr_hash_index_t *hi;
apr_status_t result;
@@ -756,8 +962,7 @@ svn_wc__db_drop_root(svn_wc__db_t *db,
svn_wc__db_wcroot_t *wcroot = svn__apr_hash_index_val(hi);
if (wcroot == root_wcroot)
- apr_hash_set(db->dir_data,
- svn__apr_hash_index_key(hi), APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(db->dir_data, svn__apr_hash_index_key(hi), NULL);
}
result = apr_pool_cleanup_run(db->state_pool, root_wcroot, close_wcroot);
diff --git a/subversion/libsvn_wc/wcroot_anchor.c b/subversion/libsvn_wc/wcroot_anchor.c
new file mode 100644
index 0000000..913a61b
--- /dev/null
+++ b/subversion/libsvn_wc/wcroot_anchor.c
@@ -0,0 +1,227 @@
+/*
+ * wcroot_anchor.c : wcroot and anchor functions
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "svn_types.h"
+#include "svn_pools.h"
+#include "svn_string.h"
+#include "svn_dirent_uri.h"
+#include "svn_error.h"
+#include "svn_io.h"
+#include "svn_private_config.h"
+
+#include "wc.h"
+
+#include "private/svn_wc_private.h"
+
+/* ABOUT ANCHOR AND TARGET, AND svn_wc_get_actual_target2()
+
+ THE GOAL
+
+ Note the following actions, where X is the thing we wish to update,
+ P is a directory whose repository URL is the parent of
+ X's repository URL, N is directory whose repository URL is *not*
+ the parent directory of X (including the case where N is not a
+ versioned resource at all):
+
+ 1. `svn up .' from inside X.
+ 2. `svn up ...P/X' from anywhere.
+ 3. `svn up ...N/X' from anywhere.
+
+ For the purposes of the discussion, in the '...N/X' situation, X is
+ said to be a "working copy (WC) root" directory.
+
+ Now consider the four cases for X's type (file/dir) in the working
+ copy vs. the repository:
+
+ A. dir in working copy, dir in repos.
+ B. dir in working copy, file in repos.
+ C. file in working copy, dir in repos.
+ D. file in working copy, file in repos.
+
+ Here are the results we expect for each combination of the above:
+
+ 1A. Successfully update X.
+ 1B. Error (you don't want to remove your current working
+ directory out from underneath the application).
+ 1C. N/A (you can't be "inside X" if X is a file).
+ 1D. N/A (you can't be "inside X" if X is a file).
+
+ 2A. Successfully update X.
+ 2B. Successfully update X.
+ 2C. Successfully update X.
+ 2D. Successfully update X.
+
+ 3A. Successfully update X.
+ 3B. Error (you can't create a versioned file X inside a
+ non-versioned directory).
+ 3C. N/A (you can't have a versioned file X in directory that is
+ not its repository parent).
+ 3D. N/A (you can't have a versioned file X in directory that is
+ not its repository parent).
+
+ To summarize, case 2 always succeeds, and cases 1 and 3 always fail
+ (or can't occur) *except* when the target is a dir that remains a
+ dir after the update.
+
+ ACCOMPLISHING THE GOAL
+
+ Updates are accomplished by driving an editor, and an editor is
+ "rooted" on a directory. So, in order to update a file, we need to
+ break off the basename of the file, rooting the editor in that
+ file's parent directory, and then updating only that file, not the
+ other stuff in its parent directory.
+
+ Secondly, we look at the case where we wish to update a directory.
+ This is typically trivial. However, one problematic case, exists
+ when we wish to update a directory that has been removed from the
+ repository and replaced with a file of the same name. If we root
+ our edit at the initial directory, there is no editor mechanism for
+ deleting that directory and replacing it with a file (this would be
+ like having an editor now anchored on a file, which is disallowed).
+
+ All that remains is to have a function with the knowledge required
+ to properly decide where to root our editor, and what to act upon
+ with that now-rooted editor. Given a path to be updated, this
+ function should conditionally split that path into an "anchor" and
+ a "target", where the "anchor" is the directory at which the update
+ editor is rooted (meaning, editor->open_root() is called with
+ this directory in mind), and the "target" is the actual intended
+ subject of the update.
+
+ svn_wc_get_actual_target2() is that function.
+
+ So, what are the conditions?
+
+ Case I: Any time X is '.' (implying it is a directory), we won't
+ lop off a basename. So we'll root our editor at X, and update all
+ of X.
+
+ Cases II & III: Any time we are trying to update some path ...N/X,
+ we again will not lop off a basename. We can't root an editor at
+ ...N with X as a target, either because ...N isn't a versioned
+ resource at all (Case II) or because X is X is not a child of ...N
+ in the repository (Case III). We root at X, and update X.
+
+ Cases IV-???: We lop off a basename when we are updating a
+ path ...P/X, rooting our editor at ...P and updating X, or when X
+ is missing from disk.
+
+ These conditions apply whether X is a file or directory.
+
+ ---
+
+ As it turns out, commits need to have a similar check in place,
+ too, specifically for the case where a single directory is being
+ committed (we have to anchor at that directory's parent in case the
+ directory itself needs to be modified).
+*/
+
+
+svn_error_t *
+svn_wc_check_root(svn_boolean_t *is_wcroot,
+ svn_boolean_t *is_switched,
+ svn_node_kind_t *kind,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *scratch_pool)
+{
+ SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+
+ return svn_error_trace(svn_wc__db_is_switched(is_wcroot,is_switched, kind,
+ wc_ctx->db, local_abspath,
+ scratch_pool));
+}
+
+svn_error_t *
+svn_wc__is_wcroot(svn_boolean_t *is_wcroot,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *scratch_pool)
+{
+ return svn_error_trace(svn_wc__db_is_wcroot(is_wcroot,
+ wc_ctx->db,
+ local_abspath,
+ scratch_pool));
+}
+
+
+svn_error_t *
+svn_wc__get_wcroot(const char **wcroot_abspath,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ return svn_wc__db_get_wcroot(wcroot_abspath, wc_ctx->db,
+ local_abspath, result_pool, scratch_pool);
+}
+
+
+svn_error_t *
+svn_wc_get_actual_target2(const char **anchor,
+ const char **target,
+ svn_wc_context_t *wc_ctx,
+ const char *path,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_boolean_t is_wc_root, is_switched;
+ svn_node_kind_t kind;
+ const char *local_abspath;
+ svn_error_t *err;
+
+ SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, scratch_pool));
+
+ err = svn_wc__db_is_switched(&is_wc_root, &is_switched, &kind,
+ wc_ctx->db, local_abspath,
+ scratch_pool);
+
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND &&
+ err->apr_err != SVN_ERR_WC_NOT_WORKING_COPY)
+ return svn_error_trace(err);
+
+ svn_error_clear(err);
+ is_wc_root = FALSE;
+ is_switched = FALSE;
+ }
+
+ /* If PATH is not a WC root, or if it is a file, lop off a basename. */
+ if (!(is_wc_root || is_switched) || (kind != svn_node_dir))
+ {
+ svn_dirent_split(anchor, target, path, result_pool);
+ }
+ else
+ {
+ *anchor = apr_pstrdup(result_pool, path);
+ *target = "";
+ }
+
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/libsvn_wc/workqueue.c b/subversion/libsvn_wc/workqueue.c
index 48bed38..b034d7d 100644
--- a/subversion/libsvn_wc/workqueue.c
+++ b/subversion/libsvn_wc/workqueue.c
@@ -34,6 +34,7 @@
#include "wc_db.h"
#include "workqueue.h"
#include "adm_files.h"
+#include "conflicts.h"
#include "translate.h"
#include "svn_private_config.h"
@@ -41,7 +42,6 @@
/* Workqueue operation names. */
-#define OP_BASE_REMOVE "base-remove"
#define OP_FILE_COMMIT "file-commit"
#define OP_FILE_INSTALL "file-install"
#define OP_FILE_REMOVE "file-remove"
@@ -49,18 +49,26 @@
#define OP_FILE_COPY_TRANSLATED "file-translate"
#define OP_SYNC_FILE_FLAGS "sync-file-flags"
#define OP_PREJ_INSTALL "prej-install"
+#define OP_DIRECTORY_REMOVE "dir-remove"
+#define OP_DIRECTORY_INSTALL "dir-install"
+
+#define OP_POSTUPGRADE "postupgrade"
+
+/* Legacy items */
+#define OP_BASE_REMOVE "base-remove"
#define OP_RECORD_FILEINFO "record-fileinfo"
#define OP_TMP_SET_TEXT_CONFLICT_MARKERS "tmp-set-text-conflict-markers"
#define OP_TMP_SET_PROPERTY_CONFLICT_MARKER "tmp-set-property-conflict-marker"
-#define OP_POSTUPGRADE "postupgrade"
/* For work queue debugging. Generates output about its operation. */
/* #define SVN_DEBUG_WORK_QUEUE */
+typedef struct work_item_baton_t work_item_baton_t;
struct work_item_dispatch {
const char *name;
- svn_error_t *(*func)(svn_wc__db_t *db,
+ svn_error_t *(*func)(work_item_baton_t *wqb,
+ svn_wc__db_t *db,
const svn_skel_t *work_item,
const char *wri_abspath,
svn_cancel_func_t cancel_func,
@@ -68,30 +76,12 @@ struct work_item_dispatch {
apr_pool_t *scratch_pool);
};
-
+/* Forward definition */
static svn_error_t *
-get_and_record_fileinfo(svn_wc__db_t *db,
+get_and_record_fileinfo(work_item_baton_t *wqb,
const char *local_abspath,
svn_boolean_t ignore_enoent,
- apr_pool_t *scratch_pool)
-{
- const svn_io_dirent2_t *dirent;
-
- SVN_ERR(svn_io_stat_dirent(&dirent, local_abspath, ignore_enoent,
- scratch_pool, scratch_pool));
-
- if (dirent->kind == svn_node_none)
- {
- /* Skip file not found if ignore_enoent */
- return SVN_NO_ERROR;
- }
-
- return svn_error_trace(svn_wc__db_global_record_fileinfo(
- db, local_abspath,
- dirent->filesize, dirent->mtime,
- scratch_pool));
-}
-
+ apr_pool_t *scratch_pool);
/* ------------------------------------------------------------------------ */
/* OP_REMOVE_BASE */
@@ -99,116 +89,14 @@ get_and_record_fileinfo(svn_wc__db_t *db,
/* Removes a BASE_NODE and all it's data, leaving any adds and copies as is.
Do this as a depth first traversal to make sure than any parent still exists
on error conditions.
-
- ### This function needs review for 4th tree behavior.*/
-static svn_error_t *
-remove_base_node(svn_wc__db_t *db,
- const char *local_abspath,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- apr_pool_t *scratch_pool)
-{
- svn_wc__db_status_t base_status, wrk_status;
- svn_wc__db_kind_t base_kind, wrk_kind;
- svn_boolean_t have_base, have_work;
- svn_error_t *err;
-
- if (cancel_func)
- SVN_ERR(cancel_func(cancel_baton));
-
- err = svn_wc__db_read_info(&wrk_status, &wrk_kind, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL,
- &have_base, NULL, &have_work,
- db, local_abspath, scratch_pool, scratch_pool);
- if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
- {
- /* No node to delete, this can happen when the wq item is rerun. */
- svn_error_clear(err);
- return SVN_NO_ERROR;
- }
-
- if(! have_base)
- /* No base node to delete, this can happen when the wq item is rerun. */
- return SVN_NO_ERROR;
-
- if (wrk_status == svn_wc__db_status_normal
- || wrk_status == svn_wc__db_status_not_present
- || wrk_status == svn_wc__db_status_server_excluded)
- {
- base_status = wrk_status;
- base_kind = wrk_kind;
- }
- else
- SVN_ERR(svn_wc__db_base_get_info(&base_status, &base_kind, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- db, local_abspath,
- scratch_pool, scratch_pool));
-
- /* Children first */
- if (base_kind == svn_wc__db_kind_dir
- && (base_status == svn_wc__db_status_normal
- || base_status == svn_wc__db_status_incomplete))
- {
- const apr_array_header_t *children;
- apr_pool_t *iterpool = svn_pool_create(scratch_pool);
- int i;
-
- SVN_ERR(svn_wc__db_base_get_children(&children, db, local_abspath,
- scratch_pool, iterpool));
-
- for (i = 0; i < children->nelts; i++)
- {
- const char *child_name = APR_ARRAY_IDX(children, i, const char *);
- const char *child_abspath;
-
- svn_pool_clear(iterpool);
-
- child_abspath = svn_dirent_join(local_abspath, child_name, iterpool);
-
- SVN_ERR(remove_base_node(db, child_abspath, cancel_func, cancel_baton,
- iterpool));
- }
-
- svn_pool_destroy(iterpool);
- }
-
- if (base_status == svn_wc__db_status_normal
- && wrk_status != svn_wc__db_status_added
- && wrk_status != svn_wc__db_status_excluded)
- {
- if (wrk_status != svn_wc__db_status_deleted
- && (base_kind == svn_wc__db_kind_file
- || base_kind == svn_wc__db_kind_symlink))
- {
- SVN_ERR(svn_io_remove_file2(local_abspath, TRUE, scratch_pool));
- }
- else if (base_kind == svn_wc__db_kind_dir
- && wrk_status != svn_wc__db_status_deleted)
- {
- err = svn_io_dir_remove_nonrecursive(local_abspath, scratch_pool);
- if (err && (APR_STATUS_IS_ENOENT(err->apr_err)
- || SVN__APR_STATUS_IS_ENOTDIR(err->apr_err)
- || APR_STATUS_IS_ENOTEMPTY(err->apr_err)))
- svn_error_clear(err);
- else
- SVN_ERR(err);
- }
- }
-
- SVN_ERR(svn_wc__db_base_remove(db, local_abspath, scratch_pool));
-
- return SVN_NO_ERROR;
-}
-
+ */
/* Process the OP_REMOVE_BASE work item WORK_ITEM.
* See svn_wc__wq_build_remove_base() which generates this work item.
* Implements (struct work_item_dispatch).func. */
static svn_error_t *
-run_base_remove(svn_wc__db_t *db,
+run_base_remove(work_item_baton_t *wqb,
+ svn_wc__db_t *db,
const svn_skel_t *work_item,
const char *wri_abspath,
svn_cancel_func_t cancel_func,
@@ -219,8 +107,6 @@ run_base_remove(svn_wc__db_t *db,
const char *local_relpath;
const char *local_abspath;
svn_revnum_t not_present_rev = SVN_INVALID_REVNUM;
- svn_wc__db_kind_t not_present_kind;
- const char *repos_relpath, *repos_root_url, *repos_uuid;
apr_int64_t val;
local_relpath = apr_pstrmemdup(scratch_pool, arg1->data, arg1->len);
@@ -233,23 +119,6 @@ run_base_remove(svn_wc__db_t *db,
not_present_rev = (svn_revnum_t)val;
SVN_ERR(svn_skel__parse_int(&val, arg1->next->next, scratch_pool));
- not_present_kind = (svn_wc__db_kind_t)val;
-
- if (SVN_IS_VALID_REVNUM(not_present_rev))
- {
- const char *dir_abspath, *name;
-
- /* This wq operation is restartable, so we can't assume the node
- to be here. But we can assume that the parent is still there */
- svn_dirent_split(&dir_abspath, &name, local_abspath, scratch_pool);
-
- SVN_ERR(svn_wc__db_scan_base_repos(&repos_relpath, &repos_root_url,
- &repos_uuid,
- db, dir_abspath,
- scratch_pool, scratch_pool));
-
- repos_relpath = svn_relpath_join(repos_relpath, name, scratch_pool);
- }
}
else
{
@@ -261,55 +130,22 @@ run_base_remove(svn_wc__db_t *db,
if (keep_not_present)
{
- SVN_ERR(svn_wc__db_base_get_info(NULL, &not_present_kind,
- &not_present_rev, &repos_relpath,
- &repos_root_url, &repos_uuid, NULL,
+ SVN_ERR(svn_wc__db_base_get_info(NULL, NULL,
+ &not_present_rev, NULL,
+ NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL,
+ NULL, NULL, NULL,
db, local_abspath,
scratch_pool, scratch_pool));
}
}
- SVN_ERR(remove_base_node(db, local_abspath,
- cancel_func, cancel_baton,
- scratch_pool));
-
- if (SVN_IS_VALID_REVNUM(not_present_rev))
- {
- SVN_ERR(svn_wc__db_base_add_not_present_node(db, local_abspath,
- repos_relpath,
- repos_root_url,
- repos_uuid,
- not_present_rev,
- not_present_kind,
- NULL,
- NULL,
- scratch_pool));
- }
-
- return SVN_NO_ERROR;
-}
-
-svn_error_t *
-svn_wc__wq_build_base_remove(svn_skel_t **work_item,
- svn_wc__db_t *db,
- const char *local_abspath,
- svn_revnum_t not_present_revision,
- svn_wc__db_kind_t not_present_kind,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- const char *local_relpath;
- *work_item = svn_skel__make_empty_list(result_pool);
-
- SVN_ERR(svn_wc__db_to_relpath(&local_relpath, db, local_abspath,
- local_abspath, result_pool, scratch_pool));
-
- svn_skel__prepend_int(not_present_kind, *work_item, result_pool);
- svn_skel__prepend_int(not_present_revision, *work_item, result_pool);
- svn_skel__prepend_str(local_relpath, *work_item, result_pool);
- svn_skel__prepend_str(OP_BASE_REMOVE, *work_item, result_pool);
+ SVN_ERR(svn_wc__db_base_remove(db, local_abspath,
+ FALSE /* keep_as_working */,
+ TRUE /* queue_deletes */,
+ FALSE /* remove_locks */,
+ not_present_rev,
+ NULL, NULL, scratch_pool));
return SVN_NO_ERROR;
}
@@ -499,7 +335,8 @@ process_commit_file_install(svn_wc__db_t *db,
static svn_error_t *
-run_file_commit(svn_wc__db_t *db,
+run_file_commit(work_item_baton_t *wqb,
+ svn_wc__db_t *db,
const svn_skel_t *work_item,
const char *wri_abspath,
svn_cancel_func_t cancel_func,
@@ -536,10 +373,6 @@ svn_wc__wq_build_file_commit(svn_skel_t **work_item,
SVN_ERR(svn_wc__db_to_relpath(&local_relpath, db, local_abspath,
local_abspath, result_pool, scratch_pool));
- /* This are currently ignored, they are here for compat. */
- svn_skel__prepend_int(FALSE, *work_item, result_pool);
- svn_skel__prepend_int(FALSE, *work_item, result_pool);
-
svn_skel__prepend_str(local_relpath, *work_item, result_pool);
svn_skel__prepend_str(OP_FILE_COMMIT, *work_item, result_pool);
@@ -551,7 +384,8 @@ svn_wc__wq_build_file_commit(svn_skel_t **work_item,
/* OP_POSTUPGRADE */
static svn_error_t *
-run_postupgrade(svn_wc__db_t *db,
+run_postupgrade(work_item_baton_t *wqb,
+ svn_wc__db_t *db,
const svn_skel_t *work_item,
const char *wri_abspath,
svn_cancel_func_t cancel_func,
@@ -570,6 +404,8 @@ run_postupgrade(svn_wc__db_t *db,
if (err && err->apr_err == SVN_ERR_ENTRY_NOT_FOUND)
/* No entry, this can happen when the wq item is rerun. */
svn_error_clear(err);
+ else
+ SVN_ERR(err);
SVN_ERR(svn_wc__db_get_wcroot(&wcroot_abspath, db, wri_abspath,
scratch_pool, scratch_pool));
@@ -617,7 +453,8 @@ svn_wc__wq_build_postupgrade(svn_skel_t **work_item,
* See svn_wc__wq_build_file_install() which generates this work item.
* Implements (struct work_item_dispatch).func. */
static svn_error_t *
-run_file_install(svn_wc__db_t *db,
+run_file_install(work_item_baton_t *wqb,
+ svn_wc__db_t *db,
const svn_skel_t *work_item,
const char *wri_abspath,
svn_cancel_func_t cancel_func,
@@ -715,6 +552,8 @@ run_file_install(svn_wc__db_t *db,
scratch_pool));
/* No need to set exec or read-only flags on special files. */
+
+ /* ### Shouldn't this record a timestamp and size, etc.? */
return SVN_NO_ERROR;
}
@@ -781,12 +620,27 @@ run_file_install(svn_wc__db_t *db,
}
/* Tweak the on-disk file according to its properties. */
- if (props
- && (apr_hash_get(props, SVN_PROP_NEEDS_LOCK, APR_HASH_KEY_STRING)
- || apr_hash_get(props, SVN_PROP_EXECUTABLE, APR_HASH_KEY_STRING)))
+#ifndef WIN32
+ if (props && svn_hash_gets(props, SVN_PROP_EXECUTABLE))
+ SVN_ERR(svn_io_set_file_executable(local_abspath, TRUE, FALSE,
+ scratch_pool));
+#endif
+
+ /* Note that this explicitly checks the pristine properties, to make sure
+ that when the lock is locally set (=modification) it is not read only */
+ if (props && svn_hash_gets(props, SVN_PROP_NEEDS_LOCK))
{
- SVN_ERR(svn_wc__sync_flags_with_props(NULL, db, local_abspath,
- scratch_pool));
+ svn_wc__db_status_t status;
+ svn_wc__db_lock_t *lock;
+ SVN_ERR(svn_wc__db_read_info(&status, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, &lock, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ db, local_abspath,
+ scratch_pool, scratch_pool));
+
+ if (!lock && status != svn_wc__db_status_added)
+ SVN_ERR(svn_io_set_file_read_only(local_abspath, FALSE, scratch_pool));
}
if (use_commit_times)
@@ -800,7 +654,7 @@ run_file_install(svn_wc__db_t *db,
/* ### this should happen before we rename the file into place. */
if (record_fileinfo)
{
- SVN_ERR(get_and_record_fileinfo(db, local_abspath,
+ SVN_ERR(get_and_record_fileinfo(wqb, local_abspath,
FALSE /* ignore_enoent */,
scratch_pool));
}
@@ -820,19 +674,25 @@ svn_wc__wq_build_file_install(svn_skel_t **work_item,
apr_pool_t *scratch_pool)
{
const char *local_relpath;
+ const char *wri_abspath;
*work_item = svn_skel__make_empty_list(result_pool);
+ /* Use the directory of the file to install as wri_abspath to avoid
+ filestats on just obtaining the wc-root */
+ wri_abspath = svn_dirent_dirname(local_abspath, scratch_pool);
+
/* If a SOURCE_ABSPATH was provided, then put it into the skel. If this
- value is not provided, then the file's pristine contents will be used. */
+ value is not provided, then the file's pristine contents will be used. */
if (source_abspath != NULL)
{
- SVN_ERR(svn_wc__db_to_relpath(&local_relpath, db, local_abspath,
- source_abspath, result_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_to_relpath(&local_relpath, db, wri_abspath,
+ source_abspath,
+ result_pool, scratch_pool));
svn_skel__prepend_str(local_relpath, *work_item, result_pool);
}
- SVN_ERR(svn_wc__db_to_relpath(&local_relpath, db, local_abspath,
+ SVN_ERR(svn_wc__db_to_relpath(&local_relpath, db, wri_abspath,
local_abspath, result_pool, scratch_pool));
svn_skel__prepend_int(record_fileinfo, *work_item, result_pool);
@@ -852,12 +712,13 @@ svn_wc__wq_build_file_install(svn_skel_t **work_item,
* See svn_wc__wq_build_file_remove() which generates this work item.
* Implements (struct work_item_dispatch).func. */
static svn_error_t *
-run_file_remove(svn_wc__db_t *db,
- const svn_skel_t *work_item,
- const char *wri_abspath,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- apr_pool_t *scratch_pool)
+run_file_remove(work_item_baton_t *wqb,
+ svn_wc__db_t *db,
+ const svn_skel_t *work_item,
+ const char *wri_abspath,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
{
const svn_skel_t *arg1 = work_item->children->next;
const char *local_relpath;
@@ -876,6 +737,7 @@ run_file_remove(svn_wc__db_t *db,
svn_error_t *
svn_wc__wq_build_file_remove(svn_skel_t **work_item,
svn_wc__db_t *db,
+ const char *wri_abspath,
const char *local_abspath,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
@@ -883,7 +745,7 @@ svn_wc__wq_build_file_remove(svn_skel_t **work_item,
const char *local_relpath;
*work_item = svn_skel__make_empty_list(result_pool);
- SVN_ERR(svn_wc__db_to_relpath(&local_relpath, db, local_abspath,
+ SVN_ERR(svn_wc__db_to_relpath(&local_relpath, db, wri_abspath,
local_abspath, result_pool, scratch_pool));
svn_skel__prepend_str(local_relpath, *work_item, result_pool);
@@ -894,18 +756,101 @@ svn_wc__wq_build_file_remove(svn_skel_t **work_item,
/* ------------------------------------------------------------------------ */
+/* OP_DIRECTORY_REMOVE */
+
+/* Process the OP_FILE_REMOVE work item WORK_ITEM.
+ * See svn_wc__wq_build_file_remove() which generates this work item.
+ * Implements (struct work_item_dispatch).func. */
+static svn_error_t *
+run_dir_remove(work_item_baton_t *wqb,
+ svn_wc__db_t *db,
+ const svn_skel_t *work_item,
+ const char *wri_abspath,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
+{
+ const svn_skel_t *arg1 = work_item->children->next;
+ const char *local_relpath;
+ const char *local_abspath;
+ svn_boolean_t recursive;
+
+ local_relpath = apr_pstrmemdup(scratch_pool, arg1->data, arg1->len);
+ SVN_ERR(svn_wc__db_from_relpath(&local_abspath, db, wri_abspath,
+ local_relpath, scratch_pool, scratch_pool));
+
+ recursive = FALSE;
+ if (arg1->next)
+ {
+ apr_int64_t val;
+ SVN_ERR(svn_skel__parse_int(&val, arg1->next, scratch_pool));
+
+ recursive = (val != 0);
+ }
+
+ /* Remove the path, no worrying if it isn't there. */
+ if (recursive)
+ return svn_error_trace(
+ svn_io_remove_dir2(local_abspath, TRUE,
+ cancel_func, cancel_baton,
+ scratch_pool));
+ else
+ {
+ svn_error_t *err;
+
+ err = svn_io_dir_remove_nonrecursive(local_abspath, scratch_pool);
+
+ if (err && (APR_STATUS_IS_ENOENT(err->apr_err)
+ || SVN__APR_STATUS_IS_ENOTDIR(err->apr_err)
+ || APR_STATUS_IS_ENOTEMPTY(err->apr_err)))
+ {
+ svn_error_clear(err);
+ err = NULL;
+ }
+
+ return svn_error_trace(err);
+ }
+}
+
+svn_error_t *
+svn_wc__wq_build_dir_remove(svn_skel_t **work_item,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
+ const char *local_abspath,
+ svn_boolean_t recursive,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ const char *local_relpath;
+ *work_item = svn_skel__make_empty_list(result_pool);
+
+ SVN_ERR(svn_wc__db_to_relpath(&local_relpath, db, wri_abspath,
+ local_abspath, result_pool, scratch_pool));
+
+ if (recursive)
+ svn_skel__prepend_int(TRUE, *work_item, result_pool);
+
+ svn_skel__prepend_str(local_relpath, *work_item, result_pool);
+ svn_skel__prepend_str(OP_DIRECTORY_REMOVE, *work_item, result_pool);
+
+ return SVN_NO_ERROR;
+}
+
+/* ------------------------------------------------------------------------ */
+
/* OP_FILE_MOVE */
/* Process the OP_FILE_MOVE work item WORK_ITEM.
* See svn_wc__wq_build_file_move() which generates this work item.
* Implements (struct work_item_dispatch).func. */
static svn_error_t *
-run_file_move(svn_wc__db_t *db,
- const svn_skel_t *work_item,
- const char *wri_abspath,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- apr_pool_t *scratch_pool)
+run_file_move(work_item_baton_t *wqb,
+ svn_wc__db_t *db,
+ const svn_skel_t *work_item,
+ const char *wri_abspath,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
{
const svn_skel_t *arg1 = work_item->children->next;
const char *src_abspath, *dst_abspath;
@@ -982,7 +927,8 @@ svn_wc__wq_build_file_move(svn_skel_t **work_item,
* See run_file_copy_translated() which generates this work item.
* Implements (struct work_item_dispatch).func. */
static svn_error_t *
-run_file_copy_translated(svn_wc__db_t *db,
+run_file_copy_translated(work_item_baton_t *wqb,
+ svn_wc__db_t *db,
const svn_skel_t *work_item,
const char *wri_abspath,
svn_cancel_func_t cancel_func,
@@ -1071,6 +1017,52 @@ svn_wc__wq_build_file_copy_translated(svn_skel_t **work_item,
return SVN_NO_ERROR;
}
+/* ------------------------------------------------------------------------ */
+
+/* OP_DIRECTORY_INSTALL */
+
+static svn_error_t *
+run_dir_install(work_item_baton_t *wqb,
+ svn_wc__db_t *db,
+ const svn_skel_t *work_item,
+ const char *wri_abspath,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
+{
+ const svn_skel_t *arg1 = work_item->children->next;
+ const char *local_relpath;
+ const char *local_abspath;
+
+ local_relpath = apr_pstrmemdup(scratch_pool, arg1->data, arg1->len);
+ SVN_ERR(svn_wc__db_from_relpath(&local_abspath, db, wri_abspath,
+ local_relpath, scratch_pool, scratch_pool));
+
+ SVN_ERR(svn_wc__ensure_directory(local_abspath, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__wq_build_dir_install(svn_skel_t **work_item,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *scratch_pool,
+ apr_pool_t *result_pool)
+{
+ const char *local_relpath;
+
+ *work_item = svn_skel__make_empty_list(result_pool);
+
+ SVN_ERR(svn_wc__db_to_relpath(&local_relpath, db, local_abspath,
+ local_abspath, result_pool, scratch_pool));
+ svn_skel__prepend_str(local_relpath, *work_item, result_pool);
+
+ svn_skel__prepend_str(OP_DIRECTORY_INSTALL, *work_item, result_pool);
+
+ return SVN_NO_ERROR;
+}
+
/* ------------------------------------------------------------------------ */
@@ -1080,7 +1072,8 @@ svn_wc__wq_build_file_copy_translated(svn_skel_t **work_item,
* See svn_wc__wq_build_sync_file_flags() which generates this work item.
* Implements (struct work_item_dispatch).func. */
static svn_error_t *
-run_sync_file_flags(svn_wc__db_t *db,
+run_sync_file_flags(work_item_baton_t *wqb,
+ svn_wc__db_t *db,
const svn_skel_t *work_item,
const char *wri_abspath,
svn_cancel_func_t cancel_func,
@@ -1125,7 +1118,8 @@ svn_wc__wq_build_sync_file_flags(svn_skel_t **work_item,
/* OP_PREJ_INSTALL */
static svn_error_t *
-run_prej_install(svn_wc__db_t *db,
+run_prej_install(work_item_baton_t *wqb,
+ svn_wc__db_t *db,
const svn_skel_t *work_item,
const char *wri_abspath,
svn_cancel_func_t cancel_func,
@@ -1135,29 +1129,34 @@ run_prej_install(svn_wc__db_t *db,
const svn_skel_t *arg1 = work_item->children->next;
const char *local_relpath;
const char *local_abspath;
- const svn_skel_t *conflict_skel;
+ svn_skel_t *conflicts;
+ const svn_skel_t *prop_conflict_skel;
const char *tmp_prejfile_abspath;
const char *prejfile_abspath;
local_relpath = apr_pstrmemdup(scratch_pool, arg1->data, arg1->len);
SVN_ERR(svn_wc__db_from_relpath(&local_abspath, db, wri_abspath,
local_relpath, scratch_pool, scratch_pool));
+
+ SVN_ERR(svn_wc__db_read_conflict(&conflicts, db, local_abspath,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(svn_wc__conflict_read_prop_conflict(&prejfile_abspath,
+ NULL, NULL, NULL, NULL,
+ db, local_abspath, conflicts,
+ scratch_pool, scratch_pool));
+
if (arg1->next != NULL)
- conflict_skel = arg1->next;
+ prop_conflict_skel = arg1->next;
else
SVN_ERR_MALFUNCTION(); /* ### wc_db can't provide it ... yet. */
/* Construct a property reject file in the temporary area. */
SVN_ERR(svn_wc__create_prejfile(&tmp_prejfile_abspath,
db, local_abspath,
- conflict_skel,
+ prop_conflict_skel,
scratch_pool, scratch_pool));
- /* Get the (stored) name of where it should go. */
- SVN_ERR(svn_wc__get_prejfile_abspath(&prejfile_abspath, db, local_abspath,
- scratch_pool, scratch_pool));
- SVN_ERR_ASSERT(prejfile_abspath != NULL);
-
/* ... and atomically move it into place. */
SVN_ERR(svn_io_file_rename(tmp_prejfile_abspath,
prejfile_abspath,
@@ -1199,7 +1198,8 @@ svn_wc__wq_build_prej_install(svn_skel_t **work_item,
static svn_error_t *
-run_record_fileinfo(svn_wc__db_t *db,
+run_record_fileinfo(work_item_baton_t *wqb,
+ svn_wc__db_t *db,
const svn_skel_t *work_item,
const char *wri_abspath,
svn_cancel_func_t cancel_func,
@@ -1244,49 +1244,24 @@ run_record_fileinfo(svn_wc__db_t *db,
}
- return svn_error_trace(get_and_record_fileinfo(db, local_abspath,
+ return svn_error_trace(get_and_record_fileinfo(wqb, local_abspath,
TRUE /* ignore_enoent */,
scratch_pool));
}
-
-svn_error_t *
-svn_wc__wq_build_record_fileinfo(svn_skel_t **work_item,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_time_t set_time,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- const char *local_relpath;
- *work_item = svn_skel__make_empty_list(result_pool);
-
- SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
-
- SVN_ERR(svn_wc__db_to_relpath(&local_relpath, db, local_abspath,
- local_abspath, result_pool, scratch_pool));
-
- if (set_time)
- svn_skel__prepend_int(set_time, *work_item, result_pool);
-
- svn_skel__prepend_str(local_relpath, *work_item, result_pool);
- svn_skel__prepend_str(OP_RECORD_FILEINFO, *work_item, result_pool);
-
- return SVN_NO_ERROR;
-}
-
/* ------------------------------------------------------------------------ */
/* OP_TMP_SET_TEXT_CONFLICT_MARKERS */
static svn_error_t *
-run_set_text_conflict_markers(svn_wc__db_t *db,
- const svn_skel_t *work_item,
- const char *wri_abspath,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- apr_pool_t *scratch_pool)
+run_set_text_conflict_markers(work_item_baton_t *wqb,
+ svn_wc__db_t *db,
+ const svn_skel_t *work_item,
+ const char *wri_abspath,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
{
const svn_skel_t *arg = work_item->children->next;
const char *local_relpath;
@@ -1331,58 +1306,42 @@ run_set_text_conflict_markers(svn_wc__db_t *db,
scratch_pool, scratch_pool));
}
- return svn_error_trace(
- svn_wc__db_temp_op_set_text_conflict_marker_files(db,
- local_abspath,
- old_abspath,
- new_abspath,
- wrk_abspath,
- scratch_pool));
-}
-
+ /* Upgrade scenario: We have a workqueue item that describes how to install a
+ non skel conflict. Fetch all the information we can to create a new style
+ conflict. */
+ /* ### Before format 30 this is/was a common code path as we didn't install
+ ### the conflict directly in the db. It just calls the wc_db code
+ ### to set the right fields. */
-svn_error_t *
-svn_wc__wq_tmp_build_set_text_conflict_markers(svn_skel_t **work_item,
- svn_wc__db_t *db,
- const char *local_abspath,
- const char *old_abspath,
- const char *new_abspath,
- const char *wrk_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- const char *local_relpath;
- *work_item = svn_skel__make_empty_list(result_pool);
-
- SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
-
- /* Abspaths in the workqueue won't work if the WC is moved. */
- if (wrk_abspath)
- SVN_ERR(svn_wc__db_to_relpath(&local_relpath, db, local_abspath,
- wrk_abspath, result_pool, scratch_pool));
-
- svn_skel__prepend_str(wrk_abspath ? local_relpath : "",
- *work_item, result_pool);
+ {
+ /* Check if we should combine with a property conflict... */
+ svn_skel_t *conflicts;
- if (new_abspath)
- SVN_ERR(svn_wc__db_to_relpath(&local_relpath, db, local_abspath,
- new_abspath, result_pool, scratch_pool));
- svn_skel__prepend_str(new_abspath ? local_relpath : "",
- *work_item, result_pool);
+ SVN_ERR(svn_wc__db_read_conflict(&conflicts, db, local_abspath,
+ scratch_pool, scratch_pool));
- if (old_abspath)
- SVN_ERR(svn_wc__db_to_relpath(&local_relpath, db, local_abspath,
- old_abspath, result_pool, scratch_pool));
- svn_skel__prepend_str(old_abspath ? local_relpath : "",
- *work_item, result_pool);
+ if (! conflicts)
+ {
+ /* No conflict exists, create a basic skel */
+ conflicts = svn_wc__conflict_skel_create(scratch_pool);
- SVN_ERR(svn_wc__db_to_relpath(&local_relpath, db, local_abspath,
- local_abspath, result_pool, scratch_pool));
+ SVN_ERR(svn_wc__conflict_skel_set_op_update(conflicts, NULL, NULL,
+ scratch_pool,
+ scratch_pool));
+ }
- svn_skel__prepend_str(local_relpath, *work_item, result_pool);
- svn_skel__prepend_str(OP_TMP_SET_TEXT_CONFLICT_MARKERS, *work_item,
- result_pool);
+ /* Add the text conflict to the existing onflict */
+ SVN_ERR(svn_wc__conflict_skel_add_text_conflict(conflicts, db,
+ local_abspath,
+ wrk_abspath,
+ old_abspath,
+ new_abspath,
+ scratch_pool,
+ scratch_pool));
+ SVN_ERR(svn_wc__db_op_mark_conflict(db, local_abspath, conflicts,
+ NULL, scratch_pool));
+ }
return SVN_NO_ERROR;
}
@@ -1391,7 +1350,8 @@ svn_wc__wq_tmp_build_set_text_conflict_markers(svn_skel_t **work_item,
/* OP_TMP_SET_PROPERTY_CONFLICT_MARKER */
static svn_error_t *
-run_set_property_conflict_marker(svn_wc__db_t *db,
+run_set_property_conflict_marker(work_item_baton_t *wqb,
+ svn_wc__db_t *db,
const svn_skel_t *work_item,
const char *wri_abspath,
svn_cancel_func_t cancel_func,
@@ -1411,47 +1371,43 @@ run_set_property_conflict_marker(svn_wc__db_t *db,
arg = arg->next;
local_relpath = arg->len ? apr_pstrmemdup(scratch_pool, arg->data, arg->len)
- : NULL;
+ : NULL;
if (local_relpath)
SVN_ERR(svn_wc__db_from_relpath(&prej_abspath, db, wri_abspath,
local_relpath,
scratch_pool, scratch_pool));
- return svn_error_trace(
- svn_wc__db_temp_op_set_property_conflict_marker_file(db,
- local_abspath,
- prej_abspath,
- scratch_pool));
-}
-
-svn_error_t *
-svn_wc__wq_tmp_build_set_property_conflict_marker(svn_skel_t **work_item,
- svn_wc__db_t *db,
- const char *local_abspath,
- const char *prej_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- const char *local_relpath;
- *work_item = svn_skel__make_empty_list(result_pool);
-
- SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+ {
+ /* Check if we should combine with a text conflict... */
+ svn_skel_t *conflicts;
+ apr_hash_t *prop_names;
- if (prej_abspath)
- SVN_ERR(svn_wc__db_to_relpath(&local_relpath, db, local_abspath,
- prej_abspath, result_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_read_conflict(&conflicts, db, local_abspath,
+ scratch_pool, scratch_pool));
- svn_skel__prepend_str(prej_abspath ? local_relpath : "",
- *work_item, result_pool);
+ if (! conflicts)
+ {
+ /* No conflict exists, create a basic skel */
+ conflicts = svn_wc__conflict_skel_create(scratch_pool);
- SVN_ERR(svn_wc__db_to_relpath(&local_relpath, db, local_abspath,
- local_abspath, result_pool, scratch_pool));
+ SVN_ERR(svn_wc__conflict_skel_set_op_update(conflicts, NULL, NULL,
+ scratch_pool,
+ scratch_pool));
+ }
- svn_skel__prepend_str(local_relpath, *work_item, result_pool);
- svn_skel__prepend_str(OP_TMP_SET_PROPERTY_CONFLICT_MARKER, *work_item,
- result_pool);
+ prop_names = apr_hash_make(scratch_pool);
+ SVN_ERR(svn_wc__conflict_skel_add_prop_conflict(conflicts, db,
+ local_abspath,
+ prej_abspath,
+ NULL, NULL, NULL,
+ prop_names,
+ scratch_pool,
+ scratch_pool));
+ SVN_ERR(svn_wc__db_op_mark_conflict(db, local_abspath, conflicts,
+ NULL, scratch_pool));
+ }
return SVN_NO_ERROR;
}
@@ -1465,21 +1421,35 @@ static const struct work_item_dispatch dispatch_table[] = {
{ OP_FILE_COPY_TRANSLATED, run_file_copy_translated },
{ OP_SYNC_FILE_FLAGS, run_sync_file_flags },
{ OP_PREJ_INSTALL, run_prej_install },
- { OP_RECORD_FILEINFO, run_record_fileinfo },
- { OP_BASE_REMOVE, run_base_remove },
- { OP_TMP_SET_TEXT_CONFLICT_MARKERS, run_set_text_conflict_markers },
- { OP_TMP_SET_PROPERTY_CONFLICT_MARKER, run_set_property_conflict_marker },
+ { OP_DIRECTORY_REMOVE, run_dir_remove },
+ { OP_DIRECTORY_INSTALL, run_dir_install },
/* Upgrade steps */
{ OP_POSTUPGRADE, run_postupgrade },
+ /* Legacy workqueue items. No longer created */
+ { OP_BASE_REMOVE, run_base_remove },
+ { OP_RECORD_FILEINFO, run_record_fileinfo },
+ { OP_TMP_SET_TEXT_CONFLICT_MARKERS, run_set_text_conflict_markers },
+ { OP_TMP_SET_PROPERTY_CONFLICT_MARKER, run_set_property_conflict_marker },
+
/* Sentinel. */
{ NULL }
};
+struct work_item_baton_t
+{
+ apr_pool_t *result_pool; /* Pool to allocate result in */
+
+ svn_boolean_t used; /* needs reset */
+
+ apr_hash_t *record_map; /* const char * -> svn_io_dirent2_t map */
+};
+
static svn_error_t *
-dispatch_work_item(svn_wc__db_t *db,
+dispatch_work_item(work_item_baton_t *wqb,
+ svn_wc__db_t *db,
const char *wri_abspath,
const svn_skel_t *work_item,
svn_cancel_func_t cancel_func,
@@ -1497,7 +1467,7 @@ dispatch_work_item(svn_wc__db_t *db,
#ifdef SVN_DEBUG_WORK_QUEUE
SVN_DBG(("dispatch: operation='%s'\n", scan->name));
#endif
- SVN_ERR((*scan->func)(db, work_item, wri_abspath,
+ SVN_ERR((*scan->func)(wqb, db, work_item, wri_abspath,
cancel_func, cancel_baton,
scratch_pool));
@@ -1526,10 +1496,7 @@ dispatch_work_item(svn_wc__db_t *db,
Contrary to issue #1581, we cannot simply remove work items and
continue, so bail out with an error. */
return svn_error_createf(SVN_ERR_WC_BAD_ADM_LOG, NULL,
- _("Unrecognized work item in the queue "
- "associated with '%s'"),
- svn_dirent_local_style(wri_abspath,
- scratch_pool));
+ _("Unrecognized work item in the queue"));
}
return SVN_NO_ERROR;
@@ -1545,6 +1512,8 @@ svn_wc__wq_run(svn_wc__db_t *db,
{
apr_pool_t *iterpool = svn_pool_create(scratch_pool);
apr_uint64_t last_id = 0;
+ work_item_baton_t wib = { 0 };
+ wib.result_pool = svn_pool_create(scratch_pool);
#ifdef SVN_DEBUG_WORK_QUEUE
SVN_DBG(("wq_run: wri='%s'\n", wri_abspath));
@@ -1561,14 +1530,33 @@ svn_wc__wq_run(svn_wc__db_t *db,
{
apr_uint64_t id;
svn_skel_t *work_item;
+ svn_error_t *err;
svn_pool_clear(iterpool);
- /* Make sure to do this *early* in the loop iteration. There may
- be a LAST_ID that needs to be marked as completed, *before* we
- start worrying about anything else. */
- SVN_ERR(svn_wc__db_wq_fetch_next(&id, &work_item, db, wri_abspath,
- last_id, iterpool, iterpool));
+ if (! wib.used)
+ {
+ /* Make sure to do this *early* in the loop iteration. There may
+ be a LAST_ID that needs to be marked as completed, *before* we
+ start worrying about anything else. */
+ SVN_ERR(svn_wc__db_wq_fetch_next(&id, &work_item, db, wri_abspath,
+ last_id, iterpool, iterpool));
+ }
+ else
+ {
+ /* Make sure to do this *early* in the loop iteration. There may
+ be a LAST_ID that needs to be marked as completed, *before* we
+ start worrying about anything else. */
+ SVN_ERR(svn_wc__db_wq_record_and_fetch_next(&id, &work_item,
+ db, wri_abspath,
+ last_id, wib.record_map,
+ iterpool,
+ wib.result_pool));
+
+ svn_pool_clear(wib.result_pool);
+ wib.record_map = NULL;
+ wib.used = FALSE;
+ }
/* Stop work queue processing, if requested. A future 'svn cleanup'
should be able to continue the processing. Note that we may
@@ -1580,8 +1568,20 @@ svn_wc__wq_run(svn_wc__db_t *db,
we're done. */
if (work_item == NULL)
break;
- SVN_ERR(dispatch_work_item(db, wri_abspath, work_item,
- cancel_func, cancel_baton, iterpool));
+
+ err = dispatch_work_item(&wib, db, wri_abspath, work_item,
+ cancel_func, cancel_baton, iterpool);
+ if (err)
+ {
+ const char *skel = svn_skel__unparse(work_item, scratch_pool)->data;
+
+ return svn_error_createf(SVN_ERR_WC_BAD_ADM_LOG, err,
+ _("Failed to run the WC DB work queue "
+ "associated with '%s', work item %d %s"),
+ svn_dirent_local_style(wri_abspath,
+ scratch_pool),
+ (int)id, skel);
+ }
/* The work item finished without error. Mark it completed
in the next loop. */
@@ -1639,3 +1639,29 @@ svn_wc__wq_merge(svn_skel_t *work_item1,
svn_skel__append(work_item1, work_item2->children);
return work_item1;
}
+
+
+static svn_error_t *
+get_and_record_fileinfo(work_item_baton_t *wqb,
+ const char *local_abspath,
+ svn_boolean_t ignore_enoent,
+ apr_pool_t *scratch_pool)
+{
+ const svn_io_dirent2_t *dirent;
+
+ SVN_ERR(svn_io_stat_dirent2(&dirent, local_abspath, FALSE, ignore_enoent,
+ wqb->result_pool, scratch_pool));
+
+ if (dirent->kind != svn_node_file)
+ return SVN_NO_ERROR;
+
+ wqb->used = TRUE;
+
+ if (! wqb->record_map)
+ wqb->record_map = apr_hash_make(wqb->result_pool);
+
+ svn_hash_sets(wqb->record_map, apr_pstrdup(wqb->result_pool, local_abspath),
+ dirent);
+
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/libsvn_wc/workqueue.h b/subversion/libsvn_wc/workqueue.h
index a0181a8..0617a60 100644
--- a/subversion/libsvn_wc/workqueue.h
+++ b/subversion/libsvn_wc/workqueue.h
@@ -93,8 +93,8 @@ svn_wc__wq_run(svn_wc__db_t *db,
/* Set *WORK_ITEM to a new work item that will install the working
copy file at LOCAL_ABSPATH. If USE_COMMIT_TIMES is TRUE, then the newly
installed file will use the nodes CHANGE_DATE for the file timestamp.
- If RECORD_FILEINFO is TRUE, then the resulting LAST_MOD_TIME and
- TRANSLATED_SIZE will be recorded in the database.
+ If RECORD_FILEINFO is TRUE, then the resulting RECORDED_TIME and
+ RECORDED_SIZE will be recorded in the database.
If SOURCE_ABSPATH is NULL, then the pristine contents will be installed
(with appropriate translation). If SOURCE_ABSPATH is not NULL, then it
@@ -114,15 +114,29 @@ svn_wc__wq_build_file_install(svn_skel_t **work_item,
/* Set *WORK_ITEM to a new work item that will remove a single
- file. */
+ file LOCAL_ABSPATH from the working copy identified by the pair DB,
+ WRI_ABSPATH. */
svn_error_t *
svn_wc__wq_build_file_remove(svn_skel_t **work_item,
svn_wc__db_t *db,
+ const char *wri_abspath,
const char *local_abspath,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
-/* Set *WORK_ITEM to a new work item that describes a moves of
+/* Set *WORK_ITEM to a new work item that will remove a single
+ directory or if RECURSIVE is TRUE a directory with all its
+ descendants. */
+svn_error_t *
+svn_wc__wq_build_dir_remove(svn_skel_t **work_item,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
+ const char *local_abspath,
+ svn_boolean_t recursive,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Set *WORK_ITEM to a new work item that describes a move of
a file or directory from SRC_ABSPATH to DST_ABSPATH, ready for
storing in the working copy managing DST_ABSPATH.
@@ -182,81 +196,6 @@ svn_wc__wq_build_prej_install(svn_skel_t **work_item,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
-/* Set *WORK_ITEM to a new work item that will record file information of
- LOCAL_ABSPATH into the TRANSLATED_SIZE and LAST_MOD_TIME of the node via
- the svn_wc__db_global_record_fileinfo() function.
-
- If SET_TIME is not 0, set LOCAL_ABSPATH's last modified time to this
- time and after that record the actual file time.
-
- ### it is unclear whether this should survive. */
-svn_error_t *
-svn_wc__wq_build_record_fileinfo(svn_skel_t **work_item,
- svn_wc__db_t *db,
- const char *local_abspath,
- apr_time_t set_time,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-/* Set *WORK_ITEM to a new work item that will remove all the data of
- the BASE_NODE of LOCAL_ABSPATH and all it's descendants, but keeping
- any WORKING_NODE data.
-
- This function doesn't check for local modifications of the text files
- as these would have triggered a tree conflict before.
-
- ### This is only used from update_editor.c's do_entry_deletion().
- */
-svn_error_t *
-svn_wc__wq_build_base_remove(svn_skel_t **work_item,
- svn_wc__db_t *db,
- const char *local_abspath,
- svn_revnum_t not_present_revision,
- svn_wc__db_kind_t not_present_kind,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-
-/* ### Temporary helper to store text conflict marker locations as a wq
- ### operation. Eventually the data must be stored in the pristine store+db
- ### before the wq runs (within the operation transaction) and then a wq
- ### operation will create the markers.
-
- Set *WORK_ITEM to a new work item that sets the conflict marker values
- on ACTUAL_NODE to the passed values or to NULL if NULL is passed.
-
- Allocate the result in RESULT_POOL and perform temporary allocations
- in SCRATCH_POOL
-*/
-svn_error_t *
-svn_wc__wq_tmp_build_set_text_conflict_markers(svn_skel_t **work_item,
- svn_wc__db_t *db,
- const char *local_abspath,
- const char *old_abspath,
- const char *new_abspath,
- const char *wrk_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-/* ### Temporary helper to store the property conflict marker location as a wq
- ### operation. Eventually the data must be stored in the pristine store+db
- ### before the wq runs (within the operation transaction) and then a wq
- ### operation will create the marker.
-
- Set *WORK_ITEM to a new work item that sets the conflict marker values
- on ACTUAL_NODE to the passed values or to NULL if NULL is passed.
-
- Allocate the result in RESULT_POOL and perform temporary allocations
- in SCRATCH_POOL
-*/
-svn_error_t *
-svn_wc__wq_tmp_build_set_property_conflict_marker(svn_skel_t **work_item,
- svn_wc__db_t *db,
- const char *local_abspath,
- const char *prej_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
/* Handle the final post-commit step of retranslating and recording the
working copy state of a committed file.
@@ -276,6 +215,14 @@ svn_wc__wq_build_file_commit(svn_skel_t **work_item,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
+/* Set *WORK_ITEM to a new work item that will install the working
+ copy directory at LOCAL_ABSPATH. */
+svn_error_t *
+svn_wc__wq_build_dir_install(svn_skel_t **work_item,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *scratch_pool,
+ apr_pool_t *result_pool);
svn_error_t *
svn_wc__wq_build_postupgrade(svn_skel_t **work_item,
diff --git a/subversion/mod_authz_svn/INSTALL b/subversion/mod_authz_svn/INSTALL
index 88faabf..d2216ad 100644
--- a/subversion/mod_authz_svn/INSTALL
+++ b/subversion/mod_authz_svn/INSTALL
@@ -56,6 +56,12 @@ II. Configuration
Satisfy Any
Require valid-user
</Location>
+
+ NOTE: The access control is designed to never display entries that
+ the user does not have access to. Combining anonymous access on the
+ top levels while restricting read access lower in the directory
+ structure makes it difficult to browse because the server will not
+ request authentication.
C. Example 3: Authenticated access only
@@ -100,6 +106,105 @@ II. Configuration
NOTE: AuthzSVNReposRelativeAccessFile filename causes the authz file
to be read from <repo path>/conf/<filename>
+ E. Example 5: Authz file stored in a Subversion repository
+
+ This configuration allows storing of the authz file in a repository.
+
+ <Location /svn>
+ DAV svn
+ SVNParentPath /path/to/reposparent
+
+ AuthType Basic
+ AuthName "Subversion repository"
+ AuthUserFile /path/to/htpasswd/file
+
+ AuthzSVNAccessFile file:///path/to/repos/authz
+
+ Require valid-user
+ </Location>
+
+ NOTE: http:// and svn:// URLs are not supported, only local file://
+ absolute URLs may be used. The URL does not have to point to the
+ same repository as the repository being accessed. If you wish to
+ restrict access to this authz file and it is in the same repository
+ you should include a rule for it.
+
+ F. Example 6: Authz file stored inside the repository being accessed.
+
+ This configuration allows providing a relative path within the
+ repository being accessed.
+
+ <Location /svn>
+ DAV svn
+ SVNParentPath /path/to/reposparent
+
+ AuthType Basic
+ AuthName "Subversion repository"
+ AuthUserFile /path/to/htpasswd/file
+
+ AuthzSVNAccessFile ^/authz
+
+ Require valid-user
+ </Location>
+
+ NOTE: You should include rules in your authz file to restirct access
+ to the authz file as desired.
+
+ G. Example 7: Authenticated access to "Collection of Repositories"
+
+ The "Collection of Repositories" is filtered based on read access to
+ the root of each repository, i.e. consistent with the directory lists
+ within repositories. If read access is restricted in repository roots,
+ it is typically desirable to require authentication for "Collection of
+ Repositories" in order to ensure that repositories where the user has
+ access are displayed.
+
+ This is accomplished by specifying "Satisfy All" (which is the default
+ setting):
+
+ <Location /svn>
+ DAV svn
+ SVNParentPath /path/to/reposparent
+
+ AuthType Basic
+ AuthName "Subversion repository"
+ AuthUserFile /path/to/htpasswd/file
+
+ AuthzSVNAccessFile /path/to/access/file
+ # implicit Satisfy All
+ Require valid-user
+ </Location>
+
+ If the same server must be able to serve paths with anonymous access,
+ it can be defined using an additional location.
+
+ <LocationMatch "^/svn/.+">
+ Satisfy Any
+ Require valid-user
+ </LocationMatch>
+
+ The "Require" statement in the previous example is not strictly
+ needed, but has been included for clarity.
+
+ H. Example 8: Separate authz and groups files.
+
+ This configuration allows storing the groups separately from the
+ main authz file with the authorization rules.
+
+ <Location /svn>
+ DAV svn
+ SVNParentPath /path/to/reposparent
+
+ AuthType Basic
+ AuthName "Subversion repository"
+ AuthUserFile /path/to/htpasswd/file
+
+ AuthzSVNAccessFile /path/to/access/file
+ AuthzSVNGroupsFile /path/to/groups/file
+
+ Require valid-user
+ </Location>
+
2. Specifying permissions
The file format of the access file looks like this:
diff --git a/subversion/mod_authz_svn/mod_authz_svn.c b/subversion/mod_authz_svn/mod_authz_svn.c
index a6da3fb..e9e43eb 100644
--- a/subversion/mod_authz_svn/mod_authz_svn.c
+++ b/subversion/mod_authz_svn/mod_authz_svn.c
@@ -44,14 +44,16 @@
#include "svn_config.h"
#include "svn_string.h"
#include "svn_repos.h"
+#include "svn_pools.h"
#include "svn_dirent_uri.h"
#include "private/svn_fspath.h"
-extern module AP_MODULE_DECLARE_DATA authz_svn_module;
-
#ifdef APLOG_USE_MODULE
APLOG_USE_MODULE(authz_svn);
+#else
+/* This is part of the APLOG_USE_MODULE() macro in httpd-2.3 */
+extern module AP_MODULE_DECLARE_DATA authz_svn_module;
#endif
typedef struct authz_svn_config_rec {
@@ -61,6 +63,7 @@ typedef struct authz_svn_config_rec {
const char *base_path;
const char *access_file;
const char *repo_relative_access_file;
+ const char *groups_file;
const char *force_username_case;
} authz_svn_config_rec;
@@ -85,6 +88,39 @@ create_authz_svn_dir_config(apr_pool_t *p, char *d)
return conf;
}
+/* canonicalize ACCESS_FILE based on the type of argument.
+ * If SERVER_RELATIVE is true, ACCESS_FILE is a relative
+ * path then ACCESS_FILE is converted to an absolute
+ * path rooted at the server root.
+ * Returns NULL if path is not valid.*/
+static const char *
+canonicalize_access_file(const char *access_file,
+ svn_boolean_t server_relative,
+ apr_pool_t *pool)
+{
+ if (svn_path_is_url(access_file))
+ {
+ access_file = svn_uri_canonicalize(access_file, pool);
+ }
+ else if (!svn_path_is_repos_relative_url(access_file))
+ {
+ if (server_relative)
+ {
+ access_file = ap_server_root_relative(pool, access_file);
+ if (access_file == NULL)
+ return NULL;
+ }
+
+ access_file = svn_dirent_internal_style(access_file, pool);
+ }
+
+ /* We don't canonicalize repos relative urls since they get
+ * canonicalized before calling svn_repos_authz_read2() when they
+ * are resolved. */
+
+ return access_file;
+}
+
static const char *
AuthzSVNAccessFile_cmd(cmd_parms *cmd, void *config, const char *arg1)
{
@@ -94,7 +130,9 @@ AuthzSVNAccessFile_cmd(cmd_parms *cmd, void *config, const char *arg1)
return "AuthzSVNAccessFile and AuthzSVNReposRelativeAccessFile "
"directives are mutually exclusive.";
- conf->access_file = ap_server_root_relative(cmd->pool, arg1);
+ conf->access_file = canonicalize_access_file(arg1, TRUE, cmd->pool);
+ if (!conf->access_file)
+ return apr_pstrcat(cmd->pool, "Invalid file path ", arg1, NULL);
return NULL;
}
@@ -111,7 +149,24 @@ AuthzSVNReposRelativeAccessFile_cmd(cmd_parms *cmd,
return "AuthzSVNAccessFile and AuthzSVNReposRelativeAccessFile "
"directives are mutually exclusive.";
- conf->repo_relative_access_file = arg1;
+ conf->repo_relative_access_file = canonicalize_access_file(arg1, FALSE,
+ cmd->pool);
+
+ if (!conf->repo_relative_access_file)
+ return apr_pstrcat(cmd->pool, "Invalid file path ", arg1, NULL);
+
+ return NULL;
+}
+
+static const char *
+AuthzSVNGroupsFile_cmd(cmd_parms *cmd, void *config, const char *arg1)
+{
+ authz_svn_config_rec *conf = config;
+
+ conf->groups_file = canonicalize_access_file(arg1, TRUE, cmd->pool);
+
+ if (!conf->groups_file)
+ return apr_pstrcat(cmd->pool, "Invalid file path ", arg1, NULL);
return NULL;
}
@@ -128,13 +183,25 @@ static const command_rec authz_svn_cmds[] =
NULL,
OR_AUTHCFG,
"Path to text file containing permissions of repository "
- "paths."),
+ "paths. Path may be an repository relative URL (^/) or "
+ "absolute file:// URL to a text file in a Subversion "
+ "repository."),
AP_INIT_TAKE1("AuthzSVNReposRelativeAccessFile",
AuthzSVNReposRelativeAccessFile_cmd,
NULL,
OR_AUTHCFG,
"Path (relative to repository 'conf' directory) to text "
- "file containing permissions of repository paths. "),
+ "file containing permissions of repository paths. Path may "
+ "be an repository relative URL (^/) or absolute file:// URL "
+ "to a text file in a Subversion repository."),
+ AP_INIT_TAKE1("AuthzSVNGroupsFile",
+ AuthzSVNGroupsFile_cmd,
+ NULL,
+ OR_AUTHCFG,
+ "Path to text file containing group definitions for all "
+ "repositories. Path may be an repository relative URL (^/) "
+ "or absolute file:// URL to a text file in a Subversion "
+ "repository."),
AP_INIT_FLAG("AuthzSVNAnonymous", ap_set_flag_slot,
(void *)APR_OFFSETOF(authz_svn_config_rec, anonymous),
OR_AUTHCFG,
@@ -159,61 +226,212 @@ static const command_rec authz_svn_cmds[] =
{ NULL }
};
+
+/* The macros LOG_ARGS_SIGNATURE and LOG_ARGS_CASCADE are expanded as formal
+ * and actual parameters to log_access_verdict with respect to HTTPD version.
+ */
+#if AP_MODULE_MAGIC_AT_LEAST(20100606,0)
+#define LOG_ARGS_SIGNATURE const char *file, int line, int module_index
+#define LOG_ARGS_CASCADE file, line, module_index
+#else
+#define LOG_ARGS_SIGNATURE const char *file, int line
+#define LOG_ARGS_CASCADE file, line
+#endif
+
+/* Log a message indicating the access control decision made about a
+ * request. The macro LOG_ARGS_SIGNATURE expands to FILE, LINE and
+ * MODULE_INDEX in HTTPD 2.3 as APLOG_MARK macro has been changed for
+ * per-module loglevel configuration. It expands to FILE and LINE
+ * in older server versions. ALLOWED is boolean.
+ * REPOS_PATH and DEST_REPOS_PATH are information
+ * about the request. DEST_REPOS_PATH may be NULL. */
+static void
+log_access_verdict(LOG_ARGS_SIGNATURE,
+ const request_rec *r, int allowed,
+ const char *repos_path, const char *dest_repos_path)
+{
+ int level = allowed ? APLOG_INFO : APLOG_ERR;
+ const char *verdict = allowed ? "granted" : "denied";
+
+ if (r->user)
+ {
+ if (dest_repos_path)
+ ap_log_rerror(LOG_ARGS_CASCADE, level, 0, r,
+ "Access %s: '%s' %s %s %s", verdict, r->user,
+ r->method, repos_path, dest_repos_path);
+ else
+ ap_log_rerror(LOG_ARGS_CASCADE, level, 0, r,
+ "Access %s: '%s' %s %s", verdict, r->user,
+ r->method, repos_path);
+ }
+ else
+ {
+ if (dest_repos_path)
+ ap_log_rerror(LOG_ARGS_CASCADE, level, 0, r,
+ "Access %s: - %s %s %s", verdict,
+ r->method, repos_path, dest_repos_path);
+ else
+ ap_log_rerror(LOG_ARGS_CASCADE, level, 0, r,
+ "Access %s: - %s %s", verdict,
+ r->method, repos_path);
+ }
+}
+
+/* Log a message indiciating the ERR encountered during the request R.
+ * LOG_ARGS_SIGNATURE expands as in log_access_verdict() above.
+ * PREFIX is inserted at the start of the message. The rest of the
+ * message is generated by combining the message for each error in the
+ * chain of ERR, excluding for trace errors. ERR will be cleared
+ * when finished. */
+static void
+log_svn_error(LOG_ARGS_SIGNATURE,
+ request_rec *r, const char *prefix,
+ svn_error_t *err, apr_pool_t *scratch_pool)
+{
+ svn_error_t *err_pos = svn_error_purge_tracing(err);
+ svn_stringbuf_t *buff = svn_stringbuf_create(prefix, scratch_pool);
+
+ /* Build the error chain into a space separated stringbuf. */
+ while (err_pos)
+ {
+ svn_stringbuf_appendbyte(buff, ' ');
+ if (err_pos->message)
+ {
+ svn_stringbuf_appendcstr(buff, err_pos->message);
+ }
+ else
+ {
+ char strerr[256];
+
+ svn_stringbuf_appendcstr(buff, svn_strerror(err->apr_err, strerr,
+ sizeof(strerr)));
+ }
+
+ err_pos = err_pos->child;
+ }
+
+ ap_log_rerror(LOG_ARGS_CASCADE, APLOG_ERR,
+ /* If it is an error code that APR can make sense of, then
+ show it, otherwise, pass zero to avoid putting "APR does
+ not understand this error code" in the error log. */
+ ((err->apr_err >= APR_OS_START_USERERR &&
+ err->apr_err < APR_OS_START_CANONERR) ?
+ 0 : err->apr_err),
+ r, "%s", buff->data);
+
+ svn_error_clear(err);
+}
+
+/* Resolve *PATH into an absolute canonical URL iff *PATH is a repos-relative
+ * URL. If *REPOS_URL is NULL convert REPOS_PATH into a file URL stored
+ * in *REPOS_URL, if *REPOS_URL is not null REPOS_PATH is ignored. The
+ * resulting *REPOS_URL will be used as the root of the repos-relative URL.
+ * The result will be stored in *PATH. */
+static svn_error_t *
+resolve_repos_relative_url(const char **path, const char **repos_url,
+ const char *repos_path, apr_pool_t *pool)
+{
+ if (svn_path_is_repos_relative_url(*path))
+ {
+ if (!*repos_url)
+ SVN_ERR(svn_uri_get_file_url_from_dirent(repos_url, repos_path, pool));
+
+ SVN_ERR(svn_path_resolve_repos_relative_url(path, *path,
+ *repos_url, pool));
+ *path = svn_uri_canonicalize(*path, pool);
+ }
+
+ return SVN_NO_ERROR;
+}
+
/*
* Get the, possibly cached, svn_authz_t for this request.
*/
static svn_authz_t *
-get_access_conf(request_rec *r, authz_svn_config_rec *conf)
+get_access_conf(request_rec *r, authz_svn_config_rec *conf,
+ apr_pool_t *scratch_pool)
{
const char *cache_key = NULL;
const char *access_file;
+ const char *groups_file;
const char *repos_path;
+ const char *repos_url = NULL;
void *user_data = NULL;
svn_authz_t *access_conf = NULL;
- svn_error_t *svn_err;
+ svn_error_t *svn_err = SVN_NO_ERROR;
dav_error *dav_err;
- char errbuf[256];
+
+ dav_err = dav_svn_get_repos_path(r, conf->base_path, &repos_path);
+ if (dav_err)
+ {
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "%s", dav_err->desc);
+ return NULL;
+ }
if (conf->repo_relative_access_file)
{
- dav_err = dav_svn_get_repos_path(r, conf->base_path, &repos_path);
- if (dav_err) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "%s", dav_err->desc);
- return NULL;
- }
- access_file = svn_dirent_join_many(r->pool, repos_path, "conf",
- conf->repo_relative_access_file,
- NULL);
+ access_file = conf->repo_relative_access_file;
+ if (!svn_path_is_repos_relative_url(access_file) &&
+ !svn_path_is_url(access_file))
+ {
+ access_file = svn_dirent_join_many(scratch_pool, repos_path, "conf",
+ conf->repo_relative_access_file,
+ NULL);
+ }
}
else
{
access_file = conf->access_file;
}
+ groups_file = conf->groups_file;
+
+ svn_err = resolve_repos_relative_url(&access_file, &repos_url, repos_path,
+ scratch_pool);
+ if (svn_err)
+ {
+ log_svn_error(APLOG_MARK, r,
+ conf->repo_relative_access_file ?
+ "Failed to load the AuthzSVNReposRelativeAccessFile:" :
+ "Failed to load the AuthzSVNAccessFile:",
+ svn_err, scratch_pool);
+ return NULL;
+ }
ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
"Path to authz file is %s", access_file);
- cache_key = apr_pstrcat(r->pool, "mod_authz_svn:",
- access_file, (char *)NULL);
+ if (groups_file)
+ {
+ svn_err = resolve_repos_relative_url(&groups_file, &repos_url, repos_path,
+ scratch_pool);
+ if (svn_err)
+ {
+ log_svn_error(APLOG_MARK, r,
+ "Failed to load the AuthzSVNGroupsFile:",
+ svn_err, scratch_pool);
+ return NULL;
+ }
+
+ ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
+ "Path to groups file is %s", groups_file);
+ }
+
+ cache_key = apr_pstrcat(scratch_pool, "mod_authz_svn:",
+ access_file, groups_file, (char *)NULL);
apr_pool_userdata_get(&user_data, cache_key, r->connection->pool);
access_conf = user_data;
if (access_conf == NULL)
{
- svn_err = svn_repos_authz_read(&access_conf, access_file,
- TRUE, r->connection->pool);
+
+ svn_err = svn_repos_authz_read2(&access_conf, access_file,
+ groups_file, TRUE,
+ r->connection->pool);
+
if (svn_err)
{
- ap_log_rerror(APLOG_MARK, APLOG_ERR,
- /* If it is an error code that APR can make sense
- of, then show it, otherwise, pass zero to avoid
- putting "APR does not understand this error code"
- in the error log. */
- ((svn_err->apr_err >= APR_OS_START_USERERR &&
- svn_err->apr_err < APR_OS_START_CANONERR) ?
- 0 : svn_err->apr_err),
- r, "Failed to load the AuthzSVNAccessFile: %s",
- svn_err_best_message(svn_err, errbuf, sizeof(errbuf)));
- svn_error_clear(svn_err);
+ log_svn_error(APLOG_MARK, r,
+ "Failed to load the mod_authz_svn config:",
+ svn_err, scratch_pool);
access_conf = NULL;
}
else
@@ -234,7 +452,7 @@ convert_case(char *text, svn_boolean_t to_uppercase)
char *c = text;
while (*c)
{
- *c = (to_uppercase ? apr_toupper(*c) : apr_tolower(*c));
+ *c = (char)(to_uppercase ? apr_toupper(*c) : apr_tolower(*c));
++c;
}
}
@@ -242,12 +460,13 @@ convert_case(char *text, svn_boolean_t to_uppercase)
/* Return the username to authorize, with case-conversion performed if
CONF->force_username_case is set. */
static char *
-get_username_to_authorize(request_rec *r, authz_svn_config_rec *conf)
+get_username_to_authorize(request_rec *r, authz_svn_config_rec *conf,
+ apr_pool_t *pool)
{
char *username_to_authorize = r->user;
if (username_to_authorize && conf->force_username_case)
{
- username_to_authorize = apr_pstrdup(r->pool, r->user);
+ username_to_authorize = apr_pstrdup(pool, r->user);
convert_case(username_to_authorize,
strcasecmp(conf->force_username_case, "upper") == 0);
}
@@ -281,8 +500,8 @@ req_check_access(request_rec *r,
svn_boolean_t authz_access_granted = FALSE;
svn_authz_t *access_conf = NULL;
svn_error_t *svn_err;
- char errbuf[256];
- const char *username_to_authorize = get_username_to_authorize(r, conf);
+ const char *username_to_authorize = get_username_to_authorize(r, conf,
+ r->pool);
switch (r->method_number)
{
@@ -418,7 +637,7 @@ req_check_access(request_rec *r,
}
/* Retrieve/cache authorization file */
- access_conf = get_access_conf(r,conf);
+ access_conf = get_access_conf(r,conf, r->pool);
if (access_conf == NULL)
return DECLINED;
@@ -453,19 +672,9 @@ req_check_access(request_rec *r,
r->pool);
if (svn_err)
{
- ap_log_rerror(APLOG_MARK, APLOG_ERR,
- /* If it is an error code that APR can make
- sense of, then show it, otherwise, pass
- zero to avoid putting "APR does not
- understand this error code" in the error
- log. */
- ((svn_err->apr_err >= APR_OS_START_USERERR &&
- svn_err->apr_err < APR_OS_START_CANONERR) ?
- 0 : svn_err->apr_err),
- r, "Failed to perform access control: %s",
- svn_err_best_message(svn_err, errbuf,
- sizeof(errbuf)));
- svn_error_clear(svn_err);
+ log_svn_error(APLOG_MARK, r,
+ "Failed to perform access control:",
+ svn_err, r->pool);
return DECLINED;
}
@@ -500,17 +709,9 @@ req_check_access(request_rec *r,
r->pool);
if (svn_err)
{
- ap_log_rerror(APLOG_MARK, APLOG_ERR,
- /* If it is an error code that APR can make sense
- of, then show it, otherwise, pass zero to avoid
- putting "APR does not understand this error code"
- in the error log. */
- ((svn_err->apr_err >= APR_OS_START_USERERR &&
- svn_err->apr_err < APR_OS_START_CANONERR) ?
- 0 : svn_err->apr_err),
- r, "Failed to perform access control: %s",
- svn_err_best_message(svn_err, errbuf, sizeof(errbuf)));
- svn_error_clear(svn_err);
+ log_svn_error(APLOG_MARK, r,
+ "Failed to perform access control:",
+ svn_err, r->pool);
return DECLINED;
}
@@ -525,76 +726,24 @@ req_check_access(request_rec *r,
return OK;
}
-/* The macros LOG_ARGS_SIGNATURE and LOG_ARGS_CASCADE are expanded as formal
- * and actual parameters to log_access_verdict with respect to HTTPD version.
- */
-#if AP_MODULE_MAGIC_AT_LEAST(20100606,0)
-#define LOG_ARGS_SIGNATURE const char *file, int line, int module_index
-#define LOG_ARGS_CASCADE file, line, module_index
-#else
-#define LOG_ARGS_SIGNATURE const char *file, int line
-#define LOG_ARGS_CASCADE file, line
-#endif
-
-/* Log a message indicating the access control decision made about a
- * request. The macro LOG_ARGS_SIGNATURE expands to FILE, LINE and
- * MODULE_INDEX in HTTPD 2.3 as APLOG_MARK macro has been changed for
- * per-module loglevel configuration. It expands to FILE and LINE
- * in older server versions. ALLOWED is boolean.
- * REPOS_PATH and DEST_REPOS_PATH are information
- * about the request. DEST_REPOS_PATH may be NULL. */
-static void
-log_access_verdict(LOG_ARGS_SIGNATURE,
- const request_rec *r, int allowed,
- const char *repos_path, const char *dest_repos_path)
-{
- int level = allowed ? APLOG_INFO : APLOG_ERR;
- const char *verdict = allowed ? "granted" : "denied";
-
- if (r->user)
- {
- if (dest_repos_path)
- ap_log_rerror(LOG_ARGS_CASCADE, level, 0, r,
- "Access %s: '%s' %s %s %s", verdict, r->user,
- r->method, repos_path, dest_repos_path);
- else
- ap_log_rerror(LOG_ARGS_CASCADE, level, 0, r,
- "Access %s: '%s' %s %s", verdict, r->user,
- r->method, repos_path);
- }
- else
- {
- if (dest_repos_path)
- ap_log_rerror(LOG_ARGS_CASCADE, level, 0, r,
- "Access %s: - %s %s %s", verdict,
- r->method, repos_path, dest_repos_path);
- else
- ap_log_rerror(LOG_ARGS_CASCADE, level, 0, r,
- "Access %s: - %s %s", verdict,
- r->method, repos_path);
- }
-}
-
/*
- * This function is used as a provider to allow mod_dav_svn to bypass the
- * generation of an apache request when checking GET access from
- * "mod_dav_svn/authz.c" .
+ * Implementation of subreq_bypass with scratch_pool parameter.
*/
static int
-subreq_bypass(request_rec *r,
- const char *repos_path,
- const char *repos_name)
+subreq_bypass2(request_rec *r,
+ const char *repos_path,
+ const char *repos_name,
+ apr_pool_t *scratch_pool)
{
svn_error_t *svn_err = NULL;
svn_authz_t *access_conf = NULL;
authz_svn_config_rec *conf = NULL;
svn_boolean_t authz_access_granted = FALSE;
- char errbuf[256];
const char *username_to_authorize;
conf = ap_get_module_config(r->per_dir_config,
&authz_svn_module);
- username_to_authorize = get_username_to_authorize(r, conf);
+ username_to_authorize = get_username_to_authorize(r, conf, scratch_pool);
/* If configured properly, this should never be true, but just in case. */
if (!conf->anonymous
@@ -605,7 +754,7 @@ subreq_bypass(request_rec *r,
}
/* Retrieve authorization file */
- access_conf = get_access_conf(r, conf);
+ access_conf = get_access_conf(r, conf, scratch_pool);
if (access_conf == NULL)
return HTTP_FORBIDDEN;
@@ -619,21 +768,12 @@ subreq_bypass(request_rec *r,
username_to_authorize,
svn_authz_none|svn_authz_read,
&authz_access_granted,
- r->pool);
+ scratch_pool);
if (svn_err)
{
- ap_log_rerror(APLOG_MARK, APLOG_ERR,
- /* If it is an error code that APR can make
- sense of, then show it, otherwise, pass
- zero to avoid putting "APR does not
- understand this error code" in the error
- log. */
- ((svn_err->apr_err >= APR_OS_START_USERERR &&
- svn_err->apr_err < APR_OS_START_CANONERR) ?
- 0 : svn_err->apr_err),
- r, "Failed to perform access control: %s",
- svn_err_best_message(svn_err, errbuf, sizeof(errbuf)));
- svn_error_clear(svn_err);
+ log_svn_error(APLOG_MARK, r,
+ "Failed to perform access control:",
+ svn_err, scratch_pool);
return HTTP_FORBIDDEN;
}
if (!authz_access_granted)
@@ -649,6 +789,26 @@ subreq_bypass(request_rec *r,
}
/*
+ * This function is used as a provider to allow mod_dav_svn to bypass the
+ * generation of an apache request when checking GET access from
+ * "mod_dav_svn/authz.c" .
+ */
+static int
+subreq_bypass(request_rec *r,
+ const char *repos_path,
+ const char *repos_name)
+{
+ int status;
+ apr_pool_t *scratch_pool;
+
+ scratch_pool = svn_pool_create(r->pool);
+ status = subreq_bypass2(r, repos_path, repos_name, scratch_pool);
+ svn_pool_destroy(scratch_pool);
+
+ return status;
+}
+
+/*
* Hooks
*/
diff --git a/subversion/mod_dav_svn/activity.c b/subversion/mod_dav_svn/activity.c
index 3f6a5d6..895c4cf 100644
--- a/subversion/mod_dav_svn/activity.c
+++ b/subversion/mod_dav_svn/activity.c
@@ -28,6 +28,7 @@
#include <httpd.h>
#include <mod_dav.h>
+#include "svn_hash.h"
#include "svn_checksum.h"
#include "svn_error.h"
#include "svn_io.h"
@@ -240,17 +241,23 @@ dav_svn__store_activity(const dav_svn_repos *repos,
dav_error *
dav_svn__create_txn(const dav_svn_repos *repos,
const char **ptxn_name,
+ apr_hash_t *revprops,
apr_pool_t *pool)
{
svn_revnum_t rev;
svn_fs_txn_t *txn;
svn_error_t *serr;
- apr_hash_t *revprop_table = apr_hash_make(pool);
+
+ if (! revprops)
+ {
+ revprops = apr_hash_make(pool);
+ }
if (repos->username)
{
- apr_hash_set(revprop_table, SVN_PROP_REVISION_AUTHOR, APR_HASH_KEY_STRING,
- svn_string_create(repos->username, pool));
+ svn_hash_sets(revprops,
+ SVN_PROP_REVISION_AUTHOR,
+ svn_string_create(repos->username, pool));
}
serr = svn_fs_youngest_rev(&rev, repos->fs, pool);
@@ -262,8 +269,7 @@ dav_svn__create_txn(const dav_svn_repos *repos,
}
serr = svn_repos_fs_begin_txn_for_commit2(&txn, repos->repos, rev,
- revprop_table,
- repos->pool);
+ revprops, repos->pool);
if (serr != NULL)
{
return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
diff --git a/subversion/mod_dav_svn/authz.c b/subversion/mod_dav_svn/authz.c
index a32b133..27763b0 100644
--- a/subversion/mod_dav_svn/authz.c
+++ b/subversion/mod_dav_svn/authz.c
@@ -97,6 +97,43 @@ dav_svn__allow_read(request_rec *r,
}
+svn_boolean_t
+dav_svn__allow_list_repos(request_rec *r,
+ const char *repos_name,
+ apr_pool_t *pool)
+{
+ const char *uri;
+ request_rec *subreq;
+ svn_boolean_t allowed = FALSE;
+
+ /* Easy out: if the admin has explicitly set 'SVNPathAuthz Off',
+ then this whole callback does nothing. */
+ if (! dav_svn__get_pathauthz_flag(r))
+ {
+ return TRUE;
+ }
+
+ /* Do not use short_circuit mode: bypass provider expects R to be request to
+ the repository to find repository relative authorization file. */
+
+ /* Build a Public Resource uri representing repository root. */
+ uri = svn_urlpath__join(dav_svn__get_root_dir(r),
+ svn_path_uri_encode(repos_name, pool), pool);
+
+ /* Check if GET would work against this uri. */
+ subreq = ap_sub_req_method_uri("GET", uri, r, r->output_filters);
+
+ if (subreq)
+ {
+ if (subreq->status == HTTP_OK)
+ allowed = TRUE;
+
+ ap_destroy_sub_req(subreq);
+ }
+
+ return allowed;
+}
+
/* This function implements 'svn_repos_authz_func_t', specifically
for read authorization.
diff --git a/subversion/mod_dav_svn/dav_svn.h b/subversion/mod_dav_svn/dav_svn.h
index ab776f1..8786518 100644
--- a/subversion/mod_dav_svn/dav_svn.h
+++ b/subversion/mod_dav_svn/dav_svn.h
@@ -52,6 +52,15 @@ extern "C" {
/* a pool-key for the shared dav_svn_root used by autoversioning */
#define DAV_SVN__AUTOVERSIONING_ACTIVITY "svn-autoversioning-activity"
+/* Option values for SVNAllowBulkUpdates. Note that
+ it's important that CONF_BULKUPD_DEFAULT is 0 to make
+ dav_svn_merge_dir_config do the right thing. */
+typedef enum dav_svn__bulk_upd_conf {
+ CONF_BULKUPD_DEFAULT,
+ CONF_BULKUPD_ON,
+ CONF_BULKUPD_OFF,
+ CONF_BULKUPD_PREFER
+} dav_svn__bulk_upd_conf;
/* dav_svn_repos
*
@@ -110,7 +119,7 @@ typedef struct dav_svn_repos {
svn_boolean_t autoversioning;
/* Whether bulk updates are allowed for this repository. */
- svn_boolean_t bulk_updates;
+ dav_svn__bulk_upd_conf bulk_updates;
/* Whether HTTP protocol version 2 is allowed to be used. */
svn_boolean_t v2_protocol;
@@ -278,11 +287,15 @@ struct dav_resource_private {
svn_boolean_t auto_checked_out;
/* was this resource fetched using our public peg-/working-rev CGI
- interface (ie: /path/to/item?p=PEGREV]? */
+ interface (ie: /path/to/item?p=PEGREV)? */
svn_boolean_t pegged;
/* Cache any revprop change error */
svn_error_t *revprop_error;
+
+ /* was keyword substitution requested using our public CGI interface
+ (ie: /path/to/item?kw=1)? */
+ svn_boolean_t keyword_subst;
};
@@ -302,10 +315,7 @@ const char *dav_svn__get_fs_parent_path(request_rec *r);
svn_boolean_t dav_svn__get_autoversioning_flag(request_rec *r);
/* for the repository referred to by this request, are bulk updates allowed? */
-svn_boolean_t dav_svn__get_bulk_updates_flag(request_rec *r);
-
-/* for the repository referred to by this request, should httpv2 be advertised? */
-svn_boolean_t dav_svn__get_v2_protocol_flag(request_rec *r);
+dav_svn__bulk_upd_conf dav_svn__get_bulk_updates_flag(request_rec *r);
/* for the repository referred to by this request, are subrequests active? */
svn_boolean_t dav_svn__get_pathauthz_flag(request_rec *r);
@@ -316,6 +326,9 @@ svn_boolean_t dav_svn__get_txdelta_cache_flag(request_rec *r);
/* for the repository referred to by this request, is fulltext caching active? */
svn_boolean_t dav_svn__get_fulltext_cache_flag(request_rec *r);
+/* for the repository referred to by this request, is revprop caching active? */
+svn_boolean_t dav_svn__get_revprop_cache_flag(request_rec *r);
+
/* for the repository referred to by this request, are subrequests bypassed?
* A function pointer if yes, NULL if not.
*/
@@ -325,6 +338,17 @@ authz_svn__subreq_bypass_func_t dav_svn__get_pathauthz_bypass(request_rec *r);
SVNParentPath allowed? */
svn_boolean_t dav_svn__get_list_parentpath_flag(request_rec *r);
+/* For the repository referred to by this request, should HTTPv2
+ protocol support be advertised? Note that this also takes into
+ account the support level expected of based on the specified
+ master server version (if provided via SVNMasterVersion). */
+svn_boolean_t dav_svn__check_httpv2_support(request_rec *r);
+
+/* For the repository referred to by this request, should ephemeral
+ txnprop support be advertised? */
+svn_boolean_t dav_svn__check_ephemeral_txnprops_support(request_rec *r);
+
+
/* SPECIAL URI
@@ -373,6 +397,11 @@ const char *dav_svn__get_xslt_uri(request_rec *r);
/* ### Is this assumed to be URI-encoded? */
const char *dav_svn__get_master_uri(request_rec *r);
+/* Return the version of the master server (used for mirroring) iff a
+ master URI is in place for this location; otherwise, return NULL.
+ Comes from the <SVNMasterVersion> directive. */
+svn_version_t *dav_svn__get_master_version(request_rec *r);
+
/* Return the disk path to the activities db.
Comes from the <SVNActivitiesDB> directive. */
const char *dav_svn__get_activities_db(request_rec *r);
@@ -383,7 +412,10 @@ const char *dav_svn__get_activities_db(request_rec *r);
const char *dav_svn__get_root_dir(request_rec *r);
/* Return the data compression level to be used over the wire. */
-int dav_svn__get_compression_level(void);
+int dav_svn__get_compression_level(request_rec *r);
+
+/* Return the hook script environment parsed from the configuration. */
+const char *dav_svn__get_hooks_env(request_rec *r);
/** For HTTP protocol v2, these are the new URIs and URI stubs
returned to the client in our OPTIONS response. They all depend
@@ -414,10 +446,17 @@ const char *dav_svn__get_vtxn_root_stub(request_rec *r);
/*** activity.c ***/
/* Create a new transaction based on HEAD in REPOS, setting *PTXN_NAME
- to the name of that transaction. Use POOL for allocations. */
+ to the name of that transaction. REVPROPS is an optional hash of
+ const char * property names and const svn_string_t * values which
+ will be set as transactions properties on the transaction this
+ function creates. Use POOL for allocations.
+
+ NOTE: This function will overwrite the svn:author property, if
+ any, found in REVPROPS. */
dav_error *
dav_svn__create_txn(const dav_svn_repos *repos,
const char **ptxn_name,
+ apr_hash_t *revprops,
apr_pool_t *pool);
/* If it exists, abort the transaction named TXN_NAME from REPOS. Use
@@ -614,6 +653,7 @@ static const dav_report_elem dav_svn__reports_list[] = {
{ SVN_XML_NAMESPACE, "replay-report" },
{ SVN_XML_NAMESPACE, "get-deleted-rev-report" },
{ SVN_XML_NAMESPACE, SVN_DAV__MERGEINFO_REPORT },
+ { SVN_XML_NAMESPACE, SVN_DAV__INHERITED_PROPS_REPORT },
{ NULL, NULL },
};
@@ -661,23 +701,22 @@ dav_svn__get_deleted_rev_report(const dav_resource *resource,
const apr_xml_doc *doc,
ap_filter_t *output);
+dav_error *
+dav_svn__get_inherited_props_report(const dav_resource *resource,
+ const apr_xml_doc *doc,
+ ap_filter_t *output);
/*** posts/ ***/
-/* The list of Subversion's custom POSTs. */
-/* ### TODO: Populate this list and transmit its contents in the
- ### OPTIONS response.
-static const char * dav_svn__posts_list[] = {
- "create-txn",
- NULL
-};
-*/
-
/* The various POST handlers, defined in posts/, and used by repos.c. */
dav_error *
dav_svn__post_create_txn(const dav_resource *resource,
svn_skel_t *request_skel,
ap_filter_t *output);
+dav_error *
+dav_svn__post_create_txn_with_props(const dav_resource *resource,
+ svn_skel_t *request_skel,
+ ap_filter_t *output);
/*** authz.c ***/
@@ -720,6 +759,20 @@ dav_svn__allow_read_resource(const dav_resource *resource,
apr_pool_t *pool);
+/* Return TRUE iff the current user (as determined by Apache's
+ authentication system) has permission to read repository REPOS_NAME.
+ This will invoke any authz modules loaded into Apache unless this
+ Subversion location has been configured to bypass those in favor of a
+ direct lookup in the Subversion authz subsystem. Use POOL for any
+ temporary allocation.
+ IMPORTANT: R must be request for DAV_SVN_RESTYPE_PARENTPATH_COLLECTION
+ resource.
+*/
+svn_boolean_t
+dav_svn__allow_list_repos(request_rec *r,
+ const char *repos_name,
+ apr_pool_t *pool);
+
/* If authz is enabled in the specified BATON, return a read authorization
function. Otherwise, return NULL. */
svn_repos_authz_func_t
@@ -733,11 +786,15 @@ dav_svn__authz_read_func(dav_svn__authz_read_baton *baton);
processing. See dav_new_error_tag for parameter documentation.
Note that DESC may be null (it's hard to track this down from
dav_new_error_tag()'s documentation, but see the dav_error type,
- which says that its desc field may be NULL). */
+ which says that its desc field may be NULL).
+
+ If ERROR_ID is 0, SVN_ERR_RA_DAV_REQUEST_FAILED will be used as a
+ default value for the error code.
+*/
dav_error *
dav_svn__new_error_tag(apr_pool_t *pool,
int status,
- int errno_id,
+ int error_id,
const char *desc,
const char *namespace,
const char *tagname);
@@ -748,11 +805,15 @@ dav_svn__new_error_tag(apr_pool_t *pool,
processing. See dav_new_error for parameter documentation.
Note that DESC may be null (it's hard to track this down from
dav_new_error()'s documentation, but see the dav_error type,
- which says that its desc field may be NULL). */
+ which says that its desc field may be NULL).
+
+ If ERROR_ID is 0, SVN_ERR_RA_DAV_REQUEST_FAILED will be used as a
+ default value for the error code.
+*/
dav_error *
dav_svn__new_error(apr_pool_t *pool,
int status,
- int errno_id,
+ int error_id,
const char *desc);
@@ -808,7 +869,8 @@ enum dav_svn__build_what {
DAV_SVN__BUILD_URI_BC, /* a Baseline Collection */
DAV_SVN__BUILD_URI_PUBLIC, /* the "public" VCR */
DAV_SVN__BUILD_URI_VERSION, /* a Version Resource */
- DAV_SVN__BUILD_URI_VCC /* a Version Controlled Configuration */
+ DAV_SVN__BUILD_URI_VCC, /* a Version Controlled Configuration */
+ DAV_SVN__BUILD_URI_REVROOT /* HTTPv2: Revision Root resource */
};
const char *
@@ -841,6 +903,12 @@ dav_svn__simple_parse_uri(dav_svn__uri_info *info,
const char *uri,
apr_pool_t *pool);
+/* Test the request R to determine if we should return the list of
+ * repositories at the parent path. Only true if SVNListParentPath directive
+ * is 'on' and the request is for our configured root path. */
+svn_boolean_t
+dav_svn__is_parentpath_list(request_rec *r);
+
int dav_svn__find_ns(const apr_array_header_t *namespaces, const char *uri);
diff --git a/subversion/mod_dav_svn/deadprops.c b/subversion/mod_dav_svn/deadprops.c
index faf51b9..5d228a4 100644
--- a/subversion/mod_dav_svn/deadprops.c
+++ b/subversion/mod_dav_svn/deadprops.c
@@ -1,5 +1,7 @@
/*
- * deadprops.c: mod_dav_svn dead property provider functions for Subversion
+ * deadprops.c: mod_dav_svn provider functions for "dead properties"
+ * (properties implemented by Subversion or its users,
+ * not as part of the WebDAV specification).
*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
@@ -26,6 +28,7 @@
#include <httpd.h>
#include <mod_dav.h>
+#include "svn_hash.h"
#include "svn_xml.h"
#include "svn_pools.h"
#include "svn_dav.h"
@@ -134,7 +137,7 @@ get_value(dav_db *db, const dav_prop_name *name, svn_string_t **pvalue)
propname, db->p);
else
serr = svn_repos_fs_revision_prop(pvalue,
- db->resource->info-> repos->repos,
+ db->resource->info->repos->repos,
db->resource->info->root.rev,
propname, db->authz_read_func,
db->authz_read_baton, db->p);
@@ -160,6 +163,23 @@ get_value(dav_db *db, const dav_prop_name *name, svn_string_t **pvalue)
}
+static svn_error_t *
+change_txn_prop(svn_fs_txn_t *txn,
+ const char *propname,
+ const svn_string_t *value,
+ apr_pool_t *scratch_pool)
+{
+ if (strcmp(propname, SVN_PROP_REVISION_AUTHOR) == 0)
+ return svn_error_create(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL,
+ "Attempted to modify 'svn:author' property "
+ "on a transaction");
+
+ SVN_ERR(svn_repos_fs_change_txn_prop(txn, propname, value, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+
static dav_error *
save_value(dav_db *db, const dav_prop_name *name,
const svn_string_t *const *old_value_p,
@@ -168,13 +188,14 @@ save_value(dav_db *db, const dav_prop_name *name,
const char *propname;
svn_error_t *serr;
const dav_resource *resource = db->resource;
+ apr_pool_t *subpool;
/* get the repos-local name */
get_repos_propname(db, name, &propname);
if (propname == NULL)
{
- if (db->resource->info->repos->autoversioning)
+ if (resource->info->repos->autoversioning)
/* ignore the unknown namespace of the incoming prop. */
propname = name->name;
else
@@ -202,13 +223,15 @@ save_value(dav_db *db, const dav_prop_name *name,
*/
- if (db->resource->baselined)
+ /* A subpool to cope with mod_dav making multiple calls, e.g. during
+ PROPPATCH with multiple values. */
+ subpool = svn_pool_create(resource->pool);
+ if (resource->baselined)
{
- if (db->resource->working)
+ if (resource->working)
{
- serr = svn_repos_fs_change_txn_prop(resource->info->root.txn,
- propname, value,
- resource->pool);
+ serr = change_txn_prop(resource->info->root.txn, propname,
+ value, subpool);
}
else
{
@@ -219,7 +242,7 @@ save_value(dav_db *db, const dav_prop_name *name,
TRUE, TRUE,
db->authz_read_func,
db->authz_read_baton,
- resource->pool);
+ subpool);
/* Prepare any hook failure message to get sent over the wire */
if (serr)
@@ -242,20 +265,21 @@ save_value(dav_db *db, const dav_prop_name *name,
dav_svn__operational_log(resource->info,
svn_log__change_rev_prop(
resource->info->root.rev,
- propname, resource->pool));
+ propname, subpool));
}
}
else if (resource->info->restype == DAV_SVN_RESTYPE_TXN_COLLECTION)
{
- serr = svn_repos_fs_change_txn_prop(resource->info->root.txn,
- propname, value, resource->pool);
+ serr = change_txn_prop(resource->info->root.txn, propname,
+ value, subpool);
}
else
{
serr = svn_repos_fs_change_node_prop(resource->info->root.root,
get_repos_path(resource->info),
- propname, value, resource->pool);
+ propname, value, subpool);
}
+ svn_pool_destroy(subpool);
if (serr != NULL)
return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
@@ -512,10 +536,6 @@ db_store(dav_db *db,
/* ### namespace check? */
if (elem->first_child && !strcmp(elem->first_child->name, SVN_DAV__OLD_VALUE))
{
- const char *propname;
-
- get_repos_propname(db, name, &propname);
-
/* Parse OLD_PROPVAL. */
old_propval = svn_string_create(dav_xml_get_cdata(elem->first_child, pool,
0 /* strip_white */),
@@ -540,6 +560,7 @@ db_remove(dav_db *db, const dav_prop_name *name)
{
svn_error_t *serr;
const char *propname;
+ apr_pool_t *subpool;
/* get the repos-local name */
get_repos_propname(db, name, &propname);
@@ -548,11 +569,15 @@ db_remove(dav_db *db, const dav_prop_name *name)
if (propname == NULL)
return NULL;
+ /* A subpool to cope with mod_dav making multiple calls, e.g. during
+ PROPPATCH with multiple values. */
+ subpool = svn_pool_create(db->resource->pool);
+
/* Working Baseline or Working (Version) Resource */
if (db->resource->baselined)
if (db->resource->working)
- serr = svn_repos_fs_change_txn_prop(db->resource->info->root.txn,
- propname, NULL, db->resource->pool);
+ serr = change_txn_prop(db->resource->info->root.txn, propname,
+ NULL, subpool);
else
/* ### VIOLATING deltaV: you can't proppatch a baseline, it's
not a working resource! But this is how we currently
@@ -564,11 +589,12 @@ db_remove(dav_db *db, const dav_prop_name *name)
propname, NULL, NULL, TRUE, TRUE,
db->authz_read_func,
db->authz_read_baton,
- db->resource->pool);
+ subpool);
else
serr = svn_repos_fs_change_node_prop(db->resource->info->root.root,
get_repos_path(db->resource->info),
- propname, NULL, db->resource->pool);
+ propname, NULL, subpool);
+ svn_pool_destroy(subpool);
if (serr != NULL)
return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
"could not remove a property",
diff --git a/subversion/mod_dav_svn/liveprops.c b/subversion/mod_dav_svn/liveprops.c
index 5640116..725ee92 100644
--- a/subversion/mod_dav_svn/liveprops.c
+++ b/subversion/mod_dav_svn/liveprops.c
@@ -1,5 +1,7 @@
/*
- * liveprops.c: mod_dav_svn live property provider functions for Subversion
+ * liveprops.c: mod_dav_svn provider functions for "live properties"
+ * (properties implemented by the WebDAV specification
+ * itself, not unique to Subversion or its users).
*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
@@ -75,7 +77,8 @@ enum {
SVN_PROPID_baseline_relative_path = 1,
SVN_PROPID_md5_checksum,
SVN_PROPID_repository_uuid,
- SVN_PROPID_deadprop_count
+ SVN_PROPID_deadprop_count,
+ SVN_PROPID_sha1_checksum
};
@@ -106,6 +109,7 @@ static const dav_liveprop_spec props[] =
SVN_RO_SVN_PROP(md5_checksum, md5-checksum),
SVN_RO_SVN_PROP(repository_uuid, repository-uuid),
SVN_RO_SVN_PROP(deadprop_count, deadprop-count),
+ SVN_RO_SVN_PROP(sha1_checksum, sha1-checksum),
{ 0 } /* sentinel */
};
@@ -273,15 +277,18 @@ insert_prop_internal(const dav_resource *resource,
int propid,
dav_prop_insert what,
apr_text_header *phdr,
- apr_pool_t *scratch_pool,
- apr_pool_t *result_pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
const char *value = NULL;
const char *s;
const dav_liveprop_spec *info;
- int global_ns;
+ long global_ns;
svn_error_t *serr;
+ /* ### TODO proper errors */
+ static const char *const error_value = "###error###";
+
/*
** Almost none of the SVN provider properties are defined if the
** resource does not exist. We do need to return the one VCC
@@ -378,14 +385,14 @@ insert_prop_internal(const dav_resource *resource,
scratch_pool);
if (serr != NULL)
{
- ap_log_rerror(APLOG_MARK, APLOG_ERR, serr->apr_err,
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, serr->apr_err,
resource->info->r,
"Can't get created-rev of '%s': "
"%s",
resource->info->repos_path,
serr->message);
svn_error_clear(serr);
- value = "###error###";
+ value = error_value;
break;
}
}
@@ -401,14 +408,14 @@ insert_prop_internal(const dav_resource *resource,
scratch_pool);
if (serr)
{
- ap_log_rerror(APLOG_MARK, APLOG_ERR, serr->apr_err,
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, serr->apr_err,
resource->info->r,
"Can't get author of r%ld: "
"%s",
committed_rev,
serr->message);
svn_error_clear(serr);
- value = "###error###";
+ value = error_value;
break;
}
@@ -429,15 +436,22 @@ insert_prop_internal(const dav_resource *resource,
svn_filesize_t len = 0;
/* our property, but not defined on collection resources */
- if (resource->collection || resource->baselined)
+ if (resource->type == DAV_RESOURCE_TYPE_ACTIVITY
+ || resource->collection || resource->baselined)
return DAV_PROP_INSERT_NOTSUPP;
serr = svn_fs_file_length(&len, resource->info->root.root,
resource->info->repos_path, scratch_pool);
if (serr != NULL)
{
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, serr->apr_err,
+ resource->info->r,
+ "Can't get filesize of '%s': "
+ "%s",
+ resource->info->repos_path,
+ serr->message);
svn_error_clear(serr);
- value = "0"; /* ### what to do? */
+ value = error_value;
break;
}
@@ -453,7 +467,9 @@ insert_prop_internal(const dav_resource *resource,
svn_string_t *pval;
const char *mime_type = NULL;
- if (resource->baselined && resource->type == DAV_RESOURCE_TYPE_VERSION)
+ if (resource->type == DAV_RESOURCE_TYPE_ACTIVITY
+ || (resource->baselined
+ && resource->type == DAV_RESOURCE_TYPE_VERSION))
return DAV_PROP_INSERT_NOTSUPP;
if (resource->type == DAV_RESOURCE_TYPE_PRIVATE
@@ -494,6 +510,8 @@ insert_prop_internal(const dav_resource *resource,
there's no point even checking. No matter what the
error is, we can't claim to have a mime type for
this resource. */
+ ap_log_rerror(APLOG_MARK, APLOG_WARNING, serr->apr_err,
+ resource->info->r, "%s", serr->message);
svn_error_clear(serr);
return DAV_PROP_INSERT_NOTDEF;
}
@@ -547,7 +565,7 @@ insert_prop_internal(const dav_resource *resource,
scratch_pool);
if (serr != NULL)
{
- ap_log_rerror(APLOG_MARK, APLOG_ERR, serr->apr_err,
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, serr->apr_err,
resource->info->r,
"Can't get youngest revision in '%s': "
"%s",
@@ -555,7 +573,7 @@ insert_prop_internal(const dav_resource *resource,
scratch_pool),
serr->message);
svn_error_clear(serr);
- value = "###error###";
+ value = error_value;
break;
}
s = dav_svn__build_uri(resource->info->repos,
@@ -627,14 +645,14 @@ insert_prop_internal(const dav_resource *resource,
scratch_pool);
if (serr != NULL)
{
- ap_log_rerror(APLOG_MARK, APLOG_ERR, serr->apr_err,
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, serr->apr_err,
resource->info->r,
"Can't get created-rev of '%s': "
"%s",
resource->info->repos_path,
serr->message);
svn_error_clear(serr);
- value = "###error###";
+ value = error_value;
break;
}
@@ -657,6 +675,7 @@ insert_prop_internal(const dav_resource *resource,
break;
case SVN_PROPID_md5_checksum:
+ case SVN_PROPID_sha1_checksum:
if ((! resource->collection)
&& (! resource->baselined)
&& (resource->type == DAV_RESOURCE_TYPE_REGULAR
@@ -665,24 +684,37 @@ insert_prop_internal(const dav_resource *resource,
{
svn_node_kind_t kind;
svn_checksum_t *checksum;
+ svn_checksum_kind_t checksum_kind;
+
+ if (propid == SVN_PROPID_md5_checksum)
+ {
+ checksum_kind = svn_checksum_md5;
+ }
+ else
+ {
+ checksum_kind = svn_checksum_sha1;
+ }
serr = svn_fs_check_path(&kind, resource->info->root.root,
resource->info->repos_path, scratch_pool);
if (!serr && kind == svn_node_file)
- serr = svn_fs_file_checksum(&checksum, svn_checksum_md5,
+ serr = svn_fs_file_checksum(&checksum, checksum_kind,
resource->info->root.root,
resource->info->repos_path, TRUE,
scratch_pool);
if (serr != NULL)
{
- ap_log_rerror(APLOG_MARK, APLOG_ERR, serr->apr_err,
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, serr->apr_err,
resource->info->r,
- "Can't fetch or compute MD5 checksum of '%s': "
+ "Can't fetch or compute %s checksum of '%s': "
"%s",
+ checksum_kind == svn_checksum_md5
+ ? "MD5"
+ : "SHA1",
resource->info->repos_path,
serr->message);
svn_error_clear(serr);
- value = "###error###";
+ value = error_value;
break;
}
@@ -703,14 +735,14 @@ insert_prop_internal(const dav_resource *resource,
serr = svn_fs_get_uuid(resource->info->repos->fs, &value, scratch_pool);
if (serr != NULL)
{
- ap_log_rerror(APLOG_MARK, APLOG_ERR, serr->apr_err,
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, serr->apr_err,
resource->info->r,
"Can't fetch UUID of '%s': "
"%s",
svn_fs_path(resource->info->repos->fs, scratch_pool),
serr->message);
svn_error_clear(serr);
- value = "###error###";
+ value = error_value;
break;
}
break;
@@ -728,14 +760,14 @@ insert_prop_internal(const dav_resource *resource,
resource->info->repos_path, scratch_pool);
if (serr != NULL)
{
- ap_log_rerror(APLOG_MARK, APLOG_ERR, serr->apr_err,
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, serr->apr_err,
resource->info->r,
"Can't fetch proplist of '%s': "
"%s",
resource->info->repos_path,
serr->message);
svn_error_clear(serr);
- value = "###error###";
+ value = error_value;
break;
}
@@ -758,11 +790,11 @@ insert_prop_internal(const dav_resource *resource,
if (what == DAV_PROP_INSERT_NAME
|| (what == DAV_PROP_INSERT_VALUE && *value == '\0')) {
- s = apr_psprintf(result_pool, "<lp%d:%s/>" DEBUG_CR, global_ns,
+ s = apr_psprintf(result_pool, "<lp%ld:%s/>" DEBUG_CR, global_ns,
info->name);
}
else if (what == DAV_PROP_INSERT_VALUE) {
- s = apr_psprintf(result_pool, "<lp%d:%s>%s</lp%d:%s>" DEBUG_CR,
+ s = apr_psprintf(result_pool, "<lp%ld:%s>%s</lp%ld:%s>" DEBUG_CR,
global_ns, info->name, value, global_ns, info->name);
}
else {
@@ -793,7 +825,7 @@ insert_prop(const dav_resource *resource,
scratch_pool = svn_pool_create(result_pool);
rv = insert_prop_internal(resource, propid, what, phdr,
- scratch_pool, result_pool);
+ result_pool, scratch_pool);
svn_pool_destroy(scratch_pool);
return rv;
@@ -802,10 +834,10 @@ insert_prop(const dav_resource *resource,
static int
is_writable(const dav_resource *resource, int propid)
{
- const dav_liveprop_spec *info;
+ const dav_liveprop_spec *info = NULL;
(void) dav_get_liveprop_info(propid, &dav_svn__liveprop_group, &info);
- return info->is_writable;
+ return info ? info->is_writable : FALSE;
}
@@ -931,7 +963,7 @@ dav_svn__insert_all_liveprops(request_rec *r,
{
svn_pool_clear(iterpool);
(void) insert_prop_internal(resource, spec->propid, what, phdr,
- iterpool, resource->pool);
+ resource->pool, iterpool);
}
svn_pool_destroy(iterpool);
diff --git a/subversion/mod_dav_svn/lock.c b/subversion/mod_dav_svn/lock.c
index c74fec9..68d6de5 100644
--- a/subversion/mod_dav_svn/lock.c
+++ b/subversion/mod_dav_svn/lock.c
@@ -28,6 +28,7 @@
#include <http_log.h>
#include <mod_dav.h>
+#include "svn_hash.h"
#include "svn_fs.h"
#include "svn_repos.h"
#include "svn_dav.h"
@@ -142,6 +143,8 @@ unescape_xml(const char **output,
if (apr_err)
{
char errbuf[1024];
+
+ errbuf[0] = '\0';
(void)apr_xml_parser_geterror(xml_parser, errbuf, sizeof(errbuf));
return dav_svn__new_error(pool, HTTP_INTERNAL_SERVER_ERROR,
DAV_ERR_LOCK_SAVE_LOCK, errbuf);
@@ -149,7 +152,7 @@ unescape_xml(const char **output,
apr_xml_to_text(pool, xml_doc->root, APR_XML_X2T_INNER,
xml_doc->namespaces, NULL, output, NULL);
- return SVN_NO_ERROR;
+ return NULL;
}
@@ -450,7 +453,8 @@ get_locks(dav_lockdb *lockdb,
lock. For the --force case, this is required and for the non-force case,
we allow the filesystem to produce a better error for svn clients.
*/
- if (info->r->method_number == M_LOCK)
+ if (info->r->method_number == M_LOCK
+ && resource->info->repos->is_svn_client)
{
*locks = NULL;
return 0;
@@ -591,7 +595,8 @@ has_locks(dav_lockdb *lockdb, const dav_resource *resource, int *locks_present)
lock. For the --force case, this is required and for the non-force case,
we allow the filesystem to produce a better error for svn clients.
*/
- if (info->r->method_number == M_LOCK)
+ if (info->r->method_number == M_LOCK
+ && resource->info->repos->is_svn_client)
{
*locks_present = 0;
return 0;
@@ -640,6 +645,19 @@ append_locks(dav_lockdb *lockdb,
svn_lock_t *slock;
svn_error_t *serr;
dav_error *derr;
+ dav_svn_repos *repos = resource->info->repos;
+
+ /* We don't allow anonymous locks */
+ if (! repos->username)
+ return dav_svn__new_error(resource->pool, HTTP_NOT_IMPLEMENTED,
+ DAV_ERR_LOCK_SAVE_LOCK,
+ "Anonymous lock creation is not allowed.");
+
+ /* Not a path in the repository so can't lock it. */
+ if (! resource->info->repos_path)
+ return dav_svn__new_error(resource->pool, HTTP_BAD_REQUEST,
+ DAV_ERR_LOCK_SAVE_LOCK,
+ "Attempted to lock path not in repository.");
/* If the resource's fs path is unreadable, we don't allow a lock to
be created on it. */
@@ -663,11 +681,10 @@ append_locks(dav_lockdb *lockdb,
svn_fs_txn_t *txn;
svn_fs_root_t *txn_root;
const char *conflict_msg;
- dav_svn_repos *repos = resource->info->repos;
apr_hash_t *revprop_table = apr_hash_make(resource->pool);
- apr_hash_set(revprop_table, SVN_PROP_REVISION_AUTHOR,
- APR_HASH_KEY_STRING, svn_string_create(repos->username,
- resource->pool));
+ svn_hash_sets(revprop_table,
+ SVN_PROP_REVISION_AUTHOR,
+ svn_string_create(repos->username, resource->pool));
if (resource->info->repos->is_svn_client)
return dav_svn__new_error(resource->pool, HTTP_METHOD_NOT_ALLOWED,
@@ -741,14 +758,14 @@ append_locks(dav_lockdb *lockdb,
/* Convert the dav_lock into an svn_lock_t. */
derr = dav_lock_to_svn_lock(&slock, lock, resource->info->repos_path,
- info, resource->info->repos->is_svn_client,
+ info, repos->is_svn_client,
resource->pool);
if (derr)
return derr;
/* Now use the svn_lock_t to actually perform the lock. */
serr = svn_repos_fs_lock(&slock,
- resource->info->repos->repos,
+ repos->repos,
slock->path,
slock->token,
slock->comment,
@@ -761,14 +778,21 @@ append_locks(dav_lockdb *lockdb,
if (serr && serr->apr_err == SVN_ERR_FS_NO_USER)
{
svn_error_clear(serr);
- return dav_svn__new_error(resource->pool, HTTP_UNAUTHORIZED,
+ return dav_svn__new_error(resource->pool, HTTP_NOT_IMPLEMENTED,
DAV_ERR_LOCK_SAVE_LOCK,
"Anonymous lock creation is not allowed.");
}
+ else if (serr && (serr->apr_err == SVN_ERR_REPOS_HOOK_FAILURE ||
+ serr->apr_err == SVN_ERR_FS_NO_SUCH_LOCK ||
+ serr->apr_err == SVN_ERR_FS_LOCK_EXPIRED ||
+ SVN_ERR_IS_LOCK_ERROR(serr)))
+ return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
+ "Failed to create new lock.",
+ resource->pool);
else if (serr)
- return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
- "Failed to create new lock.",
- resource->pool);
+ return dav_svn__sanitize_error(serr, "Failed to create new lock.",
+ HTTP_INTERNAL_SERVER_ERROR,
+ resource->info->r);
/* A standard webdav LOCK response doesn't include any information
@@ -864,7 +888,7 @@ remove_lock(dav_lockdb *lockdb,
if (serr && serr->apr_err == SVN_ERR_FS_NO_USER)
{
svn_error_clear(serr);
- return dav_svn__new_error(resource->pool, HTTP_UNAUTHORIZED,
+ return dav_svn__new_error(resource->pool, HTTP_NOT_IMPLEMENTED,
DAV_ERR_LOCK_SAVE_LOCK,
"Anonymous lock removal is not allowed.");
}
@@ -931,7 +955,7 @@ refresh_locks(dav_lockdb *lockdb,
current lock on the incoming resource? */
if ((! slock)
|| (strcmp(token->uuid_str, slock->token) != 0))
- return dav_svn__new_error(resource->pool, HTTP_UNAUTHORIZED,
+ return dav_svn__new_error(resource->pool, HTTP_PRECONDITION_FAILED,
DAV_ERR_LOCK_SAVE_LOCK,
"Lock refresh request doesn't match existing "
"lock.");
@@ -952,14 +976,21 @@ refresh_locks(dav_lockdb *lockdb,
if (serr && serr->apr_err == SVN_ERR_FS_NO_USER)
{
svn_error_clear(serr);
- return dav_svn__new_error(resource->pool, HTTP_UNAUTHORIZED,
+ return dav_svn__new_error(resource->pool, HTTP_NOT_IMPLEMENTED,
DAV_ERR_LOCK_SAVE_LOCK,
"Anonymous lock refreshing is not allowed.");
}
+ else if (serr && (serr->apr_err == SVN_ERR_REPOS_HOOK_FAILURE ||
+ serr->apr_err == SVN_ERR_FS_NO_SUCH_LOCK ||
+ serr->apr_err == SVN_ERR_FS_LOCK_EXPIRED ||
+ SVN_ERR_IS_LOCK_ERROR(serr)))
+ return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
+ "Failed to refresh existing lock.",
+ resource->pool);
else if (serr)
- return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
- "Failed to refresh existing lock.",
- resource->pool);
+ return dav_svn__sanitize_error(serr, "Failed to refresh existing lock.",
+ HTTP_INTERNAL_SERVER_ERROR,
+ resource->info->r);
/* Convert the refreshed lock into a dav_lock and return it. */
svn_lock_to_dav_lock(&dlock, slock, FALSE, resource->exists, resource->pool);
diff --git a/subversion/mod_dav_svn/merge.c b/subversion/mod_dav_svn/merge.c
index 9d69b47..3d6d80b 100644
--- a/subversion/mod_dav_svn/merge.c
+++ b/subversion/mod_dav_svn/merge.c
@@ -29,6 +29,7 @@
#include <httpd.h>
#include <util_filter.h>
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_fs.h"
#include "svn_props.h"
@@ -169,14 +170,14 @@ do_resources(const dav_svn_repos *repos,
{
/* If we haven't already sent this path, send it (and then
remember that we sent it). */
- if (! apr_hash_get(sent, path, APR_HASH_KEY_STRING))
+ if (! svn_hash_gets(sent, path))
{
svn_node_kind_t kind;
SVN_ERR(svn_fs_check_path(&kind, root, path, subpool));
SVN_ERR(send_response(repos, root, path,
kind == svn_node_dir,
output, bb, subpool));
- apr_hash_set(sent, path, APR_HASH_KEY_STRING, (void *)1);
+ svn_hash_sets(sent, path, (void *)1);
}
}
if (send_parent)
@@ -186,11 +187,11 @@ do_resources(const dav_svn_repos *repos,
pool, not subpool, because it stays in the sent hash
afterwards. */
const char *parent = svn_fspath__dirname(path, pool);
- if (! apr_hash_get(sent, parent, APR_HASH_KEY_STRING))
+ if (! svn_hash_gets(sent, parent))
{
SVN_ERR(send_response(repos, root, parent,
TRUE, output, bb, subpool));
- apr_hash_set(sent, parent, APR_HASH_KEY_STRING, (void *)1);
+ svn_hash_sets(sent, parent, (void *)1);
}
}
}
@@ -223,6 +224,7 @@ dav_svn__merge_response(ap_filter_t *output,
svn_string_t *creationdate, *creator_displayname;
const char *post_commit_err_elem = NULL,
*post_commit_header_info = NULL;
+ apr_status_t status;
serr = svn_fs_revision_root(&root, repos->fs, new_rev, pool);
if (serr != NULL)
@@ -283,7 +285,7 @@ dav_svn__merge_response(ap_filter_t *output,
}
- (void) ap_fputstrs(output, bb,
+ status = ap_fputstrs(output, bb,
DAV_XML_HEADER DEBUG_CR
"<D:merge-response xmlns:D=\"DAV:\"",
post_commit_header_info,
@@ -303,30 +305,43 @@ dav_svn__merge_response(ap_filter_t *output,
post_commit_err_elem, DEBUG_CR
"<D:version-name>", rev, "</D:version-name>" DEBUG_CR,
NULL);
+ if (status != APR_SUCCESS)
+ return dav_svn__new_error(repos->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
+ "Could not write output");
+
if (creationdate)
{
- (void) ap_fputstrs(output, bb,
+ status = ap_fputstrs(output, bb,
"<D:creationdate>",
apr_xml_quote_string(pool, creationdate->data, 1),
"</D:creationdate>" DEBUG_CR,
NULL);
+ if (status != APR_SUCCESS)
+ return dav_svn__new_error(repos->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
+ "Could not write output");
}
if (creator_displayname)
{
- (void) ap_fputstrs(output, bb,
+ status = ap_fputstrs(output, bb,
"<D:creator-displayname>",
apr_xml_quote_string(pool,
creator_displayname->data, 1),
"</D:creator-displayname>" DEBUG_CR,
NULL);
+ if (status != APR_SUCCESS)
+ return dav_svn__new_error(repos->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
+ "Could not write output");
}
- (void) ap_fputstrs(output, bb,
+ status = ap_fputstrs(output, bb,
"</D:prop>" DEBUG_CR
"<D:status>HTTP/1.1 200 OK</D:status>" DEBUG_CR
"</D:propstat>" DEBUG_CR
"</D:response>" DEBUG_CR,
NULL);
+ if (status != APR_SUCCESS)
+ return dav_svn__new_error(repos->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
+ "Could not write output");
/* ONLY have dir_delta drive the editor if the caller asked us to
generate a full MERGE response. svn clients can ask us to
@@ -355,12 +370,18 @@ dav_svn__merge_response(ap_filter_t *output,
}
/* wrap up the merge response */
- (void) ap_fputs(output, bb,
+ status = ap_fputs(output, bb,
"</D:updated-set>" DEBUG_CR
"</D:merge-response>" DEBUG_CR);
+ if (status != APR_SUCCESS)
+ return dav_svn__new_error(repos->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
+ "Could not write output");
/* send whatever is left in the brigade */
- (void) ap_pass_brigade(output, bb);
+ status = ap_pass_brigade(output, bb);
+ if (status != APR_SUCCESS)
+ return dav_svn__new_error(repos->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
+ "Could not write output");
- return SVN_NO_ERROR;
+ return NULL;
}
diff --git a/subversion/mod_dav_svn/mirror.c b/subversion/mod_dav_svn/mirror.c
index 610b640..e8b19a8 100644
--- a/subversion/mod_dav_svn/mirror.c
+++ b/subversion/mod_dav_svn/mirror.c
@@ -39,12 +39,17 @@
URI_SEGMENT is the URI bits relative to the repository root (but if
non-empty, *does* have a leading slash delimiter).
MASTER_URI and URI_SEGMENT are not URI-encoded. */
-static void proxy_request_fixup(request_rec *r,
- const char *master_uri,
- const char *uri_segment)
+static int proxy_request_fixup(request_rec *r,
+ const char *master_uri,
+ const char *uri_segment)
{
- assert((uri_segment[0] == '\0')
- || (uri_segment[0] == '/'));
+ if (uri_segment[0] != '\0' && uri_segment[0] != '/')
+ {
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, SVN_ERR_BAD_CONFIG_VALUE, r,
+ "Invalid URI segment '%s' in slave fixup",
+ uri_segment);
+ return HTTP_INTERNAL_SERVER_ERROR;
+ }
r->proxyreq = PROXYREQ_REVERSE;
r->uri = r->unparsed_uri;
@@ -54,9 +59,20 @@ static void proxy_request_fixup(request_rec *r,
(char *)NULL),
r->pool);
r->handler = "proxy-server";
+
+ /* ### FIXME: Seems we could avoid adding some or all of these
+ filters altogether when the root_dir (that is, the slave's
+ location, relative to the server root) and path portion of
+ the master_uri (the master's location, relative to the
+ server root) are identical, rather than adding them here
+ and then trying to remove them later. (See the filter
+ removal logic in dav_svn__location_in_filter() and
+ dav_svn__location_body_filter(). -- cmpilato */
+
ap_add_output_filter("LocationRewrite", NULL, r, r->connection);
ap_add_output_filter("ReposRewrite", NULL, r, r->connection);
ap_add_input_filter("IncomingRewrite", NULL, r, r->connection);
+ return OK;
}
@@ -91,8 +107,10 @@ int dav_svn__proxy_request_fixup(request_rec *r)
"/txn/", (char *)NULL))
|| ap_strstr_c(seg, apr_pstrcat(r->pool, special_uri,
"/txr/", (char *)NULL))) {
+ int rv;
seg += strlen(root_dir);
- proxy_request_fixup(r, master_uri, seg);
+ rv = proxy_request_fixup(r, master_uri, seg);
+ if (rv) return rv;
}
}
return OK;
@@ -106,8 +124,10 @@ int dav_svn__proxy_request_fixup(request_rec *r)
r->method_number == M_LOCK ||
r->method_number == M_UNLOCK ||
ap_strstr_c(seg, special_uri))) {
+ int rv;
seg += strlen(root_dir);
- proxy_request_fixup(r, master_uri, seg);
+ rv = proxy_request_fixup(r, master_uri, seg);
+ if (rv) return rv;
return OK;
}
}
diff --git a/subversion/mod_dav_svn/mod_dav_svn.c b/subversion/mod_dav_svn/mod_dav_svn.c
index 5bdb322..a97d307 100644
--- a/subversion/mod_dav_svn/mod_dav_svn.c
+++ b/subversion/mod_dav_svn/mod_dav_svn.c
@@ -22,7 +22,10 @@
* ====================================================================
*/
+#include <stdlib.h>
+
#include <apr_strings.h>
+#include <apr_hash.h>
#include <httpd.h>
#include <http_config.h>
@@ -31,6 +34,7 @@
#include <ap_provider.h>
#include <mod_dav.h>
+#include "svn_hash.h"
#include "svn_version.h"
#include "svn_cache_config.h"
#include "svn_utf.h"
@@ -39,6 +43,7 @@
#include "mod_dav_svn.h"
#include "private/svn_fspath.h"
+#include "private/svn_subr_private.h"
#include "dav_svn.h"
#include "mod_authz_svn.h"
@@ -55,6 +60,13 @@
/* per-server configuration */
typedef struct server_conf_t {
const char *special_uri;
+ svn_boolean_t use_utf8;
+
+ /* The compression level we will pass to svn_txdelta_to_svndiff3()
+ * for wire-compression. Negative value used to specify default
+ compression level. */
+ int compression_level;
+
} server_conf_t;
@@ -82,15 +94,18 @@ typedef struct dir_conf_t {
const char *xslt_uri; /* XSL transform URI */
const char *fs_parent_path; /* path to parent of SVN FS'es */
enum conf_flag autoversioning; /* whether autoversioning is active */
- enum conf_flag bulk_updates; /* whether bulk updates are allowed */
+ dav_svn__bulk_upd_conf bulk_updates; /* whether bulk updates are allowed */
enum conf_flag v2_protocol; /* whether HTTP v2 is advertised */
enum path_authz_conf path_authz_method; /* how GET subrequests are handled */
enum conf_flag list_parentpath; /* whether to allow GET of parentpath */
const char *root_dir; /* our top-level directory */
const char *master_uri; /* URI to the master SVN repos */
+ svn_version_t *master_version; /* version of master server */
const char *activities_db; /* path to activities database(s) */
enum conf_flag txdelta_cache; /* whether to enable txdelta caching */
enum conf_flag fulltext_cache; /* whether to enable fulltext caching */
+ enum conf_flag revprop_cache; /* whether to enable revprop caching */
+ const char *hooks_env; /* path to hook script env config file */
} dir_conf_t;
@@ -103,14 +118,12 @@ extern module AP_MODULE_DECLARE_DATA dav_svn_module;
/* The authz_svn provider for bypassing path authz. */
static authz_svn__subreq_bypass_func_t pathauthz_bypass_func = NULL;
-/* The compression level we will pass to svn_txdelta_to_svndiff3()
- * for wire-compression */
-static int svn__compression_level = SVN_DELTA_COMPRESSION_LEVEL_DEFAULT;
-
static int
init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
{
svn_error_t *serr;
+ server_conf_t *conf;
+
ap_add_version_component(p, "SVN/" SVN_VER_NUMBER);
serr = svn_fs_initialize(p);
@@ -123,7 +136,8 @@ init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
}
/* This returns void, so we can't check for error. */
- svn_utf_initialize(p);
+ conf = ap_get_module_config(s->module_config, &dav_svn_module);
+ svn_utf_initialize2(conf->use_utf8, p);
return OK;
}
@@ -154,7 +168,11 @@ init_dso(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp)
static void *
create_server_config(apr_pool_t *p, server_rec *s)
{
- return apr_pcalloc(p, sizeof(server_conf_t));
+ server_conf_t *conf = apr_pcalloc(p, sizeof(server_conf_t));
+
+ conf->compression_level = -1;
+
+ return conf;
}
@@ -170,6 +188,17 @@ merge_server_config(apr_pool_t *p, void *base, void *overrides)
newconf->special_uri = INHERIT_VALUE(parent, child, special_uri);
+ if (child->compression_level < 0)
+ {
+ /* Inherit compression level from parent if not configured for this
+ VirtualHost. */
+ newconf->compression_level = parent->compression_level;
+ }
+ else
+ {
+ newconf->compression_level = child->compression_level;
+ }
+
return newconf;
}
@@ -185,8 +214,9 @@ create_dir_config(apr_pool_t *p, char *dir)
<Location /blah> directive. So we treat it as a urlpath. */
if (dir)
conf->root_dir = svn_urlpath__canonicalize(dir, p);
- conf->bulk_updates = CONF_FLAG_ON;
+ conf->bulk_updates = CONF_BULKUPD_DEFAULT;
conf->v2_protocol = CONF_FLAG_ON;
+ conf->hooks_env = NULL;
return conf;
}
@@ -204,6 +234,7 @@ merge_dir_config(apr_pool_t *p, void *base, void *overrides)
newconf->fs_path = INHERIT_VALUE(parent, child, fs_path);
newconf->master_uri = INHERIT_VALUE(parent, child, master_uri);
+ newconf->master_version = INHERIT_VALUE(parent, child, master_version);
newconf->activities_db = INHERIT_VALUE(parent, child, activities_db);
newconf->repo_name = INHERIT_VALUE(parent, child, repo_name);
newconf->xslt_uri = INHERIT_VALUE(parent, child, xslt_uri);
@@ -215,14 +246,16 @@ merge_dir_config(apr_pool_t *p, void *base, void *overrides)
newconf->list_parentpath = INHERIT_VALUE(parent, child, list_parentpath);
newconf->txdelta_cache = INHERIT_VALUE(parent, child, txdelta_cache);
newconf->fulltext_cache = INHERIT_VALUE(parent, child, fulltext_cache);
+ newconf->revprop_cache = INHERIT_VALUE(parent, child, revprop_cache);
newconf->root_dir = INHERIT_VALUE(parent, child, root_dir);
+ newconf->hooks_env = INHERIT_VALUE(parent, child, hooks_env);
if (parent->fs_path)
ap_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL,
"mod_dav_svn: nested Location '%s' hinders access to '%s' "
"in SVNPath Location '%s'",
child->root_dir,
- svn_fspath__skip_ancestor(parent->root_dir, child->root_dir),
+ svn_urlpath__skip_ancestor(parent->root_dir, child->root_dir),
parent->root_dir);
return newconf;
@@ -270,6 +303,25 @@ SVNMasterURI_cmd(cmd_parms *cmd, void *config, const char *arg1)
static const char *
+SVNMasterVersion_cmd(cmd_parms *cmd, void *config, const char *arg1)
+{
+ dir_conf_t *conf = config;
+ svn_error_t *err;
+ svn_version_t *version;
+
+ err = svn_version__parse_version_string(&version, arg1, cmd->pool);
+ if (err)
+ {
+ svn_error_clear(err);
+ return "Malformed master server version string.";
+ }
+
+ conf->master_version = version;
+ return NULL;
+}
+
+
+static const char *
SVNActivitiesDB_cmd(cmd_parms *cmd, void *config, const char *arg1)
{
dir_conf_t *conf = config;
@@ -306,14 +358,26 @@ SVNAutoversioning_cmd(cmd_parms *cmd, void *config, int arg)
static const char *
-SVNAllowBulkUpdates_cmd(cmd_parms *cmd, void *config, int arg)
+SVNAllowBulkUpdates_cmd(cmd_parms *cmd, void *config, const char *arg1)
{
dir_conf_t *conf = config;
- if (arg)
- conf->bulk_updates = CONF_FLAG_ON;
+ if (apr_strnatcasecmp("on", arg1) == 0)
+ {
+ conf->bulk_updates = CONF_BULKUPD_ON;
+ }
+ else if (apr_strnatcasecmp("off", arg1) == 0)
+ {
+ conf->bulk_updates = CONF_BULKUPD_OFF;
+ }
+ else if (apr_strnatcasecmp("prefer", arg1) == 0)
+ {
+ conf->bulk_updates = CONF_BULKUPD_PREFER;
+ }
else
- conf->bulk_updates = CONF_FLAG_OFF;
+ {
+ return "Unrecognized value for SVNAllowBulkUpdates directive";
+ }
return NULL;
}
@@ -466,6 +530,19 @@ SVNCacheFullTexts_cmd(cmd_parms *cmd, void *config, int arg)
}
static const char *
+SVNCacheRevProps_cmd(cmd_parms *cmd, void *config, int arg)
+{
+ dir_conf_t *conf = config;
+
+ if (arg)
+ conf->revprop_cache = CONF_FLAG_ON;
+ else
+ conf->revprop_cache = CONF_FLAG_OFF;
+
+ return NULL;
+}
+
+static const char *
SVNInMemoryCacheSize_cmd(cmd_parms *cmd, void *config, const char *arg1)
{
svn_cache_config_t settings = *svn_cache_config_get();
@@ -488,6 +565,7 @@ SVNInMemoryCacheSize_cmd(cmd_parms *cmd, void *config, const char *arg1)
static const char *
SVNCompressionLevel_cmd(cmd_parms *cmd, void *config, const char *arg1)
{
+ server_conf_t *conf;
int value = 0;
svn_error_t *err = svn_cstring_atoi(&value, arg1);
if (err)
@@ -505,7 +583,31 @@ SVNCompressionLevel_cmd(cmd_parms *cmd, void *config, const char *arg1)
(int)SVN_DELTA_COMPRESSION_LEVEL_NONE,
(int)SVN_DELTA_COMPRESSION_LEVEL_MAX);
- svn__compression_level = value;
+ conf = ap_get_module_config(cmd->server->module_config,
+ &dav_svn_module);
+ conf->compression_level = value;
+
+ return NULL;
+}
+
+static const char *
+SVNUseUTF8_cmd(cmd_parms *cmd, void *config, int arg)
+{
+ server_conf_t *conf;
+
+ conf = ap_get_module_config(cmd->server->module_config,
+ &dav_svn_module);
+ conf->use_utf8 = arg;
+
+ return NULL;
+}
+
+static const char *
+SVNHooksEnv_cmd(cmd_parms *cmd, void *config, const char *arg1)
+{
+ dir_conf_t *conf = config;
+
+ conf->hooks_env = svn_dirent_internal_style(arg1, cmd->pool);
return NULL;
}
@@ -573,7 +675,7 @@ dav_svn_get_repos_path(request_rec *r,
/* Construct the full path from the parent path base directory
and the repository name. */
- *repos_path = svn_urlpath__join(fs_parent_path, repos_name, r->pool);
+ *repos_path = svn_dirent_join(fs_parent_path, repos_name, r->pool);
return NULL;
}
@@ -608,6 +710,16 @@ dav_svn__get_master_uri(request_rec *r)
}
+svn_version_t *
+dav_svn__get_master_version(request_rec *r)
+{
+ dir_conf_t *conf;
+
+ conf = ap_get_module_config(r->per_dir_config, &dav_svn_module);
+ return conf->master_uri ? conf->master_version : NULL;
+}
+
+
const char *
dav_svn__get_xslt_uri(request_rec *r)
{
@@ -694,23 +806,55 @@ dav_svn__get_autoversioning_flag(request_rec *r)
}
-svn_boolean_t
+dav_svn__bulk_upd_conf
dav_svn__get_bulk_updates_flag(request_rec *r)
{
dir_conf_t *conf;
conf = ap_get_module_config(r->per_dir_config, &dav_svn_module);
- return conf->bulk_updates == CONF_FLAG_ON;
+
+ /* SVNAllowBulkUpdates is 'on' by default. */
+ if (conf->bulk_updates == CONF_BULKUPD_DEFAULT)
+ return CONF_BULKUPD_ON;
+ else
+ return conf->bulk_updates;
}
svn_boolean_t
-dav_svn__get_v2_protocol_flag(request_rec *r)
+dav_svn__check_httpv2_support(request_rec *r)
{
dir_conf_t *conf;
+ svn_boolean_t available;
conf = ap_get_module_config(r->per_dir_config, &dav_svn_module);
- return conf->v2_protocol == CONF_FLAG_ON;
+ available = conf->v2_protocol == CONF_FLAG_ON;
+
+ /* If our configuration says that HTTPv2 is available, but we are
+ proxying requests to a master Subversion server which lacks
+ support for HTTPv2, we dumb ourselves down. */
+ if (available)
+ {
+ svn_version_t *version = dav_svn__get_master_version(r);
+ if (version && (! svn_version__at_least(version, 1, 7, 0)))
+ available = FALSE;
+ }
+ return available;
+}
+
+
+svn_boolean_t
+dav_svn__check_ephemeral_txnprops_support(request_rec *r)
+{
+ svn_version_t *version = dav_svn__get_master_version(r);
+
+ /* We know this server supports ephemeral txnprops. But if we're
+ proxying requests to a master server, we need to see if it
+ supports them, too. */
+ if (version && (! svn_version__at_least(version, 1, 8, 0)))
+ return FALSE;
+
+ return TRUE;
}
@@ -781,10 +925,41 @@ dav_svn__get_fulltext_cache_flag(request_rec *r)
}
+svn_boolean_t
+dav_svn__get_revprop_cache_flag(request_rec *r)
+{
+ dir_conf_t *conf;
+
+ conf = ap_get_module_config(r->per_dir_config, &dav_svn_module);
+ return conf->revprop_cache == CONF_FLAG_ON;
+}
+
+
int
-dav_svn__get_compression_level(void)
+dav_svn__get_compression_level(request_rec *r)
{
- return svn__compression_level;
+ server_conf_t *conf;
+
+ conf = ap_get_module_config(r->server->module_config,
+ &dav_svn_module);
+
+ if (conf->compression_level < 0)
+ {
+ return SVN_DELTA_COMPRESSION_LEVEL_DEFAULT;
+ }
+ else
+ {
+ return conf->compression_level;
+ }
+}
+
+const char *
+dav_svn__get_hooks_env(request_rec *r)
+{
+ dir_conf_t *conf;
+
+ conf = ap_get_module_config(r->per_dir_config, &dav_svn_module);
+ return conf->hooks_env;
}
static void
@@ -924,7 +1099,95 @@ static int dav_svn__handler(request_rec *r)
return DECLINED;
}
+#define NO_MAP_TO_STORAGE_NOTE "dav_svn-no-map-to-storage"
+/* Fill the filename on the request with a bogus path since we aren't serving
+ * a file off the disk. This means that <Directory> blocks will not match and
+ * that %f in logging formats will show as "svn:/path/to/repo/path/in/repo". */
+static int dav_svn__translate_name(request_rec *r)
+{
+ const char *fs_path, *repos_basename, *repos_path, *slash;
+ const char *ignore_cleaned_uri, *ignore_relative_path;
+ int ignore_had_slash;
+ dir_conf_t *conf = ap_get_module_config(r->per_dir_config, &dav_svn_module);
+
+ /* module is not configured, bail out early */
+ if (!conf->fs_path && !conf->fs_parent_path)
+ return DECLINED;
+
+ if (dav_svn__is_parentpath_list(r))
+ {
+ /* SVNListParentPath is on and the request is for the conf->root_dir,
+ * so just set the repos_basename to an empty string and the repos_path
+ * to NULL so we end up just reporting our parent path as the bogus
+ * path. */
+ repos_basename = "";
+ repos_path = NULL;
+ }
+ else
+ {
+ /* Retrieve path to repo and within repo for the request */
+ dav_error *err = dav_svn_split_uri(r, r->uri, conf->root_dir,
+ &ignore_cleaned_uri,
+ &ignore_had_slash, &repos_basename,
+ &ignore_relative_path, &repos_path);
+ if (err)
+ {
+ dav_svn__log_err(r, err, APLOG_ERR);
+ return err->status;
+ }
+ }
+
+ if (conf->fs_parent_path)
+ {
+ fs_path = svn_dirent_join(conf->fs_parent_path, repos_basename,
+ r->pool);
+ }
+ else
+ {
+ fs_path = conf->fs_path;
+ }
+
+ /* Avoid a trailing slash on the bogus path when repos_path is just "/" and
+ * ensure that there is always a slash between fs_path and repos_path as
+ * long as the repos_path is not an empty path. */
+ slash = "";
+ if (repos_path)
+ {
+ if ('/' == repos_path[0] && '\0' == repos_path[1])
+ repos_path = NULL;
+ else if ('/' != repos_path[0] && '\0' != repos_path[0])
+ slash = "/";
+ }
+
+ /* Combine 'svn:', fs_path and repos_path to produce the bogus path we're
+ * placing in r->filename. We can't use our standard join helpers such
+ * as svn_dirent_join. fs_path is a dirent and repos_path is a fspath
+ * (that can be trivially converted to a relpath by skipping the leading
+ * slash). In general it is safe to join these, but when a path in a
+ * repository is 'trunk/c:hi' this results in a non canonical dirent on
+ * Windows. Instead we just cat them together. */
+ r->filename = apr_pstrcat(r->pool,
+ "svn:", fs_path, slash, repos_path, NULL);
+
+ /* Leave a note to ourselves so that we know not to decline in the
+ * map_to_storage hook. */
+ apr_table_setn(r->notes, NO_MAP_TO_STORAGE_NOTE, (const char*)1);
+ return OK;
+}
+
+/* Prevent core_map_to_storage from running if we prevented the r->filename
+ * from being set since core_map_to_storage doesn't like r->filename being
+ * bogus. */
+static int dav_svn__map_to_storage(request_rec *r)
+{
+ /* Check a note we left in translate_name since map_to_storage doesn't
+ * have access to our configuration. */
+ if (apr_table_get(r->notes, NO_MAP_TO_STORAGE_NOTE))
+ return OK;
+
+ return DECLINED;
+}
@@ -977,16 +1240,22 @@ static const command_rec cmds[] =
"specifies a URI to access a master Subversion repository"),
/* per directory/location */
+ AP_INIT_TAKE1("SVNMasterVersion", SVNMasterVersion_cmd, NULL, ACCESS_CONF,
+ "specifies the Subversion release version of a master "
+ "Subversion server "),
+
+ /* per directory/location */
AP_INIT_TAKE1("SVNActivitiesDB", SVNActivitiesDB_cmd, NULL, ACCESS_CONF,
"specifies the location in the filesystem in which the "
"activities database(s) should be stored"),
/* per directory/location */
- AP_INIT_FLAG("SVNAllowBulkUpdates", SVNAllowBulkUpdates_cmd, NULL,
- ACCESS_CONF|RSRC_CONF,
- "enables support for bulk update-style requests (as opposed to "
- "only skeletal reports that require additional per-file "
- "downloads."),
+ AP_INIT_TAKE1("SVNAllowBulkUpdates", SVNAllowBulkUpdates_cmd, NULL,
+ ACCESS_CONF|RSRC_CONF,
+ "enables support for bulk update-style requests (On, default), "
+ "as opposed to only skeletal reports that require additional "
+ "per-file downloads (Off). Use Prefer to tell the svn client "
+ "to always use bulk update requests, if supported."),
/* per directory/location */
AP_INIT_FLAG("SVNAdvertiseV2Protocol", SVNAdvertiseV2Protocol_cmd, NULL,
@@ -1008,6 +1277,14 @@ static const command_rec cmds[] =
"if sufficient in-memory cache is available "
"(default is Off)."),
+ /* per directory/location */
+ AP_INIT_FLAG("SVNCacheRevProps", SVNCacheRevProps_cmd, NULL,
+ ACCESS_CONF|RSRC_CONF,
+ "speeds up 'svn ls -v', export and checkout operations"
+ "but should only be enabled under the conditions described"
+ "in the documentation"
+ "(default is Off)."),
+
/* per server */
AP_INIT_TAKE1("SVNInMemoryCacheSize", SVNInMemoryCacheSize_cmd, NULL,
RSRC_CONF,
@@ -1021,6 +1298,19 @@ static const command_rec cmds[] =
"content over the network (0 for no compression, 9 for "
"maximum, 5 is default)."),
+ /* per server */
+ AP_INIT_FLAG("SVNUseUTF8",
+ SVNUseUTF8_cmd, NULL,
+ RSRC_CONF,
+ "use UTF-8 as native character encoding (default is ASCII)."),
+
+ /* per directory/location */
+ AP_INIT_TAKE1("SVNHooksEnv", SVNHooksEnv_cmd, NULL,
+ ACCESS_CONF|RSRC_CONF,
+ "Sets the path to the configuration file for the environment "
+ "of hook scripts. If not absolute, the path is relative to "
+ "the repository's conf directory (by default the hooks-env "
+ "file in the repository is used)."),
{ NULL }
};
@@ -1071,6 +1361,12 @@ register_hooks(apr_pool_t *pconf)
ap_register_input_filter("IncomingRewrite", dav_svn__location_in_filter,
NULL, AP_FTYPE_CONTENT_SET);
ap_hook_fixups(dav_svn__proxy_request_fixup, NULL, NULL, APR_HOOK_MIDDLE);
+ /* translate_name hook is LAST so that it doesn't interfere with modules
+ * like mod_alias that are MIDDLE. */
+ ap_hook_translate_name(dav_svn__translate_name, NULL, NULL, APR_HOOK_LAST);
+ /* map_to_storage hook is LAST to avoid interferring with mod_http's
+ * handling of OPTIONS and TRACE. */
+ ap_hook_map_to_storage(dav_svn__map_to_storage, NULL, NULL, APR_HOOK_LAST);
}
diff --git a/subversion/mod_dav_svn/posts/create_txn.c b/subversion/mod_dav_svn/posts/create_txn.c
index c19b123..4775749 100644
--- a/subversion/mod_dav_svn/posts/create_txn.c
+++ b/subversion/mod_dav_svn/posts/create_txn.c
@@ -42,13 +42,64 @@ dav_svn__post_create_txn(const dav_resource *resource,
request_rec *r = resource->info->r;
/* Create a Subversion repository transaction based on HEAD. */
- if ((derr = dav_svn__create_txn(resource->info->repos, &txn_name,
+ if ((derr = dav_svn__create_txn(resource->info->repos, &txn_name, NULL,
resource->pool)))
return derr;
/* Build a "201 Created" response with header that tells the
client our new transaction's name. */
- vtxn_name = apr_table_get(r->headers_in, SVN_DAV_VTXN_NAME_HEADER);
+ vtxn_name = apr_table_get(r->headers_in, SVN_DAV_VTXN_NAME_HEADER);
+ if (vtxn_name && vtxn_name[0])
+ {
+ /* If the client supplied a vtxn name then store a mapping from
+ the client name to the FS transaction name in the activity
+ database. */
+ if ((derr = dav_svn__store_activity(resource->info->repos,
+ vtxn_name, txn_name)))
+ return derr;
+ apr_table_set(r->headers_out, SVN_DAV_VTXN_NAME_HEADER, vtxn_name);
+ }
+ else
+ apr_table_set(r->headers_out, SVN_DAV_TXN_NAME_HEADER, txn_name);
+
+ r->status = HTTP_CREATED;
+
+ return NULL;
+}
+
+
+/* Respond to a "create-txn-with-props" POST request.
+ *
+ * Syntax: ( create-txn-with-props (PROPNAME PROPVAL [PROPNAME PROPVAL ...])
+ */
+dav_error *
+dav_svn__post_create_txn_with_props(const dav_resource *resource,
+ svn_skel_t *request_skel,
+ ap_filter_t *output)
+{
+ const char *txn_name;
+ const char *vtxn_name;
+ dav_error *derr;
+ svn_error_t *err;
+ request_rec *r = resource->info->r;
+ apr_hash_t *revprops;
+ svn_skel_t *proplist_skel = request_skel->children->next;
+
+ if ((err = svn_skel__parse_proplist(&revprops, proplist_skel,
+ resource->pool)))
+ {
+ return dav_svn__convert_err(err, HTTP_BAD_REQUEST,
+ "Malformatted request skel", resource->pool);
+ }
+
+ /* Create a Subversion repository transaction based on HEAD. */
+ if ((derr = dav_svn__create_txn(resource->info->repos, &txn_name,
+ revprops, resource->pool)))
+ return derr;
+
+ /* Build a "201 Created" response with header that tells the
+ client our new transaction's name. */
+ vtxn_name = apr_table_get(r->headers_in, SVN_DAV_VTXN_NAME_HEADER);
if (vtxn_name && vtxn_name[0])
{
/* If the client supplied a vtxn name then store a mapping from
diff --git a/subversion/mod_dav_svn/reports/deleted-rev.c b/subversion/mod_dav_svn/reports/deleted-rev.c
index dc2bccd..66d0192 100644
--- a/subversion/mod_dav_svn/reports/deleted-rev.c
+++ b/subversion/mod_dav_svn/reports/deleted-rev.c
@@ -56,6 +56,9 @@ dav_svn__get_deleted_rev_report(const dav_resource *resource,
dav_error *derr = NULL;
/* Sanity check. */
+ if (!resource->info->repos_path)
+ return dav_svn__new_error(resource->pool, HTTP_BAD_REQUEST, 0,
+ "The request does not specify a repository path");
ns = dav_svn__find_ns(doc->namespaces, SVN_XML_NAMESPACE);
if (ns == -1)
return dav_svn__new_error_tag(resource->pool, HTTP_BAD_REQUEST, 0,
diff --git a/subversion/mod_dav_svn/reports/file-revs.c b/subversion/mod_dav_svn/reports/file-revs.c
index f8a15c1..108fd7f 100644
--- a/subversion/mod_dav_svn/reports/file-revs.c
+++ b/subversion/mod_dav_svn/reports/file-revs.c
@@ -52,6 +52,9 @@ struct file_rev_baton {
/* SVNDIFF version to use when sending to client. */
int svndiff_version;
+ /* Compression level to use for SVNDIFF. */
+ int compression_level;
+
/* Used by the delta iwndow handler. */
svn_txdelta_window_handler_t window_handler;
void *window_baton;
@@ -208,7 +211,7 @@ file_rev_handler(void *baton,
pool);
svn_txdelta_to_svndiff3(&frb->window_handler, &frb->window_baton,
base64_stream, frb->svndiff_version,
- dav_svn__get_compression_level(), pool);
+ frb->compression_level, pool);
*window_handler = delta_window_handler;
*window_baton = frb;
/* Start the txdelta element wich will be terminated by the window
@@ -251,6 +254,9 @@ dav_svn__file_revs_report(const dav_resource *resource,
arb.repos = resource->info->repos;
/* Sanity check. */
+ if (!resource->info->repos_path)
+ return dav_svn__new_error(resource->pool, HTTP_BAD_REQUEST, 0,
+ "The request does not specify a repository path");
ns = dav_svn__find_ns(doc->namespaces, SVN_XML_NAMESPACE);
/* ### This is done on other places, but the document element is
in this namespace, so is this necessary at all? */
@@ -306,6 +312,7 @@ dav_svn__file_revs_report(const dav_resource *resource,
frb.output = output;
frb.needs_header = TRUE;
frb.svndiff_version = resource->info->svndiff_version;
+ frb.compression_level = dav_svn__get_compression_level(resource->info->r);
/* file_rev_handler will send header first time it is called. */
diff --git a/subversion/mod_dav_svn/reports/get-location-segments.c b/subversion/mod_dav_svn/reports/get-location-segments.c
index bba0cc2..d3e91e4 100644
--- a/subversion/mod_dav_svn/reports/get-location-segments.c
+++ b/subversion/mod_dav_svn/reports/get-location-segments.c
@@ -123,6 +123,9 @@ dav_svn__get_location_segments_report(const dav_resource *resource,
struct location_segment_baton location_segment_baton;
/* Sanity check. */
+ if (!resource->info->repos_path)
+ return dav_svn__new_error(resource->pool, HTTP_BAD_REQUEST, 0,
+ "The request does not specify a repository path");
ns = dav_svn__find_ns(doc->namespaces, SVN_XML_NAMESPACE);
if (ns == -1)
{
@@ -178,17 +181,36 @@ dav_svn__get_location_segments_report(const dav_resource *resource,
"Not all parameters passed.",
SVN_DAV_ERROR_NAMESPACE,
SVN_DAV_ERROR_TAG);
- if (SVN_IS_VALID_REVNUM(start_rev)
- && SVN_IS_VALID_REVNUM(end_rev)
- && (end_rev > start_rev))
+
+ /* No START_REV or PEG_REVISION? We'll use HEAD. */
+ if (!SVN_IS_VALID_REVNUM(start_rev) || !SVN_IS_VALID_REVNUM(peg_revision))
+ {
+ svn_revnum_t youngest;
+
+ serr = svn_fs_youngest_rev(&youngest, resource->info->repos->fs,
+ resource->pool);
+ if (serr != NULL)
+ return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
+ "Could not determine youngest revision",
+ resource->pool);
+
+ if (!SVN_IS_VALID_REVNUM(start_rev))
+ start_rev = youngest;
+ if (!SVN_IS_VALID_REVNUM(peg_revision))
+ peg_revision = youngest;
+ }
+
+ /* No END_REV? We'll use 0. */
+ if (!SVN_IS_VALID_REVNUM(end_rev))
+ end_rev = 0;
+
+ if (end_rev > start_rev)
return dav_svn__new_error_tag(resource->pool, HTTP_BAD_REQUEST, 0,
"End revision must not be younger than "
"start revision",
SVN_DAV_ERROR_NAMESPACE,
SVN_DAV_ERROR_TAG);
- if (SVN_IS_VALID_REVNUM(peg_revision)
- && SVN_IS_VALID_REVNUM(start_rev)
- && (start_rev > peg_revision))
+ if (start_rev > peg_revision)
return dav_svn__new_error_tag(resource->pool, HTTP_BAD_REQUEST, 0,
"Start revision must not be younger than "
"peg revision",
diff --git a/subversion/mod_dav_svn/reports/get-locations.c b/subversion/mod_dav_svn/reports/get-locations.c
index 8764ddb..164045f 100644
--- a/subversion/mod_dav_svn/reports/get-locations.c
+++ b/subversion/mod_dav_svn/reports/get-locations.c
@@ -106,6 +106,9 @@ dav_svn__get_locations_report(const dav_resource *resource,
sizeof(svn_revnum_t));
/* Sanity check. */
+ if (!resource->info->repos_path)
+ return dav_svn__new_error(resource->pool, HTTP_BAD_REQUEST, 0,
+ "The request does not specify a repository path");
ns = dav_svn__find_ns(doc->namespaces, SVN_XML_NAMESPACE);
if (ns == -1)
{
diff --git a/subversion/mod_dav_svn/reports/inherited-props.c b/subversion/mod_dav_svn/reports/inherited-props.c
new file mode 100644
index 0000000..ce0f4de
--- /dev/null
+++ b/subversion/mod_dav_svn/reports/inherited-props.c
@@ -0,0 +1,236 @@
+/*
+ * inherited-props.c: mod_dav_svn REPORT handler for querying inherited props.
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#include <apr_pools.h>
+#include <apr_strings.h>
+#include <apr_xml.h>
+
+#include <http_request.h>
+#include <http_log.h>
+#include <mod_dav.h>
+
+#include "svn_pools.h"
+#include "svn_repos.h"
+#include "svn_xml.h"
+#include "svn_path.h"
+#include "svn_dav.h"
+#include "svn_props.h"
+#include "svn_base64.h"
+
+#include "private/svn_fspath.h"
+#include "private/svn_dav_protocol.h"
+#include "private/svn_log.h"
+#include "private/svn_mergeinfo_private.h"
+
+#include "../dav_svn.h"
+
+dav_error *
+dav_svn__get_inherited_props_report(const dav_resource *resource,
+ const apr_xml_doc *doc,
+ ap_filter_t *output)
+{
+ svn_error_t *serr;
+ dav_error *derr = NULL;
+ apr_xml_elem *child;
+ apr_array_header_t *inherited_props;
+ dav_svn__authz_read_baton arb;
+ int ns;
+ apr_bucket_brigade *bb;
+ const char *path = "/";
+ svn_fs_root_t *root;
+ int i;
+ svn_revnum_t rev = SVN_INVALID_REVNUM;
+ apr_pool_t *iterpool;
+
+ /* Sanity check. */
+ if (!resource->info->repos_path)
+ return dav_svn__new_error(resource->pool, HTTP_BAD_REQUEST, 0,
+ "The request does not specify a repository path");
+ ns = dav_svn__find_ns(doc->namespaces, SVN_XML_NAMESPACE);
+ if (ns == -1)
+ {
+ return dav_svn__new_error_tag(resource->pool, HTTP_BAD_REQUEST, 0,
+ "The request does not contain the 'svn:' "
+ "namespace, so it is not going to have "
+ "certain required elements.",
+ SVN_DAV_ERROR_NAMESPACE,
+ SVN_DAV_ERROR_TAG);
+ }
+
+ iterpool = svn_pool_create(resource->pool);
+
+ for (child = doc->root->first_child;
+ child != NULL;
+ child = child->next)
+ {
+ /* if this element isn't one of ours, then skip it */
+ if (child->ns != ns)
+ continue;
+
+ if (strcmp(child->name, SVN_DAV__REVISION) == 0)
+ {
+ rev = SVN_STR_TO_REV(dav_xml_get_cdata(child, iterpool, 1));
+ }
+ else if (strcmp(child->name, SVN_DAV__PATH) == 0)
+ {
+ path = dav_xml_get_cdata(child, resource->pool, 0);
+ if ((derr = dav_svn__test_canonical(path, iterpool)))
+ return derr;
+ path = svn_fspath__join(resource->info->repos_path, path,
+ resource->pool);
+ }
+ /* else unknown element; skip it */
+ }
+
+ /* Build authz read baton */
+ arb.r = resource->info->r;
+ arb.repos = resource->info->repos;
+
+ /* Build inherited property brigade */
+ bb = apr_brigade_create(resource->pool, output->c->bucket_alloc);
+
+ serr = svn_fs_revision_root(&root, resource->info->repos->fs,
+ rev, resource->pool);
+ if (serr != NULL)
+ return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
+ "couldn't retrieve revision root",
+ resource->pool);
+
+ serr = svn_repos_fs_get_inherited_props(&inherited_props, root, path, NULL,
+ dav_svn__authz_read_func(&arb),
+ &arb, resource->pool, iterpool);
+ if (serr)
+ {
+ derr = dav_svn__convert_err(serr, HTTP_BAD_REQUEST, serr->message,
+ resource->pool);
+ goto cleanup;
+ }
+
+ serr = dav_svn__brigade_puts(bb, output,
+ DAV_XML_HEADER DEBUG_CR
+ "<S:" SVN_DAV__INHERITED_PROPS_REPORT " "
+ "xmlns:S=\"" SVN_XML_NAMESPACE "\" "
+ "xmlns:D=\"DAV:\">" DEBUG_CR);
+ if (serr)
+ {
+ derr = dav_svn__convert_err(serr, HTTP_BAD_REQUEST, serr->message,
+ resource->pool);
+ goto cleanup;
+ }
+
+ for (i = 0; i < inherited_props->nelts; i++)
+ {
+ svn_prop_inherited_item_t *elt =
+ APR_ARRAY_IDX(inherited_props, i, svn_prop_inherited_item_t *);
+
+ svn_pool_clear(iterpool);
+
+ serr = dav_svn__brigade_printf(
+ bb, output,
+ "<S:" SVN_DAV__IPROP_ITEM ">"
+ DEBUG_CR
+ "<S:" SVN_DAV__IPROP_PATH ">%s</S:" SVN_DAV__IPROP_PATH ">"
+ DEBUG_CR,
+ apr_xml_quote_string(resource->pool, elt->path_or_url, 0));
+
+ if (!serr)
+ {
+ apr_hash_index_t *hi;
+
+ for (hi = apr_hash_first(resource->pool, elt->prop_hash);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ const char *propname = svn__apr_hash_index_key(hi);
+ svn_string_t *propval = svn__apr_hash_index_val(hi);
+ const char *xml_safe;
+
+ serr = dav_svn__brigade_printf(
+ bb, output,
+ "<S:" SVN_DAV__IPROP_PROPNAME ">%s</S:"
+ SVN_DAV__IPROP_PROPNAME ">" DEBUG_CR,
+ apr_xml_quote_string(iterpool, propname, 0));
+
+ if (!serr)
+ {
+ if (svn_xml_is_xml_safe(propval->data, propval->len))
+ {
+ svn_stringbuf_t *tmp = NULL;
+ svn_xml_escape_cdata_string(&tmp, propval,
+ iterpool);
+ xml_safe = tmp->data;
+ serr = dav_svn__brigade_printf(
+ bb, output,
+ "<S:" SVN_DAV__IPROP_PROPVAL ">%s</S:"
+ SVN_DAV__IPROP_PROPVAL ">" DEBUG_CR, xml_safe);
+ }
+ else
+ {
+ xml_safe = svn_base64_encode_string2(
+ propval, TRUE, iterpool)->data;
+ serr = dav_svn__brigade_printf(
+ bb, output,
+ "<S:" SVN_DAV__IPROP_PROPVAL
+ " encoding=\"base64\"" ">%s</S:"
+ SVN_DAV__IPROP_PROPVAL ">" DEBUG_CR, xml_safe);
+ }
+ }
+
+ if (serr)
+ break;
+ }
+ if (!serr)
+ serr = dav_svn__brigade_printf(bb, output,
+ "</S:" SVN_DAV__IPROP_ITEM ">"
+ DEBUG_CR);
+ }
+
+ if (serr)
+ {
+ derr = dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
+ "Error ending REPORT response.",
+ resource->pool);
+ goto cleanup;
+ }
+ }
+
+ if ((serr = dav_svn__brigade_puts(bb, output,
+ "</S:" SVN_DAV__INHERITED_PROPS_REPORT ">"
+ DEBUG_CR)))
+ {
+ derr = dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
+ "Error ending REPORT response.",
+ resource->pool);
+ goto cleanup;
+ }
+
+ cleanup:
+
+ /* Log this 'high level' svn action. */
+ dav_svn__operational_log(resource->info,
+ svn_log__get_inherited_props(path, rev,
+ resource->pool));
+ svn_pool_destroy(iterpool);
+ return dav_svn__final_flush_or_error(resource->info->r, bb, output,
+ derr, resource->pool);
+}
diff --git a/subversion/mod_dav_svn/reports/log.c b/subversion/mod_dav_svn/reports/log.c
index 8a5fd6e..acd33ed 100644
--- a/subversion/mod_dav_svn/reports/log.c
+++ b/subversion/mod_dav_svn/reports/log.c
@@ -307,6 +307,9 @@ dav_svn__log_report(const dav_resource *resource,
= apr_array_make(resource->pool, 1, sizeof(const char *));
/* Sanity check. */
+ if (!resource->info->repos_path)
+ return dav_svn__new_error(resource->pool, HTTP_BAD_REQUEST, 0,
+ "The request does not specify a repository path");
ns = dav_svn__find_ns(doc->namespaces, SVN_XML_NAMESPACE);
if (ns == -1)
{
@@ -341,10 +344,9 @@ dav_svn__log_report(const dav_resource *resource,
dav_xml_get_cdata(child, resource->pool, 1));
if (serr)
{
- derr = dav_svn__convert_err(serr, HTTP_BAD_REQUEST,
+ return dav_svn__convert_err(serr, HTTP_BAD_REQUEST,
"Malformed CDATA in element "
"\"limit\"", resource->pool);
- goto cleanup;
}
}
else if (strcmp(child->name, "discover-changed-paths") == 0)
diff --git a/subversion/mod_dav_svn/reports/mergeinfo.c b/subversion/mod_dav_svn/reports/mergeinfo.c
index 79eb86c..15c3071 100644
--- a/subversion/mod_dav_svn/reports/mergeinfo.c
+++ b/subversion/mod_dav_svn/reports/mergeinfo.c
@@ -67,6 +67,9 @@ dav_svn__get_mergeinfo_report(const dav_resource *resource,
= apr_array_make(resource->pool, 0, sizeof(const char *));
/* Sanity check. */
+ if (!resource->info->repos_path)
+ return dav_svn__new_error(resource->pool, HTTP_BAD_REQUEST, 0,
+ "The request does not specify a repository path");
ns = dav_svn__find_ns(doc->namespaces, SVN_XML_NAMESPACE);
if (ns == -1)
{
diff --git a/subversion/mod_dav_svn/reports/replay.c b/subversion/mod_dav_svn/reports/replay.c
index 7679ee3..0d57f32 100644
--- a/subversion/mod_dav_svn/reports/replay.c
+++ b/subversion/mod_dav_svn/reports/replay.c
@@ -47,6 +47,7 @@ typedef struct edit_baton_t {
ap_filter_t *output;
svn_boolean_t started;
svn_boolean_t sending_textdelta;
+ int compression_level;
} edit_baton_t;
@@ -326,7 +327,7 @@ apply_textdelta(void *file_baton,
eb->output,
pool),
0,
- dav_svn__get_compression_level(),
+ eb->compression_level,
pool);
eb->sending_textdelta = TRUE;
@@ -367,6 +368,7 @@ make_editor(const svn_delta_editor_t **editor,
void **edit_baton,
apr_bucket_brigade *bb,
ap_filter_t *output,
+ int compression_level,
apr_pool_t *pool)
{
edit_baton_t *eb = apr_pcalloc(pool, sizeof(*eb));
@@ -376,6 +378,7 @@ make_editor(const svn_delta_editor_t **editor,
eb->output = output;
eb->started = FALSE;
eb->sending_textdelta = FALSE;
+ eb->compression_level = compression_level;
e->set_target_revision = set_target_revision;
e->open_root = open_root;
@@ -415,11 +418,11 @@ dav_svn__replay_report(const dav_resource *resource,
{
dav_error *derr = NULL;
svn_revnum_t low_water_mark = SVN_INVALID_REVNUM;
- svn_revnum_t rev = SVN_INVALID_REVNUM;
+ svn_revnum_t rev;
const svn_delta_editor_t *editor;
svn_boolean_t send_deltas = TRUE;
dav_svn__authz_read_baton arb;
- const char *base_dir = resource->info->repos_path;
+ const char *base_dir;
apr_bucket_brigade *bb;
apr_xml_elem *child;
svn_fs_root_t *root;
@@ -427,9 +430,26 @@ dav_svn__replay_report(const dav_resource *resource,
void *edit_baton;
int ns;
- /* The request won't have a repos_path if it's for the root. */
- if (! base_dir)
- base_dir = "";
+ /* In Subversion 1.8, we allowed this REPORT to be issue against a
+ revision resource. Doing so means the REV is part of the request
+ URL, and BASE_DIR is embedded in the request body.
+
+ The old-school (and incorrect, see issue #4287 --
+ http://subversion.tigris.org/issues/show_bug.cgi?id=4287) way was
+ to REPORT on the public URL of the BASE_DIR and embed the REV in
+ the report body.
+ */
+ if (resource->baselined
+ && (resource->type == DAV_RESOURCE_TYPE_VERSION))
+ {
+ rev = resource->info->root.rev;
+ base_dir = NULL;
+ }
+ else
+ {
+ rev = SVN_INVALID_REVNUM;
+ base_dir = resource->info->repos_path;
+ }
arb.r = resource->info->r;
arb.repos = resource->info->repos;
@@ -452,9 +472,17 @@ dav_svn__replay_report(const dav_resource *resource,
if (strcmp(child->name, "revision") == 0)
{
+ if (SVN_IS_VALID_REVNUM(rev))
+ {
+ /* Uh... we already have a revision to use, either
+ because this tag is non-unique or because the
+ request was submitted against a revision-bearing
+ resource URL. Either way, something's not
+ right. */
+ return malformed_element_error("revision", resource->pool);
+ }
+
cdata = dav_xml_get_cdata(child, resource->pool, 1);
- if (! cdata)
- return malformed_element_error("revision", resource->pool);
rev = SVN_STR_TO_REV(cdata);
}
else if (strcmp(child->name, "low-water-mark") == 0)
@@ -478,7 +506,16 @@ dav_svn__replay_report(const dav_resource *resource,
svn_error_clear(err);
return malformed_element_error("send-deltas", resource->pool);
}
- send_deltas = parsed_val ? TRUE : FALSE;
+ send_deltas = parsed_val != 0;
+ }
+ else if (strcmp(child->name, "include-path") == 0)
+ {
+ cdata = dav_xml_get_cdata(child, resource->pool, 1);
+ if ((derr = dav_svn__test_canonical(cdata, resource->pool)))
+ return derr;
+
+ /* Force BASE_DIR to be a relative path, not an fspath. */
+ base_dir = svn_relpath_canonicalize(cdata, resource->pool);
}
}
}
@@ -495,6 +532,9 @@ dav_svn__replay_report(const dav_resource *resource,
"Request was missing the low-water-mark argument.",
SVN_DAV_ERROR_NAMESPACE, SVN_DAV_ERROR_TAG);
+ if (! base_dir)
+ base_dir = "";
+
bb = apr_brigade_create(resource->pool, output->c->bucket_alloc);
if ((err = svn_fs_revision_root(&root, resource->info->repos->fs, rev,
@@ -506,7 +546,9 @@ dav_svn__replay_report(const dav_resource *resource,
goto cleanup;
}
- make_editor(&editor, &edit_baton, bb, output, resource->pool);
+ make_editor(&editor, &edit_baton, bb, output,
+ dav_svn__get_compression_level(resource->info->r),
+ resource->pool);
if ((err = svn_repos_replay2(root, base_dir, low_water_mark,
send_deltas, editor, edit_baton,
diff --git a/subversion/mod_dav_svn/reports/update.c b/subversion/mod_dav_svn/reports/update.c
index 0154325..541d551 100644
--- a/subversion/mod_dav_svn/reports/update.c
+++ b/subversion/mod_dav_svn/reports/update.c
@@ -29,6 +29,7 @@
#include <http_log.h>
#include <mod_dav.h>
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_repos.h"
#include "svn_fs.h"
@@ -45,6 +46,7 @@
#include "../dav_svn.h"
+/* State baton for the overall update process. */
typedef struct update_ctx_t {
const dav_resource *resource;
@@ -80,26 +82,58 @@ typedef struct update_ctx_t {
/* True iff client requested all data inline in the report. */
svn_boolean_t send_all;
+ /* True iff client requested that properties be transmitted
+ inline. (This is implied when "send_all" is set.) */
+ svn_boolean_t include_props;
+
/* SVNDIFF version to send to client. */
int svndiff_version;
+
+ /* Compression level of SVNDIFF deltas. */
+ int compression_level;
+
+ /* Did the client submit this REPORT request via the HTTPv2 "me
+ resource" and are we advertising support for as much? */
+ svn_boolean_t enable_v2_response;
+
} update_ctx_t;
+
+/* State baton for a file or directory. */
typedef struct item_baton_t {
apr_pool_t *pool;
update_ctx_t *uc;
- struct item_baton_t *parent; /* the parent of this item. */
- const char *name; /* the single-component name of this item */
- const char *path; /* a telescoping extension of uc->anchor */
- const char *path2; /* a telescoping extension of uc->dst_path */
- const char *path3; /* a telescoping extension of uc->dst_path
- without dst_path as prefix. */
- const char *base_checksum; /* base_checksum (from apply_textdelta) */
+ /* Uplink -- the parent of this item. */
+ struct item_baton_t *parent;
+
+ /* Single-component name of this item. */
+ const char *name;
+
+ /* Telescoping extension paths ... */
+ const char *path; /* ... of uc->anchor. */
+ const char *path2; /* ... of uc->dst_path. */
+ const char *path3; /* ... uc->dst_path, without dst_path prefix. */
- svn_boolean_t text_changed; /* Did the file's contents change? */
- svn_boolean_t added; /* File added? (Implies text_changed.) */
- svn_boolean_t copyfrom; /* File copied? */
- apr_array_header_t *removed_props; /* array of const char * prop names */
+ /* Base_checksum (from apply_textdelta). */
+ const char *base_checksum;
+
+ /* Did the file's contents change? */
+ svn_boolean_t text_changed;
+
+ /* File/dir added? (Implies text_changed for files.) */
+ svn_boolean_t added;
+
+ /* File/dir copied? */
+ svn_boolean_t copyfrom;
+
+ /* Does the client need to fetch additional properties for this
+ item? */
+ svn_boolean_t fetch_props;
+
+ /* Array of const char * names of removed properties. (Used only
+ for copied files/dirs in skelta mode.) */
+ apr_array_header_t *removed_props;
} item_baton_t;
@@ -120,7 +154,7 @@ add_to_path_map(apr_hash_t *hash, const char *path, const char *linkpath)
const char *repos_path = linkpath ? linkpath : norm_path;
/* now, geez, put the path in the map already! */
- apr_hash_set(hash, path, APR_HASH_KEY_STRING, repos_path);
+ svn_hash_sets(hash, path, repos_path);
}
@@ -136,7 +170,7 @@ get_from_path_map(apr_hash_t *hash, const char *path, apr_pool_t *pool)
if (! hash)
return apr_pstrdup(pool, path);
- if ((repos_path = apr_hash_get(hash, path, APR_HASH_KEY_STRING)))
+ if ((repos_path = svn_hash_gets(hash, path)))
{
/* what luck! this path is a hash key! if there is a linkpath,
use that, else return the path itself. */
@@ -219,9 +253,18 @@ send_vsn_url(item_baton_t *baton, apr_pool_t *pool)
path = get_real_fs_path(baton, pool);
revision = dav_svn__get_safe_cr(baton->uc->rev_root, path, pool);
- href = dav_svn__build_uri(baton->uc->resource->info->repos,
- DAV_SVN__BUILD_URI_VERSION,
- revision, path, 0 /* add_href */, pool);
+ if (baton->uc->enable_v2_response)
+ {
+ href = dav_svn__build_uri(baton->uc->resource->info->repos,
+ DAV_SVN__BUILD_URI_REVROOT,
+ revision, path, 0 /* add_href */, pool);
+ }
+ else
+ {
+ href = dav_svn__build_uri(baton->uc->resource->info->repos,
+ DAV_SVN__BUILD_URI_VERSION,
+ revision, path, 0 /* add_href */, pool);
+ }
return dav_svn__brigade_printf(baton->uc->bb, baton->uc->output,
"<D:checked-in><D:href>%s</D:href>"
@@ -401,7 +444,7 @@ open_helper(svn_boolean_t is_dir,
static svn_error_t *
-close_helper(svn_boolean_t is_dir, item_baton_t *baton)
+close_helper(svn_boolean_t is_dir, item_baton_t *baton, apr_pool_t *pool)
{
if (baton->uc->resource_walk)
return SVN_NO_ERROR;
@@ -415,14 +458,21 @@ close_helper(svn_boolean_t is_dir, item_baton_t *baton)
for (i = 0; i < baton->removed_props->nelts; i++)
{
- /* We already XML-escaped the property name in change_xxx_prop. */
qname = APR_ARRAY_IDX(baton->removed_props, i, const char *);
+ qname = apr_xml_quote_string(pool, qname, 1);
SVN_ERR(dav_svn__brigade_printf(baton->uc->bb, baton->uc->output,
"<S:remove-prop name=\"%s\"/>"
DEBUG_CR, qname));
}
}
+ /* If our client need to fetch properties, let it know. */
+ if (baton->fetch_props)
+ SVN_ERR(dav_svn__brigade_printf(baton->uc->bb, baton->uc->output,
+ "<S:fetch-props/>" DEBUG_CR));
+
+
+ /* Let's tie it off, nurse. */
if (baton->added)
SVN_ERR(dav_svn__brigade_printf(baton->uc->bb, baton->uc->output,
"</S:add-%s>" DEBUG_CR,
@@ -442,13 +492,13 @@ maybe_start_update_report(update_ctx_t *uc)
{
if ((! uc->resource_walk) && (! uc->started_update))
{
- SVN_ERR(dav_svn__brigade_printf(uc->bb, uc->output,
- DAV_XML_HEADER DEBUG_CR
- "<S:update-report xmlns:S=\""
- SVN_XML_NAMESPACE "\" "
- "xmlns:V=\"" SVN_DAV_PROP_NS_DAV "\" "
- "xmlns:D=\"DAV:\" %s>" DEBUG_CR,
- uc->send_all ? "send-all=\"true\"" : ""));
+ SVN_ERR(dav_svn__brigade_printf(
+ uc->bb, uc->output,
+ DAV_XML_HEADER DEBUG_CR "<S:update-report xmlns:S=\""
+ SVN_XML_NAMESPACE "\" xmlns:V=\"" SVN_DAV_PROP_NS_DAV "\" "
+ "xmlns:D=\"DAV:\" %s %s>" DEBUG_CR,
+ uc->send_all ? "send-all=\"true\"" : "",
+ uc->include_props ? "inline-props=\"true\"" : ""));
uc->started_update = TRUE;
}
@@ -551,10 +601,10 @@ upd_add_directory(const char *path,
static svn_error_t *
upd_open_directory(const char *path,
- void *parent_baton,
- svn_revnum_t base_revision,
- apr_pool_t *pool,
- void **child_baton)
+ void *parent_baton,
+ svn_revnum_t base_revision,
+ apr_pool_t *pool,
+ void **child_baton)
{
return open_helper(TRUE /* is_dir */,
path, parent_baton, base_revision, pool, child_baton);
@@ -562,79 +612,115 @@ upd_open_directory(const char *path,
static svn_error_t *
+send_propchange(item_baton_t *b,
+ const char *name,
+ const svn_string_t *value,
+ apr_pool_t *pool)
+{
+ const char *qname;
+
+ /* Ensure that the property name is XML-safe. */
+ qname = apr_xml_quote_string(pool, name, 1);
+
+ if (value)
+ {
+ const char *qval;
+
+ if (svn_xml_is_xml_safe(value->data, value->len))
+ {
+ svn_stringbuf_t *tmp = NULL;
+ svn_xml_escape_cdata_string(&tmp, value, pool);
+ qval = tmp->data;
+ SVN_ERR(dav_svn__brigade_printf(b->uc->bb, b->uc->output,
+ "<S:set-prop name=\"%s\">",
+ qname));
+ }
+ else
+ {
+ qval = svn_base64_encode_string2(value, TRUE, pool)->data;
+ SVN_ERR(dav_svn__brigade_printf(b->uc->bb, b->uc->output,
+ "<S:set-prop name=\"%s\" "
+ "encoding=\"base64\">" DEBUG_CR,
+ qname));
+ }
+
+ SVN_ERR(dav_svn__brigade_puts(b->uc->bb, b->uc->output, qval));
+ SVN_ERR(dav_svn__brigade_puts(b->uc->bb, b->uc->output,
+ "</S:set-prop>" DEBUG_CR));
+ }
+ else /* value is null, so this is a prop removal */
+ {
+ SVN_ERR(dav_svn__brigade_printf(b->uc->bb, b->uc->output,
+ "<S:remove-prop name=\"%s\"/>"
+ DEBUG_CR,
+ qname));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
upd_change_xxx_prop(void *baton,
const char *name,
const svn_string_t *value,
apr_pool_t *pool)
{
item_baton_t *b = baton;
- const char *qname;
/* Resource walks say nothing about props. */
if (b->uc->resource_walk)
return SVN_NO_ERROR;
- /* Else this not a resource walk, so either send props or cache them
- to send later, depending on whether this is a modern report
- response or not. */
-
- qname = apr_xml_quote_string(b->pool, name, 1);
-
- /* apr_xml_quote_string doesn't realloc if there is nothing to
- quote, so dup the name, but only if necessary. */
- if (qname == name)
- qname = apr_pstrdup(b->pool, name);
+ /* If we get here, this not a resource walk, so either send props or
+ cache them to send later, depending on whether this is a modern
+ report response or not. */
/* Even if we are not in send-all mode we have the prop changes already,
so send them to the client now instead of telling the client to fetch
them later. */
- if (b->uc->send_all || !b->added)
+ if (b->uc->send_all)
{
- if (value)
+ SVN_ERR(send_propchange(b, name, value, pool));
+ }
+ else
+ {
+ if (b->added)
{
- const char *qval;
-
- if (svn_xml_is_xml_safe(value->data, value->len))
+ /* This is an addition in "skelta" (that is, "not send-all")
+ mode so there is no strict need for an inline response.
+ Clients will assume that added objects need all to have
+ all their properties explicitly fetched from the
+ server. */
+
+ /* That said, beginning in Subversion 1.8, clients might
+ request even in skelta mode that we transmit properties
+ on added files and directories explicitly. */
+ if (value && b->uc->include_props)
{
- svn_stringbuf_t *tmp = NULL;
- svn_xml_escape_cdata_string(&tmp, value, pool);
- qval = tmp->data;
- SVN_ERR(dav_svn__brigade_printf(b->uc->bb, b->uc->output,
- "<S:set-prop name=\"%s\">",
- qname));
+ SVN_ERR(send_propchange(b, name, value, pool));
}
- else
+
+ /* Now, if the object is actually a copy and this is a
+ property removal, we'll still need to cache (and later
+ transmit) property removals, because fetching the
+ object's current property set alone isn't sufficient to
+ communicate the fact that additional properties were, in
+ fact, removed from the copied base object in order to
+ arrive at that set. */
+ if (b->copyfrom && (! value))
{
- qval = svn_base64_encode_string2(value, TRUE, pool)->data;
- SVN_ERR(dav_svn__brigade_printf(b->uc->bb, b->uc->output,
- "<S:set-prop name=\"%s\" "
- "encoding=\"base64\">" DEBUG_CR,
- qname));
- }
+ if (! b->removed_props)
+ b->removed_props = apr_array_make(b->pool, 1, sizeof(name));
- SVN_ERR(dav_svn__brigade_puts(b->uc->bb, b->uc->output, qval));
- SVN_ERR(dav_svn__brigade_puts(b->uc->bb, b->uc->output,
- "</S:set-prop>" DEBUG_CR));
+ APR_ARRAY_PUSH(b->removed_props, const char *) = name;
+ }
}
- else /* value is null, so this is a prop removal */
+ else
{
- SVN_ERR(dav_svn__brigade_printf(b->uc->bb, b->uc->output,
- "<S:remove-prop name=\"%s\"/>"
- DEBUG_CR,
- qname));
+ /* "skelta" mode non-addition. Just send the change. */
+ SVN_ERR(send_propchange(b, name, value, pool));
}
}
- else if (!value) /* This is an addition in 'skelta' mode so there is no
- need for an inline response since property fetching
- is implied in addition. We still need to cache
- property removals because a copied path might
- have removed properties. */
- {
- if (! b->removed_props)
- b->removed_props = apr_array_make(b->pool, 1, sizeof(name));
-
- APR_ARRAY_PUSH(b->removed_props, const char *) = qname;
- }
return SVN_NO_ERROR;
}
@@ -643,7 +729,7 @@ upd_change_xxx_prop(void *baton,
static svn_error_t *
upd_close_directory(void *dir_baton, apr_pool_t *pool)
{
- return close_helper(TRUE /* is_dir */, dir_baton);
+ return close_helper(TRUE /* is_dir */, dir_baton, pool);
}
@@ -720,18 +806,6 @@ window_handler(svn_txdelta_window_t *window, void *baton)
return SVN_NO_ERROR;
}
-
-/* This implements 'svn_txdelta_window_handler_t'.
- During a resource walk, the driver sends an empty window as a
- boolean indicating that a change happened to this file, but we
- don't want to send anything over the wire as a result. */
-static svn_error_t *
-dummy_window_handler(svn_txdelta_window_t *window, void *baton)
-{
- return SVN_NO_ERROR;
-}
-
-
static svn_error_t *
upd_apply_textdelta(void *file_baton,
const char *base_checksum,
@@ -751,7 +825,7 @@ upd_apply_textdelta(void *file_baton,
we don't actually want to transmit text-deltas. */
if (file->uc->resource_walk || (! file->uc->send_all))
{
- *handler = dummy_window_handler;
+ *handler = svn_delta_noop_window_handler;
*handler_baton = NULL;
return SVN_NO_ERROR;
}
@@ -766,7 +840,7 @@ upd_apply_textdelta(void *file_baton,
svn_txdelta_to_svndiff3(&(wb->handler), &(wb->handler_baton),
base64_stream, file->uc->svndiff_version,
- dav_svn__get_compression_level(), file->pool);
+ file->uc->compression_level, file->pool);
*handler = window_handler;
*handler_baton = wb;
@@ -816,7 +890,7 @@ upd_close_file(void *file_baton, const char *text_checksum, apr_pool_t *pool)
text_checksum));
}
- return close_helper(FALSE /* is_dir */, file);
+ return close_helper(FALSE /* is_dir */, file, pool);
}
@@ -845,6 +919,49 @@ malformed_element_error(const char *tagname, apr_pool_t *pool)
}
+/* Validate that REVISION is a valid revision number for repository in
+ which YOUNGEST is the latest revision. Use RESOURCE as a
+ convenient way to access the request record and a pool for error
+ messaging. (It's okay if REVISION is SVN_INVALID_REVNUM, as in
+ the related contexts that just means "the youngest revision".)
+
+ REVTYPE is just a string describing the type/purpose of REVISION,
+ used in the generated error string. */
+static dav_error *
+validate_input_revision(svn_revnum_t revision,
+ svn_revnum_t youngest,
+ const char *revtype,
+ const dav_resource *resource)
+{
+ if (! SVN_IS_VALID_REVNUM(revision))
+ return SVN_NO_ERROR;
+
+ if (revision > youngest)
+ {
+ svn_error_t *serr;
+
+ if (dav_svn__get_master_uri(resource->info->r))
+ {
+ serr = svn_error_createf(SVN_ERR_FS_NO_SUCH_REVISION, 0,
+ "No such %s '%ld' found in the repository. "
+ "Perhaps the repository is out of date with "
+ "respect to the master repository?",
+ revtype, revision);
+ }
+ else
+ {
+ serr = svn_error_createf(SVN_ERR_FS_NO_SUCH_REVISION, 0,
+ "No such %s '%ld' found in the repository.",
+ revtype, revision);
+ }
+ return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
+ "Invalid revision found in update report "
+ "request.", resource->pool);
+ }
+ return SVN_NO_ERROR;
+}
+
+
dav_error *
dav_svn__update_report(const dav_resource *resource,
const apr_xml_doc *doc,
@@ -854,8 +971,7 @@ dav_svn__update_report(const dav_resource *resource,
apr_xml_elem *child;
void *rbaton = NULL;
update_ctx_t uc = { 0 };
- svn_revnum_t revnum = SVN_INVALID_REVNUM;
- svn_boolean_t revnum_is_head = FALSE;
+ svn_revnum_t youngest, revnum = SVN_INVALID_REVNUM;
svn_revnum_t from_revnum = SVN_INVALID_REVNUM;
int ns;
/* entry_counter and entry_is_empty are for operational logging. */
@@ -901,11 +1017,15 @@ dav_svn__update_report(const dav_resource *resource,
SVN_DAV_ERROR_TAG);
}
- /* If server configuration permits bulk updates (a report with props
- and textdeltas inline, rather than placeholder tags that tell the
- client to do further fetches), look to see if client requested as
- much. */
- if (repos->bulk_updates)
+ /* SVNAllowBulkUpdates On/Prefer: server configuration permits bulk updates
+ (a report with props and textdeltas inline, rather than placeholder tags
+ that tell the client to do further fetches), look to see if client
+ requested as much.
+
+ SVNAllowBulkUpdates Off: no bulk updates allowed, force skelta mode.
+ */
+ if (repos->bulk_updates == CONF_BULKUPD_ON ||
+ repos->bulk_updates == CONF_BULKUPD_PREFER)
{
apr_xml_attr *this_attr;
@@ -915,11 +1035,20 @@ dav_svn__update_report(const dav_resource *resource,
&& (strcmp(this_attr->value, "true") == 0))
{
uc.send_all = TRUE;
+ uc.include_props = TRUE;
break;
}
}
}
+ /* Ask the repository about its youngest revision (which we'll need
+ for some input validation later). */
+ if ((serr = svn_fs_youngest_rev(&youngest, repos->fs, resource->pool)))
+ return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
+ "Could not determine the youngest "
+ "revision for the update process.",
+ resource->pool);
+
for (child = doc->root->first_child; child != NULL; child = child->next)
{
/* Note that child->name might not match any of the cases below.
@@ -1037,6 +1166,31 @@ dav_svn__update_report(const dav_resource *resource,
if (strcmp(cdata, "no") == 0)
text_deltas = FALSE;
}
+ if (child->ns == ns && strcmp(child->name, "include-props") == 0)
+ {
+ cdata = dav_xml_get_cdata(child, resource->pool, 1);
+ if (! *cdata)
+ return malformed_element_error(child->name, resource->pool);
+ if (strcmp(cdata, "no") != 0)
+ uc.include_props = TRUE;
+ }
+ }
+
+ /* If a target revision wasn't requested, or the requested target
+ revision was invalid, just update to HEAD as of the moment we
+ queried the youngest revision. Otherwise, at least make sure the
+ request makes sense in light of that youngest revision
+ number. */
+ if (! SVN_IS_VALID_REVNUM(revnum))
+ {
+ revnum = youngest;
+ }
+ else
+ {
+ derr = validate_input_revision(revnum, youngest, "target revision",
+ resource);
+ if (derr)
+ return derr;
}
if (!saw_depth && !saw_recursive && (requested_depth == svn_depth_unknown))
@@ -1054,25 +1208,17 @@ dav_svn__update_report(const dav_resource *resource,
SVN_DAV_ERROR_TAG);
}
- /* If a revision for this operation was not dictated to us, this
- means "update to whatever the current HEAD is now". */
- if (revnum == SVN_INVALID_REVNUM)
- {
- if ((serr = svn_fs_youngest_rev(&revnum, repos->fs, resource->pool)))
- return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
- "Could not determine the youngest "
- "revision for the update process.",
- resource->pool);
- revnum_is_head = TRUE;
- }
-
uc.svndiff_version = resource->info->svndiff_version;
+ uc.compression_level = dav_svn__get_compression_level(resource->info->r);
uc.resource = resource;
uc.output = output;
uc.anchor = src_path;
uc.target = target;
uc.bb = apr_brigade_create(resource->pool, output->c->bucket_alloc);
uc.pathmap = NULL;
+ uc.enable_v2_response = ((resource->info->restype == DAV_SVN_RESTYPE_ME)
+ && (resource->info->repos->v2_protocol));
+
if (dst_path) /* we're doing a 'switch' */
{
if (*target)
@@ -1133,7 +1279,7 @@ dav_svn__update_report(const dav_resource *resource,
editor->close_file = upd_close_file;
editor->absent_file = upd_absent_file;
editor->close_edit = upd_close_edit;
- if ((serr = svn_repos_begin_report2(&rbaton, revnum,
+ if ((serr = svn_repos_begin_report3(&rbaton, revnum,
repos->repos,
src_path, target,
dst_path,
@@ -1144,6 +1290,7 @@ dav_svn__update_report(const dav_resource *resource,
editor, &uc,
dav_svn__authz_read_func(&arb),
&arb,
+ 0, /* disable zero-copy for now */
resource->pool)))
{
return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
@@ -1179,27 +1326,10 @@ dav_svn__update_report(const dav_resource *resource,
{
rev = SVN_STR_TO_REV(this_attr->value);
saw_rev = TRUE;
- if (revnum_is_head && rev > revnum)
- {
- if (dav_svn__get_master_uri(resource->info->r))
- return dav_svn__new_error_tag(
- resource->pool,
- HTTP_INTERNAL_SERVER_ERROR, 0,
- "A reported revision is higher than the "
- "current repository HEAD revision. "
- "Perhaps the repository is out of date "
- "with respect to the master repository?",
- SVN_DAV_ERROR_NAMESPACE,
- SVN_DAV_ERROR_TAG);
- else
- return dav_svn__new_error_tag(
- resource->pool,
- HTTP_INTERNAL_SERVER_ERROR, 0,
- "A reported revision is higher than the "
- "current repository HEAD revision.",
- SVN_DAV_ERROR_NAMESPACE,
- SVN_DAV_ERROR_TAG);
- }
+ if ((derr = validate_input_revision(rev, youngest,
+ "reported revision",
+ resource)))
+ return derr;
}
else if (strcmp(this_attr->name, "depth") == 0)
depth = svn_depth_from_word(this_attr->value);
diff --git a/subversion/mod_dav_svn/repos.c b/subversion/mod_dav_svn/repos.c
index 4407896..590cca9 100644
--- a/subversion/mod_dav_svn/repos.c
+++ b/subversion/mod_dav_svn/repos.c
@@ -37,6 +37,7 @@
#define CORE_PRIVATE /* To make ap_show_mpm public in 2.2 */
#include <http_config.h>
+#include "svn_hash.h"
#include "svn_types.h"
#include "svn_pools.h"
#include "svn_error.h"
@@ -48,6 +49,7 @@
#include "svn_version.h"
#include "svn_props.h"
#include "svn_ctype.h"
+#include "svn_subst.h"
#include "mod_dav_svn.h"
#include "svn_ra.h" /* for SVN_RA_CAPABILITY_* */
#include "svn_dirent_uri.h"
@@ -506,6 +508,9 @@ parse_vtxnstub_uri(dav_resource_combined *comb,
if (parse_txnstub_uri(comb, path, label, use_checked_in))
return TRUE;
+ if (!comb->priv.root.txn_name)
+ return TRUE;
+
comb->priv.root.vtxn_name = comb->priv.root.txn_name;
comb->priv.root.txn_name = dav_svn__get_txn(comb->priv.repos,
comb->priv.root.vtxn_name);
@@ -574,6 +579,9 @@ parse_vtxnroot_uri(dav_resource_combined *comb,
if (parse_txnroot_uri(comb, path, label, use_checked_in))
return TRUE;
+ if (!comb->priv.root.txn_name)
+ return TRUE;
+
comb->priv.root.vtxn_name = comb->priv.root.txn_name;
comb->priv.root.txn_name = dav_svn__get_txn(comb->priv.repos,
comb->priv.root.vtxn_name);
@@ -919,6 +927,10 @@ prep_working(dav_resource_combined *comb)
point. */
if (txn_name == NULL)
{
+ if (!comb->priv.root.activity_id)
+ return dav_svn__new_error(comb->res.pool, HTTP_BAD_REQUEST, 0,
+ "The request did not specify an activity ID");
+
txn_name = dav_svn__get_txn(comb->priv.repos,
comb->priv.root.activity_id);
if (txn_name == NULL)
@@ -1029,8 +1041,13 @@ prep_working(dav_resource_combined *comb)
static dav_error *
prep_activity(dav_resource_combined *comb)
{
- const char *txn_name = dav_svn__get_txn(comb->priv.repos,
- comb->priv.root.activity_id);
+ const char *txn_name;
+
+ if (!comb->priv.root.activity_id)
+ return dav_svn__new_error(comb->res.pool, HTTP_BAD_REQUEST, 0,
+ "The request did not specify an activity ID");
+
+ txn_name = dav_svn__get_txn(comb->priv.repos, comb->priv.root.activity_id);
comb->priv.root.txn_name = txn_name;
comb->res.exists = txn_name != NULL;
@@ -1149,8 +1166,11 @@ create_private_resource(const dav_resource *base,
comb->res.collection = TRUE; /* ### always true? */
/* versioned = baselined = working = FALSE */
- comb->res.uri = apr_pstrcat(base->pool, base->info->repos->root_path,
- path->data, (char *)NULL);
+ if (base->info->repos->root_path[1])
+ comb->res.uri = apr_pstrcat(base->pool, base->info->repos->root_path,
+ path->data, (char *)NULL);
+ else
+ comb->res.uri = path->data;
comb->res.info = &comb->priv;
comb->res.hooks = &dav_svn__hooks_repository;
comb->res.pool = base->pool;
@@ -1499,7 +1519,7 @@ get_parentpath_resource(request_rec *r,
repos->xslt_uri = dav_svn__get_xslt_uri(r);
repos->autoversioning = dav_svn__get_autoversioning_flag(r);
repos->bulk_updates = dav_svn__get_bulk_updates_flag(r);
- repos->v2_protocol = dav_svn__get_v2_protocol_flag(r);
+ repos->v2_protocol = dav_svn__check_httpv2_support(r);
repos->base_url = ap_construct_url(r->pool, "", r);
repos->special_uri = dav_svn__get_special_uri(r);
repos->username = r->user;
@@ -1573,7 +1593,7 @@ static const char *get_entry(apr_pool_t *p, accept_rec *result,
for (cp = parm; (*cp && !svn_ctype_isspace(*cp) && *cp != '='); ++cp)
{
- *cp = apr_tolower(*cp);
+ *cp = (char)apr_tolower(*cp);
}
if (!*cp)
@@ -1785,14 +1805,97 @@ do_out_of_date_check(dav_resource_combined *comb, request_rec *r)
"Could not get created rev of "
"resource", r->pool);
- if (comb->priv.version_name < created_rev)
+ if (SVN_IS_VALID_REVNUM(created_rev))
{
- serr = svn_error_createf(SVN_ERR_RA_OUT_OF_DATE, NULL,
- "Item '%s' is out of date",
- comb->priv.repos_path);
- return dav_svn__convert_err(serr, HTTP_CONFLICT,
- "Attempting to modify out-of-date resource.",
- r->pool);
+ if (comb->priv.version_name < created_rev)
+ {
+ serr = svn_error_createf(SVN_ERR_RA_OUT_OF_DATE, NULL,
+ comb->res.collection
+ ? "Directory '%s' is out of date"
+ : (comb->res.exists
+ ? "File '%s' is out of date"
+ : "'%s' is out of date"),
+ comb->priv.repos_path);
+ return dav_svn__convert_err(serr, HTTP_CONFLICT,
+ "Attempting to modify out-of-date resource.",
+ r->pool);
+ }
+ }
+ else if (SVN_IS_VALID_REVNUM(comb->priv.version_name)
+ && comb->res.collection)
+ {
+ /* Issue #4480: With HTTPv2 we can receive the first change for a
+ directory after it has been made mutable, because one of its
+ descendants was changed before changing the directory.
+
+ We have to check if whatever the node is in HEAD is equivalent
+ to what it was in the provided BASE revision.
+
+ If the node was copied, we would process it before its decendants
+ and we already performed quite a few checks when making it mutable
+ via its descendant, so what we should really check here is if the
+ properties changed since the BASE version.
+
+ ### I think svn_fs_node_relation() checks for more changes than we
+ should check for here. Needs further review. But it looks like\
+ this check matches the checks in the libsvn_fs commit editor.
+
+ For now I would say reporting out of date in a few too many
+ cases is safer than not reporting out of date when we should.
+ */
+ svn_revnum_t txn_base_rev;
+ svn_fs_root_t *txn_base_root;
+ svn_fs_root_t *rev_root;
+ const svn_fs_id_t *txn_base_id;
+ const svn_fs_id_t *rev_id;
+
+ txn_base_rev = svn_fs_txn_base_revision(comb->res.info->root.txn);
+
+ if (comb->priv.version_name == txn_base_rev)
+ return NULL; /* Easy out: Nothing changed */
+
+ serr = svn_fs_revision_root(&txn_base_root, comb->res.info->repos->fs,
+ txn_base_rev, r->pool);
+
+ if (!serr)
+ serr = svn_fs_node_id(&txn_base_id, txn_base_root,
+ comb->priv.repos_path, r->pool);
+
+ if (serr != NULL)
+ {
+ return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
+ "Could not open youngest revision root "
+ "for verification against the base "
+ "revision", r->pool);
+ }
+
+ serr = svn_fs_revision_root(&rev_root, comb->res.info->repos->fs,
+ comb->priv.version_name, r->pool);
+
+ if (!serr)
+ serr = svn_fs_node_id(&rev_id, rev_root,
+ comb->priv.repos_path, r->pool);
+
+ if (serr != NULL)
+ {
+ return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
+ "Could not open the base revision"
+ "for verification against the youngest "
+ "revision", r->pool);
+ }
+
+ svn_fs_close_root(rev_root);
+ svn_fs_close_root(txn_base_root);
+
+ if (0 != svn_fs_compare_ids(txn_base_id, rev_id))
+ {
+ serr = svn_error_createf(SVN_ERR_RA_OUT_OF_DATE, NULL,
+ "Directory '%s' is out of date",
+ comb->priv.repos_path);
+ return dav_svn__convert_err(serr, HTTP_CONFLICT,
+ "Attempting to modify out-of-date resource.",
+ r->pool);
+ }
}
return NULL;
@@ -1817,9 +1920,17 @@ parse_querystring(request_rec *r, const char *query,
apr_table_t *pairs = querystring_to_table(query, pool);
const char *prevstr = apr_table_get(pairs, "p");
const char *wrevstr;
+ const char *keyword_subst;
+
+ /* Will we be doing keyword substitution? */
+ keyword_subst = apr_table_get(pairs, "kw");
+ if (keyword_subst && (strcmp(keyword_subst, "1") == 0))
+ comb->priv.keyword_subst = TRUE;
if (prevstr)
{
+ while (*prevstr == 'r')
+ prevstr++;
peg_rev = SVN_STR_TO_REV(prevstr);
if (!SVN_IS_VALID_REVNUM(peg_rev))
return dav_svn__new_error(pool, HTTP_BAD_REQUEST, 0,
@@ -1837,6 +1948,8 @@ parse_querystring(request_rec *r, const char *query,
wrevstr = apr_table_get(pairs, "r");
if (wrevstr)
{
+ while (*wrevstr == 'r')
+ wrevstr++;
working_rev = SVN_STR_TO_REV(wrevstr);
if (!SVN_IS_VALID_REVNUM(working_rev))
return dav_svn__new_error(pool, HTTP_BAD_REQUEST, 0,
@@ -1872,7 +1985,7 @@ parse_querystring(request_rec *r, const char *query,
}
else
{
- const char *newpath;
+ const char *newpath, *location;
apr_hash_t *locations;
apr_array_header_t *loc_revs = apr_array_make(pool, 1,
sizeof(svn_revnum_t));
@@ -1901,13 +2014,17 @@ parse_querystring(request_rec *r, const char *query,
/* Redirect folks to a canonical, peg-revision-only location.
If they used a peg revision in this request, we can use a
permanent redirect. If they didn't (peg-rev is HEAD), we can
- only use a temporary redirect. */
- apr_table_setn(r->headers_out, "Location",
- ap_construct_url(r->pool,
- apr_psprintf(r->pool, "%s%s?p=%ld",
- comb->priv.repos->root_path,
- newpath, working_rev),
- r));
+ only use a temporary redirect. In either case, preserve the
+ "keyword_subst" state in the redirected location, too. */
+ location = ap_construct_url(r->pool,
+ apr_psprintf(r->pool, "%s%s?p=%ld%s",
+ (comb->priv.repos->root_path[1]
+ ? comb->priv.repos->root_path
+ : ""),
+ newpath, working_rev,
+ keyword_subst ? "&kw=1" : ""),
+ r);
+ apr_table_setn(r->headers_out, "Location", location);
return dav_svn__new_error(r->pool,
prevstr ? HTTP_MOVED_PERMANENTLY
: HTTP_MOVED_TEMPORARILY,
@@ -1917,8 +2034,6 @@ parse_querystring(request_rec *r, const char *query,
return NULL;
}
-
-
static dav_error *
get_resource(request_rec *r,
const char *root_path,
@@ -1952,26 +2067,31 @@ get_resource(request_rec *r,
/* Special case: detect and build the SVNParentPath as a unique type
of private resource, iff the SVNListParentPath directive is 'on'. */
- if (fs_parent_path && dav_svn__get_list_parentpath_flag(r))
+ if (dav_svn__is_parentpath_list(r))
{
- char *uri = apr_pstrdup(r->pool, r->uri);
- char *parentpath = apr_pstrdup(r->pool, root_path);
- apr_size_t uri_len = strlen(uri);
- apr_size_t parentpath_len = strlen(parentpath);
-
- if (uri[uri_len-1] == '/')
- uri[uri_len-1] = '\0';
+ /* Only allow GET and HEAD on the parentpath resource
+ * httpd uses the same method_number for HEAD as GET */
+ if (r->method_number != M_GET)
+ {
+ int status;
- if (parentpath[parentpath_len-1] == '/')
- parentpath[parentpath_len-1] = '\0';
+ /* Marshall the error back to the client by generating by
+ * way of the dav_svn__error_response_tag trick. */
+ err = dav_svn__new_error(r->pool, HTTP_METHOD_NOT_ALLOWED,
+ SVN_ERR_APMOD_MALFORMED_URI,
+ "The URI does not contain the name "
+ "of a repository.");
+ /* can't use r->allowed since the default handler isn't called */
+ apr_table_setn(r->headers_out, "Allow", "GET,HEAD");
+ status = dav_svn__error_response_tag(r, err);
- if (strcmp(parentpath, uri) == 0)
- {
- err = get_parentpath_resource(r, resource);
- if (err)
- return err;
- return NULL;
+ return dav_push_error(r->pool, status, err->error_id, NULL, err);
}
+
+ err = get_parentpath_resource(r, resource);
+ if (err)
+ return err;
+ return NULL;
}
/* This does all the work of interpreting/splitting the request uri. */
@@ -2075,7 +2195,7 @@ get_resource(request_rec *r,
repos->bulk_updates = dav_svn__get_bulk_updates_flag(r);
/* Are we advertising HTTP v2 protocol support? */
- repos->v2_protocol = dav_svn__get_v2_protocol_flag(r);
+ repos->v2_protocol = dav_svn__check_httpv2_support(r);
/* Path to activities database */
repos->activities_db = dav_svn__get_activities_db(r);
@@ -2120,8 +2240,9 @@ get_resource(request_rec *r,
more than that). */
/* Start out assuming no capabilities. */
- apr_hash_set(repos->client_capabilities, SVN_RA_CAPABILITY_MERGEINFO,
- APR_HASH_KEY_STRING, capability_no);
+ svn_hash_sets(repos->client_capabilities,
+ SVN_RA_CAPABILITY_MERGEINFO,
+ capability_no);
/* Then see what we can find. */
val = apr_table_get(r->headers_in, "DAV");
@@ -2132,9 +2253,8 @@ get_resource(request_rec *r,
if (svn_cstring_match_list(SVN_DAV_NS_DAV_SVN_MERGEINFO, vals))
{
- apr_hash_set(repos->client_capabilities,
- SVN_RA_CAPABILITY_MERGEINFO,
- APR_HASH_KEY_STRING, capability_yes);
+ svn_hash_sets(repos->client_capabilities,
+ SVN_RA_CAPABILITY_MERGEINFO, capability_yes);
}
}
}
@@ -2150,14 +2270,12 @@ get_resource(request_rec *r,
/* construct FS configuration parameters */
fs_config = apr_hash_make(r->connection->pool);
- apr_hash_set(fs_config,
- SVN_FS_CONFIG_FSFS_CACHE_DELTAS,
- APR_HASH_KEY_STRING,
- dav_svn__get_txdelta_cache_flag(r) ? "1" : "0");
- apr_hash_set(fs_config,
- SVN_FS_CONFIG_FSFS_CACHE_FULLTEXTS,
- APR_HASH_KEY_STRING,
- dav_svn__get_fulltext_cache_flag(r) ? "1" : "0");
+ svn_hash_sets(fs_config, SVN_FS_CONFIG_FSFS_CACHE_DELTAS,
+ dav_svn__get_txdelta_cache_flag(r) ? "1" :"0");
+ svn_hash_sets(fs_config, SVN_FS_CONFIG_FSFS_CACHE_FULLTEXTS,
+ dav_svn__get_fulltext_cache_flag(r) ? "1" :"0");
+ svn_hash_sets(fs_config, SVN_FS_CONFIG_FSFS_CACHE_REVPROPS,
+ dav_svn__get_revprop_cache_flag(r) ? "1" :"0");
/* Disallow BDB/event until issue 4157 is fixed. */
if (!strcmp(ap_show_mpm(), "event"))
@@ -2210,6 +2328,14 @@ get_resource(request_rec *r,
"in repos object",
HTTP_INTERNAL_SERVER_ERROR, r);
}
+
+ /* Configure hook script environment variables. */
+ serr = svn_repos_hooks_setenv(repos->repos, dav_svn__get_hooks_env(r),
+ r->pool);
+ if (serr)
+ return dav_svn__sanitize_error(serr,
+ "Error settings hooks environment",
+ HTTP_INTERNAL_SERVER_ERROR, r);
}
/* cache the filesystem object */
@@ -2385,21 +2511,12 @@ get_parent_path(const char *path,
svn_boolean_t is_urlpath,
apr_pool_t *pool)
{
- apr_size_t len;
- char *tmp = apr_pstrdup(pool, path);
-
- len = strlen(tmp);
-
- if (len > 0)
+ if (*path != '\0') /* not an empty string */
{
- /* Remove any trailing slash; else svn_path_dirname() asserts. */
- if (tmp[len-1] == '/')
- tmp[len-1] = '\0';
-
if (is_urlpath)
- return svn_urlpath__dirname(tmp, pool);
+ return svn_urlpath__dirname(path, pool);
else
- return svn_fspath__dirname(tmp, pool);
+ return svn_fspath__dirname(path, pool);
}
return path;
@@ -2435,13 +2552,18 @@ get_parent_resource(const dav_resource *resource,
parent->versioned = 1;
parent->hooks = resource->hooks;
parent->pool = resource->pool;
- parent->uri = get_parent_path(resource->uri, TRUE, resource->pool);
+ parent->uri = get_parent_path(svn_urlpath__canonicalize(resource->uri,
+ resource->pool),
+ TRUE, resource->pool);
parent->info = parentinfo;
parentinfo->uri_path =
- svn_stringbuf_create(get_parent_path(resource->info->uri_path->data,
- TRUE, resource->pool),
- resource->pool);
+ svn_stringbuf_create(
+ get_parent_path(
+ svn_urlpath__canonicalize(resource->info->uri_path->data,
+ resource->pool),
+ TRUE, resource->pool),
+ resource->pool);
parentinfo->repos = resource->info->repos;
parentinfo->root = resource->info->root;
parentinfo->r = resource->info->r;
@@ -2577,121 +2699,6 @@ is_parent_resource(const dav_resource *res1, const dav_resource *res2)
}
-#if 0
-/* Given an apache request R and a ROOT_PATH to the svn location
- block, set *KIND to the node-kind of the URI's associated
- (revision, path) pair, if possible.
-
- Public uris, baseline collections, version resources, and working
- (non-baseline) resources all have associated (revision, path)
- pairs, and thus one of {svn_node_file, svn_node_dir, svn_node_none}
- will be returned.
-
- If URI is something more abstract, then set *KIND to
- svn_node_unknown. This is true for baselines, working baselines,
- version controled configurations, activities, histories, and other
- private resources.
-*/
-static dav_error *
-resource_kind(request_rec *r,
- const char *uri,
- const char *root_path,
- svn_node_kind_t *kind)
-{
- dav_error *derr;
- svn_error_t *serr;
- dav_resource *resource;
- svn_revnum_t base_rev;
- svn_fs_root_t *base_rev_root;
- char *saved_uri;
-
- /* Temporarily insert the uri that the user actually wants us to
- convert into a resource. Typically, this is already r->uri, so
- this is usually a no-op. But sometimes the caller may pass in
- the Destination: header uri.
-
- ### WHAT WE REALLY WANT here is to refactor get_resource,
- so that some alternate interface actually allows us to specify
- the URI to process, i.e. not always process r->uri.
- */
- saved_uri = r->uri;
- r->uri = apr_pstrdup(r->pool, uri);
-
- /* parse the uri and prep the associated resource. */
- derr = get_resource(r, root_path,
- /* ### I can't believe that every single
- parser ignores the LABEL and USE_CHECKED_IN
- args below!! */
- "ignored_label", 1,
- &resource);
- /* Restore r back to normal. */
- r->uri = saved_uri;
-
- if (derr)
- return derr;
-
- if (resource->type == DAV_RESOURCE_TYPE_REGULAR)
- {
- /* Either a public URI or a bc. In both cases, prep_regular()
- has already set the 'exists' and 'collection' flags by
- querying the appropriate revision root and path. */
- if (! resource->exists)
- *kind = svn_node_none;
- else
- *kind = resource->collection ? svn_node_dir : svn_node_file;
- }
-
- else if (resource->type == DAV_RESOURCE_TYPE_VERSION)
- {
- if (resource->baselined) /* bln */
- *kind = svn_node_unknown;
-
- else /* ver */
- {
- derr = fs_check_path(kind, resource->info->root.root,
- resource->info->repos_path, r->pool);
- if (derr != NULL)
- return derr;
- }
- }
-
- else if (resource->type == DAV_RESOURCE_TYPE_WORKING)
- {
- if (resource->baselined) /* wbl */
- *kind = svn_node_unknown;
-
- else /* wrk */
- {
- /* don't call fs_check_path on the txn, but on the original
- revision that the txn is based on. */
- base_rev = svn_fs_txn_base_revision(resource->info->root.txn);
- serr = svn_fs_revision_root(&base_rev_root,
- resource->info->repos->fs,
- base_rev, r->pool);
- if (serr)
- return dav_svn__convert_err
- (serr, HTTP_INTERNAL_SERVER_ERROR,
- apr_psprintf(r->pool,
- "Could not open root of revision %ld",
- base_rev),
- r->pool);
-
- derr = fs_check_path(kind, base_rev_root,
- resource->info->repos_path, r->pool);
- if (derr != NULL)
- return derr;
- }
- }
-
- else
- /* act, his, vcc, or some other private resource */
- *kind = svn_node_unknown;
-
- return NULL;
-}
-#endif
-
-
static dav_error *
open_stream(const dav_resource *resource,
dav_stream_mode mode,
@@ -2711,14 +2718,13 @@ open_stream(const dav_resource *resource,
}
}
-#if 1
+ /* ### TODO: Can we support range writes someday? */
if (mode == DAV_MODE_WRITE_SEEKABLE)
{
return dav_svn__new_error(resource->pool, HTTP_NOT_IMPLEMENTED, 0,
"Resource body writes cannot use ranges "
"(at this time).");
}
-#endif
/* start building the stream structure */
*stream = apr_pcalloc(resource->pool, sizeof(**stream));
@@ -3034,14 +3040,12 @@ set_headers(request_rec *r, const dav_resource *resource)
apr_table_setn(r->headers_out, "ETag",
dav_svn__getetag(resource, resource->pool));
-#if 0
/* As version resources don't change, encourage caching. */
- /* ### FIXME: This conditional is wrong -- type is often REGULAR,
- ### and the resource doesn't seem to be baselined. */
- if (resource->type == DAV_RESOURCE_TYPE_VERSION)
+ if ((resource->type == DAV_RESOURCE_TYPE_REGULAR
+ && resource->versioned && !resource->collection)
+ || resource->type == DAV_RESOURCE_TYPE_VERSION)
/* Cache resource for one week (specified in seconds). */
apr_table_setn(r->headers_out, "Cache-Control", "max-age=604800");
-#endif
/* we accept byte-ranges */
apr_table_setn(r->headers_out, "Accept-Ranges", "bytes");
@@ -3070,6 +3074,13 @@ set_headers(request_rec *r, const dav_resource *resource)
if ((serr == NULL) && (info.rev != SVN_INVALID_REVNUM))
{
mimetype = SVN_SVNDIFF_MIME_TYPE;
+
+ /* Note the base that this svndiff is based on, and tell any
+ intermediate caching proxies that this header is
+ significant. */
+ apr_table_setn(r->headers_out, "Vary", SVN_DAV_DELTA_BASE_HEADER);
+ apr_table_setn(r->headers_out, SVN_DAV_DELTA_BASE_HEADER,
+ resource->info->delta_base);
}
svn_error_clear(serr);
}
@@ -3122,19 +3133,23 @@ set_headers(request_rec *r, const dav_resource *resource)
mimetype = "text/plain";
- /* if we aren't sending a diff, then we know the length of the file,
- so set up the Content-Length header */
- serr = svn_fs_file_length(&length,
- resource->info->root.root,
- resource->info->repos_path,
- resource->pool);
- if (serr != NULL)
+ /* if we aren't sending a diff and aren't expanding keywords,
+ then we know the exact length of the file, so set up the
+ Content-Length header. */
+ if (! resource->info->keyword_subst)
{
- return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
- "could not fetch the resource length",
- resource->pool);
+ serr = svn_fs_file_length(&length,
+ resource->info->root.root,
+ resource->info->repos_path,
+ resource->pool);
+ if (serr != NULL)
+ {
+ return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
+ "could not fetch the resource length",
+ resource->pool);
+ }
+ ap_set_content_length(r, (apr_off_t) length);
}
- ap_set_content_length(r, (apr_off_t) length);
}
/* set the discovered MIME type */
@@ -3151,7 +3166,7 @@ typedef struct diff_ctx_t {
} diff_ctx_t;
-static svn_error_t *
+static svn_error_t * __attribute__((warn_unused_result))
write_to_filter(void *baton, const char *buffer, apr_size_t *len)
{
diff_ctx_t *dc = baton;
@@ -3172,7 +3187,7 @@ write_to_filter(void *baton, const char *buffer, apr_size_t *len)
}
-static svn_error_t *
+static svn_error_t * __attribute__((warn_unused_result))
close_filter(void *baton)
{
diff_ctx_t *dc = baton;
@@ -3285,7 +3300,7 @@ deliver(const dav_resource *resource, ap_filter_t *output)
if (dirent->kind == svn_node_file && dirent->special)
{
svn_node_kind_t resolved_kind;
- const char *link_path =
+ const char *link_path =
svn_dirent_join(fs_parent_path, key, resource->pool);
serr = svn_io_check_resolved_path(link_path, &resolved_kind,
@@ -3298,7 +3313,7 @@ deliver(const dav_resource *resource, ap_filter_t *output)
resource->pool);
if (resolved_kind != svn_node_dir)
continue;
-
+
dirent->kind = svn_node_dir;
}
else if (dirent->kind != svn_node_dir)
@@ -3308,7 +3323,7 @@ deliver(const dav_resource *resource, ap_filter_t *output)
ent->id = NULL; /* ### does it matter? */
ent->kind = dirent->kind;
- apr_hash_set(entries, key, APR_HASH_KEY_STRING, ent);
+ svn_hash_sets(entries, key, ent);
}
}
@@ -3445,9 +3460,9 @@ deliver(const dav_resource *resource, ap_filter_t *output)
}
else
{
- /* ### TODO: We could test for readability of the root
- directory of each repository and hide those that
- the user can't see. */
+ if (! dav_svn__allow_list_repos(resource->info->r,
+ entry->name, entry_pool))
+ continue;
}
/* append a trailing slash onto the name for directories. we NEED
@@ -3622,7 +3637,7 @@ deliver(const dav_resource *resource, ap_filter_t *output)
/* get a handler/baton for writing into the output stream */
svn_txdelta_to_svndiff3(&handler, &h_baton,
o_stream, resource->info->svndiff_version,
- dav_svn__get_compression_level(),
+ dav_svn__get_compression_level(resource->info->r),
resource->pool);
/* got everything set up. read in delta windows and shove them into
@@ -3660,6 +3675,77 @@ deliver(const dav_resource *resource, ap_filter_t *output)
resource->pool);
}
+ /* Perform keywords substitution if requested by client */
+ if (resource->info->keyword_subst)
+ {
+ svn_string_t *keywords;
+
+ serr = svn_fs_node_prop(&keywords,
+ resource->info->root.root,
+ resource->info->repos_path,
+ SVN_PROP_KEYWORDS,
+ resource->pool);
+ if (serr != NULL)
+ return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
+ "could not get fetch '"
+ SVN_PROP_KEYWORDS "' property for "
+ "for keywords substitution",
+ resource->pool);
+
+ if (keywords)
+ {
+ apr_hash_t *kw;
+ svn_revnum_t cmt_rev;
+ const char *str_cmt_rev, *str_uri, *str_root;
+ const char *cmt_date, *cmt_author;
+ apr_time_t when = 0;
+
+ serr = svn_repos_get_committed_info(&cmt_rev,
+ &cmt_date,
+ &cmt_author,
+ resource->info->root.root,
+ resource->info->repos_path,
+ resource->pool);
+ if (serr != NULL)
+ return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
+ "could not fetch committed info "
+ "for keywords substitution",
+ resource->pool);
+
+ serr = svn_time_from_cstring(&when, cmt_date, resource->pool);
+ if (serr != NULL)
+ return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
+ "could not parse committed date "
+ "for keywords substitution",
+ resource->pool);
+ str_cmt_rev = apr_psprintf(resource->pool, "%ld", cmt_rev);
+ str_uri = apr_pstrcat(resource->pool,
+ resource->info->repos->base_url,
+ ap_escape_uri(resource->pool,
+ resource->info->r->uri),
+ NULL);
+ str_root = apr_pstrcat(resource->pool,
+ resource->info->repos->base_url,
+ resource->info->repos->root_path,
+ NULL);
+
+ serr = svn_subst_build_keywords3(&kw, keywords->data,
+ str_cmt_rev, str_uri, str_root,
+ when, cmt_author,
+ resource->pool);
+ if (serr != NULL)
+ return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
+ "could not perform keywords "
+ "substitution", resource->pool);
+
+ /* Replace the raw file STREAM with a wrapper that
+ handles keyword translation. */
+ stream = svn_subst_stream_translated(
+ svn_stream_disown(stream, resource->pool),
+ NULL, FALSE, kw, TRUE, resource->pool);
+ }
+ }
+
/* ### one day in the future, we can create a custom bucket type
### which will read from the FS stream on demand */
@@ -4073,7 +4159,9 @@ typedef struct walker_ctx_t {
static dav_error *
-do_walk(walker_ctx_t *ctx, int depth)
+do_walk(walker_ctx_t *ctx,
+ int depth,
+ apr_pool_t *scratch_pool)
{
const dav_walk_params *params = ctx->params;
int isdir = ctx->res.collection;
@@ -4146,19 +4234,19 @@ do_walk(walker_ctx_t *ctx, int depth)
svn_log__get_dir(ctx->info.repos_path,
ctx->info.root.rev,
TRUE, FALSE, SVN_DIRENT_ALL,
- params->pool));
+ scratch_pool));
/* fetch this collection's children */
serr = svn_fs_dir_entries(&children, ctx->info.root.root,
- ctx->info.repos_path, params->pool);
+ ctx->info.repos_path, scratch_pool);
if (serr != NULL)
return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
"could not fetch collection members",
params->pool);
/* iterate over the children in this collection */
- iterpool = svn_pool_create(params->pool);
- for (hi = apr_hash_first(params->pool, children); hi; hi = apr_hash_next(hi))
+ iterpool = svn_pool_create(scratch_pool);
+ for (hi = apr_hash_first(scratch_pool, children); hi; hi = apr_hash_next(hi))
{
const void *key;
apr_ssize_t klen;
@@ -4211,7 +4299,7 @@ do_walk(walker_ctx_t *ctx, int depth)
ctx->res.uri = ctx->uri->data;
/* recurse on this collection */
- err = do_walk(ctx, depth - 1);
+ err = do_walk(ctx, depth - 1, iterpool);
if (err != NULL)
return err;
@@ -4293,7 +4381,7 @@ walk(const dav_walk_params *params, int depth, dav_response **response)
/* ### is the root already/always open? need to verify */
/* always return the error, and any/all multistatus responses */
- err = do_walk(&ctx, depth);
+ err = do_walk(&ctx, depth, params->pool);
*response = ctx.wres.response;
return err;
@@ -4338,8 +4426,11 @@ dav_svn__create_working_resource(dav_resource *base,
res->baselined = base->baselined;
/* collection = FALSE. ### not necessarily correct */
- res->uri = apr_pstrcat(base->pool, base->info->repos->root_path,
- path, (char *)NULL);
+ if (base->info->repos->root_path[1])
+ res->uri = apr_pstrcat(base->pool, base->info->repos->root_path,
+ path, (char *)NULL);
+ else
+ res->uri = path;
res->hooks = &dav_svn__hooks_repository;
res->pool = base->pool;
@@ -4437,7 +4528,7 @@ handle_post_request(request_rec *r,
dav_resource *resource,
ap_filter_t *output)
{
- svn_skel_t *request_skel;
+ svn_skel_t *request_skel, *post_skel;
int status;
apr_pool_t *pool = resource->pool;
@@ -4454,18 +4545,51 @@ handle_post_request(request_rec *r,
return dav_svn__new_error(pool, HTTP_BAD_REQUEST, 0,
"Unable to identify skel POST request flavor.");
- if (svn_skel__matches_atom(request_skel->children, "create-txn"))
+ post_skel = request_skel->children;
+
+ /* NOTE: If you add POST handlers here, you'll want to advertise
+ that the server supports them, too. See version.c:get_option(). */
+
+ if (svn_skel__matches_atom(post_skel, "create-txn"))
{
return dav_svn__post_create_txn(resource, request_skel, output);
}
- else
+ else if (svn_skel__matches_atom(post_skel, "create-txn-with-props"))
{
- return dav_svn__new_error(pool, HTTP_BAD_REQUEST, 0,
- "Unsupported skel POST request flavor.");
+ return dav_svn__post_create_txn_with_props(resource,
+ request_skel, output);
}
- /* NOTREACHED */
+
+ return dav_svn__new_error(pool, HTTP_BAD_REQUEST, 0,
+ "Unsupported skel POST request flavor.");
}
+
+/* A stripped down version of mod_dav's dav_handle_err so that POST
+ errors, which are not passed via mod_dav, are handled in the same
+ way as errors for requests that are passed via mod_dav. */
+static int
+handle_err(request_rec *r, dav_error *err)
+{
+ dav_error *stackerr = err;
+
+ dav_svn__log_err(r, err, APLOG_ERR);
+
+ /* our error messages are safe; tell Apache this */
+ apr_table_setn(r->notes, "verbose-error-to", "*");
+
+ /* We might be able to generate a standard <D:error> response.
+ Search the error stack for an errortag. */
+ while (stackerr != NULL && stackerr->tagname == NULL)
+ stackerr = stackerr->prev;
+
+ if (stackerr != NULL && stackerr->tagname != NULL)
+ return dav_svn__error_response_tag(r, stackerr);
+
+ return err->status;
+}
+
+
int dav_svn__method_post(request_rec *r)
{
dav_resource *resource;
@@ -4498,9 +4622,8 @@ int dav_svn__method_post(request_rec *r)
if (derr)
{
/* POST is not a DAV method and so mod_dav isn't involved and
- won't log this error. Do it explicitly. */
- dav_svn__log_err(r, derr, APLOG_ERR);
- return dav_svn__error_response_tag(r, derr);
+ won't handle this error. Do it explicitly. */
+ return handle_err(r, derr);
}
return OK;
diff --git a/subversion/mod_dav_svn/util.c b/subversion/mod_dav_svn/util.c
index c37762f..2890502 100644
--- a/subversion/mod_dav_svn/util.c
+++ b/subversion/mod_dav_svn/util.c
@@ -45,6 +45,9 @@ dav_svn__new_error(apr_pool_t *pool,
int error_id,
const char *desc)
{
+ if (error_id == 0)
+ error_id = SVN_ERR_RA_DAV_REQUEST_FAILED;
+
/*
* Note: dav_new_error() in httpd 2.0/2.2 always treated
* the errno field in dav_error as an apr_status_t when
@@ -53,9 +56,11 @@ dav_svn__new_error(apr_pool_t *pool,
* > 2.2 below perpetuates this.
*/
#if AP_MODULE_MAGIC_AT_LEAST(20091119,0)
- /* old code assumed errno was valid; keep assuming */
- return dav_new_error(pool, status, error_id, errno, desc);
+ return dav_new_error(pool, status, error_id, 0, desc);
#else
+
+ errno = 0; /* For the same reason as in dav_svn__new_error_tag */
+
return dav_new_error(pool, status, error_id, desc);
#endif
}
@@ -68,6 +73,9 @@ dav_svn__new_error_tag(apr_pool_t *pool,
const char *namespace,
const char *tagname)
{
+ if (error_id == 0)
+ error_id = SVN_ERR_RA_DAV_REQUEST_FAILED;
+
#if AP_MODULE_MAGIC_AT_LEAST(20091119,0)
return dav_new_error_tag(pool, status, error_id, 0,
desc, namespace, tagname);
@@ -264,6 +272,11 @@ dav_svn__build_uri(const dav_svn_repos *repos,
href1, root_path, special_uri,
revision, path_uri, href2);
+ case DAV_SVN__BUILD_URI_REVROOT:
+ return apr_psprintf(pool, "%s%s/%s/rvr/%ld%s%s",
+ href1, root_path, special_uri,
+ revision, path_uri, href2);
+
case DAV_SVN__BUILD_URI_VCC:
return apr_psprintf(pool, "%s%s/%s/vcc/" DAV_SVN__DEFAULT_VCC_NAME "%s",
href1, root_path, special_uri, href2);
@@ -412,6 +425,32 @@ dav_svn__simple_parse_uri(dav_svn__uri_info *info,
"Unsupported URI form");
}
+svn_boolean_t
+dav_svn__is_parentpath_list(request_rec *r)
+{
+ const char *fs_parent_path = dav_svn__get_fs_parent_path(r);
+
+ if (fs_parent_path && dav_svn__get_list_parentpath_flag(r))
+ {
+ const char *root_path = dav_svn__get_root_dir(r);
+ char *uri = apr_pstrdup(r->pool, r->uri);
+ char *parentpath = apr_pstrdup(r->pool, root_path);
+ apr_size_t uri_len = strlen(uri);
+ apr_size_t parentpath_len = strlen(parentpath);
+
+ if (uri[uri_len-1] == '/')
+ uri[uri_len-1] = '\0';
+
+ if (parentpath[parentpath_len-1] == '/')
+ parentpath[parentpath_len-1] = '\0';
+
+ if (strcmp(parentpath, uri) == 0)
+ {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
/* ### move this into apr_xml */
int
@@ -520,11 +559,23 @@ dav_svn__sanitize_error(svn_error_t *serr,
svn_error_t *safe_err = serr;
if (new_msg != NULL)
{
+ /* Purge error tracing from the error chain. */
+ svn_error_t *purged_serr = svn_error_purge_tracing(serr);
+
/* Sanitization is necessary. Create a new, safe error and
log the original error. */
- safe_err = svn_error_create(serr->apr_err, NULL, new_msg);
- ap_log_rerror(APLOG_MARK, APLOG_ERR, APR_EGENERAL, r,
- "%s", serr->message);
+ safe_err = svn_error_create(purged_serr->apr_err, NULL, new_msg);
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, APR_EGENERAL, r,
+ "%s", purged_serr->message);
+
+ /* Log the entire error chain. */
+ while (purged_serr->child)
+ {
+ purged_serr = purged_serr->child;
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, APR_EGENERAL, r,
+ "%s", purged_serr->message);
+ }
+
svn_error_clear(serr);
}
return dav_svn__convert_err(safe_err, http_status,
@@ -596,7 +647,7 @@ dav_svn__final_flush_or_error(request_rec *r,
if (! do_flush)
{
/* Ask about the length of the bucket brigade, ignoring errors. */
- apr_off_t len;
+ apr_off_t len = 0;
(void)apr_brigade_length(bb, FALSE, &len);
do_flush = (len != 0);
}
@@ -731,7 +782,7 @@ request_body_to_string(svn_string_t **request_str,
}
else
{
- buf = svn_stringbuf_create("", pool);
+ buf = svn_stringbuf_create_empty(pool);
}
brigade = apr_brigade_create(r->pool, r->connection->bucket_alloc);
@@ -787,7 +838,7 @@ request_body_to_string(svn_string_t **request_str,
apr_brigade_destroy(brigade);
/* Make an svn_string_t from our svn_stringbuf_t. */
- *request_str = svn_string_create("", pool);
+ *request_str = svn_string_create_empty(pool);
(*request_str)->data = buf->data;
(*request_str)->len = buf->len;
return OK;
diff --git a/subversion/mod_dav_svn/version.c b/subversion/mod_dav_svn/version.c
index b532085..98208a9 100644
--- a/subversion/mod_dav_svn/version.c
+++ b/subversion/mod_dav_svn/version.c
@@ -28,6 +28,7 @@
#include <http_log.h>
#include <mod_dav.h>
+#include "svn_hash.h"
#include "svn_fs.h"
#include "svn_xml.h"
#include "svn_repos.h"
@@ -37,7 +38,9 @@
#include "svn_props.h"
#include "svn_dav.h"
#include "svn_base64.h"
+#include "svn_version.h"
#include "private/svn_repos_private.h"
+#include "private/svn_subr_private.h"
#include "private/svn_dav_protocol.h"
#include "private/svn_log.h"
#include "private/svn_fspath.h"
@@ -146,6 +149,9 @@ get_vsn_options(apr_pool_t *p, apr_text_header *phdr)
apr_text_append(p, phdr, SVN_DAV_NS_DAV_SVN_LOG_REVPROPS);
apr_text_append(p, phdr, SVN_DAV_NS_DAV_SVN_ATOMIC_REVPROPS);
apr_text_append(p, phdr, SVN_DAV_NS_DAV_SVN_PARTIAL_REPLAY);
+ apr_text_append(p, phdr, SVN_DAV_NS_DAV_SVN_INHERITED_PROPS);
+ apr_text_append(p, phdr, SVN_DAV_NS_DAV_SVN_INLINE_PROPS);
+ apr_text_append(p, phdr, SVN_DAV_NS_DAV_SVN_REVERSE_FILE_REVS);
/* Mergeinfo is a special case: here we merely say that the server
* knows how to handle mergeinfo -- whether the repository does too
* is a separate matter.
@@ -192,6 +198,14 @@ get_option(const dav_resource *resource,
}
}
+ /* If we're allowed (by configuration) to do so, advertise support
+ for ephemeral transaction properties. */
+ if (dav_svn__check_ephemeral_txnprops_support(r))
+ {
+ apr_table_addn(r->headers_out, "DAV",
+ SVN_DAV_NS_DAV_SVN_EPHEMERAL_TXNPROPS);
+ }
+
if (resource->info->repos->fs)
{
svn_error_t *serr;
@@ -230,10 +244,56 @@ get_option(const dav_resource *resource,
}
}
+ if (resource->info->repos->repos)
+ {
+ svn_error_t *serr;
+ svn_boolean_t has;
+
+ serr = svn_repos_has_capability(resource->info->repos->repos, &has,
+ SVN_REPOS_CAPABILITY_MERGEINFO,
+ r->pool);
+ if (serr)
+ return dav_svn__convert_err
+ (serr, HTTP_INTERNAL_SERVER_ERROR,
+ "Error fetching repository capabilities",
+ resource->pool);
+
+ apr_table_set(r->headers_out, SVN_DAV_REPOSITORY_MERGEINFO,
+ has ? "yes" : "no");
+ }
+
/* Welcome to the 2nd generation of the svn HTTP protocol, now
DeltaV-free! If we're configured to advise this support, do so. */
if (resource->info->repos->v2_protocol)
{
+ int i;
+ svn_version_t *master_version = dav_svn__get_master_version(r);
+ dav_svn__bulk_upd_conf bulk_upd_conf = dav_svn__get_bulk_updates_flag(r);
+
+ /* The list of Subversion's custom POSTs and which versions of
+ Subversion support them. We need this latter information
+ when acting as a WebDAV slave -- we don't want to claim
+ support for a POST type if the master server which will
+ actually have to handle it won't recognize it.
+
+ Keep this in sync with what's handled in handle_post_request().
+ */
+ struct posts_versions_t {
+ const char *post_name;
+ svn_version_t min_version;
+ } posts_versions[] = {
+ { "create-txn", { 1, 7, 0, "" } },
+ { "create-txn-with-props", { 1, 8, 0, "" } },
+ };
+
+ /* Add the header which indicates that this server can handle
+ replay REPORTs submitted against an HTTP v2 revision resource. */
+ apr_table_addn(r->headers_out, "DAV",
+ SVN_DAV_NS_DAV_SVN_REPLAY_REV_RESOURCE);
+
+ /* Add a bunch of HTTP v2 headers which carry resource and
+ resource stub URLs that the client can use to naively build
+ addressable resources. */
apr_table_set(r->headers_out, SVN_DAV_ROOT_URI_HEADER, repos_root_uri);
apr_table_set(r->headers_out, SVN_DAV_ME_RESOURCE_HEADER,
apr_pstrcat(resource->pool, repos_root_uri, "/",
@@ -256,6 +316,26 @@ get_option(const dav_resource *resource,
apr_table_set(r->headers_out, SVN_DAV_VTXN_STUB_HEADER,
apr_pstrcat(resource->pool, repos_root_uri, "/",
dav_svn__get_vtxn_stub(r), (char *)NULL));
+ apr_table_set(r->headers_out, SVN_DAV_ALLOW_BULK_UPDATES,
+ bulk_upd_conf == CONF_BULKUPD_ON ? "On" :
+ bulk_upd_conf == CONF_BULKUPD_OFF ? "Off" : "Prefer");
+
+ /* Report the supported POST types. */
+ for (i = 0; i < sizeof(posts_versions)/sizeof(posts_versions[0]); ++i)
+ {
+ /* If we're proxying to a master server and its version
+ number is declared, we can selectively filter out POST
+ types that it doesn't support. */
+ if (master_version
+ && (! svn_version__at_least(master_version,
+ posts_versions[i].min_version.major,
+ posts_versions[i].min_version.minor,
+ posts_versions[i].min_version.patch)))
+ continue;
+
+ apr_table_addn(r->headers_out, SVN_DAV_SUPPORTED_POSTS_HEADER,
+ apr_pstrdup(resource->pool, posts_versions[i].post_name));
+ }
}
return NULL;
@@ -398,7 +478,7 @@ dav_svn__checkout(dav_resource *resource,
shared_activity = apr_pstrdup(resource->info->r->pool, uuid_buf);
derr = dav_svn__create_txn(resource->info->repos, &shared_txn_name,
- resource->info->r->pool);
+ NULL, resource->info->r->pool);
if (derr) return derr;
derr = dav_svn__store_activity(resource->info->repos,
@@ -953,8 +1033,11 @@ dav_svn__checkin(dav_resource *resource,
if (serr)
{
+ int status;
+
if (serr->apr_err == SVN_ERR_FS_CONFLICT)
{
+ status = HTTP_CONFLICT;
msg = apr_psprintf(resource->pool,
"A conflict occurred during the CHECKIN "
"processing. The problem occurred with "
@@ -962,10 +1045,12 @@ dav_svn__checkin(dav_resource *resource,
conflict_msg);
}
else
- msg = "An error occurred while committing the transaction.";
+ {
+ status = HTTP_INTERNAL_SERVER_ERROR;
+ msg = "An error occurred while committing the transaction.";
+ }
- return dav_svn__convert_err(serr, HTTP_CONFLICT, msg,
- resource->pool);
+ return dav_svn__convert_err(serr, status, msg, resource->pool);
}
else
{
@@ -1093,6 +1178,10 @@ deliver_report(request_rec *r,
{
return dav_svn__get_deleted_rev_report(resource, doc, output);
}
+ else if (strcmp(doc->root->name, SVN_DAV__INHERITED_PROPS_REPORT) == 0)
+ {
+ return dav_svn__get_inherited_props_report(resource, doc, output);
+ }
/* NOTE: if you add a report, don't forget to add it to the
* dav_svn__reports_list[] array.
*/
@@ -1138,7 +1227,8 @@ make_activity(dav_resource *resource)
SVN_DAV_ERROR_NAMESPACE,
SVN_DAV_ERROR_TAG);
- err = dav_svn__create_txn(resource->info->repos, &txn_name, resource->pool);
+ err = dav_svn__create_txn(resource->info->repos, &txn_name,
+ NULL, resource->pool);
if (err != NULL)
return err;
@@ -1180,7 +1270,7 @@ dav_svn__build_lock_hash(apr_hash_t **locks,
if (! doc)
{
*locks = hash;
- return SVN_NO_ERROR;
+ return NULL;
}
/* Sanity check. */
@@ -1191,7 +1281,7 @@ dav_svn__build_lock_hash(apr_hash_t **locks,
definitely no lock-tokens to harvest. This is likely a
request from an old client. */
*locks = hash;
- return SVN_NO_ERROR;
+ return NULL;
}
if ((doc->root->ns == ns)
@@ -1217,7 +1307,7 @@ dav_svn__build_lock_hash(apr_hash_t **locks,
if (! child)
{
*locks = hash;
- return SVN_NO_ERROR;
+ return NULL;
}
/* Then look for N different <lock> structures within. */
@@ -1243,7 +1333,7 @@ dav_svn__build_lock_hash(apr_hash_t **locks,
lockpath = svn_fspath__join(path_prefix, cdata, pool);
if (lockpath && locktoken)
{
- apr_hash_set(hash, lockpath, APR_HASH_KEY_STRING, locktoken);
+ svn_hash_sets(hash, lockpath, locktoken);
lockpath = NULL;
locktoken = NULL;
}
@@ -1253,7 +1343,7 @@ dav_svn__build_lock_hash(apr_hash_t **locks,
locktoken = dav_xml_get_cdata(lfchild, pool, 1);
if (lockpath && *locktoken)
{
- apr_hash_set(hash, lockpath, APR_HASH_KEY_STRING, locktoken);
+ svn_hash_sets(hash, lockpath, locktoken);
lockpath = NULL;
locktoken = NULL;
}
@@ -1262,7 +1352,7 @@ dav_svn__build_lock_hash(apr_hash_t **locks,
}
*locks = hash;
- return SVN_NO_ERROR;
+ return NULL;
}
@@ -1455,8 +1545,11 @@ merge(dav_resource *target,
if (serr)
{
const char *msg;
+ int status;
+
if (serr->apr_err == SVN_ERR_FS_CONFLICT)
{
+ status = HTTP_CONFLICT;
/* ### we need to convert the conflict path into a URI */
msg = apr_psprintf(pool,
"A conflict occurred during the MERGE "
@@ -1465,9 +1558,12 @@ merge(dav_resource *target,
conflict);
}
else
- msg = "An error occurred while committing the transaction.";
+ {
+ status = HTTP_INTERNAL_SERVER_ERROR;
+ msg = "An error occurred while committing the transaction.";
+ }
- return dav_svn__convert_err(serr, HTTP_CONFLICT, msg, pool);
+ return dav_svn__convert_err(serr, status, msg, pool);
}
else
{
diff --git a/subversion/po/de.po b/subversion/po/de.po
index 78ff52a..297b8d7 100644
--- a/subversion/po/de.po
+++ b/subversion/po/de.po
@@ -28,6 +28,8 @@
# authorization Berechtigung
# bleeding-edge brandheiß/allerneueste[r|s]
# bogus ungültig
+# branch Zweig
+# changelist Änderungsliste
# checkout auschecken (denglisch, ich weiß, aber akzeptabel)
# client Client, des Client
# commit übertragen
@@ -50,10 +52,11 @@
# merge tool Konflikteditor??? Aktuell: Werkzeug zum Zusammenführen!?
# note Hinweis
# obstruct(ed) behindern / behindert
+# peg revision Fix-Revision
# property Eigenschaft
# PROPNAME PROPNAME
# PROPVAL PROPWERT
-# reintegrate wiedereingliedern
+# reintegrate reintegrieren
# relocate umplatzieren
# REPOS PA
# REPOS_PATH ARCHIV_PFAD
@@ -91,12 +94,12 @@
# Indikativ: "Gibt keine interaktiven Rückfragen aus"
msgid ""
msgstr ""
-"Project-Id-Version: subversion 1.7\n"
+"Project-Id-Version: subversion 1.8\n"
"Report-Msgid-Bugs-To: dev@subversion.apache.org\n"
-"POT-Creation-Date: 2010-11-12 08:49-0600\n"
-"PO-Revision-Date: 2009-03-18 09:53+0100\n"
-"Last-Translator: Subversion Developers <dev@subversion.tigris.org>\n"
-"Language-Team: German <dev@subversion.tigris.org>\n"
+"POT-Creation-Date: 2014-11-08 21:44+0000\n"
+"PO-Revision-Date: 2013-07-11 20:22+0100\n"
+"Last-Translator: Subversion Developers <dev@subversion.apache.org>\n"
+"Language-Team: German <dev@subversion.apache.org>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -106,1785 +109,1888 @@ msgstr ""
#. Constructing nice error messages for roots.
#. Build an SVN_ERR_FS_NOT_FOUND error, with a detailed error text,
#. for PATH in ROOT. ROOT is of type svn_fs_root_t *.
-#: ../include/private/svn_fs_util.h:68
+#: ../include/private/svn_fs_util.h:81
#, c-format
msgid "File not found: transaction '%s', path '%s'"
msgstr "Datei nicht gefunden: Transaktion »%s«, Pfad »%s«"
-#: ../include/private/svn_fs_util.h:73
+#: ../include/private/svn_fs_util.h:86
#, c-format
msgid "File not found: revision %ld, path '%s'"
msgstr "Datei nicht gefunden: Revision %ld, Pfad »%s«"
#. Build a detailed `file already exists' message for PATH in ROOT.
#. ROOT is of type svn_fs_root_t *.
-#: ../include/private/svn_fs_util.h:84
+#: ../include/private/svn_fs_util.h:97
#, c-format
msgid "File already exists: filesystem '%s', transaction '%s', path '%s'"
msgstr "Datei existiert bereits: Dateisystem »%s«, Transaktion »%s«, Pfad »%s«"
-#: ../include/private/svn_fs_util.h:89
+#: ../include/private/svn_fs_util.h:102
#, c-format
msgid "File already exists: filesystem '%s', revision %ld, path '%s'"
msgstr "Datei existiert bereits: Dateisystem »%s«, Revision %ld, Pfad »%s«"
#. ROOT is of type svn_fs_root_t *.
-#: ../include/private/svn_fs_util.h:97
+#: ../include/private/svn_fs_util.h:110
msgid "Root object must be a transaction root"
msgstr "Basisobjekt muss eine Transaktionsbasis sein"
#. SVN_FS__ERR_NOT_MUTABLE: the caller attempted to change a node
#. outside of a transaction. FS is of type "svn_fs_t *".
-#: ../include/private/svn_fs_util.h:104
+#: ../include/private/svn_fs_util.h:117
#, c-format
msgid "File is not mutable: filesystem '%s', revision %ld, path '%s'"
msgstr "Datei ist nicht veränderlich: Dateisystem »%s«, Revision %ld, Pfad »%s«"
-#. FS is of type "svn fs_t *".
-#: ../include/private/svn_fs_util.h:111
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:124
#, c-format
msgid "'%s' is not a directory in filesystem '%s'"
msgstr "»%s« ist kein Verzeichnis im Dateisystem »%s«"
-#. FS is of type "svn fs_t *".
-#: ../include/private/svn_fs_util.h:118
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:131
#, c-format
msgid "'%s' is not a file in filesystem '%s'"
msgstr "»%s« ist im Dateisystem »%s« keine Datei"
-#. FS is of type "svn fs_t *", LOCK is of type "svn_lock_t *".
-#: ../include/private/svn_fs_util.h:126
+#. FS is of type "svn_fs_t *", LOCK is of type "svn_lock_t *".
+#: ../include/private/svn_fs_util.h:139
#, c-format
msgid "Path '%s' is already locked by user '%s' in filesystem '%s'"
msgstr "Pfad »%s« ist bereits vom Benutzer »%s« im Dateisystem »%s« gesperrt"
-#. FS is of type "svn fs_t *".
-#: ../include/private/svn_fs_util.h:133
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:146
#, c-format
msgid "No lock on path '%s' in filesystem '%s'"
msgstr "Keine Sperre für Pfad »%s« im Dateisystem »%s«"
-#. FS is of type "svn fs_t *".
-#: ../include/private/svn_fs_util.h:140
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:153
#, c-format
msgid "Lock has expired: lock-token '%s' in filesystem '%s'"
msgstr "Sperre lief aus: Sperrmarke »%s« in Dateisystem »%s«"
-#. FS is of type "svn fs_t *".
-#: ../include/private/svn_fs_util.h:147
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:160
#, c-format
msgid "No username is currently associated with filesystem '%s'"
msgstr "Zurzeit ist kein Benutzername mit dem Dateisystem »%s« verbunden"
#. SVN_FS__ERR_LOCK_OWNER_MISMATCH: trying to use a lock whose
#. LOCK_OWNER doesn't match the USERNAME associated with FS.
-#. FS is of type "svn fs_t *".
-#: ../include/private/svn_fs_util.h:156
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:169
#, c-format
msgid "User '%s' is trying to use a lock owned by '%s' in filesystem '%s'"
msgstr "Der Benutzer »%s« versucht, eine von »%s« besessene Sperre im Dateisystem »%s« zu benutzen"
-#: ../include/svn_error_codes.h:160
+#: ../include/svn_error_codes.h:164
msgid "Bad parent pool passed to svn_make_pool()"
msgstr "Falscher Elternpool an svn_make_pool() übergeben"
-#: ../include/svn_error_codes.h:164
+#: ../include/svn_error_codes.h:168
msgid "Bogus filename"
msgstr "Ungültiger Dateiname"
-#: ../include/svn_error_codes.h:168
+#: ../include/svn_error_codes.h:172
msgid "Bogus URL"
msgstr "Ungültige URL"
-#: ../include/svn_error_codes.h:172
+#: ../include/svn_error_codes.h:176
msgid "Bogus date"
msgstr "Ungültiges Datum"
-#: ../include/svn_error_codes.h:176
+#: ../include/svn_error_codes.h:180
msgid "Bogus mime-type"
msgstr "Ungültiger Mime-Typ"
-#: ../include/svn_error_codes.h:186
+#: ../include/svn_error_codes.h:190
msgid "Wrong or unexpected property value"
msgstr "Falscher oder unerwarteter Eigenschaftswert"
-#: ../include/svn_error_codes.h:190
+#: ../include/svn_error_codes.h:194
msgid "Version file format not correct"
msgstr "Format der Versionsdatei nicht korrekt"
-#: ../include/svn_error_codes.h:194
+#: ../include/svn_error_codes.h:198
msgid "Path is not an immediate child of the specified directory"
msgstr "Pfad ist kein direktes Kind des spezifizierten Verzeichnisses"
-#: ../include/svn_error_codes.h:198
+#: ../include/svn_error_codes.h:202
msgid "Bogus UUID"
msgstr "Ungültige UUID"
-#: ../include/svn_error_codes.h:203 ../include/svn_error_codes.h:887
+#: ../include/svn_error_codes.h:207 ../include/svn_error_codes.h:944
msgid "Invalid configuration value"
msgstr "Ungültiger Konfigurationswert"
-#: ../include/svn_error_codes.h:207
+#: ../include/svn_error_codes.h:211
msgid "Bogus server specification"
msgstr "Falsche Serverangabe"
-#: ../include/svn_error_codes.h:211
+#: ../include/svn_error_codes.h:215
msgid "Unsupported checksum type"
msgstr "Nicht unterstützter Prüfsummentyp"
-#: ../include/svn_error_codes.h:215
+#: ../include/svn_error_codes.h:219
msgid "Invalid character in hex checksum"
msgstr "Ungültiges Zeichen in der Hex-Prüfsumme gefunden"
-#: ../include/svn_error_codes.h:220
+#: ../include/svn_error_codes.h:224
msgid "Unknown string value of token"
msgstr "Unbekannter Zeichenkettenwert für Sperrmarke"
-#: ../include/svn_error_codes.h:226
+#: ../include/svn_error_codes.h:229
+msgid "Invalid changelist name"
+msgstr "Ungültiger Name für Änderungsliste"
+
+#: ../include/svn_error_codes.h:234
+msgid "Invalid atomic"
+msgstr "Ungültiges »atomic«"
+
+#: ../include/svn_error_codes.h:240
msgid "No such XML tag attribute"
msgstr "Ein solches Attribut des XML-Tags existiert nicht"
-#: ../include/svn_error_codes.h:230
+#: ../include/svn_error_codes.h:244
msgid "<delta-pkg> is missing ancestry"
msgstr "<delta-pkg> fehlt die Herkunft"
-#: ../include/svn_error_codes.h:234
+#: ../include/svn_error_codes.h:248
msgid "Unrecognized binary data encoding; can't decode"
msgstr "Unbekannte binäre Datenkodierung, kann nicht entschlüsseln"
-#: ../include/svn_error_codes.h:238
+#: ../include/svn_error_codes.h:252
msgid "XML data was not well-formed"
msgstr "XML Daten nicht wohlgeformt"
-#: ../include/svn_error_codes.h:242
+#: ../include/svn_error_codes.h:256
msgid "Data cannot be safely XML-escaped"
msgstr "Daten können nicht sicher in XML eingebettet werden"
-#: ../include/svn_error_codes.h:248
+#: ../include/svn_error_codes.h:262
msgid "Inconsistent line ending style"
msgstr "Stil für Zeilenende ist inkonsistent"
-#: ../include/svn_error_codes.h:252
+#: ../include/svn_error_codes.h:266
msgid "Unrecognized line ending style"
msgstr "Stil für Zeilenende nicht erkannt"
-#: ../include/svn_error_codes.h:257
+#: ../include/svn_error_codes.h:271
msgid "Line endings other than expected"
msgstr "Zeilenende anders als erwartet"
-#: ../include/svn_error_codes.h:261
+#: ../include/svn_error_codes.h:275
msgid "Ran out of unique names"
msgstr "Eindeutige Namen ausgegangen"
-#: ../include/svn_error_codes.h:266
+#: ../include/svn_error_codes.h:280
msgid "Framing error in pipe protocol"
msgstr "Rahmenfehler im »Pipe«-Protokoll"
-#: ../include/svn_error_codes.h:271
+#: ../include/svn_error_codes.h:285
msgid "Read error in pipe"
msgstr "Lesefehler in »Pipe«"
-#: ../include/svn_error_codes.h:275 ../libsvn_subr/cmdline.c:341
-#: ../libsvn_subr/cmdline.c:358 ../svn/util.c:923 ../svnlook/main.c:1802
+#: ../include/svn_error_codes.h:289 ../libsvn_subr/cmdline.c:362
+#: ../libsvn_subr/cmdline.c:385 ../svn/util.c:569 ../svnlook/svnlook.c:2009
#, c-format
msgid "Write error"
msgstr "Schreibfehler"
-#: ../include/svn_error_codes.h:281
+#: ../include/svn_error_codes.h:294
+msgid "Write error in pipe"
+msgstr "Schreibfehler in »Pipe«"
+
+#: ../include/svn_error_codes.h:300
msgid "Unexpected EOF on stream"
msgstr "Unerwartetes EOF im Datenstrom"
-#: ../include/svn_error_codes.h:285
+#: ../include/svn_error_codes.h:304
msgid "Malformed stream data"
msgstr "Fehlerhafter Datenstrom"
-#: ../include/svn_error_codes.h:289
+#: ../include/svn_error_codes.h:308
msgid "Unrecognized stream data"
msgstr "Unbekannter Datenstrom"
-#: ../include/svn_error_codes.h:294
+#: ../include/svn_error_codes.h:313
msgid "Stream doesn't support seeking"
msgstr "Datenstrom unterstützt das Setzen der Position nicht"
-#: ../include/svn_error_codes.h:300
+#: ../include/svn_error_codes.h:319
msgid "Unknown svn_node_kind"
msgstr "Unbekannter svn_node_kind"
-#: ../include/svn_error_codes.h:304
+#: ../include/svn_error_codes.h:323
msgid "Unexpected node kind found"
msgstr "Unerwarteter Knotentyp gefunden"
-#: ../include/svn_error_codes.h:310
+#: ../include/svn_error_codes.h:329
msgid "Can't find an entry"
msgstr "Kann keinen Eintrag finden"
-#: ../include/svn_error_codes.h:316
+#: ../include/svn_error_codes.h:335
msgid "Entry already exists"
msgstr "Eintrag existiert bereits"
-#: ../include/svn_error_codes.h:320
+#: ../include/svn_error_codes.h:339
msgid "Entry has no revision"
msgstr "Eintrag hat keine Revision"
-#: ../include/svn_error_codes.h:324
+#: ../include/svn_error_codes.h:343
msgid "Entry has no URL"
msgstr "Eintrag hat keine URL"
-#: ../include/svn_error_codes.h:328
+#: ../include/svn_error_codes.h:347
msgid "Entry has an invalid attribute"
msgstr "Eintrag hat ein ungültiges Attribut"
-#: ../include/svn_error_codes.h:332
+#: ../include/svn_error_codes.h:351
msgid "Can't create an entry for a forbidden name"
msgstr "Kann keinen Eintrag für einen verbotenen Namen erzeugen"
-#: ../include/svn_error_codes.h:338
+#: ../include/svn_error_codes.h:357
msgid "Obstructed update"
msgstr "Aktualisierung behindert"
-#: ../include/svn_error_codes.h:343
+#: ../include/svn_error_codes.h:362
msgid "Mismatch popping the WC unwind stack"
msgstr "Fehler beim Abrufen des Abwicklungsstapels der Arbeitskopie"
-#: ../include/svn_error_codes.h:348
+#: ../include/svn_error_codes.h:367
msgid "Attempt to pop empty WC unwind stack"
msgstr "Versuch, leeren Abwicklungsstapel abzurufen"
-#: ../include/svn_error_codes.h:353
+#: ../include/svn_error_codes.h:372
msgid "Attempt to unlock with non-empty unwind stack"
msgstr "Versuch, mit nicht leerem Abwicklungsstapel zu entsperren"
-#: ../include/svn_error_codes.h:357
+#: ../include/svn_error_codes.h:376
msgid "Attempted to lock an already-locked dir"
msgstr "Versuch, ein bereits gesperrtes Verzeichnis erneut zu sperren"
-#: ../include/svn_error_codes.h:361
+#: ../include/svn_error_codes.h:380
msgid "Working copy not locked; this is probably a bug, please report"
msgstr "Arbeitskopie nicht gesperrt. Dies ist wahrscheinlich ein Fehler. Bitte melden."
-#: ../include/svn_error_codes.h:366
+#: ../include/svn_error_codes.h:385
msgid "Invalid lock"
msgstr "Ungültige Sperre"
-#: ../include/svn_error_codes.h:373
+#: ../include/svn_error_codes.h:391 ../include/svn_error_codes.h:397
msgid "Path is not a working copy directory"
msgstr "Pfad ist kein Verzeichnis in einer Arbeitskopie"
-#: ../include/svn_error_codes.h:381
+#: ../include/svn_error_codes.h:401
msgid "Path is not a working copy file"
msgstr "Pfad ist keine Datei in einer Arbeitskopie"
-#: ../include/svn_error_codes.h:385
+#: ../include/svn_error_codes.h:405
msgid "Problem running log"
msgstr "Problem während der Ausführung des Logs"
-#: ../include/svn_error_codes.h:389
+#: ../include/svn_error_codes.h:409
msgid "Can't find a working copy path"
-msgstr "Kann keinen Pfad einer Arbeitskopie finden"
+msgstr "Kann keinen Arbeitskopiepfad finden"
-#: ../include/svn_error_codes.h:393
+#: ../include/svn_error_codes.h:413
msgid "Working copy is not up-to-date"
msgstr "Arbeitskopie ist nicht aktuell"
-#: ../include/svn_error_codes.h:397
+#: ../include/svn_error_codes.h:417
msgid "Left locally modified or unversioned files"
msgstr "Lokal veränderte oder nicht versionierte Dateien zurück gelassen"
-#: ../include/svn_error_codes.h:401
+#: ../include/svn_error_codes.h:421
msgid "Unmergeable scheduling requested on an entry"
msgstr "Nicht zusammenführbare Planungsanforderung für einen Eintrag"
-#: ../include/svn_error_codes.h:405
+#: ../include/svn_error_codes.h:425
msgid "Found a working copy path"
-msgstr "Pfad einer Arbeitskopie gefunden"
+msgstr "Arbeitskopiepfad gefunden"
-#: ../include/svn_error_codes.h:409
+#: ../include/svn_error_codes.h:429
msgid "A conflict in the working copy obstructs the current operation"
msgstr "Ein Konflikt in der Arbeitskopie behindert die aktuelle Operation"
-#: ../include/svn_error_codes.h:413
+#: ../include/svn_error_codes.h:433
msgid "Working copy is corrupt"
msgstr "Arbeitskopie ist beschädigt"
-#: ../include/svn_error_codes.h:417
+#: ../include/svn_error_codes.h:437
msgid "Working copy text base is corrupt"
msgstr "Textbasis der Arbeitskopie ist beschädigt"
-#: ../include/svn_error_codes.h:421
+#: ../include/svn_error_codes.h:441
msgid "Cannot change node kind"
msgstr "Kann Knotentyp nicht ändern"
-#: ../include/svn_error_codes.h:425
+#: ../include/svn_error_codes.h:445
msgid "Invalid operation on the current working directory"
msgstr "Ungültige Operation auf dem aktuellen Arbeitsverzeichnis"
-#: ../include/svn_error_codes.h:429
+#: ../include/svn_error_codes.h:449
msgid "Problem on first log entry in a working copy"
msgstr "Problem mit dem ersten Log-Eintrag in einer Arbeitskopie"
-#: ../include/svn_error_codes.h:433
+#: ../include/svn_error_codes.h:453
msgid "Unsupported working copy format"
msgstr "Nicht unterstütztes Format der Arbeitskopie"
-#: ../include/svn_error_codes.h:437
+#: ../include/svn_error_codes.h:457
msgid "Path syntax not supported in this context"
msgstr "Pfadsyntax wird in diesem Zusammenhang nicht unterstützt"
-#: ../include/svn_error_codes.h:442
+#: ../include/svn_error_codes.h:462
msgid "Invalid schedule"
msgstr "Ungültiger Plan"
-#: ../include/svn_error_codes.h:447
+#: ../include/svn_error_codes.h:467
msgid "Invalid relocation"
msgstr "Ungültiges Umplatzieren"
-#: ../include/svn_error_codes.h:452
+#: ../include/svn_error_codes.h:472
msgid "Invalid switch"
msgstr "Ungültiges Wechseln"
-#: ../include/svn_error_codes.h:457
+#: ../include/svn_error_codes.h:477
msgid "Changelist doesn't match"
msgstr "Änderungsliste passt nicht"
-#: ../include/svn_error_codes.h:462
+#: ../include/svn_error_codes.h:482
msgid "Conflict resolution failed"
msgstr "Konfliktauflösung schlug fehl"
-#: ../include/svn_error_codes.h:466
+#: ../include/svn_error_codes.h:486
msgid "Failed to locate 'copyfrom' path in working copy"
msgstr "Pfad von »copyfrom« konnte in der Arbeitskopie nicht gefunden werden"
-#: ../include/svn_error_codes.h:473
+#: ../include/svn_error_codes.h:494
msgid "Moving a path from one changelist to another"
msgstr "Verschieben eines Pfades von einer Änderungsliste in eine andere"
-#: ../include/svn_error_codes.h:478
+#: ../include/svn_error_codes.h:499
msgid "Cannot delete a file external"
msgstr "Kann externen Dateiverweis nicht löschen"
-#: ../include/svn_error_codes.h:483
+#: ../include/svn_error_codes.h:504
msgid "Cannot move a file external"
msgstr "Kann externen Dateiverweis nicht verschieben"
-#: ../include/svn_error_codes.h:488
+#: ../include/svn_error_codes.h:509
msgid "Something's amiss with the wc sqlite database"
msgstr "Irgendetwas ist mit der sqlite-Datenbank der Arbeitskopie falsch"
-#: ../include/svn_error_codes.h:493
+#: ../include/svn_error_codes.h:514
msgid "The working copy is missing"
msgstr "Die Arbeitskopie fehlt"
-#: ../include/svn_error_codes.h:498
+#: ../include/svn_error_codes.h:519
msgid "The specified node is not a symlink"
msgstr "Der spezifizierte Knoten ist kein symbolischer Link"
-#: ../include/svn_error_codes.h:503
+#: ../include/svn_error_codes.h:524
msgid "The specified path has an unexpected status"
msgstr "Der angegebene Pfad hat einen unerwarteten Status"
-#: ../include/svn_error_codes.h:508
+#: ../include/svn_error_codes.h:529
msgid "The working copy needs to be upgraded"
msgstr "Die Arbeitskopie muss in ein neueres Format gebracht werden"
-#: ../include/svn_error_codes.h:513
-msgid "Previous operation was interrupted; run 'svn cleanup'"
-msgstr "Die vorhergehende Operation wurde unterbrochen; Starten Sie »svn cleanup«"
+#: ../include/svn_error_codes.h:534
+msgid "Previous operation has not finished; run 'cleanup' if it was interrupted"
+msgstr "Die vorhergehende Operation wurde nicht abgeschlossen; Starten Sie »svn cleanup« falls sie unterbrochen wurde"
-#: ../include/svn_error_codes.h:518
-msgid "This operation can not be performed with just this depth."
-msgstr ""
+#: ../include/svn_error_codes.h:540
+msgid "The operation cannot be performed with the specified depth"
+msgstr "Diese Operation kann nicht mit der angegebenen Tiefe durch geführt werden."
-#: ../include/svn_error_codes.h:524
+#: ../include/svn_error_codes.h:545
+msgid "Couldn't open a working copy file because access was denied"
+msgstr "Konnte eine Datei der Arbeitskopie nicht öffnen, da der Zugriff verweigert wurde"
+
+#: ../include/svn_error_codes.h:550
+msgid "Mixed-revision working copy was found but not expected"
+msgstr "Arbeitskopie mit verschiedenen Revisionen gefunden aber nicht erwartet"
+
+#: ../include/svn_error_codes.h:555
+msgid "Duplicate targets in svn:externals property"
+msgstr "Doppelte Zielangaben in svn:externals Eigenschaft"
+
+#: ../include/svn_error_codes.h:561
msgid "General filesystem error"
msgstr "Allgemeiner Dateisystemfehler"
-#: ../include/svn_error_codes.h:528
+#: ../include/svn_error_codes.h:565
msgid "Error closing filesystem"
msgstr "Fehler beim Schließen des Dateisystems"
-#: ../include/svn_error_codes.h:532
+#: ../include/svn_error_codes.h:569
msgid "Filesystem is already open"
msgstr "Dateisystem ist bereits geöffnet"
-#: ../include/svn_error_codes.h:536
+#: ../include/svn_error_codes.h:573
msgid "Filesystem is not open"
msgstr "Dateisystem ist nicht geöffnet"
-#: ../include/svn_error_codes.h:540
+#: ../include/svn_error_codes.h:577
msgid "Filesystem is corrupt"
msgstr "Dateisystem ist beschädigt"
-#: ../include/svn_error_codes.h:544
+#: ../include/svn_error_codes.h:581
msgid "Invalid filesystem path syntax"
msgstr "Ungültige Pfadsyntax des Dateisystems"
-#: ../include/svn_error_codes.h:548
+#: ../include/svn_error_codes.h:585
msgid "Invalid filesystem revision number"
msgstr "Ungültige Revisionsnummer des Dateisystems"
-#: ../include/svn_error_codes.h:552
+#: ../include/svn_error_codes.h:589
msgid "Invalid filesystem transaction name"
msgstr "Ungültiger Transaktionsname des Dateisystems"
-#: ../include/svn_error_codes.h:556
+#: ../include/svn_error_codes.h:593
msgid "Filesystem directory has no such entry"
msgstr "Verzeichnis des Dateisystems hat keinen solchen Eintrag"
-#: ../include/svn_error_codes.h:560
+#: ../include/svn_error_codes.h:597
msgid "Filesystem has no such representation"
msgstr "Dateisystem hat keine solche Darstellung"
-#: ../include/svn_error_codes.h:564
+#: ../include/svn_error_codes.h:601
msgid "Filesystem has no such string"
msgstr "Dateisystem hat keinen solchen String"
-#: ../include/svn_error_codes.h:568
+#: ../include/svn_error_codes.h:605
msgid "Filesystem has no such copy"
msgstr "Dateisystem hat keine solche Kopie"
-#: ../include/svn_error_codes.h:572
+#: ../include/svn_error_codes.h:609
msgid "The specified transaction is not mutable"
msgstr "Die spezifizierte Transaktion ist nicht veränderlich"
-#: ../include/svn_error_codes.h:576
+#: ../include/svn_error_codes.h:613
msgid "Filesystem has no item"
msgstr "Dateisystem hat keinen Eintrag"
-#: ../include/svn_error_codes.h:580
+#: ../include/svn_error_codes.h:617
msgid "Filesystem has no such node-rev-id"
msgstr "Dateisystem hat keine solche Knotenrevisions-Id"
-#: ../include/svn_error_codes.h:584
+#: ../include/svn_error_codes.h:621
msgid "String does not represent a node or node-rev-id"
msgstr "Zeichenkette stellt keinen Knoten oder keine Knotenrevisions-Id dar"
-#: ../include/svn_error_codes.h:588
+#: ../include/svn_error_codes.h:625
msgid "Name does not refer to a filesystem directory"
msgstr "Name bezeichnet kein Verzeichnis des Dateisystems"
-#: ../include/svn_error_codes.h:592
+#: ../include/svn_error_codes.h:629
msgid "Name does not refer to a filesystem file"
msgstr "Name bezeichnet keine Datei des Dateisystems"
-#: ../include/svn_error_codes.h:596
+#: ../include/svn_error_codes.h:633
msgid "Name is not a single path component"
msgstr "Name ist keine einzelne Pfadkomponente"
-#: ../include/svn_error_codes.h:600
+#: ../include/svn_error_codes.h:637
msgid "Attempt to change immutable filesystem node"
msgstr "Versuch, einen nicht-veränderlichen Knoten des Dateisystems zu ändern"
-#: ../include/svn_error_codes.h:604
+#: ../include/svn_error_codes.h:641
msgid "Item already exists in filesystem"
msgstr "Objekt existiert bereits im Dateisystem"
-#: ../include/svn_error_codes.h:608
+#: ../include/svn_error_codes.h:645
msgid "Attempt to remove or recreate fs root dir"
msgstr "Versuch, Basisverzeichnis des Dateisystems zu entfernen oder neu zu erstellen"
-#: ../include/svn_error_codes.h:612
+#: ../include/svn_error_codes.h:649
msgid "Object is not a transaction root"
msgstr "Objekt ist keine Transaktionsbasis"
-#: ../include/svn_error_codes.h:616
+#: ../include/svn_error_codes.h:653
msgid "Object is not a revision root"
msgstr "Objekt ist keine Revisionsbasis"
-#: ../include/svn_error_codes.h:620
+#: ../include/svn_error_codes.h:657
msgid "Merge conflict during commit"
msgstr "Konflikt beim Zusammenführen während der Übertragung"
-#: ../include/svn_error_codes.h:624
+#: ../include/svn_error_codes.h:661
msgid "A representation vanished or changed between reads"
msgstr "Eine Darstellung ist zwischen Lesezugriffen verschwunden oder hat sich verändert"
-#: ../include/svn_error_codes.h:628
+#: ../include/svn_error_codes.h:665
msgid "Tried to change an immutable representation"
msgstr "Versuchte, eine nicht-veränderliche Darstellung zu ändern"
-#: ../include/svn_error_codes.h:632
+#: ../include/svn_error_codes.h:669
msgid "Malformed skeleton data"
-msgstr "Fehlerhafte Schablonendaten"
+msgstr "Fehlerhafte Skeletondaten"
-#: ../include/svn_error_codes.h:636
+#: ../include/svn_error_codes.h:673
msgid "Transaction is out of date"
msgstr "Transaktion ist veraltet"
-#: ../include/svn_error_codes.h:640
+#: ../include/svn_error_codes.h:677
msgid "Berkeley DB error"
msgstr "Berkeley-DB-Fehler"
-#: ../include/svn_error_codes.h:644
+#: ../include/svn_error_codes.h:681
msgid "Berkeley DB deadlock error"
msgstr "Deadlock-Fehler der Berkeley Datenbank"
-#: ../include/svn_error_codes.h:648
+#: ../include/svn_error_codes.h:685
msgid "Transaction is dead"
msgstr "Transaktion ist tot"
-#: ../include/svn_error_codes.h:652
+#: ../include/svn_error_codes.h:689
msgid "Transaction is not dead"
msgstr "Transaktion ist nicht tot"
-#: ../include/svn_error_codes.h:657
+#: ../include/svn_error_codes.h:694
msgid "Unknown FS type"
msgstr "Unbekannter Dateisystemtyp"
-#: ../include/svn_error_codes.h:662
+#: ../include/svn_error_codes.h:699
msgid "No user associated with filesystem"
msgstr "Kein Benutzer mit dem Dateisystem verbunden"
-#: ../include/svn_error_codes.h:667
+#: ../include/svn_error_codes.h:704
msgid "Path is already locked"
msgstr "Pfad ist bereits gesperrt"
-#: ../include/svn_error_codes.h:672 ../include/svn_error_codes.h:834
+#: ../include/svn_error_codes.h:709 ../include/svn_error_codes.h:886
msgid "Path is not locked"
msgstr "Pfad ist nicht gesperrt"
-#: ../include/svn_error_codes.h:677
+#: ../include/svn_error_codes.h:714
msgid "Lock token is incorrect"
msgstr "Sperrmarke ist fehlerhaft"
-#: ../include/svn_error_codes.h:682
+#: ../include/svn_error_codes.h:719
msgid "No lock token provided"
msgstr "Keine Sperrmarke angegeben"
-#: ../include/svn_error_codes.h:687
+#: ../include/svn_error_codes.h:724
msgid "Username does not match lock owner"
msgstr "Benutzername und Sperreigner stimmen nicht überein"
-#: ../include/svn_error_codes.h:692
+#: ../include/svn_error_codes.h:729
msgid "Filesystem has no such lock"
msgstr "Dateisystem hat keine solche Sperre"
-#: ../include/svn_error_codes.h:697
+#: ../include/svn_error_codes.h:734
msgid "Lock has expired"
msgstr "Sperre ist abgelaufen"
-#: ../include/svn_error_codes.h:702 ../include/svn_error_codes.h:821
+#: ../include/svn_error_codes.h:739 ../include/svn_error_codes.h:873
msgid "Item is out of date"
msgstr "Eintrag ist veraltet"
-#: ../include/svn_error_codes.h:714
+#: ../include/svn_error_codes.h:751
msgid "Unsupported FS format"
msgstr "Nicht unterstütztes Dateisystemformat"
-#: ../include/svn_error_codes.h:719
+#: ../include/svn_error_codes.h:756
msgid "Representation is being written"
msgstr "Darstellung wird geschrieben"
-#: ../include/svn_error_codes.h:724
+#: ../include/svn_error_codes.h:761
msgid "The generated transaction name is too long"
msgstr "Der erzeugte Transaktionsname ist zu lang"
-#: ../include/svn_error_codes.h:729
+#: ../include/svn_error_codes.h:766
msgid "Filesystem has no such node origin record"
msgstr "Dateisystem hat keinen solchen Knotenursprungsdatensatz"
-#: ../include/svn_error_codes.h:734
+#: ../include/svn_error_codes.h:771
msgid "Filesystem upgrade is not supported"
msgstr "Dateisystemaktualisierung wird nicht unterstützt"
-#: ../include/svn_error_codes.h:739
+#: ../include/svn_error_codes.h:776
msgid "Filesystem has no such checksum-representation index record"
msgstr "Dateisystem hat keinen solchen Indexdatensatz zur Prüfsummen-Repräsentation"
-#: ../include/svn_error_codes.h:744
+#: ../include/svn_error_codes.h:781
msgid "Property value in filesystem differs from the provided base value"
msgstr "Eigenschaftswert im Dateisystem weicht von dem angegebenen Basiswert ab"
-#: ../include/svn_error_codes.h:751
+#: ../include/svn_error_codes.h:787
+msgid "The filesystem editor completion process was not followed"
+msgstr "Der Prozess für den Abschluss von Bearbeitungen des Dateisystems wurde nicht befolgt"
+
+#: ../include/svn_error_codes.h:792
+msgid "A packed revprop could not be read"
+msgstr "Eine gepackte Revisionseigenschaft konnte nicht gelesen werden"
+
+#: ../include/svn_error_codes.h:797
+msgid "Could not initialize the revprop caching infrastructure."
+msgstr "Konnte Zwischenspeicher für Revisionseigenschaften nicht initialisieren"
+
+#: ../include/svn_error_codes.h:803
msgid "The repository is locked, perhaps for db recovery"
msgstr "Das Projektarchiv ist gesperrt, möglicherweise zum Retten der Datenbank"
-#: ../include/svn_error_codes.h:755
+#: ../include/svn_error_codes.h:807
msgid "A repository hook failed"
msgstr "Eine Aktion im Projektarchiv schlug fehl"
-#: ../include/svn_error_codes.h:759
+#: ../include/svn_error_codes.h:811
msgid "Incorrect arguments supplied"
msgstr "Inkorrekte Parameter übergeben"
-#: ../include/svn_error_codes.h:763
+#: ../include/svn_error_codes.h:815
msgid "A report cannot be generated because no data was supplied"
msgstr "Es kann kein Report erzeugt werden, da keine Daten geliefert wurden"
-#: ../include/svn_error_codes.h:767
+#: ../include/svn_error_codes.h:819
msgid "Bogus revision report"
msgstr "Ungültiger Revisionsreport"
-#: ../include/svn_error_codes.h:776
+#: ../include/svn_error_codes.h:828
msgid "Unsupported repository version"
msgstr "Nicht unterstützte Version des Projektarchivs"
-#: ../include/svn_error_codes.h:780
+#: ../include/svn_error_codes.h:832
msgid "Disabled repository feature"
msgstr "Deaktiviertes Merkmal des Projektarchivs"
-#: ../include/svn_error_codes.h:784
+#: ../include/svn_error_codes.h:836
msgid "Error running post-commit hook"
msgstr "Fehler beim Ausführen der Aktion »post-commit«"
-#: ../include/svn_error_codes.h:789
+#: ../include/svn_error_codes.h:841
msgid "Error running post-lock hook"
msgstr "Fehler beim Ausführen der Aktion »post-lock«"
-#: ../include/svn_error_codes.h:794
+#: ../include/svn_error_codes.h:846
msgid "Error running post-unlock hook"
msgstr "Fehler beim Ausführen der Aktion »post-unlock«"
-#: ../include/svn_error_codes.h:799
+#: ../include/svn_error_codes.h:851
msgid "Repository upgrade is not supported"
msgstr "Projektarchivaktualisierung wird nicht unterstützt"
-#: ../include/svn_error_codes.h:805
+#: ../include/svn_error_codes.h:857
msgid "Bad URL passed to RA layer"
msgstr "Ungültige URL an die ZM-Schicht übergeben"
-#: ../include/svn_error_codes.h:809
+#: ../include/svn_error_codes.h:861
msgid "Authorization failed"
msgstr "Autorisierung schlug fehl"
-#: ../include/svn_error_codes.h:813
+#: ../include/svn_error_codes.h:865
msgid "Unknown authorization method"
msgstr "Unbekannte Autorisierungsmethode"
-#: ../include/svn_error_codes.h:817
+#: ../include/svn_error_codes.h:869
msgid "Repository access method not implemented"
msgstr "Zugriffsmethode zum Projektarchiv nicht implementiert"
-#: ../include/svn_error_codes.h:825
+#: ../include/svn_error_codes.h:877
msgid "Repository has no UUID"
msgstr "Projektarchiv hat keine UUID"
-#: ../include/svn_error_codes.h:829
+#: ../include/svn_error_codes.h:881
msgid "Unsupported RA plugin ABI version"
msgstr "Nicht unterstützte ABI-Version des ZM-Plugins"
-#: ../include/svn_error_codes.h:839
+#: ../include/svn_error_codes.h:891
msgid "Server can only replay from the root of a repository"
msgstr "Der Server kann nur von der Basis des Projektarchivs fortfahren"
-#: ../include/svn_error_codes.h:844
+#: ../include/svn_error_codes.h:896
msgid "Repository UUID does not match expected UUID"
msgstr "Die UUID des Projektarchivs entspricht nicht der erwarteten UUID"
-#: ../include/svn_error_codes.h:849
+#: ../include/svn_error_codes.h:901
msgid "Repository root URL does not match expected root URL"
msgstr "Die URL der Projektarchivwurzel entspricht nicht der erwarteten Wurzel-URL"
-#: ../include/svn_error_codes.h:854
+#: ../include/svn_error_codes.h:906
msgid "Session URL does not match expected session URL"
msgstr "Die Sitzungs-URL entspricht nicht der erwarteten Sitzungs-URL"
-#: ../include/svn_error_codes.h:860
+#: ../include/svn_error_codes.h:911 ../libsvn_ra_svn/client.c:492
+#, c-format
+msgid "Can't create tunnel"
+msgstr "Kann Tunnel nicht erzeugen"
+
+#: ../include/svn_error_codes.h:917
msgid "RA layer failed to init socket layer"
msgstr "ZM-Schicht konnte die Verbindungsschicht nicht initialisieren"
-#: ../include/svn_error_codes.h:864
+#: ../include/svn_error_codes.h:921
msgid "RA layer failed to create HTTP request"
msgstr "ZM-Schicht konnte keine HTTP-Anforderung erzeugen"
-#: ../include/svn_error_codes.h:868
+#: ../include/svn_error_codes.h:925
msgid "RA layer request failed"
msgstr "ZM-Schicht Anforderung gescheitert"
-#: ../include/svn_error_codes.h:872
+#: ../include/svn_error_codes.h:929
msgid "RA layer didn't receive requested OPTIONS info"
msgstr "ZM-Schicht hat die angeforderte OPTIONS-Information nicht erhalten"
-#: ../include/svn_error_codes.h:876
+#: ../include/svn_error_codes.h:933
msgid "RA layer failed to fetch properties"
msgstr "ZM-Schicht konnte keine Eigenschaften bestimmen"
-#: ../include/svn_error_codes.h:880
+#: ../include/svn_error_codes.h:937
msgid "RA layer file already exists"
msgstr "ZM-Schichtdatei existiert bereits"
-#: ../include/svn_error_codes.h:894
+#: ../include/svn_error_codes.h:951
msgid "HTTP Path Not Found"
msgstr "HTTP Pfad nicht gefunden"
-#: ../include/svn_error_codes.h:898
+#: ../include/svn_error_codes.h:955
msgid "Failed to execute WebDAV PROPPATCH"
msgstr "Konnte WebDAV PROPPATCH nicht ausführen"
-#: ../include/svn_error_codes.h:903 ../include/svn_error_codes.h:954
-#: ../libsvn_ra_svn/marshal.c:714 ../libsvn_ra_svn/marshal.c:832
-#: ../libsvn_ra_svn/marshal.c:859
+#: ../include/svn_error_codes.h:960 ../include/svn_error_codes.h:1403
+#: ../libsvn_ra_svn/marshal.c:1075 ../libsvn_ra_svn/marshal.c:1285
+#: ../libsvn_ra_svn/marshal.c:1315
msgid "Malformed network data"
msgstr "Fehlerhafte Netzwerkdaten"
-#: ../include/svn_error_codes.h:908
+#: ../include/svn_error_codes.h:965
msgid "Unable to extract data from response header"
msgstr "Kann keine Daten aus dem Antwortkopf extrahieren"
-#: ../include/svn_error_codes.h:913
+#: ../include/svn_error_codes.h:970
msgid "Repository has been moved"
msgstr "Projektarchiv wurde verschoben"
-#: ../include/svn_error_codes.h:918 ../libsvn_ra_serf/replay.c:844
-#: ../libsvn_ra_serf/update.c:2326 ../libsvn_ra_serf/util.c:689
+#: ../include/svn_error_codes.h:975 ../libsvn_ra_serf/update.c:2863
+#: ../libsvn_ra_serf/util.c:944
msgid "Connection timed out"
msgstr "Die Wartezeit für die Verbindung ist abgelaufen"
-#: ../include/svn_error_codes.h:923
+#: ../include/svn_error_codes.h:980
msgid "URL access forbidden for unknown reason"
msgstr "URL-Zugriff wegen unbekannter Ursache verboten"
-#: ../include/svn_error_codes.h:929 ../include/svn_error_codes.h:958
+#: ../include/svn_error_codes.h:986 ../include/svn_error_codes.h:1407
msgid "Couldn't find a repository"
msgstr "Konnte Projektarchiv nicht finden"
-#: ../include/svn_error_codes.h:933
+#: ../include/svn_error_codes.h:990
msgid "Couldn't open a repository"
msgstr "Konnte Projektarchiv nicht öffnen"
-#: ../include/svn_error_codes.h:938
-msgid "Special code for wrapping server errors to report to client"
-msgstr "Spezieller Fehlerkode, um Serverfehler an den Client zu melden"
-
-#: ../include/svn_error_codes.h:942
-msgid "Unknown svn protocol command"
-msgstr "Unbekanntes svn-Protokollkommando"
-
-#: ../include/svn_error_codes.h:946
-msgid "Network connection closed unexpectedly"
-msgstr "Netzwerkverbindung wurde unerwartet geschlossen"
-
-#: ../include/svn_error_codes.h:950
-msgid "Network read/write error"
-msgstr "Netzwerk-Lese-/-Schreibfehler"
-
-#: ../include/svn_error_codes.h:962
-msgid "Client/server version mismatch"
-msgstr "Client- und Serverversion stimmen nicht überein"
-
-#: ../include/svn_error_codes.h:967
-msgid "Cannot negotiate authentication mechanism"
-msgstr "Kann Anmeldungsmechanismus nicht aushandeln"
-
-#: ../include/svn_error_codes.h:972
-msgid "Editor drive was aborted"
-msgstr "Editor-Steuerung wurde unterbrochen"
-
-#: ../include/svn_error_codes.h:978
-msgid "Initialization of SSPI library failed"
-msgstr "Initialisierung der SSPI-Bibliothek schlug fehl"
-
-#: ../include/svn_error_codes.h:982
-msgid "Server SSL certificate untrusted"
-msgstr "Server-SSL-Zertifikat ist nicht vertrauenswürdig"
-
-#: ../include/svn_error_codes.h:986
-msgid "Initialization of the GSSAPI context failed"
-msgstr "Initialisierung des GSSAPI-Kontextes schlug fehl"
-
-#: ../include/svn_error_codes.h:991
-msgid "While handling serf response:"
-msgstr "Während der Abwicklung einer serf Antwort:"
-
-#: ../include/svn_error_codes.h:999
-msgid "Credential data unavailable"
-msgstr "Beglaubigungsdaten nicht verfügbar"
-
-#: ../include/svn_error_codes.h:1003
-msgid "No authentication provider available"
-msgstr "Kein Anbieter für Anmeldung verfügbar"
-
-#: ../include/svn_error_codes.h:1007
-msgid "All authentication providers exhausted"
-msgstr "Alle Anmeldemöglichkeiten erschöpft"
-
-#: ../include/svn_error_codes.h:1011
-msgid "Credentials not saved"
-msgstr "Beglaubigungsdaten nicht gespeichert"
-
-#: ../include/svn_error_codes.h:1016
-msgid "Authentication failed"
-msgstr "Authentifizierung schlug fehl"
-
-#: ../include/svn_error_codes.h:1022
-msgid "Read access denied for root of edit"
-msgstr "Lesezugriff verweigert für Basis dieser Änderung"
-
-#: ../include/svn_error_codes.h:1027
-msgid "Item is not readable"
-msgstr "Eintrag ist nicht lesbar"
-
-#: ../include/svn_error_codes.h:1032
-msgid "Item is partially readable"
-msgstr "Eintrag ist nur teilweise lesbar"
-
-#: ../include/svn_error_codes.h:1036
-msgid "Invalid authz configuration"
-msgstr "Ungültige authz Konfiguration"
-
-#: ../include/svn_error_codes.h:1041
-msgid "Item is not writable"
-msgstr "Eintrag ist nicht schreibbar"
-
-#: ../include/svn_error_codes.h:1047
+#: ../include/svn_error_codes.h:996
msgid "Svndiff data has invalid header"
msgstr "Svndiff-Daten enthalten ungültigen Kopf"
-#: ../include/svn_error_codes.h:1051
+#: ../include/svn_error_codes.h:1000
msgid "Svndiff data contains corrupt window"
msgstr "Svndiff-Daten enthalten defektes Fenster"
-#: ../include/svn_error_codes.h:1055
+#: ../include/svn_error_codes.h:1004
msgid "Svndiff data contains backward-sliding source view"
msgstr "Svndiff-Daten enthalten rückwärts gleitenden Blick auf Quellen"
-#: ../include/svn_error_codes.h:1059
+#: ../include/svn_error_codes.h:1008
msgid "Svndiff data contains invalid instruction"
msgstr "Svndiff-Daten enthalten ungültige Anweisung"
-#: ../include/svn_error_codes.h:1063
+#: ../include/svn_error_codes.h:1012
msgid "Svndiff data ends unexpectedly"
msgstr "Svndiff-Daten enden unerwartet"
-#: ../include/svn_error_codes.h:1067
+#: ../include/svn_error_codes.h:1016
msgid "Svndiff compressed data is invalid"
msgstr "Komprimierte svndiff-Daten sind ungültig"
-#: ../include/svn_error_codes.h:1073
-msgid "Diff data source modified unexpectedly"
-msgstr "Diff-Datenquellen wurden unerwarteterweise verändert"
-
-#: ../include/svn_error_codes.h:1079
+#: ../include/svn_error_codes.h:1022
msgid "Apache has no path to an SVN filesystem"
msgstr "Apache besitzt keinen Pfad zu einem SVN Dateisystem"
-#: ../include/svn_error_codes.h:1083
+#: ../include/svn_error_codes.h:1026
msgid "Apache got a malformed URI"
msgstr "Apache hat eine fehlerhafte URI erhalten"
-#: ../include/svn_error_codes.h:1087
+#: ../include/svn_error_codes.h:1030
msgid "Activity not found"
msgstr "Aktivität nicht gefunden"
-#: ../include/svn_error_codes.h:1091
+#: ../include/svn_error_codes.h:1034
msgid "Baseline incorrect"
msgstr "»Baseline« nicht korrekt"
-#: ../include/svn_error_codes.h:1095
+#: ../include/svn_error_codes.h:1038
msgid "Input/output error"
msgstr "Eingabe/Ausgabe Fehler"
-#: ../include/svn_error_codes.h:1101
+#: ../include/svn_error_codes.h:1044
msgid "A path under version control is needed for this operation"
msgstr "Für diese Operation wird ein Pfad unter Versionskontrolle benötigt"
-#: ../include/svn_error_codes.h:1105
+#: ../include/svn_error_codes.h:1048
msgid "Repository access is needed for this operation"
msgstr "Für diese Operation wird Zugang zum Projektarchiv benötigt"
-#: ../include/svn_error_codes.h:1109
+#: ../include/svn_error_codes.h:1052
msgid "Bogus revision information given"
msgstr "Falsche Revisionsinformation angegeben"
-#: ../include/svn_error_codes.h:1113
+#: ../include/svn_error_codes.h:1056
msgid "Attempting to commit to a URL more than once"
msgstr "Versuch, mehrfach zu einer URL zu übertragen"
-#: ../include/svn_error_codes.h:1117
+#: ../include/svn_error_codes.h:1060
msgid "Operation does not apply to binary file"
msgstr "Operation ist nicht auf einer Binärdatei ausführbar"
-#: ../include/svn_error_codes.h:1123
+#: ../include/svn_error_codes.h:1066
msgid "Format of an svn:externals property was invalid"
msgstr "Format einer svn:externals Eigenschaft war ungültig"
-#: ../include/svn_error_codes.h:1127
+#: ../include/svn_error_codes.h:1070
msgid "Attempting restricted operation for modified resource"
msgstr "Versuch, eine beschränkte Operation für veränderte Ressource auszuführen"
-#: ../include/svn_error_codes.h:1131
+#: ../include/svn_error_codes.h:1074
msgid "Operation does not apply to directory"
msgstr "Operation ist nicht auf einem Verzeichnis ausführbar"
-#: ../include/svn_error_codes.h:1135
+#: ../include/svn_error_codes.h:1078
msgid "Revision range is not allowed"
msgstr "Revisionsbereich nicht erlaubt"
-#: ../include/svn_error_codes.h:1139
+#: ../include/svn_error_codes.h:1082
msgid "Inter-repository relocation not allowed"
msgstr "Umplatzieren innerhalb des Projektarchivs nicht erlaubt"
-#: ../include/svn_error_codes.h:1143
+#: ../include/svn_error_codes.h:1086
msgid "Author name cannot contain a newline"
msgstr "Autorenname darf keinen Zeilenumbruch enthalten"
-#: ../include/svn_error_codes.h:1147
+#: ../include/svn_error_codes.h:1090
msgid "Bad property name"
msgstr "Fehlerhafter Eigenschaftsname"
-#: ../include/svn_error_codes.h:1152
+#: ../include/svn_error_codes.h:1095
msgid "Two versioned resources are unrelated"
msgstr "Zwei versionierte Ressourcen sind nicht verwandt"
-#: ../include/svn_error_codes.h:1157
+#: ../include/svn_error_codes.h:1100
msgid "Path has no lock token"
msgstr "Pfad hat keine Sperrmarke"
-#: ../include/svn_error_codes.h:1162
+#: ../include/svn_error_codes.h:1105
msgid "Operation does not support multiple sources"
msgstr "Die Operation unterstützt nicht mehrere Quellen"
-#: ../include/svn_error_codes.h:1167
+#: ../include/svn_error_codes.h:1110
msgid "No versioned parent directories"
msgstr "Keine versionierten Elternverzeichnisse"
-#: ../include/svn_error_codes.h:1172
+#: ../include/svn_error_codes.h:1115 ../include/svn_error_codes.h:1135
msgid "Working copy and merge source not ready for reintegration"
msgstr "Arbeitskopie und Zusammnführungsquelle sind für eine Reintegration nicht bereit"
-#: ../include/svn_error_codes.h:1177
+#: ../include/svn_error_codes.h:1120
msgid "A file external cannot overwrite an existing versioned item"
msgstr "Ein externer Dateiverweis kann kein existierendes versioniertes Objekt überschreiben"
-#: ../include/svn_error_codes.h:1182
+#: ../include/svn_error_codes.h:1125
msgid "Invalid path component strip count specified"
msgstr "Ungültige Anzahl der vom Pfad zu entfernenden Komponenten angegeben"
-#: ../include/svn_error_codes.h:1187
+#: ../include/svn_error_codes.h:1130
msgid "Detected a cycle while processing the operation"
msgstr "Endlosschleife während der Verarbeitung der Operation entdeckt"
-#: ../include/svn_error_codes.h:1193
+#: ../include/svn_error_codes.h:1140
+msgid "Invalid mergeinfo detected in merge target"
+msgstr "Ungültige Zusammenführungsinformationen in Zusammenführungsziel entdeckt"
+
+#: ../include/svn_error_codes.h:1145
+msgid "Can't perform this operation without a valid lock token"
+msgstr "Kann diese Operation nicht ohne eine gültige Sperrmarke ausführen"
+
+#: ../include/svn_error_codes.h:1150
+msgid "The operation is forbidden by the server"
+msgstr "Die Operation wurde durch den Server nicht zugelassen"
+
+#: ../include/svn_error_codes.h:1156
msgid "A problem occurred; see other errors for details"
msgstr "Ein Problem ist aufgetreten, für Details siehe andere Fehlermeldungen"
-#: ../include/svn_error_codes.h:1197
+#: ../include/svn_error_codes.h:1160
msgid "Failure loading plugin"
msgstr "Fehler beim Laden eines Plugins"
-#: ../include/svn_error_codes.h:1201
+#: ../include/svn_error_codes.h:1164
msgid "Malformed file"
msgstr "Fehlerhafte Datei"
-#: ../include/svn_error_codes.h:1205
+#: ../include/svn_error_codes.h:1168
msgid "Incomplete data"
msgstr "Unvollständige Daten"
-#: ../include/svn_error_codes.h:1209
+#: ../include/svn_error_codes.h:1172
msgid "Incorrect parameters given"
msgstr "Inkorrekte Parameter übergeben"
-#: ../include/svn_error_codes.h:1213
+#: ../include/svn_error_codes.h:1176
msgid "Tried a versioning operation on an unversioned resource"
msgstr "Versuchte, eine Versionsoperation auf nicht versionierter Ressource auszuführen"
-#: ../include/svn_error_codes.h:1217
+#: ../include/svn_error_codes.h:1180
msgid "Test failed"
msgstr "Test schlug fehl"
-#: ../include/svn_error_codes.h:1221
+#: ../include/svn_error_codes.h:1184
msgid "Trying to use an unsupported feature"
msgstr "Versuch, ein nicht unterstütztes Merkmal zu benutzen"
-#: ../include/svn_error_codes.h:1225
+#: ../include/svn_error_codes.h:1188
msgid "Unexpected or unknown property kind"
msgstr "Unerwartete oder unbekannte Eigenschaftsart"
-#: ../include/svn_error_codes.h:1229
+#: ../include/svn_error_codes.h:1192
msgid "Illegal target for the requested operation"
msgstr "Ungültiges Ziel für die angeforderte Operation"
-#: ../include/svn_error_codes.h:1233
+#: ../include/svn_error_codes.h:1196
msgid "MD5 checksum is missing"
msgstr "MD5 Prüfsumme fehlt"
-#: ../include/svn_error_codes.h:1237
+#: ../include/svn_error_codes.h:1200
msgid "Directory needs to be empty but is not"
msgstr "Das Verzeichnis muss leer sein, ist es aber nicht"
-#: ../include/svn_error_codes.h:1241
+#: ../include/svn_error_codes.h:1204
msgid "Error calling external program"
msgstr "Fehler beim Aufrufen eines externen Programmes"
-#: ../include/svn_error_codes.h:1245
+#: ../include/svn_error_codes.h:1208
msgid "Python exception has been set with the error"
msgstr "Eine Python-Ausnahme wurde mit dem Fehler gesetzt"
-#: ../include/svn_error_codes.h:1249
+#: ../include/svn_error_codes.h:1212
msgid "A checksum mismatch occurred"
msgstr "Ein Prüfsummenfehler ist aufgetreten"
-#: ../include/svn_error_codes.h:1253
+#: ../include/svn_error_codes.h:1216
msgid "The operation was interrupted"
msgstr "Die Operation wurde unterbrochen"
-#: ../include/svn_error_codes.h:1257
+#: ../include/svn_error_codes.h:1220
msgid "The specified diff option is not supported"
msgstr "Die angegebene Vergleichsoption wird nicht unterstützt"
-#: ../include/svn_error_codes.h:1261
+#: ../include/svn_error_codes.h:1224
msgid "Property not found"
msgstr "Eigenschaft nicht gefunden"
-#: ../include/svn_error_codes.h:1265
+#: ../include/svn_error_codes.h:1228
msgid "No auth file path available"
msgstr "Kein Pfad für die Anmeldedatei verfügbar"
-#: ../include/svn_error_codes.h:1270
+#: ../include/svn_error_codes.h:1233
msgid "Incompatible library version"
msgstr "Inkompatible Bibliotheksversion"
-#: ../include/svn_error_codes.h:1275
+#: ../include/svn_error_codes.h:1238
msgid "Mergeinfo parse error"
msgstr "Einlesefehler für Zusammenführungsinformationen"
-#: ../include/svn_error_codes.h:1280
+#: ../include/svn_error_codes.h:1243
msgid "Cease invocation of this API"
msgstr "Einstellen der Benutzung dieser API"
-#: ../include/svn_error_codes.h:1285
+#: ../include/svn_error_codes.h:1248
msgid "Error parsing revision number"
msgstr "Fehler beim Einlesen der Revisionsnummer"
-#: ../include/svn_error_codes.h:1290
+#: ../include/svn_error_codes.h:1253
msgid "Iteration terminated before completion"
msgstr "Iteration brach vor der Fertigstellung ab"
-#: ../include/svn_error_codes.h:1295
+#: ../include/svn_error_codes.h:1258
msgid "Unknown changelist"
msgstr "Unbekannte Änderungsliste"
-#: ../include/svn_error_codes.h:1300
+#: ../include/svn_error_codes.h:1263
msgid "Reserved directory name in command line arguments"
msgstr "Kommandozeilenparameter enthalten reservierten Verzeichnisnamen"
-#: ../include/svn_error_codes.h:1305
+#: ../include/svn_error_codes.h:1268
msgid "Inquiry about unknown capability"
msgstr "Nachfrage nach unbekannter Eigenschaft"
-#: ../include/svn_error_codes.h:1310
+#: ../include/svn_error_codes.h:1273
msgid "Test skipped"
msgstr "Test übersprungen"
-#: ../include/svn_error_codes.h:1315
-msgid "apr memcache library not available"
-msgstr "Die apr-memcache-Bibliothek ist nicht verfügbar"
+#: ../include/svn_error_codes.h:1278
+msgid "APR memcache library not available"
+msgstr "Die APR-memcache-Bibliothek ist nicht verfügbar"
-#: ../include/svn_error_codes.h:1320
+#: ../include/svn_error_codes.h:1283
msgid "Couldn't perform atomic initialization"
msgstr "Eine atomare Initialisierung konnte nicht durchgeführt werden"
-#: ../include/svn_error_codes.h:1325
+#: ../include/svn_error_codes.h:1288
msgid "SQLite error"
msgstr "SQLite-Fehler"
-#: ../include/svn_error_codes.h:1330
+#: ../include/svn_error_codes.h:1293
msgid "Attempted to write to readonly SQLite db"
msgstr "Versuch, in eine nur lesbare SQLite-Datenbank zu schreiben"
-#: ../include/svn_error_codes.h:1335
+#: ../include/svn_error_codes.h:1300
msgid "Unsupported schema found in SQLite db"
msgstr "Nicht unterstütztes Schema in SQLite-Datenbank gefunden"
-#: ../include/svn_error_codes.h:1340
+#: ../include/svn_error_codes.h:1305
msgid "The SQLite db is busy"
-msgstr ""
+msgstr "Die SQLite-Datenbank ist beschäftigt"
-#: ../include/svn_error_codes.h:1345
+#: ../include/svn_error_codes.h:1310
msgid "SQLite busy at transaction rollback; resetting all busy SQLite statements to allow rollback"
-msgstr ""
+msgstr "SQLite ist mit dem Rollback einer Transaktion beschäftigt; Alle SQLite-Anweisungen werden für Rollback zurückgesetzt"
+
+#: ../include/svn_error_codes.h:1316
+msgid "Constraint error in SQLite db"
+msgstr "Constraint-Fehler in SQLite-Datenbank"
+
+#: ../include/svn_error_codes.h:1321
+msgid "Too many memcached servers configured"
+msgstr "Zu viele memcached-Server konfiguriert"
+
+#: ../include/svn_error_codes.h:1326
+msgid "Failed to parse version number string"
+msgstr "Konnte Zeichenkette mit Versionsnummer nicht verarbeiten"
+
+#: ../include/svn_error_codes.h:1331
+msgid "Atomic data storage is corrupt"
+msgstr "Speicherbereich für »atomic« ist beschädigt"
-#: ../include/svn_error_codes.h:1352
+#: ../include/svn_error_codes.h:1337
msgid "Error parsing arguments"
msgstr "Fehler beim Einlesen der Parameter"
-#: ../include/svn_error_codes.h:1356
+#: ../include/svn_error_codes.h:1341
msgid "Not enough arguments provided"
msgstr "Nicht genügend Parameter angegeben"
-#: ../include/svn_error_codes.h:1360
+#: ../include/svn_error_codes.h:1345
msgid "Mutually exclusive arguments specified"
msgstr "Die Parameter schließen sich gegenseitig aus"
-#: ../include/svn_error_codes.h:1364
+#: ../include/svn_error_codes.h:1349
msgid "Attempted command in administrative dir"
msgstr "Ausführen einer Operation in einem Verwaltungsverzeichnis versucht"
-#: ../include/svn_error_codes.h:1368
+#: ../include/svn_error_codes.h:1353
msgid "The log message file is under version control"
msgstr "Die Datei für die Logmeldung ist unter Versionskontrolle"
-#: ../include/svn_error_codes.h:1372
+#: ../include/svn_error_codes.h:1357
msgid "The log message is a pathname"
msgstr "Die Logmeldung ist ein Pfadname"
-#: ../include/svn_error_codes.h:1376
+#: ../include/svn_error_codes.h:1361
msgid "Committing in directory scheduled for addition"
msgstr "Übertragung in einem Verzeichnis, das zum Hinzufügen vorgesehen ist"
-#: ../include/svn_error_codes.h:1380
+#: ../include/svn_error_codes.h:1365
msgid "No external editor available"
msgstr "Kein externer Editor verfügbar"
-#: ../include/svn_error_codes.h:1384
+#: ../include/svn_error_codes.h:1369
msgid "Something is wrong with the log message's contents"
msgstr "Mit dem Inhalt der Logmeldung stimmt etwas nicht"
-#: ../include/svn_error_codes.h:1388
+#: ../include/svn_error_codes.h:1373
msgid "A log message was given where none was necessary"
msgstr "Eine Logmeldung wurde angegeben wo keine nötig ist"
-#: ../include/svn_error_codes.h:1392
+#: ../include/svn_error_codes.h:1377
msgid "No external merge tool available"
msgstr "Kein externes Werkzeug zum Zusammenführen verfügbar"
-#: ../include/svn_error_codes.h:1396
+#: ../include/svn_error_codes.h:1381
msgid "Failed processing one or more externals definitions"
msgstr "Verarbeitung einer oder mehrerer »svn:externals«-Definitionen fehlgeschlagen"
-#: ../include/svn_error_codes.h:1402
+#: ../include/svn_error_codes.h:1387
+msgid "Special code for wrapping server errors to report to client"
+msgstr "Spezieller Fehlerkode, um Serverfehler an den Client zu melden"
+
+#: ../include/svn_error_codes.h:1391
+msgid "Unknown svn protocol command"
+msgstr "Unbekanntes svn-Protokollkommando"
+
+#: ../include/svn_error_codes.h:1395
+msgid "Network connection closed unexpectedly"
+msgstr "Netzwerkverbindung wurde unerwartet geschlossen"
+
+#: ../include/svn_error_codes.h:1399
+msgid "Network read/write error"
+msgstr "Netzwerk-Lese-/-Schreibfehler"
+
+#: ../include/svn_error_codes.h:1411
+msgid "Client/server version mismatch"
+msgstr "Client- und Serverversion stimmen nicht überein"
+
+#: ../include/svn_error_codes.h:1416
+msgid "Cannot negotiate authentication mechanism"
+msgstr "Kann Anmeldungsmechanismus nicht aushandeln"
+
+#: ../include/svn_error_codes.h:1421
+msgid "Editor drive was aborted"
+msgstr "Editor-Steuerung wurde unterbrochen"
+
+#: ../include/svn_error_codes.h:1429
+msgid "Credential data unavailable"
+msgstr "Beglaubigungsdaten nicht verfügbar"
+
+#: ../include/svn_error_codes.h:1433
+msgid "No authentication provider available"
+msgstr "Kein Anbieter für Anmeldung verfügbar"
+
+#: ../include/svn_error_codes.h:1437
+msgid "All authentication providers exhausted"
+msgstr "Alle Anmeldemöglichkeiten erschöpft"
+
+#: ../include/svn_error_codes.h:1441
+msgid "Credentials not saved"
+msgstr "Beglaubigungsdaten nicht gespeichert"
+
+#: ../include/svn_error_codes.h:1446
+msgid "Authentication failed"
+msgstr "Authentifizierung schlug fehl"
+
+#: ../include/svn_error_codes.h:1452
+msgid "Read access denied for root of edit"
+msgstr "Lesezugriff verweigert für Basis dieser Änderung"
+
+#: ../include/svn_error_codes.h:1457
+msgid "Item is not readable"
+msgstr "Eintrag ist nicht lesbar"
+
+#: ../include/svn_error_codes.h:1462
+msgid "Item is partially readable"
+msgstr "Eintrag ist nur teilweise lesbar"
+
+#: ../include/svn_error_codes.h:1466
+msgid "Invalid authz configuration"
+msgstr "Ungültige authz Konfiguration"
+
+#: ../include/svn_error_codes.h:1471
+msgid "Item is not writable"
+msgstr "Eintrag ist nicht schreibbar"
+
+#: ../include/svn_error_codes.h:1478
+msgid "Diff data source modified unexpectedly"
+msgstr "Diff-Datenquellen wurden unerwarteterweise verändert"
+
+#: ../include/svn_error_codes.h:1484
+msgid "Initialization of SSPI library failed"
+msgstr "Initialisierung der SSPI-Bibliothek schlug fehl"
+
+#: ../include/svn_error_codes.h:1488
+msgid "Server SSL certificate untrusted"
+msgstr "Server-SSL-Zertifikat ist nicht vertrauenswürdig"
+
+#: ../include/svn_error_codes.h:1493
+msgid "Initialization of the GSSAPI context failed"
+msgstr "Initialisierung des GSSAPI-Kontextes schlug fehl"
+
+#: ../include/svn_error_codes.h:1498
+msgid "While handling serf response:"
+msgstr "Während der Abwicklung einer serf Antwort:"
+
+#: ../include/svn_error_codes.h:1504
msgid "Assertion failure"
msgstr "Assert-Anweisung schlug fehl"
-#: ../libsvn_auth_gnome_keyring/gnome_keyring.c:392
-#: ../libsvn_auth_gnome_keyring/gnome_keyring.c:447
-#: ../libsvn_auth_gnome_keyring/gnome_keyring.c:554
-#: ../libsvn_auth_gnome_keyring/gnome_keyring.c:610
+#: ../include/svn_error_codes.h:1508
+msgid "No non-tracing links found in the error chain"
+msgstr "Nur Nicht-Tracing-Einträge in Fehlerkette gefunden"
+
+#: ../libsvn_auth_gnome_keyring/gnome_keyring.c:274
msgid "GNOME Keyring is locked and we are non-interactive"
-msgstr ""
+msgstr "GNOME-Schlüsselring ist gesperrt und wir sind nicht-interaktiv"
-#: ../libsvn_client/add.c:488 ../libsvn_wc/adm_ops.c:881
-#: ../libsvn_wc/workqueue.c:1658 ../libsvn_wc/workqueue.c:1740
+#: ../libsvn_client/add.c:606 ../libsvn_client/cmdline.c:356
+#: ../libsvn_subr/opt.c:932
+#, c-format
+msgid "'%s' ends in a reserved name"
+msgstr "»%s« endet mit einem reservierten Namen"
+
+#: ../libsvn_client/add.c:875
+#, c-format
+msgid "'%s' prevents creating parent of '%s'"
+msgstr "»%s« verhindert die Erzeugung des Vorgängers von »%s«"
+
+#: ../libsvn_client/add.c:914 ../libsvn_wc/adm_ops.c:732
+#, c-format
+msgid "'%s' is an existing item in conflict; please mark the conflict as resolved before adding a new item here"
+msgstr "»%s« ist ein vorhandenes Element mit Konflikt; Markieren Sie den Konflikt als aufgelöst bevor Sie hier ein neues Element hinzufügen"
+
+#: ../libsvn_client/add.c:921 ../libsvn_wc/adm_ops.c:687
+#: ../libsvn_wc/workqueue.c:905 ../libsvn_wc/workqueue.c:999
#, c-format
msgid "'%s' not found"
msgstr "»%s« nicht gefunden"
-#: ../libsvn_client/add.c:493 ../libsvn_wc/adm_ops.c:572
-#: ../libsvn_wc/adm_ops.c:886
+#: ../libsvn_client/add.c:927 ../libsvn_wc/adm_ops.c:692
+#: ../libsvn_wc/delete.c:98
#, c-format
msgid "Unsupported node kind for path '%s'"
msgstr "Nicht unterstützter Knotentyp für Pfad »%s«"
-#: ../libsvn_client/add.c:534 ../libsvn_client/cmdline.c:268
-#: ../libsvn_subr/opt.c:878
-#, c-format
-msgid "'%s' ends in a reserved name"
-msgstr "»%s« endet mit einem reservierten Namen"
-
-#: ../libsvn_client/add.c:580 ../libsvn_client/changelist.c:116
-#: ../libsvn_client/changelist.c:168 ../libsvn_client/cleanup.c:56
-#: ../libsvn_client/cleanup.c:134 ../libsvn_client/commit.c:701
-#: ../libsvn_client/export.c:952 ../libsvn_client/resolved.c:54
-#: ../libsvn_client/revert.c:135 ../libsvn_client/status.c:274
-#: ../svn/add-cmd.c:76 ../svn/changelist-cmd.c:84 ../svn/cleanup-cmd.c:69
-#: ../svn/export-cmd.c:91 ../svn/import-cmd.c:106 ../svn/resolve-cmd.c:106
-#: ../svn/resolved-cmd.c:76 ../svn/revert-cmd.c:77 ../svn/status-cmd.c:260
-#: ../svn/upgrade-cmd.c:72
+#: ../libsvn_client/add.c:960 ../libsvn_client/changelist.c:65
+#: ../libsvn_client/changelist.c:104 ../libsvn_client/cleanup.c:55
+#: ../libsvn_client/export.c:1394 ../libsvn_client/import.c:815
+#: ../libsvn_client/patch.c:3009 ../libsvn_client/relocate.c:232
+#: ../libsvn_client/resolved.c:121 ../libsvn_client/revert.c:136
+#: ../libsvn_client/status.c:353 ../libsvn_client/switch.c:473
+#: ../libsvn_client/update.c:646 ../libsvn_client/upgrade.c:105
+#: ../svn/util.c:984
#, c-format
msgid "'%s' is not a local path"
msgstr "»%s« ist kein lokaler Pfad"
-#: ../libsvn_client/add.c:683 ../libsvn_ra/ra_loader.c:373
-#: ../libsvn_ra_serf/serf.c:366 ../libsvn_ra_serf/serf.c:482
+#: ../libsvn_client/add.c:1001 ../libsvn_client/copy_foreign.c:489
+#: ../libsvn_wc/adm_ops.c:766 ../libsvn_wc/copy.c:715
#, c-format
-msgid "Illegal repository URL '%s'"
-msgstr "Illegale Projektarchiv-URL »%s«"
+msgid "'%s' is already under version control"
+msgstr "»%s« befindet sich bereits unter Versionskontrolle"
-#: ../libsvn_client/blame.c:397
+#: ../libsvn_client/add.c:1134 ../libsvn_client/add.c:1161
#, c-format
-msgid "Cannot calculate blame information for binary file '%s'"
-msgstr "Kann Binärdatei »%s« nicht annotieren"
+msgid "There is no valid URI above '%s'"
+msgstr "Es existiert kein gültiger URI oberhalb von »%s«"
-#: ../libsvn_client/blame.c:627
+#: ../libsvn_client/blame.c:605
msgid "Start revision must precede end revision"
msgstr "Startrevision muss vor der Endrevision liegen"
-#: ../libsvn_client/cat.c:74 ../libsvn_client/commit_util.c:1038
-#: ../libsvn_client/delete.c:64 ../libsvn_client/prop_commands.c:429
-#: ../libsvn_client/prop_commands.c:947 ../libsvn_client/prop_commands.c:1264
-#: ../libsvn_client/revisions.c:104 ../libsvn_wc/adm_ops.c:2008
-#: ../libsvn_wc/adm_ops.c:2042 ../libsvn_wc/copy.c:596
-#: ../libsvn_wc/entries.c:1405 ../libsvn_wc/entries.c:2450
-#: ../libsvn_wc/entries.c:2481 ../libsvn_wc/node.c:1247
-#: ../libsvn_wc/update_editor.c:4171
+#: ../libsvn_client/blame.c:633
+#, c-format
+msgid "Cannot calculate blame information for binary file '%s'"
+msgstr "Kann Binärdatei »%s« nicht annotieren"
+
+#: ../libsvn_client/cat.c:77 ../libsvn_client/commit_util.c:610
+#: ../libsvn_client/delete.c:81 ../libsvn_client/prop_commands.c:833
+#: ../libsvn_client/prop_commands.c:1423 ../libsvn_client/revisions.c:104
+#: ../libsvn_wc/adm_ops.c:1197 ../libsvn_wc/adm_ops.c:1247
+#: ../libsvn_wc/copy.c:563 ../libsvn_wc/copy.c:624 ../libsvn_wc/entries.c:1301
+#: ../libsvn_wc/entries.c:2681 ../libsvn_wc/entries.c:2712
+#: ../svn/notify.c:1095
#, c-format
msgid "'%s' is not under version control"
msgstr "»%s« ist nicht unter Versionskontrolle"
-#: ../libsvn_client/cat.c:79
+#: ../libsvn_client/cat.c:82
#, c-format
msgid "'%s' refers to a directory"
msgstr "»%s« verweist auf ein Verzeichnis"
-#: ../libsvn_client/cat.c:89
+#: ../libsvn_client/cat.c:92
#, c-format
-msgid "'%s' has no base revision until it is committed"
-msgstr ""
+msgid "'%s' has no pristine version until it is committed"
+msgstr "»%s« hat keinen ursprünglichen Dateiinhalt, bis es übertragen wurde"
-#: ../libsvn_client/cat.c:153 ../libsvn_client/export.c:234
+#: ../libsvn_client/cat.c:147 ../libsvn_client/export.c:390
msgid "(local)"
msgstr "(lokal)"
-#: ../libsvn_client/cat.c:236
+#: ../libsvn_client/cat.c:247
#, c-format
msgid "URL '%s' refers to a directory"
msgstr "URL »%s« verweist auf auf ein Verzeichnis"
-#: ../libsvn_client/checkout.c:164 ../libsvn_client/export.c:1116
+#: ../libsvn_client/changelist.c:57
+msgid "Target changelist name must not be empty"
+msgstr "Name der Ziel-Änderungsliste darf nicht leer sein"
+
+#: ../libsvn_client/checkout.c:109 ../libsvn_client/export.c:1447
#, c-format
msgid "URL '%s' doesn't exist"
msgstr "Die URL »%s« existiert nicht"
-#: ../libsvn_client/checkout.c:168
+#: ../libsvn_client/checkout.c:113
#, c-format
msgid "URL '%s' refers to a file, not a directory"
msgstr "Die URL »%s« verweist auf eine Datei, nicht auf ein Verzeichnis"
-#: ../libsvn_client/checkout.c:204
+#: ../libsvn_client/checkout.c:147
#, c-format
-msgid "'%s' is already a working copy for a different URL; use 'svn update' to update it"
-msgstr "»%s« ist bereits eine Arbeitskopie für eine andere URL; Verwenden Sie »svn update« um sie zu aktualisieren"
+msgid "'%s' is already a working copy for a different URL"
+msgstr "»%s« ist bereits eine Arbeitskopie für eine andere URL"
-#: ../libsvn_client/checkout.c:212
+#: ../libsvn_client/checkout.c:155
#, c-format
msgid "'%s' already exists and is not a directory"
msgstr "»%s« existiert bereits und ist kein Verzeichnis"
-#: ../libsvn_client/cmdline.c:78
-#, c-format
-msgid "Improper relative URL '%s'"
-msgstr "Fehlerhafte relative URL »%s«"
-
-#: ../libsvn_client/cmdline.c:149
+#: ../libsvn_client/cmdline.c:104
#, c-format
msgid "All non-relative targets must have the same root URL"
msgstr "Alle nicht-relativen Ziele müssen die selbe Wurzel-URL haben"
-#: ../libsvn_client/commit.c:433
-#, c-format
-msgid "Unknown or unversionable type for '%s'"
-msgstr "Unbekannter oder unerwarteter Typ für »%s«"
+#: ../libsvn_client/cmdline.c:312
+msgid "Resolving '^/': no repository root found in the target arguments or in the current directory"
+msgstr "Auflösen von »^/«: Keine Wurzel eines Projektarchivs in den Zielparametern oder im Arbeitsverzeichnis gefunden"
-#: ../libsvn_client/commit.c:538
-msgid "New entry name required when importing a file"
-msgstr "Neuer Eintragsname erforderlich, wenn eine Datei importiert wird"
-
-#: ../libsvn_client/commit.c:573 ../libsvn_wc/adm_ops.c:567
-#: ../libsvn_wc/lock.c:140 ../libsvn_wc/wc_db_pdh.c:64
-#, c-format
-msgid "'%s' does not exist"
-msgstr "»%s« ist nicht vorhanden"
-
-#: ../libsvn_client/commit.c:655 ../libsvn_client/copy.c:471
-#: ../libsvn_client/merge.c:8975 ../libsvn_client/merge.c:10231
-#: ../libsvn_client/merge.c:10506 ../svnlook/main.c:1407
-#, c-format
-msgid "Path '%s' does not exist"
-msgstr "Pfad »%s« existiert nicht"
-
-#: ../libsvn_client/commit.c:795 ../libsvn_client/copy.c:482
-#: ../libsvn_client/copy.c:1021 ../libsvn_client/copy.c:1245
-#: ../libsvn_client/copy.c:1860
-#, c-format
-msgid "Path '%s' already exists"
-msgstr "Pfad »%s« existiert bereits"
-
-#: ../libsvn_client/commit.c:810
-#, c-format
-msgid "'%s' is a reserved name and cannot be imported"
-msgstr "»%s« ist ein reservierter Name und kann nicht importiert werden "
-
-#: ../libsvn_client/commit.c:848 ../libsvn_client/copy.c:1402
+#: ../libsvn_client/commit.c:155 ../libsvn_client/copy.c:1522
msgid "Commit failed (details follow):"
msgstr "Ãœbertragen schlug fehl (Details folgen):"
-#: ../libsvn_client/commit.c:856
+#: ../libsvn_client/commit.c:163
msgid "Commit succeeded, but other errors follow:"
msgstr "Ãœbertragen erfolgreich, aber andere Fehler folgen:"
-#: ../libsvn_client/commit.c:863
+#: ../libsvn_client/commit.c:170
msgid "Error unlocking locked dirs (details follow):"
msgstr "Fehler beim Entsperren von Verzeichnissen (Details folgen):"
-#: ../libsvn_client/commit.c:874
+#: ../libsvn_client/commit.c:181
msgid "Error bumping revisions post-commit (details follow):"
msgstr "Fehler beim Weiterschalten der Revisionen nach der Ãœbertragung (Details folgen):"
-#: ../libsvn_client/commit.c:968
-msgid "Are all targets part of the same working copy?"
-msgstr "Sind alle Ziele Teil der selben Arbeitskopie?"
-
-#: ../libsvn_client/commit.c:1007
-msgid "Cannot non-recursively commit a directory deletion of a directory with child nodes"
-msgstr "Das Löschen eines Verzeichnisses mit Untereinträgen kann nur rekursiv übertragen werden"
+#: ../libsvn_client/commit.c:314
+#, c-format
+msgid "Cannot delete the directory '%s' in a non-recursive commit because it has children"
+msgstr "Kann das Verzeichnis »%s« nicht mit einer nicht-rekursiv Übertragung löschen, da es Kindelemente hat"
-#: ../libsvn_client/commit.c:1057 ../svn/commit-cmd.c:71
+#: ../libsvn_client/commit.c:613
#, c-format
msgid "'%s' is a URL, but URLs cannot be commit targets"
msgstr "»%s« ist eine URL, aber URLs können nicht übertragen werden"
-#: ../libsvn_client/commit_util.c:63 ../libsvn_repos/commit.c:132
+#: ../libsvn_client/commit.c:735
+msgid ""
+"Commit can only commit to a single repository at a time.\n"
+"Are all targets part of the same working copy?"
+msgstr ""
+"Kann nur zu einem einzigen Projektarchiv gleichzeitig übertragen.\n"
+"Sind alle Ziele Teil der selben Arbeitskopie?"
+
+#: ../libsvn_client/commit.c:851
+#, c-format
+msgid "Cannot commit '%s' because it was moved from '%s' which is not part of the commit; both sides of the move must be committed together"
+msgstr "Kann »%s« nicht übertragen, da es von »%s« verschoben wurde, welches nicht Teil der Übertragung ist; Beide Seiten der Verschiebung müssen zusammen übertragen werden"
+
+#: ../libsvn_client/commit.c:882
+#, c-format
+msgid "Cannot commit '%s' because it was moved to '%s' which is not part of the commit; both sides of the move must be committed together"
+msgstr "Kann »%s« nicht übertragen, da es nach »%s« verschoben wurde, welches nicht Teil der Übertragung ist; Beide Seiten der Verschiebung müssen zusammen übertragen werden"
+
+#: ../libsvn_client/commit_util.c:94 ../libsvn_repos/commit.c:167
#, c-format
msgid "Directory '%s' is out of date"
msgstr "Verzeichnis »%s« ist veraltet"
-#: ../libsvn_client/commit_util.c:64 ../libsvn_repos/commit.c:134
+#: ../libsvn_client/commit_util.c:95 ../libsvn_repos/commit.c:169
#, c-format
msgid "File '%s' is out of date"
msgstr "Datei »%s« ist veraltet"
-#: ../libsvn_client/commit_util.c:288 ../libsvn_client/commit_util.c:479
-#: ../libsvn_client/commit_util.c:1032
+#: ../libsvn_client/commit_util.c:130
#, c-format
-msgid "Aborting commit: '%s' remains in conflict"
-msgstr "Übertragung abgebrochen: »%s« bleibt im Konflikt"
+msgid "Directory '%s' is locked in another working copy"
+msgstr "Verzeichnis »%s« ist in einer Arbeitskopie gesperrt"
-#: ../libsvn_client/commit_util.c:330
+#: ../libsvn_client/commit_util.c:131
#, c-format
-msgid "Aborting commit: '%s' remains in tree-conflict"
-msgstr "Übertragung abgebrochen: »%s« verursacht weiterhin einen Baumkonflikt"
+msgid "File '%s' is locked in another working copy"
+msgstr "Datei »%s« ist in einer anderen Arbeitskopie gesperrt"
-#: ../libsvn_client/commit_util.c:424 ../libsvn_client/commit_util.c:440
+#: ../libsvn_client/commit_util.c:166
#, c-format
-msgid "Unknown entry kind for '%s'"
-msgstr "»%s« hat einen unbekannten Eintragstyp"
+msgid "Changing directory '%s' is forbidden by the server"
+msgstr "Ändern des Verzeichnisses »%s« durch den Server zurückgewiesen"
-#: ../libsvn_client/commit_util.c:457
+#: ../libsvn_client/commit_util.c:167
#, c-format
-msgid "Entry '%s' has unexpectedly changed special status"
-msgstr "Der Spezialstatus von Eintrag »%s« hat sich unerwarteterweise geändert"
+msgid "Changing file '%s' is forbidden by the server"
+msgstr "Ändern der Datei »%s« durch den Server zurückgewiesen"
-#: ../libsvn_client/commit_util.c:654
+#: ../libsvn_client/commit_util.c:315
#, c-format
-msgid "'%s' is scheduled for addition, but is missing"
-msgstr "»%s« ist zum Hinzufügen vorgesehen, fehlt aber"
+msgid "Aborting commit: '%s' remains in tree-conflict"
+msgstr "Übertragung abgebrochen: »%s« verursacht weiterhin einen Baumkonflikt"
+
+#: ../libsvn_client/commit_util.c:666
+#, c-format
+msgid "Aborting commit: '%s' remains in conflict"
+msgstr "Übertragung abgebrochen: »%s« bleibt im Konflikt"
-#: ../libsvn_client/commit_util.c:935
+#: ../libsvn_client/commit_util.c:685
#, c-format
-msgid "'%s' is not under version control and is not part of the commit, yet its child '%s' is part of the commit"
-msgstr "»%s« ist weder unter Versionskontrolle noch Teil einer Übertragung, dennoch ist sein Kind »%s« Teil einer Übertragung"
+msgid "Node '%s' has unexpectedly changed kind"
+msgstr "Knoten »%s« hat unerwartet seinen Typ geändert"
-#: ../libsvn_client/commit_util.c:1052 ../libsvn_client/url.c:198
+#: ../libsvn_client/commit_util.c:726
#, c-format
-msgid "Entry for '%s' has no URL"
-msgstr "Eintrag für »%s« hat keine URL"
+msgid "'%s' is scheduled for addition, but is missing"
+msgstr "»%s« ist zum Hinzufügen vorgesehen, fehlt aber"
-# CHECKME
-#: ../libsvn_client/commit_util.c:1069
+#: ../libsvn_client/commit_util.c:1257
#, c-format
-msgid "'%s' is scheduled for addition within unversioned parent"
-msgstr "»%s« ist zum Hinzufügen innerhalb einer nicht versionierten Struktur vorgesehen"
+msgid "'%s' is not known to exist in the repository and is not part of the commit, yet its child '%s' is part of the commit"
+msgstr "»%s« ist weder im Projektarchiv bekannt noch Teil einer Übertragung, dennoch ist sein Kind »%s« Teil der Übertragung"
-#: ../libsvn_client/commit_util.c:1210
+#: ../libsvn_client/commit_util.c:1397
#, c-format
msgid "Cannot commit both '%s' and '%s' as they refer to the same URL"
msgstr "Kann »%s« und »%s« nicht übertragen, da beide auf dieselbe URL verweisen"
-#: ../libsvn_client/commit_util.c:1367
+#: ../libsvn_client/commit_util.c:1548
#, c-format
msgid "Commit item '%s' has copy flag but no copyfrom URL"
msgstr "Übertragenes Objekt »%s« ist als Kopie markiert, besitzt aber keine Quell-URL"
-#: ../libsvn_client/commit_util.c:1372
+#: ../libsvn_client/commit_util.c:1553
#, c-format
msgid "Commit item '%s' has copy flag but an invalid revision"
msgstr "Übertragenes Objekt »%s« ist als Kopie markiert, hat aber eine ungültige Revision"
-#: ../libsvn_client/commit_util.c:2080
+#: ../libsvn_client/commit_util.c:2015
msgid "Standard properties can't be set explicitly as revision properties"
msgstr "Standardeigenschaften können nicht explizit als Revisionseigenschaften gesetzt werden"
-#: ../libsvn_client/copy.c:500 ../libsvn_client/copy.c:1876
+#: ../libsvn_client/copy.c:439
#, c-format
-msgid "Path '%s' is not a directory"
-msgstr "Pfad »%s« ist kein Verzeichnis"
+msgid "Path '%s' exists, but is excluded"
+msgstr "Pfad »%s« existiert, ist aber ausgeschlossen"
-#: ../libsvn_client/copy.c:669 ../libsvn_client/copy.c:710
+#: ../libsvn_client/copy.c:445 ../libsvn_client/copy.c:1062
+#: ../libsvn_client/copy.c:1321 ../libsvn_client/copy.c:1896
+#: ../libsvn_client/import.c:862
#, c-format
-msgid "Path '%s' already exists, but is not a directory"
-msgstr "Pfad »%s« existiert bereits, ist aber kein Verzeichnis"
-
-#: ../libsvn_client/copy.c:775
-msgid "Source and destination URLs appear not to all point to the same repository."
-msgstr "Quellen- und Ziel-URL scheinen nicht auf das selbe Projektarchiv zu zeigen."
+msgid "Path '%s' already exists"
+msgstr "Pfad »%s« existiert bereits"
-#: ../libsvn_client/copy.c:985
+#: ../libsvn_client/copy.c:500
#, c-format
-msgid "Cannot move URL '%s' into itself"
-msgstr "Kann URL »%s« nicht auf sich selbst verschieben"
+msgid "Path '%s' already exists as unversioned node"
+msgstr "Pfad »%s« existiert als nicht versionierter Knoten"
-#: ../libsvn_client/copy.c:1007 ../libsvn_client/prop_commands.c:229
+#: ../libsvn_client/copy.c:522 ../libsvn_client/copy.c:532
+#: ../libsvn_client/copy.c:1912
#, c-format
-msgid "Path '%s' does not exist in revision %ld"
-msgstr "Pfad »%s« existiert nicht in Revision %ld"
+msgid "Path '%s' is not a directory"
+msgstr "Pfad »%s« ist kein Verzeichnis"
-#: ../libsvn_client/copy.c:1536
+#: ../libsvn_client/copy.c:571 ../libsvn_client/merge.c:10154
+#: ../svnlook/svnlook.c:1425
#, c-format
-msgid "Source URL '%s' is from foreign repository; leaving it as a disjoint WC"
-msgstr "Quell URL »%s« ist aus einem fremden Projektarchiv; lasse sie als getrennte Arbeitskopie"
+msgid "Path '%s' does not exist"
+msgstr "Pfad »%s« existiert nicht"
-#: ../libsvn_client/copy.c:1638 ../libsvn_client/copy.c:1650
-#: ../libsvn_wc/adm_ops.c:941 ../libsvn_wc/copy.c:691
+#: ../libsvn_client/copy.c:741 ../libsvn_client/copy.c:782
#, c-format
-msgid "'%s' is already under version control"
-msgstr "»%s« befindet sich bereits unter Versionskontrolle"
+msgid "Path '%s' already exists, but is not a directory"
+msgstr "Pfad »%s« existiert bereits, ist aber kein Verzeichnis"
-#: ../libsvn_client/copy.c:1671
+#: ../libsvn_client/copy.c:843
+msgid "Source and destination URLs appear not to point to the same repository."
+msgstr "Quellen- und Ziel-URL scheinen nicht auf das selbe Projektarchiv zu zeigen."
+
+#: ../libsvn_client/copy.c:1052 ../libsvn_client/prop_commands.c:167
#, c-format
-msgid "Entry for '%s' exists (though the working file is missing)"
-msgstr "Eintrag für »%s« existiert (die Arbeitsdatei fehlt jedoch)"
+msgid "Path '%s' does not exist in revision %ld"
+msgstr "Pfad »%s« existiert nicht in Revision %ld"
-#: ../libsvn_client/copy.c:1844
+#: ../libsvn_client/copy.c:1880
#, c-format
msgid "Path '%s' not found in revision %ld"
msgstr "Pfad »%s« wurde in Revision %ld nicht gefunden"
-#: ../libsvn_client/copy.c:1849
+#: ../libsvn_client/copy.c:1885
#, c-format
msgid "Path '%s' not found in head revision"
msgstr "Pfad »%s« wurde in der HEAD-Revision nicht gefunden"
-#: ../libsvn_client/copy.c:1970
+#: ../libsvn_client/copy.c:2013
msgid "Cannot mix repository and working copy sources"
msgstr "Quellen aus dem Projektarchiv und einer Arbeitskopie können nicht gemischt werden"
-#: ../libsvn_client/copy.c:2022
+#: ../libsvn_client/copy.c:2065
#, c-format
msgid "Cannot copy path '%s' into its own child '%s'"
msgstr "Kann Pfad »%s« nicht in sein eigenes Kind »%s« kopieren"
-#: ../libsvn_client/copy.c:2054
+#: ../libsvn_client/copy.c:2101
#, c-format
-msgid "Cannot move the file external at '%s'; please propedit the svn:externals description that created it"
-msgstr "Externer Dateiverweis bei »%s« kann nicht verschoben werden; bitte bearbeiten Sie die für die Erstellung verantwortliche Eigenschaft svn:externals"
+msgid "Cannot move the external at '%s'; please edit the svn:externals property on '%s'."
+msgstr "Externer Verweis »%s« kann nicht verschoben werden; bitte bearbeiten Sie die Eigenschaft »svn:externals« von »%s«"
-#: ../libsvn_client/copy.c:2069
+#: ../libsvn_client/copy.c:2116
msgid "Moves between the working copy and the repository are not supported"
msgstr "Verschiebungen zwischen der Arbeitskopie und dem Projektarchiv sind nicht unterstützt"
-#: ../libsvn_client/copy.c:2083
+#: ../libsvn_client/copy.c:2131
+#, c-format
+msgid "Cannot move URL '%s' into itself"
+msgstr "Kann URL »%s« nicht auf sich selbst verschieben"
+
+#: ../libsvn_client/copy.c:2132
#, c-format
msgid "Cannot move path '%s' into itself"
msgstr "Kann »%s« nicht auf sich selbst verschieben"
-#: ../libsvn_client/copy.c:2152
+#: ../libsvn_client/copy.c:2199
#, c-format
msgid "'%s' does not have a URL associated with it"
msgstr "»%s« hat keine zugehörige URL"
-#: ../libsvn_client/delete.c:59
+#: ../libsvn_client/copy_foreign.c:131 ../libsvn_client/copy_foreign.c:282
+#: ../libsvn_client/externals.c:904 ../libsvn_client/externals.c:1114
+#: ../libsvn_wc/update_editor.c:1124
+#, c-format
+msgid "Path '%s' is not in the working copy"
+msgstr "Pfad »%s« ist nicht in der Arbeitskopie enthalten"
+
+#: ../libsvn_client/copy_foreign.c:372 ../libsvn_client/export.c:814
+#: ../libsvn_client/repos_diff.c:998 ../libsvn_fs_fs/dag.c:1051
+#: ../libsvn_ra_svn/client.c:1208 ../libsvn_wc/diff_editor.c:1981
+#: ../libsvn_wc/diff_editor.c:2060 ../libsvn_wc/externals.c:651
+#: ../libsvn_wc/update_editor.c:4279
+#, c-format
+msgid "Checksum mismatch for '%s'"
+msgstr "Prüfsummenfehler für »%s«"
+
+#: ../libsvn_client/copy_foreign.c:479
+#, c-format
+msgid "'%s' is not a valid location inside a repository"
+msgstr "»%s« ist kein gültiger Pfad in einem Projektarchiv"
+
+#: ../libsvn_client/copy_foreign.c:510
+#, c-format
+msgid "Can't add '%s', because no parent directory is found"
+msgstr "Kann »%s« nicht hinzufügen, da kein Elternverzeichnis gefunden wurde"
+
+#: ../libsvn_client/delete.c:76
#, c-format
msgid "'%s' is in the way of the resource actually under version control"
msgstr "»%s« ist der Ressource, die sich unter Versionskontrolle befindet, im Weg"
-#: ../libsvn_client/delete.c:74
+#: ../libsvn_client/delete.c:95
#, c-format
msgid "'%s' has local modifications -- commit or revert them first"
msgstr "»%s« hat lokale Änderungen -- zuerst übertragen oder zurücksetzen"
-#: ../libsvn_client/delete.c:104
+#: ../libsvn_client/delete.c:127
#, c-format
-msgid "Cannot remove the file external at '%s'; please propedit or propdel the svn:externals description that created it"
-msgstr "Externer Dateiverweis bei »%s« kann nicht entfernt werden; bitte bearbeiten oder löschen Sie die für die Erstellung verantwortliche Eigenschaft svn:externals"
-
-#: ../libsvn_client/delete.c:339 ../libsvn_client/locking_commands.c:200
-#: ../svn/delete-cmd.c:68 ../svn/diff-cmd.c:288 ../svn/lock-cmd.c:116
-#, c-format
-msgid "Cannot mix repository and working copy targets"
-msgstr "Ziele aus dem Projektarchiv und einer Arbeitskopie können nicht gemischt werden"
+msgid "Cannot remove the external at '%s'; please edit or delete the svn:externals property on '%s'"
+msgstr "Externer Verweis »%s« kann nicht entfernt werden; bitte bearbeiten oder löschen Sie die Eigenschaft »svn:externals« von »%s«"
-#: ../libsvn_client/deprecated.c:714 ../svn/move-cmd.c:65
+#: ../libsvn_client/deprecated.c:862 ../svn/move-cmd.c:65
msgid "Cannot specify revisions (except HEAD) with move operations"
msgstr "Andere Revisionen (als HEAD) sind bei Verschiebeoperationen nicht zugelassen"
-#: ../libsvn_client/deprecated.c:1331
+#: ../libsvn_client/deprecated.c:1624
msgid "No commits in repository"
msgstr "Keine Ãœbertragungen im Projektarchiv"
-#: ../libsvn_client/deprecated.c:2094 ../libsvn_wc/deprecated.c:3370
+#: ../libsvn_client/deprecated.c:2930 ../libsvn_wc/deprecated.c:3953
msgid "Non-recursive relocation not supported"
msgstr "Nicht-rekursives Umplatzieren nicht unterstützt"
-#: ../libsvn_client/diff.c:136
-#, c-format
-msgid " Reverse-merged %s:r%s%s"
-msgstr " Rückgängiges Zusammenführen: %s:r%s%s"
-
-#: ../libsvn_client/diff.c:151
-#, c-format
-msgid " Merged %s:r%s%s"
-msgstr " Zusammengeführt %s:r%s%s"
-
-#: ../libsvn_client/diff.c:161 ../libsvn_diff/diff_file.c:1226
-#: ../libsvn_diff/diff_file.c:1242
+#. Utilities
+#: ../libsvn_client/diff.c:64
#, c-format
msgid "Path '%s' must be an immediate child of the directory '%s'"
msgstr "Pfad »%s« muss ein unmittelbares Kind von Verzeichnis »%s« sein"
-#: ../libsvn_client/diff.c:359
+#: ../libsvn_client/diff.c:258
#, c-format
msgid "%s\t(revision %ld)"
msgstr "%s\t(Revision %ld)"
-#: ../libsvn_client/diff.c:361
+#: ../libsvn_client/diff.c:260
#, c-format
msgid "%s\t(working copy)"
msgstr "%s\t(Arbeitskopie)"
-#: ../libsvn_client/diff.c:637
+#: ../libsvn_client/diff.c:512 ../svnlook/svnlook.c:795
#, c-format
msgid "%sProperty changes on: %s%s"
msgstr "%sEigenschaftsänderungen: %s%s"
-#: ../libsvn_client/diff.c:921
+#: ../libsvn_client/diff.c:760
#, c-format
msgid "Cannot display: file marked as a binary type.%s"
msgstr "Kann nicht anzeigen: Dateityp ist als binär angegeben.%s"
-#: ../libsvn_client/diff.c:1326
-#, c-format
-msgid "Path '%s' has no URL"
-msgstr "Pfad »%s« hat keine URL"
-
-#: ../libsvn_client/diff.c:1395 ../libsvn_client/merge.c:6304
-#: ../libsvn_client/merge.c:8984
+#: ../libsvn_client/diff.c:1265 ../libsvn_client/merge.c:7203
+#: ../libsvn_client/merge.c:10556
msgid "Not all required revisions are specified"
msgstr "Es sind nicht alle erforderlichen Revisionen angegeben"
-# Was soll eine 'pegged diff' sein?
-# Gemeint ist, wenn bei einem svn diff ein @REV angegeben wurde (also die Revision, in der die Datei zuerst gesucht wird)
-#: ../libsvn_client/diff.c:1410
-msgid "At least one revision must be non-local for a pegged diff"
-msgstr "Wenn eine Basisrevision angegeben wurde, muss zumindest eine Revision auf dem Server sein"
+#: ../libsvn_client/diff.c:1279
+msgid "At least one revision must be something other than BASE or WORKING when diffing a URL"
+msgstr "Beim Vergleichen einer URL muss mindestens eine Revision etwas anderes sein als »BASE« oder »WORKING«"
+
+#: ../libsvn_client/diff.c:1316
+#, c-format
+msgid "Diff target '%s' was not found in the repository at revision '%ld'"
+msgstr "Ziel für Vergleich »%s« wurde im Projektarchiv in Revision »%ld« nicht gefunden"
+
+#: ../libsvn_client/diff.c:1321
+#, c-format
+msgid "Diff target '%s' was not found in the repository at revision '%ld' or '%ld'"
+msgstr "Ziel für Vergleich »%s« wurde im Projektarchiv in Revision »%ld« oder »%ld« nicht gefunden"
+
+#: ../libsvn_client/diff.c:1496
+#, c-format
+msgid "Diff target '%s' was not found in the repository at revisions '%ld' and '%ld'"
+msgstr "Ziel für Vergleich »%s« wurde im Projektarchiv in Revisionen »%ld« und »%ld« nicht gefunden"
-#: ../libsvn_client/diff.c:1518 ../libsvn_client/diff.c:1530
+#: ../libsvn_client/diff.c:1501
#, c-format
-msgid "'%s' was not found in the repository at revision %ld"
-msgstr "»%s« wurde im Projektarchiv in Revision %ld nicht gefunden"
+msgid "Diff targets '%s' and '%s' were not found in the repository at revisions '%ld' and '%ld'"
+msgstr "Ziele für Vergleich »%s« und »%s« wurden im Projektarchiv in Revisionen »%ld« und »%ld« nicht gefunden"
-#: ../libsvn_client/diff.c:1588
-msgid "Sorry, svn_client_diff5 was called in a way that is not yet supported"
-msgstr "svn_client_diff5 wurde in einer Art aufgerufen, die noch nicht unterstützt wird"
+#: ../libsvn_client/diff.c:1575
+msgid "Sorry, svn_client_diff6 was called in a way that is not yet supported"
+msgstr "Leider wurde svn_client_diff6 in einer Art aufgerufen, die noch nicht unterstützt wird"
-#: ../libsvn_client/diff.c:1630
+#: ../libsvn_client/diff.c:1616
msgid "Only diffs between a path's text-base and its working files are supported at this time"
msgstr "Derzeit werden nur Vergleiche zwischen der Textbasis und den Arbeitsdateien eines Pfades unterstützt"
-#: ../libsvn_client/diff.c:1816 ../libsvn_client/switch.c:132
+#: ../libsvn_client/diff.c:2221
+msgid "Summarized diffs are only supported between a path's text-base and its working files at this time"
+msgstr "Derzeit werden Zusammenfassungen für Vergleiche nur zwischen der Textbasis und den Arbeitsdateien eines Pfades unterstützt"
+
+#: ../libsvn_client/diff.c:2582 ../libsvn_client/diff.c:2648
+msgid "Cannot ignore properties and show only properties at the same time"
+msgstr "Kann nicht gleichzeitig Eigenschaften ignorieren und nur Eigenschaften anzeigen"
+
+#: ../libsvn_client/diff_local.c:609
#, c-format
-msgid "Directory '%s' has no URL"
-msgstr "Verzeichnis »%s« hat keine URL"
+msgid "'%s' is not the same node kind as '%s'"
+msgstr "»%s« hat nicht den gleichen Knotentyp wie »%s«"
-#: ../libsvn_client/diff.c:2064
-msgid "Summarizing diff can only compare repository to repository"
-msgstr "Zusammenfassender Vergleich kann nur ein Projektarchiv mit einem Projektarchiv vergleichen"
+#: ../libsvn_client/diff_local.c:632 ../libsvn_wc/props.c:1568
+#, c-format
+msgid "'%s' is not a file or directory"
+msgstr "»%s« ist weder eine Datei noch ein Verzeichnis"
-#: ../libsvn_client/export.c:92
+#: ../libsvn_client/export.c:102
#, c-format
msgid "'%s' is not a valid EOL value"
msgstr "»%s« ist kein gültiger EOL Wert"
-#: ../libsvn_client/export.c:377
+#: ../libsvn_client/export.c:240
msgid "Destination directory exists, and will not be overwritten unless forced"
msgstr "Zielverzeichnis existiert und kann nur mittels »--force« überschrieben werden"
-#: ../libsvn_client/export.c:532 ../libsvn_client/export.c:678
-#, c-format
-msgid "'%s' exists and is not a directory"
-msgstr "»%s« existiert und ist kein Verzeichnis"
-
-#: ../libsvn_client/export.c:536 ../libsvn_client/export.c:682
+#: ../libsvn_client/export.c:265 ../libsvn_client/export.c:1527
+#: ../libsvn_wc/adm_crawler.c:1204 ../libsvn_wc/conflicts.c:1293
+#: ../libsvn_wc/copy.c:586 ../libsvn_wc/crop.c:236 ../libsvn_wc/crop.c:327
+#: ../libsvn_wc/info.c:403 ../libsvn_wc/node.c:704 ../libsvn_wc/props.c:227
+#: ../libsvn_wc/status.c:2679 ../libsvn_wc/wc_db.c:2576
+#: ../libsvn_wc/wc_db.c:2770 ../libsvn_wc/wc_db.c:2794
+#: ../libsvn_wc/wc_db.c:2952 ../libsvn_wc/wc_db.c:3950
+#: ../libsvn_wc/wc_db.c:6001 ../libsvn_wc/wc_db.c:6321
+#: ../libsvn_wc/wc_db.c:6482 ../libsvn_wc/wc_db.c:6637
+#: ../libsvn_wc/wc_db.c:7672 ../libsvn_wc/wc_db.c:8631
+#: ../libsvn_wc/wc_db.c:9294 ../libsvn_wc/wc_db.c:9923
+#: ../libsvn_wc/wc_db.c:10070 ../libsvn_wc/wc_db.c:10210
+#: ../libsvn_wc/wc_db.c:10560 ../libsvn_wc/wc_db.c:12047
+#: ../libsvn_wc/wc_db.c:12123 ../libsvn_wc/wc_db.c:13657
+#: ../libsvn_wc/wc_db.c:13717 ../libsvn_wc/wc_db.c:13855
+#: ../libsvn_wc/wc_db.c:14013 ../libsvn_wc/wc_db.c:14450
+#: ../libsvn_wc/wc_db.c:15231
#, c-format
-msgid "'%s' already exists"
-msgstr "»%s« existiert bereits"
-
-#: ../libsvn_client/export.c:866 ../libsvn_wc/update_editor.c:4161
-#, c-format
-msgid ""
-"Checksum mismatch for '%s':\n"
-" expected: %s\n"
-" actual: %s\n"
-msgstr ""
-"Prüfsummenfehler für Datei »%s«:\n"
-" Erwartet: %s\n"
-" Tatsächlich: %s\n"
-
-#: ../libsvn_client/externals.c:364
-#, c-format
-msgid "Cannot insert a file external from '%s' into a working copy from a different repository rooted at '%s'"
-msgstr "Ein externer Dateiverweis von »%s« kann nicht in die Arbeitskopie eines anderen Projektarchivs mit der Wurzel »%s« eingefügt werden"
+msgid "The node '%s' was not found."
+msgstr "Der Knoten »%s« wurde nicht gefunden."
-#: ../libsvn_client/externals.c:401
+#: ../libsvn_client/export.c:285 ../libsvn_client/export.c:1184
+#: ../libsvn_client/export.c:1241
#, c-format
-msgid "The file external from '%s' cannot overwrite the existing versioned item at '%s'"
-msgstr "Der externe Dateiverweis von »%s« kann nicht das existierende versionierte Objekt bei »%s« überschreiben"
+msgid "Destination file '%s' exists, and will not be overwritten unless forced"
+msgstr "Zieldatei »%s« existiert und kann nur mittels »--force« überschrieben werden"
-#: ../libsvn_client/externals.c:427
+#: ../libsvn_client/export.c:291 ../libsvn_client/export.c:1189
+#: ../libsvn_client/export.c:1246
#, c-format
-msgid "The file external from '%s' cannot be written to '%s' while '%s' remains in conflict"
-msgstr "Der externe Dateiverweis von »%s« kann nicht in »%s« geschrieben werden, solange »%s« in Konflikt steht"
+msgid "Destination '%s' exists. Cannot overwrite directory with non-directory"
+msgstr "Ziel »%s« existiert. Kann Verzeichnis nicht mit etwas überschreiben, was kein Verzeichnis ist"
-#: ../libsvn_client/externals.c:536
+#: ../libsvn_client/export.c:473 ../libsvn_client/export.c:622
+#: ../libsvn_client/export.c:1078
#, c-format
-msgid "URL '%s' does not begin with a scheme"
-msgstr "Die URL »%s« beginnt nicht mit einem Schema"
+msgid "'%s' exists and is not a directory"
+msgstr "»%s« existiert und ist kein Verzeichnis"
-#: ../libsvn_client/externals.c:603
+#: ../libsvn_client/export.c:477 ../libsvn_client/export.c:626
+#: ../libsvn_client/export.c:1082
#, c-format
-msgid "Illegal parent directory URL '%s'"
-msgstr "Illegale URL des übergeordneten Verzeichnisses »%s«"
+msgid "'%s' already exists"
+msgstr "»%s« existiert bereits"
-#: ../libsvn_client/externals.c:639
+#: ../libsvn_client/externals.c:406
#, c-format
-msgid "Illegal repository root URL '%s'"
-msgstr "Illegale Projektarchivwurzel-URL »%s«"
+msgid "Cannot insert a file external defined on '%s' into the working copy '%s'."
+msgstr "Kann externen Dateiverweis von »%s« nicht in die Arbeitskopie »%s« einfügen."
-#: ../libsvn_client/externals.c:686
+#: ../libsvn_client/externals.c:431
#, c-format
-msgid "The external relative URL '%s' cannot have backpaths, i.e. '..'"
-msgstr "Die externe relative URL »%s« darf keinen Verweis auf übergeordnete Pfade haben, d.h. »..«"
+msgid "The file external from '%s' cannot overwrite the existing versioned item at '%s'"
+msgstr "Der externe Dateiverweis von »%s« kann nicht das existierende versionierte Objekt bei »%s« überschreiben"
-#: ../libsvn_client/externals.c:714
+#: ../libsvn_client/externals.c:444
#, c-format
-msgid "Unrecognized format for the relative external URL '%s'"
-msgstr "Unbekanntes Format für die relative externe URL »%s«"
+msgid "The file external '%s' can not be created because the node exists."
+msgstr "Der externe Dateiverweis auf »%s« kann nicht erstellt werden, da schon ein Knoten existiert"
-#: ../libsvn_client/externals.c:806
+#: ../libsvn_client/externals.c:703
#, c-format
msgid "URL '%s' at revision %ld doesn't exist"
msgstr "URL »%s« existiert nicht in Revision %ld"
-#: ../libsvn_client/externals.c:812
+#: ../libsvn_client/externals.c:708
#, c-format
msgid "URL '%s' at revision %ld is not a file or a directory"
msgstr "URL »%s« in Revision %ld ist weder eine Datei noch ein Verzeichnis"
-#: ../libsvn_client/externals.c:1111
+#: ../libsvn_client/externals.c:786
+#, c-format
+msgid "Unsupported external: URL of file external '%s' is not in repository '%s'"
+msgstr "Nicht unterstützter externer Verweis: URL von Dateiverweis »%s« gehört nicht zum Projektarchiv »%s«"
+
+#: ../libsvn_client/externals.c:979
#, c-format
msgid "Traversal of '%s' found no ambient depth"
msgstr "Durchlauf von »%s« fand keine äußere Tiefe"
-#: ../libsvn_client/externals.c:1262
+#: ../libsvn_client/import.c:159
#, c-format
-msgid "'%s' is not a URL"
-msgstr "»%s« ist keine URL"
+msgid "%s property on '%s' contains unrecognized EOL-style '%s'"
+msgstr "Eigenschaft »%s« von »%s« enthält nicht erkannten Zeilenendstil »%s«"
-#: ../libsvn_client/info.c:103 ../libsvn_wc/crop.c:353
-#: ../libsvn_wc/props.c:271 ../libsvn_wc/update_editor.c:5358
-#: ../libsvn_wc/wc_db.c:596 ../libsvn_wc/wc_db.c:2039
-#: ../libsvn_wc/wc_db.c:2132 ../libsvn_wc/wc_db.c:2191
-#: ../libsvn_wc/wc_db.c:2215 ../libsvn_wc/wc_db.c:5456
-#: ../libsvn_wc/wc_db.c:5884 ../libsvn_wc/wc_db.c:6834
-#: ../libsvn_wc/wc_db.c:6952 ../libsvn_wc/wc_db.c:7016
-#: ../libsvn_wc/wc_db.c:7228 ../libsvn_wc/wc_db.c:8277
-#: ../libsvn_wc/wc_db.c:8457 ../libsvn_wc/wc_db.c:8795
+#: ../libsvn_client/import.c:489
#, c-format
-msgid "The node '%s' was not found."
-msgstr "Der Knoten »%s« wurde nicht gefunden."
+msgid "Unknown or unversionable type for '%s'"
+msgstr "Unbekannter oder unerwarteter Typ für »%s«"
+
+#: ../libsvn_client/import.c:707
+msgid "New entry name required when importing a file"
+msgstr "Neuer Eintragsname erforderlich, wenn eine Datei importiert wird"
-#: ../libsvn_client/info.c:565
+#: ../libsvn_client/import.c:758 ../libsvn_client/patch.c:3016
+#: ../libsvn_client/patch.c:3028 ../libsvn_wc/delete.c:93
+#: ../libsvn_wc/lock.c:121 ../libsvn_wc/wc_db_wcroot.c:77
#, c-format
-msgid "Server does not support retrieving information about the repository root"
-msgstr "Server unterstützt die Abfrage von Informationen über die Projektarchivwurzel nicht"
+msgid "'%s' does not exist"
+msgstr "»%s« ist nicht vorhanden"
-#: ../libsvn_client/info.c:572 ../libsvn_client/info.c:587
-#: ../libsvn_client/info.c:597
+#: ../libsvn_client/import.c:891
#, c-format
-msgid "URL '%s' non-existent in revision %ld"
-msgstr "URL »%s« existiert nicht in Revision %ld"
+msgid "'%s' is a reserved name and cannot be imported"
+msgstr "»%s« ist ein reservierter Name und kann nicht importiert werden "
-#: ../libsvn_client/list.c:249
+#: ../libsvn_client/info.c:310 ../libsvn_client/list.c:376
#, c-format
-msgid "URL '%s' non-existent in that revision"
-msgstr "URL »%s« existiert nicht in dieser Revision"
+msgid "URL '%s' non-existent in revision %ld"
+msgstr "URL »%s« existiert nicht in Revision %ld"
-#: ../libsvn_client/locking_commands.c:237
+#: ../libsvn_client/locking_commands.c:266
+#: ../libsvn_client/locking_commands.c:292
msgid "No common parent found, unable to operate on disjoint arguments"
msgstr "Kein gemeinsamer Vorgänger gefunden. Kann nicht mit disjunkten Pfaden arbeiten"
-#: ../libsvn_client/locking_commands.c:282 ../libsvn_client/merge.c:9006
-#: ../libsvn_client/merge.c:9013 ../libsvn_client/merge.c:10240
-#: ../libsvn_client/merge.c:10515 ../libsvn_client/ra.c:484
-#: ../libsvn_client/ra.c:678 ../libsvn_client/update.c:99
+#: ../libsvn_client/locking_commands.c:325
#, c-format
-msgid "'%s' has no URL"
-msgstr "»%s« hat keine URL"
+msgid "The node '%s' is not a file"
+msgstr "Der Knoten »%s« ist keine Datei"
-#: ../libsvn_client/locking_commands.c:305
+#: ../libsvn_client/locking_commands.c:345
msgid "Unable to lock/unlock across multiple repositories"
msgstr "Unmöglich über mehrere Projektarchive zu (ent)sperren"
-#: ../libsvn_client/locking_commands.c:346
+#: ../libsvn_client/locking_commands.c:400
#, c-format
msgid "'%s' is not locked in this working copy"
msgstr "»%s« ist in dieser Arbeitskopie nicht gesperrt"
-#: ../libsvn_client/locking_commands.c:391
+#: ../libsvn_client/locking_commands.c:450
#, c-format
msgid "'%s' is not locked"
msgstr "»%s« ist nicht gesperrt"
-#: ../libsvn_client/locking_commands.c:425 ../libsvn_fs/fs-loader.c:1269
-#: ../libsvn_ra/ra_loader.c:1056
+#: ../libsvn_client/locking_commands.c:483 ../libsvn_fs/fs-loader.c:1413
+#: ../libsvn_ra/ra_loader.c:1074
msgid "Lock comment contains illegal characters"
msgstr "Sperrkommentar enthält illegale Zeichen"
-#: ../libsvn_client/log.c:299 ../libsvn_client/log.c:357
-msgid "Missing required revision specification"
-msgstr "Es wurde keine Revision angegeben"
+#: ../libsvn_client/log.c:309
+msgid "No valid target found"
+msgstr "Kein gültiges Ziel gefunden"
-#: ../libsvn_client/log.c:401
+#: ../libsvn_client/log.c:340
#, c-format
msgid "'%s' is not a relative path"
msgstr "»%s« ist kein relativer Pfad"
-#: ../libsvn_client/log.c:422
+#: ../libsvn_client/log.c:366
msgid "When specifying working copy paths, only one target may be given"
-msgstr "Bei Pfaden innerhalb der Arbeitskopie darf nur ein Ziel angegeben werden"
+msgstr "Bei der Angabe von Arbeitskopiepfaden darf nur ein Ziel angegeben werden"
-#: ../libsvn_client/log.c:448 ../libsvn_client/status.c:388
-#, c-format
-msgid "Entry '%s' has no URL"
-msgstr "Eintrag »%s« hat keine URL"
+#: ../libsvn_client/log.c:390 ../libsvn_client/revisions.c:189
+msgid "PREV, BASE, or COMMITTED revision keywords are invalid for URL"
+msgstr "PREV, BASE oder COMMITTED Revisions-Schlüsselwörter sind für die URL ungültig"
-#: ../libsvn_client/merge.c:179
-#, c-format
-msgid "URLs have no scheme ('%s' and '%s')"
-msgstr "Die URLs haben kein Schema (»%s« und »%s«)"
+#: ../libsvn_client/log.c:523 ../libsvn_client/log.c:830
+msgid "Missing required revision specification"
+msgstr "Es wurde keine Revision angegeben"
-#: ../libsvn_client/merge.c:185 ../libsvn_client/merge.c:191
+#: ../libsvn_client/merge.c:443
#, c-format
-msgid "URL has no scheme: '%s'"
-msgstr "URL hat kein Schema: »%s«"
+msgid "URL '%s' of '%s' is not in repository '%s'"
+msgstr "URL »%s« von »%s« ist nicht im Projektarchiv »%s«"
-#: ../libsvn_client/merge.c:198
+#: ../libsvn_client/merge.c:480
#, c-format
-msgid "Access scheme mixtures not yet supported ('%s' and '%s')"
-msgstr "Gemischte Zugriffsverfahren werden noch nicht unterstützt (»%s« and »%s«)"
+msgid "'%s' must be from the same repository as '%s'"
+msgstr "»%s« muss aus dem selben Projektarchiv wie »%s« stammen"
# Lustig: .working wird nicht übersetzt, .merge-left aber schon
# und das auch noch inkonsistent...
#. xgettext: the '.working', '.merge-left.r%ld' and
#. '.merge-right.r%ld' strings are used to tag onto a file
#. name in case of a merge conflict
-#: ../libsvn_client/merge.c:1482
-msgid ".working"
-msgstr ".working"
+#: ../libsvn_client/merge.c:2050
+#, c-format
+msgid ".working%s%s"
+msgstr ".working%s%s"
-#: ../libsvn_client/merge.c:1484
+#: ../libsvn_client/merge.c:2053
#, c-format
-msgid ".merge-left.r%ld"
-msgstr ".merge-links.r%ld"
+msgid ".merge-left.r%ld%s%s"
+msgstr ".merge-left.r%ld%s%s"
-#: ../libsvn_client/merge.c:1487
+#: ../libsvn_client/merge.c:2057
#, c-format
-msgid ".merge-right.r%ld"
-msgstr ".merge-rechts.r%ld"
+msgid ".merge-right.r%ld%s%s"
+msgstr ".merge-right.r%ld%s%s"
-#: ../libsvn_client/merge.c:3957
+#: ../libsvn_client/merge.c:4708
msgid "Cannot reverse-merge a range from a path's own future history; try updating first"
msgstr "Kann keinen Bereich aus der zukünftigen Geschichte des Pfades rückwärts zusammenführen; versuchen Sie zuerst zu aktualisieren"
-#: ../libsvn_client/merge.c:4661
+#: ../libsvn_client/merge.c:5443
#, c-format
msgid ""
"One or more conflicts were produced while merging r%ld:%ld into\n"
@@ -1897,214 +2003,280 @@ msgstr ""
"Lösen Sie alle Konflikte auf und starten Sie die Zusammenführung\n"
"erneut, um die fehlenden Revisionen zusammenzuführen"
-#: ../libsvn_client/merge.c:5820
+#: ../libsvn_client/merge.c:6258
+#, c-format
+msgid "Invalid mergeinfo detected on '%s', merge tracking not possible"
+msgstr "Ungültige Zusammenführungsinformationen in »%s« entdeckt, Zusammenführungsverfolgung nicht möglich"
+
+#: ../libsvn_client/merge.c:6407
msgid "Merge tracking not allowed with missing subtrees; try restoring these items first:\n"
-msgstr ""
+msgstr "Zusammenführungsverfolgung nicht erlaubt bei fehlenden Unterbäumen; versuchen Sie diese Elemente erst wiederherzustellen:\n"
+
+#: ../libsvn_client/merge.c:7407
+#, c-format
+msgid "Invalid mergeinfo detected on merge target '%s', merge tracking not possible"
+msgstr "Ungültige Zusammenführungsinformationen im Zusammenführungsziel »%s« entdeckt, Zusammenführungsverfolgung nicht möglich"
-#: ../libsvn_client/merge.c:8502
+#: ../libsvn_client/merge.c:9726
msgid "Use of two URLs is not compatible with mergeinfo modification"
msgstr "Die Verwendung zweier URLs ist nicht kompatibel mit Änderungen der Zusammenführungsinformationen"
-#: ../libsvn_client/merge.c:8509 ../libsvn_client/merge.c:8793
+#: ../libsvn_client/merge.c:9733 ../libsvn_client/merge.c:10068
msgid "Merge from foreign repository is not compatible with mergeinfo modification"
msgstr "Die Zusammenführung aus fremdem Projektarchiv ist nicht kompatibel mit Änderungen der Zusammenführungsinformationen"
-#: ../libsvn_client/merge.c:8522 ../libsvn_client/merge.c:9021
-#: ../libsvn_client/merge.c:10523
+#: ../libsvn_client/merge.c:10161 ../libsvn_client/merge.c:10304
#, c-format
msgid "Merge target '%s' does not exist in the working copy"
msgstr "Zusammenführungsziel »%s« ist nicht in der Arbeitskopie enthalten"
-#: ../libsvn_client/merge.c:8896
+#: ../libsvn_client/merge.c:10184
+msgid "Cannot determine revision of working copy"
+msgstr "Die Revision der Arbeitskopie kann nicht bestimmt werden"
+
+#: ../libsvn_client/merge.c:10190
+#, c-format
+msgid "Cannot merge into mixed-revision working copy [%ld:%ld]; try updating first"
+msgstr "Kann nicht in eine Arbeitskopie mit verschiedenen Revisionen zusammenführen [%ld:%ld], versuchen Sie erst zu aktualisieren"
+
+#: ../libsvn_client/merge.c:10205
msgid "Cannot merge into a working copy with a switched subtree"
msgstr "Kann nicht in eine Arbeitskopie mit umgestelltem Unterbaum zusammenführen"
-#: ../libsvn_client/merge.c:8901
+#: ../libsvn_client/merge.c:10221
msgid "Cannot merge into a working copy that has local modifications"
msgstr "Kann nicht in eine Arbeitskopie mit lokalen Änderungen zusammenführen"
-#: ../libsvn_client/merge.c:8918
-msgid "Cannot determine revision of working copy"
-msgstr "Die Revision der Arbeitskopie kann nicht bestimmt werden"
-
-#: ../libsvn_client/merge.c:8924
+#: ../libsvn_client/merge.c:10241 ../svn/merge-cmd.c:60
#, c-format
-msgid "Cannot merge into mixed-revision working copy [%lu:%lu]; try updating first"
-msgstr "Kann nicht in eine Arbeitskopie mit verschiedenen Revisionen zusammenführen [%lu:%lu], versuchen Sie erst zu aktualisieren"
+msgid "Invalid merge source '%s'; a working copy path can only be used with a repository revision (a number, a date, or head)"
+msgstr "Ungültige Quelle für Zusammenführung »%s«; ein Arbeitskopiepfad kann nur mit einer Revision im Projektarchiv verwendet werden (eine Zahl, ein Datum oder »HEAD«)"
-#: ../libsvn_client/merge.c:8987 ../svn/merge-cmd.c:348
+#: ../libsvn_client/merge.c:10559 ../svn/merge-cmd.c:127
msgid "Merge sources must both be either paths or URLs"
msgstr "Zusammenführungsquellen müssen beide Pfade oder URLs sein"
-#: ../libsvn_client/merge.c:9059 ../libsvn_ra/ra_loader.c:539
-#, c-format
-msgid "'%s' isn't in the same repository as '%s'"
-msgstr "»%s« ist nicht im selben Projektarchiv wie »%s«"
-
-#: ../libsvn_client/merge.c:10057 ../libsvn_client/merge.c:10348
+#: ../libsvn_client/merge.c:11320 ../libsvn_client/merge.c:11482
+#: ../libsvn_client/merge.c:12369
#, c-format
msgid "'%s@%ld' must be ancestrally related to '%s@%ld'"
msgstr "»%s@%ld« muss eine Vorgängerbeziehung zu »%s@%ld« haben"
-#: ../libsvn_client/merge.c:10258
-#, c-format
-msgid "'%s' must be from the same repository as '%s'"
-msgstr "»%s« muss aus dem selben Projektarchiv wie »%s« stammen"
-
-#: ../libsvn_client/merge.c:10290
+#: ../libsvn_client/merge.c:11432
#, c-format
msgid "Neither the reintegrate source nor target can be the root of the repository"
-msgstr "Weder die Quelle noch das Ziel der Wiedereingliederung darf Wurzel des Projektarchivs sein"
+msgstr "Weder die Quelle noch das Ziel der Reintegration darf Wurzel des Projektarchivs sein"
+
+#: ../libsvn_client/merge.c:11442
+msgid "Reintegrate merge not possible"
+msgstr "Zusammenführung zur Reintegration nicht möglich"
-#: ../libsvn_client/merge.c:10376
+#: ../libsvn_client/merge.c:11515
#, c-format
msgid ""
"Reintegrate can only be used if revisions %ld through %ld were previously merged from %s to the reintegrate source, but this is not the case:\n"
"%s"
msgstr ""
-"Reintegration kann nur genutzt werden, falls die Revisionen %ld bis %ld vorher von %s in die zurück integrierende Quelle zusammengeführt wurden, aber dies ist nicht der Fall:\n"
+"Reintegration kann nur genutzt werden, falls die Revisionen %ld bis %ld vorher von %s in die zu reintegrierende Quelle zusammengeführt wurden, aber dies ist nicht der Fall:\n"
"%s"
-#: ../libsvn_client/mergeinfo.c:1721
+#: ../libsvn_client/merge.c:11577
+#, c-format
+msgid "Can't reintegrate into '%s' because it is locally added and therefore not related to the merge source"
+msgstr "Kann nicht nach »%s« reintegrieren, da es lokal hinzugefügt wurde und daher keine Herkunftsbeziehung zur Quelle der Zusammenführung hat"
+
+#: ../libsvn_client/merge.c:11845
+msgid "Cannot merge automatically while ignoring mergeinfo"
+msgstr "Kann nicht automatisch zusammenführen und dabei Zusammenführungsinformationen ignorieren"
+
+#: ../libsvn_client/merge.c:12585
+msgid "The required merge is reintegrate-like, and the record-only option cannot be used with this kind of merge"
+msgstr "Die benötigte Zusammenführung ist eine Reintegration, die Option »record-only« kann aber mit dieser Art der Zusammenführung nicht verwendet werden"
+
+#: ../libsvn_client/merge.c:12591
+msgid "The required merge is reintegrate-like, and the depth option cannot be used with this kind of merge"
+msgstr "Die benötigte Zusammenführung ist eine Reintegration, die Option zur Angabe der Tiefe kann aber mit dieser Art der Zusammenführung nicht verwendet werden"
+
+#: ../libsvn_client/merge.c:12597
+msgid "The required merge is reintegrate-like, and the force_delete option cannot be used with this kind of merge"
+msgstr "Die benötigte Zusammenführung ist eine Reintegration, die Option »force_delete« kann aber mit dieser Art der Zusammenführung nicht verwendet werden"
+
+#: ../libsvn_client/mergeinfo.c:1718
msgid "Only depths 'infinity' and 'empty' are currently supported"
-msgstr ""
+msgstr "Nur Tiefenangaben von »infinity« und »empty« werden momentan unterstützt"
-#: ../libsvn_client/patch.c:243
+#: ../libsvn_client/patch.c:279
#, c-format
msgid "Cannot strip %u components from '%s'"
msgstr "Kann nicht %u Komponenten von »%s« entfernen"
-#: ../libsvn_client/patch.c:2754
+#: ../libsvn_client/patch.c:910
+msgid "Invalid link representation"
+msgstr "Ungültige Darstellung für symbolischen Link"
+
+#: ../libsvn_client/patch.c:3005
msgid "strip count must be positive"
msgstr "Anzahl der zu entfernenden Komponenten muss positiv sein"
-#: ../libsvn_client/prop_commands.c:80
+#: ../libsvn_client/patch.c:3021 ../libsvn_fs_base/tree.c:3978
+#: ../libsvn_fs_base/tree.c:3983 ../libsvn_fs_fs/tree.c:3066
+#: ../libsvn_fs_fs/tree.c:3071 ../libsvn_ra/compat.c:675
+#: ../libsvn_ra_local/ra_plugin.c:1145
+#, c-format
+msgid "'%s' is not a file"
+msgstr "»%s« ist keine Datei"
+
+#: ../libsvn_client/patch.c:3033 ../libsvn_wc/util.c:59
+#, c-format
+msgid "'%s' is not a directory"
+msgstr "»%s« ist kein Verzeichnis"
+
+#: ../libsvn_client/prop_commands.c:60
#, c-format
msgid "'%s' is a wcprop, thus not accessible to clients"
msgstr "»%s« ist eine AK-Eigenschaft und damit den Clients nicht zugänglich"
-#: ../libsvn_client/prop_commands.c:216
+#: ../libsvn_client/prop_commands.c:155
#, c-format
msgid "Property '%s' is not a regular property"
msgstr "Eigenschaft »%s« ist keine reguläre Eigenschaft"
-#: ../libsvn_client/prop_commands.c:363
+#: ../libsvn_client/prop_commands.c:266
#, c-format
msgid "Revision property '%s' not allowed in this context"
msgstr "Revisionseigenschaft »%s« ist in diesem Kontext nicht erlaubt"
-#: ../libsvn_client/prop_commands.c:370 ../libsvn_client/prop_commands.c:524
+#: ../libsvn_client/prop_commands.c:273 ../libsvn_client/prop_commands.c:468
#, c-format
msgid "Bad property name: '%s'"
msgstr "Ungültiger Name für Eigenschaft: »%s«"
-#: ../libsvn_client/prop_commands.c:380
-#, c-format
-msgid "Setting property on non-local target '%s' needs a base revision"
-msgstr "Das Setzen einer Eigenschaft für ein nicht lokales Ziel »%s« benötigt eine Basisrevision"
+#: ../libsvn_client/prop_commands.c:301
+msgid "Targets must be working copy paths"
+msgstr "Ziele müssen Arbeitskopiepfade sein"
-#: ../libsvn_client/prop_commands.c:385
-#, c-format
-msgid "Setting property recursively on non-local target '%s' is not supported"
-msgstr "Das rekursive Setzen einer Eigenschaft für ein nicht lokales Ziel »%s« wird nicht unterstützt"
+#: ../libsvn_client/prop_commands.c:362
+msgid "Targets must be URLs"
+msgstr "Ziele müssen URLs sein"
+
+#: ../libsvn_client/prop_commands.c:372
+msgid "Setting property on non-local targets needs a base revision"
+msgstr "Das Setzen einer Eigenschaft für ein nicht lokales Ziel benötigt eine Basisrevision"
-#: ../libsvn_client/prop_commands.c:400
+#: ../libsvn_client/prop_commands.c:387
#, c-format
-msgid "Setting property '%s' on non-local target '%s' is not supported"
-msgstr "Das Setzen der Eigenschaft »%s« für ein nicht lokales Ziel »%s« wird nicht unterstützt"
+msgid "Setting property '%s' on non-local targets is not supported"
+msgstr "Das Setzen der Eigenschaft »%s« für ein nicht lokales Ziel wird nicht unterstützt"
-#: ../libsvn_client/prop_commands.c:471
+#: ../libsvn_client/prop_commands.c:415
#, c-format
msgid "revprop '%s' in r%ld is unexpectedly absent in repository (maybe someone else deleted it?)"
msgstr "Revisionseigenschaft »%s« in r%ld fehlt unerwarteterweise im Projektarchiv (eventuell hat jemand anderer sie gelöscht?)"
-#: ../libsvn_client/prop_commands.c:480
+#: ../libsvn_client/prop_commands.c:424
#, c-format
msgid "revprop '%s' in r%ld has unexpected value in repository (maybe someone else changed it?)"
msgstr "Revisionseigenschaft »%s« in r%ld hat einen unerwarteten Wert im Projektarchiv (eventuell hat jemand anderer sie geändert?)"
-#: ../libsvn_client/prop_commands.c:488
+#: ../libsvn_client/prop_commands.c:432
#, c-format
msgid "revprop '%s' in r%ld is unexpectedly present in repository (maybe someone else set it?)"
msgstr "Revisionseigenschaft »%s« in r%ld ist unerwarteterweise im Projektarchiv vorhanden (eventuell hat jemand anderer sie gesetzt?)"
-#: ../libsvn_client/prop_commands.c:519
+#: ../libsvn_client/prop_commands.c:463
msgid "Author name should not contain a newline; value will not be set unless forced"
msgstr "Der Autorenname sollte keinen Zeilenvorschub enthalten; Wert kann nur mittels »force« gesetzt werden"
-#: ../libsvn_client/prop_commands.c:764
+#: ../libsvn_client/prop_commands.c:577
#, c-format
msgid "'%s' does not exist in revision %ld"
msgstr "»%s« existiert nicht in Revision %ld"
-#: ../libsvn_client/prop_commands.c:771 ../libsvn_client/prop_commands.c:1089
-#: ../libsvn_wc/crop.c:183
+#: ../libsvn_client/prop_commands.c:583 ../libsvn_client/prop_commands.c:1102
+#: ../libsvn_wc/crop.c:168
#, c-format
msgid "Unknown node kind for '%s'"
msgstr "»%s« hat einen unbekannten Knotentyp"
-#: ../libsvn_client/ra.c:145
+#: ../libsvn_client/ra.c:161
#, c-format
-msgid "Attempt to set wc property '%s' on '%s' in a non-commit operation"
-msgstr ""
-"Versuch, die Eigenschaft »%s« der Arbeitskopie während einer\n"
-"Nicht-Übertragungs-Operation auf »%s« zu setzen"
+msgid "Attempt to set wcprop '%s' on '%s' in a non-commit operation"
+msgstr "Versuch, wcprop »%s« auf »%s« in einer Nicht-Übertragungs-Operation zu setzen"
-#: ../libsvn_client/ra.c:378
+#: ../libsvn_client/ra.c:415
#, c-format
msgid "Redirect cycle detected for URL '%s'"
msgstr "Endlosschleife bei der Umleitung der URL »%s« entdeckt"
-#: ../libsvn_client/ra.c:750 ../libsvn_ra/compat.c:376
+#: ../libsvn_client/ra.c:501 ../libsvn_client/ra.c:812
+#, c-format
+msgid "'%s' has no URL"
+msgstr "»%s« hat keine URL"
+
+#: ../libsvn_client/ra.c:679 ../libsvn_ra/compat.c:395
#, c-format
msgid "Unable to find repository location for '%s' in revision %ld"
msgstr "Kann »%s« in Revision %ld nicht im Projektarchiv finden"
-#: ../libsvn_client/ra.c:757
+#: ../libsvn_client/ra.c:691
#, c-format
msgid "The location for '%s' for revision %ld does not exist in the repository or refers to an unrelated object"
msgstr "»%s« für Revision %ld existiert nicht im Projektarchiv oder verweist auf ein nicht verwandtes Objekt"
-#: ../libsvn_client/relocate.c:115
+#: ../libsvn_client/relocate.c:117
#, c-format
msgid "'%s' is not the root of the repository"
msgstr "»%s« ist nicht die Basis des Projektarchivs"
-# TODO: uuid or UUID?
-#: ../libsvn_client/relocate.c:122
+#: ../libsvn_client/relocate.c:124
#, c-format
msgid "The repository at '%s' has uuid '%s', but the WC has '%s'"
-msgstr "Das Projektarchiv in »%s« hat die uuid »%s«, aber die Arbeitskopie hat »%s«"
+msgstr "Das Projektarchiv in »%s« hat die UUID »%s«, aber die Arbeitskopie hat »%s«"
-#: ../libsvn_client/revisions.c:113 ../libsvn_client/revisions.c:136
+#: ../libsvn_client/repos_diff.c:931 ../libsvn_wc/externals.c:570
+#, c-format
+msgid "Base checksum mismatch for '%s'"
+msgstr "Basis-Prüfsummenfehler bei »%s«"
+
+#: ../libsvn_client/revisions.c:113 ../libsvn_client/revisions.c:138
#, c-format
msgid "Path '%s' has no committed revision"
msgstr "Pfad »%s« hat keine übertragene Revision"
-#: ../libsvn_client/revisions.c:162
+#: ../libsvn_client/revisions.c:166
#, c-format
msgid "Unrecognized revision type requested for '%s'"
msgstr "Unbekannter Revisionstyp für »%s« angefragt"
-#: ../libsvn_client/revisions.c:185
-msgid "PREV, BASE, or COMMITTED revision keywords are invalid for URL"
-msgstr "PREV, BASE oder COMMITTED Revisions-Schlüsselwörter sind für die URL ungültig"
-
-#: ../libsvn_client/status.c:302 ../libsvn_client/status.c:331
-#: ../libsvn_client/status.c:340 ../libsvn_client/status.c:533
-#: ../libsvn_wc/lock.c:539 ../libsvn_wc/lock.c:899 ../libsvn_wc/lock.c:1598
-#: ../libsvn_wc/wc_db.c:7808 ../libsvn_wc/wc_db_pdh.c:485
+#: ../libsvn_client/status.c:407 ../libsvn_client/status.c:586
+#: ../libsvn_wc/lock.c:564 ../libsvn_wc/lock.c:856 ../libsvn_wc/lock.c:1542
+#: ../libsvn_wc/wc_db.c:13269 ../libsvn_wc/wc_db_wcroot.c:630
#, c-format
msgid "'%s' is not a working copy"
msgstr "»%s« ist keine Arbeitskopie"
-#: ../libsvn_client/switch.c:102
+#: ../libsvn_client/status.c:454
+#, c-format
+msgid "Entry '%s' has no URL"
+msgstr "Eintrag »%s« hat keine URL"
+
+#: ../libsvn_client/switch.c:129
#, c-format
msgid "Cannot both exclude and switch a path"
msgstr "Kann einen Pfad nicht sowohl ausschließen als auch umstellen"
-#: ../libsvn_client/switch.c:175 ../libsvn_ra_local/ra_plugin.c:199
-#: ../libsvn_ra_local/ra_plugin.c:275 ../libsvn_wc/update_editor.c:5032
+#: ../libsvn_client/switch.c:150
+#, c-format
+msgid "Cannot switch '%s' because it is not in the repository yet"
+msgstr "Kann »%s« nicht umplatzieren da es noch nicht im Projektarchiv ist"
+
+#: ../libsvn_client/switch.c:175
+#, c-format
+msgid "Directory '%s' has no URL"
+msgstr "Verzeichnis »%s« hat keine URL"
+
+#: ../libsvn_client/switch.c:215 ../libsvn_ra_local/ra_plugin.c:236
+#: ../libsvn_ra_local/ra_plugin.c:326 ../libsvn_wc/update_editor.c:4870
#, c-format
msgid ""
"'%s'\n"
@@ -2115,170 +2287,239 @@ msgstr ""
"ist nicht das selbe Projektarchiv wie\n"
"»%s«"
-#: ../libsvn_client/util.c:215
+#: ../libsvn_client/switch.c:242
#, c-format
-msgid "URL '%s' is not a child of repository root URL '%s'"
-msgstr "Die URL »%s« ist kein Kind der Projektarchivwurzel-URL »%s«"
+msgid "'%s' shares no common ancestry with '%s'"
+msgstr "»%s« hat keinen Vorgänger gemeinsam mit »%s«"
-#: ../libsvn_delta/svndiff.c:165
+#: ../libsvn_client/util.c:336
+#, c-format
+msgid "Cannot mix repository and working copy targets"
+msgstr "Ziele aus dem Projektarchiv und einer Arbeitskopie können nicht gemischt werden"
+
+#: ../libsvn_delta/svndiff.c:175
msgid "Compression of svndiff data failed"
msgstr "Komprimierung der svndiff-Daten schlug fehl"
-#: ../libsvn_delta/svndiff.c:432
+#: ../libsvn_delta/svndiff.c:538
msgid "Decompression of svndiff data failed: no size"
msgstr "Dekomprimierung der svndiff-Daten schlug fehl: Größe fehlt"
-#: ../libsvn_delta/svndiff.c:435
+#: ../libsvn_delta/svndiff.c:541
msgid "Decompression of svndiff data failed: size too large"
msgstr "Dekomprimierung der svndiff-Daten schlug fehl: Größe zu groß"
-#: ../libsvn_delta/svndiff.c:456
+#: ../libsvn_delta/svndiff.c:565
msgid "Decompression of svndiff data failed"
msgstr "Dekomprimierung der svndiff-Daten schlug fehl"
-#: ../libsvn_delta/svndiff.c:463
+#: ../libsvn_delta/svndiff.c:572
msgid "Size of uncompressed data does not match stored original length"
msgstr "Die Größe der unkomprimierten Daten entspricht nicht der gespeicherten Originallänge"
-#: ../libsvn_delta/svndiff.c:538
+#: ../libsvn_delta/svndiff.c:648
#, c-format
msgid "Invalid diff stream: insn %d cannot be decoded"
msgstr "Ungültiger Diff-Strom: insn %d kann nicht dekodiert werden"
-#: ../libsvn_delta/svndiff.c:542
+#: ../libsvn_delta/svndiff.c:652
#, c-format
msgid "Invalid diff stream: insn %d has length zero"
msgstr "Ungültiger Diff-Strom: insn %d hat Länge Null"
-#: ../libsvn_delta/svndiff.c:546
+#: ../libsvn_delta/svndiff.c:656
#, c-format
msgid "Invalid diff stream: insn %d overflows the target view"
msgstr "Ungültiger Diff-Strom: insn %d läuft in die Zielansicht über"
-#: ../libsvn_delta/svndiff.c:555
+#: ../libsvn_delta/svndiff.c:665
#, c-format
msgid "Invalid diff stream: [src] insn %d overflows the source view"
msgstr "Ungültiger Diff-Strom: [Quelle] insn %d läuft in die Quellansicht über"
-#: ../libsvn_delta/svndiff.c:562
+#: ../libsvn_delta/svndiff.c:672
#, c-format
msgid "Invalid diff stream: [tgt] insn %d starts beyond the target view position"
msgstr "Ungültiger Diff-Strom: [Ziel] insn %d startet hinter der Zielposition"
-#: ../libsvn_delta/svndiff.c:569
+#: ../libsvn_delta/svndiff.c:679
#, c-format
msgid "Invalid diff stream: [new] insn %d overflows the new data section"
msgstr "Ungültiger Diff-Strom: [Neu] insn %d läuft in die neue Datensektion über"
-#: ../libsvn_delta/svndiff.c:579
+#: ../libsvn_delta/svndiff.c:689
msgid "Delta does not fill the target window"
msgstr "Delta füllt das Zielfenster nicht"
-#: ../libsvn_delta/svndiff.c:582
+#: ../libsvn_delta/svndiff.c:692
msgid "Delta does not contain enough new data"
msgstr "Delta enthält nicht genügend neue Daten"
-#: ../libsvn_delta/svndiff.c:688
+#: ../libsvn_delta/svndiff.c:801
msgid "Svndiff has invalid header"
msgstr "Svndiff-Daten enthalten ungültigen Kopf"
-#: ../libsvn_delta/svndiff.c:744 ../libsvn_delta/svndiff.c:908
+#: ../libsvn_delta/svndiff.c:857 ../libsvn_delta/svndiff.c:1039
msgid "Svndiff contains a too-large window"
msgstr "Svndiff-Daten enthalten ein zu großes Fenster"
-#: ../libsvn_delta/svndiff.c:751 ../libsvn_delta/svndiff.c:915
+#: ../libsvn_delta/svndiff.c:864 ../libsvn_delta/svndiff.c:1046
msgid "Svndiff contains corrupt window header"
msgstr "Svndiff-Daten enthalten defekte Fenster-Kopfdaten"
-#: ../libsvn_delta/svndiff.c:760
+#: ../libsvn_delta/svndiff.c:873
msgid "Svndiff has backwards-sliding source views"
msgstr "Svndiff-Daten enthalten rückwärts gleitenden Blick auf Quellen"
-#: ../libsvn_delta/svndiff.c:809 ../libsvn_delta/svndiff.c:856
-#: ../libsvn_delta/svndiff.c:937
+#: ../libsvn_delta/svndiff.c:930 ../libsvn_delta/svndiff.c:987
+#: ../libsvn_delta/svndiff.c:1068
msgid "Unexpected end of svndiff input"
msgstr "Unerwartetes Ende der Svndiff-Eingangsdaten"
-#: ../libsvn_diff/diff_file.c:466
+#: ../libsvn_diff/diff_file.c:184
+#, c-format
+msgid "File '%s' is too large to be read in to memory"
+msgstr "Datei »%s« ist zu groß um in den Speicher gelesen zu werden"
+
+#: ../libsvn_diff/diff_file.c:1106
#, c-format
msgid "The file '%s' changed unexpectedly during diff"
msgstr "Die Datei »%s« veränderte sich unerwartet während des Vergleichs"
-#: ../libsvn_diff/diff_file.c:630
+#: ../libsvn_diff/diff_file.c:1276
msgid "Error in options to internal diff"
msgstr "Fehler in Optionen für internes Vergleichsprogramm"
-#: ../libsvn_diff/diff_file.c:656
+#: ../libsvn_diff/diff_file.c:1302
#, c-format
msgid "Invalid argument '%s' in diff options"
msgstr "Ungültiges Argument »%s« in Vergleichsoptionen"
-#: ../libsvn_diff/diff_file.c:942
-msgid "No newline at end of file"
-msgstr "Kein Zeilenumbruch am Ende der Datei"
-
#. Order of date components can be different in different languages
-#: ../libsvn_diff/diff_file.c:1149
+#: ../libsvn_diff/diff_file.c:1799
msgid "%a %b %e %H:%M:%S %Y"
msgstr "%a %e. %b %H:%M:%S %Y"
-#: ../libsvn_diff/diff_file.c:1766
+#: ../libsvn_diff/diff_file.c:1875 ../libsvn_diff/diff_file.c:1891
+#, c-format
+msgid "Path '%s' must be inside the directory '%s'"
+msgstr "Pfad »%s« muss innerhalb des Verzeichnisses »%s« sein"
+
+#: ../libsvn_diff/diff_file.c:2409
#, c-format
msgid "Failed to delete mmap '%s'"
msgstr "Konnte mmap »%s« nicht löschen"
-#: ../libsvn_fs/fs-loader.c:115 ../libsvn_ra/ra_loader.c:179
-#: ../libsvn_ra/ra_loader.c:192
+#: ../libsvn_diff/util.c:463
#, c-format
-msgid "'%s' does not define '%s()'"
-msgstr "»%s« definiert »%s()« nicht"
+msgid " Reverse-merged %s:r%s%s"
+msgstr " Rückgängiges Zusammenführen: %s:r%s%s"
+
+#: ../libsvn_diff/util.c:480
+#, c-format
+msgid " Merged %s:r%s%s"
+msgstr " Zusammengeführt %s:r%s%s"
+
+#: ../libsvn_fs/editor.c:219
+#, c-format
+msgid "Revision for modifying '%s' is required"
+msgstr "Revision für Bearbeitung von »%s« erforderlich"
+
+#: ../libsvn_fs/editor.c:228
+#, c-format
+msgid "'%s' is out of date; try updating"
+msgstr "»%s« ist veraltet; versuchen Sie zu aktualisieren"
+
+#: ../libsvn_fs/editor.c:265
+#, c-format
+msgid "'%s' has been modified since the commit began (restart the commit)"
+msgstr "»%s« wurde seit dem Beginn der Übertragung verändert (Übertragung neu starten)"
-#: ../libsvn_fs/fs-loader.c:132
+#: ../libsvn_fs/editor.c:323
#, c-format
-msgid "Can't grab FS mutex"
-msgstr "Kann FS Mutex nicht greifen"
+msgid "'%s' already exists, so may be out of date; try updating"
+msgstr "»%s« existiert schon, kann also veraltet sein; versuchen Sie zu aktualisieren"
-#: ../libsvn_fs/fs-loader.c:144
+#: ../libsvn_fs/editor.c:456
+msgid "The filesystem does not support 'absent' nodes"
+msgstr "Das Dateisystem unterstützt keine »absent« Knoten"
+
+#: ../libsvn_fs/fs-loader.c:121
#, c-format
-msgid "Can't ungrab FS mutex"
-msgstr "Kann FS Mutex nicht loslassen"
+msgid "Invalid name for FS type '%s'"
+msgstr "Ungültiger Name für Dateisystemtyp »%s«"
-#: ../libsvn_fs/fs-loader.c:165
+#: ../libsvn_fs/fs-loader.c:138 ../libsvn_ra/ra_loader.c:161
+#: ../libsvn_ra/ra_loader.c:174
+#, c-format
+msgid "'%s' does not define '%s()'"
+msgstr "»%s« definiert »%s()« nicht"
+
+#: ../libsvn_fs/fs-loader.c:164
#, c-format
msgid "Failed to load module for FS type '%s'"
msgstr "Konnte Modul für Dateisystemtyp »%s« nicht laden"
-#: ../libsvn_fs/fs-loader.c:198
+#: ../libsvn_fs/fs-loader.c:186
#, c-format
msgid "Mismatched FS module version for '%s': found %d.%d.%d%s, expected %d.%d.%d%s"
msgstr "Versionen in Dateisystemmodul »%s« stimmen nicht überein: gefunden %d.%d.%d%s, erwartet %d.%d.%d%s"
-#: ../libsvn_fs/fs-loader.c:223
+#: ../libsvn_fs/fs-loader.c:266
#, c-format
msgid "Unknown FS type '%s'"
msgstr "Unbekannter Dateisystemtyp »%s«"
-#: ../libsvn_fs/fs-loader.c:313
-#, c-format
-msgid "Can't allocate FS mutex"
-msgstr "Kann FS Mutex nicht anlegen"
-
-#: ../libsvn_fs/fs-loader.c:348
+#: ../libsvn_fs/fs-loader.c:389
#, c-format
msgid "Path '%s' is not in UTF-8"
msgstr "Pfad »%s« ist kein UTF-8"
-#: ../libsvn_fs/fs-loader.c:356
+#: ../libsvn_fs/fs-loader.c:397
#, c-format
msgid "Path '%s' contains '.' or '..' element"
msgstr "Pfad »%s« enthält ein Element ».« oder »..«"
-#: ../libsvn_fs/fs-loader.c:1251
+#: ../libsvn_fs/fs-loader.c:554 ../libsvn_repos/repos.c:1982
+msgid "Hotcopy source and destination are equal"
+msgstr "Quelle und Ziel für Kopie im laufenden Betrieb sind gleich"
+
+#: ../libsvn_fs/fs-loader.c:564
+#, c-format
+msgid "'%s' already exists and is a file"
+msgstr "»%s« existiert bereits und ist eine Datei"
+
+#: ../libsvn_fs/fs-loader.c:569
+#, c-format
+msgid "'%s' already exists and has an unknown node kind"
+msgstr "»%s« existiert bereits und hat einen unbekannten Knotentyp"
+
+#: ../libsvn_fs/fs-loader.c:587
+#, c-format
+msgid "The filesystem type of the hotcopy source ('%s') does not match the filesystem type of the hotcopy destination ('%s')"
+msgstr "Der Dateisystemtyp der Quelle für die Kopie im laufenden Betrieb (»%s«) stimmt nicht mit dem Dateisystemtyp des Ziels der Kopie im laufenden Betrieb (»%s«) überein"
+
+#: ../libsvn_fs/fs-loader.c:1395
#, c-format
msgid "Malformed UUID '%s'"
msgstr "Fehlerhafte UUID »%s«"
-#: ../libsvn_fs/fs-loader.c:1275
+#: ../libsvn_fs/fs-loader.c:1423
+#, c-format
+msgid "Lock token URI '%s' has bad scheme; expected '%s'"
+msgstr "URI der Sperrmarke »%s« hat fehlerhaften Schema, erwartete »%s«"
+
+#: ../libsvn_fs/fs-loader.c:1430
+#, c-format
+msgid "Lock token '%s' is not ASCII at byte %u"
+msgstr "Sperrmarke »%s« besteht nicht aus ASCII bei Byte %u"
+
+#: ../libsvn_fs/fs-loader.c:1437
+#, c-format
+msgid "Lock token URI '%s' is not XML-safe"
+msgstr "URI der Sperrmarke »%s« ist nicht sicher für XML"
+
+#: ../libsvn_fs/fs-loader.c:1444
msgid "Negative expiration date passed to svn_fs_lock"
msgstr "Negatives Ablaufdatum an svn_fs_lock übergeben"
@@ -2287,48 +2528,48 @@ msgstr "Negatives Ablaufdatum an svn_fs_lock übergeben"
msgid "Berkeley DB error for filesystem '%s' while %s:\n"
msgstr "Berkeley-DB-Fehler für Dateisystem »%s« während %s:\n"
-#: ../libsvn_fs_base/bdb/changes-table.c:92
+#: ../libsvn_fs_base/bdb/changes-table.c:94
msgid "creating change"
msgstr "Erzeuge Änderungen"
-#: ../libsvn_fs_base/bdb/changes-table.c:116
+#: ../libsvn_fs_base/bdb/changes-table.c:118
msgid "deleting changes"
msgstr "Lösche Änderungen"
-#: ../libsvn_fs_base/bdb/changes-table.c:148 ../libsvn_fs_fs/fs_fs.c:4012
+#: ../libsvn_fs_base/bdb/changes-table.c:150 ../libsvn_fs_fs/fs_fs.c:5911
msgid "Missing required node revision ID"
msgstr "Für den Knoten fehlt eine erforderliche Revisions ID"
-#: ../libsvn_fs_base/bdb/changes-table.c:159 ../libsvn_fs_fs/fs_fs.c:4022
+#: ../libsvn_fs_base/bdb/changes-table.c:161 ../libsvn_fs_fs/fs_fs.c:5921
msgid "Invalid change ordering: new node revision ID without delete"
msgstr "Ungültige Reihenfolge bei Änderung: Neue Knoten Revisions ID ohne Löschen"
-#: ../libsvn_fs_base/bdb/changes-table.c:169 ../libsvn_fs_fs/fs_fs.c:4033
+#: ../libsvn_fs_base/bdb/changes-table.c:171 ../libsvn_fs_fs/fs_fs.c:5932
msgid "Invalid change ordering: non-add change on deleted path"
msgstr "Ungültige Reihenfolge bei Änderung: Nicht-hinzufügende Änderung auf gelöschtem Pfad"
-#: ../libsvn_fs_base/bdb/changes-table.c:178 ../libsvn_fs_fs/fs_fs.c:4042
+#: ../libsvn_fs_base/bdb/changes-table.c:180 ../libsvn_fs_fs/fs_fs.c:5941
msgid "Invalid change ordering: add change on preexisting path"
msgstr "Ungültige Reihenfolge bei Änderung: Hinzufügende Änderung auf schon vorhandenem Pfad"
-#: ../libsvn_fs_base/bdb/changes-table.c:270
-#: ../libsvn_fs_base/bdb/changes-table.c:393
+#: ../libsvn_fs_base/bdb/changes-table.c:272
+#: ../libsvn_fs_base/bdb/changes-table.c:395
msgid "creating cursor for reading changes"
msgstr "Erzeuge Cursor zum Lesen der Änderungen"
-#: ../libsvn_fs_base/bdb/changes-table.c:295
-#: ../libsvn_fs_base/bdb/changes-table.c:414
+#: ../libsvn_fs_base/bdb/changes-table.c:297
+#: ../libsvn_fs_base/bdb/changes-table.c:416
#, c-format
msgid "Error reading changes for key '%s'"
msgstr "Fehler beim Lesen der Änderungen für Schlüssel »%s«"
-#: ../libsvn_fs_base/bdb/changes-table.c:354
-#: ../libsvn_fs_base/bdb/changes-table.c:437
+#: ../libsvn_fs_base/bdb/changes-table.c:356
+#: ../libsvn_fs_base/bdb/changes-table.c:439
msgid "fetching changes"
msgstr "Hole Änderungen"
-#: ../libsvn_fs_base/bdb/changes-table.c:367
-#: ../libsvn_fs_base/bdb/changes-table.c:450
+#: ../libsvn_fs_base/bdb/changes-table.c:369
+#: ../libsvn_fs_base/bdb/changes-table.c:452
msgid "closing changes cursor"
msgstr "Schließe Änderungscursor"
@@ -2347,6 +2588,10 @@ msgstr "Repräsentationsschlüssel für Prüfsumme »%s« existiert im Dateisyst
msgid "storing checksum-reps record"
msgstr "Speichere »checksum-reps«-Datensatz"
+#: ../libsvn_fs_base/bdb/checksum-reps-table.c:164
+msgid "deleting entry from 'checksum-reps' table"
+msgstr "Lösche Eintrag aus »checksum-reps« Tabelle"
+
#: ../libsvn_fs_base/bdb/checksum-reps-table.c:186
msgid "allocating new representation reuse ID (getting 'next-key')"
msgstr "Allokiere neuen Wiederverwendungsschlüssel für Darstellung (hole »next-key«)"
@@ -2375,6 +2620,54 @@ msgstr "Lösche Eintrag aus »copies« Tabelle"
msgid "reading copy"
msgstr "lese Kopie"
+#: ../libsvn_fs_base/bdb/lock-tokens-table.c:87
+msgid "storing lock token record"
+msgstr "Speichere Datensatz für Sperrmarke"
+
+#: ../libsvn_fs_base/bdb/lock-tokens-table.c:108
+msgid "deleting entry from 'lock-tokens' table"
+msgstr "Lösche Eintrag aus »lock-tokens« Tabelle"
+
+#: ../libsvn_fs_base/bdb/lock-tokens-table.c:135
+msgid "reading lock token"
+msgstr "Lese Sperrmarke"
+
+#: ../libsvn_fs_base/bdb/locks-table.c:93
+msgid "storing lock record"
+msgstr "Speichere Datensatz für Sperre"
+
+#: ../libsvn_fs_base/bdb/locks-table.c:116
+msgid "deleting lock from 'locks' table"
+msgstr "Lösche Sperre aus »locks« Tabelle"
+
+#: ../libsvn_fs_base/bdb/locks-table.c:143
+msgid "reading lock"
+msgstr "Lese Sperre"
+
+#: ../libsvn_fs_base/bdb/locks-table.c:246
+msgid "creating cursor for reading lock tokens"
+msgstr "Erzeuge Cursor zum Lesen der Sperrmarken"
+
+#: ../libsvn_fs_base/bdb/locks-table.c:321
+msgid "fetching lock tokens"
+msgstr "Lese Sperrmarken"
+
+#: ../libsvn_fs_base/bdb/locks-table.c:323
+msgid "fetching lock tokens (closing cursor)"
+msgstr "Lese Sperrmarken (schließe Cursor)"
+
+#: ../libsvn_fs_base/bdb/miscellaneous-table.c:95
+msgid "deleting record from 'miscellaneous' table"
+msgstr "Lösche Eintrag aus »miscellaneous« Tabelle"
+
+#: ../libsvn_fs_base/bdb/miscellaneous-table.c:103
+msgid "storing miscellaneous record"
+msgstr "Speichere »miscellaneous« Datensatz"
+
+#: ../libsvn_fs_base/bdb/miscellaneous-table.c:131
+msgid "fetching miscellaneous record"
+msgstr "Lese »miscellaneous« Datensatz"
+
#: ../libsvn_fs_base/bdb/node-origins-table.c:117
#, c-format
msgid "Node origin for '%s' exists in filesystem '%s' with a different value (%s) than what we were about to store (%s)"
@@ -2384,6 +2677,10 @@ msgstr "Knotenursprung für »%s« existiert im Dateisystem »%s« mit einem and
msgid "storing node-origins record"
msgstr "Speichere Knotenherkunftdatensatz"
+#: ../libsvn_fs_base/bdb/node-origins-table.c:142
+msgid "deleting entry from 'node-origins' table"
+msgstr "Lösche Eintrag aus »node-origins« Tabelle"
+
#: ../libsvn_fs_base/bdb/nodes-table.c:102
msgid "allocating new node ID (getting 'next-key')"
msgstr "Allokiere neue Knoten-ID (hole »next-key«)"
@@ -2443,14 +2740,132 @@ msgstr "Lösche Darstellung"
msgid "reading filesystem revision"
msgstr "Lese Dateisystemrevision"
+#: ../libsvn_fs_base/bdb/rev-table.c:141
+msgid "updating filesystem revision"
+msgstr "Aktualisiere Dateisystemrevision"
+
+#: ../libsvn_fs_base/bdb/rev-table.c:149
+msgid "storing filesystem revision"
+msgstr "Speichere Dateisystemrevision"
+
+#: ../libsvn_fs_base/bdb/rev-table.c:179
+msgid "getting youngest revision (creating cursor)"
+msgstr "Hole neueste Revision (erzeuge Cursor)"
+
+#: ../libsvn_fs_base/bdb/rev-table.c:203
+msgid "getting youngest revision (finding last entry)"
+msgstr "Hole neueste Revision (finde letzten Eintrag)"
+
+#. You can't commit a transaction with open cursors, because:
+#. 1) key/value pairs don't get deleted until the cursors referring
+#. to them are closed, so closing a cursor can fail for various
+#. reasons, and txn_commit shouldn't fail that way, and
+#. 2) using a cursor after committing its transaction can cause
+#. undetectable database corruption.
+#: ../libsvn_fs_base/bdb/rev-table.c:213
+msgid "getting youngest revision (closing cursor)"
+msgstr "Hole neueste Revision (schließe Cursor)"
+
#: ../libsvn_fs_base/bdb/strings-table.c:94
+#: ../libsvn_fs_base/bdb/strings-table.c:300
+#: ../libsvn_fs_base/bdb/strings-table.c:491
msgid "creating cursor for reading a string"
-msgstr "Erzeuge Cursor zum Lesen von Zeichen"
+msgstr "Erzeuge Cursor zum Lesen von Zeichenketten"
+
+#: ../libsvn_fs_base/bdb/strings-table.c:124
+msgid "moving cursor"
+msgstr "Verschiebe Cursor"
+
+#: ../libsvn_fs_base/bdb/strings-table.c:136
+msgid "rerunning cursor move"
+msgstr "Führe Verschiebung des Cursors erneut aus"
+
+#: ../libsvn_fs_base/bdb/strings-table.c:228
+#: ../libsvn_fs_base/bdb/strings-table.c:247
+#: ../libsvn_fs_base/bdb/strings-table.c:265
+msgid "reading string"
+msgstr "Lese Zeichenkette"
+
+#. Done with the cursor.
+#: ../libsvn_fs_base/bdb/strings-table.c:254
+#: ../libsvn_fs_base/bdb/strings-table.c:334
+#: ../libsvn_fs_base/bdb/strings-table.c:539
+msgid "closing string-reading cursor"
+msgstr "Schließe Cursor zum Lesen von Zeichenketten"
+
+#: ../libsvn_fs_base/bdb/strings-table.c:313
+#: ../libsvn_fs_base/bdb/strings-table.c:505
+msgid "getting next-key value"
+msgstr "Hole Wert »next-key«"
+
+#. ignore the error, the original is
+#. more important.
+#: ../libsvn_fs_base/bdb/strings-table.c:331
+msgid "bumping next string key"
+msgstr "Erzeuge nächsten Zeichenkettenschlüssel"
+
+#: ../libsvn_fs_base/bdb/strings-table.c:358
+msgid "appending string"
+msgstr "Füge an Zeichenkette an"
+
+#. Handle any other error conditions.
+#: ../libsvn_fs_base/bdb/strings-table.c:390
+msgid "clearing string"
+msgstr "Lösche Zeichenkette"
+
+#: ../libsvn_fs_base/bdb/strings-table.c:399
+msgid "storing empty contents"
+msgstr "Speichere leere Inhalte"
+
+#: ../libsvn_fs_base/bdb/strings-table.c:436
+msgid "fetching string length"
+msgstr "Ermittle Länge der Zeichenkette"
+
+#. Handle any other error conditions.
+#: ../libsvn_fs_base/bdb/strings-table.c:466
+msgid "deleting string"
+msgstr "Lösche Zeichenkette"
+
+#: ../libsvn_fs_base/bdb/strings-table.c:524
+msgid "writing copied data"
+msgstr "Schreibe kopiete Daten"
+
+#: ../libsvn_fs_base/bdb/strings-table.c:535
+msgid "fetching string data for a copy"
+msgstr "Hole Zeichenkettendaten für eine Kopie"
#: ../libsvn_fs_base/bdb/txn-table.c:99
msgid "storing transaction record"
msgstr "Speichere Transaktionsdatensatz"
+#: ../libsvn_fs_base/bdb/txn-table.c:123
+msgid "allocating new transaction ID (getting 'next-key')"
+msgstr "Allokiere neue Transaktions-ID (hole »next-key«)"
+
+#: ../libsvn_fs_base/bdb/txn-table.c:142
+msgid "bumping next transaction key"
+msgstr "Erzeuge nächsten Transaktionsschlüssel"
+
+#: ../libsvn_fs_base/bdb/txn-table.c:188
+msgid "deleting entry from 'transactions' table"
+msgstr "Lösche Eintrag aus Tabelle »transactions«"
+
+#: ../libsvn_fs_base/bdb/txn-table.c:218
+msgid "reading transaction"
+msgstr "Lese Transaktion"
+
+#: ../libsvn_fs_base/bdb/txn-table.c:251
+msgid "reading transaction list (opening cursor)"
+msgstr "Lese Transaktionsliste (öffne Cursor)"
+
+#: ../libsvn_fs_base/bdb/txn-table.c:314
+msgid "reading transaction list (listing keys)"
+msgstr "Lese Transaktionsliste (Schlüssel auflisten)"
+
+#: ../libsvn_fs_base/bdb/txn-table.c:317
+msgid "reading transaction list (closing cursor)"
+msgstr "Lese Transaktionsliste (schließe Cursor)"
+
#: ../libsvn_fs_base/bdb/uuids-table.c:119
msgid "get repository uuid"
msgstr "Hole UUID des Projektarchivs"
@@ -2459,160 +2874,140 @@ msgstr "Hole UUID des Projektarchivs"
msgid "set repository uuid"
msgstr "Setze UUID des Projektarchivs"
-#: ../libsvn_fs_base/dag.c:227
+#: ../libsvn_fs_base/dag.c:228
#, c-format
msgid "Corrupt DB: initial transaction id not '0' in filesystem '%s'"
msgstr "DB beschädigt: Erste Transaktion ist nicht »0« in Dateisystem »%s«"
-#: ../libsvn_fs_base/dag.c:235
+#: ../libsvn_fs_base/dag.c:236
#, c-format
msgid "Corrupt DB: initial copy id not '0' in filesystem '%s'"
msgstr "DB beschädigt: Erste Kopie ist nicht »0« in Dateisystem »%s«"
-#: ../libsvn_fs_base/dag.c:244
+#: ../libsvn_fs_base/dag.c:245
#, c-format
msgid "Corrupt DB: initial revision number is not '0' in filesystem '%s'"
msgstr "DB beschädigt: Erste Revision ist nicht »0« in Dateisystem »%s«"
-#: ../libsvn_fs_base/dag.c:293
+#: ../libsvn_fs_base/dag.c:294
msgid "Attempted to get entries of a non-directory node"
msgstr "Versuchte, Einträge eines *nicht* Verzeichnisknotens zu holen"
-#: ../libsvn_fs_base/dag.c:460 ../libsvn_fs_fs/dag.c:380
+#: ../libsvn_fs_base/dag.c:461 ../libsvn_fs_fs/dag.c:372
#, c-format
msgid "Attempted to create a node with an illegal name '%s'"
msgstr "Versuchte, Knoten mit illegalem Namen »%s« anzulegen"
-#: ../libsvn_fs_base/dag.c:466 ../libsvn_fs_fs/dag.c:386
+#: ../libsvn_fs_base/dag.c:467 ../libsvn_fs_fs/dag.c:378
msgid "Attempted to create entry in non-directory parent"
msgstr "Versuchte, Eintrag in einem *nicht* Verzeichnisknoten anzulegen"
-#: ../libsvn_fs_base/dag.c:472 ../libsvn_fs_base/dag.c:736
-#: ../libsvn_fs_fs/dag.c:392
+#: ../libsvn_fs_base/dag.c:473 ../libsvn_fs_base/dag.c:737
+#: ../libsvn_fs_fs/dag.c:384
#, c-format
msgid "Attempted to clone child of non-mutable node"
msgstr "Versuchte, Unterknoten eines nicht-veränderlichen Knotens zu klonen"
-#: ../libsvn_fs_base/dag.c:479
+#: ../libsvn_fs_base/dag.c:480
#, c-format
msgid "Attempted to create entry that already exists"
msgstr "Versuchte, Eintrag anzulegen, der bereits existiert"
-#: ../libsvn_fs_base/dag.c:528 ../libsvn_fs_fs/dag.c:453
+#: ../libsvn_fs_base/dag.c:529 ../libsvn_fs_fs/dag.c:462
msgid "Attempted to set entry in non-directory node"
msgstr "Versuchte, Eintrag in einem *nicht* Verzeichnisknoten zu setzen"
-#: ../libsvn_fs_base/dag.c:534 ../libsvn_fs_fs/dag.c:459
+#: ../libsvn_fs_base/dag.c:535 ../libsvn_fs_fs/dag.c:468
msgid "Attempted to set entry in immutable node"
msgstr "Versuchte, Eintrag in einem nicht-veränderlichen Knoten zu setzen"
# FIXME: node-revision or node-rev (wie überall)?
-#: ../libsvn_fs_base/dag.c:601
+#: ../libsvn_fs_base/dag.c:602
#, c-format
msgid "Can't set proplist on *immutable* node-revision %s"
msgstr "Kann keine Eigenschaften für *nicht-veränderliche* Knotenrevision %s setzen."
-#: ../libsvn_fs_base/dag.c:742
+#: ../libsvn_fs_base/dag.c:743
#, c-format
msgid "Attempted to make a child clone with an illegal name '%s'"
msgstr "Versuchte, Unterknoten mit illegalem Namen »%s« zu klonen"
-#: ../libsvn_fs_base/dag.c:859
+#: ../libsvn_fs_base/dag.c:860
#, c-format
msgid "Attempted to delete entry '%s' from *non*-directory node"
msgstr "Versuchte, Eintrag »%s« aus einem *nicht* Verzeichnisknoten zu löschen"
-#: ../libsvn_fs_base/dag.c:865
+#: ../libsvn_fs_base/dag.c:866
#, c-format
msgid "Attempted to delete entry '%s' from immutable directory node"
msgstr "Versuchte, Eintrag »%s« aus einem nicht-veränderlichen Verzeichnisknoten zu löschen"
-#: ../libsvn_fs_base/dag.c:872
+#: ../libsvn_fs_base/dag.c:873
#, c-format
msgid "Attempted to delete a node with an illegal name '%s'"
msgstr "Versuchte, einen Knoten mit illegalem Namen »%s« zu löschen"
-#: ../libsvn_fs_base/dag.c:887 ../libsvn_fs_base/dag.c:920
+#: ../libsvn_fs_base/dag.c:888 ../libsvn_fs_base/dag.c:921
#, c-format
msgid "Delete failed: directory has no entry '%s'"
msgstr "Löschen schlug fehl: Verzeichnis hat keinen Eintrag »%s«"
-#: ../libsvn_fs_base/dag.c:969
+#: ../libsvn_fs_base/dag.c:970
#, c-format
msgid "Attempted removal of immutable node"
msgstr "Versuchte, einen nicht-veränderlichen Knoten zu entfernen"
-#: ../libsvn_fs_base/dag.c:1087
+#: ../libsvn_fs_base/dag.c:1088
#, c-format
msgid "Attempted to get textual contents of a *non*-file node"
msgstr "Versuchte, den Textinhalt eines *nicht* Dateiknotens zu holen"
-#: ../libsvn_fs_base/dag.c:1120
+#: ../libsvn_fs_base/dag.c:1121
#, c-format
msgid "Attempted to get length of a *non*-file node"
msgstr "Versuchte, die Länge eines *nicht* Dateiknotens zu holen"
-#: ../libsvn_fs_base/dag.c:1147
+#: ../libsvn_fs_base/dag.c:1148
#, c-format
msgid "Attempted to get checksum of a *non*-file node"
msgstr "Versuchte, die Prüfsumme eines *nicht* Dateiknotens zu holen"
-#: ../libsvn_fs_base/dag.c:1186 ../libsvn_fs_base/dag.c:1243
+#: ../libsvn_fs_base/dag.c:1187 ../libsvn_fs_base/dag.c:1244
#, c-format
msgid "Attempted to set textual contents of a *non*-file node"
msgstr "Versuchte, den Textinhalt eines *nicht* Dateiknotens zu setzen"
-#: ../libsvn_fs_base/dag.c:1192 ../libsvn_fs_base/dag.c:1249
+#: ../libsvn_fs_base/dag.c:1193 ../libsvn_fs_base/dag.c:1250
#, c-format
msgid "Attempted to set textual contents of an immutable node"
msgstr "Versuchte, den Textinhalt eines nicht-veränderlichen Knotens zu setzen"
-#: ../libsvn_fs_base/dag.c:1280 ../libsvn_fs_base/reps-strings.c:829
+#: ../libsvn_fs_base/dag.c:1279 ../libsvn_fs_base/reps-strings.c:829
#, c-format
msgid "Checksum mismatch on representation '%s'"
msgstr "Prüfsummenfehler in Darstellung »%s«"
-#: ../libsvn_fs_base/dag.c:1281 ../libsvn_fs_base/reps-strings.c:830
-#: ../libsvn_fs_base/reps-strings.c:926 ../libsvn_fs_base/reps-strings.c:941
-#: ../libsvn_fs_base/tree.c:3882 ../libsvn_fs_fs/dag.c:1027
-#: ../libsvn_fs_fs/fs_fs.c:3494 ../libsvn_fs_fs/tree.c:2463
-#: ../libsvn_ra_neon/fetch.c:750 ../libsvn_ra_svn/client.c:1073
-#: ../libsvn_repos/commit.c:607 ../libsvn_repos/load-fs-vtable.c:484
-#, c-format
-msgid " expected: %s"
-msgstr " erwartet: %s"
-
-#: ../libsvn_fs_base/dag.c:1282 ../libsvn_fs_base/reps-strings.c:831
-#: ../libsvn_fs_base/reps-strings.c:927 ../libsvn_fs_base/reps-strings.c:942
-#: ../libsvn_fs_base/tree.c:3883 ../libsvn_fs_fs/dag.c:1028
-#: ../libsvn_fs_fs/fs_fs.c:3495 ../libsvn_fs_fs/tree.c:2464
-#: ../libsvn_ra_neon/fetch.c:751 ../libsvn_ra_svn/client.c:1074
-#: ../libsvn_repos/commit.c:608 ../libsvn_repos/load-fs-vtable.c:485
-#, c-format
-msgid " actual: %s"
-msgstr "tatsächlich: %s"
-
-#: ../libsvn_fs_base/dag.c:1378
+#: ../libsvn_fs_base/dag.c:1373
#, c-format
msgid "Attempted to open non-existent child node '%s'"
msgstr "Versuchte, nicht existierenden Unterknoten »%s« zu öffnen"
-#: ../libsvn_fs_base/dag.c:1384
+#: ../libsvn_fs_base/dag.c:1379
#, c-format
msgid "Attempted to open node with an illegal name '%s'"
msgstr "Versuchte, einen Knoten mit illegalem Namen »%s« zu öffnen"
-#: ../libsvn_fs_base/dag.c:1926
+#: ../libsvn_fs_base/dag.c:1700
#, c-format
msgid "Attempted merge tracking info change on immutable node"
msgstr "Versuchte, die Informationen zur Zusammenführungsverfolgung eines nicht-veränderlichen Knotens zu ändern"
-#: ../libsvn_fs_base/dag.c:1966
+#: ../libsvn_fs_base/dag.c:1740
#, c-format
msgid "Attempted mergeinfo count change on immutable node"
msgstr "Versuchte, die Anzahl der Zusammenführungsinformationen eines nicht-veränderlichen Knoten zu ändern"
-#: ../libsvn_fs_base/dag.c:1978
+#: ../libsvn_fs_base/dag.c:1752
#, c-format
msgid "Invalid value (%%%s) for node revision mergeinfo count"
msgstr "Ungültiger Wert (%%%s) für Knotenrevisions-Zusammenführungszähler"
@@ -2622,102 +3017,211 @@ msgstr "Ungültiger Wert (%%%s) für Knotenrevisions-Zusammenführungszähler"
msgid "Corrupt filesystem revision %ld in filesystem '%s'"
msgstr "Beschädigte Dateisystemrevision %ld in Dateisystem »%s«"
-#: ../libsvn_fs_base/err.c:57 ../libsvn_fs_fs/fs_fs.c:2160
+#: ../libsvn_fs_base/err.c:57 ../libsvn_fs_fs/fs_fs.c:2268
#, c-format
msgid "Reference to non-existent node '%s' in filesystem '%s'"
msgstr "Verweis auf einen nicht existierenden Knoten »%s« in Dateisystem »%s«"
-#: ../libsvn_fs_base/err.c:67
+#: ../libsvn_fs_base/err.c:68
#, c-format
msgid "No such revision %ld in filesystem '%s'"
msgstr "Keine solche Revision %ld im Dateisystem »%s«"
-#: ../libsvn_fs_base/err.c:79
+#: ../libsvn_fs_base/err.c:80
#, c-format
msgid "Corrupt entry in 'transactions' table for '%s' in filesystem '%s'"
msgstr "Beschädigter Eintrag in »transactions« Tabelle für »%s« in Dateisystem »%s«"
-#: ../libsvn_fs_base/err.c:90
+#: ../libsvn_fs_base/err.c:91
#, c-format
msgid "Corrupt entry in 'copies' table for '%s' in filesystem '%s'"
msgstr "Beschädigter Eintrag in »copies« Tabelle für »%s« in Dateisystem »%s«"
-#: ../libsvn_fs_base/err.c:101
+#: ../libsvn_fs_base/err.c:102
#, c-format
msgid "No transaction named '%s' in filesystem '%s'"
msgstr "Keine Transaktion namens »%s« in Dateisystem »%s«"
-#: ../libsvn_fs_base/err.c:112
+#: ../libsvn_fs_base/err.c:113
#, c-format
msgid "Cannot modify transaction named '%s' in filesystem '%s'"
msgstr "Kann die Transaktion namens »%s« in Dateisystem »%s« nicht modifizieren"
-#: ../libsvn_fs_base/err.c:123
+#: ../libsvn_fs_base/err.c:124
#, c-format
msgid "No copy with id '%s' in filesystem '%s'"
msgstr "Keine Kopie mit ID »%s« in Dateisystem »%s«"
-#: ../libsvn_fs_base/err.c:133
+#: ../libsvn_fs_base/err.c:134
#, c-format
msgid "Token '%s' does not point to any existing lock in filesystem '%s'"
msgstr "Marke »%s« zeigt auf keine existierende Sperre im Dateisystem »%s«"
-#: ../libsvn_fs_base/err.c:143
+#: ../libsvn_fs_base/err.c:144
#, c-format
msgid "No token given for path '%s' in filesystem '%s'"
msgstr "Keine Marke für Pfad »%s« in Dateisystem »%s« angegeben"
-#: ../libsvn_fs_base/err.c:152
+#: ../libsvn_fs_base/err.c:153
#, c-format
msgid "Corrupt lock in 'locks' table for '%s' in filesystem '%s'"
msgstr "Beschädigte Sperre in »locks« Tabelle für »%s« in Dateisystem »%s«"
-#: ../libsvn_fs_base/err.c:162
+#: ../libsvn_fs_base/err.c:163
#, c-format
msgid "No record in 'node-origins' table for node id '%s' in filesystem '%s'"
msgstr "Kein Datensatz in der »node-origins«-Tabelle für Knoten-ID »%s« im Dateisystem »%s«"
-#: ../libsvn_fs_base/err.c:172
+#: ../libsvn_fs_base/err.c:173
#, c-format
msgid "No record in 'checksum-reps' table for checksum '%s' in filesystem '%s'"
msgstr "Kein Datensatz in der »checksum-reps«-Tabelle für Prüfsumme »%s« im Dateisystem »%s«"
-#: ../libsvn_fs_base/fs.c:86
+#: ../libsvn_fs_base/fs.c:89
#, c-format
msgid "Bad database version: got %d.%d.%d, should be at least %d.%d.%d"
msgstr "Falsche Datenbankversion: %d.%d.%d, sollte mindestens %d.%d.%d sein"
-#: ../libsvn_fs_base/fs.c:97
+#: ../libsvn_fs_base/fs.c:100
#, c-format
msgid "Bad database version: compiled with %d.%d.%d, running against %d.%d.%d"
msgstr "Falsche Datenbankversion: Übersetzt mit %d.%d.%d, läuft mit %d.%d.%d"
-#: ../libsvn_fs_base/fs.c:187
+#: ../libsvn_fs_base/fs.c:190
#, c-format
msgid "Berkeley DB error for filesystem '%s' while closing environment:\n"
msgstr "Berkeley-DB-Fehler für Dateisystem »%s« beim Schließen der Umgebung:\n"
-#: ../libsvn_fs_base/fs.c:538
+#: ../libsvn_fs_base/fs.c:553
#, c-format
msgid "Berkeley DB error for filesystem '%s' while creating environment:\n"
msgstr "Berkeley-DB-Fehler für Dateisystem »%s« beim Erzeugen der Umgebung:\n"
-#: ../libsvn_fs_base/fs.c:544
+#: ../libsvn_fs_base/fs.c:559
#, c-format
msgid "Berkeley DB error for filesystem '%s' while opening environment:\n"
msgstr "Berkeley-DB-Fehler für Dateisystem »%s« beim Öffnen der Umgebung:\n"
-#: ../libsvn_fs_base/fs.c:710
+#: ../libsvn_fs_base/fs.c:574
+msgid "creating 'nodes' table"
+msgstr "Erzeuge Tabelle »nodes« "
+
+#: ../libsvn_fs_base/fs.c:575
+msgid "opening 'nodes' table"
+msgstr "Öffne Tabelle »nodes«"
+
+#: ../libsvn_fs_base/fs.c:580
+msgid "creating 'revisions' table"
+msgstr "Erzeuge Tabelle »revisions«"
+
+#: ../libsvn_fs_base/fs.c:581
+msgid "opening 'revisions' table"
+msgstr "Öffne Tabelle »revisions«"
+
+#: ../libsvn_fs_base/fs.c:586
+msgid "creating 'transactions' table"
+msgstr "Erzeuge Tabelle »transactions«"
+
+#: ../libsvn_fs_base/fs.c:587
+msgid "opening 'transactions' table"
+msgstr "Öffne Tabelle »transactions«"
+
+#: ../libsvn_fs_base/fs.c:592
+msgid "creating 'copies' table"
+msgstr "Erzeuge Tabelle »copies«"
+
+#: ../libsvn_fs_base/fs.c:593
+msgid "opening 'copies' table"
+msgstr "Öffne Tabelle »copies«"
+
+#: ../libsvn_fs_base/fs.c:598
+msgid "creating 'changes' table"
+msgstr "Erzeuge Tabelle »changes«"
+
+#: ../libsvn_fs_base/fs.c:599
+msgid "opening 'changes' table"
+msgstr "Öffne Tabelle »changes«"
+
+#: ../libsvn_fs_base/fs.c:604
+msgid "creating 'representations' table"
+msgstr "Erzeuge Tabelle »representations«"
+
+#: ../libsvn_fs_base/fs.c:605
+msgid "opening 'representations' table"
+msgstr "Öffne Tabelle »representations«"
+
+#: ../libsvn_fs_base/fs.c:610
+msgid "creating 'strings' table"
+msgstr "Erzeuge Tabelle »strings«"
+
+#: ../libsvn_fs_base/fs.c:611
+msgid "opening 'strings' table"
+msgstr "Öffne Tabelle »strings«"
+
+#: ../libsvn_fs_base/fs.c:616
+msgid "creating 'uuids' table"
+msgstr "Erzeuge Tabelle »uuids«"
+
+#: ../libsvn_fs_base/fs.c:617
+msgid "opening 'uuids' table"
+msgstr "Öffne Tabelle »uuids«"
+
+#: ../libsvn_fs_base/fs.c:622
+msgid "creating 'locks' table"
+msgstr "Erzeuge Tabelle »locks«"
+
+#: ../libsvn_fs_base/fs.c:623
+msgid "opening 'locks' table"
+msgstr "Öffne Tabelle »locks«"
+
+#: ../libsvn_fs_base/fs.c:628
+msgid "creating 'lock-tokens' table"
+msgstr "Erzeuge Tabelle »lock-tokens«"
+
+#: ../libsvn_fs_base/fs.c:629
+msgid "opening 'lock-tokens' table"
+msgstr "Öffne Tabelle »lock-tokens«"
+
+#: ../libsvn_fs_base/fs.c:637
+msgid "creating 'node-origins' table"
+msgstr "Erzeuge Tabelle »node-origins«"
+
+#: ../libsvn_fs_base/fs.c:638
+msgid "opening 'node-origins' table"
+msgstr "Öffne Tabelle »node-origin«"
+
+#: ../libsvn_fs_base/fs.c:647
+msgid "creating 'miscellaneous' table"
+msgstr "Erzeuge Tabelle »miscellaneous«"
+
+#: ../libsvn_fs_base/fs.c:648
+msgid "opening 'miscellaneous' table"
+msgstr "Öffne Tabelle »miscellaneous«"
+
+#: ../libsvn_fs_base/fs.c:657
+msgid "creating 'checksum-reps' table"
+msgstr "Erzeuge Tabelle »checksum-reps«"
+
+#: ../libsvn_fs_base/fs.c:658
+msgid "opening 'checksum-reps' table"
+msgstr "Öffne Tabelle »checksum-reps«"
+
+#: ../libsvn_fs_base/fs.c:730
#, c-format
msgid "The '%s' feature requires version %d of the filesystem schema; filesystem '%s' uses only version %d"
msgstr "Das Merkmal »%s« erfordert Version %d des Dateisystemschemas; Dateisystem »%s« verwendet nur Version %d"
-#: ../libsvn_fs_base/fs.c:729
+#: ../libsvn_fs_base/fs.c:749
#, c-format
msgid "Expected FS format '%d'; found format '%d'"
msgstr "Erwartetes Dateisystemformat »%d«; gefunden »%d«"
-#: ../libsvn_fs_base/fs.c:1272
+#: ../libsvn_fs_base/fs.c:1215
+#, c-format
+msgid "BDB repositories do not support incremental hotcopy"
+msgstr "BDB-Projektarchive unterstützen inkrementelle Kopien im laufenden Betrieb nicht"
+
+#: ../libsvn_fs_base/fs.c:1319
msgid ""
"Error copying logfile; the DB_LOG_AUTOREMOVE feature\n"
"may be interfering with the hotcopy algorithm. If\n"
@@ -2728,7 +3232,7 @@ msgstr ""
"könnte den Hotcopy-Algorithmus stören. Falls das Problem weiterhin\n"
"besteht, versuchen Sie diese Funktion in DB_CONFIG abzuschalten"
-#: ../libsvn_fs_base/fs.c:1291
+#: ../libsvn_fs_base/fs.c:1338
msgid ""
"Error running catastrophic recovery on hotcopy; the\n"
"DB_LOG_AUTOREMOVE feature may be interfering with the\n"
@@ -2740,33 +3244,33 @@ msgstr ""
"könnte den Hotcopy-Algorithmus stören. Wenn das Problem weiterhin\n"
"besteht, versuchen Sie diese Funktion in DB_CONFIG abzuschalten"
-#: ../libsvn_fs_base/fs.c:1336
+#: ../libsvn_fs_base/fs.c:1383
msgid "Module for working with a Berkeley DB repository."
msgstr "Modul zum Zugriff auf ein Berkeley-DB-Projektarchiv."
-#: ../libsvn_fs_base/fs.c:1372
+#: ../libsvn_fs_base/fs.c:1430
#, c-format
msgid "Unsupported FS loader version (%d) for bdb"
msgstr "Nicht unterstützte Dateisystem-Laderversion (%d) für bdb"
-#: ../libsvn_fs_base/lock.c:104 ../libsvn_fs_base/lock.c:109
-#: ../libsvn_fs_fs/lock.c:755 ../libsvn_fs_fs/lock.c:760
-#: ../libsvn_fs_fs/lock.c:782
+#: ../libsvn_fs_base/lock.c:108 ../libsvn_fs_base/lock.c:113
+#: ../libsvn_fs_fs/lock.c:786 ../libsvn_fs_fs/lock.c:791
+#: ../libsvn_fs_fs/lock.c:813
#, c-format
msgid "Path '%s' doesn't exist in HEAD revision"
msgstr "Pfad »%s« existiert nicht in HEAD-Revision"
-#: ../libsvn_fs_base/lock.c:457 ../libsvn_fs_fs/lock.c:652
+#: ../libsvn_fs_base/lock.c:540 ../libsvn_fs_fs/lock.c:682
#, c-format
msgid "Cannot verify lock on path '%s'; no username available"
msgstr "Kann Sperre für Pfad »%s« nicht prüfen; keine Benutzername verfügbar"
-#: ../libsvn_fs_base/lock.c:463 ../libsvn_fs_fs/lock.c:658
+#: ../libsvn_fs_base/lock.c:546 ../libsvn_fs_fs/lock.c:688
#, c-format
msgid "User '%s' does not own lock on path '%s' (currently locked by '%s')"
msgstr "Benutzer »%s« besitzt die Sperre für Pfad »%s« nicht (derzeit gesperrt durch »%s«)"
-#: ../libsvn_fs_base/lock.c:470 ../libsvn_fs_fs/lock.c:665
+#: ../libsvn_fs_base/lock.c:552 ../libsvn_fs_fs/lock.c:694
#, c-format
msgid "Cannot verify lock on path '%s'; no matching lock-token available"
msgstr "Kann Sperre für Pfad »%s« nicht prüfen; keine entsprechende Sperrmarke verfügbar"
@@ -2786,1480 +3290,1399 @@ msgstr "Darstellung ist nicht vom Typ »delta«"
msgid "Svndiff source length inconsistency"
msgstr "Svndiff Quelllänge ist inkonsistent"
-#: ../libsvn_fs_base/reps-strings.c:507
+#: ../libsvn_fs_base/reps-strings.c:506
#, c-format
msgid "Diff version inconsistencies in representation '%s'"
msgstr "Inkonsistenzen in Diffversion in Darstellung »%s«"
-#: ../libsvn_fs_base/reps-strings.c:533
+#: ../libsvn_fs_base/reps-strings.c:532
#, c-format
msgid "Corruption detected whilst reading delta chain from representation '%s' to '%s'"
msgstr "Beim Lesen der Delta-Kette aus der Darstellung »%s« nach »%s« wurde eine Beschädigung entdeckt"
-#: ../libsvn_fs_base/reps-strings.c:797
+#: ../libsvn_fs_base/reps-strings.c:798
#, c-format
msgid "Rep contents are too large: got %s, limit is %s"
msgstr "Inhalt der Darstellung zu groß: »%s« erhalten, Grenze ist »%s«"
-#: ../libsvn_fs_base/reps-strings.c:813
+#: ../libsvn_fs_base/reps-strings.c:814
#, c-format
msgid "Failure reading representation '%s'"
msgstr "Fehler beim Lesen der Darstellung »%s«"
-#: ../libsvn_fs_base/reps-strings.c:925
+#: ../libsvn_fs_base/reps-strings.c:924
#, c-format
msgid "MD5 checksum mismatch on representation '%s'"
msgstr "MD5-Prüfsummenfehler auf Darstellung »%s«"
-#: ../libsvn_fs_base/reps-strings.c:940
+#: ../libsvn_fs_base/reps-strings.c:934
#, c-format
msgid "SHA1 checksum mismatch on representation '%s'"
msgstr "SHA1-Prüfsummenfehler auf Darstellung »%s«"
-#: ../libsvn_fs_base/reps-strings.c:956
+#: ../libsvn_fs_base/reps-strings.c:945
msgid "Null rep, but offset past zero already"
msgstr "Leere Darstellung, aber der Offset ist bereits größer als Null"
-#: ../libsvn_fs_base/reps-strings.c:1070 ../libsvn_fs_base/reps-strings.c:1261
+#: ../libsvn_fs_base/reps-strings.c:1062 ../libsvn_fs_base/reps-strings.c:1253
#, c-format
msgid "Rep '%s' is not mutable"
msgstr "Darstellung »%s« ist nicht veränderlich"
-#: ../libsvn_fs_base/reps-strings.c:1085
+#: ../libsvn_fs_base/reps-strings.c:1077
#, c-format
msgid "Rep '%s' both mutable and non-fulltext"
msgstr "Darstellung »%s« ist beides: veränderlich und kein Volltext"
-#: ../libsvn_fs_base/reps-strings.c:1380
+#: ../libsvn_fs_base/reps-strings.c:1372
msgid "Failed to get new string key"
msgstr "Konnte keinen neuen Schlüssel erzeugen"
-#: ../libsvn_fs_base/reps-strings.c:1457
+#: ../libsvn_fs_base/reps-strings.c:1449
#, c-format
msgid "Attempt to deltify '%s' against itself"
msgstr "Versuch, Deltas von »%s« gegen sich selber zu erstellen"
-#: ../libsvn_fs_base/reps-strings.c:1528 ../libsvn_fs_base/reps-strings.c:1721
+#: ../libsvn_fs_base/reps-strings.c:1522
#, c-format
msgid "Failed to calculate MD5 digest for '%s'"
msgstr "Berechnung der MD5-Summe für »%s« schlug fehl"
-#: ../libsvn_fs_base/reps-strings.c:1670
-#, fuzzy, c-format
-msgid "Attempt to obliterate '%s' using itself "
-msgstr "Versuch, Deltas von »%s« gegen sich selber zu erstellen"
-
-#: ../libsvn_fs_base/revs-txns.c:73
+#: ../libsvn_fs_base/revs-txns.c:72
#, c-format
msgid "Transaction is not dead: '%s'"
msgstr "Transaktion ist nicht tot: »%s«"
-#: ../libsvn_fs_base/revs-txns.c:76
+#: ../libsvn_fs_base/revs-txns.c:75
#, c-format
msgid "Transaction is dead: '%s'"
msgstr "Transaktion ist tot: »%s«"
-#: ../libsvn_fs_base/revs-txns.c:274 ../libsvn_fs_fs/fs_fs.c:7358
+#: ../libsvn_fs_base/revs-txns.c:272 ../libsvn_fs_fs/fs_fs.c:9763
#, c-format
msgid "revprop '%s' has unexpected value in filesystem"
msgstr "Revisionseigenschaft »%s« hat einen unerwarteten Wert im Dateisystem"
-#: ../libsvn_fs_base/revs-txns.c:1231
+#: ../libsvn_fs_base/revs-txns.c:1030
msgid "Transaction aborted, but cleanup failed"
msgstr "Transaktion abgebrochen, aber Aufräumen schlug fehl"
-#: ../libsvn_fs_base/tree.c:772 ../libsvn_fs_fs/tree.c:695
+#: ../libsvn_fs_base/trail.c:99
+msgid "beginning Berkeley DB transaction"
+msgstr "Beginne Berkeley DB Transaktion"
+
+#: ../libsvn_fs_base/trail.c:134
+msgid "aborting Berkeley DB transaction"
+msgstr "Breche Berkeley DB Transaktion ab"
+
+#: ../libsvn_fs_base/trail.c:158
+msgid "committing Berkeley DB transaction"
+msgstr "Schließe Berkeley DB Transaktion ab"
+
+#: ../libsvn_fs_base/tree.c:772 ../libsvn_fs_fs/tree.c:1065
#, c-format
msgid "Failure opening '%s'"
msgstr "Fehler beim Öffnen von »%s«"
-#: ../libsvn_fs_base/tree.c:1404 ../libsvn_fs_fs/tree.c:1124
+#: ../libsvn_fs_base/tree.c:1403 ../libsvn_fs_fs/tree.c:1516
msgid "Cannot compare property value between two different filesystems"
msgstr "Kann Eigenschaftswert nicht zwischen verschiedenen Dateisystemen vergleichen"
-#: ../libsvn_fs_base/tree.c:1850 ../libsvn_fs_base/tree.c:1920
+#: ../libsvn_fs_base/tree.c:1849 ../libsvn_fs_base/tree.c:1919
msgid "Corrupt DB: faulty predecessor count"
msgstr "DB beschädigt: Fehlerhafte Vorgängeranzahl"
-#: ../libsvn_fs_base/tree.c:1977 ../libsvn_fs_base/tree.c:2996
-#: ../libsvn_fs_fs/tree.c:1157
+#: ../libsvn_fs_base/tree.c:1976
#, c-format
msgid "Unexpected immutable node at '%s'"
msgstr "Unerwarteter unveränderlicher Knoten bei »%s«"
-#: ../libsvn_fs_base/tree.c:1998 ../libsvn_fs_fs/tree.c:1178
+#: ../libsvn_fs_base/tree.c:1997 ../libsvn_fs_fs/tree.c:1546
+#: ../libsvn_repos/commit.c:1255
#, c-format
msgid "Conflict at '%s'"
msgstr "Konflikt bei »%s«"
-#: ../libsvn_fs_base/tree.c:2051 ../libsvn_fs_base/tree.c:2845
-#: ../libsvn_fs_fs/tree.c:1229 ../libsvn_fs_fs/tree.c:1787
+#: ../libsvn_fs_base/tree.c:2050 ../libsvn_fs_base/tree.c:2802
+#: ../libsvn_fs_fs/tree.c:1597 ../libsvn_fs_fs/tree.c:2134
msgid "Bad merge; ancestor, source, and target not all in same fs"
msgstr "Fehlerhaftes Zusammenführen: Vorgänger, Quelle und Ziel nicht im gleichen Dateisystem"
-#: ../libsvn_fs_base/tree.c:2067 ../libsvn_fs_fs/tree.c:1245
+#: ../libsvn_fs_base/tree.c:2066 ../libsvn_fs_fs/tree.c:1613
#, c-format
msgid "Bad merge; target '%s' has id '%s', same as ancestor"
msgstr "Fehlerhaftes Zusammenführen: Ziel »%s« hat die gleiche ID »%s« wie der Vorgänger."
-#: ../libsvn_fs_base/tree.c:2611
+#: ../libsvn_fs_base/tree.c:2610
#, c-format
msgid "Transaction '%s' out-of-date with respect to revision '%s'"
msgstr "Transaktion »%s« ist in Bezug auf Revision »%s« veraltet"
-#: ../libsvn_fs_base/tree.c:2929
+#: ../libsvn_fs_base/tree.c:2886
#, c-format
msgid "Cannot deltify revisions prior to r%ld"
msgstr "Die Erstellung von Deltas für Revisionen vor r%ld ist nicht möglich"
-#: ../libsvn_fs_base/tree.c:3001
-#, fuzzy, c-format
-msgid "Cannot obliterate '%s' as it is not a file"
-msgstr "Pfad »%s« ist keine Datei"
-
-#: ../libsvn_fs_base/tree.c:3136 ../libsvn_fs_fs/tree.c:1924
+#: ../libsvn_fs_base/tree.c:3004 ../libsvn_fs_fs/tree.c:2289
msgid "The root directory cannot be deleted"
msgstr "Das Basisverzeichnis kann nicht gelöscht werden"
-#: ../libsvn_fs_base/tree.c:3359 ../libsvn_fs_fs/tree.c:2005
+#: ../libsvn_fs_base/tree.c:3217 ../libsvn_fs_fs/tree.c:2359
#, c-format
msgid "Cannot copy between two different filesystems ('%s' and '%s')"
msgstr "Kann nicht zwischen zwei verschiedenen Dateisystemen (»%s« und »%s«) kopieren"
-#: ../libsvn_fs_base/tree.c:3368 ../libsvn_fs_fs/tree.c:2011
+#: ../libsvn_fs_base/tree.c:3226 ../libsvn_fs_fs/tree.c:2365
msgid "Copy from mutable tree not currently supported"
msgstr "Kopieren eines veränderlichen Baumes wird derzeit nicht unterstützt"
-#: ../libsvn_fs_base/tree.c:3881 ../libsvn_fs_fs/tree.c:2462
+#: ../libsvn_fs_base/tree.c:3736 ../libsvn_fs_fs/tree.c:2842
#, c-format
msgid "Base checksum mismatch on '%s'"
msgstr "Basis-Prüfsummenfehler bei »%s«"
-#: ../libsvn_fs_base/tree.c:4130 ../libsvn_fs_fs/tree.c:2694
+#: ../libsvn_fs_base/tree.c:3969 ../libsvn_fs_fs/tree.c:3057
msgid "Cannot compare file contents between two different filesystems"
msgstr "Kann Dateiinhalte nicht zwischen verschiedenen Dateisystemen vergleichen"
-#: ../libsvn_fs_base/tree.c:4139 ../libsvn_fs_base/tree.c:4144
-#: ../libsvn_fs_fs/tree.c:2703 ../libsvn_fs_fs/tree.c:2708
-#: ../libsvn_ra/compat.c:671
-#, c-format
-msgid "'%s' is not a file"
-msgstr "»%s« ist keine Datei"
-
-#: ../libsvn_fs_base/tree.c:5169 ../libsvn_fs_base/tree.c:5357
+#: ../libsvn_fs_base/tree.c:5013 ../libsvn_fs_base/tree.c:5188
#, c-format
msgid "Node-revision '%s' claims to have mergeinfo but doesn't"
msgstr "Knotenrevision »%s« behauptet, Zusammenführungsinformationen zu haben, hat aber keine"
-#: ../libsvn_fs_base/tree.c:5193
+#: ../libsvn_fs_base/tree.c:5049
#, c-format
msgid "Node-revision '%s' claims to sit atop a tree containing mergeinfo but is not a directory"
msgstr "Knotenrevision »%s« behauptet, über einem Baum, der Zusammenführungsinformationen enthält, zu sitzen, ist aber kein Verzeichnis"
-#: ../libsvn_fs_fs/caching.c:75
-msgid "Bad ID in cache"
-msgstr "Fehlerhafte ID im Zwischenspeicher"
-
-#: ../libsvn_fs_fs/dag.c:435 ../libsvn_ra_serf/serf.c:845
+#: ../libsvn_fs_fs/dag.c:426 ../libsvn_fs_fs/dag.c:442
+#: ../libsvn_ra_serf/serf.c:1038 ../libsvn_ra_serf/serf.c:1101
msgid "Can't get entries of non-directory"
msgstr "Kann keine Einträge aus einem nicht-Verzeichnis lesen"
-#: ../libsvn_fs_fs/dag.c:542
+#: ../libsvn_fs_fs/dag.c:551
#, c-format
msgid "Can't increment mergeinfo count on node-revision %%s to negative value %%%s"
msgstr "Kann Zusammenführungsinformationszähler für Knotenrevision %%s nicht auf negativen Wert %%%s erhöhen"
# FIXME: node-revision or node-rev (wie überall)?
-#: ../libsvn_fs_fs/dag.c:553
+#: ../libsvn_fs_fs/dag.c:562
#, c-format
msgid "Can't increment mergeinfo count on *file* node-revision %%s to %%%s (> 1)"
msgstr "Kann Zusammenführungsinformationszähler für Datei-Knotenrevision %%s nicht auf %%%s (> 1) erhöhen"
-#: ../libsvn_fs_fs/dag.c:1026 ../libsvn_ra_neon/fetch.c:749
-#: ../libsvn_ra_svn/client.c:1072
-#, c-format
-msgid "Checksum mismatch for '%s'"
-msgstr "Prüfsummenfehler für »%s«"
-
-#: ../libsvn_fs_fs/dag.c:1131
+#: ../libsvn_fs_fs/dag.c:1134
msgid "Empty noderev in cache"
msgstr "Leere Knotenrevision im Zwischenspeicher"
-#: ../libsvn_fs_fs/dag.c:1141
-msgid "Kindless noderev in cache"
-msgstr "Nutzlose Knotenrevision im Zwischenspeicher"
-
-#: ../libsvn_fs_fs/dag.c:1148
-#, c-format
-msgid "Unknown kind for noderev in cache: '%c'"
-msgstr "Unbekannte Art der Knotenrevision im Zwischenspeicher: »%c«"
-
-#: ../libsvn_fs_fs/dag.c:1155
-msgid "Unterminated ID in cache"
-msgstr "Nicht abgeschlossene ID im Zwischenspeicher"
-
-#: ../libsvn_fs_fs/dag.c:1160
-#, c-format
-msgid "Bogus ID '%s' in cache"
-msgstr "Fehlerhafte ID »%s« im Zwischenspeicher"
-
-#: ../libsvn_fs_fs/dag.c:1167
-msgid "No created path"
-msgstr "Kein erzeugter Pfad"
-
-#: ../libsvn_fs_fs/dag.c:1193
+#: ../libsvn_fs_fs/dag.c:1326
#, c-format
-msgid "Unknown node type in cache: '%c'"
-msgstr "Unbekannter Knotentyp im Zwischenspeicher: »%c«"
+msgid "Attempted to update ancestry of non-mutable node"
+msgstr "Versuchte, die Herkunft eines unveränderlichen Knotens zu ändern"
-#: ../libsvn_fs_fs/fs.c:80
+#: ../libsvn_fs_fs/fs.c:83
#, c-format
msgid "Can't fetch FSFS shared data"
msgstr "Kann gemeinsame FSFS-Daten nicht holen"
-#: ../libsvn_fs_fs/fs.c:96
-#, c-format
-msgid "Can't create FSFS write-lock mutex"
-msgstr "Kann FSFS Schreibschutz-Mutex nicht anlegen"
-
-#: ../libsvn_fs_fs/fs.c:103
-#, c-format
-msgid "Can't create FSFS txn-current mutex"
-msgstr "Kann FSFS-txn-current-Mutex nicht anlegen"
-
-# CHECKME: s/txn list/txn-list/? Compare txn-current
-#: ../libsvn_fs_fs/fs.c:112
-#, c-format
-msgid "Can't create FSFS txn list mutex"
-msgstr "Kann FSFS-txn-list-Mutex nicht anlegen"
-
-#: ../libsvn_fs_fs/fs.c:119
+#: ../libsvn_fs_fs/fs.c:110
#, c-format
msgid "Can't store FSFS shared data"
msgstr "Kann gemeinsame FSFS-Daten nicht speichern"
-#: ../libsvn_fs_fs/fs.c:332
+#: ../libsvn_fs_fs/fs.c:404
msgid "Module for working with a plain file (FSFS) repository."
msgstr "Modul zum Zugriff auf ein dateibasiertes (FSFS) Projektarchiv."
-#: ../libsvn_fs_fs/fs.c:368
+#: ../libsvn_fs_fs/fs.c:454
#, c-format
msgid "Unsupported FS loader version (%d) for fsfs"
msgstr "Nicht unterstützte Dateisystem-Laderversion (%d) für fsfs"
-#: ../libsvn_fs_fs/fs_fs.c:288
-#, c-format
-msgid "Revision file '%s' does not exist, and r%ld is not packed"
-msgstr "Revisionsdatei »%s« existiert nicht und r%ld ist nicht gepackt"
-
-#: ../libsvn_fs_fs/fs_fs.c:535
-#, c-format
-msgid "Can't grab FSFS txn list mutex"
-msgstr "Kann FSFS-txn-list-Mutex nicht greifen"
-
-#: ../libsvn_fs_fs/fs_fs.c:543
-#, c-format
-msgid "Can't ungrab FSFS txn list mutex"
-msgstr "Kann FSFS-txn-list-Mutex nicht loslassen"
-
-#: ../libsvn_fs_fs/fs_fs.c:597
-#, c-format
-msgid "Can't grab FSFS mutex for '%s'"
-msgstr "Kann FSFS-Mutex für »%s« nicht greifen"
-
-#: ../libsvn_fs_fs/fs_fs.c:623
-#, c-format
-msgid "Can't ungrab FSFS mutex for '%s'"
-msgstr "Kann FSFS-Mutex für »%s« nicht loslassen"
-
-#: ../libsvn_fs_fs/fs_fs.c:694
+#: ../libsvn_fs_fs/fs_fs.c:727
#, c-format
msgid "Can't unlock unknown transaction '%s'"
msgstr "Kann unbekannte Transaktion »%s« nicht freigeben"
-#: ../libsvn_fs_fs/fs_fs.c:698
+#: ../libsvn_fs_fs/fs_fs.c:731
#, c-format
msgid "Can't unlock nonlocked transaction '%s'"
msgstr "Nicht gesperrte Transaktion »%s« kann nicht freigeben werden"
# FIXME: Dies ist aber nicht infinitisch übersetzt (siehe umliegenden Meldungen)
-#: ../libsvn_fs_fs/fs_fs.c:705
+#: ../libsvn_fs_fs/fs_fs.c:738
#, c-format
msgid "Can't unlock prototype revision lockfile for transaction '%s'"
msgstr "Kann Prototyp-Revisionssperrdatei für Transaktion »%s« nicht entsperren"
-#: ../libsvn_fs_fs/fs_fs.c:711
+#: ../libsvn_fs_fs/fs_fs.c:744
#, c-format
msgid "Can't close prototype revision lockfile for transaction '%s'"
msgstr "Kann Prototyp-Revisionssperrdatei für Transaktion »%s« nicht schließen"
-#: ../libsvn_fs_fs/fs_fs.c:773
+#: ../libsvn_fs_fs/fs_fs.c:806
#, c-format
msgid "Cannot write to the prototype revision file of transaction '%s' because a previous representation is currently being written by this process"
msgstr "Kann nicht in die Prototyp-Revisionsdatei der Transaktion »%s« schreiben, da eine frühere Darstellung zurzeit von diesem Prozess geschrieben wird"
-#: ../libsvn_fs_fs/fs_fs.c:809
+#: ../libsvn_fs_fs/fs_fs.c:842
#, c-format
msgid "Cannot write to the prototype revision file of transaction '%s' because a previous representation is currently being written by another process"
msgstr "Kann nicht in die Prototyp-Revisionsdatei der Transaktion »%s« schreiben, da eine frühere Darstellung zurzeit von einem anderen Prozess geschrieben wird"
-#: ../libsvn_fs_fs/fs_fs.c:816 ../libsvn_subr/io.c:1702
+#: ../libsvn_fs_fs/fs_fs.c:849 ../libsvn_subr/io.c:2014
#, c-format
msgid "Can't get exclusive lock on file '%s'"
msgstr "Kann keinen exklusiven Zugriff auf Datei »%s« erlangen"
-#: ../libsvn_fs_fs/fs_fs.c:928
+#: ../libsvn_fs_fs/fs_fs.c:968
+#, c-format
+msgid "%s file '%s' contains unexpected non-digit '%c' within '%s'"
+msgstr "Die Datei %s (»%s«) enthält eine unerwartete Nicht-Ziffer »%c« innerhalb »%s«"
+
+#: ../libsvn_fs_fs/fs_fs.c:995
#, c-format
-msgid "Format file '%s' contains unexpected non-digit '%c' within '%s'"
-msgstr "Die Formatdatei »%s« enthält eine unerwartete Nicht-Ziffer »%c« innerhalb »%s«"
+msgid "Found format '%d', only created by unreleased dev builds; see http://subversion.apache.org/docs/release-notes/1.7#revprop-packing"
+msgstr "Format »%d« gefunden, das nur durch nicht veröffentlichte Entwicklungsversionen erstellt wurde; siehe http://subversion.apache.org/docs/release-notes/1.7#revprop-packing"
+
+#: ../libsvn_fs_fs/fs_fs.c:1006
+#, c-format
+msgid "Expected FS format between '1' and '%d'; found format '%d'"
+msgstr "Erwartete Dateisystemformat zwischen 1 und %d; fand %d"
-#: ../libsvn_fs_fs/fs_fs.c:977
+#: ../libsvn_fs_fs/fs_fs.c:1052
#, c-format
msgid "Can't read first line of format file '%s'"
msgstr "Die erste Zeile der Formatdatei »%s« kann nicht gelesen werden"
-#: ../libsvn_fs_fs/fs_fs.c:1021
+#: ../libsvn_fs_fs/fs_fs.c:1092
#, c-format
msgid "'%s' contains invalid filesystem format option '%s'"
msgstr "»%s« enthält eine ungültige Dateisystemformat-Option »%s«"
-#: ../libsvn_fs_fs/fs_fs.c:1091
-#, c-format
-msgid "Expected FS format between '1' and '%d'; found format '%d'"
-msgstr "Erwartete Dateisystemformat zwischen 1 und %d; fand %d"
-
-#: ../libsvn_fs_fs/fs_fs.c:1335
+#: ../libsvn_fs_fs/fs_fs.c:1582
#, c-format
msgid "'%s' is not a regular file. Please move it out of the way and try again"
msgstr "»%s« ist keine reguläre Datei. Bitte aus dem Weg bewegen und noch einmal versuchen."
-#: ../libsvn_fs_fs/fs_fs.c:1593
+#: ../libsvn_fs_fs/fs_fs.c:1753
#, c-format
-msgid "Failed to create hotcopy at '%s'. The file '%s' is missing from the source repository. Please create this file, for instance by running 'svnadmin upgrade %s'"
-msgstr "Erstellen der hotcopy auf »%s« fehlgeschlagen. Die Datei »%s« fehlt im Quellprojektarchiv. Bitte diese Datei erstellen, z.B. durch die Ausführung von »svnadmin upgrade %s«"
+msgid "Can't read '%s'"
+msgstr "Kann »%s« nicht lesen"
-#: ../libsvn_fs_fs/fs_fs.c:1830 ../libsvn_fs_fs/fs_fs.c:1844
-msgid "Found malformed header in revision file"
-msgstr "Fehlerhafter Kopf in Revisionsdatei gefunden"
+#: ../libsvn_fs_fs/fs_fs.c:1816 ../libsvn_fs_fs/fs_fs.c:1835
+#, c-format
+msgid "Found malformed header '%s' in revision file"
+msgstr "Fehlerhafte Kopfdaten »%s« in Revisionsdatei gefunden"
-#: ../libsvn_fs_fs/fs_fs.c:1878
+#: ../libsvn_fs_fs/fs_fs.c:1871
#, c-format
msgid "Invalid revision number '%ld'"
msgstr "Ungültige Revisionsnummer »%ld«"
-#: ../libsvn_fs_fs/fs_fs.c:1893 ../libsvn_fs_fs/fs_fs.c:1919
-#: ../libsvn_fs_fs/fs_fs.c:2933 ../libsvn_fs_fs/fs_fs.c:2971
-#: ../libsvn_repos/log.c:1644 ../libsvn_repos/log.c:1648
+#: ../libsvn_fs_fs/fs_fs.c:1886 ../libsvn_fs_fs/fs_fs.c:1941
+#: ../libsvn_fs_fs/fs_fs.c:1952 ../libsvn_repos/log.c:2268
+#: ../libsvn_repos/log.c:2272
#, c-format
msgid "No such revision %ld"
msgstr "Keine Revision %ld"
-#: ../libsvn_fs_fs/fs_fs.c:1976
-msgid "Manifest offset too large"
-msgstr "Manifest offset zu groß"
+#: ../libsvn_fs_fs/fs_fs.c:1986
+msgid "Unexpected EOF"
+msgstr "Unerwartetes Dateiende (EOF)"
+
+#: ../libsvn_fs_fs/fs_fs.c:1993
+#, c-format
+msgid "Number '%s' invalid or too large"
+msgstr "Zahl »%s« ist ungültig oder zu groß"
-#: ../libsvn_fs_fs/fs_fs.c:2086 ../libsvn_fs_fs/fs_fs.c:2100
-#: ../libsvn_fs_fs/fs_fs.c:2108 ../libsvn_fs_fs/fs_fs.c:2116
-#: ../libsvn_fs_fs/fs_fs.c:2125 ../libsvn_fs_fs/fs_fs.c:2138
-#: ../libsvn_fs_fs/fs_fs.c:2147
+#: ../libsvn_fs_fs/fs_fs.c:2160 ../libsvn_fs_fs/fs_fs.c:2174
+#: ../libsvn_fs_fs/fs_fs.c:2182 ../libsvn_fs_fs/fs_fs.c:2190
+#: ../libsvn_fs_fs/fs_fs.c:2199 ../libsvn_fs_fs/fs_fs.c:2212
+#: ../libsvn_fs_fs/fs_fs.c:2221
msgid "Malformed text representation offset line in node-rev"
msgstr "Fehlerhafte »text representation offset«-Zeile in Knotenrevision"
-#: ../libsvn_fs_fs/fs_fs.c:2226
+#: ../libsvn_fs_fs/fs_fs.c:2252
+#, c-format
+msgid "While reading representation offsets for node-revision '%s':"
+msgstr "Beim Lesen der Darstellungsoffsets für Knotenrevision »%s«"
+
+#: ../libsvn_fs_fs/fs_fs.c:2407
msgid "Missing id field in node-rev"
msgstr "Fehlendes ID-Feld in Knotenrevision"
-#: ../libsvn_fs_fs/fs_fs.c:2238
-msgid "Missing kind field in node-rev"
-msgstr "Fehlendes Feld »kind« in Knotenrevision"
+#: ../libsvn_fs_fs/fs_fs.c:2421
+#, c-format
+msgid "Missing kind field in node-rev '%s'"
+msgstr "Fehlendes Feld »kind« in Knotenrevision »%s«"
-#: ../libsvn_fs_fs/fs_fs.c:2272
-msgid "Missing cpath in node-rev"
-msgstr "Fehlender »cpath« in Knotenrevision"
+#: ../libsvn_fs_fs/fs_fs.c:2456
+#, c-format
+msgid "Missing cpath field in node-rev '%s'"
+msgstr "Fehlendes Feld »cpath« in Knotenrevision »%s«"
-#: ../libsvn_fs_fs/fs_fs.c:2299 ../libsvn_fs_fs/fs_fs.c:2305
-msgid "Malformed copyroot line in node-rev"
-msgstr "Fehlerhafte »copyroot«-Zeile in Knotenrevision"
+#: ../libsvn_fs_fs/fs_fs.c:2484 ../libsvn_fs_fs/fs_fs.c:2491
+#, c-format
+msgid "Malformed copyroot line in node-rev '%s'"
+msgstr "Fehlerhafte »copyroot«-Zeile in Knotenrevision »%s«"
-#: ../libsvn_fs_fs/fs_fs.c:2323 ../libsvn_fs_fs/fs_fs.c:2329
-msgid "Malformed copyfrom line in node-rev"
-msgstr "Fehlerhafte »copyfrom«-Zeile in Knotenrevision"
+#: ../libsvn_fs_fs/fs_fs.c:2508 ../libsvn_fs_fs/fs_fs.c:2515
+#, c-format
+msgid "Malformed copyfrom line in node-rev '%s'"
+msgstr "Fehlerhafte »copyfrom«-Zeile in Knotenrevision »%s«"
-#: ../libsvn_fs_fs/fs_fs.c:2489 ../libsvn_fs_fs/fs_fs.c:5472
-msgid "Attempted to write to non-transaction"
-msgstr "Versuch, in eine Nicht-Transaktion zu schreiben"
+#: ../libsvn_fs_fs/fs_fs.c:2684 ../libsvn_fs_fs/fs_fs.c:7632
+#, c-format
+msgid "Attempted to write to non-transaction '%s'"
+msgstr "Versuch, in eine Nicht-Transaktion zu schreiben »%s«"
-#: ../libsvn_fs_fs/fs_fs.c:2582
-msgid "Malformed representation header"
-msgstr "Fehlerhafter Darstellungskopf"
+#: ../libsvn_fs_fs/fs_fs.c:2821
+#, c-format
+msgid "Malformed representation header at %s"
+msgstr "Fehlerhafter Darstellungskopf in »%s«"
-#: ../libsvn_fs_fs/fs_fs.c:2610
-msgid "Missing node-id in node-rev"
-msgstr "Fehlende Knoten-Id in Knotenrevision"
+#: ../libsvn_fs_fs/fs_fs.c:2853
+#, c-format
+msgid "Missing node-id in node-rev at r%ld (offset %s)"
+msgstr "Fehlende Knoten-ID in Knotenrevision bei r%ld (Offset »%s«)"
-#: ../libsvn_fs_fs/fs_fs.c:2616
-msgid "Corrupt node-id in node-rev"
-msgstr "Beschädigter Knoten-Id in Knotenrevision"
+#: ../libsvn_fs_fs/fs_fs.c:2862
+#, c-format
+msgid "Corrupt node-id '%s' in node-rev at r%ld (offset %s)"
+msgstr "Beschädigte Knoten-ID »%s« in Knotenrevision bei r%ld (Offset »%s«)"
-#: ../libsvn_fs_fs/fs_fs.c:2692
+#: ../libsvn_fs_fs/fs_fs.c:2953
#, c-format
-msgid "Revision file lacks trailing newline"
-msgstr "Revisionsdatei hat keinen abschließenden Zeilenumbruch"
+msgid "Revision file (r%ld) lacks trailing newline"
+msgstr "Revisionsdatei (r%ld) hat keinen abschließenden Zeilenumbruch"
-#: ../libsvn_fs_fs/fs_fs.c:2705
+#: ../libsvn_fs_fs/fs_fs.c:2967
#, c-format
-msgid "Final line in revision file longer than 64 characters"
-msgstr "Letzte Zeile in der Revisionsdatei ist länger als 64 Zeichen"
+msgid "Final line in revision file (r%ld) longer than 64 characters"
+msgstr "Letzte Zeile in der Revisionsdatei (r%ld) ist länger als 64 Zeichen"
-#: ../libsvn_fs_fs/fs_fs.c:2719
-msgid "Final line in revision file missing space"
-msgstr "Letzte Zeile in der Revisionsdatei enthält kein Leerzeichen"
+#: ../libsvn_fs_fs/fs_fs.c:2982
+#, c-format
+msgid "Final line in revision file r%ld missing space"
+msgstr "Letzte Zeile in der Revisionsdatei r%ld hat nicht genug Leerzeichen"
-#: ../libsvn_fs_fs/fs_fs.c:3050
+#: ../libsvn_fs_fs/fs_fs.c:3686
+#, fuzzy, c-format
+msgid "Packed revprop manifest for r%ld too small"
+msgstr "Verzeichnis für gepackte Revisionseigenschaften für Revision %ld ist zu klein"
+
+#: ../libsvn_fs_fs/fs_fs.c:3743
+#, c-format
+msgid "Revprop pack for revision r%ld contains revprops for r%ld .. r%ld"
+msgstr "Datei mit gepackten Revisionseigenschaften für Revision r%ld enthält Revisionseigenschaften für r%ld .. %ld"
+
+#: ../libsvn_fs_fs/fs_fs.c:3754
+#, c-format
+msgid "Revprop pack for revision r%ld starts at non-packed revisions r%ld"
+msgstr "Datei mit gepackten Revisionseigenschaften für Revision r%ld beginnt mit nicht gepackter Revision r%ld"
+
+#: ../libsvn_fs_fs/fs_fs.c:3763
+msgid "Header end not found"
+msgstr "Ende der Kopfdaten nicht gefunden"
+
+#: ../libsvn_fs_fs/fs_fs.c:3791
+msgid "Packed revprop size exceeds pack file size"
+msgstr "Größe der gepackten Revisionseigenschaften überschreitet die größe der gepackten Datei"
+
+#: ../libsvn_fs_fs/fs_fs.c:3850
+#, c-format
+msgid "No such packed revision %ld"
+msgstr "Keine gepackte Revision %ld"
+
+#: ../libsvn_fs_fs/fs_fs.c:3890
+#, c-format
+msgid "Failed to read revprop pack file for r%ld"
+msgstr "Konnte gepackte Revisionseigenschaften-Datei für r%ld nicht lesen"
+
+#: ../libsvn_fs_fs/fs_fs.c:3897
+#, c-format
+msgid "Revprop pack file for r%ld is corrupt"
+msgstr "Daten mit gepackten Revisionseigenschaften für r%ld ist beschädigt"
+
+#: ../libsvn_fs_fs/fs_fs.c:3970
+#, c-format
+msgid "Could not read revprops for revision %ld"
+msgstr "Konnte Revisionseigenschaften für Revision %ld nicht lesen"
+
+#: ../libsvn_fs_fs/fs_fs.c:4199
+#, c-format
+msgid "Packed file '%s' misses a tag"
+msgstr "Der gepackten Datei »%s« fehlt ein Tag"
+
+#: ../libsvn_fs_fs/fs_fs.c:4537
msgid "Malformed svndiff data in representation"
msgstr "Fehlerhafte svndiff-Daten in Darstellung"
-#: ../libsvn_fs_fs/fs_fs.c:3242 ../libsvn_fs_fs/fs_fs.c:3255
+#: ../libsvn_fs_fs/fs_fs.c:4973 ../libsvn_fs_fs/fs_fs.c:4992
msgid "Reading one svndiff window read beyond the end of the representation"
msgstr "Lesen eines svndiff-Fensters las über Ende der Darstellung hinaus"
-#: ../libsvn_fs_fs/fs_fs.c:3395
-msgid "svndiff data requested non-existent source"
-msgstr "svndiff-Daten verlangten nicht existierende Quelle"
-
-#: ../libsvn_fs_fs/fs_fs.c:3401
-msgid "svndiff requested position beyond end of stream"
-msgstr "Von svndiff verlangte Position ist jenseits des Datenstromendes"
-
-#: ../libsvn_fs_fs/fs_fs.c:3424 ../libsvn_fs_fs/fs_fs.c:3441
+#: ../libsvn_fs_fs/fs_fs.c:5080
msgid "svndiff window length is corrupt"
msgstr "Svndiff Fensterlänge ist beschädigt"
-#: ../libsvn_fs_fs/fs_fs.c:3493
-#
+#: ../libsvn_fs_fs/fs_fs.c:5248
msgid "Checksum mismatch while reading representation"
msgstr "Prüfsummenfehler beim Lesen der Darstellung"
-#: ../libsvn_fs_fs/fs_fs.c:3790 ../libsvn_fs_fs/fs_fs.c:3803
-#: ../libsvn_fs_fs/fs_fs.c:3809 ../libsvn_fs_fs/fs_fs.c:6772
-#: ../libsvn_fs_fs/fs_fs.c:6781 ../libsvn_fs_fs/fs_fs.c:6787
-msgid "Directory entry corrupt"
-msgstr "Verzeichniseintrag beschädigt"
+#: ../libsvn_fs_fs/fs_fs.c:5613 ../libsvn_fs_fs/fs_fs.c:5627
+#: ../libsvn_fs_fs/fs_fs.c:5634
+#, c-format
+msgid "Directory entry corrupt in '%s'"
+msgstr "Verzeichniseintrag beschädigt in »%s«"
-#: ../libsvn_fs_fs/fs_fs.c:4211 ../libsvn_fs_fs/fs_fs.c:4216
-#: ../libsvn_fs_fs/fs_fs.c:4222 ../libsvn_fs_fs/fs_fs.c:4239
-#: ../libsvn_fs_fs/fs_fs.c:4272 ../libsvn_fs_fs/fs_fs.c:4292
-#: ../libsvn_fs_fs/fs_fs.c:4326 ../libsvn_fs_fs/fs_fs.c:4331
+#: ../libsvn_fs_fs/fs_fs.c:6112 ../libsvn_fs_fs/fs_fs.c:6117
+#: ../libsvn_fs_fs/fs_fs.c:6123 ../libsvn_fs_fs/fs_fs.c:6140
+#: ../libsvn_fs_fs/fs_fs.c:6173 ../libsvn_fs_fs/fs_fs.c:6193
+#: ../libsvn_fs_fs/fs_fs.c:6228 ../libsvn_fs_fs/fs_fs.c:6233
msgid "Invalid changes line in rev-file"
msgstr "Ungültige »changes« Zeile in Rev Datei"
-#: ../libsvn_fs_fs/fs_fs.c:4265
+#: ../libsvn_fs_fs/fs_fs.c:6166
msgid "Invalid change kind in rev file"
msgstr "Ungültiger Änderungstyp in Rev Datei"
-#: ../libsvn_fs_fs/fs_fs.c:4285
+#: ../libsvn_fs_fs/fs_fs.c:6186
msgid "Invalid text-mod flag in rev-file"
msgstr "Ungültiges »text-mod« Flag in Rev Datei"
-#: ../libsvn_fs_fs/fs_fs.c:4305
+#: ../libsvn_fs_fs/fs_fs.c:6206
msgid "Invalid prop-mod flag in rev-file"
msgstr "Ungültiges »prop-mod« Flag in Rev Datei"
-#: ../libsvn_fs_fs/fs_fs.c:4482
+#: ../libsvn_fs_fs/fs_fs.c:6464
msgid "Copying from transactions not allowed"
msgstr "Kopieren aus Transaktionen ist nicht erlaubt."
-#: ../libsvn_fs_fs/fs_fs.c:4638
+#: ../libsvn_fs_fs/fs_fs.c:6597
#, c-format
msgid "Unable to create transaction directory in '%s' for revision %ld"
msgstr "Kann Transaktionsverzeichnis in »%s« in Revision %ld nicht anlegen"
-#: ../libsvn_fs_fs/fs_fs.c:4761
+#: ../libsvn_fs_fs/fs_fs.c:6662
msgid "Internal error: a null transaction id was passed to get_txn_proplist()"
msgstr "Interner Fehler: eine Transaktionskennung von Null wurde übergeben um get_txn_proplist() zu erhalten"
-#: ../libsvn_fs_fs/fs_fs.c:4920 ../libsvn_fs_fs/fs_fs.c:4927
+#: ../libsvn_fs_fs/fs_fs.c:6821 ../libsvn_fs_fs/fs_fs.c:6828
msgid "next-id file corrupt"
msgstr "»next-id« Datei beschädigt"
-#: ../libsvn_fs_fs/fs_fs.c:5023
-msgid "Transaction cleanup failed"
-msgstr "Aufräumen der Transaktion schlug fehl"
+#: ../libsvn_fs_fs/fs_fs.c:6924
+#, c-format
+msgid "Transaction '%s' cleanup failed"
+msgstr "Aufräumen der Transaktion »%s« schlug fehl"
-#: ../libsvn_fs_fs/fs_fs.c:5136
-msgid "Invalid change type"
-msgstr "Ungültiger Änderungstyp"
+#: ../libsvn_fs_fs/fs_fs.c:7064
+#, c-format
+msgid "Invalid change type %d"
+msgstr "Ungültiger Änderungstyp %d"
-#: ../libsvn_fs_fs/fs_fs.c:5491
+#: ../libsvn_fs_fs/fs_fs.c:7652
msgid "Can't set text contents of a directory"
msgstr "Kann Textinhalt im Verzeichnis nicht erzeugen"
-#: ../libsvn_fs_fs/fs_fs.c:5575 ../libsvn_fs_fs/fs_fs.c:5580
-#: ../libsvn_fs_fs/fs_fs.c:5587
+#: ../libsvn_fs_fs/fs_fs.c:7738 ../libsvn_fs_fs/fs_fs.c:7743
+#: ../libsvn_fs_fs/fs_fs.c:7750
msgid "Corrupt 'current' file"
msgstr "Beschädigte Datei »current«"
-#: ../libsvn_fs_fs/fs_fs.c:6058
+#: ../libsvn_fs_fs/fs_fs.c:8010
+#, c-format
+msgid "predecessor count for the root node-revision is wrong: found (%d+%ld != %d), committing r%ld"
+msgstr "Anzahl der Vorgänger für die Revision des Wurzelknotens ist falsch: Gefunden (%d+%ld != %d) bei Übertragung von r%ld"
+
+#: ../libsvn_fs_fs/fs_fs.c:8145
+msgid "Truncated protorev file detected"
+msgstr "Abgeschnittene Datei »protorev« entdeckt"
+
+#: ../libsvn_fs_fs/fs_fs.c:8545
msgid "Transaction out of date"
msgstr "Transaktion ist veraltet"
-#: ../libsvn_fs_fs/fs_fs.c:6234
-#, fuzzy
-msgid "Obliteration of already-packed revision is not supported"
-msgstr "Annotieren der WORKING-Revision wird nicht unterstützt"
-
-#: ../libsvn_fs_fs/fs_fs.c:6714
+#: ../libsvn_fs_fs/fs_fs.c:9044
msgid "Recovery encountered a non-directory node"
msgstr "Wiederherstellung fand einen Nicht-Verzeichnisknoten"
-#: ../libsvn_fs_fs/fs_fs.c:6736
+#: ../libsvn_fs_fs/fs_fs.c:9066
msgid "Recovery encountered a deltified directory representation"
msgstr "Wiederherstellung fand eine deltifizierte Verzeichnisrepräsentation"
+#: ../libsvn_fs_fs/fs_fs.c:9102 ../libsvn_fs_fs/fs_fs.c:9111
+#: ../libsvn_fs_fs/fs_fs.c:9117
+msgid "Directory entry corrupt"
+msgstr "Verzeichniseintrag beschädigt"
+
# FIXME: rev ==> revision
-#: ../libsvn_fs_fs/fs_fs.c:6886
+#: ../libsvn_fs_fs/fs_fs.c:9290
#, c-format
msgid "Expected current rev to be <= %ld but found %ld"
msgstr "Erwartete, dass aktuelle Revision <= %ld gilt, fand aber %ld"
-#: ../libsvn_fs_fs/fs_fs.c:6959
+#: ../libsvn_fs_fs/fs_fs.c:9347
#, c-format
msgid "Revision %ld has a revs file but no revprops file"
msgstr "Revision %ld hat eine Revisions-Datei aber keine Revisionseigenschafts-Datei"
-#: ../libsvn_fs_fs/fs_fs.c:6967
+#: ../libsvn_fs_fs/fs_fs.c:9354
+#, c-format
+msgid "Revision %ld has a revs file but the revprops file is inaccessible"
+msgstr "Revision %ld hat eine Revisions-Datei aber die Revisionseigenschafts-Datei ist nicht verfügbar"
+
+#: ../libsvn_fs_fs/fs_fs.c:9363
#, c-format
msgid "Revision %ld has a non-file where its revprops file should be"
msgstr "Revision %ld hat eine Nicht-Datei, wo seine Revisionseigenschafts-Datei sein sollte"
-#: ../libsvn_fs_fs/fs_fs.c:7145
+#: ../libsvn_fs_fs/fs_fs.c:9541
#, c-format
msgid "Node origin for '%s' exists with a different value (%s) than what we were about to store (%s)"
msgstr "Knotenursprung für »%s« existiert mit einem anderen Wert (%s) als der, der gespeichert werden soll (%s)"
-#: ../libsvn_fs_fs/fs_fs.c:7251
-msgid "No such transaction"
-msgstr "Keine solche Transaktion"
+#: ../libsvn_fs_fs/fs_fs.c:9647
+#, c-format
+msgid "No such transaction '%s'"
+msgstr "Keine solche Transaktion »%s«"
+
+#: ../libsvn_fs_fs/fs_fs.c:10364
+#, c-format
+msgid "FSFS format (%d) too old to pack; please upgrade the filesystem."
+msgstr "Das FSFS-Format (%d) ist zum Packen zu alt, bitte verwenden Sie ein neueres Format"
-#: ../libsvn_fs_fs/fs_fs.c:7711
-msgid "FS format too old to pack, please upgrade."
-msgstr "Das Dateisystemformat ist zum Packen zu alt, bitte aktualisieren Sie."
+#: ../libsvn_fs_fs/fs_fs.c:10643 ../libsvn_subr/io.c:248
+#, c-format
+msgid "Error converting entry in directory '%s' to UTF-8"
+msgstr "Fehler beim Konvertieren eines Eintrags im Verzeichnis »%s« nach UTF-8"
-#: ../libsvn_fs_fs/lock.c:117
+#: ../libsvn_fs_fs/fs_fs.c:10680 ../libsvn_subr/io.c:1021
+#, c-format
+msgid "Source '%s' is not a directory"
+msgstr "Quelle »%s« ist kein Verzeichnis"
+
+#: ../libsvn_fs_fs/fs_fs.c:10686 ../libsvn_subr/io.c:1027
+#, c-format
+msgid "Destination '%s' is not a directory"
+msgstr "Ziel »%s« ist kein Verzeichnis"
+
+#: ../libsvn_fs_fs/fs_fs.c:10758 ../libsvn_subr/io.c:1104
+#: ../libsvn_subr/io.c:2492
+#, c-format
+msgid "Can't read directory '%s'"
+msgstr "Kann Verzeichnis »%s« nicht lesen"
+
+#: ../libsvn_fs_fs/fs_fs.c:10763 ../libsvn_subr/io.c:1109
+#: ../libsvn_subr/io.c:2497 ../libsvn_subr/io.c:4002
+#, c-format
+msgid "Error closing directory '%s'"
+msgstr "Fehler beim Schließen des Verzeichnisses »%s«"
+
+#: ../libsvn_fs_fs/fs_fs.c:11046
+#, c-format
+msgid "The FSFS format (%d) of the hotcopy source does not match the FSFS format (%d) of the hotcopy destination; please upgrade both repositories to the same format"
+msgstr "Das FSFS-Format (%d) der Quelle für die Kopie im laufenden Betrieb entspricht nicht dem FSFS-Format (%d) des Ziels; Verwenden Sie auf beiden Seiten das gleiche Format"
+
+#: ../libsvn_fs_fs/fs_fs.c:11055
+msgid "The UUID of the hotcopy source does not match the UUID of the hotcopy destination"
+msgstr "Die UUID der Quelle für die Kopie im laufenden Betrieb entspricht nicht der UUID des Ziels"
+
+#: ../libsvn_fs_fs/fs_fs.c:11062
+msgid "The sharding layout configuration of the hotcopy source does not match the sharding layout configuration of the hotcopy destination"
+msgstr "Die Einstellungen zur Fragmentierung der Quelle der Kopie im laufenden Betrieb entspricht nicht den Einstellungen zur Fragmentierung des Ziels"
+
+#: ../libsvn_fs_fs/fs_fs.c:11188
+#, c-format
+msgid "Failed to create hotcopy at '%s'. The file '%s' is missing from the source repository. Please create this file, for instance by running 'svnadmin upgrade %s'"
+msgstr "Erstellen der hotcopy auf »%s« fehlgeschlagen. Die Datei »%s« fehlt im Quellprojektarchiv. Bitte diese Datei erstellen, z.B. durch die Ausführung von »svnadmin upgrade %s«"
+
+#: ../libsvn_fs_fs/fs_fs.c:11214
+#, c-format
+msgid "The hotcopy destination already contains more revisions (%lu) than the hotcopy source contains (%lu); are source and destination swapped?"
+msgstr "Das Ziel der Kopie im laufenden Betrieb enthält bereits mehr Revisionen (%lu) als die Quelle (%lu); Wurden Quelle und Ziel vertauscht?"
+
+#: ../libsvn_fs_fs/fs_fs.c:11250
+#, c-format
+msgid "The hotcopy destination already contains more packed revisions (%lu) than the hotcopy source contains (%lu)"
+msgstr "Das Ziel der Kopie im laufenden Betrieb enthält bereits mehr gepackte Revisionen (%lu) als die Quelle (%lu)"
+
+#: ../libsvn_fs_fs/fs_fs.c:11365
+#, c-format
+msgid "The assumed HEAD revision (%lu) of the hotcopy source has been packed while the hotcopy was in progress; please restart the hotcopy operation"
+msgstr "Die angenommene Revision »HEAD« (%lu) der Quelle der Kopie im laufenden Betrieb wurde während des Vorgangs gepackt; Bitte starten Sie den Vorgang erneut"
+
+#: ../libsvn_fs_fs/fs_fs.c:11380
+#, c-format
+msgid "Revision %lu disappeared from the hotcopy source while hotcopy was in progress"
+msgstr "Revision %lu aus der Quelle für Kopie im laufenden Betrieb während des Vorgangs verschwunden"
+
+#: ../libsvn_fs_fs/lock.c:120
#, c-format
msgid "Corrupt lockfile for path '%s' in filesystem '%s'"
msgstr "Beschädigte Sperrdatei für Pfad »%s« in Dateisystem »%s«"
-#: ../libsvn_fs_fs/lock.c:219
+#: ../libsvn_fs_fs/lock.c:228
#, c-format
msgid "Cannot write lock/entries hashfile '%s'"
msgstr "Kann »lock/entries« Hashdatei »%s« nicht schreiben"
-#: ../libsvn_fs_fs/lock.c:271
+#: ../libsvn_fs_fs/lock.c:280
#, c-format
msgid "Can't parse lock/entries hashfile '%s'"
msgstr "Kann »lock/entries« Hashdatei »%s« nicht zerlegen"
-#: ../libsvn_fs_fs/lock.c:787
+#: ../libsvn_fs_fs/lock.c:818
#, c-format
msgid "Lock failed: newer version of '%s' exists"
msgstr "Sperren schlug fehl: eine neuere Version von »%s« existiert"
+#: ../libsvn_fs_fs/rep-cache.c:138
+msgid "Couldn't open rep-cache database"
+msgstr "Konnte »rep-cache«-Datenbank des Projektarchivs nicht öffnen"
+
# TODO: Same strings can be shared with another table!
-#: ../libsvn_fs_fs/rep-cache.c:96 ../libsvn_fs_fs/rep-cache.c:136
+#: ../libsvn_fs_fs/rep-cache.c:267 ../libsvn_fs_fs/rep-cache.c:312
msgid "Only SHA1 checksums can be used as keys in the rep_cache table.\n"
msgstr "Nur SHA1-Prüfsummen können als Schlüssel in der Tabelle rep_cache verwendet werden.\n"
-#: ../libsvn_fs_fs/rep-cache.c:153
+#: ../libsvn_fs_fs/rep-cache.c:348
#, c-format
msgid "Representation key for checksum '%%s' exists in filesystem '%%s' with a different value (%%ld,%%%s,%%%s,%%%s) than what we were about to store (%%ld,%%%s,%%%s,%%%s)"
msgstr "Repräsentationsschlüssel für Prüfsumme »%%s« existiert im Dateisystem »%%s« mit einem anderen Wert (%%ld,%%%s,%%%s,%%%s) als der, der gespeichert werden soll (%%ld,%%%s,%%%s,%%%s)"
-#: ../libsvn_fs_fs/tree.c:3435
+#: ../libsvn_fs_fs/tree.c:2209 ../libsvn_subr/path.c:1233
+#, c-format
+msgid "Invalid control character '0x%02x' in path '%s'"
+msgstr "Ungültiges Steuerzeichen »0x%02x« in Pfad »%s«"
+
+#: ../libsvn_fs_fs/tree.c:3808
#, c-format
msgid "Node-revision #'%s' claims to have mergeinfo but doesn't"
msgstr "Knotenrevision #»%s« behauptet, Zusammenführungsinformationen zu haben, hat aber keine"
-#: ../libsvn_fs_fs/tree.c:3557
+#: ../libsvn_fs_fs/tree.c:3924
#, c-format
msgid "Node-revision '%s@%ld' claims to have mergeinfo but doesn't"
msgstr "Knotenrevision »%s@%ld« behauptet, Zusammenführungsinformationen zu haben, hat aber keine"
-#: ../libsvn_fs_fs/tree.c:3678
+#: ../libsvn_fs_fs/tree.c:4124
#, c-format
msgid "Querying mergeinfo requires version %d of the FSFS filesystem schema; filesystem '%s' uses only version %d"
msgstr "Abfrage der Zusammenführungsinformationen erfordert Version %d des FSFS-Dateisystem-Schemas; Dateisystem »%s« verwendet nur Version %d"
-#: ../libsvn_fs_util/fs-util.c:104
+#: ../libsvn_fs_util/fs-util.c:154
msgid "Filesystem object has not been opened yet"
msgstr "Dateisystemobjekt ist noch nicht geöffnet"
-#: ../libsvn_fs_util/fs-util.c:107
+#: ../libsvn_fs_util/fs-util.c:157
msgid "Filesystem object already open"
msgstr "Dateisystemobjekt ist bereits geöffnet"
-#: ../libsvn_ra/compat.c:180
+#: ../libsvn_ra/compat.c:182
#, c-format
msgid "Missing changed-path information for '%s' in revision %ld"
msgstr "»%s« fehlt in der Liste der geänderten Pfade von Revision %ld"
-#: ../libsvn_ra/compat.c:307 ../libsvn_ra/compat.c:554
+#: ../libsvn_ra/compat.c:326 ../libsvn_ra/compat.c:570
#, c-format
msgid "Path '%s' doesn't exist in revision %ld"
msgstr "Pfad »%s« existiert nicht in Revision %ld"
-#: ../libsvn_ra/compat.c:384
+#: ../libsvn_ra/compat.c:403
#, c-format
msgid "'%s' in revision %ld is an unrelated object"
msgstr "»%s« in Revision %ld hat keinen Bezug zur Arbeitskopie"
-#: ../libsvn_ra/compat.c:844 ../libsvn_ra/ra_loader.c:1201
+#: ../libsvn_ra/compat.c:843 ../libsvn_ra/ra_loader.c:1291
#, c-format
msgid "Invalid peg revision %ld"
-msgstr "Ungültige Peg-Revision %ld"
+msgstr "Ungültige Fix-Revision %ld"
-#: ../libsvn_ra/compat.c:847 ../libsvn_ra/ra_loader.c:1204
-#: ../libsvn_repos/rev_hunt.c:208 ../libsvn_repos/rev_hunt.c:323
+#: ../libsvn_ra/compat.c:846 ../libsvn_ra/ra_loader.c:1294
+#: ../libsvn_repos/rev_hunt.c:214 ../libsvn_repos/rev_hunt.c:329
#, c-format
msgid "Invalid end revision %ld"
msgstr "Ungültige Endrevision %ld"
-#: ../libsvn_ra/compat.c:850 ../libsvn_ra/ra_loader.c:1207
+#: ../libsvn_ra/compat.c:849 ../libsvn_ra/ra_loader.c:1297
msgid "Peg revision must precede end revision"
-msgstr "Peg-Revision muss vor der Endrevision liegen"
+msgstr "Fix-Revision muss vor der Endrevision liegen"
-#: ../libsvn_ra/ra_loader.c:234
+#: ../libsvn_ra/ra_loader.c:215
#, c-format
msgid "Mismatched RA version for '%s': found %d.%d.%d%s, expected %d.%d.%d%s"
msgstr "Version des ZM »%s« stimmt nicht überein: gefunden %d.%d.%d%s, erwartet %d.%d.%d%s"
-#: ../libsvn_ra/ra_loader.c:419
+#: ../libsvn_ra/ra_loader.c:292 ../libsvn_ra_serf/serf.c:594
+#, c-format
+msgid "Illegal repository URL '%s'"
+msgstr "Illegale Projektarchiv-URL »%s«"
+
+#: ../libsvn_ra/ra_loader.c:399
#, c-format
msgid "Invalid config: unknown HTTP library '%s'"
msgstr "Ungültige Konfiguration: Unbekannte HTTP-Bibliothek »%s«"
-#: ../libsvn_ra/ra_loader.c:483
+#: ../libsvn_ra/ra_loader.c:468
#, c-format
msgid "Unrecognized URL scheme for '%s'"
msgstr "Unbekanntes URL-Schema für »%s«"
-#: ../libsvn_ra/ra_loader.c:518
+#: ../libsvn_ra/ra_loader.c:519
#, c-format
msgid "Repository UUID '%s' doesn't match expected UUID '%s'"
msgstr "UUID des Projektarchivs »%s« entspricht nicht der erwarteten UUID »%s«"
-#: ../libsvn_ra/ra_loader.c:568
+#: ../libsvn_ra/ra_loader.c:540
+#, c-format
+msgid "'%s' isn't in the same repository as '%s'"
+msgstr "»%s« ist nicht im selben Projektarchiv wie »%s«"
+
+#: ../libsvn_ra/ra_loader.c:564
#, c-format
msgid "'%s' isn't a child of session URL '%s'"
msgstr "»%s« ist kein Kind der Sitzungs-URL »%s«"
-#: ../libsvn_ra/ra_loader.c:591 ../libsvn_ra_neon/session.c:1155
-#: ../libsvn_ra_svn/client.c:2271
+#: ../libsvn_ra/ra_loader.c:580 ../libsvn_ra_svn/client.c:2465
#, c-format
msgid "'%s' isn't a child of repository root URL '%s'"
msgstr "»%s« ist kein Kind der Projektarchivwurzel-URL »%s«"
-#: ../libsvn_ra/ra_loader.c:638
+#: ../libsvn_ra/ra_loader.c:624
#, c-format
msgid "Specifying 'old_value_p' is not allowed when the '%s' capability is not advertised, and could indicate a bug in your client"
msgstr "Die Angabe von »old_value_p« is nicht erlaubt, wenn die Fähigkeit »%s« nicht bekanntgemacht wurde, und könnte auf einen Bug in Ihrem Client hindeuten"
-#: ../libsvn_ra/ra_loader.c:1238
-msgid "Obliterate is not supported by this Repository Access method"
-msgstr ""
-
-#: ../libsvn_ra/ra_loader.c:1284
+#: ../libsvn_ra/ra_loader.c:1445
#, c-format
msgid " - handles '%s' scheme\n"
msgstr " - behandelt Schema »%s«\n"
-#: ../libsvn_ra/ra_loader.c:1368
+#: ../libsvn_ra/ra_loader.c:1538
#, c-format
msgid "Unrecognized URL scheme '%s'"
msgstr "Unbekanntes URL-Schema »%s«"
-#: ../libsvn_ra/util.c:66
+#: ../libsvn_ra/util.c:55
+msgid "<repository>"
+msgstr "<Projektarchiv>"
+
+#: ../libsvn_ra/util.c:73
#, c-format
msgid "Retrieval of mergeinfo unsupported by '%s'"
msgstr "Abfrage der Zusammenführungsinformationen wird von »%s« nicht unterstützt"
+#: ../libsvn_ra/util.c:99
+#, c-format
+msgid "The '%s' feature is not supported by '%s'"
+msgstr "Die Funktion »%s« wird von »%s« nicht unterstützt"
+
+#: ../libsvn_ra/util.c:142
+#, c-format
+msgid "Lock was stolen by '%s'; unable to remove it"
+msgstr "Sperre durch »%s« gestohlen; Kann nicht entfernt werden"
+
+#: ../libsvn_ra/util.c:183
+#, c-format
+msgid "Unable to determine local hostname"
+msgstr "Kann den lokalen Hostnamen nicht ermitteln"
+
+#: ../libsvn_ra/util.c:278
+#, c-format
+msgid "Couldn't get lock on destination repos after %d attempts"
+msgstr "Konnte Sperre für Zielprojektarchiv nach %d Versuchen nicht erhalten"
+
+#: ../libsvn_ra_local/ra_plugin.c:162
+msgid "memory-cache-size invalid"
+msgstr "Ungültige »memory-cache-size«"
+
#. ----------------------------------------------------------------
#. ** The RA vtable routines **
-#: ../libsvn_ra_local/ra_plugin.c:401
+#: ../libsvn_ra_local/ra_plugin.c:503
msgid "Module for accessing a repository on local disk."
msgstr "Modul zum Zugriff auf ein Projektarchiv auf der lokalen Festplatte"
-#: ../libsvn_ra_local/ra_plugin.c:468
+#: ../libsvn_ra_local/ra_plugin.c:579
msgid "Unable to open an ra_local session to URL"
msgstr "Kann keine ra_local-Verbindung zu einer URL aufbauen"
-#: ../libsvn_ra_local/ra_plugin.c:503
+#: ../libsvn_ra_local/ra_plugin.c:612 ../libsvn_ra_serf/serf.c:586
#, c-format
msgid "URL '%s' is not a child of the session's repository root URL '%s'"
msgstr "URL »%s« ist kein Kind der Projektarchivwurzel-URL »%s« der Sitzung"
-#: ../libsvn_ra_local/ra_plugin.c:1414 ../libsvn_ra_neon/options.c:452
-#: ../libsvn_ra_serf/options.c:622 ../libsvn_ra_svn/client.c:2464
+#: ../libsvn_ra_local/ra_plugin.c:1140 ../libsvn_ra_local/ra_plugin.c:1597
+#: ../libsvn_ra_serf/util.c:2604
+#, c-format
+msgid "'%s' path not found"
+msgstr "»%s« Pfad nicht gefunden"
+
+#: ../libsvn_ra_local/ra_plugin.c:1539 ../libsvn_ra_serf/options.c:675
+#: ../libsvn_ra_svn/client.c:2666
#, c-format
msgid "Don't know anything about capability '%s'"
msgstr "Es ist nichts über die Eigenschaft »%s« bekannt"
-#: ../libsvn_ra_local/ra_plugin.c:1537
+#: ../libsvn_ra_local/ra_plugin.c:1745
#, c-format
msgid "Unsupported RA loader version (%d) for ra_local"
msgstr "Nicht unterstützte Zugriffsmodul-Laderversion (%d) für ra_local"
-#: ../libsvn_ra_local/split_url.c:49 ../libsvn_ra_local/split_url.c:55
+#: ../libsvn_ra_local/split_url.c:50 ../libsvn_ra_local/split_url.c:56
#, c-format
msgid "Unable to open repository '%s'"
msgstr "Projektarchiv »%s« kann nicht geöffnet werden"
-#: ../libsvn_ra_neon/commit.c:245
-msgid "Could not fetch the Version Resource URL (needed during an import or when it is missing from the local, cached props)"
-msgstr "Konnte die Versionsressourcen-URL nicht bestimmen (wird für einen Import oder, falls sie in den lokalen, zwischengespeicherten Eigenschaften fehlt, benötigt)"
-
-#: ../libsvn_ra_neon/commit.c:503
-#, c-format
-msgid "File or directory '%s' is out of date; try updating"
-msgstr "Datei oder Verzeichnis »%s« ist veraltet; versuchen Sie zu aktualisieren"
-
-#: ../libsvn_ra_neon/commit.c:511
-msgid "The CHECKOUT response did not contain a 'Location:' header"
-msgstr "Die CHECKOUT-Antwort enthielt keinen »Location:« Kopf"
-
-#: ../libsvn_ra_neon/commit.c:521 ../libsvn_ra_neon/props.c:216
-#: ../libsvn_ra_neon/util.c:566 ../libsvn_ra_serf/commit.c:1648
-#: ../libsvn_ra_serf/commit.c:2055 ../libsvn_ra_serf/update.c:2130
+#: ../libsvn_ra_serf/commit.c:215
#, c-format
-msgid "Unable to parse URL '%s'"
-msgstr "Konnte die URL »%s« nicht zerlegen"
-
-#: ../libsvn_ra_neon/commit.c:1049 ../libsvn_ra_serf/commit.c:1913
-#, c-format
-msgid "File '%s' already exists"
-msgstr "Datei »%s« existiert bereits"
-
-#: ../libsvn_ra_neon/commit.c:1176
-#, c-format
-msgid "Could not write svndiff to temp file"
-msgstr "Konnte svndiff nicht in Temporärdatei schreiben"
-
-#: ../libsvn_ra_neon/fetch.c:246
-msgid "Could not save the URL of the version resource"
-msgstr "Konnte die URL der versionierten Ressource nicht speichern"
-
-#: ../libsvn_ra_neon/fetch.c:439
-msgid "Could not get content-type from response"
-msgstr "Konnte »content-type« nicht aus der Antwort lesen"
-
-#: ../libsvn_ra_neon/fetch.c:532
-msgid "Could not save file"
-msgstr "Konnte Datei nicht sichern"
-
-#: ../libsvn_ra_neon/fetch.c:995
-msgid "Server response missing the expected deadprop-count property"
-msgstr "Die Serverantwort enthält die erwartete Eigenschaft »deadprop-count« nicht"
-
-#: ../libsvn_ra_neon/fetch.c:1091 ../libsvn_ra_serf/property.c:1001
-msgid "The OPTIONS response did not include the youngest revision"
-msgstr "Die OPTIONS-Antwort enthielt nicht die jüngste Revision"
-
-#: ../libsvn_ra_neon/fetch.c:1199 ../libsvn_ra_serf/commit.c:2471
-msgid "DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent"
-msgstr "DAV-Anfrage schlug fehl; möglicherweise ist entweder die Aktion »pre-revprop-change« gescheitert oder sie fehlt"
-
-# FIXME: collect messages!
-#: ../libsvn_ra_neon/fetch.c:1450
-#, c-format
-msgid "Missing rev attr in target-revision element"
-msgstr "Fehlendes Revisionsattribut in Element »target-revision«"
+msgid "%s of '%s': %d %s"
+msgstr "%s von »%s«: %d %s"
-#: ../libsvn_ra_neon/fetch.c:1461 ../libsvn_ra_serf/update.c:1513
-#, c-format
-msgid "Missing name attr in absent-directory element"
-msgstr "Fehlendes Namensattribut in Element »absent-directory«"
-
-#: ../libsvn_ra_neon/fetch.c:1477 ../libsvn_ra_serf/update.c:1536
-#, c-format
-msgid "Missing name attr in absent-file element"
-msgstr "Fehlendes Namensattribut in Element »absent-file«"
+#: ../libsvn_ra_serf/commit.c:315
+msgid "No Location header received"
+msgstr "Kein »Location« Kopf empfangen"
-#: ../libsvn_ra_neon/fetch.c:1492
-#, c-format
-msgid "Missing path attr in resource element"
-msgstr "Fehlendes Pfadattribut in Ressourcen-Element"
+#: ../libsvn_ra_serf/commit.c:325
+msgid "Error parsing Location header value"
+msgstr "Fehler beim Auslesen des Wertes aus dem »Location« Kopf"
-#: ../libsvn_ra_neon/fetch.c:1501
+#: ../libsvn_ra_serf/commit.c:435
#, c-format
-msgid "Missing rev attr in open-directory element"
-msgstr "Fehlendes Revisionsattribut in Element »open-directory«"
+msgid "Directory '%s' is out of date; try updating"
+msgstr "Verzeichnis »%s« ist veraltet; versuchen Sie zu aktualisieren"
-#: ../libsvn_ra_neon/fetch.c:1532 ../libsvn_ra_serf/replay.c:282
-#: ../libsvn_ra_serf/update.c:1342
+#: ../libsvn_ra_serf/commit.c:523 ../libsvn_repos/commit.c:512
#, c-format
-msgid "Missing name attr in open-directory element"
-msgstr "Fehlendes Namensattribut in Element »open-directory«"
+msgid "Path '%s' not present"
+msgstr "Pfad »%s« existiert nicht"
-#: ../libsvn_ra_neon/fetch.c:1559 ../libsvn_ra_serf/replay.c:308
-#: ../libsvn_ra_serf/update.c:1377
+#: ../libsvn_ra_serf/commit.c:573
#, c-format
-msgid "Missing name attr in add-directory element"
-msgstr "Fehlendes Namensattribut in Element »add-directory«"
+msgid "File '%s' is out of date; try updating"
+msgstr "Datei »%s« ist veraltet; versuchen Sie zu aktualisieren"
-#: ../libsvn_ra_neon/fetch.c:1572
-#, c-format
-msgid "Missing copyfrom-rev attr in add-directory element"
-msgstr "Fehlendes Attribut »copyfrom-rev« in Element »add-directory«"
+#: ../libsvn_ra_serf/commit.c:975
+msgid "At least one property change failed; repository is unchanged"
+msgstr "Mindestens eine Eigenschaftsänderung schlug fehl; Projektarchiv nicht geändert"
-#: ../libsvn_ra_neon/fetch.c:1649
+#: ../libsvn_ra_serf/commit.c:1233
#, c-format
-msgid "Missing rev attr in open-file element"
-msgstr "Fehlendes Revisionsattribut in Element »open-file«"
+msgid "Failed writing updated file"
+msgstr "Fehler beim Schreiben der aktualisierten Datei"
-#: ../libsvn_ra_neon/fetch.c:1656 ../libsvn_ra_serf/replay.c:343
-#: ../libsvn_ra_serf/update.c:1417
+#: ../libsvn_ra_serf/commit.c:1421 ../libsvn_ra_serf/commit.c:1511
#, c-format
-msgid "Missing name attr in open-file element"
-msgstr "Fehlendes Namensattribut in Element »open-file«"
+msgid "%s of '%s': %d %s (%s://%s)"
+msgstr "%s von »%s«: %d %s (%s://%s)"
-#: ../libsvn_ra_neon/fetch.c:1682 ../libsvn_ra_serf/replay.c:369
-#: ../libsvn_ra_serf/update.c:1452
+#: ../libsvn_ra_serf/commit.c:1431
#, c-format
-msgid "Missing name attr in add-file element"
-msgstr "Fehlendes Namensattribut in Element »add-file«"
+msgid "POST request did not return transaction information"
+msgstr "POST-Anfrage lieferte keine Transaktionsinformationen zurück"
-#: ../libsvn_ra_neon/fetch.c:1695
-#, c-format
-msgid "Missing copyfrom-rev attr in add-file element"
-msgstr "Fehlendes Attribut »copyfrom-rev« in Element »add-file«"
+#: ../libsvn_ra_serf/commit.c:1475
+msgid "The OPTIONS response did not include the requested activity-collection-set value"
+msgstr "Die OPTIONS-Antwort enthielt nicht den angeforderten Wert »activity-collection-set«"
-#: ../libsvn_ra_neon/fetch.c:1752
+#: ../libsvn_ra_serf/commit.c:1718 ../libsvn_ra_serf/commit.c:2127
+#: ../libsvn_ra_serf/update.c:2619
#, c-format
-msgid "Missing name attr in set-prop element"
-msgstr "Fehlendes Namensattribut in Element »set-prop«"
+msgid "Unable to parse URL '%s'"
+msgstr "Konnte die URL »%s« nicht zerlegen"
-#: ../libsvn_ra_neon/fetch.c:1766
+#: ../libsvn_ra_serf/commit.c:1746 ../libsvn_ra_serf/util.c:2600
#, c-format
-msgid "Missing name attr in remove-prop element"
-msgstr "Fehlendes Namensattribut in Element »remove-prop«"
+msgid "Access to '%s' forbidden"
+msgstr "Zugriff auf »%s« verboten"
-#: ../libsvn_ra_neon/fetch.c:1840 ../libsvn_ra_serf/replay.c:256
-#: ../libsvn_ra_serf/update.c:1482
+#: ../libsvn_ra_serf/commit.c:1750
#, c-format
-msgid "Missing name attr in delete-entry element"
-msgstr "Fehlendes Namensattribut in Element »delete-entry«"
+msgid "Adding directory failed: %s on %s (%d %s)"
+msgstr "Hinzufügen eines Verzeichnisses schlug fehl: %s auf %s (%d %s)"
-#: ../libsvn_ra_neon/fetch.c:2002
+#: ../libsvn_ra_serf/commit.c:1979
#, c-format
-msgid "Error writing to '%s': unexpected EOF"
-msgstr "Fehler beim Schreiben nach »%s«: unerwartetes EOF"
+msgid "File '%s' already exists"
+msgstr "Datei »%s« existiert bereits"
-#: ../libsvn_ra_neon/fetch.c:2149
+#: ../libsvn_ra_serf/commit.c:2250
#, c-format
-msgid "Unknown XML encoding: '%s'"
-msgstr "Unbekannte XML Kodierung: »%s«"
+msgid "MERGE request failed: returned %d (during commit)"
+msgstr "»MERGE«-Anfrage fehlgeschlagen; gab während der Übertragung %d zurück"
-#: ../libsvn_ra_neon/fetch.c:2456
-#, c-format
-msgid "REPORT response handling failed to complete the editor drive"
-msgstr "Die Abwicklung der REPORT-Antwort konnte den Editorlauf nicht vollenden."
+#: ../libsvn_ra_serf/commit.c:2324
+#, fuzzy, c-format
+msgid "DELETE returned unexpected status: %d"
+msgstr "GET-Anfrage gab eine nicht erwartete Delta-Basis zurück: %s"
-#: ../libsvn_ra_neon/file_revs.c:290
-msgid "Failed to write full amount to stream"
-msgstr "Konnte nicht alles in den Datenstrom schreiben"
+#: ../libsvn_ra_serf/commit.c:2518
+msgid "DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent"
+msgstr "DAV-Anfrage schlug fehl; möglicherweise ist entweder die Aktion »pre-revprop-change« gescheitert oder sie fehlt"
-#: ../libsvn_ra_neon/file_revs.c:376 ../libsvn_ra_neon/get_deleted_rev.c:170
-#: ../libsvn_ra_neon/get_location_segments.c:211
-#: ../libsvn_ra_neon/get_locations.c:194
-#: ../libsvn_ra_serf/get_deleted_rev.c:236
+#: ../libsvn_ra_serf/get_deleted_rev.c:173
#, c-format
msgid "'%s' REPORT not implemented"
msgstr "»%s« REPORT nicht implementiert"
-#: ../libsvn_ra_neon/file_revs.c:383
-msgid "The file-revs report didn't contain any revisions"
-msgstr "Der Report »file-revs« enthielt keine Revisionen"
-
-#: ../libsvn_ra_neon/get_dated_rev.c:158
-msgid "Server does not support date-based operations"
-msgstr "Server unterstützt keine datumsbasierten Operationen"
-
-#: ../libsvn_ra_neon/get_dated_rev.c:165
-msgid "Invalid server response to dated-rev request"
-msgstr "Ungültige Antwort des Servers auf datierte Revisionsanfrage"
-
-#: ../libsvn_ra_neon/get_location_segments.c:122
-#: ../libsvn_ra_serf/getlocationsegments.c:109 ../libsvn_ra_svn/client.c:1717
-msgid "Expected valid revision range"
-msgstr "Erwartete einen gültigen Revisionsbereich"
-
-#: ../libsvn_ra_neon/get_locations.c:112
-msgid "Expected a valid revnum and path"
-msgstr "Erwartete eine gültige Revisionsnummer samt Pfad"
-
-#: ../libsvn_ra_neon/get_locks.c:238
-msgid "Incomplete lock data returned"
-msgstr "Unvollständige Sperrdaten zurückgegeben"
-
-#: ../libsvn_ra_neon/get_locks.c:329 ../libsvn_ra_serf/property.c:370
-#: ../libsvn_ra_serf/update.c:1998
+#: ../libsvn_ra_serf/inherited_props.c:171 ../libsvn_ra_serf/property.c:279
+#: ../libsvn_ra_serf/update.c:2468
#, c-format
msgid "Got unrecognized encoding '%s'"
msgstr "Unbekannte Codierung »%s«"
-#: ../libsvn_ra_neon/get_locks.c:425 ../libsvn_ra_neon/get_locks.c:429
-#: ../libsvn_ra_serf/locks.c:566
-msgid "Server does not support locking features"
-msgstr "Server unterstützt keine Sperroperationen"
-
-#: ../libsvn_ra_neon/lock.c:196
-msgid "Invalid creation date header value in response."
-msgstr "Ungültiges Erzeugungsdatum im Header-Feld in Antwort."
-
-#: ../libsvn_ra_neon/lock.c:221
-msgid "Invalid timeout value"
-msgstr "Ungültiger Timeout-Wert"
-
-#: ../libsvn_ra_neon/lock.c:261 ../libsvn_ra_neon/lock.c:410
+#: ../libsvn_ra_serf/locks.c:171
#, c-format
-msgid "Failed to parse URI '%s'"
-msgstr "Konnte URI »%s« nicht zerlegen"
+msgid "Invalid LOCK timeout value '%s'"
+msgstr "Ungültiger Timeout-Wert für Sperre »%s«"
-#: ../libsvn_ra_neon/lock.c:321 ../libsvn_ra_serf/locks.c:380
-#: ../libsvn_ra_serf/locks.c:391 ../libsvn_ra_serf/locks.c:423
+#: ../libsvn_ra_serf/locks.c:243
#, c-format
msgid "Lock request failed: %d %s"
msgstr "Sperranforderung gescheitert: %d %s"
-#: ../libsvn_ra_neon/lock.c:425 ../libsvn_ra_serf/locks.c:719
+#: ../libsvn_ra_serf/locks.c:424
+msgid "Malformed URL for repository"
+msgstr "Fehlerhafte URL für Projektarchiv"
+
+#: ../libsvn_ra_serf/locks.c:430
+msgid "Server does not support locking features"
+msgstr "Server unterstützt keine Sperroperationen"
+
+#: ../libsvn_ra_serf/locks.c:596
#, c-format
msgid "'%s' is not locked in the repository"
msgstr "»%s« ist im Projektarchiv nicht gesperrt"
-#: ../libsvn_ra_neon/lock.c:553
-msgid "Failed to fetch lock information"
-msgstr "Konnte Sperrinformationen nicht ermitteln"
+#: ../libsvn_ra_serf/locks.c:647 ../libsvn_ra_serf/locks.c:653
+#, c-format
+msgid "Unlock request failed: %d %s"
+msgstr "Sperrfreigabe gescheitert: %d %s"
-#: ../libsvn_ra_neon/log.c:169 ../libsvn_ra_serf/log.c:228
+#: ../libsvn_ra_serf/log.c:169
#, c-format
-msgid "Missing name attr in revprop element"
-msgstr "Fehlendes Namensattribut in Element »revprop«"
+msgid "Unsupported encoding '%s'"
+msgstr "Nicht unterstützte Kodierung »%s«"
-#: ../libsvn_ra_neon/log.c:459 ../libsvn_ra_serf/log.c:625
-#: ../libsvn_ra_svn/client.c:1422
+#: ../libsvn_ra_serf/log.c:568 ../libsvn_ra_svn/client.c:1577
msgid "Server does not support custom revprops via log"
msgstr "Server unterstützt benutzerdefinierte Revisionseigenschaften mittels log nicht"
-#: ../libsvn_ra_neon/merge.c:221
-#, c-format
-msgid "Protocol error: we told the server not to auto-merge any resources, but it said that '%s' was merged"
-msgstr "Protokollfehler: Wir haben dem Server mitgeteilt, Ressourcen nicht automatisch zusammenzuführen, aber dieser behauptet, dass »%s« zusammengeführt wurde"
-
-#: ../libsvn_ra_neon/merge.c:230
-#, c-format
-msgid "Internal error: there is an unknown parent (%d) for the 'DAV:response' element within the MERGE response"
-msgstr "Interner Fehler: Es gibt ein unbekanntes Elternteil (%d) für das »DAV:response« Element innerhalb der MERGE-Antwort"
-
-#: ../libsvn_ra_neon/merge.c:245
-#, c-format
-msgid "Protocol error: the MERGE response for the '%s' resource did not return all of the properties that we asked for (and need to complete the commit)"
-msgstr "Protokollfehler: Die MERGE-Antwort für die »%s«-Ressource hat nicht alle angeforderten Eigenschaften zurück geliefert (und Übertragung muss beendet werden)"
-
-#: ../libsvn_ra_neon/merge.c:264 ../libsvn_ra_serf/merge.c:304
+#: ../libsvn_ra_serf/merge.c:200
#, c-format
msgid "A MERGE response for '%s' is not a child of the destination ('%s')"
msgstr "Eine MERGE-Antwort für »%s« ist kein Kind des Ziels (»%s«)"
-#: ../libsvn_ra_neon/merge.c:518
-msgid "The MERGE property response had an error status"
-msgstr "Die MERGE-Eigenschaftsantwort hatte einen Fehlerstatus"
-
-#: ../libsvn_ra_neon/options.c:316
-msgid "The OPTIONS response did not include the requested activity-collection-set; this often means that the URL is not WebDAV-enabled"
-msgstr "Die OPTIONS-Antwort enthielt nicht das angeforderte »activity-collection-set«; dies heißt oft, dass die URL nicht WebDAV-fähig ist"
-
-#: ../libsvn_ra_neon/options.c:435 ../libsvn_ra_serf/options.c:605
+#: ../libsvn_ra_serf/options.c:658
#, c-format
msgid "Don't know how to handle '%s' for capability '%s'"
msgstr "Es ist unklar, wie mit »%s« für Eigenschaft »%s« verfahren werden soll"
-#: ../libsvn_ra_neon/options.c:459 ../libsvn_ra_serf/options.c:629
+#: ../libsvn_ra_serf/options.c:682
#, c-format
msgid "Attempt to fetch capability '%s' resulted in '%s'"
msgstr "Der Versuch, die Eigenschaft »%s« abzufragen, führte zu »%s«"
-#: ../libsvn_ra_neon/props.c:607
-#, c-format
-msgid "Failed to find label '%s' for URL '%s'"
-msgstr "Marke »%s« für URL »%s« nicht gefunden"
+#: ../libsvn_ra_serf/property.c:700
+msgid "The PROPFIND response did not include the requested properties"
+msgstr "Die PROPFIND-Antwort enthielt nicht den angeforderten Eigenschaften"
-#: ../libsvn_ra_neon/props.c:636
-#, c-format
-msgid "'%s' was not present on the resource '%s'"
-msgstr "»%s« existierte nicht für die Ressource »%s«"
+#: ../libsvn_ra_serf/property.c:993
+msgid "The PROPFIND response did not include the requested baseline-collection value"
+msgstr "Die PROPFIND-Antwort enthielt nicht den angeforderten Wert »baseline-collection«"
-#: ../libsvn_ra_neon/props.c:703
-#, c-format
-msgid "Neon was unable to parse URL '%s'"
-msgstr "Neon konnte die URL »%s« nicht zerlegen"
+#: ../libsvn_ra_serf/property.c:1005
+msgid "The PROPFIND response did not include the requested version-name value"
+msgstr "Die PROPFIND-Antwort enthielt nicht den angeforderten Wert »version-name«"
-#: ../libsvn_ra_neon/props.c:736
-msgid "The path was not part of a repository"
-msgstr "Der Pfad war kein Teil eines Projektarchivs"
+#: ../libsvn_ra_serf/property.c:1043
+msgid "The OPTIONS response did not include the requested checked-in value"
+msgstr "Die OPTIONS-Antwort enthielt nicht den angeforderten Wert »checked-in«"
-#: ../libsvn_ra_neon/props.c:745
-#, c-format
-msgid "No part of path '%s' was found in repository HEAD"
-msgstr "Kein Teil des Pfades »%s« wurde in HEAD des Projektarchivs gefunden"
+#: ../libsvn_ra_serf/property.c:1125
+msgid "The OPTIONS response did not include the youngest revision"
+msgstr "Die OPTIONS-Antwort enthielt nicht die jüngste Revision"
-#: ../libsvn_ra_neon/props.c:801 ../libsvn_ra_neon/props.c:857
-msgid "The VCC property was not found on the resource"
-msgstr "Die VCC Eigenschaft wurde in der Ressource nicht gefunden"
+#: ../libsvn_ra_serf/property.c:1218
+msgid "The PROPFIND response did not include the requested resourcetype value"
+msgstr "Die PROPFIND-Antwort enthielt nicht den angeforderten Wert »resourcetype«"
-#: ../libsvn_ra_neon/props.c:870
-msgid "The relative-path property was not found on the resource"
-msgstr "Die »relative-path« Eigenschaft wurde in der Ressource nicht gefunden"
+#: ../libsvn_ra_serf/property.c:1253
+msgid "The PROPFIND response did not include the requested 'DAV:' properties"
+msgstr "Die PROPFIND-Antwort enthielt nicht die angeforderten »DAV:«-Eigenschaften"
-#: ../libsvn_ra_neon/props.c:991
-msgid "'DAV:baseline-collection' was not present on the baseline resource"
-msgstr "»DAV:baseline-collection« ist nicht in der Baseline-Ressource enthalten"
+#: ../libsvn_ra_serf/replay.c:222 ../libsvn_ra_serf/update.c:1657
+msgid "Missing revision attr in target-revision element"
+msgstr "Fehlendes Revisionsattribut in Element »target-revision«"
-# TODO: proper translation for Baseline
-#: ../libsvn_ra_neon/props.c:1010
-#, c-format
-msgid "'%s' was not present on the baseline resource"
-msgstr "»%s« existierte nicht für die Baseline-Ressource"
+#: ../libsvn_ra_serf/replay.c:240
+msgid "Missing revision attr in open-root element"
+msgstr "Fehlendes Revisionsattribut in Element »open-root«"
-#: ../libsvn_ra_neon/props.c:1234 ../libsvn_ra_serf/commit.c:983
-msgid "At least one property change failed; repository is unchanged"
-msgstr "Mindestens eine Eigenschaftsänderung schlug fehl; Projektarchiv nicht geändert"
+#: ../libsvn_ra_serf/replay.c:260 ../libsvn_ra_serf/update.c:1885
+msgid "Missing name attr in delete-entry element"
+msgstr "Fehlendes Namensattribut in Element »delete-entry«"
+
+#: ../libsvn_ra_serf/replay.c:266
+msgid "Missing revision attr in delete-entry element"
+msgstr "Fehlendes Revisionsattribut in Element »delete-entry«"
+
+#: ../libsvn_ra_serf/replay.c:286 ../libsvn_ra_serf/update.c:1724
+msgid "Missing name attr in open-directory element"
+msgstr "Fehlendes Namensattribut in Element »open-directory«"
+
+#: ../libsvn_ra_serf/replay.c:292 ../libsvn_ra_serf/update.c:1675
+#: ../libsvn_ra_serf/update.c:1715
+msgid "Missing revision attr in open-directory element"
+msgstr "Fehlendes Revisionsattribut in Element »open-directory«"
+
+#: ../libsvn_ra_serf/replay.c:312 ../libsvn_ra_serf/update.c:1762
+msgid "Missing name attr in add-directory element"
+msgstr "Fehlendes Namensattribut in Element »add-directory«"
-#: ../libsvn_ra_neon/replay.c:277
-msgid "Got apply-textdelta element without preceding add-file or open-file"
-msgstr "Fand Element »apply-textdelta« ohne vorhergehendes »add-file« oder »open-file«"
+#: ../libsvn_ra_serf/replay.c:349 ../libsvn_ra_serf/update.c:1806
+msgid "Missing name attr in open-file element"
+msgstr "Fehlendes Namensattribut in Element »open-file«"
-#: ../libsvn_ra_neon/replay.c:301
-msgid "Got close-file element without preceding add-file or open-file"
-msgstr "Fand Element »close-file« ohne vorhergehendes »add-file« oder »open-file«"
+#: ../libsvn_ra_serf/replay.c:355 ../libsvn_ra_serf/update.c:1815
+msgid "Missing revision attr in open-file element"
+msgstr "Fehlendes Revisionsattribut in Element »open-file«"
-# FIXME: inkonsistent zu obigen Meldungen: open_directory statt opening a directory
-# (Wird Bezug zu Elementen in Dump hergestellt oder nicht?)
-#: ../libsvn_ra_neon/replay.c:318
-msgid "Got close-directory element without ever opening a directory"
-msgstr "Fand Element »close-directory« ohne vorhergehendes Öffnen eines Verzeichnisses"
+#: ../libsvn_ra_serf/replay.c:375 ../libsvn_ra_serf/update.c:1840
+msgid "Missing name attr in add-file element"
+msgstr "Fehlendes Namensattribut in Element »add-file«"
-#: ../libsvn_ra_neon/replay.c:437 ../libsvn_ra_serf/replay.c:565
+#: ../libsvn_ra_serf/replay.c:443 ../libsvn_ra_serf/update.c:1981
+#: ../libsvn_ra_serf/update.c:2068
#, c-format
+msgid "Missing name attr in %s element"
+msgstr "Fehlendes Namensattribut in Element %s"
+
+#: ../libsvn_ra_serf/replay.c:578
msgid "Error writing stream: unexpected EOF"
msgstr "Fehler beim Schreiben in Datenstrom: unerwartetes EOF"
-#: ../libsvn_ra_neon/replay.c:444
-#, c-format
-msgid "Got cdata content for a prop delete"
-msgstr "Fand cdata-Inhalt für eine Eigenschaftslöschung"
+#: ../libsvn_ra_serf/sb_bucket.c:65
+msgid "Failed to read the request"
+msgstr "Konnte die Anfrage nicht lesen"
-#: ../libsvn_ra_neon/session.c:340
-#, c-format
-msgid "PIN for token \"%s\" in slot \"%s\""
-msgstr "PIN für Token »%s« in Slot »%s«"
-
-#: ../libsvn_ra_neon/session.c:541 ../libsvn_ra_serf/serf.c:278
-msgid "Invalid URL: illegal character in proxy port number"
-msgstr "Ungültige URL: Illegales Zeichen in Proxy Portnummer"
+#: ../libsvn_ra_serf/serf.c:62
+msgid "Module for accessing a repository via WebDAV protocol using serf."
+msgstr "Modul zum Zugriff auf ein Projektarchiv über das Protokoll WebDAV mittels serf."
-#: ../libsvn_ra_neon/session.c:545 ../libsvn_ra_serf/serf.c:282
-msgid "Invalid URL: negative proxy port number"
-msgstr "Ungültige URL: Negative Proxy Portnummer"
+#: ../libsvn_ra_serf/serf.c:65
+#, c-format
+msgid ""
+"Module for accessing a repository via WebDAV protocol using serf.\n"
+" - using serf %d.%d.%d"
+msgstr ""
+"Modul zum Zugriff auf ein Projektarchiv über das Protokoll WebDAV mittels serf.\n"
+" - verwendet serf %d.%d.%d"
-#: ../libsvn_ra_neon/session.c:548 ../libsvn_ra_serf/serf.c:285
-msgid "Invalid URL: proxy port number greater than maximum TCP port number 65535"
-msgstr "Ungültige URL: Proxy Portnummer ist größer als die maximale TCP Portnummer 65535"
+# password store: kwallet, ...
+#: ../libsvn_ra_serf/serf.c:129
+#, c-format
+msgid "Invalid config: unknown %s '%s'"
+msgstr "Ungültige Konfiguration: Unbekanntes %s »%s«"
-#: ../libsvn_ra_neon/session.c:562 ../libsvn_ra_serf/serf.c:260
+#: ../libsvn_ra_serf/serf.c:327
msgid "Invalid config: illegal character in timeout value"
msgstr "Ungültige Konfiguration: Illegales Zeichen im Timeout-Wert"
-#: ../libsvn_ra_neon/session.c:566 ../libsvn_ra_serf/serf.c:264
+#: ../libsvn_ra_serf/serf.c:331
msgid "Invalid config: negative timeout value"
msgstr "Ungültige Konfiguration: Negativer Timeout-Wert"
-#: ../libsvn_ra_neon/session.c:579
-msgid "Invalid config: illegal character in debug mask value"
-msgstr "Ungültige Konfiguration: Illegales Zeichen in Debugmaske"
+#: ../libsvn_ra_serf/serf.c:344
+msgid "Invalid URL: illegal character in proxy port number"
+msgstr "Ungültige URL: Illegales Zeichen in Proxy Portnummer"
-#: ../libsvn_ra_neon/session.c:604 ../libsvn_ra_serf/serf.c:120
-#, c-format
-msgid "Invalid config: unknown http authtype '%s'"
-msgstr "Ungültige Konfiguration: Unbekannter HTTP-Autorisationstyp »%s«"
+#: ../libsvn_ra_serf/serf.c:348
+msgid "Invalid URL: negative proxy port number"
+msgstr "Ungültige URL: Negative Proxy Portnummer"
-#: ../libsvn_ra_neon/session.c:665
-msgid "Module for accessing a repository via WebDAV protocol using Neon."
-msgstr "Modul zum Zugriff auf ein Projektarchiv über das Protokoll WebDAV mittels Neon."
+#: ../libsvn_ra_serf/serf.c:351
+msgid "Invalid URL: proxy port number greater than maximum TCP port number 65535"
+msgstr "Ungültige URL: Proxy Portnummer ist größer als die maximale TCP Portnummer 65535"
-#: ../libsvn_ra_neon/session.c:745
+#: ../libsvn_ra_serf/serf.c:371
#, c-format
-msgid "URL '%s' is malformed or the scheme or host or path is missing"
-msgstr "URL »%s« ist fehlerhaft oder das Schema, der Rechner oder Pfad fehlt"
-
-#: ../libsvn_ra_neon/session.c:761
-msgid "Network socket initialization failed"
-msgstr "Initialisierung der Netzwerkverbindung schlug fehl"
-
-#: ../libsvn_ra_neon/session.c:825
-msgid "SSL is not supported"
-msgstr "SSL wird nicht unterstützt"
+msgid "Could not resolve proxy server '%s'"
+msgstr "Konnte Proxy-Server »%s« nicht auflösen"
-#: ../libsvn_ra_neon/session.c:997 ../libsvn_ra_serf/util.c:264
+#: ../libsvn_ra_serf/serf.c:474
#, c-format
-msgid "Invalid config: unable to load certificate file '%s'"
-msgstr "Ungültige Konfiguration: Zertifikatsdatei »%s« kann nicht geladen werden"
+msgid "Illegal URL '%s'"
+msgstr "Ungültige URL »%s«"
-#: ../libsvn_ra_neon/session.c:1025
+#: ../libsvn_ra_serf/serf.c:546
#, c-format
-msgid "Invalid config: unable to load PKCS#11 provider '%s'"
-msgstr "Ungültige Konfiguration: PKCS#11-Anbieter »%s« kann nicht geladen werden"
+msgid "Connection to '%s' failed"
+msgstr "Verbindung zu »%s« fehlgeschlagen"
-#: ../libsvn_ra_neon/session.c:1182 ../libsvn_ra_serf/serf.c:984
+#: ../libsvn_ra_serf/serf.c:1216
msgid "The UUID property was not found on the resource or any of its parents"
msgstr "Die UUID-Eigenschaft wurde weder auf der Ressource noch ihren Eltern gefunden."
-#: ../libsvn_ra_neon/session.c:1259
+#: ../libsvn_ra_serf/serf.c:1290
#, c-format
-msgid "Unsupported RA loader version (%d) for ra_neon"
-msgstr "Nicht unterstützte Zugriffsmodul-Laderversion (%d) für ra_neon"
-
-#: ../libsvn_ra_neon/util.c:233
-msgid "The request response contained at least one error"
-msgstr "Die Antwort auf die Anfrage enthielt zumindest einen Fehler"
-
-#: ../libsvn_ra_neon/util.c:275
-msgid "The response contains a non-conforming HTTP status line"
-msgstr "Die Antwort enthält eine nicht konforme HTTP-Statuszeile"
+msgid "Unsupported RA loader version (%d) for ra_serf"
+msgstr "Nicht unterstützte Zugriffsmodul-Laderversion (%d) für ra_serf"
-#: ../libsvn_ra_neon/util.c:285
+#: ../libsvn_ra_serf/serf.c:1304
#, c-format
-msgid "Error setting property '%s': "
-msgstr "Fehler beim Setzen der Eigenschaft »%s«: "
+msgid "ra_serf was compiled for serf %d.%d.%d but loaded an incompatible %d.%d.%d library"
+msgstr "ra_serv wurde für serf %d.%d.%d übersetzt, lud aber die nicht kompatible Version %d.%d.%d der Bibliothek"
-#: ../libsvn_ra_neon/util.c:580
+#: ../libsvn_ra_serf/update.c:1115
#, c-format
-msgid "%s of '%s'"
-msgstr "%s von »%s«"
+msgid "GET request returned unexpected delta base: %s"
+msgstr "GET-Anfrage gab eine nicht erwartete Delta-Basis zurück: %s"
-#: ../libsvn_ra_neon/util.c:592 ../libsvn_ra_serf/util.c:1929
+#: ../libsvn_ra_serf/update.c:1133
#, c-format
-msgid "'%s' path not found"
-msgstr "»%s« Pfad nicht gefunden"
+msgid "GET request failed: %d %s"
+msgstr "GET-Anfrage schlug fehl: %d %s"
-#: ../libsvn_ra_neon/util.c:596
-#, c-format
-msgid "access to '%s' forbidden"
-msgstr "Zugriff zu »%s« verboten"
+#: ../libsvn_ra_serf/update.c:1919
+msgid "Missing name attr in absent-directory element"
+msgstr "Fehlendes Namensattribut in Element »absent-directory«"
-#: ../libsvn_ra_neon/util.c:606 ../libsvn_ra_serf/util.c:1923
-#, c-format
-msgid "Repository moved permanently to '%s'; please relocate"
-msgstr "Das Projektarchiv wurde permanent nach »%s« verschoben; bitte umplatzieren"
+#: ../libsvn_ra_serf/update.c:1944
+msgid "Missing name attr in absent-file element"
+msgstr "Fehlendes Namensattribut in Element »absent-file«"
-#: ../libsvn_ra_neon/util.c:608 ../libsvn_ra_serf/util.c:1925
+#: ../libsvn_ra_serf/update.c:2012 ../libsvn_ra_serf/update.c:2119
#, c-format
-msgid "Repository moved temporarily to '%s'; please relocate"
-msgstr "Das Projektarchiv wurde zeitweilig nach »%s« verschoben; bitte umplatzieren"
+msgid "Unknown tag '%s' while at state %d"
+msgstr "Unbekanntes Tag »%s« im Zustand %d"
-# FIXME: missing translator comments!
-#: ../libsvn_ra_neon/util.c:616
-#, c-format
-msgid "Server sent unexpected return value (%d %s) in response to %s request for '%s'"
-msgstr "Der Server hat einen unerwarteten Rückgabewert (%d %s) in Antwort auf die Anfrage %s für »%s« zurückgeliefert"
+#: ../libsvn_ra_serf/update.c:2187 ../libsvn_ra_serf/update.c:2309
+#: ../libsvn_ra_serf/update.c:2346
+msgid "The REPORT or PROPFIND response did not include the requested checked-in value"
+msgstr "Die Antwort auf REPORT oder PROPFIND enthielt nicht den angeforderten Wert »checked-in«"
-#: ../libsvn_ra_neon/util.c:628
+#: ../libsvn_ra_serf/update.c:2528
#, c-format
-msgid "authorization failed: %s"
-msgstr "Autorisierung schlug fehl: %s"
+msgid "Error writing to '%s': unexpected EOF"
+msgstr "Fehler beim Schreiben nach »%s«: unerwartetes EOF"
-#: ../libsvn_ra_neon/util.c:630
-msgid "authorization failed"
-msgstr "Autorisierung schlug fehl"
+#: ../libsvn_ra_serf/update.c:2884
+msgid "Error retrieving REPORT"
+msgstr "Fehler beim Holen von REPORT"
-#: ../libsvn_ra_neon/util.c:635
-msgid "could not connect to server"
-msgstr "Konnte keine Verbindung zum Server herstellen"
+#: ../libsvn_ra_serf/update.c:3093
+msgid "Missing update-report close tag"
+msgstr "Abschließendes Tag »update-report« fehlt"
-#: ../libsvn_ra_neon/util.c:639
-msgid "timed out waiting for server"
-msgstr "Zeitüberschreitung beim Warten auf Server"
+#: ../libsvn_ra_serf/update.c:3562
+msgid "Can't get text contents of a directory"
+msgstr "Kann Textinhalt eines Verzeichnisses nicht lesen"
-#: ../libsvn_ra_neon/util.c:983
-#, c-format
-msgid "Can't calculate the request body size"
-msgstr "Kann die Größe der Anfrage nicht berechnen"
+#: ../libsvn_ra_serf/util.c:249
+msgid ": "
+msgstr ": "
-#: ../libsvn_ra_neon/util.c:1147
-#, c-format
-msgid "The %s request returned invalid XML in the response: %s (%s)"
-msgstr "Die %s-Anfrage gab in der Antwort ungültiges XML zurück: %s (%s)"
+#: ../libsvn_ra_serf/util.c:251
+msgid ", "
+msgstr ", "
-#: ../libsvn_ra_neon/util.c:1332
-#, c-format
-msgid "Error reading spooled %s request response"
-msgstr "Fehler beim Lesen der Antwort auf die %s Anfrage von Festplatte"
+#: ../libsvn_ra_serf/util.c:462
+msgid "Server SSL certificate verification failed"
+msgstr "Überprüfung des Server-SSL-Zertifikats fehlgeschlagen"
-#: ../libsvn_ra_serf/auth.c:413 ../libsvn_ra_serf/auth.c:419
-#: ../libsvn_ra_serf/auth_digest.c:270
-msgid "Missing 'realm' attribute in Authorization header"
-msgstr "Fehlendes Attribut »realm« in Autorisations-Header"
+#: ../libsvn_ra_serf/util.c:467
+msgid "certificate is not yet valid"
+msgstr "Das Zertifikat ist noch nicht gültig"
-# CHECKME: full stop in error message?
-#: ../libsvn_ra_serf/auth_digest.c:465
-msgid "Incorrect response-digest in Authentication-Info header."
-msgstr "Falsche Antwortnummer im Header der Authentifizierungs-Informationen."
+#: ../libsvn_ra_serf/util.c:470
+msgid "certificate has expired"
+msgstr "Das Zertifikat ist abgelaufen"
-#: ../libsvn_ra_serf/auth_kerb.c:160
-#, c-format
-msgid ""
-"Initialization of the GSSAPI context failed.\n"
-" %s\n"
-" %s\n"
-msgstr ""
-"Initialisierung des GSSAPI-Kontextes schlug fehl.\n"
-" %s\n"
-" %s\n"
+#: ../libsvn_ra_serf/util.c:474
+msgid "certificate issued for a different hostname"
+msgstr "Zertifikat wurde für einen anderen Hostnamen ausgestellt"
-#: ../libsvn_ra_serf/commit.c:307
-msgid "No Location header received"
-msgstr ""
+#: ../libsvn_ra_serf/util.c:478
+msgid "issuer is not trusted"
+msgstr "Herausgeber wird nicht vertraut"
-#: ../libsvn_ra_serf/commit.c:438
-#, c-format
-msgid "Directory '%s' is out of date; try updating"
-msgstr "Verzeichnis »%s« ist veraltet; versuchen Sie zu aktualisieren"
+#: ../libsvn_ra_serf/util.c:481
+msgid "and other reason(s)"
+msgstr "und weitere Gründe"
-#: ../libsvn_ra_serf/commit.c:542 ../libsvn_repos/commit.c:394
+#: ../libsvn_ra_serf/util.c:528
#, c-format
-msgid "Path '%s' not present"
-msgstr "Pfad »%s« existiert nicht"
+msgid "Invalid config: unable to load certificate file '%s'"
+msgstr "Ungültige Konfiguration: Zertifikatsdatei »%s« kann nicht geladen werden"
-#: ../libsvn_ra_serf/commit.c:629
-#, c-format
-msgid "File '%s' is out of date; try updating"
-msgstr "Datei »%s« ist veraltet; versuchen Sie zu aktualisieren"
+#: ../libsvn_ra_serf/util.c:960 ../libsvn_ra_serf/util.c:963
+msgid "Error running context"
+msgstr "Fehler beim Ausführen des Kontextes"
-#: ../libsvn_ra_serf/commit.c:1206
+#: ../libsvn_ra_serf/util.c:1297 ../libsvn_ra_serf/util.c:1302
#, c-format
-msgid "Failed writing updated file"
-msgstr "Fehler beim Schreiben der aktualisierten Datei"
+msgid "Malformed DAV:status CDATA '%s'"
+msgstr "Fehlerhafte »CDATA« Daten für »DAV:status«: »%s«"
-#: ../libsvn_ra_serf/commit.c:1330 ../libsvn_ra_serf/commit.c:1408
+#: ../libsvn_ra_serf/util.c:1599 ../libsvn_ra_serf/util.c:1702
#, c-format
-msgid "%s of '%s': %d %s (%s://%s)"
-msgstr "%s von »%s«: %d %s (%s://%s)"
+msgid "XML parsing failed"
+msgstr "XML-Parser schlug fehl"
-#: ../libsvn_ra_serf/commit.c:1340
+#: ../libsvn_ra_serf/util.c:1602
#, c-format
-msgid "POST request did not return transaction information"
-msgstr "POST-Anfrage lieferte keine Transaktionsinformationen zurück"
+msgid "XML parsing failed: (%d %s)"
+msgstr "XML-Parser schlug fehl: (%d %s)"
-#: ../libsvn_ra_serf/commit.c:1380
-msgid "The OPTIONS response did not include the requested activity-collection-set value"
-msgstr "Die OPTIONS-Antwort enthielt nicht den angeforderten Wert »activity-collection-set«"
-
-#: ../libsvn_ra_serf/commit.c:1679
-#, c-format
-msgid "Adding a directory failed: %s on %s (%d %s)"
-msgstr "Hinzufügen eines Verzeichnisses schlug fehl: %s auf %s (%d %s)"
+#: ../libsvn_ra_serf/util.c:1889
+msgid "The XML response contains invalid XML"
+msgstr "Die XML-Antwort enthält ungültiges XML"
-#: ../libsvn_ra_serf/getlocationsegments.c:233
-#, c-format
-msgid "Location segment report failed on '%s'@'%ld'"
-msgstr "Ortssegmentreport schlug auf »%s«@»%ld« fehl"
+#: ../libsvn_ra_serf/util.c:1954
+msgid ""
+"No more credentials or we tried too many times.\n"
+"Authentication failed"
+msgstr ""
+"Keine weiteren Zugangsdaten oder zu viele Versuche.\n"
+"Anmeldung fehlgeschlagen"
-#: ../libsvn_ra_serf/locks.c:560
-msgid "Malformed URL for repository"
-msgstr "Fehlerhafte URL für Projektarchiv"
+#: ../libsvn_ra_serf/util.c:1976
+msgid "Proxy authentication failed"
+msgstr "Proxy-Anmeldung schlug fehl"
-#: ../libsvn_ra_serf/locks.c:759
+#: ../libsvn_ra_serf/util.c:2029
#, c-format
-msgid "Unlock request failed: %d %s"
-msgstr "Sperrfreigabe gescheitert: %d %s"
-
-#: ../libsvn_ra_serf/property.c:1030 ../libsvn_ra_serf/update.c:1184
-#: ../libsvn_ra_serf/update.c:1732
-msgid "The OPTIONS response did not include the requested checked-in value"
-msgstr "Die OPTIONS-Antwort enthielt nicht den angeforderten Wert »checked-in«"
-
-#: ../libsvn_ra_serf/property.c:1047
-msgid "The OPTIONS response did not include the requested baseline-collection value"
-msgstr "Die OPTIONS-Antwort enthielt nicht den angeforderten Wert »baseline-collection«"
-
-#: ../libsvn_ra_serf/property.c:1063
-msgid "The OPTIONS response did not include the requested version-name value"
-msgstr "Die OPTIONS-Antwort enthielt nicht den angeforderten Wert »version-name«"
-
-#: ../libsvn_ra_serf/replay.c:218 ../libsvn_ra_serf/update.c:1279
-msgid "Missing revision attr in target-revision element"
-msgstr "Fehlendes Revisionsattribut in Element »target-revision«"
-
-#: ../libsvn_ra_serf/replay.c:236
-msgid "Missing revision attr in open-root element"
-msgstr "Fehlendes Revisionsattribut in Element »open-root«"
-
-#: ../libsvn_ra_serf/replay.c:262
-msgid "Missing revision attr in delete-entry element"
-msgstr "Fehlendes Revisionsattribut in Element »delete-entry«"
-
-#: ../libsvn_ra_serf/replay.c:288 ../libsvn_ra_serf/update.c:1297
-#: ../libsvn_ra_serf/update.c:1333
-msgid "Missing revision attr in open-directory element"
-msgstr "Fehlendes Revisionsattribut in Element »open-directory«"
+msgid "%s request on '%s' failed"
+msgstr "%s-Anfrage auf »%s« schlug fehl"
-#: ../libsvn_ra_serf/replay.c:349 ../libsvn_ra_serf/update.c:1426
-msgid "Missing revision attr in open-file element"
-msgstr "Fehlendes Revisionsattribut in Element »open-file«"
-
-#: ../libsvn_ra_serf/replay.c:436 ../libsvn_ra_serf/update.c:1572
-#: ../libsvn_ra_serf/update.c:1654
+#: ../libsvn_ra_serf/util.c:2101
#, c-format
-msgid "Missing name attr in %s element"
-msgstr "Fehlendes Namensattribut in Element %s"
+msgid "Premature EOF seen from server (http status=%d)"
+msgstr "Vorzeitiges EOF vom Server (http Status=%d)"
-#: ../libsvn_ra_serf/replay.c:864
+#: ../libsvn_ra_serf/util.c:2170
#, c-format
-msgid "Error retrieving replay REPORT (%d)"
-msgstr "Fehler beim Holen des Wiederholungs-REPORT (%d)"
+msgid "%s request on '%s' failed: %d %s"
+msgstr "%s-Anfrage auf »%s« schlug fehl: %d %s"
-#: ../libsvn_ra_serf/serf.c:61
-msgid "Module for accessing a repository via WebDAV protocol using serf."
-msgstr "Modul zum Zugriff auf ein Projektarchiv über das Protokoll WebDAV mittels serf."
+#: ../libsvn_ra_serf/util.c:2492
+msgid "The PROPFIND response did not include the requested version-controlled-configuration value"
+msgstr "Die PROPFIND-Antwort enthielt nicht den angeforderten Wert »version-controlled-configuration«"
-#: ../libsvn_ra_serf/serf.c:408
+#: ../libsvn_ra_serf/util.c:2594
#, c-format
-msgid "Could not lookup hostname `%s'"
-msgstr "Konnte Rechnernamen »%s« nicht nachschlagen"
-
-#: ../libsvn_ra_serf/serf.c:675
-msgid "The OPTIONS response did not include the requested resourcetype value"
-msgstr "Die OPTIONS-Antwort enthielt nicht den angeforderten Wert »resourcetype«"
-
-#: ../libsvn_ra_serf/serf.c:839
-msgid "The PROPFIND response did not include the requested resourcetype value"
-msgstr "Die PROPFIND-Antwort enthielt nicht den angeforderten Wert »resourcetype«"
+msgid "Repository moved permanently to '%s'; please relocate"
+msgstr "Das Projektarchiv wurde permanent nach »%s« verschoben; bitte umplatzieren"
-#: ../libsvn_ra_serf/serf.c:1054
+#: ../libsvn_ra_serf/util.c:2596
#, c-format
-msgid "Unsupported RA loader version (%d) for ra_serf"
-msgstr "Nicht unterstützte Zugriffsmodul-Laderversion (%d) für ra_serf"
+msgid "Repository moved temporarily to '%s'; please relocate"
+msgstr "Das Projektarchiv wurde zeitweilig nach »%s« verschoben; bitte umplatzieren"
-#: ../libsvn_ra_serf/update.c:852
+#: ../libsvn_ra_serf/util.c:2607
#, c-format
-msgid "GET request failed: %d %s"
-msgstr "GET-Anfrage schlug fehl: %d %s"
+msgid "'%s': no lock token available"
+msgstr "»%s«: Keine Sperrmarke verfügbar"
-#: ../libsvn_ra_serf/update.c:2332
+#: ../libsvn_ra_serf/util.c:2611
#, c-format
-msgid "Error retrieving REPORT (%d)"
-msgstr "Fehler beim Holen von REPORT (%d)"
+msgid "DAV request failed: 411 Content length required. The server or an intermediate proxy does not accept chunked encoding. Try setting 'http-chunked-requests' to 'auto' or 'no' in your client configuration."
+msgstr "DAV-Anfrage fehlgeschlagen: 411 Angabe zur Länge des Inhalts erforderlich. Der Server oder ein dazwischengeschalteter Proxy-Server akzeptiert Kodierung in Teilstücken nicht. Versuchen Sie »http-chunked-requests« auf »auto« oder »no« in der Konfiguration des Clients."
-#: ../libsvn_ra_serf/util.c:699 ../libsvn_ra_serf/util.c:702
+#: ../libsvn_ra_serf/util.c:2617
#, c-format
-msgid "Error running context"
-msgstr "Fehler beim Ausführen des Kontextes"
+msgid "The requested feature is not supported by '%s'"
+msgstr "Die angeforderte Funktion wird von »%s« nicht unterstützt"
-#: ../libsvn_ra_serf/util.c:1398
-msgid ""
-"No more credentials or we tried too many times.\n"
-"Authentication failed"
-msgstr ""
-
-#: ../libsvn_ra_serf/util.c:1421
-msgid "Proxy authentication failed"
-msgstr "Proxy-Anmeldung schlug fehl"
-
-#: ../libsvn_ra_serf/util.c:1495
+#: ../libsvn_ra_serf/util.c:2623
#, c-format
-msgid "Premature EOF seen from server (http status=%d)"
-msgstr "Vorzeitiges EOF vom Server (http Status=%d)"
+msgid "Unexpected HTTP status %d '%s' on '%s'\n"
+msgstr "Unerwarteter HTTP-Status %d »%s« auf »%s«\n"
-#: ../libsvn_ra_serf/util.c:1547
+#: ../libsvn_ra_serf/util.c:2767
#, c-format
-msgid "Unspecified error message: %d %s"
-msgstr "Nicht spezifizierte Fehlermeldung: %d %s"
+msgid "The %s response contains invalid XML (%d %s)"
+msgstr "Die Antwort auf »%s« enthält ungültiges XML (%d %s)"
-#: ../libsvn_ra_serf/util.c:1815
-msgid "The OPTIONS response did not include the requested version-controlled-configuration value"
-msgstr "Die OPTIONS-Antwort enthielt nicht den angeforderten Wert »version-controlled-configuration«"
+#: ../libsvn_ra_serf/xml.c:622
+#, c-format
+msgid "XML Parsing failed: Unexpected root element '%s'"
+msgstr "XML-Parser schlug fehl: Nicht erwartetes Wurzelelement »%s«"
-#: ../libsvn_ra_serf/util.c:1932
+#: ../libsvn_ra_serf/xml.c:682
#, c-format
-msgid "'%s': no lock token available"
-msgstr "»%s«: Keine Sperrmarke verfügbar"
+msgid "Missing XML attribute: '%s'"
+msgstr "Fehlendes XML-Attribut: »%s«"
-#: ../libsvn_ra_svn/client.c:136
+#: ../libsvn_ra_serf/xml.c:757
+msgid "The response contains invalid XML"
+msgstr "Die Antwort enthält ungültiges XML"
+
+#: ../libsvn_ra_svn/client.c:142
#, c-format
msgid "Unknown hostname '%s'"
msgstr "Unbekannter Hostname »%s«"
-#: ../libsvn_ra_svn/client.c:161
+#: ../libsvn_ra_svn/client.c:167
#, c-format
msgid "Can't connect to host '%s'"
msgstr "Kann nicht mit Host »%s« verbinden"
-#: ../libsvn_ra_svn/client.c:199
+#: ../libsvn_ra_svn/client.c:205
msgid "Prop diffs element not a list"
msgstr "Eigenschafts-Diff Element ist keine Liste"
-#: ../libsvn_ra_svn/client.c:395
+#: ../libsvn_ra_svn/client.c:403
#, c-format
msgid "Undefined tunnel scheme '%s'"
msgstr "Undefiniertes Tunnelschema »%s«"
-#: ../libsvn_ra_svn/client.c:412
+#: ../libsvn_ra_svn/client.c:420
#, c-format
msgid "Tunnel scheme %s requires environment variable %s to be defined"
msgstr "Für Tunnelschema %s muss die Umgebungsvariable %s definiert sein"
-#: ../libsvn_ra_svn/client.c:423
+#: ../libsvn_ra_svn/client.c:431
#, c-format
msgid "Can't tokenize command '%s'"
msgstr "Kann Anweisung »%s« nicht zerlegen"
-#: ../libsvn_ra_svn/client.c:454
+#: ../libsvn_ra_svn/client.c:464
#, c-format
msgid "Error in child process: %s"
msgstr "Fehler in Kindprozess: %s"
-#: ../libsvn_ra_svn/client.c:480
-#, c-format
-msgid "Can't create tunnel"
-msgstr "Kann Tunnel nicht erzeugen"
-
-#: ../libsvn_ra_svn/client.c:525
+#: ../libsvn_ra_svn/client.c:539
msgid "To better debug SSH connection problems, remove the -q option from 'ssh' in the [tunnels] section of your Subversion configuration file."
-msgstr ""
+msgstr "Um Probleme mit der Konfiguration von SSH zu untersuchen, entfernen Sie die Option »-q« von »ssh« im Abschnitt »[tunnels]« Ihrer Konfigurationsdatei für Subversion."
-#: ../libsvn_ra_svn/client.c:543
+#: ../libsvn_ra_svn/client.c:557
#, c-format
msgid "Illegal svn repository URL '%s'"
msgstr "Illegale svn Projektarchiv URL »%s«"
-#: ../libsvn_ra_svn/client.c:604
+#: ../libsvn_ra_svn/client.c:637
#, c-format
msgid "Server requires minimum version %d"
msgstr "Server erfordert mindestens Version %d"
-#: ../libsvn_ra_svn/client.c:608
+#: ../libsvn_ra_svn/client.c:641
#, c-format
msgid "Server only supports versions up to %d"
msgstr "Server unterstützt nur Versionen bis zu %d"
-#: ../libsvn_ra_svn/client.c:616
+#: ../libsvn_ra_svn/client.c:649
msgid "Server does not support edit pipelining"
msgstr "Server unterstützt »edit pipelining« nicht"
-#: ../libsvn_ra_svn/client.c:655
+#: ../libsvn_ra_svn/client.c:686
msgid "Impossibly long repository root from server"
msgstr "Unmöglich lange Projektarchivbasis vom Server"
-#: ../libsvn_ra_svn/client.c:667
+#: ../libsvn_ra_svn/client.c:698
msgid ""
"Module for accessing a repository using the svn network protocol.\n"
" - with Cyrus SASL authentication"
@@ -4267,222 +4690,247 @@ msgstr ""
"Modul zum Zugriff auf ein Projektarchiv über das svn-Netzwerkprotokoll.\n"
" - mit Cyrus-SASL-Authentifizierung"
-#: ../libsvn_ra_svn/client.c:671
+#: ../libsvn_ra_svn/client.c:702
msgid "Module for accessing a repository using the svn network protocol."
msgstr "Modul zum Zugriff auf ein Projektarchiv über das svn-Netzwerkprotokoll"
-#: ../libsvn_ra_svn/client.c:883
+#: ../libsvn_ra_svn/client.c:912
msgid "Server did not send repository root"
msgstr "Server gab keine Projektarchivbasis zurück"
-#: ../libsvn_ra_svn/client.c:958
+#: ../libsvn_ra_svn/client.c:985
+#, c-format
+msgid "ra_svn does not support not specifying a log message with pre-1.5 servers; consider passing an empty one, or upgrading the server"
+msgstr "ra_svn unterstützt die Angabe einer Logmeldung mit Servern älter als 1.5 nicht; Versuchen Sie, eine leere Logmeldung zu übergeben oder verwenden Sie eine neuere Version auf dem Server"
+
+#: ../libsvn_ra_svn/client.c:1008
msgid "Server doesn't support setting arbitrary revision properties during commit"
msgstr "Der Server unterstützt das Setzen beliebiger Revisionseigenschaften während eines Commits nicht"
-#: ../libsvn_ra_svn/client.c:1046
+#: ../libsvn_ra_svn/client.c:1111
+msgid "Inherited proplist element not a list"
+msgstr "Element für geerbte Eigenschaften ist keine Liste"
+
+#: ../libsvn_ra_svn/client.c:1186
msgid "Non-string as part of file contents"
msgstr "Ein Teil des Dateiinhaltes ist keine Zeichenkette"
-#: ../libsvn_ra_svn/client.c:1138
+#: ../libsvn_ra_svn/client.c:1272
msgid "Dirlist element not a list"
msgstr "Verzeichniseintrag ist keine Liste"
-#: ../libsvn_ra_svn/client.c:1198
+#: ../libsvn_ra_svn/client.c:1357
msgid "Mergeinfo element is not a list"
msgstr "Zusammenführungsinfo-Element ist keine Liste"
-#: ../libsvn_ra_svn/client.c:1411
+#: ../libsvn_ra_svn/client.c:1565
msgid "Log entry not a list"
msgstr "Logeintrag ist keine Liste"
-#: ../libsvn_ra_svn/client.c:1452
+#: ../libsvn_ra_svn/client.c:1612
msgid "Changed-path entry not a list"
msgstr "Eintrag für geänderte Pfade ist keine Liste"
-#: ../libsvn_ra_svn/client.c:1577
+#: ../libsvn_ra_svn/client.c:1778
msgid "'stat' not implemented"
msgstr "»stat« nicht implementiert"
-#: ../libsvn_ra_svn/client.c:1637
+#: ../libsvn_ra_svn/client.c:1837
msgid "'get-locations' not implemented"
msgstr "»get-locations« nicht implementiert"
-#: ../libsvn_ra_svn/client.c:1652
+#: ../libsvn_ra_svn/client.c:1852
msgid "Location entry not a list"
msgstr "Ortseintrag ist keine Liste"
-#: ../libsvn_ra_svn/client.c:1691
+#: ../libsvn_ra_svn/client.c:1891
msgid "'get-location-segments' not implemented"
msgstr "»get-location-segments« nicht implementiert"
-#: ../libsvn_ra_svn/client.c:1707
+#: ../libsvn_ra_svn/client.c:1908
msgid "Location segment entry not a list"
msgstr "Ortssegmenteintrag ist keine Liste"
-#: ../libsvn_ra_svn/client.c:1758
+#: ../libsvn_ra_svn/client.c:1918
+msgid "Expected valid revision range"
+msgstr "Erwartete einen gültigen Revisionsbereich"
+
+#: ../libsvn_ra_svn/client.c:1959
msgid "'get-file-revs' not implemented"
msgstr "»get-file-revs« nicht implementiert"
-#: ../libsvn_ra_svn/client.c:1782
+#: ../libsvn_ra_svn/client.c:1983
msgid "Revision entry not a list"
msgstr "Revisionseintrag ist keine Liste"
-#: ../libsvn_ra_svn/client.c:1799 ../libsvn_ra_svn/client.c:1829
+#: ../libsvn_ra_svn/client.c:2000 ../libsvn_ra_svn/client.c:2030
msgid "Text delta chunk not a string"
msgstr "Text-Deltastück ist kein String"
-#: ../libsvn_ra_svn/client.c:1841
+#: ../libsvn_ra_svn/client.c:2042
msgid "The get-file-revs command didn't return any revisions"
msgstr "Der »get-file-revs« Befehl gab keine Revisionen zurück"
-#: ../libsvn_ra_svn/client.c:1889
+#: ../libsvn_ra_svn/client.c:2089
msgid "Server doesn't support the lock command"
msgstr "Server unterstützt das Kommando »lock« nicht"
-#: ../libsvn_ra_svn/client.c:1953
+#: ../libsvn_ra_svn/client.c:2153
msgid "Server doesn't support the unlock command"
msgstr "Server unterstützt das Kommando »unlock« nicht"
-#: ../libsvn_ra_svn/client.c:2051
+#: ../libsvn_ra_svn/client.c:2251
msgid "Lock response not a list"
msgstr "Antwort beim Sperren ist keine Liste"
-#: ../libsvn_ra_svn/client.c:2065
+#: ../libsvn_ra_svn/client.c:2265
msgid "Unknown status for lock command"
msgstr "Unbekannter Status für Sperrbefehl"
-#: ../libsvn_ra_svn/client.c:2089
+#: ../libsvn_ra_svn/client.c:2289
msgid "Didn't receive end marker for lock responses"
msgstr "Keine Endemarke für Sperrantworten erhalten"
-#: ../libsvn_ra_svn/client.c:2179
+#: ../libsvn_ra_svn/client.c:2379
msgid "Unlock response not a list"
msgstr "Antwort beim Entsperren ist keine Liste"
-#: ../libsvn_ra_svn/client.c:2193
+#: ../libsvn_ra_svn/client.c:2393
msgid "Unknown status for unlock command"
msgstr "Unbekannter Status für Entsperrbefehl"
-#: ../libsvn_ra_svn/client.c:2216
+#: ../libsvn_ra_svn/client.c:2416
msgid "Didn't receive end marker for unlock responses"
msgstr "Keine Endemarke für Entsperrantworten erhalten"
-#: ../libsvn_ra_svn/client.c:2240 ../libsvn_ra_svn/client.c:2301
+#: ../libsvn_ra_svn/client.c:2440 ../libsvn_ra_svn/client.c:2492
msgid "Server doesn't support the get-lock command"
msgstr "Server unterstützt das Kommando »get-lock« nicht"
-#: ../libsvn_ra_svn/client.c:2315
+#: ../libsvn_ra_svn/client.c:2506
msgid "Lock element not a list"
msgstr "Sperrelement ist keine Liste"
-#: ../libsvn_ra_svn/client.c:2358
+#: ../libsvn_ra_svn/client.c:2549
msgid "Server doesn't support the replay command"
msgstr "Server unterstützt das Kommando »replay« nicht"
-#: ../libsvn_ra_svn/client.c:2389
+#: ../libsvn_ra_svn/client.c:2580
msgid "Server doesn't support the replay-range command"
msgstr "Server unterstützt das Kommando »replay-range« nicht"
-#: ../libsvn_ra_svn/client.c:2407
+#: ../libsvn_ra_svn/client.c:2598
#, c-format
msgid "Expected 'revprops', found '%s'"
msgstr "Erwartete »revprops«, fand »%s«"
-#: ../libsvn_ra_svn/client.c:2424
+#: ../libsvn_ra_svn/client.c:2615
msgid "Error while replaying commit"
msgstr "Fehler beim Wiederholen der Ãœbertragung"
-#: ../libsvn_ra_svn/client.c:2488
+#: ../libsvn_ra_svn/client.c:2688
msgid "'get-deleted-rev' not implemented"
msgstr "»get-deleted-rev« nicht implementiert"
-#: ../libsvn_ra_svn/client.c:2553
+#: ../libsvn_ra_svn/client.c:2787
#, c-format
msgid "Unsupported RA loader version (%d) for ra_svn"
msgstr "Nicht unterstützte Zugriffsmodul-Laderversion (%d) für ra_svn"
#: ../libsvn_ra_svn/cram.c:199 ../libsvn_ra_svn/cram.c:217
-#: ../libsvn_ra_svn/cyrus_auth.c:448 ../libsvn_ra_svn/cyrus_auth.c:503
+#: ../libsvn_ra_svn/cyrus_auth.c:526 ../libsvn_ra_svn/cyrus_auth.c:582
#: ../libsvn_ra_svn/internal_auth.c:66
msgid "Unexpected server response to authentication"
msgstr "Unerwartete Serverantwort bei Anmeldung"
-#: ../libsvn_ra_svn/cyrus_auth.c:176 ../svnserve/cyrus_auth.c:113
-#: ../svnserve/cyrus_auth.c:123
+#: ../libsvn_ra_svn/cyrus_auth.c:225
#, c-format
-msgid "Could not initialize the SASL library"
-msgstr "Konnte die SASL-Bibliothek nicht initialisieren"
+msgid "SASL authentication error: %s%s"
+msgstr "SASL-Anmeldefehler: %s%s"
+
+#: ../libsvn_ra_svn/cyrus_auth.c:242
+#, c-format
+msgid "Could not initialized the SASL library: %s%s"
+msgstr "Konnte die SASL-Bibliothek nicht initialisieren: %s%s"
+
+#: ../libsvn_ra_svn/cyrus_auth.c:415
+#, c-format
+msgid "Could not create SASL context: %s%s"
+msgstr "Konnte SASL-Kontext nicht erstellen: %s%s"
-#: ../libsvn_ra_svn/cyrus_auth.c:830 ../libsvn_ra_svn/internal_auth.c:63
+#: ../libsvn_ra_svn/cyrus_auth.c:921 ../libsvn_ra_svn/internal_auth.c:63
#: ../libsvn_ra_svn/internal_auth.c:114
#, c-format
msgid "Authentication error from server: %s"
msgstr "Anmeldefehler von Server: %s"
-#: ../libsvn_ra_svn/cyrus_auth.c:834
+#: ../libsvn_ra_svn/cyrus_auth.c:925
msgid "Can't get username or password"
msgstr "Kann Benutzername oder Passwort nicht erhalten"
-#: ../libsvn_ra_svn/editorp.c:131
+#: ../libsvn_ra_svn/editorp.c:145
msgid "Successful edit status returned too soon"
msgstr "Status für erfolgreiche Bearbeitung wurde zu früh zurückgegeben"
-#: ../libsvn_ra_svn/editorp.c:458
+#: ../libsvn_ra_svn/editorp.c:487
msgid "Invalid file or dir token during edit"
msgstr "Ungültige Datei- oder Verzeichnismarke während der Bearbeitung"
-#: ../libsvn_ra_svn/editorp.c:667
+#: ../libsvn_ra_svn/editorp.c:715
msgid "Apply-textdelta already active"
msgstr "Text-Delta Anwendung bereits aktiv"
-#: ../libsvn_ra_svn/editorp.c:689 ../libsvn_ra_svn/editorp.c:707
+#: ../libsvn_ra_svn/editorp.c:737 ../libsvn_ra_svn/editorp.c:755
msgid "Apply-textdelta not active"
msgstr "Text-Delta Anwendung nicht aktiv"
-#: ../libsvn_ra_svn/editorp.c:802
+#: ../libsvn_ra_svn/editorp.c:850
#, c-format
msgid "Command 'finish-replay' invalid outside of replays"
msgstr "Das Kommando »finish-replay« ist außerhalb von »replay«s ungültig"
-#: ../libsvn_ra_svn/editorp.c:893 ../libsvn_ra_svn/marshal.c:1025
+#: ../libsvn_ra_svn/editorp.c:954 ../libsvn_ra_svn/marshal.c:1498
#, c-format
-msgid "Unknown command '%s'"
-msgstr "Unbekannter Befehl »%s«"
+msgid "Unknown editor command '%s'"
+msgstr "Unbekannter Editorbefehl »%s«"
-#: ../libsvn_ra_svn/internal_auth.c:101 ../libsvn_subr/prompt.c:163
-#, c-format
+#: ../libsvn_ra_svn/internal_auth.c:101
msgid "Can't get password"
msgstr "Kein Passwort erhalten"
-#: ../libsvn_ra_svn/marshal.c:105
+#: ../libsvn_ra_svn/marshal.c:151
msgid "Capability entry is not a word"
msgstr "Eigenschaftseintrag ist kein Wort"
-#: ../libsvn_ra_svn/marshal.c:559
+#: ../libsvn_ra_svn/marshal.c:941
msgid "String length larger than maximum"
msgstr "Stringlänge größer als Maximum"
-#: ../libsvn_ra_svn/marshal.c:647
+#: ../libsvn_ra_svn/marshal.c:1007
msgid "Too many nested items"
msgstr "Zu viele verschachtelte Objekte"
-#: ../libsvn_ra_svn/marshal.c:666
+#: ../libsvn_ra_svn/marshal.c:1027 ../libsvn_ra_svn/marshal.c:1105
msgid "Number is larger than maximum"
msgstr "Zahl ist größer als Maximum"
-#: ../libsvn_ra_svn/marshal.c:881
+#: ../libsvn_ra_svn/marshal.c:1133
+msgid "Word too long"
+msgstr "Wort zu lang"
+
+#: ../libsvn_ra_svn/marshal.c:1351
msgid "Proplist element not a list"
msgstr "Eigenschaftselement ist keine Liste"
-#: ../libsvn_ra_svn/marshal.c:919
+#: ../libsvn_ra_svn/marshal.c:1390
msgid "Empty error list"
msgstr "Leere Fehlerliste"
-#: ../libsvn_ra_svn/marshal.c:928 ../libsvn_ra_svn/marshal.c:954
+#: ../libsvn_ra_svn/marshal.c:1399 ../libsvn_ra_svn/marshal.c:1425
msgid "Malformed error list"
msgstr "Fehlerhafte Fehlerliste"
-#: ../libsvn_ra_svn/marshal.c:982
+#: ../libsvn_ra_svn/marshal.c:1454
#, c-format
msgid "Unknown status '%s' in command response"
msgstr "Unbekannter Status »%s« in Antwort auf Befehl"
@@ -4502,22 +4950,22 @@ msgstr "Kann nicht in Verbindung schreiben"
msgid "Can't get socket timeout"
msgstr "Kann Socket-Timeout nicht erhalten"
-#: ../libsvn_repos/commit.c:135
+#: ../libsvn_repos/commit.c:170
#, c-format
msgid "'%s' is out of date"
msgstr "»%s« ist veraltet"
-#: ../libsvn_repos/commit.c:302 ../libsvn_repos/commit.c:447
+#: ../libsvn_repos/commit.c:291
#, c-format
msgid "Got source path but no source revision for '%s'"
msgstr "Quellpfad, aber keine Quellrevision für »%s« erhalten"
-#: ../libsvn_repos/commit.c:334 ../libsvn_repos/commit.c:478
+#: ../libsvn_repos/commit.c:324
#, c-format
msgid "Source url '%s' is from different repository"
msgstr "Quell URL »%s« stammt aus einem fremden Projektarchiv"
-#: ../libsvn_repos/commit.c:606
+#: ../libsvn_repos/commit.c:640
#, c-format
msgid ""
"Checksum mismatch for resulting fulltext\n"
@@ -4526,33 +4974,70 @@ msgstr ""
"Prüfsummenfehler für Volltextergebnis\n"
"(%s)"
-#: ../libsvn_repos/delta.c:191
+#: ../libsvn_repos/commit.c:685
+msgid "(no error)"
+msgstr "(kein Fehler)"
+
+#: ../libsvn_repos/commit.c:716 ../libsvn_repos/commit.c:722
+msgid "post-commit hook failed with no error message."
+msgstr "Aktion »post-commit« schlug ohne Fehlermeldung fehl"
+
+#: ../libsvn_repos/commit.c:725
+#, c-format
+msgid ""
+"post commit FS processing had error:\n"
+"%s\n"
+"%s"
+msgstr ""
+"Aktion »post-commit« meldete einen Fehler:\n"
+"%s\n"
+"%s"
+
+#: ../libsvn_repos/commit.c:726 ../libsvn_repos/commit.c:735
+msgid "(no error message)"
+msgstr "(keine Fehlermeldung)"
+
+#: ../libsvn_repos/commit.c:733
+#, c-format
+msgid ""
+"post commit FS processing had error:\n"
+"%s"
+msgstr ""
+"Aktion »post-commit« meldete einen Fehler:\n"
+"%s"
+
+#: ../libsvn_repos/commit.c:1266 ../libsvn_repos/fs-wrap.c:98
+#: ../libsvn_repos/load-fs-vtable.c:1008
+msgid "Commit succeeded, but post-commit hook failed"
+msgstr "Übertragen erfolgreich, aber die »post-commit«-Aktion schlug fehl"
+
+#: ../libsvn_repos/delta.c:192
msgid "Unable to open root of edit"
msgstr "Kann Basis der Änderung nicht öffnen"
-#: ../libsvn_repos/delta.c:242
+#: ../libsvn_repos/delta.c:247
msgid "Invalid target path"
msgstr "Ungültiger Zielpfad"
-#: ../libsvn_repos/delta.c:246
+#: ../libsvn_repos/delta.c:251
msgid "Delta depth 'exclude' not supported"
msgstr "Delta-Tiefe »exclude« wird nicht unterstützt"
-#: ../libsvn_repos/delta.c:272
+#: ../libsvn_repos/delta.c:277
msgid "Invalid editor anchoring; at least one of the input paths is not a directory and there was no source entry"
msgstr "Ungültiger Editoranker; zumindest einer der Eingabepfade ist kein Verzeichnis und es gab keinen Quelleintrag"
-#: ../libsvn_repos/deprecated.c:570 ../svnadmin/main.c:671
+#: ../libsvn_repos/deprecated.c:614 ../svnadmin/svnadmin.c:780
#, c-format
msgid "* Dumped revision %ld.\n"
msgstr "* Revision %ld ausgegeben.\n"
-#: ../libsvn_repos/deprecated.c:576 ../svnadmin/main.c:677
+#: ../libsvn_repos/deprecated.c:620 ../svnadmin/svnadmin.c:786
#, c-format
msgid "* Verified revision %ld.\n"
msgstr "* Revision %ld verifiziert.\n"
-#: ../libsvn_repos/deprecated.c:584 ../svnadmin/main.c:717
+#: ../libsvn_repos/deprecated.c:628 ../svnadmin/svnadmin.c:834
#, c-format
msgid ""
"\n"
@@ -4563,7 +5048,7 @@ msgstr ""
"------- Ãœbertrage Revision %ld >>>\n"
"\n"
-#: ../libsvn_repos/deprecated.c:590 ../svnadmin/main.c:723
+#: ../libsvn_repos/deprecated.c:634 ../svnadmin/svnadmin.c:840
#, c-format
msgid ""
"\n"
@@ -4574,227 +5059,191 @@ msgstr ""
"------- Neue Revision %ld übertragen (geladen aus Original %ld) >>>\n"
"\n"
-#: ../libsvn_repos/deprecated.c:603 ../svnadmin/main.c:736
+#: ../libsvn_repos/deprecated.c:647 ../svnadmin/svnadmin.c:853
#, c-format
msgid " * editing path : %s ..."
msgstr " * Bearbeite Pfad: %s ..."
-#: ../libsvn_repos/deprecated.c:609 ../svnadmin/main.c:742
+#: ../libsvn_repos/deprecated.c:653 ../svnadmin/svnadmin.c:859
#, c-format
msgid " * deleting path : %s ..."
msgstr " * Lösche Pfad: %s ..."
-#: ../libsvn_repos/deprecated.c:615 ../svnadmin/main.c:748
+#: ../libsvn_repos/deprecated.c:659 ../svnadmin/svnadmin.c:865
#, c-format
msgid " * adding path : %s ..."
msgstr " * Füge Pfad hinzu: %s ..."
-#: ../libsvn_repos/deprecated.c:621 ../svnadmin/main.c:754
+#: ../libsvn_repos/deprecated.c:665 ../svnadmin/svnadmin.c:871
#, c-format
msgid " * replacing path : %s ..."
msgstr " * Ersetze Pfad: %s ..."
-#: ../libsvn_repos/deprecated.c:631 ../svnadmin/main.c:764
+#: ../libsvn_repos/deprecated.c:675 ../svnadmin/svnadmin.c:881
msgid " done.\n"
msgstr " erledigt.\n"
-#: ../libsvn_repos/deprecated.c:641 ../svnadmin/main.c:774
+#: ../libsvn_repos/deprecated.c:685 ../svnadmin/svnadmin.c:891
#, c-format
msgid "<<< Started new transaction, based on original revision %ld\n"
msgstr "<<< Neue Transaktion basierend auf Originalrevision %ld gestartet\n"
-#: ../libsvn_repos/deprecated.c:648 ../svnadmin/main.c:781
+#: ../libsvn_repos/deprecated.c:692 ../svnadmin/svnadmin.c:904
#, c-format
msgid " removing '\\r' from %s ..."
msgstr " Entferne »\\r« aus %s ..."
-#: ../libsvn_repos/dump.c:353
+#: ../libsvn_repos/dump.c:248
#, c-format
-msgid ""
-"WARNING: Referencing data in revision %ld, which is older than the oldest\n"
-"WARNING: dumped revision (%ld). Loading this dump into an empty repository\n"
-"WARNING: will fail.\n"
-msgstr ""
-"WARNUNG: Verweis auf Daten in Revision %ld, welche älter als die älteste\n"
-"WARNUNG: ausgegebene Revision (%ld) ist. Das Laden diese Datei in ein\n"
-"WARNUNG: leeres Projektarchiv wird fehlschlagen.\n"
+msgid "Mergeinfo referencing revision(s) prior to the oldest dumped revision (r%ld). Loading this dump may result in invalid mergeinfo."
+msgstr "Zusammenführungsinformationen verweisen auf Revision(en) vor der ältesten ausgegebene Revision (r%ld). Das Laden dieser Datei kann ungültige Zusammenführungsinformationen zur Folge haben."
-#: ../libsvn_repos/dump.c:457
+#: ../libsvn_repos/dump.c:310
#, c-format
-msgid ""
-"WARNING: Mergeinfo referencing revision(s) prior to the oldest dumped revision (%ld).\n"
-"WARNING: Loading this dump may result in invalid mergeinfo.\n"
-msgstr ""
-"WARNUNG: Zusammenführungsinformationen verweisen auf Revision(en) vor der ältesten\n"
-"WARNUNG: ausgegebene Revision (%ld). Das Laden dieser Datei kann ungültige\n"
-"WARNUNG: Zusammenführungsinformationen zur Folge haben.\n"
+msgid "E%06d: While validating fspath '%s': %s"
+msgstr "E%06d: Fehler bei Überprüfung von »fspath« »%s«: %s"
+
+#: ../libsvn_repos/dump.c:432
+#, c-format
+msgid "Referencing data in revision %ld, which is older than the oldest dumped revision (r%ld). Loading this dump into an empty repository will fail."
+msgstr "Verweis auf Daten in Revision %ld, welche älter als die älteste ausgegebene Revision (r%ld) ist. Das Laden dieser Datei in ein leeres Projektarchiv wird fehlschlagen."
-#: ../libsvn_repos/dump.c:979 ../libsvn_repos/dump.c:1235
+#: ../libsvn_repos/dump.c:1148 ../libsvn_repos/dump.c:1440
#, c-format
msgid "Start revision %ld is greater than end revision %ld"
msgstr "Startrevision %ld ist größer als Endrevision %ld"
-#: ../libsvn_repos/dump.c:984 ../libsvn_repos/dump.c:1240
+#: ../libsvn_repos/dump.c:1153 ../libsvn_repos/dump.c:1445
#, c-format
msgid "End revision %ld is invalid (youngest revision is %ld)"
msgstr "Endrevision %ld ist ungültig (neueste Revision ist %ld)"
-#: ../libsvn_repos/dump.c:1120
-msgid ""
-"WARNING: The range of revisions dumped contained references to\n"
-"WARNING: copy sources outside that range.\n"
-msgstr ""
+#: ../libsvn_repos/dump.c:1291
+msgid "The range of revisions dumped contained references to copy sources outside that range."
+msgstr "Der ausgegebene Revisionsbereich enthält Verweise für Kopien auf Quellpfade außerhalb dieses Bereichs."
-#: ../libsvn_repos/dump.c:1131
-msgid ""
-"WARNING: The range of revisions dumped contained mergeinfo\n"
-"WARNING: which reference revisions outside that range.\n"
-msgstr ""
+#: ../libsvn_repos/dump.c:1305
+msgid "The range of revisions dumped contained mergeinfo which reference revisions outside that range."
+msgstr "Der ausgegebene Revisionsbereich enthielt Zusammenführungsinformationen die auf Revisionen außerhalb dieses Bereichs verweisen."
-#: ../libsvn_repos/dump.c:1188
+#: ../libsvn_repos/dump.c:1364
#, c-format
msgid "Unexpected node kind %d for '%s'"
msgstr "Unerwartete Knotenart %d für »%s«"
-#: ../libsvn_repos/fs-wrap.c:64 ../libsvn_repos/load-fs-vtable.c:818
-msgid "Commit succeeded, but post-commit hook failed"
-msgstr "Übertragen erfolgreich, aber die »post-commit«-Aktion schlug fehl"
-
-#: ../libsvn_repos/fs-wrap.c:171
+#: ../libsvn_repos/fs-wrap.c:194
#, c-format
msgid "Storage of non-regular property '%s' is disallowed through the repository interface, and could indicate a bug in your client"
msgstr "Das Speichern der speziellen Eigenschaft »%s« wird vom Projektarchiv verhindert und könnte auf einen Bug in Ihrem Client hindeuten"
-#: ../libsvn_repos/fs-wrap.c:186
+#: ../libsvn_repos/fs-wrap.c:209
#, c-format
msgid "Cannot accept '%s' property because it is not encoded in UTF-8"
msgstr "Kann Eigenschaft »%s« nicht akzeptieren, da sie nicht in UTF-8 kodiert ist"
-#: ../libsvn_repos/fs-wrap.c:196
+#: ../libsvn_repos/fs-wrap.c:219
#, c-format
msgid "Cannot accept non-LF line endings in '%s' property"
msgstr "Kann nicht-»LF« (LF = Unix-artige) Zeilenumbrüche in Eigenschaft »%s« nicht akzeptieren"
-#: ../libsvn_repos/fs-wrap.c:330
+#: ../libsvn_repos/fs-wrap.c:260
+#, c-format
+msgid "Commit rejected because mergeinfo on '%s' contains unexpected string terminator"
+msgstr "Übertragung abgewiesen, da die Zusammenführungsinformationen von »%s« nicht erwartete Zeichenkettenendmarken enthalten"
+
+#: ../libsvn_repos/fs-wrap.c:267
+#, c-format
+msgid "Commit rejected because mergeinfo on '%s' is syntactically invalid"
+msgstr "Übertragung abgewiesen, da die Zusammenführungsinformationen von »%s« nicht syntaktisch korrekt sind"
+
+#: ../libsvn_repos/fs-wrap.c:397
#, c-format
msgid "Write denied: not authorized to read all of revision %ld"
msgstr "Schreiben abgelehnt: Keine Berechtigung, alles von Revision %ld einzulesen."
-#: ../libsvn_repos/fs-wrap.c:507
+#: ../libsvn_repos/fs-wrap.c:581
#, c-format
msgid "Cannot unlock path '%s', no authenticated username available"
msgstr "Kann Pfad »%s« nicht freigeben, kein angemeldeter Benutzername verfügbar"
-#: ../libsvn_repos/fs-wrap.c:522
+#: ../libsvn_repos/fs-wrap.c:597
msgid "Unlock succeeded, but post-unlock hook failed"
msgstr "Entsperren erfolgreich, aber die Aktion »post-unlock« schlug fehl"
-#: ../libsvn_repos/hooks.c:87
+#: ../libsvn_repos/hooks.c:92
#, c-format
msgid "'%s' hook succeeded, but error output could not be read"
msgstr "»%s«-Aktion war erfolgreich, aber die Fehlerausgabe konnte nicht gelesen werden"
-#: ../libsvn_repos/hooks.c:102
+#: ../libsvn_repos/hooks.c:107
msgid "[Error output could not be translated from the native locale to UTF-8.]"
msgstr "[Fehlerausgabe konnte nicht mit der aktuellen Locale-Einstellung nicht nach UTF-8 konvertiert werden.]"
-#: ../libsvn_repos/hooks.c:107
+#: ../libsvn_repos/hooks.c:112
msgid "[Error output could not be read.]"
msgstr "[Fehlerausgabe konnte nicht gelesen werden.]"
# FIXME: two spaces at end?
-#: ../libsvn_repos/hooks.c:116
+#: ../libsvn_repos/hooks.c:121
#, c-format
msgid "'%s' hook failed (did not exit cleanly: apr_exit_why_e was %d, exitcode was %d). "
msgstr "Aktion »%s« schlug fehl (wurde nicht sauber beendet: apr_exit_why_e war %d, Exit-Code war %d). "
-#: ../libsvn_repos/hooks.c:125
+#: ../libsvn_repos/hooks.c:130
msgid "Commit"
msgstr "Ãœbertragen"
-#: ../libsvn_repos/hooks.c:127
+#: ../libsvn_repos/hooks.c:132
msgid "Revprop change"
msgstr "Ändern einer Revisionseigenschaft"
-# CHECKME, has to match first %s in "local %s, incoming %s upon %s"
-#: ../libsvn_repos/hooks.c:129
-#, fuzzy
-msgid "Obliteration"
-msgstr "blockiert"
-
-#: ../libsvn_repos/hooks.c:131
+#: ../libsvn_repos/hooks.c:134
msgid "Lock"
msgstr "Sperren"
-#: ../libsvn_repos/hooks.c:133
+#: ../libsvn_repos/hooks.c:136
msgid "Unlock"
msgstr "Entsperren"
-#: ../libsvn_repos/hooks.c:138
+#: ../libsvn_repos/hooks.c:141
#, c-format
msgid "%s hook failed (exit code %d)"
msgstr "Aktion »%s« schlug fehl (Exit-Code %d)"
-#: ../libsvn_repos/hooks.c:142
+#: ../libsvn_repos/hooks.c:145
#, c-format
msgid "%s blocked by %s hook (exit code %d)"
msgstr "%s wird durch Aktion %s behindert (Exit-Code %d)"
-#: ../libsvn_repos/hooks.c:149
+#: ../libsvn_repos/hooks.c:152
msgid " with output:\n"
msgstr " mit Ausgabe:\n"
-#: ../libsvn_repos/hooks.c:155
+#: ../libsvn_repos/hooks.c:158
msgid " with no output."
msgstr " ohne Ausgabe."
-#: ../libsvn_repos/hooks.c:190 ../libsvn_repos/hooks.c:217
-#, c-format
-msgid "Can't create pipe for hook '%s'"
-msgstr "Kann »Pipe« für Aktion »%s« nicht anlegen"
-
-# CHECKME: non-inherited = losgelöst???
-#: ../libsvn_repos/hooks.c:202 ../libsvn_repos/hooks.c:223
-#, c-format
-msgid "Can't make pipe read handle non-inherited for hook '%s'"
-msgstr "Kann Pipe-Lese-Handle für Aktion »%s« nicht nicht-erbbar machen"
-
-#: ../libsvn_repos/hooks.c:208 ../libsvn_repos/hooks.c:229
-#, c-format
-msgid "Can't make pipe write handle non-inherited for hook '%s'"
-msgstr "Kann Pipe-Schreib-Handle für Aktion »%s« nicht nicht-erbbar machen"
-
-#: ../libsvn_repos/hooks.c:238
+#: ../libsvn_repos/hooks.c:233
#, c-format
msgid "Can't create null stdout for hook '%s'"
msgstr "Kann leere Standardausgabe für Aktion »%s« nicht anlegen"
-#: ../libsvn_repos/hooks.c:252 ../libsvn_repos/hooks.c:259
-#, c-format
-msgid "Error closing write end of stderr pipe"
-msgstr "Fehler beim Schließen des Schreib-Endes der Standardfehlerausgabe"
-
-#: ../libsvn_repos/hooks.c:265
+#: ../libsvn_repos/hooks.c:260
#, c-format
msgid "Failed to start '%s' hook"
msgstr "Konnte Aktion »%s« nicht starten"
-#: ../libsvn_repos/hooks.c:278 ../libsvn_repos/hooks.c:287
-#, c-format
-msgid "Error closing read end of stderr pipe"
-msgstr "Fehler beim Schließen des Lese-Endes der Standardfehlerausgabe"
-
-#: ../libsvn_repos/hooks.c:295
+#: ../libsvn_repos/hooks.c:282
#, c-format
msgid "Error closing null file"
msgstr "Fehler beim Schließen der leeren Standardausgabe"
-#: ../libsvn_repos/hooks.c:379
+#: ../libsvn_repos/hooks.c:446
#, c-format
msgid "Failed to run '%s' hook; broken symlink"
msgstr "Ausführen der Aktion »%s« gescheitert; defekter »Symlink«"
-#: ../libsvn_repos/hooks.c:589
+#: ../libsvn_repos/hooks.c:664
msgid ""
"Repository has not been enabled to accept revision propchanges;\n"
"ask the administrator to create a pre-revprop-change hook"
@@ -4803,18 +5252,13 @@ msgstr ""
"Bitten Sie den Administrator darum, eine Aktion »pre-revprop-change«\n"
"einzurichten."
-#: ../libsvn_repos/hooks.c:688
-#, fuzzy
-msgid "Repository has not been enabled to accept obliteration"
-msgstr "Für diese Operation wird Zugang zum Projektarchiv benötigt"
-
-#: ../libsvn_repos/load-fs-vtable.c:466
+#: ../libsvn_repos/load-fs-vtable.c:575 ../svnrdump/load_editor.c:766
#, c-format
msgid "Relative source revision %ld is not available in current repository"
msgstr "Relative Quellrevision %ld ist im aktuellen Projektarchiv nicht verfügbar."
# CHECKME: Check quotes, s/rev/revision/
-#: ../libsvn_repos/load-fs-vtable.c:482
+#: ../libsvn_repos/load-fs-vtable.c:589
#, c-format
msgid ""
"Copy source checksum mismatch on copy from '%s'@%ld\n"
@@ -4823,368 +5267,509 @@ msgstr ""
"Prüfsummenfehler beim Kopieren von »%s«@%ld\n"
"nach »%s« in der auf r%ld basierten Revision"
-#: ../libsvn_repos/load-fs-vtable.c:539
+#: ../libsvn_repos/load-fs-vtable.c:653
msgid "Malformed dumpstream: Revision 0 must not contain node records"
msgstr "Fehlerhafter Dateiabzug: Revision 0 darf keine Knoteneinträge enthalten"
-#: ../libsvn_repos/load-fs-vtable.c:548
+#: ../libsvn_repos/load-fs-vtable.c:669
#, c-format
msgid "Unrecognized node-action on node '%s'"
msgstr "Unerkannte Knotenaktion auf Knoten »%s«"
-#: ../libsvn_repos/load.c:53
+#: ../libsvn_repos/load.c:54
msgid "Premature end of content data in dumpstream"
msgstr "Vorzeitiges Ende der Daten im Dateiabzug"
-#: ../libsvn_repos/load.c:60
+#: ../libsvn_repos/load.c:61
msgid "Dumpstream data appears to be malformed"
msgstr "Daten des Dateiabzugs scheinen fehlerhaft zu sein"
-#: ../libsvn_repos/load.c:109
+#: ../libsvn_repos/load.c:110
#, c-format
msgid "Dump stream contains a malformed header (with no ':') at '%.20s'"
msgstr "Datenstrom enthält fehlerhaften Kopf (ohne »:«) in »%.20s«"
-#: ../libsvn_repos/load.c:122
+#: ../libsvn_repos/load.c:123
#, c-format
msgid "Dump stream contains a malformed header (with no value) at '%.20s'"
msgstr "Datenstrom enthält fehlerhaften Kopf (ohne Wert) in »%.20s«"
-#: ../libsvn_repos/load.c:211
+#: ../libsvn_repos/load.c:212
msgid "Incomplete or unterminated property block"
msgstr "Eigenschaftsblock ist unvollständig oder nicht terminiert"
-#: ../libsvn_repos/load.c:359
+#: ../libsvn_repos/load.c:360
msgid "Unexpected EOF writing contents"
msgstr "Unerwartetes EOF beim Schreiben der Daten"
-#: ../libsvn_repos/load.c:388
-msgid "Malformed dumpfile header"
-msgstr "Dateiabzug enthält ungültigen Kopf"
+#: ../libsvn_repos/load.c:390
+#, c-format
+msgid "Malformed dumpfile header '%s'"
+msgstr "Dateiabzug enthält ungültigen Kopf »%s«"
-#: ../libsvn_repos/load.c:394 ../libsvn_repos/load.c:439
+#: ../libsvn_repos/load.c:397
#, c-format
msgid "Unsupported dumpfile version: %d"
msgstr "Dateiabzug Version %d wird nicht unterstützt"
-#: ../libsvn_repos/load.c:542
+#: ../libsvn_repos/load.c:538
msgid "Unrecognized record type in stream"
msgstr "Unerkannter Datensatz im Datenstrom"
-#: ../libsvn_repos/load.c:655
+#: ../libsvn_repos/load.c:645
msgid "Sum of subblock sizes larger than total block content length"
msgstr "Die Summe der Größen der Unterblöcke überschreitet die gesamte Blocklänge"
-#: ../libsvn_repos/node_tree.c:243
+#: ../libsvn_repos/node_tree.c:244
#, c-format
msgid "'%s' not found in filesystem"
msgstr "»%s« nicht im Dateisystem gefunden"
-#: ../libsvn_repos/replay.c:418
+#: ../libsvn_repos/replay.c:546 ../libsvn_repos/replay.c:1267
#, c-format
msgid "Filesystem path '%s' is neither a file nor a directory"
msgstr "Pfad »%s« ist weder eine Datei noch ein Verzeichnis"
-#: ../libsvn_repos/reporter.c:195
+#: ../libsvn_repos/reporter.c:205
#, c-format
msgid "Invalid length (%%%s) when about to read a string"
msgstr "Ungültige Länge (%%%s) beim Lesen einer Zeichenkette"
-#: ../libsvn_repos/reporter.c:256
+#: ../libsvn_repos/reporter.c:270
#, c-format
msgid "Invalid depth (%c) for path '%s'"
msgstr "Ungültige Tiefe (%c) für Pfad »%s«"
-#: ../libsvn_repos/reporter.c:849
+#: ../libsvn_repos/reporter.c:951
#, c-format
msgid "Working copy path '%s' does not exist in repository"
-msgstr "Arbeitskopie Pfad »%s« existiert nicht im Projektarchiv"
+msgstr "Arbeitskopiepfad »%s« existiert nicht im Projektarchiv"
-#: ../libsvn_repos/reporter.c:1217
+#: ../libsvn_repos/reporter.c:1355
msgid "Not authorized to open root of edit operation"
msgstr "Keine Berechtigung die Basis der Änderung zu öffnen"
-#: ../libsvn_repos/reporter.c:1234
+#: ../libsvn_repos/reporter.c:1372
#, c-format
msgid "Target path '%s' does not exist"
msgstr "Zielpfad »%s« existiert nicht"
-#: ../libsvn_repos/reporter.c:1242
+#: ../libsvn_repos/reporter.c:1380
msgid "Cannot replace a directory from within"
msgstr "Kann ein Verzeichnis nicht innerhalb sich selbst ersetzen"
-#: ../libsvn_repos/reporter.c:1285
+#: ../libsvn_repos/reporter.c:1420
msgid "Invalid report for top level of working copy"
msgstr "Ungültiger Report für oberste Ebene der Arbeitskopie"
-#: ../libsvn_repos/reporter.c:1300
+#: ../libsvn_repos/reporter.c:1435
msgid "Two top-level reports with no target"
msgstr "Zwei oberste Reports ohne Zielangabe"
-#: ../libsvn_repos/reporter.c:1358
+#: ../libsvn_repos/reporter.c:1497
#, c-format
msgid "Unsupported report depth '%s'"
msgstr "Nicht unterstützte Reporttiefe »%s«"
-#: ../libsvn_repos/reporter.c:1386
+#: ../libsvn_repos/reporter.c:1527
msgid "Depth 'exclude' not supported for link"
msgstr "Tiefe »exclude« wird für Links nicht unterstützt"
-#: ../libsvn_repos/reporter.c:1446
+#: ../libsvn_repos/reporter.c:1584
msgid "Request depth 'exclude' not supported"
msgstr "Angefragte Tiefe »exclude« wird nicht unterstützt"
-#: ../libsvn_repos/repos.c:199
+#: ../libsvn_repos/repos.c:188
#, c-format
msgid "'%s' exists and is non-empty"
msgstr "»%s« existiert und ist nicht leer"
-#: ../libsvn_repos/repos.c:245
+#: ../libsvn_repos/repos.c:234
msgid "Creating db logs lock file"
msgstr "Erzeuge Sperrdatei für Datenbanklogs"
-#: ../libsvn_repos/repos.c:263
+#: ../libsvn_repos/repos.c:252
msgid "Creating db lock file"
msgstr "Erzeuge Datenbank-Sperrdatei"
-#: ../libsvn_repos/repos.c:273
+#: ../libsvn_repos/repos.c:262
msgid "Creating lock dir"
msgstr "Erzeuge Verzeichnis für Datenbanksperren"
-#: ../libsvn_repos/repos.c:302
+#: ../libsvn_repos/repos.c:291
msgid "Creating hook directory"
msgstr "Lege Verzeichnis für Aktionen an"
-#: ../libsvn_repos/repos.c:378
+#: ../libsvn_repos/repos.c:373
msgid "Creating start-commit hook"
msgstr "Erzeuge Aktion »start-commit«"
-#: ../libsvn_repos/repos.c:468
+#: ../libsvn_repos/repos.c:465
msgid "Creating pre-commit hook"
msgstr "Erzeuge Aktion »pre-commit«"
-#: ../libsvn_repos/repos.c:544
+#: ../libsvn_repos/repos.c:543
msgid "Creating pre-revprop-change hook"
msgstr "Erzeuge Aktion »pre-revprop-change«"
-#: ../libsvn_repos/repos.c:618
-#, fuzzy
-msgid "Creating pre-obliterate hook"
-msgstr "Erzeuge Aktion »pre-commit«"
-
-#: ../libsvn_repos/repos.c:846
+#: ../libsvn_repos/repos.c:783
msgid "Creating post-commit hook"
msgstr "Erzeuge Aktion »post-commit«"
-#: ../libsvn_repos/repos.c:1032
+#: ../libsvn_repos/repos.c:975
msgid "Creating post-revprop-change hook"
msgstr "Erzeuge Aktion »post-revprop-change«"
-#: ../libsvn_repos/repos.c:1090
-#, fuzzy
-msgid "Creating post-obliterate hook"
-msgstr "Erzeuge Aktion »post-commit«"
-
-#: ../libsvn_repos/repos.c:1100
+#: ../libsvn_repos/repos.c:987
msgid "Creating conf directory"
msgstr "Erzeuge Konfigurationsverzeichnis"
-#: ../libsvn_repos/repos.c:1169
+#: ../libsvn_repos/repos.c:1071
msgid "Creating svnserve.conf file"
msgstr "Erzeuge Datei »svnserve.conf«"
-#: ../libsvn_repos/repos.c:1187
+#: ../libsvn_repos/repos.c:1089
msgid "Creating passwd file"
msgstr "Erzeuge Datei »passwd«"
-#: ../libsvn_repos/repos.c:1229
+#: ../libsvn_repos/repos.c:1131
msgid "Creating authz file"
msgstr "Erzeuge Datei »authz«"
-#: ../libsvn_repos/repos.c:1264
+#: ../libsvn_repos/repos.c:1161
+msgid "Creating hooks-env file"
+msgstr "Erzeuge Datei »hooks-env«"
+
+#: ../libsvn_repos/repos.c:1217
msgid "Could not create top-level directory"
msgstr "Konnte oberstes Verzeichnis nicht erzeugen"
-#: ../libsvn_repos/repos.c:1276
+#: ../libsvn_repos/repos.c:1227
msgid "Creating DAV sandbox dir"
msgstr "Erzeuge Verzeichnis für DAV-Sandkasten"
-#: ../libsvn_repos/repos.c:1345
+#: ../libsvn_repos/repos.c:1296
msgid "Error opening db lockfile"
msgstr "Fehler beim Öffnen der Datenbank-Sperrdatei"
-#: ../libsvn_repos/repos.c:1384
+#: ../libsvn_repos/repos.c:1333
+#, c-format
+msgid "'%s' is an existing repository"
+msgstr "»%s« ist ein vorhandenes Projektarchiv"
+
+#: ../libsvn_repos/repos.c:1337
#, c-format
msgid "'%s' is a subdirectory of an existing repository rooted at '%s'"
msgstr "»%s« ist ein Unterverzeichnis eines existierenden Projektarchivs mit der Wurzel-URL »%s«"
-#: ../libsvn_repos/repos.c:1392
+#: ../libsvn_repos/repos.c:1345
msgid "Repository creation failed"
msgstr "Anlegen des Projektarchivs schlug fehl"
-#: ../libsvn_repos/repos.c:1473
+#: ../libsvn_repos/repos.c:1430
#, c-format
msgid "Expected repository format '%d' or '%d'; found format '%d'"
msgstr "Erwartetes Format des Projektarchivs »%d« oder »%d«; gefunden »%d«"
-#: ../libsvn_repos/repos.c:1701
+#: ../libsvn_repos/repos.c:1674
#, c-format
msgid "unknown capability '%s'"
msgstr "unbekannte Eigenschaft »%s«"
-#: ../libsvn_repos/rev_hunt.c:70
+#: ../libsvn_repos/rev_hunt.c:71
#, c-format
msgid "Failed to find time on revision %ld"
msgstr "Konnte Zeit für Revision %ld nicht ermitteln"
-#: ../libsvn_repos/rev_hunt.c:204 ../libsvn_repos/rev_hunt.c:319
+#: ../libsvn_repos/rev_hunt.c:210 ../libsvn_repos/rev_hunt.c:325
#, c-format
msgid "Invalid start revision %ld"
msgstr "Ungültige Startrevision %ld"
-#: ../libsvn_repos/rev_hunt.c:512
+#: ../libsvn_repos/rev_hunt.c:518
msgid "Unreadable path encountered; access denied"
msgstr "Nichtlesbarer Pfad angetroffen; Zugriff verweigert"
-#: ../libsvn_repos/rev_hunt.c:1106
+#: ../libsvn_repos/rev_hunt.c:1156 ../libsvn_repos/rev_hunt.c:1495
#, c-format
msgid "'%s' is not a file in revision %ld"
msgstr "»%s« ist in Revision %ld keine Datei"
-# password store: kwallet, ...
-#: ../libsvn_subr/auth.c:607
+#: ../libsvn_subr/auth.c:223
#, c-format
-msgid "Invalid config: unknown password store '%s'"
-msgstr "Ungültige Konfiguration: Unbekannte Passwortverwaltung »%s«"
+msgid "No provider registered for '%s' credentials"
+msgstr "Kein Anbieter für Zugangsdaten vom Typ »%s« registriert"
-#: ../libsvn_subr/cache-inprocess.c:184
+#: ../libsvn_subr/cache-membuffer.c:496
#, c-format
msgid "Can't lock cache mutex"
msgstr "Kann Zwischenspeicher-Mutex nicht sperren"
-#: ../libsvn_subr/cache-inprocess.c:202
+#: ../libsvn_subr/cache-membuffer.c:527 ../libsvn_subr/cache-membuffer.c:543
+#, c-format
+msgid "Can't write-lock cache mutex"
+msgstr "Kann Zwischenspeicher-Mutex nicht für das Schreiben sperren"
+
+#: ../libsvn_subr/cache-membuffer.c:562
#, c-format
msgid "Can't unlock cache mutex"
msgstr "Kann Zwischenspeicher-Mutex nicht entsperren"
-#: ../libsvn_subr/cache-inprocess.c:454
+#: ../libsvn_subr/cache-membuffer.c:1299
#, c-format
msgid "Can't create cache mutex"
msgstr "Kann Zwischenspeicher-Mutex nicht anlegen"
+#: ../libsvn_subr/cache-membuffer.c:2034
+msgid "Can't iterate a membuffer-based cache"
+msgstr "Kann einen »memcached«-Zwischenspeicher nicht durchlaufen"
+
# memcached is an APR library
-#: ../libsvn_subr/cache-memcache.c:157
+#: ../libsvn_subr/cache-memcache.c:170
#, c-format
msgid "Unknown memcached error while reading"
msgstr "Unbekannter »memcached«-Fehler beim Lesen"
-#: ../libsvn_subr/cache-memcache.c:207
+#: ../libsvn_subr/cache-memcache.c:238
#, c-format
msgid "Unknown memcached error while writing"
msgstr "Unbekannter »memcached«-Fehler beim Schreiben"
-#: ../libsvn_subr/cache-memcache.c:222
+#: ../libsvn_subr/cache-memcache.c:344
msgid "Can't iterate a memcached cache"
msgstr "Kann keinen »memcached«-Zwischenspeicher durchlaufen"
-#: ../libsvn_subr/cache-memcache.c:286
+#: ../libsvn_subr/cache-memcache.c:444
#, c-format
msgid "Error parsing memcache server '%s'"
msgstr "Fehler beim Abfragen des »memcache«-Servers »%s«"
-#: ../libsvn_subr/cache-memcache.c:294
+#: ../libsvn_subr/cache-memcache.c:452
#, c-format
msgid "Scope not allowed in memcache server '%s'"
msgstr "Bereich ist im »memcache«-Server »%s« nicht erlaubt"
-#: ../libsvn_subr/cache-memcache.c:302
+#: ../libsvn_subr/cache-memcache.c:460
#, c-format
msgid "Must specify host and port for memcache server '%s'"
msgstr "Der Rechner und Port muss für den »memcache«-Server »%s« festgelegt werden"
-#: ../libsvn_subr/cache-memcache.c:321
+#: ../libsvn_subr/cache-memcache.c:480
#, c-format
msgid "Unknown error creating memcache server"
msgstr "Unbekannter Fehler beim Erzeugen eines »memcache«-Servers"
-#: ../libsvn_subr/cache-memcache.c:329
+#: ../libsvn_subr/cache-memcache.c:488
#, c-format
msgid "Unknown error adding server to memcache"
msgstr "Unbekannter Fehler beim Hinzufügen des Servers zu »memcache«"
-#: ../libsvn_subr/cache-memcache.c:399
+#: ../libsvn_subr/cache-memcache.c:561
#, c-format
msgid "Unknown error creating apr_memcache_t"
msgstr "Unbekannter Fehler beim Anlegen von apr_memcache_t"
-#: ../libsvn_subr/cmdline.c:599
+#: ../libsvn_subr/checksum.c:470
+#, c-format
+msgid ""
+"%s:\n"
+" expected: %s\n"
+" actual: %s\n"
+msgstr ""
+"%s:\n"
+" Erwartet: %s\n"
+" Tatsächlich: %s\n"
+
+#: ../libsvn_subr/cmdline.c:655
#, c-format
msgid "Error initializing command line arguments"
msgstr "Fehler beim Initialisieren der Kommandozeilenparameter"
-#: ../libsvn_subr/cmdline.c:681
+#: ../libsvn_subr/cmdline.c:744
msgid "Invalid syntax of argument of --config-option"
msgstr "Ungültige Syntax im Argument von --config-option"
-#: ../libsvn_subr/cmdline.c:708
+#: ../libsvn_subr/cmdline.c:771
#, c-format
msgid "Unrecognized file in argument of %s"
msgstr "Unbekannte Datei im Parameter von %s"
-#: ../libsvn_subr/config.c:667
+# FIXME: s/whitespace/whitespaceS/?
+#: ../libsvn_subr/cmdline.c:1017
+msgid "The EDITOR, SVN_EDITOR or VISUAL environment variable or 'editor-cmd' run-time configuration option is empty or consists solely of whitespace. Expected a shell command."
+msgstr "Die Umgebungsvariable EDITOR, SVN_EDITOR oder VISUAL oder die Laufzeitkonfigurationsoption »editor-cmd« ist leer oder besteht nur aus Leerzeichen. Erwartete ein Shell-Kommando."
+
+#: ../libsvn_subr/cmdline.c:1024
+msgid "None of the environment variables SVN_EDITOR, VISUAL or EDITOR are set, and no 'editor-cmd' run-time configuration option was found"
+msgstr "Keine der Umgebungsvariablen SVN_EDITOR, VISUAL oder EDITOR ist gesetzt und keine Laufzeitkonfigurationsoption »editor-cmd« wurde gefunden"
+
+#: ../libsvn_subr/cmdline.c:1049 ../libsvn_subr/cmdline.c:1133
+#, c-format
+msgid "Can't get working directory"
+msgstr "Kann Arbeitsverzeichnis nicht ermitteln"
+
+#: ../libsvn_subr/cmdline.c:1060 ../libsvn_subr/cmdline.c:1144
+#: ../libsvn_subr/cmdline.c:1169
+#, c-format
+msgid "Can't change working directory to '%s'"
+msgstr "Kann Arbeitsverzeichnis nicht nach »%s« wechseln"
+
+#: ../libsvn_subr/cmdline.c:1068 ../libsvn_subr/cmdline.c:1316
+#, c-format
+msgid "Can't restore working directory"
+msgstr "Kann nicht in das Arbeitsverzeichnis zurückwechseln"
+
+#: ../libsvn_subr/cmdline.c:1075 ../libsvn_subr/cmdline.c:1251
+#, c-format
+msgid "system('%s') returned %d"
+msgstr "Aufruf des Editors »%s« gab Fehler %d zurück"
+
+#: ../libsvn_subr/cmdline.c:1196
+#, c-format
+msgid "Can't write to '%s'"
+msgstr "Kann nicht nach »%s« schreiben"
+
+#: ../libsvn_subr/cmdline.c:1211 ../libsvn_subr/cmdline.c:1226
+#: ../libsvn_subr/cmdline.c:1260 ../libsvn_subr/io.c:3616
+#, c-format
+msgid "Can't stat '%s'"
+msgstr "Kann Status von »%s« nicht ermitteln"
+
+#: ../libsvn_subr/cmdline.c:1285
+msgid "Error normalizing edited contents to internal format"
+msgstr "Fehler beim Normalisieren des bearbeiteten Inhalts ins interne Format"
+
+#: ../libsvn_subr/config.c:739
#, c-format
msgid "Config error: invalid boolean value '%s' for '[%s] %s'"
msgstr "Konfigurationsfehler: Ungültiger logischer Wert »%s« für »[%s] %s«"
-#: ../libsvn_subr/config.c:674
+#: ../libsvn_subr/config.c:744
#, c-format
msgid "Config error: invalid boolean value '%s' for '%s'"
msgstr "Konfigurationsfehler: Ungültiger logischer Wert »%s« für »%s«"
-#: ../libsvn_subr/config.c:957
+#: ../libsvn_subr/config.c:1173
#, c-format
msgid "Config error: invalid integer value '%s'"
msgstr "Konfigurationsfehler: Ungültige Ganzzahl »%s«"
-#: ../libsvn_subr/config_auth.c:95
+#: ../libsvn_subr/config_auth.c:100
msgid "Unable to open auth file for reading"
msgstr "Kann »Auth« Datei nicht zum Lesen öffnen"
-#: ../libsvn_subr/config_auth.c:100
+#: ../libsvn_subr/config_auth.c:105
#, c-format
msgid "Error parsing '%s'"
msgstr "Fehler beim Zerlegen von »%s«"
# Ist hier jetzt 'Authentifizierung' = Anmeldung oder 'Autorisierung' = Berechtigung gemeint?
-#: ../libsvn_subr/config_auth.c:125
+#: ../libsvn_subr/config_auth.c:135
msgid "Unable to locate auth file"
msgstr "Kann »Auth« Datei nicht finden"
-#: ../libsvn_subr/config_auth.c:136
+#: ../libsvn_subr/config_auth.c:146
msgid "Unable to open auth file for writing"
msgstr "Kann »Auth« Datei nicht zum Schreiben öffnen"
-#: ../libsvn_subr/config_auth.c:140
+#: ../libsvn_subr/config_auth.c:150
#, c-format
msgid "Error writing hash to '%s'"
msgstr "Fehler beim Schreiben des Hashwerts nach »%s«"
-#: ../libsvn_subr/date.c:209
+#: ../libsvn_subr/crypto.c:93
+#, c-format
+msgid "Failed to initialize cryptography subsystem"
+msgstr "Konnte Kryptographie-Subsystem nicht initialisieren"
+
+#: ../libsvn_subr/crypto.c:108
+#, c-format
+msgid "code (%d), reason (\"%s\"), msg (\"%s\")"
+msgstr "Code (%d), Ursache (\"%s\"), Meldung (\"%s\")"
+
+#: ../libsvn_subr/crypto.c:134
+#, c-format
+msgid "Fetching error from APR"
+msgstr "Hole Fehler von APR"
+
+#: ../libsvn_subr/crypto.c:154
+#, c-format
+msgid "Error obtaining random data"
+msgstr "Fehler bei der Abfrage von Zufallsdaten"
+
+#: ../libsvn_subr/crypto.c:224
+msgid "OpenSSL crypto driver error"
+msgstr "Fehler im OpenSSL Kryptologietreiber"
+
+#: ../libsvn_subr/crypto.c:228
+msgid "Bad return value while loading crypto driver"
+msgstr "Fehlerhafter Rückgabewert beim Laden des Kryptologietreibers"
+
+#: ../libsvn_subr/crypto.c:234
+msgid "Error creating OpenSSL crypto context"
+msgstr "Fehler beim Erzeugen des OpenSSL Kryptologiekontextes"
+
+#: ../libsvn_subr/crypto.c:291 ../libsvn_subr/crypto.c:294
+#: ../libsvn_subr/crypto.c:419 ../libsvn_subr/crypto.c:422
+#: ../libsvn_subr/crypto.c:526 ../libsvn_subr/crypto.c:529
+#: ../libsvn_subr/crypto.c:641 ../libsvn_subr/crypto.c:644
+msgid "Error creating derived key"
+msgstr "Fehler beim Erstellen des abgeleiteten Schlüssels"
+
+#: ../libsvn_subr/crypto.c:297 ../libsvn_subr/crypto.c:425
+#: ../libsvn_subr/crypto.c:532 ../libsvn_subr/crypto.c:647
+msgid "Unexpected IV length returned"
+msgstr "Unerwartete Länge des Initialisierungsvektors erhalten"
+
+#: ../libsvn_subr/crypto.c:308 ../libsvn_subr/crypto.c:543
+msgid "Error initializing block encryption"
+msgstr "Fehler bei der Initialisierung der Blockverschlüsselung"
+
+#: ../libsvn_subr/crypto.c:347 ../libsvn_subr/crypto.c:444
+#: ../libsvn_subr/crypto.c:565 ../libsvn_subr/crypto.c:666
+msgid "Error fetching result length"
+msgstr "Fehler beim Lesen der Länge des Ergebisses"
+
+#: ../libsvn_subr/crypto.c:360 ../libsvn_subr/crypto.c:578
+msgid "Error during block encryption"
+msgstr "Fehler bei der Verschlüsselung eines Blocks"
+
+#: ../libsvn_subr/crypto.c:372 ../libsvn_subr/crypto.c:590
+msgid "Error finalizing block encryption"
+msgstr "Fehler beim Abschließen der Blockverschlüsselung"
+
+#: ../libsvn_subr/crypto.c:428 ../libsvn_subr/crypto.c:650
+msgid "Provided IV has incorrect length"
+msgstr "Angegebener Initialisierungsvektor hat eine falsche Länge"
+
+#: ../libsvn_subr/crypto.c:436 ../libsvn_subr/crypto.c:658
+msgid "Error initializing block decryption"
+msgstr "Fehler bei der Initialisierung des Blockentschlüsselung"
+
+#: ../libsvn_subr/crypto.c:455 ../libsvn_subr/crypto.c:677
+msgid "Error during block decryption"
+msgstr "Fehler bei der Entschlüsselung eines Blocks"
+
+#: ../libsvn_subr/crypto.c:464 ../libsvn_subr/crypto.c:686
+msgid "Error finalizing block decryption"
+msgstr "Fehler beim Abschließen der Blockentschlüsselung"
+
+#: ../libsvn_subr/date.c:307
#, c-format
msgid "Can't manipulate current date"
msgstr "Kann das aktuelle Datum nicht manipulieren"
-#: ../libsvn_subr/date.c:283 ../libsvn_subr/date.c:291
+#: ../libsvn_subr/date.c:381 ../libsvn_subr/date.c:389
#, c-format
msgid "Can't calculate requested date"
msgstr "Kann die das angeforderte Datum nicht berechnen"
-#: ../libsvn_subr/date.c:286
+#: ../libsvn_subr/date.c:384
#, c-format
msgid "Can't expand time"
msgstr "Kann Zeitangabe nicht expandieren"
-#: ../libsvn_subr/deprecated.c:355 ../libsvn_subr/opt.c:300
+#: ../libsvn_subr/deprecated.c:361 ../libsvn_subr/opt.c:302
msgid ""
"\n"
"Valid options:\n"
@@ -5192,7 +5777,7 @@ msgstr ""
"\n"
"Gültige Optionen:\n"
-#: ../libsvn_subr/deprecated.c:431 ../libsvn_subr/opt.c:407
+#: ../libsvn_subr/deprecated.c:437 ../libsvn_subr/opt.c:417
#, c-format
msgid ""
"\"%s\": unknown command.\n"
@@ -5201,245 +5786,277 @@ msgstr ""
"»%s«: unbekannter Befehl.\n"
"\n"
-#: ../libsvn_subr/deprecated.c:578 ../libsvn_subr/opt.c:1109
-#: ../svnrdump/svnrdump.c:340
+#: ../libsvn_subr/deprecated.c:615 ../libsvn_subr/opt.c:1239
+#: ../svnrdump/svnrdump.c:646
#, c-format
msgid "Type '%s help' for usage.\n"
msgstr "Geben Sie »%s help« für weitere Hilfe ein.\n"
-#: ../libsvn_subr/deprecated.c:928
+#: ../libsvn_subr/deprecated.c:1023
#, c-format
msgid "'%s' is neither a file nor a directory name"
msgstr "»%s« ist weder ein Datei- noch ein Verzeichnisname"
-#: ../libsvn_subr/dirent_uri.c:1661
+#: ../libsvn_subr/dirent_uri.c:1605
#, c-format
msgid "Couldn't determine absolute path of '%s'"
msgstr "Konnte den absoluten Pfad von »%s« nicht ermitteln"
-#: ../libsvn_subr/dirent_uri.c:2319
+#: ../libsvn_subr/dirent_uri.c:2314
#, c-format
msgid "Local URL '%s' does not contain 'file://' prefix"
msgstr "Lokale URL »%s« enthält keinen »file://« Präfix"
-#: ../libsvn_subr/dirent_uri.c:2398
+#: ../libsvn_subr/dirent_uri.c:2393
#, c-format
msgid "Local URL '%s' contains only a hostname, no path"
msgstr "Lokale URL »%s« enthält nur einen Rechnernamen aber keinen Pfad"
-#: ../libsvn_subr/dirent_uri.c:2412
+#: ../libsvn_subr/dirent_uri.c:2407
#, c-format
msgid "Local URL '%s' contains unsupported hostname"
msgstr "Lokale URL »%s« enthält einen nicht unterstützten Rechnernamen"
-#: ../libsvn_subr/dso.c:64
-#, c-format
-msgid "Can't create DSO mutex"
-msgstr "Kann DSO-Mutex nicht erzeugen"
-
-#: ../libsvn_subr/dso.c:83
-#, c-format
-msgid "Can't grab DSO mutex"
-msgstr "Kann DSO-Mutex nicht greifen"
-
-#: ../libsvn_subr/dso.c:97 ../libsvn_subr/dso.c:123 ../libsvn_subr/dso.c:138
-#, c-format
-msgid "Can't ungrab DSO mutex"
-msgstr "Kann DSO-Mutex nicht loslassen"
+#: ../libsvn_subr/error.c:263
+msgid "Additional errors:"
+msgstr "Zusätzliche Fehler:"
-#: ../libsvn_subr/error.c:445
+#: ../libsvn_subr/error.c:524
msgid "Can't recode error string from APR"
msgstr "Kann Fehlermeldung von APR nicht umkodieren"
-#: ../libsvn_subr/error.c:544
+#: ../libsvn_subr/error.c:624
#, c-format
-msgid "%swarning: %s\n"
-msgstr "%swarnung: %s\n"
+msgid "%swarning: W%06d: %s\n"
+msgstr "%sWarnung: W%06d: %s\n"
-#: ../libsvn_subr/error.c:598
+#: ../libsvn_subr/error.c:706
#, c-format
msgid "In file '%s' line %d: assertion failed (%s)"
msgstr "In Datei »%s«, Zeile %d: Assert-Anweisung schlug fehl (%s)"
-#: ../libsvn_subr/error.c:602
+#: ../libsvn_subr/error.c:710
#, c-format
msgid "In file '%s' line %d: internal malfunction"
msgstr "In Datei »%s«, Zeile %d: interne Fehlfunktion"
-#: ../libsvn_subr/io.c:169
+#: ../libsvn_subr/error.c:766
+msgid "stream error"
+msgstr "Datenstromfehler"
+
+#: ../libsvn_subr/error.c:771
+msgid "out of memory"
+msgstr "Nicht genügend Speicher"
+
+#: ../libsvn_subr/error.c:776
+msgid "buffer error"
+msgstr "Pufferfehler"
+
+#: ../libsvn_subr/error.c:781
+msgid "version error"
+msgstr "Versionsfehler"
+
+#: ../libsvn_subr/error.c:786
+msgid "corrupt data"
+msgstr "Fehlerhafte Daten"
+
+# FIXME: Grammar depends on usage!!!!!!! (prepanded by "bei")
+#: ../libsvn_subr/error.c:791
+msgid "unknown error"
+msgstr "Unbekannter Fehler"
+
+#: ../libsvn_subr/gpg_agent.c:358 ../libsvn_subr/prompt.c:631
#, c-format
-msgid "Error converting entry in directory '%s' to UTF-8"
-msgstr "Fehler beim Konvertieren eines Eintrags im Verzeichnis »%s« nach UTF-8"
+msgid "Password for '%s': "
+msgstr "Passwort für »%s«: "
+
+#: ../libsvn_subr/gpg_agent.c:359
+#, c-format
+msgid "Enter your Subversion password for %s"
+msgstr "Geben Sie Ihr Subversion-Passwort für %s ein"
+
+#: ../libsvn_subr/hash.c:120
+msgid "Serialized hash missing terminator"
+msgstr "Serialisierte Prüfsumme hat kein Endzeichen"
-#: ../libsvn_subr/io.c:229
+#: ../libsvn_subr/hash.c:129 ../libsvn_subr/hash.c:142
+#: ../libsvn_subr/hash.c:153 ../libsvn_subr/hash.c:165
+#: ../libsvn_subr/hash.c:173 ../libsvn_subr/hash.c:183
+#: ../libsvn_subr/hash.c:196 ../libsvn_subr/hash.c:204
+msgid "Serialized hash malformed"
+msgstr "Fehlerhafte serialisierte Prüfsumme"
+
+#: ../libsvn_subr/hash.c:244
+msgid "Cannot serialize negative length"
+msgstr "Kann negative Länge nicht serialisieren"
+
+#: ../libsvn_subr/io.c:309
#, c-format
msgid "Can't check path '%s'"
msgstr "Kann Pfad »%s« nicht prüfen"
-#: ../libsvn_subr/io.c:457 ../libsvn_subr/io.c:3771
+#: ../libsvn_subr/io.c:537 ../libsvn_subr/io.c:4558
#, c-format
msgid "Can't open '%s'"
msgstr "Kann »%s« nicht öffnen"
-#: ../libsvn_subr/io.c:483 ../libsvn_subr/io.c:569
+#: ../libsvn_subr/io.c:563 ../libsvn_subr/io.c:649
#, c-format
msgid "Unable to make name for '%s'"
msgstr "Kann Namen für »%s« nicht erstellen"
-#: ../libsvn_subr/io.c:556
+#: ../libsvn_subr/io.c:636
#, c-format
msgid "Can't create symbolic link '%s'"
msgstr "Kann symbolischen Link »%s« nicht anlegen"
-#: ../libsvn_subr/io.c:573 ../libsvn_subr/io.c:606 ../libsvn_subr/io.c:634
+#: ../libsvn_subr/io.c:653 ../libsvn_subr/io.c:686 ../libsvn_subr/io.c:714
msgid "Symbolic links are not supported on this platform"
msgstr "Symbolische Verweise werden auf dieser Plattform nicht unterstützt"
-#: ../libsvn_subr/io.c:596
+#: ../libsvn_subr/io.c:676
#, c-format
msgid "Can't read contents of link"
msgstr "Kann Inhalt des Verweises nicht lesen"
-#: ../libsvn_subr/io.c:654
+#: ../libsvn_subr/io.c:734
#, c-format
msgid "Can't find a temporary directory"
msgstr "Kann temporäres Verzeichnis nicht finden"
-#: ../libsvn_subr/io.c:773
+#: ../libsvn_subr/io.c:852
#, c-format
msgid "Can't copy '%s' to '%s'"
msgstr "Kann »%s« nicht nach »%s« kopieren"
-#: ../libsvn_subr/io.c:816 ../libsvn_subr/io.c:838 ../libsvn_subr/io.c:884
+#: ../libsvn_subr/io.c:895 ../libsvn_subr/io.c:917 ../libsvn_subr/io.c:963
+#: ../libsvn_subr/io.c:4691
#, c-format
msgid "Can't set permissions on '%s'"
msgstr "Kann Berechtigungen auf »%s« nicht setzen"
-#: ../libsvn_subr/io.c:834 ../libsvn_subr/io.c:3809
+#: ../libsvn_subr/io.c:913 ../libsvn_subr/io.c:1984 ../libsvn_subr/io.c:2043
+#: ../libsvn_subr/io.c:4596
#, c-format
msgid "Can't get file name"
msgstr "Kann keinen Dateinamen holen"
-#: ../libsvn_subr/io.c:908
+#: ../libsvn_subr/io.c:987
#, c-format
msgid "Can't append '%s' to '%s'"
msgstr "Kann »%s« nicht an »%s« anhängen"
-#: ../libsvn_subr/io.c:942
-#, c-format
-msgid "Source '%s' is not a directory"
-msgstr "Quelle »%s« ist kein Verzeichnis"
-
-#: ../libsvn_subr/io.c:948
-#, c-format
-msgid "Destination '%s' is not a directory"
-msgstr "Ziel »%s« ist kein Verzeichnis"
-
-#: ../libsvn_subr/io.c:954
+#: ../libsvn_subr/io.c:1033
#, c-format
msgid "Destination '%s' already exists"
msgstr "Ziel »%s« existiert bereits"
-#: ../libsvn_subr/io.c:1025 ../libsvn_subr/io.c:2113
-#, c-format
-msgid "Can't read directory '%s'"
-msgstr "Kann Verzeichnis »%s« nicht lesen"
-
-#: ../libsvn_subr/io.c:1030 ../libsvn_subr/io.c:2118 ../libsvn_subr/io.c:3387
-#, c-format
-msgid "Error closing directory '%s'"
-msgstr "Fehler beim Schließen von Verzeichnis »%s«"
-
-#: ../libsvn_subr/io.c:1058
+#: ../libsvn_subr/io.c:1137
#, c-format
msgid "Can't make directory '%s'"
msgstr "Kann Verzeichnis »%s« nicht anlegen"
-#: ../libsvn_subr/io.c:1127
+#: ../libsvn_subr/io.c:1206
#, c-format
msgid "Can't set access time of '%s'"
msgstr "Kann Zugriffszeit von »%s« nicht setzen"
-#: ../libsvn_subr/io.c:1403 ../libsvn_subr/io.c:1510
+#: ../libsvn_subr/io.c:1535 ../libsvn_subr/io.c:1637
#, c-format
msgid "Can't change perms of file '%s'"
msgstr "Kann die Zugriffsrechte der Datei »%s« nicht ändern"
-#: ../libsvn_subr/io.c:1551
+#: ../libsvn_subr/io.c:1803
#, c-format
msgid "Can't set file '%s' read-only"
msgstr "Kann den Schreibschutz der Datei »%s« nicht setzen"
-#: ../libsvn_subr/io.c:1583
+#: ../libsvn_subr/io.c:1835
#, c-format
msgid "Can't set file '%s' read-write"
msgstr "Kann den Schreibschutz der Datei »%s« nicht aufheben"
-#: ../libsvn_subr/io.c:1627
+#: ../libsvn_subr/io.c:1874 ../libsvn_subr/io.c:1908
#, c-format
msgid "Error getting UID of process"
msgstr "Fehler beim Ermitteln der Prozess-UID"
-#: ../libsvn_subr/io.c:1698
+#: ../libsvn_subr/io.c:2010
#, c-format
msgid "Can't get shared lock on file '%s'"
msgstr "Kann keine gemeinsame Sperre für Datei »%s« erhalten"
-#: ../libsvn_subr/io.c:1736
+#: ../libsvn_subr/io.c:2048
+#, c-format
+msgid "Can't unlock file '%s'"
+msgstr "Kann Datei »%s« nicht entsprerren"
+
+#: ../libsvn_subr/io.c:2103 ../libsvn_subr/io.c:3511
#, c-format
msgid "Can't flush file '%s'"
msgstr "Kann Datei »%s« nicht leeren"
-#: ../libsvn_subr/io.c:1737
+#: ../libsvn_subr/io.c:2104 ../libsvn_subr/io.c:3512
#, c-format
msgid "Can't flush stream"
msgstr "Kann Datenstrom nicht leeren"
-#: ../libsvn_subr/io.c:1749 ../libsvn_subr/io.c:1766
+#: ../libsvn_subr/io.c:2116 ../libsvn_subr/io.c:2133
#, c-format
msgid "Can't flush file to disk"
msgstr "Kann Datei nicht auf Festplatte leeren"
-#: ../libsvn_subr/io.c:1858 ../libsvn_subr/prompt.c:102 ../svnserve/main.c:625
+#: ../libsvn_subr/io.c:2225 ../libsvn_subr/prompt.c:197
+#: ../svnserve/svnserve.c:822
#, c-format
msgid "Can't open stdin"
msgstr "Kann Standardeingabe nicht öffnen"
-#: ../libsvn_subr/io.c:1878
+#: ../libsvn_subr/io.c:2245
msgid "Reading from stdin is disallowed"
msgstr "Lesen von der Standardeingabe ist nicht erlaubt"
-#: ../libsvn_subr/io.c:1935
+#: ../libsvn_subr/io.c:2312
#, c-format
msgid "Can't remove file '%s'"
msgstr "Kann Datei »%s« nicht löschen"
-#: ../libsvn_subr/io.c:2020
+#: ../libsvn_subr/io.c:2399
#, c-format
msgid "Can't remove '%s'"
msgstr "Kann »%s« nicht löschen"
-#: ../libsvn_subr/io.c:2211
+#: ../libsvn_subr/io.c:2562
+#, c-format
+msgid "Path '%s' not found, case obstructed by '%s'"
+msgstr "Pfad »%s« nicht gefunden, Groß- und Kleinschreibung durch »%s« blockiert"
+
+#: ../libsvn_subr/io.c:2601
+#, c-format
+msgid "Path '%s' not found"
+msgstr "Pfad »%s« nicht gefunden"
+
+#: ../libsvn_subr/io.c:2675
#, c-format
msgid "Can't create process '%s' attributes"
msgstr "Kann Attribute von Prozess »%s« nicht erzeugen"
-#: ../libsvn_subr/io.c:2217
+#: ../libsvn_subr/io.c:2682
#, c-format
msgid "Can't set process '%s' cmdtype"
msgstr "Kann Kommandotyp von Prozess »%s« nicht setzen "
-#: ../libsvn_subr/io.c:2229
+#: ../libsvn_subr/io.c:2694
#, c-format
msgid "Can't set process '%s' directory"
msgstr "Kann Verzeichnis von Prozess »%s« nicht setzen"
-#: ../libsvn_subr/io.c:2242
+#: ../libsvn_subr/io.c:2708
#, c-format
msgid "Can't set process '%s' child input"
msgstr "Kann Eingabe des Kindprozesses »%s« nicht setzen"
-#: ../libsvn_subr/io.c:2249
+#: ../libsvn_subr/io.c:2716
#, c-format
msgid "Can't set process '%s' child outfile"
msgstr "Kann Ausgabe des Kindprozesses »%s« nicht setzen"
@@ -5447,48 +6064,65 @@ msgstr "Kann Ausgabe des Kindprozesses »%s« nicht setzen"
# FIXME: Laut Code ist %s der Kindprozess. Müsste es dann nicht
# "Can't set child process '%s' errfile" (oder ganz ohne child) heißen?
# (Es gibt kein child von %s)
-#: ../libsvn_subr/io.c:2256
+#: ../libsvn_subr/io.c:2724
#, c-format
msgid "Can't set process '%s' child errfile"
msgstr "Kann Fehlerausgabe des Kindprozesses »%s« nicht setzen"
-#: ../libsvn_subr/io.c:2263
+#: ../libsvn_subr/io.c:2738
+#, c-format
+msgid "Can't set process '%s' stdio pipes"
+msgstr "Kann Standard-IO-Datenströme des Prozesses »%s« nicht setzen "
+
+#: ../libsvn_subr/io.c:2746
#, c-format
msgid "Can't set process '%s' child errfile for error handler"
msgstr "Kann Datei für die Fehlerbehandlung des Kindprozesses »%s« nicht setzen"
-#: ../libsvn_subr/io.c:2269
+#: ../libsvn_subr/io.c:2753
#, c-format
msgid "Can't set process '%s' error handler"
msgstr "Kann die Fehlerbehandlung des Prozesses »%s« nicht setzen"
-#: ../libsvn_subr/io.c:2291
+#: ../libsvn_subr/io.c:2776
#, c-format
msgid "Can't start process '%s'"
msgstr "Kann Prozess »%s« nicht starten"
-#: ../libsvn_subr/io.c:2315
+#: ../libsvn_subr/io.c:2800
#, c-format
msgid "Error waiting for process '%s'"
msgstr "Fehler beim Warten auf Prozess »%s«"
# CHECKME: Isn't "exitwhy" an internal detail?
-#: ../libsvn_subr/io.c:2323
+#: ../libsvn_subr/io.c:2809
#, c-format
-msgid "Process '%s' failed (exitwhy %d)"
-msgstr "Prozess »%s« schlug fehl (Grund %d)"
+msgid "Process '%s' failed (signal %d, core dumped)"
+msgstr "Prozess »%s« schlug fehl (Signal %d, Core-Dump)"
-#: ../libsvn_subr/io.c:2330
+# CHECKME: Isn't "exitwhy" an internal detail?
+#: ../libsvn_subr/io.c:2814
+#, c-format
+msgid "Process '%s' failed (signal %d)"
+msgstr "Prozess »%s« schlug fehl (Signal %d)"
+
+# CHECKME: Isn't "exitwhy" an internal detail?
+#: ../libsvn_subr/io.c:2820
+#, c-format
+msgid "Process '%s' failed (exitwhy %d, exitcode %d)"
+msgstr "Prozess »%s« schlug fehl (Exit-Grund %d, Exit-Code %d)"
+
+#: ../libsvn_subr/io.c:2828
#, c-format
msgid "Process '%s' returned error exitcode %d"
msgstr "Prozess »%s« hat Fehlerwert %d zurückgegeben"
-#: ../libsvn_subr/io.c:2436
+#: ../libsvn_subr/io.c:2935
#, c-format
msgid "'%s' returned %d"
msgstr "»%s« hat %d zurückgegeben"
-#: ../libsvn_subr/io.c:2557
+#: ../libsvn_subr/io.c:3055
#, c-format
msgid ""
"Error running '%s': exitcode was %d, args were:\n"
@@ -5503,258 +6137,289 @@ msgstr ""
"%s\n"
"%s"
-#: ../libsvn_subr/io.c:2697
+#: ../libsvn_subr/io.c:3196
#, c-format
msgid "Can't detect MIME type of non-file '%s'"
msgstr "Kann MIME Typ der nicht-Datei »%s« nicht ermitteln"
-#: ../libsvn_subr/io.c:2778
+#: ../libsvn_subr/io.c:3291
#, c-format
msgid "Can't open file '%s'"
msgstr "Kann Datei »%s« nicht öffnen"
-#: ../libsvn_subr/io.c:2814
+#: ../libsvn_subr/io.c:3331
#, c-format
msgid "Can't close file '%s'"
msgstr "Kann Datei »%s« nicht schließen"
-#: ../libsvn_subr/io.c:2815
+#: ../libsvn_subr/io.c:3332
#, c-format
msgid "Can't close stream"
msgstr "Kann Datenstrom nicht schließen"
-#: ../libsvn_subr/io.c:2825 ../libsvn_subr/io.c:2849 ../libsvn_subr/io.c:2862
+#: ../libsvn_subr/io.c:3341 ../libsvn_subr/io.c:3377 ../libsvn_subr/io.c:3402
#, c-format
msgid "Can't read file '%s'"
msgstr "Kann Datei »%s« nicht lesen"
-#: ../libsvn_subr/io.c:2826 ../libsvn_subr/io.c:2850 ../libsvn_subr/io.c:2863
+#: ../libsvn_subr/io.c:3342 ../libsvn_subr/io.c:3378 ../libsvn_subr/io.c:3403
#, c-format
msgid "Can't read stream"
msgstr "Kann nicht aus Datenstrom lesen"
-#: ../libsvn_subr/io.c:2837
+#: ../libsvn_subr/io.c:3351
+#, c-format
+msgid "Can't write file '%s'"
+msgstr "Kann Datei »%s« nicht schreiben"
+
+#: ../libsvn_subr/io.c:3352
+#, c-format
+msgid "Can't write stream"
+msgstr "Kann nicht in Datenstrom schreiben"
+
+#: ../libsvn_subr/io.c:3366
#, c-format
msgid "Can't get attribute information from file '%s'"
msgstr "Kann keine Attributinformationen aus Datei »%s« lesen"
-#: ../libsvn_subr/io.c:2838
+#: ../libsvn_subr/io.c:3367
#, c-format
msgid "Can't get attribute information from stream"
msgstr "Kann keine Attributinformationen aus Datenstrom lesen"
-#: ../libsvn_subr/io.c:2874
+#: ../libsvn_subr/io.c:3414
#, c-format
msgid "Can't set position pointer in file '%s'"
msgstr "Kann Positionszeiger in Datei »%s« nicht setzen"
-#: ../libsvn_subr/io.c:2875
+#: ../libsvn_subr/io.c:3415
#, c-format
msgid "Can't set position pointer in stream"
msgstr "Kann Positionszeiger in Datenstrom nicht setzen"
-#: ../libsvn_subr/io.c:2886 ../libsvn_subr/io.c:2920
+#: ../libsvn_subr/io.c:3426 ../libsvn_subr/io.c:3473
#, c-format
msgid "Can't write to file '%s'"
msgstr "Kann nicht in Datei »%s« schreiben"
-#: ../libsvn_subr/io.c:2887 ../libsvn_subr/io.c:2921
+#: ../libsvn_subr/io.c:3427 ../libsvn_subr/io.c:3474
#, c-format
msgid "Can't write to stream"
msgstr "Kann nicht in Datenstrom schreiben"
-#: ../libsvn_subr/io.c:2956
+#: ../libsvn_subr/io.c:3516
#, c-format
msgid "Can't truncate file '%s'"
msgstr "Kann Datei »%s« nicht abschneiden"
-#: ../libsvn_subr/io.c:2957
+#: ../libsvn_subr/io.c:3517
#, c-format
msgid "Can't truncate stream"
msgstr "Kann Datenstrom nicht abschneiden"
-#: ../libsvn_subr/io.c:2997
+#: ../libsvn_subr/io.c:3590
#, c-format
msgid "Can't read length line in file '%s'"
msgstr "Kann Längenzeile nicht aus Datei »%s« lesen"
-#: ../libsvn_subr/io.c:3001
+#: ../libsvn_subr/io.c:3594
msgid "Can't read length line in stream"
msgstr "Kann Längenzeile nicht aus Datenstrom lesen"
-#: ../libsvn_subr/io.c:3020 ../svn/util.c:421 ../svn/util.c:436
-#: ../svn/util.c:460
-#, c-format
-msgid "Can't stat '%s'"
-msgstr "Kann Status von »%s« nicht ermitteln"
-
-#: ../libsvn_subr/io.c:3055
+#: ../libsvn_subr/io.c:3651
#, c-format
msgid "Can't move '%s' to '%s'"
msgstr "Kann »%s« nicht nach »%s« verschieben"
-#: ../libsvn_subr/io.c:3136
+#: ../libsvn_subr/io.c:3732
#, c-format
msgid "Can't create directory '%s'"
msgstr "Kann Verzeichnis »%s« nicht anlegen"
-#: ../libsvn_subr/io.c:3147
+#: ../libsvn_subr/io.c:3755
#, c-format
msgid "Can't hide directory '%s'"
msgstr "Kann Verzeichnis »%s« nicht verstecken"
-#: ../libsvn_subr/io.c:3207 ../libsvn_subr/io.c:3323
+#: ../libsvn_subr/io.c:3815 ../libsvn_subr/io.c:3938
#, c-format
msgid "Can't open directory '%s'"
msgstr "Kann Verzeichnis »%s« nicht öffnen"
-#: ../libsvn_subr/io.c:3247
+#: ../libsvn_subr/io.c:3850
#, c-format
msgid "Can't remove directory '%s'"
msgstr "Kann Verzeichnis »%s« nicht entfernen"
-#: ../libsvn_subr/io.c:3265
+#: ../libsvn_subr/io.c:3868
#, c-format
msgid "Can't read directory"
msgstr "Kann Verzeichnis nicht lesen"
-#: ../libsvn_subr/io.c:3342
+#: ../libsvn_subr/io.c:3888
+#, c-format
+msgid "Error closing directory"
+msgstr "Fehler beim Schließen eines Verzeichnisses"
+
+#: ../libsvn_subr/io.c:3957
#, c-format
msgid "Can't read directory entry in '%s'"
msgstr "Kann Verzeichniseintrag in »%s« nicht lesen"
-#: ../libsvn_subr/io.c:3468
+#: ../libsvn_subr/io.c:4083
#, c-format
msgid "Can't check directory '%s'"
msgstr "Kann Verzeichnis »%s« nicht prüfen"
-#: ../libsvn_subr/io.c:3530
+#: ../libsvn_subr/io.c:4145
#, c-format
msgid "Reading '%s'"
msgstr "Lese »%s«"
-#: ../libsvn_subr/io.c:3549
+#: ../libsvn_subr/io.c:4164
#, c-format
msgid "First line of '%s' contains non-digit"
msgstr "Die erste Zeile von »%s« enthält eine Nicht-Ziffer"
-#: ../libsvn_subr/io.c:3690
+#: ../libsvn_subr/io.c:4479
#, c-format
msgid "Can't create temporary file from template '%s'"
msgstr "Kann temporäre Datei von Vorlage »%s« nicht anlegen"
-#: ../libsvn_subr/io.c:3781
+#: ../libsvn_subr/io.c:4568
#, c-format
msgid "Can't set aside '%s'"
msgstr "Kann »%s« nicht beiseitelegen"
-#: ../libsvn_subr/io.c:3793
+#: ../libsvn_subr/io.c:4580
#, c-format
msgid "Unable to make name in '%s'"
msgstr "Kann Namen in »%s« nicht erstellen"
-#: ../libsvn_subr/kitchensink.c:46
-#, c-format
-msgid "Invalid revision number found parsing '%s'"
-msgstr "Ungültige Revisionsnummer beim Einlesen von »%s« gefunden"
-
-#: ../libsvn_subr/kitchensink.c:58
-#, c-format
-msgid "Negative revision number found parsing '%s'"
-msgstr "Negative Revisionsnummer beim Einlesen von »%s« gefunden"
-
-#: ../libsvn_subr/mergeinfo.c:96 ../libsvn_subr/mergeinfo.c:599
+#: ../libsvn_subr/mergeinfo.c:100 ../libsvn_subr/mergeinfo.c:677
msgid "Pathname not terminated by ':'"
msgstr "Pfadnamen sind nicht durch »:« getrennt"
-#: ../libsvn_subr/mergeinfo.c:99
+#: ../libsvn_subr/mergeinfo.c:103
msgid "No pathname preceding ':'"
msgstr "Vor »:« steht kein Pfadname"
-#: ../libsvn_subr/mergeinfo.c:490
-#, c-format
-msgid "Mergeinfo for '%s' maps to an empty revision range"
-msgstr "Zusammenführungsinformationen für »%s« verweisen auf einen leeren Revisionsbereich"
-
-#: ../libsvn_subr/mergeinfo.c:504
+#: ../libsvn_subr/mergeinfo.c:521
#, c-format
msgid "Invalid character '%c' found in revision list"
msgstr "Ungültiges Zeichen »%c« in Revisionsliste gefunden"
-#: ../libsvn_subr/mergeinfo.c:512
+#: ../libsvn_subr/mergeinfo.c:529
#, c-format
msgid "Invalid revision number '0' found in range list"
msgstr "Ungültige Revisionsnummer '0' in Revisionsbereichsliste gefunden"
-#: ../libsvn_subr/mergeinfo.c:523
+#: ../libsvn_subr/mergeinfo.c:540
#, c-format
msgid "Unable to parse reversed revision range '%ld-%ld'"
msgstr "Rückwärtiger Revisionsbereich »%ld-%ld« kann nicht verarbeitet werden"
-#: ../libsvn_subr/mergeinfo.c:528
+#: ../libsvn_subr/mergeinfo.c:545
#, c-format
msgid "Unable to parse revision range '%ld-%ld' with same start and end revisions"
msgstr "Revisionbereich »%ld-%ld« mit selber Start- und Endrevision kann nicht verarbeitet werden"
-#: ../libsvn_subr/mergeinfo.c:565 ../libsvn_subr/mergeinfo.c:572
+#: ../libsvn_subr/mergeinfo.c:582 ../libsvn_subr/mergeinfo.c:589
#, c-format
msgid "Invalid character '%c' found in range list"
msgstr "Ungültiges Zeichen »%c« in der Bereichsliste gefunden"
-#: ../libsvn_subr/mergeinfo.c:579
+#: ../libsvn_subr/mergeinfo.c:596
msgid "Range list parsing ended before hitting newline"
msgstr "Einlesen der Bereichsliste endete vor dem Zeilenumbruch"
-#: ../libsvn_subr/mergeinfo.c:607
-#, c-format
-msgid "Could not find end of line in range list line in '%s'"
-msgstr "Konnte Zeilenende in Bereichslistenzeile in »%s« nicht finden"
-
-#: ../libsvn_subr/mergeinfo.c:638
+#: ../libsvn_subr/mergeinfo.c:637
#, c-format
msgid "Unable to parse overlapping revision ranges '%s' and '%s' with different inheritance types"
msgstr "Überlappende Revisionsbereiche »%s« und »%s« mit verschiedenen Vererbungstypen können nicht verarbeitet werden"
-#: ../libsvn_subr/mergeinfo.c:702
+#: ../libsvn_subr/mergeinfo.c:685
+#, c-format
+msgid "Mergeinfo for '%s' maps to an empty revision range"
+msgstr "Zusammenführungsinformationen für »%s« verweisen auf einen leeren Revisionsbereich"
+
+#: ../libsvn_subr/mergeinfo.c:689
+#, c-format
+msgid "Could not find end of line in range list line in '%s'"
+msgstr "Konnte Zeilenende in Bereichslistenzeile in »%s« nicht finden"
+
+#: ../libsvn_subr/mergeinfo.c:753
#, c-format
msgid "Could not parse mergeinfo string '%s'"
msgstr "Konnte Zusammenführungsinformationszeichenkette »%s« nicht einlesen"
-#: ../libsvn_subr/mergeinfo.c:1922
+#: ../libsvn_subr/mergeinfo.c:2301
msgid "NULL mergeinfo catalog\n"
msgstr "Zusammenführungsinformationskatalog ist NULL\n"
-#: ../libsvn_subr/mergeinfo.c:1927
+#: ../libsvn_subr/mergeinfo.c:2306
msgid "empty mergeinfo catalog\n"
msgstr "Zusammenführungsinformationskatalog ist leer\n"
-#: ../libsvn_subr/mergeinfo.c:1960
-msgid "NULL mergeinfo\n"
-msgstr "Zusammenführungsinformationen sind NULL\n"
+#: ../libsvn_subr/mutex.c:45
+#, c-format
+msgid "Can't create mutex"
+msgstr "Kann Mutex nicht erzeugen"
+
+#: ../libsvn_subr/mutex.c:62
+#, c-format
+msgid "Can't lock mutex"
+msgstr "Kann Mutex nicht sperren"
+
+#: ../libsvn_subr/mutex.c:78
+#, c-format
+msgid "Can't unlock mutex"
+msgstr "Kann Mutex nicht entsperren"
+
+#: ../libsvn_subr/named_atomic.c:335
+msgid "Not a valid atomic"
+msgstr "Kein gültiges »atomic«"
+
+#: ../libsvn_subr/named_atomic.c:474
+#, c-format
+msgid "MMAP failed for file '%s'"
+msgstr "MMAP für Datei »%s« schlug fehl"
+
+#: ../libsvn_subr/named_atomic.c:486
+msgid "Number of atomics in namespace is too large."
+msgstr "Zahl der »atomic«-Elemente im Namenraum ist zu groß"
-#: ../libsvn_subr/mergeinfo.c:1965
-msgid "empty mergeinfo\n"
-msgstr "Zusammenführungsinformationen sind leer\n"
+#: ../libsvn_subr/named_atomic.c:537
+msgid "Atomic's name is too long."
+msgstr "Name des »atomic« ist zu lang"
-#: ../libsvn_subr/nls.c:90
+#: ../libsvn_subr/named_atomic.c:543
+msgid "Namespace has not been initialized."
+msgstr "Namensraum wurde noch nicht initialisiert"
+
+#: ../libsvn_subr/named_atomic.c:591
+msgid "Out of slots for named atomic."
+msgstr "Keine freien Plätze für benanntes »atomic« mehr übrig"
+
+#: ../libsvn_subr/nls.c:80
#, c-format
msgid "Can't convert string to UCS-2: '%s'"
msgstr "Kann Zeichenkette nicht in UCS-2 konvertieren: »%s«"
-#: ../libsvn_subr/nls.c:97
+#: ../libsvn_subr/nls.c:87
msgid "Can't get module file name"
msgstr "Kann Namen der Moduldatei nicht ermitteln"
-#: ../libsvn_subr/nls.c:112
+#: ../libsvn_subr/nls.c:102
#, c-format
msgid "Can't convert module path to UTF-8 from UCS-2: '%s'"
msgstr "Kann Modulpfad nicht von UTF-8 in UCS-2 konvertieren: »%s«"
-#: ../libsvn_subr/opt.c:187
+#: ../libsvn_subr/opt.c:189
msgid " ARG"
msgstr " PAR"
-#: ../libsvn_subr/opt.c:322
+#: ../libsvn_subr/opt.c:324
msgid ""
"\n"
"Global options:\n"
@@ -5762,92 +6427,126 @@ msgstr ""
"\n"
"Globale Optionen:\n"
-#: ../libsvn_subr/opt.c:770
+#: ../libsvn_subr/opt.c:818
+#, c-format
+msgid "Syntax error parsing peg revision '%s'; did you mean '%s@'?"
+msgstr "Syntaxfehler bei der Analyse der Fix-Revision »%s«; Meinten Sie '%s@'?"
+
+#: ../libsvn_subr/opt.c:824
#, c-format
-msgid "Syntax error parsing revision '%s'"
-msgstr "Syntaxfehler bei der Analyse der Revision »%s«"
+msgid "Syntax error parsing peg revision '%s'"
+msgstr "Syntaxfehler bei der Analyse der Fix-Revision »%s«"
-#: ../libsvn_subr/opt.c:907
+#: ../libsvn_subr/opt.c:961
msgid "Revision property pair is empty"
msgstr "Revisionseigenschaftspaar ist leer"
-#: ../libsvn_subr/opt.c:927 ../svn/propedit-cmd.c:87 ../svn/propget-cmd.c:207
+#: ../libsvn_subr/opt.c:981 ../svn/propedit-cmd.c:87 ../svn/propget-cmd.c:336
#: ../svn/propset-cmd.c:68
#, c-format
msgid "'%s' is not a valid Subversion property name"
msgstr "»%s« ist kein gültiger Subversion-Eigenschaftsname"
-#: ../libsvn_subr/opt.c:964
+#: ../libsvn_subr/opt.c:1018
#, c-format
msgid "'%s' is just a peg revision. Maybe try '%s@' instead?"
-msgstr ""
+msgstr "»%s« ist nur eine Fix-Revision. Meinten Sie stattdessen »%s@«?"
-#: ../libsvn_subr/opt.c:996
+#: ../libsvn_subr/opt.c:1064
#, c-format
msgid "URL '%s' contains a '..' element"
msgstr "URL »%s« enthält ein »..« Element"
-#: ../libsvn_subr/opt.c:1029
+#: ../libsvn_subr/opt.c:1097
#, c-format
msgid "Error resolving case of '%s'"
msgstr "Fehler beim Ermitteln der Groß-/Kleinschreibung von »%s«"
-# FIXME: Datum ist nicht übersetzbar (Aug 3 2006 statt 3. August 2006)
-#: ../libsvn_subr/opt.c:1048
+#: ../libsvn_subr/opt.c:1119
#, c-format
msgid ""
"%s, version %s\n"
-" compiled %s, %s\n"
+" compiled %s, %s on %s\n"
"\n"
msgstr ""
"%s, Version %s\n"
-" übersetzt %s, %s\n"
+" übersetzt am %s, um %s auf %s\n"
"\n"
-#: ../libsvn_subr/opt.c:1051
+#: ../libsvn_subr/opt.c:1136
msgid ""
-"Copyright (C) 2010 The Apache Software Foundation.\n"
-"This software consists of contributions made by many people;\n"
-"see the NOTICE file for more information.\n"
-"Subversion is open source software, see http://subversion.apache.org/\n"
+"System information:\n"
"\n"
msgstr ""
+"Systeminformationen:\n"
+"\n"
-#: ../libsvn_subr/path.c:958
+#: ../libsvn_subr/opt.c:1137
+#, c-format
+msgid "* running on %s\n"
+msgstr "* ausgeführt auf %s\n"
+
+#: ../libsvn_subr/opt.c:1141
+#, c-format
+msgid " - %s\n"
+msgstr " - %s\n"
+
+#: ../libsvn_subr/opt.c:1151
+msgid "* linked dependencies:\n"
+msgstr "* eingebundene Abhändigleiten:\n"
+
+#: ../libsvn_subr/opt.c:1176
+msgid "* loaded shared libraries:\n"
+msgstr "* geladene dynamische Bibliotheken:\n"
+
+#: ../libsvn_subr/path.c:1114
#, c-format
msgid "Can't determine the native path encoding"
msgstr "Kann die Zeichencodierung des Pfades nicht ermitteln"
-#: ../libsvn_subr/path.c:1068
+#: ../libsvn_subr/path.c:1303
#, c-format
-msgid "Invalid control character '0x%02x' in path '%s'"
-msgstr "Ungültiges Steuerzeichen »0x%02x« in Pfad »%s«"
+msgid "Improper relative URL '%s'"
+msgstr "Fehlerhafte relative URL »%s«"
+
+#: ../libsvn_subr/prompt.c:147
+msgid "Can't close terminal"
+msgstr "Kann Terminal nicht schließen"
+
+#: ../libsvn_subr/prompt.c:200
+#, c-format
+msgid "Can't open stderr"
+msgstr "Kann Standardfehlerausgabe nicht öffnen"
-#: ../libsvn_subr/prompt.c:120 ../libsvn_subr/prompt.c:124
+#: ../libsvn_subr/prompt.c:263
#, c-format
-msgid "Can't read stdin"
-msgstr "Kann nicht aus Standardeingabe lesen"
+msgid "Can't write to terminal"
+msgstr "Kann nicht auf das Terminal schreiben"
-#: ../libsvn_subr/prompt.c:183
+#: ../libsvn_subr/prompt.c:385 ../libsvn_subr/prompt.c:472
+#, c-format
+msgid "Can't read from terminal"
+msgstr "Kann nicht vom Terminal lesen"
+
+#: ../libsvn_subr/prompt.c:540
+msgid "End of file while reading from terminal"
+msgstr "Dateiende während des Lesens vom Terminal"
+
+#: ../libsvn_subr/prompt.c:602
#, c-format
msgid "Authentication realm: %s\n"
msgstr "Anmeldebereich: %s\n"
-#: ../libsvn_subr/prompt.c:209 ../libsvn_subr/prompt.c:232
+#: ../libsvn_subr/prompt.c:629 ../libsvn_subr/prompt.c:652
msgid "Username: "
msgstr "Benutzername: "
-#: ../libsvn_subr/prompt.c:211
-#, c-format
-msgid "Password for '%s': "
-msgstr "Passwort für »%s«: "
-
-#: ../libsvn_subr/prompt.c:254
+#: ../libsvn_subr/prompt.c:674
#, c-format
msgid "Error validating server certificate for '%s':\n"
msgstr "Fehler bei der Validierung des Serverzertifikats für »%s«:\n"
-#: ../libsvn_subr/prompt.c:260
+#: ../libsvn_subr/prompt.c:680
msgid ""
" - The certificate is not issued by a trusted authority. Use the\n"
" fingerprint to validate the certificate manually!\n"
@@ -5855,23 +6554,23 @@ msgstr ""
" - Das Zertifikat ist nicht von einer vertrauenswürdigen Instanz ausgestellt\n"
" Überprüfen Sie den Fingerabdruck, um das Zertifikat zu validieren!\n"
-#: ../libsvn_subr/prompt.c:267
+#: ../libsvn_subr/prompt.c:687
msgid " - The certificate hostname does not match.\n"
msgstr " - Der Hostname des Zertifikats stimmt nicht überein.\n"
-#: ../libsvn_subr/prompt.c:273
+#: ../libsvn_subr/prompt.c:693
msgid " - The certificate is not yet valid.\n"
msgstr " - Das Zertifikat ist noch nicht gültig.\n"
-#: ../libsvn_subr/prompt.c:279
+#: ../libsvn_subr/prompt.c:699
msgid " - The certificate has expired.\n"
msgstr " - Das Zertifikat ist abgelaufen.\n"
-#: ../libsvn_subr/prompt.c:285
+#: ../libsvn_subr/prompt.c:705
msgid " - The certificate has an unknown error.\n"
msgstr " - Das Zertifikat hat einen unbekannten Fehler.\n"
-#: ../libsvn_subr/prompt.c:290
+#: ../libsvn_subr/prompt.c:710
#, c-format
msgid ""
"Certificate information:\n"
@@ -5886,40 +6585,48 @@ msgstr ""
" - Aussteller: %s\n"
" - Fingerabdruck: %s\n"
-#: ../libsvn_subr/prompt.c:305
+#: ../libsvn_subr/prompt.c:725
msgid "(R)eject, accept (t)emporarily or accept (p)ermanently? "
msgstr "Ve(r)werfen, (t)emporär akzeptieren oder (p)ermanent akzeptieren? "
-#: ../libsvn_subr/prompt.c:309
+#: ../libsvn_subr/prompt.c:729
msgid "(R)eject or accept (t)emporarily? "
msgstr "Ve(r)werfen oder (t)emporär akzeptieren? "
-#: ../libsvn_subr/prompt.c:349
+#: ../libsvn_subr/prompt.c:769
msgid "Client certificate filename: "
msgstr "Client Zertifikatsdatei: "
-#: ../libsvn_subr/prompt.c:373
+#: ../libsvn_subr/prompt.c:793
#, c-format
msgid "Passphrase for '%s': "
msgstr "Passphrase für »%s«: "
-#: ../libsvn_subr/prompt.c:421
+#: ../libsvn_subr/prompt.c:845
msgid "yes"
msgstr "ja"
-#: ../libsvn_subr/prompt.c:426
+#: ../libsvn_subr/prompt.c:846
+msgid "y"
+msgstr "j"
+
+#: ../libsvn_subr/prompt.c:851
msgid "no"
msgstr "nein"
-#: ../libsvn_subr/prompt.c:432
+#: ../libsvn_subr/prompt.c:852
+msgid "n"
+msgstr "n"
+
+#: ../libsvn_subr/prompt.c:858
msgid "Please type 'yes' or 'no': "
msgstr "Bitte geben Sie »ja« oder »nein« ein: "
-#: ../libsvn_subr/prompt.c:446
+#: ../libsvn_subr/prompt.c:872
msgid "Store password unencrypted (yes/no)? "
msgstr "Passwort unverschlüsselt speichern (ja/nein)? "
-#: ../libsvn_subr/prompt.c:448
+#: ../libsvn_subr/prompt.c:874
#, c-format
msgid ""
"\n"
@@ -5954,11 +6661,11 @@ msgstr ""
"entweder auf »yes« oder »no« setzen.\n"
"-----------------------------------------------------------------------\n"
-#: ../libsvn_subr/prompt.c:475
+#: ../libsvn_subr/prompt.c:901
msgid "Store passphrase unencrypted (yes/no)? "
msgstr "Passphrase unverschlüsselt speichern (ja/nein)? "
-#: ../libsvn_subr/prompt.c:477
+#: ../libsvn_subr/prompt.c:903
#, c-format
msgid ""
"\n"
@@ -5993,80 +6700,78 @@ msgstr ""
"entweder auf »yes« oder »no« setzen.\n"
"-----------------------------------------------------------------------\n"
-#: ../libsvn_subr/prompt.c:523
+#: ../libsvn_subr/prompt.c:949
#, c-format
msgid "Password for '%s' GNOME keyring: "
msgstr "Passwort für GNOME-Schlüsselring »%s«: "
-#: ../libsvn_subr/simple_providers.c:446
+#: ../libsvn_subr/simple_providers.c:449
#: ../libsvn_subr/ssl_client_cert_pw_providers.c:296
#, c-format
msgid "Config error: invalid value '%s' for option '%s'"
msgstr "Konfigurationsfehler: Ungültiger Wert »%s« für Option »%s«"
-#: ../libsvn_subr/sqlite.c:183
-msgid "Expected database row missing"
-msgstr "Erwartete Zeile der Datenbank fehlt"
+#: ../libsvn_subr/sqlite.c:176
+#, c-format
+msgid "sqlite[S%d]: %s, executing statement '%s'"
+msgstr "sqlite[S%d]: %s, Ausgeführte Anweisung '%s'"
-#: ../libsvn_subr/sqlite.c:184
-msgid "Extra database row found"
-msgstr "Zusätzliche Zeile der Datenbank wurde gefunden"
+#: ../libsvn_subr/sqlite.c:265
+msgid "sqlite: Expected database row missing"
+msgstr "sqlite: Erwartete Zeile in der Datenbank fehlt"
-#: ../libsvn_subr/sqlite.c:693
-#, c-format
-msgid "Schema format %d not recognized"
-msgstr "Schema-Format %d wird nicht erkannt"
+#: ../libsvn_subr/sqlite.c:266
+msgid "sqlite: Extra database row found"
+msgstr "sqlite: Zusätzliche Zeile der Datenbank wurde gefunden"
-#: ../libsvn_subr/sqlite.c:709
+#: ../libsvn_subr/sqlite.c:726
#, c-format
msgid "SQLite compiled for %s, but running with %s"
msgstr "SQLite wurde für %s kompiliert, läuft aber mit %s"
-#: ../libsvn_subr/sqlite.c:721
+#: ../libsvn_subr/sqlite.c:738
msgid "SQLite is required to be compiled and run in thread-safe mode"
msgstr "Es wird erwartet, dass SQLite im Thread-sicheren Modus kompiliert und gestartet wird"
-#: ../libsvn_subr/sqlite.c:731
-msgid "Could not configure SQLite"
-msgstr "Konnte SQLite nicht konfigurieren"
+#: ../libsvn_subr/sqlite.c:747
+#, c-format
+msgid "Could not configure SQLite [S%d]"
+msgstr "Konnte SQLite nicht konfigurieren [S%d]"
-#: ../libsvn_subr/sqlite.c:733
+#: ../libsvn_subr/sqlite.c:749
msgid "Could not initialize SQLite"
msgstr "Konnte SQLite nicht initialisieren"
-#: ../libsvn_subr/sqlite.c:742
-msgid "Could not initialize SQLite shared cache"
-msgstr "Konnte den gemeinsam genutzten SQLite-Zwischenspeicher nicht initialisieren"
-
-#: ../libsvn_subr/sqlite.c:812
+#: ../libsvn_subr/sqlite.c:1219
#, c-format
-msgid "Expected SQLite database not found: %s"
-msgstr "Erwartete SQLite-Datenbank wurde nicht gefunden: %s"
+msgid "SQLite hotcopy failed for %s"
+msgstr "SQLite-Hotcopy fehlgeschlagen für »%s«"
-#: ../libsvn_subr/sqlite.c:1125
+#: ../libsvn_subr/string.c:943 ../libsvn_subr/string.c:987
#, c-format
-msgid "SQLite hotcopy failed for %s"
-msgstr ""
+msgid "Could not convert '%s' into a number"
+msgstr "Konnte »%s« nicht in Zahl umwandeln"
-#: ../libsvn_subr/subst.c:1640 ../libsvn_wc/props.c:1950
+#: ../libsvn_subr/subst.c:1803 ../libsvn_wc/props.c:1660
#, c-format
msgid "File '%s' has inconsistent newlines"
msgstr "Datei »%s« hat inkonsistente Zeilenenden"
-#: ../libsvn_subr/svn_string.c:706 ../libsvn_subr/svn_string.c:750
-#, c-format
-msgid "Could not convert '%s' into a number"
-msgstr "Konnte »%s« nicht in Zahl umwandeln"
+#: ../libsvn_subr/sysinfo.c:1106
+msgid "Intel"
+msgstr "Intel"
-#: ../libsvn_subr/svn_string.c:712
-#, c-format
-msgid "Number '%s' is out of range '[%llu, %llu]'"
-msgstr ""
+#: ../libsvn_subr/sysinfo.c:1107
+msgid "Intel 64-bit"
+msgstr "Intel 64 Bit"
-#: ../libsvn_subr/svn_string.c:756
-#, c-format
-msgid "Number '%s' is out of range '[%lld, %lld]'"
-msgstr ""
+#: ../libsvn_subr/sysinfo.c:1108
+msgid "PowerPC"
+msgstr "PowerPC"
+
+#: ../libsvn_subr/sysinfo.c:1109
+msgid "PowerPC 64-bit"
+msgstr "PowerPC 64 Bit"
#. Human explanatory part, generated by apr_strftime as "Sat, 01 Jan 2000"
#: ../libsvn_subr/time.c:85
@@ -6078,55 +6783,57 @@ msgstr " (%a, %d. %b %Y)"
msgid "Token '%s' is unrecognized"
msgstr "Marke »%s« nicht erkannt"
-#: ../libsvn_subr/utf.c:190
-msgid "Can't lock charset translation mutex"
-msgstr "Kann das Semaphor zur Zeichensatzkonvertierung nicht sperren"
+#: ../libsvn_subr/types.c:48
+#, c-format
+msgid "Invalid revision number found parsing '%s'"
+msgstr "Ungültige Revisionsnummer beim Einlesen von »%s« gefunden"
-#: ../libsvn_subr/utf.c:208 ../libsvn_subr/utf.c:304
-msgid "Can't unlock charset translation mutex"
-msgstr "Kann das Semaphor zur Zeichensatzkonvertierung nicht freigeben"
+#: ../libsvn_subr/types.c:60
+#, c-format
+msgid "Negative revision number found parsing '%s'"
+msgstr "Negative Revisionsnummer beim Einlesen von »%s« gefunden"
-#: ../libsvn_subr/utf.c:262
+#: ../libsvn_subr/utf.c:245
#, c-format
msgid "Can't create a character converter from native encoding to '%s'"
msgstr "Kann keinen Zeichenkonverter von der eigenen Codierung nach »%s« erzeugen"
-#: ../libsvn_subr/utf.c:266
+#: ../libsvn_subr/utf.c:249
#, c-format
msgid "Can't create a character converter from '%s' to native encoding"
msgstr "Kann keinen Zeichenkonverter von »%s« in die eigene Kodierung erzeugen"
-#: ../libsvn_subr/utf.c:270
+#: ../libsvn_subr/utf.c:253
#, c-format
msgid "Can't create a character converter from '%s' to '%s'"
msgstr "Kann keinen Zeichenkonverter von »%s« nach »%s« erzeugen"
-#: ../libsvn_subr/utf.c:499
+#: ../libsvn_subr/utf.c:601
#, c-format
msgid "Can't convert string from native encoding to '%s':"
msgstr "Kann Zeichenkette nicht von der eigenen Codierung nach »%s« konvertieren:"
-#: ../libsvn_subr/utf.c:503
+#: ../libsvn_subr/utf.c:605
#, c-format
msgid "Can't convert string from '%s' to native encoding:"
msgstr "Kann Zeichenkette nicht von »%s« in die eigene Codierung konvertieren:"
-#: ../libsvn_subr/utf.c:507
+#: ../libsvn_subr/utf.c:609
#, c-format
msgid "Can't convert string from '%s' to '%s':"
msgstr "Kann Zeichenkette nicht von »%s« nach »%s« konvertieren:"
-#: ../libsvn_subr/utf.c:552
+#: ../libsvn_subr/utf.c:654
#, c-format
msgid "Safe data '%s' was followed by non-ASCII byte %d: unable to convert to/from UTF-8"
msgstr "Auf sichere Daten »%s« folgte ein nicht-ASCII Byte %d, das nicht von/nach UTF-8 konvertiert werden konnte"
-#: ../libsvn_subr/utf.c:560
+#: ../libsvn_subr/utf.c:662
#, c-format
msgid "Non-ASCII character (code %d) detected, and unable to convert to/from UTF-8"
msgstr "Ein Nicht-ASCII Zeichen (Kode %d) wurde gefunden, das nicht von/nach UTF-8 konvertiert werden konnte"
-#: ../libsvn_subr/utf.c:605
+#: ../libsvn_subr/utf.c:707
#, c-format
msgid ""
"Valid UTF-8 data\n"
@@ -6139,27 +6846,59 @@ msgstr ""
"folgte eine ungültige UTF-8-Sequenz\n"
"(hex:%s)"
-#: ../libsvn_subr/validate.c:55
+#: ../libsvn_subr/validate.c:56
#, c-format
msgid "MIME type '%s' has empty media type"
msgstr "MIME-Typ »%s« hat einen leeren Medientyp"
-#: ../libsvn_subr/validate.c:60
+#: ../libsvn_subr/validate.c:61
#, c-format
msgid "MIME type '%s' does not contain '/'"
msgstr "MIME-Typ »%s« enthält keinen »/«"
-#: ../libsvn_subr/validate.c:72
+#: ../libsvn_subr/validate.c:73
#, c-format
-msgid "MIME type '%s' contains invalid character '%c'"
-msgstr "MIME-Typ »%s« enthält ein ungültiges Zeichen »%c«"
+msgid "MIME type '%s' contains invalid character '%c' in media type"
+msgstr "MIME-Typ »%s« enthält ein ungültiges Zeichen »%c« im Medientyp"
+
+#: ../libsvn_subr/validate.c:84
+#, c-format
+msgid "MIME type '%s' contains invalid character '0x%02x' in postfix"
+msgstr "MIME-Typ »%s« enthält ein ungültiges Zeichen »0x%02x« im Postfix"
+
+#: ../libsvn_subr/version.c:91
+#, c-format
+msgid "Version mismatch in '%s'%s: found %d.%d.%d%s, expected %d.%d.%d%s"
+msgstr "Versionskonflikt in »%s«%s: gefunden %d.%d.%d%s, erwartet %d.%d.%d%s"
+
+#: ../libsvn_subr/version.c:96
+msgid " (expecting equality)"
+msgstr " (Ãœbereinstimmung erwartet)"
+
+#: ../libsvn_subr/version.c:98
+msgid " (expecting compatibility)"
+msgstr " (Kompatibilität erwartet)"
+
+#: ../libsvn_subr/version.c:139
+msgid ""
+"Copyright (C) 2014 The Apache Software Foundation.\n"
+"This software consists of contributions made by many people;\n"
+"see the NOTICE file for more information.\n"
+"Subversion is open source software, see http://subversion.apache.org/\n"
+msgstr ""
+"Copyright (C) 2014 The Apache Software Foundation.\n"
+"Diese Software besteht aus Beiträgen vieler Personen;\n"
+"siehe Datei NOTICE für weitere Informationen.\n"
+"Subversion ist Open Source Software, siehe http://subversion.apache.org/\n"
-#: ../libsvn_subr/version.c:87
+#: ../libsvn_subr/version.c:217 ../libsvn_subr/version.c:228
+#: ../libsvn_subr/version.c:234 ../libsvn_subr/version.c:251
+#: ../libsvn_subr/version.c:258
#, c-format
-msgid "Version mismatch in '%s': found %d.%d.%d%s, expected %d.%d.%d%s"
-msgstr "Version von »%s« ist unerwartet: gefunden %d.%d.%d%s, erwartet %d.%d.%d%s"
+msgid "Failed to parse version number string '%s'"
+msgstr "Konnte Zeichenkette mit Versionsnummer »%s« nicht verarbeiten"
-#: ../libsvn_subr/xml.c:415
+#: ../libsvn_subr/xml.c:416
#, c-format
msgid "Malformed XML: %s at line %ld"
msgstr "Fehlerhaftes XML: %s in Zeile %ld"
@@ -6169,32 +6908,26 @@ msgstr "Fehlerhaftes XML: %s in Zeile %ld"
msgid "The existing node '%s' can not be restored."
msgstr "Der vorhandene Knoten »%s« kann nicht wiederhergestellt werden."
-#: ../libsvn_wc/adm_crawler.c:141
+#: ../libsvn_wc/adm_crawler.c:133
#, c-format
msgid "The node '%s' can not be restored."
msgstr "Der Knoten »%s« kann nicht wiederhergestellt werden."
-#: ../libsvn_wc/adm_crawler.c:724
-#, c-format
-msgid "Can't retrieve base revision for %s"
-msgstr "Kann Basisrevision für »%s« nicht abfragen"
-
-#: ../libsvn_wc/adm_crawler.c:999
+#: ../libsvn_wc/adm_crawler.c:851
msgid "Error aborting report"
msgstr "Fehler beim Abbrechen des Reports"
-#: ../libsvn_wc/adm_crawler.c:1274
+#: ../libsvn_wc/adm_crawler.c:963
#, c-format
-msgid ""
-"Checksum mismatch for text base of '%s':\n"
-" expected: %s\n"
-" actual: %s\n"
-msgstr ""
-"Prüfsummenfehler für Textbasis von »%s«:\n"
-" Erwartet: %s\n"
-" Tatsächlich: %s\n"
+msgid "Pristine checksum for file '%s' is missing"
+msgstr "Prüfsumme für ursprünglichen Inhalt der Datei »%s« fehlt"
+
+#: ../libsvn_wc/adm_crawler.c:1128
+#, c-format
+msgid "Checksum mismatch for text base of '%s'"
+msgstr "Prüfsummenfehler für Textbasis von »%s«"
-#: ../libsvn_wc/adm_crawler.c:1288
+#: ../libsvn_wc/adm_crawler.c:1139
#, c-format
msgid "While preparing '%s' for commit"
msgstr "Beim Vorbereiten von »%s« für die Übertragung"
@@ -6204,127 +6937,72 @@ msgstr "Beim Vorbereiten von »%s« für die Übertragung"
msgid "'%s' is not a valid administrative directory name"
msgstr "»%s« ist kein gültiger Verwaltungsverzeichnisname"
-#: ../libsvn_wc/adm_files.c:208
-#, c-format
-msgid "Node '%s' has no pristine text"
-msgstr "Knoten »%s« hat keinen Ursprungstext"
-
-#: ../libsvn_wc/adm_files.c:234
-#, c-format
-msgid "Node '%s' has no pristine base text"
-msgstr "Knoten »%s« hat keine ursprüngliche Textbasis"
-
-#: ../libsvn_wc/adm_files.c:259
-#, c-format
-msgid "File '%s' has no text base"
-msgstr "Datei »%s« hat keine Textbasis"
-
-#: ../libsvn_wc/adm_files.c:286
-#, c-format
-msgid "Base node of '%s' is not a file"
-msgstr "Basisknoten von »%s« ist keine Datei"
-
-#: ../libsvn_wc/adm_files.c:322
+#: ../libsvn_wc/adm_files.c:185 ../libsvn_wc/adm_files.c:241
#, c-format
msgid "Can only get the pristine contents of files; '%s' is not a file"
-msgstr ""
+msgstr "Kann nur ursprünglichen Inhalt von Dateien holen; »%s« ist keine Datei"
-#: ../libsvn_wc/adm_files.c:348
+#: ../libsvn_wc/adm_files.c:194 ../libsvn_wc/adm_files.c:256
#, c-format
msgid "Cannot get the pristine contents of '%s' because its delete is already committed"
-msgstr ""
+msgstr "Kann den ursprünglichen Inhalt von »%s« nicht holen, da sein Löschen schon übertragen wurde"
-#: ../libsvn_wc/adm_files.c:356
+#: ../libsvn_wc/adm_files.c:202 ../libsvn_wc/adm_files.c:264
#, c-format
msgid "Cannot get the pristine contents of '%s' because it has an unexpected status"
-msgstr ""
+msgstr "Kann den ursprünglichen Inhalt von »%s« nicht holen, da es einen unerwarteten Status hat"
-#: ../libsvn_wc/adm_files.c:639
+#: ../libsvn_wc/adm_files.c:209
#, c-format
-msgid "Revision %ld doesn't match existing revision %ld in '%s'"
-msgstr "Revision %ld passt nicht zur existierenden Revision %ld in »%s«"
+msgid "Node '%s' has no pristine text"
+msgstr "Knoten »%s« hat keinen Ursprungstext"
-#: ../libsvn_wc/adm_files.c:685
+#: ../libsvn_wc/adm_files.c:452
#, c-format
-msgid "URL '%s' doesn't match existing URL '%s' in '%s'"
-msgstr "URL »%s« stimmt nicht mit der existierenden URL »%s« in »%s« überein"
+msgid "Revision %ld doesn't match existing revision %ld in '%s'"
+msgstr "Revision %ld passt nicht zur existierenden Revision %ld in »%s«"
-#: ../libsvn_wc/adm_ops.c:625
+#: ../libsvn_wc/adm_files.c:489
#, c-format
-msgid "'%s' cannot be deleted"
-msgstr "»%s« kann nicht gelöscht werden"
+msgid "URL '%s' (uuid: '%s') doesn't match existing URL '%s' (uuid: '%s') in '%s'"
+msgstr "URL »%s« (UUID: »%s«) stimmt nicht mit der existierenden URL »%s« (UUID: »%s«) in »%s« überein"
-#: ../libsvn_wc/adm_ops.c:795 ../libsvn_wc/update_editor.c:5607
+#: ../libsvn_wc/adm_ops.c:602 ../libsvn_wc/update_editor.c:5281
#, c-format
msgid "Can't find parent directory's node while trying to add '%s'"
msgstr "Kann Knoten des Elternverzeichnisses während des Hinzufügens von »%s« nicht finden"
-#: ../libsvn_wc/adm_ops.c:804 ../libsvn_wc/update_editor.c:5601
+#: ../libsvn_wc/adm_ops.c:611 ../libsvn_wc/update_editor.c:5275
#, c-format
msgid "Can't add '%s' to a parent directory scheduled for deletion"
msgstr ""
"Kann »%s« nicht zu einem Elternverzeichnis hinzufügen, das selbst zum Löschen\n"
"vorgesehen ist"
-#: ../libsvn_wc/adm_ops.c:813 ../libsvn_wc/update_editor.c:5614
+#: ../libsvn_wc/adm_ops.c:618 ../libsvn_wc/update_editor.c:5288
#, c-format
msgid "Can't schedule an addition of '%s' below a not-directory node"
-msgstr ""
+msgstr "Kann »%s« nicht zum Hinzufügen unter einem Knoten vorsehen, der kein Verzeichnis ist"
-#: ../libsvn_wc/adm_ops.c:872
+#: ../libsvn_wc/adm_ops.c:677
#, c-format
msgid "Can't create an entry with a reserved name while trying to add '%s'"
msgstr "Kann einen Eintrag mit einem reservierten Namen nicht erzeugen, während versucht wird, »%s« hinzuzufügen"
-#: ../libsvn_wc/adm_ops.c:1050
+#: ../libsvn_wc/adm_ops.c:881
#, c-format
msgid "The URL '%s' has a different repository root than its parent"
msgstr "Die URL »%s« hat eine andere Projektarchiv-Basis als ihr Vorgänger"
-#: ../libsvn_wc/adm_ops.c:1068
+#: ../libsvn_wc/adm_ops.c:899
#, c-format
msgid "Can't schedule the working copy at '%s' from repository '%s' with uuid '%s' for addition under a working copy from repository '%s' with uuid '%s'."
-msgstr ""
+msgstr "Kann Arbeitkopie »%s« des Projektarchivs »%s« mit UUID »%s« nicht zum Hinzufügen unter einer Arbeitskopie des Projektarchivs »%s« mit UUID »%s« vorsehen."
-#: ../libsvn_wc/adm_ops.c:1082
+#: ../libsvn_wc/adm_ops.c:913
#, c-format
msgid "Can't add '%s' with URL '%s', but with the data from '%s'"
-msgstr ""
-
-#: ../libsvn_wc/adm_ops.c:1313
-#, c-format
-msgid "Can't revert '%s' with this depth, as that requires reverting '%s'."
-msgstr ""
-
-#: ../libsvn_wc/adm_ops.c:1414
-#, c-format
-msgid "Cannot revert unversioned item '%s'"
-msgstr "Nicht versioniertes Objekt »%s« kann nicht rückgängig gemacht werden"
-
-#: ../libsvn_wc/adm_ops.c:1445
-#, c-format
-msgid "Cannot revert '%s': unsupported entry node kind"
-msgstr "Kann »%s« nicht zurücksetzen: nicht unterstützter Eintragsknotentyp"
-
-#: ../libsvn_wc/adm_ops.c:1460
-#, c-format
-msgid "Cannot revert '%s': unsupported node kind in working copy"
-msgstr "Kann »%s« nicht zurücksetzen: nicht unterstützter Knotentyp in Arbeitskopie"
-
-#: ../libsvn_wc/adm_ops.c:1785
-#, c-format
-msgid "File '%s' has local modifications"
-msgstr "Die Datei »%s« hat lokale Änderungen"
-
-#: ../libsvn_wc/adm_ops.c:2087
-#, c-format
-msgid "'%s' is a directory, and thus cannot be a member of a changelist"
-msgstr "»%s« ist ein Verzeichnis and kann deswegen nicht Element einer Änderungsliste sein"
-
-#: ../libsvn_wc/adm_ops.c:2155
-#, c-format
-msgid "Can't add a file external to '%s' as it is not a file in repository '%s'."
-msgstr "Kann externen Dateiverweis auf »%s« nicht hinzufügen, da dies keine Datei im Projektarchiv »%s« ist."
+msgstr "Kann »%s« mit URL »%s« aber den Daten von »%s« nicht hinzufügen"
#: ../libsvn_wc/cleanup.c:58
#, c-format
@@ -6333,532 +7011,688 @@ msgstr "»%s« ist kein Verzeichnis einer Arbeitskopie"
#: ../libsvn_wc/cleanup.c:64
msgid "Log format too old, please use Subversion 1.6 or earlier"
-msgstr ""
+msgstr "Log-Format zu alt, bitte verwenden Sie Subversion 1.6 oder älter"
+
+#: ../libsvn_wc/conflicts.c:83
+msgid "Not a conflict skel"
+msgstr "Ungültiges Konfliktskeleton"
+
+#: ../libsvn_wc/conflicts.c:610 ../libsvn_wc/conflicts.c:707
+msgid "Not a completed conflict skel"
+msgstr "Kein vollständiges Konfliktskeleton"
+
+#: ../libsvn_wc/conflicts.c:788 ../libsvn_wc/conflicts.c:861
+#: ../libsvn_wc/conflicts.c:951
+msgid "Conflict not set"
+msgstr "Konflikt nicht gesetzt"
+
+# CHECKME: s/callback/hook/ ??
+#: ../libsvn_wc/conflicts.c:1438 ../libsvn_wc/conflicts.c:1790
+msgid "Conflict callback violated API: returned no results"
+msgstr "Konflikt-Aktion Rückruffunktion die API: keine Ergebnisse wurden zurückgeliefert"
-#: ../libsvn_wc/conflicts.c:299
+#: ../libsvn_wc/conflicts.c:1482
+msgid "Conflict callback violated API: returned no merged file"
+msgstr "Konflikt-Aktion verletzte die API: keine zusammengeführte Datei wurde zurückgeliefert"
+
+#: ../libsvn_wc/conflicts.c:2468 ../libsvn_wc/conflicts.c:2644
msgid "Invalid 'conflict_result' argument"
msgstr "Ungültiger Parameter »conflict_result«"
-#: ../libsvn_wc/conflicts.c:409
+#: ../libsvn_wc/conflicts.c:2767 ../libsvn_wc/conflicts.c:2807
#, c-format
-msgid "Tree conflicts can only be resolved to 'working' state; '%s' not resolved"
-msgstr ""
+msgid "Tree conflict can only be resolved to 'working' or 'mine-conflict' state; '%s' not resolved"
+msgstr "Baumkonflikt kann nur zum Zustand »working« oder »mine-conflict« aufgelöst werden; Konflikt in »%s« nicht aufgelöst"
+
+#: ../libsvn_wc/conflicts.c:2822
+#, c-format
+msgid "Tree conflict can only be resolved to 'working' state; '%s' not resolved"
+msgstr "Baumkonflikt kann nur zum Zustand »working« aufgelöst werden; Konflikt in »%s« nicht aufgelöst"
+
+#: ../libsvn_wc/conflicts.c:2924
+msgid "No conflict-callback and no pre-defined conflict-choice provided"
+msgstr "Keine Konflikt-Rückruffunktion oder Standard-Konfliktlösungsauswahl angegeben"
-#: ../libsvn_wc/copy.c:78
+#: ../libsvn_wc/copy.c:86
#, c-format
msgid "Source '%s' is unexpected kind"
msgstr "Quelle »%s« ist unbekannten Typs"
-#: ../libsvn_wc/copy.c:384
+#: ../libsvn_wc/copy.c:410
#, c-format
msgid "cannot handle node kind for '%s'"
msgstr "Kann Knotentyp für »%s« nicht verarbeiten"
-#: ../libsvn_wc/copy.c:648
+#: ../libsvn_wc/copy.c:432 ../libsvn_wc/wc_db.c:4507 ../libsvn_wc/wc_db.c:5082
+#, c-format
+msgid "Cannot handle status of '%s'"
+msgstr "Kann Status von »%s« nicht verarbeiten"
+
+#: ../libsvn_wc/copy.c:441 ../libsvn_wc/wc_db.c:4498 ../libsvn_wc/wc_db.c:5076
+#: ../libsvn_wc/wc_db.c:5321
+#, c-format
+msgid "Cannot copy '%s' excluded by server"
+msgstr "Kann vom Server ausgeschlossenes »%s« nicht kopieren"
+
+#: ../libsvn_wc/copy.c:578
+#, c-format
+msgid "Deleted node '%s' can't be copied."
+msgstr "Gelöschter Knoten »%s« kann nicht kopiert werden."
+
+#: ../libsvn_wc/copy.c:596
+#, c-format
+msgid "'%s' is the root of a working copy and cannot be moved"
+msgstr "»%s« ist das Basisverzeichnis einer Arbeitskopie und kann nicht verschoben werden"
+
+#: ../libsvn_wc/copy.c:604
+#, c-format
+msgid "'%s' represents the repository root and cannot be moved"
+msgstr "»%s« repräsentiert die Wurzel eines Projektarchivs und kann nicht verschoben werden "
+
+#: ../libsvn_wc/copy.c:673
#, c-format
msgid "Cannot copy to '%s', as it is not from repository '%s'; it is from '%s'"
msgstr ""
"Kann »%s« nicht kopieren, da es nicht aus dem Projektarchiv »%s« stammt\n"
"sondern aus »%s«"
-#: ../libsvn_wc/copy.c:656
+#: ../libsvn_wc/copy.c:681
#, c-format
msgid "Cannot copy to '%s' as it is scheduled for deletion"
msgstr "Kann nach »%s« kopieren, da es zum Löschen vorgesehen ist"
-#: ../libsvn_wc/copy.c:685
+#: ../libsvn_wc/copy.c:709
#, c-format
msgid "'%s' is already under version control but is excluded."
msgstr "»%s« befindet sich bereits unter Versionskontrolle, ist aber ausgeschlossen."
-#: ../libsvn_wc/copy.c:700
+#: ../libsvn_wc/copy.c:724
#, c-format
msgid "There is already a versioned item '%s'"
msgstr "Es existiert bereits ein versioniertes Objekt »%s«"
-#: ../libsvn_wc/copy.c:716
+#: ../libsvn_wc/copy.c:740
#, c-format
msgid "'%s' already exists and is in the way"
msgstr "»%s« existiert bereits und ist im Weg"
-#: ../libsvn_wc/crop.c:224
+#: ../libsvn_wc/copy.c:791
+#, c-format
+msgid "Cannot move mixed-revision subtree '%s' [%ld:%ld]; try updating it first"
+msgstr "Kann Unterbaum »%s« mit verschiedenen Revisionen nicht verschieben [%ld:%ld], versuchen Sie erst zu aktualisieren"
+
+#: ../libsvn_wc/crop.c:208
#, c-format
msgid "Cannot exclude '%s': it is a working copy root"
msgstr "Kann »%s« nicht ausschließen: Es ist die Basis einer Arbeitskopie"
-#: ../libsvn_wc/crop.c:232
+#: ../libsvn_wc/crop.c:216
#, c-format
msgid "Cannot exclude '%s': it is a switched path"
msgstr "Kann »%s« nicht ausschließen: Es ist ein umgestellter Pfad"
-#: ../libsvn_wc/crop.c:256
+#: ../libsvn_wc/crop.c:243
#, c-format
msgid "Cannot exclude '%s': it is to be added to the repository. Try commit instead"
msgstr "Kann »%s« nicht ausschließen: Es soll dem Projektarchiv hinzugefügt werden. Versuchen Sie stattdessen es zu übertragen"
-#: ../libsvn_wc/crop.c:263
+#: ../libsvn_wc/crop.c:250
#, c-format
msgid "Cannot exclude '%s': it is to be deleted from the repository. Try commit instead"
msgstr "Kann »%s« nicht ausschließen: Es soll aus dem Projektarchiv entfernt werden. Versuchen Sie stattdessen es zu übertragen"
# CHECKME: Check translation of crop (beschneiden?)!!!!
-#: ../libsvn_wc/crop.c:333
+#: ../libsvn_wc/crop.c:309
msgid "Can only crop a working copy with a restrictive depth"
msgstr "Kann nur eine Arbeitskopie mit einer eingeschränkten Tiefe beschneiden"
-#: ../libsvn_wc/crop.c:348
+#: ../libsvn_wc/crop.c:320
msgid "Can only crop directories"
msgstr "Kann nur Verzeichnisse beschneiden"
-#: ../libsvn_wc/crop.c:359
+#: ../libsvn_wc/crop.c:333
#, c-format
msgid "Cannot crop '%s': it is going to be removed from repository. Try commit instead"
msgstr "Kann »%s« nicht beschneiden: Es soll vom Projektarchiv entfernt werden. Versuchen Sie stattdessen es zu übertragen"
-#: ../libsvn_wc/crop.c:366
+#: ../libsvn_wc/crop.c:340
#, c-format
msgid "Cannot crop '%s': it is to be added to the repository. Try commit instead"
msgstr "Kann »%s« nicht beschneiden: Es soll dem Projektarchiv hinzugefügt werden. Versuchen Sie stattdessen es zu übertragen"
-#: ../libsvn_wc/deprecated.c:2052
+#: ../libsvn_wc/delete.c:237 ../libsvn_wc/delete.c:357
+#, c-format
+msgid "'%s' cannot be deleted"
+msgstr "»%s« kann nicht gelöscht werden"
+
+#: ../libsvn_wc/delete.c:255 ../libsvn_wc/delete.c:373
+#, c-format
+msgid "'%s' is the root of a working copy and cannot be deleted"
+msgstr "»%s« ist das Basisverzeichnis einer Arbeitskopie und kann nicht gelöscht werden"
+
+#: ../libsvn_wc/delete.c:262 ../libsvn_wc/delete.c:379
+#, c-format
+msgid "'%s' represents the repository root and cannot be deleted"
+msgstr "»%s« repräsentiert die Wurzel eines Projektarchivs und kann nicht gelöscht werden"
+
+#: ../libsvn_wc/delete.c:476
+#, c-format
+msgid "File '%s' has local modifications"
+msgstr "Die Datei »%s« hat lokale Änderungen"
+
+#: ../libsvn_wc/deprecated.c:2284
#, c-format
msgid "Unexpectedly found '%s': path is marked 'missing'"
msgstr "Unerwartetes »%s« gefunden: Pfad wird als »fehlend« markiert"
-#: ../libsvn_wc/entries.c:1148
+#: ../libsvn_wc/entries.c:1044
#, c-format
msgid "'%s' is not a versioned working copy"
msgstr "»%s« ist keine versionierte Arbeitskopie"
-#: ../libsvn_wc/entries.c:1394
+#: ../libsvn_wc/entries.c:1290
#, c-format
msgid "Admin area of '%s' is missing"
msgstr "Administrativer Bereich von »%s« fehlt"
-#: ../libsvn_wc/entries.c:1414
+#: ../libsvn_wc/entries.c:1310
#, c-format
msgid "'%s' is not of the right kind"
msgstr "»%s« hat einen falschen Typ"
-#: ../libsvn_wc/entries.c:2143
+#: ../libsvn_wc/entries.c:1507
+#, c-format
+msgid "The file '%s' has no checksum"
+msgstr "Datei »%s« hat keine Prüfsumme"
+
+#: ../libsvn_wc/entries.c:1619
+#, c-format
+msgid "Unable to upgrade '%s' at line %d"
+msgstr "Kann »%s« nicht in ein neues Format überführen in Zeile %d"
+
+#: ../libsvn_wc/entries.c:1837
+#, c-format
+msgid "No copyfrom URL for '%s'"
+msgstr "Keine »copyfrom« URL für »%s« "
+
+#: ../libsvn_wc/entries.c:2051
+#, c-format
+msgid "Bad base MD5 checksum for '%s'; expected: '%s'; found '%s'; "
+msgstr "MD5-Prüfsummenfehler für Basis »%s«; erwartet: »%s«, tatsächlich: »%s«"
+
+#: ../libsvn_wc/entries.c:2398
#, c-format
msgid "No default entry in directory '%s'"
msgstr "Verzeichnis »%s« hat keinen Standardeintrag"
-#: ../libsvn_wc/entries.c:2321
+#: ../libsvn_wc/entries.c:2554
#, c-format
msgid "Directory '%s' has no THIS_DIR entry"
msgstr "Verzeichnis »%s« hat keinen »THIS_DIR« Eintrag"
-#: ../libsvn_wc/entries.c:2504 ../libsvn_wc/node.c:769
+#: ../libsvn_wc/entries.c:2735 ../libsvn_wc/node.c:528
#, c-format
msgid "'%s' has an unrecognized node kind"
msgstr "»%s« hat einen nicht erkannten Knotentyp"
-#: ../libsvn_wc/lock.c:504
+#: ../libsvn_wc/externals.c:154 ../libsvn_wc/externals.c:232
#, c-format
-msgid "Path '%s' ends in '%s', which is unsupported for this operation"
-msgstr "Pfad »%s« endet mit »%s«, was für diese Operation nicht erlaubt ist"
+msgid "Error parsing %s property on '%s': '%s'"
+msgstr "Fehler beim Analysieren der %s Eigenschaft für »%s«: »%s«"
-#: ../libsvn_wc/lock.c:553 ../libsvn_wc/upgrade.c:1266
+#: ../libsvn_wc/externals.c:202
#, c-format
-msgid "Working copy format of '%s' is too old (%d); please run 'svn upgrade'"
-msgstr "Format der Arbeitskopie »%s« ist zu alt (%d); Bitte führen Sie »svn upgrade« aus"
+msgid "Can't split line into components: '%s'"
+msgstr "Zeile kann nicht in Komponenten zerlegt werden: »%s«"
+
+#: ../libsvn_wc/externals.c:257
+#, c-format
+msgid "Invalid %s property on '%s': cannot use two absolute URLs ('%s' and '%s') in an external; one must be a path where an absolute or relative URL is checked out to"
+msgstr "Ungültige Eigenschaft %s zu »%s«: Es können nicht zwei absolute URLs (»%s« und »%s«) in einem externen Verweis verwendet werden; eine muss ein Pfad sein, in den eine absolute oder relative URL ausgecheckt wird"
+
+#: ../libsvn_wc/externals.c:266 ../libsvn_wc/externals.c:274
+#, c-format
+msgid "Invalid %s property on '%s': cannot use a URL '%s' as the target directory for an external definition"
+msgstr "Ungültige Eigenschaft %s zu »%s«: Eine URL »%s« kann nicht als Zielverzeichnis für eine externe Definition verwendet werden"
+
+#: ../libsvn_wc/externals.c:316
+#, c-format
+msgid "Invalid %s property on '%s': target '%s' is an absolute path or involves '..'"
+msgstr "Ungültige Eigenschaft %s auf »%s«: Ziel »%s« ist ein absoluter Pfad oder enthält »..«"
+
+#: ../libsvn_wc/externals.c:491 ../libsvn_wc/externals.c:514
+#, c-format
+msgid "This editor can only update '%s'"
+msgstr "Dieser Editor kann nur »%s« aktualisieren"
+
+#: ../libsvn_wc/externals.c:529
+#, c-format
+msgid "Node '%s' is no existing file external"
+msgstr "Knoten »%s« ist kein vorhandener externer Dateiverweis"
+
+#: ../libsvn_wc/externals.c:1517
+#, c-format
+msgid "URL '%s' does not begin with a scheme"
+msgstr "Die URL »%s« beginnt nicht mit einem Schema"
+
+#: ../libsvn_wc/externals.c:1572
+#, c-format
+msgid "Illegal parent directory URL '%s'"
+msgstr "Illegale URL des übergeordneten Verzeichnisses »%s«"
+
+#: ../libsvn_wc/externals.c:1611
+#, c-format
+msgid "Illegal repository root URL '%s'"
+msgstr "Illegale Projektarchivwurzel-URL »%s«"
+
+#: ../libsvn_wc/externals.c:1656
+#, c-format
+msgid "The external relative URL '%s' cannot have backpaths, i.e. '..'"
+msgstr "Die externe relative URL »%s« darf keinen Verweis auf übergeordnete Pfade haben, d.h. »..«"
+
+#: ../libsvn_wc/externals.c:1684
+#, c-format
+msgid "Unrecognized format for the relative external URL '%s'"
+msgstr "Unbekanntes Format für die relative externe URL »%s«"
+
+#: ../libsvn_wc/lock.c:529
+#, c-format
+msgid "Path '%s' ends in '%s', which is unsupported for this operation"
+msgstr "Pfad »%s« endet mit »%s«, was für diese Operation nicht erlaubt ist"
-#: ../libsvn_wc/lock.c:817 ../libsvn_wc/wc_db.c:8585
+#: ../libsvn_wc/lock.c:773 ../libsvn_wc/wc_db.c:14134
#, c-format
msgid "Working copy '%s' locked"
msgstr "Arbeitskopie »%s« gesperrt"
-#: ../libsvn_wc/lock.c:961
+#: ../libsvn_wc/lock.c:918
#, c-format
msgid "Unable to check path existence for '%s'"
msgstr "Kann die Existenz des Pfades »%s« nicht prüfen"
-#: ../libsvn_wc/lock.c:981
+#: ../libsvn_wc/lock.c:941
#, c-format
msgid "Expected '%s' to be a directory but found a file"
msgstr "Erwartete, dass »%s« ein Verzeichnis ist, es ist aber eine Datei"
-#: ../libsvn_wc/lock.c:991
+#: ../libsvn_wc/lock.c:951
#, c-format
msgid "Can't retrieve an access baton for non-directory '%s'"
msgstr "Kann keine Zugriffsreferenz für nicht-Verzeichnis »%s« erhalten"
-#: ../libsvn_wc/lock.c:1000
+#: ../libsvn_wc/lock.c:960
#, c-format
msgid "Directory '%s' is missing"
msgstr "Verzeichnis »%s« fehlt"
-#: ../libsvn_wc/lock.c:1008
+#: ../libsvn_wc/lock.c:968
#, c-format
msgid "Working copy '%s' is not locked"
msgstr "Arbeitskopie »%s« ist nicht gesperrt"
-#: ../libsvn_wc/lock.c:1469
+#: ../libsvn_wc/lock.c:1382
#, c-format
msgid "No write-lock in '%s'"
msgstr "Keine Schreibsperre in »%s«"
-#: ../libsvn_wc/lock.c:1564 ../libsvn_wc/lock.c:1615
+#: ../libsvn_wc/lock.c:1496
#, c-format
msgid "Can't obtain lock on non-directory '%s'."
msgstr "Kann keine Sperre für nicht-Verzeichnis »%s« erhalten."
-# CHECKME: s/callback/hook/ ??
-#: ../libsvn_wc/merge.c:866 ../libsvn_wc/merge.c:1139
-msgid "Conflict callback violated API: returned no results"
-msgstr "Konflikt-Aktion verletzte die API: keine Ergebnisse wurden zurückgeliefert"
+#: ../libsvn_wc/merge.c:1281 ../libsvn_wc/props.c:257
+#, c-format
+msgid "Can't merge into conflicted node '%s'"
+msgstr "Kann nicht in Knoten mit Konflikt »%s« zusammenführen"
-#: ../libsvn_wc/merge.c:1175
-msgid "Conflict callback violated API: returned no merged file"
-msgstr "Konflikt-Aktion verletzte die API: keine zusammengeführte Datei wurde zurückgeliefert"
+#: ../libsvn_wc/merge.c:1324 ../libsvn_wc/props.c:273
+#, c-format
+msgid "The property '%s' may not be merged into '%s'."
+msgstr "Eigenschaft »%s« darf nicht nach »%s« zusammengeführt werden."
+
+#: ../libsvn_wc/node.c:1047
+#, c-format
+msgid "Incomplete copy information on path '%s'."
+msgstr "Unvollständige Informationen für Kopie in Pfad »%s«"
-#: ../libsvn_wc/old-and-busted.c:122
+#: ../libsvn_wc/node.c:1211
+#, c-format
+msgid "'%s' is not the root of the working copy '%s'"
+msgstr "»%s« ist nicht die Basis des Projektarchivs »%s«"
+
+#: ../libsvn_wc/old-and-busted.c:123
msgid "Invalid escape sequence"
msgstr "Ungültige Escape-Sequenz"
-#: ../libsvn_wc/old-and-busted.c:129
+#: ../libsvn_wc/old-and-busted.c:130
msgid "Invalid escaped character"
msgstr "Ungültiges geschütztes Zeichen"
-#: ../libsvn_wc/old-and-busted.c:147 ../libsvn_wc/old-and-busted.c:176
-#: ../libsvn_wc/old-and-busted.c:240 ../libsvn_wc/old-and-busted.c:252
+#: ../libsvn_wc/old-and-busted.c:148 ../libsvn_wc/old-and-busted.c:177
+#: ../libsvn_wc/old-and-busted.c:241 ../libsvn_wc/old-and-busted.c:253
msgid "Unexpected end of entry"
msgstr "Unerwartetes Ende des Eintrags"
-#: ../libsvn_wc/old-and-busted.c:202
+#: ../libsvn_wc/old-and-busted.c:203
#, c-format
msgid "Entry contains non-canonical path '%s'"
msgstr "Eintrag enthält nichtkanonischen Pfad »%s«"
-#: ../libsvn_wc/old-and-busted.c:274
+#: ../libsvn_wc/old-and-busted.c:275
#, c-format
msgid "Invalid value for field '%s'"
msgstr "Ungültiger Wert für Feld »%s«"
-#: ../libsvn_wc/old-and-busted.c:346
+#: ../libsvn_wc/old-and-busted.c:347
#, c-format
msgid "Found an unexpected \\0 in the file external '%s'"
msgstr "Ein nicht erwartetes \\0 wurde im externen Dateiverweis »%s« gefunden"
-#: ../libsvn_wc/old-and-busted.c:390
+#: ../libsvn_wc/old-and-busted.c:391
#, c-format
msgid "Illegal file external revision kind %d for path '%s'"
msgstr "Ungültiger Revisionstyp des externen Dateiverweises %d für Pfad »%s«"
-#: ../libsvn_wc/old-and-busted.c:488 ../libsvn_wc/old-and-busted.c:842
+#: ../libsvn_wc/old-and-busted.c:489 ../libsvn_wc/old-and-busted.c:847
#, c-format
msgid "Entry '%s' has invalid node kind"
msgstr "Eintrag »%s« hat einen ungültigen Knotentyp"
-#: ../libsvn_wc/old-and-busted.c:509 ../libsvn_wc/old-and-busted.c:822
+#: ../libsvn_wc/old-and-busted.c:510 ../libsvn_wc/old-and-busted.c:827
#, c-format
msgid "Entry for '%s' has invalid repository root"
msgstr "Eintrag »%s« hat eine ungültige Projektarchiv-Basis"
-#: ../libsvn_wc/old-and-busted.c:530 ../libsvn_wc/old-and-busted.c:867
+#: ../libsvn_wc/old-and-busted.c:531 ../libsvn_wc/old-and-busted.c:872
#, c-format
msgid "Entry '%s' has invalid 'schedule' value"
msgstr "Eintrag »%s« hat einen ungültigen Wert für »schedule«"
-#: ../libsvn_wc/old-and-busted.c:680
+#: ../libsvn_wc/old-and-busted.c:681
#, c-format
msgid "Entry '%s' has invalid 'depth' value"
msgstr "Eintrag »%s« hat einen ungültigen Wert für »depth«"
-#: ../libsvn_wc/old-and-busted.c:731
+#: ../libsvn_wc/old-and-busted.c:732
#, c-format
msgid "Entry '%s' has invalid '%s' value"
msgstr "Eintrag »%s« hat einen ungültigen »%s« Wert"
-#: ../libsvn_wc/old-and-busted.c:1084
+#: ../libsvn_wc/old-and-busted.c:1085
#, c-format
msgid "XML parser failed in '%s'"
msgstr "XML-Parser schlug in »%s« fehl"
-#: ../libsvn_wc/old-and-busted.c:1140
+#: ../libsvn_wc/old-and-busted.c:1141
msgid "Missing default entry"
msgstr "Fehlender Standardeintrag"
-#: ../libsvn_wc/old-and-busted.c:1145
+#: ../libsvn_wc/old-and-busted.c:1146
msgid "Default entry has no revision number"
msgstr "Standardeintrag hat keine Revisionsnummer"
-#: ../libsvn_wc/old-and-busted.c:1150
+#: ../libsvn_wc/old-and-busted.c:1151
msgid "Default entry is missing URL"
msgstr "Standardeintrag hat keine URL"
-#: ../libsvn_wc/old-and-busted.c:1229
+#: ../libsvn_wc/old-and-busted.c:1230
#, c-format
msgid "Invalid version line in entries file of '%s'"
msgstr "Ungültige Versionszeile in Datei »entry« von »%s«"
-#: ../libsvn_wc/old-and-busted.c:1246
+#: ../libsvn_wc/old-and-busted.c:1247
msgid "Missing entry terminator"
msgstr "Fehlender Abschluss des Eintrags"
-#: ../libsvn_wc/old-and-busted.c:1249
+#: ../libsvn_wc/old-and-busted.c:1250
msgid "Invalid entry terminator"
msgstr "Ungültiger Abschluss des Eintrags"
-#: ../libsvn_wc/old-and-busted.c:1253
+#: ../libsvn_wc/old-and-busted.c:1254
#, c-format
msgid "Error at entry %d in entries file for '%s':"
msgstr "Fehler bei Eintrag %d in Eintragsdatei für »%s«:"
-#: ../libsvn_wc/props.c:283
+#: ../libsvn_wc/props.c:236
#, c-format
-msgid "The property '%s' may not be merged into '%s'."
-msgstr "Eigenschaft »%s« darf nicht nach »%s« zusammengeführt werden."
+msgid "The node '%s' does not have properties in this state."
+msgstr "Der Knoten »%s« hat in diesem Zustand keine Eigenschaften."
-#: ../libsvn_wc/props.c:427
+#: ../libsvn_wc/props.c:401
#, c-format
msgid ""
-"Trying to add new property '%s' with value '%s',\n"
-"but property already exists with value '%s'."
+"Trying to add new property '%s'\n"
+"but the property already exists.\n"
msgstr ""
-"Versuch, eine neue Eigenschaft »%s« mit dem Wert »%s« anzulegen,\n"
-"aber die Eigenschaft existiert bereits mit dem Wert »%s«."
+"Versuch, eine neue Eigenschaft »%s« hinzuzufügen,\n"
+"aber die Eigenschaft existiert bereits.\n"
-#: ../libsvn_wc/props.c:437
+#: ../libsvn_wc/props.c:410
#, c-format
msgid ""
-"Trying to create property '%s' with value '%s',\n"
-"but it has been locally deleted."
+"Trying to add new property '%s'\n"
+"but the property has been locally deleted.\n"
msgstr ""
-"Versuch, die Eigenschaft »%s« mit dem Wert »%s« anzulegen,\n"
-"aber die Eigenschaft wurde lokal bereits gelöscht."
+"Versuch, eine neue Eigenschaft »%s« hinzuzufügen,\n"
+"aber die Eigenschaft wurde lokal gelöscht.\n"
-#: ../libsvn_wc/props.c:451
+#: ../libsvn_wc/props.c:424
#, c-format
msgid ""
-"Trying to delete property '%s' with value '%s',\n"
-"but property has been locally added with value '%s'."
+"Trying to delete property '%s'\n"
+"but the property has been locally added.\n"
msgstr ""
-"Versuch, die Eigenschaft »%s« mit dem Wert »%s« zu löschen,\n"
-"aber die Eigenschaft wurde lokal mit dem Wert »%s« hinzugefügt."
+"Versuch, die Eigenschaft »%s« zu löschen,\n"
+"aber die Eigenschaft wurde lokal hinzugefügt.\n"
-#: ../libsvn_wc/props.c:468
+#: ../libsvn_wc/props.c:440
#, c-format
msgid ""
-"Trying to delete property '%s' with value '%s',\n"
-"but it has been modified from '%s' to '%s'."
+"Trying to delete property '%s'\n"
+"but the property has been locally modified.\n"
msgstr ""
-"Versuch, die Eigenschaft »%s« mit dem Wert »%s« zu löschen,\n"
-"aber der Wert wurde von »%s« nach »%s« geändert."
+"Versuch, die Eigenschaft »%s« zu löschen,\n"
+"aber die Eigenschaft wurde lokal verändert.\n"
-#: ../libsvn_wc/props.c:479
+#: ../libsvn_wc/props.c:450
#, c-format
msgid ""
-"Trying to delete property '%s' with value '%s',\n"
-"but property with value '%s' is locally deleted."
+"Trying to delete property '%s'\n"
+"but the property has been locally deleted and had a different value.\n"
msgstr ""
-"Versuch, die Eigenschaft »%s« mit dem Wert »%s« zu löschen,\n"
-"aber die Eigenschaft mit dem Wert »%s« wurde lokal gelöscht."
+"Versuch, die Eigenschaft »%s« zu löschen,\n"
+"aber die Eigenschaft wurde lokal gelöscht und hatte einen anderen Wert.\n"
-#: ../libsvn_wc/props.c:491
+#: ../libsvn_wc/props.c:462
#, c-format
msgid ""
-"Trying to delete property '%s' with value '%s',\n"
-"but the local value is '%s'."
+"Trying to delete property '%s'\n"
+"but the local property value is different.\n"
msgstr ""
-"Versuch, die Eigenschaft »%s« mit dem Wert »%s« zu löschen,\n"
-"aber der lokale Wert ist »%s«."
+"Versuch, die Eigenschaft »%s« zu löschen,\n"
+"aber der lokale Wert ist ein anderer.\n"
-#: ../libsvn_wc/props.c:510
+#: ../libsvn_wc/props.c:481
#, c-format
msgid ""
-"Trying to change property '%s' from '%s' to '%s',\n"
-"but property already exists with value '%s'."
+"Trying to change property '%s'\n"
+"but the local property value conflicts with the incoming change.\n"
msgstr ""
-"Versuch, die Eigenschaft »%s« von »%s« in »%s« zu ändern,\n"
-"aber die Eigenschaft existiert bereits mit dem Wert »%s«."
+"Versuch, die Eigenschaft »%s« zu ändern,\n"
+"aber der lokale Eigenschaftswert steht mit den empfangenen Änderungen im Konflikt.\n"
-#: ../libsvn_wc/props.c:519
+#: ../libsvn_wc/props.c:489
#, c-format
msgid ""
-"Trying to change property '%s' from '%s' to '%s',\n"
-"but the property has been locally changed from '%s' to '%s'."
+"Trying to change property '%s'\n"
+"but the property has already been locally changed to a different value.\n"
msgstr ""
-"Versuch, die Eigenschaft »%s« von »%s« in »%s« zu ändern,\n"
-"aber die Eigenschaft wurde lokal von »%s« in »%s« geändert."
+"Versuch, die Eigenschaft »%s« zu ändern,\n"
+"aber die Eigenschaft wurde lokal schon auf einen anderen Wert gesetzt.\n"
-#: ../libsvn_wc/props.c:527
+#: ../libsvn_wc/props.c:496
#, c-format
msgid ""
-"Trying to change property '%s' from '%s' to '%s',\n"
-"but it has been locally deleted."
+"Trying to change property '%s'\n"
+"but the property has been locally deleted.\n"
msgstr ""
-"Versuch, die Eigenschaft »%s« von »%s« in »%s« zu ändern,\n"
-"aber die Eigenschaft wurde lokal gelöscht."
+"Versuch, die Eigenschaft »%s« zu ändern,\n"
+"aber die Eigenschaft wurde lokal gelöscht.\n"
-#: ../libsvn_wc/props.c:533
+#: ../libsvn_wc/props.c:502
#, c-format
msgid ""
-"Trying to change property '%s' from '%s' to '%s',\n"
-"but property has been locally added with value '%s'."
+"Trying to change property '%s'\n"
+"but the property has been locally added with a different value.\n"
msgstr ""
-"Versuch, die Eigenschaft »%s« von »%s« in »%s« zu ändern,\n"
-"aber die Eigenschaft wurde lokal mit dem Wert »%s« hinzugefügt."
+"Versuch, die Eigenschaft »%s« zu ändern,\n"
+"aber die Eigenschaft wurde lokal mit einem anderen Wert hinzugefügt.\n"
-#: ../libsvn_wc/props.c:540
+#: ../libsvn_wc/props.c:508
#, c-format
msgid ""
-"Trying to change property '%s' from '%s' to '%s',\n"
-"but the property does not exist."
+"Trying to change property '%s'\n"
+"but the property does not exist locally.\n"
msgstr ""
-"Versuch, die Eigenschaft »%s« von »%s« in »%s« zu ändern,\n"
-"aber die Eigenschaft existiert nicht."
+"Versuch, die Eigenschaft »%s« zu ändern,\n"
+"aber die Eigenschaft existiert lokal nicht.\n"
-# FIXME: duplicated message (differs only in ".")
-#: ../libsvn_wc/props.c:874
-msgid "Conflict callback violated API: returned no results."
-msgstr "Konflikt-Aktion verletzte die API: keine Ergebnisse wurden zurückgeliefert."
+#: ../libsvn_wc/props.c:612
+msgid "<<<<<<< (local property value)"
+msgstr "<<<<<<< (lokaler Eigenschaftswert)"
-#: ../libsvn_wc/props.c:914
-msgid "Conflict callback violated API: returned no merged file."
-msgstr "Konflikt-Aktion verletzte die API: keine zusammengeführte Datei wurde zurückgeliefert."
+#: ../libsvn_wc/props.c:613
+msgid ">>>>>>> (incoming property value)"
+msgstr ">>>>>>> (empfangener Eigenschaftswert)"
-#: ../libsvn_wc/props.c:1757 ../libsvn_wc/props.c:2008
+#: ../libsvn_wc/props.c:648
+msgid "Local property value:\n"
+msgstr "Lokaler Eigenschaftswert:\n"
+
+#: ../libsvn_wc/props.c:650 ../libsvn_wc/props.c:661
+msgid "Cannot display: property value is binary data\n"
+msgstr "Kann nicht anzeigen: Eigenschaftswert sind Binärdaten\n"
+
+#: ../libsvn_wc/props.c:659
+msgid "Incoming property value:\n"
+msgstr "Empfangener Eigenschaftswert:\n"
+
+#: ../libsvn_wc/props.c:1475 ../libsvn_wc/props.c:1884
+#: ../libsvn_wc/props.c:1985
#, c-format
msgid "Property '%s' is an entry property"
msgstr "Eigenschaft »%s« ist eine Eintragseigenschaft"
-#: ../libsvn_wc/props.c:1804 ../libsvn_wc/props.c:1811
+#: ../libsvn_wc/props.c:1512 ../libsvn_wc/props.c:1519
msgid "Failed to load properties"
msgstr "Konnte Eigenschaften nicht laden"
-#: ../libsvn_wc/props.c:1853
+#: ../libsvn_wc/props.c:1555
#, c-format
msgid "Cannot set '%s' on a directory ('%s')"
msgstr "Kann »%s« nicht für ein Verzeichnis setzen (»%s«)"
-#: ../libsvn_wc/props.c:1861
+#: ../libsvn_wc/props.c:1562
#, c-format
msgid "Cannot set '%s' on a file ('%s')"
msgstr "Kann »%s« nicht für eine Datei setzen (»%s«)"
-#: ../libsvn_wc/props.c:1867
-#, c-format
-msgid "'%s' is not a file or directory"
-msgstr "»%s« ist weder eine Datei noch ein Verzeichnis"
-
-#: ../libsvn_wc/props.c:1931
+#: ../libsvn_wc/props.c:1641
#, c-format
-msgid "File '%s' has binary mime type property"
-msgstr "Datei »%s« hat die MIME-Typ Eigenschaft »binär«"
+msgid "Can't set '%s': file '%s' has binary mime type property"
+msgstr "Kann »%s« nicht setzen: Datei »%s« hat die MIME-Typ Eigenschaft »binär«"
-#: ../libsvn_wc/props.c:2000
-#, c-format
-msgid "Can't set properties on '%s': invalid status for updating properties."
-msgstr ""
-
-#: ../libsvn_wc/props.c:2063
+#: ../libsvn_wc/props.c:1686
msgid "Failed to load current properties"
msgstr "Konnte aktuelle Eigenschaften nicht laden"
-#: ../libsvn_wc/props.c:2208
-#, c-format
-msgid "Unrecognized line ending style '%s' for '%s'"
-msgstr "Stil für Zeilenende »%s« nicht erkannt für »%s«"
-
-#: ../libsvn_wc/props.c:2267
+#: ../libsvn_wc/props.c:1906
#, c-format
-msgid "Cannot set non-inheritable mergeinfo on a non-directory ('%s')"
-msgstr "Kann nicht-vererbbare Zusammenführungsinformationen auf ein nicht-Verzeichnis (»%s«) nicht setzen"
+msgid "Can't set properties on '%s': invalid status for updating properties."
+msgstr "Kann Eigenschaften für »%s« nicht setzen: ungültiger Status beim Aktualisieren von Eigenschaften"
-#: ../libsvn_wc/props.c:2488 ../libsvn_wc/props.c:2564
+#: ../libsvn_wc/props.c:1990
#, c-format
-msgid "Error parsing %s property on '%s': '%s'"
-msgstr "Fehler beim Analysieren der %s Eigenschaft für »%s«: »%s«"
+msgid "Property '%s' is a WC property, not a regular property"
+msgstr "Eigenschaft »%s« ist eine Arbeitskopieeigenschaft, keine reguläre Eigenschaft"
-#: ../libsvn_wc/props.c:2533
+#: ../libsvn_wc/props.c:2084
#, c-format
-msgid "Can't split line into components: '%s'"
-msgstr "Zeile kann nicht in Komponenten zerlegt werden: »%s«"
+msgid "Unrecognized line ending style '%s' for '%s'"
+msgstr "Stil für Zeilenende »%s« nicht erkannt für »%s«"
-#: ../libsvn_wc/props.c:2589
+#. scratch_
+#: ../libsvn_wc/props.c:2135
#, c-format
-msgid "Invalid %s property on '%s': cannot use two absolute URLs ('%s' and '%s') in an external; one must be a path where an absolute or relative URL is checked out to"
-msgstr "Ungültige Eigenschaft %s zu »%s«: Es können nicht zwei absolute URLs (»%s« und »%s«) in einem externen Verweis verwendet werden; eine muss ein Pfad sein, in den eine absolute oder relative URL ausgecheckt wird"
+msgid " (%d more duplicate targets found)"
+msgstr "(%d mehrmals auftauchende Ziele gefunden)"
-#: ../libsvn_wc/props.c:2598 ../libsvn_wc/props.c:2606
+#: ../libsvn_wc/props.c:2140
#, c-format
-msgid "Invalid %s property on '%s': cannot use a URL '%s' as the target directory for an external definition"
-msgstr "Ungültige Eigenschaft %s zu »%s«: Eine URL »%s« kann nicht als Zielverzeichnis für eine externe Definition verwendet werden"
+msgid "Invalid %s property on '%s': target '%s' appears more than once%s"
+msgstr "Ungültige Eigenschaft %s auf »%s«: Ziel »%s« taucht mehrmals auf%s"
-#: ../libsvn_wc/props.c:2643
+#: ../libsvn_wc/props.c:2171
#, c-format
-msgid "Invalid %s property on '%s': target '%s' is an absolute path or involves '..'"
-msgstr "Ungültige Eigenschaft %s auf »%s«: Ziel »%s« ist ein absoluter Pfad oder enthält »..«"
-
-#: ../libsvn_wc/questions.c:203
-#, c-format
-msgid ""
-"Checksum mismatch indicates corrupt text base for file: '%s':\n"
-" expected: %s\n"
-" actual: %s\n"
-msgstr ""
-"Prüfsummenfehler ist Anzeichen für beschädigte Textbasis der Datei: »%s«\n"
-" Erwartet: %s\n"
-" Tatsächlich: %s\n"
+msgid "Cannot set non-inheritable mergeinfo on a non-directory ('%s')"
+msgstr "Kann nicht-vererbbare Zusammenführungsinformationen auf ein nicht-Verzeichnis (»%s«) nicht setzen"
-#: ../libsvn_wc/relocate.c:105
+#: ../libsvn_wc/relocate.c:111
#, c-format
msgid "Cannot relocate '%s' as it is not the root of a working copy"
msgstr "Kann »%s« nicht umplatzieren da es keine Basis einer Arbeitskopie ist"
-#: ../libsvn_wc/relocate.c:112
+#: ../libsvn_wc/relocate.c:118
#, c-format
msgid "Cannot relocate '%s' as it is not the root of a working copy; try relocating '%s' instead"
msgstr "Kann »%s« nicht umplatzieren da es keine Basis einer Arbeitskopie ist; Versuchen Sie stattdessen »%s« umzuplatzieren"
-#: ../libsvn_wc/relocate.c:129
+#: ../libsvn_wc/relocate.c:136
msgid "Cannot relocate a single file"
msgstr "Kann eine einzelne Datei nicht umplatzieren"
-#: ../libsvn_wc/relocate.c:136
+#: ../libsvn_wc/relocate.c:144
#, c-format
msgid "Invalid source URL prefix: '%s' (does not overlap target's URL '%s')"
-msgstr ""
+msgstr "Ungültiger Prefix der Quell-URL: »%s« (Keine Überlappung mit Ziel-URL »%s«)"
+
+#: ../libsvn_wc/relocate.c:154
+#, c-format
+msgid "Invalid relocation destination: '%s' (not a URL)"
+msgstr "Ungültiges Ziel für Umplatzierung: »%s« (keine URL)"
-#: ../libsvn_wc/relocate.c:146 ../libsvn_wc/relocate.c:151
+#: ../libsvn_wc/relocate.c:161
#, c-format
-msgid "Invalid destination URL: '%s'"
-msgstr "Ungültige Ziel-URL: »%s«"
+msgid "Invalid relocation destination: '%s' (does not point to target)"
+msgstr "Ungültiges Ziel für Umplatzierung: »%s« (zeigt nicht auf Ziel)"
-#: ../libsvn_wc/tree_conflicts.c:130
+#: ../libsvn_wc/tree_conflicts.c:136
msgid "Unknown enumeration value in tree conflict description"
msgstr "Unbekannter Aufzählungswert in Baumkonfliktbeschreibung"
-#: ../libsvn_wc/tree_conflicts.c:152
+#: ../libsvn_wc/tree_conflicts.c:160
msgid "Invalid version info in tree conflict description"
msgstr "Ungültige Versionsinformation in Baumkonfliktbeschreibung"
-#: ../libsvn_wc/tree_conflicts.c:210
-msgid "Invalid conflict info in tree conflict description"
-msgstr "Ungültige Konfliktinformation in Baumkonfliktbeschreibung«"
+#: ../libsvn_wc/tree_conflicts.c:218
+#, c-format
+msgid "Invalid conflict info '%s' in tree conflict description"
+msgstr "Ungültige Konfliktinformationen »%s« in Baumkonfliktbeschreibung"
-#: ../libsvn_wc/tree_conflicts.c:219
+#: ../libsvn_wc/tree_conflicts.c:229
msgid "Empty 'victim' field in tree conflict description"
msgstr "Leeres Feld »victim« in Baumkonfliktbeschreibung"
-#: ../libsvn_wc/tree_conflicts.c:227
+#: ../libsvn_wc/tree_conflicts.c:237
msgid "Invalid 'node_kind' field in tree conflict description"
msgstr "Ungültiges Feld »node_kind« in Baumkonfliktbeschreibung"
-# FIXME: http://www.urbandictionary.com/define.php?term=Skel
-#: ../libsvn_wc/tree_conflicts.c:291
-msgid "Error parsing tree conflict skel"
-msgstr "Fehler beim Einlesen der Baumkonfliktvorlage"
-
-#: ../libsvn_wc/tree_conflicts.c:468
+#: ../libsvn_wc/tree_conflicts.c:430
#, c-format
msgid "Attempt to add tree conflict that already exists at '%s'"
msgstr "Es wurde versucht, einen Baumkonflikt hinzuzufügen, der in »%s« bereits vorhanden ist"
-#: ../libsvn_wc/update_editor.c:1051
+#: ../libsvn_wc/update_editor.c:999
#, c-format
msgid ""
"Checksum mismatch while updating '%s':\n"
@@ -6869,53 +7703,43 @@ msgstr ""
" Erwartet: %s\n"
" Tatsächlich: %s\n"
-#: ../libsvn_wc/update_editor.c:1169
+#: ../libsvn_wc/update_editor.c:1134
#, c-format
-msgid "Path '%s' is not in the working copy"
-msgstr "Pfad »%s« ist nicht in der Arbeitskopie enthalten"
+msgid "'%s' is not valid as filename in directory '%s'"
+msgstr "»%s« ist als Dateiname im Verzeichnis »%s« nicht gültig"
-#: ../libsvn_wc/update_editor.c:2187
+#: ../libsvn_wc/update_editor.c:1611
#, c-format
-msgid "Failed to add directory '%s': object of the same name as the administrative directory"
-msgstr ""
-"Konnte Verzeichnis »%s« nicht hinzufügen, da es denselben Namen wie das\n"
-"Administrationsverzeichnis trägt"
+msgid "Unexpected attempt to add a node at path '%s'"
+msgstr "Unerwarteter Versuch, einen Knoten im Pfad »%s« hinzuzufügen"
-#: ../libsvn_wc/update_editor.c:2313
+#: ../libsvn_wc/update_editor.c:1622
#, c-format
-msgid "Failed to add directory '%s': a separate working copy with the same name already exists"
-msgstr "Konnte Verzeichnis »%s« nicht hinzufügen: ein andere Arbeitskopie mit gleichem Namen existiert bereits"
+msgid "Unexpected attempt to edit, delete, or replace a node at path '%s'"
+msgstr "Unerwarteter Versuch, einen Knoten im Pfad »%s« zu bearbeiten, zu löschen oder zu ersetzen"
-#: ../libsvn_wc/update_editor.c:2322
+#: ../libsvn_wc/update_editor.c:2036
#, c-format
-msgid "Switched directory '%s' does not match expected URL '%s'"
-msgstr "Umgestelltes Vereichnis »%s« entspricht nicht der erwarteten URL »%s«"
-
-#: ../libsvn_wc/update_editor.c:2348
-#, c-format
-msgid "Failed to add directory '%s': a non-directory object of the same name already exists"
-msgstr "Konnte Verzeichnis »%s« nicht hinzufügen: ein nicht-Verzeichnisobjekt mit demselben Namen existiert bereits"
+msgid "Failed to add directory '%s': object of the same name as the administrative directory"
+msgstr ""
+"Konnte Verzeichnis »%s« nicht hinzufügen, da es denselben Namen wie das\n"
+"Administrationsverzeichnis trägt"
-#: ../libsvn_wc/update_editor.c:2811
+#: ../libsvn_wc/update_editor.c:2694
msgid "Couldn't do property merge"
msgstr "Konnte Eigenschaften nicht zusammenführen"
-#: ../libsvn_wc/update_editor.c:2990
+#: ../libsvn_wc/update_editor.c:3087
#, c-format
msgid "Failed to mark '%s' absent: item of the same name is already scheduled for addition"
msgstr "Konnte »%s« nicht als fehlend markieren: ein Eintrag mit demselben Namen wurde bereits zur Hinzufügung eingeplant"
-#: ../libsvn_wc/update_editor.c:3081
+#: ../libsvn_wc/update_editor.c:3175
#, c-format
msgid "Failed to add file '%s': object of the same name as the administrative directory"
msgstr "Konnte Datei »%s« nicht hinzufügen, da es denselben Namen wie Administrationsverzeichnis trägt"
-#: ../libsvn_wc/update_editor.c:3208
-#, c-format
-msgid "Switched file '%s' does not match expected URL '%s'"
-msgstr "Umgestellte Datei »%s« entspricht nicht der erwarteten URL »%s«"
-
-#: ../libsvn_wc/update_editor.c:3469
+#: ../libsvn_wc/update_editor.c:3697
#, c-format
msgid ""
"Checksum mismatch for '%s':\n"
@@ -6926,173 +7750,343 @@ msgstr ""
" erwartet: %s\n"
"verzeichnet: %s\n"
-#: ../libsvn_wc/update_editor.c:4911
-#, c-format
-msgid "Unrecognized node kind: '%s'"
-msgstr "Unbekannter Knotentyp: »%s«"
-
-#: ../libsvn_wc/update_editor.c:5582
+#: ../libsvn_wc/update_editor.c:5256
#, c-format
msgid "Node '%s' exists."
msgstr "Knoten »%s« existiert bereits"
-#: ../libsvn_wc/update_editor.c:5637
+#: ../libsvn_wc/update_editor.c:5316
#, c-format
msgid "Copyfrom-url '%s' has different repository root than '%s'"
msgstr "Die Quell-URL »%s« hat eine andere Projektarchiv-Basis als »%s«"
-#: ../libsvn_wc/upgrade.c:254
+#: ../libsvn_wc/update_editor.c:5514
+#, c-format
+msgid "'%s' is not an unmodified copied directory"
+msgstr "»%s« ist kein kopiertes Verzeichnis ohne Veränderungen"
+
+#: ../libsvn_wc/update_editor.c:5525
+#, c-format
+msgid "Copyfrom '%s' doesn't match original location of '%s'"
+msgstr "Quell-URL »%s« stimmt nicht mit der ursprünglichen Position von »%s« überein"
+
+#: ../libsvn_wc/upgrade.c:255
#, c-format
msgid "Missing end of line in wcprops file for '%s'"
msgstr "Fehlendes Zeilenende in Datei »wcprops« für »%s«"
-#: ../libsvn_wc/upgrade.c:601
+#: ../libsvn_wc/upgrade.c:631
#, c-format
msgid "Working copy '%s' can't be upgraded because the repository root is not available and can't be retrieved"
-msgstr ""
+msgstr "Arbeitskopie »%s« kann nicht in ein neueres Format gebracht werden, da die Wurzel des Projektarchivs nicht verfügbar ist und nicht bestimmt werden kann"
-#: ../libsvn_wc/upgrade.c:608
+#: ../libsvn_wc/upgrade.c:638
#, c-format
msgid "Working copy '%s' can't be upgraded because the repository uuid is not available and can't be retrieved"
-msgstr ""
+msgstr "Arbeitskopie »%s« kann nicht in ein neueres Format gebracht werden, da die UUID des Projektarchivs nicht verfügbar ist und nicht bestimmt werden kann"
-#: ../libsvn_wc/upgrade.c:615
+#: ../libsvn_wc/upgrade.c:645
#, c-format
msgid "Working copy '%s' can't be upgraded because it doesn't have a url"
-msgstr ""
+msgstr "Arbeitskopie »%s« kann nicht in ein neueres Format gebracht werden, da sie keine URL hat"
-#: ../libsvn_wc/upgrade.c:1127
-msgid "Cannot upgrade with existing logs; please run 'svn cleanup' with Subversion 1.6"
-msgstr ""
+#: ../libsvn_wc/upgrade.c:690
+msgid "Error parsing tree conflict skel"
+msgstr "Fehler beim Einlesen des Baumkonfliktskeletons"
-#: ../libsvn_wc/upgrade.c:1355
+#: ../libsvn_wc/upgrade.c:1173
#, c-format
-msgid "The working copy '%s' is at format 18; use 'tools/dev/wc-ng/bump-to-19.py' to upgrade it"
-msgstr ""
+msgid "The working copy at '%s' is format 22 with WORKING nodes; use a format 22 client to diff/revert before using this client"
+msgstr "Die Arbeitskopie in »%s« hat das Format 22 mit »WORKING«-Knoten; Verwenden Sie zuerst einen Client mit Format 22 um sie zurückzusetzen oder Unterschiede zu speichern, bevor Sie diesen Client verwenden"
+
+#: ../libsvn_wc/upgrade.c:1217
+#, c-format
+msgid "The working copy at '%s' is format 26 with conflicts; use a format 26 client to resolve before using this client"
+msgstr "Die Arbeitskopie in »%s« hat das Format 26 mit Konflikten; Verwenden Sie zuerst einen Client mit Format 26 um diese aufzulösen, bevor Sie diesen Client verwenden"
-#: ../libsvn_wc/upgrade.c:1545
+#: ../libsvn_wc/upgrade.c:1723
+msgid "Cannot upgrade with existing logs; run a cleanup operation on this working copy using a client version which is compatible with this working copy's format (such as the version you are upgrading from), then retry the upgrade with the current version"
+msgstr "Kann mit vorhandenen Logdateien nicht in ein neues Format bringen; Starten Sie »svn cleanup« auf dieser Arbeitskopie mit einer Version des Clienten die mit dem Format der Arbeitskopie kompatibel ist (z.B. mit der Version, die sie gerade ersetzen) und versuchen Sie dann den Vorgang mit der neuen Version erneut"
+
+#: ../libsvn_wc/upgrade.c:1792
+msgid "This working copy is corrupt and cannot be upgraded. Please check out a new working copy."
+msgstr "Diese Arbeitskopie ist beschädigt und kann nicht in ein neues Format gebracht werden. Bitte erzeugen Sie eine neue Arbeitskopie mit »svn checkout«."
+
+#: ../libsvn_wc/upgrade.c:1837
+msgid "(unreleased development version)"
+msgstr "(nicht veröffentlichte Entwicklungsversion)"
+
+#: ../libsvn_wc/upgrade.c:1853
#, c-format
-msgid "Cannot upgrade '%s' as it is not a pre-1.7 working copy root"
-msgstr "Kann »%s« nicht in ein neueres Format bringen, da es keine Basis einer Arbeitskopie älter als Version 1.7 ist"
+msgid "Working copy '%s' is too old (format %d, created by Subversion %s)"
+msgstr "Format der Arbeitskopie »%s« ist zu alt (Format %d, erzeugt von Subversion %s)"
-#: ../libsvn_wc/util.c:58
+#: ../libsvn_wc/upgrade.c:1863
#, c-format
-msgid "'%s' is not a directory"
-msgstr "»%s« ist kein Verzeichnis"
+msgid "Working copy '%s' is an old development version (format %d); to upgrade it, use a format 18 client, then use 'tools/dev/wc-ng/bump-to-19.py', then use the current client"
+msgstr "Format der Arbeitskopie »%s« ist das einer alten Entwicklungsversion (Format %d); Um sie in ein neues Format zu bringen, verwenden Sie einen mit Format 18 kompatiblen Client, starten Sie »tools/dev/wc-ng/bump-to-19.py« und verwenden Sie danach die neue Version"
+
+#: ../libsvn_wc/upgrade.c:2092
+#, c-format
+msgid "Can't upgrade '%s' as it is not a working copy"
+msgstr "Kann »%s« nicht in ein neueres Format bringen, da es keine Arbeitkopie ist"
-#: ../libsvn_wc/wc_db.c:511
+#: ../libsvn_wc/upgrade.c:2141
+#, c-format
+msgid "Can't upgrade '%s' as it is not a working copy root, the root is '%s'"
+msgstr "Kann »%s« nicht in ein neueres Format bringen, da es nicht die Basis einer Arbeitskopie ist - die Basis ist »%s«"
+
+#: ../libsvn_wc/wc_db.c:452
#, c-format
msgid "No REPOSITORY table entry for id '%ld'"
msgstr "Kein REPOSITORY-Tabelleneintrag für ID »%ld«"
-#: ../libsvn_wc/wc_db.c:1456 ../libsvn_wc/wc_db.c:1502
+#: ../libsvn_wc/wc_db.c:768
#, c-format
-msgid "The node '%s' is not in a workingcopy."
-msgstr "Der Knoten »%s« ist nicht in einer Arbeitskopie."
+msgid "The file '%s' has no checksum."
+msgstr "Die Datei »%s« hat keine Prüfsumme."
-#: ../libsvn_wc/wc_db.c:2019 ../libsvn_wc/wc_db.c:5288
+#: ../libsvn_wc/wc_db.c:2535 ../libsvn_wc/wc_db.c:2916
+#: ../libsvn_wc/wc_db.c:9372
#, c-format
msgid "The node '%s' has a corrupt checksum value."
msgstr "Der Knoten »%s« hat einen fehlerhaften Prüfsummenwert."
-#: ../libsvn_wc/wc_db.c:2286
+#: ../libsvn_wc/wc_db.c:2720
#, c-format
-msgid "Pristine text not found"
-msgstr "Ursprungstext nicht gefunden"
+msgid "The node '%s' has a BASE status that has no properties."
+msgstr "Der Knoten »%s« hat einen »BASE«-Status, der keine Eigenschaften hat."
-#: ../libsvn_wc/wc_db.c:2473
+#: ../libsvn_wc/wc_db.c:3546
#, c-format
-msgid "The pristine text with checksum '%s' was not found"
-msgstr "Der Ursprungstext mit der Prüfsumme »%s« wurde nicht gefunden."
+msgid "The node '%s' is not an external."
+msgstr "Der Knoten »%s« ist kein externer Verweis."
-#: ../libsvn_wc/wc_db.c:2513
+#: ../libsvn_wc/wc_db.c:3960
#, c-format
-msgid "The pristine text with MD5 checksum '%s' was not found"
-msgstr "Der Ursprungstext mit der MD5-Prüfsumme »%s« wurde nicht gefunden."
+msgid "Expected node '%s' to be deleted."
+msgstr "Erwartete, dass Knoten »%s« gelöscht wird."
-#: ../libsvn_wc/wc_db.c:2705
+#: ../libsvn_wc/wc_db.c:6473 ../libsvn_wc/wc_db.c:6552
#, c-format
-msgid "The pristine text with checksum '%s' was found in the DB or on disk but not both"
-msgstr "Der Ursprungstext mit der Prüfsumme »%s« wurde in der Datenbank oder der Festplatte gefunden, aber nicht beides."
+msgid "Can't revert '%s' without reverting children"
+msgstr "Kann »%s« nicht zurücksetzen, ohne dessen Kindelemente zurückzusetzen"
-#: ../libsvn_wc/wc_db.c:3036 ../libsvn_wc/wc_db.c:3258
+#: ../libsvn_wc/wc_db.c:6649
#, c-format
-msgid "Cannot copy '%s' excluded by server"
-msgstr ""
+msgid "Can't revert '%s' without reverting parent"
+msgstr "Kann »%s« nicht zurücksetzen, ohne dessen Elternelement zurückzusetzen"
-#: ../libsvn_wc/wc_db.c:3042
+#: ../libsvn_wc/wc_db.c:6768
#, c-format
-msgid "Cannot handle status of '%s'"
-msgstr "Kann Status von »%s« nicht verarbeiten"
+msgid "Unsupported depth for revert of '%s'"
+msgstr "Nicht unterstützte Tiefe für Zurücksetzung von »%s«"
+
+#: ../libsvn_wc/wc_db.c:7740
+#, c-format
+msgid "Cannot delete '%s' as '%s' is excluded by server"
+msgstr "Kann »%s« nicht löschen, da »%s« vom Server ausgeschlossen wurde"
-#: ../libsvn_wc/wc_db.c:3885
+#: ../libsvn_wc/wc_db.c:7751
#, c-format
-msgid "Can't store properties for '%s' in '%s'."
-msgstr "Kann Eigenschaftswert für »%s« nicht in »%s« speichern"
+msgid "Cannot delete '%s' as it is excluded by server"
+msgstr "Kann »%s« nicht löschen, da es vom Server ausgeschlossen wurde"
-#: ../libsvn_wc/wc_db.c:5392
+#: ../libsvn_wc/wc_db.c:7758
+#, c-format
+msgid "Cannot delete '%s' as it is excluded"
+msgstr "Kann »%s« nicht löschen, da es ausgeschlossen wurde"
+
+#: ../libsvn_wc/wc_db.c:8210
+#, c-format
+msgid "Cannot move '%s' to '%s' because they are not in the same working copy"
+msgstr "Kann »%s« nicht nach »%s« verschieben, da dies nicht in der selben Arbeitskopie ist"
+
+#: ../libsvn_wc/wc_db.c:8568
#, c-format
msgid "Corrupt data for '%s'"
msgstr "Fehlerhafte Daten für »%s«"
-#: ../libsvn_wc/wc_db.c:6603
+#: ../libsvn_wc/wc_db.c:8872
#, c-format
-msgid "Could not find node '%s' for recording file information."
-msgstr ""
+msgid "The node '%s' comes from unexpected repository '%s', expected '%s'; if this node is a file external using the correct URL in the external definition can fix the problem, see issue #4087"
+msgstr "Der Knoten »%s« gehört unerwartet zum Projektarchiv »%s«, erwartet war »%s«; Falls der Knoten ein externer Dateiverweis ist, kann die Verwendung der korrekten URL in der Definition des externen Dateiverweises das Problem beheben, siehe Fehlerbericht #4087"
+
+#: ../libsvn_wc/wc_db.c:9497
+#, c-format
+msgid "The node '%s' is not in working copy '%s'"
+msgstr "Der Knoten »%s« ist nicht in der Arbeitskopie »%s«"
-#: ../libsvn_wc/wc_db.c:6863 ../libsvn_wc/wc_db.c:6965
+#: ../libsvn_wc/wc_db.c:9534
+#, c-format
+msgid "The node '%s' is not installable"
+msgstr "Der Knoten »%s« konnte nicht installiert werden"
+
+#: ../libsvn_wc/wc_db.c:9963 ../libsvn_wc/wc_db.c:10222
+#, c-format
+msgid "The node '%s' has a status that has no properties."
+msgstr "Der Knoten »%s« hat einen Status, der keine Eigenschaften hat"
+
+#: ../libsvn_wc/wc_db.c:12062
#, c-format
msgid "Expected node '%s' to be added."
msgstr "Erwartete, dass Knoten »%s« hinzugefügt wird."
-#: ../libsvn_wc/wc_db.c:7280
+#: ../libsvn_wc/wc_db.c:12408
#, c-format
-msgid "Expected node '%s' to be deleted."
-msgstr "Erwartete, dass Knoten »%s« gelöscht wird."
+msgid "Path '%s' was not moved here"
+msgstr "Pfad »%s« wurde nicht hierhin verschoben"
-#: ../libsvn_wc/wc_db.c:7554
+#: ../libsvn_wc/wc_db.c:12477
+#, c-format
+msgid "The base node '%s' was not found."
+msgstr "Der Basisknoten »%s« wurde nicht gefunden."
+
+#: ../libsvn_wc/wc_db.c:12909
#, c-format
msgid "The properties of '%s' are in an indeterminate state and cannot be upgraded. See issue #2530."
-msgstr ""
+msgstr "Die Eigenschaften von »%s« sind in einem unbestimmten Zustand und können nicht in ein neues Format gebreacht werden. Siehe Fehlerbericht #2530."
-#: ../libsvn_wc/wc_db.c:7643
+#: ../libsvn_wc/wc_db.c:12921
+#, c-format
+msgid "Insufficient NODES rows for '%s'"
+msgstr "Nicht genügend »NODES«-Zeilen für »%s«"
+
+#: ../libsvn_wc/wc_db.c:13068
#, c-format
msgid "Repository '%s' not found in the database"
msgstr "Projektverzeichnis »%s« nicht in der Datenbank gefunden"
-#: ../libsvn_wc/wc_db.c:8505 ../libsvn_wc/wc_db.c:8552
+#: ../libsvn_wc/wc_db.c:14055 ../libsvn_wc/wc_db.c:14103
#, c-format
msgid "'%s' is already locked."
msgstr "»%s« ist bereits gesperrt"
-#: ../libsvn_wc/wc_db.c:8509 ../libsvn_wc/wc_db.c:8560
+#: ../libsvn_wc/wc_db.c:14060 ../libsvn_wc/wc_db.c:14111
#, c-format
msgid "Working copy '%s' locked."
msgstr "Arbeitskopie »%s« gesperrt."
-#: ../libsvn_wc/wc_db.c:8639
+#: ../libsvn_wc/wc_db.c:14183
#, c-format
msgid "'%s' is already locked via '%s'."
msgstr "»%s« ist bereits durch »%s« gesperrt."
-#: ../libsvn_wc/wc_db.c:8753
+#: ../libsvn_wc/wc_db.c:14357
#, c-format
msgid "Working copy not locked at '%s'."
msgstr "Arbeitskopie »%s« ist nicht gesperrt."
-#: ../libsvn_wc/wc_db.c:9370
+#: ../libsvn_wc/wc_db.c:14740
+#, c-format
+msgid "Modification of '%s' already exists"
+msgstr "Änderung von »%s« existiert bereits"
+
+#. If EXPRESSION is false, cause the caller to return an SVN_ERR_WC_CORRUPT
+#. * error, showing EXPRESSION and the caller's LOCAL_RELPATH in the message.
+#: ../libsvn_wc/wc_db.c:15382
+#, c-format
+msgid "database inconsistency at local_relpath='%s' verifying expression '%s'"
+msgstr "Datenbankinkonsistenz bei »local_relpath« »%s« beim Auswerten des Ausdrucks »%s«"
+
+#: ../libsvn_wc/wc_db.c:15506
+#, c-format
+msgid "Can't upgrade '%s' as it is not a working copy root"
+msgstr "Kann »%s« nicht in ein neueres Format bringen, da es keine Basis einer Arbeitskopie ist"
+
+#: ../libsvn_wc/wc_db.c:15512
+#, c-format
+msgid "Working copy '%s' is too old and must be upgraded to at least format %d, as created by Subversion %s"
+msgstr "Arbeitskopie »%s« ist zu alt und muss mindestens in das Format %d gebracht werden, wie es von Subversion %s erstellt wurde"
+
+#: ../libsvn_wc/wc_db.c:15530
+msgid "Working copy upgrade failed"
+msgstr "Arbeitskopie konnte nicht in ein nees Format gebracht werden"
+
+#: ../libsvn_wc/wc_db_pristine.c:125 ../libsvn_wc/wc_db_pristine.c:457
+#, c-format
+msgid "The pristine text with checksum '%s' was not found"
+msgstr "Der Ursprungstext mit der Prüfsumme »%s« wurde nicht gefunden."
+
+#: ../libsvn_wc/wc_db_pristine.c:191
+#, c-format
+msgid "Pristine text '%s' not present"
+msgstr "Ursprungstext »%s« nicht vorhanden"
+
+#: ../libsvn_wc/wc_db_pristine.c:224
+#, c-format
+msgid "Can't read '%s' from pristine store because no checksum supplied"
+msgstr "Kann »%s« nicht aus dem Speicherbereich für ürsprüngliche Dateiinhalte lesen, da keine Prüfsumme angegeben wurde"
+
+#: ../libsvn_wc/wc_db_pristine.c:328
+#, c-format
+msgid "New pristine text '%s' has different size: %ld versus %ld"
+msgstr "Neuer ursprünglicher Dateitext »%s« hat eine andere Größe: %ld im Vergleich zu %ld"
+
+#: ../libsvn_wc/wc_db_pristine.c:496
+#, c-format
+msgid "The pristine text with MD5 checksum '%s' was not found"
+msgstr "Der Ursprungstext mit der MD5-Prüfsumme »%s« wurde nicht gefunden."
+
+#: ../libsvn_wc/wc_db_update_move.c:282 ../libsvn_wc/wc_db_update_move.c:306
#, c-format
-msgid "'%s' has no BASE_NODE"
-msgstr "»%s« hat keinen »BASE_NODE«"
+msgid "'%s' already in conflict"
+msgstr "»%s« ist schon von einem Konflikt betroffen"
-#: ../libsvn_wc/wc_db_pdh.c:234
+#: ../libsvn_wc/wc_db_update_move.c:1382
+#, c-format
+msgid "'%s' is not in conflict"
+msgstr "»%s« ist nicht von einem Konflikt betroffen"
+
+#: ../libsvn_wc/wc_db_update_move.c:1395
+#, c-format
+msgid "'%s' is not a tree-conflict victim"
+msgstr "»%s« ist nicht von einem Baumkonflikt betroffen"
+
+#: ../libsvn_wc/wc_db_update_move.c:1754
+#, c-format
+msgid "Cannot auto-resolve tree-conflict on '%s'"
+msgstr "Kann Baumkonflikt in »%s« nicht automatisch auflösen"
+
+#: ../libsvn_wc/wc_db_update_move.c:1817
+#, c-format
+msgid "Cannot apply update because move source %s' is a mixed-revision working copy"
+msgstr "Kann Aktualisierung nicht anwenden, da die Quelle der Verschiebung »%s« eine Arbeitskopie mit verschiedenen Revisionen ist"
+
+#: ../libsvn_wc/wc_db_update_move.c:1828
+#, c-format
+msgid "Cannot apply update because move source '%s' is a switched subtree"
+msgstr "Kann Aktualisierung nicht anwenden, da die Quelle der Verschiebung »%s« ein umgestellter Unterbaum ist"
+
+#: ../libsvn_wc/wc_db_update_move.c:1879
+#, c-format
+msgid "The node '%s' has not been moved away"
+msgstr "Der Knoten »%s« wurde nicht an einen anderen Ort verschoben"
+
+#: ../libsvn_wc/wc_db_update_move.c:1908
+#, c-format
+msgid "'%s' is not deleted"
+msgstr "»%s« ist nicht gelöscht"
+
+# CHECKME: What's WCROOT? A variable or short for "working copy root"?
+#: ../libsvn_wc/wc_db_util.c:69
+#, c-format
+msgid "Missing a row in WCROOT."
+msgstr "Fehlende Zeile in WCROOT."
+
+#: ../libsvn_wc/wc_db_util.c:135
+#, c-format
+msgid "Working copy database '%s' not found"
+msgstr "Datenbank der Arbeitskopie »%s« ist gefunden"
+
+#: ../libsvn_wc/wc_db_wcroot.c:276
#, c-format
msgid "Working copy format of '%s' is too old (%d); please check out your working copy again"
msgstr ""
"Format der Arbeitskopie »%s« ist zu alt (%d); bitte checken Sie die\n"
"Arbeitskopie erneut aus"
-#: ../libsvn_wc/wc_db_pdh.c:244
+#: ../libsvn_wc/wc_db_wcroot.c:286
#, c-format
msgid ""
"This client is too old to work with the working copy at\n"
@@ -7105,91 +8099,342 @@ msgstr ""
"Sie benötigen einen neueren Subversion-Client. Für mehr Details, siehe\n"
" http://subversion.apache.org/faq.html#working-copy-format-change\n"
-#: ../libsvn_wc/wc_db_pdh.c:265
+#: ../libsvn_wc/wc_db_wcroot.c:307
msgid "Cleanup with an older 1.7 client before upgrading with this client"
+msgstr "Starten Sie »svn cleanup« mit einem älteren 1.7 Client bevor Sie mit diesem Client operieren"
+
+#: ../libsvn_wc/wc_db_wcroot.c:318
+#, c-format
+msgid ""
+"The working copy at '%s'\n"
+"is too old (format %d) to work with client version '%s' (expects format %d). You need to upgrade the working copy first.\n"
msgstr ""
+"Die Arbeitskopie in »%s«\n"
+"ist zu alt (Format %d) für die Verwendung mit der Version »%s« (erwartet Format %d). Sie müssen die Arbeitskopie zuerst in ein neues Format bringen.\n"
+
+#: ../libsvn_wc/wc_db_wcroot.c:396
+#, c-format
+msgid "The symlink at '%s' points nowhere"
+msgstr "Der symbolische Link »%s« zeigt nirgendwohin."
# CHECKME: What's WCROOT? A variable or short for "working copy root"?
-#: ../libsvn_wc/wc_db_pdh.c:526
+#: ../libsvn_wc/wc_db_wcroot.c:665
#, c-format
msgid "Missing a row in WCROOT for '%s'."
msgstr "Fehlende Zeile in WCROOT für »%s«."
-#: ../libsvn_wc/wc_db_pdh.c:668
+#: ../libsvn_wc/wc_db_wcroot.c:720
+#, c-format
+msgid "The working copy at '%s' is corrupt."
+msgstr "Die Arbeitskopie in »%s« ist beschädigt."
+
+#: ../libsvn_wc/wc_db_wcroot.c:736
+#, c-format
+msgid "The working copy database at '%s' is missing."
+msgstr "Die Datenbank der Arbeitskopie in »%s« fehlt."
+
+#: ../libsvn_wc/wc_db_wcroot.c:745
+#, c-format
+msgid "The working copy database at '%s' is corrupt."
+msgstr "Die Datenbank der Arbeitskopie in »%s« ist beschädigt."
+
+#: ../libsvn_wc/wc_db_wcroot.c:903
#, c-format
msgid "'%s' is not a working copy root"
msgstr "»%s« ist keine Basis einer Arbeitskopie"
-# CHECKME: What's WCROOT? A variable or short for "working copy root"?
-#: ../libsvn_wc/wc_db_util.c:68
+#: ../libsvn_wc/workqueue.c:518
#, c-format
-msgid "Missing a row in WCROOT."
-msgstr "Fehlende Zeile in WCROOT."
+msgid "Can't install '%s' from pristine store, because no checksum is recorded for this file"
+msgstr "Kann »%s« nicht im Speicherbereich für ursprünglichen Dateiinhalt ablegen, da keine Prüfsumme für diese Datei eingetragen ist"
-#: ../libsvn_wc/workqueue.c:338
+#: ../libsvn_wc/workqueue.c:1499
#, c-format
-msgid "Error restoring text for '%s'"
-msgstr "Fehler beim Wiederherstellen des Textes für »%s«"
+msgid "Unrecognized work item in the queue"
+msgstr "Unbekannter Arbeitsschritt in Warteschlange"
-#: ../libsvn_wc/workqueue.c:1294
-#, fuzzy, c-format
-msgid "Error processing post-commit work for '%s'"
-msgstr "Fehler beim Bearbeiten des Befehls »%s« in »%s«"
+#: ../libsvn_wc/workqueue.c:1579
+#, c-format
+msgid "Failed to run the WC DB work queue associated with '%s', work item %d %s"
+msgstr "Konnte die mit »%s« zusammenhängende Arbeitsschrittwarteschlange der Datenbank der Arbeitskopie nicht ausführen, Arbeitsschritt %d %s"
-#: ../libsvn_wc/workqueue.c:2213
-#, fuzzy, c-format
-msgid "Unrecognized work item in the queue associated with '%s'"
-msgstr "Unbekannter Revisionstyp für »%s« angefragt"
+#: ../svn/add-cmd.c:101
+msgid "Could not add all targets because some targets don't exist"
+msgstr "Konnte nicht alle Ziele hinzufügen, da einige Ziele nicht existieren"
+
+#: ../svn/add-cmd.c:105
+msgid "Could not add all targets because some targets are already versioned"
+msgstr "Konnte nicht alle Ziele hinzufügen, da einige Ziele schon versioniert sind"
-#: ../svn/blame-cmd.c:302 ../svn/list-cmd.c:232
+#: ../svn/blame-cmd.c:303 ../svn/list-cmd.c:300
msgid "'verbose' option invalid in XML mode"
msgstr "Option »verbose« ist im XML-Modus ungültig"
-#: ../svn/blame-cmd.c:314 ../svn/info-cmd.c:531 ../svn/list-cmd.c:244
-#: ../svn/status-cmd.c:281
+#: ../svn/blame-cmd.c:315 ../svn/info-cmd.c:613 ../svn/list-cmd.c:312
+#: ../svn/status-cmd.c:308
msgid "'incremental' option only valid in XML mode"
msgstr "Option »incremental« ist nur im XML-Modus gültig"
-#: ../svn/blame-cmd.c:377
+#: ../svn/blame-cmd.c:378
#, c-format
-msgid "Skipping binary file: '%s'\n"
-msgstr "Überspringe Binärdatei: »%s«\n"
+msgid "Skipping binary file (use --force to treat as text): '%s'\n"
+msgstr "Überspringe Binärdatei (--force erzwingt Behandlung als Text): »%s«\n"
-#: ../svn/changelist-cmd.c:60 ../svn/main.c:1706
-msgid "Changelist names must not be empty"
-msgstr "Namen von Änderungslisten dürfen nicht leer sein"
+#: ../svn/blame-cmd.c:415
+msgid "Could not perform blame on all targets because some targets don't exist"
+msgstr "Konnte nicht für alle Ziele annotieren, da einige Ziele nicht existieren"
+
+#: ../svn/cat-cmd.c:102
+msgid "Could not cat all targets because some targets don't exist"
+msgstr "Konnte nicht alle Ziele ausgeben, da einige Ziele nicht existieren"
+
+#: ../svn/cat-cmd.c:106
+msgid "Could not cat all targets because some targets are not versioned"
+msgstr "Konnte nicht alle Ziele ausgeben, da einige Ziele nicht versioniert sind"
+
+#: ../svn/cat-cmd.c:110
+msgid "Could not cat all targets because some targets are directories"
+msgstr "Konnte nicht alle Ziele ausgeben, da einige Ziele Verzeichnisse sind"
-#: ../svn/checkout-cmd.c:135 ../svn/switch-cmd.c:145
+#: ../svn/changelist-cmd.c:135
+msgid "Could not set changelists on all targets because some targets don't exist"
+msgstr "Konnte nicht alle Ziele Änderungslisten zuweisen, da einige Ziele nicht existieren"
+
+#: ../svn/changelist-cmd.c:140
+msgid "Could not set changelists on all targets because some targets are not versioned"
+msgstr "Konnte nicht alle Ziele Änderungslisten zuweisen, da einige Ziele nicht versioniert sind"
+
+#: ../svn/checkout-cmd.c:133 ../svn/switch-cmd.c:138
#, c-format
msgid "'%s' does not appear to be a URL"
msgstr "»%s« scheint keine URL zu sein"
-#: ../svn/commit-cmd.c:107
+#: ../svn/cl-conflicts.c:80
+msgid "local file edit"
+msgstr "lokale Datei geändert"
+
+#: ../svn/cl-conflicts.c:82
+msgid "local file obstruction"
+msgstr "lokale Datei blockiert"
+
+#: ../svn/cl-conflicts.c:84
+msgid "local file delete"
+msgstr "lokale Datei gelöscht"
+
+#: ../svn/cl-conflicts.c:86
+msgid "local file missing"
+msgstr "lokale Datei fehlt"
+
+#: ../svn/cl-conflicts.c:88
+msgid "local file unversioned"
+msgstr "lokale Datei nicht versioniert"
+
+#: ../svn/cl-conflicts.c:90
+msgid "local file add"
+msgstr "lokale Datei hinzugefügt"
+
+#: ../svn/cl-conflicts.c:92
+msgid "local file replace"
+msgstr "lokale Datei ersetzt"
+
+#: ../svn/cl-conflicts.c:94
+msgid "local file moved away"
+msgstr "lokale Datei verschoben"
+
+#: ../svn/cl-conflicts.c:96
+msgid "local file moved here"
+msgstr "lokale Datei hierher verschoben"
+
+#: ../svn/cl-conflicts.c:103
+msgid "local dir edit"
+msgstr "lokales Verzeichnis geändert"
+
+#: ../svn/cl-conflicts.c:105
+msgid "local dir obstruction"
+msgstr "lokales Verzeichnis blockiert"
+
+#: ../svn/cl-conflicts.c:107
+msgid "local dir delete"
+msgstr "lokales Verzeichnis gelöscht"
+
+#: ../svn/cl-conflicts.c:109
+msgid "local dir missing"
+msgstr "lokales Verzeichnis fehlt"
+
+#: ../svn/cl-conflicts.c:111
+msgid "local dir unversioned"
+msgstr "lokales Verzeichnis nicht versioniert"
+
+#: ../svn/cl-conflicts.c:113
+msgid "local dir add"
+msgstr "lokales Verzeichnis hinzugefügt"
+
+#: ../svn/cl-conflicts.c:115
+msgid "local dir replace"
+msgstr "lokales Verzeichnis ersetzt"
+
+#: ../svn/cl-conflicts.c:117
+msgid "local dir moved away"
+msgstr "lokales Verzeichnis verschoben"
+
+#: ../svn/cl-conflicts.c:119
+msgid "local dir moved here"
+msgstr "lokales Verzeichnis hierher verschoben"
+
+#: ../svn/cl-conflicts.c:141
+msgid "incoming file edit"
+msgstr "eingehende Änderung einer Datei"
+
+#: ../svn/cl-conflicts.c:143
+msgid "incoming file add"
+msgstr "eingehendes Hinzufügen einer Datei"
+
+#: ../svn/cl-conflicts.c:145
+msgid "incoming file delete"
+msgstr "eingehendes Löschen einer Datei"
+
+#: ../svn/cl-conflicts.c:147
+msgid "incoming file replace"
+msgstr "eingehendes Ersetzen einer Datei"
+
+#: ../svn/cl-conflicts.c:154
+msgid "incoming dir edit"
+msgstr "eingehende Änderung eines Verzeichnisses"
+
+#: ../svn/cl-conflicts.c:156
+msgid "incoming dir add"
+msgstr "eingehendes Hinzufügen eines Verzeichnisses"
+
+#: ../svn/cl-conflicts.c:158
+msgid "incoming dir delete"
+msgstr "eingehendes Löschen eines Verzeichnisses"
+
+#: ../svn/cl-conflicts.c:160
+msgid "incoming dir replace"
+msgstr "eingehendes Ersetzen eines Verzeichnisses"
+
+#: ../svn/cl-conflicts.c:178
+msgid "upon update"
+msgstr "bei Aktualisierung"
+
+#: ../svn/cl-conflicts.c:179
+msgid "upon switch"
+msgstr "bei Umstellung"
+
+#: ../svn/cl-conflicts.c:180
+msgid "upon merge"
+msgstr "bei Zusammenführung"
+
+#: ../svn/cl-conflicts.c:181
+msgid "upon none"
+msgstr "ohne Operation"
+
+#: ../svn/cl-conflicts.c:200
+msgid "local edit"
+msgstr "lokale geändert"
+
+#: ../svn/cl-conflicts.c:203
+msgid "local add"
+msgstr "lokal hinzugefügt"
+
+#: ../svn/cl-conflicts.c:206
+msgid "local delete"
+msgstr "lokal gelöscht"
+
+#: ../svn/cl-conflicts.c:209
+msgid "local obstruction"
+msgstr "lokal blockiert"
+
+#: ../svn/cl-conflicts.c:212
#, c-format
-msgid "svn: warning: The depth of this commit is '%s', but copied directories will regardless be committed with depth '%s'. You must remove unwanted children of those directories in a separate commit.\n"
-msgstr ""
+msgid "local %s"
+msgstr "lokal %s"
+
+#: ../svn/cl-conflicts.c:220
+msgid "incoming edit"
+msgstr "eingehende Änderung"
-#: ../svn/conflict-callbacks.c:158
+#: ../svn/cl-conflicts.c:223
+msgid "incoming add"
+msgstr "eingehendes Hinzufügen"
+
+#: ../svn/cl-conflicts.c:226
+msgid "incoming delete"
+msgstr "eingehendes Löschen"
+
+#: ../svn/cl-conflicts.c:229
+#, c-format
+msgid "incoming %s"
+msgstr "eingehendes %s"
+
+#: ../svn/cl-conflicts.c:235 ../svn/cl-conflicts.c:277
+#, c-format
+msgid "%s, %s %s"
+msgstr "%s, %s %s"
+
+#. A catch-all message for very rare or nominally impossible cases.
+#. It will not be pretty, but is closer to an internal error than
+#. an ordinary user-facing string.
+#: ../svn/cl-conflicts.c:285
+#, c-format
+msgid "local: %s %s incoming: %s %s %s"
+msgstr "lokal: %s %s, empfangen: %s %s %s"
+
+#: ../svn/cleanup-cmd.c:92
+#, c-format
+msgid "Working copy locked; try running 'svn cleanup' on the root of the working copy ('%s') instead."
+msgstr "Arbeitskopie gesperrt; Versuchen Sie stattdessen »svn cleanup« auf der Basis der Arbeitskopie (»%s«) auszuführen"
+
+#: ../svn/commit-cmd.c:80
+#, c-format
+msgid "svn: The depth of this commit is '%s', but copies are always performed recursively in the repository.\n"
+msgstr "svn: Die Tiefe dieser Übertragung ist »%s«, Kopien werden aber im Projektarchiv immer rekursiv ausgeführt.\n"
+
+#: ../svn/commit-cmd.c:116
+msgid "Commit targets must be local paths"
+msgstr "Ziele der Übertragung müssen lokale Pfade sein"
+
+#: ../svn/conflict-callbacks.c:155 ../svn/conflict-callbacks.c:172
+msgid "MINE"
+msgstr "EIGENE"
+
+#: ../svn/conflict-callbacks.c:160 ../svn/conflict-callbacks.c:170
+msgid "THEIRS"
+msgstr "FREMDE"
+
+#: ../svn/conflict-callbacks.c:163
+msgid "MERGED"
+msgstr "ZUSAMMENGEFÃœHRT"
+
+#: ../svn/conflict-callbacks.c:220 ../svn/conflict-callbacks.c:276
msgid "||||||| ORIGINAL"
msgstr "||||||| ORIGINAL"
-#: ../svn/conflict-callbacks.c:159
+#: ../svn/conflict-callbacks.c:221
msgid "<<<<<<< MINE (select with 'mc')"
msgstr "<<<<<<< EIGENE (Auswahl mit »mc«)"
-#: ../svn/conflict-callbacks.c:160
+#: ../svn/conflict-callbacks.c:222
msgid ">>>>>>> THEIRS (select with 'tc')"
msgstr ">>>>>>> FREMDE (Auswahl mit »tc«)"
-#: ../svn/conflict-callbacks.c:192
+#: ../svn/conflict-callbacks.c:277
+msgid "<<<<<<< MINE"
+msgstr "<<<<<<< EIGENE"
+
+#: ../svn/conflict-callbacks.c:278
+msgid ">>>>>>> THEIRS"
+msgstr ">>>>>>> FREMDE"
+
+#: ../svn/conflict-callbacks.c:333 ../svn/file-merge.c:503
msgid "No editor found."
msgstr "Kein Editor gefunden."
-#: ../svn/conflict-callbacks.c:199
+#: ../svn/conflict-callbacks.c:342 ../svn/file-merge.c:515
msgid "Error running editor."
msgstr "Fehler beim Ausführen des Editors."
-#: ../svn/conflict-callbacks.c:209
+#: ../svn/conflict-callbacks.c:352
#, c-format
msgid ""
"Invalid option; there's no merged version to edit.\n"
@@ -7198,199 +8443,353 @@ msgstr ""
"Ungültige Option; es gibt keine zusammengeführte Version zum Bearbeiten.\n"
"\n"
-#: ../svn/conflict-callbacks.c:239
-msgid "No merge tool found.\n"
-msgstr "Kein Programm zum Zusammenführen gefunden.\n"
+#: ../svn/conflict-callbacks.c:411
+msgid "No merge tool found, try '(m) merge' instead.\n"
+msgstr "Kein Werkzeug zum Zusammenführen gefunden, versuchen Sie stattdessen »(m) merge«.\n"
-#: ../svn/conflict-callbacks.c:246
-msgid "Error running merge tool."
-msgstr "Fehler beim Ausführen des Zusammenführungsprogramms."
+#: ../svn/conflict-callbacks.c:419
+msgid "Error running merge tool, try '(m) merge' instead."
+msgstr "Fehler beim Ausführen des Werkzeugs zum Zusammenführen, versuchen Sie stattdessen »(m) merge«."
+
+#: ../svn/conflict-callbacks.c:451
+msgid "change merged file in an editor [edit]"
+msgstr "Bearbeitet die zusammengeführte Datei in einem Editor [edit]"
+
+#. Translators: keep long_desc below 70 characters (wrap with a left
+#. margin of 9 spaces if needed); don't translate the words within square
+#. brackets.
+#: ../svn/conflict-callbacks.c:451
+msgid "edit file"
+msgstr "Datei bearbeiten"
+
+#: ../svn/conflict-callbacks.c:454
+msgid "show all changes made to merged file"
+msgstr "Zeigt alle Änderungen an der zusammengeführten Datei an"
+
+#: ../svn/conflict-callbacks.c:454
+msgid "show diff"
+msgstr "Änderungen anzeigen"
+
+#: ../svn/conflict-callbacks.c:456
+msgid "accept merged version of file"
+msgstr "Akzeptiert die zusammengeführte Version der Datei"
+
+#: ../svn/conflict-callbacks.c:456 ../svn/conflict-callbacks.c:501
+#: ../svn/conflict-callbacks.c:533
+msgid "mark resolved"
+msgstr "als aufgelöst markieren"
+
+#: ../svn/conflict-callbacks.c:459 ../svn/conflict-callbacks.c:498
+msgid "display conflict"
+msgstr "Konflikte anzeigen"
+
+#: ../svn/conflict-callbacks.c:459
+msgid "show all conflicts (ignoring merged version)"
+msgstr "Zeigt alle Konflikte an (ignoriert zusammengeführte Datei)"
+
+#: ../svn/conflict-callbacks.c:461
+msgid "accept my version for all conflicts (same) [mine-conflict]"
+msgstr "Akzeptiert eigene Version für alle Konflikte (ebenso) [mine-conflict]"
+
+#: ../svn/conflict-callbacks.c:461
+msgid "my side of conflict"
+msgstr "eigene Seite des Konflikts"
+
+#: ../svn/conflict-callbacks.c:464
+msgid "accept their version for all conflicts (same) [theirs-conflict]"
+msgstr "Akzeptiert fremde Version für alle Konflikte (ebenso) [theirs-conflict]"
+
+#: ../svn/conflict-callbacks.c:464
+msgid "their side of conflict"
+msgstr "fremde Seite des Konflikts"
+
+#: ../svn/conflict-callbacks.c:469
+msgid "accept my version of entire file (even non-conflicts) [mine-full]"
+msgstr "Akzeptiert eigene Version für ganze Datei (alles, nicht nur Konflikte) [mine-full]"
+
+#: ../svn/conflict-callbacks.c:469 ../svn/conflict-callbacks.c:492
+#: ../svn/conflict-callbacks.c:515
+msgid "my version"
+msgstr "meine Version"
-#: ../svn/conflict-callbacks.c:316
-msgid "No editor found; leaving all conflicts."
-msgstr "Kein Editor gefunden; behalte alle Konflikte bei."
+#: ../svn/conflict-callbacks.c:472
+msgid "accept their version of entire file (same) [theirs-full]"
+msgstr "Akzeptiert fremde Version für ganze Datei (ebenso) [theirs-full]"
-#: ../svn/conflict-callbacks.c:325
-msgid "Error running editor; leaving all conflicts."
-msgstr "Fehler beim Ausführen des Editors; behalte alle Konflikte bei."
+#: ../svn/conflict-callbacks.c:472 ../svn/conflict-callbacks.c:495
+#: ../svn/conflict-callbacks.c:518
+msgid "their version"
+msgstr "fremde Version"
-#: ../svn/conflict-callbacks.c:361
-msgid "No merge tool found; leaving all conflicts."
-msgstr "Kein Programm zum Zusammenführen gefunden; behalte alle Konflikte bei."
+#: ../svn/conflict-callbacks.c:476 ../svn/util.c:774
+msgid "merge"
+msgstr "Zusammenführung"
-#: ../svn/conflict-callbacks.c:370
-msgid "Error running merge tool; leaving all conflicts."
-msgstr "Fehler beim Ausführen des Zusammenführungsprogramms; behalte alle Konflikte bei."
+#: ../svn/conflict-callbacks.c:476
+msgid "use internal merge tool to resolve conflict"
+msgstr "Verwendet das interne Werkzeug zum Zusammenführen für die Konfliktlösung"
+
+#: ../svn/conflict-callbacks.c:478
+msgid "launch external tool to resolve conflict [launch]"
+msgstr "Startet ein externes Werkzeug zum Zusammenführen für die Konfliktlösung [launch]"
+
+#: ../svn/conflict-callbacks.c:478
+msgid "launch tool"
+msgstr "Werkzeug starten"
+
+#: ../svn/conflict-callbacks.c:480 ../svn/conflict-callbacks.c:503
+#: ../svn/conflict-callbacks.c:521
+msgid "mark the conflict to be resolved later [postpone]"
+msgstr "Markiert den Konflikt für eine spätere Auflösung [postpone]"
+
+#: ../svn/conflict-callbacks.c:480 ../svn/conflict-callbacks.c:503
+#: ../svn/conflict-callbacks.c:521 ../svn/conflict-callbacks.c:535
+#: ../svn/conflict-callbacks.c:553 ../svn/conflict-callbacks.c:567
+#: ../svn/conflict-callbacks.c:583 ../svn/conflict-callbacks.c:599
+msgid "postpone"
+msgstr "später auflösen"
+
+#: ../svn/conflict-callbacks.c:483 ../svn/conflict-callbacks.c:506
+#: ../svn/conflict-callbacks.c:524 ../svn/conflict-callbacks.c:537
+#: ../svn/conflict-callbacks.c:555 ../svn/conflict-callbacks.c:569
+#: ../svn/conflict-callbacks.c:585 ../svn/conflict-callbacks.c:601
+msgid "postpone all remaining conflicts"
+msgstr "Alle verbleibenen Konflikte zurückstellen"
+
+#: ../svn/conflict-callbacks.c:483 ../svn/conflict-callbacks.c:506
+#: ../svn/conflict-callbacks.c:524 ../svn/conflict-callbacks.c:537
+#: ../svn/conflict-callbacks.c:555 ../svn/conflict-callbacks.c:569
+#: ../svn/conflict-callbacks.c:585 ../svn/conflict-callbacks.c:601
+msgid "quit resolution"
+msgstr "Konfliktauflösung beenden"
+
+#: ../svn/conflict-callbacks.c:485
+msgid "show all options"
+msgstr "alle Optionen anzeigen"
+
+#: ../svn/conflict-callbacks.c:485
+msgid "show this list (also 'h', '?')"
+msgstr "Gibt diese Liste aus (auch: »h«, »?«)"
-# TODO: leicht inkonsistent zu obigen Strings (tritt in svn info-Ausgabe auf)
-#: ../svn/conflict-callbacks.c:414
-#, c-format
-msgid "Conflict discovered in '%s'.\n"
-msgstr "Konflikt in »%s« entdeckt.\n"
+#: ../svn/conflict-callbacks.c:492
+msgid "accept my version of entire property (even non-conflicts) [mine-full]"
+msgstr "Akzeptiert eigene Version für ganze Eigenschaft (alles, nicht nur Konflikte) [mine-full]"
-#: ../svn/conflict-callbacks.c:419
-#, c-format
-msgid "Conflict for property '%s' discovered on '%s'.\n"
-msgstr "Konflikt für Eigenschaft »%s« für »%s« entdeckt.\n"
+#: ../svn/conflict-callbacks.c:495
+msgid "accept their version of entire property (same) [theirs-full]"
+msgstr "Akzeptiert fremde Version für ganze Eigenschaft (ebenso) [theirs-full]"
-#: ../svn/conflict-callbacks.c:436
-#, c-format
-msgid "They want to delete the property, you want to change the value to '%s'.\n"
-msgstr "Versuch, die Eigenschaft zu löschen, aber der Wert soll auf »%s« gesetzt werden.\n"
+#: ../svn/conflict-callbacks.c:498
+msgid "show conflicts in this property"
+msgstr "Zeigt Konflikte in dieser Eigenschaft an"
-#: ../svn/conflict-callbacks.c:445
-#, c-format
-msgid "They want to change the property value to '%s', you want to delete the property.\n"
-msgstr "Versuch, den Wert der Eigenschaft auf »%s« zu ändern, aber die Eigenschaft soll gelöscht werden.\n"
+#: ../svn/conflict-callbacks.c:499
+msgid "change merged property value in an editor [edit]"
+msgstr "Bearbeitet den zusammengeführten Eigenschaftswert in einem Editor [edit]"
-# Once you change "Auswahl:" don't forget to adapt indentation of other strings!
-#: ../svn/conflict-callbacks.c:467
-msgid "Select: (p) postpone"
-msgstr "Auswahl: (p) zurückstellen"
+#: ../svn/conflict-callbacks.c:499
+msgid "edit property"
+msgstr "Eigenschaft bearbeiten"
+
+#: ../svn/conflict-callbacks.c:501
+msgid "accept edited version of property"
+msgstr "Akzeptiert die bearbeitete Version der Eigenschaft"
+
+#: ../svn/conflict-callbacks.c:508 ../svn/conflict-callbacks.c:526
+#: ../svn/conflict-callbacks.c:539 ../svn/conflict-callbacks.c:557
+#: ../svn/conflict-callbacks.c:571 ../svn/conflict-callbacks.c:587
+#: ../svn/conflict-callbacks.c:603
+msgid "help"
+msgstr "Hilfe"
+
+#: ../svn/conflict-callbacks.c:508 ../svn/conflict-callbacks.c:526
+#: ../svn/conflict-callbacks.c:539 ../svn/conflict-callbacks.c:557
+#: ../svn/conflict-callbacks.c:571 ../svn/conflict-callbacks.c:587
+#: ../svn/conflict-callbacks.c:603
+msgid "show this help (also '?')"
+msgstr "Zeigt diese Hilfe an (auch: »?«)"
+
+#: ../svn/conflict-callbacks.c:515
+msgid "accept pre-existing item (ignore upstream addition) [mine-full]"
+msgstr "Akzeptiert vorhandenes Element (ignoriert empfangene Hinzufügung) [mine-full]"
+
+#: ../svn/conflict-callbacks.c:518
+msgid "accept incoming item (overwrite pre-existing item) [theirs-full]"
+msgstr "Akzeptiert empfangenes Element (überschreibt vorhandenes Element) [theirs-full]"
+
+#: ../svn/conflict-callbacks.c:533
+msgid "accept current working copy state"
+msgstr "Akzeptiert aktuellen Zustand in der Arbeitskopie"
+
+#: ../svn/conflict-callbacks.c:535 ../svn/conflict-callbacks.c:553
+#: ../svn/conflict-callbacks.c:567 ../svn/conflict-callbacks.c:583
+#: ../svn/conflict-callbacks.c:599
+msgid "resolve the conflict later [postpone]"
+msgstr "Löst den Konflikt später auf [postpone]"
+
+#: ../svn/conflict-callbacks.c:545
+msgid "apply update (recommended)"
+msgstr "Wendet Aktualisierung an (empfohlen)"
+
+#: ../svn/conflict-callbacks.c:546
+msgid "apply update to the move destination [mine-conflict]"
+msgstr "Wendet die Aktualisierung auf das verschobene Ziel an [mine-conflict]"
+
+#: ../svn/conflict-callbacks.c:549
+msgid "discard update (breaks move)"
+msgstr "Verwirft Aktualisierung (Verschiebung wird Kopie)"
+
+#: ../svn/conflict-callbacks.c:549
+msgid "discard update, mark resolved, the move will will become a copy"
+msgstr "Verwirft die Aktualisierung, markiert den Konflikt als aufgelöst, wandelt Verschiebung in eine Kopie um"
+
+#: ../svn/conflict-callbacks.c:563
+msgid "apply update to move destination"
+msgstr "Wendet Aktualisierung auf das verschobene Ziel an"
+
+#: ../svn/conflict-callbacks.c:564
+msgid "apply incoming update to move destination [mine-conflict]"
+msgstr "Wendet empfangene Aktualisierung auf das verschobene Ziel an [mine-conflict]"
+
+#: ../svn/conflict-callbacks.c:577 ../svn/conflict-callbacks.c:593
+msgid "keep affected local moves"
+msgstr "Behält lokale Verschiebungen"
+
+#: ../svn/conflict-callbacks.c:577
+msgid "keep any local moves affected by this deletion [mine-conflict]"
+msgstr "Behält alle durch das Löschen betroffenen lokalen Verschiebungen [mine-conflict]"
+
+#: ../svn/conflict-callbacks.c:580 ../svn/conflict-callbacks.c:596
+msgid "mark resolved (breaks moves)"
+msgstr "Markiert als aufgelöst (Verschiebung wird Kopie)"
+
+#: ../svn/conflict-callbacks.c:580
+msgid "mark resolved, any affected moves will become copies"
+msgstr "Markiert den Konflikt als aufgelöst, wandelt betroffene Verschiebungen in Kopien um"
+
+#: ../svn/conflict-callbacks.c:593
+msgid "keep any moves affected by this replacement [mine-conflict]"
+msgstr "Behält alle durch das Ersetzen betroffenen Verschiebungen [mine-conflict]"
+
+#: ../svn/conflict-callbacks.c:596
+msgid "mark resolved (any affected moves will become copies)"
+msgstr "Markiert den Konflikt als aufgelöst (wandelt betroffene Verschiebungen in Kopien um)"
-#: ../svn/conflict-callbacks.c:472
-msgid ", (df) diff-full, (e) edit"
-msgstr ", (df) voller Diff, (e) editieren"
+#: ../svn/conflict-callbacks.c:632
+msgid "Select:"
+msgstr "Auswahl:"
-#: ../svn/conflict-callbacks.c:476 ../svn/conflict-callbacks.c:489
-msgid ", (r) resolved"
-msgstr ", (r) aufgelöst"
+#: ../svn/conflict-callbacks.c:659
+#, c-format
+msgid " (%s) %s"
+msgstr " (%s) %s"
-#: ../svn/conflict-callbacks.c:482
-msgid ""
-",\n"
-" (mc) mine-conflict, (tc) theirs-conflict"
-msgstr ""
-",\n"
-" (mc) eigene konfliktbehaftete Datei, (tc) fremde konfliktbehaftete Datei"
+#: ../svn/conflict-callbacks.c:699
+msgid "Words in square brackets are the corresponding --accept option arguments.\n"
+msgstr "Worte in eckigen Klammen geben das entsprechende Argument für die Option »--accept« an.\n"
-#: ../svn/conflict-callbacks.c:492
+#: ../svn/conflict-callbacks.c:738
+#, c-format
msgid ""
-",\n"
-" (mf) mine-full, (tf) theirs-full"
+"Unrecognized option.\n"
+"\n"
msgstr ""
-",\n"
-" (mf) volle eigene Datei, (tf) volle fremde Datei"
+"Unbekannte Option.\n"
+"\n"
-#: ../svn/conflict-callbacks.c:499
-msgid "(s) show all options: "
-msgstr " (s) alle Optionen anzeigen: "
+# TODO: leicht inkonsistent zu obigen Strings (tritt in svn info-Ausgabe auf)
+#: ../svn/conflict-callbacks.c:766
+#, c-format
+msgid "Conflict discovered in file '%s'.\n"
+msgstr "Konflikt in Datei »%s« entdeckt.\n"
-# CHECKME: translate mine-conflict, ... or not (sometimes used as option!)?
-#: ../svn/conflict-callbacks.c:508
+# TODO: "for binary files" for consistency with "for properties"
+#: ../svn/conflict-callbacks.c:836
#, c-format
msgid ""
-"\n"
-" (e) edit - change merged file in an editor\n"
-" (df) diff-full - show all changes made to merged file\n"
-" (r) resolved - accept merged version of file\n"
-"\n"
-" (dc) display-conflict - show all conflicts (ignoring merged version)\n"
-" (mc) mine-conflict - accept my version for all conflicts (same)\n"
-" (tc) theirs-conflict - accept their version for all conflicts (same)\n"
-"\n"
-" (mf) mine-full - accept my version of entire file (even non-conflicts)\n"
-" (tf) theirs-full - accept their version of entire file (same)\n"
-"\n"
-" (p) postpone - mark the conflict to be resolved later\n"
-" (l) launch - launch external tool to resolve conflict\n"
-" (s) show all - show this list\n"
+"Invalid option; cannot display conflicts for a binary file.\n"
"\n"
msgstr ""
-"\n"
-" (e) editieren - zusammengeführte Datei in einem Editor ändern\n"
-" (df) voller Diff - alle Änderungen in der zusammengeführten Datei anzeigen\n"
-" (r) aufgelöst - akzeptieren der zusammengeführten Version der Datei\n"
-" (dc) Konflikte anzeigen - alle Konflikte anzeigen (die zusammengeführte Version\n"
-" ignorieren)\n"
-" (mc) mine-conflict - eigene Version für alle Konflikte akzeptieren (das selbe)\n"
-" (tc) theirs-conflict - fremde Version für alle Konflikte akzeptieren (das selbe)\n"
-"\n"
-" (mf) volle eigene Datei - die eigene Version der kompletten Datei akzeptieren\n"
-" (selbst Nicht-Konflikte)\n"
-" (tf) volle fremde Datei - die fremde Version der kompletten Datei akzeptieren\n"
-" (das selbe)\n"
-" (p) zurückstellen - den Konflikt erst später auflösen\n"
-" (l) starten - Starten eines externen Programms zur Konfliktauflösung\n"
-" (s) alle anzeigen - diese Liste anzeigen\n"
+"Ungültige Option; Anzeige von Konflikten ist für Binärdateien nicht möglich.\n"
"\n"
-# CHECKME: proper English?
-#: ../svn/conflict-callbacks.c:543 ../svn/conflict-callbacks.c:567
+#: ../svn/conflict-callbacks.c:845
#, c-format
msgid ""
-"Invalid option; cannot choose based on conflicts in a binary file.\n"
+"Invalid option; original files not available.\n"
"\n"
msgstr ""
-"Ungültige Option; Auswahl anhand von Konflikten ist in einer Binärdatei nicht möglich.\n"
+"Ungültige Option; Originaldateien nicht verfügbar.\n"
"\n"
-#: ../svn/conflict-callbacks.c:551 ../svn/conflict-callbacks.c:575
+#: ../svn/conflict-callbacks.c:857
#, c-format
msgid ""
-"Invalid option; cannot choose based on conflicts for properties.\n"
+"Invalid option; there's no merged version to diff.\n"
"\n"
msgstr ""
-"Ungültige Option; Auswahl anhand von Konflikten ist für Eigenschaften nicht möglich.\n"
+"Ungültige Option; es gibt keine zusammengeführte Version zum Vergleichen.\n"
"\n"
-# TODO: "for binary files" for consistency with "for properties"
-#: ../svn/conflict-callbacks.c:604
+#: ../svn/conflict-callbacks.c:877
#, c-format
msgid ""
-"Invalid option; cannot display conflicts for a binary file.\n"
+"Invalid option; can only resolve text conflicts with the internal merge tool.\n"
"\n"
msgstr ""
-"Ungültige Option; Anzeige von Konflikten ist für Binärdateien nicht möglich.\n"
+"Ungültige Option; Kann Textkonflikte nur mit dem internen Werkzeug zum Zusammenführen auflösen.\n"
"\n"
-#: ../svn/conflict-callbacks.c:612
+#: ../svn/conflict-callbacks.c:903 ../svn/conflict-callbacks.c:920
#, c-format
msgid ""
-"Invalid option; cannot display conflicts for properties.\n"
+"Invalid option.\n"
"\n"
msgstr ""
-"Ungültige Option; Anzeige von Konflikten ist für Eigenschaften nicht möglich.\n"
+"Ungültige Option.\n"
"\n"
-#: ../svn/conflict-callbacks.c:620
+# CHECKME: proper English?
+#: ../svn/conflict-callbacks.c:929
#, c-format
msgid ""
-"Invalid option; original files not available.\n"
+"Invalid option; cannot choose based on conflicts in a binary file.\n"
"\n"
msgstr ""
-"Ungültige Option; Originaldateien nicht verfügbar.\n"
+"Ungültige Option; Auswahl anhand von Konflikten ist in einer Binärdatei nicht möglich.\n"
"\n"
-#: ../svn/conflict-callbacks.c:632
+#: ../svn/conflict-callbacks.c:943
#, c-format
msgid ""
-"Invalid option; there's no merged version to diff.\n"
-"\n"
-msgstr ""
-"Ungültige Option; es gibt keine zusammengeführte Version zum Vergleichen.\n"
+"Invalid option; use diff/edit/merge/launch before choosing 'mark resolved'.\n"
"\n"
+msgstr "Ungültige Option; Verwenden Sie Änderungen anzeigen / Datei bearbeiten / Zusammenführung / Werkzeug starten bevor Sie den Konflikt als aufgelöst markieren.\n"
-# CHECKME: proper English?
-#: ../svn/conflict-callbacks.c:651
-#, fuzzy, c-format
+#: ../svn/conflict-callbacks.c:984
+#, c-format
+msgid "Conflict for property '%s' discovered on '%s'.\n"
+msgstr "Konflikt für Eigenschaft »%s« für »%s« entdeckt.\n"
+
+#: ../svn/conflict-callbacks.c:1042
+#, c-format
msgid ""
-"Invalid option; cannot resolve property conflicts with an external merge tool.\n"
+"Invalid option; please edit the property first.\n"
"\n"
msgstr ""
-"Ungültige Option; Auswahl anhand von Konflikten ist in einer Binärdatei nicht möglich.\n"
+"Ungültige Option; Bearbeiten Sie zuerst die Eigenschaft.\n"
"\n"
-#: ../svn/conflict-callbacks.c:666 ../svn/conflict-callbacks.c:680
+#: ../svn/conflict-callbacks.c:1079
#, c-format
msgid ""
-"Invalid option.\n"
-"\n"
+"Tree conflict on '%s'\n"
+" > %s\n"
msgstr ""
-"Ungültige Option.\n"
-"\n"
+"Baumkonflikt in »%s«\n"
+" > %s\n"
-#: ../svn/conflict-callbacks.c:710
+#: ../svn/conflict-callbacks.c:1149
#, c-format
msgid ""
"Conflict discovered when trying to add '%s'.\n"
@@ -7399,52 +8798,45 @@ msgstr ""
"Beim Versuch, »%s« hinzuzufügen, wurde ein Konflikt entdeckt.\n"
"Ein Objekt mit demselben Namen existiert bereits.\n"
-# TODO: merge with other messages
-#: ../svn/conflict-callbacks.c:713
-msgid "Select: (p) postpone, (mf) mine-full, (tf) theirs-full, (h) help:"
-msgstr "Auswahl: (p) zurückstellen, (mf) volle eigene Datei, (tf) volle fremde Datei, (h) Hilfe:"
+#: ../svn/conflict-callbacks.c:1247
+msgid "No editor found; leaving all conflicts."
+msgstr "Kein Editor gefunden; behalte alle Konflikte bei."
-#: ../svn/conflict-callbacks.c:725
-#, c-format
-msgid ""
-" (p) postpone - resolve the conflict later\n"
-" (mf) mine-full - accept pre-existing item (ignore upstream addition)\n"
-" (tf) theirs-full - accept incoming item (overwrite pre-existing item)\n"
-" (h) help - show this help\n"
-"\n"
-msgstr ""
-" (p) zurückstellen - den Konflikt erst später auflösen\n"
-" (mf) volle eigene Datei - vorher existierende Daten akzeptieren (Hinzufügungen\n"
-" ignorieren)\n"
-" (tf) volle fremde Datei - eingehende Daten akzeptieren (überschreiben vorher\n"
-" existierender Daten)\n"
-" (h) Hilfe - diese Hilfe anzeigen\n"
-"\n"
+#: ../svn/conflict-callbacks.c:1256
+msgid "Error running editor; leaving all conflicts."
+msgstr "Fehler beim Ausführen des Editors; behalte alle Konflikte bei."
-#: ../svn/copy-cmd.c:132 ../svn/delete-cmd.c:79 ../svn/mkdir-cmd.c:66
-#: ../svn/move-cmd.c:77 ../svn/propedit-cmd.c:251
-msgid "Local, non-commit operations do not take a log message or revision properties"
-msgstr "Lokale Operationen ohne Übertragung benötigen keine Logmeldung oder Revisionseigenschaften"
+#: ../svn/conflict-callbacks.c:1292
+msgid "No merge tool found; leaving all conflicts."
+msgstr "Kein Programm zum Zusammenführen gefunden; behalte alle Konflikte bei."
-#: ../svn/diff-cmd.c:172 ../svn/log-cmd.c:280 ../svnserve/main.c:632
-#, c-format
-msgid "Can't open stdout"
-msgstr "Kann Standardausgabe nicht öffnen"
+#: ../svn/conflict-callbacks.c:1301
+msgid "Error running merge tool; leaving all conflicts."
+msgstr "Fehler beim Ausführen des Zusammenführungsprogramms; behalte alle Konflikte bei."
-#: ../svn/diff-cmd.c:174 ../svn/log-cmd.c:282
+#: ../svn/copy-cmd.c:123 ../svn/util.c:957
#, c-format
-msgid "Can't open stderr"
-msgstr "Kann Standardfehlerausgabe nicht öffnen"
+msgid "'%s': a peg revision is not allowed here"
+msgstr "»%s«: Eine Fix-Revision ist hier nicht erlaubt"
+
+#: ../svn/copy-cmd.c:163 ../svn/delete-cmd.c:69 ../svn/mkdir-cmd.c:68
+#: ../svn/move-cmd.c:77 ../svn/propedit-cmd.c:260
+msgid "Local, non-commit operations do not take a log message or revision properties"
+msgstr "Lokale Operationen ohne Übertragung benötigen keine Logmeldung oder Revisionseigenschaften"
-#: ../svn/diff-cmd.c:183
+#: ../svn/diff-cmd.c:208
msgid "'--xml' option only valid with '--summarize' option"
msgstr "Option »--xml« ist nur in Verbindung mit der Option »--summarize« zulässig"
-#: ../svn/diff-cmd.c:258
+#: ../svn/diff-cmd.c:299
msgid "'--new' option only valid with '--old' option"
msgstr "Option »--new« ist nur in Verbindung mit der Option »--old« zulässig"
-#: ../svn/diff-cmd.c:322
+#: ../svn/diff-cmd.c:317
+msgid "'svn diff [-r N[:M]] [TARGET[@REV]...]' does not support mixed target types. Try using the --old and --new options or one of the shorthand invocations listed in 'svn help diff'."
+msgstr "»svn diff [-r N[:M]] [ZIEL[@REV]...]« unterstützt keine gemischten Zieltypen. Versuchen Sie die Optionen »--old« und »--new« oder eine der Kurzfassungen des Aufrufs, die in »svn help diff« aufgelistet sind."
+
+#: ../svn/diff-cmd.c:355
#, c-format
msgid "Path '%s' not relative to base URLs"
msgstr "Pfad »%s« ist nicht relativ zur Basis-URL"
@@ -7453,11 +8845,83 @@ msgstr "Pfad »%s« ist nicht relativ zur Basis-URL"
msgid "Destination directory exists; please remove the directory or use --force to overwrite"
msgstr "Zielverzeichnis existiert; bitte löschen Sie das Verzeichnis oder verwenden Sie »--force« zum Überschreiben"
-#: ../svn/export-cmd.c:118 ../svn/switch-cmd.c:179 ../svn/update-cmd.c:107
-msgid "Failure occured processing one or more externals definitions"
-msgstr "Kann eine oder mehrere »svn:externals«-Definitionen nicht verarbeiten"
+#: ../svn/export-cmd.c:122 ../svn/list-cmd.c:412 ../svn/switch-cmd.c:188
+#: ../svn/update-cmd.c:177
+msgid "Failure occurred processing one or more externals definitions"
+msgstr "Fehler bei der Verarbeitung eines oder mehrerer externer Verweise"
+
+#: ../svn/file-merge.c:135 ../svn/file-merge.c:805
+msgid "Could not write data to merged file"
+msgstr "Konnte Daten nicht in zusammengeführte Datei schreiben"
+
+#: ../svn/file-merge.c:491
+msgid "Could not write data to temporary file"
+msgstr "Konnte Daten nicht in temporäre Datei schreiben"
+
+#: ../svn/file-merge.c:600
+msgid "Conflicting section found during merge:"
+msgstr "Abschnitt mit Konflikt während Zusammenführung gefunden:"
+
+#: ../svn/file-merge.c:603
+#, c-format
+msgid "(1) their version (at line %lu)"
+msgstr "(1) fremde Version (in Zeile %lu)"
+
+#: ../svn/file-merge.c:608
+#, c-format
+msgid "(2) your version (at line %lu)"
+msgstr "(2) eigene Version (in Zeile %lu)"
+
+#: ../svn/file-merge.c:657
+msgid ""
+"Select: (1) use their version, (2) use your version,\n"
+" (12) their version first, then yours,\n"
+" (21) your version first, then theirs,\n"
+" (e1) edit their version and use the result,\n"
+" (e2) edit your version and use the result,\n"
+" (eb) edit both versions and use the result,\n"
+" (p) postpone this conflicting section leaving conflict markers,\n"
+" (a) abort file merge and return to main menu: "
+msgstr ""
+"Auswahl: (1) verwendet fremde Version, (2) verwendet eigene Version,\n"
+" (12) verwendet fremde Version zuerst, dann eigene,\n"
+" (21) verwendet eigene Version zuerst, dann fremde,\n"
+" (e1) bearbeitet fremde Version und verwendet das Ergebnis,\n"
+" (e2) bearbeitet eigene Version und verwendet das Ergebnis,\n"
+" (eb) bearbeitet beide Versionen und verwendet das Ergebnis,\n"
+" (p) Verschiebt Konfliktlösung für diesen Abschnitt und setzt Konfliktmarkierungen,\n"
+" (a) Bricht Zusammenführung der Datei ab und kehrt zum Hauptmenü zurück: "
+
+#: ../svn/file-merge.c:888
+#, c-format
+msgid "Merging '%s'.\n"
+msgstr "Zusammenführung von »%s«.\n"
+
+#: ../svn/file-merge.c:935
+#, c-format
+msgid "Merge of '%s' aborted.\n"
+msgstr "Zusammenführung von »%s« abgebrochen.\n"
-#: ../svn/help-cmd.c:50
+#: ../svn/file-merge.c:953
+#, c-format
+msgid ""
+"Could not write merged result to '%s', saved instead at '%s'.\n"
+"'%s' remains in conflict.\n"
+msgstr ""
+"Ergebnis der Zusammenführung konnte nicht nach »%s« geschrieben werden, es wurde stattdessen in »%s« gespeichert.\n"
+"Konflikt in »%s« bleibt bestehen.\n"
+
+#: ../svn/file-merge.c:971
+#, c-format
+msgid "Merge of '%s' completed (remains in conflict).\n"
+msgstr "Zusammenführung von »%s« abgeschlossen (Konflikt bleibt bestehen)\n"
+
+#: ../svn/file-merge.c:975
+#, c-format
+msgid "Merge of '%s' completed.\n"
+msgstr "Zusammenführung von »%s« abgeschlossen.\n"
+
+#: ../svn/help-cmd.c:53
#, c-format
msgid ""
"usage: svn <subcommand> [options] [args]\n"
@@ -7485,7 +8949,7 @@ msgstr ""
"\n"
"Verfügbare Unterbefehle:\n"
-#: ../svn/help-cmd.c:63
+#: ../svn/help-cmd.c:66
msgid ""
"Subversion is a tool for version control.\n"
"For additional information, see http://subversion.apache.org/\n"
@@ -7493,7 +8957,7 @@ msgstr ""
"Subversion ist ein Programm zur Versionskontrolle.\n"
"Für weitere Informationen, siehe: http://subversion.apache.org/\n"
-#: ../svn/help-cmd.c:70 ../svnrdump/svnrdump.c:349 ../svnsync/main.c:1762
+#: ../svn/help-cmd.c:73 ../svnrdump/svnrdump.c:659 ../svnsync/svnsync.c:1857
msgid ""
"The following repository access (RA) modules are available:\n"
"\n"
@@ -7501,6 +8965,14 @@ msgstr ""
"Die folgenden ZugriffsModule (ZM) für Projektarchive stehen zur Verfügung:\n"
"\n"
+#: ../svn/help-cmd.c:127
+msgid ""
+"WARNING: Plaintext password storage is enabled!\n"
+"\n"
+msgstr ""
+"WARNUNG: Speicherung von Passwörtern im Klartext ist aktiviert!\n"
+"\n"
+
#: ../svn/import-cmd.c:87
msgid "Repository URL required when importing"
msgstr "Projektarchiv URL ist beim Import erforderlich"
@@ -7509,7 +8981,7 @@ msgstr "Projektarchiv URL ist beim Import erforderlich"
msgid "Too many arguments to import command"
msgstr "Zu viele Parameter für Import Befehl"
-#: ../svn/import-cmd.c:111
+#: ../svn/import-cmd.c:107
#, c-format
msgid "Invalid URL '%s'"
msgstr "Ungültige URL »%s«"
@@ -7519,175 +8991,207 @@ msgstr "Ungültige URL »%s«"
msgid "Resource is not under version control."
msgstr "Ressource ist nicht unter Versionskontrolle."
-#: ../svn/info-cmd.c:255 ../svnadmin/main.c:1394
+#: ../svn/info-cmd.c:266 ../svnadmin/svnadmin.c:1744
#, c-format
msgid "Path: %s\n"
msgstr "Pfad: %s\n"
-#: ../svn/info-cmd.c:261
+#: ../svn/info-cmd.c:273
#, c-format
msgid "Name: %s\n"
msgstr "Name: %s\n"
-#: ../svn/info-cmd.c:265
+#: ../svn/info-cmd.c:277
#, c-format
msgid "Working Copy Root Path: %s\n"
-msgstr ""
+msgstr "Wurzelpfad der Arbeitskopie: %s\n"
-#: ../svn/info-cmd.c:270
+#: ../svn/info-cmd.c:283
#, c-format
msgid "URL: %s\n"
msgstr "URL: %s\n"
-#: ../svn/info-cmd.c:273
+#: ../svn/info-cmd.c:286
+#, c-format
+msgid "Relative URL: ^/%s\n"
+msgstr "Relative URL: ^/%s\n"
+
+#: ../svn/info-cmd.c:293
#, c-format
msgid "Repository Root: %s\n"
msgstr "Basis des Projektarchivs: %s\n"
-#: ../svn/info-cmd.c:277
+#: ../svn/info-cmd.c:297
#, c-format
msgid "Repository UUID: %s\n"
msgstr "UUID des Projektarchivs: %s\n"
-#: ../svn/info-cmd.c:281
+#: ../svn/info-cmd.c:301
#, c-format
msgid "Revision: %ld\n"
msgstr "Revision: %ld\n"
-#: ../svn/info-cmd.c:286
+#: ../svn/info-cmd.c:306
#, c-format
msgid "Node Kind: file\n"
msgstr "Knotentyp: Datei\n"
-#: ../svn/info-cmd.c:290
+#: ../svn/info-cmd.c:310
#, c-format
msgid "Node Kind: directory\n"
msgstr "Knotentyp: Verzeichnis\n"
-#: ../svn/info-cmd.c:294
+#: ../svn/info-cmd.c:314
#, c-format
msgid "Node Kind: none\n"
msgstr "Knotentyp: keiner\n"
-#: ../svn/info-cmd.c:299
+#: ../svn/info-cmd.c:319
#, c-format
msgid "Node Kind: unknown\n"
msgstr "Knotentyp: unbekannt\n"
-#: ../svn/info-cmd.c:308
+#: ../svn/info-cmd.c:328
#, c-format
msgid "Schedule: normal\n"
msgstr "Plan: normal\n"
-#: ../svn/info-cmd.c:312
+#: ../svn/info-cmd.c:332
#, c-format
msgid "Schedule: add\n"
msgstr "Plan: hinzufügen\n"
-#: ../svn/info-cmd.c:316
+#: ../svn/info-cmd.c:336
#, c-format
msgid "Schedule: delete\n"
msgstr "Plan: löschen\n"
-#: ../svn/info-cmd.c:320
+#: ../svn/info-cmd.c:340
#, c-format
msgid "Schedule: replace\n"
msgstr "Plan: ersetzen\n"
-#: ../svn/info-cmd.c:336
+#: ../svn/info-cmd.c:356
#, c-format
msgid "Depth: empty\n"
-msgstr "Tiefe: leer\n"
+msgstr "Tiefe: »empty«\n"
-#: ../svn/info-cmd.c:340
+#: ../svn/info-cmd.c:360
#, c-format
msgid "Depth: files\n"
-msgstr "Tiefe: Dateien\n"
+msgstr "Tiefe: »files«\n"
-#: ../svn/info-cmd.c:344
+#: ../svn/info-cmd.c:364
#, c-format
msgid "Depth: immediates\n"
-msgstr "Tiefe: immediates\n"
+msgstr "Tiefe: »immediates«\n"
+
+#: ../svn/info-cmd.c:368
+#, c-format
+msgid "Depth: exclude\n"
+msgstr "Tiefe: »exclude«\n"
#. Other depths should never happen here.
-#: ../svn/info-cmd.c:355
+#: ../svn/info-cmd.c:379
#, c-format
msgid "Depth: INVALID\n"
msgstr "Tiefe: UNGÃœLTIG\n"
-#: ../svn/info-cmd.c:359
+#: ../svn/info-cmd.c:383
#, c-format
msgid "Copied From URL: %s\n"
msgstr "Kopiert von URL: %s\n"
-#: ../svn/info-cmd.c:363
+#: ../svn/info-cmd.c:387
#, c-format
msgid "Copied From Rev: %ld\n"
msgstr "Kopiert von Rev: %ld\n"
-#: ../svn/info-cmd.c:368
+#: ../svn/info-cmd.c:396 ../svn/info-cmd.c:398
+#, c-format
+msgid "Moved From: %s\n"
+msgstr "Verschoben von: %s\n"
+
+#: ../svn/info-cmd.c:409 ../svn/info-cmd.c:411
+#, c-format
+msgid "Moved To: %s\n"
+msgstr "Verschoben nach: %s\n"
+
+#: ../svn/info-cmd.c:417
#, c-format
msgid "Last Changed Author: %s\n"
msgstr "Letzter Autor: %s\n"
-#: ../svn/info-cmd.c:372
+#: ../svn/info-cmd.c:421
#, c-format
msgid "Last Changed Rev: %ld\n"
msgstr "Letzte geänderte Rev: %ld\n"
-#: ../svn/info-cmd.c:377
+#: ../svn/info-cmd.c:426
msgid "Last Changed Date"
msgstr "Letztes Änderungsdatum"
-#: ../svn/info-cmd.c:383
+#: ../svn/info-cmd.c:432
msgid "Text Last Updated"
msgstr "Text zuletzt geändert"
-#: ../svn/info-cmd.c:386
+#: ../svn/info-cmd.c:435
#, c-format
msgid "Checksum: %s\n"
msgstr "Prüfsumme: %s\n"
-#: ../svn/info-cmd.c:391
+#: ../svn/info-cmd.c:456
#, c-format
msgid "Conflict Previous Base File: %s\n"
msgstr "Konflikt: vorherige Ausgangsdatei: %s\n"
-#: ../svn/info-cmd.c:397
+#: ../svn/info-cmd.c:463
#, c-format
msgid "Conflict Previous Working File: %s\n"
msgstr "Konflikt: vorherige Arbeitsdatei: %s\n"
-#: ../svn/info-cmd.c:402
+#: ../svn/info-cmd.c:470
#, c-format
msgid "Conflict Current Base File: %s\n"
msgstr "Konflikt: aktuelle Ausgangsdatei: %s\n"
# TODO: leicht inkonsistent zu obigen Strings (tritt in svn info-Ausgabe auf)
-#: ../svn/info-cmd.c:407
+#: ../svn/info-cmd.c:479
#, c-format
msgid "Conflict Properties File: %s\n"
msgstr "Konfliktdatei mit Eigenschaften: %s\n"
-#: ../svn/info-cmd.c:415
+#: ../svn/info-cmd.c:491
+msgid "Tree conflict"
+msgstr "Baumkonflikt"
+
+#: ../svn/info-cmd.c:517
+msgid "Source left"
+msgstr "Quelle links"
+
+#: ../svn/info-cmd.c:526
+msgid "Source right"
+msgstr "Quelle rechts"
+
+#: ../svn/info-cmd.c:535
#, c-format
msgid "Lock Token: %s\n"
msgstr "Sperrmarke: %s\n"
-#: ../svn/info-cmd.c:419
+#: ../svn/info-cmd.c:539
#, c-format
msgid "Lock Owner: %s\n"
msgstr "Sperreigner: %s\n"
-#: ../svn/info-cmd.c:424
+#: ../svn/info-cmd.c:544
msgid "Lock Created"
msgstr "Sperre erzeugt"
-#: ../svn/info-cmd.c:428
+#: ../svn/info-cmd.c:548
msgid "Lock Expires"
msgstr "Sperre läuft ab"
-#: ../svn/info-cmd.c:436
+#: ../svn/info-cmd.c:556
#, c-format
msgid ""
"Lock Comment (%i line):\n"
@@ -7702,454 +9206,1397 @@ msgstr[1] ""
"Sperrkommentar (%i Zeilen):\n"
"%s\n"
-#: ../svn/info-cmd.c:445
+#: ../svn/info-cmd.c:565
#, c-format
msgid "Changelist: %s\n"
msgstr "Änderungsliste: %s\n"
-#: ../svn/info-cmd.c:467
-msgid "Tree conflict"
-msgstr "Baumkonflikt"
-
-#: ../svn/info-cmd.c:473
-msgid "Source left"
-msgstr "Quelle links"
-
-#: ../svn/info-cmd.c:482
-msgid "Source right"
-msgstr "Quelle rechts"
-
-#: ../svn/info-cmd.c:580
-#, c-format
-msgid ""
-"%s: (Not a versioned resource)\n"
-"\n"
-msgstr ""
-"%s: (Keine versionierte Ressource)\n"
-"\n"
-
-#: ../svn/info-cmd.c:589
-#, c-format
-msgid ""
-"%s: (Not a valid URL)\n"
-"\n"
-msgstr ""
-"%s: (Keine gültige URL)\n"
-"\n"
+#: ../svn/info-cmd.c:679
+msgid "Could not display info for all targets because some targets don't exist"
+msgstr "Konnte Information nicht für alle Ziele anzeigen, da einige Ziele nicht existieren"
-#: ../svn/list-cmd.c:92
+#: ../svn/list-cmd.c:73
msgid "%b %d %H:%M"
msgstr "%d. %b %H:%M"
-#: ../svn/list-cmd.c:97
+#: ../svn/list-cmd.c:75
msgid "%b %d %Y"
msgstr "%d. %b %Y"
+# Currently this is used for checkouts and switches too. If we
+# want different output, we'll have to add new actions.
+#: ../svn/list-cmd.c:101
+#, c-format
+msgid "Listing external '%s' defined on '%s':\n"
+msgstr "Auflistung des externen Verweises »%s« definiert auf »%s«:\n"
+
+#: ../svn/list-cmd.c:421
+msgid "Could not list all targets because some targets don't exist"
+msgstr "Konnte nicht alle Ziele auflisten, da einige Ziele nicht existieren"
+
#: ../svn/lock-cmd.c:58
msgid "Lock comment contains a zero byte"
msgstr "Sperrkommentar enthält ein Null-Byte"
-#: ../svn/log-cmd.c:184
+#: ../svn/log-cmd.c:144
+msgid "\n"
+msgstr "\n"
+
+#: ../svn/log-cmd.c:354
msgid "(no author)"
msgstr "(kein Autor)"
-#: ../svn/log-cmd.c:190
+#: ../svn/log-cmd.c:360
msgid "(no date)"
msgstr "(kein Datum)"
-#: ../svn/log-cmd.c:205
+#: ../svn/log-cmd.c:385
#, c-format
msgid " | %d line"
msgid_plural " | %d lines"
msgstr[0] " | %d Zeile"
msgstr[1] " | %d Zeilen"
-#: ../svn/log-cmd.c:221
+#: ../svn/log-cmd.c:401
#, c-format
msgid "Changed paths:\n"
msgstr "Geänderte Pfade:\n"
-#: ../svn/log-cmd.c:236
+#: ../svn/log-cmd.c:418
#, c-format
msgid " (from %s:%ld)"
msgstr " (von %s:%ld)"
-#. Print the result of merge line
-#: ../svn/log-cmd.c:251
+#: ../svn/log-cmd.c:434
#, c-format
-msgid "Merged via:"
-msgstr "Zusammengeführt mittels:"
+msgid "Reverse merged via:"
+msgstr "Rückwärtig zusammengeführt mittels:"
-#: ../svn/log-cmd.c:296 ../svn/log-cmd.c:373
+#: ../svn/log-cmd.c:436
#, c-format
-msgid "\n"
-msgstr ""
+msgid "Merged via:"
+msgstr "Zusammengeführt mittels:"
-#: ../svn/log-cmd.c:573
+#: ../svn/log-cmd.c:689
msgid "'with-all-revprops' option only valid in XML mode"
msgstr "Option »with-all-revprops« ist nur im XML-Modus gültig"
-#: ../svn/log-cmd.c:577
+#: ../svn/log-cmd.c:693
msgid "'with-no-revprops' option only valid in XML mode"
msgstr "Option »with-no-revprops« ist nur im XML-Modus gültig"
# TODO: combine
# CHECKME: s/with-revprop/with-revprops/ ???
-#: ../svn/log-cmd.c:581
+#: ../svn/log-cmd.c:697
msgid "'with-revprop' option only valid in XML mode"
msgstr "Option »with-revprop« ist nur im XML-Modus gültig"
-#: ../svn/log-cmd.c:588
+#: ../svn/log-cmd.c:704
msgid "'diff' option is not supported in XML mode"
msgstr "Option »diff« wird im XML-Modus nicht unterstützt"
-#: ../svn/log-cmd.c:594
+#: ../svn/log-cmd.c:710
msgid "'quiet' and 'diff' options are mutually exclusive"
msgstr "»quiet« und »diff« schließen sich gegenseitig aus"
-#: ../svn/log-cmd.c:598
+#: ../svn/log-cmd.c:714
msgid "'diff-cmd' option requires 'diff' option"
-msgstr ""
+msgstr "Option »diff-cmd« erfordert Option »diff«"
-#: ../svn/log-cmd.c:602
+#: ../svn/log-cmd.c:718
msgid "'internal-diff' option requires 'diff' option"
-msgstr ""
+msgstr "Option »internal-diff« erfordert Option »diff«"
-#: ../svn/log-cmd.c:606
+#: ../svn/log-cmd.c:722
msgid "'extensions' option requires 'diff' option"
-msgstr ""
+msgstr "Option »extensions« erfordert Option »diff«"
-# TODO: Duplicated message!!!!
-#: ../svn/log-cmd.c:625
+#: ../svn/log-cmd.c:727
+msgid "'depth' option requires 'diff' option"
+msgstr "Option »depth« erfordert Option »diff«"
+
+#: ../svn/log-cmd.c:743
msgid "-c and -r are mutually exclusive"
msgstr "-c und -r schließen einander aus"
-#: ../svn/log-cmd.c:652
+#: ../svn/log-cmd.c:775
#, c-format
msgid "Only relative paths can be specified after a URL for 'svn log', but '%s' is not a relative path"
msgstr "Mit »svn log« können nach einer URL nur relative Pfade angegeben werden, »%s« ist aber kein relativer Pfad"
-#: ../svn/log-cmd.c:697
+#: ../svn/log-cmd.c:821
#, c-format
msgid "cannot assign with 'with-revprop' option (drop the '=')"
msgstr "Kann nicht mit Option »with-revprop« zuweisen (»=« entfernen)"
-#: ../svn/main.c:136
+#: ../svn/merge-cmd.c:107 ../svn/merge-cmd.c:131
+#, c-format
+msgid "--- Merging\n"
+msgstr "--- Zusammenführung\n"
+
+#: ../svn/merge-cmd.c:175
+msgid "-r and -c can't be used with --reintegrate"
+msgstr "-r und -c können nicht mit --reintegrate verwendet werden"
+
+#: ../svn/merge-cmd.c:230
+msgid "Merge source required"
+msgstr "Die Zusammenführungsquelle muss angegeben werden"
+
+#: ../svn/merge-cmd.c:276
+msgid "Second revision required"
+msgstr "Eine zweite Revision muss angegeben werden"
+
+#: ../svn/merge-cmd.c:285 ../svn/merge-cmd.c:312 ../svn/mergeinfo-cmd.c:267
+#: ../svnadmin/svnadmin.c:1719 ../svnlook/svnlook.c:2061
+#: ../svnlook/svnlook.c:2254 ../svnlook/svnlook.c:2358
+#: ../svnlook/svnlook.c:2393
+msgid "Too many arguments given"
+msgstr "Zu viele Parameter angegeben"
+
+#: ../svn/merge-cmd.c:302
+msgid "Cannot specify a revision range with two URLs"
+msgstr "Die Angabe eines Revisionsbereichs mit zwei URLs ist nicht möglich"
+
+#: ../svn/merge-cmd.c:406
+msgid "--reintegrate cannot be used with --ignore-ancestry"
+msgstr "»--reintegrate« kann nicht mit »--ignore-ancestry« verwendet werden"
+
+#: ../svn/merge-cmd.c:411
+msgid "--reintegrate cannot be used with --record-only"
+msgstr "»--reintegrate« kann nicht mit »--record-only« verwendet werden"
+
+#: ../svn/merge-cmd.c:416
+msgid "--depth cannot be used with --reintegrate"
+msgstr "»--depth« kann nicht mit »--reintegrate« verwendet werden"
+
+#: ../svn/merge-cmd.c:421
+msgid "--force cannot be used with --reintegrate"
+msgstr "»--force« kann nicht mit »--reintegrate« verwendet werden"
+
+#: ../svn/merge-cmd.c:426
+msgid "--reintegrate can only be used with a single merge source"
+msgstr "»--reintegrate« kann nur mit einer einzelnen Zusammenführungsquelle verwendet werden"
+
+#: ../svn/merge-cmd.c:430
+msgid "--allow-mixed-revisions cannot be used with --reintegrate"
+msgstr "»--allow-mixed-revisions« kann nicht mit »--reintegrate« verwendet werden"
+
+#: ../svn/merge-cmd.c:445
+msgid ""
+"Merge tracking not possible, use --ignore-ancestry or\n"
+"fix invalid mergeinfo in target with 'svn propset'"
+msgstr ""
+"Zusammenführungsverfolgung nicht möglich, verwenden Sie »--ignore-ancestry« oder\n"
+"reparieren Sie die ungültigen Zusammenführungsinformationen im Ziel mit »svn propset«"
+
+#: ../svn/mergeinfo-cmd.c:171
+msgid "last full merge"
+msgstr "Letzte vollständige Zusammenführung"
+
+#: ../svn/mergeinfo-cmd.c:171
+msgid "youngest common ancestor"
+msgstr "Jüngster gemeinsame Vorfahre"
+
+#: ../svn/mergeinfo-cmd.c:172
+msgid "repository path"
+msgstr "Pfad im Projektarchiv"
+
+#: ../svn/mergeinfo-cmd.c:172
+msgid "tip of branch"
+msgstr "Spitze des Zweiges"
+
+#: ../svn/mergeinfo-cmd.c:264
+msgid "Not enough arguments given"
+msgstr "Nicht genügend Parameter angegeben"
+
+#: ../svn/mergeinfo-cmd.c:342
+msgid "--revision (-r) option valid only with --show-revs option"
+msgstr "Option »--revision« »--r« ist nur in Verbindung mit der Option »--show-revs« zulässig"
+
+#: ../svn/mergeinfo-cmd.c:346
+msgid "Depth specification options valid only with --show-revs option"
+msgstr "Angabe der Tiefe für die Operation ist nur in Verbindung mit der Option »--show-revs« zulässig"
+
+#: ../svn/mkdir-cmd.c:92
+msgid "Try 'svn add' or 'svn add --non-recursive' instead?"
+msgstr "Versuchen Sie »svn add« oder »svn add --non-recursive«."
+
+#: ../svn/mkdir-cmd.c:98
+msgid "Try 'svn mkdir --parents' instead?"
+msgstr "Versuchen Sie »svn mkdir --parents« stattdessen?"
+
+# number of text, property or tree conflicts remaining to be resolved
+#: ../svn/notify.c:132
+#, c-format
+msgid "%d remaining"
+msgid_plural "%d remaining"
+msgstr[0] "%d verbleibend"
+msgstr[1] "%d verbleibend"
+
+# number of already resolved text, property or tree conflicts
+#: ../svn/notify.c:141
+#, c-format
+msgid "and %d already resolved"
+msgid_plural "and %d already resolved"
+msgstr[0] "und %d bereits aufgelöst"
+msgstr[1] "und %d bereits aufgelöst"
+
+#: ../svn/notify.c:163 ../svn/status-cmd.c:93
+#, c-format
+msgid "Summary of conflicts:\n"
+msgstr "Konfliktübersicht:\n"
+
+#: ../svn/notify.c:169
+#, c-format
+msgid " Text conflicts: %d\n"
+msgstr " Textkonflikte: %d\n"
+
+#: ../svn/notify.c:173
+#, c-format
+msgid " Property conflicts: %d\n"
+msgstr " Eigenschaftskonflikte: %d\n"
+
+#: ../svn/notify.c:177
+#, c-format
+msgid " Tree conflicts: %d\n"
+msgstr " Baumkonflikte: %d\n"
+
+#: ../svn/notify.c:184
+#, c-format
+msgid " Text conflicts: %s (%s)\n"
+msgstr " Textkonflikte: %s (%s\n"
+
+#: ../svn/notify.c:189
+#, c-format
+msgid " Property conflicts: %s (%s)\n"
+msgstr " Eigenschaftskonflikte: %s (%s)\n"
+
+#: ../svn/notify.c:194
+#, c-format
+msgid " Tree conflicts: %s (%s)\n"
+msgstr " Baumkonflikte: %s (%s)\n"
+
+#: ../svn/notify.c:200
+#, c-format
+msgid " Skipped paths: %d\n"
+msgstr " Ãœbersprungene Pfade: %d\n"
+
+#: ../svn/notify.c:235
+#, c-format
+msgid "Skipped missing target: '%s'\n"
+msgstr "Fehlendes Ziel: »%s« übersprungen\n"
+
+#: ../svn/notify.c:242
+#, c-format
+msgid "Skipped target: '%s' -- copy-source is missing\n"
+msgstr "Ziel: »%s« übersprungen -- copy-source fehlt\n"
+
+#: ../svn/notify.c:249
+#, c-format
+msgid "Skipped '%s'\n"
+msgstr "Überspringe »%s«\n"
+
+#: ../svn/notify.c:256
+#, c-format
+msgid "Skipped '%s' -- An obstructing working copy was found\n"
+msgstr "Überspringe »%s« -- Eine blockierende Arbeitskopie wurde gefunden\n"
+
+#: ../svn/notify.c:263
+#, c-format
+msgid "Skipped '%s' -- Has no versioned parent\n"
+msgstr "Überspringe »%s« -- Hat keine versioniertes Elternelement\n"
+
+#: ../svn/notify.c:270
+#, c-format
+msgid "Skipped '%s' -- Access denied\n"
+msgstr "Überspringe »%s« -- Zugriff verweigert\n"
+
+#: ../svn/notify.c:277
+#, c-format
+msgid "Skipped '%s' -- Node remains in conflict\n"
+msgstr "Überspringe »%s« -- Knoten bleibt im Konflikt\n"
+
+#: ../svn/notify.c:358
+#, c-format
+msgid "Restored '%s'\n"
+msgstr "Wieder hergestellt »%s«\n"
+
+#: ../svn/notify.c:364
+#, c-format
+msgid "Reverted '%s'\n"
+msgstr "Rückgängig gemacht: »%s«\n"
+
+#: ../svn/notify.c:370
+#, c-format
+msgid "Failed to revert '%s' -- try updating instead.\n"
+msgstr "Wiederherstellen von »%s« schlug fehl -- Versuchen Sie statt dessen zu aktualisieren.\n"
+
+#: ../svn/notify.c:378
+#, c-format
+msgid "Resolved conflicted state of '%s'\n"
+msgstr "Konflikt von »%s« aufgelöst\n"
+
+#: ../svn/notify.c:473 ../svn/notify.c:513
+#, c-format
+msgid "> applied hunk ## -%lu,%lu +%lu,%lu ## with offset %s"
+msgstr "> Abschnitt ## -%lu,%lu +%lu,%lu ## mit Versatz %s angewandt"
+
+#: ../svn/notify.c:490 ../svn/notify.c:527
+#, c-format
+msgid "> applied hunk @@ -%lu,%lu +%lu,%lu @@ with offset %s"
+msgstr "> Abschnitt @@ -%lu,%lu +%lu,%lu @@ mit Versatz %s angewandt"
+
+#: ../svn/notify.c:548
+#, c-format
+msgid "> applied hunk ## -%lu,%lu +%lu,%lu ## with fuzz %lu (%s)\n"
+msgstr "> Abschnitt ## -%lu,%lu +%lu,%lu ## mit Unschärfe %lu (%s) angewandt\n"
+
+#: ../svn/notify.c:558
+#, c-format
+msgid "> applied hunk @@ -%lu,%lu +%lu,%lu @@ with fuzz %lu\n"
+msgstr "> Abschnitt @@ -%lu,%lu +%lu,%lu @@ mit Unschärfe %lu angewandt\n"
+
+#: ../svn/notify.c:576
+#, c-format
+msgid "> rejected hunk ## -%lu,%lu +%lu,%lu ## (%s)\n"
+msgstr "> Abschnitt ## -%lu,%lu +%lu,%lu ## (%s) zurückgewiesen\n"
+
+#: ../svn/notify.c:585
+#, c-format
+msgid "> rejected hunk @@ -%lu,%lu +%lu,%lu @@\n"
+msgstr "> Abschnitt @@ -%lu,%lu +%lu,%lu @@ zurückgewiesen\n"
+
+#: ../svn/notify.c:599
+#, c-format
+msgid "> hunk ## -%lu,%lu +%lu,%lu ## already applied (%s)\n"
+msgstr "> Abschnitt ## -%lu,%lu +%lu,%lu ## bereits angewandt (%s)\n"
+
+#: ../svn/notify.c:609
+#, c-format
+msgid "> hunk @@ -%lu,%lu +%lu,%lu @@ already applied\n"
+msgstr "> Abschnitt @@ -%lu,%lu +%lu,%lu @@ bereits angewandt\n"
+
+# Currently this is used for checkouts and switches too. If we
+# want different output, we'll have to add new actions.
+#: ../svn/notify.c:669
+#, c-format
+msgid ""
+"\n"
+"Fetching external item into '%s':\n"
+msgstr ""
+"\n"
+"Hole externen Verweis nach »%s«:\n"
+
+#: ../svn/notify.c:695
+#, c-format
+msgid "Error handling externals definition for '%s':"
+msgstr "Fehler beim Umgang mit der Definition des externen Verweises für »%s«:"
+
+#: ../svn/notify.c:708
+#, c-format
+msgid "Updating '%s':\n"
+msgstr "Aktualisiere »%s«:\n"
+
+#: ../svn/notify.c:722
+#, c-format
+msgid "Exported external at revision %ld.\n"
+msgstr "Externer Verweis exportiert, Revision %ld.\n"
+
+#: ../svn/notify.c:723
+#, c-format
+msgid "Exported revision %ld.\n"
+msgstr "Exportiert, Revision %ld.\n"
+
+#: ../svn/notify.c:731
+#, c-format
+msgid "Checked out external at revision %ld.\n"
+msgstr "Externer Verweis ausgecheckt, Revision %ld.\n"
+
+#: ../svn/notify.c:732
+#, c-format
+msgid "Checked out revision %ld.\n"
+msgstr "Ausgecheckt, Revision %ld.\n"
+
+#: ../svn/notify.c:743
+#, c-format
+msgid "Updated external to revision %ld.\n"
+msgstr "Externer Verweis aktualisiert zu Revision %ld.\n"
+
+#: ../svn/notify.c:744
+#, c-format
+msgid "Updated to revision %ld.\n"
+msgstr "Aktualisiert zu Revision %ld.\n"
+
+#: ../svn/notify.c:752
+#, c-format
+msgid "External at revision %ld.\n"
+msgstr "Externer Verweis, Revision %ld.\n"
+
+#: ../svn/notify.c:753
+#, c-format
+msgid "At revision %ld.\n"
+msgstr "Revision %ld.\n"
+
+#: ../svn/notify.c:765
+#, c-format
+msgid "External export complete.\n"
+msgstr "Export des externen Verweises abgeschlossen.\n"
+
+#: ../svn/notify.c:766
+#, c-format
+msgid "Export complete.\n"
+msgstr "Export abgeschlossen.\n"
+
+#: ../svn/notify.c:773
+#, c-format
+msgid "External checkout complete.\n"
+msgstr "Auschecken des externen Verweises abgeschlossen.\n"
+
+#: ../svn/notify.c:774
+#, c-format
+msgid "Checkout complete.\n"
+msgstr "Auschecken abgeschlossen.\n"
+
+#: ../svn/notify.c:781
+#, c-format
+msgid "External update complete.\n"
+msgstr "Aktualisierung des externen Verweises abgeschlossen.\n"
+
+#: ../svn/notify.c:782
+#, c-format
+msgid "Update complete.\n"
+msgstr "Aktualisierung abgeschlossen.\n"
+
+#: ../svn/notify.c:798
+#, c-format
+msgid ""
+"\n"
+"Performing status on external item at '%s':\n"
+msgstr ""
+"\n"
+"Hole Status des externen Verweises in »%s«:\n"
+
+#: ../svn/notify.c:806
+#, c-format
+msgid "Status against revision: %6ld\n"
+msgstr "Status bezogen auf Revision: %6ld\n"
+
+#: ../svn/notify.c:815
+#, c-format
+msgid "Sending copy of %s\n"
+msgstr "Sende Kopie von %s\n"
+
+#: ../svn/notify.c:816
+#, c-format
+msgid "Sending %s\n"
+msgstr "Sende %s\n"
+
+#: ../svn/notify.c:827
+#, c-format
+msgid "Adding copy of (bin) %s\n"
+msgstr "Füge Kopie hinzu (binär) %s\n"
+
+#: ../svn/notify.c:828
+#, c-format
+msgid "Adding (bin) %s\n"
+msgstr "Füge hinzu (binär) %s\n"
+
+#: ../svn/notify.c:836
+#, c-format
+msgid "Adding copy of %s\n"
+msgstr "Füge Kopie hinzu %s\n"
+
+#: ../svn/notify.c:837
+#, c-format
+msgid "Adding %s\n"
+msgstr "Füge hinzu %s\n"
+
+#: ../svn/notify.c:846
+#, c-format
+msgid "Deleting copy of %s\n"
+msgstr "Lösche Kopie von %s\n"
+
+#: ../svn/notify.c:847
+#, c-format
+msgid "Deleting %s\n"
+msgstr "Lösche %s\n"
+
+#: ../svn/notify.c:856
+#, c-format
+msgid "Replacing copy of %s\n"
+msgstr "Ersetze Kopie von %s\n"
+
+#: ../svn/notify.c:857
+#, c-format
+msgid "Replacing %s\n"
+msgstr "Ersetze %s\n"
+
+#: ../svn/notify.c:867 ../svnsync/sync.c:327
+#, c-format
+msgid "Transmitting file data "
+msgstr "Ãœbertrage Daten "
+
+#: ../svn/notify.c:876 ../svnadmin/svnadmin.c:1698
+#, c-format
+msgid "'%s' locked by user '%s'.\n"
+msgstr "»%s« gesperrt durch »%s«.\n"
+
+#: ../svn/notify.c:882
+#, c-format
+msgid "'%s' unlocked.\n"
+msgstr "»%s« freigegeben.\n"
+
+#: ../svn/notify.c:909
+#, c-format
+msgid "--- Merging differences between repository URLs into '%s':\n"
+msgstr "-- Zusammenführen der Unterschiede zwischen Projektarchiv-URLs in »%s«:\n"
+
+#: ../svn/notify.c:914
+#, c-format
+msgid "--- Merging r%ld into '%s':\n"
+msgstr "-- Zusammenführen von r%ld in »%s«:\n"
+
+#: ../svn/notify.c:918
+#, c-format
+msgid "--- Reverse-merging r%ld into '%s':\n"
+msgstr "-- Rückwärtiges Zusammenführen von r%ld in »%s«:\n"
+
+#: ../svn/notify.c:922
+#, c-format
+msgid "--- Merging r%ld through r%ld into '%s':\n"
+msgstr "-- Zusammenführen von r%ld bis r%ld in »%s«:\n"
+
+#: ../svn/notify.c:928
+#, c-format
+msgid "--- Reverse-merging r%ld through r%ld into '%s':\n"
+msgstr "-- Rückwärtiges Zusammenführen von r%ld bis r%ld in »%s«:\n"
+
+#: ../svn/notify.c:940
+#, c-format
+msgid "--- Recording mergeinfo for merge between repository URLs into '%s':\n"
+msgstr "-- Aufzeichnung der Informationen für Zusammenführung zwischen Projektarchiv-URLs in »%s«:\n"
+
+#: ../svn/notify.c:950
+#, c-format
+msgid "--- Recording mergeinfo for merge of r%ld into '%s':\n"
+msgstr "-- Aufzeichnung der Informationen für Zusammenführung von r%ld in »%s«:\n"
+
+#: ../svn/notify.c:955
+#, c-format
+msgid "--- Recording mergeinfo for reverse merge of r%ld into '%s':\n"
+msgstr "-- Aufzeichnung der Informationen für rückwärtiges Zusammenführen von r%ld in »%s«:\n"
+
+#: ../svn/notify.c:960
+#, c-format
+msgid "--- Recording mergeinfo for merge of r%ld through r%ld into '%s':\n"
+msgstr "-- Aufzeichnung der Informationen für Zusammenführung von r%ld bis r%ld in »%s«:\n"
+
+#: ../svn/notify.c:965
+#, c-format
+msgid "--- Recording mergeinfo for reverse merge of r%ld through r%ld into '%s':\n"
+msgstr "-- Aufzeichnung der Informationen für rückwärtiges Zusammenführen von r%ld bis r%ld in »%s«:\n"
+
+#: ../svn/notify.c:975
+#, c-format
+msgid "--- Eliding mergeinfo from '%s':\n"
+msgstr "-- Entfernung der Zusammenführungsinformationen von »%s«:\n"
+
+#: ../svn/notify.c:983
+#, c-format
+msgid "--- Merging differences between foreign repository URLs into '%s':\n"
+msgstr "-- Zusammenführen der Unterschiede zwischen fremden Projektarchiv-URLs in »%s«:\n"
+
+#: ../svn/notify.c:989
+#, c-format
+msgid "--- Merging (from foreign repository) r%ld into '%s':\n"
+msgstr "-- Zusammenführen (aus fremden Projektarchiv) von r%ld in »%s«:\n"
+
+#: ../svn/notify.c:994
+#, c-format
+msgid "--- Reverse-merging (from foreign repository) r%ld into '%s':\n"
+msgstr "-- Rückwärtiges Zusammenführen (aus fremden Projektarchiv) von r%ld in »%s«:\n"
+
+#: ../svn/notify.c:999
+#, c-format
+msgid "--- Merging (from foreign repository) r%ld through r%ld into '%s':\n"
+msgstr "-- Zusammenführen (aus fremden Projektarchiv) von r%ld bis r%ld in »%s«:\n"
+
+#: ../svn/notify.c:1005
+#, c-format
+msgid "--- Reverse-merging (from foreign repository) r%ld through r%ld into '%s':\n"
+msgstr "-- Rückwärtiges Zusammenführen (aus fremden Projektarchiv) von r%ld bis r%ld in »%s«:\n"
+
+#: ../svn/notify.c:1041
+#, c-format
+msgid "property '%s' set on '%s'\n"
+msgstr "Eigenschaft »%s« für »%s« gesetzt\n"
+
+#: ../svn/notify.c:1049
+#, c-format
+msgid "property '%s' deleted from '%s'.\n"
+msgstr "Eigenschaft »%s« wurde von »%s« gelöscht.\n"
+
+# TODO: Compare msgid "Attempted to open non-existent child node '%s'"
+# (non-, vs. non; Attempted vs. Attempting)
+#: ../svn/notify.c:1057
+#, c-format
+msgid "Attempting to delete nonexistent property '%s' on '%s'\n"
+msgstr "Versuchte, nicht existierende Eigenschaft »%s« von »%s« zu löschen\n"
+
+#: ../svn/notify.c:1066
+#, c-format
+msgid "property '%s' set on repository revision %ld\n"
+msgstr "Eigenschaft »%s« wurde für Revision %ld im Projektarchiv gesetzt\n"
+
+#: ../svn/notify.c:1074
+#, c-format
+msgid "property '%s' deleted from repository revision %ld\n"
+msgstr "Eigenschaft »%s« wurde von Revision %ld im Projektarchiv gelöscht\n"
+
+#: ../svn/notify.c:1081
+#, c-format
+msgid "Upgraded '%s'\n"
+msgstr "In neues Format gebracht: »%s«\n"
+
+#: ../svn/notify.c:1087
+#, c-format
+msgid "Redirecting to URL '%s':\n"
+msgstr "Umleitung zur URL »%s«:\n"
+
+#: ../svn/notify.c:1115
+#, c-format
+msgid "--- Copying from foreign repository URL '%s':\n"
+msgstr "-- Kopieren aus fremdem Projektarchiv bei URL »%s«:\n"
+
+#: ../svn/notify.c:1124
+#, c-format
+msgid "Breaking move with source path '%s'\n"
+msgstr "Zertrennung der Verschiebeoperation mit Quellpfad »%s«\n"
+
+#: ../svn/propdel-cmd.c:88
+#, c-format
+msgid "Cannot specify revision for deleting versioned property '%s'"
+msgstr "Zum Löschen der versionierten Eigenschaft »%s« darf keine Revision angegeben werden"
+
+#: ../svn/propedit-cmd.c:62 ../svn/propedit-cmd.c:341
+#, c-format
+msgid "Set new value for property '%s' on '%s'\n"
+msgstr "Neuer Wert für Eigenschaft »%s« für »%s« gesetzt\n"
+
+#: ../svn/propedit-cmd.c:96 ../svn/propset-cmd.c:97
+msgid "--encoding option applies only to textual Subversion-controlled properties"
+msgstr "Option --encoding ist nur für textbasierte von Subversion kontrollierte Eigenschaften angebbar"
+
+#: ../svn/propedit-cmd.c:162
+#, c-format
+msgid "Set new value for property '%s' on revision %ld\n"
+msgstr "Neuen Wert für Eigenschaft »%s« in Revision %ld gesetzt\n"
+
+#: ../svn/propedit-cmd.c:168
+#, c-format
+msgid "No changes to property '%s' on revision %ld\n"
+msgstr "Eigenschaft »%s« in Revision %ld nicht geändert\n"
+
+#: ../svn/propedit-cmd.c:176
+#, c-format
+msgid "Cannot specify revision for editing versioned property '%s'"
+msgstr "Beim Bearbeiten der versionierten Eigenschaft »%s« darf keine Revision angegeben werden"
+
+#: ../svn/propedit-cmd.c:204 ../svn/propset-cmd.c:172
+msgid "Explicit target argument required"
+msgstr "Expliziter Zielparameter benötigt"
+
+#: ../svn/propedit-cmd.c:271
+#, c-format
+msgid "'%s' does not appear to be a working copy path"
+msgstr "»%s« scheint kein Arbeitskopiepfad zu sein"
+
+#: ../svn/propedit-cmd.c:348
+#, c-format
+msgid "No changes to property '%s' on '%s'\n"
+msgstr "Keine Änderungen der Eigenschaft »%s« für »%s«\n"
+
+#: ../svn/propget-cmd.c:66
+msgid "Error writing to stream"
+msgstr "Fehler beim Schreiben in Datenstrom"
+
+#: ../svn/propget-cmd.c:186 ../svn/proplist-cmd.c:156
+#: ../svn/proplist-cmd.c:160 ../svnlook/svnlook.c:1754
+#: ../svnlook/svnlook.c:1908
+#, c-format
+msgid ""
+"Inherited properties on '%s',\n"
+"from '%s':\n"
+msgstr ""
+"Geerbte Eigenschaften von »%s«,\n"
+"geerbt von »%s«:\n"
+
+#. Not a --revprop
+#: ../svn/propget-cmd.c:196 ../svn/proplist-cmd.c:175
+#: ../svnlook/svnlook.c:1790 ../svnlook/svnlook.c:1943
+#, c-format
+msgid "Properties on '%s':\n"
+msgstr "Eigenschaften von »%s«:\n"
+
+#: ../svn/propget-cmd.c:326
+msgid "--verbose cannot be used with --revprop or --strict or --xml"
+msgstr "»--verbose« kann nicht mit »--revprop«, »--strict« oder »--xml« verwendet werden"
+
+#: ../svn/propget-cmd.c:358 ../svn/proplist-cmd.c:214
+msgid "--show-inherited-props can't be used with --revprop"
+msgstr "»--show-inherited-props« kann nicht mit »--revprop« verwendet werden"
+
+#: ../svn/propget-cmd.c:425
+msgid "Strict output of property values only available for single-target, non-recursive propget operations"
+msgstr "Strikte Ausgabe von Eigenschaftswerten ist nur für einzelne Ziele und nicht-rekursive propget-Operationen verfügbar"
+
+#: ../svn/proplist-cmd.c:246
+#, c-format
+msgid "Unversioned properties on revision %ld:\n"
+msgstr "Nicht versionierte Eigenschaft in Revision %ld:\n"
+
+#: ../svn/proplist-cmd.c:321
+msgid "Could not display properties of all targets because some targets don't exist"
+msgstr "Konnte Eigenschaften nicht für alle Ziele anzeigen, da einige Ziele nicht existieren"
+
+#: ../svn/proplist-cmd.c:326
+msgid "Could not display properties of all targets because some targets are not versioned"
+msgstr "Konnte Eigenschaften nicht für alle Ziele anzeigen, da einige Ziele nicht versioniert sind"
+
+#: ../svn/props.c:66
+msgid "Must specify the revision as a number, a date or 'HEAD' when operating on a revision property"
+msgstr "Die Revision muss als Zahl, Datum oder »HEAD« angegeben werden, wenn auf eine Revisionseigenschaft zugegriffen wird"
+
+#: ../svn/props.c:73
+msgid "Wrong number of targets specified"
+msgstr "Falsche Anzahl Ziele angegeben"
+
+#: ../svn/props.c:82
+msgid "Either a URL or versioned item is required"
+msgstr "Eine URL oder ein versioniertes Objekt muss angegeben werden"
+
+#: ../svn/props.c:107
+#, c-format
+msgid ""
+"To turn off the %s property, use 'svn propdel';\n"
+"setting the property to '%s' will not turn it off."
+msgstr ""
+"Um die Eigenschaft %s abzuschalten, ist »svn propdel« zu verwenden;\n"
+"setzen der Eigenschaft auf »%s« wird sie nicht ausschalten."
+
+#: ../svn/props.c:177
+#, c-format
+msgid "(To set the '%s' property, re-run with '--force'.)"
+msgstr "(Verwenden Sie »--force« um das Setzen der Eigenschaft »%s« zu erzwingen)"
+
+#: ../svn/props.c:182
+#, c-format
+msgid "(To edit the '%s' property, re-run with '--force'.)"
+msgstr "(Verwenden Sie »--force« um das Bearbeiten der Eigenschaft »%s«zu erzwingen)"
+
+#: ../svn/props.c:188
+#, c-format
+msgid "(To use the '%s' property, re-run with '--force'.)"
+msgstr "(Verwenden Sie »--force« um die Verwendung der Eigenschaft »%s« zu erzwingen)"
+
+#: ../svn/props.c:202
+#, c-format
+msgid "'%s' is not a valid %s property name; re-run with '--force' to set it"
+msgstr "»%s« ist kein gültiger »%s«-Eigenschaftsname; Verwenden Sie »--force« um das Setzen zu erzwingen"
+
+#: ../svn/props.c:208
+#, c-format
+msgid "'%s' is not a valid %s property name; re-run with '--force' to edit it"
+msgstr "»%s« ist kein gültiger »%s«-Eigenschaftsname; Verwenden Sie »--force« um das Bearbeiten zu erzwingen"
+
+#: ../svn/props.c:215
+#, c-format
+msgid "'%s' is not a valid %s property name; re-run with '--force' to use it"
+msgstr "»%s« ist kein gültiger »%s«-Eigenschaftsname; Verwenden Sie »--force« um ihn zu verwenden"
+
+#: ../svn/props.c:281 ../svn/props.c:332
+#, c-format
+msgid ""
+"'%s' is not a valid %s property name; did you mean '%s'?\n"
+"%s"
+msgstr ""
+"»%s« ist kein gültiger »%s«-Eigenschaftsname; Meinten Sie »%s«?\n"
+"%s"
+
+#: ../svn/props.c:340
+#, c-format
+msgid ""
+"'%s' is not a valid %s property name\n"
+"Did you mean '%s' or '%s'?\n"
+"%s"
+msgstr ""
+"»%s« ist kein gültiger »%s«-Eigenschaftsname\n"
+"Meinten Sie »%s« oder »%s«?\n"
+"%s"
+
+#: ../svn/props.c:350
+#, c-format
+msgid ""
+"'%s' is not a valid %s property name\n"
+"Did you mean '%s', '%s' or '%s'?\n"
+"%s"
+msgstr ""
+"»%s« ist kein gültiger »%s«-Eigenschaftsname\n"
+"Meinten Sie »%s«, »%s« oder »%s«?\n"
+"%s"
+
+#: ../svn/propset-cmd.c:132
+#, c-format
+msgid "Cannot specify revision for setting versioned property '%s'"
+msgstr "Beim Setzen der versionierten Eigenschaft »%s« darf keine Revision angegeben werden"
+
+#: ../svn/propset-cmd.c:165
+#, c-format
+msgid "Explicit target required ('%s' interpreted as prop value)"
+msgstr "Explizites Ziel erforderlich (»%s« als Eigenschaftswert interpretiert)"
+
+#: ../svn/resolve-cmd.c:79
+msgid "missing --accept option"
+msgstr "fehlende Option --accept"
+
+#: ../svn/resolve-cmd.c:84
+msgid "invalid 'accept' ARG"
+msgstr "ungültiger Parameter »accept«"
+
+#: ../svn/resolve-cmd.c:127
+msgid "Failure occurred resolving one or more conflicts"
+msgstr "Fehler bei der Auflösung einer oder mehrerer Konflikte"
+
+#: ../svn/revert-cmd.c:77
+msgid "Try 'svn revert --depth infinity' instead?"
+msgstr "Versuchen Sie »svn revert --depth infinity« stattdessen?"
+
+#: ../svn/status-cmd.c:97
+#, c-format
+msgid " Text conflicts: %u\n"
+msgstr " Textkonflikte: %u\n"
+
+#: ../svn/status-cmd.c:101
+#, c-format
+msgid " Property conflicts: %u\n"
+msgstr " Eigenschaftskonflikte: %u\n"
+
+#: ../svn/status-cmd.c:105
+#, c-format
+msgid " Tree conflicts: %u\n"
+msgstr " Baumkonflikte: %u\n"
+
+#: ../svn/status-cmd.c:398
+#, c-format
+msgid ""
+"\n"
+"--- Changelist '%s':\n"
+msgstr ""
+"\n"
+"--- Änderungsliste »%s«:\n"
+
+#: ../svn/status.c:318
+#, c-format
+msgid "swapped places with %s"
+msgstr "Platz mit %s vertauscht"
+
+#: ../svn/status.c:333
+#, c-format
+msgid "moved from %s"
+msgstr "Verschoben von %s"
+
+#: ../svn/status.c:345
+#, c-format
+msgid "moved to %s"
+msgstr "Verschoben nach %s"
+
+#: ../svn/svn.c:147
msgid "force operation to run"
msgstr "Durchführung des Befehls erzwingen"
-#: ../svn/main.c:138
+#: ../svn/svn.c:149
msgid "force validity of log message source"
msgstr "Gültigkeit der Quelle für die Logmeldung erzwingen"
-#: ../svn/main.c:139 ../svn/main.c:140 ../svnadmin/main.c:244
-#: ../svnadmin/main.c:247 ../svndumpfilter/main.c:916
-#: ../svndumpfilter/main.c:919 ../svnlook/main.c:103 ../svnlook/main.c:115
-#: ../svnsync/main.c:212 ../svnsync/main.c:214
+#: ../svn/svn.c:150 ../svn/svn.c:151 ../svnadmin/svnadmin.c:208
+#: ../svnadmin/svnadmin.c:211 ../svndumpfilter/svndumpfilter.c:1048
+#: ../svndumpfilter/svndumpfilter.c:1051 ../svnlook/svnlook.c:114
+#: ../svnlook/svnlook.c:126 ../svnsync/svnsync.c:244 ../svnsync/svnsync.c:246
msgid "show help on a subcommand"
msgstr "zeige Hilfe zu einem Unterbefehl"
-#: ../svn/main.c:141
+#: ../svn/svn.c:152
msgid "specify log message ARG"
msgstr "PAR als Logmeldung verwenden"
-#: ../svn/main.c:142
+#: ../svn/svn.c:153
msgid "print nothing, or only summary information"
msgstr "nichts oder nur Zusammenfassungen ausgeben"
-#: ../svn/main.c:143
+#: ../svn/svn.c:154
msgid "descend recursively, same as --depth=infinity"
msgstr ""
"rekursiv absteigen, das gleiche wie\n"
" --depth=infinity"
-#: ../svn/main.c:144
+#: ../svn/svn.c:155
msgid "obsolete; try --depth=files or --depth=immediates"
msgstr ""
"veraltet; versuchen Sie --depth=files oder\n"
" --depth=immediates"
-#: ../svn/main.c:146
-msgid "the change made by revision ARG (like -r ARG-1:ARG)\n"
-msgstr "die in Revision PAR durchgeführte Änderung (wie -r PAR-1:PAR)\n"
-
-#: ../svn/main.c:150
-msgid "ARG (some commands also take ARG1:ARG2 range)\n"
-msgstr "PAR (einige Kommandos akzeptieren auch Bereiche PAR1:PAR2)\n"
+#: ../svn/svn.c:157
+msgid ""
+"the change made by revision ARG (like -r ARG-1:ARG)\n"
+" If ARG is negative this is like -r ARG:ARG-1\n"
+" If ARG is of the form ARG1-ARG2 then this is like\n"
+" ARG1:ARG2, where ARG1 is inclusive"
+msgstr ""
+"Durch Revision PAR erzeugte Änderung (wie -r PAR-1:PAR)\n"
+" Falls PAR negativ ist, gleichbedeutend mit -r PAR:PAR-1\n"
+" Falls PAR die Form PAR1-PAR2 hat, dann wie\n"
+" PAR1:PAR2, wobei PAR1 eingeschlossen ist"
-#: ../svn/main.c:165
+#: ../svn/svn.c:165
+msgid ""
+"ARG (some commands also take ARG1:ARG2 range)\n"
+" A revision argument can be one of:\n"
+" NUMBER revision number\n"
+" '{' DATE '}' revision at start of the date\n"
+" 'HEAD' latest in repository\n"
+" 'BASE' base rev of item's working copy\n"
+" 'COMMITTED' last commit at or before BASE\n"
+" 'PREV' revision just before COMMITTED"
+msgstr ""
+"PAR (manche Befehle akzeptieren auch einen\n"
+" Wertebereich PAR1:PAR2)\n"
+" Ein Revisionsparameter kann sein:\n"
+" NUMMER Revisionsnummer\n"
+" »{«DATUM»}« Revision zum Startdatum\n"
+" »HEAD« neueste Revision im Projektarchiv\n"
+" »BASE« Basisrevision der Arbeitskopie\n"
+" »COMMITTED« letzte übertragene Revision zu\n"
+" oder vor BASE\n"
+" »PREV« letzte Revision vor COMMITTED"
+
+#: ../svn/svn.c:180
msgid "read log message from file ARG"
msgstr "Logmeldung aus Datei PAR lesen"
-#: ../svn/main.c:167
+#: ../svn/svn.c:182
msgid "give output suitable for concatenation"
msgstr "Ausgabe für Verkettung formatieren"
-#: ../svn/main.c:169
+#: ../svn/svn.c:184
msgid "treat value as being in charset encoding ARG"
msgstr ""
"Wert behandeln, als sei er in der Zeichenkodierung\n"
" PAR"
-#: ../svn/main.c:170 ../svnadmin/main.c:250 ../svndumpfilter/main.c:922
-#: ../svnlook/main.c:145 ../svnrdump/svnrdump.c:89 ../svnserve/main.c:220
-#: ../svnsync/main.c:210 ../svnversion/main.c:135
+#: ../svn/svn.c:185 ../svnadmin/svnadmin.c:214
+#: ../svndumpfilter/svndumpfilter.c:1054 ../svnlook/svnlook.c:168
+#: ../svnrdump/svnrdump.c:144 ../svnserve/svnserve.c:287
+#: ../svnsync/svnsync.c:242 ../svnversion/svnversion.c:141
msgid "show program version information"
msgstr "Zeige Versionsinformationen des Programms"
-#: ../svn/main.c:171
+#: ../svn/svn.c:186
msgid "print extra information"
msgstr "zusätzliche Informationen ausgeben"
-#: ../svn/main.c:172
+#: ../svn/svn.c:187
msgid "display update information"
msgstr "Aktualisierungsinformation ausgeben"
-#: ../svn/main.c:173 ../svnrdump/svnrdump.c:81
+#: ../svn/svn.c:188 ../svnrdump/svnrdump.c:128
msgid "specify a username ARG"
msgstr "Benutzername PAR angeben"
-#: ../svn/main.c:174 ../svnrdump/svnrdump.c:82
+#: ../svn/svn.c:189 ../svnrdump/svnrdump.c:130
msgid "specify a password ARG"
msgstr "Passwort PAR angeben"
-#: ../svn/main.c:176
-msgid "Default: '-u'. When Subversion is invoking an\n"
-msgstr ""
+#: ../svn/svn.c:191
+msgid ""
+"Specify differencing options for external diff or\n"
+" internal diff or blame. Default: '-u'. Options are\n"
+" separated by spaces. Internal diff and blame take:\n"
+" -u, --unified: Show 3 lines of unified context\n"
+" -b, --ignore-space-change: Ignore changes in\n"
+" amount of white space\n"
+" -w, --ignore-all-space: Ignore all white space\n"
+" --ignore-eol-style: Ignore changes in EOL style\n"
+" -p, --show-c-function: Show C function name"
+msgstr ""
+"Gibt Optionen für ein externes Vergleichsprogramm oder internes\n"
+" Programm zum Vergleichen oder Annotieren an.\n"
+" Vorgabe: »-u«. Optionen werden durch Leerzeichen\n"
+" getrennt angegeben. Das interne Programm zum\n"
+" Vergleichen und Annotieren kennt folgende Optionen:\n"
+" -u (--unified):\n"
+" Gibt 3 Zeilen Standardkontext aus.\n"
+" -b (--ignore-space-change):\n"
+" Ignoriert Änderungen in der Anzahl von\n"
+" Leerzeichen.\n"
+" -w (--ignore-all-space):\n"
+" Ignoriert sämtliche Leerzeichen.\n"
+" --ignore-eol-style:\n"
+" Ignoriert Änderungen im Zeilenendestil.\n"
+" -p (--show-c-function):\n"
+" Zeigt C-Funktionsname in Diff-Ausgabe."
-#: ../svn/main.c:208
+#: ../svn/svn.c:209
msgid "pass contents of file ARG as additional args"
msgstr ""
"Inhalt der Datei PAR als zusätzliche Parameter\n"
" übergeben"
-#: ../svn/main.c:210
-#, fuzzy
-msgid "limit operation by depth ARG ('empty', 'files',\n"
+#: ../svn/svn.c:211
+msgid ""
+"limit operation by depth ARG ('empty', 'files',\n"
+" 'immediates', or 'infinity')"
msgstr ""
-"begrenzt Operation durch Tiefe PAR (»empty«,\n"
-" »files«, »immediates« oder »infinity«)"
+"begrenzt Operation auf Tiefe PAR (»empty«, »files«,\n"
+" »immediates« oder »infinity«)"
-#: ../svn/main.c:214
-msgid "set new working copy depth to ARG ('exclude',\n"
+#: ../svn/svn.c:215
+msgid ""
+"set new working copy depth to ARG ('exclude',\n"
+" 'empty', 'files', 'immediates', or 'infinity')"
msgstr ""
+"setzt eine neue Tiefe PAR der Arbeitskopie (»exclude«,\n"
+" »empty«, »files«, »immediates« oder »infinity«)"
-#: ../svn/main.c:217 ../svnlook/main.c:148
+#: ../svn/svn.c:218 ../svnlook/svnlook.c:171
msgid "output in XML"
-msgstr "Ausgabe in XML"
+msgstr "gibt XML aus"
-#: ../svn/main.c:218
+#: ../svn/svn.c:219
msgid "use strict semantics"
-msgstr "Strikte Semantik anwenden"
+msgstr "wendet strikte Semantik an"
-#: ../svn/main.c:220
+#: ../svn/svn.c:221
msgid "do not cross copies while traversing history"
-msgstr "Log-Ausgabe endet bei Kopieroperationen"
+msgstr "beendet Log-Ausgabe bei Kopieroperationen"
-#: ../svn/main.c:222
-msgid "disregard default and svn:ignore property ignores"
+#: ../svn/svn.c:223
+msgid ""
+"disregard default and svn:ignore and\n"
+" svn:global-ignores property ignores"
msgstr ""
-"globale »ignore«- und »svn:ignore«-Einstellungen\n"
-" nicht beachten"
+"ignoriert Einstellungen aus »global-ignores« und den\n"
+" Eigenschaften »svn:ignore« und »svn:global-ignores«"
-#: ../svn/main.c:224 ../svnrdump/svnrdump.c:85 ../svnsync/main.c:172
+#: ../svn/svn.c:227 ../svnrdump/svnrdump.c:140 ../svnsync/svnsync.c:188
msgid "do not cache authentication tokens"
msgstr "Anmeldeinformationen nicht zwischenspeichern"
-#: ../svn/main.c:226
-msgid "accept unknown SSL server certificates without\n"
+#: ../svn/svn.c:229 ../svnrdump/svnrdump.c:154 ../svnsync/svnsync.c:198
+msgid ""
+"accept SSL server certificates from unknown\n"
+" certificate authorities without prompting (but only\n"
+" with '--non-interactive')"
msgstr ""
+"akzeptiert SSL-Zertifikate von unbekannten\n"
+" Ausstellern ohne Nachfrage (aber nur\n"
+" mit »--non-interactive«)"
-#: ../svn/main.c:230 ../svnrdump/svnrdump.c:83 ../svnsync/main.c:170
-msgid "do no interactive prompting"
-msgstr "keine interaktiven Rückfragen ausgeben"
+#: ../svn/svn.c:235 ../svnrdump/svnrdump.c:132 ../svnsync/svnsync.c:180
+msgid ""
+"do no interactive prompting (default is to prompt\n"
+" only if standard input is a terminal device)"
+msgstr ""
+"verhindert interaktive Nachfragen (Standard sind Nachfragen\n"
+" nur wenn die Standardeingabe ein Terminal ist)"
+
+#: ../svn/svn.c:239 ../svnrdump/svnrdump.c:136 ../svnsync/svnsync.c:184
+msgid ""
+"do interactive prompting even if standard input\n"
+" is not a terminal device"
+msgstr ""
+"erzwingt interaktive Nachfragen auch wenn die\n"
+" Standardeingabe kein Terminal ist"
-#: ../svn/main.c:232
+#: ../svn/svn.c:243
msgid "try operation but make no changes"
msgstr "Operation testen, aber keine Änderungen durchführen"
-#: ../svn/main.c:234 ../svnlook/main.c:124
-msgid "do not print differences for deleted files"
-msgstr "keine Unterschiede für gelöschte Dateien ausgeben"
+#: ../svn/svn.c:245
+msgid "disable merge tracking; diff nodes as if related"
+msgstr "deaktiviert Zusammenführungsverfolgung; erzeugt Unterschiede als ob Knoten verwandt wären"
-#: ../svn/main.c:236
-msgid "notice ancestry when calculating differences"
-msgstr ""
-"beim Berechnen von Differenzen Vorgänger\n"
-" berücksichtigen"
-
-#: ../svn/main.c:238
-msgid "ignore ancestry when calculating merges"
-msgstr "beim Zusammenführen Vorgänger ignorieren"
-
-#: ../svn/main.c:240
+#: ../svn/svn.c:247
msgid "ignore externals definitions"
msgstr "»svn:externals«-Definitionen ignorieren"
-#: ../svn/main.c:241
-msgid "use ARG as diff command"
-msgstr "PAR als Vergleichsprogramm verwenden"
-
-#: ../svn/main.c:242
+#: ../svn/svn.c:248
msgid "use ARG as merge command"
msgstr "PAR als Konflikteditor verwenden"
-#: ../svn/main.c:243
+#: ../svn/svn.c:249
msgid "use ARG as external editor"
msgstr "PAR als externen Editor verwenden"
-#: ../svn/main.c:245
+#: ../svn/svn.c:251
msgid "merge only mergeinfo differences"
-msgstr ""
+msgstr "Führt nur Unterschiede in den Zusammenführungsinformationen zusammen"
-#: ../svn/main.c:246
+#: ../svn/svn.c:252
msgid "use ARG as the older target"
msgstr "PAR als älteres Ziel verwenden"
-#: ../svn/main.c:247
+#: ../svn/svn.c:253
msgid "use ARG as the newer target"
msgstr "PAR als neueres Ziel verwenden"
-#: ../svn/main.c:249
+#: ../svn/svn.c:255
msgid "operate on a revision property (use with -r)"
msgstr ""
"auf einer Revisionseigenschaft arbeiten (mit -r\n"
" verwenden)"
-#: ../svn/main.c:250
+#: ../svn/svn.c:256
msgid "relocate via URL-rewriting"
msgstr "durch Umschreiben der URL umplatzieren"
-#: ../svn/main.c:252 ../svnadmin/main.c:286 ../svnrdump/svnrdump.c:79
-#: ../svnsync/main.c:194
+#: ../svn/svn.c:258 ../svnadmin/svnadmin.c:256 ../svnrdump/svnrdump.c:126
+#: ../svnsync/svnsync.c:212
msgid "read user configuration files from directory ARG"
msgstr ""
"Benutzerkonfigurationsdateien aus dem Verzeichnis\n"
" PAR lesen"
-#: ../svn/main.c:254
-#, fuzzy
-msgid "set user configuration option in the format:\n"
+#: ../svn/svn.c:260 ../svnrdump/svnrdump.c:146 ../svnsync/svnsync.c:214
+msgid ""
+"set user configuration option in the format:\n"
+" FILE:SECTION:OPTION=[VALUE]\n"
+" For example:\n"
+" servers:global:http-library=serf"
msgstr ""
-"Benutzerkonfigurationsdateien aus dem Verzeichnis\n"
-" PAR lesen"
+"Setzt Benutzerkonfigurationsoption im Format:\n"
+" DATEI:ABSCHNITT:OPTION=[WERT]\n"
+" Zum Beispiel:\n"
+" servers:global:http-library=serf"
-#: ../svn/main.c:261
+#: ../svn/svn.c:267
msgid "enable automatic properties"
msgstr "automatische Eigenschaften einschalten"
-#: ../svn/main.c:262
+#: ../svn/svn.c:268
msgid "disable automatic properties"
msgstr "automatische Eigenschaften ausschalten"
-#: ../svn/main.c:264
-msgid "use a different EOL marker than the standard\n"
+#: ../svn/svn.c:270
+msgid ""
+"use a different EOL marker than the standard\n"
+" system marker for files with the svn:eol-style\n"
+" property set to 'native'.\n"
+" ARG may be one of 'LF', 'CR', 'CRLF'"
msgstr ""
+"Verwende eine andere Zeilenendemarke als den\n"
+" Standard für Dateien mit der Eigenschaft\n"
+" »svn:eol-style native«.\n"
+" PAR kann »LF«, »CR« oder »CRLF« sein."
-#: ../svn/main.c:271
+#: ../svn/svn.c:277
msgid "maximum number of log entries"
msgstr "maximale Anzahl Logeinträge"
-#: ../svn/main.c:272
+#: ../svn/svn.c:278
msgid "don't unlock the targets"
msgstr "Ziele nicht freigeben"
-#: ../svn/main.c:273
-msgid "show a summary of the results"
-msgstr "Zeige eine Zusammenfassung der Ergebnisse"
-
# CHECKME
-#: ../svn/main.c:274
+#: ../svn/svn.c:279
msgid "remove changelist association"
msgstr "Bezug zur Änderungsliste entfernen"
-#: ../svn/main.c:276
+#: ../svn/svn.c:281
msgid "operate only on members of changelist ARG"
msgstr "nur auf Elementen der Änderungsliste PAR operieren"
-#: ../svn/main.c:278
+#: ../svn/svn.c:283
msgid "don't delete changelists after commit"
msgstr "Änderungslisten nach Übertragung nicht löschen"
-#: ../svn/main.c:279
+#: ../svn/svn.c:284
msgid "keep path in working copy"
msgstr "Pfad in Arbeitskopie beibehalten"
-#: ../svn/main.c:281
+#: ../svn/svn.c:286
msgid "retrieve all revision properties"
msgstr "alle Revisionseigenschaften abfragen"
-#: ../svn/main.c:283
+#: ../svn/svn.c:288
msgid "retrieve no revision properties"
msgstr "keine Revisionseigenschaften abfragen"
-#: ../svn/main.c:285
-msgid "set revision property ARG in new revision\n"
-msgstr "Revisionseigenschaft PAR in neuer Revision setzen\n"
+#: ../svn/svn.c:290
+msgid ""
+"set revision property ARG in new revision\n"
+" using the name[=value] format"
+msgstr ""
+"Revisionseigenschaft PAR in neuer Revision\n"
+" unter Verwendung des Formats name[=Wert] setzen"
-#: ../svn/main.c:288
+#: ../svn/svn.c:293
msgid "make intermediate directories"
msgstr "Zwischenverzeichnisse erzeugen"
-#: ../svn/main.c:290
-#, fuzzy
-msgid "use/display additional information from merge\n"
+#: ../svn/svn.c:295
+msgid ""
+"use/display additional information from merge\n"
+" history"
msgstr ""
-"verwende/zeige zusätzliche Informationen aus der\n"
+"verwendet und zeigt zusätzliche Informationen aus der\n"
" Zusammenführungsgeschichte an"
-#: ../svn/main.c:294
-msgid "specify automatic conflict resolution action\n"
+#: ../svn/svn.c:299
+msgid ""
+"specify automatic conflict resolution action\n"
+" ('postpone', 'working', 'base', 'mine-conflict',\n"
+" 'theirs-conflict', 'mine-full', 'theirs-full',\n"
+" 'edit', 'launch')\n"
+" (shorthand: 'p', 'mc', 'tc', 'mf', 'tf', 'e', 'l')"
msgstr ""
+"automatische Konfliktauflösungsaktion angeben\n"
+" (»postpone«, »working«, »base«, »mine-conflict«,\n"
+" »theirs-conflict«, »mine-full«, »theirs-full«,\n"
+" »edit«, »launch«)\n"
+" (kurz: »p«, »mc«, »tc«, »mf«, »tf«, »e«, »l«)"
-#: ../svn/main.c:302
-#, fuzzy
-msgid "specify which collection of revisions to display\n"
+#: ../svn/svn.c:310
+msgid ""
+"specify which collection of revisions to display\n"
+" ('merged', 'eligible')"
msgstr ""
-"anzuzeigende Revisionen angeben\n"
+"gibt anzuzeigende Menge der Revisionen an\n"
" (»merged«, »eligible«)"
-#: ../svn/main.c:306
-msgid "merge a branch back into its parent branch"
-msgstr ""
-
-#: ../svn/main.c:308
-msgid "number of leading path components to strip from\n"
-msgstr ""
-
-#: ../svn/main.c:324
-msgid "don't diff copied or moved files with their source"
-msgstr ""
-
-#: ../svn/main.c:326
+#: ../svn/svn.c:314
+msgid "deprecated"
+msgstr "veraltet"
+
+#: ../svn/svn.c:316
+msgid ""
+"number of leading path components to strip from\n"
+" paths parsed from the patch file. --strip 0\n"
+" is the default and leaves paths unmodified.\n"
+" --strip 1 would change the path\n"
+" 'doc/fudge/crunchy.html' to 'fudge/crunchy.html'.\n"
+" --strip 2 would leave just 'crunchy.html'\n"
+" The expected component separator is '/' on all\n"
+" platforms. A leading '/' counts as one component."
+msgstr ""
+"Anzahl der führenden Pfadkomponenten, die aus den aus der Patch-Datei\n"
+" eingelesenen Pfaden entfernt werden sollen.\n"
+" »--strip 0« ist die Vorgabe und lässt die Pfade unverändert.\n"
+" »--strip 1« ändert z.B. »beispiel/txt/datei.txt« zu »txt/datei.txt«\n"
+" »--strip 2« ließe noch »datei.txt«\n"
+" Das erwartete Trennzeichen für Pfadkomponenten ist »/« auf\n"
+" allen Plattformen. Ein einleitendes »/« zählt als eine Komponente."
+
+#: ../svn/svn.c:332
msgid "don't expand keywords"
msgstr "Schlüsselwörter nicht expandieren"
-#: ../svn/main.c:328
+#: ../svn/svn.c:334
msgid "apply the unidiff in reverse"
-msgstr ""
+msgstr "Wendet Unidiff rückwärts an"
-#: ../svn/main.c:330
+#: ../svn/svn.c:336
msgid "ignore whitespace during pattern matching"
-msgstr ""
+msgstr "Ignoriert während des Mustervergleichs Leerzeichen, Tabulatoren und andere nicht druckbare Zeichen"
-#: ../svn/main.c:331
+#: ../svn/svn.c:337
msgid "produce diff output"
-msgstr ""
+msgstr "Erzeugt Ausgabe von Unterschieden"
+
+#. maps to show_diff
+#. diff options
+#: ../svn/svn.c:339 ../svnlook/svnlook.c:138
+msgid "use ARG as diff command"
+msgstr "PAR als Vergleichsprogramm verwenden"
-#: ../svn/main.c:333
+#: ../svn/svn.c:341
msgid "override diff-cmd specified in config file"
-msgstr ""
+msgstr "Setzt in den Einstellungen angegebenes »diff-cmd« außer Kraft"
+
+#: ../svn/svn.c:343 ../svnlook/svnlook.c:132
+msgid "do not print differences for added files"
+msgstr "Keine Unterschiede für hinzugefügte Dateien ausgeben"
+
+#: ../svn/svn.c:345 ../svnlook/svnlook.c:135
+msgid "do not print differences for deleted files"
+msgstr "keine Unterschiede für gelöschte Dateien ausgeben"
+
+#: ../svn/svn.c:347
+msgid "don't diff copied or moved files with their source"
+msgstr "Gibt kopierte oder verschobene Dateien nicht als Unterschied zu ihrer Quelle aus"
-#: ../svn/main.c:335
+#: ../svn/svn.c:349
+msgid "diff unrelated nodes as delete and add"
+msgstr "Gibt nicht verwandte Knoten als Löschungen und Hinzufügung aus"
+
+#: ../svn/svn.c:350
+msgid "show a summary of the results"
+msgstr "Zeige eine Zusammenfassung der Ergebnisse"
+
+#: ../svn/svn.c:352
msgid "use git's extended diff format"
+msgstr "Erweitertes Format von git verwenden"
+
+#: ../svn/svn.c:354 ../svnlook/svnlook.c:141
+msgid "ignore properties during the operation"
+msgstr "Während des Vorgangs Eigenschaften ignorieren"
+
+#: ../svn/svn.c:356 ../svnlook/svnlook.c:144
+msgid "show only properties during the operation"
+msgstr "Während des Vorgangs nur Eigenschaften anzeigen"
+
+#: ../svn/svn.c:358
+msgid ""
+"generate diff suitable for generic third-party\n"
+" patch tools; currently the same as\n"
+" --show-copies-as-adds --ignore-properties"
+msgstr ""
+"Erzeugt Unterschiede, die sich für die Verarbeitung durch generische\n"
+" Werkzeuge von Drittanbietern eignen; momentan identisch\n"
+" mit --show-copies-as-adds --ignore-properties"
+
+#: ../svn/svn.c:366
+msgid ""
+"Allow operation on mixed-revision working copy.\n"
+" Use of this option is not recommended!\n"
+" Please run 'svn update' instead."
+msgstr ""
+"Erlaubt Operation auf einer Arbeitskopie mit unterschiedlichen Revisionen.\n"
+" Wie Verwendung dieser Option wird nicht empfohlen!\n"
+" Führen Sie stattdessen »svn update« aus."
+
+#: ../svn/svn.c:372
+msgid ""
+"Also commit file and dir externals reached by\n"
+" recursion. This does not include externals with a\n"
+" fixed revision. (See the svn:externals property)"
msgstr ""
+"Überträgt auch externe Verweise auf Dateien und Verzeichnisse, die durch\n"
+" Rekursion erreicht werden. Dies schließt externe Verweise\n"
+" mit fixen Revisionen aus. (siehe Eigenschaft »svn:externals«)"
-#: ../svn/main.c:337
-msgid "Allow merge into mixed-revision working copy.\n"
-msgstr "Erlaube Zusammenführung in eine Arbeitskopie mit verschiedenen Revisionen.\n"
+#: ../svn/svn.c:378
+msgid "retrieve target's inherited properties"
+msgstr "Geerbte Eigenschaften des Ziels abfragen"
-#: ../svn/main.c:408
+#: ../svn/svn.c:380
+msgid "use ARG as search pattern (glob syntax)"
+msgstr "PAR als Suchmuster verwenden (mit Platzhaltern)"
+
+#: ../svn/svn.c:382
+msgid "combine ARG with the previous search pattern"
+msgstr "PAR mit dem vorherigen Suchmuster kombinieren"
+
+#: ../svn/svn.c:430
msgid ""
"Put files and directories under version control, scheduling\n"
"them for addition to repository. They will be added in next commit.\n"
@@ -8160,11 +10607,11 @@ msgstr ""
"Das tatsächliche Hinzufügen findet erst beim nächsten Übertragen statt.\n"
"Aufruf: add PFAD...\n"
-#: ../svn/main.c:413
+#: ../svn/svn.c:435
msgid "add intermediate parents"
msgstr "direkte Eltern hinzufügen"
-#: ../svn/main.c:416
+#: ../svn/svn.c:438
msgid ""
"Output the content of specified files or\n"
"URLs with revision and author information in-line.\n"
@@ -8179,7 +10626,7 @@ msgstr ""
"\n"
" Falls angegeben, bestimmt REV, in welcher Revision zuerst nachgeschaut wird.\n"
-#: ../svn/main.c:425
+#: ../svn/svn.c:447
msgid ""
"Output the content of specified files or URLs.\n"
"usage: cat TARGET[@REV]...\n"
@@ -8192,8 +10639,7 @@ msgstr ""
"\n"
" Falls angegeben, bestimmt REV, in welcher Revision zuerst nachgeschaut wird.\n"
-#: ../svn/main.c:433
-#, fuzzy
+#: ../svn/svn.c:455
msgid ""
"Associate (or dissociate) changelist CLNAME with the named files.\n"
"usage: 1. changelist CLNAME PATH...\n"
@@ -8201,10 +10647,10 @@ msgid ""
msgstr ""
"Verknüpft Änderungsliste CLNAME (oder löst diese Verknüpfung)\n"
"mit den angegebenen Dateien.\n"
-"Aufruf: 1. changelist CLNAME ZIEL...\n"
-" 2. changelist --remove ZIEL...\n"
+"Aufruf: 1. changelist CLNAME PFAD...\n"
+" 2. changelist --remove PFAD...\n"
-#: ../svn/main.c:439
+#: ../svn/svn.c:461
msgid ""
"Check out a working copy from a repository.\n"
"usage: checkout URL[@REV]... [PATH]\n"
@@ -8254,18 +10700,38 @@ msgstr ""
" Siehe auch »svn help update« für eine Liste möglicher Buchstaben,\n"
" die die durchgeführte Aktion beschreiben.\n"
-#: ../svn/main.c:466
-#, fuzzy
+#: ../svn/svn.c:488
msgid ""
-"Recursively clean up the working copy, removing locks, resuming\n"
+"Recursively clean up the working copy, removing write locks, resuming\n"
"unfinished operations, etc.\n"
"usage: cleanup [WCPATH...]\n"
+"\n"
+" Finish any unfinished business in the working copy at WCPATH, and remove\n"
+" write locks (shown as 'L' by the 'svn status' command) from the working\n"
+" copy. Usually, this is only necessary if a Subversion client has crashed\n"
+" while using the working copy, leaving it in an unusable state.\n"
+"\n"
+" WARNING: There is no mechanism that will protect write locks still\n"
+" being used by other Subversion clients. Running this command\n"
+" while another client is using the working copy can corrupt\n"
+" the working copy beyond repair!\n"
msgstr ""
-"Räumt die Arbeitskopie rekursiv auf, gibt Sperren frei,\n"
-"nimmt unvollständige Operationen wieder auf, usw.\n"
-"Aufruf: cleanup [PFAD...]\n"
+"Räumt eine Arbeitskopie rekursiv auf, entfernt Schreibsperren, führt nicht\n"
+"beendete Operationen zu Ende usw.\n"
+"Aufruf: cleanup [AKPFAD...]\n"
+"\n"
+" Ohne weitere Parameter führt der Aufruf unterbrochene Operationen in\n"
+" AKPFAD zu Ende und entfernt Schreibsperren (mit »L« in »svn status«\n"
+" angezeigt). Dies ist allgemein nur notwendig, nachdem ein Subversion-\n"
+" Client abgestürzt ist, während dieser auf die Arbeitskopie zugriff, und so\n"
+" die Arbeitskopie in einem nicht verwendbaren Zustand hinterließ.\n"
+"\n"
+" WARNUNG: Es gibt keinen Mechanismus, der noch verwendete Schreib-\n"
+" sperren anderer Subversion-Clients schützt. Die Ausführung dieses\n"
+" Kommandos während des Zugriffs eines anderen Clients auf die\n"
+" Arbeitskopie kann diese irreparabel beschädigen!\n"
-#: ../svn/main.c:472
+#: ../svn/svn.c:504
msgid ""
"Send changes from your working copy to the repository.\n"
"usage: commit [PATH...]\n"
@@ -8284,53 +10750,47 @@ msgstr ""
" Falls Objekte gesperrt sind oder gesperrte Objekte enthalten, werden diese\n"
" nach einer erfolgreichen Ãœbertragung entsperrt.\n"
-#: ../svn/main.c:483
+#: ../svn/svn.c:515
msgid ""
-"Duplicate something in working copy or repository, remembering\n"
-"history.\n"
+"Copy files and directories in a working copy or repository.\n"
"usage: copy SRC[@REV]... DST\n"
"\n"
-"When copying multiple sources, they will be added as children of DST,\n"
-"which must be a directory.\n"
-"\n"
" SRC and DST can each be either a working copy (WC) path or URL:\n"
" WC -> WC: copy and schedule for addition (with history)\n"
" WC -> URL: immediately commit a copy of WC to URL\n"
" URL -> WC: check out URL into WC, schedule for addition\n"
" URL -> URL: complete server-side copy; used to branch and tag\n"
-" All the SRCs must be of the same type.\n"
+" All the SRCs must be of the same type. When copying multiple sources,\n"
+" they will be added as children of DST, which must be a directory.\n"
"\n"
-"WARNING: For compatibility with previous versions of Subversion,\n"
-"copies performed using two working copy paths (WC -> WC) will not\n"
-"contact the repository. As such, they may not, by default, be able\n"
-"to propagate merge tracking information from the source of the copy\n"
-"to the destination.\n"
+" WARNING: For compatibility with previous versions of Subversion,\n"
+" copies performed using two working copy paths (WC -> WC) will not\n"
+" contact the repository. As such, they may not, by default, be able\n"
+" to propagate merge tracking information from the source of the copy\n"
+" to the destination.\n"
msgstr ""
-"Dupliziert etwas in der Arbeitskopie oder im Projektarchiv unter\n"
-"Beibehaltung der Historie.\n"
+"Kopiert Dateien und Verzeichnisse in einer Arbeitskopie oder im einem Projektarchiv\n"
"Aufruf: copy QUELLE[@REV]... ZIEL\n"
"\n"
-"Wenn mehrere Quellen kopiert werden, werden diese als Kinder von ZIEL\n"
-"hinzugefügt, was ein Verzeichnis sein muss.\n"
-"\n"
" QUELLE und ZIEL können jeweils entweder ein Arbeitskopiepfad (AK) oder eine\n"
" URL sein:\n"
" AK -> AK: Kopieren und zum Hinzufügen einplanen (inklusive Historie)\n"
" AK -> URL: Sofort eine Kopie von AK zur URL übertragen\n"
" URL -> AK: Eine Kopie von URL nach AK auschecken und zum Hinzufügen\n"
" einplanen\n"
-" URL -> URL: Vollständig serverseitige Kopie. Wird zum Verzweigen\n"
+" URL -> URL: Kopie vollständig auf dem Server. Wird zum Verzweigen\n"
" und Markieren (branch & tag) verwendet.\n"
-" Alle QUELLEn müssen vom selben Typ sein.\n"
+" Alle QUELLEn müssen vom selben Typ sein. Werden mehrere Quellen kopiert,\n"
+" werden sie als Kindelemente von ZIEL hinzugefügt, welches dann ein\n"
+" Verzeichnis sein muss.\n"
"\n"
-"WARNUNG: Für Kompatibilität mit älteren Versionen von Subversion,\n"
-"werden Kopien, die über zwei Arbeitskopiepfade (WC -> WC) vorgenommen\n"
-"wurden, nicht das Projektarchiv kontaktieren. Deswegen könnten sie\n"
-"standardmäßig nicht in der Lage sein, Zusammenführungsinformationen\n"
-"von der Quelle der Kopie in das Ziel weiterzureichen.\n"
+" WARNUNG: Für Kompatibilität mit älteren Versionen von Subversion,\n"
+" werden Kopien, die über zwei Arbeitskopiepfade (WC -> WC) vorgenommen\n"
+" wurden, nicht das Projektarchiv kontaktieren. Deswegen könnten sie\n"
+" standardmäßig nicht in der Lage sein, Zusammenführungsinformationen\n"
+" von der Quelle der Kopie in das Ziel weiterzureichen.\n"
-#: ../svn/main.c:505
-#, fuzzy
+#: ../svn/svn.c:534
msgid ""
"Remove files and directories from version control.\n"
"usage: 1. delete PATH...\n"
@@ -8346,8 +10806,7 @@ msgid ""
" 2. Each item specified by a URL is deleted from the repository\n"
" via an immediate commit.\n"
msgstr ""
-"Entfernt Dateien und Verzeichnisse aus der\n"
-"Versionskontrolle.\n"
+"Entfernt Dateien und Verzeichnisse aus der Versionskontrolle.\n"
"Aufruf: 1. delete PFAD...\n"
" 2. delete URL...\n"
"\n"
@@ -8357,44 +10816,61 @@ msgstr ""
" die Option --keep-local wurde angegeben.\n"
" PFAD(e), die nicht versioniert oder geändert sind, bzw.\n"
" entsprechende Einträge enthalten, werden nur gelöscht, wenn\n"
-" die Option »--force« angegeben wird.\n"
+" die Optionen --force oder --keep-local angegeben wird.\n"
"\n"
-" 2. Jede URL wird mittels einer sofortigen Ãœbertragung aus dem\n"
-" Projektarchiv entfernt.\n"
+" 2. Jedes mit einer URL angegebene Element wird mittels sofortiger\n"
+" Ãœbertragung aus dem Projektarchiv entfernt.\n"
-#: ../svn/main.c:521
+#: ../svn/svn.c:550
msgid ""
-"Display the differences between two revisions or paths.\n"
-"usage: 1. diff [-c M | -r N[:M]] [TARGET[@REV]...]\n"
-" 2. diff [-r N[:M]] --old=OLD-TGT[@OLDREV] [--new=NEW-TGT[@NEWREV]] \\\n"
+"Display local changes or differences between two revisions or paths.\n"
+"usage: 1. diff\n"
+" 2. diff [-c M | -r N[:M]] [TARGET[@REV]...]\n"
+" 3. diff [-r N[:M]] --old=OLD-TGT[@OLDREV] [--new=NEW-TGT[@NEWREV]] \\\n"
" [PATH...]\n"
-" 3. diff OLD-URL[@OLDREV] NEW-URL[@NEWREV]\n"
+" 4. diff OLD-URL[@OLDREV] NEW-URL[@NEWREV]\n"
+" 5. diff OLD-URL[@OLDREV] NEW-PATH[@NEWREV]\n"
+" 6. diff OLD-PATH[@OLDREV] NEW-URL[@NEWREV]\n"
"\n"
-" 1. Display the changes made to TARGETs as they are seen in REV between\n"
+" 1. Use just 'svn diff' to display local modifications in a working copy.\n"
+"\n"
+" 2. Display the changes made to TARGETs as they are seen in REV between\n"
" two revisions. TARGETs may be all working copy paths or all URLs.\n"
" If TARGETs are working copy paths, N defaults to BASE and M to the\n"
" working copy; if URLs, N must be specified and M defaults to HEAD.\n"
" The '-c M' option is equivalent to '-r N:M' where N = M-1.\n"
" Using '-c -M' does the reverse: '-r M:N' where N = M-1.\n"
"\n"
-" 2. Display the differences between OLD-TGT as it was seen in OLDREV and\n"
+" 3. Display the differences between OLD-TGT as it was seen in OLDREV and\n"
" NEW-TGT as it was seen in NEWREV. PATHs, if given, are relative to\n"
" OLD-TGT and NEW-TGT and restrict the output to differences for those\n"
" paths. OLD-TGT and NEW-TGT may be working copy paths or URL[@REV].\n"
" NEW-TGT defaults to OLD-TGT if not specified. -r N makes OLDREV default\n"
" to N, -r N:M makes OLDREV default to N and NEWREV default to M.\n"
-"\n"
-" 3. Shorthand for 'svn diff --old=OLD-URL[@OLDREV] --new=NEW-URL[@NEWREV]'\n"
-"\n"
-" Use just 'svn diff' to display local modifications in a working copy.\n"
-msgstr ""
-"Zeigt die Unterschiede zwischen zwei Revisionen oder Pfaden an.\n"
-"Aufruf: 1. diff [-c M | -r N[:M] [ZIEL[@REV]...]\n"
-" 2. diff [-r N[:M]] --old=ZIEL-ALT[@REVALT] [--new=ZIEL-NEU[@REVNEU]] \\\n"
-" [PFAD...]\n"
-" 3. diff URL-ALT[@REVALT] URL-NEU[@REVNEU]\n"
-"\n"
-" 1. Zeigt die Änderungen an ZIELen, wie sie in REV zwischen zwei Revisionen\n"
+" If OLDREV or NEWREV are not specified, they default to WORKING for\n"
+" working copy targets and to HEAD for URL targets.\n"
+"\n"
+" Either or both OLD-TGT and NEW-TGT may also be paths to unversioned\n"
+" targets. Revisions cannot be specified for unversioned targets.\n"
+" Both targets must be of the same node kind (file or directory).\n"
+" Diffing unversioned targets against URL targets is not supported.\n"
+"\n"
+" 4. Shorthand for 'svn diff --old=OLD-URL[@OLDREV] --new=NEW-URL[@NEWREV]'\n"
+" 5. Shorthand for 'svn diff --old=OLD-URL[@OLDREV] --new=NEW-PATH[@NEWREV]'\n"
+" 6. Shorthand for 'svn diff --old=OLD-PATH[@OLDREV] --new=NEW-URL[@NEWREV]'\n"
+msgstr ""
+"Zeigt lokale Änderungen oder Unterschiede zwischen zwei Revisionen oder Pfaden an.\n"
+"Aufruf: 1. diff\n"
+" 2. diff [-c M | -r N[:M]] [ZIEL[@REV]...]\n"
+" 3. diff [-r N[:M]] --old=ZIEL-ALT[@REVALT] [--new=ZIEL-NEU[@NEWREV]] \\\n"
+" [PFAD...]\n"
+" 4. diff URL-ALT[@REVALT] URL-NEU[@REVNEU]\n"
+" 5. diff URL-ALT[@REVALT] NEW-PATH[@REVNEU]\n"
+" 6. diff PFAD-ALT[@REVALT] URL-NEU[@REVNEU]\n"
+"\n"
+" 1. Verwenden Sie nur »svn diff«, um lokale Änderungen einer Arbeitskopie anzuzeigen.\n"
+"\n"
+" 2. Zeigt die Änderungen an ZIELen, wie sie in REV zwischen zwei Revisionen\n"
" sichtbar sind. ZIELe können alle Arbeitskopien oder URLs sein.\n"
"\n"
" Falls ZIELe Arbeitskopiepfade sind, wird standardmäßig BASE für N und\n"
@@ -8403,19 +10879,26 @@ msgstr ""
" Die Option »-c M« ist äquivalent zu »-r N:M«, wobei N = M-1 gilt.\n"
" Die Verwendung von »-c -M« macht es andersherum: »-r M:N« mit N = M-1.\n"
"\n"
-" 2. Zeigt die Unterschiede zwischen ZIEL-ALT in REVALT und ZIEL-NEU in REVNEU.\n"
+" 3. Zeigt die Unterschiede zwischen ZIEL-ALT in REVALT und ZIEL-NEU in REVNEU.\n"
" Wenn PFADe angegeben werden, sind diese relativ zu ZIEL-ALT und ZIEL-NEU,\n"
" und die Ausgabe ist auf Unterschiede zwischen diesen Pfaden beschränkt.\n"
" ZIEL-ALT und ZIEL-NEU können Pfade der Arbeitskopie oder der Art URL[@REV]\n"
" sein. ZIEL-NEU entspricht ZIEL-ALT, falls es nicht angegeben wurde.\n"
" -r N setzt REVALT auf N, -r N:M setzt REVALT auf N und REVNEU auf M.\n"
+" Wenn REVALT oder REVNEU nicht angegeben sind, wird für Ziele in Arbeitskopien\n"
+" »WORKING« und für solche in ULRs »HEAD« angenommen.\n"
"\n"
-" 3. Kurzform für »svn diff --old=URLALT[@REVALT] --new=URLNEU[@REVNEU]«.\n"
+" ZIEL-ALT, ZIEL-NEU oder beide dürfen auch Pfade von nicht versionieren Zielen sein.\n"
+" Revisionen können aber für solche Ziele nicht angegeben werden. Beide Ziele\n"
+" müssen vom selben Knotentyp sein (Datei bzw. Verzeichnis). Die Anzeige von\n"
+" Unterschieden zwischen nicht versionierten Zielen und URL-Zielen wird nicht\n"
+" unterstützt.\n"
"\n"
-" Verwenden Sie einfach »svn diff«, um lokale Änderungen in einer Arbeitskopie\n"
-" anzuzeigen.\n"
+" 4. Kurzform für »svn diff --old=URL-ALT[@REVALT] --new=URL-NEU[@REVNEU]«\n"
+" 5. Kurzform für »svn diff --old=URL-ALT[@REVALT] --new=URL-NEU[@REVNEU]«\n"
+" 6. Kurzform für »svn diff --old=URL-ALT[@REVALT] --new=URL-NEU[@REVNEU]«\n"
-#: ../svn/main.c:549
+#: ../svn/svn.c:591
msgid ""
"Create an unversioned copy of a tree.\n"
"usage: 1. export [-r REV] URL[@PEGREV] [PATH]\n"
@@ -8454,7 +10937,7 @@ msgstr ""
"\n"
" PEGREV gibt an, in welcher Revision das Ziel zuerst gesucht wird.\n"
-#: ../svn/main.c:571
+#: ../svn/svn.c:613
msgid ""
"Describe the usage of this program or its subcommands.\n"
"usage: help [SUBCOMMAND...]\n"
@@ -8462,7 +10945,7 @@ msgstr ""
"Beschreibt die Anwendung dieses Programms und seiner Unterbefehle.\n"
"Aufruf: help [UNTERBEFEHL...]\n"
-#: ../svn/main.c:577
+#: ../svn/svn.c:619
msgid ""
"Commit an unversioned file or tree into the repository.\n"
"usage: import [PATH] URL\n"
@@ -8487,7 +10970,7 @@ msgstr ""
" Nichtversionierbare Elemente wie Gerätedateien und Pipes werden ignoriert,\n"
" falls --force angegeben wird.\n"
-#: ../svn/main.c:591
+#: ../svn/svn.c:633
msgid ""
"Display information about a local or remote item.\n"
"usage: info [TARGET[@REV]...]\n"
@@ -8508,7 +10991,7 @@ msgstr ""
# FIXME: "looked up" ist überall leicht unterschiedlich übersetzt
# Ich (Jens) bevorzuge "gesucht" statt "nachgeschlagen" oder "durchsucht", "nachgeschaut"
# FIXME: Standardsätze sollten eigene msgid haben!
-#: ../svn/main.c:601
+#: ../svn/svn.c:643
msgid ""
"List directory entries in the repository.\n"
"usage: list [TARGET[@REV]...]\n"
@@ -8533,7 +11016,7 @@ msgstr ""
"Aufruf: list [ZIEL[@REV]...]\n"
"\n"
" Listet jede ZIEL-Datei und die Inhalte jedes ZIEL-Verzeichnisses, wie\n"
-" sie im Projektarchiv existieren, auf. Wenn ZIEL eine Arbeitskopie ist,\n"
+" sie im Projektarchiv existieren, auf. Wenn ZIEL ein Arbeitskopiepfad ist,\n"
" wird die entsprechende URL des Projektarchivs verwendet. REV bestimmt,\n"
" in welcher Revision zuerst nachgeschaut wird.\n"
"\n"
@@ -8548,7 +11031,11 @@ msgstr ""
" Größe (in Bytes)\n"
" Datum und Zeit der letzten Ãœbertragung\n"
-#: ../svn/main.c:622
+#: ../svn/svn.c:663
+msgid "include externals definitions"
+msgstr "»svn:externals«-Definitionen einbeziehen"
+
+#: ../svn/svn.c:666
msgid ""
"Lock working copy paths or URLs in the repository, so that\n"
"no other user can commit changes to them.\n"
@@ -8556,30 +11043,27 @@ msgid ""
"\n"
" Use --force to steal the lock from another user or working copy.\n"
msgstr ""
-"Sperrt Pfade in Arbeitskopie oder URLs im Projektarchiv, so dass kein\n"
+"Sperrt Arbeitskopiepfade oder URLs im Projektarchiv, so dass kein\n"
"anderer Anwender Änderungen an ihnen übertragen kann.\n"
"Aufruf: lock ZIEL...\n"
"\n"
" Benutze --force, um eine bereits vorhandene Sperre zu stehlen.\n"
-#: ../svn/main.c:628
+#: ../svn/svn.c:672
msgid "read lock comment from file ARG"
msgstr "Sperrkommentar aus Datei PAR lesen"
-#: ../svn/main.c:629
+#: ../svn/svn.c:673
msgid "specify lock comment ARG"
msgstr "PAR als Sperrkommentar verwenden"
-#: ../svn/main.c:630
+#: ../svn/svn.c:674
msgid "force validity of lock comment source"
msgstr ""
"Gültigkeit der Quelle für die Sperrmeldung\n"
" erzwingen"
-# FIXME: behaviour oder behavior?
-# www.example.com is a reserved URL, let's not translate it.
-#: ../svn/main.c:633
-#, fuzzy
+#: ../svn/svn.c:677
msgid ""
"Show the log messages for a set of revision(s) and/or path(s).\n"
"usage: 1. log [PATH][@REV]\n"
@@ -8610,88 +11094,428 @@ msgid ""
" follow copy history by default. Use --stop-on-copy to disable this\n"
" behavior, which can be useful for determining branchpoints.\n"
"\n"
+" The --depth option is only valid in combination with the --diff option\n"
+" and limits the scope of the displayed diff to the specified depth.\n"
+"\n"
+" If the --search option is used, log messages are displayed only if the\n"
+" provided search pattern matches any of the author, date, log message\n"
+" text (unless --quiet is used), or, if the --verbose option is also\n"
+" provided, a changed path.\n"
+" The search pattern may include \"glob syntax\" wildcards:\n"
+" ? matches any single character\n"
+" * matches a sequence of arbitrary characters\n"
+" [abc] matches any of the characters listed inside the brackets\n"
+" If multiple --search options are provided, a log message is shown if\n"
+" it matches any of the provided search patterns. If the --search-and\n"
+" option is used, that option's argument is combined with the pattern\n"
+" from the previous --search or --search-and option, and a log message\n"
+" is shown only if it matches the combined search pattern.\n"
+" If --limit is used in combination with --search, --limit restricts the\n"
+" number of log messages searched, rather than restricting the output\n"
+" to a particular number of matching log messages.\n"
+"\n"
" Examples:\n"
-" svn log\n"
-" svn log foo.c\n"
-" svn log bar.c@42\n"
-" svn log http://www.example.com/repo/project/foo.c\n"
-" svn log http://www.example.com/repo/project foo.c bar.c\n"
-" svn log http://www.example.com/repo/project@50 foo.c bar.c\n"
+"\n"
+" Show the latest 5 log messages for the current working copy\n"
+" directory and display paths changed in each commit:\n"
+" svn log -l 5 -v\n"
+"\n"
+" Show the log for bar.c as of revision 42:\n"
+" svn log bar.c@42\n"
+"\n"
+" Show log messages and diffs for each commit to foo.c:\n"
+" svn log --diff http://www.example.com/repo/project/foo.c\n"
+" (Because the above command uses a full URL it does not require\n"
+" a working copy.)\n"
+"\n"
+" Show log messages for the children foo.c and bar.c of the directory\n"
+" '/trunk' as it appeared in revision 50, using the ^/ URL shortcut:\n"
+" svn log ^/trunk@50 foo.c bar.c\n"
+"\n"
+" Show the log messages for any incoming changes to foo.c during the\n"
+" next 'svn update':\n"
+" svn log -r BASE:HEAD foo.c\n"
+"\n"
+" Show the log message for the revision in which /branches/foo\n"
+" was created:\n"
+" svn log --stop-on-copy --limit 1 -r0:HEAD ^/branches/foo\n"
msgstr ""
"Zeigt die Logmeldungen für eine Menge von Revisionen und/oder Dateien.\n"
-"Aufruf: 1. log [PFAD]\n"
+"Aufruf: 1. log [PFAD][@REV]\n"
" 2. log URL[@REV] [PFAD...]\n"
"\n"
-" 1. Gibt die Logmeldungen für einen lokalen PFAD aus (Vorgabe: ».«).\n"
-" Die Vorgabe für den Revisionsbereich ist BASE:1.\n"
-"\n"
-" 2. Gibt die Logmeldungen für die PFADe (Vorgabe: ».«) unterhalb der URL aus.\n"
-" Falls angegeben, bestimmt REV, in welcher Revision die URL zuerst\n"
-" durchsucht wird und der Standardrevisionsbereich ist REV:1. Andernfalls\n"
-" wird die URL in HEAD gesucht und die Vorgabe für den Revisionsbereich\n"
-" ist HEAD:1.\n"
+" 1. Gibt Log-Einträge der zu PFAD gehörenden URL aus. (Vorgabe: ».«)\n"
+" Ist REV angegeben, ist das die Revision in der URL zuerst gesucht\n"
+" Ist REV angegeben, ist das die Revision in der URL zuerst gesucht\n"
+" wird, und der vorgegebene Versionsbereich ist REV:1. Ist REV nicht\n"
+" angegeben, so ist der vorgegebene Revisionsbereich BASE:1, da die\n"
+" URL möglicherweise in der Revision HEAD nicht existiert.\n"
+"\n"
+" 2. Gibt Log-Einträge für PFAD(e) unter URL aus, (Vorgabe: ».«)\n"
+" Ist REV angegeben, ist das die Revision in der URL zuerst gesucht\n"
+" wird, und der vorgegebene Versionsbereich ist REV:1. Andernfalls wird\n"
+" URL in HEAD gesucht und der vorgegebene Revisionsbereich ist\n"
+" HEAD:1.\n"
"\n"
" Mehrere »-c«- oder »-r«-Optionen dürfen angegeben werden (aber keine\n"
" Kombination von »-c« und »-r«) und das Mischen von vor- und\n"
" rückwärtigen Bereichen ist erlaubt.\n"
"\n"
-" Mit -v werden auch die betroffenen Pfade mit jeder Logmeldung ausgegeben.\n"
-" Mit -q wird die Logmeldung selbst nicht ausgegeben (Hinweis: Diese Option\n"
-" ist kompatibel mit -v).\n"
+" Mit »-v« werden auch die betroffenen Pfade mit jeder Logmeldung ausgegeben.\n"
+" Mit »-q« wird die Logmeldung selbst nicht ausgegeben (Hinweis: Diese Option\n"
+" ist kompatibel mit »-v«).\n"
"\n"
" Jede Logmeldung wird nur einmal ausgegeben, selbst wenn mehr als einer\n"
" der betroffenen Pfade explizit angefragt wurde. Logs folgen per Vorgabe\n"
" der Historie von Kopien. Benutzen Sie »--stop-on-copy«, um dieses Verhalten,\n"
" z.B. zum Auffinden von Verzweigungen, zu deaktivieren.\n"
"\n"
+" Die Option »--depth« ist nur in Verbindung mit der Option »--diff« gültig\n"
+" und begrenzt den Umfang der ausgegebenen Unterschiede auf die\n"
+" angegebene Tiefe.\n"
+"\n"
+" Wenn die Option »--search« verwendet wird, werden Logmeldungen nur\n"
+" angezeigt, wenn sie dem Suchmuster in den Feldern Autor, Datum oder\n"
+" Meldung (nur ohne »--quiet«), oder, falls »--verbose« angegeben ist,\n"
+" zusätzlich mit einem geänderten Pfad.\n"
+" Das Suchmuster darf folgende Platzhalter enthalten:\n"
+" ? entspricht einem einzelnen beliebigen Zeichen\n"
+" * entspricht einer Folge beliebiger Zeichen\n"
+" [abc] entspricht einem beliebigem Zeichen der Liste in den Klammern\n"
+" Werden mehrere »--search« Optionen angegeben, wird die Logmeldung\n"
+" ausgegeben, wenn eine einziges Suchmuster passt. Mit »--search-and«\n"
+" wird das angegebene Argument mit dem vorangehenden »--search« oder\n"
+" »--search-and« Optionen kombiniert und nur Logmeldungen ausgegeben\n"
+" die auf das kombinierte Suchmuster passen.\n"
+" Wenn »--limit« in Verbindgung mit »--search« verwendet wird, begrenzt es\n"
+" die Anzahl der durchsuchten Logmeldungen, nicht notwendigerweise die\n"
+" der ausgegebenen.\n"
+"\n"
" Beispiele:\n"
-" svn log\n"
-" svn log foo.c\n"
-" svn log http://www.example.com/repo/projekt/foo.c\n"
-" svn log http://www.example.com/repo/projekt foo.c bar.c\n"
+" Ausgabe der letzten 5 Logmeldungen für das Arbeitsverzeichnis in der\n"
+" Arbeitkopie, mit Ausgabe der geänderten Pfade: svn log -l 5 -v\n"
+"\n"
+" Ausgabe des Logs für datei.c mit Revision 42:\n"
+" svn log datei.c@42\n"
+"\n"
+" Ausgabe der Logmeldungen und Unterschiede für jede Übertragung\n"
+" von datei.c:\n"
+" svn log --diff http://www.example.com/repo/projekt/datei.c\n"
+" (Da der Befehl die URL angibt, ist keine Arbeitskopie notwendig.)\n"
+"\n"
+" Ausgabe der Logmeldungen für die Dateien datei.c and programm.c\n"
+" im Verzeichnis »/trunk«, wie es in Revision 50 erschien, mit der\n"
+" Kurzform »^/« für die URL:\n"
+" svn log ^/trunk@50 datei.c programm.c\n"
+"\n"
+" Ausgabe der Logmeldungen für Änderungen an datei.c, die bei der\n"
+" nächsten Ausführung von »svn update« empfangen werden: svn log -r BASE:HEAD datei.c\n"
+"\n"
+" Ausgabe der Logmeldung für die Revision die »/branches/zweig» erzeugte:\n"
+" svn log --stop-on-copy --limit 1 -r0:HEAD ^/branches/zweig\n"
-#: ../svn/main.c:672
+#: ../svn/svn.c:755
msgid "retrieve revision property ARG"
msgstr "Revisionseigenschaft PAR abfragen"
-#: ../svn/main.c:673
+#: ../svn/svn.c:756
msgid "the change made in revision ARG"
msgstr "die in Revision PAR durchgeführte Änderung"
-# FIXME: WCPATH oder WC_PATH?
-#: ../svn/main.c:676
-#, fuzzy
-msgid ""
-"Apply the differences between two sources to a working copy path.\n"
-"usage: 1. merge sourceURL1[@N] sourceURL2[@M] [WCPATH]\n"
-" 2. merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]\n"
-" 3. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [WCPATH]\n"
-"\n"
-" 1. In the first form, the source URLs are specified at revisions\n"
-" N and M. These are the two sources to be compared. The revisions\n"
-" default to HEAD if omitted.\n"
-"\n"
-" 2. In the second form, the URLs corresponding to the source working\n"
-" copy paths define the sources to be compared. The revisions must\n"
-" be specified.\n"
-"\n"
-" 3. In the third form, SOURCE can be either a URL or a working copy\n"
-" path (in which case its corresponding URL is used). SOURCE (in\n"
-" revision REV) is compared as it existed between revisions N and M\n"
-" for each revision range provided. If REV is not specified, HEAD\n"
-" is assumed. '-c M' is equivalent to '-r <M-1>:M', and '-c -M'\n"
-" does the reverse: '-r M:<M-1>'. If no revision ranges are\n"
-" specified, the default range of 0:REV is used. Multiple '-c'\n"
-" and/or '-r' options may be specified, and mixing of forward\n"
-" and reverse ranges is allowed.\n"
-"\n"
-" WCPATH is the working copy path that will receive the changes.\n"
-" If WCPATH is omitted, a default value of '.' is assumed, unless\n"
-" the sources have identical basenames that match a file within '.':\n"
-" in which case, the differences will be applied to that file.\n"
-"\n"
-" For each merged item a line will be printed with characters reporting\n"
-" the action taken. These characters have the following meaning:\n"
+#. For this large section, let's keep it unindented for easier
+#. * viewing/editing. It has been vim-treated with a textwidth=75 and 'gw'
+#. * (with quotes and newlines removed).
+#: ../svn/svn.c:762
+msgid ""
+"Merge changes into a working copy.\n"
+"usage: 1. merge SOURCE[@REV] [TARGET_WCPATH]\n"
+" (the 'complete' merge)\n"
+" 2. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [TARGET_WCPATH]\n"
+" (the 'cherry-pick' merge)\n"
+" 3. merge SOURCE1[@REV1] SOURCE2[@REV2] [TARGET_WCPATH]\n"
+" (the '2-URL' merge)\n"
+"\n"
+" 1. This form, with one source path and no revision range, is called\n"
+" a 'complete' merge:\n"
+"\n"
+" svn merge SOURCE[@REV] [TARGET_WCPATH]\n"
+"\n"
+" The complete merge is used for the 'sync' and 'reintegrate' merges\n"
+" in the 'feature branch' pattern described below. It finds all the\n"
+" changes on the source branch that have not already been merged to the\n"
+" target branch, and merges them into the working copy. Merge tracking\n"
+" is used to know which changes have already been merged.\n"
+"\n"
+" SOURCE specifies the branch from where the changes will be pulled, and\n"
+" TARGET_WCPATH specifies a working copy of the target branch to which\n"
+" the changes will be applied. Normally SOURCE and TARGET_WCPATH should\n"
+" each correspond to the root of a branch. (If you want to merge only a\n"
+" subtree, then the subtree path must be included in both SOURCE and\n"
+" TARGET_WCPATH; this is discouraged, to avoid subtree mergeinfo.)\n"
+"\n"
+" SOURCE is usually a URL. The optional '@REV' specifies both the peg\n"
+" revision of the URL and the latest revision that will be considered\n"
+" for merging; if REV is not specified, the HEAD revision is assumed. If\n"
+" SOURCE is a working copy path, the corresponding URL of the path is\n"
+" used, and the default value of 'REV' is the base revision (usually the\n"
+" revision last updated to).\n"
+"\n"
+" TARGET_WCPATH is a working copy path; if omitted, '.' is generally\n"
+" assumed. There are some special cases:\n"
+"\n"
+" - If SOURCE is a URL:\n"
+"\n"
+" - If the basename of the URL and the basename of '.' are the\n"
+" same, then the differences are applied to '.'. Otherwise,\n"
+" if a file with the same basename as that of the URL is found\n"
+" within '.', then the differences are applied to that file.\n"
+" In all other cases, the target defaults to '.'.\n"
+"\n"
+" - If SOURCE is a working copy path:\n"
+"\n"
+" - If the source is a file, then differences are applied to that\n"
+" file (useful for reverse-merging earlier changes). Otherwise,\n"
+" if the source is a directory, then the target defaults to '.'.\n"
+"\n"
+" In normal usage the working copy should be up to date, at a single\n"
+" revision, with no local modifications and no switched subtrees.\n"
+"\n"
+" - The 'Feature Branch' Merging Pattern -\n"
+"\n"
+" In this commonly used work flow, known also as the 'development\n"
+" branch' pattern, a developer creates a branch and commits a series of\n"
+" changes that implement a new feature. The developer periodically\n"
+" merges all the latest changes from the parent branch so as to keep the\n"
+" development branch up to date with those changes. When the feature is\n"
+" complete, the developer performs a merge from the feature branch to\n"
+" the parent branch to re-integrate the changes.\n"
+"\n"
+" parent --+----------o------o-o-------------o--\n"
+" \\ \\ \\ /\n"
+" \\ merge merge merge\n"
+" \\ \\ \\ /\n"
+" feature +--o-o-------o----o-o----o-------\n"
+"\n"
+" A merge from the parent branch to the feature branch is called a\n"
+" 'sync' or 'catch-up' merge, and a merge from the feature branch to the\n"
+" parent branch is called a 'reintegrate' merge.\n"
+"\n"
+" - Sync Merge Example -\n"
+" ............\n"
+" . .\n"
+" trunk --+------------L--------------R------\n"
+" \\ \\\n"
+" \\ |\n"
+" \\ v\n"
+" feature +------------------------o-----\n"
+" r100 r200\n"
+"\n"
+" Subversion will locate all the changes on 'trunk' that have not yet\n"
+" been merged into the 'feature' branch. In this case that is a single\n"
+" range, r100:200. In the diagram above, L marks the left side (trunk@100)\n"
+" and R marks the right side (trunk@200) of the merge source. The\n"
+" difference between L and R will be applied to the target working copy\n"
+" path. In this case, the working copy is a clean checkout of the entire\n"
+" 'feature' branch.\n"
+"\n"
+" To perform this sync merge, have a clean working copy of the feature\n"
+" branch and run the following command in its top-level directory:\n"
+"\n"
+" svn merge ^/trunk\n"
+"\n"
+" Note that the merge is now only in your local working copy and still\n"
+" needs to be committed to the repository so that it can be seen by\n"
+" others. You can review the changes and you may have to resolve\n"
+" conflicts before you commit the merge.\n"
+"\n"
+" - Reintegrate Merge Example -\n"
+"\n"
+" The feature branch was last synced with trunk up to revision X. So the\n"
+" difference between trunk@X and feature@HEAD contains the complete set\n"
+" of changes that implement the feature, and no other changes. These\n"
+" changes are applied to trunk.\n"
+"\n"
+" rW rX\n"
+" trunk ------+--------------------L------------------o\n"
+" \\ . ^\n"
+" \\ ............. /\n"
+" \\ . /\n"
+" feature +--------------------------------R\n"
+"\n"
+" In the diagram above, L marks the left side (trunk@X) and R marks the\n"
+" right side (feature@HEAD) of the merge. The difference between the\n"
+" left and right side is merged into trunk, the target.\n"
+"\n"
+" To perform the merge, have a clean working copy of trunk and run the\n"
+" following command in its top-level directory:\n"
+"\n"
+" svn merge ^/feature\n"
+"\n"
+" To prevent unnecessary merge conflicts, a reintegrate merge requires\n"
+" that TARGET_WCPATH is not a mixed-revision working copy, has no local\n"
+" modifications, and has no switched subtrees.\n"
+"\n"
+" A reintegrate merge also requires that the source branch is coherently\n"
+" synced with the target -- in the above example, this means that all\n"
+" revisions between the branch point W and the last merged revision X\n"
+" are merged to the feature branch, so that there are no unmerged\n"
+" revisions in-between.\n"
+"\n"
+"\n"
+" 2. This form is called a 'cherry-pick' merge:\n"
+"\n"
+" svn merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [TARGET_WCPATH]\n"
+"\n"
+" A cherry-pick merge is used to merge specific revisions (or revision\n"
+" ranges) from one branch to another. By default, this uses merge\n"
+" tracking to automatically skip any revisions that have already been\n"
+" merged to the target; you can use the --ignore-ancestry option to\n"
+" disable such skipping.\n"
+"\n"
+" SOURCE is usually a URL. The optional '@REV' specifies only the peg\n"
+" revision of the URL and does not affect the merge range; if REV is not\n"
+" specified, the HEAD revision is assumed. If SOURCE is a working copy\n"
+" path, the corresponding URL of the path is used, and the default value\n"
+" of 'REV' is the base revision (usually the revision last updated to).\n"
+"\n"
+" TARGET_WCPATH is a working copy path; if omitted, '.' is generally\n"
+" assumed. The special cases noted above in the 'complete' merge form\n"
+" also apply here.\n"
+"\n"
+" The revision ranges to be merged are specified by the '-r' and/or '-c'\n"
+" options. '-r N:M' refers to the difference in the history of the\n"
+" source branch between revisions N and M. You can use '-c M' to merge\n"
+" single revisions: '-c M' is equivalent to '-r <M-1>:M'. Each such\n"
+" difference is applied to TARGET_WCPATH.\n"
+"\n"
+" If the mergeinfo in TARGET_WCPATH indicates that revisions within the\n"
+" range were already merged, changes made in those revisions are not\n"
+" merged again. If needed, the range is broken into multiple sub-ranges,\n"
+" and each sub-range is merged separately.\n"
+"\n"
+" A 'reverse range' can be used to undo changes. For example, when\n"
+" source and target refer to the same branch, a previously committed\n"
+" revision can be 'undone'. In a reverse range, N is greater than M in\n"
+" '-r N:M', or the '-c' option is used with a negative number: '-c -M'\n"
+" is equivalent to '-r M:<M-1>'. Undoing changes like this is also known\n"
+" as performing a 'reverse merge'.\n"
+"\n"
+" Multiple '-c' and/or '-r' options may be specified and mixing of\n"
+" forward and reverse ranges is allowed.\n"
+"\n"
+" - Cherry-pick Merge Example -\n"
+"\n"
+" A bug has been fixed on trunk in revision 50. This fix needs to\n"
+" be merged from trunk onto the release branch.\n"
+"\n"
+" 1.x-release +-----------------------o-----\n"
+" / ^\n"
+" / |\n"
+" / |\n"
+" trunk ------+--------------------------LR-----\n"
+" r50\n"
+"\n"
+" In the above diagram, L marks the left side (trunk@49) and R marks the\n"
+" right side (trunk@50) of the merge. The difference between the left\n"
+" and right side is applied to the target working copy path.\n"
+"\n"
+" Note that the difference between revision 49 and 50 is exactly those\n"
+" changes that were committed in revision 50, not including changes\n"
+" committed in revision 49.\n"
+"\n"
+" To perform the merge, have a clean working copy of the release branch\n"
+" and run the following command in its top-level directory; remember\n"
+" that the default target is '.':\n"
+"\n"
+" svn merge -c50 ^/trunk\n"
+"\n"
+" You can also cherry-pick several revisions and/or revision ranges:\n"
+"\n"
+" svn merge -c50,54,60 -r65:68 ^/trunk\n"
+"\n"
+"\n"
+" 3. This form is called a '2-URL merge':\n"
+"\n"
+" svn merge SOURCE1[@REV1] SOURCE2[@REV2] [TARGET_WCPATH]\n"
+"\n"
+" You should use this merge variant only if the other variants do not\n"
+" apply to your situation, as this variant can be quite complex to\n"
+" master.\n"
+"\n"
+" Two source URLs are specified, identifying two trees on the same\n"
+" branch or on different branches. The trees are compared and the\n"
+" difference from SOURCE1@REV1 to SOURCE2@REV2 is applied to the\n"
+" working copy of the target branch at TARGET_WCPATH. The target\n"
+" branch may be the same as one or both sources, or different again.\n"
+" The three branches involved can be completely unrelated.\n"
+"\n"
+" TARGET_WCPATH is a working copy path; if omitted, '.' is generally\n"
+" assumed. The special cases noted above in the 'complete' merge form\n"
+" also apply here.\n"
+"\n"
+" SOURCE1 and/or SOURCE2 can also be specified as a working copy path,\n"
+" in which case the merge source URL is derived from the working copy.\n"
+"\n"
+" - 2-URL Merge Example -\n"
+"\n"
+" Two features have been developed on separate branches called 'foo' and\n"
+" 'bar'. It has since become clear that 'bar' should be combined with\n"
+" the 'foo' branch for further development before reintegration.\n"
+"\n"
+" Although both feature branches originate from trunk, they are not\n"
+" directly related -- one is not a direct copy of the other. A 2-URL\n"
+" merge is necessary.\n"
+"\n"
+" The 'bar' branch has been synced with trunk up to revision 500.\n"
+" (If this revision number is not known, it can be located using the\n"
+" 'svn log' and/or 'svn mergeinfo' commands.)\n"
+" The difference between trunk@500 and bar@HEAD contains the complete\n"
+" set of changes related to feature 'bar', and no other changes. These\n"
+" changes are applied to the 'foo' branch.\n"
+"\n"
+" foo +-----------------------------------o\n"
+" / ^\n"
+" / /\n"
+" / r500 /\n"
+" trunk ------+------+-----------------L---------> /\n"
+" \\ . /\n"
+" \\ ............ /\n"
+" \\ . /\n"
+" bar +-----------------------------------R\n"
+"\n"
+" In the diagram above, L marks the left side (trunk@500) and R marks\n"
+" the right side (bar@HEAD) of the merge. The difference between the\n"
+" left and right side is applied to the target working copy path, in\n"
+" this case a working copy of the 'foo' branch.\n"
+"\n"
+" To perform the merge, have a clean working copy of the 'foo' branch\n"
+" and run the following command in its top-level directory:\n"
+"\n"
+" svn merge ^/trunk@500 ^/bar\n"
+"\n"
+" The exact changes applied by a 2-URL merge can be previewed with svn's\n"
+" diff command, which is a good idea to verify if you do not have the\n"
+" luxury of a clean working copy to merge to. In this case:\n"
+"\n"
+" svn diff ^/trunk@500 ^/bar@HEAD\n"
+"\n"
+"\n"
+" The following applies to all types of merges:\n"
+"\n"
+" To prevent unnecessary merge conflicts, svn merge requires that\n"
+" TARGET_WCPATH is not a mixed-revision working copy. Running 'svn update'\n"
+" before starting a merge ensures that all items in the working copy are\n"
+" based on the same revision.\n"
+"\n"
+" If possible, you should have no local modifications in the merge's target\n"
+" working copy prior to the merge, to keep things simpler. It will be\n"
+" easier to revert the merge and to understand the branch's history.\n"
+"\n"
+" Switched sub-paths should also be avoided during merging, as they may\n"
+" cause incomplete merges and create subtree mergeinfo.\n"
+"\n"
+" For each merged item a line will be printed with characters reporting the\n"
+" action taken. These characters have the following meaning:\n"
"\n"
" A Added\n"
" D Deleted\n"
@@ -8707,71 +11531,475 @@ msgid ""
" the first and second columns indicate textual conflicts in files\n"
" and in property values, respectively.\n"
"\n"
-" NOTE: Subversion will only record metadata to track the merge\n"
-" if the two sources are on the same line of history -- if the\n"
-" first source is an ancestor of the second, or vice-versa. This is\n"
-" guaranteed to be the case when using the third form listed above.\n"
-" The --ignore-ancestry option overrides this, forcing Subversion to\n"
-" regard the sources as unrelated and not to track the merge.\n"
-msgstr ""
-"Wendet die Unterschiede zwischen zwei Quellen auf einen Arbeitskopiepfad\n"
-"an.\n"
-"Aufruf: 1. merge QuellURL1[@N] QuellURL2[@M] [AKPfad]\n"
-" 2. merge QuellAKPfad1@N QuellAKPfad2@M [AKPfad]\n"
-" 3. merge [-c M[,N...] | -r N:M ...] QUELLE[@REV] [AKPfad]\n"
-"\n"
-" 1. In der ersten Form werden die Quell-URLs in den Revisionen\n"
-" N und M angegeben. Dies sind die beiden Quellen, die verglichen werden.\n"
-" Die Revisionen entsprechen HEAD, wenn keine Nummern angegeben wurden.\n"
-"\n"
-" 2. In der zweiten Form werden die den Arbeitskopiepfaden entsprechenden\n"
-" URLs miteinander verglichen. Die Revisionen müssen angegeben werden.\n"
-"\n"
-" 3. In der dritten Form kann QUELLE eine URL oder ein Arbeitskopiepfad\n"
-" (in diesem Fall wird die entsprechende URL verwendet) sein. QUELLE\n"
-" (in Revision REV) wird verglichen, wie es zwischen den Revisionen N\n"
-" und M für jeden angegebenen Revisionsbereich existierte. Ohne Angabe\n"
-" von REV wird HEAD verwendet. Die Option »-c M« ist äquivalent zu\n"
-" »-r <M-1>:M« und »-c -M« kehrt dies um: »-r M:<M-1>«. Falls keine\n"
-" Revisionsbereiche angegeben wurden, wird 0:REV verwendet. Mehrere\n"
-" Angaben von »-c« und/oder »-r« sind möglich und das Mischen von\n"
-" vor- und rückwärtigen Bereichen ist erlaubt.\n"
-"\n"
-" AKPfad ist der Arbeitskopiepfad, in den die Änderungen geschrieben werden.\n"
-" Die Vorgabe für AKPfad ist ».«, es sei denn, die Quellen haben einen\n"
-" identischen Basisnamen, der eine Datei unterhalb von ».« beschreibt.\n"
-" In diesem Fall werden die Änderungen auf die gefundene Datei angewandt.\n"
-"\n"
-" ACHTUNG: Subversion wird nur Metadaten zum Verfolgen der Zusammenführung\n"
-" aufzeichnen, falls die zwei Quellen sich in der selben Historienabfolge\n"
-" befinden - falls die erste Quelle ein Vorgänger der zweiten ist oder\n"
-" umgekehrt. Dies ist garantiert der Fall, falls die dritte Form verwendet\n"
-" wird. Die Option --ignore-ancestry überschreibt dies und zwingt Subversion\n"
-" dazu, die Quellen als nicht zueinander bezogen zu betrachten und die\n"
-" Zusammenführung nicht aufzuzeichnen.\n"
-
-#: ../svn/main.c:732
-msgid ""
-"Display merge-related information.\n"
-"usage: mergeinfo SOURCE[@REV] [TARGET[@REV]]\n"
+" - Merge Tracking -\n"
+"\n"
+" Subversion uses the svn:mergeinfo property to track merge history. This\n"
+" property is considered at the start of a merge to determine what to merge\n"
+" and it is updated at the conclusion of the merge to describe the merge\n"
+" that took place. Mergeinfo is used only if the two sources are on the\n"
+" same line of history -- if the first source is an ancestor of the second,\n"
+" or vice-versa (i.e. if one has originally been created by copying the\n"
+" other). This is verified and enforced when using sync merges and\n"
+" reintegrate merges.\n"
+"\n"
+" The --ignore-ancestry option prevents merge tracking and thus ignores\n"
+" mergeinfo, neither considering it nor recording it.\n"
+"\n"
+" - Merging from foreign repositories -\n"
+"\n"
+" Subversion does support merging from foreign repositories.\n"
+" While all merge source URLs must point to the same repository, the merge\n"
+" target working copy may come from a different repository than the source.\n"
+" However, there are some caveats. Most notably, copies made in the\n"
+" merge source will be transformed into plain additions in the merge\n"
+" target. Also, merge-tracking is not supported for merges from foreign\n"
+" repositories.\n"
+msgstr ""
+"Führt Änderungen aus dem Projektarchiv in einer Arbeitskopie zusammen.\n"
+"Aufruf: 1. merge QUELLE[@REV] [ZIEL_AKPfad]\n"
+" (»vollständige« Zusammenführung)\n"
+" 2. merge [-c M[,N...] | -r N:M ...] QUELLE[@REV] [ZIEL_AKPfad]\n"
+" (Zusammenführung einzelner ausgewählter Änderungen)\n"
+" 3. merge QUELLE1[@REV1] QUELLE2[@REV2] [ZIEL_AKPfad]\n"
+" (Zusammenführung der Unterschiede zweier URLs)\n"
+"\n"
+" 1. Diese Form, mit einem Quellpfad und keinem Revisionsbereich wird\n"
+" »vollständige« Zusammenführung genannt:\n"
+"\n"
+" svn merge QUELLE[@REV] [ZIEL_AKPfad]\n"
+"\n"
+" Die vollständige Zusammenführung wird für die Synchronisation und\n"
+" die Reintegration von Zweigen (nach dem Muster »Feature Branch«,\n"
+" s.u.) verwendet. Sie findet alle Änderungen in einem Quellpfad, die\n"
+" noch nicht in das Ziel eingebracht wurden, und führt sie mit\n"
+" Arbeitskopie zusammen. Die Zusammenführungsverfolgung wird für die\n"
+" Erkennung schon eingebrachter Änderungen verwendet.\n"
+"\n"
+" QUELLE ist der Zweig von dem die Änderungen geholt werden, und\n"
+" ZIEL_AKPfad eine Arbeitskopie des Zielzweigs, auf die die Änderungen\n"
+" angewendet werden. Normalerweise sollten QUELLE und ZIEL_AKPfad\n"
+" auf das Wurzelverzeichnis eines Zweigs zeigen. (Wenn nur ein\n"
+" Unterbaum zusammengeführt werden soll, muss sein Pfad sowohl in\n"
+" QUELLE als auch in ZIEL_AKPfad enthalten sein; Dies ist nicht\n"
+" empfohlen, um Zusammenführungsinformationen auf Unterbäumen zu\n"
+" vermeiden.)\n"
+"\n"
+" QUELLE ist im Normalfall eine URL. Die optionale Angabe von »@REV«\n"
+" gibt sowohl die Fix-Revision zum Auffinden des Pfades als auch die\n"
+" letzte Revision an, die für die Zusammenführung in Betracht\n"
+" gezogen wird. Ist REV nicht angegeben, wird »HEAD« angenommen. Ist\n"
+" QUELLE der Pfad einer Arbeitskopie, wird die damit zusammenhängende\n"
+" URL verwendet. Die Basisversion der Arbeitskopie wird dann als REV\n"
+" verwendet, dies ist meist die letzte Revision, auf die die\n"
+" Arbeitskopie aktualisiert wurde.\n"
+"\n"
+" ZIEL_AKPfad ist ein Arbeitskopiepfad; Fehlt die Angabe, wird\n"
+" allgemein das aktuelle Arbeitsverzeichnis ».« angenommen. Es gibt\n"
+" folgende Sonderfälle:\n"
+"\n"
+" - wenn QUELLE eine URL ist:\n"
+"\n"
+" - Sind der Basisname der URL und er Basisname von ».« gleich\n"
+" so werden die Unterschiede auf ».« angewandt. Andernfalls,\n"
+" falls eine Datei mit dem gleichen Basisnamen die jeder der\n"
+" URL in ».« vorhanden ist, werden die Unterschiede auf diese\n"
+" Datei angewandt. In allen anderen Fällen wird als Ziel ».«\n"
+" verwendet.\n"
+"\n"
+" - wenn QUELLE ein Arbeitskopiepfad ist:\n"
+"\n"
+" - Wenn QUELLE eine Datei ist, werden die Unterschiede auf\n"
+" diese Datei angewandt (Hilfreich beim rückwärtigen\n"
+" Zusammenführen früherer Änderungen). Andernfalls, wenn es\n"
+" sich um ein Verzeichnis handelt, wird als Ziel ».«\n"
+" verwendet.\n"
+"\n"
+" Im Normalgebrauch ist die Arbeitskopie auf dem neuesten Stand, auf\n"
+" einer einzigen Revision, ohne lokale Änderungen und ohne umgestellte\n"
+" Unterbäume.\n"
+"\n"
+" - Muster »Feature Branch« für Zusammenführungen von Codezweigen -\n"
+"\n"
+" In diesem sehr gebräuchlichen, auch »Entwicklungszweige« genannten\n"
+" Arbeitsschema, erzeugt ein Entwickler einen Zweig und überträgt eine\n"
+" Zahl von Revisionen für die Umsetzung einer neuen Funktion. Der\n"
+" Entwickler führt regelmäßig Änderungen des Übergeordneten Zweiges\n"
+" zusammen, um seinen Entwicklungszweig mit diesen Änderungen aktuell\n"
+" zu halten. Wenn die neue Funktion fertiggestellt ist, führt der\n"
+" Entwickler eine Zusammenführung vom Entwicklungszweig in den\n"
+" übergeordneten Zweig zur Reintegration der Änderungen aus.\n"
+"\n"
+" Haupt- --+----------o------o-o-------------o------\n"
+" zweig \\ \\ \\ /\n"
+" \\ Zusammenf. Zusammenf. Zusammenf.\n"
+" \\ \\ \\ /\n"
+" Entwicklungs- +--o-o-------o----o-o----o-----------\n"
+" zweig\n"
+"\n"
+" Eine Zusammenführung vom einem übergeordneten Zweig in einen\n"
+" Entwicklungszweig wird als »sync« (Synchronisation) oder »catch-up«\n"
+" (Aufholen) bezeichnet. Eine Zusammenführung vom Entwicklungszweig in\n"
+" den übergeordneten Zweig dagegen »reintegrate« (Reintegration).\n"
+"\n"
+" - Beispiel für Zusammenführung zur Synchronisation -\n"
+" ............\n"
+" . .\n"
+" trunk --+------------L--------------R------\n"
+" \\ \\\n"
+" \\ |\n"
+" \\ v\n"
+" feature +------------------------o-----\n"
+" r100 r200\n"
+"\n"
+" Subversion wird alle Änderungen in »trunk« ermitteln, die noch nicht\n"
+" in den Entwicklungszweig »feature« zusammengeführt wurden. In diesem\n"
+" Fall ist es ein einziger Revisionsbereich, r100:200. Im Diagramm oben\n"
+" markiert »L« die linke Seite (trunk@100), während »R« die rechte Seite\n"
+" (trunk@200) anzeigt. Der Unterschied zwischen »L« und »R« wird auf den\n"
+" Zielpfad in einer Arbeitskopie angewandt. In diesem Beispiel ist dies\n"
+" eine Arbeitskopie des gesamten Entwicklungszweigs ohne lokale\n"
+" Änderungen.\n"
+"\n"
+" Um die Zusammenführung zur Synchronisation auszuführen, verwenden Sie\n"
+" eine Arbeitskopie des Entwicklungszweigs und führen Sie dieses\n"
+" Kommando im obersten Verzeichnis aus:\n"
+"\n"
+" svn merge ^/trunk\n"
+"\n"
+" Beachten Sie, dass sich die Änderungen dieser Zusammenführung dann\n"
+" nur in Ihrer Arbeitskopie befinden und noch in das Projektarchiv\n"
+" übertragen werden müssen, damit sie von anderen Benutzern gesehen\n"
+" werden können. Sie können die Änderungen überprüfen und müssen\n"
+" aufgetretene Konflikte auflösen, bevor Sie die Zusammenführung\n"
+" übertragen.\n"
+"\n"
+" - Beispiel für Zusammenführung zur Reintegration -\n"
+"\n"
+" Der Entwicklungszweig »feature« wurde zuletzt bis zu Revision »X«\n"
+" mit dem Hauptzweig »trunk« synchronisiert. Daher stellt der\n"
+" Unterschied zwischen »trunk@X« und »feature@HEAD« die gesamte\n"
+" Implementierung der neuen Funktion dar, und keine weiteren Änderungen.\n"
+" Diese Änderungen werden nach »trunk« eingebracht.\n"
+"\n"
+" rW rX\n"
+" trunk ------+--------------------L------------------o\n"
+" \\ . ^\n"
+" \\ ............. /\n"
+" \\ . /\n"
+" feature +--------------------------------R\n"
+"\n"
+" Im Diagramm oben markiert »L« die linke Seite (trunk@X), während »R«\n"
+" die rechte Seite (feature@HEAD) der Zusammenführung anzeigt. Der\n"
+" Unterschied zwischen der linken und der rechten Seite wird auf »trunk«\n"
+" als Ziel angewandt.\n"
+"\n"
+" Um die Zusammenführung zur Reintegratoin auszuführen, verwenden Sie\n"
+" eine Arbeitskopie des Entwicklungszweigs »feature« und führen Sie\n"
+" dieses Kommando im obersten Verzeichnis aus:\n"
+"\n"
+" svn merge ^/feature\n"
+"\n"
+" Um unnötige Konflikte zu vermeiden, erfordern Zusammenführungen zur\n"
+" Reintegration eine Arbeitskopie in ZIEL_AKPfad in einer einzelnen\n"
+" Revision, ohne lokale Änderungen oder umgestellte Unterbäume.\n"
+"\n"
+" Eine Zusammenführung zur Reintegration erfordert auch, dass der\n"
+" Quellzweig durchgehend mit dem dem Ziel synchronisiert ist -- im\n"
+" Beispiel oben bedeutet dies, dass alle Revisionen zwischen dem\n"
+" Verzweigungspunkt W und der letzten zusammengeführten Revision X\n"
+" in den Entwicklungszweig zusammengeführt wurden, und es keine nicht\n"
+" zusammengeführten Revisionen zwischen diesen gibt.\n"
+"\n"
+"\n"
+" 2. Diese Form dient der Zusammenführung einzelner ausgewählter\n"
+" Änderungen:\n"
+"\n"
+" svn merge [-c M[,N...] | -r N:M ...] QUELLE[@REV] [ZIEL_AKPfad]\n"
+"\n"
+" Diese Form, auch »cherry-pick« bzw. »Rosinen herauspicken« genannt,\n"
+" führt bestimmte Revisionen (oder Revisionsbereiche) eines Zweiges in\n"
+" einen anderen zusammen. Die Zusammenführungsverfolgung wird verwendet,\n"
+" um schon in dieses Ziel zusammenführte Revisionen automatisch zu\n"
+" überspringen. Verwenden Sie die Option »--ignore-ancestry«, um diese\n"
+" Vorgabe zu deaktivieren.\n"
+"\n"
+" QUELLE ist im Normalfall eine URL. Die optionale Angabe von »@REV«\n"
+" gibt nur Fix-Revision zum Auffinden des Pfades an und beeinflusst\n"
+" nicht den Revisionsbereich für die Zusammenführung. Ist REV nicht\n"
+" angegeben, wird »HEAD« angenommen. Ist QUELLE ein Arbeitskopie-\n"
+" pfad, wird die damit zusammenhängende URL verwendet. Die\n"
+" Basisversion der Arbeitskopie wird dann als REV verwendet, dies ist\n"
+" meist die letzte Revision, auf die sie aktualisiert wurde.\n"
+"\n"
+" ZIEL_AKPfad ist ein Arbeitskopiepfad; Fehlt die Angabe, wird allgemein\n"
+" das aktuelle Arbeitsverzeichnis ».« angenommen. Die unter der Form\n"
+" der vollständigen Zusammenführung erwähnten Sonderfälle finden hier\n"
+" ebenfalls Anwendung.\n"
+"\n"
+" Die zusammenzuführenden Revisionsbereiche werden durch die Optionen\n"
+" »-r« und/oder »-c« angegeben. »-r N:M« bezieht sich auf den\n"
+" Unterschied in der Versionsgeschichte im Quellzweig zwischen den\n"
+" Revisionen N und M. Einzelne Revisionen können mit »-c M«\n"
+" zusammengeführt werden, dabei ist »-c M« gleichbedeutend mit\n"
+" »-r <M-1>:M«. Alle so ausgewählten Unterschiede werden nach\n"
+" ZIEL_AKPfad zusammengeführt.\n"
+"\n"
+" Wenn die Zusammenführungsinformationen in ZIEL_AKPfad anzeigen, dass\n"
+" die Revisionen im angegebenen Bereich schon zusammengeführt wurden,\n"
+" werden Änderungen aus diesen Revisionen nicht erneut zusammengeführt.\n"
+" Falls nötig, wird das Revisionsbereich in Unterbereiche aufgeteilt und\n"
+" jeder Unterbereich getrennt in das Ziel zusammengeführt.\n"
+"\n"
+" Eine »rückwärtige Zusammenführung« kann verwendet werden, um\n"
+" Änderungen rückgängig zu machen. Wenn z.B. Quelle und Ziel sich auf\n"
+" den selben Zweig beziehen, kann eine vorher übertragene Revision\n"
+" rückgängig gemacht werden. Dabei wird der Revisionsbereich umgekehrt,\n"
+" also mit einem N größer M, bei »-r N:M«, oder durch Verwendung einer\n"
+" negativen Zahl »-c -M«, angegeben. »-c -M« ist dabei gleichbedeutend\n"
+" mit »-r M:<M-1>«. Änderungen so rückgängig zu machen ist auch als\n"
+" »reverse merge« bzw. »rückwärtige Zusammenführung« bekannt.\n"
+"\n"
+" Es können mehrere Optionen der Art »-c« und »-r« angegeben werden, die\n"
+" gleichzeitige Angabe von normalen und rückwärtigen Revisionsbereichen\n"
+" ist erlaubt.\n"
+"\n"
+" - Beispiel für Zusammenführung einzelner ausgewählter Änderungen -\n"
+"\n"
+" Ein Programmfehler wurde im Hauptentwicklungszweig »trunk« in Revision\n"
+" 50 behoben. Diese Korrektur soll von dort in den Wartungszweig\n"
+" »1.x-release« zusammengeführt werden.\n"
+"\n"
+" 1.x-release +-----------------------o-----\n"
+" / ^\n"
+" / |\n"
+" / |\n"
+" trunk ------+--------------------------LR-----\n"
+" r50\n"
+"\n"
+" Im Diagramm oben markiert »L« die linke Seite (trunk@49) und R die\n"
+" rechte Seite (trunk@50) der Zusammenführung. Der Unterschied zwischen\n"
+" der linken und der rechten Seite wird auf den Zielpfad in der\n"
+" Arbeitskopie angewandt.\n"
+"\n"
+" Beachten Sie, dass der Unterschied zwischen den Revision 49 und 50\n"
+" genau der Änderung entspricht, die durch Revision 50 übertragen\n"
+" wurde. Änderungen die durch Revision 49 übertragen wurde, sind dagegen\n"
+" nicht enthalten.\n"
+"\n"
+" Um diese Zusammenführung auszuführen, verwenden Sie eine Arbeitskopie\n"
+" ohne lokale Änderungen und führen die dieses Kommando deren obersten\n"
+" Verzeichnis aus. Das vorgegebene Ziel ist ».«, das aktuelle\n"
+" Verzeichnis.\n"
+"\n"
+" svn merge -c50 ^/trunk\n"
+"\n"
+" Sie können auch mehrere Revisionen oder Revisionsbereiche auswählen:\n"
+"\n"
+" svn merge -c50,54,60 -r65:68 ^/trunk\n"
+"\n"
+"\n"
+" 3. Diese Form dient der Zusammenführung der Unterschiede zweier URLs:\n"
+"\n"
+" svn merge QUELLE1[@REV1] QUELLE2[@REV2] [ZIEL_AKPfad]\n"
+"\n"
+" Diese Variante sollte nur verwendet werden, denn die vorherigen nicht\n"
+" auf die vorliegende Situation zutreffen, da sie unter Umständen\n"
+" komplex zu handhaben ist.\n"
+"\n"
+" Zwei Quell-URLs werden angegeben, die zwei Verzeichnisbäume im selben\n"
+" oder in verschiedenen Zweigen identfizieren. Diese werden verglichen,\n"
+" und der Unterschied zwischen QUELLE1@REV1 und QUELLE2@REV2 auf die\n"
+" Arbeitskopie des Zielzweigs in ZIEL_AKPfad angewandt. Der Zielzweig\n"
+" kann dabei einem der beiden Quellen entsprechen, oder kann wieder\n"
+" verschieden sein. Die drei involvierten Zweige müssen nicht in einer\n"
+" Beziehung zueinander stehen.\n"
+"\n"
+" ZIEL_AKPfad ist ein Arbeitskopiepfad; Fehlt die Angabe, wird allgemein\n"
+" das aktuelle Arbeitsverzeichnis ».« angenommen. Die unter der Form\n"
+" der vollständigen Zusammenführung erwähnten Sonderfälle finden hier\n"
+" ebenfalls Anwendung.\n"
+"\n"
+" QUELLE1 und/oder QUELLE2 können auch als ein Pfad in einer\n"
+" Arbeitskopie angegeben werden. In diesem Fall wird URL für die\n"
+" Zusammenführung aus dieser Arbeitskopie abgeleitet.\n"
+"\n"
+" - Beispiel für Zusammenführung der Unterschiede zweier URLs -\n"
+"\n"
+"\n"
+" Zwei neue Funktionen wurden in getrennten Entwicklungszweigen »foo«\n"
+" und »bar« entwickelt. Danach wurde klar, dass »bar« mit »foo«\n"
+" kombiniert werden sollte, vor weiterer Entwicklung und Reintegration\n"
+" in den Hauptzweig »trunk«.\n"
+"\n"
+" Obwohl beide Entwicklungszweige von Hauptzweig »trunk« ausgehen, sind\n"
+" sie nicht direkt verwandt - sie sind nicht direkte Kopien voneinander.\n"
+" Eine Zusammenführung der Unterschiede zweier URLs ist notwendig.\n"
+"\n"
+" »bar« wurde zuvor mit »trunk« bis zu dessen Revision 500\n"
+" synchronisiert. (Falls diese Revisionsnummer nicht bekannt ist, kann\n"
+" sie mit den Befehlen »svn log« und/oder »svn mergeinfo« ermittelt\n"
+" werden.)\n"
+" Der Unterschied zwischen trunk@500 und bar@HEAD enthält also die\n"
+" komplette Menge an Unterschieden, die die in diesem Zweig entwickelte\n"
+" Funktion ausmachen, und keine weiteren Unterschiede. Diese Änderungen\n"
+" werden jetzt auf den »bar« angewandt.\n"
"\n"
-" Display information related to merges (or potential merges) between\n"
-" SOURCE and TARGET (default: '.'). If the --show-revs option\n"
-" is not provided, display revisions which have been merged from\n"
-" SOURCE to TARGET; otherwise, display the type of information\n"
-" specified by the --show-revs option.\n"
-msgstr ""
-"Anzeige relevanter Informationen zu Zusammenführungen.\n"
-"Aufruf: mergeinfo QUELLE[@REV] [ZIEL[@REV]]\n"
+" foo +-----------------------------------o\n"
+" / ^\n"
+" / /\n"
+" / r500 /\n"
+" trunk ------+------+-----------------L---------> /\n"
+" \\ . /\n"
+" \\ ............ /\n"
+" \\ . /\n"
+" bar +-----------------------------------R\n"
"\n"
-" Zeigt Informationen zu Zusammenführungen (oder potentiellen\n"
-" Zusammenführungen) zwischen QUELLE und ZIEL (Standard: ».«) an.\n"
-" Falls die Option --show-revs nicht angegeben wurde, werden\n"
-" Revisionen, die von QUELLE nach ZIEL zusammengeführt wurden,\n"
-" angezeigt. Andernfalls wird die Art der Information angezeigt,\n"
-" die durch die Option --show-revs spezifiziert wurde.\n"
-
-#: ../svn/main.c:743
+" Im Diagramm oben markiert »L« die linke Seite (trunk@500) und R die\n"
+" rechte Seite (bar@HEAD) der Zusammenführung. Der Unterschied zwischen\n"
+" der linken und der rechten Seite wird auf den Zielpfad in der\n"
+" Arbeitskopie angewandt. In diesem Fall ist dies eine Arbeitskopie des\n"
+" Entwicklungszweigs »foo«\n"
+"\n"
+" Um diese Zusammenführung auszuführen, verwenden Sie eine Arbeitskopie\n"
+" des Entwicklungszweigs »foo« ohne lokale Änderungen und führen die\n"
+" dieses Kommando im obersten Verzeichnis aus:\n"
+"\n"
+" svn merge ^/trunk@500 ^/bar\n"
+"\n"
+" Die genauen Änderungen, die durch die Zusammenführung der Unterschiede\n"
+" zweier URLs angewandt werden, können mit Hilfe des Kommandos »svn diff«\n"
+" im Voraus begutachtet werden. Diese Erfordert dann keine Arbeitskopie.\n"
+" In diesem Fall:\n"
+"\n"
+" svn diff ^/trunk@500 ^/bar@HEAD\n"
+"\n"
+"\n"
+" Folgendes trifft auf alle Zusammenführungen zu:\n"
+"\n"
+" Zur Vermeidung unnötiger Zusammenführungskonflikte erfordert »svn merge«,\n"
+" dass ZIEL_AKPfad keine Arbeitskopie mit verschiedenen Revision ist.\n"
+" Führen Sie »svn update« aus, um vor der Zusammenführung sicherzustellen,\n"
+" dass sich alle Objekte der Arbeitskopie auf der selben Revision befinden.\n"
+"\n"
+" Wenn möglich sollten sich vor der Zusammenführung der Einfachheit halber\n"
+" im Ziel der Zusammenführung keine lokalen Änderungen befinden. Es wird\n"
+" so einfacher, eine Zusammenführung rückgängig zu machen und die\n"
+" Geschichte des Zweigs zu verstehen.\n"
+"\n"
+" Umgestellte Unterbäume sollten ebenfalls bei Zusammenführungen vermieden\n"
+" werden, das sie unvollständige Zusammenführungen zur Folge haben können\n"
+" und Zusammenführungsinformationen auf Unterbäumen erzeugen.\n"
+"\n"
+" Für jedes zusammengeführte Objekt wird eine Zeile mit einem Buchstaben\n"
+" für die durchgeführte Aktion ausgegeben. Diese haben die folgenden\n"
+" Bedeutungen:\n"
+"\n"
+" A Added - Hinzugefügt\n"
+" D Deleted - Gelöscht\n"
+" U Updated - Aktualisiert\n"
+" C Conflict - Konflikt\n"
+" G Merged - Zusammengeführt\n"
+" E Existed - Existierend\n"
+" R Replaced - Ersetzt\n"
+"\n"
+" Ein Buchstabe in der ersten Spalte gibt Informationen über das Objekt\n"
+" selbst. Buchstaben in der zweiten Spalte betreffen Eigenschaften des\n"
+" Objekts. Ein »C« in der dritten Spalte zeigt einen Baumkonflikt an,\n"
+" während es in der ersten und zweiten Spalte jeweils einen Konflikt im\n"
+" Text bzw. einer Eigenschaft anzeigt.\n"
+"\n"
+" - Zusammenführungsverfolgung -\n"
+"\n"
+" Subversion verwendet die Eigenschaft »svn:mergeinfo«, um die Geschichte\n"
+" von Zusammenführungen aufzuzeichnen. Diese Eigenschaft wird zu Beginn\n"
+" der Zusammenführung ausgewertet, um die zusammenzuführenden Änderungen\n"
+" zu erhalten. Sie wird am Ende der Zusammenführung aktualisiert, um die\n"
+" vorgenommene Zusammenführung zu beschreiben. Dabei werden Informationen\n"
+" zur Zusammenführung nur verwendet, wenn die beiden Quellen sich auf der\n"
+" gleichen Linie in der Versionsgeschichte befinden -- d.h. die erste\n"
+" Quelle ist ein Vorfahre der zweiten oder umgekehrt (z.B. wenn eine Quelle\n"
+" ursprünglich die Kopie der anderen war). Diese Bedingung wird bei\n"
+" Zusammenführungen zur Synchronisation und zur Reintegration überprüft und\n"
+" durchgesetzt.\n"
+"\n"
+" Die Option »--ignore-ancestry« verhindert die Zusammenführungsverfolgung\n"
+" und ignoriert damit Zusammenführungsinformationen, sie werden weder\n"
+" in Betracht gezogen noch aufgezeichnet.\n"
+"\n"
+" - Zusammenführungen aus einem fremdem Projektarchiv -\n"
+"\n"
+" Subversion unterstützt Zusammenführungen aus fremdem Projektarchiven.\n"
+" Während alle URLs für Quellen der Zusammenführung auf das selbe\n"
+" Projektarchiv zeigen müssen, kann sich die Arbeitskopie als Ziel auf ein\n"
+" davon verschiedenes Projektarchiv beziehen. Es gibt aber folgende\n"
+" Umstände, die es zu beachten gilt: In der Quelle durchgeführte Kopien\n"
+" werden in einfache Hinzufügungen im Ziel umgewandelt. Weiterhin wird\n"
+" eine Zusammenführungsverfolgung bei Zusammenführungen aus fremdem\n"
+" Projektarchiven nicht unterstützt.\n"
+
+#: ../svn/svn.c:1094
+msgid ""
+"Display merge-related information.\n"
+"usage: 1. mergeinfo SOURCE[@REV] [TARGET[@REV]]\n"
+" 2. mergeinfo --show-revs=WHICH SOURCE[@REV] [TARGET[@REV]]\n"
+"\n"
+" 1. Summarize the history of merging between SOURCE and TARGET. The graph\n"
+" shows, from left to right:\n"
+" the youngest common ancestor of the branches;\n"
+" the latest full merge in either direction, and thus the common base\n"
+" that will be used for the next complete merge;\n"
+" the repository path and revision number of the tip of each branch.\n"
+"\n"
+" 2. Print the revision numbers on SOURCE that have been merged to TARGET\n"
+" (with --show-revs=merged), or that have not been merged to TARGET\n"
+" (with --show-revs=eligible). Print only revisions in which there was\n"
+" at least one change in SOURCE.\n"
+"\n"
+" If --revision (-r) is provided, filter the displayed information to\n"
+" show only that which is associated with the revisions within the\n"
+" specified range. Revision numbers, dates, and the 'HEAD' keyword are\n"
+" valid range values.\n"
+"\n"
+" SOURCE and TARGET are the source and target branch URLs, respectively.\n"
+" (If a WC path is given, the corresponding base URL is used.) The default\n"
+" TARGET is the current working directory ('.'). REV specifies the revision\n"
+" to be considered the tip of the branch; the default for SOURCE is HEAD,\n"
+" and the default for TARGET is HEAD for a URL or BASE for a WC path.\n"
+"\n"
+" The depth can be 'empty' or 'infinity'; the default is 'empty'.\n"
+msgstr ""
+"Zeigt relevante Informationen zu Zusammenführungen an.\n"
+"Aufruf: 1. mergeinfo QUELLE[@REV] [ZIEL[@REV]]\n"
+" 2. mergeinfo --show-revs=WAS QUELLE[@REV] [ZIEL[@REV]]\n"
+"\n"
+" 1. Fasst die Geschichte der Zusammenführungen zwischen QUELLE\n"
+" und ZIEL zusammen. Die Grafik zeigt von links nach rechts:\n"
+" den jüngsten gemeinsamen Vorfahren der Zweige; die letzte vollständige Zusammenführung in eine der Richtungen, und\n"
+" damit die Basis der nächste vollständigen Zusammenführung;\n"
+" den Pfad im Projektarchiv und die Revisionsnummer der Spitzen\n"
+" jedes Zweigs.\n"
+"\n"
+" 2. Zeigt Revisionsnummern an, die von QUELLE, die nach ZIEL\n"
+" zusammengeführt wurden (mit »--show-revs=merged«), bzw.\n"
+" nicht zusammengeführt wurden (mit »--show-revs=eligible«).\n"
+" Gibt nur Revisionen aus, wenn QUELLE mindestens eine\n"
+" Änderung hat.\n"
+"\n"
+" Die Angabe von »--revision« (»-r«) schränkt die Anzeige auf diesen\n"
+" Revisionsbereich ein. Revisionsnummern, Datumsangaben und\n"
+" das Schlüsselwort »HEAD« sind gültige Angaben.\n"
+"\n"
+" QUELLE und ZIEL sind jeweils URLs der Quell- und Ziel-Zweige.\n"
+" (Wenn ein Arbeitskopiepfad angegeben ist, wird die entsprechende\n"
+" Basis-URL verwendet.) Die Vorgabe für ZIEL ist das aktuelle\n"
+" Verzeichnis (».«). REV gibt die Revision an, die als Spitze des Zweigs\n"
+" angenommen werden soll, die Vorgabe für QUELLE ist »HEAD«.\n"
+" Die Vorgabe für ZIEL ist »HEAD« bei URLs und »BASE« bei Pfaden\n"
+" in einer Arbeitskopie.\n"
+"\n"
+" Die Tiefe kann »empty« oder »infinity« sein, Vorgabe ist »empty«.\n"
+
+#: ../svn/svn.c:1125
msgid ""
"Create a new directory under version control.\n"
"usage: 1. mkdir PATH...\n"
@@ -8803,44 +12031,43 @@ msgstr ""
" In beiden Fällen müssen alle Zwischenverzeichnisse bereits existieren,\n"
" es sei denn, die Option --parents wurde angegeben.\n"
-#: ../svn/main.c:760
+#: ../svn/svn.c:1142
msgid ""
-"Move and/or rename something in working copy or repository.\n"
+"Move (rename) an item in a working copy or repository.\n"
"usage: move SRC... DST\n"
"\n"
-"When moving multiple sources, they will be added as children of DST,\n"
-"which must be a directory.\n"
-"\n"
-" Note: this subcommand is equivalent to a 'copy' and 'delete'.\n"
-" Note: the --revision option has no use and is deprecated.\n"
-"\n"
" SRC and DST can both be working copy (WC) paths or URLs:\n"
-" WC -> WC: move and schedule for addition (with history)\n"
-" URL -> URL: complete server-side rename.\n"
-" All the SRCs must be of the same type.\n"
-msgstr ""
-"Verschiebt oder benennt etwas in der Arbeitskopie oder\n"
-"im Projektarchiv um.\n"
+" WC -> WC: move an item in a working copy, as a local change to\n"
+" be committed later (with or without further changes)\n"
+" URL -> URL: move an item in the repository directly, immediately\n"
+" creating a new revision in the repository\n"
+" All the SRCs must be of the same type. When moving multiple sources,\n"
+" they will be added as children of DST, which must be a directory.\n"
+"\n"
+" SRC and DST of WC -> WC moves must be committed in the same revision.\n"
+" Furthermore, WC -> WC moves will refuse to move a mixed-revision subtree.\n"
+" To avoid unnecessary conflicts, it is recommended to run 'svn update'\n"
+" to update the subtree to a single revision before moving it.\n"
+" The --allow-mixed-revisions option is provided for backward compatibility.\n"
+"\n"
+" The --revision option has no use and is deprecated.\n"
+msgstr ""
+"Verschiebt oder benennt ein Objekt in der Arbeitskopie oder im Projektarchiv um.\n"
"Aufruf: move QUELLE... ZIEL\n"
"\n"
-"Beim Verschieben mehrerer Quellen, werden sie als Kinder von ZIEL\n"
-"hinzugefügt, was ein Verzeichnis sein muss.\n"
-"\n"
-" Hinweis: Dieser Unterbefehl entspricht der Folge »copy« und »delete«.\n"
-" Hinweis: Die Option --revision bewirkt nichts und wird missbilligt.\n"
-"\n"
" QUELLE und ZIEL können beides Arbeitskopiepfade (AK) oder URLs sein:\n"
-" AK -> AK: Verschieben und zum Hinzufügen (mit Historie) einplanen\n"
-" URL -> URL: Vollständig serverseitiges Verschieben.\n"
-" Alle QUELLEn müssen vom selben Typ sein.\n"
-
-#: ../svn/main.c:777
-msgid ""
-"Permanently delete a specific node-revision from the repository.\n"
-"usage: obliterate URL@REV\n"
-msgstr ""
+" AK -> AK : Verschiebt ein Objekt in der Arbeitskopie, als lokale\n"
+" Änderung für eine spätere Übertragung (mit oder ohne\n"
+" weitere Änderungen)\n"
+" URL -> URL: Verschiebt ein Objekt im Projektarchiv direkt, erzeugt\n"
+" sofort eine neue Revision im Projektarchiv\n"
+" Alle QUELLEn müssen vom selben Typ sein. Beim Verschieben mehrerer\n"
+" QUELLEn werden diese als Kinder von ZIEL hinzugefügt, welches dann\n"
+" ein Verzeichnis sein muss.\n"
+"\n"
+" Die Option »--revision« ist funktionslos und veraltet.\n"
-#: ../svn/main.c:783
+#: ../svn/svn.c:1164
msgid ""
"Apply a patch to a working copy.\n"
"usage: patch PATCHFILE [WCPATH]\n"
@@ -8850,7 +12077,8 @@ msgid ""
"\n"
" A unidiff patch suitable for application to a working copy can be\n"
" produced with the 'svn diff' command or third-party diffing tools.\n"
-" Any non-unidiff content of PATCHFILE is ignored.\n"
+" Any non-unidiff content of PATCHFILE is ignored, except for Subversion\n"
+" property diffs as produced by 'svn diff'.\n"
"\n"
" Changes listed in the patch will either be applied or rejected.\n"
" If a change does not match at its exact line offset, it may be applied\n"
@@ -8877,9 +12105,65 @@ msgid ""
" for deletion. If the patch creates a new file, that file is scheduled\n"
" for addition. Use 'svn revert' to undo deletions and additions you\n"
" do not agree with.\n"
-msgstr ""
+"\n"
+" Hint: If the patch file was created with Subversion, it will contain\n"
+" the number of a revision N the patch will cleanly apply to\n"
+" (look for lines like '--- foo/bar.txt (revision N)').\n"
+" To avoid rejects, first update to the revision N using\n"
+" 'svn update -r N', apply the patch, and then update back to the\n"
+" HEAD revision. This way, conflicts can be resolved interactively.\n"
+msgstr ""
+"Wendet einen Patch auf eine Arbeitskopie an.\n"
+"Aufruf: patch PATCHDATEI [AKPFAD]\n"
+"\n"
+" Wendet Unterschiede im Format Unified Diff aus PATCHDATEI\n"
+" auf eine Arbeitskopie AKPFAD an. Wird AKPFAD weggelassen\n"
+" wird ».« verwendet.\n"
+"\n"
+" Ein Patch im Unidiff-Format, der auf eine Arbeitskopie anwendbar ist,\n"
+" kann mit »svn diff« oder Drittprogrammen erzeugt werden. Inhalte von\n"
+" PATCHDATEI, die nicht dem Unidiff Format entsprechen, werden\n"
+" ignoriert, abgesehen von solchen, die Änderungen an Eigenschaften\n"
+" beschreiben und von »svn diff« erzeugt werden.\n"
+"\n"
+" Im Patch aufgelistete Änderungen werden entweder angewandt oder\n"
+" abgewiesen. Wenn eine Änderung nicht genau auf die angegebene\n"
+" Stelle passt, aber mit dem gegebenen Kontext weiter oben oder unten\n"
+" in der Datei, kann es dennoch angewandt werden.\n"
+" Eine Änderung kann auch mit Unschärfe angewandt werden. Dabei\n"
+" werden eine oder mehrere Zeilen des Kontextes bei der Suche nach\n"
+" der passenden Stelle für die Änderung ignoriert. Wenn keine solche\n"
+" gefunden wurde, steht die Änderung im Konflikt und wird in eine Datei\n"
+" für abgewiesene Änderungen mit der Erweiterung ».svnpatch.rej«\n"
+" geschrieben.\n"
+"\n"
+" Für jede so geänderte Datei wird eine Zeile mit Buchstaben ausgegeben,\n"
+" die die vorgenommene Änderung mit folgender Bedeutung beschreiben:\n"
+"\n"
+" A Added - Hinzugefügt\n"
+" D Deleted - Gelöscht\n"
+" U Updated - Aktualisiert\n"
+" C Conflict - Konflikt\n"
+" G Merged - Zusammengeführt\n"
+"\n"
+" Änderungen, die mit Versatz oder Unschärfe angewandt wurden, werden\n"
+" mit einem »>« am Zeilenanfang markiert und sollten sorgfältig geprüft werden.\n"
+"\n"
+" Wenn ein Patch den gesamten Inhalt einer Datei entfernt, wird diese zur\n"
+" Löschung eingeplant. Wenn ein Patch eine neue Datei erzeugt, wird diese\n"
+" zum Hinzufügen eingeplant. Verwenden Sie »svn revert« um Löschungen\n"
+" oder Hinzufügungen rückgängig zu machen, mit denen Sie nicht einverstanden\n"
+" sind.\n"
+"\n"
+" Hinweis: Wenn eine Patch-Datei mit Subversion erzeugt wurde, enthält sie\n"
+" die Revisionsnummer N, in der der Patch sauber anwendbar ist.\n"
+" (Siehe Zeilen mit »--- verzeichnis/datei.txt (revision N)«).\n"
+" Um abgewiesene Änderungen zu vermeiden, aktualisieren Sie zuerst\n"
+" auf Revision N mit »svn update -r N«, wenden Sie dann den Patch an\n"
+" und aktualisieren Sie dann auf HEAD. Auf diese Weise können\n"
+" Konflikte interaktiv aufgelöst werden.\n"
-#: ../svn/main.c:823
+#: ../svn/svn.c:1212
msgid ""
"Remove a property from files, dirs, or revisions.\n"
"usage: 1. propdel PROPNAME [PATH...]\n"
@@ -8897,9 +12181,7 @@ msgstr ""
" 1. Entfernt eine versionierte Eigenschaft aus der Arbeitskopie.\n"
" 2. Entfernt eine nicht versionierte Eigenschaft aus dem Projektarchiv.\n"
-# FIXME: s/prop/properties/
-# "on repos revision"?
-#: ../svn/main.c:833
+#: ../svn/svn.c:1222
msgid ""
"Edit a property with an external editor.\n"
"usage: 1. propedit PROPNAME TARGET...\n"
@@ -8909,7 +12191,7 @@ msgid ""
" 2. Edits unversioned remote prop on repos revision.\n"
" TARGET only determines which repository to access.\n"
"\n"
-"See 'svn help propset' for more on setting properties.\n"
+" See 'svn help propset' for more on setting properties.\n"
msgstr ""
"Ändert eine Eigenschaft mit einem externen Editor.\n"
"Aufruf: 1. propedit PROPNAME ZIEL...\n"
@@ -8917,12 +12199,12 @@ msgstr ""
"\n"
" 1. Bearbeitet versionierte Eigenschaften in der Arbeitskopie oder im\n"
" Projektarchiv.\n"
-" 2. Bearbeitet nicht versionierte entfernte Eigenschaften im Projektarchiv.\n"
+" 2. Bearbeitet nicht versionierte Revisionseigenschaften im Projektarchiv.\n"
" ZIEL legt nur das Projektarchiv fest, auf das zugegriffen wird.\n"
"\n"
"Siehe »svn help propset« für Weiteres zum Setzen von Eigenschaften.\n"
-#: ../svn/main.c:845
+#: ../svn/svn.c:1234
msgid ""
"Print the value of a property on files, dirs, or revisions.\n"
"usage: 1. propget PROPNAME [TARGET[@REV]...]\n"
@@ -8933,13 +12215,15 @@ msgid ""
" 2. Prints unversioned remote prop on repos revision.\n"
" TARGET only determines which repository to access.\n"
"\n"
-" By default, this subcommand will add an extra newline to the end\n"
-" of the property values so that the output looks pretty. Also,\n"
-" whenever there are multiple paths involved, each property value\n"
-" is prefixed with the path with which it is associated. Use the\n"
-" --strict option to disable these beautifications (useful when\n"
-" redirecting a binary property value to a file, but available only\n"
-" if you supply a single TARGET to a non-recursive propget operation).\n"
+" With --verbose, the target path and the property name are printed on\n"
+" separate lines before each value, like 'svn proplist --verbose'.\n"
+" Otherwise, if there is more than one TARGET or a depth other than\n"
+" 'empty', the target path is printed on the same line before each value.\n"
+"\n"
+" By default, an extra newline is printed after the property value so that\n"
+" the output looks pretty. With a single TARGET and depth 'empty', you can\n"
+" use the --strict option to disable this (useful when redirecting a binary\n"
+" property value to a file, for example).\n"
msgstr ""
"Gibt den Eigenschaftswert von Dateien, Verzeichnissen oder Revisionen aus.\n"
"Aufruf: 1. propget PROPNAME [ZIEL[@REV]...]\n"
@@ -8947,19 +12231,29 @@ msgstr ""
"\n"
" 1. Gibt versionierte Eigenschaften in der Arbeitskopie aus.\n"
" REV bestimmt, in welcher Revision zuerst nachgeschaut wird.\n"
-" 2. Gibt eine nicht versionierte Eigenschaft im Projektarchiv aus.\n"
+" 2. Gibt nicht versionierte Revisionseigenschaft im Projektarchiv aus.\n"
" ZIEL legt nur das Projektarchiv fest, auf das zugegriffen wird.\n"
"\n"
+" Mit »--verbose« wird der Zielpfad und der Name der Eigenschaft auf\n"
+" separaten Zeilen vor jedem Wert ausgegeben, wie »svn proplist --verbose«\n"
+" Andernfalls wird bei mahr als einem ZIEL oder einer von »empty«\n"
+" verschiedenen Tiefe die Pfade auf der selben Zeile ausgegeben.\n"
+"\n"
" Standardmäßig hängt dieser Unterbefehl eine Leerzeile an das Ende der\n"
-" Eigenschaftswerte an, so dass die Ausgabe hübsch aussieht. Obendrein werden,\n"
-" wenn mehrere Pfade involviert sind, die Pfade den Eigenschaftswerten\n"
-" vorangestellt. Verwenden Sie die Option »--strict«, um diese Formatierungen\n"
-" abzuschalten (dies ist nützlich, um einen binären Eigenschaftswert in\n"
-" eine Datei umzuleiten, steht aber nur zur Verfügung, falls ein\n"
-" einzelnes ZIEL für eine nicht-rekursive propget-Operation angegeben\n"
-" wurde).\n"
+" Eigenschaftswerte an, so dass die Ausgabe hübsch aussieht. Verwenden\n"
+" Sie bei einem einzigen ZIEL und der Tiefe »empty« die Option »--strict«,\n"
+" um diese Formatierungen abzuschalten. (dies ist nützlich, um einen binären\n"
+" Eigenschaftswert in eine Datei umzuleiten)\n"
-#: ../svn/main.c:865
+#: ../svn/svn.c:1254 ../svn/svn.c:1271
+msgid "print path, name and value on separate lines"
+msgstr "Pfad, Name und Wert in getrennten Zeilen ausgeben"
+
+#: ../svn/svn.c:1255
+msgid "don't print an extra newline"
+msgstr "Keinen zusätzlichen Zeilenumbruch ausgeben"
+
+#: ../svn/svn.c:1258
msgid ""
"List all properties on files, dirs, or revisions.\n"
"usage: 1. proplist [TARGET[@REV]...]\n"
@@ -8969,6 +12263,9 @@ msgid ""
" revision the target is first looked up.\n"
" 2. Lists unversioned remote props on repos revision.\n"
" TARGET only determines which repository to access.\n"
+"\n"
+" With --verbose, the property values are printed as well, like 'svn propget\n"
+" --verbose'. With --quiet, the paths are not printed.\n"
msgstr ""
"Listet alle Eigenschaften von Dateien, Verzeichnissen oder\n"
"Revisionen auf.\n"
@@ -8977,12 +12274,18 @@ msgstr ""
"\n"
" 1. Listet versionierte Eigenschaften in der Arbeitskopie auf.\n"
" REV bestimmt, in welcher Revision zuerst nachgeschaut wird.\n"
-" 2. Listet nicht versionierte Eigenschaften im Projektarchiv auf.\n"
+" 2. Listet nicht versionierte Revisionseigenschaften im Projektarchiv auf.\n"
" ZIEL legt nur das Projektarchiv fest, auf das zugegriffen wird.\n"
+"\n"
+" Mit »--verbose« werden auch die Eigenschaftwerte ausgegeben,wie mit \n"
+" »svn propget --verbose«. Mit »--quiet« werden Pfade nicht ausgegeben.\n"
+
+#: ../svn/svn.c:1272
+msgid "don't print the path"
+msgstr "Pfad nicht ausgeben"
# FIXME: propchange?
-#: ../svn/main.c:876
-#, fuzzy
+#: ../svn/svn.c:1275
msgid ""
"Set the value of a property on files, dirs, or revisions.\n"
"usage: 1. propset PROPNAME PROPVAL PATH...\n"
@@ -8994,18 +12297,35 @@ msgid ""
"\n"
" The value may be provided with the --file option instead of PROPVAL.\n"
"\n"
-" Note: svn recognizes the following special versioned properties\n"
-" but will store any arbitrary properties set:\n"
-" svn:ignore - A newline separated list of file glob patterns to ignore.\n"
+" Property names starting with 'svn:' are reserved. Subversion recognizes\n"
+" the following special versioned properties on a file:\n"
" svn:keywords - Keywords to be expanded. Valid keywords are:\n"
-" URL, HeadURL - The URL for the head version of the object.\n"
+" URL, HeadURL - The URL for the head version of the file.\n"
" Author, LastChangedBy - The last person to modify the file.\n"
-" Date, LastChangedDate - The date/time the object was last modified.\n"
-" Rev, Revision, - The last revision the object changed.\n"
-" LastChangedRevision\n"
-" Id - A compressed summary of the previous\n"
-" 4 keywords.\n"
+" Date, LastChangedDate - The date/time the file was last modified.\n"
+" Rev, Revision, - The last revision the file changed.\n"
+" LastChangedRevision\n"
+" Id - A compressed summary of the previous four.\n"
" Header - Similar to Id but includes the full URL.\n"
+"\n"
+" Custom keywords can be defined with a format string separated from\n"
+" the keyword name with '='. Valid format substitutions are:\n"
+" %a - The author of the revision given by %r.\n"
+" %b - The basename of the URL of the file.\n"
+" %d - Short format of the date of the revision given by %r.\n"
+" %D - Long format of the date of the revision given by %r.\n"
+" %P - The file's path, relative to the repository root.\n"
+" %r - The number of the revision which last changed the file.\n"
+" %R - The URL to the root of the repository.\n"
+" %u - The URL of the file.\n"
+" %_ - A space (keyword definitions cannot contain a literal space).\n"
+" %% - A literal '%'.\n"
+" %H - Equivalent to %P%_%r%_%d%_%a.\n"
+" %I - Equivalent to %b%_%r%_%d%_%a.\n"
+" Example custom keyword definition: MyKeyword=%r%_%a%_%P\n"
+" Once a custom keyword has been defined for a file, it can be used\n"
+" within the file like any other keyword: $MyKeyword$\n"
+"\n"
" svn:executable - If present, make the file executable. Use\n"
" 'svn propdel svn:executable PATH...' to clear.\n"
" svn:eol-style - One of 'native', 'LF', 'CR', 'CRLF'.\n"
@@ -9013,67 +12333,86 @@ msgid ""
" whether to merge the file, and how to serve it from Apache.\n"
" A mimetype beginning with 'text/' (or an absent mimetype) is\n"
" treated as text. Anything else is treated as binary.\n"
-" svn:externals - A newline separated list of module specifiers,\n"
-" each of which consists of a URL and a relative directory path,\n"
-" similar to the syntax of the 'svn checkout' command:\n"
-" http://example.com/repos/zag foo/bar\n"
-" An optional peg revision may be appended to the URL to pin the\n"
-" external to a known revision:\n"
-" http://example.com/repos/zig@42 foo\n"
-" Relative URLs are indicated by starting the URL with one\n"
-" of the following strings:\n"
-" ../ to the parent directory of the extracted external\n"
-" ^/ to the repository root\n"
-" // to the scheme\n"
-" / to the server root\n"
-" The ambiguous format 'relative_path relative_path' is taken as\n"
-" 'relative_url relative_path' with peg revision support.\n"
-" Lines in externals definitions starting with the '#' character\n"
-" are considered comments and are ignored.\n"
-" Subversion 1.4 and earlier only support the following formats\n"
-" where peg revisions can only be specified using a -r modifier\n"
-" and where URLs cannot be relative:\n"
-" foo http://example.com/repos/zig\n"
-" foo/bar -r 1234 http://example.com/repos/zag\n"
-" Use of these formats is discouraged. They should only be used if\n"
-" interoperability with 1.4 clients is desired.\n"
" svn:needs-lock - If present, indicates that the file should be locked\n"
" before it is modified. Makes the working copy file read-only\n"
" when it is not locked. Use 'svn propdel svn:needs-lock PATH...'\n"
" to clear.\n"
"\n"
-" The svn:keywords, svn:executable, svn:eol-style, svn:mime-type and\n"
-" svn:needs-lock properties cannot be set on a directory. A non-recursive\n"
-" attempt will fail, and a recursive attempt will set the property\n"
-" only on the file children of the directory.\n"
+" Subversion recognizes the following special versioned properties on a\n"
+" directory:\n"
+" svn:ignore - A list of file glob patterns to ignore, one per line.\n"
+" svn:global-ignores - Like svn:ignore, but inheritable.\n"
+" svn:externals - A list of module specifiers, one per line, in the\n"
+" following format similar to the syntax of 'svn checkout':\n"
+" [-r REV] URL[@PEG] LOCALPATH\n"
+" Example:\n"
+" http://example.com/repos/zig foo/bar\n"
+" The LOCALPATH is relative to the directory having this property.\n"
+" To pin the external to a known revision, specify the optional REV:\n"
+" -r25 http://example.com/repos/zig foo/bar\n"
+" To unambiguously identify an element at a path which may have been\n"
+" subsequently deleted or renamed, specify the optional PEG revision:\n"
+" -r25 http://example.com/repos/zig@42 foo/bar\n"
+" The URL may be a full URL or a relative URL starting with one of:\n"
+" ../ to the parent directory of the extracted external\n"
+" ^/ to the repository root\n"
+" / to the server root\n"
+" // to the URL scheme\n"
+" Use of the following format is discouraged but is supported for\n"
+" interoperability with Subversion 1.4 and earlier clients:\n"
+" LOCALPATH [-r PEG] URL\n"
+" The ambiguous format 'relative_path relative_path' is taken as\n"
+" 'relative_url relative_path' with peg revision support.\n"
+" Lines starting with a '#' character are ignored.\n"
msgstr ""
"Setzt den Wert einer Eigenschaft von Dateien, Verzeichnissen\n"
"oder Revisionen\n"
-"Aufruf: 1. propset PROPNAME PROPWERT PFAD...\n"
-" 2. propset PROPNAME --revprop -r REV PROPWERT [ZIEL]\n"
+"Aufruf: 1. propset NAME WERT PFAD...\n"
+" 2. propset NAME --revprop -r REV WERT [ZIEL]\n"
"\n"
" 1. Ändert eine versionierte Datei- oder Verzeichniseigenschaft in der\n"
" Arbeitskopie.\n"
-" 2. Ändert eine nicht versionierte Eigenschaft in einer Revision des\n"
-" Projektarchivs. (ZIEL legt nur das Projektarchiv fest, auf das\n"
-" zugegriffen wird.)\n"
+" 2. Ändert eine nicht versionierte Revisionseigenschaft einer Revision\n"
+" im Projektarchiv.\n"
+" (ZIEL legt nur das Projektarchiv fest, auf das zugegriffen wird.)\n"
"\n"
-" Der Wert kann mit der Option --file statt PROPWERT angegeben werden.\n"
+" Der Wert kann mit der Option »--file« statt WERT angegeben werden.\n"
"\n"
-" Hinweis: svn erkennt die folgenden speziellen, versionierten Eigenschaften,\n"
-" wird aber jede gesetzte Eigenschaft speichern:\n"
-" svn:ignore - Eine durch Zeilenumbruch getrennte Liste von zu\n"
-" ignorierenden »glob«-Dateimustern.\n"
+" Namen von Eigenschaften, die mit »svn:« beginnen, sind reserviert.\n"
+" Subversion kennt die folgenden speziellen versionieren\n"
+" Eigenschaften von Dateien:\n"
" svn:keywords - Schlüsselworte, die expandiert werden sollen.\n"
" Gültige Schlüsselworte sind:\n"
-" URL, HeadURL - Die URL für die Head-Version des Objektes.\n"
+" URL, HeadURL - Die URL für die Head-Version der Datei.\n"
" Author, LastChangedBy - Die letzte Person, die die Datei geändert hat.\n"
" Date, LastChangedDate - Datum/Zeit der letzten Änderung.\n"
-" Rev, Revision, - Die letzte Revision, in der das Objekt\n"
+" Rev, Revision, - Die letzte Revision, in der die Datei\n"
" LastChangedRevision geändert wurde.\n"
" Id - Eine komprimierte Zusammenfassung der vier\n"
" genannten Schlüsselworte.\n"
" Header - Ähnlich zu Id, enthält aber die volle URL.\n"
+"\n"
+" Benutzerdefinierte Schlüsselworte können mit ihrem Namen und einer\n"
+" Formatangabe, getrennt durch ein »=« definiert werden. Gültige\n"
+" Platzhalter sind:\n"
+" %a - Der Autor der Revision %r.\n"
+" %b - Der Basisname der URL der Datei.\n"
+" %d - Das Datum der Revision %r im Kurzformat.\n"
+" %D - Das Datum der Revision %r im Langformat.\n"
+" %P - Der Pfad der Datei, relativ zur Wurzel des Projektarchivs.\n"
+" %r - Die letzte Revision, in der die Datei geändert wurde.\n"
+" %R - Die URL der Wurzel des Projektarchivs.\n"
+" %u - Die URL der Datei.\n"
+" %_ - Ein Leerzeichen (Definitionen von Schlüsselwörtern dürfen\n"
+" selbst keine Leerzeichen enthalten).\n"
+" %% - Erzeugt ein '%' in der Ausgabe.\n"
+" %H - Entspricht %P%_%r%_%d%_%a.\n"
+" %I - Entspricht %b%_%r%_%d%_%a.\n"
+" Beispiel für ein benutzerdefiniertes Schlüsselwort: MeinSW=%r%_%a%_%P\n"
+" Sobald ein benutzerdefiniertes Schlüsselwort für eine Datei gesetzt ist,\n"
+" kann es in der Datei wie jedes andere Schlüsselwort verwendet werden:\n"
+" $MeinSW$\n"
+"\n"
" svn:executable - Falls vorhanden, wird die Datei ausführbar gemacht.\n"
" Verwenden Sie »svn propdel svn:executable PFAD...« zum Entfernen.\n"
" svn:eol-style - Eins aus »native«, »LF«, »CR«, »CRLF«.\n"
@@ -9081,50 +12420,54 @@ msgstr ""
" die Datei zusammengeführt werden kann und wie sie von Apache übertragen\n"
" werden soll. Dateien ohne MIME-Typ oder deren MIME-Typ mit »text/«\n"
" beginnt, werden als Text behandelt. Alles andere wird als binär angesehen.\n"
+" svn:needs-lock - Wenn vorhanden, soll die Datei gesperrt werden, bevor sie\n"
+" verändert wird. Setzt den Schreibschutz der Arbeitsdatei, wenn sie nicht\n"
+" gesperrt ist. Verwenden Sie »svn propdel svn:needs-lock PFAD...« zum\n"
+" Entfernen.\n"
+"\n"
+" Subversion kennt die folgenden speziellen versionieren\n"
+" Eigenschaften von Verzeichnissen:\n"
+" svn:ignore - Eine durch Zeilenumbruch getrennte Liste von zu\n"
+" ignorierenden »glob«-Dateimustern.\n"
+" svn:global-ignores - Wie svn:ignore, aber vererbbar.\n"
" svn:externals - Eine durch Zeilenumbruch getrennte Liste von\n"
-" Modulnamen, die jeder aus einem relativen Verzeichnispfad, optionalen\n"
-" Revisionsmarkern und einer URL bestehen. Die Reihenfolge der drei\n"
-" Elemente führt zu verschiedenem Verhalten. Subversion 1.4 und älter\n"
-" unterstützt nur die folgenden Formate und die URLs können keine\n"
-" Peg-Revisionen haben:\n"
-" foo http://example.org/repos/zig\n"
-" foo/bar -r 1234 http://example.org/repos/zag\n"
-" Subversion 1.5 und neuer unterstützt die obigen Formate und die\n"
-" folgenden, wobei die URLs Peg-Revisionen enthalten dürfen:\n"
-" http://example.com/repos/zig foo\n"
-" -r 1234 http://example.com/repos/zig foo/bar\n"
-" Relative URLs werden in Subversion 1.5 und neuer für alle obigen\n"
-" Formate unterstützt und werden durch eine URL gekennzeichnet, die\n"
-" mit einem der folgenden Zeichenketten startet und\n"
+" Modulnamen im folgenden Syntax von »svn checkout«:\n"
+" [-r REV] URL[@PEGREV] LOKALER_PFAD\n"
+" Beispiel:\n"
+" http://example.com/repos/Projekt/modul\n"
+" LOKALER_PFAD ist dabei relativ zum Verzeichnis mit dieser Eigenschaft.\n"
+" Um den externen Verweis auf eine bekannte Revision festzulegen, geben\n"
+" Sie optional REV an:\n"
+" -r25 http://example.com/repos/Projekt/modul\n"
+" Um ein Element in einem ggf. später gelöschten oder umbenannten Pfad\n"
+" eindeutig zu identifizieren, verwenden Sie optional PEGREV:\n"
+" -r25 http://example.com/repos/Pfad@42 projekt/modul\n"
+" Die URL kann eine vollständige oder relative URL sein, die mit einen der\n"
+" folgenden Zeichenketten startet und...\n"
" ../ auf das übergeordnete Verzeichnis des extrahierten Externals\n"
" ^/ auf die Wurzel des Projektarchivs\n"
" // auf das Schema\n"
" / auf die Wurzel des Servers\n"
" verweist.\n"
+" Die Verwendung des folgenden Formats ist veraltet aber für die Kompatibilität\n"
+" mit Subversion 1.4 und älter weiter unterstützt:\n"
+" LOKALER_PFAD [-r PEGREV] URL\n"
" Das mehrdeutige Format »relativer_Pfad relativer_Pfad« wird als\n"
" »relative_URL relativer_Pfad« mit Peg-Revisionsunterstützung gedeutet.\n"
-" svn:needs-lock - Wenn vorhanden, soll die Datei gesperrt werden, bevor sie\n"
-" verändert wird. Setzt den Schreibschutz der Arbeitsdatei, wenn sie nicht\n"
-" gesperrt ist. Verwenden Sie »svn propdel svn:needs-lock PFAD...« zum\n"
-" Entfernen.\n"
-"\n"
-" Die Eigenschaften svn:keywords, svn:executable, svn:eol-style, svn:mime-type\n"
-" und svn:needs-lock können nicht für Verzeichnisse gesetzt werden.\n"
-" Ein nicht-rekursiver Versuch wird scheitern und ein rekursiver Versuch wird\n"
-" die Eigenschaft nur für die Dateien in dem Verzeichnis setzen.\n"
+" Zeilen, die mit »#« beginnen, werden ignoriert.\n"
-#: ../svn/main.c:940
+#: ../svn/svn.c:1354
msgid "read property value from file ARG"
-msgstr "Lies Eigenschaftswert aus Datei PAR"
+msgstr "Eigenschaftswert aus Datei PAR lesen"
-#: ../svn/main.c:943
+#: ../svn/svn.c:1357
msgid ""
"Relocate the working copy to point to a different repository root URL.\n"
"usage: 1. relocate FROM-PREFIX TO-PREFIX [PATH...]\n"
" 2. relocate TO-URL [PATH]\n"
"\n"
" Rewrite working copy URL metadata to reflect a syntactic change only.\n"
-" This is used when repository's root URL changes (such as a scheme\n"
+" This is used when a repository's root URL changes (such as a scheme\n"
" or hostname change) but your working copy still reflects the same\n"
" directory within the same repository.\n"
"\n"
@@ -9133,31 +12476,67 @@ msgid ""
" complete old and new URLs if you wish.) Use 'svn info' to determine\n"
" the current working copy URL.\n"
"\n"
-" 2. TO-URL is the (complete) new repository URL to use for for PATH.\n"
+" 2. TO-URL is the (complete) new repository URL to use for PATH.\n"
"\n"
" Examples:\n"
" svn relocate http:// svn:// project1 project2\n"
" svn relocate http://www.example.com/repo/project \\\n"
" svn://svn.example.com/repo/project\n"
msgstr ""
+"Umplatzierung der Arbeitskopie auf eine andere Wurzel-URL des Projektarchivs\n"
+"Aufruf: 1. relocate VON NACH [PFAD...]\n"
+" 2. relocate NACH [PFAD]\n"
+"\n"
+" Schreibt die Metadaten der Arbeitskopie so um, dass sie einer Änderung\n"
+" der URL folgen. Dies wird verwendet, wenn sich die Basis-URL eines\n"
+" Projektarchivs ändert (z.B. durch eine Schema- oder Hostnamenänderung),\n"
+" während Ihre Arbeitskopie immer noch das selbe Verzeichnis im selben\n"
+" Projektarchiv widerspiegelt.\n"
+"\n"
+" 1. VON und NACH sind einleitende Teile der momentanen bzw. neuen URL\n"
+" der Arbeitskopie. (Die Angabe der kompletten neuen und alten URLs ist\n"
+" erlaubt.) Verwenden Sie »svn info« zur Anzeige der momentanen URL.\n"
+"\n"
+" 2. NACH ist die vollständige neue URL im Projektarchiv für PFAD.\n"
+"\n"
+" Beispiele:\n"
+" svn relocate http:// svn:// Projekt1 Projekt2\n"
+" svn relocate http://www.example.com/repo/Projekt \\\n"
+" svn://svn.example.com/repo/Projekt\n"
-#: ../svn/main.c:966
+#: ../svn/svn.c:1380
msgid ""
"Resolve conflicts on working copy files or directories.\n"
-"usage: resolve --accept=ARG [PATH...]\n"
+"usage: resolve [PATH...]\n"
+"\n"
+" By default, perform interactive conflict resolution on PATH.\n"
+" In this mode, the command is recursive by default (depth 'infinity').\n"
"\n"
-" Note: the --accept option is currently required.\n"
+" The --accept=ARG option prevents interactive prompting and forces\n"
+" conflicts on PATH to be resolved in the manner specified by ARG.\n"
+" In this mode, the command is not recursive by default (depth 'empty').\n"
msgstr ""
-"Auflösen von Konflikten in Arbeitskopiedateien oder -verzeichnissen.\n"
-"Aufruf: resolve --accept=PAR [PFAD...]\n"
+"Löst Konflikte von Dateien oder Verzeichnissen in der Arbeitskopie auf.\n"
+"Aufruf: resolve [PFAD...]\n"
+"\n"
+" Ohne weitere Angabe wird die interaktive Konfliktlösung ausgeführt. In\n"
+" diesem Fall arbeitet das Programm als Vorgabe rekursiv. (Tiefe »infinity«)\n"
"\n"
-" Bemerkung: Die Option --accept wird zurzeit benötigt.\n"
+" Die Option »--accept=PAR« verhindert interaktive Nachfragen und erzwingt\n"
+" die Konfliktlösung von PFAD in der durch PAR angegebenen Weise. Damit\n"
+" arbeitet das Programm als Vorgabe nicht rekursiv. (Tiefe »empty«)\n"
-#: ../svn/main.c:971
-msgid "specify automatic conflict resolution source\n"
+#: ../svn/svn.c:1390
+msgid ""
+"specify automatic conflict resolution source\n"
+" ('base', 'working', 'mine-conflict',\n"
+" 'theirs-conflict', 'mine-full', 'theirs-full')"
msgstr ""
+"Gibt Quelle für automatische Konfliktauflösungsaktion an\n"
+" (»base«, »working«, »mine-conflict«,\n"
+" »theirs-conflict«, »mine-full«, »theirs-full«)"
-#: ../svn/main.c:978
+#: ../svn/svn.c:1397
msgid ""
"Remove 'conflicted' state on working copy files or directories.\n"
"usage: resolved PATH...\n"
@@ -9177,24 +12556,31 @@ msgstr ""
" übertragen werden kann. Dies wird zugunsten von »svn resolve --accept\n"
" working« missbilligt.\n"
-#: ../svn/main.c:988
+#: ../svn/svn.c:1407
msgid ""
-"Restore pristine working copy file (undo most local edits).\n"
+"Restore pristine working copy state (undo local changes).\n"
"usage: revert PATH...\n"
"\n"
-" Note: this subcommand does not require network access, and resolves\n"
-" any conflicted states. However, it does not restore removed directories.\n"
+" Revert changes in the working copy at or within PATH, and remove\n"
+" conflict markers as well, if any.\n"
+"\n"
+" This subcommand does not revert already committed changes.\n"
+" For information about undoing already committed changes, search\n"
+" the output of 'svn help merge' for 'undo'.\n"
msgstr ""
-"Stellt eine Datei in der Arbeitskopie wieder her (macht die meisten\n"
-"lokalen Änderungen rückgängig).\n"
+"Stellt den ursprünglichen Zustand der Arbeitskopie wieder her\n"
+"(macht lokalen Änderungen rückgängig).\n"
"Aufruf: revert PFAD...\n"
"\n"
-" Hinweis: Dieser Unterbefehl erfordert keinen Netzwerkzugriff und löst\n"
-" Konfliktzustände auf. Er kann jedoch keine gelöschten Verzeichnisse wieder\n"
-" herstellen.\n"
+" Macht Änderungen an einer Arbeitskopie in PFAD rückgängig\n"
+" und entfernt Konfliktmarkierungen wenn es sie gibt.\n"
+"\n"
+" Dieser Unterbefehl macht keine schon übertragenen Änderungen\n"
+" rückgängig. Für Informationen über das Rückgängigmachen von\n"
+" schon übertragenen Änderungen, siehe in »svn help merge« den\n"
+" Abschnitt »undo«.\n"
-#: ../svn/main.c:996
-#, fuzzy
+#: ../svn/svn.c:1419
msgid ""
"Print the status of working copy files and directories.\n"
"usage: status [PATH...]\n"
@@ -9221,9 +12607,10 @@ msgid ""
" ' ' no modifications\n"
" 'C' Conflicted\n"
" 'M' Modified\n"
-" Third column: Whether the working copy directory is locked\n"
-" ' ' not locked\n"
-" 'L' locked\n"
+" Third column: Whether the working copy is locked for writing by\n"
+" another Subversion client modifying the working copy\n"
+" ' ' not locked for writing\n"
+" 'L' locked for writing\n"
" Fourth column: Scheduled commit will contain addition-with-history\n"
" ' ' no history scheduled with commit\n"
" '+' history scheduled with commit\n"
@@ -9231,16 +12618,16 @@ msgid ""
" ' ' normal\n"
" 'S' the item has a Switched URL relative to the parent\n"
" 'X' a versioned file created by an eXternals definition\n"
-" Sixth column: Repository lock token\n"
+" Sixth column: Whether the item is locked in repository for exclusive commit\n"
" (without -u)\n"
-" ' ' no lock token\n"
-" 'K' lock token present\n"
+" ' ' not locked by this working copy\n"
+" 'K' locked by this working copy, but lock might be stolen or broken\n"
" (with -u)\n"
-" ' ' not locked in repository, no lock token\n"
-" 'K' locked in repository, lock toKen present\n"
-" 'O' locked in repository, lock token in some Other working copy\n"
-" 'T' locked in repository, lock token present but sTolen\n"
-" 'B' not locked in repository, lock token present but Broken\n"
+" ' ' not locked in repository, not locked by this working copy\n"
+" 'K' locked in repository, lock owned by this working copy\n"
+" 'O' locked in repository, lock owned by another working copy\n"
+" 'T' locked in repository, lock owned by this working copy was stolen\n"
+" 'B' not locked in repository, lock owned by this working copy is broken\n"
" Seventh column: Whether the item is the victim of a tree conflict\n"
" ' ' normal\n"
" 'C' tree-Conflicted\n"
@@ -9265,20 +12652,20 @@ msgid ""
"\n"
" Example output:\n"
" svn status wc\n"
-" M wc/bar.c\n"
-" A + wc/qax.c\n"
+" M wc/bar.c\n"
+" A + wc/qax.c\n"
"\n"
" svn status -u wc\n"
-" M 965 wc/bar.c\n"
-" * 965 wc/foo.c\n"
-" A + - wc/qax.c\n"
+" M 965 wc/bar.c\n"
+" * 965 wc/foo.c\n"
+" A + - wc/qax.c\n"
" Status against revision: 981\n"
"\n"
" svn status --show-updates --verbose wc\n"
-" M 965 938 kfogel wc/bar.c\n"
-" * 965 922 sussman wc/foo.c\n"
-" A + - 687 joe wc/qax.c\n"
-" 965 687 joe wc/zig.c\n"
+" M 965 938 kfogel wc/bar.c\n"
+" * 965 922 sussman wc/foo.c\n"
+" A + - 687 joe wc/qax.c\n"
+" 965 687 joe wc/zig.c\n"
" Status against revision: 981\n"
"\n"
" svn status\n"
@@ -9287,12 +12674,10 @@ msgid ""
" > local missing, incoming edit upon update\n"
" D wc/qax.c\n"
msgstr ""
-"Gibt den Status der Dateien und Verzeichnisse der\n"
-"Arbeitskopie aus.\n"
+"Gibt den Status von Dateien und Verzeichnissen in der Arbeitskopie aus.\n"
"Aufruf: status [PFAD...]\n"
"\n"
-" Listet ohne weitere Optionen nur lokal geänderte Objekte (kein Netzzugriff)\n"
-" auf.\n"
+" Listet ohne weitere Optionen nur lokale Änderungen auf (kein Netzwerkzugriff)\n"
" »-q« gibt nur Zusammenfassungen über lokal modifizierte Objekte aus.\n"
" »-u« fügt Arbeitsrevision und »veraltet«-Informationen des Servers hinzu.\n"
" »-v« gibt vollständige Revisionsinformationen jedes Objektes aus.\n"
@@ -9315,27 +12700,27 @@ msgstr ""
" » « keine Änderungen\n"
" »C« Conflicted - konfliktbehaftet\n"
" »M« Modified - verändert\n"
-" Dritte Spalte: Arbeitsverzeichnis gesperrt - ja/nein\n"
-" » « nicht gesperrt\n"
-" »L« Locked - gesperrt\n"
+" Dritte Spalte: Gibt an, ob die Arbeitskopie durch einen anderen Subversion-Client\n"
+" zum Schreiben gesperrt wurde » « keine Schreibsperre\n"
+" »L« Locked - Schreibsperre\n"
" Vierte Spalte: Geplante Übertragung wird »Hinzufügen mit Historie«\n"
" enthalten\n"
" » « Übertragung wird keine Historie enthalten\n"
" »+« Übertragung wird Historie enthalten\n"
" Fünfte Spalte: Wurde Objekt umgestellt oder ist ein externer Dateiverweis?\n"
" » « normal\n"
-" »S« das Objekt hat eine umgeStellte URL relativ zu seinem Elternteil\n"
-" »X« eine von einem eXternen Verweis erzeugte versionierte Datei\n"
-" Sechste Spalte: Sperre im Projektarchiv\n"
-" (ohne -u)\n"
-" » « keine Sperre\n"
-" »K« Sperre vorhanden\n"
+" »S« das Objekt hat eine umgestellte URL relativ zu seinem Elternteil\n"
+" »X« eine von einem externen Verweis erzeugte versionierte Datei\n"
+" Sechste Spalte: Gibt an, ob das Objekt im Projektarchiv zur alleinigen\n"
+" gesperrt wurde (ohne -u)\n"
+" » « nicht von dieser Arbeitskopie gesperrt\n"
+" »K« von dieser Arbeitskopie gesperrt, Sperre ggf. aufgebrochen oder gestohlen\n"
" (mit -u)\n"
-" » « nicht gesperrt, keine Sperre vorhanden\n"
-" »K« gesperrt, Sperre vorhanden\n"
-" »O« gesperrt, Sperre in anderer Arbeitskopie\n"
-" »T« gesperrt, Sperre vorhanden, aber gestohlen\n"
-" »B« nicht gesperrt, Sperre vorhanden aber beschädigt\n"
+" » « nicht im Projektarchiv gesperrt, nicht von dieser Arbeitskopie gesperrt\n"
+" »K« im Projektarchiv gesperrt, Sperre gehört dieser Arbeitskopie\n"
+" »O« im Projektarchiv gesperrt, Sperre gehört einer anderen Arbeitskopie\n"
+" »T« im Projektarchiv gesperrt, Sperre gehört dieser Arbeitskopie, wurde aber gestohlen\n"
+" »B« nicht im Projektarchiv gesperrt, Sperre in dieser Arbeitskopie wurde aufgebrochen\n"
" Siebte Spalte: Ist das Objekt Opfer eines Baumkonflikts?\n"
" » « normal\n"
" »C« Baumkonflikt\n"
@@ -9351,25 +12736,31 @@ msgstr ""
" Leerzeichen getrennt:\n"
" die Arbeitsrevision (mit »-u« oder »-v«)\n"
" die letzte übertragene Revision und der letzte übertragene Autor (mit »-v«)\n"
-" Das Arbeitsverzeichnis ist immer das letzte Feld, daher kann es Leerzeichen\n"
+" Der Arbeitskopiepfad ist immer das letzte Feld, daher kann es Leerzeichen\n"
" enthalten.\n"
"\n"
+" Ein Fragezeichen (»?«) an den Stellen, an denen eine Arbeitsrevision, letzte\n"
+" übertragene Revision oder letzter übertragene Autor erwartet wird, zeigt an,\n"
+" dass die Information unbekannt oder irrelevant für den Zustand des Objektes\n"
+" ist. (z.B. wenn es das Ergebnis eines Kopiervorgangs ist). Das Fragezeichen\n"
+" dient als visueller Platzhalter und erleichtert die Verarbeitung der Ausgabe.\n"
+"\n"
" Beispielausgabe:\n"
" svn status wc\n"
-" M wc/bar.c\n"
-" A + wc/qax.c\n"
+" M wc/bar.c\n"
+" A + wc/qax.c\n"
"\n"
" svn status -u wc\n"
-" M 965 wc/bar.c\n"
-" * 965 wc/foo.c\n"
-" A + 965 wc/qax.c\n"
+" M 965 wc/bar.c\n"
+" * 965 wc/foo.c\n"
+" A + - wc/qax.c\n"
" Status gegenüber Revision: 981\n"
"\n"
" svn status --show-updates --verbose wc\n"
-" M 965 938 kfogel wc/bar.c\n"
-" * 965 922 sussman wc/foo.c\n"
-" A + 965 687 joe wc/qax.c\n"
-" 965 687 joe wc/zig.c\n"
+" M 965 938 kfogel wc/bar.c\n"
+" * 965 922 sussman wc/foo.c\n"
+" A + - 687 joe wc/qax.c\n"
+" 965 687 joe wc/zig.c\n"
" Status gegenüber Revision: 981\n"
"\n"
" svn status\n"
@@ -9378,8 +12769,11 @@ msgstr ""
" > lokal fehlend, eingehend editiert bei Aktualisierung\n"
" D wc/qax.c\n"
-#: ../svn/main.c:1090
-#, fuzzy
+#: ../svn/svn.c:1512
+msgid "don't print unversioned items"
+msgstr "Gibt nicht versioniertes Objekte nicht aus"
+
+#: ../svn/svn.c:1515
msgid ""
"Update the working copy to a different URL within the same repository.\n"
"usage: 1. switch URL[@PEGREV] [PATH]\n"
@@ -9405,6 +12799,10 @@ msgid ""
" Use the --set-depth option to set a new working copy depth on the\n"
" targets of this operation.\n"
"\n"
+" By default, Subversion will refuse to switch a working copy path to\n"
+" a new URL with which it shares no common version control ancestry.\n"
+" Use the '--ignore-ancestry' option to override this sanity check.\n"
+"\n"
" 2. The '--relocate' option is deprecated. This syntax is equivalent to\n"
" 'svn relocate FROM-PREFIX TO-PREFIX [PATH]'.\n"
"\n"
@@ -9417,13 +12815,13 @@ msgid ""
" svn switch --relocate http://www.example.com/repo/project \\\n"
" svn://svn.example.com/repo/project\n"
msgstr ""
-"Aktualisiert die Arbeitskopie auf eine andere URL.\n"
+"Stellt die Arbeitskopie auf eine andere URL.\n"
"Aufruf: 1. switch URL[@PEGREV] [PFAD]\n"
" 2. switch --relocate VON NACH [PFAD...]\n"
"\n"
-" 1. Platziert die Arbeitskopie so um, dass sie eine neue URL im Projektarchiv\n"
+" 1. Stellt die Arbeitskopie so um, dass sie eine neue URL im Projektarchiv\n"
" widerspiegelt. Dieses Verhalten ist ähnlich zu »svn update« und wird\n"
-" verwendet, um eine Arbeitskopie auf einen Zweig oder eine Marke im selben\n"
+" verwendet, um eine Arbeitskopie auf einen Zweig oder ein Tag im selben\n"
" Projektarchiv umzustellen. Falls angegeben, spezifiziert PEGREV,\n"
" in welcher Revision zuerst nach dem Ziel gesucht wird.\n"
"\n"
@@ -9440,35 +12838,43 @@ msgstr ""
" des Projektarchivs werden auf den behindernden Pfad angewandt.\n"
"\n"
" Verwenden Sie die Option --set-depth, um eine neue Arbeitskopietiefe für\n"
-" die Ziele dieser Operation zu setzen. Zurzeit kann die Tiefe eines\n"
-" Arbeitskopieverzeichnisses nur erhöht werden (tiefer ineinander\n"
-" geschachtelt); eine Verzeichnistiefe kann nicht reduziert werden.\n"
+" die Ziele dieser Operation zu setzen.\n"
+"\n"
+" Subversion wird sich im Normalfall weigern, eine Arbeitkopie auf eine neue\n"
+" URL umzustellen, mit dem sie keine gemeinsame Vorgeschichte in der\n"
+" Versionskontrolle hat. »--ignore-ancestry« übergeht diese Prüfung.\n"
"\n"
-" 2. Schreibt die Metadaten der Arbeitskopie so um, dass sie einer Änderung\n"
-" der URL folgen. Dies wird verwendet, wenn sich die Basis-URL eines\n"
-" Projektarchivs ändert (z.B. durch eine Schema- oder Hostnamenänderung),\n"
-" während Ihre Arbeitskopie immer noch das selbe Verzeichnis im selben\n"
-" Projektarchiv widerspiegelt.\n"
+" 2. Die Option »--relocate« ist veraltet. Der Syntax ist identisch mit\n"
+" »svn relocate VON NACH [PFAD]«.\n"
"\n"
" Siehe auch »svn help update« für eine Liste möglicher Buchstaben,\n"
" die die durchgeführte Aktion beschreiben.\n"
+"\n"
+" Examples:\n"
+" svn switch ^/branches/Version-1.x\n"
+" svn switch --relocate http:// svn://\n"
+" svn switch --relocate http://www.example.com/repo/Projekt \\\n"
+" svn://svn.example.com/repo/Projekt\n"
-#: ../svn/main.c:1129
+#: ../svn/svn.c:1557
+msgid "allow switching to a node with no common ancestor"
+msgstr "Erlaubt Umstellung auf einen Knoten ohne gemeinsamen Vorfahren"
+
+#: ../svn/svn.c:1561
msgid ""
"Unlock working copy paths or URLs.\n"
"usage: unlock TARGET...\n"
"\n"
" Use --force to break the lock.\n"
msgstr ""
-"Hebt Sperren von Pfaden in Arbeitskopie oder URLs im Projektarchiv auf.\n"
+"Hebt Sperren von Arbeitskopiepfaden oder URLs auf.\n"
"Aufruf: unlock ZIEL...\n"
"\n"
" Benutzen Sie --force, um die Freigabe zu erzwingen.\n"
# Parts of the text (--force and --set-depth) are shared with the
# switch help. Keep it consistent.
-#: ../svn/main.c:1136
-#, fuzzy
+#: ../svn/svn.c:1568
msgid ""
"Bring changes from the repository into the working copy.\n"
"usage: update [PATH...]\n"
@@ -9489,7 +12895,9 @@ msgid ""
"\n"
" Characters in the first column report about the item itself.\n"
" Characters in the second column report about properties of the item.\n"
-" A 'C' in the third column indicates a tree conflict, while a 'C' in\n"
+" A 'B' in the third column signifies that the lock for the file has\n"
+" been broken or stolen.\n"
+" A 'C' in the fourth column indicates a tree conflict, while a 'C' in\n"
" the first and second columns indicate textual conflicts in files\n"
" and in property values, respectively.\n"
"\n"
@@ -9505,6 +12913,12 @@ msgid ""
" are applied to the obstructing path. Obstructing paths are reported\n"
" in the first column with code 'E'.\n"
"\n"
+" If the specified update target is missing from the working copy but its\n"
+" immediate parent directory is present, checkout the target into its\n"
+" parent directory at the specified depth. If --parents is specified,\n"
+" create any missing parent directories of the target by checking them\n"
+" out, too, at depth=empty.\n"
+"\n"
" Use the --set-depth option to set a new working copy depth on the\n"
" targets of this operation.\n"
msgstr ""
@@ -9524,12 +12938,16 @@ msgstr ""
" C Conflict - Konflikt\n"
" G Merged - Zusammengeführt\n"
" E Existed - Existierend\n"
+" R Replaced - Ersetzt\n"
"\n"
" Ein Buchstabe in der ersten Spalte symbolisiert eine Aktualisierung der\n"
" Datei, während Aktualisierungen der Dateieigenschaften in der zweiten\n"
" Spalte angezeigt werden.\n"
" Ein »B« in der dritten Spalte zeigt an, dass die Sperre für die Datei\n"
" aufgebrochen oder gestohlen wurde.\n"
+" Ein »C« in der vierten Spalte zeigt einen Baumkonflikt an, während es\n"
+" in der ersten und zweiten Spalte jeweils einen Konflikt im Text bzw.\n"
+" einer Eigenschaft anzeigt.\n"
"\n"
" Falls --force verwendet wird, werden nichtversionierte behindernde Pfade in\n"
" der Arbeitskopie nicht automatisch einen Fehlschlag verursachen, wenn die\n"
@@ -9544,105 +12962,132 @@ msgstr ""
" Alle Eigenschaften des Projektarchivs werden auf den behindernden Pfad\n"
" angewandt. Behindernde Pfade werden in der ersten Spalte mit »E« angezeigt.\n"
"\n"
+" Falls das angegebene Ziel der Aktualisierung in der Arbeitskopie fehlt aber\n"
+" dessen unmittelbares Elternverzeichnis vorhanden ist, wird das angegebene\n"
+" Ziel in das Elternverzeichnis mit der angegebenen Tiefe ausgecheckt. Falls\n"
+" »--parents« angegeben wird, werden alle fehlenden Elternverzeichnisse auch\n"
+" ausgecheckt, mit der Tiefe »empty«.\n"
" Verwenden Sie die Option --set-depth, um eine neue Arbeitskopietiefe für\n"
" die Ziele dieser Operation zu setzen. Zurzeit kann die Tiefe eines\n"
" Arbeitskopieverzeichnisses nur erhöht werden (tiefer ineinander geschachtelt);\n"
" eine Verzeichnistiefe kann nicht reduziert werden.\n"
-#: ../svn/main.c:1177
+#: ../svn/svn.c:1618
msgid ""
"Upgrade the metadata storage format for a working copy.\n"
-"usage: upgrade WCPATH...\n"
+"usage: upgrade [WCPATH...]\n"
+"\n"
+" Local modifications are preserved.\n"
msgstr ""
+"Überführt die Metadaten einer Arbeitskopie in ein neues Speicherformat.\n"
+"Aufruf: upgrade [AKPFAD...]\n"
+"\n"
+" Lokale Änderungen bleiben erhalten.\n"
-#: ../svn/main.c:1221 ../svnadmin/main.c:86 ../svnlook/main.c:354
-#: ../svnsync/main.c:263
+#: ../svn/svn.c:1664 ../svnadmin/svnadmin.c:90 ../svnlook/svnlook.c:380
+#: ../svnrdump/svnrdump.c:65 ../svnsync/svnsync.c:297
msgid "Caught signal"
msgstr "Abbruchsignal empfangen"
-#: ../svn/main.c:1340 ../svnlook/main.c:2321
+#: ../svn/svn.c:1817 ../svnlook/svnlook.c:2565
msgid "Non-numeric limit argument given"
msgstr "Nicht-numerische Bereichsgrenze angegeben"
-#: ../svn/main.c:1346 ../svnlook/main.c:2327
+#: ../svn/svn.c:1823 ../svnlook/svnlook.c:2571
msgid "Argument to --limit must be positive"
msgstr "Parameter für --limit muss positiv sein"
-#: ../svn/main.c:1367 ../svn/main.c:1642
+#: ../svn/svn.c:1844 ../svn/svn.c:2121
msgid "Can't specify -c with --old"
msgstr "-c kann nicht mit --old verwendet werden"
-#: ../svn/main.c:1391
+#: ../svn/svn.c:1875
#, c-format
msgid "Negative number in range (%s) not supported with -c"
-msgstr ""
+msgstr "Negative Zahl im Bereich (%s) ist mit -c nicht unterstützt"
-#: ../svn/main.c:1404
+#: ../svn/svn.c:1888
#, c-format
msgid "Non-numeric change argument (%s) given to -c"
msgstr "Nicht-numerischer Parameter (%s) an -c übergeben"
-#: ../svn/main.c:1412
+#: ../svn/svn.c:1896
msgid "There is no change 0"
msgstr "Es gibt keine Änderung 0"
-#: ../svn/main.c:1457 ../svnadmin/main.c:1651 ../svnsync/main.c:1947
+#: ../svn/svn.c:1939 ../svnadmin/svnadmin.c:2037 ../svnrdump/svnrdump.c:937
+#: ../svnsync/svnsync.c:2052
#, c-format
msgid "Syntax error in revision argument '%s'"
msgstr "Syntaxfehler in Revisionsparameter »%s«"
-#: ../svn/main.c:1530 ../svn/main.c:1549
+#: ../svn/svn.c:2005 ../svn/svn.c:2024
#, c-format
msgid "Error converting depth from locale to UTF-8"
msgstr "Fehler beim Konvertieren der Tiefe aus Locale nach UTF-8"
-#: ../svn/main.c:1538
+#: ../svn/svn.c:2013
#, c-format
msgid "'%s' is not a valid depth; try 'empty', 'files', 'immediates', or 'infinity'"
msgstr "»%s« ist keine gültige Tiefe; versuchen Sie »empty«, »files«, »immediates« oder »infinity«"
-#: ../svn/main.c:1557
+#: ../svn/svn.c:2032
#, c-format
msgid "'%s' is not a valid depth; try 'exclude', 'empty', 'files', 'immediates', or 'infinity'"
msgstr "»%s« ist keine gültige Tiefe; versuchen Sie »exclude«, »empty«, »files«, »immediates« oder »infinity«"
-#: ../svn/main.c:1687
+#: ../svn/svn.c:2161
#, c-format
msgid "Syntax error in native-eol argument '%s'"
msgstr "Syntaxfehler im »native-eol« Parameter »%s«"
-#: ../svn/main.c:1742
+#: ../svn/svn.c:2181
+msgid "Changelist names must not be empty"
+msgstr "Namen von Änderungslisten dürfen nicht leer sein"
+
+#: ../svn/svn.c:2215
#, c-format
msgid "'%s' is not a valid --accept value"
msgstr "»%s« ist kein gültiger Wert für --accept"
-#: ../svn/main.c:1751
+#: ../svn/svn.c:2223
#, c-format
msgid "'%s' is not a valid --show-revs value"
msgstr "»%s« ist kein gültiger Wert für --show-revs"
-#: ../svn/main.c:1764
+#: ../svn/svn.c:2235
#, c-format
msgid "Invalid strip count '%s'"
msgstr "Ungültige Anzahl der zu entfernenden Komponenten »%s«"
-#: ../svn/main.c:1770
+#: ../svn/svn.c:2241
msgid "Argument to --strip must be positive"
msgstr "Parameter für --strip muss positiv sein"
-#: ../svn/main.c:1851 ../svndumpfilter/main.c:1395 ../svnlook/main.c:2399
-#: ../svnrdump/svnrdump.c:522
+#: ../svn/svn.c:2296 ../svnmucc/svnmucc.c:1208 ../svnrdump/svnrdump.c:993
+#: ../svnsync/svnsync.c:2096
+msgid "--non-interactive and --force-interactive are mutually exclusive"
+msgstr "--non-interactive und --force-interactive schließen sich gegenseitig aus"
+
+#: ../svn/svn.c:2350 ../svndumpfilter/svndumpfilter.c:1539
+#: ../svnlook/svnlook.c:2667
#, c-format
msgid "Subcommand argument required\n"
msgstr "Unterbefehl benötigt einen Parameter\n"
-#: ../svn/main.c:1870 ../svnadmin/main.c:1787 ../svndumpfilter/main.c:1414
-#: ../svnlook/main.c:2418 ../svnrdump/svnrdump.c:541
+#: ../svn/svn.c:2367 ../svnadmin/svnadmin.c:2220
+#: ../svndumpfilter/svndumpfilter.c:1559 ../svnlook/svnlook.c:2686
+#: ../svnrdump/svnrdump.c:1039
#, c-format
-msgid "Unknown command: '%s'\n"
-msgstr "Unbekannter Befehl: »%s«\n"
+msgid "Unknown subcommand: '%s'\n"
+msgstr "Unbekannter Unterbefehl: »%s«\n"
-#: ../svn/main.c:1904
+#: ../svn/svn.c:2376
+#, c-format
+msgid "Undo is done using either the 'svn revert' or the 'svn merge' command.\n"
+msgstr "Undo wird mit den Befehlen »svn revert« bzw. »svn merge« durchgeführt.\n"
+
+#: ../svn/svn.c:2411
#, c-format
msgid ""
"Subcommand '%s' doesn't accept option '%s'\n"
@@ -9651,669 +13096,123 @@ msgstr ""
"Unterbefehl »%s« akzeptiert die Option »%s« nicht\n"
"Geben Sie »svn help %s« für Hilfe ein.\n"
-#: ../svn/main.c:1919
+#: ../svn/svn.c:2425
msgid "Multiple revision arguments encountered; can't specify -c twice, or both -c and -r"
msgstr "Mehrere Revisionsparameter gefunden; bitte nicht zweimal -c oder gleichzeitig -r und -c angeben"
-#: ../svn/main.c:1931
+#: ../svn/svn.c:2437
msgid "--depth and --set-depth are mutually exclusive"
msgstr "--depth und --set-depth schließen sich gegenseitig aus"
-#: ../svn/main.c:1941
+#: ../svn/svn.c:2447
msgid "--with-all-revprops and --with-no-revprops are mutually exclusive"
msgstr "--with-all-revprops und --with-no-revprops schließen sich gegenseitig aus"
-#: ../svn/main.c:1951
+#: ../svn/svn.c:2457
msgid "--with-revprop and --with-no-revprops are mutually exclusive"
msgstr "--with-revprop und --with-no-revprops schließen sich gegenseitig aus"
-#: ../svn/main.c:1960 ../svnsync/main.c:2019
+#: ../svn/svn.c:2470
+msgid "--message (-m) and --file (-F) are mutually exclusive"
+msgstr "--message (-m) und --file (-F) schließen sich gegenseitig aus"
+
+#: ../svn/svn.c:2479 ../svnmucc/svnmucc.c:1219 ../svnrdump/svnrdump.c:1098
+#: ../svnsync/svnsync.c:2147
msgid "--trust-server-cert requires --non-interactive"
msgstr "--trust-server-cert erfordert --non-interactive"
# TODO: Duplicated message!!!!
-#: ../svn/main.c:1970
+#: ../svn/svn.c:2489
msgid "--diff-cmd and --internal-diff are mutually exclusive"
msgstr "--diff-cmd und --internal-diff schließen sich gegenseitig aus"
-#: ../svn/main.c:2030
+#: ../svn/svn.c:2531
+msgid "--relocate and --depth are mutually exclusive"
+msgstr "--relocate und --depth schließen sich gegenseitig aus"
+
+#: ../svn/svn.c:2539
+msgid "--relocate and --non-recursive (-N) are mutually exclusive"
+msgstr "--relocate und --non-recursive (-N) schließen sich gegenseitig aus"
+
+#: ../svn/svn.c:2661
msgid "Log message file is a versioned file; use '--force-log' to override"
msgstr "Die Datei für die Logmeldung ist versioniert; geben Sie »--force-log« an, um sie zu verwenden"
-#: ../svn/main.c:2037
+#: ../svn/svn.c:2668
msgid "Lock comment file is a versioned file; use '--force-log' to override"
msgstr "Die Datei für den Sperrkommentar ist versioniert; geben Sie »--force-log« an, um sie zu verwenden"
-#: ../svn/main.c:2058
+#: ../svn/svn.c:2689
msgid "The log message is a pathname (was -F intended?); use '--force-log' to override"
msgstr "Die Logmeldung ist ein Pfad (war -F gemeint?); geben Sie »--force-log« an, um sie zu verwenden"
-#: ../svn/main.c:2065
+#: ../svn/svn.c:2696
msgid "The lock comment is a pathname (was -F intended?); use '--force-log' to override"
msgstr "Der Sperrkommentar ist ein Pfad (war -F gemeint?); geben Sie »--force-log« an, um ihn zu verwenden"
-#: ../svn/main.c:2079
-msgid "--relocate and --depth are mutually exclusive"
-msgstr "--relocate und --depth schließen sich gegenseitig aus"
-
-#: ../svn/main.c:2087
-msgid "--relocate and --non-recursive (-N) are mutually exclusive"
-msgstr "--relocate und --non-recursive (-N) schließen sich gegenseitig aus"
-
-#: ../svn/main.c:2171
+#: ../svn/svn.c:2720
msgid "--auto-props and --no-auto-props are mutually exclusive"
msgstr "--auto-props und --no-auto-props schließen sich gegenseitig aus"
-#: ../svn/main.c:2185
-msgid "--reintegrate cannot be used with --ignore-ancestry or --record-only"
-msgstr "--reintegrate kann nicht mit --ignore-ancestry oder --record-only verwendet werden"
-
-#: ../svn/main.c:2193
-msgid "--reintegrate cannot be used with --ignore-ancestry"
-msgstr "--reintegrate kann nicht mit --ignore-ancestry verwendet werden"
-
-#: ../svn/main.c:2201
-msgid "--reintegrate cannot be used with --record-only"
-msgstr "--reintegrate kann nicht mit --record-only verwendet werden"
-
-#: ../svn/main.c:2325 ../svn/main.c:2331
+#: ../svn/svn.c:2825 ../svn/svn.c:2832
#, c-format
msgid "--accept=%s incompatible with --non-interactive"
msgstr "--accept=%s ist mit --non-interactive nicht kompatibel"
-#: ../svn/main.c:2358
-msgid "Try 'svn help' for more info"
-msgstr "Versuchen Sie »svn help« für weitere Informationen"
-
-#: ../svn/main.c:2368
-msgid "svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)\n"
-msgstr "svn: Starten Sie »svn cleanup«, um die Sperren zu entfernen (Aufruf: »svn help cleanup« für Details)\n"
-
-#: ../svn/merge-cmd.c:65
-msgid "-r and -c can't be used with --reintegrate"
-msgstr "-r und -c können nicht mit --reintegrate verwendet werden"
-
-#: ../svn/merge-cmd.c:120
-msgid "Merge source required"
-msgstr "Die Zusammenführungsquelle muss angegeben werden"
-
-#: ../svn/merge-cmd.c:166
-msgid "Second revision required"
-msgstr "Eine zweite Revision muss angegeben werden"
-
-#: ../svn/merge-cmd.c:175 ../svn/merge-cmd.c:208 ../svn/mergeinfo-cmd.c:84
-msgid "Too many arguments given"
-msgstr "Zu viele Parameter angegeben"
-
-#: ../svn/merge-cmd.c:197
-msgid "Cannot specify a revision range with two URLs"
-msgstr "Die Angabe eines Revisionsbereichs mit zwei URLs ist nicht möglich"
-
-#: ../svn/merge-cmd.c:224
-msgid "A working copy merge source needs an explicit revision"
-msgstr "Beim Zusammenführen von Arbeitskopien wird eine explizite Revision benötigt"
-
-#: ../svn/merge-cmd.c:284
-msgid "--depth cannot be used with --reintegrate"
-msgstr "--depth kann nicht mit --reintegrate verwendet werden"
-
-# TODO: merge messages!!!
-#: ../svn/merge-cmd.c:289
-msgid "--force cannot be used with --reintegrate"
-msgstr "--force kann nicht mit --reintegrate verwendet werden"
-
-#: ../svn/merge-cmd.c:294
-msgid "--reintegrate can only be used with a single merge source"
-msgstr "--reintegrate kann nur mit einer einzelnen Zusammenführungsquelle verwendet werden"
-
-# TODO: merge messages!!!
-#: ../svn/merge-cmd.c:298
-msgid "--allow-mixed-revisions cannot be used with --reintegrate"
-msgstr "--allow-mixed-revisions kann nicht mit --reintegrate verwendet werden"
-
-#: ../svn/mergeinfo-cmd.c:81
-msgid "Not enough arguments given"
-msgstr "Nicht genügend Parameter angegeben"
-
-#: ../svn/mkdir-cmd.c:89
-msgid "Try 'svn add' or 'svn add --non-recursive' instead?"
-msgstr "Versuchen Sie »svn add« oder »svn add --non-recursive«."
-
-#: ../svn/mkdir-cmd.c:95
-msgid "Try 'svn mkdir --parents' instead?"
-msgstr "Versuchen Sie »svn mkdir --parents« stattdessen?"
-
-#: ../svn/notify.c:82 ../svn/status-cmd.c:87
-msgid "Summary of conflicts:\n"
-msgstr "Konfliktübersicht:\n"
-
-#: ../svn/notify.c:86 ../svn/status-cmd.c:91
+#: ../svn/svn.c:2888
#, c-format
-msgid " Text conflicts: %u\n"
-msgstr " Textkonflikte: %u\n"
+msgid "Try 'svn help %s' for more information"
+msgstr "Versuchen Sie »svn help %s« für weitere Informationen"
-#: ../svn/notify.c:90 ../svn/status-cmd.c:95
-#, c-format
-msgid " Property conflicts: %u\n"
-msgstr " Eigenschaftskonflikte: %u\n"
+#: ../svn/svn.c:2894
+msgid "Please see the 'svn upgrade' command"
+msgstr "Siehe Kommando »svn upgrade«"
-#: ../svn/notify.c:94 ../svn/status-cmd.c:99
-#, c-format
-msgid " Tree conflicts: %u\n"
-msgstr " Baumkonflikte: %u\n"
+#: ../svn/svn.c:2900 ../svnmucc/svnmucc.c:1457 ../svnrdump/svnrdump.c:1175
+msgid "Authentication failed and interactive prompting is disabled; see the --force-interactive option"
+msgstr "Authentifizierung schlug fehl und interaktives Nachfragen ist deaktiviert; Siehe Option »--force-interactive«"
-#: ../svn/notify.c:98
-#, c-format
-msgid " Skipped paths: %u\n"
-msgstr " Ãœbersprungene Pfade: %u\n"
+#: ../svn/svn.c:2905
+msgid "Reading file from standard input because of -F option; this can interfere with interactive prompting"
+msgstr "Einlesen der Datei von der Standardeingabe wegen Option -F; dies kann interaktive Nachfragen stören"
-#: ../svn/notify.c:134
-#, c-format
-msgid "Skipped missing target: '%s'\n"
-msgstr "Fehlendes Ziel: »%s« übersprungen\n"
+#: ../svn/svn.c:2916
+msgid "Run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)"
+msgstr "Starten Sie »svn cleanup«, um die Sperren zu entfernen (Aufruf: »svn help cleanup« für Details)"
-#: ../svn/notify.c:141
-#, c-format
-msgid "Skipped target: '%s' -- copy-source is missing\n"
-msgstr "Ziel: »%s« übersprungen -- copy-source fehlt\n"
-
-#: ../svn/notify.c:148
-#, c-format
-msgid "Skipped '%s'\n"
-msgstr "Überspringe »%s«\n"
-
-#: ../svn/notify.c:211
-#, c-format
-msgid "Restored '%s'\n"
-msgstr "Wieder hergestellt »%s«\n"
-
-#: ../svn/notify.c:217
-#, c-format
-msgid "Reverted '%s'\n"
-msgstr "Rückgängig gemacht: »%s«\n"
-
-#: ../svn/notify.c:223
-#, c-format
-msgid "Failed to revert '%s' -- try updating instead.\n"
-msgstr "Wiederherstellen von »%s« schlug fehl -- Versuchen Sie statt dessen zu aktualisieren.\n"
-
-#: ../svn/notify.c:231
-#, c-format
-msgid "Resolved conflicted state of '%s'\n"
-msgstr "Konflikt von »%s« aufgelöst\n"
-
-#: ../svn/notify.c:320 ../svn/notify.c:360
-#, c-format
-msgid "> applied hunk ## -%lu,%lu +%lu,%lu ## with offset %s"
-msgstr ""
-
-#: ../svn/notify.c:337 ../svn/notify.c:374
-#, c-format
-msgid "> applied hunk @@ -%lu,%lu +%lu,%lu @@ with offset %s"
-msgstr ""
-
-#: ../svn/notify.c:395
-#, c-format
-msgid "> applied hunk ## -%lu,%lu +%lu,%lu ## with fuzz %d (%s)\n"
-msgstr ""
-
-#: ../svn/notify.c:405
-#, c-format
-msgid "> applied hunk @@ -%lu,%lu +%lu,%lu @@ with fuzz %d\n"
-msgstr ""
-
-#: ../svn/notify.c:423
-#, c-format
-msgid "> rejected hunk ## -%lu,%lu +%lu,%lu ## (%s)\n"
-msgstr ""
-
-#: ../svn/notify.c:432
-#, c-format
-msgid "> rejected hunk @@ -%lu,%lu +%lu,%lu @@\n"
-msgstr ""
-
-#: ../svn/notify.c:446
-#, c-format
-msgid "> hunk ## -%lu,%lu +%lu,%lu ## already applied (%s)\n"
-msgstr ""
-
-#: ../svn/notify.c:456
-#, c-format
-msgid "> hunk @@ -%lu,%lu +%lu,%lu @@ already applied\n"
-msgstr ""
+#: ../svn/svn.c:2923
+msgid "Another process is blocking the working copy database, or the underlying filesystem does not support file locking; if the working copy is on a network filesystem, make sure file locking has been enabled on the file server"
+msgstr "Ein anderer Vorgang blockiert die Datenbank der Arbeitskopie, oder das darunterliegende Dateisystem unterstützt das Sperren von Dateien nicht; falls sich die Arbeitskopie auf einem Netzwerkdateisystem befindet, stellen Sie sicher, dass Dateisperren auf dem Dateiserver aktiviert sind"
-# Currently this is used for checkouts and switches too. If we
-# want different output, we'll have to add new actions.
-#: ../svn/notify.c:516
-#, c-format
-msgid ""
-"\n"
-"Fetching external item into '%s'\n"
-msgstr ""
-"\n"
-"Hole externen Verweis nach »%s«\n"
-
-#: ../svn/notify.c:542
-#, c-format
-msgid "Error handling externals definition for '%s':"
-msgstr "Fehler beim Umgang mit der Definition des externen Verweises für »%s«:"
-
-#: ../svn/notify.c:560
-#, c-format
-msgid "Exported external at revision %ld.\n"
-msgstr "Externer Verweis exportiert, Revision %ld.\n"
-
-#: ../svn/notify.c:561
-#, c-format
-msgid "Exported revision %ld.\n"
-msgstr "Exportiert, Revision %ld.\n"
-
-#: ../svn/notify.c:569
-#, c-format
-msgid "Checked out external at revision %ld.\n"
-msgstr "Externer Verweis ausgecheckt, Revision %ld.\n"
-
-#: ../svn/notify.c:570
-#, c-format
-msgid "Checked out revision %ld.\n"
-msgstr "Ausgecheckt, Revision %ld.\n"
-
-#: ../svn/notify.c:580
-#, c-format
-msgid "Updated external to revision %ld.\n"
-msgstr "Externer Verweis aktualisiert zu Revision %ld.\n"
-
-#: ../svn/notify.c:581
-#, c-format
-msgid "Updated to revision %ld.\n"
-msgstr "Aktualisiert zu Revision %ld.\n"
-
-#: ../svn/notify.c:589
-#, c-format
-msgid "External at revision %ld.\n"
-msgstr "Externer Verweis, Revision %ld.\n"
-
-#: ../svn/notify.c:590
-#, c-format
-msgid "At revision %ld.\n"
-msgstr "Revision %ld.\n"
-
-#: ../svn/notify.c:602
-#, c-format
-msgid "External export complete.\n"
-msgstr "Export des externen Verweises abgeschlossen.\n"
-
-#: ../svn/notify.c:603
-#, c-format
-msgid "Export complete.\n"
-msgstr "Export abgeschlossen.\n"
-
-#: ../svn/notify.c:610
-#, c-format
-msgid "External checkout complete.\n"
-msgstr "Auschecken des externen Verweises abgeschlossen.\n"
-
-#: ../svn/notify.c:611
-#, c-format
-msgid "Checkout complete.\n"
-msgstr "Auschecken abgeschlossen.\n"
-
-#: ../svn/notify.c:618
-#, c-format
-msgid "External update complete.\n"
-msgstr "Aktualisierung des externen Verweises abgeschlossen.\n"
-
-#: ../svn/notify.c:619
-#, c-format
-msgid "Update complete.\n"
-msgstr "Aktualisierung abgeschlossen.\n"
-
-#: ../svn/notify.c:636
-#, c-format
-msgid ""
-"\n"
-"Performing status on external item at '%s'\n"
-msgstr ""
-"\n"
-"Hole Status des externen Verweises in »%s«\n"
-
-#: ../svn/notify.c:644
-#, c-format
-msgid "Status against revision: %6ld\n"
-msgstr "Status bezogen auf Revision: %6ld\n"
-
-#: ../svn/notify.c:652
-#, c-format
-msgid "Sending %s\n"
-msgstr "Sende %s\n"
-
-# CHECKME: Warum wird "Hinzuf." nicht ausgeschrieben? (Einfach 1. Spalte verbreitern)
-#: ../svn/notify.c:661
-#, c-format
-msgid "Adding (bin) %s\n"
-msgstr "Hinzuf. (bin) %s\n"
-
-#: ../svn/notify.c:668
-#, c-format
-msgid "Adding %s\n"
-msgstr "Hinzufügen %s\n"
-
-#: ../svn/notify.c:675
-#, c-format
-msgid "Deleting %s\n"
-msgstr "Lösche %s\n"
-
-#: ../svn/notify.c:682
-#, c-format
-msgid "Replacing %s\n"
-msgstr "Ersetze %s\n"
-
-#: ../svn/notify.c:692 ../svnsync/sync.c:320
-#, c-format
-msgid "Transmitting file data "
-msgstr "Ãœbertrage Daten "
-
-#: ../svn/notify.c:701
-#, c-format
-msgid "'%s' locked by user '%s'.\n"
-msgstr "»%s« gesperrt durch »%s«.\n"
-
-#: ../svn/notify.c:707
-#, c-format
-msgid "'%s' unlocked.\n"
-msgstr "»%s« freigegeben.\n"
-
-#: ../svn/notify.c:734
-#, c-format
-msgid "--- Merging differences between repository URLs into '%s':\n"
-msgstr "-- Zusammenführen der Unterschiede zwischen Projektarchiv-URLs in »%s«:\n"
-
-#: ../svn/notify.c:739
-#, c-format
-msgid "--- Merging r%ld into '%s':\n"
-msgstr "-- Zusammenführen von r%ld in »%s«:\n"
-
-#: ../svn/notify.c:743
-#, c-format
-msgid "--- Reverse-merging r%ld into '%s':\n"
-msgstr "-- Rückwärtiges Zusammenführen von r%ld in »%s«:\n"
-
-#: ../svn/notify.c:747
-#, c-format
-msgid "--- Merging r%ld through r%ld into '%s':\n"
-msgstr "-- Zusammenführen von r%ld bis r%ld in »%s«:\n"
-
-#: ../svn/notify.c:753
-#, c-format
-msgid "--- Reverse-merging r%ld through r%ld into '%s':\n"
-msgstr "-- Rückwärtiges Zusammenführen von r%ld bis r%ld in »%s«:\n"
-
-#: ../svn/notify.c:765
-msgid "--- Recording mergeinfo for merge between repository URLs into '%s':\n"
-msgstr "-- Aufzeichnung der Informationen für Zusammenführung zwischen Projektarchiv-URLs in »%s«:\n"
-
-#: ../svn/notify.c:775
-#, c-format
-msgid "--- Recording mergeinfo for merge of r%ld into '%s':\n"
-msgstr "-- Aufzeichnung der Informationen für Zusammenführung von r%ld in »%s«:\n"
-
-#: ../svn/notify.c:780
-#, c-format
-msgid "--- Recording mergeinfo for reverse merge of r%ld into '%s':\n"
-msgstr "-- Aufzeichnung der Informationen für rückwärtiges Zusammenführen von r%ld in »%s«:\n"
-
-#: ../svn/notify.c:785
-#, c-format
-msgid "--- Recording mergeinfo for merge of r%ld through r%ld into '%s':\n"
-msgstr "-- Aufzeichnung der Informationen für Zusammenführung von r%ld bis r%ld in »%s«:\n"
-
-#: ../svn/notify.c:790
-#, c-format
-msgid "--- Recording mergeinfo for reverse merge of r%ld through r%ld into '%s':\n"
-msgstr "-- Aufzeichnung der Informationen für rückwärtiges Zusammenführen von r%ld bis r%ld in »%s«:\n"
-
-#: ../svn/notify.c:800
-#, fuzzy, c-format
-msgid "--- Eliding mergeinfo from '%s':\n"
-msgstr "-- Zusammenführen von r%ld in »%s«:\n"
-
-#: ../svn/notify.c:808
-#, c-format
-msgid "--- Merging differences between foreign repository URLs into '%s':\n"
-msgstr "-- Zusammenführen der Unterschiede zwischen fremden Projektarchiv-URLs in »%s«:\n"
-
-#: ../svn/notify.c:814
-#, c-format
-msgid "--- Merging (from foreign repository) r%ld into '%s':\n"
-msgstr "-- Zusammenführen (aus fremden Projektarchiv) von r%ld in »%s«:\n"
-
-#: ../svn/notify.c:819
-#, c-format
-msgid "--- Reverse-merging (from foreign repository) r%ld into '%s':\n"
-msgstr "-- Rückwärtiges Zusammenführen (aus fremden Projektarchiv) von r%ld in »%s«:\n"
-
-#: ../svn/notify.c:824
-#, c-format
-msgid "--- Merging (from foreign repository) r%ld through r%ld into '%s':\n"
-msgstr "-- Zusammenführen (aus fremden Projektarchiv) von r%ld bis r%ld in »%s«:\n"
-
-#: ../svn/notify.c:830
-#, c-format
-msgid "--- Reverse-merging (from foreign repository) r%ld through r%ld into '%s':\n"
-msgstr "-- Rückwärtiges Zusammenführen (aus fremden Projektarchiv) von r%ld bis r%ld in »%s«:\n"
-
-#: ../svn/notify.c:848
-#, c-format
-msgid "property '%s' set on '%s'\n"
-msgstr "Eigenschaft »%s« für »%s« gesetzt\n"
-
-#: ../svn/notify.c:856
-#, c-format
-msgid "property '%s' deleted from '%s'.\n"
-msgstr "Eigenschaft »%s« wurde von »%s« gelöscht.\n"
-
-#: ../svn/notify.c:864
-#, c-format
-msgid "property '%s' set on repository revision %ld\n"
-msgstr "Eigenschaft »%s« wurde für Revision %ld im Projektarchiv gesetzt\n"
-
-#: ../svn/notify.c:872
-#, c-format
-msgid "property '%s' deleted from repository revision %ld\n"
-msgstr "Eigenschaft »%s« wurde von Revision %ld im Projektarchiv gelöscht\n"
-
-#: ../svn/notify.c:879
-#, c-format
-msgid "Upgraded '%s'.\n"
-msgstr "In neues Format gebracht: »%s«.\n"
-
-#: ../svn/notify.c:885
-#, c-format
-msgid "Redirecting to URL '%s'\n"
-msgstr "Umleitung zur URL »%s«\n"
-
-#: ../svn/obliterate-cmd.c:60
-#, c-format
-msgid "Obliterate %8ld %s\n"
-msgstr ""
-
-#: ../svn/obliterate-cmd.c:111
-msgid "Wrong number of arguments"
-msgstr "Falsche Anzahl von Argumenten"
-
-#: ../svn/obliterate-cmd.c:116
-msgid "Target must specify the revision as a number"
-msgstr "Ziel muss die Revision als Zahl angegeben"
-
-#: ../svn/obliterate-cmd.c:119
-msgid "Target must specify a URL"
-msgstr ""
-
-#: ../svn/propdel-cmd.c:117
-#, c-format
-msgid "Cannot specify revision for deleting versioned property '%s'"
-msgstr "Zum Löschen der versionierten Eigenschaft »%s« darf keine Revision angegeben werden"
-
-# TODO: Compare msgid "Attempted to open non-existent child node '%s'"
-# (non-, vs. non; Attempted vs. Attempting)
-#: ../svn/propdel-cmd.c:152
-#, c-format
-msgid "Attempting to delete nonexistent property '%s'"
-msgstr "Versuchte, nicht existierende Eigenschaft »%s« zu löschen"
-
-#: ../svn/propedit-cmd.c:62 ../svn/propedit-cmd.c:315
-#, c-format
-msgid "Set new value for property '%s' on '%s'\n"
-msgstr "Neuer Wert für Eigenschaft »%s« für »%s« gesetzt\n"
-
-#: ../svn/propedit-cmd.c:92 ../svn/propset-cmd.c:93
-msgid "--encoding option applies only to textual Subversion-controlled properties"
-msgstr "Option --encoding ist nur für textbasierte von Subversion kontrollierte Eigenschaften angebbar"
-
-#: ../svn/propedit-cmd.c:158
-#, c-format
-msgid "Set new value for property '%s' on revision %ld\n"
-msgstr "Neuen Wert für Eigenschaft »%s« in Revision %ld gesetzt\n"
-
-#: ../svn/propedit-cmd.c:164
-#, c-format
-msgid "No changes to property '%s' on revision %ld\n"
-msgstr "Eigenschaft »%s« in Revision %ld nicht geändert\n"
-
-#: ../svn/propedit-cmd.c:172
-#, c-format
-msgid "Cannot specify revision for editing versioned property '%s'"
-msgstr "Beim Bearbeiten der versionierten Eigenschaft »%s« darf keine Revision angegeben werden"
-
-#: ../svn/propedit-cmd.c:200 ../svn/propset-cmd.c:170
-msgid "Explicit target argument required"
-msgstr "Expliziter Zielparameter benötigt"
-
-#: ../svn/propedit-cmd.c:264
-#, c-format
-msgid "'%s' does not appear to be a working copy path"
-msgstr "»%s« scheint kein Pfad einer Arbeitskopie zu sein"
-
-#: ../svn/propedit-cmd.c:322
-#, c-format
-msgid "No changes to property '%s' on '%s'\n"
-msgstr "Keine Änderungen der Eigenschaft »%s« für »%s«\n"
-
-#: ../svn/propget-cmd.c:140 ../svn/proplist-cmd.c:100
-#, c-format
-msgid "Properties on '%s':\n"
-msgstr "Eigenschaften zu »%s«:\n"
-
-#: ../svn/propget-cmd.c:197
-msgid "--verbose cannot be used with --revprop or --strict or --xml"
-msgstr "--verbose kann nicht mit --revprop oder --strict oder --xml verwendet werden"
-
-#: ../svn/propget-cmd.c:290
-msgid "Strict output of property values only available for single-target, non-recursive propget operations"
-msgstr "Strikte Ausgabe von Eigenschaftswerten ist nur für einzelne Ziele und nicht-rekursive propget-Operationen verfügbar"
-
-#: ../svn/proplist-cmd.c:158
-#, c-format
-msgid "Unversioned properties on revision %ld:\n"
-msgstr "Nicht versionierte Eigenschaft in Revision %ld:\n"
-
-#: ../svn/props.c:62
-msgid "Must specify the revision as a number, a date or 'HEAD' when operating on a revision property"
-msgstr "Die Revision muss als Zahl, Datum oder »HEAD« angegeben werden, wenn auf eine Revisionseigenschaft zugegriffen wird"
-
-#: ../svn/props.c:69
-msgid "Wrong number of targets specified"
-msgstr "Falsche Anzahl Ziele angegeben"
-
-#: ../svn/props.c:78
-msgid "Either a URL or versioned item is required"
-msgstr "Eine URL oder ein versioniertes Objekt muss angegeben werden"
-
-#: ../svn/props.c:208
-#, c-format
-msgid ""
-"To turn off the %s property, use 'svn propdel';\n"
-"setting the property to '%s' will not turn it off."
-msgstr ""
-"Um die Eigenschaft %s abzuschalten, ist »svn propdel« zu verwenden;\n"
-"setzen der Eigenschaft auf »%s« wird sie nicht ausschalten."
-
-#: ../svn/propset-cmd.c:127
-#, c-format
-msgid "Cannot specify revision for setting versioned property '%s'"
-msgstr "Beim Setzen der versionierten Eigenschaft »%s« darf keine Revision angegeben werden"
-
-#: ../svn/propset-cmd.c:163
-#, c-format
-msgid "Explicit target required ('%s' interpreted as prop value)"
-msgstr "Explizites Ziel erforderlich (»%s« als Eigenschaftswert interpretiert)"
-
-#: ../svn/resolve-cmd.c:80
-msgid "missing --accept option"
-msgstr "fehlende Option --accept"
-
-#: ../svn/resolve-cmd.c:83
-msgid "invalid 'accept' ARG"
-msgstr "ungültiger Parameter »accept«"
-
-#: ../svn/revert-cmd.c:88
-msgid "Try 'svn revert --depth infinity' instead?"
-msgstr "Versuchen Sie »svn revert --depth infinity« stattdessen?"
-
-#: ../svn/status-cmd.c:364
-#, c-format
-msgid ""
-"\n"
-"--- Changelist '%s':\n"
-msgstr ""
-"\n"
-"--- Änderungsliste »%s«:\n"
-
-#: ../svn/status.c:372
-#, c-format
-msgid "'%s' has lock token, but no lock owner"
-msgstr "»%s« has Sperrmarke, aber keinen Sperreigner"
+#: ../svn/svn.c:2936
+msgid "When using svn+ssh:// URLs, keep in mind that the --username and --password options are ignored because authentication is performed by SSH, not Subversion"
+msgstr "Bei der Verwendung von svn+ssh:// URLs sollte beachtet werden, dass die Optionen »--username« und »--password« ignoriert werden, da die Authentifizierung von SSH und nicht Subversion durchgeführt wird"
#: ../svn/switch-cmd.c:63
#, c-format
msgid "'%s' to '%s' is not a valid relocation"
msgstr "Umplatzieren von »%s« nach »%s« ist nicht möglich"
-#: ../svn/tree-conflicts.c:38 ../svn/tree-conflicts.c:58
-msgid "edit"
-msgstr "editiert"
-
-#: ../svn/tree-conflicts.c:39 ../svn/tree-conflicts.c:59
-msgid "delete"
-msgstr "gelöscht"
-
-#: ../svn/tree-conflicts.c:40 ../svn/tree-conflicts.c:62
-msgid "add"
-msgstr "hinzugefügt"
-
-#: ../svn/tree-conflicts.c:41 ../svn/tree-conflicts.c:63
-msgid "replace"
-msgstr ""
-
-#: ../svn/tree-conflicts.c:60
-msgid "missing"
-msgstr "fehlend"
+#: ../svn/switch-cmd.c:170
+#, c-format
+msgid "Path '%s' does not share common version control ancestry with the requested switch location. Use --ignore-ancestry to disable this check."
+msgstr "Pfad »%s« hat keine gemeinsame Versionskontrollgeschichte mit dem angegebenen Ziel der Umstellung. Verwenden Sie »--ignore-ancestry« um diese Prüfung zu umgehen."
-# CHECKME, has to match first %s in "local %s, incoming %s upon %s"
-#: ../svn/tree-conflicts.c:61
-msgid "obstruction"
-msgstr "blockiert"
+#: ../svn/switch-cmd.c:180
+msgid "'svn switch' does not support switching a working copy to a different repository"
+msgstr "Umstellen einer Arbeitskopie auf ein anderes Projektarchiv wird von »svn switch« nicht unterstützt"
-#: ../svn/tree-conflicts.c:64
-msgid "unversioned"
-msgstr "nicht versioniert"
+#: ../svn/update-cmd.c:93
+#, c-format
+msgid "Summary of updates:\n"
+msgstr "Zusammenfassung der Aktualisierungen:\n"
-#: ../svn/tree-conflicts.c:107
+#: ../svn/update-cmd.c:97
#, c-format
-msgid "local %s, incoming %s upon %s"
-msgstr "lokal %s, eingehend %s bei %s"
+msgid " Updated '%s' to r%ld.\n"
+msgstr " »%s« auf r%ld aktualisiert.\n"
-#: ../svn/util.c:74
+#: ../svn/util.c:79
#, c-format
msgid ""
"\n"
@@ -10322,11 +13221,11 @@ msgstr ""
"\n"
"Revision %ld%s übertragen.\n"
-#: ../svn/util.c:78
+#: ../svn/util.c:83
msgid " (the answer to life, the universe, and everything)"
msgstr " (die Antwort auf die Frage nach dem Leben, dem Universum und dem ganzen Rest)"
-#: ../svn/util.c:87
+#: ../svn/util.c:92
#, c-format
msgid ""
"\n"
@@ -10336,82 +13235,49 @@ msgstr ""
"Warnung: %s\n"
# FIXME: s/whitespace/whitespaceS/?
-#: ../svn/util.c:147
-msgid "The EDITOR, SVN_EDITOR or VISUAL environment variable or 'editor-cmd' run-time configuration option is empty or consists solely of whitespace. Expected a shell command."
-msgstr "Die Umgebungsvariable EDITOR, SVN_EDITOR oder VISUAL oder die Laufzeitkonfigurationsoption »editor-cmd« ist leer oder besteht nur aus Leerzeichen. Erwartete ein Shell-Kommando."
-
-#: ../svn/util.c:154
-msgid "None of the environment variables SVN_EDITOR, VISUAL or EDITOR are set, and no 'editor-cmd' run-time configuration option was found"
-msgstr "Keine der Umgebungsvariablen SVN_EDITOR, VISUAL oder EDITOR ist gesetzt und keine Laufzeitkonfigurationsoption »editor-cmd« wurde gefunden"
-
-#: ../svn/util.c:182 ../svn/util.c:343
-#, c-format
-msgid "Can't get working directory"
-msgstr "Kann Arbeitsverzeichnis nicht ermitteln"
-
-#: ../svn/util.c:193 ../svn/util.c:354 ../svn/util.c:379
-#, c-format
-msgid "Can't change working directory to '%s'"
-msgstr "Kann Arbeitsverzeichnis nicht nach »%s« wechseln"
-
-#: ../svn/util.c:201 ../svn/util.c:523
-#, c-format
-msgid "Can't restore working directory"
-msgstr "Kann nicht in das Arbeitsverzeichnis zurückwechseln"
-
-#: ../svn/util.c:208 ../svn/util.c:451
-#, c-format
-msgid "system('%s') returned %d"
-msgstr "Aufruf des Editors »%s« gab Fehler %d zurück"
-
-# FIXME: s/whitespace/whitespaceS/?
-#: ../svn/util.c:248
+#: ../svn/util.c:133
msgid "The SVN_MERGE environment variable is empty or consists solely of whitespace. Expected a shell command.\n"
msgstr "Die Umgebungsvariable SVN_MERGE ist leer oder besteht nur aus Leerzeichen. Erwartete ein Shell-Kommando.\n"
-#: ../svn/util.c:254
+#: ../svn/util.c:139
msgid "The environment variable SVN_MERGE and the merge-tool-cmd run-time configuration option were not set.\n"
msgstr "Die Umgebungsvariable SVN_MERGE und die Laufzeitkonfigurationsoption merge-tool-cmd wurden nicht gesetzt.\n"
-#: ../svn/util.c:284
+#: ../svn/util.c:169
#, c-format
msgid "The external merge tool exited with exit code %d"
msgstr "Das externe Werkzeug zum Zusammenführen wurde mit Fehlercode %d beendet"
-#: ../svn/util.c:406
-#, c-format
-msgid "Can't write to '%s'"
-msgstr "Kann nicht nach »%s« schreiben"
-
-#: ../svn/util.c:492
-msgid "Error normalizing edited contents to internal format"
-msgstr "Fehler beim Normalisieren des bearbeiteten Inhalts ins interne Format"
-
-#: ../svn/util.c:565
+#: ../svn/util.c:211
msgid "Log message contains a zero byte"
msgstr "Logmeldung enthält ein Null Byte"
-#: ../svn/util.c:628
+#: ../svn/util.c:269
+#, c-format
+msgid " '%s'"
+msgstr " »%s«"
+
+#: ../svn/util.c:273
msgid "Your commit message was left in a temporary file:"
msgstr "Ihre Logmeldung wurde in einer Temporärdatei abgelegt:"
-#: ../svn/util.c:680
+#: ../svn/util.c:325
msgid "--This line, and those below, will be ignored--"
msgstr "-- Diese und die folgenden Zeilen werden ignoriert --"
-#: ../svn/util.c:714
+#: ../svn/util.c:360
msgid "Error normalizing log message to internal format"
msgstr "Fehler beim Normalisieren der Logmeldung ins interne Format"
-#: ../svn/util.c:801
+#: ../svn/util.c:447 ../svnmucc/svnmucc.c:764
msgid "Cannot invoke editor to get log message when non-interactive"
msgstr "Kann den Editor für Logmeldungen nur im interaktiven Modus aufrufen"
-#: ../svn/util.c:814
+#: ../svn/util.c:460
msgid "Could not use external editor to fetch log message; consider setting the $SVN_EDITOR environment variable or using the --message (-m) or --file (-F) options"
msgstr "Konnte keinen externen Editor zur Eingabe der Logmeldung bestimmen. Setzten Sie entweder die $SVN_EDITOR Umgebungsvariable oder verwenden Sie die --message (-m) oder --file (-F) Optionen"
-#: ../svn/util.c:850
+#: ../svn/util.c:496
msgid ""
"\n"
"Log message unchanged or not specified\n"
@@ -10421,168 +13287,168 @@ msgstr ""
"Logmeldung unverändert oder nicht angegeben\n"
"(A)bbrechen, Weiterma(c)hen, (E)ditieren:\n"
-#: ../svn/util.c:903
+#: ../svn/util.c:549
msgid "Use --force to override this restriction (local modifications may be lost)"
msgstr "Benutzen Sie »--force«, um diese Einschränkung aufzuheben (lokale Änderungen könnten verloren gehen)"
# CHECKME! Here used beside "dir" and "file".
-#: ../svn/util.c:1050 ../svn/util.c:1083
+#: ../svn/util.c:738 ../svn/util.c:771
msgid "none"
msgstr "nichts"
-#: ../svn/util.c:1051
+#: ../svn/util.c:739
msgid "file"
msgstr "Datei"
# dir is no English word!
-#: ../svn/util.c:1052
+#: ../svn/util.c:740
msgid "dir"
msgstr "Verzeichnis"
-#: ../svn/util.c:1084
+#: ../svn/util.c:772
msgid "update"
msgstr "Aktualisierung"
-#: ../svn/util.c:1085
+#: ../svn/util.c:773
msgid "switch"
msgstr "Umstellung"
-#: ../svn/util.c:1086
-msgid "merge"
-msgstr "Zusammenführung"
-
-#: ../svn/util.c:1204
+#: ../svn/util.c:896
msgid "(invalid date)"
msgstr "(ungültiges Datum)"
-#: ../svnadmin/main.c:103 ../svndumpfilter/main.c:72
+#: ../svn/util.c:1056
#, c-format
-msgid "Can't open stdio file"
-msgstr "Kann Standardeingabe nicht öffnen"
-
-#: ../svnadmin/main.c:132
-msgid "Repository argument required"
-msgstr "Projektarchiv Parameter erforderlich"
-
-#: ../svnadmin/main.c:137
-#, c-format
-msgid "'%s' is an URL when it should be a path"
-msgstr "»%s« ist eine URL, obwohl es ein Pfad sein sollte"
+msgid "svn: warning: '%s' is a binary mime-type but file '%s' looks like text; diff, merge, blame, and other operations will stop working on this file\n"
+msgstr "svn: Warnung: »%s« ist ein binärer Mime-Typ, die Datei »%s« sieht aber wie Text aus; Operationen »diff« (Unterschiede anzeigen), »merge« (Unterschiede zusammenführen), »blame« (Annotieren) und andere Operationen werden auf dieser Datei nicht mehr funktionieren\n"
-#: ../svnadmin/main.c:253 ../svnrdump/svnrdump.c:77
+#: ../svnadmin/svnadmin.c:217 ../svnrdump/svnrdump.c:120
msgid "specify revision number ARG (or X:Y range)"
msgstr "spezifizieren Sie PAR für Revisionsnummer (oder X:Y Bereich)"
-#: ../svnadmin/main.c:256
-msgid "dump incrementally"
-msgstr "Inkrementell ausgeben"
+#: ../svnadmin/svnadmin.c:220 ../svnlook/svnlook.c:162
+msgid "specify transaction name ARG"
+msgstr "Transaktionsname PAR angeben"
-#: ../svnadmin/main.c:259
+#: ../svnadmin/svnadmin.c:223
+msgid "dump or hotcopy incrementally"
+msgstr "Datenstrom inkrementell ausgeben oder im laufenden Betrieb inkrementell kopieren"
+
+#: ../svnadmin/svnadmin.c:226
msgid "use deltas in dump output"
-msgstr "Nutze Deltas bei der Ausgabe"
+msgstr "Nutzt Deltas bei der Ausgabe"
-#: ../svnadmin/main.c:262
+#: ../svnadmin/svnadmin.c:229
msgid "bypass the repository hook system"
-msgstr "Umgehe das Aktionssystem des Projektarchivs"
+msgstr "Umgeht das Aktionssystem des Projektarchivs"
+
+#: ../svnadmin/svnadmin.c:232
+msgid "bypass property validation logic"
+msgstr "Umgeht die Logik zur Überprüfung von Eigenschaften"
-#: ../svnadmin/main.c:265 ../svnrdump/svnrdump.c:78
+#: ../svnadmin/svnadmin.c:235 ../svnlook/svnlook.c:193
+#: ../svnrdump/svnrdump.c:122 ../svnserve/svnserve.c:289
+#: ../svnversion/svnversion.c:143
msgid "no progress (only errors) to stderr"
-msgstr "keine Fortschrittsanzeige (nur Fehler) auf die Standardausgabe"
+msgstr "keine Fortschrittsanzeige (nur Fehler) auf die Standardfehlerausgabe"
-#: ../svnadmin/main.c:268
+#: ../svnadmin/svnadmin.c:238
msgid "ignore any repos UUID found in the stream"
-msgstr "ignoriere jede Projektarchiv-UUID, die im Datenstrom gefunden wird"
+msgstr "Ignoriert jede Projektarchiv-UUID, die im Datenstrom gefunden wird"
-#: ../svnadmin/main.c:271
+#: ../svnadmin/svnadmin.c:241
msgid "set repos UUID to that found in stream, if any"
-msgstr "setze die UUID des Projektarchivs auf die im Datenstrom gefundene"
+msgstr "Setzt die UUID des Projektarchivs auf die im Datenstrom gefundene"
-#: ../svnadmin/main.c:274
+#: ../svnadmin/svnadmin.c:244
msgid "type of repository: 'fsfs' (default) or 'bdb'"
msgstr "Art des Projektarchivs: »fsfs« (Standard) oder »bdb«"
-#: ../svnadmin/main.c:277
+#: ../svnadmin/svnadmin.c:247
msgid "load at specified directory in repository"
msgstr "in das spezifizierte Verzeichnis im Projektarchiv laden"
-#: ../svnadmin/main.c:280
+#: ../svnadmin/svnadmin.c:250
msgid "disable fsync at transaction commit [Berkeley DB]"
-msgstr "deaktiviere »fsync« für jede Übertragungstransaktion [Berkeley DB]"
+msgstr "Deaktiviert »fsync« für jede Übertragungstransaktion [Berkeley DB]"
-#: ../svnadmin/main.c:283
+#: ../svnadmin/svnadmin.c:253
msgid "disable automatic log file removal [Berkeley DB]"
-msgstr "deaktiviere das automatische Entfernen von Log-Dateien [Berkeley DB]"
+msgstr "Deaktiviert das automatische Entfernen von Log-Dateien [Berkeley DB]"
-#: ../svnadmin/main.c:289
+#: ../svnadmin/svnadmin.c:259
msgid ""
"remove redundant Berkeley DB log files\n"
" from source repository [Berkeley DB]"
msgstr ""
-"entferne redundante Berkeley-DB-Logdateien\n"
+"Entfernt redundante Berkeley-DB-Logdateien\n"
" aus dem Projektarchiv [Berkeley DB]"
-#: ../svnadmin/main.c:293
+#: ../svnadmin/svnadmin.c:263
msgid "call pre-commit hook before committing revisions"
msgstr "die Aktion »pre-commit« nach dem Übertragen von Revisionen aufrufen"
-#: ../svnadmin/main.c:296
+#: ../svnadmin/svnadmin.c:266
msgid "call post-commit hook after committing revisions"
msgstr "die Aktion »post-commit« nach dem Übertragen von Revisionen aufrufen"
-#: ../svnadmin/main.c:299
+#: ../svnadmin/svnadmin.c:269
msgid "call hook before changing revision property"
msgstr "Aktion vor der Änderung der Revisionseigenschaft aufrufen"
-#: ../svnadmin/main.c:302
+#: ../svnadmin/svnadmin.c:272
msgid "call hook after changing revision property"
msgstr "Aktion nach der Änderung der Revisionseigenschaft aufrufen"
-#: ../svnadmin/main.c:305
+#: ../svnadmin/svnadmin.c:275
msgid ""
"wait instead of exit if the repository is in\n"
" use by another process"
msgstr ""
-"warte anstatt abzubrechen, wenn das Projektarchiv\n"
+"Wartet anstatt abzubrechen, wenn das Projektarchiv\n"
" durch einen anderen Prozess belegt ist"
-#: ../svnadmin/main.c:309
-msgid ""
-"use format compatible with Subversion versions\n"
-" earlier than 1.4"
-msgstr "Ein mit Subversion-Versionen vor 1.4 kompatibles Format verwenden"
+#: ../svnadmin/svnadmin.c:279 ../svnadmin/svnadmin.c:282
+#: ../svnadmin/svnadmin.c:285
+msgid "deprecated; see --compatible-version"
+msgstr "Veraltet; siehe »--compatible-version«"
-# TODO: combine with message above
-#: ../svnadmin/main.c:313
+#: ../svnadmin/svnadmin.c:288
msgid ""
-"use format compatible with Subversion versions\n"
-" earlier than 1.5"
-msgstr "Ein mit Subversion-Versionen vor 1.5 kompatibles Format verwenden"
+"size of the extra in-memory cache in MB used to\n"
+" minimize redundant operations. Default: 16.\n"
+" [used for FSFS repositories only]"
+msgstr ""
+"Größe des extra Zwischenspeichers im RAM in MB zur\n"
+" Minimierung redundanter Operationen. Vorgabe: 16.\n"
+" [nur für FSFS-Projektarchive verwendet]"
-#: ../svnadmin/main.c:317
+# TODO: combine with message above
+#: ../svnadmin/svnadmin.c:293
msgid ""
-"use format compatible with Subversion versions\n"
-" earlier than 1.6"
-msgstr "Ein mit Subversion-Versionen vor 1.6 kompatibles Format verwenden"
+"use repository format compatible with Subversion\n"
+" version ARG (\"1.5.5\", \"1.7\", etc.)"
+msgstr ""
+"verwendet ein Format das mit der Subversion-Version PAR\n"
+" kompatibel ist (\"1.5.5\", \"1.7\", usw.)"
-#: ../svnadmin/main.c:321
-msgid ""
-"use format compatible with Subversion versions\n"
-" earlier than 1.7"
-msgstr "Ein mit Subversion-Versionen vor 1.7 kompatibles Format verwenden"
+#: ../svnadmin/svnadmin.c:296
+msgid "read repository paths from file ARG"
+msgstr "Liest Pfade imP rojektarchive aus Datei PAR"
-#: ../svnadmin/main.c:334
+#: ../svnadmin/svnadmin.c:308
msgid ""
"usage: svnadmin crashtest REPOS_PATH\n"
"\n"
"Open the repository at REPOS_PATH, then abort, thus simulating\n"
"a process that crashes while holding an open repository handle.\n"
msgstr ""
-"Aufruf: svnadmin crashtest REPOS_PFAD\n"
+"Aufruf: svnadmin crashtest ARCHIV_PFAD\n"
"\n"
-"Öffnet das Projektarchiv in REPOS_PFAD und bricht ab. Simuliert\n"
+"Öffnet das Projektarchiv in ARCHIV_PFAD und bricht ab. Simuliert\n"
"damit einen Prozess der bei geöffnetem Projektarchiv abstürzt.\n"
-#: ../svnadmin/main.c:340
+#: ../svnadmin/svnadmin.c:314
msgid ""
"usage: svnadmin create REPOS_PATH\n"
"\n"
@@ -10592,7 +13458,7 @@ msgstr ""
"\n"
"Erstellt ein neues, leeres Projektarchiv im ARCHIV_PFAD.\n"
-#: ../svnadmin/main.c:348
+#: ../svnadmin/svnadmin.c:323
msgid ""
"usage: svnadmin deltify [-r LOWER[:UPPER]] REPOS_PATH\n"
"\n"
@@ -10610,7 +13476,7 @@ msgstr ""
"Revision gespeichert werden. Falls keine Revisionen angegeben wurden, wird\n"
"nur die HEAD-Revision deltifiziert.\n"
-#: ../svnadmin/main.c:357
+#: ../svnadmin/svnadmin.c:332
msgid ""
"usage: svnadmin dump REPOS_PATH [-r LOWER[:UPPER] [--incremental]]\n"
"\n"
@@ -10636,7 +13502,28 @@ msgstr ""
"werden für die zweite und folgende Revisionen, nur in diesen Revisionen\n"
"geänderte Pfade ausgegeben.)\n"
-#: ../svnadmin/main.c:370
+#: ../svnadmin/svnadmin.c:345
+msgid ""
+"usage: 1. svnadmin freeze REPOS_PATH PROGRAM [ARG...]\n"
+" 2. svnadmin freeze -F FILE PROGRAM [ARG...]\n"
+"\n"
+"1. Run PROGRAM passing ARGS while holding a write-lock on REPOS_PATH.\n"
+"\n"
+"2. Like 1 except all repositories listed in FILE are locked. The file\n"
+" format is repository paths separated by newlines. Repositories are\n"
+" locked in the same order as they are listed in the file.\n"
+msgstr ""
+"Aufruf: 1. svnadmin freeze ARCHIV_PFAD PROGRAMM [PAR...]\n"
+" 2. svnadmin freeze -F DATEI PROGRAMM [PAR...]\n"
+"\n"
+"1. Führt PROGRAMM mit den Parametern PAR aus und hält solange eine\n"
+" Schreibsperre auf das Projektarchiv ARCHIV_PFAD.\n"
+"2. Ebenso, nur werden alle in DATEI aufgelisteten Projektarchive gesperrt.\n"
+" Die Datei muss die Pfade zu den Projektarchiven durch Zeilenumbrüche\n"
+" getrennt enthalten. Projektarchive werden in der Reihenfolge der Auflistung\n"
+" gesperrt.\n"
+
+#: ../svnadmin/svnadmin.c:355
msgid ""
"usage: svnadmin help [SUBCOMMAND...]\n"
"\n"
@@ -10646,17 +13533,21 @@ msgstr ""
"\n"
"Beschreibt die Anwendung dieses Programms und seiner Unterbefehle.\n"
-#: ../svnadmin/main.c:375
+#: ../svnadmin/svnadmin.c:360
msgid ""
"usage: svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH\n"
"\n"
-"Makes a hot copy of a repository.\n"
+"Make a hot copy of a repository.\n"
+"If --incremental is passed, data which already exists at the destination\n"
+"is not copied again. Incremental mode is implemented for FSFS repositories.\n"
msgstr ""
-"Aufruf: svnadmin hotcopy ARCHIV_PFAD ARCHIV_PFAD_NEU\n"
+"Aufruf: svnadmin hotcopy ARCHIV_PFAD NEUER_ARCHIV_PFAD\n"
"\n"
-"Erstellt eine Kopie des Projektarchivs im laufenden Betrieb.\n"
+"Erstellt eine Kopie eines Projektarchivs im laufenden Betrieb.\n"
+"Wenn »--incremental« angegeben wird, werden im Ziel schon existierende Daten\n"
+"nicht erneut kopiert. Die inkrementelle Kopie ist für FSFS-Projektarchive implementiert.\n"
-#: ../svnadmin/main.c:380
+#: ../svnadmin/svnadmin.c:367
msgid ""
"usage: svnadmin list-dblogs REPOS_PATH\n"
"\n"
@@ -10672,7 +13563,7 @@ msgstr ""
"WARNUNG: Ändern oder Löschen von Log-Dateien, die noch\n"
"benutzt werden, wird ihr Projektarchiv beschädigen.\n"
-#: ../svnadmin/main.c:387
+#: ../svnadmin/svnadmin.c:374
msgid ""
"usage: svnadmin list-unused-dblogs REPOS_PATH\n"
"\n"
@@ -10684,7 +13575,7 @@ msgstr ""
"Listet ungenutzte Log-Dateien der Berkeley Datenbank auf.\n"
"\n"
-#: ../svnadmin/main.c:392
+#: ../svnadmin/svnadmin.c:379
msgid ""
"usage: svnadmin load REPOS_PATH\n"
"\n"
@@ -10692,6 +13583,8 @@ msgid ""
"new revisions into the repository's filesystem. If the repository\n"
"was previously empty, its UUID will, by default, be changed to the\n"
"one specified in the stream. Progress feedback is sent to stdout.\n"
+"If --revision is specified, limit the loaded revisions to only those\n"
+"in the dump stream whose revision numbers match the specified range.\n"
msgstr ""
"Aufruf: svnadmin load ARCHIV_PFAD\n"
"\n"
@@ -10700,8 +13593,25 @@ msgstr ""
"war, wird seine UUID standardmäßig in diejenige geändert, die im Daten-\n"
"strom spezifiziert ist. Eine Fortschrittsanzeige wird an die Standard-\n"
"ausgabe gesendet.\n"
+"Wenn »--revision« angegeben wird, begrenzt dies die aus der Datei geladenen\n"
+"Revisionen auf diesen Bereich.\n"
-#: ../svnadmin/main.c:402
+#: ../svnadmin/svnadmin.c:391
+msgid ""
+"usage: svnadmin lock REPOS_PATH PATH USERNAME COMMENT-FILE [TOKEN]\n"
+"\n"
+"Lock PATH by USERNAME setting comments from COMMENT-FILE.\n"
+"If provided, use TOKEN as lock token. Use --bypass-hooks to avoid\n"
+"triggering the pre-lock and post-lock hook scripts.\n"
+msgstr ""
+"Aufruf: svnadmin lock ARCHIV_PFAD PFAD BENUTZER KOMMENTAR-DATEI [MARKE]\n"
+"\n"
+"Sperrt PFAD als BENUTZER und setzt den Sperrkommentar aus KOMMENTAR-DATEI.\n"
+"Falls angegeben, wird MARKE als Sperrmarke verwendet.\n"
+"Verwenden Sie »--bypass-hooks« um die Auslösung der Aktionen\n"
+"»pre-unlock« und »post-unlock« zu umgehen.\n"
+
+#: ../svnadmin/svnadmin.c:398
msgid ""
"usage: svnadmin lslocks REPOS_PATH [PATH-IN-REPOS]\n"
"\n"
@@ -10713,7 +13623,7 @@ msgstr ""
"Gibt Beschreibungen aller Sperren auf oder unter PFAD-IN-ARCHIV aus (was,\n"
"falls nicht angegeben, die Wurzel des Projektarchivs ist).\n"
-#: ../svnadmin/main.c:408
+#: ../svnadmin/svnadmin.c:404
msgid ""
"usage: svnadmin lstxns REPOS_PATH\n"
"\n"
@@ -10723,7 +13633,7 @@ msgstr ""
"\n"
"Gibt die Namen aller nicht übertragenen Transaktionen aus.\n"
-#: ../svnadmin/main.c:413
+#: ../svnadmin/svnadmin.c:409
msgid ""
"usage: svnadmin pack REPOS_PATH\n"
"\n"
@@ -10735,7 +13645,7 @@ msgstr ""
"Versucht, das Projektarchiv in ein effizienteres Speichermodell zu\n"
"transformieren. Dies muss nicht bei allen Projektarchiven möglich sein und in problematischen Fällen wird nichts getan.\n"
-#: ../svnadmin/main.c:419
+#: ../svnadmin/svnadmin.c:415
msgid ""
"usage: svnadmin recover REPOS_PATH\n"
"\n"
@@ -10752,17 +13662,17 @@ msgstr ""
"Zugriff auf das Projektarchiv. Der Vorgang wird nicht gestartet, falls\n"
"das Projektarchiv von einem anderen Prozess benutzt wird.\n"
-#: ../svnadmin/main.c:427
+#: ../svnadmin/svnadmin.c:423
msgid ""
"usage: svnadmin rmlocks REPOS_PATH LOCKED_PATH...\n"
"\n"
"Unconditionally remove lock from each LOCKED_PATH.\n"
msgstr ""
-"Aufruf: svnadmin rmlocks REPOS_PFAD SPERR_PFAD...\n"
+"Aufruf: svnadmin rmlocks ARCHIV_PFAD SPERR_PFAD...\n"
"\n"
"Entferne vorbehaltslos die Sperren von jedem SPERR_PFAD.\n"
-#: ../svnadmin/main.c:432
+#: ../svnadmin/svnadmin.c:428
msgid ""
"usage: svnadmin rmtxns REPOS_PATH TXN_NAME...\n"
"\n"
@@ -10772,7 +13682,7 @@ msgstr ""
"\n"
"Löscht die benannte(n) Transaktion(en).\n"
-#: ../svnadmin/main.c:437
+#: ../svnadmin/svnadmin.c:433
msgid ""
"usage: svnadmin setlog REPOS_PATH -r REVISION FILE\n"
"\n"
@@ -10798,7 +13708,7 @@ msgstr ""
"ACHTUNG: Revisionseigenschaften sind nicht versioniert. Dieser Befehl\n"
"überschreibt also die vorherige Logmeldung endgültig.\n"
-#: ../svnadmin/main.c:449
+#: ../svnadmin/svnadmin.c:445
msgid ""
"usage: svnadmin setrevprop REPOS_PATH -r REVISION NAME FILE\n"
"\n"
@@ -10821,7 +13731,7 @@ msgstr ""
"ACHTUNG: Revisionseigenschaften sind nicht versioniert. Dieser Befehl\n"
"überschreibt also den vorherigen Wert der Eigenschaft.\n"
-#: ../svnadmin/main.c:460
+#: ../svnadmin/svnadmin.c:456
msgid ""
"usage: svnadmin setuuid REPOS_PATH [NEW_UUID]\n"
"\n"
@@ -10836,7 +13746,22 @@ msgstr ""
"UUID des Projektarchivs verwendet, andernfalls wird eine brandneue UUID\n"
"für das Projektarchiv erzeugt.\n"
-#: ../svnadmin/main.c:467
+#: ../svnadmin/svnadmin.c:463
+msgid ""
+"usage: svnadmin unlock REPOS_PATH LOCKED_PATH USERNAME TOKEN\n"
+"\n"
+"Unlock LOCKED_PATH (as USERNAME) after verifying that the token\n"
+"associated with the lock matches TOKEN. Use --bypass-hooks to avoid\n"
+"triggering the pre-unlock and post-unlock hook scripts.\n"
+msgstr ""
+"Aufruf: svnadmin unlock ARCHIV_PFAD SPERR_PFAD BENUTZER MARKE\n"
+"\n"
+"Entsperrt SPERR_PFAD (als BENUTZER) nach Überprüfung, ob die mit\n"
+"der Sperre gesetzte Sperrmarke mit MARKE übereinstimmt. Verwenden\n"
+"Sie »--bypass-hooks« um die Auslösung der Aktionen »pre-unlock« und\n"
+"»post-unlock« zu umgehen.\n"
+
+#: ../svnadmin/svnadmin.c:470
msgid ""
"usage: svnadmin upgrade REPOS_PATH\n"
"\n"
@@ -10851,9 +13776,9 @@ msgid ""
"integrity of the repository. It does not guarantee the most optimized\n"
"repository state as a dump and subsequent load would.\n"
msgstr ""
-"Aufruf: svnadmin upgrade AK_PFAD\n"
+"Aufruf: svnadmin upgrade ARCHIV_PFAD\n"
"\n"
-"Aktualisiert das unter AK_PFAD befindliche Projektarchiv auf die letzte\n"
+"Aktualisiert das unter ARCHIV_PFAD befindliche Projektarchiv auf die letzte\n"
"unterstützte Schema-Version.\n"
"\n"
"Diese Funktionalität wird als Hilfe für Projektarchiv-Administratoren\n"
@@ -10865,50 +13790,76 @@ msgstr ""
"Zustand des Projektarchivs wie ein »dump« mit anschließendem »load« dies\n"
"bewirken würde.\n"
-#: ../svnadmin/main.c:480
+#: ../svnadmin/svnadmin.c:483
msgid ""
"usage: svnadmin verify REPOS_PATH\n"
"\n"
-"Verifies the data stored in the repository.\n"
+"Verify the data stored in the repository.\n"
msgstr ""
"Aufruf: svnadmin verify ARCHIV_PFAD\n"
"\n"
"Überprüft die im Projektarchiv gespeicherten Daten.\n"
-#: ../svnadmin/main.c:539
+#: ../svnadmin/svnadmin.c:545
msgid "Invalid revision specifier"
msgstr "Ungültige Revision angegeben"
-#: ../svnadmin/main.c:543
+#: ../svnadmin/svnadmin.c:549
#, c-format
msgid "Revisions must not be greater than the youngest revision (%ld)"
msgstr "Revisionen dürfen nicht größer als die Endrevision (%ld) sein"
-#: ../svnadmin/main.c:630 ../svnadmin/main.c:885
+#: ../svnadmin/svnadmin.c:656
+#, c-format
+msgid "%swarning: The \"%s\" repository back-end is deprecated, consider using \"%s\" instead.\n"
+msgstr "%sWarnung: Das Dateisystemmodul für Projektarchive »%s« ist veraltet, verwenden Sie stattdessen »%s«.\n"
+
+#: ../svnadmin/svnadmin.c:696
+msgid "Repositories compatible with 1.0.x must use --fs-type=bdb"
+msgstr "Projektarchive, die mit 1.0.x kompatibel sind, müssen --fs-type=bdb verwenden"
+
+#: ../svnadmin/svnadmin.c:739 ../svnadmin/svnadmin.c:1011
+#: ../svnadmin/svnadmin.c:1192
msgid "First revision cannot be higher than second"
msgstr "Die erste Revision darf kann nicht größer als zweite sein"
-#: ../svnadmin/main.c:639
+#: ../svnadmin/svnadmin.c:748
#, c-format
msgid "Deltifying revision %ld..."
msgstr "Bilde Deltas für Revision %ld ..."
-#: ../svnadmin/main.c:643 ../svnadmin/main.c:694 ../svnadmin/main.c:710
+#: ../svnadmin/svnadmin.c:752 ../svnadmin/svnadmin.c:812
+#: ../svnadmin/svnadmin.c:827
#, c-format
msgid "done.\n"
msgstr "erledigt.\n"
-#: ../svnadmin/main.c:687
+#: ../svnadmin/svnadmin.c:793
+#, c-format
+msgid "* Verifying repository metadata ...\n"
+msgstr "* Überprüfe Metadaten des Projektarchivs ...\n"
+
+#: ../svnadmin/svnadmin.c:796
+#, c-format
+msgid "* Verifying metadata at revision %ld ...\n"
+msgstr "* Überprüfe Metadaten der Revision %ld ...\n"
+
+#: ../svnadmin/svnadmin.c:806
#, c-format
msgid "Packing revisions in shard %s..."
msgstr "Packe Revisionen in Fragment %s ..."
-#: ../svnadmin/main.c:703
+#: ../svnadmin/svnadmin.c:821
#, c-format
msgid "Packing revprops in shard %s..."
msgstr "Packe Revisionseigenschaften in Fragment %s ..."
-#: ../svnadmin/main.c:792
+#: ../svnadmin/svnadmin.c:898
+#, c-format
+msgid "<<< Skipped original revision %ld\n"
+msgstr "<<< Originalrevision %ld übersprungen\n"
+
+#: ../svnadmin/svnadmin.c:915
#, c-format
msgid ""
"Repository lock acquired.\n"
@@ -10917,8 +13868,7 @@ msgstr ""
"Exklusiven Zugriff auf das Projektarchiv erlangt\n"
"Bitte warten, die Wiederherstellung des Projektarchivs kann einige Zeit dauern ...\n"
-#: ../svnadmin/main.c:799
-#, c-format
+#: ../svnadmin/svnadmin.c:922
msgid ""
"Repository lock acquired.\n"
"Please wait; upgrading the repository may take some time...\n"
@@ -10926,7 +13876,11 @@ msgstr ""
"Exklusiven Zugriff auf das Projektarchiv erlangt\n"
"Bitte warten, die Aktualisierung des Projektarchivs kann einige Zeit dauern ...\n"
-#: ../svnadmin/main.c:908
+#: ../svnadmin/svnadmin.c:1072
+msgid "No program provided"
+msgstr "Kein Programm angegeben"
+
+#: ../svnadmin/svnadmin.c:1108
msgid ""
"general usage: svnadmin SUBCOMMAND REPOS_PATH [ARGS & OPTIONS ...]\n"
"Type 'svnadmin help <subcommand>' for help on a specific subcommand.\n"
@@ -10942,7 +13896,8 @@ msgstr ""
"\n"
"Verfügbare Unterbefehle:\n"
-#: ../svnadmin/main.c:915 ../svnlook/main.c:1993 ../svnserve/main.c:266
+#: ../svnadmin/svnadmin.c:1115 ../svnlook/svnlook.c:2226
+#: ../svnserve/svnserve.c:335
msgid ""
"The following repository back-end (FS) modules are available:\n"
"\n"
@@ -10950,7 +13905,20 @@ msgstr ""
"Die folgenden Dateisystemmodule für Projektarchive stehen zur Verfügung:\n"
"\n"
-#: ../svnadmin/main.c:1013 ../svnadmin/main.c:1517
+#: ../svnadmin/svnadmin.c:1144
+#, c-format
+msgid "Invalid revision number (%ld) specified"
+msgstr "Ungültige Revisionsnummer (%ld) angegeben"
+
+#: ../svnadmin/svnadmin.c:1154
+msgid "Non-numeric revision specified"
+msgstr "Nicht-numerische Revisionsnummer angegeben"
+
+#: ../svnadmin/svnadmin.c:1213
+msgid "Invalid property value found in dumpstream; consider repairing the source or using --bypass-prop-validation while loading."
+msgstr "Ungültiger Eigenschaftswert in Datenstrom gefunden; Versuchen Sie die Quelle zu reparieren oder geben Sie »--bypass-prop-validation« beim Laden an."
+
+#: ../svnadmin/svnadmin.c:1279 ../svnadmin/svnadmin.c:1911
msgid ""
"Failed to get exclusive repository access; perhaps another process\n"
"such as httpd, svnserve or svn has it open?"
@@ -10959,12 +13927,12 @@ msgstr ""
"Vielleicht hat noch ein anderer Prozess (httpd, svnserve, svn)\n"
"das Projektarchiv geöffnet?"
-#: ../svnadmin/main.c:1018 ../svnadmin/main.c:1522
+#: ../svnadmin/svnadmin.c:1284 ../svnadmin/svnadmin.c:1916
#, c-format
msgid "Waiting on repository lock; perhaps another process has it open?\n"
msgstr "Warte auf Freigabe des Projektarchivs; Vielleicht ist es durch einen anderen Prozess geöffnet?\n"
-#: ../svnadmin/main.c:1026
+#: ../svnadmin/svnadmin.c:1292
#, c-format
msgid ""
"\n"
@@ -10973,57 +13941,52 @@ msgstr ""
"\n"
"Wiederherstellung vollständig abgeschlossen.\n"
-#: ../svnadmin/main.c:1033
+#: ../svnadmin/svnadmin.c:1299
#, c-format
msgid "The latest repos revision is %ld.\n"
msgstr "Die neueste Revision des Projektarchivs ist %ld.\n"
-#: ../svnadmin/main.c:1142
+#: ../svnadmin/svnadmin.c:1414
#, c-format
msgid "Transaction '%s' removed.\n"
msgstr "Transaktion »%s« entfernt.\n"
-#: ../svnadmin/main.c:1211 ../svnadmin/main.c:1261
+#: ../svnadmin/svnadmin.c:1476 ../svnadmin/svnadmin.c:1521
#, c-format
msgid "Missing revision"
msgstr "Fehlende Revision"
-#: ../svnadmin/main.c:1214 ../svnadmin/main.c:1264
+#: ../svnadmin/svnadmin.c:1479 ../svnadmin/svnadmin.c:1524
#, c-format
msgid "Only one revision allowed"
msgstr "Nur eine Revision zulässig"
-#: ../svnadmin/main.c:1220
-#, c-format
-msgid "Exactly one property name and one file argument required"
-msgstr "Genau ein Eigenschaftsname und ein Dateiparameter erforderlich"
-
-#: ../svnadmin/main.c:1270
+#: ../svnadmin/svnadmin.c:1578
#, c-format
-msgid "Exactly one file argument required"
-msgstr "Genau ein Dateiparameter benötigt"
+msgid "--revision (-r) and --transaction (-t) are mutually exclusive"
+msgstr "--revision (-r) und --transaction (-t) schließen sich gegenseitig aus"
-#: ../svnadmin/main.c:1395 ../svnlook/main.c:2058
+#: ../svnadmin/svnadmin.c:1745 ../svnlook/svnlook.c:2289
#, c-format
msgid "UUID Token: %s\n"
msgstr "UUID-Marke: %s\n"
-#: ../svnadmin/main.c:1396 ../svnlook/main.c:2059
+#: ../svnadmin/svnadmin.c:1746 ../svnlook/svnlook.c:2290
#, c-format
msgid "Owner: %s\n"
msgstr "Eigentümer: %s\n"
-#: ../svnadmin/main.c:1397 ../svnlook/main.c:2060
+#: ../svnadmin/svnadmin.c:1747 ../svnlook/svnlook.c:2291
#, c-format
msgid "Created: %s\n"
msgstr "Erstellt: %s\n"
-#: ../svnadmin/main.c:1398 ../svnlook/main.c:2061
+#: ../svnadmin/svnadmin.c:1748 ../svnlook/svnlook.c:2292
#, c-format
msgid "Expires: %s\n"
msgstr "Läuft ab: %s\n"
-#: ../svnadmin/main.c:1400
+#: ../svnadmin/svnadmin.c:1750
#, c-format
msgid ""
"Comment (%i line):\n"
@@ -11042,29 +14005,34 @@ msgstr[1] ""
"%s\n"
"\n"
-#: ../svnadmin/main.c:1446
+#: ../svnadmin/svnadmin.c:1796
msgid "No paths to unlock provided"
msgstr "Keine Pfade zum Entsperren angegeben"
-#: ../svnadmin/main.c:1464
+#: ../svnadmin/svnadmin.c:1814
#, c-format
msgid "Path '%s' isn't locked.\n"
msgstr "Pfad »%s« ist nicht gesperrt.\n"
-#: ../svnadmin/main.c:1476
+#: ../svnadmin/svnadmin.c:1826
#, c-format
msgid "Removed lock on '%s'.\n"
msgstr "Sperre für »%s« entfernt.\n"
-#: ../svnadmin/main.c:1532
+#: ../svnadmin/svnadmin.c:1879
+#, c-format
+msgid "'%s' unlocked by user '%s'.\n"
+msgstr "»%s« entsperrt durch Benutzer »%s«.\n"
+
+#: ../svnadmin/svnadmin.c:1926
msgid "Upgrade of this repository's underlying versioned filesystem is not supported; consider dumping and loading the data elsewhere"
msgstr "Eine Aktualisierung des diesem Projektarchiv zugrundeliegenden versionierten Dateisystems wird nicht unterstützt; versuchen Sie stattdessen »dump« und laden Sie die Daten mit »load« anderswo"
-#: ../svnadmin/main.c:1539
+#: ../svnadmin/svnadmin.c:1933
msgid "Upgrade of this repository is not supported; consider dumping and loading the data elsewhere"
msgstr "Eine Aktualisierung dieses Projektarchivs wird nicht unterstützt; versuchen Sie stattdessen »dump« und laden Sie die Daten mit »load« anderswo"
-#: ../svnadmin/main.c:1545
+#: ../svnadmin/svnadmin.c:1939
#, c-format
msgid ""
"\n"
@@ -11073,16 +14041,35 @@ msgstr ""
"\n"
"Aktualisierung abgeschlossen.\n"
-#: ../svnadmin/main.c:1638
+#: ../svnadmin/svnadmin.c:2024 ../svnrdump/svnrdump.c:923
msgid "Multiple revision arguments encountered; try '-r N:M' instead of '-r N -r M'"
msgstr "Mehrere Revisionsparameter gefunden; Bitte »-r N:M« anstelle »-r N -r M« verwenden"
-#: ../svnadmin/main.c:1770
+#: ../svnadmin/svnadmin.c:2102
+#, c-format
+msgid "Cannot create pre-1.0-compatible repositories"
+msgstr "Kann keine Projektarchive erstellen, die mit Versionen älter als 1.0 kompatibel sind"
+
+#: ../svnadmin/svnadmin.c:2115
+#, c-format
+msgid "Cannot guarantee compatibility beyond the current running version (%s)"
+msgstr "Kann Kompatibilität für höhere Versionen als die momentan laufende nicht garantieren (%s)"
+
+#: ../svnadmin/svnadmin.c:2204
#, c-format
msgid "subcommand argument required\n"
msgstr "Unterbefehl benötigt einen Parameter\n"
-#: ../svnadmin/main.c:1843
+#: ../svnadmin/svnadmin.c:2239
+msgid "Repository argument required"
+msgstr "Projektarchiv Parameter erforderlich"
+
+#: ../svnadmin/svnadmin.c:2252
+#, c-format
+msgid "'%s' is a URL when it should be a local path"
+msgstr "»%s« ist eine URL obwohl es ein Pfad sein sollte"
+
+#: ../svnadmin/svnadmin.c:2283
#, c-format
msgid ""
"Subcommand '%s' doesn't accept option '%s'\n"
@@ -11091,84 +14078,105 @@ msgstr ""
"Unterbefehl »%s« akzeptiert die Option »%s« nicht\n"
"Geben Sie »svnadmin help %s« ein, um Hilfe zu erhalten.\n"
-#: ../svnadmin/main.c:1876
+#: ../svnadmin/svnadmin.c:2326
msgid "Try 'svnadmin help' for more info"
msgstr "Geben Sie »svnadmin help« für weitere Hilfe ein"
-#: ../svndumpfilter/main.c:345
+#: ../svndumpfilter/svndumpfilter.c:79
+#, c-format
+msgid "Can't open stdio file"
+msgstr "Kann Standardeingabe nicht öffnen"
+
+#: ../svndumpfilter/svndumpfilter.c:406
msgid "This is an empty revision for padding."
msgstr "Dies ist eine leere Revision zum Auffüllen"
-#: ../svndumpfilter/main.c:421
+#: ../svndumpfilter/svndumpfilter.c:489
#, c-format
msgid "Revision %ld committed as %ld.\n"
msgstr "Revision %ld als %ld übertragen.\n"
-#: ../svndumpfilter/main.c:444
+#: ../svndumpfilter/svndumpfilter.c:512
#, c-format
msgid "Revision %ld skipped.\n"
msgstr "Revision: »%ld« übersprungen\n"
-#: ../svndumpfilter/main.c:542
+#: ../svndumpfilter/svndumpfilter.c:608
#, c-format
msgid "Invalid copy source path '%s'"
msgstr "Ungültiger Quellpfad einer Kopie: »%s«"
-#: ../svndumpfilter/main.c:588
+#: ../svndumpfilter/svndumpfilter.c:649
+#, c-format
+msgid "Missing Node-action for path '%s'"
+msgstr "Fehlende Knotenaktion für Pfad »%s«"
+
+#: ../svndumpfilter/svndumpfilter.c:692
#, c-format
msgid "No valid copyfrom revision in filtered stream"
msgstr "Keine gültige Quellrevision im gefilterten Datenstrom"
-#: ../svndumpfilter/main.c:713
+#: ../svndumpfilter/svndumpfilter.c:817
#, c-format
msgid "Missing merge source path '%s'; try with --skip-missing-merge-sources"
msgstr "Fehlender Zusammenführungsquellpfad »%s«; versuchen Sie es mit --skip-missing-merge-sources"
-#: ../svndumpfilter/main.c:735
+#: ../svndumpfilter/svndumpfilter.c:839
#, c-format
msgid "No valid revision range 'start' in filtered stream"
msgstr "Kein gültiger Revisionsbereich »start« im gefilterten Datenstrom"
-#: ../svndumpfilter/main.c:742
+#: ../svndumpfilter/svndumpfilter.c:846
#, c-format
msgid "No valid revision range 'end' in filtered stream"
msgstr "Kein gültiger Revisionsbereich »end« im gefilterten Datenstrom"
-#: ../svndumpfilter/main.c:788
-msgid "Delta property block detected - not supported by svndumpfilter"
-msgstr "Delta Eigenschaftsblock erkannt - wird von svndumpfilter nicht unterstützt"
+#: ../svndumpfilter/svndumpfilter.c:892 ../svndumpfilter/svndumpfilter.c:923
+#, c-format
+msgid "Delta property block detected, but deltas are not enabled for node '%s' in original revision %ld"
+msgstr "Block mit Deltas für Eigenschaften entdeckt, Deltas sind aber für Knoten »%s« in originaler Revision %ld nicht aktiviert"
-#: ../svndumpfilter/main.c:924
+#: ../svndumpfilter/svndumpfilter.c:1056
msgid "Do not display filtering statistics."
msgstr "Filterstatistik nicht anzeigen."
-#: ../svndumpfilter/main.c:926
+#: ../svndumpfilter/svndumpfilter.c:1058
msgid "Treat the path prefixes as file glob patterns."
-msgstr ""
+msgstr "Pfadpräfix als Dateiplatzhalter behandeln."
-#: ../svndumpfilter/main.c:928
+#: ../svndumpfilter/svndumpfilter.c:1060
msgid "Remove revisions emptied by filtering."
msgstr "Durch das Filtern geleerte Revisionen entfernen."
-#: ../svndumpfilter/main.c:930
+#: ../svndumpfilter/svndumpfilter.c:1062
+msgid ""
+"Remove all empty revisions found in dumpstream\n"
+" except revision 0."
+msgstr ""
+"Entfernt alle im Dateiabzug gefundenen leeren Revisionen\n"
+" mit Ausnahme von Revision 0."
+
+#: ../svndumpfilter/svndumpfilter.c:1065
msgid "Renumber revisions left after filtering."
msgstr "Revisionen nach dem Filtern neu nummerieren."
-#: ../svndumpfilter/main.c:933
+#: ../svndumpfilter/svndumpfilter.c:1068
msgid "Skip missing merge sources."
msgstr "Fehlende Zusammenführungsquellen übersprungen."
-#: ../svndumpfilter/main.c:935
+#: ../svndumpfilter/svndumpfilter.c:1070
msgid "Don't filter revision properties."
msgstr "Revisionseigenschaften nicht filtern."
-#: ../svndumpfilter/main.c:937
-msgid "Pass contents of file ARG as additional args"
+#: ../svndumpfilter/svndumpfilter.c:1072
+msgid ""
+"Read additional prefixes, one per line, from\n"
+" file ARG."
msgstr ""
-"Inhalt der Datei PAR als zusätzliche Parameter\n"
-" übergeben"
+"Liest zusätzliche Prefixe, einen je Zeile, aus\n"
+" Datei PAR."
-#: ../svndumpfilter/main.c:948
+#: ../svndumpfilter/svndumpfilter.c:1084
msgid ""
"Filter out nodes with given prefixes from dumpstream.\n"
"usage: svndumpfilter exclude PATH_PREFIX...\n"
@@ -11176,7 +14184,7 @@ msgstr ""
"Knoten mit den angegebenen Präfixen aus dem Datenstrom ausfiltern.\n"
"Aufruf: svndumpfilter exclude PFAD_PRÄFIX ...\n"
-#: ../svndumpfilter/main.c:956
+#: ../svndumpfilter/svndumpfilter.c:1093
msgid ""
"Filter out nodes without given prefixes from dumpstream.\n"
"usage: svndumpfilter include PATH_PREFIX...\n"
@@ -11184,7 +14192,7 @@ msgstr ""
"Knoten, die nicht den angegebenen Präfixen entsprechen, aus dem Datenstrom ausfiltern.\n"
"Aufruf: svndumpfilter include PFAD_PRÄFIX ...\n"
-#: ../svndumpfilter/main.c:964
+#: ../svndumpfilter/svndumpfilter.c:1102
msgid ""
"Describe the usage of this program or its subcommands.\n"
"usage: svndumpfilter help [SUBCOMMAND...]\n"
@@ -11192,7 +14200,7 @@ msgstr ""
"Beschreibt die Anwendung dieses Programms und seiner Unterbefehle.\n"
"Aufruf: svndumpfilter help [UNTERBEFEHL...]\n"
-#: ../svndumpfilter/main.c:1047
+#: ../svndumpfilter/svndumpfilter.c:1178
msgid ""
"general usage: svndumpfilter SUBCOMMAND [ARGS & OPTIONS ...]\n"
"Type 'svndumpfilter help <subcommand>' for help on a specific subcommand.\n"
@@ -11207,47 +14215,47 @@ msgstr ""
"\n"
"Verfügbare Unterbefehle:\n"
-#: ../svndumpfilter/main.c:1103
-#, c-format
-msgid "Excluding (and dropping empty revisions for) prefixes:\n"
-msgstr "Präfixe ausschließen (und leere Revisionen verwerfen):\n"
-
-#: ../svndumpfilter/main.c:1105
-#, c-format
-msgid "Excluding prefixes:\n"
-msgstr "Präfixe ausschließen:\n"
-
-#: ../svndumpfilter/main.c:1107
-#, c-format
-msgid "Including (and dropping empty revisions for) prefixes:\n"
-msgstr "Präfixe einschließen (und leere Revisionen verwerfen):\n"
-
-#: ../svndumpfilter/main.c:1109
-#, c-format
-msgid "Including prefixes:\n"
-msgstr "Präfixe einschließen:\n"
-
-#: ../svndumpfilter/main.c:1116
+#: ../svndumpfilter/svndumpfilter.c:1236
#, c-format
msgid "Excluding (and dropping empty revisions for) prefix patterns:\n"
msgstr "Präfixmuster ausschließen (und leere Revisionen verwerfen):\n"
-#: ../svndumpfilter/main.c:1118
+#: ../svndumpfilter/svndumpfilter.c:1238
#, c-format
msgid "Excluding prefix patterns:\n"
msgstr "Präfixmuster ausschließen:\n"
-#: ../svndumpfilter/main.c:1120
+#: ../svndumpfilter/svndumpfilter.c:1241
#, c-format
msgid "Including (and dropping empty revisions for) prefix patterns:\n"
msgstr "Präfixmuster einschließen (und leere Revisionen verwerfen):\n"
-#: ../svndumpfilter/main.c:1122
+#: ../svndumpfilter/svndumpfilter.c:1243
#, c-format
msgid "Including prefix patterns:\n"
msgstr "Präfixmuster einschließen:\n"
-#: ../svndumpfilter/main.c:1150
+#: ../svndumpfilter/svndumpfilter.c:1251
+#, c-format
+msgid "Excluding (and dropping empty revisions for) prefixes:\n"
+msgstr "Präfixe ausschließen (und leere Revisionen verwerfen):\n"
+
+#: ../svndumpfilter/svndumpfilter.c:1253
+#, c-format
+msgid "Excluding prefixes:\n"
+msgstr "Präfixe ausschließen:\n"
+
+#: ../svndumpfilter/svndumpfilter.c:1256
+#, c-format
+msgid "Including (and dropping empty revisions for) prefixes:\n"
+msgstr "Präfixe einschließen (und leere Revisionen verwerfen):\n"
+
+#: ../svndumpfilter/svndumpfilter.c:1258
+#, c-format
+msgid "Including prefixes:\n"
+msgstr "Präfixe einschließen:\n"
+
+#: ../svndumpfilter/svndumpfilter.c:1286
#, c-format
msgid ""
"Dropped %d revision.\n"
@@ -11262,23 +14270,27 @@ msgstr[1] ""
"%d Revisionen verworfen.\n"
"\n"
-#: ../svndumpfilter/main.c:1158
+#: ../svndumpfilter/svndumpfilter.c:1294
msgid "Revisions renumbered as follows:\n"
msgstr "Revisionen folgendermaßen neu nummeriert:\n"
-#: ../svndumpfilter/main.c:1186
+#: ../svndumpfilter/svndumpfilter.c:1322
#, c-format
msgid " %ld => (dropped)\n"
msgstr " %ld => (verworfen)\n"
-#: ../svndumpfilter/main.c:1201
+#: ../svndumpfilter/svndumpfilter.c:1337
#, c-format
msgid "Dropped %d node:\n"
msgid_plural "Dropped %d nodes:\n"
msgstr[0] "%d Knoten verworfen:\n"
msgstr[1] "%d Knoten verworfen:\n"
-#: ../svndumpfilter/main.c:1470
+#: ../svndumpfilter/svndumpfilter.c:1506
+msgid "--drop-empty-revs cannot be used with --drop-all-empty-revs"
+msgstr "--drop-empty-revs« kann nicht mit --drop-all-empty-revs verwendet werden"
+
+#: ../svndumpfilter/svndumpfilter.c:1626
#, c-format
msgid ""
"\n"
@@ -11287,7 +14299,7 @@ msgstr ""
"\n"
"Fehler: keine Präfixe angegeben.\n"
-#: ../svndumpfilter/main.c:1501
+#: ../svndumpfilter/svndumpfilter.c:1657
#, c-format
msgid ""
"Subcommand '%s' doesn't accept option '%s'\n"
@@ -11296,77 +14308,67 @@ msgstr ""
"Unterbefehl »%s« akzeptiert die Option »%s« nicht\n"
"Geben Sie »svndumpfilter help %s« für Hilfe ein.\n"
-#: ../svndumpfilter/main.c:1519
+#: ../svndumpfilter/svndumpfilter.c:1675
msgid "Try 'svndumpfilter help' for more info"
msgstr "Versuchen Sie »svndumpfilter help« für weitere Informationen"
-#: ../svnlook/main.c:106
+#: ../svnlook/svnlook.c:117
msgid "show details for copies"
msgstr "Zeige Details für Kopien"
-#: ../svnlook/main.c:109
+#: ../svnlook/svnlook.c:120
msgid "print differences against the copy source"
msgstr "Gibt Unterschiede gegenüber der Quelle der Kopie aus"
-#: ../svnlook/main.c:112
+#: ../svnlook/svnlook.c:123
msgid "show full paths instead of indenting them"
msgstr "Zeige vollständige Pfade anstatt sie einzurücken"
-#: ../svnlook/main.c:118
+#: ../svnlook/svnlook.c:129
msgid "maximum number of history entries"
msgstr "Maximale Anzahl von Logeinträgen"
-#: ../svnlook/main.c:121
-msgid "do not print differences for added files"
-msgstr "Keine Unterschiede für hinzugefügte Dateien ausgeben"
-
-#: ../svnlook/main.c:127
+#: ../svnlook/svnlook.c:147
msgid "operate on single directory only"
msgstr "Nicht rekursiv hinabsteigen"
-#: ../svnlook/main.c:130
+#: ../svnlook/svnlook.c:150
msgid "specify revision number ARG"
msgstr "Revisionsnummer PAR angegeben"
-#: ../svnlook/main.c:133
+#: ../svnlook/svnlook.c:153
msgid "operate on a revision property (use with -r or -t)"
msgstr ""
"auf einer Revisionseigenschaft arbeiten (mit -r\n"
" oder -t verwenden)"
-#: ../svnlook/main.c:136
+#: ../svnlook/svnlook.c:156
msgid "show node revision ids for each path"
msgstr "gibt die IDs der Knotenrevisionen jedes Pfades aus"
-#: ../svnlook/main.c:139
-msgid "specify transaction name ARG"
-msgstr "Transaktionsname PAR angeben"
+#: ../svnlook/svnlook.c:159
+msgid "show path's inherited properties"
+msgstr "Gibt die geerbten Eigenschaften des Pfades aus"
-#: ../svnlook/main.c:142
+#: ../svnlook/svnlook.c:165
msgid "be verbose"
msgstr "ausführliche Meldungen"
-#: ../svnlook/main.c:151
-msgid ""
-"Default: '-u'. When Subversion is invoking an\n"
-" external diff program, ARG is simply passed along\n"
-" to the program. But when Subversion is using its\n"
-" default internal diff implementation, or when\n"
-" Subversion is displaying blame annotations, ARG\n"
-" could be any of the following:\n"
-" -u (--unified):\n"
-" Output 3 lines of unified context.\n"
-" -b (--ignore-space-change):\n"
-" Ignore changes in the amount of white space.\n"
-" -w (--ignore-all-space):\n"
-" Ignore all white space.\n"
-" --ignore-eol-style:\n"
-" Ignore changes in EOL style"
-msgstr ""
-"Vorgabe: »-u«. Wenn Subversion ein\n"
-" externes Vergleichsprogramm aufruft, wird PAR nur\n"
-" an das Programm weitergereicht. Wenn Subversion\n"
-" aber sein internes Vergleichsprogramm benutzt\n"
+#: ../svnlook/svnlook.c:174
+msgid ""
+"Specify differencing options for external diff or\n"
+" internal diff. Default: '-u'. Options are\n"
+" separated by spaces. Internal diff takes:\n"
+" -u, --unified: Show 3 lines of unified context\n"
+" -b, --ignore-space-change: Ignore changes in\n"
+" amount of white space\n"
+" -w, --ignore-all-space: Ignore all white space\n"
+" --ignore-eol-style: Ignore changes in EOL style\n"
+" -p, --show-c-function: Show C function name"
+msgstr ""
+"Gibt Optionen für ein externes Vergleichsprogramm oder die interne\n"
+" Vergleichsfunktion an. Vorgabe ist »-u«. Optionen sind\n"
+" durch Leerzeichen zu trennen. aber sein internes Vergleichsprogramm benutzt\n"
" oder Annotierungen anzeigt, kann PAR einen der\n"
" folgenden Werte annehmen:\n"
" -u (--unified):\n"
@@ -11377,9 +14379,11 @@ msgstr ""
" -w (--ignore-all-space):\n"
" Ignoriert sämtliche Leerzeichen.\n"
" --ignore-eol-style:\n"
-" Ignoriert Änderungen im EOL-Stil"
+" Ignoriert Änderungen im Zeilenendestil.\n"
+" -p (--show-c-function):\n"
+" Zeigt C-Funktionsname in Diff-Ausgabe."
-#: ../svnlook/main.c:189
+#: ../svnlook/svnlook.c:205
msgid ""
"usage: svnlook author REPOS_PATH\n"
"\n"
@@ -11389,7 +14393,7 @@ msgstr ""
"\n"
"Gibt den Autor aus.\n"
-#: ../svnlook/main.c:194
+#: ../svnlook/svnlook.c:210
msgid ""
"usage: svnlook cat REPOS_PATH FILE_PATH\n"
"\n"
@@ -11400,7 +14404,7 @@ msgstr ""
"Gibt den Inhalt einer Datei aus. Ein vorangestellter »/« im DATEI_PFAD ist\n"
"optional.\n"
-#: ../svnlook/main.c:199
+#: ../svnlook/svnlook.c:215
msgid ""
"usage: svnlook changed REPOS_PATH\n"
"\n"
@@ -11410,7 +14414,7 @@ msgstr ""
"\n"
"Gibt die geänderten Pfade aus.\n"
-#: ../svnlook/main.c:204
+#: ../svnlook/svnlook.c:220
msgid ""
"usage: svnlook date REPOS_PATH\n"
"\n"
@@ -11420,7 +14424,7 @@ msgstr ""
"\n"
"Gibt das Datum aus.\n"
-#: ../svnlook/main.c:209
+#: ../svnlook/svnlook.c:225
msgid ""
"usage: svnlook diff REPOS_PATH\n"
"\n"
@@ -11430,7 +14434,7 @@ msgstr ""
"\n"
"Gibt Unterschiede von geänderten Dateien oder Eigenschaften im GNU-Stil aus.\n"
-#: ../svnlook/main.c:215
+#: ../svnlook/svnlook.c:232
msgid ""
"usage: svnlook dirs-changed REPOS_PATH\n"
"\n"
@@ -11442,7 +14446,7 @@ msgstr ""
"Gibt diejenigen Pfade aus, die (durch Eigenschaftsmodifikationen) selbst\n"
"bzw. deren Dateien geändert wurden.\n"
-#: ../svnlook/main.c:221
+#: ../svnlook/svnlook.c:238
msgid ""
"usage: svnlook filesize REPOS_PATH PATH_IN_REPOS\n"
"\n"
@@ -11454,7 +14458,7 @@ msgstr ""
"Gibt die Größe (in Bytes) der in PFAD_IN_ARCHIV befindlichen Datei\n"
"aus, wie sie im Projektarchiv vorliegt.\n"
-#: ../svnlook/main.c:227
+#: ../svnlook/svnlook.c:244
msgid ""
"usage: svnlook help [SUBCOMMAND...]\n"
"\n"
@@ -11464,7 +14468,7 @@ msgstr ""
"\n"
"Beschreibt die Anwendung dieses Programms und seiner Unterbefehle.\n"
-#: ../svnlook/main.c:232
+#: ../svnlook/svnlook.c:249
msgid ""
"usage: svnlook history REPOS_PATH [PATH_IN_REPOS]\n"
"\n"
@@ -11476,7 +14480,7 @@ msgstr ""
"Gibt Informationen über die Historie eines Pfades im Projektarchiv aus (oder\n"
"über das Basisverzeichnis, falls kein Pfad angegeben wurde.)\n"
-#: ../svnlook/main.c:238
+#: ../svnlook/svnlook.c:255
msgid ""
"usage: svnlook info REPOS_PATH\n"
"\n"
@@ -11486,7 +14490,7 @@ msgstr ""
"\n"
"Gibt den Autor, das Datum, die Größe der Logmeldung und die Logmeldung aus.\n"
-#: ../svnlook/main.c:243
+#: ../svnlook/svnlook.c:260
msgid ""
"usage: svnlook lock REPOS_PATH PATH_IN_REPOS\n"
"\n"
@@ -11496,7 +14500,7 @@ msgstr ""
"\n"
"Wenn eine Sperre für einen Pfad im Projektarchiv existiert, beschreibe diese.\n"
-#: ../svnlook/main.c:248
+#: ../svnlook/svnlook.c:265
msgid ""
"usage: svnlook log REPOS_PATH\n"
"\n"
@@ -11506,7 +14510,7 @@ msgstr ""
"\n"
"Gibt die Logmeldung aus.\n"
-#: ../svnlook/main.c:253
+#: ../svnlook/svnlook.c:270
msgid ""
"usage: 1. svnlook propget REPOS_PATH PROPNAME PATH_IN_REPOS\n"
" 2. svnlook propget --revprop REPOS_PATH PROPNAME\n"
@@ -11520,7 +14524,7 @@ msgstr ""
"Gibt den Rohwert einer Eigenschaft eines Pfades im Projektarchiv aus.\n"
"Mit --revprop wird der Rohwert einer Revisionseigenschaft ausgegeben.\n"
-#: ../svnlook/main.c:262
+#: ../svnlook/svnlook.c:279
msgid ""
"usage: 1. svnlook proplist REPOS_PATH PATH_IN_REPOS\n"
" 2. svnlook proplist --revprop REPOS_PATH\n"
@@ -11536,7 +14540,7 @@ msgstr ""
"Mit --revprop werden Revisionseigenschaften ausgegeben.\n"
"Mit -v werden auch die Eigenschaftswerte ausgegeben.\n"
-#: ../svnlook/main.c:272
+#: ../svnlook/svnlook.c:290
msgid ""
"usage: svnlook tree REPOS_PATH [PATH_IN_REPOS]\n"
"\n"
@@ -11548,7 +14552,7 @@ msgstr ""
"Gibt den Baum beginnend bei PFAD_IN_PROJ aus (falls angegeben, sonst an der\n"
"Basis des Baumes), wobei optional die IDs der Knotenrevisionen ausgegeben werden.\n"
-#: ../svnlook/main.c:278
+#: ../svnlook/svnlook.c:296
msgid ""
"usage: svnlook uuid REPOS_PATH\n"
"\n"
@@ -11558,7 +14562,7 @@ msgstr ""
"\n"
"Gibt die UUID des Projektarchivs aus.\n"
-#: ../svnlook/main.c:283
+#: ../svnlook/svnlook.c:301
msgid ""
"usage: svnlook youngest REPOS_PATH\n"
"\n"
@@ -11568,28 +14572,28 @@ msgstr ""
"\n"
"Gibt die neueste Revisionsnummer aus.\n"
-#: ../svnlook/main.c:934
+#: ../svnlook/svnlook.c:861
#, c-format
msgid "Copied: %s (from rev %ld, %s)\n"
msgstr "Kopiert: %s (von Rev %ld, %s)\n"
-#: ../svnlook/main.c:1002
+#: ../svnlook/svnlook.c:929
msgid "Added"
msgstr "Hinzugefügt"
-#: ../svnlook/main.c:1003
+#: ../svnlook/svnlook.c:930
msgid "Deleted"
msgstr "Gelöscht"
-#: ../svnlook/main.c:1004
+#: ../svnlook/svnlook.c:931
msgid "Modified"
msgstr "Geändert"
-#: ../svnlook/main.c:1005
+#: ../svnlook/svnlook.c:932
msgid "Index"
msgstr "Index"
-#: ../svnlook/main.c:1017
+#: ../svnlook/svnlook.c:943
msgid ""
"(Binary files differ)\n"
"\n"
@@ -11597,26 +14601,30 @@ msgstr ""
"(Binärdateien sind unterschiedlich)\n"
"\n"
-#: ../svnlook/main.c:1227
+#: ../svnlook/svnlook.c:1222
msgid "unknown"
msgstr "unbekannt"
-#: ../svnlook/main.c:1374 ../svnlook/main.c:1480 ../svnlook/main.c:1509
+#: ../svnlook/svnlook.c:1279
#, c-format
msgid "Transaction '%s' is not based on a revision; how odd"
msgstr "Transaktion »%s« ist nicht von einer Revision abgeleitet, wie eigenartig"
-#: ../svnlook/main.c:1404
+#: ../svnlook/svnlook.c:1422
#, c-format
msgid "'%s' is a URL, probably should be a path"
msgstr "»%s« ist eine URL, sollte vermutlich ein Pfad sein"
-#: ../svnlook/main.c:1427 ../svnlook/main.c:1450
+#: ../svnlook/svnlook.c:1445 ../svnlook/svnlook.c:1468
#, c-format
msgid "Path '%s' is not a file"
msgstr "Pfad »%s« ist keine Datei"
-#: ../svnlook/main.c:1593
+#: ../svnlook/svnlook.c:1604
+msgid "History item limit reached"
+msgstr "Beschränkung für Anzahl der Verlaufselemente erreicht"
+
+#: ../svnlook/svnlook.c:1623
#, c-format
msgid ""
"REVISION PATH <ID>\n"
@@ -11625,7 +14633,7 @@ msgstr ""
"REVISION PFAD <ID>\n"
"-------- ---------\n"
-#: ../svnlook/main.c:1598
+#: ../svnlook/svnlook.c:1628
#, c-format
msgid ""
"REVISION PATH\n"
@@ -11634,27 +14642,36 @@ msgstr ""
"REVISION PFAD\n"
"-------- ----\n"
-#: ../svnlook/main.c:1647
+#: ../svnlook/svnlook.c:1700
#, c-format
msgid "Property '%s' not found on revision %ld"
msgstr "Eigenschaft »%s« wurde in Revision %ld nicht gefunden"
-#: ../svnlook/main.c:1654
+#: ../svnlook/svnlook.c:1709
+#, c-format
+msgid "Property '%s' not found on path '%s' or inherited from a parent in revision %ld"
+msgstr "Eigenschaft »%s« wurde im Pfad »%s« in Revision %ld nicht gefunden und nicht vom übergeordneten Element geerbt"
+
+#: ../svnlook/svnlook.c:1715
#, c-format
msgid "Property '%s' not found on path '%s' in revision %ld"
-msgstr "Eigenschaft »%s« wurde in Pfad »%s« in Revision %ld nicht gefunden"
+msgstr "Eigenschaft »%s« wurde im Pfad »%s« in Revision %ld nicht gefunden"
-#: ../svnlook/main.c:1659
+#: ../svnlook/svnlook.c:1723
#, c-format
-msgid "Property '%s' not found on path '%s' in transaction %s"
-msgstr "Eigenschaft »%s« wurde in Pfad »%s« in Transaktion %s nicht gefunden"
+msgid "Property '%s' not found on path '%s' or inherited from a parent in transaction %s"
+msgstr "Eigenschaft »%s« wurde im Pfad »%s« in Transaktion %s nicht gefunden und nicht vom übergeordneten Element geerbt"
-#: ../svnlook/main.c:1905 ../svnlook/main.c:1970 ../svnlook/main.c:2137
+#: ../svnlook/svnlook.c:1729
#, c-format
+msgid "Property '%s' not found on path '%s' in transaction %s"
+msgstr "Eigenschaft »%s« wurde im Pfad »%s« in Transaktion %s nicht gefunden"
+
+#: ../svnlook/svnlook.c:2064
msgid "Missing repository path argument"
msgstr "Fehlende Option für Pfad des Projektarchivs"
-#: ../svnlook/main.c:1983
+#: ../svnlook/svnlook.c:2216
msgid ""
"general usage: svnlook SUBCOMMAND REPOS_PATH [ARGS & OPTIONS ...]\n"
"Note: any subcommand which takes the '--revision' and '--transaction'\n"
@@ -11676,11 +14693,7 @@ msgstr ""
"\n"
"Verfügbare Unterbefehle:\n"
-#: ../svnlook/main.c:2039
-msgid "Missing path argument"
-msgstr "Fehlender Pfad Parameter"
-
-#: ../svnlook/main.c:2063
+#: ../svnlook/svnlook.c:2294
#, c-format
msgid ""
"Comment (%i line):\n"
@@ -11695,41 +14708,50 @@ msgstr[1] ""
"Kommentar (%i Zeilen):\n"
"%s\n"
-#: ../svnlook/main.c:2111
+#: ../svnlook/svnlook.c:2346
#, c-format
msgid "Missing propname argument"
msgstr "Fehlender PROPNAME Parameter"
-#: ../svnlook/main.c:2112
+#: ../svnlook/svnlook.c:2347
#, c-format
msgid "Missing propname and repository path arguments"
msgstr "Eigenschaftsname und Pfad im Projektarchiv nicht angegeben"
-#: ../svnlook/main.c:2118
+#: ../svnlook/svnlook.c:2353
msgid "Missing propname or repository path argument"
msgstr "Eigenschaftsname oder Pfad im Projektarchiv nicht angegeben"
-#: ../svnlook/main.c:2277
+#: ../svnlook/svnlook.c:2517
msgid "Invalid revision number supplied"
msgstr "Ungültige Revisionsnummer angegeben"
-#: ../svnlook/main.c:2369
+#: ../svnlook/svnlook.c:2629
msgid "The '--transaction' (-t) and '--revision' (-r) arguments cannot co-exist"
msgstr ""
"Die Parameter »--transaction« (-t) und »--revision« (-r) können nicht\n"
"gleichzeitig angegeben werden"
-#: ../svnlook/main.c:2451
+#: ../svnlook/svnlook.c:2636
+msgid "Cannot use the '--show-inherited-props' option with the '--revprop' option"
+msgstr "Die Option »--show-inherited-props« kann nicht zusammen mit der Option »--revprop« verwendet werden"
+
+#: ../svnlook/svnlook.c:2695
+#, c-format
+msgid "Try 'svnadmin verify' instead.\n"
+msgstr "Versuchen Sie stattdessen »svnadmin verify«.\n"
+
+#: ../svnlook/svnlook.c:2729
#, c-format
msgid "Repository argument required\n"
msgstr "Projektarchiv Parameter erforderlich\n"
-#: ../svnlook/main.c:2460
+#: ../svnlook/svnlook.c:2738
#, c-format
msgid "'%s' is a URL when it should be a path\n"
msgstr "»%s« ist eine URL obwohl es ein Pfad sein sollte\n"
-#: ../svnlook/main.c:2512
+#: ../svnlook/svnlook.c:2790
#, c-format
msgid ""
"Subcommand '%s' doesn't accept option '%s'\n"
@@ -11738,51 +14760,134 @@ msgstr ""
"Unterbefehl »%s« akzeptiert die Option »%s« nicht\n"
"Geben Sie »svnlook help %s« ein, um Hilfe zu erhalten.\n"
-#: ../svnlook/main.c:2555
+#: ../svnlook/svnlook.c:2833
msgid "Try 'svnlook help' for more info"
msgstr "Versuchen Sie »svnlook help« für weitere Informationen"
-#: ../svnrdump/load_editor.c:97 ../svnsync/main.c:351
-msgid "Target server does not support atomic revision property edits; consider upgrading it to 1.7 or using an external locking program"
-msgstr ""
-
-#: ../svnrdump/load_editor.c:106 ../svnsync/main.c:360
-#, c-format
-msgid "Can't get local hostname"
-msgstr "Kann den lokalen Hostnamen nicht bekommen"
-
-#: ../svnrdump/load_editor.c:133 ../svnsync/main.c:396
+#: ../svnmucc/svnmucc.c:927
+msgid ""
+"Subversion multiple URL command client\n"
+"usage: svnmucc ACTION...\n"
+"\n"
+" Perform one or more Subversion repository URL-based ACTIONs, committing\n"
+" the result as a (single) new revision.\n"
+"\n"
+"Actions:\n"
+" cp REV SRC-URL DST-URL : copy SRC-URL@REV to DST-URL\n"
+" mkdir URL : create new directory URL\n"
+" mv SRC-URL DST-URL : move SRC-URL to DST-URL\n"
+" rm URL : delete URL\n"
+" put SRC-FILE URL : add or modify file URL with contents copied from\n"
+" SRC-FILE (use \"-\" to read from standard input)\n"
+" propset NAME VALUE URL : set property NAME on URL to VALUE\n"
+" propsetf NAME FILE URL : set property NAME on URL to value read from FILE\n"
+" propdel NAME URL : delete property NAME from URL\n"
+"\n"
+"Valid options:\n"
+" -h, -? [--help] : display this text\n"
+" -m [--message] ARG : use ARG as a log message\n"
+" -F [--file] ARG : read log message from file ARG\n"
+" -u [--username] ARG : commit the changes as username ARG\n"
+" -p [--password] ARG : use ARG as the password\n"
+" -U [--root-url] ARG : interpret all action URLs relative to ARG\n"
+" -r [--revision] ARG : use revision ARG as baseline for changes\n"
+" --with-revprop ARG : set revision property in the following format:\n"
+" NAME[=VALUE]\n"
+" --non-interactive : do no interactive prompting (default is to\n"
+" prompt only if standard input is a terminal)\n"
+" --force-interactive : do interactive prompting even if standard\n"
+" input is not a terminal\n"
+" --trust-server-cert : accept SSL server certificates from unknown\n"
+" certificate authorities without prompting (but\n"
+" only with '--non-interactive')\n"
+" -X [--extra-args] ARG : append arguments from file ARG (one per line;\n"
+" use \"-\" to read from standard input)\n"
+" --config-dir ARG : use ARG to override the config directory\n"
+" --config-option ARG : use ARG to override a configuration option\n"
+" --no-auth-cache : do not cache authentication tokens\n"
+" --version : print version information\n"
+msgstr ""
+"Subversion Multi-URL-Kommando Client\n"
+"Aufruf: svnmucc AKTION...\n"
+"\n"
+" Führt eine oder mehrere AKTIONen auf URLs von Subversion Projektarchiven aus,\n"
+" mit Ãœbertragung des Ergebnisses als eine neue Revision.\n"
+"\n"
+"Aktionen:\n"
+" cp REV QUELL-URL ZIEL-URL : kopiert QUELL-URL@REV nach ZIEL-URL\n"
+" mkdir URL : erzeugt neues Verzeichnis URL\n"
+" mv QUELL-URL ZIEL-URL : verschiebt QUELL-URL nach ZIEL-URL\n"
+" rm URL : löscht URL\n"
+" put QUELL-DATEI URL : legt Inhalt von QUELL-DATEI in URL ab, ggf. als Hinzufügung\n"
+" (Die Angabe von \"-\" liest Inhalt aus der Standardeingabe)\n"
+" propset NAME WERT URL : setzt Eigenschaft NAME der URL auf WERT\n"
+" propsetf NAME DATEI URL : setzt Eigenschaft NAME der URL, liest Wert aus DATEI\n"
+" propdel NAME URL : löscht Eigenschaft NAME von URL\n"
+"\n"
+"Gültige Optionen:\n"
+" -h, -? [--help] : zeigt diesen Text an\n"
+" -m [--message] PAR : verwendet PAR als Logmeldung\n"
+" -F [--file] PAR : liest Logmeldung aus Datei PAR\n"
+" -u [--username] PAR : überträgt Änderungen mit Benutzername PAR\n"
+" -p [--password] PAR : verwendet PAR als Kennwort\n"
+" -U [--root-url] PAR : interpretiert alle URLs für Aktionen relativ zu PAR\n"
+" -r [--revision] PAR : verwendet Revision PAR als Basis für Änderungen\n"
+" --with-revprop PAR : setzt Revisionseigenschaft im folgenden Format:\n"
+" NAME[=WERT]\n"
+" --non-interactive : unterdrückt interaktive Nachfragen (Vorgabe ist nur\n"
+" nachfragen, wenn Standardeingabe ein Terminal ist)\n"
+" --force-interactive : erzwingt interaktives Nachfragen, auch wenn\n"
+" Standardeingabe kein Terminal ist)\n"
+" --trust-server-cert : akzeptiert SSL-Serverzertifikate von unbekannten\n"
+" Zertifizierungsstellen ohne Nachfrage (aber nur mit\n"
+" »--non-interactive«)\n"
+" -X [--extra-args] PAR : liest weitere Arguments aus Datei PAR (zeilenweise;\n"
+" : Die Angabe von \"-\" liest von der Standardeingabe)\n"
+" --config-dir PAR : verwendet ARG als Konfigurationsverzeichnis\n"
+" --config-option PAR : verwendet ARG als Konfigurationsoption\n"
+" --no-auth-cache : speichert Anmeldeinformationen nicht zwischen\n"
+" --version : gibt Versionsinformationen aus\n"
+
+#: ../svnmucc/svnmucc.c:1003
+msgid "--message (-m), --file (-F), and --with-revprop=svn:log are mutually exclusive"
+msgstr "--message (-m), --file (-F), und --with-revprop=svn:log schließen sich gegenseitig aus"
+
+#: ../svnrdump/load_editor.c:382 ../svnsync/svnsync.c:327
#, c-format
msgid "Failed to get lock on destination repos, currently held by '%s'\n"
msgstr ""
"Konnte Sperre für Zielprojektarchiv nicht erhalten, die zurzeit von\n"
"»%s« gehalten wird\n"
-#: ../svnrdump/load_editor.c:167 ../svnsync/main.c:430
-#, c-format
-msgid "Couldn't get lock on destination repos after %d attempts"
-msgstr "Konnte Sperre für Zielprojektarchiv nach %d Versuchen nicht erhalten"
-
-#: ../svnrdump/load_editor.c:684
-msgid "\"svnrdump load\"'s lock was stolen; can't remove it"
-msgstr ""
+#: ../svnrdump/load_editor.c:526
+msgid "Target server does not support atomic revision property edits; consider upgrading it to 1.7."
+msgstr "Zielserver unterstützt keine atomaren Änderungen von Revisionseigenschaften; Verwenden Sie dort 1.7"
-#: ../svnrdump/svnrdump.c:58
+#: ../svnrdump/svnrdump.c:101
msgid ""
"usage: svnrdump dump URL [-r LOWER[:UPPER]]\n"
"\n"
-"Dump revisions LOWER to UPPER of repository at remote URL to stdout in a 'dumpfile' portable format.\n"
-"If only LOWER is given, dump that one revision.\n"
+"Dump revisions LOWER to UPPER of repository at remote URL to stdout\n"
+"in a 'dumpfile' portable format. If only LOWER is given, dump that\n"
+"one revision.\n"
msgstr ""
+"Aufruf: svnrdump dump URL [-r VON[:BIS]]\n"
+"\n"
+"Gibt einen Abzug der Revisionen VON:BIS eines Projektarchivs an der entfernten URL\n"
+"in einem portablen »Dump«-Format auf die Standardausgabe aus. Falls nur VON\n"
+" angegeben wurde, wird nur diese Revision ausgegeben.\n"
-#: ../svnrdump/svnrdump.c:64
+#: ../svnrdump/svnrdump.c:107
msgid ""
"usage: svnrdump load URL\n"
"\n"
"Load a 'dumpfile' given on stdin to a repository at remote URL.\n"
msgstr ""
+"Aufruf: svnrdump load URL\n"
+"\n"
+"Liest einen Datenstrom im »Dump«-Format von der Standardeingabe in ein Projektarchive an entfertner URL.\n"
-#: ../svnrdump/svnrdump.c:69
+#: ../svnrdump/svnrdump.c:111
msgid ""
"usage: svnrdump help [SUBCOMMAND...]\n"
"\n"
@@ -11792,140 +14897,245 @@ msgstr ""
"\n"
"Beschreibt die Anwendung dieses Programms und seiner Unterbefehle.\n"
-#: ../svnrdump/svnrdump.c:88 ../svnserve/main.c:218 ../svnversion/main.c:133
+#: ../svnrdump/svnrdump.c:124
+msgid "dump incrementally"
+msgstr "Inkrementell ausgeben"
+
+#: ../svnrdump/svnrdump.c:142 ../svnserve/svnserve.c:281
+#: ../svnversion/svnversion.c:139
msgid "display this help"
msgstr "Hilfe anzeigen"
-#: ../svnrdump/svnrdump.c:91 ../svnsync/main.c:196
-msgid ""
-"set user configuration option in the format:\n"
-" FILE:SECTION:OPTION=[VALUE]\n"
-" For example:\n"
-" servers:global:http-library=serf"
-msgstr ""
-"Setzt Benutzerkonfigurationsoption im Format:\n"
-" DATEI:ABSCHNITT:OPTION=[WERT]\n"
-" Zum Beispiel:\n"
-" servers:global:http-library=serf"
-
-#: ../svnrdump/svnrdump.c:405
+#: ../svnrdump/svnrdump.c:731
msgid ""
"general usage: svnrdump SUBCOMMAND URL [-r LOWER[:UPPER]]\n"
"Type 'svnrdump help <subcommand>' for help on a specific subcommand.\n"
+"Type 'svnrdump --version' to see the program version and RA modules.\n"
"\n"
"Available subcommands:\n"
msgstr ""
-"Aufruf: svnrdump UNTERBEFEHL URL [-r [ VON[:BIS]]\n"
+"Aufruf: svnrdump UNTERBEFEHL URL [-r VON[:BIS]]\n"
"Geben Sie »svnrdump help <Unterbefehl>« ein, um Hilfe zu einem\n"
-" Unterbefehl zu erhalten.\n"
+"Unterbefehl zu erhalten.\n"
+"Geben Sie »svnrdump --version« ein, um die Programmversion und die\n"
+"Zugriffsmodule zu sehen.\n"
"\n"
"Verfügbare Unterbefehle:\n"
-#: ../svnrdump/svnrdump.c:585
+#: ../svnrdump/svnrdump.c:775 ../svnrdump/svnrdump.c:809
+msgid "Unsupported revision specifier used; use only integer values or 'HEAD'"
+msgstr "Nicht unterstützte Angabe für Revision; verwenden Sie nur ganze Zahlen oder »HEAD«"
+
+#: ../svnrdump/svnrdump.c:783 ../svnrdump/svnrdump.c:817
#, c-format
-msgid "Revision %ld does not exist.\n"
-msgstr "Revision %ld existiert nicht.\n"
+msgid "Revision '%ld' does not exist"
+msgstr "Revision »%ld« existiert nicht"
-#: ../svnrdump/svnrdump.c:592
+#: ../svnrdump/svnrdump.c:827
+msgid "LOWER revision cannot be greater than UPPER revision; consider reversing your revision range"
+msgstr "Revision VON kann nicht größer als Revision BIS sein; Ändern Sie ggf. die Reihenfolge der Angabe"
+
+#: ../svnrdump/svnrdump.c:1072
#, c-format
-msgid "LOWER cannot be greater than UPPER.\n"
+msgid ""
+"Subcommand '%s' doesn't accept option '%s'\n"
+"Type 'svnrdump help %s' for usage.\n"
msgstr ""
+"Unterbefehl »%s« akzeptiert die Option »%s« nicht\n"
+"Geben Sie »svnrdump help %s« für Hilfe ein.\n"
+
+#: ../svnserve/cyrus_auth.c:119
+msgid "Could not initialize the SASL library"
+msgstr "Konnte die SASL-Bibliothek nicht initialisieren"
-#: ../svnserve/cyrus_auth.c:264
+#: ../svnserve/cyrus_auth.c:260
#, c-format
msgid "Can't get hostname"
msgstr "Kann den Hostnamen nicht erhalten"
-#: ../svnserve/cyrus_auth.c:329
+#: ../svnserve/cyrus_auth.c:325
msgid "Could not obtain the list of SASL mechanisms"
msgstr "Konnte die Liste der SASL-Mechanismen nicht erhalten"
-#: ../svnserve/cyrus_auth.c:371
+#: ../svnserve/cyrus_auth.c:367
msgid "Couldn't obtain the authenticated username"
msgstr "Kann den angemeldeten Benutzername nicht erhalten"
-#: ../svnserve/main.c:151
+#: ../svnserve/serve.c:2058
+msgid "Path is not a string"
+msgstr "Pfad ist keine Zeichenkette"
+
+#: ../svnserve/serve.c:2215
+msgid "Log revprop entry not a string"
+msgstr "Log-Revisionseigenschaftseintrag ist keine Zeichenkette"
+
+#: ../svnserve/serve.c:2221
+#, c-format
+msgid "Unknown revprop word '%s' in log command"
+msgstr "Unbekanntes Revisionseigenschaftswort »%s« in Log-Kommando"
+
+#: ../svnserve/serve.c:2237
+msgid "Log path entry not a string"
+msgstr "Logpfadeintrag ist keine Zeichenkette"
+
+#: ../svnserve/svnserve.c:162
msgid "daemon mode"
msgstr "Daemonmodus"
-#: ../svnserve/main.c:152
+#: ../svnserve/svnserve.c:163
msgid "inetd mode"
msgstr "Inetd-Modus"
-#: ../svnserve/main.c:153
+#: ../svnserve/svnserve.c:164
msgid "tunnel mode"
msgstr "Tunnelmodus"
-#: ../svnserve/main.c:154
+#: ../svnserve/svnserve.c:165
msgid "listen-once mode (useful for debugging)"
msgstr "»listen-once«-Modus (nützlich zum Debuggen)"
-#: ../svnserve/main.c:157
+#: ../svnserve/svnserve.c:168
msgid "Windows service mode (Service Control Manager)"
msgstr "Windows-Service-Modus (Service Control Manager)"
-#: ../svnserve/main.c:159
+#: ../svnserve/svnserve.c:170
msgid "root of directory to serve"
msgstr "Basis des bereitzustellenden Verzeichnisses"
-#: ../svnserve/main.c:161
+#: ../svnserve/svnserve.c:172
msgid "force read only, overriding repository config file"
msgstr ""
"Erzwinge Schreibschutz. Setze Einstellung in der\n"
"Projektarchivkonfiguration außer Kraft."
-#: ../svnserve/main.c:163
+#: ../svnserve/svnserve.c:174
msgid "read configuration from file ARG"
msgstr "Konfiguration aus Datei PAR lesen"
-# CHECKME
-#: ../svnserve/main.c:166
+#: ../svnserve/svnserve.c:177
msgid ""
-"listen port\n"
+"listen port. The default port is 3690.\n"
" [mode: daemon, service, listen-once]"
msgstr ""
-"abzuhörender Port\n"
+"abzuhörender Port. Die Vorgabe ist 3690.\n"
" [Modus: daemon, service, listen-once]"
-#: ../svnserve/main.c:170
+#: ../svnserve/svnserve.c:181
msgid ""
-"listen port\n"
+"listen port. The default port is 3690.\n"
" [mode: daemon, listen-once]"
msgstr ""
-"abzuhörender Port\n"
+"abzuhörender Port. Die Vorgabe ist 3690.\n"
" [Modus: daemon, listen-once]"
-#: ../svnserve/main.c:176
+#: ../svnserve/svnserve.c:187
msgid ""
"listen hostname or IP address\n"
+" By default svnserve listens on all addresses.\n"
" [mode: daemon, service, listen-once]"
msgstr ""
"abzuhörender Rechnername oder IP-Adresse\n"
+" Als Vorgabe hört svnserve auf allen Adressen.\n"
" [Modus: daemon, service, listen-once]"
-#: ../svnserve/main.c:180
+#: ../svnserve/svnserve.c:193
msgid ""
"listen hostname or IP address\n"
+" By default svnserve listens on all addresses.\n"
" [mode: daemon, listen-once]"
msgstr ""
"abzuhörender Rechnername oder IP-Adresse\n"
+" Als Vorgabe hört svnserve auf allen Adressen.\n"
" [Modus: daemon, listen-once]"
-#: ../svnserve/main.c:185
+#: ../svnserve/svnserve.c:200
msgid ""
"prefer IPv6 when resolving the listen hostname\n"
" [IPv4 is preferred by default. Using IPv4 and IPv6\n"
" at the same time is not supported in daemon mode.\n"
" Use inetd mode or tunnel mode if you need this.]"
msgstr ""
+"Bevorzuge IPv6 beim Auflösen des abzuhörenden Rechnernamens\n"
+" [IPv4 ist als bevorzugt vorgegeben. Gleichzeitige\n"
+" Verwendung von IPv4 und IPv6 ist im Daemon-Modus\n"
+" nicht unterstützt. Verwenden Sie bei Bedarf inetd\n"
+" oder den Tunnel-Modus."
+
+#: ../svnserve/svnserve.c:208
+msgid ""
+"compression level to use for network transmissions\n"
+" [0 .. no compression, 5 .. default, \n"
+" 9 .. maximum compression]"
+msgstr ""
+"Kompressionslevel für Netzwerkübertragungen\n"
+" [0 .. keine Kompression, 5 .. Vorgabe, \n"
+" 9 .. maximale Kompression]"
+
+#: ../svnserve/svnserve.c:214
+#, fuzzy
+msgid ""
+"size of the extra in-memory cache in MB used to\n"
+" minimize redundant operations.\n"
+" Default is 16.\n"
+" [used for FSFS repositories only]"
+msgstr ""
+"Größe des extra Zwischenspeichers im RAM in MB zur\n"
+" Minimierung redundanter Operationen. Vorgabe: 16.\n"
+" [nur für FSFS-Projektarchive verwendet]"
+
+#: ../svnserve/svnserve.c:222
+msgid ""
+"enable or disable caching of deltas between older\n"
+" revisions.\n"
+" Default is no.\n"
+" [used for FSFS repositories only]"
+msgstr ""
+"Aktiviert oder deaktiviert die Zwischenspeicherung von\n"
+" Deltas zwischen älteren Revisionen.\n"
+" Vorgabe ist »no«.\n"
+" [nur für FSFS-Projektarchive verwendet]"
+
+#: ../svnserve/svnserve.c:230
+msgid ""
+"enable or disable caching of file contents\n"
+" Default is yes.\n"
+" [used for FSFS repositories only]"
+msgstr ""
+"Aktiviert oder deaktiviert die Zwischenspeicherung von Dateiinhalten\n"
+" Vorgabe ist »yes«.\n"
+" [nur für FSFS-Projektarchive verwendet]"
+
+#: ../svnserve/svnserve.c:236
+msgid ""
+"enable or disable caching of revision properties.\n"
+" Consult the documentation before activating this.\n"
+" Default is no.\n"
+" [used for FSFS repositories only]"
+msgstr ""
+"Aktiviert oder deaktiviert die Zwischenspeicherung von Revisionseigenschaften.\n"
+" Schlagen Sie in der Dokumentation nach, bevor Sie dies aktivieren.\n"
+" Vorgabe ist »no«.\n"
+" [nur für FSFS-Projektarchive verwendet]"
+
+#: ../svnserve/svnserve.c:244
+msgid ""
+"Optimize network handling based on the assumption\n"
+" that most clients are connected with a bitrate of\n"
+" ARG Mbit/s.\n"
+" Default is 0 (optimizations disabled)."
+msgstr ""
+"Optimiert Datendurchsatz basierend auf der Annahme, dass\n"
+" die meisten Clients mit einer Bitrate von \n"
+" PAR Mbit/s verbunden sind.\n"
+" Vorgabe 0 (keine Optimierung)."
#. ### Making the assumption here that WIN32 never has fork and so
#. * ### this option never exists when --service exists.
-#: ../svnserve/main.c:195
+#: ../svnserve/svnserve.c:254
msgid "use threads instead of fork [mode: daemon]"
msgstr "Verwende Threads anstelle von »fork« [Modus: daemon]"
-#: ../svnserve/main.c:199
+#: ../svnserve/svnserve.c:258
msgid ""
"run in foreground (useful for debugging)\n"
" [mode: daemon]"
@@ -11933,11 +15143,19 @@ msgstr ""
"Im Vordergrund starten (nützlich zum Debuggen)\n"
" [Modus: daemon]"
-#: ../svnserve/main.c:203
+#: ../svnserve/svnserve.c:262
+msgid ""
+"handle one connection at a time in the parent process\n"
+" (useful for debugging)"
+msgstr ""
+"Bearbeitet im Elternprozess nur eine eingegende Verbindung gleichzeitig\n"
+" (nützlich zum Debuggen)"
+
+#: ../svnserve/svnserve.c:266
msgid "svnserve log file"
msgstr "Protokolldatei von svnserve"
-#: ../svnserve/main.c:206
+#: ../svnserve/svnserve.c:269
msgid ""
"write server process ID to file ARG\n"
" [mode: daemon, listen-once, service]"
@@ -11945,7 +15163,7 @@ msgstr ""
"Schreibe Server-Prozess-ID in Datei PAR\n"
" [Modus: daemon, listen-once, service]"
-#: ../svnserve/main.c:210
+#: ../svnserve/svnserve.c:273
msgid ""
"write server process ID to file ARG\n"
" [mode: daemon, listen-once]"
@@ -11953,7 +15171,7 @@ msgstr ""
"Schreibe Server-Prozess-ID in Datei PAR\n"
" [Modus: daemon, listen-once]"
-#: ../svnserve/main.c:215
+#: ../svnserve/svnserve.c:278
msgid ""
"tunnel username (default is current uid's name)\n"
" [mode: tunnel]"
@@ -11961,12 +15179,20 @@ msgstr ""
"Tunnel-Benutzername (Vorgabe ist der Name zur aktuellen UID)\n"
" [Modus: tunnel]"
-#: ../svnserve/main.c:231
+#: ../svnserve/svnserve.c:283
+msgid ""
+"virtual host mode (look for repo in directory\n"
+" of provided hostname)"
+msgstr ""
+"Virtual-Host-Modus (Sucht nach Projektarchiv dem Verzeichnis\n"
+" das dem übertragenen Hostnamen entspricht)"
+
+#: ../svnserve/svnserve.c:300
#, c-format
msgid "Type '%s --help' for usage.\n"
msgstr "Geben Sie »%s --help« für weitere Hilfe ein.\n"
-#: ../svnserve/main.c:241
+#: ../svnserve/svnserve.c:310
msgid ""
"usage: svnserve [-d | -i | -t | -X | --service] [options]\n"
"\n"
@@ -11976,7 +15202,7 @@ msgstr ""
"\n"
"Gültige Optionen:\n"
-#: ../svnserve/main.c:247
+#: ../svnserve/svnserve.c:316
msgid ""
"usage: svnserve [-d | -i | -t | -X] [options]\n"
"\n"
@@ -11986,7 +15212,7 @@ msgstr ""
"\n"
"Gültige Optionen:\n"
-#: ../svnserve/main.c:275
+#: ../svnserve/svnserve.c:344
msgid ""
"\n"
"Cyrus SASL authentication is available.\n"
@@ -11994,86 +15220,78 @@ msgstr ""
"\n"
"Cyrus-SASL-Authentifizierung ist verfügbar.\n"
-#: ../svnserve/main.c:487
+#: ../svnserve/svnserve.c:616
#, c-format
msgid "Invalid port '%s'"
msgstr "Ungültiger Port »%s«"
-#: ../svnserve/main.c:528
+#: ../svnserve/svnserve.c:657
#, c-format
msgid "svnserve: Root path '%s' does not exist or is not a directory.\n"
msgstr "svnserve: Wurzelpfad »%s« existiert nicht oder ist kein Verzeichnis.\n"
-#: ../svnserve/main.c:585
+#: ../svnserve/svnserve.c:770
msgid "You must specify exactly one of -d, -i, -t, --service or -X.\n"
msgstr "Sie müssen genau einen der Parameter -d, -i, -t, --service oder -X angeben.\n"
-#: ../svnserve/main.c:588
+#: ../svnserve/svnserve.c:773
msgid "You must specify exactly one of -d, -i, -t or -X.\n"
msgstr "Sie müssen genau einen der Parameter -d, -i, -t oder -X angeben.\n"
-#: ../svnserve/main.c:613
+#: ../svnserve/svnserve.c:782
+msgid "You may only specify one of -T or --single-thread\n"
+msgstr "Sie dürfen nur einen der Parameter -T und --single-thread angeben.\n"
+
+#: ../svnserve/svnserve.c:810
#, c-format
msgid "Option --tunnel-user is only valid in tunnel mode.\n"
msgstr "Die Option --tunnel-user ist nur im Tunnelmodus zulässig.\n"
-#: ../svnserve/main.c:678
+#: ../svnserve/svnserve.c:829
+#, c-format
+msgid "Can't open stdout"
+msgstr "Kann Standardausgabe nicht öffnen"
+
+#: ../svnserve/svnserve.c:883
#, c-format
msgid "svnserve: The --service flag is only valid if the process is started by the Service Control Manager.\n"
msgstr "svnserve: Die Option --service ist nur gültig, wenn der Prozess durch den Service Control Manager gestartet wurde.\n"
-#: ../svnserve/main.c:728
+#: ../svnserve/svnserve.c:933
#, c-format
msgid "Can't get address info"
msgstr "Kann Adressinformation nicht ermitteln"
-#: ../svnserve/main.c:742
+#: ../svnserve/svnserve.c:947
#, c-format
msgid "Can't create server socket"
-msgstr "Kann Serververbindung nicht erzeugen"
+msgstr "Kann Server-Socket nicht erzeugen"
-#: ../svnserve/main.c:753
+#: ../svnserve/svnserve.c:958
#, c-format
msgid "Can't bind server socket"
-msgstr "Kann Serververbindung nicht binden"
+msgstr "Kann Server-Socket nicht anbinden"
-#: ../svnserve/main.c:831
+#: ../svnserve/svnserve.c:1056
#, c-format
msgid "Can't accept client connection"
msgstr "Kann Clientverbindung nicht annehmen"
-#: ../svnserve/main.c:907
+#: ../svnserve/svnserve.c:1137
#, c-format
msgid "Can't create threadattr"
msgstr "Kann »Thread« Attribut nicht erzeugen"
-#: ../svnserve/main.c:915
+#: ../svnserve/svnserve.c:1145
#, c-format
msgid "Can't set detached state"
msgstr "Kann nicht in den gelösten Status wechseln"
-#: ../svnserve/main.c:928
+#: ../svnserve/svnserve.c:1158
#, c-format
msgid "Can't create thread"
msgstr "Kann Thread nicht erzeugen"
-#: ../svnserve/serve.c:1857
-msgid "Path is not a string"
-msgstr "Pfad ist keine Zeichenkette"
-
-#: ../svnserve/serve.c:2011
-msgid "Log revprop entry not a string"
-msgstr "Log-Revisionseigenschaftseintrag ist keine Zeichenkette"
-
-#: ../svnserve/serve.c:2018
-#, c-format
-msgid "Unknown revprop word '%s' in log command"
-msgstr "Unbekanntes Revisionseigenschaftswort »%s« in Log-Kommando"
-
-#: ../svnserve/serve.c:2034
-msgid "Log path entry not a string"
-msgstr "Logpfadeintrag ist keine Zeichenkette"
-
#: ../svnserve/winservice.c:346
#, c-format
msgid "Failed to create winservice_start_event"
@@ -12094,8 +15312,7 @@ msgstr "Konnte nicht mit dem Service Control Manager verbinden"
msgid "The service failed to start; an internal error occurred while starting the service"
msgstr "Der Dienst konnte nicht gestartet werden; ein interner Fehler trat beim Starten des Dienstes auf"
-#: ../svnsync/main.c:85
-#, fuzzy
+#: ../svnsync/svnsync.c:92
msgid ""
"usage: svnsync initialize DEST_URL SOURCE_URL\n"
"\n"
@@ -12125,19 +15342,21 @@ msgstr ""
"Bereitet ein Zielprojektarchiv auf die Synchronisation mit einem\n"
"anderen Projektarchiv vor.\n"
"\n"
-"Die Ziel-URL muss auf die Basis eines leeren Projektarchivs ohne\n"
-"übertragene Revisionen zeigen. Das Zielprojektarchiv muss Änderungen\n"
-"an Revisionseigenschaften zulassen.\n"
-"\n"
"Falls die Quell-URL nicht die Wurzel eines Projektarchivs ist, wird nur\n"
"der angegebene Teil des Projektarchivs synchronisiert.\n"
"\n"
-"Übertragungen in das oder Eigenschaftsänderungen im Zielprojektarchiv\n"
+"Die Ziel-URL muss auf die Basis eines Projektarchivs zeigen, das Änderungen an Revisionseigenschaften zulässt. Allgemein sollte das \n"
+"Zielprojektarchiv keine übertragenen Revisionen enthalten. Verwenden Sie --allow-non-empty um diese Einschränkung zu umgehen. In diesem\n"
+"Fall nimmt svnsync an, dass alle schon im Zielprojektarchiv vorhandenen\n"
+"Revisionen ihre jeweiligen Gegenstücke in der Quelle exakt wiedergeben.\n"
+"(Dies ist z.B. nützlich, wenn die Kopie eines Projektarchivs als Spiegel dieses Projektarchivs konfiguriert werden soll.)\n"
+"\n"
+"Übertragungen oder Eigenschaftsänderungen im Zielprojektarchiv\n"
"sollten ausschließlich mit »svnsync« vorgenommen werden.\n"
"Anders ausgedrückt stellt das Zielprojektarchiv einen Spiegel des\n"
"Quellprojektarchivs dar, auf den nur lesend zugegriffen werden darf.\n"
-#: ../svnsync/main.c:110
+#: ../svnsync/svnsync.c:118
msgid ""
"usage: svnsync synchronize DEST_URL [SOURCE_URL]\n"
"\n"
@@ -12150,8 +15369,18 @@ msgid ""
"if untrusted users/administrators may have write access to the\n"
"DEST_URL repository.\n"
msgstr ""
+"Aufruf: svnsync synchronize ZIEL_URL [QUELL_URL]\n"
+"\n"
+"Überträgt alle für das Zielprojektarchiv ausstehenden Revisionen\n"
+"aus der Quelle, mit der die Synchronisation vorbereitet wurde.\n"
+"\n"
+"Falls QUELL_URL angegeben ist, wird dies als Quellprojektarchiv\n"
+"verwendet, egal welche Quelle im Zielprojektarchiv konfiguriert wurde.\n"
+"Die Angabe von QUELL_URL ist ratsam, falls nicht vertrauenswürdige\n"
+"Benutzer oder Administratoren Schreibzugriff auf ZIEL_URL haben.\n"
+"\n"
-#: ../svnsync/main.c:122
+#: ../svnsync/svnsync.c:131
msgid ""
"usage:\n"
"\n"
@@ -12172,9 +15401,30 @@ msgid ""
"\n"
"Form 2 is deprecated syntax, equivalent to specifying \"-rREV[:REV2]\".\n"
msgstr ""
+"Aufruf:\n"
+"\n"
+" 1. svnsync copy-revprops ZIEL_URL [QUELL_URL]\n"
+" 2. svnsync copy-revprops ZIEL_URL PAR1[:PAR2]\n"
+"\n"
+"Kopiert Revisionseigenschaften eines angegebenen Bereichs\n"
+"von Revisionen in ein Zielprojektarchiv, aus der Quelle mit der\n"
+"dieses für die Synchronisierung vorbereitet wurde. Wenn der\n"
+"Revisionsbereich nicht angegeben wurde, werden alle im\n"
+"Revisionen im Projektarchiv ZIEL_URL übertragen.\n"
+"Beachten Sie, dass die Revision »HEAD« die neueste Revision\n"
+"in ZIEL_URL bezeichnet, nicht notwendigerweise die neueste in\n"
+"QUELL_URL.\n"
+"\n"
+"Falls QUELL_URL angegeben ist, wird dies als Quellprojektarchiv\n"
+"verwendet, egal welche Quelle im Zielprojektarchiv konfiguriert wurde.\n"
+"Die Angabe von QUELL_URL ist ratsam, falls nicht vertrauenswürdige\n"
+"Benutzer oder Administratoren Schreibzugriff auf ZIEL_URL haben.\n"
+"\n"
+"Die Angabe des Revisionsbereichs in der zweiten Form ist veraltet\n"
+"und ist gleichbedeutend mit der Angabe der Option »-r PAR1[:PAR2]«\n"
# CHECKME: s/destination/source/?
-#: ../svnsync/main.c:142
+#: ../svnsync/svnsync.c:152
msgid ""
"usage: svnsync info DEST_URL\n"
"\n"
@@ -12186,7 +15436,7 @@ msgstr ""
"Gibt Informationen über das Zielprojektarchiv der Synchronisation aus,\n"
"das sich unter ZIEL_URL befindet.\n"
-#: ../svnsync/main.c:148
+#: ../svnsync/svnsync.c:158
msgid ""
"usage: svnsync help [SUBCOMMAND...]\n"
"\n"
@@ -12196,23 +15446,27 @@ msgstr ""
"\n"
"Beschreibt die Anwendung dieses Programms und seiner Unterbefehle.\n"
-#: ../svnsync/main.c:158
+#: ../svnsync/svnsync.c:168
msgid "print as little as possible"
msgstr "So wenig wie möglich ausgeben"
-#: ../svnsync/main.c:160
+#: ../svnsync/svnsync.c:170
msgid ""
"operate on revision ARG (or range ARG1:ARG2)\n"
" A revision argument can be one of:\n"
" NUMBER revision number\n"
" 'HEAD' latest in repository"
msgstr ""
+"Auf Revision PAR arbeiten (oder Bereich PAR1:PAR2)\n"
+" Ein Revisionsargument kann sein:\n"
+" ZAHL Revisionsnummer\n"
+" »HEAD« neueste im Projektarchiv"
-#: ../svnsync/main.c:168
+#: ../svnsync/svnsync.c:178
msgid "allow a non-empty destination repository"
-msgstr ""
+msgstr "erlaubt nicht-leeres Zielprojektarchiv"
-#: ../svnsync/main.c:174
+#: ../svnsync/svnsync.c:190
msgid ""
"specify a username ARG (deprecated;\n"
" see --source-username and --sync-username)"
@@ -12220,7 +15474,7 @@ msgstr ""
"gibt einen Benutzernamen PAR an (veraltet;\n"
" siehe --source-username und --sync-username)"
-#: ../svnsync/main.c:178
+#: ../svnsync/svnsync.c:194
msgid ""
"specify a password ARG (deprecated;\n"
" see --source-password and --sync-password)"
@@ -12228,148 +15482,168 @@ msgstr ""
"gibt ein Passwort PAR an (veraltet;\n"
" siehe --source-password und --sync-password)"
-#: ../svnsync/main.c:182
-msgid ""
-"accept unknown SSL server certificates without\n"
-" prompting (but only with '--non-interactive')"
-msgstr ""
-"akzeptiere unbekannte SSL-Server-Zertifikate ohne\n"
-" Nachfrage (aber nur mit »--non-interactive«)"
-
-#: ../svnsync/main.c:186
+#: ../svnsync/svnsync.c:204
msgid "connect to source repository with username ARG"
msgstr "verbindet mit dem Quellprojektarchiv mit dem Benutzernamen PAR"
-#: ../svnsync/main.c:188
+#: ../svnsync/svnsync.c:206
msgid "connect to source repository with password ARG"
msgstr "verbindet mit dem Quellprojektarchiv mit dem Passwort PAR"
# FIXME: s/sync/synced/, option sync-username
-#: ../svnsync/main.c:190
+#: ../svnsync/svnsync.c:208
msgid "connect to sync repository with username ARG"
msgstr "verbindet mit synchronisiertem Projektarchiv mit Benutzernamen PAR"
-#: ../svnsync/main.c:192
+#: ../svnsync/svnsync.c:210
msgid "connect to sync repository with password ARG"
msgstr "verbindet mit synchronisiertem Projektarchiv mit Passwort PAR"
-#: ../svnsync/main.c:204
+#: ../svnsync/svnsync.c:222
+msgid ""
+"convert translatable properties from encoding ARG\n"
+" to UTF-8. If not specified, then properties are\n"
+" presumed to be encoded in UTF-8."
+msgstr ""
+"konvertiert übersetzbare Eigenschaften vom Kodierung PAR\n"
+" nach UTF-8. Wenn nicht angegeben, werden die\n"
+" Eigenschaften als in UTF-8 kodiert angenommen."
+
+#: ../svnsync/svnsync.c:228
msgid ""
-"Disable built-in locking. Use of this option can\n"
+"Disable built-in locking. Use of this option can\n"
" corrupt the mirror unless you ensure that no other\n"
" instance of svnsync is running concurrently."
msgstr ""
+"schaltet eingebauten Sperrmechanismus aus. Die Verwendung dieser Option\n"
+" kann Spiegelprojektarchive beschädigen, falls nicht sichergestellt ist,\n"
+" dass keine andere Instanz von svnsync gleichzeitig läuft."
-#: ../svnsync/main.c:488
-msgid "svnsync's lock was stolen; can't remove it"
+#: ../svnsync/svnsync.c:234
+msgid ""
+"Steal locks as necessary. Use, with caution,\n"
+" if your mirror repository contains stale locks\n"
+" and is not being concurrently accessed by another\n"
+" svnsync instance."
msgstr ""
+"entfernt Sperren wenn nötig. Zu verwenden, mit Vorsicht,\n"
+" wenn das Spiegelprojektarchiv nicht mehr notwendige Sperren enthält\n"
+" und nicht gleichzeitig von einer anderen svnsync-Instanz verwendet wird."
+
+#: ../svnsync/svnsync.c:357
+msgid "Target server does not support atomic revision property edits; consider upgrading it to 1.7 or using an external locking program"
+msgstr "Zielserver unterstützt keine atomaren Änderungen von Revisionseigenschaften; Verwenden Sie entweder 1.7 oder ein externes Programm zum Sperren."
-#: ../svnsync/main.c:525
+#: ../svnsync/svnsync.c:371
+#, c-format
+msgid "Stole lock previously held by '%s'\n"
+msgstr "Zuvor von »%s« gehaltene Sperre gestohlen\n"
+
+#: ../svnsync/svnsync.c:460
#, c-format
msgid "Session is rooted at '%s' but the repos root is '%s'"
msgstr "Basis der Sitzung ist »%s«, aber die Basis des Projektarchivs ist »%s«"
-#: ../svnsync/main.c:667
+#: ../svnsync/svnsync.c:602
#, c-format
msgid "Copied properties for revision %ld (%s* properties skipped).\n"
msgstr "Kopierte Eigenschaften für Revision %ld (%s* Eigenschaften übergangen).\n"
-#: ../svnsync/main.c:672
+#: ../svnsync/svnsync.c:607
#, c-format
msgid "Copied properties for revision %ld.\n"
msgstr "Eigenschaften für Revision %ld kopiert.\n"
-#: ../svnsync/main.c:688
+#: ../svnsync/svnsync.c:623
#, c-format
msgid "NOTE: Normalized %s* properties to LF line endings (%d rev-props, %d node-props).\n"
-msgstr ""
+msgstr "HINWEIS: %s* Eigenschaften nach LF-Zeilenenden normalisiert (%d Revisionseigenschaften, %d Knoteneigenschaften).\n"
-#: ../svnsync/main.c:810
+#: ../svnsync/svnsync.c:753
msgid "Destination repository already contains revision history; consider using --allow-non-empty if the repository's revisions are known to mirror their respective revisions in the source repository"
-msgstr ""
+msgstr "Das Zielprojektarchiv enthält schon eine Revisionsgeschichte. Sie können es mit »--allow-non-empty« versuchen, falls die Revisionen dieses Projektarchivs denen des Quellprojektarchivs genau entsprechen."
-# CHECKME
-#: ../svnsync/main.c:819
+#: ../svnsync/svnsync.c:762
#, c-format
msgid "Destination repository is already synchronizing from '%s'"
msgstr "Das Zielprojektarchiv synchronisiert bereits von »%s«"
-#: ../svnsync/main.c:854
+#: ../svnsync/svnsync.c:797
msgid "Destination repository has more revisions than source repository"
msgstr "Zielprojektarchiv hat mehr Revisionen als Quellprojektarchiv"
-#: ../svnsync/main.c:918 ../svnsync/main.c:921 ../svnsync/main.c:1425
-#: ../svnsync/main.c:1432 ../svnsync/main.c:1667 ../svnsync/main.c:1670
-#: ../svnsync/main.c:1712
+#: ../svnsync/svnsync.c:862 ../svnsync/svnsync.c:865 ../svnsync/svnsync.c:1518
+#: ../svnsync/svnsync.c:1525 ../svnsync/svnsync.c:1762
+#: ../svnsync/svnsync.c:1765 ../svnsync/svnsync.c:1809
#, c-format
msgid "Path '%s' is not a URL"
msgstr "Pfad »%s« ist keine URL"
-#: ../svnsync/main.c:947
+#: ../svnsync/svnsync.c:892
#, c-format
msgid "Committed revision %ld.\n"
msgstr "Revision %ld übertragen.\n"
-#: ../svnsync/main.c:990
+#: ../svnsync/svnsync.c:935
msgid "Destination repository has not been initialized"
msgstr "Zielprojektarchiv wurde noch nicht initialisiert"
-#: ../svnsync/main.c:1208
+#: ../svnsync/svnsync.c:1301
#, c-format
-msgid "Commit created rev %ld but should have created %ld"
-msgstr "Ãœbertragung erzeugte Revision %ld, sollte aber %ld erzeugen"
+msgid "Commit created r%ld but should have created r%ld"
+msgstr "Ãœbertragung erzeugte Revision r%ld, sollte aber r%ld erzeugen"
-#: ../svnsync/main.c:1322
+#: ../svnsync/svnsync.c:1416
#, c-format
msgid "Revision being currently copied (%ld), last merged revision (%ld), and destination HEAD (%ld) are inconsistent; have you committed to the destination without using svnsync?"
msgstr "Die aktuell kopierte Revision (%ld), zuletzt zusammengeführte Revision (%ld) und Ziel-HEAD (%ld) sind inkonsistent. Haben Sie in das Ziel ohne Verwendung von svnsync übertragen?"
-#: ../svnsync/main.c:1360
+#: ../svnsync/svnsync.c:1453
#, c-format
msgid "Destination HEAD (%ld) is not the last merged revision (%ld); have you committed to the destination without using svnsync?"
msgstr "Ziel-HEAD (%ld) ist nicht die zuletzt zusammengeführte Revision (%ld). Haben Sie in das Ziel ohne Verwendung von svnsync übertragen?"
-#: ../svnsync/main.c:1482 ../svnsync/main.c:1487
+#: ../svnsync/svnsync.c:1576 ../svnsync/svnsync.c:1581
#, c-format
msgid "Cannot copy revprops for a revision (%ld) that has not been synchronized yet"
msgstr "Kann keine Revisionseigenschaften für eine Revision (%ld) kopieren, die noch nicht synchronisiert wurde"
-#: ../svnsync/main.c:1550 ../svnsync/main.c:1570
+#: ../svnsync/svnsync.c:1645 ../svnsync/svnsync.c:1665
#, c-format
msgid "Invalid revision number (%ld)"
msgstr "Ungültige Revisionsnummer (%ld)"
-#: ../svnsync/main.c:1620
+#: ../svnsync/svnsync.c:1715
msgid "Cannot specify revisions via both command-line arguments and the --revision (-r) option"
-msgstr ""
+msgstr "Revisionen dürfen nicht gleichzeitig durch Argumente in der Kommandozeile und die Option »--revision« (»-r«) angegeben werden"
-#: ../svnsync/main.c:1628 ../svnsync/main.c:1961
+#: ../svnsync/svnsync.c:1723 ../svnsync/svnsync.c:2066
#, c-format
msgid "Invalid revision range '%s' provided"
msgstr "Ungültiger Revisionsbereich »%s« angegeben"
-#: ../svnsync/main.c:1724
+#: ../svnsync/svnsync.c:1822
#, c-format
msgid "Repository '%s' is not initialized for synchronization"
msgstr "Das Projektarchiv »%s« ist für die Synchronisation nicht initialisiert"
#. Print the info.
-#: ../svnsync/main.c:1733
+#: ../svnsync/svnsync.c:1828
#, c-format
msgid "Source URL: %s\n"
msgstr "Quell-URL: %s\n"
-#: ../svnsync/main.c:1735
+#: ../svnsync/svnsync.c:1830
#, c-format
msgid "Source Repository UUID: %s\n"
msgstr "UUID des Quellprojektarchivs: %s\n"
-#: ../svnsync/main.c:1738
+#: ../svnsync/svnsync.c:1833
#, c-format
msgid "Last Merged Revision: %s\n"
msgstr "Letzte zusammengeführte Revision: %s\n"
-#: ../svnsync/main.c:1755
+#: ../svnsync/svnsync.c:1850
msgid ""
"general usage: svnsync SUBCOMMAND DEST_URL [ARGS & OPTIONS ...]\n"
"Type 'svnsync help <subcommand>' for help on a specific subcommand.\n"
@@ -12385,11 +15659,16 @@ msgstr ""
"\n"
"Verfügbare Unterbefehle:\n"
-#: ../svnsync/main.c:1995
+#: ../svnsync/svnsync.c:2114
msgid "Cannot use --username or --password with any of --source-username, --source-password, --sync-username, or --sync-password.\n"
msgstr "Man kann nicht --username oder --password mit einem von --source-username, --source-password, --sync-username oder --sync-password verwenden.\n"
-#: ../svnsync/main.c:2085
+# TODO: Duplicated message!!!!
+#: ../svnsync/svnsync.c:2138
+msgid "--disable-locking and --steal-lock are mutually exclusive"
+msgstr "--disable-locking und --steal-lock schließen sich gegenseitig aus"
+
+#: ../svnsync/svnsync.c:2214
#, c-format
msgid ""
"Subcommand '%s' doesn't accept option '%s'\n"
@@ -12398,33 +15677,33 @@ msgstr ""
"Unterbefehl »%s« akzeptiert die Option »%s« nicht\n"
"Geben Sie »svnsync help %s« für Hilfe ein.\n"
-#: ../svnsync/main.c:2167
+#: ../svnsync/svnsync.c:2297
msgid "Try 'svnsync help' for more info"
msgstr "Versuchen Sie »svnsync help« für weitere Informationen"
-#: ../svnversion/main.c:45
+#: ../svnversion/svnversion.c:50
#, c-format
msgid "Type 'svnversion --help' for usage.\n"
msgstr "Geben Sie »svnversion --help« für weitere Hilfe ein.\n"
-#: ../svnversion/main.c:56
+#: ../svnversion/svnversion.c:61
#, c-format
msgid ""
"usage: svnversion [OPTIONS] [WC_PATH [TRAIL_URL]]\n"
"\n"
-" Produce a compact 'version number' for the working copy path\n"
+" Produce a compact version identifier for the working copy path\n"
" WC_PATH. TRAIL_URL is the trailing portion of the URL used to\n"
" determine if WC_PATH itself is switched (detection of switches\n"
-" within WC_PATH does not rely on TRAIL_URL). The version number\n"
+" within WC_PATH does not rely on TRAIL_URL). The version identifier\n"
" is written to standard output. For example:\n"
"\n"
" $ svnversion . /repos/svn/trunk\n"
" 4168\n"
"\n"
-" The version number will be a single number if the working\n"
+" The version identifier will be a single number if the working\n"
" copy is single revision, unmodified, not switched and with\n"
-" an URL that matches the TRAIL_URL argument. If the working\n"
-" copy is unusual the version number will be more complex:\n"
+" a URL that matches the TRAIL_URL argument. If the working\n"
+" copy is unusual the version identifier will be more complex:\n"
"\n"
" 4123:4168 mixed revision working copy\n"
" 4168M modified working copy\n"
@@ -12432,8 +15711,10 @@ msgid ""
" 4123P partial working copy, from a sparse checkout\n"
" 4123:4168MS mixed revision, modified, switched working copy\n"
"\n"
-" If invoked on a directory that is not a working copy, an\n"
-" exported directory say, the program will output 'exported'.\n"
+" If WC_PATH is an unversioned path, the program will output\n"
+" 'Unversioned directory' or 'Unversioned file'. If WC_PATH is\n"
+" an added or copied or moved path, the program will output\n"
+" 'Uncommitted local addition, copy or move'.\n"
"\n"
" If invoked without arguments WC_PATH will be the current directory.\n"
"\n"
@@ -12445,929 +15726,69 @@ msgstr ""
" Arbeitskopie. ANGEH_URL ist der angehängte Teil der URL, welcher\n"
" benutzt wird, um festzustellen, ob AK_PFAD selbst umgestellt wurde\n"
" (die Erkennung von Umstellungen selbst innerhalb von AK_PFAD hängt\n"
-" nicht von ANGEH_URL ab). Die Versionsnummer wird auf die\n"
-" Standardausgabe ausgegeben. Ein Beispiel:\n"
+" nicht von ANGEH_URL ab). Die Versionsnummer wird auf die\n"
+" Standardausgabe ausgegeben. Ein Beispiel:\n"
"\n"
" $ svnversion . /repos/svn/trunk\n"
" 4168\n"
"\n"
-" Die Versionsnummer ist eine einzelne Nummer, falls die Arbeitskopie\n"
+" Die Versionsnummer ist eine einfache Zahl, falls die Arbeitskopie\n"
" eine einzelne Revision besitzt, die nicht modifiziert, nicht umgeschaltet\n"
-" ist und eine URL, welche mit ANGEH_URL übereinstimmt. Falls die\n"
+" ist und eine URL hat, welche mit ANGEH_URL übereinstimmt. Falls die\n"
" Arbeitskopie ungewöhnlich ist, ist die Versionsnummer komplexer:\n"
"\n"
-" 4123:4168 Arbeitskopie aus verschiedenen Revisionen\n"
-" 4168M geänderte Arbeitskopie\n"
+" 4123:4168 Arbeitskopie mit verschiedenen Revisionen\n"
+" 4168M Arbeitskopie mit Änderungen\n"
" 4123S umgestellte Arbeitskopie\n"
" 4123P partielle Arbeitskopie, teilweise ausgecheckt\n"
" 4123:4168MS geänderte, umgestellte Arbeitskopie aus verschiedenen\n"
" Revisionen\n"
"\n"
-" Das Programm gibt »exportiert« aus, falls es in einem Verzeichnis, das\n"
-" keine Arbeitskopie ist, ausgeführt wird.\n"
+" Wenn AK_PFAD nicht unter Versionkontrolle steht, gibt das Programm\n"
+" »nicht versioniertes Verzeichnis« bzw. »...Datei« aus. Wenn AK_PFAD\n"
+" ein hinzugefügter, kopierter oder verschobener Pfad ist, wird »Nicht\n"
+" übertragenes lokal hinzugefügtes, kopiertes oder verschobenes Element«\n"
+" ausgegeben.\n"
"\n"
" Bei Aufruf ohne Parameter wird das aktuelle Verzeichnis als AK_PFAD angenommen.\n"
"\n"
"Gültige Optionen:\n"
-#: ../svnversion/main.c:131
+#: ../svnversion/svnversion.c:137
msgid "do not output the trailing newline"
msgstr "gibt den anhängenden Zeilenumbruch nicht aus"
-#: ../svnversion/main.c:132
+#: ../svnversion/svnversion.c:138
msgid "last changed rather than current revisions"
msgstr "gibt letzte geänderte statt aktueller Revisionen aus"
-#: ../svnversion/main.c:232
+#: ../svnversion/svnversion.c:246
+#, c-format
+msgid "Unversioned symlink%s"
+msgstr "Nicht versionierter symbolischer Link%s"
+
+#: ../svnversion/svnversion.c:249
#, c-format
msgid "Unversioned directory%s"
msgstr "Nicht versioniertes Verzeichnis%s"
-#: ../svnversion/main.c:250 ../svnversion/main.c:266
+#: ../svnversion/svnversion.c:252
#, c-format
msgid "Unversioned file%s"
msgstr "Nicht versionierte Datei%s"
-#: ../svnversion/main.c:279
+#: ../svnversion/svnversion.c:258
#, c-format
msgid "'%s' doesn't exist\n"
msgstr "»%s« existiert nicht\n"
-#: ../svnversion/main.c:287
+#: ../svnversion/svnversion.c:259
#, c-format
msgid "'%s' is of unknown type\n"
msgstr "»%s« ist unbekannten Typs\n"
#. Local uncommitted modifications, no revision info was found.
-#: ../svnversion/main.c:296
+#: ../svnversion/svnversion.c:274
#, c-format
msgid "Uncommitted local addition, copy or move%s"
-msgstr ""
-
-#~ msgid "Parent(s) of '%s' should have been present."
-#~ msgstr "Eltern von »%s« sollten vorhanden sein."
-
-#~ msgid "Cannot reintegrate into a working copy not entirely at infinite depth"
-#~ msgstr "Kann nicht zurück in eine Arbeitskopie integrieren, die keine vollständig unendliche Tiefe hat"
-
-#~ msgid "Properties Last Updated"
-#~ msgstr "Eigenschaften zuletzt geändert"
-
-#~ msgid "UUID mismatch: existing file '%s' was checked out from a different repository"
-#~ msgstr "UUID-Fehler: Existierende Datei »%s« wurde aus einem anderen Projektarchiv ausgecheckt"
-
-#~ msgid "Error comparing '%s' and '%s'"
-#~ msgstr "Fehler beim Vergleichen von »%s« und »%s«"
-
-#~ msgid "Revision type requires a working copy path, not a URL"
-#~ msgstr "Revisionstyp erfordert einen Arbeitskopiepfad, keine URL"
-
-#~ msgid "Can't move source to dest"
-#~ msgstr "Kann Quelle nicht nach Ziel verschieben"
-
-#~ msgid ""
-#~ "set new working copy depth to ARG ('exclude',\n"
-#~ " 'empty', 'files', 'immediates', or 'infinity')"
-#~ msgstr ""
-#~ "setzt neue Tiefe der Arbeitskopie auf PAR (»exclude«,\n"
-#~ " »empty«, »files«, »immediates« oder »infinity«)"
-
-#~ msgid "Can't get file perms for file at '%s' (file stat error)"
-#~ msgstr "Kann die Berechtigungen für Datei in »%s« nicht holen (Dateistatus)"
-
-#~ msgid "Error during add of '%s'"
-#~ msgstr "Fehler beim Hinzufügen von »%s«"
-
-#~ msgid " You have added '%s' locally.\n"
-#~ msgstr " »%s« wurde lokal hinzugefügt.\n"
-
-#~ msgid "Can't write property hash to '%s'"
-#~ msgstr "Kann Eigenschafts-Hashwert nicht nach »%s« schreiben"
-
-#~ msgid "Can't get default file perms for file at '%s' (file stat error)"
-#~ msgstr "Kann die Standardberechtigungen für Datei in »%s« nicht holen (Dateistatus)"
-
-#~ msgid "Your .svn/tmp directory may be missing or corrupt; run 'svn cleanup' and try again"
-#~ msgstr ""
-#~ "Ihr .svn/tmp Verzeichnis könnte fehlen oder beschädigt sein; führen Sie\n"
-#~ "»svn cleanup« aus und versuchen Sie es erneut"
-
-#~ msgid ".patch"
-#~ msgstr ".patch"
-
-#~ msgid ""
-#~ "use a different EOL marker than the standard\n"
-#~ " system marker for files with the svn:eol-style\n"
-#~ " property set to 'native'.\n"
-#~ " ARG may be one of 'LF', 'CR', 'CRLF'"
-#~ msgstr ""
-#~ "Verwende eine andere Zeilenendemarke als den\n"
-#~ " Standard für Dateien mit der Eigenschaft\n"
-#~ " »svn:eol-style native«.\n"
-#~ " PAR kann »LF«, »CR« oder »CRLF« sein."
-
-#~ msgid "Failed to add file '%s': a file of the same name is already scheduled for addition with history"
-#~ msgstr "Konnte Datei »%s« nicht hinzufügen: eine Datei mit dem selben Namen ist bereits zur Übertragung mit Historie eingeplant"
-
-#~ msgid "Unknown or unexpected kind for path '%s'"
-#~ msgstr "Unbekannte oder unerwartete Art für Pfad »%s«"
-
-#~ msgid "Can't parse '%s'"
-#~ msgstr "Kann »%s« nicht analysieren"
-
-#~ msgid "This action was obstructed by an item in the working copy.\n"
-#~ msgstr "Diese Aktion wurde von einem Objekt in der Arbeitskopie behindert.\n"
-
-#~ msgid ""
-#~ " '%s' does not exist locally.\n"
-#~ " Maybe you renamed it?\n"
-#~ msgstr ""
-#~ " »%s« existiert lokal nicht.\n"
-#~ " Eventuell wurde das Objekt umbenannt?\n"
-
-#~ msgid " The merge attempted to add '%s'.\n"
-#~ msgstr " Die Zusammenführung versuchte »%s« hinzuzufügen.\n"
-
-#~ msgid "'get-location-segments' REPORT not implemented"
-#~ msgstr "»get-locations-segments«-REPORT nicht implementiert"
-
-#~ msgid ""
-#~ "'%s' does not exist locally. Maybe you renamed it? Or has it been\n"
-#~ "renamed in the history of the branch you are merging into?\n"
-#~ msgstr ""
-#~ "»%s« existiert lokal nicht. Eventuell wurde es umbenannt? Oder es wurde\n"
-#~ "in der Geschichte des Zweiges, in den zusammengeführt wird, umbenannt?\n"
-
-#~ msgid ""
-#~ "Send changes from your working copy to the repository.\n"
-#~ "usage: commit [PATH...]\n"
-#~ "\n"
-#~ " A log message must be provided, but it can be empty.\n"
-#~ " OS400 does not support the starting of an editor,\n"
-#~ " so --message or --file must be used. If any targets are\n"
-#~ " (or contain) locked items, those will be unlocked after a\n"
-#~ " successful commit.\n"
-#~ msgstr ""
-#~ "Überträgt Änderungen Ihrer Arbeitskopie in das Projektarchiv.\n"
-#~ "Aufruf: commit [PFAD...]\n"
-#~ "\n"
-#~ " Eine Logmeldung muss angegeben werden; diese kann jedoch leer sein.\n"
-#~ " OS400 unterstützt das Starten eines Editors nicht, so dass --message\n"
-#~ " oder --file benutzt werden muss. Falls Objekte gesperrt sind oder\n"
-#~ " gesperrte Objekte enthalten, werden diese nach einer erfolgreichen\n"
-#~ " Ãœbertragung entsperrt.\n"
-
-#~ msgid " The merge attempted to edit '%s'.\n"
-#~ msgstr " Die Zusammenführung versuchte »%s« zu bearbeiten.\n"
-
-#~ msgid "Entry '%s' is already under version control"
-#~ msgstr "Eintrag »%s« ist bereits unter Versionskontrolle"
-
-#~ msgid ""
-#~ "Checksum mismatch on representation '%s':\n"
-#~ " expected: %s\n"
-#~ " actual: %s\n"
-#~ msgstr ""
-#~ "Prüfsummenfehler auf Darstellung »%s«:\n"
-#~ " Erwartet: %s\n"
-#~ " Tatsächlich: %s\n"
-
-#~ msgid "property '%s' deleted (recursively) from '%s'.\n"
-#~ msgstr "Eigenschaft »%s« wurde (rekursiv) von »%s« gelöscht.\n"
-
-#~ msgid ""
-#~ " The update attempted to delete '%s'\n"
-#~ " (possibly as part of a rename operation).\n"
-#~ msgstr ""
-#~ " Die Aktualisierung versuchte »%s« zu löschen\n"
-#~ " (möglicherweise als Teil einer Umbenennung).\n"
-
-#~ msgid ""
-#~ " The switch attempted to delete '%s'\n"
-#~ " (possibly as part of a rename operation).\n"
-#~ msgstr ""
-#~ " Die Umstellung versuchte »%s« zu löschen\n"
-#~ " (möglicherweise als Teil einer Umbenennung).\n"
-
-#~ msgid " The switch attempted to edit '%s'.\n"
-#~ msgstr " Die Umstellung versuchte »%s« zu bearbeiten.\n"
-
-#~ msgid ""
-#~ "Lock Comment (%i lines):\n"
-#~ "%s\n"
-#~ msgstr ""
-#~ "Sperrkommentar (%i Zeilen):\n"
-#~ "%s\n"
-
-#~ msgid ""
-#~ "output in svnpatch format, implies the\n"
-#~ " --no-diff-deleted option"
-#~ msgstr ""
-#~ "Ausgabe in svnpatch-Format, impliziert die\n"
-#~ " Option --no-diff-deleted"
-
-#~ msgid " The switch attempted to add '%s'.\n"
-#~ msgstr " Die Umstellung versuchte »%s« hinzuzufügen.\n"
-
-#~ msgid ""
-#~ " The merge attempted to delete '%s'\n"
-#~ " (possibly as part of a rename operation).\n"
-#~ msgstr ""
-#~ " Die Zusammenführung versuchte »%s« zu löschen\n"
-#~ " (möglicherweise als Teil einer Umbenennung).\n"
-
-#~ msgid "no parent with copyfrom information found above '%s'"
-#~ msgstr "kein Elternteil mit »copyfrom«-Information wurde oberhalb »%s« gefunden"
-
-#~ msgid " The update attempted to add '%s'.\n"
-#~ msgstr " Die Aktualisierung versuchte »%s« hinzuzufügen.\n"
-
-#~ msgid ""
-#~ "Comment (%i lines):\n"
-#~ "%s\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Kommentar (%i Zeilen):\n"
-#~ "%s\n"
-#~ "\n"
-
-#~ msgid "No delimiter after 'action' in tree conflict description"
-#~ msgstr "Kein Trenner nach »action« in Baumkonfliktbeschreibung"
-
-#~ msgid "Unescaped description delimiter inside 'victim_path' in tree conflict description"
-#~ msgstr "Nicht geschützter Beschreibungstrenner innerhalb von »victim_path« der Baumkonfliktbeschreibung"
-
-#~ msgid "Expected tree conflict data but got none"
-#~ msgstr "Daten zu einem Baumkonflikt wurden erwartet aber nichts erhalten"
-
-#~ msgid "No delimiter after 'operation' in tree conflict description"
-#~ msgstr "Kein Trenner nach »operation« in Baumkonfliktbeschreibung"
-
-#~ msgid "Invalid tree conflict data in entries file, but no idea what went wrong"
-#~ msgstr "Ungültige Baumkonfliktdaten in Datei »entries«, Ursache ist unbekannt"
-
-#~ msgid "Bad node_kind in tree conflict description"
-#~ msgstr "Fehlerhafter Wert von »node_kind« in Baumkonfliktbeschreibung"
-
-#~ msgid "No delimiter after 'victim_path' in tree conflict description"
-#~ msgstr "Kein Trenner nach »victim_path« in Baumkonfliktbeschreibung"
-
-#~ msgid "Shallowing of working copy depths is not yet supported"
-#~ msgstr "Das Verringern der Arbeitskopietiefen wird nicht unterstützt"
-
-#~ msgid "Bad action in tree conflict description"
-#~ msgstr "Fehlerhafter Wert von »action« in Baumkonfliktbeschreibung"
-
-#~ msgid "Unexpected end of tree conflict description, within escape sequence in 'victim_path'"
-#~ msgstr "Unerwartetes Ende der Baumkonfliktbeschreibung innerhalb einer Escape-Sequenz in »victim_path«"
-
-#~ msgid "Corrupt working copy: '%s' in directory '%s' (which is scheduled for replacement) has an invalid schedule"
-#~ msgstr ""
-#~ "Beschädigte Arbeitskopie: »%s« im Verzeichnis »%s« (welches zum Ersetzen\n"
-#~ "eingeplant ist) hat einen ungültigen Übertragungsplan"
-
-#~ msgid "No delimiter at end of tree conflict description, even though there is still data left to read"
-#~ msgstr "Es befindet sich kein Trenner am Ende der Baumkonfliktbeschreibung, obwohl weitere zu lesende Daten vorhanden sind"
-
-#~ msgid "Failed to add file '%s': object of the same name already exists"
-#~ msgstr ""
-#~ "Konnte die Datei »%s« nicht hinzufügen: ein Objekt mit demselben Namen\n"
-#~ "existiert bereits"
-
-#~ msgid ""
-#~ "Checksum mismatch, representation '%s':\n"
-#~ " expected: %s\n"
-#~ " actual: %s\n"
-#~ msgstr ""
-#~ "Prüfsummenfehler, Darstellung »%s«:\n"
-#~ " Erwartet: %s\n"
-#~ " Tatsächlich: %s\n"
-
-#~ msgid "Invalid 'operation' field in tree conflict description"
-#~ msgstr "Ungültiges Feld »operation« in Baumkonfliktbeschreibung"
-
-#~ msgid "Entry '%s' has invalid depth"
-#~ msgstr "Eintrag »%s« hat eine ungültige Tiefe"
-
-#~ msgid "Corrupt working copy: '%s' in directory '%s' (which is scheduled for deletion) is not itself scheduled for deletion"
-#~ msgstr ""
-#~ "Beschädigte Arbeitskopie: »%s« im Verzeichnis »%s« (welches zum Löschen\n"
-#~ "eingeplant ist) ist selbst nicht zum Löschen vorgesehen"
-
-#~ msgid "Can't rewind directory '%s'"
-#~ msgstr "Kann Verzeichnis »%s« nicht zurückspulen"
-
-#~ msgid "Illegal escaped character in 'victim_path' of tree conflict description"
-#~ msgstr "Ungültiges geschütztes Zeichen in »victim_path« der Baumkonfliktbeschreibung"
-
-#~ msgid "The OPTIONS request returned invalid XML in the response: %s (%s)"
-#~ msgstr "Die OPTIONS-Anfrage gab in der Antwort ungültiges XML zurück: %s (%s)"
-
-#~ msgid "No REPOSITORY table entry for uuid '%s'"
-#~ msgstr "Kein REPOSITORY-Tabelleneintrag für UUID »%s«"
-
-#~ msgid "UUID mismatch: existing directory '%s' was checked out from a different repository"
-#~ msgstr "UUID-Fehler: Existierendes Verzeichnis »%s« wurde aus einem anderen Projektarchiv ausgecheckt"
-
-#~ msgid ""
-#~ "specify automatic conflict resolution source\n"
-#~ " ('base', 'working', 'mine-conflict',\n"
-#~ " 'theirs-conflict', 'mine-full', 'theirs-full')"
-#~ msgstr ""
-#~ "automatische Konfliktauflösungsaktion angeben\n"
-#~ " (»base«, »working«, »mine-conflict«,\n"
-#~ " »theirs-conflict«, »mine-full«, »theirs-full«)"
-
-#~ msgid ""
-#~ "Apply a patch to a working copy path.\n"
-#~ "usage: patch PATCHFILE [WCPATH]\n"
-#~ "\n"
-#~ " PATCHFILE is an input file which, when applied, turns the working\n"
-#~ " copy WCPATH into a modified tree that reflects all the changes the\n"
-#~ " patch carries along. When WCPATH is omitted '.' is assumed.\n"
-#~ "\n"
-#~ " The format of bytes embedded in the patch can be of two types: Unified\n"
-#~ " diff and/or svnpatch diff (see 'svn diff --svnpatch').\n"
-#~ "\n"
-#~ " This command allows some amount of fuzzing as Unidiff is contextual\n"
-#~ " and svnpatch revisionless.\n"
-#~ msgstr ""
-#~ "Wendet einen Patch auf einen Arbeitskopiepfad an.\n"
-#~ "Aufruf: patch PATCHDATEI [AKPfad]\n"
-#~ "\n"
-#~ " PATCHDATEI ist eine Eingabedatei, die, wenn angewandt, die Arbeitskopie\n"
-#~ " AKPfad in einen veränderten Baum umwandelt, der all die Änderungen umfasst,\n"
-#~ " die der Patch enthält. Falls AKPfad weggelassen wird, wird ».« verwendet.\n"
-#~ "\n"
-#~ " Das Format der im Patch eingebetteten Bytes kann von zwei Arten sein:\n"
-#~ " Unified Diff und/oder svnpatch-Diff (vergleiche »svn diff --svnpatch«).\n"
-#~ "\n"
-#~ " Dieses Kommando ermöglicht eine kleine Unschärfe, da Unidiff textabhängig\n"
-#~ " und svnpatch revisionsunabhängig ist.\n"
-
-#~ msgid "exported%s"
-#~ msgstr "exportiert%s"
-
-#~ msgid "Path '%s' is no longer a member of a changelist.\n"
-#~ msgstr "Pfad »%s« ist nicht länger ein Element einer Änderungsliste.\n"
-
-#~ msgid "Checksum mismatch for '%s'; recorded: '%s', actual: '%s'"
-#~ msgstr "Prüfsummenfehler für »%s«; erwartet: »%s«, tatsächlich: »%s«"
-
-#~ msgid "Modified: %s\n"
-#~ msgstr "Modifiziert: %s\n"
-
-# FIXME: "can't happen" according to source code!
-#~ msgid "OPTIONS request (for capabilities) got HTTP response code %d"
-#~ msgstr "OPTIONS-Anfrage (für Eigenschaften) führte zu HTTP-Antwort-Code %d"
-
-#~ msgid "'%s' is not a valid revision range"
-#~ msgstr "»%s« ist kein gültiger Revisionsbereich"
-
-#~ msgid "Path '%s' is now a member of changelist '%s'.\n"
-#~ msgstr "Pfad »%s« ist nun ein Element der Änderungsliste »%s«.\n"
-
-#~ msgid "Unrecognized node kind '%s' from server"
-#~ msgstr "Unbekannter Knotentyp »%s« vom Server"
-
-#~ msgid "File or directory '%s' is out of date"
-#~ msgstr "Datei oder Verzeichnis »%s« ist veraltet"
-
-#~ msgid "Bad type indicator"
-#~ msgstr "Falscher Typindikator"
-
-#~ msgid ""
-#~ "set revision property ARG in new revision\n"
-#~ " using the name[=value] format"
-#~ msgstr ""
-#~ "Revisionseigenschaft PAR in neuer Revision\n"
-#~ " unter Verwendung des Formats name[=Wert] setzen"
-
-#~ msgid "Corrupt working copy: '%s' has no default entry"
-#~ msgstr "Beschädigte Arbeitskopie: »%s« hat keinen Standardeintrag"
-
-#~ msgid "Unable to parse unordered revision ranges '%s' and '%s'"
-#~ msgstr "Unsortierte Revisionsbereiche »%s« und »%s« können nicht verarbeitet werden"
-
-#~ msgid "'%s' has invalid revision"
-#~ msgstr "»%s« hat eine ungültige Revision"
-
-#~ msgid ""
-#~ "No 'patch' program was found in your system. Please try\n"
-#~ "to use --patch-cmd or 'patch-cmd' run-time configuration\n"
-#~ "option or manually use an external tool to apply Unidiffs."
-#~ msgstr ""
-#~ "Kein »patch«-Programm wurde in Ihrem System gefunden. Bitte versuchen Sie\n"
-#~ "--patch-cmd oder die Laufzeitkonfigurationsoption »patch-cmd«. Alternativ\n"
-#~ "können Sie ein externes Werkzeug einsetzen, um Unidiffs einzuspielen."
-
-#~ msgid "use ARG as external patch command"
-#~ msgstr "PAR als externes Patch-Kommando verwenden"
-
-#~ msgid "APR_APPEND not supported for adm files"
-#~ msgstr "APR_APPEND wird für administrative Dateien nicht unterstützt"
-
-# FIXME: s/item/items/?
-#~ msgid "Summary of conflicts in external item:\n"
-#~ msgstr "Konfliktübersicht für externen Verweis:\n"
-
-#~ msgid "; run 'svn update' to complete it"
-#~ msgstr "; vervollständigen Sie diese mit »svn update«."
-
-#~ msgid ""
-#~ "usage: svnsync copy-revprops DEST_URL [REV[:REV2]]\n"
-#~ "\n"
-#~ "Copy the revision properties in a given range of revisions to the\n"
-#~ "destination from the source with which it was initialized.\n"
-#~ "\n"
-#~ "If REV and REV2 are provided, copy properties for the revisions\n"
-#~ "specified by that range, inclusively. If only REV is provided,\n"
-#~ "copy properties for that revision alone. If REV is not provided,\n"
-#~ "copy properties for all revisions previously transferred to the\n"
-#~ "destination.\n"
-#~ "\n"
-#~ "REV and REV2 must be revisions which were previously transferred\n"
-#~ "to the destination. You may use \"HEAD\" for either revision to\n"
-#~ "mean \"the last revision transferred\".\n"
-#~ msgstr ""
-#~ "Aufruf: svnsync copy-revprops ZIEL_URL [REV[:REV2]]\n"
-#~ "\n"
-#~ "Kopiert die Revisionseigenschaften in einem gegebenen Revisionsbereich\n"
-#~ "von der Quelle, mit der es initialisiert wurde, auf das Ziel.\n"
-#~ "\n"
-#~ "Falls REV und REV2 angegeben wurden, werden nur Eigenschaften für die\n"
-#~ "durch diesen Bereich angegebenen Revisionen kopiert. Falls nur REV\n"
-#~ "angegeben wurde, werden nur Eigenschaften für diese Revision kopiert.\n"
-#~ "Falls REV nicht angegeben wurde, werden alle Eigenschaften kopiert, für\n"
-#~ "die die Revisionen früher auf das Ziel übertragen wurden.\n"
-#~ "\n"
-#~ "REV und REV2 müssen Revisionen sein, die vorher auf das Ziel transferiert\n"
-#~ "wurden. Sie können »HEAD« für eine Revision verwenden, im Sinne von »die\n"
-#~ "letzte übertragene Revision«.\n"
-
-#~ msgid "Cannot revert"
-#~ msgstr "Kann nicht zurücksetzen"
-
-#~ msgid "Version %d is not non-negative"
-#~ msgstr "Version %d ist nicht positiv"
-
-#~ msgid "Added: %s\n"
-#~ msgstr "Hinzugefügt: %s\n"
-
-#~ msgid "External program is missing"
-#~ msgstr "Externes Programm fehlt"
-
-#~ msgid "Corrupt working copy: directory '%s' has an invalid schedule"
-#~ msgstr "Beschädigte Arbeitskopie: Verzeichnis »%s« hat einen ungültigen Plan"
-
-#~ msgid ""
-#~ "Copyright (C) 2000-2009 CollabNet.\n"
-#~ "Subversion is open source software, see http://subversion.tigris.org/\n"
-#~ "This product includes software developed by CollabNet (http://www.Collab.Net/).\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Copyright (C) 2000-2009 CollabNet.\n"
-#~ "Subversion ist Open-Source-Software, siehe http://subversion.tigris.org/\n"
-#~ "Dieses Produkt enthält Software, die von CollabNet (http://www.Collab.Net/) entwickelt wurde.\n"
-#~ "\n"
-
-#~ msgid "lump-merge all of source URL's unmerged changes"
-#~ msgstr ""
-#~ "komplettes Rückführen aller nicht zusammengeführten\n"
-#~ " Änderungen der Quell-URL"
-
-#~ msgid "Error modifying entry for '%s'"
-#~ msgstr "Fehler beim Bearbeiten des Eintrags für »%s«"
-
-#~ msgid ""
-#~ "Either you have added '%s' locally, or it has been added in the\n"
-#~ "history of the branch you are merging into.\n"
-#~ msgstr ""
-#~ "Entweder wurde »%s« lokal hinzugefügt oder dies geschah in der\n"
-#~ "Geschichte des Zweiges, in den zusammengeführt wird.\n"
-
-#~ msgid ""
-#~ " You have deleted '%s' locally.\n"
-#~ " Maybe you renamed it?\n"
-#~ msgstr ""
-#~ " »%s« wurde lokal gelöscht.\n"
-#~ " Eventuell wurde das Objekt umbenannt?\n"
-
-#~ msgid ""
-#~ "usage: svnsync synchronize DEST_URL\n"
-#~ "\n"
-#~ "Transfer all pending revisions to the destination from the source\n"
-#~ "with which it was initialized.\n"
-#~ msgstr ""
-#~ "Aufruf: svnsync synchronize ZIEL_URL\n"
-#~ "\n"
-#~ "Überträgt alle laufenden Revisionen von der Quelle, mit der es\n"
-#~ "initialisiert wurde, zum Ziel.\n"
-
-#~ msgid "Won't delete locally modified directory '%s'"
-#~ msgstr "Werde lokal verändertes Verzeichnis »%s« nicht löschen"
-
-#~ msgid "Existing sqlite database found at '%s'"
-#~ msgstr "Existierende SQLite-Datenbank wurde unter »%s« gefunden"
-
-#~ msgid "'get-deleted-rev' REPORT not implemented"
-#~ msgstr "»get-deleted-rev« REPORT nicht implementiert"
-
-#~ msgid "property '%s' set (recursively) on '%s'\n"
-#~ msgstr "Eigenschaft »%s« (rekursiv) für »%s« gesetzt\n"
-
-#~ msgid "'get-locations' REPORT not implemented"
-#~ msgstr "»get-locations« REPORT nicht implementiert"
-
-#~ msgid "Can't chmod '%s'"
-#~ msgstr "Kann »chmod '%s'« nicht durchführen"
-
-#~ msgid "Can't create a character converter from '%i' to '%i'"
-#~ msgstr "Kann keinen Zeichenkonverter von »%i« nach »%i« erzeugen"
-
-#~ msgid "Cannot initialize a repository with content in it"
-#~ msgstr "Kann kein Projektarchiv mit Inhalt initialisieren"
-
-#~ msgid ""
-#~ "Either you have edited '%s' locally, or it has been edited in the\n"
-#~ "history of the branch you are merging into, but those edits are not\n"
-#~ "present on the branch you are merging from.\n"
-#~ msgstr ""
-#~ "Entweder wurde »%s« lokal bearbeitet oder in der Geschichte des\n"
-#~ "Zweiges, in den zusammengeführt wird, editiert, aber diese\n"
-#~ "Veränderungen befinden sich nicht im Zweig, aus dem zusammengeführt wird.\n"
-
-#~ msgid ""
-#~ "Entry for '%s' is marked as 'copied' but is not itself scheduled\n"
-#~ "for addition. Perhaps you're committing a target that is\n"
-#~ "inside an unversioned (or not-yet-versioned) directory?"
-#~ msgstr ""
-#~ "Eintrag für »%s« ist als »kopiert« markiert, aber ist selbst nicht\n"
-#~ "zum Hinzufügen geplant. Vielleicht übertragen Sie ein Ziel, das\n"
-#~ "sich in einem nicht versionierten (oder noch-nicht-versionierten)\n"
-#~ "Verzeichnis befindet?"
-
-#~ msgid "Deleted: %s%s"
-#~ msgstr "Gelöscht: %s%s"
-
-#~ msgid "Can't replace '%s' with a node of a differing type; the deletion must be committed and the parent updated before adding '%s'"
-#~ msgstr "Kann »%s« nicht durch einen Knoten eines anderen Typs ersetzen; Übertragen Sie die Löschung, aktualisieren Sie das Elternverzeichnis und fügen Sie erst dann »%s« hinzu"
-
-#~ msgid "Cannot exclude root directory"
-#~ msgstr "Kann Wurzelverzeichnis nicht exkludieren"
-
-#~ msgid "Error replacing text-base of '%s'"
-#~ msgstr "Fehler beim Ersetzen der Textbasis von »%s«"
-
-#~ msgid "Can't close directory '%s'"
-#~ msgstr "Kann Verzeichnis »%s« nicht schließen"
-
-#~ msgid "'%s' is marked as absent, so it cannot be scheduled for addition"
-#~ msgstr ""
-#~ "»%s« ist als abwesend markiert, es kann daher nicht für die Übertragung\n"
-#~ "eingeplant werden"
-
-#~ msgid "No such entry: '%s'"
-#~ msgstr "Kein Eintrag: »%s«"
-
-#~ msgid "Error getting 'affected time' for '%s'"
-#~ msgstr "Fehler beim Ermitteln der »letzten Änderungszeit« von »%s«"
-
-#~ msgid "Write-lock stolen in '%s'"
-#~ msgstr "Schreibsperre gestohlen in »%s«"
-
-#~ msgid "Added: %s%s"
-#~ msgstr "Hinzugefügt: %s%s"
-
-#~ msgid "Missing 'left' attribute in '%s'"
-#~ msgstr "Fehlendes »left« Attribut für »%s«"
-
-#~ msgid "Error modifying entry of '%s'"
-#~ msgstr "Fehler beim Bearbeiten des Eintrags von »%s«"
-
-#~ msgid "Error getting 'affected time' on '%s'"
-#~ msgstr "Fehler beim Ermitteln der »letzten Änderungszeit« von »%s«"
-
-#~ msgid "Entry '%s' has illegal schedule"
-#~ msgstr "Eintrag »%s« hat einen ungültigen Plan"
-
-#~ msgid "Error removing changelist from entry '%s'"
-#~ msgstr "Fehler beim Entfernen der Änderungsliste von Eintrag »%s«"
-
-#~ msgid "Log entry missing 'name' attribute (entry '%s' for directory '%s')"
-#~ msgstr "»name«-Attribut fehlt im Log-Eintrag (Eintrag »%s« für Verzeichnis »%s«)"
-
-#~ msgid "Error getting 'affected time' of '%s'"
-#~ msgstr "Fehler beim Ermitteln der »letzten Änderungszeit« von »%s«"
-
-#~ msgid "Cannot revert addition of current directory; please try again from the parent directory"
-#~ msgstr "Kann Hinzufügen des aktuellen Verzeichnisses nicht zurücknehmen; bitte versuchen Sie es aus dem Elternverzeichnis erneut"
-
-#~ msgid "Invalid 'format' attribute"
-#~ msgstr "Ungültiges »format«-Attribut"
-
-#~ msgid "Couldn't open log"
-#~ msgstr "Kann Log-Datei nicht öffnen"
-
-#~ msgid "Error recording tree conflicts in '%s'"
-#~ msgstr "Fehler beim Aufzeichnen von Baumkonflikten in »%s«"
-
-#~ msgid "Expected '%s' to be a file but found a directory"
-#~ msgstr "Erwartete, dass »%s« eine Datei ist, es ist aber ein Verzeichnis"
-
-#~ msgid "Error writing entries file for '%s'"
-#~ msgstr "Fehler beim Schreiben der Eintragsdatei für »%s«"
-
-#~ msgid "Error writing log for '%s'"
-#~ msgstr "Fehler beim Schreiben des Logs für »%s«"
-
-#~ msgid "Checksum mismatch while updating '%s'; expected: '%s', actual: '%s'"
-#~ msgstr "Prüfsummenfehler beim Aktualisieren von »%s«; erwartet: »%s«, tatsächlich: »%s«"
-
-#~ msgid ""
-#~ "Default: '-u'. When Subversion is invoking an\n"
-#~ " external diff program, ARG is simply passed along\n"
-#~ " to the program. But when Subversion is using its\n"
-#~ " default internal diff implementation, or when\n"
-#~ " Subversion is displaying blame annotations, ARG\n"
-#~ " could be any of the following:\n"
-#~ " -u (--unified):\n"
-#~ " Output 3 lines of unified context.\n"
-#~ " -b (--ignore-space-change):\n"
-#~ " Ignore changes in the amount of white space.\n"
-#~ " -w (--ignore-all-space):\n"
-#~ " Ignore all white space.\n"
-#~ " --ignore-eol-style:\n"
-#~ " Ignore changes in EOL style.\n"
-#~ " -p (--show-c-function):\n"
-#~ " Show C function name in diff output."
-#~ msgstr ""
-#~ "Vorgabe: »-u«. Wenn Subversion ein\n"
-#~ " externes Vergleichsprogramm aufruft, wird PAR nur\n"
-#~ " an das Programm weitergereicht. Wenn Subversion\n"
-#~ " aber sein internes Vergleichsprogramm benutzt\n"
-#~ " oder Annotierungen anzeigt, kann PAR einen der\n"
-#~ " folgenden Werte annehmen:\n"
-#~ " -u (--unified):\n"
-#~ " Gibt 3 Zeilen Standardkontext aus.\n"
-#~ " -b (--ignore-space-change):\n"
-#~ " Ignoriert Änderungen in der Anzahl von\n"
-#~ " Leerzeichen.\n"
-#~ " -w (--ignore-all-space):\n"
-#~ " Ignoriert sämtliche Leerzeichen.\n"
-#~ " --ignore-eol-style:\n"
-#~ " Ignoriert Änderungen im Zeilenendestil.\n"
-#~ " -p (--show-c-function):\n"
-#~ " Zeigt C-Funktionsname in Diff-Ausgabe."
-
-#~ msgid "Destination directory of add-with-history is missing a URL"
-#~ msgstr "Dem Zielverzeichnis von add-with-history fehlt eine URL"
-
-#~ msgid "Error writing to '%s'"
-#~ msgstr "Fehler beim Schreiben in »%s«"
-
-# CHECKME: demselb... oder dem selb...
-#~ msgid "Failed to add file '%s': a non-file object of the same name already exists"
-#~ msgstr ""
-#~ "Konnte die Datei »%s« nicht hinzufügen: ein nicht-Dateiobjekt mit demselben\n"
-#~ "Namen existiert bereits"
-
-#~ msgid "Unable to lock '%s'"
-#~ msgstr "Kann »%s« nicht sperren"
-
-#~ msgid ""
-#~ "Checksum mismatch for '%s':\n"
-#~ " expected checksum: %s\n"
-#~ " actual checksum: %s\n"
-#~ msgstr ""
-#~ "Prüfsummenfehler für »%s«:\n"
-#~ " Erwartet: %s\n"
-#~ " Tatsächlich: %s\n"
-
-#~ msgid "'%s' returned error exitcode %d"
-#~ msgstr "»%s« hat Fehlerwert %d zurückgegeben"
-
-#~ msgid "At least one revision (r%ld) not yet merged from '%s'"
-#~ msgstr "Zumindest eine Revision (r%ld) aus »%s« wurde nicht zusammengeführt"
-
-#~ msgid "Error during recursive copy of '%s'"
-#~ msgstr "Fehler beim rekursiven Kopieren von »%s«"
-
-#~ msgid "Error in post-commit clean-up (details follow):"
-#~ msgstr "Fehler beim Aufräumen nach der Übertragung (Details folgen):"
-
-#~ msgid "No '.' entry in: '%s'"
-#~ msgstr "Kein ».« Eintrag in: »%s«"
-
-#~ msgid "unexpected kind for revert-base '%s'"
-#~ msgstr "Unerwartete Art für revert-base »%s«"
-
-#~ msgid "Lock file '%s' is not a regular file"
-#~ msgstr "Sperrdatei »%s« ist keine reguläre Datei"
-
-#~ msgid "Can't add '%s' to deleted directory; try undeleting its parent directory first"
-#~ msgstr ""
-#~ "Kann »%s« in gelöschtem Verzeichnis nicht hinzufügen; versuchen Sie zuerst,\n"
-#~ "das Löschen des Elternverzeichnisses rückgängig zu machen"
-
-#~ msgid "Failed to add directory '%s': an unversioned directory of the same name already exists"
-#~ msgstr "Verzeichnis »%s« konnte nicht hinzugefügt werden: ein nicht versioniertes Verzeichnis mit demselben Namen existiert bereits"
-
-#~ msgid "Directory '%s' containing working copy admin area is missing"
-#~ msgstr "Verzeichnis »%s« mit Administrationsdateien der Arbeitskopie fehlt"
-
-#~ msgid "Malformed patch data"
-#~ msgstr "Fehlerhafte Patchdaten"
-
-#~ msgid "Missing 'dest' attribute in '%s'"
-#~ msgstr "Fehlendes »dest« Attribut für »%s«"
-
-#~ msgid "Failed to add directory '%s': copyfrom arguments not yet supported"
-#~ msgstr ""
-#~ "Konnte Verzeichnis »%s« nicht hinzufügen: Parameter »copyfrom« wird noch nicht\n"
-#~ "unterstützt"
-
-#~ msgid "Log command for directory '%s' is mislocated"
-#~ msgstr "Log-Kommando für Verzeichnis »%s« ist falsch platziert"
-
-#~ msgid "In directory '%s'"
-#~ msgstr "In Verzeichnis »%s«"
-
-#~ msgid "Unrecognized logfile element '%s' in '%s'"
-#~ msgstr "Unbekanntes Log-Datei Element »%s« in »%s«"
-
-#~ msgid "Destination URLs are broken"
-#~ msgstr "Ziel-URLs sind kaputt"
-
-#~ msgid "Relocate can only change the repository part of an URL"
-#~ msgstr "Relocate kann nur den Projektarchivteil der URL ändern"
-
-#~ msgid "Cannot exclude current directory"
-#~ msgstr "Kann aktuelles Verzeichnis nicht exkludieren"
-
-#~ msgid "No fetch_func supplied to update_editor"
-#~ msgstr "Keine Angabe von fetch_func für update_editor"
-
-#~ msgid "Bad copyfrom arguments received"
-#~ msgstr "Falsche Parameter »kopieren von« erhalten"
-
-#~ msgid "Corrupt working copy: '%s' in directory '%s' has an invalid schedule"
-#~ msgstr "Beschädigte Arbeitskopie: »%s« im Verzeichnis »%s« hat einen ungültigen Plan"
-
-#~ msgid "Missing 'right' attribute in '%s'"
-#~ msgstr "Fehlendes »right« Attribut für »%s«"
-
-#~ msgid "Error reading administrative log file in '%s'"
-#~ msgstr "Fehler beim Lesen der administrativen Log-Dateien in »%s«"
-
-#~ msgid "Failed to add file '%s': an unversioned file of the same name already exists"
-#~ msgstr "Datei »%s« konnte nicht hinzugefügt werden: eine nicht versionierte Datei mit demselben Namen existiert bereits"
-
-#~ msgid ""
-#~ "specify automatic conflict resolution action\n"
-#~ " ('postpone', 'base', 'mine-conflict',\n"
-#~ " 'theirs-conflict', 'mine-full', 'theirs-full',\n"
-#~ " 'edit', 'launch')"
-#~ msgstr ""
-#~ "automatische Konfliktauflösungsaktion angeben\n"
-#~ " (»postpone«, »base«, »mine-conflict«,\n"
-#~ " »theirs-conflict«, »mine-full«, »theirs-full«,\n"
-#~ " »edit«, »launch«)"
-
-#~ msgid "mark revisions as merged (use with -r)"
-#~ msgstr ""
-#~ "Revisionen als zusammengeführt markieren (mit -r\n"
-#~ " verwenden)"
-
-#~ msgid " You have edited '%s' locally.\n"
-#~ msgstr " »%s« wurde lokal bearbeitet.\n"
-
-#~ msgid "Can't open file at '%s'"
-#~ msgstr "Kann Datei in »%s« nicht öffnen"
-
-#~ msgid "'%s' not versioned, and not exported\n"
-#~ msgstr "»%s« nicht versioniert und nicht exportiert\n"
-
-#~ msgid "Missing 'timestamp' attribute in '%s'"
-#~ msgstr "Fehlendes »timestamp« Attribut für »%s«"
-
-#~ msgid "Bad reason in tree conflict description"
-#~ msgstr "Fehlerhafter Wert von »reason« in Baumkonfliktbeschreibung"
-
-#~ msgid ""
-#~ "Base checksum mismatch on '%s':\n"
-#~ " expected: %s\n"
-#~ " actual: %s\n"
-#~ msgstr ""
-#~ "Prüfsummenfehler für »%s«:\n"
-#~ " Erwartet: %s\n"
-#~ " Tatsächlich: %s\n"
-
-#~ msgid "Use of an external editor to fetch log message is not supported on OS400; consider using the --message (-m) or --file (-F) options"
-#~ msgstr "Die Verwendung eines externen Editors zur Eingabe der Logmeldung wird auf OS400 nicht unterstützt. Verwenden Sie die Option --message (-m) oder --file (-F)"
-
-#~ msgid "No WC table entry"
-#~ msgstr "Kein AK-Tabelleneintrag"
-
-#~ msgid " The update attempted to edit '%s'.\n"
-#~ msgstr " Die Aktualisierung versuchte »%s« zu bearbeiten.\n"
-
-#~ msgid ".empty"
-#~ msgstr ".leer"
-
-#~ msgid ""
-#~ "ARG (some commands also take ARG1:ARG2 range)\n"
-#~ " A revision argument can be one of:\n"
-#~ " NUMBER revision number\n"
-#~ " '{' DATE '}' revision at start of the date\n"
-#~ " 'HEAD' latest in repository\n"
-#~ " 'BASE' base rev of item's working copy\n"
-#~ " 'COMMITTED' last commit at or before BASE\n"
-#~ " 'PREV' revision just before COMMITTED"
-#~ msgstr ""
-#~ "PAR (manche Befehle akzeptieren auch einen\n"
-#~ " Wertebereich PAR1:PAR2)\n"
-#~ " Ein Revisionsparameter kann sein:\n"
-#~ " NUMMER Revisionsnummer\n"
-#~ " »{«DATUM»}« Revision zum Startdatum\n"
-#~ " »HEAD« neueste Revision im Projektarchiv\n"
-#~ " »BASE« Basisrevision der Arbeitskopie\n"
-#~ " »COMMITTED« letzte übertragene Revision zu\n"
-#~ " oder vor BASE\n"
-#~ " »PREV« letzte Revision vor COMMITTED"
-
-# FIXME: s/on/of/?
-#~ msgid "Error getting file size on '%s'"
-#~ msgstr "Fehler beim Ermitteln der Dateigröße von »%s«"
-
-#~ msgid ""
-#~ "the change made by revision ARG (like -r ARG-1:ARG)\n"
-#~ " If ARG is negative this is like -r ARG:ARG-1"
-#~ msgstr ""
-#~ "Änderung stammt aus Revision PAR (wie\n"
-#~ " -r PAR-1:PAR). Falls PAR negativ ist,\n"
-#~ " gleichbedeutend zu -r PAR:PAR-1"
-
-#~ msgid "Checksum mismatch for '%s'; expected: '%s', actual: '%s'"
-#~ msgstr "Prüfsummenfehler für »%s«; erwartet: »%s«, tatsächlich: »%s«"
-
-#~ msgid "Target lists to diff may not contain both working copy paths and URLs"
-#~ msgstr "Ziellisten für Vergleiche dürfen nicht gleichzeitig Arbeitskopien und URLs enthalten"
-
-#~ msgid "Error parsing diff options"
-#~ msgstr "Fehler beim Zerlegen der Vergleichsoptionen"
-
-# CHECKME: I thought no full stop in error messages are used?
-#~ msgid "Parent(s) of '%s' should have repository information."
-#~ msgstr "Eltern von »%s« sollten Informationen über das Projektarchiv haben."
-
-#~ msgid ""
-#~ "Comment (%i lines):\n"
-#~ "%s\n"
-#~ msgstr ""
-#~ "Kommentar (%i Zeilen):\n"
-#~ "%s\n"
-
-#~ msgid "Error removing lock from entry for '%s'"
-#~ msgstr "Fehler beim Entfernen des Sperreintrags für »%s«"
-
-#~ msgid "Unable to make any directories"
-#~ msgstr "Kann keinerlei Verzeichnisse erzeugen"
-
-#~ msgid "Corrupt working copy: '%s' in directory '%s' (which is scheduled for addition) is not itself scheduled for addition"
-#~ msgstr ""
-#~ "Beschädigte Arbeitskopie: »%s« im Verzeichnis »%s« (welches zum Hinzufügen\n"
-#~ "eingeplant ist) ist selbst nicht zum Hinzufügen vorgesehen"
-
-#~ msgid "'%s' has no ancestry information"
-#~ msgstr "»%s« hat keine Informationen über seine Vorgänger"
-
-#~ msgid "Can't replace '%s' in deleted directory; try undeleting its parent directory first"
-#~ msgstr ""
-#~ "Kann »%s« in gelöschtem Verzeichnis nicht ersetzen; versuchen Sie zuerst,\n"
-#~ "das Löschen des Elternverzeichnisses rückgängig zu machen"
-
-#~ msgid "File '%s' in directory '%s' is not a versioned resource"
-#~ msgstr "Datei »%s« im Verzeichnis »%s« ist keine versionierte Ressource"
-
-#~ msgid "Modified: %s%s"
-#~ msgstr "Geändert: %s%s"
-
-# FIXME: Grammar depends on usage!!!!!!! (prepanded by "bei")
-#~ msgid "unknown operation"
-#~ msgstr "Unbekannter Operation"
-
-#~ msgid "Missing 'revision' attribute for '%s'"
-#~ msgstr "Fehlendes Revisions Attribut für »%s«"
-
-#~ msgid "No delimiter after 'node_kind' in tree conflict description"
-#~ msgstr "Kein Trenner nach »node_kind« in Baumkonfliktbeschreibung"
-
-#~ msgid "URL '%s' is not properly URI-encoded"
-#~ msgstr "URL »%s« ist nicht korrekt URI-kodiert"
-
-#~ msgid "No such thing as 'base' working copy properties!"
-#~ msgstr "Es gibt keine »base«-Eigenschaften der Arbeitskopie"
-
-#~ msgid "Can't convert string from CCSID '%i' to CCSID '%i'"
-#~ msgstr "Kann Zeichenkette nicht von CCSID »%i« nach CCSID »%i« konvertieren"
+msgstr "Nicht übertragenes lokal hinzugefügtes, kopiertes oder verschobenes Element%s"
diff --git a/subversion/po/es.po b/subversion/po/es.po
index c67fce8..796aae2 100644
--- a/subversion/po/es.po
+++ b/subversion/po/es.po
@@ -53,7 +53,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: subversion 1.7\n"
+"Project-Id-Version: subversion 1.8\n"
"Report-Msgid-Bugs-To: dev@subversion.apache.org\n"
"POT-Creation-Date: 2010-11-12 08:49-0600\n"
"PO-Revision-Date: 2009-02-19 14:22-0200\n"
@@ -13565,7 +13565,7 @@ msgstr ""
#~ " 'HEAD' lo último del repositorio\n"
#~ " 'BASE' rev base del ítem de la c. de trab.\n"
#~ " 'COMMITTED' último commit en o antes de BASE\n"
-#~ " 'PREV' revisión justo antes de COMMITED"
+#~ " 'PREV' revisión justo antes de COMMITTED"
#~ msgid "Can't open file '%s' for reading"
#~ msgstr "No se pudo abrir el archivo '%s' para leer"
diff --git a/subversion/po/fr.po b/subversion/po/fr.po
index 360e638..8f7c73c 100644
--- a/subversion/po/fr.po
+++ b/subversion/po/fr.po
@@ -22,10 +22,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: subversion 1.7\n"
+"Project-Id-Version: subversion 1.8\n"
"Report-Msgid-Bugs-To: dev@subversion.apache.org\n"
-"POT-Creation-Date: 2011-01-29 08:20-0400\n"
-"PO-Revision-Date: 2011-01-29 08:21-0400\n"
+"POT-Creation-Date: 2012-07-07 14:51+0200\n"
+"PO-Revision-Date: 2012-07-07 17:04+0200\n"
"Last-Translator: Subversion Developers <dev@subversion.tigris.org>\n"
"Language-Team: French <dev@subversion.tigris.org>\n"
"Language: fr\n"
@@ -114,7 +114,7 @@ msgstr ""
# to delete: supprimer
# to dump: décharger (préféré à sauvegarder, qui implique d'écrire qqpart)
# to store: sauvegarder
-# to switch: aiguiller, ré-aiguiller, permuter? changer?
+# to switch: basculer
# to drop: éliminer, ignorer
# to checkout: extraire, rapatrier, récupérer ?
# to lock: verrouiller
@@ -147,80 +147,80 @@ msgstr ""
#. Constructing nice error messages for roots.
#. Build an SVN_ERR_FS_NOT_FOUND error, with a detailed error text,
#. for PATH in ROOT. ROOT is of type svn_fs_root_t *.
-#: ../include/private/svn_fs_util.h:68
+#: ../include/private/svn_fs_util.h:77
#, c-format
msgid "File not found: transaction '%s', path '%s'"
msgstr "Fichier non trouvé : transaction '%s', chemin '%s'"
-#: ../include/private/svn_fs_util.h:73
+#: ../include/private/svn_fs_util.h:82
#, c-format
msgid "File not found: revision %ld, path '%s'"
msgstr "Fichier non trouvé : révision %ld, chemin '%s'"
#. Build a detailed `file already exists' message for PATH in ROOT.
#. ROOT is of type svn_fs_root_t *.
-#: ../include/private/svn_fs_util.h:84
+#: ../include/private/svn_fs_util.h:93
#, c-format
msgid "File already exists: filesystem '%s', transaction '%s', path '%s'"
msgstr "Fichier existe déjà : système de fichiers '%s', transaction '%s', chemin '%s'"
-#: ../include/private/svn_fs_util.h:89
+#: ../include/private/svn_fs_util.h:98
#, c-format
msgid "File already exists: filesystem '%s', revision %ld, path '%s'"
msgstr "Ficher existe déjà : système de fichiers '%s', révision %ld, chemin '%s'"
#. ROOT is of type svn_fs_root_t *.
-#: ../include/private/svn_fs_util.h:97
+#: ../include/private/svn_fs_util.h:106
msgid "Root object must be a transaction root"
msgstr "L'objet racine doit être une racine de transaction"
#. SVN_FS__ERR_NOT_MUTABLE: the caller attempted to change a node
#. outside of a transaction. FS is of type "svn_fs_t *".
-#: ../include/private/svn_fs_util.h:104
+#: ../include/private/svn_fs_util.h:113
#, c-format
msgid "File is not mutable: filesystem '%s', revision %ld, path '%s'"
msgstr "Fichier non altérable : système de fichiers '%s', révision %ld, chemin '%s'"
-#. FS is of type "svn fs_t *".
-#: ../include/private/svn_fs_util.h:111
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:120
#, c-format
msgid "'%s' is not a directory in filesystem '%s'"
msgstr "'%s' n'est pas un répertoire dans le système de fichiers '%s'"
-#. FS is of type "svn fs_t *".
-#: ../include/private/svn_fs_util.h:118
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:127
#, c-format
msgid "'%s' is not a file in filesystem '%s'"
msgstr "'%s' n'est pas un fichier dans le système de fichiers '%s'"
-#. FS is of type "svn fs_t *", LOCK is of type "svn_lock_t *".
-#: ../include/private/svn_fs_util.h:126
+#. FS is of type "svn_fs_t *", LOCK is of type "svn_lock_t *".
+#: ../include/private/svn_fs_util.h:135
#, c-format
msgid "Path '%s' is already locked by user '%s' in filesystem '%s'"
msgstr "Chemin '%s' déjà verrouillé par l'utilisateur '%s' dans le système de fichiers '%s'"
-#. FS is of type "svn fs_t *".
-#: ../include/private/svn_fs_util.h:133
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:142
#, c-format
msgid "No lock on path '%s' in filesystem '%s'"
msgstr "Pas de verrou sur '%s' dans le système de fichiers '%s'"
-#. FS is of type "svn fs_t *".
-#: ../include/private/svn_fs_util.h:140
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:149
#, c-format
msgid "Lock has expired: lock-token '%s' in filesystem '%s'"
msgstr "Verrou (lock) expiré : identifiant '%s' dans le système de fichiers '%s'"
-#. FS is of type "svn fs_t *".
-#: ../include/private/svn_fs_util.h:147
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:156
#, c-format
msgid "No username is currently associated with filesystem '%s'"
msgstr "Aucun utilisateur actuellement associé au système de fichiers '%s'"
#. SVN_FS__ERR_LOCK_OWNER_MISMATCH: trying to use a lock whose
#. LOCK_OWNER doesn't match the USERNAME associated with FS.
-#. FS is of type "svn fs_t *".
-#: ../include/private/svn_fs_util.h:156
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:165
#, c-format
msgid "User '%s' is trying to use a lock owned by '%s' in filesystem '%s'"
msgstr "L'utilisateur '%s' essaie d'utiliser un verrou posé par '%s' dans le système de fichiers '%s'"
@@ -261,7 +261,7 @@ msgstr "Le chemin n'est pas un descendant direct du répertoire spécifié"
msgid "Bogus UUID"
msgstr "UUID invalide"
-#: ../include/svn_error_codes.h:203 ../include/svn_error_codes.h:892
+#: ../include/svn_error_codes.h:203 ../include/svn_error_codes.h:915
msgid "Invalid configuration value"
msgstr "Valeur de configuration invalide"
@@ -285,1130 +285,1167 @@ msgstr "Valeur d'une chaîne de caractère inconnue pour un symbole"
msgid "Invalid changelist name"
msgstr "Nom de liste de changements invalide"
-#: ../include/svn_error_codes.h:231
+#: ../include/svn_error_codes.h:230
+msgid "Invalid atomic"
+msgstr "Atome invalide"
+
+#: ../include/svn_error_codes.h:236
msgid "No such XML tag attribute"
msgstr "Attribut d'étiquette XML invalide"
-#: ../include/svn_error_codes.h:235
+#: ../include/svn_error_codes.h:240
msgid "<delta-pkg> is missing ancestry"
msgstr "<delta-pkg> n'a pas d'ancêtre"
-#: ../include/svn_error_codes.h:239
+#: ../include/svn_error_codes.h:244
msgid "Unrecognized binary data encoding; can't decode"
msgstr "Encodage binaire non reconnu ; décodage impossible"
-#: ../include/svn_error_codes.h:243
+#: ../include/svn_error_codes.h:248
msgid "XML data was not well-formed"
msgstr "Données XML malformées"
-#: ../include/svn_error_codes.h:247
+#: ../include/svn_error_codes.h:252
msgid "Data cannot be safely XML-escaped"
msgstr "Une donnée ne peut être protégée sûrement dans du XML"
-#: ../include/svn_error_codes.h:253
+#: ../include/svn_error_codes.h:258
msgid "Inconsistent line ending style"
msgstr "Style de fin de ligne incohérent"
-#: ../include/svn_error_codes.h:257
+#: ../include/svn_error_codes.h:262
msgid "Unrecognized line ending style"
msgstr "Style de fin de ligne non reconnu"
-#: ../include/svn_error_codes.h:262
+#: ../include/svn_error_codes.h:267
msgid "Line endings other than expected"
msgstr "Fins de lignes différentes de ce qui est attendu"
-#: ../include/svn_error_codes.h:266
+#: ../include/svn_error_codes.h:271
msgid "Ran out of unique names"
msgstr "Plus de noms uniques disponibles"
-#: ../include/svn_error_codes.h:271
+#: ../include/svn_error_codes.h:276
msgid "Framing error in pipe protocol"
msgstr "Erreur de fenêtrage (framing) dans le protocole de pipeline (pipe)"
-#: ../include/svn_error_codes.h:276
+#: ../include/svn_error_codes.h:281
msgid "Read error in pipe"
msgstr "Erreur de lecture sur un pipeline (pipe)"
-#: ../include/svn_error_codes.h:280 ../libsvn_subr/cmdline.c:341
-#: ../libsvn_subr/cmdline.c:358 ../svn/util.c:926 ../svnlook/main.c:1807
+#: ../include/svn_error_codes.h:285 ../libsvn_subr/cmdline.c:352
+#: ../libsvn_subr/cmdline.c:375 ../svn/util.c:929 ../svnlook/main.c:1828
#, c-format
msgid "Write error"
msgstr "Erreur d'écriture"
-#: ../include/svn_error_codes.h:286
+#: ../include/svn_error_codes.h:290
+msgid "Write error in pipe"
+msgstr "Erreur en écriture sur un pipeline (pipe)"
+
+#: ../include/svn_error_codes.h:296
msgid "Unexpected EOF on stream"
msgstr "Fin de fichier (EOF) inattendue sur le flux"
-#: ../include/svn_error_codes.h:290
+#: ../include/svn_error_codes.h:300
msgid "Malformed stream data"
msgstr "Flux de données malformé"
-#: ../include/svn_error_codes.h:294
+#: ../include/svn_error_codes.h:304
msgid "Unrecognized stream data"
msgstr "Flux de données non reconnu"
-#: ../include/svn_error_codes.h:299
+#: ../include/svn_error_codes.h:309
msgid "Stream doesn't support seeking"
msgstr "Le flux n'accepte pas de déplacements arbitraires (seeking)"
-#: ../include/svn_error_codes.h:305
+#: ../include/svn_error_codes.h:315
msgid "Unknown svn_node_kind"
msgstr "svn_node_kind inconnu"
-#: ../include/svn_error_codes.h:309
+#: ../include/svn_error_codes.h:319
msgid "Unexpected node kind found"
msgstr "Type de nœud inattendu"
-#: ../include/svn_error_codes.h:315
+#: ../include/svn_error_codes.h:325
msgid "Can't find an entry"
msgstr "Entrée non trouvée"
-#: ../include/svn_error_codes.h:321
+#: ../include/svn_error_codes.h:331
msgid "Entry already exists"
msgstr "L'entrée existe déjà"
-#: ../include/svn_error_codes.h:325
+#: ../include/svn_error_codes.h:335
msgid "Entry has no revision"
msgstr "L'entrée n'a pas de révision"
-#: ../include/svn_error_codes.h:329
+#: ../include/svn_error_codes.h:339
msgid "Entry has no URL"
msgstr "L'entrée n'a pas d'URL"
-#: ../include/svn_error_codes.h:333
+#: ../include/svn_error_codes.h:343
msgid "Entry has an invalid attribute"
msgstr "L'entrée a un attribut invalide"
-#: ../include/svn_error_codes.h:337
+#: ../include/svn_error_codes.h:347
msgid "Can't create an entry for a forbidden name"
msgstr "Impossible de créer une entrée pour un nom interdit"
-#: ../include/svn_error_codes.h:343
+#: ../include/svn_error_codes.h:353
msgid "Obstructed update"
msgstr "Actualisation bloquée"
# Deprecated and unused, will be removed in the next major release.
# Retranscrit en dessous pour que `msgfmt --check-format` ne dise plus que ce
# n'est pas traduit
-#: ../include/svn_error_codes.h:348
+#: ../include/svn_error_codes.h:358
msgid "Mismatch popping the WC unwind stack"
msgstr "Mismatch popping the WC unwind stack"
# Deprecated and unused, will be removed in the next major release.
# Retranscrit en dessous pour que `msgfmt --check-format` ne dise plus que ce
# n'est pas traduit
-#: ../include/svn_error_codes.h:353
+#: ../include/svn_error_codes.h:363
msgid "Attempt to pop empty WC unwind stack"
msgstr "Attempt to pop empty WC unwind stack"
# Deprecated and unused, will be removed in the next major release.
# Retranscrit en dessous pour que `msgfmt --check-format` ne dise plus que ce
# n'est pas traduit
-#: ../include/svn_error_codes.h:358
+#: ../include/svn_error_codes.h:368
msgid "Attempt to unlock with non-empty unwind stack"
msgstr "Attempt to unlock with non-empty unwind stack"
-#: ../include/svn_error_codes.h:362
+#: ../include/svn_error_codes.h:372
msgid "Attempted to lock an already-locked dir"
msgstr "Tentative de verrouiller un répertoire déjà verrouillé"
-#: ../include/svn_error_codes.h:366
+#: ../include/svn_error_codes.h:376
msgid "Working copy not locked; this is probably a bug, please report"
msgstr "Copie de travail non verrouillée ; probablement un bug à rapporter"
-#: ../include/svn_error_codes.h:371
+#: ../include/svn_error_codes.h:381
msgid "Invalid lock"
msgstr "Verrou invalide"
-#: ../include/svn_error_codes.h:378
+#: ../include/svn_error_codes.h:387 ../include/svn_error_codes.h:393
msgid "Path is not a working copy directory"
msgstr "Le chemin n'est pas un répertoire d'une copie de travail"
-#: ../include/svn_error_codes.h:386
+#: ../include/svn_error_codes.h:397
msgid "Path is not a working copy file"
msgstr "Le chemin n'est pas un fichier d'une copie de travail"
-#: ../include/svn_error_codes.h:390
+#: ../include/svn_error_codes.h:401
msgid "Problem running log"
msgstr "Problème dans le journal"
-#: ../include/svn_error_codes.h:394
+#: ../include/svn_error_codes.h:405
msgid "Can't find a working copy path"
msgstr "Chemin d'une copie de travail non trouvé"
-#: ../include/svn_error_codes.h:398
+#: ../include/svn_error_codes.h:409
msgid "Working copy is not up-to-date"
msgstr "La copie de travail n'est pas à jour"
-#: ../include/svn_error_codes.h:402
+#: ../include/svn_error_codes.h:413
msgid "Left locally modified or unversioned files"
msgstr "Il reste des fichiers localement modifiés ou non versionnés"
-#: ../include/svn_error_codes.h:406
+#: ../include/svn_error_codes.h:417
msgid "Unmergeable scheduling requested on an entry"
msgstr "Programmation d'opérations conflituelles sur une entrée"
-#: ../include/svn_error_codes.h:410
+#: ../include/svn_error_codes.h:421
msgid "Found a working copy path"
msgstr "Trouvé un chemin dans une copie de travail"
-#: ../include/svn_error_codes.h:414
+#: ../include/svn_error_codes.h:425
msgid "A conflict in the working copy obstructs the current operation"
msgstr "Un conflit dans la copie de travail bloque l'opération courante"
-#: ../include/svn_error_codes.h:418
+#: ../include/svn_error_codes.h:429
msgid "Working copy is corrupt"
msgstr "La copie de travail est corrompue"
-#: ../include/svn_error_codes.h:422
+#: ../include/svn_error_codes.h:433
msgid "Working copy text base is corrupt"
msgstr "Le texte de référence de la copie de travail est corrompu"
-#: ../include/svn_error_codes.h:426
+#: ../include/svn_error_codes.h:437
msgid "Cannot change node kind"
msgstr "Type de nœud non modifiable"
-#: ../include/svn_error_codes.h:430
+#: ../include/svn_error_codes.h:441
msgid "Invalid operation on the current working directory"
msgstr "Opération invalide sur le répertoire courant"
-#: ../include/svn_error_codes.h:434
+#: ../include/svn_error_codes.h:445
msgid "Problem on first log entry in a working copy"
msgstr "Problème rencontré avec la première entrée du journal de la copie de travail"
-#: ../include/svn_error_codes.h:438
+#: ../include/svn_error_codes.h:449
msgid "Unsupported working copy format"
msgstr "Format de copie de travail non reconnu"
-#: ../include/svn_error_codes.h:442
+#: ../include/svn_error_codes.h:453
msgid "Path syntax not supported in this context"
msgstr "Syntaxe avec chemin non acceptée dans ce contexte"
-#: ../include/svn_error_codes.h:447
+#: ../include/svn_error_codes.h:458
msgid "Invalid schedule"
msgstr "Programmation invalide"
-#: ../include/svn_error_codes.h:452
+#: ../include/svn_error_codes.h:463
msgid "Invalid relocation"
msgstr "Relocalisation invalide"
-#: ../include/svn_error_codes.h:457
+#: ../include/svn_error_codes.h:468
msgid "Invalid switch"
-msgstr "Ré-aiguillage (switch) invalide"
+msgstr "Bascule (switch) invalide"
-#: ../include/svn_error_codes.h:462
+#: ../include/svn_error_codes.h:473
msgid "Changelist doesn't match"
msgstr "La liste de changements ne correspond pas"
-#: ../include/svn_error_codes.h:467
+#: ../include/svn_error_codes.h:478
msgid "Conflict resolution failed"
msgstr "Échec de la résolution de conflit"
-#: ../include/svn_error_codes.h:471
+#: ../include/svn_error_codes.h:482
msgid "Failed to locate 'copyfrom' path in working copy"
msgstr "Échec de la localisatio du chemin source 'copyfrom' dans la copie de travail"
-#: ../include/svn_error_codes.h:478
+#: ../include/svn_error_codes.h:490
msgid "Moving a path from one changelist to another"
msgstr "Déplacement d'un chemin d'une liste de changements (changelist) à une autre"
-#: ../include/svn_error_codes.h:483
+#: ../include/svn_error_codes.h:495
msgid "Cannot delete a file external"
msgstr "Impossible d'effacer un fichier externe"
-#: ../include/svn_error_codes.h:488
+#: ../include/svn_error_codes.h:500
msgid "Cannot move a file external"
msgstr "Impossible de déplacer un fichier externe"
-#: ../include/svn_error_codes.h:493
+#: ../include/svn_error_codes.h:505
msgid "Something's amiss with the wc sqlite database"
msgstr "Quelque chose ne va pas avec la base SQLite de la copie de travail"
-#: ../include/svn_error_codes.h:498
+#: ../include/svn_error_codes.h:510
msgid "The working copy is missing"
msgstr "La copie de travail est absente"
-#: ../include/svn_error_codes.h:503
+#: ../include/svn_error_codes.h:515
msgid "The specified node is not a symlink"
msgstr "Le nœud spécifiée n'est pas un lien symbolique"
-#: ../include/svn_error_codes.h:508
+#: ../include/svn_error_codes.h:520
msgid "The specified path has an unexpected status"
msgstr "Le chemin spécifié a un état inattendu"
-#: ../include/svn_error_codes.h:513
+#: ../include/svn_error_codes.h:525
msgid "The working copy needs to be upgraded"
msgstr "La copie de travail doit être remise à niveau"
-#: ../include/svn_error_codes.h:518
-msgid "Previous operation was interrupted; run 'svn cleanup'"
-msgstr "Opération précédente interrompue : lancer 'svn cleanup'"
+#: ../include/svn_error_codes.h:530
+msgid "Previous operation has not finished; run 'cleanup' if it was interrupted"
+msgstr "Opération précédente non finie : lancer 'svn cleanup' si interrompue"
+
+#: ../include/svn_error_codes.h:536
+msgid "The operation cannot be performed with the specified depth"
+msgstr "Cette opération ne peut être faite avec cette profondeur"
-#: ../include/svn_error_codes.h:523
-msgid "This operation can not be performed with just this depth."
-msgstr "Cette opération ne peut être faite avec cette profondeur là."
+#: ../include/svn_error_codes.h:541
+msgid "Couldn't open a working copy file because access was denied"
+msgstr "Permission refusée pour accéder à un fichier d'une copie de travail"
-#: ../include/svn_error_codes.h:529
+#: ../include/svn_error_codes.h:547
msgid "General filesystem error"
msgstr "Erreur générale du système de fichiers"
-#: ../include/svn_error_codes.h:533
+#: ../include/svn_error_codes.h:551
msgid "Error closing filesystem"
msgstr "Erreur à la fermeture du système de fichiers"
-#: ../include/svn_error_codes.h:537
+#: ../include/svn_error_codes.h:555
msgid "Filesystem is already open"
msgstr "Système de fichiers déjà ouvert"
-#: ../include/svn_error_codes.h:541
+#: ../include/svn_error_codes.h:559
msgid "Filesystem is not open"
msgstr "Système de fichiers non ouvert"
-#: ../include/svn_error_codes.h:545
+#: ../include/svn_error_codes.h:563
msgid "Filesystem is corrupt"
msgstr "Système de fichiers corrompu"
-#: ../include/svn_error_codes.h:549
+#: ../include/svn_error_codes.h:567
msgid "Invalid filesystem path syntax"
msgstr "Syntaxe du chemin dans le système de fichiers invalide"
-#: ../include/svn_error_codes.h:553
+#: ../include/svn_error_codes.h:571
msgid "Invalid filesystem revision number"
msgstr "Numéro de révision dans le système de fichiers invalide"
-#: ../include/svn_error_codes.h:557
+#: ../include/svn_error_codes.h:575
msgid "Invalid filesystem transaction name"
msgstr "Nom de transaction dans le système de fichiers invalide"
-#: ../include/svn_error_codes.h:561
+#: ../include/svn_error_codes.h:579
msgid "Filesystem directory has no such entry"
msgstr "Le répertoire dans le système de fichiers ne contient pas cette entrée"
-#: ../include/svn_error_codes.h:565
+#: ../include/svn_error_codes.h:583
msgid "Filesystem has no such representation"
msgstr "Le système de fichiers ne contient pas cette représentation"
-#: ../include/svn_error_codes.h:569
+#: ../include/svn_error_codes.h:587
msgid "Filesystem has no such string"
msgstr "Le système de fichiers n'a pas cette chaîne (string)"
-#: ../include/svn_error_codes.h:573
+#: ../include/svn_error_codes.h:591
msgid "Filesystem has no such copy"
msgstr "Le système de fichiers n'a pas cette copie"
-#: ../include/svn_error_codes.h:577
+#: ../include/svn_error_codes.h:595
msgid "The specified transaction is not mutable"
msgstr "La transaction spécifiée n'est pas modifiable"
-#: ../include/svn_error_codes.h:581
+#: ../include/svn_error_codes.h:599
msgid "Filesystem has no item"
msgstr "Le système de fichiers ne contient pas cet élément"
-#: ../include/svn_error_codes.h:585
+#: ../include/svn_error_codes.h:603
msgid "Filesystem has no such node-rev-id"
msgstr "Le système de fichiers ne contient pas cet identificateur de révision de nœud (node-rev-id)"
-#: ../include/svn_error_codes.h:589
+#: ../include/svn_error_codes.h:607
msgid "String does not represent a node or node-rev-id"
msgstr "La chaîne ne représente ni un nœud ni un identificateur de révision de nœud (node-rev-id)"
-#: ../include/svn_error_codes.h:593
+#: ../include/svn_error_codes.h:611
msgid "Name does not refer to a filesystem directory"
msgstr "Le nom ne réfère pas à un répertoire du système de fichiers"
-#: ../include/svn_error_codes.h:597
+#: ../include/svn_error_codes.h:615
msgid "Name does not refer to a filesystem file"
msgstr "Le nom ne réfère pas à un fichier du système de fichiers"
-#: ../include/svn_error_codes.h:601
+#: ../include/svn_error_codes.h:619
msgid "Name is not a single path component"
msgstr "Le nom n'est pas un composant simple de chemin"
-#: ../include/svn_error_codes.h:605
+#: ../include/svn_error_codes.h:623
msgid "Attempt to change immutable filesystem node"
msgstr "Tentative de changement d'un nœud non-modifiable du système de fichiers"
-#: ../include/svn_error_codes.h:609
+#: ../include/svn_error_codes.h:627
msgid "Item already exists in filesystem"
msgstr "L'élément exite déjà dans le système de fichiers"
-#: ../include/svn_error_codes.h:613
+#: ../include/svn_error_codes.h:631
msgid "Attempt to remove or recreate fs root dir"
msgstr "Tentative de suppression ou de recréation du répertoire racine du système de fichiers"
-#: ../include/svn_error_codes.h:617
+#: ../include/svn_error_codes.h:635
msgid "Object is not a transaction root"
msgstr "L'objet n'est pas une racine de transaction"
-#: ../include/svn_error_codes.h:621
+#: ../include/svn_error_codes.h:639
msgid "Object is not a revision root"
msgstr "L'objet n'est pas une racine de révision"
-#: ../include/svn_error_codes.h:625
+#: ../include/svn_error_codes.h:643
msgid "Merge conflict during commit"
msgstr "Fusion conflictuelle lors d'une propagation (commit)"
-#: ../include/svn_error_codes.h:629
+#: ../include/svn_error_codes.h:647
msgid "A representation vanished or changed between reads"
msgstr "Une représentation a disparu ou changé entre deux lectures"
-#: ../include/svn_error_codes.h:633
+#: ../include/svn_error_codes.h:651
msgid "Tried to change an immutable representation"
msgstr "Tentative de changement d'une représentation non-modifiable"
-#: ../include/svn_error_codes.h:637
+#: ../include/svn_error_codes.h:655
msgid "Malformed skeleton data"
msgstr "Données de squelette mal formées"
-#: ../include/svn_error_codes.h:641
+#: ../include/svn_error_codes.h:659
msgid "Transaction is out of date"
msgstr "La transaction est obsolète"
-#: ../include/svn_error_codes.h:645
+#: ../include/svn_error_codes.h:663
msgid "Berkeley DB error"
msgstr "Erreur de la base Berkeley"
-#: ../include/svn_error_codes.h:649
+#: ../include/svn_error_codes.h:667
msgid "Berkeley DB deadlock error"
msgstr "Erreur (étreinte fatale - deadlock) dans la base Berkeley"
-#: ../include/svn_error_codes.h:653
+#: ../include/svn_error_codes.h:671
msgid "Transaction is dead"
msgstr "Transaction morte"
-#: ../include/svn_error_codes.h:657
+#: ../include/svn_error_codes.h:675
msgid "Transaction is not dead"
msgstr "La transaction n'est pas morte"
-#: ../include/svn_error_codes.h:662
+#: ../include/svn_error_codes.h:680
msgid "Unknown FS type"
msgstr "Type de stockage de dépôt (FS) inconnu"
-#: ../include/svn_error_codes.h:667
+#: ../include/svn_error_codes.h:685
msgid "No user associated with filesystem"
msgstr "Aucun utilisateur associé au système de fichiers"
-#: ../include/svn_error_codes.h:672
+#: ../include/svn_error_codes.h:690
msgid "Path is already locked"
msgstr "Chemin déjà verrouillé"
-#: ../include/svn_error_codes.h:677 ../include/svn_error_codes.h:839
+#: ../include/svn_error_codes.h:695 ../include/svn_error_codes.h:862
msgid "Path is not locked"
msgstr "Le chemin n'est pas verrouillé"
-#: ../include/svn_error_codes.h:682
+#: ../include/svn_error_codes.h:700
msgid "Lock token is incorrect"
msgstr "Nom de verrou incorrect"
-#: ../include/svn_error_codes.h:687
+#: ../include/svn_error_codes.h:705
msgid "No lock token provided"
msgstr "Aucun nom de verrou fourni"
-#: ../include/svn_error_codes.h:692
+#: ../include/svn_error_codes.h:710
msgid "Username does not match lock owner"
msgstr "Le nom d'utilisateur ne correspond pas au propriétaire du verrou"
-#: ../include/svn_error_codes.h:697
+#: ../include/svn_error_codes.h:715
msgid "Filesystem has no such lock"
msgstr "Le système de fichiers n'a pas ce verrou"
-#: ../include/svn_error_codes.h:702
+#: ../include/svn_error_codes.h:720
msgid "Lock has expired"
msgstr "Verrou expiré"
-#: ../include/svn_error_codes.h:707 ../include/svn_error_codes.h:826
+#: ../include/svn_error_codes.h:725 ../include/svn_error_codes.h:849
msgid "Item is out of date"
msgstr "Élément obsolète"
-#: ../include/svn_error_codes.h:719
+#: ../include/svn_error_codes.h:737
msgid "Unsupported FS format"
msgstr "Format de stockage de dépôt (FS) non supporté"
-#: ../include/svn_error_codes.h:724
+#: ../include/svn_error_codes.h:742
msgid "Representation is being written"
msgstr "La représentation est en cours d'écriture"
-#: ../include/svn_error_codes.h:729
+#: ../include/svn_error_codes.h:747
msgid "The generated transaction name is too long"
msgstr "La nom généré pour la transaction est trop long"
-#: ../include/svn_error_codes.h:734
+#: ../include/svn_error_codes.h:752
msgid "Filesystem has no such node origin record"
msgstr "Le système de fichiers n'a pas d'enregistrement d'origine du nœud"
-#: ../include/svn_error_codes.h:739
+#: ../include/svn_error_codes.h:757
msgid "Filesystem upgrade is not supported"
msgstr "Mise à jour (upgrade) du système de fichiers non supportée"
-#: ../include/svn_error_codes.h:744
+#: ../include/svn_error_codes.h:762
msgid "Filesystem has no such checksum-representation index record"
msgstr "Le système de fichiers ne contient pas d'entrée d'index 'checksum-representation'"
-#: ../include/svn_error_codes.h:749
+#: ../include/svn_error_codes.h:767
msgid "Property value in filesystem differs from the provided base value"
msgstr "La valeur de la propriété dans le système de fichier diffère de la valeur de base fournie"
-#: ../include/svn_error_codes.h:756
+#: ../include/svn_error_codes.h:773
+msgid "The filesystem editor completion process was not followed"
+msgstr "Le processus de finalisation de l'éditeur du système de fichier n'a pas été suivi"
+
+#: ../include/svn_error_codes.h:779
msgid "The repository is locked, perhaps for db recovery"
msgstr "Dépôt verrouillé, peut-être un rétablissement (recovery) de base"
-#: ../include/svn_error_codes.h:760
+#: ../include/svn_error_codes.h:783
msgid "A repository hook failed"
msgstr "Échec d'une procédure automatique du dépôt"
-#: ../include/svn_error_codes.h:764
+#: ../include/svn_error_codes.h:787
msgid "Incorrect arguments supplied"
msgstr "Arguments fournis incorrects"
-#: ../include/svn_error_codes.h:768
+#: ../include/svn_error_codes.h:791
msgid "A report cannot be generated because no data was supplied"
msgstr "Un rapport ne peut être généré car aucune donnée n'a été fournie"
-#: ../include/svn_error_codes.h:772
+#: ../include/svn_error_codes.h:795
msgid "Bogus revision report"
msgstr "Rapport de révision invalide"
-#: ../include/svn_error_codes.h:781
+#: ../include/svn_error_codes.h:804
msgid "Unsupported repository version"
msgstr "Version de dépot non supportée"
-#: ../include/svn_error_codes.h:785
+#: ../include/svn_error_codes.h:808
msgid "Disabled repository feature"
msgstr "Fonction du dépôt désactivée"
-#: ../include/svn_error_codes.h:789
+#: ../include/svn_error_codes.h:812
msgid "Error running post-commit hook"
msgstr "Erreur de la procédure d'après propagation (post-commit hook)"
-#: ../include/svn_error_codes.h:794
+#: ../include/svn_error_codes.h:817
msgid "Error running post-lock hook"
msgstr "Erreur de la procédure d'après verrouillage (post-lock hook)"
-#: ../include/svn_error_codes.h:799
+#: ../include/svn_error_codes.h:822
msgid "Error running post-unlock hook"
msgstr "Erreur de la procédure de d'après déverrouillage (post-unlock hook)"
-#: ../include/svn_error_codes.h:804
+#: ../include/svn_error_codes.h:827
msgid "Repository upgrade is not supported"
msgstr "Mise à jour du dépôt (upgrade) non supportée"
-#: ../include/svn_error_codes.h:810
+#: ../include/svn_error_codes.h:833
msgid "Bad URL passed to RA layer"
msgstr "Mauvaise URL fournie à la couche RA"
-#: ../include/svn_error_codes.h:814
+#: ../include/svn_error_codes.h:837
msgid "Authorization failed"
msgstr "Autorisation refusée"
-#: ../include/svn_error_codes.h:818
+#: ../include/svn_error_codes.h:841
msgid "Unknown authorization method"
msgstr "Méthode d'autorisation inconnue"
-#: ../include/svn_error_codes.h:822
+#: ../include/svn_error_codes.h:845
msgid "Repository access method not implemented"
msgstr "Méthode d'accès au dépôt non implémentée"
-#: ../include/svn_error_codes.h:830
+#: ../include/svn_error_codes.h:853
msgid "Repository has no UUID"
msgstr "Le dépôt n'a pas d'identifiant unique (UUID)"
-#: ../include/svn_error_codes.h:834
+#: ../include/svn_error_codes.h:857
msgid "Unsupported RA plugin ABI version"
msgstr "Version du plugin RA (accès dépôt) ABI non supportée"
-#: ../include/svn_error_codes.h:844
+#: ../include/svn_error_codes.h:867
msgid "Server can only replay from the root of a repository"
msgstr "Le serveur peut seulement rejouer à la racine du dépôt"
-#: ../include/svn_error_codes.h:849
+#: ../include/svn_error_codes.h:872
msgid "Repository UUID does not match expected UUID"
msgstr "UUID du dépôt source différent de celui attendu"
-#: ../include/svn_error_codes.h:854
+#: ../include/svn_error_codes.h:877
msgid "Repository root URL does not match expected root URL"
msgstr "L'URL racine de dépôt ne correspondont pas à celle attendue"
-#: ../include/svn_error_codes.h:859
+#: ../include/svn_error_codes.h:882
msgid "Session URL does not match expected session URL"
msgstr "L'URL de la session ne correspond pas à celle attendue"
-#: ../include/svn_error_codes.h:865
+#: ../include/svn_error_codes.h:888
msgid "RA layer failed to init socket layer"
msgstr "La couche RA n'a pu initialiser la couche socket"
-#: ../include/svn_error_codes.h:869
+#: ../include/svn_error_codes.h:892
msgid "RA layer failed to create HTTP request"
msgstr "La couche RA n'a pu créer l'en-tête HTTP"
-#: ../include/svn_error_codes.h:873
+#: ../include/svn_error_codes.h:896
msgid "RA layer request failed"
msgstr "La requête de la couche RA a échoué"
-#: ../include/svn_error_codes.h:877
+#: ../include/svn_error_codes.h:900
msgid "RA layer didn't receive requested OPTIONS info"
msgstr "La couche RA n'a pas reçu les informations d'OPTIONS demandées"
-#: ../include/svn_error_codes.h:881
+#: ../include/svn_error_codes.h:904
msgid "RA layer failed to fetch properties"
msgstr "La couche RA n'a pu aller chercher les propriétés"
-#: ../include/svn_error_codes.h:885
+#: ../include/svn_error_codes.h:908
msgid "RA layer file already exists"
msgstr "Le fichier existe (couche RA)"
-#: ../include/svn_error_codes.h:899
+#: ../include/svn_error_codes.h:922
msgid "HTTP Path Not Found"
msgstr "Chemin HTTP non trouvé"
-#: ../include/svn_error_codes.h:903
+#: ../include/svn_error_codes.h:926
msgid "Failed to execute WebDAV PROPPATCH"
msgstr "Échec lors de l'exécution de WebDAV PROPPATCH"
-#: ../include/svn_error_codes.h:908 ../include/svn_error_codes.h:959
-#: ../libsvn_ra_svn/marshal.c:714 ../libsvn_ra_svn/marshal.c:832
-#: ../libsvn_ra_svn/marshal.c:859
+#: ../include/svn_error_codes.h:931 ../include/svn_error_codes.h:982
+#: ../libsvn_ra_svn/marshal.c:799 ../libsvn_ra_svn/marshal.c:917
+#: ../libsvn_ra_svn/marshal.c:944
msgid "Malformed network data"
msgstr "Donnée du réseau malformée"
-#: ../include/svn_error_codes.h:913
+#: ../include/svn_error_codes.h:936
msgid "Unable to extract data from response header"
msgstr "Impossible d'extraire les données de l'en-tête de réponse"
-#: ../include/svn_error_codes.h:918
+#: ../include/svn_error_codes.h:941
msgid "Repository has been moved"
msgstr "Le dépôt a été déplacé"
-#: ../include/svn_error_codes.h:923 ../libsvn_ra_serf/replay.c:844
-#: ../libsvn_ra_serf/update.c:2335 ../libsvn_ra_serf/util.c:690
+#: ../include/svn_error_codes.h:946 ../libsvn_ra_serf/replay.c:869
+#: ../libsvn_ra_serf/update.c:2453 ../libsvn_ra_serf/util.c:735
msgid "Connection timed out"
msgstr "Connection expirée"
-#: ../include/svn_error_codes.h:928
+#: ../include/svn_error_codes.h:951
msgid "URL access forbidden for unknown reason"
msgstr "Accès URL interdit pour une raison inconnue"
-#: ../include/svn_error_codes.h:934 ../include/svn_error_codes.h:963
+#: ../include/svn_error_codes.h:957 ../include/svn_error_codes.h:986
msgid "Couldn't find a repository"
msgstr "Impossible de trouver le dépôt"
-#: ../include/svn_error_codes.h:938
+#: ../include/svn_error_codes.h:961
msgid "Couldn't open a repository"
msgstr "Impossible d'ouvrir le dépôt"
-#: ../include/svn_error_codes.h:943
+#: ../include/svn_error_codes.h:966
msgid "Special code for wrapping server errors to report to client"
msgstr "Code spécial pour enpaqueter les erreurs du serveur vers le client"
-#: ../include/svn_error_codes.h:947
+#: ../include/svn_error_codes.h:970
msgid "Unknown svn protocol command"
msgstr "Commande du protocole svn inconnue"
-#: ../include/svn_error_codes.h:951
+#: ../include/svn_error_codes.h:974
msgid "Network connection closed unexpectedly"
msgstr "La connexion réseau a été fermée de façon inattendue"
-#: ../include/svn_error_codes.h:955
+#: ../include/svn_error_codes.h:978
msgid "Network read/write error"
msgstr "Erreur d'écriture/lecture réseau"
-#: ../include/svn_error_codes.h:967
+#: ../include/svn_error_codes.h:990
msgid "Client/server version mismatch"
msgstr "Versions client/serveur incompatibles"
-#: ../include/svn_error_codes.h:972
+#: ../include/svn_error_codes.h:995
msgid "Cannot negotiate authentication mechanism"
msgstr "Impossible de négocier de mécanisme d'authentification"
-#: ../include/svn_error_codes.h:977
+#: ../include/svn_error_codes.h:1000
msgid "Editor drive was aborted"
msgstr "Baton d'édition interrompu"
-#: ../include/svn_error_codes.h:983
+#: ../include/svn_error_codes.h:1006
msgid "Initialization of SSPI library failed"
msgstr "Échec à l'initialisation de la librairie SSPI"
-#: ../include/svn_error_codes.h:987
+#: ../include/svn_error_codes.h:1010
msgid "Server SSL certificate untrusted"
msgstr "Certificat SSL du serveur non reconnu"
-#: ../include/svn_error_codes.h:991
+#: ../include/svn_error_codes.h:1014
msgid "Initialization of the GSSAPI context failed"
msgstr "Échec à l'initialisation du contexte GSSAPI"
-#: ../include/svn_error_codes.h:996
+#: ../include/svn_error_codes.h:1019
msgid "While handling serf response:"
msgstr "En gérant la réponse 'serf' (librairie HTTP) :"
-#: ../include/svn_error_codes.h:1004
+#: ../include/svn_error_codes.h:1027
msgid "Credential data unavailable"
msgstr "Données d'identité (credentials) non disponibles"
-#: ../include/svn_error_codes.h:1008
+#: ../include/svn_error_codes.h:1031
msgid "No authentication provider available"
msgstr "Aucun fournisseur d'authentification disponible"
-#: ../include/svn_error_codes.h:1012
+#: ../include/svn_error_codes.h:1035
msgid "All authentication providers exhausted"
msgstr "Tous les fournisseurs d'authentifications sont épuisés"
-#: ../include/svn_error_codes.h:1016
+#: ../include/svn_error_codes.h:1039
msgid "Credentials not saved"
msgstr "Identité (credentials) non sauvegardée"
-#: ../include/svn_error_codes.h:1021
+#: ../include/svn_error_codes.h:1044
msgid "Authentication failed"
msgstr "Échec de l'authentification"
-#: ../include/svn_error_codes.h:1027
+#: ../include/svn_error_codes.h:1050
msgid "Read access denied for root of edit"
msgstr "Accès en lecture refusé pour la racine de l'édition"
-#: ../include/svn_error_codes.h:1032
+#: ../include/svn_error_codes.h:1055
msgid "Item is not readable"
msgstr "Éléments non accessibles en lecture"
-#: ../include/svn_error_codes.h:1037
+#: ../include/svn_error_codes.h:1060
msgid "Item is partially readable"
msgstr "Certains éléments non accessibles en lecture"
-#: ../include/svn_error_codes.h:1041
+#: ../include/svn_error_codes.h:1064
msgid "Invalid authz configuration"
msgstr "Configuration de authz invalide"
-#: ../include/svn_error_codes.h:1046
+#: ../include/svn_error_codes.h:1069
msgid "Item is not writable"
msgstr "Éléments non accessibles en écriture"
-#: ../include/svn_error_codes.h:1052
+#: ../include/svn_error_codes.h:1075
msgid "Svndiff data has invalid header"
msgstr "Les données de svndiff contiennent un en-tête invalide"
-#: ../include/svn_error_codes.h:1056
+#: ../include/svn_error_codes.h:1079
msgid "Svndiff data contains corrupt window"
msgstr "Les données de svndiff contiennent une fenêtre corrompue"
-#: ../include/svn_error_codes.h:1060
+#: ../include/svn_error_codes.h:1083
msgid "Svndiff data contains backward-sliding source view"
msgstr "Les données de 'svndiff' contiennent une vue source glissant en arrière"
-#: ../include/svn_error_codes.h:1064
+#: ../include/svn_error_codes.h:1087
msgid "Svndiff data contains invalid instruction"
msgstr "Les données de svndiff contiennent une instruction invalide"
-#: ../include/svn_error_codes.h:1068
+#: ../include/svn_error_codes.h:1091
msgid "Svndiff data ends unexpectedly"
msgstr "Les données de svndiff se terminent de façon inattendue"
-#: ../include/svn_error_codes.h:1072
+#: ../include/svn_error_codes.h:1095
msgid "Svndiff compressed data is invalid"
msgstr "Les données compressées de svndiff sont invalides"
-#: ../include/svn_error_codes.h:1078
+#: ../include/svn_error_codes.h:1101
msgid "Diff data source modified unexpectedly"
msgstr "Modification des données sources de diff inattendue"
-#: ../include/svn_error_codes.h:1084
+#: ../include/svn_error_codes.h:1107
msgid "Apache has no path to an SVN filesystem"
msgstr "Apache n'a pas de chemin vers un système de fichiers SVN"
-#: ../include/svn_error_codes.h:1088
+#: ../include/svn_error_codes.h:1111
msgid "Apache got a malformed URI"
msgstr "Apache a reçu une URI malformé"
-#: ../include/svn_error_codes.h:1092
+#: ../include/svn_error_codes.h:1115
msgid "Activity not found"
msgstr "Activité non trouvée"
-#: ../include/svn_error_codes.h:1096
+#: ../include/svn_error_codes.h:1119
msgid "Baseline incorrect"
msgstr "Ligne de base (baseline) incorrecte"
-#: ../include/svn_error_codes.h:1100
+#: ../include/svn_error_codes.h:1123
msgid "Input/output error"
msgstr "Erreur d'entrée/sortie"
-#: ../include/svn_error_codes.h:1106
+#: ../include/svn_error_codes.h:1129
msgid "A path under version control is needed for this operation"
msgstr "Un objet sous gestionnaire de version est nécessaire à cette opération"
-#: ../include/svn_error_codes.h:1110
+#: ../include/svn_error_codes.h:1133
msgid "Repository access is needed for this operation"
msgstr "L'accès au dépôt est nécessaire pour cette opération"
-#: ../include/svn_error_codes.h:1114
+#: ../include/svn_error_codes.h:1137
msgid "Bogus revision information given"
msgstr "Fausse information de révision donnée"
-#: ../include/svn_error_codes.h:1118
+#: ../include/svn_error_codes.h:1141
msgid "Attempting to commit to a URL more than once"
msgstr "Tentative de propager plus d'une fois à la même URL"
-#: ../include/svn_error_codes.h:1122
+#: ../include/svn_error_codes.h:1145
msgid "Operation does not apply to binary file"
msgstr "Opération non applicable à un fichier binaire"
-#: ../include/svn_error_codes.h:1128
+#: ../include/svn_error_codes.h:1151
msgid "Format of an svn:externals property was invalid"
msgstr "Format de la propriété svn:externals invalide"
-#: ../include/svn_error_codes.h:1132
+#: ../include/svn_error_codes.h:1155
msgid "Attempting restricted operation for modified resource"
msgstr "Tentative d'une opération protégée sur une ressource modifiée"
-#: ../include/svn_error_codes.h:1136
+#: ../include/svn_error_codes.h:1159
msgid "Operation does not apply to directory"
msgstr "Opération non applicable sur un répertoire"
-#: ../include/svn_error_codes.h:1140
+#: ../include/svn_error_codes.h:1163
msgid "Revision range is not allowed"
msgstr "Intervalle de révision non permise"
-#: ../include/svn_error_codes.h:1144
+#: ../include/svn_error_codes.h:1167
msgid "Inter-repository relocation not allowed"
msgstr "Relocalisation entre dépôts différents non permise"
-#: ../include/svn_error_codes.h:1148
+#: ../include/svn_error_codes.h:1171
msgid "Author name cannot contain a newline"
msgstr "Le nom d'auteur ne peut contenir un saut de ligne"
-#: ../include/svn_error_codes.h:1152
+#: ../include/svn_error_codes.h:1175
msgid "Bad property name"
msgstr "Mauvais nom de propriété"
-#: ../include/svn_error_codes.h:1157
+#: ../include/svn_error_codes.h:1180
msgid "Two versioned resources are unrelated"
msgstr "Les deux ressources versionnées ne sont pas apparentées"
-#: ../include/svn_error_codes.h:1162
+#: ../include/svn_error_codes.h:1185
msgid "Path has no lock token"
msgstr "Chemin sans verrou"
-#: ../include/svn_error_codes.h:1167
+#: ../include/svn_error_codes.h:1190
msgid "Operation does not support multiple sources"
msgstr "Opération ne supportant pas des sources multiples"
-#: ../include/svn_error_codes.h:1172
+#: ../include/svn_error_codes.h:1195
msgid "No versioned parent directories"
msgstr "Pas de répertoire parent versionné"
-#: ../include/svn_error_codes.h:1177
+#: ../include/svn_error_codes.h:1200 ../include/svn_error_codes.h:1220
msgid "Working copy and merge source not ready for reintegration"
msgstr "Copie de travail et source du merge non prêt pour une réintégration"
-#: ../include/svn_error_codes.h:1182
+#: ../include/svn_error_codes.h:1205
msgid "A file external cannot overwrite an existing versioned item"
msgstr "Une référence externe ne peut pas écraser un élément versionné existant"
-#: ../include/svn_error_codes.h:1187
+#: ../include/svn_error_codes.h:1210
msgid "Invalid path component strip count specified"
msgstr "Nombre de composant du chemin à enlever invalide"
-#: ../include/svn_error_codes.h:1192
+#: ../include/svn_error_codes.h:1215
msgid "Detected a cycle while processing the operation"
msgstr "Cycle détecté lors d'une opération"
-#: ../include/svn_error_codes.h:1198
+#: ../include/svn_error_codes.h:1225
+msgid "Invalid mergeinfo detected in merge target"
+msgstr "Information de fusion (mergeinfo) invalide détectée pour la cible"
+
+#: ../include/svn_error_codes.h:1230
+msgid "Can't perform this operation without a valid lock token"
+msgstr "Impossible de faire cette opération sans verrou valide"
+
+#: ../include/svn_error_codes.h:1235
+msgid "The operation is forbidden by the server"
+msgstr "Opération interdite par le serveur"
+
+#: ../include/svn_error_codes.h:1241
msgid "A problem occurred; see other errors for details"
msgstr "Une erreur est survenue ; voir les autres erreurs pour plus de détails"
-#: ../include/svn_error_codes.h:1202
+#: ../include/svn_error_codes.h:1245
msgid "Failure loading plugin"
msgstr "Erreur lors du chargement du plugin"
-#: ../include/svn_error_codes.h:1206
+#: ../include/svn_error_codes.h:1249
msgid "Malformed file"
msgstr "Fichier malformé"
-#: ../include/svn_error_codes.h:1210
+#: ../include/svn_error_codes.h:1253
msgid "Incomplete data"
msgstr "Données incomplètes"
-#: ../include/svn_error_codes.h:1214
+#: ../include/svn_error_codes.h:1257
msgid "Incorrect parameters given"
msgstr "Paramètres fournis incorrects"
-#: ../include/svn_error_codes.h:1218
+#: ../include/svn_error_codes.h:1261
msgid "Tried a versioning operation on an unversioned resource"
msgstr "Essai d'une opération sur une ressource non versionnée"
-#: ../include/svn_error_codes.h:1222
+#: ../include/svn_error_codes.h:1265
msgid "Test failed"
msgstr "Test échoué"
-#: ../include/svn_error_codes.h:1226
+#: ../include/svn_error_codes.h:1269
msgid "Trying to use an unsupported feature"
msgstr "Tentative d'utilisation d'une fonction non supportée"
-#: ../include/svn_error_codes.h:1230
+#: ../include/svn_error_codes.h:1273
msgid "Unexpected or unknown property kind"
msgstr "Type de propriété inattendu ou inconnu"
-#: ../include/svn_error_codes.h:1234
+#: ../include/svn_error_codes.h:1277
msgid "Illegal target for the requested operation"
msgstr "Cible illégale pour l'opération demandée"
-#: ../include/svn_error_codes.h:1238
+#: ../include/svn_error_codes.h:1281
msgid "MD5 checksum is missing"
msgstr "Somme de contrôle MD5 manquante"
-#: ../include/svn_error_codes.h:1242
+#: ../include/svn_error_codes.h:1285
msgid "Directory needs to be empty but is not"
msgstr "Un répertoire doit être vide mais ne l'est pas"
-#: ../include/svn_error_codes.h:1246
+#: ../include/svn_error_codes.h:1289
msgid "Error calling external program"
msgstr "Erreur lors de l'appel d'un programme externe"
-#: ../include/svn_error_codes.h:1250
+#: ../include/svn_error_codes.h:1293
msgid "Python exception has been set with the error"
msgstr "L'exception de Python a été levée avec l'erreur"
-#: ../include/svn_error_codes.h:1254
+#: ../include/svn_error_codes.h:1297
msgid "A checksum mismatch occurred"
msgstr "Sommes de contrôle différentes"
-#: ../include/svn_error_codes.h:1258
+#: ../include/svn_error_codes.h:1301
msgid "The operation was interrupted"
msgstr "Opération interrompue"
-#: ../include/svn_error_codes.h:1262
+#: ../include/svn_error_codes.h:1305
msgid "The specified diff option is not supported"
msgstr "L'option fournie à diff n'est pas supportée"
-#: ../include/svn_error_codes.h:1266
+#: ../include/svn_error_codes.h:1309
msgid "Property not found"
msgstr "Propriété non trouvée"
-#: ../include/svn_error_codes.h:1270
+#: ../include/svn_error_codes.h:1313
msgid "No auth file path available"
msgstr "Pas de chemin de fichier d'authentification (auth file) disponible"
-#: ../include/svn_error_codes.h:1275
+#: ../include/svn_error_codes.h:1318
msgid "Incompatible library version"
msgstr "Version de librairie incompatible"
-#: ../include/svn_error_codes.h:1280
+#: ../include/svn_error_codes.h:1323
msgid "Mergeinfo parse error"
msgstr "Mergeinfo : erreur de syntaxe"
-#: ../include/svn_error_codes.h:1285
+#: ../include/svn_error_codes.h:1328
msgid "Cease invocation of this API"
msgstr "Cesse l'invocation de cette API"
-#: ../include/svn_error_codes.h:1290
+#: ../include/svn_error_codes.h:1333
msgid "Error parsing revision number"
msgstr "Erreur de syntaxe sur le numéro révision"
-#: ../include/svn_error_codes.h:1295
+#: ../include/svn_error_codes.h:1338
msgid "Iteration terminated before completion"
msgstr "Itérations arrêtées avant la fin"
-#: ../include/svn_error_codes.h:1300
+#: ../include/svn_error_codes.h:1343
msgid "Unknown changelist"
msgstr "Liste de changements inconnue"
-#: ../include/svn_error_codes.h:1305
+#: ../include/svn_error_codes.h:1348
msgid "Reserved directory name in command line arguments"
msgstr "Nom de répertoire réservé en argument de la ligne de commande"
-#: ../include/svn_error_codes.h:1310
+#: ../include/svn_error_codes.h:1353
msgid "Inquiry about unknown capability"
msgstr "Demande concernant une capacité inconnue"
-#: ../include/svn_error_codes.h:1315
+#: ../include/svn_error_codes.h:1358
msgid "Test skipped"
msgstr "Test ignoré"
-#: ../include/svn_error_codes.h:1320
+#: ../include/svn_error_codes.h:1363
msgid "apr memcache library not available"
msgstr "La librairie APR memcache non disponible"
-#: ../include/svn_error_codes.h:1325
+#: ../include/svn_error_codes.h:1368
msgid "Couldn't perform atomic initialization"
msgstr "Impossible d'exécuter l'initialisation atomique"
-#: ../include/svn_error_codes.h:1330
+#: ../include/svn_error_codes.h:1373
msgid "SQLite error"
msgstr "Erreur SQLite"
-#: ../include/svn_error_codes.h:1335
+#: ../include/svn_error_codes.h:1378
msgid "Attempted to write to readonly SQLite db"
msgstr "Tentative d'écriture vers base SQLite en lecture seule"
-#: ../include/svn_error_codes.h:1340
+#: ../include/svn_error_codes.h:1385
msgid "Unsupported schema found in SQLite db"
msgstr "Schema non supporté dans une base SQLite"
-#: ../include/svn_error_codes.h:1345
+#: ../include/svn_error_codes.h:1390
msgid "The SQLite db is busy"
msgstr "La base SQLite est occupée"
-#: ../include/svn_error_codes.h:1350
+#: ../include/svn_error_codes.h:1395
msgid "SQLite busy at transaction rollback; resetting all busy SQLite statements to allow rollback"
msgstr "SQLite occupé à annuler une transaction ; remise à zéro des opérations SQLite pour le permettre"
-#: ../include/svn_error_codes.h:1357
+#: ../include/svn_error_codes.h:1401
+msgid "Constraint error in SQLite db"
+msgstr "Violation de contraintes dans une base SQLite"
+
+#: ../include/svn_error_codes.h:1406
+msgid "too many memcached servers configured"
+msgstr "Trop de serveurs de cache mémoire configurés"
+
+#: ../include/svn_error_codes.h:1412
msgid "Error parsing arguments"
msgstr "Erreur lors de l'analyse des arguments"
-#: ../include/svn_error_codes.h:1361
+#: ../include/svn_error_codes.h:1416
msgid "Not enough arguments provided"
msgstr "Nombre d'arguments insuffisant"
-#: ../include/svn_error_codes.h:1365
+#: ../include/svn_error_codes.h:1420
msgid "Mutually exclusive arguments specified"
msgstr "Arguments mutuellement exclusifs fournis"
-#: ../include/svn_error_codes.h:1369
+#: ../include/svn_error_codes.h:1424
msgid "Attempted command in administrative dir"
msgstr "Commande essayée sur un répertoire d'administration"
-#: ../include/svn_error_codes.h:1373
+#: ../include/svn_error_codes.h:1428
msgid "The log message file is under version control"
msgstr "Le fichier pour l'entrée du journal est sous gestionnaire de version"
-#: ../include/svn_error_codes.h:1377
+#: ../include/svn_error_codes.h:1432
msgid "The log message is a pathname"
msgstr "L'entrée du journal est un chemin de fichier"
-#: ../include/svn_error_codes.h:1381
+#: ../include/svn_error_codes.h:1436
msgid "Committing in directory scheduled for addition"
msgstr "Propagation dans un répertoire qui doit être ajouté"
-#: ../include/svn_error_codes.h:1385
+#: ../include/svn_error_codes.h:1440
msgid "No external editor available"
msgstr "Pas d'éditeur externe disponible"
-#: ../include/svn_error_codes.h:1389
+#: ../include/svn_error_codes.h:1444
msgid "Something is wrong with the log message's contents"
msgstr "Quelque chose ne va pas dans l'entrée du journal"
-#: ../include/svn_error_codes.h:1393
+#: ../include/svn_error_codes.h:1448
msgid "A log message was given where none was necessary"
msgstr "Message de journal fourni alors qu'aucun n'était nécessaire"
-#: ../include/svn_error_codes.h:1397
+#: ../include/svn_error_codes.h:1452
msgid "No external merge tool available"
msgstr "Aucun éditeur externe de fusion disponible"
-#: ../include/svn_error_codes.h:1401
+#: ../include/svn_error_codes.h:1456
msgid "Failed processing one or more externals definitions"
msgstr "Échec lors du traitement d'une ou plusieurs définitions externes"
-#: ../include/svn_error_codes.h:1407
+#: ../include/svn_error_codes.h:1462
msgid "Assertion failure"
msgstr "Échec de la vérification"
-#: ../include/svn_error_codes.h:1411
+#: ../include/svn_error_codes.h:1466
msgid "No non-tracing links found in the error chain"
msgstr "Aucun liens sans trances trouvés dans la chaîne d'erreurs"
-#: ../libsvn_auth_gnome_keyring/gnome_keyring.c:392
-#: ../libsvn_auth_gnome_keyring/gnome_keyring.c:447
-#: ../libsvn_auth_gnome_keyring/gnome_keyring.c:554
-#: ../libsvn_auth_gnome_keyring/gnome_keyring.c:610
+#: ../libsvn_auth_gnome_keyring/gnome_keyring.c:274
msgid "GNOME Keyring is locked and we are non-interactive"
msgstr "Porte-clef GNOME verrouillé, et nous sommes non interactif"
-#: ../libsvn_client/add.c:509
+#: ../libsvn_client/add.c:547
#, c-format
msgid "'%s' prevents creating parent of '%s'"
msgstr "'%s' empêche de créer le parent de '%s'"
-#: ../libsvn_client/add.c:535 ../libsvn_wc/adm_ops.c:874
-#: ../libsvn_wc/workqueue.c:1638 ../libsvn_wc/workqueue.c:1720
+#: ../libsvn_client/add.c:582 ../libsvn_wc/adm_ops.c:1106
+#, c-format
+msgid "'%s' is an existing item in conflict; please mark the conflict as resolved before adding a new item here"
+msgstr "'%s' est en conflit ; résoudre ce conflit avant d'ajouter un nouvel objet"
+
+#: ../libsvn_client/add.c:589 ../libsvn_wc/adm_ops.c:1061
+#: ../libsvn_wc/workqueue.c:904 ../libsvn_wc/workqueue.c:997
#, c-format
msgid "'%s' not found"
msgstr "'%s' pas trouvé"
-#: ../libsvn_client/add.c:540 ../libsvn_wc/adm_ops.c:567
-#: ../libsvn_wc/adm_ops.c:879
+#: ../libsvn_client/add.c:595 ../libsvn_wc/adm_ops.c:591
+#: ../libsvn_wc/adm_ops.c:1066
#, c-format
msgid "Unsupported node kind for path '%s'"
msgstr "Type de nœud non supporté pour le chemin '%s'"
-#: ../libsvn_client/add.c:582 ../libsvn_client/cmdline.c:268
-#: ../libsvn_subr/opt.c:878
+#: ../libsvn_client/add.c:645 ../libsvn_client/cmdline.c:400
+#: ../libsvn_subr/opt.c:929
#, c-format
msgid "'%s' ends in a reserved name"
msgstr "'%s' fini comme un mot réservé"
-#: ../libsvn_client/add.c:614 ../libsvn_client/changelist.c:118
-#: ../libsvn_client/changelist.c:169 ../libsvn_client/cleanup.c:56
-#: ../libsvn_client/cleanup.c:133 ../libsvn_client/commit.c:701
-#: ../libsvn_client/export.c:993 ../libsvn_client/patch.c:2747
-#: ../libsvn_client/relocate.c:222 ../libsvn_client/resolved.c:54
-#: ../libsvn_client/revert.c:134 ../libsvn_client/status.c:274
-#: ../libsvn_client/switch.c:332 ../libsvn_client/update.c:404
-#: ../svn/add-cmd.c:75 ../svn/changelist-cmd.c:80 ../svn/cleanup-cmd.c:68
-#: ../svn/export-cmd.c:93 ../svn/import-cmd.c:105 ../svn/patch-cmd.c:75
-#: ../svn/patch-cmd.c:87 ../svn/relocate-cmd.c:106 ../svn/resolve-cmd.c:105
-#: ../svn/resolved-cmd.c:75 ../svn/revert-cmd.c:76 ../svn/status-cmd.c:259
-#: ../svn/switch-cmd.c:150 ../svn/update-cmd.c:131 ../svn/upgrade-cmd.c:71
+#: ../libsvn_client/add.c:677 ../libsvn_client/changelist.c:65
+#: ../libsvn_client/changelist.c:104 ../libsvn_client/cleanup.c:56
+#: ../libsvn_client/cleanup.c:134 ../libsvn_client/commit.c:859
+#: ../libsvn_client/export.c:934 ../libsvn_client/patch.c:2955
+#: ../libsvn_client/relocate.c:233 ../libsvn_client/resolved.c:54
+#: ../libsvn_client/revert.c:135 ../libsvn_client/status.c:280
+#: ../libsvn_client/switch.c:394 ../libsvn_client/update.c:578
+#: ../svn/util.c:1396
#, c-format
msgid "'%s' is not a local path"
msgstr "'%s' n'est pas chemin local"
-#: ../libsvn_client/blame.c:397
+#: ../libsvn_client/add.c:816 ../libsvn_client/add.c:843
+#, c-format
+msgid "There is no valid uri above '%s'"
+msgstr "Il n'y a pas d'URI valide au dessus de '%s'"
+
+#: ../libsvn_client/blame.c:395
#, c-format
msgid "Cannot calculate blame information for binary file '%s'"
msgstr "Blame non calculable sur le fichier binaire '%s'"
-#: ../libsvn_client/blame.c:627
+#: ../libsvn_client/blame.c:626
msgid "Start revision must precede end revision"
msgstr "La révision de début doit précéder la révision de fin"
-#: ../libsvn_client/cat.c:74 ../libsvn_client/commit_util.c:1050
-#: ../libsvn_client/delete.c:65 ../libsvn_client/prop_commands.c:430
-#: ../libsvn_client/prop_commands.c:945 ../libsvn_client/prop_commands.c:1262
-#: ../libsvn_client/revisions.c:104 ../libsvn_wc/adm_ops.c:2004
-#: ../libsvn_wc/adm_ops.c:2038 ../libsvn_wc/copy.c:487
-#: ../libsvn_wc/entries.c:1289 ../libsvn_wc/entries.c:2488
-#: ../libsvn_wc/entries.c:2519 ../libsvn_wc/node.c:1270
-#: ../libsvn_wc/update_editor.c:4061
+#: ../libsvn_client/cat.c:75 ../libsvn_client/commit_util.c:611
+#: ../libsvn_client/delete.c:66 ../libsvn_client/prop_commands.c:837
+#: ../libsvn_client/prop_commands.c:1132 ../libsvn_client/revisions.c:104
+#: ../libsvn_wc/adm_ops.c:2587 ../libsvn_wc/adm_ops.c:2622
+#: ../libsvn_wc/copy.c:567 ../libsvn_wc/entries.c:1281
+#: ../libsvn_wc/entries.c:2588 ../libsvn_wc/entries.c:2619 ../svn/notify.c:999
#, c-format
msgid "'%s' is not under version control"
msgstr "'%s' n'est pas versionné"
-#: ../libsvn_client/cat.c:79
+#: ../libsvn_client/cat.c:80
#, c-format
msgid "'%s' refers to a directory"
msgstr "'%s' référence un répertoire"
-#: ../libsvn_client/cat.c:89
+#: ../libsvn_client/cat.c:90
#, c-format
msgid "'%s' has no base revision until it is committed"
msgstr "'%s' n'a pas de révision de base jusqu'à sa propagation (commit)"
-#: ../libsvn_client/cat.c:153 ../libsvn_client/export.c:263
+#: ../libsvn_client/cat.c:154 ../libsvn_client/export.c:386
msgid "(local)"
msgstr "(local)"
-#: ../libsvn_client/cat.c:236
+#: ../libsvn_client/cat.c:242
#, c-format
msgid "URL '%s' refers to a directory"
msgstr "L'URL '%s' référence un répertoire"
-#: ../libsvn_client/changelist.c:110
+#: ../libsvn_client/changelist.c:57
msgid "Target changelist name must not be empty"
msgstr "La liste de changements cible ne doit pas être vide"
-#: ../libsvn_client/checkout.c:161 ../libsvn_client/export.c:1164
+#: ../libsvn_client/checkout.c:112 ../libsvn_client/export.c:1129
#, c-format
msgid "URL '%s' doesn't exist"
msgstr "L'URL '%s' n'existe pas"
-#: ../libsvn_client/checkout.c:165
+#: ../libsvn_client/checkout.c:116
#, c-format
msgid "URL '%s' refers to a file, not a directory"
msgstr "L'URL '%s' désigne un fichier et non un répertoire"
-#: ../libsvn_client/checkout.c:201
+#: ../libsvn_client/checkout.c:150
#, c-format
-msgid "'%s' is already a working copy for a different URL; use 'svn update' to update it"
-msgstr "'%s' est déjà une copie de travail pour une autre URL ; utiliser 'svn update' pour la mettre à jour"
+msgid "'%s' is already a working copy for a different URL"
+msgstr "'%s' est déjà une copie de travail pour une autre URL"
-#: ../libsvn_client/checkout.c:209
+#: ../libsvn_client/checkout.c:158
#, c-format
msgid "'%s' already exists and is not a directory"
msgstr "'%s' existe déjà et n'est pas un répertoire"
@@ -1423,166 +1460,193 @@ msgstr "URL relative invalide '%s'"
msgid "All non-relative targets must have the same root URL"
msgstr "Toutes les cibles non-négatives doivent avoir la même URL racine"
-#: ../libsvn_client/commit.c:433
+#: ../libsvn_client/cmdline.c:357
+msgid "Resolving '^/': no repository root found in the target arguments or in the current directory"
+msgstr "Résolution de '^/' : racine du dépôt non trouvée pour les arguments cible ou pour le répertoire courant"
+
+#: ../libsvn_client/commit.c:153
+#, c-format
+msgid "%s property on '%s' contains unrecognized EOL-style '%s'"
+msgstr "La propriété %s sur '%s' contient un style de fin de ligne inconnu '%s' "
+
+#: ../libsvn_client/commit.c:470
#, c-format
msgid "Unknown or unversionable type for '%s'"
msgstr "Type non versionnable ou inconnu pour '%s'"
-#: ../libsvn_client/commit.c:538
+#: ../libsvn_client/commit.c:670
msgid "New entry name required when importing a file"
msgstr "Nouveau nom d'entrée requis lors de l'importation d'un fichier"
-#: ../libsvn_client/commit.c:573 ../libsvn_client/patch.c:2752
-#: ../libsvn_client/patch.c:2760 ../libsvn_wc/adm_ops.c:562
-#: ../libsvn_wc/lock.c:140 ../libsvn_wc/wc_db_pdh.c:64
+#: ../libsvn_client/commit.c:719 ../libsvn_client/patch.c:2962
+#: ../libsvn_client/patch.c:2974 ../libsvn_wc/adm_ops.c:586
+#: ../libsvn_wc/lock.c:119 ../libsvn_wc/wc_db_wcroot.c:74
#, c-format
msgid "'%s' does not exist"
msgstr "'%s' n'existe pas"
-#: ../libsvn_client/commit.c:655 ../libsvn_client/copy.c:481
-#: ../libsvn_client/merge.c:9119 ../libsvn_client/merge.c:10376
-#: ../libsvn_client/merge.c:10651 ../svnlook/main.c:1412
-#, c-format
-msgid "Path '%s' does not exist"
-msgstr "Le chemin '%s' n'existe pas"
-
-#: ../libsvn_client/commit.c:793 ../libsvn_client/copy.c:492
-#: ../libsvn_client/copy.c:1022 ../libsvn_client/copy.c:1245
-#: ../libsvn_client/copy.c:1860
+#: ../libsvn_client/commit.c:907 ../libsvn_client/copy.c:437
+#: ../libsvn_client/copy.c:957 ../libsvn_client/copy.c:1207
+#: ../libsvn_client/copy.c:1821
#, c-format
msgid "Path '%s' already exists"
msgstr "Le chemin '%s' existe déjà"
-#: ../libsvn_client/commit.c:808
+#: ../libsvn_client/commit.c:952
#, c-format
msgid "'%s' is a reserved name and cannot be imported"
msgstr "'%s' est un nom réservé et ne peut être importé"
-#: ../libsvn_client/commit.c:846 ../libsvn_client/copy.c:1402
+#: ../libsvn_client/commit.c:1002 ../libsvn_client/copy.c:1403
msgid "Commit failed (details follow):"
msgstr "Échec de la propagation (commit), détails : "
-#: ../libsvn_client/commit.c:854
+#: ../libsvn_client/commit.c:1010
msgid "Commit succeeded, but other errors follow:"
msgstr "Succès de la propagation (commit), mais erreurs : "
-#: ../libsvn_client/commit.c:861
+#: ../libsvn_client/commit.c:1017
msgid "Error unlocking locked dirs (details follow):"
msgstr "Erreur en déverrouillant des répertoires verrouillés, détails :"
-#: ../libsvn_client/commit.c:872
+#: ../libsvn_client/commit.c:1028
msgid "Error bumping revisions post-commit (details follow):"
msgstr "Erreur en incrémentant les révisions après la propagation (post-commit), détails :"
-#: ../libsvn_client/commit.c:966
-msgid "Are all targets part of the same working copy?"
-msgstr "Les cibles font-elles parties de la même copie de travail ?"
-
-#: ../libsvn_client/commit.c:1005
-msgid "Cannot non-recursively commit a directory deletion of a directory with child nodes"
-msgstr "Propagation non récursive de la suppression d'un répertoire avec des sous répertoires impossible"
+#: ../libsvn_client/commit.c:1154
+#, c-format
+msgid "Cannot delete the directory '%s' in a non-recursive commit because it has children"
+msgstr "Impossible d'effacer le répertoire '%s' avec une propagation (commit) non récursive, parce qu'il a des sous-répertoires"
-#: ../libsvn_client/commit.c:1055 ../svn/commit-cmd.c:72
+#: ../libsvn_client/commit.c:1470
#, c-format
msgid "'%s' is a URL, but URLs cannot be commit targets"
msgstr "Une URL '%s' ne peut être la cible d'une propagation (commit)"
-#: ../libsvn_client/commit_util.c:63 ../libsvn_repos/commit.c:133
+#: ../libsvn_client/commit.c:1582
+msgid ""
+"Commit can only commit to a single repository at a time.\n"
+"Are all targets part of the same working copy?"
+msgstr ""
+"Une propagation (commit) ne peut affecter qu'un seul dépôt à la fois.\n"
+"Les cibles sont-elles toutes dans la même copie de travail ?"
+
+#: ../libsvn_client/commit.c:1697
+#, c-format
+msgid "Cannot commit '%s' because it was moved from '%s' which is not part of the commit; both sides of the move must be committed together"
+msgstr "Impossible de propager (commit) '%s' parce qu'il a été déplacé de '%s' qui ne fait pas partie de cette propagation ; Les deux parties du déplacement doivent être propagées (commit) ensembles"
+
+#: ../libsvn_client/commit.c:1727
+#, c-format
+msgid "Cannot commit '%s' because it was moved to '%s' which is not part of the commit; both sides of the move must be committed together"
+msgstr "Impossible de propager (commit) '%s' parce qu'il a été déplacé en '%s' qui ne fait pas partie de cette propagation ; Les deux parties du déplacement doivent être propagées (commit) ensembles"
+
+#: ../libsvn_client/commit_util.c:94 ../libsvn_repos/commit.c:164
#, c-format
msgid "Directory '%s' is out of date"
msgstr "Répertoire '%s' obsolète"
-#: ../libsvn_client/commit_util.c:64 ../libsvn_repos/commit.c:135
+#: ../libsvn_client/commit_util.c:95 ../libsvn_repos/commit.c:166
#, c-format
msgid "File '%s' is out of date"
msgstr "Fichier '%s' obsolète"
-#: ../libsvn_client/commit_util.c:289 ../libsvn_client/commit_util.c:491
-#: ../libsvn_client/commit_util.c:1044
+#: ../libsvn_client/commit_util.c:130
#, c-format
-msgid "Aborting commit: '%s' remains in conflict"
-msgstr "Arrêt de la propagation : '%s' demeure en conflit"
+msgid "Directory '%s' is locked in another working copy"
+msgstr "'%s' est verrouillé dans une autre copie de travail"
-#: ../libsvn_client/commit_util.c:331
+#: ../libsvn_client/commit_util.c:131
#, c-format
-msgid "Aborting commit: '%s' remains in tree-conflict"
-msgstr "Arrêt de la propagation : '%s' demeure en conflit arborescent"
+msgid "File '%s' is locked in another working copy"
+msgstr "Fichier '%s' est verrouillé dans une autre copie de travail"
-#: ../libsvn_client/commit_util.c:426 ../libsvn_client/commit_util.c:442
+#: ../libsvn_client/commit_util.c:166
#, c-format
-msgid "Unknown entry kind for '%s'"
-msgstr "Type d'entrée inconnu pour '%s'"
+msgid "Changing directory '%s' is forbidden by the server"
+msgstr "Modifier le répertoire '%s' est interdit par le serveur"
-#: ../libsvn_client/commit_util.c:470
+#: ../libsvn_client/commit_util.c:167
#, c-format
-msgid "Entry '%s' has unexpectedly changed special status"
-msgstr "L'entrée '%s' a changé de statut spécial de façon inattendue"
+msgid "Changing file '%s' is forbidden by the server"
+msgstr "Modifier le fichier '%s' est interdit par le serveur"
-#: ../libsvn_client/commit_util.c:666
+#: ../libsvn_client/commit_util.c:318
#, c-format
-msgid "'%s' is scheduled for addition, but is missing"
-msgstr "'%s' doit être ajouté, mais n'existe pas"
+msgid "Aborting commit: '%s' remains in tree-conflict"
+msgstr "Arrêt de la propagation : '%s' demeure en conflit arborescent"
-#: ../libsvn_client/commit_util.c:947
+#: ../libsvn_client/commit_util.c:667
#, c-format
-msgid "'%s' is not under version control and is not part of the commit, yet its child '%s' is part of the commit"
-msgstr "'%s' n'est pas sous gestionnaire de version et ne fait pas partie de la propagation (commit), alors que son enfant '%s' en fait partie"
+msgid "Aborting commit: '%s' remains in conflict"
+msgstr "Arrêt de la propagation : '%s' demeure en conflit"
-#: ../libsvn_client/commit_util.c:1064 ../libsvn_client/url.c:198
+#: ../libsvn_client/commit_util.c:686
#, c-format
-msgid "Entry for '%s' has no URL"
-msgstr "L'entrée pour '%s' n'a pas d'URL associée"
+msgid "Node '%s' has unexpectedly changed kind"
+msgstr "Le nœud '%s' a changé de type de manière inattendue"
+
+#: ../libsvn_client/commit_util.c:727
+#, c-format
+msgid "'%s' is scheduled for addition, but is missing"
+msgstr "'%s' doit être ajouté, mais n'existe pas"
-#: ../libsvn_client/commit_util.c:1081
+#: ../libsvn_client/commit_util.c:1201
#, c-format
-msgid "'%s' is scheduled for addition within unversioned parent"
-msgstr "'%s' doit être ajouté dans un répertoire non versionné"
+msgid "'%s' is not known to exist in the repository and is not part of the commit, yet its child '%s' is part of the commit"
+msgstr "'%s' n'existe pas dans le dépôt et ne fait pas partie de la propagation (commit), alors que son descendant '%s' en fait partie"
-#: ../libsvn_client/commit_util.c:1222
+#: ../libsvn_client/commit_util.c:1339
#, c-format
msgid "Cannot commit both '%s' and '%s' as they refer to the same URL"
msgstr "'%s' et '%s' réfèrent à la même URL et ne peuvent être propagés (commit) ensemble"
-#: ../libsvn_client/commit_util.c:1379
+#: ../libsvn_client/commit_util.c:1491
#, c-format
msgid "Commit item '%s' has copy flag but no copyfrom URL"
msgstr "L'élément de propagation '%s' marqué pour copie sans URL d'origine (copyfrom)"
-#: ../libsvn_client/commit_util.c:1384
+#: ../libsvn_client/commit_util.c:1496
#, c-format
msgid "Commit item '%s' has copy flag but an invalid revision"
msgstr "L'élément de propagation '%s' marqué pour copie avec une révision invalide"
-#: ../libsvn_client/commit_util.c:2092
+#: ../libsvn_client/commit_util.c:1960
msgid "Standard properties can't be set explicitly as revision properties"
msgstr "Les propriétés standards ne peuvent être définies explicitement comme des propriétés de révision"
-#: ../libsvn_client/copy.c:510 ../libsvn_client/copy.c:1876
+#: ../libsvn_client/copy.c:386 ../libsvn_client/merge.c:9378
+#: ../svnlook/main.c:1431
+#, c-format
+msgid "Path '%s' does not exist"
+msgstr "Le chemin '%s' n'existe pas"
+
+#: ../libsvn_client/copy.c:466 ../libsvn_client/copy.c:1837
#, c-format
msgid "Path '%s' is not a directory"
msgstr "Le chemin '%s' n'est pas un répertoire"
-#: ../libsvn_client/copy.c:679 ../libsvn_client/copy.c:720
+#: ../libsvn_client/copy.c:635 ../libsvn_client/copy.c:676
#, c-format
msgid "Path '%s' already exists, but is not a directory"
msgstr "Le chemin '%s' existe déjà, mais n'est pas un répertoire"
-#: ../libsvn_client/copy.c:785
-msgid "Source and destination URLs appear not to all point to the same repository."
+#: ../libsvn_client/copy.c:738
+msgid "Source and destination URLs appear not to point to the same repository."
msgstr "Les URL source et destination ne semblent pas être dans le même dépôt."
-#: ../libsvn_client/copy.c:1010 ../libsvn_client/prop_commands.c:230
+#: ../libsvn_client/copy.c:947 ../libsvn_client/prop_commands.c:190
#, c-format
msgid "Path '%s' does not exist in revision %ld"
msgstr "Le chemin '%s' n'existe pas à la révision %ld"
-#: ../libsvn_client/copy.c:1536
+#: ../libsvn_client/copy.c:1542
#, c-format
msgid "Source URL '%s' is from foreign repository; leaving it as a disjoint WC"
msgstr "L'URL source '%s' est dans un dépôt distant ; laissée comme une copie disjointe"
-#: ../libsvn_client/copy.c:1638 ../libsvn_client/copy.c:1650
-#: ../libsvn_wc/adm_ops.c:934 ../libsvn_wc/copy.c:582
+#: ../libsvn_client/copy.c:1637 ../libsvn_client/copy.c:1650
+#: ../libsvn_wc/adm_ops.c:1134 ../libsvn_wc/copy.c:690
#, c-format
msgid "'%s' is already under version control"
msgstr "'%s' est déjà sous gestionnaire de version"
@@ -1592,286 +1656,290 @@ msgstr "'%s' est déjà sous gestionnaire de version"
msgid "Entry for '%s' exists (though the working file is missing)"
msgstr "L'entrée pour '%s' existe (mais la copie locale manque)"
-#: ../libsvn_client/copy.c:1844
+#: ../libsvn_client/copy.c:1805
#, c-format
msgid "Path '%s' not found in revision %ld"
msgstr "Chemin '%s' non trouvé à la révision %ld"
-#: ../libsvn_client/copy.c:1849
+#: ../libsvn_client/copy.c:1810
#, c-format
msgid "Path '%s' not found in head revision"
msgstr "Chemin '%s' non trouvé à la révision de tête"
-#: ../libsvn_client/copy.c:1971
+#: ../libsvn_client/copy.c:1927
msgid "Cannot mix repository and working copy sources"
msgstr "Impossible de mélanger des sources du dépôt et de la copie de travail"
-#: ../libsvn_client/copy.c:2023
+#: ../libsvn_client/copy.c:1979
#, c-format
msgid "Cannot copy path '%s' into its own child '%s'"
-msgstr "Le chemin '%s' ne peut être copié dans son propre enfant '%s'"
+msgstr "Le chemin '%s' ne peut être copié dans son propre descendant '%s'"
-#: ../libsvn_client/copy.c:2055
+#: ../libsvn_client/copy.c:2015
#, c-format
-msgid "Cannot move the file external at '%s'; please propedit the svn:externals description that created it"
-msgstr "Impossible de déplacer le fichier externe '%s' ; Éditer la propriété svn:externals qui l'a créé."
+msgid "Cannot move the external at '%s'; please edit the svn:externals property on '%s'."
+msgstr "Impossible de déplacer le fichier externe '%s' ; Éditer la propriété svn:externals sur '%s'."
-#: ../libsvn_client/copy.c:2070
+#: ../libsvn_client/copy.c:2030
msgid "Moves between the working copy and the repository are not supported"
msgstr "Les déplacements (move) entre copie de travail et dépôt ne sont pas supportés"
-#: ../libsvn_client/copy.c:2085
+#: ../libsvn_client/copy.c:2045
#, c-format
msgid "Cannot move URL '%s' into itself"
msgstr "L'URL '%s' ne peut être déplacée (move) dans elle-même"
-#: ../libsvn_client/copy.c:2086
+#: ../libsvn_client/copy.c:2046
#, c-format
msgid "Cannot move path '%s' into itself"
msgstr "Le chemin '%s' ne peut être déplacé dans lui-même"
-#: ../libsvn_client/copy.c:2157
+#: ../libsvn_client/copy.c:2113
#, c-format
msgid "'%s' does not have a URL associated with it"
msgstr "'%s' n'a pas d'URL associée"
-#: ../libsvn_client/delete.c:60
+#: ../libsvn_client/delete.c:61
#, c-format
msgid "'%s' is in the way of the resource actually under version control"
msgstr "'%s' obstrue le chemin de la ressource actuellement sous contrôle de version"
-#: ../libsvn_client/delete.c:75
+#: ../libsvn_client/delete.c:76
#, c-format
msgid "'%s' has local modifications -- commit or revert them first"
msgstr "'%s' a des modifications locales -- les confirmer (commit) ou les annuler (revert) d'abord"
-#: ../libsvn_client/delete.c:105
-#, c-format
-msgid "Cannot remove the file external at '%s'; please propedit or propdel the svn:externals description that created it"
-msgstr "Impossible d'effacer la référence externe '%s' ; Éditer ou effacer la propriété svn:externals qui l'a créé"
-
-#: ../libsvn_client/delete.c:230
+#: ../libsvn_client/delete.c:109
#, c-format
-msgid "URL '%s' does not exist"
-msgstr "L'URL '%s' n'existe pas"
+msgid "Cannot remove the external at '%s'; please edit or delete the svn:externals property on '%s'"
+msgstr "Impossible d'effacer la référence externe '%s' ; Éditer ou effacer la propriété svn:externals sur '%s'"
-#: ../libsvn_client/deprecated.c:714 ../svn/move-cmd.c:65
+#: ../libsvn_client/deprecated.c:808 ../svn/move-cmd.c:65
msgid "Cannot specify revisions (except HEAD) with move operations"
msgstr "L'opération 'move' n'accepte d'autre révision que HEAD"
-#: ../libsvn_client/deprecated.c:1331
+#: ../libsvn_client/deprecated.c:1496
msgid "No commits in repository"
msgstr "Pas de propagation dans le dépôt"
-#: ../libsvn_client/deprecated.c:2110 ../libsvn_wc/deprecated.c:3370
+#: ../libsvn_client/deprecated.c:2648 ../libsvn_wc/deprecated.c:3879
msgid "Non-recursive relocation not supported"
msgstr "Relocalisation non récursive pas permise"
-#: ../libsvn_client/diff.c:136
+#: ../libsvn_client/diff.c:114
#, c-format
msgid " Reverse-merged %s:r%s%s"
msgstr " Fusion-arrière %s:r%s%s"
-#: ../libsvn_client/diff.c:151
+#: ../libsvn_client/diff.c:131
#, c-format
msgid " Merged %s:r%s%s"
msgstr " Fusionné %s:r%s%s"
-#: ../libsvn_client/diff.c:161 ../libsvn_diff/diff_file.c:1227
-#: ../libsvn_diff/diff_file.c:1243
+#: ../libsvn_client/diff.c:142 ../libsvn_diff/diff_file.c:1796
+#: ../libsvn_diff/diff_file.c:1812
#, c-format
msgid "Path '%s' must be an immediate child of the directory '%s'"
msgstr "Le chemin '%s' doit être un descendant direct du répertoire '%s'"
-#: ../libsvn_client/diff.c:359
+#: ../libsvn_client/diff.c:349
#, c-format
msgid "%s\t(revision %ld)"
msgstr "%s\t(révision %ld)"
-#: ../libsvn_client/diff.c:361
+#: ../libsvn_client/diff.c:351
#, c-format
msgid "%s\t(working copy)"
msgstr "%s\t(copie de travail)"
-#: ../libsvn_client/diff.c:623
+#: ../libsvn_client/diff.c:609
#, c-format
msgid "%sProperty changes on: %s%s"
msgstr "%sModification de propriétés sur %s%s"
-#: ../libsvn_client/diff.c:907
+#: ../libsvn_client/diff.c:968
#, c-format
msgid "Cannot display: file marked as a binary type.%s"
msgstr "Impossible d'afficher : fichier considéré comme binaire.%s"
-#: ../libsvn_client/diff.c:1321
+#: ../libsvn_client/diff.c:1439
#, c-format
msgid "Path '%s' has no URL"
msgstr "Le chemin '%s' n'a pas d'URL associée"
-#: ../libsvn_client/diff.c:1390 ../libsvn_client/merge.c:6448
-#: ../libsvn_client/merge.c:9128
+#: ../libsvn_client/diff.c:1467 ../libsvn_client/merge.c:6713
+#: ../libsvn_client/merge.c:9778
msgid "Not all required revisions are specified"
msgstr "Toutes les révisions requises ne sont pas précisées"
-#: ../libsvn_client/diff.c:1405
-msgid "At least one revision must be non-local for a pegged diff"
-msgstr "Au moins une révision ne doit pas être locale pour un diff avec révision fixée"
+#: ../libsvn_client/diff.c:1481
+msgid "At least one revision must be something other than BASE or WORKING when diffing a URL"
+msgstr "Au moins une révision doit être différente de BASE ou WORKING (en cours) faire un diff sur une URL"
+
+#: ../libsvn_client/diff.c:1518
+#, c-format
+msgid "Diff target '%s' was not found in the repository at revision '%ld'"
+msgstr "La cible de comparaison '%s' n'existe pas dans le dépôt à la révision '%ld'"
+
+#: ../libsvn_client/diff.c:1523
+#, c-format
+msgid "Diff target '%s' was not found in the repository at revision '%ld' or '%ld'"
+msgstr "La cible de comparaison '%s' n'existe pas dans le dépôt à la révision '%ld' ou '%ld'"
+
+#: ../libsvn_client/diff.c:1695
+#, c-format
+msgid "Diff target '%s' was not found in the repository at revisions '%ld' and '%ld'"
+msgstr "La cible de comparaison '%s' n'existe pas dans le dépôt aux révisions '%ld' et '%ld'"
-#: ../libsvn_client/diff.c:1513 ../libsvn_client/diff.c:1525
+#: ../libsvn_client/diff.c:1700
#, c-format
-msgid "'%s' was not found in the repository at revision %ld"
-msgstr "'%s' n'existe pas dans le dépôt à la révision %ld"
+msgid "Diff targets '%s' and '%s' were not found in the repository at revisions '%ld' and '%ld'"
+msgstr "Les cibles de comparaison '%s' et '%s' n'existent pas dans le dépôt aux révisions '%ld' et '%ld'"
-#: ../libsvn_client/diff.c:1581
-msgid "Sorry, svn_client_diff5 was called in a way that is not yet supported"
-msgstr "Désolé, appel de svn_client_diff5 de manière non encore supportée"
+#: ../libsvn_client/diff.c:1765
+msgid "Sorry, svn_client_diff6 was called in a way that is not yet supported"
+msgstr "Désolé, appel de svn_client_diff6 de manière non encore supportée"
-#: ../libsvn_client/diff.c:1623
-msgid "Only diffs between a path's text-base and its working files are supported at this time"
-msgstr "Seules les différences entre des copies de référence et leurs fichiers de travail sont supportées pour l'instant"
+#: ../libsvn_client/diff.c:2218
+#, c-format
+msgid "'%s' is not the same node kind as '%s'"
+msgstr "'%s' n'est pas de la même sorte que '%s'."
-#: ../libsvn_client/diff.c:1809 ../libsvn_client/switch.c:132
+#: ../libsvn_client/diff.c:2235 ../libsvn_wc/props.c:1707
+#, c-format
+msgid "'%s' is not a file or directory"
+msgstr "'%s' n'est ni un fichier ni un répertoire"
+
+#: ../libsvn_client/diff.c:2953 ../libsvn_client/switch.c:149
#, c-format
msgid "Directory '%s' has no URL"
msgstr "Le répertoire '%s' n'a pas d'URL associée"
-#: ../libsvn_client/diff.c:2059
-msgid "Summarizing diff can only compare repository to repository"
-msgstr "Le diff résumé compare seulement un dépôt à un autre"
+#: ../libsvn_client/diff.c:3232
+msgid "Summarized diffs are only supported between a path's text-base and its working files at this time"
+msgstr "Les différences résumées ne sont supportées qu'entre des copies de référence et leurs fichiers de travail pour l'instant"
+
+#: ../libsvn_client/diff.c:3388
+msgid "Summarizing diff cannot compare repository to WC"
+msgstr "Le diff résumé ne peut comparer un dépôt à une copie de travail"
+
+#: ../libsvn_client/diff.c:3521 ../libsvn_client/diff.c:3586
+msgid "Cannot ignore properties and show only properties at the same time"
+msgstr "Impossible d'ignorer les propriétés et de n'afficher que les propriétés en même temps"
-#: ../libsvn_client/export.c:92
+#: ../libsvn_client/export.c:96
#, c-format
msgid "'%s' is not a valid EOL value"
msgstr "'%s' n'est pas une valeur de fin de ligne (EOL) valide"
-#: ../libsvn_client/export.c:406
+#: ../libsvn_client/export.c:234
msgid "Destination directory exists, and will not be overwritten unless forced"
msgstr "Le répertoire de destination existe, et ne sera pas écrasé sans forcer"
-#: ../libsvn_client/export.c:571 ../libsvn_client/export.c:718
+#: ../libsvn_client/export.c:259 ../libsvn_client/export.c:1209
+#: ../libsvn_wc/copy.c:590 ../libsvn_wc/crop.c:250 ../libsvn_wc/crop.c:347
+#: ../libsvn_wc/info.c:371 ../libsvn_wc/props.c:228 ../libsvn_wc/status.c:2719
+#: ../libsvn_wc/update_editor.c:5267 ../libsvn_wc/wc_db.c:2445
+#: ../libsvn_wc/wc_db.c:2588 ../libsvn_wc/wc_db.c:2646
+#: ../libsvn_wc/wc_db.c:2670 ../libsvn_wc/wc_db.c:2817
+#: ../libsvn_wc/wc_db.c:5303 ../libsvn_wc/wc_db.c:5847
+#: ../libsvn_wc/wc_db.c:6037 ../libsvn_wc/wc_db.c:6141
+#: ../libsvn_wc/wc_db.c:7779 ../libsvn_wc/wc_db.c:8256
+#: ../libsvn_wc/wc_db.c:8888 ../libsvn_wc/wc_db.c:9069
+#: ../libsvn_wc/wc_db.c:10455 ../libsvn_wc/wc_db.c:10531
+#: ../libsvn_wc/wc_db.c:11054 ../libsvn_wc/wc_db.c:12156
+#: ../libsvn_wc/wc_db.c:12248 ../libsvn_wc/wc_db.c:12418
+#: ../libsvn_wc/wc_db.c:12813 ../libsvn_wc/wc_db.c:13632
#, c-format
-msgid "'%s' exists and is not a directory"
-msgstr "'%s' existe et n'est pas un répertoire"
-
-#: ../libsvn_client/export.c:575 ../libsvn_client/export.c:722
-#, c-format
-msgid "'%s' already exists"
-msgstr "'%s' existe déjà"
-
-#: ../libsvn_client/export.c:906 ../libsvn_wc/update_editor.c:4050
-#, c-format
-msgid ""
-"Checksum mismatch for '%s':\n"
-" expected: %s\n"
-" actual: %s\n"
-msgstr ""
-"Somme de contrôle pour '%s' :\n"
-" attendu : %s\n"
-" obtenu : %s\n"
+msgid "The node '%s' was not found."
+msgstr "Nœud '%s' non trouvé."
-#: ../libsvn_client/externals.c:364
+#: ../libsvn_client/export.c:277 ../libsvn_client/export.c:994
#, c-format
-msgid "Cannot insert a file external from '%s' into a working copy from a different repository rooted at '%s'"
-msgstr "Impossible d'insérer un fichier externe à partir de '%s' dans une copie de travail référençant un dépôt de racine '%s'"
+msgid "Destination file '%s' exists, and will not be overwritten unless forced"
+msgstr "Le fichier destination '%s' existe, et ne sera pas écrasé sans forcer"
-#: ../libsvn_client/externals.c:401
+#: ../libsvn_client/export.c:283 ../libsvn_client/export.c:999
#, c-format
-msgid "The file external from '%s' cannot overwrite the existing versioned item at '%s'"
-msgstr "Le fichier externe '%s' ne peut écraser l'élément versionné '%s'"
+msgid "Destination '%s' exists. Cannot overwrite directory with non-directory"
+msgstr "La destination '%s' existe. Impossible d'écraser un répertoire avec autre chose"
-#: ../libsvn_client/externals.c:427
+#: ../libsvn_client/export.c:468 ../libsvn_client/export.c:615
#, c-format
-msgid "The file external from '%s' cannot be written to '%s' while '%s' remains in conflict"
-msgstr "Le fichier externe '%s' ne peut être écrit dans '%s' alors que '%s' est en conflit"
+msgid "'%s' exists and is not a directory"
+msgstr "'%s' existe et n'est pas un répertoire"
-#: ../libsvn_client/externals.c:536
+#: ../libsvn_client/export.c:472 ../libsvn_client/export.c:619
#, c-format
-msgid "URL '%s' does not begin with a scheme"
-msgstr "L'URL '%s' ne commence pas par un schéma"
+msgid "'%s' already exists"
+msgstr "'%s' existe déjà"
-#: ../libsvn_client/externals.c:608
+#: ../libsvn_client/export.c:804 ../libsvn_client/repos_diff.c:969
+#: ../libsvn_fs_fs/dag.c:1033 ../libsvn_ra_svn/client.c:1081
+#: ../libsvn_wc/diff_editor.c:1605 ../libsvn_wc/externals.c:588
+#: ../libsvn_wc/update_editor.c:4122
#, c-format
-msgid "Illegal parent directory URL '%s'"
-msgstr "URL de répertoire parent invalide '%s'"
+msgid "Checksum mismatch for '%s'"
+msgstr "Sommes de contrôle différentes pour '%s'"
-#: ../libsvn_client/externals.c:645
+#: ../libsvn_client/externals.c:362
#, c-format
-msgid "Illegal repository root URL '%s'"
-msgstr "URL de racine de dépôt invalide '%s'"
+msgid "Cannot insert a file external defined on '%s' into the working copy '%s'."
+msgstr "Impossible d'insérer un fichier externe définit sur '%s' dans la copie de travail '%s'"
-#: ../libsvn_client/externals.c:688
+#: ../libsvn_client/externals.c:395
#, c-format
-msgid "The external relative URL '%s' cannot have backpaths, i.e. '..'"
-msgstr "L'URL relative externe '%s' ne peut avoir de remontée '..'"
+msgid "The file external from '%s' cannot overwrite the existing versioned item at '%s'"
+msgstr "Le fichier externe '%s' ne peut écraser l'élément versionné '%s'"
-#: ../libsvn_client/externals.c:714
+#: ../libsvn_client/externals.c:412
#, c-format
-msgid "Unrecognized format for the relative external URL '%s'"
-msgstr "Format d'URL relative externe non reconnu '%s'"
+msgid "The file external '%s' can not be created because the node exists."
+msgstr "Le fichier externe '%s' ne peut pas être créé car le nœud existe."
-#: ../libsvn_client/externals.c:806
+#: ../libsvn_client/externals.c:622
#, c-format
msgid "URL '%s' at revision %ld doesn't exist"
msgstr "L'URL '%s' n'existe pas à la révision %ld"
-#: ../libsvn_client/externals.c:812
+#: ../libsvn_client/externals.c:627
#, c-format
msgid "URL '%s' at revision %ld is not a file or a directory"
msgstr "L'URL '%s' à la révision %ld n'est ni un fichier ni un répertoire"
-#: ../libsvn_client/externals.c:1111
+#: ../libsvn_client/externals.c:693
#, c-format
-msgid "Traversal of '%s' found no ambient depth"
-msgstr "Traversée de '%s' sans profondeur dans le contexte"
+msgid "Unsupported external: URL of file external '%s' is not in repository '%s'"
+msgstr "Référence externe non supportée : l'URL du fichier externe '%s' n'est pas dans le dépôt '%s'"
-#: ../libsvn_client/externals.c:1262
+#: ../libsvn_client/externals.c:876
#, c-format
-msgid "'%s' is not a URL"
-msgstr "'%s' n'est pas une URL"
-
-#: ../libsvn_client/info.c:104 ../libsvn_wc/crop.c:353
-#: ../libsvn_wc/props.c:271 ../libsvn_wc/update_editor.c:5208
-#: ../libsvn_wc/wc_db.c:528 ../libsvn_wc/wc_db.c:1928
-#: ../libsvn_wc/wc_db.c:2026 ../libsvn_wc/wc_db.c:2085
-#: ../libsvn_wc/wc_db.c:2109 ../libsvn_wc/wc_db.c:4639
-#: ../libsvn_wc/wc_db.c:5080 ../libsvn_wc/wc_db.c:5998
-#: ../libsvn_wc/wc_db.c:6062 ../libsvn_wc/wc_db.c:6293
-#: ../libsvn_wc/wc_db.c:7297 ../libsvn_wc/wc_db.c:7476
-#: ../libsvn_wc/wc_db.c:7849
-#, c-format
-msgid "The node '%s' was not found."
-msgstr "Nœud '%s' non trouvé."
-
-#: ../libsvn_client/info.c:564
-#, c-format
-msgid "Server does not support retrieving information about the repository root"
-msgstr "Le serveur ne supporte pas la récupération d'information sur la racine du dépôt"
+msgid "Traversal of '%s' found no ambient depth"
+msgstr "Traversée de '%s' sans profondeur dans le contexte"
-#: ../libsvn_client/info.c:571 ../libsvn_client/info.c:586
-#: ../libsvn_client/info.c:596
+#: ../libsvn_client/info.c:292 ../libsvn_client/info.c:308
+#: ../libsvn_client/info.c:399 ../libsvn_client/list.c:262
#, c-format
msgid "URL '%s' non-existent in revision %ld"
msgstr "L'URL '%s' n'existe pas à la révision %ld"
-#: ../libsvn_client/list.c:245
+#: ../libsvn_client/info.c:389
#, c-format
-msgid "URL '%s' non-existent in that revision"
-msgstr "L'URL '%s' n'existe pas à cette révision"
+msgid "Server does not support retrieving information about the repository root"
+msgstr "Le serveur ne supporte pas la récupération d'information sur la racine du dépôt"
-#: ../libsvn_client/locking_commands.c:258
-#: ../libsvn_client/locking_commands.c:284
+#: ../libsvn_client/locking_commands.c:257
+#: ../libsvn_client/locking_commands.c:283
msgid "No common parent found, unable to operate on disjoint arguments"
msgstr "Aucun parent commun trouvé, impossible de travailler avec des arguments disjoints"
-#: ../libsvn_client/locking_commands.c:303 ../libsvn_client/merge.c:9151
-#: ../libsvn_client/merge.c:9158 ../libsvn_client/merge.c:10385
-#: ../libsvn_client/merge.c:10660 ../libsvn_client/ra.c:485
-#: ../libsvn_client/ra.c:679 ../libsvn_client/update.c:111
+#: ../libsvn_client/locking_commands.c:302 ../libsvn_client/ra.c:490
+#: ../libsvn_client/ra.c:789
#, c-format
msgid "'%s' has no URL"
msgstr "'%s' n'a pas d'URL associée"
-#: ../libsvn_client/locking_commands.c:317
+#: ../libsvn_client/locking_commands.c:316
msgid "Unable to lock/unlock across multiple repositories"
msgstr "Impossible de verrouiller/déverrouiller sur plusieurs dépôts"
@@ -1885,66 +1953,61 @@ msgstr "'%s' n'est pas verrouillé dans cette copie de travail"
msgid "'%s' is not locked"
msgstr "'%s' n'est pas verrouillé"
-#: ../libsvn_client/locking_commands.c:442 ../libsvn_fs/fs-loader.c:1308
-#: ../libsvn_ra/ra_loader.c:1069
+#: ../libsvn_client/locking_commands.c:442 ../libsvn_fs/fs-loader.c:1274
+#: ../libsvn_ra/ra_loader.c:1078
msgid "Lock comment contains illegal characters"
msgstr "Le commentaire du verrou (lock) contient des caractères incorrects"
-#: ../libsvn_client/log.c:299 ../libsvn_client/log.c:357
+#: ../libsvn_client/log.c:296 ../libsvn_client/log.c:353
msgid "Missing required revision specification"
msgstr "Précision de la révision obligatoire"
-#: ../libsvn_client/log.c:401
+#: ../libsvn_client/log.c:402
#, c-format
msgid "'%s' is not a relative path"
msgstr "'%s' n'est pas un chemin relatif"
-#: ../libsvn_client/log.c:423
+#: ../libsvn_client/log.c:424
msgid "When specifying working copy paths, only one target may be given"
msgstr "Une seule cible à préciser pour un chemin dans une copie de travail"
-#: ../libsvn_client/log.c:449 ../libsvn_client/status.c:386
+#: ../libsvn_client/log.c:450 ../libsvn_client/status.c:381
#, c-format
msgid "Entry '%s' has no URL"
msgstr "L'entrée '%s' n'a pas d'URL associée"
-#: ../libsvn_client/merge.c:180
+#: ../libsvn_client/merge.c:407
#, c-format
-msgid "URLs have no scheme ('%s' and '%s')"
-msgstr "URLs sans schéma ('%s' et '%s')"
+msgid "Url '%s' of '%s' is not in repository '%s'"
+msgstr "l'URL '%s' de '%s' n'est pas dans le dépôt '%s'"
-#: ../libsvn_client/merge.c:186 ../libsvn_client/merge.c:192
+#: ../libsvn_client/merge.c:444
#, c-format
-msgid "URL has no scheme: '%s'"
-msgstr "URL sans schéma : '%s'"
-
-#: ../libsvn_client/merge.c:199
-#, c-format
-msgid "Access scheme mixtures not yet supported ('%s' and '%s')"
-msgstr "Schémas d'accession mixtes non encore supportés ('%s' et '%s')"
+msgid "'%s' must be from the same repository as '%s'"
+msgstr "'%s' doit être dans le même dépôt que '%s'"
#. xgettext: the '.working', '.merge-left.r%ld' and
#. '.merge-right.r%ld' strings are used to tag onto a file
#. name in case of a merge conflict
-#: ../libsvn_client/merge.c:1494
+#: ../libsvn_client/merge.c:1726
msgid ".working"
msgstr ".courant"
-#: ../libsvn_client/merge.c:1496
+#: ../libsvn_client/merge.c:1728
#, c-format
msgid ".merge-left.r%ld"
msgstr ".fusion-gauche.r%ld"
-#: ../libsvn_client/merge.c:1499
+#: ../libsvn_client/merge.c:1731
#, c-format
msgid ".merge-right.r%ld"
msgstr ".fusion-droit.r%ld"
-#: ../libsvn_client/merge.c:4108
+#: ../libsvn_client/merge.c:4253
msgid "Cannot reverse-merge a range from a path's own future history; try updating first"
msgstr "Impossible de fusionner un intervalle inversé à partir du futur du chemin considéré ; essayer une mise à jour d'abord"
-#: ../libsvn_client/merge.c:4812
+#: ../libsvn_client/merge.c:4902
#, c-format
msgid ""
"One or more conflicts were produced while merging r%ld:%ld into\n"
@@ -1957,66 +2020,74 @@ msgstr ""
"résoudre tous les conflits et ré-exécuter la fusion (merge) pour \n"
"appliquer les révisions non-fusionnées restantes"
-#: ../libsvn_client/merge.c:5964
+#: ../libsvn_client/merge.c:5760
+#, c-format
+msgid "Invalid mergeinfo detected on '%s', mergetracking not possible"
+msgstr "Information de fusion (mergeinfo) invalide sur '%s', suivi des fusions impossible"
+
+#: ../libsvn_client/merge.c:5910
msgid "Merge tracking not allowed with missing subtrees; try restoring these items first:\n"
msgstr "Le suivi des fusions n'est pas permis si des sous-arbres manquent ; Essayer de les restaurer d'abord :\n"
-#: ../libsvn_client/merge.c:8646
+#: ../libsvn_client/merge.c:6913
+#, c-format
+msgid "Invalid mergeinfo detected on merge target '%s', mergetracking not possible"
+msgstr "Information de fusion (mergeinfo) invalide sur la cible '%s', suivi des fusions impossible"
+
+#: ../libsvn_client/merge.c:9046
msgid "Use of two URLs is not compatible with mergeinfo modification"
msgstr "L'utilisation de deux URLs n'est pas compatible avec la modification des informations de fusion 'mergeinfo'"
-#: ../libsvn_client/merge.c:8653 ../libsvn_client/merge.c:8937
+#: ../libsvn_client/merge.c:9053 ../libsvn_client/merge.c:9308
msgid "Merge from foreign repository is not compatible with mergeinfo modification"
msgstr "La fusion à partir d'un autre dépôt n'est pas compatible avec la modification des informations de fusion 'mergeinfo'"
-#: ../libsvn_client/merge.c:8666 ../libsvn_client/merge.c:9166
-#: ../libsvn_client/merge.c:10668
+#: ../libsvn_client/merge.c:9064 ../libsvn_client/merge.c:9385
#, c-format
msgid "Merge target '%s' does not exist in the working copy"
msgstr "Le chemin cible '%s' n'existe pas dans la copie de travail"
-#: ../libsvn_client/merge.c:9040
-msgid "Cannot merge into a working copy with a switched subtree"
-msgstr "Impossible de fusionner dans une copie de travail avec un sous-arbre ré-aiguillé (switch)"
-
-#: ../libsvn_client/merge.c:9045
-msgid "Cannot merge into a working copy that has local modifications"
-msgstr "Impossible de fusionner dans une copie de travail avec des modifications locales"
-
-#: ../libsvn_client/merge.c:9062
+#: ../libsvn_client/merge.c:9408
msgid "Cannot determine revision of working copy"
msgstr "Impossible de déterminer la révision de la copie de travail"
-#: ../libsvn_client/merge.c:9068
+#: ../libsvn_client/merge.c:9414
#, c-format
msgid "Cannot merge into mixed-revision working copy [%lu:%lu]; try updating first"
msgstr "Impossible de fusionner (merge) dans un copie de travail avec des révisions multiples [%lu:%lu] ; Faire une mise à jour (update) d'abord"
-#: ../libsvn_client/merge.c:9132 ../svn/merge-cmd.c:347
-msgid "Merge sources must both be either paths or URLs"
-msgstr "Les sources fusionnés doivent être tous deux ou des chemins ou des URLs"
+#: ../libsvn_client/merge.c:9429
+msgid "Cannot merge into a working copy with a switched subtree"
+msgstr "Impossible de fusionner dans une copie de travail avec un sous-arbre basculé (switch)"
+
+#: ../libsvn_client/merge.c:9445
+msgid "Cannot merge into a working copy that has local modifications"
+msgstr "Impossible de fusionner dans une copie de travail avec des modifications locales"
-#: ../libsvn_client/merge.c:9203 ../libsvn_ra/ra_loader.c:552
+#: ../libsvn_client/merge.c:9465 ../svn/merge-cmd.c:101
#, c-format
-msgid "'%s' isn't in the same repository as '%s'"
-msgstr "'%s' n'est pas dans le même dépôt que '%s'"
+msgid "Invalid merge source '%s'; a working copy path can only be used with a repository revision (a number, a date, or head)"
+msgstr "Source de fusion '%s' invalide ; un chemin dans la copie de travail de peut être utilisé qu'avec une révision (un numéro, une date, ou HEAD)"
-#: ../libsvn_client/merge.c:10201 ../libsvn_client/merge.c:10493
+#: ../libsvn_client/merge.c:9781 ../svn/merge-cmd.c:479
+msgid "Merge sources must both be either paths or URLs"
+msgstr "Les sources fusionnés doivent être tous deux ou des chemins ou des URLs"
+
+#: ../libsvn_client/merge.c:10541 ../libsvn_client/merge.c:10712
#, c-format
msgid "'%s@%ld' must be ancestrally related to '%s@%ld'"
msgstr "'%s@%ld' doit un ancêtre de '%s@%ld'"
-#: ../libsvn_client/merge.c:10403
-#, c-format
-msgid "'%s' must be from the same repository as '%s'"
-msgstr "'%s' doit être dans le même dépôt que '%s'"
-
-#: ../libsvn_client/merge.c:10435
+#: ../libsvn_client/merge.c:10658
#, c-format
msgid "Neither the reintegrate source nor target can be the root of the repository"
msgstr "Ni la source de la réintégration, ni sa cible, ne peuvent être la racine du dépôt"
-#: ../libsvn_client/merge.c:10521
+#: ../libsvn_client/merge.c:10668
+msgid "Reintegrate merge not possible"
+msgstr "Fusion de réintégration impossible"
+
+#: ../libsvn_client/merge.c:10741
#, c-format
msgid ""
"Reintegrate can only be used if revisions %ld through %ld were previously merged from %s to the reintegrate source, but this is not the case:\n"
@@ -2025,168 +2096,172 @@ msgstr ""
"La réintegration (reintegrate) ne peut être utilisée que si les révisions %ld à %ld ont été préalablement fusionnées de %s vers la source, or ce n'est pas le cas :\n"
"%s"
-#: ../libsvn_client/mergeinfo.c:1722
+#: ../libsvn_client/merge.c:10803
+#, c-format
+msgid "Can't reintegrate into '%s' because it is locally added and therefore not related to the merge source"
+msgstr "Impossible de réintégrer dans '%s' parce qu'il est localement ajouté et donc non lié à la source de la fusion"
+
+#: ../libsvn_client/mergeinfo.c:1664
msgid "Only depths 'infinity' and 'empty' are currently supported"
msgstr "Seules les profondeur 'infinity' (infinie) et 'empty' (vide) sont actuellement supportées"
-#: ../libsvn_client/patch.c:244
+#: ../libsvn_client/patch.c:276
#, c-format
msgid "Cannot strip %u components from '%s'"
msgstr "Impossible d'enlever %u composants du chemin '%s'"
-#: ../libsvn_client/patch.c:2743
+#: ../libsvn_client/patch.c:2951
msgid "strip count must be positive"
msgstr "Le nombre de composant à enlever doit être positif"
-#: ../libsvn_client/patch.c:2755 ../libsvn_fs_base/tree.c:4140
-#: ../libsvn_fs_base/tree.c:4145 ../libsvn_fs_fs/tree.c:2702
-#: ../libsvn_fs_fs/tree.c:2707 ../libsvn_ra/compat.c:670
+#: ../libsvn_client/patch.c:2967 ../libsvn_fs_base/tree.c:3981
+#: ../libsvn_fs_base/tree.c:3986 ../libsvn_fs_fs/tree.c:2631
+#: ../libsvn_fs_fs/tree.c:2636 ../libsvn_ra/compat.c:685
+#: ../libsvn_ra_local/ra_plugin.c:1118
#, c-format
msgid "'%s' is not a file"
msgstr "'%s' n'est pas un fichier"
-#: ../libsvn_client/patch.c:2763 ../libsvn_wc/util.c:58
+#: ../libsvn_client/patch.c:2979 ../libsvn_wc/util.c:59
#, c-format
msgid "'%s' is not a directory"
msgstr "'%s' n'est pas un répertoire"
-#: ../libsvn_client/prop_commands.c:80
+#: ../libsvn_client/prop_commands.c:82
#, c-format
msgid "'%s' is a wcprop, thus not accessible to clients"
msgstr "'%s' est une propriété de copie de travail donc inaccessible aux clients"
-#: ../libsvn_client/prop_commands.c:217
+#: ../libsvn_client/prop_commands.c:177
#, c-format
msgid "Property '%s' is not a regular property"
msgstr "La propriété de révision '%s' n'est pas une propriété connue"
-#: ../libsvn_client/prop_commands.c:364
+#: ../libsvn_client/prop_commands.c:289
#, c-format
msgid "Revision property '%s' not allowed in this context"
msgstr "Propriéte de révision '%s' non permise dans ce contexte"
-#: ../libsvn_client/prop_commands.c:371 ../libsvn_client/prop_commands.c:525
+#: ../libsvn_client/prop_commands.c:296 ../libsvn_client/prop_commands.c:496
#, c-format
msgid "Bad property name: '%s'"
msgstr "Nom de propriété invalide : '%s'"
-#: ../libsvn_client/prop_commands.c:381
-#, c-format
-msgid "Setting property on non-local target '%s' needs a base revision"
-msgstr "Définir une propriété sur une cible non locale '%s' nécessite une révision de base"
+#: ../libsvn_client/prop_commands.c:324
+msgid "Targets must be working copy paths"
+msgstr "Les cibles doivent être des chemins de copies de travail"
-#: ../libsvn_client/prop_commands.c:386
-#, c-format
-msgid "Setting property recursively on non-local target '%s' is not supported"
-msgstr "Impossible de définir récursivement une propriété pour une cible non locale '%s'"
+#: ../libsvn_client/prop_commands.c:390
+msgid "Targets must be URLs"
+msgstr "Les cibles doivent être des URLs"
+
+#: ../libsvn_client/prop_commands.c:400
+msgid "Setting property on non-local targets needs a base revision"
+msgstr "Définir une propriété sur une cible non locale nécessite une révision de base"
-#: ../libsvn_client/prop_commands.c:401
+#: ../libsvn_client/prop_commands.c:415
#, c-format
-msgid "Setting property '%s' on non-local target '%s' is not supported"
-msgstr "Impossible de définir la propriété '%s' pour une cible non locale '%s'"
+msgid "Setting property '%s' on non-local targets is not supported"
+msgstr "Impossible de définir la propriété '%s' pour une cible non locale"
-#: ../libsvn_client/prop_commands.c:472
+#: ../libsvn_client/prop_commands.c:443
#, c-format
msgid "revprop '%s' in r%ld is unexpectedly absent in repository (maybe someone else deleted it?)"
msgstr "La propriété de révision '%s' de r%ld n'existe plus dans le dépôt (peut-être a-t-elle été effacée par ailleurs ?)"
-#: ../libsvn_client/prop_commands.c:481
+#: ../libsvn_client/prop_commands.c:452
#, c-format
msgid "revprop '%s' in r%ld has unexpected value in repository (maybe someone else changed it?)"
msgstr "La propriété de révision '%s' de r%ld a une valeur inattendue dans le dépôt (peut-être a-t-elle été modifiée par ailleurs ?)"
-#: ../libsvn_client/prop_commands.c:489
+#: ../libsvn_client/prop_commands.c:460
#, c-format
msgid "revprop '%s' in r%ld is unexpectedly present in repository (maybe someone else set it?)"
msgstr "La propriété de révision '%s' de r%ld existe déjà dans le dépôt (peut-être a-t-elle été définie par ailleurs ?)"
-#: ../libsvn_client/prop_commands.c:520
+#: ../libsvn_client/prop_commands.c:491
msgid "Author name should not contain a newline; value will not be set unless forced"
msgstr "Le nom de l'auteur ne devrait pas contenir de retour chariot ; la valeur ne sera pas utilisée sauf en forçant"
-#: ../libsvn_client/prop_commands.c:768
+#: ../libsvn_client/prop_commands.c:643
#, c-format
msgid "'%s' does not exist in revision %ld"
msgstr "'%s' n'existe pas à la révision %ld"
-#: ../libsvn_client/prop_commands.c:774 ../libsvn_client/prop_commands.c:1088
-#: ../libsvn_wc/crop.c:183
+#: ../libsvn_client/prop_commands.c:649 ../libsvn_client/prop_commands.c:978
+#: ../libsvn_wc/crop.c:182
#, c-format
msgid "Unknown node kind for '%s'"
msgstr "Type de nœud inconnu pour '%s'"
-#: ../libsvn_client/ra.c:145
+#: ../libsvn_client/ra.c:157
#, c-format
msgid "Attempt to set wc property '%s' on '%s' in a non-commit operation"
msgstr "Tentative de fixer la propriété de copie de travail '%s' sur '%s' hors d'une opération de propagation"
-#: ../libsvn_client/ra.c:379
+#: ../libsvn_client/ra.c:384
#, c-format
msgid "Redirect cycle detected for URL '%s'"
msgstr "Cycle de redirection détecté pour l'URL '%s'"
-#: ../libsvn_client/ra.c:751 ../libsvn_ra/compat.c:377
+#: ../libsvn_client/ra.c:658 ../libsvn_ra/compat.c:394
#, c-format
msgid "Unable to find repository location for '%s' in revision %ld"
msgstr "Impossible de trouver la localisation dans le dépôt de '%s' pour la révision %ld"
-#: ../libsvn_client/ra.c:758
+#: ../libsvn_client/ra.c:670
#, c-format
msgid "The location for '%s' for revision %ld does not exist in the repository or refers to an unrelated object"
msgstr "La localisation de '%s' à la révision %ld n'existe pas dans le dépôt ou réfère à un autre objet"
-#: ../libsvn_client/relocate.c:115
+#: ../libsvn_client/relocate.c:117
#, c-format
msgid "'%s' is not the root of the repository"
msgstr "'%s' n'est pas la racine du dépôt"
-#: ../libsvn_client/relocate.c:122
+#: ../libsvn_client/relocate.c:124
#, c-format
msgid "The repository at '%s' has uuid '%s', but the WC has '%s'"
msgstr "Le dépôt '%s' a pour uuid '%s', mais la copie de travail a '%s'"
-#: ../libsvn_client/repos_diff.c:385
+#: ../libsvn_client/repos_diff.c:901 ../libsvn_wc/externals.c:508
#, c-format
-msgid "'%s' is not a versioned directory"
-msgstr "'%s' n'est pas un répertoire versionné"
-
-#: ../libsvn_client/repos_diff.c:1358 ../libsvn_ra_neon/commit.c:521
-#: ../libsvn_ra_neon/props.c:217 ../libsvn_ra_neon/util.c:567
-#: ../libsvn_ra_serf/commit.c:1651 ../libsvn_ra_serf/commit.c:2058
-#: ../libsvn_ra_serf/update.c:2139
-#, c-format
-msgid "Unable to parse URL '%s'"
-msgstr "Impossible d'analyser l'URL '%s'"
+msgid "Base checksum mismatch for '%s'"
+msgstr "Sommes de contrôle différentes sur '%s'"
-#: ../libsvn_client/revisions.c:113 ../libsvn_client/revisions.c:136
+#: ../libsvn_client/revisions.c:113 ../libsvn_client/revisions.c:138
#, c-format
msgid "Path '%s' has no committed revision"
msgstr "Chemin '%s' sans révision propagée"
-#: ../libsvn_client/revisions.c:162
+#: ../libsvn_client/revisions.c:166
#, c-format
msgid "Unrecognized revision type requested for '%s'"
msgstr "Type de révision demandé inconnu pour '%s'"
-#: ../libsvn_client/revisions.c:185
+#: ../libsvn_client/revisions.c:189
msgid "PREV, BASE, or COMMITTED revision keywords are invalid for URL"
msgstr "les identifiants de révision PREV, BASE et COMMITTED sont invalides pour une URL"
-#: ../libsvn_client/status.c:300 ../libsvn_client/status.c:329
-#: ../libsvn_client/status.c:338 ../libsvn_client/status.c:533
-#: ../libsvn_wc/lock.c:539 ../libsvn_wc/lock.c:889 ../libsvn_wc/lock.c:1588
-#: ../libsvn_wc/wc_db.c:6873 ../libsvn_wc/wc_db_pdh.c:485
+#: ../libsvn_client/status.c:334 ../libsvn_client/status.c:513
+#: ../libsvn_wc/lock.c:562 ../libsvn_wc/lock.c:854 ../libsvn_wc/lock.c:1564
+#: ../libsvn_wc/wc_db.c:11705 ../libsvn_wc/wc_db_wcroot.c:557
#, c-format
msgid "'%s' is not a working copy"
msgstr "'%s' n'est pas une copie de travail"
-#: ../libsvn_client/switch.c:102
+#: ../libsvn_client/switch.c:103
#, c-format
msgid "Cannot both exclude and switch a path"
-msgstr "Impossible d'exclure (exclude) et de réaiguiller (switch) en même temps un chemin"
+msgstr "Impossible d'exclure (exclude) et de basculer (switch) en même temps un chemin"
-#: ../libsvn_client/switch.c:174 ../libsvn_ra_local/ra_plugin.c:200
-#: ../libsvn_ra_local/ra_plugin.c:276 ../libsvn_wc/update_editor.c:4884
+#: ../libsvn_client/switch.c:124
+#, c-format
+msgid "Cannot switch '%s' because it is not in the repository yet"
+msgstr "Impossible de basculer '%s' car non encore dans le dépôt"
+
+#: ../libsvn_client/switch.c:189 ../libsvn_ra_local/ra_plugin.c:231
+#: ../libsvn_ra_local/ra_plugin.c:318 ../libsvn_wc/update_editor.c:4795
#, c-format
msgid ""
"'%s'\n"
@@ -2197,175 +2272,218 @@ msgstr ""
"n'est pas dans le même dépôt que\n"
"'%s'"
-#: ../libsvn_client/util.c:217
+#: ../libsvn_client/switch.c:216
#, c-format
-msgid "URL '%s' is not a child of repository root URL '%s'"
-msgstr "l'URL '%s' n'est pas descendante de l'URL du dépôt racine '%s'"
+msgid "'%s' shares no common ancestry with '%s'"
+msgstr "'%s' n'a pas d'ancêtre commun avec '%s'"
-#: ../libsvn_client/util.c:340 ../svn/util.c:1349
+#: ../libsvn_client/util.c:313 ../svn/util.c:1386
#, c-format
msgid "Cannot mix repository and working copy targets"
msgstr "Impossible de mélanger des cibles de dépôt et de copie de travail"
-#: ../libsvn_delta/svndiff.c:165
+#: ../libsvn_delta/svndiff.c:175
msgid "Compression of svndiff data failed"
msgstr "Échec de la compression des données de svndiff"
-#: ../libsvn_delta/svndiff.c:432
+#: ../libsvn_delta/svndiff.c:462
msgid "Decompression of svndiff data failed: no size"
msgstr "Échec de la décompression des données de svndiff : pas de taille"
-#: ../libsvn_delta/svndiff.c:435
+#: ../libsvn_delta/svndiff.c:465
msgid "Decompression of svndiff data failed: size too large"
msgstr "Échec de la décompression des données de svndiff : taille trop grande"
-#: ../libsvn_delta/svndiff.c:456
+#: ../libsvn_delta/svndiff.c:500
msgid "Decompression of svndiff data failed"
msgstr "Échec de la décompression des données de svndiff"
-#: ../libsvn_delta/svndiff.c:463
+#: ../libsvn_delta/svndiff.c:507
msgid "Size of uncompressed data does not match stored original length"
msgstr "La taille des données décompressées ne correspond pas à la taille initiale"
-#: ../libsvn_delta/svndiff.c:538
+#: ../libsvn_delta/svndiff.c:582
#, c-format
msgid "Invalid diff stream: insn %d cannot be decoded"
msgstr "Flux diff invalide : insn %d ne peut être décodé"
-#: ../libsvn_delta/svndiff.c:542
+#: ../libsvn_delta/svndiff.c:586
#, c-format
msgid "Invalid diff stream: insn %d has length zero"
msgstr "Flux diff invalide : insn %d de longueur nulle"
-#: ../libsvn_delta/svndiff.c:546
+#: ../libsvn_delta/svndiff.c:590
#, c-format
msgid "Invalid diff stream: insn %d overflows the target view"
msgstr "Flux diff invalide : insn %d déborde la vue cible"
-#: ../libsvn_delta/svndiff.c:555
+#: ../libsvn_delta/svndiff.c:599
#, c-format
msgid "Invalid diff stream: [src] insn %d overflows the source view"
msgstr "Flux diff invalide : [src] insn %d déborde la vue source"
-#: ../libsvn_delta/svndiff.c:562
+#: ../libsvn_delta/svndiff.c:606
#, c-format
msgid "Invalid diff stream: [tgt] insn %d starts beyond the target view position"
msgstr "Flux diff invalide : [tgt] insn %d démarre au delà de la position de la vue cible"
-#: ../libsvn_delta/svndiff.c:569
+#: ../libsvn_delta/svndiff.c:613
#, c-format
msgid "Invalid diff stream: [new] insn %d overflows the new data section"
msgstr "Flux diff invalide : [new] insn %d déborde la nouvelle section de données"
-#: ../libsvn_delta/svndiff.c:579
+#: ../libsvn_delta/svndiff.c:623
msgid "Delta does not fill the target window"
msgstr "Le delta ne comble pas la fenêtre cible"
-#: ../libsvn_delta/svndiff.c:582
+#: ../libsvn_delta/svndiff.c:626
msgid "Delta does not contain enough new data"
msgstr "Le delta ne contient pas assez de nouvelles données"
-#: ../libsvn_delta/svndiff.c:688
+#: ../libsvn_delta/svndiff.c:731
msgid "Svndiff has invalid header"
msgstr "Entête de svndiff invalide"
-#: ../libsvn_delta/svndiff.c:744 ../libsvn_delta/svndiff.c:908
+#: ../libsvn_delta/svndiff.c:787 ../libsvn_delta/svndiff.c:951
msgid "Svndiff contains a too-large window"
msgstr "Les données de svndiff contiennent une fenêtre trop grande"
-#: ../libsvn_delta/svndiff.c:751 ../libsvn_delta/svndiff.c:915
+#: ../libsvn_delta/svndiff.c:794 ../libsvn_delta/svndiff.c:958
msgid "Svndiff contains corrupt window header"
msgstr "Svndiff contient une entête de fenêtre corrompue"
-#: ../libsvn_delta/svndiff.c:760
+#: ../libsvn_delta/svndiff.c:803
msgid "Svndiff has backwards-sliding source views"
msgstr "Svndiff a des vues sources glissant en arrière"
-#: ../libsvn_delta/svndiff.c:809 ../libsvn_delta/svndiff.c:856
-#: ../libsvn_delta/svndiff.c:937
+#: ../libsvn_delta/svndiff.c:852 ../libsvn_delta/svndiff.c:899
+#: ../libsvn_delta/svndiff.c:980
msgid "Unexpected end of svndiff input"
msgstr "Fin de l'entrée inattendue pour svndiff"
-#: ../libsvn_diff/diff_file.c:467
+#: ../libsvn_diff/diff_file.c:1035
#, c-format
msgid "The file '%s' changed unexpectedly during diff"
msgstr "Modification inattendue du fichier '%s' pendant un diff"
-#: ../libsvn_diff/diff_file.c:631
+#: ../libsvn_diff/diff_file.c:1203
msgid "Error in options to internal diff"
msgstr "Erreur dans les options du diff interne"
-#: ../libsvn_diff/diff_file.c:657
+#: ../libsvn_diff/diff_file.c:1229
#, c-format
msgid "Invalid argument '%s' in diff options"
msgstr "Argument '%s' invalide dans les options de diff"
-#: ../libsvn_diff/diff_file.c:943
+#: ../libsvn_diff/diff_file.c:1512
msgid "No newline at end of file"
msgstr "Pas de retour chariot à la fin du fichier"
#. Order of date components can be different in different languages
-#: ../libsvn_diff/diff_file.c:1150
+#: ../libsvn_diff/diff_file.c:1719
msgid "%a %b %e %H:%M:%S %Y"
msgstr "%a %e %b %Y, %H:%M:%S"
-#: ../libsvn_diff/diff_file.c:1767
+#: ../libsvn_diff/diff_file.c:2330
#, c-format
msgid "Failed to delete mmap '%s'"
msgstr "Échec à l'effacement du placement mémoire (mmap) '%s'"
-#: ../libsvn_fs/fs-loader.c:115 ../libsvn_ra/ra_loader.c:179
-#: ../libsvn_ra/ra_loader.c:192
+#: ../libsvn_fs/editor.c:217
#, c-format
-msgid "'%s' does not define '%s()'"
-msgstr "'%s' ne définit pas '%s()'"
+msgid "Revision for modifying '%s' is required"
+msgstr "Le numéro de révision est requis pour modifier '%s'"
-#: ../libsvn_fs/fs-loader.c:132
+#: ../libsvn_fs/editor.c:226
#, c-format
-msgid "Can't grab FS mutex"
-msgstr "Impossible d'obtenir l'exclusivité (mutex) du FS"
+msgid "'%s' is out of date; try updating"
+msgstr "'%s' obsolète ; essayer de mettre à jour"
-#: ../libsvn_fs/fs-loader.c:144
+#: ../libsvn_fs/editor.c:263
#, c-format
-msgid "Can't ungrab FS mutex"
-msgstr "Impossible de rendre l'exclusivité (mutex) du FS"
+msgid "'%s' has been modified since the commit began (restart the commit)"
+msgstr "'%s' a été modifié depuis le début de la propagation (commit) -- recommencer une propagation"
-#: ../libsvn_fs/fs-loader.c:165
+#: ../libsvn_fs/editor.c:321
+#, c-format
+msgid "'%s' already exists, so may be out of date; try updating"
+msgstr "'%s' existe déjà, donc peut être obsolète ; essayer de mettre à jour"
+
+#: ../libsvn_fs/editor.c:454
+msgid "The filesystem does not support 'absent' nodes"
+msgstr "Le système de fichier ne supporte pas de nœuds 'absent's"
+
+#: ../libsvn_fs/fs-loader.c:117 ../libsvn_ra/ra_loader.c:156
+#: ../libsvn_ra/ra_loader.c:169
+#, c-format
+msgid "'%s' does not define '%s()'"
+msgstr "'%s' ne définit pas '%s()'"
+
+#: ../libsvn_fs/fs-loader.c:143
#, c-format
msgid "Failed to load module for FS type '%s'"
msgstr "Échec au chargement du module de stockage (FS) '%s'"
-#: ../libsvn_fs/fs-loader.c:198
+#: ../libsvn_fs/fs-loader.c:165
#, c-format
msgid "Mismatched FS module version for '%s': found %d.%d.%d%s, expected %d.%d.%d%s"
msgstr "Problème de version de module FS pour '%s': %d.%d.%d%s trouvé, %d.%d.%d%s attendu"
-#: ../libsvn_fs/fs-loader.c:223
+#: ../libsvn_fs/fs-loader.c:190
#, c-format
msgid "Unknown FS type '%s'"
msgstr "Type de stockage de dépôt inconnu : '%s'"
-#: ../libsvn_fs/fs-loader.c:313
-#, c-format
-msgid "Can't allocate FS mutex"
-msgstr "Impossible d'allouer l'exclusivité (mutex) du FS"
-
-#: ../libsvn_fs/fs-loader.c:348
+#: ../libsvn_fs/fs-loader.c:311
#, c-format
msgid "Path '%s' is not in UTF-8"
msgstr "Le chemin '%s' n'est pas en UTF-8"
-#: ../libsvn_fs/fs-loader.c:356
+#: ../libsvn_fs/fs-loader.c:319
#, c-format
msgid "Path '%s' contains '.' or '..' element"
msgstr "Le chemin '%s' contient une composante '.' ou '..'"
-#: ../libsvn_fs/fs-loader.c:1290
+#: ../libsvn_fs/fs-loader.c:458 ../libsvn_repos/repos.c:1835
+msgid "Hotcopy source and destination are equal"
+msgstr "La source et la destination de la copie à chaud sont égales"
+
+#: ../libsvn_fs/fs-loader.c:468
+#, c-format
+msgid "'%s' already exists and is a file"
+msgstr "'%s' existe déjà et est un fichier"
+
+#: ../libsvn_fs/fs-loader.c:473
+#, c-format
+msgid "'%s' already exists and has an unknown node kind"
+msgstr "'%s' existe déjà et est un nœud de type inconnu"
+
+#: ../libsvn_fs/fs-loader.c:491
+#, c-format
+msgid "The filesystem type of the hotcopy source ('%s') does not match the filesystem type of the hotcopy destination ('%s')"
+msgstr "Le système de fichiers de la source de la copie à chaud ('%s') ne correspond pas au système de fichiers de la destination ('%s')"
+
+#: ../libsvn_fs/fs-loader.c:1256
#, c-format
msgid "Malformed UUID '%s'"
msgstr "UUID '%s' malformée"
-#: ../libsvn_fs/fs-loader.c:1314
+#: ../libsvn_fs/fs-loader.c:1284
+#, c-format
+msgid "Lock token URI '%s' has bad scheme; expected '%s'"
+msgstr "L'URI du verrou '%s' a un mauvais schéma ; '%s' attendu"
+
+#: ../libsvn_fs/fs-loader.c:1291
+#, c-format
+msgid "Lock token '%s' is not ASCII at byte %u"
+msgstr "Le verrou '%s' n'est pas ASCII à l'octet %u"
+
+#: ../libsvn_fs/fs-loader.c:1298
+#, c-format
+msgid "Lock token URI '%s' is not XML-safe"
+msgstr "L'URI de verrou '%s' n'est pas compatible XML"
+
+#: ../libsvn_fs/fs-loader.c:1305
msgid "Negative expiration date passed to svn_fs_lock"
msgstr "Date d'expiration négative passée à svn_fs_lock"
@@ -2382,19 +2500,19 @@ msgstr "créant une modification"
msgid "deleting changes"
msgstr "effaçant des modifications"
-#: ../libsvn_fs_base/bdb/changes-table.c:149 ../libsvn_fs_fs/fs_fs.c:4019
+#: ../libsvn_fs_base/bdb/changes-table.c:149 ../libsvn_fs_fs/fs_fs.c:4630
msgid "Missing required node revision ID"
msgstr "Absence de l'ID requise de la révision du nœud"
-#: ../libsvn_fs_base/bdb/changes-table.c:160 ../libsvn_fs_fs/fs_fs.c:4029
+#: ../libsvn_fs_base/bdb/changes-table.c:160 ../libsvn_fs_fs/fs_fs.c:4640
msgid "Invalid change ordering: new node revision ID without delete"
msgstr "Ordre de modificaiton invalide : nouvel ID de révision de nœud sans effacement"
-#: ../libsvn_fs_base/bdb/changes-table.c:170 ../libsvn_fs_fs/fs_fs.c:4040
+#: ../libsvn_fs_base/bdb/changes-table.c:170 ../libsvn_fs_fs/fs_fs.c:4651
msgid "Invalid change ordering: non-add change on deleted path"
msgstr "Ordre de modification invalide : modification autre qu'un ajout sur un chemin effacé"
-#: ../libsvn_fs_base/bdb/changes-table.c:179 ../libsvn_fs_fs/fs_fs.c:4049
+#: ../libsvn_fs_base/bdb/changes-table.c:179 ../libsvn_fs_fs/fs_fs.c:4660
msgid "Invalid change ordering: add change on preexisting path"
msgstr "Ordre de modification invalide : ajout sur un chemin pré-existant"
@@ -2565,31 +2683,31 @@ msgstr "Base corrompue : le numéro de révision initial n'est pas '0' dans le
msgid "Attempted to get entries of a non-directory node"
msgstr "Tentative de lister les entrées d'un nœud qui n'est pas un répertoire"
-#: ../libsvn_fs_base/dag.c:461 ../libsvn_fs_fs/dag.c:381
+#: ../libsvn_fs_base/dag.c:461 ../libsvn_fs_fs/dag.c:372
#, c-format
msgid "Attempted to create a node with an illegal name '%s'"
msgstr "Tentative de création d'un nœud avec un nom illégal '%s'"
-#: ../libsvn_fs_base/dag.c:467 ../libsvn_fs_fs/dag.c:387
+#: ../libsvn_fs_base/dag.c:467 ../libsvn_fs_fs/dag.c:378
msgid "Attempted to create entry in non-directory parent"
msgstr "Tentative de création d'une entrée dans un parent qui n'est pas un répertoire"
#: ../libsvn_fs_base/dag.c:473 ../libsvn_fs_base/dag.c:737
-#: ../libsvn_fs_fs/dag.c:393
+#: ../libsvn_fs_fs/dag.c:384
#, c-format
msgid "Attempted to clone child of non-mutable node"
-msgstr "Tentative de clonage d'un enfant de nœud non modifiable"
+msgstr "Tentative de clonage d'un descendant de nœud non modifiable"
#: ../libsvn_fs_base/dag.c:480
#, c-format
msgid "Attempted to create entry that already exists"
msgstr "Tentative de création d'une entrée qui existe déjà"
-#: ../libsvn_fs_base/dag.c:529 ../libsvn_fs_fs/dag.c:454
+#: ../libsvn_fs_base/dag.c:529 ../libsvn_fs_fs/dag.c:462
msgid "Attempted to set entry in non-directory node"
msgstr "Tentative de fixer une entrée à un nœud qui n'est pas un répertoire"
-#: ../libsvn_fs_base/dag.c:535 ../libsvn_fs_fs/dag.c:460
+#: ../libsvn_fs_base/dag.c:535 ../libsvn_fs_fs/dag.c:468
msgid "Attempted to set entry in immutable node"
msgstr "Tentative de fixer une entrée à un nœud non modifiable"
@@ -2601,7 +2719,7 @@ msgstr "Impossible de fixer des propriétés sur la révision de nœud *non modi
#: ../libsvn_fs_base/dag.c:743
#, c-format
msgid "Attempted to make a child clone with an illegal name '%s'"
-msgstr "Tentative de clonage d'un enfant avec un nom illégal '%s'"
+msgstr "Tentative de clonage d'un descendant avec un nom illégal '%s'"
#: ../libsvn_fs_base/dag.c:860
#, c-format
@@ -2653,52 +2771,32 @@ msgstr "Tentative de définir le contenu textuel d'un nœud qui n'est pas un fic
msgid "Attempted to set textual contents of an immutable node"
msgstr "Tentative de définir le contenu textuel d'un nœud non modifiable"
-#: ../libsvn_fs_base/dag.c:1281 ../libsvn_fs_base/reps-strings.c:829
+#: ../libsvn_fs_base/dag.c:1279 ../libsvn_fs_base/reps-strings.c:829
#, c-format
msgid "Checksum mismatch on representation '%s'"
msgstr "Somme de contrôle différentes sur la représentation '%s'"
-#: ../libsvn_fs_base/dag.c:1282 ../libsvn_fs_base/reps-strings.c:830
-#: ../libsvn_fs_base/reps-strings.c:928 ../libsvn_fs_base/reps-strings.c:943
-#: ../libsvn_fs_base/tree.c:3883 ../libsvn_fs_fs/dag.c:1028
-#: ../libsvn_fs_fs/fs_fs.c:3501 ../libsvn_fs_fs/tree.c:2462
-#: ../libsvn_ra_neon/fetch.c:751 ../libsvn_ra_svn/client.c:1075
-#: ../libsvn_repos/commit.c:608 ../libsvn_repos/load-fs-vtable.c:527
-#, c-format
-msgid " expected: %s"
-msgstr " attendu : %s"
-
-#: ../libsvn_fs_base/dag.c:1283 ../libsvn_fs_base/reps-strings.c:831
-#: ../libsvn_fs_base/reps-strings.c:929 ../libsvn_fs_base/reps-strings.c:944
-#: ../libsvn_fs_base/tree.c:3884 ../libsvn_fs_fs/dag.c:1029
-#: ../libsvn_fs_fs/fs_fs.c:3502 ../libsvn_fs_fs/tree.c:2463
-#: ../libsvn_ra_neon/fetch.c:752 ../libsvn_ra_svn/client.c:1076
-#: ../libsvn_repos/commit.c:609 ../libsvn_repos/load-fs-vtable.c:528
-#, c-format
-msgid " actual: %s"
-msgstr " obtenu : %s"
-
-#: ../libsvn_fs_base/dag.c:1379
+#: ../libsvn_fs_base/dag.c:1373
#, c-format
msgid "Attempted to open non-existent child node '%s'"
msgstr "Tentative d'ouverture d'un nœud fils non existant '%s'"
-#: ../libsvn_fs_base/dag.c:1385
+#: ../libsvn_fs_base/dag.c:1379
#, c-format
msgid "Attempted to open node with an illegal name '%s'"
msgstr "Tentative d'ouverture d'un nœud avec un nom illégal '%s'"
-#: ../libsvn_fs_base/dag.c:1927
+#: ../libsvn_fs_base/dag.c:1701
#, c-format
msgid "Attempted merge tracking info change on immutable node"
msgstr "Tentative de modifier une information de suivi de fusion sur un nœud non modifiable"
-#: ../libsvn_fs_base/dag.c:1967
+#: ../libsvn_fs_base/dag.c:1741
#, c-format
msgid "Attempted mergeinfo count change on immutable node"
msgstr "Tentative de modifier un compte d'information de fusion sur un nœud non modifiable"
-#: ../libsvn_fs_base/dag.c:1979
+#: ../libsvn_fs_base/dag.c:1753
#, c-format
msgid "Invalid value (%%%s) for node revision mergeinfo count"
msgstr "Valeur invalide (%%%s) du compteur d'informations du fusion du nœud"
@@ -2708,62 +2806,62 @@ msgstr "Valeur invalide (%%%s) du compteur d'informations du fusion du nœud"
msgid "Corrupt filesystem revision %ld in filesystem '%s'"
msgstr "Révision %ld du système de fichiers '%s' corrompue"
-#: ../libsvn_fs_base/err.c:57 ../libsvn_fs_fs/fs_fs.c:2156
+#: ../libsvn_fs_base/err.c:57 ../libsvn_fs_fs/fs_fs.c:2018
#, c-format
msgid "Reference to non-existent node '%s' in filesystem '%s'"
msgstr "Référence à un nœud inexistant '%s' du système de fichiers '%s'"
-#: ../libsvn_fs_base/err.c:67
+#: ../libsvn_fs_base/err.c:68
#, c-format
msgid "No such revision %ld in filesystem '%s'"
msgstr "Révision %ld du système de fichiers '%s' n'existe pas"
-#: ../libsvn_fs_base/err.c:79
+#: ../libsvn_fs_base/err.c:80
#, c-format
msgid "Corrupt entry in 'transactions' table for '%s' in filesystem '%s'"
msgstr "Entrée corrompue dans la table 'transactions' pour '%s' du système de fichiers '%s'"
-#: ../libsvn_fs_base/err.c:90
+#: ../libsvn_fs_base/err.c:91
#, c-format
msgid "Corrupt entry in 'copies' table for '%s' in filesystem '%s'"
msgstr "Entrée corrompue dans la table 'copies' pour '%s' du système de fichiers '%s'"
-#: ../libsvn_fs_base/err.c:101
+#: ../libsvn_fs_base/err.c:102
#, c-format
msgid "No transaction named '%s' in filesystem '%s'"
msgstr "Aucune transaction appelée '%s' dans le système de fichiers '%s'"
-#: ../libsvn_fs_base/err.c:112
+#: ../libsvn_fs_base/err.c:113
#, c-format
msgid "Cannot modify transaction named '%s' in filesystem '%s'"
msgstr "Impossible de modifier la transaction appelée '%s' dans le système de fichiers '%s'"
-#: ../libsvn_fs_base/err.c:123
+#: ../libsvn_fs_base/err.c:124
#, c-format
msgid "No copy with id '%s' in filesystem '%s'"
msgstr "Aucune copie avec l'id '%s' dans le système de fichiers '%s'"
-#: ../libsvn_fs_base/err.c:133
+#: ../libsvn_fs_base/err.c:134
#, c-format
msgid "Token '%s' does not point to any existing lock in filesystem '%s'"
msgstr "Le nom '%s' ne correspond à aucun verrou du système de fichiers '%s'"
-#: ../libsvn_fs_base/err.c:143
+#: ../libsvn_fs_base/err.c:144
#, c-format
msgid "No token given for path '%s' in filesystem '%s'"
msgstr "Pas de nom pour '%s' dans le système de fichiers '%s'"
-#: ../libsvn_fs_base/err.c:152
+#: ../libsvn_fs_base/err.c:153
#, c-format
msgid "Corrupt lock in 'locks' table for '%s' in filesystem '%s'"
msgstr "Verrou corrompu dans la table 'locks' pour '%s' dans le système de fichiers '%s'"
-#: ../libsvn_fs_base/err.c:162
+#: ../libsvn_fs_base/err.c:163
#, c-format
msgid "No record in 'node-origins' table for node id '%s' in filesystem '%s'"
msgstr "Pas d'enregistrement dans la table 'node-origins' pour le nœud '%s' du système de fichiers '%s'"
-#: ../libsvn_fs_base/err.c:172
+#: ../libsvn_fs_base/err.c:173
#, c-format
msgid "No record in 'checksum-reps' table for checksum '%s' in filesystem '%s'"
msgstr "Pas d'enregistrement dans la table 'checksum-reps' pour la clé '%s' du système de fichiers '%s'"
@@ -2783,27 +2881,32 @@ msgstr "Mauvaise version de la base : compilée avec %d.%d.%d, tourne avec %d.%
msgid "Berkeley DB error for filesystem '%s' while closing environment:\n"
msgstr "Erreur de base Berkeley pour le système de fichiers '%s' en cloturant l'environnement :\n"
-#: ../libsvn_fs_base/fs.c:539
+#: ../libsvn_fs_base/fs.c:534
#, c-format
msgid "Berkeley DB error for filesystem '%s' while creating environment:\n"
msgstr "Erreur de base Berkeley pour le système de fichiers '%s' en créant l'environnement :\n"
-#: ../libsvn_fs_base/fs.c:545
+#: ../libsvn_fs_base/fs.c:540
#, c-format
msgid "Berkeley DB error for filesystem '%s' while opening environment:\n"
msgstr "Erreur de base Berkeley pour le système de fichiers '%s' en ouvrant l'environnement :\n"
-#: ../libsvn_fs_base/fs.c:711
+#: ../libsvn_fs_base/fs.c:714
#, c-format
msgid "The '%s' feature requires version %d of the filesystem schema; filesystem '%s' uses only version %d"
msgstr "Le module '%s' nécessite la version %d du schéma du système de fichiers ; le système de fichiers '%s' est à la version %d"
-#: ../libsvn_fs_base/fs.c:730
+#: ../libsvn_fs_base/fs.c:733
#, c-format
msgid "Expected FS format '%d'; found format '%d'"
msgstr "Format de stockage attendu '%d' ; format trouvé '%d'"
-#: ../libsvn_fs_base/fs.c:1273
+#: ../libsvn_fs_base/fs.c:1196
+#, c-format
+msgid "BDB repositories do not support incremental hotcopy"
+msgstr "Les dépôts BDB ne supportent pas les copies à chaud incrémentales"
+
+#: ../libsvn_fs_base/fs.c:1300
msgid ""
"Error copying logfile; the DB_LOG_AUTOREMOVE feature\n"
"may be interfering with the hotcopy algorithm. If\n"
@@ -2814,7 +2917,7 @@ msgstr ""
"interfère peut-être avec la copie à chaud (hotcopy).\n"
"Si le problème persiste, essayer de la désactiver dans DB_CONFIG"
-#: ../libsvn_fs_base/fs.c:1292
+#: ../libsvn_fs_base/fs.c:1319
msgid ""
"Error running catastrophic recovery on hotcopy; the\n"
"DB_LOG_AUTOREMOVE feature may be interfering with the\n"
@@ -2825,33 +2928,33 @@ msgstr ""
"L'option DB_LOG_AUTOREMOVE interfère peut être avec la copie à chaud.\n"
"Si le problème persiste, essayer de la désactiver dans DB_CONFIG"
-#: ../libsvn_fs_base/fs.c:1337
+#: ../libsvn_fs_base/fs.c:1364
msgid "Module for working with a Berkeley DB repository."
msgstr "Module destiné à travailler avec un dépôt Berkeley DB."
-#: ../libsvn_fs_base/fs.c:1373
+#: ../libsvn_fs_base/fs.c:1401
#, c-format
msgid "Unsupported FS loader version (%d) for bdb"
msgstr "Version %d du chargeur FS non supportée pour bdb"
#: ../libsvn_fs_base/lock.c:105 ../libsvn_fs_base/lock.c:110
-#: ../libsvn_fs_fs/lock.c:778 ../libsvn_fs_fs/lock.c:783
-#: ../libsvn_fs_fs/lock.c:805
+#: ../libsvn_fs_fs/lock.c:789 ../libsvn_fs_fs/lock.c:794
+#: ../libsvn_fs_fs/lock.c:816
#, c-format
msgid "Path '%s' doesn't exist in HEAD revision"
msgstr "Le chemin '%s' n'existe pas à la révision de tête (HEAD)"
-#: ../libsvn_fs_base/lock.c:535 ../libsvn_fs_fs/lock.c:673
+#: ../libsvn_fs_base/lock.c:533 ../libsvn_fs_fs/lock.c:684
#, c-format
msgid "Cannot verify lock on path '%s'; no username available"
msgstr "Impossible de vérifier le verrou sur le chemin '%s' ; Aucun nom d'utilisateur disponible"
-#: ../libsvn_fs_base/lock.c:541 ../libsvn_fs_fs/lock.c:679
+#: ../libsvn_fs_base/lock.c:539 ../libsvn_fs_fs/lock.c:690
#, c-format
msgid "User '%s' does not own lock on path '%s' (currently locked by '%s')"
msgstr "L'utilisateur '%s' ne possède pas le verrou sur '%s' (actuellement verrouillé par %s)"
-#: ../libsvn_fs_base/lock.c:548 ../libsvn_fs_fs/lock.c:686
+#: ../libsvn_fs_base/lock.c:546 ../libsvn_fs_fs/lock.c:697
#, c-format
msgid "Cannot verify lock on path '%s'; no matching lock-token available"
msgstr "Le verrou sur '%s' ne peut être vérifié : pas de verrou de ce nom"
@@ -2871,94 +2974,89 @@ msgstr "La représentation n'est pas de type 'delta'"
msgid "Svndiff source length inconsistency"
msgstr "Incohérence de longueur de la source de svndiff"
-#: ../libsvn_fs_base/reps-strings.c:507
+#: ../libsvn_fs_base/reps-strings.c:506
#, c-format
msgid "Diff version inconsistencies in representation '%s'"
msgstr "Incohérence de version de diff dans la représentation '%s'"
-#: ../libsvn_fs_base/reps-strings.c:533
+#: ../libsvn_fs_base/reps-strings.c:532
#, c-format
msgid "Corruption detected whilst reading delta chain from representation '%s' to '%s'"
msgstr "Corruption détectée pendant la lecture du delta de la représentation '%s' à '%s'"
-#: ../libsvn_fs_base/reps-strings.c:797
+#: ../libsvn_fs_base/reps-strings.c:798
#, c-format
msgid "Rep contents are too large: got %s, limit is %s"
msgstr "Le contenu de la représentation est trop grand : %s, la limite est %s"
-#: ../libsvn_fs_base/reps-strings.c:813
+#: ../libsvn_fs_base/reps-strings.c:814
#, c-format
msgid "Failure reading representation '%s'"
msgstr "Échec à la lecture de la représentation '%s'"
-#: ../libsvn_fs_base/reps-strings.c:927
+#: ../libsvn_fs_base/reps-strings.c:924
#, c-format
msgid "MD5 checksum mismatch on representation '%s'"
msgstr "Sommes de contrôle MD5 différentes sur la représentation '%s'"
-#: ../libsvn_fs_base/reps-strings.c:942
+#: ../libsvn_fs_base/reps-strings.c:934
#, c-format
msgid "SHA1 checksum mismatch on representation '%s'"
msgstr "Sommes de contrôle SHA1 différentes sur la représentation '%s'"
-#: ../libsvn_fs_base/reps-strings.c:958
+#: ../libsvn_fs_base/reps-strings.c:945
msgid "Null rep, but offset past zero already"
msgstr "Représentation nulle, mais décallage déjà au delà de zéro"
-#: ../libsvn_fs_base/reps-strings.c:1072 ../libsvn_fs_base/reps-strings.c:1263
+#: ../libsvn_fs_base/reps-strings.c:1062 ../libsvn_fs_base/reps-strings.c:1253
#, c-format
msgid "Rep '%s' is not mutable"
msgstr "La représentation '%s' n'est pas modifiable"
-#: ../libsvn_fs_base/reps-strings.c:1087
+#: ../libsvn_fs_base/reps-strings.c:1077
#, c-format
msgid "Rep '%s' both mutable and non-fulltext"
msgstr "Représentation '%s' à la fois modifiable et pas plein-texte"
-#: ../libsvn_fs_base/reps-strings.c:1382
+#: ../libsvn_fs_base/reps-strings.c:1372
msgid "Failed to get new string key"
msgstr "Échec à l'obtention d'une nouvelle chaîne clef"
-#: ../libsvn_fs_base/reps-strings.c:1459
+#: ../libsvn_fs_base/reps-strings.c:1449
#, c-format
msgid "Attempt to deltify '%s' against itself"
msgstr "Tentative de différencier '%s' avec lui-même"
-#: ../libsvn_fs_base/reps-strings.c:1530 ../libsvn_fs_base/reps-strings.c:1723
+#: ../libsvn_fs_base/reps-strings.c:1520
#, c-format
msgid "Failed to calculate MD5 digest for '%s'"
msgstr "Échec du calcul du résumé MD5 de '%s'"
-#: ../libsvn_fs_base/reps-strings.c:1672
-#, c-format
-msgid "Attempt to obliterate '%s' using itself "
-msgstr "Tentative d'oblitérer '%s' avec lui-même"
-
-#: ../libsvn_fs_base/revs-txns.c:73
+#: ../libsvn_fs_base/revs-txns.c:72
#, c-format
msgid "Transaction is not dead: '%s'"
msgstr "La transaction n'est pas morte : '%s'"
-#: ../libsvn_fs_base/revs-txns.c:76
+#: ../libsvn_fs_base/revs-txns.c:75
#, c-format
msgid "Transaction is dead: '%s'"
msgstr "Transaction morte : '%s'"
-#: ../libsvn_fs_base/revs-txns.c:274 ../libsvn_fs_fs/fs_fs.c:7382
+#: ../libsvn_fs_base/revs-txns.c:273 ../libsvn_fs_fs/fs_fs.c:8131
#, c-format
msgid "revprop '%s' has unexpected value in filesystem"
msgstr "la propriété de révision '%s' a une valeur inattendue le système de fichiers"
-#: ../libsvn_fs_base/revs-txns.c:1231
+#: ../libsvn_fs_base/revs-txns.c:1031
msgid "Transaction aborted, but cleanup failed"
msgstr "Transaction interrompue, mais échec du nettoyage (cleanup)"
-#: ../libsvn_fs_base/tree.c:773 ../libsvn_fs_fs/tree.c:696
+#: ../libsvn_fs_base/tree.c:773 ../libsvn_fs_fs/tree.c:700
#, c-format
msgid "Failure opening '%s'"
msgstr "Échec à l'ouverture de '%s'"
-#: ../libsvn_fs_base/tree.c:1405 ../libsvn_fs_fs/tree.c:1125
+#: ../libsvn_fs_base/tree.c:1405 ../libsvn_fs_fs/tree.c:1129
msgid "Cannot compare property value between two different filesystems"
msgstr "Impossible de comparer des propriétés entre deux systèmes de fichiers différents"
@@ -2966,23 +3064,23 @@ msgstr "Impossible de comparer des propriétés entre deux systèmes de fichiers
msgid "Corrupt DB: faulty predecessor count"
msgstr "Base de données corrompue : nombre de prédécesseurs incorrect"
-#: ../libsvn_fs_base/tree.c:1978 ../libsvn_fs_base/tree.c:2997
-#: ../libsvn_fs_fs/tree.c:1158
+#: ../libsvn_fs_base/tree.c:1978
#, c-format
msgid "Unexpected immutable node at '%s'"
msgstr "Nœud non-modifiable inattendu à '%s'"
-#: ../libsvn_fs_base/tree.c:1999 ../libsvn_fs_fs/tree.c:1179
+#: ../libsvn_fs_base/tree.c:1999 ../libsvn_fs_fs/tree.c:1159
+#: ../libsvn_repos/commit.c:1235
#, c-format
msgid "Conflict at '%s'"
msgstr "Conflit sur '%s'"
-#: ../libsvn_fs_base/tree.c:2052 ../libsvn_fs_base/tree.c:2846
-#: ../libsvn_fs_fs/tree.c:1230 ../libsvn_fs_fs/tree.c:1786
+#: ../libsvn_fs_base/tree.c:2052 ../libsvn_fs_base/tree.c:2804
+#: ../libsvn_fs_fs/tree.c:1210 ../libsvn_fs_fs/tree.c:1747
msgid "Bad merge; ancestor, source, and target not all in same fs"
msgstr "Mauvaise fusion (merge) ; parent, source et cible pas tous dans le même FS"
-#: ../libsvn_fs_base/tree.c:2068 ../libsvn_fs_fs/tree.c:1246
+#: ../libsvn_fs_base/tree.c:2068 ../libsvn_fs_fs/tree.c:1226
#, c-format
msgid "Bad merge; target '%s' has id '%s', same as ancestor"
msgstr "Mauvaise fusion (merge) ; la cible '%s' a l'id '%s', comme le parent"
@@ -2992,427 +3090,450 @@ msgstr "Mauvaise fusion (merge) ; la cible '%s' a l'id '%s', comme le parent"
msgid "Transaction '%s' out-of-date with respect to revision '%s'"
msgstr "Transaction '%s' obsolète par rapport à la révision '%s'"
-#: ../libsvn_fs_base/tree.c:2930
+#: ../libsvn_fs_base/tree.c:2888
#, c-format
msgid "Cannot deltify revisions prior to r%ld"
msgstr "Impossible de calculer les différences de révisions avant r%ld"
-#: ../libsvn_fs_base/tree.c:3002
-#, c-format
-msgid "Cannot obliterate '%s' as it is not a file"
-msgstr "Impossible d'oblitérer '%s' parce que ce n'est pas un fichier"
-
-#: ../libsvn_fs_base/tree.c:3137 ../libsvn_fs_fs/tree.c:1923
+#: ../libsvn_fs_base/tree.c:3006 ../libsvn_fs_fs/tree.c:1884
msgid "The root directory cannot be deleted"
msgstr "Le répertoire racine ne peut être effacé"
-#: ../libsvn_fs_base/tree.c:3360 ../libsvn_fs_fs/tree.c:2004
+#: ../libsvn_fs_base/tree.c:3219 ../libsvn_fs_fs/tree.c:1954
#, c-format
msgid "Cannot copy between two different filesystems ('%s' and '%s')"
msgstr "Impossible de copier d'un système de fichiers à l'autre ('%s' et '%s')"
-#: ../libsvn_fs_base/tree.c:3369 ../libsvn_fs_fs/tree.c:2010
+#: ../libsvn_fs_base/tree.c:3228 ../libsvn_fs_fs/tree.c:1960
msgid "Copy from mutable tree not currently supported"
msgstr "Copie à partir d'un arbre modifiable non supportée"
-#: ../libsvn_fs_base/tree.c:3882 ../libsvn_fs_fs/tree.c:2461
+#: ../libsvn_fs_base/tree.c:3739 ../libsvn_fs_fs/tree.c:2407
#, c-format
msgid "Base checksum mismatch on '%s'"
msgstr "Sommes de contrôle différentes sur '%s'"
-#: ../libsvn_fs_base/tree.c:4131 ../libsvn_fs_fs/tree.c:2693
+#: ../libsvn_fs_base/tree.c:3972 ../libsvn_fs_fs/tree.c:2622
msgid "Cannot compare file contents between two different filesystems"
msgstr "Impossible de comparer le contenu de fichiers dans des système de fichiers différents"
-#: ../libsvn_fs_base/tree.c:5293 ../libsvn_fs_base/tree.c:5485
+#: ../libsvn_fs_base/tree.c:5009 ../libsvn_fs_base/tree.c:5187
#, c-format
msgid "Node-revision '%s' claims to have mergeinfo but doesn't"
msgstr "La révision du nœud '%s' déclare une information de fusion mais n'en a pas"
-#: ../libsvn_fs_base/tree.c:5317
+#: ../libsvn_fs_base/tree.c:5046
#, c-format
msgid "Node-revision '%s' claims to sit atop a tree containing mergeinfo but is not a directory"
msgstr "La révision du nœud '%s' déclare être une tête d'information de fusion mais n'est pas un répertoire"
-#: ../libsvn_fs_fs/caching.c:75
-msgid "Bad ID in cache"
-msgstr "Mauvais ID dans le cache"
-
-#: ../libsvn_fs_fs/dag.c:436 ../libsvn_ra_serf/serf.c:848
+#: ../libsvn_fs_fs/dag.c:426 ../libsvn_fs_fs/dag.c:442
+#: ../libsvn_ra_serf/serf.c:914 ../libsvn_ra_serf/serf.c:977
msgid "Can't get entries of non-directory"
msgstr "Liste des entrées seulement pour un répertoire"
-#: ../libsvn_fs_fs/dag.c:543
+#: ../libsvn_fs_fs/dag.c:551
#, c-format
msgid "Can't increment mergeinfo count on node-revision %%s to negative value %%%s"
msgstr "Impossible d'incrémenter le compteur d'information de fusion sur la révision du nœud %%s à une valeur négative %%%s"
-#: ../libsvn_fs_fs/dag.c:554
+#: ../libsvn_fs_fs/dag.c:562
#, c-format
msgid "Can't increment mergeinfo count on *file* node-revision %%s to %%%s (> 1)"
msgstr "Impossible d'incrémenter le compteur d'informations du fusion sur le *fichier* de la révision de nœud %%s à %%%s (> 1)"
-#: ../libsvn_fs_fs/dag.c:1027 ../libsvn_ra_neon/fetch.c:750
-#: ../libsvn_ra_svn/client.c:1074
-#, c-format
-msgid "Checksum mismatch for '%s'"
-msgstr "Sommes de contrôle différentes pour '%s'"
-
-#: ../libsvn_fs_fs/dag.c:1132
+#: ../libsvn_fs_fs/dag.c:1116
msgid "Empty noderev in cache"
msgstr "'noderev' vide dans le cache"
-#: ../libsvn_fs_fs/dag.c:1142
-msgid "Kindless noderev in cache"
-msgstr "'noderev' sans type dans le cache"
-
-#: ../libsvn_fs_fs/dag.c:1149
+#: ../libsvn_fs_fs/dag.c:1308
#, c-format
-msgid "Unknown kind for noderev in cache: '%c'"
-msgstr "Type de 'noderev' inconnu dans le cache : '%c'"
-
-#: ../libsvn_fs_fs/dag.c:1156
-msgid "Unterminated ID in cache"
-msgstr "ID non terminé dans le cache"
+msgid "Attempted to update ancestry of non-mutable node"
+msgstr "Tentative de modification d'un ascendant de nœud non modifiable"
-#: ../libsvn_fs_fs/dag.c:1161
-#, c-format
-msgid "Bogus ID '%s' in cache"
-msgstr "ID '%s' erroné dans le cache"
-
-#: ../libsvn_fs_fs/dag.c:1168
-msgid "No created path"
-msgstr "Pas de chemin créé"
-
-#: ../libsvn_fs_fs/dag.c:1194
-#, c-format
-msgid "Unknown node type in cache: '%c'"
-msgstr "Type de nœud inconnu dans le cache '%c'"
-
-#: ../libsvn_fs_fs/fs.c:80
+#: ../libsvn_fs_fs/fs.c:81
#, c-format
msgid "Can't fetch FSFS shared data"
msgstr "Impossible de charger les données partagées de FSFS"
-#: ../libsvn_fs_fs/fs.c:96
-#, c-format
-msgid "Can't create FSFS write-lock mutex"
-msgstr "Impossible de créer l'exclusivité en écriture (write-lock mutex) de FSFS"
-
-#: ../libsvn_fs_fs/fs.c:103
-#, c-format
-msgid "Can't create FSFS txn-current mutex"
-msgstr "Impossible de créer l'exclusivité pour la transaction en cours de FSFS (txn-current mutex)"
-
-#: ../libsvn_fs_fs/fs.c:112
-#, c-format
-msgid "Can't create FSFS txn list mutex"
-msgstr "Impossible de créer l'exclusivité (txn list mutex) de FSFS"
-
-#: ../libsvn_fs_fs/fs.c:119
+#: ../libsvn_fs_fs/fs.c:105
#, c-format
msgid "Can't store FSFS shared data"
msgstr "Impossible de stocker les données partagées de FSFS"
-#: ../libsvn_fs_fs/fs.c:333
+#: ../libsvn_fs_fs/fs.c:353
msgid "Module for working with a plain file (FSFS) repository."
msgstr "Module de stockage de dépôt à base de fichiers simples (FSFS)."
-#: ../libsvn_fs_fs/fs.c:369
+#: ../libsvn_fs_fs/fs.c:390
#, c-format
msgid "Unsupported FS loader version (%d) for fsfs"
msgstr "Version %d du chargeur FS non supportée pour fsfs"
-#: ../libsvn_fs_fs/fs_fs.c:504
-#, c-format
-msgid "Can't grab FSFS txn list mutex"
-msgstr "Impossible d'obtenir l'exclusivité (txn list mutex) de FSFS"
-
-#: ../libsvn_fs_fs/fs_fs.c:512
-#, c-format
-msgid "Can't ungrab FSFS txn list mutex"
-msgstr "Impossible de rendre l'exclusivité (txn list mutex) de FSFS"
-
-#: ../libsvn_fs_fs/fs_fs.c:566
-#, c-format
-msgid "Can't grab FSFS mutex for '%s'"
-msgstr "Impossible d'obtenir l'exclusivité (mutex) sur FSFS pour '%s'"
-
-#: ../libsvn_fs_fs/fs_fs.c:592
-#, c-format
-msgid "Can't ungrab FSFS mutex for '%s'"
-msgstr "Impossible de rendre l'exclusivité (mutex) sur FSFS pour '%s'"
-
-#: ../libsvn_fs_fs/fs_fs.c:663
+#: ../libsvn_fs_fs/fs_fs.c:668
#, c-format
msgid "Can't unlock unknown transaction '%s'"
msgstr "Impossible de déverrouiller la transaction inconnue '%s'"
-#: ../libsvn_fs_fs/fs_fs.c:667
+#: ../libsvn_fs_fs/fs_fs.c:672
#, c-format
msgid "Can't unlock nonlocked transaction '%s'"
msgstr "Impossible de déverrouiller la transaction non verrouillée '%s'"
-#: ../libsvn_fs_fs/fs_fs.c:674
+#: ../libsvn_fs_fs/fs_fs.c:679
#, c-format
msgid "Can't unlock prototype revision lockfile for transaction '%s'"
msgstr "Impossible de déverrouiller le fichier verrou du prototype de révision pour la transaction '%s'"
-#: ../libsvn_fs_fs/fs_fs.c:680
+#: ../libsvn_fs_fs/fs_fs.c:685
#, c-format
msgid "Can't close prototype revision lockfile for transaction '%s'"
msgstr "Impossible de fermer le fichier verrou du prototype de révision pour la transaction '%s'"
-#: ../libsvn_fs_fs/fs_fs.c:742
+#: ../libsvn_fs_fs/fs_fs.c:747
#, c-format
msgid "Cannot write to the prototype revision file of transaction '%s' because a previous representation is currently being written by this process"
msgstr "Impossible d'écrire dans le fichier du prototype de révision de la transaction '%s' parce qu'une représentation précédente est en cours d'écriture par ce processus."
-#: ../libsvn_fs_fs/fs_fs.c:778
+#: ../libsvn_fs_fs/fs_fs.c:783
#, c-format
msgid "Cannot write to the prototype revision file of transaction '%s' because a previous representation is currently being written by another process"
msgstr "Impossible d'écrire dans le fichier de prototype de révision de la transaction '%s' parce qu'une représentation précédente est en cours d'écriture par un autre processus"
-#: ../libsvn_fs_fs/fs_fs.c:785 ../libsvn_subr/io.c:1733
+#: ../libsvn_fs_fs/fs_fs.c:790 ../libsvn_subr/io.c:1998
#, c-format
msgid "Can't get exclusive lock on file '%s'"
msgstr "Impossible d'obtenir le verrou exclusif sur le fichier '%s'"
-#: ../libsvn_fs_fs/fs_fs.c:897
+#: ../libsvn_fs_fs/fs_fs.c:909
#, c-format
-msgid "Format file '%s' contains unexpected non-digit '%c' within '%s'"
-msgstr "Le fichier de format '%s' contient un caractère non-numérique inattendu '%c' dans '%s'"
+msgid "%s file '%s' contains unexpected non-digit '%c' within '%s'"
+msgstr "Le fichier %s '%s' contient un caractère non-numérique inattendu '%c' dans '%s'"
-#: ../libsvn_fs_fs/fs_fs.c:946
+#: ../libsvn_fs_fs/fs_fs.c:968
#, c-format
msgid "Can't read first line of format file '%s'"
msgstr "Impossible de lire la première ligne du fichier de format '%s'"
-#: ../libsvn_fs_fs/fs_fs.c:990
+#: ../libsvn_fs_fs/fs_fs.c:1005
#, c-format
msgid "'%s' contains invalid filesystem format option '%s'"
msgstr "'%s' contient une option invalide '%s' pour le format de stockage"
-#: ../libsvn_fs_fs/fs_fs.c:1060
+#: ../libsvn_fs_fs/fs_fs.c:1071
+#, c-format
+msgid "Found format '%d', only created by unreleased dev builds; see http://subversion.apache.org/docs/release-notes/1.7#revprop-packing"
+msgstr "Format '%d' uniquement créé par des versions non officielles ; Voir http://subversion.apache.org/docs/release-notes/1.7#revprop-packing"
+
+#: ../libsvn_fs_fs/fs_fs.c:1082
#, c-format
msgid "Expected FS format between '1' and '%d'; found format '%d'"
msgstr "Format de stockage attendu entre '1' et '%d' ; format trouvé '%d'"
-#: ../libsvn_fs_fs/fs_fs.c:1304
+#: ../libsvn_fs_fs/fs_fs.c:1366
#, c-format
msgid "'%s' is not a regular file. Please move it out of the way and try again"
msgstr "'%s' n'est pas un vrai ifichier. Merci de le déplacer et de recommencer"
-#: ../libsvn_fs_fs/fs_fs.c:1560
+#: ../libsvn_fs_fs/fs_fs.c:1574 ../libsvn_fs_fs/fs_fs.c:1593
#, c-format
-msgid "Failed to create hotcopy at '%s'. The file '%s' is missing from the source repository. Please create this file, for instance by running 'svnadmin upgrade %s'"
-msgstr "Échec à la création une copie à chaud (hotcopy) vers '%s'. Le fichier '%s' manque du dépôt source. Merci de créer ce fichier, par exemple en lançant 'svnadmin upgrade %s'"
-
-#: ../libsvn_fs_fs/fs_fs.c:1797 ../libsvn_fs_fs/fs_fs.c:1811
-msgid "Found malformed header in revision file"
-msgstr "Entête malformée dans le fichier de révision"
+msgid "Found malformed header '%s' in revision file"
+msgstr "Entête '%s' malformée dans le fichier de révision"
-#: ../libsvn_fs_fs/fs_fs.c:1845
+#: ../libsvn_fs_fs/fs_fs.c:1629
#, c-format
msgid "Invalid revision number '%ld'"
msgstr "Numéro de révision invalide '%ld'"
-#: ../libsvn_fs_fs/fs_fs.c:1860 ../libsvn_fs_fs/fs_fs.c:1904
-#: ../libsvn_fs_fs/fs_fs.c:2939 ../libsvn_fs_fs/fs_fs.c:2977
-#: ../libsvn_repos/log.c:1654 ../libsvn_repos/log.c:1658
+#: ../libsvn_fs_fs/fs_fs.c:1644 ../libsvn_fs_fs/fs_fs.c:1698
+#: ../libsvn_repos/log.c:2237 ../libsvn_repos/log.c:2241
#, c-format
msgid "No such revision %ld"
msgstr "Pas de révision %ld"
-#: ../libsvn_fs_fs/fs_fs.c:1972
-msgid "Manifest offset too large"
-msgstr "Décallage de l'annonce (Manifest) trop grand"
+#: ../libsvn_fs_fs/fs_fs.c:1736
+msgid "Unexpected EOF"
+msgstr "Fin de fichier (EOF) inattendue"
-#: ../libsvn_fs_fs/fs_fs.c:2082 ../libsvn_fs_fs/fs_fs.c:2096
-#: ../libsvn_fs_fs/fs_fs.c:2104 ../libsvn_fs_fs/fs_fs.c:2112
-#: ../libsvn_fs_fs/fs_fs.c:2121 ../libsvn_fs_fs/fs_fs.c:2134
-#: ../libsvn_fs_fs/fs_fs.c:2143
+#: ../libsvn_fs_fs/fs_fs.c:1743
+#, c-format
+msgid "Number '%s' invalid or too large"
+msgstr "Numéro '%s' invalide ou trop grand"
+
+#: ../libsvn_fs_fs/fs_fs.c:1910 ../libsvn_fs_fs/fs_fs.c:1924
+#: ../libsvn_fs_fs/fs_fs.c:1932 ../libsvn_fs_fs/fs_fs.c:1940
+#: ../libsvn_fs_fs/fs_fs.c:1949 ../libsvn_fs_fs/fs_fs.c:1962
+#: ../libsvn_fs_fs/fs_fs.c:1971
msgid "Malformed text representation offset line in node-rev"
msgstr "Ligne 'offset' d'une représentation textuelle malformée dans 'node-rev'"
-#: ../libsvn_fs_fs/fs_fs.c:2222
+#: ../libsvn_fs_fs/fs_fs.c:2002
+#, c-format
+msgid "While reading representation offsets for node-revision '%s':"
+msgstr "En lisant le décallage de la représentation pour le nœud de révision '%s' :"
+
+#: ../libsvn_fs_fs/fs_fs.c:2153
msgid "Missing id field in node-rev"
msgstr "Champs 'id' manquant dans 'node-rev'"
-#: ../libsvn_fs_fs/fs_fs.c:2234
-msgid "Missing kind field in node-rev"
-msgstr "Champs 'kind' manquant dans 'node-rev'"
+#: ../libsvn_fs_fs/fs_fs.c:2167
+#, c-format
+msgid "Missing kind field in node-rev '%s'"
+msgstr "Champs 'kind' manquant dans 'node-rev' '%s'"
-#: ../libsvn_fs_fs/fs_fs.c:2268
-msgid "Missing cpath in node-rev"
-msgstr "'cpath' manquant dans 'node-rev'"
+#: ../libsvn_fs_fs/fs_fs.c:2202
+#, c-format
+msgid "Missing cpath field in node-rev '%s'"
+msgstr "'cpath' manquant dans 'node-rev' '%s'"
-#: ../libsvn_fs_fs/fs_fs.c:2295 ../libsvn_fs_fs/fs_fs.c:2301
-msgid "Malformed copyroot line in node-rev"
-msgstr "Ligne 'copyroot' malformée dans 'node-rev'"
+#: ../libsvn_fs_fs/fs_fs.c:2230 ../libsvn_fs_fs/fs_fs.c:2237
+#, c-format
+msgid "Malformed copyroot line in node-rev '%s'"
+msgstr "Ligne 'copyroot' malformée dans 'node-rev' '%s'"
-#: ../libsvn_fs_fs/fs_fs.c:2319 ../libsvn_fs_fs/fs_fs.c:2325
-msgid "Malformed copyfrom line in node-rev"
-msgstr "Ligne 'copyfrom' malformée dans 'node-rev'"
+#: ../libsvn_fs_fs/fs_fs.c:2254 ../libsvn_fs_fs/fs_fs.c:2261
+#, c-format
+msgid "Malformed copyfrom line in node-rev '%s'"
+msgstr "Ligne 'copyfrom' malformée dans 'node-rev' '%s'"
-#: ../libsvn_fs_fs/fs_fs.c:2485 ../libsvn_fs_fs/fs_fs.c:5490
-msgid "Attempted to write to non-transaction"
-msgstr "Tentative d'écriture vers une non-transaction"
+#: ../libsvn_fs_fs/fs_fs.c:2430 ../libsvn_fs_fs/fs_fs.c:6149
+#, c-format
+msgid "Attempted to write to non-transaction '%s'"
+msgstr "Tentative d'écriture vers une non-transaction '%s'"
-#: ../libsvn_fs_fs/fs_fs.c:2578
-msgid "Malformed representation header"
-msgstr "Entête de représentation mal formée"
+#: ../libsvn_fs_fs/fs_fs.c:2524
+#, c-format
+msgid "Malformed representation header at %s"
+msgstr "Entête de représentation mal formée à %s"
-#: ../libsvn_fs_fs/fs_fs.c:2606
-msgid "Missing node-id in node-rev"
-msgstr "'node-id' manquant dans 'node-rev'"
+#: ../libsvn_fs_fs/fs_fs.c:2556
+#, c-format
+msgid "Missing node-id in node-rev at r%ld (offset %s)"
+msgstr "'node-id' manquant dans 'node-rev' à r%ld (décallage %s)"
-#: ../libsvn_fs_fs/fs_fs.c:2612
-msgid "Corrupt node-id in node-rev"
-msgstr "'node-id' corrompu dans 'node-rev'"
+#: ../libsvn_fs_fs/fs_fs.c:2565
+#, c-format
+msgid "Corrupt node-id '%s' in node-rev at r%ld (offset %s)"
+msgstr "'node-id' '%s' corrompu dans 'node-rev' à r%ld (décallage %s)"
-#: ../libsvn_fs_fs/fs_fs.c:2698
+#: ../libsvn_fs_fs/fs_fs.c:2656
#, c-format
-msgid "Revision file lacks trailing newline"
-msgstr "Il manque une saut de ligne à la fin du fichier de révision"
+msgid "Revision file (r%ld) lacks trailing newline"
+msgstr "Il manque une saut de ligne à la fin du fichier de révision (r%ld)"
-#: ../libsvn_fs_fs/fs_fs.c:2711
+#: ../libsvn_fs_fs/fs_fs.c:2670
#, c-format
-msgid "Final line in revision file longer than 64 characters"
-msgstr "Dernière ligne du fichier de révision plus longue que 64 caractères"
+msgid "Final line in revision file (r%ld) longer than 64 characters"
+msgstr "Dernière ligne du fichier de révision (r%ld) plus longue que 64 caractères"
-#: ../libsvn_fs_fs/fs_fs.c:2725
-msgid "Final line in revision file missing space"
-msgstr "Il manque espace à la dernière ligne du fichier de révision"
+#: ../libsvn_fs_fs/fs_fs.c:2685
+#, c-format
+msgid "Final line in revision file r%ld missing space"
+msgstr "Il manque un espace à la dernière ligne du fichier de révision r%ld"
-#: ../libsvn_fs_fs/fs_fs.c:3056
+#: ../libsvn_fs_fs/fs_fs.c:3252
+#, c-format
+msgid "Could not read revprops for revision %ld"
+msgstr "Impossible de lire les propriétés de la révision %ld"
+
+#: ../libsvn_fs_fs/fs_fs.c:3442
msgid "Malformed svndiff data in representation"
msgstr "Représentation des données de svndiff mal formées"
-#: ../libsvn_fs_fs/fs_fs.c:3248 ../libsvn_fs_fs/fs_fs.c:3261
+#: ../libsvn_fs_fs/fs_fs.c:3833 ../libsvn_fs_fs/fs_fs.c:3852
msgid "Reading one svndiff window read beyond the end of the representation"
msgstr "Lecture d'une fenêtre svndiff au delà de la fin de la représentation"
-#: ../libsvn_fs_fs/fs_fs.c:3401
-msgid "svndiff data requested non-existent source"
-msgstr "Données de svndiff ayant requis une source inexistante"
-
-#: ../libsvn_fs_fs/fs_fs.c:3407
-msgid "svndiff requested position beyond end of stream"
-msgstr "svndiff ayant requis une position au delà de la fin du flux"
-
-#: ../libsvn_fs_fs/fs_fs.c:3430 ../libsvn_fs_fs/fs_fs.c:3447
+#: ../libsvn_fs_fs/fs_fs.c:3910
msgid "svndiff window length is corrupt"
msgstr "Taille de fenêtre de svndiff corrompue"
-#: ../libsvn_fs_fs/fs_fs.c:3500
+#: ../libsvn_fs_fs/fs_fs.c:4079
msgid "Checksum mismatch while reading representation"
msgstr "Sommes de contrôle différentes en lisant la représentation"
-#: ../libsvn_fs_fs/fs_fs.c:3797 ../libsvn_fs_fs/fs_fs.c:3810
-#: ../libsvn_fs_fs/fs_fs.c:3816 ../libsvn_fs_fs/fs_fs.c:6797
-#: ../libsvn_fs_fs/fs_fs.c:6806 ../libsvn_fs_fs/fs_fs.c:6812
-msgid "Directory entry corrupt"
-msgstr "Entrée du répertoire corrompue"
+#: ../libsvn_fs_fs/fs_fs.c:4356 ../libsvn_fs_fs/fs_fs.c:4370
+#: ../libsvn_fs_fs/fs_fs.c:4377
+#, c-format
+msgid "Directory entry corrupt in '%s'"
+msgstr "Entrée du répertoire corrompue dans '%s'"
-#: ../libsvn_fs_fs/fs_fs.c:4218 ../libsvn_fs_fs/fs_fs.c:4223
-#: ../libsvn_fs_fs/fs_fs.c:4229 ../libsvn_fs_fs/fs_fs.c:4246
-#: ../libsvn_fs_fs/fs_fs.c:4279 ../libsvn_fs_fs/fs_fs.c:4299
-#: ../libsvn_fs_fs/fs_fs.c:4333 ../libsvn_fs_fs/fs_fs.c:4338
+#: ../libsvn_fs_fs/fs_fs.c:4829 ../libsvn_fs_fs/fs_fs.c:4834
+#: ../libsvn_fs_fs/fs_fs.c:4840 ../libsvn_fs_fs/fs_fs.c:4857
+#: ../libsvn_fs_fs/fs_fs.c:4890 ../libsvn_fs_fs/fs_fs.c:4910
+#: ../libsvn_fs_fs/fs_fs.c:4945 ../libsvn_fs_fs/fs_fs.c:4950
msgid "Invalid changes line in rev-file"
msgstr "Lignes modifiées invalides dans le fichier révision (rev-file)"
-#: ../libsvn_fs_fs/fs_fs.c:4272
+#: ../libsvn_fs_fs/fs_fs.c:4883
msgid "Invalid change kind in rev file"
msgstr "Sorte de modification invalide dans le fichier révision (rev-file)"
-#: ../libsvn_fs_fs/fs_fs.c:4292
+#: ../libsvn_fs_fs/fs_fs.c:4903
msgid "Invalid text-mod flag in rev-file"
msgstr "'text-mod' invalide dans le fichier révision (rev-file)"
-#: ../libsvn_fs_fs/fs_fs.c:4312
+#: ../libsvn_fs_fs/fs_fs.c:4923
msgid "Invalid prop-mod flag in rev-file"
msgstr "'prop-mod' invalide dans le fichier révision (rev-file)"
-#: ../libsvn_fs_fs/fs_fs.c:4489
+#: ../libsvn_fs_fs/fs_fs.c:5118
msgid "Copying from transactions not allowed"
msgstr "Copie à partir des transactions impossible"
-#: ../libsvn_fs_fs/fs_fs.c:4645
+#: ../libsvn_fs_fs/fs_fs.c:5251
#, c-format
msgid "Unable to create transaction directory in '%s' for revision %ld"
msgstr "Impossible de créer le répertoire de transaction '%s' pour la révision %ld"
-#: ../libsvn_fs_fs/fs_fs.c:4768
+#: ../libsvn_fs_fs/fs_fs.c:5316
msgid "Internal error: a null transaction id was passed to get_txn_proplist()"
msgstr "Erreur interne : un identifiant de transaction 'null' a été passé à get_txn_proplist()"
-#: ../libsvn_fs_fs/fs_fs.c:4927 ../libsvn_fs_fs/fs_fs.c:4934
+#: ../libsvn_fs_fs/fs_fs.c:5475 ../libsvn_fs_fs/fs_fs.c:5482
msgid "next-id file corrupt"
msgstr "Fichier identificateur suivant (next-id) corrompu"
-#: ../libsvn_fs_fs/fs_fs.c:5030
-msgid "Transaction cleanup failed"
-msgstr "Échec du nettoyage de la transaction"
+#: ../libsvn_fs_fs/fs_fs.c:5578
+#, c-format
+msgid "Transaction '%s' cleanup failed"
+msgstr "Échec du nettoyage de la transaction '%s'"
-#: ../libsvn_fs_fs/fs_fs.c:5143
-msgid "Invalid change type"
-msgstr "Type de modification invalide"
+#: ../libsvn_fs_fs/fs_fs.c:5724
+#, c-format
+msgid "Invalid change type %d"
+msgstr "Type de modification %d invalide"
-#: ../libsvn_fs_fs/fs_fs.c:5509
+#: ../libsvn_fs_fs/fs_fs.c:6169
msgid "Can't set text contents of a directory"
msgstr "Impossible de définir le contenu textuel d'un répertoire"
-#: ../libsvn_fs_fs/fs_fs.c:5593 ../libsvn_fs_fs/fs_fs.c:5598
-#: ../libsvn_fs_fs/fs_fs.c:5605
+#: ../libsvn_fs_fs/fs_fs.c:6255 ../libsvn_fs_fs/fs_fs.c:6260
+#: ../libsvn_fs_fs/fs_fs.c:6267
msgid "Corrupt 'current' file"
msgstr "Fichier courant corrompu"
-#: ../libsvn_fs_fs/fs_fs.c:6076
+#: ../libsvn_fs_fs/fs_fs.c:6525
+#, c-format
+msgid "predecessor count for the root node-revision is wrong: found (%d+%ld != %d), committing r%ld"
+msgstr "le nombre de prédécesseurs pour le nœud de révision racine est faux : (%d+%ld != %d) trouvés, propagation (commit) de r%ld"
+
+#: ../libsvn_fs_fs/fs_fs.c:6653
+msgid "Truncated protorev file detected"
+msgstr "Détection d'un fichier 'protorev' tronqué"
+
+#: ../libsvn_fs_fs/fs_fs.c:6998
msgid "Transaction out of date"
msgstr "Transaction obsolète"
-#: ../libsvn_fs_fs/fs_fs.c:6258
-msgid "Obliteration of already-packed revision is not supported"
-msgstr "L'oblitération d'une révision déjà enpaquetée n'est pas supportée"
-
-#: ../libsvn_fs_fs/fs_fs.c:6739
+#: ../libsvn_fs_fs/fs_fs.c:7504
msgid "Recovery encountered a non-directory node"
msgstr "La réparation a trouvé un nœud qui n'est pas un répertoire"
-#: ../libsvn_fs_fs/fs_fs.c:6761
+#: ../libsvn_fs_fs/fs_fs.c:7526
msgid "Recovery encountered a deltified directory representation"
msgstr "La réparation a trouvé une réprésentation différentielle de répertoire"
-#: ../libsvn_fs_fs/fs_fs.c:6911
+#: ../libsvn_fs_fs/fs_fs.c:7562 ../libsvn_fs_fs/fs_fs.c:7571
+#: ../libsvn_fs_fs/fs_fs.c:7577
+msgid "Directory entry corrupt"
+msgstr "Entrée du répertoire corrompue"
+
+#: ../libsvn_fs_fs/fs_fs.c:7676
#, c-format
msgid "Expected current rev to be <= %ld but found %ld"
msgstr "Révision courante attendue inférieure à %ld, mais %ld trouvée"
-#: ../libsvn_fs_fs/fs_fs.c:6983
+#: ../libsvn_fs_fs/fs_fs.c:7730
#, c-format
msgid "Revision %ld has a revs file but no revprops file"
msgstr "La révision %ld a un fichier 'revs' mais pas de fichier 'revprops'"
-#: ../libsvn_fs_fs/fs_fs.c:6991
+#: ../libsvn_fs_fs/fs_fs.c:7738
#, c-format
msgid "Revision %ld has a non-file where its revprops file should be"
msgstr "La révision %ld a quelque chose d'autre qu'un fichier à la place du 'revprops'"
-#: ../libsvn_fs_fs/fs_fs.c:7169
+#: ../libsvn_fs_fs/fs_fs.c:7908
#, c-format
msgid "Node origin for '%s' exists with a different value (%s) than what we were about to store (%s)"
msgstr "Le nœud origine pour '%s' existe avec une valeur différente (%s) de ce que nous allions stocker (%s)"
-#: ../libsvn_fs_fs/fs_fs.c:7275
-msgid "No such transaction"
-msgstr "Transaction non trouvée"
+#: ../libsvn_fs_fs/fs_fs.c:8014
+#, c-format
+msgid "No such transaction '%s'"
+msgstr "Transaction inconnue '%s'"
-#: ../libsvn_fs_fs/fs_fs.c:7763
+#: ../libsvn_fs_fs/fs_fs.c:8460
#, c-format
-msgid "FSFS format (%d) too old to pack, please upgrade."
+msgid "FSFS format (%d) too old to pack; please upgrade the filesystem."
msgstr "Format de FSFS (%d) trop vieux pour tasser, mettre à jour (upgrade) svp."
+#: ../libsvn_fs_fs/fs_fs.c:8662 ../libsvn_subr/io.c:239
+#, c-format
+msgid "Error converting entry in directory '%s' to UTF-8"
+msgstr "Erreur en convertissant une entrée du répertoire '%s' vers UTF8"
+
+#: ../libsvn_fs_fs/fs_fs.c:8699 ../libsvn_subr/io.c:1012
+#, c-format
+msgid "Source '%s' is not a directory"
+msgstr "La source '%s' n'est pas un répertoire"
+
+#: ../libsvn_fs_fs/fs_fs.c:8705 ../libsvn_subr/io.c:1018
+#, c-format
+msgid "Destination '%s' is not a directory"
+msgstr "La destination '%s' n'est pas un répertoire"
+
+#: ../libsvn_fs_fs/fs_fs.c:8777 ../libsvn_subr/io.c:1095
+#: ../libsvn_subr/io.c:2475
+#, c-format
+msgid "Can't read directory '%s'"
+msgstr "Impossible de lire le répertoire '%s'"
+
+#: ../libsvn_fs_fs/fs_fs.c:8782 ../libsvn_subr/io.c:1100
+#: ../libsvn_subr/io.c:2480 ../libsvn_subr/io.c:3878
+#, c-format
+msgid "Error closing directory '%s'"
+msgstr "Erreur de fermeture du répertoire '%s'"
+
+#: ../libsvn_fs_fs/fs_fs.c:8996
+#, c-format
+msgid "The FSFS format (%d) of the hotcopy source does not match the FSFS format (%d) of the hotcopy destination; please upgrade both repositories to the same format"
+msgstr "Le format FSFS de la source (%d) et de la destination (%d) d'une copie à chaud diffèrent ; Merci de mettre les deux dépôts au même format"
+
+#: ../libsvn_fs_fs/fs_fs.c:9005
+msgid "The UUID of the hotcopy source does not match the UUID of the hotcopy destination"
+msgstr "l'UUID de la source de la copie à chaud ne correspond pas à celui de la destination"
+
+#: ../libsvn_fs_fs/fs_fs.c:9012
+msgid "The sharding layout configuration of the hotcopy source does not match the sharding layout configuration of the hotcopy destination"
+msgstr "La configuration du schéma de découpage de la source de la copie à chaud ne correspond pas à celui de la destination"
+
+#: ../libsvn_fs_fs/fs_fs.c:9117
+#, c-format
+msgid "Failed to create hotcopy at '%s'. The file '%s' is missing from the source repository. Please create this file, for instance by running 'svnadmin upgrade %s'"
+msgstr "Échec à la création une copie à chaud (hotcopy) vers '%s'. Le fichier '%s' manque du dépôt source. Merci de créer ce fichier, par exemple en lançant 'svnadmin upgrade %s'"
+
+#: ../libsvn_fs_fs/fs_fs.c:9143
+#, c-format
+msgid "The hotcopy destination already contains more revisions (%lu) than the hotcopy source contains (%lu); are source and destination swapped?"
+msgstr "La destination de la copie à chaud contient déjà plus de révisions (%lu) que la source (%lu) ; Les source et destination sont-elles inversées ?"
+
+#: ../libsvn_fs_fs/fs_fs.c:9179
+#, c-format
+msgid "The hotcopy destination already contains more packed revisions (%lu) than the hotcopy source contains (%lu)"
+msgstr "La destination de la copie à chaud contient plus de révisions compactées (%lu) que la source (%lu)"
+
+#: ../libsvn_fs_fs/fs_fs.c:9292
+#, c-format
+msgid "The assumed HEAD revision (%lu) of the hotcopy source has been packed while the hotcopy was in progress; please restart the hotcopy operation"
+msgstr "La révision de tête (%lu) prise en compte pour la source de la copie à chaud a été compactée en cours de copie ; Merci de relancer l'opération de copie à chaud"
+
+#: ../libsvn_fs_fs/fs_fs.c:9307
+#, c-format
+msgid "Revision %lu disappeared from the hotcopy source while hotcopy was in progress"
+msgstr "La révision %lu a disparu de la source de la copie à chaud en cours de copie"
+
#: ../libsvn_fs_fs/lock.c:120
#, c-format
msgid "Corrupt lockfile for path '%s' in filesystem '%s'"
@@ -3428,44 +3549,44 @@ msgstr "Impossible d'écrire dans le fichier-hash de verrouillage '%s'"
msgid "Can't parse lock/entries hashfile '%s'"
msgstr "Impossible d'analyser le fichier-hash de verrouillage '%s'"
-#: ../libsvn_fs_fs/lock.c:810
+#: ../libsvn_fs_fs/lock.c:821
#, c-format
msgid "Lock failed: newer version of '%s' exists"
msgstr "Échec du verrouillage : il existe une version plus récente de '%s'"
-#: ../libsvn_fs_fs/rep-cache.c:77
+#: ../libsvn_fs_fs/rep-cache.c:109
msgid "Couldn't open rep-cache database"
msgstr "Impossible d'ouvrir la base de données cache du dépôt"
-#: ../libsvn_fs_fs/rep-cache.c:97 ../libsvn_fs_fs/rep-cache.c:137
+#: ../libsvn_fs_fs/rep-cache.c:230 ../libsvn_fs_fs/rep-cache.c:273
msgid "Only SHA1 checksums can be used as keys in the rep_cache table.\n"
msgstr "Seule des sommes de contrôle SHA1 peuvent être utilisées comme clefs dans la table 'rep_cache'.\n"
-#: ../libsvn_fs_fs/rep-cache.c:154
+#: ../libsvn_fs_fs/rep-cache.c:309
#, c-format
msgid "Representation key for checksum '%%s' exists in filesystem '%%s' with a different value (%%ld,%%%s,%%%s,%%%s) than what we were about to store (%%ld,%%%s,%%%s,%%%s)"
msgstr "Une représentation pour la clef '%%s' existe dans le système de fichiers '%%s' avec une valeur (%%ld,%%%s,%%%s,%%%s) différente de ce que nous allions stocker (%%ld,%%%s,%%%s,%%%s)"
-#: ../libsvn_fs_fs/tree.c:3556
+#: ../libsvn_fs_fs/tree.c:3365
#, c-format
msgid "Node-revision #'%s' claims to have mergeinfo but doesn't"
msgstr "La révision du nœud #'%s' déclare une information de fusion mais n'en a pas"
-#: ../libsvn_fs_fs/tree.c:3680
+#: ../libsvn_fs_fs/tree.c:3468
#, c-format
msgid "Node-revision '%s@%ld' claims to have mergeinfo but doesn't"
msgstr "La révision du nœud '%s@%ld' déclare une information de fusion mais n'en a pas"
-#: ../libsvn_fs_fs/tree.c:3814
+#: ../libsvn_fs_fs/tree.c:3617
#, c-format
msgid "Querying mergeinfo requires version %d of the FSFS filesystem schema; filesystem '%s' uses only version %d"
msgstr "La demande d'information de fusion (mergeinfo) requiert la version %d du schéma du système de fichiers FSFS ; le système de fichiers '%s' n'est qu'à la version %d"
-#: ../libsvn_fs_util/fs-util.c:104
+#: ../libsvn_fs_util/fs-util.c:105
msgid "Filesystem object has not been opened yet"
msgstr "L'objet du système de fichiers n'a pas encore été ouvert"
-#: ../libsvn_fs_util/fs-util.c:107
+#: ../libsvn_fs_util/fs-util.c:108
msgid "Filesystem object already open"
msgstr "Objet du système de fichiers déjà ouvert"
@@ -3474,83 +3595,83 @@ msgstr "Objet du système de fichiers déjà ouvert"
msgid "Missing changed-path information for '%s' in revision %ld"
msgstr "Information de modification manquante pour '%s' à la révision %ld"
-#: ../libsvn_ra/compat.c:308 ../libsvn_ra/compat.c:555
+#: ../libsvn_ra/compat.c:325 ../libsvn_ra/compat.c:569
#, c-format
msgid "Path '%s' doesn't exist in revision %ld"
msgstr "le chemin '%s' n'existe pas à la révision %ld"
-#: ../libsvn_ra/compat.c:385
+#: ../libsvn_ra/compat.c:402
#, c-format
msgid "'%s' in revision %ld is an unrelated object"
msgstr "'%s' à la révision %ld est un objet différent"
-#: ../libsvn_ra/compat.c:838 ../libsvn_ra/ra_loader.c:1214
+#: ../libsvn_ra/compat.c:853 ../libsvn_ra/ra_loader.c:1248
#, c-format
msgid "Invalid peg revision %ld"
msgstr "Révision fixée %ld invalide"
-#: ../libsvn_ra/compat.c:841 ../libsvn_ra/ra_loader.c:1217
-#: ../libsvn_repos/rev_hunt.c:208 ../libsvn_repos/rev_hunt.c:323
+#: ../libsvn_ra/compat.c:856 ../libsvn_ra/ra_loader.c:1251
+#: ../libsvn_repos/rev_hunt.c:213 ../libsvn_repos/rev_hunt.c:328
#, c-format
msgid "Invalid end revision %ld"
msgstr "Révision de fin %ld invalide"
-#: ../libsvn_ra/compat.c:844 ../libsvn_ra/ra_loader.c:1220
+#: ../libsvn_ra/compat.c:859 ../libsvn_ra/ra_loader.c:1254
msgid "Peg revision must precede end revision"
msgstr "La révision fixée doit précéder la révision de fin"
-#: ../libsvn_ra/ra_loader.c:234
+#: ../libsvn_ra/ra_loader.c:210
#, c-format
msgid "Mismatched RA version for '%s': found %d.%d.%d%s, expected %d.%d.%d%s"
msgstr "Problème de version de module RA pour '%s': %d.%d.%d%s trouvé, %d.%d.%d%s attendu"
-#: ../libsvn_ra/ra_loader.c:311 ../libsvn_ra_serf/serf.c:367
-#: ../libsvn_ra_serf/serf.c:483
+#: ../libsvn_ra/ra_loader.c:287 ../libsvn_ra_serf/serf.c:381
+#: ../libsvn_ra_serf/serf.c:478
#, c-format
msgid "Illegal repository URL '%s'"
msgstr "URL de dépôt svn illégale '%s'"
-#: ../libsvn_ra/ra_loader.c:420
+#: ../libsvn_ra/ra_loader.c:395
#, c-format
msgid "Invalid config: unknown HTTP library '%s'"
msgstr "Configuration invalide : librairie HTTP '%s' inconnue"
-#: ../libsvn_ra/ra_loader.c:484
+#: ../libsvn_ra/ra_loader.c:464
#, c-format
msgid "Unrecognized URL scheme for '%s'"
msgstr "Schéma d'URL non reconnu pour '%s'"
-#: ../libsvn_ra/ra_loader.c:531
+#: ../libsvn_ra/ra_loader.c:513
#, c-format
msgid "Repository UUID '%s' doesn't match expected UUID '%s'"
msgstr "UUID du dépôt source '%s' différent de celui attendu '%s'"
-#: ../libsvn_ra/ra_loader.c:581
+#: ../libsvn_ra/ra_loader.c:534
+#, c-format
+msgid "'%s' isn't in the same repository as '%s'"
+msgstr "'%s' n'est pas dans le même dépôt que '%s'"
+
+#: ../libsvn_ra/ra_loader.c:558
#, c-format
msgid "'%s' isn't a child of session URL '%s'"
msgstr "'%s' ne descend pas l'URL de session '%s'"
-#: ../libsvn_ra/ra_loader.c:603 ../libsvn_ra_neon/session.c:1155
-#: ../libsvn_ra_svn/client.c:2282
+#: ../libsvn_ra/ra_loader.c:574 ../libsvn_ra_svn/client.c:2290
#, c-format
msgid "'%s' isn't a child of repository root URL '%s'"
msgstr "'%s' ne descend pas de l'URL racine du dépôt '%s'"
-#: ../libsvn_ra/ra_loader.c:649
+#: ../libsvn_ra/ra_loader.c:634
#, c-format
msgid "Specifying 'old_value_p' is not allowed when the '%s' capability is not advertised, and could indicate a bug in your client"
msgstr "La spécification de 'old_value_p' n'est pas permise quand la capacité '%s' n'est pas indiquée et peut indiquer un bogue de votre client"
-#: ../libsvn_ra/ra_loader.c:1251
-msgid "Obliterate is not supported by this Repository Access method"
-msgstr "L'oblitération n'est pas supportée avec cette méthode d'accès au dépôt"
-
-#: ../libsvn_ra/ra_loader.c:1297
+#: ../libsvn_ra/ra_loader.c:1373
#, c-format
msgid " - handles '%s' scheme\n"
msgstr " - gère le schéma d'URL '%s'\n"
-#: ../libsvn_ra/ra_loader.c:1381
+#: ../libsvn_ra/ra_loader.c:1466
#, c-format
msgid "Unrecognized URL scheme '%s'"
msgstr "Schéma d'URL non reconnu '%s'"
@@ -3560,43 +3681,52 @@ msgstr "Schéma d'URL non reconnu '%s'"
msgid "Retrieval of mergeinfo unsupported by '%s'"
msgstr "Récupération des 'mergeinfo' (informations de fusions) non supportée par '%s'"
-#: ../libsvn_ra/util.c:103
+#: ../libsvn_ra/util.c:104
#, c-format
msgid "Lock was stolen by '%s'; unable to remove it"
msgstr "Le verrou a été volé par '%s' ; Impossible de l'enlever"
-#: ../libsvn_ra/util.c:141
+#: ../libsvn_ra/util.c:145
#, c-format
msgid "Unable to determine local hostname"
msgstr "Impossible d'obtenir le nom d'hôte local"
-#: ../libsvn_ra/util.c:236
+#: ../libsvn_ra/util.c:240
#, c-format
msgid "Couldn't get lock on destination repos after %d attempts"
msgstr "Impossible d'obtenir un verrou sur le dépôt destination après %d tentatives"
+#: ../libsvn_ra_local/ra_plugin.c:157
+msgid "memory-cache-size invalid"
+msgstr "taille de la mémoire cache invalide (memory-cache-size)"
+
#. ----------------------------------------------------------------
#. ** The RA vtable routines **
-#: ../libsvn_ra_local/ra_plugin.c:402
+#: ../libsvn_ra_local/ra_plugin.c:492
msgid "Module for accessing a repository on local disk."
msgstr "Module d'accès à un dépôt sur un disque local."
-#: ../libsvn_ra_local/ra_plugin.c:472
+#: ../libsvn_ra_local/ra_plugin.c:568
msgid "Unable to open an ra_local session to URL"
msgstr "Impossible d'ouvrir une session ra_local pour l'URL"
-#: ../libsvn_ra_local/ra_plugin.c:507
+#: ../libsvn_ra_local/ra_plugin.c:601 ../libsvn_ra_serf/serf.c:470
#, c-format
msgid "URL '%s' is not a child of the session's repository root URL '%s'"
msgstr "l'URL '%s' n'est pas descendante de l'URL du dépôt racine '%s'"
-#: ../libsvn_ra_local/ra_plugin.c:1420 ../libsvn_ra_neon/options.c:457
-#: ../libsvn_ra_serf/options.c:628 ../libsvn_ra_svn/client.c:2474
+#: ../libsvn_ra_local/ra_plugin.c:1113 ../libsvn_ra_serf/util.c:2303
+#, c-format
+msgid "'%s' path not found"
+msgstr "Chemin '%s' non trouvé"
+
+#: ../libsvn_ra_local/ra_plugin.c:1508 ../libsvn_ra_serf/options.c:522
+#: ../libsvn_ra_svn/client.c:2481
#, c-format
msgid "Don't know anything about capability '%s'"
msgstr "Pas d'information à propos de la capacité '%s'"
-#: ../libsvn_ra_local/ra_plugin.c:1543
+#: ../libsvn_ra_local/ra_plugin.c:1675
#, c-format
msgid "Unsupported RA loader version (%d) for ra_local"
msgstr "Version %d du chargeur RA (accès dépôt) non supporté pour ra_local"
@@ -3606,794 +3736,452 @@ msgstr "Version %d du chargeur RA (accès dépôt) non supporté pour ra_local"
msgid "Unable to open repository '%s'"
msgstr "Le dépôt '%s' n'a pu être ouvert"
-#: ../libsvn_ra_neon/commit.c:245
-msgid "Could not fetch the Version Resource URL (needed during an import or when it is missing from the local, cached props)"
-msgstr "Impossible de récupérer l'URL de la ressource versionnée (utile lors d'un import ou quand manque des propriétés locales en cache)"
-
-#: ../libsvn_ra_neon/commit.c:503
-#, c-format
-msgid "File or directory '%s' is out of date; try updating"
-msgstr "Fichier ou répertoire '%s' obsolète ; mettre à jour"
-
-#: ../libsvn_ra_neon/commit.c:511
-msgid "The CHECKOUT response did not contain a 'Location:' header"
-msgstr "La réponse au CHECKOUT ne contient pas l'entête 'Location:'"
-
-#: ../libsvn_ra_neon/commit.c:1049 ../libsvn_ra_serf/commit.c:1916
-#, c-format
-msgid "File '%s' already exists"
-msgstr "Le fichier '%s' existe déjà"
-
-#: ../libsvn_ra_neon/commit.c:1176
-#, c-format
-msgid "Could not write svndiff to temp file"
-msgstr "Impossible d'écrire le svndiff vers un fichier temporaire"
-
-#: ../libsvn_ra_neon/fetch.c:247
-msgid "Could not save the URL of the version resource"
-msgstr "Impossible de sauvegarder l'URL de la ressource versionnée"
-
-#: ../libsvn_ra_neon/fetch.c:440
-msgid "Could not get content-type from response"
-msgstr "Impossible d'obtenir de type de contenu (content-type) de la réponse"
-
-#: ../libsvn_ra_neon/fetch.c:533
-msgid "Could not save file"
-msgstr "Impossible de sauvegarder le fichier"
-
-#: ../libsvn_ra_neon/fetch.c:996
-msgid "Server response missing the expected deadprop-count property"
-msgstr "La réponse du serveur ne contient pas la propriété 'deadprop-count'"
-
-#: ../libsvn_ra_neon/fetch.c:1093 ../libsvn_ra_serf/property.c:1005
-msgid "The OPTIONS response did not include the youngest revision"
-msgstr "La réponse à OPTIONS n'inclut pas de valeur révision la plus récente"
-
-#: ../libsvn_ra_neon/fetch.c:1201 ../libsvn_ra_serf/commit.c:2474
-msgid "DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent"
-msgstr "Échec de la requête DAV ; il est possible que la procédure automatique du dépôt 'pre-revprop-change' ait échouée ou n'existe pas"
-
-#: ../libsvn_ra_neon/fetch.c:1452
-#, c-format
-msgid "Missing rev attr in target-revision element"
-msgstr "Attribut révision 'rev' manquant dans un élément 'target-revision'"
-
-#: ../libsvn_ra_neon/fetch.c:1463 ../libsvn_ra_serf/update.c:1515
+#: ../libsvn_ra_serf/commit.c:217
#, c-format
-msgid "Missing name attr in absent-directory element"
-msgstr "Attribut nom 'name' manquant dans un élément 'absent-directory'"
-
-#: ../libsvn_ra_neon/fetch.c:1479 ../libsvn_ra_serf/update.c:1538
-#, c-format
-msgid "Missing name attr in absent-file element"
-msgstr "Attribut nom 'name' manquant dans un élément 'absent-directory'"
-
-#: ../libsvn_ra_neon/fetch.c:1494
-#, c-format
-msgid "Missing path attr in resource element"
-msgstr "Attribut 'path' manquant dans une propriété de révision"
+msgid "%s of '%s': %d %s"
+msgstr "%s de '%s': %d %s"
-#: ../libsvn_ra_neon/fetch.c:1503
-#, c-format
-msgid "Missing rev attr in open-directory element"
-msgstr "Attribut révision 'rev' manquant dans un élément 'open-directory'"
+#: ../libsvn_ra_serf/commit.c:315
+msgid "No Location header received"
+msgstr "Pas d'entête \"Location\""
-#: ../libsvn_ra_neon/fetch.c:1534 ../libsvn_ra_serf/replay.c:282
-#: ../libsvn_ra_serf/update.c:1344
+#: ../libsvn_ra_serf/commit.c:374
#, c-format
-msgid "Missing name attr in open-directory element"
-msgstr "Attribut nom 'name' manquant dans un élément 'open-directory'"
+msgid "Directory '%s' is out of date; try updating"
+msgstr "Répertoire '%s' obsolète ; mettre à jour"
-#: ../libsvn_ra_neon/fetch.c:1561 ../libsvn_ra_serf/replay.c:308
-#: ../libsvn_ra_serf/update.c:1379
+#: ../libsvn_ra_serf/commit.c:462 ../libsvn_repos/commit.c:507
#, c-format
-msgid "Missing name attr in add-directory element"
-msgstr "Attribut nom 'name' manquant dans un élément 'add-directory'"
+msgid "Path '%s' not present"
+msgstr "Le chemin '%s' n'existe pas"
-#: ../libsvn_ra_neon/fetch.c:1574
+#: ../libsvn_ra_serf/commit.c:512
#, c-format
-msgid "Missing copyfrom-rev attr in add-directory element"
-msgstr "Attribut 'copyfrom-rev' manquant dans un élément 'add-directory'"
+msgid "File '%s' is out of date; try updating"
+msgstr "Fichier '%s' obsolète ; mettre à jour"
-#: ../libsvn_ra_neon/fetch.c:1648
-#, c-format
-msgid "Missing rev attr in open-file element"
-msgstr "Attribut révision 'rev' manquant dans un élément 'open-file'"
+#: ../libsvn_ra_serf/commit.c:880
+msgid "At least one property change failed; repository is unchanged"
+msgstr "Échec d'au moins une modification de propriété ; dépôt inchangé"
-#: ../libsvn_ra_neon/fetch.c:1655 ../libsvn_ra_serf/replay.c:343
-#: ../libsvn_ra_serf/update.c:1419
+#: ../libsvn_ra_serf/commit.c:1095
#, c-format
-msgid "Missing name attr in open-file element"
-msgstr "Attribut nom 'name' manquant dans un élément 'open-file'"
+msgid "Failed writing updated file"
+msgstr "Échec en écrivant un fichier modifié"
-#: ../libsvn_ra_neon/fetch.c:1681 ../libsvn_ra_serf/replay.c:369
-#: ../libsvn_ra_serf/update.c:1454
+#: ../libsvn_ra_serf/commit.c:1260 ../libsvn_ra_serf/commit.c:1338
#, c-format
-msgid "Missing name attr in add-file element"
-msgstr "Attribut nom 'name' manquant dans un élément 'add-file'"
+msgid "%s of '%s': %d %s (%s://%s)"
+msgstr "%s de '%s': %d %s (%s://%s)"
-#: ../libsvn_ra_neon/fetch.c:1694
+#: ../libsvn_ra_serf/commit.c:1270
#, c-format
-msgid "Missing copyfrom-rev attr in add-file element"
-msgstr "Attribut 'copyfrom-rev' manquant dans un élément 'add-file'"
+msgid "POST request did not return transaction information"
+msgstr "La requête POST n'a pas retourné d'information de transaction"
-#: ../libsvn_ra_neon/fetch.c:1749
-#, c-format
-msgid "Missing name attr in set-prop element"
-msgstr "Attribut nom 'name' manquant dans un élément 'set-prop'"
+#: ../libsvn_ra_serf/commit.c:1303
+msgid "The OPTIONS response did not include the requested activity-collection-set value"
+msgstr "La réponse à OPTIONS n'inclut pas de valeur pour 'activity-collection-set'"
-#: ../libsvn_ra_neon/fetch.c:1763
+#: ../libsvn_ra_serf/commit.c:1569 ../libsvn_ra_serf/commit.c:1967
+#: ../libsvn_ra_serf/update.c:2228
#, c-format
-msgid "Missing name attr in remove-prop element"
-msgstr "Attribut nom 'name' manquant dans élément 'remove-prop'"
+msgid "Unable to parse URL '%s'"
+msgstr "Impossible d'analyser l'URL '%s'"
-#: ../libsvn_ra_neon/fetch.c:1837 ../libsvn_ra_serf/replay.c:256
-#: ../libsvn_ra_serf/update.c:1484
+#: ../libsvn_ra_serf/commit.c:1597 ../libsvn_ra_serf/util.c:2299
#, c-format
-msgid "Missing name attr in delete-entry element"
-msgstr "Attribut nom 'name' manquant dans un élément 'delete-entry'"
+msgid "Access to '%s' forbidden"
+msgstr "Accès à '%s' interdit"
-#: ../libsvn_ra_neon/fetch.c:1999
+#: ../libsvn_ra_serf/commit.c:1601
#, c-format
-msgid "Error writing to '%s': unexpected EOF"
-msgstr "Erreur d'écriture sur '%s' : fin de fichier (EOF) inattendue"
+msgid "Adding directory failed: %s on %s (%d %s)"
+msgstr "Échec à l'ajout du répertoire %s sur %s (%d %s)"
-#: ../libsvn_ra_neon/fetch.c:2146
+#: ../libsvn_ra_serf/commit.c:1820
#, c-format
-msgid "Unknown XML encoding: '%s'"
-msgstr "Encodage XML inconnu : '%s'"
+msgid "File '%s' already exists"
+msgstr "Le fichier '%s' existe déjà"
-#: ../libsvn_ra_neon/fetch.c:2453
+#: ../libsvn_ra_serf/commit.c:2090
#, c-format
-msgid "REPORT response handling failed to complete the editor drive"
-msgstr "La gestion de la réponse au REPORT n'a pas clos le baton d'édition"
+msgid "MERGE request failed: returned %d (during commit)"
+msgstr "demande de fusion (merge) rejetée : %d retounré (pendant la propagation [commit])"
-#: ../libsvn_ra_neon/file_revs.c:290
-msgid "Failed to write full amount to stream"
-msgstr "Échec à l'écriture du tout dans le flux"
+#: ../libsvn_ra_serf/commit.c:2350
+msgid "DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent"
+msgstr "Échec de la requête DAV ; il est possible que la procédure automatique du dépôt 'pre-revprop-change' ait échouée ou n'existe pas"
-#: ../libsvn_ra_neon/file_revs.c:376 ../libsvn_ra_neon/get_deleted_rev.c:170
-#: ../libsvn_ra_neon/get_location_segments.c:211
-#: ../libsvn_ra_neon/get_locations.c:194
-#: ../libsvn_ra_serf/get_deleted_rev.c:236
+#: ../libsvn_ra_serf/get_deleted_rev.c:173
#, c-format
msgid "'%s' REPORT not implemented"
msgstr "REPORT '%s' non implémenté"
-#: ../libsvn_ra_neon/file_revs.c:383
-msgid "The file-revs report didn't contain any revisions"
-msgstr "REPORT 'file-revs' ne contient aucune révision"
-
-#: ../libsvn_ra_neon/get_dated_rev.c:158
-msgid "Server does not support date-based operations"
-msgstr "Le serveur n'accepte pas les opérations basées sur des dates"
-
-#: ../libsvn_ra_neon/get_dated_rev.c:165
-msgid "Invalid server response to dated-rev request"
-msgstr "Réponse du serveur invalide pour une requête de révisions basées sur des dates"
-
-#: ../libsvn_ra_neon/get_location_segments.c:122
-#: ../libsvn_ra_serf/getlocationsegments.c:109 ../libsvn_ra_svn/client.c:1728
-msgid "Expected valid revision range"
-msgstr "Attend un intervalle de révision valide"
-
-#: ../libsvn_ra_neon/get_locations.c:112
-msgid "Expected a valid revnum and path"
-msgstr "'revum' et 'path' valides attendus"
-
-#: ../libsvn_ra_neon/get_locks.c:239
-msgid "Incomplete lock data returned"
-msgstr "Données de verrouillage incomplètes"
-
-#: ../libsvn_ra_neon/get_locks.c:333 ../libsvn_ra_serf/property.c:373
-#: ../libsvn_ra_serf/update.c:2007
+#: ../libsvn_ra_serf/locks.c:234
#, c-format
-msgid "Got unrecognized encoding '%s'"
-msgstr "Encodage non reconnu : '%s'"
+msgid "Lock request failed: %d %s"
+msgstr "Échec de la demande de verrouillage: %d %s"
+
+#: ../libsvn_ra_serf/locks.c:414
+msgid "Malformed URL for repository"
+msgstr "URL du dépôt malformée."
-#: ../libsvn_ra_neon/get_locks.c:429 ../libsvn_ra_neon/get_locks.c:433
-#: ../libsvn_ra_serf/locks.c:566
+#: ../libsvn_ra_serf/locks.c:420
msgid "Server does not support locking features"
msgstr "Le serveur n'accepte pas les verrous"
-#: ../libsvn_ra_neon/lock.c:196
-msgid "Invalid creation date header value in response."
-msgstr "Entête date de création invalide dans la réponse."
-
-#: ../libsvn_ra_neon/lock.c:221
-msgid "Invalid timeout value"
-msgstr "Expiration (timeout) invalide"
-
-#: ../libsvn_ra_neon/lock.c:261 ../libsvn_ra_neon/lock.c:410
-#, c-format
-msgid "Failed to parse URI '%s'"
-msgstr "Échec de l'analyse de l'URI '%s'"
-
-#: ../libsvn_ra_neon/lock.c:321 ../libsvn_ra_serf/locks.c:380
-#: ../libsvn_ra_serf/locks.c:391 ../libsvn_ra_serf/locks.c:423
-#, c-format
-msgid "Lock request failed: %d %s"
-msgstr "Échec de la demande de verrouillage: %d %s"
-
-#: ../libsvn_ra_neon/lock.c:425 ../libsvn_ra_serf/locks.c:719
+#: ../libsvn_ra_serf/locks.c:581
#, c-format
msgid "'%s' is not locked in the repository"
msgstr "'%s' n'est pas verrouillé dans le dépôt"
-#: ../libsvn_ra_neon/lock.c:553
-msgid "Failed to fetch lock information"
-msgstr "Échec du chargement des information de verrouillage"
+#: ../libsvn_ra_serf/locks.c:632 ../libsvn_ra_serf/locks.c:638
+#, c-format
+msgid "Unlock request failed: %d %s"
+msgstr "Échec de la demande de déverrouillage: %d %s"
-#: ../libsvn_ra_neon/log.c:169 ../libsvn_ra_serf/log.c:228
+#: ../libsvn_ra_serf/log.c:168
#, c-format
-msgid "Missing name attr in revprop element"
-msgstr "Attribut nom 'name' manquant dans une propriété de révision"
+msgid "Unsupported encoding '%s'"
+msgstr "Encodage non supporté '%s'"
-#: ../libsvn_ra_neon/log.c:459 ../libsvn_ra_serf/log.c:625
-#: ../libsvn_ra_svn/client.c:1433
+#: ../libsvn_ra_serf/log.c:574 ../libsvn_ra_svn/client.c:1441
msgid "Server does not support custom revprops via log"
msgstr "Le serveur n'accepte pas les propriétés de révision personnalisées via le log"
-#: ../libsvn_ra_neon/merge.c:221
-#, c-format
-msgid "Protocol error: we told the server not to auto-merge any resources, but it said that '%s' was merged"
-msgstr "Erreur du protocole : on dit on serveur de ne fusionner aucune ressource, mais il nous dit que '%s' a été fusionnée"
-
-#: ../libsvn_ra_neon/merge.c:230
-#, c-format
-msgid "Internal error: there is an unknown parent (%d) for the 'DAV:response' element within the MERGE response"
-msgstr "Erreur interne : parent %d inconnu pour l'élément 'DAV:response' dans la réponse au MERGE"
-
-#: ../libsvn_ra_neon/merge.c:245
-#, c-format
-msgid "Protocol error: the MERGE response for the '%s' resource did not return all of the properties that we asked for (and need to complete the commit)"
-msgstr "Erreur du protocole : la réponse au MERGE sur la resource '%s' n'a pas renvoyé toutes les propriétés demandées et nécessaires pour finir la propagation (commit)"
-
-#: ../libsvn_ra_neon/merge.c:264 ../libsvn_ra_serf/merge.c:305
+#: ../libsvn_ra_serf/merge.c:200
#, c-format
msgid "A MERGE response for '%s' is not a child of the destination ('%s')"
msgstr "Une réponse au MERGE de '%s' n'est pas un fils de la destination ('%s')"
-#: ../libsvn_ra_neon/merge.c:518
-msgid "The MERGE property response had an error status"
-msgstr "Erreur dans la réponse à la fusion (MERGE) de propriété"
-
-#: ../libsvn_ra_neon/options.c:318
-msgid "The OPTIONS response did not include the requested activity-collection-set; this often means that the URL is not WebDAV-enabled"
-msgstr "La réponse à OPTIONS n'inclut pas le 'activity-collection-set' demandé ; Cela signifie souvent que l'URL n'est pas WebDAV"
-
-#: ../libsvn_ra_neon/options.c:440 ../libsvn_ra_serf/options.c:611
+#: ../libsvn_ra_serf/options.c:505
#, c-format
msgid "Don't know how to handle '%s' for capability '%s'"
msgstr "Ne sais pas gérer '%s' pour la capacité '%s'"
-#: ../libsvn_ra_neon/options.c:464 ../libsvn_ra_serf/options.c:635
+#: ../libsvn_ra_serf/options.c:529
#, c-format
msgid "Attempt to fetch capability '%s' resulted in '%s'"
msgstr " la tentative de récuperer la capacité '%s' a résulté en '%s'"
-#: ../libsvn_ra_neon/props.c:609
+#: ../libsvn_ra_serf/property.c:279 ../libsvn_ra_serf/update.c:2090
#, c-format
-msgid "Failed to find label '%s' for URL '%s'"
-msgstr "Échec de la recherche de l'étiquette '%s' pour l'URL '%s'"
+msgid "Got unrecognized encoding '%s'"
+msgstr "Encodage non reconnu : '%s'"
-#: ../libsvn_ra_neon/props.c:638
-#, c-format
-msgid "'%s' was not present on the resource '%s'"
-msgstr "'%s' n'était pas présent sur la ressource '%s'"
+#: ../libsvn_ra_serf/property.c:714
+msgid "The PROPFIND response did not include the requested properties"
+msgstr "La réponse à PROPFIND n'inclut pas les propriétés demandées"
-#: ../libsvn_ra_neon/props.c:705
-#, c-format
-msgid "Neon was unable to parse URL '%s'"
-msgstr "Neon n'a pu analysé l'URL '%s'"
+#: ../libsvn_ra_serf/property.c:1007
+msgid "The PROPFIND response did not include the requested baseline-collection value"
+msgstr "La réponse à PROPFIND n'inclut pas de valeur pour 'baseline-collection'"
-#: ../libsvn_ra_neon/props.c:740
-msgid "The path was not part of a repository"
-msgstr "Le chemin ne fait pas partie d'un dépôt"
+#: ../libsvn_ra_serf/property.c:1019
+msgid "The PROPFIND response did not include the requested version-name value"
+msgstr "La réponse à PROPFIND n'inclut pas de valeur pour 'version-name'"
-#: ../libsvn_ra_neon/props.c:749
-#, c-format
-msgid "No part of path '%s' was found in repository HEAD"
-msgstr "Aucune partie du chemin '%s' trouvée dans dernière révision (HEAD) du dépôt"
+#: ../libsvn_ra_serf/property.c:1057 ../libsvn_ra_serf/update.c:1220
+#: ../libsvn_ra_serf/update.c:1890
+msgid "The OPTIONS response did not include the requested checked-in value"
+msgstr "La réponse à OPTIONS n'inclut pas de valeur pour 'checked-in'"
-#: ../libsvn_ra_neon/props.c:805 ../libsvn_ra_neon/props.c:861
-msgid "The VCC property was not found on the resource"
-msgstr "La propriété VCC n'a pas été trouvée sur la ressource"
+#: ../libsvn_ra_serf/property.c:1139
+msgid "The OPTIONS response did not include the youngest revision"
+msgstr "La réponse à OPTIONS n'inclut pas de valeur révision la plus récente"
-#: ../libsvn_ra_neon/props.c:874
-msgid "The relative-path property was not found on the resource"
-msgstr "La propriété chemin relatif (relative-path) n'a pas été trouvée sur la ressource"
+#: ../libsvn_ra_serf/property.c:1232
+msgid "The PROPFIND response did not include the requested resourcetype value"
+msgstr "La réponse à PROPFIND n'inclut pas de valeur pour 'resourcetype'"
-#: ../libsvn_ra_neon/props.c:995
-msgid "'DAV:baseline-collection' was not present on the baseline resource"
-msgstr "'DAV:baseline-collection' non présente dans la ressource initiale"
+#: ../libsvn_ra_serf/property.c:1267
+msgid "The PROPFIND response did not include the requested 'DAV:' properties"
+msgstr "La réponse à PROPFIND n'inclut pas les propriétés 'DAV:' demandées"
-#: ../libsvn_ra_neon/props.c:1014
-#, c-format
-msgid "'%s' was not present on the baseline resource"
-msgstr "'%s' n'était pas présent sur la ressource de base"
+#: ../libsvn_ra_serf/replay.c:221 ../libsvn_ra_serf/update.c:1401
+msgid "Missing revision attr in target-revision element"
+msgstr "Attribut révision 'rev' manquant dans un élément 'target-revision'"
-#: ../libsvn_ra_neon/props.c:1238 ../libsvn_ra_serf/commit.c:985
-msgid "At least one property change failed; repository is unchanged"
-msgstr "Échec d'au moins une modification de propriété ; dépôt inchangé"
+#: ../libsvn_ra_serf/replay.c:239
+msgid "Missing revision attr in open-root element"
+msgstr "Attribut révision 'rev' manquant dans un élément 'open-root'"
+
+#: ../libsvn_ra_serf/replay.c:259 ../libsvn_ra_serf/update.c:1619
+msgid "Missing name attr in delete-entry element"
+msgstr "Attribut nom 'name' manquant dans un élément 'delete-entry'"
-#: ../libsvn_ra_neon/replay.c:277
-msgid "Got apply-textdelta element without preceding add-file or open-file"
-msgstr "Élément 'apply-textdelta' non précédé d'un 'add-file' ou 'open-file'"
+#: ../libsvn_ra_serf/replay.c:265
+msgid "Missing revision attr in delete-entry element"
+msgstr "Attribut de révision manquant dans un élément 'delete-entry'"
-#: ../libsvn_ra_neon/replay.c:301
-msgid "Got close-file element without preceding add-file or open-file"
-msgstr "Élément 'close-file' non précédé d'un 'add-file' ou 'open-file'"
+#: ../libsvn_ra_serf/replay.c:285 ../libsvn_ra_serf/update.c:1469
+msgid "Missing name attr in open-directory element"
+msgstr "Attribut nom 'name' manquant dans un élément 'open-directory'"
-#: ../libsvn_ra_neon/replay.c:318
-msgid "Got close-directory element without ever opening a directory"
-msgstr "Élément 'close-directory' sans avoir jamais ouvert un répertoire"
+#: ../libsvn_ra_serf/replay.c:291 ../libsvn_ra_serf/update.c:1419
+#: ../libsvn_ra_serf/update.c:1460
+msgid "Missing revision attr in open-directory element"
+msgstr "Attribut révision 'revision' manquant dans un élément 'open-directory'"
-#: ../libsvn_ra_neon/replay.c:437 ../libsvn_ra_serf/replay.c:565
+#: ../libsvn_ra_serf/replay.c:311 ../libsvn_ra_serf/update.c:1508
+msgid "Missing name attr in add-directory element"
+msgstr "Attribut nom 'name' manquant dans un élément 'add-directory'"
+
+#: ../libsvn_ra_serf/replay.c:347 ../libsvn_ra_serf/update.c:1548
+msgid "Missing name attr in open-file element"
+msgstr "Attribut nom 'name' manquant dans un élément 'open-file'"
+
+#: ../libsvn_ra_serf/replay.c:353 ../libsvn_ra_serf/update.c:1557
+msgid "Missing revision attr in open-file element"
+msgstr "Attribut révision 'revision' manquant dans un élément 'open-file'"
+
+#: ../libsvn_ra_serf/replay.c:374 ../libsvn_ra_serf/update.c:1582
+msgid "Missing name attr in add-file element"
+msgstr "Attribut nom 'name' manquant dans un élément 'add-file'"
+
+#: ../libsvn_ra_serf/replay.c:440 ../libsvn_ra_serf/update.c:1715
+#: ../libsvn_ra_serf/update.c:1802
#, c-format
+msgid "Missing name attr in %s element"
+msgstr "Attribut nom 'name' manquant dans un élément %s"
+
+#: ../libsvn_ra_serf/replay.c:577
msgid "Error writing stream: unexpected EOF"
msgstr "Erreur d'écriture de flux : fin de fichier (EOF) inattendue"
-#: ../libsvn_ra_neon/replay.c:444
+#: ../libsvn_ra_serf/replay.c:889
#, c-format
-msgid "Got cdata content for a prop delete"
-msgstr "Contenu 'cdata' précisé pour l'effacement d'une propriété"
+msgid "Error retrieving replay REPORT (%d)"
+msgstr "Erreur à la récupération du REPORT de rejou (%d)"
-#: ../libsvn_ra_neon/session.c:340
+#: ../libsvn_ra_serf/sb_bucket.c:65
#, c-format
-msgid "PIN for token \"%s\" in slot \"%s\""
-msgstr "PIN du signe \"%s\" dans le créneau \"%s\""
+msgid "Failed to read the request"
+msgstr "Échec de la lecture de la requête"
-#: ../libsvn_ra_neon/session.c:541 ../libsvn_ra_serf/serf.c:279
-msgid "Invalid URL: illegal character in proxy port number"
-msgstr "URL invalide : caractère illégal dans le numéro de port du proxy"
-
-#: ../libsvn_ra_neon/session.c:545 ../libsvn_ra_serf/serf.c:283
-msgid "Invalid URL: negative proxy port number"
-msgstr "URL invalide : numéro de port du proxy négatif"
+#: ../libsvn_ra_serf/serf.c:62
+msgid "Module for accessing a repository via WebDAV protocol using serf."
+msgstr "Module d'accès à un dépôt via le protocole WebDAV avec serf."
-#: ../libsvn_ra_neon/session.c:548 ../libsvn_ra_serf/serf.c:286
-msgid "Invalid URL: proxy port number greater than maximum TCP port number 65535"
-msgstr "URL invalide : numéro de port du proxy supérieur au numéro de port maximal de TCP (65535)"
+#: ../libsvn_ra_serf/serf.c:122
+#, c-format
+msgid "Invalid config: unknown http authtype '%s'"
+msgstr "Configuration invalide : authentification http inconnue '%s'"
-#: ../libsvn_ra_neon/session.c:562 ../libsvn_ra_serf/serf.c:261
+#: ../libsvn_ra_serf/serf.c:263
msgid "Invalid config: illegal character in timeout value"
msgstr "Configuration invalide : caractère illégal dans l'expiration (timeout)"
-#: ../libsvn_ra_neon/session.c:566 ../libsvn_ra_serf/serf.c:265
+#: ../libsvn_ra_serf/serf.c:267
msgid "Invalid config: negative timeout value"
msgstr "Configuration invalide : expiration (timeout) négative"
-#: ../libsvn_ra_neon/session.c:579
-msgid "Invalid config: illegal character in debug mask value"
-msgstr "Configuration invalide : caractère illégal dans le masque de déboguage"
-
-#: ../libsvn_ra_neon/session.c:604 ../libsvn_ra_serf/serf.c:121
-#, c-format
-msgid "Invalid config: unknown http authtype '%s'"
-msgstr "Configuration invalide : authentification http inconnue '%s'"
-
-#: ../libsvn_ra_neon/session.c:665
-msgid "Module for accessing a repository via WebDAV protocol using Neon."
-msgstr "Module d'accès à un dépôt via le protocole WebDAV avec Neon."
-
-#: ../libsvn_ra_neon/session.c:745
-#, c-format
-msgid "URL '%s' is malformed or the scheme or host or path is missing"
-msgstr "URL '%s' mal formée : schéma, hôte ou chemin manquant"
-
-#: ../libsvn_ra_neon/session.c:761
-msgid "Network socket initialization failed"
-msgstr "Échec de l'initialisation de la 'socket' réseau"
+#: ../libsvn_ra_serf/serf.c:286
+msgid "Invalid URL: illegal character in proxy port number"
+msgstr "URL invalide : caractère illégal dans le numéro de port du proxy"
-#: ../libsvn_ra_neon/session.c:825
-msgid "SSL is not supported"
-msgstr "SSL n'est pas supporté"
+#: ../libsvn_ra_serf/serf.c:290
+msgid "Invalid URL: negative proxy port number"
+msgstr "URL invalide : numéro de port du proxy négatif"
-#: ../libsvn_ra_neon/session.c:997 ../libsvn_ra_serf/util.c:265
-#, c-format
-msgid "Invalid config: unable to load certificate file '%s'"
-msgstr "Configuration invalide : impossible de charger le fichier de certificat '%s'"
+#: ../libsvn_ra_serf/serf.c:293
+msgid "Invalid URL: proxy port number greater than maximum TCP port number 65535"
+msgstr "URL invalide : numéro de port du proxy supérieur au numéro de port maximal de TCP (65535)"
-#: ../libsvn_ra_neon/session.c:1025
+#: ../libsvn_ra_serf/serf.c:311
#, c-format
-msgid "Invalid config: unable to load PKCS#11 provider '%s'"
-msgstr "Configuration invalide : impossible de charger le fournisseur de PKCS#11 '%s'"
+msgid "Could not resolve proxy server '%s'"
+msgstr "Impossible de résourdre le serveur intermédiare (proxy) '%s'"
-#: ../libsvn_ra_neon/session.c:1181 ../libsvn_ra_serf/serf.c:987
+#: ../libsvn_ra_serf/serf.c:1092
msgid "The UUID property was not found on the resource or any of its parents"
msgstr "La propriété UUID n'a pas été trouvée sur la ressource ou sur un de ses parents"
-#: ../libsvn_ra_neon/session.c:1258
+#: ../libsvn_ra_serf/serf.c:1165
#, c-format
-msgid "Unsupported RA loader version (%d) for ra_neon"
-msgstr "Version (%d) du chargeur RA (accès dépôt) non supportée pour ra_neon"
-
-#: ../libsvn_ra_neon/util.c:234
-msgid "The request response contained at least one error"
-msgstr "La réponse à la requête contenait au moins une erreur"
-
-#: ../libsvn_ra_neon/util.c:276
-msgid "The response contains a non-conforming HTTP status line"
-msgstr "La réponse contient un état (status) HTTP non conforme"
-
-#: ../libsvn_ra_neon/util.c:286
-#, c-format
-msgid "Error setting property '%s': "
-msgstr "Erreur à la définition de la propriété '%s' :"
-
-#: ../libsvn_ra_neon/util.c:581
-#, c-format
-msgid "%s of '%s'"
-msgstr "%s de '%s'"
-
-#: ../libsvn_ra_neon/util.c:593 ../libsvn_ra_serf/util.c:1929
-#, c-format
-msgid "'%s' path not found"
-msgstr "Chemin '%s' non trouvé"
+msgid "Unsupported RA loader version (%d) for ra_serf"
+msgstr "Version %d du chargeur RA (accès dépôt) non supportée pour ra_serf"
-#: ../libsvn_ra_neon/util.c:597
+#: ../libsvn_ra_serf/serf.c:1179
#, c-format
-msgid "access to '%s' forbidden"
-msgstr "accès à '%s' interdit"
+msgid "ra_serf was compiled for serf %d.%d.%d but loaded an incompatible %d.%d.%d library"
+msgstr "Module ra_serf compilé pour serf %d.%d.%d, mais margement d'une version %d.%d.%d incompatible"
-#: ../libsvn_ra_neon/util.c:607 ../libsvn_ra_serf/util.c:1923
+#: ../libsvn_ra_serf/update.c:949
#, c-format
-msgid "Repository moved permanently to '%s'; please relocate"
-msgstr "Dépôt definitivement déplacé en '%s' ; merci de relocaliser"
+msgid "GET request failed: %d %s"
+msgstr "Échec de la requête GET : %d %s"
-#: ../libsvn_ra_neon/util.c:609 ../libsvn_ra_serf/util.c:1925
-#, c-format
-msgid "Repository moved temporarily to '%s'; please relocate"
-msgstr "Dépôt temporairement déplacé en '%s' ; merci de relocaliser"
+#: ../libsvn_ra_serf/update.c:1653
+msgid "Missing name attr in absent-directory element"
+msgstr "Attribut nom 'name' manquant dans un élément 'absent-directory'"
-#: ../libsvn_ra_neon/util.c:617
-#, c-format
-msgid "Server sent unexpected return value (%d %s) in response to %s request for '%s'"
-msgstr "Le serveur a envoyé une valeur inattendue (%d %s) en réponse à la requête %s pour '%s'"
+#: ../libsvn_ra_serf/update.c:1678
+msgid "Missing name attr in absent-file element"
+msgstr "Attribut nom 'name' manquant dans un élément 'absent-directory'"
-#: ../libsvn_ra_neon/util.c:629
+#: ../libsvn_ra_serf/update.c:1746 ../libsvn_ra_serf/update.c:1829
#, c-format
-msgid "authorization failed: %s"
-msgstr "Échec à l'autorisation : %s"
-
-#: ../libsvn_ra_neon/util.c:631
-msgid "authorization failed"
-msgstr "Échec à l'autorisation"
-
-#: ../libsvn_ra_neon/util.c:636
-msgid "could not connect to server"
-msgstr "Impossible de se connecter au serveur"
-
-#: ../libsvn_ra_neon/util.c:640
-msgid "timed out waiting for server"
-msgstr "Temps expiré en attendant le serveur"
+msgid "Unknown tag '%s' while at state %d"
+msgstr "Tag '%s' inconnu dans l'état %d"
-#. ### This is a translation nightmare. Make sure to compose full strings
-#. and mark those for translation.
-#: ../libsvn_ra_neon/util.c:655
+#: ../libsvn_ra_serf/update.c:2459
#, c-format
-msgid "%s: %s (%s://%s)"
-msgstr "%s : %s (%s://%s)"
+msgid "Error retrieving REPORT (%d)"
+msgstr "Erreur à la récupération du REPORT (%d)"
-#: ../libsvn_ra_neon/util.c:775
-msgid "General svn error from server"
-msgstr "Erreur svn générale du serveur"
+#: ../libsvn_ra_serf/update.c:2978
+msgid "Can't get text contents of a directory"
+msgstr "Impossible d'obtenir le contenu textuel d'un répertoire"
-#: ../libsvn_ra_neon/util.c:984
+#: ../libsvn_ra_serf/util.c:347
#, c-format
-msgid "Can't calculate the request body size"
-msgstr "Impossible de calculer la taille du corps de la requête"
+msgid "Invalid config: unable to load certificate file '%s'"
+msgstr "Configuration invalide : impossible de charger le fichier de certificat '%s'"
-#: ../libsvn_ra_neon/util.c:1148
+#: ../libsvn_ra_serf/util.c:745 ../libsvn_ra_serf/util.c:748
#, c-format
-msgid "The %s request returned invalid XML in the response: %s (%s)"
-msgstr "La requête %s a retourné du XML invalide dans la réponse : %s (%s)"
+msgid "Error running context"
+msgstr "Erreur à l'exécution du contexte"
-#: ../libsvn_ra_neon/util.c:1333
+#: ../libsvn_ra_serf/util.c:1036 ../libsvn_ra_serf/util.c:1041
#, c-format
-msgid "Error reading spooled %s request response"
-msgstr "Erreur en lisant un fichier temporaire de la réponse à la requête %s"
+msgid "Malformed DAV:status CDATA '%s'"
+msgstr "DAV:status CDATA malformé '%s'"
-#: ../libsvn_ra_serf/auth.c:338
+#: ../libsvn_ra_serf/util.c:1333
#, c-format
-msgid "%s Authentication failed"
-msgstr "Échec de l'authentification %s"
+msgid "XML parsing failed"
+msgstr "Échec de l'analyseur XML"
-#: ../libsvn_ra_serf/auth.c:362
+#: ../libsvn_ra_serf/util.c:1336
#, c-format
-msgid ""
-"%s authentication not supported.\n"
-"Authentication failed"
-msgstr ""
-"Authentification %s non supportée.\n"
-"Échec de l'authentification"
-
-#: ../libsvn_ra_serf/auth.c:413 ../libsvn_ra_serf/auth.c:419
-#: ../libsvn_ra_serf/auth_digest.c:270
-msgid "Missing 'realm' attribute in Authorization header"
-msgstr "Attribut 'realm' manquant dans l'entête 'Authorization'"
+msgid "XML parsing failed: (%d %s)"
+msgstr "Échec de l'analyseur XML : (%d %s)"
-#: ../libsvn_ra_serf/auth.c:464 ../libsvn_ra_serf/auth_digest.c:314
-#: ../libsvn_ra_serf/util.c:1399
+#: ../libsvn_ra_serf/util.c:1688
msgid ""
-"No more credentials or we tried too many times.\n"
+"No more credentials or we tried too manytimes.\n"
"Authentication failed"
msgstr ""
"Plus d'authentifiant ou trop de tentatives d'authentification.\n"
"Échec de l'authentification"
-#: ../libsvn_ra_serf/auth.c:540 ../libsvn_ra_serf/util.c:1422
+#: ../libsvn_ra_serf/util.c:1710
msgid "Proxy authentication failed"
msgstr "Échec de l'authentification auprès du mandataire (proxy)"
-#: ../libsvn_ra_serf/auth_digest.c:465
-msgid "Incorrect response-digest in Authentication-Info header."
-msgstr "Résumé crytographique incorrecte dans une entête de réponse Authentication-Info."
-
-#: ../libsvn_ra_serf/auth_kerb.c:160
-#, c-format
-msgid ""
-"Initialization of the GSSAPI context failed.\n"
-" %s\n"
-" %s\n"
-msgstr ""
-"Échec à l'initialisation du contexte GSSAPI.\n"
-" %s\n"
-" %s\n"
-
-#: ../libsvn_ra_serf/commit.c:234
+#: ../libsvn_ra_serf/util.c:1821
#, c-format
-msgid "%s of '%s': %d %s"
-msgstr "%s de '%s': %d %s"
-
-#: ../libsvn_ra_serf/commit.c:308
-msgid "No Location header received"
-msgstr "Pas d'entête \"Location\""
-
-#: ../libsvn_ra_serf/commit.c:439
-#, c-format
-msgid "Directory '%s' is out of date; try updating"
-msgstr "Répertoire '%s' obsolète ; mettre à jour"
-
-#: ../libsvn_ra_serf/commit.c:544 ../libsvn_repos/commit.c:395
-#, c-format
-msgid "Path '%s' not present"
-msgstr "Le chemin '%s' n'existe pas"
-
-#: ../libsvn_ra_serf/commit.c:631
-#, c-format
-msgid "File '%s' is out of date; try updating"
-msgstr "Fichier '%s' obsolète ; mettre à jour"
-
-#: ../libsvn_ra_serf/commit.c:1208
-#, c-format
-msgid "Failed writing updated file"
-msgstr "Échec en écrivant un fichier modifié"
-
-#: ../libsvn_ra_serf/commit.c:1332 ../libsvn_ra_serf/commit.c:1410
-#, c-format
-msgid "%s of '%s': %d %s (%s://%s)"
-msgstr "%s de '%s': %d %s (%s://%s)"
-
-#: ../libsvn_ra_serf/commit.c:1342
-#, c-format
-msgid "POST request did not return transaction information"
-msgstr "La requête POST n'a pas retourné d'information de transaction"
-
-#: ../libsvn_ra_serf/commit.c:1382
-msgid "The OPTIONS response did not include the requested activity-collection-set value"
-msgstr "La réponse à OPTIONS n'inclut pas de valeur pour 'activity-collection-set'"
-
-#: ../libsvn_ra_serf/commit.c:1682
-#, c-format
-msgid "Adding a directory failed: %s on %s (%d %s)"
-msgstr "Échec à l'ajout du répertoire %s sur %s (%d %s)"
-
-#: ../libsvn_ra_serf/getlocationsegments.c:233
-#, c-format
-msgid "Location segment report failed on '%s'@'%ld'"
-msgstr "Échec du rapport du segemnt de localisation sur '%s'@'%ld'"
-
-#: ../libsvn_ra_serf/locks.c:560
-msgid "Malformed URL for repository"
-msgstr "URL du dépôt malformée."
-
-#: ../libsvn_ra_serf/locks.c:759
-#, c-format
-msgid "Unlock request failed: %d %s"
-msgstr "Échec de la demande de déverrouillage: %d %s"
-
-#: ../libsvn_ra_serf/property.c:1034 ../libsvn_ra_serf/update.c:1185
-#: ../libsvn_ra_serf/update.c:1736
-msgid "The OPTIONS response did not include the requested checked-in value"
-msgstr "La réponse à OPTIONS n'inclut pas de valeur pour 'checked-in'"
-
-#: ../libsvn_ra_serf/property.c:1051
-msgid "The OPTIONS response did not include the requested baseline-collection value"
-msgstr "La réponse à OPTIONS n'inclut pas de valeur pour 'baseline-collection'"
-
-#: ../libsvn_ra_serf/property.c:1067
-msgid "The OPTIONS response did not include the requested version-name value"
-msgstr "La réponse à OPTIONS n'inclut pas de valeur pour 'version-name'"
-
-#: ../libsvn_ra_serf/replay.c:218 ../libsvn_ra_serf/update.c:1281
-msgid "Missing revision attr in target-revision element"
-msgstr "Attribut révision 'rev' manquant dans un élément 'target-revision'"
-
-#: ../libsvn_ra_serf/replay.c:236
-msgid "Missing revision attr in open-root element"
-msgstr "Attribut révision 'rev' manquant dans un élément 'open-root'"
-
-#: ../libsvn_ra_serf/replay.c:262
-msgid "Missing revision attr in delete-entry element"
-msgstr "Attribut de révision manquant dans un élément 'delete-entry'"
-
-#: ../libsvn_ra_serf/replay.c:288 ../libsvn_ra_serf/update.c:1299
-#: ../libsvn_ra_serf/update.c:1335
-msgid "Missing revision attr in open-directory element"
-msgstr "Attribut révision 'revision' manquant dans un élément 'open-directory'"
-
-#: ../libsvn_ra_serf/replay.c:349 ../libsvn_ra_serf/update.c:1428
-msgid "Missing revision attr in open-file element"
-msgstr "Attribut révision 'revision' manquant dans un élément 'open-file'"
-
-#: ../libsvn_ra_serf/replay.c:436 ../libsvn_ra_serf/update.c:1574
-#: ../libsvn_ra_serf/update.c:1656
-#, c-format
-msgid "Missing name attr in %s element"
-msgstr "Attribut nom 'name' manquant dans un élément %s"
-
-#: ../libsvn_ra_serf/replay.c:864
-#, c-format
-msgid "Error retrieving replay REPORT (%d)"
-msgstr "Erreur à la récupération du REPORT de rejou (%d)"
-
-#: ../libsvn_ra_serf/serf.c:62
-msgid "Module for accessing a repository via WebDAV protocol using serf."
-msgstr "Module d'accès à un dépôt via le protocole WebDAV avec serf."
-
-#: ../libsvn_ra_serf/serf.c:409
-#, c-format
-msgid "Could not lookup hostname `%s'"
-msgstr "Impossible de résoudre le nom d'hôte : `%s'"
-
-#: ../libsvn_ra_serf/serf.c:677
-msgid "The OPTIONS response did not include the requested resourcetype value"
-msgstr "La réponse à OPTIONS n'inclut pas de valeur pour 'resourcetype'"
-
-#: ../libsvn_ra_serf/serf.c:842
-msgid "The PROPFIND response did not include the requested resourcetype value"
-msgstr "La réponse à PROPFIND n'inclut pas de valeur pour 'resourcetype'"
-
-#: ../libsvn_ra_serf/serf.c:1057
-#, c-format
-msgid "Unsupported RA loader version (%d) for ra_serf"
-msgstr "Version %d du chargeur RA (accès dépôt) non supportée pour ra_serf"
-
-#: ../libsvn_ra_serf/update.c:853
-#, c-format
-msgid "GET request failed: %d %s"
-msgstr "Échec de la requête GET : %d %s"
-
-#: ../libsvn_ra_serf/update.c:2341
-#, c-format
-msgid "Error retrieving REPORT (%d)"
-msgstr "Erreur à la récupération du REPORT (%d)"
+msgid "Premature EOF seen from server (http status=%d)"
+msgstr "Fin de fichier (EOF) prématurée rencontrée sur le serveur (HTTP status=%d)"
-#: ../libsvn_ra_serf/util.c:700 ../libsvn_ra_serf/util.c:703
+#: ../libsvn_ra_serf/util.c:1885
#, c-format
-msgid "Error running context"
-msgstr "Erreur à l'exécution du contexte"
+msgid "%s request on '%s' failed: %d %s"
+msgstr "Échec de la requête %s sur '%s' : %d %s"
-#: ../libsvn_ra_serf/util.c:967 ../libsvn_ra_serf/util.c:972
-#, c-format
-msgid "Malformed DAV:status CDATA '%s'"
-msgstr "DAV:status CDATA malformé '%s'"
+#: ../libsvn_ra_serf/util.c:2192
+msgid "The PROPFIND response did not include the requested version-controlled-configuration value"
+msgstr "La réponse à PROPFIND n'inclut pas de valeur pour 'version-controlled-configuration'"
-#: ../libsvn_ra_serf/util.c:1298
+#: ../libsvn_ra_serf/util.c:2293
#, c-format
-msgid "XML parsing failed: (%d %s)"
-msgstr "Échec de l'analyseur XML : (%d %s)"
-
-#: ../libsvn_ra_serf/util.c:1496
-#, c-format
-msgid "Premature EOF seen from server (http status=%d)"
-msgstr "Fin de fichier (EOF) prématurée rencontrée sur le serveur (HTTP status=%d)"
+msgid "Repository moved permanently to '%s'; please relocate"
+msgstr "Dépôt definitivement déplacé en '%s' ; merci de relocaliser"
-#: ../libsvn_ra_serf/util.c:1548
+#: ../libsvn_ra_serf/util.c:2295
#, c-format
-msgid "Unspecified error message: %d %s"
-msgstr "Message d'erreur non spécifié : %d %s"
-
-#: ../libsvn_ra_serf/util.c:1815
-msgid "The OPTIONS response did not include the requested version-controlled-configuration value"
-msgstr "La réponse à OPTIONS n'inclut pas de valeur pour 'version-controlled-configuration'"
+msgid "Repository moved temporarily to '%s'; please relocate"
+msgstr "Dépôt temporairement déplacé en '%s' ; merci de relocaliser"
-#: ../libsvn_ra_serf/util.c:1932
+#: ../libsvn_ra_serf/util.c:2306
#, c-format
msgid "'%s': no lock token available"
msgstr "'%s' : aucun verrou disponible"
-#: ../libsvn_ra_serf/win32_auth_sspi.c:102
-#: ../libsvn_ra_serf/win32_auth_sspi.c:125
-#: ../libsvn_ra_serf/win32_auth_sspi.c:295
+#: ../libsvn_ra_serf/util.c:2451
#, c-format
-msgid "SSPI Initialization failed."
-msgstr "Échec de l'initialisation SSPI."
+msgid "The %s response contains invalid XML (%d %s)"
+msgstr "La réponse '%s' contient du XML invalide (%d %s)"
-#: ../libsvn_ra_serf/win32_auth_sspi.c:340
+#: ../libsvn_ra_serf/xml.c:659
#, c-format
-msgid "Authentication failed with error 0x%x."
-msgstr "Échec de l'authentification avec l'erreur 0x%x."
+msgid "Missing XML attribute: '%s'"
+msgstr "Attribut XML manquant : '%s'"
+
+#: ../libsvn_ra_serf/xml.c:734
+msgid "The response contains invalid XML"
+msgstr "La réponse contient du XML invalide"
-#: ../libsvn_ra_svn/client.c:138
+#: ../libsvn_ra_svn/client.c:140
#, c-format
msgid "Unknown hostname '%s'"
msgstr "Nom d'hôte inconnu '%s'"
-#: ../libsvn_ra_svn/client.c:163
+#: ../libsvn_ra_svn/client.c:165
#, c-format
msgid "Can't connect to host '%s'"
msgstr "Impossible de se connecter à l'hôte '%s'"
-#: ../libsvn_ra_svn/client.c:201
+#: ../libsvn_ra_svn/client.c:203
msgid "Prop diffs element not a list"
msgstr "L'élément 'prop diffs' n'est pas une liste"
-#: ../libsvn_ra_svn/client.c:397
+#: ../libsvn_ra_svn/client.c:399
#, c-format
msgid "Undefined tunnel scheme '%s'"
msgstr "Schéma de tunnel '%s' non définit"
-#: ../libsvn_ra_svn/client.c:414
+#: ../libsvn_ra_svn/client.c:416
#, c-format
msgid "Tunnel scheme %s requires environment variable %s to be defined"
msgstr "Le schéma de tunnel '%s' requiert la variable d'environnement %s"
-#: ../libsvn_ra_svn/client.c:425
+#: ../libsvn_ra_svn/client.c:427
#, c-format
msgid "Can't tokenize command '%s'"
msgstr "Impossible de découper la commande '%s'"
-#: ../libsvn_ra_svn/client.c:456
+#: ../libsvn_ra_svn/client.c:459
#, c-format
msgid "Error in child process: %s"
msgstr "Erreur du processus fils : %s"
-#: ../libsvn_ra_svn/client.c:482
+#: ../libsvn_ra_svn/client.c:485
#, c-format
msgid "Can't create tunnel"
msgstr "Impossible de créer le tunnel"
-#: ../libsvn_ra_svn/client.c:527
+#: ../libsvn_ra_svn/client.c:531
msgid "To better debug SSH connection problems, remove the -q option from 'ssh' in the [tunnels] section of your Subversion configuration file."
msgstr "Pour mieux déboguer les problèmes de connexion SSH, retirer l'option -q de 'ssh' dans la section [tunnels] de votre fichier de configuration de Subversion."
-#: ../libsvn_ra_svn/client.c:545
+#: ../libsvn_ra_svn/client.c:549
#, c-format
msgid "Illegal svn repository URL '%s'"
msgstr "URL de dépôt svn illégale '%s'"
-#: ../libsvn_ra_svn/client.c:606
+#: ../libsvn_ra_svn/client.c:612
#, c-format
msgid "Server requires minimum version %d"
msgstr "Le serveur requiert au minimum la version %d"
-#: ../libsvn_ra_svn/client.c:610
+#: ../libsvn_ra_svn/client.c:616
#, c-format
msgid "Server only supports versions up to %d"
msgstr "Le serveur ne supporte les versions que jusqu'à la %d"
-#: ../libsvn_ra_svn/client.c:618
+#: ../libsvn_ra_svn/client.c:624
msgid "Server does not support edit pipelining"
msgstr "Le serveur n'accepte pas l'édition en file"
-#: ../libsvn_ra_svn/client.c:657
+#: ../libsvn_ra_svn/client.c:663
msgid "Impossibly long repository root from server"
msgstr "Racine du dépôt du serveur trop longue"
-#: ../libsvn_ra_svn/client.c:669
+#: ../libsvn_ra_svn/client.c:675
msgid ""
"Module for accessing a repository using the svn network protocol.\n"
" - with Cyrus SASL authentication"
@@ -4401,159 +4189,172 @@ msgstr ""
"Module d'accès à un dépôt avec le protocole réseau propre de svn.\n"
" - avec authentification Cyrus SASL"
-#: ../libsvn_ra_svn/client.c:673
+#: ../libsvn_ra_svn/client.c:679
msgid "Module for accessing a repository using the svn network protocol."
msgstr "Module d'accès à un dépôt avec le protocole réseau propre de svn."
-#: ../libsvn_ra_svn/client.c:885
+#: ../libsvn_ra_svn/client.c:891
msgid "Server did not send repository root"
msgstr "Le serveur n'a pas envoyé la racine du dépôt"
-#: ../libsvn_ra_svn/client.c:960
+#: ../libsvn_ra_svn/client.c:966
msgid "Server doesn't support setting arbitrary revision properties during commit"
msgstr "Le serveur ne peut pas définir des propriétés de révision arbitraires lors de la propagation (commit)"
-#: ../libsvn_ra_svn/client.c:1048
+#: ../libsvn_ra_svn/client.c:1059
msgid "Non-string as part of file contents"
msgstr "Partie non chaîne comme contenu de fichier"
-#: ../libsvn_ra_svn/client.c:1140
+#: ../libsvn_ra_svn/client.c:1145
msgid "Dirlist element not a list"
msgstr "L'élément 'dirlist' n'est pas une liste"
-#: ../libsvn_ra_svn/client.c:1225
+#: ../libsvn_ra_svn/client.c:1230
msgid "Mergeinfo element is not a list"
msgstr "L'élément Mergeinfo n'est pas une liste"
-#: ../libsvn_ra_svn/client.c:1422
+#: ../libsvn_ra_svn/client.c:1429
msgid "Log entry not a list"
msgstr "L'entrée 'log' n'est pas une liste"
-#: ../libsvn_ra_svn/client.c:1463
+#: ../libsvn_ra_svn/client.c:1476
msgid "Changed-path entry not a list"
msgstr "L'entrée 'changed-path' n'est pas une liste"
-#: ../libsvn_ra_svn/client.c:1588
+#: ../libsvn_ra_svn/client.c:1602
msgid "'stat' not implemented"
msgstr "'stat' non implémenté"
-#: ../libsvn_ra_svn/client.c:1648
+#: ../libsvn_ra_svn/client.c:1661
msgid "'get-locations' not implemented"
msgstr "'get-locations' non implémenté"
-#: ../libsvn_ra_svn/client.c:1663
+#: ../libsvn_ra_svn/client.c:1676
msgid "Location entry not a list"
msgstr "L'entrée 'location' n'est pas une liste"
-#: ../libsvn_ra_svn/client.c:1702
+#: ../libsvn_ra_svn/client.c:1715
msgid "'get-location-segments' not implemented"
msgstr "'get-location-segments' non implémenté"
-#: ../libsvn_ra_svn/client.c:1718
+#: ../libsvn_ra_svn/client.c:1732
msgid "Location segment entry not a list"
msgstr "L'entrée 'location segment' n'est pas une liste"
-#: ../libsvn_ra_svn/client.c:1769
+#: ../libsvn_ra_svn/client.c:1742
+msgid "Expected valid revision range"
+msgstr "Attend un intervalle de révision valide"
+
+#: ../libsvn_ra_svn/client.c:1783
msgid "'get-file-revs' not implemented"
msgstr "'get-file-revs' non implémenté"
-#: ../libsvn_ra_svn/client.c:1793
+#: ../libsvn_ra_svn/client.c:1807
msgid "Revision entry not a list"
msgstr "L'entrée 'revision' n'est pas une liste"
-#: ../libsvn_ra_svn/client.c:1810 ../libsvn_ra_svn/client.c:1840
+#: ../libsvn_ra_svn/client.c:1824 ../libsvn_ra_svn/client.c:1854
msgid "Text delta chunk not a string"
msgstr "La différence de texte n'est pas une chaîne de caractères"
-#: ../libsvn_ra_svn/client.c:1852
+#: ../libsvn_ra_svn/client.c:1866
msgid "The get-file-revs command didn't return any revisions"
msgstr "La commande 'get-file-revs' n'a retourné aucune révision"
-#: ../libsvn_ra_svn/client.c:1900
+#: ../libsvn_ra_svn/client.c:1914
msgid "Server doesn't support the lock command"
msgstr "Commande lock non supportée par le serveur"
-#: ../libsvn_ra_svn/client.c:1964
+#: ../libsvn_ra_svn/client.c:1978
msgid "Server doesn't support the unlock command"
msgstr "Commande unlock non supportée par le serveur"
-#: ../libsvn_ra_svn/client.c:2062
+#: ../libsvn_ra_svn/client.c:2076
msgid "Lock response not a list"
msgstr "La réponse au verrouillage (lock) n'est pas une liste"
-#: ../libsvn_ra_svn/client.c:2076
+#: ../libsvn_ra_svn/client.c:2090
msgid "Unknown status for lock command"
msgstr "État inconnu pour la commande de verrouillage (lock)"
-#: ../libsvn_ra_svn/client.c:2100
+#: ../libsvn_ra_svn/client.c:2114
msgid "Didn't receive end marker for lock responses"
msgstr "Aucun marqueur de fin reçu dans les réponses aux verrouillages"
-#: ../libsvn_ra_svn/client.c:2190
+#: ../libsvn_ra_svn/client.c:2204
msgid "Unlock response not a list"
msgstr "La réponse au déverrouillage n'est pas une liste"
-#: ../libsvn_ra_svn/client.c:2204
+#: ../libsvn_ra_svn/client.c:2218
msgid "Unknown status for unlock command"
msgstr "État inconnu pour la commande de déverrouillage (unlock)"
-#: ../libsvn_ra_svn/client.c:2227
+#: ../libsvn_ra_svn/client.c:2241
msgid "Didn't receive end marker for unlock responses"
msgstr "Aucun marqueur de fin reçu dans les réponses aux déverrouillages"
-#: ../libsvn_ra_svn/client.c:2251 ../libsvn_ra_svn/client.c:2311
+#: ../libsvn_ra_svn/client.c:2265 ../libsvn_ra_svn/client.c:2318
msgid "Server doesn't support the get-lock command"
msgstr "Le serveur ne supporte pas la commande 'get-lock'"
-#: ../libsvn_ra_svn/client.c:2325
+#: ../libsvn_ra_svn/client.c:2332
msgid "Lock element not a list"
msgstr "L'élément 'lock' n'est pas une liste"
-#: ../libsvn_ra_svn/client.c:2368
+#: ../libsvn_ra_svn/client.c:2375
msgid "Server doesn't support the replay command"
msgstr "Le serveur ne supporte pas la commande 'replay'"
-#: ../libsvn_ra_svn/client.c:2399
+#: ../libsvn_ra_svn/client.c:2406
msgid "Server doesn't support the replay-range command"
msgstr "Le serveur ne supporte pas la commande 'replay-range'"
-#: ../libsvn_ra_svn/client.c:2417
+#: ../libsvn_ra_svn/client.c:2424
#, c-format
msgid "Expected 'revprops', found '%s'"
msgstr "En attente de 'revprops', mais '%s' a été trouvé"
-#: ../libsvn_ra_svn/client.c:2434
+#: ../libsvn_ra_svn/client.c:2441
msgid "Error while replaying commit"
msgstr "Erreur en rejouant une propagation (commit)"
-#: ../libsvn_ra_svn/client.c:2498
+#: ../libsvn_ra_svn/client.c:2505
msgid "'get-deleted-rev' not implemented"
msgstr "'get-deleted-rev' non implémenté"
-#: ../libsvn_ra_svn/client.c:2563
+#: ../libsvn_ra_svn/client.c:2582
#, c-format
msgid "Unsupported RA loader version (%d) for ra_svn"
msgstr "Version %d du chargeur RA (accès dépôt) non supporté pour ra_svn"
#: ../libsvn_ra_svn/cram.c:199 ../libsvn_ra_svn/cram.c:217
-#: ../libsvn_ra_svn/cyrus_auth.c:449 ../libsvn_ra_svn/cyrus_auth.c:504
+#: ../libsvn_ra_svn/cyrus_auth.c:526 ../libsvn_ra_svn/cyrus_auth.c:582
#: ../libsvn_ra_svn/internal_auth.c:66
msgid "Unexpected server response to authentication"
msgstr "Réponse inattendue du serveur lors de l'authentification"
-#: ../libsvn_ra_svn/cyrus_auth.c:177 ../svnserve/cyrus_auth.c:113
-#: ../svnserve/cyrus_auth.c:123
+#: ../libsvn_ra_svn/cyrus_auth.c:225
#, c-format
-msgid "Could not initialize the SASL library"
-msgstr "Impossible d'initialiser la librairie SASL"
+msgid "SASL authentication error: %s%s"
+msgstr "Erreur à l'authentification SASL : %s%s"
+
+#: ../libsvn_ra_svn/cyrus_auth.c:242
+#, c-format
+msgid "Could not initialized the SASL library: %s%s"
+msgstr "Impossible d'initialiser la librairie SASL : %s%s"
-#: ../libsvn_ra_svn/cyrus_auth.c:831 ../libsvn_ra_svn/internal_auth.c:63
+#: ../libsvn_ra_svn/cyrus_auth.c:415
+#, c-format
+msgid "Could not create SASL context: %s%s"
+msgstr "Impossible de créer le contexte SASL : %s%s"
+
+#: ../libsvn_ra_svn/cyrus_auth.c:921 ../libsvn_ra_svn/internal_auth.c:63
#: ../libsvn_ra_svn/internal_auth.c:114
#, c-format
msgid "Authentication error from server: %s"
msgstr "Erreur d'authentification du serveur : %s"
-#: ../libsvn_ra_svn/cyrus_auth.c:835
+#: ../libsvn_ra_svn/cyrus_auth.c:925
msgid "Can't get username or password"
msgstr "Impossible d'obtenir le login ou le mot de passe"
@@ -4561,24 +4362,24 @@ msgstr "Impossible d'obtenir le login ou le mot de passe"
msgid "Successful edit status returned too soon"
msgstr "Retour positif prématuré de l'édition"
-#: ../libsvn_ra_svn/editorp.c:461
+#: ../libsvn_ra_svn/editorp.c:472
msgid "Invalid file or dir token during edit"
msgstr "Élément fichier ou répertoire invalide durant une édition"
-#: ../libsvn_ra_svn/editorp.c:688
+#: ../libsvn_ra_svn/editorp.c:699
msgid "Apply-textdelta already active"
msgstr "'Apply-textdelta' en cours"
-#: ../libsvn_ra_svn/editorp.c:710 ../libsvn_ra_svn/editorp.c:728
+#: ../libsvn_ra_svn/editorp.c:721 ../libsvn_ra_svn/editorp.c:739
msgid "Apply-textdelta not active"
msgstr "'Apply-textdelta' non actif"
-#: ../libsvn_ra_svn/editorp.c:823
+#: ../libsvn_ra_svn/editorp.c:834
#, c-format
msgid "Command 'finish-replay' invalid outside of replays"
msgstr "La commande 'finish-replay' est invalide hors des rejous (replay)"
-#: ../libsvn_ra_svn/editorp.c:914 ../libsvn_ra_svn/marshal.c:1025
+#: ../libsvn_ra_svn/editorp.c:936 ../libsvn_ra_svn/marshal.c:1110
#, c-format
msgid "Unknown command '%s'"
msgstr "Commande '%s' inconnue"
@@ -4588,35 +4389,35 @@ msgstr "Commande '%s' inconnue"
msgid "Can't get password"
msgstr "Impossible d'obtenir le mot de passe"
-#: ../libsvn_ra_svn/marshal.c:105
+#: ../libsvn_ra_svn/marshal.c:121
msgid "Capability entry is not a word"
msgstr "L'entrée 'capability' (capacité) n'est pas un mot"
-#: ../libsvn_ra_svn/marshal.c:559
+#: ../libsvn_ra_svn/marshal.c:665
msgid "String length larger than maximum"
msgstr "Longueur de chaîne supérieure au maximum"
-#: ../libsvn_ra_svn/marshal.c:647
+#: ../libsvn_ra_svn/marshal.c:731
msgid "Too many nested items"
msgstr "Trop d'éléments imbriqués"
-#: ../libsvn_ra_svn/marshal.c:666
+#: ../libsvn_ra_svn/marshal.c:751
msgid "Number is larger than maximum"
msgstr "Nombre supérieur au maximum"
-#: ../libsvn_ra_svn/marshal.c:881
+#: ../libsvn_ra_svn/marshal.c:966
msgid "Proplist element not a list"
msgstr "L'élément 'proplist' n'est pas une liste"
-#: ../libsvn_ra_svn/marshal.c:919
+#: ../libsvn_ra_svn/marshal.c:1004
msgid "Empty error list"
msgstr "Liste d'erreurs vide"
-#: ../libsvn_ra_svn/marshal.c:928 ../libsvn_ra_svn/marshal.c:954
+#: ../libsvn_ra_svn/marshal.c:1013 ../libsvn_ra_svn/marshal.c:1039
msgid "Malformed error list"
msgstr "Liste d'erreurs malformée"
-#: ../libsvn_ra_svn/marshal.c:982
+#: ../libsvn_ra_svn/marshal.c:1067
#, c-format
msgid "Unknown status '%s' in command response"
msgstr "Statut '%s' inconnu dans la réponse"
@@ -4636,22 +4437,22 @@ msgstr "Impossible d'écrire sur la connexion"
msgid "Can't get socket timeout"
msgstr "Impossible d'obtenir le délais d'expiration de la socket"
-#: ../libsvn_repos/commit.c:136
+#: ../libsvn_repos/commit.c:167
#, c-format
msgid "'%s' is out of date"
msgstr "'%s' n'est pas à jour"
-#: ../libsvn_repos/commit.c:303 ../libsvn_repos/commit.c:448
+#: ../libsvn_repos/commit.c:286
#, c-format
msgid "Got source path but no source revision for '%s'"
msgstr "Chemin source mais pas de révision source pour '%s'"
-#: ../libsvn_repos/commit.c:335 ../libsvn_repos/commit.c:479
+#: ../libsvn_repos/commit.c:319
#, c-format
msgid "Source url '%s' is from different repository"
msgstr "L'URL source '%s' concerne un dépôt différent"
-#: ../libsvn_repos/commit.c:607
+#: ../libsvn_repos/commit.c:635
#, c-format
msgid ""
"Checksum mismatch for resulting fulltext\n"
@@ -4660,59 +4461,70 @@ msgstr ""
"Sommes de contrôle différentes pour le texte complet\n"
"(%s)"
-#: ../libsvn_repos/commit.c:656
+#: ../libsvn_repos/commit.c:680
msgid "(no error)"
msgstr "(pas d'erreur)"
-#: ../libsvn_repos/commit.c:686
-msgid "post-commit hook failed with no error message"
-msgstr "Erreur de l'appel de la procédure d'après propagation (post-commit) sans message d'erreur"
-
-#: ../libsvn_repos/commit.c:692
+#: ../libsvn_repos/commit.c:711 ../libsvn_repos/commit.c:717
msgid "post-commit hook failed with no error message."
msgstr "Échec de la procédure d'après propagation (post-commit) sans message d'erreur"
-#: ../libsvn_repos/commit.c:695
+#: ../libsvn_repos/commit.c:720
#, c-format
-msgid "post commit FS processing had error '%s' and %s"
-msgstr "le traitement FS d'après propagation (post-commit) a eu les erreurs '%s' et '%s'"
+msgid ""
+"post commit FS processing had error:\n"
+"%s\n"
+"%s"
+msgstr ""
+"le traitement FS d'après propagation (post-commit) a eu une erreur :\n"
+"%s\n"
+"%s"
-#: ../libsvn_repos/commit.c:696 ../libsvn_repos/commit.c:705
+#: ../libsvn_repos/commit.c:721 ../libsvn_repos/commit.c:730
msgid "(no error message)"
msgstr "(pas de message d'erreur)"
-#: ../libsvn_repos/commit.c:703
+#: ../libsvn_repos/commit.c:728
#, c-format
-msgid "post commit FS processing had error '%s'."
-msgstr "le traitement FS d'après propagation (post-commit) a eu l'erreur '%s'."
+msgid ""
+"post commit FS processing had error:\n"
+"%s"
+msgstr ""
+"le traitement FS d'après propagation (post-commit) a eu une erreur :\n"
+"%s"
+
+#: ../libsvn_repos/commit.c:1246 ../libsvn_repos/fs-wrap.c:68
+#: ../libsvn_repos/load-fs-vtable.c:967
+msgid "Commit succeeded, but post-commit hook failed"
+msgstr "Succès de la propagation (commit), mais échec de la procédure d'après propagation (post-commit hook)"
#: ../libsvn_repos/delta.c:191
msgid "Unable to open root of edit"
msgstr "Impossible d'ouvrir la racine de l'édition"
-#: ../libsvn_repos/delta.c:242
+#: ../libsvn_repos/delta.c:246
msgid "Invalid target path"
msgstr "Chemin cible invalide"
-#: ../libsvn_repos/delta.c:246
+#: ../libsvn_repos/delta.c:250
msgid "Delta depth 'exclude' not supported"
msgstr "Profondeur de différenciation 'exclude' non supporté"
-#: ../libsvn_repos/delta.c:272
+#: ../libsvn_repos/delta.c:276
msgid "Invalid editor anchoring; at least one of the input paths is not a directory and there was no source entry"
msgstr "Ancrage d'éditeur invalide ; au moins un des chemins en entrée n'est pas un répertoire et il y'a a pas d'entrée source"
-#: ../libsvn_repos/deprecated.c:570 ../svnadmin/main.c:676
+#: ../libsvn_repos/deprecated.c:580 ../svnadmin/main.c:708
#, c-format
msgid "* Dumped revision %ld.\n"
msgstr "* Révision %ld déchargée.\n"
-#: ../libsvn_repos/deprecated.c:576 ../svnadmin/main.c:682
+#: ../libsvn_repos/deprecated.c:586 ../svnadmin/main.c:714
#, c-format
msgid "* Verified revision %ld.\n"
msgstr "* Révision %ld vérifiée.\n"
-#: ../libsvn_repos/deprecated.c:584 ../svnadmin/main.c:722
+#: ../libsvn_repos/deprecated.c:594 ../svnadmin/main.c:752
#, c-format
msgid ""
"\n"
@@ -4723,7 +4535,7 @@ msgstr ""
"------- Révision %ld propagée (commit) >>>\n"
"\n"
-#: ../libsvn_repos/deprecated.c:590 ../svnadmin/main.c:728
+#: ../libsvn_repos/deprecated.c:600 ../svnadmin/main.c:758
#, c-format
msgid ""
"\n"
@@ -4734,156 +4546,143 @@ msgstr ""
"------- Nouvelle révision %ld propagée (commit), basée sur révision %ld >>>\n"
"\n"
-#: ../libsvn_repos/deprecated.c:603 ../svnadmin/main.c:741
+#: ../libsvn_repos/deprecated.c:613 ../svnadmin/main.c:771
#, c-format
msgid " * editing path : %s ..."
msgstr " * édition du chemin : %s ..."
-#: ../libsvn_repos/deprecated.c:609 ../svnadmin/main.c:747
+#: ../libsvn_repos/deprecated.c:619 ../svnadmin/main.c:777
#, c-format
msgid " * deleting path : %s ..."
msgstr " * suppression du chemin : %s ..."
-#: ../libsvn_repos/deprecated.c:615 ../svnadmin/main.c:753
+#: ../libsvn_repos/deprecated.c:625 ../svnadmin/main.c:783
#, c-format
msgid " * adding path : %s ..."
msgstr " * ajout du chemin : %s ..."
-#: ../libsvn_repos/deprecated.c:621 ../svnadmin/main.c:759
+#: ../libsvn_repos/deprecated.c:631 ../svnadmin/main.c:789
#, c-format
msgid " * replacing path : %s ..."
msgstr " * remplacement du chemin : %s ..."
-#: ../libsvn_repos/deprecated.c:631 ../svnadmin/main.c:769
+#: ../libsvn_repos/deprecated.c:641 ../svnadmin/main.c:799
msgid " done.\n"
msgstr " fait.\n"
-#: ../libsvn_repos/deprecated.c:641 ../svnadmin/main.c:779
+#: ../libsvn_repos/deprecated.c:651 ../svnadmin/main.c:809
#, c-format
msgid "<<< Started new transaction, based on original revision %ld\n"
msgstr "<<< Début d'une nouvelle transaction basée sur la révision %ld\n"
-#: ../libsvn_repos/deprecated.c:648 ../svnadmin/main.c:786
+#: ../libsvn_repos/deprecated.c:658 ../svnadmin/main.c:822
#, c-format
msgid " removing '\\r' from %s ..."
msgstr "retire '\\r' de %s ..."
-#: ../libsvn_repos/dump.c:353
+#: ../libsvn_repos/dump.c:266
#, c-format
-msgid ""
-"WARNING: Referencing data in revision %ld, which is older than the oldest\n"
-"WARNING: dumped revision (%ld). Loading this dump into an empty repository\n"
-"WARNING: will fail.\n"
-msgstr ""
-"ATTENTION : données référencées à la révision %ld, plus ancienne que la\n"
-"ATTENTION : plus ancienne révision déchargée (%ld). Charger cette \n"
-"ATTENTION : sauvegarde dans un dépôt vide échouera.\n"
+msgid "E%06d: While validating fspath '%s': %s"
+msgstr "E%06d : en validant fspath '%s' : %s"
-#: ../libsvn_repos/dump.c:457
+#: ../libsvn_repos/dump.c:388
#, c-format
-msgid ""
-"WARNING: Mergeinfo referencing revision(s) prior to the oldest dumped revision (%ld).\n"
-"WARNING: Loading this dump may result in invalid mergeinfo.\n"
-msgstr ""
-"ATTENTION : les données de fusion références des révisions antérieures à la\n"
-"ATTENTION : plus ancienne sauvegardée (%ld).\n"
-"ATTENTION : Charger cette sauvegarde risque d'aboutir à des informations\n"
-"ATTENTION : de fusion incorrectes.\n"
+msgid "Referencing data in revision %ld, which is older than the oldest dumped revision (r%ld). Loading this dump into an empty repository will fail."
+msgstr "Données référencées dans la révisions %ld, plus ancienne que la plus ancienne des révisions déchargée (%ld). Charger cette sauvegarde dans un dépôt vide échouera."
+
+#: ../libsvn_repos/dump.c:494
+#, c-format
+msgid "Mergeinfo referencing revision(s) prior to the oldest dumped revision (r%ld). Loading this dump may result in invalid mergeinfo."
+msgstr "Les données de fusion références des révisions antérieures à la plus ancienne sauvegardée (%ld). Charger cette sauvegarde risque d'aboutir à des informations de fusion incorrectes."
-#: ../libsvn_repos/dump.c:979 ../libsvn_repos/dump.c:1235
+#: ../libsvn_repos/dump.c:1128 ../libsvn_repos/dump.c:1389
#, c-format
msgid "Start revision %ld is greater than end revision %ld"
msgstr "La révision de début %ld est plus grande que celle de fin %ld"
-#: ../libsvn_repos/dump.c:984 ../libsvn_repos/dump.c:1240
+#: ../libsvn_repos/dump.c:1133 ../libsvn_repos/dump.c:1394
#, c-format
msgid "End revision %ld is invalid (youngest revision is %ld)"
msgstr "Révision de fin %ld invalide (la révision la plus récente est %ld)"
-#: ../libsvn_repos/dump.c:1120
-msgid ""
-"WARNING: The range of revisions dumped contained references to\n"
-"WARNING: copy sources outside that range.\n"
-msgstr ""
-"ATTENTION : L'intervalle de révision sauvegardé contient des références à\n"
-"ATTENTION : des sources de copies hors de l'intervalle.\n"
+#: ../libsvn_repos/dump.c:1271
+msgid "The range of revisions dumped contained references to copy sources outside that range."
+msgstr "L'intervalle de révision sauvegardé contient des références à des sources de copies hors de l'intervalle."
-#: ../libsvn_repos/dump.c:1131
-msgid ""
-"WARNING: The range of revisions dumped contained mergeinfo\n"
-"WARNING: which reference revisions outside that range.\n"
-msgstr ""
-"ATTENTION : L'intervalle de révision sauvegardé contient des informations de\n"
-"ATTENTION : fusion qui références des révisions hors de l'intervalle.\n"
+#: ../libsvn_repos/dump.c:1285
+msgid "The range of revisions dumped contained mergeinfo which reference revisions outside that range."
+msgstr "L'intervalle de révision sauvegardé contient des informations de fusion qui références des révisions hors de l'intervalle."
-#: ../libsvn_repos/dump.c:1188
+#: ../libsvn_repos/dump.c:1342
#, c-format
msgid "Unexpected node kind %d for '%s'"
msgstr "Type de nœud %d inattendu pour '%s'"
-#: ../libsvn_repos/fs-wrap.c:68 ../libsvn_repos/load-fs-vtable.c:869
-msgid "Commit succeeded, but post-commit hook failed"
-msgstr "Succès de la propagation (commit), mais échec de la procédure d'après propagation (post-commit hook)"
-
-#: ../libsvn_repos/fs-wrap.c:171
+#: ../libsvn_repos/fs-wrap.c:141
#, c-format
msgid "Storage of non-regular property '%s' is disallowed through the repository interface, and could indicate a bug in your client"
msgstr "La sauvegarde de la propriété irrégulière '%s' est désactivé dans ce dépôt et peut indiquer un bogue de votre client"
-#: ../libsvn_repos/fs-wrap.c:186
+#: ../libsvn_repos/fs-wrap.c:156
#, c-format
msgid "Cannot accept '%s' property because it is not encoded in UTF-8"
msgstr "Propriété '%s' refusée car non codée en UTF-8"
-#: ../libsvn_repos/fs-wrap.c:196
+#: ../libsvn_repos/fs-wrap.c:166
#, c-format
msgid "Cannot accept non-LF line endings in '%s' property"
msgstr "Fin de ligne différente de 'line feed' refusée dans la propriété '%s'"
-#: ../libsvn_repos/fs-wrap.c:330
+#: ../libsvn_repos/fs-wrap.c:207
+#, c-format
+msgid "Commit rejected because mergeinfo on '%s' contains unexpected string terminator"
+msgstr "Propagation (commit) rejetée parce que les informations de fusion (mergeinfo) sur '%s' contiennent une fin de chaîne inattendue"
+
+#: ../libsvn_repos/fs-wrap.c:214
+#, c-format
+msgid "Commit rejected because mergeinfo on '%s' is syntactically invalid"
+msgstr "Propagation (commit) rejetée parce que les informations de fusion sur '%s' sont syntaxiquement invalides"
+
+#: ../libsvn_repos/fs-wrap.c:336
#, c-format
msgid "Write denied: not authorized to read all of revision %ld"
msgstr "Écriture refusée : non autorisé à lire toute la révision %ld"
-#: ../libsvn_repos/fs-wrap.c:507
+#: ../libsvn_repos/fs-wrap.c:513
#, c-format
msgid "Cannot unlock path '%s', no authenticated username available"
msgstr "Impossible de déverrouiller le chemin '%s' ; pas de nom d'utilisateur authentifié"
-#: ../libsvn_repos/fs-wrap.c:522
+#: ../libsvn_repos/fs-wrap.c:528
msgid "Unlock succeeded, but post-unlock hook failed"
msgstr "Succès du déverrouillage (unlock), mais échec de la procédure d'après déverrouillage (post-unlock hook)"
-#: ../libsvn_repos/hooks.c:88
+#: ../libsvn_repos/hooks.c:90
#, c-format
msgid "'%s' hook succeeded, but error output could not be read"
msgstr "La procédure automatique (hook) '%s' a fonctionné, mais les messages d'erreur n'ont pu être lu"
-#: ../libsvn_repos/hooks.c:103
+#: ../libsvn_repos/hooks.c:105
msgid "[Error output could not be translated from the native locale to UTF-8.]"
msgstr "[La sortie d'erreur ne peut être convertie de l'encodage local vers UTF-8.]"
-#: ../libsvn_repos/hooks.c:108
+#: ../libsvn_repos/hooks.c:110
msgid "[Error output could not be read.]"
msgstr "[La sortie d'erreur n'a pu être lue.]"
-#: ../libsvn_repos/hooks.c:117
+#: ../libsvn_repos/hooks.c:119
#, c-format
msgid "'%s' hook failed (did not exit cleanly: apr_exit_why_e was %d, exitcode was %d). "
msgstr "Échec de la procédure automatique (hook) '%s' (sortie pas très propre : apr_exit_why_e %d, état de sortie %d). "
-#: ../libsvn_repos/hooks.c:126
+#: ../libsvn_repos/hooks.c:128
msgid "Commit"
msgstr "Propagation (commit)"
-#: ../libsvn_repos/hooks.c:128
+#: ../libsvn_repos/hooks.c:130
msgid "Revprop change"
msgstr "Changement de propritété de révision (revprop)"
-#: ../libsvn_repos/hooks.c:130
-msgid "Obliteration"
-msgstr "Oblitération"
-
#: ../libsvn_repos/hooks.c:132
msgid "Lock"
msgstr "Verrouillage (lock)"
@@ -4910,47 +4709,38 @@ msgstr " avec la sortie :\n"
msgid " with no output."
msgstr " sans aucune sortie."
-#: ../libsvn_repos/hooks.c:197
+#: ../libsvn_repos/hooks.c:230
#, c-format
msgid "Can't create null stdout for hook '%s'"
msgstr "Impossible de créer une sortie standard (stdout) nulle pour la procédure '%s'"
-#: ../libsvn_repos/hooks.c:207
+#: ../libsvn_repos/hooks.c:247
#, c-format
msgid "Failed to start '%s' hook"
msgstr "Échec au lancement de la procédure automatique (hook) '%s'"
-#: ../libsvn_repos/hooks.c:220 ../libsvn_repos/hooks.c:229
-#, c-format
-msgid "Error closing read end of stderr pipe"
-msgstr "Erreur à la fermeture du côté lecture du tuyau d'erreur standard (stderr pipe)"
-
-#: ../libsvn_repos/hooks.c:237
+#: ../libsvn_repos/hooks.c:269
#, c-format
msgid "Error closing null file"
msgstr "Erreur à la fermeture du fichier 'null'"
-#: ../libsvn_repos/hooks.c:321
+#: ../libsvn_repos/hooks.c:353
#, c-format
msgid "Failed to run '%s' hook; broken symlink"
msgstr "Échec à l'exécution de la procédure automatique (hook) '%s' ; mauvais liens symboliques"
-#: ../libsvn_repos/hooks.c:531
+#: ../libsvn_repos/hooks.c:565
msgid ""
"Repository has not been enabled to accept revision propchanges;\n"
"ask the administrator to create a pre-revprop-change hook"
msgstr "Le dépôt n'est pas configuré pour accepter les modifications de propriétés de révision ; parler à l'administrateur de la procédure automatique (hook) pre-revprop-change"
-#: ../libsvn_repos/hooks.c:630
-msgid "Repository has not been enabled to accept obliteration"
-msgstr "Le dépôt n'est pas configuré pour accepter une oblitération"
-
-#: ../libsvn_repos/load-fs-vtable.c:509
+#: ../libsvn_repos/load-fs-vtable.c:560 ../svnrdump/load_editor.c:768
#, c-format
msgid "Relative source revision %ld is not available in current repository"
msgstr "Révision de source relative %ld non disponible dans le dépôt courant"
-#: ../libsvn_repos/load-fs-vtable.c:525
+#: ../libsvn_repos/load-fs-vtable.c:574
#, c-format
msgid ""
"Copy source checksum mismatch on copy from '%s'@%ld\n"
@@ -4959,11 +4749,11 @@ msgstr ""
"Sommes de contrôle différentes dans la copie de '%s'@%ld\n"
"vers '%s' dans la révision basée sur r%ld"
-#: ../libsvn_repos/load-fs-vtable.c:582
+#: ../libsvn_repos/load-fs-vtable.c:633
msgid "Malformed dumpstream: Revision 0 must not contain node records"
msgstr "Flux de sauvegarde mal formé : la révision 0 ne doit pas contenir d'enregistrements de nœud"
-#: ../libsvn_repos/load-fs-vtable.c:591
+#: ../libsvn_repos/load-fs-vtable.c:649
#, c-format
msgid "Unrecognized node-action on node '%s'"
msgstr "'node-action' inconnu sur le nœud '%s'"
@@ -4994,17 +4784,17 @@ msgstr "Block de propriété incomplet ou pas terminé"
msgid "Unexpected EOF writing contents"
msgstr "Fin de fichier (EOF) inattendue pendant l'écriture"
-#: ../libsvn_repos/load.c:388
+#: ../libsvn_repos/load.c:389
#, c-format
msgid "Malformed dumpfile header '%s'"
msgstr "Entête de fichier de sauvegarde malformée '%s'"
-#: ../libsvn_repos/load.c:395 ../libsvn_repos/load.c:440
+#: ../libsvn_repos/load.c:396
#, c-format
msgid "Unsupported dumpfile version: %d"
msgstr "Version %d du fichier de sauvegarde non supportée"
-#: ../libsvn_repos/load.c:543
+#: ../libsvn_repos/load.c:541
msgid "Unrecognized record type in stream"
msgstr "Type d'enregistrement inconnu dans le flux"
@@ -5012,157 +4802,154 @@ msgstr "Type d'enregistrement inconnu dans le flux"
msgid "Sum of subblock sizes larger than total block content length"
msgstr "Somme des tailles des sous blocs plus grand que la taille totale"
-#: ../libsvn_repos/node_tree.c:243
+#: ../libsvn_repos/node_tree.c:244
#, c-format
msgid "'%s' not found in filesystem"
msgstr "'%s' non trouvé dans le système de fichiers"
-#: ../libsvn_repos/replay.c:433
+#: ../libsvn_repos/replay.c:549 ../libsvn_repos/replay.c:1262
#, c-format
msgid "Filesystem path '%s' is neither a file nor a directory"
msgstr "Le chemin '%s' n'est ni un fichier ni un répertoire dans le système de fichiers"
-#: ../libsvn_repos/reporter.c:196
+#: ../libsvn_repos/reporter.c:199
#, c-format
msgid "Invalid length (%%%s) when about to read a string"
msgstr "Taille invalide (%%%s) en lisant une chaîne"
-#: ../libsvn_repos/reporter.c:257
+#: ../libsvn_repos/reporter.c:264
#, c-format
msgid "Invalid depth (%c) for path '%s'"
msgstr "Profondeur invalide (%c) pour le chemin '%s'"
-#: ../libsvn_repos/reporter.c:850
+#: ../libsvn_repos/reporter.c:865
#, c-format
msgid "Working copy path '%s' does not exist in repository"
msgstr "Le chemin de copie de travail '%s' n'existe pas dans le dépôt"
-#: ../libsvn_repos/reporter.c:1218
+#: ../libsvn_repos/reporter.c:1262
msgid "Not authorized to open root of edit operation"
msgstr "Non autorisé à ouvrir la racine de l'opération d'édition"
-#: ../libsvn_repos/reporter.c:1235
+#: ../libsvn_repos/reporter.c:1281
#, c-format
msgid "Target path '%s' does not exist"
msgstr "Le chemin cible '%s' n'existe pas"
-#: ../libsvn_repos/reporter.c:1243
+#: ../libsvn_repos/reporter.c:1289
msgid "Cannot replace a directory from within"
msgstr "On ne peut remplacer un répertoire de l'intérieur de ce répertoire"
-#: ../libsvn_repos/reporter.c:1286
+#: ../libsvn_repos/reporter.c:1329
msgid "Invalid report for top level of working copy"
msgstr "Rapport invalide pour le sommet de la copie de travail"
-#: ../libsvn_repos/reporter.c:1301
+#: ../libsvn_repos/reporter.c:1344
msgid "Two top-level reports with no target"
msgstr "Deux rapports au sommet sans aucune cible"
-#: ../libsvn_repos/reporter.c:1359
+#: ../libsvn_repos/reporter.c:1405
#, c-format
msgid "Unsupported report depth '%s'"
msgstr "Profondeur de rapport non supportée '%s'"
-#: ../libsvn_repos/reporter.c:1387
+#: ../libsvn_repos/reporter.c:1433
msgid "Depth 'exclude' not supported for link"
msgstr "Profondeur 'exclude' non supportée pour un lien"
-#: ../libsvn_repos/reporter.c:1447
+#: ../libsvn_repos/reporter.c:1486
msgid "Request depth 'exclude' not supported"
msgstr "Profondeur demandée 'exclude' non supportée"
-#: ../libsvn_repos/repos.c:200
+#: ../libsvn_repos/repos.c:194
#, c-format
msgid "'%s' exists and is non-empty"
msgstr "'%s' existe et n'est pas vide"
-#: ../libsvn_repos/repos.c:246
+#: ../libsvn_repos/repos.c:240
msgid "Creating db logs lock file"
msgstr "Création du fichier de verrouillage du journal db"
-#: ../libsvn_repos/repos.c:264
+#: ../libsvn_repos/repos.c:258
msgid "Creating db lock file"
msgstr "Création du fichier de verrouillage db"
-#: ../libsvn_repos/repos.c:274
+#: ../libsvn_repos/repos.c:268
msgid "Creating lock dir"
msgstr "Création du répertoire des verrous (locks)"
-#: ../libsvn_repos/repos.c:303
+#: ../libsvn_repos/repos.c:297
msgid "Creating hook directory"
msgstr "Création du répertoire des procédures automatiques (hooks)"
-#: ../libsvn_repos/repos.c:379
+#: ../libsvn_repos/repos.c:373
msgid "Creating start-commit hook"
msgstr "Création de la procédure de début de propagation (start-commit)"
-#: ../libsvn_repos/repos.c:469
+#: ../libsvn_repos/repos.c:465
msgid "Creating pre-commit hook"
msgstr "Création de la procédure d'avant propagation (pre-commit)"
-#: ../libsvn_repos/repos.c:545
+#: ../libsvn_repos/repos.c:543
msgid "Creating pre-revprop-change hook"
msgstr "Création de la procédure d'avant modification des propriétés de révision (pre-revprop-change)"
-#: ../libsvn_repos/repos.c:620
-msgid "Creating pre-obliterate hook"
-msgstr "Création de la procédure d'avant oblitération (pre-obliterate)"
-
-#: ../libsvn_repos/repos.c:853
+#: ../libsvn_repos/repos.c:783
msgid "Creating post-commit hook"
msgstr "Création de la procédure d'après propagation (post-commit)"
-#: ../libsvn_repos/repos.c:1039
+#: ../libsvn_repos/repos.c:975
msgid "Creating post-revprop-change hook"
msgstr "Création de la procédure d'après modification des propriétés de révision (post-revprop-change)"
-#: ../libsvn_repos/repos.c:1098
-msgid "Creating post-obliterate hook"
-msgstr "Création de la procédure d'après oblitération (post-obliterate)"
-
-#: ../libsvn_repos/repos.c:1109
+#: ../libsvn_repos/repos.c:987
msgid "Creating conf directory"
msgstr "Création du répertoire de configuration (conf)"
-#: ../libsvn_repos/repos.c:1178
+#: ../libsvn_repos/repos.c:1066
msgid "Creating svnserve.conf file"
msgstr "Création du fichier 'svnserve.conf'"
-#: ../libsvn_repos/repos.c:1196
+#: ../libsvn_repos/repos.c:1084
msgid "Creating passwd file"
msgstr "Création du fichier de mot de passe 'passwd'"
-#: ../libsvn_repos/repos.c:1238
+#: ../libsvn_repos/repos.c:1126
msgid "Creating authz file"
msgstr "Création du fichier d'autorisations 'authz'"
-#: ../libsvn_repos/repos.c:1273
+#: ../libsvn_repos/repos.c:1161
msgid "Could not create top-level directory"
msgstr "Impossible de créer le répertoire de niveau supérieur"
-#: ../libsvn_repos/repos.c:1285
+#: ../libsvn_repos/repos.c:1173
msgid "Creating DAV sandbox dir"
msgstr "Création du répertoire d'isolation DAV (dav)"
-#: ../libsvn_repos/repos.c:1354
+#: ../libsvn_repos/repos.c:1242
msgid "Error opening db lockfile"
msgstr "Erreur à l'ouverture du fichier de verrou db"
-#: ../libsvn_repos/repos.c:1393
+#: ../libsvn_repos/repos.c:1279
+#, c-format
+msgid "'%s' is an existing repository"
+msgstr "'%s' est déjà un dépôt"
+
+#: ../libsvn_repos/repos.c:1283
#, c-format
msgid "'%s' is a subdirectory of an existing repository rooted at '%s'"
msgstr "'%s' est un sous-répertoire d'un dépôt existant de racine '%s'"
-#: ../libsvn_repos/repos.c:1401
+#: ../libsvn_repos/repos.c:1291
msgid "Repository creation failed"
msgstr "Échec de la création du dépôt"
-#: ../libsvn_repos/repos.c:1482
+#: ../libsvn_repos/repos.c:1376
#, c-format
msgid "Expected repository format '%d' or '%d'; found format '%d'"
msgstr "Format de stockage attendu '%d' ou '%d'; format trouvé '%d'"
-#: ../libsvn_repos/repos.c:1710
+#: ../libsvn_repos/repos.c:1606
#, c-format
msgid "unknown capability '%s'"
msgstr "capacité inconnue '%s'"
@@ -5172,114 +4959,141 @@ msgstr "capacité inconnue '%s'"
msgid "Failed to find time on revision %ld"
msgstr "Impossible de trouver l'heure de la révision %ld"
-#: ../libsvn_repos/rev_hunt.c:204 ../libsvn_repos/rev_hunt.c:319
+#: ../libsvn_repos/rev_hunt.c:209 ../libsvn_repos/rev_hunt.c:324
#, c-format
msgid "Invalid start revision %ld"
msgstr "Révision de départ %ld invalide"
-#: ../libsvn_repos/rev_hunt.c:512
+#: ../libsvn_repos/rev_hunt.c:517
msgid "Unreadable path encountered; access denied"
msgstr "Chemin illisible rencontré, accès refusé"
-#: ../libsvn_repos/rev_hunt.c:1106
+#: ../libsvn_repos/rev_hunt.c:1157
#, c-format
msgid "'%s' is not a file in revision %ld"
msgstr "'%s' n'est pas un fichier à la révision %ld"
-#: ../libsvn_subr/auth.c:186
+#: ../libsvn_subr/auth.c:211
#, c-format
msgid "No provider registered for '%s' credentials"
msgstr "Pas de fournisseur enregistré pour l'authentification '%s'"
-#: ../libsvn_subr/auth.c:607
+#: ../libsvn_subr/auth.c:656
#, c-format
msgid "Invalid config: unknown password store '%s'"
msgstr "Configuration invalide : stockage de mot de passe inconnu '%s'"
-#: ../libsvn_subr/cache-inprocess.c:184
+#: ../libsvn_subr/cache-membuffer.c:468
#, c-format
msgid "Can't lock cache mutex"
-msgstr "Impossible de verrouiller le cache d'exclusivité (mutex)"
+msgstr "Impossible de verrouiller l'exclusivité sur le cache"
-#: ../libsvn_subr/cache-inprocess.c:202
+#: ../libsvn_subr/cache-membuffer.c:484
+#, c-format
+msgid "Can't write-lock cache mutex"
+msgstr "Impossible de verrouiller l'exclusivité en écriture sur le cache"
+
+#: ../libsvn_subr/cache-membuffer.c:504
#, c-format
msgid "Can't unlock cache mutex"
-msgstr "Impossible de déverrouiller le cache d'exclusivité (mutex)"
+msgstr "Impossible de déverrouiller l'exclusivité sur le cache"
-#: ../libsvn_subr/cache-inprocess.c:454
+#. We are OOM. There is no need to proceed with "half a cache".
+#.
+#: ../libsvn_subr/cache-membuffer.c:1124
+#, c-format
+msgid "OOM"
+msgstr "plus de mémoire (OOM)"
+
+#: ../libsvn_subr/cache-membuffer.c:1138
#, c-format
msgid "Can't create cache mutex"
-msgstr "Impossible de créer le cache d'exclusivité (mutex)"
+msgstr "Impossible de créer l'exclusivité sur le cache"
+
+#: ../libsvn_subr/cache-membuffer.c:1784
+msgid "Can't iterate a membuffer-based cache"
+msgstr "Impossible d'itérer sur un cache basé sur la mémoire"
-#: ../libsvn_subr/cache-memcache.c:160
+#: ../libsvn_subr/cache-memcache.c:170
#, c-format
msgid "Unknown memcached error while reading"
msgstr "Erreur inconnue de \"memcached\" lors de la lecture"
-#: ../libsvn_subr/cache-memcache.c:212
+#: ../libsvn_subr/cache-memcache.c:237
#, c-format
msgid "Unknown memcached error while writing"
msgstr "Erreur inconnue de \"memcache\" lors de l'écriture"
-#: ../libsvn_subr/cache-memcache.c:227
+#: ../libsvn_subr/cache-memcache.c:343
msgid "Can't iterate a memcached cache"
msgstr "Impossible d'itérer sur un cache \"memcached\""
-#: ../libsvn_subr/cache-memcache.c:291
+#: ../libsvn_subr/cache-memcache.c:443
#, c-format
msgid "Error parsing memcache server '%s'"
msgstr "Erreur de syntaxe du serveur 'memcache' '%s'"
-#: ../libsvn_subr/cache-memcache.c:299
+#: ../libsvn_subr/cache-memcache.c:451
#, c-format
msgid "Scope not allowed in memcache server '%s'"
msgstr "Vision (scope) non autorisée dans le serveur memcache '%s'"
-#: ../libsvn_subr/cache-memcache.c:307
+#: ../libsvn_subr/cache-memcache.c:459
#, c-format
msgid "Must specify host and port for memcache server '%s'"
msgstr "Hôte (host) et port obligatoires pour le serveur 'memcache' '%s'"
-#: ../libsvn_subr/cache-memcache.c:326
+#: ../libsvn_subr/cache-memcache.c:478
#, c-format
msgid "Unknown error creating memcache server"
msgstr "Erreur inconnue à la création du serveur \"memcache\""
-#: ../libsvn_subr/cache-memcache.c:334
+#: ../libsvn_subr/cache-memcache.c:486
#, c-format
msgid "Unknown error adding server to memcache"
msgstr "Erreur inconnue à l'ajout d'un serveur au \"memcache\""
-#: ../libsvn_subr/cache-memcache.c:404
+#: ../libsvn_subr/cache-memcache.c:559
#, c-format
msgid "Unknown error creating apr_memcache_t"
msgstr "Erreur inconnue en créant apr_memcache_t"
-#: ../libsvn_subr/cmdline.c:599
+#: ../libsvn_subr/checksum.c:470
+#, c-format
+msgid ""
+"%s:\n"
+" expected: %s\n"
+" actual: %s\n"
+msgstr ""
+" %s :\n"
+" attendu : %s\n"
+" obtenu : %s\n"
+
+#: ../libsvn_subr/cmdline.c:625
#, c-format
msgid "Error initializing command line arguments"
msgstr "Erreur à l'initialisation des arguments de la ligne de commande"
-#: ../libsvn_subr/cmdline.c:681
+#: ../libsvn_subr/cmdline.c:707
msgid "Invalid syntax of argument of --config-option"
msgstr "Syntaxe invalide pour l'argument de --config-option"
-#: ../libsvn_subr/cmdline.c:708
+#: ../libsvn_subr/cmdline.c:734
#, c-format
msgid "Unrecognized file in argument of %s"
msgstr "Fichier inconnu en argument de %s"
-#: ../libsvn_subr/config.c:667
+#: ../libsvn_subr/config.c:665
#, c-format
msgid "Config error: invalid boolean value '%s' for '[%s] %s'"
msgstr "Erreur de configuration : valeur booléenne invalide '%s' pour '[%s] %s'"
-#: ../libsvn_subr/config.c:674
+#: ../libsvn_subr/config.c:670
#, c-format
msgid "Config error: invalid boolean value '%s' for '%s'"
msgstr "Erreur de configuration : valeur booléenne invalide '%s' pour '%s'"
-#: ../libsvn_subr/config.c:957
+#: ../libsvn_subr/config.c:978
#, c-format
msgid "Config error: invalid integer value '%s'"
msgstr "Erreur de configuration : valeur entière invalide '%s'"
@@ -5306,22 +5120,99 @@ msgstr "Impossible d'ouvrir le fichier d'authentification en écriture"
msgid "Error writing hash to '%s'"
msgstr "Erreur à l'écriture le hash dans '%s'"
-#: ../libsvn_subr/date.c:209
+#: ../libsvn_subr/crypto.c:93
+#, c-format
+msgid "Failed to initialize cryptography subsystem"
+msgstr "Échec à l'initialisation du sous-système cryptographique"
+
+#: ../libsvn_subr/crypto.c:108
+#, c-format
+msgid "code (%d), reason (\"%s\"), msg (\"%s\")"
+msgstr "code (%d), raison (\"%s\"), message (\"%s\")"
+
+#: ../libsvn_subr/crypto.c:134
+#, c-format
+msgid "Fetching error from APR"
+msgstr "Erreur de récupération de APR"
+
+#: ../libsvn_subr/crypto.c:154
+#, c-format
+msgid "Error obtaining random data"
+msgstr "Erreur à l'obtention de données aléatoires"
+
+#: ../libsvn_subr/crypto.c:224
+msgid "OpenSSL crypto driver error"
+msgstr "Erreur du 'driver' cryptographique OpenSSL"
+
+#: ../libsvn_subr/crypto.c:228
+msgid "Bad return value while loading crypto driver"
+msgstr "Code de retour invalide en chargeant le driver cryptographique"
+
+#: ../libsvn_subr/crypto.c:234
+msgid "Error creating OpenSSL crypto context"
+msgstr "Erreur à la créaction du contexte cryptographique OpenSSL"
+
+#: ../libsvn_subr/crypto.c:291 ../libsvn_subr/crypto.c:294
+#: ../libsvn_subr/crypto.c:419 ../libsvn_subr/crypto.c:422
+#: ../libsvn_subr/crypto.c:526 ../libsvn_subr/crypto.c:529
+#: ../libsvn_subr/crypto.c:641 ../libsvn_subr/crypto.c:644
+msgid "Error creating derived key"
+msgstr "Erreur à la création d'une clef dérivée"
+
+#: ../libsvn_subr/crypto.c:297 ../libsvn_subr/crypto.c:425
+#: ../libsvn_subr/crypto.c:532 ../libsvn_subr/crypto.c:647
+msgid "Unexpected IV length returned"
+msgstr "Longueur du vecteur d'initialisation (IV) incorrecte"
+
+#: ../libsvn_subr/crypto.c:308 ../libsvn_subr/crypto.c:543
+msgid "Error initializing block encryption"
+msgstr "Erreur à l'initialisation du chiffrement par bloc"
+
+#: ../libsvn_subr/crypto.c:347 ../libsvn_subr/crypto.c:444
+#: ../libsvn_subr/crypto.c:565 ../libsvn_subr/crypto.c:666
+msgid "Error fetching result length"
+msgstr "Erreur à la récupération de la taille du résultat"
+
+#: ../libsvn_subr/crypto.c:360 ../libsvn_subr/crypto.c:578
+msgid "Error during block encryption"
+msgstr "Erreur lors du chiffrement par bloc"
+
+#: ../libsvn_subr/crypto.c:372 ../libsvn_subr/crypto.c:590
+msgid "Error finalizing block encryption"
+msgstr "Erreur à la finalisation du chiffrement par bloc"
+
+#: ../libsvn_subr/crypto.c:428 ../libsvn_subr/crypto.c:650
+msgid "Provided IV has incorrect length"
+msgstr "Le vecteur d'initialisation (IV) fourni n'a pas la bonne longueur"
+
+#: ../libsvn_subr/crypto.c:436 ../libsvn_subr/crypto.c:658
+msgid "Error initializing block decryption"
+msgstr "Erreur à l'initialisation du déchiffrement par bloc"
+
+#: ../libsvn_subr/crypto.c:455 ../libsvn_subr/crypto.c:677
+msgid "Error during block decryption"
+msgstr "Erreur lors du déchiffrement par bloc"
+
+#: ../libsvn_subr/crypto.c:464 ../libsvn_subr/crypto.c:686
+msgid "Error finalizing block decryption"
+msgstr "Erreur à la finalisation du déchiffrement par bloc"
+
+#: ../libsvn_subr/date.c:307
#, c-format
msgid "Can't manipulate current date"
msgstr "Impossible de manipuler la date courante"
-#: ../libsvn_subr/date.c:283 ../libsvn_subr/date.c:291
+#: ../libsvn_subr/date.c:381 ../libsvn_subr/date.c:389
#, c-format
msgid "Can't calculate requested date"
msgstr "Impossible de calculer la date demandée"
-#: ../libsvn_subr/date.c:286
+#: ../libsvn_subr/date.c:384
#, c-format
msgid "Can't expand time"
msgstr "Impossible de dilater le temps"
-#: ../libsvn_subr/deprecated.c:365 ../libsvn_subr/opt.c:300
+#: ../libsvn_subr/deprecated.c:367 ../libsvn_subr/opt.c:301
msgid ""
"\n"
"Valid options:\n"
@@ -5329,7 +5220,7 @@ msgstr ""
"\n"
"Options valides:\n"
-#: ../libsvn_subr/deprecated.c:441 ../libsvn_subr/opt.c:407
+#: ../libsvn_subr/deprecated.c:443 ../libsvn_subr/opt.c:416
#, c-format
msgid ""
"\"%s\": unknown command.\n"
@@ -5338,290 +5229,306 @@ msgstr ""
"'%s': Commande inconnue.\n"
"\n"
-#: ../libsvn_subr/deprecated.c:588 ../libsvn_subr/opt.c:1109
-#: ../svnrdump/svnrdump.c:478
+#: ../libsvn_subr/deprecated.c:590 ../libsvn_subr/opt.c:1175
+#: ../svnrdump/svnrdump.c:490
#, c-format
msgid "Type '%s help' for usage.\n"
msgstr "Entrer '%s help' pour l'aide.\n"
-#: ../libsvn_subr/deprecated.c:954
+#: ../libsvn_subr/deprecated.c:982
#, c-format
msgid "'%s' is neither a file nor a directory name"
msgstr "'%s' n'est ni un fichier ni un répertoire"
-#: ../libsvn_subr/dirent_uri.c:1619
+#: ../libsvn_subr/dirent_uri.c:1588
#, c-format
msgid "Couldn't determine absolute path of '%s'"
msgstr "Impossible de déterminer le chemin absolu de '%s'"
-#: ../libsvn_subr/dirent_uri.c:2281
+#: ../libsvn_subr/dirent_uri.c:2279
#, c-format
msgid "Local URL '%s' does not contain 'file://' prefix"
msgstr "L'URL locale '%s' ne commence pas par 'file://'"
-#: ../libsvn_subr/dirent_uri.c:2360
+#: ../libsvn_subr/dirent_uri.c:2358
#, c-format
msgid "Local URL '%s' contains only a hostname, no path"
msgstr "L'URL locale '%s' n'a pas de chemin, seulement un nom d'hôte"
-#: ../libsvn_subr/dirent_uri.c:2374
+#: ../libsvn_subr/dirent_uri.c:2372
#, c-format
msgid "Local URL '%s' contains unsupported hostname"
msgstr "L'URL locale '%s' contient un nom d'hôte non supporté"
-#: ../libsvn_subr/dso.c:64
-#, c-format
-msgid "Can't create DSO mutex"
-msgstr "Impossible de créer l'exclusivité (mutex) du DSO"
-
-#: ../libsvn_subr/dso.c:83
-#, c-format
-msgid "Can't grab DSO mutex"
-msgstr "Impossible d'obtenir l'exclusivité (mutex) du DSO"
-
-#: ../libsvn_subr/dso.c:97 ../libsvn_subr/dso.c:123 ../libsvn_subr/dso.c:138
-#, c-format
-msgid "Can't ungrab DSO mutex"
-msgstr "Impossible de rendre l'exclusivité (mutex) du DSO"
-
-#: ../libsvn_subr/error.c:472
+#: ../libsvn_subr/error.c:497
msgid "Can't recode error string from APR"
msgstr "Impossible de recoder le message d'erreur de APR"
-#: ../libsvn_subr/error.c:572
+#: ../libsvn_subr/error.c:597
#, c-format
msgid "%swarning: W%06d: %s\n"
msgstr "%savertissement W%06d : %s\n"
-#: ../libsvn_subr/error.c:632
+#: ../libsvn_subr/error.c:657
#, c-format
msgid "In file '%s' line %d: assertion failed (%s)"
msgstr "Fichier '%s' ligne %d : échec de la vérification (%s)"
-#: ../libsvn_subr/error.c:636
+#: ../libsvn_subr/error.c:661
#, c-format
msgid "In file '%s' line %d: internal malfunction"
msgstr "Fichier '%s' ligne %d : dysfonctionnement interne"
-#: ../libsvn_subr/io.c:183
+#: ../libsvn_subr/error.c:714
+msgid "stream error"
+msgstr "Erreur de flux"
+
+#: ../libsvn_subr/error.c:719
+msgid "out of memory"
+msgstr "plus de mémoire"
+
+#: ../libsvn_subr/error.c:724
+msgid "buffer error"
+msgstr "Erreur de zone tampon"
+
+#: ../libsvn_subr/error.c:729
+msgid "version error"
+msgstr "Erreur de version"
+
+#: ../libsvn_subr/error.c:734
+msgid "corrupt data"
+msgstr "Données corrompues"
+
+#: ../libsvn_subr/error.c:739
+msgid "unknown error"
+msgstr "Erreur inconnue"
+
+#: ../libsvn_subr/gpg_agent.c:339 ../libsvn_subr/prompt.c:211
#, c-format
-msgid "Error converting entry in directory '%s' to UTF-8"
-msgstr "Erreur en convertissant une entrée du répertoire '%s' vers UTF8"
+msgid "Password for '%s': "
+msgstr "Mot de passe pour '%s' : "
-#: ../libsvn_subr/io.c:243
+#: ../libsvn_subr/gpg_agent.c:340
+#, c-format
+msgid "Enter your Subversion password for %s"
+msgstr "Entrez votre mot de passe Subversion pour %s"
+
+#: ../libsvn_subr/hash.c:117
+msgid "Serialized hash missing terminator"
+msgstr "Hash sérialisé dans fin de chaîne"
+
+#: ../libsvn_subr/hash.c:125 ../libsvn_subr/hash.c:137
+#: ../libsvn_subr/hash.c:147 ../libsvn_subr/hash.c:158
+#: ../libsvn_subr/hash.c:166 ../libsvn_subr/hash.c:175
+#: ../libsvn_subr/hash.c:187 ../libsvn_subr/hash.c:195
+msgid "Serialized hash malformed"
+msgstr "Hash sérialisé malformé"
+
+#: ../libsvn_subr/io.c:300
#, c-format
msgid "Can't check path '%s'"
msgstr "Impossible de vérifier le chemin '%s'"
-#: ../libsvn_subr/io.c:471 ../libsvn_subr/io.c:3817
+#: ../libsvn_subr/io.c:528 ../libsvn_subr/io.c:4434
#, c-format
msgid "Can't open '%s'"
msgstr "Impossible d'ouvrir '%s'"
-#: ../libsvn_subr/io.c:497 ../libsvn_subr/io.c:583
+#: ../libsvn_subr/io.c:554 ../libsvn_subr/io.c:640
#, c-format
msgid "Unable to make name for '%s'"
msgstr "Impossible de créer un nom pour '%s'"
-#: ../libsvn_subr/io.c:570
+#: ../libsvn_subr/io.c:627
#, c-format
msgid "Can't create symbolic link '%s'"
msgstr "Impossible de créer le lien symbolique '%s'"
-#: ../libsvn_subr/io.c:587 ../libsvn_subr/io.c:620 ../libsvn_subr/io.c:648
+#: ../libsvn_subr/io.c:644 ../libsvn_subr/io.c:677 ../libsvn_subr/io.c:705
msgid "Symbolic links are not supported on this platform"
msgstr "Les liens symboliques ne sont pas supportés sur cette plateforme"
-#: ../libsvn_subr/io.c:610
+#: ../libsvn_subr/io.c:667
#, c-format
msgid "Can't read contents of link"
msgstr "Impossible de lire le contenu du lien"
-#: ../libsvn_subr/io.c:668
+#: ../libsvn_subr/io.c:725
#, c-format
msgid "Can't find a temporary directory"
msgstr "Impossible de trouver de répertoire temporaire"
-#: ../libsvn_subr/io.c:787
+#: ../libsvn_subr/io.c:843
#, c-format
msgid "Can't copy '%s' to '%s'"
msgstr "Impossible de copier '%s' vers '%s'"
-#: ../libsvn_subr/io.c:830 ../libsvn_subr/io.c:852 ../libsvn_subr/io.c:898
+#: ../libsvn_subr/io.c:886 ../libsvn_subr/io.c:908 ../libsvn_subr/io.c:954
#, c-format
msgid "Can't set permissions on '%s'"
msgstr "Impossible de fixer les permissions sur '%s'"
-#: ../libsvn_subr/io.c:848 ../libsvn_subr/io.c:3855
+#: ../libsvn_subr/io.c:904 ../libsvn_subr/io.c:1968 ../libsvn_subr/io.c:2027
+#: ../libsvn_subr/io.c:4472
#, c-format
msgid "Can't get file name"
msgstr "Impossible d'obtenir le nom de fichier"
-#: ../libsvn_subr/io.c:922
+#: ../libsvn_subr/io.c:978
#, c-format
msgid "Can't append '%s' to '%s'"
msgstr "Impossible d'ajouter le contenu de '%s' à '%s'"
-#: ../libsvn_subr/io.c:956
-#, c-format
-msgid "Source '%s' is not a directory"
-msgstr "La source '%s' n'est pas un répertoire"
-
-#: ../libsvn_subr/io.c:962
-#, c-format
-msgid "Destination '%s' is not a directory"
-msgstr "La destination '%s' n'est pas un répertoire"
-
-#: ../libsvn_subr/io.c:968
+#: ../libsvn_subr/io.c:1024
#, c-format
msgid "Destination '%s' already exists"
msgstr "La destination '%s' existe déjà"
-#: ../libsvn_subr/io.c:1039 ../libsvn_subr/io.c:2144
-#, c-format
-msgid "Can't read directory '%s'"
-msgstr "Impossible de lire le répertoire '%s'"
-
-#: ../libsvn_subr/io.c:1044 ../libsvn_subr/io.c:2149 ../libsvn_subr/io.c:3433
-#, c-format
-msgid "Error closing directory '%s'"
-msgstr "Erreur de fermeture du répertoire '%s'"
-
-#: ../libsvn_subr/io.c:1072
+#: ../libsvn_subr/io.c:1128
#, c-format
msgid "Can't make directory '%s'"
msgstr "Impossible de créer le répertoire '%s'"
-#: ../libsvn_subr/io.c:1142
+#: ../libsvn_subr/io.c:1197
#, c-format
msgid "Can't set access time of '%s'"
msgstr "Impossible de changer l'heure du dernier accès à '%s'"
-#: ../libsvn_subr/io.c:1418 ../libsvn_subr/io.c:1525
+#: ../libsvn_subr/io.c:1514 ../libsvn_subr/io.c:1621
#, c-format
msgid "Can't change perms of file '%s'"
msgstr "Impossible de changer les permissions du fichier '%s'"
-#: ../libsvn_subr/io.c:1566
+#: ../libsvn_subr/io.c:1787
#, c-format
msgid "Can't set file '%s' read-only"
msgstr "Impossible de mettre le fichier '%s' en lecture seule"
-#: ../libsvn_subr/io.c:1598
+#: ../libsvn_subr/io.c:1819
#, c-format
msgid "Can't set file '%s' read-write"
msgstr "Impossible de mettre le fichier '%s' en lecture-écriture"
-#: ../libsvn_subr/io.c:1642
+#: ../libsvn_subr/io.c:1858 ../libsvn_subr/io.c:1892
#, c-format
msgid "Error getting UID of process"
msgstr "Erreur à l'obtention du UID du processus"
-#: ../libsvn_subr/io.c:1729
+#: ../libsvn_subr/io.c:1994
#, c-format
msgid "Can't get shared lock on file '%s'"
msgstr "Impossible d'obtenir le verrou partagé sur le fichier '%s'"
-#: ../libsvn_subr/io.c:1767
+#: ../libsvn_subr/io.c:2032
+#, c-format
+msgid "Can't unlock file '%s'"
+msgstr "Impossible de déverrouiller le fichier '%s'"
+
+#: ../libsvn_subr/io.c:2088 ../libsvn_subr/io.c:3415
#, c-format
msgid "Can't flush file '%s'"
msgstr "Impossible de vidanger (flush) le fichier '%s'"
-#: ../libsvn_subr/io.c:1768
+#: ../libsvn_subr/io.c:2089 ../libsvn_subr/io.c:3416
#, c-format
msgid "Can't flush stream"
msgstr "Impossible de vidanger (flush) le flux"
-#: ../libsvn_subr/io.c:1780 ../libsvn_subr/io.c:1797
+#: ../libsvn_subr/io.c:2101 ../libsvn_subr/io.c:2118
#, c-format
msgid "Can't flush file to disk"
msgstr "Impossible de vidanger (flush) le fichier sur disque"
-#: ../libsvn_subr/io.c:1889 ../libsvn_subr/prompt.c:102 ../svnserve/main.c:639
+#: ../libsvn_subr/io.c:2210 ../libsvn_subr/prompt.c:102 ../svnserve/main.c:742
#, c-format
msgid "Can't open stdin"
msgstr "Impossible d'ouvrir l'entrée standard (stdin)"
-#: ../libsvn_subr/io.c:1909
+#: ../libsvn_subr/io.c:2230
msgid "Reading from stdin is disallowed"
msgstr "Lire à partir de l'entrée standard n'est pas permis"
-#: ../libsvn_subr/io.c:1966
+#: ../libsvn_subr/io.c:2295
#, c-format
msgid "Can't remove file '%s'"
msgstr "Impossible de supprimer le fichier '%s'"
-#: ../libsvn_subr/io.c:2051
+#: ../libsvn_subr/io.c:2382
#, c-format
msgid "Can't remove '%s'"
msgstr "Impossible de supprimer '%s'"
-#: ../libsvn_subr/io.c:2249
+#: ../libsvn_subr/io.c:2581
#, c-format
msgid "Can't create process '%s' attributes"
msgstr "Impossible de créer les attributs du processus '%s'"
-#: ../libsvn_subr/io.c:2255
+#: ../libsvn_subr/io.c:2588
#, c-format
msgid "Can't set process '%s' cmdtype"
msgstr "Impossible de définir le type de commande (cmdtype) du processus '%s'"
-#: ../libsvn_subr/io.c:2267
+#: ../libsvn_subr/io.c:2600
#, c-format
msgid "Can't set process '%s' directory"
msgstr "Impossible de définir le répertoire du processus '%s'"
-#: ../libsvn_subr/io.c:2280
+#: ../libsvn_subr/io.c:2614
#, c-format
msgid "Can't set process '%s' child input"
msgstr "Impossible de définir l'entrée (input) du processus fils '%s'"
-#: ../libsvn_subr/io.c:2287
+#: ../libsvn_subr/io.c:2622
#, c-format
msgid "Can't set process '%s' child outfile"
msgstr "Impossible de définir la sortie (outfile) du processus fils '%s'"
-#: ../libsvn_subr/io.c:2294
+#: ../libsvn_subr/io.c:2630
#, c-format
msgid "Can't set process '%s' child errfile"
msgstr "Impossible de définir l'erreur (errfile) du processus fils '%s'"
-#: ../libsvn_subr/io.c:2308
+#: ../libsvn_subr/io.c:2644
+#, c-format
+msgid "Can't set process '%s' stdio pipes"
+msgstr "Impossible de définir les pipeline stdio du processus '%s'"
+
+#: ../libsvn_subr/io.c:2652
#, c-format
msgid "Can't set process '%s' child errfile for error handler"
msgstr "Impossible de définir l'erreur (errfile) pour gestion d'erreur du processus fils '%s'"
-#: ../libsvn_subr/io.c:2314
+#: ../libsvn_subr/io.c:2659
#, c-format
msgid "Can't set process '%s' error handler"
msgstr "Impossible de définir la gestion d'erreur du processus '%s'"
-#: ../libsvn_subr/io.c:2336
+#: ../libsvn_subr/io.c:2682
#, c-format
msgid "Can't start process '%s'"
msgstr "Impossible de démarrer le processus '%s'"
-#: ../libsvn_subr/io.c:2360
+#: ../libsvn_subr/io.c:2706
#, c-format
msgid "Error waiting for process '%s'"
msgstr "Erreur à l'attente du processus '%s'"
-#: ../libsvn_subr/io.c:2368
+#: ../libsvn_subr/io.c:2714
#, c-format
msgid "Process '%s' failed (exitwhy %d)"
msgstr "Échec du processus '%s' (sortie car %d)"
-#: ../libsvn_subr/io.c:2375
+#: ../libsvn_subr/io.c:2721
#, c-format
msgid "Process '%s' returned error exitcode %d"
msgstr "Le processus '%s' a retourné code de sortie en erreur %d"
-#: ../libsvn_subr/io.c:2482
+#: ../libsvn_subr/io.c:2828
#, c-format
msgid "'%s' returned %d"
msgstr "'%s' a retourné %d"
-#: ../libsvn_subr/io.c:2603
+#: ../libsvn_subr/io.c:2949
#, c-format
msgid ""
"Error running '%s': exitcode was %d, args were:\n"
@@ -5636,258 +5543,299 @@ msgstr ""
"%s\n"
"%s"
-#: ../libsvn_subr/io.c:2743
+#: ../libsvn_subr/io.c:3091
#, c-format
msgid "Can't detect MIME type of non-file '%s'"
msgstr "Impossible de détecter le type MIME de l'objet '%s' (pas un fichier)"
-#: ../libsvn_subr/io.c:2824
+#: ../libsvn_subr/io.c:3186
#, c-format
msgid "Can't open file '%s'"
msgstr "Impossible d'ouvrir le fichier '%s'"
-#: ../libsvn_subr/io.c:2860
+#: ../libsvn_subr/io.c:3226
#, c-format
msgid "Can't close file '%s'"
msgstr "Le fichier '%s' ne peut être fermé"
-#: ../libsvn_subr/io.c:2861
+#: ../libsvn_subr/io.c:3227
#, c-format
msgid "Can't close stream"
msgstr "Impossible de fermer le flux"
-#: ../libsvn_subr/io.c:2871 ../libsvn_subr/io.c:2895 ../libsvn_subr/io.c:2908
+#: ../libsvn_subr/io.c:3236 ../libsvn_subr/io.c:3272 ../libsvn_subr/io.c:3297
#, c-format
msgid "Can't read file '%s'"
msgstr "Impossible de lire le fichier '%s'"
-#: ../libsvn_subr/io.c:2872 ../libsvn_subr/io.c:2896 ../libsvn_subr/io.c:2909
+#: ../libsvn_subr/io.c:3237 ../libsvn_subr/io.c:3273 ../libsvn_subr/io.c:3298
#, c-format
msgid "Can't read stream"
msgstr "Impossible de lire le flux"
-#: ../libsvn_subr/io.c:2883
+#: ../libsvn_subr/io.c:3246
+#, c-format
+msgid "Can't write file '%s'"
+msgstr "Impossible d'écrire le fichier '%s'"
+
+#: ../libsvn_subr/io.c:3247
+#, c-format
+msgid "Can't write stream"
+msgstr "Impossible d'écrire le flux"
+
+#: ../libsvn_subr/io.c:3261
#, c-format
msgid "Can't get attribute information from file '%s'"
msgstr "Impossible d'obtenir les informations d'attribut du fichier '%s'"
-#: ../libsvn_subr/io.c:2884
+#: ../libsvn_subr/io.c:3262
#, c-format
msgid "Can't get attribute information from stream"
msgstr "Impossible d'obtenir les informations d'attribut du flux"
-#: ../libsvn_subr/io.c:2920
+#: ../libsvn_subr/io.c:3309
#, c-format
msgid "Can't set position pointer in file '%s'"
msgstr "Impossible de fixer le pointeur de position dans le fichier '%s'"
-#: ../libsvn_subr/io.c:2921
+#: ../libsvn_subr/io.c:3310
#, c-format
msgid "Can't set position pointer in stream"
msgstr "Impossible de fixer le pointeur de position dans le flux"
-#: ../libsvn_subr/io.c:2932 ../libsvn_subr/io.c:2966
+#: ../libsvn_subr/io.c:3321 ../libsvn_subr/io.c:3368
#, c-format
msgid "Can't write to file '%s'"
msgstr "Impossible d'écrire dans le fichier '%s'"
-#: ../libsvn_subr/io.c:2933 ../libsvn_subr/io.c:2967
+#: ../libsvn_subr/io.c:3322 ../libsvn_subr/io.c:3369
#, c-format
msgid "Can't write to stream"
msgstr "Impossible d'écrire dans le flux"
-#: ../libsvn_subr/io.c:3002
+#: ../libsvn_subr/io.c:3420
#, c-format
msgid "Can't truncate file '%s'"
msgstr "Impossible de tronquer le fichier '%s'"
-#: ../libsvn_subr/io.c:3003
+#: ../libsvn_subr/io.c:3421
#, c-format
msgid "Can't truncate stream"
msgstr "Impossible de tronquer le flux"
-#: ../libsvn_subr/io.c:3043
+#: ../libsvn_subr/io.c:3461
#, c-format
msgid "Can't read length line in file '%s'"
msgstr "Impossible de lire la longueur de la ligne dans le fichier '%s'"
-#: ../libsvn_subr/io.c:3047
+#: ../libsvn_subr/io.c:3465
msgid "Can't read length line in stream"
msgstr "Impossible de lire la longueur de la ligne dans le flux"
-#: ../libsvn_subr/io.c:3066 ../svn/util.c:422 ../svn/util.c:437
-#: ../svn/util.c:461
+#: ../libsvn_subr/io.c:3487 ../svn/util.c:423 ../svn/util.c:438
+#: ../svn/util.c:472
#, c-format
msgid "Can't stat '%s'"
msgstr "'%s' n'est pas consultable (stat)"
-#: ../libsvn_subr/io.c:3101
+#: ../libsvn_subr/io.c:3522
#, c-format
msgid "Can't move '%s' to '%s'"
msgstr "Impossible de déplacer '%s' vers '%s'"
-#: ../libsvn_subr/io.c:3182
+#: ../libsvn_subr/io.c:3603
#, c-format
msgid "Can't create directory '%s'"
msgstr "Impossible de créer le répertoire '%s'"
-#: ../libsvn_subr/io.c:3193
+#: ../libsvn_subr/io.c:3626
#, c-format
msgid "Can't hide directory '%s'"
msgstr "Impossible de cacher le répertoire '%s'"
-#: ../libsvn_subr/io.c:3253 ../libsvn_subr/io.c:3369
+#: ../libsvn_subr/io.c:3686 ../libsvn_subr/io.c:3814
#, c-format
msgid "Can't open directory '%s'"
msgstr "Impossible d'ouvrir le répertoire '%s'"
-#: ../libsvn_subr/io.c:3293
+#: ../libsvn_subr/io.c:3726
#, c-format
msgid "Can't remove directory '%s'"
msgstr "Impossible de supprimer le répertoire '%s'"
-#: ../libsvn_subr/io.c:3311
+#: ../libsvn_subr/io.c:3744
#, c-format
msgid "Can't read directory"
msgstr "Impossible de lire le répertoire"
-#: ../libsvn_subr/io.c:3388
+#: ../libsvn_subr/io.c:3764
+#, c-format
+msgid "Error closing directory"
+msgstr "Erreur de fermeture du répertoire"
+
+#: ../libsvn_subr/io.c:3833
#, c-format
msgid "Can't read directory entry in '%s'"
msgstr "Impossible de lire l'entrée de répertoire dans '%s'"
-#: ../libsvn_subr/io.c:3514
+#: ../libsvn_subr/io.c:3959
#, c-format
msgid "Can't check directory '%s'"
msgstr "Impossible de vérifier le répertoire '%s'"
-#: ../libsvn_subr/io.c:3576
+#: ../libsvn_subr/io.c:4021
#, c-format
msgid "Reading '%s'"
msgstr "Lecture de '%s'"
-#: ../libsvn_subr/io.c:3595
+#: ../libsvn_subr/io.c:4040
#, c-format
msgid "First line of '%s' contains non-digit"
msgstr "La première ligne de '%s' contient des caractères non-numériques"
-#: ../libsvn_subr/io.c:3736
+#: ../libsvn_subr/io.c:4355
#, c-format
msgid "Can't create temporary file from template '%s'"
msgstr "Impossible de créer un fichier temporaire avec le patron '%s'"
-#: ../libsvn_subr/io.c:3827
+#: ../libsvn_subr/io.c:4444
#, c-format
msgid "Can't set aside '%s'"
msgstr "Impossible d'ignorer '%s'"
-#: ../libsvn_subr/io.c:3839
+#: ../libsvn_subr/io.c:4456
#, c-format
msgid "Unable to make name in '%s'"
msgstr "Impossible de créer un nom dans '%s'"
-#: ../libsvn_subr/kitchensink.c:46
-#, c-format
-msgid "Invalid revision number found parsing '%s'"
-msgstr "Numéro de révision invalide dans '%s'"
-
-#: ../libsvn_subr/kitchensink.c:58
-#, c-format
-msgid "Negative revision number found parsing '%s'"
-msgstr "Numéro de révision négatif en analysant '%s'"
-
-#: ../libsvn_subr/mergeinfo.c:97 ../libsvn_subr/mergeinfo.c:600
+#: ../libsvn_subr/mergeinfo.c:99 ../libsvn_subr/mergeinfo.c:627
msgid "Pathname not terminated by ':'"
msgstr "Chemin non terminé par ':'"
-#: ../libsvn_subr/mergeinfo.c:100
+#: ../libsvn_subr/mergeinfo.c:102
msgid "No pathname preceding ':'"
msgstr "Pas de chemin avant ':'"
-#: ../libsvn_subr/mergeinfo.c:491
-#, c-format
-msgid "Mergeinfo for '%s' maps to an empty revision range"
-msgstr "Merginfo pour '%s' correspond à un intervalle de révision vide"
-
-#: ../libsvn_subr/mergeinfo.c:505
+#: ../libsvn_subr/mergeinfo.c:520
#, c-format
msgid "Invalid character '%c' found in revision list"
msgstr "Caractère invalide '%c' dans une liste de révisions"
-#: ../libsvn_subr/mergeinfo.c:513
+#: ../libsvn_subr/mergeinfo.c:528
#, c-format
msgid "Invalid revision number '0' found in range list"
msgstr "Numéro de révision '0' invalide dans une liste d'intervalles."
-#: ../libsvn_subr/mergeinfo.c:524
+#: ../libsvn_subr/mergeinfo.c:539
#, c-format
msgid "Unable to parse reversed revision range '%ld-%ld'"
msgstr "Impossible d'analyser l'intervalle de révision inversé '%ld-%ld'"
-#: ../libsvn_subr/mergeinfo.c:529
+#: ../libsvn_subr/mergeinfo.c:544
#, c-format
msgid "Unable to parse revision range '%ld-%ld' with same start and end revisions"
msgstr "Impossible d'analyser l'étendue de révision '%ld-%ld' avec des révisions début et fin identiques"
-#: ../libsvn_subr/mergeinfo.c:566 ../libsvn_subr/mergeinfo.c:573
+#: ../libsvn_subr/mergeinfo.c:581 ../libsvn_subr/mergeinfo.c:588
#, c-format
msgid "Invalid character '%c' found in range list"
msgstr "Caractère invalide '%c' dans une liste d'étendues de révisions"
-#: ../libsvn_subr/mergeinfo.c:580
+#: ../libsvn_subr/mergeinfo.c:595
msgid "Range list parsing ended before hitting newline"
msgstr "L'analyse syntaxique de la liste d'étendues de révisions a fini avant la fin de ligne"
-#: ../libsvn_subr/mergeinfo.c:608
+#: ../libsvn_subr/mergeinfo.c:635
+#, c-format
+msgid "Mergeinfo for '%s' maps to an empty revision range"
+msgstr "Merginfo pour '%s' correspond à un intervalle de révision vide"
+
+#: ../libsvn_subr/mergeinfo.c:639
#, c-format
msgid "Could not find end of line in range list line in '%s'"
msgstr "Impossible de trouver la fin de ligne dans la ligne de révision '%s'"
-#: ../libsvn_subr/mergeinfo.c:639
+#: ../libsvn_subr/mergeinfo.c:670
#, c-format
msgid "Unable to parse overlapping revision ranges '%s' and '%s' with different inheritance types"
msgstr "L'analyse des intervalles de révision superposés '%s' et '%s' avec des types d'héritage différents n'est pas supportée"
-#: ../libsvn_subr/mergeinfo.c:703
+#: ../libsvn_subr/mergeinfo.c:745
#, c-format
msgid "Could not parse mergeinfo string '%s'"
msgstr "Impossible d'analyse la chaîne 'mergeinfo' '%s'"
-#: ../libsvn_subr/mergeinfo.c:1918
+#: ../libsvn_subr/mergeinfo.c:2300
msgid "NULL mergeinfo catalog\n"
msgstr "catalogue d'informations de fusion (mergeinfo) NULL\n"
-#: ../libsvn_subr/mergeinfo.c:1923
+#: ../libsvn_subr/mergeinfo.c:2305
msgid "empty mergeinfo catalog\n"
msgstr "catalogue d'informations de fusion (mergeinfo) vide\n"
-#: ../libsvn_subr/mergeinfo.c:1956
+#: ../libsvn_subr/mergeinfo.c:2338
msgid "NULL mergeinfo\n"
msgstr "Information de fusion (mergeinfo) NULL\n"
-#: ../libsvn_subr/mergeinfo.c:1961
+#: ../libsvn_subr/mergeinfo.c:2343
msgid "empty mergeinfo\n"
msgstr "Information de fusion (mergeinfo) vide\n"
-#: ../libsvn_subr/nls.c:90
+#: ../libsvn_subr/mutex.c:45
+#, c-format
+msgid "Can't create mutex"
+msgstr "Impossible de créer l'exclusivité (mutex)"
+
+#: ../libsvn_subr/mutex.c:62
+#, c-format
+msgid "Can't lock mutex"
+msgstr "Impossible de verrouiller le l'exclusivité (mutex)"
+
+#: ../libsvn_subr/mutex.c:78
+#, c-format
+msgid "Can't unlock mutex"
+msgstr "Impossible de déverrouiller l'exclusivité (mutex)"
+
+#: ../libsvn_subr/named_atomic.c:323
+msgid "Not a valid atomic"
+msgstr "Opération atomique invalide"
+
+#: ../libsvn_subr/named_atomic.c:433
+#, c-format
+msgid "Can't get shared memory for named atomics"
+msgstr "Impossible d'obtenir la mémoire partagé l'opération atomique nommée"
+
+#: ../libsvn_subr/named_atomic.c:474
+msgid "Atomic's name is too long."
+msgstr "Le nom de l'opération atomique est trop long."
+
+#: ../libsvn_subr/named_atomic.c:480
+msgid "Namespace has not been initialized."
+msgstr "L'espace de nommage (namespace) n'a pas été initialisé"
+
+#: ../libsvn_subr/named_atomic.c:528
+msgid "Out of slots for named atomic."
+msgstr "Plus d'espace pour une opération atomique nommée."
+
+#: ../libsvn_subr/nls.c:81
#, c-format
msgid "Can't convert string to UCS-2: '%s'"
msgstr "Impossible de convertir la chaîne vers UCS-2 : '%s'"
-#: ../libsvn_subr/nls.c:97
+#: ../libsvn_subr/nls.c:88
msgid "Can't get module file name"
msgstr "Impossible d'obtenir le nom de fichier du module"
-#: ../libsvn_subr/nls.c:112
+#: ../libsvn_subr/nls.c:103
#, c-format
msgid "Can't convert module path to UTF-8 from UCS-2: '%s'"
msgstr "Impossible de convertir le chemin de module de UTF-8 vers UCS-2 : '%s'"
-#: ../libsvn_subr/opt.c:187
+#: ../libsvn_subr/opt.c:188
msgid " ARG"
msgstr " ARG"
-#: ../libsvn_subr/opt.c:322
+#: ../libsvn_subr/opt.c:323
msgid ""
"\n"
"Global options:\n"
@@ -5895,37 +5843,42 @@ msgstr ""
"\n"
"Options globales :\n"
-#: ../libsvn_subr/opt.c:770
+#: ../libsvn_subr/opt.c:815
+#, c-format
+msgid "Syntax error parsing peg revision '%s'; did you mean '%s@'?"
+msgstr "Erreur de syntaxe sur la révision fixée '%s' ; Est-ce bien '%s@' ?"
+
+#: ../libsvn_subr/opt.c:821
#, c-format
-msgid "Syntax error parsing revision '%s'"
-msgstr "Erreur de syntaxe sur la révision '%s'"
+msgid "Syntax error parsing peg revision '%s'"
+msgstr "Erreur de syntaxe sur la révision fixée '%s'"
-#: ../libsvn_subr/opt.c:907
+#: ../libsvn_subr/opt.c:958
msgid "Revision property pair is empty"
msgstr "La paire de la propriété de révision est vide"
-#: ../libsvn_subr/opt.c:927 ../svn/propedit-cmd.c:87 ../svn/propget-cmd.c:207
+#: ../libsvn_subr/opt.c:978 ../svn/propedit-cmd.c:85 ../svn/propget-cmd.c:218
#: ../svn/propset-cmd.c:68
#, c-format
msgid "'%s' is not a valid Subversion property name"
msgstr "'%s' n'est pas un nom de propriété de Subversion valide"
-#: ../libsvn_subr/opt.c:964
+#: ../libsvn_subr/opt.c:1015
#, c-format
msgid "'%s' is just a peg revision. Maybe try '%s@' instead?"
msgstr "'%s' est une révision fixée. Essayer '%s@' à la place ?"
-#: ../libsvn_subr/opt.c:996
+#: ../libsvn_subr/opt.c:1061
#, c-format
msgid "URL '%s' contains a '..' element"
msgstr "L'URL '%s' contient un composant '..'"
-#: ../libsvn_subr/opt.c:1029
+#: ../libsvn_subr/opt.c:1094
#, c-format
msgid "Error resolving case of '%s'"
msgstr "Erreur à la résolution de la casse de '%s'"
-#: ../libsvn_subr/opt.c:1048
+#: ../libsvn_subr/opt.c:1113
#, c-format
msgid ""
"%s, version %s\n"
@@ -5936,15 +5889,15 @@ msgstr ""
" compilé %s, %s\n"
"\n"
-#: ../libsvn_subr/opt.c:1051
+#: ../libsvn_subr/opt.c:1117
msgid ""
-"Copyright (C) 2011 The Apache Software Foundation.\n"
-"This software consists of contributions made by many people;\n"
-"see the NOTICE file for more information.\n"
+"Copyright (C) 2012 The Apache Software Foundation.\n"
+"This software consists of contributions made by many people; see the NOTICE\n"
+"file for more information.\n"
"Subversion is open source software, see http://subversion.apache.org/\n"
"\n"
msgstr ""
-"Copyright (C) 2011 The Apache Software Foundation.\n"
+"Copyright (C) 2012 The Apache Software Foundation.\n"
"Ce logiciel est la somme des contributions de nombreuses personnes ;\n"
"voir le fichier NOTICE pour plus d'information.\n"
"Subversion est un logiciel libre, voir http://subversion.apache.org/\n"
@@ -5955,7 +5908,7 @@ msgstr ""
msgid "Can't determine the native path encoding"
msgstr "Impossible de déterminer l'encodage natif du chemin"
-#: ../libsvn_subr/path.c:1200
+#: ../libsvn_subr/path.c:1208
#, c-format
msgid "Invalid control character '0x%02x' in path '%s'"
msgstr "Caractère de contrôle invalide '0x%02x' dans le chemin '%s'"
@@ -5974,11 +5927,6 @@ msgstr "Domaine d'authentification : %s\n"
msgid "Username: "
msgstr "Nom d'utilisateur : "
-#: ../libsvn_subr/prompt.c:211
-#, c-format
-msgid "Password for '%s': "
-msgstr "Mot de passe pour '%s' : "
-
#: ../libsvn_subr/prompt.c:254
#, c-format
msgid "Error validating server certificate for '%s':\n"
@@ -6134,75 +6082,56 @@ msgstr ""
msgid "Password for '%s' GNOME keyring: "
msgstr "Mot de passe du porte-clé GNOME '%s' : "
-#: ../libsvn_subr/simple_providers.c:446
-#: ../libsvn_subr/ssl_client_cert_pw_providers.c:296
+#: ../libsvn_subr/simple_providers.c:459
+#: ../libsvn_subr/ssl_client_cert_pw_providers.c:305
#, c-format
msgid "Config error: invalid value '%s' for option '%s'"
msgstr "Erreur de configuration : valeur '%s' invalide pour l'option '%s'"
-#: ../libsvn_subr/sqlite.c:183
+#: ../libsvn_subr/sqlite.c:154
+#, c-format
+msgid "%s, executing statement '%s'"
+msgstr "'%s', à l'exécution de l'opération '%s'"
+
+#: ../libsvn_subr/sqlite.c:242
msgid "Expected database row missing"
msgstr "Il manque une ligne dans la base de donnée"
-#: ../libsvn_subr/sqlite.c:184
+#: ../libsvn_subr/sqlite.c:243
msgid "Extra database row found"
msgstr "Il y a une ligne en trop dans la base de données"
-#: ../libsvn_subr/sqlite.c:693
-#, c-format
-msgid "Schema format %d not recognized"
-msgstr "Format de schéma %d non reconnu"
-
-#: ../libsvn_subr/sqlite.c:709
+#: ../libsvn_subr/sqlite.c:642
#, c-format
msgid "SQLite compiled for %s, but running with %s"
msgstr "SQLite compilé pour %s, mais tourne avec %s"
-#: ../libsvn_subr/sqlite.c:721
+#: ../libsvn_subr/sqlite.c:654
msgid "SQLite is required to be compiled and run in thread-safe mode"
msgstr "SQLite dont être compilé et exécuté en mode 'thread-safe'"
-#: ../libsvn_subr/sqlite.c:731
+#: ../libsvn_subr/sqlite.c:663
msgid "Could not configure SQLite"
msgstr "Impossible de configurer SQLite"
-#: ../libsvn_subr/sqlite.c:733
+#: ../libsvn_subr/sqlite.c:665
msgid "Could not initialize SQLite"
msgstr "Impossible d'initialiser SQLite"
-#: ../libsvn_subr/sqlite.c:742
-msgid "Could not initialize SQLite shared cache"
-msgstr "Impossible d'initialiser le cache partagé de SQLite"
-
-#: ../libsvn_subr/sqlite.c:812
-#, c-format
-msgid "Expected SQLite database not found: %s"
-msgstr "Base de données SQLite non trouvée : %s"
-
-#: ../libsvn_subr/sqlite.c:1129
+#: ../libsvn_subr/sqlite.c:1074
#, c-format
msgid "SQLite hotcopy failed for %s"
msgstr "Échec de la copie à chaud SQLite pour %s"
-#: ../libsvn_subr/subst.c:1729 ../libsvn_wc/props.c:1950
-#, c-format
-msgid "File '%s' has inconsistent newlines"
-msgstr "Le fichier '%s' a des sauts de ligne incohérents"
-
-#: ../libsvn_subr/svn_string.c:706 ../libsvn_subr/svn_string.c:750
+#: ../libsvn_subr/string.c:837 ../libsvn_subr/string.c:881
#, c-format
msgid "Could not convert '%s' into a number"
msgstr "Impossible de convertir '%s' en un entier"
-#: ../libsvn_subr/svn_string.c:712
-#, c-format
-msgid "Number '%s' is out of range '[%llu, %llu]'"
-msgstr "Nombre '%s' hors de l'intervalle [%llu, %llu]"
-
-#: ../libsvn_subr/svn_string.c:756
+#: ../libsvn_subr/subst.c:1739 ../libsvn_wc/props.c:1790
#, c-format
-msgid "Number '%s' is out of range '[%lld, %lld]'"
-msgstr "Nombre '%s' hors de l'intervalle [%lld, %lld]"
+msgid "File '%s' has inconsistent newlines"
+msgstr "Le fichier '%s' a des sauts de ligne incohérents"
# Hmmm... what about "%x" (preferred date representation in locale) instead?
#. Human explanatory part, generated by apr_strftime as "Sat, 01 Jan 2000"
@@ -6215,55 +6144,57 @@ msgstr " (%a %d %b %Y)"
msgid "Token '%s' is unrecognized"
msgstr "Symbole '%s' non reconnu"
-#: ../libsvn_subr/utf.c:190
-msgid "Can't lock charset translation mutex"
-msgstr "Impossible de verrouiller l'exclusivité (mutex) sur la conversion de caractères"
+#: ../libsvn_subr/types.c:47
+#, c-format
+msgid "Invalid revision number found parsing '%s'"
+msgstr "Numéro de révision invalide dans '%s'"
-#: ../libsvn_subr/utf.c:208 ../libsvn_subr/utf.c:304
-msgid "Can't unlock charset translation mutex"
-msgstr "Impossible de déverrouiller l'exclusivité (mutex) sur la conversion de caractères"
+#: ../libsvn_subr/types.c:59
+#, c-format
+msgid "Negative revision number found parsing '%s'"
+msgstr "Numéro de révision négatif en analysant '%s'"
-#: ../libsvn_subr/utf.c:262
+#: ../libsvn_subr/utf.c:239
#, c-format
msgid "Can't create a character converter from native encoding to '%s'"
msgstr "Impossible de créer un convertisseur de caractères de l'encodage natif vers '%s'"
-#: ../libsvn_subr/utf.c:266
+#: ../libsvn_subr/utf.c:243
#, c-format
msgid "Can't create a character converter from '%s' to native encoding"
msgstr "Impossible de créer un convertisseur de caractères de '%s' vers l'encodage natif"
-#: ../libsvn_subr/utf.c:270
+#: ../libsvn_subr/utf.c:247
#, c-format
msgid "Can't create a character converter from '%s' to '%s'"
msgstr "Impossible de créer un convertisseur de caractères de '%s' vers '%s'"
-#: ../libsvn_subr/utf.c:499
+#: ../libsvn_subr/utf.c:593
#, c-format
msgid "Can't convert string from native encoding to '%s':"
msgstr "Impossible de convertir la chaîne de l'encodage natif vers '%s':"
-#: ../libsvn_subr/utf.c:503
+#: ../libsvn_subr/utf.c:597
#, c-format
msgid "Can't convert string from '%s' to native encoding:"
msgstr "Impossible de convertir la chaîne de '%s' vers l'encodage natif:"
-#: ../libsvn_subr/utf.c:507
+#: ../libsvn_subr/utf.c:601
#, c-format
msgid "Can't convert string from '%s' to '%s':"
msgstr "Impossible de convertir la chaîne de '%s' à '%s' :"
-#: ../libsvn_subr/utf.c:552
+#: ../libsvn_subr/utf.c:646
#, c-format
msgid "Safe data '%s' was followed by non-ASCII byte %d: unable to convert to/from UTF-8"
msgstr "Les données sûres '%s' sont suivies de l'octet non ASCII %d: conversion de/vers UTF-8 impossible"
-#: ../libsvn_subr/utf.c:560
+#: ../libsvn_subr/utf.c:654
#, c-format
msgid "Non-ASCII character (code %d) detected, and unable to convert to/from UTF-8"
msgstr "Caractère non ASCII détecté (code %d), conversion de/vers UTF-8 impossible"
-#: ../libsvn_subr/utf.c:605
+#: ../libsvn_subr/utf.c:699
#, c-format
msgid ""
"Valid UTF-8 data\n"
@@ -6276,20 +6207,25 @@ msgstr ""
"suivies par une séquence UTF-8 invalide\n"
"(hex:%s)"
-#: ../libsvn_subr/validate.c:55
+#: ../libsvn_subr/validate.c:56
#, c-format
msgid "MIME type '%s' has empty media type"
msgstr "Le type MIME '%s' ne contient pas de type de media"
-#: ../libsvn_subr/validate.c:60
+#: ../libsvn_subr/validate.c:61
#, c-format
msgid "MIME type '%s' does not contain '/'"
msgstr "Le type MIME '%s' ne contient pas '/'"
-#: ../libsvn_subr/validate.c:72
+#: ../libsvn_subr/validate.c:73
+#, c-format
+msgid "MIME type '%s' contains invalid character '%c' in media type"
+msgstr "Le type MIME '%s' contient un caractère invalide '%c' dans le type de média"
+
+#: ../libsvn_subr/validate.c:84
#, c-format
-msgid "MIME type '%s' contains invalid character '%c'"
-msgstr "Le type MIME '%s' contient un caractère invalide '%c'"
+msgid "MIME type '%s' contains invalid character '0x%02x' in postfix"
+msgstr "Le type MIME '%s' contient un caractère invalide '0x%02x' dans le postfix"
#: ../libsvn_subr/version.c:87
#, c-format
@@ -6301,37 +6237,31 @@ msgstr "Versions incompatibles dans '%s', %d.%d.%d%s contre %d.%d.%d%s attendu"
msgid "Malformed XML: %s at line %ld"
msgstr "XML malformé: %s à la ligne %ld"
-#: ../libsvn_wc/adm_crawler.c:114
+#: ../libsvn_wc/adm_crawler.c:112
#, c-format
msgid "The existing node '%s' can not be restored."
msgstr "Le nœud existant '%s' ne peut pas être restauré."
-#: ../libsvn_wc/adm_crawler.c:141
+#: ../libsvn_wc/adm_crawler.c:139
#, c-format
msgid "The node '%s' can not be restored."
msgstr "Le nœud '%s' ne peut pas être restauré."
-#: ../libsvn_wc/adm_crawler.c:724
-#, c-format
-msgid "Can't retrieve base revision for %s"
-msgstr "Impossible de récupérer la révision de base pour %s"
-
-#: ../libsvn_wc/adm_crawler.c:989
+#: ../libsvn_wc/adm_crawler.c:864
msgid "Error aborting report"
msgstr "Erreur en interrompant un rapport"
-#: ../libsvn_wc/adm_crawler.c:1264
+#: ../libsvn_wc/adm_crawler.c:976
#, c-format
-msgid ""
-"Checksum mismatch for text base of '%s':\n"
-" expected: %s\n"
-" actual: %s\n"
-msgstr ""
-"Somme de contrôle invalida pour le texte de '%s' :\n"
-" attendu : %s\n"
-" obtenu : %s\n"
+msgid "Pristine checksum for file '%s' is missing"
+msgstr "La somme de contrôle de référence du fichier '%s' est absente"
+
+#: ../libsvn_wc/adm_crawler.c:1141
+#, c-format
+msgid "Checksum mismatch for text base of '%s'"
+msgstr "Sommes de contrôle différentes pour '%s'"
-#: ../libsvn_wc/adm_crawler.c:1278
+#: ../libsvn_wc/adm_crawler.c:1152
#, c-format
msgid "While preparing '%s' for commit"
msgstr "En préparant la propagation (commit) de '%s'"
@@ -6341,126 +6271,86 @@ msgstr "En préparant la propagation (commit) de '%s'"
msgid "'%s' is not a valid administrative directory name"
msgstr "'%s' n'est pas un nom de répertoire administratif valide"
-#: ../libsvn_wc/adm_files.c:208
-#, c-format
-msgid "Node '%s' has no pristine text"
-msgstr "Le nœud '%s' n'a pas de texte de référence"
-
-#: ../libsvn_wc/adm_files.c:234
-#, c-format
-msgid "Node '%s' has no pristine base text"
-msgstr "Le nœud '%s' n'a pas de texte de base de référence"
-
-#: ../libsvn_wc/adm_files.c:259
-#, c-format
-msgid "File '%s' has no text base"
-msgstr "Le fichier '%s' n'a pas de texte de base"
-
-#: ../libsvn_wc/adm_files.c:286
-#, c-format
-msgid "Base node of '%s' is not a file"
-msgstr "Le nœud de base de '%s' n'est pas un fichier"
-
-#: ../libsvn_wc/adm_files.c:322
+#: ../libsvn_wc/adm_files.c:185 ../libsvn_wc/adm_files.c:241
#, c-format
msgid "Can only get the pristine contents of files; '%s' is not a file"
msgstr "Il n'est possible d'obtenir le contenu de référence que d'un fichier ; '%s' n'est pas un fichier"
-#: ../libsvn_wc/adm_files.c:348
+#: ../libsvn_wc/adm_files.c:194 ../libsvn_wc/adm_files.c:256
#, c-format
msgid "Cannot get the pristine contents of '%s' because its delete is already committed"
msgstr "Impossible d'obtenir le contenu de référence du fichier '%s' parce son effacement est déjà propagé (commit)"
-#: ../libsvn_wc/adm_files.c:356
+#: ../libsvn_wc/adm_files.c:202 ../libsvn_wc/adm_files.c:264
#, c-format
msgid "Cannot get the pristine contents of '%s' because it has an unexpected status"
msgstr "Impossible d'obtenir le contenu de référence de '%s' parce qu'il a un un état inattendu"
-#: ../libsvn_wc/adm_files.c:637
+#: ../libsvn_wc/adm_files.c:209
+#, c-format
+msgid "Node '%s' has no pristine text"
+msgstr "Le nœud '%s' n'a pas de texte de référence"
+
+#: ../libsvn_wc/adm_files.c:448
#, c-format
msgid "Revision %ld doesn't match existing revision %ld in '%s'"
msgstr "La révision %ld ne correspond pas à la révision %ld dans '%s'"
-#: ../libsvn_wc/adm_files.c:683
+#: ../libsvn_wc/adm_files.c:494
#, c-format
-msgid "URL '%s' doesn't match existing URL '%s' in '%s'"
-msgstr "L'URL '%s' ne correspond pas à l'URL '%s' dans '%s'"
+msgid "URL '%s' (uuid: '%s') doesn't match existing URL '%s' (uuid: '%s') in '%s'"
+msgstr "L'URL '%s' (uuid: '%s') ne correspond pas à l'URL '%s' (uuid: '%s') dans '%s'"
-#: ../libsvn_wc/adm_ops.c:620
+#: ../libsvn_wc/adm_ops.c:662 ../libsvn_wc/adm_ops.c:811
#, c-format
msgid "'%s' cannot be deleted"
msgstr "'%s' ne peut être effacé"
-#: ../libsvn_wc/adm_ops.c:790 ../libsvn_wc/update_editor.c:5457
+#: ../libsvn_wc/adm_ops.c:680 ../libsvn_wc/adm_ops.c:827
+#, c-format
+msgid "'%s' is the root of a working copy and cannot be deleted"
+msgstr "Le répertoire '%s' est la racine d'une copie de travail et ne peut être effacé"
+
+#: ../libsvn_wc/adm_ops.c:978 ../libsvn_wc/update_editor.c:5517
#, c-format
msgid "Can't find parent directory's node while trying to add '%s'"
msgstr "Impossible de trouver le nœud du répertoire parent lors de l'ajout de '%s'"
-#: ../libsvn_wc/adm_ops.c:799 ../libsvn_wc/update_editor.c:5451
+#: ../libsvn_wc/adm_ops.c:987 ../libsvn_wc/update_editor.c:5511
#, c-format
msgid "Can't add '%s' to a parent directory scheduled for deletion"
msgstr "'%s' ne peut être ajouté à un répertoire parent qui doit être supprimé"
-#: ../libsvn_wc/adm_ops.c:806 ../libsvn_wc/update_editor.c:5464
+#: ../libsvn_wc/adm_ops.c:994 ../libsvn_wc/update_editor.c:5524
#, c-format
msgid "Can't schedule an addition of '%s' below a not-directory node"
msgstr "Impossible de prévoir l'adition de '%s' qui est sous un nœud non répertoire"
-#: ../libsvn_wc/adm_ops.c:865
+#: ../libsvn_wc/adm_ops.c:1052
#, c-format
msgid "Can't create an entry with a reserved name while trying to add '%s'"
msgstr "Impossible de trouver une entrée avec un nom réservé à l'ajout de '%s'"
-#: ../libsvn_wc/adm_ops.c:1042
+#: ../libsvn_wc/adm_ops.c:1249
#, c-format
msgid "The URL '%s' has a different repository root than its parent"
msgstr "L'URL '%s' a un dépôt racine différent de son parent"
-#: ../libsvn_wc/adm_ops.c:1060
+#: ../libsvn_wc/adm_ops.c:1267
#, c-format
msgid "Can't schedule the working copy at '%s' from repository '%s' with uuid '%s' for addition under a working copy from repository '%s' with uuid '%s'."
msgstr "Impossible de prévoir l'addition de la copie de travail '%s' du dépôt '%s' avec l'uuid '%s' sous la copie de travail du dépôt '%s' avec l'uuid '%s'."
-#: ../libsvn_wc/adm_ops.c:1074
+#: ../libsvn_wc/adm_ops.c:1281
#, c-format
msgid "Can't add '%s' with URL '%s', but with the data from '%s'"
msgstr "Impossible d'ajouter '%s' avec l'URL '%s', mais avec des données de '%s'"
-#: ../libsvn_wc/adm_ops.c:1309
-#, c-format
-msgid "Can't revert '%s' with this depth, as that requires reverting '%s'."
-msgstr "Impossible d'annuler les modifications (revert) de '%s' avec cette profondeur, car cela requiert d'annuler celles de '%s'"
-
-#: ../libsvn_wc/adm_ops.c:1410
-#, c-format
-msgid "Cannot revert unversioned item '%s'"
-msgstr "Impossible de rétablir (revert) un élément non versionné '%s'"
-
-#: ../libsvn_wc/adm_ops.c:1441
-#, c-format
-msgid "Cannot revert '%s': unsupported entry node kind"
-msgstr "Rétablissement de '%s' impossible : type de nœud non supporté"
-
-#: ../libsvn_wc/adm_ops.c:1456
-#, c-format
-msgid "Cannot revert '%s': unsupported node kind in working copy"
-msgstr "Rétablissement de '%s' impossible : type de nœud non supporté dans la copie de travail"
-
-#: ../libsvn_wc/adm_ops.c:1781
+#: ../libsvn_wc/adm_ops.c:2381
#, c-format
msgid "File '%s' has local modifications"
msgstr "Le fichier '%s' a été localement modifié"
-#: ../libsvn_wc/adm_ops.c:2083
-#, c-format
-msgid "'%s' is a directory, and thus cannot be a member of a changelist"
-msgstr "'%s' est un répertoire, et donc ne peut pas être membre d'une liste de changements (changelist)"
-
-#: ../libsvn_wc/adm_ops.c:2152
-#, c-format
-msgid "Can't add a file external to '%s' as it is not a file in repository '%s'."
-msgstr "Impossible d'ajouter un fichier externe vers '%s' car ce n'est pas un fichier dans le dépôt '%s'."
-
#: ../libsvn_wc/cleanup.c:58
#, c-format
msgid "'%s' is not a working copy directory"
@@ -6470,180 +6360,302 @@ msgstr "'%s' n'est pas un répertoire d'une copie de travail"
msgid "Log format too old, please use Subversion 1.6 or earlier"
msgstr "Format de traces (log) trop vieux, utiliser Subversion 1.6 ou plus ancien"
-#: ../libsvn_wc/conflicts.c:299
+#: ../libsvn_wc/conflicts.c:82
+msgid "Not a conflict skel"
+msgstr "Ce n'est pas un squelette de conflit"
+
+#: ../libsvn_wc/conflicts.c:586 ../libsvn_wc/conflicts.c:683
+msgid "Not a completed conflict skel"
+msgstr "Squelette de conflit incomplet"
+
+#: ../libsvn_wc/conflicts.c:764 ../libsvn_wc/conflicts.c:837
+#: ../libsvn_wc/conflicts.c:926
+msgid "Conflict not set"
+msgstr "Conflit non sélectionné"
+
+#: ../libsvn_wc/conflicts.c:1383
+msgid "Conflict callback violated API: returned no results."
+msgstr "L'appel pour gestion de conflit viole l'API : aucun résultat retourné."
+
+#: ../libsvn_wc/conflicts.c:1425
+msgid "Conflict callback violated API: returned no merged file."
+msgstr "L'appel de gestion de conflit viole l'API : retourne \"pas de fusion\"."
+
+#: ../libsvn_wc/conflicts.c:1741
+msgid "Conflict callback violated API: returned no results"
+msgstr "L'appel pour gestion de conflit viole l'API : aucun résultat retourné"
+
+#: ../libsvn_wc/conflicts.c:2204
msgid "Invalid 'conflict_result' argument"
msgstr "Argument 'conflit_result' invalide"
-#: ../libsvn_wc/conflicts.c:409
+#: ../libsvn_wc/conflicts.c:2383
+msgid "No conflict-callback and no pre-defined conflict-choice provided"
+msgstr "Pas d'appel automatique sur conflit ou de choix de conflit prédéfini"
+
+#: ../libsvn_wc/conflicts.c:2410
#, c-format
msgid "Tree conflicts can only be resolved to 'working' state; '%s' not resolved"
msgstr "Les conflits d'arbre ne peuvent être résolus que vers l'état 'working' ; '%s' non résolu"
-#: ../libsvn_wc/copy.c:78
+#: ../libsvn_wc/copy.c:84
#, c-format
msgid "Source '%s' is unexpected kind"
msgstr "La source '%s' est de type inattendu"
-#: ../libsvn_wc/copy.c:388
+#: ../libsvn_wc/copy.c:420
#, c-format
msgid "cannot handle node kind for '%s'"
msgstr "Impossible de traiter le type de nœud pour '%s'"
-#: ../libsvn_wc/copy.c:539
+#: ../libsvn_wc/copy.c:442 ../libsvn_wc/wc_db.c:3932 ../libsvn_wc/wc_db.c:4251
+#, c-format
+msgid "Cannot handle status of '%s'"
+msgstr "Impossible de traiter l'état de '%s'"
+
+#: ../libsvn_wc/copy.c:451 ../libsvn_wc/wc_db.c:3923 ../libsvn_wc/wc_db.c:4245
+#: ../libsvn_wc/wc_db.c:4492
+#, c-format
+msgid "Cannot copy '%s' excluded by server"
+msgstr "Impossible de copier '%s' exclu par le serveur"
+
+#: ../libsvn_wc/copy.c:582
+#, c-format
+msgid "Deleted node '%s' can't be copied."
+msgstr "Le Nœud effacé '%s' ne peut être copié"
+
+#: ../libsvn_wc/copy.c:648
#, c-format
msgid "Cannot copy to '%s', as it is not from repository '%s'; it is from '%s'"
msgstr "Copie vers '%s' impossible : il n'est pas dans le dépôt '%s' ; il est dans le dépôt '%s'"
-#: ../libsvn_wc/copy.c:547
+#: ../libsvn_wc/copy.c:656
#, c-format
msgid "Cannot copy to '%s' as it is scheduled for deletion"
msgstr "Copie de '%s' impossible car il doit être supprimé"
-#: ../libsvn_wc/copy.c:576
+#: ../libsvn_wc/copy.c:684
#, c-format
msgid "'%s' is already under version control but is excluded."
msgstr "'%s' est déjà sous gestionnaire de version mais est exclus."
-#: ../libsvn_wc/copy.c:591
+#: ../libsvn_wc/copy.c:699
#, c-format
msgid "There is already a versioned item '%s'"
msgstr "Il y a déjà un objet versionné '%s'"
-#: ../libsvn_wc/copy.c:607
+#: ../libsvn_wc/copy.c:715
#, c-format
msgid "'%s' already exists and is in the way"
msgstr "'%s' existe déjà et est dans le chemin"
-#: ../libsvn_wc/crop.c:224
+#: ../libsvn_wc/crop.c:222
#, c-format
msgid "Cannot exclude '%s': it is a working copy root"
msgstr "Impossible d'exclure '%s' : c'est la racine de la copie de travail"
-#: ../libsvn_wc/crop.c:232
+#: ../libsvn_wc/crop.c:230
#, c-format
msgid "Cannot exclude '%s': it is a switched path"
-msgstr "Impossible d'exclure '%s' : c'est un chemin ré-aiguillé (switch)"
+msgstr "Impossible d'exclure '%s' : c'est un chemin basculé (switch)"
-#: ../libsvn_wc/crop.c:256
+#: ../libsvn_wc/crop.c:257
#, c-format
msgid "Cannot exclude '%s': it is to be added to the repository. Try commit instead"
msgstr "Impossible d'exclure '%s' : il doit être ajouté au dépôt ; essayer de propager (commit) d'abord"
-#: ../libsvn_wc/crop.c:263
+#: ../libsvn_wc/crop.c:264
#, c-format
msgid "Cannot exclude '%s': it is to be deleted from the repository. Try commit instead"
msgstr "Impossible d'exclure '%s' : il doit être effacé du dépôt ; essayer de propager (commit) d'abord"
-#: ../libsvn_wc/crop.c:333
+#: ../libsvn_wc/crop.c:329
msgid "Can only crop a working copy with a restrictive depth"
msgstr "Une copie de travail peut seulement être restreinte (crop) avec une profondeur réduite"
-#: ../libsvn_wc/crop.c:348
+#: ../libsvn_wc/crop.c:340
msgid "Can only crop directories"
msgstr "Il n'est possible de restreindre (crop) que des répertoires"
-#: ../libsvn_wc/crop.c:359
+#: ../libsvn_wc/crop.c:353
#, c-format
msgid "Cannot crop '%s': it is going to be removed from repository. Try commit instead"
msgstr "Impossible de tronquer '%s' : il doit être effacé du dépôt ; essayer de propager (commit) d'abord"
-#: ../libsvn_wc/crop.c:366
+#: ../libsvn_wc/crop.c:360
#, c-format
msgid "Cannot crop '%s': it is to be added to the repository. Try commit instead"
msgstr "Impossible de tronquer '%s' : il doit être ajouté au dépôt ; essayer de propager (commit) d'abord"
-#: ../libsvn_wc/deprecated.c:2052
+#: ../libsvn_wc/deprecated.c:2249
#, c-format
msgid "Unexpectedly found '%s': path is marked 'missing'"
msgstr "Découverte inattendue de '%s' : chemin marqué comme manquant"
-#: ../libsvn_wc/entries.c:1032
+#: ../libsvn_wc/entries.c:1024
#, c-format
msgid "'%s' is not a versioned working copy"
msgstr "'%s' n'est pas une copie de travail versionnée"
-#: ../libsvn_wc/entries.c:1278
+#: ../libsvn_wc/entries.c:1270
#, c-format
msgid "Admin area of '%s' is missing"
msgstr "La zone administrative de '%s' est absente"
-#: ../libsvn_wc/entries.c:1298
+#: ../libsvn_wc/entries.c:1290
#, c-format
msgid "'%s' is not of the right kind"
msgstr "'%s' n'est pas du bon type"
-#: ../libsvn_wc/entries.c:1764
+#: ../libsvn_wc/entries.c:1478
+#, c-format
+msgid "The file '%s' has no checksum"
+msgstr "Le fichier '%s' n'a pas de somme de contrôle"
+
+#: ../libsvn_wc/entries.c:1775
#, c-format
msgid "No copyfrom URL for '%s'"
msgstr "Pas d'URL source de copie pour '%s'"
-#: ../libsvn_wc/entries.c:2174
+#: ../libsvn_wc/entries.c:1991
+#, c-format
+msgid "Bad base MD5 checksum for '%s'; expected: '%s'; found '%s'; "
+msgstr "Mauvaise somme de contrôle MD5 pour '%s' ; '%s' attendu, '%s' trouvé ;"
+
+#: ../libsvn_wc/entries.c:2305
#, c-format
msgid "No default entry in directory '%s'"
msgstr "Aucune entrée par défaut dans le répertoire '%s'"
-#: ../libsvn_wc/entries.c:2359
+#: ../libsvn_wc/entries.c:2461
#, c-format
msgid "Directory '%s' has no THIS_DIR entry"
msgstr "Le répertoire '%s' n'a pas d'entrée THIS_DIR"
-#: ../libsvn_wc/entries.c:2542 ../libsvn_wc/node.c:792
+#: ../libsvn_wc/entries.c:2642 ../libsvn_wc/node.c:717
#, c-format
msgid "'%s' has an unrecognized node kind"
msgstr "'%s' possède un type de nœud non reconnu"
-#: ../libsvn_wc/lock.c:504
+#: ../libsvn_wc/externals.c:153 ../libsvn_wc/externals.c:228
+#, c-format
+msgid "Error parsing %s property on '%s': '%s'"
+msgstr "Erreur d'analyse de la propriété %s sur '%s' : '%s'"
+
+#: ../libsvn_wc/externals.c:198
+#, c-format
+msgid "Can't split line into components: '%s'"
+msgstr "Impossible de découper la ligne en composants : '%s'"
+
+#: ../libsvn_wc/externals.c:253
+#, c-format
+msgid "Invalid %s property on '%s': cannot use two absolute URLs ('%s' and '%s') in an external; one must be a path where an absolute or relative URL is checked out to"
+msgstr "Propriété %s invalide sur '%s' : on ne peut utiliser deux URLs absolues ('%s' et '%s') comme référence externe ; l'une doit être un chemin vers lequel une URL relative ou absolue va être extraite"
+
+#: ../libsvn_wc/externals.c:262 ../libsvn_wc/externals.c:270
+#, c-format
+msgid "Invalid %s property on '%s': cannot use a URL '%s' as the target directory for an external definition"
+msgstr "Propriété %s invalide sur '%s' : on ne peut utiliser une URL '%s' comme répertoire destination d'une référence externe"
+
+#: ../libsvn_wc/externals.c:312
+#, c-format
+msgid "Invalid %s property on '%s': target '%s' is an absolute path or involves '..'"
+msgstr "Propriété %s invalide sur '%s' : la cible '%s' est un chemin absolu ou utilise '..'"
+
+#: ../libsvn_wc/externals.c:430 ../libsvn_wc/externals.c:452
+#, c-format
+msgid "This editor can only update '%s'"
+msgstr "Cet éditeur peut seulement mettre à jour '%s'"
+
+#: ../libsvn_wc/externals.c:467
+#, c-format
+msgid "Node '%s' is no existing file external"
+msgstr "Le nœud '%s' n'est pas un fichier externe existant"
+
+#: ../libsvn_wc/externals.c:1416
+#, c-format
+msgid "URL '%s' does not begin with a scheme"
+msgstr "L'URL '%s' ne commence pas par un schéma"
+
+#: ../libsvn_wc/externals.c:1471
+#, c-format
+msgid "Illegal parent directory URL '%s'"
+msgstr "URL de répertoire parent invalide '%s'"
+
+#: ../libsvn_wc/externals.c:1510
+#, c-format
+msgid "Illegal repository root URL '%s'"
+msgstr "URL de racine de dépôt invalide '%s'"
+
+#: ../libsvn_wc/externals.c:1555
+#, c-format
+msgid "The external relative URL '%s' cannot have backpaths, i.e. '..'"
+msgstr "L'URL relative externe '%s' ne peut avoir de remontée '..'"
+
+#: ../libsvn_wc/externals.c:1583
+#, c-format
+msgid "Unrecognized format for the relative external URL '%s'"
+msgstr "Format d'URL relative externe non reconnu '%s'"
+
+#: ../libsvn_wc/lock.c:527
#, c-format
msgid "Path '%s' ends in '%s', which is unsupported for this operation"
msgstr "Le chemin '%s' se termine par '%s' ce qui n'est pas supporté par cette opération"
-#: ../libsvn_wc/lock.c:807 ../libsvn_wc/wc_db.c:7600
+#: ../libsvn_wc/lock.c:771 ../libsvn_wc/wc_db.c:12539
#, c-format
msgid "Working copy '%s' locked"
msgstr "La copie de travail '%s' est verrouillée"
-#: ../libsvn_wc/lock.c:951
+#: ../libsvn_wc/lock.c:916
#, c-format
msgid "Unable to check path existence for '%s'"
msgstr "Impossible de vérifier l'existence du chemin pour '%s'"
-#: ../libsvn_wc/lock.c:971
+#: ../libsvn_wc/lock.c:938
#, c-format
msgid "Expected '%s' to be a directory but found a file"
msgstr "'%s' est un fichier au lieu d'un répertoire"
-#: ../libsvn_wc/lock.c:981
+#: ../libsvn_wc/lock.c:948
#, c-format
msgid "Can't retrieve an access baton for non-directory '%s'"
msgstr "Impossible de trouver le baton d'accès pour le non-répertoire '%s'"
-#: ../libsvn_wc/lock.c:990
+#: ../libsvn_wc/lock.c:957
#, c-format
msgid "Directory '%s' is missing"
msgstr "Le répertoire '%s' est manquant"
-#: ../libsvn_wc/lock.c:998
+#: ../libsvn_wc/lock.c:965
#, c-format
msgid "Working copy '%s' is not locked"
msgstr "La copie de travail '%s' n'est pas verrouillée"
-#: ../libsvn_wc/lock.c:1459
+#: ../libsvn_wc/lock.c:1431
#, c-format
msgid "No write-lock in '%s'"
msgstr "Pas de verrou d'écriture sous '%s'"
-#: ../libsvn_wc/lock.c:1554 ../libsvn_wc/lock.c:1605
+#: ../libsvn_wc/lock.c:1528 ../libsvn_wc/lock.c:1583
#, c-format
msgid "Can't obtain lock on non-directory '%s'."
msgstr "Impossible de verrouiller le non-répertoire '%s'"
-#: ../libsvn_wc/merge.c:866 ../libsvn_wc/merge.c:1139
-msgid "Conflict callback violated API: returned no results"
-msgstr "L'appel pour gestion de conflit viole l'API : aucun résultat retourné"
+#: ../libsvn_wc/merge.c:1154 ../libsvn_wc/props.c:258
+#, c-format
+msgid "Can't merge into conflicted node '%s'"
+msgstr "Impossible de fusionner dans le nœud en conflit '%s'"
-#: ../libsvn_wc/merge.c:1175
-msgid "Conflict callback violated API: returned no merged file"
-msgstr "L'appel de gestion de conflit viole l'API : retourne \"pas de fusion\""
+#: ../libsvn_wc/merge.c:1195 ../libsvn_wc/props.c:274
+#, c-format
+msgid "The property '%s' may not be merged into '%s'."
+msgstr "Propriété '%s' ne peut être fusionnée avec '%s'."
+
+#: ../libsvn_wc/node.c:1542
+#, c-format
+msgid "'%s' is not the root of the working copy '%s'"
+msgstr "'%s' n'est pas la racine de la copie de travail '%s'"
#: ../libsvn_wc/old-and-busted.c:122
msgid "Invalid escape sequence"
@@ -6738,257 +6750,229 @@ msgstr "Terminaison d'entrée (entry) invalide"
msgid "Error at entry %d in entries file for '%s':"
msgstr "Erreur à l'entrée (entry) %d du fichier d'entrées pour '%s'"
-#: ../libsvn_wc/props.c:283
+#: ../libsvn_wc/props.c:237
#, c-format
-msgid "The property '%s' may not be merged into '%s'."
-msgstr "Propriété '%s' ne peut être fusionnée avec '%s'."
+msgid "The node '%s' does not have properties in this state."
+msgstr "Le nœud '%s' n'a pas de propriété dans cet état."
-#: ../libsvn_wc/props.c:427
+#: ../libsvn_wc/props.c:434
#, c-format
msgid ""
-"Trying to add new property '%s' with value '%s',\n"
-"but property already exists with value '%s'."
+"Trying to add new property '%s'\n"
+"but the property already exists.\n"
msgstr ""
-"Tentative de d'ajout d'une propriété '%s' de valeur '%s',\n"
-"mais elle existe déjà avec la valeur '%s'."
+"Tentative de d'ajout d'une nouvelle propriété '%s'\n"
+"mais elle existe déjà.\n"
-#: ../libsvn_wc/props.c:437
+#: ../libsvn_wc/props.c:443
#, c-format
msgid ""
-"Trying to create property '%s' with value '%s',\n"
-"but it has been locally deleted."
+"Trying to add new property '%s'\n"
+"but the property has been locally deleted.\n"
msgstr ""
-"Tentative de création de la propriété '%s' de valeur '%s',\n"
-"mais elle a été locallement effacée."
+"Tentative d'ajout d'une nouvelle propriété '%s',\n"
+"mais elle a été localement effacée.\n"
-#: ../libsvn_wc/props.c:451
+#: ../libsvn_wc/props.c:457
#, c-format
msgid ""
-"Trying to delete property '%s' with value '%s',\n"
-"but property has been locally added with value '%s'."
+"Trying to delete property '%s'\n"
+"but the property has been locally added.\n"
msgstr ""
-"Tentative d'effacement de la propriété '%s' de valeur '%s',\n"
-"mais elle a été ajoutée localement avec la valeur '%s'."
+"Tentative d'effacement de la propriété '%s',\n"
+"mais elle a été ajoutée localement.\n"
-#: ../libsvn_wc/props.c:468
+#: ../libsvn_wc/props.c:473
#, c-format
msgid ""
-"Trying to delete property '%s' with value '%s',\n"
-"but it has been modified from '%s' to '%s'."
+"Trying to delete property '%s'\n"
+"but the property has been locally modified.\n"
msgstr ""
-"Tentative d'effacement la propriété '%s' de valeur '%s',\n"
-"mais la valeur a été modifiée de '%s' en '%s'."
+"Tentative d'effacement de la propriété '%s',\n"
+"mais elle a été modifiée localement.\n"
-#: ../libsvn_wc/props.c:479
+#: ../libsvn_wc/props.c:483
#, c-format
msgid ""
-"Trying to delete property '%s' with value '%s',\n"
-"but property with value '%s' is locally deleted."
+"Trying to delete property '%s'\n"
+"but the property has been locally deleted and had a different value.\n"
msgstr ""
-"Tentative de création de la propriété '%s' de valeur '%s',\n"
-"mais la propriété de valeur '%s' a été locallement effacée."
+"Tentative d'effacement de la propriété '%s',\n"
+"mais elle a été effacée localement et avait une valeur différente.\n"
-#: ../libsvn_wc/props.c:491
+#: ../libsvn_wc/props.c:495
#, c-format
msgid ""
-"Trying to delete property '%s' with value '%s',\n"
-"but the local value is '%s'."
+"Trying to delete property '%s'\n"
+"but the local property value is different.\n"
msgstr ""
-"Tentative d'effacement de la propriété '%s' de valeur '%s',\n"
-"mais la valeur locale est '%s'."
+"Tentative d'effacement de la propriété '%s'\n"
+"mais la valeur locale est différente.\n"
-#: ../libsvn_wc/props.c:510
+#: ../libsvn_wc/props.c:514
#, c-format
msgid ""
-"Trying to change property '%s' from '%s' to '%s',\n"
-"but property already exists with value '%s'."
+"Trying to change property '%s'\n"
+"but the local property value conflicts with the incoming change.\n"
msgstr ""
-"Essai de modifier la propriété '%s' de '%s' à '%s',\n"
-"mais elle existe déjà avec la valeur '%s'."
+"Essai de modifier la propriété '%s'\n"
+"mais la valeur locale est en conflit la nouvelle valeur.\n"
-#: ../libsvn_wc/props.c:519
+#: ../libsvn_wc/props.c:522
#, c-format
msgid ""
-"Trying to change property '%s' from '%s' to '%s',\n"
-"but the property has been locally changed from '%s' to '%s'."
+"Trying to change property '%s'\n"
+"but the property has already been locally changed to a different value.\n"
msgstr ""
-"Tentative de modifier la propriété '%s' de '%s' en '%s',\n"
-"mais elle a déjà été localement modifiée de '%s' en '%s'."
+"Tentative de modifier la propriété '%s'\n"
+"mais elle a déjà été localement modifiée avec une valeur différente.\n"
-#: ../libsvn_wc/props.c:527
+#: ../libsvn_wc/props.c:529
#, c-format
msgid ""
-"Trying to change property '%s' from '%s' to '%s',\n"
-"but it has been locally deleted."
+"Trying to change property '%s'\n"
+"but the property has been locally deleted.\n"
msgstr ""
-"Tentative de modification de la propriété '%s' de '%s' en '%s',\n"
-"mais elle a été localement effacée."
+"Tentative de modification de la propriété '%s'\n"
+"mais elle a été localement effacée.\n"
-#: ../libsvn_wc/props.c:533
+#: ../libsvn_wc/props.c:535
#, c-format
msgid ""
-"Trying to change property '%s' from '%s' to '%s',\n"
-"but property has been locally added with value '%s'."
+"Trying to change property '%s'\n"
+"but the property has been locally added with a different value.\n"
msgstr ""
-"Tentative de modification de la propriété '%s' de '%s' à '%s',\n"
-"mais elle a été ajoutée localement avec la valeur '%s'."
+"Tentative de modification de la propriété '%s'\n"
+"mais elle a été ajoutée localement avec une valeur différente.\n"
-#: ../libsvn_wc/props.c:540
+#: ../libsvn_wc/props.c:541
#, c-format
msgid ""
-"Trying to change property '%s' from '%s' to '%s',\n"
-"but the property does not exist."
+"Trying to change property '%s'\n"
+"but the property does not exist locally.\n"
msgstr ""
-"Tentative de modificat de la propriété '%s' de '%s' en '%s',\n"
-"mais elle n'existe pas."
+"Tentative de modification de la propriété '%s'\n"
+"mais elle n'existe pas localement.\n"
-#: ../libsvn_wc/props.c:874
-msgid "Conflict callback violated API: returned no results."
-msgstr "L'appel pour gestion de conflit viole l'API : aucun résultat retourné."
+#: ../libsvn_wc/props.c:645
+msgid "<<<<<<< (local property value)"
+msgstr "<<<<<<< (valeur locale de la propriété)"
-#: ../libsvn_wc/props.c:914
-msgid "Conflict callback violated API: returned no merged file."
-msgstr "L'appel de gestion de conflit viole l'API : retourne \"pas de fusion\"."
+#: ../libsvn_wc/props.c:646
+msgid ">>>>>>> (incoming property value)"
+msgstr ">>>>>>> (valeur extérieure de la propriété)"
+
+#: ../libsvn_wc/props.c:667
+msgid "Local property value:\n"
+msgstr "Valeur locale de la propriété :\n"
+
+#: ../libsvn_wc/props.c:669 ../libsvn_wc/props.c:680
+msgid "Cannot display: property value is binary data\n"
+msgstr "Impossible d'afficher : valeur de la propriété binaire\n"
-#: ../libsvn_wc/props.c:1757 ../libsvn_wc/props.c:2008
+#: ../libsvn_wc/props.c:678
+msgid "Incoming property value:\n"
+msgstr "Valeur de propriété extérieure :\n"
+
+#: ../libsvn_wc/props.c:1597 ../libsvn_wc/props.c:2017
#, c-format
msgid "Property '%s' is an entry property"
msgstr "La propriété '%s' n'est pas une propriété d'entrée"
-#: ../libsvn_wc/props.c:1804 ../libsvn_wc/props.c:1811
+#: ../libsvn_wc/props.c:1644 ../libsvn_wc/props.c:1651
msgid "Failed to load properties"
msgstr "Échec au chargement des propriétés"
-#: ../libsvn_wc/props.c:1853
+#: ../libsvn_wc/props.c:1693
#, c-format
msgid "Cannot set '%s' on a directory ('%s')"
msgstr "Définition de '%s' sur un répertoire ('%s') impossible"
-#: ../libsvn_wc/props.c:1861
+#: ../libsvn_wc/props.c:1701
#, c-format
msgid "Cannot set '%s' on a file ('%s')"
msgstr "Définition de '%s' sur un fichier ('%s') impossible"
-#: ../libsvn_wc/props.c:1867
-#, c-format
-msgid "'%s' is not a file or directory"
-msgstr "'%s' n'est ni un fichier ni un répertoire"
-
-#: ../libsvn_wc/props.c:1931
+#: ../libsvn_wc/props.c:1771
#, c-format
msgid "File '%s' has binary mime type property"
msgstr "Le fichier '%s' a un type mime binaire"
-#: ../libsvn_wc/props.c:2000
+#: ../libsvn_wc/props.c:1847
+msgid "Failed to load current properties"
+msgstr "Échec au chargement des propriétés courantes"
+
+#: ../libsvn_wc/props.c:2044
#, c-format
msgid "Can't set properties on '%s': invalid status for updating properties."
msgstr "Impossible de définir les propriétés sur '%s', état incompatible avec cette opération."
-#: ../libsvn_wc/props.c:2063
-msgid "Failed to load current properties"
-msgstr "Échec au chargement des propriétés courantes"
-
-#: ../libsvn_wc/props.c:2208
+#: ../libsvn_wc/props.c:2131
#, c-format
msgid "Unrecognized line ending style '%s' for '%s'"
msgstr "Style de fin de ligne '%s' non reconnu pour '%s'"
-#: ../libsvn_wc/props.c:2267
+#: ../libsvn_wc/props.c:2191
#, c-format
msgid "Cannot set non-inheritable mergeinfo on a non-directory ('%s')"
msgstr "Impossible de mettre une information de fusion (mergeinfo) non héritable sur un objet qui n'est pas un répertoire ('%s')"
-#: ../libsvn_wc/props.c:2488 ../libsvn_wc/props.c:2564
-#, c-format
-msgid "Error parsing %s property on '%s': '%s'"
-msgstr "Erreur d'analyse de la propriété %s sur '%s' : '%s'"
-
-#: ../libsvn_wc/props.c:2533
-#, c-format
-msgid "Can't split line into components: '%s'"
-msgstr "Impossible de découper la ligne en composants : '%s'"
-
-#: ../libsvn_wc/props.c:2589
-#, c-format
-msgid "Invalid %s property on '%s': cannot use two absolute URLs ('%s' and '%s') in an external; one must be a path where an absolute or relative URL is checked out to"
-msgstr "Propriété %s invalide sur '%s' : on ne peut utiliser deux URLs absolues ('%s' et '%s') comme référence externe ; l'une doit être un chemin vers lequel une URL relative ou absolue va être extraite"
-
-#: ../libsvn_wc/props.c:2598 ../libsvn_wc/props.c:2606
-#, c-format
-msgid "Invalid %s property on '%s': cannot use a URL '%s' as the target directory for an external definition"
-msgstr "Propriété %s invalide sur '%s' : on ne peut utiliser une URL '%s' comme répertoire destination d'une référence externe"
-
-#: ../libsvn_wc/props.c:2643
-#, c-format
-msgid "Invalid %s property on '%s': target '%s' is an absolute path or involves '..'"
-msgstr "Propriété %s invalide sur '%s' : la cible '%s' est un chemin absolu ou utilise '..'"
-
-#: ../libsvn_wc/questions.c:203
-#, c-format
-msgid ""
-"Checksum mismatch indicates corrupt text base for file: '%s':\n"
-" expected: %s\n"
-" actual: %s\n"
-msgstr ""
-"Sommes de contrôle différentes indiquant une base texte corrompue : '%s'\n"
-" attendue : %s\n"
-" obtenue : %s\n"
-
-#: ../libsvn_wc/relocate.c:110
+#: ../libsvn_wc/relocate.c:111
#, c-format
msgid "Cannot relocate '%s' as it is not the root of a working copy"
msgstr "Impossible de relocaliser '%s' car ce n'est pas la racine de la copie de travail"
-#: ../libsvn_wc/relocate.c:117
+#: ../libsvn_wc/relocate.c:118
#, c-format
msgid "Cannot relocate '%s' as it is not the root of a working copy; try relocating '%s' instead"
msgstr "Impossible de relocaliser '%s' car ce n'est pas la racine de la copie de travail ; Essayer plutôt de relocaliser '%s'"
-#: ../libsvn_wc/relocate.c:134
+#: ../libsvn_wc/relocate.c:136
msgid "Cannot relocate a single file"
msgstr "Impossible de relocaliser un seul fichier"
-#: ../libsvn_wc/relocate.c:142
+#: ../libsvn_wc/relocate.c:144
#, c-format
msgid "Invalid source URL prefix: '%s' (does not overlap target's URL '%s')"
msgstr "Préfix de l'URL source invalide : '%s' (pas de partie commune avec l'URL cible '%s')"
-#: ../libsvn_wc/relocate.c:152
+#: ../libsvn_wc/relocate.c:154
#, c-format
msgid "Invalid relocation destination: '%s' (not a URL)"
msgstr "URL destination de relocalisation invalide : '%s' (pas une URL)"
-#: ../libsvn_wc/relocate.c:159
+#: ../libsvn_wc/relocate.c:161
#, c-format
msgid "Invalid relocation destination: '%s' (does not point to target)"
msgstr "Destination de relocalisation invalide : '%s' (n'est pas dans la cible)"
-#: ../libsvn_wc/tree_conflicts.c:130
+#: ../libsvn_wc/tree_conflicts.c:135
msgid "Unknown enumeration value in tree conflict description"
msgstr "Valeur énumérée inconnue dans une description de conflit d'arborescence"
-#: ../libsvn_wc/tree_conflicts.c:152
+#: ../libsvn_wc/tree_conflicts.c:159
msgid "Invalid version info in tree conflict description"
msgstr "Information de version invalide dans un conflit d'arborescence"
-#: ../libsvn_wc/tree_conflicts.c:210
-msgid "Invalid conflict info in tree conflict description"
-msgstr "Information de conflit invalide dans un conflit d'arborescence"
+#: ../libsvn_wc/tree_conflicts.c:216
+#, c-format
+msgid "Invalid conflict info '%s' in tree conflict description"
+msgstr "Information de conflit '%s' invalide dans un conflit d'arborescence"
-#: ../libsvn_wc/tree_conflicts.c:219
+#: ../libsvn_wc/tree_conflicts.c:227
msgid "Empty 'victim' field in tree conflict description"
msgstr "Champ 'victim vide dans une description de conflit d'arborescence"
-#: ../libsvn_wc/tree_conflicts.c:227
+#: ../libsvn_wc/tree_conflicts.c:235
msgid "Invalid 'node_kind' field in tree conflict description"
msgstr "Champ 'node_kind' invalide dans une destination de conflit d'arborescence"
-#: ../libsvn_wc/tree_conflicts.c:404
+#: ../libsvn_wc/tree_conflicts.c:422
#, c-format
msgid "Attempt to add tree conflict that already exists at '%s'"
msgstr "Tentative d'ajout d'un conflit existant déjà à '%s'"
-#: ../libsvn_wc/update_editor.c:1027
+#: ../libsvn_wc/update_editor.c:948
#, c-format
msgid ""
"Checksum mismatch while updating '%s':\n"
@@ -6999,51 +6983,31 @@ msgstr ""
" attendue : %s\n"
" obtenue : %s\n"
-#: ../libsvn_wc/update_editor.c:1143
+#: ../libsvn_wc/update_editor.c:1069
#, c-format
msgid "Path '%s' is not in the working copy"
msgstr "Le chemin '%s' n'est pas dans la copie de travail"
-#: ../libsvn_wc/update_editor.c:2154
+#: ../libsvn_wc/update_editor.c:1996
#, c-format
msgid "Failed to add directory '%s': object of the same name as the administrative directory"
msgstr "Échec à l'ajout du répertoire '%s' : objet du même nom que le répertoire d'administration"
-#: ../libsvn_wc/update_editor.c:2279
-#, c-format
-msgid "Failed to add directory '%s': a separate working copy with the same name already exists"
-msgstr "Échec de l'ajout du répertoire '%s' : un copie de travaille distincte de même nom existe déjà"
-
-#: ../libsvn_wc/update_editor.c:2288
-#, c-format
-msgid "Switched directory '%s' does not match expected URL '%s'"
-msgstr "Le répertoire réaiguillé (switch) '%s' différe de l'URL attendue '%s'"
-
-#: ../libsvn_wc/update_editor.c:2314
-#, c-format
-msgid "Failed to add directory '%s': a non-directory object of the same name already exists"
-msgstr "Échec de l'ajout du répertoire '%s' : un objet de ce nom existe déjà"
-
-#: ../libsvn_wc/update_editor.c:2770
+#: ../libsvn_wc/update_editor.c:2661
msgid "Couldn't do property merge"
msgstr "Fusion de propriété impossible"
-#: ../libsvn_wc/update_editor.c:2949
+#: ../libsvn_wc/update_editor.c:3062
#, c-format
msgid "Failed to mark '%s' absent: item of the same name is already scheduled for addition"
msgstr "Échec du marquage de '%s' comme absent : un objet de même nom est déjà en attente pour ajout"
-#: ../libsvn_wc/update_editor.c:3036
+#: ../libsvn_wc/update_editor.c:3149
#, c-format
msgid "Failed to add file '%s': object of the same name as the administrative directory"
msgstr "Échec à l'ajout du fichier '%s' : objet de même nom que le répertoire d'administration"
-#: ../libsvn_wc/update_editor.c:3163
-#, c-format
-msgid "Switched file '%s' does not match expected URL '%s'"
-msgstr "Le fichier réaiguillé (switch) '%s' différe de l'URL attendue '%s'"
-
-#: ../libsvn_wc/update_editor.c:3419
+#: ../libsvn_wc/update_editor.c:3608
#, c-format
msgid ""
"Checksum mismatch for '%s':\n"
@@ -7054,169 +7018,276 @@ msgstr ""
" attendue : %s\n"
" obtenue : %s\n"
-#: ../libsvn_wc/update_editor.c:4764
-#, c-format
-msgid "Unrecognized node kind: '%s'"
-msgstr "Type de nœud non reconnu : '%s'"
-
-#: ../libsvn_wc/update_editor.c:5432
+#: ../libsvn_wc/update_editor.c:5492
#, c-format
msgid "Node '%s' exists."
msgstr "Le nœud '%s' existe déjà."
-#: ../libsvn_wc/update_editor.c:5485
+#: ../libsvn_wc/update_editor.c:5546
#, c-format
msgid "Copyfrom-url '%s' has different repository root than '%s'"
msgstr "L'URL source '%s' concerne un dépôt différent de '%s'"
-#: ../libsvn_wc/upgrade.c:254
+#: ../libsvn_wc/upgrade.c:258
#, c-format
msgid "Missing end of line in wcprops file for '%s'"
msgstr "Fin de ligne manquante dans le fichier wcprops pour '%s'"
-#: ../libsvn_wc/upgrade.c:601
+#: ../libsvn_wc/upgrade.c:634
#, c-format
msgid "Working copy '%s' can't be upgraded because the repository root is not available and can't be retrieved"
msgstr "La copie de travail '%s' ne peut pas être mise à jour (upgrade) parce que la racine du dépôt n'est pas disponible et ne peut-être retrouvée"
-#: ../libsvn_wc/upgrade.c:608
+#: ../libsvn_wc/upgrade.c:641
#, c-format
msgid "Working copy '%s' can't be upgraded because the repository uuid is not available and can't be retrieved"
msgstr "La copie de travail '%s' ne peut pas être mise à jour (upgrade) parce que l'uuid du dépôt n'est pas disponible et ne peut-être retrouvée"
-#: ../libsvn_wc/upgrade.c:615
+#: ../libsvn_wc/upgrade.c:648
#, c-format
msgid "Working copy '%s' can't be upgraded because it doesn't have a url"
msgstr "La copie de travail '%s' ne peut être mise à jour (upgrade) parce qu'elle n'a pas d'URL"
-#: ../libsvn_wc/upgrade.c:660
+#: ../libsvn_wc/upgrade.c:693
msgid "Error parsing tree conflict skel"
msgstr "Erreur de syntaxe dans le squelette de conflit d'arborescence"
-#: ../libsvn_wc/upgrade.c:1123
+#: ../libsvn_wc/upgrade.c:1177
#, c-format
msgid "The working copy at '%s' is format 22 with WORKING nodes; use a format 22 client to diff/revert before using this client"
msgstr "La copie de travail à '%s' est au format 22 avec des nœuds de travail ; utiliser un client compatible avec le format 22 pour différencier/annuler (diff/revert) avant d'utiliser ce client."
-#: ../libsvn_wc/upgrade.c:1188
-msgid "Cannot upgrade with existing logs; please run 'svn cleanup' with Subversion 1.6"
-msgstr "Impossible de mettre à jour avec les logs existants ; Exécuter 'svn cleanup' avec Subversion 1.6"
+#: ../libsvn_wc/upgrade.c:1221
+#, c-format
+msgid "The working copy at '%s' is format 26 with conflicts; use a format 26 client to resolve before using this client"
+msgstr "La copie de travail à '%s' est au format 26 avec des conflits ; utiliser un client compatible avec le format 26 pour les résoudre avant d'utiliser ce client."
+
+#: ../libsvn_wc/upgrade.c:1613
+msgid "Cannot upgrade with existing logs; run a cleanup operation on this working copy using a client version which is compatible with this working copy's format (such as the version you are upgrading from), then retry the upgrade with the current version"
+msgstr "Impossible de mettre à jour avec des logs ; faire une opéraiton de nettoyage (cleanup) sur cette copie de travail avec un client compatible avec sont format (en utilisant par exemple la version initiale de cette mise à jour), puis réessayer cette mise à jour"
+
+#: ../libsvn_wc/upgrade.c:1683
+msgid "This working copy is corrupt and cannot be upgraded. Please check out a new working copy."
+msgstr "Cette copie de travail est corrompue et ne peut pas être mise à jour. Extraire une nouvelle copie de travail."
-#: ../libsvn_wc/upgrade.c:1337
+#: ../libsvn_wc/upgrade.c:1735
msgid "(unreleased development version)"
msgstr "(version de développement non distribuée)"
-#: ../libsvn_wc/upgrade.c:1351
+#: ../libsvn_wc/upgrade.c:1751
#, c-format
msgid "Working copy '%s' is too old (format %d, created by Subversion %s)"
msgstr "Le format de la copie de travail '%s' est trop ancien (%d, créé pas subversion %s)"
-#: ../libsvn_wc/upgrade.c:1361
+#: ../libsvn_wc/upgrade.c:1761
#, c-format
msgid "Working copy '%s' is an old development version (format %d); to upgrade it, use a format 18 client, then use 'tools/dev/wc-ng/bump-to-19.py', then use the current client"
msgstr "La copie de travail '%s' est dans une version de développement ancienne (format %d) ; pour mettre à jour, utiliser un client au format 18, puis utiliser 'tools/dev/wc-ng/bump-to-19.py', puis utiliser le client actuel"
-#: ../libsvn_wc/upgrade.c:1582
+#: ../libsvn_wc/upgrade.c:1980
#, c-format
-msgid "Cannot upgrade '%s' as it is not a pre-1.7 working copy root"
+msgid "Can't upgrade '%s' as it is not a pre-1.7 working copy directory"
msgstr "Impossible de mettre à jour '%s' car ce n'est pas une racine de copie de travail pre-1.7"
-#: ../libsvn_wc/wc_db.c:454
+#: ../libsvn_wc/upgrade.c:2029
+#, c-format
+msgid "Can't upgrade '%s' as it is not a pre-1.7 working copy root, the root is '%s'"
+msgstr "Impossible de mettre à jour '%s' car ce n'est pas une racine de copie de travail pre-1.7, la racine est '%s'"
+
+#: ../libsvn_wc/wc_db.c:519
#, c-format
msgid "No REPOSITORY table entry for id '%ld'"
msgstr "Pas d'entrée pour l'id '%ld' dans la table REPOSITORY"
-#: ../libsvn_wc/wc_db.c:1350 ../libsvn_wc/wc_db.c:1396
+#: ../libsvn_wc/wc_db.c:818
#, c-format
-msgid "The node '%s' is not in a workingcopy."
+msgid "The file '%s' has no checksum."
+msgstr "Le fichier '%s' n'a pas de somme de contrôle."
+
+#: ../libsvn_wc/wc_db.c:1653
+#, c-format
+msgid "The node '%s' is not in a working copy."
msgstr "Le nœud '%s' n'est pas dans une copie de travail"
-#: ../libsvn_wc/wc_db.c:1908 ../libsvn_wc/wc_db.c:4489
+#: ../libsvn_wc/wc_db.c:2421 ../libsvn_wc/wc_db.c:2797
+#: ../libsvn_wc/wc_db.c:8340
#, c-format
msgid "The node '%s' has a corrupt checksum value."
msgstr "Le nœud '%s' a une somme de controle corrompue."
-#: ../libsvn_wc/wc_db.c:2447 ../libsvn_wc/wc_db.c:2612
+#: ../libsvn_wc/wc_db.c:3398
#, c-format
-msgid "Cannot copy '%s' excluded by server"
-msgstr "Impossible de copier '%s' exclu par le serveur"
+msgid "The node '%s' is not an external."
+msgstr "Le nœud '%s' n'est pas dans une référence externe"
-#: ../libsvn_wc/wc_db.c:2453
-#, c-format
-msgid "Cannot handle status of '%s'"
-msgstr "Impossible de traiter l'état de '%s'"
-
-#: ../libsvn_wc/wc_db.c:3166
+#: ../libsvn_wc/wc_db.c:5134
#, c-format
msgid "Can't store properties for '%s' in '%s'."
msgstr "Impossible de stocker les permissions pour '%s' dans '%s'"
-#: ../libsvn_wc/wc_db.c:4581
+#: ../libsvn_wc/wc_db.c:6028 ../libsvn_wc/wc_db.c:6058
+#, c-format
+msgid "Can't revert '%s' without reverting children"
+msgstr "Impossible d'annuler les modifications (revert) de '%s' sans annuler les modification de ces descendants"
+
+#: ../libsvn_wc/wc_db.c:6153
+#, c-format
+msgid "Can't revert '%s' without reverting parent"
+msgstr "Impossible d'annuler les modifications (revert) de '%s' sans annuler celle ce son parent"
+
+#: ../libsvn_wc/wc_db.c:6248
+#, c-format
+msgid "Unsupported depth for revert of '%s'"
+msgstr "Profondeur d'annulation (revert) non supportée '%s'"
+
+#: ../libsvn_wc/wc_db.c:6923
+#, c-format
+msgid "Cannot delete '%s' as '%s' is excluded by server"
+msgstr "Impossible de copier '%s' car '%s' est exclu par le serveur"
+
+#: ../libsvn_wc/wc_db.c:6934
+#, c-format
+msgid "Cannot delete '%s' as it is excluded by server"
+msgstr "Impossible d'effacer '%s' car exclu par le serveur"
+
+#: ../libsvn_wc/wc_db.c:6941
+#, c-format
+msgid "Cannot delete '%s' as it is excluded"
+msgstr "Impossible d'effacer '%s' car il est exclu"
+
+#: ../libsvn_wc/wc_db.c:7716
#, c-format
msgid "Corrupt data for '%s'"
msgstr "Donnée corrompue pour '%s'"
-#: ../libsvn_wc/wc_db.c:6011
+#: ../libsvn_wc/wc_db.c:8027
+#, c-format
+msgid "The node '%s' comes from unexpected repository '%s', expected '%s'; if this node is a file external using the correct URL in the external definition can fix the problem, see issue #4087"
+msgstr "Le nœud '%s' provient du dépôt '%s' au lieu de '%s' ; Si ce nœud est un fichier externe l'utilisation de l'URL correcte dans la définition peut résoudre le problème, cf problème #4087"
+
+#: ../libsvn_wc/wc_db.c:8450
+#, c-format
+msgid "The node '%s' is not in working copy '%s'"
+msgstr "Le nœud '%s' n'est pas dans une copie de travail '%s'"
+
+#: ../libsvn_wc/wc_db.c:8482
+#, c-format
+msgid "The node '%s' is not installable"
+msgstr "NÅ“ud '%s' n'est pas installable."
+
+#: ../libsvn_wc/wc_db.c:10470
#, c-format
msgid "Expected node '%s' to be added."
msgstr "Le Nœud '%s' doit être ajouté"
-#: ../libsvn_wc/wc_db.c:6345
+#: ../libsvn_wc/wc_db.c:10822
+#, c-format
+msgid "The base node '%s' was not found."
+msgstr "Nœud de base '%s' non trouvé."
+
+#: ../libsvn_wc/wc_db.c:11064
#, c-format
msgid "Expected node '%s' to be deleted."
msgstr "Le Nœud '%s' doit être effacé"
-#: ../libsvn_wc/wc_db.c:6622
+#: ../libsvn_wc/wc_db.c:11401
#, c-format
msgid "The properties of '%s' are in an indeterminate state and cannot be upgraded. See issue #2530."
msgstr "Les propriétés de '%s' sont dans un état indéterminé et ne peuvent être mises à jour. Voir le problème #2530."
-#: ../libsvn_wc/wc_db.c:6634
+#: ../libsvn_wc/wc_db.c:11413
#, c-format
msgid "Insufficient NODES rows for '%s'"
msgstr "ligne NODES insuffisante pour '%s'"
-#: ../libsvn_wc/wc_db.c:6708
+#: ../libsvn_wc/wc_db.c:11560
#, c-format
msgid "Repository '%s' not found in the database"
msgstr "Dépôt '%s' non trouvé dans la base de données"
-#: ../libsvn_wc/wc_db.c:7520 ../libsvn_wc/wc_db.c:7567
+#: ../libsvn_wc/wc_db.c:12460 ../libsvn_wc/wc_db.c:12508
#, c-format
msgid "'%s' is already locked."
msgstr "'%s' est déjà verrouillé"
-#: ../libsvn_wc/wc_db.c:7524 ../libsvn_wc/wc_db.c:7575
+#: ../libsvn_wc/wc_db.c:12465 ../libsvn_wc/wc_db.c:12516
#, c-format
msgid "Working copy '%s' locked."
msgstr "Copie de travail '%s' verrouillée."
-#: ../libsvn_wc/wc_db.c:7650
+#: ../libsvn_wc/wc_db.c:12589
#, c-format
msgid "'%s' is already locked via '%s'."
msgstr "'%s' est déjà verrouillé via '%s'."
-#: ../libsvn_wc/wc_db.c:7762
+#: ../libsvn_wc/wc_db.c:12720
#, c-format
msgid "Working copy not locked at '%s'."
msgstr "Copie de travail non verrouillée à '%s'."
-#: ../libsvn_wc/wc_db.c:8149
+#: ../libsvn_wc/wc_db.c:13108
#, c-format
msgid "Modification of '%s' already exists"
msgstr "La modification de '%s' existe déjà"
-#: ../libsvn_wc/wc_db.c:8197
+#. If EXPRESSION is false, cause the caller to return an SVN_ERR_WC_CORRUPT
+#. * error, showing EXPRESSION and the caller's LOCAL_RELPATH in the message.
+#: ../libsvn_wc/wc_db.c:13791
#, c-format
-msgid "'%s' has no BASE_NODE"
-msgstr "'%s' n'a pas de BASE_NODE"
+msgid "database inconsistency at local_relpath='%s' verifying expression '%s'"
+msgstr "incohérence de la base de données à local_relpath='%s' en vérifiant l'expression '%s'"
-#: ../libsvn_wc/wc_db_pdh.c:234
+#: ../libsvn_wc/wc_db_pristine.c:124
+#, c-format
+msgid "Pristine text not found"
+msgstr "Texte de référence non trouvé"
+
+#: ../libsvn_wc/wc_db_pristine.c:200
+#, c-format
+msgid "Pristine text '%s' not present"
+msgstr "Le texte de référence '%s' n'existe pas"
+
+#: ../libsvn_wc/wc_db_pristine.c:233
+#, c-format
+msgid "Can't read '%s' from pristine store because no checksum supplied"
+msgstr "Impossible de lire '%s' du stockage de référence parce qu'aucune somme de contrôle n'est fournie"
+
+#: ../libsvn_wc/wc_db_pristine.c:346
+#, c-format
+msgid "New pristine text '%s' has different size: %ld versus %ld"
+msgstr "Le texte de référence '%s' a une taille différente : %ld contre %ld"
+
+#: ../libsvn_wc/wc_db_pristine.c:476 ../libsvn_wc/wc_db_pristine.c:609
+#, c-format
+msgid "The pristine text with checksum '%s' was not found"
+msgstr "Le texte de référence avec la somme de contrôle '%s' n'a pas été trouvé"
+
+#: ../libsvn_wc/wc_db_pristine.c:515
+#, c-format
+msgid "The pristine text with MD5 checksum '%s' was not found"
+msgstr "Le texte de référence avec la somme MD5 '%s' n'a pas été trouvé"
+
+#: ../libsvn_wc/wc_db_pristine.c:946
+#, c-format
+msgid "The pristine text with checksum '%s' was found in the DB but not on disk"
+msgstr "Le texte de référence avec la somme de contrôle '%s' a été trouvé dans la base de données mais pas sur le disque"
+
+#: ../libsvn_wc/wc_db_util.c:69
+#, c-format
+msgid "Missing a row in WCROOT."
+msgstr "Ligne manquante dans WCROOT."
+
+#: ../libsvn_wc/wc_db_util.c:134
+#, c-format
+msgid "Working copy database '%s' not found"
+msgstr "La base de donnée de la copie de travail '%s' n'a pas été trouvée"
+
+#: ../libsvn_wc/wc_db_wcroot.c:257
#, c-format
msgid "Working copy format of '%s' is too old (%d); please check out your working copy again"
msgstr "Le format de la copie de travail '%s' est trop ancien (%d) ; extraire une nouvelle copie de travail"
-#: ../libsvn_wc/wc_db_pdh.c:244
+#: ../libsvn_wc/wc_db_wcroot.c:267
#, c-format
msgid ""
"This client is too old to work with the working copy at\n"
@@ -7228,105 +7299,116 @@ msgstr ""
"Vous avez besoin d'une nouvelle version du client Subversion. Voir pour\n"
"les détails : http://subversion.apache.org/faq.html#working-copy-format-change\n"
-#: ../libsvn_wc/wc_db_pdh.c:265
+#: ../libsvn_wc/wc_db_wcroot.c:288
msgid "Cleanup with an older 1.7 client before upgrading with this client"
msgstr "Nettoyer (cleanup) avec une version antérieure à 1.7 avant de mettre à jour avec ce client."
-#: ../libsvn_wc/wc_db_pdh.c:526
+#: ../libsvn_wc/wc_db_wcroot.c:592
#, c-format
msgid "Missing a row in WCROOT for '%s'."
msgstr "Ligne manquante dans WCROOT pour '%s'"
-#: ../libsvn_wc/wc_db_pdh.c:668
+#: ../libsvn_wc/wc_db_wcroot.c:745
#, c-format
msgid "'%s' is not a working copy root"
msgstr "'%s' n'est pas la racine d'une copie de travail"
-#: ../libsvn_wc/wc_db_pristine.c:142
+#: ../libsvn_wc/workqueue.c:527
#, c-format
-msgid "Pristine text not found"
-msgstr "Texte de référence non trouvé"
-
-#: ../libsvn_wc/wc_db_pristine.c:329
-#, c-format
-msgid "The pristine text with checksum '%s' was not found"
-msgstr "Le texte de référence avec la somme de contrôle '%s' n'a pas été trouvé"
-
-#: ../libsvn_wc/wc_db_pristine.c:369
-#, c-format
-msgid "The pristine text with MD5 checksum '%s' was not found"
-msgstr "Le texte de référence avec la somme MD5 '%s' n'a pas été trouvé"
-
-#: ../libsvn_wc/wc_db_pristine.c:555
-#, c-format
-msgid "The pristine text with checksum '%s' was found in the DB or on disk but not both"
-msgstr "Le texte de référence avec la somme de contrôle '%s' a été trouvé dans la base de données ou sur le disque mais pas les deux"
-
-#: ../libsvn_wc/wc_db_util.c:68
-#, c-format
-msgid "Missing a row in WCROOT."
-msgstr "Ligne manquante dans WCROOT."
+msgid "Can't install '%s' from pristine store, because no checksum is recorded for this file"
+msgstr "Impossible d'installer '%s' à partir du stockage de référence, parce qu'aucune somme de contrôle n'est enregistrée pour ce fichier"
-#: ../libsvn_wc/workqueue.c:338
-#, c-format
-msgid "Error restoring text for '%s'"
-msgstr "Erreur en restaurant le texte pour '%s'"
-
-#: ../libsvn_wc/workqueue.c:1284
-#, c-format
-msgid "Error processing post-commit work for '%s'"
-msgstr "Erreur du script d'après propagation (post-commit) pour '%s'"
-
-#: ../libsvn_wc/workqueue.c:2193
+#: ../libsvn_wc/workqueue.c:1435
#, c-format
msgid "Unrecognized work item in the queue associated with '%s'"
msgstr "Élément inconnu dans la file de travaux associée à '%s'"
-#: ../svn/blame-cmd.c:302 ../svn/list-cmd.c:232
+#: ../svn/add-cmd.c:100
+msgid "Could not add all targets because some targets don't exist"
+msgstr "Impossible d'ajouter toutes les cibles car certaines n'existent pas"
+
+#: ../svn/add-cmd.c:104
+msgid "Could not add all targets because some targets are already versioned"
+msgstr "Impossible d'ajouter toutes les cibles car certaines sont déjà versionnées"
+
+#: ../svn/blame-cmd.c:303 ../svn/list-cmd.c:242
msgid "'verbose' option invalid in XML mode"
msgstr "Option 'verbose' invalide en mode XML"
-#: ../svn/blame-cmd.c:314 ../svn/info-cmd.c:525 ../svn/list-cmd.c:244
-#: ../svn/status-cmd.c:279
+#: ../svn/blame-cmd.c:315 ../svn/info-cmd.c:619 ../svn/list-cmd.c:254
+#: ../svn/status-cmd.c:302
msgid "'incremental' option only valid in XML mode"
msgstr "Option 'incremental' valide seulement en mode XML"
-#: ../svn/blame-cmd.c:377
+#: ../svn/blame-cmd.c:378
#, c-format
msgid "Skipping binary file: '%s'\n"
msgstr "Omission du fichier binaire : '%s'\n"
-#: ../svn/checkout-cmd.c:131 ../svn/switch-cmd.c:145
+#: ../svn/blame-cmd.c:412
+msgid "Could not perform blame on all targets because some targets don't exist"
+msgstr "Impossible d'exécuter \"blame\" sur toutes les cibles car certaines n'existent pas"
+
+#: ../svn/cat-cmd.c:102
+msgid "Could not cat all targets because some targets don't exist"
+msgstr "Impossible d'afficher (cat) toutes les cibles car certaines n'existent pas"
+
+#: ../svn/cat-cmd.c:106
+msgid "Could not cat all targets because some targets are not versioned"
+msgstr "Impossible d'afficher (cat) toutes les cibles car certaines n'existent pas"
+
+#: ../svn/cat-cmd.c:110
+msgid "Could not cat all targets because some targets are directories"
+msgstr "Impossible d'afficher (cat) toutes les cibles car certaines sont des répertoires"
+
+#: ../svn/changelist-cmd.c:135
+msgid "Could not set changelists on all targets because some targets don't exist"
+msgstr "Impossible de définir la \"changelist\" pour toutes les cibles car certaines n'existent pas"
+
+#: ../svn/changelist-cmd.c:140
+msgid "Could not set changelists on all targets because some targets are not versioned"
+msgstr "Impossible de définir la \"changelist\" toutes les cibles car certaines ne sont pas versionnées"
+
+#: ../svn/checkout-cmd.c:133 ../svn/switch-cmd.c:138
#, c-format
msgid "'%s' does not appear to be a URL"
msgstr "'%s' ne semble pas être une URL"
-#: ../svn/commit-cmd.c:105
+#: ../svn/cleanup-cmd.c:92
+#, c-format
+msgid "Working copy locked; try running 'svn cleanup' on the root of the working copy ('%s') instead."
+msgstr "Copie de travail verrouillée ; Essayer plutôt 'svn cleanup' à la racine de la copie de travail ('%s')."
+
+#: ../svn/commit-cmd.c:79
#, c-format
-msgid "svn: warning: The depth of this commit is '%s', but copied directories will regardless be committed with depth '%s'. You must remove unwanted children of those directories in a separate commit.\n"
-msgstr "svn : attention : la profondeur de cette propagation (commit) est '%s', mais les répertoires copiés le seront de toute façon à la profondeur %s. Vous devez retirer les fils non souhaités dans une propagation (commit) séparé.\n"
+msgid "svn: The depth of this commit is '%s', but copies are always performed recursively in the repository.\n"
+msgstr "svn: La profondeur de cette propagation (commit) est '%s', mais les copies sont toujours effectuées récursivement dans le dépôt.\n"
+
+#: ../svn/commit-cmd.c:115
+msgid "Commit targets must be local paths"
+msgstr "Les cibles d'une propagation (commit) doivent être des chemins locaux"
-#: ../svn/conflict-callbacks.c:158
+#: ../svn/conflict-callbacks.c:162
msgid "||||||| ORIGINAL"
msgstr "||||||| ORIGINAL"
-#: ../svn/conflict-callbacks.c:159
+#: ../svn/conflict-callbacks.c:163
msgid "<<<<<<< MINE (select with 'mc')"
msgstr "<<<<<<< MIEN (sélectionner avec 'mc')"
-#: ../svn/conflict-callbacks.c:160
+#: ../svn/conflict-callbacks.c:164
msgid ">>>>>>> THEIRS (select with 'tc')"
msgstr ">>>>>>> AUTRES (sélectionner avec 'tc')"
-#: ../svn/conflict-callbacks.c:192
+#: ../svn/conflict-callbacks.c:198 ../svn/file-merge.c:495
msgid "No editor found."
msgstr "Aucun éditeur n'a été trouvé."
-#: ../svn/conflict-callbacks.c:199
+#: ../svn/conflict-callbacks.c:207 ../svn/file-merge.c:507
msgid "Error running editor."
msgstr "Erreur à l'exécution de l'éditeur."
-#: ../svn/conflict-callbacks.c:209
+#: ../svn/conflict-callbacks.c:217
#, c-format
msgid ""
"Invalid option; there's no merged version to edit.\n"
@@ -7335,63 +7417,63 @@ msgstr ""
"Option invalide : il n'y a pas de version fusionnée à éditer.\n"
"\n"
-#: ../svn/conflict-callbacks.c:239
-msgid "No merge tool found.\n"
-msgstr "Aucun outil de fusion n'a été trouvé.\n"
+#: ../svn/conflict-callbacks.c:248
+msgid "No merge tool found, try '(m) merge' instead.\n"
+msgstr "Aucun outil de fusion n'a été trouvé, essayer '(m) merge' à la place.\n"
-#: ../svn/conflict-callbacks.c:246
-msgid "Error running merge tool."
-msgstr "Erreur à l'exécution de l'outil de fusion."
+#: ../svn/conflict-callbacks.c:256
+msgid "Error running merge tool, try '(m) merge' instead."
+msgstr "Erreur à l'exécution de l'outil de fusion, essayer '(m) merge' à la place."
-#: ../svn/conflict-callbacks.c:316
+#: ../svn/conflict-callbacks.c:329
msgid "No editor found; leaving all conflicts."
msgstr "Pas d'éditeur, tous les conflits sont laissés en l'état."
-#: ../svn/conflict-callbacks.c:325
+#: ../svn/conflict-callbacks.c:338
msgid "Error running editor; leaving all conflicts."
msgstr "Erreur à l'exécution de l'éditeur, tous les conflits sont laissés en l'état."
-#: ../svn/conflict-callbacks.c:361
+#: ../svn/conflict-callbacks.c:374
msgid "No merge tool found; leaving all conflicts."
msgstr "Pas d'outils de fusion, les conflits sont laissés en l'état."
-#: ../svn/conflict-callbacks.c:370
+#: ../svn/conflict-callbacks.c:383
msgid "Error running merge tool; leaving all conflicts."
msgstr "Erreur de l'outils de fusion, les conflits sont laissés en l'état."
-#: ../svn/conflict-callbacks.c:414
+#: ../svn/conflict-callbacks.c:427
#, c-format
-msgid "Conflict discovered in '%s'.\n"
-msgstr "Conflit découvert dans '%s'.\n"
+msgid "Conflict discovered in file '%s'.\n"
+msgstr "Conflit découvert dans le fichier '%s'.\n"
-#: ../svn/conflict-callbacks.c:419
+#: ../svn/conflict-callbacks.c:434
#, c-format
msgid "Conflict for property '%s' discovered on '%s'.\n"
msgstr "Conflit sur la propriété '%s' découvert sur '%s'.\n"
-#: ../svn/conflict-callbacks.c:436
+#: ../svn/conflict-callbacks.c:454
#, c-format
msgid "They want to delete the property, you want to change the value to '%s'.\n"
msgstr "Ils veulent effacer la propriété, vous voulez en modifier la valeur en '%s'.\n"
-#: ../svn/conflict-callbacks.c:445
+#: ../svn/conflict-callbacks.c:464
#, c-format
msgid "They want to change the property value to '%s', you want to delete the property.\n"
msgstr "Ils veulent modifier la valeur de la propriété en '%s, vous voulez l'effacer.\n"
-#: ../svn/conflict-callbacks.c:467
+#: ../svn/conflict-callbacks.c:486
msgid "Select: (p) postpone"
msgstr "Sélectionner : (p) report"
-#: ../svn/conflict-callbacks.c:472
-msgid ", (df) diff-full, (e) edit"
-msgstr ", (df) diff entier, (e) édite"
+#: ../svn/conflict-callbacks.c:491
+msgid ", (df) diff-full, (e) edit, (m) merge"
+msgstr ", (df) diff entier, (e) édite, (m) fusion (merge)"
-#: ../svn/conflict-callbacks.c:476 ../svn/conflict-callbacks.c:489
+#: ../svn/conflict-callbacks.c:495 ../svn/conflict-callbacks.c:508
msgid ", (r) resolved"
msgstr ", (r) résolu"
-#: ../svn/conflict-callbacks.c:482
+#: ../svn/conflict-callbacks.c:501
msgid ""
",\n"
" (mc) mine-conflict, (tc) theirs-conflict"
@@ -7399,7 +7481,7 @@ msgstr ""
",\n"
" (mc) mes conflits, (tc) autres conflits"
-#: ../svn/conflict-callbacks.c:492
+#: ../svn/conflict-callbacks.c:511
msgid ""
",\n"
" (mf) mine-full, (tf) theirs-full"
@@ -7407,11 +7489,11 @@ msgstr ""
",\n"
" (mf) mien complet, (tf) autre complet"
-#: ../svn/conflict-callbacks.c:499
+#: ../svn/conflict-callbacks.c:518
msgid "(s) show all options: "
msgstr "(s) affiche toutes les options : "
-#: ../svn/conflict-callbacks.c:508
+#: ../svn/conflict-callbacks.c:527
#, c-format
msgid ""
"\n"
@@ -7427,6 +7509,7 @@ msgid ""
" (tf) theirs-full - accept their version of entire file (same)\n"
"\n"
" (p) postpone - mark the conflict to be resolved later\n"
+" (m) merge - use internal merge tool to resolve conflict\n"
" (l) launch - launch external tool to resolve conflict\n"
" (s) show all - show this list\n"
"\n"
@@ -7445,46 +7528,47 @@ msgstr ""
" (tf) autre complet - prends la version du dépôt (perds mes éditions)\n"
"\n"
" (p) report - marque ce conflit pour résolution ultérieure\n"
+" (m) fusionne (merge) - utiliser l'outil de fusion interne pour résoudre\n"
" (l) lance - utilise un outil externe pour résoudre le conflit\n"
" (s) aide - affiche cette liste\n"
"\n"
-#: ../svn/conflict-callbacks.c:543 ../svn/conflict-callbacks.c:567
+#: ../svn/conflict-callbacks.c:564 ../svn/conflict-callbacks.c:588
#, c-format
msgid ""
"Invalid option; cannot choose based on conflicts in a binary file.\n"
"\n"
msgstr "Option invalide ; impossible de choisir selon le conflit dans un fichier binaire.\n"
-#: ../svn/conflict-callbacks.c:551 ../svn/conflict-callbacks.c:575
+#: ../svn/conflict-callbacks.c:572 ../svn/conflict-callbacks.c:596
#, c-format
msgid ""
"Invalid option; cannot choose based on conflicts for properties.\n"
"\n"
msgstr "Option invalide ; impossible de choisir selon le conflit pour des propriétés.\n"
-#: ../svn/conflict-callbacks.c:604
+#: ../svn/conflict-callbacks.c:625
#, c-format
msgid ""
"Invalid option; cannot display conflicts for a binary file.\n"
"\n"
msgstr "Option invalide ; impossible d'affichier les conflits d'un fichier binaire.\n"
-#: ../svn/conflict-callbacks.c:612
+#: ../svn/conflict-callbacks.c:633
#, c-format
msgid ""
"Invalid option; cannot display conflicts for properties.\n"
"\n"
msgstr "Option invalide ; fichiers originaux non disponibles.\n"
-#: ../svn/conflict-callbacks.c:620
+#: ../svn/conflict-callbacks.c:642
#, c-format
msgid ""
"Invalid option; original files not available.\n"
"\n"
msgstr "Option invalide; il n'y a pas de version fusionnée pour comparer.\n"
-#: ../svn/conflict-callbacks.c:632
+#: ../svn/conflict-callbacks.c:654
#, c-format
msgid ""
"Invalid option; there's no merged version to diff.\n"
@@ -7493,14 +7577,15 @@ msgstr ""
"Option invalide ; il n'y a pas de version fusionnée à différentier.\n"
"\n"
-#: ../svn/conflict-callbacks.c:651
+#: ../svn/conflict-callbacks.c:673
#, c-format
msgid ""
-"Invalid option; cannot resolve property conflicts with an external merge tool.\n"
+"Invalid option; can only resolve text conflicts with the internal merge tool.\n"
"\n"
-msgstr "Option invalide ; impossible de résoudre un conflit de propriété avec un outil externe.\n"
+msgstr "Option invalide ; l'outil de fusion interne ne peut résoudre que des conflits textes.\n"
-#: ../svn/conflict-callbacks.c:666 ../svn/conflict-callbacks.c:680
+#: ../svn/conflict-callbacks.c:698 ../svn/conflict-callbacks.c:720
+#: ../svn/conflict-callbacks.c:734
#, c-format
msgid ""
"Invalid option.\n"
@@ -7509,7 +7594,14 @@ msgstr ""
"Option invalide.\n"
"\n"
-#: ../svn/conflict-callbacks.c:710
+#: ../svn/conflict-callbacks.c:705
+#, c-format
+msgid ""
+"Invalid option; cannot resolve property conflicts with an external merge tool.\n"
+"\n"
+msgstr "Option invalide ; impossible de résoudre un conflit de propriété avec un outil externe.\n"
+
+#: ../svn/conflict-callbacks.c:764
#, c-format
msgid ""
"Conflict discovered when trying to add '%s'.\n"
@@ -7518,11 +7610,11 @@ msgstr ""
"Conflit découvert en essayant d'ajouter '%s'.\n"
"Un objet de même nom existe déjà.\n"
-#: ../svn/conflict-callbacks.c:713
+#: ../svn/conflict-callbacks.c:769
msgid "Select: (p) postpone, (mf) mine-full, (tf) theirs-full, (h) help:"
msgstr "Sélectionner : (p) report, (mf) mien complet, (tf) autre complet, (h) aide :"
-#: ../svn/conflict-callbacks.c:725
+#: ../svn/conflict-callbacks.c:781
#, c-format
msgid ""
" (p) postpone - resolve the conflict later\n"
@@ -7537,42 +7629,103 @@ msgstr ""
" (h) aide - affiche cette liste\n"
"\n"
-#: ../svn/copy-cmd.c:134 ../svn/delete-cmd.c:69 ../svn/mkdir-cmd.c:68
-#: ../svn/move-cmd.c:77 ../svn/propedit-cmd.c:251
-msgid "Local, non-commit operations do not take a log message or revision properties"
-msgstr "Opération locale sans propagation (commit), pas de message ni de propriété de révision"
+#: ../svn/conflict-callbacks.c:816
+#, c-format
+msgid ""
+"Tree conflict on '%s'\n"
+" > %s\n"
+msgstr ""
+" Arborescences en conflit sur '%s'\n"
+" > %s\n"
-#: ../svn/diff-cmd.c:186 ../svn/log-cmd.c:280 ../svnserve/main.c:646
+#: ../svn/conflict-callbacks.c:822
+msgid "Select: (p) postpone, (r) mark-resolved, (h) help: "
+msgstr "Sélectionner : (p) report, (r) marque résolu, (h) aide :"
+
+#: ../svn/conflict-callbacks.c:833
#, c-format
-msgid "Can't open stdout"
-msgstr "La sortie standard (stdout) ne peut être ouverte"
+msgid ""
+" (p) postpone - resolve the conflict later\n"
+" (r) resolved - accept current working tree\n"
+msgstr ""
+" (p) report - résout le conflit ultérieurement\n"
+" (r) résolu - accepte l'arborescence actuelle\n"
-#: ../svn/diff-cmd.c:188 ../svn/log-cmd.c:282
+#: ../svn/copy-cmd.c:88 ../svn/util.c:1367
#, c-format
-msgid "Can't open stderr"
-msgstr "La sortie d'erreur (stderr) ne peut être ouverte"
+msgid "'%s': a peg revision is not allowed here"
+msgstr "'%s' : une révision fixée n'est pas permise ici"
-#: ../svn/diff-cmd.c:197
+#: ../svn/copy-cmd.c:128 ../svn/delete-cmd.c:69 ../svn/mkdir-cmd.c:68
+#: ../svn/move-cmd.c:77 ../svn/propedit-cmd.c:254
+msgid "Local, non-commit operations do not take a log message or revision properties"
+msgstr "Opération locale sans propagation (commit), pas de message ni de propriété de révision"
+
+#: ../svn/diff-cmd.c:199
msgid "'--xml' option only valid with '--summarize' option"
msgstr "Option '--xml' valide seulement avec l'option '--summarize'"
-#: ../svn/diff-cmd.c:272
+#: ../svn/diff-cmd.c:280
msgid "'--new' option only valid with '--old' option"
msgstr "Option '--new' valide seulement avec l'option '--old'"
-#: ../svn/diff-cmd.c:325
+#: ../svn/diff-cmd.c:333
#, c-format
msgid "Path '%s' not relative to base URLs"
msgstr "Le chemin '%s' n'est pas relatif aux URLs de base"
-#: ../svn/export-cmd.c:115
+#: ../svn/export-cmd.c:113
msgid "Destination directory exists; please remove the directory or use --force to overwrite"
msgstr "Le répertoire de destination existe ; Enlever le répertoire ou utiliser --force pour l'écraser"
-#: ../svn/export-cmd.c:120 ../svn/switch-cmd.c:185 ../svn/update-cmd.c:184
+#: ../svn/export-cmd.c:122 ../svn/switch-cmd.c:185 ../svn/update-cmd.c:175
msgid "Failure occurred processing one or more externals definitions"
msgstr "Erreur lors du traitement d'une ou plusieurs définitions externes"
+#: ../svn/file-merge.c:130 ../svn/file-merge.c:777
+msgid "Could not write data to merged file"
+msgstr "Impossible d'écrire dans le fichier fusionné"
+
+#: ../svn/file-merge.c:483
+msgid "Could not write data to temporary file"
+msgstr "Impossible d'écrire vers un fichier temporaire"
+
+#: ../svn/file-merge.c:592
+msgid "Conflicting section found during merge."
+msgstr "Section en conflit trouvée durant la fusion (merge)."
+
+#: ../svn/file-merge.c:595
+#, c-format
+msgid "(1) their version (at line %lu)"
+msgstr "(1) leur version (à la ligne %lu)"
+
+#: ../svn/file-merge.c:600
+#, c-format
+msgid "(2) your version (at line %lu)"
+msgstr "(2) votre version (à la ligne %lu)"
+
+#: ../svn/file-merge.c:649
+msgid ""
+"Select: (1) use their version, (2) use your version,\n"
+" (e1) edit their version and use the result,\n"
+" (e2) edit your version and use the result,\n"
+" (eb) edit both versions and use the result,\n"
+" (p) postpone this conflicting section leaving conflict markers,\n"
+" (a) abort entire merge and return to main menu: "
+msgstr ""
+"Sélectionner :\n"
+" (1) utiliser leur version, (2) utiliser votre version,\n"
+" (e1) éditer leur version et utiliser le résultat,\n"
+" (e2) éditer votre version et utiliser le résultat,\n"
+" (eb) éditer les deux versions et utiliser le résultat,\n"
+" (p) reporter cette section en conflit et laisser les marqueurs,\n"
+" (a) arrêter la fusion et retourner au menu principal :"
+
+#: ../svn/file-merge.c:895
+#, c-format
+msgid "Could not write merged result to '%s', saved instead at '%s'.\n"
+msgstr "Impossible d'écrire le résultat de fusion dans '%s', sauvé à la place dans '%s'.\n"
+
#: ../svn/help-cmd.c:50
#, c-format
msgid ""
@@ -7609,7 +7762,7 @@ msgstr ""
"Subversion est un outil pour gérer des versions.\n"
"Pour plus d'informations, voir http://subversion.apache.org/\n"
-#: ../svn/help-cmd.c:70 ../svnrdump/svnrdump.c:491 ../svnsync/main.c:1675
+#: ../svn/help-cmd.c:70 ../svnrdump/svnrdump.c:503 ../svnsync/main.c:1854
msgid ""
"The following repository access (RA) modules are available:\n"
"\n"
@@ -7625,7 +7778,7 @@ msgstr "URL de dépôt requise pour importer"
msgid "Too many arguments to import command"
msgstr "Trop d'arguments à la commande import"
-#: ../svn/import-cmd.c:110
+#: ../svn/import-cmd.c:107
#, c-format
msgid "Invalid URL '%s'"
msgstr "URL invalide '%s'"
@@ -7634,174 +7787,201 @@ msgstr "URL invalide '%s'"
msgid "Resource is not under version control."
msgstr "La ressource n'est pas versionnée."
-#: ../svn/info-cmd.c:255 ../svnadmin/main.c:1398
+#: ../svn/info-cmd.c:292 ../svnadmin/main.c:1563
#, c-format
msgid "Path: %s\n"
msgstr "Chemin : %s\n"
-#: ../svn/info-cmd.c:261
+#: ../svn/info-cmd.c:299
#, c-format
msgid "Name: %s\n"
msgstr "Nom : %s\n"
-#: ../svn/info-cmd.c:265
+#: ../svn/info-cmd.c:303
#, c-format
msgid "Working Copy Root Path: %s\n"
msgstr "Chemin racine de la copie de travail : %s\n"
-#: ../svn/info-cmd.c:270
+#: ../svn/info-cmd.c:309
#, c-format
msgid "URL: %s\n"
msgstr "URL : %s\n"
-#: ../svn/info-cmd.c:273
+#: ../svn/info-cmd.c:312
#, c-format
msgid "Repository Root: %s\n"
msgstr "Racine du dépôt : %s\n"
-#: ../svn/info-cmd.c:277
+#: ../svn/info-cmd.c:316
#, c-format
msgid "Repository UUID: %s\n"
msgstr "UUID du dépôt : %s\n"
-#: ../svn/info-cmd.c:281
+#: ../svn/info-cmd.c:320
#, c-format
msgid "Revision: %ld\n"
msgstr "Révision : %ld\n"
-#: ../svn/info-cmd.c:286
+#: ../svn/info-cmd.c:325
#, c-format
msgid "Node Kind: file\n"
msgstr "Type de nœud : fichier\n"
-#: ../svn/info-cmd.c:290
+#: ../svn/info-cmd.c:329
#, c-format
msgid "Node Kind: directory\n"
msgstr "Type de nœud : répertoire\n"
-#: ../svn/info-cmd.c:294
+#: ../svn/info-cmd.c:333
#, c-format
msgid "Node Kind: none\n"
msgstr "Type de nœud : aucun\n"
-#: ../svn/info-cmd.c:299
+#: ../svn/info-cmd.c:338
#, c-format
msgid "Node Kind: unknown\n"
msgstr "Type de nœud : inconnu\n"
-#: ../svn/info-cmd.c:308
+#: ../svn/info-cmd.c:347
#, c-format
msgid "Schedule: normal\n"
msgstr "Tâche programmée : normale\n"
-#: ../svn/info-cmd.c:312
+#: ../svn/info-cmd.c:351
#, c-format
msgid "Schedule: add\n"
msgstr "Tâche programmée : ajout\n"
-#: ../svn/info-cmd.c:316
+#: ../svn/info-cmd.c:355
#, c-format
msgid "Schedule: delete\n"
msgstr "Tâche programmée : suppression\n"
-#: ../svn/info-cmd.c:320
+#: ../svn/info-cmd.c:359
#, c-format
msgid "Schedule: replace\n"
msgstr "Tâche programmée : remplacement\n"
-#: ../svn/info-cmd.c:336
+#: ../svn/info-cmd.c:375
#, c-format
msgid "Depth: empty\n"
msgstr "Profondeur : vide\n"
-#: ../svn/info-cmd.c:340
+#: ../svn/info-cmd.c:379
#, c-format
msgid "Depth: files\n"
msgstr "Profondeur : fichiers\n"
-#: ../svn/info-cmd.c:344
+#: ../svn/info-cmd.c:383
#, c-format
msgid "Depth: immediates\n"
msgstr "Profondeur : immédiates\n"
+#: ../svn/info-cmd.c:387
+#, c-format
+msgid "Depth: exclude\n"
+msgstr "Profondeur : exclusion\n"
+
#. Other depths should never happen here.
-#: ../svn/info-cmd.c:355
+#: ../svn/info-cmd.c:398
#, c-format
msgid "Depth: INVALID\n"
msgstr "Profondeur : INVALIDE\n"
-#: ../svn/info-cmd.c:359
+#: ../svn/info-cmd.c:402
#, c-format
msgid "Copied From URL: %s\n"
msgstr "Copié à partir de l'URL : %s\n"
-#: ../svn/info-cmd.c:363
+#: ../svn/info-cmd.c:406
#, c-format
msgid "Copied From Rev: %ld\n"
msgstr "Copié à partir de la révision : %ld\n"
-#: ../svn/info-cmd.c:368
+#: ../svn/info-cmd.c:415 ../svn/info-cmd.c:417
+#, c-format
+msgid "Moved From: %s\n"
+msgstr "Déplacé de : %s\n"
+
+#: ../svn/info-cmd.c:428 ../svn/info-cmd.c:430
+#, c-format
+msgid "Moved To: %s\n"
+msgstr "Déplacé vers : %s\n"
+
+#: ../svn/info-cmd.c:436
#, c-format
msgid "Last Changed Author: %s\n"
msgstr "Auteur de la dernière modification : %s\n"
-#: ../svn/info-cmd.c:372
+#: ../svn/info-cmd.c:440
#, c-format
msgid "Last Changed Rev: %ld\n"
msgstr "Révision de la dernière modification : %ld\n"
-#: ../svn/info-cmd.c:377
+#: ../svn/info-cmd.c:445
msgid "Last Changed Date"
msgstr "Date de la dernière modification"
-#: ../svn/info-cmd.c:383
+#: ../svn/info-cmd.c:451
msgid "Text Last Updated"
msgstr "Texte mis à jour"
-#: ../svn/info-cmd.c:386
+#: ../svn/info-cmd.c:454
#, c-format
msgid "Checksum: %s\n"
msgstr "Somme de contrôle : %s\n"
-#: ../svn/info-cmd.c:391
+#: ../svn/info-cmd.c:476
#, c-format
msgid "Conflict Previous Base File: %s\n"
msgstr "Fichier de base précédent du conflit : %s\n"
-#: ../svn/info-cmd.c:397
+#: ../svn/info-cmd.c:483
#, c-format
msgid "Conflict Previous Working File: %s\n"
msgstr "Fichier de travail précédent du conflit : %s\n"
-#: ../svn/info-cmd.c:402
+#: ../svn/info-cmd.c:490
#, c-format
msgid "Conflict Current Base File: %s\n"
msgstr "Fichier de base courant du conflit : %s\n"
-#: ../svn/info-cmd.c:407
+#: ../svn/info-cmd.c:498
#, c-format
msgid "Conflict Properties File: %s\n"
msgstr "Fichier de propriétés du conflit : %s\n"
-#: ../svn/info-cmd.c:415
+#: ../svn/info-cmd.c:517
+msgid "Tree conflict"
+msgstr "Conflit d'arborescence"
+
+#: ../svn/info-cmd.c:521
+msgid "Source left"
+msgstr "Source gauche"
+
+#: ../svn/info-cmd.c:530
+msgid "Source right"
+msgstr "Source droit"
+
+#: ../svn/info-cmd.c:541
#, c-format
msgid "Lock Token: %s\n"
msgstr "Nom de verrou : %s\n"
-#: ../svn/info-cmd.c:419
+#: ../svn/info-cmd.c:545
#, c-format
msgid "Lock Owner: %s\n"
msgstr "Propriétaire du verrou : %s\n"
-#: ../svn/info-cmd.c:424
+#: ../svn/info-cmd.c:550
msgid "Lock Created"
msgstr "Verrou créé"
-#: ../svn/info-cmd.c:428
+#: ../svn/info-cmd.c:554
msgid "Lock Expires"
msgstr "Verrou expire"
-#: ../svn/info-cmd.c:436
+#: ../svn/info-cmd.c:562
#, c-format
msgid ""
"Lock Comment (%i line):\n"
@@ -7816,159 +7996,165 @@ msgstr[1] ""
"Commentaire du verrou (%i lignes) :\n"
"%s\n"
-#: ../svn/info-cmd.c:445
+#: ../svn/info-cmd.c:571
#, c-format
msgid "Changelist: %s\n"
msgstr "Liste de changements : %s\n"
-#: ../svn/info-cmd.c:465
-msgid "Tree conflict"
-msgstr "Conflit d'arborescence"
-
-#: ../svn/info-cmd.c:469
-msgid "Source left"
-msgstr "Source gauche"
-
-#: ../svn/info-cmd.c:476
-msgid "Source right"
-msgstr "Source droit"
+#: ../svn/info-cmd.c:685
+msgid "Could not display info for all targets because some targets don't exist"
+msgstr "Impossible d'afficher les information (info) sur toutes les cibles car certaines n'existent pas"
-#: ../svn/list-cmd.c:92
+#: ../svn/list-cmd.c:63
msgid "%b %d %H:%M"
msgstr "%d %b, %H:%M"
-#: ../svn/list-cmd.c:97
+#: ../svn/list-cmd.c:65
msgid "%b %d %Y"
msgstr "%d %b %Y"
+#: ../svn/list-cmd.c:332
+msgid "Could not list all targets because some targets don't exist"
+msgstr "Impossible de lister (list) toutes les cibles car certaines n'existent pas"
+
#: ../svn/lock-cmd.c:58
msgid "Lock comment contains a zero byte"
msgstr "Le commentaire du verrou contient un octet 0"
-#: ../svn/log-cmd.c:184
+#: ../svn/log-cmd.c:126 ../svn/log-cmd.c:145
+msgid "\n"
+msgstr "\n"
+
+#: ../svn/log-cmd.c:312
msgid "(no author)"
msgstr "(pas d'auteur)"
-#: ../svn/log-cmd.c:190
+#: ../svn/log-cmd.c:318
msgid "(no date)"
msgstr "(pas de date)"
-#: ../svn/log-cmd.c:205
+#: ../svn/log-cmd.c:344
#, c-format
msgid " | %d line"
msgid_plural " | %d lines"
msgstr[0] " | %d ligne"
msgstr[1] " | %d lignes"
-#: ../svn/log-cmd.c:221
+#: ../svn/log-cmd.c:360
#, c-format
msgid "Changed paths:\n"
msgstr "Chemins modifiés :\n"
-#: ../svn/log-cmd.c:236
+#: ../svn/log-cmd.c:377
#, c-format
msgid " (from %s:%ld)"
msgstr " (de %s:%ld)"
-#. Print the result of merge line
-#: ../svn/log-cmd.c:251
+#: ../svn/log-cmd.c:393
#, c-format
-msgid "Merged via:"
-msgstr "Fision via :"
+msgid "Reverse merged via:"
+msgstr "Fusion-arrière via :"
-#: ../svn/log-cmd.c:296 ../svn/log-cmd.c:373
+#: ../svn/log-cmd.c:395
#, c-format
-msgid "\n"
-msgstr "\n"
+msgid "Merged via:"
+msgstr "Fusion via :"
-#: ../svn/log-cmd.c:573
+#: ../svn/log-cmd.c:643
msgid "'with-all-revprops' option only valid in XML mode"
msgstr "Option 'with-all-revprops' valide seulement en mode XML"
-#: ../svn/log-cmd.c:577
+#: ../svn/log-cmd.c:647
msgid "'with-no-revprops' option only valid in XML mode"
msgstr "Option 'with-no-revprop' valide seulement en mode XML"
-#: ../svn/log-cmd.c:581
+#: ../svn/log-cmd.c:651
msgid "'with-revprop' option only valid in XML mode"
msgstr "Option 'with-revprop' valide seulement en mode XML"
-#: ../svn/log-cmd.c:588
+#: ../svn/log-cmd.c:658
msgid "'diff' option is not supported in XML mode"
msgstr "L'option diff' n'est pas supportée en mode XML"
-#: ../svn/log-cmd.c:594
+#: ../svn/log-cmd.c:664
msgid "'quiet' and 'diff' options are mutually exclusive"
msgstr "Les options 'quiet' et diff' sont mutuellement exclusives"
-#: ../svn/log-cmd.c:598
+#: ../svn/log-cmd.c:668
msgid "'diff-cmd' option requires 'diff' option"
msgstr "L'option 'diff-cmd' requiert l'option 'diff'"
-#: ../svn/log-cmd.c:602
+#: ../svn/log-cmd.c:672
msgid "'internal-diff' option requires 'diff' option"
msgstr "L'option 'internal-diff' requiert l'option 'diff'"
-#: ../svn/log-cmd.c:606
+#: ../svn/log-cmd.c:676
msgid "'extensions' option requires 'diff' option"
msgstr "L'option 'extensions' requiert l'option 'diff'"
-#: ../svn/log-cmd.c:625
+#: ../svn/log-cmd.c:681
+msgid "'depth' option requires 'diff' option"
+msgstr "L'option 'depth' requiert l'option 'diff'"
+
+#: ../svn/log-cmd.c:697
msgid "-c and -r are mutually exclusive"
msgstr "-c et -r sont mutuellement exclusives"
-#: ../svn/log-cmd.c:651
+#: ../svn/log-cmd.c:729
#, c-format
msgid "Only relative paths can be specified after a URL for 'svn log', but '%s' is not a relative path"
msgstr ""
"Seuls des chemins relatifs peuvent être spécifiés après une URL pour 'svn log',\n"
"or ce n'est pas le cas de '%s'"
-#: ../svn/log-cmd.c:696
+#: ../svn/log-cmd.c:776
#, c-format
msgid "cannot assign with 'with-revprop' option (drop the '=')"
msgstr "Impossible d'affecter l'option 'with-revprop' ('=' jeté)"
-#: ../svn/main.c:135
+#: ../svn/main.c:144
msgid "force operation to run"
msgstr "force l'exécution de l'opération"
-#: ../svn/main.c:137
+#: ../svn/main.c:146
msgid "force validity of log message source"
msgstr "valide la source de l'entrée du journal"
-#: ../svn/main.c:138 ../svn/main.c:139 ../svnadmin/main.c:245
-#: ../svnadmin/main.c:248 ../svndumpfilter/main.c:917
-#: ../svndumpfilter/main.c:920 ../svnlook/main.c:104 ../svnlook/main.c:116
-#: ../svnsync/main.c:223 ../svnsync/main.c:225
+#: ../svn/main.c:147 ../svn/main.c:148 ../svnadmin/main.c:204
+#: ../svnadmin/main.c:207 ../svndumpfilter/main.c:1009
+#: ../svndumpfilter/main.c:1012 ../svnlook/main.c:105 ../svnlook/main.c:117
+#: ../svnsync/main.c:234 ../svnsync/main.c:236
msgid "show help on a subcommand"
msgstr "affiche l'aide sur une sous-commande"
-#: ../svn/main.c:140
+#: ../svn/main.c:149
msgid "specify log message ARG"
msgstr "donne le message de propagation ARG"
-#: ../svn/main.c:141
+#: ../svn/main.c:150
msgid "print nothing, or only summary information"
msgstr "n'affiche rien, ou seulement des informations résumées"
-#: ../svn/main.c:142
+#: ../svn/main.c:151
msgid "descend recursively, same as --depth=infinity"
msgstr "descent récursivement, comme avec --depth=infinity"
-#: ../svn/main.c:143
+#: ../svn/main.c:152
msgid "obsolete; try --depth=files or --depth=immediates"
msgstr "obsolète : essayer --depth=files ou --depth=immediates"
-#: ../svn/main.c:145
+#: ../svn/main.c:154
msgid ""
"the change made by revision ARG (like -r ARG-1:ARG)\n"
-" If ARG is negative this is like -r ARG:ARG-1"
+" If ARG is negative this is like -r ARG:ARG-1\n"
+" If ARG is of the form ARG1-ARG2 then this is like\n"
+" ARG1:ARG2, where ARG1 is inclusive"
msgstr ""
"Le changement effectué par la révision ARG (i.e. -r ARG-1:ARG)\n"
-" Si ARG est négatif, équivalent à -r ARG:ARG-1"
+" Si ARG est négatif, équivalent à -r ARG:ARG-1\n"
+" Si ARG est de la forme ARG1-ARG2, alors ARG1:ARG2 avec ARG1 inclus"
-#: ../svn/main.c:149
+#: ../svn/main.c:162
msgid ""
"ARG (some commands also take ARG1:ARG2 range)\n"
" A revision argument can be one of:\n"
@@ -7988,41 +8174,41 @@ msgstr ""
" 'COMMITTED' dernière révision propagée à ou avant BASE\n"
" 'PREV' révision précédente de COMMITTED"
-#: ../svn/main.c:164
+#: ../svn/main.c:177
msgid "read log message from file ARG"
msgstr "lit le message de propagation à partir du fichier ARG"
-#: ../svn/main.c:166
+#: ../svn/main.c:179
msgid "give output suitable for concatenation"
msgstr "produit une sortie concaténable"
-#: ../svn/main.c:168
+#: ../svn/main.c:181
msgid "treat value as being in charset encoding ARG"
msgstr "traite la valeur comme étant du texte avec l'encodage ARG"
-#: ../svn/main.c:169 ../svnadmin/main.c:251 ../svndumpfilter/main.c:923
-#: ../svnlook/main.c:146 ../svnrdump/svnrdump.c:133 ../svnserve/main.c:220
-#: ../svnsync/main.c:221 ../svnversion/main.c:139
+#: ../svn/main.c:182 ../svnadmin/main.c:210 ../svndumpfilter/main.c:1015
+#: ../svnlook/main.c:147 ../svnrdump/svnrdump.c:134 ../svnserve/main.c:270
+#: ../svnsync/main.c:232 ../svnversion/main.c:139
msgid "show program version information"
msgstr "affiche la version du programme"
-#: ../svn/main.c:170
+#: ../svn/main.c:183
msgid "print extra information"
msgstr "affiche plus d'informations"
-#: ../svn/main.c:171
+#: ../svn/main.c:184
msgid "display update information"
msgstr "affiche les mises à jour"
-#: ../svn/main.c:172 ../svnrdump/svnrdump.c:123
+#: ../svn/main.c:185 ../svnrdump/svnrdump.c:124
msgid "specify a username ARG"
msgstr "précise le nom d'utilisateur ARG"
-#: ../svn/main.c:173 ../svnrdump/svnrdump.c:125
+#: ../svn/main.c:186 ../svnrdump/svnrdump.c:126
msgid "specify a password ARG"
msgstr "précise le mot de passe ARG"
-#: ../svn/main.c:175
+#: ../svn/main.c:188
msgid ""
"Default: '-u'. When Subversion is invoking an\n"
" external diff program, ARG is simply passed along\n"
@@ -8057,11 +8243,11 @@ msgstr ""
" -p (--show-c-function):\n"
" affiche les noms des fonctions C dans la sortie de diff."
-#: ../svn/main.c:207
+#: ../svn/main.c:220
msgid "pass contents of file ARG as additional args"
msgstr "passe le contenu du fichier ARG comme des arguments"
-#: ../svn/main.c:209
+#: ../svn/main.c:222
msgid ""
"limit operation by depth ARG ('empty', 'files',\n"
" 'immediates', or 'infinity')"
@@ -8069,7 +8255,7 @@ msgstr ""
"limite l'opération à la profondeur ARG ('empty' vide, 'files' fichiers,\n"
" 'immediates' immédiat, ou 'infinity' infini)"
-#: ../svn/main.c:213
+#: ../svn/main.c:226
msgid ""
"set new working copy depth to ARG ('exclude',\n"
" 'empty', 'files', 'immediates', or 'infinity')"
@@ -8078,96 +8264,85 @@ msgstr ""
" 'empty' vide, 'files' fichiers,\n"
" 'immediates' immédiat ou 'infinity' infini)"
-#: ../svn/main.c:216 ../svnlook/main.c:149
+#: ../svn/main.c:229 ../svnlook/main.c:150
msgid "output in XML"
msgstr "sortie XML"
-#: ../svn/main.c:217
+#: ../svn/main.c:230
msgid "use strict semantics"
msgstr "sémantique stricte"
-#: ../svn/main.c:219
+#: ../svn/main.c:232
msgid "do not cross copies while traversing history"
msgstr "ne traverse pas de copies en parcourant l'historique"
-#: ../svn/main.c:221
+#: ../svn/main.c:234
msgid "disregard default and svn:ignore property ignores"
msgstr "n'ignore aucun fichier ou répertoire (propriété svn:ignore et défaut)"
-#: ../svn/main.c:223 ../svnrdump/svnrdump.c:129 ../svnsync/main.c:175
+#: ../svn/main.c:236 ../svnrdump/svnrdump.c:130 ../svnsync/main.c:178
msgid "do not cache authentication tokens"
msgstr "ne conserve pas les éléments d'authentification"
-#: ../svn/main.c:225 ../svnsync/main.c:185
+#: ../svn/main.c:238 ../svnrdump/svnrdump.c:144 ../svnsync/main.c:188
msgid ""
-"accept unknown SSL server certificates without\n"
-" prompting (but only with '--non-interactive')"
+"accept SSL server certificates from unknown\n"
+" certificate authorities without prompting (but only\n"
+" with '--non-interactive')"
msgstr ""
-"accepte les certificats de serveurs SSL inconnus sans confirmation\n"
+"accepte les certificats serveur SSL d'authorités inconnues sans confirmation\n"
" (mais seulement avec '--non-interactive')"
-#: ../svn/main.c:229 ../svnrdump/svnrdump.c:127 ../svnsync/main.c:173
+#: ../svn/main.c:244 ../svnrdump/svnrdump.c:128 ../svnsync/main.c:176
msgid "do no interactive prompting"
msgstr "pas de demande interactive"
-#: ../svn/main.c:231
+#: ../svn/main.c:246
msgid "try operation but make no changes"
msgstr "tente de faire l'opération, mais sans modifications réelles"
-#: ../svn/main.c:233 ../svnlook/main.c:125
-msgid "do not print differences for deleted files"
-msgstr "n'affiche pas les différences pour les fichiers supprimés"
-
-#: ../svn/main.c:235
-msgid "notice ancestry when calculating differences"
-msgstr "utilise l'ascendance pour calculer les différences"
-
-#: ../svn/main.c:237
+#: ../svn/main.c:248
msgid "ignore ancestry when calculating merges"
msgstr "ignore l'ascendance pour calculer les différences"
-#: ../svn/main.c:239
+#: ../svn/main.c:250
msgid "ignore externals definitions"
msgstr "ignore les définitions externes"
-#: ../svn/main.c:240
-msgid "use ARG as diff command"
-msgstr "utilise ARG comme commande diff"
-
-#: ../svn/main.c:241
+#: ../svn/main.c:251
msgid "use ARG as merge command"
msgstr "utilise ARG comme commande de fusion"
-#: ../svn/main.c:242
+#: ../svn/main.c:252
msgid "use ARG as external editor"
msgstr "utilise ARG comme éditeur externe"
-#: ../svn/main.c:244
+#: ../svn/main.c:254
msgid "merge only mergeinfo differences"
msgstr "fusionne seulement les différences de \"mergeinfo\""
-#: ../svn/main.c:245
+#: ../svn/main.c:255
msgid "use ARG as the older target"
msgstr "utilise ARG comme ancienne cible"
-#: ../svn/main.c:246
+#: ../svn/main.c:256
msgid "use ARG as the newer target"
msgstr "utilise ARG comme nouvelle cible"
-#: ../svn/main.c:248
+#: ../svn/main.c:258
msgid "operate on a revision property (use with -r)"
msgstr "opère sur la propriéte de révision (utiliser avec -r)"
-#: ../svn/main.c:249
+#: ../svn/main.c:259
msgid "relocate via URL-rewriting"
msgstr "re-localise par réécriture d'URL"
-#: ../svn/main.c:251 ../svnadmin/main.c:290 ../svnrdump/svnrdump.c:121
-#: ../svnsync/main.c:197
+#: ../svn/main.c:261 ../svnadmin/main.c:249 ../svnrdump/svnrdump.c:122
+#: ../svnsync/main.c:202
msgid "read user configuration files from directory ARG"
msgstr "fichiers de configuration dans ce répertoire"
-#: ../svn/main.c:253 ../svnrdump/svnrdump.c:135 ../svnsync/main.c:199
+#: ../svn/main.c:263 ../svnrdump/svnrdump.c:136 ../svnsync/main.c:204
msgid ""
"set user configuration option in the format:\n"
" FILE:SECTION:OPTION=[VALUE]\n"
@@ -8179,15 +8354,15 @@ msgstr ""
" Par exemple :\n"
" servers:global:http-library=serf"
-#: ../svn/main.c:260
+#: ../svn/main.c:270
msgid "enable automatic properties"
msgstr "active les propriétés automatiques"
-#: ../svn/main.c:261
+#: ../svn/main.c:271
msgid "disable automatic properties"
msgstr "désactive les propriétés automatiques"
-#: ../svn/main.c:263
+#: ../svn/main.c:273
msgid ""
"use a different EOL marker than the standard\n"
" system marker for files with the svn:eol-style\n"
@@ -8198,43 +8373,39 @@ msgstr ""
" pour les fichiers avec la propriété svn:eol-style 'native'.\n"
" ARG peut être 'LF', 'CR' ou 'CRLF'"
-#: ../svn/main.c:270
+#: ../svn/main.c:280
msgid "maximum number of log entries"
msgstr "nombre maximum d'entrées dans le journal (log)"
-#: ../svn/main.c:271
+#: ../svn/main.c:281
msgid "don't unlock the targets"
msgstr "ne pas déverrouiller les cibles"
-#: ../svn/main.c:272
-msgid "show a summary of the results"
-msgstr "affiche un résumé du résultat"
-
-#: ../svn/main.c:273
+#: ../svn/main.c:282
msgid "remove changelist association"
msgstr "efface l'association à une liste de changements"
-#: ../svn/main.c:275
+#: ../svn/main.c:284
msgid "operate only on members of changelist ARG"
msgstr "traite seulement sur les membres de la liste de changements ARG"
-#: ../svn/main.c:277
+#: ../svn/main.c:286
msgid "don't delete changelists after commit"
msgstr "ne pas effacer les listes de changements après propagation (commit)"
-#: ../svn/main.c:278
+#: ../svn/main.c:287
msgid "keep path in working copy"
msgstr "garde le chemin dans la copie de travail"
-#: ../svn/main.c:280
+#: ../svn/main.c:289
msgid "retrieve all revision properties"
msgstr "Récupère toutes les propriétés de révision"
-#: ../svn/main.c:282
+#: ../svn/main.c:291
msgid "retrieve no revision properties"
msgstr "Ne récupére aucune propriété de révision"
-#: ../svn/main.c:284
+#: ../svn/main.c:293
msgid ""
"set revision property ARG in new revision\n"
" using the name[=value] format"
@@ -8242,11 +8413,11 @@ msgstr ""
"Fixe la propriété de révision ARG de la nouvelle révision\n"
" en utilisant le format nom[=valeur]"
-#: ../svn/main.c:287
+#: ../svn/main.c:296
msgid "make intermediate directories"
msgstr "crée des répertoires intermédiaires"
-#: ../svn/main.c:289
+#: ../svn/main.c:298
msgid ""
"use/display additional information from merge\n"
" history"
@@ -8254,16 +8425,18 @@ msgstr ""
"utilise/affiche des informations supplémentaire de\n"
" l'historique de fusion (merge)"
-#: ../svn/main.c:293
+#: ../svn/main.c:302
msgid ""
"specify automatic conflict resolution action\n"
-" ('postpone', 'base', 'mine-conflict',\n"
+" ('postpone', 'working', 'base', 'mine-conflict',\n"
" 'theirs-conflict', 'mine-full', 'theirs-full',\n"
-" 'edit', 'launch')"
+" 'edit', 'launch')\n"
+" (shorthand: 'p', 'mc', 'tc', 'mf', 'tf', 'e', 'l')"
msgstr ""
"Spécifie une action de résolution automatique de conflit\n"
" ('postpone' pour report,\n"
-" 'base',\n"
+" 'working' pour version courante,\n"
+" 'base' pour version de référence commune,\n"
" 'mine-conflict' pour préférer ma version,\n"
" 'theirs-conflict' pour préférer l'autre,\n"
" 'mine-full' pour écraser avec la mienne,\n"
@@ -8271,7 +8444,7 @@ msgstr ""
" 'edit' pour lancer une édition,\n"
" 'launch' pour démarrer un outil externe)"
-#: ../svn/main.c:301
+#: ../svn/main.c:313
msgid ""
"specify which collection of revisions to display\n"
" ('merged', 'eligible')"
@@ -8279,11 +8452,11 @@ msgstr ""
"Spécifie le type de révisions à afficher\n"
" ('merged' pour déjà fusionnées, 'eligible' pour à fusionner)"
-#: ../svn/main.c:305
+#: ../svn/main.c:317
msgid "merge a branch back into its parent branch"
msgstr "fusionne une branche vers sa branche mère."
-#: ../svn/main.c:307
+#: ../svn/main.c:319
msgid ""
"number of leading path components to strip from\n"
" paths parsed from the patch file. --strip 0\n"
@@ -8301,35 +8474,70 @@ msgstr ""
" '/' est le séparateur sur toute les plateforme.\n"
" Un '/' en tête compte pour un composant."
-#: ../svn/main.c:323
-msgid "don't diff copied or moved files with their source"
-msgstr "ne compare pas les fichiers copiés ou déplacés avec leur source"
-
-#: ../svn/main.c:325
+#: ../svn/main.c:335
msgid "don't expand keywords"
msgstr "Ne pas remplacer les mots clefs"
-#: ../svn/main.c:327
+#: ../svn/main.c:337
msgid "apply the unidiff in reverse"
msgstr "applique le \"unidiff\" en sens inverse"
-#: ../svn/main.c:329
+#: ../svn/main.c:339
msgid "ignore whitespace during pattern matching"
msgstr "ignore les espaces dans la comparaison de motif"
-#: ../svn/main.c:330
+#: ../svn/main.c:340
msgid "produce diff output"
msgstr "produit une sortie \"diff\""
-#: ../svn/main.c:332
+#. maps to show_diff
+#. diff options
+#: ../svn/main.c:342
+msgid "use ARG as diff command"
+msgstr "utilise ARG comme commande diff"
+
+#: ../svn/main.c:344
msgid "override diff-cmd specified in config file"
msgstr "ignore 'diff-cmd' spécifié dans le fichier de configuration"
-#: ../svn/main.c:334
+#: ../svn/main.c:346 ../svnlook/main.c:126
+msgid "do not print differences for deleted files"
+msgstr "n'affiche pas les différences pour les fichiers supprimés"
+
+#: ../svn/main.c:348
+msgid "don't diff copied or moved files with their source"
+msgstr "ne compare pas les fichiers copiés ou déplacés avec leur source"
+
+#: ../svn/main.c:350
+msgid "notice ancestry when calculating differences"
+msgstr "utilise l'ascendance pour calculer les différences"
+
+#: ../svn/main.c:351
+msgid "show a summary of the results"
+msgstr "affiche un résumé du résultat"
+
+#: ../svn/main.c:353
msgid "use git's extended diff format"
msgstr "utile le format de différence étendu de GIT"
-#: ../svn/main.c:336
+#: ../svn/main.c:355
+msgid "ignore properties during the operation"
+msgstr "ignore les propriétés pendant l'opération"
+
+#: ../svn/main.c:357
+msgid "show only properties during the operation"
+msgstr "affiche les propriétés seulement pendant l'opération"
+
+#: ../svn/main.c:359
+msgid ""
+"generate diff suitable for generic third-party\n"
+" patch tools; currently the same as\n"
+" --show-copies-as-adds --ignore-properties"
+msgstr ""
+"génère les différences pour un outil externe générique de \"patch\" ;\n"
+" actuellement identique à --show-copies-as-adds --ignore-properties"
+
+#: ../svn/main.c:367
msgid ""
"Allow merge into mixed-revision working copy.\n"
" Use of this option is not recommended!\n"
@@ -8339,7 +8547,29 @@ msgstr ""
" L'utilisation de cette option n'est pas recommandée !\n"
" Merci de lui préférer 'svn update'."
-#: ../svn/main.c:408
+#: ../svn/main.c:373
+msgid ""
+"Also commit file and dir externals reached by\n"
+" recursion. This does not include externals with a\n"
+" fixed revision. (See the svn:externals property)"
+msgstr ""
+"Propage également les fichiers et répertoires externes atteinds récursivement.\n"
+" Cela n'inclut pas les définitions externes avec une révision fixée.\n"
+" (Voir la propriété svn:externals)"
+
+#: ../svn/main.c:379
+msgid "Symmetric merge"
+msgstr "Fusion (merge) symétrique"
+
+#: ../svn/main.c:381
+msgid "use ARG as search pattern (glob syntax)"
+msgstr "Utilise ARG comme motif de recherche (syntaxe globale)"
+
+#: ../svn/main.c:384
+msgid "like --search, but case-insensitive"
+msgstr "Identique à --seach, mais ignore la casse"
+
+#: ../svn/main.c:431
msgid ""
"Put files and directories under version control, scheduling\n"
"them for addition to repository. They will be added in next commit.\n"
@@ -8349,11 +8579,11 @@ msgstr ""
"prévoyant leur ajout au dépôt lors de la prochaine propagation (commit).\n"
"usage : add CHEMIN...\n"
-#: ../svn/main.c:413
+#: ../svn/main.c:436
msgid "add intermediate parents"
msgstr "ajoute les répertoires intermédiaires"
-#: ../svn/main.c:416
+#: ../svn/main.c:439
msgid ""
"Output the content of specified files or\n"
"URLs with revision and author information in-line.\n"
@@ -8368,7 +8598,7 @@ msgstr ""
"\n"
" Si précisée, REV détermine quelle révision est d'abord regardée.\n"
-#: ../svn/main.c:425
+#: ../svn/main.c:448
msgid ""
"Output the content of specified files or URLs.\n"
"usage: cat TARGET[@REV]...\n"
@@ -8381,7 +8611,7 @@ msgstr ""
"\n"
" Si précisée, REV détermine quelle révision est d'abord regardée.\n"
-#: ../svn/main.c:433
+#: ../svn/main.c:456
msgid ""
"Associate (or dissociate) changelist CLNAME with the named files.\n"
"usage: 1. changelist CLNAME PATH...\n"
@@ -8391,7 +8621,7 @@ msgstr ""
"usage : 1. changelist CLNOM CHEMIN...\n"
" 2. changelist --remove CHEMIN...\n"
-#: ../svn/main.c:439
+#: ../svn/main.c:462
msgid ""
"Check out a working copy from a repository.\n"
"usage: checkout URL[@REV]... [PATH]\n"
@@ -8443,7 +8673,7 @@ msgstr ""
" Voir aussi 'svn help update' pour la liste des caractères possible \n"
" décrivant l'action choisie.\n"
-#: ../svn/main.c:466
+#: ../svn/main.c:489
msgid ""
"Recursively clean up the working copy, removing locks, resuming\n"
"unfinished operations, etc.\n"
@@ -8453,7 +8683,7 @@ msgstr ""
"reprenant les opérations en cours, etc.\n"
"usage : cleanup [CHEMIN...]\n"
-#: ../svn/main.c:472
+#: ../svn/main.c:495
msgid ""
"Send changes from your working copy to the repository.\n"
"usage: commit [PATH...]\n"
@@ -8471,7 +8701,7 @@ msgstr ""
" Les éléments propagés (commit) qui étaient verrouillés (locked) sont\n"
" déverrouillés (unlock) en cas de réussite.\n"
-#: ../svn/main.c:483
+#: ../svn/main.c:506
msgid ""
"Duplicate something in working copy or repository, remembering\n"
"history.\n"
@@ -8512,7 +8742,7 @@ msgstr ""
"dépôt. En conséquence, elles ne peuvent, par défaut, propager les \n"
"informations de suivi de fusion de la source à la destination.\n"
-#: ../svn/main.c:505
+#: ../svn/main.c:528
msgid ""
"Remove files and directories from version control.\n"
"usage: 1. delete PATH...\n"
@@ -8542,7 +8772,7 @@ msgstr ""
"\n"
" 2. Chaque URL est supprimée du dépôt via une propagation immédiate.\n"
-#: ../svn/main.c:521
+#: ../svn/main.c:544
msgid ""
"Display the differences between two revisions or paths.\n"
"usage: 1. diff [-c M | -r N[:M]] [TARGET[@REV]...]\n"
@@ -8599,7 +8829,7 @@ msgstr ""
" Utiliser simplement 'svn diff' pour afficher les modifications locales\n"
" dans la copie de travail.\n"
-#: ../svn/main.c:549
+#: ../svn/main.c:573
msgid ""
"Create an unversioned copy of a tree.\n"
"usage: 1. export [-r REV] URL[@PEGREV] [PATH]\n"
@@ -8637,7 +8867,7 @@ msgstr ""
"\n"
" Si spécifiée, PEGREV donne la révision de la cible d'abord regardée.\n"
-#: ../svn/main.c:571
+#: ../svn/main.c:595
msgid ""
"Describe the usage of this program or its subcommands.\n"
"usage: help [SUBCOMMAND...]\n"
@@ -8645,7 +8875,7 @@ msgstr ""
"Décrit l'usage de ce programme ou de ses sous-commandes.\n"
"usage : help [SOUS_COMMANDE...]\n"
-#: ../svn/main.c:577
+#: ../svn/main.c:601
msgid ""
"Commit an unversioned file or tree into the repository.\n"
"usage: import [PATH] URL\n"
@@ -8668,7 +8898,7 @@ msgstr ""
" Les objects non versionnables tels les périphériques ou les pipes sont\n"
" ignorés si l'option '--force' est spécifiée.\n"
-#: ../svn/main.c:591
+#: ../svn/main.c:615
msgid ""
"Display information about a local or remote item.\n"
"usage: info [TARGET[@REV]...]\n"
@@ -8684,7 +8914,7 @@ msgstr ""
" CIBLE peut être un chemin dans une copie de travail ou une URL.\n"
" Si REV est spécifié, cette révision est d'abord regardée.\n"
-#: ../svn/main.c:601
+#: ../svn/main.c:625
msgid ""
"List directory entries in the repository.\n"
"usage: list [TARGET[@REV]...]\n"
@@ -8721,7 +8951,7 @@ msgstr ""
" Taille (en octets)\n"
" Date et heure de la dernière propagation\n"
-#: ../svn/main.c:622
+#: ../svn/main.c:646
msgid ""
"Lock working copy paths or URLs in the repository, so that\n"
"no other user can commit changes to them.\n"
@@ -8735,19 +8965,19 @@ msgstr ""
" Utiliser --force pour voler le verrou d'un autre utilisateur ou d'une\n"
" autre copie de travail.\n"
-#: ../svn/main.c:628
+#: ../svn/main.c:652
msgid "read lock comment from file ARG"
msgstr "lit les commentaire de verrouillage à partir du fichier ARG"
-#: ../svn/main.c:629
+#: ../svn/main.c:653
msgid "specify lock comment ARG"
msgstr "précise le commentaire de verrouillage ARG"
-#: ../svn/main.c:630
+#: ../svn/main.c:654
msgid "force validity of lock comment source"
msgstr "force la validité de la source du commentaire de verrouillage"
-#: ../svn/main.c:633
+#: ../svn/main.c:657
msgid ""
"Show the log messages for a set of revision(s) and/or path(s).\n"
"usage: 1. log [PATH][@REV]\n"
@@ -8778,13 +9008,45 @@ msgid ""
" follow copy history by default. Use --stop-on-copy to disable this\n"
" behavior, which can be useful for determining branchpoints.\n"
"\n"
+" The --depth option is only valid in combination with the --diff option\n"
+" and limits the scope of the displayed diff to the specified depth.\n"
+"\n"
+" If the --search option is used, log messages are displayed only if the\n"
+" provided search pattern matches the author, date, log message text,\n"
+" or, if the --verbose option is also provided, a changed path.\n"
+" The search pattern may include glob syntax wildcards:\n"
+" ? matches any single character\n"
+" * matches a sequence of arbitrary characters\n"
+" [...] matches any of the characters listed inside the brackets\n"
+" If --limit is used in combination with --search, --limit restricts the\n"
+" number of log messages searched, rather than restricting the output\n"
+" to a particular number of matching log messages.\n"
+"\n"
" Examples:\n"
-" svn log\n"
-" svn log foo.c\n"
-" svn log bar.c@42\n"
-" svn log http://www.example.com/repo/project/foo.c\n"
-" svn log http://www.example.com/repo/project foo.c bar.c\n"
-" svn log http://www.example.com/repo/project@50 foo.c bar.c\n"
+"\n"
+" Show the latest 5 log messages for the current working copy\n"
+" directory and display paths changed in each commit:\n"
+" svn log -l 5 -v\n"
+"\n"
+" Show the log for bar.c as of revision 42:\n"
+" svn log bar.c@42\n"
+"\n"
+" Show log messages and diffs for each commit to foo.c:\n"
+" svn log --diff http://www.example.com/repo/project/foo.c\n"
+" (Because the above command uses a full URL it does not require\n"
+" a working copy.)\n"
+"\n"
+" Show log messages for the children foo.c and bar.c of the directory\n"
+" '/trunk' as it appeared in revision 50, using the ^/ URL shortcut:\n"
+" svn log ^/trunk@50 foo.c bar.c\n"
+"\n"
+" Show the log messages for any incoming changes to foo.c during the\n"
+" next 'svn update':\n"
+" svn log -r BASE:HEAD foo.c\n"
+"\n"
+" Show the log message for the revision in which /branches/foo\n"
+" was created:\n"
+" svn log --stop-on-copy --limit 1 -r0:HEAD ^/branches/foo\n"
msgstr ""
"Affiche les entrées du journal pour un ensemble de révisions ou de chemins.\n"
"usage : 1. log [CHEMIN][@REV]\n"
@@ -8812,60 +9074,349 @@ msgstr ""
" des copies par défaut. --stop-on-copy désactive ce comportement, ce qui\n"
" est utile pour déterminer les points de branchements.\n"
"\n"
+" L'option --depth n'est valide qu'en combinaison avec l'option --diff,\n"
+" et limite l'étendue des modifications affichée à cette profondeur.\n"
+"\n"
+" Si l'option --search est utilisée, une entrée n'est affichée que si le\n"
+" motif de recherche est reconnu sur l'auteur, la date, le texte du messsage,\n"
+" ou, avec l'option --verbiose, un chemin modifié.\n"
+" Le motif de recherche peut inclure les jokers suivants :\n"
+" ? un seul caractère\n"
+" * une séquence arbitraire de caractères\n"
+" [...] un des caractère dans la liste entre crochets\n"
+" Si l'option --limit est utilisé en combinaison avec --search, elle limite\n"
+" le nombre de message comparé, plutôt que de restreindre ceux affichés.\n"
+"\n"
" Exemples :\n"
-" svn log\n"
-" svn log truc.c\n"
-" svn log bidule.c@42\n"
-" svn log http://www.exemple.fr/depot/projet/truc.c\n"
-" svn log http://www.exemple.fr/depot/projet truc.c bidule.c\n"
-" svn log http://www.exemple.fr/depot/projet@50 truc.c bidule.c\n"
-
-#: ../svn/main.c:672
+"\n"
+" Affiche les 5 dernières entrées pour le répertoire de la copie de travail\n"
+" et affiche les chemins modifiées à chaque propagation :\n"
+" svn log -l 5 -v\n"
+"\n"
+" Affiche le message pour \"tru.c\" à la révision 42 :\n"
+" svn log tru.c@42\n"
+"\n"
+" Affiche les messages et les différences pour chaque propagation (commit)\n"
+" sur \"fou.c\" :\n"
+" svn log --diff http://example.com/repo/project/fou.c\n"
+" (comme la commande ci-dessus utilise une URL complète, une copie de travail\n"
+" n'est pas nécessaire.)\n"
+"\n"
+" Affiche les messages sur les descendants de \"fou.c\" et \"tru.c\" du répertoire\n"
+" '/trunk' tels qu'ils apparaissaient à la révision 50, avec le raccourcit\n"
+" d'URL '^/' :\n"
+" svn log ^/trunk@50 fou.c tru.c\n"
+"\n"
+" Affiche les messages pour toutes les modifications sur \"fou.c\" pour le\n"
+" prochain 'svn update' :\n"
+" svn log -r BASE:HEAD fou.c\n"
+"\n"
+" Affiche le message pour la révision de création de ^/branches/truc :\n"
+" svn log --stop-on-copy --limit 1 -r0:HEAD ^/branches/truc\n"
+
+#: ../svn/main.c:729
msgid "retrieve revision property ARG"
msgstr "Retrouve la propriété de révision ARG"
-#: ../svn/main.c:673
+#: ../svn/main.c:730
msgid "the change made in revision ARG"
msgstr "Le changement fait à la révision ARG"
-#: ../svn/main.c:676
-msgid ""
-"Apply the differences between two sources to a working copy path.\n"
-"usage: 1. merge sourceURL1[@N] sourceURL2[@M] [WCPATH]\n"
-" 2. merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]\n"
-" 3. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [WCPATH]\n"
-"\n"
-" 1. In the first form, the source URLs are specified at revisions\n"
-" N and M. These are the two sources to be compared. The revisions\n"
-" default to HEAD if omitted.\n"
-"\n"
-" 2. In the second form, the URLs corresponding to the source working\n"
-" copy paths define the sources to be compared. The revisions must\n"
-" be specified.\n"
-"\n"
-" 3. In the third form, SOURCE can be either a URL or a working copy\n"
-" path (in which case its corresponding URL is used). SOURCE (in\n"
-" revision REV) is compared as it existed between revisions N and M\n"
-" for each revision range provided. If REV is not specified, HEAD\n"
-" is assumed. '-c M' is equivalent to '-r <M-1>:M', and '-c -M'\n"
-" does the reverse: '-r M:<M-1>'. If no revision ranges are\n"
-" specified, the default range of 0:REV is used. Multiple '-c'\n"
-" and/or '-r' options may be specified, and mixing of forward\n"
-" and reverse ranges is allowed.\n"
-"\n"
-" WCPATH is the working copy path that will receive the changes.\n"
-" If WCPATH is omitted, a default value of '.' is assumed, unless\n"
-" the sources have identical basenames that match a file within '.':\n"
-" in which case, the differences will be applied to that file.\n"
-"\n"
-" For each merged item a line will be printed with characters reporting\n"
-" the action taken. These characters have the following meaning:\n"
+#. For this large section, let's keep it unindented for easier
+#. * viewing/editing. It has been vim-treated with a textwidth=75 and 'gw'
+#. * (with quotes and newlines removed).
+#: ../svn/main.c:736
+msgid ""
+"Merge changes into a working copy.\n"
+"usage: 1. merge SOURCE[@REV] [TARGET_WCPATH]\n"
+" (the 'sync' merge)\n"
+" 2. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [TARGET_WCPATH]\n"
+" (the 'cherry-pick' merge)\n"
+" 3. merge --reintegrate SOURCE[@REV] [TARGET_WCPATH]\n"
+" (the 'reintegrate' merge)\n"
+" 4. merge SOURCE1[@N] SOURCE2[@M] [TARGET_WCPATH]\n"
+" (the '2-URL' merge)\n"
+"\n"
+" 1. This form is called a 'sync' (or 'catch-up') merge:\n"
+"\n"
+" svn merge SOURCE[@REV] [TARGET_WCPATH]\n"
+"\n"
+" A sync merge is used to fetch all the latest changes made on a parent\n"
+" branch. In other words, the target branch has originally been created\n"
+" by copying the source branch, and any changes committed on the source\n"
+" branch since branching are applied to the target branch. This uses\n"
+" merge tracking to skip all those revisions that have already been\n"
+" merged, so a sync merge can be repeated periodically to stay up-to-\n"
+" date with the source branch.\n"
+"\n"
+" SOURCE specifies the branch from where the changes will be pulled, and\n"
+" TARGET_WCPATH specifies a working copy of the target branch to which\n"
+" the changes will be applied. Normally SOURCE and TARGET_WCPATH should\n"
+" each correspond to the root of a branch. (If you want to merge only a\n"
+" subtree, then the subtree path must be included in both SOURCE and\n"
+" TARGET_WCPATH; this is discouraged, to avoid subtree mergeinfo.)\n"
+"\n"
+" SOURCE is usually a URL. The optional '@REV' specifies both the peg\n"
+" revision of the URL and the latest revision that will be considered\n"
+" for merging; if REV is not specified, the HEAD revision is assumed. If\n"
+" SOURCE is a working copy path, the corresponding URL of the path is\n"
+" used, and the default value of 'REV' is the base revision (usually the\n"
+" revision last updated to).\n"
+"\n"
+" TARGET_WCPATH is a working copy path; if omitted, '.' is assumed.\n"
+"\n"
+" - Sync Merge Example -\n"
+"\n"
+" A feature is being developed on a branch called 'feature', which has\n"
+" originally been a copy of trunk. The feature branch has been regularly\n"
+" synced with trunk to keep up with the changes made there. The previous\n"
+" sync merges are not shown on this diagram, and the last of them was\n"
+" done when HEAD was r100. Currently, HEAD is r200.\n"
+"\n"
+" feature +------------------------o-----\n"
+" / ^\n"
+" / ............ |\n"
+" / . . /\n"
+" trunk ------+------------L--------------R------\n"
+" r100 r200\n"
+"\n"
+" Subversion will locate all the changes on 'trunk' that have not yet\n"
+" been merged into the 'feature' branch. In this case that is a single\n"
+" range, r100:200. In the diagram above, L marks the left side\n"
+" (trunk@100) and R marks the right side (trunk@200) of the merge. The\n"
+" difference between L and R will be applied to the target working copy\n"
+" path. In this case, the working copy is a clean checkout of the entire\n"
+" 'feature' branch.\n"
+"\n"
+" To perform this sync merge, have a clean working copy of the feature\n"
+" branch and run the following command in its top-level directory:\n"
+"\n"
+" svn merge ^/trunk\n"
+"\n"
+" Note that the merge is now only in your local working copy and still\n"
+" needs to be committed to the repository so that it can be seen by\n"
+" others. You can review the changes and you may have to resolve\n"
+" conflicts before you commit the merge.\n"
+"\n"
+"\n"
+" 2. This form is called a 'cherry-pick' merge:\n"
+"\n"
+" svn merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [TARGET_WCPATH]\n"
+"\n"
+" A cherry-pick merge is used to merge specific revisions (or revision\n"
+" ranges) from one branch to another. By default, this uses merge\n"
+" tracking to automatically skip any revisions that have already been\n"
+" merged to the target; you can use the --ignore-ancestry option to\n"
+" disable such skipping.\n"
+"\n"
+" SOURCE is usually a URL. The optional '@REV' specifies only the peg\n"
+" revision of the URL and does not affect the merge range; if REV is not\n"
+" specified, the HEAD revision is assumed. If SOURCE is a working copy\n"
+" path, the corresponding URL of the path is used, and the default value\n"
+" of 'REV' is the base revision (usually the revision last updated to).\n"
+"\n"
+" TARGET_WCPATH is a working copy path; if omitted, '.' is assumed.\n"
+"\n"
+" The revision ranges to be merged are specified by the '-r' and/or '-c'\n"
+" options. '-r N:M' refers to the difference in the history of the\n"
+" source branch between revisions N and M. You can use '-c M' to merge\n"
+" single revisions: '-c M' is equivalent to '-r <M-1>:M'. Each such\n"
+" difference is applied to TARGET_WCPATH.\n"
+"\n"
+" If the mergeinfo in TARGET_WCPATH indicates that revisions within the\n"
+" range were already merged, changes made in those revisions are not\n"
+" merged again. If needed, the range is broken into multiple sub-ranges,\n"
+" and each sub-range is merged separately.\n"
+"\n"
+" A 'reverse range' can be used to undo changes. For example, when\n"
+" source and target refer to the same branch, a previously committed\n"
+" revision can be 'undone'. In a reverse range, N is greater than M in\n"
+" '-r N:M', or the '-c' option is used with a negative number: '-c -M'\n"
+" is equivalent to '-r M:<M-1>'.\n"
+"\n"
+" Multiple '-c' and/or '-r' options may be specified and mixing of\n"
+" forward and reverse ranges is allowed.\n"
+"\n"
+" - Cherry-pick Merge Example -\n"
+"\n"
+" A bug has been fixed on trunk in revision 50. This fix needs to\n"
+" be merged from trunk onto the release branch.\n"
+"\n"
+" 1.x-release +-----------------------o-----\n"
+" / ^\n"
+" / |\n"
+" / |\n"
+" trunk ------+--------------------------LR-----\n"
+" r50\n"
+"\n"
+" In the above diagram, L marks the left side (trunk@49) and R marks the\n"
+" right side (trunk@50) of the merge. The difference between the left\n"
+" and right side is applied to the target working copy path.\n"
+"\n"
+" Note that the difference between revision 49 and 50 is exactly those\n"
+" changes that were committed in revision 50, not including changes\n"
+" committed in revision 49.\n"
+"\n"
+" To perform the merge, have a clean working copy of the release branch\n"
+" and run the following command in its top-level directory; remember\n"
+" that the default target is '.':\n"
+"\n"
+" svn merge -c50 ^/trunk\n"
+"\n"
+" You can also cherry-pick several revisions and/or revision ranges:\n"
+"\n"
+" svn merge -c50,54,60 -r65:68 ^/trunk\n"
+"\n"
+"\n"
+" 3. This form is called a 'reintegrate merge':\n"
+"\n"
+" svn merge --reintegrate SOURCE[@REV] [TARGET_WCPATH]\n"
+"\n"
+" In a reintegrate merge, an (e.g. feature) branch is merged back to its\n"
+" originating branch. In other words, the source branch has originally\n"
+" been created by copying the target branch, development has concluded\n"
+" on the source branch and it should now be merged back into the target\n"
+" branch.\n"
+" \n"
+" SOURCE is the URL of a branch to be merged back. If REV is specified,\n"
+" it is used as the peg revision for SOURCE; if REV is not specified,\n"
+" the HEAD revision is assumed.\n"
+"\n"
+" TARGET_WCPATH is a working copy of the branch the changes will be\n"
+" applied to.\n"
+"\n"
+" - Reintegrate Merge Example -\n"
+"\n"
+" A feature has been developed on a branch called 'feature'. The feature\n"
+" branch started as a copy of trunk@W. Work on the feature has completed\n"
+" and it should be merged back into the trunk.\n"
+"\n"
+" The feature branch was last synced with trunk up to revision X. So the\n"
+" difference between trunk@X and feature@HEAD contains the complete set\n"
+" of changes that implement the feature, and no other changes. These\n"
+" changes are applied to trunk.\n"
+"\n"
+" feature +--------------------------------R\n"
+" / . \\\n"
+" / ............. \\\n"
+" / . v\n"
+" trunk ------+--------------------L------------------o\n"
+" rW rX\n"
+"\n"
+" In the diagram above, L marks the left side (trunk@X) and R marks the\n"
+" right side (feature@HEAD) of the merge. The difference between the\n"
+" left and right side is merged into trunk, the target.\n"
+"\n"
+" To perform the merge, have a clean working copy of trunk and run the\n"
+" following command in its top-level directory:\n"
+"\n"
+" svn merge --reintegrate ^/feature\n"
+"\n"
+" To prevent unnecessary merge conflicts, a reintegrate merge requires\n"
+" that TARGET_WCPATH is not a mixed-revision working copy, has no local\n"
+" modifications, and has no switched subtrees.\n"
+"\n"
+" A reintegrate merge also requires that the source branch is coherently\n"
+" synced with the target -- in the above example, this means that all\n"
+" revisions between the branch point W and the last merged revision X\n"
+" are merged to the feature branch, so that there are no unmerged\n"
+" revisions in-between.\n"
+"\n"
+" After the reintegrate merge, the feature branch cannot be synced to\n"
+" the trunk again without merge conflicts. If further work must be done\n"
+" on the feature branch, it should be deleted and then re-created.\n"
+"\n"
+"\n"
+" 4. This form is called a '2-URL merge':\n"
+"\n"
+" svn merge SOURCE1[@N] SOURCE2[@M] [TARGET_WCPATH]\n"
+"\n"
+" Two source URLs are specified, together with two revisions N and M.\n"
+" The two sources are compared at the specified revisions, and the\n"
+" difference is applied to TARGET_WCPATH, which is a path to a working\n"
+" copy of another branch. The three branches involved can be completely\n"
+" unrelated.\n"
+"\n"
+" You should use this merge variant only if the other variants do not\n"
+" apply to your situation, as this variant can be quite complex to\n"
+" master.\n"
+"\n"
+" If TARGET_WCPATH is omitted, a default value of '.' is assumed.\n"
+" However, in the special case where both sources refer to a file node\n"
+" with the same basename and a similarly named file is also found within\n"
+" '.', the differences will be applied to that local file. The source\n"
+" revisions default to HEAD if omitted.\n"
+"\n"
+" The sources can also be specified as working copy paths, in which case\n"
+" the URLs of the merge sources are derived from the working copies.\n"
+"\n"
+" - 2-URL Merge Example -\n"
+"\n"
+" Two features have been developed on separate branches called 'foo' and\n"
+" 'bar'. It has since become clear that 'bar' should be combined with\n"
+" the 'foo' branch for further development before reintegration.\n"
+"\n"
+" Although both feature branches originate from trunk, they are not\n"
+" directly related -- one is not a direct copy of the other. A 2-URL\n"
+" merge is necessary.\n"
+"\n"
+" The 'bar' branch has been synced with trunk up to revision 500.\n"
+" (If this revision number is not known, it can be located using the\n"
+" 'svn log' and/or 'svn mergeinfo' commands.)\n"
+" The difference between trunk@500 and bar@HEAD contains the complete\n"
+" set of changes related to feature 'bar', and no other changes. These\n"
+" changes are applied to the 'foo' branch.\n"
+"\n"
+" foo +-----------------------------------o\n"
+" / ^\n"
+" / /\n"
+" / r500 /\n"
+" trunk ------+------+-----------------L---------> /\n"
+" \\ . /\n"
+" \\ ............ /\n"
+" \\ . /\n"
+" bar +-----------------------------------R\n"
+"\n"
+" In the diagram above, L marks the left side (trunk@500) and R marks\n"
+" the right side (bar@HEAD) of the merge. The difference between the\n"
+" left and right side is applied to the target working copy path, in\n"
+" this case a working copy of the 'foo' branch.\n"
+"\n"
+" To perform the merge, have a clean working copy of the 'foo' branch\n"
+" and run the following command in its top-level directory:\n"
+"\n"
+" svn merge ^/trunk@500 ^/bar\n"
+"\n"
+" The exact changes applied by a 2-URL merge can be previewed with svn's\n"
+" diff command, which is a good idea to verify if you do not have the\n"
+" luxury of a clean working copy to merge to. In this case:\n"
+"\n"
+" svn diff ^/trunk@500 ^/bar@HEAD\n"
+"\n"
+"\n"
+" The following applies to all types of merges:\n"
+"\n"
+" To prevent unnecessary merge conflicts, svn merge requires that\n"
+" TARGET_WCPATH is not a mixed-revision working copy. Running 'svn update'\n"
+" before starting a merge ensures that all items in the working copy are\n"
+" based on the same revision.\n"
+"\n"
+" If possible, you should have no local modifications in the merge's target\n"
+" working copy prior to the merge, to keep things simpler. It will be\n"
+" easier to revert the merge and to understand the branch's history.\n"
+"\n"
+" Switched sub-paths should also be avoided during merging, as they may\n"
+" cause incomplete merges and create subtree mergeinfo.\n"
+"\n"
+" For each merged item a line will be printed with characters reporting the\n"
+" action taken. These characters have the following meaning:\n"
"\n"
" A Added\n"
" D Deleted\n"
" U Updated\n"
" C Conflict\n"
" G Merged\n"
+" E Existed\n"
" R Replaced\n"
"\n"
" Characters in the first column report about the item itself.\n"
@@ -8874,79 +9425,363 @@ msgid ""
" the first and second columns indicate textual conflicts in files\n"
" and in property values, respectively.\n"
"\n"
-" NOTE: Subversion will only record metadata to track the merge\n"
-" if the two sources are on the same line of history -- if the\n"
-" first source is an ancestor of the second, or vice-versa. This is\n"
-" guaranteed to be the case when using the third form listed above.\n"
-" The --ignore-ancestry option overrides this, forcing Subversion to\n"
-" regard the sources as unrelated and not to track the merge.\n"
+" - Merge Tracking -\n"
+"\n"
+" Subversion uses the svn:mergeinfo property to track merge history. This\n"
+" property is considered at the start of a merge to determine what to merge\n"
+" and it is updated at the conclusion of the merge to describe the merge\n"
+" that took place. Mergeinfo is used only if the two sources are on the\n"
+" same line of history -- if the first source is an ancestor of the second,\n"
+" or vice-versa (i.e. if one has originally been created by copying the\n"
+" other). This is verified and enforced when using sync merges and\n"
+" reintegrate merges.\n"
+"\n"
+" The --ignore-ancestry option prevents merge tracking and thus ignores\n"
+" mergeinfo, neither considering it nor recording it.\n"
+"\n"
+" - Merging from foreign repositories -\n"
+"\n"
+" Subversion does support merging from foreign repositories.\n"
+" While all merge source URLs must point to the same repository, the merge\n"
+" target working copy may come from a different repository than the source.\n"
+" However, there are some caveats. Most notably, copies made in the\n"
+" merge source will be transformed into plain additions in the merge\n"
+" target. Also, merge-tracking is not supported for merges from foreign\n"
+" repositories.\n"
msgstr ""
"Applique les différences entre deux sources à une copie de travail.\n"
-"usage : 1. merge URL1[@N] URL2[@M] [CHEMIN]\n"
-" 2. merge CHEMIN1@N CHEMIN2@M [CHEMIN]\n"
-" 3. merge [[-c M[,N]]... | [-r N:M]...] [SOURCE[@REV] [CHEMIN]]\n"
+"usage : 1. merge SOURCE[@REV] [CHEMIN_CT_CIBLE]\n"
+" (fusion de synchronisation)\n"
+" 2. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [CHEMIN_CT_CIBLE]\n"
+" (fusion cueillette)\n"
+" 3. merge --reintegrate SOURCE[@REV] [CHEMIN_CT_CIBLE]\n"
+" (fusion de réintégration)\n"
+" 4. merge SOURCE1[@N] SOURCE2[@M] [CHEMIN_CT_CIBLE]\n"
+" (fusion bi-URL)\n"
+"\n"
+" 1. La première forme est appelée \"synchronisation\" ou \"mise à jour\" :\n"
+" Elle permet de fusionner dans une branche toutes les modifications\n"
+" opérées sur son ancêtre immédiat.\n"
+" svn merge SOURCE[@REV] [CHEMIN_CT_CIBLE]\n"
+"\n"
+" Une fusion de synchronisation récupère les dernières modifications\n"
+" de la branche parente. En d'autres mots, la branche cible a été créée\n"
+" en copiant une branche source, et toutes les modifications propagées\n"
+" depuis sur cette source sont appliquée à la branche cible. Cette forme\n"
+" utilise le suivi des fusions pour connaître les modifications déjà\n"
+" incluses, donc cette opérations peut être répétée périodiquement pour\n"
+" rester synchroniser par rapport à la branche source.\n"
+"\n"
+" SOURCE spécifie la branche à partir de laquelle les modifications vont\n"
+" être récupérées, et CHEMIN_CT_CIBLE précise le chemin dans la copie\n"
+" de travail vers lequel les modifications vont être appliquées.\n"
+" Normallement les deux côtés doivent correspondre à la racine d'une branche.\n"
+" (Si vous voulez fusionner seulement un sous-arbre, alors son chemin doit\n"
+" être inclu dans SOURCE et CHEMIN_CT_CIBLE ; Cette usage est déconseillé\n"
+" pour éviter des informations de fusion par sous-arbre.)\n"
+"\n"
+" SOURCE est habituellement une URL. Si REV est spécifiée, elle est utilisée\n"
+" à la fois pour fixer SOURCE, i.e. SOURCE est cherché dans le dépôt à la\n"
+" révision REV, et la fusion est jusqu'à cette révision. Si REV n'est pas\n"
+" spécifiée, la dernière révision (HEAD) est prise. Si SOURCE est un chemin\n"
+" dans la copie de travail, la révision de base (en générale celle de la\n"
+" dernière mise à jour, i.e. \"svn up\") est utilisée.\n"
+"\n"
+" CHEMIN_CT_CIBLE est un chemin dans la copie de travail. Si l'argument\n"
+" est absent, le répertoire courant '.' est utilisé.\n"
+"\n"
+" - Exemple de fusion de synchronisation -\n"
+"\n"
+" Une fonctionnalité est développée dans une branche \"fonction\".\n"
+" Cette branche est régulièrement synchronisée avec le tronc (trunk) pour\n"
+" rester à jour vis-à-vis des modifications qui y sont effectuées.\n"
+"\n"
+" fonction +----------------------o-----\n"
+" / ^\n"
+" / |\n"
+" / ............. /\n"
+" / / .\n"
+" trunk -----+-----------G--------------D------\n"
+" r100 r200\n"
+"\n"
+" Subversion va rechercher toutes les modifications sur 'trunk' qui n'ont pas\n"
+" encore été fusionnées dans la branche 'fonction'. Dans ce cas, c'est\n"
+" simplement l'intervalle de révision r100:200. Dans le diagramme ci-dessus,\n"
+" G est la partie gauche de la fusion (trunk@100), et D la partie droite\n"
+" (trunk@200). La différence entre G et D est appliquée sur la cible.\n"
+"\n"
+" Pour effectuer la fusion, extraire une copie de travail propre de la\n"
+" branche \"fonction\" et exécuter la commande suivante dans le répertoire\n"
+" le plus haut de la copie de travail :\n"
+"\n"
+" svn merge ^/trunk\n"
+"\n"
+" Noter que la fusion est pour l'instant uniquement dans la copie de travail,\n"
+" et a encore besoin d'être propager (commit) vers le dépôt pour être visible\n"
+" des autres. Vous pouvez faire une revue des modifications, et vous pouvez\n"
+" avoir à résoudre des conflits, avant de propager définitivement (commit)\n"
+" la fusion.\n"
+"\n"
+"\n"
+" 2. Cette forme est appelée fusion 'cueillette'.\n"
+"\n"
+" Une fusion cueillette permet de sélectionner les révisions (ou intervalles\n"
+" de révision) spécifiques à fusionner d'une branche à l'autre. Par défaut,\n"
+" le suivi des fusions déjà appliquées est utilisé pour sauter toutes les\n"
+" révisions déjà faites. Utiliser l'option --ignore-ancestry pour ignorer\n"
+" ce comportement.\n"
+"\n"
+" SOURCE est habituellement une URL. Si REV est spécifiée, elle est utilisée\n"
+" à la fois pour fixer SOURCE, i.e. SOURCE est cherché dans le dépôt à la\n"
+" révision REV, et la fusion est jusqu'à cette révision. Si REV n'est pas\n"
+" spécifiée, la dernière révision (HEAD) est prise. Si SOURCE est un chemin\n"
+" dans la copie de travail, la révision de base (en générale celle de la\n"
+" dernière mise à jour, i.e. \"svn up\") est utilisée.\n"
+"\n"
+" CHEMIN_CT_CIBLE est un chemin dans la copie de travail. Si l'argument\n"
+" est absent, le répertoire courant '.' est utilisé.\n"
+"\n"
+" Les intervalles de révision à fusionner sont spécifiés avec les options\n"
+" '-r' et/ou '-c'.'-r N:M' spécifie un intervalle de révisions à fusionner,\n"
+" elle réfère à la différence entre SOURCE@REV telle qu'elle existait à la\n"
+" révision N, et SOURCE@REV telle qu'elle existait à la révision M. Vous\n"
+" pouvez utiliser '-c M' pour fusionner des révisions uniques : '-c M' est\n"
+" équivalent à '-r <M-1>:M'. Chacune de ces modifications est appliquée à\n"
+" CHEMIN_CT_CIBLE.\n"
+"\n"
+" Si les informations de fusion (propriétée svn:mergeinfo) dans\n"
+" CHEMIN_CT_CIBLE indiquent que des révisions sont déjà fusionnées, les\n"
+" modifications correspondantes ne sont pas appliquées à nouveau. Si\n"
+" nécessaire, l'intervalle est découpé en sous-intervalles qui sont chacun\n"
+" fusionnés séparément.\n"
"\n"
-" 1. Les URLs des deux références sont précisées.\n"
-" Les révisions peuvent aussi être précisées, si elles ne le\n"
-" sont pas, la révision utilisée est HEAD.\n"
"\n"
-" 2. Les URLs sont déduites des chemins dans la copie de travail.\n"
-" Les révisions doivent être précisées.\n"
+" Un intervalle inversé peut être utilisé pour défaire des modifications.\n"
+" Si N est plus grand que M, l'intervalle est inversé, et permet\n"
+" d'annuler les modifications de SOURCE entre les révisions N et M.\n"
"\n"
-" 3. Dans cette troisième forme, SOURCE est une URL ou un chemin dans la copie\n"
-" de travail (auquel cas l'URL correspondante est utilisée). \n"
-" La SOURCE à la révision REV est comparée telle qu'elle existait entre les\n"
-" révisions N et M pour chaque intervalle de révision fourni.\n"
-" Si REV n'est pas précisée, HEAD est utilisée. '-c M' est équivalent\n"
-" à '-r <M-1>:M' et '-c -M' à l'inverse, '-r M:<M-1>'. Si aucun intervalle\n"
-" de révision n'est précisé, 0:REV est utilisé. Des intervalles multiples\n"
-" avec '-c' et/ou '-r' peuvent être utilisé, et il est possible de mélanger\n"
-" des intervalles avant et arrière.\n"
+" On peut préciser des options -c et -r multiples, et mélanger des\n"
+" modifications en avant et des retours en arrière.\n"
"\n"
-" CHEMIN est l'élément à modifier dans la copie de travail. S'il est omis,\n"
-" '.' est utilisé, sauf si les noms des sources ont un dernier composant\n"
-" identique à un fichier dans '.', auquel cas ce fichier sera modifié.\n"
+" - Exemple de cueillette -\n"
"\n"
-" Pour chaque élément fusionné, une ligne résume l'action opérée :\n"
+" Une anomalie a été corrigée dans le tronc à la révision 50. Cette\n"
+" correction doit être fusionnée à partir du tronc vers la branche \"release\".\n"
"\n"
-" A Ajouté\n"
-" D Détruit\n"
-" U Mis à jour (exacte)\n"
-" G Fusionné (approchée)\n"
-" C Conflit (pas de solution trouvée)\n"
-" E Existe déjà\n"
-" R Remplacé\n"
+" 1.x-release +-----------------------o-----\n"
+" / ^\n"
+" / |\n"
+" / |\n"
+" trunk ------+--------------------------GD-----\n"
+" r50\n"
+"\n"
+" Dans le diagramme ci-dessus, G marque la partie gauche de la fusion\n"
+" (trunk@49) et D la partie droite (trunk@50). La différence entre les\n"
+" deux est appliquée sur la cible. Noter que cette différence contient\n"
+" exactement les modifications de la révision 50, et exclut celle de 49.\n"
+"\n"
+" Pour effectuer cette fusion, extraire une copie de travail de \"release\"\n"
+" et lancer la commande suivante dans le répertoire le plus haut de la\n"
+" copie de travail :\n"
+"\n"
+" svn merge -c50 ^/trunk\n"
+"\n"
+" Plusieurs modifications peuvent aussi être précisées :\n"
+"\n"
+" svn merge -c50,54,60 -r 65:68 ^/trunk\n"
+"\n"
+"\n"
+" 3. La troisième forme est une fusion de réintégration :\n"
+"\n"
+" svn merge --reintegrate SOURCE[@REV] [CHEMIN_CT_CIBLE]\n"
+"\n"
+" Dans une fusion de réintégration, une branche (par exemple 'fonction')\n"
+" et fusionnée vers sa branche d'origine. En d'autres mots, une branche\n"
+" a été créée à partir d'une branche initiale, des développements ont été\n"
+" effectués, et ces modifications doivent être maintenant incluses dans\n"
+" la branche d'origine.\n"
+"\n"
+" SOURCE est l'URL de la branche à fusionner en retour, usuellement dans\n"
+" la branche initiale à partir de laquelle est a été créée (ancêtre). Si\n"
+" REV est spécifié, on considère SOURCE dans le dépôt à la révision REV,\n"
+" sinon la dernière version est prise.\n"
+"\n"
+" CHEMIN_CT_CIBLE est la copie de travail destination pour appliquer les\n"
+" modifications.\n"
+"\n"
+" - Exemple de fusion de réintégration -\n"
+"\n"
+" Une fonctionnalité a été développée dans la branche \"fonction\", créée\n"
+" comme une copie de trunk@W. Le travail fini doit être fusionner en retour\n"
+" vers le tronc.\n"
+"\n"
+"\n"
+" fonction +-------------------------------D\n"
+" / . \\\n"
+" / .............. \\\n"
+" / . v\n"
+" trunk ------+------------------G-------------------o\n"
+" rW rX\n"
+"\n"
+" La branche \"fonction\" a été synchronisée avec son ancêtre immédiat à\n"
+" la révision X. Les différences entre trunk@X et fonction@HEAD (tête)\n"
+" implémentent juste la fonctionnalité et doivent être réintégrées au tronc.\n"
+"\n"
+" Dans le diagramme ci-dessus, G marque la partie gauche de la fusion\n"
+" (trunk@X), et D la partie droite (fonction@HEAD). La différence doit\n"
+" être fusionnée dans la cible.\n"
+"\n"
+" Pour effectuer la fusion, extraire une copie de travail du tronc (trunk),\n"
+" et lancer la commande suivante sur le répertoire le plus haut de la copie\n"
+" de travail :\n"
+"\n"
+" svn merge --reintegrate ^/fonction\n"
+"\n"
+" Pour éviter les conflits superflus, les fusions de réintégration requièrent\n"
+" que CHEMIN_CT_CIBLE soit bien à jour, sans révisions mélangées,\n"
+" modifications locales ou sous-répertoires basculés (switch).\n"
+"\n"
+" Les fusions de réintégration requièrent aussi que la source soit\n"
+" complètement synchronisée avec la cible depuis leur point de branchement\n"
+" commun. Dans l'exemple ci-dessus, cela implique que toutes les\n"
+" modifications du tronc (W:X) ont été fusionnées dans la branche avant\n"
+" de pouvoir faire une réintégration.\n"
+"\n"
+" Après une réintégration, la branche \"fonction\" ne peut *plus* être\n"
+" synchronisée avec le tronc sans risques de conflits. Il est donc\n"
+" préférable de recréer la branche après sa réintégration.\n"
+"\n"
+"\n"
+" 4. La quatrième forme opère à partir de deux URLs.\n"
+"\n"
+" svn merge SOURCE1[@N] SOURCE2[@M] [CHEMIN_CT_CIBLE]\n"
+"\n"
+" Les deux sources spécifiées par les URLS sont comparées, et les\n"
+" différences sont appliquées à la destination dans la copie de travail.\n"
+"\n"
+" Si non spécifiées, les dernières révisions sont prises en compte.\n"
+"\n"
+" Si CHEMIN_CT_CIBLE n'est pas spécifié, '.' est utilisé, sauf si les\n"
+" sources désignent un nom de fichier qui est dans le répertoire courant,\n"
+" auquel cas les différences sont appliquées à ce répertoire.\n"
+"\n"
+" Les sources peuvent être des chemins dans la copie de travail, auquel\n"
+" cas les URLs correspondantes sont considérées.\n"
+"\n"
+" Cette version de \"merge\" est la plus flexible, mais aussi la plus délicate\n"
+" à utiliser. On peut en effet désigner des branches complètement\n"
+" différentes. La probabilité de conflits est élevée. Dans la plupart des\n"
+" cas, la synchronisation, la cueillette et la réintégration suffisent et\n"
+" réduisent les risques d'erreurs.\n"
+"\n"
+" - Exemple de fusion à deux URLs -\n"
+"\n"
+" Une fonctionnalité est développée dans une branche \"fonction\".\n"
+" En parallèle, la prochaine version du logiciel est développée, dans une\n"
+" branche indépendante, et on souhaite y intégrer la nouvelle fonctionnalité.\n"
+"\n"
+" 3.x-release +-----------------------------------o\n"
+" / ^\n"
+" / /\n"
+" / /\n"
+" trunk ------+------+-----------------G> /\n"
+" \\\\ . /\n"
+" \\\\ ........... /\n"
+" \\\\ . /\n"
+" fonction +-----------------------------------D\n"
+"\n"
+" La branche \"fonction\" est synchronisée avec le \"trunk\", de manière\n"
+" à ce que les différences entre trunk@TÊTE (G) et fonction@TÊTE (D)\n"
+" implémentent juste la fonctionnalité. Ces développement sont\n"
+" intégrés à la nouvelle version (3.x-release) avec la commande :\n"
+"\n"
+" svn merge ^/trunk ^/fonction\n"
+"\n"
+"\n"
+" Avant ce type de fusion, il est pertinent de jeter un coup d'oeil sur\n"
+" les modifications qui vont être appliquées, ce qui peut-être fait avec\n"
+" la commande \"diff\" :\n"
+"\n"
+" svn diff ^/trunk ^/fonction\n"
+"\n"
+" Notez que la fusion peut impliquer des dépôts différents. Les deux\n"
+" sources doivent être dans le même dépôt, mais la destination peut être\n"
+" dans un dépôt distinct. Il n'y a pas de suivi des modifications effectué,\n"
+" et les copies sont transformées en simples ajouts.\n"
+"\n"
+"\n"
+" Les point suivant s'appliquent à tous les types de fusion :\n"
+"\n"
+" Pour éviter les conflits, la destination ne doit pas avoir un mélange de\n"
+" révisions. Utiliser \"svn up\" pour s'en assurer.\n"
"\n"
-" Le caractère dans la première colonne concerne l'objet lui-même.\n"
-" Dans la seconde, il s'agit de ses propriétés. Un 'C' dans la troisième\n"
-" colonne indique un conflit sur l'arborescence elle-même, pour un répertoire.\n"
+" Pour chaque élément fusionné une ligne est affiché avec un caractère qui\n"
+" résume l'action effectuée :\n"
"\n"
-" NOTE : Subversion garde trace en interne des fusions opérées si les deux\n"
-" sources sont parentes l'une de l'autre, dans un sens ou dans l'autre. Cela\n"
-" est garanti si la troisième forme ci-dessus est utilisée.\n"
-" L'option '--ignore-ancestry' permet de forcer Subversion à considérer les\n"
-" sources comme non parentes et de ne pas garder trace des fusions.\n"
+" A Ajouté\n"
+" D Détruit\n"
+" U mis à joUr\n"
+" C Conflit\n"
+" G fusionner\n"
+" E Existait\n"
+" R Remplacé\n"
+"\n"
+" Ces caractères en première colonne désignent l'objet lui-même, en seconde\n"
+" ses propriétés. Un 'C' en troisième colonne désigne un conflit\n"
+" d'arborescence.\n"
+"\n"
+" NOTE : Subversion utilise la propriété svn:mergeinfo pour garder trace de\n"
+" l'historique des fusions. Elle est utilisée pour déterminer quelles fusions\n"
+" sont nécessaires, mais uniquement si les deux branches ont un ancêtre commun.\n"
+" C'est toujours le cas avec les synchronisations ou les réintégrations.\n"
+" L'option --ignore-ancestry ignore ces informations et empêche de garder\n"
+" les traces des fusions effectuées.\n"
+"\n"
+" L'option --ignore-ancestry permet d'ignorer complètement le suivi des\n"
+" révisions (propriétés svn:mergeinfo).\n"
+"\n"
+" - Fusion à partir d'autres dépôts -\n"
+"\n"
+" Subversion permet de fusionner à partir d'autres dépôts que le dépôt\n"
+" de la branche. Si les deux URL doivent pointer vers le même dépôt, la\n"
+" copie de travail cible peut par contre être dans un dépôt différent.\n"
+" Il y cependant quelques caveats. En particulier, les copies faites\n"
+" dans le dépôt source sont transformées en ajouts directs dans le dépôt\n"
+" cible. De plus, aucun suivi des modifications n'est effectué.\n"
-#: ../svn/main.c:731
+#: ../svn/main.c:1062
msgid ""
"Display merge-related information.\n"
"usage: mergeinfo SOURCE[@REV] [TARGET[@REV]]\n"
"\n"
" Display information related to merges (or potential merges) between\n"
-" SOURCE and TARGET (default: '.'). If the --show-revs option\n"
-" is not provided, display revisions which have been merged from\n"
-" SOURCE to TARGET; otherwise, display the type of information\n"
-" specified by the --show-revs option.\n"
+" SOURCE and TARGET (default: '.'). Display the type of information\n"
+" specified by the --show-revs option. If --show-revs isn't passed,\n"
+" it defaults to --show-revs='merged'.\n"
+"\n"
+" If --revision (-r) is provided, filter the displayed information to\n"
+" show only that which is associated with the revisions within the\n"
+" specified range. Revision numbers, dates, and the 'HEAD' keyword are\n"
+" valid range values.\n"
+"\n"
+" The depth can be 'empty' or 'infinity'; the default is 'empty'.\n"
msgstr ""
"Affiche les informations liées aux fusions.\n"
"Usage : mergeinfo URL-SOURCE[@REV] [CIBLE[@REV]]\n"
"\n"
" Affiche les informations liées aux fusions (ou fusions potentielles) entre\n"
" URL-SOURCE et CIBLE. Si l'option '--show-revs' n'est pas fournie, affiche\n"
-" les révisions qui ont été fusionnées entre URL-SOURCE et CIBLE. Sinon, \n"
-" affiche les informations liées selon l'option '--show-revs'.\n"
+" les révisions qui ont été fusionnées entre URL-SOURCE et CIBLE. Sinon,\n"
+" affiche selon l'option '--show-revs=merged'.\n"
+"\n"
+" Si l'option --revision (-r) est donnée, filtre les informations affichées\n"
+" pour ne montrer que celles associées à l'intervalle de révision spécifié.\n"
+" Les numéros de révision, les dates, et le mot-clef 'HEAD' sont les intervalles\n"
+" valides.\n"
+"\n"
+" La profondeur peut-être 'empty' (vide, par défaut) ou 'infinity' (infini).\n"
-#: ../svn/main.c:742
+#: ../svn/main.c:1079
msgid ""
"Create a new directory under version control.\n"
"usage: 1. mkdir PATH...\n"
@@ -8975,7 +9810,7 @@ msgstr ""
" Dans les deux cas, les répertoires intermédiaires doivent déjà exister,\n"
" sauf si l'option --parents est présente.\n"
-#: ../svn/main.c:759
+#: ../svn/main.c:1096
msgid ""
"Move and/or rename something in working copy or repository.\n"
"usage: move SRC... DST\n"
@@ -9005,15 +9840,7 @@ msgstr ""
" URL -> URL : effectue un renommage côté serveur.\n"
" Toutes les sources doivent être du même type.\n"
-#: ../svn/main.c:776
-msgid ""
-"Permanently delete a specific node-revision from the repository.\n"
-"usage: obliterate URL@REV\n"
-msgstr ""
-"Efface de manière définitive une révision particulière du dépôt.\n"
-"usage : obliterate URL@REV\n"
-
-#: ../svn/main.c:782
+#: ../svn/main.c:1112
msgid ""
"Apply a patch to a working copy.\n"
"usage: patch PATCHFILE [WCPATH]\n"
@@ -9050,6 +9877,13 @@ msgid ""
" for deletion. If the patch creates a new file, that file is scheduled\n"
" for addition. Use 'svn revert' to undo deletions and additions you\n"
" do not agree with.\n"
+"\n"
+" Hint: If the patch file was created with Subversion, it will contain\n"
+" the number of a revision N the patch will cleanly apply to\n"
+" (look for lines like '--- foo/bar.txt (revision N)').\n"
+" To avoid rejects, first update to the revision N using\n"
+" 'svn update -r N', apply the patch, and then update back to the\n"
+" HEAD revision. This way, conflicts can be resolved interactively.\n"
msgstr ""
"Applique un correctif (patch) sur la copie de travail\n"
"usage : patch FICHIER_PATCH [CHEMIN]\n"
@@ -9083,8 +9917,15 @@ msgstr ""
" début de ligne. Ces modifications doivent être validées avec attention.\n"
" Si un correctif ajoute un fichier, il est ajouté à svn. Utiliser 'svn revert'\n"
" pour annuler en cas de désaccord.\n"
+"\n"
+" Conseil : Si le correctif a été créé par Subversion, il contient le numéro\n"
+" de révision qui permet une application sans erreur (voir les lignes de type\n"
+" '--- truc/bidule.txt (revision N)'). Pour éviter les rejets, se mettre\n"
+" d'abord à la révision N 'svn update -r N', appliquer le patch, puis se\n"
+" remettre à la révision de tête, ce qui permet de résoudre les conflits en\n"
+" interactif.\n"
-#: ../svn/main.c:822
+#: ../svn/main.c:1159
msgid ""
"Remove a property from files, dirs, or revisions.\n"
"usage: 1. propdel PROPNAME [PATH...]\n"
@@ -9102,7 +9943,7 @@ msgstr ""
" 2. Supprime une propriété non versionnée d'une révision du dépôt.\n"
" CIBLE détermine uniquement à quel dépôt accéder.\n"
-#: ../svn/main.c:832
+#: ../svn/main.c:1169
msgid ""
"Edit a property with an external editor.\n"
"usage: 1. propedit PROPNAME TARGET...\n"
@@ -9124,7 +9965,7 @@ msgstr ""
"\n"
"Voir 'svn help propset' pour plus d'informations sur définir des propriétés.\n"
-#: ../svn/main.c:844
+#: ../svn/main.c:1181
msgid ""
"Print the value of a property on files, dirs, or revisions.\n"
"usage: 1. propget PROPNAME [TARGET[@REV]...]\n"
@@ -9135,13 +9976,15 @@ msgid ""
" 2. Prints unversioned remote prop on repos revision.\n"
" TARGET only determines which repository to access.\n"
"\n"
-" By default, this subcommand will add an extra newline to the end\n"
-" of the property values so that the output looks pretty. Also,\n"
-" whenever there are multiple paths involved, each property value\n"
-" is prefixed with the path with which it is associated. Use the\n"
-" --strict option to disable these beautifications (useful when\n"
-" redirecting a binary property value to a file, but available only\n"
-" if you supply a single TARGET to a non-recursive propget operation).\n"
+" With --verbose, the target path and the property name are printed on\n"
+" separate lines before each value, like 'svn proplist --verbose'.\n"
+" Otherwise, if there is more than one TARGET or a depth other than\n"
+" 'empty', the target path is printed on the same line before each value.\n"
+"\n"
+" By default, an extra newline is printed after the property value so that\n"
+" the output looks pretty. With a single TARGET and depth 'empty', you can\n"
+" use the --strict option to disable this (useful when redirecting a binary\n"
+" property value to a file, for example).\n"
msgstr ""
"Affiche la valeur d'une propriété de fichiers, répertoires ou révisions.\n"
"usage : 1. propget PROPNOM [CIBLE[@REV]...]\n"
@@ -9152,14 +9995,25 @@ msgstr ""
" 2. Affiche une propriété non versionnée d'une révision du dépôt.\n"
" CIBLE détermine uniquement à quel dépôt accéder.\n"
"\n"
+" Avec --verbose, le chemin cible et le nom de propriété sont affichés sur\n"
+" des lignes séparées avant chaque valeur, comme 'svn proplist --verbose'.\n"
+" Sinon, si il y a plus d'une CIBLE ou une profondeur non vide (empty),\n"
+" le chemin cible est afficé sur la même ligne devant la valeur.\n"
+"\n"
" Cette sous-commande ajoute par défaut un saut de ligne au texte de la\n"
-" propriété, afin d'embellir le résultat. Lorsque plusieurs chemins sont\n"
-" précisés, chaque valeur affichée est préfixée par le chemin associé.\n"
-" Utiliser --strict pour désactiver ces améliorations esthétiques, par\n"
-" exemple pour rediriger les propriétés binaires vers un fichier, mais\n"
-" seulement disponible sur une cible unique et non récursive.\n"
+" propriété afin d'embellir le résultat. Avec un seul chemin et une profondeur\n"
+" vide (empty), l'option --strict désactive ces améliorations esthétiques,\n"
+" par exemple pour rediriger les propriétés binaires vers un fichier.\n"
+
+#: ../svn/main.c:1201 ../svn/main.c:1217
+msgid "print path, name and value on separate lines"
+msgstr "affiche le chemin, le nom et la valeur sur des lignes séparées"
+
+#: ../svn/main.c:1202
+msgid "don't print an extra newline"
+msgstr "n'affiche pas ne saut de ligne supplémentaires"
-#: ../svn/main.c:864
+#: ../svn/main.c:1205
msgid ""
"List all properties on files, dirs, or revisions.\n"
"usage: 1. proplist [TARGET[@REV]...]\n"
@@ -9169,6 +10023,9 @@ msgid ""
" revision the target is first looked up.\n"
" 2. Lists unversioned remote props on repos revision.\n"
" TARGET only determines which repository to access.\n"
+"\n"
+" With --verbose, the property values are printed as well, like 'svn propget\n"
+" --verbose'. With --quiet, the paths are not printed.\n"
msgstr ""
"Liste toutes les propriétés de fichiers, répertoires ou révisions.\n"
"usage : 1. proplist [CIBLE[@REV]...]\n"
@@ -9178,8 +10035,15 @@ msgstr ""
" Si précisée, REV détermine quelle révision est d'abord regardée.\n"
" 2. Liste les propriétés non versionnées d'une révision du dépôt.\n"
" CIBLE détermine uniquement à quel dépôt accéder.\n"
+"\n"
+" Avec --verbose, les valeurs des propriétés sont affichées aussi, comme\n"
+" 'svn proget --verbose'. Avec --quiet, les chemins ne sont pas affichés.\n"
+
+#: ../svn/main.c:1218
+msgid "don't print the path"
+msgstr "ne pas afficher le chemin"
-#: ../svn/main.c:875
+#: ../svn/main.c:1221
msgid ""
"Set the value of a property on files, dirs, or revisions.\n"
"usage: 1. propset PROPNAME PROPVAL PATH...\n"
@@ -9267,7 +10131,7 @@ msgstr ""
" Date, LastChangedDate - date et heure de la dernière modification.\n"
" Rev, Revision, - révision de la dernière modification.\n"
" LastChangedRevision\n"
-" Id - résumé compacte des 4 libellés précédents.\n"
+" Id - résumé compact des 4 libellés précédents.\n"
" Header - similaire à Id, mais avec l'URL complète.\n"
" svn:executable - Si présent, le fichier est exécutable.\n"
" Utiliser 'svn propdel svn:executable CHEMIN\" pour l'éliminer.\n"
@@ -9305,18 +10169,18 @@ msgstr ""
" modification non récursive sur un répertoire échouera. Une modification\n"
" récursive s'appliquera seulement aux fichiers fils du répertoire.\n"
-#: ../svn/main.c:943
+#: ../svn/main.c:1289
msgid "read property value from file ARG"
msgstr "prend la valeur d'une propriété dans le fichier ARG"
-#: ../svn/main.c:946
+#: ../svn/main.c:1292
msgid ""
"Relocate the working copy to point to a different repository root URL.\n"
"usage: 1. relocate FROM-PREFIX TO-PREFIX [PATH...]\n"
" 2. relocate TO-URL [PATH]\n"
"\n"
" Rewrite working copy URL metadata to reflect a syntactic change only.\n"
-" This is used when repository's root URL changes (such as a scheme\n"
+" This is used when a repository's root URL changes (such as a scheme\n"
" or hostname change) but your working copy still reflects the same\n"
" directory within the same repository.\n"
"\n"
@@ -9325,7 +10189,7 @@ msgid ""
" complete old and new URLs if you wish.) Use 'svn info' to determine\n"
" the current working copy URL.\n"
"\n"
-" 2. TO-URL is the (complete) new repository URL to use for for PATH.\n"
+" 2. TO-URL is the (complete) new repository URL to use for PATH.\n"
"\n"
" Examples:\n"
" svn relocate http:// svn:// project1 project2\n"
@@ -9352,19 +10216,26 @@ msgstr ""
" svn relocate http://www.exemple.com/repo/projet \\\\\n"
" svn://svn.exemple.com/repo/projet\n"
-#: ../svn/main.c:969
+#: ../svn/main.c:1315
msgid ""
"Resolve conflicts on working copy files or directories.\n"
-"usage: resolve --accept=ARG [PATH...]\n"
+"usage: resolve [PATH...]\n"
"\n"
-" Note: the --accept option is currently required.\n"
+" If no arguments are given, perform interactive conflict resolution for\n"
+" all conflicted paths in the working copy, with default depth 'infinity'.\n"
+" The --accept=ARG option prevents prompting and forces conflicts on PATH\n"
+" to resolved in the manner specified by ARG, with default depth 'empty'.\n"
msgstr ""
-"Résout les conflits de fichiers ou répertoires dans la copie de travail.\n"
-"Usage : resolve --accept=ARG [CHEMIN...]\n"
+"Résout les conflits sur des fichiers ou répertoires de la copie de travail\n"
+"usage : resolve [CHEMIN...]\n"
"\n"
-" Note : l'option '--accept' est actuellement requise.\n"
+" Si aucun n'argument n'est donné, fait une résolution interactive de conflits\n"
+" pour tous les chemins en conflit de la copie de travail, avec par défaut une\n"
+" profondeur infinie (infinity). L'option --accept=ARG empêche l'interaction et\n"
+" force la résolution de conflit avec la méthode spécifiée, avec une profondeur\n"
+" par défaut vide (empty).\n"
-#: ../svn/main.c:974
+#: ../svn/main.c:1323
msgid ""
"specify automatic conflict resolution source\n"
" ('base', 'working', 'mine-conflict',\n"
@@ -9376,7 +10247,7 @@ msgstr ""
" 'theirs-conflict' l'autre version en conflit,\n"
" 'mine-full' ma version, 'theirs-full' l'autre)"
-#: ../svn/main.c:981
+#: ../svn/main.c:1330
msgid ""
"Remove 'conflicted' state on working copy files or directories.\n"
"usage: resolved PATH...\n"
@@ -9393,21 +10264,21 @@ msgstr ""
" supprime simplement les fichiers relatifs au conflit pour permettre une\n"
" propagation (commit) ultérieure. Lui préférer 'svn resolve --accept working'.\n"
-#: ../svn/main.c:991
+#: ../svn/main.c:1340
msgid ""
"Restore pristine working copy file (undo most local edits).\n"
"usage: revert PATH...\n"
"\n"
" Note: this subcommand does not require network access, and resolves\n"
-" any conflicted states. However, it does not restore removed directories.\n"
+" any conflicted states.\n"
msgstr ""
"Restaure l'état initial d'un fichier en annulant les modifications locales.\n"
"usage : revert PATH...\n"
"\n"
" Note : cette sous-commande n'a pas besoin d'accès réseau, et résout les\n"
-" conflits. Elle ne restaure cependant pas les répertoires supprimés.\n"
+" conflits.\n"
-#: ../svn/main.c:999
+#: ../svn/main.c:1348
msgid ""
"Print the status of working copy files and directories.\n"
"usage: status [PATH...]\n"
@@ -9478,20 +10349,20 @@ msgid ""
"\n"
" Example output:\n"
" svn status wc\n"
-" M wc/bar.c\n"
-" A + wc/qax.c\n"
+" M wc/bar.c\n"
+" A + wc/qax.c\n"
"\n"
" svn status -u wc\n"
-" M 965 wc/bar.c\n"
-" * 965 wc/foo.c\n"
-" A + - wc/qax.c\n"
+" M 965 wc/bar.c\n"
+" * 965 wc/foo.c\n"
+" A + - wc/qax.c\n"
" Status against revision: 981\n"
"\n"
" svn status --show-updates --verbose wc\n"
-" M 965 938 kfogel wc/bar.c\n"
-" * 965 922 sussman wc/foo.c\n"
-" A + - 687 joe wc/qax.c\n"
-" 965 687 joe wc/zig.c\n"
+" M 965 938 kfogel wc/bar.c\n"
+" * 965 922 sussman wc/foo.c\n"
+" A + - 687 joe wc/qax.c\n"
+" 965 687 joe wc/zig.c\n"
" Status against revision: 981\n"
"\n"
" svn status\n"
@@ -9532,9 +10403,9 @@ msgstr ""
" un ajout avec reprise de l'historique\n"
" ' ' pas d'ajout avec reprise d'historique prévu\n"
" '+' ajout avec reprise d'historique prévu\n"
-" 5ème colonne : si l'élément est ré-aiguillé par rapport à son parent\n"
+" 5ème colonne : si l'élément est basculé par rapport à son parent\n"
" ' ' normal\n"
-" 'S' ré-aiguillé par rapport à son parent (switch)\n"
+" 'S' basculé par rapport à son parent (switch)\n"
" 'X' élément versionné créé par une référence externe\n"
" 6ème colonne : si un verrou est posé\n"
" (sans -u)\n"
@@ -9570,20 +10441,20 @@ msgstr ""
"\n"
" Exemples de sortie :\n"
" svn status wc\n"
-" M wc/bar.c\n"
-" A + wc/qax.c\n"
+" M wc/bar.c\n"
+" A + wc/qax.c\n"
"\n"
" svn status -u wc\n"
-" M 965 wc/truc.c\n"
-" * 965 wc/bidule.c\n"
-" A + - wc/machin.c\n"
+" M 965 wc/truc.c\n"
+" * 965 wc/bidule.c\n"
+" A + - wc/machin.c\n"
" État par rapport à la révision 981\n"
"\n"
" svn status --show-updates --verbose wc\n"
-" M 965 938 calvin wc/truc.c\n"
-" * 965 922 hobbes wc/bidule.c\n"
-" A + - 687 suzy wc/machin.c\n"
-" 965 687 suzy wc/zig.c\n"
+" M 965 938 calvin wc/truc.c\n"
+" * 965 922 hobbes wc/bidule.c\n"
+" A + - 687 suzy wc/machin.c\n"
+" 965 687 suzy wc/zig.c\n"
" État par rapport à la révision 981\n"
"\n"
" svn status\n"
@@ -9592,7 +10463,11 @@ msgstr ""
" > local manquant, édition entrante à la mise à jour\n"
" D wc/qax.c\n"
-#: ../svn/main.c:1093
+#: ../svn/main.c:1440
+msgid "don't print unversioned items"
+msgstr "n'affiche pas les éléments non versionnés"
+
+#: ../svn/main.c:1443
msgid ""
"Update the working copy to a different URL within the same repository.\n"
"usage: 1. switch URL[@PEGREV] [PATH]\n"
@@ -9618,6 +10493,10 @@ msgid ""
" Use the --set-depth option to set a new working copy depth on the\n"
" targets of this operation.\n"
"\n"
+" By default, Subversion will refuse to switch a working copy path to\n"
+" a new URL with which it shares no common version control ancestry.\n"
+" Use the '--ignore-ancestry' option to override this sanity check.\n"
+"\n"
" 2. The '--relocate' option is deprecated. This syntax is equivalent to\n"
" 'svn relocate FROM-PREFIX TO-PREFIX [PATH]'.\n"
"\n"
@@ -9636,7 +10515,7 @@ msgstr ""
"\n"
" 1. Actualise la copie de travail vis-à-vis d'une autre URL dans le dépôt.\n"
" Le comportement est similaire à 'svn update', et constitue la bonne\n"
-" manière d'aiguiller une copie de travail vers une branche dans le même\n"
+" manière de basculer une copie de travail vers une branche dans le même\n"
" dépôt. Si spécifiée, PEGREV détermine dans quelle révision la cible est\n"
" d'abord recherchée.\n"
"\n"
@@ -9655,6 +10534,10 @@ msgstr ""
" Utiliser l'option --set-depth pour définir la nouvelle profondeur de la\n"
" copie de travail sur la cible de l'opération.\n"
"\n"
+" Par défaut, Subversion refuse de basculer vers une URL qui n'a pas\n"
+" d'ancêtre commun avec la copie de travail. Utiliser l'option\n"
+" --ignore-ancestry pour ignorer ce contrôle.\n"
+"\n"
" 2. Réécrit les URL internes de la copie pour refléter un simple\n"
" changement syntaxique, par exemple si l'URL racine du dépôt a changé\n"
" comme dans le cas d'un renommage de machine, mais la copie de travail\n"
@@ -9674,7 +10557,7 @@ msgstr ""
" svn switch --relocate http://www.exemple.com/repos/projet\n"
" svn://svn.exemple.com/repos/projet\n"
-#: ../svn/main.c:1132
+#: ../svn/main.c:1486
msgid ""
"Unlock working copy paths or URLs.\n"
"usage: unlock TARGET...\n"
@@ -9686,7 +10569,7 @@ msgstr ""
"\n"
" Utiliser --force pour casser le verrou.\n"
-#: ../svn/main.c:1139
+#: ../svn/main.c:1493
msgid ""
"Bring changes from the repository into the working copy.\n"
"usage: update [PATH...]\n"
@@ -9707,7 +10590,9 @@ msgid ""
"\n"
" Characters in the first column report about the item itself.\n"
" Characters in the second column report about properties of the item.\n"
-" A 'C' in the third column indicates a tree conflict, while a 'C' in\n"
+" A 'B' in the third column signifies that the lock for the file has\n"
+" been broken or stolen.\n"
+" A 'C' in the fourth column indicates a tree conflict, while a 'C' in\n"
" the first and second columns indicate textual conflicts in files\n"
" and in property values, respectively.\n"
"\n"
@@ -9749,8 +10634,9 @@ msgstr ""
"\n"
" La première colonne concerne l'objet, la seconde ses propriétés.\n"
" Un 'C' en troisième colonne indique un conflit d'arborescence, tandis\n"
-" qu'un 'C' dans les deux promières indique un conflit sur le contenu du\n"
-" fichier ou ses propriétés.\n"
+" qu'un 'C' dans les deux premières indique un conflit sur le contenu du\n"
+" fichier ou ses propriétés. Un 'B' dans la troisième colonne indique\n"
+" qu'un verrou sur un fichier a été cassé ou volé.\n"
"\n"
" Si l'option --force est utilisée, c'est un peu subtile et compliqué...\n"
" La collision d'un objet non versionné dans la copie de travail et\n"
@@ -9773,106 +10659,106 @@ msgstr ""
" Utiliser l'option --set-depth pour définir une nouvelle profondeur pour\n"
" la copie de travail cible de l'opération.\n"
-#: ../svn/main.c:1187
+#: ../svn/main.c:1543
msgid ""
"Upgrade the metadata storage format for a working copy.\n"
-"usage: upgrade WCPATH...\n"
+"usage: upgrade [WCPATH...]\n"
+"\n"
+" Local modifications are preserved.\n"
msgstr ""
"Mise à jour des meta-données du format de stockage de la copie de travail.\n"
"usage : upgrade CHEMIN...\n"
+"\n"
+" Les modifications locales sont préservées.\n"
-#: ../svn/main.c:1231 ../svnadmin/main.c:86 ../svnlook/main.c:359
-#: ../svnrdump/svnrdump.c:64 ../svnsync/main.c:275
+#: ../svn/main.c:1589 ../svnadmin/main.c:87 ../svnlook/main.c:364
+#: ../svnrdump/svnrdump.c:63 ../svnsync/main.c:287
msgid "Caught signal"
msgstr "Signal reçu"
-#: ../svn/main.c:1351 ../svnlook/main.c:2362
+#: ../svn/main.c:1702 ../svnlook/main.c:2377
msgid "Non-numeric limit argument given"
msgstr "L'argument de l'option limit doit être numérique"
-#: ../svn/main.c:1357 ../svnlook/main.c:2368
+#: ../svn/main.c:1708 ../svnlook/main.c:2383
msgid "Argument to --limit must be positive"
msgstr "L'argument de --limit doit être positif"
-#: ../svn/main.c:1378 ../svn/main.c:1664
+#: ../svn/main.c:1729 ../svn/main.c:2016
msgid "Can't specify -c with --old"
msgstr "Option -c incompatible avec --old"
-#: ../svn/main.c:1410
+#: ../svn/main.c:1760
#, c-format
msgid "Negative number in range (%s) not supported with -c"
msgstr "Un nombre négatif dans l'intervalle (%s) n'est pas supporté avec l'option -c"
-#: ../svn/main.c:1423
+#: ../svn/main.c:1773
#, c-format
msgid "Non-numeric change argument (%s) given to -c"
msgstr "Argument non numérique (%s) donné à l'option -c"
-#: ../svn/main.c:1431
+#: ../svn/main.c:1781
msgid "There is no change 0"
msgstr "Il n'y a pas de changement (option -c) 0"
-#: ../svn/main.c:1479 ../svnadmin/main.c:1655 ../svnrdump/svnrdump.c:740
-#: ../svnsync/main.c:1865
+#: ../svn/main.c:1825 ../svnadmin/main.c:1858 ../svnrdump/svnrdump.c:781
+#: ../svnsync/main.c:2043
#, c-format
msgid "Syntax error in revision argument '%s'"
msgstr "Erreur de syntaxe à l'argument de révision '%s'"
-#: ../svn/main.c:1552 ../svn/main.c:1571
+#: ../svn/main.c:1898 ../svn/main.c:1917
#, c-format
msgid "Error converting depth from locale to UTF-8"
msgstr "Erreur en convertissant la profondeur de la 'locale' vers UTF8"
-#: ../svn/main.c:1560
+#: ../svn/main.c:1906
#, c-format
msgid "'%s' is not a valid depth; try 'empty', 'files', 'immediates', or 'infinity'"
msgstr "'%s' n'est pas un profondeur valide ; essayer 'empty' (vide), 'files' (fichiers), 'immediates' (immédiat) ou 'infinity' (infini)"
-#: ../svn/main.c:1579
+#: ../svn/main.c:1925
#, c-format
msgid "'%s' is not a valid depth; try 'exclude', 'empty', 'files', 'immediates', or 'infinity'"
msgstr "'%s' n'est pas un profondeur valide ; essayer 'exclude' (exclure), 'empty' (vide), 'files' (fichiers), 'immediates' (immédiat) ou 'infinity' (infini)"
-#: ../svn/main.c:1710
+#: ../svn/main.c:2062
#, c-format
msgid "Syntax error in native-eol argument '%s'"
msgstr "Erreur de syntaxe à l'argument de fin de ligne native (native-eol) '%s'"
-#: ../svn/main.c:1729
-msgid "Changelist names must not be empty"
-msgstr "La liste de changements ne doit pas être vide"
-
-#: ../svn/main.c:1765
+#: ../svn/main.c:2111
#, c-format
msgid "'%s' is not a valid --accept value"
msgstr "'%s' n'est pas valide pour --accept"
-#: ../svn/main.c:1774
+#: ../svn/main.c:2120
#, c-format
msgid "'%s' is not a valid --show-revs value"
msgstr "'%s' n'est pas valide pour --show-revs"
-#: ../svn/main.c:1787
+#: ../svn/main.c:2133
#, c-format
msgid "Invalid strip count '%s'"
msgstr "Nombre de composants '%s' invalide"
-#: ../svn/main.c:1793
+#: ../svn/main.c:2139
msgid "Argument to --strip must be positive"
msgstr "L'argument de --strip doit être positif"
-#: ../svn/main.c:1874 ../svndumpfilter/main.c:1398 ../svnlook/main.c:2441
+#: ../svn/main.c:2236 ../svndumpfilter/main.c:1474 ../svnlook/main.c:2456
#, c-format
msgid "Subcommand argument required\n"
msgstr "Argument de la sous-commande attendu\n"
-#: ../svn/main.c:1893 ../svnadmin/main.c:1795 ../svndumpfilter/main.c:1417
-#: ../svnlook/main.c:2460 ../svnrdump/svnrdump.c:825
+#: ../svn/main.c:2255 ../svnadmin/main.c:2002 ../svndumpfilter/main.c:1493
+#: ../svnlook/main.c:2475 ../svnrdump/svnrdump.c:869
#, c-format
msgid "Unknown command: '%s'\n"
msgstr "Commande inconnue : '%s'\n"
-#: ../svn/main.c:1927
+#: ../svn/main.c:2289
#, c-format
msgid ""
"Subcommand '%s' doesn't accept option '%s'\n"
@@ -9881,594 +10767,656 @@ msgstr ""
"La sous-commande '%s' n'accepte pas l'option '%s'\n"
"Entrer 'svn help %s' pour l'aide.\n"
-#: ../svn/main.c:1942
+#: ../svn/main.c:2304
msgid "Multiple revision arguments encountered; can't specify -c twice, or both -c and -r"
msgstr "Arguments de révision multiples : ne pas répéter -c, ou utiliser à la fois -c et -r"
-#: ../svn/main.c:1954
+#: ../svn/main.c:2316
msgid "--depth and --set-depth are mutually exclusive"
msgstr "--depth et --set-depth sont mutuellement exclusives"
-#: ../svn/main.c:1964
+#: ../svn/main.c:2326
msgid "--with-all-revprops and --with-no-revprops are mutually exclusive"
msgstr "--with-all-revprops et --with-no-revprops sont mutuellement exclusives"
-#: ../svn/main.c:1974
+#: ../svn/main.c:2336
msgid "--with-revprop and --with-no-revprops are mutually exclusive"
msgstr "--with-revprop et --with-no-revprops sont mutuellement exclusives"
-#: ../svn/main.c:1983 ../svnsync/main.c:1946
+#: ../svn/main.c:2349
+msgid "--message (-m) and --file (-F) are mutually exclusive"
+msgstr "--message (-m) et --file (-F) sont mutuellement exclusives"
+
+#: ../svn/main.c:2358 ../svnrdump/svnrdump.c:928 ../svnsync/main.c:2124
msgid "--trust-server-cert requires --non-interactive"
msgstr "--trust-server-cert requiert --non-interactive"
-#: ../svn/main.c:1993
+#: ../svn/main.c:2368
msgid "--diff-cmd and --internal-diff are mutually exclusive"
msgstr "--diff-cmd et --internal-diff sont mutuellement exclusives"
-#: ../svn/main.c:2053
+#: ../svn/main.c:2428
msgid "Log message file is a versioned file; use '--force-log' to override"
msgstr "Le fichier de l'entrée du journal est versionné; forcer avec '--force-log'"
-#: ../svn/main.c:2060
+#: ../svn/main.c:2435
msgid "Lock comment file is a versioned file; use '--force-log' to override"
msgstr "Le fichier de commentaire du verrou est versionné ; forcer avec '--force-log'"
-#: ../svn/main.c:2081
+#: ../svn/main.c:2456
msgid "The log message is a pathname (was -F intended?); use '--force-log' to override"
msgstr "Le message de propagation donné est un chemin (-F était voulu ?) ; forcer avec '--force-log'"
-#: ../svn/main.c:2088
+#: ../svn/main.c:2463
msgid "The lock comment is a pathname (was -F intended?); use '--force-log' to override"
msgstr "Le commentaire du verrou est un chemin de fichier (-F était voulu ?) ; forcer avec '--force-log'"
-#: ../svn/main.c:2102
+#: ../svn/main.c:2477
msgid "--relocate and --depth are mutually exclusive"
msgstr "--relocate et --depth sont mutuellement exclusives"
-#: ../svn/main.c:2110
+#: ../svn/main.c:2485
msgid "--relocate and --non-recursive (-N) are mutually exclusive"
msgstr "--relocate et --non-recursive (-N) sont mutuellement exclusives"
-#: ../svn/main.c:2195
+#: ../svn/main.c:2573
msgid "--auto-props and --no-auto-props are mutually exclusive"
msgstr "--auto-props et --no-auto-props sont mutuellement exclusives"
-#: ../svn/main.c:2209
+#: ../svn/main.c:2587
msgid "--reintegrate cannot be used with --ignore-ancestry or --record-only"
msgstr "--reintegrate ne peut être utilisé avec --ignore-ancestry ou --record-only"
-#: ../svn/main.c:2217
+#: ../svn/main.c:2595
msgid "--reintegrate cannot be used with --ignore-ancestry"
msgstr "--reintegrate ne peut être utilisé avec --ignore-ancestry"
-#: ../svn/main.c:2225
+#: ../svn/main.c:2603
msgid "--reintegrate cannot be used with --record-only"
msgstr "--reintegrate ne peut être utilise avec --record-only"
-#: ../svn/main.c:2349 ../svn/main.c:2355
+#: ../svn/main.c:2744 ../svn/main.c:2750
#, c-format
msgid "--accept=%s incompatible with --non-interactive"
msgstr "--accept=%s incompatible avec --non-interactive"
-#: ../svn/main.c:2382
-msgid "Try 'svn help' for more info"
-msgstr "Essayer 'svn help' pour plus d'information."
+#: ../svn/main.c:2777
+#, c-format
+msgid "Try 'svn help %s' for more information"
+msgstr "Essayer 'svn help %s' pour plus d'information"
-#: ../svn/main.c:2387
+#: ../svn/main.c:2783
msgid "Please see the 'svn upgrade' command"
msgstr "Voir la commande 'svn upgrade'"
-#: ../svn/main.c:2397
-msgid "svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)\n"
-msgstr "svn : lancer 'svn cleanup' pour enlever les verrous (cf 'svn help cleanup')\n"
+#: ../svn/main.c:2791
+msgid "Run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)"
+msgstr "Lancer 'svn cleanup' pour enlever les verrous (cf 'svn help cleanup')"
-#: ../svn/merge-cmd.c:65
+#: ../svn/merge-cmd.c:168
msgid "-r and -c can't be used with --reintegrate"
msgstr "-r et -c ne peuvent être utilisées avec --reintegrate"
-#: ../svn/merge-cmd.c:120
+#: ../svn/merge-cmd.c:223
msgid "Merge source required"
msgstr "Source de la fusion attendue"
-#: ../svn/merge-cmd.c:166
+#: ../svn/merge-cmd.c:269
msgid "Second revision required"
msgstr "Seconde révision attendue"
-#: ../svn/merge-cmd.c:175 ../svn/merge-cmd.c:208 ../svn/mergeinfo-cmd.c:84
-#: ../svnlook/main.c:1859 ../svnlook/main.c:2047 ../svnlook/main.c:2151
-#: ../svnlook/main.c:2183
+#: ../svn/merge-cmd.c:278 ../svn/merge-cmd.c:304 ../svn/mergeinfo-cmd.c:84
+#: ../svnadmin/main.c:1538 ../svnlook/main.c:1880 ../svnlook/main.c:2069
+#: ../svnlook/main.c:2173 ../svnlook/main.c:2205
msgid "Too many arguments given"
msgstr "Trop d'arguments donnés"
-#: ../svn/merge-cmd.c:197
+#: ../svn/merge-cmd.c:294
msgid "Cannot specify a revision range with two URLs"
msgstr "Impossible de préciser un intervalle de révision avec deux URLs"
-#: ../svn/merge-cmd.c:224
-msgid "A working copy merge source needs an explicit revision"
-msgstr "Une fusion à partir de sources locales nécessite une révision explicite"
-
-#: ../svn/merge-cmd.c:283
+#: ../svn/merge-cmd.c:376
msgid "--depth cannot be used with --reintegrate"
msgstr "--deth ne peut être utilisé avec --reintegrate"
-#: ../svn/merge-cmd.c:288
+#: ../svn/merge-cmd.c:381
msgid "--force cannot be used with --reintegrate"
msgstr "--force ne peut être utilisé avec --reintegrate"
-#: ../svn/merge-cmd.c:293
+#: ../svn/merge-cmd.c:386
msgid "--reintegrate can only be used with a single merge source"
msgstr "--reintegrate ne peut être utilisée qu'avec une seule source de fusion"
-#: ../svn/merge-cmd.c:297
+#: ../svn/merge-cmd.c:390
msgid "--allow-mixed-revisions cannot be used with --reintegrate"
msgstr "--allow-mixed-revision ne peut être utilisé avec --reintegrate"
+#: ../svn/merge-cmd.c:405
+msgid "SOURCE2 can't be used with --symmetric"
+msgstr "SOURCE2 ne peut être utilisé avec l'option --symmetric"
+
+#: ../svn/merge-cmd.c:409
+msgid "a revision range can't be used with --symmetric"
+msgstr "un intervalle de révision ne peut être utilisé avec l'option --symmetric"
+
+#: ../svn/merge-cmd.c:414 ../svn/merge-cmd.c:434 ../svn/merge-cmd.c:458
+#: ../svn/mergeinfo-cmd.c:120
+msgid "Source and target must be different but related branches"
+msgstr ""
+"La source et la destination doivent être des branches différentes mais reliées\n"
+"entre elles"
+
+#: ../svn/merge-cmd.c:516
+msgid ""
+"Merge tracking not possible, use --ignore-ancestry or\n"
+"fix invalid mergeinfo in target with 'svn propset'"
+msgstr ""
+"Garder la trace des fusions (merge) n'est pas possible. Utiliser l'option\n"
+"--ignore-ancestry ou corriger la propriété \"svn:mergeinfo\" invalide dans la\n"
+"cible"
+
#: ../svn/mergeinfo-cmd.c:81
msgid "Not enough arguments given"
msgstr "Nombre d'arguments insuffisant"
-#: ../svn/mkdir-cmd.c:91
+#: ../svn/mkdir-cmd.c:92
msgid "Try 'svn add' or 'svn add --non-recursive' instead?"
msgstr "Essayer plutôt 'svn add' ou 'svn add --non-recursive' ?"
-#: ../svn/mkdir-cmd.c:97
+#: ../svn/mkdir-cmd.c:98
msgid "Try 'svn mkdir --parents' instead?"
msgstr "Essayer plutôt 'svn mkdir --parents' ?"
-#: ../svn/notify.c:82 ../svn/status-cmd.c:87
+#: ../svn/notify.c:84 ../svn/status-cmd.c:89
msgid "Summary of conflicts:\n"
msgstr "Résumé des conflits :\n"
-#: ../svn/notify.c:86 ../svn/status-cmd.c:91
+#: ../svn/notify.c:88 ../svn/status-cmd.c:93
#, c-format
msgid " Text conflicts: %u\n"
msgstr " Conflits textuels : %u\n"
-#: ../svn/notify.c:90 ../svn/status-cmd.c:95
+#: ../svn/notify.c:92 ../svn/status-cmd.c:97
#, c-format
msgid " Property conflicts: %u\n"
msgstr " Conflits de propriétés : %u\n"
-#: ../svn/notify.c:94 ../svn/status-cmd.c:99
+#: ../svn/notify.c:96 ../svn/status-cmd.c:101
#, c-format
msgid " Tree conflicts: %u\n"
msgstr " Arborescences en conflit : %u\n"
-#: ../svn/notify.c:98
+#: ../svn/notify.c:100
#, c-format
msgid " Skipped paths: %u\n"
msgstr " Chemins omis : %u\n"
-#: ../svn/notify.c:134
+#: ../svn/notify.c:144
#, c-format
msgid "Skipped missing target: '%s'\n"
msgstr "Cible manquante omise : '%s'\n"
-#: ../svn/notify.c:141
+#: ../svn/notify.c:151
#, c-format
msgid "Skipped target: '%s' -- copy-source is missing\n"
msgstr "Cible omise : '%s' -- source de la copie manquante\n"
-#: ../svn/notify.c:148
+#: ../svn/notify.c:158
#, c-format
msgid "Skipped '%s'\n"
msgstr "'%s' omis\n"
-#: ../svn/notify.c:211
+#: ../svn/notify.c:165
+#, c-format
+msgid "Skipped '%s' -- An obstructing working copy was found\n"
+msgstr "Ignore '%s' -- Copie de travail gênante sur le chemin\n"
+
+#: ../svn/notify.c:172
+#, c-format
+msgid "Skipped '%s' -- Has no versioned parent\n"
+msgstr "Ignore '%s' -- pas de parent versionné\n"
+
+#: ../svn/notify.c:179
+#, c-format
+msgid "Skipped '%s' -- Access denied\n"
+msgstr "Ignore '%s' -- Accès interdit\n"
+
+#: ../svn/notify.c:186
+#, c-format
+msgid "Skipped '%s' -- Node remains in conflict\n"
+msgstr "Ignore '%s' -- le nœud reste en conflit\n"
+
+#: ../svn/notify.c:264
#, c-format
msgid "Restored '%s'\n"
msgstr "'%s' restauré\n"
-#: ../svn/notify.c:217
+#: ../svn/notify.c:270
#, c-format
msgid "Reverted '%s'\n"
msgstr "'%s' réinitialisé\n"
-#: ../svn/notify.c:223
+#: ../svn/notify.c:276
#, c-format
msgid "Failed to revert '%s' -- try updating instead.\n"
msgstr "Échec à la réinitialisation de '%s' ; essayer une mise à jour.\n"
-#: ../svn/notify.c:231
+#: ../svn/notify.c:284
#, c-format
msgid "Resolved conflicted state of '%s'\n"
msgstr "Conflit sur '%s' résolu\n"
-#: ../svn/notify.c:320 ../svn/notify.c:360
+#: ../svn/notify.c:375 ../svn/notify.c:415
#, c-format
msgid "> applied hunk ## -%lu,%lu +%lu,%lu ## with offset %s"
msgstr "> application bloc ## -%lu,%lu +%lu,%lu ## décallage %s"
-#: ../svn/notify.c:337 ../svn/notify.c:374
+#: ../svn/notify.c:392 ../svn/notify.c:429
#, c-format
msgid "> applied hunk @@ -%lu,%lu +%lu,%lu @@ with offset %s"
msgstr "> application bloc @@ -%lu,%lu +%lu,%lu @@ décallage %s"
-#: ../svn/notify.c:395
+#: ../svn/notify.c:450
#, c-format
-msgid "> applied hunk ## -%lu,%lu +%lu,%lu ## with fuzz %d (%s)\n"
-msgstr "> application bloc ## -%lu,%lu +%lu,%lu ## avec flou %d (%s)\n"
+msgid "> applied hunk ## -%lu,%lu +%lu,%lu ## with fuzz %lu (%s)\n"
+msgstr "> application bloc ## -%lu,%lu +%lu,%lu ## avec flou %lu (%s)\n"
-#: ../svn/notify.c:405
+#: ../svn/notify.c:460
#, c-format
-msgid "> applied hunk @@ -%lu,%lu +%lu,%lu @@ with fuzz %d\n"
-msgstr "> application bloc @@ -%lu,%lu +%lu,%lu @@ avec flou %d\n"
+msgid "> applied hunk @@ -%lu,%lu +%lu,%lu @@ with fuzz %lu\n"
+msgstr "> application bloc @@ -%lu,%lu +%lu,%lu @@ avec flou %lu\n"
-#: ../svn/notify.c:423
+#: ../svn/notify.c:478
#, c-format
msgid "> rejected hunk ## -%lu,%lu +%lu,%lu ## (%s)\n"
msgstr "> rejet du bloc ## -%lu,%lu +%lu,%lu ## (%s)\n"
-#: ../svn/notify.c:432
+#: ../svn/notify.c:487
#, c-format
msgid "> rejected hunk @@ -%lu,%lu +%lu,%lu @@\n"
msgstr "> rejet du bloc @@ -%lu,%lu +%lu,%lu @@\n"
-#: ../svn/notify.c:446
+#: ../svn/notify.c:501
#, c-format
msgid "> hunk ## -%lu,%lu +%lu,%lu ## already applied (%s)\n"
msgstr "> bloc ## -%lu,%lu +%lu,%lu ## déjà appliqué (%s)\n"
-#: ../svn/notify.c:456
+#: ../svn/notify.c:511
#, c-format
msgid "> hunk @@ -%lu,%lu +%lu,%lu @@ already applied\n"
msgstr "> bloc @@ -%lu,%lu +%lu,%lu @@ déjà appliqué\n"
-#: ../svn/notify.c:516
+#: ../svn/notify.c:573
#, c-format
msgid ""
"\n"
-"Fetching external item into '%s'\n"
+"Fetching external item into '%s':\n"
msgstr ""
"\n"
-"Récupération de la référence externe dans '%s'\n"
+"Récupération de la référence externe dans '%s' :\n"
-#: ../svn/notify.c:542
+#: ../svn/notify.c:599
#, c-format
msgid "Error handling externals definition for '%s':"
msgstr "Erreur à la définition externe pour '%s' :"
-#: ../svn/notify.c:556
+#: ../svn/notify.c:612
#, c-format
-msgid "Updating '%s' ...\n"
-msgstr "Mise à jour de '%s'...\n"
+msgid "Updating '%s':\n"
+msgstr "Mise à jour de '%s' :\n"
-#: ../svn/notify.c:572
+#: ../svn/notify.c:626
#, c-format
msgid "Exported external at revision %ld.\n"
msgstr "Référence externe exportée à la révision %ld.\n"
-#: ../svn/notify.c:573
+#: ../svn/notify.c:627
#, c-format
msgid "Exported revision %ld.\n"
msgstr "Exporté à la révision %ld.\n"
-#: ../svn/notify.c:581
+#: ../svn/notify.c:635
#, c-format
msgid "Checked out external at revision %ld.\n"
msgstr "Référence externe extraite à la révision %ld.\n"
-#: ../svn/notify.c:582
+#: ../svn/notify.c:636
#, c-format
msgid "Checked out revision %ld.\n"
msgstr "Révision %ld extraite.\n"
-#: ../svn/notify.c:593
+#: ../svn/notify.c:647
#, c-format
msgid "Updated external to revision %ld.\n"
msgstr "Référence externe actualisée à la révision %ld.\n"
-#: ../svn/notify.c:594
+#: ../svn/notify.c:648
#, c-format
msgid "Updated to revision %ld.\n"
msgstr "Actualisé à la révision %ld.\n"
-#: ../svn/notify.c:602
+#: ../svn/notify.c:656
#, c-format
msgid "External at revision %ld.\n"
msgstr "Référence externe à la révision %ld.\n"
-#: ../svn/notify.c:603
+#: ../svn/notify.c:657
#, c-format
msgid "At revision %ld.\n"
msgstr "À la révision %ld.\n"
-#: ../svn/notify.c:615
+#: ../svn/notify.c:669
#, c-format
msgid "External export complete.\n"
msgstr "Fin d'exportation d'une référence externe.\n"
-#: ../svn/notify.c:616
+#: ../svn/notify.c:670
#, c-format
msgid "Export complete.\n"
msgstr "Fin d'exportation.\n"
-#: ../svn/notify.c:623
+#: ../svn/notify.c:677
#, c-format
msgid "External checkout complete.\n"
msgstr "Fin d'extraction d'une référence externe.\n"
-#: ../svn/notify.c:624
+#: ../svn/notify.c:678
#, c-format
msgid "Checkout complete.\n"
msgstr "Fin d'extraction.\n"
-#: ../svn/notify.c:631
+#: ../svn/notify.c:685
#, c-format
msgid "External update complete.\n"
msgstr "Fin d'actualisation d'une référence externe.\n"
-#: ../svn/notify.c:632
+#: ../svn/notify.c:686
#, c-format
msgid "Update complete.\n"
msgstr "Fin d'actualisation.\n"
-#: ../svn/notify.c:649
+#: ../svn/notify.c:702
#, c-format
msgid ""
"\n"
-"Performing status on external item at '%s'\n"
+"Performing status on external item at '%s':\n"
msgstr ""
"\n"
-"Vérification de l'état sur la référence externe en '%s'\n"
+"Vérification de l'état sur la référence externe en '%s' :\n"
-#: ../svn/notify.c:657
+#: ../svn/notify.c:710
#, c-format
msgid "Status against revision: %6ld\n"
msgstr "État par rapport à la révision %6ld\n"
# Align the %s's on this and the following 4 messages
-#: ../svn/notify.c:665
+#: ../svn/notify.c:719
+#, c-format
+msgid "Sending copy of %s\n"
+msgstr "Envoi une copie de %s\n"
+
+# Align the %s's on this and the following 4 messages
+#: ../svn/notify.c:720
#, c-format
msgid "Sending %s\n"
msgstr "Envoi %s\n"
-#: ../svn/notify.c:674
+#: ../svn/notify.c:731
+#, c-format
+msgid "Adding copy of (bin) %s\n"
+msgstr "Ajoute une copie de (bin) %s\n"
+
+#: ../svn/notify.c:732
#, c-format
msgid "Adding (bin) %s\n"
msgstr "Ajout (bin) %s\n"
-#: ../svn/notify.c:681
+#: ../svn/notify.c:740
+#, c-format
+msgid "Adding copy of %s\n"
+msgstr "Ajoute une copie de %s\n"
+
+#: ../svn/notify.c:741
#, c-format
msgid "Adding %s\n"
msgstr "Ajout %s\n"
-#: ../svn/notify.c:688
+#: ../svn/notify.c:750
+#, c-format
+msgid "Deleting copy of %s\n"
+msgstr "Suppression d'une copie de %s\n"
+
+#: ../svn/notify.c:751
#, c-format
msgid "Deleting %s\n"
msgstr "Suppression %s\n"
-#: ../svn/notify.c:695
+#: ../svn/notify.c:760
+#, c-format
+msgid "Replacing copy of %s\n"
+msgstr "Remplacement d'une copie de %s\n"
+
+#: ../svn/notify.c:761
#, c-format
msgid "Replacing %s\n"
msgstr "Remplacement %s\n"
-#: ../svn/notify.c:705 ../svnsync/sync.c:320
+#: ../svn/notify.c:771 ../svnsync/sync.c:326
#, c-format
msgid "Transmitting file data "
msgstr "Transmission des données "
-#: ../svn/notify.c:714
+#: ../svn/notify.c:780 ../svnadmin/main.c:1517
#, c-format
msgid "'%s' locked by user '%s'.\n"
msgstr "'%s' verrouillé par l'utilisateur '%s'.\n"
-#: ../svn/notify.c:720
+#: ../svn/notify.c:786
#, c-format
msgid "'%s' unlocked.\n"
msgstr "'%s' déverrouillé.\n"
-#: ../svn/notify.c:747
+#: ../svn/notify.c:813
#, c-format
msgid "--- Merging differences between repository URLs into '%s':\n"
msgstr "--- Fusion des différences des URLs du dépôt vers '%s' :\n"
-#: ../svn/notify.c:752
+#: ../svn/notify.c:818
#, c-format
msgid "--- Merging r%ld into '%s':\n"
msgstr "--- Fusion de r%ld dans '%s':\n"
-#: ../svn/notify.c:756
+#: ../svn/notify.c:822
#, c-format
msgid "--- Reverse-merging r%ld into '%s':\n"
msgstr "--- Fusion inverse de r%ld dans '%s' :\n"
-#: ../svn/notify.c:760
+#: ../svn/notify.c:826
#, c-format
msgid "--- Merging r%ld through r%ld into '%s':\n"
msgstr "--- Fusion de r%ld à r%ld dans '%s':\n"
-#: ../svn/notify.c:766
+#: ../svn/notify.c:832
#, c-format
msgid "--- Reverse-merging r%ld through r%ld into '%s':\n"
msgstr "--- Fusion inverse de r%ld à r%ld dans '%s' :\n"
-#: ../svn/notify.c:778
+#: ../svn/notify.c:844
#, c-format
msgid "--- Recording mergeinfo for merge between repository URLs into '%s':\n"
msgstr "--- Stockage des informations de fusion (mergeinfo) des URLs du dépôt vers '%s' :\n"
-#: ../svn/notify.c:788
+#: ../svn/notify.c:854
#, c-format
msgid "--- Recording mergeinfo for merge of r%ld into '%s':\n"
msgstr "--- Stockage des informations de fusion (mergeinfo) de r%ld dans '%s' :b\n"
-#: ../svn/notify.c:793
+#: ../svn/notify.c:859
#, c-format
msgid "--- Recording mergeinfo for reverse merge of r%ld into '%s':\n"
msgstr "--- Stockage des informations de fusion (mergeinfo) inverse de r%ld vers '%s' :\n"
-#: ../svn/notify.c:798
+#: ../svn/notify.c:864
#, c-format
msgid "--- Recording mergeinfo for merge of r%ld through r%ld into '%s':\n"
msgstr "--- Stockage des informations de fusion (mergeinfo) de r%ld à r%ld dans '%s' :\n"
-#: ../svn/notify.c:803
+#: ../svn/notify.c:869
#, c-format
msgid "--- Recording mergeinfo for reverse merge of r%ld through r%ld into '%s':\n"
msgstr "--- Stockage des informations de fusion (mergeinfo) inverse de r%ld à r%ld dans '%s' :\n"
-#: ../svn/notify.c:813
+#: ../svn/notify.c:879
#, c-format
msgid "--- Eliding mergeinfo from '%s':\n"
msgstr "--- Nettoyage des informations de fusion (mergeinfo) de '%s':\n"
-#: ../svn/notify.c:821
+#: ../svn/notify.c:887
#, c-format
msgid "--- Merging differences between foreign repository URLs into '%s':\n"
msgstr "--- Fusion des différences entre dépôts distants vers '%s' :\n"
-#: ../svn/notify.c:827
+#: ../svn/notify.c:893
#, c-format
msgid "--- Merging (from foreign repository) r%ld into '%s':\n"
msgstr "--- Fusion (d'un dépôt distant) r%ld vers '%s' :\n"
-#: ../svn/notify.c:832
+#: ../svn/notify.c:898
#, c-format
msgid "--- Reverse-merging (from foreign repository) r%ld into '%s':\n"
msgstr "--- Fusion inverse (d'un dépôt distant) de r%ld vers '%s' :\n"
-#: ../svn/notify.c:837
+#: ../svn/notify.c:903
#, c-format
msgid "--- Merging (from foreign repository) r%ld through r%ld into '%s':\n"
msgstr "--- Fusion (d'un dépôt distant) de r%ld à r%ld dans '%s':\n"
-#: ../svn/notify.c:843
+#: ../svn/notify.c:909
#, c-format
msgid "--- Reverse-merging (from foreign repository) r%ld through r%ld into '%s':\n"
msgstr "--- Fusion inverse (d'un dépôt distant) de r%ld à r%ld vers '%s' :\n"
-#: ../svn/notify.c:861
+#: ../svn/notify.c:946
#, c-format
msgid "property '%s' set on '%s'\n"
msgstr "Propriété '%s' définie sur '%s'\n"
-#: ../svn/notify.c:869
+#: ../svn/notify.c:954
#, c-format
msgid "property '%s' deleted from '%s'.\n"
msgstr "Propriété '%s' supprimée de '%s'.\n"
-#: ../svn/notify.c:877
+#: ../svn/notify.c:962
+#, c-format
+msgid "Attempting to delete nonexistent property '%s' on '%s'\n"
+msgstr "Tentative d'effacer une propriété inconnue '%s' sur '%s'\n"
+
+#: ../svn/notify.c:971
#, c-format
msgid "property '%s' set on repository revision %ld\n"
msgstr "Propriété '%s' définie à la révision du dépôt %ld\n"
-#: ../svn/notify.c:885
+#: ../svn/notify.c:979
#, c-format
msgid "property '%s' deleted from repository revision %ld\n"
msgstr "Propriété '%s' supprimée de la révision %ld du dépôt\n"
-#: ../svn/notify.c:892
-#, c-format
-msgid "Upgraded '%s'.\n"
-msgstr "Mise à jour de '%s'.\n"
-
-#: ../svn/notify.c:898
+#: ../svn/notify.c:986
#, c-format
-msgid "Redirecting to URL '%s'\n"
-msgstr "Redirection vers l'URL '%s'\n"
+msgid "Upgraded '%s'\n"
+msgstr "Mise à jour de '%s'\n"
-#: ../svn/obliterate-cmd.c:60
+#: ../svn/notify.c:992
#, c-format
-msgid "Obliterate %8ld %s\n"
-msgstr "Oblitération %8ld %s\n"
-
-#: ../svn/obliterate-cmd.c:111
-msgid "Wrong number of arguments"
-msgstr "Nombre d'arguments invalide"
+msgid "Redirecting to URL '%s':\n"
+msgstr "Redirection vers l'URL '%s' :\n"
-#: ../svn/obliterate-cmd.c:116
-msgid "Target must specify the revision as a number"
-msgstr "La cible doit préciser le numéro de la révision"
-
-#: ../svn/obliterate-cmd.c:119
-msgid "Target must specify a URL"
-msgstr "La cible doit contenir une URL"
-
-#: ../svn/propdel-cmd.c:117
+#: ../svn/propdel-cmd.c:88
#, c-format
msgid "Cannot specify revision for deleting versioned property '%s'"
msgstr "Ne pas préciser la révision pour supprimer la propriété versionnée '%s'"
-#: ../svn/propdel-cmd.c:152
-#, c-format
-msgid "Attempting to delete nonexistent property '%s'"
-msgstr "Tentative d'effacer une propriété inconnue '%s'"
-
-#: ../svn/propedit-cmd.c:62 ../svn/propedit-cmd.c:315
+#: ../svn/propedit-cmd.c:60 ../svn/propedit-cmd.c:331
#, c-format
msgid "Set new value for property '%s' on '%s'\n"
msgstr "Nouvelle valeur définie pour la propriété '%s' sur '%s'\n"
-#: ../svn/propedit-cmd.c:92 ../svn/propset-cmd.c:94
+#: ../svn/propedit-cmd.c:90 ../svn/propset-cmd.c:94
msgid "--encoding option applies only to textual Subversion-controlled properties"
msgstr "l'option '--encoding' ne s'applique que pour tes propriétés textuelles controllées par Subversion"
-#: ../svn/propedit-cmd.c:158
+#: ../svn/propedit-cmd.c:156
#, c-format
msgid "Set new value for property '%s' on revision %ld\n"
msgstr "Nouvelle valeur de la propriété '%s' définie à la révision %ld\n"
-#: ../svn/propedit-cmd.c:164
+#: ../svn/propedit-cmd.c:162
#, c-format
msgid "No changes to property '%s' on revision %ld\n"
msgstr "Pas de modification de la propriété '%s' à la révision %ld\n"
-#: ../svn/propedit-cmd.c:172
+#: ../svn/propedit-cmd.c:170
#, c-format
msgid "Cannot specify revision for editing versioned property '%s'"
msgstr "Ne pas préciser de révision pour éditer la propriété versionnée '%s'"
-#: ../svn/propedit-cmd.c:200 ../svn/propset-cmd.c:171
+#: ../svn/propedit-cmd.c:198 ../svn/propset-cmd.c:169
msgid "Explicit target argument required"
msgstr "Argument cible explicite requis"
-#: ../svn/propedit-cmd.c:264
+#: ../svn/propedit-cmd.c:265
#, c-format
msgid "'%s' does not appear to be a working copy path"
msgstr "'%s' ne semble pas être un chemin dans une copie de travail"
-#: ../svn/propedit-cmd.c:322
+#: ../svn/propedit-cmd.c:338
#, c-format
msgid "No changes to property '%s' on '%s'\n"
msgstr "Pas de modification de la propriété '%s' sur '%s'\n"
-#: ../svn/propget-cmd.c:64
+#: ../svn/propget-cmd.c:65
msgid "Error writing to stream"
msgstr "Erreur en écrivant le flux"
-#: ../svn/propget-cmd.c:140 ../svn/proplist-cmd.c:100
+#: ../svn/propget-cmd.c:151 ../svn/proplist-cmd.c:100
#, c-format
msgid "Properties on '%s':\n"
msgstr "Propriétés sur '%s'\n"
-#: ../svn/propget-cmd.c:197
+#: ../svn/propget-cmd.c:208
msgid "--verbose cannot be used with --revprop or --strict or --xml"
msgstr "--verbose ne peut être utilisé avec --revprop ou --strict ou --xml"
-#: ../svn/propget-cmd.c:290
+#: ../svn/propget-cmd.c:301
msgid "Strict output of property values only available for single-target, non-recursive propget operations"
msgstr "La sortie stricte des valeurs d'une propriété n'est possible que pour des \"propget\" non récursifs sur une seule cible"
-#: ../svn/proplist-cmd.c:158
+#: ../svn/proplist-cmd.c:161
#, c-format
msgid "Unversioned properties on revision %ld:\n"
msgstr "Propriétés non versionnées de la révision %ld :\n"
-#: ../svn/props.c:62
+#: ../svn/proplist-cmd.c:234
+msgid "Could not display properties of all targets because some targets don't exist"
+msgstr "Impossible d'afficher les propriétés sur toutes les cibles car certaines n'existent pas"
+
+#: ../svn/proplist-cmd.c:239
+msgid "Could not display properties of all targets because some targets are not versioned"
+msgstr "Impossible d'afficher les propriétés sur toutes les cibles car certaines ne sont pas versionnées"
+
+#: ../svn/props.c:63
msgid "Must specify the revision as a number, a date or 'HEAD' when operating on a revision property"
msgstr "Préciser explicitement la révision par un numéro, une date ou 'HEAD' pour accéder à une propriété de révision"
-#: ../svn/props.c:69
+#: ../svn/props.c:70
msgid "Wrong number of targets specified"
msgstr "Le nombre de cibles n'est pas bon"
-#: ../svn/props.c:78
+#: ../svn/props.c:79
msgid "Either a URL or versioned item is required"
msgstr "Une URL ou un objet versionné est requis"
-#: ../svn/props.c:208
+#: ../svn/props.c:214
#, c-format
msgid ""
"To turn off the %s property, use 'svn propdel';\n"
@@ -10477,29 +11425,33 @@ msgstr ""
"Pour désactiver la propriété %s, utiliser 'svn propdel' ;\n"
"Définir la valeur de la propriété à '%s' de la désactivera pas."
-#: ../svn/propset-cmd.c:128
+#: ../svn/propset-cmd.c:129
#, c-format
msgid "Cannot specify revision for setting versioned property '%s'"
msgstr "Ne pas préciser de révision pour définir la propriété versionnée '%s'"
-#: ../svn/propset-cmd.c:164
+#: ../svn/propset-cmd.c:162
#, c-format
msgid "Explicit target required ('%s' interpreted as prop value)"
msgstr "Cible explicite requise ('%s' interprété comme valeur de propriété)"
-#: ../svn/resolve-cmd.c:80
+#: ../svn/resolve-cmd.c:84
msgid "missing --accept option"
msgstr "option '--accept' requise"
-#: ../svn/resolve-cmd.c:83
+#: ../svn/resolve-cmd.c:89
msgid "invalid 'accept' ARG"
msgstr "Argument 'accept' invalide"
-#: ../svn/revert-cmd.c:86
+#: ../svn/resolve-cmd.c:144
+msgid "Failure occurred resolving one or more conflicts"
+msgstr "Échec lors de la résolution d'un ou plusieurs conflits"
+
+#: ../svn/revert-cmd.c:77
msgid "Try 'svn revert --depth infinity' instead?"
msgstr "Essayer plutôt 'svn revert --depth infinity' ?"
-#: ../svn/status-cmd.c:362
+#: ../svn/status-cmd.c:388
#, c-format
msgid ""
"\n"
@@ -10508,16 +11460,28 @@ msgstr ""
"\n"
"--- Liste de changements '%s' :\n"
-#: ../svn/status.c:374
+#: ../svn/status.c:301
#, c-format
-msgid "'%s' has lock token, but no lock owner"
-msgstr "'%s' possède un verrou local, mais pas de propriétaire de verrou"
+msgid "moved from %s"
+msgstr "déplacé de %s"
+
+#: ../svn/status.c:312
+#, c-format
+msgid "moved to %s"
+msgstr "déplacé vers %s"
#: ../svn/switch-cmd.c:63
#, c-format
msgid "'%s' to '%s' is not a valid relocation"
msgstr "'%s' vers '%s' n'est pas une relocalisation valide"
+#: ../svn/switch-cmd.c:173
+#, c-format
+msgid "Path '%s' does not share common version control ancestry with the requested switch location. Use --ignore-ancestry to disable this check."
+msgstr ""
+"Le chemin '%s' ne partage pas d'ancêtre commun avec la destination de bascule\n"
+"(switch). Utiliser --ignore-ancestry pour désactiver cette vérification."
+
#: ../svn/tree-conflicts.c:38 ../svn/tree-conflicts.c:58
msgid "edit"
msgstr "édition"
@@ -10546,7 +11510,19 @@ msgstr "obstruction"
msgid "unversioned"
msgstr "non versionné"
-#: ../svn/tree-conflicts.c:107
+#: ../svn/tree-conflicts.c:65
+msgid "moved away"
+msgstr "déplacé ailleurs"
+
+#: ../svn/tree-conflicts.c:66
+msgid "moved away and edited"
+msgstr "déplacé ailleurs et modifié"
+
+#: ../svn/tree-conflicts.c:67
+msgid "moved here"
+msgstr "déplacé ici"
+
+#: ../svn/tree-conflicts.c:113
#, c-format
msgid "local %s, incoming %s upon %s"
msgstr "local %s, %s entrante sur %s"
@@ -10559,12 +11535,12 @@ msgstr "Résumé des mises à jour :\n"
#. Print an update summary for this target, removing the current
#. working directory prefix from PATH (if PATH is at or under
#. $CWD), and converting the path to local style for display.
-#: ../svn/update-cmd.c:92
+#: ../svn/update-cmd.c:90
#, c-format
msgid " Updated '%s' to r%ld.\n"
msgstr "'%s' actualisé à la révision %ld.\n"
-#: ../svn/util.c:75
+#: ../svn/util.c:76
#, c-format
msgid ""
"\n"
@@ -10573,11 +11549,11 @@ msgstr ""
"\n"
"Révision %ld%s propagée.\n"
-#: ../svn/util.c:79
+#: ../svn/util.c:80
msgid " (the answer to life, the universe, and everything)"
msgstr " (la réponse à la vie, l'univers, et tout ça...)"
-#: ../svn/util.c:88
+#: ../svn/util.c:89
#, c-format
msgid ""
"\n"
@@ -10586,86 +11562,86 @@ msgstr ""
"\n"
"Attention : %s\n"
-#: ../svn/util.c:148
+#: ../svn/util.c:149
msgid "The EDITOR, SVN_EDITOR or VISUAL environment variable or 'editor-cmd' run-time configuration option is empty or consists solely of whitespace. Expected a shell command."
msgstr "La variable d'environnement EDITOR, SVN_EDITOR ou VISUAL, ou alors la configuration 'editor-cmd' est vide ou est constituée seulement d'espaces. Une commande shell est attendue."
-#: ../svn/util.c:155
+#: ../svn/util.c:156
msgid "None of the environment variables SVN_EDITOR, VISUAL or EDITOR are set, and no 'editor-cmd' run-time configuration option was found"
msgstr "Aucune variable d'environnement (SVN_EDITOR, VISUAL ou EDITOR) ni d'option de configuration 'editor-cmd' n'a été trouvée"
-#: ../svn/util.c:183 ../svn/util.c:344
+#: ../svn/util.c:184 ../svn/util.c:345
#, c-format
msgid "Can't get working directory"
msgstr "Répertoire courant inaccessible"
-#: ../svn/util.c:194 ../svn/util.c:355 ../svn/util.c:380
+#: ../svn/util.c:195 ../svn/util.c:356 ../svn/util.c:381
#, c-format
msgid "Can't change working directory to '%s'"
msgstr "Répertoire '%s' inaccessible (pas de 'cd')"
-#: ../svn/util.c:202 ../svn/util.c:525
+#: ../svn/util.c:203 ../svn/util.c:528
#, c-format
msgid "Can't restore working directory"
msgstr "Le répertoire de travail courant ne peut être rétabli"
-#: ../svn/util.c:209 ../svn/util.c:452
+#: ../svn/util.c:210 ../svn/util.c:463
#, c-format
msgid "system('%s') returned %d"
msgstr "system('%s') a retourné %d"
-#: ../svn/util.c:249
+#: ../svn/util.c:250
msgid "The SVN_MERGE environment variable is empty or consists solely of whitespace. Expected a shell command.\n"
msgstr "La variable d'environnement SVN_MERGE est vide ou est constituée seulement d'espaces. Une commande shell est attendue.\n"
-#: ../svn/util.c:255
+#: ../svn/util.c:256
msgid "The environment variable SVN_MERGE and the merge-tool-cmd run-time configuration option were not set.\n"
msgstr "Aucune variable d'environnement SVN_MERGE ni d'option de configuration 'merge-tool-cmd' n'a été trouvée\n"
-#: ../svn/util.c:285
+#: ../svn/util.c:286
#, c-format
msgid "The external merge tool exited with exit code %d"
msgstr "L'outil de fusion externe s'est terminé sur un code d'erreur %d"
-#: ../svn/util.c:407
+#: ../svn/util.c:408
#, c-format
msgid "Can't write to '%s'"
msgstr "'%s' n'est pas accessible en écriture"
-#: ../svn/util.c:494
+#: ../svn/util.c:497
msgid "Error normalizing edited contents to internal format"
msgstr "Erreur de normalisation du contenu édité vers le format interne"
-#: ../svn/util.c:567
+#: ../svn/util.c:570
msgid "Log message contains a zero byte"
msgstr "L'entrée du journal contient un octet 0"
-#: ../svn/util.c:626
+#: ../svn/util.c:629
#, c-format
msgid " '%s'"
msgstr " '%s'"
-#: ../svn/util.c:630
+#: ../svn/util.c:633
msgid "Your commit message was left in a temporary file:"
msgstr "Le message de propagation a été laissé dans un fichier temporaire :"
-#: ../svn/util.c:682
+#: ../svn/util.c:685
msgid "--This line, and those below, will be ignored--"
msgstr "--Cette ligne, et les suivantes ci-dessous, seront ignorées--"
-#: ../svn/util.c:717
+#: ../svn/util.c:720
msgid "Error normalizing log message to internal format"
msgstr "Erreur de normalisation de l'entrée du journal vers le format interne"
-#: ../svn/util.c:804
+#: ../svn/util.c:807
msgid "Cannot invoke editor to get log message when non-interactive"
msgstr "L'éditeur ne peut être invoqué en mode non interactif"
-#: ../svn/util.c:817
+#: ../svn/util.c:820
msgid "Could not use external editor to fetch log message; consider setting the $SVN_EDITOR environment variable or using the --message (-m) or --file (-F) options"
msgstr "Pas d'éditeur externe pour définir l'entrée du journal; définir la variable d'environnement SVN_EDITOR ou utiliser --message (-m) ou --file (-F)"
-#: ../svn/util.c:853
+#: ../svn/util.c:856
msgid ""
"\n"
"Log message unchanged or not specified\n"
@@ -10675,103 +11651,94 @@ msgstr ""
"Entrée du journal non modifié ou non précisé\n"
"(a)nnule, (c)ontinue, (e)dite\n"
-#: ../svn/util.c:906
+#: ../svn/util.c:909
msgid "Use --force to override this restriction (local modifications may be lost)"
msgstr "Utiliser --force pour passer cette restriction (les modifications locales peuvent être perdues)"
-#: ../svn/util.c:1053 ../svn/util.c:1086
+#: ../svn/util.c:1098 ../svn/util.c:1131
msgid "none"
msgstr "aucun"
-#: ../svn/util.c:1054
+#: ../svn/util.c:1099
msgid "file"
msgstr "fichier"
-#: ../svn/util.c:1055
+#: ../svn/util.c:1100
msgid "dir"
msgstr "rép"
-#: ../svn/util.c:1087
+#: ../svn/util.c:1132
msgid "update"
msgstr "mise à jour"
-#: ../svn/util.c:1088
+#: ../svn/util.c:1133
msgid "switch"
-msgstr "ré-aiguille"
+msgstr "bascule"
-#: ../svn/util.c:1089
+#: ../svn/util.c:1134
msgid "merge"
msgstr "fusion"
-#: ../svn/util.c:1207
+#: ../svn/util.c:1256
msgid "(invalid date)"
msgstr "(date invalide)"
-#: ../svnadmin/main.c:103 ../svndumpfilter/main.c:72
+#: ../svn/util.c:1459
#, c-format
-msgid "Can't open stdio file"
-msgstr "Le fichier stdio ne peut être ouvert"
+msgid "Source and target have no common ancestor: '%s' and '%s'"
+msgstr "La source t la cible n'ont pas d'ancêtre commun : '%s' et '%s'"
-#: ../svnadmin/main.c:132
-msgid "Repository argument required"
-msgstr "Argument précisant le dépôt obligatoire"
-
-#: ../svnadmin/main.c:137
-#, c-format
-msgid "'%s' is an URL when it should be a path"
-msgstr "'%s' est une URL, alors qu'un chemin est attendu"
-
-#: ../svnadmin/main.c:254 ../svnrdump/svnrdump.c:115
+#: ../svnadmin/main.c:213 ../svnrdump/svnrdump.c:116
msgid "specify revision number ARG (or X:Y range)"
msgstr "précise la révision numéro ARG (ou étendue X:Y)"
-#: ../svnadmin/main.c:257 ../svnrdump/svnrdump.c:119
-msgid "dump incrementally"
-msgstr "décharge incrémentale"
+#: ../svnadmin/main.c:216
+msgid "dump or hotcopy incrementally"
+msgstr "décharge ou copie à chaud incrémentale"
-#: ../svnadmin/main.c:260
+#: ../svnadmin/main.c:219
msgid "use deltas in dump output"
msgstr "décharge différentielle (deltas)"
#  ??? ancres
-#: ../svnadmin/main.c:263
+#: ../svnadmin/main.c:222
msgid "bypass the repository hook system"
msgstr "contourne les ancres (hook) du dépôt"
-#: ../svnadmin/main.c:266
+#: ../svnadmin/main.c:225
msgid "bypass property validation logic"
msgstr "ignore les vérifications des propriétés"
-#: ../svnadmin/main.c:269 ../svnlook/main.c:181 ../svnrdump/svnrdump.c:117
-#: ../svnserve/main.c:222 ../svnversion/main.c:141
+#: ../svnadmin/main.c:228 ../svnlook/main.c:186 ../svnrdump/svnrdump.c:118
+#: ../svnserve/main.c:272 ../svnversion/main.c:141
msgid "no progress (only errors) to stderr"
msgstr "pas d'avancement mais seulement les erreurs vers stderr"
-#: ../svnadmin/main.c:272
+#: ../svnadmin/main.c:231
msgid "ignore any repos UUID found in the stream"
msgstr "ignore tout UUID de dépôt trouvé dans le flux"
-#: ../svnadmin/main.c:275
+#: ../svnadmin/main.c:234
msgid "set repos UUID to that found in stream, if any"
msgstr "utilise l'UUID de dépôt trouvée dans le flux, si il y en a une"
-#: ../svnadmin/main.c:278
+#: ../svnadmin/main.c:237
msgid "type of repository: 'fsfs' (default) or 'bdb'"
msgstr "type de dépôt : 'fsfs' (défaut) ou 'bdb'"
-#: ../svnadmin/main.c:281
+#: ../svnadmin/main.c:240
msgid "load at specified directory in repository"
msgstr "charge dans le répertoire précisé du dépôt"
-#: ../svnadmin/main.c:284
+#: ../svnadmin/main.c:243
msgid "disable fsync at transaction commit [Berkeley DB]"
msgstr "désactive fsync aux propagations de transactions [Berkeley DB]"
-#: ../svnadmin/main.c:287
+#: ../svnadmin/main.c:246
msgid "disable automatic log file removal [Berkeley DB]"
msgstr "désactive la suppression automatique des fichiers du journal [Berkeley DB]"
-#: ../svnadmin/main.c:293
+#: ../svnadmin/main.c:252
msgid ""
"remove redundant Berkeley DB log files\n"
" from source repository [Berkeley DB]"
@@ -10779,23 +11746,23 @@ msgstr ""
"supprime les fichiers du journal redondants\n"
" dans le dépôt source [Base Berkeley]"
-#: ../svnadmin/main.c:297
+#: ../svnadmin/main.c:256
msgid "call pre-commit hook before committing revisions"
msgstr "appel la procédure d'avant propagation (pre-commit) avant de propager les révisions"
-#: ../svnadmin/main.c:300
+#: ../svnadmin/main.c:259
msgid "call post-commit hook after committing revisions"
msgstr "appel la procédure d'après propagation (post-commit) après la propagation des révisions"
-#: ../svnadmin/main.c:303
+#: ../svnadmin/main.c:262
msgid "call hook before changing revision property"
msgstr "appel de la procédure automatique avant de changer une propriété de révision"
-#: ../svnadmin/main.c:306
+#: ../svnadmin/main.c:265
msgid "call hook after changing revision property"
msgstr "appel la procédure automatique après le changement d'une propriété de révision"
-#: ../svnadmin/main.c:309
+#: ../svnadmin/main.c:268
msgid ""
"wait instead of exit if the repository is in\n"
" use by another process"
@@ -10803,7 +11770,7 @@ msgstr ""
"attend au lieu de sortir si le dépôt est\n"
" utilisé par un autre processus"
-#: ../svnadmin/main.c:313
+#: ../svnadmin/main.c:272
msgid ""
"use format compatible with Subversion versions\n"
" earlier than 1.4"
@@ -10811,7 +11778,7 @@ msgstr ""
"utilise un format compatible avec les versions\n"
" de Subversion antérieures à 1.4"
-#: ../svnadmin/main.c:317
+#: ../svnadmin/main.c:276
msgid ""
"use format compatible with Subversion versions\n"
" earlier than 1.5"
@@ -10819,7 +11786,7 @@ msgstr ""
"utilise un format compatible avec les versions\n"
" de Subversion antérieures à 1.5"
-#: ../svnadmin/main.c:321
+#: ../svnadmin/main.c:280
msgid ""
"use format compatible with Subversion versions\n"
" earlier than 1.6"
@@ -10827,15 +11794,17 @@ msgstr ""
"utilise un format compatible avec les versions\n"
" de Subversion antérieures à 1.6"
-#: ../svnadmin/main.c:325
+#: ../svnadmin/main.c:284
msgid ""
-"use format compatible with Subversion versions\n"
-" earlier than 1.7"
+"size of the extra in-memory cache in MB used to\n"
+" minimize redundant operations. Default: 16.\n"
+" [used for FSFS repositories only]"
msgstr ""
-"utilise un format compatible avec les versions\n"
-" de Subversion antérieures à 1.7"
+"taille du cache mémoire en méga-octets (MB) utilisé pour\n"
+" minimiser les opérations redondantes. Défaut : 16.\n"
+" [utilisé seulement pour les dépôts FSFS]"
-#: ../svnadmin/main.c:338
+#: ../svnadmin/main.c:298
msgid ""
"usage: svnadmin crashtest REPOS_PATH\n"
"\n"
@@ -10847,7 +11816,7 @@ msgstr ""
"Ouvre le dépôt en CHEMIN_DÉPÔT, puis s'interrompt brusquement (abort),\n"
"simulant ainsi un crash de processus ayant ouvert le dépôt.\n"
-#: ../svnadmin/main.c:344
+#: ../svnadmin/main.c:304
msgid ""
"usage: svnadmin create REPOS_PATH\n"
"\n"
@@ -10857,7 +11826,7 @@ msgstr ""
"\n"
"Crée un nouveau dépôt vide à CHEMIN_DÉPÔT.\n"
-#: ../svnadmin/main.c:352
+#: ../svnadmin/main.c:312
msgid ""
"usage: svnadmin deltify [-r LOWER[:UPPER]] REPOS_PATH\n"
"\n"
@@ -10874,7 +11843,7 @@ msgstr ""
"compresse le dépôt en ne stockant que les différences entre versions\n"
"successives. Elle s'applique par défaut à la révision de tête seule.\n"
-#: ../svnadmin/main.c:361
+#: ../svnadmin/main.c:321
msgid ""
"usage: svnadmin dump REPOS_PATH [-r LOWER[:UPPER] [--incremental]]\n"
"\n"
@@ -10898,7 +11867,7 @@ msgstr ""
"au lieu de refléter l'état complet de l'arborescence. À partir de la seconde\n"
"révision, le déchargement est toujours différentiel.\n"
-#: ../svnadmin/main.c:374
+#: ../svnadmin/main.c:334
msgid ""
"usage: svnadmin help [SUBCOMMAND...]\n"
"\n"
@@ -10908,17 +11877,22 @@ msgstr ""
"\n"
"Décrit l'utilisation de ce programme ou de ses sous-commandes.\n"
-#: ../svnadmin/main.c:379
+#: ../svnadmin/main.c:339
msgid ""
"usage: svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH\n"
"\n"
"Makes a hot copy of a repository.\n"
+"If --incremental is passed, data which already exists at the destination\n"
+"is not copied again. Incremental mode is implemented for FSFS repositories.\n"
msgstr ""
-"usage : svnadmin hotcopy DÉPÔT NOUVEAU_DÉPÔT\n"
+"usage : svnadmin hotcopy CHEMIN_DÉPÔT NOUVEAU_CHEMIN_DÉPÔT\n"
"\n"
-"Effectue une copie à chaud (hotcopy) d'un dépôt.\n"
+"Effectue une copie à chaud d'un dépôt.\n"
+"Si l'option --incremental (incrémentale) est passée, les données qui existent\n"
+"déjà à la destination ne sont pas recopiées. Le mode incrémental est implémenté\n"
+"pour les dépôts de type FSFS.\n"
-#: ../svnadmin/main.c:384
+#: ../svnadmin/main.c:346
msgid ""
"usage: svnadmin list-dblogs REPOS_PATH\n"
"\n"
@@ -10934,7 +11908,7 @@ msgstr ""
"ATTENTION : Modifier ou supprimer les fichiers du journal en cours\n"
"d'utilisation corrompt le dépôt.\n"
-#: ../svnadmin/main.c:391
+#: ../svnadmin/main.c:353
msgid ""
"usage: svnadmin list-unused-dblogs REPOS_PATH\n"
"\n"
@@ -10945,7 +11919,7 @@ msgstr ""
"\n"
"Liste les fichiers inutilisés du journal de la base Berkeley.\n"
-#: ../svnadmin/main.c:396
+#: ../svnadmin/main.c:358
msgid ""
"usage: svnadmin load REPOS_PATH\n"
"\n"
@@ -10953,15 +11927,32 @@ msgid ""
"new revisions into the repository's filesystem. If the repository\n"
"was previously empty, its UUID will, by default, be changed to the\n"
"one specified in the stream. Progress feedback is sent to stdout.\n"
+"If --revision is specified, limit the loaded revisions to only those\n"
+"in the dump stream whose revision numbers match the specified range.\n"
msgstr ""
"usage : svnadmin load CHEMIN_DÉPÔT\n"
"\n"
"Charge un flux au format 'dumpfile' venant de l'entrée standard, en\n"
"propageant (commit) les nouvelles révisions dans le dépôt. Si le dépôt\n"
"est initialement vide, son UUID prend la valeur de celui du flux.\n"
-"L'avancement est envoyé sur stdout.\n"
+"L'avancement est envoyé sur stdout. Si --revision est donné, limite\n"
+"les révisions chargées à celles spécifiées.\n"
+
+#: ../svnadmin/main.c:370
+msgid ""
+"usage: svnadmin lock REPOS_PATH PATH USERNAME COMMENT-FILE [TOKEN]\n"
+"\n"
+"Lock PATH by USERNAME setting comments from COMMENT-FILE.\n"
+"If provided, use TOKEN as lock token. Use --bypass-hooks to avoid\n"
+"triggering the pre-lock and post-lock hook scripts.\n"
+msgstr ""
+"Usage : svnadmin lon CHEMIN_DÉPÔT CHEMIN UTILISATEUR COMMENTAIRE [TOKEN]\n"
+"\n"
+"Verrouille CHEMIN par UTILISATEUR en prennant le fichier COMMENTAIRE.\n"
+"Si fournit, TOKEN est pris comme identifiant du verrou. L'option --bypass-hooks\n"
+"permet de ne pas déclancher les scripts d'avant et d'après verrouillage.\n"
-#: ../svnadmin/main.c:406
+#: ../svnadmin/main.c:377
msgid ""
"usage: svnadmin lslocks REPOS_PATH [PATH-IN-REPOS]\n"
"\n"
@@ -10973,7 +11964,7 @@ msgstr ""
"Affiche la description de tous les verrous sur ou sous CHEMIN_DANS_LE_DÉPÔT\n"
"(par défaut la racine du dépôt).\n"
-#: ../svnadmin/main.c:412
+#: ../svnadmin/main.c:383
msgid ""
"usage: svnadmin lstxns REPOS_PATH\n"
"\n"
@@ -10983,7 +11974,7 @@ msgstr ""
"\n"
"Affiche les noms de toutes les transactions non propagées.\n"
-#: ../svnadmin/main.c:417
+#: ../svnadmin/main.c:388
msgid ""
"usage: svnadmin pack REPOS_PATH\n"
"\n"
@@ -10995,7 +11986,7 @@ msgstr ""
"Essaie de tasser le dépôt avec un stockage plus efficace.\n"
"Ignore si cela ne s'applique pas à un dépôt.\n"
-#: ../svnadmin/main.c:423
+#: ../svnadmin/main.c:394
msgid ""
"usage: svnadmin recover REPOS_PATH\n"
"\n"
@@ -11011,7 +12002,7 @@ msgstr ""
"à la base Berkeley DB, elle ne s'exécute pas si le dépôt est en cours \n"
"d'utilisation par un autre processus.\n"
-#: ../svnadmin/main.c:431
+#: ../svnadmin/main.c:402
msgid ""
"usage: svnadmin rmlocks REPOS_PATH LOCKED_PATH...\n"
"\n"
@@ -11021,7 +12012,7 @@ msgstr ""
"\n"
"Efface inconditionnellement le verrou de chaque CHEMIN_VERROUILLÉ.\n"
-#: ../svnadmin/main.c:436
+#: ../svnadmin/main.c:407
msgid ""
"usage: svnadmin rmtxns REPOS_PATH TXN_NAME...\n"
"\n"
@@ -11031,7 +12022,7 @@ msgstr ""
"\n"
"Supprime les transactions spécifiées.\n"
-#: ../svnadmin/main.c:441
+#: ../svnadmin/main.c:412
msgid ""
"usage: svnadmin setlog REPOS_PATH -r REVISION FILE\n"
"\n"
@@ -11056,7 +12047,7 @@ msgstr ""
"NOTE : l'historique des propriétés de révision n'est pas conservé, cette\n"
"commande écrase définitivement les entrées précédentes du journal.\n"
-#: ../svnadmin/main.c:453
+#: ../svnadmin/main.c:424
msgid ""
"usage: svnadmin setrevprop REPOS_PATH -r REVISION NAME FILE\n"
"\n"
@@ -11079,7 +12070,7 @@ msgstr ""
"NOTE : l'historique des propriétés de révision n'est pas conservé, cette\n"
"commande écrase définitivement les entrées précédentes du journal.\n"
-#: ../svnadmin/main.c:464
+#: ../svnadmin/main.c:435
msgid ""
"usage: svnadmin setuuid REPOS_PATH [NEW_UUID]\n"
"\n"
@@ -11092,7 +12083,21 @@ msgstr ""
"Redéfinit l'UUID (identificateur unique) du dépôt situé à CHEMIN_DÉPÔT.\n"
"Utilise l'UUID si il est précisé, sinon en génère un nouveau.\n"
-#: ../svnadmin/main.c:471
+#: ../svnadmin/main.c:442
+msgid ""
+"usage: svnadmin unlock REPOS_PATH LOCKED_PATH USERNAME TOKEN\n"
+"\n"
+"Unlocked LOCKED_PATH (as USERNAME) after verifying that the token\n"
+"associated with the lock matches TOKEN. Use --bypass-hooks to avoid\n"
+"triggering the pre-unlock and post-unlock hook scripts.\n"
+msgstr ""
+"Usage : svnadmin unlock CHEMIN_DÉPÔT CHEMIN_VERROUILLÉ UTILISATEUR TOKEN\n"
+"\n"
+"Déverrouille CHEMIN_VERROUILLÉ (comme UTILISATEUR) après avoir vérifié que\n"
+"l'identifiant associé au verrou correspond à TOKEN. L'option --bypass-hooks\n"
+"permet de ne pas déclancher les scripts d'avant et d'après verrouillage.\n"
+
+#: ../svnadmin/main.c:449
msgid ""
"usage: svnadmin upgrade REPOS_PATH\n"
"\n"
@@ -11118,7 +12123,7 @@ msgstr ""
"garantit pas un état optimisé tel que celui atteint avec un cycle de \n"
"sauvegarde et restauration.\n"
-#: ../svnadmin/main.c:484
+#: ../svnadmin/main.c:462
msgid ""
"usage: svnadmin verify REPOS_PATH\n"
"\n"
@@ -11128,40 +12133,45 @@ msgstr ""
"\n"
"Vérifie les données stockées dans le dépôt.\n"
-#: ../svnadmin/main.c:544
+#: ../svnadmin/main.c:521
msgid "Invalid revision specifier"
msgstr "Révision invalide"
-#: ../svnadmin/main.c:548
+#: ../svnadmin/main.c:525
#, c-format
msgid "Revisions must not be greater than the youngest revision (%ld)"
msgstr "Les révisions doivent être antérieures à la plus récente (%ld)"
-#: ../svnadmin/main.c:635 ../svnadmin/main.c:890
+#: ../svnadmin/main.c:667 ../svnadmin/main.c:929 ../svnadmin/main.c:1035
msgid "First revision cannot be higher than second"
msgstr "La première révision doit être postérieure à la seconde"
-#: ../svnadmin/main.c:644
+#: ../svnadmin/main.c:676
#, c-format
msgid "Deltifying revision %ld..."
msgstr "Différentiation de la révision %ld..."
-#: ../svnadmin/main.c:648 ../svnadmin/main.c:699 ../svnadmin/main.c:715
+#: ../svnadmin/main.c:680 ../svnadmin/main.c:730 ../svnadmin/main.c:745
#, c-format
msgid "done.\n"
msgstr "fait.\n"
-#: ../svnadmin/main.c:692
+#: ../svnadmin/main.c:724
#, c-format
msgid "Packing revisions in shard %s..."
msgstr "Compaction des révisions du fragment %s..."
-#: ../svnadmin/main.c:708
+#: ../svnadmin/main.c:739
#, c-format
msgid "Packing revprops in shard %s..."
msgstr "Compaction des propriétés de révision du fragment %s..."
-#: ../svnadmin/main.c:797
+#: ../svnadmin/main.c:816
+#, c-format
+msgid "<<< Skipped original revision %ld\n"
+msgstr "<<< Saut de la révision initiale %ld\n"
+
+#: ../svnadmin/main.c:833
#, c-format
msgid ""
"Repository lock acquired.\n"
@@ -11170,8 +12180,7 @@ msgstr ""
"Verrou du dépôt acquis.\n"
"Patientez ; le rétablissement du dépôt peut être long...\n"
-#: ../svnadmin/main.c:804
-#, c-format
+#: ../svnadmin/main.c:840
msgid ""
"Repository lock acquired.\n"
"Please wait; upgrading the repository may take some time...\n"
@@ -11179,7 +12188,7 @@ msgstr ""
"Verrou du dépôt acquis.\n"
"Patientez ; la mise à jour du dépôt peut être longue...\n"
-#: ../svnadmin/main.c:913
+#: ../svnadmin/main.c:952
msgid ""
"general usage: svnadmin SUBCOMMAND REPOS_PATH [ARGS & OPTIONS ...]\n"
"Type 'svnadmin help <subcommand>' for help on a specific subcommand.\n"
@@ -11193,7 +12202,7 @@ msgstr ""
"\n"
"Sous-commandes disponibles :\n"
-#: ../svnadmin/main.c:920 ../svnlook/main.c:2020 ../svnserve/main.c:268
+#: ../svnadmin/main.c:959 ../svnlook/main.c:2042 ../svnserve/main.c:318
msgid ""
"The following repository back-end (FS) modules are available:\n"
"\n"
@@ -11201,11 +12210,20 @@ msgstr ""
"Les types de stockage de dépôt (FS) suivants sont disponibles :\n"
"\n"
-#: ../svnadmin/main.c:966
+#: ../svnadmin/main.c:987
+#, c-format
+msgid "Invalid revision number (%ld) specified"
+msgstr "Numéro de révision invalide (%ld)"
+
+#: ../svnadmin/main.c:997
+msgid "Non-numeric revision specified"
+msgstr "Révision non numérique, invalide"
+
+#: ../svnadmin/main.c:1056
msgid "Invalid property value found in dumpstream; consider repairing the source or using --bypass-prop-validation while loading."
msgstr "Valeur d'une propriété invalide dans le flot de sauvegarde ; envisager de corriger la source ou utiliser l'option --bypass-prop-validation au chargement."
-#: ../svnadmin/main.c:1026 ../svnadmin/main.c:1521
+#: ../svnadmin/main.c:1122 ../svnadmin/main.c:1730
msgid ""
"Failed to get exclusive repository access; perhaps another process\n"
"such as httpd, svnserve or svn has it open?"
@@ -11213,12 +12231,12 @@ msgstr ""
"Échec de l'obtention d'un accès exclusif au dépôt ; peut-être un autre\n"
"processus tel 'httpd', 'svnserve' ou 'svn' a-t-il ouvert le dépôt ?"
-#: ../svnadmin/main.c:1031 ../svnadmin/main.c:1526
+#: ../svnadmin/main.c:1127 ../svnadmin/main.c:1735
#, c-format
msgid "Waiting on repository lock; perhaps another process has it open?\n"
msgstr "Attente du verrou sur le dépôt ; un autre processus le tient-il ?\n"
-#: ../svnadmin/main.c:1039
+#: ../svnadmin/main.c:1135
#, c-format
msgid ""
"\n"
@@ -11227,57 +12245,47 @@ msgstr ""
"\n"
"Fin du rétablissement.\n"
-#: ../svnadmin/main.c:1046
+#: ../svnadmin/main.c:1142
#, c-format
msgid "The latest repos revision is %ld.\n"
msgstr "La dernière révision du dépôt est %ld\n"
-#: ../svnadmin/main.c:1155
+#: ../svnadmin/main.c:1257
#, c-format
msgid "Transaction '%s' removed.\n"
msgstr "Transaction '%s' supprimée.\n"
-#: ../svnadmin/main.c:1214 ../svnadmin/main.c:1264
+#: ../svnadmin/main.c:1319 ../svnadmin/main.c:1364
#, c-format
msgid "Missing revision"
msgstr "Révision absente"
-#: ../svnadmin/main.c:1217 ../svnadmin/main.c:1267
+#: ../svnadmin/main.c:1322 ../svnadmin/main.c:1367
#, c-format
msgid "Only one revision allowed"
msgstr "Une seule révision permise"
-#: ../svnadmin/main.c:1223
-#, c-format
-msgid "Exactly one property name and one file argument required"
-msgstr "Un seul nom de propriété et argument fichier attendu"
-
-#: ../svnadmin/main.c:1273
-#, c-format
-msgid "Exactly one file argument required"
-msgstr "Un seul argument fichier attendu"
-
-#: ../svnadmin/main.c:1399 ../svnlook/main.c:2082
+#: ../svnadmin/main.c:1564 ../svnlook/main.c:2104
#, c-format
msgid "UUID Token: %s\n"
msgstr "Chaîne UUID : %s\n"
-#: ../svnadmin/main.c:1400 ../svnlook/main.c:2083
+#: ../svnadmin/main.c:1565 ../svnlook/main.c:2105
#, c-format
msgid "Owner: %s\n"
msgstr "Propriétaire : %s\n"
-#: ../svnadmin/main.c:1401 ../svnlook/main.c:2084
+#: ../svnadmin/main.c:1566 ../svnlook/main.c:2106
#, c-format
msgid "Created: %s\n"
msgstr "Créé : %s\n"
-#: ../svnadmin/main.c:1402 ../svnlook/main.c:2085
+#: ../svnadmin/main.c:1567 ../svnlook/main.c:2107
#, c-format
msgid "Expires: %s\n"
msgstr "Expire : %s\n"
-#: ../svnadmin/main.c:1404
+#: ../svnadmin/main.c:1569
#, c-format
msgid ""
"Comment (%i line):\n"
@@ -11296,29 +12304,34 @@ msgstr[1] ""
"%s\n"
"\n"
-#: ../svnadmin/main.c:1450
+#: ../svnadmin/main.c:1615
msgid "No paths to unlock provided"
msgstr "Aucun chemin à déverrouiller"
-#: ../svnadmin/main.c:1468
+#: ../svnadmin/main.c:1633
#, c-format
msgid "Path '%s' isn't locked.\n"
msgstr "Le chemin '%s' n'est pas verrouillé (locked)\n"
-#: ../svnadmin/main.c:1480
+#: ../svnadmin/main.c:1645
#, c-format
msgid "Removed lock on '%s'.\n"
msgstr "'%s' déverrouillé\n"
-#: ../svnadmin/main.c:1536
+#: ../svnadmin/main.c:1698
+#, c-format
+msgid "'%s' unlocked by user '%s'.\n"
+msgstr "'%s' déverrouillé par l'utilisateur '%s'.\n"
+
+#: ../svnadmin/main.c:1745
msgid "Upgrade of this repository's underlying versioned filesystem is not supported; consider dumping and loading the data elsewhere"
msgstr "La mise à jour (upgrade) du dépôt avec ce système de fichiers sous-jacent n'est pas supportée ; Essayer de sauvegarder (dump) et restaurer (load) des données ailleurs"
-#: ../svnadmin/main.c:1543
+#: ../svnadmin/main.c:1752
msgid "Upgrade of this repository is not supported; consider dumping and loading the data elsewhere"
msgstr "La mise à jour de ce dépôt n'est pas supportée ; Essayer de sauvegarder (dump) et restaurer (load) les données ailleurs"
-#: ../svnadmin/main.c:1549
+#: ../svnadmin/main.c:1758
#, c-format
msgid ""
"\n"
@@ -11327,16 +12340,25 @@ msgstr ""
"\n"
"Fin de la mise à jour.\n"
-#: ../svnadmin/main.c:1642 ../svnrdump/svnrdump.c:726
+#: ../svnadmin/main.c:1845 ../svnrdump/svnrdump.c:767
msgid "Multiple revision arguments encountered; try '-r N:M' instead of '-r N -r M'"
msgstr "Option -r rencontrée plusieurs fois ; essayer '-r M:N' au lieu de '-r M -r N'"
-#: ../svnadmin/main.c:1778
+#: ../svnadmin/main.c:1985
#, c-format
msgid "subcommand argument required\n"
msgstr "Sous-commande attendue\n"
-#: ../svnadmin/main.c:1851
+#: ../svnadmin/main.c:2020
+msgid "Repository argument required"
+msgstr "Argument précisant le dépôt obligatoire"
+
+#: ../svnadmin/main.c:2033
+#, c-format
+msgid "'%s' is a URL when it should be a local path"
+msgstr "'%s' est une URL au lieu d'un chemin local"
+
+#: ../svnadmin/main.c:2064
#, c-format
msgid ""
"Subcommand '%s' doesn't accept option '%s'\n"
@@ -11345,82 +12367,95 @@ msgstr ""
"La sous-commande '%s' n'accepte pas l'option '%s'\n"
"Entrer 'svnadmin help %s' pour l'aide.\n"
-#: ../svnadmin/main.c:1884
+#: ../svnadmin/main.c:2108
msgid "Try 'svnadmin help' for more info"
msgstr "Essayer 'svnadmin help' pour plus d'information"
-#: ../svndumpfilter/main.c:345
+#: ../svndumpfilter/main.c:73
+#, c-format
+msgid "Can't open stdio file"
+msgstr "Le fichier stdio ne peut être ouvert"
+
+#: ../svndumpfilter/main.c:399
msgid "This is an empty revision for padding."
msgstr "Ceci est une révision vide pour remplissage."
-#: ../svndumpfilter/main.c:421
+#: ../svndumpfilter/main.c:475
#, c-format
msgid "Revision %ld committed as %ld.\n"
msgstr "Révision %ld propagée en %ld\n"
-#: ../svndumpfilter/main.c:444
+#: ../svndumpfilter/main.c:498
#, c-format
msgid "Revision %ld skipped.\n"
msgstr "Révision %ld omise.\n"
-#: ../svndumpfilter/main.c:543
+#: ../svndumpfilter/main.c:597
#, c-format
msgid "Invalid copy source path '%s'"
msgstr "Chemin de la source d'une copie '%s' invalide"
-#: ../svndumpfilter/main.c:589
+#: ../svndumpfilter/main.c:654
#, c-format
msgid "No valid copyfrom revision in filtered stream"
msgstr "Pas de révision source d'une copie dans le flux filtré"
-#: ../svndumpfilter/main.c:714
+#: ../svndumpfilter/main.c:779
#, c-format
msgid "Missing merge source path '%s'; try with --skip-missing-merge-sources"
msgstr "Chemin source de fusion '%s' manquant : essayer avec --skip-missing-merge-sources"
-#: ../svndumpfilter/main.c:736
+#: ../svndumpfilter/main.c:801
#, c-format
msgid "No valid revision range 'start' in filtered stream"
msgstr "Pas de début d'intervalle de révision dans le flux filtré"
-#: ../svndumpfilter/main.c:743
+#: ../svndumpfilter/main.c:808
#, c-format
msgid "No valid revision range 'end' in filtered stream"
msgstr "Pas de fin d'intervalle de révision dans le flux filtré"
-#: ../svndumpfilter/main.c:789
-msgid "Delta property block detected - not supported by svndumpfilter"
-msgstr "Block de propriété delta détecté - non supporté par svndumpfilter"
+#: ../svndumpfilter/main.c:854
+#, c-format
+msgid "Delta property block detected, but deltas are not enabled for node '%s' in original revision %ld"
+msgstr "Bloc de propriété de différence détecté, mais les différences ne sont pas activées pour le nœud '%s' à la révision initiale %ld"
+
+#: ../svndumpfilter/main.c:885
+#, c-format
+msgid "Delta property block detected, but deltas are not enabled for node '%s' in originalrevision %ld"
+msgstr "Bloc de propriété de différence détecté, mais les différences ne sont pas activées pour le nœud '%s' à la révision initiale %ld"
-#: ../svndumpfilter/main.c:925
+#: ../svndumpfilter/main.c:1017
msgid "Do not display filtering statistics."
msgstr "Ne pas affichier les statistiques de filtrage."
-#: ../svndumpfilter/main.c:927
+#: ../svndumpfilter/main.c:1019
msgid "Treat the path prefixes as file glob patterns."
msgstr "Traîte les préfixes de noms de fichiers comme des motifs globaux de fichiers."
-#: ../svndumpfilter/main.c:929
+#: ../svndumpfilter/main.c:1021
msgid "Remove revisions emptied by filtering."
msgstr "Effacer les révisions vidées par le filtrage."
-#: ../svndumpfilter/main.c:931
+#: ../svndumpfilter/main.c:1023
msgid "Renumber revisions left after filtering."
msgstr "Renuméroter les révisions laissées par le filtrage."
-#: ../svndumpfilter/main.c:934
+#: ../svndumpfilter/main.c:1026
msgid "Skip missing merge sources."
msgstr "Ignore les sources de fusion manquantes."
-#: ../svndumpfilter/main.c:936
+#: ../svndumpfilter/main.c:1028
msgid "Don't filter revision properties."
msgstr "Pas de filtrage des propriétés de révision."
-#: ../svndumpfilter/main.c:938
-msgid "Pass contents of file ARG as additional args"
-msgstr "passe le contenu du fichier ARG comme des arguments supplémetaires"
+#: ../svndumpfilter/main.c:1030
+msgid ""
+"Read additional prefixes, one per line, from\n"
+" file ARG."
+msgstr "Lit des préfix additionnels, un par ligne, du fichier ARG."
-#: ../svndumpfilter/main.c:949
+#: ../svndumpfilter/main.c:1042
msgid ""
"Filter out nodes with given prefixes from dumpstream.\n"
"usage: svndumpfilter exclude PATH_PREFIX...\n"
@@ -11428,7 +12463,7 @@ msgstr ""
"Exclure du flux les nœuds ayant un des préfixes donnés.\n"
"usage : svndumpfilter exclude PRÉFIXE...\n"
-#: ../svndumpfilter/main.c:957
+#: ../svndumpfilter/main.c:1050
msgid ""
"Filter out nodes without given prefixes from dumpstream.\n"
"usage: svndumpfilter include PATH_PREFIX...\n"
@@ -11436,7 +12471,7 @@ msgstr ""
"Inclure du flux les nœuds ayant un des préfixes donnés.\n"
"usage : svndumpfilter include PRÉFIXE...\n"
-#: ../svndumpfilter/main.c:965
+#: ../svndumpfilter/main.c:1058
msgid ""
"Describe the usage of this program or its subcommands.\n"
"usage: svndumpfilter help [SUBCOMMAND...]\n"
@@ -11444,7 +12479,7 @@ msgstr ""
"Affiche l'aide sur le programme ou ses sous-commandes.\n"
"usage : svndumpfilter help [SOUS_COMMANDES...]\n"
-#: ../svndumpfilter/main.c:1048
+#: ../svndumpfilter/main.c:1131
msgid ""
"general usage: svndumpfilter SUBCOMMAND [ARGS & OPTIONS ...]\n"
"Type 'svndumpfilter help <subcommand>' for help on a specific subcommand.\n"
@@ -11458,47 +12493,47 @@ msgstr ""
"\n"
"Sous-commandes disponibles :\n"
-#: ../svndumpfilter/main.c:1104
-#, c-format
-msgid "Excluding (and dropping empty revisions for) prefixes:\n"
-msgstr "Exclusion (et élimination des révisions vides) des préfixes :\n"
-
-#: ../svndumpfilter/main.c:1106
-#, c-format
-msgid "Excluding prefixes:\n"
-msgstr "Exclusion des préfixes : \n"
-
-#: ../svndumpfilter/main.c:1108
-#, c-format
-msgid "Including (and dropping empty revisions for) prefixes:\n"
-msgstr "Inclusion (et élimination des révisions vides) des préfixes :\n"
-
-#: ../svndumpfilter/main.c:1110
-#, c-format
-msgid "Including prefixes:\n"
-msgstr "Inclusion des préfixes :\n"
-
-#: ../svndumpfilter/main.c:1117
+#: ../svndumpfilter/main.c:1187
#, c-format
msgid "Excluding (and dropping empty revisions for) prefix patterns:\n"
msgstr "Exclusion (et élimination des révisions vides) des motifs de préfixes :\n"
-#: ../svndumpfilter/main.c:1119
+#: ../svndumpfilter/main.c:1189
#, c-format
msgid "Excluding prefix patterns:\n"
msgstr "Exclusion des motifs de préfixes : \n"
-#: ../svndumpfilter/main.c:1121
+#: ../svndumpfilter/main.c:1191
#, c-format
msgid "Including (and dropping empty revisions for) prefix patterns:\n"
msgstr "Inclusion (et élimination des révisions vides) des motifs de préfixes :\n"
-#: ../svndumpfilter/main.c:1123
+#: ../svndumpfilter/main.c:1193
#, c-format
msgid "Including prefix patterns:\n"
msgstr "Inclusion des motifs de préfixes :\n"
-#: ../svndumpfilter/main.c:1151
+#: ../svndumpfilter/main.c:1200
+#, c-format
+msgid "Excluding (and dropping empty revisions for) prefixes:\n"
+msgstr "Exclusion (et élimination des révisions vides) des préfixes :\n"
+
+#: ../svndumpfilter/main.c:1202
+#, c-format
+msgid "Excluding prefixes:\n"
+msgstr "Exclusion des préfixes : \n"
+
+#: ../svndumpfilter/main.c:1204
+#, c-format
+msgid "Including (and dropping empty revisions for) prefixes:\n"
+msgstr "Inclusion (et élimination des révisions vides) des préfixes :\n"
+
+#: ../svndumpfilter/main.c:1206
+#, c-format
+msgid "Including prefixes:\n"
+msgstr "Inclusion des préfixes :\n"
+
+#: ../svndumpfilter/main.c:1234
#, c-format
msgid ""
"Dropped %d revision.\n"
@@ -11513,23 +12548,23 @@ msgstr[1] ""
"%d révisions éliminées\n"
"\n"
-#: ../svndumpfilter/main.c:1159
+#: ../svndumpfilter/main.c:1242
msgid "Revisions renumbered as follows:\n"
msgstr "Révisions renumérotées comme suit :\n"
-#: ../svndumpfilter/main.c:1187
+#: ../svndumpfilter/main.c:1270
#, c-format
msgid " %ld => (dropped)\n"
msgstr " %ld => (éliminée)\n"
-#: ../svndumpfilter/main.c:1202
+#: ../svndumpfilter/main.c:1285
#, c-format
msgid "Dropped %d node:\n"
msgid_plural "Dropped %d nodes:\n"
msgstr[0] "%d nœud éliminé :\n"
msgstr[1] "%d nœuds éliminés :\n"
-#: ../svndumpfilter/main.c:1474
+#: ../svndumpfilter/main.c:1550
#, c-format
msgid ""
"\n"
@@ -11538,7 +12573,7 @@ msgstr ""
"\n"
"Erreur : aucun préfixe fourni.\n"
-#: ../svndumpfilter/main.c:1505
+#: ../svndumpfilter/main.c:1581
#, c-format
msgid ""
"Subcommand '%s' doesn't accept option '%s'\n"
@@ -11547,55 +12582,55 @@ msgstr ""
"La sous-commande '%s' n'accepte pas l'option '%s'\n"
"Entrer 'svndumpfilter help %s' pour l'aide.\n"
-#: ../svndumpfilter/main.c:1523
+#: ../svndumpfilter/main.c:1599
msgid "Try 'svndumpfilter help' for more info"
msgstr "Essayer 'svndumpfilter help' pour plus d'information"
-#: ../svnlook/main.c:107
+#: ../svnlook/main.c:108
msgid "show details for copies"
msgstr "affiche les détails concernant les copies"
-#: ../svnlook/main.c:110
+#: ../svnlook/main.c:111
msgid "print differences against the copy source"
msgstr "affiche les différences par rapport à la source de la copie"
-#: ../svnlook/main.c:113
+#: ../svnlook/main.c:114
msgid "show full paths instead of indenting them"
msgstr "affiche les chemins complets au lieu de les indenter"
-#: ../svnlook/main.c:119
+#: ../svnlook/main.c:120
msgid "maximum number of history entries"
msgstr "nombre maximum d'entrées dans l'historique"
-#: ../svnlook/main.c:122
+#: ../svnlook/main.c:123
msgid "do not print differences for added files"
msgstr "n'affiche pas les différences pour les fichiers ajoutés"
-#: ../svnlook/main.c:128
+#: ../svnlook/main.c:129
msgid "operate on single directory only"
msgstr "opère sur un seul répertoire"
-#: ../svnlook/main.c:131
+#: ../svnlook/main.c:132
msgid "specify revision number ARG"
msgstr "précise le numéro de révision ARG"
-#: ../svnlook/main.c:134
+#: ../svnlook/main.c:135
msgid "operate on a revision property (use with -r or -t)"
msgstr "opère sur une propriéte de révision (utiliser avec -r ou -t)"
-#: ../svnlook/main.c:137
+#: ../svnlook/main.c:138
msgid "show node revision ids for each path"
msgstr "donne l'identifiant du nœud de révision pour chaque objet"
-#: ../svnlook/main.c:140
+#: ../svnlook/main.c:141
msgid "specify transaction name ARG"
msgstr "précise le nom de la transaction ARG"
-#: ../svnlook/main.c:143
+#: ../svnlook/main.c:144
msgid "be verbose"
msgstr "verbeux"
-#: ../svnlook/main.c:152
+#: ../svnlook/main.c:153
msgid ""
"Default: '-u'. When Subversion is invoking an\n"
" external diff program, ARG is simply passed along\n"
@@ -11610,7 +12645,9 @@ msgid ""
" -w (--ignore-all-space):\n"
" Ignore all white space.\n"
" --ignore-eol-style:\n"
-" Ignore changes in EOL style"
+" Ignore changes in EOL style\n"
+" -p (--show-c-function):\n"
+" Show C function name in diff output."
msgstr ""
"Défaut : '-u'. \n"
" Quand subversion invoque un programme diff externe, ARG est \n"
@@ -11624,9 +12661,11 @@ msgstr ""
" -w (--ignore-all-space) :\n"
" ignore tous les espaces.\n"
" --ignore-eol-style : \n"
-" ignore les changements de style de fin de ligne (eol)."
+" ignore les changements de style de fin de ligne (eol).\n"
+" -p (--show-c-function):\n"
+" affiche les noms des fonctions C dans la sortie de diff."
-#: ../svnlook/main.c:193
+#: ../svnlook/main.c:198
msgid ""
"usage: svnlook author REPOS_PATH\n"
"\n"
@@ -11636,7 +12675,7 @@ msgstr ""
"\n"
"Affiche l'auteur.\n"
-#: ../svnlook/main.c:198
+#: ../svnlook/main.c:203
msgid ""
"usage: svnlook cat REPOS_PATH FILE_PATH\n"
"\n"
@@ -11647,7 +12686,7 @@ msgstr ""
"Affiche le contenu d'un fichier.\n"
"Le '/' de tête dans le chemin est optionnel.\n"
-#: ../svnlook/main.c:203
+#: ../svnlook/main.c:208
msgid ""
"usage: svnlook changed REPOS_PATH\n"
"\n"
@@ -11657,7 +12696,7 @@ msgstr ""
"\n"
"Affiche les objets modifiés.\n"
-#: ../svnlook/main.c:208
+#: ../svnlook/main.c:213
msgid ""
"usage: svnlook date REPOS_PATH\n"
"\n"
@@ -11667,7 +12706,7 @@ msgstr ""
"\n"
"Affiche la date de dernière modification.\n"
-#: ../svnlook/main.c:213
+#: ../svnlook/main.c:218
msgid ""
"usage: svnlook diff REPOS_PATH\n"
"\n"
@@ -11677,7 +12716,7 @@ msgstr ""
"\n"
"Affiche les différences des fichiers et propriétés modifiés au style GNU\n"
-#: ../svnlook/main.c:219
+#: ../svnlook/main.c:224
msgid ""
"usage: svnlook dirs-changed REPOS_PATH\n"
"\n"
@@ -11689,7 +12728,7 @@ msgstr ""
"Affiche les répertoires eux-même modifiés (édition de propriétés) ou dont\n"
"les fichiers contenus ont été changés.\n"
-#: ../svnlook/main.c:225
+#: ../svnlook/main.c:230
msgid ""
"usage: svnlook filesize REPOS_PATH PATH_IN_REPOS\n"
"\n"
@@ -11700,7 +12739,7 @@ msgstr ""
"\n"
"Affiche la taille en octets du fichiers situé à CHEMIN_DANS_LE_DÉPÔT.\n"
-#: ../svnlook/main.c:231
+#: ../svnlook/main.c:236
msgid ""
"usage: svnlook help [SUBCOMMAND...]\n"
"\n"
@@ -11710,7 +12749,7 @@ msgstr ""
"\n"
"Affiche l'aide sur ce programme ou ses sous-commandes.\n"
-#: ../svnlook/main.c:236
+#: ../svnlook/main.c:241
msgid ""
"usage: svnlook history REPOS_PATH [PATH_IN_REPOS]\n"
"\n"
@@ -11722,7 +12761,7 @@ msgstr ""
"Affiche l'historique d'un objet dans le dépôt (ou de la racine du dépôt\n"
"si aucun objet n'est précisé).\n"
-#: ../svnlook/main.c:242
+#: ../svnlook/main.c:247
msgid ""
"usage: svnlook info REPOS_PATH\n"
"\n"
@@ -11732,7 +12771,7 @@ msgstr ""
"\n"
"Affiche l'auteur, la date, la taille et le contenu de l'entrée du journal.\n"
-#: ../svnlook/main.c:247
+#: ../svnlook/main.c:252
msgid ""
"usage: svnlook lock REPOS_PATH PATH_IN_REPOS\n"
"\n"
@@ -11742,7 +12781,7 @@ msgstr ""
"\n"
"Décrit le verrou sur le chemin dans le dépôt, s'il existe.\n"
-#: ../svnlook/main.c:252
+#: ../svnlook/main.c:257
msgid ""
"usage: svnlook log REPOS_PATH\n"
"\n"
@@ -11752,7 +12791,7 @@ msgstr ""
"\n"
"Affiche l'entrée du journal (log).\n"
-#: ../svnlook/main.c:257
+#: ../svnlook/main.c:262
msgid ""
"usage: 1. svnlook propget REPOS_PATH PROPNAME PATH_IN_REPOS\n"
" 2. svnlook propget --revprop REPOS_PATH PROPNAME\n"
@@ -11766,7 +12805,7 @@ msgstr ""
"Affiche la valeur brute de la propriété pour un objet du dépôt.\n"
"Avec --revprop, affiche la valeur brute d'une propriété de révision.\n"
-#: ../svnlook/main.c:266
+#: ../svnlook/main.c:271
msgid ""
"usage: 1. svnlook proplist REPOS_PATH PATH_IN_REPOS\n"
" 2. svnlook proplist --revprop REPOS_PATH\n"
@@ -11781,7 +12820,7 @@ msgstr ""
"Liste les propriétés d'un objet du dépôt, ou avec --revprop les propriétés\n"
"de révision. Avec -v, donne en sus leurs valeurs.\n"
-#: ../svnlook/main.c:276
+#: ../svnlook/main.c:281
msgid ""
"usage: svnlook tree REPOS_PATH [PATH_IN_REPOS]\n"
"\n"
@@ -11793,7 +12832,7 @@ msgstr ""
"Affiche l'arborescence à partir de CHEMIN_DANS_DÉPÔT ou de la racine\n"
"du dépôt si non précisé. Montre optionnellement les nœuds de révision.\n"
-#: ../svnlook/main.c:282
+#: ../svnlook/main.c:287
msgid ""
"usage: svnlook uuid REPOS_PATH\n"
"\n"
@@ -11803,7 +12842,7 @@ msgstr ""
"\n"
"Affiche l'UUID (identifiant unique) du dépôt.\n"
-#: ../svnlook/main.c:287
+#: ../svnlook/main.c:292
msgid ""
"usage: svnlook youngest REPOS_PATH\n"
"\n"
@@ -11813,28 +12852,28 @@ msgstr ""
"\n"
"Affiche le numéro de la révision la plus récente.\n"
-#: ../svnlook/main.c:939
+#: ../svnlook/main.c:958
#, c-format
msgid "Copied: %s (from rev %ld, %s)\n"
msgstr "Copié : %s (de révision %ld, %s)\n"
-#: ../svnlook/main.c:1007
+#: ../svnlook/main.c:1026
msgid "Added"
msgstr "Ajouté"
-#: ../svnlook/main.c:1008
+#: ../svnlook/main.c:1027
msgid "Deleted"
msgstr "Supprimé"
-#: ../svnlook/main.c:1009
+#: ../svnlook/main.c:1028
msgid "Modified"
msgstr "Modifié"
-#: ../svnlook/main.c:1010
+#: ../svnlook/main.c:1029
msgid "Index"
msgstr "Index"
-#: ../svnlook/main.c:1022
+#: ../svnlook/main.c:1041
msgid ""
"(Binary files differ)\n"
"\n"
@@ -11842,30 +12881,30 @@ msgstr ""
"(les fichiers binaires diffèrent)\n"
"\n"
-#: ../svnlook/main.c:1232
+#: ../svnlook/main.c:1252
msgid "unknown"
msgstr "inconnu"
-#: ../svnlook/main.c:1379 ../svnlook/main.c:1485 ../svnlook/main.c:1514
+#: ../svnlook/main.c:1399 ../svnlook/main.c:1504 ../svnlook/main.c:1532
#, c-format
msgid "Transaction '%s' is not based on a revision; how odd"
msgstr "La transaction '%s' n'est pas basée sur une révision ; bizarre"
-#: ../svnlook/main.c:1409
+#: ../svnlook/main.c:1428
#, c-format
msgid "'%s' is a URL, probably should be a path"
msgstr "'%s' est une URL, ce devrait plutôt être un chemin local"
-#: ../svnlook/main.c:1432 ../svnlook/main.c:1455
+#: ../svnlook/main.c:1451 ../svnlook/main.c:1474
#, c-format
msgid "Path '%s' is not a file"
msgstr "Le chemin '%s' n'est pas un fichier"
-#: ../svnlook/main.c:1579
+#: ../svnlook/main.c:1596
msgid "History item limit reached"
msgstr "Limite des éléments d'historique atteinte"
-#: ../svnlook/main.c:1598
+#: ../svnlook/main.c:1615
#, c-format
msgid ""
"REVISION PATH <ID>\n"
@@ -11874,7 +12913,7 @@ msgstr ""
"RÉVISION CHEMIN <ID>\n"
"-------- -----------\n"
-#: ../svnlook/main.c:1603
+#: ../svnlook/main.c:1620
#, c-format
msgid ""
"REVISION PATH\n"
@@ -11883,26 +12922,26 @@ msgstr ""
"RÉVISION CHEMIN\n"
"-------- ------\n"
-#: ../svnlook/main.c:1652
+#: ../svnlook/main.c:1669
#, c-format
msgid "Property '%s' not found on revision %ld"
msgstr "Propriété '%s' absente à la révision %ld"
-#: ../svnlook/main.c:1659
+#: ../svnlook/main.c:1676
#, c-format
msgid "Property '%s' not found on path '%s' in revision %ld"
msgstr "Propriété '%s' absente du chemin '%s' à la révision %ld"
-#: ../svnlook/main.c:1664
+#: ../svnlook/main.c:1681
#, c-format
msgid "Property '%s' not found on path '%s' in transaction %s"
msgstr "Propriété '%s' absente du chemin '%s' dans la transaction %s"
-#: ../svnlook/main.c:1862
+#: ../svnlook/main.c:1883
msgid "Missing repository path argument"
msgstr "Chemin du dépôt manquant"
-#: ../svnlook/main.c:2010
+#: ../svnlook/main.c:2032
msgid ""
"general usage: svnlook SUBCOMMAND REPOS_PATH [ARGS & OPTIONS ...]\n"
"Note: any subcommand which takes the '--revision' and '--transaction'\n"
@@ -11921,7 +12960,7 @@ msgstr ""
"\n"
"Sous-commandes disponibles :\n"
-#: ../svnlook/main.c:2087
+#: ../svnlook/main.c:2109
#, c-format
msgid ""
"Comment (%i line):\n"
@@ -11936,39 +12975,39 @@ msgstr[1] ""
"Commentaire (%i lignes) :\n"
"%s\n"
-#: ../svnlook/main.c:2139
+#: ../svnlook/main.c:2161
#, c-format
msgid "Missing propname argument"
msgstr "Le nom de la propriété manque"
-#: ../svnlook/main.c:2140
+#: ../svnlook/main.c:2162
#, c-format
msgid "Missing propname and repository path arguments"
msgstr "Le nom de la propriété et le chemin du dépôt manquent"
-#: ../svnlook/main.c:2146
+#: ../svnlook/main.c:2168
msgid "Missing propname or repository path argument"
msgstr "Le nom de la propriété ou le chemin du dépôt manque"
-#: ../svnlook/main.c:2314
+#: ../svnlook/main.c:2329
msgid "Invalid revision number supplied"
msgstr "Numéro de révision invalide"
-#: ../svnlook/main.c:2410
+#: ../svnlook/main.c:2425
msgid "The '--transaction' (-t) and '--revision' (-r) arguments cannot co-exist"
msgstr "'--transaction' (-t) et '--revision' (-r) sont mutuellement exclusifs"
-#: ../svnlook/main.c:2493
+#: ../svnlook/main.c:2508
#, c-format
msgid "Repository argument required\n"
msgstr "Un dépôt est requis en argument\n"
-#: ../svnlook/main.c:2502
+#: ../svnlook/main.c:2517
#, c-format
msgid "'%s' is a URL when it should be a path\n"
msgstr "'%s' est une URL au lieu d'un chemin local\n"
-#: ../svnlook/main.c:2554
+#: ../svnlook/main.c:2569
#, c-format
msgid ""
"Subcommand '%s' doesn't accept option '%s'\n"
@@ -11977,20 +13016,20 @@ msgstr ""
"La sous-commande '%s' n'accepte pas l'option '%s'\n"
"Entrer 'svnlook help %s' pour l'aide.\n"
-#: ../svnlook/main.c:2597
+#: ../svnlook/main.c:2612
msgid "Try 'svnlook help' for more info"
msgstr "Essayer 'svnlook help' pour plus d'information"
-#: ../svnrdump/load_editor.c:65 ../svnsync/main.c:306
+#: ../svnrdump/load_editor.c:382 ../svnsync/main.c:318
#, c-format
msgid "Failed to get lock on destination repos, currently held by '%s'\n"
msgstr "Échec a l'obtention du verrou du dépôt destination, tenu par '%s'\n"
-#: ../svnrdump/load_editor.c:95
+#: ../svnrdump/load_editor.c:527
msgid "Target server does not support atomic revision property edits; consider upgrading it to 1.7."
msgstr "Le serveur cible ne supporte pas l'édition atomique des propriétés de révision ; Envisager de mettre à jour en 1.7."
-#: ../svnrdump/svnrdump.c:96
+#: ../svnrdump/svnrdump.c:97
msgid ""
"usage: svnrdump dump URL [-r LOWER[:UPPER]]\n"
"\n"
@@ -12004,7 +13043,7 @@ msgstr ""
"au format portable 'dumpfile'.\n"
"Si seul BAS est donné, décharge cette révision particulière.\n"
-#: ../svnrdump/svnrdump.c:102
+#: ../svnrdump/svnrdump.c:103
msgid ""
"usage: svnrdump load URL\n"
"\n"
@@ -12015,7 +13054,7 @@ msgstr ""
"Charge un flux au format 'dumpfile' de l'entrée standard vers le dépôt distant\n"
"URL.\n"
-#: ../svnrdump/svnrdump.c:106
+#: ../svnrdump/svnrdump.c:107
msgid ""
"usage: svnrdump help [SUBCOMMAND...]\n"
"\n"
@@ -12025,11 +13064,15 @@ msgstr ""
"\n"
"Décrit l'utilisation de ce programme ou de ses sous-commandes.\n"
-#: ../svnrdump/svnrdump.c:131 ../svnserve/main.c:218 ../svnversion/main.c:137
+#: ../svnrdump/svnrdump.c:120
+msgid "dump incrementally"
+msgstr "décharge incrémentale"
+
+#: ../svnrdump/svnrdump.c:132 ../svnserve/main.c:268 ../svnversion/main.c:137
msgid "display this help"
msgstr "affiche cet aide"
-#: ../svnrdump/svnrdump.c:550
+#: ../svnrdump/svnrdump.c:576
msgid ""
"general usage: svnrdump SUBCOMMAND URL [-r LOWER[:UPPER]]\n"
"Type 'svnrdump help <subcommand>' for help on a specific subcommand.\n"
@@ -12043,20 +13086,20 @@ msgstr ""
"\n"
"Sous-commandes disponibles :\n"
-#: ../svnrdump/svnrdump.c:589 ../svnrdump/svnrdump.c:618
+#: ../svnrdump/svnrdump.c:620 ../svnrdump/svnrdump.c:654
msgid "Unsupported revision specifier used; use only integer values or 'HEAD'"
msgstr "Identifiant de révision non supporté ; utiliser seulement des entiers ou 'HEAD'"
-#: ../svnrdump/svnrdump.c:597 ../svnrdump/svnrdump.c:626
+#: ../svnrdump/svnrdump.c:628 ../svnrdump/svnrdump.c:662
#, c-format
msgid "Revision '%ld' does not exist"
msgstr "La révision '%ld' n'existe pas"
-#: ../svnrdump/svnrdump.c:636
+#: ../svnrdump/svnrdump.c:672
msgid "LOWER revision cannot be greater than UPPER revision; consider reversing your revision range"
msgstr "la révision BASse ne doit pas être supérieur à la HAUTe ; envisager d'inverser l'intervalle de révision"
-#: ../svnrdump/svnrdump.c:858
+#: ../svnrdump/svnrdump.c:902
#, c-format
msgid ""
"Subcommand '%s' doesn't accept option '%s'\n"
@@ -12065,84 +13108,80 @@ msgstr ""
"La sous-commande '%s' n'accepte pas l'option '%s'\n"
"Entrer 'svnrdump help %s' pour l'aide.\n"
-#: ../svnserve/cyrus_auth.c:264
+#: ../svnserve/cyrus_auth.c:118
+msgid "Could not initialize the SASL library"
+msgstr "Impossible d'initialiser la librairie SASL"
+
+#: ../svnserve/cyrus_auth.c:259
#, c-format
msgid "Can't get hostname"
msgstr "Impossible d'obtenir le nom d'hôte"
-#: ../svnserve/cyrus_auth.c:329
+#: ../svnserve/cyrus_auth.c:324
msgid "Could not obtain the list of SASL mechanisms"
msgstr "Impossible d'obtenir la liste des mécanismes SASL"
-#: ../svnserve/cyrus_auth.c:371
+#: ../svnserve/cyrus_auth.c:366
msgid "Couldn't obtain the authenticated username"
msgstr "Impossible d'obtenir le nom d'utilisateur authentifié"
-#: ../svnserve/main.c:151
+#: ../svnserve/main.c:155
msgid "daemon mode"
msgstr "mode démon"
-#: ../svnserve/main.c:152
+#: ../svnserve/main.c:156
msgid "inetd mode"
msgstr "mode inetd"
-#: ../svnserve/main.c:153
+#: ../svnserve/main.c:157
msgid "tunnel mode"
msgstr "mode tunnel"
-#: ../svnserve/main.c:154
+#: ../svnserve/main.c:158
msgid "listen-once mode (useful for debugging)"
msgstr "Mode écoute une seule fois (utile pour le déboguage)"
-#: ../svnserve/main.c:157
+#: ../svnserve/main.c:161
msgid "Windows service mode (Service Control Manager)"
msgstr "Mode service de Window (Service Control Manager)"
-#: ../svnserve/main.c:159
+#: ../svnserve/main.c:163
msgid "root of directory to serve"
msgstr "racine des répertoires à servir"
-#: ../svnserve/main.c:161
+#: ../svnserve/main.c:165
msgid "force read only, overriding repository config file"
msgstr "force en lecture seule, en ignorant la configuration du dépôt"
-#: ../svnserve/main.c:163
+#: ../svnserve/main.c:167
msgid "read configuration from file ARG"
msgstr "lit la configuration à partir du fichier ARG"
-#: ../svnserve/main.c:166
-msgid ""
-"listen port\n"
-" [mode: daemon, service, listen-once]"
-msgstr ""
-"port écouté\n"
-" [mode : daemon, sercice, listen-once]"
+#: ../svnserve/main.c:170 ../svnserve/main.c:174
+msgid "listen port. The default port is "
+msgstr "Écoute ce port. Le port par défaut est"
-#: ../svnserve/main.c:170
-msgid ""
-"listen port\n"
-" [mode: daemon, listen-once]"
-msgstr ""
-"port écouté\n"
-" [mode : daemon, listen-once]"
-
-#: ../svnserve/main.c:176
+#: ../svnserve/main.c:180
msgid ""
"listen hostname or IP address\n"
+" By default svnserve listens on all addresses.\n"
" [mode: daemon, service, listen-once]"
msgstr ""
"hôte ou adresse IP écoutée\n"
-" [mode : daemon, listen-once]"
+" Par défaut, svnserve écoute sur toutes les adresses\n"
+" [mode : daemon, service, listen-once]"
-#: ../svnserve/main.c:180
+#: ../svnserve/main.c:186
msgid ""
"listen hostname or IP address\n"
+" By default svnserve listens on all addresses.\n"
" [mode: daemon, listen-once]"
msgstr ""
"nom ou adresse IP à écouter\n"
+" Par défaut, svnserve écoute sur toutes les adresses\n"
" [mode : daemon, listen-once]"
-#: ../svnserve/main.c:185
+#: ../svnserve/main.c:193
msgid ""
"prefer IPv6 when resolving the listen hostname\n"
" [IPv4 is preferred by default. Using IPv4 and IPv6\n"
@@ -12154,13 +13193,66 @@ msgstr ""
" IPv6 n'est pas supportée en mode démon. Utiliser les modes\n"
" \"inetd\" ou \"tunnel\" si besoin.]"
+#: ../svnserve/main.c:201
+msgid ""
+"compression level to use for network transmissions\n"
+" [0 .. no compression, 5 .. default, \n"
+" 9 .. maximum compression]"
+msgstr ""
+"taux de compression à utiliser pour les transferts réseaux.\n"
+" [ 0 .. pas de compression, 5 .. par défaut, 9 .. effort maximal]"
+
+#: ../svnserve/main.c:207
+msgid ""
+"size of the extra in-memory cache in MB used to\n"
+" minimize redundant operations.\n"
+" Default is 128 for threaded and 16 for non-\n"
+" threaded mode.\n"
+" [used for FSFS repositories only]"
+msgstr ""
+"taille de la mémoire cache en méga-octets (MB) utilisé pour\n"
+" minimiser les opérations redondantes.\n"
+" 128 par défaut pour le mode avec fils d'exécutions (threads), 16 sinon.\n"
+" [utilisé seulement pour les dépôt FSFS]"
+
+#: ../svnserve/main.c:217
+msgid ""
+"enable or disable caching of deltas between older\n"
+" revisions.\n"
+" Default is no.\n"
+" [used for FSFS repositories only]"
+msgstr ""
+"Active ou désactive le cache ds différences entre les anciennes révisions.\n"
+" Non par défaut. [utilisé seulement pour les dépôts FSFS]"
+
+#: ../svnserve/main.c:225
+msgid ""
+"enable or disable caching of file contents\n"
+" Default is yes.\n"
+" [used for FSFS repositories only]"
+msgstr ""
+"Active ou désactive le cache de contenu de fichiers. Activé par défaut (yes)\n"
+" [utilisé seulement pour les dépôt FSFS]"
+
+#: ../svnserve/main.c:231
+msgid ""
+"enable or disable caching of revision properties.\n"
+" Consult the documentation before activating this.\n"
+" Default is no.\n"
+" [used for FSFS repositories only]"
+msgstr ""
+"Active ou désactive le cache des révisions propriétés.\n"
+" Consulter la documentation avant d'activer cette option.\n"
+" La valeur par défaut est 'no', le cache est désactivé.\n"
+" [utilisé seulement pour les dépôts FSFS]"
+
#. ### Making the assumption here that WIN32 never has fork and so
#. * ### this option never exists when --service exists.
-#: ../svnserve/main.c:195
+#: ../svnserve/main.c:241
msgid "use threads instead of fork [mode: daemon]"
msgstr "Utilise des 'threads' au lieu de 'fork' [mode : daemon]"
-#: ../svnserve/main.c:199
+#: ../svnserve/main.c:245
msgid ""
"run in foreground (useful for debugging)\n"
" [mode: daemon]"
@@ -12168,11 +13260,19 @@ msgstr ""
"lancement en avant-plan (foreground, utile pour le déboguage)\n"
" [mode : daemon]"
-#: ../svnserve/main.c:203
+#: ../svnserve/main.c:249
+msgid ""
+"handle one connection at a time in the parent process\n"
+" (useful for debugging)"
+msgstr ""
+"Utilise une connexion à la fois dans le processus parent\n"
+" (utile pour le déboguage)"
+
+#: ../svnserve/main.c:253
msgid "svnserve log file"
msgstr "fichier de trace de svnserve"
-#: ../svnserve/main.c:206
+#: ../svnserve/main.c:256
msgid ""
"write server process ID to file ARG\n"
" [mode: daemon, listen-once, service]"
@@ -12180,7 +13280,7 @@ msgstr ""
"écrit le numéro de processus du serveur dans le fichier ARG\n"
" [mode : daemon, listen-once, service]"
-#: ../svnserve/main.c:210
+#: ../svnserve/main.c:260
msgid ""
"write server process ID to file ARG\n"
" [mode: daemon, listen-once]"
@@ -12188,7 +13288,7 @@ msgstr ""
"écrit le numéro de processus du serveur dans le fichier ARG\n"
" [mode : daemon, listen-once]"
-#: ../svnserve/main.c:215
+#: ../svnserve/main.c:265
msgid ""
"tunnel username (default is current uid's name)\n"
" [mode: tunnel]"
@@ -12196,12 +13296,12 @@ msgstr ""
"nom d'utilisateur du tunnel (nom d'utilisateur courant par défaut)\n"
" [mode : tunnel]"
-#: ../svnserve/main.c:233
+#: ../svnserve/main.c:283
#, c-format
msgid "Type '%s --help' for usage.\n"
msgstr "Entrer '%s --help' pour l'aide.\n"
-#: ../svnserve/main.c:243
+#: ../svnserve/main.c:293
msgid ""
"usage: svnserve [-d | -i | -t | -X | --service] [options]\n"
"\n"
@@ -12211,7 +13311,7 @@ msgstr ""
"\n"
"Options disponibles :\n"
-#: ../svnserve/main.c:249
+#: ../svnserve/main.c:299
msgid ""
"usage: svnserve [-d | -i | -t | -X] [options]\n"
"\n"
@@ -12221,7 +13321,7 @@ msgstr ""
"\n"
"Options disponibles :\n"
-#: ../svnserve/main.c:277
+#: ../svnserve/main.c:327
msgid ""
"\n"
"Cyrus SASL authentication is available.\n"
@@ -12229,83 +13329,92 @@ msgstr ""
"\n"
"Authentification Cyrus SASL disponible.\n"
-#: ../svnserve/main.c:494
+#: ../svnserve/main.c:561
#, c-format
msgid "Invalid port '%s'"
msgstr "Port '%s' invalide"
-#: ../svnserve/main.c:535
+#: ../svnserve/main.c:602
#, c-format
msgid "svnserve: Root path '%s' does not exist or is not a directory.\n"
msgstr "svnserve : Le chemin racine '%s' n'existe pas ou n'est pas un répertoire.\n"
-#: ../svnserve/main.c:599
+#: ../svnserve/main.c:694
msgid "You must specify exactly one of -d, -i, -t, --service or -X.\n"
msgstr "Une des options -d, -i, -t, --service ou -X doit être précisée.\n"
-#: ../svnserve/main.c:602
+#: ../svnserve/main.c:697
msgid "You must specify exactly one of -d, -i, -t or -X.\n"
msgstr "Une des options -d, -i, -t ou -X doit être précisée.\n"
-#: ../svnserve/main.c:627
+#: ../svnserve/main.c:706
+msgid "You may only specify one of -T or --single-thread\n"
+msgstr "On ne peut spécifier qu'une option entre -T et --single-thread\n"
+
+#: ../svnserve/main.c:730
#, c-format
msgid "Option --tunnel-user is only valid in tunnel mode.\n"
msgstr "L'option --tunnel-user n'est valide qu'en mode tunnel.\n"
-#: ../svnserve/main.c:692
+#: ../svnserve/main.c:749
+#, c-format
+msgid "Can't open stdout"
+msgstr "La sortie standard (stdout) ne peut être ouverte"
+
+#: ../svnserve/main.c:801
#, c-format
msgid "svnserve: The --service flag is only valid if the process is started by the Service Control Manager.\n"
msgstr "svnserve : L'option --service n'est valide que si le processus est lancé par le contrôleur de service (SCM)\n"
-#: ../svnserve/main.c:742
+#: ../svnserve/main.c:851
#, c-format
msgid "Can't get address info"
msgstr "Impossible d'avoir les informations de l'adresse"
-#: ../svnserve/main.c:756
+#: ../svnserve/main.c:865
#, c-format
msgid "Can't create server socket"
msgstr "Impossible de créer un 'socket' serveur"
-#: ../svnserve/main.c:767
+#: ../svnserve/main.c:876
#, c-format
msgid "Can't bind server socket"
msgstr "Impossible de lier (bind) le 'socket' serveur"
-#: ../svnserve/main.c:845
+#: ../svnserve/main.c:972
#, c-format
msgid "Can't accept client connection"
msgstr "Impossible d'accepter une connexion d'un client"
-#: ../svnserve/main.c:921
+#: ../svnserve/main.c:1050
#, c-format
msgid "Can't create threadattr"
msgstr "Impossible de créer un attribut de thread (threadattr)"
-#: ../svnserve/main.c:929
+#: ../svnserve/main.c:1058
#, c-format
msgid "Can't set detached state"
msgstr "Impossible de détacher la thread"
-#: ../svnserve/main.c:942
+#: ../svnserve/main.c:1071
#, c-format
msgid "Can't create thread"
msgstr "Impossible de créer une thread"
-#: ../svnserve/serve.c:1866
+#: ../svnserve/serve.c:1861
msgid "Path is not a string"
msgstr "Le chemin n'est pas une chaîne de caractère"
-#: ../svnserve/serve.c:2020
+#: ../svnserve/serve.c:2014
msgid "Log revprop entry not a string"
msgstr "L'entrée 'log' n'est pas une chaîne de caractères"
-#: ../svnserve/serve.c:2026
+#: ../svnserve/serve.c:2020
#, c-format
msgid "Unknown revprop word '%s' in log command"
msgstr "Mot de propriété de révision '%s' inconnu dans une commande de log"
-#: ../svnserve/serve.c:2042
+#: ../svnserve/serve.c:2036
msgid "Log path entry not a string"
msgstr "L'entrée 'path' n'est pas une chaîne de caractères"
@@ -12329,7 +13438,7 @@ msgstr "Échec de la connexion au contrôleur de service (SCM)"
msgid "The service failed to start; an internal error occurred while starting the service"
msgstr "Échec au démarrage du service ; une erreur interne est intervenue"
-#: ../svnsync/main.c:86
+#: ../svnsync/main.c:88
msgid ""
"usage: svnsync initialize DEST_URL SOURCE_URL\n"
"\n"
@@ -12374,7 +13483,7 @@ msgstr ""
"du dépôt destination qu'avec 'svnsync'. Autrement dit, le dépôt\n"
"destination doit être un mirroir en lecture seule du dépôt source.\n"
-#: ../svnsync/main.c:111
+#: ../svnsync/main.c:114
msgid ""
"usage: svnsync synchronize DEST_URL [SOURCE_URL]\n"
"\n"
@@ -12397,7 +13506,7 @@ msgstr ""
"des utilisateurs ou administrateurs non fiables peuvent avoir accès en\n"
"écriture au dépôt de l'URL destination.\n"
-#: ../svnsync/main.c:124
+#: ../svnsync/main.c:127
msgid ""
"usage:\n"
"\n"
@@ -12431,7 +13540,7 @@ msgstr ""
"\n"
"La seconde forme est dépréciée, équivalente à spécifier \"-rREV:REV2\".\n"
-#: ../svnsync/main.c:145
+#: ../svnsync/main.c:148
msgid ""
"usage: svnsync info DEST_URL\n"
"\n"
@@ -12443,7 +13552,7 @@ msgstr ""
"Affiche les informations du dépôt destination d'une synchronisation\n"
"à URL_DEST.\n"
-#: ../svnsync/main.c:151
+#: ../svnsync/main.c:154
msgid ""
"usage: svnsync help [SUBCOMMAND...]\n"
"\n"
@@ -12453,11 +13562,11 @@ msgstr ""
"\n"
"Décrit l'utilisation de ce programme ou de ses sous-commandes.\n"
-#: ../svnsync/main.c:161
+#: ../svnsync/main.c:164
msgid "print as little as possible"
msgstr "essaie de se taire"
-#: ../svnsync/main.c:163
+#: ../svnsync/main.c:166
msgid ""
"operate on revision ARG (or range ARG1:ARG2)\n"
" A revision argument can be one of:\n"
@@ -12468,17 +13577,17 @@ msgstr ""
" Un argument de révision peut-être : NUM numéro de révision\n"
" HEAD dernière révision du dépôt"
-#: ../svnsync/main.c:171
+#: ../svnsync/main.c:174
msgid "allow a non-empty destination repository"
msgstr "accepte un dépôt destination non vide"
-#: ../svnsync/main.c:177
+#: ../svnsync/main.c:180
msgid ""
"specify a username ARG (deprecated;\n"
" see --source-username and --sync-username)"
msgstr "donne un login en argument (déprécié, cf --source-username et --sync-username)"
-#: ../svnsync/main.c:181
+#: ../svnsync/main.c:184
msgid ""
"specify a password ARG (deprecated;\n"
" see --source-password and --sync-password)"
@@ -12486,23 +13595,32 @@ msgstr ""
"donne un mot de passe en argument\n"
" (déprécié ; cf --source-password et --sync-password)"
-#: ../svnsync/main.c:189
+#: ../svnsync/main.c:194
msgid "connect to source repository with username ARG"
msgstr "se connecte au dépôt source avec le login ARG"
-#: ../svnsync/main.c:191
+#: ../svnsync/main.c:196
msgid "connect to source repository with password ARG"
msgstr "se connecte au dépôt source avec le mot de passe ARG"
-#: ../svnsync/main.c:193
+#: ../svnsync/main.c:198
msgid "connect to sync repository with username ARG"
msgstr "se connecte au dépôt synchronisé avec le login ARG"
-#: ../svnsync/main.c:195
+#: ../svnsync/main.c:200
msgid "connect to sync repository with password ARG"
msgstr "se connecte au dépôt synchronisé avec le mot de passe ARG"
-#: ../svnsync/main.c:207
+#: ../svnsync/main.c:212
+msgid ""
+"convert translatable properties from encoding ARG\n"
+" to UTF-8. If not specified, then properties are\n"
+" presumed to be encoded in UTF-8."
+msgstr ""
+"conversion des propriétés de l'encodage ARG à UTF-8.\n"
+" Si non spécifié, les propriétés sont présumées encodées en UTF-8."
+
+#: ../svnsync/main.c:218
msgid ""
"Disable built-in locking. Use of this option can\n"
" corrupt the mirror unless you ensure that no other\n"
@@ -12512,7 +13630,7 @@ msgstr ""
" L'usage de cette option peut corrompre le mirroir si vous n'assurez\n"
" pas qu'aucune autre instance de svnsync ne fonctionne en parallèle."
-#: ../svnsync/main.c:213
+#: ../svnsync/main.c:224
msgid ""
"Steal locks as necessary. Use, with caution,\n"
" if your mirror repository contains stale locks\n"
@@ -12523,122 +13641,122 @@ msgstr ""
" si un dépôt miroir contient des verrous un peu rassis et n'est\n"
" pas accédé en parallèle par une autre instance de svnsync."
-#: ../svnsync/main.c:336
+#: ../svnsync/main.c:348
msgid "Target server does not support atomic revision property edits; consider upgrading it to 1.7 or using an external locking program"
msgstr "Le serveur cible ne supporte pas l'édition atomique des propriétés de révision ; Envisager de mettre à jour en 1.7 ou d'utiliser un programme de verrouillage externe"
-#: ../svnsync/main.c:350
+#: ../svnsync/main.c:362
#, c-format
msgid "Stole lock previously held by '%s'\n"
msgstr "Vol le verrou précédement tenu par '%s'\n"
-#: ../svnsync/main.c:435
+#: ../svnsync/main.c:451
#, c-format
msgid "Session is rooted at '%s' but the repos root is '%s'"
msgstr "La session est enracinée à '%s', mais la racine du dépôt est '%s'"
-#: ../svnsync/main.c:577
+#: ../svnsync/main.c:593
#, c-format
msgid "Copied properties for revision %ld (%s* properties skipped).\n"
msgstr "Propriétés copiées pour la révision %ld (%s* propriétés ignorées).\n"
-#: ../svnsync/main.c:582
+#: ../svnsync/main.c:598
#, c-format
msgid "Copied properties for revision %ld.\n"
msgstr "Propriétés copiées pour la révision %ld.\n"
-#: ../svnsync/main.c:598
+#: ../svnsync/main.c:614
#, c-format
msgid "NOTE: Normalized %s* properties to LF line endings (%d rev-props, %d node-props).\n"
msgstr "Note : normalisation des fins de lignes des propriétés %s* (%d de révisions, %d de nœuds).\n"
-#: ../svnsync/main.c:720
+#: ../svnsync/main.c:742
msgid "Destination repository already contains revision history; consider using --allow-non-empty if the repository's revisions are known to mirror their respective revisions in the source repository"
msgstr "Le dépôt destination contient déjà des révisions ; utilisez éventuellement l'option --allow-non-empty si ces révisions correspondent à leurs contreparties dans le dépôt source"
-#: ../svnsync/main.c:729
+#: ../svnsync/main.c:751
#, c-format
msgid "Destination repository is already synchronizing from '%s'"
msgstr "Le dépôt destination est déjà synchronisé à partir de '%s'"
-#: ../svnsync/main.c:764
+#: ../svnsync/main.c:786
msgid "Destination repository has more revisions than source repository"
msgstr "Le dépôt destination a plus de révisions que le dépôt origine"
-#: ../svnsync/main.c:828 ../svnsync/main.c:831 ../svnsync/main.c:1336
-#: ../svnsync/main.c:1343 ../svnsync/main.c:1579 ../svnsync/main.c:1582
-#: ../svnsync/main.c:1625
+#: ../svnsync/main.c:851 ../svnsync/main.c:854 ../svnsync/main.c:1512
+#: ../svnsync/main.c:1519 ../svnsync/main.c:1756 ../svnsync/main.c:1759
+#: ../svnsync/main.c:1803
#, c-format
msgid "Path '%s' is not a URL"
msgstr "Le chemin '%s' n'est pas une URL"
-#: ../svnsync/main.c:858
+#: ../svnsync/main.c:881
#, c-format
msgid "Committed revision %ld.\n"
msgstr "Révision %ld propagée.\n"
-#: ../svnsync/main.c:901
+#: ../svnsync/main.c:927
msgid "Destination repository has not been initialized"
msgstr "Le dépôt destination n'a pas été initialisé"
-#: ../svnsync/main.c:1119
+#: ../svnsync/main.c:1295
#, c-format
msgid "Commit created rev %ld but should have created %ld"
msgstr "La propagation (commit) a créé la révision %ld au lieu de la %ld"
-#: ../svnsync/main.c:1233
+#: ../svnsync/main.c:1410
#, c-format
msgid "Revision being currently copied (%ld), last merged revision (%ld), and destination HEAD (%ld) are inconsistent; have you committed to the destination without using svnsync?"
msgstr "La révision en cours de copie (%ld), la dernière révision fusionnée (%ld), et la révision de tête de la destination (%ld) sont incohérentes. Auriez-vous propagé vers la destination sans utiliser 'svnsync' ?"
-#: ../svnsync/main.c:1271
+#: ../svnsync/main.c:1447
#, c-format
msgid "Destination HEAD (%ld) is not the last merged revision (%ld); have you committed to the destination without using svnsync?"
msgstr "La révisions de tête (HEAD) de la destination (%ld) n'est pas la même que la dernière révision fusionnée (%ld). Auriez-vous propagé vers la destination sans utiliser 'svnsync' ?"
-#: ../svnsync/main.c:1394 ../svnsync/main.c:1399
+#: ../svnsync/main.c:1570 ../svnsync/main.c:1575
#, c-format
msgid "Cannot copy revprops for a revision (%ld) that has not been synchronized yet"
msgstr "Impossible de copier les propriétés de révision d'une révision (%ld) non encore synchronisée"
-#: ../svnsync/main.c:1462 ../svnsync/main.c:1482
+#: ../svnsync/main.c:1639 ../svnsync/main.c:1659
#, c-format
msgid "Invalid revision number (%ld)"
msgstr "Numéro de révision invalide (%ld)"
-#: ../svnsync/main.c:1532
+#: ../svnsync/main.c:1709
msgid "Cannot specify revisions via both command-line arguments and the --revision (-r) option"
msgstr ""
"Impossible de spécifier les révisions à la fois en argument de la ligne de\n"
"commande et avec l'option --revision (-r)"
-#: ../svnsync/main.c:1540 ../svnsync/main.c:1879
+#: ../svnsync/main.c:1717 ../svnsync/main.c:2057
#, c-format
msgid "Invalid revision range '%s' provided"
msgstr "Intervalle de révision donné '%s' invalide"
-#: ../svnsync/main.c:1637
+#: ../svnsync/main.c:1817
#, c-format
msgid "Repository '%s' is not initialized for synchronization"
msgstr "Le dépôt '%s' n'est pas initialisé pour une synchronisation"
#. Print the info.
-#: ../svnsync/main.c:1646
+#: ../svnsync/main.c:1825
#, c-format
msgid "Source URL: %s\n"
msgstr "URL source : %s\n"
-#: ../svnsync/main.c:1648
+#: ../svnsync/main.c:1827
#, c-format
msgid "Source Repository UUID: %s\n"
msgstr "UUID du dépôt source : %s\n"
-#: ../svnsync/main.c:1651
+#: ../svnsync/main.c:1830
#, c-format
msgid "Last Merged Revision: %s\n"
msgstr "Dernière révision fusionnée : %s\n"
-#: ../svnsync/main.c:1668
+#: ../svnsync/main.c:1847
msgid ""
"general usage: svnsync SUBCOMMAND DEST_URL [ARGS & OPTIONS ...]\n"
"Type 'svnsync help <subcommand>' for help on a specific subcommand.\n"
@@ -12652,15 +13770,15 @@ msgstr ""
"\n"
"Sous-commandes disponibles :\n"
-#: ../svnsync/main.c:1913
+#: ../svnsync/main.c:2091
msgid "Cannot use --username or --password with any of --source-username, --source-password, --sync-username, or --sync-password.\n"
msgstr "Impossible d'utiliser --username ou --password pour un des --source-username, --source-password, --sync-username ou --sync-password.\n"
-#: ../svnsync/main.c:1937
+#: ../svnsync/main.c:2115
msgid "--disable-locking and --steal-lock are mutually exclusive"
msgstr "--disable-locking et --steal-lock sont mutuellement exclusives"
-#: ../svnsync/main.c:2013
+#: ../svnsync/main.c:2191
#, c-format
msgid ""
"Subcommand '%s' doesn't accept option '%s'\n"
@@ -12669,16 +13787,16 @@ msgstr ""
"La sous-commande '%s' n'accepte pas l'option '%s'\n"
"Entrer 'svnsync help %s' pour l'aide.\n"
-#: ../svnsync/main.c:2095
+#: ../svnsync/main.c:2275
msgid "Try 'svnsync help' for more info"
msgstr "Essayer 'svnsync help' pour plus d'information"
-#: ../svnversion/main.c:45
+#: ../svnversion/main.c:48
#, c-format
msgid "Type 'svnversion --help' for usage.\n"
msgstr "Entrer 'svnversion --help' pour l'aide.\n"
-#: ../svnversion/main.c:56
+#: ../svnversion/main.c:59
#, c-format
msgid ""
"usage: svnversion [OPTIONS] [WC_PATH [TRAIL_URL]]\n"
@@ -12694,7 +13812,7 @@ msgid ""
"\n"
" The version number will be a single number if the working\n"
" copy is single revision, unmodified, not switched and with\n"
-" an URL that matches the TRAIL_URL argument. If the working\n"
+" a URL that matches the TRAIL_URL argument. If the working\n"
" copy is unusual the version number will be more complex:\n"
"\n"
" 4123:4168 mixed revision working copy\n"
@@ -12714,24 +13832,24 @@ msgid ""
msgstr ""
"usage : svnversion [OPTIONS] [CT_CHEMIN [FIN_URL]]\n"
"\n"
-" Produit un 'numéro de version' compacte pour la copie de travail précisée\n"
+" Produit un 'numéro de version' compact pour la copie de travail précisée\n"
" par CT_CHEMIN. FIN_URL est la partie finale de l'URL de référence pour\n"
-" déterminer si CT_CHEMIN a été ré-aiguillée (switch).\n"
+" déterminer si CT_CHEMIN a été basculé (switch).\n"
" Le numéro de version est envoyé sur la sortie standard. Exemple :\n"
"\n"
" svnversion . /depot/projet/trunk\n"
" 4168\n"
"\n"
" Le numéro de version est simple si la copie de travail ne concerne qu'une\n"
-" révision, non modifiée, non ré-aiguillée (switch) et dont l'URL de référence\n"
+" révision, non modifiée, non basculé (switch) et dont l'URL de référence\n"
" correspond à FIN_URL.\n"
" Dans les autres cas, le numéro de version est plus compliqué :\n"
"\n"
" 4123:4168 copie mixte, composée de différentes révisions\n"
" 4168M copie localement modifiée\n"
-" 4123S copie ré-aiguillée (switch)\n"
+" 4123S copie basculée (switch)\n"
" 4123P copie partielle tirée d'une extraction partielle (sparse)\n"
-" 4123:4168MS copie mixte, modifiée, ré-aiguillée...\n"
+" 4123:4168MS copie mixte, modifiée, basculée...\n"
"\n"
" Si CT_CHEMIN n'est pas versionné, la sortie indiquera un fichier ou\n"
" répertoire non versionné. Si c'est un chemin ajouté, copié ou déplacé,\n"
@@ -12749,28 +13867,33 @@ msgstr "pas de fin de ligne"
msgid "last changed rather than current revisions"
msgstr "dernière révision modifiée plutôt que la courante"
-#: ../svnversion/main.c:245
+#: ../svnversion/main.c:244
+#, c-format
+msgid "Unversioned symlink%s"
+msgstr "Lien non versionné%s"
+
+#: ../svnversion/main.c:247
#, c-format
msgid "Unversioned directory%s"
msgstr "Répertoire non versionné%s"
-#: ../svnversion/main.c:263 ../svnversion/main.c:279
+#: ../svnversion/main.c:250
#, c-format
msgid "Unversioned file%s"
msgstr "Fichier non versionné%s"
-#: ../svnversion/main.c:292
+#: ../svnversion/main.c:256
#, c-format
msgid "'%s' doesn't exist\n"
msgstr "'%s' n'existe pas\n"
-#: ../svnversion/main.c:300
+#: ../svnversion/main.c:257
#, c-format
msgid "'%s' is of unknown type\n"
msgstr "'%s' est d'un type inconnu\n"
#. Local uncommitted modifications, no revision info was found.
-#: ../svnversion/main.c:309
+#: ../svnversion/main.c:272
#, c-format
msgid "Uncommitted local addition, copy or move%s"
msgstr "Ajout, copie ou déplacement local non propagé%s"
diff --git a/subversion/po/it.po b/subversion/po/it.po
index 9b406f0..19d4543 100644
--- a/subversion/po/it.po
+++ b/subversion/po/it.po
@@ -101,7 +101,7 @@
# working copy: copia di lavoro (CL)
msgid ""
msgstr ""
-"Project-Id-Version: subversion 1.7\n"
+"Project-Id-Version: subversion 1.8\n"
"Report-Msgid-Bugs-To: dev@subversion.apache.org\n"
"POT-Creation-Date: 2010-11-12 08:49-0600\n"
"PO-Revision-Date: 2007-10-12 10:09+0200\n"
diff --git a/subversion/po/ja.po b/subversion/po/ja.po
index fc18922..6c9c4ef 100644
--- a/subversion/po/ja.po
+++ b/subversion/po/ja.po
@@ -195,7 +195,7 @@
# zero byte ゼロãƒã‚¤ãƒˆæ–‡å­—
msgid ""
msgstr ""
-"Project-Id-Version: subversion 1.7\n"
+"Project-Id-Version: subversion 1.8\n"
"Report-Msgid-Bugs-To: dev@subversion.apache.org\n"
"POT-Creation-Date: 2010-11-12 08:49-0600\n"
"PO-Revision-Date: 2007-10-28 01:23+0900\n"
@@ -6235,7 +6235,7 @@ msgstr ""
#. Human explanatory part, generated by apr_strftime as "Sat, 01 Jan 2000"
#: ../libsvn_subr/time.c:85
msgid " (%a, %d %b %Y)"
-msgstr " (%a, %d %b %Y)"
+msgstr " (%x (%a))"
#: ../libsvn_subr/token.c:66
#, fuzzy, c-format
diff --git a/subversion/po/ko.po b/subversion/po/ko.po
index 70b3fa6..d2bfa32 100644
--- a/subversion/po/ko.po
+++ b/subversion/po/ko.po
@@ -19,7 +19,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: subversion 1.7\n"
+"Project-Id-Version: subversion 1.8\n"
"Report-Msgid-Bugs-To: dev@subversion.apache.org\n"
"POT-Creation-Date: 2011-03-07 00:53+0900\n"
"PO-Revision-Date: 2011-03-03 18:16+0900\n"
diff --git a/subversion/po/nb.po b/subversion/po/nb.po
index 13d6de2..be6bd4b 100644
--- a/subversion/po/nb.po
+++ b/subversion/po/nb.po
@@ -87,7 +87,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: subversion 1.7\n"
+"Project-Id-Version: subversion 1.8\n"
"Report-Msgid-Bugs-To: dev@subversion.apache.org\n"
"POT-Creation-Date: 2010-11-12 08:49-0600\n"
"PO-Revision-Date: 2009-10-14 16:21+0200\n"
diff --git a/subversion/po/pl.po b/subversion/po/pl.po
index 227b7d0..4f078f2 100644
--- a/subversion/po/pl.po
+++ b/subversion/po/pl.po
@@ -55,7 +55,7 @@
# work queue - kolejka pracy
msgid ""
msgstr ""
-"Project-Id-Version: subversion 1.7\n"
+"Project-Id-Version: subversion 1.8\n"
"Report-Msgid-Bugs-To: dev@subversion.apache.org\n"
"POT-Creation-Date: 2010-11-12 08:49-0600\n"
"PO-Revision-Date: 2009-11-14 22:00+0100\n"
@@ -2225,7 +2225,7 @@ msgstr "Nieznany typ systemu plików: '%s'"
#: ../libsvn_fs/fs-loader.c:313
#, c-format
msgid "Can't allocate FS mutex"
-msgstr "Nie udało się utworzyć semefora FS"
+msgstr "Nie udało się utworzyć semafora FS"
#: ../libsvn_fs/fs-loader.c:348
#, c-format
@@ -3675,7 +3675,7 @@ msgstr "Uzyskano nierozpoznane kodowanie: '%s'"
#: ../libsvn_ra_neon/get_locks.c:425 ../libsvn_ra_neon/get_locks.c:429
#: ../libsvn_ra_serf/locks.c:566
msgid "Server does not support locking features"
-msgstr "Serwer nie obsługuje blokowania zatwiedzeń"
+msgstr "Serwer nie obsługuje blokowania zatwierdzeń"
#: ../libsvn_ra_neon/lock.c:196
msgid "Invalid creation date header value in response."
@@ -3703,7 +3703,7 @@ msgstr "'%s' nie jest zablokowane w repozytorium"
#: ../libsvn_ra_neon/lock.c:553
msgid "Failed to fetch lock information"
-msgstr "Nieudało się pobrać informacji o blokadzie"
+msgstr "Nie udało się pobrać informacji o blokadzie"
#: ../libsvn_ra_neon/log.c:169 ../libsvn_ra_serf/log.c:228
#, c-format
@@ -4751,7 +4751,7 @@ msgstr "BÅ‚Ä…d podczas zamykania pliku null"
#: ../libsvn_repos/hooks.c:379
#, c-format
msgid "Failed to run '%s' hook; broken symlink"
-msgstr "Niepowiodło się uruchomienie skryptu hook '%s'; uszkodzone dowiązanie symboliczne"
+msgstr "Nie powiodło się uruchomienie skryptu hook '%s'; uszkodzone dowiązanie symboliczne"
#: ../libsvn_repos/hooks.c:589
msgid ""
@@ -4863,7 +4863,7 @@ msgstr "Brak uprawnień do otwarcia katalogu głównego edycji"
#: ../libsvn_repos/reporter.c:1234
#, c-format
msgid "Target path '%s' does not exist"
-msgstr "Docelowa śieżka '%s' nie istnieje"
+msgstr "Docelowa ścieżka '%s' nie istnieje"
#: ../libsvn_repos/reporter.c:1242
msgid "Cannot replace a directory from within"
@@ -5215,7 +5215,7 @@ msgstr "W pliku '%s' w linii %d: asercja nie udała się (%s)"
#: ../libsvn_subr/error.c:602
#, c-format
msgid "In file '%s' line %d: internal malfunction"
-msgstr "W pliku '%s' w linii %d: wewnÄ…trzne niepoprawne funkcjonowanie"
+msgstr "W pliku '%s' w linii %d: wewnętrzne niepoprawne funkcjonowanie"
#: ../libsvn_subr/io.c:169
#, c-format
@@ -5230,7 +5230,7 @@ msgstr "Nie można sprawdzić ścieżki '%s'"
#: ../libsvn_subr/io.c:457 ../libsvn_subr/io.c:3771
#, c-format
msgid "Can't open '%s'"
-msgstr "Nie mozna otworzyć '%s'"
+msgstr "Nie można otworzyć '%s'"
#: ../libsvn_subr/io.c:483 ../libsvn_subr/io.c:569
#, c-format
@@ -6280,7 +6280,7 @@ msgstr "Format logów zbyt stary. Proszę użyć Subversion 1.6 lub wcześniejsz
#: ../libsvn_wc/conflicts.c:299
msgid "Invalid 'conflict_result' argument"
-msgstr "BÅ‚Ä…dny argument 'conflict_result'"
+msgstr "Błędny argument 'conflict_result'"
#: ../libsvn_wc/conflicts.c:409
#, c-format
@@ -6731,7 +6731,7 @@ msgstr "Nieprawidłowy atrybut %s dla '%s': nie można używać URL-u '%s' jako
#: ../libsvn_wc/props.c:2643
#, c-format
msgid "Invalid %s property on '%s': target '%s' is an absolute path or involves '..'"
-msgstr "Błędny atrybut %s dla '%s': cel '%s' jest ścieżką bezwględną albo wykorzystuje '..'"
+msgstr "Błędny atrybut %s dla '%s': cel '%s' jest ścieżką bezwzględną albo wykorzystuje '..'"
#: ../libsvn_wc/questions.c:203
#, fuzzy, c-format
@@ -8245,7 +8245,7 @@ msgstr ""
"\n"
"OSTRZEŻENIE: Dla kompatybilności z poprzednimi wersjami Subversion kopiowania\n"
"wykonywane pomiędzy dwoma ścieżkami kopii roboczej (KR -> KR) nie kontaktują\n"
-"się z reporytorium. W związku z tym nie mogą domyślnie propagować informacji\n"
+"się z repozytorium. W związku z tym nie mogą domyślnie propagować informacji\n"
"o łączeniach zmian ze źródła kopii do celu.\n"
#: ../svn/main.c:505
@@ -8673,7 +8673,7 @@ msgstr ""
" E Istniały (Existed)\n"
" R ZastÄ…piony (Replaced)\n"
"\n"
-" Znaki w pierwszej kolumnia informujÄ… o samym obiekcie. Znaki w drugiej\n"
+" Znaki w pierwszej kolumnie informujÄ… o samym obiekcie. Znaki w drugiej\n"
" kolumnie informujÄ… o atrybutach obiektu. 'C' w trzeciej kolumnie wskazuje\n"
" na konflikt drzewny, podczas gdy 'C' w pierwszej i drugiej kolumnie\n"
" wskazuje odpowiednio na konflikt tekstowy w plikach i w atrybutach plików.\n"
@@ -9663,7 +9663,7 @@ msgstr "Opis zmian jest ścieżką (chciano użyć -F?); użyj --force-log, by w
#: ../svn/main.c:2065
msgid "The lock comment is a pathname (was -F intended?); use '--force-log' to override"
-msgstr "Opis blokady jest ścieżką (chciano użyć -F?); użyj --force-log, bywymusić użycie takiego opisu"
+msgstr "Opis blokady jest ścieżką (chciano użyć -F?); użyj --force-log, by wymusić użycie takiego opisu"
#: ../svn/main.c:2079
msgid "--relocate and --depth are mutually exclusive"
diff --git a/subversion/po/pt_BR.po b/subversion/po/pt_BR.po
index 5452a7d..41c0260 100644
--- a/subversion/po/pt_BR.po
+++ b/subversion/po/pt_BR.po
@@ -19,7 +19,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: subversion 1.7\n"
+"Project-Id-Version: subversion 1.8\n"
"Report-Msgid-Bugs-To: dev@subversion.apache.org\n"
"POT-Creation-Date: 2010-11-12 08:49-0600\n"
"PO-Revision-Date: 2004-07-26 19:19-300\n"
@@ -12663,8 +12663,8 @@ msgstr ""
#~ " '{' DATA '}' revisão no início da data\n"
#~ " 'HEAD' último no repositório\n"
#~ " 'BASE' revisão base do item da cópia de trabalho\n"
-#~ " 'COMMITED' último commit em ou antes de BASE\n"
-#~ " 'PREV' revisão exatamente antes de COMMITED"
+#~ " 'COMMITTED' último commit em ou antes de BASE\n"
+#~ " 'PREV' revisão exatamente antes de COMMITTED"
#~ msgid "Can't get user name"
#~ msgstr "Não foi possível obter o nome do usuário"
diff --git a/subversion/po/subversion.pot b/subversion/po/subversion.pot
new file mode 100644
index 0000000..b07609b
--- /dev/null
+++ b/subversion/po/subversion.pot
@@ -0,0 +1,14011 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: dev@subversion.apache.org\n"
+"POT-Creation-Date: 2015-03-18 13:33+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+
+#. Constructing nice error messages for roots.
+#. Build an SVN_ERR_FS_NOT_FOUND error, with a detailed error text,
+#. for PATH in ROOT. ROOT is of type svn_fs_root_t *.
+#: ../include/private/svn_fs_util.h:81
+#, c-format
+msgid "File not found: transaction '%s', path '%s'"
+msgstr ""
+
+#: ../include/private/svn_fs_util.h:86
+#, c-format
+msgid "File not found: revision %ld, path '%s'"
+msgstr ""
+
+#. Build a detailed `file already exists' message for PATH in ROOT.
+#. ROOT is of type svn_fs_root_t *.
+#: ../include/private/svn_fs_util.h:97
+#, c-format
+msgid "File already exists: filesystem '%s', transaction '%s', path '%s'"
+msgstr ""
+
+#: ../include/private/svn_fs_util.h:102
+#, c-format
+msgid "File already exists: filesystem '%s', revision %ld, path '%s'"
+msgstr ""
+
+#. ROOT is of type svn_fs_root_t *.
+#: ../include/private/svn_fs_util.h:110
+msgid "Root object must be a transaction root"
+msgstr ""
+
+#. SVN_FS__ERR_NOT_MUTABLE: the caller attempted to change a node
+#. outside of a transaction. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:117
+#, c-format
+msgid "File is not mutable: filesystem '%s', revision %ld, path '%s'"
+msgstr ""
+
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:124
+#, c-format
+msgid "'%s' is not a directory in filesystem '%s'"
+msgstr ""
+
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:131
+#, c-format
+msgid "'%s' is not a file in filesystem '%s'"
+msgstr ""
+
+#. FS is of type "svn_fs_t *", LOCK is of type "svn_lock_t *".
+#: ../include/private/svn_fs_util.h:139
+#, c-format
+msgid "Path '%s' is already locked by user '%s' in filesystem '%s'"
+msgstr ""
+
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:146
+#, c-format
+msgid "No lock on path '%s' in filesystem '%s'"
+msgstr ""
+
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:153
+#, c-format
+msgid "Lock has expired: lock-token '%s' in filesystem '%s'"
+msgstr ""
+
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:160
+#, c-format
+msgid "No username is currently associated with filesystem '%s'"
+msgstr ""
+
+#. SVN_FS__ERR_LOCK_OWNER_MISMATCH: trying to use a lock whose
+#. LOCK_OWNER doesn't match the USERNAME associated with FS.
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:169
+#, c-format
+msgid "User '%s' is trying to use a lock owned by '%s' in filesystem '%s'"
+msgstr ""
+
+#: ../include/svn_error_codes.h:164
+msgid "Bad parent pool passed to svn_make_pool()"
+msgstr ""
+
+#: ../include/svn_error_codes.h:168
+msgid "Bogus filename"
+msgstr ""
+
+#: ../include/svn_error_codes.h:172
+msgid "Bogus URL"
+msgstr ""
+
+#: ../include/svn_error_codes.h:176
+msgid "Bogus date"
+msgstr ""
+
+#: ../include/svn_error_codes.h:180
+msgid "Bogus mime-type"
+msgstr ""
+
+#: ../include/svn_error_codes.h:190
+msgid "Wrong or unexpected property value"
+msgstr ""
+
+#: ../include/svn_error_codes.h:194
+msgid "Version file format not correct"
+msgstr ""
+
+#: ../include/svn_error_codes.h:198
+msgid "Path is not an immediate child of the specified directory"
+msgstr ""
+
+#: ../include/svn_error_codes.h:202
+msgid "Bogus UUID"
+msgstr ""
+
+#: ../include/svn_error_codes.h:207 ../include/svn_error_codes.h:944
+msgid "Invalid configuration value"
+msgstr ""
+
+#: ../include/svn_error_codes.h:211
+msgid "Bogus server specification"
+msgstr ""
+
+#: ../include/svn_error_codes.h:215
+msgid "Unsupported checksum type"
+msgstr ""
+
+#: ../include/svn_error_codes.h:219
+msgid "Invalid character in hex checksum"
+msgstr ""
+
+#: ../include/svn_error_codes.h:224
+msgid "Unknown string value of token"
+msgstr ""
+
+#: ../include/svn_error_codes.h:229
+msgid "Invalid changelist name"
+msgstr ""
+
+#: ../include/svn_error_codes.h:234
+msgid "Invalid atomic"
+msgstr ""
+
+#: ../include/svn_error_codes.h:240
+msgid "No such XML tag attribute"
+msgstr ""
+
+#: ../include/svn_error_codes.h:244
+msgid "<delta-pkg> is missing ancestry"
+msgstr ""
+
+#: ../include/svn_error_codes.h:248
+msgid "Unrecognized binary data encoding; can't decode"
+msgstr ""
+
+#: ../include/svn_error_codes.h:252
+msgid "XML data was not well-formed"
+msgstr ""
+
+#: ../include/svn_error_codes.h:256
+msgid "Data cannot be safely XML-escaped"
+msgstr ""
+
+#: ../include/svn_error_codes.h:262
+msgid "Inconsistent line ending style"
+msgstr ""
+
+#: ../include/svn_error_codes.h:266
+msgid "Unrecognized line ending style"
+msgstr ""
+
+#: ../include/svn_error_codes.h:271
+msgid "Line endings other than expected"
+msgstr ""
+
+#: ../include/svn_error_codes.h:275
+msgid "Ran out of unique names"
+msgstr ""
+
+#: ../include/svn_error_codes.h:280
+msgid "Framing error in pipe protocol"
+msgstr ""
+
+#: ../include/svn_error_codes.h:285
+msgid "Read error in pipe"
+msgstr ""
+
+#: ../include/svn_error_codes.h:289 ../libsvn_subr/cmdline.c:362
+#: ../libsvn_subr/cmdline.c:385 ../svn/util.c:569 ../svnlook/svnlook.c:2009
+#, c-format
+msgid "Write error"
+msgstr ""
+
+#: ../include/svn_error_codes.h:294
+msgid "Write error in pipe"
+msgstr ""
+
+#: ../include/svn_error_codes.h:300
+msgid "Unexpected EOF on stream"
+msgstr ""
+
+#: ../include/svn_error_codes.h:304
+msgid "Malformed stream data"
+msgstr ""
+
+#: ../include/svn_error_codes.h:308
+msgid "Unrecognized stream data"
+msgstr ""
+
+#: ../include/svn_error_codes.h:313
+msgid "Stream doesn't support seeking"
+msgstr ""
+
+#: ../include/svn_error_codes.h:319
+msgid "Unknown svn_node_kind"
+msgstr ""
+
+#: ../include/svn_error_codes.h:323
+msgid "Unexpected node kind found"
+msgstr ""
+
+#: ../include/svn_error_codes.h:329
+msgid "Can't find an entry"
+msgstr ""
+
+#: ../include/svn_error_codes.h:335
+msgid "Entry already exists"
+msgstr ""
+
+#: ../include/svn_error_codes.h:339
+msgid "Entry has no revision"
+msgstr ""
+
+#: ../include/svn_error_codes.h:343
+msgid "Entry has no URL"
+msgstr ""
+
+#: ../include/svn_error_codes.h:347
+msgid "Entry has an invalid attribute"
+msgstr ""
+
+#: ../include/svn_error_codes.h:351
+msgid "Can't create an entry for a forbidden name"
+msgstr ""
+
+#: ../include/svn_error_codes.h:357
+msgid "Obstructed update"
+msgstr ""
+
+#: ../include/svn_error_codes.h:362
+msgid "Mismatch popping the WC unwind stack"
+msgstr ""
+
+#: ../include/svn_error_codes.h:367
+msgid "Attempt to pop empty WC unwind stack"
+msgstr ""
+
+#: ../include/svn_error_codes.h:372
+msgid "Attempt to unlock with non-empty unwind stack"
+msgstr ""
+
+#: ../include/svn_error_codes.h:376
+msgid "Attempted to lock an already-locked dir"
+msgstr ""
+
+#: ../include/svn_error_codes.h:380
+msgid "Working copy not locked; this is probably a bug, please report"
+msgstr ""
+
+#: ../include/svn_error_codes.h:385
+msgid "Invalid lock"
+msgstr ""
+
+#: ../include/svn_error_codes.h:391 ../include/svn_error_codes.h:397
+msgid "Path is not a working copy directory"
+msgstr ""
+
+#: ../include/svn_error_codes.h:401
+msgid "Path is not a working copy file"
+msgstr ""
+
+#: ../include/svn_error_codes.h:405
+msgid "Problem running log"
+msgstr ""
+
+#: ../include/svn_error_codes.h:409
+msgid "Can't find a working copy path"
+msgstr ""
+
+#: ../include/svn_error_codes.h:413
+msgid "Working copy is not up-to-date"
+msgstr ""
+
+#: ../include/svn_error_codes.h:417
+msgid "Left locally modified or unversioned files"
+msgstr ""
+
+#: ../include/svn_error_codes.h:421
+msgid "Unmergeable scheduling requested on an entry"
+msgstr ""
+
+#: ../include/svn_error_codes.h:425
+msgid "Found a working copy path"
+msgstr ""
+
+#: ../include/svn_error_codes.h:429
+msgid "A conflict in the working copy obstructs the current operation"
+msgstr ""
+
+#: ../include/svn_error_codes.h:433
+msgid "Working copy is corrupt"
+msgstr ""
+
+#: ../include/svn_error_codes.h:437
+msgid "Working copy text base is corrupt"
+msgstr ""
+
+#: ../include/svn_error_codes.h:441
+msgid "Cannot change node kind"
+msgstr ""
+
+#: ../include/svn_error_codes.h:445
+msgid "Invalid operation on the current working directory"
+msgstr ""
+
+#: ../include/svn_error_codes.h:449
+msgid "Problem on first log entry in a working copy"
+msgstr ""
+
+#: ../include/svn_error_codes.h:453
+msgid "Unsupported working copy format"
+msgstr ""
+
+#: ../include/svn_error_codes.h:457
+msgid "Path syntax not supported in this context"
+msgstr ""
+
+#: ../include/svn_error_codes.h:462
+msgid "Invalid schedule"
+msgstr ""
+
+#: ../include/svn_error_codes.h:467
+msgid "Invalid relocation"
+msgstr ""
+
+#: ../include/svn_error_codes.h:472
+msgid "Invalid switch"
+msgstr ""
+
+#: ../include/svn_error_codes.h:477
+msgid "Changelist doesn't match"
+msgstr ""
+
+#: ../include/svn_error_codes.h:482
+msgid "Conflict resolution failed"
+msgstr ""
+
+#: ../include/svn_error_codes.h:486
+msgid "Failed to locate 'copyfrom' path in working copy"
+msgstr ""
+
+#: ../include/svn_error_codes.h:494
+msgid "Moving a path from one changelist to another"
+msgstr ""
+
+#: ../include/svn_error_codes.h:499
+msgid "Cannot delete a file external"
+msgstr ""
+
+#: ../include/svn_error_codes.h:504
+msgid "Cannot move a file external"
+msgstr ""
+
+#: ../include/svn_error_codes.h:509
+msgid "Something's amiss with the wc sqlite database"
+msgstr ""
+
+#: ../include/svn_error_codes.h:514
+msgid "The working copy is missing"
+msgstr ""
+
+#: ../include/svn_error_codes.h:519
+msgid "The specified node is not a symlink"
+msgstr ""
+
+#: ../include/svn_error_codes.h:524
+msgid "The specified path has an unexpected status"
+msgstr ""
+
+#: ../include/svn_error_codes.h:529
+msgid "The working copy needs to be upgraded"
+msgstr ""
+
+#: ../include/svn_error_codes.h:534
+msgid ""
+"Previous operation has not finished; run 'cleanup' if it was interrupted"
+msgstr ""
+
+#: ../include/svn_error_codes.h:540
+msgid "The operation cannot be performed with the specified depth"
+msgstr ""
+
+#: ../include/svn_error_codes.h:545
+msgid "Couldn't open a working copy file because access was denied"
+msgstr ""
+
+#: ../include/svn_error_codes.h:550
+msgid "Mixed-revision working copy was found but not expected"
+msgstr ""
+
+#: ../include/svn_error_codes.h:555
+msgid "Duplicate targets in svn:externals property"
+msgstr ""
+
+#: ../include/svn_error_codes.h:561
+msgid "General filesystem error"
+msgstr ""
+
+#: ../include/svn_error_codes.h:565
+msgid "Error closing filesystem"
+msgstr ""
+
+#: ../include/svn_error_codes.h:569
+msgid "Filesystem is already open"
+msgstr ""
+
+#: ../include/svn_error_codes.h:573
+msgid "Filesystem is not open"
+msgstr ""
+
+#: ../include/svn_error_codes.h:577
+msgid "Filesystem is corrupt"
+msgstr ""
+
+#: ../include/svn_error_codes.h:581
+msgid "Invalid filesystem path syntax"
+msgstr ""
+
+#: ../include/svn_error_codes.h:585
+msgid "Invalid filesystem revision number"
+msgstr ""
+
+#: ../include/svn_error_codes.h:589
+msgid "Invalid filesystem transaction name"
+msgstr ""
+
+#: ../include/svn_error_codes.h:593
+msgid "Filesystem directory has no such entry"
+msgstr ""
+
+#: ../include/svn_error_codes.h:597
+msgid "Filesystem has no such representation"
+msgstr ""
+
+#: ../include/svn_error_codes.h:601
+msgid "Filesystem has no such string"
+msgstr ""
+
+#: ../include/svn_error_codes.h:605
+msgid "Filesystem has no such copy"
+msgstr ""
+
+#: ../include/svn_error_codes.h:609
+msgid "The specified transaction is not mutable"
+msgstr ""
+
+#: ../include/svn_error_codes.h:613
+msgid "Filesystem has no item"
+msgstr ""
+
+#: ../include/svn_error_codes.h:617
+msgid "Filesystem has no such node-rev-id"
+msgstr ""
+
+#: ../include/svn_error_codes.h:621
+msgid "String does not represent a node or node-rev-id"
+msgstr ""
+
+#: ../include/svn_error_codes.h:625
+msgid "Name does not refer to a filesystem directory"
+msgstr ""
+
+#: ../include/svn_error_codes.h:629
+msgid "Name does not refer to a filesystem file"
+msgstr ""
+
+#: ../include/svn_error_codes.h:633
+msgid "Name is not a single path component"
+msgstr ""
+
+#: ../include/svn_error_codes.h:637
+msgid "Attempt to change immutable filesystem node"
+msgstr ""
+
+#: ../include/svn_error_codes.h:641
+msgid "Item already exists in filesystem"
+msgstr ""
+
+#: ../include/svn_error_codes.h:645
+msgid "Attempt to remove or recreate fs root dir"
+msgstr ""
+
+#: ../include/svn_error_codes.h:649
+msgid "Object is not a transaction root"
+msgstr ""
+
+#: ../include/svn_error_codes.h:653
+msgid "Object is not a revision root"
+msgstr ""
+
+#: ../include/svn_error_codes.h:657
+msgid "Merge conflict during commit"
+msgstr ""
+
+#: ../include/svn_error_codes.h:661
+msgid "A representation vanished or changed between reads"
+msgstr ""
+
+#: ../include/svn_error_codes.h:665
+msgid "Tried to change an immutable representation"
+msgstr ""
+
+#: ../include/svn_error_codes.h:669
+msgid "Malformed skeleton data"
+msgstr ""
+
+#: ../include/svn_error_codes.h:673
+msgid "Transaction is out of date"
+msgstr ""
+
+#: ../include/svn_error_codes.h:677
+msgid "Berkeley DB error"
+msgstr ""
+
+#: ../include/svn_error_codes.h:681
+msgid "Berkeley DB deadlock error"
+msgstr ""
+
+#: ../include/svn_error_codes.h:685
+msgid "Transaction is dead"
+msgstr ""
+
+#: ../include/svn_error_codes.h:689
+msgid "Transaction is not dead"
+msgstr ""
+
+#: ../include/svn_error_codes.h:694
+msgid "Unknown FS type"
+msgstr ""
+
+#: ../include/svn_error_codes.h:699
+msgid "No user associated with filesystem"
+msgstr ""
+
+#: ../include/svn_error_codes.h:704
+msgid "Path is already locked"
+msgstr ""
+
+#: ../include/svn_error_codes.h:709 ../include/svn_error_codes.h:886
+msgid "Path is not locked"
+msgstr ""
+
+#: ../include/svn_error_codes.h:714
+msgid "Lock token is incorrect"
+msgstr ""
+
+#: ../include/svn_error_codes.h:719
+msgid "No lock token provided"
+msgstr ""
+
+#: ../include/svn_error_codes.h:724
+msgid "Username does not match lock owner"
+msgstr ""
+
+#: ../include/svn_error_codes.h:729
+msgid "Filesystem has no such lock"
+msgstr ""
+
+#: ../include/svn_error_codes.h:734
+msgid "Lock has expired"
+msgstr ""
+
+#: ../include/svn_error_codes.h:739 ../include/svn_error_codes.h:873
+msgid "Item is out of date"
+msgstr ""
+
+#: ../include/svn_error_codes.h:751
+msgid "Unsupported FS format"
+msgstr ""
+
+#: ../include/svn_error_codes.h:756
+msgid "Representation is being written"
+msgstr ""
+
+#: ../include/svn_error_codes.h:761
+msgid "The generated transaction name is too long"
+msgstr ""
+
+#: ../include/svn_error_codes.h:766
+msgid "Filesystem has no such node origin record"
+msgstr ""
+
+#: ../include/svn_error_codes.h:771
+msgid "Filesystem upgrade is not supported"
+msgstr ""
+
+#: ../include/svn_error_codes.h:776
+msgid "Filesystem has no such checksum-representation index record"
+msgstr ""
+
+#: ../include/svn_error_codes.h:781
+msgid "Property value in filesystem differs from the provided base value"
+msgstr ""
+
+#: ../include/svn_error_codes.h:787
+msgid "The filesystem editor completion process was not followed"
+msgstr ""
+
+#: ../include/svn_error_codes.h:792
+msgid "A packed revprop could not be read"
+msgstr ""
+
+#: ../include/svn_error_codes.h:797
+msgid "Could not initialize the revprop caching infrastructure."
+msgstr ""
+
+#: ../include/svn_error_codes.h:803
+msgid "The repository is locked, perhaps for db recovery"
+msgstr ""
+
+#: ../include/svn_error_codes.h:807
+msgid "A repository hook failed"
+msgstr ""
+
+#: ../include/svn_error_codes.h:811
+msgid "Incorrect arguments supplied"
+msgstr ""
+
+#: ../include/svn_error_codes.h:815
+msgid "A report cannot be generated because no data was supplied"
+msgstr ""
+
+#: ../include/svn_error_codes.h:819
+msgid "Bogus revision report"
+msgstr ""
+
+#: ../include/svn_error_codes.h:828
+msgid "Unsupported repository version"
+msgstr ""
+
+#: ../include/svn_error_codes.h:832
+msgid "Disabled repository feature"
+msgstr ""
+
+#: ../include/svn_error_codes.h:836
+msgid "Error running post-commit hook"
+msgstr ""
+
+#: ../include/svn_error_codes.h:841
+msgid "Error running post-lock hook"
+msgstr ""
+
+#: ../include/svn_error_codes.h:846
+msgid "Error running post-unlock hook"
+msgstr ""
+
+#: ../include/svn_error_codes.h:851
+msgid "Repository upgrade is not supported"
+msgstr ""
+
+#: ../include/svn_error_codes.h:857
+msgid "Bad URL passed to RA layer"
+msgstr ""
+
+#: ../include/svn_error_codes.h:861
+msgid "Authorization failed"
+msgstr ""
+
+#: ../include/svn_error_codes.h:865
+msgid "Unknown authorization method"
+msgstr ""
+
+#: ../include/svn_error_codes.h:869
+msgid "Repository access method not implemented"
+msgstr ""
+
+#: ../include/svn_error_codes.h:877
+msgid "Repository has no UUID"
+msgstr ""
+
+#: ../include/svn_error_codes.h:881
+msgid "Unsupported RA plugin ABI version"
+msgstr ""
+
+#: ../include/svn_error_codes.h:891
+msgid "Server can only replay from the root of a repository"
+msgstr ""
+
+#: ../include/svn_error_codes.h:896
+msgid "Repository UUID does not match expected UUID"
+msgstr ""
+
+#: ../include/svn_error_codes.h:901
+msgid "Repository root URL does not match expected root URL"
+msgstr ""
+
+#: ../include/svn_error_codes.h:906
+msgid "Session URL does not match expected session URL"
+msgstr ""
+
+#: ../include/svn_error_codes.h:911 ../libsvn_ra_svn/client.c:492
+#, c-format
+msgid "Can't create tunnel"
+msgstr ""
+
+#: ../include/svn_error_codes.h:917
+msgid "RA layer failed to init socket layer"
+msgstr ""
+
+#: ../include/svn_error_codes.h:921
+msgid "RA layer failed to create HTTP request"
+msgstr ""
+
+#: ../include/svn_error_codes.h:925
+msgid "RA layer request failed"
+msgstr ""
+
+#: ../include/svn_error_codes.h:929
+msgid "RA layer didn't receive requested OPTIONS info"
+msgstr ""
+
+#: ../include/svn_error_codes.h:933
+msgid "RA layer failed to fetch properties"
+msgstr ""
+
+#: ../include/svn_error_codes.h:937
+msgid "RA layer file already exists"
+msgstr ""
+
+#: ../include/svn_error_codes.h:951
+msgid "HTTP Path Not Found"
+msgstr ""
+
+#: ../include/svn_error_codes.h:955
+msgid "Failed to execute WebDAV PROPPATCH"
+msgstr ""
+
+#: ../include/svn_error_codes.h:960 ../include/svn_error_codes.h:1403
+#: ../libsvn_ra_svn/marshal.c:1075 ../libsvn_ra_svn/marshal.c:1285
+#: ../libsvn_ra_svn/marshal.c:1315
+msgid "Malformed network data"
+msgstr ""
+
+#: ../include/svn_error_codes.h:965
+msgid "Unable to extract data from response header"
+msgstr ""
+
+#: ../include/svn_error_codes.h:970
+msgid "Repository has been moved"
+msgstr ""
+
+#: ../include/svn_error_codes.h:975 ../libsvn_ra_serf/update.c:2863
+#: ../libsvn_ra_serf/util.c:944
+msgid "Connection timed out"
+msgstr ""
+
+#: ../include/svn_error_codes.h:980
+msgid "URL access forbidden for unknown reason"
+msgstr ""
+
+#: ../include/svn_error_codes.h:986 ../include/svn_error_codes.h:1407
+msgid "Couldn't find a repository"
+msgstr ""
+
+#: ../include/svn_error_codes.h:990
+msgid "Couldn't open a repository"
+msgstr ""
+
+#: ../include/svn_error_codes.h:996
+msgid "Svndiff data has invalid header"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1000
+msgid "Svndiff data contains corrupt window"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1004
+msgid "Svndiff data contains backward-sliding source view"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1008
+msgid "Svndiff data contains invalid instruction"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1012
+msgid "Svndiff data ends unexpectedly"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1016
+msgid "Svndiff compressed data is invalid"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1022
+msgid "Apache has no path to an SVN filesystem"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1026
+msgid "Apache got a malformed URI"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1030
+msgid "Activity not found"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1034
+msgid "Baseline incorrect"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1038
+msgid "Input/output error"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1044
+msgid "A path under version control is needed for this operation"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1048
+msgid "Repository access is needed for this operation"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1052
+msgid "Bogus revision information given"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1056
+msgid "Attempting to commit to a URL more than once"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1060
+msgid "Operation does not apply to binary file"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1066
+msgid "Format of an svn:externals property was invalid"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1070
+msgid "Attempting restricted operation for modified resource"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1074
+msgid "Operation does not apply to directory"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1078
+msgid "Revision range is not allowed"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1082
+msgid "Inter-repository relocation not allowed"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1086
+msgid "Author name cannot contain a newline"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1090
+msgid "Bad property name"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1095
+msgid "Two versioned resources are unrelated"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1100
+msgid "Path has no lock token"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1105
+msgid "Operation does not support multiple sources"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1110
+msgid "No versioned parent directories"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1115 ../include/svn_error_codes.h:1135
+msgid "Working copy and merge source not ready for reintegration"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1120
+msgid "A file external cannot overwrite an existing versioned item"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1125
+msgid "Invalid path component strip count specified"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1130
+msgid "Detected a cycle while processing the operation"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1140
+msgid "Invalid mergeinfo detected in merge target"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1145
+msgid "Can't perform this operation without a valid lock token"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1150
+msgid "The operation is forbidden by the server"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1156
+msgid "A problem occurred; see other errors for details"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1160
+msgid "Failure loading plugin"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1164
+msgid "Malformed file"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1168
+msgid "Incomplete data"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1172
+msgid "Incorrect parameters given"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1176
+msgid "Tried a versioning operation on an unversioned resource"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1180
+msgid "Test failed"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1184
+msgid "Trying to use an unsupported feature"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1188
+msgid "Unexpected or unknown property kind"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1192
+msgid "Illegal target for the requested operation"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1196
+msgid "MD5 checksum is missing"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1200
+msgid "Directory needs to be empty but is not"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1204
+msgid "Error calling external program"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1208
+msgid "Python exception has been set with the error"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1212
+msgid "A checksum mismatch occurred"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1216
+msgid "The operation was interrupted"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1220
+msgid "The specified diff option is not supported"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1224
+msgid "Property not found"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1228
+msgid "No auth file path available"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1233
+msgid "Incompatible library version"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1238
+msgid "Mergeinfo parse error"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1243
+msgid "Cease invocation of this API"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1248
+msgid "Error parsing revision number"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1253
+msgid "Iteration terminated before completion"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1258
+msgid "Unknown changelist"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1263
+msgid "Reserved directory name in command line arguments"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1268
+msgid "Inquiry about unknown capability"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1273
+msgid "Test skipped"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1278
+msgid "APR memcache library not available"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1283
+msgid "Couldn't perform atomic initialization"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1288
+msgid "SQLite error"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1293
+msgid "Attempted to write to readonly SQLite db"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1300
+msgid "Unsupported schema found in SQLite db"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1305
+msgid "The SQLite db is busy"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1310
+msgid ""
+"SQLite busy at transaction rollback; resetting all busy SQLite statements to "
+"allow rollback"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1316
+msgid "Constraint error in SQLite db"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1321
+msgid "Too many memcached servers configured"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1326
+msgid "Failed to parse version number string"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1331
+msgid "Atomic data storage is corrupt"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1337
+msgid "Error parsing arguments"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1341
+msgid "Not enough arguments provided"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1345
+msgid "Mutually exclusive arguments specified"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1349
+msgid "Attempted command in administrative dir"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1353
+msgid "The log message file is under version control"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1357
+msgid "The log message is a pathname"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1361
+msgid "Committing in directory scheduled for addition"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1365
+msgid "No external editor available"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1369
+msgid "Something is wrong with the log message's contents"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1373
+msgid "A log message was given where none was necessary"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1377
+msgid "No external merge tool available"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1381
+msgid "Failed processing one or more externals definitions"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1387
+msgid "Special code for wrapping server errors to report to client"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1391
+msgid "Unknown svn protocol command"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1395
+msgid "Network connection closed unexpectedly"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1399
+msgid "Network read/write error"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1411
+msgid "Client/server version mismatch"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1416
+msgid "Cannot negotiate authentication mechanism"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1421
+msgid "Editor drive was aborted"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1429
+msgid "Credential data unavailable"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1433
+msgid "No authentication provider available"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1437
+msgid "All authentication providers exhausted"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1441
+msgid "Credentials not saved"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1446 ../libsvn_subr/gpg_agent.c:415
+msgid "Authentication failed"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1452
+msgid "Read access denied for root of edit"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1457
+msgid "Item is not readable"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1462
+msgid "Item is partially readable"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1466
+msgid "Invalid authz configuration"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1471
+msgid "Item is not writable"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1478
+msgid "Diff data source modified unexpectedly"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1484
+msgid "Initialization of SSPI library failed"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1488
+msgid "Server SSL certificate untrusted"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1493
+msgid "Initialization of the GSSAPI context failed"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1498
+msgid "While handling serf response:"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1504
+msgid "Assertion failure"
+msgstr ""
+
+#: ../include/svn_error_codes.h:1508
+msgid "No non-tracing links found in the error chain"
+msgstr ""
+
+#: ../libsvn_auth_gnome_keyring/gnome_keyring.c:152
+msgid "GNOME Keyring is locked and we are non-interactive"
+msgstr ""
+
+#: ../libsvn_client/add.c:606 ../libsvn_client/cmdline.c:356
+#: ../libsvn_subr/opt.c:932
+#, c-format
+msgid "'%s' ends in a reserved name"
+msgstr ""
+
+#: ../libsvn_client/add.c:875
+#, c-format
+msgid "'%s' prevents creating parent of '%s'"
+msgstr ""
+
+#: ../libsvn_client/add.c:914 ../libsvn_wc/adm_ops.c:732
+#, c-format
+msgid ""
+"'%s' is an existing item in conflict; please mark the conflict as resolved "
+"before adding a new item here"
+msgstr ""
+
+#: ../libsvn_client/add.c:921 ../libsvn_wc/adm_ops.c:687
+#: ../libsvn_wc/workqueue.c:905 ../libsvn_wc/workqueue.c:999
+#, c-format
+msgid "'%s' not found"
+msgstr ""
+
+#: ../libsvn_client/add.c:927 ../libsvn_wc/adm_ops.c:692
+#: ../libsvn_wc/delete.c:98
+#, c-format
+msgid "Unsupported node kind for path '%s'"
+msgstr ""
+
+#: ../libsvn_client/add.c:960 ../libsvn_client/changelist.c:65
+#: ../libsvn_client/changelist.c:104 ../libsvn_client/cleanup.c:55
+#: ../libsvn_client/export.c:1394 ../libsvn_client/import.c:815
+#: ../libsvn_client/patch.c:3063 ../libsvn_client/relocate.c:232
+#: ../libsvn_client/resolved.c:121 ../libsvn_client/revert.c:136
+#: ../libsvn_client/status.c:353 ../libsvn_client/switch.c:473
+#: ../libsvn_client/update.c:646 ../libsvn_client/upgrade.c:109
+#: ../svn/util.c:984
+#, c-format
+msgid "'%s' is not a local path"
+msgstr ""
+
+#: ../libsvn_client/add.c:1001 ../libsvn_client/copy_foreign.c:489
+#: ../libsvn_wc/adm_ops.c:766 ../libsvn_wc/copy.c:715
+#, c-format
+msgid "'%s' is already under version control"
+msgstr ""
+
+#: ../libsvn_client/add.c:1134 ../libsvn_client/add.c:1161
+#, c-format
+msgid "There is no valid URI above '%s'"
+msgstr ""
+
+#: ../libsvn_client/blame.c:605
+msgid "Start revision must precede end revision"
+msgstr ""
+
+#: ../libsvn_client/blame.c:633
+#, c-format
+msgid "Cannot calculate blame information for binary file '%s'"
+msgstr ""
+
+#: ../libsvn_client/cat.c:77 ../libsvn_client/commit_util.c:610
+#: ../libsvn_client/delete.c:81 ../libsvn_client/prop_commands.c:833
+#: ../libsvn_client/prop_commands.c:1423 ../libsvn_client/revisions.c:104
+#: ../libsvn_wc/adm_ops.c:1198 ../libsvn_wc/adm_ops.c:1248
+#: ../libsvn_wc/copy.c:563 ../libsvn_wc/copy.c:624 ../libsvn_wc/entries.c:1301
+#: ../libsvn_wc/entries.c:2682 ../libsvn_wc/entries.c:2713
+#: ../svn/notify.c:1095
+#, c-format
+msgid "'%s' is not under version control"
+msgstr ""
+
+#: ../libsvn_client/cat.c:82
+#, c-format
+msgid "'%s' refers to a directory"
+msgstr ""
+
+#: ../libsvn_client/cat.c:92
+#, c-format
+msgid "'%s' has no pristine version until it is committed"
+msgstr ""
+
+#: ../libsvn_client/cat.c:147 ../libsvn_client/export.c:390
+msgid "(local)"
+msgstr ""
+
+#: ../libsvn_client/cat.c:247
+#, c-format
+msgid "URL '%s' refers to a directory"
+msgstr ""
+
+#: ../libsvn_client/changelist.c:57
+msgid "Target changelist name must not be empty"
+msgstr ""
+
+#: ../libsvn_client/checkout.c:109 ../libsvn_client/export.c:1447
+#, c-format
+msgid "URL '%s' doesn't exist"
+msgstr ""
+
+#: ../libsvn_client/checkout.c:113
+#, c-format
+msgid "URL '%s' refers to a file, not a directory"
+msgstr ""
+
+#: ../libsvn_client/checkout.c:147
+#, c-format
+msgid "'%s' is already a working copy for a different URL"
+msgstr ""
+
+#: ../libsvn_client/checkout.c:155
+#, c-format
+msgid "'%s' already exists and is not a directory"
+msgstr ""
+
+#: ../libsvn_client/cmdline.c:104
+#, c-format
+msgid "All non-relative targets must have the same root URL"
+msgstr ""
+
+#: ../libsvn_client/cmdline.c:312
+msgid ""
+"Resolving '^/': no repository root found in the target arguments or in the "
+"current directory"
+msgstr ""
+
+#: ../libsvn_client/commit.c:155 ../libsvn_client/copy.c:1522
+msgid "Commit failed (details follow):"
+msgstr ""
+
+#: ../libsvn_client/commit.c:163
+msgid "Commit succeeded, but other errors follow:"
+msgstr ""
+
+#: ../libsvn_client/commit.c:170
+msgid "Error unlocking locked dirs (details follow):"
+msgstr ""
+
+#: ../libsvn_client/commit.c:181
+msgid "Error bumping revisions post-commit (details follow):"
+msgstr ""
+
+#: ../libsvn_client/commit.c:314
+#, c-format
+msgid ""
+"Cannot delete the directory '%s' in a non-recursive commit because it has "
+"children"
+msgstr ""
+
+#: ../libsvn_client/commit.c:613
+#, c-format
+msgid "'%s' is a URL, but URLs cannot be commit targets"
+msgstr ""
+
+#: ../libsvn_client/commit.c:735
+msgid ""
+"Commit can only commit to a single repository at a time.\n"
+"Are all targets part of the same working copy?"
+msgstr ""
+
+#: ../libsvn_client/commit.c:851
+#, c-format
+msgid ""
+"Cannot commit '%s' because it was moved from '%s' which is not part of the "
+"commit; both sides of the move must be committed together"
+msgstr ""
+
+#: ../libsvn_client/commit.c:882
+#, c-format
+msgid ""
+"Cannot commit '%s' because it was moved to '%s' which is not part of the "
+"commit; both sides of the move must be committed together"
+msgstr ""
+
+#: ../libsvn_client/commit_util.c:94 ../libsvn_repos/commit.c:167
+#, c-format
+msgid "Directory '%s' is out of date"
+msgstr ""
+
+#: ../libsvn_client/commit_util.c:95 ../libsvn_repos/commit.c:169
+#, c-format
+msgid "File '%s' is out of date"
+msgstr ""
+
+#: ../libsvn_client/commit_util.c:130
+#, c-format
+msgid "Directory '%s' is locked in another working copy"
+msgstr ""
+
+#: ../libsvn_client/commit_util.c:131
+#, c-format
+msgid "File '%s' is locked in another working copy"
+msgstr ""
+
+#: ../libsvn_client/commit_util.c:166
+#, c-format
+msgid "Changing directory '%s' is forbidden by the server"
+msgstr ""
+
+#: ../libsvn_client/commit_util.c:167
+#, c-format
+msgid "Changing file '%s' is forbidden by the server"
+msgstr ""
+
+#: ../libsvn_client/commit_util.c:315
+#, c-format
+msgid "Aborting commit: '%s' remains in tree-conflict"
+msgstr ""
+
+#: ../libsvn_client/commit_util.c:666
+#, c-format
+msgid "Aborting commit: '%s' remains in conflict"
+msgstr ""
+
+#: ../libsvn_client/commit_util.c:685
+#, c-format
+msgid "Node '%s' has unexpectedly changed kind"
+msgstr ""
+
+#: ../libsvn_client/commit_util.c:726
+#, c-format
+msgid "'%s' is scheduled for addition, but is missing"
+msgstr ""
+
+#: ../libsvn_client/commit_util.c:1257
+#, c-format
+msgid ""
+"'%s' is not known to exist in the repository and is not part of the commit, "
+"yet its child '%s' is part of the commit"
+msgstr ""
+
+#: ../libsvn_client/commit_util.c:1397
+#, c-format
+msgid "Cannot commit both '%s' and '%s' as they refer to the same URL"
+msgstr ""
+
+#: ../libsvn_client/commit_util.c:1548
+#, c-format
+msgid "Commit item '%s' has copy flag but no copyfrom URL"
+msgstr ""
+
+#: ../libsvn_client/commit_util.c:1553
+#, c-format
+msgid "Commit item '%s' has copy flag but an invalid revision"
+msgstr ""
+
+#: ../libsvn_client/commit_util.c:2015
+msgid "Standard properties can't be set explicitly as revision properties"
+msgstr ""
+
+#: ../libsvn_client/copy.c:439
+#, c-format
+msgid "Path '%s' exists, but is excluded"
+msgstr ""
+
+#: ../libsvn_client/copy.c:445 ../libsvn_client/copy.c:1062
+#: ../libsvn_client/copy.c:1321 ../libsvn_client/copy.c:1896
+#: ../libsvn_client/import.c:862
+#, c-format
+msgid "Path '%s' already exists"
+msgstr ""
+
+#: ../libsvn_client/copy.c:500
+#, c-format
+msgid "Path '%s' already exists as unversioned node"
+msgstr ""
+
+#: ../libsvn_client/copy.c:522 ../libsvn_client/copy.c:532
+#: ../libsvn_client/copy.c:1912
+#, c-format
+msgid "Path '%s' is not a directory"
+msgstr ""
+
+#: ../libsvn_client/copy.c:571 ../libsvn_client/merge.c:10168
+#: ../svnlook/svnlook.c:1425
+#, c-format
+msgid "Path '%s' does not exist"
+msgstr ""
+
+#: ../libsvn_client/copy.c:741 ../libsvn_client/copy.c:782
+#, c-format
+msgid "Path '%s' already exists, but is not a directory"
+msgstr ""
+
+#: ../libsvn_client/copy.c:843
+msgid "Source and destination URLs appear not to point to the same repository."
+msgstr ""
+
+#: ../libsvn_client/copy.c:1052 ../libsvn_client/prop_commands.c:167
+#, c-format
+msgid "Path '%s' does not exist in revision %ld"
+msgstr ""
+
+#: ../libsvn_client/copy.c:1880
+#, c-format
+msgid "Path '%s' not found in revision %ld"
+msgstr ""
+
+#: ../libsvn_client/copy.c:1885
+#, c-format
+msgid "Path '%s' not found in head revision"
+msgstr ""
+
+#: ../libsvn_client/copy.c:2013
+msgid "Cannot mix repository and working copy sources"
+msgstr ""
+
+#: ../libsvn_client/copy.c:2065
+#, c-format
+msgid "Cannot copy path '%s' into its own child '%s'"
+msgstr ""
+
+#: ../libsvn_client/copy.c:2101
+#, c-format
+msgid ""
+"Cannot move the external at '%s'; please edit the svn:externals property on "
+"'%s'."
+msgstr ""
+
+#: ../libsvn_client/copy.c:2116
+msgid "Moves between the working copy and the repository are not supported"
+msgstr ""
+
+#: ../libsvn_client/copy.c:2131
+#, c-format
+msgid "Cannot move URL '%s' into itself"
+msgstr ""
+
+#: ../libsvn_client/copy.c:2132
+#, c-format
+msgid "Cannot move path '%s' into itself"
+msgstr ""
+
+#: ../libsvn_client/copy.c:2199
+#, c-format
+msgid "'%s' does not have a URL associated with it"
+msgstr ""
+
+#: ../libsvn_client/copy_foreign.c:131 ../libsvn_client/copy_foreign.c:282
+#: ../libsvn_client/externals.c:963 ../libsvn_client/externals.c:1173
+#: ../libsvn_wc/update_editor.c:1124
+#, c-format
+msgid "Path '%s' is not in the working copy"
+msgstr ""
+
+#: ../libsvn_client/copy_foreign.c:372 ../libsvn_client/export.c:814
+#: ../libsvn_client/repos_diff.c:998 ../libsvn_fs_fs/dag.c:1051
+#: ../libsvn_ra_svn/client.c:1208 ../libsvn_wc/diff_editor.c:1984
+#: ../libsvn_wc/diff_editor.c:2070 ../libsvn_wc/externals.c:651
+#: ../libsvn_wc/update_editor.c:4277
+#, c-format
+msgid "Checksum mismatch for '%s'"
+msgstr ""
+
+#: ../libsvn_client/copy_foreign.c:479
+#, c-format
+msgid "'%s' is not a valid location inside a repository"
+msgstr ""
+
+#: ../libsvn_client/copy_foreign.c:510
+#, c-format
+msgid "Can't add '%s', because no parent directory is found"
+msgstr ""
+
+#: ../libsvn_client/delete.c:76
+#, c-format
+msgid "'%s' is in the way of the resource actually under version control"
+msgstr ""
+
+#: ../libsvn_client/delete.c:95
+#, c-format
+msgid "'%s' has local modifications -- commit or revert them first"
+msgstr ""
+
+#: ../libsvn_client/delete.c:127
+#, c-format
+msgid ""
+"Cannot remove the external at '%s'; please edit or delete the svn:externals "
+"property on '%s'"
+msgstr ""
+
+#: ../libsvn_client/deprecated.c:862 ../svn/move-cmd.c:65
+msgid "Cannot specify revisions (except HEAD) with move operations"
+msgstr ""
+
+#: ../libsvn_client/deprecated.c:1624
+msgid "No commits in repository"
+msgstr ""
+
+#: ../libsvn_client/deprecated.c:2930 ../libsvn_wc/deprecated.c:3953
+msgid "Non-recursive relocation not supported"
+msgstr ""
+
+#. Utilities
+#: ../libsvn_client/diff.c:64
+#, c-format
+msgid "Path '%s' must be an immediate child of the directory '%s'"
+msgstr ""
+
+#: ../libsvn_client/diff.c:258
+#, c-format
+msgid "%s\t(revision %ld)"
+msgstr ""
+
+#: ../libsvn_client/diff.c:260
+#, c-format
+msgid "%s\t(working copy)"
+msgstr ""
+
+#: ../libsvn_client/diff.c:512 ../svnlook/svnlook.c:795
+#, c-format
+msgid "%sProperty changes on: %s%s"
+msgstr ""
+
+#: ../libsvn_client/diff.c:760
+#, c-format
+msgid "Cannot display: file marked as a binary type.%s"
+msgstr ""
+
+#: ../libsvn_client/diff.c:1265 ../libsvn_client/merge.c:7217
+#: ../libsvn_client/merge.c:10570
+msgid "Not all required revisions are specified"
+msgstr ""
+
+#: ../libsvn_client/diff.c:1279
+msgid ""
+"At least one revision must be something other than BASE or WORKING when "
+"diffing a URL"
+msgstr ""
+
+#: ../libsvn_client/diff.c:1316
+#, c-format
+msgid "Diff target '%s' was not found in the repository at revision '%ld'"
+msgstr ""
+
+#: ../libsvn_client/diff.c:1321
+#, c-format
+msgid ""
+"Diff target '%s' was not found in the repository at revision '%ld' or '%ld'"
+msgstr ""
+
+#: ../libsvn_client/diff.c:1496
+#, c-format
+msgid ""
+"Diff target '%s' was not found in the repository at revisions '%ld' and '%ld'"
+msgstr ""
+
+#: ../libsvn_client/diff.c:1501
+#, c-format
+msgid ""
+"Diff targets '%s' and '%s' were not found in the repository at revisions "
+"'%ld' and '%ld'"
+msgstr ""
+
+#: ../libsvn_client/diff.c:1575
+msgid "Sorry, svn_client_diff6 was called in a way that is not yet supported"
+msgstr ""
+
+#: ../libsvn_client/diff.c:1616
+msgid ""
+"Only diffs between a path's text-base and its working files are supported at "
+"this time"
+msgstr ""
+
+#: ../libsvn_client/diff.c:2221
+msgid ""
+"Summarized diffs are only supported between a path's text-base and its "
+"working files at this time"
+msgstr ""
+
+#: ../libsvn_client/diff.c:2582 ../libsvn_client/diff.c:2648
+msgid "Cannot ignore properties and show only properties at the same time"
+msgstr ""
+
+#: ../libsvn_client/diff_local.c:609
+#, c-format
+msgid "'%s' is not the same node kind as '%s'"
+msgstr ""
+
+#: ../libsvn_client/diff_local.c:632 ../libsvn_wc/props.c:1568
+#, c-format
+msgid "'%s' is not a file or directory"
+msgstr ""
+
+#: ../libsvn_client/export.c:102
+#, c-format
+msgid "'%s' is not a valid EOL value"
+msgstr ""
+
+#: ../libsvn_client/export.c:240
+msgid "Destination directory exists, and will not be overwritten unless forced"
+msgstr ""
+
+#: ../libsvn_client/export.c:265 ../libsvn_client/export.c:1527
+#: ../libsvn_wc/adm_crawler.c:1204 ../libsvn_wc/conflicts.c:1293
+#: ../libsvn_wc/copy.c:586 ../libsvn_wc/crop.c:236 ../libsvn_wc/crop.c:327
+#: ../libsvn_wc/info.c:403 ../libsvn_wc/node.c:704 ../libsvn_wc/props.c:227
+#: ../libsvn_wc/status.c:2679 ../libsvn_wc/wc_db.c:2589
+#: ../libsvn_wc/wc_db.c:2787 ../libsvn_wc/wc_db.c:2811
+#: ../libsvn_wc/wc_db.c:2969 ../libsvn_wc/wc_db.c:3967
+#: ../libsvn_wc/wc_db.c:6021 ../libsvn_wc/wc_db.c:6341
+#: ../libsvn_wc/wc_db.c:6502 ../libsvn_wc/wc_db.c:6657
+#: ../libsvn_wc/wc_db.c:7696 ../libsvn_wc/wc_db.c:8660
+#: ../libsvn_wc/wc_db.c:9326 ../libsvn_wc/wc_db.c:9955
+#: ../libsvn_wc/wc_db.c:10102 ../libsvn_wc/wc_db.c:10242
+#: ../libsvn_wc/wc_db.c:10592 ../libsvn_wc/wc_db.c:10926
+#: ../libsvn_wc/wc_db.c:12106 ../libsvn_wc/wc_db.c:12182
+#: ../libsvn_wc/wc_db.c:13716 ../libsvn_wc/wc_db.c:13776
+#: ../libsvn_wc/wc_db.c:13914 ../libsvn_wc/wc_db.c:14072
+#: ../libsvn_wc/wc_db.c:14509 ../libsvn_wc/wc_db.c:15290
+#, c-format
+msgid "The node '%s' was not found."
+msgstr ""
+
+#: ../libsvn_client/export.c:285 ../libsvn_client/export.c:1184
+#: ../libsvn_client/export.c:1241
+#, c-format
+msgid "Destination file '%s' exists, and will not be overwritten unless forced"
+msgstr ""
+
+#: ../libsvn_client/export.c:291 ../libsvn_client/export.c:1189
+#: ../libsvn_client/export.c:1246
+#, c-format
+msgid "Destination '%s' exists. Cannot overwrite directory with non-directory"
+msgstr ""
+
+#: ../libsvn_client/export.c:473 ../libsvn_client/export.c:622
+#: ../libsvn_client/export.c:1078
+#, c-format
+msgid "'%s' exists and is not a directory"
+msgstr ""
+
+#: ../libsvn_client/export.c:477 ../libsvn_client/export.c:626
+#: ../libsvn_client/export.c:1082
+#, c-format
+msgid "'%s' already exists"
+msgstr ""
+
+#: ../libsvn_client/externals.c:202
+#, c-format
+msgid ""
+"The external '%s' defined in %s at '%s' cannot be checked out because '%s' "
+"is already a versioned path."
+msgstr ""
+
+#: ../libsvn_client/externals.c:461
+#, c-format
+msgid ""
+"Cannot insert a file external defined on '%s' into the working copy '%s'."
+msgstr ""
+
+#: ../libsvn_client/externals.c:486
+#, c-format
+msgid ""
+"The file external from '%s' cannot overwrite the existing versioned item at "
+"'%s'"
+msgstr ""
+
+#: ../libsvn_client/externals.c:499
+#, c-format
+msgid "The file external '%s' can not be created because the node exists."
+msgstr ""
+
+#: ../libsvn_client/externals.c:761
+#, c-format
+msgid "URL '%s' at revision %ld doesn't exist"
+msgstr ""
+
+#: ../libsvn_client/externals.c:766
+#, c-format
+msgid "URL '%s' at revision %ld is not a file or a directory"
+msgstr ""
+
+#: ../libsvn_client/externals.c:845
+#, c-format
+msgid ""
+"Unsupported external: URL of file external '%s' is not in repository '%s'"
+msgstr ""
+
+#: ../libsvn_client/externals.c:1038
+#, c-format
+msgid "Traversal of '%s' found no ambient depth"
+msgstr ""
+
+#: ../libsvn_client/import.c:159
+#, c-format
+msgid "%s property on '%s' contains unrecognized EOL-style '%s'"
+msgstr ""
+
+#: ../libsvn_client/import.c:489
+#, c-format
+msgid "Unknown or unversionable type for '%s'"
+msgstr ""
+
+#: ../libsvn_client/import.c:707
+msgid "New entry name required when importing a file"
+msgstr ""
+
+#: ../libsvn_client/import.c:758 ../libsvn_client/patch.c:3070
+#: ../libsvn_client/patch.c:3082 ../libsvn_wc/delete.c:93
+#: ../libsvn_wc/lock.c:121 ../libsvn_wc/wc_db_wcroot.c:77
+#, c-format
+msgid "'%s' does not exist"
+msgstr ""
+
+#: ../libsvn_client/import.c:891
+#, c-format
+msgid "'%s' is a reserved name and cannot be imported"
+msgstr ""
+
+#: ../libsvn_client/info.c:310 ../libsvn_client/list.c:376
+#, c-format
+msgid "URL '%s' non-existent in revision %ld"
+msgstr ""
+
+#: ../libsvn_client/locking_commands.c:266
+#: ../libsvn_client/locking_commands.c:292
+msgid "No common parent found, unable to operate on disjoint arguments"
+msgstr ""
+
+#: ../libsvn_client/locking_commands.c:325
+#, c-format
+msgid "The node '%s' is not a file"
+msgstr ""
+
+#: ../libsvn_client/locking_commands.c:345
+msgid "Unable to lock/unlock across multiple repositories"
+msgstr ""
+
+#: ../libsvn_client/locking_commands.c:400
+#, c-format
+msgid "'%s' is not locked in this working copy"
+msgstr ""
+
+#: ../libsvn_client/locking_commands.c:450
+#, c-format
+msgid "'%s' is not locked"
+msgstr ""
+
+#: ../libsvn_client/locking_commands.c:483 ../libsvn_fs/fs-loader.c:1413
+#: ../libsvn_ra/ra_loader.c:1074
+msgid "Lock comment contains illegal characters"
+msgstr ""
+
+#: ../libsvn_client/log.c:309
+msgid "No valid target found"
+msgstr ""
+
+#: ../libsvn_client/log.c:340
+#, c-format
+msgid "'%s' is not a relative path"
+msgstr ""
+
+#: ../libsvn_client/log.c:366
+msgid "When specifying working copy paths, only one target may be given"
+msgstr ""
+
+#: ../libsvn_client/log.c:390 ../libsvn_client/revisions.c:189
+msgid "PREV, BASE, or COMMITTED revision keywords are invalid for URL"
+msgstr ""
+
+#: ../libsvn_client/log.c:523 ../libsvn_client/log.c:832
+msgid "Missing required revision specification"
+msgstr ""
+
+#: ../libsvn_client/merge.c:443
+#, c-format
+msgid "URL '%s' of '%s' is not in repository '%s'"
+msgstr ""
+
+#: ../libsvn_client/merge.c:480
+#, c-format
+msgid "'%s' must be from the same repository as '%s'"
+msgstr ""
+
+#. xgettext: the '.working', '.merge-left.r%ld' and
+#. '.merge-right.r%ld' strings are used to tag onto a file
+#. name in case of a merge conflict
+#: ../libsvn_client/merge.c:2052
+#, c-format
+msgid ".working%s%s"
+msgstr ""
+
+#: ../libsvn_client/merge.c:2055
+#, c-format
+msgid ".merge-left.r%ld%s%s"
+msgstr ""
+
+#: ../libsvn_client/merge.c:2059
+#, c-format
+msgid ".merge-right.r%ld%s%s"
+msgstr ""
+
+#: ../libsvn_client/merge.c:4722
+msgid ""
+"Cannot reverse-merge a range from a path's own future history; try updating "
+"first"
+msgstr ""
+
+#: ../libsvn_client/merge.c:5457
+#, c-format
+msgid ""
+"One or more conflicts were produced while merging r%ld:%ld into\n"
+"'%s' --\n"
+"resolve all conflicts and rerun the merge to apply the remaining\n"
+"unmerged revisions"
+msgstr ""
+
+#: ../libsvn_client/merge.c:6272
+#, c-format
+msgid "Invalid mergeinfo detected on '%s', merge tracking not possible"
+msgstr ""
+
+#: ../libsvn_client/merge.c:6421
+msgid ""
+"Merge tracking not allowed with missing subtrees; try restoring these items "
+"first:\n"
+msgstr ""
+
+#: ../libsvn_client/merge.c:7421
+#, c-format
+msgid ""
+"Invalid mergeinfo detected on merge target '%s', merge tracking not possible"
+msgstr ""
+
+#: ../libsvn_client/merge.c:9740
+msgid "Use of two URLs is not compatible with mergeinfo modification"
+msgstr ""
+
+#: ../libsvn_client/merge.c:9747 ../libsvn_client/merge.c:10082
+msgid ""
+"Merge from foreign repository is not compatible with mergeinfo modification"
+msgstr ""
+
+#: ../libsvn_client/merge.c:10175 ../libsvn_client/merge.c:10318
+#, c-format
+msgid "Merge target '%s' does not exist in the working copy"
+msgstr ""
+
+#: ../libsvn_client/merge.c:10198
+msgid "Cannot determine revision of working copy"
+msgstr ""
+
+#: ../libsvn_client/merge.c:10204
+#, c-format
+msgid ""
+"Cannot merge into mixed-revision working copy [%ld:%ld]; try updating first"
+msgstr ""
+
+#: ../libsvn_client/merge.c:10219
+msgid "Cannot merge into a working copy with a switched subtree"
+msgstr ""
+
+#: ../libsvn_client/merge.c:10235
+msgid "Cannot merge into a working copy that has local modifications"
+msgstr ""
+
+#: ../libsvn_client/merge.c:10255 ../svn/merge-cmd.c:60
+#, c-format
+msgid ""
+"Invalid merge source '%s'; a working copy path can only be used with a "
+"repository revision (a number, a date, or head)"
+msgstr ""
+
+#: ../libsvn_client/merge.c:10573 ../svn/merge-cmd.c:127
+msgid "Merge sources must both be either paths or URLs"
+msgstr ""
+
+#: ../libsvn_client/merge.c:11334 ../libsvn_client/merge.c:11496
+#: ../libsvn_client/merge.c:12383
+#, c-format
+msgid "'%s@%ld' must be ancestrally related to '%s@%ld'"
+msgstr ""
+
+#: ../libsvn_client/merge.c:11446
+#, c-format
+msgid ""
+"Neither the reintegrate source nor target can be the root of the repository"
+msgstr ""
+
+#: ../libsvn_client/merge.c:11456
+msgid "Reintegrate merge not possible"
+msgstr ""
+
+#: ../libsvn_client/merge.c:11529
+#, c-format
+msgid ""
+"Reintegrate can only be used if revisions %ld through %ld were previously "
+"merged from %s to the reintegrate source, but this is not the case:\n"
+"%s"
+msgstr ""
+
+#: ../libsvn_client/merge.c:11591
+#, c-format
+msgid ""
+"Can't reintegrate into '%s' because it is locally added and therefore not "
+"related to the merge source"
+msgstr ""
+
+#: ../libsvn_client/merge.c:11859
+msgid "Cannot merge automatically while ignoring mergeinfo"
+msgstr ""
+
+#: ../libsvn_client/merge.c:12599
+msgid ""
+"The required merge is reintegrate-like, and the record-only option cannot be "
+"used with this kind of merge"
+msgstr ""
+
+#: ../libsvn_client/merge.c:12605
+msgid ""
+"The required merge is reintegrate-like, and the depth option cannot be used "
+"with this kind of merge"
+msgstr ""
+
+#: ../libsvn_client/merge.c:12611
+msgid ""
+"The required merge is reintegrate-like, and the force_delete option cannot "
+"be used with this kind of merge"
+msgstr ""
+
+#: ../libsvn_client/mergeinfo.c:1718
+msgid "Only depths 'infinity' and 'empty' are currently supported"
+msgstr ""
+
+#: ../libsvn_client/patch.c:279
+#, c-format
+msgid "Cannot strip %u components from '%s'"
+msgstr ""
+
+#: ../libsvn_client/patch.c:910
+msgid "Invalid link representation"
+msgstr ""
+
+#: ../libsvn_client/patch.c:3059
+msgid "strip count must be positive"
+msgstr ""
+
+#: ../libsvn_client/patch.c:3075 ../libsvn_fs_base/tree.c:3978
+#: ../libsvn_fs_base/tree.c:3983 ../libsvn_fs_fs/tree.c:2943
+#: ../libsvn_fs_fs/tree.c:2948 ../libsvn_ra/compat.c:675
+#: ../libsvn_ra_local/ra_plugin.c:1145
+#, c-format
+msgid "'%s' is not a file"
+msgstr ""
+
+#: ../libsvn_client/patch.c:3087 ../libsvn_wc/util.c:59
+#, c-format
+msgid "'%s' is not a directory"
+msgstr ""
+
+#: ../libsvn_client/prop_commands.c:60
+#, c-format
+msgid "'%s' is a wcprop, thus not accessible to clients"
+msgstr ""
+
+#: ../libsvn_client/prop_commands.c:155
+#, c-format
+msgid "Property '%s' is not a regular property"
+msgstr ""
+
+#: ../libsvn_client/prop_commands.c:266
+#, c-format
+msgid "Revision property '%s' not allowed in this context"
+msgstr ""
+
+#: ../libsvn_client/prop_commands.c:273 ../libsvn_client/prop_commands.c:468
+#, c-format
+msgid "Bad property name: '%s'"
+msgstr ""
+
+#: ../libsvn_client/prop_commands.c:301
+msgid "Targets must be working copy paths"
+msgstr ""
+
+#: ../libsvn_client/prop_commands.c:362
+msgid "Targets must be URLs"
+msgstr ""
+
+#: ../libsvn_client/prop_commands.c:372
+msgid "Setting property on non-local targets needs a base revision"
+msgstr ""
+
+#: ../libsvn_client/prop_commands.c:387
+#, c-format
+msgid "Setting property '%s' on non-local targets is not supported"
+msgstr ""
+
+#: ../libsvn_client/prop_commands.c:415
+#, c-format
+msgid ""
+"revprop '%s' in r%ld is unexpectedly absent in repository (maybe someone "
+"else deleted it?)"
+msgstr ""
+
+#: ../libsvn_client/prop_commands.c:424
+#, c-format
+msgid ""
+"revprop '%s' in r%ld has unexpected value in repository (maybe someone else "
+"changed it?)"
+msgstr ""
+
+#: ../libsvn_client/prop_commands.c:432
+#, c-format
+msgid ""
+"revprop '%s' in r%ld is unexpectedly present in repository (maybe someone "
+"else set it?)"
+msgstr ""
+
+#: ../libsvn_client/prop_commands.c:463
+msgid ""
+"Author name should not contain a newline; value will not be set unless forced"
+msgstr ""
+
+#: ../libsvn_client/prop_commands.c:577
+#, c-format
+msgid "'%s' does not exist in revision %ld"
+msgstr ""
+
+#: ../libsvn_client/prop_commands.c:583 ../libsvn_client/prop_commands.c:1102
+#: ../libsvn_wc/crop.c:168
+#, c-format
+msgid "Unknown node kind for '%s'"
+msgstr ""
+
+#: ../libsvn_client/ra.c:161
+#, c-format
+msgid "Attempt to set wcprop '%s' on '%s' in a non-commit operation"
+msgstr ""
+
+#: ../libsvn_client/ra.c:415
+#, c-format
+msgid "Redirect cycle detected for URL '%s'"
+msgstr ""
+
+#: ../libsvn_client/ra.c:501 ../libsvn_client/ra.c:812
+#, c-format
+msgid "'%s' has no URL"
+msgstr ""
+
+#: ../libsvn_client/ra.c:679 ../libsvn_ra/compat.c:395
+#, c-format
+msgid "Unable to find repository location for '%s' in revision %ld"
+msgstr ""
+
+#: ../libsvn_client/ra.c:691
+#, c-format
+msgid ""
+"The location for '%s' for revision %ld does not exist in the repository or "
+"refers to an unrelated object"
+msgstr ""
+
+#: ../libsvn_client/relocate.c:117
+#, c-format
+msgid "'%s' is not the root of the repository"
+msgstr ""
+
+#: ../libsvn_client/relocate.c:124
+#, c-format
+msgid "The repository at '%s' has uuid '%s', but the WC has '%s'"
+msgstr ""
+
+#: ../libsvn_client/repos_diff.c:931 ../libsvn_wc/externals.c:570
+#, c-format
+msgid "Base checksum mismatch for '%s'"
+msgstr ""
+
+#: ../libsvn_client/revisions.c:113 ../libsvn_client/revisions.c:138
+#, c-format
+msgid "Path '%s' has no committed revision"
+msgstr ""
+
+#: ../libsvn_client/revisions.c:166
+#, c-format
+msgid "Unrecognized revision type requested for '%s'"
+msgstr ""
+
+#: ../libsvn_client/status.c:407 ../libsvn_client/status.c:586
+#: ../libsvn_wc/lock.c:564 ../libsvn_wc/lock.c:856 ../libsvn_wc/lock.c:1542
+#: ../libsvn_wc/wc_db.c:13328 ../libsvn_wc/wc_db_wcroot.c:680
+#, c-format
+msgid "'%s' is not a working copy"
+msgstr ""
+
+#: ../libsvn_client/status.c:454
+#, c-format
+msgid "Entry '%s' has no URL"
+msgstr ""
+
+#: ../libsvn_client/switch.c:129
+#, c-format
+msgid "Cannot both exclude and switch a path"
+msgstr ""
+
+#: ../libsvn_client/switch.c:150
+#, c-format
+msgid "Cannot switch '%s' because it is not in the repository yet"
+msgstr ""
+
+#: ../libsvn_client/switch.c:175
+#, c-format
+msgid "Directory '%s' has no URL"
+msgstr ""
+
+#: ../libsvn_client/switch.c:215 ../libsvn_ra_local/ra_plugin.c:236
+#: ../libsvn_ra_local/ra_plugin.c:326 ../libsvn_wc/update_editor.c:4868
+#, c-format
+msgid ""
+"'%s'\n"
+"is not the same repository as\n"
+"'%s'"
+msgstr ""
+
+#: ../libsvn_client/switch.c:242
+#, c-format
+msgid "'%s' shares no common ancestry with '%s'"
+msgstr ""
+
+#: ../libsvn_client/util.c:336
+#, c-format
+msgid "Cannot mix repository and working copy targets"
+msgstr ""
+
+#: ../libsvn_delta/svndiff.c:175
+msgid "Compression of svndiff data failed"
+msgstr ""
+
+#: ../libsvn_delta/svndiff.c:538
+msgid "Decompression of svndiff data failed: no size"
+msgstr ""
+
+#: ../libsvn_delta/svndiff.c:541
+msgid "Decompression of svndiff data failed: size too large"
+msgstr ""
+
+#: ../libsvn_delta/svndiff.c:565
+msgid "Decompression of svndiff data failed"
+msgstr ""
+
+#: ../libsvn_delta/svndiff.c:572
+msgid "Size of uncompressed data does not match stored original length"
+msgstr ""
+
+#: ../libsvn_delta/svndiff.c:648
+#, c-format
+msgid "Invalid diff stream: insn %d cannot be decoded"
+msgstr ""
+
+#: ../libsvn_delta/svndiff.c:652
+#, c-format
+msgid "Invalid diff stream: insn %d has length zero"
+msgstr ""
+
+#: ../libsvn_delta/svndiff.c:656
+#, c-format
+msgid "Invalid diff stream: insn %d overflows the target view"
+msgstr ""
+
+#: ../libsvn_delta/svndiff.c:665
+#, c-format
+msgid "Invalid diff stream: [src] insn %d overflows the source view"
+msgstr ""
+
+#: ../libsvn_delta/svndiff.c:672
+#, c-format
+msgid ""
+"Invalid diff stream: [tgt] insn %d starts beyond the target view position"
+msgstr ""
+
+#: ../libsvn_delta/svndiff.c:679
+#, c-format
+msgid "Invalid diff stream: [new] insn %d overflows the new data section"
+msgstr ""
+
+#: ../libsvn_delta/svndiff.c:689
+msgid "Delta does not fill the target window"
+msgstr ""
+
+#: ../libsvn_delta/svndiff.c:692
+msgid "Delta does not contain enough new data"
+msgstr ""
+
+#: ../libsvn_delta/svndiff.c:801
+msgid "Svndiff has invalid header"
+msgstr ""
+
+#: ../libsvn_delta/svndiff.c:857 ../libsvn_delta/svndiff.c:1039
+msgid "Svndiff contains a too-large window"
+msgstr ""
+
+#: ../libsvn_delta/svndiff.c:864 ../libsvn_delta/svndiff.c:1046
+msgid "Svndiff contains corrupt window header"
+msgstr ""
+
+#: ../libsvn_delta/svndiff.c:873
+msgid "Svndiff has backwards-sliding source views"
+msgstr ""
+
+#: ../libsvn_delta/svndiff.c:930 ../libsvn_delta/svndiff.c:987
+#: ../libsvn_delta/svndiff.c:1068
+msgid "Unexpected end of svndiff input"
+msgstr ""
+
+#: ../libsvn_diff/diff_file.c:184
+#, c-format
+msgid "File '%s' is too large to be read in to memory"
+msgstr ""
+
+#: ../libsvn_diff/diff_file.c:1106
+#, c-format
+msgid "The file '%s' changed unexpectedly during diff"
+msgstr ""
+
+#: ../libsvn_diff/diff_file.c:1276
+msgid "Error in options to internal diff"
+msgstr ""
+
+#: ../libsvn_diff/diff_file.c:1302
+#, c-format
+msgid "Invalid argument '%s' in diff options"
+msgstr ""
+
+#. Order of date components can be different in different languages
+#: ../libsvn_diff/diff_file.c:1799
+msgid "%a %b %e %H:%M:%S %Y"
+msgstr ""
+
+#: ../libsvn_diff/diff_file.c:1875 ../libsvn_diff/diff_file.c:1891
+#, c-format
+msgid "Path '%s' must be inside the directory '%s'"
+msgstr ""
+
+#: ../libsvn_diff/diff_file.c:2409
+#, c-format
+msgid "Failed to delete mmap '%s'"
+msgstr ""
+
+#: ../libsvn_diff/util.c:464
+#, c-format
+msgid " Reverse-merged %s:r%s%s"
+msgstr ""
+
+#: ../libsvn_diff/util.c:481
+#, c-format
+msgid " Merged %s:r%s%s"
+msgstr ""
+
+#: ../libsvn_fs/editor.c:219
+#, c-format
+msgid "Revision for modifying '%s' is required"
+msgstr ""
+
+#: ../libsvn_fs/editor.c:228
+#, c-format
+msgid "'%s' is out of date; try updating"
+msgstr ""
+
+#: ../libsvn_fs/editor.c:265
+#, c-format
+msgid "'%s' has been modified since the commit began (restart the commit)"
+msgstr ""
+
+#: ../libsvn_fs/editor.c:323
+#, c-format
+msgid "'%s' already exists, so may be out of date; try updating"
+msgstr ""
+
+#: ../libsvn_fs/editor.c:456
+msgid "The filesystem does not support 'absent' nodes"
+msgstr ""
+
+#: ../libsvn_fs/fs-loader.c:121
+#, c-format
+msgid "Invalid name for FS type '%s'"
+msgstr ""
+
+#: ../libsvn_fs/fs-loader.c:138 ../libsvn_ra/ra_loader.c:161
+#: ../libsvn_ra/ra_loader.c:174
+#, c-format
+msgid "'%s' does not define '%s()'"
+msgstr ""
+
+#: ../libsvn_fs/fs-loader.c:164
+#, c-format
+msgid "Failed to load module for FS type '%s'"
+msgstr ""
+
+#: ../libsvn_fs/fs-loader.c:186
+#, c-format
+msgid ""
+"Mismatched FS module version for '%s': found %d.%d.%d%s, expected %d.%d.%d%s"
+msgstr ""
+
+#: ../libsvn_fs/fs-loader.c:266
+#, c-format
+msgid "Unknown FS type '%s'"
+msgstr ""
+
+#: ../libsvn_fs/fs-loader.c:389
+#, c-format
+msgid "Path '%s' is not in UTF-8"
+msgstr ""
+
+#: ../libsvn_fs/fs-loader.c:397
+#, c-format
+msgid "Path '%s' contains '.' or '..' element"
+msgstr ""
+
+#: ../libsvn_fs/fs-loader.c:554 ../libsvn_repos/repos.c:1982
+msgid "Hotcopy source and destination are equal"
+msgstr ""
+
+#: ../libsvn_fs/fs-loader.c:564
+#, c-format
+msgid "'%s' already exists and is a file"
+msgstr ""
+
+#: ../libsvn_fs/fs-loader.c:569
+#, c-format
+msgid "'%s' already exists and has an unknown node kind"
+msgstr ""
+
+#: ../libsvn_fs/fs-loader.c:587
+#, c-format
+msgid ""
+"The filesystem type of the hotcopy source ('%s') does not match the "
+"filesystem type of the hotcopy destination ('%s')"
+msgstr ""
+
+#: ../libsvn_fs/fs-loader.c:1395
+#, c-format
+msgid "Malformed UUID '%s'"
+msgstr ""
+
+#: ../libsvn_fs/fs-loader.c:1423
+#, c-format
+msgid "Lock token URI '%s' has bad scheme; expected '%s'"
+msgstr ""
+
+#: ../libsvn_fs/fs-loader.c:1430
+#, c-format
+msgid "Lock token '%s' is not ASCII at byte %u"
+msgstr ""
+
+#: ../libsvn_fs/fs-loader.c:1437
+#, c-format
+msgid "Lock token URI '%s' is not XML-safe"
+msgstr ""
+
+#: ../libsvn_fs/fs-loader.c:1444
+msgid "Negative expiration date passed to svn_fs_lock"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/bdb-err.c:104
+#, c-format
+msgid "Berkeley DB error for filesystem '%s' while %s:\n"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/changes-table.c:94
+msgid "creating change"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/changes-table.c:118
+msgid "deleting changes"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/changes-table.c:150 ../libsvn_fs_fs/fs_fs.c:5911
+msgid "Missing required node revision ID"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/changes-table.c:161 ../libsvn_fs_fs/fs_fs.c:5921
+msgid "Invalid change ordering: new node revision ID without delete"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/changes-table.c:171 ../libsvn_fs_fs/fs_fs.c:5932
+msgid "Invalid change ordering: non-add change on deleted path"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/changes-table.c:180 ../libsvn_fs_fs/fs_fs.c:5941
+msgid "Invalid change ordering: add change on preexisting path"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/changes-table.c:272
+#: ../libsvn_fs_base/bdb/changes-table.c:395
+msgid "creating cursor for reading changes"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/changes-table.c:297
+#: ../libsvn_fs_base/bdb/changes-table.c:416
+#, c-format
+msgid "Error reading changes for key '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/changes-table.c:356
+#: ../libsvn_fs_base/bdb/changes-table.c:439
+msgid "fetching changes"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/changes-table.c:369
+#: ../libsvn_fs_base/bdb/changes-table.c:452
+msgid "closing changes cursor"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/checksum-reps-table.c:87
+#: ../libsvn_fs_base/bdb/checksum-reps-table.c:116
+#: ../libsvn_fs_base/bdb/checksum-reps-table.c:159
+msgid "Only SHA1 checksums can be used as keys in the checksum-reps table.\n"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/checksum-reps-table.c:135
+#, c-format
+msgid "Representation key for checksum '%s' exists in filesystem '%s'."
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/checksum-reps-table.c:142
+msgid "storing checksum-reps record"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/checksum-reps-table.c:164
+msgid "deleting entry from 'checksum-reps' table"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/checksum-reps-table.c:186
+msgid "allocating new representation reuse ID (getting 'next-key')"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/checksum-reps-table.c:207
+msgid "bumping next representation reuse ID"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/copies-table.c:92
+msgid "storing copy record"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/copies-table.c:115
+msgid "allocating new copy ID (getting 'next-key')"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/copies-table.c:133
+msgid "bumping next copy key"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/copies-table.c:171
+msgid "deleting entry from 'copies' table"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/copies-table.c:199
+msgid "reading copy"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/lock-tokens-table.c:87
+msgid "storing lock token record"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/lock-tokens-table.c:108
+msgid "deleting entry from 'lock-tokens' table"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/lock-tokens-table.c:135
+msgid "reading lock token"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/locks-table.c:93
+msgid "storing lock record"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/locks-table.c:116
+msgid "deleting lock from 'locks' table"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/locks-table.c:143
+msgid "reading lock"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/locks-table.c:246
+msgid "creating cursor for reading lock tokens"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/locks-table.c:321
+msgid "fetching lock tokens"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/locks-table.c:323
+msgid "fetching lock tokens (closing cursor)"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/miscellaneous-table.c:95
+msgid "deleting record from 'miscellaneous' table"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/miscellaneous-table.c:103
+msgid "storing miscellaneous record"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/miscellaneous-table.c:131
+msgid "fetching miscellaneous record"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/node-origins-table.c:117
+#, c-format
+msgid ""
+"Node origin for '%s' exists in filesystem '%s' with a different value (%s) "
+"than what we were about to store (%s)"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/node-origins-table.c:127
+msgid "storing node-origins record"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/node-origins-table.c:142
+msgid "deleting entry from 'node-origins' table"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/nodes-table.c:102
+msgid "allocating new node ID (getting 'next-key')"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/nodes-table.c:120
+msgid "bumping next node ID key"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/nodes-table.c:156
+#, c-format
+msgid "Successor id '%s' (for '%s') already exists in filesystem '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/nodes-table.c:182
+msgid "deleting entry from 'nodes' table"
+msgstr ""
+
+#. Handle any other error conditions.
+#: ../libsvn_fs_base/bdb/nodes-table.c:220
+msgid "reading node revision"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/nodes-table.c:253
+msgid "storing node revision"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/reps-table.c:98
+#: ../libsvn_fs_base/bdb/reps-table.c:200
+#, c-format
+msgid "No such representation '%s'"
+msgstr ""
+
+#. Handle any other error conditions.
+#: ../libsvn_fs_base/bdb/reps-table.c:101
+msgid "reading representation"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/reps-table.c:128
+msgid "storing representation"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/reps-table.c:156
+msgid "allocating new representation (getting next-key)"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/reps-table.c:177
+msgid "bumping next representation key"
+msgstr ""
+
+#. Handle any other error conditions.
+#: ../libsvn_fs_base/bdb/reps-table.c:203
+msgid "deleting representation"
+msgstr ""
+
+#. Handle any other error conditions.
+#: ../libsvn_fs_base/bdb/rev-table.c:95
+msgid "reading filesystem revision"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/rev-table.c:141
+msgid "updating filesystem revision"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/rev-table.c:149
+msgid "storing filesystem revision"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/rev-table.c:179
+msgid "getting youngest revision (creating cursor)"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/rev-table.c:203
+msgid "getting youngest revision (finding last entry)"
+msgstr ""
+
+#. You can't commit a transaction with open cursors, because:
+#. 1) key/value pairs don't get deleted until the cursors referring
+#. to them are closed, so closing a cursor can fail for various
+#. reasons, and txn_commit shouldn't fail that way, and
+#. 2) using a cursor after committing its transaction can cause
+#. undetectable database corruption.
+#: ../libsvn_fs_base/bdb/rev-table.c:213
+msgid "getting youngest revision (closing cursor)"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/strings-table.c:94
+#: ../libsvn_fs_base/bdb/strings-table.c:300
+#: ../libsvn_fs_base/bdb/strings-table.c:491
+msgid "creating cursor for reading a string"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/strings-table.c:124
+msgid "moving cursor"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/strings-table.c:136
+msgid "rerunning cursor move"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/strings-table.c:228
+#: ../libsvn_fs_base/bdb/strings-table.c:247
+#: ../libsvn_fs_base/bdb/strings-table.c:265
+msgid "reading string"
+msgstr ""
+
+#. Done with the cursor.
+#: ../libsvn_fs_base/bdb/strings-table.c:254
+#: ../libsvn_fs_base/bdb/strings-table.c:334
+#: ../libsvn_fs_base/bdb/strings-table.c:539
+msgid "closing string-reading cursor"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/strings-table.c:313
+#: ../libsvn_fs_base/bdb/strings-table.c:505
+msgid "getting next-key value"
+msgstr ""
+
+#. ignore the error, the original is
+#. more important.
+#: ../libsvn_fs_base/bdb/strings-table.c:331
+msgid "bumping next string key"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/strings-table.c:358
+msgid "appending string"
+msgstr ""
+
+#. Handle any other error conditions.
+#: ../libsvn_fs_base/bdb/strings-table.c:390
+msgid "clearing string"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/strings-table.c:399
+msgid "storing empty contents"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/strings-table.c:436
+msgid "fetching string length"
+msgstr ""
+
+#. Handle any other error conditions.
+#: ../libsvn_fs_base/bdb/strings-table.c:466
+msgid "deleting string"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/strings-table.c:524
+msgid "writing copied data"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/strings-table.c:535
+msgid "fetching string data for a copy"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/txn-table.c:99
+msgid "storing transaction record"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/txn-table.c:123
+msgid "allocating new transaction ID (getting 'next-key')"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/txn-table.c:142
+msgid "bumping next transaction key"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/txn-table.c:188
+msgid "deleting entry from 'transactions' table"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/txn-table.c:218
+msgid "reading transaction"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/txn-table.c:251
+msgid "reading transaction list (opening cursor)"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/txn-table.c:314
+msgid "reading transaction list (listing keys)"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/txn-table.c:317
+msgid "reading transaction list (closing cursor)"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/uuids-table.c:119
+msgid "get repository uuid"
+msgstr ""
+
+#: ../libsvn_fs_base/bdb/uuids-table.c:147
+msgid "set repository uuid"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:228
+#, c-format
+msgid "Corrupt DB: initial transaction id not '0' in filesystem '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:236
+#, c-format
+msgid "Corrupt DB: initial copy id not '0' in filesystem '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:245
+#, c-format
+msgid "Corrupt DB: initial revision number is not '0' in filesystem '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:294
+msgid "Attempted to get entries of a non-directory node"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:461 ../libsvn_fs_fs/dag.c:372
+#, c-format
+msgid "Attempted to create a node with an illegal name '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:467 ../libsvn_fs_fs/dag.c:378
+msgid "Attempted to create entry in non-directory parent"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:473 ../libsvn_fs_base/dag.c:737
+#: ../libsvn_fs_fs/dag.c:384
+#, c-format
+msgid "Attempted to clone child of non-mutable node"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:480
+#, c-format
+msgid "Attempted to create entry that already exists"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:529 ../libsvn_fs_fs/dag.c:462
+msgid "Attempted to set entry in non-directory node"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:535 ../libsvn_fs_fs/dag.c:468
+msgid "Attempted to set entry in immutable node"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:602
+#, c-format
+msgid "Can't set proplist on *immutable* node-revision %s"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:743
+#, c-format
+msgid "Attempted to make a child clone with an illegal name '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:860
+#, c-format
+msgid "Attempted to delete entry '%s' from *non*-directory node"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:866
+#, c-format
+msgid "Attempted to delete entry '%s' from immutable directory node"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:873
+#, c-format
+msgid "Attempted to delete a node with an illegal name '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:888 ../libsvn_fs_base/dag.c:921
+#, c-format
+msgid "Delete failed: directory has no entry '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:970
+#, c-format
+msgid "Attempted removal of immutable node"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:1088
+#, c-format
+msgid "Attempted to get textual contents of a *non*-file node"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:1121
+#, c-format
+msgid "Attempted to get length of a *non*-file node"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:1148
+#, c-format
+msgid "Attempted to get checksum of a *non*-file node"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:1187 ../libsvn_fs_base/dag.c:1244
+#, c-format
+msgid "Attempted to set textual contents of a *non*-file node"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:1193 ../libsvn_fs_base/dag.c:1250
+#, c-format
+msgid "Attempted to set textual contents of an immutable node"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:1279 ../libsvn_fs_base/reps-strings.c:829
+#, c-format
+msgid "Checksum mismatch on representation '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:1373
+#, c-format
+msgid "Attempted to open non-existent child node '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:1379
+#, c-format
+msgid "Attempted to open node with an illegal name '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:1700
+#, c-format
+msgid "Attempted merge tracking info change on immutable node"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:1740
+#, c-format
+msgid "Attempted mergeinfo count change on immutable node"
+msgstr ""
+
+#: ../libsvn_fs_base/dag.c:1752
+#, c-format
+msgid "Invalid value (%%%s) for node revision mergeinfo count"
+msgstr ""
+
+#: ../libsvn_fs_base/err.c:46
+#, c-format
+msgid "Corrupt filesystem revision %ld in filesystem '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/err.c:57 ../libsvn_fs_fs/fs_fs.c:2268
+#, c-format
+msgid "Reference to non-existent node '%s' in filesystem '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/err.c:68
+#, c-format
+msgid "No such revision %ld in filesystem '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/err.c:80
+#, c-format
+msgid "Corrupt entry in 'transactions' table for '%s' in filesystem '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/err.c:91
+#, c-format
+msgid "Corrupt entry in 'copies' table for '%s' in filesystem '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/err.c:102
+#, c-format
+msgid "No transaction named '%s' in filesystem '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/err.c:113
+#, c-format
+msgid "Cannot modify transaction named '%s' in filesystem '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/err.c:124
+#, c-format
+msgid "No copy with id '%s' in filesystem '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/err.c:134
+#, c-format
+msgid "Token '%s' does not point to any existing lock in filesystem '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/err.c:144
+#, c-format
+msgid "No token given for path '%s' in filesystem '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/err.c:153
+#, c-format
+msgid "Corrupt lock in 'locks' table for '%s' in filesystem '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/err.c:163
+#, c-format
+msgid "No record in 'node-origins' table for node id '%s' in filesystem '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/err.c:173
+#, c-format
+msgid "No record in 'checksum-reps' table for checksum '%s' in filesystem '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:89
+#, c-format
+msgid "Bad database version: got %d.%d.%d, should be at least %d.%d.%d"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:100
+#, c-format
+msgid "Bad database version: compiled with %d.%d.%d, running against %d.%d.%d"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:190
+#, c-format
+msgid "Berkeley DB error for filesystem '%s' while closing environment:\n"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:553
+#, c-format
+msgid "Berkeley DB error for filesystem '%s' while creating environment:\n"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:559
+#, c-format
+msgid "Berkeley DB error for filesystem '%s' while opening environment:\n"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:574
+msgid "creating 'nodes' table"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:575
+msgid "opening 'nodes' table"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:580
+msgid "creating 'revisions' table"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:581
+msgid "opening 'revisions' table"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:586
+msgid "creating 'transactions' table"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:587
+msgid "opening 'transactions' table"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:592
+msgid "creating 'copies' table"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:593
+msgid "opening 'copies' table"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:598
+msgid "creating 'changes' table"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:599
+msgid "opening 'changes' table"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:604
+msgid "creating 'representations' table"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:605
+msgid "opening 'representations' table"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:610
+msgid "creating 'strings' table"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:611
+msgid "opening 'strings' table"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:616
+msgid "creating 'uuids' table"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:617
+msgid "opening 'uuids' table"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:622
+msgid "creating 'locks' table"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:623
+msgid "opening 'locks' table"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:628
+msgid "creating 'lock-tokens' table"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:629
+msgid "opening 'lock-tokens' table"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:637
+msgid "creating 'node-origins' table"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:638
+msgid "opening 'node-origins' table"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:647
+msgid "creating 'miscellaneous' table"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:648
+msgid "opening 'miscellaneous' table"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:657
+msgid "creating 'checksum-reps' table"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:658
+msgid "opening 'checksum-reps' table"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:730
+#, c-format
+msgid ""
+"The '%s' feature requires version %d of the filesystem schema; filesystem "
+"'%s' uses only version %d"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:749
+#, c-format
+msgid "Expected FS format '%d'; found format '%d'"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:1215
+#, c-format
+msgid "BDB repositories do not support incremental hotcopy"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:1319
+msgid ""
+"Error copying logfile; the DB_LOG_AUTOREMOVE feature\n"
+"may be interfering with the hotcopy algorithm. If\n"
+"the problem persists, try deactivating this feature\n"
+"in DB_CONFIG"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:1338
+msgid ""
+"Error running catastrophic recovery on hotcopy; the\n"
+"DB_LOG_AUTOREMOVE feature may be interfering with the\n"
+"hotcopy algorithm. If the problem persists, try deactivating\n"
+"this feature in DB_CONFIG"
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:1383
+msgid "Module for working with a Berkeley DB repository."
+msgstr ""
+
+#: ../libsvn_fs_base/fs.c:1430
+#, c-format
+msgid "Unsupported FS loader version (%d) for bdb"
+msgstr ""
+
+#: ../libsvn_fs_base/lock.c:108 ../libsvn_fs_base/lock.c:113
+#: ../libsvn_fs_fs/lock.c:786 ../libsvn_fs_fs/lock.c:791
+#: ../libsvn_fs_fs/lock.c:813
+#, c-format
+msgid "Path '%s' doesn't exist in HEAD revision"
+msgstr ""
+
+#: ../libsvn_fs_base/lock.c:540 ../libsvn_fs_fs/lock.c:682
+#, c-format
+msgid "Cannot verify lock on path '%s'; no username available"
+msgstr ""
+
+#: ../libsvn_fs_base/lock.c:546 ../libsvn_fs_fs/lock.c:688
+#, c-format
+msgid "User '%s' does not own lock on path '%s' (currently locked by '%s')"
+msgstr ""
+
+#: ../libsvn_fs_base/lock.c:552 ../libsvn_fs_fs/lock.c:694
+#, c-format
+msgid "Cannot verify lock on path '%s'; no matching lock-token available"
+msgstr ""
+
+#. Helper macro that evaluates to an error message indicating that
+#. the representation referred to by X has an unknown node kind.
+#: ../libsvn_fs_base/reps-strings.c:58
+#, c-format
+msgid "Unknown node kind for representation '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/reps-strings.c:110
+msgid "Representation is not of type 'delta'"
+msgstr ""
+
+#: ../libsvn_fs_base/reps-strings.c:380
+msgid "Svndiff source length inconsistency"
+msgstr ""
+
+#: ../libsvn_fs_base/reps-strings.c:506
+#, c-format
+msgid "Diff version inconsistencies in representation '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/reps-strings.c:532
+#, c-format
+msgid ""
+"Corruption detected whilst reading delta chain from representation '%s' to "
+"'%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/reps-strings.c:798
+#, c-format
+msgid "Rep contents are too large: got %s, limit is %s"
+msgstr ""
+
+#: ../libsvn_fs_base/reps-strings.c:814
+#, c-format
+msgid "Failure reading representation '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/reps-strings.c:924
+#, c-format
+msgid "MD5 checksum mismatch on representation '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/reps-strings.c:934
+#, c-format
+msgid "SHA1 checksum mismatch on representation '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/reps-strings.c:945
+msgid "Null rep, but offset past zero already"
+msgstr ""
+
+#: ../libsvn_fs_base/reps-strings.c:1062 ../libsvn_fs_base/reps-strings.c:1253
+#, c-format
+msgid "Rep '%s' is not mutable"
+msgstr ""
+
+#: ../libsvn_fs_base/reps-strings.c:1077
+#, c-format
+msgid "Rep '%s' both mutable and non-fulltext"
+msgstr ""
+
+#: ../libsvn_fs_base/reps-strings.c:1372
+msgid "Failed to get new string key"
+msgstr ""
+
+#: ../libsvn_fs_base/reps-strings.c:1449
+#, c-format
+msgid "Attempt to deltify '%s' against itself"
+msgstr ""
+
+#: ../libsvn_fs_base/reps-strings.c:1522
+#, c-format
+msgid "Failed to calculate MD5 digest for '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/revs-txns.c:72
+#, c-format
+msgid "Transaction is not dead: '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/revs-txns.c:75
+#, c-format
+msgid "Transaction is dead: '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/revs-txns.c:272 ../libsvn_fs_fs/fs_fs.c:9775
+#, c-format
+msgid "revprop '%s' has unexpected value in filesystem"
+msgstr ""
+
+#: ../libsvn_fs_base/revs-txns.c:1030
+msgid "Transaction aborted, but cleanup failed"
+msgstr ""
+
+#: ../libsvn_fs_base/trail.c:99
+msgid "beginning Berkeley DB transaction"
+msgstr ""
+
+#: ../libsvn_fs_base/trail.c:134
+msgid "aborting Berkeley DB transaction"
+msgstr ""
+
+#: ../libsvn_fs_base/trail.c:158
+msgid "committing Berkeley DB transaction"
+msgstr ""
+
+#: ../libsvn_fs_base/tree.c:772 ../libsvn_fs_fs/tree.c:949
+#, c-format
+msgid "Failure opening '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/tree.c:1403 ../libsvn_fs_fs/tree.c:1393
+msgid "Cannot compare property value between two different filesystems"
+msgstr ""
+
+#: ../libsvn_fs_base/tree.c:1849 ../libsvn_fs_base/tree.c:1919
+msgid "Corrupt DB: faulty predecessor count"
+msgstr ""
+
+#: ../libsvn_fs_base/tree.c:1976
+#, c-format
+msgid "Unexpected immutable node at '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/tree.c:1997 ../libsvn_fs_fs/tree.c:1423
+#: ../libsvn_repos/commit.c:1262
+#, c-format
+msgid "Conflict at '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/tree.c:2050 ../libsvn_fs_base/tree.c:2802
+#: ../libsvn_fs_fs/tree.c:1474 ../libsvn_fs_fs/tree.c:2011
+msgid "Bad merge; ancestor, source, and target not all in same fs"
+msgstr ""
+
+#: ../libsvn_fs_base/tree.c:2066 ../libsvn_fs_fs/tree.c:1490
+#, c-format
+msgid "Bad merge; target '%s' has id '%s', same as ancestor"
+msgstr ""
+
+#: ../libsvn_fs_base/tree.c:2610
+#, c-format
+msgid "Transaction '%s' out-of-date with respect to revision '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/tree.c:2886
+#, c-format
+msgid "Cannot deltify revisions prior to r%ld"
+msgstr ""
+
+#: ../libsvn_fs_base/tree.c:3004 ../libsvn_fs_fs/tree.c:2166
+msgid "The root directory cannot be deleted"
+msgstr ""
+
+#: ../libsvn_fs_base/tree.c:3217 ../libsvn_fs_fs/tree.c:2236
+#, c-format
+msgid "Cannot copy between two different filesystems ('%s' and '%s')"
+msgstr ""
+
+#: ../libsvn_fs_base/tree.c:3226 ../libsvn_fs_fs/tree.c:2242
+msgid "Copy from mutable tree not currently supported"
+msgstr ""
+
+#: ../libsvn_fs_base/tree.c:3736 ../libsvn_fs_fs/tree.c:2719
+#, c-format
+msgid "Base checksum mismatch on '%s'"
+msgstr ""
+
+#: ../libsvn_fs_base/tree.c:3969 ../libsvn_fs_fs/tree.c:2934
+msgid "Cannot compare file contents between two different filesystems"
+msgstr ""
+
+#: ../libsvn_fs_base/tree.c:5013 ../libsvn_fs_base/tree.c:5188
+#, c-format
+msgid "Node-revision '%s' claims to have mergeinfo but doesn't"
+msgstr ""
+
+#: ../libsvn_fs_base/tree.c:5049
+#, c-format
+msgid ""
+"Node-revision '%s' claims to sit atop a tree containing mergeinfo but is not "
+"a directory"
+msgstr ""
+
+#: ../libsvn_fs_fs/dag.c:426 ../libsvn_fs_fs/dag.c:442
+#: ../libsvn_ra_serf/serf.c:1038 ../libsvn_ra_serf/serf.c:1101
+msgid "Can't get entries of non-directory"
+msgstr ""
+
+#: ../libsvn_fs_fs/dag.c:551
+#, c-format
+msgid ""
+"Can't increment mergeinfo count on node-revision %%s to negative value %%%s"
+msgstr ""
+
+#: ../libsvn_fs_fs/dag.c:562
+#, c-format
+msgid ""
+"Can't increment mergeinfo count on *file* node-revision %%s to %%%s (> 1)"
+msgstr ""
+
+#: ../libsvn_fs_fs/dag.c:1134
+msgid "Empty noderev in cache"
+msgstr ""
+
+#: ../libsvn_fs_fs/dag.c:1326
+#, c-format
+msgid "Attempted to update ancestry of non-mutable node"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs.c:83
+#, c-format
+msgid "Can't fetch FSFS shared data"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs.c:110
+#, c-format
+msgid "Can't store FSFS shared data"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs.c:404
+msgid "Module for working with a plain file (FSFS) repository."
+msgstr ""
+
+#: ../libsvn_fs_fs/fs.c:454
+#, c-format
+msgid "Unsupported FS loader version (%d) for fsfs"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:727
+#, c-format
+msgid "Can't unlock unknown transaction '%s'"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:731
+#, c-format
+msgid "Can't unlock nonlocked transaction '%s'"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:738
+#, c-format
+msgid "Can't unlock prototype revision lockfile for transaction '%s'"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:744
+#, c-format
+msgid "Can't close prototype revision lockfile for transaction '%s'"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:806
+#, c-format
+msgid ""
+"Cannot write to the prototype revision file of transaction '%s' because a "
+"previous representation is currently being written by this process"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:842
+#, c-format
+msgid ""
+"Cannot write to the prototype revision file of transaction '%s' because a "
+"previous representation is currently being written by another process"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:849 ../libsvn_subr/io.c:2014
+#, c-format
+msgid "Can't get exclusive lock on file '%s'"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:968
+#, c-format
+msgid "%s file '%s' contains unexpected non-digit '%c' within '%s'"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:995
+#, c-format
+msgid ""
+"Found format '%d', only created by unreleased dev builds; see http://"
+"subversion.apache.org/docs/release-notes/1.7#revprop-packing"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:1006
+#, c-format
+msgid "Expected FS format between '1' and '%d'; found format '%d'"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:1052
+#, c-format
+msgid "Can't read first line of format file '%s'"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:1092
+#, c-format
+msgid "'%s' contains invalid filesystem format option '%s'"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:1582
+#, c-format
+msgid "'%s' is not a regular file. Please move it out of the way and try again"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:1753
+#, c-format
+msgid "Can't read '%s'"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:1816 ../libsvn_fs_fs/fs_fs.c:1835
+#, c-format
+msgid "Found malformed header '%s' in revision file"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:1871
+#, c-format
+msgid "Invalid revision number '%ld'"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:1886 ../libsvn_fs_fs/fs_fs.c:1941
+#: ../libsvn_fs_fs/fs_fs.c:1952 ../libsvn_repos/log.c:2268
+#: ../libsvn_repos/log.c:2272
+#, c-format
+msgid "No such revision %ld"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:1986
+msgid "Unexpected EOF"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:1993
+#, c-format
+msgid "Number '%s' invalid or too large"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:2160 ../libsvn_fs_fs/fs_fs.c:2174
+#: ../libsvn_fs_fs/fs_fs.c:2182 ../libsvn_fs_fs/fs_fs.c:2190
+#: ../libsvn_fs_fs/fs_fs.c:2199 ../libsvn_fs_fs/fs_fs.c:2212
+#: ../libsvn_fs_fs/fs_fs.c:2221
+msgid "Malformed text representation offset line in node-rev"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:2252
+#, c-format
+msgid "While reading representation offsets for node-revision '%s':"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:2407
+msgid "Missing id field in node-rev"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:2421
+#, c-format
+msgid "Missing kind field in node-rev '%s'"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:2456
+#, c-format
+msgid "Missing cpath field in node-rev '%s'"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:2484 ../libsvn_fs_fs/fs_fs.c:2491
+#, c-format
+msgid "Malformed copyroot line in node-rev '%s'"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:2508 ../libsvn_fs_fs/fs_fs.c:2515
+#, c-format
+msgid "Malformed copyfrom line in node-rev '%s'"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:2684 ../libsvn_fs_fs/fs_fs.c:7642
+#, c-format
+msgid "Attempted to write to non-transaction '%s'"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:2821
+#, c-format
+msgid "Malformed representation header at %s"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:2853
+#, c-format
+msgid "Missing node-id in node-rev at r%ld (offset %s)"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:2862
+#, c-format
+msgid "Corrupt node-id '%s' in node-rev at r%ld (offset %s)"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:2953
+#, c-format
+msgid "Revision file (r%ld) lacks trailing newline"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:2967
+#, c-format
+msgid "Final line in revision file (r%ld) longer than 64 characters"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:2982
+#, c-format
+msgid "Final line in revision file r%ld missing space"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:3686
+#, c-format
+msgid "Packed revprop manifest for r%ld too small"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:3743
+#, c-format
+msgid "Revprop pack for revision r%ld contains revprops for r%ld .. r%ld"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:3754
+#, c-format
+msgid "Revprop pack for revision r%ld starts at non-packed revisions r%ld"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:3763
+msgid "Header end not found"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:3791
+msgid "Packed revprop size exceeds pack file size"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:3850
+#, c-format
+msgid "No such packed revision %ld"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:3890
+#, c-format
+msgid "Failed to read revprop pack file for r%ld"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:3897
+#, c-format
+msgid "Revprop pack file for r%ld is corrupt"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:3970
+#, c-format
+msgid "Could not read revprops for revision %ld"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:4199
+#, c-format
+msgid "Packed file '%s' misses a tag"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:4537
+msgid "Malformed svndiff data in representation"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:4973 ../libsvn_fs_fs/fs_fs.c:4992
+msgid "Reading one svndiff window read beyond the end of the representation"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:5080
+msgid "svndiff window length is corrupt"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:5248
+msgid "Checksum mismatch while reading representation"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:5613 ../libsvn_fs_fs/fs_fs.c:5627
+#: ../libsvn_fs_fs/fs_fs.c:5634
+#, c-format
+msgid "Directory entry corrupt in '%s'"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:6112 ../libsvn_fs_fs/fs_fs.c:6117
+#: ../libsvn_fs_fs/fs_fs.c:6123 ../libsvn_fs_fs/fs_fs.c:6140
+#: ../libsvn_fs_fs/fs_fs.c:6173 ../libsvn_fs_fs/fs_fs.c:6193
+#: ../libsvn_fs_fs/fs_fs.c:6228 ../libsvn_fs_fs/fs_fs.c:6233
+msgid "Invalid changes line in rev-file"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:6166
+msgid "Invalid change kind in rev file"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:6186
+msgid "Invalid text-mod flag in rev-file"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:6206
+msgid "Invalid prop-mod flag in rev-file"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:6464
+msgid "Copying from transactions not allowed"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:6597
+#, c-format
+msgid "Unable to create transaction directory in '%s' for revision %ld"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:6662
+msgid "Internal error: a null transaction id was passed to get_txn_proplist()"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:6821 ../libsvn_fs_fs/fs_fs.c:6828
+msgid "next-id file corrupt"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:6924
+#, c-format
+msgid "Transaction '%s' cleanup failed"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:7069
+#, c-format
+msgid "Invalid change type %d"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:7662
+msgid "Can't set text contents of a directory"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:7748 ../libsvn_fs_fs/fs_fs.c:7753
+#: ../libsvn_fs_fs/fs_fs.c:7760
+msgid "Corrupt 'current' file"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:8020
+#, c-format
+msgid ""
+"predecessor count for the root node-revision is wrong: found (%d+%ld != %d), "
+"committing r%ld"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:8155
+msgid "Truncated protorev file detected"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:8555
+msgid "Transaction out of date"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:9054
+msgid "Recovery encountered a non-directory node"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:9076
+msgid "Recovery encountered a deltified directory representation"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:9114 ../libsvn_fs_fs/fs_fs.c:9123
+#: ../libsvn_fs_fs/fs_fs.c:9129
+msgid "Directory entry corrupt"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:9302
+#, c-format
+msgid "Expected current rev to be <= %ld but found %ld"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:9359
+#, c-format
+msgid "Revision %ld has a revs file but no revprops file"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:9366
+#, c-format
+msgid "Revision %ld has a revs file but the revprops file is inaccessible"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:9375
+#, c-format
+msgid "Revision %ld has a non-file where its revprops file should be"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:9553
+#, c-format
+msgid ""
+"Node origin for '%s' exists with a different value (%s) than what we were "
+"about to store (%s)"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:9659
+#, c-format
+msgid "No such transaction '%s'"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:10376
+#, c-format
+msgid "FSFS format (%d) too old to pack; please upgrade the filesystem."
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:10655 ../libsvn_subr/io.c:248
+#, c-format
+msgid "Error converting entry in directory '%s' to UTF-8"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:10692 ../libsvn_subr/io.c:1021
+#, c-format
+msgid "Source '%s' is not a directory"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:10698 ../libsvn_subr/io.c:1027
+#, c-format
+msgid "Destination '%s' is not a directory"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:10770 ../libsvn_subr/io.c:1104
+#: ../libsvn_subr/io.c:2492
+#, c-format
+msgid "Can't read directory '%s'"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:10775 ../libsvn_subr/io.c:1109
+#: ../libsvn_subr/io.c:2497 ../libsvn_subr/io.c:4002
+#, c-format
+msgid "Error closing directory '%s'"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:11067
+#, c-format
+msgid ""
+"The FSFS format (%d) of the hotcopy source does not match the FSFS format "
+"(%d) of the hotcopy destination; please upgrade both repositories to the "
+"same format"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:11076
+msgid ""
+"The UUID of the hotcopy source does not match the UUID of the hotcopy "
+"destination"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:11083
+msgid ""
+"The sharding layout configuration of the hotcopy source does not match the "
+"sharding layout configuration of the hotcopy destination"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:11209
+#, c-format
+msgid ""
+"Failed to create hotcopy at '%s'. The file '%s' is missing from the source "
+"repository. Please create this file, for instance by running 'svnadmin "
+"upgrade %s'"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:11235
+#, c-format
+msgid ""
+"The hotcopy destination already contains more revisions (%lu) than the "
+"hotcopy source contains (%lu); are source and destination swapped?"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:11271
+#, c-format
+msgid ""
+"The hotcopy destination already contains more packed revisions (%lu) than "
+"the hotcopy source contains (%lu)"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:11386
+#, c-format
+msgid ""
+"The assumed HEAD revision (%lu) of the hotcopy source has been packed while "
+"the hotcopy was in progress; please restart the hotcopy operation"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:11401
+#, c-format
+msgid ""
+"Revision %lu disappeared from the hotcopy source while hotcopy was in "
+"progress"
+msgstr ""
+
+#: ../libsvn_fs_fs/lock.c:120
+#, c-format
+msgid "Corrupt lockfile for path '%s' in filesystem '%s'"
+msgstr ""
+
+#: ../libsvn_fs_fs/lock.c:228
+#, c-format
+msgid "Cannot write lock/entries hashfile '%s'"
+msgstr ""
+
+#: ../libsvn_fs_fs/lock.c:280
+#, c-format
+msgid "Can't parse lock/entries hashfile '%s'"
+msgstr ""
+
+#: ../libsvn_fs_fs/lock.c:818
+#, c-format
+msgid "Lock failed: newer version of '%s' exists"
+msgstr ""
+
+#: ../libsvn_fs_fs/rep-cache.c:138
+msgid "Couldn't open rep-cache database"
+msgstr ""
+
+#: ../libsvn_fs_fs/rep-cache.c:267 ../libsvn_fs_fs/rep-cache.c:312
+msgid "Only SHA1 checksums can be used as keys in the rep_cache table.\n"
+msgstr ""
+
+#: ../libsvn_fs_fs/rep-cache.c:348
+#, c-format
+msgid ""
+"Representation key for checksum '%%s' exists in filesystem '%%s' with a "
+"different value (%%ld,%%%s,%%%s,%%%s) than what we were about to store (%%ld,"
+"%%%s,%%%s,%%%s)"
+msgstr ""
+
+#: ../libsvn_fs_fs/tree.c:2086 ../libsvn_subr/path.c:1233
+#, c-format
+msgid "Invalid control character '0x%02x' in path '%s'"
+msgstr ""
+
+#: ../libsvn_fs_fs/tree.c:3685
+#, c-format
+msgid "Node-revision #'%s' claims to have mergeinfo but doesn't"
+msgstr ""
+
+#: ../libsvn_fs_fs/tree.c:3801
+#, c-format
+msgid "Node-revision '%s@%ld' claims to have mergeinfo but doesn't"
+msgstr ""
+
+#: ../libsvn_fs_fs/tree.c:4001
+#, c-format
+msgid ""
+"Querying mergeinfo requires version %d of the FSFS filesystem schema; "
+"filesystem '%s' uses only version %d"
+msgstr ""
+
+#: ../libsvn_fs_util/fs-util.c:154
+msgid "Filesystem object has not been opened yet"
+msgstr ""
+
+#: ../libsvn_fs_util/fs-util.c:157
+msgid "Filesystem object already open"
+msgstr ""
+
+#: ../libsvn_ra/compat.c:182
+#, c-format
+msgid "Missing changed-path information for '%s' in revision %ld"
+msgstr ""
+
+#: ../libsvn_ra/compat.c:326 ../libsvn_ra/compat.c:570
+#, c-format
+msgid "Path '%s' doesn't exist in revision %ld"
+msgstr ""
+
+#: ../libsvn_ra/compat.c:403
+#, c-format
+msgid "'%s' in revision %ld is an unrelated object"
+msgstr ""
+
+#: ../libsvn_ra/compat.c:843 ../libsvn_ra/ra_loader.c:1291
+#, c-format
+msgid "Invalid peg revision %ld"
+msgstr ""
+
+#: ../libsvn_ra/compat.c:846 ../libsvn_ra/ra_loader.c:1294
+#: ../libsvn_repos/rev_hunt.c:214 ../libsvn_repos/rev_hunt.c:329
+#, c-format
+msgid "Invalid end revision %ld"
+msgstr ""
+
+#: ../libsvn_ra/compat.c:849 ../libsvn_ra/ra_loader.c:1297
+msgid "Peg revision must precede end revision"
+msgstr ""
+
+#: ../libsvn_ra/ra_loader.c:215
+#, c-format
+msgid "Mismatched RA version for '%s': found %d.%d.%d%s, expected %d.%d.%d%s"
+msgstr ""
+
+#: ../libsvn_ra/ra_loader.c:292 ../libsvn_ra_serf/serf.c:594
+#, c-format
+msgid "Illegal repository URL '%s'"
+msgstr ""
+
+#: ../libsvn_ra/ra_loader.c:399
+#, c-format
+msgid "Invalid config: unknown HTTP library '%s'"
+msgstr ""
+
+#: ../libsvn_ra/ra_loader.c:468
+#, c-format
+msgid "Unrecognized URL scheme for '%s'"
+msgstr ""
+
+#: ../libsvn_ra/ra_loader.c:519
+#, c-format
+msgid "Repository UUID '%s' doesn't match expected UUID '%s'"
+msgstr ""
+
+#: ../libsvn_ra/ra_loader.c:540
+#, c-format
+msgid "'%s' isn't in the same repository as '%s'"
+msgstr ""
+
+#: ../libsvn_ra/ra_loader.c:564
+#, c-format
+msgid "'%s' isn't a child of session URL '%s'"
+msgstr ""
+
+#: ../libsvn_ra/ra_loader.c:580 ../libsvn_ra_svn/client.c:2465
+#, c-format
+msgid "'%s' isn't a child of repository root URL '%s'"
+msgstr ""
+
+#: ../libsvn_ra/ra_loader.c:624
+#, c-format
+msgid ""
+"Specifying 'old_value_p' is not allowed when the '%s' capability is not "
+"advertised, and could indicate a bug in your client"
+msgstr ""
+
+#: ../libsvn_ra/ra_loader.c:1445
+#, c-format
+msgid " - handles '%s' scheme\n"
+msgstr ""
+
+#: ../libsvn_ra/ra_loader.c:1538
+#, c-format
+msgid "Unrecognized URL scheme '%s'"
+msgstr ""
+
+#: ../libsvn_ra/util.c:55
+msgid "<repository>"
+msgstr ""
+
+#: ../libsvn_ra/util.c:73
+#, c-format
+msgid "Retrieval of mergeinfo unsupported by '%s'"
+msgstr ""
+
+#: ../libsvn_ra/util.c:99
+#, c-format
+msgid "The '%s' feature is not supported by '%s'"
+msgstr ""
+
+#: ../libsvn_ra/util.c:142
+#, c-format
+msgid "Lock was stolen by '%s'; unable to remove it"
+msgstr ""
+
+#: ../libsvn_ra/util.c:183
+#, c-format
+msgid "Unable to determine local hostname"
+msgstr ""
+
+#: ../libsvn_ra/util.c:278
+#, c-format
+msgid "Couldn't get lock on destination repos after %d attempts"
+msgstr ""
+
+#: ../libsvn_ra_local/ra_plugin.c:162
+msgid "memory-cache-size invalid"
+msgstr ""
+
+#. ----------------------------------------------------------------
+#. ** The RA vtable routines **
+#: ../libsvn_ra_local/ra_plugin.c:503
+msgid "Module for accessing a repository on local disk."
+msgstr ""
+
+#: ../libsvn_ra_local/ra_plugin.c:579
+msgid "Unable to open an ra_local session to URL"
+msgstr ""
+
+#: ../libsvn_ra_local/ra_plugin.c:612 ../libsvn_ra_serf/serf.c:586
+#, c-format
+msgid "URL '%s' is not a child of the session's repository root URL '%s'"
+msgstr ""
+
+#: ../libsvn_ra_local/ra_plugin.c:1140 ../libsvn_ra_local/ra_plugin.c:1597
+#: ../libsvn_ra_serf/util.c:2604
+#, c-format
+msgid "'%s' path not found"
+msgstr ""
+
+#: ../libsvn_ra_local/ra_plugin.c:1539 ../libsvn_ra_serf/options.c:678
+#: ../libsvn_ra_svn/client.c:2666
+#, c-format
+msgid "Don't know anything about capability '%s'"
+msgstr ""
+
+#: ../libsvn_ra_local/ra_plugin.c:1745
+#, c-format
+msgid "Unsupported RA loader version (%d) for ra_local"
+msgstr ""
+
+#: ../libsvn_ra_local/split_url.c:50 ../libsvn_ra_local/split_url.c:56
+#, c-format
+msgid "Unable to open repository '%s'"
+msgstr ""
+
+#: ../libsvn_ra_serf/commit.c:215
+#, c-format
+msgid "%s of '%s': %d %s"
+msgstr ""
+
+#: ../libsvn_ra_serf/commit.c:315
+msgid "No Location header received"
+msgstr ""
+
+#: ../libsvn_ra_serf/commit.c:325
+msgid "Error parsing Location header value"
+msgstr ""
+
+#: ../libsvn_ra_serf/commit.c:435
+#, c-format
+msgid "Directory '%s' is out of date; try updating"
+msgstr ""
+
+#: ../libsvn_ra_serf/commit.c:523 ../libsvn_repos/commit.c:512
+#, c-format
+msgid "Path '%s' not present"
+msgstr ""
+
+#: ../libsvn_ra_serf/commit.c:573
+#, c-format
+msgid "File '%s' is out of date; try updating"
+msgstr ""
+
+#: ../libsvn_ra_serf/commit.c:975
+msgid "At least one property change failed; repository is unchanged"
+msgstr ""
+
+#: ../libsvn_ra_serf/commit.c:1233
+#, c-format
+msgid "Failed writing updated file"
+msgstr ""
+
+#: ../libsvn_ra_serf/commit.c:1421 ../libsvn_ra_serf/commit.c:1511
+#, c-format
+msgid "%s of '%s': %d %s (%s://%s)"
+msgstr ""
+
+#: ../libsvn_ra_serf/commit.c:1431
+#, c-format
+msgid "POST request did not return transaction information"
+msgstr ""
+
+#: ../libsvn_ra_serf/commit.c:1475
+msgid ""
+"The OPTIONS response did not include the requested activity-collection-set "
+"value"
+msgstr ""
+
+#: ../libsvn_ra_serf/commit.c:1718 ../libsvn_ra_serf/commit.c:2127
+#: ../libsvn_ra_serf/update.c:2619
+#, c-format
+msgid "Unable to parse URL '%s'"
+msgstr ""
+
+#: ../libsvn_ra_serf/commit.c:1746 ../libsvn_ra_serf/util.c:2600
+#, c-format
+msgid "Access to '%s' forbidden"
+msgstr ""
+
+#: ../libsvn_ra_serf/commit.c:1750
+#, c-format
+msgid "Adding directory failed: %s on %s (%d %s)"
+msgstr ""
+
+#: ../libsvn_ra_serf/commit.c:1979
+#, c-format
+msgid "File '%s' already exists"
+msgstr ""
+
+#: ../libsvn_ra_serf/commit.c:2251
+#, c-format
+msgid "MERGE request failed: returned %d (during commit)"
+msgstr ""
+
+#: ../libsvn_ra_serf/commit.c:2333
+#, c-format
+msgid "DELETE returned unexpected status: %d"
+msgstr ""
+
+#: ../libsvn_ra_serf/commit.c:2527
+msgid ""
+"DAV request failed; it's possible that the repository's pre-revprop-change "
+"hook either failed or is non-existent"
+msgstr ""
+
+#: ../libsvn_ra_serf/get_deleted_rev.c:173
+#, c-format
+msgid "'%s' REPORT not implemented"
+msgstr ""
+
+#: ../libsvn_ra_serf/inherited_props.c:171 ../libsvn_ra_serf/property.c:279
+#: ../libsvn_ra_serf/update.c:2468
+#, c-format
+msgid "Got unrecognized encoding '%s'"
+msgstr ""
+
+#: ../libsvn_ra_serf/locks.c:171
+#, c-format
+msgid "Invalid LOCK timeout value '%s'"
+msgstr ""
+
+#: ../libsvn_ra_serf/locks.c:243
+#, c-format
+msgid "Lock request failed: %d %s"
+msgstr ""
+
+#: ../libsvn_ra_serf/locks.c:424
+msgid "Malformed URL for repository"
+msgstr ""
+
+#: ../libsvn_ra_serf/locks.c:430
+msgid "Server does not support locking features"
+msgstr ""
+
+#: ../libsvn_ra_serf/locks.c:596
+#, c-format
+msgid "'%s' is not locked in the repository"
+msgstr ""
+
+#: ../libsvn_ra_serf/locks.c:647 ../libsvn_ra_serf/locks.c:653
+#, c-format
+msgid "Unlock request failed: %d %s"
+msgstr ""
+
+#: ../libsvn_ra_serf/log.c:169
+#, c-format
+msgid "Unsupported encoding '%s'"
+msgstr ""
+
+#: ../libsvn_ra_serf/log.c:568 ../libsvn_ra_svn/client.c:1577
+msgid "Server does not support custom revprops via log"
+msgstr ""
+
+#: ../libsvn_ra_serf/merge.c:200
+#, c-format
+msgid "A MERGE response for '%s' is not a child of the destination ('%s')"
+msgstr ""
+
+#: ../libsvn_ra_serf/options.c:661
+#, c-format
+msgid "Don't know how to handle '%s' for capability '%s'"
+msgstr ""
+
+#: ../libsvn_ra_serf/options.c:685
+#, c-format
+msgid "Attempt to fetch capability '%s' resulted in '%s'"
+msgstr ""
+
+#: ../libsvn_ra_serf/property.c:700
+msgid "The PROPFIND response did not include the requested properties"
+msgstr ""
+
+#: ../libsvn_ra_serf/property.c:993
+msgid ""
+"The PROPFIND response did not include the requested baseline-collection value"
+msgstr ""
+
+#: ../libsvn_ra_serf/property.c:1005
+msgid "The PROPFIND response did not include the requested version-name value"
+msgstr ""
+
+#: ../libsvn_ra_serf/property.c:1043
+msgid "The OPTIONS response did not include the requested checked-in value"
+msgstr ""
+
+#: ../libsvn_ra_serf/property.c:1125
+msgid "The OPTIONS response did not include the youngest revision"
+msgstr ""
+
+#: ../libsvn_ra_serf/property.c:1218
+msgid "The PROPFIND response did not include the requested resourcetype value"
+msgstr ""
+
+#: ../libsvn_ra_serf/property.c:1253
+msgid "The PROPFIND response did not include the requested 'DAV:' properties"
+msgstr ""
+
+#: ../libsvn_ra_serf/replay.c:222 ../libsvn_ra_serf/update.c:1657
+msgid "Missing revision attr in target-revision element"
+msgstr ""
+
+#: ../libsvn_ra_serf/replay.c:240
+msgid "Missing revision attr in open-root element"
+msgstr ""
+
+#: ../libsvn_ra_serf/replay.c:260 ../libsvn_ra_serf/update.c:1885
+msgid "Missing name attr in delete-entry element"
+msgstr ""
+
+#: ../libsvn_ra_serf/replay.c:266
+msgid "Missing revision attr in delete-entry element"
+msgstr ""
+
+#: ../libsvn_ra_serf/replay.c:286 ../libsvn_ra_serf/update.c:1724
+msgid "Missing name attr in open-directory element"
+msgstr ""
+
+#: ../libsvn_ra_serf/replay.c:292 ../libsvn_ra_serf/update.c:1675
+#: ../libsvn_ra_serf/update.c:1715
+msgid "Missing revision attr in open-directory element"
+msgstr ""
+
+#: ../libsvn_ra_serf/replay.c:312 ../libsvn_ra_serf/update.c:1762
+msgid "Missing name attr in add-directory element"
+msgstr ""
+
+#: ../libsvn_ra_serf/replay.c:349 ../libsvn_ra_serf/update.c:1806
+msgid "Missing name attr in open-file element"
+msgstr ""
+
+#: ../libsvn_ra_serf/replay.c:355 ../libsvn_ra_serf/update.c:1815
+msgid "Missing revision attr in open-file element"
+msgstr ""
+
+#: ../libsvn_ra_serf/replay.c:375 ../libsvn_ra_serf/update.c:1840
+msgid "Missing name attr in add-file element"
+msgstr ""
+
+#: ../libsvn_ra_serf/replay.c:443 ../libsvn_ra_serf/update.c:1981
+#: ../libsvn_ra_serf/update.c:2068
+#, c-format
+msgid "Missing name attr in %s element"
+msgstr ""
+
+#: ../libsvn_ra_serf/replay.c:578
+msgid "Error writing stream: unexpected EOF"
+msgstr ""
+
+#: ../libsvn_ra_serf/sb_bucket.c:65
+msgid "Failed to read the request"
+msgstr ""
+
+#: ../libsvn_ra_serf/serf.c:62
+msgid "Module for accessing a repository via WebDAV protocol using serf."
+msgstr ""
+
+#: ../libsvn_ra_serf/serf.c:65
+#, c-format
+msgid ""
+"Module for accessing a repository via WebDAV protocol using serf.\n"
+" - using serf %d.%d.%d"
+msgstr ""
+
+#: ../libsvn_ra_serf/serf.c:129
+#, c-format
+msgid "Invalid config: unknown %s '%s'"
+msgstr ""
+
+#: ../libsvn_ra_serf/serf.c:327
+msgid "Invalid config: illegal character in timeout value"
+msgstr ""
+
+#: ../libsvn_ra_serf/serf.c:331
+msgid "Invalid config: negative timeout value"
+msgstr ""
+
+#: ../libsvn_ra_serf/serf.c:344
+msgid "Invalid URL: illegal character in proxy port number"
+msgstr ""
+
+#: ../libsvn_ra_serf/serf.c:348
+msgid "Invalid URL: negative proxy port number"
+msgstr ""
+
+#: ../libsvn_ra_serf/serf.c:351
+msgid ""
+"Invalid URL: proxy port number greater than maximum TCP port number 65535"
+msgstr ""
+
+#: ../libsvn_ra_serf/serf.c:371
+#, c-format
+msgid "Could not resolve proxy server '%s'"
+msgstr ""
+
+#: ../libsvn_ra_serf/serf.c:474
+#, c-format
+msgid "Illegal URL '%s'"
+msgstr ""
+
+#: ../libsvn_ra_serf/serf.c:546
+#, c-format
+msgid "Connection to '%s' failed"
+msgstr ""
+
+#: ../libsvn_ra_serf/serf.c:1216
+msgid "The UUID property was not found on the resource or any of its parents"
+msgstr ""
+
+#: ../libsvn_ra_serf/serf.c:1290
+#, c-format
+msgid "Unsupported RA loader version (%d) for ra_serf"
+msgstr ""
+
+#: ../libsvn_ra_serf/serf.c:1304
+#, c-format
+msgid ""
+"ra_serf was compiled for serf %d.%d.%d but loaded an incompatible %d.%d.%d "
+"library"
+msgstr ""
+
+#: ../libsvn_ra_serf/update.c:1115
+#, c-format
+msgid "GET request returned unexpected delta base: %s"
+msgstr ""
+
+#: ../libsvn_ra_serf/update.c:1133
+#, c-format
+msgid "GET request failed: %d %s"
+msgstr ""
+
+#: ../libsvn_ra_serf/update.c:1919
+msgid "Missing name attr in absent-directory element"
+msgstr ""
+
+#: ../libsvn_ra_serf/update.c:1944
+msgid "Missing name attr in absent-file element"
+msgstr ""
+
+#: ../libsvn_ra_serf/update.c:2012 ../libsvn_ra_serf/update.c:2119
+#, c-format
+msgid "Unknown tag '%s' while at state %d"
+msgstr ""
+
+#: ../libsvn_ra_serf/update.c:2187 ../libsvn_ra_serf/update.c:2309
+#: ../libsvn_ra_serf/update.c:2346
+msgid ""
+"The REPORT or PROPFIND response did not include the requested checked-in "
+"value"
+msgstr ""
+
+#: ../libsvn_ra_serf/update.c:2528
+#, c-format
+msgid "Error writing to '%s': unexpected EOF"
+msgstr ""
+
+#: ../libsvn_ra_serf/update.c:2884
+msgid "Error retrieving REPORT"
+msgstr ""
+
+#: ../libsvn_ra_serf/update.c:3093
+msgid "Missing update-report close tag"
+msgstr ""
+
+#: ../libsvn_ra_serf/update.c:3562
+msgid "Can't get text contents of a directory"
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:249
+msgid ": "
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:251
+msgid ", "
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:462
+msgid "Server SSL certificate verification failed"
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:467
+msgid "certificate is not yet valid"
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:470
+msgid "certificate has expired"
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:474
+msgid "certificate issued for a different hostname"
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:478
+msgid "issuer is not trusted"
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:481
+msgid "and other reason(s)"
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:528
+#, c-format
+msgid "Invalid config: unable to load certificate file '%s'"
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:960 ../libsvn_ra_serf/util.c:963
+msgid "Error running context"
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:1297 ../libsvn_ra_serf/util.c:1302
+#, c-format
+msgid "Malformed DAV:status CDATA '%s'"
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:1599 ../libsvn_ra_serf/util.c:1702
+#, c-format
+msgid "XML parsing failed"
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:1602
+#, c-format
+msgid "XML parsing failed: (%d %s)"
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:1889
+msgid "The XML response contains invalid XML"
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:1954
+msgid ""
+"No more credentials or we tried too many times.\n"
+"Authentication failed"
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:1976
+msgid "Proxy authentication failed"
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:2029
+#, c-format
+msgid "%s request on '%s' failed"
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:2101
+#, c-format
+msgid "Premature EOF seen from server (http status=%d)"
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:2170
+#, c-format
+msgid "%s request on '%s' failed: %d %s"
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:2492
+msgid ""
+"The PROPFIND response did not include the requested version-controlled-"
+"configuration value"
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:2594
+#, c-format
+msgid "Repository moved permanently to '%s'; please relocate"
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:2596
+#, c-format
+msgid "Repository moved temporarily to '%s'; please relocate"
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:2607
+#, c-format
+msgid "'%s': no lock token available"
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:2611
+#, c-format
+msgid ""
+"DAV request failed: 411 Content length required. The server or an "
+"intermediate proxy does not accept chunked encoding. Try setting 'http-"
+"chunked-requests' to 'auto' or 'no' in your client configuration."
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:2617
+#, c-format
+msgid "The requested feature is not supported by '%s'"
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:2623
+#, c-format
+msgid "Unexpected HTTP status %d '%s' on '%s'\n"
+msgstr ""
+
+#: ../libsvn_ra_serf/util.c:2767
+#, c-format
+msgid "The %s response contains invalid XML (%d %s)"
+msgstr ""
+
+#: ../libsvn_ra_serf/xml.c:622
+#, c-format
+msgid "XML Parsing failed: Unexpected root element '%s'"
+msgstr ""
+
+#: ../libsvn_ra_serf/xml.c:682
+#, c-format
+msgid "Missing XML attribute: '%s'"
+msgstr ""
+
+#: ../libsvn_ra_serf/xml.c:757
+msgid "The response contains invalid XML"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:142
+#, c-format
+msgid "Unknown hostname '%s'"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:167
+#, c-format
+msgid "Can't connect to host '%s'"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:205
+msgid "Prop diffs element not a list"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:403
+#, c-format
+msgid "Undefined tunnel scheme '%s'"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:420
+#, c-format
+msgid "Tunnel scheme %s requires environment variable %s to be defined"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:431
+#, c-format
+msgid "Can't tokenize command '%s'"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:464
+#, c-format
+msgid "Error in child process: %s"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:539
+msgid ""
+"To better debug SSH connection problems, remove the -q option from 'ssh' in "
+"the [tunnels] section of your Subversion configuration file."
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:557
+#, c-format
+msgid "Illegal svn repository URL '%s'"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:637
+#, c-format
+msgid "Server requires minimum version %d"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:641
+#, c-format
+msgid "Server only supports versions up to %d"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:649
+msgid "Server does not support edit pipelining"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:686
+msgid "Impossibly long repository root from server"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:698
+msgid ""
+"Module for accessing a repository using the svn network protocol.\n"
+" - with Cyrus SASL authentication"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:702
+msgid "Module for accessing a repository using the svn network protocol."
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:912
+msgid "Server did not send repository root"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:985
+#, c-format
+msgid ""
+"ra_svn does not support not specifying a log message with pre-1.5 servers; "
+"consider passing an empty one, or upgrading the server"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:1008
+msgid ""
+"Server doesn't support setting arbitrary revision properties during commit"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:1111
+msgid "Inherited proplist element not a list"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:1186
+msgid "Non-string as part of file contents"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:1272
+msgid "Dirlist element not a list"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:1357
+msgid "Mergeinfo element is not a list"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:1565
+msgid "Log entry not a list"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:1612
+msgid "Changed-path entry not a list"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:1778
+msgid "'stat' not implemented"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:1837
+msgid "'get-locations' not implemented"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:1852
+msgid "Location entry not a list"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:1891
+msgid "'get-location-segments' not implemented"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:1908
+msgid "Location segment entry not a list"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:1918
+msgid "Expected valid revision range"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:1959
+msgid "'get-file-revs' not implemented"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:1983
+msgid "Revision entry not a list"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:2000 ../libsvn_ra_svn/client.c:2030
+msgid "Text delta chunk not a string"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:2042
+msgid "The get-file-revs command didn't return any revisions"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:2089
+msgid "Server doesn't support the lock command"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:2153
+msgid "Server doesn't support the unlock command"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:2251
+msgid "Lock response not a list"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:2265
+msgid "Unknown status for lock command"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:2289
+msgid "Didn't receive end marker for lock responses"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:2379
+msgid "Unlock response not a list"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:2393
+msgid "Unknown status for unlock command"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:2416
+msgid "Didn't receive end marker for unlock responses"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:2440 ../libsvn_ra_svn/client.c:2492
+msgid "Server doesn't support the get-lock command"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:2506
+msgid "Lock element not a list"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:2549
+msgid "Server doesn't support the replay command"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:2580
+msgid "Server doesn't support the replay-range command"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:2598
+#, c-format
+msgid "Expected 'revprops', found '%s'"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:2615
+msgid "Error while replaying commit"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:2688
+msgid "'get-deleted-rev' not implemented"
+msgstr ""
+
+#: ../libsvn_ra_svn/client.c:2787
+#, c-format
+msgid "Unsupported RA loader version (%d) for ra_svn"
+msgstr ""
+
+#: ../libsvn_ra_svn/cram.c:199 ../libsvn_ra_svn/cram.c:217
+#: ../libsvn_ra_svn/cyrus_auth.c:526 ../libsvn_ra_svn/cyrus_auth.c:582
+#: ../libsvn_ra_svn/internal_auth.c:66
+msgid "Unexpected server response to authentication"
+msgstr ""
+
+#: ../libsvn_ra_svn/cyrus_auth.c:225
+#, c-format
+msgid "SASL authentication error: %s%s"
+msgstr ""
+
+#: ../libsvn_ra_svn/cyrus_auth.c:242
+#, c-format
+msgid "Could not initialized the SASL library: %s%s"
+msgstr ""
+
+#: ../libsvn_ra_svn/cyrus_auth.c:415
+#, c-format
+msgid "Could not create SASL context: %s%s"
+msgstr ""
+
+#: ../libsvn_ra_svn/cyrus_auth.c:921 ../libsvn_ra_svn/internal_auth.c:63
+#: ../libsvn_ra_svn/internal_auth.c:114
+#, c-format
+msgid "Authentication error from server: %s"
+msgstr ""
+
+#: ../libsvn_ra_svn/cyrus_auth.c:925
+msgid "Can't get username or password"
+msgstr ""
+
+#: ../libsvn_ra_svn/editorp.c:145
+msgid "Successful edit status returned too soon"
+msgstr ""
+
+#: ../libsvn_ra_svn/editorp.c:487
+msgid "Invalid file or dir token during edit"
+msgstr ""
+
+#: ../libsvn_ra_svn/editorp.c:715
+msgid "Apply-textdelta already active"
+msgstr ""
+
+#: ../libsvn_ra_svn/editorp.c:737 ../libsvn_ra_svn/editorp.c:755
+msgid "Apply-textdelta not active"
+msgstr ""
+
+#: ../libsvn_ra_svn/editorp.c:850
+#, c-format
+msgid "Command 'finish-replay' invalid outside of replays"
+msgstr ""
+
+#: ../libsvn_ra_svn/editorp.c:954 ../libsvn_ra_svn/marshal.c:1498
+#, c-format
+msgid "Unknown editor command '%s'"
+msgstr ""
+
+#: ../libsvn_ra_svn/internal_auth.c:101
+msgid "Can't get password"
+msgstr ""
+
+#: ../libsvn_ra_svn/marshal.c:151
+msgid "Capability entry is not a word"
+msgstr ""
+
+#: ../libsvn_ra_svn/marshal.c:941
+msgid "String length larger than maximum"
+msgstr ""
+
+#: ../libsvn_ra_svn/marshal.c:1007
+msgid "Too many nested items"
+msgstr ""
+
+#: ../libsvn_ra_svn/marshal.c:1027 ../libsvn_ra_svn/marshal.c:1105
+msgid "Number is larger than maximum"
+msgstr ""
+
+#: ../libsvn_ra_svn/marshal.c:1133
+msgid "Word too long"
+msgstr ""
+
+#: ../libsvn_ra_svn/marshal.c:1351
+msgid "Proplist element not a list"
+msgstr ""
+
+#: ../libsvn_ra_svn/marshal.c:1390
+msgid "Empty error list"
+msgstr ""
+
+#: ../libsvn_ra_svn/marshal.c:1399 ../libsvn_ra_svn/marshal.c:1425
+msgid "Malformed error list"
+msgstr ""
+
+#: ../libsvn_ra_svn/marshal.c:1454
+#, c-format
+msgid "Unknown status '%s' in command response"
+msgstr ""
+
+#: ../libsvn_ra_svn/streams.c:78 ../libsvn_ra_svn/streams.c:157
+#, c-format
+msgid "Can't read from connection"
+msgstr ""
+
+#: ../libsvn_ra_svn/streams.c:91 ../libsvn_ra_svn/streams.c:170
+#, c-format
+msgid "Can't write to connection"
+msgstr ""
+
+#: ../libsvn_ra_svn/streams.c:144
+#, c-format
+msgid "Can't get socket timeout"
+msgstr ""
+
+#: ../libsvn_repos/commit.c:170
+#, c-format
+msgid "'%s' is out of date"
+msgstr ""
+
+#: ../libsvn_repos/commit.c:291
+#, c-format
+msgid "Got source path but no source revision for '%s'"
+msgstr ""
+
+#: ../libsvn_repos/commit.c:324
+#, c-format
+msgid "Source url '%s' is from different repository"
+msgstr ""
+
+#: ../libsvn_repos/commit.c:640
+#, c-format
+msgid ""
+"Checksum mismatch for resulting fulltext\n"
+"(%s)"
+msgstr ""
+
+#: ../libsvn_repos/commit.c:685
+msgid "(no error)"
+msgstr ""
+
+#: ../libsvn_repos/commit.c:716 ../libsvn_repos/commit.c:722
+msgid "post-commit hook failed with no error message."
+msgstr ""
+
+#: ../libsvn_repos/commit.c:725
+#, c-format
+msgid ""
+"post commit FS processing had error:\n"
+"%s\n"
+"%s"
+msgstr ""
+
+#: ../libsvn_repos/commit.c:726 ../libsvn_repos/commit.c:735
+msgid "(no error message)"
+msgstr ""
+
+#: ../libsvn_repos/commit.c:733
+#, c-format
+msgid ""
+"post commit FS processing had error:\n"
+"%s"
+msgstr ""
+
+#: ../libsvn_repos/commit.c:1273 ../libsvn_repos/fs-wrap.c:98
+#: ../libsvn_repos/load-fs-vtable.c:1046
+msgid "Commit succeeded, but post-commit hook failed"
+msgstr ""
+
+#: ../libsvn_repos/delta.c:192
+msgid "Unable to open root of edit"
+msgstr ""
+
+#: ../libsvn_repos/delta.c:247
+msgid "Invalid target path"
+msgstr ""
+
+#: ../libsvn_repos/delta.c:251
+msgid "Delta depth 'exclude' not supported"
+msgstr ""
+
+#: ../libsvn_repos/delta.c:277
+msgid ""
+"Invalid editor anchoring; at least one of the input paths is not a directory "
+"and there was no source entry"
+msgstr ""
+
+#: ../libsvn_repos/deprecated.c:614 ../svnadmin/svnadmin.c:780
+#, c-format
+msgid "* Dumped revision %ld.\n"
+msgstr ""
+
+#: ../libsvn_repos/deprecated.c:620 ../svnadmin/svnadmin.c:786
+#, c-format
+msgid "* Verified revision %ld.\n"
+msgstr ""
+
+#: ../libsvn_repos/deprecated.c:628 ../svnadmin/svnadmin.c:834
+#, c-format
+msgid ""
+"\n"
+"------- Committed revision %ld >>>\n"
+"\n"
+msgstr ""
+
+#: ../libsvn_repos/deprecated.c:634 ../svnadmin/svnadmin.c:840
+#, c-format
+msgid ""
+"\n"
+"------- Committed new rev %ld (loaded from original rev %ld) >>>\n"
+"\n"
+msgstr ""
+
+#: ../libsvn_repos/deprecated.c:647 ../svnadmin/svnadmin.c:853
+#, c-format
+msgid " * editing path : %s ..."
+msgstr ""
+
+#: ../libsvn_repos/deprecated.c:653 ../svnadmin/svnadmin.c:859
+#, c-format
+msgid " * deleting path : %s ..."
+msgstr ""
+
+#: ../libsvn_repos/deprecated.c:659 ../svnadmin/svnadmin.c:865
+#, c-format
+msgid " * adding path : %s ..."
+msgstr ""
+
+#: ../libsvn_repos/deprecated.c:665 ../svnadmin/svnadmin.c:871
+#, c-format
+msgid " * replacing path : %s ..."
+msgstr ""
+
+#: ../libsvn_repos/deprecated.c:675 ../svnadmin/svnadmin.c:881
+msgid " done.\n"
+msgstr ""
+
+#: ../libsvn_repos/deprecated.c:685 ../svnadmin/svnadmin.c:891
+#, c-format
+msgid "<<< Started new transaction, based on original revision %ld\n"
+msgstr ""
+
+#: ../libsvn_repos/deprecated.c:692 ../svnadmin/svnadmin.c:904
+#, c-format
+msgid " removing '\\r' from %s ..."
+msgstr ""
+
+#: ../libsvn_repos/dump.c:248
+#, c-format
+msgid ""
+"Mergeinfo referencing revision(s) prior to the oldest dumped revision (r"
+"%ld). Loading this dump may result in invalid mergeinfo."
+msgstr ""
+
+#: ../libsvn_repos/dump.c:310
+#, c-format
+msgid "E%06d: While validating fspath '%s': %s"
+msgstr ""
+
+#: ../libsvn_repos/dump.c:432
+#, c-format
+msgid ""
+"Referencing data in revision %ld, which is older than the oldest dumped "
+"revision (r%ld). Loading this dump into an empty repository will fail."
+msgstr ""
+
+#: ../libsvn_repos/dump.c:1148 ../libsvn_repos/dump.c:1440
+#, c-format
+msgid "Start revision %ld is greater than end revision %ld"
+msgstr ""
+
+#: ../libsvn_repos/dump.c:1153 ../libsvn_repos/dump.c:1445
+#, c-format
+msgid "End revision %ld is invalid (youngest revision is %ld)"
+msgstr ""
+
+#: ../libsvn_repos/dump.c:1291
+msgid ""
+"The range of revisions dumped contained references to copy sources outside "
+"that range."
+msgstr ""
+
+#: ../libsvn_repos/dump.c:1305
+msgid ""
+"The range of revisions dumped contained mergeinfo which reference revisions "
+"outside that range."
+msgstr ""
+
+#: ../libsvn_repos/dump.c:1364
+#, c-format
+msgid "Unexpected node kind %d for '%s'"
+msgstr ""
+
+#: ../libsvn_repos/fs-wrap.c:194
+#, c-format
+msgid ""
+"Storage of non-regular property '%s' is disallowed through the repository "
+"interface, and could indicate a bug in your client"
+msgstr ""
+
+#: ../libsvn_repos/fs-wrap.c:209
+#, c-format
+msgid "Cannot accept '%s' property because it is not encoded in UTF-8"
+msgstr ""
+
+#: ../libsvn_repos/fs-wrap.c:219
+#, c-format
+msgid "Cannot accept non-LF line endings in '%s' property"
+msgstr ""
+
+#: ../libsvn_repos/fs-wrap.c:260
+#, c-format
+msgid ""
+"Commit rejected because mergeinfo on '%s' contains unexpected string "
+"terminator"
+msgstr ""
+
+#: ../libsvn_repos/fs-wrap.c:267
+#, c-format
+msgid "Commit rejected because mergeinfo on '%s' is syntactically invalid"
+msgstr ""
+
+#: ../libsvn_repos/fs-wrap.c:397
+#, c-format
+msgid "Write denied: not authorized to read all of revision %ld"
+msgstr ""
+
+#: ../libsvn_repos/fs-wrap.c:581
+#, c-format
+msgid "Cannot unlock path '%s', no authenticated username available"
+msgstr ""
+
+#: ../libsvn_repos/fs-wrap.c:597
+msgid "Unlock succeeded, but post-unlock hook failed"
+msgstr ""
+
+#: ../libsvn_repos/hooks.c:92
+#, c-format
+msgid "'%s' hook succeeded, but error output could not be read"
+msgstr ""
+
+#: ../libsvn_repos/hooks.c:107
+msgid "[Error output could not be translated from the native locale to UTF-8.]"
+msgstr ""
+
+#: ../libsvn_repos/hooks.c:112
+msgid "[Error output could not be read.]"
+msgstr ""
+
+#: ../libsvn_repos/hooks.c:121
+#, c-format
+msgid ""
+"'%s' hook failed (did not exit cleanly: apr_exit_why_e was %d, exitcode was "
+"%d). "
+msgstr ""
+
+#: ../libsvn_repos/hooks.c:130
+msgid "Commit"
+msgstr ""
+
+#: ../libsvn_repos/hooks.c:132
+msgid "Revprop change"
+msgstr ""
+
+#: ../libsvn_repos/hooks.c:134
+msgid "Lock"
+msgstr ""
+
+#: ../libsvn_repos/hooks.c:136
+msgid "Unlock"
+msgstr ""
+
+#: ../libsvn_repos/hooks.c:141
+#, c-format
+msgid "%s hook failed (exit code %d)"
+msgstr ""
+
+#: ../libsvn_repos/hooks.c:145
+#, c-format
+msgid "%s blocked by %s hook (exit code %d)"
+msgstr ""
+
+#: ../libsvn_repos/hooks.c:152
+msgid " with output:\n"
+msgstr ""
+
+#: ../libsvn_repos/hooks.c:158
+msgid " with no output."
+msgstr ""
+
+#: ../libsvn_repos/hooks.c:233
+#, c-format
+msgid "Can't create null stdout for hook '%s'"
+msgstr ""
+
+#: ../libsvn_repos/hooks.c:260
+#, c-format
+msgid "Failed to start '%s' hook"
+msgstr ""
+
+#: ../libsvn_repos/hooks.c:282
+#, c-format
+msgid "Error closing null file"
+msgstr ""
+
+#: ../libsvn_repos/hooks.c:446
+#, c-format
+msgid "Failed to run '%s' hook; broken symlink"
+msgstr ""
+
+#: ../libsvn_repos/hooks.c:664
+msgid ""
+"Repository has not been enabled to accept revision propchanges;\n"
+"ask the administrator to create a pre-revprop-change hook"
+msgstr ""
+
+#: ../libsvn_repos/load-fs-vtable.c:567 ../svnrdump/load_editor.c:810
+#, c-format
+msgid "Relative source revision %ld is not available in current repository"
+msgstr ""
+
+#: ../libsvn_repos/load-fs-vtable.c:581
+#, c-format
+msgid ""
+"Copy source checksum mismatch on copy from '%s'@%ld\n"
+"to '%s' in rev based on r%ld"
+msgstr ""
+
+#: ../libsvn_repos/load-fs-vtable.c:645
+msgid "Malformed dumpstream: Revision 0 must not contain node records"
+msgstr ""
+
+#: ../libsvn_repos/load-fs-vtable.c:661
+#, c-format
+msgid "Unrecognized node-action on node '%s'"
+msgstr ""
+
+#: ../libsvn_repos/load-fs-vtable.c:831
+msgid "Invalid svn:mergeinfo value"
+msgstr ""
+
+#: ../libsvn_repos/load-fs-vtable.c:840
+msgid "Invalid svn:mergeinfo value; leaving unchanged"
+msgstr ""
+
+#: ../libsvn_repos/load.c:54
+msgid "Premature end of content data in dumpstream"
+msgstr ""
+
+#: ../libsvn_repos/load.c:61
+msgid "Dumpstream data appears to be malformed"
+msgstr ""
+
+#: ../libsvn_repos/load.c:110
+#, c-format
+msgid "Dump stream contains a malformed header (with no ':') at '%.20s'"
+msgstr ""
+
+#: ../libsvn_repos/load.c:123
+#, c-format
+msgid "Dump stream contains a malformed header (with no value) at '%.20s'"
+msgstr ""
+
+#: ../libsvn_repos/load.c:212
+msgid "Incomplete or unterminated property block"
+msgstr ""
+
+#: ../libsvn_repos/load.c:360
+msgid "Unexpected EOF writing contents"
+msgstr ""
+
+#: ../libsvn_repos/load.c:390
+#, c-format
+msgid "Malformed dumpfile header '%s'"
+msgstr ""
+
+#: ../libsvn_repos/load.c:397
+#, c-format
+msgid "Unsupported dumpfile version: %d"
+msgstr ""
+
+#: ../libsvn_repos/load.c:538
+msgid "Unrecognized record type in stream"
+msgstr ""
+
+#: ../libsvn_repos/load.c:645
+msgid "Sum of subblock sizes larger than total block content length"
+msgstr ""
+
+#: ../libsvn_repos/node_tree.c:244
+#, c-format
+msgid "'%s' not found in filesystem"
+msgstr ""
+
+#: ../libsvn_repos/replay.c:546 ../libsvn_repos/replay.c:1267
+#, c-format
+msgid "Filesystem path '%s' is neither a file nor a directory"
+msgstr ""
+
+#: ../libsvn_repos/reporter.c:205
+#, c-format
+msgid "Invalid length (%%%s) when about to read a string"
+msgstr ""
+
+#: ../libsvn_repos/reporter.c:270
+#, c-format
+msgid "Invalid depth (%c) for path '%s'"
+msgstr ""
+
+#: ../libsvn_repos/reporter.c:951
+#, c-format
+msgid "Working copy path '%s' does not exist in repository"
+msgstr ""
+
+#: ../libsvn_repos/reporter.c:1355
+msgid "Not authorized to open root of edit operation"
+msgstr ""
+
+#: ../libsvn_repos/reporter.c:1372
+#, c-format
+msgid "Target path '%s' does not exist"
+msgstr ""
+
+#: ../libsvn_repos/reporter.c:1380
+msgid "Cannot replace a directory from within"
+msgstr ""
+
+#: ../libsvn_repos/reporter.c:1420
+msgid "Invalid report for top level of working copy"
+msgstr ""
+
+#: ../libsvn_repos/reporter.c:1435
+msgid "Two top-level reports with no target"
+msgstr ""
+
+#: ../libsvn_repos/reporter.c:1497
+#, c-format
+msgid "Unsupported report depth '%s'"
+msgstr ""
+
+#: ../libsvn_repos/reporter.c:1527
+msgid "Depth 'exclude' not supported for link"
+msgstr ""
+
+#: ../libsvn_repos/reporter.c:1584
+msgid "Request depth 'exclude' not supported"
+msgstr ""
+
+#: ../libsvn_repos/repos.c:188
+#, c-format
+msgid "'%s' exists and is non-empty"
+msgstr ""
+
+#: ../libsvn_repos/repos.c:234
+msgid "Creating db logs lock file"
+msgstr ""
+
+#: ../libsvn_repos/repos.c:252
+msgid "Creating db lock file"
+msgstr ""
+
+#: ../libsvn_repos/repos.c:262
+msgid "Creating lock dir"
+msgstr ""
+
+#: ../libsvn_repos/repos.c:291
+msgid "Creating hook directory"
+msgstr ""
+
+#: ../libsvn_repos/repos.c:373
+msgid "Creating start-commit hook"
+msgstr ""
+
+#: ../libsvn_repos/repos.c:465
+msgid "Creating pre-commit hook"
+msgstr ""
+
+#: ../libsvn_repos/repos.c:543
+msgid "Creating pre-revprop-change hook"
+msgstr ""
+
+#: ../libsvn_repos/repos.c:783
+msgid "Creating post-commit hook"
+msgstr ""
+
+#: ../libsvn_repos/repos.c:975
+msgid "Creating post-revprop-change hook"
+msgstr ""
+
+#: ../libsvn_repos/repos.c:987
+msgid "Creating conf directory"
+msgstr ""
+
+#: ../libsvn_repos/repos.c:1071
+msgid "Creating svnserve.conf file"
+msgstr ""
+
+#: ../libsvn_repos/repos.c:1089
+msgid "Creating passwd file"
+msgstr ""
+
+#: ../libsvn_repos/repos.c:1131
+msgid "Creating authz file"
+msgstr ""
+
+#: ../libsvn_repos/repos.c:1161
+msgid "Creating hooks-env file"
+msgstr ""
+
+#: ../libsvn_repos/repos.c:1217
+msgid "Could not create top-level directory"
+msgstr ""
+
+#: ../libsvn_repos/repos.c:1227
+msgid "Creating DAV sandbox dir"
+msgstr ""
+
+#: ../libsvn_repos/repos.c:1296
+msgid "Error opening db lockfile"
+msgstr ""
+
+#: ../libsvn_repos/repos.c:1333
+#, c-format
+msgid "'%s' is an existing repository"
+msgstr ""
+
+#: ../libsvn_repos/repos.c:1337
+#, c-format
+msgid "'%s' is a subdirectory of an existing repository rooted at '%s'"
+msgstr ""
+
+#: ../libsvn_repos/repos.c:1345
+msgid "Repository creation failed"
+msgstr ""
+
+#: ../libsvn_repos/repos.c:1430
+#, c-format
+msgid "Expected repository format '%d' or '%d'; found format '%d'"
+msgstr ""
+
+#: ../libsvn_repos/repos.c:1674
+#, c-format
+msgid "unknown capability '%s'"
+msgstr ""
+
+#: ../libsvn_repos/rev_hunt.c:71
+#, c-format
+msgid "Failed to find time on revision %ld"
+msgstr ""
+
+#: ../libsvn_repos/rev_hunt.c:210 ../libsvn_repos/rev_hunt.c:325
+#, c-format
+msgid "Invalid start revision %ld"
+msgstr ""
+
+#: ../libsvn_repos/rev_hunt.c:518
+msgid "Unreadable path encountered; access denied"
+msgstr ""
+
+#: ../libsvn_repos/rev_hunt.c:1156 ../libsvn_repos/rev_hunt.c:1495
+#, c-format
+msgid "'%s' is not a file in revision %ld"
+msgstr ""
+
+#: ../libsvn_subr/auth.c:223
+#, c-format
+msgid "No provider registered for '%s' credentials"
+msgstr ""
+
+#: ../libsvn_subr/cache-membuffer.c:518
+#, c-format
+msgid "Can't lock cache mutex"
+msgstr ""
+
+#: ../libsvn_subr/cache-membuffer.c:556 ../libsvn_subr/cache-membuffer.c:580
+#, c-format
+msgid "Can't write-lock cache mutex"
+msgstr ""
+
+#: ../libsvn_subr/cache-membuffer.c:607
+#, c-format
+msgid "Can't unlock cache mutex"
+msgstr ""
+
+#: ../libsvn_subr/cache-membuffer.c:1352
+#, c-format
+msgid "Can't create cache mutex"
+msgstr ""
+
+#: ../libsvn_subr/cache-membuffer.c:2089
+msgid "Can't iterate a membuffer-based cache"
+msgstr ""
+
+#: ../libsvn_subr/cache-memcache.c:170
+#, c-format
+msgid "Unknown memcached error while reading"
+msgstr ""
+
+#: ../libsvn_subr/cache-memcache.c:238
+#, c-format
+msgid "Unknown memcached error while writing"
+msgstr ""
+
+#: ../libsvn_subr/cache-memcache.c:344
+msgid "Can't iterate a memcached cache"
+msgstr ""
+
+#: ../libsvn_subr/cache-memcache.c:444
+#, c-format
+msgid "Error parsing memcache server '%s'"
+msgstr ""
+
+#: ../libsvn_subr/cache-memcache.c:452
+#, c-format
+msgid "Scope not allowed in memcache server '%s'"
+msgstr ""
+
+#: ../libsvn_subr/cache-memcache.c:460
+#, c-format
+msgid "Must specify host and port for memcache server '%s'"
+msgstr ""
+
+#: ../libsvn_subr/cache-memcache.c:480
+#, c-format
+msgid "Unknown error creating memcache server"
+msgstr ""
+
+#: ../libsvn_subr/cache-memcache.c:488
+#, c-format
+msgid "Unknown error adding server to memcache"
+msgstr ""
+
+#: ../libsvn_subr/cache-memcache.c:561
+#, c-format
+msgid "Unknown error creating apr_memcache_t"
+msgstr ""
+
+#: ../libsvn_subr/checksum.c:470
+#, c-format
+msgid ""
+"%s:\n"
+" expected: %s\n"
+" actual: %s\n"
+msgstr ""
+
+#: ../libsvn_subr/cmdline.c:655
+#, c-format
+msgid "Error initializing command line arguments"
+msgstr ""
+
+#: ../libsvn_subr/cmdline.c:744
+msgid "Invalid syntax of argument of --config-option"
+msgstr ""
+
+#: ../libsvn_subr/cmdline.c:771
+#, c-format
+msgid "Unrecognized file in argument of %s"
+msgstr ""
+
+#: ../libsvn_subr/cmdline.c:1017
+msgid ""
+"The EDITOR, SVN_EDITOR or VISUAL environment variable or 'editor-cmd' run-"
+"time configuration option is empty or consists solely of whitespace. "
+"Expected a shell command."
+msgstr ""
+
+#: ../libsvn_subr/cmdline.c:1024
+msgid ""
+"None of the environment variables SVN_EDITOR, VISUAL or EDITOR are set, and "
+"no 'editor-cmd' run-time configuration option was found"
+msgstr ""
+
+#: ../libsvn_subr/cmdline.c:1049 ../libsvn_subr/cmdline.c:1133
+#, c-format
+msgid "Can't get working directory"
+msgstr ""
+
+#: ../libsvn_subr/cmdline.c:1060 ../libsvn_subr/cmdline.c:1144
+#: ../libsvn_subr/cmdline.c:1169
+#, c-format
+msgid "Can't change working directory to '%s'"
+msgstr ""
+
+#: ../libsvn_subr/cmdline.c:1068 ../libsvn_subr/cmdline.c:1316
+#, c-format
+msgid "Can't restore working directory"
+msgstr ""
+
+#: ../libsvn_subr/cmdline.c:1075 ../libsvn_subr/cmdline.c:1251
+#, c-format
+msgid "system('%s') returned %d"
+msgstr ""
+
+#: ../libsvn_subr/cmdline.c:1196
+#, c-format
+msgid "Can't write to '%s'"
+msgstr ""
+
+#: ../libsvn_subr/cmdline.c:1211 ../libsvn_subr/cmdline.c:1226
+#: ../libsvn_subr/cmdline.c:1260 ../libsvn_subr/io.c:3616
+#, c-format
+msgid "Can't stat '%s'"
+msgstr ""
+
+#: ../libsvn_subr/cmdline.c:1285
+msgid "Error normalizing edited contents to internal format"
+msgstr ""
+
+#: ../libsvn_subr/config.c:740
+#, c-format
+msgid "Config error: invalid boolean value '%s' for '[%s] %s'"
+msgstr ""
+
+#: ../libsvn_subr/config.c:745
+#, c-format
+msgid "Config error: invalid boolean value '%s' for '%s'"
+msgstr ""
+
+#: ../libsvn_subr/config.c:1174
+#, c-format
+msgid "Config error: invalid integer value '%s'"
+msgstr ""
+
+#: ../libsvn_subr/config_auth.c:100
+msgid "Unable to open auth file for reading"
+msgstr ""
+
+#: ../libsvn_subr/config_auth.c:105
+#, c-format
+msgid "Error parsing '%s'"
+msgstr ""
+
+#: ../libsvn_subr/config_auth.c:135
+msgid "Unable to locate auth file"
+msgstr ""
+
+#: ../libsvn_subr/config_auth.c:146
+msgid "Unable to open auth file for writing"
+msgstr ""
+
+#: ../libsvn_subr/config_auth.c:150
+#, c-format
+msgid "Error writing hash to '%s'"
+msgstr ""
+
+#: ../libsvn_subr/crypto.c:93
+#, c-format
+msgid "Failed to initialize cryptography subsystem"
+msgstr ""
+
+#: ../libsvn_subr/crypto.c:108
+#, c-format
+msgid "code (%d), reason (\"%s\"), msg (\"%s\")"
+msgstr ""
+
+#: ../libsvn_subr/crypto.c:134
+#, c-format
+msgid "Fetching error from APR"
+msgstr ""
+
+#: ../libsvn_subr/crypto.c:154
+#, c-format
+msgid "Error obtaining random data"
+msgstr ""
+
+#: ../libsvn_subr/crypto.c:224
+msgid "OpenSSL crypto driver error"
+msgstr ""
+
+#: ../libsvn_subr/crypto.c:228
+msgid "Bad return value while loading crypto driver"
+msgstr ""
+
+#: ../libsvn_subr/crypto.c:234
+msgid "Error creating OpenSSL crypto context"
+msgstr ""
+
+#: ../libsvn_subr/crypto.c:291 ../libsvn_subr/crypto.c:294
+#: ../libsvn_subr/crypto.c:419 ../libsvn_subr/crypto.c:422
+#: ../libsvn_subr/crypto.c:526 ../libsvn_subr/crypto.c:529
+#: ../libsvn_subr/crypto.c:641 ../libsvn_subr/crypto.c:644
+msgid "Error creating derived key"
+msgstr ""
+
+#: ../libsvn_subr/crypto.c:297 ../libsvn_subr/crypto.c:425
+#: ../libsvn_subr/crypto.c:532 ../libsvn_subr/crypto.c:647
+msgid "Unexpected IV length returned"
+msgstr ""
+
+#: ../libsvn_subr/crypto.c:308 ../libsvn_subr/crypto.c:543
+msgid "Error initializing block encryption"
+msgstr ""
+
+#: ../libsvn_subr/crypto.c:347 ../libsvn_subr/crypto.c:444
+#: ../libsvn_subr/crypto.c:565 ../libsvn_subr/crypto.c:666
+msgid "Error fetching result length"
+msgstr ""
+
+#: ../libsvn_subr/crypto.c:360 ../libsvn_subr/crypto.c:578
+msgid "Error during block encryption"
+msgstr ""
+
+#: ../libsvn_subr/crypto.c:372 ../libsvn_subr/crypto.c:590
+msgid "Error finalizing block encryption"
+msgstr ""
+
+#: ../libsvn_subr/crypto.c:428 ../libsvn_subr/crypto.c:650
+msgid "Provided IV has incorrect length"
+msgstr ""
+
+#: ../libsvn_subr/crypto.c:436 ../libsvn_subr/crypto.c:658
+msgid "Error initializing block decryption"
+msgstr ""
+
+#: ../libsvn_subr/crypto.c:455 ../libsvn_subr/crypto.c:677
+msgid "Error during block decryption"
+msgstr ""
+
+#: ../libsvn_subr/crypto.c:464 ../libsvn_subr/crypto.c:686
+msgid "Error finalizing block decryption"
+msgstr ""
+
+#: ../libsvn_subr/date.c:307
+#, c-format
+msgid "Can't manipulate current date"
+msgstr ""
+
+#: ../libsvn_subr/date.c:381 ../libsvn_subr/date.c:389
+#, c-format
+msgid "Can't calculate requested date"
+msgstr ""
+
+#: ../libsvn_subr/date.c:384
+#, c-format
+msgid "Can't expand time"
+msgstr ""
+
+#: ../libsvn_subr/deprecated.c:361 ../libsvn_subr/opt.c:302
+msgid ""
+"\n"
+"Valid options:\n"
+msgstr ""
+
+#: ../libsvn_subr/deprecated.c:437 ../libsvn_subr/opt.c:417
+#, c-format
+msgid ""
+"\"%s\": unknown command.\n"
+"\n"
+msgstr ""
+
+#: ../libsvn_subr/deprecated.c:615 ../libsvn_subr/opt.c:1239
+#: ../svnrdump/svnrdump.c:646
+#, c-format
+msgid "Type '%s help' for usage.\n"
+msgstr ""
+
+#: ../libsvn_subr/deprecated.c:1023
+#, c-format
+msgid "'%s' is neither a file nor a directory name"
+msgstr ""
+
+#: ../libsvn_subr/dirent_uri.c:1605
+#, c-format
+msgid "Couldn't determine absolute path of '%s'"
+msgstr ""
+
+#: ../libsvn_subr/dirent_uri.c:2314
+#, c-format
+msgid "Local URL '%s' does not contain 'file://' prefix"
+msgstr ""
+
+#: ../libsvn_subr/dirent_uri.c:2393
+#, c-format
+msgid "Local URL '%s' contains only a hostname, no path"
+msgstr ""
+
+#: ../libsvn_subr/dirent_uri.c:2407
+#, c-format
+msgid "Local URL '%s' contains unsupported hostname"
+msgstr ""
+
+#: ../libsvn_subr/error.c:263
+msgid "Additional errors:"
+msgstr ""
+
+#: ../libsvn_subr/error.c:528
+msgid "Can't recode error string from APR"
+msgstr ""
+
+#: ../libsvn_subr/error.c:628
+#, c-format
+msgid "%swarning: W%06d: %s\n"
+msgstr ""
+
+#: ../libsvn_subr/error.c:710
+#, c-format
+msgid "In file '%s' line %d: assertion failed (%s)"
+msgstr ""
+
+#: ../libsvn_subr/error.c:714
+#, c-format
+msgid "In file '%s' line %d: internal malfunction"
+msgstr ""
+
+#: ../libsvn_subr/error.c:770
+msgid "stream error"
+msgstr ""
+
+#: ../libsvn_subr/error.c:775
+msgid "out of memory"
+msgstr ""
+
+#: ../libsvn_subr/error.c:780
+msgid "buffer error"
+msgstr ""
+
+#: ../libsvn_subr/error.c:785
+msgid "version error"
+msgstr ""
+
+#: ../libsvn_subr/error.c:790
+msgid "corrupt data"
+msgstr ""
+
+#: ../libsvn_subr/error.c:795
+msgid "unknown error"
+msgstr ""
+
+#: ../libsvn_subr/gpg_agent.c:408 ../libsvn_subr/prompt.c:631
+#, c-format
+msgid "Password for '%s': "
+msgstr ""
+
+#: ../libsvn_subr/gpg_agent.c:409
+#, c-format
+msgid "Enter your Subversion password for %s"
+msgstr ""
+
+#: ../libsvn_subr/hash.c:120
+msgid "Serialized hash missing terminator"
+msgstr ""
+
+#: ../libsvn_subr/hash.c:129 ../libsvn_subr/hash.c:142
+#: ../libsvn_subr/hash.c:153 ../libsvn_subr/hash.c:165
+#: ../libsvn_subr/hash.c:173 ../libsvn_subr/hash.c:183
+#: ../libsvn_subr/hash.c:196 ../libsvn_subr/hash.c:204
+msgid "Serialized hash malformed"
+msgstr ""
+
+#: ../libsvn_subr/hash.c:244
+msgid "Cannot serialize negative length"
+msgstr ""
+
+#: ../libsvn_subr/io.c:309
+#, c-format
+msgid "Can't check path '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:537 ../libsvn_subr/io.c:4558
+#, c-format
+msgid "Can't open '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:563 ../libsvn_subr/io.c:649
+#, c-format
+msgid "Unable to make name for '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:636
+#, c-format
+msgid "Can't create symbolic link '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:653 ../libsvn_subr/io.c:686 ../libsvn_subr/io.c:714
+msgid "Symbolic links are not supported on this platform"
+msgstr ""
+
+#: ../libsvn_subr/io.c:676
+#, c-format
+msgid "Can't read contents of link"
+msgstr ""
+
+#: ../libsvn_subr/io.c:734
+#, c-format
+msgid "Can't find a temporary directory"
+msgstr ""
+
+#: ../libsvn_subr/io.c:852
+#, c-format
+msgid "Can't copy '%s' to '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:895 ../libsvn_subr/io.c:917 ../libsvn_subr/io.c:963
+#: ../libsvn_subr/io.c:4691
+#, c-format
+msgid "Can't set permissions on '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:913 ../libsvn_subr/io.c:1984 ../libsvn_subr/io.c:2043
+#: ../libsvn_subr/io.c:4596
+#, c-format
+msgid "Can't get file name"
+msgstr ""
+
+#: ../libsvn_subr/io.c:987
+#, c-format
+msgid "Can't append '%s' to '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:1033
+#, c-format
+msgid "Destination '%s' already exists"
+msgstr ""
+
+#: ../libsvn_subr/io.c:1137
+#, c-format
+msgid "Can't make directory '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:1206
+#, c-format
+msgid "Can't set access time of '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:1535 ../libsvn_subr/io.c:1637
+#, c-format
+msgid "Can't change perms of file '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:1803
+#, c-format
+msgid "Can't set file '%s' read-only"
+msgstr ""
+
+#: ../libsvn_subr/io.c:1835
+#, c-format
+msgid "Can't set file '%s' read-write"
+msgstr ""
+
+#: ../libsvn_subr/io.c:1874 ../libsvn_subr/io.c:1908
+#, c-format
+msgid "Error getting UID of process"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2010
+#, c-format
+msgid "Can't get shared lock on file '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2048
+#, c-format
+msgid "Can't unlock file '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2103 ../libsvn_subr/io.c:3511
+#, c-format
+msgid "Can't flush file '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2104 ../libsvn_subr/io.c:3512
+#, c-format
+msgid "Can't flush stream"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2116 ../libsvn_subr/io.c:2133
+#, c-format
+msgid "Can't flush file to disk"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2225 ../libsvn_subr/prompt.c:197
+#: ../svnserve/svnserve.c:822
+#, c-format
+msgid "Can't open stdin"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2245
+msgid "Reading from stdin is disallowed"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2312
+#, c-format
+msgid "Can't remove file '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2399
+#, c-format
+msgid "Can't remove '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2562
+#, c-format
+msgid "Path '%s' not found, case obstructed by '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2601
+#, c-format
+msgid "Path '%s' not found"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2675
+#, c-format
+msgid "Can't create process '%s' attributes"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2682
+#, c-format
+msgid "Can't set process '%s' cmdtype"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2694
+#, c-format
+msgid "Can't set process '%s' directory"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2708
+#, c-format
+msgid "Can't set process '%s' child input"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2716
+#, c-format
+msgid "Can't set process '%s' child outfile"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2724
+#, c-format
+msgid "Can't set process '%s' child errfile"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2738
+#, c-format
+msgid "Can't set process '%s' stdio pipes"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2746
+#, c-format
+msgid "Can't set process '%s' child errfile for error handler"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2753
+#, c-format
+msgid "Can't set process '%s' error handler"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2776
+#, c-format
+msgid "Can't start process '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2800
+#, c-format
+msgid "Error waiting for process '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2809
+#, c-format
+msgid "Process '%s' failed (signal %d, core dumped)"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2814
+#, c-format
+msgid "Process '%s' failed (signal %d)"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2820
+#, c-format
+msgid "Process '%s' failed (exitwhy %d, exitcode %d)"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2828
+#, c-format
+msgid "Process '%s' returned error exitcode %d"
+msgstr ""
+
+#: ../libsvn_subr/io.c:2935
+#, c-format
+msgid "'%s' returned %d"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3055
+#, c-format
+msgid ""
+"Error running '%s': exitcode was %d, args were:\n"
+"in directory '%s', basenames:\n"
+"%s\n"
+"%s\n"
+"%s"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3196
+#, c-format
+msgid "Can't detect MIME type of non-file '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3291
+#, c-format
+msgid "Can't open file '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3331
+#, c-format
+msgid "Can't close file '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3332
+#, c-format
+msgid "Can't close stream"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3341 ../libsvn_subr/io.c:3377 ../libsvn_subr/io.c:3402
+#, c-format
+msgid "Can't read file '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3342 ../libsvn_subr/io.c:3378 ../libsvn_subr/io.c:3403
+#, c-format
+msgid "Can't read stream"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3351
+#, c-format
+msgid "Can't write file '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3352
+#, c-format
+msgid "Can't write stream"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3366
+#, c-format
+msgid "Can't get attribute information from file '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3367
+#, c-format
+msgid "Can't get attribute information from stream"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3414
+#, c-format
+msgid "Can't set position pointer in file '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3415
+#, c-format
+msgid "Can't set position pointer in stream"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3426 ../libsvn_subr/io.c:3473
+#, c-format
+msgid "Can't write to file '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3427 ../libsvn_subr/io.c:3474
+#, c-format
+msgid "Can't write to stream"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3516
+#, c-format
+msgid "Can't truncate file '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3517
+#, c-format
+msgid "Can't truncate stream"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3590
+#, c-format
+msgid "Can't read length line in file '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3594
+msgid "Can't read length line in stream"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3651
+#, c-format
+msgid "Can't move '%s' to '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3732
+#, c-format
+msgid "Can't create directory '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3755
+#, c-format
+msgid "Can't hide directory '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3815 ../libsvn_subr/io.c:3938
+#, c-format
+msgid "Can't open directory '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3850
+#, c-format
+msgid "Can't remove directory '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3868
+#, c-format
+msgid "Can't read directory"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3888
+#, c-format
+msgid "Error closing directory"
+msgstr ""
+
+#: ../libsvn_subr/io.c:3957
+#, c-format
+msgid "Can't read directory entry in '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:4083
+#, c-format
+msgid "Can't check directory '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:4145
+#, c-format
+msgid "Reading '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:4164
+#, c-format
+msgid "First line of '%s' contains non-digit"
+msgstr ""
+
+#: ../libsvn_subr/io.c:4479
+#, c-format
+msgid "Can't create temporary file from template '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:4568
+#, c-format
+msgid "Can't set aside '%s'"
+msgstr ""
+
+#: ../libsvn_subr/io.c:4580
+#, c-format
+msgid "Unable to make name in '%s'"
+msgstr ""
+
+#: ../libsvn_subr/mergeinfo.c:100 ../libsvn_subr/mergeinfo.c:714
+msgid "Pathname not terminated by ':'"
+msgstr ""
+
+#: ../libsvn_subr/mergeinfo.c:103
+msgid "No pathname preceding ':'"
+msgstr ""
+
+#: ../libsvn_subr/mergeinfo.c:521
+#, c-format
+msgid "Invalid character '%c' found in revision list"
+msgstr ""
+
+#: ../libsvn_subr/mergeinfo.c:529
+#, c-format
+msgid "Invalid revision number '0' found in range list"
+msgstr ""
+
+#: ../libsvn_subr/mergeinfo.c:540
+#, c-format
+msgid "Unable to parse reversed revision range '%ld-%ld'"
+msgstr ""
+
+#: ../libsvn_subr/mergeinfo.c:545
+#, c-format
+msgid ""
+"Unable to parse revision range '%ld-%ld' with same start and end revisions"
+msgstr ""
+
+#: ../libsvn_subr/mergeinfo.c:582 ../libsvn_subr/mergeinfo.c:589
+#, c-format
+msgid "Invalid character '%c' found in range list"
+msgstr ""
+
+#: ../libsvn_subr/mergeinfo.c:596
+msgid "Range list parsing ended before hitting newline"
+msgstr ""
+
+#: ../libsvn_subr/mergeinfo.c:674
+#, c-format
+msgid ""
+"Unable to parse overlapping revision ranges '%s' and '%s' with different "
+"inheritance types"
+msgstr ""
+
+#: ../libsvn_subr/mergeinfo.c:722
+#, c-format
+msgid "Mergeinfo for '%s' maps to an empty revision range"
+msgstr ""
+
+#: ../libsvn_subr/mergeinfo.c:726
+#, c-format
+msgid "Could not find end of line in range list line in '%s'"
+msgstr ""
+
+#: ../libsvn_subr/mergeinfo.c:786
+#, c-format
+msgid "Could not parse mergeinfo string '%s'"
+msgstr ""
+
+#: ../libsvn_subr/mergeinfo.c:2350
+msgid "NULL mergeinfo catalog\n"
+msgstr ""
+
+#: ../libsvn_subr/mergeinfo.c:2355
+msgid "empty mergeinfo catalog\n"
+msgstr ""
+
+#: ../libsvn_subr/mutex.c:45
+#, c-format
+msgid "Can't create mutex"
+msgstr ""
+
+#: ../libsvn_subr/mutex.c:62
+#, c-format
+msgid "Can't lock mutex"
+msgstr ""
+
+#: ../libsvn_subr/mutex.c:78
+#, c-format
+msgid "Can't unlock mutex"
+msgstr ""
+
+#: ../libsvn_subr/named_atomic.c:335
+msgid "Not a valid atomic"
+msgstr ""
+
+#: ../libsvn_subr/named_atomic.c:474
+#, c-format
+msgid "MMAP failed for file '%s'"
+msgstr ""
+
+#: ../libsvn_subr/named_atomic.c:486
+msgid "Number of atomics in namespace is too large."
+msgstr ""
+
+#: ../libsvn_subr/named_atomic.c:537
+msgid "Atomic's name is too long."
+msgstr ""
+
+#: ../libsvn_subr/named_atomic.c:543
+msgid "Namespace has not been initialized."
+msgstr ""
+
+#: ../libsvn_subr/named_atomic.c:591
+msgid "Out of slots for named atomic."
+msgstr ""
+
+#: ../libsvn_subr/nls.c:80
+#, c-format
+msgid "Can't convert string to UCS-2: '%s'"
+msgstr ""
+
+#: ../libsvn_subr/nls.c:87
+msgid "Can't get module file name"
+msgstr ""
+
+#: ../libsvn_subr/nls.c:102
+#, c-format
+msgid "Can't convert module path to UTF-8 from UCS-2: '%s'"
+msgstr ""
+
+#: ../libsvn_subr/opt.c:189
+msgid " ARG"
+msgstr ""
+
+#: ../libsvn_subr/opt.c:324
+msgid ""
+"\n"
+"Global options:\n"
+msgstr ""
+
+#: ../libsvn_subr/opt.c:818
+#, c-format
+msgid "Syntax error parsing peg revision '%s'; did you mean '%s@'?"
+msgstr ""
+
+#: ../libsvn_subr/opt.c:824
+#, c-format
+msgid "Syntax error parsing peg revision '%s'"
+msgstr ""
+
+#: ../libsvn_subr/opt.c:961
+msgid "Revision property pair is empty"
+msgstr ""
+
+#: ../libsvn_subr/opt.c:981 ../svn/propedit-cmd.c:87 ../svn/propget-cmd.c:336
+#: ../svn/propset-cmd.c:68
+#, c-format
+msgid "'%s' is not a valid Subversion property name"
+msgstr ""
+
+#: ../libsvn_subr/opt.c:1018
+#, c-format
+msgid "'%s' is just a peg revision. Maybe try '%s@' instead?"
+msgstr ""
+
+#: ../libsvn_subr/opt.c:1064
+#, c-format
+msgid "URL '%s' contains a '..' element"
+msgstr ""
+
+#: ../libsvn_subr/opt.c:1097
+#, c-format
+msgid "Error resolving case of '%s'"
+msgstr ""
+
+#: ../libsvn_subr/opt.c:1119
+#, c-format
+msgid ""
+"%s, version %s\n"
+" compiled %s, %s on %s\n"
+"\n"
+msgstr ""
+
+#: ../libsvn_subr/opt.c:1136
+msgid ""
+"System information:\n"
+"\n"
+msgstr ""
+
+#: ../libsvn_subr/opt.c:1137
+#, c-format
+msgid "* running on %s\n"
+msgstr ""
+
+#: ../libsvn_subr/opt.c:1141
+#, c-format
+msgid " - %s\n"
+msgstr ""
+
+#: ../libsvn_subr/opt.c:1151
+msgid "* linked dependencies:\n"
+msgstr ""
+
+#: ../libsvn_subr/opt.c:1176
+msgid "* loaded shared libraries:\n"
+msgstr ""
+
+#: ../libsvn_subr/path.c:1114
+#, c-format
+msgid "Can't determine the native path encoding"
+msgstr ""
+
+#: ../libsvn_subr/path.c:1303
+#, c-format
+msgid "Improper relative URL '%s'"
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:147
+msgid "Can't close terminal"
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:200
+#, c-format
+msgid "Can't open stderr"
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:263
+#, c-format
+msgid "Can't write to terminal"
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:385 ../libsvn_subr/prompt.c:472
+#, c-format
+msgid "Can't read from terminal"
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:540
+msgid "End of file while reading from terminal"
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:602
+#, c-format
+msgid "Authentication realm: %s\n"
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:629 ../libsvn_subr/prompt.c:652
+msgid "Username: "
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:674
+#, c-format
+msgid "Error validating server certificate for '%s':\n"
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:680
+msgid ""
+" - The certificate is not issued by a trusted authority. Use the\n"
+" fingerprint to validate the certificate manually!\n"
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:687
+msgid " - The certificate hostname does not match.\n"
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:693
+msgid " - The certificate is not yet valid.\n"
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:699
+msgid " - The certificate has expired.\n"
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:705
+msgid " - The certificate has an unknown error.\n"
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:710
+#, c-format
+msgid ""
+"Certificate information:\n"
+" - Hostname: %s\n"
+" - Valid: from %s until %s\n"
+" - Issuer: %s\n"
+" - Fingerprint: %s\n"
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:725
+msgid "(R)eject, accept (t)emporarily or accept (p)ermanently? "
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:729
+msgid "(R)eject or accept (t)emporarily? "
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:769
+msgid "Client certificate filename: "
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:793
+#, c-format
+msgid "Passphrase for '%s': "
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:845
+msgid "yes"
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:846
+msgid "y"
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:851
+msgid "no"
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:852
+msgid "n"
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:858
+msgid "Please type 'yes' or 'no': "
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:872
+msgid "Store password unencrypted (yes/no)? "
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:874
+#, c-format
+msgid ""
+"\n"
+"-----------------------------------------------------------------------\n"
+"ATTENTION! Your password for authentication realm:\n"
+"\n"
+" %s\n"
+"\n"
+"can only be stored to disk unencrypted! You are advised to configure\n"
+"your system so that Subversion can store passwords encrypted, if\n"
+"possible. See the documentation for details.\n"
+"\n"
+"You can avoid future appearances of this warning by setting the value\n"
+"of the 'store-plaintext-passwords' option to either 'yes' or 'no' in\n"
+"'%s'.\n"
+"-----------------------------------------------------------------------\n"
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:901
+msgid "Store passphrase unencrypted (yes/no)? "
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:903
+#, c-format
+msgid ""
+"\n"
+"-----------------------------------------------------------------------\n"
+"ATTENTION! Your passphrase for client certificate:\n"
+"\n"
+" %s\n"
+"\n"
+"can only be stored to disk unencrypted! You are advised to configure\n"
+"your system so that Subversion can store passphrase encrypted, if\n"
+"possible. See the documentation for details.\n"
+"\n"
+"You can avoid future appearances of this warning by setting the value\n"
+"of the 'store-ssl-client-cert-pp-plaintext' option to either 'yes' or\n"
+"'no' in '%s'.\n"
+"-----------------------------------------------------------------------\n"
+msgstr ""
+
+#: ../libsvn_subr/prompt.c:949
+#, c-format
+msgid "Password for '%s' GNOME keyring: "
+msgstr ""
+
+#: ../libsvn_subr/simple_providers.c:449
+#: ../libsvn_subr/ssl_client_cert_pw_providers.c:296
+#, c-format
+msgid "Config error: invalid value '%s' for option '%s'"
+msgstr ""
+
+#: ../libsvn_subr/sqlite.c:176
+#, c-format
+msgid "sqlite[S%d]: %s, executing statement '%s'"
+msgstr ""
+
+#: ../libsvn_subr/sqlite.c:265
+msgid "sqlite: Expected database row missing"
+msgstr ""
+
+#: ../libsvn_subr/sqlite.c:266
+msgid "sqlite: Extra database row found"
+msgstr ""
+
+#: ../libsvn_subr/sqlite.c:726
+#, c-format
+msgid "SQLite compiled for %s, but running with %s"
+msgstr ""
+
+#: ../libsvn_subr/sqlite.c:738
+msgid "SQLite is required to be compiled and run in thread-safe mode"
+msgstr ""
+
+#: ../libsvn_subr/sqlite.c:747
+#, c-format
+msgid "Could not configure SQLite [S%d]"
+msgstr ""
+
+#: ../libsvn_subr/sqlite.c:749
+msgid "Could not initialize SQLite"
+msgstr ""
+
+#: ../libsvn_subr/sqlite.c:1219
+#, c-format
+msgid "SQLite hotcopy failed for %s"
+msgstr ""
+
+#: ../libsvn_subr/string.c:943 ../libsvn_subr/string.c:987
+#, c-format
+msgid "Could not convert '%s' into a number"
+msgstr ""
+
+#: ../libsvn_subr/subst.c:1803 ../libsvn_wc/props.c:1660
+#, c-format
+msgid "File '%s' has inconsistent newlines"
+msgstr ""
+
+#: ../libsvn_subr/sysinfo.c:1106
+msgid "Intel"
+msgstr ""
+
+#: ../libsvn_subr/sysinfo.c:1107
+msgid "Intel 64-bit"
+msgstr ""
+
+#: ../libsvn_subr/sysinfo.c:1108
+msgid "PowerPC"
+msgstr ""
+
+#: ../libsvn_subr/sysinfo.c:1109
+msgid "PowerPC 64-bit"
+msgstr ""
+
+#. Human explanatory part, generated by apr_strftime as "Sat, 01 Jan 2000"
+#: ../libsvn_subr/time.c:85
+msgid " (%a, %d %b %Y)"
+msgstr ""
+
+#: ../libsvn_subr/token.c:66
+#, c-format
+msgid "Token '%s' is unrecognized"
+msgstr ""
+
+#: ../libsvn_subr/types.c:48
+#, c-format
+msgid "Invalid revision number found parsing '%s'"
+msgstr ""
+
+#: ../libsvn_subr/types.c:60
+#, c-format
+msgid "Negative revision number found parsing '%s'"
+msgstr ""
+
+#: ../libsvn_subr/utf.c:245
+#, c-format
+msgid "Can't create a character converter from native encoding to '%s'"
+msgstr ""
+
+#: ../libsvn_subr/utf.c:249
+#, c-format
+msgid "Can't create a character converter from '%s' to native encoding"
+msgstr ""
+
+#: ../libsvn_subr/utf.c:253
+#, c-format
+msgid "Can't create a character converter from '%s' to '%s'"
+msgstr ""
+
+#: ../libsvn_subr/utf.c:601
+#, c-format
+msgid "Can't convert string from native encoding to '%s':"
+msgstr ""
+
+#: ../libsvn_subr/utf.c:605
+#, c-format
+msgid "Can't convert string from '%s' to native encoding:"
+msgstr ""
+
+#: ../libsvn_subr/utf.c:609
+#, c-format
+msgid "Can't convert string from '%s' to '%s':"
+msgstr ""
+
+#: ../libsvn_subr/utf.c:654
+#, c-format
+msgid ""
+"Safe data '%s' was followed by non-ASCII byte %d: unable to convert to/from "
+"UTF-8"
+msgstr ""
+
+#: ../libsvn_subr/utf.c:662
+#, c-format
+msgid ""
+"Non-ASCII character (code %d) detected, and unable to convert to/from UTF-8"
+msgstr ""
+
+#: ../libsvn_subr/utf.c:707
+#, c-format
+msgid ""
+"Valid UTF-8 data\n"
+"(hex:%s)\n"
+"followed by invalid UTF-8 sequence\n"
+"(hex:%s)"
+msgstr ""
+
+#: ../libsvn_subr/validate.c:56
+#, c-format
+msgid "MIME type '%s' has empty media type"
+msgstr ""
+
+#: ../libsvn_subr/validate.c:61
+#, c-format
+msgid "MIME type '%s' does not contain '/'"
+msgstr ""
+
+#: ../libsvn_subr/validate.c:73
+#, c-format
+msgid "MIME type '%s' contains invalid character '%c' in media type"
+msgstr ""
+
+#: ../libsvn_subr/validate.c:84
+#, c-format
+msgid "MIME type '%s' contains invalid character '0x%02x' in postfix"
+msgstr ""
+
+#: ../libsvn_subr/version.c:91
+#, c-format
+msgid "Version mismatch in '%s'%s: found %d.%d.%d%s, expected %d.%d.%d%s"
+msgstr ""
+
+#: ../libsvn_subr/version.c:96
+msgid " (expecting equality)"
+msgstr ""
+
+#: ../libsvn_subr/version.c:98
+msgid " (expecting compatibility)"
+msgstr ""
+
+#: ../libsvn_subr/version.c:139
+msgid ""
+"Copyright (C) 2014 The Apache Software Foundation.\n"
+"This software consists of contributions made by many people;\n"
+"see the NOTICE file for more information.\n"
+"Subversion is open source software, see http://subversion.apache.org/\n"
+msgstr ""
+
+#: ../libsvn_subr/version.c:217 ../libsvn_subr/version.c:228
+#: ../libsvn_subr/version.c:234 ../libsvn_subr/version.c:251
+#: ../libsvn_subr/version.c:258
+#, c-format
+msgid "Failed to parse version number string '%s'"
+msgstr ""
+
+#: ../libsvn_subr/xml.c:416
+#, c-format
+msgid "Malformed XML: %s at line %ld"
+msgstr ""
+
+#: ../libsvn_wc/adm_crawler.c:114
+#, c-format
+msgid "The existing node '%s' can not be restored."
+msgstr ""
+
+#: ../libsvn_wc/adm_crawler.c:133
+#, c-format
+msgid "The node '%s' can not be restored."
+msgstr ""
+
+#: ../libsvn_wc/adm_crawler.c:851
+msgid "Error aborting report"
+msgstr ""
+
+#: ../libsvn_wc/adm_crawler.c:963
+#, c-format
+msgid "Pristine checksum for file '%s' is missing"
+msgstr ""
+
+#: ../libsvn_wc/adm_crawler.c:1128
+#, c-format
+msgid "Checksum mismatch for text base of '%s'"
+msgstr ""
+
+#: ../libsvn_wc/adm_crawler.c:1139
+#, c-format
+msgid "While preparing '%s' for commit"
+msgstr ""
+
+#: ../libsvn_wc/adm_files.c:105
+#, c-format
+msgid "'%s' is not a valid administrative directory name"
+msgstr ""
+
+#: ../libsvn_wc/adm_files.c:185 ../libsvn_wc/adm_files.c:241
+#, c-format
+msgid "Can only get the pristine contents of files; '%s' is not a file"
+msgstr ""
+
+#: ../libsvn_wc/adm_files.c:194 ../libsvn_wc/adm_files.c:256
+#, c-format
+msgid ""
+"Cannot get the pristine contents of '%s' because its delete is already "
+"committed"
+msgstr ""
+
+#: ../libsvn_wc/adm_files.c:202 ../libsvn_wc/adm_files.c:264
+#, c-format
+msgid ""
+"Cannot get the pristine contents of '%s' because it has an unexpected status"
+msgstr ""
+
+#: ../libsvn_wc/adm_files.c:209
+#, c-format
+msgid "Node '%s' has no pristine text"
+msgstr ""
+
+#: ../libsvn_wc/adm_files.c:452
+#, c-format
+msgid "Revision %ld doesn't match existing revision %ld in '%s'"
+msgstr ""
+
+#: ../libsvn_wc/adm_files.c:489
+#, c-format
+msgid ""
+"URL '%s' (uuid: '%s') doesn't match existing URL '%s' (uuid: '%s') in '%s'"
+msgstr ""
+
+#: ../libsvn_wc/adm_ops.c:602 ../libsvn_wc/update_editor.c:5279
+#, c-format
+msgid "Can't find parent directory's node while trying to add '%s'"
+msgstr ""
+
+#: ../libsvn_wc/adm_ops.c:611 ../libsvn_wc/update_editor.c:5273
+#, c-format
+msgid "Can't add '%s' to a parent directory scheduled for deletion"
+msgstr ""
+
+#: ../libsvn_wc/adm_ops.c:618 ../libsvn_wc/update_editor.c:5286
+#, c-format
+msgid "Can't schedule an addition of '%s' below a not-directory node"
+msgstr ""
+
+#: ../libsvn_wc/adm_ops.c:677
+#, c-format
+msgid "Can't create an entry with a reserved name while trying to add '%s'"
+msgstr ""
+
+#: ../libsvn_wc/adm_ops.c:881
+#, c-format
+msgid "The URL '%s' has a different repository root than its parent"
+msgstr ""
+
+#: ../libsvn_wc/adm_ops.c:899
+#, c-format
+msgid ""
+"Can't schedule the working copy at '%s' from repository '%s' with uuid '%s' "
+"for addition under a working copy from repository '%s' with uuid '%s'."
+msgstr ""
+
+#: ../libsvn_wc/adm_ops.c:913
+#, c-format
+msgid "Can't add '%s' with URL '%s', but with the data from '%s'"
+msgstr ""
+
+#: ../libsvn_wc/cleanup.c:58
+#, c-format
+msgid "'%s' is not a working copy directory"
+msgstr ""
+
+#: ../libsvn_wc/cleanup.c:64
+msgid "Log format too old, please use Subversion 1.6 or earlier"
+msgstr ""
+
+#: ../libsvn_wc/conflicts.c:83
+msgid "Not a conflict skel"
+msgstr ""
+
+#: ../libsvn_wc/conflicts.c:610 ../libsvn_wc/conflicts.c:707
+msgid "Not a completed conflict skel"
+msgstr ""
+
+#: ../libsvn_wc/conflicts.c:788 ../libsvn_wc/conflicts.c:861
+#: ../libsvn_wc/conflicts.c:951
+msgid "Conflict not set"
+msgstr ""
+
+#: ../libsvn_wc/conflicts.c:1438 ../libsvn_wc/conflicts.c:1790
+msgid "Conflict callback violated API: returned no results"
+msgstr ""
+
+#: ../libsvn_wc/conflicts.c:1482
+msgid "Conflict callback violated API: returned no merged file"
+msgstr ""
+
+#: ../libsvn_wc/conflicts.c:2468 ../libsvn_wc/conflicts.c:2644
+msgid "Invalid 'conflict_result' argument"
+msgstr ""
+
+#: ../libsvn_wc/conflicts.c:2767 ../libsvn_wc/conflicts.c:2807
+#, c-format
+msgid ""
+"Tree conflict can only be resolved to 'working' or 'mine-conflict' state; "
+"'%s' not resolved"
+msgstr ""
+
+#: ../libsvn_wc/conflicts.c:2822
+#, c-format
+msgid ""
+"Tree conflict can only be resolved to 'working' state; '%s' not resolved"
+msgstr ""
+
+#: ../libsvn_wc/conflicts.c:2931
+msgid "No conflict-callback and no pre-defined conflict-choice provided"
+msgstr ""
+
+#: ../libsvn_wc/copy.c:86
+#, c-format
+msgid "Source '%s' is unexpected kind"
+msgstr ""
+
+#: ../libsvn_wc/copy.c:410
+#, c-format
+msgid "cannot handle node kind for '%s'"
+msgstr ""
+
+#: ../libsvn_wc/copy.c:432 ../libsvn_wc/wc_db.c:4524 ../libsvn_wc/wc_db.c:5099
+#, c-format
+msgid "Cannot handle status of '%s'"
+msgstr ""
+
+#: ../libsvn_wc/copy.c:441 ../libsvn_wc/wc_db.c:4515 ../libsvn_wc/wc_db.c:5093
+#: ../libsvn_wc/wc_db.c:5338
+#, c-format
+msgid "Cannot copy '%s' excluded by server"
+msgstr ""
+
+#: ../libsvn_wc/copy.c:578
+#, c-format
+msgid "Deleted node '%s' can't be copied."
+msgstr ""
+
+#: ../libsvn_wc/copy.c:596
+#, c-format
+msgid "'%s' is the root of a working copy and cannot be moved"
+msgstr ""
+
+#: ../libsvn_wc/copy.c:604
+#, c-format
+msgid "'%s' represents the repository root and cannot be moved"
+msgstr ""
+
+#: ../libsvn_wc/copy.c:673
+#, c-format
+msgid "Cannot copy to '%s', as it is not from repository '%s'; it is from '%s'"
+msgstr ""
+
+#: ../libsvn_wc/copy.c:681
+#, c-format
+msgid "Cannot copy to '%s' as it is scheduled for deletion"
+msgstr ""
+
+#: ../libsvn_wc/copy.c:709
+#, c-format
+msgid "'%s' is already under version control but is excluded."
+msgstr ""
+
+#: ../libsvn_wc/copy.c:724
+#, c-format
+msgid "There is already a versioned item '%s'"
+msgstr ""
+
+#: ../libsvn_wc/copy.c:740
+#, c-format
+msgid "'%s' already exists and is in the way"
+msgstr ""
+
+#: ../libsvn_wc/copy.c:791
+#, c-format
+msgid ""
+"Cannot move mixed-revision subtree '%s' [%ld:%ld]; try updating it first"
+msgstr ""
+
+#: ../libsvn_wc/crop.c:208
+#, c-format
+msgid "Cannot exclude '%s': it is a working copy root"
+msgstr ""
+
+#: ../libsvn_wc/crop.c:216
+#, c-format
+msgid "Cannot exclude '%s': it is a switched path"
+msgstr ""
+
+#: ../libsvn_wc/crop.c:243
+#, c-format
+msgid ""
+"Cannot exclude '%s': it is to be added to the repository. Try commit instead"
+msgstr ""
+
+#: ../libsvn_wc/crop.c:250
+#, c-format
+msgid ""
+"Cannot exclude '%s': it is to be deleted from the repository. Try commit "
+"instead"
+msgstr ""
+
+#: ../libsvn_wc/crop.c:309
+msgid "Can only crop a working copy with a restrictive depth"
+msgstr ""
+
+#: ../libsvn_wc/crop.c:320
+msgid "Can only crop directories"
+msgstr ""
+
+#: ../libsvn_wc/crop.c:333
+#, c-format
+msgid ""
+"Cannot crop '%s': it is going to be removed from repository. Try commit "
+"instead"
+msgstr ""
+
+#: ../libsvn_wc/crop.c:340
+#, c-format
+msgid ""
+"Cannot crop '%s': it is to be added to the repository. Try commit instead"
+msgstr ""
+
+#: ../libsvn_wc/delete.c:237 ../libsvn_wc/delete.c:357
+#, c-format
+msgid "'%s' cannot be deleted"
+msgstr ""
+
+#: ../libsvn_wc/delete.c:255 ../libsvn_wc/delete.c:373
+#, c-format
+msgid "'%s' is the root of a working copy and cannot be deleted"
+msgstr ""
+
+#: ../libsvn_wc/delete.c:262 ../libsvn_wc/delete.c:379
+#, c-format
+msgid "'%s' represents the repository root and cannot be deleted"
+msgstr ""
+
+#: ../libsvn_wc/delete.c:476
+#, c-format
+msgid "File '%s' has local modifications"
+msgstr ""
+
+#: ../libsvn_wc/deprecated.c:2284
+#, c-format
+msgid "Unexpectedly found '%s': path is marked 'missing'"
+msgstr ""
+
+#: ../libsvn_wc/entries.c:1044
+#, c-format
+msgid "'%s' is not a versioned working copy"
+msgstr ""
+
+#: ../libsvn_wc/entries.c:1290
+#, c-format
+msgid "Admin area of '%s' is missing"
+msgstr ""
+
+#: ../libsvn_wc/entries.c:1310
+#, c-format
+msgid "'%s' is not of the right kind"
+msgstr ""
+
+#: ../libsvn_wc/entries.c:1507
+#, c-format
+msgid "The file '%s' has no checksum"
+msgstr ""
+
+#: ../libsvn_wc/entries.c:1619
+#, c-format
+msgid "Unable to upgrade '%s' at line %d"
+msgstr ""
+
+#: ../libsvn_wc/entries.c:1837
+#, c-format
+msgid "No copyfrom URL for '%s'"
+msgstr ""
+
+#: ../libsvn_wc/entries.c:2051
+#, c-format
+msgid "Bad base MD5 checksum for '%s'; expected: '%s'; found '%s'; "
+msgstr ""
+
+#: ../libsvn_wc/entries.c:2399
+#, c-format
+msgid "No default entry in directory '%s'"
+msgstr ""
+
+#: ../libsvn_wc/entries.c:2555
+#, c-format
+msgid "Directory '%s' has no THIS_DIR entry"
+msgstr ""
+
+#: ../libsvn_wc/entries.c:2736 ../libsvn_wc/node.c:528
+#, c-format
+msgid "'%s' has an unrecognized node kind"
+msgstr ""
+
+#: ../libsvn_wc/externals.c:154 ../libsvn_wc/externals.c:232
+#, c-format
+msgid "Error parsing %s property on '%s': '%s'"
+msgstr ""
+
+#: ../libsvn_wc/externals.c:202
+#, c-format
+msgid "Can't split line into components: '%s'"
+msgstr ""
+
+#: ../libsvn_wc/externals.c:257
+#, c-format
+msgid ""
+"Invalid %s property on '%s': cannot use two absolute URLs ('%s' and '%s') in "
+"an external; one must be a path where an absolute or relative URL is checked "
+"out to"
+msgstr ""
+
+#: ../libsvn_wc/externals.c:266 ../libsvn_wc/externals.c:274
+#, c-format
+msgid ""
+"Invalid %s property on '%s': cannot use a URL '%s' as the target directory "
+"for an external definition"
+msgstr ""
+
+#: ../libsvn_wc/externals.c:316
+#, c-format
+msgid ""
+"Invalid %s property on '%s': target '%s' is an absolute path or involves '..'"
+msgstr ""
+
+#: ../libsvn_wc/externals.c:491 ../libsvn_wc/externals.c:514
+#, c-format
+msgid "This editor can only update '%s'"
+msgstr ""
+
+#: ../libsvn_wc/externals.c:529 ../libsvn_wc/externals.c:976
+#, c-format
+msgid "Node '%s' is no existing file external"
+msgstr ""
+
+#: ../libsvn_wc/externals.c:1551
+#, c-format
+msgid "URL '%s' does not begin with a scheme"
+msgstr ""
+
+#: ../libsvn_wc/externals.c:1606
+#, c-format
+msgid "Illegal parent directory URL '%s'"
+msgstr ""
+
+#: ../libsvn_wc/externals.c:1645
+#, c-format
+msgid "Illegal repository root URL '%s'"
+msgstr ""
+
+#: ../libsvn_wc/externals.c:1690
+#, c-format
+msgid "The external relative URL '%s' cannot have backpaths, i.e. '..'"
+msgstr ""
+
+#: ../libsvn_wc/externals.c:1718
+#, c-format
+msgid "Unrecognized format for the relative external URL '%s'"
+msgstr ""
+
+#: ../libsvn_wc/lock.c:529
+#, c-format
+msgid "Path '%s' ends in '%s', which is unsupported for this operation"
+msgstr ""
+
+#: ../libsvn_wc/lock.c:773 ../libsvn_wc/wc_db.c:14193
+#, c-format
+msgid "Working copy '%s' locked"
+msgstr ""
+
+#: ../libsvn_wc/lock.c:918
+#, c-format
+msgid "Unable to check path existence for '%s'"
+msgstr ""
+
+#: ../libsvn_wc/lock.c:941
+#, c-format
+msgid "Expected '%s' to be a directory but found a file"
+msgstr ""
+
+#: ../libsvn_wc/lock.c:951
+#, c-format
+msgid "Can't retrieve an access baton for non-directory '%s'"
+msgstr ""
+
+#: ../libsvn_wc/lock.c:960
+#, c-format
+msgid "Directory '%s' is missing"
+msgstr ""
+
+#: ../libsvn_wc/lock.c:968
+#, c-format
+msgid "Working copy '%s' is not locked"
+msgstr ""
+
+#: ../libsvn_wc/lock.c:1382
+#, c-format
+msgid "No write-lock in '%s'"
+msgstr ""
+
+#: ../libsvn_wc/lock.c:1496
+#, c-format
+msgid "Can't obtain lock on non-directory '%s'."
+msgstr ""
+
+#: ../libsvn_wc/merge.c:1281 ../libsvn_wc/props.c:257
+#, c-format
+msgid "Can't merge into conflicted node '%s'"
+msgstr ""
+
+#: ../libsvn_wc/merge.c:1324 ../libsvn_wc/props.c:273
+#, c-format
+msgid "The property '%s' may not be merged into '%s'."
+msgstr ""
+
+#: ../libsvn_wc/node.c:1047
+#, c-format
+msgid "Incomplete copy information on path '%s'."
+msgstr ""
+
+#: ../libsvn_wc/node.c:1211
+#, c-format
+msgid "'%s' is not the root of the working copy '%s'"
+msgstr ""
+
+#: ../libsvn_wc/old-and-busted.c:123
+msgid "Invalid escape sequence"
+msgstr ""
+
+#: ../libsvn_wc/old-and-busted.c:130
+msgid "Invalid escaped character"
+msgstr ""
+
+#: ../libsvn_wc/old-and-busted.c:148 ../libsvn_wc/old-and-busted.c:177
+#: ../libsvn_wc/old-and-busted.c:241 ../libsvn_wc/old-and-busted.c:253
+msgid "Unexpected end of entry"
+msgstr ""
+
+#: ../libsvn_wc/old-and-busted.c:203
+#, c-format
+msgid "Entry contains non-canonical path '%s'"
+msgstr ""
+
+#: ../libsvn_wc/old-and-busted.c:275
+#, c-format
+msgid "Invalid value for field '%s'"
+msgstr ""
+
+#: ../libsvn_wc/old-and-busted.c:347
+#, c-format
+msgid "Found an unexpected \\0 in the file external '%s'"
+msgstr ""
+
+#: ../libsvn_wc/old-and-busted.c:391
+#, c-format
+msgid "Illegal file external revision kind %d for path '%s'"
+msgstr ""
+
+#: ../libsvn_wc/old-and-busted.c:489 ../libsvn_wc/old-and-busted.c:847
+#, c-format
+msgid "Entry '%s' has invalid node kind"
+msgstr ""
+
+#: ../libsvn_wc/old-and-busted.c:510 ../libsvn_wc/old-and-busted.c:827
+#, c-format
+msgid "Entry for '%s' has invalid repository root"
+msgstr ""
+
+#: ../libsvn_wc/old-and-busted.c:531 ../libsvn_wc/old-and-busted.c:872
+#, c-format
+msgid "Entry '%s' has invalid 'schedule' value"
+msgstr ""
+
+#: ../libsvn_wc/old-and-busted.c:681
+#, c-format
+msgid "Entry '%s' has invalid 'depth' value"
+msgstr ""
+
+#: ../libsvn_wc/old-and-busted.c:732
+#, c-format
+msgid "Entry '%s' has invalid '%s' value"
+msgstr ""
+
+#: ../libsvn_wc/old-and-busted.c:1085
+#, c-format
+msgid "XML parser failed in '%s'"
+msgstr ""
+
+#: ../libsvn_wc/old-and-busted.c:1141
+msgid "Missing default entry"
+msgstr ""
+
+#: ../libsvn_wc/old-and-busted.c:1146
+msgid "Default entry has no revision number"
+msgstr ""
+
+#: ../libsvn_wc/old-and-busted.c:1151
+msgid "Default entry is missing URL"
+msgstr ""
+
+#: ../libsvn_wc/old-and-busted.c:1230
+#, c-format
+msgid "Invalid version line in entries file of '%s'"
+msgstr ""
+
+#: ../libsvn_wc/old-and-busted.c:1247
+msgid "Missing entry terminator"
+msgstr ""
+
+#: ../libsvn_wc/old-and-busted.c:1250
+msgid "Invalid entry terminator"
+msgstr ""
+
+#: ../libsvn_wc/old-and-busted.c:1254
+#, c-format
+msgid "Error at entry %d in entries file for '%s':"
+msgstr ""
+
+#: ../libsvn_wc/props.c:236
+#, c-format
+msgid "The node '%s' does not have properties in this state."
+msgstr ""
+
+#: ../libsvn_wc/props.c:401
+#, c-format
+msgid ""
+"Trying to add new property '%s'\n"
+"but the property already exists.\n"
+msgstr ""
+
+#: ../libsvn_wc/props.c:410
+#, c-format
+msgid ""
+"Trying to add new property '%s'\n"
+"but the property has been locally deleted.\n"
+msgstr ""
+
+#: ../libsvn_wc/props.c:424
+#, c-format
+msgid ""
+"Trying to delete property '%s'\n"
+"but the property has been locally added.\n"
+msgstr ""
+
+#: ../libsvn_wc/props.c:440
+#, c-format
+msgid ""
+"Trying to delete property '%s'\n"
+"but the property has been locally modified.\n"
+msgstr ""
+
+#: ../libsvn_wc/props.c:450
+#, c-format
+msgid ""
+"Trying to delete property '%s'\n"
+"but the property has been locally deleted and had a different value.\n"
+msgstr ""
+
+#: ../libsvn_wc/props.c:462
+#, c-format
+msgid ""
+"Trying to delete property '%s'\n"
+"but the local property value is different.\n"
+msgstr ""
+
+#: ../libsvn_wc/props.c:481
+#, c-format
+msgid ""
+"Trying to change property '%s'\n"
+"but the local property value conflicts with the incoming change.\n"
+msgstr ""
+
+#: ../libsvn_wc/props.c:489
+#, c-format
+msgid ""
+"Trying to change property '%s'\n"
+"but the property has already been locally changed to a different value.\n"
+msgstr ""
+
+#: ../libsvn_wc/props.c:496
+#, c-format
+msgid ""
+"Trying to change property '%s'\n"
+"but the property has been locally deleted.\n"
+msgstr ""
+
+#: ../libsvn_wc/props.c:502
+#, c-format
+msgid ""
+"Trying to change property '%s'\n"
+"but the property has been locally added with a different value.\n"
+msgstr ""
+
+#: ../libsvn_wc/props.c:508
+#, c-format
+msgid ""
+"Trying to change property '%s'\n"
+"but the property does not exist locally.\n"
+msgstr ""
+
+#: ../libsvn_wc/props.c:612
+msgid "<<<<<<< (local property value)"
+msgstr ""
+
+#: ../libsvn_wc/props.c:613
+msgid ">>>>>>> (incoming property value)"
+msgstr ""
+
+#: ../libsvn_wc/props.c:648
+msgid "Local property value:\n"
+msgstr ""
+
+#: ../libsvn_wc/props.c:650 ../libsvn_wc/props.c:661
+msgid "Cannot display: property value is binary data\n"
+msgstr ""
+
+#: ../libsvn_wc/props.c:659
+msgid "Incoming property value:\n"
+msgstr ""
+
+#: ../libsvn_wc/props.c:1475 ../libsvn_wc/props.c:1884
+#: ../libsvn_wc/props.c:1985
+#, c-format
+msgid "Property '%s' is an entry property"
+msgstr ""
+
+#: ../libsvn_wc/props.c:1512 ../libsvn_wc/props.c:1519
+msgid "Failed to load properties"
+msgstr ""
+
+#: ../libsvn_wc/props.c:1555
+#, c-format
+msgid "Cannot set '%s' on a directory ('%s')"
+msgstr ""
+
+#: ../libsvn_wc/props.c:1562
+#, c-format
+msgid "Cannot set '%s' on a file ('%s')"
+msgstr ""
+
+#: ../libsvn_wc/props.c:1641
+#, c-format
+msgid "Can't set '%s': file '%s' has binary mime type property"
+msgstr ""
+
+#: ../libsvn_wc/props.c:1686
+msgid "Failed to load current properties"
+msgstr ""
+
+#: ../libsvn_wc/props.c:1906
+#, c-format
+msgid "Can't set properties on '%s': invalid status for updating properties."
+msgstr ""
+
+#: ../libsvn_wc/props.c:1990
+#, c-format
+msgid "Property '%s' is a WC property, not a regular property"
+msgstr ""
+
+#: ../libsvn_wc/props.c:2084
+#, c-format
+msgid "Unrecognized line ending style '%s' for '%s'"
+msgstr ""
+
+#. scratch_
+#: ../libsvn_wc/props.c:2135
+#, c-format
+msgid " (%d more duplicate targets found)"
+msgstr ""
+
+#: ../libsvn_wc/props.c:2140
+#, c-format
+msgid "Invalid %s property on '%s': target '%s' appears more than once%s"
+msgstr ""
+
+#: ../libsvn_wc/props.c:2171
+#, c-format
+msgid "Cannot set non-inheritable mergeinfo on a non-directory ('%s')"
+msgstr ""
+
+#: ../libsvn_wc/relocate.c:111
+#, c-format
+msgid "Cannot relocate '%s' as it is not the root of a working copy"
+msgstr ""
+
+#: ../libsvn_wc/relocate.c:118
+#, c-format
+msgid ""
+"Cannot relocate '%s' as it is not the root of a working copy; try relocating "
+"'%s' instead"
+msgstr ""
+
+#: ../libsvn_wc/relocate.c:136
+msgid "Cannot relocate a single file"
+msgstr ""
+
+#: ../libsvn_wc/relocate.c:144
+#, c-format
+msgid "Invalid source URL prefix: '%s' (does not overlap target's URL '%s')"
+msgstr ""
+
+#: ../libsvn_wc/relocate.c:154
+#, c-format
+msgid "Invalid relocation destination: '%s' (not a URL)"
+msgstr ""
+
+#: ../libsvn_wc/relocate.c:161
+#, c-format
+msgid "Invalid relocation destination: '%s' (does not point to target)"
+msgstr ""
+
+#: ../libsvn_wc/tree_conflicts.c:136
+msgid "Unknown enumeration value in tree conflict description"
+msgstr ""
+
+#: ../libsvn_wc/tree_conflicts.c:160
+msgid "Invalid version info in tree conflict description"
+msgstr ""
+
+#: ../libsvn_wc/tree_conflicts.c:218
+#, c-format
+msgid "Invalid conflict info '%s' in tree conflict description"
+msgstr ""
+
+#: ../libsvn_wc/tree_conflicts.c:229
+msgid "Empty 'victim' field in tree conflict description"
+msgstr ""
+
+#: ../libsvn_wc/tree_conflicts.c:237
+msgid "Invalid 'node_kind' field in tree conflict description"
+msgstr ""
+
+#: ../libsvn_wc/tree_conflicts.c:430
+#, c-format
+msgid "Attempt to add tree conflict that already exists at '%s'"
+msgstr ""
+
+#: ../libsvn_wc/update_editor.c:999
+#, c-format
+msgid ""
+"Checksum mismatch while updating '%s':\n"
+" expected: %s\n"
+" actual: %s\n"
+msgstr ""
+
+#: ../libsvn_wc/update_editor.c:1134
+#, c-format
+msgid "'%s' is not valid as filename in directory '%s'"
+msgstr ""
+
+#: ../libsvn_wc/update_editor.c:1611
+#, c-format
+msgid "Unexpected attempt to add a node at path '%s'"
+msgstr ""
+
+#: ../libsvn_wc/update_editor.c:1622
+#, c-format
+msgid "Unexpected attempt to edit, delete, or replace a node at path '%s'"
+msgstr ""
+
+#: ../libsvn_wc/update_editor.c:2036
+#, c-format
+msgid ""
+"Failed to add directory '%s': object of the same name as the administrative "
+"directory"
+msgstr ""
+
+#: ../libsvn_wc/update_editor.c:2693
+msgid "Couldn't do property merge"
+msgstr ""
+
+#: ../libsvn_wc/update_editor.c:3086
+#, c-format
+msgid ""
+"Failed to mark '%s' absent: item of the same name is already scheduled for "
+"addition"
+msgstr ""
+
+#: ../libsvn_wc/update_editor.c:3174
+#, c-format
+msgid ""
+"Failed to add file '%s': object of the same name as the administrative "
+"directory"
+msgstr ""
+
+#: ../libsvn_wc/update_editor.c:3695
+#, c-format
+msgid ""
+"Checksum mismatch for '%s':\n"
+" expected: %s\n"
+" recorded: %s\n"
+msgstr ""
+
+#: ../libsvn_wc/update_editor.c:5254
+#, c-format
+msgid "Node '%s' exists."
+msgstr ""
+
+#: ../libsvn_wc/update_editor.c:5314
+#, c-format
+msgid "Copyfrom-url '%s' has different repository root than '%s'"
+msgstr ""
+
+#: ../libsvn_wc/update_editor.c:5512
+#, c-format
+msgid "'%s' is not an unmodified copied directory"
+msgstr ""
+
+#: ../libsvn_wc/update_editor.c:5523
+#, c-format
+msgid "Copyfrom '%s' doesn't match original location of '%s'"
+msgstr ""
+
+#: ../libsvn_wc/upgrade.c:255
+#, c-format
+msgid "Missing end of line in wcprops file for '%s'"
+msgstr ""
+
+#: ../libsvn_wc/upgrade.c:631
+#, c-format
+msgid ""
+"Working copy '%s' can't be upgraded because the repository root is not "
+"available and can't be retrieved"
+msgstr ""
+
+#: ../libsvn_wc/upgrade.c:638
+#, c-format
+msgid ""
+"Working copy '%s' can't be upgraded because the repository uuid is not "
+"available and can't be retrieved"
+msgstr ""
+
+#: ../libsvn_wc/upgrade.c:645
+#, c-format
+msgid "Working copy '%s' can't be upgraded because it doesn't have a url"
+msgstr ""
+
+#: ../libsvn_wc/upgrade.c:690
+msgid "Error parsing tree conflict skel"
+msgstr ""
+
+#: ../libsvn_wc/upgrade.c:1173
+#, c-format
+msgid ""
+"The working copy at '%s' is format 22 with WORKING nodes; use a format 22 "
+"client to diff/revert before using this client"
+msgstr ""
+
+#: ../libsvn_wc/upgrade.c:1217
+#, c-format
+msgid ""
+"The working copy at '%s' is format 26 with conflicts; use a format 26 client "
+"to resolve before using this client"
+msgstr ""
+
+#: ../libsvn_wc/upgrade.c:1723
+msgid ""
+"Cannot upgrade with existing logs; run a cleanup operation on this working "
+"copy using a client version which is compatible with this working copy's "
+"format (such as the version you are upgrading from), then retry the upgrade "
+"with the current version"
+msgstr ""
+
+#: ../libsvn_wc/upgrade.c:1792
+msgid ""
+"This working copy is corrupt and cannot be upgraded. Please check out a new "
+"working copy."
+msgstr ""
+
+#: ../libsvn_wc/upgrade.c:1837
+msgid "(unreleased development version)"
+msgstr ""
+
+#: ../libsvn_wc/upgrade.c:1853
+#, c-format
+msgid "Working copy '%s' is too old (format %d, created by Subversion %s)"
+msgstr ""
+
+#: ../libsvn_wc/upgrade.c:1863
+#, c-format
+msgid ""
+"Working copy '%s' is an old development version (format %d); to upgrade it, "
+"use a format 18 client, then use 'tools/dev/wc-ng/bump-to-19.py', then use "
+"the current client"
+msgstr ""
+
+#: ../libsvn_wc/upgrade.c:2092
+#, c-format
+msgid "Can't upgrade '%s' as it is not a working copy"
+msgstr ""
+
+#: ../libsvn_wc/upgrade.c:2141
+#, c-format
+msgid "Can't upgrade '%s' as it is not a working copy root, the root is '%s'"
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:452
+#, c-format
+msgid "No REPOSITORY table entry for id '%ld'"
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:773
+#, c-format
+msgid "The file '%s' has no checksum."
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:2548 ../libsvn_wc/wc_db.c:2933
+#: ../libsvn_wc/wc_db.c:9404
+#, c-format
+msgid "The node '%s' has a corrupt checksum value."
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:2737
+#, c-format
+msgid "The node '%s' has a BASE status that has no properties."
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:3563
+#, c-format
+msgid "The node '%s' is not an external."
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:3977
+#, c-format
+msgid "Expected node '%s' to be deleted."
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:6493 ../libsvn_wc/wc_db.c:6572
+#, c-format
+msgid "Can't revert '%s' without reverting children"
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:6669
+#, c-format
+msgid "Can't revert '%s' without reverting parent"
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:6788
+#, c-format
+msgid "Unsupported depth for revert of '%s'"
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:7764
+#, c-format
+msgid "Cannot delete '%s' as '%s' is excluded by server"
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:7775
+#, c-format
+msgid "Cannot delete '%s' as it is excluded by server"
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:7782
+#, c-format
+msgid "Cannot delete '%s' as it is excluded"
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:8239
+#, c-format
+msgid "Cannot move '%s' to '%s' because they are not in the same working copy"
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:8597
+#, c-format
+msgid "Corrupt data for '%s'"
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:8904
+#, c-format
+msgid ""
+"The node '%s' comes from unexpected repository '%s', expected '%s'; if this "
+"node is a file external using the correct URL in the external definition can "
+"fix the problem, see issue #4087"
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:9529
+#, c-format
+msgid "The node '%s' is not in working copy '%s'"
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:9566
+#, c-format
+msgid "The node '%s' is not installable"
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:9995 ../libsvn_wc/wc_db.c:10254
+#, c-format
+msgid "The node '%s' has a status that has no properties."
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:12121
+#, c-format
+msgid "Expected node '%s' to be added."
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:12467
+#, c-format
+msgid "Path '%s' was not moved here"
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:12536
+#, c-format
+msgid "The base node '%s' was not found."
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:12968
+#, c-format
+msgid ""
+"The properties of '%s' are in an indeterminate state and cannot be upgraded. "
+"See issue #2530."
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:12980
+#, c-format
+msgid "Insufficient NODES rows for '%s'"
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:13127
+#, c-format
+msgid "Repository '%s' not found in the database"
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:14114 ../libsvn_wc/wc_db.c:14162
+#, c-format
+msgid "'%s' is already locked."
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:14119 ../libsvn_wc/wc_db.c:14170
+#, c-format
+msgid "Working copy '%s' locked."
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:14242
+#, c-format
+msgid "'%s' is already locked via '%s'."
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:14416
+#, c-format
+msgid "Working copy not locked at '%s'."
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:14799
+#, c-format
+msgid "Modification of '%s' already exists"
+msgstr ""
+
+#. If EXPRESSION is false, cause the caller to return an SVN_ERR_WC_CORRUPT
+#. * error, showing EXPRESSION and the caller's LOCAL_RELPATH in the message.
+#: ../libsvn_wc/wc_db.c:15441
+#, c-format
+msgid "database inconsistency at local_relpath='%s' verifying expression '%s'"
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:15565
+#, c-format
+msgid "Can't upgrade '%s' as it is not a working copy root"
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:15571
+#, c-format
+msgid ""
+"Working copy '%s' is too old and must be upgraded to at least format %d, as "
+"created by Subversion %s"
+msgstr ""
+
+#: ../libsvn_wc/wc_db.c:15589
+msgid "Working copy upgrade failed"
+msgstr ""
+
+#: ../libsvn_wc/wc_db_pristine.c:125 ../libsvn_wc/wc_db_pristine.c:457
+#, c-format
+msgid "The pristine text with checksum '%s' was not found"
+msgstr ""
+
+#: ../libsvn_wc/wc_db_pristine.c:191
+#, c-format
+msgid "Pristine text '%s' not present"
+msgstr ""
+
+#: ../libsvn_wc/wc_db_pristine.c:224
+#, c-format
+msgid "Can't read '%s' from pristine store because no checksum supplied"
+msgstr ""
+
+#: ../libsvn_wc/wc_db_pristine.c:328
+#, c-format
+msgid "New pristine text '%s' has different size: %ld versus %ld"
+msgstr ""
+
+#: ../libsvn_wc/wc_db_pristine.c:496
+#, c-format
+msgid "The pristine text with MD5 checksum '%s' was not found"
+msgstr ""
+
+#: ../libsvn_wc/wc_db_update_move.c:282 ../libsvn_wc/wc_db_update_move.c:306
+#, c-format
+msgid "'%s' already in conflict"
+msgstr ""
+
+#: ../libsvn_wc/wc_db_update_move.c:1382
+#, c-format
+msgid "'%s' is not in conflict"
+msgstr ""
+
+#: ../libsvn_wc/wc_db_update_move.c:1395
+#, c-format
+msgid "'%s' is not a tree-conflict victim"
+msgstr ""
+
+#: ../libsvn_wc/wc_db_update_move.c:1754
+#, c-format
+msgid "Cannot auto-resolve tree-conflict on '%s'"
+msgstr ""
+
+#: ../libsvn_wc/wc_db_update_move.c:1817
+#, c-format
+msgid ""
+"Cannot apply update because move source %s' is a mixed-revision working copy"
+msgstr ""
+
+#: ../libsvn_wc/wc_db_update_move.c:1828
+#, c-format
+msgid "Cannot apply update because move source '%s' is a switched subtree"
+msgstr ""
+
+#: ../libsvn_wc/wc_db_update_move.c:1879
+#, c-format
+msgid "The node '%s' has not been moved away"
+msgstr ""
+
+#: ../libsvn_wc/wc_db_update_move.c:1908
+#, c-format
+msgid "'%s' is not deleted"
+msgstr ""
+
+#: ../libsvn_wc/wc_db_util.c:69
+#, c-format
+msgid "Missing a row in WCROOT."
+msgstr ""
+
+#: ../libsvn_wc/wc_db_util.c:135
+#, c-format
+msgid "Working copy database '%s' not found"
+msgstr ""
+
+#: ../libsvn_wc/wc_db_wcroot.c:276
+#, c-format
+msgid ""
+"Working copy format of '%s' is too old (%d); please check out your working "
+"copy again"
+msgstr ""
+
+#: ../libsvn_wc/wc_db_wcroot.c:286
+#, c-format
+msgid ""
+"This client is too old to work with the working copy at\n"
+"'%s' (format %d).\n"
+"You need to get a newer Subversion client. For more details, see\n"
+" http://subversion.apache.org/faq.html#working-copy-format-change\n"
+msgstr ""
+
+#: ../libsvn_wc/wc_db_wcroot.c:307
+msgid "Cleanup with an older 1.7 client before upgrading with this client"
+msgstr ""
+
+#: ../libsvn_wc/wc_db_wcroot.c:318
+#, c-format
+msgid ""
+"The working copy at '%s'\n"
+"is too old (format %d) to work with client version '%s' (expects format %d). "
+"You need to upgrade the working copy first.\n"
+msgstr ""
+
+#: ../libsvn_wc/wc_db_wcroot.c:396
+#, c-format
+msgid "The symlink at '%s' points nowhere"
+msgstr ""
+
+#: ../libsvn_wc/wc_db_wcroot.c:716
+#, c-format
+msgid "Missing a row in WCROOT for '%s'."
+msgstr ""
+
+#: ../libsvn_wc/wc_db_wcroot.c:771
+#, c-format
+msgid "The working copy at '%s' is corrupt."
+msgstr ""
+
+#: ../libsvn_wc/wc_db_wcroot.c:787
+#, c-format
+msgid "The working copy database at '%s' is missing."
+msgstr ""
+
+#: ../libsvn_wc/wc_db_wcroot.c:796
+#, c-format
+msgid "The working copy database at '%s' is corrupt."
+msgstr ""
+
+#: ../libsvn_wc/wc_db_wcroot.c:954
+#, c-format
+msgid "'%s' is not a working copy root"
+msgstr ""
+
+#: ../libsvn_wc/workqueue.c:518
+#, c-format
+msgid ""
+"Can't install '%s' from pristine store, because no checksum is recorded for "
+"this file"
+msgstr ""
+
+#: ../libsvn_wc/workqueue.c:1499
+#, c-format
+msgid "Unrecognized work item in the queue"
+msgstr ""
+
+#: ../libsvn_wc/workqueue.c:1579
+#, c-format
+msgid ""
+"Failed to run the WC DB work queue associated with '%s', work item %d %s"
+msgstr ""
+
+#: ../svn/add-cmd.c:101
+msgid "Could not add all targets because some targets don't exist"
+msgstr ""
+
+#: ../svn/add-cmd.c:105
+msgid "Could not add all targets because some targets are already versioned"
+msgstr ""
+
+#: ../svn/blame-cmd.c:303 ../svn/list-cmd.c:300
+msgid "'verbose' option invalid in XML mode"
+msgstr ""
+
+#: ../svn/blame-cmd.c:315 ../svn/info-cmd.c:613 ../svn/list-cmd.c:312
+#: ../svn/status-cmd.c:308
+msgid "'incremental' option only valid in XML mode"
+msgstr ""
+
+#: ../svn/blame-cmd.c:378
+#, c-format
+msgid "Skipping binary file (use --force to treat as text): '%s'\n"
+msgstr ""
+
+#: ../svn/blame-cmd.c:415
+msgid "Could not perform blame on all targets because some targets don't exist"
+msgstr ""
+
+#: ../svn/cat-cmd.c:102
+msgid "Could not cat all targets because some targets don't exist"
+msgstr ""
+
+#: ../svn/cat-cmd.c:106
+msgid "Could not cat all targets because some targets are not versioned"
+msgstr ""
+
+#: ../svn/cat-cmd.c:110
+msgid "Could not cat all targets because some targets are directories"
+msgstr ""
+
+#: ../svn/changelist-cmd.c:135
+msgid ""
+"Could not set changelists on all targets because some targets don't exist"
+msgstr ""
+
+#: ../svn/changelist-cmd.c:140
+msgid ""
+"Could not set changelists on all targets because some targets are not "
+"versioned"
+msgstr ""
+
+#: ../svn/checkout-cmd.c:133 ../svn/switch-cmd.c:138
+#, c-format
+msgid "'%s' does not appear to be a URL"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:80
+msgid "local file edit"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:82
+msgid "local file obstruction"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:84
+msgid "local file delete"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:86
+msgid "local file missing"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:88
+msgid "local file unversioned"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:90
+msgid "local file add"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:92
+msgid "local file replace"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:94
+msgid "local file moved away"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:96
+msgid "local file moved here"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:103
+msgid "local dir edit"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:105
+msgid "local dir obstruction"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:107
+msgid "local dir delete"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:109
+msgid "local dir missing"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:111
+msgid "local dir unversioned"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:113
+msgid "local dir add"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:115
+msgid "local dir replace"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:117
+msgid "local dir moved away"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:119
+msgid "local dir moved here"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:141
+msgid "incoming file edit"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:143
+msgid "incoming file add"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:145
+msgid "incoming file delete"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:147
+msgid "incoming file replace"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:154
+msgid "incoming dir edit"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:156
+msgid "incoming dir add"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:158
+msgid "incoming dir delete"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:160
+msgid "incoming dir replace"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:178
+msgid "upon update"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:179
+msgid "upon switch"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:180
+msgid "upon merge"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:181
+msgid "upon none"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:200
+msgid "local edit"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:203
+msgid "local add"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:206
+msgid "local delete"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:209
+msgid "local obstruction"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:212
+#, c-format
+msgid "local %s"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:220
+msgid "incoming edit"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:223
+msgid "incoming add"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:226
+msgid "incoming delete"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:229
+#, c-format
+msgid "incoming %s"
+msgstr ""
+
+#: ../svn/cl-conflicts.c:235 ../svn/cl-conflicts.c:277
+#, c-format
+msgid "%s, %s %s"
+msgstr ""
+
+#. A catch-all message for very rare or nominally impossible cases.
+#. It will not be pretty, but is closer to an internal error than
+#. an ordinary user-facing string.
+#: ../svn/cl-conflicts.c:285
+#, c-format
+msgid "local: %s %s incoming: %s %s %s"
+msgstr ""
+
+#: ../svn/cleanup-cmd.c:92
+#, c-format
+msgid ""
+"Working copy locked; try running 'svn cleanup' on the root of the working "
+"copy ('%s') instead."
+msgstr ""
+
+#: ../svn/commit-cmd.c:80
+#, c-format
+msgid ""
+"svn: The depth of this commit is '%s', but copies are always performed "
+"recursively in the repository.\n"
+msgstr ""
+
+#: ../svn/commit-cmd.c:116
+msgid "Commit targets must be local paths"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:155 ../svn/conflict-callbacks.c:172
+msgid "MINE"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:160 ../svn/conflict-callbacks.c:170
+msgid "THEIRS"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:163
+msgid "MERGED"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:220 ../svn/conflict-callbacks.c:276
+msgid "||||||| ORIGINAL"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:221
+msgid "<<<<<<< MINE (select with 'mc')"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:222
+msgid ">>>>>>> THEIRS (select with 'tc')"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:277
+msgid "<<<<<<< MINE"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:278
+msgid ">>>>>>> THEIRS"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:333 ../svn/file-merge.c:503
+msgid "No editor found."
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:342 ../svn/file-merge.c:515
+msgid "Error running editor."
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:352
+#, c-format
+msgid ""
+"Invalid option; there's no merged version to edit.\n"
+"\n"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:411
+msgid "No merge tool found, try '(m) merge' instead.\n"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:419
+msgid "Error running merge tool, try '(m) merge' instead."
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:451
+msgid "change merged file in an editor [edit]"
+msgstr ""
+
+#. Translators: keep long_desc below 70 characters (wrap with a left
+#. margin of 9 spaces if needed); don't translate the words within square
+#. brackets.
+#: ../svn/conflict-callbacks.c:451
+msgid "edit file"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:454
+msgid "show all changes made to merged file"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:454
+msgid "show diff"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:456
+msgid "accept merged version of file"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:456 ../svn/conflict-callbacks.c:501
+#: ../svn/conflict-callbacks.c:515
+msgid "mark resolved"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:459 ../svn/conflict-callbacks.c:498
+msgid "display conflict"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:459
+msgid "show all conflicts (ignoring merged version)"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:461
+msgid "accept my version for all conflicts (same) [mine-conflict]"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:461
+msgid "my side of conflict"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:464
+msgid "accept their version for all conflicts (same) [theirs-conflict]"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:464
+msgid "their side of conflict"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:469
+msgid "accept my version of entire file (even non-conflicts) [mine-full]"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:469 ../svn/conflict-callbacks.c:492
+msgid "my version"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:472
+msgid "accept their version of entire file (same) [theirs-full]"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:472 ../svn/conflict-callbacks.c:495
+msgid "their version"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:476 ../svn/util.c:774
+msgid "merge"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:476
+msgid "use internal merge tool to resolve conflict"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:478
+msgid "launch external tool to resolve conflict [launch]"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:478
+msgid "launch tool"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:480 ../svn/conflict-callbacks.c:503
+msgid "mark the conflict to be resolved later [postpone]"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:480 ../svn/conflict-callbacks.c:503
+#: ../svn/conflict-callbacks.c:517 ../svn/conflict-callbacks.c:535
+#: ../svn/conflict-callbacks.c:549 ../svn/conflict-callbacks.c:565
+#: ../svn/conflict-callbacks.c:581
+msgid "postpone"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:483 ../svn/conflict-callbacks.c:506
+#: ../svn/conflict-callbacks.c:519 ../svn/conflict-callbacks.c:537
+#: ../svn/conflict-callbacks.c:551 ../svn/conflict-callbacks.c:567
+#: ../svn/conflict-callbacks.c:583
+msgid "postpone all remaining conflicts"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:483 ../svn/conflict-callbacks.c:506
+#: ../svn/conflict-callbacks.c:519 ../svn/conflict-callbacks.c:537
+#: ../svn/conflict-callbacks.c:551 ../svn/conflict-callbacks.c:567
+#: ../svn/conflict-callbacks.c:583
+msgid "quit resolution"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:485
+msgid "show all options"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:485
+msgid "show this list (also 'h', '?')"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:492
+msgid "accept my version of entire property (even non-conflicts) [mine-full]"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:495
+msgid "accept their version of entire property (same) [theirs-full]"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:498
+msgid "show conflicts in this property"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:499
+msgid "change merged property value in an editor [edit]"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:499
+msgid "edit property"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:501
+msgid "accept edited version of property"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:508 ../svn/conflict-callbacks.c:521
+#: ../svn/conflict-callbacks.c:539 ../svn/conflict-callbacks.c:553
+#: ../svn/conflict-callbacks.c:569 ../svn/conflict-callbacks.c:585
+msgid "help"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:508 ../svn/conflict-callbacks.c:521
+#: ../svn/conflict-callbacks.c:539 ../svn/conflict-callbacks.c:553
+#: ../svn/conflict-callbacks.c:569 ../svn/conflict-callbacks.c:585
+msgid "show this help (also '?')"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:515
+msgid "accept current working copy state"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:517 ../svn/conflict-callbacks.c:535
+#: ../svn/conflict-callbacks.c:549 ../svn/conflict-callbacks.c:565
+#: ../svn/conflict-callbacks.c:581
+msgid "resolve the conflict later [postpone]"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:527
+msgid "apply update (recommended)"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:528
+msgid "apply update to the move destination [mine-conflict]"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:531
+msgid "discard update (breaks move)"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:531
+msgid "discard update, mark resolved, the move will will become a copy"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:545
+msgid "apply update to move destination"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:546
+msgid "apply incoming update to move destination [mine-conflict]"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:559 ../svn/conflict-callbacks.c:575
+msgid "keep affected local moves"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:559
+msgid "keep any local moves affected by this deletion [mine-conflict]"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:562 ../svn/conflict-callbacks.c:578
+msgid "mark resolved (breaks moves)"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:562
+msgid "mark resolved, any affected moves will become copies"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:575
+msgid "keep any moves affected by this replacement [mine-conflict]"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:578
+msgid "mark resolved (any affected moves will become copies)"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:614
+msgid "Select:"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:641
+#, c-format
+msgid " (%s) %s"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:681
+msgid ""
+"Words in square brackets are the corresponding --accept option arguments.\n"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:720
+#, c-format
+msgid ""
+"Unrecognized option.\n"
+"\n"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:748
+#, c-format
+msgid "Conflict discovered in file '%s'.\n"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:818
+#, c-format
+msgid ""
+"Invalid option; cannot display conflicts for a binary file.\n"
+"\n"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:827
+#, c-format
+msgid ""
+"Invalid option; original files not available.\n"
+"\n"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:839
+#, c-format
+msgid ""
+"Invalid option; there's no merged version to diff.\n"
+"\n"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:859
+#, c-format
+msgid ""
+"Invalid option; can only resolve text conflicts with the internal merge "
+"tool.\n"
+"\n"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:885 ../svn/conflict-callbacks.c:902
+#, c-format
+msgid ""
+"Invalid option.\n"
+"\n"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:911
+#, c-format
+msgid ""
+"Invalid option; cannot choose based on conflicts in a binary file.\n"
+"\n"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:925
+#, c-format
+msgid ""
+"Invalid option; use diff/edit/merge/launch before choosing 'mark resolved'.\n"
+"\n"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:966
+#, c-format
+msgid "Conflict for property '%s' discovered on '%s'.\n"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:1024
+#, c-format
+msgid ""
+"Invalid option; please edit the property first.\n"
+"\n"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:1061
+#, c-format
+msgid ""
+"Tree conflict on '%s'\n"
+" > %s\n"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:1179
+msgid "No editor found; leaving all conflicts."
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:1188
+msgid "Error running editor; leaving all conflicts."
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:1224
+msgid "No merge tool found; leaving all conflicts."
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:1233
+msgid "Error running merge tool; leaving all conflicts."
+msgstr ""
+
+#: ../svn/copy-cmd.c:123 ../svn/util.c:957
+#, c-format
+msgid "'%s': a peg revision is not allowed here"
+msgstr ""
+
+#: ../svn/copy-cmd.c:163 ../svn/delete-cmd.c:69 ../svn/mkdir-cmd.c:68
+#: ../svn/move-cmd.c:77 ../svn/propedit-cmd.c:260
+msgid ""
+"Local, non-commit operations do not take a log message or revision properties"
+msgstr ""
+
+#: ../svn/diff-cmd.c:208
+msgid "'--xml' option only valid with '--summarize' option"
+msgstr ""
+
+#: ../svn/diff-cmd.c:299
+msgid "'--new' option only valid with '--old' option"
+msgstr ""
+
+#: ../svn/diff-cmd.c:317
+msgid ""
+"'svn diff [-r N[:M]] [TARGET[@REV]...]' does not support mixed target types. "
+"Try using the --old and --new options or one of the shorthand invocations "
+"listed in 'svn help diff'."
+msgstr ""
+
+#: ../svn/diff-cmd.c:355
+#, c-format
+msgid "Path '%s' not relative to base URLs"
+msgstr ""
+
+#: ../svn/export-cmd.c:113
+msgid ""
+"Destination directory exists; please remove the directory or use --force to "
+"overwrite"
+msgstr ""
+
+#: ../svn/export-cmd.c:122 ../svn/list-cmd.c:412 ../svn/switch-cmd.c:188
+#: ../svn/update-cmd.c:177
+msgid "Failure occurred processing one or more externals definitions"
+msgstr ""
+
+#: ../svn/file-merge.c:135 ../svn/file-merge.c:805
+msgid "Could not write data to merged file"
+msgstr ""
+
+#: ../svn/file-merge.c:491
+msgid "Could not write data to temporary file"
+msgstr ""
+
+#: ../svn/file-merge.c:600
+msgid "Conflicting section found during merge:"
+msgstr ""
+
+#: ../svn/file-merge.c:603
+#, c-format
+msgid "(1) their version (at line %lu)"
+msgstr ""
+
+#: ../svn/file-merge.c:608
+#, c-format
+msgid "(2) your version (at line %lu)"
+msgstr ""
+
+#: ../svn/file-merge.c:657
+msgid ""
+"Select: (1) use their version, (2) use your version,\n"
+" (12) their version first, then yours,\n"
+" (21) your version first, then theirs,\n"
+" (e1) edit their version and use the result,\n"
+" (e2) edit your version and use the result,\n"
+" (eb) edit both versions and use the result,\n"
+" (p) postpone this conflicting section leaving conflict markers,\n"
+" (a) abort file merge and return to main menu: "
+msgstr ""
+
+#: ../svn/file-merge.c:888
+#, c-format
+msgid "Merging '%s'.\n"
+msgstr ""
+
+#: ../svn/file-merge.c:935
+#, c-format
+msgid "Merge of '%s' aborted.\n"
+msgstr ""
+
+#: ../svn/file-merge.c:953
+#, c-format
+msgid ""
+"Could not write merged result to '%s', saved instead at '%s'.\n"
+"'%s' remains in conflict.\n"
+msgstr ""
+
+#: ../svn/file-merge.c:971
+#, c-format
+msgid "Merge of '%s' completed (remains in conflict).\n"
+msgstr ""
+
+#: ../svn/file-merge.c:975
+#, c-format
+msgid "Merge of '%s' completed.\n"
+msgstr ""
+
+#: ../svn/help-cmd.c:53
+#, c-format
+msgid ""
+"usage: svn <subcommand> [options] [args]\n"
+"Subversion command-line client, version %s.\n"
+"Type 'svn help <subcommand>' for help on a specific subcommand.\n"
+"Type 'svn --version' to see the program version and RA modules\n"
+" or 'svn --version --quiet' to see just the version number.\n"
+"\n"
+"Most subcommands take file and/or directory arguments, recursing\n"
+"on the directories. If no arguments are supplied to such a\n"
+"command, it recurses on the current directory (inclusive) by default.\n"
+"\n"
+"Available subcommands:\n"
+msgstr ""
+
+#: ../svn/help-cmd.c:66
+msgid ""
+"Subversion is a tool for version control.\n"
+"For additional information, see http://subversion.apache.org/\n"
+msgstr ""
+
+#: ../svn/help-cmd.c:73 ../svnrdump/svnrdump.c:659 ../svnsync/svnsync.c:1857
+msgid ""
+"The following repository access (RA) modules are available:\n"
+"\n"
+msgstr ""
+
+#: ../svn/help-cmd.c:127
+msgid ""
+"WARNING: Plaintext password storage is enabled!\n"
+"\n"
+msgstr ""
+
+#: ../svn/import-cmd.c:87
+msgid "Repository URL required when importing"
+msgstr ""
+
+#: ../svn/import-cmd.c:91
+msgid "Too many arguments to import command"
+msgstr ""
+
+#: ../svn/import-cmd.c:107
+#, c-format
+msgid "Invalid URL '%s'"
+msgstr ""
+
+#: ../svn/info-cmd.c:95
+msgid "Resource is not under version control."
+msgstr ""
+
+#: ../svn/info-cmd.c:266 ../svnadmin/svnadmin.c:1744
+#, c-format
+msgid "Path: %s\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:273
+#, c-format
+msgid "Name: %s\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:277
+#, c-format
+msgid "Working Copy Root Path: %s\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:283
+#, c-format
+msgid "URL: %s\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:286
+#, c-format
+msgid "Relative URL: ^/%s\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:293
+#, c-format
+msgid "Repository Root: %s\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:297
+#, c-format
+msgid "Repository UUID: %s\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:301
+#, c-format
+msgid "Revision: %ld\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:306
+#, c-format
+msgid "Node Kind: file\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:310
+#, c-format
+msgid "Node Kind: directory\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:314
+#, c-format
+msgid "Node Kind: none\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:319
+#, c-format
+msgid "Node Kind: unknown\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:328
+#, c-format
+msgid "Schedule: normal\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:332
+#, c-format
+msgid "Schedule: add\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:336
+#, c-format
+msgid "Schedule: delete\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:340
+#, c-format
+msgid "Schedule: replace\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:356
+#, c-format
+msgid "Depth: empty\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:360
+#, c-format
+msgid "Depth: files\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:364
+#, c-format
+msgid "Depth: immediates\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:368
+#, c-format
+msgid "Depth: exclude\n"
+msgstr ""
+
+#. Other depths should never happen here.
+#: ../svn/info-cmd.c:379
+#, c-format
+msgid "Depth: INVALID\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:383
+#, c-format
+msgid "Copied From URL: %s\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:387
+#, c-format
+msgid "Copied From Rev: %ld\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:396 ../svn/info-cmd.c:398
+#, c-format
+msgid "Moved From: %s\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:409 ../svn/info-cmd.c:411
+#, c-format
+msgid "Moved To: %s\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:417
+#, c-format
+msgid "Last Changed Author: %s\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:421
+#, c-format
+msgid "Last Changed Rev: %ld\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:426
+msgid "Last Changed Date"
+msgstr ""
+
+#: ../svn/info-cmd.c:432
+msgid "Text Last Updated"
+msgstr ""
+
+#: ../svn/info-cmd.c:435
+#, c-format
+msgid "Checksum: %s\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:456
+#, c-format
+msgid "Conflict Previous Base File: %s\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:463
+#, c-format
+msgid "Conflict Previous Working File: %s\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:470
+#, c-format
+msgid "Conflict Current Base File: %s\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:479
+#, c-format
+msgid "Conflict Properties File: %s\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:491
+msgid "Tree conflict"
+msgstr ""
+
+#: ../svn/info-cmd.c:517
+msgid "Source left"
+msgstr ""
+
+#: ../svn/info-cmd.c:526
+msgid "Source right"
+msgstr ""
+
+#: ../svn/info-cmd.c:535
+#, c-format
+msgid "Lock Token: %s\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:539
+#, c-format
+msgid "Lock Owner: %s\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:544
+msgid "Lock Created"
+msgstr ""
+
+#: ../svn/info-cmd.c:548
+msgid "Lock Expires"
+msgstr ""
+
+#: ../svn/info-cmd.c:556
+#, c-format
+msgid ""
+"Lock Comment (%i line):\n"
+"%s\n"
+msgid_plural ""
+"Lock Comment (%i lines):\n"
+"%s\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../svn/info-cmd.c:565
+#, c-format
+msgid "Changelist: %s\n"
+msgstr ""
+
+#: ../svn/info-cmd.c:679
+msgid "Could not display info for all targets because some targets don't exist"
+msgstr ""
+
+#: ../svn/list-cmd.c:73
+msgid "%b %d %H:%M"
+msgstr ""
+
+#: ../svn/list-cmd.c:75
+msgid "%b %d %Y"
+msgstr ""
+
+#: ../svn/list-cmd.c:101
+#, c-format
+msgid "Listing external '%s' defined on '%s':\n"
+msgstr ""
+
+#: ../svn/list-cmd.c:421
+msgid "Could not list all targets because some targets don't exist"
+msgstr ""
+
+#: ../svn/lock-cmd.c:58
+msgid "Lock comment contains a zero byte"
+msgstr ""
+
+#: ../svn/log-cmd.c:144
+msgid "\n"
+msgstr ""
+
+#: ../svn/log-cmd.c:354
+msgid "(no author)"
+msgstr ""
+
+#: ../svn/log-cmd.c:360
+msgid "(no date)"
+msgstr ""
+
+#: ../svn/log-cmd.c:385
+#, c-format
+msgid " | %d line"
+msgid_plural " | %d lines"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../svn/log-cmd.c:401
+#, c-format
+msgid "Changed paths:\n"
+msgstr ""
+
+#: ../svn/log-cmd.c:418
+#, c-format
+msgid " (from %s:%ld)"
+msgstr ""
+
+#: ../svn/log-cmd.c:434
+#, c-format
+msgid "Reverse merged via:"
+msgstr ""
+
+#: ../svn/log-cmd.c:436
+#, c-format
+msgid "Merged via:"
+msgstr ""
+
+#: ../svn/log-cmd.c:689
+msgid "'with-all-revprops' option only valid in XML mode"
+msgstr ""
+
+#: ../svn/log-cmd.c:693
+msgid "'with-no-revprops' option only valid in XML mode"
+msgstr ""
+
+#: ../svn/log-cmd.c:697
+msgid "'with-revprop' option only valid in XML mode"
+msgstr ""
+
+#: ../svn/log-cmd.c:704
+msgid "'diff' option is not supported in XML mode"
+msgstr ""
+
+#: ../svn/log-cmd.c:710
+msgid "'quiet' and 'diff' options are mutually exclusive"
+msgstr ""
+
+#: ../svn/log-cmd.c:714
+msgid "'diff-cmd' option requires 'diff' option"
+msgstr ""
+
+#: ../svn/log-cmd.c:718
+msgid "'internal-diff' option requires 'diff' option"
+msgstr ""
+
+#: ../svn/log-cmd.c:722
+msgid "'extensions' option requires 'diff' option"
+msgstr ""
+
+#: ../svn/log-cmd.c:727
+msgid "'depth' option requires 'diff' option"
+msgstr ""
+
+#: ../svn/log-cmd.c:743
+msgid "-c and -r are mutually exclusive"
+msgstr ""
+
+#: ../svn/log-cmd.c:775
+#, c-format
+msgid ""
+"Only relative paths can be specified after a URL for 'svn log', but '%s' is "
+"not a relative path"
+msgstr ""
+
+#: ../svn/log-cmd.c:821
+#, c-format
+msgid "cannot assign with 'with-revprop' option (drop the '=')"
+msgstr ""
+
+#: ../svn/merge-cmd.c:107 ../svn/merge-cmd.c:131
+#, c-format
+msgid "--- Merging\n"
+msgstr ""
+
+#: ../svn/merge-cmd.c:175
+msgid "-r and -c can't be used with --reintegrate"
+msgstr ""
+
+#: ../svn/merge-cmd.c:230
+msgid "Merge source required"
+msgstr ""
+
+#: ../svn/merge-cmd.c:276
+msgid "Second revision required"
+msgstr ""
+
+#: ../svn/merge-cmd.c:285 ../svn/merge-cmd.c:312 ../svn/mergeinfo-cmd.c:267
+#: ../svnadmin/svnadmin.c:1719 ../svnlook/svnlook.c:2061
+#: ../svnlook/svnlook.c:2254 ../svnlook/svnlook.c:2358
+#: ../svnlook/svnlook.c:2393
+msgid "Too many arguments given"
+msgstr ""
+
+#: ../svn/merge-cmd.c:302
+msgid "Cannot specify a revision range with two URLs"
+msgstr ""
+
+#: ../svn/merge-cmd.c:406
+msgid "--reintegrate cannot be used with --ignore-ancestry"
+msgstr ""
+
+#: ../svn/merge-cmd.c:411
+msgid "--reintegrate cannot be used with --record-only"
+msgstr ""
+
+#: ../svn/merge-cmd.c:416
+msgid "--depth cannot be used with --reintegrate"
+msgstr ""
+
+#: ../svn/merge-cmd.c:421
+msgid "--force cannot be used with --reintegrate"
+msgstr ""
+
+#: ../svn/merge-cmd.c:426
+msgid "--reintegrate can only be used with a single merge source"
+msgstr ""
+
+#: ../svn/merge-cmd.c:430
+msgid "--allow-mixed-revisions cannot be used with --reintegrate"
+msgstr ""
+
+#: ../svn/merge-cmd.c:445
+msgid ""
+"Merge tracking not possible, use --ignore-ancestry or\n"
+"fix invalid mergeinfo in target with 'svn propset'"
+msgstr ""
+
+#: ../svn/mergeinfo-cmd.c:171
+msgid "last full merge"
+msgstr ""
+
+#: ../svn/mergeinfo-cmd.c:171
+msgid "youngest common ancestor"
+msgstr ""
+
+#: ../svn/mergeinfo-cmd.c:172
+msgid "repository path"
+msgstr ""
+
+#: ../svn/mergeinfo-cmd.c:172
+msgid "tip of branch"
+msgstr ""
+
+#: ../svn/mergeinfo-cmd.c:264
+msgid "Not enough arguments given"
+msgstr ""
+
+#: ../svn/mergeinfo-cmd.c:342
+msgid "--revision (-r) option valid only with --show-revs option"
+msgstr ""
+
+#: ../svn/mergeinfo-cmd.c:346
+msgid "Depth specification options valid only with --show-revs option"
+msgstr ""
+
+#: ../svn/mkdir-cmd.c:92
+msgid "Try 'svn add' or 'svn add --non-recursive' instead?"
+msgstr ""
+
+#: ../svn/mkdir-cmd.c:98
+msgid "Try 'svn mkdir --parents' instead?"
+msgstr ""
+
+#: ../svn/notify.c:132
+#, c-format
+msgid "%d remaining"
+msgid_plural "%d remaining"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../svn/notify.c:141
+#, c-format
+msgid "and %d already resolved"
+msgid_plural "and %d already resolved"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../svn/notify.c:163 ../svn/status-cmd.c:93
+#, c-format
+msgid "Summary of conflicts:\n"
+msgstr ""
+
+#: ../svn/notify.c:169
+#, c-format
+msgid " Text conflicts: %d\n"
+msgstr ""
+
+#: ../svn/notify.c:173
+#, c-format
+msgid " Property conflicts: %d\n"
+msgstr ""
+
+#: ../svn/notify.c:177
+#, c-format
+msgid " Tree conflicts: %d\n"
+msgstr ""
+
+#: ../svn/notify.c:184
+#, c-format
+msgid " Text conflicts: %s (%s)\n"
+msgstr ""
+
+#: ../svn/notify.c:189
+#, c-format
+msgid " Property conflicts: %s (%s)\n"
+msgstr ""
+
+#: ../svn/notify.c:194
+#, c-format
+msgid " Tree conflicts: %s (%s)\n"
+msgstr ""
+
+#: ../svn/notify.c:200
+#, c-format
+msgid " Skipped paths: %d\n"
+msgstr ""
+
+#: ../svn/notify.c:235
+#, c-format
+msgid "Skipped missing target: '%s'\n"
+msgstr ""
+
+#: ../svn/notify.c:242
+#, c-format
+msgid "Skipped target: '%s' -- copy-source is missing\n"
+msgstr ""
+
+#: ../svn/notify.c:249
+#, c-format
+msgid "Skipped '%s'\n"
+msgstr ""
+
+#: ../svn/notify.c:256
+#, c-format
+msgid "Skipped '%s' -- An obstructing working copy was found\n"
+msgstr ""
+
+#: ../svn/notify.c:263
+#, c-format
+msgid "Skipped '%s' -- Has no versioned parent\n"
+msgstr ""
+
+#: ../svn/notify.c:270
+#, c-format
+msgid "Skipped '%s' -- Access denied\n"
+msgstr ""
+
+#: ../svn/notify.c:277
+#, c-format
+msgid "Skipped '%s' -- Node remains in conflict\n"
+msgstr ""
+
+#: ../svn/notify.c:358
+#, c-format
+msgid "Restored '%s'\n"
+msgstr ""
+
+#: ../svn/notify.c:364
+#, c-format
+msgid "Reverted '%s'\n"
+msgstr ""
+
+#: ../svn/notify.c:370
+#, c-format
+msgid "Failed to revert '%s' -- try updating instead.\n"
+msgstr ""
+
+#: ../svn/notify.c:378
+#, c-format
+msgid "Resolved conflicted state of '%s'\n"
+msgstr ""
+
+#: ../svn/notify.c:473 ../svn/notify.c:513
+#, c-format
+msgid "> applied hunk ## -%lu,%lu +%lu,%lu ## with offset %s"
+msgstr ""
+
+#: ../svn/notify.c:490 ../svn/notify.c:527
+#, c-format
+msgid "> applied hunk @@ -%lu,%lu +%lu,%lu @@ with offset %s"
+msgstr ""
+
+#: ../svn/notify.c:548
+#, c-format
+msgid "> applied hunk ## -%lu,%lu +%lu,%lu ## with fuzz %lu (%s)\n"
+msgstr ""
+
+#: ../svn/notify.c:558
+#, c-format
+msgid "> applied hunk @@ -%lu,%lu +%lu,%lu @@ with fuzz %lu\n"
+msgstr ""
+
+#: ../svn/notify.c:576
+#, c-format
+msgid "> rejected hunk ## -%lu,%lu +%lu,%lu ## (%s)\n"
+msgstr ""
+
+#: ../svn/notify.c:585
+#, c-format
+msgid "> rejected hunk @@ -%lu,%lu +%lu,%lu @@\n"
+msgstr ""
+
+#: ../svn/notify.c:599
+#, c-format
+msgid "> hunk ## -%lu,%lu +%lu,%lu ## already applied (%s)\n"
+msgstr ""
+
+#: ../svn/notify.c:609
+#, c-format
+msgid "> hunk @@ -%lu,%lu +%lu,%lu @@ already applied\n"
+msgstr ""
+
+#: ../svn/notify.c:669
+#, c-format
+msgid ""
+"\n"
+"Fetching external item into '%s':\n"
+msgstr ""
+
+#: ../svn/notify.c:695
+#, c-format
+msgid "Error handling externals definition for '%s':"
+msgstr ""
+
+#: ../svn/notify.c:708
+#, c-format
+msgid "Updating '%s':\n"
+msgstr ""
+
+#: ../svn/notify.c:722
+#, c-format
+msgid "Exported external at revision %ld.\n"
+msgstr ""
+
+#: ../svn/notify.c:723
+#, c-format
+msgid "Exported revision %ld.\n"
+msgstr ""
+
+#: ../svn/notify.c:731
+#, c-format
+msgid "Checked out external at revision %ld.\n"
+msgstr ""
+
+#: ../svn/notify.c:732
+#, c-format
+msgid "Checked out revision %ld.\n"
+msgstr ""
+
+#: ../svn/notify.c:743
+#, c-format
+msgid "Updated external to revision %ld.\n"
+msgstr ""
+
+#: ../svn/notify.c:744
+#, c-format
+msgid "Updated to revision %ld.\n"
+msgstr ""
+
+#: ../svn/notify.c:752
+#, c-format
+msgid "External at revision %ld.\n"
+msgstr ""
+
+#: ../svn/notify.c:753
+#, c-format
+msgid "At revision %ld.\n"
+msgstr ""
+
+#: ../svn/notify.c:765
+#, c-format
+msgid "External export complete.\n"
+msgstr ""
+
+#: ../svn/notify.c:766
+#, c-format
+msgid "Export complete.\n"
+msgstr ""
+
+#: ../svn/notify.c:773
+#, c-format
+msgid "External checkout complete.\n"
+msgstr ""
+
+#: ../svn/notify.c:774
+#, c-format
+msgid "Checkout complete.\n"
+msgstr ""
+
+#: ../svn/notify.c:781
+#, c-format
+msgid "External update complete.\n"
+msgstr ""
+
+#: ../svn/notify.c:782
+#, c-format
+msgid "Update complete.\n"
+msgstr ""
+
+#: ../svn/notify.c:798
+#, c-format
+msgid ""
+"\n"
+"Performing status on external item at '%s':\n"
+msgstr ""
+
+#: ../svn/notify.c:806
+#, c-format
+msgid "Status against revision: %6ld\n"
+msgstr ""
+
+#: ../svn/notify.c:815
+#, c-format
+msgid "Sending copy of %s\n"
+msgstr ""
+
+#: ../svn/notify.c:816
+#, c-format
+msgid "Sending %s\n"
+msgstr ""
+
+#: ../svn/notify.c:827
+#, c-format
+msgid "Adding copy of (bin) %s\n"
+msgstr ""
+
+#: ../svn/notify.c:828
+#, c-format
+msgid "Adding (bin) %s\n"
+msgstr ""
+
+#: ../svn/notify.c:836
+#, c-format
+msgid "Adding copy of %s\n"
+msgstr ""
+
+#: ../svn/notify.c:837
+#, c-format
+msgid "Adding %s\n"
+msgstr ""
+
+#: ../svn/notify.c:846
+#, c-format
+msgid "Deleting copy of %s\n"
+msgstr ""
+
+#: ../svn/notify.c:847
+#, c-format
+msgid "Deleting %s\n"
+msgstr ""
+
+#: ../svn/notify.c:856
+#, c-format
+msgid "Replacing copy of %s\n"
+msgstr ""
+
+#: ../svn/notify.c:857
+#, c-format
+msgid "Replacing %s\n"
+msgstr ""
+
+#: ../svn/notify.c:867 ../svnsync/sync.c:416
+#, c-format
+msgid "Transmitting file data "
+msgstr ""
+
+#: ../svn/notify.c:876 ../svnadmin/svnadmin.c:1698
+#, c-format
+msgid "'%s' locked by user '%s'.\n"
+msgstr ""
+
+#: ../svn/notify.c:882
+#, c-format
+msgid "'%s' unlocked.\n"
+msgstr ""
+
+#: ../svn/notify.c:909
+#, c-format
+msgid "--- Merging differences between repository URLs into '%s':\n"
+msgstr ""
+
+#: ../svn/notify.c:914
+#, c-format
+msgid "--- Merging r%ld into '%s':\n"
+msgstr ""
+
+#: ../svn/notify.c:918
+#, c-format
+msgid "--- Reverse-merging r%ld into '%s':\n"
+msgstr ""
+
+#: ../svn/notify.c:922
+#, c-format
+msgid "--- Merging r%ld through r%ld into '%s':\n"
+msgstr ""
+
+#: ../svn/notify.c:928
+#, c-format
+msgid "--- Reverse-merging r%ld through r%ld into '%s':\n"
+msgstr ""
+
+#: ../svn/notify.c:940
+#, c-format
+msgid "--- Recording mergeinfo for merge between repository URLs into '%s':\n"
+msgstr ""
+
+#: ../svn/notify.c:950
+#, c-format
+msgid "--- Recording mergeinfo for merge of r%ld into '%s':\n"
+msgstr ""
+
+#: ../svn/notify.c:955
+#, c-format
+msgid "--- Recording mergeinfo for reverse merge of r%ld into '%s':\n"
+msgstr ""
+
+#: ../svn/notify.c:960
+#, c-format
+msgid "--- Recording mergeinfo for merge of r%ld through r%ld into '%s':\n"
+msgstr ""
+
+#: ../svn/notify.c:965
+#, c-format
+msgid ""
+"--- Recording mergeinfo for reverse merge of r%ld through r%ld into '%s':\n"
+msgstr ""
+
+#: ../svn/notify.c:975
+#, c-format
+msgid "--- Eliding mergeinfo from '%s':\n"
+msgstr ""
+
+#: ../svn/notify.c:983
+#, c-format
+msgid "--- Merging differences between foreign repository URLs into '%s':\n"
+msgstr ""
+
+#: ../svn/notify.c:989
+#, c-format
+msgid "--- Merging (from foreign repository) r%ld into '%s':\n"
+msgstr ""
+
+#: ../svn/notify.c:994
+#, c-format
+msgid "--- Reverse-merging (from foreign repository) r%ld into '%s':\n"
+msgstr ""
+
+#: ../svn/notify.c:999
+#, c-format
+msgid "--- Merging (from foreign repository) r%ld through r%ld into '%s':\n"
+msgstr ""
+
+#: ../svn/notify.c:1005
+#, c-format
+msgid ""
+"--- Reverse-merging (from foreign repository) r%ld through r%ld into '%s':\n"
+msgstr ""
+
+#: ../svn/notify.c:1041
+#, c-format
+msgid "property '%s' set on '%s'\n"
+msgstr ""
+
+#: ../svn/notify.c:1049
+#, c-format
+msgid "property '%s' deleted from '%s'.\n"
+msgstr ""
+
+#: ../svn/notify.c:1057
+#, c-format
+msgid "Attempting to delete nonexistent property '%s' on '%s'\n"
+msgstr ""
+
+#: ../svn/notify.c:1066
+#, c-format
+msgid "property '%s' set on repository revision %ld\n"
+msgstr ""
+
+#: ../svn/notify.c:1074
+#, c-format
+msgid "property '%s' deleted from repository revision %ld\n"
+msgstr ""
+
+#: ../svn/notify.c:1081
+#, c-format
+msgid "Upgraded '%s'\n"
+msgstr ""
+
+#: ../svn/notify.c:1087
+#, c-format
+msgid "Redirecting to URL '%s':\n"
+msgstr ""
+
+#: ../svn/notify.c:1115
+#, c-format
+msgid "--- Copying from foreign repository URL '%s':\n"
+msgstr ""
+
+#: ../svn/notify.c:1124
+#, c-format
+msgid "Breaking move with source path '%s'\n"
+msgstr ""
+
+#: ../svn/propdel-cmd.c:88
+#, c-format
+msgid "Cannot specify revision for deleting versioned property '%s'"
+msgstr ""
+
+#: ../svn/propedit-cmd.c:62 ../svn/propedit-cmd.c:341
+#, c-format
+msgid "Set new value for property '%s' on '%s'\n"
+msgstr ""
+
+#: ../svn/propedit-cmd.c:96 ../svn/propset-cmd.c:97
+msgid ""
+"--encoding option applies only to textual Subversion-controlled properties"
+msgstr ""
+
+#: ../svn/propedit-cmd.c:162
+#, c-format
+msgid "Set new value for property '%s' on revision %ld\n"
+msgstr ""
+
+#: ../svn/propedit-cmd.c:168
+#, c-format
+msgid "No changes to property '%s' on revision %ld\n"
+msgstr ""
+
+#: ../svn/propedit-cmd.c:176
+#, c-format
+msgid "Cannot specify revision for editing versioned property '%s'"
+msgstr ""
+
+#: ../svn/propedit-cmd.c:204 ../svn/propset-cmd.c:172
+msgid "Explicit target argument required"
+msgstr ""
+
+#: ../svn/propedit-cmd.c:271
+#, c-format
+msgid "'%s' does not appear to be a working copy path"
+msgstr ""
+
+#: ../svn/propedit-cmd.c:348
+#, c-format
+msgid "No changes to property '%s' on '%s'\n"
+msgstr ""
+
+#: ../svn/propget-cmd.c:66
+msgid "Error writing to stream"
+msgstr ""
+
+#: ../svn/propget-cmd.c:186 ../svn/proplist-cmd.c:156
+#: ../svn/proplist-cmd.c:160 ../svnlook/svnlook.c:1754
+#: ../svnlook/svnlook.c:1908
+#, c-format
+msgid ""
+"Inherited properties on '%s',\n"
+"from '%s':\n"
+msgstr ""
+
+#. Not a --revprop
+#: ../svn/propget-cmd.c:196 ../svn/proplist-cmd.c:175
+#: ../svnlook/svnlook.c:1790 ../svnlook/svnlook.c:1943
+#, c-format
+msgid "Properties on '%s':\n"
+msgstr ""
+
+#: ../svn/propget-cmd.c:326
+msgid "--verbose cannot be used with --revprop or --strict or --xml"
+msgstr ""
+
+#: ../svn/propget-cmd.c:358 ../svn/proplist-cmd.c:214
+msgid "--show-inherited-props can't be used with --revprop"
+msgstr ""
+
+#: ../svn/propget-cmd.c:425
+msgid ""
+"Strict output of property values only available for single-target, non-"
+"recursive propget operations"
+msgstr ""
+
+#: ../svn/proplist-cmd.c:246
+#, c-format
+msgid "Unversioned properties on revision %ld:\n"
+msgstr ""
+
+#: ../svn/proplist-cmd.c:321
+msgid ""
+"Could not display properties of all targets because some targets don't exist"
+msgstr ""
+
+#: ../svn/proplist-cmd.c:326
+msgid ""
+"Could not display properties of all targets because some targets are not "
+"versioned"
+msgstr ""
+
+#: ../svn/props.c:66
+msgid ""
+"Must specify the revision as a number, a date or 'HEAD' when operating on a "
+"revision property"
+msgstr ""
+
+#: ../svn/props.c:73
+msgid "Wrong number of targets specified"
+msgstr ""
+
+#: ../svn/props.c:82
+msgid "Either a URL or versioned item is required"
+msgstr ""
+
+#: ../svn/props.c:107
+#, c-format
+msgid ""
+"To turn off the %s property, use 'svn propdel';\n"
+"setting the property to '%s' will not turn it off."
+msgstr ""
+
+#: ../svn/props.c:177
+#, c-format
+msgid "(To set the '%s' property, re-run with '--force'.)"
+msgstr ""
+
+#: ../svn/props.c:182
+#, c-format
+msgid "(To edit the '%s' property, re-run with '--force'.)"
+msgstr ""
+
+#: ../svn/props.c:188
+#, c-format
+msgid "(To use the '%s' property, re-run with '--force'.)"
+msgstr ""
+
+#: ../svn/props.c:202
+#, c-format
+msgid "'%s' is not a valid %s property name; re-run with '--force' to set it"
+msgstr ""
+
+#: ../svn/props.c:208
+#, c-format
+msgid "'%s' is not a valid %s property name; re-run with '--force' to edit it"
+msgstr ""
+
+#: ../svn/props.c:215
+#, c-format
+msgid "'%s' is not a valid %s property name; re-run with '--force' to use it"
+msgstr ""
+
+#: ../svn/props.c:281 ../svn/props.c:332
+#, c-format
+msgid ""
+"'%s' is not a valid %s property name; did you mean '%s'?\n"
+"%s"
+msgstr ""
+
+#: ../svn/props.c:340
+#, c-format
+msgid ""
+"'%s' is not a valid %s property name\n"
+"Did you mean '%s' or '%s'?\n"
+"%s"
+msgstr ""
+
+#: ../svn/props.c:350
+#, c-format
+msgid ""
+"'%s' is not a valid %s property name\n"
+"Did you mean '%s', '%s' or '%s'?\n"
+"%s"
+msgstr ""
+
+#: ../svn/propset-cmd.c:132
+#, c-format
+msgid "Cannot specify revision for setting versioned property '%s'"
+msgstr ""
+
+#: ../svn/propset-cmd.c:165
+#, c-format
+msgid "Explicit target required ('%s' interpreted as prop value)"
+msgstr ""
+
+#: ../svn/resolve-cmd.c:79
+msgid "missing --accept option"
+msgstr ""
+
+#: ../svn/resolve-cmd.c:84
+msgid "invalid 'accept' ARG"
+msgstr ""
+
+#: ../svn/resolve-cmd.c:127
+msgid "Failure occurred resolving one or more conflicts"
+msgstr ""
+
+#: ../svn/revert-cmd.c:77
+msgid "Try 'svn revert --depth infinity' instead?"
+msgstr ""
+
+#: ../svn/status-cmd.c:97
+#, c-format
+msgid " Text conflicts: %u\n"
+msgstr ""
+
+#: ../svn/status-cmd.c:101
+#, c-format
+msgid " Property conflicts: %u\n"
+msgstr ""
+
+#: ../svn/status-cmd.c:105
+#, c-format
+msgid " Tree conflicts: %u\n"
+msgstr ""
+
+#: ../svn/status-cmd.c:398
+#, c-format
+msgid ""
+"\n"
+"--- Changelist '%s':\n"
+msgstr ""
+
+#: ../svn/status.c:318
+#, c-format
+msgid "swapped places with %s"
+msgstr ""
+
+#: ../svn/status.c:333
+#, c-format
+msgid "moved from %s"
+msgstr ""
+
+#: ../svn/status.c:345
+#, c-format
+msgid "moved to %s"
+msgstr ""
+
+#: ../svn/svn.c:147
+msgid "force operation to run"
+msgstr ""
+
+#: ../svn/svn.c:149
+msgid "force validity of log message source"
+msgstr ""
+
+#: ../svn/svn.c:150 ../svn/svn.c:151 ../svnadmin/svnadmin.c:208
+#: ../svnadmin/svnadmin.c:211 ../svndumpfilter/svndumpfilter.c:1047
+#: ../svndumpfilter/svndumpfilter.c:1050 ../svnlook/svnlook.c:114
+#: ../svnlook/svnlook.c:126 ../svnsync/svnsync.c:244 ../svnsync/svnsync.c:246
+msgid "show help on a subcommand"
+msgstr ""
+
+#: ../svn/svn.c:152
+msgid "specify log message ARG"
+msgstr ""
+
+#: ../svn/svn.c:153
+msgid "print nothing, or only summary information"
+msgstr ""
+
+#: ../svn/svn.c:154
+msgid "descend recursively, same as --depth=infinity"
+msgstr ""
+
+#: ../svn/svn.c:155
+msgid "obsolete; try --depth=files or --depth=immediates"
+msgstr ""
+
+#: ../svn/svn.c:157
+msgid ""
+"the change made by revision ARG (like -r ARG-1:ARG)\n"
+" If ARG is negative this is like -r ARG:ARG-1\n"
+" If ARG is of the form ARG1-ARG2 then this is "
+"like\n"
+" ARG1:ARG2, where ARG1 is inclusive"
+msgstr ""
+
+#: ../svn/svn.c:165
+msgid ""
+"ARG (some commands also take ARG1:ARG2 range)\n"
+" A revision argument can be one of:\n"
+" NUMBER revision number\n"
+" '{' DATE '}' revision at start of the date\n"
+" 'HEAD' latest in repository\n"
+" 'BASE' base rev of item's working "
+"copy\n"
+" 'COMMITTED' last commit at or before BASE\n"
+" 'PREV' revision just before COMMITTED"
+msgstr ""
+
+#: ../svn/svn.c:180
+msgid "read log message from file ARG"
+msgstr ""
+
+#: ../svn/svn.c:182
+msgid "give output suitable for concatenation"
+msgstr ""
+
+#: ../svn/svn.c:184
+msgid "treat value as being in charset encoding ARG"
+msgstr ""
+
+#: ../svn/svn.c:185 ../svnadmin/svnadmin.c:214
+#: ../svndumpfilter/svndumpfilter.c:1053 ../svnlook/svnlook.c:168
+#: ../svnrdump/svnrdump.c:144 ../svnserve/svnserve.c:287
+#: ../svnsync/svnsync.c:242 ../svnversion/svnversion.c:141
+msgid "show program version information"
+msgstr ""
+
+#: ../svn/svn.c:186
+msgid "print extra information"
+msgstr ""
+
+#: ../svn/svn.c:187
+msgid "display update information"
+msgstr ""
+
+#: ../svn/svn.c:188 ../svnrdump/svnrdump.c:128
+msgid "specify a username ARG"
+msgstr ""
+
+#: ../svn/svn.c:189 ../svnrdump/svnrdump.c:130
+msgid "specify a password ARG"
+msgstr ""
+
+#: ../svn/svn.c:191
+msgid ""
+"Specify differencing options for external diff or\n"
+" internal diff or blame. Default: '-u'. Options "
+"are\n"
+" separated by spaces. Internal diff and blame "
+"take:\n"
+" -u, --unified: Show 3 lines of unified "
+"context\n"
+" -b, --ignore-space-change: Ignore changes in\n"
+" amount of white space\n"
+" -w, --ignore-all-space: Ignore all white "
+"space\n"
+" --ignore-eol-style: Ignore changes in EOL "
+"style\n"
+" -p, --show-c-function: Show C function name"
+msgstr ""
+
+#: ../svn/svn.c:209
+msgid "pass contents of file ARG as additional args"
+msgstr ""
+
+#: ../svn/svn.c:211
+msgid ""
+"limit operation by depth ARG ('empty', 'files',\n"
+" 'immediates', or 'infinity')"
+msgstr ""
+
+#: ../svn/svn.c:215
+msgid ""
+"set new working copy depth to ARG ('exclude',\n"
+" 'empty', 'files', 'immediates', or 'infinity')"
+msgstr ""
+
+#: ../svn/svn.c:218 ../svnlook/svnlook.c:171
+msgid "output in XML"
+msgstr ""
+
+#: ../svn/svn.c:219
+msgid "use strict semantics"
+msgstr ""
+
+#: ../svn/svn.c:221
+msgid "do not cross copies while traversing history"
+msgstr ""
+
+#: ../svn/svn.c:223
+msgid ""
+"disregard default and svn:ignore and\n"
+" svn:global-ignores property ignores"
+msgstr ""
+
+#: ../svn/svn.c:227 ../svnrdump/svnrdump.c:140 ../svnsync/svnsync.c:188
+msgid "do not cache authentication tokens"
+msgstr ""
+
+#: ../svn/svn.c:229 ../svnrdump/svnrdump.c:154 ../svnsync/svnsync.c:198
+msgid ""
+"accept SSL server certificates from unknown\n"
+" certificate authorities without prompting (but "
+"only\n"
+" with '--non-interactive')"
+msgstr ""
+
+#: ../svn/svn.c:235 ../svnrdump/svnrdump.c:132 ../svnsync/svnsync.c:180
+msgid ""
+"do no interactive prompting (default is to prompt\n"
+" only if standard input is a terminal device)"
+msgstr ""
+
+#: ../svn/svn.c:239 ../svnrdump/svnrdump.c:136 ../svnsync/svnsync.c:184
+msgid ""
+"do interactive prompting even if standard input\n"
+" is not a terminal device"
+msgstr ""
+
+#: ../svn/svn.c:243
+msgid "try operation but make no changes"
+msgstr ""
+
+#: ../svn/svn.c:245
+msgid "disable merge tracking; diff nodes as if related"
+msgstr ""
+
+#: ../svn/svn.c:247
+msgid "ignore externals definitions"
+msgstr ""
+
+#: ../svn/svn.c:248
+msgid "use ARG as merge command"
+msgstr ""
+
+#: ../svn/svn.c:249
+msgid "use ARG as external editor"
+msgstr ""
+
+#: ../svn/svn.c:251
+msgid "merge only mergeinfo differences"
+msgstr ""
+
+#: ../svn/svn.c:252
+msgid "use ARG as the older target"
+msgstr ""
+
+#: ../svn/svn.c:253
+msgid "use ARG as the newer target"
+msgstr ""
+
+#: ../svn/svn.c:255
+msgid "operate on a revision property (use with -r)"
+msgstr ""
+
+#: ../svn/svn.c:256
+msgid "relocate via URL-rewriting"
+msgstr ""
+
+#: ../svn/svn.c:258 ../svnadmin/svnadmin.c:256 ../svnrdump/svnrdump.c:126
+#: ../svnsync/svnsync.c:212
+msgid "read user configuration files from directory ARG"
+msgstr ""
+
+#: ../svn/svn.c:260 ../svnrdump/svnrdump.c:146 ../svnsync/svnsync.c:214
+msgid ""
+"set user configuration option in the format:\n"
+" FILE:SECTION:OPTION=[VALUE]\n"
+" For example:\n"
+" servers:global:http-library=serf"
+msgstr ""
+
+#: ../svn/svn.c:267
+msgid "enable automatic properties"
+msgstr ""
+
+#: ../svn/svn.c:268
+msgid "disable automatic properties"
+msgstr ""
+
+#: ../svn/svn.c:270
+msgid ""
+"use a different EOL marker than the standard\n"
+" system marker for files with the svn:eol-style\n"
+" property set to 'native'.\n"
+" ARG may be one of 'LF', 'CR', 'CRLF'"
+msgstr ""
+
+#: ../svn/svn.c:277
+msgid "maximum number of log entries"
+msgstr ""
+
+#: ../svn/svn.c:278
+msgid "don't unlock the targets"
+msgstr ""
+
+#: ../svn/svn.c:279
+msgid "remove changelist association"
+msgstr ""
+
+#: ../svn/svn.c:281
+msgid "operate only on members of changelist ARG"
+msgstr ""
+
+#: ../svn/svn.c:283
+msgid "don't delete changelists after commit"
+msgstr ""
+
+#: ../svn/svn.c:284
+msgid "keep path in working copy"
+msgstr ""
+
+#: ../svn/svn.c:286
+msgid "retrieve all revision properties"
+msgstr ""
+
+#: ../svn/svn.c:288
+msgid "retrieve no revision properties"
+msgstr ""
+
+#: ../svn/svn.c:290
+msgid ""
+"set revision property ARG in new revision\n"
+" using the name[=value] format"
+msgstr ""
+
+#: ../svn/svn.c:293
+msgid "make intermediate directories"
+msgstr ""
+
+#: ../svn/svn.c:295
+msgid ""
+"use/display additional information from merge\n"
+" history"
+msgstr ""
+
+#: ../svn/svn.c:299
+msgid ""
+"specify automatic conflict resolution action\n"
+" ('postpone', 'working', 'base', 'mine-"
+"conflict',\n"
+" 'theirs-conflict', 'mine-full', 'theirs-full',\n"
+" 'edit', 'launch')\n"
+" (shorthand: 'p', 'mc', 'tc', 'mf', 'tf', 'e', "
+"'l')"
+msgstr ""
+
+#: ../svn/svn.c:310
+msgid ""
+"specify which collection of revisions to display\n"
+" ('merged', 'eligible')"
+msgstr ""
+
+#: ../svn/svn.c:314
+msgid "deprecated"
+msgstr ""
+
+#: ../svn/svn.c:316
+msgid ""
+"number of leading path components to strip from\n"
+" paths parsed from the patch file. --strip 0\n"
+" is the default and leaves paths unmodified.\n"
+" --strip 1 would change the path\n"
+" 'doc/fudge/crunchy.html' to 'fudge/crunchy."
+"html'.\n"
+" --strip 2 would leave just 'crunchy.html'\n"
+" The expected component separator is '/' on all\n"
+" platforms. A leading '/' counts as one "
+"component."
+msgstr ""
+
+#: ../svn/svn.c:332
+msgid "don't expand keywords"
+msgstr ""
+
+#: ../svn/svn.c:334
+msgid "apply the unidiff in reverse"
+msgstr ""
+
+#: ../svn/svn.c:336
+msgid "ignore whitespace during pattern matching"
+msgstr ""
+
+#: ../svn/svn.c:337
+msgid "produce diff output"
+msgstr ""
+
+#. maps to show_diff
+#. diff options
+#: ../svn/svn.c:339 ../svnlook/svnlook.c:138
+msgid "use ARG as diff command"
+msgstr ""
+
+#: ../svn/svn.c:341
+msgid "override diff-cmd specified in config file"
+msgstr ""
+
+#: ../svn/svn.c:343 ../svnlook/svnlook.c:132
+msgid "do not print differences for added files"
+msgstr ""
+
+#: ../svn/svn.c:345 ../svnlook/svnlook.c:135
+msgid "do not print differences for deleted files"
+msgstr ""
+
+#: ../svn/svn.c:347
+msgid "don't diff copied or moved files with their source"
+msgstr ""
+
+#: ../svn/svn.c:349
+msgid "diff unrelated nodes as delete and add"
+msgstr ""
+
+#: ../svn/svn.c:350
+msgid "show a summary of the results"
+msgstr ""
+
+#: ../svn/svn.c:352
+msgid "use git's extended diff format"
+msgstr ""
+
+#: ../svn/svn.c:354 ../svnlook/svnlook.c:141
+msgid "ignore properties during the operation"
+msgstr ""
+
+#: ../svn/svn.c:356 ../svnlook/svnlook.c:144
+msgid "show only properties during the operation"
+msgstr ""
+
+#: ../svn/svn.c:358
+msgid ""
+"generate diff suitable for generic third-party\n"
+" patch tools; currently the same as\n"
+" --show-copies-as-adds --ignore-properties"
+msgstr ""
+
+#: ../svn/svn.c:366
+msgid ""
+"Allow operation on mixed-revision working copy.\n"
+" Use of this option is not recommended!\n"
+" Please run 'svn update' instead."
+msgstr ""
+
+#: ../svn/svn.c:372
+msgid ""
+"Also commit file and dir externals reached by\n"
+" recursion. This does not include externals with "
+"a\n"
+" fixed revision. (See the svn:externals property)"
+msgstr ""
+
+#: ../svn/svn.c:378
+msgid "retrieve target's inherited properties"
+msgstr ""
+
+#: ../svn/svn.c:380
+msgid "use ARG as search pattern (glob syntax)"
+msgstr ""
+
+#: ../svn/svn.c:382
+msgid "combine ARG with the previous search pattern"
+msgstr ""
+
+#: ../svn/svn.c:430
+msgid ""
+"Put files and directories under version control, scheduling\n"
+"them for addition to repository. They will be added in next commit.\n"
+"usage: add PATH...\n"
+msgstr ""
+
+#: ../svn/svn.c:435
+msgid "add intermediate parents"
+msgstr ""
+
+#: ../svn/svn.c:438
+msgid ""
+"Output the content of specified files or\n"
+"URLs with revision and author information in-line.\n"
+"usage: blame TARGET[@REV]...\n"
+"\n"
+" If specified, REV determines in which revision the target is first\n"
+" looked up.\n"
+msgstr ""
+
+#: ../svn/svn.c:447
+msgid ""
+"Output the content of specified files or URLs.\n"
+"usage: cat TARGET[@REV]...\n"
+"\n"
+" If specified, REV determines in which revision the target is first\n"
+" looked up.\n"
+msgstr ""
+
+#: ../svn/svn.c:455
+msgid ""
+"Associate (or dissociate) changelist CLNAME with the named files.\n"
+"usage: 1. changelist CLNAME PATH...\n"
+" 2. changelist --remove PATH...\n"
+msgstr ""
+
+#: ../svn/svn.c:461
+msgid ""
+"Check out a working copy from a repository.\n"
+"usage: checkout URL[@REV]... [PATH]\n"
+"\n"
+" If specified, REV determines in which revision the URL is first\n"
+" looked up.\n"
+"\n"
+" If PATH is omitted, the basename of the URL will be used as\n"
+" the destination. If multiple URLs are given each will be checked\n"
+" out into a sub-directory of PATH, with the name of the sub-directory\n"
+" being the basename of the URL.\n"
+"\n"
+" If --force is used, unversioned obstructing paths in the working\n"
+" copy destination do not automatically cause the check out to fail.\n"
+" If the obstructing path is the same type (file or directory) as the\n"
+" corresponding path in the repository it becomes versioned but its\n"
+" contents are left 'as-is' in the working copy. This means that an\n"
+" obstructing directory's unversioned children may also obstruct and\n"
+" become versioned. For files, any content differences between the\n"
+" obstruction and the repository are treated like a local modification\n"
+" to the working copy. All properties from the repository are applied\n"
+" to the obstructing path.\n"
+"\n"
+" See also 'svn help update' for a list of possible characters\n"
+" reporting the action taken.\n"
+msgstr ""
+
+#: ../svn/svn.c:488
+msgid ""
+"Recursively clean up the working copy, removing write locks, resuming\n"
+"unfinished operations, etc.\n"
+"usage: cleanup [WCPATH...]\n"
+"\n"
+" Finish any unfinished business in the working copy at WCPATH, and remove\n"
+" write locks (shown as 'L' by the 'svn status' command) from the working\n"
+" copy. Usually, this is only necessary if a Subversion client has crashed\n"
+" while using the working copy, leaving it in an unusable state.\n"
+"\n"
+" WARNING: There is no mechanism that will protect write locks still\n"
+" being used by other Subversion clients. Running this command\n"
+" while another client is using the working copy can corrupt\n"
+" the working copy beyond repair!\n"
+msgstr ""
+
+#: ../svn/svn.c:504
+msgid ""
+"Send changes from your working copy to the repository.\n"
+"usage: commit [PATH...]\n"
+"\n"
+" A log message must be provided, but it can be empty. If it is not\n"
+" given by a --message or --file option, an editor will be started.\n"
+" If any targets are (or contain) locked items, those will be\n"
+" unlocked after a successful commit.\n"
+msgstr ""
+
+#: ../svn/svn.c:515
+msgid ""
+"Copy files and directories in a working copy or repository.\n"
+"usage: copy SRC[@REV]... DST\n"
+"\n"
+" SRC and DST can each be either a working copy (WC) path or URL:\n"
+" WC -> WC: copy and schedule for addition (with history)\n"
+" WC -> URL: immediately commit a copy of WC to URL\n"
+" URL -> WC: check out URL into WC, schedule for addition\n"
+" URL -> URL: complete server-side copy; used to branch and tag\n"
+" All the SRCs must be of the same type. When copying multiple sources,\n"
+" they will be added as children of DST, which must be a directory.\n"
+"\n"
+" WARNING: For compatibility with previous versions of Subversion,\n"
+" copies performed using two working copy paths (WC -> WC) will not\n"
+" contact the repository. As such, they may not, by default, be able\n"
+" to propagate merge tracking information from the source of the copy\n"
+" to the destination.\n"
+msgstr ""
+
+#: ../svn/svn.c:534
+msgid ""
+"Remove files and directories from version control.\n"
+"usage: 1. delete PATH...\n"
+" 2. delete URL...\n"
+"\n"
+" 1. Each item specified by a PATH is scheduled for deletion upon\n"
+" the next commit. Files, and directories that have not been\n"
+" committed, are immediately removed from the working copy\n"
+" unless the --keep-local option is given.\n"
+" PATHs that are, or contain, unversioned or modified items will\n"
+" not be removed unless the --force or --keep-local option is given.\n"
+"\n"
+" 2. Each item specified by a URL is deleted from the repository\n"
+" via an immediate commit.\n"
+msgstr ""
+
+#: ../svn/svn.c:550
+msgid ""
+"Display local changes or differences between two revisions or paths.\n"
+"usage: 1. diff\n"
+" 2. diff [-c M | -r N[:M]] [TARGET[@REV]...]\n"
+" 3. diff [-r N[:M]] --old=OLD-TGT[@OLDREV] [--new=NEW-TGT[@NEWREV]] "
+"\\\n"
+" [PATH...]\n"
+" 4. diff OLD-URL[@OLDREV] NEW-URL[@NEWREV]\n"
+" 5. diff OLD-URL[@OLDREV] NEW-PATH[@NEWREV]\n"
+" 6. diff OLD-PATH[@OLDREV] NEW-URL[@NEWREV]\n"
+"\n"
+" 1. Use just 'svn diff' to display local modifications in a working copy.\n"
+"\n"
+" 2. Display the changes made to TARGETs as they are seen in REV between\n"
+" two revisions. TARGETs may be all working copy paths or all URLs.\n"
+" If TARGETs are working copy paths, N defaults to BASE and M to the\n"
+" working copy; if URLs, N must be specified and M defaults to HEAD.\n"
+" The '-c M' option is equivalent to '-r N:M' where N = M-1.\n"
+" Using '-c -M' does the reverse: '-r M:N' where N = M-1.\n"
+"\n"
+" 3. Display the differences between OLD-TGT as it was seen in OLDREV and\n"
+" NEW-TGT as it was seen in NEWREV. PATHs, if given, are relative to\n"
+" OLD-TGT and NEW-TGT and restrict the output to differences for those\n"
+" paths. OLD-TGT and NEW-TGT may be working copy paths or URL[@REV].\n"
+" NEW-TGT defaults to OLD-TGT if not specified. -r N makes OLDREV "
+"default\n"
+" to N, -r N:M makes OLDREV default to N and NEWREV default to M.\n"
+" If OLDREV or NEWREV are not specified, they default to WORKING for\n"
+" working copy targets and to HEAD for URL targets.\n"
+"\n"
+" Either or both OLD-TGT and NEW-TGT may also be paths to unversioned\n"
+" targets. Revisions cannot be specified for unversioned targets.\n"
+" Both targets must be of the same node kind (file or directory).\n"
+" Diffing unversioned targets against URL targets is not supported.\n"
+"\n"
+" 4. Shorthand for 'svn diff --old=OLD-URL[@OLDREV] --new=NEW-URL[@NEWREV]'\n"
+" 5. Shorthand for 'svn diff --old=OLD-URL[@OLDREV] --new=NEW-"
+"PATH[@NEWREV]'\n"
+" 6. Shorthand for 'svn diff --old=OLD-PATH[@OLDREV] --new=NEW-"
+"URL[@NEWREV]'\n"
+msgstr ""
+
+#: ../svn/svn.c:591
+msgid ""
+"Create an unversioned copy of a tree.\n"
+"usage: 1. export [-r REV] URL[@PEGREV] [PATH]\n"
+" 2. export [-r REV] PATH1[@PEGREV] [PATH2]\n"
+"\n"
+" 1. Exports a clean directory tree from the repository specified by\n"
+" URL, at revision REV if it is given, otherwise at HEAD, into\n"
+" PATH. If PATH is omitted, the last component of the URL is used\n"
+" for the local directory name.\n"
+"\n"
+" 2. Exports a clean directory tree from the working copy specified by\n"
+" PATH1, at revision REV if it is given, otherwise at WORKING, into\n"
+" PATH2. If PATH2 is omitted, the last component of the PATH1 is used\n"
+" for the local directory name. If REV is not specified, all local\n"
+" changes will be preserved. Files not under version control will\n"
+" not be copied.\n"
+"\n"
+" If specified, PEGREV determines in which revision the target is first\n"
+" looked up.\n"
+msgstr ""
+
+#: ../svn/svn.c:613
+msgid ""
+"Describe the usage of this program or its subcommands.\n"
+"usage: help [SUBCOMMAND...]\n"
+msgstr ""
+
+#: ../svn/svn.c:619
+msgid ""
+"Commit an unversioned file or tree into the repository.\n"
+"usage: import [PATH] URL\n"
+"\n"
+" Recursively commit a copy of PATH to URL.\n"
+" If PATH is omitted '.' is assumed.\n"
+" Parent directories are created as necessary in the repository.\n"
+" If PATH is a directory, the contents of the directory are added\n"
+" directly under URL.\n"
+" Unversionable items such as device files and pipes are ignored\n"
+" if --force is specified.\n"
+msgstr ""
+
+#: ../svn/svn.c:633
+msgid ""
+"Display information about a local or remote item.\n"
+"usage: info [TARGET[@REV]...]\n"
+"\n"
+" Print information about each TARGET (default: '.').\n"
+" TARGET may be either a working-copy path or URL. If specified, REV\n"
+" determines in which revision the target is first looked up.\n"
+msgstr ""
+
+#: ../svn/svn.c:643
+msgid ""
+"List directory entries in the repository.\n"
+"usage: list [TARGET[@REV]...]\n"
+"\n"
+" List each TARGET file and the contents of each TARGET directory as\n"
+" they exist in the repository. If TARGET is a working copy path, the\n"
+" corresponding repository URL will be used. If specified, REV determines\n"
+" in which revision the target is first looked up.\n"
+"\n"
+" The default TARGET is '.', meaning the repository URL of the current\n"
+" working directory.\n"
+"\n"
+" With --verbose, the following fields will be shown for each item:\n"
+"\n"
+" Revision number of the last commit\n"
+" Author of the last commit\n"
+" If locked, the letter 'O'. (Use 'svn info URL' to see details)\n"
+" Size (in bytes)\n"
+" Date and time of the last commit\n"
+msgstr ""
+
+#: ../svn/svn.c:663
+msgid "include externals definitions"
+msgstr ""
+
+#: ../svn/svn.c:666
+msgid ""
+"Lock working copy paths or URLs in the repository, so that\n"
+"no other user can commit changes to them.\n"
+"usage: lock TARGET...\n"
+"\n"
+" Use --force to steal the lock from another user or working copy.\n"
+msgstr ""
+
+#: ../svn/svn.c:672
+msgid "read lock comment from file ARG"
+msgstr ""
+
+#: ../svn/svn.c:673
+msgid "specify lock comment ARG"
+msgstr ""
+
+#: ../svn/svn.c:674
+msgid "force validity of lock comment source"
+msgstr ""
+
+#: ../svn/svn.c:677
+msgid ""
+"Show the log messages for a set of revision(s) and/or path(s).\n"
+"usage: 1. log [PATH][@REV]\n"
+" 2. log URL[@REV] [PATH...]\n"
+"\n"
+" 1. Print the log messages for the URL corresponding to PATH\n"
+" (default: '.'). If specified, REV is the revision in which the\n"
+" URL is first looked up, and the default revision range is REV:1.\n"
+" If REV is not specified, the default revision range is BASE:1,\n"
+" since the URL might not exist in the HEAD revision.\n"
+"\n"
+" 2. Print the log messages for the PATHs (default: '.') under URL.\n"
+" If specified, REV is the revision in which the URL is first\n"
+" looked up, and the default revision range is REV:1; otherwise,\n"
+" the URL is looked up in HEAD, and the default revision range is\n"
+" HEAD:1.\n"
+"\n"
+" Multiple '-c' or '-r' options may be specified (but not a\n"
+" combination of '-c' and '-r' options), and mixing of forward and\n"
+" reverse ranges is allowed.\n"
+"\n"
+" With -v, also print all affected paths with each log message.\n"
+" With -q, don't print the log message body itself (note that this is\n"
+" compatible with -v).\n"
+"\n"
+" Each log message is printed just once, even if more than one of the\n"
+" affected paths for that revision were explicitly requested. Logs\n"
+" follow copy history by default. Use --stop-on-copy to disable this\n"
+" behavior, which can be useful for determining branchpoints.\n"
+"\n"
+" The --depth option is only valid in combination with the --diff option\n"
+" and limits the scope of the displayed diff to the specified depth.\n"
+"\n"
+" If the --search option is used, log messages are displayed only if the\n"
+" provided search pattern matches any of the author, date, log message\n"
+" text (unless --quiet is used), or, if the --verbose option is also\n"
+" provided, a changed path.\n"
+" The search pattern may include \"glob syntax\" wildcards:\n"
+" ? matches any single character\n"
+" * matches a sequence of arbitrary characters\n"
+" [abc] matches any of the characters listed inside the brackets\n"
+" If multiple --search options are provided, a log message is shown if\n"
+" it matches any of the provided search patterns. If the --search-and\n"
+" option is used, that option's argument is combined with the pattern\n"
+" from the previous --search or --search-and option, and a log message\n"
+" is shown only if it matches the combined search pattern.\n"
+" If --limit is used in combination with --search, --limit restricts the\n"
+" number of log messages searched, rather than restricting the output\n"
+" to a particular number of matching log messages.\n"
+"\n"
+" Examples:\n"
+"\n"
+" Show the latest 5 log messages for the current working copy\n"
+" directory and display paths changed in each commit:\n"
+" svn log -l 5 -v\n"
+"\n"
+" Show the log for bar.c as of revision 42:\n"
+" svn log bar.c@42\n"
+"\n"
+" Show log messages and diffs for each commit to foo.c:\n"
+" svn log --diff http://www.example.com/repo/project/foo.c\n"
+" (Because the above command uses a full URL it does not require\n"
+" a working copy.)\n"
+"\n"
+" Show log messages for the children foo.c and bar.c of the directory\n"
+" '/trunk' as it appeared in revision 50, using the ^/ URL shortcut:\n"
+" svn log ^/trunk@50 foo.c bar.c\n"
+"\n"
+" Show the log messages for any incoming changes to foo.c during the\n"
+" next 'svn update':\n"
+" svn log -r BASE:HEAD foo.c\n"
+"\n"
+" Show the log message for the revision in which /branches/foo\n"
+" was created:\n"
+" svn log --stop-on-copy --limit 1 -r0:HEAD ^/branches/foo\n"
+msgstr ""
+
+#: ../svn/svn.c:755
+msgid "retrieve revision property ARG"
+msgstr ""
+
+#: ../svn/svn.c:756
+msgid "the change made in revision ARG"
+msgstr ""
+
+#. For this large section, let's keep it unindented for easier
+#. * viewing/editing. It has been vim-treated with a textwidth=75 and 'gw'
+#. * (with quotes and newlines removed).
+#: ../svn/svn.c:762
+msgid ""
+"Merge changes into a working copy.\n"
+"usage: 1. merge SOURCE[@REV] [TARGET_WCPATH]\n"
+" (the 'complete' merge)\n"
+" 2. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [TARGET_WCPATH]\n"
+" (the 'cherry-pick' merge)\n"
+" 3. merge SOURCE1[@REV1] SOURCE2[@REV2] [TARGET_WCPATH]\n"
+" (the '2-URL' merge)\n"
+"\n"
+" 1. This form, with one source path and no revision range, is called\n"
+" a 'complete' merge:\n"
+"\n"
+" svn merge SOURCE[@REV] [TARGET_WCPATH]\n"
+"\n"
+" The complete merge is used for the 'sync' and 'reintegrate' merges\n"
+" in the 'feature branch' pattern described below. It finds all the\n"
+" changes on the source branch that have not already been merged to the\n"
+" target branch, and merges them into the working copy. Merge tracking\n"
+" is used to know which changes have already been merged.\n"
+"\n"
+" SOURCE specifies the branch from where the changes will be pulled, and\n"
+" TARGET_WCPATH specifies a working copy of the target branch to which\n"
+" the changes will be applied. Normally SOURCE and TARGET_WCPATH should\n"
+" each correspond to the root of a branch. (If you want to merge only a\n"
+" subtree, then the subtree path must be included in both SOURCE and\n"
+" TARGET_WCPATH; this is discouraged, to avoid subtree mergeinfo.)\n"
+"\n"
+" SOURCE is usually a URL. The optional '@REV' specifies both the peg\n"
+" revision of the URL and the latest revision that will be considered\n"
+" for merging; if REV is not specified, the HEAD revision is assumed. If\n"
+" SOURCE is a working copy path, the corresponding URL of the path is\n"
+" used, and the default value of 'REV' is the base revision (usually the\n"
+" revision last updated to).\n"
+"\n"
+" TARGET_WCPATH is a working copy path; if omitted, '.' is generally\n"
+" assumed. There are some special cases:\n"
+"\n"
+" - If SOURCE is a URL:\n"
+"\n"
+" - If the basename of the URL and the basename of '.' are the\n"
+" same, then the differences are applied to '.'. Otherwise,\n"
+" if a file with the same basename as that of the URL is found\n"
+" within '.', then the differences are applied to that file.\n"
+" In all other cases, the target defaults to '.'.\n"
+"\n"
+" - If SOURCE is a working copy path:\n"
+"\n"
+" - If the source is a file, then differences are applied to that\n"
+" file (useful for reverse-merging earlier changes). Otherwise,\n"
+" if the source is a directory, then the target defaults to '.'.\n"
+"\n"
+" In normal usage the working copy should be up to date, at a single\n"
+" revision, with no local modifications and no switched subtrees.\n"
+"\n"
+" - The 'Feature Branch' Merging Pattern -\n"
+"\n"
+" In this commonly used work flow, known also as the 'development\n"
+" branch' pattern, a developer creates a branch and commits a series of\n"
+" changes that implement a new feature. The developer periodically\n"
+" merges all the latest changes from the parent branch so as to keep the\n"
+" development branch up to date with those changes. When the feature is\n"
+" complete, the developer performs a merge from the feature branch to\n"
+" the parent branch to re-integrate the changes.\n"
+"\n"
+" parent --+----------o------o-o-------------o--\n"
+" \\ \\ \\ /\n"
+" \\ merge merge merge\n"
+" \\ \\ \\ /\n"
+" feature +--o-o-------o----o-o----o-------\n"
+"\n"
+" A merge from the parent branch to the feature branch is called a\n"
+" 'sync' or 'catch-up' merge, and a merge from the feature branch to the\n"
+" parent branch is called a 'reintegrate' merge.\n"
+"\n"
+" - Sync Merge Example -\n"
+" ............\n"
+" . .\n"
+" trunk --+------------L--------------R------\n"
+" \\ \\\n"
+" \\ |\n"
+" \\ v\n"
+" feature +------------------------o-----\n"
+" r100 r200\n"
+"\n"
+" Subversion will locate all the changes on 'trunk' that have not yet\n"
+" been merged into the 'feature' branch. In this case that is a single\n"
+" range, r100:200. In the diagram above, L marks the left side "
+"(trunk@100)\n"
+" and R marks the right side (trunk@200) of the merge source. The\n"
+" difference between L and R will be applied to the target working copy\n"
+" path. In this case, the working copy is a clean checkout of the entire\n"
+" 'feature' branch.\n"
+"\n"
+" To perform this sync merge, have a clean working copy of the feature\n"
+" branch and run the following command in its top-level directory:\n"
+"\n"
+" svn merge ^/trunk\n"
+"\n"
+" Note that the merge is now only in your local working copy and still\n"
+" needs to be committed to the repository so that it can be seen by\n"
+" others. You can review the changes and you may have to resolve\n"
+" conflicts before you commit the merge.\n"
+"\n"
+" - Reintegrate Merge Example -\n"
+"\n"
+" The feature branch was last synced with trunk up to revision X. So the\n"
+" difference between trunk@X and feature@HEAD contains the complete set\n"
+" of changes that implement the feature, and no other changes. These\n"
+" changes are applied to trunk.\n"
+"\n"
+" rW rX\n"
+" trunk ------+--------------------L------------------o\n"
+" \\ . ^\n"
+" \\ ............. /\n"
+" \\ . /\n"
+" feature +--------------------------------R\n"
+"\n"
+" In the diagram above, L marks the left side (trunk@X) and R marks the\n"
+" right side (feature@HEAD) of the merge. The difference between the\n"
+" left and right side is merged into trunk, the target.\n"
+"\n"
+" To perform the merge, have a clean working copy of trunk and run the\n"
+" following command in its top-level directory:\n"
+"\n"
+" svn merge ^/feature\n"
+"\n"
+" To prevent unnecessary merge conflicts, a reintegrate merge requires\n"
+" that TARGET_WCPATH is not a mixed-revision working copy, has no local\n"
+" modifications, and has no switched subtrees.\n"
+"\n"
+" A reintegrate merge also requires that the source branch is coherently\n"
+" synced with the target -- in the above example, this means that all\n"
+" revisions between the branch point W and the last merged revision X\n"
+" are merged to the feature branch, so that there are no unmerged\n"
+" revisions in-between.\n"
+"\n"
+"\n"
+" 2. This form is called a 'cherry-pick' merge:\n"
+"\n"
+" svn merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [TARGET_WCPATH]\n"
+"\n"
+" A cherry-pick merge is used to merge specific revisions (or revision\n"
+" ranges) from one branch to another. By default, this uses merge\n"
+" tracking to automatically skip any revisions that have already been\n"
+" merged to the target; you can use the --ignore-ancestry option to\n"
+" disable such skipping.\n"
+"\n"
+" SOURCE is usually a URL. The optional '@REV' specifies only the peg\n"
+" revision of the URL and does not affect the merge range; if REV is not\n"
+" specified, the HEAD revision is assumed. If SOURCE is a working copy\n"
+" path, the corresponding URL of the path is used, and the default value\n"
+" of 'REV' is the base revision (usually the revision last updated to).\n"
+"\n"
+" TARGET_WCPATH is a working copy path; if omitted, '.' is generally\n"
+" assumed. The special cases noted above in the 'complete' merge form\n"
+" also apply here.\n"
+"\n"
+" The revision ranges to be merged are specified by the '-r' and/or '-c'\n"
+" options. '-r N:M' refers to the difference in the history of the\n"
+" source branch between revisions N and M. You can use '-c M' to merge\n"
+" single revisions: '-c M' is equivalent to '-r <M-1>:M'. Each such\n"
+" difference is applied to TARGET_WCPATH.\n"
+"\n"
+" If the mergeinfo in TARGET_WCPATH indicates that revisions within the\n"
+" range were already merged, changes made in those revisions are not\n"
+" merged again. If needed, the range is broken into multiple sub-ranges,\n"
+" and each sub-range is merged separately.\n"
+"\n"
+" A 'reverse range' can be used to undo changes. For example, when\n"
+" source and target refer to the same branch, a previously committed\n"
+" revision can be 'undone'. In a reverse range, N is greater than M in\n"
+" '-r N:M', or the '-c' option is used with a negative number: '-c -M'\n"
+" is equivalent to '-r M:<M-1>'. Undoing changes like this is also known\n"
+" as performing a 'reverse merge'.\n"
+"\n"
+" Multiple '-c' and/or '-r' options may be specified and mixing of\n"
+" forward and reverse ranges is allowed.\n"
+"\n"
+" - Cherry-pick Merge Example -\n"
+"\n"
+" A bug has been fixed on trunk in revision 50. This fix needs to\n"
+" be merged from trunk onto the release branch.\n"
+"\n"
+" 1.x-release +-----------------------o-----\n"
+" / ^\n"
+" / |\n"
+" / |\n"
+" trunk ------+--------------------------LR-----\n"
+" r50\n"
+"\n"
+" In the above diagram, L marks the left side (trunk@49) and R marks the\n"
+" right side (trunk@50) of the merge. The difference between the left\n"
+" and right side is applied to the target working copy path.\n"
+"\n"
+" Note that the difference between revision 49 and 50 is exactly those\n"
+" changes that were committed in revision 50, not including changes\n"
+" committed in revision 49.\n"
+"\n"
+" To perform the merge, have a clean working copy of the release branch\n"
+" and run the following command in its top-level directory; remember\n"
+" that the default target is '.':\n"
+"\n"
+" svn merge -c50 ^/trunk\n"
+"\n"
+" You can also cherry-pick several revisions and/or revision ranges:\n"
+"\n"
+" svn merge -c50,54,60 -r65:68 ^/trunk\n"
+"\n"
+"\n"
+" 3. This form is called a '2-URL merge':\n"
+"\n"
+" svn merge SOURCE1[@REV1] SOURCE2[@REV2] [TARGET_WCPATH]\n"
+"\n"
+" You should use this merge variant only if the other variants do not\n"
+" apply to your situation, as this variant can be quite complex to\n"
+" master.\n"
+"\n"
+" Two source URLs are specified, identifying two trees on the same\n"
+" branch or on different branches. The trees are compared and the\n"
+" difference from SOURCE1@REV1 to SOURCE2@REV2 is applied to the\n"
+" working copy of the target branch at TARGET_WCPATH. The target\n"
+" branch may be the same as one or both sources, or different again.\n"
+" The three branches involved can be completely unrelated.\n"
+"\n"
+" TARGET_WCPATH is a working copy path; if omitted, '.' is generally\n"
+" assumed. The special cases noted above in the 'complete' merge form\n"
+" also apply here.\n"
+"\n"
+" SOURCE1 and/or SOURCE2 can also be specified as a working copy path,\n"
+" in which case the merge source URL is derived from the working copy.\n"
+"\n"
+" - 2-URL Merge Example -\n"
+"\n"
+" Two features have been developed on separate branches called 'foo' and\n"
+" 'bar'. It has since become clear that 'bar' should be combined with\n"
+" the 'foo' branch for further development before reintegration.\n"
+"\n"
+" Although both feature branches originate from trunk, they are not\n"
+" directly related -- one is not a direct copy of the other. A 2-URL\n"
+" merge is necessary.\n"
+"\n"
+" The 'bar' branch has been synced with trunk up to revision 500.\n"
+" (If this revision number is not known, it can be located using the\n"
+" 'svn log' and/or 'svn mergeinfo' commands.)\n"
+" The difference between trunk@500 and bar@HEAD contains the complete\n"
+" set of changes related to feature 'bar', and no other changes. These\n"
+" changes are applied to the 'foo' branch.\n"
+"\n"
+" foo +-----------------------------------o\n"
+" / ^\n"
+" / /\n"
+" / r500 /\n"
+" trunk ------+------+-----------------L---------> /\n"
+" \\ . /\n"
+" \\ ............ /\n"
+" \\ . /\n"
+" bar +-----------------------------------R\n"
+"\n"
+" In the diagram above, L marks the left side (trunk@500) and R marks\n"
+" the right side (bar@HEAD) of the merge. The difference between the\n"
+" left and right side is applied to the target working copy path, in\n"
+" this case a working copy of the 'foo' branch.\n"
+"\n"
+" To perform the merge, have a clean working copy of the 'foo' branch\n"
+" and run the following command in its top-level directory:\n"
+"\n"
+" svn merge ^/trunk@500 ^/bar\n"
+"\n"
+" The exact changes applied by a 2-URL merge can be previewed with svn's\n"
+" diff command, which is a good idea to verify if you do not have the\n"
+" luxury of a clean working copy to merge to. In this case:\n"
+"\n"
+" svn diff ^/trunk@500 ^/bar@HEAD\n"
+"\n"
+"\n"
+" The following applies to all types of merges:\n"
+"\n"
+" To prevent unnecessary merge conflicts, svn merge requires that\n"
+" TARGET_WCPATH is not a mixed-revision working copy. Running 'svn update'\n"
+" before starting a merge ensures that all items in the working copy are\n"
+" based on the same revision.\n"
+"\n"
+" If possible, you should have no local modifications in the merge's target\n"
+" working copy prior to the merge, to keep things simpler. It will be\n"
+" easier to revert the merge and to understand the branch's history.\n"
+"\n"
+" Switched sub-paths should also be avoided during merging, as they may\n"
+" cause incomplete merges and create subtree mergeinfo.\n"
+"\n"
+" For each merged item a line will be printed with characters reporting the\n"
+" action taken. These characters have the following meaning:\n"
+"\n"
+" A Added\n"
+" D Deleted\n"
+" U Updated\n"
+" C Conflict\n"
+" G Merged\n"
+" E Existed\n"
+" R Replaced\n"
+"\n"
+" Characters in the first column report about the item itself.\n"
+" Characters in the second column report about properties of the item.\n"
+" A 'C' in the third column indicates a tree conflict, while a 'C' in\n"
+" the first and second columns indicate textual conflicts in files\n"
+" and in property values, respectively.\n"
+"\n"
+" - Merge Tracking -\n"
+"\n"
+" Subversion uses the svn:mergeinfo property to track merge history. This\n"
+" property is considered at the start of a merge to determine what to merge\n"
+" and it is updated at the conclusion of the merge to describe the merge\n"
+" that took place. Mergeinfo is used only if the two sources are on the\n"
+" same line of history -- if the first source is an ancestor of the second,\n"
+" or vice-versa (i.e. if one has originally been created by copying the\n"
+" other). This is verified and enforced when using sync merges and\n"
+" reintegrate merges.\n"
+"\n"
+" The --ignore-ancestry option prevents merge tracking and thus ignores\n"
+" mergeinfo, neither considering it nor recording it.\n"
+"\n"
+" - Merging from foreign repositories -\n"
+"\n"
+" Subversion does support merging from foreign repositories.\n"
+" While all merge source URLs must point to the same repository, the merge\n"
+" target working copy may come from a different repository than the source.\n"
+" However, there are some caveats. Most notably, copies made in the\n"
+" merge source will be transformed into plain additions in the merge\n"
+" target. Also, merge-tracking is not supported for merges from foreign\n"
+" repositories.\n"
+msgstr ""
+
+#: ../svn/svn.c:1094
+msgid ""
+"Display merge-related information.\n"
+"usage: 1. mergeinfo SOURCE[@REV] [TARGET[@REV]]\n"
+" 2. mergeinfo --show-revs=WHICH SOURCE[@REV] [TARGET[@REV]]\n"
+"\n"
+" 1. Summarize the history of merging between SOURCE and TARGET. The graph\n"
+" shows, from left to right:\n"
+" the youngest common ancestor of the branches;\n"
+" the latest full merge in either direction, and thus the common base\n"
+" that will be used for the next complete merge;\n"
+" the repository path and revision number of the tip of each branch.\n"
+"\n"
+" 2. Print the revision numbers on SOURCE that have been merged to TARGET\n"
+" (with --show-revs=merged), or that have not been merged to TARGET\n"
+" (with --show-revs=eligible). Print only revisions in which there was\n"
+" at least one change in SOURCE.\n"
+"\n"
+" If --revision (-r) is provided, filter the displayed information to\n"
+" show only that which is associated with the revisions within the\n"
+" specified range. Revision numbers, dates, and the 'HEAD' keyword are\n"
+" valid range values.\n"
+"\n"
+" SOURCE and TARGET are the source and target branch URLs, respectively.\n"
+" (If a WC path is given, the corresponding base URL is used.) The default\n"
+" TARGET is the current working directory ('.'). REV specifies the revision\n"
+" to be considered the tip of the branch; the default for SOURCE is HEAD,\n"
+" and the default for TARGET is HEAD for a URL or BASE for a WC path.\n"
+"\n"
+" The depth can be 'empty' or 'infinity'; the default is 'empty'.\n"
+msgstr ""
+
+#: ../svn/svn.c:1125
+msgid ""
+"Create a new directory under version control.\n"
+"usage: 1. mkdir PATH...\n"
+" 2. mkdir URL...\n"
+"\n"
+" Create version controlled directories.\n"
+"\n"
+" 1. Each directory specified by a working copy PATH is created locally\n"
+" and scheduled for addition upon the next commit.\n"
+"\n"
+" 2. Each directory specified by a URL is created in the repository via\n"
+" an immediate commit.\n"
+"\n"
+" In both cases, all the intermediate directories must already exist,\n"
+" unless the --parents option is given.\n"
+msgstr ""
+
+#: ../svn/svn.c:1142
+msgid ""
+"Move (rename) an item in a working copy or repository.\n"
+"usage: move SRC... DST\n"
+"\n"
+" SRC and DST can both be working copy (WC) paths or URLs:\n"
+" WC -> WC: move an item in a working copy, as a local change to\n"
+" be committed later (with or without further changes)\n"
+" URL -> URL: move an item in the repository directly, immediately\n"
+" creating a new revision in the repository\n"
+" All the SRCs must be of the same type. When moving multiple sources,\n"
+" they will be added as children of DST, which must be a directory.\n"
+"\n"
+" SRC and DST of WC -> WC moves must be committed in the same revision.\n"
+" Furthermore, WC -> WC moves will refuse to move a mixed-revision subtree.\n"
+" To avoid unnecessary conflicts, it is recommended to run 'svn update'\n"
+" to update the subtree to a single revision before moving it.\n"
+" The --allow-mixed-revisions option is provided for backward "
+"compatibility.\n"
+"\n"
+" The --revision option has no use and is deprecated.\n"
+msgstr ""
+
+#: ../svn/svn.c:1164
+msgid ""
+"Apply a patch to a working copy.\n"
+"usage: patch PATCHFILE [WCPATH]\n"
+"\n"
+" Apply a unidiff patch in PATCHFILE to the working copy WCPATH.\n"
+" If WCPATH is omitted, '.' is assumed.\n"
+"\n"
+" A unidiff patch suitable for application to a working copy can be\n"
+" produced with the 'svn diff' command or third-party diffing tools.\n"
+" Any non-unidiff content of PATCHFILE is ignored, except for Subversion\n"
+" property diffs as produced by 'svn diff'.\n"
+"\n"
+" Changes listed in the patch will either be applied or rejected.\n"
+" If a change does not match at its exact line offset, it may be applied\n"
+" earlier or later in the file if a match is found elsewhere for the\n"
+" surrounding lines of context provided by the patch.\n"
+" A change may also be applied with fuzz, which means that one\n"
+" or more lines of context are ignored when matching the change.\n"
+" If no matching context can be found for a change, the change conflicts\n"
+" and will be written to a reject file with the extension .svnpatch.rej.\n"
+"\n"
+" For each patched file a line will be printed with characters reporting\n"
+" the action taken. These characters have the following meaning:\n"
+"\n"
+" A Added\n"
+" D Deleted\n"
+" U Updated\n"
+" C Conflict\n"
+" G Merged (with local uncommitted changes)\n"
+"\n"
+" Changes applied with an offset or fuzz are reported on lines starting\n"
+" with the '>' symbol. You should review such changes carefully.\n"
+"\n"
+" If the patch removes all content from a file, that file is scheduled\n"
+" for deletion. If the patch creates a new file, that file is scheduled\n"
+" for addition. Use 'svn revert' to undo deletions and additions you\n"
+" do not agree with.\n"
+"\n"
+" Hint: If the patch file was created with Subversion, it will contain\n"
+" the number of a revision N the patch will cleanly apply to\n"
+" (look for lines like '--- foo/bar.txt (revision N)').\n"
+" To avoid rejects, first update to the revision N using\n"
+" 'svn update -r N', apply the patch, and then update back to the\n"
+" HEAD revision. This way, conflicts can be resolved interactively.\n"
+msgstr ""
+
+#: ../svn/svn.c:1212
+msgid ""
+"Remove a property from files, dirs, or revisions.\n"
+"usage: 1. propdel PROPNAME [PATH...]\n"
+" 2. propdel PROPNAME --revprop -r REV [TARGET]\n"
+"\n"
+" 1. Removes versioned props in working copy.\n"
+" 2. Removes unversioned remote prop on repos revision.\n"
+" TARGET only determines which repository to access.\n"
+msgstr ""
+
+#: ../svn/svn.c:1222
+msgid ""
+"Edit a property with an external editor.\n"
+"usage: 1. propedit PROPNAME TARGET...\n"
+" 2. propedit PROPNAME --revprop -r REV [TARGET]\n"
+"\n"
+" 1. Edits versioned prop in working copy or repository.\n"
+" 2. Edits unversioned remote prop on repos revision.\n"
+" TARGET only determines which repository to access.\n"
+"\n"
+" See 'svn help propset' for more on setting properties.\n"
+msgstr ""
+
+#: ../svn/svn.c:1234
+msgid ""
+"Print the value of a property on files, dirs, or revisions.\n"
+"usage: 1. propget PROPNAME [TARGET[@REV]...]\n"
+" 2. propget PROPNAME --revprop -r REV [TARGET]\n"
+"\n"
+" 1. Prints versioned props. If specified, REV determines in which\n"
+" revision the target is first looked up.\n"
+" 2. Prints unversioned remote prop on repos revision.\n"
+" TARGET only determines which repository to access.\n"
+"\n"
+" With --verbose, the target path and the property name are printed on\n"
+" separate lines before each value, like 'svn proplist --verbose'.\n"
+" Otherwise, if there is more than one TARGET or a depth other than\n"
+" 'empty', the target path is printed on the same line before each value.\n"
+"\n"
+" By default, an extra newline is printed after the property value so that\n"
+" the output looks pretty. With a single TARGET and depth 'empty', you can\n"
+" use the --strict option to disable this (useful when redirecting a binary\n"
+" property value to a file, for example).\n"
+msgstr ""
+
+#: ../svn/svn.c:1254 ../svn/svn.c:1271
+msgid "print path, name and value on separate lines"
+msgstr ""
+
+#: ../svn/svn.c:1255
+msgid "don't print an extra newline"
+msgstr ""
+
+#: ../svn/svn.c:1258
+msgid ""
+"List all properties on files, dirs, or revisions.\n"
+"usage: 1. proplist [TARGET[@REV]...]\n"
+" 2. proplist --revprop -r REV [TARGET]\n"
+"\n"
+" 1. Lists versioned props. If specified, REV determines in which\n"
+" revision the target is first looked up.\n"
+" 2. Lists unversioned remote props on repos revision.\n"
+" TARGET only determines which repository to access.\n"
+"\n"
+" With --verbose, the property values are printed as well, like 'svn "
+"propget\n"
+" --verbose'. With --quiet, the paths are not printed.\n"
+msgstr ""
+
+#: ../svn/svn.c:1272
+msgid "don't print the path"
+msgstr ""
+
+#: ../svn/svn.c:1275
+msgid ""
+"Set the value of a property on files, dirs, or revisions.\n"
+"usage: 1. propset PROPNAME PROPVAL PATH...\n"
+" 2. propset PROPNAME --revprop -r REV PROPVAL [TARGET]\n"
+"\n"
+" 1. Changes a versioned file or directory property in a working copy.\n"
+" 2. Changes an unversioned property on a repository revision.\n"
+" (TARGET only determines which repository to access.)\n"
+"\n"
+" The value may be provided with the --file option instead of PROPVAL.\n"
+"\n"
+" Property names starting with 'svn:' are reserved. Subversion recognizes\n"
+" the following special versioned properties on a file:\n"
+" svn:keywords - Keywords to be expanded. Valid keywords are:\n"
+" URL, HeadURL - The URL for the head version of the file.\n"
+" Author, LastChangedBy - The last person to modify the file.\n"
+" Date, LastChangedDate - The date/time the file was last modified.\n"
+" Rev, Revision, - The last revision the file changed.\n"
+" LastChangedRevision\n"
+" Id - A compressed summary of the previous four.\n"
+" Header - Similar to Id but includes the full URL.\n"
+"\n"
+" Custom keywords can be defined with a format string separated from\n"
+" the keyword name with '='. Valid format substitutions are:\n"
+" %a - The author of the revision given by %r.\n"
+" %b - The basename of the URL of the file.\n"
+" %d - Short format of the date of the revision given by %r.\n"
+" %D - Long format of the date of the revision given by %r.\n"
+" %P - The file's path, relative to the repository root.\n"
+" %r - The number of the revision which last changed the file.\n"
+" %R - The URL to the root of the repository.\n"
+" %u - The URL of the file.\n"
+" %_ - A space (keyword definitions cannot contain a literal "
+"space).\n"
+" %% - A literal '%'.\n"
+" %H - Equivalent to %P%_%r%_%d%_%a.\n"
+" %I - Equivalent to %b%_%r%_%d%_%a.\n"
+" Example custom keyword definition: MyKeyword=%r%_%a%_%P\n"
+" Once a custom keyword has been defined for a file, it can be used\n"
+" within the file like any other keyword: $MyKeyword$\n"
+"\n"
+" svn:executable - If present, make the file executable. Use\n"
+" 'svn propdel svn:executable PATH...' to clear.\n"
+" svn:eol-style - One of 'native', 'LF', 'CR', 'CRLF'.\n"
+" svn:mime-type - The mimetype of the file. Used to determine\n"
+" whether to merge the file, and how to serve it from Apache.\n"
+" A mimetype beginning with 'text/' (or an absent mimetype) is\n"
+" treated as text. Anything else is treated as binary.\n"
+" svn:needs-lock - If present, indicates that the file should be locked\n"
+" before it is modified. Makes the working copy file read-only\n"
+" when it is not locked. Use 'svn propdel svn:needs-lock PATH...'\n"
+" to clear.\n"
+"\n"
+" Subversion recognizes the following special versioned properties on a\n"
+" directory:\n"
+" svn:ignore - A list of file glob patterns to ignore, one per "
+"line.\n"
+" svn:global-ignores - Like svn:ignore, but inheritable.\n"
+" svn:externals - A list of module specifiers, one per line, in the\n"
+" following format similar to the syntax of 'svn checkout':\n"
+" [-r REV] URL[@PEG] LOCALPATH\n"
+" Example:\n"
+" http://example.com/repos/zig foo/bar\n"
+" The LOCALPATH is relative to the directory having this property.\n"
+" To pin the external to a known revision, specify the optional REV:\n"
+" -r25 http://example.com/repos/zig foo/bar\n"
+" To unambiguously identify an element at a path which may have been\n"
+" subsequently deleted or renamed, specify the optional PEG revision:\n"
+" -r25 http://example.com/repos/zig@42 foo/bar\n"
+" The URL may be a full URL or a relative URL starting with one of:\n"
+" ../ to the parent directory of the extracted external\n"
+" ^/ to the repository root\n"
+" / to the server root\n"
+" // to the URL scheme\n"
+" Use of the following format is discouraged but is supported for\n"
+" interoperability with Subversion 1.4 and earlier clients:\n"
+" LOCALPATH [-r PEG] URL\n"
+" The ambiguous format 'relative_path relative_path' is taken as\n"
+" 'relative_url relative_path' with peg revision support.\n"
+" Lines starting with a '#' character are ignored.\n"
+msgstr ""
+
+#: ../svn/svn.c:1354
+msgid "read property value from file ARG"
+msgstr ""
+
+#: ../svn/svn.c:1357
+msgid ""
+"Relocate the working copy to point to a different repository root URL.\n"
+"usage: 1. relocate FROM-PREFIX TO-PREFIX [PATH...]\n"
+" 2. relocate TO-URL [PATH]\n"
+"\n"
+" Rewrite working copy URL metadata to reflect a syntactic change only.\n"
+" This is used when a repository's root URL changes (such as a scheme\n"
+" or hostname change) but your working copy still reflects the same\n"
+" directory within the same repository.\n"
+"\n"
+" 1. FROM-PREFIX and TO-PREFIX are initial substrings of the working\n"
+" copy's current and new URLs, respectively. (You may specify the\n"
+" complete old and new URLs if you wish.) Use 'svn info' to determine\n"
+" the current working copy URL.\n"
+"\n"
+" 2. TO-URL is the (complete) new repository URL to use for PATH.\n"
+"\n"
+" Examples:\n"
+" svn relocate http:// svn:// project1 project2\n"
+" svn relocate http://www.example.com/repo/project \\\n"
+" svn://svn.example.com/repo/project\n"
+msgstr ""
+
+#: ../svn/svn.c:1380
+msgid ""
+"Resolve conflicts on working copy files or directories.\n"
+"usage: resolve [PATH...]\n"
+"\n"
+" By default, perform interactive conflict resolution on PATH.\n"
+" In this mode, the command is recursive by default (depth 'infinity').\n"
+"\n"
+" The --accept=ARG option prevents interactive prompting and forces\n"
+" conflicts on PATH to be resolved in the manner specified by ARG.\n"
+" In this mode, the command is not recursive by default (depth 'empty').\n"
+msgstr ""
+
+#: ../svn/svn.c:1390
+msgid ""
+"specify automatic conflict resolution source\n"
+" ('base', 'working', 'mine-conflict',\n"
+" 'theirs-conflict', 'mine-full', 'theirs-full')"
+msgstr ""
+
+#: ../svn/svn.c:1397
+msgid ""
+"Remove 'conflicted' state on working copy files or directories.\n"
+"usage: resolved PATH...\n"
+"\n"
+" Note: this subcommand does not semantically resolve conflicts or\n"
+" remove conflict markers; it merely removes the conflict-related\n"
+" artifact files and allows PATH to be committed again. It has been\n"
+" deprecated in favor of running 'svn resolve --accept working'.\n"
+msgstr ""
+
+#: ../svn/svn.c:1407
+msgid ""
+"Restore pristine working copy state (undo local changes).\n"
+"usage: revert PATH...\n"
+"\n"
+" Revert changes in the working copy at or within PATH, and remove\n"
+" conflict markers as well, if any.\n"
+"\n"
+" This subcommand does not revert already committed changes.\n"
+" For information about undoing already committed changes, search\n"
+" the output of 'svn help merge' for 'undo'.\n"
+msgstr ""
+
+#: ../svn/svn.c:1419
+msgid ""
+"Print the status of working copy files and directories.\n"
+"usage: status [PATH...]\n"
+"\n"
+" With no args, print only locally modified items (no network access).\n"
+" With -q, print only summary information about locally modified items.\n"
+" With -u, add working revision and server out-of-date information.\n"
+" With -v, print full revision information on every item.\n"
+"\n"
+" The first seven columns in the output are each one character wide:\n"
+" First column: Says if item was added, deleted, or otherwise changed\n"
+" ' ' no modifications\n"
+" 'A' Added\n"
+" 'C' Conflicted\n"
+" 'D' Deleted\n"
+" 'I' Ignored\n"
+" 'M' Modified\n"
+" 'R' Replaced\n"
+" 'X' an unversioned directory created by an externals definition\n"
+" '?' item is not under version control\n"
+" '!' item is missing (removed by non-svn command) or incomplete\n"
+" '~' versioned item obstructed by some item of a different kind\n"
+" Second column: Modifications of a file's or directory's properties\n"
+" ' ' no modifications\n"
+" 'C' Conflicted\n"
+" 'M' Modified\n"
+" Third column: Whether the working copy is locked for writing by\n"
+" another Subversion client modifying the working copy\n"
+" ' ' not locked for writing\n"
+" 'L' locked for writing\n"
+" Fourth column: Scheduled commit will contain addition-with-history\n"
+" ' ' no history scheduled with commit\n"
+" '+' history scheduled with commit\n"
+" Fifth column: Whether the item is switched or a file external\n"
+" ' ' normal\n"
+" 'S' the item has a Switched URL relative to the parent\n"
+" 'X' a versioned file created by an eXternals definition\n"
+" Sixth column: Whether the item is locked in repository for exclusive "
+"commit\n"
+" (without -u)\n"
+" ' ' not locked by this working copy\n"
+" 'K' locked by this working copy, but lock might be stolen or broken\n"
+" (with -u)\n"
+" ' ' not locked in repository, not locked by this working copy\n"
+" 'K' locked in repository, lock owned by this working copy\n"
+" 'O' locked in repository, lock owned by another working copy\n"
+" 'T' locked in repository, lock owned by this working copy was stolen\n"
+" 'B' not locked in repository, lock owned by this working copy is "
+"broken\n"
+" Seventh column: Whether the item is the victim of a tree conflict\n"
+" ' ' normal\n"
+" 'C' tree-Conflicted\n"
+" If the item is a tree conflict victim, an additional line is printed\n"
+" after the item's status line, explaining the nature of the conflict.\n"
+"\n"
+" The out-of-date information appears in the ninth column (with -u):\n"
+" '*' a newer revision exists on the server\n"
+" ' ' the working copy is up to date\n"
+"\n"
+" Remaining fields are variable width and delimited by spaces:\n"
+" The working revision (with -u or -v; '-' if the item is copied)\n"
+" The last committed revision and last committed author (with -v)\n"
+" The working copy path is always the final field, so it can\n"
+" include spaces.\n"
+"\n"
+" The presence of a question mark ('?') where a working revision, last\n"
+" committed revision, or last committed author was expected indicates\n"
+" that the information is unknown or irrelevant given the state of the\n"
+" item (for example, when the item is the result of a copy operation).\n"
+" The question mark serves as a visual placeholder to facilitate parsing.\n"
+"\n"
+" Example output:\n"
+" svn status wc\n"
+" M wc/bar.c\n"
+" A + wc/qax.c\n"
+"\n"
+" svn status -u wc\n"
+" M 965 wc/bar.c\n"
+" * 965 wc/foo.c\n"
+" A + - wc/qax.c\n"
+" Status against revision: 981\n"
+"\n"
+" svn status --show-updates --verbose wc\n"
+" M 965 938 kfogel wc/bar.c\n"
+" * 965 922 sussman wc/foo.c\n"
+" A + - 687 joe wc/qax.c\n"
+" 965 687 joe wc/zig.c\n"
+" Status against revision: 981\n"
+"\n"
+" svn status\n"
+" M wc/bar.c\n"
+" ! C wc/qaz.c\n"
+" > local missing, incoming edit upon update\n"
+" D wc/qax.c\n"
+msgstr ""
+
+#: ../svn/svn.c:1512
+msgid "don't print unversioned items"
+msgstr ""
+
+#: ../svn/svn.c:1515
+msgid ""
+"Update the working copy to a different URL within the same repository.\n"
+"usage: 1. switch URL[@PEGREV] [PATH]\n"
+" 2. switch --relocate FROM-PREFIX TO-PREFIX [PATH...]\n"
+"\n"
+" 1. Update the working copy to mirror a new URL within the repository.\n"
+" This behavior is similar to 'svn update', and is the way to\n"
+" move a working copy to a branch or tag within the same repository.\n"
+" If specified, PEGREV determines in which revision the target is first\n"
+" looked up.\n"
+"\n"
+" If --force is used, unversioned obstructing paths in the working\n"
+" copy do not automatically cause a failure if the switch attempts to\n"
+" add the same path. If the obstructing path is the same type (file\n"
+" or directory) as the corresponding path in the repository it becomes\n"
+" versioned but its contents are left 'as-is' in the working copy.\n"
+" This means that an obstructing directory's unversioned children may\n"
+" also obstruct and become versioned. For files, any content "
+"differences\n"
+" between the obstruction and the repository are treated like a local\n"
+" modification to the working copy. All properties from the repository\n"
+" are applied to the obstructing path.\n"
+"\n"
+" Use the --set-depth option to set a new working copy depth on the\n"
+" targets of this operation.\n"
+"\n"
+" By default, Subversion will refuse to switch a working copy path to\n"
+" a new URL with which it shares no common version control ancestry.\n"
+" Use the '--ignore-ancestry' option to override this sanity check.\n"
+"\n"
+" 2. The '--relocate' option is deprecated. This syntax is equivalent to\n"
+" 'svn relocate FROM-PREFIX TO-PREFIX [PATH]'.\n"
+"\n"
+" See also 'svn help update' for a list of possible characters\n"
+" reporting the action taken.\n"
+"\n"
+" Examples:\n"
+" svn switch ^/branches/1.x-release\n"
+" svn switch --relocate http:// svn://\n"
+" svn switch --relocate http://www.example.com/repo/project \\\n"
+" svn://svn.example.com/repo/project\n"
+msgstr ""
+
+#: ../svn/svn.c:1557
+msgid "allow switching to a node with no common ancestor"
+msgstr ""
+
+#: ../svn/svn.c:1561
+msgid ""
+"Unlock working copy paths or URLs.\n"
+"usage: unlock TARGET...\n"
+"\n"
+" Use --force to break the lock.\n"
+msgstr ""
+
+#: ../svn/svn.c:1568
+msgid ""
+"Bring changes from the repository into the working copy.\n"
+"usage: update [PATH...]\n"
+"\n"
+" If no revision is given, bring working copy up-to-date with HEAD rev.\n"
+" Else synchronize working copy to revision given by -r.\n"
+"\n"
+" For each updated item a line will be printed with characters reporting\n"
+" the action taken. These characters have the following meaning:\n"
+"\n"
+" A Added\n"
+" D Deleted\n"
+" U Updated\n"
+" C Conflict\n"
+" G Merged\n"
+" E Existed\n"
+" R Replaced\n"
+"\n"
+" Characters in the first column report about the item itself.\n"
+" Characters in the second column report about properties of the item.\n"
+" A 'B' in the third column signifies that the lock for the file has\n"
+" been broken or stolen.\n"
+" A 'C' in the fourth column indicates a tree conflict, while a 'C' in\n"
+" the first and second columns indicate textual conflicts in files\n"
+" and in property values, respectively.\n"
+"\n"
+" If --force is used, unversioned obstructing paths in the working\n"
+" copy do not automatically cause a failure if the update attempts to\n"
+" add the same path. If the obstructing path is the same type (file\n"
+" or directory) as the corresponding path in the repository it becomes\n"
+" versioned but its contents are left 'as-is' in the working copy.\n"
+" This means that an obstructing directory's unversioned children may\n"
+" also obstruct and become versioned. For files, any content differences\n"
+" between the obstruction and the repository are treated like a local\n"
+" modification to the working copy. All properties from the repository\n"
+" are applied to the obstructing path. Obstructing paths are reported\n"
+" in the first column with code 'E'.\n"
+"\n"
+" If the specified update target is missing from the working copy but its\n"
+" immediate parent directory is present, checkout the target into its\n"
+" parent directory at the specified depth. If --parents is specified,\n"
+" create any missing parent directories of the target by checking them\n"
+" out, too, at depth=empty.\n"
+"\n"
+" Use the --set-depth option to set a new working copy depth on the\n"
+" targets of this operation.\n"
+msgstr ""
+
+#: ../svn/svn.c:1618
+msgid ""
+"Upgrade the metadata storage format for a working copy.\n"
+"usage: upgrade [WCPATH...]\n"
+"\n"
+" Local modifications are preserved.\n"
+msgstr ""
+
+#: ../svn/svn.c:1664 ../svnadmin/svnadmin.c:90 ../svnlook/svnlook.c:380
+#: ../svnrdump/svnrdump.c:65 ../svnsync/svnsync.c:297
+msgid "Caught signal"
+msgstr ""
+
+#: ../svn/svn.c:1817 ../svnlook/svnlook.c:2565
+msgid "Non-numeric limit argument given"
+msgstr ""
+
+#: ../svn/svn.c:1823 ../svnlook/svnlook.c:2571
+msgid "Argument to --limit must be positive"
+msgstr ""
+
+#: ../svn/svn.c:1844 ../svn/svn.c:2121
+msgid "Can't specify -c with --old"
+msgstr ""
+
+#: ../svn/svn.c:1875
+#, c-format
+msgid "Negative number in range (%s) not supported with -c"
+msgstr ""
+
+#: ../svn/svn.c:1888
+#, c-format
+msgid "Non-numeric change argument (%s) given to -c"
+msgstr ""
+
+#: ../svn/svn.c:1896
+msgid "There is no change 0"
+msgstr ""
+
+#: ../svn/svn.c:1939 ../svnadmin/svnadmin.c:2037 ../svnrdump/svnrdump.c:937
+#: ../svnsync/svnsync.c:2052
+#, c-format
+msgid "Syntax error in revision argument '%s'"
+msgstr ""
+
+#: ../svn/svn.c:2005 ../svn/svn.c:2024
+#, c-format
+msgid "Error converting depth from locale to UTF-8"
+msgstr ""
+
+#: ../svn/svn.c:2013
+#, c-format
+msgid ""
+"'%s' is not a valid depth; try 'empty', 'files', 'immediates', or 'infinity'"
+msgstr ""
+
+#: ../svn/svn.c:2032
+#, c-format
+msgid ""
+"'%s' is not a valid depth; try 'exclude', 'empty', 'files', 'immediates', or "
+"'infinity'"
+msgstr ""
+
+#: ../svn/svn.c:2161
+#, c-format
+msgid "Syntax error in native-eol argument '%s'"
+msgstr ""
+
+#: ../svn/svn.c:2181
+msgid "Changelist names must not be empty"
+msgstr ""
+
+#: ../svn/svn.c:2215
+#, c-format
+msgid "'%s' is not a valid --accept value"
+msgstr ""
+
+#: ../svn/svn.c:2223
+#, c-format
+msgid "'%s' is not a valid --show-revs value"
+msgstr ""
+
+#: ../svn/svn.c:2235
+#, c-format
+msgid "Invalid strip count '%s'"
+msgstr ""
+
+#: ../svn/svn.c:2241
+msgid "Argument to --strip must be positive"
+msgstr ""
+
+#: ../svn/svn.c:2296 ../svnmucc/svnmucc.c:1208 ../svnrdump/svnrdump.c:993
+#: ../svnsync/svnsync.c:2096
+msgid "--non-interactive and --force-interactive are mutually exclusive"
+msgstr ""
+
+#: ../svn/svn.c:2350 ../svndumpfilter/svndumpfilter.c:1538
+#: ../svnlook/svnlook.c:2667
+#, c-format
+msgid "Subcommand argument required\n"
+msgstr ""
+
+#: ../svn/svn.c:2367 ../svnadmin/svnadmin.c:2220
+#: ../svndumpfilter/svndumpfilter.c:1558 ../svnlook/svnlook.c:2686
+#: ../svnrdump/svnrdump.c:1039
+#, c-format
+msgid "Unknown subcommand: '%s'\n"
+msgstr ""
+
+#: ../svn/svn.c:2376
+#, c-format
+msgid ""
+"Undo is done using either the 'svn revert' or the 'svn merge' command.\n"
+msgstr ""
+
+#: ../svn/svn.c:2411
+#, c-format
+msgid ""
+"Subcommand '%s' doesn't accept option '%s'\n"
+"Type 'svn help %s' for usage.\n"
+msgstr ""
+
+#: ../svn/svn.c:2425
+msgid ""
+"Multiple revision arguments encountered; can't specify -c twice, or both -c "
+"and -r"
+msgstr ""
+
+#: ../svn/svn.c:2437
+msgid "--depth and --set-depth are mutually exclusive"
+msgstr ""
+
+#: ../svn/svn.c:2447
+msgid "--with-all-revprops and --with-no-revprops are mutually exclusive"
+msgstr ""
+
+#: ../svn/svn.c:2457
+msgid "--with-revprop and --with-no-revprops are mutually exclusive"
+msgstr ""
+
+#: ../svn/svn.c:2470
+msgid "--message (-m) and --file (-F) are mutually exclusive"
+msgstr ""
+
+#: ../svn/svn.c:2479 ../svnmucc/svnmucc.c:1219 ../svnrdump/svnrdump.c:1098
+#: ../svnsync/svnsync.c:2147
+msgid "--trust-server-cert requires --non-interactive"
+msgstr ""
+
+#: ../svn/svn.c:2489
+msgid "--diff-cmd and --internal-diff are mutually exclusive"
+msgstr ""
+
+#: ../svn/svn.c:2537
+msgid "--relocate and --depth are mutually exclusive"
+msgstr ""
+
+#: ../svn/svn.c:2545
+msgid "--relocate and --non-recursive (-N) are mutually exclusive"
+msgstr ""
+
+#: ../svn/svn.c:2667
+msgid "Log message file is a versioned file; use '--force-log' to override"
+msgstr ""
+
+#: ../svn/svn.c:2674
+msgid "Lock comment file is a versioned file; use '--force-log' to override"
+msgstr ""
+
+#: ../svn/svn.c:2695
+msgid ""
+"The log message is a pathname (was -F intended?); use '--force-log' to "
+"override"
+msgstr ""
+
+#: ../svn/svn.c:2702
+msgid ""
+"The lock comment is a pathname (was -F intended?); use '--force-log' to "
+"override"
+msgstr ""
+
+#: ../svn/svn.c:2726
+msgid "--auto-props and --no-auto-props are mutually exclusive"
+msgstr ""
+
+#: ../svn/svn.c:2831 ../svn/svn.c:2838
+#, c-format
+msgid "--accept=%s incompatible with --non-interactive"
+msgstr ""
+
+#: ../svn/svn.c:2894
+#, c-format
+msgid "Try 'svn help %s' for more information"
+msgstr ""
+
+#: ../svn/svn.c:2900
+msgid "Please see the 'svn upgrade' command"
+msgstr ""
+
+#: ../svn/svn.c:2906 ../svnmucc/svnmucc.c:1457 ../svnrdump/svnrdump.c:1175
+msgid ""
+"Authentication failed and interactive prompting is disabled; see the --force-"
+"interactive option"
+msgstr ""
+
+#: ../svn/svn.c:2911
+msgid ""
+"Reading file from standard input because of -F option; this can interfere "
+"with interactive prompting"
+msgstr ""
+
+#: ../svn/svn.c:2922
+msgid "Run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)"
+msgstr ""
+
+#: ../svn/svn.c:2929
+msgid ""
+"Another process is blocking the working copy database, or the underlying "
+"filesystem does not support file locking; if the working copy is on a "
+"network filesystem, make sure file locking has been enabled on the file "
+"server"
+msgstr ""
+
+#: ../svn/svn.c:2942
+msgid ""
+"When using svn+ssh:// URLs, keep in mind that the --username and --password "
+"options are ignored because authentication is performed by SSH, not "
+"Subversion"
+msgstr ""
+
+#: ../svn/switch-cmd.c:63
+#, c-format
+msgid "'%s' to '%s' is not a valid relocation"
+msgstr ""
+
+#: ../svn/switch-cmd.c:170
+#, c-format
+msgid ""
+"Path '%s' does not share common version control ancestry with the requested "
+"switch location. Use --ignore-ancestry to disable this check."
+msgstr ""
+
+#: ../svn/switch-cmd.c:180
+msgid ""
+"'svn switch' does not support switching a working copy to a different "
+"repository"
+msgstr ""
+
+#: ../svn/update-cmd.c:93
+#, c-format
+msgid "Summary of updates:\n"
+msgstr ""
+
+#: ../svn/update-cmd.c:97
+#, c-format
+msgid " Updated '%s' to r%ld.\n"
+msgstr ""
+
+#: ../svn/util.c:79
+#, c-format
+msgid ""
+"\n"
+"Committed revision %ld%s.\n"
+msgstr ""
+
+#: ../svn/util.c:83
+msgid " (the answer to life, the universe, and everything)"
+msgstr ""
+
+#: ../svn/util.c:92
+#, c-format
+msgid ""
+"\n"
+"Warning: %s\n"
+msgstr ""
+
+#: ../svn/util.c:133
+msgid ""
+"The SVN_MERGE environment variable is empty or consists solely of "
+"whitespace. Expected a shell command.\n"
+msgstr ""
+
+#: ../svn/util.c:139
+msgid ""
+"The environment variable SVN_MERGE and the merge-tool-cmd run-time "
+"configuration option were not set.\n"
+msgstr ""
+
+#: ../svn/util.c:169
+#, c-format
+msgid "The external merge tool exited with exit code %d"
+msgstr ""
+
+#: ../svn/util.c:211
+msgid "Log message contains a zero byte"
+msgstr ""
+
+#: ../svn/util.c:269
+#, c-format
+msgid " '%s'"
+msgstr ""
+
+#: ../svn/util.c:273
+msgid "Your commit message was left in a temporary file:"
+msgstr ""
+
+#: ../svn/util.c:325
+msgid "--This line, and those below, will be ignored--"
+msgstr ""
+
+#: ../svn/util.c:360
+msgid "Error normalizing log message to internal format"
+msgstr ""
+
+#: ../svn/util.c:447 ../svnmucc/svnmucc.c:764
+msgid "Cannot invoke editor to get log message when non-interactive"
+msgstr ""
+
+#: ../svn/util.c:460
+msgid ""
+"Could not use external editor to fetch log message; consider setting the "
+"$SVN_EDITOR environment variable or using the --message (-m) or --file (-F) "
+"options"
+msgstr ""
+
+#: ../svn/util.c:496
+msgid ""
+"\n"
+"Log message unchanged or not specified\n"
+"(a)bort, (c)ontinue, (e)dit:\n"
+msgstr ""
+
+#: ../svn/util.c:549
+msgid ""
+"Use --force to override this restriction (local modifications may be lost)"
+msgstr ""
+
+#: ../svn/util.c:738 ../svn/util.c:771
+msgid "none"
+msgstr ""
+
+#: ../svn/util.c:739
+msgid "file"
+msgstr ""
+
+#: ../svn/util.c:740
+msgid "dir"
+msgstr ""
+
+#: ../svn/util.c:772
+msgid "update"
+msgstr ""
+
+#: ../svn/util.c:773
+msgid "switch"
+msgstr ""
+
+#: ../svn/util.c:896
+msgid "(invalid date)"
+msgstr ""
+
+#: ../svn/util.c:1056
+#, c-format
+msgid ""
+"svn: warning: '%s' is a binary mime-type but file '%s' looks like text; "
+"diff, merge, blame, and other operations will stop working on this file\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:217 ../svnrdump/svnrdump.c:120
+msgid "specify revision number ARG (or X:Y range)"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:220 ../svnlook/svnlook.c:162
+msgid "specify transaction name ARG"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:223
+msgid "dump or hotcopy incrementally"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:226
+msgid "use deltas in dump output"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:229
+msgid "bypass the repository hook system"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:232
+msgid "bypass property validation logic"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:235 ../svnlook/svnlook.c:193
+#: ../svnrdump/svnrdump.c:122 ../svnserve/svnserve.c:289
+#: ../svnversion/svnversion.c:143
+msgid "no progress (only errors) to stderr"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:238
+msgid "ignore any repos UUID found in the stream"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:241
+msgid "set repos UUID to that found in stream, if any"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:244
+msgid "type of repository: 'fsfs' (default) or 'bdb'"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:247
+msgid "load at specified directory in repository"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:250
+msgid "disable fsync at transaction commit [Berkeley DB]"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:253
+msgid "disable automatic log file removal [Berkeley DB]"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:259
+msgid ""
+"remove redundant Berkeley DB log files\n"
+" from source repository [Berkeley DB]"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:263
+msgid "call pre-commit hook before committing revisions"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:266
+msgid "call post-commit hook after committing revisions"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:269
+msgid "call hook before changing revision property"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:272
+msgid "call hook after changing revision property"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:275
+msgid ""
+"wait instead of exit if the repository is in\n"
+" use by another process"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:279 ../svnadmin/svnadmin.c:282
+#: ../svnadmin/svnadmin.c:285
+msgid "deprecated; see --compatible-version"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:288
+msgid ""
+"size of the extra in-memory cache in MB used to\n"
+" minimize redundant operations. Default: 16.\n"
+" [used for FSFS repositories only]"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:293
+msgid ""
+"use repository format compatible with Subversion\n"
+" version ARG (\"1.5.5\", \"1.7\", etc.)"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:296
+msgid "read repository paths from file ARG"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:308
+msgid ""
+"usage: svnadmin crashtest REPOS_PATH\n"
+"\n"
+"Open the repository at REPOS_PATH, then abort, thus simulating\n"
+"a process that crashes while holding an open repository handle.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:314
+msgid ""
+"usage: svnadmin create REPOS_PATH\n"
+"\n"
+"Create a new, empty repository at REPOS_PATH.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:323
+msgid ""
+"usage: svnadmin deltify [-r LOWER[:UPPER]] REPOS_PATH\n"
+"\n"
+"Run over the requested revision range, performing predecessor delti-\n"
+"fication on the paths changed in those revisions. Deltification in\n"
+"essence compresses the repository by only storing the differences or\n"
+"delta from the preceding revision. If no revisions are specified,\n"
+"this will simply deltify the HEAD revision.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:332
+msgid ""
+"usage: svnadmin dump REPOS_PATH [-r LOWER[:UPPER] [--incremental]]\n"
+"\n"
+"Dump the contents of filesystem to stdout in a 'dumpfile'\n"
+"portable format, sending feedback to stderr. Dump revisions\n"
+"LOWER rev through UPPER rev. If no revisions are given, dump all\n"
+"revision trees. If only LOWER is given, dump that one revision tree.\n"
+"If --incremental is passed, the first revision dumped will describe\n"
+"only the paths changed in that revision; otherwise it will describe\n"
+"every path present in the repository as of that revision. (In either\n"
+"case, the second and subsequent revisions, if any, describe only paths\n"
+"changed in those revisions.)\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:345
+msgid ""
+"usage: 1. svnadmin freeze REPOS_PATH PROGRAM [ARG...]\n"
+" 2. svnadmin freeze -F FILE PROGRAM [ARG...]\n"
+"\n"
+"1. Run PROGRAM passing ARGS while holding a write-lock on REPOS_PATH.\n"
+"\n"
+"2. Like 1 except all repositories listed in FILE are locked. The file\n"
+" format is repository paths separated by newlines. Repositories are\n"
+" locked in the same order as they are listed in the file.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:355
+msgid ""
+"usage: svnadmin help [SUBCOMMAND...]\n"
+"\n"
+"Describe the usage of this program or its subcommands.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:360
+msgid ""
+"usage: svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH\n"
+"\n"
+"Make a hot copy of a repository.\n"
+"If --incremental is passed, data which already exists at the destination\n"
+"is not copied again. Incremental mode is implemented for FSFS "
+"repositories.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:367
+msgid ""
+"usage: svnadmin list-dblogs REPOS_PATH\n"
+"\n"
+"List all Berkeley DB log files.\n"
+"\n"
+"WARNING: Modifying or deleting logfiles which are still in use\n"
+"will cause your repository to be corrupted.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:374
+msgid ""
+"usage: svnadmin list-unused-dblogs REPOS_PATH\n"
+"\n"
+"List unused Berkeley DB log files.\n"
+"\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:379
+msgid ""
+"usage: svnadmin load REPOS_PATH\n"
+"\n"
+"Read a 'dumpfile'-formatted stream from stdin, committing\n"
+"new revisions into the repository's filesystem. If the repository\n"
+"was previously empty, its UUID will, by default, be changed to the\n"
+"one specified in the stream. Progress feedback is sent to stdout.\n"
+"If --revision is specified, limit the loaded revisions to only those\n"
+"in the dump stream whose revision numbers match the specified range.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:391
+msgid ""
+"usage: svnadmin lock REPOS_PATH PATH USERNAME COMMENT-FILE [TOKEN]\n"
+"\n"
+"Lock PATH by USERNAME setting comments from COMMENT-FILE.\n"
+"If provided, use TOKEN as lock token. Use --bypass-hooks to avoid\n"
+"triggering the pre-lock and post-lock hook scripts.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:398
+msgid ""
+"usage: svnadmin lslocks REPOS_PATH [PATH-IN-REPOS]\n"
+"\n"
+"Print descriptions of all locks on or under PATH-IN-REPOS (which,\n"
+"if not provided, is the root of the repository).\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:404
+msgid ""
+"usage: svnadmin lstxns REPOS_PATH\n"
+"\n"
+"Print the names of all uncommitted transactions.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:409
+msgid ""
+"usage: svnadmin pack REPOS_PATH\n"
+"\n"
+"Possibly compact the repository into a more efficient storage model.\n"
+"This may not apply to all repositories, in which case, exit.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:415
+msgid ""
+"usage: svnadmin recover REPOS_PATH\n"
+"\n"
+"Run the recovery procedure on a repository. Do this if you've\n"
+"been getting errors indicating that recovery ought to be run.\n"
+"Berkeley DB recovery requires exclusive access and will\n"
+"exit if the repository is in use by another process.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:423
+msgid ""
+"usage: svnadmin rmlocks REPOS_PATH LOCKED_PATH...\n"
+"\n"
+"Unconditionally remove lock from each LOCKED_PATH.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:428
+msgid ""
+"usage: svnadmin rmtxns REPOS_PATH TXN_NAME...\n"
+"\n"
+"Delete the named transaction(s).\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:433
+msgid ""
+"usage: svnadmin setlog REPOS_PATH -r REVISION FILE\n"
+"\n"
+"Set the log-message on revision REVISION to the contents of FILE. Use\n"
+"--bypass-hooks to avoid triggering the revision-property-related hooks\n"
+"(for example, if you do not want an email notification sent\n"
+"from your post-revprop-change hook, or because the modification of\n"
+"revision properties has not been enabled in the pre-revprop-change\n"
+"hook).\n"
+"\n"
+"NOTE: Revision properties are not versioned, so this command will\n"
+"overwrite the previous log message.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:445
+msgid ""
+"usage: svnadmin setrevprop REPOS_PATH -r REVISION NAME FILE\n"
+"\n"
+"Set the property NAME on revision REVISION to the contents of FILE. Use\n"
+"--use-pre-revprop-change-hook/--use-post-revprop-change-hook to trigger\n"
+"the revision property-related hooks (for example, if you want an email\n"
+"notification sent from your post-revprop-change hook).\n"
+"\n"
+"NOTE: Revision properties are not versioned, so this command will\n"
+"overwrite the previous value of the property.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:456
+msgid ""
+"usage: svnadmin setuuid REPOS_PATH [NEW_UUID]\n"
+"\n"
+"Reset the repository UUID for the repository located at REPOS_PATH. If\n"
+"NEW_UUID is provided, use that as the new repository UUID; otherwise,\n"
+"generate a brand new UUID for the repository.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:463
+msgid ""
+"usage: svnadmin unlock REPOS_PATH LOCKED_PATH USERNAME TOKEN\n"
+"\n"
+"Unlock LOCKED_PATH (as USERNAME) after verifying that the token\n"
+"associated with the lock matches TOKEN. Use --bypass-hooks to avoid\n"
+"triggering the pre-unlock and post-unlock hook scripts.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:470
+msgid ""
+"usage: svnadmin upgrade REPOS_PATH\n"
+"\n"
+"Upgrade the repository located at REPOS_PATH to the latest supported\n"
+"schema version.\n"
+"\n"
+"This functionality is provided as a convenience for repository\n"
+"administrators who wish to make use of new Subversion functionality\n"
+"without having to undertake a potentially costly full repository dump\n"
+"and load operation. As such, the upgrade performs only the minimum\n"
+"amount of work needed to accomplish this while still maintaining the\n"
+"integrity of the repository. It does not guarantee the most optimized\n"
+"repository state as a dump and subsequent load would.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:483
+msgid ""
+"usage: svnadmin verify REPOS_PATH\n"
+"\n"
+"Verify the data stored in the repository.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:545
+msgid "Invalid revision specifier"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:549
+#, c-format
+msgid "Revisions must not be greater than the youngest revision (%ld)"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:656
+#, c-format
+msgid ""
+"%swarning: The \"%s\" repository back-end is deprecated, consider using \"%s"
+"\" instead.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:696
+msgid "Repositories compatible with 1.0.x must use --fs-type=bdb"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:739 ../svnadmin/svnadmin.c:1011
+#: ../svnadmin/svnadmin.c:1192
+msgid "First revision cannot be higher than second"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:748
+#, c-format
+msgid "Deltifying revision %ld..."
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:752 ../svnadmin/svnadmin.c:812
+#: ../svnadmin/svnadmin.c:827
+#, c-format
+msgid "done.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:793
+#, c-format
+msgid "* Verifying repository metadata ...\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:796
+#, c-format
+msgid "* Verifying metadata at revision %ld ...\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:806
+#, c-format
+msgid "Packing revisions in shard %s..."
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:821
+#, c-format
+msgid "Packing revprops in shard %s..."
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:898
+#, c-format
+msgid "<<< Skipped original revision %ld\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:915
+#, c-format
+msgid ""
+"Repository lock acquired.\n"
+"Please wait; recovering the repository may take some time...\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:922
+msgid ""
+"Repository lock acquired.\n"
+"Please wait; upgrading the repository may take some time...\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:1072
+msgid "No program provided"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:1108
+msgid ""
+"general usage: svnadmin SUBCOMMAND REPOS_PATH [ARGS & OPTIONS ...]\n"
+"Type 'svnadmin help <subcommand>' for help on a specific subcommand.\n"
+"Type 'svnadmin --version' to see the program version and FS modules.\n"
+"\n"
+"Available subcommands:\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:1115 ../svnlook/svnlook.c:2226
+#: ../svnserve/svnserve.c:335
+msgid ""
+"The following repository back-end (FS) modules are available:\n"
+"\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:1144
+#, c-format
+msgid "Invalid revision number (%ld) specified"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:1154
+msgid "Non-numeric revision specified"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:1213
+msgid ""
+"Invalid property value found in dumpstream; consider repairing the source or "
+"using --bypass-prop-validation while loading."
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:1279 ../svnadmin/svnadmin.c:1911
+msgid ""
+"Failed to get exclusive repository access; perhaps another process\n"
+"such as httpd, svnserve or svn has it open?"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:1284 ../svnadmin/svnadmin.c:1916
+#, c-format
+msgid "Waiting on repository lock; perhaps another process has it open?\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:1292
+#, c-format
+msgid ""
+"\n"
+"Recovery completed.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:1299
+#, c-format
+msgid "The latest repos revision is %ld.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:1414
+#, c-format
+msgid "Transaction '%s' removed.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:1476 ../svnadmin/svnadmin.c:1521
+#, c-format
+msgid "Missing revision"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:1479 ../svnadmin/svnadmin.c:1524
+#, c-format
+msgid "Only one revision allowed"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:1578
+#, c-format
+msgid "--revision (-r) and --transaction (-t) are mutually exclusive"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:1745 ../svnlook/svnlook.c:2289
+#, c-format
+msgid "UUID Token: %s\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:1746 ../svnlook/svnlook.c:2290
+#, c-format
+msgid "Owner: %s\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:1747 ../svnlook/svnlook.c:2291
+#, c-format
+msgid "Created: %s\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:1748 ../svnlook/svnlook.c:2292
+#, c-format
+msgid "Expires: %s\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:1750
+#, c-format
+msgid ""
+"Comment (%i line):\n"
+"%s\n"
+"\n"
+msgid_plural ""
+"Comment (%i lines):\n"
+"%s\n"
+"\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../svnadmin/svnadmin.c:1796
+msgid "No paths to unlock provided"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:1814
+#, c-format
+msgid "Path '%s' isn't locked.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:1826
+#, c-format
+msgid "Removed lock on '%s'.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:1879
+#, c-format
+msgid "'%s' unlocked by user '%s'.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:1926
+msgid ""
+"Upgrade of this repository's underlying versioned filesystem is not "
+"supported; consider dumping and loading the data elsewhere"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:1933
+msgid ""
+"Upgrade of this repository is not supported; consider dumping and loading "
+"the data elsewhere"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:1939
+#, c-format
+msgid ""
+"\n"
+"Upgrade completed.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:2024 ../svnrdump/svnrdump.c:923
+msgid ""
+"Multiple revision arguments encountered; try '-r N:M' instead of '-r N -r M'"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:2102
+#, c-format
+msgid "Cannot create pre-1.0-compatible repositories"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:2115
+#, c-format
+msgid "Cannot guarantee compatibility beyond the current running version (%s)"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:2204
+#, c-format
+msgid "subcommand argument required\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:2239
+msgid "Repository argument required"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:2252
+#, c-format
+msgid "'%s' is a URL when it should be a local path"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:2283
+#, c-format
+msgid ""
+"Subcommand '%s' doesn't accept option '%s'\n"
+"Type 'svnadmin help %s' for usage.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:2326
+msgid "Try 'svnadmin help' for more info"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:79
+#, c-format
+msgid "Can't open stdio file"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:406
+msgid "This is an empty revision for padding."
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:489
+#, c-format
+msgid "Revision %ld committed as %ld.\n"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:512
+#, c-format
+msgid "Revision %ld skipped.\n"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:608
+#, c-format
+msgid "Invalid copy source path '%s'"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:649
+#, c-format
+msgid "Missing Node-action for path '%s'"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:692
+#, c-format
+msgid "No valid copyfrom revision in filtered stream"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:816
+#, c-format
+msgid "Missing merge source path '%s'; try with --skip-missing-merge-sources"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:838
+#, c-format
+msgid "No valid revision range 'start' in filtered stream"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:845
+#, c-format
+msgid "No valid revision range 'end' in filtered stream"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:891 ../svndumpfilter/svndumpfilter.c:922
+#, c-format
+msgid ""
+"Delta property block detected, but deltas are not enabled for node '%s' in "
+"original revision %ld"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1055
+msgid "Do not display filtering statistics."
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1057
+msgid "Treat the path prefixes as file glob patterns."
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1059
+msgid "Remove revisions emptied by filtering."
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1061
+msgid ""
+"Remove all empty revisions found in dumpstream\n"
+" except revision 0."
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1064
+msgid "Renumber revisions left after filtering."
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1067
+msgid "Skip missing merge sources."
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1069
+msgid "Don't filter revision properties."
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1071
+msgid ""
+"Read additional prefixes, one per line, from\n"
+" file ARG."
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1083
+msgid ""
+"Filter out nodes with given prefixes from dumpstream.\n"
+"usage: svndumpfilter exclude PATH_PREFIX...\n"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1092
+msgid ""
+"Filter out nodes without given prefixes from dumpstream.\n"
+"usage: svndumpfilter include PATH_PREFIX...\n"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1101
+msgid ""
+"Describe the usage of this program or its subcommands.\n"
+"usage: svndumpfilter help [SUBCOMMAND...]\n"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1177
+msgid ""
+"general usage: svndumpfilter SUBCOMMAND [ARGS & OPTIONS ...]\n"
+"Type 'svndumpfilter help <subcommand>' for help on a specific subcommand.\n"
+"Type 'svndumpfilter --version' to see the program version.\n"
+"\n"
+"Available subcommands:\n"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1235
+#, c-format
+msgid "Excluding (and dropping empty revisions for) prefix patterns:\n"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1237
+#, c-format
+msgid "Excluding prefix patterns:\n"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1240
+#, c-format
+msgid "Including (and dropping empty revisions for) prefix patterns:\n"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1242
+#, c-format
+msgid "Including prefix patterns:\n"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1250
+#, c-format
+msgid "Excluding (and dropping empty revisions for) prefixes:\n"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1252
+#, c-format
+msgid "Excluding prefixes:\n"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1255
+#, c-format
+msgid "Including (and dropping empty revisions for) prefixes:\n"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1257
+#, c-format
+msgid "Including prefixes:\n"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1285
+#, c-format
+msgid ""
+"Dropped %d revision.\n"
+"\n"
+msgid_plural ""
+"Dropped %d revisions.\n"
+"\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../svndumpfilter/svndumpfilter.c:1293
+msgid "Revisions renumbered as follows:\n"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1321
+#, c-format
+msgid " %ld => (dropped)\n"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1336
+#, c-format
+msgid "Dropped %d node:\n"
+msgid_plural "Dropped %d nodes:\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../svndumpfilter/svndumpfilter.c:1505
+msgid "--drop-empty-revs cannot be used with --drop-all-empty-revs"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1625
+#, c-format
+msgid ""
+"\n"
+"Error: no prefixes supplied.\n"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1656
+#, c-format
+msgid ""
+"Subcommand '%s' doesn't accept option '%s'\n"
+"Type 'svndumpfilter help %s' for usage.\n"
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1674
+msgid "Try 'svndumpfilter help' for more info"
+msgstr ""
+
+#: ../svnlook/svnlook.c:117
+msgid "show details for copies"
+msgstr ""
+
+#: ../svnlook/svnlook.c:120
+msgid "print differences against the copy source"
+msgstr ""
+
+#: ../svnlook/svnlook.c:123
+msgid "show full paths instead of indenting them"
+msgstr ""
+
+#: ../svnlook/svnlook.c:129
+msgid "maximum number of history entries"
+msgstr ""
+
+#: ../svnlook/svnlook.c:147
+msgid "operate on single directory only"
+msgstr ""
+
+#: ../svnlook/svnlook.c:150
+msgid "specify revision number ARG"
+msgstr ""
+
+#: ../svnlook/svnlook.c:153
+msgid "operate on a revision property (use with -r or -t)"
+msgstr ""
+
+#: ../svnlook/svnlook.c:156
+msgid "show node revision ids for each path"
+msgstr ""
+
+#: ../svnlook/svnlook.c:159
+msgid "show path's inherited properties"
+msgstr ""
+
+#: ../svnlook/svnlook.c:165
+msgid "be verbose"
+msgstr ""
+
+#: ../svnlook/svnlook.c:174
+msgid ""
+"Specify differencing options for external diff or\n"
+" internal diff. Default: '-u'. Options are\n"
+" separated by spaces. Internal diff takes:\n"
+" -u, --unified: Show 3 lines of unified "
+"context\n"
+" -b, --ignore-space-change: Ignore changes in\n"
+" amount of white space\n"
+" -w, --ignore-all-space: Ignore all white "
+"space\n"
+" --ignore-eol-style: Ignore changes in EOL "
+"style\n"
+" -p, --show-c-function: Show C function name"
+msgstr ""
+
+#: ../svnlook/svnlook.c:205
+msgid ""
+"usage: svnlook author REPOS_PATH\n"
+"\n"
+"Print the author.\n"
+msgstr ""
+
+#: ../svnlook/svnlook.c:210
+msgid ""
+"usage: svnlook cat REPOS_PATH FILE_PATH\n"
+"\n"
+"Print the contents of a file. Leading '/' on FILE_PATH is optional.\n"
+msgstr ""
+
+#: ../svnlook/svnlook.c:215
+msgid ""
+"usage: svnlook changed REPOS_PATH\n"
+"\n"
+"Print the paths that were changed.\n"
+msgstr ""
+
+#: ../svnlook/svnlook.c:220
+msgid ""
+"usage: svnlook date REPOS_PATH\n"
+"\n"
+"Print the datestamp.\n"
+msgstr ""
+
+#: ../svnlook/svnlook.c:225
+msgid ""
+"usage: svnlook diff REPOS_PATH\n"
+"\n"
+"Print GNU-style diffs of changed files and properties.\n"
+msgstr ""
+
+#: ../svnlook/svnlook.c:232
+msgid ""
+"usage: svnlook dirs-changed REPOS_PATH\n"
+"\n"
+"Print the directories that were themselves changed (property edits)\n"
+"or whose file children were changed.\n"
+msgstr ""
+
+#: ../svnlook/svnlook.c:238
+msgid ""
+"usage: svnlook filesize REPOS_PATH PATH_IN_REPOS\n"
+"\n"
+"Print the size (in bytes) of the file located at PATH_IN_REPOS as\n"
+"it is represented in the repository.\n"
+msgstr ""
+
+#: ../svnlook/svnlook.c:244
+msgid ""
+"usage: svnlook help [SUBCOMMAND...]\n"
+"\n"
+"Describe the usage of this program or its subcommands.\n"
+msgstr ""
+
+#: ../svnlook/svnlook.c:249
+msgid ""
+"usage: svnlook history REPOS_PATH [PATH_IN_REPOS]\n"
+"\n"
+"Print information about the history of a path in the repository (or\n"
+"the root directory if no path is supplied).\n"
+msgstr ""
+
+#: ../svnlook/svnlook.c:255
+msgid ""
+"usage: svnlook info REPOS_PATH\n"
+"\n"
+"Print the author, datestamp, log message size, and log message.\n"
+msgstr ""
+
+#: ../svnlook/svnlook.c:260
+msgid ""
+"usage: svnlook lock REPOS_PATH PATH_IN_REPOS\n"
+"\n"
+"If a lock exists on a path in the repository, describe it.\n"
+msgstr ""
+
+#: ../svnlook/svnlook.c:265
+msgid ""
+"usage: svnlook log REPOS_PATH\n"
+"\n"
+"Print the log message.\n"
+msgstr ""
+
+#: ../svnlook/svnlook.c:270
+msgid ""
+"usage: 1. svnlook propget REPOS_PATH PROPNAME PATH_IN_REPOS\n"
+" 2. svnlook propget --revprop REPOS_PATH PROPNAME\n"
+"\n"
+"Print the raw value of a property on a path in the repository.\n"
+"With --revprop, print the raw value of a revision property.\n"
+msgstr ""
+
+#: ../svnlook/svnlook.c:279
+msgid ""
+"usage: 1. svnlook proplist REPOS_PATH PATH_IN_REPOS\n"
+" 2. svnlook proplist --revprop REPOS_PATH\n"
+"\n"
+"List the properties of a path in the repository, or\n"
+"with the --revprop option, revision properties.\n"
+"With -v, show the property values too.\n"
+msgstr ""
+
+#: ../svnlook/svnlook.c:290
+msgid ""
+"usage: svnlook tree REPOS_PATH [PATH_IN_REPOS]\n"
+"\n"
+"Print the tree, starting at PATH_IN_REPOS (if supplied, at the root\n"
+"of the tree otherwise), optionally showing node revision ids.\n"
+msgstr ""
+
+#: ../svnlook/svnlook.c:296
+msgid ""
+"usage: svnlook uuid REPOS_PATH\n"
+"\n"
+"Print the repository's UUID.\n"
+msgstr ""
+
+#: ../svnlook/svnlook.c:301
+msgid ""
+"usage: svnlook youngest REPOS_PATH\n"
+"\n"
+"Print the youngest revision number.\n"
+msgstr ""
+
+#: ../svnlook/svnlook.c:861
+#, c-format
+msgid "Copied: %s (from rev %ld, %s)\n"
+msgstr ""
+
+#: ../svnlook/svnlook.c:929
+msgid "Added"
+msgstr ""
+
+#: ../svnlook/svnlook.c:930
+msgid "Deleted"
+msgstr ""
+
+#: ../svnlook/svnlook.c:931
+msgid "Modified"
+msgstr ""
+
+#: ../svnlook/svnlook.c:932
+msgid "Index"
+msgstr ""
+
+#: ../svnlook/svnlook.c:943
+msgid ""
+"(Binary files differ)\n"
+"\n"
+msgstr ""
+
+#: ../svnlook/svnlook.c:1222
+msgid "unknown"
+msgstr ""
+
+#: ../svnlook/svnlook.c:1279
+#, c-format
+msgid "Transaction '%s' is not based on a revision; how odd"
+msgstr ""
+
+#: ../svnlook/svnlook.c:1422
+#, c-format
+msgid "'%s' is a URL, probably should be a path"
+msgstr ""
+
+#: ../svnlook/svnlook.c:1445 ../svnlook/svnlook.c:1468
+#, c-format
+msgid "Path '%s' is not a file"
+msgstr ""
+
+#: ../svnlook/svnlook.c:1604
+msgid "History item limit reached"
+msgstr ""
+
+#: ../svnlook/svnlook.c:1623
+#, c-format
+msgid ""
+"REVISION PATH <ID>\n"
+"-------- ---------\n"
+msgstr ""
+
+#: ../svnlook/svnlook.c:1628
+#, c-format
+msgid ""
+"REVISION PATH\n"
+"-------- ----\n"
+msgstr ""
+
+#: ../svnlook/svnlook.c:1700
+#, c-format
+msgid "Property '%s' not found on revision %ld"
+msgstr ""
+
+#: ../svnlook/svnlook.c:1709
+#, c-format
+msgid ""
+"Property '%s' not found on path '%s' or inherited from a parent in revision "
+"%ld"
+msgstr ""
+
+#: ../svnlook/svnlook.c:1715
+#, c-format
+msgid "Property '%s' not found on path '%s' in revision %ld"
+msgstr ""
+
+#: ../svnlook/svnlook.c:1723
+#, c-format
+msgid ""
+"Property '%s' not found on path '%s' or inherited from a parent in "
+"transaction %s"
+msgstr ""
+
+#: ../svnlook/svnlook.c:1729
+#, c-format
+msgid "Property '%s' not found on path '%s' in transaction %s"
+msgstr ""
+
+#: ../svnlook/svnlook.c:2064
+msgid "Missing repository path argument"
+msgstr ""
+
+#: ../svnlook/svnlook.c:2216
+msgid ""
+"general usage: svnlook SUBCOMMAND REPOS_PATH [ARGS & OPTIONS ...]\n"
+"Note: any subcommand which takes the '--revision' and '--transaction'\n"
+" options will, if invoked without one of those options, act on\n"
+" the repository's youngest revision.\n"
+"Type 'svnlook help <subcommand>' for help on a specific subcommand.\n"
+"Type 'svnlook --version' to see the program version and FS modules.\n"
+"\n"
+"Available subcommands:\n"
+msgstr ""
+
+#: ../svnlook/svnlook.c:2294
+#, c-format
+msgid ""
+"Comment (%i line):\n"
+"%s\n"
+msgid_plural ""
+"Comment (%i lines):\n"
+"%s\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../svnlook/svnlook.c:2346
+#, c-format
+msgid "Missing propname argument"
+msgstr ""
+
+#: ../svnlook/svnlook.c:2347
+#, c-format
+msgid "Missing propname and repository path arguments"
+msgstr ""
+
+#: ../svnlook/svnlook.c:2353
+msgid "Missing propname or repository path argument"
+msgstr ""
+
+#: ../svnlook/svnlook.c:2517
+msgid "Invalid revision number supplied"
+msgstr ""
+
+#: ../svnlook/svnlook.c:2629
+msgid ""
+"The '--transaction' (-t) and '--revision' (-r) arguments cannot co-exist"
+msgstr ""
+
+#: ../svnlook/svnlook.c:2636
+msgid ""
+"Cannot use the '--show-inherited-props' option with the '--revprop' option"
+msgstr ""
+
+#: ../svnlook/svnlook.c:2695
+#, c-format
+msgid "Try 'svnadmin verify' instead.\n"
+msgstr ""
+
+#: ../svnlook/svnlook.c:2729
+#, c-format
+msgid "Repository argument required\n"
+msgstr ""
+
+#: ../svnlook/svnlook.c:2738
+#, c-format
+msgid "'%s' is a URL when it should be a path\n"
+msgstr ""
+
+#: ../svnlook/svnlook.c:2790
+#, c-format
+msgid ""
+"Subcommand '%s' doesn't accept option '%s'\n"
+"Type 'svnlook help %s' for usage.\n"
+msgstr ""
+
+#: ../svnlook/svnlook.c:2833
+msgid "Try 'svnlook help' for more info"
+msgstr ""
+
+#: ../svnmucc/svnmucc.c:927
+msgid ""
+"Subversion multiple URL command client\n"
+"usage: svnmucc ACTION...\n"
+"\n"
+" Perform one or more Subversion repository URL-based ACTIONs, committing\n"
+" the result as a (single) new revision.\n"
+"\n"
+"Actions:\n"
+" cp REV SRC-URL DST-URL : copy SRC-URL@REV to DST-URL\n"
+" mkdir URL : create new directory URL\n"
+" mv SRC-URL DST-URL : move SRC-URL to DST-URL\n"
+" rm URL : delete URL\n"
+" put SRC-FILE URL : add or modify file URL with contents copied from\n"
+" SRC-FILE (use \"-\" to read from standard input)\n"
+" propset NAME VALUE URL : set property NAME on URL to VALUE\n"
+" propsetf NAME FILE URL : set property NAME on URL to value read from FILE\n"
+" propdel NAME URL : delete property NAME from URL\n"
+"\n"
+"Valid options:\n"
+" -h, -? [--help] : display this text\n"
+" -m [--message] ARG : use ARG as a log message\n"
+" -F [--file] ARG : read log message from file ARG\n"
+" -u [--username] ARG : commit the changes as username ARG\n"
+" -p [--password] ARG : use ARG as the password\n"
+" -U [--root-url] ARG : interpret all action URLs relative to ARG\n"
+" -r [--revision] ARG : use revision ARG as baseline for changes\n"
+" --with-revprop ARG : set revision property in the following format:\n"
+" NAME[=VALUE]\n"
+" --non-interactive : do no interactive prompting (default is to\n"
+" prompt only if standard input is a terminal)\n"
+" --force-interactive : do interactive prompting even if standard\n"
+" input is not a terminal\n"
+" --trust-server-cert : accept SSL server certificates from unknown\n"
+" certificate authorities without prompting (but\n"
+" only with '--non-interactive')\n"
+" -X [--extra-args] ARG : append arguments from file ARG (one per line;\n"
+" use \"-\" to read from standard input)\n"
+" --config-dir ARG : use ARG to override the config directory\n"
+" --config-option ARG : use ARG to override a configuration option\n"
+" --no-auth-cache : do not cache authentication tokens\n"
+" --version : print version information\n"
+msgstr ""
+
+#: ../svnmucc/svnmucc.c:1003
+msgid ""
+"--message (-m), --file (-F), and --with-revprop=svn:log are mutually "
+"exclusive"
+msgstr ""
+
+#: ../svnrdump/load_editor.c:392 ../svnsync/svnsync.c:327
+#, c-format
+msgid "Failed to get lock on destination repos, currently held by '%s'\n"
+msgstr ""
+
+#: ../svnrdump/load_editor.c:536
+msgid ""
+"Target server does not support atomic revision property edits; consider "
+"upgrading it to 1.7."
+msgstr ""
+
+#: ../svnrdump/svnrdump.c:101
+msgid ""
+"usage: svnrdump dump URL [-r LOWER[:UPPER]]\n"
+"\n"
+"Dump revisions LOWER to UPPER of repository at remote URL to stdout\n"
+"in a 'dumpfile' portable format. If only LOWER is given, dump that\n"
+"one revision.\n"
+msgstr ""
+
+#: ../svnrdump/svnrdump.c:107
+msgid ""
+"usage: svnrdump load URL\n"
+"\n"
+"Load a 'dumpfile' given on stdin to a repository at remote URL.\n"
+msgstr ""
+
+#: ../svnrdump/svnrdump.c:111
+msgid ""
+"usage: svnrdump help [SUBCOMMAND...]\n"
+"\n"
+"Describe the usage of this program or its subcommands.\n"
+msgstr ""
+
+#: ../svnrdump/svnrdump.c:124
+msgid "dump incrementally"
+msgstr ""
+
+#: ../svnrdump/svnrdump.c:142 ../svnserve/svnserve.c:281
+#: ../svnversion/svnversion.c:139
+msgid "display this help"
+msgstr ""
+
+#: ../svnrdump/svnrdump.c:731
+msgid ""
+"general usage: svnrdump SUBCOMMAND URL [-r LOWER[:UPPER]]\n"
+"Type 'svnrdump help <subcommand>' for help on a specific subcommand.\n"
+"Type 'svnrdump --version' to see the program version and RA modules.\n"
+"\n"
+"Available subcommands:\n"
+msgstr ""
+
+#: ../svnrdump/svnrdump.c:775 ../svnrdump/svnrdump.c:809
+msgid "Unsupported revision specifier used; use only integer values or 'HEAD'"
+msgstr ""
+
+#: ../svnrdump/svnrdump.c:783 ../svnrdump/svnrdump.c:817
+#, c-format
+msgid "Revision '%ld' does not exist"
+msgstr ""
+
+#: ../svnrdump/svnrdump.c:827
+msgid ""
+"LOWER revision cannot be greater than UPPER revision; consider reversing "
+"your revision range"
+msgstr ""
+
+#: ../svnrdump/svnrdump.c:1072
+#, c-format
+msgid ""
+"Subcommand '%s' doesn't accept option '%s'\n"
+"Type 'svnrdump help %s' for usage.\n"
+msgstr ""
+
+#: ../svnserve/cyrus_auth.c:119
+msgid "Could not initialize the SASL library"
+msgstr ""
+
+#: ../svnserve/cyrus_auth.c:260
+#, c-format
+msgid "Can't get hostname"
+msgstr ""
+
+#: ../svnserve/cyrus_auth.c:325
+msgid "Could not obtain the list of SASL mechanisms"
+msgstr ""
+
+#: ../svnserve/cyrus_auth.c:367
+msgid "Couldn't obtain the authenticated username"
+msgstr ""
+
+#: ../svnserve/serve.c:2061
+msgid "Path is not a string"
+msgstr ""
+
+#: ../svnserve/serve.c:2218
+msgid "Log revprop entry not a string"
+msgstr ""
+
+#: ../svnserve/serve.c:2224
+#, c-format
+msgid "Unknown revprop word '%s' in log command"
+msgstr ""
+
+#: ../svnserve/serve.c:2240
+msgid "Log path entry not a string"
+msgstr ""
+
+#: ../svnserve/svnserve.c:162
+msgid "daemon mode"
+msgstr ""
+
+#: ../svnserve/svnserve.c:163
+msgid "inetd mode"
+msgstr ""
+
+#: ../svnserve/svnserve.c:164
+msgid "tunnel mode"
+msgstr ""
+
+#: ../svnserve/svnserve.c:165
+msgid "listen-once mode (useful for debugging)"
+msgstr ""
+
+#: ../svnserve/svnserve.c:168
+msgid "Windows service mode (Service Control Manager)"
+msgstr ""
+
+#: ../svnserve/svnserve.c:170
+msgid "root of directory to serve"
+msgstr ""
+
+#: ../svnserve/svnserve.c:172
+msgid "force read only, overriding repository config file"
+msgstr ""
+
+#: ../svnserve/svnserve.c:174
+msgid "read configuration from file ARG"
+msgstr ""
+
+#: ../svnserve/svnserve.c:177
+msgid ""
+"listen port. The default port is 3690.\n"
+" [mode: daemon, service, listen-once]"
+msgstr ""
+
+#: ../svnserve/svnserve.c:181
+msgid ""
+"listen port. The default port is 3690.\n"
+" [mode: daemon, listen-once]"
+msgstr ""
+
+#: ../svnserve/svnserve.c:187
+msgid ""
+"listen hostname or IP address\n"
+" By default svnserve listens on all addresses.\n"
+" [mode: daemon, service, listen-once]"
+msgstr ""
+
+#: ../svnserve/svnserve.c:193
+msgid ""
+"listen hostname or IP address\n"
+" By default svnserve listens on all addresses.\n"
+" [mode: daemon, listen-once]"
+msgstr ""
+
+#: ../svnserve/svnserve.c:200
+msgid ""
+"prefer IPv6 when resolving the listen hostname\n"
+" [IPv4 is preferred by default. Using IPv4 and "
+"IPv6\n"
+" at the same time is not supported in daemon "
+"mode.\n"
+" Use inetd mode or tunnel mode if you need this.]"
+msgstr ""
+
+#: ../svnserve/svnserve.c:208
+msgid ""
+"compression level to use for network transmissions\n"
+" [0 .. no compression, 5 .. default, \n"
+" 9 .. maximum compression]"
+msgstr ""
+
+#: ../svnserve/svnserve.c:214
+msgid ""
+"size of the extra in-memory cache in MB used to\n"
+" minimize redundant operations.\n"
+" Default is 16.\n"
+" [used for FSFS repositories only]"
+msgstr ""
+
+#: ../svnserve/svnserve.c:222
+msgid ""
+"enable or disable caching of deltas between older\n"
+" revisions.\n"
+" Default is no.\n"
+" [used for FSFS repositories only]"
+msgstr ""
+
+#: ../svnserve/svnserve.c:230
+msgid ""
+"enable or disable caching of file contents\n"
+" Default is yes.\n"
+" [used for FSFS repositories only]"
+msgstr ""
+
+#: ../svnserve/svnserve.c:236
+msgid ""
+"enable or disable caching of revision properties.\n"
+" Consult the documentation before activating "
+"this.\n"
+" Default is no.\n"
+" [used for FSFS repositories only]"
+msgstr ""
+
+#: ../svnserve/svnserve.c:244
+msgid ""
+"Optimize network handling based on the assumption\n"
+" that most clients are connected with a bitrate "
+"of\n"
+" ARG Mbit/s.\n"
+" Default is 0 (optimizations disabled)."
+msgstr ""
+
+#. ### Making the assumption here that WIN32 never has fork and so
+#. * ### this option never exists when --service exists.
+#: ../svnserve/svnserve.c:254
+msgid "use threads instead of fork [mode: daemon]"
+msgstr ""
+
+#: ../svnserve/svnserve.c:258
+msgid ""
+"run in foreground (useful for debugging)\n"
+" [mode: daemon]"
+msgstr ""
+
+#: ../svnserve/svnserve.c:262
+msgid ""
+"handle one connection at a time in the parent process\n"
+" (useful for debugging)"
+msgstr ""
+
+#: ../svnserve/svnserve.c:266
+msgid "svnserve log file"
+msgstr ""
+
+#: ../svnserve/svnserve.c:269
+msgid ""
+"write server process ID to file ARG\n"
+" [mode: daemon, listen-once, service]"
+msgstr ""
+
+#: ../svnserve/svnserve.c:273
+msgid ""
+"write server process ID to file ARG\n"
+" [mode: daemon, listen-once]"
+msgstr ""
+
+#: ../svnserve/svnserve.c:278
+msgid ""
+"tunnel username (default is current uid's name)\n"
+" [mode: tunnel]"
+msgstr ""
+
+#: ../svnserve/svnserve.c:283
+msgid ""
+"virtual host mode (look for repo in directory\n"
+" of provided hostname)"
+msgstr ""
+
+#: ../svnserve/svnserve.c:300
+#, c-format
+msgid "Type '%s --help' for usage.\n"
+msgstr ""
+
+#: ../svnserve/svnserve.c:310
+msgid ""
+"usage: svnserve [-d | -i | -t | -X | --service] [options]\n"
+"\n"
+"Valid options:\n"
+msgstr ""
+
+#: ../svnserve/svnserve.c:316
+msgid ""
+"usage: svnserve [-d | -i | -t | -X] [options]\n"
+"\n"
+"Valid options:\n"
+msgstr ""
+
+#: ../svnserve/svnserve.c:344
+msgid ""
+"\n"
+"Cyrus SASL authentication is available.\n"
+msgstr ""
+
+#: ../svnserve/svnserve.c:616
+#, c-format
+msgid "Invalid port '%s'"
+msgstr ""
+
+#: ../svnserve/svnserve.c:657
+#, c-format
+msgid "svnserve: Root path '%s' does not exist or is not a directory.\n"
+msgstr ""
+
+#: ../svnserve/svnserve.c:770
+msgid "You must specify exactly one of -d, -i, -t, --service or -X.\n"
+msgstr ""
+
+#: ../svnserve/svnserve.c:773
+msgid "You must specify exactly one of -d, -i, -t or -X.\n"
+msgstr ""
+
+#: ../svnserve/svnserve.c:782
+msgid "You may only specify one of -T or --single-thread\n"
+msgstr ""
+
+#: ../svnserve/svnserve.c:810
+#, c-format
+msgid "Option --tunnel-user is only valid in tunnel mode.\n"
+msgstr ""
+
+#: ../svnserve/svnserve.c:829
+#, c-format
+msgid "Can't open stdout"
+msgstr ""
+
+#: ../svnserve/svnserve.c:883
+#, c-format
+msgid ""
+"svnserve: The --service flag is only valid if the process is started by the "
+"Service Control Manager.\n"
+msgstr ""
+
+#: ../svnserve/svnserve.c:933
+#, c-format
+msgid "Can't get address info"
+msgstr ""
+
+#: ../svnserve/svnserve.c:947
+#, c-format
+msgid "Can't create server socket"
+msgstr ""
+
+#: ../svnserve/svnserve.c:958
+#, c-format
+msgid "Can't bind server socket"
+msgstr ""
+
+#: ../svnserve/svnserve.c:1056
+#, c-format
+msgid "Can't accept client connection"
+msgstr ""
+
+#: ../svnserve/svnserve.c:1137
+#, c-format
+msgid "Can't create threadattr"
+msgstr ""
+
+#: ../svnserve/svnserve.c:1145
+#, c-format
+msgid "Can't set detached state"
+msgstr ""
+
+#: ../svnserve/svnserve.c:1158
+#, c-format
+msgid "Can't create thread"
+msgstr ""
+
+#: ../svnserve/winservice.c:346
+#, c-format
+msgid "Failed to create winservice_start_event"
+msgstr ""
+
+#: ../svnserve/winservice.c:357
+#, c-format
+msgid "The service failed to start"
+msgstr ""
+
+#: ../svnserve/winservice.c:405
+#, c-format
+msgid "Failed to connect to Service Control Manager"
+msgstr ""
+
+#: ../svnserve/winservice.c:416
+#, c-format
+msgid ""
+"The service failed to start; an internal error occurred while starting the "
+"service"
+msgstr ""
+
+#: ../svnsync/svnsync.c:92
+msgid ""
+"usage: svnsync initialize DEST_URL SOURCE_URL\n"
+"\n"
+"Initialize a destination repository for synchronization from\n"
+"another repository.\n"
+"\n"
+"If the source URL is not the root of a repository, only the\n"
+"specified part of the repository will be synchronized.\n"
+"\n"
+"The destination URL must point to the root of a repository which\n"
+"has been configured to allow revision property changes. In\n"
+"the general case, the destination repository must contain no\n"
+"committed revisions. Use --allow-non-empty to override this\n"
+"restriction, which will cause svnsync to assume that any revisions\n"
+"already present in the destination repository perfectly mirror\n"
+"their counterparts in the source repository. (This is useful\n"
+"when initializing a copy of a repository as a mirror of that same\n"
+"repository, for example.)\n"
+"\n"
+"You should not commit to, or make revision property changes in,\n"
+"the destination repository by any method other than 'svnsync'.\n"
+"In other words, the destination repository should be a read-only\n"
+"mirror of the source repository.\n"
+msgstr ""
+
+#: ../svnsync/svnsync.c:118
+msgid ""
+"usage: svnsync synchronize DEST_URL [SOURCE_URL]\n"
+"\n"
+"Transfer all pending revisions to the destination from the source\n"
+"with which it was initialized.\n"
+"\n"
+"If SOURCE_URL is provided, use that as the source repository URL,\n"
+"ignoring what is recorded in the destination repository as the\n"
+"source URL. Specifying SOURCE_URL is recommended in particular\n"
+"if untrusted users/administrators may have write access to the\n"
+"DEST_URL repository.\n"
+msgstr ""
+
+#: ../svnsync/svnsync.c:131
+msgid ""
+"usage:\n"
+"\n"
+" 1. svnsync copy-revprops DEST_URL [SOURCE_URL]\n"
+" 2. svnsync copy-revprops DEST_URL REV[:REV2]\n"
+"\n"
+"Copy the revision properties in a given range of revisions to the\n"
+"destination from the source with which it was initialized. If the\n"
+"revision range is not specified, it defaults to all revisions in\n"
+"the DEST_URL repository. Note also that the 'HEAD' revision is the\n"
+"latest in DEST_URL, not necessarily the latest in SOURCE_URL.\n"
+"\n"
+"If SOURCE_URL is provided, use that as the source repository URL,\n"
+"ignoring what is recorded in the destination repository as the\n"
+"source URL. Specifying SOURCE_URL is recommended in particular\n"
+"if untrusted users/administrators may have write access to the\n"
+"DEST_URL repository.\n"
+"\n"
+"Form 2 is deprecated syntax, equivalent to specifying \"-rREV[:REV2]\".\n"
+msgstr ""
+
+#: ../svnsync/svnsync.c:152
+msgid ""
+"usage: svnsync info DEST_URL\n"
+"\n"
+"Print information about the synchronization destination repository\n"
+"located at DEST_URL.\n"
+msgstr ""
+
+#: ../svnsync/svnsync.c:158
+msgid ""
+"usage: svnsync help [SUBCOMMAND...]\n"
+"\n"
+"Describe the usage of this program or its subcommands.\n"
+msgstr ""
+
+#: ../svnsync/svnsync.c:168
+msgid "print as little as possible"
+msgstr ""
+
+#: ../svnsync/svnsync.c:170
+msgid ""
+"operate on revision ARG (or range ARG1:ARG2)\n"
+" A revision argument can be one of:\n"
+" NUMBER revision number\n"
+" 'HEAD' latest in repository"
+msgstr ""
+
+#: ../svnsync/svnsync.c:178
+msgid "allow a non-empty destination repository"
+msgstr ""
+
+#: ../svnsync/svnsync.c:190
+msgid ""
+"specify a username ARG (deprecated;\n"
+" see --source-username and --sync-username)"
+msgstr ""
+
+#: ../svnsync/svnsync.c:194
+msgid ""
+"specify a password ARG (deprecated;\n"
+" see --source-password and --sync-password)"
+msgstr ""
+
+#: ../svnsync/svnsync.c:204
+msgid "connect to source repository with username ARG"
+msgstr ""
+
+#: ../svnsync/svnsync.c:206
+msgid "connect to source repository with password ARG"
+msgstr ""
+
+#: ../svnsync/svnsync.c:208
+msgid "connect to sync repository with username ARG"
+msgstr ""
+
+#: ../svnsync/svnsync.c:210
+msgid "connect to sync repository with password ARG"
+msgstr ""
+
+#: ../svnsync/svnsync.c:222
+msgid ""
+"convert translatable properties from encoding ARG\n"
+" to UTF-8. If not specified, then properties "
+"are\n"
+" presumed to be encoded in UTF-8."
+msgstr ""
+
+#: ../svnsync/svnsync.c:228
+msgid ""
+"Disable built-in locking. Use of this option can\n"
+" corrupt the mirror unless you ensure that no "
+"other\n"
+" instance of svnsync is running concurrently."
+msgstr ""
+
+#: ../svnsync/svnsync.c:234
+msgid ""
+"Steal locks as necessary. Use, with caution,\n"
+" if your mirror repository contains stale locks\n"
+" and is not being concurrently accessed by "
+"another\n"
+" svnsync instance."
+msgstr ""
+
+#: ../svnsync/svnsync.c:357
+msgid ""
+"Target server does not support atomic revision property edits; consider "
+"upgrading it to 1.7 or using an external locking program"
+msgstr ""
+
+#: ../svnsync/svnsync.c:371
+#, c-format
+msgid "Stole lock previously held by '%s'\n"
+msgstr ""
+
+#: ../svnsync/svnsync.c:460
+#, c-format
+msgid "Session is rooted at '%s' but the repos root is '%s'"
+msgstr ""
+
+#: ../svnsync/svnsync.c:602
+#, c-format
+msgid "Copied properties for revision %ld (%s* properties skipped).\n"
+msgstr ""
+
+#: ../svnsync/svnsync.c:607
+#, c-format
+msgid "Copied properties for revision %ld.\n"
+msgstr ""
+
+#: ../svnsync/svnsync.c:623
+#, c-format
+msgid ""
+"NOTE: Normalized %s* properties to LF line endings (%d rev-props, %d node-"
+"props).\n"
+msgstr ""
+
+#: ../svnsync/svnsync.c:753
+msgid ""
+"Destination repository already contains revision history; consider using --"
+"allow-non-empty if the repository's revisions are known to mirror their "
+"respective revisions in the source repository"
+msgstr ""
+
+#: ../svnsync/svnsync.c:762
+#, c-format
+msgid "Destination repository is already synchronizing from '%s'"
+msgstr ""
+
+#: ../svnsync/svnsync.c:797
+msgid "Destination repository has more revisions than source repository"
+msgstr ""
+
+#: ../svnsync/svnsync.c:862 ../svnsync/svnsync.c:865 ../svnsync/svnsync.c:1518
+#: ../svnsync/svnsync.c:1525 ../svnsync/svnsync.c:1762
+#: ../svnsync/svnsync.c:1765 ../svnsync/svnsync.c:1809
+#, c-format
+msgid "Path '%s' is not a URL"
+msgstr ""
+
+#: ../svnsync/svnsync.c:892
+#, c-format
+msgid "Committed revision %ld.\n"
+msgstr ""
+
+#: ../svnsync/svnsync.c:935
+msgid "Destination repository has not been initialized"
+msgstr ""
+
+#: ../svnsync/svnsync.c:1301
+#, c-format
+msgid "Commit created r%ld but should have created r%ld"
+msgstr ""
+
+#: ../svnsync/svnsync.c:1416
+#, c-format
+msgid ""
+"Revision being currently copied (%ld), last merged revision (%ld), and "
+"destination HEAD (%ld) are inconsistent; have you committed to the "
+"destination without using svnsync?"
+msgstr ""
+
+#: ../svnsync/svnsync.c:1453
+#, c-format
+msgid ""
+"Destination HEAD (%ld) is not the last merged revision (%ld); have you "
+"committed to the destination without using svnsync?"
+msgstr ""
+
+#: ../svnsync/svnsync.c:1576 ../svnsync/svnsync.c:1581
+#, c-format
+msgid ""
+"Cannot copy revprops for a revision (%ld) that has not been synchronized yet"
+msgstr ""
+
+#: ../svnsync/svnsync.c:1645 ../svnsync/svnsync.c:1665
+#, c-format
+msgid "Invalid revision number (%ld)"
+msgstr ""
+
+#: ../svnsync/svnsync.c:1715
+msgid ""
+"Cannot specify revisions via both command-line arguments and the --revision "
+"(-r) option"
+msgstr ""
+
+#: ../svnsync/svnsync.c:1723 ../svnsync/svnsync.c:2066
+#, c-format
+msgid "Invalid revision range '%s' provided"
+msgstr ""
+
+#: ../svnsync/svnsync.c:1822
+#, c-format
+msgid "Repository '%s' is not initialized for synchronization"
+msgstr ""
+
+#. Print the info.
+#: ../svnsync/svnsync.c:1828
+#, c-format
+msgid "Source URL: %s\n"
+msgstr ""
+
+#: ../svnsync/svnsync.c:1830
+#, c-format
+msgid "Source Repository UUID: %s\n"
+msgstr ""
+
+#: ../svnsync/svnsync.c:1833
+#, c-format
+msgid "Last Merged Revision: %s\n"
+msgstr ""
+
+#: ../svnsync/svnsync.c:1850
+msgid ""
+"general usage: svnsync SUBCOMMAND DEST_URL [ARGS & OPTIONS ...]\n"
+"Type 'svnsync help <subcommand>' for help on a specific subcommand.\n"
+"Type 'svnsync --version' to see the program version and RA modules.\n"
+"\n"
+"Available subcommands:\n"
+msgstr ""
+
+#: ../svnsync/svnsync.c:2114
+msgid ""
+"Cannot use --username or --password with any of --source-username, --source-"
+"password, --sync-username, or --sync-password.\n"
+msgstr ""
+
+#: ../svnsync/svnsync.c:2138
+msgid "--disable-locking and --steal-lock are mutually exclusive"
+msgstr ""
+
+#: ../svnsync/svnsync.c:2214
+#, c-format
+msgid ""
+"Subcommand '%s' doesn't accept option '%s'\n"
+"Type 'svnsync help %s' for usage.\n"
+msgstr ""
+
+#: ../svnsync/svnsync.c:2297
+msgid "Try 'svnsync help' for more info"
+msgstr ""
+
+#: ../svnsync/sync.c:125
+#, c-format
+msgid "Missing colon in svn:mergeinfo property"
+msgstr ""
+
+#: ../svnversion/svnversion.c:50
+#, c-format
+msgid "Type 'svnversion --help' for usage.\n"
+msgstr ""
+
+#: ../svnversion/svnversion.c:61
+#, c-format
+msgid ""
+"usage: svnversion [OPTIONS] [WC_PATH [TRAIL_URL]]\n"
+"\n"
+" Produce a compact version identifier for the working copy path\n"
+" WC_PATH. TRAIL_URL is the trailing portion of the URL used to\n"
+" determine if WC_PATH itself is switched (detection of switches\n"
+" within WC_PATH does not rely on TRAIL_URL). The version identifier\n"
+" is written to standard output. For example:\n"
+"\n"
+" $ svnversion . /repos/svn/trunk\n"
+" 4168\n"
+"\n"
+" The version identifier will be a single number if the working\n"
+" copy is single revision, unmodified, not switched and with\n"
+" a URL that matches the TRAIL_URL argument. If the working\n"
+" copy is unusual the version identifier will be more complex:\n"
+"\n"
+" 4123:4168 mixed revision working copy\n"
+" 4168M modified working copy\n"
+" 4123S switched working copy\n"
+" 4123P partial working copy, from a sparse checkout\n"
+" 4123:4168MS mixed revision, modified, switched working copy\n"
+"\n"
+" If WC_PATH is an unversioned path, the program will output\n"
+" 'Unversioned directory' or 'Unversioned file'. If WC_PATH is\n"
+" an added or copied or moved path, the program will output\n"
+" 'Uncommitted local addition, copy or move'.\n"
+"\n"
+" If invoked without arguments WC_PATH will be the current directory.\n"
+"\n"
+"Valid options:\n"
+msgstr ""
+
+#: ../svnversion/svnversion.c:137
+msgid "do not output the trailing newline"
+msgstr ""
+
+#: ../svnversion/svnversion.c:138
+msgid "last changed rather than current revisions"
+msgstr ""
+
+#: ../svnversion/svnversion.c:246
+#, c-format
+msgid "Unversioned symlink%s"
+msgstr ""
+
+#: ../svnversion/svnversion.c:249
+#, c-format
+msgid "Unversioned directory%s"
+msgstr ""
+
+#: ../svnversion/svnversion.c:252
+#, c-format
+msgid "Unversioned file%s"
+msgstr ""
+
+#: ../svnversion/svnversion.c:258
+#, c-format
+msgid "'%s' doesn't exist\n"
+msgstr ""
+
+#: ../svnversion/svnversion.c:259
+#, c-format
+msgid "'%s' is of unknown type\n"
+msgstr ""
+
+#. Local uncommitted modifications, no revision info was found.
+#: ../svnversion/svnversion.c:274
+#, c-format
+msgid "Uncommitted local addition, copy or move%s"
+msgstr ""
diff --git a/subversion/po/sv.po b/subversion/po/sv.po
index 98a9e16..04a2126 100644
--- a/subversion/po/sv.po
+++ b/subversion/po/sv.po
@@ -1,4 +1,5 @@
-# Swedish translations for subversion package
+# Svensk översättning av Subversion
+# Swedish translation of Subversion
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
@@ -17,50 +18,102 @@
# specific language governing permissions and limitations
# under the License.
#
-# Translation dictionary:
+# Ordlista
#
-# bogus ogiltig
-# (to) branch (skapa) förgrening
-# checkout checka ut (hämta?)
-# commit arkivera
-# diff skillnad (ev. med diff inom parentes beroedne på sammanhang)
-# entry post
-# item objekt
-# label märke
-# lock lås
-# lock token låsidentifierare
-# locked låst
-# merge förena
-# obstruct(ed) blockera
-# PROPNAME EGENSKAPSNAMN
-# PROPVAL EGENSKAPSVÄRDE
-# relocate omlokalisera
-# REPOS ARKIV
-# REPOS_PATH ARKIV_SÖKVÄG
-# Repository Arkiv
-# repository access (RA) arkivåtkomst
-# revert återställa
-# revision revision (??? version)
-# scheduling schemalägga (planera?)
-# stream ström
-# switch växla (till)
-# tag märke
-# text-base textbas (???)
-# to dump dumpa
-# unlock låsa upp
-# update uppdatera
-# usage användning
-# whitespace tomrum
-# working copy (WC) arbetskopia (AK)
+# apply anbringa (om patch, ändring eller liknande)
+# baseline utgångspunkt
+# blame (s) skuld
+# bogus felaktig
+# branch (s) gren, förgrening
+# branch (v) skapa gren/förgrening
+# branchpoint förgreningspunkt
+# capability förmåga
+# changelist ändringslista
+# check out checka ut, hämta
+# commit arkivera
+# conflict (s) konflikt
+# context sammanhang, omgivning (vid sammanslagning); kontext
+# corrupt (a) förstörd, trasig
+# credentials (s) klientreferenser
+# diff (s) skillnad; jämförelse
+# diff (v) jämföra
+# dump (v) skriva ut, dumpa
+# entry post
+# flag flagga
+# fuzz oskärpa
+# fuzzy oskarp
+# hook (s) krokskript
+# hunk stycke
+# item objekt; element
+# keyword nyckelord
+# lock (s) lås
+# lock (v) låsa
+# lock token låsidentifierare
+# locked låst
+# log (s) logg
+# match (v) passa, stämma med, motsvara
+# merge (s) sammanslagning
+# merge (v) slå samman, införa
+# merge tracking sammanslagningsföljning
+# mergeinfo sammanslagningsinformation
+# obstruct blockera, vara i vägen
+# obstructed blockerad
+# option flagga, väljare; val
+# out of date inaktuell
+# passphrase lösenordsfras
+# patch (s) ändringsfil, patch
+# peg revision fixerad revision
+# pristine (a) orörd
+# pristine store lagring av orörd data
+# pristine text orörd text
+# property egenskap
+# provider tillhandahållare
+# range område, intervall
+# record (s) post
+# reintegrate återförena; återinföra
+# reintegration återförening
+# reject (s) avslag
+# reject (v) avslå
+# reject file avslagsfil
+# relocate omlokalisera
+# repository arkiv
+# repository access arkivåtkomst
+# resolution lösning
+# resolve (v) lösa
+# restore återskapa; återställa
+# reverse merge (s) omvänd sammanslagning
+# revert återställa
+# revision revision
+# schedule (s) schemaläggning
+# schedule (v) schemalägga
+# shard skärva, splittra
+# sharded splittrad
+# sharding splittring
+# stream (s) ström
+# subcommand underkommando
+# switch [to] (v) växla [till]
+# text-base textbas
+# theirs (i konflikter) andras
+# tip (s) spets
+# tip of branch grenspets
+# undo upphäva
+# unlock låsa upp
+# unversioned ej versionshanterad
+# update (v) uppdatera
+# upgrade (v) uppgradera
+# usage användning
+# versioned versionshanterad
+# whitespace tomrum
+# working copy (WC) arbetskopia (AK)
#
msgid ""
msgstr ""
-"Project-Id-Version: subversion 1.7\n"
+"Project-Id-Version: subversion 1.8\n"
"Report-Msgid-Bugs-To: dev@subversion.apache.org\n"
-"POT-Creation-Date: 2010-11-12 08:49-0600\n"
-"PO-Revision-Date: 2006-10-25 09:19+0200\n"
-"Last-Translator: Subversion Developers <dev@subversion.tigris.org>\n"
-"Language-Team: Swedish <sv@li.org>\n"
+"POT-Creation-Date: 2013-10-19 21:47+0200\n"
+"PO-Revision-Date: 2013-10-19 22:28+0200\n"
+"Last-Translator: Subversion Developers <dev@subversion.apache.org>\n"
+"Language-Team: Swedish <dev@subversion.apache.org>\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -70,1829 +123,1884 @@ msgstr ""
#. Constructing nice error messages for roots.
#. Build an SVN_ERR_FS_NOT_FOUND error, with a detailed error text,
#. for PATH in ROOT. ROOT is of type svn_fs_root_t *.
-#: ../include/private/svn_fs_util.h:68
+#: ../include/private/svn_fs_util.h:81
#, c-format
msgid "File not found: transaction '%s', path '%s'"
msgstr "Filen finns inte: transaktion \"%s\", sökväg \"%s\""
-#: ../include/private/svn_fs_util.h:73
+#: ../include/private/svn_fs_util.h:86
#, c-format
msgid "File not found: revision %ld, path '%s'"
msgstr "Filen finns inte: revision %ld, sökväg \"%s\""
#. Build a detailed `file already exists' message for PATH in ROOT.
#. ROOT is of type svn_fs_root_t *.
-#: ../include/private/svn_fs_util.h:84
+#: ../include/private/svn_fs_util.h:97
#, c-format
msgid "File already exists: filesystem '%s', transaction '%s', path '%s'"
msgstr "Filen finns redan: filsystem \"%s\", transaktion \"%s\", sökväg \"%s\""
-#: ../include/private/svn_fs_util.h:89
+#: ../include/private/svn_fs_util.h:102
#, c-format
msgid "File already exists: filesystem '%s', revision %ld, path '%s'"
msgstr "Filen finns redan: filsystem \"%s\", revision %ld, sökväg \"%s\""
#. ROOT is of type svn_fs_root_t *.
-#: ../include/private/svn_fs_util.h:97
+#: ../include/private/svn_fs_util.h:110
msgid "Root object must be a transaction root"
msgstr "Rotobjektet måste vara en transaktionsrot"
#. SVN_FS__ERR_NOT_MUTABLE: the caller attempted to change a node
#. outside of a transaction. FS is of type "svn_fs_t *".
-#: ../include/private/svn_fs_util.h:104
+#: ../include/private/svn_fs_util.h:117
#, c-format
msgid "File is not mutable: filesystem '%s', revision %ld, path '%s'"
msgstr "Filen får ej ändras: filsystem \"%s\", revision %ld, sökväg \"%s\""
-#. FS is of type "svn fs_t *".
-#: ../include/private/svn_fs_util.h:111
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:124
#, c-format
msgid "'%s' is not a directory in filesystem '%s'"
msgstr "\"%s\" är ingen katalog i filsystemet \"%s\""
-#. FS is of type "svn fs_t *".
-#: ../include/private/svn_fs_util.h:118
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:131
#, c-format
msgid "'%s' is not a file in filesystem '%s'"
msgstr "\"%s\" är ingen fil i filsystemet \"%s\""
-#. FS is of type "svn fs_t *", LOCK is of type "svn_lock_t *".
-#: ../include/private/svn_fs_util.h:126
+#. FS is of type "svn_fs_t *", LOCK is of type "svn_lock_t *".
+#: ../include/private/svn_fs_util.h:139
#, c-format
msgid "Path '%s' is already locked by user '%s' in filesystem '%s'"
msgstr "Sökvägen \"%s\" är redan låst av användaren \"%s\" i filsystemet \"%s\""
-#. FS is of type "svn fs_t *".
-#: ../include/private/svn_fs_util.h:133
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:146
#, c-format
msgid "No lock on path '%s' in filesystem '%s'"
msgstr "Inget lås på sökvägen \"%s\" i filsystemet \"%s\""
-#. FS is of type "svn fs_t *".
-#: ../include/private/svn_fs_util.h:140
-#, fuzzy, c-format
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:153
+#, c-format
msgid "Lock has expired: lock-token '%s' in filesystem '%s'"
msgstr "Låset har gått ut: låsidentifierare \"%s\" i filsystemet \"%s\""
-#. FS is of type "svn fs_t *".
-#: ../include/private/svn_fs_util.h:147
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:160
#, c-format
msgid "No username is currently associated with filesystem '%s'"
msgstr "Inget användarnamn är kopplat till filsystemet \"%s\""
#. SVN_FS__ERR_LOCK_OWNER_MISMATCH: trying to use a lock whose
#. LOCK_OWNER doesn't match the USERNAME associated with FS.
-#. FS is of type "svn fs_t *".
-#: ../include/private/svn_fs_util.h:156
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:169
#, c-format
msgid "User '%s' is trying to use a lock owned by '%s' in filesystem '%s'"
msgstr "Användaren \"%s\" försöker använda ett lås som ägs av \"%s\" i filsystemet \"%s\""
-#: ../include/svn_error_codes.h:160
+#: ../include/svn_error_codes.h:164
msgid "Bad parent pool passed to svn_make_pool()"
msgstr "Felaktig föräldrapool skickad till svn_make_pool()"
-#: ../include/svn_error_codes.h:164
+#: ../include/svn_error_codes.h:168
msgid "Bogus filename"
msgstr "Felaktigt filnamn"
-#: ../include/svn_error_codes.h:168
+#: ../include/svn_error_codes.h:172
msgid "Bogus URL"
msgstr "Felaktig URL"
-#: ../include/svn_error_codes.h:172
+#: ../include/svn_error_codes.h:176
msgid "Bogus date"
msgstr "Felaktigt datum"
-#: ../include/svn_error_codes.h:176
+#: ../include/svn_error_codes.h:180
msgid "Bogus mime-type"
msgstr "Felaktig mime-typ"
-#: ../include/svn_error_codes.h:186
+#: ../include/svn_error_codes.h:190
msgid "Wrong or unexpected property value"
-msgstr ""
+msgstr "Felaktigt eller oväntat egenskapsvärde"
-#: ../include/svn_error_codes.h:190
+#: ../include/svn_error_codes.h:194
msgid "Version file format not correct"
msgstr "Felaktigt format på versionsfil"
-#: ../include/svn_error_codes.h:194
-#, fuzzy
+#: ../include/svn_error_codes.h:198
msgid "Path is not an immediate child of the specified directory"
-msgstr "Sökvägen är ingen katalog i en arbetskopia"
+msgstr "Sökvägen står inte omedelbart under angiven katalog"
-#: ../include/svn_error_codes.h:198
-#, fuzzy
+#: ../include/svn_error_codes.h:202
msgid "Bogus UUID"
-msgstr "Felaktig URL"
+msgstr "Felaktig UUID"
-#: ../include/svn_error_codes.h:203 ../include/svn_error_codes.h:887
+#: ../include/svn_error_codes.h:207 ../include/svn_error_codes.h:944
msgid "Invalid configuration value"
msgstr "Ogiltigt konfigurationsvärde"
-#: ../include/svn_error_codes.h:207
-#, fuzzy
+#: ../include/svn_error_codes.h:211
msgid "Bogus server specification"
-msgstr "Revisionsspecifikation saknas"
+msgstr "Felaktig serverangivelse"
-#: ../include/svn_error_codes.h:211
-#, fuzzy
+#: ../include/svn_error_codes.h:215
msgid "Unsupported checksum type"
-msgstr "Arkivversionen stöds ej"
+msgstr "Kontrollsummetypen stöds ej"
-#: ../include/svn_error_codes.h:215
-#, fuzzy
+#: ../include/svn_error_codes.h:219
msgid "Invalid character in hex checksum"
-msgstr "Ogiltig slutrevision %ld"
+msgstr "Ogiltigt tecken i hexadecimal kontrollsumma"
-#: ../include/svn_error_codes.h:220
-#, fuzzy
+#: ../include/svn_error_codes.h:224
msgid "Unknown string value of token"
-msgstr "Okänd statusindikering för lock-kommandot"
+msgstr "Okänt strängvärde på identifierare"
-#: ../include/svn_error_codes.h:226
+#: ../include/svn_error_codes.h:229
+msgid "Invalid changelist name"
+msgstr "Ogiltig namn på ändringslista"
+
+#: ../include/svn_error_codes.h:234
+msgid "Invalid atomic"
+msgstr "Ogiltig odelbar operation"
+
+#: ../include/svn_error_codes.h:240
msgid "No such XML tag attribute"
msgstr "XML-attribut saknas"
-#: ../include/svn_error_codes.h:230
+#: ../include/svn_error_codes.h:244
msgid "<delta-pkg> is missing ancestry"
msgstr "<delta-pkg> saknar ursprung"
-#: ../include/svn_error_codes.h:234
+#: ../include/svn_error_codes.h:248
msgid "Unrecognized binary data encoding; can't decode"
msgstr "Okänd kodning av binärdata; kan inte avkoda"
-#: ../include/svn_error_codes.h:238
+#: ../include/svn_error_codes.h:252
msgid "XML data was not well-formed"
msgstr "XML var inte välformad"
-#: ../include/svn_error_codes.h:242
+#: ../include/svn_error_codes.h:256
msgid "Data cannot be safely XML-escaped"
msgstr "Data kan inte skyddas för lagring som XML"
-#: ../include/svn_error_codes.h:248
+#: ../include/svn_error_codes.h:262
msgid "Inconsistent line ending style"
msgstr "Inkonsekventa radslutstecken"
-#: ../include/svn_error_codes.h:252
+#: ../include/svn_error_codes.h:266
msgid "Unrecognized line ending style"
msgstr "Okänt sätt att markera radslut"
-#: ../include/svn_error_codes.h:257
+#: ../include/svn_error_codes.h:271
msgid "Line endings other than expected"
msgstr "Andra radslutstecken än väntat"
-#: ../include/svn_error_codes.h:261
+#: ../include/svn_error_codes.h:275
msgid "Ran out of unique names"
msgstr "Kunde inte generera fler unika namn"
-#: ../include/svn_error_codes.h:266
+#: ../include/svn_error_codes.h:280
msgid "Framing error in pipe protocol"
msgstr "Ramfel i rörprotokoll"
-#: ../include/svn_error_codes.h:271
+#: ../include/svn_error_codes.h:285
msgid "Read error in pipe"
msgstr "Läsfel i rör"
-#: ../include/svn_error_codes.h:275 ../libsvn_subr/cmdline.c:341
-#: ../libsvn_subr/cmdline.c:358 ../svn/util.c:923 ../svnlook/main.c:1802
+#: ../include/svn_error_codes.h:289 ../libsvn_subr/cmdline.c:362
+#: ../libsvn_subr/cmdline.c:385 ../svn/util.c:569 ../svnlook/svnlook.c:2009
#, c-format
msgid "Write error"
msgstr "Fel vid skrivning"
-#: ../include/svn_error_codes.h:281
+#: ../include/svn_error_codes.h:294
+msgid "Write error in pipe"
+msgstr "Skrivfel i rör"
+
+#: ../include/svn_error_codes.h:300
msgid "Unexpected EOF on stream"
msgstr "Oväntat filslut i ström"
-#: ../include/svn_error_codes.h:285
+#: ../include/svn_error_codes.h:304
msgid "Malformed stream data"
msgstr "Felaktig data i ström"
-#: ../include/svn_error_codes.h:289
+#: ../include/svn_error_codes.h:308
msgid "Unrecognized stream data"
msgstr "Okänd data i ström"
-#: ../include/svn_error_codes.h:294
-#, fuzzy
+#: ../include/svn_error_codes.h:313
msgid "Stream doesn't support seeking"
-msgstr "Servern stöder ej lock-kommandot"
+msgstr "Strömmen stöder ej positionering"
-#: ../include/svn_error_codes.h:300
+#: ../include/svn_error_codes.h:319
msgid "Unknown svn_node_kind"
msgstr "Okänd svn_node_kind"
-#: ../include/svn_error_codes.h:304
+#: ../include/svn_error_codes.h:323
msgid "Unexpected node kind found"
msgstr "Oväntad nodtyp funnen"
-#: ../include/svn_error_codes.h:310
+#: ../include/svn_error_codes.h:329
msgid "Can't find an entry"
msgstr "Kan inte hitta post"
-#: ../include/svn_error_codes.h:316
+#: ../include/svn_error_codes.h:335
msgid "Entry already exists"
msgstr "Posten finns redan"
-#: ../include/svn_error_codes.h:320
+#: ../include/svn_error_codes.h:339
msgid "Entry has no revision"
msgstr "Posten saknar revision"
-#: ../include/svn_error_codes.h:324
+#: ../include/svn_error_codes.h:343
msgid "Entry has no URL"
msgstr "Posten saknar URL"
-#: ../include/svn_error_codes.h:328
+#: ../include/svn_error_codes.h:347
msgid "Entry has an invalid attribute"
msgstr "Ogiltigt attribut i post"
-#: ../include/svn_error_codes.h:332
+#: ../include/svn_error_codes.h:351
msgid "Can't create an entry for a forbidden name"
-msgstr ""
+msgstr "Kan inte skapa post för otillåtet namn"
-#: ../include/svn_error_codes.h:338
+#: ../include/svn_error_codes.h:357
msgid "Obstructed update"
msgstr "Blockerad uppdatering"
-#: ../include/svn_error_codes.h:343
+#: ../include/svn_error_codes.h:362
msgid "Mismatch popping the WC unwind stack"
msgstr "Fel vid upprullning av arbetskopiestacken"
-#: ../include/svn_error_codes.h:348
+#: ../include/svn_error_codes.h:367
msgid "Attempt to pop empty WC unwind stack"
msgstr "Försök att rulla upp tom arbetskopiestack"
-#: ../include/svn_error_codes.h:353
+#: ../include/svn_error_codes.h:372
msgid "Attempt to unlock with non-empty unwind stack"
msgstr "Försök att låsa upp icke-tom upprullningsstack"
-#: ../include/svn_error_codes.h:357
+#: ../include/svn_error_codes.h:376
msgid "Attempted to lock an already-locked dir"
msgstr "Försök att låsa en katalog som redan var låst"
-#: ../include/svn_error_codes.h:361
+#: ../include/svn_error_codes.h:380
msgid "Working copy not locked; this is probably a bug, please report"
-msgstr "Arbetskopian är inte låst; detta är troligen en bugg, vänligen rapportera den"
+msgstr "Arbetskopian är inte låst; detta är troligen ett programfel, vänligen rapportera det"
-#: ../include/svn_error_codes.h:366
+#: ../include/svn_error_codes.h:385
msgid "Invalid lock"
msgstr "Ogiltigt lås"
-#: ../include/svn_error_codes.h:373
+#: ../include/svn_error_codes.h:391 ../include/svn_error_codes.h:397
msgid "Path is not a working copy directory"
msgstr "Sökvägen är ingen katalog i en arbetskopia"
-#: ../include/svn_error_codes.h:381
+#: ../include/svn_error_codes.h:401
msgid "Path is not a working copy file"
msgstr "Sökväg är inte en fil i en arbetskopia"
-#: ../include/svn_error_codes.h:385
+#: ../include/svn_error_codes.h:405
msgid "Problem running log"
msgstr "Problem vid körning av logg"
-#: ../include/svn_error_codes.h:389
+#: ../include/svn_error_codes.h:409
msgid "Can't find a working copy path"
msgstr "Kan inte hitta sökväg till arbetskopia"
-#: ../include/svn_error_codes.h:393
+#: ../include/svn_error_codes.h:413
msgid "Working copy is not up-to-date"
msgstr "Arbetskopian är inaktuell"
-#: ../include/svn_error_codes.h:397
+#: ../include/svn_error_codes.h:417
msgid "Left locally modified or unversioned files"
msgstr "Lämnade kvar lokalt ändrade eller icke versionshanterade filer"
-#: ../include/svn_error_codes.h:401
+#: ../include/svn_error_codes.h:421
msgid "Unmergeable scheduling requested on an entry"
msgstr "Schemaläggning som ej kan slås samman begärd på post"
-#: ../include/svn_error_codes.h:405
+#: ../include/svn_error_codes.h:425
msgid "Found a working copy path"
msgstr "Hittade sökväg till arbetskopia"
-#: ../include/svn_error_codes.h:409
+#: ../include/svn_error_codes.h:429
msgid "A conflict in the working copy obstructs the current operation"
msgstr "En konflikt i arbetskopian blockerar operationen"
-#: ../include/svn_error_codes.h:413
+#: ../include/svn_error_codes.h:433
msgid "Working copy is corrupt"
msgstr "Förstörd arbetskopia"
-#: ../include/svn_error_codes.h:417
+#: ../include/svn_error_codes.h:437
msgid "Working copy text base is corrupt"
msgstr "Förstörd textbas i arbetskopia"
-#: ../include/svn_error_codes.h:421
+#: ../include/svn_error_codes.h:441
msgid "Cannot change node kind"
msgstr "Kan inte ändra nodtyp"
-#: ../include/svn_error_codes.h:425
+#: ../include/svn_error_codes.h:445
msgid "Invalid operation on the current working directory"
msgstr "Ogiltig operation på aktuell katalog"
-#: ../include/svn_error_codes.h:429
+#: ../include/svn_error_codes.h:449
msgid "Problem on first log entry in a working copy"
msgstr "Problem med första loggposten i arbetskopia"
-#: ../include/svn_error_codes.h:433
+#: ../include/svn_error_codes.h:453
msgid "Unsupported working copy format"
msgstr "Formatet på arbetskopian stöds ej"
-#: ../include/svn_error_codes.h:437
+#: ../include/svn_error_codes.h:457
msgid "Path syntax not supported in this context"
msgstr "Sökvägssyntax stöds ej i detta sammanhang"
-#: ../include/svn_error_codes.h:442
+#: ../include/svn_error_codes.h:462
msgid "Invalid schedule"
msgstr "Ogiltig schemaläggning"
-#: ../include/svn_error_codes.h:447
+#: ../include/svn_error_codes.h:467
msgid "Invalid relocation"
msgstr "Ogiltig omlokalisering"
-#: ../include/svn_error_codes.h:452
+#: ../include/svn_error_codes.h:472
msgid "Invalid switch"
msgstr "Ogiltig flagga"
-#: ../include/svn_error_codes.h:457
-#, fuzzy
+#: ../include/svn_error_codes.h:477
msgid "Changelist doesn't match"
-msgstr "Ändringslista: %s\n"
+msgstr "Ändringslistan stämmer inte"
-#: ../include/svn_error_codes.h:462
-#, fuzzy
+#: ../include/svn_error_codes.h:482
msgid "Conflict resolution failed"
-msgstr "Kunde inte skapa arkiv"
+msgstr "Konfliktlösningen misslyckades"
-#: ../include/svn_error_codes.h:466
-#, fuzzy
+#: ../include/svn_error_codes.h:486
msgid "Failed to locate 'copyfrom' path in working copy"
-msgstr "Sökväg är inte en fil i en arbetskopia"
+msgstr "Hittade inte \"copyfrom\"-sökvägen i arbetskopian"
-#: ../include/svn_error_codes.h:473
+#: ../include/svn_error_codes.h:494
msgid "Moving a path from one changelist to another"
-msgstr ""
+msgstr "Flyttar en sökväg från en ändringslista till en annan"
-#: ../include/svn_error_codes.h:478
-#, fuzzy
+#: ../include/svn_error_codes.h:499
msgid "Cannot delete a file external"
-msgstr "Kan inte erhålla filnamn"
+msgstr "Kan inte radera en extern fil"
-#: ../include/svn_error_codes.h:483
-#, fuzzy
+#: ../include/svn_error_codes.h:504
msgid "Cannot move a file external"
-msgstr "Kan inte flytta sökvägen \"%s\" till sig själv"
+msgstr "Kan inte flytta en extern fil"
-#: ../include/svn_error_codes.h:488
+#: ../include/svn_error_codes.h:509
msgid "Something's amiss with the wc sqlite database"
-msgstr ""
+msgstr "Något är på tok med arbetskopians sqlite-databas"
-#: ../include/svn_error_codes.h:493
-#, fuzzy
+#: ../include/svn_error_codes.h:514
msgid "The working copy is missing"
-msgstr "Förstörd arbetskopia"
+msgstr "Arbetskopian saknas"
-#: ../include/svn_error_codes.h:498
-#, fuzzy
+#: ../include/svn_error_codes.h:519
msgid "The specified node is not a symlink"
-msgstr "Angiven transaktion går ej att ändra"
+msgstr "Angiven nod är ej en länk"
-#: ../include/svn_error_codes.h:503
-#, fuzzy
+#: ../include/svn_error_codes.h:524
msgid "The specified path has an unexpected status"
-msgstr "Den angivna diff-flaggan stöds ej"
+msgstr "Den angivna sökvägen befinner sig i ett oväntat tillstånd"
-#: ../include/svn_error_codes.h:508
+#: ../include/svn_error_codes.h:529
msgid "The working copy needs to be upgraded"
-msgstr ""
+msgstr "Arbetskopian måste uppgraderas"
-#: ../include/svn_error_codes.h:513
-#, fuzzy
-msgid "Previous operation was interrupted; run 'svn cleanup'"
-msgstr "Operationen avbröts"
+#: ../include/svn_error_codes.h:534
+msgid "Previous operation has not finished; run 'cleanup' if it was interrupted"
+msgstr "En tidigare handling är inte färdig; kör \"cleanup\" om den avbröts"
-#: ../include/svn_error_codes.h:518
-msgid "This operation can not be performed with just this depth."
-msgstr ""
+#: ../include/svn_error_codes.h:540
+msgid "The operation cannot be performed with the specified depth"
+msgstr "Handlingen kan inte utföras med det angivna djupet"
-#: ../include/svn_error_codes.h:524
+#: ../include/svn_error_codes.h:545
+msgid "Couldn't open a working copy file because access was denied"
+msgstr "Kunde inte öppna en fil i arbetskopian eftersom åtkomst nekades"
+
+#: ../include/svn_error_codes.h:550
+msgid "Mixed-revision working copy was found but not expected"
+msgstr "Arbetskopia med blandad revision hittades men väntades ej"
+
+#: ../include/svn_error_codes.h:555
+msgid "Duplicate targets in svn:externals property"
+msgstr "Dubblettmål i svn:externals-egenskap"
+
+#: ../include/svn_error_codes.h:561
msgid "General filesystem error"
msgstr "Allmänt filsystemsfel"
-#: ../include/svn_error_codes.h:528
+#: ../include/svn_error_codes.h:565
msgid "Error closing filesystem"
msgstr "Fel vid stängning av filsystem"
-#: ../include/svn_error_codes.h:532
+#: ../include/svn_error_codes.h:569
msgid "Filesystem is already open"
msgstr "Filsystemet är redan öppet"
-#: ../include/svn_error_codes.h:536
+#: ../include/svn_error_codes.h:573
msgid "Filesystem is not open"
msgstr "Filsystemet är ej öppet"
-#: ../include/svn_error_codes.h:540
+#: ../include/svn_error_codes.h:577
msgid "Filesystem is corrupt"
msgstr "Förstört filsystem"
-#: ../include/svn_error_codes.h:544
+#: ../include/svn_error_codes.h:581
msgid "Invalid filesystem path syntax"
msgstr "Ogiltig syntax för sökväg i filsystem"
-#: ../include/svn_error_codes.h:548
+#: ../include/svn_error_codes.h:585
msgid "Invalid filesystem revision number"
msgstr "Ogiltigt revisionsnummer för filsystem"
-#: ../include/svn_error_codes.h:552
+#: ../include/svn_error_codes.h:589
msgid "Invalid filesystem transaction name"
msgstr "Ogiltigt transaktionsnamn för filsystem"
-#: ../include/svn_error_codes.h:556
+#: ../include/svn_error_codes.h:593
msgid "Filesystem directory has no such entry"
msgstr "Katalog i filsystem saknar post med det namnet"
-#: ../include/svn_error_codes.h:560
+#: ../include/svn_error_codes.h:597
msgid "Filesystem has no such representation"
msgstr "Representation saknas i filsystem"
-#: ../include/svn_error_codes.h:564
+#: ../include/svn_error_codes.h:601
msgid "Filesystem has no such string"
msgstr "Sträng saknas i filsystem"
-#: ../include/svn_error_codes.h:568
+#: ../include/svn_error_codes.h:605
msgid "Filesystem has no such copy"
msgstr "Kopia saknas i filsystem"
-#: ../include/svn_error_codes.h:572
+#: ../include/svn_error_codes.h:609
msgid "The specified transaction is not mutable"
msgstr "Angiven transaktion går ej att ändra"
-#: ../include/svn_error_codes.h:576
+#: ../include/svn_error_codes.h:613
msgid "Filesystem has no item"
msgstr "Filsystem saknar objekt"
-#: ../include/svn_error_codes.h:580
+#: ../include/svn_error_codes.h:617
msgid "Filesystem has no such node-rev-id"
msgstr "node-rev-id saknas i filsystem"
-#: ../include/svn_error_codes.h:584
+#: ../include/svn_error_codes.h:621
msgid "String does not represent a node or node-rev-id"
-msgstr "Strängen representerar ingen nod eller node-erv-id"
+msgstr "Strängen representerar ingen nod eller node-rev-id"
-#: ../include/svn_error_codes.h:588
+#: ../include/svn_error_codes.h:625
msgid "Name does not refer to a filesystem directory"
msgstr "Namnet refererar ej till en katalog i filsystemet"
-#: ../include/svn_error_codes.h:592
+#: ../include/svn_error_codes.h:629
msgid "Name does not refer to a filesystem file"
msgstr "Namnet refererar ej till en fil i filsystemet"
-#: ../include/svn_error_codes.h:596
+#: ../include/svn_error_codes.h:633
msgid "Name is not a single path component"
msgstr "Namnet är ej en ensam sökvägskomponent"
-#: ../include/svn_error_codes.h:600
+#: ../include/svn_error_codes.h:637
msgid "Attempt to change immutable filesystem node"
msgstr "Försök att ändra filsystemsnod som ej får ändras"
-#: ../include/svn_error_codes.h:604
+#: ../include/svn_error_codes.h:641
msgid "Item already exists in filesystem"
msgstr "Objektet finns redan i filsystemet"
-#: ../include/svn_error_codes.h:608
+#: ../include/svn_error_codes.h:645
msgid "Attempt to remove or recreate fs root dir"
msgstr "Försök att ta bort eller omskapa filsystemets rotkatalog"
-#: ../include/svn_error_codes.h:612
+#: ../include/svn_error_codes.h:649
msgid "Object is not a transaction root"
msgstr "Objektet är ingen transaktionsrot"
-#: ../include/svn_error_codes.h:616
+#: ../include/svn_error_codes.h:653
msgid "Object is not a revision root"
msgstr "Objektet är ingen revisionsrot"
-#: ../include/svn_error_codes.h:620
+#: ../include/svn_error_codes.h:657
msgid "Merge conflict during commit"
msgstr "Sammanslagningskonflikt vid arkivering"
-#: ../include/svn_error_codes.h:624
+#: ../include/svn_error_codes.h:661
msgid "A representation vanished or changed between reads"
msgstr "Representation försvann eller ändrades mellan läsningar"
-#: ../include/svn_error_codes.h:628
+#: ../include/svn_error_codes.h:665
msgid "Tried to change an immutable representation"
-msgstr "Försök att ändra representation som ej får ädnras"
+msgstr "Försök att ändra representation som ej får ändras"
-#: ../include/svn_error_codes.h:632
+#: ../include/svn_error_codes.h:669
msgid "Malformed skeleton data"
msgstr "Felaktig skelettdata"
-#: ../include/svn_error_codes.h:636
+#: ../include/svn_error_codes.h:673
msgid "Transaction is out of date"
msgstr "Transaktionen är inaktuell"
-#: ../include/svn_error_codes.h:640
+#: ../include/svn_error_codes.h:677
msgid "Berkeley DB error"
msgstr "Fel i Berkeley DB"
-#: ../include/svn_error_codes.h:644
+#: ../include/svn_error_codes.h:681
msgid "Berkeley DB deadlock error"
-msgstr "\"Deadlock\" i Berkeley DB"
+msgstr "Berkeley DB i baklås"
-#: ../include/svn_error_codes.h:648
+#: ../include/svn_error_codes.h:685
msgid "Transaction is dead"
msgstr "Transaktionen är död"
-#: ../include/svn_error_codes.h:652
+#: ../include/svn_error_codes.h:689
msgid "Transaction is not dead"
msgstr "Transaktionen är inte död"
-#: ../include/svn_error_codes.h:657
+#: ../include/svn_error_codes.h:694
msgid "Unknown FS type"
msgstr "Okänd filsystemstyp"
-#: ../include/svn_error_codes.h:662
+#: ../include/svn_error_codes.h:699
msgid "No user associated with filesystem"
msgstr "Ingen användare kopplad till filsystemet"
-#: ../include/svn_error_codes.h:667
+#: ../include/svn_error_codes.h:704
msgid "Path is already locked"
msgstr "Sökvägen är redan låst"
-#: ../include/svn_error_codes.h:672 ../include/svn_error_codes.h:834
+#: ../include/svn_error_codes.h:709 ../include/svn_error_codes.h:886
msgid "Path is not locked"
msgstr "Sökvägen är inte låst"
-#: ../include/svn_error_codes.h:677
+#: ../include/svn_error_codes.h:714
msgid "Lock token is incorrect"
msgstr "Låsidentifieraren är felaktig"
-#: ../include/svn_error_codes.h:682
+#: ../include/svn_error_codes.h:719
msgid "No lock token provided"
msgstr "Ingen låsidentifierare tillhandahölls"
-#: ../include/svn_error_codes.h:687
+#: ../include/svn_error_codes.h:724
msgid "Username does not match lock owner"
msgstr "Användarnamnet matchar inte låsägaren"
-#: ../include/svn_error_codes.h:692
+#: ../include/svn_error_codes.h:729
msgid "Filesystem has no such lock"
msgstr "LÃ¥set saknas i filsystemet"
-#: ../include/svn_error_codes.h:697
+#: ../include/svn_error_codes.h:734
msgid "Lock has expired"
msgstr "Låset har gått ut"
-#: ../include/svn_error_codes.h:702 ../include/svn_error_codes.h:821
+#: ../include/svn_error_codes.h:739 ../include/svn_error_codes.h:873
msgid "Item is out of date"
msgstr "Objektet är inaktuellt"
-#: ../include/svn_error_codes.h:714
+#: ../include/svn_error_codes.h:751
msgid "Unsupported FS format"
msgstr "Formatet på filsystemet stöds ej"
-#: ../include/svn_error_codes.h:719
+#: ../include/svn_error_codes.h:756
msgid "Representation is being written"
msgstr "Representationen håller på att skrivas"
-#: ../include/svn_error_codes.h:724
-#, fuzzy
+#: ../include/svn_error_codes.h:761
msgid "The generated transaction name is too long"
-msgstr "Angiven transaktion går ej att ändra"
+msgstr "Det genererade transaktionsnamnet är för långt"
-#: ../include/svn_error_codes.h:729
-#, fuzzy
+#: ../include/svn_error_codes.h:766
msgid "Filesystem has no such node origin record"
-msgstr "node-rev-id saknas i filsystem"
+msgstr "Filsystemet saknar en sådan nodursprungspost"
-#: ../include/svn_error_codes.h:734
-#, fuzzy
+#: ../include/svn_error_codes.h:771
msgid "Filesystem upgrade is not supported"
-msgstr "Filsystemet är ej öppet"
+msgstr "Filsystemsuppgradering stöds ej"
-#: ../include/svn_error_codes.h:739
-#, fuzzy
+#: ../include/svn_error_codes.h:776
msgid "Filesystem has no such checksum-representation index record"
-msgstr "Representation saknas i filsystem"
+msgstr "Indexpost för kontrollsummerepresentation saknas i filsystem"
-#: ../include/svn_error_codes.h:744
+#: ../include/svn_error_codes.h:781
msgid "Property value in filesystem differs from the provided base value"
-msgstr ""
+msgstr "Egenskapsvärde i filsystem skiljer sig från givet basvärde"
-#: ../include/svn_error_codes.h:751
+#: ../include/svn_error_codes.h:787
+msgid "The filesystem editor completion process was not followed"
+msgstr "Filsystemseditorns avslutningsprocess följdes inte"
+
+#: ../include/svn_error_codes.h:792
+msgid "A packed revprop could not be read"
+msgstr "En packad revisionsegenskap kunde inte läsas"
+
+#: ../include/svn_error_codes.h:797
+msgid "Could not initialize the revprop caching infrastructure."
+msgstr "Kunde inte initiera infrastrukturen för cachning av revisionsegenskaper"
+
+#: ../include/svn_error_codes.h:803
msgid "The repository is locked, perhaps for db recovery"
msgstr "Arkivet är låst, kanske för reparation"
-#: ../include/svn_error_codes.h:755
+#: ../include/svn_error_codes.h:807
msgid "A repository hook failed"
-msgstr "Arkivhookskript misslyckades"
+msgstr "Ett krokskript i arkivet misslyckades"
-#: ../include/svn_error_codes.h:759
+#: ../include/svn_error_codes.h:811
msgid "Incorrect arguments supplied"
msgstr "Felaktiga argument"
-#: ../include/svn_error_codes.h:763
+#: ../include/svn_error_codes.h:815
msgid "A report cannot be generated because no data was supplied"
msgstr "Rapport kan ej skapas, då data ej tillhandahölls"
-#: ../include/svn_error_codes.h:767
+#: ../include/svn_error_codes.h:819
msgid "Bogus revision report"
msgstr "Felaktig revisionsrapport"
-#: ../include/svn_error_codes.h:776
+#: ../include/svn_error_codes.h:828
msgid "Unsupported repository version"
msgstr "Arkivversionen stöds ej"
-#: ../include/svn_error_codes.h:780
+#: ../include/svn_error_codes.h:832
msgid "Disabled repository feature"
msgstr "Funktionen är avslagen i arkivet"
-#: ../include/svn_error_codes.h:784
+#: ../include/svn_error_codes.h:836
msgid "Error running post-commit hook"
-msgstr "Fel vid körning av post-commit-hookskript"
+msgstr "Fel vid körning av krokskript efter arkivering (\"post-commit\")"
-#: ../include/svn_error_codes.h:789
+#: ../include/svn_error_codes.h:841
msgid "Error running post-lock hook"
-msgstr "Fel vid körning av post-lock-hookskript"
+msgstr "Fel vid körning av krokskript efter låsning (\"post-lock\")"
-#: ../include/svn_error_codes.h:794
+#: ../include/svn_error_codes.h:846
msgid "Error running post-unlock hook"
-msgstr "Fel vid körning av post-unlock-hookskript"
+msgstr "Fel vid körning av krokskript efter upplåsning (\"post-unlock\")"
-#: ../include/svn_error_codes.h:799
-#, fuzzy
+#: ../include/svn_error_codes.h:851
msgid "Repository upgrade is not supported"
-msgstr "Argument för arkiv krävs"
+msgstr "Uppgradering av arkiv stöds ej"
-#: ../include/svn_error_codes.h:805
+#: ../include/svn_error_codes.h:857
msgid "Bad URL passed to RA layer"
msgstr "Felaktig URL skickad till RA-skiktet"
-#: ../include/svn_error_codes.h:809
+#: ../include/svn_error_codes.h:861
msgid "Authorization failed"
msgstr "Behörighetskontroll misslyckades"
-#: ../include/svn_error_codes.h:813
+#: ../include/svn_error_codes.h:865
msgid "Unknown authorization method"
msgstr "Okänd metod för behörighetskontroll"
-#: ../include/svn_error_codes.h:817
+#: ../include/svn_error_codes.h:869
msgid "Repository access method not implemented"
msgstr "Metod för arkivåtkomst ej implementerad"
-#: ../include/svn_error_codes.h:825
+#: ../include/svn_error_codes.h:877
msgid "Repository has no UUID"
-msgstr "Arkivet saknar unik identifierare (UUID)"
+msgstr "Arkivet saknar UUID"
-#: ../include/svn_error_codes.h:829
+#: ../include/svn_error_codes.h:881
msgid "Unsupported RA plugin ABI version"
msgstr "ABI-versionen för insticksmodulen för arkivåtkomst stöds ej"
-#: ../include/svn_error_codes.h:839
-#, fuzzy
+#: ../include/svn_error_codes.h:891
msgid "Server can only replay from the root of a repository"
-msgstr "\"%s\" är inte arkivets rot"
+msgstr "Servern kan bara spela upp från arkivroten"
-#: ../include/svn_error_codes.h:844
-#, fuzzy
+#: ../include/svn_error_codes.h:896
msgid "Repository UUID does not match expected UUID"
-msgstr "UUID:n på källarkivet (%s) matchar inte den förväntade UUID:n (%s)"
+msgstr "Arkivets UUID matchar inte den förväntade UUID:n"
-#: ../include/svn_error_codes.h:849
-#, fuzzy
+#: ../include/svn_error_codes.h:901
msgid "Repository root URL does not match expected root URL"
-msgstr "UUID:n på källarkivet (%s) matchar inte den förväntade UUID:n (%s)"
+msgstr "Arkivets rot-URL matchar inte den förväntade rot-URL:en"
-#: ../include/svn_error_codes.h:854
+#: ../include/svn_error_codes.h:906
msgid "Session URL does not match expected session URL"
-msgstr ""
+msgstr "Sessionens URL matchar inte den förväntade sessions-URL:en"
+
+#: ../include/svn_error_codes.h:911 ../libsvn_ra_svn/client.c:492
+#, c-format
+msgid "Can't create tunnel"
+msgstr "Kan inte skapa tunnel"
-#: ../include/svn_error_codes.h:860
+#: ../include/svn_error_codes.h:917
msgid "RA layer failed to init socket layer"
msgstr "RA-skiktet kunde inte initiera uttagsskiktet (socket layer)"
-#: ../include/svn_error_codes.h:864
+#: ../include/svn_error_codes.h:921
msgid "RA layer failed to create HTTP request"
msgstr "RA-skiktet kunde inte skapa en HTTP-förfrågan"
-#: ../include/svn_error_codes.h:868
+#: ../include/svn_error_codes.h:925
msgid "RA layer request failed"
msgstr "Förfrågan misslyckad i RA-skiktet"
-#: ../include/svn_error_codes.h:872
+#: ../include/svn_error_codes.h:929
msgid "RA layer didn't receive requested OPTIONS info"
msgstr "RA-skiktet mottog ej begärd OPTIONS-information"
-#: ../include/svn_error_codes.h:876
+#: ../include/svn_error_codes.h:933
msgid "RA layer failed to fetch properties"
msgstr "RA-skiktet misslyckades med att erhålla egenskaper"
-#: ../include/svn_error_codes.h:880
+#: ../include/svn_error_codes.h:937
msgid "RA layer file already exists"
msgstr "RA-skiktsfil finns redan"
-#: ../include/svn_error_codes.h:894
+#: ../include/svn_error_codes.h:951
msgid "HTTP Path Not Found"
msgstr "HTTP-sökväg finns inte"
-#: ../include/svn_error_codes.h:898
+#: ../include/svn_error_codes.h:955
msgid "Failed to execute WebDAV PROPPATCH"
msgstr "Misslyckades med att utföra WebDAV PROPPATCH"
-#: ../include/svn_error_codes.h:903 ../include/svn_error_codes.h:954
-#: ../libsvn_ra_svn/marshal.c:714 ../libsvn_ra_svn/marshal.c:832
-#: ../libsvn_ra_svn/marshal.c:859
+#: ../include/svn_error_codes.h:960 ../include/svn_error_codes.h:1403
+#: ../libsvn_ra_svn/marshal.c:1075 ../libsvn_ra_svn/marshal.c:1285
+#: ../libsvn_ra_svn/marshal.c:1315
msgid "Malformed network data"
msgstr "Felaktig nätverksdata"
-#: ../include/svn_error_codes.h:908
+#: ../include/svn_error_codes.h:965
msgid "Unable to extract data from response header"
msgstr "Kunde inte läsa data från responshuvud"
-#: ../include/svn_error_codes.h:913
+#: ../include/svn_error_codes.h:970
msgid "Repository has been moved"
msgstr "Arkivet har flyttats"
-#: ../include/svn_error_codes.h:918 ../libsvn_ra_serf/replay.c:844
-#: ../libsvn_ra_serf/update.c:2326 ../libsvn_ra_serf/util.c:689
-#, fuzzy
+#: ../include/svn_error_codes.h:975 ../libsvn_ra_serf/update.c:2881
+#: ../libsvn_ra_serf/util.c:844
msgid "Connection timed out"
-msgstr "Nätverksanslutningen stängdes oväntat"
+msgstr "Nätverksanslutningen gick ut"
-#: ../include/svn_error_codes.h:923
+#: ../include/svn_error_codes.h:980
msgid "URL access forbidden for unknown reason"
-msgstr ""
+msgstr "Åtkomst till URL tilläts ej av okänd anledning"
-#: ../include/svn_error_codes.h:929 ../include/svn_error_codes.h:958
+#: ../include/svn_error_codes.h:986 ../include/svn_error_codes.h:1407
msgid "Couldn't find a repository"
msgstr "Kunde inte hitta något arkiv"
-#: ../include/svn_error_codes.h:933
+#: ../include/svn_error_codes.h:990
msgid "Couldn't open a repository"
msgstr "Kunde inte öppna arkivet"
-#: ../include/svn_error_codes.h:938
-msgid "Special code for wrapping server errors to report to client"
-msgstr "Specialkod för att rapportera serverfel till klienten"
-
-#: ../include/svn_error_codes.h:942
-msgid "Unknown svn protocol command"
-msgstr "Okänt kommando i svn-protokollet"
-
-#: ../include/svn_error_codes.h:946
-msgid "Network connection closed unexpectedly"
-msgstr "Nätverksanslutningen stängdes oväntat"
-
-#: ../include/svn_error_codes.h:950
-msgid "Network read/write error"
-msgstr "Läs/skrivfel till nätverket"
-
-#: ../include/svn_error_codes.h:962
-msgid "Client/server version mismatch"
-msgstr "Klient- och serverversion stämmer ej överens"
-
-#: ../include/svn_error_codes.h:967
-msgid "Cannot negotiate authentication mechanism"
-msgstr "Kan inte förhandla om autentiseringsmekanism"
-
-#: ../include/svn_error_codes.h:972
-msgid "Editor drive was aborted"
-msgstr ""
-
-#: ../include/svn_error_codes.h:978
-msgid "Initialization of SSPI library failed"
-msgstr ""
-
-#: ../include/svn_error_codes.h:982
-msgid "Server SSL certificate untrusted"
-msgstr ""
-
-#: ../include/svn_error_codes.h:986
-msgid "Initialization of the GSSAPI context failed"
-msgstr ""
-
-#: ../include/svn_error_codes.h:991
-msgid "While handling serf response:"
-msgstr ""
-
-#: ../include/svn_error_codes.h:999
-msgid "Credential data unavailable"
-msgstr "Klientreferenser otillgängliga"
-
-#: ../include/svn_error_codes.h:1003
-msgid "No authentication provider available"
-msgstr "Ingen tillhandahållare av autentisering tillgänglig"
-
-#: ../include/svn_error_codes.h:1007
-msgid "All authentication providers exhausted"
-msgstr "Alla tillhandahållare av autentisering förbrukade"
-
-#: ../include/svn_error_codes.h:1011
-#, fuzzy
-msgid "Credentials not saved"
-msgstr "Klientreferenser otillgängliga"
-
-#: ../include/svn_error_codes.h:1016
-#, fuzzy
-msgid "Authentication failed"
-msgstr "Behörighetskontroll misslyckades"
-
-#: ../include/svn_error_codes.h:1022
-msgid "Read access denied for root of edit"
-msgstr "Läsning nekas till roten för editeringen"
-
-#: ../include/svn_error_codes.h:1027
-msgid "Item is not readable"
-msgstr "Objektet är inte läsbart"
-
-#: ../include/svn_error_codes.h:1032
-msgid "Item is partially readable"
-msgstr "Objektet är delvis läsbart"
-
-#: ../include/svn_error_codes.h:1036
-msgid "Invalid authz configuration"
-msgstr "Ogiltig auktorisationskonfiguration"
-
-#: ../include/svn_error_codes.h:1041
-msgid "Item is not writable"
-msgstr "Objektet är inte skrivbart"
-
-#: ../include/svn_error_codes.h:1047
+#: ../include/svn_error_codes.h:996
msgid "Svndiff data has invalid header"
msgstr "Svndiff-data har ogiltigt huvud"
-#: ../include/svn_error_codes.h:1051
+#: ../include/svn_error_codes.h:1000
msgid "Svndiff data contains corrupt window"
msgstr "Svndiff-data innehåller trasigt fönster"
-#: ../include/svn_error_codes.h:1055
+#: ../include/svn_error_codes.h:1004
msgid "Svndiff data contains backward-sliding source view"
msgstr "Svndiff-data innehåller källvyer med förflyttningar baklänges"
-#: ../include/svn_error_codes.h:1059
+#: ../include/svn_error_codes.h:1008
msgid "Svndiff data contains invalid instruction"
msgstr "Ogiltig instruktion i svndiff-data"
-#: ../include/svn_error_codes.h:1063
+#: ../include/svn_error_codes.h:1012
msgid "Svndiff data ends unexpectedly"
msgstr "Svndiff-data tog oväntat slut"
-#: ../include/svn_error_codes.h:1067
+#: ../include/svn_error_codes.h:1016
msgid "Svndiff compressed data is invalid"
msgstr "Komprimerad svndiff-data är ogiltig"
-#: ../include/svn_error_codes.h:1073
-msgid "Diff data source modified unexpectedly"
-msgstr "Datakälla för diff ändrades oväntat"
-
-#: ../include/svn_error_codes.h:1079
+#: ../include/svn_error_codes.h:1022
msgid "Apache has no path to an SVN filesystem"
msgstr "Apache saknar sökväg till SVN-filsystem"
-#: ../include/svn_error_codes.h:1083
+#: ../include/svn_error_codes.h:1026
msgid "Apache got a malformed URI"
msgstr "Apache fick en felaktig URI"
-#: ../include/svn_error_codes.h:1087
+#: ../include/svn_error_codes.h:1030
msgid "Activity not found"
msgstr "Aktiviteten hittades ej"
-#: ../include/svn_error_codes.h:1091
+#: ../include/svn_error_codes.h:1034
msgid "Baseline incorrect"
-msgstr "Felaktig baseline"
+msgstr "Felaktig utgångspunkt"
-#: ../include/svn_error_codes.h:1095
+#: ../include/svn_error_codes.h:1038
msgid "Input/output error"
msgstr "In/ut-fel"
-#: ../include/svn_error_codes.h:1101
+#: ../include/svn_error_codes.h:1044
msgid "A path under version control is needed for this operation"
msgstr "Operationen kräver en versionshanterad sökväg"
-#: ../include/svn_error_codes.h:1105
+#: ../include/svn_error_codes.h:1048
msgid "Repository access is needed for this operation"
msgstr "Operationen kräver åtkomst till ett arkiv"
-#: ../include/svn_error_codes.h:1109
+#: ../include/svn_error_codes.h:1052
msgid "Bogus revision information given"
msgstr "Felaktig revisionsinformation angiven"
-#: ../include/svn_error_codes.h:1113
+#: ../include/svn_error_codes.h:1056
msgid "Attempting to commit to a URL more than once"
msgstr "Försöker arkivera till en URL mer än en gång"
-#: ../include/svn_error_codes.h:1117
+#: ../include/svn_error_codes.h:1060
msgid "Operation does not apply to binary file"
msgstr "Operationen kan ej utföras på binär fil"
-#: ../include/svn_error_codes.h:1123
+#: ../include/svn_error_codes.h:1066
msgid "Format of an svn:externals property was invalid"
msgstr "Felaktigt format på svn:externals-egenskap"
-#: ../include/svn_error_codes.h:1127
+#: ../include/svn_error_codes.h:1070
msgid "Attempting restricted operation for modified resource"
msgstr "Operationen tillåter ej att källan är modifierad"
-#: ../include/svn_error_codes.h:1131
+#: ../include/svn_error_codes.h:1074
msgid "Operation does not apply to directory"
msgstr "Operationen kan ej utföras på en katalog"
-#: ../include/svn_error_codes.h:1135
+#: ../include/svn_error_codes.h:1078
msgid "Revision range is not allowed"
msgstr "Revisionsområde otillåtet"
-#: ../include/svn_error_codes.h:1139
+#: ../include/svn_error_codes.h:1082
msgid "Inter-repository relocation not allowed"
msgstr "Omlokalisering mellan arkiv otillåten"
-#: ../include/svn_error_codes.h:1143
+#: ../include/svn_error_codes.h:1086
msgid "Author name cannot contain a newline"
msgstr "Författarnamn kan ej innehålla radslut"
-#: ../include/svn_error_codes.h:1147
+#: ../include/svn_error_codes.h:1090
msgid "Bad property name"
msgstr "Felaktigt egenskapsnamn"
-#: ../include/svn_error_codes.h:1152
+#: ../include/svn_error_codes.h:1095
msgid "Two versioned resources are unrelated"
msgstr "Två orelaterade versionshanterade resurser"
-#: ../include/svn_error_codes.h:1157
+#: ../include/svn_error_codes.h:1100
msgid "Path has no lock token"
msgstr "Sökvägen saknar låsidentifierare"
-#: ../include/svn_error_codes.h:1162
-#, fuzzy
+#: ../include/svn_error_codes.h:1105
msgid "Operation does not support multiple sources"
-msgstr "Operationen kan ej utföras på en katalog"
+msgstr "Operationen klarar ej flera källor"
-#: ../include/svn_error_codes.h:1167
+#: ../include/svn_error_codes.h:1110
msgid "No versioned parent directories"
-msgstr ""
+msgstr "Inga versionshanterade föräldrakataloger"
-#: ../include/svn_error_codes.h:1172
-#, fuzzy
+#: ../include/svn_error_codes.h:1115 ../include/svn_error_codes.h:1135
msgid "Working copy and merge source not ready for reintegration"
-msgstr "En källa för sammanslagning (merge) som är en arbetskopia kräver att en revision anges"
+msgstr "Arbetskopia och källa för sammanslagning inte klara för återförening"
-#: ../include/svn_error_codes.h:1177
+#: ../include/svn_error_codes.h:1120
msgid "A file external cannot overwrite an existing versioned item"
-msgstr ""
+msgstr "En extern fil kan inte skriva över ett befintligt versionshanterat objekt"
-#: ../include/svn_error_codes.h:1182
-#, fuzzy
+#: ../include/svn_error_codes.h:1125
msgid "Invalid path component strip count specified"
-msgstr "Ogiltig revisionsangivelse"
+msgstr "Ogiltigt angivelse av antal sökvägsdelar att ta bort "
-#: ../include/svn_error_codes.h:1187
+#: ../include/svn_error_codes.h:1130
msgid "Detected a cycle while processing the operation"
-msgstr ""
+msgstr "En rundgång upptäcktes när operationen behandlades"
+
+#: ../include/svn_error_codes.h:1140
+msgid "Invalid mergeinfo detected in merge target"
+msgstr "Ogiltig sammanslagningsinformation upptäcktes i målet"
-#: ../include/svn_error_codes.h:1193
-#, fuzzy
+#: ../include/svn_error_codes.h:1145
+msgid "Can't perform this operation without a valid lock token"
+msgstr "Kan inte utföra denna operation utan giltig låsidentifierare"
+
+#: ../include/svn_error_codes.h:1150
+msgid "The operation is forbidden by the server"
+msgstr "Operationen tillåts inte av servern"
+
+#: ../include/svn_error_codes.h:1156
msgid "A problem occurred; see other errors for details"
msgstr "Ett problem har inträffat; se vidare fel för mer information"
-#: ../include/svn_error_codes.h:1197
+#: ../include/svn_error_codes.h:1160
msgid "Failure loading plugin"
msgstr "Fel vid inladdning av insticksmodul"
-#: ../include/svn_error_codes.h:1201
+#: ../include/svn_error_codes.h:1164
msgid "Malformed file"
msgstr "Felaktig fil"
-#: ../include/svn_error_codes.h:1205
+#: ../include/svn_error_codes.h:1168
msgid "Incomplete data"
msgstr "Ofullständig data"
-#: ../include/svn_error_codes.h:1209
+#: ../include/svn_error_codes.h:1172
msgid "Incorrect parameters given"
msgstr "Felaktiga parametrar angivna"
-#: ../include/svn_error_codes.h:1213
+#: ../include/svn_error_codes.h:1176
msgid "Tried a versioning operation on an unversioned resource"
msgstr "Försökte utföra en versionshanteringsoperation på en resurs som ej är versionshanterad"
-#: ../include/svn_error_codes.h:1217
+#: ../include/svn_error_codes.h:1180
msgid "Test failed"
msgstr "Test misslyckades"
-#: ../include/svn_error_codes.h:1221
+#: ../include/svn_error_codes.h:1184
msgid "Trying to use an unsupported feature"
msgstr "Försöker använda en funktion som ej stöds"
-#: ../include/svn_error_codes.h:1225
+#: ../include/svn_error_codes.h:1188
msgid "Unexpected or unknown property kind"
msgstr "Oväntad eller okänd egenskapstyp"
-#: ../include/svn_error_codes.h:1229
+#: ../include/svn_error_codes.h:1192
msgid "Illegal target for the requested operation"
-msgstr "Felaktigt mål för begärd operation"
+msgstr "Otillåtet mål för begärd operation"
-#: ../include/svn_error_codes.h:1233
+#: ../include/svn_error_codes.h:1196
msgid "MD5 checksum is missing"
msgstr "MD5-kontrollsumma saknas"
-#: ../include/svn_error_codes.h:1237
+#: ../include/svn_error_codes.h:1200
msgid "Directory needs to be empty but is not"
msgstr "Katalogen måste vara tom, men det är den inte"
-#: ../include/svn_error_codes.h:1241
+#: ../include/svn_error_codes.h:1204
msgid "Error calling external program"
msgstr "Fel vid anrop av externt program"
-#: ../include/svn_error_codes.h:1245
+#: ../include/svn_error_codes.h:1208
msgid "Python exception has been set with the error"
msgstr "Python-undantag har satts för felet"
-#: ../include/svn_error_codes.h:1249
+#: ../include/svn_error_codes.h:1212
msgid "A checksum mismatch occurred"
msgstr "Felaktig kontrollsumma"
-#: ../include/svn_error_codes.h:1253
+#: ../include/svn_error_codes.h:1216
msgid "The operation was interrupted"
msgstr "Operationen avbröts"
-#: ../include/svn_error_codes.h:1257
+#: ../include/svn_error_codes.h:1220
msgid "The specified diff option is not supported"
msgstr "Den angivna diff-flaggan stöds ej"
-#: ../include/svn_error_codes.h:1261
+#: ../include/svn_error_codes.h:1224
msgid "Property not found"
msgstr "Egenskapen finns ej"
-#: ../include/svn_error_codes.h:1265
+#: ../include/svn_error_codes.h:1228
msgid "No auth file path available"
msgstr "Sökväg för auth-fil ej tillgänglig"
-#: ../include/svn_error_codes.h:1270
+#: ../include/svn_error_codes.h:1233
msgid "Incompatible library version"
msgstr "Biblioteksversioner inte kompatibla"
-#: ../include/svn_error_codes.h:1275
+#: ../include/svn_error_codes.h:1238
msgid "Mergeinfo parse error"
-msgstr ""
+msgstr "Syntaxfel i sammanslagningsinformation"
-#: ../include/svn_error_codes.h:1280
+#: ../include/svn_error_codes.h:1243
msgid "Cease invocation of this API"
-msgstr ""
+msgstr "Avsluta anropet av detta API"
-#: ../include/svn_error_codes.h:1285
-#, fuzzy
+#: ../include/svn_error_codes.h:1248
msgid "Error parsing revision number"
-msgstr "Syntaxfel i revisionsargumentet \"%s\""
+msgstr "Syntaxfel i revisionsnummer"
-#: ../include/svn_error_codes.h:1290
+#: ../include/svn_error_codes.h:1253
msgid "Iteration terminated before completion"
-msgstr ""
+msgstr "Upprepning avslutades före fullbordan"
-#: ../include/svn_error_codes.h:1295
-#, fuzzy
+#: ../include/svn_error_codes.h:1258
msgid "Unknown changelist"
-msgstr "ingen ändringslista med namnet: \"%s\""
+msgstr "Okänd ändringslista"
-#: ../include/svn_error_codes.h:1300
-#, fuzzy
+#: ../include/svn_error_codes.h:1263
msgid "Reserved directory name in command line arguments"
-msgstr "Fel vid initiering av kommandoradsargument"
+msgstr "Reserverat katalognamn i kommandoradsargumenten"
-#: ../include/svn_error_codes.h:1305
+#: ../include/svn_error_codes.h:1268
msgid "Inquiry about unknown capability"
-msgstr ""
+msgstr "Förfrågan om okänd förmåga"
-#: ../include/svn_error_codes.h:1310
-#, fuzzy
+#: ../include/svn_error_codes.h:1273
msgid "Test skipped"
-msgstr "Test misslyckades"
+msgstr "Test hoppades över"
-#: ../include/svn_error_codes.h:1315
-msgid "apr memcache library not available"
-msgstr ""
+#: ../include/svn_error_codes.h:1278
+msgid "APR memcache library not available"
+msgstr "APR memcache-bibliotek ej tillgängligt"
-#: ../include/svn_error_codes.h:1320
+#: ../include/svn_error_codes.h:1283
msgid "Couldn't perform atomic initialization"
-msgstr ""
+msgstr "Kunde inte genomföra atomisk initiering"
-#: ../include/svn_error_codes.h:1325
-#, fuzzy
+#: ../include/svn_error_codes.h:1288
msgid "SQLite error"
-msgstr "Fel vid skrivning"
+msgstr "SQLite-fel"
-#: ../include/svn_error_codes.h:1330
-#, fuzzy
+#: ../include/svn_error_codes.h:1293
msgid "Attempted to write to readonly SQLite db"
-msgstr "Försök att skriva i något som inte är en transaktion"
+msgstr "Försök att skriva till skrivskyddad SQLite-databas"
-#: ../include/svn_error_codes.h:1335
+#: ../include/svn_error_codes.h:1300
msgid "Unsupported schema found in SQLite db"
-msgstr ""
+msgstr "Schemat i SQLite-databasen stöds ej"
-#: ../include/svn_error_codes.h:1340
+#: ../include/svn_error_codes.h:1305
msgid "The SQLite db is busy"
-msgstr ""
+msgstr "SQLite-databasen är upptagen"
-#: ../include/svn_error_codes.h:1345
+#: ../include/svn_error_codes.h:1310
msgid "SQLite busy at transaction rollback; resetting all busy SQLite statements to allow rollback"
-msgstr ""
+msgstr "SQLite upptagen vid transaktionsåterladding; återställer alla upptagna SQLite-satser för att tillåta återladdning"
+
+#: ../include/svn_error_codes.h:1316
+msgid "Constraint error in SQLite db"
+msgstr "Restriktionsfel i SQLite-databas"
-#: ../include/svn_error_codes.h:1352
-#, fuzzy
+#: ../include/svn_error_codes.h:1321
+msgid "Too many memcached servers configured"
+msgstr "För många konfigurerade memcached-servrar"
+
+#: ../include/svn_error_codes.h:1326
+msgid "Failed to parse version number string"
+msgstr "Syntaxfel i sträng med versionsnummer"
+
+#: ../include/svn_error_codes.h:1331
+msgid "Atomic data storage is corrupt"
+msgstr "Förstörd atomisk datalagring"
+
+#: ../include/svn_error_codes.h:1337
msgid "Error parsing arguments"
-msgstr "Klientfel vid tolkning av argument"
+msgstr "Syntaxfel i argument"
-#: ../include/svn_error_codes.h:1356
-#, fuzzy
+#: ../include/svn_error_codes.h:1341
msgid "Not enough arguments provided"
-msgstr "För få argument; använd \"svn --help\" för mer information"
+msgstr "För få argument givna"
-#: ../include/svn_error_codes.h:1360
+#: ../include/svn_error_codes.h:1345
msgid "Mutually exclusive arguments specified"
msgstr "De angivna argumenten kan inte användas samtidigt"
-#: ../include/svn_error_codes.h:1364
+#: ../include/svn_error_codes.h:1349
msgid "Attempted command in administrative dir"
-msgstr "Försökte utföra kommando i administrativ katalog"
+msgstr "Försökte utföra kommando i förvaltningskatalog"
-#: ../include/svn_error_codes.h:1368
+#: ../include/svn_error_codes.h:1353
msgid "The log message file is under version control"
msgstr "Filen med loggmeddelandet är versionshanterad"
-#: ../include/svn_error_codes.h:1372
+#: ../include/svn_error_codes.h:1357
msgid "The log message is a pathname"
msgstr "Logmeddelandet är en sökväg"
-#: ../include/svn_error_codes.h:1376
+#: ../include/svn_error_codes.h:1361
msgid "Committing in directory scheduled for addition"
msgstr "Arkiverar i katalog schemalagd att läggas till"
-#: ../include/svn_error_codes.h:1380
+#: ../include/svn_error_codes.h:1365
msgid "No external editor available"
msgstr "Ingen extern editor tillgänglig"
-#: ../include/svn_error_codes.h:1384
+#: ../include/svn_error_codes.h:1369
msgid "Something is wrong with the log message's contents"
msgstr "Fel i loggmeddelandets innehåll"
-#: ../include/svn_error_codes.h:1388
+#: ../include/svn_error_codes.h:1373
msgid "A log message was given where none was necessary"
msgstr "Ett loggmeddelande angavs utan att det var nödvändigt"
-#: ../include/svn_error_codes.h:1392
-#, fuzzy
+#: ../include/svn_error_codes.h:1377
msgid "No external merge tool available"
-msgstr "Ingen extern editor tillgänglig"
+msgstr "Ingen externt sammanslagningsverktyg tillgängligt"
-#: ../include/svn_error_codes.h:1396
-#, fuzzy
+#: ../include/svn_error_codes.h:1381
msgid "Failed processing one or more externals definitions"
-msgstr "bortse ifrån externals-definitioner"
+msgstr "Misslyckad behandling av en eller fler external-definitioner"
+
+#: ../include/svn_error_codes.h:1387
+msgid "Special code for wrapping server errors to report to client"
+msgstr "Specialkod för att rapportera serverfel till klienten"
+
+#: ../include/svn_error_codes.h:1391
+msgid "Unknown svn protocol command"
+msgstr "Okänt kommando i svn-protokollet"
+
+#: ../include/svn_error_codes.h:1395
+msgid "Network connection closed unexpectedly"
+msgstr "Nätverksanslutningen stängdes oväntat"
+
+#: ../include/svn_error_codes.h:1399
+msgid "Network read/write error"
+msgstr "Läs/skrivfel till nätverket"
+
+#: ../include/svn_error_codes.h:1411
+msgid "Client/server version mismatch"
+msgstr "Klient- och serverversion stämmer ej överens"
+
+#: ../include/svn_error_codes.h:1416
+msgid "Cannot negotiate authentication mechanism"
+msgstr "Kan inte förhandla om autentiseringsmekanism"
+
+#: ../include/svn_error_codes.h:1421
+msgid "Editor drive was aborted"
+msgstr "Editorkörning avbröts"
+
+#: ../include/svn_error_codes.h:1429
+msgid "Credential data unavailable"
+msgstr "Klientreferenser otillgängliga"
+
+#: ../include/svn_error_codes.h:1433
+msgid "No authentication provider available"
+msgstr "Ingen tillhandahållare av autentisering tillgänglig"
+
+#: ../include/svn_error_codes.h:1437
+msgid "All authentication providers exhausted"
+msgstr "Alla tillhandahållare av autentisering förbrukade"
+
+#: ../include/svn_error_codes.h:1441
+msgid "Credentials not saved"
+msgstr "Klientreferenser sparades inte"
+
+#: ../include/svn_error_codes.h:1446
+msgid "Authentication failed"
+msgstr "Autentisering misslyckades"
-#: ../include/svn_error_codes.h:1402
-#, fuzzy
+#: ../include/svn_error_codes.h:1452
+msgid "Read access denied for root of edit"
+msgstr "Läsning nekas till roten för editeringen"
+
+#: ../include/svn_error_codes.h:1457
+msgid "Item is not readable"
+msgstr "Objektet är inte läsbart"
+
+#: ../include/svn_error_codes.h:1462
+msgid "Item is partially readable"
+msgstr "Objektet är delvis läsbart"
+
+#: ../include/svn_error_codes.h:1466
+msgid "Invalid authz configuration"
+msgstr "Ogiltig behörighetskonfiguration"
+
+#: ../include/svn_error_codes.h:1471
+msgid "Item is not writable"
+msgstr "Objektet är inte skrivbart"
+
+#: ../include/svn_error_codes.h:1478
+msgid "Diff data source modified unexpectedly"
+msgstr "Datakälla för diff ändrades oväntat"
+
+#: ../include/svn_error_codes.h:1484
+msgid "Initialization of SSPI library failed"
+msgstr "Misslyckad initiering av SSPI-biblioteket"
+
+#: ../include/svn_error_codes.h:1488
+msgid "Server SSL certificate untrusted"
+msgstr "Ej betrott SSL-certifikat för server"
+
+#: ../include/svn_error_codes.h:1493
+msgid "Initialization of the GSSAPI context failed"
+msgstr "Misslyckad initiering av GSSAPI-kontext"
+
+#: ../include/svn_error_codes.h:1498
+msgid "While handling serf response:"
+msgstr "När svar från serf behandlades:"
+
+#: ../include/svn_error_codes.h:1504
msgid "Assertion failure"
-msgstr "Behörighetskontroll misslyckades"
+msgstr "Fel upptäckt vid invariantkontroll"
-#: ../libsvn_auth_gnome_keyring/gnome_keyring.c:392
-#: ../libsvn_auth_gnome_keyring/gnome_keyring.c:447
-#: ../libsvn_auth_gnome_keyring/gnome_keyring.c:554
-#: ../libsvn_auth_gnome_keyring/gnome_keyring.c:610
+#: ../include/svn_error_codes.h:1508
+msgid "No non-tracing links found in the error chain"
+msgstr "Inga icke-spårande länkar hittades i felkedjan"
+
+#: ../libsvn_auth_gnome_keyring/gnome_keyring.c:274
msgid "GNOME Keyring is locked and we are non-interactive"
-msgstr ""
+msgstr "GNOMEs nyckelkedja är låst och vi är inte interaktiva"
-#: ../libsvn_client/add.c:488 ../libsvn_wc/adm_ops.c:881
-#: ../libsvn_wc/workqueue.c:1658 ../libsvn_wc/workqueue.c:1740
+#: ../libsvn_client/add.c:606 ../libsvn_client/cmdline.c:356
+#: ../libsvn_subr/opt.c:930
+#, c-format
+msgid "'%s' ends in a reserved name"
+msgstr "\"%s\" slutar med ett reserverat namn"
+
+#: ../libsvn_client/add.c:875
+#, c-format
+msgid "'%s' prevents creating parent of '%s'"
+msgstr "\"%s\" hindrar att förälder till \"%s\" skapas"
+
+#: ../libsvn_client/add.c:914 ../libsvn_wc/adm_ops.c:732
+#, c-format
+msgid "'%s' is an existing item in conflict; please mark the conflict as resolved before adding a new item here"
+msgstr "\"%s\" är ett befintligt objekt i konflikt; markera konflikten som löst innan ett nytt objekt läggs till här"
+
+#: ../libsvn_client/add.c:921 ../libsvn_wc/adm_ops.c:687
+#: ../libsvn_wc/workqueue.c:905 ../libsvn_wc/workqueue.c:999
#, c-format
msgid "'%s' not found"
msgstr "\"%s\" finns inte"
-#: ../libsvn_client/add.c:493 ../libsvn_wc/adm_ops.c:572
-#: ../libsvn_wc/adm_ops.c:886
+#: ../libsvn_client/add.c:927 ../libsvn_wc/adm_ops.c:692
+#: ../libsvn_wc/delete.c:98
#, c-format
msgid "Unsupported node kind for path '%s'"
msgstr "Nodtypen för sökvägen \"%s\" stöds inte"
-#: ../libsvn_client/add.c:534 ../libsvn_client/cmdline.c:268
-#: ../libsvn_subr/opt.c:878
+#: ../libsvn_client/add.c:960 ../libsvn_client/changelist.c:65
+#: ../libsvn_client/changelist.c:104 ../libsvn_client/cleanup.c:55
+#: ../libsvn_client/export.c:1392 ../libsvn_client/import.c:815
+#: ../libsvn_client/patch.c:3009 ../libsvn_client/relocate.c:232
+#: ../libsvn_client/resolved.c:121 ../libsvn_client/revert.c:136
+#: ../libsvn_client/status.c:353 ../libsvn_client/switch.c:473
+#: ../libsvn_client/update.c:646 ../libsvn_client/upgrade.c:105
+#: ../svn/util.c:984
#, c-format
-msgid "'%s' ends in a reserved name"
-msgstr ""
-
-#: ../libsvn_client/add.c:580 ../libsvn_client/changelist.c:116
-#: ../libsvn_client/changelist.c:168 ../libsvn_client/cleanup.c:56
-#: ../libsvn_client/cleanup.c:134 ../libsvn_client/commit.c:701
-#: ../libsvn_client/export.c:952 ../libsvn_client/resolved.c:54
-#: ../libsvn_client/revert.c:135 ../libsvn_client/status.c:274
-#: ../svn/add-cmd.c:76 ../svn/changelist-cmd.c:84 ../svn/cleanup-cmd.c:69
-#: ../svn/export-cmd.c:91 ../svn/import-cmd.c:106 ../svn/resolve-cmd.c:106
-#: ../svn/resolved-cmd.c:76 ../svn/revert-cmd.c:77 ../svn/status-cmd.c:260
-#: ../svn/upgrade-cmd.c:72
-#, fuzzy, c-format
msgid "'%s' is not a local path"
-msgstr "\"%s\" är ingen fil"
+msgstr "\"%s\" är ingen lokal sökväg"
-#: ../libsvn_client/add.c:683 ../libsvn_ra/ra_loader.c:373
-#: ../libsvn_ra_serf/serf.c:366 ../libsvn_ra_serf/serf.c:482
-#, fuzzy, c-format
-msgid "Illegal repository URL '%s'"
-msgstr "Ogiltig svn-arkiv-URL \"%s\""
+#: ../libsvn_client/add.c:1001 ../libsvn_client/copy_foreign.c:489
+#: ../libsvn_wc/adm_ops.c:766 ../libsvn_wc/copy.c:715
+#, c-format
+msgid "'%s' is already under version control"
+msgstr "\"%s\" är redan versionshanterad"
-#: ../libsvn_client/blame.c:397
+#: ../libsvn_client/add.c:1134 ../libsvn_client/add.c:1161
#, c-format
-msgid "Cannot calculate blame information for binary file '%s'"
-msgstr "Kan inte beräkna blame-information för den binära fil \"%s\""
+msgid "There is no valid URI above '%s'"
+msgstr "Det finns ingen giltig URI ovanför \"%s\""
-#: ../libsvn_client/blame.c:627
+#: ../libsvn_client/blame.c:605
msgid "Start revision must precede end revision"
msgstr "Startrevisionen måste komma före slutrevisionen"
-#: ../libsvn_client/cat.c:74 ../libsvn_client/commit_util.c:1038
-#: ../libsvn_client/delete.c:64 ../libsvn_client/prop_commands.c:429
-#: ../libsvn_client/prop_commands.c:947 ../libsvn_client/prop_commands.c:1264
-#: ../libsvn_client/revisions.c:104 ../libsvn_wc/adm_ops.c:2008
-#: ../libsvn_wc/adm_ops.c:2042 ../libsvn_wc/copy.c:596
-#: ../libsvn_wc/entries.c:1405 ../libsvn_wc/entries.c:2450
-#: ../libsvn_wc/entries.c:2481 ../libsvn_wc/node.c:1247
-#: ../libsvn_wc/update_editor.c:4171
+#: ../libsvn_client/blame.c:633
+#, c-format
+msgid "Cannot calculate blame information for binary file '%s'"
+msgstr "Kan inte beräkna skuldinformation för den binära filen \"%s\""
+
+#: ../libsvn_client/cat.c:77 ../libsvn_client/commit_util.c:610
+#: ../libsvn_client/delete.c:81 ../libsvn_client/prop_commands.c:833
+#: ../libsvn_client/prop_commands.c:1388 ../libsvn_client/revisions.c:104
+#: ../libsvn_wc/adm_ops.c:1197 ../libsvn_wc/adm_ops.c:1247
+#: ../libsvn_wc/copy.c:563 ../libsvn_wc/copy.c:624 ../libsvn_wc/entries.c:1301
+#: ../libsvn_wc/entries.c:2681 ../libsvn_wc/entries.c:2712
+#: ../svn/notify.c:1095
#, c-format
msgid "'%s' is not under version control"
msgstr "\"%s\" är inte versionshanterad"
-#: ../libsvn_client/cat.c:79
+#: ../libsvn_client/cat.c:82
#, c-format
msgid "'%s' refers to a directory"
msgstr "\"%s\" pekar på en katalog"
-#: ../libsvn_client/cat.c:89
+#: ../libsvn_client/cat.c:92
#, c-format
-msgid "'%s' has no base revision until it is committed"
-msgstr ""
+msgid "'%s' has no pristine version until it is committed"
+msgstr "\"%s\" har ingen orörd revision förrän den arkiveras"
-#: ../libsvn_client/cat.c:153 ../libsvn_client/export.c:234
+#: ../libsvn_client/cat.c:147 ../libsvn_client/export.c:388
msgid "(local)"
msgstr "(lokal)"
-#: ../libsvn_client/cat.c:236
+#: ../libsvn_client/cat.c:247
#, c-format
msgid "URL '%s' refers to a directory"
msgstr "URL:en \"%s\" pekar på en katalog"
-#: ../libsvn_client/checkout.c:164 ../libsvn_client/export.c:1116
+#: ../libsvn_client/changelist.c:57
+msgid "Target changelist name must not be empty"
+msgstr "Ändringslistan får inte ha tomt namn"
+
+#: ../libsvn_client/checkout.c:109 ../libsvn_client/export.c:1445
#, c-format
msgid "URL '%s' doesn't exist"
msgstr "URL:en \"%s\" finns inte"
-#: ../libsvn_client/checkout.c:168
+#: ../libsvn_client/checkout.c:113
#, c-format
msgid "URL '%s' refers to a file, not a directory"
msgstr "URL:en \"%s\" pekar på en fil och ingen katalog"
-#: ../libsvn_client/checkout.c:204
-#, fuzzy, c-format
-msgid "'%s' is already a working copy for a different URL; use 'svn update' to update it"
+#: ../libsvn_client/checkout.c:147
+#, c-format
+msgid "'%s' is already a working copy for a different URL"
msgstr "\"%s\" är redan en arbetskopia för en annan URL"
-#: ../libsvn_client/checkout.c:212
+#: ../libsvn_client/checkout.c:155
#, c-format
msgid "'%s' already exists and is not a directory"
msgstr "\"%s\" finns redan och är ingen katalog"
-#: ../libsvn_client/cmdline.c:78
-#, fuzzy, c-format
-msgid "Improper relative URL '%s'"
-msgstr "Egenskaper på \"%s\":\n"
-
-#: ../libsvn_client/cmdline.c:149
+#: ../libsvn_client/cmdline.c:104
#, c-format
msgid "All non-relative targets must have the same root URL"
-msgstr ""
-
-#: ../libsvn_client/commit.c:433
-#, c-format
-msgid "Unknown or unversionable type for '%s'"
-msgstr "\"%s\" är av en typ som är okänd eller ej kan versionshanteras"
+msgstr "Alla icke-relativa mål måste ha samma rot-URL"
-#: ../libsvn_client/commit.c:538
-msgid "New entry name required when importing a file"
-msgstr "Nytt postnamn krävs vid import av en fil"
+#: ../libsvn_client/cmdline.c:312
+msgid "Resolving '^/': no repository root found in the target arguments or in the current directory"
+msgstr "Uppslagning av \"^/\": ingen arkivrot hittades i målargumenten eller i arbetskatalogen"
-#: ../libsvn_client/commit.c:573 ../libsvn_wc/adm_ops.c:567
-#: ../libsvn_wc/lock.c:140 ../libsvn_wc/wc_db_pdh.c:64
-#, c-format
-msgid "'%s' does not exist"
-msgstr "\"%s\" finns inte"
-
-#: ../libsvn_client/commit.c:655 ../libsvn_client/copy.c:471
-#: ../libsvn_client/merge.c:8975 ../libsvn_client/merge.c:10231
-#: ../libsvn_client/merge.c:10506 ../svnlook/main.c:1407
-#, c-format
-msgid "Path '%s' does not exist"
-msgstr "Sökvägen \"%s\" finns inte"
-
-#: ../libsvn_client/commit.c:795 ../libsvn_client/copy.c:482
-#: ../libsvn_client/copy.c:1021 ../libsvn_client/copy.c:1245
-#: ../libsvn_client/copy.c:1860
-#, c-format
-msgid "Path '%s' already exists"
-msgstr "Sökvägen \"%s\" finns redan"
-
-#: ../libsvn_client/commit.c:810
-#, c-format
-msgid "'%s' is a reserved name and cannot be imported"
-msgstr "\"%s\" är ett reserverat namn och kan inte importeras"
-
-#: ../libsvn_client/commit.c:848 ../libsvn_client/copy.c:1402
+#: ../libsvn_client/commit.c:155 ../libsvn_client/copy.c:1510
msgid "Commit failed (details follow):"
msgstr "Arkiveringen misslyckades (mer information följer):"
-#: ../libsvn_client/commit.c:856
+#: ../libsvn_client/commit.c:163
msgid "Commit succeeded, but other errors follow:"
msgstr "Arkiveringen lyckades, men andra fel följer:"
-#: ../libsvn_client/commit.c:863
+#: ../libsvn_client/commit.c:170
msgid "Error unlocking locked dirs (details follow):"
msgstr "Fel vid upplåsning av låsta kataloger (mer information följer):"
-#: ../libsvn_client/commit.c:874
+#: ../libsvn_client/commit.c:181
msgid "Error bumping revisions post-commit (details follow):"
msgstr "Fel vid höjning av revisionsnummer efter arkivering (mer information följer):"
-#: ../libsvn_client/commit.c:968
-#, fuzzy
-msgid "Are all targets part of the same working copy?"
-msgstr "Ingår samtliga mål i samma arbetskopia?"
-
-#: ../libsvn_client/commit.c:1007
-#, fuzzy
-msgid "Cannot non-recursively commit a directory deletion of a directory with child nodes"
-msgstr "Kan inte arkivera en radering av en katalog utan att det görs rekursivt"
+#: ../libsvn_client/commit.c:314
+#, c-format
+msgid "Cannot delete the directory '%s' in a non-recursive commit because it has children"
+msgstr "Kan inte radera katalogen \"%s\" icke-rekursivt eftersom den inte är tom"
-#: ../libsvn_client/commit.c:1057 ../svn/commit-cmd.c:71
+#: ../libsvn_client/commit.c:613
#, c-format
msgid "'%s' is a URL, but URLs cannot be commit targets"
msgstr "\"%s\" är en URL, men URL:er kan inte vara mål vid arkivering"
-#: ../libsvn_client/commit_util.c:63 ../libsvn_repos/commit.c:132
-#, fuzzy, c-format
+#: ../libsvn_client/commit.c:735
+msgid ""
+"Commit can only commit to a single repository at a time.\n"
+"Are all targets part of the same working copy?"
+msgstr ""
+"Arkivering kan bara ske till ett enda arkiv åt gången.\n"
+"Ingår samtliga mål i samma arbetskopia?"
+
+#: ../libsvn_client/commit.c:851
+#, c-format
+msgid "Cannot commit '%s' because it was moved from '%s' which is not part of the commit; both sides of the move must be committed together"
+msgstr "Kan inte arkivera \"%s\" eftersom den flyttades från \"%s\" som inte ingår i arkiveringen; bägge sidor av flytten måste arkiveras tillsammans"
+
+#: ../libsvn_client/commit.c:882
+#, c-format
+msgid "Cannot commit '%s' because it was moved to '%s' which is not part of the commit; both sides of the move must be committed together"
+msgstr "Kan inte arkivera \"%s\" eftersom den flyttades till \"%s\" som inte ingår i arkiveringen; bägge sidor av flytten måste arkiveras tillsammans"
+
+#: ../libsvn_client/commit_util.c:94 ../libsvn_repos/commit.c:167
+#, c-format
msgid "Directory '%s' is out of date"
-msgstr "Katalogen \"%s\" saknar URL"
+msgstr "Katalogen \"%s\" är inaktuell"
-#: ../libsvn_client/commit_util.c:64 ../libsvn_repos/commit.c:134
-#, fuzzy, c-format
+#: ../libsvn_client/commit_util.c:95 ../libsvn_repos/commit.c:169
+#, c-format
msgid "File '%s' is out of date"
-msgstr "Objektet är inaktuellt"
+msgstr "Objektet \"%s\" är inaktuellt"
-#: ../libsvn_client/commit_util.c:288 ../libsvn_client/commit_util.c:479
-#: ../libsvn_client/commit_util.c:1032
+#: ../libsvn_client/commit_util.c:130
#, c-format
-msgid "Aborting commit: '%s' remains in conflict"
-msgstr "Arkiveringen avbryts: \"%s\" är fortfarande i konflikt"
+msgid "Directory '%s' is locked in another working copy"
+msgstr "Katalogen \"%s\" är låst i en annan arbetskopia"
-#: ../libsvn_client/commit_util.c:330
-#, fuzzy, c-format
-msgid "Aborting commit: '%s' remains in tree-conflict"
-msgstr "Arkiveringen avbryts: \"%s\" är fortfarande i konflikt"
+#: ../libsvn_client/commit_util.c:131
+#, c-format
+msgid "File '%s' is locked in another working copy"
+msgstr "Filen \"%s\" är låst i en annan arbetskopia"
-#: ../libsvn_client/commit_util.c:424 ../libsvn_client/commit_util.c:440
+#: ../libsvn_client/commit_util.c:166
#, c-format
-msgid "Unknown entry kind for '%s'"
-msgstr "Okänd posttyp för \"%s\""
+msgid "Changing directory '%s' is forbidden by the server"
+msgstr "Servern tillåter inte att katalogen \"%s\" ändras"
-#: ../libsvn_client/commit_util.c:457
+#: ../libsvn_client/commit_util.c:167
#, c-format
-msgid "Entry '%s' has unexpectedly changed special status"
-msgstr "På posten \"%s\" har specialstatus ändrats oväntat"
+msgid "Changing file '%s' is forbidden by the server"
+msgstr "Servern tillåter inte att filen \"%s\" ändras"
-#: ../libsvn_client/commit_util.c:654
-#, fuzzy, c-format
-msgid "'%s' is scheduled for addition, but is missing"
-msgstr "\"%s\" är schemalagd att läggas till i en förälder som inte är versionshanterad"
+#: ../libsvn_client/commit_util.c:315
+#, c-format
+msgid "Aborting commit: '%s' remains in tree-conflict"
+msgstr "Arkiveringen avbryts: \"%s\" är fortfarande i trädkonflikt"
-#: ../libsvn_client/commit_util.c:935
+#: ../libsvn_client/commit_util.c:666
#, c-format
-msgid "'%s' is not under version control and is not part of the commit, yet its child '%s' is part of the commit"
-msgstr "\"%s\" är inte versionshanterad och är ej heller delaktig i arkiveringen, men trots det är dess barn \"%s\" en del av arkiveringen"
+msgid "Aborting commit: '%s' remains in conflict"
+msgstr "Arkiveringen avbryts: \"%s\" är fortfarande i konflikt"
+
+#: ../libsvn_client/commit_util.c:685
+#, c-format
+msgid "Node '%s' has unexpectedly changed kind"
+msgstr "Noden \"%s\" bytte oväntat typ"
-#: ../libsvn_client/commit_util.c:1052 ../libsvn_client/url.c:198
+#: ../libsvn_client/commit_util.c:726
#, c-format
-msgid "Entry for '%s' has no URL"
-msgstr "Posten för \"%s\" saknar URL"
+msgid "'%s' is scheduled for addition, but is missing"
+msgstr "\"%s\" är schemalagd att läggas till men finns inte"
-#: ../libsvn_client/commit_util.c:1069
+#: ../libsvn_client/commit_util.c:1212
#, c-format
-msgid "'%s' is scheduled for addition within unversioned parent"
-msgstr "\"%s\" är schemalagd att läggas till i en förälder som inte är versionshanterad"
+msgid "'%s' is not known to exist in the repository and is not part of the commit, yet its child '%s' is part of the commit"
+msgstr "\"%s\" är inte versionshanterad och är ej heller delaktig i arkiveringen, men trots det är dess barn \"%s\" en del av arkiveringen"
-#: ../libsvn_client/commit_util.c:1210
+#: ../libsvn_client/commit_util.c:1351
#, c-format
msgid "Cannot commit both '%s' and '%s' as they refer to the same URL"
-msgstr "Kan inte arkivera både \"%s\" och \"%s\" eftersom de hänvisar till samma URL"
+msgstr "Kan inte arkivera både \"%s\" och \"%s\" eftersom de syftar på samma URL"
-#: ../libsvn_client/commit_util.c:1367
+#: ../libsvn_client/commit_util.c:1502
#, c-format
msgid "Commit item '%s' has copy flag but no copyfrom URL"
msgstr "Arkiveringsobjektet \"%s\" har kopieringsflaggan satt, men saknar \"copyfrom\"-URL"
-#: ../libsvn_client/commit_util.c:1372
+#: ../libsvn_client/commit_util.c:1507
#, c-format
msgid "Commit item '%s' has copy flag but an invalid revision"
msgstr "Arkiveringsobjektet \"%s\" har kopieringsflagga men ogiltig revision"
-#: ../libsvn_client/commit_util.c:2080
+#: ../libsvn_client/commit_util.c:1969
msgid "Standard properties can't be set explicitly as revision properties"
-msgstr ""
+msgstr "Standardegenskaper kan inte sättas direkt som revisionsegenskaper"
-#: ../libsvn_client/copy.c:500 ../libsvn_client/copy.c:1876
+#: ../libsvn_client/copy.c:427
#, c-format
-msgid "Path '%s' is not a directory"
-msgstr "Sökvägen \"%s\" är ingen katalog"
-
-#: ../libsvn_client/copy.c:669 ../libsvn_client/copy.c:710
-#, fuzzy, c-format
-msgid "Path '%s' already exists, but is not a directory"
-msgstr "\"%s\" finns redan och är ingen katalog"
+msgid "Path '%s' exists, but is excluded"
+msgstr "Sökvägen \"%s\" finns men är utesluten"
-#: ../libsvn_client/copy.c:775
-#, fuzzy
-msgid "Source and destination URLs appear not to all point to the same repository."
-msgstr "Källan och destinationen verkar inte vara i samma arkiv (källa: \"%s\"; destination: \"%s\")"
+#: ../libsvn_client/copy.c:433 ../libsvn_client/copy.c:1050
+#: ../libsvn_client/copy.c:1309 ../libsvn_client/copy.c:1884
+#: ../libsvn_client/import.c:862
+#, c-format
+msgid "Path '%s' already exists"
+msgstr "Sökvägen \"%s\" finns redan"
-#: ../libsvn_client/copy.c:985
+#: ../libsvn_client/copy.c:488
#, c-format
-msgid "Cannot move URL '%s' into itself"
-msgstr "Kan inte flytta URL:en \"%s\" till sig själv"
+msgid "Path '%s' already exists as unversioned node"
+msgstr "Sökvägen \"%s\" finns redan men är ej versionshanterad"
-#: ../libsvn_client/copy.c:1007 ../libsvn_client/prop_commands.c:229
+#: ../libsvn_client/copy.c:510 ../libsvn_client/copy.c:520
+#: ../libsvn_client/copy.c:1900
#, c-format
-msgid "Path '%s' does not exist in revision %ld"
-msgstr "Sökvägen \"%s\" finns inte i revision %ld"
+msgid "Path '%s' is not a directory"
+msgstr "Sökvägen \"%s\" är ingen katalog"
-#: ../libsvn_client/copy.c:1536
+#: ../libsvn_client/copy.c:559 ../libsvn_client/merge.c:10118
+#: ../svnlook/svnlook.c:1425
#, c-format
-msgid "Source URL '%s' is from foreign repository; leaving it as a disjoint WC"
-msgstr "Käll-RUL:en \"%s\" är från ett annat arkiv, låter den vara en separat arbetskopia"
+msgid "Path '%s' does not exist"
+msgstr "Sökvägen \"%s\" finns inte"
-#: ../libsvn_client/copy.c:1638 ../libsvn_client/copy.c:1650
-#: ../libsvn_wc/adm_ops.c:941 ../libsvn_wc/copy.c:691
+#: ../libsvn_client/copy.c:729 ../libsvn_client/copy.c:770
#, c-format
-msgid "'%s' is already under version control"
-msgstr "\"%s\" är redan versionshanterad"
+msgid "Path '%s' already exists, but is not a directory"
+msgstr "\"%s\" finns redan men är ingen katalog"
-#: ../libsvn_client/copy.c:1671
+#: ../libsvn_client/copy.c:831
+msgid "Source and destination URLs appear not to point to the same repository."
+msgstr "Käll- och destinations-URL:erna verkar inte syfta på samma arkiv."
+
+#: ../libsvn_client/copy.c:1040 ../libsvn_client/prop_commands.c:167
#, c-format
-msgid "Entry for '%s' exists (though the working file is missing)"
-msgstr "Posten för \"%s\" finns (fast arbetsfilen saknas)"
+msgid "Path '%s' does not exist in revision %ld"
+msgstr "Sökvägen \"%s\" finns inte i revision %ld"
-#: ../libsvn_client/copy.c:1844
+#: ../libsvn_client/copy.c:1868
#, c-format
msgid "Path '%s' not found in revision %ld"
msgstr "Sökvägen \"%s\" finns inte i revision %ld"
-#: ../libsvn_client/copy.c:1849
+#: ../libsvn_client/copy.c:1873
#, c-format
msgid "Path '%s' not found in head revision"
msgstr "Sökvägen \"%s\" finns inte i den senaste revisionen"
-#: ../libsvn_client/copy.c:1970
-#, fuzzy
+#: ../libsvn_client/copy.c:2001
msgid "Cannot mix repository and working copy sources"
-msgstr "Sökväg är inte en fil i en arbetskopia"
+msgstr "Kan inte blanda källor från arkiv och arbetskopia"
-#: ../libsvn_client/copy.c:2022
+#: ../libsvn_client/copy.c:2053
#, c-format
msgid "Cannot copy path '%s' into its own child '%s'"
msgstr "Kan inte kopiera sökvägen \"%s\" till dess eget barn \"%s\""
-#: ../libsvn_client/copy.c:2054
+#: ../libsvn_client/copy.c:2089
#, c-format
-msgid "Cannot move the file external at '%s'; please propedit the svn:externals description that created it"
-msgstr ""
+msgid "Cannot move the external at '%s'; please edit the svn:externals property on '%s'."
+msgstr "Kan inte flytta externa objektet \"%s\"; var god redigera egenskapen svn:externals på \"%s\"."
-#: ../libsvn_client/copy.c:2069
+#: ../libsvn_client/copy.c:2104
msgid "Moves between the working copy and the repository are not supported"
-msgstr ""
+msgstr "Flytt mellan arbetskopian och arkivet stöds ej"
+
+#: ../libsvn_client/copy.c:2119
+#, c-format
+msgid "Cannot move URL '%s' into itself"
+msgstr "Kan inte flytta URL:en \"%s\" till sig själv"
-#: ../libsvn_client/copy.c:2083
+#: ../libsvn_client/copy.c:2120
#, c-format
msgid "Cannot move path '%s' into itself"
msgstr "Kan inte flytta sökvägen \"%s\" till sig själv"
-#: ../libsvn_client/copy.c:2152
-#, fuzzy, c-format
+#: ../libsvn_client/copy.c:2187
+#, c-format
msgid "'%s' does not have a URL associated with it"
-msgstr "\"%s\" verkar inte ha någon URL associerad till sig"
+msgstr "\"%s\" verkar inte ha någon URL kopplad till sig"
+
+#: ../libsvn_client/copy_foreign.c:131 ../libsvn_client/copy_foreign.c:282
+#: ../libsvn_client/externals.c:904 ../libsvn_client/externals.c:1103
+#: ../libsvn_wc/update_editor.c:1124
+#, c-format
+msgid "Path '%s' is not in the working copy"
+msgstr "Sökvägen \"%s\" finns inte i arbetskopian"
-#: ../libsvn_client/delete.c:59
+#: ../libsvn_client/copy_foreign.c:372 ../libsvn_client/export.c:812
+#: ../libsvn_client/repos_diff.c:998 ../libsvn_fs_fs/dag.c:1051
+#: ../libsvn_ra_svn/client.c:1208 ../libsvn_wc/diff_editor.c:1981
+#: ../libsvn_wc/diff_editor.c:2060 ../libsvn_wc/externals.c:651
+#: ../libsvn_wc/update_editor.c:4242
+#, c-format
+msgid "Checksum mismatch for '%s'"
+msgstr "Felaktig kontrollsumma för \"%s\""
+
+#: ../libsvn_client/copy_foreign.c:479
+#, c-format
+msgid "'%s' is not a valid location inside a repository"
+msgstr "\"%s\" är inte en giltig plats inuti arkivet"
+
+#: ../libsvn_client/copy_foreign.c:510
+#, c-format
+msgid "Can't add '%s', because no parent directory is found"
+msgstr "Kan inte lägga till \"%s\" eftersom ingen föräldrakatalog kan hittas"
+
+#: ../libsvn_client/delete.c:76
#, c-format
msgid "'%s' is in the way of the resource actually under version control"
msgstr "\"%s\" är i vägen för den versionshanterade resursen"
-#: ../libsvn_client/delete.c:74
-#, fuzzy, c-format
+#: ../libsvn_client/delete.c:95
+#, c-format
msgid "'%s' has local modifications -- commit or revert them first"
-msgstr "\"%s\" har lokala ändringar"
+msgstr "\"%s\" har lokala ändringar; arkivera eller återställ dem först"
-#: ../libsvn_client/delete.c:104
+#: ../libsvn_client/delete.c:127
#, c-format
-msgid "Cannot remove the file external at '%s'; please propedit or propdel the svn:externals description that created it"
-msgstr ""
-
-#: ../libsvn_client/delete.c:339 ../libsvn_client/locking_commands.c:200
-#: ../svn/delete-cmd.c:68 ../svn/diff-cmd.c:288 ../svn/lock-cmd.c:116
-#, fuzzy, c-format
-msgid "Cannot mix repository and working copy targets"
-msgstr "Sökväg är inte en fil i en arbetskopia"
+msgid "Cannot remove the external at '%s'; please edit or delete the svn:externals property on '%s'"
+msgstr "Kan inte ta bort externa objektet \"%s\"; var god redigera eller ta bort egenskapen svn:externals på \"%s\""
-#: ../libsvn_client/deprecated.c:714 ../svn/move-cmd.c:65
+#: ../libsvn_client/deprecated.c:862 ../svn/move-cmd.c:65
msgid "Cannot specify revisions (except HEAD) with move operations"
msgstr "Revisioner (förutom HEAD) kan ej anges vid flyttoperationer"
-#: ../libsvn_client/deprecated.c:1331
+#: ../libsvn_client/deprecated.c:1624
msgid "No commits in repository"
-msgstr "Intenting har arkiverats i arkivet"
+msgstr "Ingenting har arkiverats i arkivet"
-#: ../libsvn_client/deprecated.c:2094 ../libsvn_wc/deprecated.c:3370
-#, fuzzy
+#: ../libsvn_client/deprecated.c:2930 ../libsvn_wc/deprecated.c:3953
msgid "Non-recursive relocation not supported"
-msgstr "Omlokalisering mellan arkiv otillåten"
-
-#: ../libsvn_client/diff.c:136
-#, fuzzy, c-format
-msgid " Reverse-merged %s:r%s%s"
-msgstr "Återställde \"%s\"\n"
-
-#: ../libsvn_client/diff.c:151
-#, c-format
-msgid " Merged %s:r%s%s"
-msgstr ""
+msgstr "Icke-rekursiv omlokalisering otillåten"
-#: ../libsvn_client/diff.c:161 ../libsvn_diff/diff_file.c:1226
-#: ../libsvn_diff/diff_file.c:1242
+#. Utilities
+#: ../libsvn_client/diff.c:64
#, c-format
msgid "Path '%s' must be an immediate child of the directory '%s'"
-msgstr ""
+msgstr "Sökvägen \"%s\" måste stå omedelbart under katalogen \"%s\""
-#: ../libsvn_client/diff.c:359
+#: ../libsvn_client/diff.c:258
#, c-format
msgid "%s\t(revision %ld)"
msgstr "%s\t(revision %ld)"
-#: ../libsvn_client/diff.c:361
+#: ../libsvn_client/diff.c:260
#, c-format
msgid "%s\t(working copy)"
msgstr "%s\t(arbetskopia)"
-#: ../libsvn_client/diff.c:637
+#: ../libsvn_client/diff.c:512 ../svnlook/svnlook.c:795
#, c-format
msgid "%sProperty changes on: %s%s"
msgstr "%sEgenskapsändringar för: %s%s"
-#: ../libsvn_client/diff.c:921
+#: ../libsvn_client/diff.c:760
#, c-format
msgid "Cannot display: file marked as a binary type.%s"
msgstr "Kan inte visa: filen markerad som binär.%s"
-#: ../libsvn_client/diff.c:1326
-#, fuzzy, c-format
-msgid "Path '%s' has no URL"
-msgstr "\"%s\" saknar URL"
-
-#: ../libsvn_client/diff.c:1395 ../libsvn_client/merge.c:6304
-#: ../libsvn_client/merge.c:8984
+#: ../libsvn_client/diff.c:1265 ../libsvn_client/merge.c:7178
+#: ../libsvn_client/merge.c:10525
msgid "Not all required revisions are specified"
msgstr "Alla revisioner som krävs angavs inte"
-#: ../libsvn_client/diff.c:1410
-msgid "At least one revision must be non-local for a pegged diff"
-msgstr "Åtminstone en revision måste vara icke-lokal för fixerad diff"
+#: ../libsvn_client/diff.c:1279
+msgid "At least one revision must be something other than BASE or WORKING when diffing a URL"
+msgstr "Åtminstone en revision måste vara något annat än BASE eller WORKING för diff av en URL"
-#: ../libsvn_client/diff.c:1518 ../libsvn_client/diff.c:1530
+#: ../libsvn_client/diff.c:1316
#, c-format
-msgid "'%s' was not found in the repository at revision %ld"
+msgid "Diff target '%s' was not found in the repository at revision '%ld'"
msgstr "\"%s\" fanns inte i revision %ld i arkivet"
-#: ../libsvn_client/diff.c:1588
-#, fuzzy
-msgid "Sorry, svn_client_diff5 was called in a way that is not yet supported"
-msgstr "Tyvärr anropades svn_client_diff3 på ett sätt som inte stöds ännu"
+#: ../libsvn_client/diff.c:1321
+#, c-format
+msgid "Diff target '%s' was not found in the repository at revision '%ld' or '%ld'"
+msgstr "\"%s\" fanns inte i revision %ld eller %ld i arkivet"
+
+#: ../libsvn_client/diff.c:1496
+#, c-format
+msgid "Diff target '%s' was not found in the repository at revisions '%ld' and '%ld'"
+msgstr "\"%s\" fanns inte i revision %ld och %ld i arkivet"
+
+#: ../libsvn_client/diff.c:1501
+#, c-format
+msgid "Diff targets '%s' and '%s' were not found in the repository at revisions '%ld' and '%ld'"
+msgstr "\"%s\" och \"%s\" fanns inte i revision %ld och %ld i arkivet"
+
+#: ../libsvn_client/diff.c:1575
+msgid "Sorry, svn_client_diff6 was called in a way that is not yet supported"
+msgstr "Tyvärr anropades svn_client_diff6 på ett sätt som inte stöds ännu"
-#: ../libsvn_client/diff.c:1630
+#: ../libsvn_client/diff.c:1616
msgid "Only diffs between a path's text-base and its working files are supported at this time"
msgstr "Endast skillnader mellan en arbetskopias textbas och arbetsfilerna stöds för närvarande"
-#: ../libsvn_client/diff.c:1816 ../libsvn_client/switch.c:132
+#: ../libsvn_client/diff.c:2221
+msgid "Summarized diffs are only supported between a path's text-base and its working files at this time"
+msgstr "Sammanfattade skillnader stöd för närvarande endast mellan en sökvägs textbas och dess arbetskopia"
+
+#: ../libsvn_client/diff.c:2582 ../libsvn_client/diff.c:2648
+msgid "Cannot ignore properties and show only properties at the same time"
+msgstr "Kan inte samtidigt bortse från egenskaper och bara visa egenskaper"
+
+#: ../libsvn_client/diff_local.c:609
#, c-format
-msgid "Directory '%s' has no URL"
-msgstr "Katalogen \"%s\" saknar URL"
+msgid "'%s' is not the same node kind as '%s'"
+msgstr "\"%s\" är inte samma typ av nod som \"%s\""
-#: ../libsvn_client/diff.c:2064
-msgid "Summarizing diff can only compare repository to repository"
-msgstr "Summerande diff kan endast jämföra arkiv med arkiv"
+#: ../libsvn_client/diff_local.c:632 ../libsvn_wc/props.c:1568
+#, c-format
+msgid "'%s' is not a file or directory"
+msgstr "\"%s\" är ingen fil eller katalog"
-#: ../libsvn_client/export.c:92
+#: ../libsvn_client/export.c:102
#, c-format
msgid "'%s' is not a valid EOL value"
msgstr "\"%s\" är inte ett giltigt radslutsvärde"
-#: ../libsvn_client/export.c:377
+#: ../libsvn_client/export.c:240
msgid "Destination directory exists, and will not be overwritten unless forced"
msgstr "Destinationskatalogen finns och kommer inte att skrivas över om det inte framtvingas"
-#: ../libsvn_client/export.c:532 ../libsvn_client/export.c:678
+#: ../libsvn_client/export.c:265 ../libsvn_client/export.c:1525
+#: ../libsvn_wc/adm_crawler.c:1204 ../libsvn_wc/conflicts.c:1293
+#: ../libsvn_wc/copy.c:586 ../libsvn_wc/crop.c:236 ../libsvn_wc/crop.c:327
+#: ../libsvn_wc/info.c:403 ../libsvn_wc/node.c:704 ../libsvn_wc/props.c:227
+#: ../libsvn_wc/status.c:2781 ../libsvn_wc/wc_db.c:2509
+#: ../libsvn_wc/wc_db.c:2703 ../libsvn_wc/wc_db.c:2727
+#: ../libsvn_wc/wc_db.c:2885 ../libsvn_wc/wc_db.c:3876
+#: ../libsvn_wc/wc_db.c:5895 ../libsvn_wc/wc_db.c:6215
+#: ../libsvn_wc/wc_db.c:6376 ../libsvn_wc/wc_db.c:6530
+#: ../libsvn_wc/wc_db.c:8355 ../libsvn_wc/wc_db.c:8812
+#: ../libsvn_wc/wc_db.c:9441 ../libsvn_wc/wc_db.c:9588
+#: ../libsvn_wc/wc_db.c:9728 ../libsvn_wc/wc_db.c:10078
+#: ../libsvn_wc/wc_db.c:11565 ../libsvn_wc/wc_db.c:11641
+#: ../libsvn_wc/wc_db.c:13175 ../libsvn_wc/wc_db.c:13235
+#: ../libsvn_wc/wc_db.c:13373 ../libsvn_wc/wc_db.c:13531
+#: ../libsvn_wc/wc_db.c:13968 ../libsvn_wc/wc_db.c:14749
+#, c-format
+msgid "The node '%s' was not found."
+msgstr "Noden \"%s\" kunde inte hittas."
+
+#: ../libsvn_client/export.c:283 ../libsvn_client/export.c:1182
+#: ../libsvn_client/export.c:1239
+#, c-format
+msgid "Destination file '%s' exists, and will not be overwritten unless forced"
+msgstr "Destinationsfilen \"%s\" finns och kommer inte att skrivas över om det inte framtvingas"
+
+#: ../libsvn_client/export.c:289 ../libsvn_client/export.c:1187
+#: ../libsvn_client/export.c:1244
+#, c-format
+msgid "Destination '%s' exists. Cannot overwrite directory with non-directory"
+msgstr "Destinationen \"%s\" finns redan. En katalog kan inte skrivas över med något som inte är en katalog"
+
+#: ../libsvn_client/export.c:471 ../libsvn_client/export.c:620
+#: ../libsvn_client/export.c:1076
#, c-format
msgid "'%s' exists and is not a directory"
msgstr "\"%s\" finns och är ingen katalog"
-#: ../libsvn_client/export.c:536 ../libsvn_client/export.c:682
+#: ../libsvn_client/export.c:475 ../libsvn_client/export.c:624
+#: ../libsvn_client/export.c:1080
#, c-format
msgid "'%s' already exists"
msgstr "\"%s\" finns redan"
-#: ../libsvn_client/export.c:866 ../libsvn_wc/update_editor.c:4161
-#, fuzzy, c-format
-msgid ""
-"Checksum mismatch for '%s':\n"
-" expected: %s\n"
-" actual: %s\n"
-msgstr ""
-"Felaktig kontrollsumma på representationen \"%s\":\n"
-" väntade: %s\n"
-" fick: %s\n"
-
-#: ../libsvn_client/externals.c:364
+#: ../libsvn_client/externals.c:406
#, c-format
-msgid "Cannot insert a file external from '%s' into a working copy from a different repository rooted at '%s'"
-msgstr ""
+msgid "Cannot insert a file external defined on '%s' into the working copy '%s'."
+msgstr "Kan inte skapa en extern fil definierad på \"%s\" i arbetskopian \"%s\""
-#: ../libsvn_client/externals.c:401
+#: ../libsvn_client/externals.c:431
#, c-format
msgid "The file external from '%s' cannot overwrite the existing versioned item at '%s'"
-msgstr ""
+msgstr "Den externa filen från \"%s\" kan inte ersätta det befintliga versionshanterade objektet \"%s\""
-#: ../libsvn_client/externals.c:427
+#: ../libsvn_client/externals.c:444
#, c-format
-msgid "The file external from '%s' cannot be written to '%s' while '%s' remains in conflict"
-msgstr ""
-
-#: ../libsvn_client/externals.c:536
-#, fuzzy, c-format
-msgid "URL '%s' does not begin with a scheme"
-msgstr "URL:en \"%s\" finns inte"
-
-#: ../libsvn_client/externals.c:603
-#, fuzzy, c-format
-msgid "Illegal parent directory URL '%s'"
-msgstr "Ogiltig svn-arkiv-URL \"%s\""
-
-#: ../libsvn_client/externals.c:639
-#, fuzzy, c-format
-msgid "Illegal repository root URL '%s'"
-msgstr "Ogiltig svn-arkiv-URL \"%s\""
+msgid "The file external '%s' can not be created because the node exists."
+msgstr "Den externa filen \"%s\" kan inte skapas för noden finns redan."
-#: ../libsvn_client/externals.c:686
+#: ../libsvn_client/externals.c:703
#, c-format
-msgid "The external relative URL '%s' cannot have backpaths, i.e. '..'"
-msgstr ""
-
-#: ../libsvn_client/externals.c:714
-#, fuzzy, c-format
-msgid "Unrecognized format for the relative external URL '%s'"
-msgstr "Okänd revisionstyp begärd för \"%s\""
-
-#: ../libsvn_client/externals.c:806
-#, fuzzy, c-format
msgid "URL '%s' at revision %ld doesn't exist"
-msgstr "URL:en \"%s\" finns inte"
+msgstr "URL:en \"%s\" finns inte vid revision %ld"
-#: ../libsvn_client/externals.c:812
-#, fuzzy, c-format
+#: ../libsvn_client/externals.c:708
+#, c-format
msgid "URL '%s' at revision %ld is not a file or a directory"
-msgstr "\"%s\" är ingen fil eller katalog"
+msgstr "URL:en \"%s\" vid revision %ld är ingen fil eller katalog"
+
+#: ../libsvn_client/externals.c:786
+#, c-format
+msgid "Unsupported external: URL of file external '%s' is not in repository '%s'"
+msgstr "URL:en för den externa filen \"%s\" är inte i arkivet \"%s\""
-#: ../libsvn_client/externals.c:1111
+#: ../libsvn_client/externals.c:979
#, c-format
msgid "Traversal of '%s' found no ambient depth"
-msgstr ""
+msgstr "Inget omgivande djup hittades i en genomgång av \"%s\""
-#: ../libsvn_client/externals.c:1262
-#, fuzzy, c-format
-msgid "'%s' is not a URL"
-msgstr "Sökvägen \"%s\" är inte en URL"
+#: ../libsvn_client/import.c:159
+#, c-format
+msgid "%s property on '%s' contains unrecognized EOL-style '%s'"
+msgstr "Egenskapen %s på \"%s\" innehåller det okända radslutsvärdet \"%s\""
-#: ../libsvn_client/info.c:103 ../libsvn_wc/crop.c:353
-#: ../libsvn_wc/props.c:271 ../libsvn_wc/update_editor.c:5358
-#: ../libsvn_wc/wc_db.c:596 ../libsvn_wc/wc_db.c:2039
-#: ../libsvn_wc/wc_db.c:2132 ../libsvn_wc/wc_db.c:2191
-#: ../libsvn_wc/wc_db.c:2215 ../libsvn_wc/wc_db.c:5456
-#: ../libsvn_wc/wc_db.c:5884 ../libsvn_wc/wc_db.c:6834
-#: ../libsvn_wc/wc_db.c:6952 ../libsvn_wc/wc_db.c:7016
-#: ../libsvn_wc/wc_db.c:7228 ../libsvn_wc/wc_db.c:8277
-#: ../libsvn_wc/wc_db.c:8457 ../libsvn_wc/wc_db.c:8795
-#, fuzzy, c-format
-msgid "The node '%s' was not found."
-msgstr "Sökvägen \"%s\" finns inte"
+#: ../libsvn_client/import.c:489
+#, c-format
+msgid "Unknown or unversionable type for '%s'"
+msgstr "\"%s\" är av en typ som är okänd eller ej kan versionshanteras"
-#: ../libsvn_client/info.c:565
-#, fuzzy, c-format
-msgid "Server does not support retrieving information about the repository root"
-msgstr "Servern stöder ej funktionalitet för låsning"
+#: ../libsvn_client/import.c:707
+msgid "New entry name required when importing a file"
+msgstr "Nytt postnamn krävs vid import av en fil"
-#: ../libsvn_client/info.c:572 ../libsvn_client/info.c:587
-#: ../libsvn_client/info.c:597
+#: ../libsvn_client/import.c:758 ../libsvn_client/patch.c:3016
+#: ../libsvn_client/patch.c:3028 ../libsvn_wc/delete.c:93
+#: ../libsvn_wc/lock.c:121 ../libsvn_wc/wc_db_wcroot.c:77
#, c-format
-msgid "URL '%s' non-existent in revision %ld"
-msgstr "URL:en \"%s\" finns inte i revision %ld"
+msgid "'%s' does not exist"
+msgstr "\"%s\" finns inte"
+
+#: ../libsvn_client/import.c:891
+#, c-format
+msgid "'%s' is a reserved name and cannot be imported"
+msgstr "\"%s\" är ett reserverat namn och kan inte importeras"
-#: ../libsvn_client/list.c:249
+#: ../libsvn_client/info.c:310 ../libsvn_client/list.c:376
#, c-format
-msgid "URL '%s' non-existent in that revision"
-msgstr "URL:en \"%s\" finns inte i den revisionen"
+msgid "URL '%s' non-existent in revision %ld"
+msgstr "URL:en \"%s\" finns inte i revision %ld"
-#: ../libsvn_client/locking_commands.c:237
+#: ../libsvn_client/locking_commands.c:266
+#: ../libsvn_client/locking_commands.c:292
msgid "No common parent found, unable to operate on disjoint arguments"
msgstr "Ingen gemensam förälder finns; kan inte arbeta med disjunkta argument"
-#: ../libsvn_client/locking_commands.c:282 ../libsvn_client/merge.c:9006
-#: ../libsvn_client/merge.c:9013 ../libsvn_client/merge.c:10240
-#: ../libsvn_client/merge.c:10515 ../libsvn_client/ra.c:484
-#: ../libsvn_client/ra.c:678 ../libsvn_client/update.c:99
+#: ../libsvn_client/locking_commands.c:325
#, c-format
-msgid "'%s' has no URL"
-msgstr "\"%s\" saknar URL"
+msgid "The node '%s' is not a file"
+msgstr "Noden \"%s\" är inte en fil"
-#: ../libsvn_client/locking_commands.c:305
+#: ../libsvn_client/locking_commands.c:345
msgid "Unable to lock/unlock across multiple repositories"
msgstr "Kan inte låsa/låsa upp i flera arkiv samtidigt"
-#: ../libsvn_client/locking_commands.c:346
+#: ../libsvn_client/locking_commands.c:400
#, c-format
msgid "'%s' is not locked in this working copy"
msgstr "\"%s\" är inte låst i den här arbetskopian"
-#: ../libsvn_client/locking_commands.c:391
+#: ../libsvn_client/locking_commands.c:450
#, c-format
msgid "'%s' is not locked"
msgstr "\"%s\" är inte låst"
-#: ../libsvn_client/locking_commands.c:425 ../libsvn_fs/fs-loader.c:1269
-#: ../libsvn_ra/ra_loader.c:1056
-#, fuzzy
+#: ../libsvn_client/locking_commands.c:483 ../libsvn_fs/fs-loader.c:1413
+#: ../libsvn_ra/ra_loader.c:1074
msgid "Lock comment contains illegal characters"
-msgstr "Låskommentaren innehåller ogiltiga tecken"
+msgstr "Låskommentaren innehåller otillåtna tecken"
-#: ../libsvn_client/log.c:299 ../libsvn_client/log.c:357
-msgid "Missing required revision specification"
-msgstr "Revisionsspecifikation saknas"
+#: ../libsvn_client/log.c:309
+msgid "No valid target found"
+msgstr "Giltigt mål saknas"
-#: ../libsvn_client/log.c:401
-#, fuzzy, c-format
+#: ../libsvn_client/log.c:340
+#, c-format
msgid "'%s' is not a relative path"
-msgstr "\"%s\" är ingen fil"
+msgstr "\"%s\" är ingen relativ sökväg"
-#: ../libsvn_client/log.c:422
+#: ../libsvn_client/log.c:366
msgid "When specifying working copy paths, only one target may be given"
-msgstr "Endast ett mål kan anges då sökvägar till arbetskopiro anges"
+msgstr "Endast ett mål kan anges då sökvägar till arbetskopior anges"
-#: ../libsvn_client/log.c:448 ../libsvn_client/status.c:388
-#, c-format
-msgid "Entry '%s' has no URL"
-msgstr "Posten \"%s\" saknar URL"
+#: ../libsvn_client/log.c:390 ../libsvn_client/revisions.c:189
+msgid "PREV, BASE, or COMMITTED revision keywords are invalid for URL"
+msgstr "De speciella revisionerna PREV, BASE och COMMITTED kan inte användas för URL:er"
-#: ../libsvn_client/merge.c:179
-#, c-format
-msgid "URLs have no scheme ('%s' and '%s')"
-msgstr "URL:erna har inget schema (\"%s\" och \"%s\")"
+#: ../libsvn_client/log.c:523 ../libsvn_client/log.c:830
+msgid "Missing required revision specification"
+msgstr "Revisionsspecifikation saknas"
-#: ../libsvn_client/merge.c:185 ../libsvn_client/merge.c:191
+#: ../libsvn_client/merge.c:439
#, c-format
-msgid "URL has no scheme: '%s'"
-msgstr "URL:en har inget schema: \"%s\""
+msgid "URL '%s' of '%s' is not in repository '%s'"
+msgstr "URL:en \"%s\" för \"%s\" är inte i arkivet \"%s\""
-#: ../libsvn_client/merge.c:198
+#: ../libsvn_client/merge.c:476
#, c-format
-msgid "Access scheme mixtures not yet supported ('%s' and '%s')"
-msgstr "Blandning av åtkomstscheman stöds inte ännu (\"%s\" och \"%s\")"
+msgid "'%s' must be from the same repository as '%s'"
+msgstr "\"%s\" måste vara från samma arkiv som \"%s\""
#. xgettext: the '.working', '.merge-left.r%ld' and
#. '.merge-right.r%ld' strings are used to tag onto a file
#. name in case of a merge conflict
-#: ../libsvn_client/merge.c:1482
+#: ../libsvn_client/merge.c:2030
msgid ".working"
msgstr ".arbetskopia"
-#: ../libsvn_client/merge.c:1484
+#: ../libsvn_client/merge.c:2032
#, c-format
msgid ".merge-left.r%ld"
msgstr ".sammanslagning-vänster.r%ld"
-#: ../libsvn_client/merge.c:1487
+#: ../libsvn_client/merge.c:2035
#, c-format
msgid ".merge-right.r%ld"
msgstr ".sammanslagning-höger.r%ld"
-#: ../libsvn_client/merge.c:3957
+#: ../libsvn_client/merge.c:4683
msgid "Cannot reverse-merge a range from a path's own future history; try updating first"
-msgstr ""
+msgstr "Det går inte att göra en omvänd sammanslagning av revisioner från en sökvägs egen framtid; försök att uppdatera först"
-#: ../libsvn_client/merge.c:4661
+#: ../libsvn_client/merge.c:5418
#, c-format
msgid ""
"One or more conflicts were produced while merging r%ld:%ld into\n"
@@ -1900,215 +2008,285 @@ msgid ""
"resolve all conflicts and rerun the merge to apply the remaining\n"
"unmerged revisions"
msgstr ""
+"En eller flera konflikter uppstod när r%ld:%ld slogs samman med\n"
+"\"%s\" --\n"
+"lös alla konflikter och kör om sammanslagningen för att ta hand om\n"
+"de återstående revisionerna"
-#: ../libsvn_client/merge.c:5820
+#: ../libsvn_client/merge.c:6233
+#, c-format
+msgid "Invalid mergeinfo detected on '%s', merge tracking not possible"
+msgstr "Ogiltig sammanslagningsinformation (\"mergeinfo\") för \"%s\"; följning av sammanslagning ej möjlig"
+
+#: ../libsvn_client/merge.c:6382
msgid "Merge tracking not allowed with missing subtrees; try restoring these items first:\n"
-msgstr ""
+msgstr "Följning av sammanslagning kräver att inga delträd saknas; försök att återställa dessa först:\n"
+
+#: ../libsvn_client/merge.c:7382
+#, c-format
+msgid "Invalid mergeinfo detected on merge target '%s', merge tracking not possible"
+msgstr "Ogiltig sammanslagningsinformation (\"mergeinfo\") för målet \"%s\"; följning av sammanslagning ej möjlig"
-#: ../libsvn_client/merge.c:8502
+#: ../libsvn_client/merge.c:9700
msgid "Use of two URLs is not compatible with mergeinfo modification"
-msgstr ""
+msgstr "Det går inte att använda två URL:er vid ändring av sammanslagningsinformationen"
-#: ../libsvn_client/merge.c:8509 ../libsvn_client/merge.c:8793
+#: ../libsvn_client/merge.c:9707 ../libsvn_client/merge.c:10032
msgid "Merge from foreign repository is not compatible with mergeinfo modification"
-msgstr ""
+msgstr "Sammanslagning från annat arkiv går inte vid ändring av sammanslagningsinformationen"
-#: ../libsvn_client/merge.c:8522 ../libsvn_client/merge.c:9021
-#: ../libsvn_client/merge.c:10523
-#, fuzzy, c-format
+#: ../libsvn_client/merge.c:10125 ../libsvn_client/merge.c:10268
+#, c-format
msgid "Merge target '%s' does not exist in the working copy"
-msgstr "\"%s\" är inte låst i den här arbetskopian"
+msgstr "Sammanslagningsmålet \"%s\" finns inte i arbetskopian"
+
+#: ../libsvn_client/merge.c:10148
+msgid "Cannot determine revision of working copy"
+msgstr "Arbetskopians revision kan inte bestämmas"
+
+#: ../libsvn_client/merge.c:10154
+#, c-format
+msgid "Cannot merge into mixed-revision working copy [%ld:%ld]; try updating first"
+msgstr "Sammanslagning till en arbetskopia i blandad revision [%ld:%ld] går inte; försök med att uppdatera först"
-#: ../libsvn_client/merge.c:8896
-#, fuzzy
+#: ../libsvn_client/merge.c:10169
msgid "Cannot merge into a working copy with a switched subtree"
-msgstr "Sökväg är inte en fil i en arbetskopia"
+msgstr "Kan inte slå samman till en arbetskopia med växlat delträd"
-#: ../libsvn_client/merge.c:8901
-#, fuzzy
+#: ../libsvn_client/merge.c:10185
msgid "Cannot merge into a working copy that has local modifications"
-msgstr "Sökväg är inte en fil i en arbetskopia"
-
-#: ../libsvn_client/merge.c:8918
-#, fuzzy
-msgid "Cannot determine revision of working copy"
-msgstr "Sökväg är inte en fil i en arbetskopia"
+msgstr "Kan inte slå samman till en arbetskopia som har lokala ändringar"
-#: ../libsvn_client/merge.c:8924
+#: ../libsvn_client/merge.c:10205 ../svn/merge-cmd.c:60
#, c-format
-msgid "Cannot merge into mixed-revision working copy [%lu:%lu]; try updating first"
-msgstr ""
+msgid "Invalid merge source '%s'; a working copy path can only be used with a repository revision (a number, a date, or head)"
+msgstr "Ogiltig sammanslagningskälla \"%s\"; en sökväg i en arbetskopia kan bara användas med en arkivrevision (ett nummer, ett datum eller \"HEAD\")"
-#: ../libsvn_client/merge.c:8987 ../svn/merge-cmd.c:348
+#: ../libsvn_client/merge.c:10528 ../svn/merge-cmd.c:127
msgid "Merge sources must both be either paths or URLs"
-msgstr ""
+msgstr "Båda sammanslagningskällorna måste vara antingen sökvägar eller URL:er"
-#: ../libsvn_client/merge.c:9059 ../libsvn_ra/ra_loader.c:539
-#, c-format
-msgid "'%s' isn't in the same repository as '%s'"
-msgstr "\"%s\" är inte i samma arkiv som \"%s\""
-
-#: ../libsvn_client/merge.c:10057 ../libsvn_client/merge.c:10348
+#: ../libsvn_client/merge.c:11289 ../libsvn_client/merge.c:11451
+#: ../libsvn_client/merge.c:12338
#, c-format
msgid "'%s@%ld' must be ancestrally related to '%s@%ld'"
-msgstr ""
-
-#: ../libsvn_client/merge.c:10258
-#, fuzzy, c-format
-msgid "'%s' must be from the same repository as '%s'"
-msgstr "\"%s\" är inte i samma arkiv som \"%s\""
+msgstr "\"%s@%ld\" måste ha samma ursprung som \"%s@%ld\""
-#: ../libsvn_client/merge.c:10290
-#, fuzzy, c-format
+#: ../libsvn_client/merge.c:11401
+#, c-format
msgid "Neither the reintegrate source nor target can be the root of the repository"
-msgstr "\"%s\" är inte arkivets rot"
+msgstr "Varken återföreningens källa eller mål kan vara arkivets rot"
-#: ../libsvn_client/merge.c:10376
+#: ../libsvn_client/merge.c:11411
+msgid "Reintegrate merge not possible"
+msgstr "Återförenande sammanslagning ej möjlig"
+
+#: ../libsvn_client/merge.c:11484
#, c-format
msgid ""
"Reintegrate can only be used if revisions %ld through %ld were previously merged from %s to the reintegrate source, but this is not the case:\n"
"%s"
msgstr ""
+"Återförening kan bara ske om revisionerna %ld till %ld tidigare slogs samman från %s till återföreningens källa, men så är inte fallet:\n"
+"%s"
+
+#: ../libsvn_client/merge.c:11546
+#, c-format
+msgid "Can't reintegrate into '%s' because it is locally added and therefore not related to the merge source"
+msgstr "Kan inte återförena in i \"%s\" eftersom den har lagts till lokalt och är därför orelaterad till sammanslagningskällan"
+
+#: ../libsvn_client/merge.c:11814
+msgid "Cannot merge automatically while ignoring mergeinfo"
+msgstr "Automatisk sammanslagning ej möjlig utan användning av sammanslagningsinformation"
+
+#: ../libsvn_client/merge.c:12554
+msgid "The required merge is reintegrate-like, and the record-only option cannot be used with this kind of merge"
+msgstr "Sammanslagningen som krävs är en återförening, och väljaren \"record-only\" kan inte användas för den här sortens sammanslagning"
-#: ../libsvn_client/mergeinfo.c:1721
+#: ../libsvn_client/merge.c:12560
+msgid "The required merge is reintegrate-like, and the depth option cannot be used with this kind of merge"
+msgstr "Sammanslagningen som krävs är en återförening, och väljaren för att ange djupet kan inte användas för den här sortens sammanslagning"
+
+#: ../libsvn_client/merge.c:12566
+msgid "The required merge is reintegrate-like, and the force_delete option cannot be used with this kind of merge"
+msgstr "Sammanslagningen som krävs är en återförening, och väljaren \"force_delete\" kan inte användas för den här sortens sammanslagning"
+
+#: ../libsvn_client/mergeinfo.c:1718
msgid "Only depths 'infinity' and 'empty' are currently supported"
-msgstr ""
+msgstr "Bara djupen \"infinity\" (obegränsat) och \"empty\" (tomt) stöds för närvarande"
-#: ../libsvn_client/patch.c:243
-#, fuzzy, c-format
+#: ../libsvn_client/patch.c:279
+#, c-format
msgid "Cannot strip %u components from '%s'"
-msgstr "Kan inte skriva egenskapstabell för \"%s\""
+msgstr "Kan inte ta bort %u sökvägsdelar från \"%s\""
-#: ../libsvn_client/patch.c:2754
-#, fuzzy
+#: ../libsvn_client/patch.c:910
+msgid "Invalid link representation"
+msgstr "Felaktig länkrepresentation"
+
+#: ../libsvn_client/patch.c:3005
msgid "strip count must be positive"
-msgstr "Argumentet till --limit måste vara positivt"
+msgstr "antal sökvägsdelar att ta bort måste vara positivt"
+
+#: ../libsvn_client/patch.c:3021 ../libsvn_fs_base/tree.c:3978
+#: ../libsvn_fs_base/tree.c:3983 ../libsvn_fs_fs/tree.c:3066
+#: ../libsvn_fs_fs/tree.c:3071 ../libsvn_ra/compat.c:675
+#: ../libsvn_ra_local/ra_plugin.c:1145
+#, c-format
+msgid "'%s' is not a file"
+msgstr "\"%s\" är ingen fil"
+
+#: ../libsvn_client/patch.c:3033 ../libsvn_wc/util.c:59
+#, c-format
+msgid "'%s' is not a directory"
+msgstr "\"%s\" är ingen katalog"
-#: ../libsvn_client/prop_commands.c:80
+#: ../libsvn_client/prop_commands.c:60
#, c-format
msgid "'%s' is a wcprop, thus not accessible to clients"
-msgstr "'%s' är en wcprop; ej tillgänglig för klienter"
+msgstr "\"%s\" är en wcprop; ej tillgänglig för klienter"
-#: ../libsvn_client/prop_commands.c:216
+#: ../libsvn_client/prop_commands.c:155
#, c-format
msgid "Property '%s' is not a regular property"
msgstr "Egenskapen \"%s\" är inte en vanlig egenskap"
-#: ../libsvn_client/prop_commands.c:363
+#: ../libsvn_client/prop_commands.c:266
#, c-format
msgid "Revision property '%s' not allowed in this context"
msgstr "Revisionsegenskapen \"%s\" är inte tillåten här"
-#: ../libsvn_client/prop_commands.c:370 ../libsvn_client/prop_commands.c:524
+#: ../libsvn_client/prop_commands.c:273 ../libsvn_client/prop_commands.c:468
#, c-format
msgid "Bad property name: '%s'"
msgstr "Felaktigt egenskapsnamn: \"%s\""
-#: ../libsvn_client/prop_commands.c:380
-#, c-format
-msgid "Setting property on non-local target '%s' needs a base revision"
-msgstr "Att sätta en egenskap på målet \"%s\" som inte är lokalt kräver en basrevision"
+#: ../libsvn_client/prop_commands.c:301
+msgid "Targets must be working copy paths"
+msgstr "Målen måste vara sökvägar i arbetskopian"
-#: ../libsvn_client/prop_commands.c:385
-#, c-format
-msgid "Setting property recursively on non-local target '%s' is not supported"
-msgstr "Att sätta en egenskap rekursivt på målet \"%s\" som inte är lokalt stöds inte"
+#: ../libsvn_client/prop_commands.c:362
+msgid "Targets must be URLs"
+msgstr "Målen måste vara URL:er"
-#: ../libsvn_client/prop_commands.c:400
-#, fuzzy, c-format
-msgid "Setting property '%s' on non-local target '%s' is not supported"
-msgstr "Att sätta en egenskap rekursivt på målet \"%s\" som inte är lokalt stöds inte"
+#: ../libsvn_client/prop_commands.c:372
+msgid "Setting property on non-local targets needs a base revision"
+msgstr "Att sätta en egenskap på mål som inte är lokala kräver en basrevision"
-#: ../libsvn_client/prop_commands.c:471
+#: ../libsvn_client/prop_commands.c:387
+#, c-format
+msgid "Setting property '%s' on non-local targets is not supported"
+msgstr "Att sätta egenskapen \"%s\" på mål som inte är lokala stöds inte"
+
+#: ../libsvn_client/prop_commands.c:415
#, c-format
msgid "revprop '%s' in r%ld is unexpectedly absent in repository (maybe someone else deleted it?)"
-msgstr ""
+msgstr "revisionsegenskapen \"%s\" i r%ld saknas oväntat i arkivet (kanske någon annan tog bort den?)"
-#: ../libsvn_client/prop_commands.c:480
+#: ../libsvn_client/prop_commands.c:424
#, c-format
msgid "revprop '%s' in r%ld has unexpected value in repository (maybe someone else changed it?)"
-msgstr ""
+msgstr "revisionsegenskapen \"%s\" i r%ld har ett oväntat värde i arkivet (kanske någon annan ändrade det?)"
-#: ../libsvn_client/prop_commands.c:488
+#: ../libsvn_client/prop_commands.c:432
#, c-format
msgid "revprop '%s' in r%ld is unexpectedly present in repository (maybe someone else set it?)"
-msgstr ""
+msgstr "revisionsegenskapen \"%s\" i r%ld finns oväntat i arkivet (kanske någon annan satte den?)"
-#: ../libsvn_client/prop_commands.c:519
-#, fuzzy
+#: ../libsvn_client/prop_commands.c:463
msgid "Author name should not contain a newline; value will not be set unless forced"
-msgstr "Värdet sätts inte utan att det framtvingas"
+msgstr "Författarnamnet bör inte innehålla radslut; värdet sätts inte med mindre än att det framtvingas"
-#: ../libsvn_client/prop_commands.c:764
+#: ../libsvn_client/prop_commands.c:577
#, c-format
msgid "'%s' does not exist in revision %ld"
msgstr "\"%s\" finns inte i revision %ld"
-#: ../libsvn_client/prop_commands.c:771 ../libsvn_client/prop_commands.c:1089
-#: ../libsvn_wc/crop.c:183
+#: ../libsvn_client/prop_commands.c:583 ../libsvn_client/prop_commands.c:1096
+#: ../libsvn_wc/crop.c:168
#, c-format
msgid "Unknown node kind for '%s'"
msgstr "Okänd nodtyp för \"%s\""
-#: ../libsvn_client/ra.c:145
+#: ../libsvn_client/ra.c:161
#, c-format
-msgid "Attempt to set wc property '%s' on '%s' in a non-commit operation"
-msgstr "Försök att sätta wcporp \"%s\" på \"%s\" under en operation som ej är arkivering"
+msgid "Attempt to set wcprop '%s' on '%s' in a non-commit operation"
+msgstr "Försök att sätta wcprop \"%s\" på \"%s\" under en operation som ej är arkivering"
-#: ../libsvn_client/ra.c:378
+#: ../libsvn_client/ra.c:415
#, c-format
msgid "Redirect cycle detected for URL '%s'"
-msgstr ""
+msgstr "Rundgång i omdirigering upptäcktes för URL:en \"%s\""
+
+#: ../libsvn_client/ra.c:501 ../libsvn_client/ra.c:812
+#, c-format
+msgid "'%s' has no URL"
+msgstr "\"%s\" saknar URL"
-#: ../libsvn_client/ra.c:750 ../libsvn_ra/compat.c:376
+#: ../libsvn_client/ra.c:679 ../libsvn_ra/compat.c:395
#, c-format
msgid "Unable to find repository location for '%s' in revision %ld"
msgstr "Kan inte hitta platsen i arkivet för \"%s\" i revision %ld"
-#: ../libsvn_client/ra.c:757
+#: ../libsvn_client/ra.c:691
#, c-format
msgid "The location for '%s' for revision %ld does not exist in the repository or refers to an unrelated object"
msgstr "Platsen för \"%s\" i revision %ld finns inte i arkivet eller är ett orelaterat objekt"
-#: ../libsvn_client/relocate.c:115
+#: ../libsvn_client/relocate.c:117
#, c-format
msgid "'%s' is not the root of the repository"
msgstr "\"%s\" är inte arkivets rot"
-#: ../libsvn_client/relocate.c:122
+#: ../libsvn_client/relocate.c:124
#, c-format
msgid "The repository at '%s' has uuid '%s', but the WC has '%s'"
msgstr "Arkivet på \"%s\" har uuid \"%s\", men arbetskopian har \"%s\""
-#: ../libsvn_client/revisions.c:113 ../libsvn_client/revisions.c:136
+#: ../libsvn_client/repos_diff.c:931 ../libsvn_wc/externals.c:570
+#, c-format
+msgid "Base checksum mismatch for '%s'"
+msgstr "Felaktig baskontrollsumma för \"%s\""
+
+#: ../libsvn_client/revisions.c:113 ../libsvn_client/revisions.c:138
#, c-format
msgid "Path '%s' has no committed revision"
msgstr "Sökvägen \"%s\" saknar senaste arkiveringsrevision"
-#: ../libsvn_client/revisions.c:162
+#: ../libsvn_client/revisions.c:166
#, c-format
msgid "Unrecognized revision type requested for '%s'"
msgstr "Okänd revisionstyp begärd för \"%s\""
-#: ../libsvn_client/revisions.c:185
-msgid "PREV, BASE, or COMMITTED revision keywords are invalid for URL"
-msgstr ""
-
-#: ../libsvn_client/status.c:302 ../libsvn_client/status.c:331
-#: ../libsvn_client/status.c:340 ../libsvn_client/status.c:533
-#: ../libsvn_wc/lock.c:539 ../libsvn_wc/lock.c:899 ../libsvn_wc/lock.c:1598
-#: ../libsvn_wc/wc_db.c:7808 ../libsvn_wc/wc_db_pdh.c:485
+#: ../libsvn_client/status.c:407 ../libsvn_client/status.c:586
+#: ../libsvn_wc/lock.c:564 ../libsvn_wc/lock.c:856 ../libsvn_wc/lock.c:1542
+#: ../libsvn_wc/wc_db.c:12787 ../libsvn_wc/wc_db_wcroot.c:630
#, c-format
msgid "'%s' is not a working copy"
msgstr "\"%s\" är ingen arbetskopia"
-#: ../libsvn_client/switch.c:102
+#: ../libsvn_client/status.c:454
+#, c-format
+msgid "Entry '%s' has no URL"
+msgstr "Posten \"%s\" saknar URL"
+
+#: ../libsvn_client/switch.c:129
#, c-format
msgid "Cannot both exclude and switch a path"
-msgstr ""
+msgstr "Kan inte både utesluta och växla en sökväg"
+
+#: ../libsvn_client/switch.c:150
+#, c-format
+msgid "Cannot switch '%s' because it is not in the repository yet"
+msgstr "Kan inte växla \"%s\" eftersom den inte finns i arbetskopian än"
+
+#: ../libsvn_client/switch.c:175
+#, c-format
+msgid "Directory '%s' has no URL"
+msgstr "Katalogen \"%s\" saknar URL"
-#: ../libsvn_client/switch.c:175 ../libsvn_ra_local/ra_plugin.c:199
-#: ../libsvn_ra_local/ra_plugin.c:275 ../libsvn_wc/update_editor.c:5032
+#: ../libsvn_client/switch.c:215 ../libsvn_ra_local/ra_plugin.c:236
+#: ../libsvn_ra_local/ra_plugin.c:326 ../libsvn_wc/update_editor.c:4833
#, c-format
msgid ""
"'%s'\n"
@@ -2119,254 +2297,318 @@ msgstr ""
"är inte samma arkiv som\n"
"\"%s\""
-#: ../libsvn_client/util.c:215
-#, fuzzy, c-format
-msgid "URL '%s' is not a child of repository root URL '%s'"
-msgstr "\"%s\" är inte i samma arkiv som \"%s\""
+#: ../libsvn_client/switch.c:242
+#, c-format
+msgid "'%s' shares no common ancestry with '%s'"
+msgstr "\"%s\" och \"%s\" saknar gemensamt ursprung"
-#: ../libsvn_delta/svndiff.c:165
+#: ../libsvn_client/util.c:329
+#, c-format
+msgid "Cannot mix repository and working copy targets"
+msgstr "Kan inte blanda mål i arkiv och arbetskopia"
+
+#: ../libsvn_delta/svndiff.c:175
msgid "Compression of svndiff data failed"
msgstr "Misslyckades med att komprimera svndiff-data"
-#: ../libsvn_delta/svndiff.c:432
-#, fuzzy
+#: ../libsvn_delta/svndiff.c:538
msgid "Decompression of svndiff data failed: no size"
-msgstr "Misslyckades med att packa upp svndiff-data"
+msgstr "Misslyckades med att packa upp svndiff-data: ingen storlek"
-#: ../libsvn_delta/svndiff.c:435
-#, fuzzy
+#: ../libsvn_delta/svndiff.c:541
msgid "Decompression of svndiff data failed: size too large"
-msgstr "Misslyckades med att packa upp svndiff-data"
+msgstr "Misslyckades med att packa upp svndiff-data: storlek för stor"
-#: ../libsvn_delta/svndiff.c:456
+#: ../libsvn_delta/svndiff.c:565
msgid "Decompression of svndiff data failed"
msgstr "Misslyckades med att packa upp svndiff-data"
-#: ../libsvn_delta/svndiff.c:463
+#: ../libsvn_delta/svndiff.c:572
msgid "Size of uncompressed data does not match stored original length"
msgstr "Storleken på uppackad data stämmer inte med lagrad originallängd"
-#: ../libsvn_delta/svndiff.c:538
+#: ../libsvn_delta/svndiff.c:648
#, c-format
msgid "Invalid diff stream: insn %d cannot be decoded"
msgstr "Ogiltig diff-ström: instruktionen %d kan inte avkodas"
-#: ../libsvn_delta/svndiff.c:542
-#, fuzzy, c-format
+#: ../libsvn_delta/svndiff.c:652
+#, c-format
msgid "Invalid diff stream: insn %d has length zero"
-msgstr "Ogiltig diff-ström: instruktionen %d har ogiltig längd"
+msgstr "Ogiltig diff-ström: instruktionen %d har längden noll"
-#: ../libsvn_delta/svndiff.c:546
+#: ../libsvn_delta/svndiff.c:656
#, c-format
msgid "Invalid diff stream: insn %d overflows the target view"
msgstr "Ogiltig diff-ström: instruktionen %d går utanför målet"
-#: ../libsvn_delta/svndiff.c:555
+#: ../libsvn_delta/svndiff.c:665
#, c-format
msgid "Invalid diff stream: [src] insn %d overflows the source view"
msgstr "Ogiltig diff-ström: [src] instruktion %d går utanför källan"
-#: ../libsvn_delta/svndiff.c:562
+#: ../libsvn_delta/svndiff.c:672
#, c-format
msgid "Invalid diff stream: [tgt] insn %d starts beyond the target view position"
msgstr "Ogiltig diff-ström: [tgt] instruktionen %d börjar efter målet"
-#: ../libsvn_delta/svndiff.c:569
+#: ../libsvn_delta/svndiff.c:679
#, c-format
msgid "Invalid diff stream: [new] insn %d overflows the new data section"
msgstr "Ogiltig diff-ström: [new] instruktionen %d går utanför ny data"
-#: ../libsvn_delta/svndiff.c:579
+#: ../libsvn_delta/svndiff.c:689
msgid "Delta does not fill the target window"
msgstr "Deltat fyller inte målfönstret"
-#: ../libsvn_delta/svndiff.c:582
+#: ../libsvn_delta/svndiff.c:692
msgid "Delta does not contain enough new data"
msgstr "Deltat innehåller inte tillräckligt med ny data"
-#: ../libsvn_delta/svndiff.c:688
+#: ../libsvn_delta/svndiff.c:797
msgid "Svndiff has invalid header"
msgstr "Svndiff har ogiltigt huvud"
-#: ../libsvn_delta/svndiff.c:744 ../libsvn_delta/svndiff.c:908
-#, fuzzy
+#: ../libsvn_delta/svndiff.c:853 ../libsvn_delta/svndiff.c:1035
msgid "Svndiff contains a too-large window"
-msgstr "Svndiff-data innehåller trasigt fönster"
+msgstr "Svndiff innehåller ett för stort fönster"
-#: ../libsvn_delta/svndiff.c:751 ../libsvn_delta/svndiff.c:915
+#: ../libsvn_delta/svndiff.c:860 ../libsvn_delta/svndiff.c:1042
msgid "Svndiff contains corrupt window header"
msgstr "Svndiff innehåller trasigt fönsterhuvud"
-#: ../libsvn_delta/svndiff.c:760
+#: ../libsvn_delta/svndiff.c:869
msgid "Svndiff has backwards-sliding source views"
msgstr "Svndiff innehåller källvyer med förflyttningar baklänges"
-#: ../libsvn_delta/svndiff.c:809 ../libsvn_delta/svndiff.c:856
-#: ../libsvn_delta/svndiff.c:937
+#: ../libsvn_delta/svndiff.c:926 ../libsvn_delta/svndiff.c:983
+#: ../libsvn_delta/svndiff.c:1064
msgid "Unexpected end of svndiff input"
msgstr "Oväntat slut på svndiff"
-#: ../libsvn_diff/diff_file.c:466
+#: ../libsvn_diff/diff_file.c:184
+#, c-format
+msgid "File '%s' is too large to be read in to memory"
+msgstr "Filen \"%s\" är för stor för att kunna läsas in i minnet"
+
+#: ../libsvn_diff/diff_file.c:1106
#, c-format
msgid "The file '%s' changed unexpectedly during diff"
-msgstr "Filen '%s' ändrades oväntat vid diff-beräkning"
+msgstr "Filen \"%s\" ändrades oväntat vid diff-beräkning"
-#: ../libsvn_diff/diff_file.c:630
-#, fuzzy
+#: ../libsvn_diff/diff_file.c:1276
msgid "Error in options to internal diff"
-msgstr "Fel vid normalisering av det redigerade innehållet till det interna formatet"
+msgstr "Fel i väljare till intern diff-beräkning"
-#: ../libsvn_diff/diff_file.c:656
+#: ../libsvn_diff/diff_file.c:1302
#, c-format
msgid "Invalid argument '%s' in diff options"
msgstr "Ogiltigt argument \"%s\" i diff-flaggor"
-#: ../libsvn_diff/diff_file.c:942
-#, fuzzy
-msgid "No newline at end of file"
-msgstr "%s\\ Inget radslut vid filslut%s"
-
#. Order of date components can be different in different languages
-#: ../libsvn_diff/diff_file.c:1149
+#: ../libsvn_diff/diff_file.c:1799
msgid "%a %b %e %H:%M:%S %Y"
-msgstr ""
+msgstr "%a %e %b %Y %H:%M:%S"
+
+#: ../libsvn_diff/diff_file.c:1875 ../libsvn_diff/diff_file.c:1891
+#, c-format
+msgid "Path '%s' must be inside the directory '%s'"
+msgstr "Sökvägen \"%s\" måste vara inuti katalogen \"%s\""
-#: ../libsvn_diff/diff_file.c:1766
+#: ../libsvn_diff/diff_file.c:2409
#, c-format
msgid "Failed to delete mmap '%s'"
-msgstr "Kunde inte ta bort minnesmappning '%s'"
+msgstr "Kunde inte ta bort minnesmappning \"%s\""
-#: ../libsvn_fs/fs-loader.c:115 ../libsvn_ra/ra_loader.c:179
-#: ../libsvn_ra/ra_loader.c:192
+#: ../libsvn_diff/util.c:463
#, c-format
-msgid "'%s' does not define '%s()'"
-msgstr "\"%s\" definierar inte \"%s()\""
+msgid " Reverse-merged %s:r%s%s"
+msgstr " Baklänges sammanslagning av %s:r%s%s"
-#: ../libsvn_fs/fs-loader.c:132
+#: ../libsvn_diff/util.c:480
#, c-format
-msgid "Can't grab FS mutex"
-msgstr "Kan inte allokera mutex för filsystemsbiblioteket"
+msgid " Merged %s:r%s%s"
+msgstr " Sammanslagning av %s:r%s%s"
+
+#: ../libsvn_fs/editor.c:219
+#, c-format
+msgid "Revision for modifying '%s' is required"
+msgstr "Revision krävs för att ändra \"%s\""
+
+#: ../libsvn_fs/editor.c:228
+#, c-format
+msgid "'%s' is out of date; try updating"
+msgstr "\"%s\" är inaktuell; försök att uppdatera"
+
+#: ../libsvn_fs/editor.c:265
+#, c-format
+msgid "'%s' has been modified since the commit began (restart the commit)"
+msgstr "\"%s\" har ändrats sedan arkiveringen började (starta om arkiveringen)"
+
+#: ../libsvn_fs/editor.c:323
+#, c-format
+msgid "'%s' already exists, so may be out of date; try updating"
+msgstr "\"%s\" finns redan, så den kan vara inaktuell; försök att uppdatera"
+
+#: ../libsvn_fs/editor.c:456
+msgid "The filesystem does not support 'absent' nodes"
+msgstr "Filsystemet stöder ej \"frånvarande\" noder"
+
+#: ../libsvn_fs/fs-loader.c:121
+#, c-format
+msgid "Invalid name for FS type '%s'"
+msgstr "Ogiltigt namn för filsystemstypen \"%s\""
-#: ../libsvn_fs/fs-loader.c:144
+#: ../libsvn_fs/fs-loader.c:138 ../libsvn_ra/ra_loader.c:161
+#: ../libsvn_ra/ra_loader.c:174
#, c-format
-msgid "Can't ungrab FS mutex"
-msgstr "Kan inte släppa lås för FS"
+msgid "'%s' does not define '%s()'"
+msgstr "\"%s\" definierar inte \"%s()\""
-#: ../libsvn_fs/fs-loader.c:165
+#: ../libsvn_fs/fs-loader.c:164
#, c-format
msgid "Failed to load module for FS type '%s'"
msgstr "Kunde inte ladda modulen för filsystemstypen \"%s\""
-#: ../libsvn_fs/fs-loader.c:198
+#: ../libsvn_fs/fs-loader.c:186
#, c-format
msgid "Mismatched FS module version for '%s': found %d.%d.%d%s, expected %d.%d.%d%s"
-msgstr "Versioner stämmer ej i FS-modulen '%s': hittade %d.%d.%d%s, väntade %d.%d.%d%s"
+msgstr "Versioner stämmer ej i FS-modulen \"%s\": hittade %d.%d.%d%s, väntade %d.%d.%d%s"
-#: ../libsvn_fs/fs-loader.c:223
+#: ../libsvn_fs/fs-loader.c:266
#, c-format
msgid "Unknown FS type '%s'"
msgstr "Okänd filsystemstyp \"%s\""
-#: ../libsvn_fs/fs-loader.c:313
+#: ../libsvn_fs/fs-loader.c:389
#, c-format
-msgid "Can't allocate FS mutex"
-msgstr "Kan inte allokera mutex för FS-biblioteket"
-
-#: ../libsvn_fs/fs-loader.c:348
-#, fuzzy, c-format
msgid "Path '%s' is not in UTF-8"
-msgstr "Sökvägen \"%s\" är inte en URL"
+msgstr "Sökvägen \"%s\" är inte i UTF-8"
-#: ../libsvn_fs/fs-loader.c:356
-#, fuzzy, c-format
+#: ../libsvn_fs/fs-loader.c:397
+#, c-format
msgid "Path '%s' contains '.' or '..' element"
-msgstr "URL:en \"%s\" innehåller ett \"..\"-element"
+msgstr "Sökvägen \"%s\" innehåller elementet \".\" eller \"..\""
+
+#: ../libsvn_fs/fs-loader.c:554 ../libsvn_repos/repos.c:1982
+msgid "Hotcopy source and destination are equal"
+msgstr "Samma källa och mål för kopiering under drift"
+
+#: ../libsvn_fs/fs-loader.c:564
+#, c-format
+msgid "'%s' already exists and is a file"
+msgstr "\"%s\" finns redan och är en fil"
+
+#: ../libsvn_fs/fs-loader.c:569
+#, c-format
+msgid "'%s' already exists and has an unknown node kind"
+msgstr "\"%s\" finns redan och har en okänd nodtyp"
+
+#: ../libsvn_fs/fs-loader.c:587
+#, c-format
+msgid "The filesystem type of the hotcopy source ('%s') does not match the filesystem type of the hotcopy destination ('%s')"
+msgstr "Filsystemstypen för källan för kopiering under drift (\"%s\") stämmer inte överens med filsystemstypen för destinationen (\"%s\")"
-#: ../libsvn_fs/fs-loader.c:1251
-#, fuzzy, c-format
+#: ../libsvn_fs/fs-loader.c:1395
+#, c-format
msgid "Malformed UUID '%s'"
-msgstr "Felaktig lista med information om fel"
+msgstr "Felaktig UUID \"%s\""
+
+#: ../libsvn_fs/fs-loader.c:1423
+#, c-format
+msgid "Lock token URI '%s' has bad scheme; expected '%s'"
+msgstr "Låsidentifieraren med URI \"%s\" har felaktigt schema; väntade \"%s\""
+
+#: ../libsvn_fs/fs-loader.c:1430
+#, c-format
+msgid "Lock token '%s' is not ASCII at byte %u"
+msgstr "Låsidentifieraren \"%s\" är inte ASCII vid byte %u"
-#: ../libsvn_fs/fs-loader.c:1275
+#: ../libsvn_fs/fs-loader.c:1437
+#, c-format
+msgid "Lock token URI '%s' is not XML-safe"
+msgstr "Låsidentifieraren med URI \"%s\" är inte XML-säker"
+
+#: ../libsvn_fs/fs-loader.c:1444
msgid "Negative expiration date passed to svn_fs_lock"
-msgstr "Negativt utgånsgdatum till svn_fs_lock"
+msgstr "Negativt utgångsgdatum till svn_fs_lock"
#: ../libsvn_fs_base/bdb/bdb-err.c:104
#, c-format
msgid "Berkeley DB error for filesystem '%s' while %s:\n"
msgstr "Berkeley DB-fel i filsystemet \"%s\" under %s:\n"
-#: ../libsvn_fs_base/bdb/changes-table.c:92
+#: ../libsvn_fs_base/bdb/changes-table.c:94
msgid "creating change"
msgstr "skapande av ändring"
-#: ../libsvn_fs_base/bdb/changes-table.c:116
+#: ../libsvn_fs_base/bdb/changes-table.c:118
msgid "deleting changes"
msgstr "radering av ändringar"
-#: ../libsvn_fs_base/bdb/changes-table.c:148 ../libsvn_fs_fs/fs_fs.c:4012
+#: ../libsvn_fs_base/bdb/changes-table.c:150 ../libsvn_fs_fs/fs_fs.c:5908
msgid "Missing required node revision ID"
msgstr "Nodrevisions-id saknas"
-#: ../libsvn_fs_base/bdb/changes-table.c:159 ../libsvn_fs_fs/fs_fs.c:4022
+#: ../libsvn_fs_base/bdb/changes-table.c:161 ../libsvn_fs_fs/fs_fs.c:5918
msgid "Invalid change ordering: new node revision ID without delete"
msgstr "Ogiltig ändringsordning: nytt nodrevisions-id utan radering"
-#: ../libsvn_fs_base/bdb/changes-table.c:169 ../libsvn_fs_fs/fs_fs.c:4033
+#: ../libsvn_fs_base/bdb/changes-table.c:171 ../libsvn_fs_fs/fs_fs.c:5929
msgid "Invalid change ordering: non-add change on deleted path"
msgstr "Ogiltig ändringsordning: ändring som inte är tillägg på raderad sökväg"
-#: ../libsvn_fs_base/bdb/changes-table.c:178 ../libsvn_fs_fs/fs_fs.c:4042
-#, fuzzy
+#: ../libsvn_fs_base/bdb/changes-table.c:180 ../libsvn_fs_fs/fs_fs.c:5938
msgid "Invalid change ordering: add change on preexisting path"
-msgstr "Ogiltig ändringsordning: ändring som inte är tillägg på raderad sökväg"
+msgstr "Ogiltig ändringsordning: tilläggsändring på redan befintlig sökväg"
-#: ../libsvn_fs_base/bdb/changes-table.c:270
-#: ../libsvn_fs_base/bdb/changes-table.c:393
+#: ../libsvn_fs_base/bdb/changes-table.c:272
+#: ../libsvn_fs_base/bdb/changes-table.c:395
msgid "creating cursor for reading changes"
msgstr "skapande av markör för läsning av ändringar"
-#: ../libsvn_fs_base/bdb/changes-table.c:295
-#: ../libsvn_fs_base/bdb/changes-table.c:414
+#: ../libsvn_fs_base/bdb/changes-table.c:297
+#: ../libsvn_fs_base/bdb/changes-table.c:416
#, c-format
msgid "Error reading changes for key '%s'"
msgstr "Fel vid läsning av ändringar för nyckeln \"%s\""
-#: ../libsvn_fs_base/bdb/changes-table.c:354
-#: ../libsvn_fs_base/bdb/changes-table.c:437
+#: ../libsvn_fs_base/bdb/changes-table.c:356
+#: ../libsvn_fs_base/bdb/changes-table.c:439
msgid "fetching changes"
msgstr "hämtning av ändringar"
-#: ../libsvn_fs_base/bdb/changes-table.c:367
-#: ../libsvn_fs_base/bdb/changes-table.c:450
+#: ../libsvn_fs_base/bdb/changes-table.c:369
+#: ../libsvn_fs_base/bdb/changes-table.c:452
msgid "closing changes cursor"
-msgstr "strängning av markör för ändringar"
+msgstr "stängning av markör för ändringar"
#: ../libsvn_fs_base/bdb/checksum-reps-table.c:87
#: ../libsvn_fs_base/bdb/checksum-reps-table.c:116
#: ../libsvn_fs_base/bdb/checksum-reps-table.c:159
msgid "Only SHA1 checksums can be used as keys in the checksum-reps table.\n"
-msgstr ""
+msgstr "Bara SHA1-kontrollsummor kan användas som nycklar i \"checksum-reps\"-tabellen.\n"
#: ../libsvn_fs_base/bdb/checksum-reps-table.c:135
-#, fuzzy, c-format
+#, c-format
msgid "Representation key for checksum '%s' exists in filesystem '%s'."
-msgstr "Ingen låsidentifierare angiven för sökvägen \"%s\" i filsystemet \"%s\""
+msgstr "Representationsnyckeln för kontrollsumman \"%s\" finns i filsystemet \"%s\"."
#: ../libsvn_fs_base/bdb/checksum-reps-table.c:142
-#, fuzzy
msgid "storing checksum-reps record"
-msgstr "lagring av kopieringspost"
+msgstr "lagrar checksum-reps-post"
+
+#: ../libsvn_fs_base/bdb/checksum-reps-table.c:164
+msgid "deleting entry from 'checksum-reps' table"
+msgstr "radering av post ur \"checksum-reps\"-tabellen"
#: ../libsvn_fs_base/bdb/checksum-reps-table.c:186
-#, fuzzy
msgid "allocating new representation reuse ID (getting 'next-key')"
-msgstr "allokering av ny representation (erhåller next-key)"
+msgstr "allokerar ny återanvändningsnyckel för representation (hämtar \"next-key\")"
#: ../libsvn_fs_base/bdb/checksum-reps-table.c:207
-#, fuzzy
msgid "bumping next representation reuse ID"
-msgstr "ökning av nästa representationsnyckel"
+msgstr "ökar nästa återanvändningsnyckel för representation"
#: ../libsvn_fs_base/bdb/copies-table.c:92
msgid "storing copy record"
@@ -2374,7 +2616,7 @@ msgstr "lagring av kopieringspost"
#: ../libsvn_fs_base/bdb/copies-table.c:115
msgid "allocating new copy ID (getting 'next-key')"
-msgstr "allokering av ny copy-id (hämtar 'next-key')"
+msgstr "allokering av ny copy-id (hämtar \"next-key\")"
#: ../libsvn_fs_base/bdb/copies-table.c:133
msgid "bumping next copy key"
@@ -2382,29 +2624,80 @@ msgstr "ökande av nästa copy-nyckel"
#: ../libsvn_fs_base/bdb/copies-table.c:171
msgid "deleting entry from 'copies' table"
-msgstr "radering av post ur 'copies'-tabellen"
+msgstr "radering av post ur \"copies\"-tabellen"
#: ../libsvn_fs_base/bdb/copies-table.c:199
msgid "reading copy"
msgstr "läsning av kopiering"
+#: ../libsvn_fs_base/bdb/lock-tokens-table.c:87
+msgid "storing lock token record"
+msgstr "lagring av låsidentifierarpost"
+
+#: ../libsvn_fs_base/bdb/lock-tokens-table.c:108
+msgid "deleting entry from 'lock-tokens' table"
+msgstr "radering av post ur \"lock-tokens\"-tabellen"
+
+#: ../libsvn_fs_base/bdb/lock-tokens-table.c:135
+msgid "reading lock token"
+msgstr "läsning av låsidentifierare"
+
+#: ../libsvn_fs_base/bdb/locks-table.c:93
+msgid "storing lock record"
+msgstr "lagring av låspost"
+
+#: ../libsvn_fs_base/bdb/locks-table.c:116
+msgid "deleting lock from 'locks' table"
+msgstr "radering av lås från \"locks\"-tabellen"
+
+#: ../libsvn_fs_base/bdb/locks-table.c:143
+msgid "reading lock"
+msgstr "läsning av lås"
+
+#: ../libsvn_fs_base/bdb/locks-table.c:246
+msgid "creating cursor for reading lock tokens"
+msgstr "skapande av markör för läsning av låsidentifierare"
+
+#: ../libsvn_fs_base/bdb/locks-table.c:321
+msgid "fetching lock tokens"
+msgstr "hämtning av låsidentifierare"
+
+#: ../libsvn_fs_base/bdb/locks-table.c:323
+msgid "fetching lock tokens (closing cursor)"
+msgstr "hämtning av låsidentifierare (stänger markör)"
+
+#: ../libsvn_fs_base/bdb/miscellaneous-table.c:95
+msgid "deleting record from 'miscellaneous' table"
+msgstr "radering av post från \"miscellaneous\"-tabellen"
+
+#: ../libsvn_fs_base/bdb/miscellaneous-table.c:103
+msgid "storing miscellaneous record"
+msgstr "lagring av diversepost"
+
+#: ../libsvn_fs_base/bdb/miscellaneous-table.c:131
+msgid "fetching miscellaneous record"
+msgstr "hämtning av diversepost"
+
#: ../libsvn_fs_base/bdb/node-origins-table.c:117
#, c-format
msgid "Node origin for '%s' exists in filesystem '%s' with a different value (%s) than what we were about to store (%s)"
-msgstr ""
+msgstr "Nodursprunget för \"%s\" finns i filsystemet \"%s\" med ett annat värde (%s) än vad som just skulle lagras (%s)"
#: ../libsvn_fs_base/bdb/node-origins-table.c:127
-#, fuzzy
msgid "storing node-origins record"
-msgstr "lagring av kopieringspost"
+msgstr "lagrar nodursprungspost"
+
+#: ../libsvn_fs_base/bdb/node-origins-table.c:142
+msgid "deleting entry from 'node-origins' table"
+msgstr "radering av post från \"node-origins\"-tabellen"
#: ../libsvn_fs_base/bdb/nodes-table.c:102
msgid "allocating new node ID (getting 'next-key')"
-msgstr "allokering av nytt nod-id (erhåller next-key)"
+msgstr "allokerar nytt nod-id (hämtar \"next-key\")"
#: ../libsvn_fs_base/bdb/nodes-table.c:120
msgid "bumping next node ID key"
-msgstr "ökande av nästa node-ID-nyckel"
+msgstr "ökar nästa nod-ID-nyckel"
#: ../libsvn_fs_base/bdb/nodes-table.c:156
#, c-format
@@ -2457,14 +2750,132 @@ msgstr "radering av representation"
msgid "reading filesystem revision"
msgstr "läsning av filsystemsrevision"
+#: ../libsvn_fs_base/bdb/rev-table.c:141
+msgid "updating filesystem revision"
+msgstr "uppdatering av filsystemsrevision"
+
+#: ../libsvn_fs_base/bdb/rev-table.c:149
+msgid "storing filesystem revision"
+msgstr "lagring av filsystemsrevision"
+
+#: ../libsvn_fs_base/bdb/rev-table.c:179
+msgid "getting youngest revision (creating cursor)"
+msgstr "hämtning av yngsta revision (skapar markör)"
+
+#: ../libsvn_fs_base/bdb/rev-table.c:203
+msgid "getting youngest revision (finding last entry)"
+msgstr "hämtning av yngsta revision (letar efter sista posten)"
+
+#. You can't commit a transaction with open cursors, because:
+#. 1) key/value pairs don't get deleted until the cursors referring
+#. to them are closed, so closing a cursor can fail for various
+#. reasons, and txn_commit shouldn't fail that way, and
+#. 2) using a cursor after committing its transaction can cause
+#. undetectable database corruption.
+#: ../libsvn_fs_base/bdb/rev-table.c:213
+msgid "getting youngest revision (closing cursor)"
+msgstr "hämtning av yngsta revision (stänger markör)"
+
#: ../libsvn_fs_base/bdb/strings-table.c:94
+#: ../libsvn_fs_base/bdb/strings-table.c:300
+#: ../libsvn_fs_base/bdb/strings-table.c:491
msgid "creating cursor for reading a string"
msgstr "skapande av markör för att läsa en sträng"
+#: ../libsvn_fs_base/bdb/strings-table.c:124
+msgid "moving cursor"
+msgstr "flyttning av markör"
+
+#: ../libsvn_fs_base/bdb/strings-table.c:136
+msgid "rerunning cursor move"
+msgstr "kör om markörflyttning"
+
+#: ../libsvn_fs_base/bdb/strings-table.c:228
+#: ../libsvn_fs_base/bdb/strings-table.c:247
+#: ../libsvn_fs_base/bdb/strings-table.c:265
+msgid "reading string"
+msgstr "läsning av sträng"
+
+#. Done with the cursor.
+#: ../libsvn_fs_base/bdb/strings-table.c:254
+#: ../libsvn_fs_base/bdb/strings-table.c:334
+#: ../libsvn_fs_base/bdb/strings-table.c:539
+msgid "closing string-reading cursor"
+msgstr "stängning av markör för ändringar"
+
+#: ../libsvn_fs_base/bdb/strings-table.c:313
+#: ../libsvn_fs_base/bdb/strings-table.c:505
+msgid "getting next-key value"
+msgstr "hämtning av \"next-key\"-värde"
+
+#. ignore the error, the original is
+#. more important.
+#: ../libsvn_fs_base/bdb/strings-table.c:331
+msgid "bumping next string key"
+msgstr "ökning av nästa strängnyckel"
+
+#: ../libsvn_fs_base/bdb/strings-table.c:358
+msgid "appending string"
+msgstr "tillägg av sträng"
+
+#. Handle any other error conditions.
+#: ../libsvn_fs_base/bdb/strings-table.c:390
+msgid "clearing string"
+msgstr "rensning av sträng"
+
+#: ../libsvn_fs_base/bdb/strings-table.c:399
+msgid "storing empty contents"
+msgstr "lagring av tomt innehåll"
+
+#: ../libsvn_fs_base/bdb/strings-table.c:436
+msgid "fetching string length"
+msgstr "hämtning av stränglängd"
+
+#. Handle any other error conditions.
+#: ../libsvn_fs_base/bdb/strings-table.c:466
+msgid "deleting string"
+msgstr "radering av sträng"
+
+#: ../libsvn_fs_base/bdb/strings-table.c:524
+msgid "writing copied data"
+msgstr "skrivning av kopierad data"
+
+#: ../libsvn_fs_base/bdb/strings-table.c:535
+msgid "fetching string data for a copy"
+msgstr "hämtning av strängdata för kopiering"
+
#: ../libsvn_fs_base/bdb/txn-table.c:99
msgid "storing transaction record"
msgstr "lagring av transaktionspost"
+#: ../libsvn_fs_base/bdb/txn-table.c:123
+msgid "allocating new transaction ID (getting 'next-key')"
+msgstr "allokering av nytt transaktions-ID (hämtar \"next-key\")"
+
+#: ../libsvn_fs_base/bdb/txn-table.c:142
+msgid "bumping next transaction key"
+msgstr "ökning av nästa transaktionssnyckel"
+
+#: ../libsvn_fs_base/bdb/txn-table.c:188
+msgid "deleting entry from 'transactions' table"
+msgstr "radering av post från \"transactions\"-tabellen"
+
+#: ../libsvn_fs_base/bdb/txn-table.c:218
+msgid "reading transaction"
+msgstr "läsning av transaktion"
+
+#: ../libsvn_fs_base/bdb/txn-table.c:251
+msgid "reading transaction list (opening cursor)"
+msgstr "läsning av transaktionslista (öppnar markör)"
+
+#: ../libsvn_fs_base/bdb/txn-table.c:314
+msgid "reading transaction list (listing keys)"
+msgstr "läsning av transaktionslista (listar nycklar)"
+
+#: ../libsvn_fs_base/bdb/txn-table.c:317
+msgid "reading transaction list (closing cursor)"
+msgstr "läsning av transaktionslista (stänger markör)"
+
#: ../libsvn_fs_base/bdb/uuids-table.c:119
msgid "get repository uuid"
msgstr "erhållande av arkivets uuid"
@@ -2473,318 +2884,405 @@ msgstr "erhållande av arkivets uuid"
msgid "set repository uuid"
msgstr "sättande av arkivets uuid"
-#: ../libsvn_fs_base/dag.c:227
+#: ../libsvn_fs_base/dag.c:228
#, c-format
msgid "Corrupt DB: initial transaction id not '0' in filesystem '%s'"
-msgstr "Trasig databas: första transaktions-idt är ej \"0\" i filsystemet \"%s\""
+msgstr "Trasig databas: första transaktions-id:t är ej \"0\" i filsystemet \"%s\""
-#: ../libsvn_fs_base/dag.c:235
+#: ../libsvn_fs_base/dag.c:236
#, c-format
msgid "Corrupt DB: initial copy id not '0' in filesystem '%s'"
msgstr "Trasig databas: första id för kopiering ej \"0\" i filsystemet \"%s\""
-#: ../libsvn_fs_base/dag.c:244
+#: ../libsvn_fs_base/dag.c:245
#, c-format
msgid "Corrupt DB: initial revision number is not '0' in filesystem '%s'"
msgstr "Trasig databas: första revisionsnumret ej \"0\" i filsystemet \"%s\""
-#: ../libsvn_fs_base/dag.c:293
-#, fuzzy
+#: ../libsvn_fs_base/dag.c:294
msgid "Attempted to get entries of a non-directory node"
-msgstr "Försök att sätta post i nod som ej är katalog"
+msgstr "Försök att hämta poster i nod som ej är katalog"
-#: ../libsvn_fs_base/dag.c:460 ../libsvn_fs_fs/dag.c:380
+#: ../libsvn_fs_base/dag.c:461 ../libsvn_fs_fs/dag.c:372
#, c-format
msgid "Attempted to create a node with an illegal name '%s'"
-msgstr "Försök att skapa en nod med ogiltigt namn '%s'"
+msgstr "Försök att skapa en nod med ogiltigt namn \"%s\""
-#: ../libsvn_fs_base/dag.c:466 ../libsvn_fs_fs/dag.c:386
+#: ../libsvn_fs_base/dag.c:467 ../libsvn_fs_fs/dag.c:378
msgid "Attempted to create entry in non-directory parent"
msgstr "Försök att skapa en post i en förälder som inte är en katalog"
-#: ../libsvn_fs_base/dag.c:472 ../libsvn_fs_base/dag.c:736
-#: ../libsvn_fs_fs/dag.c:392
+#: ../libsvn_fs_base/dag.c:473 ../libsvn_fs_base/dag.c:737
+#: ../libsvn_fs_fs/dag.c:384
#, c-format
msgid "Attempted to clone child of non-mutable node"
msgstr "Försök att stänga barn till nod som ej får ändras"
-#: ../libsvn_fs_base/dag.c:479
+#: ../libsvn_fs_base/dag.c:480
#, c-format
msgid "Attempted to create entry that already exists"
msgstr "Försök att skapa en post som redan finns"
-#: ../libsvn_fs_base/dag.c:528 ../libsvn_fs_fs/dag.c:453
+#: ../libsvn_fs_base/dag.c:529 ../libsvn_fs_fs/dag.c:462
msgid "Attempted to set entry in non-directory node"
msgstr "Försök att sätta post i nod som ej är katalog"
-#: ../libsvn_fs_base/dag.c:534 ../libsvn_fs_fs/dag.c:459
+#: ../libsvn_fs_base/dag.c:535 ../libsvn_fs_fs/dag.c:468
msgid "Attempted to set entry in immutable node"
msgstr "Försök att sätta post i nod som ej får ändras"
-#: ../libsvn_fs_base/dag.c:601
+#: ../libsvn_fs_base/dag.c:602
#, c-format
msgid "Can't set proplist on *immutable* node-revision %s"
-msgstr "Kan inte sätta egenskapslista på *icke förändringsbar* nod-revision %s"
+msgstr "Kan inte sätta egenskapslista på icke förändringsbar nodrevision %s"
-#: ../libsvn_fs_base/dag.c:742
+#: ../libsvn_fs_base/dag.c:743
#, c-format
msgid "Attempted to make a child clone with an illegal name '%s'"
msgstr "Försök att skapa en klon av ett barn med ogiltigt namn \"%s\""
-#: ../libsvn_fs_base/dag.c:859
+#: ../libsvn_fs_base/dag.c:860
#, c-format
msgid "Attempted to delete entry '%s' from *non*-directory node"
-msgstr "Försök att ta bort posten \"%s\" från nod som *ej* är katalog"
+msgstr "Försök att ta bort posten \"%s\" från nod som ej är katalog"
-#: ../libsvn_fs_base/dag.c:865
+#: ../libsvn_fs_base/dag.c:866
#, c-format
msgid "Attempted to delete entry '%s' from immutable directory node"
msgstr "Försök att ta bort posten \"%s\" från katalognod som ej är ändringsbar"
-#: ../libsvn_fs_base/dag.c:872
+#: ../libsvn_fs_base/dag.c:873
#, c-format
msgid "Attempted to delete a node with an illegal name '%s'"
msgstr "Försök att ta bort en nod med ogiltigt namn \"%s\""
-#: ../libsvn_fs_base/dag.c:887 ../libsvn_fs_base/dag.c:920
+#: ../libsvn_fs_base/dag.c:888 ../libsvn_fs_base/dag.c:921
#, c-format
msgid "Delete failed: directory has no entry '%s'"
msgstr "Radering misslyckades: katalogen har ingen post \"%s\""
-#: ../libsvn_fs_base/dag.c:969
+#: ../libsvn_fs_base/dag.c:970
#, c-format
msgid "Attempted removal of immutable node"
msgstr "Försök att ta bort icke ändringsbar nod"
-#: ../libsvn_fs_base/dag.c:1087
+#: ../libsvn_fs_base/dag.c:1088
#, c-format
msgid "Attempted to get textual contents of a *non*-file node"
msgstr "Försök att erhålla innehållet i en nod som ej är en fil"
-#: ../libsvn_fs_base/dag.c:1120
+#: ../libsvn_fs_base/dag.c:1121
#, c-format
msgid "Attempted to get length of a *non*-file node"
msgstr "Försök att erhålla längden på en nod som ej är en fil"
-#: ../libsvn_fs_base/dag.c:1147
+#: ../libsvn_fs_base/dag.c:1148
#, c-format
msgid "Attempted to get checksum of a *non*-file node"
msgstr "Försök att erhålla kontrollsumman för en nod som ej är en fil"
-#: ../libsvn_fs_base/dag.c:1186 ../libsvn_fs_base/dag.c:1243
+#: ../libsvn_fs_base/dag.c:1187 ../libsvn_fs_base/dag.c:1244
#, c-format
msgid "Attempted to set textual contents of a *non*-file node"
msgstr "Försök att sätta innehållet i en nod som ej är en fil"
-#: ../libsvn_fs_base/dag.c:1192 ../libsvn_fs_base/dag.c:1249
+#: ../libsvn_fs_base/dag.c:1193 ../libsvn_fs_base/dag.c:1250
#, c-format
msgid "Attempted to set textual contents of an immutable node"
msgstr "Försök att sätta innehållet på en icke ändringsbar nod"
-#: ../libsvn_fs_base/dag.c:1280 ../libsvn_fs_base/reps-strings.c:829
-#, fuzzy, c-format
-msgid "Checksum mismatch on representation '%s'"
-msgstr "Ingen representation \"%s\""
-
-#: ../libsvn_fs_base/dag.c:1281 ../libsvn_fs_base/reps-strings.c:830
-#: ../libsvn_fs_base/reps-strings.c:926 ../libsvn_fs_base/reps-strings.c:941
-#: ../libsvn_fs_base/tree.c:3882 ../libsvn_fs_fs/dag.c:1027
-#: ../libsvn_fs_fs/fs_fs.c:3494 ../libsvn_fs_fs/tree.c:2463
-#: ../libsvn_ra_neon/fetch.c:750 ../libsvn_ra_svn/client.c:1073
-#: ../libsvn_repos/commit.c:607 ../libsvn_repos/load-fs-vtable.c:484
-#, c-format
-msgid " expected: %s"
-msgstr ""
-
-#: ../libsvn_fs_base/dag.c:1282 ../libsvn_fs_base/reps-strings.c:831
-#: ../libsvn_fs_base/reps-strings.c:927 ../libsvn_fs_base/reps-strings.c:942
-#: ../libsvn_fs_base/tree.c:3883 ../libsvn_fs_fs/dag.c:1028
-#: ../libsvn_fs_fs/fs_fs.c:3495 ../libsvn_fs_fs/tree.c:2464
-#: ../libsvn_ra_neon/fetch.c:751 ../libsvn_ra_svn/client.c:1074
-#: ../libsvn_repos/commit.c:608 ../libsvn_repos/load-fs-vtable.c:485
+#: ../libsvn_fs_base/dag.c:1279 ../libsvn_fs_base/reps-strings.c:829
#, c-format
-msgid " actual: %s"
-msgstr ""
+msgid "Checksum mismatch on representation '%s'"
+msgstr "Felaktig kontrollsumma för representation \"%s\""
-#: ../libsvn_fs_base/dag.c:1378
+#: ../libsvn_fs_base/dag.c:1373
#, c-format
msgid "Attempted to open non-existent child node '%s'"
msgstr "Försök att öppna icke existerande barnnod \"%s\""
-#: ../libsvn_fs_base/dag.c:1384
+#: ../libsvn_fs_base/dag.c:1379
#, c-format
msgid "Attempted to open node with an illegal name '%s'"
msgstr "Försök att öppna nod med ogiltigt namn \"%s\""
-#: ../libsvn_fs_base/dag.c:1926
-#, fuzzy, c-format
+#: ../libsvn_fs_base/dag.c:1700
+#, c-format
msgid "Attempted merge tracking info change on immutable node"
-msgstr "Försök att ta bort icke ändringsbar nod"
+msgstr "Försök att ändra information för sammanslagningsföljning på icke ändringsbar nod"
-#: ../libsvn_fs_base/dag.c:1966
-#, fuzzy, c-format
+#: ../libsvn_fs_base/dag.c:1740
+#, c-format
msgid "Attempted mergeinfo count change on immutable node"
-msgstr "Försök att ta bort icke ändringsbar nod"
+msgstr "Försök att ändra antalet sammanslagningsinformationer på icke ändringsbar nod"
-#: ../libsvn_fs_base/dag.c:1978
+#: ../libsvn_fs_base/dag.c:1752
#, c-format
msgid "Invalid value (%%%s) for node revision mergeinfo count"
-msgstr ""
+msgstr "Ogiltigt värde (%%%s) för sammanslagningsräknare för nodrevision"
#: ../libsvn_fs_base/err.c:46
#, c-format
msgid "Corrupt filesystem revision %ld in filesystem '%s'"
msgstr "Trasig filsystemsrevision %ld i filsystemet \"%s\""
-#: ../libsvn_fs_base/err.c:57 ../libsvn_fs_fs/fs_fs.c:2160
+#: ../libsvn_fs_base/err.c:57 ../libsvn_fs_fs/fs_fs.c:2267
#, c-format
msgid "Reference to non-existent node '%s' in filesystem '%s'"
msgstr "Referens till icke existerande nod \"%s\" i filsystemet \"%s\""
-#: ../libsvn_fs_base/err.c:67
-#, fuzzy, c-format
+#: ../libsvn_fs_base/err.c:68
+#, c-format
msgid "No such revision %ld in filesystem '%s'"
-msgstr "Trasig filsystemsrevision %ld i filsystemet \"%s\""
+msgstr "Revision %ld finns inte i filsystemet \"%s\""
-#: ../libsvn_fs_base/err.c:79
+#: ../libsvn_fs_base/err.c:80
#, c-format
msgid "Corrupt entry in 'transactions' table for '%s' in filesystem '%s'"
msgstr "Trasig post i tabellen \"transactions\" för \"%s\" i filsystemet \"%s\""
-#: ../libsvn_fs_base/err.c:90
+#: ../libsvn_fs_base/err.c:91
#, c-format
msgid "Corrupt entry in 'copies' table for '%s' in filesystem '%s'"
msgstr "Trasig post i tabellen \"copies\" för \"%s\" i filsystemet \"%s\""
-#: ../libsvn_fs_base/err.c:101
+#: ../libsvn_fs_base/err.c:102
#, c-format
msgid "No transaction named '%s' in filesystem '%s'"
msgstr "Ingen transaktion med namnet \"%s\" i filsystemet \"%s\""
-#: ../libsvn_fs_base/err.c:112
+#: ../libsvn_fs_base/err.c:113
#, c-format
msgid "Cannot modify transaction named '%s' in filesystem '%s'"
msgstr "Kan inte ändra transaktionen \"%s\" i filsystemet \"%s\""
-#: ../libsvn_fs_base/err.c:123
+#: ../libsvn_fs_base/err.c:124
#, c-format
msgid "No copy with id '%s' in filesystem '%s'"
msgstr "Ingen kopia med id \"%s\" i filsystemet \"%s\""
-#: ../libsvn_fs_base/err.c:133
+#: ../libsvn_fs_base/err.c:134
#, c-format
msgid "Token '%s' does not point to any existing lock in filesystem '%s'"
msgstr "Identifieraren \"%s\" pekar inte på något existerande lås i filsystemet \"%s\""
-#: ../libsvn_fs_base/err.c:143
+#: ../libsvn_fs_base/err.c:144
#, c-format
msgid "No token given for path '%s' in filesystem '%s'"
msgstr "Ingen låsidentifierare angiven för sökvägen \"%s\" i filsystemet \"%s\""
-#: ../libsvn_fs_base/err.c:152
+#: ../libsvn_fs_base/err.c:153
#, c-format
msgid "Corrupt lock in 'locks' table for '%s' in filesystem '%s'"
msgstr "Trasigt lås i tabellen \"locks\" för \"%s\" i filsystemet \"%s\""
-#: ../libsvn_fs_base/err.c:162
-#, fuzzy, c-format
+#: ../libsvn_fs_base/err.c:163
+#, c-format
msgid "No record in 'node-origins' table for node id '%s' in filesystem '%s'"
-msgstr "Trasig post i tabellen \"copies\" för \"%s\" i filsystemet \"%s\""
+msgstr "Ingen post i tabellen \"node-origins\" för nod-ID \"%s\" i filsystemet \"%s\""
-#: ../libsvn_fs_base/err.c:172
-#, fuzzy, c-format
+#: ../libsvn_fs_base/err.c:173
+#, c-format
msgid "No record in 'checksum-reps' table for checksum '%s' in filesystem '%s'"
-msgstr "Trasig post i tabellen \"copies\" för \"%s\" i filsystemet \"%s\""
+msgstr "Ingen post i tabellen \"checksum-reps\" för kontrollsumman \"%s\" i filsystemet \"%s\""
-#: ../libsvn_fs_base/fs.c:86
+#: ../libsvn_fs_base/fs.c:89
#, c-format
msgid "Bad database version: got %d.%d.%d, should be at least %d.%d.%d"
msgstr "Felaktig databasversion: %d.%d.%d, måste vara minst %d.%d.%d"
-#: ../libsvn_fs_base/fs.c:97
+#: ../libsvn_fs_base/fs.c:100
#, c-format
msgid "Bad database version: compiled with %d.%d.%d, running against %d.%d.%d"
msgstr "Felaktig databasversion: kompilerad med %d.%d.%d, kör mot %d.%d.%d"
-#: ../libsvn_fs_base/fs.c:187
+#: ../libsvn_fs_base/fs.c:190
#, c-format
msgid "Berkeley DB error for filesystem '%s' while closing environment:\n"
-msgstr "Berkeley DB-fel i filsystemet '%s' då databasmiljön skulle stängas:\n"
+msgstr "Berkeley DB-fel i filsystemet \"%s\" då databasmiljön skulle stängas:\n"
-#: ../libsvn_fs_base/fs.c:538
+#: ../libsvn_fs_base/fs.c:553
#, c-format
msgid "Berkeley DB error for filesystem '%s' while creating environment:\n"
msgstr "Berkeley DB-fel i filsystemet \"%s\" då databasmiljön skulle skapas:\n"
-#: ../libsvn_fs_base/fs.c:544
+#: ../libsvn_fs_base/fs.c:559
#, c-format
msgid "Berkeley DB error for filesystem '%s' while opening environment:\n"
msgstr "Berkeley DB-fel i filsystemet \"%s\" då databasmiljön skulle öppnas:\n"
-#: ../libsvn_fs_base/fs.c:710
+#: ../libsvn_fs_base/fs.c:574
+msgid "creating 'nodes' table"
+msgstr "skapande av \"nodes\"-tabellen"
+
+#: ../libsvn_fs_base/fs.c:575
+msgid "opening 'nodes' table"
+msgstr "öppning av \"nodes\"-tabellen"
+
+#: ../libsvn_fs_base/fs.c:580
+msgid "creating 'revisions' table"
+msgstr "skapande av \"revisions\"-tabellen"
+
+#: ../libsvn_fs_base/fs.c:581
+msgid "opening 'revisions' table"
+msgstr "öppnande av \"revisions\"-tabellen"
+
+#: ../libsvn_fs_base/fs.c:586
+msgid "creating 'transactions' table"
+msgstr "skapande av \"transactions\"-tabellen"
+
+#: ../libsvn_fs_base/fs.c:587
+msgid "opening 'transactions' table"
+msgstr "öppnande av \"transactions\"-tabellen"
+
+#: ../libsvn_fs_base/fs.c:592
+msgid "creating 'copies' table"
+msgstr "skapande av \"copies\"-tabellen"
+
+#: ../libsvn_fs_base/fs.c:593
+msgid "opening 'copies' table"
+msgstr "öppnande av \"copies\"-tabellen"
+
+#: ../libsvn_fs_base/fs.c:598
+msgid "creating 'changes' table"
+msgstr "skapande av \"changes\"-tabellen"
+
+#: ../libsvn_fs_base/fs.c:599
+msgid "opening 'changes' table"
+msgstr "öppnande av \"changes\"-tabellen"
+
+#: ../libsvn_fs_base/fs.c:604
+msgid "creating 'representations' table"
+msgstr "skapande av \"representations\"-tabellen"
+
+#: ../libsvn_fs_base/fs.c:605
+msgid "opening 'representations' table"
+msgstr "öppnande av \"representations\"-tabellen"
+
+#: ../libsvn_fs_base/fs.c:610
+msgid "creating 'strings' table"
+msgstr "skapande av \"strings\"-tabellen"
+
+#: ../libsvn_fs_base/fs.c:611
+msgid "opening 'strings' table"
+msgstr "öppnande av \"strings\"-tabellen"
+
+#: ../libsvn_fs_base/fs.c:616
+msgid "creating 'uuids' table"
+msgstr "skapande av \"uuids\"-tabellen"
+
+#: ../libsvn_fs_base/fs.c:617
+msgid "opening 'uuids' table"
+msgstr "öppnande av \"uuids\"-tabellen"
+
+#: ../libsvn_fs_base/fs.c:622
+msgid "creating 'locks' table"
+msgstr "skapande av \"locks\"-tabellen"
+
+#: ../libsvn_fs_base/fs.c:623
+msgid "opening 'locks' table"
+msgstr "öppnande av \"locks\"-tabellen"
+
+#: ../libsvn_fs_base/fs.c:628
+msgid "creating 'lock-tokens' table"
+msgstr "skapande av \"lock-tokens\"-tabellen"
+
+#: ../libsvn_fs_base/fs.c:629
+msgid "opening 'lock-tokens' table"
+msgstr "öppnande av \"lock-tokens\"-tabellen"
+
+#: ../libsvn_fs_base/fs.c:637
+msgid "creating 'node-origins' table"
+msgstr "skapande av \"node-origins\"-tabellen"
+
+#: ../libsvn_fs_base/fs.c:638
+msgid "opening 'node-origins' table"
+msgstr "öppnande av \"node-origins\"-tabellen"
+
+#: ../libsvn_fs_base/fs.c:647
+msgid "creating 'miscellaneous' table"
+msgstr "skapande av \"miscellaneous\"-tabellen"
+
+#: ../libsvn_fs_base/fs.c:648
+msgid "opening 'miscellaneous' table"
+msgstr "öppnande av \"miscellaneous\"-tabellen"
+
+#: ../libsvn_fs_base/fs.c:657
+msgid "creating 'checksum-reps' table"
+msgstr "skapande av \"checksum-reps\"-tabellen"
+
+#: ../libsvn_fs_base/fs.c:658
+msgid "opening 'checksum-reps' table"
+msgstr "öppnande av \"checksum-reps\"-tabellen"
+
+#: ../libsvn_fs_base/fs.c:730
#, c-format
msgid "The '%s' feature requires version %d of the filesystem schema; filesystem '%s' uses only version %d"
-msgstr ""
+msgstr "Funktionen \"%s\" behöver version %d av filsystemsschemat; filsystemet \"%s\" använder bara version %d"
-#: ../libsvn_fs_base/fs.c:729
+#: ../libsvn_fs_base/fs.c:749
#, c-format
msgid "Expected FS format '%d'; found format '%d'"
-msgstr "Förväntat format på filsystemet '%d'; hittade '%d'"
+msgstr "Förväntat format på filsystemet \"%d\"; hittade \"%d\""
+
+#: ../libsvn_fs_base/fs.c:1215
+#, c-format
+msgid "BDB repositories do not support incremental hotcopy"
+msgstr "BDB-arkiv stöder inte successiv kopiering under drift"
-#: ../libsvn_fs_base/fs.c:1272
-#, fuzzy
+#: ../libsvn_fs_base/fs.c:1319
msgid ""
"Error copying logfile; the DB_LOG_AUTOREMOVE feature\n"
"may be interfering with the hotcopy algorithm. If\n"
"the problem persists, try deactivating this feature\n"
"in DB_CONFIG"
msgstr ""
-"Fel vid kopiering av loggfil; DB_LOG_AUTOREMOVE-funktionen kan fungera dåligt\n"
-"med hotcopy-algoritmen. OM problemet kvarstår, försök med att slå av\n"
-"funktionen i DB_CONFIG."
+"Fel vid kopiering av loggfil; DB_LOG_AUTOREMOVE-funktionen kan fungera\n"
+"dåligt med algoritmen för kopiering under drift. Om problemet kvarstår,\n"
+"försök med att slå av funktionen i DB_CONFIG"
-#: ../libsvn_fs_base/fs.c:1291
-#, fuzzy
+#: ../libsvn_fs_base/fs.c:1338
msgid ""
"Error running catastrophic recovery on hotcopy; the\n"
"DB_LOG_AUTOREMOVE feature may be interfering with the\n"
"hotcopy algorithm. If the problem persists, try deactivating\n"
"this feature in DB_CONFIG"
msgstr ""
-"Fel vid katastrofåterställning vid \"hotcopy\". DB_LOG_AUTOREMOVE-funktionen\n"
-"kan vålla problem för \"hotcopy\"-algoritmen. Prova med att avaktivera\n"
-"denna funktion i DB_CONFIG om problemet kvarstår."
+"Fel vid katastrofåterställning vid kopiering under drift.\n"
+"DB_LOG_AUTOREMOVE-funktionen kan vålla problem för algoritmen för\n"
+"kopiering under drift. Prova med att avaktivera\n"
+"denna funktion i DB_CONFIG om problemet kvarstår"
-#: ../libsvn_fs_base/fs.c:1336
+#: ../libsvn_fs_base/fs.c:1383
msgid "Module for working with a Berkeley DB repository."
msgstr "Modul för att arbeta med ett Berkeley DB-arkiv."
-#: ../libsvn_fs_base/fs.c:1372
+#: ../libsvn_fs_base/fs.c:1430
#, c-format
msgid "Unsupported FS loader version (%d) for bdb"
msgstr "Versionen för FS-laddaren (%d) stöds ej för bdb"
-#: ../libsvn_fs_base/lock.c:104 ../libsvn_fs_base/lock.c:109
-#: ../libsvn_fs_fs/lock.c:755 ../libsvn_fs_fs/lock.c:760
-#: ../libsvn_fs_fs/lock.c:782
+#: ../libsvn_fs_base/lock.c:108 ../libsvn_fs_base/lock.c:113
+#: ../libsvn_fs_fs/lock.c:786 ../libsvn_fs_fs/lock.c:791
+#: ../libsvn_fs_fs/lock.c:813
#, c-format
msgid "Path '%s' doesn't exist in HEAD revision"
msgstr "Sökvägen \"%s\" finns inte i huvudrevision"
-#: ../libsvn_fs_base/lock.c:457 ../libsvn_fs_fs/lock.c:652
+#: ../libsvn_fs_base/lock.c:540 ../libsvn_fs_fs/lock.c:682
#, c-format
msgid "Cannot verify lock on path '%s'; no username available"
-msgstr "Kan inte kontrollera låset för sökvägen '%s'; användarnamn saknas"
+msgstr "Kan inte kontrollera låset för sökvägen \"%s\"; användarnamn saknas"
-#: ../libsvn_fs_base/lock.c:463 ../libsvn_fs_fs/lock.c:658
-#, fuzzy, c-format
+#: ../libsvn_fs_base/lock.c:546 ../libsvn_fs_fs/lock.c:688
+#, c-format
msgid "User '%s' does not own lock on path '%s' (currently locked by '%s')"
-msgstr "Användaren %s äger inget lås på sökvägen \"%s\" (för tillfället låst av %s)"
+msgstr "Användaren \"%s\" äger inget lås på sökvägen \"%s\" (för tillfället låst av \"%s\")"
-#: ../libsvn_fs_base/lock.c:470 ../libsvn_fs_fs/lock.c:665
+#: ../libsvn_fs_base/lock.c:552 ../libsvn_fs_fs/lock.c:694
#, c-format
msgid "Cannot verify lock on path '%s'; no matching lock-token available"
-msgstr "Kan inte kontrollera lås på sökvägen '%s'; ingen matchande låsidentifierare tillgänglig"
+msgstr "Kan inte kontrollera lås på sökvägen \"%s\"; ingen matchande låsidentifierare tillgänglig"
#. Helper macro that evaluates to an error message indicating that
#. the representation referred to by X has an unknown node kind.
@@ -2799,734 +3297,845 @@ msgstr "Representationen är ej av typen \"delta\""
#: ../libsvn_fs_base/reps-strings.c:380
msgid "Svndiff source length inconsistency"
-msgstr "Längden på Svndiff-källan stämmer ej"
+msgstr "Längden på svndiff-källan stämmer ej"
-#: ../libsvn_fs_base/reps-strings.c:507
+#: ../libsvn_fs_base/reps-strings.c:506
#, c-format
msgid "Diff version inconsistencies in representation '%s'"
msgstr "Diffversioner stämmer ej i representationen \"%s\""
-#: ../libsvn_fs_base/reps-strings.c:533
+#: ../libsvn_fs_base/reps-strings.c:532
#, c-format
msgid "Corruption detected whilst reading delta chain from representation '%s' to '%s'"
msgstr "Trasig data upptäcktes vid läsning av delta-kedja från representationen \"%s\" till \"%s\""
-#: ../libsvn_fs_base/reps-strings.c:797
+#: ../libsvn_fs_base/reps-strings.c:798
#, c-format
msgid "Rep contents are too large: got %s, limit is %s"
msgstr "Innehåll i representation är för stort: erhöll %s, gränsen är %s"
-#: ../libsvn_fs_base/reps-strings.c:813
-#, fuzzy, c-format
+#: ../libsvn_fs_base/reps-strings.c:814
+#, c-format
msgid "Failure reading representation '%s'"
msgstr "Fel vid läsning av representationen \"%s\""
-#: ../libsvn_fs_base/reps-strings.c:925
-#, fuzzy, c-format
+#: ../libsvn_fs_base/reps-strings.c:924
+#, c-format
msgid "MD5 checksum mismatch on representation '%s'"
-msgstr "Ingen representation \"%s\""
+msgstr "Felaktig MD5-kontrollsumma för representation \"%s\""
-#: ../libsvn_fs_base/reps-strings.c:940
-#, fuzzy, c-format
+#: ../libsvn_fs_base/reps-strings.c:934
+#, c-format
msgid "SHA1 checksum mismatch on representation '%s'"
-msgstr "Ingen representation \"%s\""
+msgstr "Felaktig SHA1-kontrollsumma för representation \"%s\""
-#: ../libsvn_fs_base/reps-strings.c:956
+#: ../libsvn_fs_base/reps-strings.c:945
msgid "Null rep, but offset past zero already"
msgstr "Tom representation, men positionen är redan förbi noll"
-#: ../libsvn_fs_base/reps-strings.c:1070 ../libsvn_fs_base/reps-strings.c:1261
+#: ../libsvn_fs_base/reps-strings.c:1062 ../libsvn_fs_base/reps-strings.c:1253
#, c-format
msgid "Rep '%s' is not mutable"
msgstr "Representationen \"%s\" är ej ändringsbar"
-#: ../libsvn_fs_base/reps-strings.c:1085
+#: ../libsvn_fs_base/reps-strings.c:1077
#, c-format
msgid "Rep '%s' both mutable and non-fulltext"
msgstr "Representationen \"%s\" är både ändringsbar och ej fulltext"
-#: ../libsvn_fs_base/reps-strings.c:1380
+#: ../libsvn_fs_base/reps-strings.c:1372
msgid "Failed to get new string key"
msgstr "Misslyckades med att erhålla ny nyckel för strings-tabellen"
-#: ../libsvn_fs_base/reps-strings.c:1457
+#: ../libsvn_fs_base/reps-strings.c:1449
#, c-format
msgid "Attempt to deltify '%s' against itself"
msgstr "Försök att deltifiera \"%s\" mot sig själv"
-#: ../libsvn_fs_base/reps-strings.c:1528 ../libsvn_fs_base/reps-strings.c:1721
+#: ../libsvn_fs_base/reps-strings.c:1522
#, c-format
msgid "Failed to calculate MD5 digest for '%s'"
-msgstr "Kunde inte beräkna MD5-kntrollsumma för \"%s\""
-
-#: ../libsvn_fs_base/reps-strings.c:1670
-#, fuzzy, c-format
-msgid "Attempt to obliterate '%s' using itself "
-msgstr "Försök att deltifiera \"%s\" mot sig själv"
+msgstr "Kunde inte beräkna MD5-kontrollsumma för \"%s\""
-#: ../libsvn_fs_base/revs-txns.c:73
+#: ../libsvn_fs_base/revs-txns.c:72
#, c-format
msgid "Transaction is not dead: '%s'"
msgstr "Transaktionen är ej död: \"%s\""
-#: ../libsvn_fs_base/revs-txns.c:76
+#: ../libsvn_fs_base/revs-txns.c:75
#, c-format
msgid "Transaction is dead: '%s'"
msgstr "Transaktionen är död: \"%s\""
-#: ../libsvn_fs_base/revs-txns.c:274 ../libsvn_fs_fs/fs_fs.c:7358
-#, fuzzy, c-format
+#: ../libsvn_fs_base/revs-txns.c:272 ../libsvn_fs_fs/fs_fs.c:9755
+#, c-format
msgid "revprop '%s' has unexpected value in filesystem"
-msgstr "\"%s\" är ingen fil i filsystemet \"%s\""
+msgstr "revisionsegenskapen \"%s\" har oväntat värde i filsystemet"
-#: ../libsvn_fs_base/revs-txns.c:1231
+#: ../libsvn_fs_base/revs-txns.c:1030
msgid "Transaction aborted, but cleanup failed"
msgstr "Transaktionen avbruten, men städning misslyckades"
-#: ../libsvn_fs_base/tree.c:772 ../libsvn_fs_fs/tree.c:695
+#: ../libsvn_fs_base/trail.c:99
+msgid "beginning Berkeley DB transaction"
+msgstr "början av Berkeley DB-transaktion"
+
+#: ../libsvn_fs_base/trail.c:134
+msgid "aborting Berkeley DB transaction"
+msgstr "avbrott i Berkeley DB-transaktion"
+
+#: ../libsvn_fs_base/trail.c:158
+msgid "committing Berkeley DB transaction"
+msgstr "slutförande av Berkeley DB-transaktion"
+
+#: ../libsvn_fs_base/tree.c:772 ../libsvn_fs_fs/tree.c:1065
#, c-format
msgid "Failure opening '%s'"
msgstr "Kan inte öppna \"%s\""
-#: ../libsvn_fs_base/tree.c:1404 ../libsvn_fs_fs/tree.c:1124
+#: ../libsvn_fs_base/tree.c:1403 ../libsvn_fs_fs/tree.c:1516
msgid "Cannot compare property value between two different filesystems"
msgstr "Kan inte jämföra egenskapsvärde mellan två olika filsystem"
-#: ../libsvn_fs_base/tree.c:1850 ../libsvn_fs_base/tree.c:1920
+#: ../libsvn_fs_base/tree.c:1849 ../libsvn_fs_base/tree.c:1919
msgid "Corrupt DB: faulty predecessor count"
msgstr "Trasig databas: felaktigt föregångarantal"
-#: ../libsvn_fs_base/tree.c:1977 ../libsvn_fs_base/tree.c:2996
-#: ../libsvn_fs_fs/tree.c:1157
+#: ../libsvn_fs_base/tree.c:1976
#, c-format
msgid "Unexpected immutable node at '%s'"
msgstr "Oväntad icke ändringsbar nod på \"%s\""
-#: ../libsvn_fs_base/tree.c:1998 ../libsvn_fs_fs/tree.c:1178
+#: ../libsvn_fs_base/tree.c:1997 ../libsvn_fs_fs/tree.c:1546
+#: ../libsvn_repos/commit.c:1244
#, c-format
msgid "Conflict at '%s'"
msgstr "Konflikt på \"%s\""
-#: ../libsvn_fs_base/tree.c:2051 ../libsvn_fs_base/tree.c:2845
-#: ../libsvn_fs_fs/tree.c:1229 ../libsvn_fs_fs/tree.c:1787
+#: ../libsvn_fs_base/tree.c:2050 ../libsvn_fs_base/tree.c:2802
+#: ../libsvn_fs_fs/tree.c:1597 ../libsvn_fs_fs/tree.c:2134
msgid "Bad merge; ancestor, source, and target not all in same fs"
-msgstr "Felaktig sammanslagning (merge); ursprung, källa och mål är inte samtliga i samma filsystem"
+msgstr "Felaktig sammanslagning; ursprung, källa och mål är inte samtliga i samma filsystem"
-#: ../libsvn_fs_base/tree.c:2067 ../libsvn_fs_fs/tree.c:1245
+#: ../libsvn_fs_base/tree.c:2066 ../libsvn_fs_fs/tree.c:1613
#, c-format
msgid "Bad merge; target '%s' has id '%s', same as ancestor"
-msgstr "Felaktig sammanslagning (merge) målet \"%s\" har id \"%s\", samma som ursprunget"
+msgstr "Felaktig sammanslagning; målet \"%s\" har id \"%s\", samma som ursprunget"
-#: ../libsvn_fs_base/tree.c:2611
-#, fuzzy, c-format
+#: ../libsvn_fs_base/tree.c:2610
+#, c-format
msgid "Transaction '%s' out-of-date with respect to revision '%s'"
msgstr "Transaktionen \"%s\" är inaktuell jämfört med revision \"%s\""
-#: ../libsvn_fs_base/tree.c:2929
+#: ../libsvn_fs_base/tree.c:2886
#, c-format
msgid "Cannot deltify revisions prior to r%ld"
-msgstr ""
-
-#: ../libsvn_fs_base/tree.c:3001
-#, fuzzy, c-format
-msgid "Cannot obliterate '%s' as it is not a file"
-msgstr "Sökvägen \"%s\" är inte en fil"
+msgstr "Kan inte deltifiera revisioner äldre än r%ld"
-#: ../libsvn_fs_base/tree.c:3136 ../libsvn_fs_fs/tree.c:1924
+#: ../libsvn_fs_base/tree.c:3004 ../libsvn_fs_fs/tree.c:2289
msgid "The root directory cannot be deleted"
msgstr "Rotkatalogen kan inte raderas"
-#: ../libsvn_fs_base/tree.c:3359 ../libsvn_fs_fs/tree.c:2005
+#: ../libsvn_fs_base/tree.c:3217 ../libsvn_fs_fs/tree.c:2359
#, c-format
msgid "Cannot copy between two different filesystems ('%s' and '%s')"
msgstr "Kan inte kopiera mellan två olika filsystem (\"%s\" och \"%s\")"
-#: ../libsvn_fs_base/tree.c:3368 ../libsvn_fs_fs/tree.c:2011
+#: ../libsvn_fs_base/tree.c:3226 ../libsvn_fs_fs/tree.c:2365
msgid "Copy from mutable tree not currently supported"
msgstr "Kopiering från ändringsbart träd stöds ej för närvarande"
-#: ../libsvn_fs_base/tree.c:3881 ../libsvn_fs_fs/tree.c:2462
-#, fuzzy, c-format
+#: ../libsvn_fs_base/tree.c:3736 ../libsvn_fs_fs/tree.c:2842
+#, c-format
msgid "Base checksum mismatch on '%s'"
-msgstr "Felaktig kontrollsumma"
+msgstr "Felaktig baskontrollsumma för \"%s\""
-#: ../libsvn_fs_base/tree.c:4130 ../libsvn_fs_fs/tree.c:2694
+#: ../libsvn_fs_base/tree.c:3969 ../libsvn_fs_fs/tree.c:3057
msgid "Cannot compare file contents between two different filesystems"
msgstr "Kan inte jämföra filinnehåll mellan två olika filsystem"
-#: ../libsvn_fs_base/tree.c:4139 ../libsvn_fs_base/tree.c:4144
-#: ../libsvn_fs_fs/tree.c:2703 ../libsvn_fs_fs/tree.c:2708
-#: ../libsvn_ra/compat.c:671
-#, c-format
-msgid "'%s' is not a file"
-msgstr "\"%s\" är ingen fil"
-
-#: ../libsvn_fs_base/tree.c:5169 ../libsvn_fs_base/tree.c:5357
+#: ../libsvn_fs_base/tree.c:5013 ../libsvn_fs_base/tree.c:5188
#, c-format
msgid "Node-revision '%s' claims to have mergeinfo but doesn't"
-msgstr ""
+msgstr "Nodrevision \"%s\" påstår sig ha sammanslagningsinformation men det har den inte"
-#: ../libsvn_fs_base/tree.c:5193
+#: ../libsvn_fs_base/tree.c:5049
#, c-format
msgid "Node-revision '%s' claims to sit atop a tree containing mergeinfo but is not a directory"
-msgstr ""
-
-#: ../libsvn_fs_fs/caching.c:75
-msgid "Bad ID in cache"
-msgstr ""
+msgstr "Nodrevision \"%s\" påstår sig sitta på ett träd med sammanslagningsinformation men är ingen katalog"
-#: ../libsvn_fs_fs/dag.c:435 ../libsvn_ra_serf/serf.c:845
+#: ../libsvn_fs_fs/dag.c:426 ../libsvn_fs_fs/dag.c:442
+#: ../libsvn_ra_serf/serf.c:1038 ../libsvn_ra_serf/serf.c:1101
msgid "Can't get entries of non-directory"
msgstr "Kan inte erhålla poster för något som ej är en katalog"
-#: ../libsvn_fs_fs/dag.c:542
+#: ../libsvn_fs_fs/dag.c:551
#, c-format
msgid "Can't increment mergeinfo count on node-revision %%s to negative value %%%s"
-msgstr ""
+msgstr "Kan inte öka sammanslagningsräknaren på nodrevision %%s till negativt värde %%%s"
-#: ../libsvn_fs_fs/dag.c:553
-#, fuzzy, c-format
+#: ../libsvn_fs_fs/dag.c:562
+#, c-format
msgid "Can't increment mergeinfo count on *file* node-revision %%s to %%%s (> 1)"
-msgstr "Kan inte sätta egenskapslista på *icke förändringsbar* nod-revision %s"
-
-#: ../libsvn_fs_fs/dag.c:1026 ../libsvn_ra_neon/fetch.c:749
-#: ../libsvn_ra_svn/client.c:1072
-#, fuzzy, c-format
-msgid "Checksum mismatch for '%s'"
-msgstr "Felaktig kontrollsumma"
+msgstr "Kan inte öka sammanslagningsräknaren på filnodrevision %%s till %%%s (> 1)"
-#: ../libsvn_fs_fs/dag.c:1131
+#: ../libsvn_fs_fs/dag.c:1134
msgid "Empty noderev in cache"
-msgstr ""
-
-#: ../libsvn_fs_fs/dag.c:1141
-msgid "Kindless noderev in cache"
-msgstr ""
-
-#: ../libsvn_fs_fs/dag.c:1148
-#, fuzzy, c-format
-msgid "Unknown kind for noderev in cache: '%c'"
-msgstr "Okänd nodtyp för representationen \"%s\""
-
-#: ../libsvn_fs_fs/dag.c:1155
-msgid "Unterminated ID in cache"
-msgstr ""
+msgstr "Tom nodrevision i cache"
-#: ../libsvn_fs_fs/dag.c:1160
+#: ../libsvn_fs_fs/dag.c:1326
#, c-format
-msgid "Bogus ID '%s' in cache"
-msgstr ""
+msgid "Attempted to update ancestry of non-mutable node"
+msgstr "Försök att uppdatera ursprung till icke ändringsbar nod"
-#: ../libsvn_fs_fs/dag.c:1167
-msgid "No created path"
-msgstr ""
-
-#: ../libsvn_fs_fs/dag.c:1193
-#, fuzzy, c-format
-msgid "Unknown node type in cache: '%c'"
-msgstr "Okänd nodtyp för \"%s\""
-
-#: ../libsvn_fs_fs/fs.c:80
+#: ../libsvn_fs_fs/fs.c:83
#, c-format
msgid "Can't fetch FSFS shared data"
msgstr "Kan inte hämta delad data i FSFS"
-#: ../libsvn_fs_fs/fs.c:96
-#, c-format
-msgid "Can't create FSFS write-lock mutex"
-msgstr "Kan inte skapa skrivlås+mutex i FSFS"
-
-#: ../libsvn_fs_fs/fs.c:103
-#, fuzzy, c-format
-msgid "Can't create FSFS txn-current mutex"
-msgstr "Kan inte skapa mutex för transaktionslista i FSFS"
-
-#: ../libsvn_fs_fs/fs.c:112
-#, c-format
-msgid "Can't create FSFS txn list mutex"
-msgstr "Kan inte skapa mutex för transaktionslista i FSFS"
-
-#: ../libsvn_fs_fs/fs.c:119
+#: ../libsvn_fs_fs/fs.c:107
#, c-format
msgid "Can't store FSFS shared data"
msgstr "Kan inte lagra delad data i FSFS"
-#: ../libsvn_fs_fs/fs.c:332
+#: ../libsvn_fs_fs/fs.c:401
msgid "Module for working with a plain file (FSFS) repository."
msgstr "Modul för att arbeta med ett arkiv bestående av vanliga filer (FSFS)."
-#: ../libsvn_fs_fs/fs.c:368
+#: ../libsvn_fs_fs/fs.c:451
#, c-format
msgid "Unsupported FS loader version (%d) for fsfs"
msgstr "Versionen för FS-laddaren (%d) stöds ej för fsfs"
-#: ../libsvn_fs_fs/fs_fs.c:288
-#, fuzzy, c-format
-msgid "Revision file '%s' does not exist, and r%ld is not packed"
-msgstr "\"%s\" finns inte i revision %ld"
-
-#: ../libsvn_fs_fs/fs_fs.c:535
-#, c-format
-msgid "Can't grab FSFS txn list mutex"
-msgstr "Kan inte låsa mutex för transaktionslistan i FSFS"
-
-#: ../libsvn_fs_fs/fs_fs.c:543
-#, c-format
-msgid "Can't ungrab FSFS txn list mutex"
-msgstr "Kan inte låsa upp mutex för transaktionslistan i FSFS"
-
-#: ../libsvn_fs_fs/fs_fs.c:597
-#, fuzzy, c-format
-msgid "Can't grab FSFS mutex for '%s'"
-msgstr "Kan inte allokera mutex för filsystemsbiblioteket"
-
-#: ../libsvn_fs_fs/fs_fs.c:623
-#, fuzzy, c-format
-msgid "Can't ungrab FSFS mutex for '%s'"
-msgstr "Kan inte släppa lås för FS"
-
-#: ../libsvn_fs_fs/fs_fs.c:694
+#: ../libsvn_fs_fs/fs_fs.c:727
#, c-format
msgid "Can't unlock unknown transaction '%s'"
msgstr "Kan inte låsa upp okänd transaktion \"%s\""
-#: ../libsvn_fs_fs/fs_fs.c:698
+#: ../libsvn_fs_fs/fs_fs.c:731
#, c-format
msgid "Can't unlock nonlocked transaction '%s'"
msgstr "Kan inte låsa upp olåst transaktion \"%s\""
-#: ../libsvn_fs_fs/fs_fs.c:705
+#: ../libsvn_fs_fs/fs_fs.c:738
#, c-format
msgid "Can't unlock prototype revision lockfile for transaction '%s'"
msgstr "Kan inte låsa upp låsfilen för revisionsprototypfilen i transaktionen \"%s\""
-#: ../libsvn_fs_fs/fs_fs.c:711
+#: ../libsvn_fs_fs/fs_fs.c:744
#, c-format
msgid "Can't close prototype revision lockfile for transaction '%s'"
msgstr "Kan inte stänga revisionsprototypfilens låsfil i transaktionen \"%s\""
-#: ../libsvn_fs_fs/fs_fs.c:773
+#: ../libsvn_fs_fs/fs_fs.c:806
#, c-format
msgid "Cannot write to the prototype revision file of transaction '%s' because a previous representation is currently being written by this process"
msgstr ""
"Kan inte skriva till revisionsprototypfilen i transaktionen \"%s\" då en\n"
"tidigare representation just skrivs av denna process"
-#: ../libsvn_fs_fs/fs_fs.c:809
+#: ../libsvn_fs_fs/fs_fs.c:842
#, c-format
msgid "Cannot write to the prototype revision file of transaction '%s' because a previous representation is currently being written by another process"
msgstr ""
"Kan inte skriva till revisionsprototypfilen i transaktionen \"%s\" då en\n"
"tidigare representation just skrivs av en annan process<"
-#: ../libsvn_fs_fs/fs_fs.c:816 ../libsvn_subr/io.c:1702
+#: ../libsvn_fs_fs/fs_fs.c:849 ../libsvn_subr/io.c:2007
#, c-format
msgid "Can't get exclusive lock on file '%s'"
msgstr "Kan inte ta ut exklusivt lås på filen \"%s\""
-#: ../libsvn_fs_fs/fs_fs.c:928
-#, fuzzy, c-format
-msgid "Format file '%s' contains unexpected non-digit '%c' within '%s'"
-msgstr "Första raden i \"%s\" innehåller något som inte är en siffra"
+#: ../libsvn_fs_fs/fs_fs.c:968
+#, c-format
+msgid "%s file '%s' contains unexpected non-digit '%c' within '%s'"
+msgstr "Filen %s (\"%s\") innehåller den oväntade icke-siffran \"%c\" i \"%s\""
-#: ../libsvn_fs_fs/fs_fs.c:977
-#, fuzzy, c-format
+#: ../libsvn_fs_fs/fs_fs.c:1027
+#, c-format
msgid "Can't read first line of format file '%s'"
-msgstr "Kan inte läsa längdrad i filen \"%s\""
+msgstr "Kan inte läsa första raden i formatfilen \"%s\""
-#: ../libsvn_fs_fs/fs_fs.c:1021
-#, fuzzy, c-format
+#: ../libsvn_fs_fs/fs_fs.c:1064
+#, c-format
msgid "'%s' contains invalid filesystem format option '%s'"
-msgstr "\"%s\" är ingen fil i filsystemet \"%s\""
+msgstr "\"%s\" innehåller den felaktiga filsystemsformatväljaren \"%s\""
-#: ../libsvn_fs_fs/fs_fs.c:1091
-#, fuzzy, c-format
+#: ../libsvn_fs_fs/fs_fs.c:1130
+#, c-format
+msgid "Found format '%d', only created by unreleased dev builds; see http://subversion.apache.org/docs/release-notes/1.7#revprop-packing"
+msgstr "Hittade formatet \"%d\" som bara skapas av outgivna utvecklingsbyggen; se http://subversion.apache.org/docs/release-notes/1.7#revprop-packing"
+
+#: ../libsvn_fs_fs/fs_fs.c:1141
+#, c-format
msgid "Expected FS format between '1' and '%d'; found format '%d'"
-msgstr "Förväntat format på filsystemet '%d'; hittade '%d'"
+msgstr "Förväntat filsystemsformat mellan \"1\" och \"%d\"; hittade \"%d\""
-#: ../libsvn_fs_fs/fs_fs.c:1335
+#: ../libsvn_fs_fs/fs_fs.c:1581
#, c-format
msgid "'%s' is not a regular file. Please move it out of the way and try again"
-msgstr ""
+msgstr "\"%s\" är inte en vanlig fil. Flytta den ur vägen och försök igen"
-#: ../libsvn_fs_fs/fs_fs.c:1593
+#: ../libsvn_fs_fs/fs_fs.c:1752
#, c-format
-msgid "Failed to create hotcopy at '%s'. The file '%s' is missing from the source repository. Please create this file, for instance by running 'svnadmin upgrade %s'"
-msgstr ""
+msgid "Can't read '%s'"
+msgstr "Kan inte läsa \"%s\""
-#: ../libsvn_fs_fs/fs_fs.c:1830 ../libsvn_fs_fs/fs_fs.c:1844
-msgid "Found malformed header in revision file"
-msgstr "Hittade felaktigt huvud i revisionsfil"
+#: ../libsvn_fs_fs/fs_fs.c:1815 ../libsvn_fs_fs/fs_fs.c:1834
+#, c-format
+msgid "Found malformed header '%s' in revision file"
+msgstr "Hittade felaktigt huvud \"%s\" i revisionsfil"
-#: ../libsvn_fs_fs/fs_fs.c:1878
-#, fuzzy, c-format
+#: ../libsvn_fs_fs/fs_fs.c:1870
+#, c-format
msgid "Invalid revision number '%ld'"
-msgstr "Ogiltigt revisionsnummer"
+msgstr "Ogiltigt revisionsnummer \"%ld\""
-#: ../libsvn_fs_fs/fs_fs.c:1893 ../libsvn_fs_fs/fs_fs.c:1919
-#: ../libsvn_fs_fs/fs_fs.c:2933 ../libsvn_fs_fs/fs_fs.c:2971
-#: ../libsvn_repos/log.c:1644 ../libsvn_repos/log.c:1648
+#: ../libsvn_fs_fs/fs_fs.c:1885 ../libsvn_fs_fs/fs_fs.c:1940
+#: ../libsvn_fs_fs/fs_fs.c:1951 ../libsvn_repos/log.c:2268
+#: ../libsvn_repos/log.c:2272
#, c-format
msgid "No such revision %ld"
msgstr "Revisionen %ld finns inte"
-#: ../libsvn_fs_fs/fs_fs.c:1976
-msgid "Manifest offset too large"
-msgstr ""
+#: ../libsvn_fs_fs/fs_fs.c:1985
+msgid "Unexpected EOF"
+msgstr "Oväntat filslut"
+
+#: ../libsvn_fs_fs/fs_fs.c:1992
+#, c-format
+msgid "Number '%s' invalid or too large"
+msgstr "Talet \"%s\" ogiltigt eller för stort"
-#: ../libsvn_fs_fs/fs_fs.c:2086 ../libsvn_fs_fs/fs_fs.c:2100
-#: ../libsvn_fs_fs/fs_fs.c:2108 ../libsvn_fs_fs/fs_fs.c:2116
-#: ../libsvn_fs_fs/fs_fs.c:2125 ../libsvn_fs_fs/fs_fs.c:2138
-#: ../libsvn_fs_fs/fs_fs.c:2147
-#, fuzzy
+#: ../libsvn_fs_fs/fs_fs.c:2159 ../libsvn_fs_fs/fs_fs.c:2173
+#: ../libsvn_fs_fs/fs_fs.c:2181 ../libsvn_fs_fs/fs_fs.c:2189
+#: ../libsvn_fs_fs/fs_fs.c:2198 ../libsvn_fs_fs/fs_fs.c:2211
+#: ../libsvn_fs_fs/fs_fs.c:2220
msgid "Malformed text representation offset line in node-rev"
-msgstr "Felaktig rad med textrep-position i node-rev"
+msgstr "Felaktig rad med textrepresentationsposition i node-rev"
+
+#: ../libsvn_fs_fs/fs_fs.c:2251
+#, c-format
+msgid "While reading representation offsets for node-revision '%s':"
+msgstr "Fel vid läsning av representationsposition för nodrevision \"%s\":"
-#: ../libsvn_fs_fs/fs_fs.c:2226
-#, fuzzy
+#: ../libsvn_fs_fs/fs_fs.c:2406
msgid "Missing id field in node-rev"
-msgstr "Typfält saknas i node-rev"
+msgstr "ID-fält saknas i node-rev"
+
+#: ../libsvn_fs_fs/fs_fs.c:2420
+#, c-format
+msgid "Missing kind field in node-rev '%s'"
+msgstr "Typfält saknas i node-rev \"%s\""
+
+#: ../libsvn_fs_fs/fs_fs.c:2455
+#, c-format
+msgid "Missing cpath field in node-rev '%s'"
+msgstr "Fältet cpath saknas i node-rev \"%s\""
+
+#: ../libsvn_fs_fs/fs_fs.c:2483 ../libsvn_fs_fs/fs_fs.c:2490
+#, c-format
+msgid "Malformed copyroot line in node-rev '%s'"
+msgstr "Felaktig copyroot-rad i node-rev \"%s\""
+
+#: ../libsvn_fs_fs/fs_fs.c:2507 ../libsvn_fs_fs/fs_fs.c:2514
+#, c-format
+msgid "Malformed copyfrom line in node-rev '%s'"
+msgstr "Felaktig copyfrom-rad i node-rev \"%s\""
-#: ../libsvn_fs_fs/fs_fs.c:2238
-msgid "Missing kind field in node-rev"
-msgstr "Typfält saknas i node-rev"
+#: ../libsvn_fs_fs/fs_fs.c:2683 ../libsvn_fs_fs/fs_fs.c:7629
+#, c-format
+msgid "Attempted to write to non-transaction '%s'"
+msgstr "Försök att skriva till \"%s\" som inte är en transaktion"
-#: ../libsvn_fs_fs/fs_fs.c:2272
-msgid "Missing cpath in node-rev"
-msgstr "cpath saknas i node-rev"
+#: ../libsvn_fs_fs/fs_fs.c:2820
+#, c-format
+msgid "Malformed representation header at %s"
+msgstr "Felaktigt representationshuvud vid %s"
-#: ../libsvn_fs_fs/fs_fs.c:2299 ../libsvn_fs_fs/fs_fs.c:2305
-msgid "Malformed copyroot line in node-rev"
-msgstr "Felaktig copyroot-rad i node-rev"
+#: ../libsvn_fs_fs/fs_fs.c:2852
+#, c-format
+msgid "Missing node-id in node-rev at r%ld (offset %s)"
+msgstr "Nod-id saknas i nodrevisionen i r%ld (position %s)"
-#: ../libsvn_fs_fs/fs_fs.c:2323 ../libsvn_fs_fs/fs_fs.c:2329
-msgid "Malformed copyfrom line in node-rev"
-msgstr "Felaktig copyfrom-rad i node-rev"
+#: ../libsvn_fs_fs/fs_fs.c:2861
+#, c-format
+msgid "Corrupt node-id '%s' in node-rev at r%ld (offset %s)"
+msgstr "Trasig nod-id \"%s\" i nodrevisionen i r%ld (position %s)"
-#: ../libsvn_fs_fs/fs_fs.c:2489 ../libsvn_fs_fs/fs_fs.c:5472
-msgid "Attempted to write to non-transaction"
-msgstr "Försök att skriva i något som inte är en transaktion"
+#: ../libsvn_fs_fs/fs_fs.c:2952
+#, c-format
+msgid "Revision file (r%ld) lacks trailing newline"
+msgstr "Avslutande radslut saknas i revisionsfil (r%ld)"
-#: ../libsvn_fs_fs/fs_fs.c:2582
-msgid "Malformed representation header"
-msgstr "Felaktigt representationshuvud"
+#: ../libsvn_fs_fs/fs_fs.c:2966
+#, c-format
+msgid "Final line in revision file (r%ld) longer than 64 characters"
+msgstr "Den sista raden i revisionsfilen (r%ld) är längre än 64 tecken"
-#: ../libsvn_fs_fs/fs_fs.c:2610
-msgid "Missing node-id in node-rev"
-msgstr "node-id saknas i node-rev"
+#: ../libsvn_fs_fs/fs_fs.c:2981
+#, c-format
+msgid "Final line in revision file r%ld missing space"
+msgstr "Den sista raden i revisionsfilen r%ld saknar mellanslag"
-#: ../libsvn_fs_fs/fs_fs.c:2616
-msgid "Corrupt node-id in node-rev"
-msgstr "Trasig node-id i node-rev"
+#: ../libsvn_fs_fs/fs_fs.c:3685
+#, c-format
+msgid "Packed revprop manifest for r%ld too small"
+msgstr "Packad innehållsförteckning för revisionsegenskaper för r%ld är för liten"
-#: ../libsvn_fs_fs/fs_fs.c:2692
+#: ../libsvn_fs_fs/fs_fs.c:3742
#, c-format
-msgid "Revision file lacks trailing newline"
-msgstr "Avslutande radslut saknas i revisionsfil"
+msgid "Revprop pack for revision r%ld contains revprops for r%ld .. r%ld"
+msgstr "Packade revisionsegenskaper för r%ld innehåller egenskaper för r%ld .. r%ld"
-#: ../libsvn_fs_fs/fs_fs.c:2705
+#: ../libsvn_fs_fs/fs_fs.c:3753
#, c-format
-msgid "Final line in revision file longer than 64 characters"
-msgstr "Den sista raden i en revisionsfil är längre än 64 tecken"
+msgid "Revprop pack for revision r%ld starts at non-packed revisions r%ld"
+msgstr "Packade revisionsegenskaper för r%ld börjar vid icke-packade r%ld"
+
+#: ../libsvn_fs_fs/fs_fs.c:3762
+msgid "Header end not found"
+msgstr "Slutet på datahuvudet hittades ej"
-#: ../libsvn_fs_fs/fs_fs.c:2719
-msgid "Final line in revision file missing space"
-msgstr "Den sista raden i en revisionsfil saknar mellanslag"
+#: ../libsvn_fs_fs/fs_fs.c:3790
+msgid "Packed revprop size exceeds pack file size"
+msgstr "Packad revisionsegenskap större än packfilen"
+
+#: ../libsvn_fs_fs/fs_fs.c:3849
+#, c-format
+msgid "No such packed revision %ld"
+msgstr "Packade revisionen %ld finns inte"
-#: ../libsvn_fs_fs/fs_fs.c:3050
+#: ../libsvn_fs_fs/fs_fs.c:3889
+#, c-format
+msgid "Failed to read revprop pack file for r%ld"
+msgstr "Kunde inte läsa packfilen för revisionsegenskaper för r%ld"
+
+#: ../libsvn_fs_fs/fs_fs.c:3896
+#, c-format
+msgid "Revprop pack file for r%ld is corrupt"
+msgstr "Trasig packfil för revisionsegenskaper för r%ld"
+
+#: ../libsvn_fs_fs/fs_fs.c:3969
+#, c-format
+msgid "Could not read revprops for revision %ld"
+msgstr "Kunde inte läsa revisionsegenskaper för revision %ld"
+
+#: ../libsvn_fs_fs/fs_fs.c:4198
+#, c-format
+msgid "Packed file '%s' misses a tag"
+msgstr "Packad fil \"%s\" saknar en etikett"
+
+#: ../libsvn_fs_fs/fs_fs.c:4536
msgid "Malformed svndiff data in representation"
msgstr "Felaktigt svndiff-data i representation"
-#: ../libsvn_fs_fs/fs_fs.c:3242 ../libsvn_fs_fs/fs_fs.c:3255
+#: ../libsvn_fs_fs/fs_fs.c:4972 ../libsvn_fs_fs/fs_fs.c:4991
msgid "Reading one svndiff window read beyond the end of the representation"
msgstr "Hamnade efter slutet på representationen vid läsning av ett svndiff-fönster"
-#: ../libsvn_fs_fs/fs_fs.c:3395
-msgid "svndiff data requested non-existent source"
-msgstr "svndiff-data krävde icke existerande källdata"
-
-#: ../libsvn_fs_fs/fs_fs.c:3401
-msgid "svndiff requested position beyond end of stream"
-msgstr "svndiff krävde data efter slutet av strömmen"
-
-#: ../libsvn_fs_fs/fs_fs.c:3424 ../libsvn_fs_fs/fs_fs.c:3441
+#: ../libsvn_fs_fs/fs_fs.c:5079
msgid "svndiff window length is corrupt"
msgstr "Fönsterlängd i svndiff är trasig"
-#: ../libsvn_fs_fs/fs_fs.c:3493
-#, fuzzy
+#: ../libsvn_fs_fs/fs_fs.c:5247
msgid "Checksum mismatch while reading representation"
-msgstr ""
-"Felaktig kontrollsumma vid läsning av representation:\n"
-" väntade: %s\n"
-" fick: %s\n"
+msgstr "Felaktig kontrollsumma vid läsning av representation"
-#: ../libsvn_fs_fs/fs_fs.c:3790 ../libsvn_fs_fs/fs_fs.c:3803
-#: ../libsvn_fs_fs/fs_fs.c:3809 ../libsvn_fs_fs/fs_fs.c:6772
-#: ../libsvn_fs_fs/fs_fs.c:6781 ../libsvn_fs_fs/fs_fs.c:6787
-msgid "Directory entry corrupt"
-msgstr "Katalogpost trasig"
+#: ../libsvn_fs_fs/fs_fs.c:5610 ../libsvn_fs_fs/fs_fs.c:5624
+#: ../libsvn_fs_fs/fs_fs.c:5631
+#, c-format
+msgid "Directory entry corrupt in '%s'"
+msgstr "Katalogpost trasig i \"%s\""
-#: ../libsvn_fs_fs/fs_fs.c:4211 ../libsvn_fs_fs/fs_fs.c:4216
-#: ../libsvn_fs_fs/fs_fs.c:4222 ../libsvn_fs_fs/fs_fs.c:4239
-#: ../libsvn_fs_fs/fs_fs.c:4272 ../libsvn_fs_fs/fs_fs.c:4292
-#: ../libsvn_fs_fs/fs_fs.c:4326 ../libsvn_fs_fs/fs_fs.c:4331
+#: ../libsvn_fs_fs/fs_fs.c:6109 ../libsvn_fs_fs/fs_fs.c:6114
+#: ../libsvn_fs_fs/fs_fs.c:6120 ../libsvn_fs_fs/fs_fs.c:6137
+#: ../libsvn_fs_fs/fs_fs.c:6170 ../libsvn_fs_fs/fs_fs.c:6190
+#: ../libsvn_fs_fs/fs_fs.c:6225 ../libsvn_fs_fs/fs_fs.c:6230
msgid "Invalid changes line in rev-file"
msgstr "Ogiltig changes-rad i rev-fil"
-#: ../libsvn_fs_fs/fs_fs.c:4265
+#: ../libsvn_fs_fs/fs_fs.c:6163
msgid "Invalid change kind in rev file"
msgstr "Ogiltig ändringstyp i rev-fil"
-#: ../libsvn_fs_fs/fs_fs.c:4285
+#: ../libsvn_fs_fs/fs_fs.c:6183
msgid "Invalid text-mod flag in rev-file"
msgstr "Ogiltig text-mod-flagga i rev-fil"
-#: ../libsvn_fs_fs/fs_fs.c:4305
+#: ../libsvn_fs_fs/fs_fs.c:6203
msgid "Invalid prop-mod flag in rev-file"
msgstr "Ogiltig prop-mod-flagga i rev-fil"
-#: ../libsvn_fs_fs/fs_fs.c:4482
+#: ../libsvn_fs_fs/fs_fs.c:6461
msgid "Copying from transactions not allowed"
msgstr "Det är inte tillåtet att kopiera från transaktioner"
-#: ../libsvn_fs_fs/fs_fs.c:4638
+#: ../libsvn_fs_fs/fs_fs.c:6594
#, c-format
msgid "Unable to create transaction directory in '%s' for revision %ld"
msgstr "Kan inte skapa transaktionskatalog i \"%s\" för revision %ld"
-#: ../libsvn_fs_fs/fs_fs.c:4761
+#: ../libsvn_fs_fs/fs_fs.c:6659
msgid "Internal error: a null transaction id was passed to get_txn_proplist()"
-msgstr ""
+msgstr "Internt fel: transaktions-id:t noll gavs till get_txn_proplist"
-#: ../libsvn_fs_fs/fs_fs.c:4920 ../libsvn_fs_fs/fs_fs.c:4927
+#: ../libsvn_fs_fs/fs_fs.c:6818 ../libsvn_fs_fs/fs_fs.c:6825
msgid "next-id file corrupt"
msgstr "next-id-filen är trasig"
-#: ../libsvn_fs_fs/fs_fs.c:5023
-msgid "Transaction cleanup failed"
-msgstr "Städning efter transaktion misslyckades"
+#: ../libsvn_fs_fs/fs_fs.c:6921
+#, c-format
+msgid "Transaction '%s' cleanup failed"
+msgstr "Städning efter transaktion \"%s\" misslyckades"
-#: ../libsvn_fs_fs/fs_fs.c:5136
-msgid "Invalid change type"
-msgstr "Ogiltig ändringstyp"
+#: ../libsvn_fs_fs/fs_fs.c:7061
+#, c-format
+msgid "Invalid change type %d"
+msgstr "Ogiltig ändringstyp %d"
-#: ../libsvn_fs_fs/fs_fs.c:5491
+#: ../libsvn_fs_fs/fs_fs.c:7649
msgid "Can't set text contents of a directory"
msgstr "Kan inte sätta textinnehåll i en katalog"
-#: ../libsvn_fs_fs/fs_fs.c:5575 ../libsvn_fs_fs/fs_fs.c:5580
-#: ../libsvn_fs_fs/fs_fs.c:5587
-#, fuzzy
+#: ../libsvn_fs_fs/fs_fs.c:7735 ../libsvn_fs_fs/fs_fs.c:7740
+#: ../libsvn_fs_fs/fs_fs.c:7747
msgid "Corrupt 'current' file"
-msgstr "current-filen är trasig"
+msgstr "Trasig \"current\"-fil"
+
+#: ../libsvn_fs_fs/fs_fs.c:8007
+#, c-format
+msgid "predecessor count for the root node-revision is wrong: found (%d+%ld != %d), committing r%ld"
+msgstr "föregångarräknaren för rotnodsrevisionen är felaktig: %d+%ld != %d hittades, arkiverar r%ld"
+
+#: ../libsvn_fs_fs/fs_fs.c:8142
+msgid "Truncated protorev file detected"
+msgstr "Avhuggen protorev-fil upptäcktes"
-#: ../libsvn_fs_fs/fs_fs.c:6058
+#: ../libsvn_fs_fs/fs_fs.c:8542
msgid "Transaction out of date"
msgstr "Transaktionen är inaktuell"
-#: ../libsvn_fs_fs/fs_fs.c:6234
-#, fuzzy
-msgid "Obliteration of already-packed revision is not supported"
-msgstr "blame kan inte köras på arbetsrevisionen"
-
-#: ../libsvn_fs_fs/fs_fs.c:6714
-#, fuzzy
+#: ../libsvn_fs_fs/fs_fs.c:9036
msgid "Recovery encountered a non-directory node"
-msgstr "Försök att sätta post i nod som ej är katalog"
+msgstr "En nod som ej är katalog påträffades vid återställning"
-#: ../libsvn_fs_fs/fs_fs.c:6736
+#: ../libsvn_fs_fs/fs_fs.c:9058
msgid "Recovery encountered a deltified directory representation"
-msgstr ""
+msgstr "En deltafierad katalogrepresentation påträffades vid återställning"
+
+#: ../libsvn_fs_fs/fs_fs.c:9094 ../libsvn_fs_fs/fs_fs.c:9103
+#: ../libsvn_fs_fs/fs_fs.c:9109
+msgid "Directory entry corrupt"
+msgstr "Katalogpost trasig"
-#: ../libsvn_fs_fs/fs_fs.c:6886
-#, fuzzy, c-format
+#: ../libsvn_fs_fs/fs_fs.c:9282
+#, c-format
msgid "Expected current rev to be <= %ld but found %ld"
-msgstr "\"%s\" borde vara en katalog, men den är en fil"
+msgstr "Den aktuella revisionen förväntades vara högst %ld men är %ld"
-#: ../libsvn_fs_fs/fs_fs.c:6959
+#: ../libsvn_fs_fs/fs_fs.c:9339
#, c-format
msgid "Revision %ld has a revs file but no revprops file"
-msgstr ""
+msgstr "Revision %ld har en revisionsfil men ingen revisionsegenskapsfil "
-#: ../libsvn_fs_fs/fs_fs.c:6967
+#: ../libsvn_fs_fs/fs_fs.c:9346
+#, c-format
+msgid "Revision %ld has a revs file but the revprops file is inaccessible"
+msgstr "Revision %ld har en revisionsfil men revisionsegenskapsfilen är oåtkomlig"
+
+#: ../libsvn_fs_fs/fs_fs.c:9355
#, c-format
msgid "Revision %ld has a non-file where its revprops file should be"
-msgstr ""
+msgstr "Revision %ld har något som inte är en fil där dess revisionsegenskapsfil borde vara"
-#: ../libsvn_fs_fs/fs_fs.c:7145
+#: ../libsvn_fs_fs/fs_fs.c:9533
#, c-format
msgid "Node origin for '%s' exists with a different value (%s) than what we were about to store (%s)"
-msgstr ""
+msgstr "Nodursprunget för \"%s\" finns med ett annat värde (%s) än vad som just skulle lagras (%s)"
-#: ../libsvn_fs_fs/fs_fs.c:7251
-msgid "No such transaction"
-msgstr "Transaktionen finns inte"
+#: ../libsvn_fs_fs/fs_fs.c:9639
+#, c-format
+msgid "No such transaction '%s'"
+msgstr "Transaktionen \"%s\" finns inte"
-#: ../libsvn_fs_fs/fs_fs.c:7711
-msgid "FS format too old to pack, please upgrade."
-msgstr ""
+#: ../libsvn_fs_fs/fs_fs.c:10356
+#, c-format
+msgid "FSFS format (%d) too old to pack; please upgrade the filesystem."
+msgstr "FSFS-formatet (%d) är för gammalt för att packas; var god uppgradera filsystemet."
+
+#: ../libsvn_fs_fs/fs_fs.c:10635 ../libsvn_subr/io.c:248
+#, c-format
+msgid "Error converting entry in directory '%s' to UTF-8"
+msgstr "Fel vid omvandling av en post i katalogen \"%s\" till UTF-8"
+
+#: ../libsvn_fs_fs/fs_fs.c:10672 ../libsvn_subr/io.c:1021
+#, c-format
+msgid "Source '%s' is not a directory"
+msgstr "Källan \"%s\" är ingen katalog"
+
+#: ../libsvn_fs_fs/fs_fs.c:10678 ../libsvn_subr/io.c:1027
+#, c-format
+msgid "Destination '%s' is not a directory"
+msgstr "Destinationen \"%s\" är ingen katalog"
+
+#: ../libsvn_fs_fs/fs_fs.c:10750 ../libsvn_subr/io.c:1104
+#: ../libsvn_subr/io.c:2485
+#, c-format
+msgid "Can't read directory '%s'"
+msgstr "Kan inte läsa katalogen \"%s\""
+
+#: ../libsvn_fs_fs/fs_fs.c:10755 ../libsvn_subr/io.c:1109
+#: ../libsvn_subr/io.c:2490 ../libsvn_subr/io.c:3995
+#, c-format
+msgid "Error closing directory '%s'"
+msgstr "Fel vid stängning av katalogen \"%s\""
+
+#: ../libsvn_fs_fs/fs_fs.c:11038
+#, c-format
+msgid "The FSFS format (%d) of the hotcopy source does not match the FSFS format (%d) of the hotcopy destination; please upgrade both repositories to the same format"
+msgstr "FSFS-formatet (%d) hos källan till en kopia under drift motsvarar inte FSFS-formatet (%d) hos målet; var god uppgradera bägge arkiven till samma format"
-#: ../libsvn_fs_fs/lock.c:117
+#: ../libsvn_fs_fs/fs_fs.c:11047
+msgid "The UUID of the hotcopy source does not match the UUID of the hotcopy destination"
+msgstr "UUID:n för källan till en kopia under drift motsvarar inte UUID:n för målet"
+
+#: ../libsvn_fs_fs/fs_fs.c:11054
+msgid "The sharding layout configuration of the hotcopy source does not match the sharding layout configuration of the hotcopy destination"
+msgstr "Splittringsarrangemanget för källan till en kopia under drift motsvarar inte målets splittringsarrangemang"
+
+#: ../libsvn_fs_fs/fs_fs.c:11180
+#, c-format
+msgid "Failed to create hotcopy at '%s'. The file '%s' is missing from the source repository. Please create this file, for instance by running 'svnadmin upgrade %s'"
+msgstr "Misslyckades att skapa kopia under drift vid \"%s\". Filen \"%s\" saknades från källarkivet. Skapa denna fil, till exempel genom att köra \"svnadmin upgrade %s\""
+
+#: ../libsvn_fs_fs/fs_fs.c:11206
+#, c-format
+msgid "The hotcopy destination already contains more revisions (%lu) than the hotcopy source contains (%lu); are source and destination swapped?"
+msgstr "Målet för en kopia under drift innehåller redan fler revisioner (%lu) än källan gör (%lu); har källa och mål bytt plats?"
+
+#: ../libsvn_fs_fs/fs_fs.c:11242
+#, c-format
+msgid "The hotcopy destination already contains more packed revisions (%lu) than the hotcopy source contains (%lu)"
+msgstr "Målet för en kopia under drift innehåller redan fler packade revisioner (%lu) än källan gör (%lu)"
+
+#: ../libsvn_fs_fs/fs_fs.c:11355
+#, c-format
+msgid "The assumed HEAD revision (%lu) of the hotcopy source has been packed while the hotcopy was in progress; please restart the hotcopy operation"
+msgstr "Den förmodade huvudrevisionen (%lu) för källan till en kopia under drift packades medan kopieringen skedde; var god starta om kopieringen"
+
+#: ../libsvn_fs_fs/fs_fs.c:11370
+#, c-format
+msgid "Revision %lu disappeared from the hotcopy source while hotcopy was in progress"
+msgstr "Revision %lu försvann från källan till en kopiering under drift medan kopieringen skedde"
+
+#: ../libsvn_fs_fs/lock.c:120
#, c-format
msgid "Corrupt lockfile for path '%s' in filesystem '%s'"
-msgstr "Trasig låsfil för säkvägen \"%s\" i filsystemet \"%s\""
+msgstr "Trasig låsfil för sökvägen \"%s\" i filsystemet \"%s\""
-#: ../libsvn_fs_fs/lock.c:219
+#: ../libsvn_fs_fs/lock.c:228
#, c-format
msgid "Cannot write lock/entries hashfile '%s'"
msgstr "Kan inte skriva fil med låsinformation och poster \"%s\""
-#: ../libsvn_fs_fs/lock.c:271
+#: ../libsvn_fs_fs/lock.c:280
#, c-format
msgid "Can't parse lock/entries hashfile '%s'"
-msgstr "Kan inte anaylsera fil med lås och poster \"%s\""
+msgstr "Kan inte analysera fil med lås och poster \"%s\""
-#: ../libsvn_fs_fs/lock.c:787
+#: ../libsvn_fs_fs/lock.c:818
#, c-format
msgid "Lock failed: newer version of '%s' exists"
-msgstr "LÃ¥sning misslyckades: nyare version av '%s' finns"
+msgstr "LÃ¥sning misslyckades: nyare version av \"%s\" finns"
+
+#: ../libsvn_fs_fs/rep-cache.c:113
+msgid "Couldn't open rep-cache database"
+msgstr "Kunde inte öppna \"rep-cache\"-databasen"
-#: ../libsvn_fs_fs/rep-cache.c:96 ../libsvn_fs_fs/rep-cache.c:136
+#: ../libsvn_fs_fs/rep-cache.c:242 ../libsvn_fs_fs/rep-cache.c:287
msgid "Only SHA1 checksums can be used as keys in the rep_cache table.\n"
-msgstr ""
+msgstr "Endast SHA1-kontrollsummor kan användas som nycklar i \"rep_cache\"-tabellen.\n"
-#: ../libsvn_fs_fs/rep-cache.c:153
+#: ../libsvn_fs_fs/rep-cache.c:323
#, c-format
msgid "Representation key for checksum '%%s' exists in filesystem '%%s' with a different value (%%ld,%%%s,%%%s,%%%s) than what we were about to store (%%ld,%%%s,%%%s,%%%s)"
-msgstr ""
+msgstr "En representationsnyckel för kontrollsumman \"%%s\" finns i filsystemet \"%%s\" med ett värde (%%ld,%%%s,%%%s,%%%s) som skiljer sig från det som skulle lagras (%%ld,%%%s,%%%s,%%%s)"
+
+#: ../libsvn_fs_fs/tree.c:2209 ../libsvn_subr/path.c:1233
+#, c-format
+msgid "Invalid control character '0x%02x' in path '%s'"
+msgstr "Ogiltigt kontrolltecken \"0x%02x\" i sökvägen \"%s\""
-#: ../libsvn_fs_fs/tree.c:3435
+#: ../libsvn_fs_fs/tree.c:3808
#, c-format
msgid "Node-revision #'%s' claims to have mergeinfo but doesn't"
-msgstr ""
+msgstr "Nodrevision nr \"%s\" påstår sig ha sammanslagningsinformation men det har den inte"
-#: ../libsvn_fs_fs/tree.c:3557
+#: ../libsvn_fs_fs/tree.c:3924
#, c-format
msgid "Node-revision '%s@%ld' claims to have mergeinfo but doesn't"
-msgstr ""
+msgstr "Nodrevision \"%s@%ld\" påstår sig ha sammanslagningsinformation men det har den inte"
-#: ../libsvn_fs_fs/tree.c:3678
+#: ../libsvn_fs_fs/tree.c:4124
#, c-format
msgid "Querying mergeinfo requires version %d of the FSFS filesystem schema; filesystem '%s' uses only version %d"
-msgstr ""
+msgstr "För att begära sammanslagningsinformation krävs version %d av FSFS-filsystemsschemat; filsystemet \"%s\" har bara version %d"
-#: ../libsvn_fs_util/fs-util.c:104
+#: ../libsvn_fs_util/fs-util.c:154
msgid "Filesystem object has not been opened yet"
msgstr "Filsystemsobjektet har inte öppnats ännu"
-#: ../libsvn_fs_util/fs-util.c:107
+#: ../libsvn_fs_util/fs-util.c:157
msgid "Filesystem object already open"
msgstr "Filsystemet redan öppet"
-#: ../libsvn_ra/compat.c:180
+#: ../libsvn_ra/compat.c:182
#, c-format
msgid "Missing changed-path information for '%s' in revision %ld"
-msgstr "Saknar information om änrade sökvägar för \"%s\" i revision %ld"
+msgstr "Saknar information om ändrade sökvägar för \"%s\" i revision %ld"
-#: ../libsvn_ra/compat.c:307 ../libsvn_ra/compat.c:554
-#, fuzzy, c-format
+#: ../libsvn_ra/compat.c:326 ../libsvn_ra/compat.c:570
+#, c-format
msgid "Path '%s' doesn't exist in revision %ld"
msgstr "Sökvägen \"%s\" finns inte i revision %ld"
-#: ../libsvn_ra/compat.c:384
+#: ../libsvn_ra/compat.c:403
#, c-format
msgid "'%s' in revision %ld is an unrelated object"
msgstr "\"%s\" i revision %ld är ett orelaterat objekt"
-#: ../libsvn_ra/compat.c:844 ../libsvn_ra/ra_loader.c:1201
-#, fuzzy, c-format
+#: ../libsvn_ra/compat.c:843 ../libsvn_ra/ra_loader.c:1291
+#, c-format
msgid "Invalid peg revision %ld"
-msgstr "Ogiltig slutrevision %ld"
+msgstr "Ogiltig fixerad revision %ld"
-#: ../libsvn_ra/compat.c:847 ../libsvn_ra/ra_loader.c:1204
-#: ../libsvn_repos/rev_hunt.c:208 ../libsvn_repos/rev_hunt.c:323
+#: ../libsvn_ra/compat.c:846 ../libsvn_ra/ra_loader.c:1294
+#: ../libsvn_repos/rev_hunt.c:214 ../libsvn_repos/rev_hunt.c:329
#, c-format
msgid "Invalid end revision %ld"
msgstr "Ogiltig slutrevision %ld"
-#: ../libsvn_ra/compat.c:850 ../libsvn_ra/ra_loader.c:1207
-#, fuzzy
+#: ../libsvn_ra/compat.c:849 ../libsvn_ra/ra_loader.c:1297
msgid "Peg revision must precede end revision"
-msgstr "Startrevisionen måste komma före slutrevisionen"
+msgstr "Fixerad revision måste komma före slutrevisionen"
-#: ../libsvn_ra/ra_loader.c:234
+#: ../libsvn_ra/ra_loader.c:215
#, c-format
msgid "Mismatched RA version for '%s': found %d.%d.%d%s, expected %d.%d.%d%s"
-msgstr "Versioner stämmer ej i insticksmodulen '%s' för RA: hittade %d.%d.%d%s, väntade %d.%d.%d%s"
+msgstr "Versioner stämmer ej i insticksmodulen \"%s\" för RA: hittade %d.%d.%d%s, väntade %d.%d.%d%s"
-#: ../libsvn_ra/ra_loader.c:419
-#, fuzzy, c-format
+#: ../libsvn_ra/ra_loader.c:292 ../libsvn_ra_serf/serf.c:594
+#, c-format
+msgid "Illegal repository URL '%s'"
+msgstr "Ogiltig arkiv-URL \"%s\""
+
+#: ../libsvn_ra/ra_loader.c:399
+#, c-format
msgid "Invalid config: unknown HTTP library '%s'"
-msgstr "Felaktig konfiguration: okänd http-authtype \"%s\""
+msgstr "Felaktig konfiguration: okänt HTTP-bibliotek \"%s\""
-#: ../libsvn_ra/ra_loader.c:483
+#: ../libsvn_ra/ra_loader.c:468
#, c-format
msgid "Unrecognized URL scheme for '%s'"
msgstr "Okänt URL-schema för \"%s\""
-#: ../libsvn_ra/ra_loader.c:518
-#, fuzzy, c-format
+#: ../libsvn_ra/ra_loader.c:519
+#, c-format
msgid "Repository UUID '%s' doesn't match expected UUID '%s'"
-msgstr "UUID:n på källarkivet (%s) matchar inte den förväntade UUID:n (%s)"
+msgstr "Arkivets UUID \"%s\" stämmer inte med den förväntade UUID:n \"%s\""
+
+#: ../libsvn_ra/ra_loader.c:540
+#, c-format
+msgid "'%s' isn't in the same repository as '%s'"
+msgstr "\"%s\" är inte i samma arkiv som \"%s\""
-#: ../libsvn_ra/ra_loader.c:568
-#, fuzzy, c-format
+#: ../libsvn_ra/ra_loader.c:564
+#, c-format
msgid "'%s' isn't a child of session URL '%s'"
-msgstr "\"%s\" är ingen fil i filsystemet \"%s\""
+msgstr "\"%s\" är inget barn i sessions-URL:en \"%s\""
-#: ../libsvn_ra/ra_loader.c:591 ../libsvn_ra_neon/session.c:1155
-#: ../libsvn_ra_svn/client.c:2271
-#, fuzzy, c-format
+#: ../libsvn_ra/ra_loader.c:580 ../libsvn_ra_svn/client.c:2465
+#, c-format
msgid "'%s' isn't a child of repository root URL '%s'"
-msgstr "\"%s\" är inte i samma arkiv som \"%s\""
+msgstr "\"%s\" är inget barn i arkivrots-URL:en \"%s\""
-#: ../libsvn_ra/ra_loader.c:638
-#, fuzzy, c-format
+#: ../libsvn_ra/ra_loader.c:624
+#, c-format
msgid "Specifying 'old_value_p' is not allowed when the '%s' capability is not advertised, and could indicate a bug in your client"
-msgstr "Lagring av egenskapen \"%s\" som ej är \"vanlig\" är inte tillåtet via arkivets gränssnitt och kan tyda på en bugg i din klient"
-
-#: ../libsvn_ra/ra_loader.c:1238
-msgid "Obliterate is not supported by this Repository Access method"
-msgstr ""
+msgstr "Angivelse av \"old_value_p\" tillåts inte när inte förmågan \"%s\" har annonserats, och kan tyda på ett fel i klienten"
-#: ../libsvn_ra/ra_loader.c:1284
+#: ../libsvn_ra/ra_loader.c:1445
#, c-format
msgid " - handles '%s' scheme\n"
msgstr " - hanterar schemat \"%s\"\n"
-#: ../libsvn_ra/ra_loader.c:1368
+#: ../libsvn_ra/ra_loader.c:1538
#, c-format
msgid "Unrecognized URL scheme '%s'"
msgstr "Okänt URL-schema \"%s\""
-#: ../libsvn_ra/util.c:66
+#: ../libsvn_ra/util.c:55
+msgid "<repository>"
+msgstr "<arkiv>"
+
+#: ../libsvn_ra/util.c:73
#, c-format
msgid "Retrieval of mergeinfo unsupported by '%s'"
-msgstr ""
+msgstr "Hämtning av sammanslagningsinformation stöds inte av \"%s\""
+
+#: ../libsvn_ra/util.c:99
+#, c-format
+msgid "The '%s' feature is not supported by '%s'"
+msgstr "Funktionen \"%s\" stöds inte av \"%s\""
+
+#: ../libsvn_ra/util.c:142
+#, c-format
+msgid "Lock was stolen by '%s'; unable to remove it"
+msgstr "LÃ¥s stals av \"%s\"; kunde inte tas bort"
+
+#: ../libsvn_ra/util.c:183
+#, c-format
+msgid "Unable to determine local hostname"
+msgstr "Det gick inte att ta reda på det lokala värdnamnet"
+
+#: ../libsvn_ra/util.c:278
+#, c-format
+msgid "Couldn't get lock on destination repos after %d attempts"
+msgstr "Kunde inte låsa destinationsarkivet efter %d försök"
+
+#: ../libsvn_ra_local/ra_plugin.c:162
+msgid "memory-cache-size invalid"
+msgstr "Ogiltig \"memory-cache-size\""
#. ----------------------------------------------------------------
#. ** The RA vtable routines **
-#: ../libsvn_ra_local/ra_plugin.c:401
+#: ../libsvn_ra_local/ra_plugin.c:503
msgid "Module for accessing a repository on local disk."
msgstr "Modul för åtkomst av arkiv på disk lokalt."
-#: ../libsvn_ra_local/ra_plugin.c:468
+#: ../libsvn_ra_local/ra_plugin.c:579
msgid "Unable to open an ra_local session to URL"
msgstr "Kunde inte öppna en ra_local-session till URL:en"
-#: ../libsvn_ra_local/ra_plugin.c:503
-#, fuzzy, c-format
+#: ../libsvn_ra_local/ra_plugin.c:612 ../libsvn_ra_serf/serf.c:586
+#, c-format
msgid "URL '%s' is not a child of the session's repository root URL '%s'"
-msgstr "\"%s\" är inte i samma arkiv som \"%s\""
+msgstr "URL:en \"%s\" är inte ett barn av sessionens arkivrots-URL \"%s\""
-#: ../libsvn_ra_local/ra_plugin.c:1414 ../libsvn_ra_neon/options.c:452
-#: ../libsvn_ra_serf/options.c:622 ../libsvn_ra_svn/client.c:2464
+#: ../libsvn_ra_local/ra_plugin.c:1140 ../libsvn_ra_local/ra_plugin.c:1597
+#: ../libsvn_ra_serf/util.c:2476
+#, c-format
+msgid "'%s' path not found"
+msgstr "Sökvägen \"%s\" finns inte"
+
+#: ../libsvn_ra_local/ra_plugin.c:1539 ../libsvn_ra_serf/options.c:675
+#: ../libsvn_ra_svn/client.c:2666
#, c-format
msgid "Don't know anything about capability '%s'"
-msgstr ""
+msgstr "Okänd förmåga \"%s\""
-#: ../libsvn_ra_local/ra_plugin.c:1537
+#: ../libsvn_ra_local/ra_plugin.c:1745
#, c-format
msgid "Unsupported RA loader version (%d) for ra_local"
msgstr "Versionen för RA-laddaren (%d) stöds ej för ra_local"
@@ -3536,1003 +4145,790 @@ msgstr "Versionen för RA-laddaren (%d) stöds ej för ra_local"
msgid "Unable to open repository '%s'"
msgstr "Kunde inte öppna arkivet \"%s\""
-#: ../libsvn_ra_neon/commit.c:245
-msgid "Could not fetch the Version Resource URL (needed during an import or when it is missing from the local, cached props)"
-msgstr "Kunde inte hämta versionsresurs-URL:en (den vehövs vid import, eller då den saknas i den lokala egenskapscachen)"
+#: ../libsvn_ra_serf/commit.c:219
+#, c-format
+msgid "%s of '%s': %d %s"
+msgstr "%s av \"%s\": %d %s"
-#: ../libsvn_ra_neon/commit.c:503
-#, fuzzy, c-format
-msgid "File or directory '%s' is out of date; try updating"
-msgstr "Filen eller katalogen \"%s\" är troligen inaktuell"
+#: ../libsvn_ra_serf/commit.c:319
+msgid "No Location header received"
+msgstr "Inget \"Location\"-huvud mottaget"
-#: ../libsvn_ra_neon/commit.c:511
-msgid "The CHECKOUT response did not contain a 'Location:' header"
-msgstr "Svaret för CHECKOUT innehåll inget \"Location:\"-huvud"
+#: ../libsvn_ra_serf/commit.c:329
+msgid "Error parsing Location header value"
+msgstr "Syntaxfel i \"Location\"-huvudets värde"
-#: ../libsvn_ra_neon/commit.c:521 ../libsvn_ra_neon/props.c:216
-#: ../libsvn_ra_neon/util.c:566 ../libsvn_ra_serf/commit.c:1648
-#: ../libsvn_ra_serf/commit.c:2055 ../libsvn_ra_serf/update.c:2130
-#, fuzzy, c-format
-msgid "Unable to parse URL '%s'"
-msgstr "Neon kunde inte analysera URL:en '%s'"
-
-#: ../libsvn_ra_neon/commit.c:1049 ../libsvn_ra_serf/commit.c:1913
+#: ../libsvn_ra_serf/commit.c:439
#, c-format
-msgid "File '%s' already exists"
-msgstr "Filen \"%s\" finns redan"
+msgid "Directory '%s' is out of date; try updating"
+msgstr "Katalogen \"%s\" är inaktuell; försök att uppdatera"
-#: ../libsvn_ra_neon/commit.c:1176
+#: ../libsvn_ra_serf/commit.c:527 ../libsvn_repos/commit.c:512
#, c-format
-msgid "Could not write svndiff to temp file"
-msgstr "Kunde inte skriva svndiff till temporär fil"
-
-#: ../libsvn_ra_neon/fetch.c:246
-msgid "Could not save the URL of the version resource"
-msgstr "Kunde inte spara URL:en för versionsresursen"
-
-#: ../libsvn_ra_neon/fetch.c:439
-msgid "Could not get content-type from response"
-msgstr "Kunde inte erhålla fältet \"content-type\" från serverns respons"
-
-#: ../libsvn_ra_neon/fetch.c:532
-msgid "Could not save file"
-msgstr "Kunde inte spara filen"
-
-#: ../libsvn_ra_neon/fetch.c:995
-msgid "Server response missing the expected deadprop-count property"
-msgstr "Svaret från servern saknar den förväntade deadprop-count-egenskapen"
-
-#: ../libsvn_ra_neon/fetch.c:1091 ../libsvn_ra_serf/property.c:1001
-msgid "The OPTIONS response did not include the youngest revision"
-msgstr ""
-
-#: ../libsvn_ra_neon/fetch.c:1199 ../libsvn_ra_serf/commit.c:2471
-msgid "DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent"
-msgstr "DAV-förfrågan misslyckades; arkivets pre-revprop-change-hookskript kan ha misslyckats eller saknats"
-
-#: ../libsvn_ra_neon/fetch.c:1450
-#, fuzzy, c-format
-msgid "Missing rev attr in target-revision element"
-msgstr "Attributet \"revision\" saknas på target-revision-elementet"
-
-#: ../libsvn_ra_neon/fetch.c:1461 ../libsvn_ra_serf/update.c:1513
-#, fuzzy, c-format
-msgid "Missing name attr in absent-directory element"
-msgstr "Attributet name saknas på open-directory-elementet"
-
-#: ../libsvn_ra_neon/fetch.c:1477 ../libsvn_ra_serf/update.c:1536
-#, fuzzy, c-format
-msgid "Missing name attr in absent-file element"
-msgstr "Attributet name saknas på open-file-elementet"
+msgid "Path '%s' not present"
+msgstr "Sökvägen \"%s\" finns inte"
-#: ../libsvn_ra_neon/fetch.c:1492
-#, fuzzy, c-format
-msgid "Missing path attr in resource element"
-msgstr "Attributet name saknas på %s-elementet"
+#: ../libsvn_ra_serf/commit.c:577
+#, c-format
+msgid "File '%s' is out of date; try updating"
+msgstr "Filen \"%s\" är inaktuell; försök att uppdatera"
-#: ../libsvn_ra_neon/fetch.c:1501
-#, fuzzy, c-format
-msgid "Missing rev attr in open-directory element"
-msgstr "Attributet revision saknas på open-directory-elementet"
+#: ../libsvn_ra_serf/commit.c:979
+msgid "At least one property change failed; repository is unchanged"
+msgstr "Åtminstone en egenskapsändring misslyckades; arkivet är oförändrat"
-#: ../libsvn_ra_neon/fetch.c:1532 ../libsvn_ra_serf/replay.c:282
-#: ../libsvn_ra_serf/update.c:1342
+#: ../libsvn_ra_serf/commit.c:1179
#, c-format
-msgid "Missing name attr in open-directory element"
-msgstr "Attributet name saknas på open-directory-elementet"
+msgid "Failed writing updated file"
+msgstr "MIsslyckades att skriva uppdaterad fil"
-#: ../libsvn_ra_neon/fetch.c:1559 ../libsvn_ra_serf/replay.c:308
-#: ../libsvn_ra_serf/update.c:1377
+#: ../libsvn_ra_serf/commit.c:1367 ../libsvn_ra_serf/commit.c:1457
#, c-format
-msgid "Missing name attr in add-directory element"
-msgstr "Attributet name saknas på add-directory-elementet"
+msgid "%s of '%s': %d %s (%s://%s)"
+msgstr "%s av \"%s\": %d %s (%s://%s)"
-#: ../libsvn_ra_neon/fetch.c:1572
-#, fuzzy, c-format
-msgid "Missing copyfrom-rev attr in add-directory element"
-msgstr "Attributet name saknas på add-directory-elementet"
+#: ../libsvn_ra_serf/commit.c:1377
+#, c-format
+msgid "POST request did not return transaction information"
+msgstr "POST-begäran gav ingen transaktionsinformation"
-#: ../libsvn_ra_neon/fetch.c:1649
-#, fuzzy, c-format
-msgid "Missing rev attr in open-file element"
-msgstr "Attributet revision saknas på open-file-elementet"
+#: ../libsvn_ra_serf/commit.c:1421
+msgid "The OPTIONS response did not include the requested activity-collection-set value"
+msgstr "OPTIONS-svaret innehöll inte det efterfrågade värdet på \"activity-collection-set\""
-#: ../libsvn_ra_neon/fetch.c:1656 ../libsvn_ra_serf/replay.c:343
-#: ../libsvn_ra_serf/update.c:1417
+#: ../libsvn_ra_serf/commit.c:1686 ../libsvn_ra_serf/commit.c:2084
+#: ../libsvn_ra_serf/update.c:2631
#, c-format
-msgid "Missing name attr in open-file element"
-msgstr "Attributet name saknas på open-file-elementet"
+msgid "Unable to parse URL '%s'"
+msgstr "Syntaxfel i URL:en \"%s\""
-#: ../libsvn_ra_neon/fetch.c:1682 ../libsvn_ra_serf/replay.c:369
-#: ../libsvn_ra_serf/update.c:1452
+#: ../libsvn_ra_serf/commit.c:1714 ../libsvn_ra_serf/util.c:2472
#, c-format
-msgid "Missing name attr in add-file element"
-msgstr "Attributet name saknas på add-file-elementet"
-
-#: ../libsvn_ra_neon/fetch.c:1695
-#, fuzzy, c-format
-msgid "Missing copyfrom-rev attr in add-file element"
-msgstr "Attributet name saknas på add-file-elementet"
-
-#: ../libsvn_ra_neon/fetch.c:1752
-#, fuzzy, c-format
-msgid "Missing name attr in set-prop element"
-msgstr "Attributet name saknas på %s-elementet"
-
-#: ../libsvn_ra_neon/fetch.c:1766
-#, fuzzy, c-format
-msgid "Missing name attr in remove-prop element"
-msgstr "Attributet name saknas på open-file-elementet"
+msgid "Access to '%s' forbidden"
+msgstr "Åtkomst till \"%s\" ej tillåten"
-#: ../libsvn_ra_neon/fetch.c:1840 ../libsvn_ra_serf/replay.c:256
-#: ../libsvn_ra_serf/update.c:1482
+#: ../libsvn_ra_serf/commit.c:1718
#, c-format
-msgid "Missing name attr in delete-entry element"
-msgstr "Attributet name saknas på delete-entry-elementet"
+msgid "Adding directory failed: %s on %s (%d %s)"
+msgstr "Lägga till katalog misslyckades: %s på %s (%d %s)"
-#: ../libsvn_ra_neon/fetch.c:2002
+#: ../libsvn_ra_serf/commit.c:1936
#, c-format
-msgid "Error writing to '%s': unexpected EOF"
-msgstr "Fel vid skrivning till \"%s\": oväntat filslut"
+msgid "File '%s' already exists"
+msgstr "Filen \"%s\" finns redan"
-#: ../libsvn_ra_neon/fetch.c:2149
+#: ../libsvn_ra_serf/commit.c:2207
#, c-format
-msgid "Unknown XML encoding: '%s'"
-msgstr "Okänd XML-kodning: \"%s\""
+msgid "MERGE request failed: returned %d (during commit)"
+msgstr "MERGE-begäran misslyckades: returnerade %d (under arkivering)"
-#: ../libsvn_ra_neon/fetch.c:2456
+#: ../libsvn_ra_serf/commit.c:2281
#, c-format
-msgid "REPORT response handling failed to complete the editor drive"
-msgstr "Hanteringen av REPORT-responsen kunde inte slutföra körningen av editorn"
+msgid "DELETE returned unexpected status: %d"
+msgstr "DELETE gav oväntad felkod: %d"
-#: ../libsvn_ra_neon/file_revs.c:290
-msgid "Failed to write full amount to stream"
-msgstr "Kunde inte skriva all data till ström"
+#: ../libsvn_ra_serf/commit.c:2474
+msgid "DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent"
+msgstr "DAV-förfrågan misslyckades; arkivets krokskript före ändring av revisionsegenskap (\"pre-revprop-change\") kan ha misslyckats eller saknats"
-#: ../libsvn_ra_neon/file_revs.c:376 ../libsvn_ra_neon/get_deleted_rev.c:170
-#: ../libsvn_ra_neon/get_location_segments.c:211
-#: ../libsvn_ra_neon/get_locations.c:194
-#: ../libsvn_ra_serf/get_deleted_rev.c:236
-#, fuzzy, c-format
+#: ../libsvn_ra_serf/get_deleted_rev.c:173
+#, c-format
msgid "'%s' REPORT not implemented"
-msgstr "\"get-locations\"-rapporten ej implementerad"
-
-#: ../libsvn_ra_neon/file_revs.c:383
-msgid "The file-revs report didn't contain any revisions"
-msgstr "file-revs-rapporten innehöll inga revisioner"
-
-#: ../libsvn_ra_neon/get_dated_rev.c:158
-msgid "Server does not support date-based operations"
-msgstr "Servern stöder ej datumbaserade operationer"
-
-#: ../libsvn_ra_neon/get_dated_rev.c:165
-msgid "Invalid server response to dated-rev request"
-msgstr "Ogiltigt svar från servern på dated-rev-förfrågan"
+msgstr "\"%s\" REPORT ej implementerad"
-#: ../libsvn_ra_neon/get_location_segments.c:122
-#: ../libsvn_ra_serf/getlocationsegments.c:109 ../libsvn_ra_svn/client.c:1717
-#, fuzzy
-msgid "Expected valid revision range"
-msgstr "Väntade ett giltigt revisionsnummer och sökväg"
-
-#: ../libsvn_ra_neon/get_locations.c:112
-msgid "Expected a valid revnum and path"
-msgstr "Väntade ett giltigt revisionsnummer och sökväg"
-
-#: ../libsvn_ra_neon/get_locks.c:238
-msgid "Incomplete lock data returned"
-msgstr "Ofullständig låsdata erhölls"
-
-#: ../libsvn_ra_neon/get_locks.c:329 ../libsvn_ra_serf/property.c:370
-#: ../libsvn_ra_serf/update.c:1998
+#: ../libsvn_ra_serf/locks.c:234
#, c-format
-msgid "Got unrecognized encoding '%s'"
-msgstr "Okänd kodning \"%s\""
+msgid "Lock request failed: %d %s"
+msgstr "Låsförfrågan misslyckades: %d %s"
-#: ../libsvn_ra_neon/get_locks.c:425 ../libsvn_ra_neon/get_locks.c:429
-#: ../libsvn_ra_serf/locks.c:566
+#: ../libsvn_ra_serf/locks.c:414
+msgid "Malformed URL for repository"
+msgstr "Felaktig URL för arkiv"
+
+#: ../libsvn_ra_serf/locks.c:420
msgid "Server does not support locking features"
msgstr "Servern stöder ej funktionalitet för låsning"
-#: ../libsvn_ra_neon/lock.c:196
-msgid "Invalid creation date header value in response."
-msgstr ""
-
-#: ../libsvn_ra_neon/lock.c:221
-#, fuzzy
-msgid "Invalid timeout value"
-msgstr "Felaktig konfiguration: negativt timeout-värde"
-
-#: ../libsvn_ra_neon/lock.c:261 ../libsvn_ra_neon/lock.c:410
-#, fuzzy, c-format
-msgid "Failed to parse URI '%s'"
-msgstr "Misslyckades med att analysera URI"
-
-#: ../libsvn_ra_neon/lock.c:321 ../libsvn_ra_serf/locks.c:380
-#: ../libsvn_ra_serf/locks.c:391 ../libsvn_ra_serf/locks.c:423
-#, c-format
-msgid "Lock request failed: %d %s"
-msgstr "Låsförfrågan misslyckades: %d %s"
-
-#: ../libsvn_ra_neon/lock.c:425 ../libsvn_ra_serf/locks.c:719
+#: ../libsvn_ra_serf/locks.c:581
#, c-format
msgid "'%s' is not locked in the repository"
msgstr "\"%s\" är inte låst i arkivet"
-#: ../libsvn_ra_neon/lock.c:553
-msgid "Failed to fetch lock information"
-msgstr "Kunde inte hämta låsinformation"
+#: ../libsvn_ra_serf/locks.c:632 ../libsvn_ra_serf/locks.c:638
+#, c-format
+msgid "Unlock request failed: %d %s"
+msgstr "Upplåsningsförfrågan misslyckades: %d %s"
-#: ../libsvn_ra_neon/log.c:169 ../libsvn_ra_serf/log.c:228
-#, fuzzy, c-format
-msgid "Missing name attr in revprop element"
-msgstr "Attributet name saknas på %s-elementet"
+#: ../libsvn_ra_serf/log.c:169
+#, c-format
+msgid "Unsupported encoding '%s'"
+msgstr "Kodningen \"%s\" stöds ej"
-#: ../libsvn_ra_neon/log.c:459 ../libsvn_ra_serf/log.c:625
-#: ../libsvn_ra_svn/client.c:1422
-#, fuzzy
+#: ../libsvn_ra_serf/log.c:568 ../libsvn_ra_svn/client.c:1577
msgid "Server does not support custom revprops via log"
-msgstr "Servern stöder ej replay-kommandot"
+msgstr "Servern stöder ej anpassade revisionsegenskaper via loggning"
-#: ../libsvn_ra_neon/merge.c:221
+#: ../libsvn_ra_serf/merge.c:200
#, c-format
-msgid "Protocol error: we told the server not to auto-merge any resources, but it said that '%s' was merged"
-msgstr ""
-"Protokollfel: vi bad servern att inte göra auto-merge på någon resurs, men\n"
-"den svarade att merge har gjorts på \"%s\""
+msgid "A MERGE response for '%s' is not a child of the destination ('%s')"
+msgstr "Ett MERGE-svar för \"%s\" är inte barn till destinationen (\"%s\")"
-#: ../libsvn_ra_neon/merge.c:230
+#: ../libsvn_ra_serf/options.c:658
#, c-format
-msgid "Internal error: there is an unknown parent (%d) for the 'DAV:response' element within the MERGE response"
-msgstr "Internt fel: okänd förälder (%d) till elementet \"DAV:response\" i MERGE-responsen"
+msgid "Don't know how to handle '%s' for capability '%s'"
+msgstr "Kan inte hantera \"%s\" för förmåga \"%s\""
-#: ../libsvn_ra_neon/merge.c:245
+#: ../libsvn_ra_serf/options.c:682
#, c-format
-msgid "Protocol error: the MERGE response for the '%s' resource did not return all of the properties that we asked for (and need to complete the commit)"
-msgstr ""
-"Protokollfel: MERGE-responsen för resursen \"%s\" returnerade inte alla\n"
-"egenskaper vi bad om (och behöver för att slutföra arkiveringen)"
+msgid "Attempt to fetch capability '%s' resulted in '%s'"
+msgstr "Ett försök att hämta förmåga \"%s\" resulterade i \"%s\""
-#: ../libsvn_ra_neon/merge.c:264 ../libsvn_ra_serf/merge.c:304
+#: ../libsvn_ra_serf/property.c:279 ../libsvn_ra_serf/update.c:2473
#, c-format
-msgid "A MERGE response for '%s' is not a child of the destination ('%s')"
-msgstr "En MERGE-respons för \"%s\" är inte barn till destinationen (\"%s\")"
+msgid "Got unrecognized encoding '%s'"
+msgstr "Okänd kodning \"%s\""
-#: ../libsvn_ra_neon/merge.c:518
-msgid "The MERGE property response had an error status"
-msgstr "MERGE-egenskapsresponsen innehöll en felstatus"
+#: ../libsvn_ra_serf/property.c:700
+msgid "The PROPFIND response did not include the requested properties"
+msgstr "PROPFIND-svaret innehöll inte de efterfrågade egenskaperna"
-#: ../libsvn_ra_neon/options.c:316
-msgid "The OPTIONS response did not include the requested activity-collection-set; this often means that the URL is not WebDAV-enabled"
-msgstr ""
-"OPTIONS-responsen innehöll inte den efterfrågade aktivitetskollektionsmängden;\n"
-"detta betyder oftast att WebDAV inte är aktiverat för URL:en"
+#: ../libsvn_ra_serf/property.c:993
+msgid "The PROPFIND response did not include the requested baseline-collection value"
+msgstr "PROPFIND-svaret innehöll inte det efterfrågade värdet på \"baseline-collection\""
-#: ../libsvn_ra_neon/options.c:435 ../libsvn_ra_serf/options.c:605
-#, c-format
-msgid "Don't know how to handle '%s' for capability '%s'"
-msgstr ""
+#: ../libsvn_ra_serf/property.c:1005
+msgid "The PROPFIND response did not include the requested version-name value"
+msgstr "PROPFIND-svaret innehöll inte det efterfrågade värdet på \"version-name\""
-#: ../libsvn_ra_neon/options.c:459 ../libsvn_ra_serf/options.c:629
-#, c-format
-msgid "Attempt to fetch capability '%s' resulted in '%s'"
-msgstr ""
+#: ../libsvn_ra_serf/property.c:1043
+msgid "The OPTIONS response did not include the requested checked-in value"
+msgstr "OPTIONS-svaret innehöll inte det efterfrågade värdet på \"checked-in\""
-#: ../libsvn_ra_neon/props.c:607
-#, c-format
-msgid "Failed to find label '%s' for URL '%s'"
-msgstr "Kunde inte hitta etiketten \"%s\" till URL:en \"%s\""
+#: ../libsvn_ra_serf/property.c:1125
+msgid "The OPTIONS response did not include the youngest revision"
+msgstr "OPTIONS-svaret innehöll inte den yngsta revisionen"
-#: ../libsvn_ra_neon/props.c:636
-#, fuzzy, c-format
-msgid "'%s' was not present on the resource '%s'"
-msgstr "\"%s\" fanns inte på resursen"
+#: ../libsvn_ra_serf/property.c:1218
+msgid "The PROPFIND response did not include the requested resourcetype value"
+msgstr "PROPFIND-svaret innehöll inte det efterfrågade värdet på \"resourcetype\""
-#: ../libsvn_ra_neon/props.c:703
-#, c-format
-msgid "Neon was unable to parse URL '%s'"
-msgstr "Neon kunde inte analysera URL:en '%s'"
+#: ../libsvn_ra_serf/property.c:1253
+msgid "The PROPFIND response did not include the requested 'DAV:' properties"
+msgstr "PROPFIND-svaret innehöll inte de efterfrågade \"DAV:\"-egenskaperna"
-#: ../libsvn_ra_neon/props.c:736
-msgid "The path was not part of a repository"
-msgstr "Sökvägen är inte en del av ett arkiv"
+#: ../libsvn_ra_serf/replay.c:222 ../libsvn_ra_serf/update.c:1660
+msgid "Missing revision attr in target-revision element"
+msgstr "Attributet \"revision\" saknas på target-revision-elementet"
-#: ../libsvn_ra_neon/props.c:745
-#, c-format
-msgid "No part of path '%s' was found in repository HEAD"
-msgstr "Ingen del av sökvägen \"%s\" hittades i arkivets huvudrevision"
+#: ../libsvn_ra_serf/replay.c:240
+msgid "Missing revision attr in open-root element"
+msgstr "Attributet \"revision\" saknas på open-root-elementet"
-#: ../libsvn_ra_neon/props.c:801 ../libsvn_ra_neon/props.c:857
-msgid "The VCC property was not found on the resource"
-msgstr "VCC-egenskapen hittades inte på resursen"
+#: ../libsvn_ra_serf/replay.c:260 ../libsvn_ra_serf/update.c:1888
+msgid "Missing name attr in delete-entry element"
+msgstr "Attributet name saknas på delete-entry-elementet"
-#: ../libsvn_ra_neon/props.c:870
-msgid "The relative-path property was not found on the resource"
-msgstr "Egenskapen relative-path hittades inte på resursen"
+#: ../libsvn_ra_serf/replay.c:266
+msgid "Missing revision attr in delete-entry element"
+msgstr "Attributet revision saknas på delete-entry-elementet"
-#: ../libsvn_ra_neon/props.c:991
-msgid "'DAV:baseline-collection' was not present on the baseline resource"
-msgstr "\"DAV:baseline-collection\" finns inte på baseline-resursen"
+#: ../libsvn_ra_serf/replay.c:286 ../libsvn_ra_serf/update.c:1727
+msgid "Missing name attr in open-directory element"
+msgstr "Attributet name saknas på open-directory-elementet"
-#: ../libsvn_ra_neon/props.c:1010
-#, fuzzy, c-format
-msgid "'%s' was not present on the baseline resource"
-msgstr "\"%s\" fanns inte på resursen"
+#: ../libsvn_ra_serf/replay.c:292 ../libsvn_ra_serf/update.c:1678
+#: ../libsvn_ra_serf/update.c:1718
+msgid "Missing revision attr in open-directory element"
+msgstr "Attributet revision saknas på open-directory-elementet"
-#: ../libsvn_ra_neon/props.c:1234 ../libsvn_ra_serf/commit.c:983
-msgid "At least one property change failed; repository is unchanged"
-msgstr "Åtminstone en egenskapsändring misslyckades; arkivet är oförändrat"
+#: ../libsvn_ra_serf/replay.c:312 ../libsvn_ra_serf/update.c:1765
+msgid "Missing name attr in add-directory element"
+msgstr "Attributet name saknas på add-directory-elementet"
-#: ../libsvn_ra_neon/replay.c:277
-msgid "Got apply-textdelta element without preceding add-file or open-file"
-msgstr "Erhöll apply-textdelta-element utan att ha erhållit add-file eller open-file"
+#: ../libsvn_ra_serf/replay.c:349 ../libsvn_ra_serf/update.c:1809
+msgid "Missing name attr in open-file element"
+msgstr "Attributet name saknas på open-file-elementet"
-#: ../libsvn_ra_neon/replay.c:301
-msgid "Got close-file element without preceding add-file or open-file"
-msgstr "Erhöll close-file-element utan att ha erhållit add-file eller open-file"
+#: ../libsvn_ra_serf/replay.c:355 ../libsvn_ra_serf/update.c:1818
+msgid "Missing revision attr in open-file element"
+msgstr "Attributet revision saknas på open-file-elementet"
-#: ../libsvn_ra_neon/replay.c:318
-msgid "Got close-directory element without ever opening a directory"
-msgstr "Erhöll close-directory-element, utan att någonsin ha öppnat en katalog"
+#: ../libsvn_ra_serf/replay.c:375 ../libsvn_ra_serf/update.c:1843
+msgid "Missing name attr in add-file element"
+msgstr "Attributet name saknas på add-file-elementet"
-#: ../libsvn_ra_neon/replay.c:437 ../libsvn_ra_serf/replay.c:565
+#: ../libsvn_ra_serf/replay.c:443 ../libsvn_ra_serf/update.c:1984
+#: ../libsvn_ra_serf/update.c:2071
#, c-format
+msgid "Missing name attr in %s element"
+msgstr "Attributet name saknas på %s-elementet"
+
+#: ../libsvn_ra_serf/replay.c:578
msgid "Error writing stream: unexpected EOF"
msgstr "Fel vid skrivning till ström: oväntat filslut"
-#: ../libsvn_ra_neon/replay.c:444
-#, c-format
-msgid "Got cdata content for a prop delete"
-msgstr "Egenskapsradering hade textinnehåll"
+#: ../libsvn_ra_serf/sb_bucket.c:65
+msgid "Failed to read the request"
+msgstr "Kunde inte läsa förfrågan"
+
+#: ../libsvn_ra_serf/serf.c:62
+msgid "Module for accessing a repository via WebDAV protocol using serf."
+msgstr "Modul för åtkomst av arkiv via protokollet WebDAV med hjälp av serf."
-#: ../libsvn_ra_neon/session.c:340
+#: ../libsvn_ra_serf/serf.c:65
#, c-format
-msgid "PIN for token \"%s\" in slot \"%s\""
+msgid ""
+"Module for accessing a repository via WebDAV protocol using serf.\n"
+" - using serf %d.%d.%d"
msgstr ""
+"Modul för åtkomst av arkiv via protokollet WebDAV med hjälp av serf.\n"
+" - använder serf %d.%d.%d"
-#: ../libsvn_ra_neon/session.c:541 ../libsvn_ra_serf/serf.c:278
-msgid "Invalid URL: illegal character in proxy port number"
-msgstr "Felaktig URL: ogiltigt tecken i proxy-portnummer"
-
-#: ../libsvn_ra_neon/session.c:545 ../libsvn_ra_serf/serf.c:282
-msgid "Invalid URL: negative proxy port number"
-msgstr "Felaktig URL: negativt proxy-portnummer"
-
-#: ../libsvn_ra_neon/session.c:548 ../libsvn_ra_serf/serf.c:285
-msgid "Invalid URL: proxy port number greater than maximum TCP port number 65535"
-msgstr "Felaktig URL: portnummer för proxy större än det högsta TCP-portnummret 65535"
+#: ../libsvn_ra_serf/serf.c:129
+#, c-format
+msgid "Invalid config: unknown %s '%s'"
+msgstr "Felaktig konfiguration: okänd %s \"%s\""
-#: ../libsvn_ra_neon/session.c:562 ../libsvn_ra_serf/serf.c:260
+#: ../libsvn_ra_serf/serf.c:327
msgid "Invalid config: illegal character in timeout value"
msgstr "Felaktig konfiguration: otillåtet tecken i timeout-värde"
-#: ../libsvn_ra_neon/session.c:566 ../libsvn_ra_serf/serf.c:264
+#: ../libsvn_ra_serf/serf.c:331
msgid "Invalid config: negative timeout value"
msgstr "Felaktig konfiguration: negativt timeout-värde"
-#: ../libsvn_ra_neon/session.c:579
-msgid "Invalid config: illegal character in debug mask value"
-msgstr "Felaktig konfiguration: ogiltigt tecken i debug mask-värde"
+#: ../libsvn_ra_serf/serf.c:344
+msgid "Invalid URL: illegal character in proxy port number"
+msgstr "Felaktig URL: ogiltigt tecken i proxy-portnummer"
-#: ../libsvn_ra_neon/session.c:604 ../libsvn_ra_serf/serf.c:120
-#, c-format
-msgid "Invalid config: unknown http authtype '%s'"
-msgstr "Felaktig konfiguration: okänd http-authtype \"%s\""
+#: ../libsvn_ra_serf/serf.c:348
+msgid "Invalid URL: negative proxy port number"
+msgstr "Felaktig URL: negativt proxy-portnummer"
-#: ../libsvn_ra_neon/session.c:665
-#, fuzzy
-msgid "Module for accessing a repository via WebDAV protocol using Neon."
-msgstr "Modul för åtkomst av databas via protokollet WebDAV (DeltaV)."
+#: ../libsvn_ra_serf/serf.c:351
+msgid "Invalid URL: proxy port number greater than maximum TCP port number 65535"
+msgstr "Felaktig URL: portnummer för proxy större än det högsta TCP-portnumret 65535"
-#: ../libsvn_ra_neon/session.c:745
+#: ../libsvn_ra_serf/serf.c:371
#, c-format
-msgid "URL '%s' is malformed or the scheme or host or path is missing"
-msgstr ""
-
-#: ../libsvn_ra_neon/session.c:761
-msgid "Network socket initialization failed"
-msgstr "Fel vid initiering av nätverksuttag (socket)"
+msgid "Could not resolve proxy server '%s'"
+msgstr "Kunde inte slå upp proxy-servern \"%s\""
-#: ../libsvn_ra_neon/session.c:825
-msgid "SSL is not supported"
-msgstr "SSL stöds ej"
-
-#: ../libsvn_ra_neon/session.c:997 ../libsvn_ra_serf/util.c:264
+#: ../libsvn_ra_serf/serf.c:474
#, c-format
-msgid "Invalid config: unable to load certificate file '%s'"
-msgstr "Felaktig konfiguration: kan inte ladda certifikatfilen \"%s\""
+msgid "Illegal URL '%s'"
+msgstr "Otillåten URL \"%s\""
-#: ../libsvn_ra_neon/session.c:1025
-#, fuzzy, c-format
-msgid "Invalid config: unable to load PKCS#11 provider '%s'"
-msgstr "Felaktig konfiguration: kan inte ladda certifikatfilen \"%s\""
+#: ../libsvn_ra_serf/serf.c:546
+#, c-format
+msgid "Connection to '%s' failed"
+msgstr "Anslutning till \"%s\" misslyckades"
-#: ../libsvn_ra_neon/session.c:1182 ../libsvn_ra_serf/serf.c:984
+#: ../libsvn_ra_serf/serf.c:1216
msgid "The UUID property was not found on the resource or any of its parents"
msgstr "UUID-egenskapen hittades inte på resursen eller någon av dess föräldrar"
-#: ../libsvn_ra_neon/session.c:1259
-#, fuzzy, c-format
-msgid "Unsupported RA loader version (%d) for ra_neon"
-msgstr "Versionen för RA-laddaren (%d) stöds ej för ra_svn"
-
-#: ../libsvn_ra_neon/util.c:233
-msgid "The request response contained at least one error"
-msgstr ""
-
-#: ../libsvn_ra_neon/util.c:275
-msgid "The response contains a non-conforming HTTP status line"
-msgstr ""
-
-#: ../libsvn_ra_neon/util.c:285
-#, fuzzy, c-format
-msgid "Error setting property '%s': "
-msgstr "Fel vid tolkning av egenskapen %s på \"%s\": \"%s\""
-
-#: ../libsvn_ra_neon/util.c:580
-#, c-format
-msgid "%s of '%s'"
-msgstr "%s till '%s'"
-
-#: ../libsvn_ra_neon/util.c:592 ../libsvn_ra_serf/util.c:1929
-#, c-format
-msgid "'%s' path not found"
-msgstr "Sökvägen \"%s\" finns inte"
-
-#: ../libsvn_ra_neon/util.c:596
+#: ../libsvn_ra_serf/serf.c:1290
#, c-format
-msgid "access to '%s' forbidden"
-msgstr ""
+msgid "Unsupported RA loader version (%d) for ra_serf"
+msgstr "Versionen för RA-laddaren (%d) stöds ej för ra_serf"
-#: ../libsvn_ra_neon/util.c:606 ../libsvn_ra_serf/util.c:1923
+#: ../libsvn_ra_serf/serf.c:1304
#, c-format
-msgid "Repository moved permanently to '%s'; please relocate"
-msgstr "Arkivet har flyttats permanent till \"%s\"; vänligen omlokalisera"
+msgid "ra_serf was compiled for serf %d.%d.%d but loaded an incompatible %d.%d.%d library"
+msgstr "ra_serf är kompilerad för serf %d.%d.%d men läste in ett inkompatibelt bibliotek med version %d.%d.%d"
-#: ../libsvn_ra_neon/util.c:608 ../libsvn_ra_serf/util.c:1925
+#: ../libsvn_ra_serf/update.c:1118
#, c-format
-msgid "Repository moved temporarily to '%s'; please relocate"
-msgstr "Arkivet har flyttats temporärt till \"%s\"; vänligen omlokalisera<"
+msgid "GET request returned unexpected delta base: %s"
+msgstr "GET-begäran gav oväntad deltabas: %s"
-#: ../libsvn_ra_neon/util.c:616
+#: ../libsvn_ra_serf/update.c:1136
#, c-format
-msgid "Server sent unexpected return value (%d %s) in response to %s request for '%s'"
-msgstr ""
-
-#: ../libsvn_ra_neon/util.c:628
-#, fuzzy, c-format
-msgid "authorization failed: %s"
-msgstr "behörighetskontroll misslyckades"
-
-#: ../libsvn_ra_neon/util.c:630
-msgid "authorization failed"
-msgstr "behörighetskontroll misslyckades"
+msgid "GET request failed: %d %s"
+msgstr "GET-begäran misslyckades: %d %s"
-#: ../libsvn_ra_neon/util.c:635
-msgid "could not connect to server"
-msgstr "kunde inte ansluta till server"
+#: ../libsvn_ra_serf/update.c:1922
+msgid "Missing name attr in absent-directory element"
+msgstr "Attributet name saknas på absent-directory-elementet"
-#: ../libsvn_ra_neon/util.c:639
-msgid "timed out waiting for server"
-msgstr "timeout i väntan på servern"
+#: ../libsvn_ra_serf/update.c:1947
+msgid "Missing name attr in absent-file element"
+msgstr "Attributet name saknas på absent-file-elementet"
-#: ../libsvn_ra_neon/util.c:983
+#: ../libsvn_ra_serf/update.c:2015 ../libsvn_ra_serf/update.c:2122
#, c-format
-msgid "Can't calculate the request body size"
-msgstr "Kan inte beräkna storleken på kroppen för förfrågan"
+msgid "Unknown tag '%s' while at state %d"
+msgstr "Okänd etikett \"%s\" i tillstånd %d"
-#: ../libsvn_ra_neon/util.c:1147
-#, c-format
-msgid "The %s request returned invalid XML in the response: %s (%s)"
-msgstr "Förfrågan %s gav felaktig XML i svaret: %s (%s)"
+#: ../libsvn_ra_serf/update.c:2190 ../libsvn_ra_serf/update.c:2314
+#: ../libsvn_ra_serf/update.c:2351
+msgid "The REPORT or PROPFIND response did not include the requested checked-in value"
+msgstr "Svaren till REPORT eller PROPFIND innehöll inte det efterfrågade \"checked-in\"-värdet"
-#: ../libsvn_ra_neon/util.c:1332
+#: ../libsvn_ra_serf/update.c:2533
#, c-format
-msgid "Error reading spooled %s request response"
-msgstr "Fel vid läsning av temporärlagrad respons för %s-förfrågan"
+msgid "Error writing to '%s': unexpected EOF"
+msgstr "Fel vid skrivning till \"%s\": oväntat filslut"
-#: ../libsvn_ra_serf/auth.c:413 ../libsvn_ra_serf/auth.c:419
-#: ../libsvn_ra_serf/auth_digest.c:270
-#, fuzzy
-msgid "Missing 'realm' attribute in Authorization header"
-msgstr "Attributet \"timestamp\" saknas i \"%s\""
+#: ../libsvn_ra_serf/update.c:2902
+msgid "Error retrieving REPORT"
+msgstr "Fel vid hämtning av REPORT"
-#: ../libsvn_ra_serf/auth_digest.c:465
-msgid "Incorrect response-digest in Authentication-Info header."
-msgstr ""
+#: ../libsvn_ra_serf/update.c:3111
+msgid "Missing update-report close tag"
+msgstr "Slutetikett för \"update-report\" saknas"
-#: ../libsvn_ra_serf/auth_kerb.c:160
-#, c-format
-msgid ""
-"Initialization of the GSSAPI context failed.\n"
-" %s\n"
-" %s\n"
-msgstr ""
+#: ../libsvn_ra_serf/update.c:3581
+msgid "Can't get text contents of a directory"
+msgstr "Kan inte läsa en katalogs textinnehåll"
-#: ../libsvn_ra_serf/commit.c:307
-msgid "No Location header received"
-msgstr ""
+#: ../libsvn_ra_serf/util.c:248
+msgid ": "
+msgstr ": "
-#: ../libsvn_ra_serf/commit.c:438
-#, fuzzy, c-format
-msgid "Directory '%s' is out of date; try updating"
-msgstr "Katalogen \"%s\" saknas"
+#: ../libsvn_ra_serf/util.c:250
+msgid ", "
+msgstr ", "
-#: ../libsvn_ra_serf/commit.c:542 ../libsvn_repos/commit.c:394
-#, c-format
-msgid "Path '%s' not present"
-msgstr "Sökvägen \"%s\" finns inte"
+#: ../libsvn_ra_serf/util.c:362
+msgid "Server SSL certificate verification failed"
+msgstr "Kontroll av SSL-certifikat för server misslyckades"
-#: ../libsvn_ra_serf/commit.c:629
-#, c-format
-msgid "File '%s' is out of date; try updating"
-msgstr ""
+#: ../libsvn_ra_serf/util.c:367
+msgid "certificate is not yet valid"
+msgstr "certifikatet är inte giltigt ännu"
-#: ../libsvn_ra_serf/commit.c:1206
-#, c-format
-msgid "Failed writing updated file"
-msgstr "MIsslyckades att skriva uppdaterad fil"
+#: ../libsvn_ra_serf/util.c:370
+msgid "certificate has expired"
+msgstr "certifikatet har gått ut"
-#: ../libsvn_ra_serf/commit.c:1330 ../libsvn_ra_serf/commit.c:1408
-#, c-format
-msgid "%s of '%s': %d %s (%s://%s)"
-msgstr ""
+#: ../libsvn_ra_serf/util.c:374
+msgid "certificate issued for a different hostname"
+msgstr "certifikatet utfärdat för ett annat datornamn"
-#: ../libsvn_ra_serf/commit.c:1340
-#, fuzzy, c-format
-msgid "POST request did not return transaction information"
-msgstr "Objektet är ingen transaktionsrot"
+#: ../libsvn_ra_serf/util.c:378
+msgid "issuer is not trusted"
+msgstr "utfärdaren är inte betrodd"
-#: ../libsvn_ra_serf/commit.c:1380
-#, fuzzy
-msgid "The OPTIONS response did not include the requested activity-collection-set value"
-msgstr ""
-"OPTIONS-responsen innehöll inte den efterfrågade aktivitetskollektionsmängden;\n"
-"detta betyder oftast att WebDAV inte är aktiverat för URL:en"
+#: ../libsvn_ra_serf/util.c:381
+msgid "and other reason(s)"
+msgstr "och andra orsaker"
-#: ../libsvn_ra_serf/commit.c:1679
+#: ../libsvn_ra_serf/util.c:428
#, c-format
-msgid "Adding a directory failed: %s on %s (%d %s)"
-msgstr ""
-
-#: ../libsvn_ra_serf/getlocationsegments.c:233
-#, c-format
-msgid "Location segment report failed on '%s'@'%ld'"
-msgstr ""
+msgid "Invalid config: unable to load certificate file '%s'"
+msgstr "Felaktig konfiguration: kan inte ladda certifikatfilen \"%s\""
-#: ../libsvn_ra_serf/locks.c:560
-msgid "Malformed URL for repository"
-msgstr "Felaktig URL för arkiv"
+#: ../libsvn_ra_serf/util.c:860 ../libsvn_ra_serf/util.c:863
+msgid "Error running context"
+msgstr "Fel vid körning av kontext"
-#: ../libsvn_ra_serf/locks.c:759
+#: ../libsvn_ra_serf/util.c:1197 ../libsvn_ra_serf/util.c:1202
#, c-format
-msgid "Unlock request failed: %d %s"
-msgstr "Upplåsningsförfrågan misslyckades: %d %s"
+msgid "Malformed DAV:status CDATA '%s'"
+msgstr "Felaktig \"CDATA\" för \"DAV:status\": \"%s\""
-#: ../libsvn_ra_serf/property.c:1030 ../libsvn_ra_serf/update.c:1184
-#: ../libsvn_ra_serf/update.c:1732
-#, fuzzy
-msgid "The OPTIONS response did not include the requested checked-in value"
-msgstr ""
-"OPTIONS-responsen innehöll inte den efterfrågade aktivitetskollektionsmängden;\n"
-"detta betyder oftast att WebDAV inte är aktiverat för URL:en"
+#: ../libsvn_ra_serf/util.c:1494
+#, c-format
+msgid "XML parsing failed"
+msgstr "XML-tolkning misslyckades"
-#: ../libsvn_ra_serf/property.c:1047
-#, fuzzy
-msgid "The OPTIONS response did not include the requested baseline-collection value"
-msgstr ""
-"OPTIONS-responsen innehöll inte den efterfrågade aktivitetskollektionsmängden;\n"
-"detta betyder oftast att WebDAV inte är aktiverat för URL:en"
+#: ../libsvn_ra_serf/util.c:1497
+#, c-format
+msgid "XML parsing failed: (%d %s)"
+msgstr "XML-tolkning misslyckades: (%d %s)"
-#: ../libsvn_ra_serf/property.c:1063
-#, fuzzy
-msgid "The OPTIONS response did not include the requested version-name value"
+#: ../libsvn_ra_serf/util.c:1826
+msgid ""
+"No more credentials or we tried too many times.\n"
+"Authentication failed"
msgstr ""
-"OPTIONS-responsen innehöll inte den efterfrågade aktivitetskollektionsmängden;\n"
-"detta betyder oftast att WebDAV inte är aktiverat för URL:en"
-
-#: ../libsvn_ra_serf/replay.c:218 ../libsvn_ra_serf/update.c:1279
-msgid "Missing revision attr in target-revision element"
-msgstr "Attributet \"revision\" saknas på target-revision-elementet"
-
-#: ../libsvn_ra_serf/replay.c:236
-msgid "Missing revision attr in open-root element"
-msgstr "Attributet \"revision\" saknas på open-root-elementet"
-
-#: ../libsvn_ra_serf/replay.c:262
-msgid "Missing revision attr in delete-entry element"
-msgstr "Attributet revision saknas på delete-entry-elementet"
+"Inga fler klientreferenser eller så försökte vi för många gånger.\n"
+"Autentisering misslyckades"
-#: ../libsvn_ra_serf/replay.c:288 ../libsvn_ra_serf/update.c:1297
-#: ../libsvn_ra_serf/update.c:1333
-msgid "Missing revision attr in open-directory element"
-msgstr "Attributet revision saknas på open-directory-elementet"
-
-#: ../libsvn_ra_serf/replay.c:349 ../libsvn_ra_serf/update.c:1426
-msgid "Missing revision attr in open-file element"
-msgstr "Attributet revision saknas på open-file-elementet"
+#: ../libsvn_ra_serf/util.c:1848
+msgid "Proxy authentication failed"
+msgstr "Proxy-autentisering misslyckades"
-#: ../libsvn_ra_serf/replay.c:436 ../libsvn_ra_serf/update.c:1572
-#: ../libsvn_ra_serf/update.c:1654
+#: ../libsvn_ra_serf/util.c:1901
#, c-format
-msgid "Missing name attr in %s element"
-msgstr "Attributet name saknas på %s-elementet"
+msgid "%s request on '%s' failed"
+msgstr "%s-förfrågan på \"%s\" misslyckades"
-#: ../libsvn_ra_serf/replay.c:864
-#, fuzzy, c-format
-msgid "Error retrieving replay REPORT (%d)"
-msgstr "Fel vid hämtning av rapport (%d)"
-
-#: ../libsvn_ra_serf/serf.c:61
-#, fuzzy
-msgid "Module for accessing a repository via WebDAV protocol using serf."
-msgstr "Modul för åtkomst av databas via protokollet WebDAV (DeltaV)."
-
-#: ../libsvn_ra_serf/serf.c:408
-#, fuzzy, c-format
-msgid "Could not lookup hostname `%s'"
-msgstr "Kunde inte hitta värdnamn: %s://%s"
+#: ../libsvn_ra_serf/util.c:1973
+#, c-format
+msgid "Premature EOF seen from server (http status=%d)"
+msgstr "För tidigt filslut från server (HTTP-felkod %d)"
-#: ../libsvn_ra_serf/serf.c:675
-#, fuzzy
-msgid "The OPTIONS response did not include the requested resourcetype value"
-msgstr ""
-"OPTIONS-responsen innehöll inte den efterfrågade aktivitetskollektionsmängden;\n"
-"detta betyder oftast att WebDAV inte är aktiverat för URL:en"
+#: ../libsvn_ra_serf/util.c:2042
+#, c-format
+msgid "%s request on '%s' failed: %d %s"
+msgstr "%s-förfrågan på \"%s\" misslyckades: %d %s"
-#: ../libsvn_ra_serf/serf.c:839
-msgid "The PROPFIND response did not include the requested resourcetype value"
-msgstr ""
+#: ../libsvn_ra_serf/util.c:2364
+msgid "The PROPFIND response did not include the requested version-controlled-configuration value"
+msgstr "PROPFIND-svaret innehöll inte det efterfrågade värdet på \"version-controlled-configuration\""
-#: ../libsvn_ra_serf/serf.c:1054
+#: ../libsvn_ra_serf/util.c:2466
#, c-format
-msgid "Unsupported RA loader version (%d) for ra_serf"
-msgstr "Versionen för RA-laddaren (%d) stöds ej för ra_serf"
+msgid "Repository moved permanently to '%s'; please relocate"
+msgstr "Arkivet har flyttats permanent till \"%s\"; vänligen omlokalisera"
-#: ../libsvn_ra_serf/update.c:852
-#, fuzzy, c-format
-msgid "GET request failed: %d %s"
-msgstr "Låsförfrågan misslyckades: %d %s"
+#: ../libsvn_ra_serf/util.c:2468
+#, c-format
+msgid "Repository moved temporarily to '%s'; please relocate"
+msgstr "Arkivet har flyttats temporärt till \"%s\"; vänligen omlokalisera"
-#: ../libsvn_ra_serf/update.c:2332
+#: ../libsvn_ra_serf/util.c:2479
#, c-format
-msgid "Error retrieving REPORT (%d)"
-msgstr "Fel vid hämtning av rapport (%d)"
+msgid "'%s': no lock token available"
+msgstr "\"%s\": ingen låsidentifierare tillgänglig"
-#: ../libsvn_ra_serf/util.c:699 ../libsvn_ra_serf/util.c:702
-#, fuzzy, c-format
-msgid "Error running context"
-msgstr "Fel vid körning av post-commit-hookskript"
+#: ../libsvn_ra_serf/util.c:2483
+#, c-format
+msgid "DAV request failed: 411 Content length required. The server or an intermediate proxy does not accept chunked encoding. Try setting 'http-chunked-requests' to 'auto' or 'no' in your client configuration."
+msgstr "DAV-begäran misslyckades: 411, innehållslängd krävs. Servern eller en mellanliggande proxy godtar inte styckvis kodning. Försök med att sätta \"http-chunked-requests\" till \"auto\" eller \"no\" i klientinställningarna."
-#: ../libsvn_ra_serf/util.c:1398
-msgid ""
-"No more credentials or we tried too many times.\n"
-"Authentication failed"
-msgstr ""
+#: ../libsvn_ra_serf/util.c:2489
+#, c-format
+msgid "The requested feature is not supported by '%s'"
+msgstr "Den begärda funktionen stöds inte av \"%s\""
-#: ../libsvn_ra_serf/util.c:1421
-#, fuzzy
-msgid "Proxy authentication failed"
-msgstr "behörighetskontroll misslyckades"
+#: ../libsvn_ra_serf/util.c:2495
+#, c-format
+msgid "Unexpected HTTP status %d '%s' on '%s'\n"
+msgstr "Oväntat HTTP-fel %d \"%s\" för \"%s\"\n"
-#: ../libsvn_ra_serf/util.c:1495
-#, fuzzy, c-format
-msgid "Premature EOF seen from server (http status=%d)"
-msgstr "För tidigt filslut från server"
+#: ../libsvn_ra_serf/util.c:2639
+#, c-format
+msgid "The %s response contains invalid XML (%d %s)"
+msgstr "Svaret på %s innehåller ogiltig XML (%d %s)"
-#: ../libsvn_ra_serf/util.c:1547
-#, fuzzy, c-format
-msgid "Unspecified error message: %d %s"
-msgstr "ange loggmeddelande ARG"
+#: ../libsvn_ra_serf/xml.c:622
+#, c-format
+msgid "XML Parsing failed: Unexpected root element '%s'"
+msgstr "XML-tolkning misslyckades: Oväntat rotelement \"%s\""
-#: ../libsvn_ra_serf/util.c:1815
-#, fuzzy
-msgid "The OPTIONS response did not include the requested version-controlled-configuration value"
-msgstr ""
-"OPTIONS-responsen innehöll inte den efterfrågade aktivitetskollektionsmängden;\n"
-"detta betyder oftast att WebDAV inte är aktiverat för URL:en"
+#: ../libsvn_ra_serf/xml.c:682
+#, c-format
+msgid "Missing XML attribute: '%s'"
+msgstr "XML-attribut saknas: \"%s\""
-#: ../libsvn_ra_serf/util.c:1932
-#, fuzzy, c-format
-msgid "'%s': no lock token available"
-msgstr "Ingen låsidentifierare tillhandahölls"
+#: ../libsvn_ra_serf/xml.c:757
+msgid "The response contains invalid XML"
+msgstr "Svaret innehåller ogiltig XML"
-#: ../libsvn_ra_svn/client.c:136
+#: ../libsvn_ra_svn/client.c:142
#, c-format
msgid "Unknown hostname '%s'"
msgstr "Okänt värdnamn \"%s\""
-#: ../libsvn_ra_svn/client.c:161
+#: ../libsvn_ra_svn/client.c:167
#, c-format
msgid "Can't connect to host '%s'"
msgstr "Kan inte ansluta till värden \"%s\""
-#: ../libsvn_ra_svn/client.c:199
+#: ../libsvn_ra_svn/client.c:205
msgid "Prop diffs element not a list"
msgstr "Element med egenskapsskillnader är ingen lista"
-#: ../libsvn_ra_svn/client.c:395
+#: ../libsvn_ra_svn/client.c:403
#, c-format
msgid "Undefined tunnel scheme '%s'"
msgstr "Odefinierat tunnelschema \"%s\""
-#: ../libsvn_ra_svn/client.c:412
+#: ../libsvn_ra_svn/client.c:420
#, c-format
msgid "Tunnel scheme %s requires environment variable %s to be defined"
msgstr "Tunnelschemat %s kräver att miljövariabeln %s är definierad"
-#: ../libsvn_ra_svn/client.c:423
+#: ../libsvn_ra_svn/client.c:431
#, c-format
msgid "Can't tokenize command '%s'"
msgstr "Kan inte dela upp kommandosträngen \"%s\""
-#: ../libsvn_ra_svn/client.c:454
+#: ../libsvn_ra_svn/client.c:464
#, c-format
msgid "Error in child process: %s"
msgstr "Fel i barnprocess: %s"
-#: ../libsvn_ra_svn/client.c:480
-#, c-format
-msgid "Can't create tunnel"
-msgstr "Kan inte skapa tunnel"
-
-#: ../libsvn_ra_svn/client.c:525
+#: ../libsvn_ra_svn/client.c:539
msgid "To better debug SSH connection problems, remove the -q option from 'ssh' in the [tunnels] section of your Subversion configuration file."
-msgstr ""
+msgstr "För att kunna felsöka problem med SSH-anslutningar bättre, ta bort väljaren -q från \"ssh\" i sektionen \"[tunnels] \" i konfigurationsfilen för Subversion."
-#: ../libsvn_ra_svn/client.c:543
+#: ../libsvn_ra_svn/client.c:557
#, c-format
msgid "Illegal svn repository URL '%s'"
msgstr "Ogiltig svn-arkiv-URL \"%s\""
-#: ../libsvn_ra_svn/client.c:604
+#: ../libsvn_ra_svn/client.c:637
#, c-format
msgid "Server requires minimum version %d"
msgstr "Servern kräver minst version %d"
-#: ../libsvn_ra_svn/client.c:608
-#, fuzzy, c-format
+#: ../libsvn_ra_svn/client.c:641
+#, c-format
msgid "Server only supports versions up to %d"
-msgstr "Servern stöder ej unlock-kommandot"
+msgstr "Servern stöder bara versioner till och med %d"
-#: ../libsvn_ra_svn/client.c:616
-#, fuzzy
+#: ../libsvn_ra_svn/client.c:649
msgid "Server does not support edit pipelining"
-msgstr "Servern stöder ej datumbaserade operationer"
+msgstr "Servern stöder ej \"edit pipelining\""
-#: ../libsvn_ra_svn/client.c:655
+#: ../libsvn_ra_svn/client.c:686
msgid "Impossibly long repository root from server"
msgstr "För lång arkivrot från servern"
-#: ../libsvn_ra_svn/client.c:667
-#, fuzzy
+#: ../libsvn_ra_svn/client.c:698
msgid ""
"Module for accessing a repository using the svn network protocol.\n"
" - with Cyrus SASL authentication"
-msgstr "Modul för åtkomst av ett arkiv över nätverk via protokollet svn."
+msgstr ""
+"Modul för åtkomst av ett arkiv över nätverk via protokollet svn.\n"
+" - med Cyrus-SASL-autentisering"
-#: ../libsvn_ra_svn/client.c:671
+#: ../libsvn_ra_svn/client.c:702
msgid "Module for accessing a repository using the svn network protocol."
msgstr "Modul för åtkomst av ett arkiv över nätverk via protokollet svn."
-#: ../libsvn_ra_svn/client.c:883
+#: ../libsvn_ra_svn/client.c:912
msgid "Server did not send repository root"
msgstr "Servern skickade ingen arkivrot"
-#: ../libsvn_ra_svn/client.c:958
+#: ../libsvn_ra_svn/client.c:985
+#, c-format
+msgid "ra_svn does not support not specifying a log message with pre-1.5 servers; consider passing an empty one, or upgrading the server"
+msgstr "ra_svn stöder inte att ett loggmeddelande anges med en server äldre än 1.5; använd ett tomt loggmeddelande eller uppgradera servern"
+
+#: ../libsvn_ra_svn/client.c:1008
msgid "Server doesn't support setting arbitrary revision properties during commit"
-msgstr ""
+msgstr "Servern stöder inte att godtyckliga revisionsegenskaper sätts under arkivering"
-#: ../libsvn_ra_svn/client.c:1046
+#: ../libsvn_ra_svn/client.c:1111
+msgid "Inherited proplist element not a list"
+msgstr "Element i ärvda egenskaper är ingen lista"
+
+#: ../libsvn_ra_svn/client.c:1186
msgid "Non-string as part of file contents"
msgstr "Icke-sträng var del av filinnehåll"
-#: ../libsvn_ra_svn/client.c:1138
+#: ../libsvn_ra_svn/client.c:1272
msgid "Dirlist element not a list"
msgstr "Element med kataloglista är ingen lista"
-#: ../libsvn_ra_svn/client.c:1198
-#, fuzzy
+#: ../libsvn_ra_svn/client.c:1357
msgid "Mergeinfo element is not a list"
-msgstr "Element med egenskapsskillnader är ingen lista"
+msgstr "Element för sammanslagningsinformation är ej en lista"
-#: ../libsvn_ra_svn/client.c:1411
+#: ../libsvn_ra_svn/client.c:1565
msgid "Log entry not a list"
msgstr "Loggposten är ej en lista"
-#: ../libsvn_ra_svn/client.c:1452
+#: ../libsvn_ra_svn/client.c:1612
msgid "Changed-path entry not a list"
msgstr "Post med ändrade sökvägar är ingen lista"
-#: ../libsvn_ra_svn/client.c:1577
+#: ../libsvn_ra_svn/client.c:1778
msgid "'stat' not implemented"
msgstr "\"stat\" ej implementerat"
-#: ../libsvn_ra_svn/client.c:1637
+#: ../libsvn_ra_svn/client.c:1837
msgid "'get-locations' not implemented"
msgstr "\"get-locations\" ej implementerat"
-#: ../libsvn_ra_svn/client.c:1652
+#: ../libsvn_ra_svn/client.c:1852
msgid "Location entry not a list"
msgstr "Post med information om plats är ingen lista"
-#: ../libsvn_ra_svn/client.c:1691
-#, fuzzy
+#: ../libsvn_ra_svn/client.c:1891
msgid "'get-location-segments' not implemented"
-msgstr "\"get-locations\" ej implementerat"
+msgstr "\"get-location-segments\" ej implementerat"
-#: ../libsvn_ra_svn/client.c:1707
-#, fuzzy
+#: ../libsvn_ra_svn/client.c:1908
msgid "Location segment entry not a list"
-msgstr "Post med information om plats är ingen lista"
+msgstr "Post med information om segmentplats är ingen lista"
-#: ../libsvn_ra_svn/client.c:1758
+#: ../libsvn_ra_svn/client.c:1918
+msgid "Expected valid revision range"
+msgstr "Väntade ett giltigt revisionsnummerintervall"
+
+#: ../libsvn_ra_svn/client.c:1959
msgid "'get-file-revs' not implemented"
msgstr "\"get-file-revs\" ej implementerat"
-#: ../libsvn_ra_svn/client.c:1782
+#: ../libsvn_ra_svn/client.c:1983
msgid "Revision entry not a list"
msgstr "Revisionsposten är ej en lista"
-#: ../libsvn_ra_svn/client.c:1799 ../libsvn_ra_svn/client.c:1829
+#: ../libsvn_ra_svn/client.c:2000 ../libsvn_ra_svn/client.c:2030
msgid "Text delta chunk not a string"
msgstr "Textdeltadel är inte en sträng"
-#: ../libsvn_ra_svn/client.c:1841
+#: ../libsvn_ra_svn/client.c:2042
msgid "The get-file-revs command didn't return any revisions"
msgstr "get-file-revs-kommandot returnerade inga revisioner"
-#: ../libsvn_ra_svn/client.c:1889
+#: ../libsvn_ra_svn/client.c:2089
msgid "Server doesn't support the lock command"
msgstr "Servern stöder ej lock-kommandot"
-#: ../libsvn_ra_svn/client.c:1953
+#: ../libsvn_ra_svn/client.c:2153
msgid "Server doesn't support the unlock command"
msgstr "Servern stöder ej unlock-kommandot"
-#: ../libsvn_ra_svn/client.c:2051
+#: ../libsvn_ra_svn/client.c:2251
msgid "Lock response not a list"
msgstr "Svar på lock-kommandot är ingen lista"
-#: ../libsvn_ra_svn/client.c:2065
+#: ../libsvn_ra_svn/client.c:2265
msgid "Unknown status for lock command"
msgstr "Okänd statusindikering för lock-kommandot"
-#: ../libsvn_ra_svn/client.c:2089
+#: ../libsvn_ra_svn/client.c:2289
msgid "Didn't receive end marker for lock responses"
msgstr "Erhöll ingen slutmarkör i svaret på lock-kommandot"
-#: ../libsvn_ra_svn/client.c:2179
+#: ../libsvn_ra_svn/client.c:2379
msgid "Unlock response not a list"
msgstr "Svar på unlock-kommandot är ingen lista"
-#: ../libsvn_ra_svn/client.c:2193
+#: ../libsvn_ra_svn/client.c:2393
msgid "Unknown status for unlock command"
msgstr "Okänd statusindikation för unlock-kommandot"
-#: ../libsvn_ra_svn/client.c:2216
+#: ../libsvn_ra_svn/client.c:2416
msgid "Didn't receive end marker for unlock responses"
msgstr "Erhöll ingen slutmarkör i svaret på unlock-kommandot"
-#: ../libsvn_ra_svn/client.c:2240 ../libsvn_ra_svn/client.c:2301
+#: ../libsvn_ra_svn/client.c:2440 ../libsvn_ra_svn/client.c:2492
msgid "Server doesn't support the get-lock command"
msgstr "Servern stöder ej get-lock-kommandot"
-#: ../libsvn_ra_svn/client.c:2315
+#: ../libsvn_ra_svn/client.c:2506
msgid "Lock element not a list"
msgstr "Element med lås är ingen lista"
-#: ../libsvn_ra_svn/client.c:2358
+#: ../libsvn_ra_svn/client.c:2549
msgid "Server doesn't support the replay command"
msgstr "Servern stöder ej replay-kommandot"
-#: ../libsvn_ra_svn/client.c:2389
-#, fuzzy
+#: ../libsvn_ra_svn/client.c:2580
msgid "Server doesn't support the replay-range command"
-msgstr "Servern stöder ej replay-kommandot"
+msgstr "Servern stöder ej replay-range-kommandot"
-#: ../libsvn_ra_svn/client.c:2407
+#: ../libsvn_ra_svn/client.c:2598
#, c-format
msgid "Expected 'revprops', found '%s'"
-msgstr ""
+msgstr "Väntade \"revprops\", hittade \"%s\""
-#: ../libsvn_ra_svn/client.c:2424
+#: ../libsvn_ra_svn/client.c:2615
msgid "Error while replaying commit"
-msgstr ""
+msgstr "Fel vid uppspelning av arkivering"
-#: ../libsvn_ra_svn/client.c:2488
-#, fuzzy
+#: ../libsvn_ra_svn/client.c:2688
msgid "'get-deleted-rev' not implemented"
-msgstr "\"get-file-revs\" ej implementerat"
+msgstr "\"get-deleted-rev\" ej implementerat"
-#: ../libsvn_ra_svn/client.c:2553
+#: ../libsvn_ra_svn/client.c:2787
#, c-format
msgid "Unsupported RA loader version (%d) for ra_svn"
msgstr "Versionen för RA-laddaren (%d) stöds ej för ra_svn"
#: ../libsvn_ra_svn/cram.c:199 ../libsvn_ra_svn/cram.c:217
-#: ../libsvn_ra_svn/cyrus_auth.c:448 ../libsvn_ra_svn/cyrus_auth.c:503
+#: ../libsvn_ra_svn/cyrus_auth.c:526 ../libsvn_ra_svn/cyrus_auth.c:582
#: ../libsvn_ra_svn/internal_auth.c:66
msgid "Unexpected server response to authentication"
-msgstr "Oväntat svar från servern på autentisiering"
+msgstr "Oväntat svar från servern på autentisering"
-#: ../libsvn_ra_svn/cyrus_auth.c:176 ../svnserve/cyrus_auth.c:113
-#: ../svnserve/cyrus_auth.c:123
+#: ../libsvn_ra_svn/cyrus_auth.c:225
#, c-format
-msgid "Could not initialize the SASL library"
-msgstr "Kunde inte initiera SASL-biblioteket"
+msgid "SASL authentication error: %s%s"
+msgstr "SASL-autentiseringsfel: %s%s"
+
+#: ../libsvn_ra_svn/cyrus_auth.c:242
+#, c-format
+msgid "Could not initialized the SASL library: %s%s"
+msgstr "Kunde inte initiera SASL-biblioteket: %s%s"
-#: ../libsvn_ra_svn/cyrus_auth.c:830 ../libsvn_ra_svn/internal_auth.c:63
+#: ../libsvn_ra_svn/cyrus_auth.c:415
+#, c-format
+msgid "Could not create SASL context: %s%s"
+msgstr "Kunde inte skapa SASL-kontext: %s%s"
+
+#: ../libsvn_ra_svn/cyrus_auth.c:921 ../libsvn_ra_svn/internal_auth.c:63
#: ../libsvn_ra_svn/internal_auth.c:114
#, c-format
msgid "Authentication error from server: %s"
msgstr "Autentiseringsfel från servern: %s"
-#: ../libsvn_ra_svn/cyrus_auth.c:834
-#, fuzzy
+#: ../libsvn_ra_svn/cyrus_auth.c:925
msgid "Can't get username or password"
-msgstr "Kan inte erhålla lösenord"
+msgstr "Kan inte erhålla användarnamn eller lösenord"
-#: ../libsvn_ra_svn/editorp.c:131
+#: ../libsvn_ra_svn/editorp.c:145
msgid "Successful edit status returned too soon"
msgstr "Status för lyckad editering returnerades för tidigt"
-#: ../libsvn_ra_svn/editorp.c:458
+#: ../libsvn_ra_svn/editorp.c:487
msgid "Invalid file or dir token during edit"
msgstr "Ogiltig fil- eller katalogidentifierare vid editering"
-#: ../libsvn_ra_svn/editorp.c:667
+#: ../libsvn_ra_svn/editorp.c:715
msgid "Apply-textdelta already active"
msgstr "Apply-textdelta redan aktiv"
-#: ../libsvn_ra_svn/editorp.c:689 ../libsvn_ra_svn/editorp.c:707
+#: ../libsvn_ra_svn/editorp.c:737 ../libsvn_ra_svn/editorp.c:755
msgid "Apply-textdelta not active"
msgstr "Apply-textdelta inte aktiv"
-#: ../libsvn_ra_svn/editorp.c:802
+#: ../libsvn_ra_svn/editorp.c:850
#, c-format
msgid "Command 'finish-replay' invalid outside of replays"
msgstr "Kommandot finish-replay ej tillåtet om replay inte är aktivt"
-#: ../libsvn_ra_svn/editorp.c:893 ../libsvn_ra_svn/marshal.c:1025
+#: ../libsvn_ra_svn/editorp.c:954 ../libsvn_ra_svn/marshal.c:1498
#, c-format
-msgid "Unknown command '%s'"
-msgstr "Okänt kommando \"%s\""
+msgid "Unknown editor command '%s'"
+msgstr "Okänt editor-kommando \"%s\""
-#: ../libsvn_ra_svn/internal_auth.c:101 ../libsvn_subr/prompt.c:163
-#, c-format
+#: ../libsvn_ra_svn/internal_auth.c:101
msgid "Can't get password"
msgstr "Kan inte erhålla lösenord"
-#: ../libsvn_ra_svn/marshal.c:105
+#: ../libsvn_ra_svn/marshal.c:151
msgid "Capability entry is not a word"
msgstr "Capability-post är inte ett ord"
-#: ../libsvn_ra_svn/marshal.c:559
+#: ../libsvn_ra_svn/marshal.c:941
msgid "String length larger than maximum"
msgstr "Stränglängden är större än vad som maximalt är tillåtet"
-#: ../libsvn_ra_svn/marshal.c:647
+#: ../libsvn_ra_svn/marshal.c:1007
msgid "Too many nested items"
msgstr "För många nästlade objekt"
-#: ../libsvn_ra_svn/marshal.c:666
+#: ../libsvn_ra_svn/marshal.c:1027 ../libsvn_ra_svn/marshal.c:1105
msgid "Number is larger than maximum"
msgstr "Talet är större än vad som maximalt är tillåtet"
-#: ../libsvn_ra_svn/marshal.c:881
+#: ../libsvn_ra_svn/marshal.c:1133
+msgid "Word too long"
+msgstr "För långt ord"
+
+#: ../libsvn_ra_svn/marshal.c:1351
msgid "Proplist element not a list"
msgstr "Element med egenskaper är ingen lista"
-#: ../libsvn_ra_svn/marshal.c:919
+#: ../libsvn_ra_svn/marshal.c:1390
msgid "Empty error list"
msgstr "Tom fellista"
-#: ../libsvn_ra_svn/marshal.c:928 ../libsvn_ra_svn/marshal.c:954
+#: ../libsvn_ra_svn/marshal.c:1399 ../libsvn_ra_svn/marshal.c:1425
msgid "Malformed error list"
msgstr "Felaktig lista med information om fel"
-#: ../libsvn_ra_svn/marshal.c:982
+#: ../libsvn_ra_svn/marshal.c:1454
#, c-format
msgid "Unknown status '%s' in command response"
msgstr "Okänd status \"%s\" i kommandorespons"
@@ -4548,63 +4944,98 @@ msgid "Can't write to connection"
msgstr "Kan inte skriva till nätverksanslutningen"
#: ../libsvn_ra_svn/streams.c:144
-#, fuzzy, c-format
+#, c-format
msgid "Can't get socket timeout"
-msgstr "Kan inte skapa uttag (socket)"
+msgstr "Kan inte erhålla tidsgräns för uttag (socket)"
-#: ../libsvn_repos/commit.c:135
-#, fuzzy, c-format
+#: ../libsvn_repos/commit.c:170
+#, c-format
msgid "'%s' is out of date"
-msgstr "Objektet är inaktuellt"
+msgstr "\"%s\" är inaktuell"
-#: ../libsvn_repos/commit.c:302 ../libsvn_repos/commit.c:447
+#: ../libsvn_repos/commit.c:291
#, c-format
msgid "Got source path but no source revision for '%s'"
msgstr "Erhöll källsökväg men ingen källrevision för \"%s\""
-#: ../libsvn_repos/commit.c:334 ../libsvn_repos/commit.c:478
+#: ../libsvn_repos/commit.c:324
#, c-format
msgid "Source url '%s' is from different repository"
-msgstr "Käll-RUL:en \"%s\" är från ett annat arkiv"
+msgstr "Käll-URL:en \"%s\" är från ett annat arkiv"
-#: ../libsvn_repos/commit.c:606
-#, fuzzy, c-format
+#: ../libsvn_repos/commit.c:640
+#, c-format
msgid ""
"Checksum mismatch for resulting fulltext\n"
"(%s)"
msgstr ""
-"Kontrollsumma fel för resulterane fulltext\n"
-"(\"%s\"):\n"
-" väntad kontrollsumma: %s\n"
-" erhållen kontrollsumma: %s\n"
+"Kontrollsumma fel för resulterande fulltext\n"
+"(\"%s\")"
+
+#: ../libsvn_repos/commit.c:685
+msgid "(no error)"
+msgstr "(inget fel)"
+
+#: ../libsvn_repos/commit.c:716 ../libsvn_repos/commit.c:722
+msgid "post-commit hook failed with no error message."
+msgstr "Krokskriptet efter arkivering (\"post-commit\") misslyckades utan något felmeddelande."
+
+#: ../libsvn_repos/commit.c:725
+#, c-format
+msgid ""
+"post commit FS processing had error:\n"
+"%s\n"
+"%s"
+msgstr ""
+"Filsystemsbearbetning efter arkiveringen (post-commit) slog fel:\n"
+"%s\n"
+"%s"
+
+#: ../libsvn_repos/commit.c:726 ../libsvn_repos/commit.c:735
+msgid "(no error message)"
+msgstr "(inget felmeddelande)"
-#: ../libsvn_repos/delta.c:191
+#: ../libsvn_repos/commit.c:733
+#, c-format
+msgid ""
+"post commit FS processing had error:\n"
+"%s"
+msgstr ""
+"Filsystemsbearbetning efter arkiveringen (post-commit) slog fel:\n"
+"%s"
+
+#: ../libsvn_repos/commit.c:1255 ../libsvn_repos/fs-wrap.c:98
+#: ../libsvn_repos/load-fs-vtable.c:978
+msgid "Commit succeeded, but post-commit hook failed"
+msgstr "Arkiveringen lyckades, men krokskriptet efter arkivering (\"post-commit\") misslyckades"
+
+#: ../libsvn_repos/delta.c:192
msgid "Unable to open root of edit"
msgstr "Kunde inte öppna rot för editering"
-#: ../libsvn_repos/delta.c:242
+#: ../libsvn_repos/delta.c:247
msgid "Invalid target path"
msgstr "Ogiltig målsökväg"
-#: ../libsvn_repos/delta.c:246
+#: ../libsvn_repos/delta.c:251
msgid "Delta depth 'exclude' not supported"
-msgstr ""
+msgstr "Delta-djupet \"exclude\" stöds ej"
-#: ../libsvn_repos/delta.c:272
+#: ../libsvn_repos/delta.c:277
msgid "Invalid editor anchoring; at least one of the input paths is not a directory and there was no source entry"
msgstr "Editeringen börjar på ett ogiltigt ställe; minst en av sökvägarna är ingen katalog och det fanns ingen källpost"
-#: ../libsvn_repos/deprecated.c:570 ../svnadmin/main.c:671
+#: ../libsvn_repos/deprecated.c:614 ../svnadmin/svnadmin.c:780
#, c-format
msgid "* Dumped revision %ld.\n"
msgstr "* Dumpade revision %ld.\n"
-#: ../libsvn_repos/deprecated.c:576 ../svnadmin/main.c:677
+#: ../libsvn_repos/deprecated.c:620 ../svnadmin/svnadmin.c:786
#, c-format
msgid "* Verified revision %ld.\n"
msgstr "* Verifierade revision %ld.\n"
-#: ../libsvn_repos/deprecated.c:584 ../svnadmin/main.c:717
+#: ../libsvn_repos/deprecated.c:628 ../svnadmin/svnadmin.c:834
#, c-format
msgid ""
"\n"
@@ -4615,7 +5046,7 @@ msgstr ""
"------- Arkiverade revision %ld >>>\n"
"\n"
-#: ../libsvn_repos/deprecated.c:590 ../svnadmin/main.c:723
+#: ../libsvn_repos/deprecated.c:634 ../svnadmin/svnadmin.c:840
#, c-format
msgid ""
"\n"
@@ -4626,608 +5057,709 @@ msgstr ""
"------- Arkiverade ny revision %ld (från originalrevisionen %ld) >>>\n"
"\n"
-#: ../libsvn_repos/deprecated.c:603 ../svnadmin/main.c:736
+#: ../libsvn_repos/deprecated.c:647 ../svnadmin/svnadmin.c:853
#, c-format
msgid " * editing path : %s ..."
-msgstr " * Editerar sökvägen : %s ..."
+msgstr " * editerar sökvägen: %s ..."
-#: ../libsvn_repos/deprecated.c:609 ../svnadmin/main.c:742
+#: ../libsvn_repos/deprecated.c:653 ../svnadmin/svnadmin.c:859
#, c-format
msgid " * deleting path : %s ..."
msgstr " * raderar sökvägen: %s ..."
-#: ../libsvn_repos/deprecated.c:615 ../svnadmin/main.c:748
+#: ../libsvn_repos/deprecated.c:659 ../svnadmin/svnadmin.c:865
#, c-format
msgid " * adding path : %s ..."
-msgstr " * lägger till sökvägen %s ..."
+msgstr " * lägger till sökvägen: %s ..."
-#: ../libsvn_repos/deprecated.c:621 ../svnadmin/main.c:754
+#: ../libsvn_repos/deprecated.c:665 ../svnadmin/svnadmin.c:871
#, c-format
msgid " * replacing path : %s ..."
-msgstr " * ersätter sökvägen : %s ..."
+msgstr " * ersätter sökvägen: %s ..."
-#: ../libsvn_repos/deprecated.c:631 ../svnadmin/main.c:764
+#: ../libsvn_repos/deprecated.c:675 ../svnadmin/svnadmin.c:881
msgid " done.\n"
msgstr " klart.\n"
-#: ../libsvn_repos/deprecated.c:641 ../svnadmin/main.c:774
+#: ../libsvn_repos/deprecated.c:685 ../svnadmin/svnadmin.c:891
#, c-format
msgid "<<< Started new transaction, based on original revision %ld\n"
msgstr "<<< Startade ny transaktion, baserad på originalrevisionen %ld\n"
-#: ../libsvn_repos/deprecated.c:648 ../svnadmin/main.c:781
+#: ../libsvn_repos/deprecated.c:692 ../svnadmin/svnadmin.c:904
#, c-format
msgid " removing '\\r' from %s ..."
-msgstr ""
+msgstr " tar bort \"\\r\" från %s ..."
-#: ../libsvn_repos/dump.c:353
+#: ../libsvn_repos/dump.c:267
#, c-format
-msgid ""
-"WARNING: Referencing data in revision %ld, which is older than the oldest\n"
-"WARNING: dumped revision (%ld). Loading this dump into an empty repository\n"
-"WARNING: will fail.\n"
-msgstr ""
-"VARNING: Refererar till data i revision %ld, vilken är äldre än den äldsta\n"
-"VARNING: dumpade revisionen (%ld). Ett försök att läsa in denna dump i ett\n"
-"VARNING: tomt arkiv kommer att misslyckas.\n"
+msgid "E%06d: While validating fspath '%s': %s"
+msgstr "E%06d: Fel vid kontroll av fs-sökväg \"%s\": %s"
-#: ../libsvn_repos/dump.c:457
-#, fuzzy, c-format
-msgid ""
-"WARNING: Mergeinfo referencing revision(s) prior to the oldest dumped revision (%ld).\n"
-"WARNING: Loading this dump may result in invalid mergeinfo.\n"
-msgstr ""
-"VARNING: Refererar till data i revision %ld, vilken är äldre än den äldsta\n"
-"VARNING: dumpade revisionen (%ld). Ett försök att läsa in denna dump i ett\n"
-"VARNING: tomt arkiv kommer att misslyckas.\n"
+#: ../libsvn_repos/dump.c:389
+#, c-format
+msgid "Referencing data in revision %ld, which is older than the oldest dumped revision (r%ld). Loading this dump into an empty repository will fail."
+msgstr "Refererar till data i revision %ld, vilken är äldre än den äldsta dumpade revisionen (r%ld). Ett försök att läsa in denna dump i ett tomt arkiv kommer att misslyckas."
-#: ../libsvn_repos/dump.c:979 ../libsvn_repos/dump.c:1235
+#: ../libsvn_repos/dump.c:494
+#, c-format
+msgid "Mergeinfo referencing revision(s) prior to the oldest dumped revision (r%ld). Loading this dump may result in invalid mergeinfo."
+msgstr "Sammanslagningsinformation refererar till revision(er) före den äldsta dumpade revisionen (r%ld). Ett försök att läsa in denna dump kan leda till inkorrekt sammanslagningsinformation."
+
+#: ../libsvn_repos/dump.c:1124 ../libsvn_repos/dump.c:1416
#, c-format
msgid "Start revision %ld is greater than end revision %ld"
msgstr "Startrevisionen %ld är större än slutrevisionen %ld"
-#: ../libsvn_repos/dump.c:984 ../libsvn_repos/dump.c:1240
+#: ../libsvn_repos/dump.c:1129 ../libsvn_repos/dump.c:1421
#, c-format
msgid "End revision %ld is invalid (youngest revision is %ld)"
msgstr "Slutrevisionen %ld är ogiltig (den yngsta revisionen är %ld)"
-#: ../libsvn_repos/dump.c:1120
-msgid ""
-"WARNING: The range of revisions dumped contained references to\n"
-"WARNING: copy sources outside that range.\n"
-msgstr ""
+#: ../libsvn_repos/dump.c:1267
+msgid "The range of revisions dumped contained references to copy sources outside that range."
+msgstr "De dumpade revisionerna innehöll referenser till kopior med källa utanför det revisionsområdet."
-#: ../libsvn_repos/dump.c:1131
-msgid ""
-"WARNING: The range of revisions dumped contained mergeinfo\n"
-"WARNING: which reference revisions outside that range.\n"
-msgstr ""
+#: ../libsvn_repos/dump.c:1281
+msgid "The range of revisions dumped contained mergeinfo which reference revisions outside that range."
+msgstr "De dumpade revisionerna innehöll sammanslagningsinformation med referenser till revisioner utanför det revisionsområdet."
-#: ../libsvn_repos/dump.c:1188
-#, fuzzy, c-format
+#: ../libsvn_repos/dump.c:1340
+#, c-format
msgid "Unexpected node kind %d for '%s'"
-msgstr "Oväntad nodtyp funnen"
+msgstr "Oväntad nodtyp %d för \"%s\""
-#: ../libsvn_repos/fs-wrap.c:64 ../libsvn_repos/load-fs-vtable.c:818
-msgid "Commit succeeded, but post-commit hook failed"
-msgstr "Arkiveringen lyckades, men post-commit-hookskript misslyckades"
-
-#: ../libsvn_repos/fs-wrap.c:171
+#: ../libsvn_repos/fs-wrap.c:183
#, c-format
msgid "Storage of non-regular property '%s' is disallowed through the repository interface, and could indicate a bug in your client"
-msgstr "Lagring av egenskapen \"%s\" som ej är \"vanlig\" är inte tillåtet via arkivets gränssnitt och kan tyda på en bugg i din klient"
+msgstr "Lagring av egenskapen \"%s\" som ej är \"vanlig\" är inte tillåtet via arkivets gränssnitt och kan tyda på ett programfel i klienten"
-#: ../libsvn_repos/fs-wrap.c:186
+#: ../libsvn_repos/fs-wrap.c:198
#, c-format
msgid "Cannot accept '%s' property because it is not encoded in UTF-8"
-msgstr ""
+msgstr "Egenskapen \"%s\" godtas ej eftersom den inte är kodad i UTF-8"
-#: ../libsvn_repos/fs-wrap.c:196
+#: ../libsvn_repos/fs-wrap.c:208
#, c-format
msgid "Cannot accept non-LF line endings in '%s' property"
-msgstr ""
+msgstr "Kan inte godta andra radslut än radmatning (LF) i egenskapen \"%s\""
+
+#: ../libsvn_repos/fs-wrap.c:249
+#, c-format
+msgid "Commit rejected because mergeinfo on '%s' contains unexpected string terminator"
+msgstr "Arkivering avslogs eftersom sammanslagningsinformationen på \"%s\" innehåller oväntat strängslutstecken"
+
+#: ../libsvn_repos/fs-wrap.c:256
+#, c-format
+msgid "Commit rejected because mergeinfo on '%s' is syntactically invalid"
+msgstr "Arkivering avslogs eftersom sammanslagningsinformationen på \"%s\" har fel syntax"
-#: ../libsvn_repos/fs-wrap.c:330
+#: ../libsvn_repos/fs-wrap.c:386
#, c-format
msgid "Write denied: not authorized to read all of revision %ld"
msgstr "Skrivning nekad: ej behörig att läsa allt i revision %ld"
-#: ../libsvn_repos/fs-wrap.c:507
+#: ../libsvn_repos/fs-wrap.c:570
#, c-format
msgid "Cannot unlock path '%s', no authenticated username available"
-msgstr "Kan inte låsa upp sökvägen '%s', inget autentiserat användarnamn tillgängligt"
+msgstr "Kan inte låsa upp sökvägen \"%s\", inget autentiserat användarnamn tillgängligt"
-#: ../libsvn_repos/fs-wrap.c:522
+#: ../libsvn_repos/fs-wrap.c:586
msgid "Unlock succeeded, but post-unlock hook failed"
-msgstr "Upplåsningen lyckades, men post-unlock-hookskript misslyckades"
+msgstr "Upplåsningen lyckades, men krokskriptet efter upplåsning (\"post-unlock\") misslyckades"
-#: ../libsvn_repos/hooks.c:87
-#, fuzzy, c-format
+#: ../libsvn_repos/hooks.c:92
+#, c-format
msgid "'%s' hook succeeded, but error output could not be read"
-msgstr "Hookskriptet \"%s\" misslyckades; ingen felutskrift tillgänglig"
+msgstr "Krokskriptet \"%s\" lyckades, men felutskriften kunde inte läsas"
-#: ../libsvn_repos/hooks.c:102
+#: ../libsvn_repos/hooks.c:107
msgid "[Error output could not be translated from the native locale to UTF-8.]"
-msgstr ""
+msgstr "[Felutskrift kunde inte översättas från lokal kodning till UTF-8.]"
-#: ../libsvn_repos/hooks.c:107
+#: ../libsvn_repos/hooks.c:112
msgid "[Error output could not be read.]"
-msgstr ""
+msgstr "[Felutskrift kunde inte läsas.]"
-#: ../libsvn_repos/hooks.c:116
+#: ../libsvn_repos/hooks.c:121
#, c-format
msgid "'%s' hook failed (did not exit cleanly: apr_exit_why_e was %d, exitcode was %d). "
-msgstr ""
+msgstr "Krokskriptet \"%s\" misslyckades (avslutades inte rent: apr_exit_why_e var %d, avslutningskod %d). "
-#: ../libsvn_repos/hooks.c:125
+#: ../libsvn_repos/hooks.c:130
msgid "Commit"
-msgstr ""
+msgstr "Arkivering"
-#: ../libsvn_repos/hooks.c:127
+#: ../libsvn_repos/hooks.c:132
msgid "Revprop change"
-msgstr ""
+msgstr "Ändring av revisionsegenskap"
-#: ../libsvn_repos/hooks.c:129
-msgid "Obliteration"
-msgstr ""
-
-#: ../libsvn_repos/hooks.c:131
+#: ../libsvn_repos/hooks.c:134
msgid "Lock"
-msgstr ""
+msgstr "LÃ¥sning"
-#: ../libsvn_repos/hooks.c:133
+#: ../libsvn_repos/hooks.c:136
msgid "Unlock"
-msgstr ""
+msgstr "Upplåsning"
-#: ../libsvn_repos/hooks.c:138
-#, fuzzy, c-format
+#: ../libsvn_repos/hooks.c:141
+#, c-format
msgid "%s hook failed (exit code %d)"
-msgstr ""
-"Hookskriptet \"%s\" misslyckades med felutskriften:\n"
-"%s"
+msgstr "Krokskriptet \"%s\" misslyckades (avslutningskod %d)"
-#: ../libsvn_repos/hooks.c:142
+#: ../libsvn_repos/hooks.c:145
#, c-format
msgid "%s blocked by %s hook (exit code %d)"
-msgstr ""
+msgstr "%s blockerad av kroken \"%s\" (avslutningskod %d)"
-#: ../libsvn_repos/hooks.c:149
+#: ../libsvn_repos/hooks.c:152
msgid " with output:\n"
-msgstr ""
+msgstr " med utdata:\n"
-#: ../libsvn_repos/hooks.c:155
+#: ../libsvn_repos/hooks.c:158
msgid " with no output."
-msgstr ""
-
-#: ../libsvn_repos/hooks.c:190 ../libsvn_repos/hooks.c:217
-#, c-format
-msgid "Can't create pipe for hook '%s'"
-msgstr "Kan inte skapa rör för hookskriptet \"%s\""
-
-#: ../libsvn_repos/hooks.c:202 ../libsvn_repos/hooks.c:223
-#, c-format
-msgid "Can't make pipe read handle non-inherited for hook '%s'"
-msgstr "Kan inte slå av arv på läshandtag för rör för hookskriptet \"%s\""
-
-#: ../libsvn_repos/hooks.c:208 ../libsvn_repos/hooks.c:229
-#, c-format
-msgid "Can't make pipe write handle non-inherited for hook '%s'"
-msgstr "Kan inte slå av arv på skrivhandtag för rör för hookskriptet \"%s\""
+msgstr " utan utdata."
-#: ../libsvn_repos/hooks.c:238
+#: ../libsvn_repos/hooks.c:233
#, c-format
msgid "Can't create null stdout for hook '%s'"
-msgstr "Kan inte skapa standard ut till null-enheten för hookskriptet \"%s\""
+msgstr "Kan inte skapa standard ut till null-enheten för krokskriptet \"%s\""
-#: ../libsvn_repos/hooks.c:252 ../libsvn_repos/hooks.c:259
-#, c-format
-msgid "Error closing write end of stderr pipe"
-msgstr "Fel vid stängning av skrivänden för standard fel-rör"
-
-#: ../libsvn_repos/hooks.c:265
+#: ../libsvn_repos/hooks.c:260
#, c-format
msgid "Failed to start '%s' hook"
-msgstr "Kunde inte starta hookskriptet \"%s\""
-
-#: ../libsvn_repos/hooks.c:278 ../libsvn_repos/hooks.c:287
-#, c-format
-msgid "Error closing read end of stderr pipe"
-msgstr "Fel vid stängning av läsänden av rör för standard fel"
+msgstr "Kunde inte starta krokskriptet \"%s\""
-#: ../libsvn_repos/hooks.c:295
+#: ../libsvn_repos/hooks.c:282
#, c-format
msgid "Error closing null file"
msgstr "Fel vid stängning av nullenheten"
-#: ../libsvn_repos/hooks.c:379
+#: ../libsvn_repos/hooks.c:446
#, c-format
msgid "Failed to run '%s' hook; broken symlink"
-msgstr "Fel vid körning av hooskriptet \"%s\"; bruten länk"
+msgstr "Fel vid körning av krokskriptet \"%s\"; bruten länk"
-#: ../libsvn_repos/hooks.c:589
+#: ../libsvn_repos/hooks.c:664
msgid ""
"Repository has not been enabled to accept revision propchanges;\n"
"ask the administrator to create a pre-revprop-change hook"
-msgstr "Ändring av revisionsegenskaper är ej påslaget i arkivet; be administratören skapa ett pre-revprop-change-hookskript"
+msgstr "Ändring av revisionsegenskaper är ej påslaget i arkivet; be förvaltaren skapa krokskriptet \"pre-revprop-change\""
-#: ../libsvn_repos/hooks.c:688
-#, fuzzy
-msgid "Repository has not been enabled to accept obliteration"
-msgstr "Operationen kräver åtkomst till ett arkiv"
-
-#: ../libsvn_repos/load-fs-vtable.c:466
+#: ../libsvn_repos/load-fs-vtable.c:565 ../svnrdump/load_editor.c:766
#, c-format
msgid "Relative source revision %ld is not available in current repository"
msgstr "Den relativa källrevisionen %ld är inte tillgänglig i nuvarande arkiv"
-#: ../libsvn_repos/load-fs-vtable.c:482
+#: ../libsvn_repos/load-fs-vtable.c:579
#, c-format
msgid ""
"Copy source checksum mismatch on copy from '%s'@%ld\n"
"to '%s' in rev based on r%ld"
msgstr ""
+"Felaktig kontrollsumma för källan i kopiering från \"%s\"@%ld\n"
+"till \"%s\" i revision baserad på r%ld"
-#: ../libsvn_repos/load-fs-vtable.c:539
+#: ../libsvn_repos/load-fs-vtable.c:638
msgid "Malformed dumpstream: Revision 0 must not contain node records"
msgstr "Felaktig dumpström: revision 0 får ej innehålla nodposter"
-#: ../libsvn_repos/load-fs-vtable.c:548
+#: ../libsvn_repos/load-fs-vtable.c:654
#, c-format
msgid "Unrecognized node-action on node '%s'"
msgstr "Okänd nodåtgärd på noden \"%s\""
-#: ../libsvn_repos/load.c:53
+#: ../libsvn_repos/load.c:54
msgid "Premature end of content data in dumpstream"
msgstr "För tidigt slut på innehåll i dumpström"
-#: ../libsvn_repos/load.c:60
+#: ../libsvn_repos/load.c:61
msgid "Dumpstream data appears to be malformed"
-msgstr "Dumöströmmen verkar vara felaktig"
+msgstr "Dumpströmmen verkar vara felaktig"
-#: ../libsvn_repos/load.c:109
+#: ../libsvn_repos/load.c:110
#, c-format
msgid "Dump stream contains a malformed header (with no ':') at '%.20s'"
msgstr "Dumpströmmen innehåller ett felaktigt huvud (utan \":\") vid \"%.20s\""
-#: ../libsvn_repos/load.c:122
+#: ../libsvn_repos/load.c:123
#, c-format
msgid "Dump stream contains a malformed header (with no value) at '%.20s'"
-msgstr "Dumpströmmen innehåller ett felaktigt huvud (som saknar värde) vid '%.20s'"
+msgstr "Dumpströmmen innehåller ett felaktigt huvud (som saknar värde) vid \"%.20s\""
-#: ../libsvn_repos/load.c:211
+#: ../libsvn_repos/load.c:212
msgid "Incomplete or unterminated property block"
msgstr "ofullständigt eller ej avslutat egenskapsblock"
-#: ../libsvn_repos/load.c:359
+#: ../libsvn_repos/load.c:360
msgid "Unexpected EOF writing contents"
msgstr "Oväntat filslut vid skrivning av innehåll"
-#: ../libsvn_repos/load.c:388
-msgid "Malformed dumpfile header"
-msgstr "Felaktigt huvud i dumpfil"
+#: ../libsvn_repos/load.c:390
+#, c-format
+msgid "Malformed dumpfile header '%s'"
+msgstr "Felaktigt huvud \"%s\" i dumpfil"
-#: ../libsvn_repos/load.c:394 ../libsvn_repos/load.c:439
+#: ../libsvn_repos/load.c:397
#, c-format
msgid "Unsupported dumpfile version: %d"
msgstr "Dumpfilsversionen %d stöds ej"
-#: ../libsvn_repos/load.c:542
+#: ../libsvn_repos/load.c:538
msgid "Unrecognized record type in stream"
msgstr "Okänd posttyp i ström"
-#: ../libsvn_repos/load.c:655
+#: ../libsvn_repos/load.c:645
msgid "Sum of subblock sizes larger than total block content length"
msgstr "Summan av underblockens storlekar större än den totala blocklängden"
-#: ../libsvn_repos/node_tree.c:243
+#: ../libsvn_repos/node_tree.c:244
#, c-format
msgid "'%s' not found in filesystem"
msgstr "\"%s\" finns inte i filsystemet"
-#: ../libsvn_repos/replay.c:418
+#: ../libsvn_repos/replay.c:546 ../libsvn_repos/replay.c:1267
#, c-format
msgid "Filesystem path '%s' is neither a file nor a directory"
msgstr "Sökvägen \"%s\" i filsystemet är varken en fil eller katalog"
-#: ../libsvn_repos/reporter.c:195
+#: ../libsvn_repos/reporter.c:205
#, c-format
msgid "Invalid length (%%%s) when about to read a string"
-msgstr ""
+msgstr "Ogiltig längd (%%%s) när en sträng skulle läsas"
-#: ../libsvn_repos/reporter.c:256
-#, fuzzy, c-format
+#: ../libsvn_repos/reporter.c:270
+#, c-format
msgid "Invalid depth (%c) for path '%s'"
-msgstr "Ogiltig sökväg som källa för kopiering \"%s\""
+msgstr "Ogiltigt djup (%c) för sökväg \"%s\""
-#: ../libsvn_repos/reporter.c:849
+#: ../libsvn_repos/reporter.c:951
#, c-format
msgid "Working copy path '%s' does not exist in repository"
msgstr "Sökvägen \"%s\" finns i arbetskopian men ej i arkivet"
-#: ../libsvn_repos/reporter.c:1217
+#: ../libsvn_repos/reporter.c:1348
msgid "Not authorized to open root of edit operation"
msgstr "Ej behörig att öppna editeringens rot"
-#: ../libsvn_repos/reporter.c:1234
-#, fuzzy, c-format
+#: ../libsvn_repos/reporter.c:1365
+#, c-format
msgid "Target path '%s' does not exist"
-msgstr "Målsökvägen finns inte"
+msgstr "Målsökvägen \"%s\" finns inte"
-#: ../libsvn_repos/reporter.c:1242
+#: ../libsvn_repos/reporter.c:1373
msgid "Cannot replace a directory from within"
msgstr "Kan inte ersätta en katalog från inuti sig själv"
-#: ../libsvn_repos/reporter.c:1285
+#: ../libsvn_repos/reporter.c:1413
msgid "Invalid report for top level of working copy"
msgstr "Ogiltig rapport arbetskopians toppnivå"
-#: ../libsvn_repos/reporter.c:1300
+#: ../libsvn_repos/reporter.c:1428
msgid "Two top-level reports with no target"
msgstr "Två toppnivårapporter utan mål"
-#: ../libsvn_repos/reporter.c:1358
-#, fuzzy, c-format
+#: ../libsvn_repos/reporter.c:1490
+#, c-format
msgid "Unsupported report depth '%s'"
-msgstr "Nodtypen för sökvägen \"%s\" stöds inte"
+msgstr "Rapportdjupet \"%s\" stöds inte"
-#: ../libsvn_repos/reporter.c:1386
+#: ../libsvn_repos/reporter.c:1520
msgid "Depth 'exclude' not supported for link"
-msgstr ""
+msgstr "Djupet \"exclude\" stöds ej för länkar"
-#: ../libsvn_repos/reporter.c:1446
+#: ../libsvn_repos/reporter.c:1577
msgid "Request depth 'exclude' not supported"
-msgstr ""
+msgstr "Efterfrågedjup \"exclude\" stöds ej"
-#: ../libsvn_repos/repos.c:199
+#: ../libsvn_repos/repos.c:188
#, c-format
msgid "'%s' exists and is non-empty"
msgstr "\"%s\" finns och är inte tom"
-#: ../libsvn_repos/repos.c:245
+#: ../libsvn_repos/repos.c:234
msgid "Creating db logs lock file"
msgstr "Skapar låsfil för db-loggar"
-#: ../libsvn_repos/repos.c:263
+#: ../libsvn_repos/repos.c:252
msgid "Creating db lock file"
msgstr "Skapar låsfil för db"
-#: ../libsvn_repos/repos.c:273
+#: ../libsvn_repos/repos.c:262
msgid "Creating lock dir"
msgstr "Skapar låskatalog"
-#: ../libsvn_repos/repos.c:302
+#: ../libsvn_repos/repos.c:291
msgid "Creating hook directory"
-msgstr "Skapar katalog för hookskript"
+msgstr "Skapar katalog för krokskript"
-#: ../libsvn_repos/repos.c:378
+#: ../libsvn_repos/repos.c:373
msgid "Creating start-commit hook"
-msgstr "Skapar start-commit-hookskript"
+msgstr "Skapar krokskript \"start-commit\""
-#: ../libsvn_repos/repos.c:468
+#: ../libsvn_repos/repos.c:465
msgid "Creating pre-commit hook"
-msgstr "Skapar pre-commit-hookskript"
+msgstr "Skapar krokskript \"pre-commit\""
-#: ../libsvn_repos/repos.c:544
+#: ../libsvn_repos/repos.c:543
msgid "Creating pre-revprop-change hook"
-msgstr "Skapar pre-revprop-change-hookskript"
-
-#: ../libsvn_repos/repos.c:618
-#, fuzzy
-msgid "Creating pre-obliterate hook"
-msgstr "Skapar pre-commit-hookskript"
+msgstr "Skapar krokskript \"pre-revprop-change\""
-#: ../libsvn_repos/repos.c:846
+#: ../libsvn_repos/repos.c:783
msgid "Creating post-commit hook"
-msgstr "Skapar post-commit-hookskript"
+msgstr "Skapar krokskript \"post-commit\""
-#: ../libsvn_repos/repos.c:1032
+#: ../libsvn_repos/repos.c:975
msgid "Creating post-revprop-change hook"
-msgstr "Skapar post-revprop-change-hookskript"
+msgstr "Skapar krokskript \"post-revprop-change\""
-#: ../libsvn_repos/repos.c:1090
-#, fuzzy
-msgid "Creating post-obliterate hook"
-msgstr "Skapar post-commit-hookskript"
-
-#: ../libsvn_repos/repos.c:1100
+#: ../libsvn_repos/repos.c:987
msgid "Creating conf directory"
msgstr "Skapar conf-katalog"
-#: ../libsvn_repos/repos.c:1169
+#: ../libsvn_repos/repos.c:1071
msgid "Creating svnserve.conf file"
msgstr "Skapar filen svnserve.conf"
-#: ../libsvn_repos/repos.c:1187
+#: ../libsvn_repos/repos.c:1089
msgid "Creating passwd file"
msgstr "Skapar filen passwd"
-#: ../libsvn_repos/repos.c:1229
+#: ../libsvn_repos/repos.c:1131
msgid "Creating authz file"
msgstr "Skapar fil för behörighetskontroll"
-#: ../libsvn_repos/repos.c:1264
+#: ../libsvn_repos/repos.c:1161
+msgid "Creating hooks-env file"
+msgstr "Skapar fil \"hooks-env\""
+
+#: ../libsvn_repos/repos.c:1217
msgid "Could not create top-level directory"
msgstr "Kunde inte skapa toppkatalog"
-#: ../libsvn_repos/repos.c:1276
+#: ../libsvn_repos/repos.c:1227
msgid "Creating DAV sandbox dir"
msgstr "Skapar katalog för DAV"
-#: ../libsvn_repos/repos.c:1345
+#: ../libsvn_repos/repos.c:1296
msgid "Error opening db lockfile"
msgstr "Fel då låsfil för db skulle öppnas"
-#: ../libsvn_repos/repos.c:1384
-#, fuzzy, c-format
+#: ../libsvn_repos/repos.c:1333
+#, c-format
+msgid "'%s' is an existing repository"
+msgstr "\"%s\" är ett befintligt arkiv"
+
+#: ../libsvn_repos/repos.c:1337
+#, c-format
msgid "'%s' is a subdirectory of an existing repository rooted at '%s'"
-msgstr "\"%s\" är ingen katalog i filsystemet \"%s\""
+msgstr "\"%s\" är en underkatalog av ett befintligt arkiv vars rot är \"%s\""
-#: ../libsvn_repos/repos.c:1392
+#: ../libsvn_repos/repos.c:1345
msgid "Repository creation failed"
msgstr "Kunde inte skapa arkiv"
-#: ../libsvn_repos/repos.c:1473
+#: ../libsvn_repos/repos.c:1430
#, c-format
msgid "Expected repository format '%d' or '%d'; found format '%d'"
msgstr "Förväntat format på arkivet \"%d\" eller \"%d\"; hittade \"%d\""
-#: ../libsvn_repos/repos.c:1701
-#, fuzzy, c-format
+#: ../libsvn_repos/repos.c:1674
+#, c-format
msgid "unknown capability '%s'"
-msgstr "Okänt kommando \"%s\""
+msgstr "okänd förmåga \"%s\""
-#: ../libsvn_repos/rev_hunt.c:70
+#: ../libsvn_repos/rev_hunt.c:71
#, c-format
msgid "Failed to find time on revision %ld"
msgstr "Kunde inte hitta tiden för revision %ld"
-#: ../libsvn_repos/rev_hunt.c:204 ../libsvn_repos/rev_hunt.c:319
+#: ../libsvn_repos/rev_hunt.c:210 ../libsvn_repos/rev_hunt.c:325
#, c-format
msgid "Invalid start revision %ld"
msgstr "Ogiltig startrevision %ld"
-#: ../libsvn_repos/rev_hunt.c:512
+#: ../libsvn_repos/rev_hunt.c:518
msgid "Unreadable path encountered; access denied"
msgstr "En sökväg som ej är läsbar har påträffats; åtkomst nekas"
-#: ../libsvn_repos/rev_hunt.c:1106
-#, fuzzy, c-format
+#: ../libsvn_repos/rev_hunt.c:1156 ../libsvn_repos/rev_hunt.c:1495
+#, c-format
msgid "'%s' is not a file in revision %ld"
-msgstr "\"%s\" finns inte i revision %ld"
+msgstr "\"%s\" är inte en fil i revision %ld"
-#: ../libsvn_subr/auth.c:607
-#, fuzzy, c-format
-msgid "Invalid config: unknown password store '%s'"
-msgstr "Felaktig konfiguration: okänd http-authtype \"%s\""
+#: ../libsvn_subr/auth.c:222
+#, c-format
+msgid "No provider registered for '%s' credentials"
+msgstr "Ingen tillhandahållare registrerad för klientreferenser av typ \"%s\""
-#: ../libsvn_subr/cache-inprocess.c:184
-#, fuzzy, c-format
+#: ../libsvn_subr/cache-membuffer.c:496
+#, c-format
msgid "Can't lock cache mutex"
-msgstr "Kan inte allokera mutex för FS-biblioteket"
+msgstr "Kan inte låsa cachemutex"
+
+#: ../libsvn_subr/cache-membuffer.c:527 ../libsvn_subr/cache-membuffer.c:543
+#, c-format
+msgid "Can't write-lock cache mutex"
+msgstr "Kan inte låsa cachemutex för skrivning"
-#: ../libsvn_subr/cache-inprocess.c:202
-#, fuzzy, c-format
+#: ../libsvn_subr/cache-membuffer.c:562
+#, c-format
msgid "Can't unlock cache mutex"
-msgstr "Kan inte allokera mutex för FS-biblioteket"
+msgstr "Kan inte låsa upp mutex"
-#: ../libsvn_subr/cache-inprocess.c:454
-#, fuzzy, c-format
+#: ../libsvn_subr/cache-membuffer.c:1299
+#, c-format
msgid "Can't create cache mutex"
-msgstr "Kan inte skapa uttag (socket)"
+msgstr "Kan inte skapa cachemutex"
-#: ../libsvn_subr/cache-memcache.c:157
+#: ../libsvn_subr/cache-membuffer.c:2030
+msgid "Can't iterate a membuffer-based cache"
+msgstr "Kan inte gå igenom en \"membuffer\"-baserad cache"
+
+#: ../libsvn_subr/cache-memcache.c:170
#, c-format
msgid "Unknown memcached error while reading"
-msgstr ""
+msgstr "Okänt memcached-fel vid läsning"
-#: ../libsvn_subr/cache-memcache.c:207
+#: ../libsvn_subr/cache-memcache.c:237
#, c-format
msgid "Unknown memcached error while writing"
-msgstr ""
+msgstr "Okänt memcached-fel vid skrivning"
-#: ../libsvn_subr/cache-memcache.c:222
-#, fuzzy
+#: ../libsvn_subr/cache-memcache.c:343
msgid "Can't iterate a memcached cache"
-msgstr "Kan inte koppla låss tråd"
+msgstr "Kan inte gå igenom en \"memcached\"-cache"
-#: ../libsvn_subr/cache-memcache.c:286
-#, fuzzy, c-format
+#: ../libsvn_subr/cache-memcache.c:443
+#, c-format
msgid "Error parsing memcache server '%s'"
-msgstr "Fel vid analys av \"%s\""
+msgstr "Syntaxfel vid analys av memcache-servern \"%s\""
-#: ../libsvn_subr/cache-memcache.c:294
+#: ../libsvn_subr/cache-memcache.c:451
#, c-format
msgid "Scope not allowed in memcache server '%s'"
-msgstr ""
+msgstr "Omfång inte tillåtet i memcache-servern \"%s\""
-#: ../libsvn_subr/cache-memcache.c:302
+#: ../libsvn_subr/cache-memcache.c:459
#, c-format
msgid "Must specify host and port for memcache server '%s'"
-msgstr ""
+msgstr "Måste ange värddator och port för memcache-servern \"%s\""
-#: ../libsvn_subr/cache-memcache.c:321
+#: ../libsvn_subr/cache-memcache.c:479
#, c-format
msgid "Unknown error creating memcache server"
-msgstr ""
+msgstr "Okänt fel vid skapande av memcache-server"
-#: ../libsvn_subr/cache-memcache.c:329
+#: ../libsvn_subr/cache-memcache.c:487
#, c-format
msgid "Unknown error adding server to memcache"
-msgstr ""
+msgstr "Okänt fel när server lades till memcache"
-#: ../libsvn_subr/cache-memcache.c:399
+#: ../libsvn_subr/cache-memcache.c:560
#, c-format
msgid "Unknown error creating apr_memcache_t"
+msgstr "Okänt fel när apr_memcache_t skapades"
+
+#: ../libsvn_subr/checksum.c:470
+#, c-format
+msgid ""
+"%s:\n"
+" expected: %s\n"
+" actual: %s\n"
msgstr ""
+"%s:\n"
+" väntade: %s\n"
+" fick: %s\n"
-#: ../libsvn_subr/cmdline.c:599
+#: ../libsvn_subr/cmdline.c:646
#, c-format
msgid "Error initializing command line arguments"
msgstr "Fel vid initiering av kommandoradsargument"
-#: ../libsvn_subr/cmdline.c:681
-#, fuzzy
+#: ../libsvn_subr/cmdline.c:735
msgid "Invalid syntax of argument of --config-option"
-msgstr "Ogiltigt argument \"%s\" i diff-flaggor"
+msgstr "Felaktig syntax för argumentet till väljaren \"--config-option\""
-#: ../libsvn_subr/cmdline.c:708
-#, fuzzy, c-format
+#: ../libsvn_subr/cmdline.c:762
+#, c-format
msgid "Unrecognized file in argument of %s"
-msgstr "Okänt element \"%s\" i loggfilen \"%s\""
+msgstr "Okänd fil i argumentet till %s"
+
+#: ../libsvn_subr/cmdline.c:1008
+msgid "The EDITOR, SVN_EDITOR or VISUAL environment variable or 'editor-cmd' run-time configuration option is empty or consists solely of whitespace. Expected a shell command."
+msgstr "Någon av omgivningsvariablerna EDITOR, SVN_EDITOR eller VISUAL eller inställningen \"editor-cmd\" saknar innehåll eller består enbart av tomrum. Ett skalkommando förväntades."
+
+#: ../libsvn_subr/cmdline.c:1015
+msgid "None of the environment variables SVN_EDITOR, VISUAL or EDITOR are set, and no 'editor-cmd' run-time configuration option was found"
+msgstr "Ingen av omgivningsvariablerna SVN_EDITOR, VISUAL eller EDITOR är satt och ingen \"editor-cmd\"-inställning hittades"
-#: ../libsvn_subr/config.c:667
-#, fuzzy, c-format
+#: ../libsvn_subr/cmdline.c:1040 ../libsvn_subr/cmdline.c:1124
+#, c-format
+msgid "Can't get working directory"
+msgstr "Kan inte erhålla aktuell katalog"
+
+#: ../libsvn_subr/cmdline.c:1051 ../libsvn_subr/cmdline.c:1135
+#: ../libsvn_subr/cmdline.c:1160
+#, c-format
+msgid "Can't change working directory to '%s'"
+msgstr "Kan inte byta aktuell katalog till \"%s\""
+
+#: ../libsvn_subr/cmdline.c:1059 ../libsvn_subr/cmdline.c:1307
+#, c-format
+msgid "Can't restore working directory"
+msgstr "Kan inte återställa aktuell katalog"
+
+#: ../libsvn_subr/cmdline.c:1066 ../libsvn_subr/cmdline.c:1242
+#, c-format
+msgid "system('%s') returned %d"
+msgstr "system(\"%s\") returnerade %d"
+
+#: ../libsvn_subr/cmdline.c:1187
+#, c-format
+msgid "Can't write to '%s'"
+msgstr "Kan inte skriva till \"%s\""
+
+#: ../libsvn_subr/cmdline.c:1202 ../libsvn_subr/cmdline.c:1217
+#: ../libsvn_subr/cmdline.c:1251 ../libsvn_subr/io.c:3609
+#, c-format
+msgid "Can't stat '%s'"
+msgstr "Kan inte ta status på \"%s\""
+
+#: ../libsvn_subr/cmdline.c:1276
+msgid "Error normalizing edited contents to internal format"
+msgstr "Fel vid normalisering av det redigerade innehållet till det interna formatet"
+
+#: ../libsvn_subr/config.c:739
+#, c-format
msgid "Config error: invalid boolean value '%s' for '[%s] %s'"
-msgstr "Konfigurationsfel: felaktigt booleskt värde \"%s\""
+msgstr "Konfigurationsfel: felaktigt booleskt värde \"%s\" för \"[%s] %s\""
-#: ../libsvn_subr/config.c:674
-#, fuzzy, c-format
+#: ../libsvn_subr/config.c:744
+#, c-format
msgid "Config error: invalid boolean value '%s' for '%s'"
-msgstr "Konfigurationsfel: felaktigt booleskt värde \"%s\""
+msgstr "Konfigurationsfel: felaktigt booleskt värde \"%s\" för \"%s\""
-#: ../libsvn_subr/config.c:957
+#: ../libsvn_subr/config.c:1173
#, c-format
msgid "Config error: invalid integer value '%s'"
msgstr "Konfigurationsfel: felaktigt heltal \"%s\""
-#: ../libsvn_subr/config_auth.c:95
+#: ../libsvn_subr/config_auth.c:99
msgid "Unable to open auth file for reading"
-msgstr "Kunde inte öppna auth-fil för läsning"
+msgstr "Kunde inte öppna \"auth\"-fil för läsning"
-#: ../libsvn_subr/config_auth.c:100
+#: ../libsvn_subr/config_auth.c:104
#, c-format
msgid "Error parsing '%s'"
-msgstr "Fel vid analys av \"%s\""
+msgstr "syntaxfel i \"%s\""
-#: ../libsvn_subr/config_auth.c:125
+#: ../libsvn_subr/config_auth.c:129
msgid "Unable to locate auth file"
-msgstr "Kunde inte hitta auth-filc"
+msgstr "Kunde inte hitta \"auth\"-fil"
-#: ../libsvn_subr/config_auth.c:136
+#: ../libsvn_subr/config_auth.c:140
msgid "Unable to open auth file for writing"
-msgstr "Kunde inte öppna auth-fil för skrining"
+msgstr "Kunde inte öppna \"auth\"-fil för skrivning"
-#: ../libsvn_subr/config_auth.c:140
+#: ../libsvn_subr/config_auth.c:144
#, c-format
msgid "Error writing hash to '%s'"
-msgstr "Fel vid skrivning av hash-tabell till \"%s\""
+msgstr "Fel vid skrivning av hashtabell till \"%s\""
+
+#: ../libsvn_subr/crypto.c:93
+#, c-format
+msgid "Failed to initialize cryptography subsystem"
+msgstr "Misslyckades med att initiera krypteringssystemet"
+
+#: ../libsvn_subr/crypto.c:108
+#, c-format
+msgid "code (%d), reason (\"%s\"), msg (\"%s\")"
+msgstr "kod (%d), orsak (\"%s\"), meddelande (\"%s\")"
+
+#: ../libsvn_subr/crypto.c:134
+#, c-format
+msgid "Fetching error from APR"
+msgstr "Hämtning av fel från APR"
+
+#: ../libsvn_subr/crypto.c:154
+#, c-format
+msgid "Error obtaining random data"
+msgstr "Fel när slumpdata hämtades"
+
+#: ../libsvn_subr/crypto.c:224
+msgid "OpenSSL crypto driver error"
+msgstr "Fel i krypteringsdrivrutinen för OpenSSL"
+
+#: ../libsvn_subr/crypto.c:228
+msgid "Bad return value while loading crypto driver"
+msgstr "Felaktigt returvärde vid inläsning av krypteringsdrivrutinen"
+
+#: ../libsvn_subr/crypto.c:234
+msgid "Error creating OpenSSL crypto context"
+msgstr "Fel vid skapande av krypteringskontext för OpenSSL"
+
+#: ../libsvn_subr/crypto.c:291 ../libsvn_subr/crypto.c:294
+#: ../libsvn_subr/crypto.c:419 ../libsvn_subr/crypto.c:422
+#: ../libsvn_subr/crypto.c:526 ../libsvn_subr/crypto.c:529
+#: ../libsvn_subr/crypto.c:641 ../libsvn_subr/crypto.c:644
+msgid "Error creating derived key"
+msgstr "Fel vid skapande av härledd nyckel"
+
+#: ../libsvn_subr/crypto.c:297 ../libsvn_subr/crypto.c:425
+#: ../libsvn_subr/crypto.c:532 ../libsvn_subr/crypto.c:647
+msgid "Unexpected IV length returned"
+msgstr "Oväntad längd på initieringsvektor"
+
+#: ../libsvn_subr/crypto.c:308 ../libsvn_subr/crypto.c:543
+msgid "Error initializing block encryption"
+msgstr "Fel vid initiering av blockkryptering"
+
+#: ../libsvn_subr/crypto.c:347 ../libsvn_subr/crypto.c:444
+#: ../libsvn_subr/crypto.c:565 ../libsvn_subr/crypto.c:666
+msgid "Error fetching result length"
+msgstr "Fel vid hämtning av resultatlängd"
+
+#: ../libsvn_subr/crypto.c:360 ../libsvn_subr/crypto.c:578
+msgid "Error during block encryption"
+msgstr "Fel vid blockkryptering"
+
+#: ../libsvn_subr/crypto.c:372 ../libsvn_subr/crypto.c:590
+msgid "Error finalizing block encryption"
+msgstr "Fel när blockkryptering slutfördes"
-#: ../libsvn_subr/date.c:209
+#: ../libsvn_subr/crypto.c:428 ../libsvn_subr/crypto.c:650
+msgid "Provided IV has incorrect length"
+msgstr "Tillhandahållen initieringsvektor har felaktig längd"
+
+#: ../libsvn_subr/crypto.c:436 ../libsvn_subr/crypto.c:658
+msgid "Error initializing block decryption"
+msgstr "Fel vid initiering av blockavkryptering"
+
+#: ../libsvn_subr/crypto.c:455 ../libsvn_subr/crypto.c:677
+msgid "Error during block decryption"
+msgstr "Fel vid blockavkryptering"
+
+#: ../libsvn_subr/crypto.c:464 ../libsvn_subr/crypto.c:686
+msgid "Error finalizing block decryption"
+msgstr "Fel när blockavkryptering slutfördes"
+
+#: ../libsvn_subr/date.c:307
#, c-format
msgid "Can't manipulate current date"
msgstr "Kan inte manipulera aktuellt datum"
-#: ../libsvn_subr/date.c:283 ../libsvn_subr/date.c:291
+#: ../libsvn_subr/date.c:381 ../libsvn_subr/date.c:389
#, c-format
msgid "Can't calculate requested date"
msgstr "Kan inte beräkna begärt datum"
-#: ../libsvn_subr/date.c:286
+#: ../libsvn_subr/date.c:384
#, c-format
msgid "Can't expand time"
msgstr "Kan inte dela upp tid"
-#: ../libsvn_subr/deprecated.c:355 ../libsvn_subr/opt.c:300
+#: ../libsvn_subr/deprecated.c:361 ../libsvn_subr/opt.c:302
msgid ""
"\n"
"Valid options:\n"
@@ -5235,298 +5767,342 @@ msgstr ""
"\n"
"Giltiga flaggor:\n"
-#: ../libsvn_subr/deprecated.c:431 ../libsvn_subr/opt.c:407
+#: ../libsvn_subr/deprecated.c:437 ../libsvn_subr/opt.c:417
#, c-format
msgid ""
"\"%s\": unknown command.\n"
"\n"
msgstr "\"%s\": okänt kommando.\n"
-#: ../libsvn_subr/deprecated.c:578 ../libsvn_subr/opt.c:1109
-#: ../svnrdump/svnrdump.c:340
+#: ../libsvn_subr/deprecated.c:615 ../libsvn_subr/opt.c:1237
+#: ../svnrdump/svnrdump.c:646
#, c-format
msgid "Type '%s help' for usage.\n"
msgstr "Skriv \"%s help\" för användning.\n"
-#: ../libsvn_subr/deprecated.c:928
+#: ../libsvn_subr/deprecated.c:1023
#, c-format
msgid "'%s' is neither a file nor a directory name"
msgstr "\"%s\" är varken ett fil- eller katalognamn"
-#: ../libsvn_subr/dirent_uri.c:1661
+#: ../libsvn_subr/dirent_uri.c:1604
#, c-format
msgid "Couldn't determine absolute path of '%s'"
-msgstr "Kunde inte ta reda på absolut sökväg för '%s'"
+msgstr "Kunde inte ta reda på absolut sökväg för \"%s\""
-#: ../libsvn_subr/dirent_uri.c:2319
+#: ../libsvn_subr/dirent_uri.c:2313
#, c-format
msgid "Local URL '%s' does not contain 'file://' prefix"
msgstr "Den lokala URL:en \"%s\" börjar inte med \"file://\""
-#: ../libsvn_subr/dirent_uri.c:2398
+#: ../libsvn_subr/dirent_uri.c:2392
#, c-format
msgid "Local URL '%s' contains only a hostname, no path"
msgstr "Den lokala URL:en \"%s\" innehåller endast ett värdnamn och ingen sökväg"
-#: ../libsvn_subr/dirent_uri.c:2412
+#: ../libsvn_subr/dirent_uri.c:2406
#, c-format
msgid "Local URL '%s' contains unsupported hostname"
msgstr "Den lokala URL:en \"%s\" innehåller värdnamn som inte stöds"
-#: ../libsvn_subr/dso.c:64
-#, fuzzy, c-format
-msgid "Can't create DSO mutex"
-msgstr "Kan inte l[sa mutex för bibliotek"
-
-#: ../libsvn_subr/dso.c:83
-#, c-format
-msgid "Can't grab DSO mutex"
-msgstr "Kan inte l[sa mutex för bibliotek"
-
-#: ../libsvn_subr/dso.c:97 ../libsvn_subr/dso.c:123 ../libsvn_subr/dso.c:138
-#, c-format
-msgid "Can't ungrab DSO mutex"
-msgstr "Kan inte släppa lås för bibliotek"
+#: ../libsvn_subr/error.c:263
+msgid "Additional errors:"
+msgstr "Ytterligare fel:"
-#: ../libsvn_subr/error.c:445
+#: ../libsvn_subr/error.c:524
msgid "Can't recode error string from APR"
msgstr "Kan inte teckenkonvertera felmeddelande från APR"
-#: ../libsvn_subr/error.c:544
+#: ../libsvn_subr/error.c:624
#, c-format
-msgid "%swarning: %s\n"
-msgstr "%svarning: %s\n"
+msgid "%swarning: W%06d: %s\n"
+msgstr "%svarning: W%06d: %s\n"
-#: ../libsvn_subr/error.c:598
+#: ../libsvn_subr/error.c:706
#, c-format
msgid "In file '%s' line %d: assertion failed (%s)"
-msgstr ""
+msgstr "I filen \"%s\" rad %d: fel vid invariantkontroll (%s)"
-#: ../libsvn_subr/error.c:602
+#: ../libsvn_subr/error.c:710
#, c-format
msgid "In file '%s' line %d: internal malfunction"
-msgstr ""
+msgstr "I filen \"%s\" rad %d: internt fel"
-#: ../libsvn_subr/io.c:169
-#, fuzzy, c-format
-msgid "Error converting entry in directory '%s' to UTF-8"
-msgstr "Fel vid stängning av katalogen \"%s\""
+#: ../libsvn_subr/error.c:766
+msgid "stream error"
+msgstr "strömningsfel"
+
+#: ../libsvn_subr/error.c:771
+msgid "out of memory"
+msgstr "slut på minne"
+
+#: ../libsvn_subr/error.c:776
+msgid "buffer error"
+msgstr "buffringsfel"
+
+#: ../libsvn_subr/error.c:781
+msgid "version error"
+msgstr "versionsfel"
+
+#: ../libsvn_subr/error.c:786
+msgid "corrupt data"
+msgstr "trasig data"
-#: ../libsvn_subr/io.c:229
+#: ../libsvn_subr/error.c:791
+msgid "unknown error"
+msgstr "okänt fel"
+
+#: ../libsvn_subr/gpg_agent.c:358 ../libsvn_subr/prompt.c:631
+#, c-format
+msgid "Password for '%s': "
+msgstr "Lösenord för \"%s\": "
+
+#: ../libsvn_subr/gpg_agent.c:359
+#, c-format
+msgid "Enter your Subversion password for %s"
+msgstr "Mata in ditt Subversion-lösenord för %s"
+
+#: ../libsvn_subr/hash.c:120
+msgid "Serialized hash missing terminator"
+msgstr "Serialiserad hashtabell saknar slutmärke"
+
+#: ../libsvn_subr/hash.c:129 ../libsvn_subr/hash.c:142
+#: ../libsvn_subr/hash.c:153 ../libsvn_subr/hash.c:165
+#: ../libsvn_subr/hash.c:173 ../libsvn_subr/hash.c:183
+#: ../libsvn_subr/hash.c:196 ../libsvn_subr/hash.c:204
+msgid "Serialized hash malformed"
+msgstr "Felaktig serialiserad hashtabell"
+
+#: ../libsvn_subr/hash.c:244
+msgid "Cannot serialize negative length"
+msgstr "Kan inte serialisera negativ längd"
+
+#: ../libsvn_subr/io.c:309
#, c-format
msgid "Can't check path '%s'"
msgstr "Kan inte kontrollera sökvägen \"%s\""
-#: ../libsvn_subr/io.c:457 ../libsvn_subr/io.c:3771
+#: ../libsvn_subr/io.c:537 ../libsvn_subr/io.c:4551
#, c-format
msgid "Can't open '%s'"
msgstr "Kan inte öppna \"%s\""
-#: ../libsvn_subr/io.c:483 ../libsvn_subr/io.c:569
+#: ../libsvn_subr/io.c:563 ../libsvn_subr/io.c:649
#, c-format
msgid "Unable to make name for '%s'"
msgstr "Kunde inte skapa namn för \"%s\""
-#: ../libsvn_subr/io.c:556
-#, fuzzy, c-format
+#: ../libsvn_subr/io.c:636
+#, c-format
msgid "Can't create symbolic link '%s'"
-msgstr "Kan inte skapa katalogen \"%s\""
+msgstr "Kan inte skapa symbolisk länk \"%s\""
-#: ../libsvn_subr/io.c:573 ../libsvn_subr/io.c:606 ../libsvn_subr/io.c:634
+#: ../libsvn_subr/io.c:653 ../libsvn_subr/io.c:686 ../libsvn_subr/io.c:714
msgid "Symbolic links are not supported on this platform"
-msgstr "Symboliska länkar stöds inte på denna platform"
+msgstr "Symboliska länkar stöds inte på denna plattform"
-#: ../libsvn_subr/io.c:596
+#: ../libsvn_subr/io.c:676
#, c-format
msgid "Can't read contents of link"
msgstr "Kan inte läsa innehållet i länk"
-#: ../libsvn_subr/io.c:654
+#: ../libsvn_subr/io.c:734
#, c-format
msgid "Can't find a temporary directory"
msgstr "Kan inte hitta temporär katalog"
-#: ../libsvn_subr/io.c:773
+#: ../libsvn_subr/io.c:852
#, c-format
msgid "Can't copy '%s' to '%s'"
msgstr "Kan inte kopiera \"%s\" till \"%s\""
-#: ../libsvn_subr/io.c:816 ../libsvn_subr/io.c:838 ../libsvn_subr/io.c:884
+#: ../libsvn_subr/io.c:895 ../libsvn_subr/io.c:917 ../libsvn_subr/io.c:963
#, c-format
msgid "Can't set permissions on '%s'"
msgstr "Kan inte sätta rättigheter på \"%s\""
-#: ../libsvn_subr/io.c:834 ../libsvn_subr/io.c:3809
+#: ../libsvn_subr/io.c:913 ../libsvn_subr/io.c:1977 ../libsvn_subr/io.c:2036
+#: ../libsvn_subr/io.c:4589
#, c-format
msgid "Can't get file name"
msgstr "Kan inte erhålla filnamn"
-#: ../libsvn_subr/io.c:908
+#: ../libsvn_subr/io.c:987
#, c-format
msgid "Can't append '%s' to '%s'"
msgstr "Kan inte lägga till \"%s\" till \"%s\""
-#: ../libsvn_subr/io.c:942
-#, c-format
-msgid "Source '%s' is not a directory"
-msgstr "Källan \"%s\" är ingen katalog"
-
-#: ../libsvn_subr/io.c:948
-#, c-format
-msgid "Destination '%s' is not a directory"
-msgstr "Destinationen \"%s\" är ingen katalog"
-
-#: ../libsvn_subr/io.c:954
+#: ../libsvn_subr/io.c:1033
#, c-format
msgid "Destination '%s' already exists"
msgstr "Destinationen \"%s\" finns redan"
-#: ../libsvn_subr/io.c:1025 ../libsvn_subr/io.c:2113
-#, c-format
-msgid "Can't read directory '%s'"
-msgstr "Kan inte läsa katalogen \"%s\""
-
-#: ../libsvn_subr/io.c:1030 ../libsvn_subr/io.c:2118 ../libsvn_subr/io.c:3387
-#, c-format
-msgid "Error closing directory '%s'"
-msgstr "Fel vid stängning av katalogen \"%s\""
-
-#: ../libsvn_subr/io.c:1058
+#: ../libsvn_subr/io.c:1137
#, c-format
msgid "Can't make directory '%s'"
msgstr "Kan inte skapa katalogen \"%s\""
-#: ../libsvn_subr/io.c:1127
+#: ../libsvn_subr/io.c:1206
#, c-format
msgid "Can't set access time of '%s'"
msgstr "Kan inte sätta åtkomsttiden på \"%s\""
-#: ../libsvn_subr/io.c:1403 ../libsvn_subr/io.c:1510
+#: ../libsvn_subr/io.c:1523 ../libsvn_subr/io.c:1630
#, c-format
msgid "Can't change perms of file '%s'"
msgstr "Kan inte ändra rättigheter på filen \"%s\""
-#: ../libsvn_subr/io.c:1551
+#: ../libsvn_subr/io.c:1796
#, c-format
msgid "Can't set file '%s' read-only"
msgstr "Kan inte göra \"%s\" skrivskyddad"
-#: ../libsvn_subr/io.c:1583
+#: ../libsvn_subr/io.c:1828
#, c-format
msgid "Can't set file '%s' read-write"
msgstr "Kan inte ta bort skrivskyddet på \"%s\""
-#: ../libsvn_subr/io.c:1627
+#: ../libsvn_subr/io.c:1867 ../libsvn_subr/io.c:1901
#, c-format
msgid "Error getting UID of process"
-msgstr "Fel vid läsning av processens användarid"
+msgstr "Fel vid läsning av processens användar-id"
-#: ../libsvn_subr/io.c:1698
+#: ../libsvn_subr/io.c:2003
#, c-format
msgid "Can't get shared lock on file '%s'"
msgstr "Kan inte ta ut delat lås på filen \"%s\""
-#: ../libsvn_subr/io.c:1736
+#: ../libsvn_subr/io.c:2041
+#, c-format
+msgid "Can't unlock file '%s'"
+msgstr "Kan inte låsa upp filen \"%s\""
+
+#: ../libsvn_subr/io.c:2096 ../libsvn_subr/io.c:3504
#, c-format
msgid "Can't flush file '%s'"
msgstr "Kan inte tömma buffertar för filen \"%s\""
-#: ../libsvn_subr/io.c:1737
+#: ../libsvn_subr/io.c:2097 ../libsvn_subr/io.c:3505
#, c-format
msgid "Can't flush stream"
msgstr "Kan inte tömma buffertar för ström"
-#: ../libsvn_subr/io.c:1749 ../libsvn_subr/io.c:1766
+#: ../libsvn_subr/io.c:2109 ../libsvn_subr/io.c:2126
#, c-format
msgid "Can't flush file to disk"
msgstr "Kan inte tömma filbuffertar till disk"
-#: ../libsvn_subr/io.c:1858 ../libsvn_subr/prompt.c:102 ../svnserve/main.c:625
+#: ../libsvn_subr/io.c:2218 ../libsvn_subr/prompt.c:197
+#: ../svnserve/svnserve.c:824
#, c-format
msgid "Can't open stdin"
msgstr "Kan inte öppna standard in"
-#: ../libsvn_subr/io.c:1878
-#, fuzzy
+#: ../libsvn_subr/io.c:2238
msgid "Reading from stdin is disallowed"
-msgstr "Att läsa från standard in fungerar inte för närvarande och är därför avslaget"
+msgstr "Att läsa från standardinmatningen tillåts ej"
-#: ../libsvn_subr/io.c:1935
+#: ../libsvn_subr/io.c:2305
#, c-format
msgid "Can't remove file '%s'"
msgstr "Kan inte radera filen \"%s\""
-#: ../libsvn_subr/io.c:2020
+#: ../libsvn_subr/io.c:2392
#, c-format
msgid "Can't remove '%s'"
msgstr "Kan inte radera \"%s\""
-#: ../libsvn_subr/io.c:2211
+#: ../libsvn_subr/io.c:2555
+#, c-format
+msgid "Path '%s' not found, case obstructed by '%s'"
+msgstr "Sökvägen \"%s\" hittades inte, skiftlägesblockerad av \"%s\""
+
+#: ../libsvn_subr/io.c:2594
+#, c-format
+msgid "Path '%s' not found"
+msgstr "Sökvägen \"%s\" finns inte"
+
+#: ../libsvn_subr/io.c:2668
#, c-format
msgid "Can't create process '%s' attributes"
msgstr "Kan inte skapa attribut för processen \"%s\""
-#: ../libsvn_subr/io.c:2217
+#: ../libsvn_subr/io.c:2675
#, c-format
msgid "Can't set process '%s' cmdtype"
msgstr "Kan inte sätta cmdtype för processen \"%s\""
-#: ../libsvn_subr/io.c:2229
+#: ../libsvn_subr/io.c:2687
#, c-format
msgid "Can't set process '%s' directory"
msgstr "Kan inte sätta katalog för processen \"%s\""
-#: ../libsvn_subr/io.c:2242
+#: ../libsvn_subr/io.c:2701
#, c-format
msgid "Can't set process '%s' child input"
msgstr "Kan inte sätta standard in för processen \"%s\""
-#: ../libsvn_subr/io.c:2249
+#: ../libsvn_subr/io.c:2709
#, c-format
msgid "Can't set process '%s' child outfile"
msgstr "Kan inte sätta standard ut för processen \"%s\""
-#: ../libsvn_subr/io.c:2256
+#: ../libsvn_subr/io.c:2717
#, c-format
msgid "Can't set process '%s' child errfile"
msgstr "Kan inte sätta standard fel för processen \"%s\""
-#: ../libsvn_subr/io.c:2263
+#: ../libsvn_subr/io.c:2731
+#, c-format
+msgid "Can't set process '%s' stdio pipes"
+msgstr "Kan inte sätta rör för standardin- och utmatning för processen \"%s\""
+
+#: ../libsvn_subr/io.c:2739
#, c-format
msgid "Can't set process '%s' child errfile for error handler"
msgstr "Kan inte sätta standard fel för processen \"%s\" för felhanteraren"
-#: ../libsvn_subr/io.c:2269
+#: ../libsvn_subr/io.c:2746
#, c-format
msgid "Can't set process '%s' error handler"
msgstr "Kan inte sätta felhanterare för processen \"%s\""
-#: ../libsvn_subr/io.c:2291
+#: ../libsvn_subr/io.c:2769
#, c-format
msgid "Can't start process '%s'"
msgstr "Kan inte starta processen \"%s\""
-#: ../libsvn_subr/io.c:2315
+#: ../libsvn_subr/io.c:2793
#, c-format
msgid "Error waiting for process '%s'"
msgstr "Fel då processen \"%s\" inväntades"
-#: ../libsvn_subr/io.c:2323
+#: ../libsvn_subr/io.c:2802
+#, c-format
+msgid "Process '%s' failed (signal %d, core dumped)"
+msgstr "Processen \"%s\" misslyckades (signal %d, minnesutskrift skapad)"
+
+#: ../libsvn_subr/io.c:2807
#, c-format
-msgid "Process '%s' failed (exitwhy %d)"
-msgstr "Processen '%s' misslyckades (orsak %d)"
+msgid "Process '%s' failed (signal %d)"
+msgstr "Processen \"%s\" misslyckades (signal %d)"
-#: ../libsvn_subr/io.c:2330
+#: ../libsvn_subr/io.c:2813
+#, c-format
+msgid "Process '%s' failed (exitwhy %d, exitcode %d)"
+msgstr "Processen \"%s\" misslyckades (orsak %d, slutkod %d)"
+
+#: ../libsvn_subr/io.c:2821
#, c-format
msgid "Process '%s' returned error exitcode %d"
msgstr "Processen \"%s\" returnerade felstatus %d"
-#: ../libsvn_subr/io.c:2436
+#: ../libsvn_subr/io.c:2928
#, c-format
msgid "'%s' returned %d"
msgstr "\"%s\" returnerade %d"
-#: ../libsvn_subr/io.c:2557
+#: ../libsvn_subr/io.c:3048
#, c-format
msgid ""
"Error running '%s': exitcode was %d, args were:\n"
@@ -5535,359 +6111,422 @@ msgid ""
"%s\n"
"%s"
msgstr ""
-"Fel vid körning av '%s': slutstatus är %d, argument:\n"
-"i katalogen '%s', basnamn:\n"
+"Fel vid körning av \"%s\": slutstatus är %d, argument:\n"
+"i katalogen \"%s\", basnamn:\n"
"%s\n"
"%s\n"
"%s"
-#: ../libsvn_subr/io.c:2697
+#: ../libsvn_subr/io.c:3189
#, c-format
msgid "Can't detect MIME type of non-file '%s'"
msgstr "Kan inte känna av MIME-typ på \"%s\", som inte är en fil"
-#: ../libsvn_subr/io.c:2778
+#: ../libsvn_subr/io.c:3284
#, c-format
msgid "Can't open file '%s'"
msgstr "Kan inte öppna filen \"%s\""
-#: ../libsvn_subr/io.c:2814
+#: ../libsvn_subr/io.c:3324
#, c-format
msgid "Can't close file '%s'"
msgstr "Kan inte stänga filen \"%s\""
-#: ../libsvn_subr/io.c:2815
+#: ../libsvn_subr/io.c:3325
#, c-format
msgid "Can't close stream"
msgstr "Kan inte stänga ström"
-#: ../libsvn_subr/io.c:2825 ../libsvn_subr/io.c:2849 ../libsvn_subr/io.c:2862
+#: ../libsvn_subr/io.c:3334 ../libsvn_subr/io.c:3370 ../libsvn_subr/io.c:3395
#, c-format
msgid "Can't read file '%s'"
msgstr "Kan inte läsa filen \"%s\""
-#: ../libsvn_subr/io.c:2826 ../libsvn_subr/io.c:2850 ../libsvn_subr/io.c:2863
+#: ../libsvn_subr/io.c:3335 ../libsvn_subr/io.c:3371 ../libsvn_subr/io.c:3396
#, c-format
msgid "Can't read stream"
msgstr "Kan inte läsa från ström"
-#: ../libsvn_subr/io.c:2837
+#: ../libsvn_subr/io.c:3344
+#, c-format
+msgid "Can't write file '%s'"
+msgstr "Kan inte skriva till filen \"%s\""
+
+#: ../libsvn_subr/io.c:3345
+#, c-format
+msgid "Can't write stream"
+msgstr "Kan inte skriva till ström"
+
+#: ../libsvn_subr/io.c:3359
#, c-format
msgid "Can't get attribute information from file '%s'"
msgstr "Kan inte erhålla attributinformation från filen \"%s\""
-#: ../libsvn_subr/io.c:2838
+#: ../libsvn_subr/io.c:3360
#, c-format
msgid "Can't get attribute information from stream"
msgstr "Kan inte erhålla attributinformation från ström"
-#: ../libsvn_subr/io.c:2874
+#: ../libsvn_subr/io.c:3407
#, c-format
msgid "Can't set position pointer in file '%s'"
msgstr "Kan inte sätta filpekaren i filen \"%s\""
-#: ../libsvn_subr/io.c:2875
+#: ../libsvn_subr/io.c:3408
#, c-format
msgid "Can't set position pointer in stream"
msgstr "Kan inte sätta filpekaren i ström"
-#: ../libsvn_subr/io.c:2886 ../libsvn_subr/io.c:2920
+#: ../libsvn_subr/io.c:3419 ../libsvn_subr/io.c:3466
#, c-format
msgid "Can't write to file '%s'"
msgstr "Kan inte skriva till filen \"%s\""
-#: ../libsvn_subr/io.c:2887 ../libsvn_subr/io.c:2921
+#: ../libsvn_subr/io.c:3420 ../libsvn_subr/io.c:3467
#, c-format
msgid "Can't write to stream"
msgstr "Kan inte skriva till ström"
-#: ../libsvn_subr/io.c:2956
-#, fuzzy, c-format
+#: ../libsvn_subr/io.c:3509
+#, c-format
msgid "Can't truncate file '%s'"
-msgstr "Kan inte läsa filen \"%s\""
+msgstr "Kan inte hugga av filen \"%s\""
-#: ../libsvn_subr/io.c:2957
-#, fuzzy, c-format
+#: ../libsvn_subr/io.c:3510
+#, c-format
msgid "Can't truncate stream"
-msgstr "Kan inte läsa från ström"
+msgstr "Kan inte hugga av ström"
-#: ../libsvn_subr/io.c:2997
+#: ../libsvn_subr/io.c:3583
#, c-format
msgid "Can't read length line in file '%s'"
msgstr "Kan inte läsa längdrad i filen \"%s\""
-#: ../libsvn_subr/io.c:3001
+#: ../libsvn_subr/io.c:3587
msgid "Can't read length line in stream"
msgstr "Kan inte läsa längdrad i ström"
-#: ../libsvn_subr/io.c:3020 ../svn/util.c:421 ../svn/util.c:436
-#: ../svn/util.c:460
-#, c-format
-msgid "Can't stat '%s'"
-msgstr "Kan inte ta status på \"%s\""
-
-#: ../libsvn_subr/io.c:3055
+#: ../libsvn_subr/io.c:3644
#, c-format
msgid "Can't move '%s' to '%s'"
msgstr "Kan inte flytta \"%s\" till \"%s\""
-#: ../libsvn_subr/io.c:3136
+#: ../libsvn_subr/io.c:3725
#, c-format
msgid "Can't create directory '%s'"
msgstr "Kan inte skapa katalogen \"%s\""
-#: ../libsvn_subr/io.c:3147
+#: ../libsvn_subr/io.c:3748
#, c-format
msgid "Can't hide directory '%s'"
msgstr "Kan inte dölja katalogen \"%s\""
-#: ../libsvn_subr/io.c:3207 ../libsvn_subr/io.c:3323
+#: ../libsvn_subr/io.c:3808 ../libsvn_subr/io.c:3931
#, c-format
msgid "Can't open directory '%s'"
msgstr "Kan inte öppna katalogen \"%s\""
-#: ../libsvn_subr/io.c:3247
+#: ../libsvn_subr/io.c:3843
#, c-format
msgid "Can't remove directory '%s'"
msgstr "Kan inte radera katalogen \"%s\""
-#: ../libsvn_subr/io.c:3265
+#: ../libsvn_subr/io.c:3861
#, c-format
msgid "Can't read directory"
msgstr "Kan inte läsa katalog"
-#: ../libsvn_subr/io.c:3342
+#: ../libsvn_subr/io.c:3881
+#, c-format
+msgid "Error closing directory"
+msgstr "Fel vid stängning av katalog"
+
+#: ../libsvn_subr/io.c:3950
#, c-format
msgid "Can't read directory entry in '%s'"
msgstr "Kan inte läsa katalogpost i \"%s\""
-#: ../libsvn_subr/io.c:3468
+#: ../libsvn_subr/io.c:4076
#, c-format
msgid "Can't check directory '%s'"
msgstr "Kan inte kontrollera katalogen \"%s\""
-#: ../libsvn_subr/io.c:3530
+#: ../libsvn_subr/io.c:4138
#, c-format
msgid "Reading '%s'"
msgstr "Läser \"%s\""
-#: ../libsvn_subr/io.c:3549
+#: ../libsvn_subr/io.c:4157
#, c-format
msgid "First line of '%s' contains non-digit"
msgstr "Första raden i \"%s\" innehåller något som inte är en siffra"
-#: ../libsvn_subr/io.c:3690
-#, fuzzy, c-format
+#: ../libsvn_subr/io.c:4472
+#, c-format
msgid "Can't create temporary file from template '%s'"
-msgstr "Kan inte skapa rör för hookskriptet \"%s\""
+msgstr "Kan inte skapa temporärfil från mallen \"%s\""
-#: ../libsvn_subr/io.c:3781
-#, fuzzy, c-format
+#: ../libsvn_subr/io.c:4561
+#, c-format
msgid "Can't set aside '%s'"
-msgstr "Kan inte ta status på \"%s\""
+msgstr "Kan inte flytta \"%s\" åt sidan"
-#: ../libsvn_subr/io.c:3793
-#, fuzzy, c-format
+#: ../libsvn_subr/io.c:4573
+#, c-format
msgid "Unable to make name in '%s'"
-msgstr "Kunde inte skapa namn för \"%s\""
+msgstr "Kunde inte skapa namn i \"%s\""
-#: ../libsvn_subr/kitchensink.c:46
-#, fuzzy, c-format
-msgid "Invalid revision number found parsing '%s'"
-msgstr "Ogiltigt revisionsnummer angivet"
-
-#: ../libsvn_subr/kitchensink.c:58
-#, fuzzy, c-format
-msgid "Negative revision number found parsing '%s'"
-msgstr "Ogiltigt revisionsnummer angivet"
-
-#: ../libsvn_subr/mergeinfo.c:96 ../libsvn_subr/mergeinfo.c:599
+#: ../libsvn_subr/mergeinfo.c:100 ../libsvn_subr/mergeinfo.c:677
msgid "Pathname not terminated by ':'"
-msgstr ""
+msgstr "Sökväg avslutades inte med \":\""
-#: ../libsvn_subr/mergeinfo.c:99
+#: ../libsvn_subr/mergeinfo.c:103
msgid "No pathname preceding ':'"
-msgstr ""
+msgstr "Ingen sökväg kom före \":\""
-#: ../libsvn_subr/mergeinfo.c:490
-#, fuzzy, c-format
-msgid "Mergeinfo for '%s' maps to an empty revision range"
-msgstr "\"%s\" har ogiltig revision"
-
-#: ../libsvn_subr/mergeinfo.c:504
-#, fuzzy, c-format
+#: ../libsvn_subr/mergeinfo.c:521
+#, c-format
msgid "Invalid character '%c' found in revision list"
-msgstr "Ogiltig slutrevision %ld"
+msgstr "Ogiltigt tecken \"%c\" hittades i revisionslistan"
-#: ../libsvn_subr/mergeinfo.c:512
-#, fuzzy, c-format
+#: ../libsvn_subr/mergeinfo.c:529
+#, c-format
msgid "Invalid revision number '0' found in range list"
-msgstr "Ogiltigt revisionsnummer angivet"
+msgstr "Ogiltigt revisionsnummer \"0\" hittat i revisionslista"
-#: ../libsvn_subr/mergeinfo.c:523
+#: ../libsvn_subr/mergeinfo.c:540
#, c-format
msgid "Unable to parse reversed revision range '%ld-%ld'"
-msgstr ""
+msgstr "Bakvänt revisionsområde \"%ld-%ld\" går inte att tolka"
-#: ../libsvn_subr/mergeinfo.c:528
-#, fuzzy, c-format
+#: ../libsvn_subr/mergeinfo.c:545
+#, c-format
msgid "Unable to parse revision range '%ld-%ld' with same start and end revisions"
-msgstr "Startrevisionen %ld är större än slutrevisionen %ld"
+msgstr "Revisionsområdet \"%ld-%ld\" med samma Startrevision och slutrevisionen går inte att tolka"
-#: ../libsvn_subr/mergeinfo.c:565 ../libsvn_subr/mergeinfo.c:572
-#, fuzzy, c-format
+#: ../libsvn_subr/mergeinfo.c:582 ../libsvn_subr/mergeinfo.c:589
+#, c-format
msgid "Invalid character '%c' found in range list"
-msgstr "Ogiltig slutrevision %ld"
+msgstr "Ogiltigt tecken \"%c\" i revisionslista"
-#: ../libsvn_subr/mergeinfo.c:579
-#, fuzzy
+#: ../libsvn_subr/mergeinfo.c:596
msgid "Range list parsing ended before hitting newline"
-msgstr "Avslutande radslut saknas i revisionsfil"
-
-#: ../libsvn_subr/mergeinfo.c:607
-#, fuzzy, c-format
-msgid "Could not find end of line in range list line in '%s'"
-msgstr "Kunde inte hitta tiden för revision %ld"
+msgstr "Revisionslistan tog slut före radslutet"
-#: ../libsvn_subr/mergeinfo.c:638
+#: ../libsvn_subr/mergeinfo.c:637
#, c-format
msgid "Unable to parse overlapping revision ranges '%s' and '%s' with different inheritance types"
-msgstr ""
+msgstr "Kan inte tolka överlappande revisionsområden \"%s\" och \"%s\" med olika arvstyper"
+
+#: ../libsvn_subr/mergeinfo.c:685
+#, c-format
+msgid "Mergeinfo for '%s' maps to an empty revision range"
+msgstr "Sammanslagningsinformationen för \"%s\" motsvarar ett tomt revisionsområde"
+
+#: ../libsvn_subr/mergeinfo.c:689
+#, c-format
+msgid "Could not find end of line in range list line in '%s'"
+msgstr "Kunde inte hitta radslutet i rad med revisionslista i \"%s\""
-#: ../libsvn_subr/mergeinfo.c:702
-#, fuzzy, c-format
+#: ../libsvn_subr/mergeinfo.c:753
+#, c-format
msgid "Could not parse mergeinfo string '%s'"
-msgstr "Kunde inte skapa en GET-förfrågan till \"%s\""
+msgstr "Kunde inte tolka sammanslagningsinformation i strängen \"%s\""
-#: ../libsvn_subr/mergeinfo.c:1922
+#: ../libsvn_subr/mergeinfo.c:2301
msgid "NULL mergeinfo catalog\n"
-msgstr ""
+msgstr "katalog för sammanslagningsinformation är NULL\n"
-#: ../libsvn_subr/mergeinfo.c:1927
+#: ../libsvn_subr/mergeinfo.c:2306
msgid "empty mergeinfo catalog\n"
-msgstr ""
+msgstr "tom katalog för sammanslagningsinformation\n"
-#: ../libsvn_subr/mergeinfo.c:1960
-msgid "NULL mergeinfo\n"
-msgstr ""
+#: ../libsvn_subr/mutex.c:45
+#, c-format
+msgid "Can't create mutex"
+msgstr "Kan inte skapa mutex"
-#: ../libsvn_subr/mergeinfo.c:1965
-msgid "empty mergeinfo\n"
-msgstr ""
+#: ../libsvn_subr/mutex.c:62
+#, c-format
+msgid "Can't lock mutex"
+msgstr "Kan inte låsa mutex"
+
+#: ../libsvn_subr/mutex.c:78
+#, c-format
+msgid "Can't unlock mutex"
+msgstr "Kan inte låsa upp mutex"
+
+#: ../libsvn_subr/named_atomic.c:335
+msgid "Not a valid atomic"
+msgstr "Inte en giltig atomisk variabel"
+
+#: ../libsvn_subr/named_atomic.c:474
+#, c-format
+msgid "MMAP failed for file '%s'"
+msgstr "MMAP misslyckades för filen \"%s\""
+
+#: ../libsvn_subr/named_atomic.c:486
+msgid "Number of atomics in namespace is too large."
+msgstr "För många atomiska variabler i namnrymden"
+
+#: ../libsvn_subr/named_atomic.c:537
+msgid "Atomic's name is too long."
+msgstr "För långt namn på atomisk variabel"
+
+#: ../libsvn_subr/named_atomic.c:543
+msgid "Namespace has not been initialized."
+msgstr "Namnrymden har ej initierats"
-#: ../libsvn_subr/nls.c:90
+#: ../libsvn_subr/named_atomic.c:591
+msgid "Out of slots for named atomic."
+msgstr "Slut på fack för namngiven atomisk variabel."
+
+#: ../libsvn_subr/nls.c:80
#, c-format
msgid "Can't convert string to UCS-2: '%s'"
msgstr "Kan inte konvertera sträng från UCS-2: \"%s\""
-#: ../libsvn_subr/nls.c:97
+#: ../libsvn_subr/nls.c:87
msgid "Can't get module file name"
msgstr "Kan inte erhålla modulens filnamn"
-#: ../libsvn_subr/nls.c:112
+#: ../libsvn_subr/nls.c:102
#, c-format
msgid "Can't convert module path to UTF-8 from UCS-2: '%s'"
-msgstr "Kan inte konvertera modulens sökväg till UTF-8 från UCS-2: '%s'"
+msgstr "Kan inte konvertera modulens sökväg till UTF-8 från UCS-2: \"%s\""
-#: ../libsvn_subr/opt.c:187
+#: ../libsvn_subr/opt.c:189
msgid " ARG"
-msgstr ""
+msgstr " ARG"
-#: ../libsvn_subr/opt.c:322
-#, fuzzy
+#: ../libsvn_subr/opt.c:324
msgid ""
"\n"
"Global options:\n"
msgstr ""
"\n"
-"Giltiga flaggor:\n"
+"Globala flaggor:\n"
-#: ../libsvn_subr/opt.c:770
+#: ../libsvn_subr/opt.c:816
#, c-format
-msgid "Syntax error parsing revision '%s'"
-msgstr "Syntaxfel i revisionsargumentet \"%s\""
+msgid "Syntax error parsing peg revision '%s'; did you mean '%s@'?"
+msgstr "Syntaxfel i den fixerade revisionen \"%s\"; menade du \"%s@\"?"
-#: ../libsvn_subr/opt.c:907
-#, fuzzy
+#: ../libsvn_subr/opt.c:822
+#, c-format
+msgid "Syntax error parsing peg revision '%s'"
+msgstr "Syntaxfel i den fixerade revisionen \"%s\""
+
+#: ../libsvn_subr/opt.c:959
msgid "Revision property pair is empty"
-msgstr "Revisionsposten är ej en lista"
+msgstr "Revisionsegenskapsparet är tomt"
-#: ../libsvn_subr/opt.c:927 ../svn/propedit-cmd.c:87 ../svn/propget-cmd.c:207
+#: ../libsvn_subr/opt.c:979 ../svn/propedit-cmd.c:87 ../svn/propget-cmd.c:336
#: ../svn/propset-cmd.c:68
#, c-format
msgid "'%s' is not a valid Subversion property name"
msgstr "\"%s\" är inget giltigt namn på en Subversion-egenskap"
-#: ../libsvn_subr/opt.c:964
+#: ../libsvn_subr/opt.c:1016
#, c-format
msgid "'%s' is just a peg revision. Maybe try '%s@' instead?"
-msgstr ""
+msgstr "\"%s\" är bara en fixerad revision. Kanske du menade \"%s@\" istället?"
-#: ../libsvn_subr/opt.c:996
+#: ../libsvn_subr/opt.c:1062
#, c-format
msgid "URL '%s' contains a '..' element"
msgstr "URL:en \"%s\" innehåller ett \"..\"-element"
-#: ../libsvn_subr/opt.c:1029
+#: ../libsvn_subr/opt.c:1095
#, c-format
msgid "Error resolving case of '%s'"
msgstr "Kunde inte ta reda på skiftläge för \"%s\""
-#: ../libsvn_subr/opt.c:1048
+#: ../libsvn_subr/opt.c:1117
#, c-format
msgid ""
"%s, version %s\n"
-" compiled %s, %s\n"
+" compiled %s, %s on %s\n"
"\n"
msgstr ""
-"%s, version %s\n"
-" kompilerad %s, %s\n"
+"%s version %s\n"
+" kompilerad %s %s på %s\n"
"\n"
-#: ../libsvn_subr/opt.c:1051
+#: ../libsvn_subr/opt.c:1134
msgid ""
-"Copyright (C) 2010 The Apache Software Foundation.\n"
-"This software consists of contributions made by many people;\n"
-"see the NOTICE file for more information.\n"
-"Subversion is open source software, see http://subversion.apache.org/\n"
+"System information:\n"
"\n"
msgstr ""
+"Systeminformation:\n"
+"\n"
+
+#: ../libsvn_subr/opt.c:1135
+#, c-format
+msgid "* running on %s\n"
+msgstr "* kör på %s\n"
+
+#: ../libsvn_subr/opt.c:1139
+#, c-format
+msgid " - %s\n"
+msgstr " - %s\n"
+
+#: ../libsvn_subr/opt.c:1149
+msgid "* linked dependencies:\n"
+msgstr "* länkade beroenden:\n"
-#: ../libsvn_subr/path.c:958
+#: ../libsvn_subr/opt.c:1174
+msgid "* loaded shared libraries:\n"
+msgstr "* inlästa delat bibliotek:\n"
+
+#: ../libsvn_subr/path.c:1114
#, c-format
msgid "Can't determine the native path encoding"
msgstr "Kan inte hitta den teckenkodning som ditt system använder för sökvägar"
-#: ../libsvn_subr/path.c:1068
+#: ../libsvn_subr/path.c:1303
#, c-format
-msgid "Invalid control character '0x%02x' in path '%s'"
-msgstr "Ogiltigt kontrolltecken \"0x%02x\" i sökvägen \"%s\""
+msgid "Improper relative URL '%s'"
+msgstr "Oriktig relativ URL \"%s\""
+
+#: ../libsvn_subr/prompt.c:147
+msgid "Can't close terminal"
+msgstr "Kan inte stänga terminal"
+
+#: ../libsvn_subr/prompt.c:200
+#, c-format
+msgid "Can't open stderr"
+msgstr "Kan inte öppna standard fel"
+
+#: ../libsvn_subr/prompt.c:263
+#, c-format
+msgid "Can't write to terminal"
+msgstr "Kan inte skriva till terminal"
-#: ../libsvn_subr/prompt.c:120 ../libsvn_subr/prompt.c:124
+#: ../libsvn_subr/prompt.c:385 ../libsvn_subr/prompt.c:472
#, c-format
-msgid "Can't read stdin"
-msgstr "Kan inte läsa från standard in"
+msgid "Can't read from terminal"
+msgstr "Kan inte läsa från terminal"
+
+#: ../libsvn_subr/prompt.c:540
+msgid "End of file while reading from terminal"
+msgstr "Filslut vid läsning från terminal"
-#: ../libsvn_subr/prompt.c:183
+#: ../libsvn_subr/prompt.c:602
#, c-format
msgid "Authentication realm: %s\n"
msgstr "Autentiseringsregion (realm): %s\n"
-#: ../libsvn_subr/prompt.c:209 ../libsvn_subr/prompt.c:232
+#: ../libsvn_subr/prompt.c:629 ../libsvn_subr/prompt.c:652
msgid "Username: "
msgstr "Användarnamn: "
-#: ../libsvn_subr/prompt.c:211
-#, c-format
-msgid "Password for '%s': "
-msgstr "Lösenord för \"%s\": "
-
-#: ../libsvn_subr/prompt.c:254
+#: ../libsvn_subr/prompt.c:674
#, c-format
msgid "Error validating server certificate for '%s':\n"
msgstr "Fel vid verifiering av servercertifikat för \"%s\":\n"
-#: ../libsvn_subr/prompt.c:260
+#: ../libsvn_subr/prompt.c:680
msgid ""
" - The certificate is not issued by a trusted authority. Use the\n"
" fingerprint to validate the certificate manually!\n"
@@ -5895,23 +6534,23 @@ msgstr ""
" - Den som utfärdat certifikatet är inte tillförlitlig. Använd fingeravtrycket\n"
" för att verifiera certifikatet manuellt!\n"
-#: ../libsvn_subr/prompt.c:267
+#: ../libsvn_subr/prompt.c:687
msgid " - The certificate hostname does not match.\n"
msgstr " - Certifikatets värdnamn matchar inte.\n"
-#: ../libsvn_subr/prompt.c:273
+#: ../libsvn_subr/prompt.c:693
msgid " - The certificate is not yet valid.\n"
msgstr " - Certifikatet är inte giltigt ännu.\n"
-#: ../libsvn_subr/prompt.c:279
+#: ../libsvn_subr/prompt.c:699
msgid " - The certificate has expired.\n"
msgstr " - Certifikatet har gått ut.\n"
-#: ../libsvn_subr/prompt.c:285
+#: ../libsvn_subr/prompt.c:705
msgid " - The certificate has an unknown error.\n"
msgstr " - Det finns ett okänt fel på certifikatet.\n"
-#: ../libsvn_subr/prompt.c:290
+#: ../libsvn_subr/prompt.c:710
#, c-format
msgid ""
"Certificate information:\n"
@@ -5926,40 +6565,48 @@ msgstr ""
" - Utfärdat av: %s\n"
" - Fingeravtryck: %s\n"
-#: ../libsvn_subr/prompt.c:305
+#: ../libsvn_subr/prompt.c:725
msgid "(R)eject, accept (t)emporarily or accept (p)ermanently? "
msgstr "väg(R)a, acceptera (T)illfälligt eller acceptera (P)ermanent? "
-#: ../libsvn_subr/prompt.c:309
+#: ../libsvn_subr/prompt.c:729
msgid "(R)eject or accept (t)emporarily? "
msgstr "väg(R)a eller acceptera (T)illfälligt? "
-#: ../libsvn_subr/prompt.c:349
+#: ../libsvn_subr/prompt.c:769
msgid "Client certificate filename: "
msgstr "Filnamn för klientcertifikat: "
-#: ../libsvn_subr/prompt.c:373
+#: ../libsvn_subr/prompt.c:793
#, c-format
msgid "Passphrase for '%s': "
msgstr "Lösenordsfras för \"%s\": "
-#: ../libsvn_subr/prompt.c:421
+#: ../libsvn_subr/prompt.c:845
msgid "yes"
-msgstr ""
+msgstr "ja"
+
+#: ../libsvn_subr/prompt.c:846
+msgid "y"
+msgstr "j"
-#: ../libsvn_subr/prompt.c:426
+#: ../libsvn_subr/prompt.c:851
msgid "no"
-msgstr ""
+msgstr "nej"
+
+#: ../libsvn_subr/prompt.c:852
+msgid "n"
+msgstr "n"
-#: ../libsvn_subr/prompt.c:432
+#: ../libsvn_subr/prompt.c:858
msgid "Please type 'yes' or 'no': "
-msgstr ""
+msgstr "Var god skriv \"ja\" eller \"nej\": "
-#: ../libsvn_subr/prompt.c:446
+#: ../libsvn_subr/prompt.c:872
msgid "Store password unencrypted (yes/no)? "
-msgstr ""
+msgstr "Lagra lösenord okrypterat (ja/nej)? "
-#: ../libsvn_subr/prompt.c:448
+#: ../libsvn_subr/prompt.c:874
#, c-format
msgid ""
"\n"
@@ -5977,12 +6624,26 @@ msgid ""
"'%s'.\n"
"-----------------------------------------------------------------------\n"
msgstr ""
+"\n"
+"-----------------------------------------------------------------------\n"
+"OBSERVERA! Ditt lösenord för autentiseringsregion:\n"
+"\n"
+" %s\n"
+"\n"
+"kan bara lagras på disk i klartext! Om möjligt bör du ställa in ditt\n"
+"system så att Subversion kan lagra lösenord i krypterad form.\n"
+"Se dokumentationen för detaljer.\n"
+"\n"
+"Du kan slippa se denna varning igen genom att sätta inställningen\n"
+"\"store-plaintext-passwords\" till antingen \"ja\" eller \"nej\" i\n"
+"\"%s\".\n"
+"-----------------------------------------------------------------------\n"
-#: ../libsvn_subr/prompt.c:475
+#: ../libsvn_subr/prompt.c:901
msgid "Store passphrase unencrypted (yes/no)? "
-msgstr ""
+msgstr "Lagra lösenordsfras okrypterad (ja/nej)? "
-#: ../libsvn_subr/prompt.c:477
+#: ../libsvn_subr/prompt.c:903
#, c-format
msgid ""
"\n"
@@ -6000,144 +6661,155 @@ msgid ""
"'no' in '%s'.\n"
"-----------------------------------------------------------------------\n"
msgstr ""
+"\n"
+"-----------------------------------------------------------------------\n"
+"OBSERVERA! Ditt lösenord för klientcertifikatet:\n"
+"\n"
+" %s\n"
+"\n"
+"kan bara lagras på disk i klartext! Om möjligt bör du ställa in ditt\n"
+"system så att Subversion kan lagra lösenordfraser i krypterad form.\n"
+"Se dokumentationen för detaljer.\n"
+"\n"
+"Du kan slippa se denna varning igen genom att sätta inställningen\n"
+"\"store-ssl-client-cert-pp-plaintext\" till antingen \"ja\" eller\n"
+"\"nej\" i \"%s\".\n"
+"-----------------------------------------------------------------------\n"
-#: ../libsvn_subr/prompt.c:523
-#, fuzzy, c-format
+#: ../libsvn_subr/prompt.c:949
+#, c-format
msgid "Password for '%s' GNOME keyring: "
-msgstr "Lösenord för \"%s\": "
+msgstr "Lösenord för GNOME-nyckelring \"%s\": "
-#: ../libsvn_subr/simple_providers.c:446
+#: ../libsvn_subr/simple_providers.c:449
#: ../libsvn_subr/ssl_client_cert_pw_providers.c:296
-#, fuzzy, c-format
+#, c-format
msgid "Config error: invalid value '%s' for option '%s'"
-msgstr "Konfigurationsfel: felaktigt booleskt värde \"%s\""
+msgstr "Konfigurationsfel: felaktigt värde \"%s\" för inställningen \"%s\""
-#: ../libsvn_subr/sqlite.c:183
-msgid "Expected database row missing"
-msgstr ""
+#: ../libsvn_subr/sqlite.c:176
+#, c-format
+msgid "sqlite[S%d]: %s, executing statement '%s'"
+msgstr "sqlite[S%d]: %s, körning av \"%s\""
-#: ../libsvn_subr/sqlite.c:184
-msgid "Extra database row found"
-msgstr ""
+#: ../libsvn_subr/sqlite.c:265
+msgid "sqlite: Expected database row missing"
+msgstr "sqlite: Väntad rad i databas saknas"
-#: ../libsvn_subr/sqlite.c:693
-#, c-format
-msgid "Schema format %d not recognized"
-msgstr ""
+#: ../libsvn_subr/sqlite.c:266
+msgid "sqlite: Extra database row found"
+msgstr "sqlite: Extra rad i databas hittad"
-#: ../libsvn_subr/sqlite.c:709
+#: ../libsvn_subr/sqlite.c:726
#, c-format
msgid "SQLite compiled for %s, but running with %s"
-msgstr ""
+msgstr "SQLite kompilerad för %s, men kör med %s"
-#: ../libsvn_subr/sqlite.c:721
+#: ../libsvn_subr/sqlite.c:738
msgid "SQLite is required to be compiled and run in thread-safe mode"
-msgstr ""
+msgstr "SQLite måste vara kompilerad för och köras i trådsäkert läge"
-#: ../libsvn_subr/sqlite.c:731
-#, fuzzy
-msgid "Could not configure SQLite"
-msgstr "Kunde inte spara filen"
+#: ../libsvn_subr/sqlite.c:747
+#, c-format
+msgid "Could not configure SQLite [S%d]"
+msgstr "Kunde inte konfigurera SQLite [S%d]"
-#: ../libsvn_subr/sqlite.c:733
-#, fuzzy
+#: ../libsvn_subr/sqlite.c:749
msgid "Could not initialize SQLite"
-msgstr "Kunde inte initiera SASL-biblioteket"
+msgstr "Kunde inte initiera SQLite"
-#: ../libsvn_subr/sqlite.c:742
-#, fuzzy
-msgid "Could not initialize SQLite shared cache"
-msgstr "Kunde inte initiera SASL-biblioteket"
-
-#: ../libsvn_subr/sqlite.c:812
+#: ../libsvn_subr/sqlite.c:1178
#, c-format
-msgid "Expected SQLite database not found: %s"
-msgstr ""
+msgid "SQLite hotcopy failed for %s"
+msgstr "SQLite-kopiering under drift misslyckades för %s"
-#: ../libsvn_subr/sqlite.c:1125
+#: ../libsvn_subr/string.c:943 ../libsvn_subr/string.c:987
#, c-format
-msgid "SQLite hotcopy failed for %s"
-msgstr ""
+msgid "Could not convert '%s' into a number"
+msgstr "Kunde inte omvandla \"%s\" till ett tal"
-#: ../libsvn_subr/subst.c:1640 ../libsvn_wc/props.c:1950
+#: ../libsvn_subr/subst.c:1793 ../libsvn_wc/props.c:1660
#, c-format
msgid "File '%s' has inconsistent newlines"
msgstr "Filen \"%s\" har inkonsekventa radslut"
-#: ../libsvn_subr/svn_string.c:706 ../libsvn_subr/svn_string.c:750
-#, fuzzy, c-format
-msgid "Could not convert '%s' into a number"
-msgstr "kunde inte ansluta till server"
+#: ../libsvn_subr/sysinfo.c:1075
+msgid "Intel"
+msgstr "Intel"
-#: ../libsvn_subr/svn_string.c:712
-#, c-format
-msgid "Number '%s' is out of range '[%llu, %llu]'"
-msgstr ""
+#: ../libsvn_subr/sysinfo.c:1076
+msgid "Intel 64-bit"
+msgstr "64-bitars Intel"
-#: ../libsvn_subr/svn_string.c:756
-#, c-format
-msgid "Number '%s' is out of range '[%lld, %lld]'"
-msgstr ""
+#: ../libsvn_subr/sysinfo.c:1077
+msgid "PowerPC"
+msgstr "PowerPC"
+
+#: ../libsvn_subr/sysinfo.c:1078
+msgid "PowerPC 64-bit"
+msgstr "64-bitars PowerPC"
#. Human explanatory part, generated by apr_strftime as "Sat, 01 Jan 2000"
#: ../libsvn_subr/time.c:85
msgid " (%a, %d %b %Y)"
-msgstr ""
+msgstr " (%a %e %b %Y)"
#: ../libsvn_subr/token.c:66
-#, fuzzy, c-format
+#, c-format
msgid "Token '%s' is unrecognized"
-msgstr "\"%s\" har okänd nodtyp"
+msgstr "Okänt nyckelord \"%s\""
-#: ../libsvn_subr/utf.c:190
-msgid "Can't lock charset translation mutex"
-msgstr "Kan inte låsa lås för teckenkonvertering"
+#: ../libsvn_subr/types.c:48
+#, c-format
+msgid "Invalid revision number found parsing '%s'"
+msgstr "Ogiltigt revisionsnummer i \"%s\""
-#: ../libsvn_subr/utf.c:208 ../libsvn_subr/utf.c:304
-msgid "Can't unlock charset translation mutex"
-msgstr "Kan inte låsa upp lås för teckenkonvertering"
+#: ../libsvn_subr/types.c:60
+#, c-format
+msgid "Negative revision number found parsing '%s'"
+msgstr "Negativt revisionsnummer i \"%s\""
-#: ../libsvn_subr/utf.c:262
+#: ../libsvn_subr/utf.c:245
#, c-format
msgid "Can't create a character converter from native encoding to '%s'"
msgstr "Kan inte skapa teckenkonverterare från systemets kodning till \"%s\""
-#: ../libsvn_subr/utf.c:266
+#: ../libsvn_subr/utf.c:249
#, c-format
msgid "Can't create a character converter from '%s' to native encoding"
msgstr "Kan inte skapa teckenkonverterare från \"%s\" till systemets kodning"
-#: ../libsvn_subr/utf.c:270
+#: ../libsvn_subr/utf.c:253
#, c-format
msgid "Can't create a character converter from '%s' to '%s'"
msgstr "Kan inte skapa teckenkonverterare från \"%s\" till \"%s\""
-#: ../libsvn_subr/utf.c:499
+#: ../libsvn_subr/utf.c:601
#, c-format
msgid "Can't convert string from native encoding to '%s':"
msgstr "Kan inte konvertera sträng från systemets kodning till \"%s\":"
-#: ../libsvn_subr/utf.c:503
+#: ../libsvn_subr/utf.c:605
#, c-format
msgid "Can't convert string from '%s' to native encoding:"
msgstr "Kan inte konvertera sträng från \"%s\" till systemets kodning:"
-#: ../libsvn_subr/utf.c:507
+#: ../libsvn_subr/utf.c:609
#, c-format
msgid "Can't convert string from '%s' to '%s':"
msgstr "Kan inte konvertera sträng från \"%s\" till \"%s\""
-#: ../libsvn_subr/utf.c:552
+#: ../libsvn_subr/utf.c:654
#, c-format
msgid "Safe data '%s' was followed by non-ASCII byte %d: unable to convert to/from UTF-8"
-msgstr "Giltig data '%s' följdes av icke-ASCII-byte %d: kan inte konvertera till/från UTF-8"
+msgstr "Giltig data \"%s\" följdes av icke-ASCII-byte %d: kan inte konvertera till/från UTF-8"
-#: ../libsvn_subr/utf.c:560
+#: ../libsvn_subr/utf.c:662
#, c-format
msgid "Non-ASCII character (code %d) detected, and unable to convert to/from UTF-8"
msgstr "Tecken som ej tillhör ASCII (kod %d) hittades; kan inte konvertera till/från UTF-8"
-#: ../libsvn_subr/utf.c:605
+#: ../libsvn_subr/utf.c:707
#, c-format
msgid ""
"Valid UTF-8 data\n"
@@ -6150,955 +6822,1238 @@ msgstr ""
"följd av ogiltig UTF-8-sekvens\n"
"(hex:%s)"
-#: ../libsvn_subr/validate.c:55
+#: ../libsvn_subr/validate.c:56
#, c-format
msgid "MIME type '%s' has empty media type"
msgstr "MIME-typen \"%s\" har tom mediatyp"
-#: ../libsvn_subr/validate.c:60
+#: ../libsvn_subr/validate.c:61
#, c-format
msgid "MIME type '%s' does not contain '/'"
msgstr "MIME-typen \"%s\" innehåller inget \"/\""
-#: ../libsvn_subr/validate.c:72
-#, fuzzy, c-format
-msgid "MIME type '%s' contains invalid character '%c'"
-msgstr "MIME-typen \"%s\" slutar med icke-alfanumeriskt tecken"
+#: ../libsvn_subr/validate.c:73
+#, c-format
+msgid "MIME type '%s' contains invalid character '%c' in media type"
+msgstr "MIME-typen \"%s\" innehåller det ogiltiga tecknet \"%c\" i mediatyp"
+
+#: ../libsvn_subr/validate.c:84
+#, c-format
+msgid "MIME type '%s' contains invalid character '0x%02x' in postfix"
+msgstr "MIME-typen \"%s\" innehåller det ogiltiga tecknet \"0x%02x\" i postfix"
-#: ../libsvn_subr/version.c:87
+#: ../libsvn_subr/version.c:91
#, c-format
-msgid "Version mismatch in '%s': found %d.%d.%d%s, expected %d.%d.%d%s"
-msgstr "Versioner stämmer ej i '%s': hittade %d.%d.%d%s, väntade %d.%d.%d%s"
+msgid "Version mismatch in '%s'%s: found %d.%d.%d%s, expected %d.%d.%d%s"
+msgstr "Versioner stämmer ej i \"%s\"%s: hittade %d.%d.%d%s, väntade %d.%d.%d%s"
+
+#: ../libsvn_subr/version.c:96
+msgid " (expecting equality)"
+msgstr " (likhet förväntad)"
-#: ../libsvn_subr/xml.c:415
-#, fuzzy, c-format
+#: ../libsvn_subr/version.c:98
+msgid " (expecting compatibility)"
+msgstr " (kompatibilitet förväntad)"
+
+#: ../libsvn_subr/version.c:139
+msgid ""
+"Copyright (C) 2013 The Apache Software Foundation.\n"
+"This software consists of contributions made by many people;\n"
+"see the NOTICE file for more information.\n"
+"Subversion is open source software, see http://subversion.apache.org/\n"
+msgstr ""
+"© 2013 The Apache Software Foundation.\n"
+"Denna programvara består av bidrag från många personer;\n"
+"se filen NOTICE för vidare information.\n"
+"Subversion är öppen källkod; se http://subversion.apache.org/\n"
+
+#: ../libsvn_subr/version.c:217 ../libsvn_subr/version.c:228
+#: ../libsvn_subr/version.c:234 ../libsvn_subr/version.c:251
+#: ../libsvn_subr/version.c:258
+#, c-format
+msgid "Failed to parse version number string '%s'"
+msgstr "Syntaxfel i sträng med versionsnummer \"%s\""
+
+#: ../libsvn_subr/xml.c:416
+#, c-format
msgid "Malformed XML: %s at line %ld"
-msgstr "Felaktig XML: %s på rad %d"
+msgstr "Felaktig XML: %s på rad %ld"
#: ../libsvn_wc/adm_crawler.c:114
#, c-format
msgid "The existing node '%s' can not be restored."
-msgstr ""
+msgstr "Den befintliga noden \"%s\" kan inte återställas."
-#: ../libsvn_wc/adm_crawler.c:141
-#, fuzzy, c-format
+#: ../libsvn_wc/adm_crawler.c:133
+#, c-format
msgid "The node '%s' can not be restored."
-msgstr "Rotkatalogen kan inte raderas"
+msgstr "Noden \"%s\" kan inte återställas."
-#: ../libsvn_wc/adm_crawler.c:724
-#, fuzzy, c-format
-msgid "Can't retrieve base revision for %s"
-msgstr "Kan inte sätta rättigheter på \"%s\""
-
-#: ../libsvn_wc/adm_crawler.c:999
+#: ../libsvn_wc/adm_crawler.c:851
msgid "Error aborting report"
msgstr "Fel när rapportering avbröts"
-#: ../libsvn_wc/adm_crawler.c:1274
-#, fuzzy, c-format
-msgid ""
-"Checksum mismatch for text base of '%s':\n"
-" expected: %s\n"
-" actual: %s\n"
-msgstr ""
-"Felaktig kontrollsumma på representationen \"%s\":\n"
-" väntade: %s\n"
-" fick: %s\n"
-
-#: ../libsvn_wc/adm_crawler.c:1288
+#: ../libsvn_wc/adm_crawler.c:963
#, c-format
-msgid "While preparing '%s' for commit"
-msgstr ""
+msgid "Pristine checksum for file '%s' is missing"
+msgstr "Orörd kontrollsumma för filen \"%s\" saknas"
-#: ../libsvn_wc/adm_files.c:105
+#: ../libsvn_wc/adm_crawler.c:1128
#, c-format
-msgid "'%s' is not a valid administrative directory name"
-msgstr "\"%s\" är inget giltigt namn på administrationskatalogen"
+msgid "Checksum mismatch for text base of '%s'"
+msgstr "Felaktig kontrollsumma för textbas för \"%s\""
-#: ../libsvn_wc/adm_files.c:208
+#: ../libsvn_wc/adm_crawler.c:1139
#, c-format
-msgid "Node '%s' has no pristine text"
-msgstr ""
+msgid "While preparing '%s' for commit"
+msgstr "Under förberedelse för arkivering av \"%s\""
-#: ../libsvn_wc/adm_files.c:234
+#: ../libsvn_wc/adm_files.c:105
#, c-format
-msgid "Node '%s' has no pristine base text"
-msgstr ""
-
-#: ../libsvn_wc/adm_files.c:259
-#, fuzzy, c-format
-msgid "File '%s' has no text base"
-msgstr "Filen \"%s\" har inkonsekventa radslut"
-
-#: ../libsvn_wc/adm_files.c:286
-#, fuzzy, c-format
-msgid "Base node of '%s' is not a file"
-msgstr "Sökvägen \"%s\" är inte en fil"
+msgid "'%s' is not a valid administrative directory name"
+msgstr "\"%s\" är inget giltigt namn på förvaltningskatalogen"
-#: ../libsvn_wc/adm_files.c:322
+#: ../libsvn_wc/adm_files.c:185 ../libsvn_wc/adm_files.c:241
#, c-format
msgid "Can only get the pristine contents of files; '%s' is not a file"
-msgstr ""
+msgstr "Kan bara hämta det orörda innehållet av filer; \"%s\" är ingen fil"
-#: ../libsvn_wc/adm_files.c:348
+#: ../libsvn_wc/adm_files.c:194 ../libsvn_wc/adm_files.c:256
#, c-format
msgid "Cannot get the pristine contents of '%s' because its delete is already committed"
-msgstr ""
+msgstr "Kan inte hämta orört innehåll av \"%s\" eftersom dess radering redan är arkiverad"
-#: ../libsvn_wc/adm_files.c:356
+#: ../libsvn_wc/adm_files.c:202 ../libsvn_wc/adm_files.c:264
#, c-format
msgid "Cannot get the pristine contents of '%s' because it has an unexpected status"
-msgstr ""
+msgstr "Kan inte hämta det orörda innehållet av \"%s\" eftersom det befinner sig i oväntat tillstånd"
-#: ../libsvn_wc/adm_files.c:639
+#: ../libsvn_wc/adm_files.c:209
#, c-format
-msgid "Revision %ld doesn't match existing revision %ld in '%s'"
-msgstr "Revisionen %ld matchar inte den existerande revisionen %ld i \"%s\""
+msgid "Node '%s' has no pristine text"
+msgstr "Nod \"%s\" har ingen orörd text"
-#: ../libsvn_wc/adm_files.c:685
+#: ../libsvn_wc/adm_files.c:452
#, c-format
-msgid "URL '%s' doesn't match existing URL '%s' in '%s'"
-msgstr "URL:en \"%s\" matchar inte den existerande URL:en \"%s\" i \"%s\""
+msgid "Revision %ld doesn't match existing revision %ld in '%s'"
+msgstr "Revisionen %ld stämmer inte med den existerande revisionen %ld i \"%s\""
-#: ../libsvn_wc/adm_ops.c:625
-#, fuzzy, c-format
-msgid "'%s' cannot be deleted"
-msgstr "Rotkatalogen kan inte raderas"
+#: ../libsvn_wc/adm_files.c:489
+#, c-format
+msgid "URL '%s' (uuid: '%s') doesn't match existing URL '%s' (uuid: '%s') in '%s'"
+msgstr "URL:en \"%s\" (UUID: \"%s\") stämmer inte med den existerande URL:en \"%s\" (UUID: \"%s\") i \"%s\""
-#: ../libsvn_wc/adm_ops.c:795 ../libsvn_wc/update_editor.c:5607
-#, fuzzy, c-format
+#: ../libsvn_wc/adm_ops.c:602 ../libsvn_wc/update_editor.c:5244
+#, c-format
msgid "Can't find parent directory's node while trying to add '%s'"
-msgstr "Kunde inte hitta föräldrakatalogens post när \"%s\" skulle läggas till"
+msgstr "Kunde inte hitta föräldrakatalogens nod när \"%s\" skulle läggas till"
-#: ../libsvn_wc/adm_ops.c:804 ../libsvn_wc/update_editor.c:5601
+#: ../libsvn_wc/adm_ops.c:611 ../libsvn_wc/update_editor.c:5238
#, c-format
msgid "Can't add '%s' to a parent directory scheduled for deletion"
msgstr "Kan inte lägga till \"%s\" i en föräldrakatalog som är schemalagd för radering"
-#: ../libsvn_wc/adm_ops.c:813 ../libsvn_wc/update_editor.c:5614
+#: ../libsvn_wc/adm_ops.c:618 ../libsvn_wc/update_editor.c:5251
#, c-format
msgid "Can't schedule an addition of '%s' below a not-directory node"
-msgstr ""
+msgstr "Kan inte schemalägga ett tillägg av \"%s\" under en nod som inte är en katalog"
-#: ../libsvn_wc/adm_ops.c:872
-#, fuzzy, c-format
+#: ../libsvn_wc/adm_ops.c:677
+#, c-format
msgid "Can't create an entry with a reserved name while trying to add '%s'"
-msgstr "Kunde inte hitta föräldrakatalogens post när \"%s\" skulle läggas till"
+msgstr "Kunde inte skapa en post med ett reserverat namn när \"%s\" skulle läggas till"
-#: ../libsvn_wc/adm_ops.c:1050
+#: ../libsvn_wc/adm_ops.c:881
#, c-format
msgid "The URL '%s' has a different repository root than its parent"
msgstr "URL:en \"%s\" har annan arkivrot än sin förälder"
-#: ../libsvn_wc/adm_ops.c:1068
+#: ../libsvn_wc/adm_ops.c:899
#, c-format
msgid "Can't schedule the working copy at '%s' from repository '%s' with uuid '%s' for addition under a working copy from repository '%s' with uuid '%s'."
-msgstr ""
+msgstr "Kan inte schemalägga arbetskopian vid \"%s\" från arkivet \"%s\" med UUID \"%s\" för att läggas till under en arbetskopia från arkiv \"%s\" med UUID \"%s\"."
-#: ../libsvn_wc/adm_ops.c:1082
+#: ../libsvn_wc/adm_ops.c:913
#, c-format
msgid "Can't add '%s' with URL '%s', but with the data from '%s'"
-msgstr ""
+msgstr "Kan inte lägga till \"%s\" med URL \"%s\", men med data från \"%s\""
-#: ../libsvn_wc/adm_ops.c:1313
+#: ../libsvn_wc/cleanup.c:58
#, c-format
-msgid "Can't revert '%s' with this depth, as that requires reverting '%s'."
-msgstr ""
+msgid "'%s' is not a working copy directory"
+msgstr "\"%s\" är ingen katalog i en arbetskopia"
-#: ../libsvn_wc/adm_ops.c:1414
-#, fuzzy, c-format
-msgid "Cannot revert unversioned item '%s'"
-msgstr "\"%s\" är av en typ som är okänd eller ej kan versionshanteras"
+#: ../libsvn_wc/cleanup.c:64
+msgid "Log format too old, please use Subversion 1.6 or earlier"
+msgstr "För gammalt loggformat; var god använd Subversion 1.6 eller äldre"
-#: ../libsvn_wc/adm_ops.c:1445
-#, c-format
-msgid "Cannot revert '%s': unsupported entry node kind"
-msgstr "Kan inte återställa \"%s\": nodtypen stöds inte"
+#: ../libsvn_wc/conflicts.c:83
+msgid "Not a conflict skel"
+msgstr "Inte ett konfliktskelett"
+
+#: ../libsvn_wc/conflicts.c:610 ../libsvn_wc/conflicts.c:707
+msgid "Not a completed conflict skel"
+msgstr "Inte ett fullständigt konfliktskelett"
+
+#: ../libsvn_wc/conflicts.c:788 ../libsvn_wc/conflicts.c:861
+#: ../libsvn_wc/conflicts.c:951
+msgid "Conflict not set"
+msgstr "Konflikt inte satt"
+
+#: ../libsvn_wc/conflicts.c:1438 ../libsvn_wc/conflicts.c:1790
+msgid "Conflict callback violated API: returned no results"
+msgstr "Konfliktprocedur bröt mot API:et: returnerade inga resultat"
+
+#: ../libsvn_wc/conflicts.c:1482
+msgid "Conflict callback violated API: returned no merged file"
+msgstr "Konfliktprocedur bröt mot API:et: returnerade ingen sammanslagen fil"
+
+#: ../libsvn_wc/conflicts.c:2468 ../libsvn_wc/conflicts.c:2644
+msgid "Invalid 'conflict_result' argument"
+msgstr "Ogiltigt \"conflict_result\"-argument"
-#: ../libsvn_wc/adm_ops.c:1460
+#: ../libsvn_wc/conflicts.c:2767 ../libsvn_wc/conflicts.c:2807
#, c-format
-msgid "Cannot revert '%s': unsupported node kind in working copy"
-msgstr "Kan inte återställa \"%s\": nodtyp som inte stöds i arbetskopian"
+msgid "Tree conflict can only be resolved to 'working' or 'mine-conflict' state; '%s' not resolved"
+msgstr "Trädkonflikt kan endast lösas till tillstånden \"working\" eller \"mine-conflict\"; \"%s\" ej löst"
-#: ../libsvn_wc/adm_ops.c:1785
+#: ../libsvn_wc/conflicts.c:2822
#, c-format
-msgid "File '%s' has local modifications"
-msgstr "Filen \"%s\" har lokala ändringar"
+msgid "Tree conflict can only be resolved to 'working' state; '%s' not resolved"
+msgstr "Trädkonflikt kan endast lösas till tillståndet \"working\"; \"%s\" ej löst"
-#: ../libsvn_wc/adm_ops.c:2087
-#, fuzzy, c-format
-msgid "'%s' is a directory, and thus cannot be a member of a changelist"
-msgstr "Sökvägen \"%s\" är inte en fil"
+#: ../libsvn_wc/conflicts.c:2924
+msgid "No conflict-callback and no pre-defined conflict-choice provided"
+msgstr "Ingen konfliktprocedur och inget fördefinierad konfliktval tillhandahölls"
-#: ../libsvn_wc/adm_ops.c:2155
-#, fuzzy, c-format
-msgid "Can't add a file external to '%s' as it is not a file in repository '%s'."
-msgstr "Kan inte kopiera till \"%s\", då den inte är från arkivet \"%s\", utan från \"%s\""
+#: ../libsvn_wc/copy.c:86
+#, c-format
+msgid "Source '%s' is unexpected kind"
+msgstr "Källan \"%s\" är av oväntat slag"
-#: ../libsvn_wc/cleanup.c:58
+#: ../libsvn_wc/copy.c:410
#, c-format
-msgid "'%s' is not a working copy directory"
-msgstr "\"%s\" är ingen katalog i en arbetskopia"
+msgid "cannot handle node kind for '%s'"
+msgstr "kan inte hantera nodtyp för \"%s\""
-#: ../libsvn_wc/cleanup.c:64
-msgid "Log format too old, please use Subversion 1.6 or earlier"
-msgstr ""
+#: ../libsvn_wc/copy.c:432 ../libsvn_wc/wc_db.c:4412 ../libsvn_wc/wc_db.c:4987
+#, c-format
+msgid "Cannot handle status of '%s'"
+msgstr "Kan inte hantera tillståndet för \"%s\""
-#: ../libsvn_wc/conflicts.c:299
-#, fuzzy
-msgid "Invalid 'conflict_result' argument"
-msgstr "Ogiltigt konfigurationsvärde"
+#: ../libsvn_wc/copy.c:441 ../libsvn_wc/wc_db.c:4403 ../libsvn_wc/wc_db.c:4981
+#: ../libsvn_wc/wc_db.c:5215
+#, c-format
+msgid "Cannot copy '%s' excluded by server"
+msgstr "Kan inte kopiera \"%s\" som är utesluten av servern"
-#: ../libsvn_wc/conflicts.c:409
+#: ../libsvn_wc/copy.c:578
#, c-format
-msgid "Tree conflicts can only be resolved to 'working' state; '%s' not resolved"
-msgstr ""
+msgid "Deleted node '%s' can't be copied."
+msgstr "Den raderade noden \"%s\" kan inte kopieras."
-#: ../libsvn_wc/copy.c:78
-#, fuzzy, c-format
-msgid "Source '%s' is unexpected kind"
-msgstr "Källan \"%s\" är ingen katalog"
+#: ../libsvn_wc/copy.c:596
+#, c-format
+msgid "'%s' is the root of a working copy and cannot be moved"
+msgstr "\"%s\" är rot till en arbetskopia och kan inte flyttas"
-#: ../libsvn_wc/copy.c:384
-#, fuzzy, c-format
-msgid "cannot handle node kind for '%s'"
-msgstr "Okänd nodtyp för \"%s\""
+#: ../libsvn_wc/copy.c:604
+#, c-format
+msgid "'%s' represents the repository root and cannot be moved"
+msgstr "\"%s\" representerar arkivroten och kan inte flyttas"
-#: ../libsvn_wc/copy.c:648
+#: ../libsvn_wc/copy.c:673
#, c-format
msgid "Cannot copy to '%s', as it is not from repository '%s'; it is from '%s'"
msgstr "Kan inte kopiera till \"%s\", då den inte är från arkivet \"%s\", utan från \"%s\""
-#: ../libsvn_wc/copy.c:656
+#: ../libsvn_wc/copy.c:681
#, c-format
msgid "Cannot copy to '%s' as it is scheduled for deletion"
msgstr "Kan inte kopiera till \"%s\", då den är schemalagd att raderas"
-#: ../libsvn_wc/copy.c:685
-#, fuzzy, c-format
+#: ../libsvn_wc/copy.c:709
+#, c-format
msgid "'%s' is already under version control but is excluded."
-msgstr "\"%s\" är redan versionshanterad"
+msgstr "\"%s\" är redan versionshanterad men är utesluten."
-#: ../libsvn_wc/copy.c:700
+#: ../libsvn_wc/copy.c:724
#, c-format
msgid "There is already a versioned item '%s'"
msgstr "Det finns redan ett versionshanterat objekt \"%s\""
-#: ../libsvn_wc/copy.c:716
+#: ../libsvn_wc/copy.c:740
#, c-format
msgid "'%s' already exists and is in the way"
msgstr "\"%s\" finns redan och är i vägen"
-#: ../libsvn_wc/crop.c:224
-#, fuzzy, c-format
+#: ../libsvn_wc/copy.c:791
+#, c-format
+msgid "Cannot move mixed-revision subtree '%s' [%ld:%ld]; try updating it first"
+msgstr "Kan inte flytta delträd \"%s\" i blandad revision [%ld:%ld]; försök med att uppdatera först"
+
+#: ../libsvn_wc/crop.c:208
+#, c-format
msgid "Cannot exclude '%s': it is a working copy root"
-msgstr "Väntade inte att \"%s\" skulle vara en rot till en arbetskopia"
+msgstr "Kan inte utesluta \"%s\": den är rot till en arbetskopia"
-#: ../libsvn_wc/crop.c:232
+#: ../libsvn_wc/crop.c:216
#, c-format
msgid "Cannot exclude '%s': it is a switched path"
-msgstr ""
+msgstr "Kan inte utesluta \"%s\": det är en växlad sökväg"
-#: ../libsvn_wc/crop.c:256
-#, fuzzy, c-format
+#: ../libsvn_wc/crop.c:243
+#, c-format
msgid "Cannot exclude '%s': it is to be added to the repository. Try commit instead"
-msgstr "Kan inte kopiera eller flytta \"%s\": den är inte i arkivet ännu; arkivera den först"
+msgstr "Kan inte utesluta \"%s\": den kommer läggas till arkivet. Försök arkivera den istället"
-#: ../libsvn_wc/crop.c:263
-#, fuzzy, c-format
+#: ../libsvn_wc/crop.c:250
+#, c-format
msgid "Cannot exclude '%s': it is to be deleted from the repository. Try commit instead"
-msgstr "Kan inte kopiera eller flytta \"%s\": den är inte i arkivet ännu; arkivera den först"
+msgstr "Kan inte utesluta \"%s\": den kommer tas bort från arkivet. Försök arkivera den istället"
-#: ../libsvn_wc/crop.c:333
+#: ../libsvn_wc/crop.c:309
msgid "Can only crop a working copy with a restrictive depth"
-msgstr ""
+msgstr "Kan bara beskära en arbetskopia med ett begränsande djup"
-#: ../libsvn_wc/crop.c:348
-#, fuzzy
+#: ../libsvn_wc/crop.c:320
msgid "Can only crop directories"
-msgstr "Kan inte öppna katalogen \"%s\""
+msgstr "Kan bara beskära kataloger"
-#: ../libsvn_wc/crop.c:359
-#, fuzzy, c-format
+#: ../libsvn_wc/crop.c:333
+#, c-format
msgid "Cannot crop '%s': it is going to be removed from repository. Try commit instead"
-msgstr "Kan inte kopiera eller flytta \"%s\": den är inte i arkivet ännu; arkivera den först"
+msgstr "Kan inte beskära \"%s\": den kommer tas bort från arkivet. Försök arkivera den istället"
-#: ../libsvn_wc/crop.c:366
-#, fuzzy, c-format
+#: ../libsvn_wc/crop.c:340
+#, c-format
msgid "Cannot crop '%s': it is to be added to the repository. Try commit instead"
-msgstr "Kan inte kopiera eller flytta \"%s\": den är inte i arkivet ännu; arkivera den först"
+msgstr "Kan inte beskära \"%s\": den kommer läggas till arkivet. Försök arkivera den istället"
+
+#: ../libsvn_wc/delete.c:237 ../libsvn_wc/delete.c:357
+#, c-format
+msgid "'%s' cannot be deleted"
+msgstr "\"%s\" kan inte raderas"
+
+#: ../libsvn_wc/delete.c:255 ../libsvn_wc/delete.c:373
+#, c-format
+msgid "'%s' is the root of a working copy and cannot be deleted"
+msgstr "\"%s\" är rot till en arbetskopia och kan inte raderas"
+
+#: ../libsvn_wc/delete.c:262 ../libsvn_wc/delete.c:379
+#, c-format
+msgid "'%s' represents the repository root and cannot be deleted"
+msgstr "\"%s\" representerar arkivroten och kan inte raderas"
-#: ../libsvn_wc/deprecated.c:2052
+#: ../libsvn_wc/delete.c:476
+#, c-format
+msgid "File '%s' has local modifications"
+msgstr "Filen \"%s\" har lokala ändringar"
+
+#: ../libsvn_wc/deprecated.c:2284
#, c-format
msgid "Unexpectedly found '%s': path is marked 'missing'"
msgstr "Hittade \"%s\", vilket var oväntat: sökvägen är markerad som \"saknad\""
-#: ../libsvn_wc/entries.c:1148
-#, fuzzy, c-format
+#: ../libsvn_wc/entries.c:1044
+#, c-format
msgid "'%s' is not a versioned working copy"
-msgstr "\"%s\" är ingen arbetskopia"
+msgstr "\"%s\" är ingen versionshanterad arbetskopia"
-#: ../libsvn_wc/entries.c:1394
-#, fuzzy, c-format
+#: ../libsvn_wc/entries.c:1290
+#, c-format
msgid "Admin area of '%s' is missing"
-msgstr "Katalogen \"%s\" saknas"
+msgstr "Förvaltningsområdet i \"%s\" saknas"
-#: ../libsvn_wc/entries.c:1414
-#, fuzzy, c-format
+#: ../libsvn_wc/entries.c:1310
+#, c-format
msgid "'%s' is not of the right kind"
-msgstr "\"%s\" är inte arkivets rot"
+msgstr "\"%s\" är inte av rätt slag"
+
+#: ../libsvn_wc/entries.c:1507
+#, c-format
+msgid "The file '%s' has no checksum"
+msgstr "Filen \"%s\" saknar kontrollsumma"
+
+#: ../libsvn_wc/entries.c:1619
+#, c-format
+msgid "Unable to upgrade '%s' at line %d"
+msgstr "Kunde inte uppgradera \"%s\" på rad %d"
+
+#: ../libsvn_wc/entries.c:1837
+#, c-format
+msgid "No copyfrom URL for '%s'"
+msgstr "Ingen URL för kopieringskällan för \"%s\""
+
+#: ../libsvn_wc/entries.c:2051
+#, c-format
+msgid "Bad base MD5 checksum for '%s'; expected: '%s'; found '%s'; "
+msgstr "Felaktig MD5-kontrollsumma för \"%s\"; väntade \"%s\", fick \"%s\""
-#: ../libsvn_wc/entries.c:2143
+#: ../libsvn_wc/entries.c:2398
#, c-format
msgid "No default entry in directory '%s'"
msgstr "Ingen normalpost i katalogen \"%s\""
-#: ../libsvn_wc/entries.c:2321
+#: ../libsvn_wc/entries.c:2554
#, c-format
msgid "Directory '%s' has no THIS_DIR entry"
msgstr "Katalogen \"%s\" saknar THIS_DIR-post"
-#: ../libsvn_wc/entries.c:2504 ../libsvn_wc/node.c:769
+#: ../libsvn_wc/entries.c:2735 ../libsvn_wc/node.c:528
#, c-format
msgid "'%s' has an unrecognized node kind"
msgstr "\"%s\" har okänd nodtyp"
-#: ../libsvn_wc/lock.c:504
+#: ../libsvn_wc/externals.c:154 ../libsvn_wc/externals.c:232
+#, c-format
+msgid "Error parsing %s property on '%s': '%s'"
+msgstr "Fel vid tolkning av egenskapen %s på \"%s\": \"%s\""
+
+#: ../libsvn_wc/externals.c:202
+#, c-format
+msgid "Can't split line into components: '%s'"
+msgstr "Kan inte dela upp rad i beståndsdelar: \"%s\""
+
+#: ../libsvn_wc/externals.c:257
+#, c-format
+msgid "Invalid %s property on '%s': cannot use two absolute URLs ('%s' and '%s') in an external; one must be a path where an absolute or relative URL is checked out to"
+msgstr "Felaktig egenskap %s på \"%s\": kan inte använda två absoluta URL:er (\"%s\" och \"%s\") i ett externt objekt; den ena måste vara en sökväg som en absolut eller relativ URL hämtas ut till"
+
+#: ../libsvn_wc/externals.c:266 ../libsvn_wc/externals.c:274
+#, c-format
+msgid "Invalid %s property on '%s': cannot use a URL '%s' as the target directory for an external definition"
+msgstr "Felaktig egenskap %s på \"%s\": kan inte använda URL:en \"%s\" som målkatalog för en extern definition"
+
+#: ../libsvn_wc/externals.c:316
+#, c-format
+msgid "Invalid %s property on '%s': target '%s' is an absolute path or involves '..'"
+msgstr "Felaktig egenskap %s på %s: målet \"%s\" är en absolut sökväg eller innehåller \"..\""
+
+#: ../libsvn_wc/externals.c:491 ../libsvn_wc/externals.c:514
+#, c-format
+msgid "This editor can only update '%s'"
+msgstr "Denna editor kan bara uppdatera \"%s\""
+
+#: ../libsvn_wc/externals.c:529
+#, c-format
+msgid "Node '%s' is no existing file external"
+msgstr "Noden \"%s\" är inte en befintlig extern fil"
+
+#: ../libsvn_wc/externals.c:1517
+#, c-format
+msgid "URL '%s' does not begin with a scheme"
+msgstr "URL:en \"%s\" börjar inte med ett schema"
+
+#: ../libsvn_wc/externals.c:1572
+#, c-format
+msgid "Illegal parent directory URL '%s'"
+msgstr "Otillåten föräldrakatalogs-URL \"%s\""
+
+#: ../libsvn_wc/externals.c:1611
+#, c-format
+msgid "Illegal repository root URL '%s'"
+msgstr "Otillåten arkivrots-URL \"%s\""
+
+#: ../libsvn_wc/externals.c:1656
+#, c-format
+msgid "The external relative URL '%s' cannot have backpaths, i.e. '..'"
+msgstr "Den externa relativa URL:en \"%s\" får inte innehålla \"..\""
+
+#: ../libsvn_wc/externals.c:1684
+#, c-format
+msgid "Unrecognized format for the relative external URL '%s'"
+msgstr "Okänt format för den relativa externa URL:en \"%s\""
+
+#: ../libsvn_wc/lock.c:529
#, c-format
msgid "Path '%s' ends in '%s', which is unsupported for this operation"
msgstr "Sökvägen \"%s\" slutar med \"%s\", vilket inte stöds för den här operationen"
-#: ../libsvn_wc/lock.c:553 ../libsvn_wc/upgrade.c:1266
-#, fuzzy, c-format
-msgid "Working copy format of '%s' is too old (%d); please run 'svn upgrade'"
-msgstr "Arbetskopian \"%s\" har för gammalt format (%d); checka ut din arbetskopia igen"
-
-#: ../libsvn_wc/lock.c:817 ../libsvn_wc/wc_db.c:8585
+#: ../libsvn_wc/lock.c:773 ../libsvn_wc/wc_db.c:13652
#, c-format
msgid "Working copy '%s' locked"
msgstr "Arbetskopian \"%s\" är låst"
-#: ../libsvn_wc/lock.c:961
+#: ../libsvn_wc/lock.c:918
#, c-format
msgid "Unable to check path existence for '%s'"
msgstr "Kunde inte kontrollera om sökvägen \"%s\" existerar"
-#: ../libsvn_wc/lock.c:981
+#: ../libsvn_wc/lock.c:941
#, c-format
msgid "Expected '%s' to be a directory but found a file"
msgstr "\"%s\" borde vara en katalog, men den är en fil"
-#: ../libsvn_wc/lock.c:991
-#, fuzzy, c-format
+#: ../libsvn_wc/lock.c:951
+#, c-format
msgid "Can't retrieve an access baton for non-directory '%s'"
-msgstr "Kan inte erhålla poster för något som ej är en katalog"
+msgstr "Kan inte erhålla åtkomstpinne för icke-katalogen \"%s\""
-#: ../libsvn_wc/lock.c:1000
+#: ../libsvn_wc/lock.c:960
#, c-format
msgid "Directory '%s' is missing"
msgstr "Katalogen \"%s\" saknas"
-#: ../libsvn_wc/lock.c:1008
+#: ../libsvn_wc/lock.c:968
#, c-format
msgid "Working copy '%s' is not locked"
msgstr "Arbetskopian \"%s\" är inte låst"
-#: ../libsvn_wc/lock.c:1469
+#: ../libsvn_wc/lock.c:1382
#, c-format
msgid "No write-lock in '%s'"
msgstr "Inget skrivlås i \"%s\""
-#: ../libsvn_wc/lock.c:1564 ../libsvn_wc/lock.c:1615
-#, fuzzy, c-format
+#: ../libsvn_wc/lock.c:1496
+#, c-format
msgid "Can't obtain lock on non-directory '%s'."
-msgstr "Kan inte öppna katalogen \"%s\""
+msgstr "Kan inte låsa icke-katalogen \"%s\""
-#: ../libsvn_wc/merge.c:866 ../libsvn_wc/merge.c:1139
-msgid "Conflict callback violated API: returned no results"
-msgstr ""
+#: ../libsvn_wc/merge.c:1281 ../libsvn_wc/props.c:257
+#, c-format
+msgid "Can't merge into conflicted node '%s'"
+msgstr "Kan inte slå samman till konfliktnoden \"%s\""
-#: ../libsvn_wc/merge.c:1175
-msgid "Conflict callback violated API: returned no merged file"
-msgstr ""
+#: ../libsvn_wc/merge.c:1324 ../libsvn_wc/props.c:273
+#, c-format
+msgid "The property '%s' may not be merged into '%s'."
+msgstr "Egenskapen \"%s\" får inte slås samman till \"%s\"."
+
+#: ../libsvn_wc/node.c:1047
+#, c-format
+msgid "Incomplete copy information on path '%s'."
+msgstr "Ogiltig kopieringsinformation för sökväg \"%s\"."
+
+#: ../libsvn_wc/node.c:1211
+#, c-format
+msgid "'%s' is not the root of the working copy '%s'"
+msgstr "\"%s\" är inte rot till arbetskopian \"%s\""
# ### Better wording!
-#: ../libsvn_wc/old-and-busted.c:122
+#: ../libsvn_wc/old-and-busted.c:123
msgid "Invalid escape sequence"
msgstr "Ogiltig \"escape-sekvens\""
# ### inpresice
-#: ../libsvn_wc/old-and-busted.c:129
+#: ../libsvn_wc/old-and-busted.c:130
msgid "Invalid escaped character"
msgstr "Ogiltigt tecken"
-#: ../libsvn_wc/old-and-busted.c:147 ../libsvn_wc/old-and-busted.c:176
-#: ../libsvn_wc/old-and-busted.c:240 ../libsvn_wc/old-and-busted.c:252
+#: ../libsvn_wc/old-and-busted.c:148 ../libsvn_wc/old-and-busted.c:177
+#: ../libsvn_wc/old-and-busted.c:241 ../libsvn_wc/old-and-busted.c:253
msgid "Unexpected end of entry"
msgstr "Oväntat slut på post"
-#: ../libsvn_wc/old-and-busted.c:202
+#: ../libsvn_wc/old-and-busted.c:203
#, c-format
msgid "Entry contains non-canonical path '%s'"
-msgstr ""
+msgstr "Post innehåller icke-normaliserad sökväg \"%s\""
-#: ../libsvn_wc/old-and-busted.c:274
+#: ../libsvn_wc/old-and-busted.c:275
#, c-format
msgid "Invalid value for field '%s'"
msgstr "Ogiltigt värde för fältet \"%s\""
-#: ../libsvn_wc/old-and-busted.c:346
+#: ../libsvn_wc/old-and-busted.c:347
#, c-format
msgid "Found an unexpected \\0 in the file external '%s'"
-msgstr ""
+msgstr "Hittade ett oväntat \\0 i externa filen \"%s\""
-#: ../libsvn_wc/old-and-busted.c:390
-#, fuzzy, c-format
+#: ../libsvn_wc/old-and-busted.c:391
+#, c-format
msgid "Illegal file external revision kind %d for path '%s'"
-msgstr "Filen finns inte: revision %ld, sökväg \"%s\""
+msgstr "Ogiltig revisionstyp %d för extern fil med sökväg \"%s\""
-#: ../libsvn_wc/old-and-busted.c:488 ../libsvn_wc/old-and-busted.c:842
+#: ../libsvn_wc/old-and-busted.c:489 ../libsvn_wc/old-and-busted.c:847
#, c-format
msgid "Entry '%s' has invalid node kind"
msgstr "Posten \"%s\" har ogiltig nodtyp"
-#: ../libsvn_wc/old-and-busted.c:509 ../libsvn_wc/old-and-busted.c:822
+#: ../libsvn_wc/old-and-busted.c:510 ../libsvn_wc/old-and-busted.c:827
#, c-format
msgid "Entry for '%s' has invalid repository root"
msgstr "Posten för \"%s\" har ogiltig arkivrot"
-#: ../libsvn_wc/old-and-busted.c:530 ../libsvn_wc/old-and-busted.c:867
-#, fuzzy, c-format
+#: ../libsvn_wc/old-and-busted.c:531 ../libsvn_wc/old-and-busted.c:872
+#, c-format
msgid "Entry '%s' has invalid 'schedule' value"
-msgstr "Posten \"%s\" har ogiltigt värde för \"%s\""
+msgstr "Posten \"%s\" har ogiltigt \"schedule\"-värde"
-#: ../libsvn_wc/old-and-busted.c:680
-#, fuzzy, c-format
+#: ../libsvn_wc/old-and-busted.c:681
+#, c-format
msgid "Entry '%s' has invalid 'depth' value"
-msgstr "Posten \"%s\" har ogiltigt värde för \"%s\""
+msgstr "Posten \"%s\" har ogiltigt \"depth\"-värde"
-#: ../libsvn_wc/old-and-busted.c:731
+#: ../libsvn_wc/old-and-busted.c:732
#, c-format
msgid "Entry '%s' has invalid '%s' value"
msgstr "Posten \"%s\" har ogiltigt värde för \"%s\""
-#: ../libsvn_wc/old-and-busted.c:1084
+#: ../libsvn_wc/old-and-busted.c:1085
#, c-format
msgid "XML parser failed in '%s'"
msgstr "XML-tolken misslyckades i \"%s\""
-#: ../libsvn_wc/old-and-busted.c:1140
+#: ../libsvn_wc/old-and-busted.c:1141
msgid "Missing default entry"
msgstr "Normalpost saknas"
-#: ../libsvn_wc/old-and-busted.c:1145
+#: ../libsvn_wc/old-and-busted.c:1146
msgid "Default entry has no revision number"
msgstr "Normalposten saknar revisionsnummer"
-#: ../libsvn_wc/old-and-busted.c:1150
+#: ../libsvn_wc/old-and-busted.c:1151
msgid "Default entry is missing URL"
msgstr "Normalposten saknar URL"
-#: ../libsvn_wc/old-and-busted.c:1229
+#: ../libsvn_wc/old-and-busted.c:1230
#, c-format
msgid "Invalid version line in entries file of '%s'"
msgstr "Felaktig versionsrad i postfilen för \"%s\""
-#: ../libsvn_wc/old-and-busted.c:1246
+#: ../libsvn_wc/old-and-busted.c:1247
msgid "Missing entry terminator"
msgstr "Avslutningstecken för posten saknas"
-#: ../libsvn_wc/old-and-busted.c:1249
+#: ../libsvn_wc/old-and-busted.c:1250
msgid "Invalid entry terminator"
msgstr "Ogiltigt avslutningstecken för post"
-#: ../libsvn_wc/old-and-busted.c:1253
+#: ../libsvn_wc/old-and-busted.c:1254
#, c-format
msgid "Error at entry %d in entries file for '%s':"
msgstr "Fel vid post %d i postfilen för \"%s\":"
-#: ../libsvn_wc/props.c:283
-#, fuzzy, c-format
-msgid "The property '%s' may not be merged into '%s'."
-msgstr "egenskapen \"%s\" raderades från \"%s\".\n"
+#: ../libsvn_wc/props.c:236
+#, c-format
+msgid "The node '%s' does not have properties in this state."
+msgstr "Noden \"%s\" har inga egenskaper i detta tillstånd."
-#: ../libsvn_wc/props.c:427
+#: ../libsvn_wc/props.c:401
#, c-format
msgid ""
-"Trying to add new property '%s' with value '%s',\n"
-"but property already exists with value '%s'."
+"Trying to add new property '%s'\n"
+"but the property already exists.\n"
msgstr ""
-"Försöker lägga till egenskapen \"%s\" med värdet \"%s\",\n"
-"men egenskapen finns redan med värdet \"%s\"."
+"Försöker lägga till egenskapen \"%s\"\n"
+"men egenskapen finns redan.\n"
-#: ../libsvn_wc/props.c:437
-#, fuzzy, c-format
+#: ../libsvn_wc/props.c:410
+#, c-format
msgid ""
-"Trying to create property '%s' with value '%s',\n"
-"but it has been locally deleted."
+"Trying to add new property '%s'\n"
+"but the property has been locally deleted.\n"
msgstr ""
-"Försöker lägga till egenskapen \"%s\" med värdet \"%s\",\n"
-"men egenskapen finns redan med värdet \"%s\"."
+"Försöker lägga till egenskapen \"%s\"\n"
+"men egenskapen har tagits bort lokalt.\n"
-#: ../libsvn_wc/props.c:451
-#, fuzzy, c-format
+#: ../libsvn_wc/props.c:424
+#, c-format
msgid ""
-"Trying to delete property '%s' with value '%s',\n"
-"but property has been locally added with value '%s'."
+"Trying to delete property '%s'\n"
+"but the property has been locally added.\n"
msgstr ""
-"Försöker lägga till egenskapen \"%s\" med värdet \"%s\",\n"
-"men egenskapen finns redan med värdet \"%s\"."
+"Försöker ta bort egenskapen \"%s\"\n"
+"men egenskapen har lagts till lokalt.\n"
-#: ../libsvn_wc/props.c:468
-#, fuzzy, c-format
+#: ../libsvn_wc/props.c:440
+#, c-format
msgid ""
-"Trying to delete property '%s' with value '%s',\n"
-"but it has been modified from '%s' to '%s'."
-msgstr "Försöker radera egenskapen \"%s\" men värdet har ändrats från \"%s\" till \"%s\""
+"Trying to delete property '%s'\n"
+"but the property has been locally modified.\n"
+msgstr ""
+"Försöker ta bort egenskapen \"%s\"\n"
+"men egenskapen har ändrats lokalt.\n"
-#: ../libsvn_wc/props.c:479
-#, fuzzy, c-format
+#: ../libsvn_wc/props.c:450
+#, c-format
msgid ""
-"Trying to delete property '%s' with value '%s',\n"
-"but property with value '%s' is locally deleted."
+"Trying to delete property '%s'\n"
+"but the property has been locally deleted and had a different value.\n"
msgstr ""
-"Försöker lägga till egenskapen \"%s\" med värdet \"%s\",\n"
-"men egenskapen finns redan med värdet \"%s\"."
+"Försöker ta bort egenskapen \"%s\"\n"
+"men egenskapen har tagits bort lokalt och hade ett annat värde.\n"
-#: ../libsvn_wc/props.c:491
-#, fuzzy, c-format
+#: ../libsvn_wc/props.c:462
+#, c-format
msgid ""
-"Trying to delete property '%s' with value '%s',\n"
-"but the local value is '%s'."
+"Trying to delete property '%s'\n"
+"but the local property value is different.\n"
msgstr ""
-"Försöker lägga till egenskapen \"%s\" med värdet \"%s\",\n"
-"men egenskapen finns redan med värdet \"%s\"."
+"Försöker ta bort egenskapen \"%s\"\n"
+"men det lokala värdet på egenskapen är annorlunda.\n"
-#: ../libsvn_wc/props.c:510
+#: ../libsvn_wc/props.c:481
#, c-format
msgid ""
-"Trying to change property '%s' from '%s' to '%s',\n"
-"but property already exists with value '%s'."
+"Trying to change property '%s'\n"
+"but the local property value conflicts with the incoming change.\n"
msgstr ""
-"Försöker ändra egenskapen \"%s\" från \"%s\" till \"%s\",\n"
-"men egenskapen finns redan och har värdet \"%s\"."
+"Försöker ändra egenskapen \"%s\"\n"
+"men det lokala värdet på egenskapen står i konflikt med ändringen.\n"
-#: ../libsvn_wc/props.c:519
-#, fuzzy, c-format
+#: ../libsvn_wc/props.c:489
+#, c-format
msgid ""
-"Trying to change property '%s' from '%s' to '%s',\n"
-"but the property has been locally changed from '%s' to '%s'."
+"Trying to change property '%s'\n"
+"but the property has already been locally changed to a different value.\n"
msgstr ""
-"Försöker ändra egenskapen \"%s\" från \"%s\" till \"%s\",\n"
-"men egenskapen finns inte."
+"Försöker ändra egenskapen \"%s\"\n"
+"men egenskapen har redan ändrats lokalt till ett annat värde.\n"
-#: ../libsvn_wc/props.c:527
-#, fuzzy, c-format
+#: ../libsvn_wc/props.c:496
+#, c-format
msgid ""
-"Trying to change property '%s' from '%s' to '%s',\n"
-"but it has been locally deleted."
+"Trying to change property '%s'\n"
+"but the property has been locally deleted.\n"
msgstr ""
-"Försöker ändra egenskapen \"%s\" från \"%s\" till \"%s\",\n"
-"men egenskapen finns inte."
+"Försöker ändra egenskapen \"%s\"\n"
+"men egenskapen har tagits bort lokalt.\n"
-#: ../libsvn_wc/props.c:533
-#, fuzzy, c-format
+#: ../libsvn_wc/props.c:502
+#, c-format
msgid ""
-"Trying to change property '%s' from '%s' to '%s',\n"
-"but property has been locally added with value '%s'."
+"Trying to change property '%s'\n"
+"but the property has been locally added with a different value.\n"
msgstr ""
-"Försöker ändra egenskapen \"%s\" från \"%s\" till \"%s\",\n"
-"men egenskapen finns redan och har värdet \"%s\"."
+"Försöker ändra egenskapen \"%s\"\n"
+"men egenskapen har lagts till lokalt med ett annat värde.\n"
-#: ../libsvn_wc/props.c:540
+#: ../libsvn_wc/props.c:508
#, c-format
msgid ""
-"Trying to change property '%s' from '%s' to '%s',\n"
-"but the property does not exist."
+"Trying to change property '%s'\n"
+"but the property does not exist locally.\n"
msgstr ""
-"Försöker ändra egenskapen \"%s\" från \"%s\" till \"%s\",\n"
-"men egenskapen finns inte."
+"Försöker ändra egenskapen \"%s\"\n"
+"men egenskapen finns inte lokalt.\n"
-#: ../libsvn_wc/props.c:874
-msgid "Conflict callback violated API: returned no results."
-msgstr ""
+#: ../libsvn_wc/props.c:612
+msgid "<<<<<<< (local property value)"
+msgstr "<<<<<<< (lokalt egenskapsvärde)"
-#: ../libsvn_wc/props.c:914
-msgid "Conflict callback violated API: returned no merged file."
-msgstr ""
+#: ../libsvn_wc/props.c:613
+msgid ">>>>>>> (incoming property value)"
+msgstr ">>>>>>> (inkommande egenskapsvärde)"
+
+#: ../libsvn_wc/props.c:648
+msgid "Local property value:\n"
+msgstr "Lokalt egenskapsvärde:\n"
+
+#: ../libsvn_wc/props.c:650 ../libsvn_wc/props.c:661
+msgid "Cannot display: property value is binary data\n"
+msgstr "Kan inte visa: egenskapsvärdet är binärdata\n"
-#: ../libsvn_wc/props.c:1757 ../libsvn_wc/props.c:2008
+#: ../libsvn_wc/props.c:659
+msgid "Incoming property value:\n"
+msgstr "Inkommande egenskapsvärde:\n"
+
+#: ../libsvn_wc/props.c:1475 ../libsvn_wc/props.c:1884
+#: ../libsvn_wc/props.c:1985
#, c-format
msgid "Property '%s' is an entry property"
msgstr "Egenskapen \"%s\" är en postegenskap"
-#: ../libsvn_wc/props.c:1804 ../libsvn_wc/props.c:1811
-#, fuzzy
+#: ../libsvn_wc/props.c:1512 ../libsvn_wc/props.c:1519
msgid "Failed to load properties"
-msgstr "Misslyckades med att läsa egenskaper från disk"
+msgstr "Misslyckades med att läsa egenskaper"
-#: ../libsvn_wc/props.c:1853
+#: ../libsvn_wc/props.c:1555
#, c-format
msgid "Cannot set '%s' on a directory ('%s')"
msgstr "Kan inte sätta \"%s\" på en katalog (\"%s\")"
-#: ../libsvn_wc/props.c:1861
+#: ../libsvn_wc/props.c:1562
#, c-format
msgid "Cannot set '%s' on a file ('%s')"
msgstr "Kan inte sätta \"%s\" på en fil (\"%s\")"
-#: ../libsvn_wc/props.c:1867
+#: ../libsvn_wc/props.c:1641
#, c-format
-msgid "'%s' is not a file or directory"
-msgstr "\"%s\" är ingen fil eller katalog"
+msgid "Can't set '%s': file '%s' has binary mime type property"
+msgstr "Kan inte sätta \"%s\": filen \"%s\" har binär mime-typsegenskap"
-#: ../libsvn_wc/props.c:1931
-#, c-format
-msgid "File '%s' has binary mime type property"
-msgstr "Filen \"%s\" har binär mime-typsegenskap"
+#: ../libsvn_wc/props.c:1686
+msgid "Failed to load current properties"
+msgstr "Misslyckades med att läsa aktuella egenskaper"
-#: ../libsvn_wc/props.c:2000
+#: ../libsvn_wc/props.c:1906
#, c-format
msgid "Can't set properties on '%s': invalid status for updating properties."
-msgstr ""
+msgstr "Kan inte sätta egenskaper på \"%s\": felaktigt tillstånd för att uppdatera egenskaper."
-#: ../libsvn_wc/props.c:2063
-#, fuzzy
-msgid "Failed to load current properties"
-msgstr "Misslyckades med att läsa egenskaper från disk"
+#: ../libsvn_wc/props.c:1990
+#, c-format
+msgid "Property '%s' is a WC property, not a regular property"
+msgstr "Egenskapen \"%s\" är en arbetskopieegenskap, inte en vanlig egenskap"
-#: ../libsvn_wc/props.c:2208
-#, fuzzy, c-format
+#: ../libsvn_wc/props.c:2084
+#, c-format
msgid "Unrecognized line ending style '%s' for '%s'"
-msgstr "Okänt sätt att markera radslut"
-
-#: ../libsvn_wc/props.c:2267
-#, fuzzy, c-format
-msgid "Cannot set non-inheritable mergeinfo on a non-directory ('%s')"
-msgstr "Kan inte sätta \"%s\" på en katalog (\"%s\")"
+msgstr "Okänt sätt att markera radslut \"%s\" för \"%s\""
-#: ../libsvn_wc/props.c:2488 ../libsvn_wc/props.c:2564
+#. scratch_
+#: ../libsvn_wc/props.c:2135
#, c-format
-msgid "Error parsing %s property on '%s': '%s'"
-msgstr "Fel vid tolkning av egenskapen %s på \"%s\": \"%s\""
+msgid " (%d more duplicate targets found)"
+msgstr " (ytterligare %d mål förekommer flera gånger)"
-#: ../libsvn_wc/props.c:2533
-#, fuzzy, c-format
-msgid "Can't split line into components: '%s'"
-msgstr "Kan inte läsa längdrad i filen \"%s\""
-
-#: ../libsvn_wc/props.c:2589
+#: ../libsvn_wc/props.c:2140
#, c-format
-msgid "Invalid %s property on '%s': cannot use two absolute URLs ('%s' and '%s') in an external; one must be a path where an absolute or relative URL is checked out to"
-msgstr ""
+msgid "Invalid %s property on '%s': target '%s' appears more than once%s"
+msgstr "Ogiltig egenskap %s på \"%s\": målet \"%s\" förekommer mer än en gång%s"
-#: ../libsvn_wc/props.c:2598 ../libsvn_wc/props.c:2606
+#: ../libsvn_wc/props.c:2171
#, c-format
-msgid "Invalid %s property on '%s': cannot use a URL '%s' as the target directory for an external definition"
-msgstr ""
-
-#: ../libsvn_wc/props.c:2643
-#, fuzzy, c-format
-msgid "Invalid %s property on '%s': target '%s' is an absolute path or involves '..'"
-msgstr "Ogiltig egenskap %s på %s: målet innehåller \".\" eller \"..\" eller är en absolut sökväg"
-
-#: ../libsvn_wc/questions.c:203
-#, fuzzy, c-format
-msgid ""
-"Checksum mismatch indicates corrupt text base for file: '%s':\n"
-" expected: %s\n"
-" actual: %s\n"
-msgstr ""
-"Felaktig kontrollsumma indikerar trasig textbas: \"%s\"\n"
-" väntade: %s\n"
-" fick: %s\n"
+msgid "Cannot set non-inheritable mergeinfo on a non-directory ('%s')"
+msgstr "Kan inte sätta icke-ärftlig sammanslagningsinformation på en icke-katalog (\"%s\")"
-#: ../libsvn_wc/relocate.c:105
-#, fuzzy, c-format
+#: ../libsvn_wc/relocate.c:111
+#, c-format
msgid "Cannot relocate '%s' as it is not the root of a working copy"
-msgstr "Kan inte återställa \"%s\": nodtyp som inte stöds i arbetskopian"
+msgstr "Kan inte omlokalisera \"%s\" eftersom den inte är rot till en arbetskopia"
-#: ../libsvn_wc/relocate.c:112
-#, fuzzy, c-format
+#: ../libsvn_wc/relocate.c:118
+#, c-format
msgid "Cannot relocate '%s' as it is not the root of a working copy; try relocating '%s' instead"
-msgstr "Kan inte kopiera eller flytta \"%s\": den är inte i arkivet ännu; arkivera den först"
+msgstr "Kan inte omlokalisera \"%s\" eftersom den inte är rot till en arbetskopia; försök omlokalisera \"%s\" istället"
-#: ../libsvn_wc/relocate.c:129
-#, fuzzy
+#: ../libsvn_wc/relocate.c:136
msgid "Cannot relocate a single file"
-msgstr "Kan inte skriva fil med låsinformation och poster \"%s\""
+msgstr "Kan inte omlokalisera en enstaka fil"
-#: ../libsvn_wc/relocate.c:136
+#: ../libsvn_wc/relocate.c:144
#, c-format
msgid "Invalid source URL prefix: '%s' (does not overlap target's URL '%s')"
-msgstr ""
+msgstr "Ogiltigt prefix till käll-URL: \"%s\" (inget gemensamt med målets URL \"%s\")"
-#: ../libsvn_wc/relocate.c:146 ../libsvn_wc/relocate.c:151
-#, fuzzy, c-format
-msgid "Invalid destination URL: '%s'"
-msgstr "Ogiltig URL \"%s\""
+#: ../libsvn_wc/relocate.c:154
+#, c-format
+msgid "Invalid relocation destination: '%s' (not a URL)"
+msgstr "Ogiltigt omlokaliseringsmål: \"%s\" (inte en URL)"
+
+#: ../libsvn_wc/relocate.c:161
+#, c-format
+msgid "Invalid relocation destination: '%s' (does not point to target)"
+msgstr "Ogiltigt omlokaliseringsmål: \"%s\" (pekar inte på målet)"
-#: ../libsvn_wc/tree_conflicts.c:130
+#: ../libsvn_wc/tree_conflicts.c:136
msgid "Unknown enumeration value in tree conflict description"
-msgstr ""
+msgstr "Okänt uppräkningsvärde i beskrivning av trädkonflikt"
-#: ../libsvn_wc/tree_conflicts.c:152
-#, fuzzy
+#: ../libsvn_wc/tree_conflicts.c:160
msgid "Invalid version info in tree conflict description"
-msgstr "Felaktig versionsrad i postfilen för \"%s\""
+msgstr "Felaktig versionsinformation i beskrivning av trädkonflikt"
-#: ../libsvn_wc/tree_conflicts.c:210
-msgid "Invalid conflict info in tree conflict description"
-msgstr ""
+#: ../libsvn_wc/tree_conflicts.c:218
+#, c-format
+msgid "Invalid conflict info '%s' in tree conflict description"
+msgstr "Felaktig konfliktinformation \"%s\" i beskrivning av trädkonflikt"
-#: ../libsvn_wc/tree_conflicts.c:219
+#: ../libsvn_wc/tree_conflicts.c:229
msgid "Empty 'victim' field in tree conflict description"
-msgstr ""
+msgstr "Tomt \"victim\"-fält i beskrivning av trädkonflikt"
-#: ../libsvn_wc/tree_conflicts.c:227
+#: ../libsvn_wc/tree_conflicts.c:237
msgid "Invalid 'node_kind' field in tree conflict description"
-msgstr ""
-
-#: ../libsvn_wc/tree_conflicts.c:291
-#, fuzzy
-msgid "Error parsing tree conflict skel"
-msgstr "Klientfel vid tolkning av argument"
+msgstr "Ogiltigt \"node_kind\"-fält i beskrivning av trädkonflikt"
-#: ../libsvn_wc/tree_conflicts.c:468
-#, fuzzy, c-format
+#: ../libsvn_wc/tree_conflicts.c:430
+#, c-format
msgid "Attempt to add tree conflict that already exists at '%s'"
-msgstr "Försök att skapa en post som redan finns"
+msgstr "Försök att lägga till en trädkonflikt som redan finns vid \"%s\""
-#: ../libsvn_wc/update_editor.c:1051
-#, fuzzy, c-format
+#: ../libsvn_wc/update_editor.c:999
+#, c-format
msgid ""
"Checksum mismatch while updating '%s':\n"
" expected: %s\n"
" actual: %s\n"
msgstr ""
-"Kontrollsumma fel för filen \"%s\":\n"
-" väntad kontrollsumma: %s\n"
-" erhållen kontrollsumma: %s\n"
-
-#: ../libsvn_wc/update_editor.c:1169
-#, fuzzy, c-format
-msgid "Path '%s' is not in the working copy"
-msgstr "\"%s\" är ingen arbetskopia"
+"Felaktig kontrollsumma vid uppdatering av \"%s\":\n"
+" väntad: %s\n"
+" erhållen: %s\n"
-#: ../libsvn_wc/update_editor.c:2187
+#: ../libsvn_wc/update_editor.c:1134
#, c-format
-msgid "Failed to add directory '%s': object of the same name as the administrative directory"
-msgstr "Kunde inte lägga till katalogen \"%s\": objektet har samma namn som administrationskatalogen"
+msgid "'%s' is not valid as filename in directory '%s'"
+msgstr "\"%s\" är inte giltig som filnamn i katalogen \"%s\""
-#: ../libsvn_wc/update_editor.c:2313
-#, fuzzy, c-format
-msgid "Failed to add directory '%s': a separate working copy with the same name already exists"
-msgstr "Kunde inte tvingande lägga till katalogen \"%s\": ett versionshanterat objekt med samma namn finns redan"
+#: ../libsvn_wc/update_editor.c:1611
+#, c-format
+msgid "Unexpected attempt to add a node at path '%s'"
+msgstr "Oväntat försök att lägga till en nod vid sökvägen \"%s\""
-#: ../libsvn_wc/update_editor.c:2322
-#, fuzzy, c-format
-msgid "Switched directory '%s' does not match expected URL '%s'"
-msgstr "UUID:n på källarkivet (%s) matchar inte den förväntade UUID:n (%s)"
+#: ../libsvn_wc/update_editor.c:1622
+#, c-format
+msgid "Unexpected attempt to edit, delete, or replace a node at path '%s'"
+msgstr "Oväntat försök att ändra, radera eller ersätta en nod vid sökvägen \"%s\""
-#: ../libsvn_wc/update_editor.c:2348
+#: ../libsvn_wc/update_editor.c:2036
#, c-format
-msgid "Failed to add directory '%s': a non-directory object of the same name already exists"
-msgstr "Kunde inte lägga till katalogen \"%s\": ett objekt med samma namn, som inte är en katalog, finns redan"
+msgid "Failed to add directory '%s': object of the same name as the administrative directory"
+msgstr "Kunde inte lägga till katalogen \"%s\": objektet har samma namn som förvaltningskatalogen"
-#: ../libsvn_wc/update_editor.c:2811
+#: ../libsvn_wc/update_editor.c:2694
msgid "Couldn't do property merge"
msgstr "Kunde inte slå ihop egenskaper"
-#: ../libsvn_wc/update_editor.c:2990
+#: ../libsvn_wc/update_editor.c:3050
#, c-format
msgid "Failed to mark '%s' absent: item of the same name is already scheduled for addition"
-msgstr "Kunde inte markera \"%s\" som saknad: ett objekt med det namnet är redan schemalagd att läggas till"
+msgstr "Kunde inte markera \"%s\" som saknad: ett objekt med det namnet är redan schemalagt att läggas till"
-#: ../libsvn_wc/update_editor.c:3081
-#, fuzzy, c-format
+#: ../libsvn_wc/update_editor.c:3138
+#, c-format
msgid "Failed to add file '%s': object of the same name as the administrative directory"
-msgstr "Kunde inte lägga till katalogen \"%s\": objektet har samma namn som administrationskatalogen"
+msgstr "Misslyckades att lägga till filen \"%s\": objektet har samma namn som förvaltningskatalogen"
-#: ../libsvn_wc/update_editor.c:3208
-#, fuzzy, c-format
-msgid "Switched file '%s' does not match expected URL '%s'"
-msgstr "URL:en \"%s\" matchar inte den existerande URL:en \"%s\" i \"%s\""
-
-#: ../libsvn_wc/update_editor.c:3469
-#, fuzzy, c-format
+#: ../libsvn_wc/update_editor.c:3660
+#, c-format
msgid ""
"Checksum mismatch for '%s':\n"
" expected: %s\n"
" recorded: %s\n"
msgstr ""
-"Felaktig kontrollsumma på representationen \"%s\":\n"
-" väntade: %s\n"
-" fick: %s\n"
+"Felaktig kontrollsumma för \"%s\":\n"
+" väntad: %s\n"
+" lagrad: %s\n"
-#: ../libsvn_wc/update_editor.c:4911
+#: ../libsvn_wc/update_editor.c:5219
#, c-format
-msgid "Unrecognized node kind: '%s'"
-msgstr "Okänd nodtyp: \"%s\""
-
-#: ../libsvn_wc/update_editor.c:5582
-#, fuzzy, c-format
msgid "Node '%s' exists."
-msgstr "Filen \"%s\" finns redan"
+msgstr "Noden \"%s\" finns redan."
-#: ../libsvn_wc/update_editor.c:5637
+#: ../libsvn_wc/update_editor.c:5279
#, c-format
msgid "Copyfrom-url '%s' has different repository root than '%s'"
-msgstr "Käll-RUL:en \"%s\" har annan arkivrot än \"%s\""
+msgstr "URL:en för kopieringskällan till \"%s\" har annan arkivrot än \"%s\""
+
+#: ../libsvn_wc/update_editor.c:5477
+#, c-format
+msgid "'%s' is not an unmodified copied directory"
+msgstr "\"%s\" är inte en oförändrad kopierad katalog"
+
+#: ../libsvn_wc/update_editor.c:5488
+#, c-format
+msgid "Copyfrom '%s' doesn't match original location of '%s'"
+msgstr "Kopieringskällan \"%s\" motsvarar inte den ursprungliga platsen \"%s\""
-#: ../libsvn_wc/upgrade.c:254
+#: ../libsvn_wc/upgrade.c:255
#, c-format
msgid "Missing end of line in wcprops file for '%s'"
-msgstr "Radslut saknas i wcprops-filen för \"%s\""
+msgstr "Radslut saknas i \"wcprops\"-filen för \"%s\""
-#: ../libsvn_wc/upgrade.c:601
+#: ../libsvn_wc/upgrade.c:631
#, c-format
msgid "Working copy '%s' can't be upgraded because the repository root is not available and can't be retrieved"
-msgstr ""
+msgstr "Arbetskopian \"%s\" kan inte uppgraderas eftersom arkivroten inte finns och inte kan hämtas"
-#: ../libsvn_wc/upgrade.c:608
+#: ../libsvn_wc/upgrade.c:638
#, c-format
msgid "Working copy '%s' can't be upgraded because the repository uuid is not available and can't be retrieved"
-msgstr ""
+msgstr "Arbetskopian \"%s\" kan inte uppgraderas eftersom arkivets UUID inte finns och inte kan hämtas"
-#: ../libsvn_wc/upgrade.c:615
+#: ../libsvn_wc/upgrade.c:645
#, c-format
msgid "Working copy '%s' can't be upgraded because it doesn't have a url"
-msgstr ""
+msgstr "Arbetskopian \"%s\" kan inte uppgraderas eftersom den saknar URL"
-#: ../libsvn_wc/upgrade.c:1127
-msgid "Cannot upgrade with existing logs; please run 'svn cleanup' with Subversion 1.6"
-msgstr ""
+#: ../libsvn_wc/upgrade.c:690
+msgid "Error parsing tree conflict skel"
+msgstr "Fel vid tolkning av trädkonfliktskelett"
-#: ../libsvn_wc/upgrade.c:1355
+#: ../libsvn_wc/upgrade.c:1173
#, c-format
-msgid "The working copy '%s' is at format 18; use 'tools/dev/wc-ng/bump-to-19.py' to upgrade it"
-msgstr ""
+msgid "The working copy at '%s' is format 22 with WORKING nodes; use a format 22 client to diff/revert before using this client"
+msgstr "Arbetskopian vid \"%s\" är på format 22 med \"WORKING\"-noder; använd en klient med format 22 för att återställa eller visa skillnader innan denna klient används"
+
+#: ../libsvn_wc/upgrade.c:1217
+#, c-format
+msgid "The working copy at '%s' is format 26 with conflicts; use a format 26 client to resolve before using this client"
+msgstr "Arbetskopian vid \"%s\" är på format 26 med konflikter; använd en klient med format 22 för att lösa dem innan denna klient används"
+
+#: ../libsvn_wc/upgrade.c:1723
+msgid "Cannot upgrade with existing logs; run a cleanup operation on this working copy using a client version which is compatible with this working copy's format (such as the version you are upgrading from), then retry the upgrade with the current version"
+msgstr "Kan inte uppgradera med befintliga loggar; kör en städning (\"svn cleanup\") på denna arbetskopia med en klient kompatibel med denna arbetskopias format (använd till exempel uppgraderingens ursprungliga version), och försök sedan igen att uppgradera med aktuell version"
-#: ../libsvn_wc/upgrade.c:1545
-#, fuzzy, c-format
-msgid "Cannot upgrade '%s' as it is not a pre-1.7 working copy root"
-msgstr "Väntade inte att \"%s\" skulle vara en rot till en arbetskopia"
+#: ../libsvn_wc/upgrade.c:1792
+msgid "This working copy is corrupt and cannot be upgraded. Please check out a new working copy."
+msgstr "Denna arbetskopia är trasig och kan inte uppgraderas: Hämta en ny arbetskopia."
-#: ../libsvn_wc/util.c:58
+#: ../libsvn_wc/upgrade.c:1837
+msgid "(unreleased development version)"
+msgstr "(ej utgiven utvecklingsversion)"
+
+#: ../libsvn_wc/upgrade.c:1853
#, c-format
-msgid "'%s' is not a directory"
-msgstr "\"%s\" är ingen katalog"
+msgid "Working copy '%s' is too old (format %d, created by Subversion %s)"
+msgstr "Arbetskopian \"%s\" är för gammal (format %d, skapad av Subversion %s)"
+
+#: ../libsvn_wc/upgrade.c:1863
+#, c-format
+msgid "Working copy '%s' is an old development version (format %d); to upgrade it, use a format 18 client, then use 'tools/dev/wc-ng/bump-to-19.py', then use the current client"
+msgstr "Arbetskopian \"%s\" är en gammal utvecklingsversion (format %d); för att uppgradera, använd en klient med format 18, och använd sedan \"tools/dev/wc-ng/bump-to-19.py\", och därefter denna klient"
+
+#: ../libsvn_wc/upgrade.c:2088
+#, c-format
+msgid "Can't upgrade '%s' as it is not a working copy"
+msgstr "Kan inte uppgradera \"%s\" eftersom det inte är en arbetskopia"
+
+#: ../libsvn_wc/upgrade.c:2137
+#, c-format
+msgid "Can't upgrade '%s' as it is not a working copy root, the root is '%s'"
+msgstr "Kan inte uppgradera \"%s\" eftersom det inte är roten till en arbetskopia - roten är \"%s\""
-#: ../libsvn_wc/wc_db.c:511
+#: ../libsvn_wc/wc_db.c:452
#, c-format
msgid "No REPOSITORY table entry for id '%ld'"
-msgstr ""
+msgstr "Ingen \"REPOSITORY\"-tabellpost för ID \"%ld\""
-#: ../libsvn_wc/wc_db.c:1456 ../libsvn_wc/wc_db.c:1502
-#, fuzzy, c-format
-msgid "The node '%s' is not in a workingcopy."
-msgstr "\"%s\" är ingen arbetskopia"
+#: ../libsvn_wc/wc_db.c:718
+#, c-format
+msgid "The file '%s' has no checksum."
+msgstr "Filen \"%s\" saknar kontrollsumma."
-#: ../libsvn_wc/wc_db.c:2019 ../libsvn_wc/wc_db.c:5288
+#: ../libsvn_wc/wc_db.c:2468 ../libsvn_wc/wc_db.c:2849
+#: ../libsvn_wc/wc_db.c:8890
#, c-format
msgid "The node '%s' has a corrupt checksum value."
-msgstr ""
+msgstr "Noden \"%s\" har en trasig kontrollsumma."
-#: ../libsvn_wc/wc_db.c:2286
-#, fuzzy, c-format
-msgid "Pristine text not found"
-msgstr "Egenskapen finns ej"
+#: ../libsvn_wc/wc_db.c:2653
+#, c-format
+msgid "The node '%s' has a BASE status that has no properties."
+msgstr "Noden \"%s\" har ett \"BASE\"-tillstånd utan egenskaper."
-#: ../libsvn_wc/wc_db.c:2473
+#: ../libsvn_wc/wc_db.c:3479
#, c-format
-msgid "The pristine text with checksum '%s' was not found"
-msgstr ""
+msgid "The node '%s' is not an external."
+msgstr "Noden \"%s\" är inte extern."
-#: ../libsvn_wc/wc_db.c:2513
+#: ../libsvn_wc/wc_db.c:3886
#, c-format
-msgid "The pristine text with MD5 checksum '%s' was not found"
-msgstr ""
+msgid "Expected node '%s' to be deleted."
+msgstr "Noden \"%s\" väntades vara raderad."
-#: ../libsvn_wc/wc_db.c:2705
+#: ../libsvn_wc/wc_db.c:6367 ../libsvn_wc/wc_db.c:6445
#, c-format
-msgid "The pristine text with checksum '%s' was found in the DB or on disk but not both"
-msgstr ""
+msgid "Can't revert '%s' without reverting children"
+msgstr "Kan inte återställa \"%s\" utan att återställa dess barn"
-#: ../libsvn_wc/wc_db.c:3036 ../libsvn_wc/wc_db.c:3258
+#: ../libsvn_wc/wc_db.c:6542
#, c-format
-msgid "Cannot copy '%s' excluded by server"
-msgstr ""
+msgid "Can't revert '%s' without reverting parent"
+msgstr "Kan inte återställa \"%s\" utan att återställa dess förälder"
-#: ../libsvn_wc/wc_db.c:3042
-#, fuzzy, c-format
-msgid "Cannot handle status of '%s'"
-msgstr "Kan inte hitta post för \"%s\""
+#: ../libsvn_wc/wc_db.c:6659
+#, c-format
+msgid "Unsupported depth for revert of '%s'"
+msgstr "Djupet för återställningen av \"%s\" stöds inte"
+
+#: ../libsvn_wc/wc_db.c:7502
+#, c-format
+msgid "Cannot delete '%s' as '%s' is excluded by server"
+msgstr "Kan inte ta bort \"%s\" eftersom servern har uteslutit \"%s\""
+
+#: ../libsvn_wc/wc_db.c:7513
+#, c-format
+msgid "Cannot delete '%s' as it is excluded by server"
+msgstr "Kan inte ta bort \"%s\" eftersom servern har uteslutit den"
+
+#: ../libsvn_wc/wc_db.c:7520
+#, c-format
+msgid "Cannot delete '%s' as it is excluded"
+msgstr "Kan inte ta bort \"%s\" eftersom den är utesluten"
-#: ../libsvn_wc/wc_db.c:3885
-#, fuzzy, c-format
-msgid "Can't store properties for '%s' in '%s'."
-msgstr "Kan inte skriva egenskapstabell för \"%s\""
+#: ../libsvn_wc/wc_db.c:7934
+#, c-format
+msgid "Cannot move '%s' to '%s' because they are not in the same working copy"
+msgstr "Kan inte flytta \"%s\" till \"%s\" eftersom de inte är i samma arbetskopia"
-#: ../libsvn_wc/wc_db.c:5392
-#, fuzzy, c-format
+#: ../libsvn_wc/wc_db.c:8292
+#, c-format
msgid "Corrupt data for '%s'"
-msgstr "Kan inte hitta post för \"%s\""
+msgstr "Trasig data för \"%s\""
-#: ../libsvn_wc/wc_db.c:6603
+#: ../libsvn_wc/wc_db.c:8596
#, c-format
-msgid "Could not find node '%s' for recording file information."
-msgstr ""
+msgid "The node '%s' comes from unexpected repository '%s', expected '%s'; if this node is a file external using the correct URL in the external definition can fix the problem, see issue #4087"
+msgstr "Noden \"%s\" tillhör arkiv \"%s\" istället för \"%s\"; om denna nod är en extern fil så kan problemet lösas genom att använda rätt URL i den externa definitionen, se felrapport nr 4087"
-#: ../libsvn_wc/wc_db.c:6863 ../libsvn_wc/wc_db.c:6965
-#, fuzzy, c-format
+#: ../libsvn_wc/wc_db.c:9015
+#, c-format
+msgid "The node '%s' is not in working copy '%s'"
+msgstr "Noden \"%s\" är inte i arbetskopian \"%s\""
+
+#: ../libsvn_wc/wc_db.c:9052
+#, c-format
+msgid "The node '%s' is not installable"
+msgstr "Noden \"%s\" kan inte installeras"
+
+#: ../libsvn_wc/wc_db.c:9481 ../libsvn_wc/wc_db.c:9740
+#, c-format
+msgid "The node '%s' has a status that has no properties."
+msgstr "Noden \"%s\" har ett tillstånd utan egenskaper."
+
+#: ../libsvn_wc/wc_db.c:11580
+#, c-format
msgid "Expected node '%s' to be added."
-msgstr "\"%s\" borde vara en katalog, men den är en fil"
+msgstr "Noden \"%s\" förväntades ha lagts till."
-#: ../libsvn_wc/wc_db.c:7280
+#: ../libsvn_wc/wc_db.c:11926
#, c-format
-msgid "Expected node '%s' to be deleted."
-msgstr ""
+msgid "Path '%s' was not moved here"
+msgstr "Sökvägen \"%s\" har inte flyttats hit"
+
+#: ../libsvn_wc/wc_db.c:11995
+#, c-format
+msgid "The base node '%s' was not found."
+msgstr "Basnoden \"%s\" hittades inte."
-#: ../libsvn_wc/wc_db.c:7554
+#: ../libsvn_wc/wc_db.c:12427
#, c-format
msgid "The properties of '%s' are in an indeterminate state and cannot be upgraded. See issue #2530."
-msgstr ""
+msgstr "Egenskaperna för \"%s\" är i ett obestämt tillstånd och kan inte uppgraderas. Se felrapport nr 2530."
+
+#: ../libsvn_wc/wc_db.c:12439
+#, c-format
+msgid "Insufficient NODES rows for '%s'"
+msgstr "Inte tillräckligt med \"NODES\"-rader för \"%s\""
-#: ../libsvn_wc/wc_db.c:7643
-#, fuzzy, c-format
+#: ../libsvn_wc/wc_db.c:12586
+#, c-format
msgid "Repository '%s' not found in the database"
-msgstr "Sökvägen \"%s\" finns inte i den senaste revisionen"
+msgstr "Arkivet \"%s\" finns inte i databasen"
-#: ../libsvn_wc/wc_db.c:8505 ../libsvn_wc/wc_db.c:8552
-#, fuzzy, c-format
+#: ../libsvn_wc/wc_db.c:13573 ../libsvn_wc/wc_db.c:13621
+#, c-format
msgid "'%s' is already locked."
-msgstr "Sökvägen är redan låst"
+msgstr "\"%s\" är redan låst."
-#: ../libsvn_wc/wc_db.c:8509 ../libsvn_wc/wc_db.c:8560
-#, fuzzy, c-format
+#: ../libsvn_wc/wc_db.c:13578 ../libsvn_wc/wc_db.c:13629
+#, c-format
msgid "Working copy '%s' locked."
-msgstr "Arbetskopian \"%s\" är låst"
+msgstr "Arbetskopian \"%s\" är låst."
-#: ../libsvn_wc/wc_db.c:8639
-#, fuzzy, c-format
+#: ../libsvn_wc/wc_db.c:13701
+#, c-format
msgid "'%s' is already locked via '%s'."
-msgstr "Sökvägen är redan låst"
+msgstr "\"%s\" är redan låst genom \"%s\"."
-#: ../libsvn_wc/wc_db.c:8753
-#, fuzzy, c-format
+#: ../libsvn_wc/wc_db.c:13875
+#, c-format
msgid "Working copy not locked at '%s'."
-msgstr "Arbetskopian \"%s\" är inte låst"
+msgstr "Arbetskopian inte låst vid \"%s\"."
-#: ../libsvn_wc/wc_db.c:9370
-#, fuzzy, c-format
-msgid "'%s' has no BASE_NODE"
-msgstr "\"%s\" saknar URL"
+#: ../libsvn_wc/wc_db.c:14258
+#, c-format
+msgid "Modification of '%s' already exists"
+msgstr "Ändringen av \"%s\" finns redan"
+
+#. If EXPRESSION is false, cause the caller to return an SVN_ERR_WC_CORRUPT
+#. * error, showing EXPRESSION and the caller's LOCAL_RELPATH in the message.
+#: ../libsvn_wc/wc_db.c:14900
+#, c-format
+msgid "database inconsistency at local_relpath='%s' verifying expression '%s'"
+msgstr "inkonsistens i databasen vid \"local_relpath\" \"%s\" när uttrycket \"%s\" kontrollerades"
+
+#: ../libsvn_wc/wc_db.c:15024
+#, c-format
+msgid "Can't upgrade '%s' as it is not a working copy root"
+msgstr "Kan inte uppgradera \"%s\" eftersom den inte är rot till en arbetskopia"
+
+#: ../libsvn_wc/wc_db.c:15030
+#, c-format
+msgid "Working copy '%s' is too old and must be upgraded to at least format %d, as created by Subversion %s"
+msgstr "Arbetskopian \"%s\" är för gammal och måste uppgraderas till åtminstone format %d, vilket är vad Subversion %s använder"
+
+#: ../libsvn_wc/wc_db.c:15048
+msgid "Working copy upgrade failed"
+msgstr "Uppgradering av arbetskopian misslyckades"
+
+#: ../libsvn_wc/wc_db_pristine.c:125 ../libsvn_wc/wc_db_pristine.c:457
+#, c-format
+msgid "The pristine text with checksum '%s' was not found"
+msgstr "Den orörda texten med kontrollsumma \"%s\" hittades inte"
+
+#: ../libsvn_wc/wc_db_pristine.c:191
+#, c-format
+msgid "Pristine text '%s' not present"
+msgstr "Orörd text \"%s\" finns inte"
+
+#: ../libsvn_wc/wc_db_pristine.c:224
+#, c-format
+msgid "Can't read '%s' from pristine store because no checksum supplied"
+msgstr "Kan inte läsa \"%s\" från lagringen av orörd data eftersom ingen kontrollsumma gavs"
+
+#: ../libsvn_wc/wc_db_pristine.c:328
+#, c-format
+msgid "New pristine text '%s' has different size: %ld versus %ld"
+msgstr "Ny orörd text \"%s\" har en annan storlek: %ld gentemot %ld"
+
+#: ../libsvn_wc/wc_db_pristine.c:496
+#, c-format
+msgid "The pristine text with MD5 checksum '%s' was not found"
+msgstr "Den orörda texten med MD5-kontrollsumma \"%s\" hittades inte"
+
+#: ../libsvn_wc/wc_db_update_move.c:282 ../libsvn_wc/wc_db_update_move.c:306
+#, c-format
+msgid "'%s' already in conflict"
+msgstr "\"%s\" är redan i konflikt"
+
+#: ../libsvn_wc/wc_db_update_move.c:1382
+#, c-format
+msgid "'%s' is not in conflict"
+msgstr "\"%s\" är inte i konflikt"
+
+#: ../libsvn_wc/wc_db_update_move.c:1395
+#, c-format
+msgid "'%s' is not a tree-conflict victim"
+msgstr "\"%s\" är inte offer för trädkonflikt"
+
+#: ../libsvn_wc/wc_db_update_move.c:1754
+#, c-format
+msgid "Cannot auto-resolve tree-conflict on '%s'"
+msgstr "Kan inte lösa trädkonflikten på \"%s\" automatiskt"
+
+#: ../libsvn_wc/wc_db_update_move.c:1817
+#, c-format
+msgid "Cannot apply update because move source %s' is a mixed-revision working copy"
+msgstr "Kan inte göra uppdateringen eftersom flyttkällan \"%s\" är en arbetskopia med blandad revision"
+
+#: ../libsvn_wc/wc_db_update_move.c:1828
+#, c-format
+msgid "Cannot apply update because move source '%s' is a switched subtree"
+msgstr "Kan inte göra uppdateringen eftersom flyttkällan \"%s\" är ett växlat delträd"
+
+#: ../libsvn_wc/wc_db_update_move.c:1879
+#, c-format
+msgid "The node '%s' has not been moved away"
+msgstr "Noden \"%s\" har inte flyttats bort"
+
+#: ../libsvn_wc/wc_db_update_move.c:1908
+#, c-format
+msgid "'%s' is not deleted"
+msgstr "\"%s\" är inte raderad"
+
+#: ../libsvn_wc/wc_db_util.c:69
+#, c-format
+msgid "Missing a row in WCROOT."
+msgstr "En rad i \"WCROOT\" saknas."
+
+#: ../libsvn_wc/wc_db_util.c:135
+#, c-format
+msgid "Working copy database '%s' not found"
+msgstr "Arbetskopians databas \"%s\" hittades inte"
-#: ../libsvn_wc/wc_db_pdh.c:234
+#: ../libsvn_wc/wc_db_wcroot.c:276
#, c-format
msgid "Working copy format of '%s' is too old (%d); please check out your working copy again"
msgstr "Arbetskopian \"%s\" har för gammalt format (%d); checka ut din arbetskopia igen"
-#: ../libsvn_wc/wc_db_pdh.c:244
+#: ../libsvn_wc/wc_db_wcroot.c:286
#, c-format
msgid ""
"This client is too old to work with the working copy at\n"
@@ -7106,312 +8061,826 @@ msgid ""
"You need to get a newer Subversion client. For more details, see\n"
" http://subversion.apache.org/faq.html#working-copy-format-change\n"
msgstr ""
+"Denna klient är för gammal för att kunna användas med arbetskopian\n"
+"\"%s\" (format %d).\n"
+"En nyare Subversionklient behövs. För mer detaljer, se\n"
+" http://subversion.apache.org/faq.html#working-copy-format-change\n"
-#: ../libsvn_wc/wc_db_pdh.c:265
+#: ../libsvn_wc/wc_db_wcroot.c:307
msgid "Cleanup with an older 1.7 client before upgrading with this client"
+msgstr "Kör (\"svn cleanup\") med en äldre version av Subversion 1.7 före uppgradering med denna klient"
+
+#: ../libsvn_wc/wc_db_wcroot.c:318
+#, c-format
+msgid ""
+"The working copy at '%s'\n"
+"is too old (format %d) to work with client version '%s' (expects format %d). You need to upgrade the working copy first.\n"
msgstr ""
+"Arbetskopian vid \"%s\"\n"
+"är för gammal (format %d) för att kunna användas med en klient som har version \"%s\" (format %d förväntas). Arbetskopian måste uppgraderas först.\n"
-#: ../libsvn_wc/wc_db_pdh.c:526
-#, fuzzy, c-format
+#: ../libsvn_wc/wc_db_wcroot.c:396
+#, c-format
+msgid "The symlink at '%s' points nowhere"
+msgstr "Den symboliska länken vid \"%s\" pekar ingenstans"
+
+#: ../libsvn_wc/wc_db_wcroot.c:665
+#, c-format
msgid "Missing a row in WCROOT for '%s'."
-msgstr "Attributet \"revision\" saknas för \"%s\""
+msgstr "En rad i \"WCROOT\" saknas för \"%s\"."
+
+#: ../libsvn_wc/wc_db_wcroot.c:716
+#, c-format
+msgid "The working copy at '%s' is corrupt."
+msgstr "Förstörd arbetskopia \"%s\"."
+
+#: ../libsvn_wc/wc_db_wcroot.c:732
+#, c-format
+msgid "The working copy database at '%s' is missing."
+msgstr "Arbetskopians databas \"%s\" saknas."
-#: ../libsvn_wc/wc_db_pdh.c:668
-#, fuzzy, c-format
+#: ../libsvn_wc/wc_db_wcroot.c:741
+#, c-format
+msgid "The working copy database at '%s' is corrupt."
+msgstr "Arbetskopians databas \"%s\" är trasig."
+
+#: ../libsvn_wc/wc_db_wcroot.c:899
+#, c-format
msgid "'%s' is not a working copy root"
-msgstr "\"%s\" är ingen arbetskopia"
+msgstr "\"%s\" är inte rot till en arbetskopia"
-#: ../libsvn_wc/wc_db_util.c:68
+#: ../libsvn_wc/workqueue.c:518
#, c-format
-msgid "Missing a row in WCROOT."
-msgstr ""
+msgid "Can't install '%s' from pristine store, because no checksum is recorded for this file"
+msgstr "Kan inte installera \"%s\" från lagringen av orörd data eftersom ingen kontrollsumma har registrerats för denna fil"
+
+#: ../libsvn_wc/workqueue.c:1499
+#, c-format
+msgid "Unrecognized work item in the queue"
+msgstr "Okänt element i arbetskön"
-#: ../libsvn_wc/workqueue.c:338
+#: ../libsvn_wc/workqueue.c:1579
#, c-format
-msgid "Error restoring text for '%s'"
-msgstr "Fel vid återställande av texten för \"%s\""
+msgid "Failed to run the WC DB work queue associated with '%s', work item %d %s"
+msgstr "Misslyckades med att behandla arbetskopians databaskö kopplad till \"%s\", element %d %s"
-#: ../libsvn_wc/workqueue.c:1294
-#, fuzzy, c-format
-msgid "Error processing post-commit work for '%s'"
-msgstr "Fel när kommandot \"%s\" i \"%s\" utfördes"
+#: ../svn/add-cmd.c:101
+msgid "Could not add all targets because some targets don't exist"
+msgstr "Kunde inte lätta till alla mål eftersom några inte finns"
-#: ../libsvn_wc/workqueue.c:2213
-#, fuzzy, c-format
-msgid "Unrecognized work item in the queue associated with '%s'"
-msgstr "Okänd revisionstyp begärd för \"%s\""
+#: ../svn/add-cmd.c:105
+msgid "Could not add all targets because some targets are already versioned"
+msgstr "Kunde inte lägga till alla mål eftersom några mål redan är versionshanterade"
-#: ../svn/blame-cmd.c:302 ../svn/list-cmd.c:232
+#: ../svn/blame-cmd.c:303 ../svn/list-cmd.c:300
msgid "'verbose' option invalid in XML mode"
msgstr "Flaggan \"verbose\" är inte tillåten i XML-läge"
-#: ../svn/blame-cmd.c:314 ../svn/info-cmd.c:531 ../svn/list-cmd.c:244
-#: ../svn/status-cmd.c:281
+#: ../svn/blame-cmd.c:315 ../svn/info-cmd.c:613 ../svn/list-cmd.c:312
+#: ../svn/status-cmd.c:308
msgid "'incremental' option only valid in XML mode"
msgstr "Flaggan \"incremental\" är endast tillåten i XML-läge"
-#: ../svn/blame-cmd.c:377
+#: ../svn/blame-cmd.c:378
#, c-format
-msgid "Skipping binary file: '%s'\n"
-msgstr "Hoppar över binär fil: \"%s\"\n"
+msgid "Skipping binary file (use --force to treat as text): '%s'\n"
+msgstr "Hoppar över binär fil (--force ger behandling som text): \"%s\"\n"
-#: ../svn/changelist-cmd.c:60 ../svn/main.c:1706
-#, fuzzy
-msgid "Changelist names must not be empty"
-msgstr "Ändringslista: %s\n"
+#: ../svn/blame-cmd.c:415
+msgid "Could not perform blame on all targets because some targets don't exist"
+msgstr "Kunde inte beräkna skuld för alla mål eftersom några inte finns"
+
+#: ../svn/cat-cmd.c:102
+msgid "Could not cat all targets because some targets don't exist"
+msgstr "Kunde inte mata ut alla mål eftersom några inte finns"
+
+#: ../svn/cat-cmd.c:106
+msgid "Could not cat all targets because some targets are not versioned"
+msgstr "Kunde inte mata ut alla mål eftersom några inte är versionshanterade"
-#: ../svn/checkout-cmd.c:135 ../svn/switch-cmd.c:145
+#: ../svn/cat-cmd.c:110
+msgid "Could not cat all targets because some targets are directories"
+msgstr "Kunde inte mata ut alla mål eftersom några är kataloger"
+
+#: ../svn/changelist-cmd.c:135
+msgid "Could not set changelists on all targets because some targets don't exist"
+msgstr "Kunde inte sätta ändringslista för alla mål eftersom några mål inte finns"
+
+#: ../svn/changelist-cmd.c:140
+msgid "Could not set changelists on all targets because some targets are not versioned"
+msgstr "Kunde inte sätta ändringslista för alla mål eftersom några mål inte är versionshanterade"
+
+#: ../svn/checkout-cmd.c:133 ../svn/switch-cmd.c:138
#, c-format
msgid "'%s' does not appear to be a URL"
msgstr "\"%s\" verkar inte vara en URL"
-#: ../svn/commit-cmd.c:107
+#: ../svn/cl-conflicts.c:80
+msgid "local file edit"
+msgstr "lokal fil ändrad"
+
+#: ../svn/cl-conflicts.c:82
+msgid "local file obstruction"
+msgstr "lokal fil blockerad"
+
+#: ../svn/cl-conflicts.c:84
+msgid "local file delete"
+msgstr "lokal fil raderad"
+
+#: ../svn/cl-conflicts.c:86
+msgid "local file missing"
+msgstr "lokal fil saknas"
+
+#: ../svn/cl-conflicts.c:88
+msgid "local file unversioned"
+msgstr "lokal fil ej versionshanterad"
+
+#: ../svn/cl-conflicts.c:90
+msgid "local file add"
+msgstr "lokal fil tillagd"
+
+#: ../svn/cl-conflicts.c:92
+msgid "local file replace"
+msgstr "lokal fil ersatt"
+
+#: ../svn/cl-conflicts.c:94
+msgid "local file moved away"
+msgstr "lokal fil bortflyttad"
+
+#: ../svn/cl-conflicts.c:96
+msgid "local file moved here"
+msgstr "lokal fil flyttad hit"
+
+#: ../svn/cl-conflicts.c:103
+msgid "local dir edit"
+msgstr "lokal katalog ändrad"
+
+#: ../svn/cl-conflicts.c:105
+msgid "local dir obstruction"
+msgstr "lokal katalog blockerad"
+
+#: ../svn/cl-conflicts.c:107
+msgid "local dir delete"
+msgstr "lokal katalog raderad"
+
+#: ../svn/cl-conflicts.c:109
+msgid "local dir missing"
+msgstr "lokal katalog saknas"
+
+#: ../svn/cl-conflicts.c:111
+msgid "local dir unversioned"
+msgstr "lokal katalog ej versionshanterad"
+
+#: ../svn/cl-conflicts.c:113
+msgid "local dir add"
+msgstr "lokal katalog tillagd"
+
+#: ../svn/cl-conflicts.c:115
+msgid "local dir replace"
+msgstr "lokal katalog ersatt"
+
+#: ../svn/cl-conflicts.c:117
+msgid "local dir moved away"
+msgstr "lokal katalog bortflyttad"
+
+#: ../svn/cl-conflicts.c:119
+msgid "local dir moved here"
+msgstr "lokal katalog flyttad hit"
+
+#: ../svn/cl-conflicts.c:141
+msgid "incoming file edit"
+msgstr "inkommande fil ändrad"
+
+#: ../svn/cl-conflicts.c:143
+msgid "incoming file add"
+msgstr "inkommande fil tillagd"
+
+#: ../svn/cl-conflicts.c:145
+msgid "incoming file delete"
+msgstr "inkommande fil raderad"
+
+#: ../svn/cl-conflicts.c:147
+msgid "incoming file replace"
+msgstr "inkommande fil ersatt"
+
+#: ../svn/cl-conflicts.c:154
+msgid "incoming dir edit"
+msgstr "inkommande katalog ändrad"
+
+#: ../svn/cl-conflicts.c:156
+msgid "incoming dir add"
+msgstr "inkommande katalog tillagd"
+
+#: ../svn/cl-conflicts.c:158
+msgid "incoming dir delete"
+msgstr "inkommande katalog raderad"
+
+#: ../svn/cl-conflicts.c:160
+msgid "incoming dir replace"
+msgstr "inkommande katalog ersatt"
+
+#: ../svn/cl-conflicts.c:178
+msgid "upon update"
+msgstr "vid uppdatering"
+
+#: ../svn/cl-conflicts.c:179
+msgid "upon switch"
+msgstr "vid växling"
+
+#: ../svn/cl-conflicts.c:180
+msgid "upon merge"
+msgstr "vid sammanslagning"
+
+#: ../svn/cl-conflicts.c:181
+msgid "upon none"
+msgstr "vid ingenting"
+
+#: ../svn/cl-conflicts.c:200
+msgid "local edit"
+msgstr "lokal ändring"
+
+#: ../svn/cl-conflicts.c:203
+msgid "local add"
+msgstr "lokalt tillägg"
+
+#: ../svn/cl-conflicts.c:206
+msgid "local delete"
+msgstr "lokal radering"
+
+#: ../svn/cl-conflicts.c:209
+msgid "local obstruction"
+msgstr "lokal blockering"
+
+#: ../svn/cl-conflicts.c:212
#, c-format
-msgid "svn: warning: The depth of this commit is '%s', but copied directories will regardless be committed with depth '%s'. You must remove unwanted children of those directories in a separate commit.\n"
-msgstr ""
+msgid "local %s"
+msgstr "lokal %s"
-#: ../svn/conflict-callbacks.c:158
-msgid "||||||| ORIGINAL"
-msgstr ""
+#: ../svn/cl-conflicts.c:220
+msgid "incoming edit"
+msgstr "inkommande ändring"
-#: ../svn/conflict-callbacks.c:159
-msgid "<<<<<<< MINE (select with 'mc')"
-msgstr ""
+#: ../svn/cl-conflicts.c:223
+msgid "incoming add"
+msgstr "inkommande tillägg"
-#: ../svn/conflict-callbacks.c:160
-msgid ">>>>>>> THEIRS (select with 'tc')"
-msgstr ""
+#: ../svn/cl-conflicts.c:226
+msgid "incoming delete"
+msgstr "inkommande radering"
-#: ../svn/conflict-callbacks.c:192
-#, fuzzy
-msgid "No editor found."
-msgstr "Revisionen %ld finns inte"
+#: ../svn/cl-conflicts.c:229
+#, c-format
+msgid "incoming %s"
+msgstr "inkommande %s"
-#: ../svn/conflict-callbacks.c:199
-#, fuzzy
-msgid "Error running editor."
-msgstr "Fel vid körning av post-commit-hookskript"
+#: ../svn/cl-conflicts.c:235 ../svn/cl-conflicts.c:277
+#, c-format
+msgid "%s, %s %s"
+msgstr "%s, %s %s"
-#: ../svn/conflict-callbacks.c:209
+#. A catch-all message for very rare or nominally impossible cases.
+#. It will not be pretty, but is closer to an internal error than
+#. an ordinary user-facing string.
+#: ../svn/cl-conflicts.c:285
#, c-format
-msgid ""
-"Invalid option; there's no merged version to edit.\n"
-"\n"
-msgstr ""
+msgid "local: %s %s incoming: %s %s %s"
+msgstr "lokalt: %s %s inkommande: %s %s %s"
-#: ../svn/conflict-callbacks.c:239
-msgid "No merge tool found.\n"
-msgstr ""
+#: ../svn/cleanup-cmd.c:92
+#, c-format
+msgid "Working copy locked; try running 'svn cleanup' on the root of the working copy ('%s') instead."
+msgstr "Låst arbetskopia; försök istället att köra \"svn cleanup\" på arbetskopians rot (\"%s\")."
-#: ../svn/conflict-callbacks.c:246
-#, fuzzy
-msgid "Error running merge tool."
-msgstr "Fel vid körning av post-commit-hookskript"
+#: ../svn/commit-cmd.c:80
+#, c-format
+msgid "svn: The depth of this commit is '%s', but copies are always performed recursively in the repository.\n"
+msgstr "svn: Djupet för denna arkivering är \"%s\", men kopiering görs alltid rekursivt i arkivet.\n"
-#: ../svn/conflict-callbacks.c:316
-msgid "No editor found; leaving all conflicts."
-msgstr ""
+#: ../svn/commit-cmd.c:116
+msgid "Commit targets must be local paths"
+msgstr "Arkiveringsmål måste vara lokala sökvägar"
-#: ../svn/conflict-callbacks.c:325
-msgid "Error running editor; leaving all conflicts."
-msgstr ""
+#: ../svn/conflict-callbacks.c:155 ../svn/conflict-callbacks.c:172
+msgid "MINE"
+msgstr "MIN"
-#: ../svn/conflict-callbacks.c:361
-msgid "No merge tool found; leaving all conflicts."
-msgstr ""
+#: ../svn/conflict-callbacks.c:160 ../svn/conflict-callbacks.c:170
+msgid "THEIRS"
+msgstr "ANDRAS"
-#: ../svn/conflict-callbacks.c:370
-msgid "Error running merge tool; leaving all conflicts."
-msgstr ""
+#: ../svn/conflict-callbacks.c:163
+msgid "MERGED"
+msgstr "SAMMANSLAGNING"
-#: ../svn/conflict-callbacks.c:414
-#, fuzzy, c-format
-msgid "Conflict discovered in '%s'.\n"
-msgstr "Konfliktegenskapsfil: %s\n"
+#: ../svn/conflict-callbacks.c:220 ../svn/conflict-callbacks.c:276
+msgid "||||||| ORIGINAL"
+msgstr "||||||| ORIGINAL"
-#: ../svn/conflict-callbacks.c:419
-#, fuzzy, c-format
-msgid "Conflict for property '%s' discovered on '%s'.\n"
-msgstr "satte egenskapen \"%s\" på \"%s\"\n"
+#: ../svn/conflict-callbacks.c:221
+msgid "<<<<<<< MINE (select with 'mc')"
+msgstr "<<<<<<< MIN (välj med \"mc\")"
-#: ../svn/conflict-callbacks.c:436
-#, c-format
-msgid "They want to delete the property, you want to change the value to '%s'.\n"
-msgstr ""
+#: ../svn/conflict-callbacks.c:222
+msgid ">>>>>>> THEIRS (select with 'tc')"
+msgstr ">>>>>>> ANDRAS (välj med \"tc\")"
-#: ../svn/conflict-callbacks.c:445
-#, fuzzy, c-format
-msgid "They want to change the property value to '%s', you want to delete the property.\n"
-msgstr ""
-"Försöker ändra egenskapen \"%s\" från \"%s\" till \"%s\",\n"
-"men egenskapen finns inte."
+#: ../svn/conflict-callbacks.c:277
+msgid "<<<<<<< MINE"
+msgstr "<<<<<<< MIN"
-#: ../svn/conflict-callbacks.c:467
-msgid "Select: (p) postpone"
-msgstr ""
+#: ../svn/conflict-callbacks.c:278
+msgid ">>>>>>> THEIRS"
+msgstr ">>>>>>> ANDRAS"
-#: ../svn/conflict-callbacks.c:472
-msgid ", (df) diff-full, (e) edit"
-msgstr ""
+#: ../svn/conflict-callbacks.c:333 ../svn/file-merge.c:503
+msgid "No editor found."
+msgstr "Ingen editor hittades."
-#: ../svn/conflict-callbacks.c:476 ../svn/conflict-callbacks.c:489
-msgid ", (r) resolved"
-msgstr ""
+#: ../svn/conflict-callbacks.c:342 ../svn/file-merge.c:515
+msgid "Error running editor."
+msgstr "Fel vid körning av editor."
-#: ../svn/conflict-callbacks.c:482
+#: ../svn/conflict-callbacks.c:352
+#, c-format
msgid ""
-",\n"
-" (mc) mine-conflict, (tc) theirs-conflict"
+"Invalid option; there's no merged version to edit.\n"
+"\n"
msgstr ""
+"Felaktig väljare; det finns ingen sammanslagen version att behandla.\n"
+"\n"
-#: ../svn/conflict-callbacks.c:492
-msgid ""
-",\n"
-" (mf) mine-full, (tf) theirs-full"
-msgstr ""
+#: ../svn/conflict-callbacks.c:411
+msgid "No merge tool found, try '(m) merge' instead.\n"
+msgstr "Inget sammanslagningsverktyg hittades; försök istället med \"m (merge)\".\n"
+
+#: ../svn/conflict-callbacks.c:419
+msgid "Error running merge tool, try '(m) merge' instead."
+msgstr "Fel vid körning av sammanslagningsverktyg; försök istället med \"(m) merge\"."
+
+#: ../svn/conflict-callbacks.c:451
+msgid "change merged file in an editor [edit]"
+msgstr "redigera sammanslagen fil i en editor [edit]"
+
+#. Translators: keep long_desc below 70 characters (wrap with a left
+#. margin of 9 spaces if needed); don't translate the words within square
+#. brackets.
+#: ../svn/conflict-callbacks.c:451
+msgid "edit file"
+msgstr "redigera fil"
+
+#: ../svn/conflict-callbacks.c:454
+msgid "show all changes made to merged file"
+msgstr "visa alla ändringar i sammanslagen fil"
+
+#: ../svn/conflict-callbacks.c:454
+msgid "show diff"
+msgstr "visa skillnader"
+
+#: ../svn/conflict-callbacks.c:456
+msgid "accept merged version of file"
+msgstr "godta sammanslagen version av fil"
+
+#: ../svn/conflict-callbacks.c:456 ../svn/conflict-callbacks.c:501
+#: ../svn/conflict-callbacks.c:533
+msgid "mark resolved"
+msgstr "markera som löst"
+
+#: ../svn/conflict-callbacks.c:459 ../svn/conflict-callbacks.c:498
+msgid "display conflict"
+msgstr "visa konflikt"
+
+#: ../svn/conflict-callbacks.c:459
+msgid "show all conflicts (ignoring merged version)"
+msgstr "visa alla konflikter (utom sammanslagen version)"
+
+#: ../svn/conflict-callbacks.c:461
+msgid "accept my version for all conflicts (same) [mine-conflict]"
+msgstr "godta min version för alla konflikter (likaså) [mine-conflict]"
+
+#: ../svn/conflict-callbacks.c:461
+msgid "my side of conflict"
+msgstr "min sida av konflikt"
+
+#: ../svn/conflict-callbacks.c:464
+msgid "accept their version for all conflicts (same) [theirs-conflict]"
+msgstr "godta andras version för alla konflikter (likaså) [theirs-conflict]"
+
+#: ../svn/conflict-callbacks.c:464
+msgid "their side of conflict"
+msgstr "andras sida av konflikt"
+
+#: ../svn/conflict-callbacks.c:469 ../svn/conflict-callbacks.c:492
+msgid "accept my version of entire file (even non-conflicts) [mine-full]"
+msgstr ""
+"godta min version av hela filen (allt, inte bara konflikter)\n"
+" [mine-full]"
+
+#: ../svn/conflict-callbacks.c:469 ../svn/conflict-callbacks.c:492
+#: ../svn/conflict-callbacks.c:515
+msgid "my version"
+msgstr "min version"
+
+#: ../svn/conflict-callbacks.c:472 ../svn/conflict-callbacks.c:495
+msgid "accept their version of entire file (same) [theirs-full]"
+msgstr "godta andras version av hela filen (likaså) [theirs-full]"
+
+#: ../svn/conflict-callbacks.c:472 ../svn/conflict-callbacks.c:495
+#: ../svn/conflict-callbacks.c:518
+msgid "their version"
+msgstr "andras version"
+
+#: ../svn/conflict-callbacks.c:476 ../svn/util.c:774
+msgid "merge"
+msgstr "sammanslagning"
+
+#: ../svn/conflict-callbacks.c:476
+msgid "use internal merge tool to resolve conflict"
+msgstr "använd interna sammanslagningsverktyget för att lösa konflikten"
+
+#: ../svn/conflict-callbacks.c:478
+msgid "launch external tool to resolve conflict [launch]"
+msgstr "använd externt verktyg för att lösa konflikten [launch]"
+
+#: ../svn/conflict-callbacks.c:478
+msgid "launch tool"
+msgstr "kör verktyg"
+
+#: ../svn/conflict-callbacks.c:480 ../svn/conflict-callbacks.c:503
+#: ../svn/conflict-callbacks.c:521
+msgid "mark the conflict to be resolved later [postpone]"
+msgstr "markera konflikter för senare lösning [postpone]"
+
+#: ../svn/conflict-callbacks.c:480 ../svn/conflict-callbacks.c:503
+#: ../svn/conflict-callbacks.c:521 ../svn/conflict-callbacks.c:535
+#: ../svn/conflict-callbacks.c:553 ../svn/conflict-callbacks.c:567
+#: ../svn/conflict-callbacks.c:583 ../svn/conflict-callbacks.c:599
+msgid "postpone"
+msgstr "lös senare"
+
+#: ../svn/conflict-callbacks.c:483 ../svn/conflict-callbacks.c:506
+#: ../svn/conflict-callbacks.c:524 ../svn/conflict-callbacks.c:537
+#: ../svn/conflict-callbacks.c:555 ../svn/conflict-callbacks.c:569
+#: ../svn/conflict-callbacks.c:585 ../svn/conflict-callbacks.c:601
+msgid "postpone all remaining conflicts"
+msgstr "skjut upp lösningen av återstående konflikter"
+
+#: ../svn/conflict-callbacks.c:483 ../svn/conflict-callbacks.c:506
+#: ../svn/conflict-callbacks.c:524 ../svn/conflict-callbacks.c:537
+#: ../svn/conflict-callbacks.c:555 ../svn/conflict-callbacks.c:569
+#: ../svn/conflict-callbacks.c:585 ../svn/conflict-callbacks.c:601
+msgid "quit resolution"
+msgstr "avbryt lösning"
+
+#: ../svn/conflict-callbacks.c:485
+msgid "show all options"
+msgstr "visa alla val"
+
+#: ../svn/conflict-callbacks.c:485
+msgid "show this list (also 'h', '?')"
+msgstr "visa denna lista (även \"h\" och \"?\")"
+
+#: ../svn/conflict-callbacks.c:498
+msgid "show conflicts in this property"
+msgstr "visa konflikter i denna egenskap"
#: ../svn/conflict-callbacks.c:499
-msgid "(s) show all options: "
-msgstr ""
+msgid "change merged property value in an editor [edit]"
+msgstr "redigera sammanslagen egenskap i en editor [edit]"
+
+#: ../svn/conflict-callbacks.c:499
+msgid "edit property"
+msgstr "redigera egenskap"
+
+#: ../svn/conflict-callbacks.c:501
+msgid "accept edited version of property"
+msgstr "godta redigerad version av egenskap"
+
+#: ../svn/conflict-callbacks.c:508 ../svn/conflict-callbacks.c:526
+#: ../svn/conflict-callbacks.c:539 ../svn/conflict-callbacks.c:557
+#: ../svn/conflict-callbacks.c:571 ../svn/conflict-callbacks.c:587
+#: ../svn/conflict-callbacks.c:603
+msgid "help"
+msgstr "hjälp"
+
+#: ../svn/conflict-callbacks.c:508 ../svn/conflict-callbacks.c:526
+#: ../svn/conflict-callbacks.c:539 ../svn/conflict-callbacks.c:557
+#: ../svn/conflict-callbacks.c:571 ../svn/conflict-callbacks.c:587
+#: ../svn/conflict-callbacks.c:603
+msgid "show this help (also '?')"
+msgstr "visa denna hjälp (även \"?\")"
+
+#: ../svn/conflict-callbacks.c:515
+msgid "accept pre-existing item (ignore upstream addition) [mine-full]"
+msgstr "godta befintligt objekt (strunta i mottaget tillägg) [mine-full]"
+
+#: ../svn/conflict-callbacks.c:518
+msgid "accept incoming item (overwrite pre-existing item) [theirs-full]"
+msgstr "godta inkommande objekt (ersätt befintligt objekt) [theirs-full]"
+
+#: ../svn/conflict-callbacks.c:533
+msgid "accept current working copy state"
+msgstr "godta nuvarande tillstånd i arbetskopia"
+
+#: ../svn/conflict-callbacks.c:535 ../svn/conflict-callbacks.c:553
+#: ../svn/conflict-callbacks.c:567 ../svn/conflict-callbacks.c:583
+#: ../svn/conflict-callbacks.c:599
+msgid "resolve the conflict later [postpone]"
+msgstr "lös konflikten senare [postpone]"
+
+#: ../svn/conflict-callbacks.c:545
+msgid "apply update (recommended)"
+msgstr "utför uppdateringen (rekommenderas)"
+
+#: ../svn/conflict-callbacks.c:546
+msgid "apply update to the move destination [mine-conflict]"
+msgstr "utför uppdateringen på målet för flyttningen [mine-conflict]"
+
+#: ../svn/conflict-callbacks.c:549
+msgid "discard update (breaks move)"
+msgstr "överge uppdateringen (bryter flyttning)"
+
+#: ../svn/conflict-callbacks.c:549
+msgid "discard update, mark resolved, the move will will become a copy"
+msgstr "överge uppdateringen, markera som löst, flyttningen blir en kopia"
+
+#: ../svn/conflict-callbacks.c:563
+msgid "apply update to move destination"
+msgstr "utför uppdateringen på målet för flyttningen"
+
+#: ../svn/conflict-callbacks.c:564
+msgid "apply incoming update to move destination [mine-conflict]"
+msgstr "utför inkommande uppdatering på målet för flyttningen [mine-conflict]"
+
+#: ../svn/conflict-callbacks.c:577 ../svn/conflict-callbacks.c:593
+msgid "keep affected local moves"
+msgstr "behåll lokala flyttningar som påverkas"
+
+#: ../svn/conflict-callbacks.c:577
+msgid "keep any local moves affected by this deletion [mine-conflict]"
+msgstr ""
+"behåll lokala flyttningar som påverkats av denna radering\n"
+" [mine-conflict]"
+
+#: ../svn/conflict-callbacks.c:580 ../svn/conflict-callbacks.c:596
+msgid "mark resolved (breaks moves)"
+msgstr "markera som löst (flyttningen blir en kopia)"
+
+#: ../svn/conflict-callbacks.c:580
+msgid "mark resolved, any affected moves will become copies"
+msgstr "markera som löst; påverkade flyttningar blir kopior"
+
+#: ../svn/conflict-callbacks.c:593
+msgid "keep any moves affected by this replacement [mine-conflict]"
+msgstr "behåll flyttningar påverkade av denna ersättning [mine-conflict]"
+
+#: ../svn/conflict-callbacks.c:596
+msgid "mark resolved (any affected moves will become copies)"
+msgstr "markera som löst (påverkade flyttningar blir kopior)"
-#: ../svn/conflict-callbacks.c:508
+#: ../svn/conflict-callbacks.c:632
+msgid "Select:"
+msgstr "Välj:"
+
+#: ../svn/conflict-callbacks.c:659
+#, c-format
+msgid " (%s) %s"
+msgstr " (%s) %s"
+
+#: ../svn/conflict-callbacks.c:699
+msgid "Words in square brackets are the corresponding --accept option arguments.\n"
+msgstr "Ord inom hakparenteser är motsvarande argument till flaggan --accept.\n"
+
+#: ../svn/conflict-callbacks.c:738
#, c-format
msgid ""
-"\n"
-" (e) edit - change merged file in an editor\n"
-" (df) diff-full - show all changes made to merged file\n"
-" (r) resolved - accept merged version of file\n"
-"\n"
-" (dc) display-conflict - show all conflicts (ignoring merged version)\n"
-" (mc) mine-conflict - accept my version for all conflicts (same)\n"
-" (tc) theirs-conflict - accept their version for all conflicts (same)\n"
-"\n"
-" (mf) mine-full - accept my version of entire file (even non-conflicts)\n"
-" (tf) theirs-full - accept their version of entire file (same)\n"
-"\n"
-" (p) postpone - mark the conflict to be resolved later\n"
-" (l) launch - launch external tool to resolve conflict\n"
-" (s) show all - show this list\n"
+"Unrecognized option.\n"
"\n"
msgstr ""
+"Okänd väljare.\n"
+"\n"
+
+#: ../svn/conflict-callbacks.c:766
+#, c-format
+msgid "Conflict discovered in file '%s'.\n"
+msgstr "Konflikt upptäckt i filen \"%s\".\n"
-#: ../svn/conflict-callbacks.c:543 ../svn/conflict-callbacks.c:567
+#: ../svn/conflict-callbacks.c:836
#, c-format
msgid ""
-"Invalid option; cannot choose based on conflicts in a binary file.\n"
+"Invalid option; cannot display conflicts for a binary file.\n"
"\n"
msgstr ""
+"Ogiltig väljare; kan inte visa konflikter för en binärfil.\n"
+"\n"
-#: ../svn/conflict-callbacks.c:551 ../svn/conflict-callbacks.c:575
+#: ../svn/conflict-callbacks.c:845
#, c-format
msgid ""
-"Invalid option; cannot choose based on conflicts for properties.\n"
+"Invalid option; original files not available.\n"
"\n"
-msgstr ""
+msgstr "Ogiltig väljare; ursprungliga filerna ej tillgängliga.\n"
-#: ../svn/conflict-callbacks.c:604
+#: ../svn/conflict-callbacks.c:857
#, c-format
msgid ""
-"Invalid option; cannot display conflicts for a binary file.\n"
+"Invalid option; there's no merged version to diff.\n"
"\n"
msgstr ""
+"Ogiltig väljare; det finns ingen sammanslagen version att jämföra med.\n"
+"\n"
-#: ../svn/conflict-callbacks.c:612
+#: ../svn/conflict-callbacks.c:877
#, c-format
msgid ""
-"Invalid option; cannot display conflicts for properties.\n"
+"Invalid option; can only resolve text conflicts with the internal merge tool.\n"
"\n"
msgstr ""
+"Ogiltig väljare; kan bara lösa textkonflikter med det interna sammanslagningsverktyget.\n"
+"\n"
-#: ../svn/conflict-callbacks.c:620
+#: ../svn/conflict-callbacks.c:903 ../svn/conflict-callbacks.c:920
#, c-format
msgid ""
-"Invalid option; original files not available.\n"
+"Invalid option.\n"
"\n"
msgstr ""
+"Ogiltig väljare.\n"
+"\n"
-#: ../svn/conflict-callbacks.c:632
+#: ../svn/conflict-callbacks.c:929
#, c-format
msgid ""
-"Invalid option; there's no merged version to diff.\n"
+"Invalid option; cannot choose based on conflicts in a binary file.\n"
"\n"
msgstr ""
+"Ogiltig väljare; kan inte välja utifrån konflikter i en binärfil.\n"
+"\n"
-#: ../svn/conflict-callbacks.c:651
+#: ../svn/conflict-callbacks.c:943
#, c-format
msgid ""
-"Invalid option; cannot resolve property conflicts with an external merge tool.\n"
+"Invalid option; use diff/edit/merge/launch before choosing 'mark resolved'.\n"
"\n"
msgstr ""
+"Ogiltig väljare; använd \"df\", \"e\", \"m\" eller \"l\" före \"r\".\n"
+"\n"
+
+#: ../svn/conflict-callbacks.c:984
+#, c-format
+msgid "Conflict for property '%s' discovered on '%s'.\n"
+msgstr "Konflikt för egenskapen \"%s\" upptäcktes på \"%s\".\n"
-#: ../svn/conflict-callbacks.c:666 ../svn/conflict-callbacks.c:680
-#, fuzzy, c-format
+#: ../svn/conflict-callbacks.c:1042
+#, c-format
msgid ""
-"Invalid option.\n"
+"Invalid option; please edit the property first.\n"
+"\n"
+msgstr ""
+"Felaktigt val; redigera egenskapen först.\n"
"\n"
-msgstr "Ogiltig omlokalisering"
-#: ../svn/conflict-callbacks.c:710
-#, fuzzy, c-format
+#: ../svn/conflict-callbacks.c:1079
+#, c-format
msgid ""
-"Conflict discovered when trying to add '%s'.\n"
-"An object of the same name already exists.\n"
-msgstr "Kunde inte lägga till filen \"%s\": ett objekt med samma namn finns redan"
-
-#: ../svn/conflict-callbacks.c:713
-msgid "Select: (p) postpone, (mf) mine-full, (tf) theirs-full, (h) help:"
+"Tree conflict on '%s'\n"
+" > %s\n"
msgstr ""
+"Trädkonflikt på \"%s\"\n"
+" > %s\n"
-#: ../svn/conflict-callbacks.c:725
+#: ../svn/conflict-callbacks.c:1149
#, c-format
msgid ""
-" (p) postpone - resolve the conflict later\n"
-" (mf) mine-full - accept pre-existing item (ignore upstream addition)\n"
-" (tf) theirs-full - accept incoming item (overwrite pre-existing item)\n"
-" (h) help - show this help\n"
-"\n"
+"Conflict discovered when trying to add '%s'.\n"
+"An object of the same name already exists.\n"
msgstr ""
+"En konflikt upptäcktes när \"%s\" skulle läggas till.\n"
+"Ett objekt med samma namn finns redan.\n"
-#: ../svn/copy-cmd.c:132 ../svn/delete-cmd.c:79 ../svn/mkdir-cmd.c:66
-#: ../svn/move-cmd.c:77 ../svn/propedit-cmd.c:251
-#, fuzzy
-msgid "Local, non-commit operations do not take a log message or revision properties"
-msgstr "Lokala operationer, som ej medför arkivering, behöver inget loggmeddelande"
+#: ../svn/conflict-callbacks.c:1247
+msgid "No editor found; leaving all conflicts."
+msgstr "Ingen editor hittades; alla konflikter har lämnats kvar."
-#: ../svn/diff-cmd.c:172 ../svn/log-cmd.c:280 ../svnserve/main.c:632
-#, c-format
-msgid "Can't open stdout"
-msgstr "Kan inte öppna standard ut"
+#: ../svn/conflict-callbacks.c:1256
+msgid "Error running editor; leaving all conflicts."
+msgstr "Fel vid körning av editor; alla konflikter har lämnats kvar."
+
+#: ../svn/conflict-callbacks.c:1292
+msgid "No merge tool found; leaving all conflicts."
+msgstr "Inget sammanslagningsverktyg hittades; alla konflikter har lämnats kvar."
+
+#: ../svn/conflict-callbacks.c:1301
+msgid "Error running merge tool; leaving all conflicts."
+msgstr "Fel vid körning av sammanslagningsverktyget; alla konflikter har lämnats kvar."
-#: ../svn/diff-cmd.c:174 ../svn/log-cmd.c:282
+#: ../svn/copy-cmd.c:123 ../svn/util.c:957
#, c-format
-msgid "Can't open stderr"
-msgstr "Kan inte öppna standard fel"
+msgid "'%s': a peg revision is not allowed here"
+msgstr "\"%s\": en fixerad revision är inte tillåten här"
+
+#: ../svn/copy-cmd.c:163 ../svn/delete-cmd.c:69 ../svn/mkdir-cmd.c:68
+#: ../svn/move-cmd.c:77 ../svn/propedit-cmd.c:260
+msgid "Local, non-commit operations do not take a log message or revision properties"
+msgstr "Lokala operationer, som ej medför arkivering, behöver inga loggmeddelanden eller revisionsegenskaper"
-#: ../svn/diff-cmd.c:183
-#, fuzzy
+#: ../svn/diff-cmd.c:208
msgid "'--xml' option only valid with '--summarize' option"
-msgstr "Flaggan \"--new\" är endast tillåten tillsammans med \"--old\""
+msgstr "Flaggan \"--xml\" är endast tillåten tillsammans med \"--summarize\""
-#: ../svn/diff-cmd.c:258
+#: ../svn/diff-cmd.c:299
msgid "'--new' option only valid with '--old' option"
msgstr "Flaggan \"--new\" är endast tillåten tillsammans med \"--old\""
-#: ../svn/diff-cmd.c:322
-#, fuzzy, c-format
+#: ../svn/diff-cmd.c:317
+msgid "'svn diff [-r N[:M]] [TARGET[@REV]...]' does not support mixed target types. Try using the --old and --new options or one of the shorthand invocations listed in 'svn help diff'."
+msgstr "\"svn diff [-r N[:M]] [MÅL[@REV]...]\" stöder inte blandade måltyper. Försök med flaggorna \"--old\" och \"--new\" eller en av kortformerna som nämns i \"svn help diff\"."
+
+#: ../svn/diff-cmd.c:355
+#, c-format
msgid "Path '%s' not relative to base URLs"
-msgstr "Sökvägen \"%s\" är inte en URL"
+msgstr "Sökvägen \"%s\" är inte relativ mot bas-URL:erna"
#: ../svn/export-cmd.c:113
msgid "Destination directory exists; please remove the directory or use --force to overwrite"
msgstr "Destinationskatalogen finns; ta bort den eller använd --force för att skriva över den"
-#: ../svn/export-cmd.c:118 ../svn/switch-cmd.c:179 ../svn/update-cmd.c:107
-#, fuzzy
-msgid "Failure occured processing one or more externals definitions"
-msgstr "bortse ifrån externals-definitioner"
+#: ../svn/export-cmd.c:122 ../svn/list-cmd.c:412 ../svn/switch-cmd.c:188
+#: ../svn/update-cmd.c:177
+msgid "Failure occurred processing one or more externals definitions"
+msgstr "Fel vid behandlingen av en eller flera externals-definitioner"
-#: ../svn/help-cmd.c:50
+#: ../svn/file-merge.c:135 ../svn/file-merge.c:805
+msgid "Could not write data to merged file"
+msgstr "Kunde inte skriva data till sammanslagen fil"
+
+#: ../svn/file-merge.c:491
+msgid "Could not write data to temporary file"
+msgstr "Kunde inte skriva data till temporär fil"
+
+#: ../svn/file-merge.c:600
+msgid "Conflicting section found during merge:"
+msgstr "Konfliktavsnitt vid sammanslagning:"
+
+#: ../svn/file-merge.c:603
+#, c-format
+msgid "(1) their version (at line %lu)"
+msgstr "(1) andras version (på rad %lu)"
+
+#: ../svn/file-merge.c:608
+#, c-format
+msgid "(2) your version (at line %lu)"
+msgstr "(2) din version (på rad %lu)"
+
+#: ../svn/file-merge.c:657
+msgid ""
+"Select: (1) use their version, (2) use your version,\n"
+" (12) their version first, then yours,\n"
+" (21) your version first, then theirs,\n"
+" (e1) edit their version and use the result,\n"
+" (e2) edit your version and use the result,\n"
+" (eb) edit both versions and use the result,\n"
+" (p) postpone this conflicting section leaving conflict markers,\n"
+" (a) abort file merge and return to main menu: "
+msgstr ""
+"Välj: (1) använd andras version, (2) använd din version,\n"
+" (12) deras version först, sedan din,\n"
+" (21) din version först, sedan deras,\n"
+" (e1) redigera andras version och använd resultatet,\n"
+" (e2) redigera din version och använd resultatet,\n"
+" (eb) redigera båda versionerna och använd resultatet,\n"
+" (p) skjut upp detta konfliktavsnitt och lämna konfliktmarkeringar,\n"
+" (a) avbryt sammanslagningen av filen och återgå till huvudmenyn: "
+
+#: ../svn/file-merge.c:888
+#, c-format
+msgid "Merging '%s'.\n"
+msgstr "Sammanslagning av \"%s\".\n"
+
+#: ../svn/file-merge.c:935
+#, c-format
+msgid "Merge of '%s' aborted.\n"
+msgstr "Sammanslagning av \"%s\" avbruten.\n"
+
+#: ../svn/file-merge.c:953
+#, c-format
+msgid ""
+"Could not write merged result to '%s', saved instead at '%s'.\n"
+"'%s' remains in conflict.\n"
+msgstr ""
+"Kunde inte skriva sammanslaget resultat till \"%s\", istället sparat i \"%s\".\n"
+"\"%s\" är fortfarande i konflikt.\n"
+
+#: ../svn/file-merge.c:971
+#, c-format
+msgid "Merge of '%s' completed (remains in conflict).\n"
+msgstr "Sammanslagningen av \"%s\" klar (fortfarande i konflikt).\n"
+
+#: ../svn/file-merge.c:975
+#, c-format
+msgid "Merge of '%s' completed.\n"
+msgstr "Sammanslagningen av \"%s\" klar.\n"
+
+#: ../svn/help-cmd.c:53
#, c-format
msgid ""
"usage: svn <subcommand> [options] [args]\n"
@@ -7429,9 +8898,9 @@ msgstr ""
"användning: svn <underkommando> [flaggor] [argument]\n"
"Subversion kommandoradsklient, version %s.\n"
"Skriv \"svn help <underkommando>\" för att få hjälp med ett specifikt\n"
-"underkommando.\n"
+" underkommando.\n"
"Skriv \"svn --version\" för att se versionsnummer och insticksmoduler för\n"
-" akrivåtkomst eller \"svn --version --quiet\" för att se endast versionsnummret.\n"
+" arkivåtkomst eller \"svn --version --quiet\" för att se endast versionsnumret.\n"
"\n"
"De flesta underkommandona tar fil- och/eller katalogargument och går ned i\n"
"kataloger rekursivt. Om inga argument ges till sådana kommandon, används\n"
@@ -7439,16 +8908,15 @@ msgstr ""
"\n"
"Tillgängliga underkommandon:\n"
-#: ../svn/help-cmd.c:63
-#, fuzzy
+#: ../svn/help-cmd.c:66
msgid ""
"Subversion is a tool for version control.\n"
"For additional information, see http://subversion.apache.org/\n"
msgstr ""
"Subversion är ett verktyg för versionshantering.\n"
-"Se http://subversion.tigris.org/ för ytterligare information.\n"
+"Se http://subversion.apache.org/ för ytterligare information\n"
-#: ../svn/help-cmd.c:70 ../svnrdump/svnrdump.c:349 ../svnsync/main.c:1762
+#: ../svn/help-cmd.c:73 ../svnrdump/svnrdump.c:659 ../svnsync/svnsync.c:1857
msgid ""
"The following repository access (RA) modules are available:\n"
"\n"
@@ -7456,6 +8924,14 @@ msgstr ""
"Följande arkivåtkomstmoduler är tillgängliga:\n"
"\n"
+#: ../svn/help-cmd.c:127
+msgid ""
+"WARNING: Plaintext password storage is enabled!\n"
+"\n"
+msgstr ""
+"VARNING: Lagring av lösenord i klartext är påslagen!\n"
+"\n"
+
#: ../svn/import-cmd.c:87
msgid "Repository URL required when importing"
msgstr "URL till arkiv måste anges vid import"
@@ -7464,186 +8940,218 @@ msgstr "URL till arkiv måste anges vid import"
msgid "Too many arguments to import command"
msgstr "För många argument till import-kommandot"
-#: ../svn/import-cmd.c:111
+#: ../svn/import-cmd.c:107
#, c-format
msgid "Invalid URL '%s'"
msgstr "Ogiltig URL \"%s\""
#: ../svn/info-cmd.c:95
-#, fuzzy
msgid "Resource is not under version control."
-msgstr "\"%s\" är inte versionshanterad"
+msgstr "Resursen är inte versionshanterad."
-#: ../svn/info-cmd.c:255 ../svnadmin/main.c:1394
+#: ../svn/info-cmd.c:266 ../svnadmin/svnadmin.c:1744
#, c-format
msgid "Path: %s\n"
msgstr "Sökväg: %s\n"
-#: ../svn/info-cmd.c:261
+#: ../svn/info-cmd.c:273
#, c-format
msgid "Name: %s\n"
msgstr "Namn: %s\n"
-#: ../svn/info-cmd.c:265
+#: ../svn/info-cmd.c:277
#, c-format
msgid "Working Copy Root Path: %s\n"
-msgstr ""
+msgstr "Sökväg till arbetskopians rot: %s\n"
-#: ../svn/info-cmd.c:270
+#: ../svn/info-cmd.c:283
#, c-format
msgid "URL: %s\n"
msgstr "URL: %s\n"
-#: ../svn/info-cmd.c:273
+#: ../svn/info-cmd.c:286
+#, c-format
+msgid "Relative URL: ^/%s\n"
+msgstr "Relativ URL: ^/%s\n"
+
+#: ../svn/info-cmd.c:293
#, c-format
msgid "Repository Root: %s\n"
msgstr "Arkivrot: %s\n"
-#: ../svn/info-cmd.c:277
+#: ../svn/info-cmd.c:297
#, c-format
msgid "Repository UUID: %s\n"
msgstr "Arkivets UUID: %s\n"
-#: ../svn/info-cmd.c:281
+#: ../svn/info-cmd.c:301
#, c-format
msgid "Revision: %ld\n"
msgstr "Revision: %ld\n"
-#: ../svn/info-cmd.c:286
+#: ../svn/info-cmd.c:306
#, c-format
msgid "Node Kind: file\n"
msgstr "Nodtyp: fil\n"
-#: ../svn/info-cmd.c:290
+#: ../svn/info-cmd.c:310
#, c-format
msgid "Node Kind: directory\n"
msgstr "Nodtyp: katalog\n"
-#: ../svn/info-cmd.c:294
+#: ../svn/info-cmd.c:314
#, c-format
msgid "Node Kind: none\n"
msgstr "Nodtyp: ingen\n"
-#: ../svn/info-cmd.c:299
+#: ../svn/info-cmd.c:319
#, c-format
msgid "Node Kind: unknown\n"
msgstr "Nodtyp: okänd\n"
-#: ../svn/info-cmd.c:308
+#: ../svn/info-cmd.c:328
#, c-format
msgid "Schedule: normal\n"
msgstr "Schemalagd: normal\n"
-#: ../svn/info-cmd.c:312
+#: ../svn/info-cmd.c:332
#, c-format
msgid "Schedule: add\n"
msgstr "Schemalagd: att läggas till\n"
-#: ../svn/info-cmd.c:316
+#: ../svn/info-cmd.c:336
#, c-format
msgid "Schedule: delete\n"
msgstr "Schemalagd: att raderas\n"
-#: ../svn/info-cmd.c:320
+#: ../svn/info-cmd.c:340
#, c-format
msgid "Schedule: replace\n"
msgstr "Schemalagd: att ersättas\n"
-#: ../svn/info-cmd.c:336
+#: ../svn/info-cmd.c:356
#, c-format
msgid "Depth: empty\n"
-msgstr ""
+msgstr "Djup: \"empty\"\n"
-#: ../svn/info-cmd.c:340
+#: ../svn/info-cmd.c:360
#, c-format
msgid "Depth: files\n"
-msgstr ""
+msgstr "Djup: \"files\"\n"
-#: ../svn/info-cmd.c:344
+#: ../svn/info-cmd.c:364
#, c-format
msgid "Depth: immediates\n"
-msgstr ""
+msgstr "Djup: \"immediates\"\n"
+
+#: ../svn/info-cmd.c:368
+#, c-format
+msgid "Depth: exclude\n"
+msgstr "Djup: \"exclude\"\n"
#. Other depths should never happen here.
-#: ../svn/info-cmd.c:355
+#: ../svn/info-cmd.c:379
#, c-format
msgid "Depth: INVALID\n"
-msgstr ""
+msgstr "Djup: OGILTIGT\n"
-#: ../svn/info-cmd.c:359
+#: ../svn/info-cmd.c:383
#, c-format
msgid "Copied From URL: %s\n"
msgstr "Kopierad från URL: %s\n"
-#: ../svn/info-cmd.c:363
+#: ../svn/info-cmd.c:387
#, c-format
msgid "Copied From Rev: %ld\n"
-msgstr "Kopierad från Revision: %ld\n"
+msgstr "Kopierad från revision: %ld\n"
-#: ../svn/info-cmd.c:368
+#: ../svn/info-cmd.c:396 ../svn/info-cmd.c:398
+#, c-format
+msgid "Moved From: %s\n"
+msgstr "Flyttad från: %s\n"
+
+# ###
+#: ../svn/info-cmd.c:409 ../svn/info-cmd.c:411
+#, c-format
+msgid "Moved To: %s\n"
+msgstr "Flyttad till: %s\n"
+
+#: ../svn/info-cmd.c:417
#, c-format
msgid "Last Changed Author: %s\n"
msgstr "Författare till senaste ändringen: %s\n"
-#: ../svn/info-cmd.c:372
+#: ../svn/info-cmd.c:421
#, c-format
msgid "Last Changed Rev: %ld\n"
msgstr "Senast ändrad i revision: %ld\n"
-#: ../svn/info-cmd.c:377
+#: ../svn/info-cmd.c:426
msgid "Last Changed Date"
msgstr "Datum för senaste ändringen"
-#: ../svn/info-cmd.c:383
+#: ../svn/info-cmd.c:432
msgid "Text Last Updated"
msgstr "Innehållet senast uppdaterat"
-#: ../svn/info-cmd.c:386
+#: ../svn/info-cmd.c:435
#, c-format
msgid "Checksum: %s\n"
msgstr "Kontrollsumma: %s\n"
-#: ../svn/info-cmd.c:391
+#: ../svn/info-cmd.c:456
#, c-format
msgid "Conflict Previous Base File: %s\n"
msgstr "Konflikt: föregående basfil: %s\n"
-#: ../svn/info-cmd.c:397
+#: ../svn/info-cmd.c:463
#, c-format
msgid "Conflict Previous Working File: %s\n"
msgstr "Konflikt: föregående arbetsfil: %s\n"
-#: ../svn/info-cmd.c:402
+#: ../svn/info-cmd.c:470
#, c-format
msgid "Conflict Current Base File: %s\n"
msgstr "Konflikt: nuvarande basfil: %s\n"
-#: ../svn/info-cmd.c:407
+#: ../svn/info-cmd.c:479
#, c-format
msgid "Conflict Properties File: %s\n"
msgstr "Konfliktegenskapsfil: %s\n"
+#: ../svn/info-cmd.c:491
+msgid "Tree conflict"
+msgstr "Trädkonflikt"
+
+#: ../svn/info-cmd.c:517
+msgid "Source left"
+msgstr "Källa vänster"
+
+#: ../svn/info-cmd.c:526
+msgid "Source right"
+msgstr "Källa höger"
+
# ###
-#: ../svn/info-cmd.c:415
+#: ../svn/info-cmd.c:535
#, c-format
msgid "Lock Token: %s\n"
msgstr "LÃ¥sidentifierare: %s\n"
-#: ../svn/info-cmd.c:419
+#: ../svn/info-cmd.c:539
#, c-format
msgid "Lock Owner: %s\n"
msgstr "Låsägare: %s\n"
-#: ../svn/info-cmd.c:424
+#: ../svn/info-cmd.c:544
msgid "Lock Created"
msgstr "LÃ¥s skapat"
-#: ../svn/info-cmd.c:428
+#: ../svn/info-cmd.c:548
msgid "Lock Expires"
msgstr "Låset går ut"
-#: ../svn/info-cmd.c:436
-#, fuzzy, c-format
+#: ../svn/info-cmd.c:556
+#, c-format
msgid ""
"Lock Comment (%i line):\n"
"%s\n"
@@ -7654,447 +9162,1391 @@ msgstr[0] ""
"LÃ¥skommentar (%i rad):\n"
"%s\n"
msgstr[1] ""
-"LÃ¥skommentar (%i rad):\n"
+"LÃ¥skommentar (%i rader):\n"
"%s\n"
-#: ../svn/info-cmd.c:445
+#: ../svn/info-cmd.c:565
#, c-format
msgid "Changelist: %s\n"
msgstr "Ändringslista: %s\n"
-#: ../svn/info-cmd.c:467
-msgid "Tree conflict"
-msgstr ""
-
-#: ../svn/info-cmd.c:473
-msgid "Source left"
-msgstr ""
+#: ../svn/info-cmd.c:679
+msgid "Could not display info for all targets because some targets don't exist"
+msgstr "Kunde inte visa information för alla mål eftersom några mål inte finns"
-#: ../svn/info-cmd.c:482
-msgid "Source right"
-msgstr ""
+#: ../svn/list-cmd.c:73
+msgid "%b %d %H:%M"
+msgstr "%e %b %H:%M"
-#: ../svn/info-cmd.c:580
-#, c-format
-msgid ""
-"%s: (Not a versioned resource)\n"
-"\n"
-msgstr ""
-"%s: (Inte en versionshanterad resurs)\n"
-"\n"
+#: ../svn/list-cmd.c:75
+msgid "%b %d %Y"
+msgstr "%e %b %Y"
-#: ../svn/info-cmd.c:589
+#: ../svn/list-cmd.c:101
#, c-format
-msgid ""
-"%s: (Not a valid URL)\n"
-"\n"
-msgstr "%s: (Inte en giltig URL)\n"
+msgid "Listing external '%s' defined on '%s':\n"
+msgstr "Listar externt objekt \"%s\" definierad på \"%s\":\n"
-#: ../svn/list-cmd.c:92
-msgid "%b %d %H:%M"
-msgstr ""
-
-#: ../svn/list-cmd.c:97
-msgid "%b %d %Y"
-msgstr ""
+#: ../svn/list-cmd.c:421
+msgid "Could not list all targets because some targets don't exist"
+msgstr "Kunde inte lista alla mål eftersom några mål inte finns"
#: ../svn/lock-cmd.c:58
msgid "Lock comment contains a zero byte"
msgstr "Låskommentaren innehåller en noll-byte"
-#: ../svn/log-cmd.c:184
+#: ../svn/log-cmd.c:144
+msgid "\n"
+msgstr "\n"
+
+#: ../svn/log-cmd.c:354
msgid "(no author)"
msgstr "(författare saknas)"
-#: ../svn/log-cmd.c:190
+#: ../svn/log-cmd.c:360
msgid "(no date)"
msgstr "(datum saknas)"
-#: ../svn/log-cmd.c:205
+#: ../svn/log-cmd.c:385
#, c-format
msgid " | %d line"
msgid_plural " | %d lines"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] " | %d rad"
+msgstr[1] " | %d rader"
-#: ../svn/log-cmd.c:221
+#: ../svn/log-cmd.c:401
#, c-format
msgid "Changed paths:\n"
msgstr "Ändrade sökvägar:\n"
-#: ../svn/log-cmd.c:236
+#: ../svn/log-cmd.c:418
#, c-format
msgid " (from %s:%ld)"
msgstr " (från %s:%ld)"
-#. Print the result of merge line
-#: ../svn/log-cmd.c:251
+#: ../svn/log-cmd.c:434
#, c-format
-msgid "Merged via:"
-msgstr ""
+msgid "Reverse merged via:"
+msgstr "Omvänt sammanslaget från:"
-#: ../svn/log-cmd.c:296 ../svn/log-cmd.c:373
+#: ../svn/log-cmd.c:436
#, c-format
-msgid "\n"
-msgstr ""
+msgid "Merged via:"
+msgstr "Sammanslaget från:"
-#: ../svn/log-cmd.c:573
-#, fuzzy
+#: ../svn/log-cmd.c:689
msgid "'with-all-revprops' option only valid in XML mode"
-msgstr "Flaggan \"incremental\" är endast tillåten i XML-läge"
+msgstr "Flaggan \"with-all-revprops\" är endast tillåten i XML-läge"
-#: ../svn/log-cmd.c:577
-#, fuzzy
+#: ../svn/log-cmd.c:693
msgid "'with-no-revprops' option only valid in XML mode"
-msgstr "Flaggan \"incremental\" är endast tillåten i XML-läge"
+msgstr "Flaggan \"with-no-revprops\" är endast tillåten i XML-läge"
-#: ../svn/log-cmd.c:581
-#, fuzzy
+#: ../svn/log-cmd.c:697
msgid "'with-revprop' option only valid in XML mode"
-msgstr "Flaggan \"incremental\" är endast tillåten i XML-läge"
+msgstr "Flaggan \"with-revprop\" är endast tillåten i XML-läge"
-#: ../svn/log-cmd.c:588
-#, fuzzy
+#: ../svn/log-cmd.c:704
msgid "'diff' option is not supported in XML mode"
-msgstr "Den angivna diff-flaggan stöds ej"
+msgstr "Flaggan \"diff\" stöds ej i XML-läge"
-#: ../svn/log-cmd.c:594
-#, fuzzy
+#: ../svn/log-cmd.c:710
msgid "'quiet' and 'diff' options are mutually exclusive"
-msgstr "--auto-props och --no-auto-props kan inte användas samtidigt"
+msgstr "Flaggorna \"quiet\" och \"quit\" kan inte användas samtidigt"
-#: ../svn/log-cmd.c:598
+#: ../svn/log-cmd.c:714
msgid "'diff-cmd' option requires 'diff' option"
-msgstr ""
+msgstr "Flaggan \"diff-cmd\" måste användas med flaggan \"diff\""
-#: ../svn/log-cmd.c:602
+#: ../svn/log-cmd.c:718
msgid "'internal-diff' option requires 'diff' option"
-msgstr ""
+msgstr "Flaggan \"internal-diff\" måste användas med flaggan \"diff\""
-#: ../svn/log-cmd.c:606
+#: ../svn/log-cmd.c:722
msgid "'extensions' option requires 'diff' option"
-msgstr ""
+msgstr "Flaggan \"extensions\" måste användas med flaggan \"diff\""
-#: ../svn/log-cmd.c:625
-#, fuzzy
+#: ../svn/log-cmd.c:727
+msgid "'depth' option requires 'diff' option"
+msgstr "Flaggan \"depth\" måste användas med flaggan \"diff\""
+
+#: ../svn/log-cmd.c:743
msgid "-c and -r are mutually exclusive"
-msgstr "--auto-props och --no-auto-props kan inte användas samtidigt"
+msgstr "-c och -r kan inte användas samtidigt"
-#: ../svn/log-cmd.c:652
-#, fuzzy, c-format
+#: ../svn/log-cmd.c:775
+#, c-format
msgid "Only relative paths can be specified after a URL for 'svn log', but '%s' is not a relative path"
-msgstr "Endast relativa sökvägar kan anges efter en URL"
+msgstr "Endast relativa sökvägar kan anges efter en URL för \"svn log\", men \"%s\" är inte en relativ sökväg"
-#: ../svn/log-cmd.c:697
+#: ../svn/log-cmd.c:821
#, c-format
msgid "cannot assign with 'with-revprop' option (drop the '=')"
+msgstr "kan inte tilldela med flaggan \"with-revprop\" (ta bort \"=\")"
+
+#: ../svn/merge-cmd.c:107 ../svn/merge-cmd.c:131
+#, c-format
+msgid "--- Merging\n"
+msgstr "--- Sammanslagning\n"
+
+#: ../svn/merge-cmd.c:175
+msgid "-r and -c can't be used with --reintegrate"
+msgstr "-r och -r kan inte användas tillsammans med --reintegrate"
+
+#: ../svn/merge-cmd.c:230
+msgid "Merge source required"
+msgstr "Sammanslagningens källa måste anges"
+
+#: ../svn/merge-cmd.c:276
+msgid "Second revision required"
+msgstr "En andra revision måste anges"
+
+#: ../svn/merge-cmd.c:285 ../svn/merge-cmd.c:312 ../svn/mergeinfo-cmd.c:267
+#: ../svnadmin/svnadmin.c:1719 ../svnlook/svnlook.c:2061
+#: ../svnlook/svnlook.c:2254 ../svnlook/svnlook.c:2358
+#: ../svnlook/svnlook.c:2393
+msgid "Too many arguments given"
+msgstr "För många argument"
+
+#: ../svn/merge-cmd.c:302
+msgid "Cannot specify a revision range with two URLs"
+msgstr "Ett revisionsområde med två URL:er kan ej anges"
+
+#: ../svn/merge-cmd.c:406
+msgid "--reintegrate cannot be used with --ignore-ancestry"
+msgstr "\"--reintegrate\" kan inte användas tillsammans med \"--ignore-ancestry\""
+
+#: ../svn/merge-cmd.c:411
+msgid "--reintegrate cannot be used with --record-only"
+msgstr "\"--reintegrate\" kan inte användas tillsammans med \"--record-only\""
+
+#: ../svn/merge-cmd.c:416
+msgid "--depth cannot be used with --reintegrate"
+msgstr "\"--depth\" kan inte användas tillsammans med \"--reintegrate\""
+
+#: ../svn/merge-cmd.c:421
+msgid "--force cannot be used with --reintegrate"
+msgstr "\"--force\" kan inte användas tillsammans med \"--reintegrate\""
+
+#: ../svn/merge-cmd.c:426
+msgid "--reintegrate can only be used with a single merge source"
+msgstr "\"--reintegrate\" kan bara användas med en enda sammanslagningskälla"
+
+#: ../svn/merge-cmd.c:430
+msgid "--allow-mixed-revisions cannot be used with --reintegrate"
+msgstr "\"--allow-mixed-revisions\" kan inte användas tillsammans med \"--reintegrate\""
+
+#: ../svn/merge-cmd.c:445
+msgid ""
+"Merge tracking not possible, use --ignore-ancestry or\n"
+"fix invalid mergeinfo in target with 'svn propset'"
+msgstr ""
+"Sammanslagningsföljning ej möjlig; använd --ignore-ancestry eller\n"
+"reparera ogiltig sammanslagningsinformation i målet med \"svn propset\""
+
+#: ../svn/mergeinfo-cmd.c:171
+msgid "last full merge"
+msgstr "senaste fullständiga sammanslagning"
+
+#: ../svn/mergeinfo-cmd.c:171
+msgid "youngest common ancestor"
+msgstr "yngsta gemensamma ursprung"
+
+#: ../svn/mergeinfo-cmd.c:172
+msgid "repository path"
+msgstr "arkivsökväg"
+
+#: ../svn/mergeinfo-cmd.c:172
+msgid "tip of branch"
+msgstr "grenspets"
+
+#: ../svn/mergeinfo-cmd.c:264
+msgid "Not enough arguments given"
+msgstr "För få argument"
+
+#: ../svn/mergeinfo-cmd.c:342
+msgid "--revision (-r) option valid only with --show-revs option"
+msgstr "Flaggan --revision (-r) är endast tillåten tillsammans med flaggan --show-revs"
+
+#: ../svn/mergeinfo-cmd.c:346
+msgid "Depth specification options valid only with --show-revs option"
+msgstr "Flaggor för djupangivelse är endast tillåtna tillsammans med --show-revs"
+
+#: ../svn/mkdir-cmd.c:92
+msgid "Try 'svn add' or 'svn add --non-recursive' instead?"
+msgstr "Försök med \"svn add\" eller \"svn add --non-recursive\" istället?"
+
+#: ../svn/mkdir-cmd.c:98
+msgid "Try 'svn mkdir --parents' instead?"
+msgstr "Försök med \"svn mkdir --parents\" istället?"
+
+#: ../svn/notify.c:132
+#, c-format
+msgid "%d remaining"
+msgid_plural "%d remaining"
+msgstr[0] "%d återstår"
+msgstr[1] "%d återstår"
+
+#: ../svn/notify.c:141
+#, c-format
+msgid "and %d already resolved"
+msgid_plural "and %d already resolved"
+msgstr[0] "och %d redan löst"
+msgstr[1] "och %d redan lösta"
+
+#: ../svn/notify.c:163 ../svn/status-cmd.c:93
+#, c-format
+msgid "Summary of conflicts:\n"
+msgstr "Konfliktsammanfattning:\n"
+
+#: ../svn/notify.c:169
+#, c-format
+msgid " Text conflicts: %d\n"
+msgstr " Textkonflikter: %d\n"
+
+#: ../svn/notify.c:173
+#, c-format
+msgid " Property conflicts: %d\n"
+msgstr " Egenskapskonflikter: %d\n"
+
+#: ../svn/notify.c:177
+#, c-format
+msgid " Tree conflicts: %d\n"
+msgstr " Trädkonflikter: %d\n"
+
+#: ../svn/notify.c:184
+#, c-format
+msgid " Text conflicts: %s (%s)\n"
+msgstr " Textkonflikter: %s (%s)\n"
+
+#: ../svn/notify.c:189
+#, c-format
+msgid " Property conflicts: %s (%s)\n"
+msgstr " Egenskapskonflikter: %s (%s)\n"
+
+#: ../svn/notify.c:194
+#, c-format
+msgid " Tree conflicts: %s (%s)\n"
+msgstr " Trädkonflikter: %s (%s)\n"
+
+#: ../svn/notify.c:200
+#, c-format
+msgid " Skipped paths: %d\n"
+msgstr " Överhoppade sökvägar: %d\n"
+
+#: ../svn/notify.c:235
+#, c-format
+msgid "Skipped missing target: '%s'\n"
+msgstr "Hoppade över saknat mål: \"%s\"\n"
+
+#: ../svn/notify.c:242
+#, c-format
+msgid "Skipped target: '%s' -- copy-source is missing\n"
+msgstr "Hoppade över mål: \"%s\" -- kopieringskällan saknas\n"
+
+#: ../svn/notify.c:249
+#, c-format
+msgid "Skipped '%s'\n"
+msgstr "Hoppade över \"%s\"\n"
+
+#: ../svn/notify.c:256
+#, c-format
+msgid "Skipped '%s' -- An obstructing working copy was found\n"
+msgstr "Hoppade över \"%s\" -- En arbetskopia hittades som var i vägen\n"
+
+#: ../svn/notify.c:263
+#, c-format
+msgid "Skipped '%s' -- Has no versioned parent\n"
+msgstr "Hoppade över \"%s\" -- Saknar versionshanterad förälder\n"
+
+#: ../svn/notify.c:270
+#, c-format
+msgid "Skipped '%s' -- Access denied\n"
+msgstr "Hoppade över \"%s\" -- Åtkomst nekas\n"
+
+#: ../svn/notify.c:277
+#, c-format
+msgid "Skipped '%s' -- Node remains in conflict\n"
+msgstr "Hoppade över \"%s\" -- Noden är fortfarande i konflikt\n"
+
+#: ../svn/notify.c:358
+#, c-format
+msgid "Restored '%s'\n"
+msgstr "Ã…terskapade \"%s\"\n"
+
+#: ../svn/notify.c:364
+#, c-format
+msgid "Reverted '%s'\n"
+msgstr "Återställde \"%s\"\n"
+
+#: ../svn/notify.c:370
+#, c-format
+msgid "Failed to revert '%s' -- try updating instead.\n"
+msgstr "Misslyckades med att återställa \"%s\" -- försök uppdatera istället.\n"
+
+#: ../svn/notify.c:378
+#, c-format
+msgid "Resolved conflicted state of '%s'\n"
+msgstr "Löste konflikttillståndet för \"%s\"\n"
+
+#: ../svn/notify.c:473 ../svn/notify.c:513
+#, c-format
+msgid "> applied hunk ## -%lu,%lu +%lu,%lu ## with offset %s"
+msgstr "> anbragte stycke ## -%lu,%lu +%lu,%lu ## med förskjutning %s"
+
+#: ../svn/notify.c:490 ../svn/notify.c:527
+#, c-format
+msgid "> applied hunk @@ -%lu,%lu +%lu,%lu @@ with offset %s"
+msgstr "> anbragte stycke @@ -%lu,%lu +%lu,%lu @@ med förskjutning %s"
+
+#: ../svn/notify.c:548
+#, c-format
+msgid "> applied hunk ## -%lu,%lu +%lu,%lu ## with fuzz %lu (%s)\n"
+msgstr "> anbragte stycke ## -%lu,%lu +%lu,%lu ## med oskärpa %lu (%s)\n"
+
+#: ../svn/notify.c:558
+#, c-format
+msgid "> applied hunk @@ -%lu,%lu +%lu,%lu @@ with fuzz %lu\n"
+msgstr "> anbragte stycke @@ -%lu,%lu +%lu,%lu @@ med oskärpa %lu\n"
+
+#: ../svn/notify.c:576
+#, c-format
+msgid "> rejected hunk ## -%lu,%lu +%lu,%lu ## (%s)\n"
+msgstr "> avslog stycke ## -%lu,%lu +%lu,%lu ## (%s)\n"
+
+#: ../svn/notify.c:585
+#, c-format
+msgid "> rejected hunk @@ -%lu,%lu +%lu,%lu @@\n"
+msgstr "> avslog stycke @@ -%lu,%lu +%lu,%lu @@\n"
+
+#: ../svn/notify.c:599
+#, c-format
+msgid "> hunk ## -%lu,%lu +%lu,%lu ## already applied (%s)\n"
+msgstr "> stycke ## -%lu,%lu +%lu,%lu ## redan anbragt (%s)\n"
+
+#: ../svn/notify.c:609
+#, c-format
+msgid "> hunk @@ -%lu,%lu +%lu,%lu @@ already applied\n"
+msgstr "> stycke @@ -%lu,%lu +%lu,%lu @@ redan anbragt\n"
+
+#: ../svn/notify.c:669
+#, c-format
+msgid ""
+"\n"
+"Fetching external item into '%s':\n"
+msgstr ""
+"\n"
+"Hämtar externt objekt till \"%s\":\n"
+
+#: ../svn/notify.c:695
+#, c-format
+msgid "Error handling externals definition for '%s':"
+msgstr "Fel vid hantering av externa definitionen för \"%s\":"
+
+#: ../svn/notify.c:708
+#, c-format
+msgid "Updating '%s':\n"
+msgstr "Uppdaterar \"%s\":\n"
+
+#: ../svn/notify.c:722
+#, c-format
+msgid "Exported external at revision %ld.\n"
+msgstr "Exporterade extern katalog vid revision %ld.\n"
+
+#: ../svn/notify.c:723
+#, c-format
+msgid "Exported revision %ld.\n"
+msgstr "Exporterade revision %ld.\n"
+
+#: ../svn/notify.c:731
+#, c-format
+msgid "Checked out external at revision %ld.\n"
+msgstr "Checkade ut extern katalog vid revision %ld.\n"
+
+#: ../svn/notify.c:732
+#, c-format
+msgid "Checked out revision %ld.\n"
+msgstr "Checkade ut revision %ld.\n"
+
+#: ../svn/notify.c:743
+#, c-format
+msgid "Updated external to revision %ld.\n"
+msgstr "Uppdaterade extern katalog till revision %ld.\n"
+
+#: ../svn/notify.c:744
+#, c-format
+msgid "Updated to revision %ld.\n"
+msgstr "Uppdaterade till revision %ld.\n"
+
+#: ../svn/notify.c:752
+#, c-format
+msgid "External at revision %ld.\n"
+msgstr "Extern katalog är på revision %ld.\n"
+
+#: ../svn/notify.c:753
+#, c-format
+msgid "At revision %ld.\n"
+msgstr "Är på revision %ld.\n"
+
+#: ../svn/notify.c:765
+#, c-format
+msgid "External export complete.\n"
+msgstr "Extern export klar.\n"
+
+#: ../svn/notify.c:766
+#, c-format
+msgid "Export complete.\n"
+msgstr "Export klar.\n"
+
+#: ../svn/notify.c:773
+#, c-format
+msgid "External checkout complete.\n"
+msgstr "Extern utcheckning klar.\n"
+
+#: ../svn/notify.c:774
+#, c-format
+msgid "Checkout complete.\n"
+msgstr "Utcheckning klar.\n"
+
+#: ../svn/notify.c:781
+#, c-format
+msgid "External update complete.\n"
+msgstr "Extern uppdatering klar.\n"
+
+#: ../svn/notify.c:782
+#, c-format
+msgid "Update complete.\n"
+msgstr "Uppdatering klar.\n"
+
+#: ../svn/notify.c:798
+#, c-format
+msgid ""
+"\n"
+"Performing status on external item at '%s':\n"
msgstr ""
+"\n"
+"Utför statuskontroll av externt objekt vid \"%s\":\n"
+
+#: ../svn/notify.c:806
+#, c-format
+msgid "Status against revision: %6ld\n"
+msgstr "Status gentemot revision: %6ld\n"
+
+#: ../svn/notify.c:815
+#, c-format
+msgid "Sending copy of %s\n"
+msgstr "Skickar kopia av %s\n"
+
+#: ../svn/notify.c:816
+#, c-format
+msgid "Sending %s\n"
+msgstr "Skickar %s\n"
+
+#: ../svn/notify.c:827
+#, c-format
+msgid "Adding copy of (bin) %s\n"
+msgstr "Lägger till kopia av (binär) %s\n"
+
+#: ../svn/notify.c:828
+#, c-format
+msgid "Adding (bin) %s\n"
+msgstr "Lägger till (binär) %s\n"
+
+#: ../svn/notify.c:836
+#, c-format
+msgid "Adding copy of %s\n"
+msgstr "Lägger till kopia av %s\n"
+
+#: ../svn/notify.c:837
+#, c-format
+msgid "Adding %s\n"
+msgstr "Lägger till %s\n"
+
+#: ../svn/notify.c:846
+#, c-format
+msgid "Deleting copy of %s\n"
+msgstr "Raderar kopia av %s\n"
+
+#: ../svn/notify.c:847
+#, c-format
+msgid "Deleting %s\n"
+msgstr "Raderar %s\n"
+
+#: ../svn/notify.c:856
+#, c-format
+msgid "Replacing copy of %s\n"
+msgstr "Ersätter kopia av %s\n"
+
+#: ../svn/notify.c:857
+#, c-format
+msgid "Replacing %s\n"
+msgstr "Ersätter %s\n"
-#: ../svn/main.c:136
+#: ../svn/notify.c:867 ../svnsync/sync.c:327
+#, c-format
+msgid "Transmitting file data "
+msgstr "Skickar filinnehåll "
+
+#: ../svn/notify.c:876 ../svnadmin/svnadmin.c:1698
+#, c-format
+msgid "'%s' locked by user '%s'.\n"
+msgstr "\"%s\" låstes av användaren \"%s\".\n"
+
+#: ../svn/notify.c:882
+#, c-format
+msgid "'%s' unlocked.\n"
+msgstr "\"%s\" låstes upp.\n"
+
+#: ../svn/notify.c:909
+#, c-format
+msgid "--- Merging differences between repository URLs into '%s':\n"
+msgstr "--- Slår samman skillnader mellan arkiv-URL:er i \"%s\":\n"
+
+#: ../svn/notify.c:914
+#, c-format
+msgid "--- Merging r%ld into '%s':\n"
+msgstr "--- Sammanslagning av r%ld i \"%s\":\n"
+
+#: ../svn/notify.c:918
+#, c-format
+msgid "--- Reverse-merging r%ld into '%s':\n"
+msgstr "--- Omvänd sammanslagning av r%ld i \"%s\":\n"
+
+#: ../svn/notify.c:922
+#, c-format
+msgid "--- Merging r%ld through r%ld into '%s':\n"
+msgstr "--- Sammanslagning av r%ld till r%ld i \"%s\":\n"
+
+#: ../svn/notify.c:928
+#, c-format
+msgid "--- Reverse-merging r%ld through r%ld into '%s':\n"
+msgstr "--- Omvänd sammanslagning av r%ld till r%ld i \"%s\":\n"
+
+#: ../svn/notify.c:940
+#, c-format
+msgid "--- Recording mergeinfo for merge between repository URLs into '%s':\n"
+msgstr "--- Noterar information om sammanslagning mellan arkiv-URL:er i \"%s\":\n"
+
+#: ../svn/notify.c:950
+#, c-format
+msgid "--- Recording mergeinfo for merge of r%ld into '%s':\n"
+msgstr "--- Noterar information om sammanslagning av r%ld i \"%s\":\n"
+
+#: ../svn/notify.c:955
+#, c-format
+msgid "--- Recording mergeinfo for reverse merge of r%ld into '%s':\n"
+msgstr "--- Noterar information om omvänd sammanslagning av r%ld i \"%s\":\n"
+
+#: ../svn/notify.c:960
+#, c-format
+msgid "--- Recording mergeinfo for merge of r%ld through r%ld into '%s':\n"
+msgstr "--- Noterar information om sammanslagning av r%ld till r%ld i \"%s\":\n"
+
+#: ../svn/notify.c:965
+#, c-format
+msgid "--- Recording mergeinfo for reverse merge of r%ld through r%ld into '%s':\n"
+msgstr "--- Noterar information om omvänd sammanslagning av r%ld till r%ld i \"%s\":\n"
+
+#: ../svn/notify.c:975
+#, c-format
+msgid "--- Eliding mergeinfo from '%s':\n"
+msgstr "--- Utelämnar information om sammanslagning från \"%s\":\n"
+
+#: ../svn/notify.c:983
+#, c-format
+msgid "--- Merging differences between foreign repository URLs into '%s':\n"
+msgstr "--- Sammanslagning av skillnader mellan andra arkiv-URL:er i \"%s\":\n"
+
+#: ../svn/notify.c:989
+#, c-format
+msgid "--- Merging (from foreign repository) r%ld into '%s':\n"
+msgstr "--- Sammanslagning (från annat arkiv) av r%ld i \"%s\":\n"
+
+#: ../svn/notify.c:994
+#, c-format
+msgid "--- Reverse-merging (from foreign repository) r%ld into '%s':\n"
+msgstr "--- Omvänd sammanslagning (från annat arkiv) av r%ld i \"%s\":\n"
+
+#: ../svn/notify.c:999
+#, c-format
+msgid "--- Merging (from foreign repository) r%ld through r%ld into '%s':\n"
+msgstr "--- Sammanslagning (från annat arkiv) av r%ld till r%ld i \"%s\":\n"
+
+#: ../svn/notify.c:1005
+#, c-format
+msgid "--- Reverse-merging (from foreign repository) r%ld through r%ld into '%s':\n"
+msgstr "--- Omvänd sammanslagning (från annat arkiv) av r%ld till r%ld i \"%s\":\n"
+
+#: ../svn/notify.c:1041
+#, c-format
+msgid "property '%s' set on '%s'\n"
+msgstr "satte egenskapen \"%s\" på \"%s\"\n"
+
+#: ../svn/notify.c:1049
+#, c-format
+msgid "property '%s' deleted from '%s'.\n"
+msgstr "egenskapen \"%s\" raderades från \"%s\".\n"
+
+#: ../svn/notify.c:1057
+#, c-format
+msgid "Attempting to delete nonexistent property '%s' on '%s'\n"
+msgstr "Försök att ta bort den icke existerande egenskapen \"%s\" på \"%s\"\n"
+
+#: ../svn/notify.c:1066
+#, c-format
+msgid "property '%s' set on repository revision %ld\n"
+msgstr "satte egenskapen \"%s\" på revision %ld i arkivet\n"
+
+#: ../svn/notify.c:1074
+#, c-format
+msgid "property '%s' deleted from repository revision %ld\n"
+msgstr "egenskapen \"%s\" raderades från revision %ld i arkivet\n"
+
+#: ../svn/notify.c:1081
+#, c-format
+msgid "Upgraded '%s'\n"
+msgstr "Uppgraderade \"%s\"\n"
+
+#: ../svn/notify.c:1087
+#, c-format
+msgid "Redirecting to URL '%s':\n"
+msgstr "Omleder till URL \"%s\":\n"
+
+#: ../svn/notify.c:1115
+#, c-format
+msgid "--- Copying from foreign repository URL '%s':\n"
+msgstr "--- Kopierar från annat arkiv med URL \"%s\":\n"
+
+#: ../svn/notify.c:1124
+#, c-format
+msgid "Breaking move with source path '%s'\n"
+msgstr "Bruten flyttning med källsökväg \"%s\"\n"
+
+#: ../svn/propdel-cmd.c:88
+#, c-format
+msgid "Cannot specify revision for deleting versioned property '%s'"
+msgstr "Revision kan ej anges vid radering av versionshanterad egenskap \"%s\""
+
+#: ../svn/propedit-cmd.c:62 ../svn/propedit-cmd.c:341
+#, c-format
+msgid "Set new value for property '%s' on '%s'\n"
+msgstr "Satte nytt värde på egenskapen \"%s\" för \"%s\"\n"
+
+#: ../svn/propedit-cmd.c:96 ../svn/propset-cmd.c:97
+msgid "--encoding option applies only to textual Subversion-controlled properties"
+msgstr "Flaggan --encoding kan bara anges för Subversions egna textbaserade egenskaper"
+
+#: ../svn/propedit-cmd.c:162
+#, c-format
+msgid "Set new value for property '%s' on revision %ld\n"
+msgstr "Satte nytt värde på egenskapen \"%s\" i revision %ld\n"
+
+#: ../svn/propedit-cmd.c:168
+#, c-format
+msgid "No changes to property '%s' on revision %ld\n"
+msgstr "Inga ändringar av egenskapen \"%s\" i revision %ld\n"
+
+#: ../svn/propedit-cmd.c:176
+#, c-format
+msgid "Cannot specify revision for editing versioned property '%s'"
+msgstr "Revision kan ej anges vid editering av versionshanterad egenskap \"%s\""
+
+#: ../svn/propedit-cmd.c:204 ../svn/propset-cmd.c:172
+msgid "Explicit target argument required"
+msgstr "Explicit argument för mål krävs"
+
+#: ../svn/propedit-cmd.c:271
+#, c-format
+msgid "'%s' does not appear to be a working copy path"
+msgstr "\"%s\" verkar inte vara en sökväg till en arbetskopia"
+
+#: ../svn/propedit-cmd.c:348
+#, c-format
+msgid "No changes to property '%s' on '%s'\n"
+msgstr "Egenskapen \"%s\" för \"%s\" ändrades ej\n"
+
+#: ../svn/propget-cmd.c:66
+msgid "Error writing to stream"
+msgstr "Fel vid skrivning till ström"
+
+#: ../svn/propget-cmd.c:186 ../svn/proplist-cmd.c:156
+#: ../svn/proplist-cmd.c:160 ../svnlook/svnlook.c:1754
+#: ../svnlook/svnlook.c:1908
+#, c-format
+msgid ""
+"Inherited properties on '%s',\n"
+"from '%s':\n"
+msgstr ""
+"Ärvda egenskaper på \"%s\",\n"
+"från \"%s\":\n"
+
+#. Not a --revprop
+#: ../svn/propget-cmd.c:196 ../svn/proplist-cmd.c:175
+#: ../svnlook/svnlook.c:1790 ../svnlook/svnlook.c:1943
+#, c-format
+msgid "Properties on '%s':\n"
+msgstr "Egenskaper på \"%s\":\n"
+
+#: ../svn/propget-cmd.c:326
+msgid "--verbose cannot be used with --revprop or --strict or --xml"
+msgstr "--verbose kan inte användas tillsammans med --revprop, --strict eller --xml"
+
+#: ../svn/propget-cmd.c:358 ../svn/proplist-cmd.c:214
+msgid "--show-inherited-props can't be used with --revprop"
+msgstr "--show-inherited-props kan inte användas tillsammans med --revprop"
+
+#: ../svn/propget-cmd.c:425
+msgid "Strict output of property values only available for single-target, non-recursive propget operations"
+msgstr "Strikt utmatning av egenskapsvärden går endast för enstaka mål och utan rekursion"
+
+#: ../svn/proplist-cmd.c:246
+#, c-format
+msgid "Unversioned properties on revision %ld:\n"
+msgstr "Ej versionshanterade egenskaper på revision %ld:\n"
+
+#: ../svn/proplist-cmd.c:321
+msgid "Could not display properties of all targets because some targets don't exist"
+msgstr "Kunde inte visa egenskaper hos alla mål eftersom några mål inte finns"
+
+#: ../svn/proplist-cmd.c:326
+msgid "Could not display properties of all targets because some targets are not versioned"
+msgstr "Kunde inte visa egenskaper hos alla mål eftersom några mål inte är versionshanterade"
+
+#: ../svn/props.c:66
+msgid "Must specify the revision as a number, a date or 'HEAD' when operating on a revision property"
+msgstr "Revision måste anges som ett tal, datum eller som \"HEAD\" vid arbete med revisionsegenskaper"
+
+#: ../svn/props.c:73
+msgid "Wrong number of targets specified"
+msgstr "Fel antal mål"
+
+#: ../svn/props.c:82
+msgid "Either a URL or versioned item is required"
+msgstr "En URL eller ett versionshanterat objekt krävs"
+
+#: ../svn/props.c:107
+#, c-format
+msgid ""
+"To turn off the %s property, use 'svn propdel';\n"
+"setting the property to '%s' will not turn it off."
+msgstr ""
+"För att slå av egenskapen %s, använd \"svn propdel\";\n"
+"att sätta egenskapen till \"%s\" slår inte av den."
+
+#: ../svn/props.c:177
+#, c-format
+msgid "(To set the '%s' property, re-run with '--force'.)"
+msgstr "(För att sätta egenskapen \"%s\", kör igen med \"--force\".)"
+
+#: ../svn/props.c:182
+#, c-format
+msgid "(To edit the '%s' property, re-run with '--force'.)"
+msgstr "(För att ändra egenskapen \"%s\", kör igen med \"--force\".)"
+
+#: ../svn/props.c:188
+#, c-format
+msgid "(To use the '%s' property, re-run with '--force'.)"
+msgstr "(För att använda egenskapen \"%s\", kör igen med \"--force\".)"
+
+#: ../svn/props.c:202
+#, c-format
+msgid "'%s' is not a valid %s property name; re-run with '--force' to set it"
+msgstr "\"%s\" är inget giltigt namn på en %s-egenskap; kör igen med \"--force\" för att sätta den"
+
+#: ../svn/props.c:208
+#, c-format
+msgid "'%s' is not a valid %s property name; re-run with '--force' to edit it"
+msgstr "\"%s\" är inget giltigt namn på en %s-egenskap; kör igen med \"--force\" för att ändra den"
+
+#: ../svn/props.c:215
+#, c-format
+msgid "'%s' is not a valid %s property name; re-run with '--force' to use it"
+msgstr "\"%s\" är inget giltigt namn på en %s-egenskap; kör igen med \"--force\" för att använda den"
+
+#: ../svn/props.c:281 ../svn/props.c:332
+#, c-format
+msgid ""
+"'%s' is not a valid %s property name; did you mean '%s'?\n"
+"%s"
+msgstr ""
+"\"%s\" är inget giltigt namn på en %s-egenskap; menade du \"%s\"?\n"
+"%s"
+
+#: ../svn/props.c:340
+#, c-format
+msgid ""
+"'%s' is not a valid %s property name\n"
+"Did you mean '%s' or '%s'?\n"
+"%s"
+msgstr ""
+"\"%s\" är inget giltigt namn på en %s-egenskap\n"
+"Menade du \"%s\" eller \"%s\"?\n"
+"%s"
+
+#: ../svn/props.c:350
+#, c-format
+msgid ""
+"'%s' is not a valid %s property name\n"
+"Did you mean '%s', '%s' or '%s'?\n"
+"%s"
+msgstr ""
+"\"%s\" är inget giltigt namn på en %s-egenskap\n"
+"Menade du \"%s\", \"%s\" eller \"%s\"?\n"
+"%s"
+
+#: ../svn/propset-cmd.c:132
+#, c-format
+msgid "Cannot specify revision for setting versioned property '%s'"
+msgstr "Revision kan ej anges vid ändring av versionshanterad egenskap \"%s\""
+
+#: ../svn/propset-cmd.c:165
+#, c-format
+msgid "Explicit target required ('%s' interpreted as prop value)"
+msgstr "Mål måste anges (\"%s\" tolkas som egenskapsvärde)"
+
+#: ../svn/resolve-cmd.c:79
+msgid "missing --accept option"
+msgstr "flaggan --accept saknas"
+
+#: ../svn/resolve-cmd.c:84
+msgid "invalid 'accept' ARG"
+msgstr "ogiltigt \"accept\"-argument"
+
+#: ../svn/resolve-cmd.c:127
+msgid "Failure occurred resolving one or more conflicts"
+msgstr "Fel vid lösning av en eller flera konflikter"
+
+#: ../svn/revert-cmd.c:77
+msgid "Try 'svn revert --depth infinity' instead?"
+msgstr "Försök med \"svn revert --depth infinity\" istället?"
+
+#: ../svn/status-cmd.c:97
+#, c-format
+msgid " Text conflicts: %u\n"
+msgstr " Textkonflikter: %u\n"
+
+#: ../svn/status-cmd.c:101
+#, c-format
+msgid " Property conflicts: %u\n"
+msgstr " Egenskapskonflikter: %u\n"
+
+#: ../svn/status-cmd.c:105
+#, c-format
+msgid " Tree conflicts: %u\n"
+msgstr " Trädkonflikter: %u\n"
+
+#: ../svn/status-cmd.c:397
+#, c-format
+msgid ""
+"\n"
+"--- Changelist '%s':\n"
+msgstr ""
+"\n"
+"--- Ändringslista \"%s\":\n"
+
+#: ../svn/status.c:318
+#, c-format
+msgid "swapped places with %s"
+msgstr "bytt plats med %s"
+
+#: ../svn/status.c:333
+#, c-format
+msgid "moved from %s"
+msgstr "flyttad från %s"
+
+#: ../svn/status.c:345
+#, c-format
+msgid "moved to %s"
+msgstr "flyttad till %s"
+
+#: ../svn/svn.c:147
msgid "force operation to run"
msgstr "tvinga operationen att utföras"
-#: ../svn/main.c:138
+#: ../svn/svn.c:149
msgid "force validity of log message source"
msgstr "acceptera alltid det angivna loggmeddelandet"
-#: ../svn/main.c:139 ../svn/main.c:140 ../svnadmin/main.c:244
-#: ../svnadmin/main.c:247 ../svndumpfilter/main.c:916
-#: ../svndumpfilter/main.c:919 ../svnlook/main.c:103 ../svnlook/main.c:115
-#: ../svnsync/main.c:212 ../svnsync/main.c:214
+#: ../svn/svn.c:150 ../svn/svn.c:151 ../svnadmin/svnadmin.c:208
+#: ../svnadmin/svnadmin.c:211 ../svndumpfilter/svndumpfilter.c:1019
+#: ../svndumpfilter/svndumpfilter.c:1022 ../svnlook/svnlook.c:114
+#: ../svnlook/svnlook.c:126 ../svnsync/svnsync.c:244 ../svnsync/svnsync.c:246
msgid "show help on a subcommand"
msgstr "visa hjälp för ett underkommando"
-#: ../svn/main.c:141
+#: ../svn/svn.c:152
msgid "specify log message ARG"
msgstr "ange loggmeddelande ARG"
-#: ../svn/main.c:142
-#, fuzzy
+#: ../svn/svn.c:153
msgid "print nothing, or only summary information"
-msgstr "visa extrainformation"
+msgstr "ingen utmatning, eller bara sammanfattning"
-#: ../svn/main.c:143
+#: ../svn/svn.c:154
msgid "descend recursively, same as --depth=infinity"
-msgstr ""
+msgstr "gå ner rekursivt, som --depth=infinity"
-#: ../svn/main.c:144
+#: ../svn/svn.c:155
msgid "obsolete; try --depth=files or --depth=immediates"
msgstr ""
+"föråldrat; försök med --depth=files\n"
+" eller --depth=immediates"
-#: ../svn/main.c:146
-msgid "the change made by revision ARG (like -r ARG-1:ARG)\n"
-msgstr ""
-
-#: ../svn/main.c:150
-msgid "ARG (some commands also take ARG1:ARG2 range)\n"
+#: ../svn/svn.c:157
+msgid ""
+"the change made by revision ARG (like -r ARG-1:ARG)\n"
+" If ARG is negative this is like -r ARG:ARG-1\n"
+" If ARG is of the form ARG1-ARG2 then this is like\n"
+" ARG1:ARG2, where ARG1 is inclusive"
msgstr ""
+"ändringen som motsvaras av revisionen ARG\n"
+" (som -r ARG-1:ARG). Om ARG är negativt är detta\n"
+" samma som -r ARG:ARG-1.\n"
+" Om ARG är på formen ARG1-ARG2 så är detta samma\n"
+" som ARG1:ARG2, där ARG1 ingår"
-#: ../svn/main.c:165
+#: ../svn/svn.c:165
+msgid ""
+"ARG (some commands also take ARG1:ARG2 range)\n"
+" A revision argument can be one of:\n"
+" NUMBER revision number\n"
+" '{' DATE '}' revision at start of the date\n"
+" 'HEAD' latest in repository\n"
+" 'BASE' base rev of item's working copy\n"
+" 'COMMITTED' last commit at or before BASE\n"
+" 'PREV' revision just before COMMITTED"
+msgstr ""
+"ARG (en del kommandon accepterar även ett område\n"
+" (ARG1:ARG2))\n"
+" Ett revisionsargument kan vara något av:\n"
+" TAL revisionsnummer\n"
+" \"{\"DATUM\"}\" revision vid början av angiven dag\n"
+" \"HEAD\" senaste revisionen i arkivet\n"
+" \"BASE\" basrevisionen för objektets\n"
+" arbetskopia\n"
+" \"COMMITTED\" revisionen för den senaste\n"
+" arkiveringen vid eller före BASE\n"
+" \"PREV\" revisionen före COMMITTED"
+
+#: ../svn/svn.c:180
msgid "read log message from file ARG"
msgstr "läs loggmeddelande från filen ARG"
-#: ../svn/main.c:167
+#: ../svn/svn.c:182
msgid "give output suitable for concatenation"
msgstr "skapa utdata som kan slås ihop"
-#: ../svn/main.c:169
+#: ../svn/svn.c:184
msgid "treat value as being in charset encoding ARG"
msgstr ""
"betrakta värdet som om det använder\n"
" teckenkodningen ARG"
-#: ../svn/main.c:170 ../svnadmin/main.c:250 ../svndumpfilter/main.c:922
-#: ../svnlook/main.c:145 ../svnrdump/svnrdump.c:89 ../svnserve/main.c:220
-#: ../svnsync/main.c:210 ../svnversion/main.c:135
+#: ../svn/svn.c:185 ../svnadmin/svnadmin.c:214
+#: ../svndumpfilter/svndumpfilter.c:1025 ../svnlook/svnlook.c:168
+#: ../svnrdump/svnrdump.c:144 ../svnserve/svnserve.c:289
+#: ../svnsync/svnsync.c:242 ../svnversion/svnversion.c:141
msgid "show program version information"
msgstr "visa programversionsinformation"
-#: ../svn/main.c:171
+#: ../svn/svn.c:186
msgid "print extra information"
msgstr "visa extrainformation"
-#: ../svn/main.c:172
+#: ../svn/svn.c:187
msgid "display update information"
msgstr "visa uppdateringsinformation"
-#: ../svn/main.c:173 ../svnrdump/svnrdump.c:81
+#: ../svn/svn.c:188 ../svnrdump/svnrdump.c:128
msgid "specify a username ARG"
msgstr "ange ett användarnamn ARG"
-#: ../svn/main.c:174 ../svnrdump/svnrdump.c:82
+#: ../svn/svn.c:189 ../svnrdump/svnrdump.c:130
msgid "specify a password ARG"
msgstr "ange ett lösenord ARG"
-#: ../svn/main.c:176
-msgid "Default: '-u'. When Subversion is invoking an\n"
-msgstr ""
-
-#: ../svn/main.c:208
+#: ../svn/svn.c:191
+msgid ""
+"Specify differencing options for external diff or\n"
+" internal diff or blame. Default: '-u'. Options are\n"
+" separated by spaces. Internal diff and blame take:\n"
+" -u, --unified: Show 3 lines of unified context\n"
+" -b, --ignore-space-change: Ignore changes in\n"
+" amount of white space\n"
+" -w, --ignore-all-space: Ignore all white space\n"
+" --ignore-eol-style: Ignore changes in EOL style\n"
+" -p, --show-c-function: Show C function name"
+msgstr ""
+"Ange jämförelseväljare för externt diff-program\n"
+" eller de inbyggda underkommandona \"diff\" eller\n"
+" \"blame\".\n"
+" Skönsvärde: \"-u\". Väljare separeras av tomrum.\n"
+" För inbyggda \"diff\" och \"blame\" tillåts:\n"
+" -u, --unified: Visa tre rader av sammanhang\n"
+" -b, --ignore-space-change:\n"
+" Bortse från ändringar av mängden tomrum\n"
+" -w, --ignore-all-space:\n"
+" Bortse från allt tomrum\n"
+" --ignore-eol-style\n"
+" Bortse från ändringar av radslutstecken\n"
+" -p, --show-c-function: Visa funktionsnamn i C"
+
+#: ../svn/svn.c:209
msgid "pass contents of file ARG as additional args"
msgstr ""
"använd innehållet i filen ARG som ytterligare\n"
" argument"
-#: ../svn/main.c:210
-msgid "limit operation by depth ARG ('empty', 'files',\n"
+#: ../svn/svn.c:211
+msgid ""
+"limit operation by depth ARG ('empty', 'files',\n"
+" 'immediates', or 'infinity')"
msgstr ""
+"begränsa kommandot till djupet ARG (\"empty\",\n"
+" \"files\", \"immediates\" eller \"infinity\")"
-#: ../svn/main.c:214
-msgid "set new working copy depth to ARG ('exclude',\n"
+#: ../svn/svn.c:215
+msgid ""
+"set new working copy depth to ARG ('exclude',\n"
+" 'empty', 'files', 'immediates', or 'infinity')"
msgstr ""
+"sätt arbetskopians djup till ARG (\"exclude\",\n"
+" \"empty\", \"files\", \"immediates\" eller \"infinity\")"
-#: ../svn/main.c:217 ../svnlook/main.c:148
+#: ../svn/svn.c:218 ../svnlook/svnlook.c:171
msgid "output in XML"
msgstr "visa information som XML"
-#: ../svn/main.c:218
+#: ../svn/svn.c:219
msgid "use strict semantics"
msgstr "använd strikt semantik"
-#: ../svn/main.c:220
+#: ../svn/svn.c:221
msgid "do not cross copies while traversing history"
msgstr "följ inte kopieringar när historiken gås igenom"
-#: ../svn/main.c:222
-msgid "disregard default and svn:ignore property ignores"
-msgstr "bortse ifrån svn:ignore och standarduteslutningar"
+#: ../svn/svn.c:223
+msgid ""
+"disregard default and svn:ignore and\n"
+" svn:global-ignores property ignores"
+msgstr ""
+"bortse ifrån svn:ignore, svn:global-ignores och\n"
+" standarduteslutningar"
-#: ../svn/main.c:224 ../svnrdump/svnrdump.c:85 ../svnsync/main.c:172
+#: ../svn/svn.c:227 ../svnrdump/svnrdump.c:140 ../svnsync/svnsync.c:188
msgid "do not cache authentication tokens"
msgstr "cacha inte autentiseringsinformation"
-#: ../svn/main.c:226
-msgid "accept unknown SSL server certificates without\n"
+#: ../svn/svn.c:229 ../svnrdump/svnrdump.c:154 ../svnsync/svnsync.c:198
+msgid ""
+"accept SSL server certificates from unknown\n"
+" certificate authorities without prompting (but only\n"
+" with '--non-interactive')"
msgstr ""
+"godta SSL-servercertifikat från okända utfärdare\n"
+" utan att fråga (men bara med \"--non-interactive\")"
-#: ../svn/main.c:230 ../svnrdump/svnrdump.c:83 ../svnsync/main.c:170
-msgid "do no interactive prompting"
-msgstr "ställ inga interaktiva frågor"
+#: ../svn/svn.c:235 ../svnrdump/svnrdump.c:132 ../svnsync/svnsync.c:180
+msgid ""
+"do no interactive prompting (default is to prompt\n"
+" only if standard input is a terminal device)"
+msgstr ""
+"ingen interaktiv fråga (vanligtvis ställs frågor\n"
+" bara om standardinmatningen är en terminal)"
-#: ../svn/main.c:232
+#: ../svn/svn.c:239 ../svnrdump/svnrdump.c:136 ../svnsync/svnsync.c:184
+msgid ""
+"do interactive prompting even if standard input\n"
+" is not a terminal device"
+msgstr ""
+"ställ interaktiva frågor även om\n"
+" standardinmatningen inte är en terminal"
+
+#: ../svn/svn.c:243
msgid "try operation but make no changes"
msgstr "testa operationen, men gör inga ändringar"
-#: ../svn/main.c:234 ../svnlook/main.c:124
-msgid "do not print differences for deleted files"
-msgstr "visa inte skillnader för raderade filer"
-
-#: ../svn/main.c:236
-msgid "notice ancestry when calculating differences"
-msgstr "ta hänsyn till ursprung när skillnader beräknas"
-
-#: ../svn/main.c:238
-msgid "ignore ancestry when calculating merges"
-msgstr "bortse ifrån ursprung när sammanslagningar beräknas"
+#: ../svn/svn.c:245
+msgid "disable merge tracking; diff nodes as if related"
+msgstr ""
+"stäng av sammanslagningsföljning; jämför som om\n"
+" noderna var besläktade"
-#: ../svn/main.c:240
+#: ../svn/svn.c:247
msgid "ignore externals definitions"
msgstr "bortse ifrån externals-definitioner"
-#: ../svn/main.c:241
-msgid "use ARG as diff command"
-msgstr "använd ARG som diff-kommando"
-
-#: ../svn/main.c:242
+#: ../svn/svn.c:248
msgid "use ARG as merge command"
msgstr "använd ARG som merge-kommando"
-#: ../svn/main.c:243
+#: ../svn/svn.c:249
msgid "use ARG as external editor"
msgstr "använd ARG som extern editor"
-#: ../svn/main.c:245
+#: ../svn/svn.c:251
msgid "merge only mergeinfo differences"
msgstr ""
+"slå bara ihop skillnader i\n"
+" sammanslagningsinformationen"
-#: ../svn/main.c:246
+#: ../svn/svn.c:252
msgid "use ARG as the older target"
msgstr "använd ARG som det äldre målet"
-#: ../svn/main.c:247
+#: ../svn/svn.c:253
msgid "use ARG as the newer target"
msgstr "använd ARG som det nyare målet"
-#: ../svn/main.c:249
+#: ../svn/svn.c:255
msgid "operate on a revision property (use with -r)"
msgstr "arbeta med en revisionsegenskap (används med -r)"
-#: ../svn/main.c:250
+#: ../svn/svn.c:256
msgid "relocate via URL-rewriting"
msgstr "omlokalisera genom att skriva om URL:er"
-#: ../svn/main.c:252 ../svnadmin/main.c:286 ../svnrdump/svnrdump.c:79
-#: ../svnsync/main.c:194
+#: ../svn/svn.c:258 ../svnadmin/svnadmin.c:256 ../svnrdump/svnrdump.c:126
+#: ../svnsync/svnsync.c:212
msgid "read user configuration files from directory ARG"
msgstr ""
"läs användarens konfigurationsfiler från katalogen\n"
" ARG"
-#: ../svn/main.c:254
-#, fuzzy
-msgid "set user configuration option in the format:\n"
+#: ../svn/svn.c:260 ../svnrdump/svnrdump.c:146 ../svnsync/svnsync.c:214
+msgid ""
+"set user configuration option in the format:\n"
+" FILE:SECTION:OPTION=[VALUE]\n"
+" For example:\n"
+" servers:global:http-library=serf"
msgstr ""
-"läs användarens konfigurationsfiler från katalogen\n"
-" ARG"
+"sätt användarens konfigurationsinställning på\n"
+" formatet FIL:SEKTION:INSTÄLLNING=[VÄRDE]\n"
+" Till exempel:\n"
+" servers:global:http-library=serf"
-#: ../svn/main.c:261
+#: ../svn/svn.c:267
msgid "enable automatic properties"
msgstr "aktivera automatiska egenskaper"
-#: ../svn/main.c:262
+#: ../svn/svn.c:268
msgid "disable automatic properties"
msgstr "deaktivera automatiska egenskaper"
-#: ../svn/main.c:264
-msgid "use a different EOL marker than the standard\n"
+#: ../svn/svn.c:270
+msgid ""
+"use a different EOL marker than the standard\n"
+" system marker for files with the svn:eol-style\n"
+" property set to 'native'.\n"
+" ARG may be one of 'LF', 'CR', 'CRLF'"
msgstr ""
+"använd andra tecken för radslut än vad systemet\n"
+" normalt använder för filer med egenskapen\n"
+" \"eol-style\" satt till \"native\". ARG kan vara\n"
+" något av \"LF\", \"CR\" och \"CRLF\""
-#: ../svn/main.c:271
+#: ../svn/svn.c:277
msgid "maximum number of log entries"
msgstr "maximalt antal loggposter"
-#: ../svn/main.c:272
+#: ../svn/svn.c:278
msgid "don't unlock the targets"
msgstr "lås inte upp målen"
-#: ../svn/main.c:273
-msgid "show a summary of the results"
-msgstr "visa en sammanfattning av resultatet"
-
-#: ../svn/main.c:274
+#: ../svn/svn.c:279
msgid "remove changelist association"
msgstr "ta bort koppling till ändringslista"
-#: ../svn/main.c:276
+#: ../svn/svn.c:281
msgid "operate only on members of changelist ARG"
msgstr "arbeta endast med medlemmar av ändringslistan ARG"
-#: ../svn/main.c:278
-#, fuzzy
+#: ../svn/svn.c:283
msgid "don't delete changelists after commit"
-msgstr "ta inte bort ändringslistan efter arkivering"
+msgstr "ta inte bort ändringslistor efter arkivering"
-#: ../svn/main.c:279
-#, fuzzy
+#: ../svn/svn.c:284
msgid "keep path in working copy"
-msgstr "Sökväg är inte en fil i en arbetskopia"
+msgstr "behåll sökväg i arbetskopia"
-#: ../svn/main.c:281
-#, fuzzy
+#: ../svn/svn.c:286
msgid "retrieve all revision properties"
-msgstr "Filtrera inte revisionsegenskaper."
+msgstr "hämta alla revisionsegenskaper"
-#: ../svn/main.c:283
-#, fuzzy
+#: ../svn/svn.c:288
msgid "retrieve no revision properties"
-msgstr "Filtrera inte revisionsegenskaper."
+msgstr "hämta inga revisionsegenskaper"
-#: ../svn/main.c:285
-#, fuzzy
-msgid "set revision property ARG in new revision\n"
-msgstr "Ej versionshanterade egenskaper på revision %ld:\n"
+#: ../svn/svn.c:290
+msgid ""
+"set revision property ARG in new revision\n"
+" using the name[=value] format"
+msgstr ""
+"sätt revisionsegenskapen ARG i ny revision\n"
+" på formatet namn[=värde]"
-#: ../svn/main.c:288
-#, fuzzy
+#: ../svn/svn.c:293
msgid "make intermediate directories"
-msgstr "Kan inte skapa några kataloger över huvud taget"
-
-#: ../svn/main.c:290
-#, fuzzy
-msgid "use/display additional information from merge\n"
-msgstr "visa uppdateringsinformation"
+msgstr "skapa mellanliggande kataloger"
-#: ../svn/main.c:294
-msgid "specify automatic conflict resolution action\n"
+#: ../svn/svn.c:295
+msgid ""
+"use/display additional information from merge\n"
+" history"
msgstr ""
+"använd/visa ytterligare information från\n"
+" sammanslagningshistorien"
-#: ../svn/main.c:302
-msgid "specify which collection of revisions to display\n"
+#: ../svn/svn.c:299
+msgid ""
+"specify automatic conflict resolution action\n"
+" ('postpone', 'working', 'base', 'mine-conflict',\n"
+" 'theirs-conflict', 'mine-full', 'theirs-full',\n"
+" 'edit', 'launch')\n"
+" (shorthand: 'p', 'mc', 'tc', 'mf', 'tf', 'e', 'l')"
msgstr ""
+"ange automatisk konfliktlösning\n"
+" (\"postpone\", \"working\", \"base\", \"mine-conflict\",\n"
+" \"theirs-conflict\", \"mine-full\", \"theirs-full\",\n"
+" \"edit\", \"launch\")\n"
+" (förkortningar: \"p\", \"mc\", \"tc\", \"mf\", \"tf\",\n"
+" \"e\", \"l\")"
-#: ../svn/main.c:306
-msgid "merge a branch back into its parent branch"
+#: ../svn/svn.c:310
+msgid ""
+"specify which collection of revisions to display\n"
+" ('merged', 'eligible')"
msgstr ""
+"ange slag av revisioner att visa\n"
+" (\"merged\", \"eligible\")"
-#: ../svn/main.c:308
-msgid "number of leading path components to strip from\n"
-msgstr ""
+#: ../svn/svn.c:314
+msgid "deprecated"
+msgstr "avrådes"
-#: ../svn/main.c:324
-msgid "don't diff copied or moved files with their source"
+#: ../svn/svn.c:316
+msgid ""
+"number of leading path components to strip from\n"
+" paths parsed from the patch file. --strip 0\n"
+" is the default and leaves paths unmodified.\n"
+" --strip 1 would change the path\n"
+" 'doc/fudge/crunchy.html' to 'fudge/crunchy.html'.\n"
+" --strip 2 would leave just 'crunchy.html'\n"
+" The expected component separator is '/' on all\n"
+" platforms. A leading '/' counts as one component."
msgstr ""
+"antal inledande kataloger att avlägsna från\n"
+" sökvägar tagna från patchfilen. --strip 0 är\n"
+" skönsvärdet och behåller sökvägarna som de är.\n"
+" --strip 1 skulle ändra sökvägen\n"
+" \"dok/kola/knaprig.html\" till \"kola/knaprig.html\".\n"
+" --strip 2 skulle bara behålla \"knaprig.html\".\n"
+" Katalogseparatorn är \"/\" på alla plattformar.\n"
+" Ett \"/\" i början räknas som en katalog."
-#: ../svn/main.c:326
-#, fuzzy
+#: ../svn/svn.c:332
msgid "don't expand keywords"
-msgstr "Kan inte dela upp tid"
+msgstr "expandera inte nyckelord"
-#: ../svn/main.c:328
+#: ../svn/svn.c:334
msgid "apply the unidiff in reverse"
-msgstr ""
+msgstr "anbringa unidiffen baklänges"
-#: ../svn/main.c:330
+#: ../svn/svn.c:336
msgid "ignore whitespace during pattern matching"
-msgstr ""
+msgstr "strunta i tomrum vid mönstermatchning"
-#: ../svn/main.c:331
+#: ../svn/svn.c:337
msgid "produce diff output"
-msgstr ""
+msgstr "utdata i form av skillnader"
+
+#. maps to show_diff
+#. diff options
+#: ../svn/svn.c:339 ../svnlook/svnlook.c:138
+msgid "use ARG as diff command"
+msgstr "använd ARG som diff-kommando"
-#: ../svn/main.c:333
+#: ../svn/svn.c:341
msgid "override diff-cmd specified in config file"
+msgstr "kringgå \"diff-cmd\" angiven i inställningsfilen"
+
+#: ../svn/svn.c:343 ../svnlook/svnlook.c:132
+msgid "do not print differences for added files"
+msgstr "visa inte skillnader för tillagda filer"
+
+#: ../svn/svn.c:345 ../svnlook/svnlook.c:135
+msgid "do not print differences for deleted files"
+msgstr "visa inte skillnader för raderade filer"
+
+#: ../svn/svn.c:347
+msgid "don't diff copied or moved files with their source"
msgstr ""
+"jämför inte kopierade eller flyttade filer\n"
+" med deras källa"
+
+#: ../svn/svn.c:349
+msgid "diff unrelated nodes as delete and add"
+msgstr "jämför obesläktade noder som radering och tillägg"
+
+#: ../svn/svn.c:350
+msgid "show a summary of the results"
+msgstr "visa en sammanfattning av resultatet"
-#: ../svn/main.c:335
+#: ../svn/svn.c:352
msgid "use git's extended diff format"
+msgstr "använd git:s utökade format"
+
+#: ../svn/svn.c:354 ../svnlook/svnlook.c:141
+msgid "ignore properties during the operation"
+msgstr "strunta i egenskaper"
+
+#: ../svn/svn.c:356 ../svnlook/svnlook.c:144
+msgid "show only properties during the operation"
+msgstr "visa endast egenskaper"
+
+#: ../svn/svn.c:358
+msgid ""
+"generate diff suitable for generic third-party\n"
+" patch tools; currently the same as\n"
+" --show-copies-as-adds --ignore-properties"
msgstr ""
+"generera skillnader anpassade till allmänna\n"
+" patch-verktyg; för närvarande samma som\n"
+" \"--show-copies-as-adds --ignore-properties\""
-#: ../svn/main.c:337
-msgid "Allow merge into mixed-revision working copy.\n"
+#: ../svn/svn.c:366
+msgid ""
+"Allow operation on mixed-revision working copy.\n"
+" Use of this option is not recommended!\n"
+" Please run 'svn update' instead."
msgstr ""
+"Tillåt arbetskopia med blandad revision.\n"
+" Användning av denna flagga rekommenderas inte!\n"
+" Kör \"svn update\" istället."
-#: ../svn/main.c:408
+#: ../svn/svn.c:372
+msgid ""
+"Also commit file and dir externals reached by\n"
+" recursion. This does not include externals with a\n"
+" fixed revision. (See the svn:externals property)"
+msgstr ""
+"Arkivera även externa filer och kataloger som nås\n"
+" rekursivt, utom externa objekt med en\n"
+" angiven revision. (Se egenskapen svn:externals)"
+
+#: ../svn/svn.c:378
+msgid "retrieve target's inherited properties"
+msgstr "hämta målets ärvda egenskaper"
+
+#: ../svn/svn.c:380
+msgid "use ARG as search pattern (glob syntax)"
+msgstr "använd ARG som sökmönster (skalsyntax)"
+
+#: ../svn/svn.c:382
+msgid "combine ARG with the previous search pattern"
+msgstr "kombinera ARG med föregående sökmönster"
+
+#: ../svn/svn.c:430
msgid ""
"Put files and directories under version control, scheduling\n"
"them for addition to repository. They will be added in next commit.\n"
@@ -8104,11 +10556,11 @@ msgstr ""
"läggas till i arkivet. De kommer att läggas till vid nästa arkivering.\n"
"användning: add PATH...\n"
-#: ../svn/main.c:413
+#: ../svn/svn.c:435
msgid "add intermediate parents"
-msgstr ""
+msgstr "skapa mellanliggande förälderkataloger"
-#: ../svn/main.c:416
+#: ../svn/svn.c:438
msgid ""
"Output the content of specified files or\n"
"URLs with revision and author information in-line.\n"
@@ -8123,7 +10575,7 @@ msgstr ""
"\n"
"Om REV anges, bestämmer den i vilken revision målet först letas upp.\n"
-#: ../svn/main.c:425
+#: ../svn/svn.c:447
msgid ""
"Output the content of specified files or URLs.\n"
"usage: cat TARGET[@REV]...\n"
@@ -8132,19 +10584,22 @@ msgid ""
" looked up.\n"
msgstr ""
"Visa innehållet i angivna filer eller URL:er.\n"
-"användning: cat MÅL[@rEV]...\n"
+"användning: cat MÅL[@REV]...\n"
"\n"
"Om REV anges, bestämmer den i vilken revision målet först letas upp.\n"
-#: ../svn/main.c:433
+#: ../svn/svn.c:455
msgid ""
"Associate (or dissociate) changelist CLNAME with the named files.\n"
"usage: 1. changelist CLNAME PATH...\n"
" 2. changelist --remove PATH...\n"
msgstr ""
+"Förknippa ändringslistan ÄLNAMN med de uppräknade filerna,\n"
+"eller frigör dem från detta samband.\n"
+"användning: 1. changelist ÄLNAMN SÖKVÄG...\n"
+" 2. changelist --remove SÖKVÄG...\n"
-#: ../svn/main.c:439
-#, fuzzy
+#: ../svn/svn.c:461
msgid ""
"Check out a working copy from a repository.\n"
"usage: checkout URL[@REV]... [PATH]\n"
@@ -8172,7 +10627,7 @@ msgid ""
" reporting the action taken.\n"
msgstr ""
"Checka ut en arbetskopia från ett arkiv.\n"
-"användning: checkout URL[@REV]... SÖKVÄG\n"
+"användning: checkout URL[@REV]... [SÖKVÄG]\n"
"\n"
" Om den anges, bestämmer REV i vilken revision URL först letas upp.\n"
"\n"
@@ -8190,19 +10645,41 @@ msgstr ""
" mellan de filer som är i vägen och arkivets filer att betraktas som lokala\n"
" ändringar i arbetskopian. Samtliga egenskaper i arkivet läggs till för\n"
" sökvägar som är i vägen.\n"
+"\n"
+" Se även \"svn help update\" för en lista av möjliga tecken i rapporten\n"
+" om vilken åtgärd som utfördes.\n"
-#: ../svn/main.c:466
-#, fuzzy
+#: ../svn/svn.c:488
msgid ""
-"Recursively clean up the working copy, removing locks, resuming\n"
+"Recursively clean up the working copy, removing write locks, resuming\n"
"unfinished operations, etc.\n"
"usage: cleanup [WCPATH...]\n"
+"\n"
+" Finish any unfinished business in the working copy at WCPATH, and remove\n"
+" write locks (shown as 'L' by the 'svn status' command) from the working\n"
+" copy. Usually, this is only necessary if a Subversion client has crashed\n"
+" while using the working copy, leaving it in an unusable state.\n"
+"\n"
+" WARNING: There is no mechanism that will protect write locks still\n"
+" being used by other Subversion clients. Running this command\n"
+" while another client is using the working copy can corrupt\n"
+" the working copy beyond repair!\n"
msgstr ""
-"Städa i arbetskopian och dess underkataloger rekursivt. Lås tas bort,\n"
-"avbrutna operationer återupptas o.s.v.\n"
-"användning: cleanup [SÖKVÄG...]\n"
+"Städa i arbetskopian och dess underkataloger rekursivt.\n"
+"Skrivlås tas bort, avbrutet arbete återupptas o.s.v.\n"
+"användning: cleanup [AKSÖKVÄG...]\n"
+"\n"
+" Slutför ofullbordat arbete i arbetskopian i AKSÖKVÄG och ta bort skrivlås\n"
+" (visade som \"L\" av kommandot \"svn status\") från arbetskopian. Vanligtvis\n"
+" är detta bara nödvändigt om en Subversionklient kraschade medan en\n"
+" arbetskopia användes och lämnade den i ett oanvändbart tillstånd.\n"
+"\n"
+" VARNING: Det finns ingen mekanism som skyddar skrivlås som fortfarande\n"
+" används av en annan Subversionklient. Om detta kommando körs\n"
+" medan en annan klient använder arbetskopian kan denna förstöras\n"
+" utan möjlighet till reparation!\n"
-#: ../svn/main.c:472
+#: ../svn/svn.c:504
msgid ""
"Send changes from your working copy to the repository.\n"
"usage: commit [PATH...]\n"
@@ -8220,42 +10697,44 @@ msgstr ""
" Om något mål är låst (eller innehåller låsta objekt), kommer dessa att\n"
" låsas upp efter en lyckad arkivering.\n"
-#: ../svn/main.c:483
-#, fuzzy
+#: ../svn/svn.c:515
msgid ""
-"Duplicate something in working copy or repository, remembering\n"
-"history.\n"
+"Copy files and directories in a working copy or repository.\n"
"usage: copy SRC[@REV]... DST\n"
"\n"
-"When copying multiple sources, they will be added as children of DST,\n"
-"which must be a directory.\n"
-"\n"
" SRC and DST can each be either a working copy (WC) path or URL:\n"
" WC -> WC: copy and schedule for addition (with history)\n"
" WC -> URL: immediately commit a copy of WC to URL\n"
" URL -> WC: check out URL into WC, schedule for addition\n"
" URL -> URL: complete server-side copy; used to branch and tag\n"
-" All the SRCs must be of the same type.\n"
+" All the SRCs must be of the same type. When copying multiple sources,\n"
+" they will be added as children of DST, which must be a directory.\n"
"\n"
-"WARNING: For compatibility with previous versions of Subversion,\n"
-"copies performed using two working copy paths (WC -> WC) will not\n"
-"contact the repository. As such, they may not, by default, be able\n"
-"to propagate merge tracking information from the source of the copy\n"
-"to the destination.\n"
+" WARNING: For compatibility with previous versions of Subversion,\n"
+" copies performed using two working copy paths (WC -> WC) will not\n"
+" contact the repository. As such, they may not, by default, be able\n"
+" to propagate merge tracking information from the source of the copy\n"
+" to the destination.\n"
msgstr ""
-"Duplicera något i en arbetskopia eller arkiv och kom ihåg historik.\n"
-"användning: copy SRC DST\n"
+"Kopiera filer och kataloger i en arbetskopia eller ett arkiv.\n"
+"användning: copy KÄLLA MÅL\n"
"\n"
-" SRC och DST kan vardera vara antingen en sökväg i en arbetskopia (AK)\n"
+" KÄLLA och MÅL kan vardera vara antingen en sökväg i en arbetskopia (AK)\n"
" eller en URL:\n"
" AK -> AK: kopiera och schemalägg för tillägg (med historik)\n"
" AK -> URL: arkivera genast en kopia av AK till URL\n"
" URL -> AK: checka ut URL till AK och schemalägg för tillägg\n"
" URL -> URL: kopiering på servern; används för att förgrena och skapa\n"
" märken\n"
+" Alla källor måste vara av samma typ. När flera källor kopieras kommer de\n"
+" läggas till som barn till MÅL, som måste vara en katalog.\n"
+"\n"
+" VARNING: För kompatibilitet med tidigare versioner av Subversion kommer\n"
+" arkivet inte kontaktas vid kopiering mellan två arbetskopiesökvägar\n"
+" (AK -> AK). Därför kommer normalt inte information för sammanslagnings-\n"
+" följning överföras från kopieringens källa till dess mål.\n"
-#: ../svn/main.c:505
-#, fuzzy
+#: ../svn/svn.c:534
msgid ""
"Remove files and directories from version control.\n"
"usage: 1. delete PATH...\n"
@@ -8277,69 +10756,98 @@ msgstr ""
"\n"
" 1. Varje objekt som angivits med en sökväg schemaläggs för radering vid\n"
" nästa arkivering. Filer och kataloger som aldrig arkiverats tas\n"
-" genast bort från arbetskopian. Sökvägar som är, eller innehåller,\n"
-" objekt som ej är versionshanterade eller som är ändrade raderas\n"
-" inte utan att --force-flaggan används.\n"
+" genast bort från arbetskopian såvida inte flaggan --keep-local anges.\n"
+" Sökvägar som är, eller innehåller, objekt som ej är versionshanterade\n"
+" eller som är ändrade raderas inte utan att flaggorna --force eller\n"
+" --keep-local används.\n"
"\n"
" 2. Varje objekt som anges med en URL raderas från arkivet genom en\n"
" omedelbar arkivering.\n"
-#: ../svn/main.c:521
-#, fuzzy
+#: ../svn/svn.c:550
msgid ""
-"Display the differences between two revisions or paths.\n"
-"usage: 1. diff [-c M | -r N[:M]] [TARGET[@REV]...]\n"
-" 2. diff [-r N[:M]] --old=OLD-TGT[@OLDREV] [--new=NEW-TGT[@NEWREV]] \\\n"
+"Display local changes or differences between two revisions or paths.\n"
+"usage: 1. diff\n"
+" 2. diff [-c M | -r N[:M]] [TARGET[@REV]...]\n"
+" 3. diff [-r N[:M]] --old=OLD-TGT[@OLDREV] [--new=NEW-TGT[@NEWREV]] \\\n"
" [PATH...]\n"
-" 3. diff OLD-URL[@OLDREV] NEW-URL[@NEWREV]\n"
+" 4. diff OLD-URL[@OLDREV] NEW-URL[@NEWREV]\n"
+" 5. diff OLD-URL[@OLDREV] NEW-PATH[@NEWREV]\n"
+" 6. diff OLD-PATH[@OLDREV] NEW-URL[@NEWREV]\n"
+"\n"
+" 1. Use just 'svn diff' to display local modifications in a working copy.\n"
"\n"
-" 1. Display the changes made to TARGETs as they are seen in REV between\n"
+" 2. Display the changes made to TARGETs as they are seen in REV between\n"
" two revisions. TARGETs may be all working copy paths or all URLs.\n"
" If TARGETs are working copy paths, N defaults to BASE and M to the\n"
" working copy; if URLs, N must be specified and M defaults to HEAD.\n"
" The '-c M' option is equivalent to '-r N:M' where N = M-1.\n"
" Using '-c -M' does the reverse: '-r M:N' where N = M-1.\n"
"\n"
-" 2. Display the differences between OLD-TGT as it was seen in OLDREV and\n"
+" 3. Display the differences between OLD-TGT as it was seen in OLDREV and\n"
" NEW-TGT as it was seen in NEWREV. PATHs, if given, are relative to\n"
" OLD-TGT and NEW-TGT and restrict the output to differences for those\n"
" paths. OLD-TGT and NEW-TGT may be working copy paths or URL[@REV].\n"
" NEW-TGT defaults to OLD-TGT if not specified. -r N makes OLDREV default\n"
" to N, -r N:M makes OLDREV default to N and NEWREV default to M.\n"
-"\n"
-" 3. Shorthand for 'svn diff --old=OLD-URL[@OLDREV] --new=NEW-URL[@NEWREV]'\n"
-"\n"
-" Use just 'svn diff' to display local modifications in a working copy.\n"
-msgstr ""
-"Visa skillnaderna mellan två sökvägar.\n"
-"användning: 1. diff [-c M | -r N[:M]] [MÅL[@REV]...]\n"
-" 2. diff [-C M | -r N[:M]] --old=GAMMALT-MÃ…L[@GAMMALREV] \\\n"
-" [--new=NYTT-MÅL[@NYREV]] [SÖKVÄG...]\n"
-" 3. diff GAMMAL-URL[@GAMMALREV] NY-URL[@NYREV]\n"
-"\n"
-" 1. Visa ändringarna mellan två revisioner i målen MÅL som de ser ut i\n"
+" If OLDREV or NEWREV are not specified, they default to WORKING for\n"
+" working copy targets and to HEAD for URL targets.\n"
+"\n"
+" Either or both OLD-TGT and NEW-TGT may also be paths to unversioned\n"
+" targets. Revisions cannot be specified for unversioned targets.\n"
+" Both targets must be of the same node kind (file or directory).\n"
+" Diffing unversioned targets against URL targets is not supported.\n"
+"\n"
+" 4. Shorthand for 'svn diff --old=OLD-URL[@OLDREV] --new=NEW-URL[@NEWREV]'\n"
+" 5. Shorthand for 'svn diff --old=OLD-URL[@OLDREV] --new=NEW-PATH[@NEWREV]'\n"
+" 6. Shorthand for 'svn diff --old=OLD-PATH[@OLDREV] --new=NEW-URL[@NEWREV]'\n"
+msgstr ""
+"Visa lokala ändringar eller skillnader mellan två revisioner\n"
+"eller sökvägar.\n"
+"användning: 1. diff\n"
+" 2. diff [-c M | -r N[:M]] [MÃ…L[@REV]...]\n"
+" 3. diff [-r N[:M]] --old=GAMMALT-MÃ…L[@GAMMALREV] \\\n"
+" [--new=NYTT-MÃ…L[@NYREV]] [PATH...]\n"
+" 4. diff GAMMAL-URL[@GAMMALREV] NY-URL[@NYREV]\n"
+" 5. diff GAMMAL-URL[@GAMMALREV] NY-SÖKVÄG[@NYREV]\n"
+" 6. diff GAMMAL-SÖKVÄG[@GAMMALREV] NY-URL[@NYREV]\n"
+"\n"
+" 1. Använd bara \"svn diff\" för att visa lokala ändringar i en arbetskopia.\n"
+"\n"
+" 2. Visa ändringarna mellan två revisioner i målen MÅL som de ser ut i\n"
" revision REV. MÃ¥len kan vara arbetskopior eller URL:er.\n"
-"\n"
-" Standardvärdet för N är BASE om något av målen är en sökväg till en\n"
+" Standardvärdet för N är BASE om målen är sökvägar till en\n"
" arbetskopia. I annat fall måste N anges. Om M inte anges och något av\n"
" målen är en sökväg till en arbetskopia, används den aktuella arbets-\n"
" versionen. Annars är standardvärdet HEAD.\n"
+" Flaggan \"-c M\" fungerar som \"-r N:M\" där N = M-1.\n"
+" Det omvända fås med \"-c -M\", dvs \"-r M:N\" där N = M-1.\n"
"\n"
-" 2. Visa skillnaden mellan GAMMALT-MÅL som den såg ut i GAMMALREV och\n"
-" NYTT-MÅL som den såg ut i NYREV. Om en eller flera SÖKVÄGar anges,\n"
+" 3. Visa skillnaden mellan GAMMALT-MÅL som det såg ut i GAMMALREV och\n"
+" NYTT-MÅL som det såg ut i NYREV. Om en eller flera SÖKVÄGar anges,\n"
" ska dessa vara relativa GAMMALT-MÅL och NYTT-MÅL och de begränsar\n"
" i så fall utskriften till skillnaderna i dessa sökvägar.\n"
" GAMMALT-MÅL och NYTT-MÅL kan vara sökvägar till en arbetskopia\n"
" eller URL[@REV]. Standardvärdet för NYTT-MÅL är GAMMALT-MÅL. -r N\n"
" sätter standardvärdet för GAMMALREV till N. -r N:M sätter\n"
-" standardvädet för GAMMALREV till N och för NYREV till M.\n"
+" standardvärdet för GAMMALREV till N och för NYREV till M.\n"
+" Om flaggan -r inte anges är standardvärdet för GAMMALREV och NYREV\n"
+" WORKING för arbetskopior och HEAD för URL:er.\n"
"\n"
-" 3. Kortare sätt att skriva \"svn diff --old=GAMMAL-URL[@GAMMALREV]\n"
-" --new=NY-URL[@NYREV]\".\n"
+" GAMMALT-MÅL och/eller NYTT-MÅL kan också vara sökvägar till mål som\n"
+" inte är versionshanterade. Revisioner kan bara anges för\n"
+" versionshanterade mål. Båda målen måste vara av samma nodtyp (fil\n"
+" eller katalog). Att jämföra icke versionshanterade mål mot URL-mål\n"
+" stöds ej.\n"
"\n"
-" Använd endast \"svn diff\" för att se lokala ändringar i en arbetskopia.\n"
+" 4. Kortare sätt att skriva\n"
+" \"svn diff --old=GAMMAL-URL[@GAMMALREV] --new=NY-URL[@NYREV]\".\n"
+" 5. Kortare sätt att skriva\n"
+" \"svn diff --old=GAMMAL-URL[@GAMMALREV] --new=NY-SÖKVÄG[@NYREV]\".\n"
+" 6. Kortare sätt att skriva\n"
+" \"svn diff --old=GAMMAL-SÖKVÄG[@GAMMALREV] --new=NY-URL[@NYREV]\".\n"
-#: ../svn/main.c:549
+#: ../svn/svn.c:591
msgid ""
"Create an unversioned copy of a tree.\n"
"usage: 1. export [-r REV] URL[@PEGREV] [PATH]\n"
@@ -8362,7 +10870,7 @@ msgid ""
msgstr ""
"Skapa en icke versionshanterad kopia av ett träd.\n"
"användning: 1. export [-r REV] URL[@FIXREV] [SÖKVÄG]\n"
-" 2. export [-r REV] SÖKVÄG1[@FIXRREV] [SÖKVÄG2]\n"
+" 2. export [-r REV] SÖKVÄG1[@FIXREV] [SÖKVÄG2]\n"
"\n"
" 1. Exporterar ett rent katalogträd från arkivet som anges av URL, vid\n"
" revisionen REV, eller HEAD om REV inte anges, till SÖKVÄG. Om SÖKVÄG\n"
@@ -8376,7 +10884,7 @@ msgstr ""
"\n"
" Om FIXREV är angiven, anger den i vilken revision målet först letas upp.\n"
-#: ../svn/main.c:571
+#: ../svn/svn.c:613
msgid ""
"Describe the usage of this program or its subcommands.\n"
"usage: help [SUBCOMMAND...]\n"
@@ -8384,8 +10892,7 @@ msgstr ""
"Visa hur detta program eller dess underkommandon används.\n"
"användning: help [UNDERKOMMANDO...]\n"
-#: ../svn/main.c:577
-#, fuzzy
+#: ../svn/svn.c:619
msgid ""
"Commit an unversioned file or tree into the repository.\n"
"usage: import [PATH] URL\n"
@@ -8405,9 +10912,10 @@ msgstr ""
" Om SÖKVÄG utelämnas används \".\". Föräldrakataloger skapas där det behövs\n"
" i arkivet.\n"
" Om SÖKVÄG är en katalog, läggs katalogens innehåll till direkt under URL.\n"
+" Objekt som ej kan versionshanteras, såsom enhetsfiler och rörledningar,\n"
+" hoppas över om --force anges.\n"
-#: ../svn/main.c:591
-#, fuzzy
+#: ../svn/svn.c:633
msgid ""
"Display information about a local or remote item.\n"
"usage: info [TARGET[@REV]...]\n"
@@ -8416,14 +10924,14 @@ msgid ""
" TARGET may be either a working-copy path or URL. If specified, REV\n"
" determines in which revision the target is first looked up.\n"
msgstr ""
-"Visa information om en fil eller katlog - lokal eller från ett arkiv.\n"
+"Visa information om en fil eller katalog - lokal eller från ett arkiv.\n"
"användning: info [MÅL[@REV]...]\n"
"\n"
" Skriv ut information om varje angivet MÃ…L (\".\" om inget anges).\n"
-" MÅL kan antingen vara en arbertskopia eller en URL. Om REV anges, avgör\n"
+" MÅL kan antingen vara en arbetskopia eller en URL. Om REV anges, avgör\n"
" den i vilken revision målet letas upp.\n"
-#: ../svn/main.c:601
+#: ../svn/svn.c:643
msgid ""
"List directory entries in the repository.\n"
"usage: list [TARGET[@REV]...]\n"
@@ -8462,7 +10970,11 @@ msgstr ""
" Storlek (i byte)\n"
" Datum och tid för senaste arkiveringen\n"
-#: ../svn/main.c:622
+#: ../svn/svn.c:663
+msgid "include externals definitions"
+msgstr "tag med externals-definitioner"
+
+#: ../svn/svn.c:666
msgid ""
"Lock working copy paths or URLs in the repository, so that\n"
"no other user can commit changes to them.\n"
@@ -8470,28 +10982,26 @@ msgid ""
"\n"
" Use --force to steal the lock from another user or working copy.\n"
msgstr ""
-"Lås sökvägar till arbetskopior, eller URL:er, i arkivet så att ingen annan\n"
-"användare kan arkivera ändringar till dem.\n"
+"Lås sökvägar till arbetskopior, eller URL:er, i arkivet så att ingen\n"
+"annan användare kan arkivera ändringar till dem.\n"
"användning: lock MÅL...\n"
"\n"
-" Använd -force-flaggan för att stjäla ett lås från en annana användare eller\n"
+" Använd flaggan --force för att stjäla ett lås från en annan användare eller\n"
" arbetskopia.\n"
-#: ../svn/main.c:628
+#: ../svn/svn.c:672
msgid "read lock comment from file ARG"
msgstr "läs låskommentar från filen ARG"
-#: ../svn/main.c:629
+#: ../svn/svn.c:673
msgid "specify lock comment ARG"
msgstr "ange låskommentar ARG"
-#: ../svn/main.c:630
-#, fuzzy
+#: ../svn/svn.c:674
msgid "force validity of lock comment source"
-msgstr "acceptera alltid det angivna loggmeddelandet"
+msgstr "acceptera alltid den angivna låskommentaren"
-#: ../svn/main.c:633
-#, fuzzy
+#: ../svn/svn.c:677
msgid ""
"Show the log messages for a set of revision(s) and/or path(s).\n"
"usage: 1. log [PATH][@REV]\n"
@@ -8522,24 +11032,69 @@ msgid ""
" follow copy history by default. Use --stop-on-copy to disable this\n"
" behavior, which can be useful for determining branchpoints.\n"
"\n"
+" The --depth option is only valid in combination with the --diff option\n"
+" and limits the scope of the displayed diff to the specified depth.\n"
+"\n"
+" If the --search option is used, log messages are displayed only if the\n"
+" provided search pattern matches any of the author, date, log message\n"
+" text (unless --quiet is used), or, if the --verbose option is also\n"
+" provided, a changed path.\n"
+" The search pattern may include \"glob syntax\" wildcards:\n"
+" ? matches any single character\n"
+" * matches a sequence of arbitrary characters\n"
+" [abc] matches any of the characters listed inside the brackets\n"
+" If multiple --search options are provided, a log message is shown if\n"
+" it matches any of the provided search patterns. If the --search-and\n"
+" option is used, that option's argument is combined with the pattern\n"
+" from the previous --search or --search-and option, and a log message\n"
+" is shown only if it matches the combined search pattern.\n"
+" If --limit is used in combination with --search, --limit restricts the\n"
+" number of log messages searched, rather than restricting the output\n"
+" to a particular number of matching log messages.\n"
+"\n"
" Examples:\n"
-" svn log\n"
-" svn log foo.c\n"
-" svn log bar.c@42\n"
-" svn log http://www.example.com/repo/project/foo.c\n"
-" svn log http://www.example.com/repo/project foo.c bar.c\n"
-" svn log http://www.example.com/repo/project@50 foo.c bar.c\n"
+"\n"
+" Show the latest 5 log messages for the current working copy\n"
+" directory and display paths changed in each commit:\n"
+" svn log -l 5 -v\n"
+"\n"
+" Show the log for bar.c as of revision 42:\n"
+" svn log bar.c@42\n"
+"\n"
+" Show log messages and diffs for each commit to foo.c:\n"
+" svn log --diff http://www.example.com/repo/project/foo.c\n"
+" (Because the above command uses a full URL it does not require\n"
+" a working copy.)\n"
+"\n"
+" Show log messages for the children foo.c and bar.c of the directory\n"
+" '/trunk' as it appeared in revision 50, using the ^/ URL shortcut:\n"
+" svn log ^/trunk@50 foo.c bar.c\n"
+"\n"
+" Show the log messages for any incoming changes to foo.c during the\n"
+" next 'svn update':\n"
+" svn log -r BASE:HEAD foo.c\n"
+"\n"
+" Show the log message for the revision in which /branches/foo\n"
+" was created:\n"
+" svn log --stop-on-copy --limit 1 -r0:HEAD ^/branches/foo\n"
msgstr ""
"Visa loggmeddelanden för revisioner och/eller filer.\n"
-"användning: 1. log [SÖKVÄG]\n"
-" 2. log URL[REV] [SÖKVÄG...]\n"
+"användning: 1. log [SÖKVÄG][@REV]\n"
+" 2. log URL[@REV] [SÖKVÄG...]\n"
+"\n"
+" 1. Visa loggmeddelanden för URL:en som motsvarar SÖKVÄG (\".\" om ej\n"
+" angiven). Om REV anges avgör den var SÖKVÄG letas upp, och standard-\n"
+" värdet för revisionsområdet är då REV:1. Annars är standardvärdet\n"
+" för revisionsområdet är BASE:1 då URL:en kanske inte finns i\n"
+" HEAD-revisionen.\n"
"\n"
-" 1. Visa loggmeddelanden för en lokal sökväg (\".\" är standardvärdet).\n"
-" Standardvärdet för revisionsområdet är BASE:1.\n"
+" 2. Visa loggmeddelanden för varje SÖKVÄG (\".\" om ingen angiven) under\n"
+" URL. Om REV anges avgör den var SÖKVÄG letas upp, och standardvärdet\n"
+" för revisionsområdet är då REV:1. Annars letas URL upp i HEAD och\n"
+" standardvärdet för revisionsområdet är HEAD:1.\n"
"\n"
-" 2. Visa loggmeddelanden för varje SÖKVÄG (standardvärdet är \".\") under\n"
-" URL. Om REV anges, avgör den var SÖKVÄG letas upp. Standardvärdet\n"
-" för revisionsområdet är HEAD:1.\n"
+" Flaggorna \"-c\" och \"-r\" kan förekomma flera gånger (men inte blandas),\n"
+" och det går att blanda områden angivna framlänges och baklänges.\n"
"\n"
" Om -v används skrivs även alla berörda sökvägar ut med varje loggmeddelande.\n"
" Om -q används, skrivs inte loggmeddelanden ut (kan användas tillsammans med\n"
@@ -8550,55 +11105,348 @@ msgstr ""
" standard. Använd --stop-on-copy för att slå av detta, vilket kan vara\n"
" användbart för att avgöra förgreningspunkter.\n"
"\n"
+" Om flaggan --search anges, kommer loggmeddelanden bara visas om sökmönstret\n"
+" matchar författaren, datumet, loggmeddelandets text (utom med --quiet),\n"
+" eller, med --verbose, en ändrad sökväg.\n"
+" Sökmönstret kan innehålla jokertecken enligt skalsyntax:\n"
+" ? matchar ett godtyckligt enstaka tecken\n"
+" * matchar en följd av godtyckliga tecken\n"
+" [abc] matchar något av tecknen inom hakparenteserna\n"
+" Om flera \"--search\"-flaggor anges kommer ett loggmeddelande visas om\n"
+" något det matchar något av sökmönstren. Om flaggan --search-and anges,\n"
+" så kombineras den flaggans argument med mönstret från föregående --search\n"
+" eller --search-and, och ett loggmeddelande visas bara om det matchar det\n"
+" kombinerade sökmönstret.\n"
+" Om --limit används tillsammans med --search, så kommer --limit begränsa\n"
+" antal genomsökta loggmeddelanden och inte antal matchande.\n"
+"\n"
" Exempel:\n"
-" svn log\n"
-" svn log foo.c\n"
-" svn log http://www.example.com/repo/project/foo.c\n"
-" svn log http://www.example.com/repo/project foo.c bar.c\n"
+"\n"
+" Visa de senaste 5 loggmeddelanden för den aktuella arbetskopians\n"
+" katalog och visa sökvägar ändrade i varje arkivering:\n"
+" svn log -l 5 -v\n"
+"\n"
+" Visa loggen för fil.c sådan den var i revision 42:\n"
+" svn log fil.c@42\n"
+"\n"
+" Visa loggmeddelanden och skillnader för varje arkivering av fil.c:\n"
+" svn log --diff http://www.exempel.se/arkiv/projekt/fil.c\n"
+" (Eftersom detta kommando anger en full URL behövs ingen arbetskopia.)\n"
+"\n"
+" Visa loggmeddelanden för filerna adam.c och bertil.c i katalogen\n"
+" \"/trunk\" sådan den var i revision 50, med hjälp av URL-förkortningen\n"
+" \"^/\":\n"
+" svn log ^/trunk@50 adam.c bertil.c\n"
+"\n"
+" Visa loggmeddelanden för ändringar av fil.c som kommer ske vid nästa\n"
+" \"svn update\":\n"
+" svn log -r BASE:HEAD fil.c\n"
+"\n"
+" Visa loggmeddelandet för revisionen då /branches/gren skapades:\n"
+" svn log --stop-on-copy --limit 1 -r0:HEAD ^/branches/gren\n"
-#: ../svn/main.c:672
-#, fuzzy
+#: ../svn/svn.c:755
msgid "retrieve revision property ARG"
-msgstr "Filtrera inte revisionsegenskaper."
+msgstr "hämta revisionsegenskapen ARG"
-#: ../svn/main.c:673
-#, fuzzy
+#: ../svn/svn.c:756
msgid "the change made in revision ARG"
-msgstr "läsning av nodrevision"
-
-#: ../svn/main.c:676
-#, fuzzy
-msgid ""
-"Apply the differences between two sources to a working copy path.\n"
-"usage: 1. merge sourceURL1[@N] sourceURL2[@M] [WCPATH]\n"
-" 2. merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]\n"
-" 3. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [WCPATH]\n"
-"\n"
-" 1. In the first form, the source URLs are specified at revisions\n"
-" N and M. These are the two sources to be compared. The revisions\n"
-" default to HEAD if omitted.\n"
-"\n"
-" 2. In the second form, the URLs corresponding to the source working\n"
-" copy paths define the sources to be compared. The revisions must\n"
-" be specified.\n"
-"\n"
-" 3. In the third form, SOURCE can be either a URL or a working copy\n"
-" path (in which case its corresponding URL is used). SOURCE (in\n"
-" revision REV) is compared as it existed between revisions N and M\n"
-" for each revision range provided. If REV is not specified, HEAD\n"
-" is assumed. '-c M' is equivalent to '-r <M-1>:M', and '-c -M'\n"
-" does the reverse: '-r M:<M-1>'. If no revision ranges are\n"
-" specified, the default range of 0:REV is used. Multiple '-c'\n"
-" and/or '-r' options may be specified, and mixing of forward\n"
-" and reverse ranges is allowed.\n"
-"\n"
-" WCPATH is the working copy path that will receive the changes.\n"
-" If WCPATH is omitted, a default value of '.' is assumed, unless\n"
-" the sources have identical basenames that match a file within '.':\n"
-" in which case, the differences will be applied to that file.\n"
-"\n"
-" For each merged item a line will be printed with characters reporting\n"
-" the action taken. These characters have the following meaning:\n"
+msgstr "ändringen gjord i revision ARG"
+
+#. For this large section, let's keep it unindented for easier
+#. * viewing/editing. It has been vim-treated with a textwidth=75 and 'gw'
+#. * (with quotes and newlines removed).
+#: ../svn/svn.c:762
+msgid ""
+"Merge changes into a working copy.\n"
+"usage: 1. merge SOURCE[@REV] [TARGET_WCPATH]\n"
+" (the 'complete' merge)\n"
+" 2. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [TARGET_WCPATH]\n"
+" (the 'cherry-pick' merge)\n"
+" 3. merge SOURCE1[@REV1] SOURCE2[@REV2] [TARGET_WCPATH]\n"
+" (the '2-URL' merge)\n"
+"\n"
+" 1. This form, with one source path and no revision range, is called\n"
+" a 'complete' merge:\n"
+"\n"
+" svn merge SOURCE[@REV] [TARGET_WCPATH]\n"
+"\n"
+" The complete merge is used for the 'sync' and 'reintegrate' merges\n"
+" in the 'feature branch' pattern described below. It finds all the\n"
+" changes on the source branch that have not already been merged to the\n"
+" target branch, and merges them into the working copy. Merge tracking\n"
+" is used to know which changes have already been merged.\n"
+"\n"
+" SOURCE specifies the branch from where the changes will be pulled, and\n"
+" TARGET_WCPATH specifies a working copy of the target branch to which\n"
+" the changes will be applied. Normally SOURCE and TARGET_WCPATH should\n"
+" each correspond to the root of a branch. (If you want to merge only a\n"
+" subtree, then the subtree path must be included in both SOURCE and\n"
+" TARGET_WCPATH; this is discouraged, to avoid subtree mergeinfo.)\n"
+"\n"
+" SOURCE is usually a URL. The optional '@REV' specifies both the peg\n"
+" revision of the URL and the latest revision that will be considered\n"
+" for merging; if REV is not specified, the HEAD revision is assumed. If\n"
+" SOURCE is a working copy path, the corresponding URL of the path is\n"
+" used, and the default value of 'REV' is the base revision (usually the\n"
+" revision last updated to).\n"
+"\n"
+" TARGET_WCPATH is a working copy path; if omitted, '.' is generally\n"
+" assumed. There are some special cases:\n"
+"\n"
+" - If SOURCE is a URL:\n"
+"\n"
+" - If the basename of the URL and the basename of '.' are the\n"
+" same, then the differences are applied to '.'. Otherwise,\n"
+" if a file with the same basename as that of the URL is found\n"
+" within '.', then the differences are applied to that file.\n"
+" In all other cases, the target defaults to '.'.\n"
+"\n"
+" - If SOURCE is a working copy path:\n"
+"\n"
+" - If the source is a file, then differences are applied to that\n"
+" file (useful for reverse-merging earlier changes). Otherwise,\n"
+" if the source is a directory, then the target defaults to '.'.\n"
+"\n"
+" In normal usage the working copy should be up to date, at a single\n"
+" revision, with no local modifications and no switched subtrees.\n"
+"\n"
+" - The 'Feature Branch' Merging Pattern -\n"
+"\n"
+" In this commonly used work flow, known also as the 'development\n"
+" branch' pattern, a developer creates a branch and commits a series of\n"
+" changes that implement a new feature. The developer periodically\n"
+" merges all the latest changes from the parent branch so as to keep the\n"
+" development branch up to date with those changes. When the feature is\n"
+" complete, the developer performs a merge from the feature branch to\n"
+" the parent branch to re-integrate the changes.\n"
+"\n"
+" parent --+----------o------o-o-------------o--\n"
+" \\ \\ \\ /\n"
+" \\ merge merge merge\n"
+" \\ \\ \\ /\n"
+" feature +--o-o-------o----o-o----o-------\n"
+"\n"
+" A merge from the parent branch to the feature branch is called a\n"
+" 'sync' or 'catch-up' merge, and a merge from the feature branch to the\n"
+" parent branch is called a 'reintegrate' merge.\n"
+"\n"
+" - Sync Merge Example -\n"
+" ............\n"
+" . .\n"
+" trunk --+------------L--------------R------\n"
+" \\ \\\n"
+" \\ |\n"
+" \\ v\n"
+" feature +------------------------o-----\n"
+" r100 r200\n"
+"\n"
+" Subversion will locate all the changes on 'trunk' that have not yet\n"
+" been merged into the 'feature' branch. In this case that is a single\n"
+" range, r100:200. In the diagram above, L marks the left side (trunk@100)\n"
+" and R marks the right side (trunk@200) of the merge source. The\n"
+" difference between L and R will be applied to the target working copy\n"
+" path. In this case, the working copy is a clean checkout of the entire\n"
+" 'feature' branch.\n"
+"\n"
+" To perform this sync merge, have a clean working copy of the feature\n"
+" branch and run the following command in its top-level directory:\n"
+"\n"
+" svn merge ^/trunk\n"
+"\n"
+" Note that the merge is now only in your local working copy and still\n"
+" needs to be committed to the repository so that it can be seen by\n"
+" others. You can review the changes and you may have to resolve\n"
+" conflicts before you commit the merge.\n"
+"\n"
+" - Reintegrate Merge Example -\n"
+"\n"
+" The feature branch was last synced with trunk up to revision X. So the\n"
+" difference between trunk@X and feature@HEAD contains the complete set\n"
+" of changes that implement the feature, and no other changes. These\n"
+" changes are applied to trunk.\n"
+"\n"
+" rW rX\n"
+" trunk ------+--------------------L------------------o\n"
+" \\ . ^\n"
+" \\ ............. /\n"
+" \\ . /\n"
+" feature +--------------------------------R\n"
+"\n"
+" In the diagram above, L marks the left side (trunk@X) and R marks the\n"
+" right side (feature@HEAD) of the merge. The difference between the\n"
+" left and right side is merged into trunk, the target.\n"
+"\n"
+" To perform the merge, have a clean working copy of trunk and run the\n"
+" following command in its top-level directory:\n"
+"\n"
+" svn merge ^/feature\n"
+"\n"
+" To prevent unnecessary merge conflicts, a reintegrate merge requires\n"
+" that TARGET_WCPATH is not a mixed-revision working copy, has no local\n"
+" modifications, and has no switched subtrees.\n"
+"\n"
+" A reintegrate merge also requires that the source branch is coherently\n"
+" synced with the target -- in the above example, this means that all\n"
+" revisions between the branch point W and the last merged revision X\n"
+" are merged to the feature branch, so that there are no unmerged\n"
+" revisions in-between.\n"
+"\n"
+"\n"
+" 2. This form is called a 'cherry-pick' merge:\n"
+"\n"
+" svn merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [TARGET_WCPATH]\n"
+"\n"
+" A cherry-pick merge is used to merge specific revisions (or revision\n"
+" ranges) from one branch to another. By default, this uses merge\n"
+" tracking to automatically skip any revisions that have already been\n"
+" merged to the target; you can use the --ignore-ancestry option to\n"
+" disable such skipping.\n"
+"\n"
+" SOURCE is usually a URL. The optional '@REV' specifies only the peg\n"
+" revision of the URL and does not affect the merge range; if REV is not\n"
+" specified, the HEAD revision is assumed. If SOURCE is a working copy\n"
+" path, the corresponding URL of the path is used, and the default value\n"
+" of 'REV' is the base revision (usually the revision last updated to).\n"
+"\n"
+" TARGET_WCPATH is a working copy path; if omitted, '.' is generally\n"
+" assumed. The special cases noted above in the 'complete' merge form\n"
+" also apply here.\n"
+"\n"
+" The revision ranges to be merged are specified by the '-r' and/or '-c'\n"
+" options. '-r N:M' refers to the difference in the history of the\n"
+" source branch between revisions N and M. You can use '-c M' to merge\n"
+" single revisions: '-c M' is equivalent to '-r <M-1>:M'. Each such\n"
+" difference is applied to TARGET_WCPATH.\n"
+"\n"
+" If the mergeinfo in TARGET_WCPATH indicates that revisions within the\n"
+" range were already merged, changes made in those revisions are not\n"
+" merged again. If needed, the range is broken into multiple sub-ranges,\n"
+" and each sub-range is merged separately.\n"
+"\n"
+" A 'reverse range' can be used to undo changes. For example, when\n"
+" source and target refer to the same branch, a previously committed\n"
+" revision can be 'undone'. In a reverse range, N is greater than M in\n"
+" '-r N:M', or the '-c' option is used with a negative number: '-c -M'\n"
+" is equivalent to '-r M:<M-1>'. Undoing changes like this is also known\n"
+" as performing a 'reverse merge'.\n"
+"\n"
+" Multiple '-c' and/or '-r' options may be specified and mixing of\n"
+" forward and reverse ranges is allowed.\n"
+"\n"
+" - Cherry-pick Merge Example -\n"
+"\n"
+" A bug has been fixed on trunk in revision 50. This fix needs to\n"
+" be merged from trunk onto the release branch.\n"
+"\n"
+" 1.x-release +-----------------------o-----\n"
+" / ^\n"
+" / |\n"
+" / |\n"
+" trunk ------+--------------------------LR-----\n"
+" r50\n"
+"\n"
+" In the above diagram, L marks the left side (trunk@49) and R marks the\n"
+" right side (trunk@50) of the merge. The difference between the left\n"
+" and right side is applied to the target working copy path.\n"
+"\n"
+" Note that the difference between revision 49 and 50 is exactly those\n"
+" changes that were committed in revision 50, not including changes\n"
+" committed in revision 49.\n"
+"\n"
+" To perform the merge, have a clean working copy of the release branch\n"
+" and run the following command in its top-level directory; remember\n"
+" that the default target is '.':\n"
+"\n"
+" svn merge -c50 ^/trunk\n"
+"\n"
+" You can also cherry-pick several revisions and/or revision ranges:\n"
+"\n"
+" svn merge -c50,54,60 -r65:68 ^/trunk\n"
+"\n"
+"\n"
+" 3. This form is called a '2-URL merge':\n"
+"\n"
+" svn merge SOURCE1[@REV1] SOURCE2[@REV2] [TARGET_WCPATH]\n"
+"\n"
+" You should use this merge variant only if the other variants do not\n"
+" apply to your situation, as this variant can be quite complex to\n"
+" master.\n"
+"\n"
+" Two source URLs are specified, identifying two trees on the same\n"
+" branch or on different branches. The trees are compared and the\n"
+" difference from SOURCE1@REV1 to SOURCE2@REV2 is applied to the\n"
+" working copy of the target branch at TARGET_WCPATH. The target\n"
+" branch may be the same as one or both sources, or different again.\n"
+" The three branches involved can be completely unrelated.\n"
+"\n"
+" TARGET_WCPATH is a working copy path; if omitted, '.' is generally\n"
+" assumed. The special cases noted above in the 'complete' merge form\n"
+" also apply here.\n"
+"\n"
+" SOURCE1 and/or SOURCE2 can also be specified as a working copy path,\n"
+" in which case the merge source URL is derived from the working copy.\n"
+"\n"
+" - 2-URL Merge Example -\n"
+"\n"
+" Two features have been developed on separate branches called 'foo' and\n"
+" 'bar'. It has since become clear that 'bar' should be combined with\n"
+" the 'foo' branch for further development before reintegration.\n"
+"\n"
+" Although both feature branches originate from trunk, they are not\n"
+" directly related -- one is not a direct copy of the other. A 2-URL\n"
+" merge is necessary.\n"
+"\n"
+" The 'bar' branch has been synced with trunk up to revision 500.\n"
+" (If this revision number is not known, it can be located using the\n"
+" 'svn log' and/or 'svn mergeinfo' commands.)\n"
+" The difference between trunk@500 and bar@HEAD contains the complete\n"
+" set of changes related to feature 'bar', and no other changes. These\n"
+" changes are applied to the 'foo' branch.\n"
+"\n"
+" foo +-----------------------------------o\n"
+" / ^\n"
+" / /\n"
+" / r500 /\n"
+" trunk ------+------+-----------------L---------> /\n"
+" \\ . /\n"
+" \\ ............ /\n"
+" \\ . /\n"
+" bar +-----------------------------------R\n"
+"\n"
+" In the diagram above, L marks the left side (trunk@500) and R marks\n"
+" the right side (bar@HEAD) of the merge. The difference between the\n"
+" left and right side is applied to the target working copy path, in\n"
+" this case a working copy of the 'foo' branch.\n"
+"\n"
+" To perform the merge, have a clean working copy of the 'foo' branch\n"
+" and run the following command in its top-level directory:\n"
+"\n"
+" svn merge ^/trunk@500 ^/bar\n"
+"\n"
+" The exact changes applied by a 2-URL merge can be previewed with svn's\n"
+" diff command, which is a good idea to verify if you do not have the\n"
+" luxury of a clean working copy to merge to. In this case:\n"
+"\n"
+" svn diff ^/trunk@500 ^/bar@HEAD\n"
+"\n"
+"\n"
+" The following applies to all types of merges:\n"
+"\n"
+" To prevent unnecessary merge conflicts, svn merge requires that\n"
+" TARGET_WCPATH is not a mixed-revision working copy. Running 'svn update'\n"
+" before starting a merge ensures that all items in the working copy are\n"
+" based on the same revision.\n"
+"\n"
+" If possible, you should have no local modifications in the merge's target\n"
+" working copy prior to the merge, to keep things simpler. It will be\n"
+" easier to revert the merge and to understand the branch's history.\n"
+"\n"
+" Switched sub-paths should also be avoided during merging, as they may\n"
+" cause incomplete merges and create subtree mergeinfo.\n"
+"\n"
+" For each merged item a line will be printed with characters reporting the\n"
+" action taken. These characters have the following meaning:\n"
"\n"
" A Added\n"
" D Deleted\n"
@@ -8614,52 +11462,416 @@ msgid ""
" the first and second columns indicate textual conflicts in files\n"
" and in property values, respectively.\n"
"\n"
-" NOTE: Subversion will only record metadata to track the merge\n"
-" if the two sources are on the same line of history -- if the\n"
-" first source is an ancestor of the second, or vice-versa. This is\n"
-" guaranteed to be the case when using the third form listed above.\n"
-" The --ignore-ancestry option overrides this, forcing Subversion to\n"
-" regard the sources as unrelated and not to track the merge.\n"
-msgstr ""
-"Inför skillnaderna mellan två källor i en arbetskopia.\n"
-"användning: 1. merge källURL1[@N] källURL2[@M] [AKSÖKVÄG]\n"
-" 2. merge källAKSÖKVÄG1@N källAKSÖKVÄG2@M [AKSÖKVÄG]\n"
-" 3. merge [-c M | -r N:M] KÄLLA[REV] [AKSÖKVÄG]\n"
+" - Merge Tracking -\n"
+"\n"
+" Subversion uses the svn:mergeinfo property to track merge history. This\n"
+" property is considered at the start of a merge to determine what to merge\n"
+" and it is updated at the conclusion of the merge to describe the merge\n"
+" that took place. Mergeinfo is used only if the two sources are on the\n"
+" same line of history -- if the first source is an ancestor of the second,\n"
+" or vice-versa (i.e. if one has originally been created by copying the\n"
+" other). This is verified and enforced when using sync merges and\n"
+" reintegrate merges.\n"
+"\n"
+" The --ignore-ancestry option prevents merge tracking and thus ignores\n"
+" mergeinfo, neither considering it nor recording it.\n"
+"\n"
+" - Merging from foreign repositories -\n"
+"\n"
+" Subversion does support merging from foreign repositories.\n"
+" While all merge source URLs must point to the same repository, the merge\n"
+" target working copy may come from a different repository than the source.\n"
+" However, there are some caveats. Most notably, copies made in the\n"
+" merge source will be transformed into plain additions in the merge\n"
+" target. Also, merge-tracking is not supported for merges from foreign\n"
+" repositories.\n"
+msgstr ""
+"Sammanslagning av ändringar i en arbetskopia.\n"
+"användning: 1. merge KÄLLA[@REV] [AKSÖKVÄGSMÅL]\n"
+" (\"fullständig\" sammanslagning)\n"
+" 2. merge [-c M[,N...] | -r N:M ...] KÄLLA[@REV] [AKSÖKVÄGSMÅL]\n"
+" (sammanslagning av utvalda ändringar)\n"
+" 3. merge KÄLLA1[@REV1] KÄLLA2[@REV2] [AKSÖKVÄGSMÅL]\n"
+" (sammanslagning av skillnaden mellan 2 URL:er)\n"
+"\n"
+" 1. Denna form, med en källsökväg och utan revisionsområde, kallas en\n"
+" \"fullständig\" sammanslagning:\n"
+"\n"
+" svn merge KÄLLA[@REV] [AKSÖKVÄGSMÅL]\n"
+"\n"
+" Den fullständiga sammanslagningen används för synkronisering och\n"
+" återförening enligt mönstret av \"karaktärsgrenar\" beskrivet nedan.\n"
+" Alla ändringar i källgrenen ännu ej införda i målgrenen kommer att\n"
+" slås samman med arbetskopian. Sammanslagningsföljning används\n"
+" för att hålla reda på vilka ändringar som redan införts.\n"
+"\n"
+" KÄLLA anger grenen varifrån ändringarna hämtas, och AKSÖKVÄGSMÅL en\n"
+" arbetskopia av målgrenen i vilken ändringarna kommer anbringas.\n"
+" Vanligtvis motsvarar KÄLLA och AKSÖKVÄGSMÅL var sin grenrot.\n"
+" (För sammanslagning av endast ett delträd så måste sökvägen för\n"
+" delträdet finnas med i både KÄLLA och AKSÖKVÄGSMÅL; detta rekommenderas\n"
+" inte för att undvika sammanslagningsinformation i delträd.)\n"
+"\n"
+" KÄLLA är vanligen en URL. Den valfria \"@REV\" anger både URL:ens\n"
+" fixerade revision och den senaste revisionen som kommer ifråga för\n"
+" sammanslagning; om REV inte anges så används revisionen HEAD. Om KÄLLA\n"
+" är en sökväg till en arbetskopia så används dess motsvarande URL, och\n"
+" standardvärdet för \"REV\" är då basrevisionen (normalt revisionen som\n"
+" arbetskopian senast uppdaterades till).\n"
+"\n"
+" AKSÖKVÄGSMÅL är en sökväg till en arbetskopia; om inte angiven så\n"
+" används i allmänhet \".\". Det finns vissa särskilda fall:\n"
+"\n"
+" - Om KÄLLA är en URL:\n"
+"\n"
+" - Om URL:ens basnamn är samma som den aktuella arbetskatalogens\n"
+" basnamn så kommer skillnaderna anbringas i \".\". Annars om\n"
+" det finns en fil med samma basnamn som URL:en i \".\", så\n"
+" kommer skillnaderna anbringas i den filen. I alla andra fall\n"
+" är målet \".\" om inget annat anges.\n"
+"\n"
+" - Om KÄLLA är en sökväg till en arbetskopia:\n"
+"\n"
+" - Om källan är en fil så anbringas skillnaderna i den filen\n"
+" (vilket är användbart för omvänd sammanslagning av tidigare\n"
+" ändringar). Annars, om källan är en katalog, så är målet \".\"\n"
+" om inget annat anges.\n"
+"\n"
+" Vid normal användning bör arbetskopian bör vara uppdaterad, på en enda\n"
+" revision, utan lokala ändringar eller växlade delträd.\n"
+"\n"
+" - Sammanslagningsmönstret för \"funktionsgrenar\" -\n"
+"\n"
+" Med detta arbetsflöde, även kallat \"utvecklingsgrenar\", skapar en\n"
+" utvecklare en gren och arkiverar en följd av ändringar som avser en\n"
+" ny funktion. Utvecklaren inför då och då de senaste ändringarna från\n"
+" föräldragrenen för att hålla utvecklingsgrenen aktuell. När den nya\n"
+" funktionen är färdig gör utvecklaren en sammanslagning från funktions-\n"
+" grenen till föräldragrenen för att återinföra ändringarna.\n"
+"\n"
+" förälder --+----------o------o-o------------------o--\n"
+" \\ \\ \\ /\n"
+" \\ sammansl. sammansl. sammansl.\n"
+" \\ \\ \\ /\n"
+" funktion +--o-o-------o----o-o----o-----------\n"
+"\n"
+" En sammanslagning från föräldragrenen till funktionsgrenen kallas en\n"
+" \"synkronisering\" eller att \"komma ikapp\", och en sammanslagning\n"
+" från funktionsgrenen till föräldragrenen kallas en \"återförening\".\n"
+"\n"
+" - Exempel på synkroniserande sammanslagning -\n"
+" ............\n"
+" . .\n"
+" trunk --+------------V--------------H------\n"
+" \\ \\\n"
+" \\ |\n"
+" \\ v\n"
+" funktion +------------------------o-----\n"
+" r100 r200\n"
+"\n"
+" Subversion kommer hitta alla ändringar i \"trunk\" som ännu ej införts\n"
+" i grenen \"funktion\". I detta fall är det ett enda område, r100:200.\n"
+" I diagrammet ovan står V för vänstersidan (trunk@100) och H högersidan\n"
+" (trunk@200) av sammanslagningskällan. Skillnaden mellan V och H kommer\n"
+" anbringas i arbetskopian. I detta fall är arbetsträdet en ren\n"
+" utcheckning av hela grenen \"funktion\".\n"
+"\n"
+" För att göra en synkroniserande sammanslagning behövs en ren\n"
+" arbetskopia av funktionsgrenen. Kör följande kommando i dess\n"
+" rotkatalog:\n"
+"\n"
+" svn merge ^/trunk\n"
+"\n"
+" Sammanslagningen är nu bara gjord i din egna arbetskopia och behöver\n"
+" fortfarande arkiveras så att andra kan se den. Du kan granska\n"
+" ändringarna och kan behöva lösa konflikter innan det sammanslagningen\n"
+" arkiveras.\n"
+"\n"
+" - Exempel på återförening -\n"
+"\n"
+" Funktionsgrenen synkroniserades senast med \"trunk\" vid revision X.\n"
+" Skillnaden mellan trunk@X och funktion@HEAD innehåller alltså alla\n"
+" ändringar i funktionsgrenen och inga andra. Dessa anbringas i\n"
+" \"trunk\".\n"
+"\n"
+" rW rX\n"
+" trunk ------+--------------------V------------------o\n"
+" \\ . ^\n"
+" \\ ............. /\n"
+" \\ . /\n"
+" funktion +--------------------------------H\n"
+"\n"
+" I diagrammet ovan står V för vänstersidan (trunk@X) och H högersidan\n"
+" (funktion@HEAD) av sammanslagningen. Skillnaden mellan vänstra och\n"
+" högra sidan införs i målet \"trunk\".\n"
+"\n"
+" För sammanslagningen behövs en ren arbetskopia av \"trunk\".\n"
+" Kör följande kommando i dess rotkatalog:\n"
+"\n"
+" svn merge ^/funktion\n"
+"\n"
+" För att förhindra onödiga konflikter kräver en återförening att\n"
+" AKSÖKVÄGSMÅL inte är en arbetskopia med blandad revision, utan lokala\n"
+" ändringar, och utan växlade delträd.\n"
"\n"
-" 1. I den första formen anges käll-URL:erna med revisionsnummer N och M.\n"
-" Dessa är de två källor som kommer att jämföras. Revisionsnumren\n"
-" antas vara HEAD om de utelämnas.\n"
+" En återförening kräver också att källgrenen har genomgående\n"
+" synkroniserats med målet -- i exemplet ovan innebär det att alla\n"
+" revisioner mellan grenpunkten W och den sist sammanslagna revisionen X\n"
+" införs till funktionsgrenen, så att det inte finns kvar några\n"
+" revisioner därimellan.\n"
"\n"
-" 2. I den andra formen bestämmer URL:erna som motsvarar de angivna\n"
-" arbetskopiorna vilka källor som ska jämföras. I detta fall måste\n"
-" revisionsnummer anges.\n"
"\n"
-" 3. I den tredje formen kan KÄLLA vara en URL eller en sökväg till en\n"
-" arbetskopia. I det senare fallet används motsvarande URL. Denna URL,\n"
-" vid revision REV, som den såg ut i revisionerna N respektive M bestämmer\n"
-" vad som ska jämföras. Om REV inte anges, används HEAD. Flaggan \"-c M\"\n"
-" är liktydig med \"-r N:M\", där N = M-1. Används -c -M, görs det\n"
-" omvända: \"-r M:N\", där N = M-1.\n"
+" 2. Denna form är en sammanslagning av utvalda ändringar:\n"
"\n"
-" AKSÖKVÄG är sökvägen till den arbetskopia där ändringarna kommer att\n"
-" införas. Om AKSÖKVÄG utelämnas används \".\" som standardvärde, såvida inte\n"
-" källorna har ett gemensamt basnamn som matchar en fil i \".\";\n"
-" i så fall införs skillnaderna i den filen.\n"
-
-#: ../svn/main.c:732
+" svn merge [-c M[,N...] | -r N:M ...] KÄLLA[@REV] [AKSÖKVÄGSMÅL]\n"
+"\n"
+" Denna form av sammanslagning används för att överföra enskilda\n"
+" ändringar (eller revisionsintervall) mellan grenar. Normalt används\n"
+" sammanslagningsföljning för att automatiskt hoppa över revisioner som\n"
+" redan införts i målet; använd flaggan --ignore-ancestry för att stänga\n"
+" av denna automatik.\n"
+"\n"
+" KÄLLA är vanligen en URL. Den valfria \"@REV\" anger bara URL:ens\n"
+" fixerade revision och påverkar inte sammanslagningens område; om REV\n"
+" inte angivits används revisionen HEAD. Om KÄLLA är en sökväg till en\n"
+" arbetskopia så används dess motsvarande URL, och standardvärdet för\n"
+" \"REV\" är basrevisionen (normalt revisionen för den senaste\n"
+" uppdateringen).\n"
+"\n"
+" AKSÖKVÄGSMÅL är en sökväg till en arbetskopia; om ej angiven antas \".\".\n"
+" De särskilda fallen ovan för den \"fullständiga\" sammanslagningsformen\n"
+" gäller även här.\n"
+"\n"
+" Revisionerna som införas anges med flaggorna \"-r\" och/eller \"-c\".\n"
+" \"-r N:M\" betyder skillnaden i källgrenens historik mellan\n"
+" revisionerna N och M. För att införa enstaka revisioner, använd\n"
+" \"-c M\", vilket är detsamma som \"-r <M-1>:M\". Varje sådan skillnad\n"
+" eller ändring anbringas i AKSÖKVÄGSMÅL.\n"
+"\n"
+" Om revisioner inom ett intervall redan är införda, enligt samman-\n"
+" slagningsinformationen i AKSÖKVÄGSMÅL, så kommer de inte införas\n"
+" igen. Om det behövs kommer intervall delas upp och varje delintervall\n"
+" behandlas separat.\n"
+"\n"
+" Ett \"omvänt område\" kan användas för att upphäva ändringar. Till\n"
+" exempel kan en tidigare arkiverad revision \"göras ogjord\" när både\n"
+" källa och mål är i samma gren. I ett omvänt område är N större än M\n"
+" i \"-r N:M\", eller flaggan \"-c\" används med ett negativt värde:\n"
+" \"-c -M\" är samma som \"-r M:<M-1>\". Att upphäva ändringar på detta\n"
+" sätt kallas även \"omvänd sammanslagning\".\n"
+"\n"
+" Flaggorna \"-c\" och/eller \"-r\" kan anges flera gånger, och det går\n"
+" att på samma gång ange raka och omvända revisionsområden.\n"
+"\n"
+" - Exempel på sammanslagning av utvalda ändringar -\n"
+"\n"
+" Ett fel har rättats i \"trunk\" i revision 50. Denna rättelse behöver\n"
+" införas i grenen för utgåvor.\n"
+"\n"
+" 1.x-utgåva +-----------------------o-----\n"
+" / ^\n"
+" / |\n"
+" / |\n"
+" trunk ------+--------------------------VH-----\n"
+" r50\n"
+"\n"
+" I diagrammet ovan står V för vänstra sidan (trunk@49) och H för högra\n"
+" sidan (trunk@50) av sammanslagningen. Skillnaden mellan vänstra och\n"
+" högra sidan anbringas i målets arbetskopia.\n"
+"\n"
+" Observera att skillnaden mellan revision 49 och 50 är bara ändringarna\n"
+" som arkiverades i revision 50, och inkluderar inte ändringarna i\n"
+" revision 49.\n"
+"\n"
+" För att göra sammanslagningen, börja med en ren arbetskopia av\n"
+" grenen \"1.x-utgåva\" och kör följande kommando i dess rotkatalog.\n"
+" Standardvärdet för målet är \".\":\n"
+"\n"
+" svn merge -c50 ^/trunk\n"
+"\n"
+" Det går också att plocka flera revisioner och/eller intervall:\n"
+"\n"
+" svn merge -c50,54,60 -r65:68 ^/trunk\n"
+"\n"
+"\n"
+" 3. Denna form är en sammanslagning av skillnaden mellan 2 URL:er:\n"
+"\n"
+" svn merge KÄLLA1[@REV1] KÄLLA2[@REV2] [AKSÖKVÄGSMÅL]\n"
+"\n"
+" Använd bara denna form om de andra varianterna inte passad den\n"
+" aktuella situationen, eftersom den är förhållandevis komplicerad.\n"
+"\n"
+" Två käll-URL:er anges, som betecknar två träd på samma gren eller\n"
+" på olika grenar. Träden jämförs och skillnaden från KÄLLA1@REV1 till\n"
+" KÄLLA2@REV2 anbringas i arbetskopian för målgrenen i AKSÖKVÄGSMÅL.\n"
+" Målgrenen kan vara samma som endera källan, eller något annat.\n"
+" De tre inblandade grenarna kan vara helt obesläktade.\n"
+"\n"
+" AKSÖKVÄGSMÅL är en sökväg till en arbetskopia; om ej angiven antas \".\".\n"
+" De särskilda fallen ovan för den \"fullständiga\" sammanslagningsformen\n"
+" gäller även här.\n"
+"\n"
+" KÄLLA1 och/eller KÄLLA2 kan också anges som sökvägar i en arbetskopia,\n"
+" och då tas käll-URL:en för sammanslagningen från arbetskopian.\n"
+"\n"
+" - Exempel på sammanslagning med 2 URL:er -\n"
+"\n"
+" Två funktioner har utvecklats på skilda grenar, \"apelsin\" och\n"
+" \"banan\". Det står nu klart att \"banan\" borde kombineras med grenen\n"
+" \"apelsin\" för vidare utveckling innan återförening.\n"
+"\n"
+" Grenen \"banan\" har synkroniserats med \"trunk\" upp till revision\n"
+" 500. (Om revisionsnumret inte är känt kan det hittas med hjälp av\n"
+" kommandona \"svn log\" och/eller \"svn mergeinfo\".)\n"
+" Skillnaden mellan trunk@500 och banan@HEAD innehåller alla ändringar\n"
+" som har med funktionen \"banan\" att göra, och inga andra. Dessa\n"
+" ändringar anbringas i grenen \"apelsin\".\n"
+"\n"
+" apelsin +-----------------------------------o\n"
+" / ^\n"
+" / /\n"
+" / r500 /\n"
+" trunk ------+------+-----------------V---------> /\n"
+" \\ . /\n"
+" \\ ............ /\n"
+" \\ . /\n"
+" banan +-----------------------------------H\n"
+"\n"
+" I diagrammet ovan betecknar V vänstersidan (trunk@500) och H högersidan\n"
+" (banan@HEAD) av sammanslagningen. Skillnaden mellan vänstra och högra\n"
+" sidan anbringas i målets arbetskopia, i detta fall en arbetskopia av\n"
+" grenen \"apelsin\".\n"
+"\n"
+" För att göra sammanslagningen, kör följande kommando i rotkatalogen\n"
+" till en ren arbetskopia av grenen \"apelsin\":\n"
+"\n"
+" svn merge ^/trunk@500 ^/banan\n"
+"\n"
+" Precis vilka ändringar som en 2-URL-sammanslagning gör kan förhands-\n"
+" granskas med hjälp av \"svn diff\". Detta kräver ingen arbetskopia.\n"
+" I detta fall:\n"
+"\n"
+" svn diff ^/trunk@500 ^/banan@HEAD\n"
+"\n"
+"\n"
+" Följande gäller alla sorters sammanslagningar:\n"
+"\n"
+" För att undvika onödiga konflikter kräver \"svn merge\" att AKSÖKVÄGSMÅL\n"
+" inte är en arbetskopia med blandad revision. Kör \"svn update\" innan\n"
+" en sammanslagning påbörjas för att vara säker på att alla objekt i\n"
+" arbetskopian utgår från samma revision.\n"
+"\n"
+" Undvik om möjligt lokala ändringar i sammanslagningsmålets arbetskopia\n"
+" före sammanslagningen, för enkelhets skull. Det är då lättare att ångra\n"
+" åtgärden och att förstå grenens historik.\n"
+"\n"
+" Växlade delträd bör också undvikas under sammanslagning, eftersom de\n"
+" kan orsaka ofullständiga sammanslagningar och ge upphov till samman-\n"
+" slagningsinformation i delträd.\n"
+"\n"
+" För varje objekt som slagits samman skrivs en rad med en bokstav för\n"
+" vad som gjordes. Dessa bokstäver betyder:\n"
+"\n"
+" A Tillagt\n"
+" D Borttaget\n"
+" U Uppdaterat\n"
+" C Konflikt\n"
+" G Sammanslaget\n"
+" E Befintligt\n"
+" R Ersatt\n"
+"\n"
+" Ett tecken i den första kolumnen ger information om själva objektet.\n"
+" Information om objektets egenskaper ges av tecken i andra kolumnen.\n"
+" Ett \"C\" i tredje kolumnen påvisar en trädkonflikt, medan ett \"C\" i\n"
+" första och andra kolumnen betyder textkonflikter i filer respektive\n"
+" egenskapsvärden.\n"
+"\n"
+" - Sammanslagningsföljning -\n"
+"\n"
+" Subversion använder egenskapen svn:mergeinfo för att följa samman-\n"
+" slagningshistorien. Denna egenskap läses i början av sammanslagningen\n"
+" för att avgöra vad som skall ingå, och uppdateras vid sammanslagningens\n"
+" fullbordan med de införda ändringarna. Sammanslagningsinformationen\n"
+" används bara om de två källorna befinner sig på samma historiska linje:\n"
+" om den ena källan är en ättling till den andra (dvs om en av dem skapades\n"
+" som en kopia av den andra). Detta kontrolleras i synkroniseringar och\n"
+" återföreningar.\n"
+"\n"
+" Flaggan --ignore-ancestry hindrar sammanslagningsföljning från att\n"
+" användas; sammanslagningsinformationen kommer varken användas eller\n"
+" uppdateras.\n"
+"\n"
+" - Sammanslagning från andra arkiv -\n"
+"\n"
+" Subversion tillåter sammanslagning från andra arkiv.\n"
+" Alla käll-URL:er måste peka på samma arkiv, men målets arbetskopia kan\n"
+" komma från ett annat arkiv än källan. Följande måste dock beaktas:\n"
+" Kopior som görs i källan kommer omvandlas till rena tillägg i målet.\n"
+" Vidare stöds inte sammanslagningsföljning för sammanslagningar från\n"
+" andra arkiv.\n"
+
+#: ../svn/svn.c:1094
msgid ""
"Display merge-related information.\n"
-"usage: mergeinfo SOURCE[@REV] [TARGET[@REV]]\n"
+"usage: 1. mergeinfo SOURCE[@REV] [TARGET[@REV]]\n"
+" 2. mergeinfo --show-revs=WHICH SOURCE[@REV] [TARGET[@REV]]\n"
+"\n"
+" 1. Summarize the history of merging between SOURCE and TARGET. The graph\n"
+" shows, from left to right:\n"
+" the youngest common ancestor of the branches;\n"
+" the latest full merge in either direction, and thus the common base\n"
+" that will be used for the next complete merge;\n"
+" the repository path and revision number of the tip of each branch.\n"
+"\n"
+" 2. Print the revision numbers on SOURCE that have been merged to TARGET\n"
+" (with --show-revs=merged), or that have not been merged to TARGET\n"
+" (with --show-revs=eligible). Print only revisions in which there was\n"
+" at least one change in SOURCE.\n"
+"\n"
+" If --revision (-r) is provided, filter the displayed information to\n"
+" show only that which is associated with the revisions within the\n"
+" specified range. Revision numbers, dates, and the 'HEAD' keyword are\n"
+" valid range values.\n"
+"\n"
+" SOURCE and TARGET are the source and target branch URLs, respectively.\n"
+" (If a WC path is given, the corresponding base URL is used.) The default\n"
+" TARGET is the current working directory ('.'). REV specifies the revision\n"
+" to be considered the tip of the branch; the default for SOURCE is HEAD,\n"
+" and the default for TARGET is HEAD for a URL or BASE for a WC path.\n"
+"\n"
+" The depth can be 'empty' or 'infinity'; the default is 'empty'.\n"
+msgstr ""
+"Visa information om sammanslagningar.\n"
+"användning: 1. mergeinfo KÄLLA[@REV] [MÅL[@REV]]\n"
+" 2. mergeinfo --show-revs=VILKA KÄLLA[@REV] [MÅL[@REV]]\n"
+"\n"
+" 1. Sammanfatta sammanslagningshistorien mellan KÄLLA och MÅL. Diagrammet\n"
+" visar, från vänster till höger:\n"
+" grenarnas yngsta gemensamma ursprung;\n"
+" den senaste fulla sammanslagningen i endera riktningen, och alltså\n"
+" den gemensamma basen som kommer användas för nästa fullständiga\n"
+" sammanslagning;\n"
+" arkivsökväg och revisionsnummer för varje grenspets.\n"
+"\n"
+" 2. Visa revisionsnumren i KÄLLA som har införts i MÅL\n"
+" (med --show-revs=merged), eller som inte har införts i MÅL\n"
+" (med --show-revs=eligible). Bara revisioner där minst en ändring\n"
+" skedde i KÄLLA visas.\n"
+"\n"
+" Om --revision (-r) anges, begränsa de visade revisionerna till det\n"
+" angivna området. Revisionsnummer, datum och nyckelordet \"HEAD\" är\n"
+" giltiga områdesvärden.\n"
+"\n"
+" KÄLLA och MÅL är URL:er för käll- respektive målgrenen. (Om en sökväg\n"
+" till en arbetskopia anges, så används motsvarande bas-URL istället.)\n"
+" Standardvärdet på MÅL är den aktuella arbetskatalogen (\".\").\n"
+" REV anger revisionen att använda som grenspets; standardvärdet för KÄLLA\n"
+" är HEAD, och för MÅL är standardvärdet HEAD för en URL och BASE för en\n"
+" arbetskopia.\n"
"\n"
-" Display information related to merges (or potential merges) between\n"
-" SOURCE and TARGET (default: '.'). If the --show-revs option\n"
-" is not provided, display revisions which have been merged from\n"
-" SOURCE to TARGET; otherwise, display the type of information\n"
-" specified by the --show-revs option.\n"
-msgstr ""
+" Djupet kan vara \"empty\" eller \"infinity\"; standardvärdet är \"empty\".\n"
-#: ../svn/main.c:743
-#, fuzzy
+#: ../svn/svn.c:1125
msgid ""
"Create a new directory under version control.\n"
"usage: 1. mkdir PATH...\n"
@@ -8688,45 +11900,52 @@ msgstr ""
" 2. Varje katalog som anges av en URL, skapas i arkivet och arkiveras\n"
" genast.\n"
"\n"
-" I båda fallen måste katalogerna ovanför de angivna redan finnas.\n"
+" I båda fallen måste katalogerna ovanför de angivna redan finnas,\n"
+" såvida inte flaggan --parents anges.\n"
-#: ../svn/main.c:760
-#, fuzzy
+#: ../svn/svn.c:1142
msgid ""
-"Move and/or rename something in working copy or repository.\n"
+"Move (rename) an item in a working copy or repository.\n"
"usage: move SRC... DST\n"
"\n"
-"When moving multiple sources, they will be added as children of DST,\n"
-"which must be a directory.\n"
-"\n"
-" Note: this subcommand is equivalent to a 'copy' and 'delete'.\n"
-" Note: the --revision option has no use and is deprecated.\n"
-"\n"
" SRC and DST can both be working copy (WC) paths or URLs:\n"
-" WC -> WC: move and schedule for addition (with history)\n"
-" URL -> URL: complete server-side rename.\n"
-" All the SRCs must be of the same type.\n"
-msgstr ""
-"Flytta och/eller byt namn på ett objekt i en arbetskopia\n"
-"eller arkiv.\n"
-"användning: move KÄLLA DEST\n"
-"\n"
-" Anmärkning: Detta underkommando är samma sak som \"copy\" följt av \"delete\".\n"
-" Anmärkning: --revision-flaggan är meningslös och kvarstår av kompatibilitets-\n"
-" skäl.\n"
-"\n"
-" KÄLLA och DEST kan vara antingen sökvägar i en arbetskopia (AK)\n"
+" WC -> WC: move an item in a working copy, as a local change to\n"
+" be committed later (with or without further changes)\n"
+" URL -> URL: move an item in the repository directly, immediately\n"
+" creating a new revision in the repository\n"
+" All the SRCs must be of the same type. When moving multiple sources,\n"
+" they will be added as children of DST, which must be a directory.\n"
+"\n"
+" SRC and DST of WC -> WC moves must be committed in the same revision.\n"
+" Furthermore, WC -> WC moves will refuse to move a mixed-revision subtree.\n"
+" To avoid unnecessary conflicts, it is recommended to run 'svn update'\n"
+" to update the subtree to a single revision before moving it.\n"
+" The --allow-mixed-revisions option is provided for backward compatibility.\n"
+"\n"
+" The --revision option has no use and is deprecated.\n"
+msgstr ""
+"Flytta (döp om) en fil eller katalog i en arbetskopia\n"
+"eller ett arkiv.\n"
+"användning: move KÄLLOR... MÅL\n"
+"\n"
+" KÄLLOR och MÅL kan båda vara sökvägar till en arbetskopia (AK)\n"
" eller URL:er:\n"
-" AK -> AK: flytta och schemalägg för tillägg (med historik)\n"
-" URL -> URL: namnbyte på servern\n"
-
-#: ../svn/main.c:777
-msgid ""
-"Permanently delete a specific node-revision from the repository.\n"
-"usage: obliterate URL@REV\n"
-msgstr ""
-
-#: ../svn/main.c:783
+" AK -> AK: flytta ett objekt i en arbetskopia, som en lokal ändring\n"
+" för senare arkivering (med eller utan vidare ändringar)\n"
+" URL -> URL: flytta ett objekt direkt i arkivet, vilket omedelbart\n"
+" skapar en ny revision i arkivet.\n"
+" Alla KÄLLOR måste vara av samma typ. När flera källor flyttas kommer de\n"
+" läggas till i MÅL, som måste vara en katalog.\n"
+"\n"
+" KÄLLOR och MÅL i flyttningar mellan arbetskopior måste arkiveras i\n"
+" samma revision, och kan inte flytta delträd med blandad revision.\n"
+" För att undvika onödiga konflikter rekommenderas att \"svn update\"\n"
+" körs för att uppdatera delträdet till en enda revision innan det\n"
+" flyttas.\n"
+" Flaggan --allow-mixed-revision finns till för bakåtkompatibilitet.\n"
+" Flaggan --revision saknar användning och bör ej användas.\n"
+
+#: ../svn/svn.c:1164
msgid ""
"Apply a patch to a working copy.\n"
"usage: patch PATCHFILE [WCPATH]\n"
@@ -8736,7 +11955,8 @@ msgid ""
"\n"
" A unidiff patch suitable for application to a working copy can be\n"
" produced with the 'svn diff' command or third-party diffing tools.\n"
-" Any non-unidiff content of PATCHFILE is ignored.\n"
+" Any non-unidiff content of PATCHFILE is ignored, except for Subversion\n"
+" property diffs as produced by 'svn diff'.\n"
"\n"
" Changes listed in the patch will either be applied or rejected.\n"
" If a change does not match at its exact line offset, it may be applied\n"
@@ -8763,9 +11983,59 @@ msgid ""
" for deletion. If the patch creates a new file, that file is scheduled\n"
" for addition. Use 'svn revert' to undo deletions and additions you\n"
" do not agree with.\n"
-msgstr ""
+"\n"
+" Hint: If the patch file was created with Subversion, it will contain\n"
+" the number of a revision N the patch will cleanly apply to\n"
+" (look for lines like '--- foo/bar.txt (revision N)').\n"
+" To avoid rejects, first update to the revision N using\n"
+" 'svn update -r N', apply the patch, and then update back to the\n"
+" HEAD revision. This way, conflicts can be resolved interactively.\n"
+msgstr ""
+"Anbringa en ändringsfil (patch) i en arbetskopia.\n"
+"användning: patch PATCHFIL [AKSÖKVÄG]\n"
+"\n"
+" Anbringa ändringsfilen PATCHFIL, i unidiff-format, på\n"
+" arbetskopian AKSÖKVÄG. Om AKSÖKVÄG utelämnas så antas \".\".\n"
+"\n"
+" En ändringsfil lämpad för att anbringas på en arbetskopia kan genereras\n"
+" med hjälp av kommandot \"svn diff\" eller ett externt verktyg.\n"
+" De delar av PATCHFIL som inte motsvarar unidiff-formatet hoppas över,\n"
+" utom egenskapsändringar som genererades av \"svn diff\".\n"
+"\n"
+" Ändringarna i den angivna filen kommer antingen att anbringas eller\n"
+" avslås. Om en ändring inte passar in på sin angivna plats men rätt\n"
+" omgivande rader finns längre upp eller ner i filen så kan den anbringas\n"
+" där istället.\n"
+" En ändring kan också anbringas med oskärpa, vilket betyder att en eller\n"
+" flera omgivande rader hoppas över vid inpassningen.\n"
+" Om ingen passande plats kan hittas för en ändring, så betraktas den som\n"
+" en konflikt och skrivs till en avslagsfil med suffixet \".svnpatch.rej\".\n"
+"\n"
+" För varje ändrad fil skrivs en rad med en bokstav för vad som gjordes.\n"
+" Dessa bokstäver betyder:\n"
+"\n"
+" A Tillagd\n"
+" D Borttagen\n"
+" U Uppdaterad\n"
+" C Konflikt\n"
+" G Sammanslagen (med lokala ändringar som inte har arkiverats)\n"
+"\n"
+" För ändringar som inte anbragdes exakt rapporteras detta på rader som\n"
+" med tecknet \">\". Sådana ändringar bör granskas noga.\n"
+"\n"
+" Om allt innehåll tas bort från en fil, så kommer den filen schemaläggas\n"
+" för radering. Om en ny fil skapas så kommer den schemaläggas att läggas\n"
+" till. Använd \"svn revert\" för att förhindra oönskade raderingar och\n"
+" tillägg.\n"
+"\n"
+" Anm: Om ändringsfilen skapades av Subversion, innehåller den revisions-\n"
+" numret N som den kan anbringas rent på (leta efter rader som liknar\n"
+" \"--- katalog/fil.txt (revision N)\"). För att undvika avslag,\n"
+" uppdatera först till revision N med hjälp av \"svn update -R N\",\n"
+" anbringa ändringsfilen, och uppdatera sedan tillbaka till revisionen\n"
+" HEAD. På så kan kommer konflikter lösas interaktivt.\n"
-#: ../svn/main.c:823
+#: ../svn/svn.c:1212
msgid ""
"Remove a property from files, dirs, or revisions.\n"
"usage: 1. propdel PROPNAME [PATH...]\n"
@@ -8784,8 +12054,7 @@ msgstr ""
" arkivet.\n"
" MÅL används endast för att avgöra vilket arkiv som ska användas.\n"
-#: ../svn/main.c:833
-#, fuzzy
+#: ../svn/svn.c:1222
msgid ""
"Edit a property with an external editor.\n"
"usage: 1. propedit PROPNAME TARGET...\n"
@@ -8795,7 +12064,7 @@ msgid ""
" 2. Edits unversioned remote prop on repos revision.\n"
" TARGET only determines which repository to access.\n"
"\n"
-"See 'svn help propset' for more on setting properties.\n"
+" See 'svn help propset' for more on setting properties.\n"
msgstr ""
"Redigera en egenskap med en extern editor.\n"
"användning: 1. propedit EGENSKAPSNAMN MÅL...\n"
@@ -8805,9 +12074,10 @@ msgstr ""
" 2. Redigerar en icke versionshanterad revisionsegenskap på en revision i\n"
" arkivet.\n"
" MÅL används endast för att avgöra vilket arkiv som ska användas.\n"
+"\n"
+" Se \"svn help propset\" för mer om att sätta egenskaper.\n"
-#: ../svn/main.c:845
-#, fuzzy
+#: ../svn/svn.c:1234
msgid ""
"Print the value of a property on files, dirs, or revisions.\n"
"usage: 1. propget PROPNAME [TARGET[@REV]...]\n"
@@ -8818,15 +12088,18 @@ msgid ""
" 2. Prints unversioned remote prop on repos revision.\n"
" TARGET only determines which repository to access.\n"
"\n"
-" By default, this subcommand will add an extra newline to the end\n"
-" of the property values so that the output looks pretty. Also,\n"
-" whenever there are multiple paths involved, each property value\n"
-" is prefixed with the path with which it is associated. Use the\n"
-" --strict option to disable these beautifications (useful when\n"
-" redirecting a binary property value to a file, but available only\n"
-" if you supply a single TARGET to a non-recursive propget operation).\n"
+" With --verbose, the target path and the property name are printed on\n"
+" separate lines before each value, like 'svn proplist --verbose'.\n"
+" Otherwise, if there is more than one TARGET or a depth other than\n"
+" 'empty', the target path is printed on the same line before each value.\n"
+"\n"
+" By default, an extra newline is printed after the property value so that\n"
+" the output looks pretty. With a single TARGET and depth 'empty', you can\n"
+" use the --strict option to disable this (useful when redirecting a binary\n"
+" property value to a file, for example).\n"
msgstr ""
-"Skriv ut värdet på en egenskap för filer, kataloger eller revisioner.\n"
+"Skriv ut värdet på en egenskap för filer, kataloger\n"
+"eller revisioner.\n"
"användning: 1. propget PROPNAMN [MÅL[@REV]...]\n"
" 2. propget PROPNAMN --revprop -r REV [MÃ…L]\n"
"\n"
@@ -8836,13 +12109,25 @@ msgstr ""
" arkivet.\n"
" MÅL används endast för att avgöra vilket arkiv som ska användas.\n"
"\n"
+" Med --verbose kommer målsökvägen och egenskapsnamnet skrivas på skilda\n"
+" rader före varje värde, som med \"svn proplist --verbose\". Annars, med\n"
+" mer än ett MÅL eller ett djup annat än \"empty\", så skrivs målsökvägen\n"
+" på samma rad framför varje värde.\n"
+"\n"
" Normalt skrivs ett radslut ut efter värdena, så att utskrifterna ser\n"
-" snyggare ut. Om egenskaper för fler än en sökväg skrivs ut, läggs också\n"
-" sökvägen till före det värde som är kopplat till den. Använd flaggan --strict\n"
-" för att slå av dessa \"tillsnyggningar\" (bland annat användbart när binära\n"
-" egenskaper skickas till en fil).\n"
+" snyggare ut. Med ett enda MÃ…L och djupet \"empty\" kan flaggan --strict\n"
+" användas för att slå av detta radslut (bland annat användbart när\n"
+" binära egenskaper skickas till en fil).\n"
-#: ../svn/main.c:865
+#: ../svn/svn.c:1254 ../svn/svn.c:1271
+msgid "print path, name and value on separate lines"
+msgstr "skriv sökväg, namn och värde på skilda rader"
+
+#: ../svn/svn.c:1255
+msgid "don't print an extra newline"
+msgstr "skriv inte ett extra radslut"
+
+#: ../svn/svn.c:1258
msgid ""
"List all properties on files, dirs, or revisions.\n"
"usage: 1. proplist [TARGET[@REV]...]\n"
@@ -8852,6 +12137,9 @@ msgid ""
" revision the target is first looked up.\n"
" 2. Lists unversioned remote props on repos revision.\n"
" TARGET only determines which repository to access.\n"
+"\n"
+" With --verbose, the property values are printed as well, like 'svn propget\n"
+" --verbose'. With --quiet, the paths are not printed.\n"
msgstr ""
"Lista alla egenskaper på filer, kataloger eller\n"
"revisioner.\n"
@@ -8863,9 +12151,15 @@ msgstr ""
" 2. Listar icke versionshanterade revisionsegenskaper för en revision i\n"
" ett arkiv.\n"
" MÅL används endast för att avgöra vilket arkiv som ska användas.\n"
+"\n"
+" Med --verbose skrivs egenskapsvärdena också ut, som med \"svn propget\n"
+" --verbose\". Med --quiet skrivs inte sökvägarna ut.\n"
-#: ../svn/main.c:876
-#, fuzzy
+#: ../svn/svn.c:1272
+msgid "don't print the path"
+msgstr "skriv inte sökvägen"
+
+#: ../svn/svn.c:1275
msgid ""
"Set the value of a property on files, dirs, or revisions.\n"
"usage: 1. propset PROPNAME PROPVAL PATH...\n"
@@ -8877,18 +12171,35 @@ msgid ""
"\n"
" The value may be provided with the --file option instead of PROPVAL.\n"
"\n"
-" Note: svn recognizes the following special versioned properties\n"
-" but will store any arbitrary properties set:\n"
-" svn:ignore - A newline separated list of file glob patterns to ignore.\n"
+" Property names starting with 'svn:' are reserved. Subversion recognizes\n"
+" the following special versioned properties on a file:\n"
" svn:keywords - Keywords to be expanded. Valid keywords are:\n"
-" URL, HeadURL - The URL for the head version of the object.\n"
+" URL, HeadURL - The URL for the head version of the file.\n"
" Author, LastChangedBy - The last person to modify the file.\n"
-" Date, LastChangedDate - The date/time the object was last modified.\n"
-" Rev, Revision, - The last revision the object changed.\n"
-" LastChangedRevision\n"
-" Id - A compressed summary of the previous\n"
-" 4 keywords.\n"
+" Date, LastChangedDate - The date/time the file was last modified.\n"
+" Rev, Revision, - The last revision the file changed.\n"
+" LastChangedRevision\n"
+" Id - A compressed summary of the previous four.\n"
" Header - Similar to Id but includes the full URL.\n"
+"\n"
+" Custom keywords can be defined with a format string separated from\n"
+" the keyword name with '='. Valid format substitutions are:\n"
+" %a - The author of the revision given by %r.\n"
+" %b - The basename of the URL of the file.\n"
+" %d - Short format of the date of the revision given by %r.\n"
+" %D - Long format of the date of the revision given by %r.\n"
+" %P - The file's path, relative to the repository root.\n"
+" %r - The number of the revision which last changed the file.\n"
+" %R - The URL to the root of the repository.\n"
+" %u - The URL of the file.\n"
+" %_ - A space (keyword definitions cannot contain a literal space).\n"
+" %% - A literal '%'.\n"
+" %H - Equivalent to %P%_%r%_%d%_%a.\n"
+" %I - Equivalent to %b%_%r%_%d%_%a.\n"
+" Example custom keyword definition: MyKeyword=%r%_%a%_%P\n"
+" Once a custom keyword has been defined for a file, it can be used\n"
+" within the file like any other keyword: $MyKeyword$\n"
+"\n"
" svn:executable - If present, make the file executable. Use\n"
" 'svn propdel svn:executable PATH...' to clear.\n"
" svn:eol-style - One of 'native', 'LF', 'CR', 'CRLF'.\n"
@@ -8896,95 +12207,133 @@ msgid ""
" whether to merge the file, and how to serve it from Apache.\n"
" A mimetype beginning with 'text/' (or an absent mimetype) is\n"
" treated as text. Anything else is treated as binary.\n"
-" svn:externals - A newline separated list of module specifiers,\n"
-" each of which consists of a URL and a relative directory path,\n"
-" similar to the syntax of the 'svn checkout' command:\n"
-" http://example.com/repos/zag foo/bar\n"
-" An optional peg revision may be appended to the URL to pin the\n"
-" external to a known revision:\n"
-" http://example.com/repos/zig@42 foo\n"
-" Relative URLs are indicated by starting the URL with one\n"
-" of the following strings:\n"
-" ../ to the parent directory of the extracted external\n"
-" ^/ to the repository root\n"
-" // to the scheme\n"
-" / to the server root\n"
-" The ambiguous format 'relative_path relative_path' is taken as\n"
-" 'relative_url relative_path' with peg revision support.\n"
-" Lines in externals definitions starting with the '#' character\n"
-" are considered comments and are ignored.\n"
-" Subversion 1.4 and earlier only support the following formats\n"
-" where peg revisions can only be specified using a -r modifier\n"
-" and where URLs cannot be relative:\n"
-" foo http://example.com/repos/zig\n"
-" foo/bar -r 1234 http://example.com/repos/zag\n"
-" Use of these formats is discouraged. They should only be used if\n"
-" interoperability with 1.4 clients is desired.\n"
" svn:needs-lock - If present, indicates that the file should be locked\n"
" before it is modified. Makes the working copy file read-only\n"
" when it is not locked. Use 'svn propdel svn:needs-lock PATH...'\n"
" to clear.\n"
"\n"
-" The svn:keywords, svn:executable, svn:eol-style, svn:mime-type and\n"
-" svn:needs-lock properties cannot be set on a directory. A non-recursive\n"
-" attempt will fail, and a recursive attempt will set the property\n"
-" only on the file children of the directory.\n"
+" Subversion recognizes the following special versioned properties on a\n"
+" directory:\n"
+" svn:ignore - A list of file glob patterns to ignore, one per line.\n"
+" svn:global-ignores - Like svn:ignore, but inheritable.\n"
+" svn:externals - A list of module specifiers, one per line, in the\n"
+" following format similar to the syntax of 'svn checkout':\n"
+" [-r REV] URL[@PEG] LOCALPATH\n"
+" Example:\n"
+" http://example.com/repos/zig foo/bar\n"
+" The LOCALPATH is relative to the directory having this property.\n"
+" To pin the external to a known revision, specify the optional REV:\n"
+" -r25 http://example.com/repos/zig foo/bar\n"
+" To unambiguously identify an element at a path which may have been\n"
+" subsequently deleted or renamed, specify the optional PEG revision:\n"
+" -r25 http://example.com/repos/zig@42 foo/bar\n"
+" The URL may be a full URL or a relative URL starting with one of:\n"
+" ../ to the parent directory of the extracted external\n"
+" ^/ to the repository root\n"
+" / to the server root\n"
+" // to the URL scheme\n"
+" Use of the following format is discouraged but is supported for\n"
+" interoperability with Subversion 1.4 and earlier clients:\n"
+" LOCALPATH [-r PEG] URL\n"
+" The ambiguous format 'relative_path relative_path' is taken as\n"
+" 'relative_url relative_path' with peg revision support.\n"
+" Lines starting with a '#' character are ignored.\n"
msgstr ""
-"Sätt värdet på en egenskap på filer, kataloger eller revisioner.\n"
+"Sätt värdet på en egenskap på filer, kataloger\n"
+"eller revisioner.\n"
"användning: 1. propset PROPNAMN VÄRDE SÖKVÄG...\n"
" 2. propset PROPNAMN --revprop -r REV VÄRDE [MÅL]\n"
"\n"
-" 1. Gör en lokal ändring av en versionshanterad egenskap i en arbetskopia.\n"
+" 1. Ändra en versionshanterad egenskap på en fil eller katalog\n"
+" i en arbetskopia.\n"
" 2. Gör en ändring av en icke versionshanterad revisionsegenskap på en\n"
" revision i arkivet.\n"
" MÅL används endast för att avgöra vilket arkiv som ska användas.\n"
"\n"
-" Värdet kan tillhandahållas med --file-flaggan istället för som VÄRDE.\n"
+" Värdet kan tillhandahållas med flaggan --file istället för som VÄRDE.\n"
"\n"
-" Anmärkning: svn känner igen följande särskilda versionshanterade egenskaper,\n"
-" men lagrar godtyckliga egenskaper:\n"
-" svn:ignore - En lista med filmönster att ignorera, avskilda med\n"
-" radslut.\n"
+" Egenskaper vars namn börjar med \"svn:\" är reserverade. Subversion\n"
+" känner igen följande särskilda versionshanterade egenskaper på filer:\n"
" svn:keywords - Nyckelord som ska expanderas. Giltiga nyckelord är:\n"
-" URL, HeadURL - URL:en till objektets senaste revision.\n"
-" Author, LastChangedBy - Den person som gjorde den senaste ändringen.\n"
+" URL, HeadURL - URL:en till filens senaste revision.\n"
+" Author, LastChangedBy - Personen som gjorde den senaste ändringen.\n"
" Date, LastChangedDate - Datum/tid för den senaste ändringen.\n"
-" Rev, Revision - Den senaste revisionen där objektet ändrades.\n"
-" LastChangedRevision\n"
+" Rev, Revision, - Senaste revisionen där filen ändrades.\n"
+" LastChangedRevision\n"
" Id - Ett sammandrag av de 4 nyckelorden ovan.\n"
-" svn:executable - Om den finns, görs filen exekverbar. Den här egenskapen\n"
-" kan inte sättas på en katalog. Ett icke-rekursivt försök kommer att\n"
-" misslyckas, men om den sätts rekursivt sätts egenskapen för katalogens\n"
-" barn.\n"
+" Header - Som \"Id\" men med full URL.\n"
+"\n"
+" Egna nyckelord kan definieras med en formatsträng som avskiljs från\n"
+" namnet med \"=\". Giltiga formatsubstitutioner är:\n"
+" %a - Författaren till revisionen som ges av %r.\n"
+" %b - Basnamnet för filens URL.\n"
+" %d - Datumet för revisionen som ges av %r, på kort form.\n"
+" %D - Datumet för revisionen som ges av %r, på lång form.\n"
+" %P - Filens sökväg relativt arkivroten.\n"
+" %r - Revisionsnumret för den senaste ändringen av filen.\n"
+" %R - Arkivrotens URL.\n"
+" %u - Filens URL.\n"
+" %_ - Ett mellanslag (nyckelordsdefinitioner kan inte bokstavligen\n"
+" innehålla mellanslag).\n"
+" %% - Ett procenttecken (\"%\").\n"
+" %H - Samma som %P%_%r%_%d%_%a.\n"
+" %I - Samma som %b%_%r%_%d%_%a.\n"
+" Exempel på definition av ett eget nyckelord: Mittnyckelord=%r%_%a%_%P\n"
+" När ett eget nyckelord har definierats för en fil kan det användas\n"
+" inom den filen som vilket annat nyckelord som helst: $Mittnyckelord$\n"
+"\n"
+" svn:executable - Om den finns, görs filen exekverbar. Använd\n"
+" \"svn propdel svn:executable SÖKVÄG...\" för att nollställa.\n"
" svn:eol-style - NÃ¥got av \"native\", \"CR\", \"LF\" eller \"CRLF\".\n"
-" svn:mime-type - Filens mime-typ. Används för att avgöra om merge\n"
-" ska göras på filen och hur den skickas via Apache. En mime-typ som\n"
-" inleds med \"text/\" eller som saknas behandlas som text. Allt annat\n"
-" behandlas som binärdata.\n"
-" svn:externals - En lista, avskild med radslut, med modulspecifikationer,\n"
-" vilka består av en relativ sökväg, valbara revisionsflaggor samt en URL.\n"
-" Exempel:\n"
-" foo http://example.com/repos/zig\n"
-" foo/bar -r 1234 http://example.com/repos/zag\n"
+" svn:mime-type - Filens mime-typ. Används för att avgöra hur samman-\n"
+" slagningar av ändringar sker och hur den skickas från Apache. En\n"
+" mime-typ som inleds med \"text/\" eller som saknas behandlas som text.\n"
+" Allt annat behandlas som binärdata.\n"
" svn:needs-lock - Om den är satt, visar den att filen bör låsas innan\n"
-" den ändras. Gör att arbetsfilen blir skrivskyddad då den inte är låst.\n"
-" Egenskaperna svn:keywords, svn:executable, svn:eol-style, svn:mime-type\n"
-" och svn:needs-lock kan inte sättas på en katalog. Ett icke-rekursivt\n"
-" försök kommer att misslyckas, men om de sätts rekursivt sätts egenskaperna\n"
-" på de av katalogens barn som är filer.\n"
-
-#: ../svn/main.c:940
+" den ändras. Gör att arbetsfilen blir skrivskyddad när den inte är\n"
+" låst. Använd \"svn propdel svn:needs-lock SÖKVÄG...\" för att\n"
+" nollställa.\n"
+"\n"
+" Subversion känner igen följande särskilda versionshanterade egenskaper på\n"
+" kataloger:\n"
+" svn:ignore - En lista med filmönster att ignorera, ett per rad.\n"
+" svn:global-ignores - Som svn:ignore men ärftlig.\n"
+" svn:externals - En lista med modulspecifikationer, en per rad, på\n"
+" följande format liknande syntaxen för \"svn checkout\":\n"
+" [-r REV] URL[@FIXREV] LOKALSÖKVÄG\n"
+" Exempel:\n"
+" http://exempel.se/arkiv/katalog alfa/beta\n"
+" LOKALSÖKVÄG är relativ katalogen med denna egenskap.\n"
+" För att fixera det externa objektet till en känd revision, ange REV:\n"
+" -r25 http://exempel.se/arkiv/katalog alfa/beta\n"
+" För att beteckna ett objekt med en sökväg som sedan kan ha tagits\n"
+" bort eller döpts om, ange FIXREV:\n"
+" -r25 http://exempel.se/arkiv/katalog@42 alfa/beta\n"
+" URL:en kan vara en full URL eller en relativ URL som börjar med\n"
+" något av:\n"
+" ../ till föräldrakatalogen till det externa objektet\n"
+" ^/ till arkivroten\n"
+" / till serverroten\n"
+" // till URL-schemat\n"
+" Följande format är föråldrat men stöds för samverkan med Subversion\n"
+" klientversion 1.4 och äldre:\n"
+" LOKALSÖKVÄG [-r FIXREV] URL\n"
+" Det flertydiga formatet \"relativ_sökväg relativ_sökväg\" tolkas som\n"
+" \"relativ_URL relativ_sökväg\" med stöd för fixerad revision.\n"
+" Rader som börjar med tecknet \"#\" hoppas över.\n"
+
+#: ../svn/svn.c:1354
msgid "read property value from file ARG"
msgstr "läs egenskapsvärde från filen ARG"
-#: ../svn/main.c:943
+#: ../svn/svn.c:1357
msgid ""
"Relocate the working copy to point to a different repository root URL.\n"
"usage: 1. relocate FROM-PREFIX TO-PREFIX [PATH...]\n"
" 2. relocate TO-URL [PATH]\n"
"\n"
" Rewrite working copy URL metadata to reflect a syntactic change only.\n"
-" This is used when repository's root URL changes (such as a scheme\n"
+" This is used when a repository's root URL changes (such as a scheme\n"
" or hostname change) but your working copy still reflects the same\n"
" directory within the same repository.\n"
"\n"
@@ -8993,28 +12342,67 @@ msgid ""
" complete old and new URLs if you wish.) Use 'svn info' to determine\n"
" the current working copy URL.\n"
"\n"
-" 2. TO-URL is the (complete) new repository URL to use for for PATH.\n"
+" 2. TO-URL is the (complete) new repository URL to use for PATH.\n"
"\n"
" Examples:\n"
" svn relocate http:// svn:// project1 project2\n"
" svn relocate http://www.example.com/repo/project \\\n"
" svn://svn.example.com/repo/project\n"
msgstr ""
+"Omlokalisera arbetskopian till att använda en annan arkivrots-URL.\n"
+"användning: 1. relocate FRÅN-PREFIX TILL-PREFIX [SÖKVÄG...]\n"
+" 2. relocate TILL-URL [SÖKVÄG]\n"
+"\n"
+" Skriv om arbetskopians URL-metadata för att avspegla en ren syntaxändring.\n"
+" Detta används när en arkivrots-URL ändras (t.ex. byte av schema eller\n"
+" värddator) men arbetskopian fortfarande representerar samma katalog i\n"
+" samma arkiv.\n"
+"\n"
+" 1. FRÅN-PREFIX och TILL-PREFIX är förled till arbetskopians aktuella\n"
+" respektive nya URL:er. (Det går att ange hela de gamla och nya URL:erna\n"
+" om man vill.) Använd \"svn info\" för att ta reda på aktuell URL till\n"
+" arbetskopian.\n"
+"\n"
+" 2. TILL-URL är den (fullständiga) nya arkiv-URL:en att använda för SÖKVÄG.\n"
+"\n"
+" Exempel:\n"
+" svn relocate http:// svn:// projekt1 projekt2\n"
+" svn relocate http://www.exempel.se/arkiv/projekt \\\n"
+" svn://svn.exempel.se/arkiv/projekt\n"
-#: ../svn/main.c:966
+#: ../svn/svn.c:1380
msgid ""
"Resolve conflicts on working copy files or directories.\n"
-"usage: resolve --accept=ARG [PATH...]\n"
+"usage: resolve [PATH...]\n"
"\n"
-" Note: the --accept option is currently required.\n"
+" By default, perform interactive conflict resolution on PATH.\n"
+" In this mode, the command is recursive by default (depth 'infinity').\n"
+"\n"
+" The --accept=ARG option prevents interactive prompting and forces\n"
+" conflicts on PATH to be resolved in the manner specified by ARG.\n"
+" In this mode, the command is not recursive by default (depth 'empty').\n"
msgstr ""
+"Lös konflikter i filer och kataloger i arbetskopian.\n"
+"användning: resolve [SÖKVÄG...]\n"
+"\n"
+" Om inget annat anges, gör en interaktiv konfliktlösning i SÖKVÄG.\n"
+" Kört på detta sätt är kommandot normalt rekursivt (djup \"infinity\").\n"
+"\n"
+" Väljaren --accept=ARG förhindrar interaktiva frågor och får alla\n"
+" konflikter i PATH att lösas enligt ARG.\n"
+" Kört på detta sätt är kommandot normalt inte rekursivt (djup \"empty\").\n"
-#: ../svn/main.c:971
-msgid "specify automatic conflict resolution source\n"
+#: ../svn/svn.c:1390
+msgid ""
+"specify automatic conflict resolution source\n"
+" ('base', 'working', 'mine-conflict',\n"
+" 'theirs-conflict', 'mine-full', 'theirs-full')"
msgstr ""
+"ange metod för automatisk konfliktlösning\n"
+" (\"base\", \"working\", \"mine-conflict\",\n"
+" \"theirs-conflict\", \"mine-full\", \"theirs-full\")"
-#: ../svn/main.c:978
-#, fuzzy
+#: ../svn/svn.c:1397
msgid ""
"Remove 'conflicted' state on working copy files or directories.\n"
"usage: resolved PATH...\n"
@@ -9029,24 +12417,32 @@ msgstr ""
"\n"
" Anmärkning: Det här underkommandot löser inga konflikter och tar inte bort\n"
" konfliktmarkörer; det tar endast bort filerna som skapades då konflikten\n"
-" uppstod och gör så att det går att arkivera SÖKVÄG igen.\n"
+" uppstod och gör så att det går att arkivera SÖKVÄG igen. Det rekommenderas\n"
+" att använda \"svn resolve --accept working\" istället.\n"
-#: ../svn/main.c:988
+#: ../svn/svn.c:1407
msgid ""
-"Restore pristine working copy file (undo most local edits).\n"
+"Restore pristine working copy state (undo local changes).\n"
"usage: revert PATH...\n"
"\n"
-" Note: this subcommand does not require network access, and resolves\n"
-" any conflicted states. However, it does not restore removed directories.\n"
+" Revert changes in the working copy at or within PATH, and remove\n"
+" conflict markers as well, if any.\n"
+"\n"
+" This subcommand does not revert already committed changes.\n"
+" For information about undoing already committed changes, search\n"
+" the output of 'svn help merge' for 'undo'.\n"
msgstr ""
-"Återställ fil i en arbetskopia (ångra de flesta lokala ändringar).\n"
+"Återställ arbetskopia till orört tillstånd (upphäv lokala ändringar).\n"
"användning: revert SÖKVÄG...\n"
"\n"
-" Anmärkning: Detta underkommando kräver ingen nätverksåtkomst och\n"
-" löser konflikttillstånd. Dock återställs inte borttagna kataloger.\n"
+" Upphäv ändringar i arbetskopian på eller inom SÖKVÄG, och ta bort\n"
+" konfliktmarkeringar om sådana finns.\n"
+"\n"
+" Detta underkommando upphäver inte redan arkiverade ändringar.\n"
+" För information om att göra det, kör \"svn help merge\" och sök efter\n"
+" \"upphäva\".\n"
-#: ../svn/main.c:996
-#, fuzzy
+#: ../svn/svn.c:1419
msgid ""
"Print the status of working copy files and directories.\n"
"usage: status [PATH...]\n"
@@ -9073,9 +12469,10 @@ msgid ""
" ' ' no modifications\n"
" 'C' Conflicted\n"
" 'M' Modified\n"
-" Third column: Whether the working copy directory is locked\n"
-" ' ' not locked\n"
-" 'L' locked\n"
+" Third column: Whether the working copy is locked for writing by\n"
+" another Subversion client modifying the working copy\n"
+" ' ' not locked for writing\n"
+" 'L' locked for writing\n"
" Fourth column: Scheduled commit will contain addition-with-history\n"
" ' ' no history scheduled with commit\n"
" '+' history scheduled with commit\n"
@@ -9083,16 +12480,16 @@ msgid ""
" ' ' normal\n"
" 'S' the item has a Switched URL relative to the parent\n"
" 'X' a versioned file created by an eXternals definition\n"
-" Sixth column: Repository lock token\n"
+" Sixth column: Whether the item is locked in repository for exclusive commit\n"
" (without -u)\n"
-" ' ' no lock token\n"
-" 'K' lock token present\n"
+" ' ' not locked by this working copy\n"
+" 'K' locked by this working copy, but lock might be stolen or broken\n"
" (with -u)\n"
-" ' ' not locked in repository, no lock token\n"
-" 'K' locked in repository, lock toKen present\n"
-" 'O' locked in repository, lock token in some Other working copy\n"
-" 'T' locked in repository, lock token present but sTolen\n"
-" 'B' not locked in repository, lock token present but Broken\n"
+" ' ' not locked in repository, not locked by this working copy\n"
+" 'K' locked in repository, lock owned by this working copy\n"
+" 'O' locked in repository, lock owned by another working copy\n"
+" 'T' locked in repository, lock owned by this working copy was stolen\n"
+" 'B' not locked in repository, lock owned by this working copy is broken\n"
" Seventh column: Whether the item is the victim of a tree conflict\n"
" ' ' normal\n"
" 'C' tree-Conflicted\n"
@@ -9117,20 +12514,20 @@ msgid ""
"\n"
" Example output:\n"
" svn status wc\n"
-" M wc/bar.c\n"
-" A + wc/qax.c\n"
+" M wc/bar.c\n"
+" A + wc/qax.c\n"
"\n"
" svn status -u wc\n"
-" M 965 wc/bar.c\n"
-" * 965 wc/foo.c\n"
-" A + - wc/qax.c\n"
+" M 965 wc/bar.c\n"
+" * 965 wc/foo.c\n"
+" A + - wc/qax.c\n"
" Status against revision: 981\n"
"\n"
" svn status --show-updates --verbose wc\n"
-" M 965 938 kfogel wc/bar.c\n"
-" * 965 922 sussman wc/foo.c\n"
-" A + - 687 joe wc/qax.c\n"
-" 965 687 joe wc/zig.c\n"
+" M 965 938 kfogel wc/bar.c\n"
+" * 965 922 sussman wc/foo.c\n"
+" A + - 687 joe wc/qax.c\n"
+" 965 687 joe wc/zig.c\n"
" Status against revision: 981\n"
"\n"
" svn status\n"
@@ -9143,11 +12540,12 @@ msgstr ""
"användning: status [SÖKVÄG...]\n"
"\n"
" Utan argument visas endast lokala ändringar (kräver inte nätverksåtkomst).\n"
+" Med flaggan -q skrivs endast en sammanfattning om lokalt ändrade objekt.\n"
" Om flaggan -u anges, visas dessutom revisioner i arbetskopian och\n"
" information om ändringar på servern.\n"
" Om -v anges, visas fullständig revisionsinformation för varje objekt.\n"
"\n"
-" De sex första kolumnerna är vardera ett tecken breda:\n"
+" De sju första kolumnerna är vardera ett tecken breda:\n"
" Första kolumnen: Visar huruvida objektet har lagts till, raderats eller\n"
" ändrats\n"
" \" \" inga ändringar\n"
@@ -9157,7 +12555,7 @@ msgstr ""
" \"I\" ignorerat\n"
" \"M\" ändrat\n"
" \"R\" ersatt\n"
-" \"X\" inte versionshanterat, men används av en externals-definition\n"
+" \"X\" ej versionshanterad katalog skapad av en extern-definition\n"
" \"?\" inte versionshanterat\n"
" \"!\" saknas (borttaget utanför svn) eller ofullständigt\n"
" \"~\" objekt av annan typ blockerar versionshanterat objekt\n"
@@ -9165,27 +12563,34 @@ msgstr ""
" \" \" inga ändringar\n"
" \"C\" i konflikt\n"
" \"M\" det finns ändringar\n"
-" Tredje kolumen: Visar om katalogen i arbetskopian är låst\n"
-" \" \" olåst\n"
-" \"L\" låst\n"
+" Tredje kolumen: Visar om arbetskopian är låst för skrivning av en\n"
+" annan Subversionklient som ändrar arbetskopian\n"
+" \" \" ej låst för skrivning\n"
+" \"L\" låst för skrivning\n"
" Fjärde kolumnen: Kommande arkiveringar kommer att innehålla tillägg med\n"
" historik\n"
" \" \" ingen historik schemalagd\n"
" \"+\" historik schemalagd\n"
-" Femte kolumnen: Huruvida switch har gjorts på objektet relativt dess\n"
-" förälder\n"
+" Femte kolumnen: Huruvida objektet är växlat eller en extern fil\n"
" \" \" normalt\n"
-" \"S\" switch har gjorts\n"
-" Sjätte kolumnen: Arkivlås\n"
+" \"S\" objektet är växlat med avseende på dess föräldrakatalog\n"
+" \"X\" en versionshanterad fil skapad av en extern-definition\n"
+" Sjätte kolumnen: Visar om objektet är låst i arkivet för exklusiv\n"
+" arkivering\n"
" (utan -u)\n"
-" ' ' ingen låsidentifierare\n"
-" 'K' låsidentifierare finns\n"
+" \" \" inte låst av denna arbetskopia\n"
+" \"K\" låst av denna arbetskopia, men låset kan stjälas eller brytas upp\n"
" (med -u)\n"
-" ' ' ej låst i arkivet, ingen låsidentifierare\n"
-" 'K' låst i arkivet, låsidentifierare finns\n"
-" 'O' låst i arkivet, låsidentifierare i någon annan arbetskopia\n"
-" 'T' låst i arkivet; låsidentifierare finns, men låset är stulet\n"
-" 'B' ej låst i arkivet, låsidentifierare finns, men låset är uppbrutet\n"
+" \" \" ej låst i arkivet, ej låst av denna arbetskopia\n"
+" \"K\" låst i arkivet, lås ägt av denna arbetskopia\n"
+" \"O\" låst i arkivet, lås ägt av någon annan arbetskopia\n"
+" \"T\" låst i arkivet, lås ägt av denna arbetskopia men är stulet\n"
+" \"B\" ej låst i arkivet, lås ägt av denna arbetskopia men är uppbrutet\n"
+" Sjunde kolumnen: Huruvida objektet är föremål för en trädkonflikt\n"
+" \" \" normalt\n"
+" \"C\" trädkonflikt\n"
+" Om objektet är föremål för en trädkonflikt kommer en extra rad skrivas\n"
+" efter objektets statusrad om vad konflikten rör sig om.\n"
"\n"
" Information om uppdateringar på servern visas i den nionde kolumnen\n"
" (om -u angivits):\n"
@@ -9193,30 +12598,45 @@ msgstr ""
" \" \" arbetskopian är aktuell\n"
"\n"
" De återstående fälten har varierande längd och avgränsas med mellanslag:\n"
-" Arbetskopians revision (med -u eller -v)\n"
+" Arbetskopians revision (med -u eller -v; \"-\" om objektet är kopierat)\n"
" Revision och författare för senaste arkivering (med -v)\n"
" Arbetskopians sökväg står alltid sist, så att den kan innehålla mellanslag.\n"
"\n"
-" Exempel på vad som kan visas:\n"
-" svn status wc\n"
-" M wc/bar.c\n"
-" A + wc/qax.c\n"
+" Ett frågetecken (\"?\") i fältet för arbetskopians revision, eller\n"
+" revision eller författare för senaste arkiveringen, betyder att\n"
+" informationen är okänd eller utan betydelse i objektets nuvarande\n"
+" tillstånd (till exempel när objektet kommer från en kopiering).\n"
+" Frågetecknet fungerar som platshållare för att förenkla tolkning.\n"
"\n"
-" svn status -u wc\n"
-" M 965 wc/bar.c\n"
-" * 965 wc/foo.c\n"
-" A + 965 wc/qax.c\n"
+" Exempel på vad som kan visas:\n"
+" svn status ak\n"
+" M ak/alfa.c\n"
+" A + ak/gamma.c\n"
+"\n"
+" svn status -u ak\n"
+" M 965 ak/alfa.c\n"
+" * 965 ak/beta.c\n"
+" A + - ak/gamma.c\n"
" Status gentemot revision: 981\n"
"\n"
-" svn status --show-updates --verbose wc\n"
-" M 965 938 kfogel wc/bar.c\n"
-" * 965 922 sussman wc/foo.c\n"
-" A + 965 687 joe wc/qax.c\n"
-" 965 687 joe wc/zig.c\n"
+" svn status --show-updates --verbose ak\n"
+" M 965 938 lindblom ak/alfa.c\n"
+" * 965 922 bergstrand ak/beta.c\n"
+" A + - 687 johan ak/gamma.c\n"
+" 965 687 johan ak/jota.c\n"
" Status gentemot revision: 981\n"
+"\n"
+" svn status\n"
+" M ak/alfa.c\n"
+" ! C ak/delta.c\n"
+" > lokal fil saknas, inkommande fil ändrad vid uppdatering\n"
+" D ak/delta.c\n"
+
+#: ../svn/svn.c:1512
+msgid "don't print unversioned items"
+msgstr "visa inte icke versionshanterade objekt"
-#: ../svn/main.c:1090
-#, fuzzy
+#: ../svn/svn.c:1515
msgid ""
"Update the working copy to a different URL within the same repository.\n"
"usage: 1. switch URL[@PEGREV] [PATH]\n"
@@ -9242,6 +12662,10 @@ msgid ""
" Use the --set-depth option to set a new working copy depth on the\n"
" targets of this operation.\n"
"\n"
+" By default, Subversion will refuse to switch a working copy path to\n"
+" a new URL with which it shares no common version control ancestry.\n"
+" Use the '--ignore-ancestry' option to override this sanity check.\n"
+"\n"
" 2. The '--relocate' option is deprecated. This syntax is equivalent to\n"
" 'svn relocate FROM-PREFIX TO-PREFIX [PATH]'.\n"
"\n"
@@ -9254,32 +12678,51 @@ msgid ""
" svn switch --relocate http://www.example.com/repo/project \\\n"
" svn://svn.example.com/repo/project\n"
msgstr ""
-"Uppdatera arbetskopian till en annan URL.\n"
-"användning: 1. switch URL [SÖKVÄG]\n"
-" 2. switch --relocate FRÅN TILL [SÖKVÄG...]\n"
+"Uppdatera arbetskopian till en annan URL inom samma arkiv.\n"
+"användning: 1. switch URL[@FIXREV] [SÖKVÄG]\n"
+" 2. switch --relocate FRÅN-PREFIX TILL-PREFIX [SÖKVÄG...]\n"
"\n"
" 1. Uppdatera arbetskopian så att den återspeglar en ny URL i arkivet.\n"
" Detta liknar hur \"svn update\" beter sig och är det sätt på vilket\n"
" man flyttar en arbetskopia till en gren eller märke inom ett\n"
-" och samma arkiv.\n"
+" och samma arkiv. Om FIXREV anges bestämmer den i vilken revision som\n"
+" målet ursprunglingen slås upp.\n"
"\n"
-" 2. Skriv endast om arbetskopians URL-metadata för en syntaxmässig ändring.\n"
-" Detta används när rot-URL:en för ett arkiv ändras (till exempel en\n"
-" schema- eller värdnamnsändring), men din arbetskopia återspeglar\n"
-" fortfarande samma katalog i samma arkiv.\n"
+" Om --force används, orsakar icke versionshanterade sökvägar som är i\n"
+" vägen inte automatiskt att operationen misslyckas vid försök att lägga\n"
+" till dem. Om sökvägen som är i vägen är av samma typ (fil eller\n"
+" katalog) som motsvarande sökväg i arkivet, kommer den att bli\n"
+" versionshanterad, men innehållet lämnas som det är i arbetskopian.\n"
+" Detta medför att en katalog som är i vägen även kan ha barn som är i\n"
+" vägen, vilka följaktligen också blir versionshanterade. Vad gäller\n"
+" filer kommer skillnader mellan de filer som är i vägen och arkivets\n"
+" filer att betraktas som lokala ändringar i arbetskopian. Samtliga\n"
+" egenskaper i arkivet läggs till för sökvägar som är i vägen.\n"
"\n"
-" Om --force används, orsakar icke versionshanterade sökvägar som är i\n"
-" vägen inte automatiskt att operationen misslyckas vid försök att lägga till\n"
-" dem. Om sökvägen som är i vägen är av samma typ (fil eller katalog)\n"
-" som motsvarande sökväg i arkivet, kommer den att bli versionshanterad,\n"
-" men innehållet lämnas som det är i arbetskopian. Detta medför att en\n"
-" katalog som är i vägen även kan ha barn som är i vägen, vilka följaktligen\n"
-" också blir versionshanterade. Vad gäller filer kommer skillnader\n"
-" mellan de filer som är i vägen och arkivets filer att betraktas som lokala\n"
-" ändringar i arbetskopian. Samtliga egenskaper i arkivet läggs till för\n"
-" sökvägar som är i vägen.\n"
+" Använd väljaren --set-depth för att ange ett nytt arbetskopiedjup för\n"
+" målet för denna handling.\n"
+"\n"
+" Normalt vägrar Subversion att växla en sökväg i en arbetskopia till\n"
+" en ny URL utan gemensam ursprung i versionshanteringen. Använd\n"
+" flaggan \"--ignore-ancestry\" för att kringgå denna kontroll.\n"
+"\n"
+" 2. Flaggan \"--relocate\" är föråldrad. Denna syntax motsvaras nu av\n"
+" \"svn relocate FRÅN-PREFIX TILL-PREFIX [SÖKVÄG]\".\n"
+"\n"
+" Se även \"svn help update\" för en lista av möjliga tecken som indikerar\n"
+" vad som gjorts.\n"
+"\n"
+" Exempel:\n"
+" svn switch ^/branches/1.x-utgåva\n"
+" svn switch --relocate http:// svn://\n"
+" svn switch --relocate http://www.exempel.se/arkiv/projekt \\\n"
+" svn://svn.exempel.se/arkiv/projekt\n"
+
+#: ../svn/svn.c:1557
+msgid "allow switching to a node with no common ancestor"
+msgstr "tillåt växling till en nod utan gemensamt ursprung"
-#: ../svn/main.c:1129
+#: ../svn/svn.c:1561
msgid ""
"Unlock working copy paths or URLs.\n"
"usage: unlock TARGET...\n"
@@ -9289,10 +12732,9 @@ msgstr ""
"Lås upp sökvägar i en arbetskopia eller URL:er.\n"
"användning: unlock MÅL...\n"
"\n"
-"Använd --force för att \"bryta upp\" ett låset.\n"
+"Använd --force för att \"bryta upp\" låset.\n"
-#: ../svn/main.c:1136
-#, fuzzy
+#: ../svn/svn.c:1568
msgid ""
"Bring changes from the repository into the working copy.\n"
"usage: update [PATH...]\n"
@@ -9313,7 +12755,9 @@ msgid ""
"\n"
" Characters in the first column report about the item itself.\n"
" Characters in the second column report about properties of the item.\n"
-" A 'C' in the third column indicates a tree conflict, while a 'C' in\n"
+" A 'B' in the third column signifies that the lock for the file has\n"
+" been broken or stolen.\n"
+" A 'C' in the fourth column indicates a tree conflict, while a 'C' in\n"
" the first and second columns indicate textual conflicts in files\n"
" and in property values, respectively.\n"
"\n"
@@ -9329,6 +12773,12 @@ msgid ""
" are applied to the obstructing path. Obstructing paths are reported\n"
" in the first column with code 'E'.\n"
"\n"
+" If the specified update target is missing from the working copy but its\n"
+" immediate parent directory is present, checkout the target into its\n"
+" parent directory at the specified depth. If --parents is specified,\n"
+" create any missing parent directories of the target by checking them\n"
+" out, too, at depth=empty.\n"
+"\n"
" Use the --set-depth option to set a new working copy depth on the\n"
" targets of this operation.\n"
msgstr ""
@@ -9345,12 +12795,16 @@ msgstr ""
" D Raderat\n"
" U Uppdaterat\n"
" C Konflikt\n"
-" G Sammanslaget (merge)\n"
+" G Sammanslaget\n"
" E Fanns redan\n"
+" R Ersatt\n"
"\n"
-" Ett tecken i den första kolumnen visar en uppdatering av filen,\n"
-" medan uppdateringar av filens egenskaper visas i den andra kolumnen.\n"
+" Tecken i första kolumnen står för objektet i sig.\n"
+" Tecken i andra kolumnen står för objektets egenskaper.\n"
" Ett \"B\" i tredje kolumnen visar att ett lås har blivit stulet eller brutet.\n"
+" Ett \"C\" i fjärde kolumnen innebär en trädkonflikt, medan ett \"C\" i\n"
+" första och andra kolumnerna innebär textkonflikter i filer respektive\n"
+" egenskaper.\n"
"\n"
" Om --force används, orsakar icke versionshanterade sökvägar som är i\n"
" vägen inte automatiskt att operationen misslyckas vid försök att lägga till\n"
@@ -9363,102 +12817,134 @@ msgstr ""
" ändringar i arbetskopian. Samtliga egenskaper i arkivet läggs till för\n"
" sökvägar som är i vägen. Sökvägar som är i vägen rapporteras i första\n"
" kolumnen med ett \"E\".\n"
+"\n"
+" Om det angivna uppdateringsmålet saknas i arbetskopian men dess\n"
+" omedelbara föräldrakatalog finns, så kommer målet hämtas till dess\n"
+" föräldrakatalog på det angivna djupet. Om flaggan --parents anges kommer\n"
+" målets saknade föräldrakataloger skapas genom att även de hämtas, med\n"
+" djupet \"empty\".\n"
+"\n"
+" Använd väljaren --set-depth för att ange ett nytt arbetskopiedjup för\n"
+" målet för denna handling.\n"
-#: ../svn/main.c:1177
+#: ../svn/svn.c:1618
msgid ""
"Upgrade the metadata storage format for a working copy.\n"
-"usage: upgrade WCPATH...\n"
+"usage: upgrade [WCPATH...]\n"
+"\n"
+" Local modifications are preserved.\n"
msgstr ""
+"Uppgradera lagringsformatet för en arbetskopia.\n"
+"användning: upgrade [AKSÖKVÄG...]\n"
+"\n"
+" Lokala ändringar behålls som de är.\n"
-#: ../svn/main.c:1221 ../svnadmin/main.c:86 ../svnlook/main.c:354
-#: ../svnsync/main.c:263
+#: ../svn/svn.c:1664 ../svnadmin/svnadmin.c:90 ../svnlook/svnlook.c:380
+#: ../svnrdump/svnrdump.c:65 ../svnsync/svnsync.c:297
msgid "Caught signal"
msgstr "FÃ¥ngade signal"
-#: ../svn/main.c:1340 ../svnlook/main.c:2321
+#: ../svn/svn.c:1817 ../svnlook/svnlook.c:2565
msgid "Non-numeric limit argument given"
msgstr "Argumentet till limit-flaggan är inget tal"
-#: ../svn/main.c:1346 ../svnlook/main.c:2327
+#: ../svn/svn.c:1823 ../svnlook/svnlook.c:2571
msgid "Argument to --limit must be positive"
msgstr "Argumentet till --limit måste vara positivt"
-#: ../svn/main.c:1367 ../svn/main.c:1642
+#: ../svn/svn.c:1844 ../svn/svn.c:2121
msgid "Can't specify -c with --old"
msgstr "Kan inte ange -c med --old"
-#: ../svn/main.c:1391
+#: ../svn/svn.c:1875
#, c-format
msgid "Negative number in range (%s) not supported with -c"
-msgstr ""
+msgstr "Negativt tal i område (%s) stöds ej med -c"
-#: ../svn/main.c:1404
-#, fuzzy, c-format
+#: ../svn/svn.c:1888
+#, c-format
msgid "Non-numeric change argument (%s) given to -c"
-msgstr "Argumentet till -c-flaggan är inget tal"
+msgstr "Argumentet till flaggan -c (%s) är inget tal"
-#: ../svn/main.c:1412
+#: ../svn/svn.c:1896
msgid "There is no change 0"
-msgstr "ändring 0 finns inte"
+msgstr "Ändring 0 finns inte"
-#: ../svn/main.c:1457 ../svnadmin/main.c:1651 ../svnsync/main.c:1947
+#: ../svn/svn.c:1939 ../svnadmin/svnadmin.c:2037 ../svnrdump/svnrdump.c:937
+#: ../svnsync/svnsync.c:2052
#, c-format
msgid "Syntax error in revision argument '%s'"
msgstr "Syntaxfel i revisionsargumentet \"%s\""
-#: ../svn/main.c:1530 ../svn/main.c:1549
+#: ../svn/svn.c:2005 ../svn/svn.c:2024
#, c-format
msgid "Error converting depth from locale to UTF-8"
-msgstr ""
+msgstr "Fel vid konvertering av djupet från lokal kodning till UTF-8"
-#: ../svn/main.c:1538
-#, fuzzy, c-format
+#: ../svn/svn.c:2013
+#, c-format
msgid "'%s' is not a valid depth; try 'empty', 'files', 'immediates', or 'infinity'"
-msgstr "\"%s\" är inget giltigt namn på en Subversion-egenskap"
+msgstr "\"%s\" är inget giltigt djup; försök med \"empty\", \"files\", \"immediates\" eller \"infinity\""
-#: ../svn/main.c:1557
-#, fuzzy, c-format
+#: ../svn/svn.c:2032
+#, c-format
msgid "'%s' is not a valid depth; try 'exclude', 'empty', 'files', 'immediates', or 'infinity'"
-msgstr "\"%s\" är inget giltigt namn på en Subversion-egenskap"
+msgstr "\"%s\" är inget giltigt djup; försök med \"exclude\", \"empty\", \"files\", \"immediates\" eller \"infinity\""
-#: ../svn/main.c:1687
+#: ../svn/svn.c:2161
#, c-format
msgid "Syntax error in native-eol argument '%s'"
msgstr "Syntaxfel i native-eol-argumentet \"%s\""
-#: ../svn/main.c:1742
-#, fuzzy, c-format
+#: ../svn/svn.c:2181
+msgid "Changelist names must not be empty"
+msgstr "Ändringslistor får inte ha tomma namn"
+
+#: ../svn/svn.c:2215
+#, c-format
msgid "'%s' is not a valid --accept value"
-msgstr "\"%s\" är inte ett giltigt radslutsvärde"
+msgstr "\"%s\" är inte ett giltigt värde för --accept"
-#: ../svn/main.c:1751
-#, fuzzy, c-format
+#: ../svn/svn.c:2223
+#, c-format
msgid "'%s' is not a valid --show-revs value"
-msgstr "\"%s\" är inte ett giltigt radslutsvärde"
+msgstr "\"%s\" är inte ett giltigt värde för --show-revs"
-#: ../svn/main.c:1764
-#, fuzzy, c-format
+#: ../svn/svn.c:2235
+#, c-format
msgid "Invalid strip count '%s'"
-msgstr "Ogiltig sökväg som källa för kopiering \"%s\""
+msgstr "Ogiltigt antal att ta bort: \"%s\""
-#: ../svn/main.c:1770
-#, fuzzy
+#: ../svn/svn.c:2241
msgid "Argument to --strip must be positive"
-msgstr "Argumentet till --limit måste vara positivt"
+msgstr "Argumentet till --strip måste vara positivt"
-#: ../svn/main.c:1851 ../svndumpfilter/main.c:1395 ../svnlook/main.c:2399
-#: ../svnrdump/svnrdump.c:522
+#: ../svn/svn.c:2296 ../svnmucc/svnmucc.c:1208 ../svnrdump/svnrdump.c:993
+#: ../svnsync/svnsync.c:2096
+msgid "--non-interactive and --force-interactive are mutually exclusive"
+msgstr "--non-interactive och --force-interactive kan inte användas samtidigt"
+
+#: ../svn/svn.c:2350 ../svndumpfilter/svndumpfilter.c:1510
+#: ../svnlook/svnlook.c:2667
#, c-format
msgid "Subcommand argument required\n"
msgstr "Argument för underkommando krävs\n"
-#: ../svn/main.c:1870 ../svnadmin/main.c:1787 ../svndumpfilter/main.c:1414
-#: ../svnlook/main.c:2418 ../svnrdump/svnrdump.c:541
+#: ../svn/svn.c:2367 ../svnadmin/svnadmin.c:2220
+#: ../svndumpfilter/svndumpfilter.c:1530 ../svnlook/svnlook.c:2686
+#: ../svnrdump/svnrdump.c:1039
+#, c-format
+msgid "Unknown subcommand: '%s'\n"
+msgstr "Okänt underkommando: \"%s\"\n"
+
+#: ../svn/svn.c:2376
#, c-format
-msgid "Unknown command: '%s'\n"
-msgstr "Okänt kommando: \"%s\"\n"
+msgid "Undo is done using either the 'svn revert' or the 'svn merge' command.\n"
+msgstr ""
+"Återgång till tidigare tillstånd görs med antingen \"svn revert\"\n"
+"eller \"svn merge\".\n"
-#: ../svn/main.c:1904
+#: ../svn/svn.c:2411
#, c-format
msgid ""
"Subcommand '%s' doesn't accept option '%s'\n"
@@ -9467,690 +12953,135 @@ msgstr ""
"Underkommandot \"%s\" tillåter inte flaggan \"%s\"\n"
"Skriv \"svn help %s\" för användning.\n"
-#: ../svn/main.c:1919
+#: ../svn/svn.c:2425
msgid "Multiple revision arguments encountered; can't specify -c twice, or both -c and -r"
-msgstr "Flera revisionsargument påträffades; -c kan inte anges flera gåner; -c och -r kan inte användas samtidigt"
+msgstr "Flera revisionsargument påträffades; -c kan inte anges flera gånger; -c och -r kan inte användas samtidigt"
-#: ../svn/main.c:1931
-#, fuzzy
+#: ../svn/svn.c:2437
msgid "--depth and --set-depth are mutually exclusive"
-msgstr "--auto-props och --no-auto-props kan inte användas samtidigt"
+msgstr "--depth och --set-depth kan inte användas samtidigt"
-#: ../svn/main.c:1941
-#, fuzzy
+#: ../svn/svn.c:2447
msgid "--with-all-revprops and --with-no-revprops are mutually exclusive"
-msgstr "--auto-props och --no-auto-props kan inte användas samtidigt"
+msgstr "--with-all-revprops och --with-no-revprops kan inte användas samtidigt"
-#: ../svn/main.c:1951
-#, fuzzy
+#: ../svn/svn.c:2457
msgid "--with-revprop and --with-no-revprops are mutually exclusive"
-msgstr "--auto-props och --no-auto-props kan inte användas samtidigt"
+msgstr "--with-revprop och --with-no-revprops kan inte användas samtidigt"
+
+#: ../svn/svn.c:2470
+msgid "--message (-m) and --file (-F) are mutually exclusive"
+msgstr "--message (-m) och --file (-F) kan inte användas samtidigt"
-#: ../svn/main.c:1960 ../svnsync/main.c:2019
+#: ../svn/svn.c:2479 ../svnmucc/svnmucc.c:1219 ../svnrdump/svnrdump.c:1098
+#: ../svnsync/svnsync.c:2147
msgid "--trust-server-cert requires --non-interactive"
-msgstr ""
+msgstr "--trust-server-cert kräver --non-interactive"
-#: ../svn/main.c:1970
-#, fuzzy
+#: ../svn/svn.c:2489
msgid "--diff-cmd and --internal-diff are mutually exclusive"
-msgstr "--auto-props och --no-auto-props kan inte användas samtidigt"
+msgstr "--diff-cmd och --internal-diff kan inte användas samtidigt"
+
+#: ../svn/svn.c:2531
+msgid "--relocate and --depth are mutually exclusive"
+msgstr "--relocate och --depth kan inte användas samtidigt"
+
+#: ../svn/svn.c:2539
+msgid "--relocate and --non-recursive (-N) are mutually exclusive"
+msgstr "--relocate och --non-recursive (-N) kan inte användas samtidigt"
-#: ../svn/main.c:2030
+#: ../svn/svn.c:2661
msgid "Log message file is a versioned file; use '--force-log' to override"
msgstr "Filen med loggmeddelandet är versionshanterad; använd --force-log för att kringgå"
-#: ../svn/main.c:2037
+#: ../svn/svn.c:2668
msgid "Lock comment file is a versioned file; use '--force-log' to override"
msgstr "Filen med låskommentaren är versionshanterad; använd --force-log för att kringgå"
-#: ../svn/main.c:2058
+#: ../svn/svn.c:2689
msgid "The log message is a pathname (was -F intended?); use '--force-log' to override"
msgstr "Loggmeddelandet är en sökväg (avsågs -F?); använd --force-log för att kringgå"
-#: ../svn/main.c:2065
+#: ../svn/svn.c:2696
msgid "The lock comment is a pathname (was -F intended?); use '--force-log' to override"
msgstr "Låskommentaren är en sökväg (avsågs -F?); använd --force-log för att kringgå"
-#: ../svn/main.c:2079
-#, fuzzy
-msgid "--relocate and --depth are mutually exclusive"
-msgstr "--auto-props och --no-auto-props kan inte användas samtidigt"
-
-#: ../svn/main.c:2087
-#, fuzzy
-msgid "--relocate and --non-recursive (-N) are mutually exclusive"
-msgstr "--auto-props och --no-auto-props kan inte användas samtidigt"
-
-#: ../svn/main.c:2171
+#: ../svn/svn.c:2720
msgid "--auto-props and --no-auto-props are mutually exclusive"
msgstr "--auto-props och --no-auto-props kan inte användas samtidigt"
-#: ../svn/main.c:2185
-msgid "--reintegrate cannot be used with --ignore-ancestry or --record-only"
-msgstr ""
-
-#: ../svn/main.c:2193
-msgid "--reintegrate cannot be used with --ignore-ancestry"
-msgstr ""
-
-#: ../svn/main.c:2201
-msgid "--reintegrate cannot be used with --record-only"
-msgstr ""
-
-#: ../svn/main.c:2325 ../svn/main.c:2331
+#: ../svn/svn.c:2825 ../svn/svn.c:2832
#, c-format
msgid "--accept=%s incompatible with --non-interactive"
-msgstr ""
-
-#: ../svn/main.c:2358
-#, fuzzy
-msgid "Try 'svn help' for more info"
-msgstr "Skriv \"%s help\" för användning.\n"
-
-#: ../svn/main.c:2368
-msgid "svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)\n"
-msgstr "svn: kör \"svn cleanup\" för att ta bort lås (skriv \"svn help cleanup\" för mer information)\n"
-
-#: ../svn/merge-cmd.c:65
-msgid "-r and -c can't be used with --reintegrate"
-msgstr ""
-
-#: ../svn/merge-cmd.c:120
-#, fuzzy
-msgid "Merge source required"
-msgstr "En andra revision måste anges"
+msgstr "--accept=%s kan inte användas med --non-interactive"
-#: ../svn/merge-cmd.c:166
-msgid "Second revision required"
-msgstr "En andra revision måste anges"
-
-#: ../svn/merge-cmd.c:175 ../svn/merge-cmd.c:208 ../svn/mergeinfo-cmd.c:84
-msgid "Too many arguments given"
-msgstr "För många argument"
-
-#: ../svn/merge-cmd.c:197
-#, fuzzy
-msgid "Cannot specify a revision range with two URLs"
-msgstr "Revisioner (förutom HEAD) kan ej anges vid flyttoperationer"
-
-#: ../svn/merge-cmd.c:224
-msgid "A working copy merge source needs an explicit revision"
-msgstr "En källa för sammanslagning (merge) som är en arbetskopia kräver att en revision anges"
-
-#: ../svn/merge-cmd.c:284
-msgid "--depth cannot be used with --reintegrate"
-msgstr ""
-
-#: ../svn/merge-cmd.c:289
-msgid "--force cannot be used with --reintegrate"
-msgstr ""
-
-#: ../svn/merge-cmd.c:294
-msgid "--reintegrate can only be used with a single merge source"
-msgstr ""
-
-#: ../svn/merge-cmd.c:298
-msgid "--allow-mixed-revisions cannot be used with --reintegrate"
-msgstr ""
-
-#: ../svn/mergeinfo-cmd.c:81
-#, fuzzy
-msgid "Not enough arguments given"
-msgstr "För få argument; använd \"svn --help\" för mer information"
-
-#: ../svn/mkdir-cmd.c:89
-msgid "Try 'svn add' or 'svn add --non-recursive' instead?"
-msgstr "Försök med \"svn add\" eller \"svn add --non-recursive\" istället?"
-
-#: ../svn/mkdir-cmd.c:95
-#, fuzzy
-msgid "Try 'svn mkdir --parents' instead?"
-msgstr "Försök med \"svn revert --recursive\" istället?"
-
-#: ../svn/notify.c:82 ../svn/status-cmd.c:87
-msgid "Summary of conflicts:\n"
-msgstr ""
-
-#: ../svn/notify.c:86 ../svn/status-cmd.c:91
-#, c-format
-msgid " Text conflicts: %u\n"
-msgstr ""
-
-#: ../svn/notify.c:90 ../svn/status-cmd.c:95
-#, fuzzy, c-format
-msgid " Property conflicts: %u\n"
-msgstr "Egenskapen finns ej"
-
-#: ../svn/notify.c:94 ../svn/status-cmd.c:99
-#, c-format
-msgid " Tree conflicts: %u\n"
-msgstr ""
-
-#: ../svn/notify.c:98
-#, fuzzy, c-format
-msgid " Skipped paths: %u\n"
-msgstr "Hoppade över \"%s\"\n"
-
-#: ../svn/notify.c:134
-#, c-format
-msgid "Skipped missing target: '%s'\n"
-msgstr "Hoppade över saknat mål: \"%s\"\n"
-
-#: ../svn/notify.c:141
-#, c-format
-msgid "Skipped target: '%s' -- copy-source is missing\n"
-msgstr ""
-
-#: ../svn/notify.c:148
-#, c-format
-msgid "Skipped '%s'\n"
-msgstr "Hoppade över \"%s\"\n"
-
-#: ../svn/notify.c:211
-#, c-format
-msgid "Restored '%s'\n"
-msgstr "Ã…terskapade \"%s\"\n"
-
-#: ../svn/notify.c:217
-#, c-format
-msgid "Reverted '%s'\n"
-msgstr "Återställde \"%s\"\n"
-
-#: ../svn/notify.c:223
-#, c-format
-msgid "Failed to revert '%s' -- try updating instead.\n"
-msgstr "Misslyckades med att återställa \"%s\" -- försök uppdatera istället.\n"
-
-#: ../svn/notify.c:231
-#, c-format
-msgid "Resolved conflicted state of '%s'\n"
-msgstr "Löste konflikttillståndet för \"%s\"\n"
-
-#: ../svn/notify.c:320 ../svn/notify.c:360
-#, c-format
-msgid "> applied hunk ## -%lu,%lu +%lu,%lu ## with offset %s"
-msgstr ""
-
-#: ../svn/notify.c:337 ../svn/notify.c:374
+#: ../svn/svn.c:2888
#, c-format
-msgid "> applied hunk @@ -%lu,%lu +%lu,%lu @@ with offset %s"
-msgstr ""
-
-#: ../svn/notify.c:395
-#, c-format
-msgid "> applied hunk ## -%lu,%lu +%lu,%lu ## with fuzz %d (%s)\n"
-msgstr ""
-
-#: ../svn/notify.c:405
-#, c-format
-msgid "> applied hunk @@ -%lu,%lu +%lu,%lu @@ with fuzz %d\n"
-msgstr ""
-
-#: ../svn/notify.c:423
-#, c-format
-msgid "> rejected hunk ## -%lu,%lu +%lu,%lu ## (%s)\n"
-msgstr ""
-
-#: ../svn/notify.c:432
-#, c-format
-msgid "> rejected hunk @@ -%lu,%lu +%lu,%lu @@\n"
-msgstr ""
+msgid "Try 'svn help %s' for more information"
+msgstr "Skriv \"svn help %s\" för vidare information"
-#: ../svn/notify.c:446
-#, c-format
-msgid "> hunk ## -%lu,%lu +%lu,%lu ## already applied (%s)\n"
-msgstr ""
+#: ../svn/svn.c:2894
+msgid "Please see the 'svn upgrade' command"
+msgstr "Se kommandot \"svn upgrade\""
-#: ../svn/notify.c:456
-#, c-format
-msgid "> hunk @@ -%lu,%lu +%lu,%lu @@ already applied\n"
-msgstr ""
+#: ../svn/svn.c:2900 ../svnmucc/svnmucc.c:1457 ../svnrdump/svnrdump.c:1175
+msgid "Authentication failed and interactive prompting is disabled; see the --force-interactive option"
+msgstr "Autentisering misslyckades och interaktiva frågor är avstängda; se flaggan --force-interactive"
-#: ../svn/notify.c:516
-#, c-format
-msgid ""
-"\n"
-"Fetching external item into '%s'\n"
-msgstr ""
-"\n"
-"Hämtar externt objekt till \"%s\"\n"
+#: ../svn/svn.c:2905
+msgid "Reading file from standard input because of -F option; this can interfere with interactive prompting"
+msgstr "Läser filen från standardinmatningen eftersom flaggan -F angavs; detta kan påverka interaktiva frågor"
-#: ../svn/notify.c:542
-#, fuzzy, c-format
-msgid "Error handling externals definition for '%s':"
-msgstr "Fel vid verifiering av servercertifikat för \"%s\":\n"
+#: ../svn/svn.c:2916
+msgid "Run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)"
+msgstr "Kör \"svn cleanup\" för att ta bort lås (skriv \"svn help cleanup\" för mer information)"
-#: ../svn/notify.c:560
-#, c-format
-msgid "Exported external at revision %ld.\n"
-msgstr "Exporterade extern katalog vid revision %ld.\n"
+#: ../svn/svn.c:2923
+msgid "Another process is blocking the working copy database, or the underlying filesystem does not support file locking; if the working copy is on a network filesystem, make sure file locking has been enabled on the file server"
+msgstr "En annan process blockerar arbetskopians databas, eller så stöder det underliggande filsystemet inte fillåsning; om arbetskopian ligger på ett nätverksfilsystem, se till att filservern har fillåsning påslagen"
-#: ../svn/notify.c:561
-#, c-format
-msgid "Exported revision %ld.\n"
-msgstr "Exporterade revision %ld.\n"
-
-#: ../svn/notify.c:569
-#, c-format
-msgid "Checked out external at revision %ld.\n"
-msgstr "Checkade ut extern katalog vid revision %ld.\n"
-
-#: ../svn/notify.c:570
-#, c-format
-msgid "Checked out revision %ld.\n"
-msgstr "Checkade ut revision %ld.\n"
-
-#: ../svn/notify.c:580
-#, c-format
-msgid "Updated external to revision %ld.\n"
-msgstr "Uppdaterade extern katalog till revision %ld.\n"
-
-#: ../svn/notify.c:581
-#, c-format
-msgid "Updated to revision %ld.\n"
-msgstr "Uppdaterade till revision %ld.\n"
-
-#: ../svn/notify.c:589
-#, c-format
-msgid "External at revision %ld.\n"
-msgstr "Extern katalog är på revision %ld.\n"
-
-#: ../svn/notify.c:590
-#, c-format
-msgid "At revision %ld.\n"
-msgstr "Är på revision %ld.\n"
-
-#: ../svn/notify.c:602
-#, c-format
-msgid "External export complete.\n"
-msgstr "Extern export klar.\n"
-
-#: ../svn/notify.c:603
-#, c-format
-msgid "Export complete.\n"
-msgstr "Export klar.\n"
-
-#: ../svn/notify.c:610
-#, c-format
-msgid "External checkout complete.\n"
-msgstr "Extern utcheckning klar.\n"
-
-#: ../svn/notify.c:611
-#, c-format
-msgid "Checkout complete.\n"
-msgstr "Utcheckning klar.\n"
-
-#: ../svn/notify.c:618
-#, c-format
-msgid "External update complete.\n"
-msgstr "Extern uppdatering klar.\n"
-
-#: ../svn/notify.c:619
-#, c-format
-msgid "Update complete.\n"
-msgstr "Uppdatering klar.\n"
-
-#: ../svn/notify.c:636
-#, c-format
-msgid ""
-"\n"
-"Performing status on external item at '%s'\n"
-msgstr ""
-"\n"
-"Utför statuskontroll av extern katalog på \"%s\"\n"
-
-#: ../svn/notify.c:644
-#, c-format
-msgid "Status against revision: %6ld\n"
-msgstr "Status gentemot revision: %6ld\n"
-
-#: ../svn/notify.c:652
-#, c-format
-msgid "Sending %s\n"
-msgstr "Skickar %s\n"
-
-#: ../svn/notify.c:661
-#, c-format
-msgid "Adding (bin) %s\n"
-msgstr "Lägger till (binär) %s\n"
-
-#: ../svn/notify.c:668
-#, c-format
-msgid "Adding %s\n"
-msgstr "Lägger till %s\n"
-
-#: ../svn/notify.c:675
-#, c-format
-msgid "Deleting %s\n"
-msgstr "Raderar %s\n"
-
-#: ../svn/notify.c:682
-#, c-format
-msgid "Replacing %s\n"
-msgstr "Ersätter %s\n"
-
-#: ../svn/notify.c:692 ../svnsync/sync.c:320
-#, c-format
-msgid "Transmitting file data "
-msgstr "Skickar filinnehåll "
-
-#: ../svn/notify.c:701
-#, c-format
-msgid "'%s' locked by user '%s'.\n"
-msgstr "'%s' låstes av användaren '%s'.\n"
-
-#: ../svn/notify.c:707
-#, c-format
-msgid "'%s' unlocked.\n"
-msgstr "'%s' låstes upp.\n"
-
-#: ../svn/notify.c:734
-#, c-format
-msgid "--- Merging differences between repository URLs into '%s':\n"
-msgstr ""
-
-#: ../svn/notify.c:739
-#, fuzzy, c-format
-msgid "--- Merging r%ld into '%s':\n"
-msgstr ""
-"\n"
-"--- Ändringslista '%s':\n"
-
-#: ../svn/notify.c:743
-#, c-format
-msgid "--- Reverse-merging r%ld into '%s':\n"
-msgstr ""
-
-#: ../svn/notify.c:747
-#, c-format
-msgid "--- Merging r%ld through r%ld into '%s':\n"
-msgstr ""
-
-#: ../svn/notify.c:753
-#, c-format
-msgid "--- Reverse-merging r%ld through r%ld into '%s':\n"
-msgstr ""
-
-#: ../svn/notify.c:765
-#, c-format
-msgid "--- Recording mergeinfo for merge between repository URLs into '%s':\n"
-msgstr ""
-
-#: ../svn/notify.c:775
-#, c-format
-msgid "--- Recording mergeinfo for merge of r%ld into '%s':\n"
-msgstr ""
-
-#: ../svn/notify.c:780
-#, c-format
-msgid "--- Recording mergeinfo for reverse merge of r%ld into '%s':\n"
-msgstr ""
-
-#: ../svn/notify.c:785
-#, c-format
-msgid "--- Recording mergeinfo for merge of r%ld through r%ld into '%s':\n"
-msgstr ""
-
-#: ../svn/notify.c:790
-#, c-format
-msgid "--- Recording mergeinfo for reverse merge of r%ld through r%ld into '%s':\n"
-msgstr ""
-
-#: ../svn/notify.c:800
-#, c-format
-msgid "--- Eliding mergeinfo from '%s':\n"
-msgstr ""
-
-#: ../svn/notify.c:808
-#, c-format
-msgid "--- Merging differences between foreign repository URLs into '%s':\n"
-msgstr ""
-
-#: ../svn/notify.c:814
-#, c-format
-msgid "--- Merging (from foreign repository) r%ld into '%s':\n"
-msgstr ""
-
-#: ../svn/notify.c:819
-#, c-format
-msgid "--- Reverse-merging (from foreign repository) r%ld into '%s':\n"
-msgstr ""
-
-#: ../svn/notify.c:824
-#, c-format
-msgid "--- Merging (from foreign repository) r%ld through r%ld into '%s':\n"
-msgstr ""
-
-#: ../svn/notify.c:830
-#, c-format
-msgid "--- Reverse-merging (from foreign repository) r%ld through r%ld into '%s':\n"
-msgstr ""
-
-#: ../svn/notify.c:848
-#, c-format
-msgid "property '%s' set on '%s'\n"
-msgstr "satte egenskapen \"%s\" på \"%s\"\n"
-
-#: ../svn/notify.c:856
-#, c-format
-msgid "property '%s' deleted from '%s'.\n"
-msgstr "egenskapen \"%s\" raderades från \"%s\".\n"
-
-#: ../svn/notify.c:864
-#, c-format
-msgid "property '%s' set on repository revision %ld\n"
-msgstr "satte egenskapen \"%s\" på revision %ld i arkivet\n"
-
-#: ../svn/notify.c:872
-#, c-format
-msgid "property '%s' deleted from repository revision %ld\n"
-msgstr "egenskapen \"%s\" raderades från revision %ld i arkivet\n"
-
-#: ../svn/notify.c:879
-#, fuzzy, c-format
-msgid "Upgraded '%s'.\n"
-msgstr "Hoppade över \"%s\"\n"
-
-#: ../svn/notify.c:885
-#, fuzzy, c-format
-msgid "Redirecting to URL '%s'\n"
-msgstr "Läser \"%s\""
-
-#: ../svn/obliterate-cmd.c:60
-#, c-format
-msgid "Obliterate %8ld %s\n"
-msgstr ""
-
-#: ../svn/obliterate-cmd.c:111
-#, fuzzy
-msgid "Wrong number of arguments"
-msgstr "Fel antal mål"
-
-#: ../svn/obliterate-cmd.c:116
-#, fuzzy
-msgid "Target must specify the revision as a number"
-msgstr "ange revisionsnummer ARG"
-
-#: ../svn/obliterate-cmd.c:119
-msgid "Target must specify a URL"
-msgstr ""
-
-#: ../svn/propdel-cmd.c:117
-#, c-format
-msgid "Cannot specify revision for deleting versioned property '%s'"
-msgstr "Revision kan ej anges vid radering av versionshanterad egenskap \"%s\""
-
-#: ../svn/propdel-cmd.c:152
-#, fuzzy, c-format
-msgid "Attempting to delete nonexistent property '%s'"
-msgstr "Försök att öppna icke existerande barnnod \"%s\""
-
-#: ../svn/propedit-cmd.c:62 ../svn/propedit-cmd.c:315
-#, c-format
-msgid "Set new value for property '%s' on '%s'\n"
-msgstr "Satte nytt värde på egenskapen \"%s\" för \"%s\"\n"
-
-#: ../svn/propedit-cmd.c:92 ../svn/propset-cmd.c:93
-msgid "--encoding option applies only to textual Subversion-controlled properties"
-msgstr ""
-
-#: ../svn/propedit-cmd.c:158
-#, c-format
-msgid "Set new value for property '%s' on revision %ld\n"
-msgstr "Satte nytt värde på egenskapen \"%s\" i revision %ld\n"
-
-#: ../svn/propedit-cmd.c:164
-#, c-format
-msgid "No changes to property '%s' on revision %ld\n"
-msgstr "Inga ändringar av egenskapen \"%s\" i revision %ld\n"
-
-#: ../svn/propedit-cmd.c:172
-#, c-format
-msgid "Cannot specify revision for editing versioned property '%s'"
-msgstr "Revision kan ej anges vid editering av versionshanterad egenskap \"%s\""
-
-#: ../svn/propedit-cmd.c:200 ../svn/propset-cmd.c:170
-msgid "Explicit target argument required"
-msgstr "Explicit argument för mål krävs"
-
-#: ../svn/propedit-cmd.c:264
-#, c-format
-msgid "'%s' does not appear to be a working copy path"
-msgstr "\"%s\" verkar inte vara en sökväg till en arbetskopia"
-
-#: ../svn/propedit-cmd.c:322
-#, c-format
-msgid "No changes to property '%s' on '%s'\n"
-msgstr "Egenskapen \"%s\" för \"%s\" ändrades ej\n"
-
-#: ../svn/propget-cmd.c:140 ../svn/proplist-cmd.c:100
-#, c-format
-msgid "Properties on '%s':\n"
-msgstr "Egenskaper på \"%s\":\n"
-
-#: ../svn/propget-cmd.c:197
-msgid "--verbose cannot be used with --revprop or --strict or --xml"
-msgstr ""
-
-#: ../svn/propget-cmd.c:290
-msgid "Strict output of property values only available for single-target, non-recursive propget operations"
-msgstr ""
-
-#: ../svn/proplist-cmd.c:158
-#, c-format
-msgid "Unversioned properties on revision %ld:\n"
-msgstr "Ej versionshanterade egenskaper på revision %ld:\n"
-
-#: ../svn/props.c:62
-msgid "Must specify the revision as a number, a date or 'HEAD' when operating on a revision property"
-msgstr "Revision måste anges som ett tal, datum eller som \"HEAD\" vid arbete med revisionsegenskaper"
-
-#: ../svn/props.c:69
-msgid "Wrong number of targets specified"
-msgstr "Fel antal mål"
-
-#: ../svn/props.c:78
-msgid "Either a URL or versioned item is required"
-msgstr "En URL eller ett versionshanterat objekt krävs"
-
-#: ../svn/props.c:208
-#, c-format
-msgid ""
-"To turn off the %s property, use 'svn propdel';\n"
-"setting the property to '%s' will not turn it off."
-msgstr ""
-
-#: ../svn/propset-cmd.c:127
-#, c-format
-msgid "Cannot specify revision for setting versioned property '%s'"
-msgstr "Revision kan ej anges vid ändring av versionshanterad egenskap \"%s\""
-
-#: ../svn/propset-cmd.c:163
-#, c-format
-msgid "Explicit target required ('%s' interpreted as prop value)"
-msgstr "Mål måste anges (\"%s\" tolkas som egenskapsvärde)"
-
-#: ../svn/resolve-cmd.c:80
-msgid "missing --accept option"
-msgstr ""
-
-#: ../svn/resolve-cmd.c:83
-msgid "invalid 'accept' ARG"
-msgstr ""
-
-#: ../svn/revert-cmd.c:88
-#, fuzzy
-msgid "Try 'svn revert --depth infinity' instead?"
-msgstr "Försök med \"svn revert --recursive\" istället?"
-
-#: ../svn/status-cmd.c:364
-#, c-format
-msgid ""
-"\n"
-"--- Changelist '%s':\n"
-msgstr ""
-"\n"
-"--- Ändringslista '%s':\n"
-
-#: ../svn/status.c:372
-#, c-format
-msgid "'%s' has lock token, but no lock owner"
-msgstr "\"%s\" har låsidentifierare, men ingen låsägare"
+#: ../svn/svn.c:2936
+msgid "When using svn+ssh:// URLs, keep in mind that the --username and --password options are ignored because authentication is performed by SSH, not Subversion"
+msgstr "När URL:er på formen svn+ssh:// används, kom ihåg att flaggorna --username och --password ej beaktas eftersom autentisering görs av SSH, inte av Subversion"
#: ../svn/switch-cmd.c:63
#, c-format
msgid "'%s' to '%s' is not a valid relocation"
msgstr "\"%s\" till \"%s\" är ingen giltig omlokalisering"
-#: ../svn/tree-conflicts.c:38 ../svn/tree-conflicts.c:58
-msgid "edit"
-msgstr ""
-
-#: ../svn/tree-conflicts.c:39 ../svn/tree-conflicts.c:59
-#, fuzzy
-msgid "delete"
-msgstr "Raderad"
-
-#: ../svn/tree-conflicts.c:40 ../svn/tree-conflicts.c:62
-msgid "add"
-msgstr ""
-
-#: ../svn/tree-conflicts.c:41 ../svn/tree-conflicts.c:63
-msgid "replace"
-msgstr ""
-
-#: ../svn/tree-conflicts.c:60
-msgid "missing"
-msgstr ""
+#: ../svn/switch-cmd.c:170
+#, c-format
+msgid "Path '%s' does not share common version control ancestry with the requested switch location. Use --ignore-ancestry to disable this check."
+msgstr "Sökvägen \"%s\" saknar gemensamt versionshanterat ursprung med den begärda platsen för växlingen. Använd --ignore-ancestry för att stänga av denna kontroll."
-#: ../svn/tree-conflicts.c:61
-#, fuzzy
-msgid "obstruction"
-msgstr "Transaktionen finns inte"
+#: ../svn/switch-cmd.c:180
+msgid "'svn switch' does not support switching a working copy to a different repository"
+msgstr "\"svn switch\" stöder inte växling av en arbetskopia till ett annat arkiv"
-#: ../svn/tree-conflicts.c:64
-msgid "unversioned"
-msgstr ""
+#: ../svn/update-cmd.c:93
+#, c-format
+msgid "Summary of updates:\n"
+msgstr "Sammanfattning av uppdateringar:\n"
-#: ../svn/tree-conflicts.c:107
+#: ../svn/update-cmd.c:97
#, c-format
-msgid "local %s, incoming %s upon %s"
-msgstr ""
+msgid " Updated '%s' to r%ld.\n"
+msgstr " Uppdaterade \"%s\" till r%ld.\n"
-#: ../svn/util.c:74
-#, fuzzy, c-format
+#: ../svn/util.c:79
+#, c-format
msgid ""
"\n"
"Committed revision %ld%s.\n"
msgstr ""
"\n"
-"Arkiverade revision %ld.\n"
+"Arkiverade revision %ld%s.\n"
-#: ../svn/util.c:78
+#: ../svn/util.c:83
msgid " (the answer to life, the universe, and everything)"
-msgstr ""
+msgstr " (svaret på livet, universum och allting)"
-#: ../svn/util.c:87
+#: ../svn/util.c:92
#, c-format
msgid ""
"\n"
@@ -10159,84 +13090,49 @@ msgstr ""
"\n"
"Varning: %s\n"
-#: ../svn/util.c:147
-msgid "The EDITOR, SVN_EDITOR or VISUAL environment variable or 'editor-cmd' run-time configuration option is empty or consists solely of whitespace. Expected a shell command."
-msgstr ""
-
-#: ../svn/util.c:154
-#, fuzzy
-msgid "None of the environment variables SVN_EDITOR, VISUAL or EDITOR are set, and no 'editor-cmd' run-time configuration option was found"
-msgstr "Ingen av miljövariablerna SVN_EDITOR, VISUAL eller EDITOR är satt och ingen editor-cmd-inställning hittades"
-
-#: ../svn/util.c:182 ../svn/util.c:343
-#, c-format
-msgid "Can't get working directory"
-msgstr "Kan inte erhålla aktuell katalog"
-
-#: ../svn/util.c:193 ../svn/util.c:354 ../svn/util.c:379
-#, c-format
-msgid "Can't change working directory to '%s'"
-msgstr "Kan inte byta aktuell katalog till \"%s\""
-
-#: ../svn/util.c:201 ../svn/util.c:523
-#, c-format
-msgid "Can't restore working directory"
-msgstr "Kan inte återställa aktuell katalog"
-
-#: ../svn/util.c:208 ../svn/util.c:451
-#, c-format
-msgid "system('%s') returned %d"
-msgstr "system(\"%s\") returnerade %d"
-
-#: ../svn/util.c:248
+#: ../svn/util.c:133
msgid "The SVN_MERGE environment variable is empty or consists solely of whitespace. Expected a shell command.\n"
-msgstr ""
+msgstr "Omgivningsvariabeln SVN_MERGE är tom eller består helt av tomrum. Ett skalkommando väntades.\n"
-#: ../svn/util.c:254
-#, fuzzy
+#: ../svn/util.c:139
msgid "The environment variable SVN_MERGE and the merge-tool-cmd run-time configuration option were not set.\n"
-msgstr "Ingen av miljövariablerna SVN_EDITOR, VISUAL eller EDITOR är satt och ingen editor-cmd-inställning hittades"
+msgstr "Omgivningsvariabeln SVN_MERGE och programinställningen merge-tool-cmd är inte satta.\n"
-#: ../svn/util.c:284
+#: ../svn/util.c:169
#, c-format
msgid "The external merge tool exited with exit code %d"
-msgstr ""
-
-#: ../svn/util.c:406
-#, c-format
-msgid "Can't write to '%s'"
-msgstr "Kan inte skriva till \"%s\""
-
-#: ../svn/util.c:492
-msgid "Error normalizing edited contents to internal format"
-msgstr "Fel vid normalisering av det redigerade innehållet till det interna formatet"
+msgstr "Det externa sammanslagningsverktyget avslutades med kod %d"
-#: ../svn/util.c:565
+#: ../svn/util.c:211
msgid "Log message contains a zero byte"
msgstr "Loggmeddelandet innehåller en noll-byte"
-#: ../svn/util.c:628
+#: ../svn/util.c:269
+#, c-format
+msgid " '%s'"
+msgstr " \"%s\""
+
+#: ../svn/util.c:273
msgid "Your commit message was left in a temporary file:"
msgstr "Ditt loggmeddelande lämnades i en temporär fil:"
-#: ../svn/util.c:680
+#: ../svn/util.c:325
msgid "--This line, and those below, will be ignored--"
msgstr "--Denna och nedanstående rader kommer inte med i loggmeddelandet--"
-#: ../svn/util.c:714
+#: ../svn/util.c:360
msgid "Error normalizing log message to internal format"
msgstr "Fel vid normalisering av loggmeddelande till det interna formatet"
-#: ../svn/util.c:801
+#: ../svn/util.c:447 ../svnmucc/svnmucc.c:764
msgid "Cannot invoke editor to get log message when non-interactive"
msgstr "Kan inte köra editorn för att erhålla loggmeddelande i icke-interaktivt läge"
-#: ../svn/util.c:814
+#: ../svn/util.c:460
msgid "Could not use external editor to fetch log message; consider setting the $SVN_EDITOR environment variable or using the --message (-m) or --file (-F) options"
msgstr "Kunde inte använda den externa editorn för att erhålla ett loggmeddelande; sätt miljövariabeln $SVN_EDITOR eller använd en av flaggorna --message (-m) eller --file (-F)"
-#: ../svn/util.c:850
-#, fuzzy
+#: ../svn/util.c:496
msgid ""
"\n"
"Log message unchanged or not specified\n"
@@ -10244,111 +13140,104 @@ msgid ""
msgstr ""
"\n"
"Loggmeddelandet oförändrat eller inte angivet\n"
-"avbryt (a), fortsätt (c), editera (e)\n"
+"avbryt (a), fortsätt (c), editera (e):\n"
-#: ../svn/util.c:903
-#, fuzzy
+#: ../svn/util.c:549
msgid "Use --force to override this restriction (local modifications may be lost)"
-msgstr "Använd --force för att komma runt denna begränsning"
+msgstr "Använd --force för att komma runt denna begränsning (lokala ändringar kan gå förlorade)"
-#: ../svn/util.c:1050 ../svn/util.c:1083
+#: ../svn/util.c:738 ../svn/util.c:771
msgid "none"
-msgstr ""
+msgstr "ingen"
-#: ../svn/util.c:1051
+#: ../svn/util.c:739
msgid "file"
-msgstr ""
+msgstr "fil"
-#: ../svn/util.c:1052
+#: ../svn/util.c:740
msgid "dir"
-msgstr ""
+msgstr "katalog"
-#: ../svn/util.c:1084
-#, fuzzy
+#: ../svn/util.c:772
msgid "update"
-msgstr "Felaktigt datum"
+msgstr "uppdatering"
-#: ../svn/util.c:1085
-#, fuzzy
+#: ../svn/util.c:773
msgid "switch"
-msgstr "Ogiltig flagga"
-
-#: ../svn/util.c:1086
-msgid "merge"
-msgstr ""
+msgstr "växling"
-#: ../svn/util.c:1204
-#, fuzzy
+#: ../svn/util.c:896
msgid "(invalid date)"
-msgstr "(datum saknas)"
-
-#: ../svnadmin/main.c:103 ../svndumpfilter/main.c:72
-#, c-format
-msgid "Can't open stdio file"
-msgstr "Kan inte öppna stdio-fil"
-
-#: ../svnadmin/main.c:132
-msgid "Repository argument required"
-msgstr "Argument för arkiv krävs"
+msgstr "(felaktigt datum)"
-#: ../svnadmin/main.c:137
+#: ../svn/util.c:1056
#, c-format
-msgid "'%s' is an URL when it should be a path"
-msgstr "\"%s\" är en URL när den skulle vara en sökväg"
+msgid "svn: warning: '%s' is a binary mime-type but file '%s' looks like text; diff, merge, blame, and other operations will stop working on this file\n"
+msgstr "svn: varning: \"%s\" är en binär mime-typ men filen \"%s\" ser ut som text; \"diff\", \"merge\", \"blame\" och andra kommandon kommer sluta fungera med denna fil\n"
-#: ../svnadmin/main.c:253 ../svnrdump/svnrdump.c:77
+#: ../svnadmin/svnadmin.c:217 ../svnrdump/svnrdump.c:120
msgid "specify revision number ARG (or X:Y range)"
msgstr "ange revisionsnummer ARG (eller ett område X:Y)"
-#: ../svnadmin/main.c:256
-msgid "dump incrementally"
-msgstr "dumpa inkrementellt"
+#: ../svnadmin/svnadmin.c:220 ../svnlook/svnlook.c:162
+msgid "specify transaction name ARG"
+msgstr "ange transaktionsnamn ARG"
-#: ../svnadmin/main.c:259
+#: ../svnadmin/svnadmin.c:223
+msgid "dump or hotcopy incrementally"
+msgstr "dumpa eller kopiera under drift inkrementellt"
+
+#: ../svnadmin/svnadmin.c:226
msgid "use deltas in dump output"
msgstr "använd deltan i utskrift av dump"
-#: ../svnadmin/main.c:262
+#: ../svnadmin/svnadmin.c:229
msgid "bypass the repository hook system"
-msgstr "kringgå arkivets hookskript-system"
+msgstr "kringgå arkivets krokskript-system"
+
+#: ../svnadmin/svnadmin.c:232
+msgid "bypass property validation logic"
+msgstr "förbigå logik för egenskapskontroll"
-#: ../svnadmin/main.c:265 ../svnrdump/svnrdump.c:78
+#: ../svnadmin/svnadmin.c:235 ../svnlook/svnlook.c:193
+#: ../svnrdump/svnrdump.c:122 ../svnserve/svnserve.c:291
+#: ../svnversion/svnversion.c:143
msgid "no progress (only errors) to stderr"
msgstr ""
"ingen förloppsinformation (endast fel) till\n"
" standard fel"
-#: ../svnadmin/main.c:268
+#: ../svnadmin/svnadmin.c:238
msgid "ignore any repos UUID found in the stream"
msgstr "bortse från samtliga arkiv-UUID:n i strömmen"
-#: ../svnadmin/main.c:271
+#: ../svnadmin/svnadmin.c:241
msgid "set repos UUID to that found in stream, if any"
msgstr ""
"sätt UUID för arkivet till den som eventuellt\n"
" återfinns i strömmen"
-#: ../svnadmin/main.c:274
+#: ../svnadmin/svnadmin.c:244
msgid "type of repository: 'fsfs' (default) or 'bdb'"
msgstr "typ av arkiv: \"fsfs\" (standard) eller \"bdb\""
-#: ../svnadmin/main.c:277
+#: ../svnadmin/svnadmin.c:247
msgid "load at specified directory in repository"
msgstr "läs in till angiven katalog i arkivet"
-#: ../svnadmin/main.c:280
+#: ../svnadmin/svnadmin.c:250
msgid "disable fsync at transaction commit [Berkeley DB]"
msgstr ""
"slå av fsync vid commit av transaktion\n"
" [Berkeley DB]"
-#: ../svnadmin/main.c:283
+#: ../svnadmin/svnadmin.c:253
msgid "disable automatic log file removal [Berkeley DB]"
msgstr ""
"slå av automatisk radering av loggfiler\n"
" [Berkeley DB]"
-#: ../svnadmin/main.c:289
+#: ../svnadmin/svnadmin.c:259
msgid ""
"remove redundant Berkeley DB log files\n"
" from source repository [Berkeley DB]"
@@ -10356,23 +13245,31 @@ msgstr ""
"ta bort redundanta Berkeley DB-loggfiler\n"
" från källarkivet [Berkeley DB]"
-#: ../svnadmin/main.c:293
+#: ../svnadmin/svnadmin.c:263
msgid "call pre-commit hook before committing revisions"
-msgstr "anropa pre-commit-hookskript före arkivering av revisioner"
+msgstr ""
+"anropa krokskript \"pre-commit\" före arkivering\n"
+" av revisioner"
-#: ../svnadmin/main.c:296
+#: ../svnadmin/svnadmin.c:266
msgid "call post-commit hook after committing revisions"
-msgstr "anropa post-commit-hookskript efter arkivering av revisioner"
+msgstr ""
+"anropa krokskript \"post-commit\" efter arkivering\n"
+" av revisioner"
-#: ../svnadmin/main.c:299
+#: ../svnadmin/svnadmin.c:269
msgid "call hook before changing revision property"
-msgstr "anropa hookskript före 'ndring av revisionsegenskap"
+msgstr ""
+"anropa krokskript före ändring av\n"
+" revisionsegenskap"
-#: ../svnadmin/main.c:302
+#: ../svnadmin/svnadmin.c:272
msgid "call hook after changing revision property"
-msgstr "anropa hookskript efter ändring av revisionsegenskap"
+msgstr ""
+"anropa krokskript efter ändring av\n"
+" revisionsegenskap"
-#: ../svnadmin/main.c:305
+#: ../svnadmin/svnadmin.c:275
msgid ""
"wait instead of exit if the repository is in\n"
" use by another process"
@@ -10380,65 +13277,57 @@ msgstr ""
"vänta istället för att avsluta om arkivet\n"
" används av någon annan process"
-#: ../svnadmin/main.c:309
-msgid ""
-"use format compatible with Subversion versions\n"
-" earlier than 1.4"
-msgstr ""
-"använd ett format kompatibelt med Subversion-\n"
-" versioner äldre än 1.4"
+#: ../svnadmin/svnadmin.c:279 ../svnadmin/svnadmin.c:282
+#: ../svnadmin/svnadmin.c:285
+msgid "deprecated; see --compatible-version"
+msgstr "föråldrat; se --compatible-version"
-#: ../svnadmin/main.c:313
-#, fuzzy
+#: ../svnadmin/svnadmin.c:288
msgid ""
-"use format compatible with Subversion versions\n"
-" earlier than 1.5"
+"size of the extra in-memory cache in MB used to\n"
+" minimize redundant operations. Default: 16.\n"
+" [used for FSFS repositories only]"
msgstr ""
-"använd ett format kompatibelt med Subversion-\n"
-" versioner äldre än 1.4"
+"storlek på extra cacheminne i MB använt till\n"
+" att minimera antalet onödiga operationer.\n"
+" Standardvärde: 16. [endast använt för FSFS-arkiv]"
-#: ../svnadmin/main.c:317
-#, fuzzy
+#: ../svnadmin/svnadmin.c:293
msgid ""
-"use format compatible with Subversion versions\n"
-" earlier than 1.6"
+"use repository format compatible with Subversion\n"
+" version ARG (\"1.5.5\", \"1.7\", etc.)"
msgstr ""
-"använd ett format kompatibelt med Subversion-\n"
-" versioner äldre än 1.4"
+"använd ett arkivformat kompatibelt med\n"
+" Subversion-version ARG (\"1.5.5\", \"1.7\", osv)"
-#: ../svnadmin/main.c:321
-#, fuzzy
-msgid ""
-"use format compatible with Subversion versions\n"
-" earlier than 1.7"
-msgstr ""
-"använd ett format kompatibelt med Subversion-\n"
-" versioner äldre än 1.4"
+#: ../svnadmin/svnadmin.c:296
+msgid "read repository paths from file ARG"
+msgstr "läs arkivsökvägar från filen ARG"
-#: ../svnadmin/main.c:334
+#: ../svnadmin/svnadmin.c:308
msgid ""
"usage: svnadmin crashtest REPOS_PATH\n"
"\n"
"Open the repository at REPOS_PATH, then abort, thus simulating\n"
"a process that crashes while holding an open repository handle.\n"
msgstr ""
-"användning: svnadmin crashtest ARKIV_SÖKVÄG\n"
+"användning: svnadmin crashtest ARKIVSÖKVÄG\n"
"\n"
-"Öppna arkivet under ARKIV_SÖKVÄG och avbryt därefter, vilket simulerar en\n"
+"Öppna arkivet under ARKIVSÖKVÄG och avbryt därefter, vilket simulerar en\n"
"process som kraschar då den har ett arkiv öppet.\n"
-#: ../svnadmin/main.c:340
+#: ../svnadmin/svnadmin.c:314
msgid ""
"usage: svnadmin create REPOS_PATH\n"
"\n"
"Create a new, empty repository at REPOS_PATH.\n"
msgstr ""
-"användning: svnadmin create ARKIV_SÖKVÄG\n"
+"användning: svnadmin create ARKIVSÖKVÄG\n"
"\n"
-"Skapa ett nytt tomt arkiv under sökvägen ARKIV_SÖKVÄG.\n"
+"Skapa ett nytt tomt arkiv under sökvägen ARKIVSÖKVÄG.\n"
"\n"
-#: ../svnadmin/main.c:348
+#: ../svnadmin/svnadmin.c:323
msgid ""
"usage: svnadmin deltify [-r LOWER[:UPPER]] REPOS_PATH\n"
"\n"
@@ -10448,7 +13337,7 @@ msgid ""
"delta from the preceding revision. If no revisions are specified,\n"
"this will simply deltify the HEAD revision.\n"
msgstr ""
-"användning: svnadmin deltify [-r BÖRJAN[:SLUT]] ARKIV_SÖKVÄG\n"
+"användning: svnadmin deltify [-r BÖRJAN[:SLUT]] ARKIVSÖKVÄG\n"
"\n"
"Gå igenom det angivna revisionsområdet och utför föregångardeltifiering av\n"
"de sökvägar som ändrats i dessa revisioner. I stora drag komprimerar\n"
@@ -10456,8 +13345,7 @@ msgstr ""
"jämfört med föregående revision. Om inga revisioner anges, deltifieras\n"
"huvudrevisionen.\n"
-#: ../svnadmin/main.c:357
-#, fuzzy
+#: ../svnadmin/svnadmin.c:332
msgid ""
"usage: svnadmin dump REPOS_PATH [-r LOWER[:UPPER] [--incremental]]\n"
"\n"
@@ -10471,16 +13359,39 @@ msgid ""
"case, the second and subsequent revisions, if any, describe only paths\n"
"changed in those revisions.)\n"
msgstr ""
-"användning: svnadmin dump ARKIV_SÖKVÄG [-r BÖRJAN[:SLUT] [--incremental]]\n"
+"användning: svnadmin dump ARKIVSÖKVÄG [-r BÖRJAN[:SLUT] [--incremental]]\n"
"\n"
"Skriv innehållet i filsystemet till standard ut i ett portabelt\n"
"\"dumpfile\"-format med återkoppling till standard fel. Revisionerna BÖRJAN\n"
"till och med SLUT skrivs ut. Om inga revisioner anges, skrivs samtliga\n"
"revisionsträd. Om endast BÖRJAN anges, skrivs det revisionsträdet. Flaggan\n"
-"--incremental gör att den första skrivna revisionen är en diff gentemot\n"
-"föregående revision istället för fulltext, vilket annars är fallet.\n"
+"--incremental gör att den första skrivna revisionen bara kommer innehålla\n"
+"sökvägarna som ändrades i den revisionen; annars kommer den innehålla alla\n"
+"sökvägar som finns i arkivet i den revisionen. (I båda fallen kommer alla\n"
+"revisioner därefter bara ta med sökvägarna som ändrades i varje enskild\n"
+"revision.)\n"
+
+#: ../svnadmin/svnadmin.c:345
+msgid ""
+"usage: 1. svnadmin freeze REPOS_PATH PROGRAM [ARG...]\n"
+" 2. svnadmin freeze -F FILE PROGRAM [ARG...]\n"
+"\n"
+"1. Run PROGRAM passing ARGS while holding a write-lock on REPOS_PATH.\n"
+"\n"
+"2. Like 1 except all repositories listed in FILE are locked. The file\n"
+" format is repository paths separated by newlines. Repositories are\n"
+" locked in the same order as they are listed in the file.\n"
+msgstr ""
+"användning: 1. svnadmin freeze ARKIVSÖKVÄG PROGRAM [ARGUMENT...]\n"
+" 2. svnadmin freeze -F FIL PROGRAM [ARGUMENT...]\n"
+"\n"
+"1. Kör PROGRAM med ARGUMENT samtidigt som ARKIVSÖKVÄG hålls låst för skrivning.\n"
+"\n"
+"2. Som i 1, men alla arkiv listade i FIL hålls låsta. Filens format är en\n"
+" arkivsökväg på varje rad. Arkiven låses i samma ordning som de står\n"
+" i filen.\n"
-#: ../svnadmin/main.c:370
+#: ../svnadmin/svnadmin.c:355
msgid ""
"usage: svnadmin help [SUBCOMMAND...]\n"
"\n"
@@ -10490,17 +13401,21 @@ msgstr ""
"\n"
"Beskriver hur det här programmet och dess underkommandon används.\n"
-#: ../svnadmin/main.c:375
+#: ../svnadmin/svnadmin.c:360
msgid ""
"usage: svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH\n"
"\n"
-"Makes a hot copy of a repository.\n"
+"Make a hot copy of a repository.\n"
+"If --incremental is passed, data which already exists at the destination\n"
+"is not copied again. Incremental mode is implemented for FSFS repositories.\n"
msgstr ""
-"användning: svnadmin hotcopy ARKIV_SÖKVÄG NY_ARKIV_SÖKVÄG\n"
+"användning: svnadmin hotcopy ARKIVSÖKVÄG NY_ARKIVSÖKVÄG\n"
"\n"
-"Gör en \"hot copy\" (kopia samtidigt som arkivet används) av ett arkiv.\n"
+"Gör en kopiering under drift av ett arkiv.\n"
+"Med flaggan --incremental kommer data som redan finns i destinationen inte\n"
+"kopieras igen. Denna funktion finns implementerad för FSFS-arkiv.\n"
-#: ../svnadmin/main.c:380
+#: ../svnadmin/svnadmin.c:367
msgid ""
"usage: svnadmin list-dblogs REPOS_PATH\n"
"\n"
@@ -10509,26 +13424,26 @@ msgid ""
"WARNING: Modifying or deleting logfiles which are still in use\n"
"will cause your repository to be corrupted.\n"
msgstr ""
-"användning: svnadmin list-dblogs ARKIV_SÖKVÄG\n"
+"användning: svnadmin list-dblogs ARKIVSÖKVÄG\n"
"\n"
"Ger en lista av alla Berkeley DB-loggfiler.\n"
"\n"
"VARNING: Att ändra eller ta bort loggfiler som fortfarande används leder\n"
"till att databasen förstörs.\n"
-#: ../svnadmin/main.c:387
+#: ../svnadmin/svnadmin.c:374
msgid ""
"usage: svnadmin list-unused-dblogs REPOS_PATH\n"
"\n"
"List unused Berkeley DB log files.\n"
"\n"
msgstr ""
-"användning: svnadmin list-unused-dblogs ARKIV_SÖKVÄG\n"
+"användning: svnadmin list-unused-dblogs ARKIVSÖKVÄG\n"
"\n"
"Ger en lista av Berkeley DB-loggfiler som inte används.\n"
"\n"
-#: ../svnadmin/main.c:392
+#: ../svnadmin/svnadmin.c:379
msgid ""
"usage: svnadmin load REPOS_PATH\n"
"\n"
@@ -10536,42 +13451,67 @@ msgid ""
"new revisions into the repository's filesystem. If the repository\n"
"was previously empty, its UUID will, by default, be changed to the\n"
"one specified in the stream. Progress feedback is sent to stdout.\n"
+"If --revision is specified, limit the loaded revisions to only those\n"
+"in the dump stream whose revision numbers match the specified range.\n"
msgstr ""
-"användning: svnadmin load ARKIV_SÖKVÄG\n"
+"användning: svnadmin load ARKIVSÖKVÄG\n"
"\n"
"Läser in en fil i \"dumpfile\"-format från standard in och inför nya revisioner\n"
-"i arkivets filsystem. Om arkivet var tomt från början, kommer\n"
-"normalt dess UUID att sättas till UUID:n i filen. Förloppet visas på standard\n"
-"ut.\n"
+"i arkivets filsystem. Om arkivet var tomt från början, kommer normalt\n"
+"dess UUID att sättas till UUID:n i filen. Förloppet visas på standard ut.\n"
+"Om flaggan --revision anges kommer bara revisionerna vars nummer ingår i det\n"
+"angivna området läsas in från inmatningsströmmen.\n"
+
+#: ../svnadmin/svnadmin.c:391
+msgid ""
+"usage: svnadmin lock REPOS_PATH PATH USERNAME COMMENT-FILE [TOKEN]\n"
+"\n"
+"Lock PATH by USERNAME setting comments from COMMENT-FILE.\n"
+"If provided, use TOKEN as lock token. Use --bypass-hooks to avoid\n"
+"triggering the pre-lock and post-lock hook scripts.\n"
+msgstr ""
+"användning: svnadmin lock ARKIVSÖKVÄG SÖKVÄG ANVÄNDARNAMN\n"
+" KOMMENTARFIL [ID]\n"
+"\n"
+"Lås SÖKVÄG som ANVÄNDARNAMN med kommentarer från KOMMENTARFIL.\n"
+"Om angivet, använd ID som låsidentifierare. Använd --bypass-hooks för att\n"
+"förhindra körning av krokskripten \"pre-lock\" och \"post-lock\".\n"
-#: ../svnadmin/main.c:402
+#: ../svnadmin/svnadmin.c:398
msgid ""
"usage: svnadmin lslocks REPOS_PATH [PATH-IN-REPOS]\n"
"\n"
"Print descriptions of all locks on or under PATH-IN-REPOS (which,\n"
"if not provided, is the root of the repository).\n"
msgstr ""
+"användning: svnadmin lslocks ARKIVSÖKVÄG [SÖKVÄG-I-ARKIV]\n"
+"\n"
+"Beskriv alla lås i eller under SÖKVÄG-I-ARKIV (som är arkivets rot om ej\n"
+"angiven).\n"
-#: ../svnadmin/main.c:408
+#: ../svnadmin/svnadmin.c:404
msgid ""
"usage: svnadmin lstxns REPOS_PATH\n"
"\n"
"Print the names of all uncommitted transactions.\n"
msgstr ""
-"användning: svnadmin lstxns ARKIV_SÖKVÄG\n"
+"användning: svnadmin lstxns ARKIVSÖKVÄG\n"
"\n"
"Visa namnen på alla transaktioner som inte är införda.\n"
-#: ../svnadmin/main.c:413
+#: ../svnadmin/svnadmin.c:409
msgid ""
"usage: svnadmin pack REPOS_PATH\n"
"\n"
"Possibly compact the repository into a more efficient storage model.\n"
"This may not apply to all repositories, in which case, exit.\n"
msgstr ""
+"användning: svnadmin pack ARKIVSÖKVÄG\n"
+"\n"
+"Packa arkivet i ett effektivare lagringsformat om det går.\n"
+"I annat fall sker ingenting.\n"
-#: ../svnadmin/main.c:419
-#, fuzzy
+#: ../svnadmin/svnadmin.c:415
msgid ""
"usage: svnadmin recover REPOS_PATH\n"
"\n"
@@ -10580,33 +13520,34 @@ msgid ""
"Berkeley DB recovery requires exclusive access and will\n"
"exit if the repository is in use by another process.\n"
msgstr ""
-"användning: svnadmin recover ARKIV_SÖKVÄG\n"
+"användning: svnadmin recover ARKIVSÖKVÄG\n"
"\n"
-"Utför Berkeley DB:s rutin för att återskapa databasen. Gör detta om du har\n"
-"fått felmeddelanden som talar om att det behövs. Återskapandet kräver enskild\n"
-"åtkomst och kommer att avbrytas om databasen används av någon annan process.\n"
+"Utför rutinen för att återskapa databasen. Gör detta om du har fått\n"
+"felmeddelanden som talar om att det behövs. Återskapandet av en Berkeley-\n"
+"databas kräver enskild åtkomst och kommer avbrytas om databasen används av\n"
+"någon annan process.\n"
-#: ../svnadmin/main.c:427
+#: ../svnadmin/svnadmin.c:423
msgid ""
"usage: svnadmin rmlocks REPOS_PATH LOCKED_PATH...\n"
"\n"
"Unconditionally remove lock from each LOCKED_PATH.\n"
msgstr ""
-"användning: svnadmin rmlocks ARKIV_SÖKVÄG LÅST_SÖKVÄG...\n"
+"användning: svnadmin rmlocks ARKIVSÖKVÄG LÅST_SÖKVÄG...\n"
"\n"
"Ta ovillkorligen bort lås från varje LÅST_SÖKVÄG.\n"
-#: ../svnadmin/main.c:432
+#: ../svnadmin/svnadmin.c:428
msgid ""
"usage: svnadmin rmtxns REPOS_PATH TXN_NAME...\n"
"\n"
"Delete the named transaction(s).\n"
msgstr ""
-"användning: svnadmin rmtxns ARKIV_SÖKVÄG TXN_NAMN...\n"
+"användning: svnadmin rmtxns ARKIVSÖKVÄG TXN_NAMN...\n"
"\n"
"Ta bort namngivna transaktion(er).\n"
-#: ../svnadmin/main.c:437
+#: ../svnadmin/svnadmin.c:433
msgid ""
"usage: svnadmin setlog REPOS_PATH -r REVISION FILE\n"
"\n"
@@ -10620,18 +13561,18 @@ msgid ""
"NOTE: Revision properties are not versioned, so this command will\n"
"overwrite the previous log message.\n"
msgstr ""
-"användning: svnadmin setlog ARKIV_SÖKVÄG -r REVISION FIL\n"
+"användning: svnadmin setlog ARKIVSÖKVÄG -r REVISION FIL\n"
"\n"
"Sätt loggmeddelandet för revisionen REVISION till innehållet i filen FIL.\n"
-"Använd --bypass-hooks för att revisionsegenskapsrelaterade hookskript inte\n"
+"Använd --bypass-hooks för att revisionsegenskapsrelaterade krokskript inte\n"
"ska aktiveras (om du till exempel vill undvika att e-post skickas från\n"
-"ditt post-revprop-change-hookskript, eller om ändring av revisionsegenskaper\n"
-"ej är påslaget i pre-revprop-change-hookskriptet).\n"
+"ditt \"post-revprop-change\"-krokskript, eller om ändring av\n"
+"revisionsegenskaper ej är påslaget i \"pre-revprop-change\"-krokskriptet).\n"
"\n"
"ANMÄRKNING: Historik lagras inte för revisionsegenskaper, så detta kommando\n"
"skriver för alltid över det befintliga loggmeddelandet.\n"
-#: ../svnadmin/main.c:449
+#: ../svnadmin/svnadmin.c:445
msgid ""
"usage: svnadmin setrevprop REPOS_PATH -r REVISION NAME FILE\n"
"\n"
@@ -10643,17 +13584,17 @@ msgid ""
"NOTE: Revision properties are not versioned, so this command will\n"
"overwrite the previous value of the property.\n"
msgstr ""
-"användning: svnadmin setrevprop ARKIV_SÖKVÄG -r REVISION NAMN FIL\n"
+"användning: svnadmin setrevprop ARKIVSÖKVÄG -r REVISION NAMN FIL\n"
"\n"
"Sätt egenskapen NAMN på revisionen REVISION till innehållet i FIL. Använd\n"
"--use-pre-revprop-change-hook/--use-post-revprop-change-hook för att starta\n"
-"hookskripten för revisionsegenskaper (om du exempelvis vill att epost ska\n"
-"skickas från port+revprop+change+hookskriptet.\n"
+"krokskripten för revisionsegenskaper (om du exempelvis vill att epost ska\n"
+"skickas från \"post-revprop-change\"-krokskriptet).\n"
"\n"
"ANMÄRKNING: Historik sparas ej för revisionsegenskaper, så detta kommando\n"
"skriver över egenskapens tidigare värde.\n"
-#: ../svnadmin/main.c:460
+#: ../svnadmin/svnadmin.c:456
msgid ""
"usage: svnadmin setuuid REPOS_PATH [NEW_UUID]\n"
"\n"
@@ -10661,8 +13602,26 @@ msgid ""
"NEW_UUID is provided, use that as the new repository UUID; otherwise,\n"
"generate a brand new UUID for the repository.\n"
msgstr ""
+"användning: svnadmin setuuid ARKIVSÖKVÄG [NY_UUID]\n"
+"\n"
+"Återställ UUID för arkivet i ARKIVSÖKVÄG. Om NY_UUID anges kommer det\n"
+"användas som ny UUID för arkivet; annars kommer en helt ny UUID genereras.\n"
+
+#: ../svnadmin/svnadmin.c:463
+msgid ""
+"usage: svnadmin unlock REPOS_PATH LOCKED_PATH USERNAME TOKEN\n"
+"\n"
+"Unlock LOCKED_PATH (as USERNAME) after verifying that the token\n"
+"associated with the lock matches TOKEN. Use --bypass-hooks to avoid\n"
+"triggering the pre-unlock and post-unlock hook scripts.\n"
+msgstr ""
+"användning: svnadmin unlock ARKIVSÖKVÄG LÅST_SÖKVÄG ANVÄNDARNAMN ID\n"
+"\n"
+"Lås upp LÅST_SÖKVÄG (som ANVÄNDARNAMN) efter att ha kontrollerat att\n"
+"låsidentifieraren stämmer med ID. Använd --bypass-hooks för att förhindra\n"
+"körning av krokskripten \"pre-unlock\" och \"post-unlock\".\n"
-#: ../svnadmin/main.c:467
+#: ../svnadmin/svnadmin.c:470
msgid ""
"usage: svnadmin upgrade REPOS_PATH\n"
"\n"
@@ -10677,51 +13636,87 @@ msgid ""
"integrity of the repository. It does not guarantee the most optimized\n"
"repository state as a dump and subsequent load would.\n"
msgstr ""
+"användning: svnadmin upgrade ARKIVSÖKVÄG\n"
+"\n"
+"Uppgradera arkivet vid ARKIVSÖKVÄG till den senaste schemaversionen.\n"
+"\n"
+"Denna funktion är till för arkivförvaltare som vill utnyttja nya\n"
+"funktioner i Subversion utan att behöva företa sig en hel utskrivning\n"
+"och återställning av arkivet. Uppgraderingen i sig gör bara så lite arbete\n"
+"som nödvändigt för att åstadkomma detta och samtidigt upprätthålla arkivets\n"
+"helhet. Den garanterar inte ett optimerat arkivtillstånd vilket en\n"
+"utskrivning och återställning skulle göra.\n"
-#: ../svnadmin/main.c:480
+#: ../svnadmin/svnadmin.c:483
msgid ""
"usage: svnadmin verify REPOS_PATH\n"
"\n"
-"Verifies the data stored in the repository.\n"
+"Verify the data stored in the repository.\n"
msgstr ""
-"användning: svnadmin verify ARKIV_SÖKVÄG\n"
+"användning: svnadmin verify ARKIVSÖKVÄG\n"
"\n"
"Kontrollerar den data som är lagrad i arkivet.\n"
-#: ../svnadmin/main.c:539
+#: ../svnadmin/svnadmin.c:545
msgid "Invalid revision specifier"
msgstr "Ogiltig revisionsangivelse"
-#: ../svnadmin/main.c:543
+#: ../svnadmin/svnadmin.c:549
#, c-format
msgid "Revisions must not be greater than the youngest revision (%ld)"
msgstr "Revisionerna får ej vara större än den yngsta revisionen (%ld)"
-#: ../svnadmin/main.c:630 ../svnadmin/main.c:885
+#: ../svnadmin/svnadmin.c:656
+#, c-format
+msgid "%swarning: The \"%s\" repository back-end is deprecated, consider using \"%s\" instead.\n"
+msgstr "%svarning: Arkivmekanismen \"%s\" är föråldrad; överväg att använda \"%s\" istället.\n"
+
+#: ../svnadmin/svnadmin.c:696
+msgid "Repositories compatible with 1.0.x must use --fs-type=bdb"
+msgstr "Arkiv kompatibla med 1.0.x måste använda --fs-type=bdb"
+
+#: ../svnadmin/svnadmin.c:739 ../svnadmin/svnadmin.c:1011
+#: ../svnadmin/svnadmin.c:1192
msgid "First revision cannot be higher than second"
msgstr "Den första revisionen kan inte vara högre än den andra"
-#: ../svnadmin/main.c:639
+#: ../svnadmin/svnadmin.c:748
#, c-format
msgid "Deltifying revision %ld..."
msgstr "Deltifierar revision %ld..."
-#: ../svnadmin/main.c:643 ../svnadmin/main.c:694 ../svnadmin/main.c:710
+#: ../svnadmin/svnadmin.c:752 ../svnadmin/svnadmin.c:812
+#: ../svnadmin/svnadmin.c:827
#, c-format
msgid "done.\n"
msgstr "klart.\n"
-#: ../svnadmin/main.c:687
+#: ../svnadmin/svnadmin.c:793
+#, c-format
+msgid "* Verifying repository metadata ...\n"
+msgstr "* Kontrollerar arkivmetadata...\n"
+
+#: ../svnadmin/svnadmin.c:796
+#, c-format
+msgid "* Verifying metadata at revision %ld ...\n"
+msgstr "* Kontrollerar metadata i revision %ld...\n"
+
+#: ../svnadmin/svnadmin.c:806
#, c-format
msgid "Packing revisions in shard %s..."
-msgstr ""
+msgstr "Packar revision i skärva %s..."
-#: ../svnadmin/main.c:703
+#: ../svnadmin/svnadmin.c:821
#, c-format
msgid "Packing revprops in shard %s..."
-msgstr ""
+msgstr "Packar revisionsegenskaper i skärva %s..."
+
+#: ../svnadmin/svnadmin.c:898
+#, c-format
+msgid "<<< Skipped original revision %ld\n"
+msgstr "<<< Hoppade över ursprungliga revisionen %ld\n"
-#: ../svnadmin/main.c:792
+#: ../svnadmin/svnadmin.c:915
#, c-format
msgid ""
"Repository lock acquired.\n"
@@ -10730,16 +13725,19 @@ msgstr ""
"Arkivlåset har erhållits.\n"
"Vänta; det kan ta tid att återskapa arkivet...\n"
-#: ../svnadmin/main.c:799
-#, fuzzy, c-format
+#: ../svnadmin/svnadmin.c:922
msgid ""
"Repository lock acquired.\n"
"Please wait; upgrading the repository may take some time...\n"
msgstr ""
"Arkivlåset har erhållits.\n"
-"Vänta; det kan ta tid att återskapa arkivet...\n"
+"Vänta; det kan ta tid att uppgradera arkivet...\n"
-#: ../svnadmin/main.c:908
+#: ../svnadmin/svnadmin.c:1072
+msgid "No program provided"
+msgstr "Inget program angivet"
+
+#: ../svnadmin/svnadmin.c:1108
msgid ""
"general usage: svnadmin SUBCOMMAND REPOS_PATH [ARGS & OPTIONS ...]\n"
"Type 'svnadmin help <subcommand>' for help on a specific subcommand.\n"
@@ -10747,14 +13745,15 @@ msgid ""
"\n"
"Available subcommands:\n"
msgstr ""
-"allmän användning: svnadmin UNDERKOMMANDO ARKIV_SÖKVÄG [ARGUMENT & FLAGGOR...]\n"
+"allmän användning: svnadmin UNDERKOMMANDO ARKIVSÖKVÄG [ARGUMENT & FLAGGOR...]\n"
"Skriv \"svnadmin help <underkommando>\" för att få hjälp om ett specifikt\n"
"underkommando.\n"
"Skriv \"svnadmin --version\" för att se programversion och filsystemsmoduler.\n"
"\n"
"Tillgängliga underkommandon:\n"
-#: ../svnadmin/main.c:915 ../svnlook/main.c:1993 ../svnserve/main.c:266
+#: ../svnadmin/svnadmin.c:1115 ../svnlook/svnlook.c:2226
+#: ../svnserve/svnserve.c:337
msgid ""
"The following repository back-end (FS) modules are available:\n"
"\n"
@@ -10762,7 +13761,20 @@ msgstr ""
"Följande arkivåtkomstmoduler är tillgängliga:\n"
"\n"
-#: ../svnadmin/main.c:1013 ../svnadmin/main.c:1517
+#: ../svnadmin/svnadmin.c:1144
+#, c-format
+msgid "Invalid revision number (%ld) specified"
+msgstr "Ogiltigt revisionsnummer (%ld) angivet"
+
+#: ../svnadmin/svnadmin.c:1154
+msgid "Non-numeric revision specified"
+msgstr "Ickenumerisk revision angiven"
+
+#: ../svnadmin/svnadmin.c:1213
+msgid "Invalid property value found in dumpstream; consider repairing the source or using --bypass-prop-validation while loading."
+msgstr "Ogiltigt egenskapsvärde hittat i dumpströmmen; reparera källan eller använd --bypass-prop-validation vid inläsningen."
+
+#: ../svnadmin/svnadmin.c:1279 ../svnadmin/svnadmin.c:1911
msgid ""
"Failed to get exclusive repository access; perhaps another process\n"
"such as httpd, svnserve or svn has it open?"
@@ -10770,12 +13782,12 @@ msgstr ""
"Kunde inte erhålla enskild åtkomst till arkivet; kanske någon annan process,\n"
"såsom httpd, svnserve eller svn har det öppet?"
-#: ../svnadmin/main.c:1018 ../svnadmin/main.c:1522
+#: ../svnadmin/svnadmin.c:1284 ../svnadmin/svnadmin.c:1916
#, c-format
msgid "Waiting on repository lock; perhaps another process has it open?\n"
-msgstr "Väntar på arkivlås; kanske någon anna process har arkivet öppen?\n"
+msgstr "Väntar på arkivlås; kanske någon annan process har arkivet öppen?\n"
-#: ../svnadmin/main.c:1026
+#: ../svnadmin/svnadmin.c:1292
#, c-format
msgid ""
"\n"
@@ -10784,58 +13796,53 @@ msgstr ""
"\n"
"Ã…terskapande klart.\n"
-#: ../svnadmin/main.c:1033
+#: ../svnadmin/svnadmin.c:1299
#, c-format
msgid "The latest repos revision is %ld.\n"
msgstr "Den senaste revisionen i arkivet är %ld.\n"
-#: ../svnadmin/main.c:1142
+#: ../svnadmin/svnadmin.c:1414
#, c-format
msgid "Transaction '%s' removed.\n"
msgstr "Transaktionen \"%s\" borttagen.\n"
-#: ../svnadmin/main.c:1211 ../svnadmin/main.c:1261
+#: ../svnadmin/svnadmin.c:1476 ../svnadmin/svnadmin.c:1521
#, c-format
msgid "Missing revision"
msgstr "Revision saknas"
-#: ../svnadmin/main.c:1214 ../svnadmin/main.c:1264
+#: ../svnadmin/svnadmin.c:1479 ../svnadmin/svnadmin.c:1524
#, c-format
msgid "Only one revision allowed"
msgstr "Endast en revision tillåts"
-#: ../svnadmin/main.c:1220
-#, c-format
-msgid "Exactly one property name and one file argument required"
-msgstr "Det krävs exakt ett revisionsnamn och ett filargument"
-
-#: ../svnadmin/main.c:1270
+#: ../svnadmin/svnadmin.c:1578
#, c-format
-msgid "Exactly one file argument required"
-msgstr "Det krävs exakt ett filargument"
+msgid "--revision (-r) and --transaction (-t) are mutually exclusive"
+msgstr "--revision (-r) och --transaction (-t) kan inte användas samtidigt"
-#: ../svnadmin/main.c:1395 ../svnlook/main.c:2058
+#: ../svnadmin/svnadmin.c:1745 ../svnlook/svnlook.c:2289
#, c-format
msgid "UUID Token: %s\n"
msgstr "UUID-identifierare: %s\n"
-#: ../svnadmin/main.c:1396 ../svnlook/main.c:2059
+#: ../svnadmin/svnadmin.c:1746 ../svnlook/svnlook.c:2290
#, c-format
msgid "Owner: %s\n"
msgstr "Ägare: %s\n"
-#: ../svnadmin/main.c:1397 ../svnlook/main.c:2060
+#: ../svnadmin/svnadmin.c:1747 ../svnlook/svnlook.c:2291
#, c-format
msgid "Created: %s\n"
msgstr "Skapat: %s\n"
-#: ../svnadmin/main.c:1398 ../svnlook/main.c:2061
+#: ../svnadmin/svnadmin.c:1748 ../svnlook/svnlook.c:2292
#, c-format
msgid "Expires: %s\n"
msgstr "GÃ¥r ut: %s\n"
-#: ../svnadmin/main.c:1400
-#, fuzzy, c-format
+#: ../svnadmin/svnadmin.c:1750
+#, c-format
msgid ""
"Comment (%i line):\n"
"%s\n"
@@ -10849,139 +13856,181 @@ msgstr[0] ""
"%s\n"
"\n"
msgstr[1] ""
-"Kommentar (%i rad):\n"
+"Kommentar (%i rader):\n"
"%s\n"
"\n"
-#: ../svnadmin/main.c:1446
-#, fuzzy
+#: ../svnadmin/svnadmin.c:1796
msgid "No paths to unlock provided"
-msgstr "Ingen låsidentifierare tillhandahölls"
+msgstr "Ingen sökväg till upplåsning tillhandahölls"
-#: ../svnadmin/main.c:1464
+#: ../svnadmin/svnadmin.c:1814
#, c-format
msgid "Path '%s' isn't locked.\n"
msgstr "Sökvägen \"%s\" är inte låst.\n"
-#: ../svnadmin/main.c:1476
+#: ../svnadmin/svnadmin.c:1826
#, c-format
msgid "Removed lock on '%s'.\n"
msgstr "Tog bort lås på \"%s\".\n"
-#: ../svnadmin/main.c:1532
+#: ../svnadmin/svnadmin.c:1879
+#, c-format
+msgid "'%s' unlocked by user '%s'.\n"
+msgstr "\"%s\" låstes upp av användaren \"%s\".\n"
+
+#: ../svnadmin/svnadmin.c:1926
msgid "Upgrade of this repository's underlying versioned filesystem is not supported; consider dumping and loading the data elsewhere"
-msgstr ""
+msgstr "Uppgradering av det versionshanterade filsystemet som används av detta arkiv stöds ej; skriv ut och återställ informationen någon annanstans"
-#: ../svnadmin/main.c:1539
+#: ../svnadmin/svnadmin.c:1933
msgid "Upgrade of this repository is not supported; consider dumping and loading the data elsewhere"
-msgstr ""
+msgstr "Uppgradering av detta arkiv stöds ej; skriv ut och återställ informationen någon annanstans"
-#: ../svnadmin/main.c:1545
-#, fuzzy, c-format
+#: ../svnadmin/svnadmin.c:1939
+#, c-format
msgid ""
"\n"
"Upgrade completed.\n"
-msgstr "Uppdatering klar.\n"
+msgstr ""
+"\n"
+"Uppdatering klar.\n"
-#: ../svnadmin/main.c:1638
+#: ../svnadmin/svnadmin.c:2024 ../svnrdump/svnrdump.c:923
msgid "Multiple revision arguments encountered; try '-r N:M' instead of '-r N -r M'"
msgstr "Flera revisionsargument påträffades; försök med \"-r M:N\" istället för \"-r M -r N\""
-#: ../svnadmin/main.c:1770
+#: ../svnadmin/svnadmin.c:2102
+#, c-format
+msgid "Cannot create pre-1.0-compatible repositories"
+msgstr "Kan inte skapa arkiv kompatibelt med versioner äldre än 1.0"
+
+#: ../svnadmin/svnadmin.c:2115
+#, c-format
+msgid "Cannot guarantee compatibility beyond the current running version (%s)"
+msgstr "Kan inte garantera kompatibilitet bortom versionen som nu körs (%s)"
+
+#: ../svnadmin/svnadmin.c:2204
#, c-format
msgid "subcommand argument required\n"
msgstr "argument för underkommando krävs\n"
-#: ../svnadmin/main.c:1843
-#, fuzzy, c-format
+#: ../svnadmin/svnadmin.c:2239
+msgid "Repository argument required"
+msgstr "Argument för arkiv krävs"
+
+#: ../svnadmin/svnadmin.c:2252
+#, c-format
+msgid "'%s' is a URL when it should be a local path"
+msgstr "\"%s\" är en URL när den skulle vara en lokal sökväg"
+
+#: ../svnadmin/svnadmin.c:2283
+#, c-format
msgid ""
"Subcommand '%s' doesn't accept option '%s'\n"
"Type 'svnadmin help %s' for usage.\n"
msgstr ""
-"underkommandot \"%s\" tillåter inte flaggan \"%s\"\n"
+"Underkommandot \"%s\" tillåter inte flaggan \"%s\"\n"
"Skriv \"svnadmin help %s\" för användning.\n"
-#: ../svnadmin/main.c:1876
-#, fuzzy
+#: ../svnadmin/svnadmin.c:2326
msgid "Try 'svnadmin help' for more info"
-msgstr "Skriv \"svnversion --help\" för användning.\n"
+msgstr "Skriv \"svnadmin help\" för mer information"
+
+#: ../svndumpfilter/svndumpfilter.c:79
+#, c-format
+msgid "Can't open stdio file"
+msgstr "Kan inte öppna stdio-fil"
-#: ../svndumpfilter/main.c:345
+#: ../svndumpfilter/svndumpfilter.c:406
msgid "This is an empty revision for padding."
msgstr "Detta är en tom revision för att fylla ut."
-#: ../svndumpfilter/main.c:421
+#: ../svndumpfilter/svndumpfilter.c:489
#, c-format
msgid "Revision %ld committed as %ld.\n"
msgstr "Revision %ld arkiverad som %ld.\n"
-#: ../svndumpfilter/main.c:444
+#: ../svndumpfilter/svndumpfilter.c:512
#, c-format
msgid "Revision %ld skipped.\n"
msgstr "Revision %ld hoppades över.\n"
-#: ../svndumpfilter/main.c:542
+#: ../svndumpfilter/svndumpfilter.c:606
#, c-format
msgid "Invalid copy source path '%s'"
msgstr "Ogiltig sökväg som källa för kopiering \"%s\""
-#: ../svndumpfilter/main.c:588
+#: ../svndumpfilter/svndumpfilter.c:663
#, c-format
msgid "No valid copyfrom revision in filtered stream"
msgstr "Ingen giltig ursprungsrevision för kopiering i den filtrerade strömmen"
-#: ../svndumpfilter/main.c:713
+#: ../svndumpfilter/svndumpfilter.c:788
#, c-format
msgid "Missing merge source path '%s'; try with --skip-missing-merge-sources"
-msgstr ""
+msgstr "Källsökvägen \"%s\" för sammanslagning saknas; försök med --skip-missing-merge-sources"
-#: ../svndumpfilter/main.c:735
-#, fuzzy, c-format
+#: ../svndumpfilter/svndumpfilter.c:810
+#, c-format
msgid "No valid revision range 'start' in filtered stream"
-msgstr "Ingen giltig ursprungsrevision för kopiering i den filtrerade strömmen"
+msgstr "Början av revisionsområdet finns inte i den filtrerade strömmen"
-#: ../svndumpfilter/main.c:742
-#, fuzzy, c-format
+#: ../svndumpfilter/svndumpfilter.c:817
+#, c-format
msgid "No valid revision range 'end' in filtered stream"
-msgstr "Ingen giltig ursprungsrevision för kopiering i den filtrerade strömmen"
+msgstr "Slutet av revisionsområdet finns inte i den filtrerade strömmen"
-#: ../svndumpfilter/main.c:788
-msgid "Delta property block detected - not supported by svndumpfilter"
-msgstr "Egenskapsblock som delta påträffades - stöds ej av svndumpfilter"
+#: ../svndumpfilter/svndumpfilter.c:863 ../svndumpfilter/svndumpfilter.c:894
+#, c-format
+msgid "Delta property block detected, but deltas are not enabled for node '%s' in original revision %ld"
+msgstr "Deltaegenskapsblock upptäcktes, men deltan är inte påslagna för noden \"%s\" i originalrevisionen %ld"
-#: ../svndumpfilter/main.c:924
+#: ../svndumpfilter/svndumpfilter.c:1027
msgid "Do not display filtering statistics."
msgstr "Visa inte filtreringsstatistik."
-#: ../svndumpfilter/main.c:926
+#: ../svndumpfilter/svndumpfilter.c:1029
msgid "Treat the path prefixes as file glob patterns."
-msgstr ""
+msgstr "Behandla sökvägsprefix som skalmönster."
-#: ../svndumpfilter/main.c:928
+#: ../svndumpfilter/svndumpfilter.c:1031
msgid "Remove revisions emptied by filtering."
-msgstr "Ta bort revisioner som har blivit tomma på grund av filtrering."
+msgstr ""
+"Ta bort revisioner som har blivit tomma på grund\n"
+" av filtrering."
+
+#: ../svndumpfilter/svndumpfilter.c:1033
+msgid ""
+"Remove all empty revisions found in dumpstream\n"
+" except revision 0."
+msgstr ""
+"Ta bort alla tomma revisioner funna i dumpströmmen\n"
+" utom revision 0."
-#: ../svndumpfilter/main.c:930
+#: ../svndumpfilter/svndumpfilter.c:1036
msgid "Renumber revisions left after filtering."
-msgstr "Numrera om de revisioner som finns kvar efter filtrering."
+msgstr ""
+"Numrera om de revisioner som finns kvar efter\n"
+" filtrering."
-#: ../svndumpfilter/main.c:933
-#, fuzzy
+#: ../svndumpfilter/svndumpfilter.c:1039
msgid "Skip missing merge sources."
-msgstr "Hoppade över saknat mål: \"%s\"\n"
+msgstr "Hoppa över sammanslagningskällor som saknas."
-#: ../svndumpfilter/main.c:935
+#: ../svndumpfilter/svndumpfilter.c:1041
msgid "Don't filter revision properties."
msgstr "Filtrera inte revisionsegenskaper."
-#: ../svndumpfilter/main.c:937
-#, fuzzy
-msgid "Pass contents of file ARG as additional args"
+#: ../svndumpfilter/svndumpfilter.c:1043
+msgid ""
+"Read additional prefixes, one per line, from\n"
+" file ARG."
msgstr ""
-"använd innehållet i filen ARG som ytterligare\n"
-" argument"
+"Läs ytterligare prefix, ett per rad, från\n"
+" filen ARG."
-#: ../svndumpfilter/main.c:948
+#: ../svndumpfilter/svndumpfilter.c:1055
msgid ""
"Filter out nodes with given prefixes from dumpstream.\n"
"usage: svndumpfilter exclude PATH_PREFIX...\n"
@@ -10989,7 +14038,7 @@ msgstr ""
"Filtrera bort noder med angivna prefix från dumpströmmen.\n"
"användning: svndumpfilter exclude SÖKVÄGS_PREFIX...\n"
-#: ../svndumpfilter/main.c:956
+#: ../svndumpfilter/svndumpfilter.c:1064
msgid ""
"Filter out nodes without given prefixes from dumpstream.\n"
"usage: svndumpfilter include PATH_PREFIX...\n"
@@ -10997,15 +14046,15 @@ msgstr ""
"Filtrera bort noder utan angivna prefix från dumpströmmen.\n"
"användning: svndumpfilter include SÖKVÄGS_PREFIX...\n"
-#: ../svndumpfilter/main.c:964
+#: ../svndumpfilter/svndumpfilter.c:1073
msgid ""
"Describe the usage of this program or its subcommands.\n"
"usage: svndumpfilter help [SUBCOMMAND...]\n"
msgstr ""
"Visa hur detta program eller dess underkommandon används.\n"
-"användning: svndumpfilter help [SUBCOMMAND...]\n"
+"användning: svndumpfilter help [UNDERKOMMANDO...]\n"
-#: ../svndumpfilter/main.c:1047
+#: ../svndumpfilter/svndumpfilter.c:1149
msgid ""
"general usage: svndumpfilter SUBCOMMAND [ARGS & OPTIONS ...]\n"
"Type 'svndumpfilter help <subcommand>' for help on a specific subcommand.\n"
@@ -11020,48 +14069,48 @@ msgstr ""
"\n"
"Tillgängliga underkommandon:\n"
-#: ../svndumpfilter/main.c:1103
+#: ../svndumpfilter/svndumpfilter.c:1207
#, c-format
-msgid "Excluding (and dropping empty revisions for) prefixes:\n"
-msgstr "Utesluter (och tar bort tomma revisioner för) prefix:\n"
+msgid "Excluding (and dropping empty revisions for) prefix patterns:\n"
+msgstr "Utesluter (och tar bort tomma revisioner för) prefixmönster:\n"
-#: ../svndumpfilter/main.c:1105
+#: ../svndumpfilter/svndumpfilter.c:1209
#, c-format
-msgid "Excluding prefixes:\n"
-msgstr "Utesluter prefix:\n"
+msgid "Excluding prefix patterns:\n"
+msgstr "Utesluter prefixmönster:\n"
-#: ../svndumpfilter/main.c:1107
+#: ../svndumpfilter/svndumpfilter.c:1212
#, c-format
-msgid "Including (and dropping empty revisions for) prefixes:\n"
-msgstr "Tar med (och tar bort tomma revisioner för) prefix:\n"
+msgid "Including (and dropping empty revisions for) prefix patterns:\n"
+msgstr "Tar med (och tar bort tomma revisioner för) prefixmönster:\n"
-#: ../svndumpfilter/main.c:1109
+#: ../svndumpfilter/svndumpfilter.c:1214
#, c-format
-msgid "Including prefixes:\n"
-msgstr "Tar med prefix:\n"
+msgid "Including prefix patterns:\n"
+msgstr "Tar med prefixmönster:\n"
-#: ../svndumpfilter/main.c:1116
-#, fuzzy, c-format
-msgid "Excluding (and dropping empty revisions for) prefix patterns:\n"
+#: ../svndumpfilter/svndumpfilter.c:1222
+#, c-format
+msgid "Excluding (and dropping empty revisions for) prefixes:\n"
msgstr "Utesluter (och tar bort tomma revisioner för) prefix:\n"
-#: ../svndumpfilter/main.c:1118
-#, fuzzy, c-format
-msgid "Excluding prefix patterns:\n"
+#: ../svndumpfilter/svndumpfilter.c:1224
+#, c-format
+msgid "Excluding prefixes:\n"
msgstr "Utesluter prefix:\n"
-#: ../svndumpfilter/main.c:1120
-#, fuzzy, c-format
-msgid "Including (and dropping empty revisions for) prefix patterns:\n"
+#: ../svndumpfilter/svndumpfilter.c:1227
+#, c-format
+msgid "Including (and dropping empty revisions for) prefixes:\n"
msgstr "Tar med (och tar bort tomma revisioner för) prefix:\n"
-#: ../svndumpfilter/main.c:1122
-#, fuzzy, c-format
-msgid "Including prefix patterns:\n"
+#: ../svndumpfilter/svndumpfilter.c:1229
+#, c-format
+msgid "Including prefixes:\n"
msgstr "Tar med prefix:\n"
-#: ../svndumpfilter/main.c:1150
-#, fuzzy, c-format
+#: ../svndumpfilter/svndumpfilter.c:1257
+#, c-format
msgid ""
"Dropped %d revision.\n"
"\n"
@@ -11069,29 +14118,33 @@ msgid_plural ""
"Dropped %d revisions.\n"
"\n"
msgstr[0] ""
-"Hoppade över %d revision(er).\n"
+"Hoppade över %d revision.\n"
"\n"
msgstr[1] ""
-"Hoppade över %d revision(er).\n"
+"Hoppade över %d revisioner.\n"
"\n"
-#: ../svndumpfilter/main.c:1158
+#: ../svndumpfilter/svndumpfilter.c:1265
msgid "Revisions renumbered as follows:\n"
msgstr "Revisionerna har numrerats om enligt följande:\n"
-#: ../svndumpfilter/main.c:1186
+#: ../svndumpfilter/svndumpfilter.c:1293
#, c-format
msgid " %ld => (dropped)\n"
msgstr " %ld => (borttagen)\n"
-#: ../svndumpfilter/main.c:1201
-#, fuzzy, c-format
+#: ../svndumpfilter/svndumpfilter.c:1308
+#, c-format
msgid "Dropped %d node:\n"
msgid_plural "Dropped %d nodes:\n"
-msgstr[0] "Tog bort %d nod(er):\n"
-msgstr[1] "Tog bort %d nod(er):\n"
+msgstr[0] "Tog bort %d noder:\n"
+msgstr[1] "Tog bort %d noder:\n"
+
+#: ../svndumpfilter/svndumpfilter.c:1477
+msgid "--drop-empty-revs cannot be used with --drop-all-empty-revs"
+msgstr "--drop-empty-revs kan inte användas tillsammans med --drop-all-empty-revs"
-#: ../svndumpfilter/main.c:1470
+#: ../svndumpfilter/svndumpfilter.c:1597
#, c-format
msgid ""
"\n"
@@ -11100,7 +14153,7 @@ msgstr ""
"\n"
"Fel: inga prefix angivna.\n"
-#: ../svndumpfilter/main.c:1501
+#: ../svndumpfilter/svndumpfilter.c:1628
#, c-format
msgid ""
"Subcommand '%s' doesn't accept option '%s'\n"
@@ -11109,163 +14162,151 @@ msgstr ""
"Underkommandot \"%s\" tillåter inte flaggan \"%s\"\n"
"Skriv \"svndumpfilter help %s\" för användning.\n"
-#: ../svndumpfilter/main.c:1519
+#: ../svndumpfilter/svndumpfilter.c:1646
msgid "Try 'svndumpfilter help' for more info"
-msgstr ""
+msgstr "Skriv \"svndumpfilter help\" för med information"
-#: ../svnlook/main.c:106
+#: ../svnlook/svnlook.c:117
msgid "show details for copies"
msgstr "visa detaljer för kopior"
-#: ../svnlook/main.c:109
+#: ../svnlook/svnlook.c:120
msgid "print differences against the copy source"
msgstr "visa skillnad gentemot kopians ursprung"
-#: ../svnlook/main.c:112
+#: ../svnlook/svnlook.c:123
msgid "show full paths instead of indenting them"
msgstr "visa fullständiga sökvägar istället för indrag"
-#: ../svnlook/main.c:118
-#, fuzzy
+#: ../svnlook/svnlook.c:129
msgid "maximum number of history entries"
-msgstr "maximalt antal loggposter"
-
-#: ../svnlook/main.c:121
-msgid "do not print differences for added files"
-msgstr "visa inte skillnader för tillagda filer"
+msgstr "maximalt antal historikposter"
-#: ../svnlook/main.c:127
+#: ../svnlook/svnlook.c:147
msgid "operate on single directory only"
msgstr "arbeta endast med en katalog"
-#: ../svnlook/main.c:130
+#: ../svnlook/svnlook.c:150
msgid "specify revision number ARG"
msgstr "ange revisionsnummer ARG"
-#: ../svnlook/main.c:133
+#: ../svnlook/svnlook.c:153
msgid "operate on a revision property (use with -r or -t)"
-msgstr "arbeta med en revisionsegenskap (används med -r eller -t)"
+msgstr ""
+"arbeta med en revisionsegenskap (används med\n"
+" -r eller -t)"
-#: ../svnlook/main.c:136
+#: ../svnlook/svnlook.c:156
msgid "show node revision ids for each path"
msgstr "visa nodrevisions-ID:n för varje sökväg"
-#: ../svnlook/main.c:139
-msgid "specify transaction name ARG"
-msgstr "ange transaktionsnamn ARG"
+#: ../svnlook/svnlook.c:159
+msgid "show path's inherited properties"
+msgstr "visa sökvägens ärvda egenskaper"
-#: ../svnlook/main.c:142
+#: ../svnlook/svnlook.c:165
msgid "be verbose"
msgstr "var utförlig"
-#: ../svnlook/main.c:151
-msgid ""
-"Default: '-u'. When Subversion is invoking an\n"
-" external diff program, ARG is simply passed along\n"
-" to the program. But when Subversion is using its\n"
-" default internal diff implementation, or when\n"
-" Subversion is displaying blame annotations, ARG\n"
-" could be any of the following:\n"
-" -u (--unified):\n"
-" Output 3 lines of unified context.\n"
-" -b (--ignore-space-change):\n"
-" Ignore changes in the amount of white space.\n"
-" -w (--ignore-all-space):\n"
-" Ignore all white space.\n"
-" --ignore-eol-style:\n"
-" Ignore changes in EOL style"
-msgstr ""
-"Ingångsvärde: \"-u\". När Subversion kör ett\n"
-" externt diff-program, skickas ARG till programmet.\n"
-" Men när Subversion använder den inbygda diff-\n"
-" implementationen, eller visar radvis revisions-\n"
-" information (blame), kan ARG vara något av\n"
-" följande:\n"
-" -u (--unified):\n"
-" Visa tre rader av sammanhang\n"
-" -b (--ignore-space-change):\n"
-" Bortse från ändringar av mängden tomrum\n"
-" -w (--ignore-all-space):\n"
-" Bortse från allt tomrum\n"
-" --ignore-eol-style\n"
-" Bortse från ändringar av radbrytningstecken"
-
-#: ../svnlook/main.c:189
+#: ../svnlook/svnlook.c:174
+msgid ""
+"Specify differencing options for external diff or\n"
+" internal diff. Default: '-u'. Options are\n"
+" separated by spaces. Internal diff takes:\n"
+" -u, --unified: Show 3 lines of unified context\n"
+" -b, --ignore-space-change: Ignore changes in\n"
+" amount of white space\n"
+" -w, --ignore-all-space: Ignore all white space\n"
+" --ignore-eol-style: Ignore changes in EOL style\n"
+" -p, --show-c-function: Show C function name"
+msgstr ""
+"Ange flaggor för externt eller inbyggt diff-\n"
+" program. Standardvärde: \"-u\". Flaggor\n"
+" separeras av mellanslag. Det inbyggda diff-\n"
+" programmet tillåter följande väljare:\n"
+" -u, --unified: Visa tre rader sammanhang\n"
+" -b, --ignore-space-change: Bortse från\n"
+" ändringar av mängden tomrum\n"
+" -w, --ignore-all-space: Bortse från allt tomrum\n"
+" --ignore-eol-style: Bortse från ändringar av\n"
+" radbrytningstecken\n"
+" -p, --show-c-function: Visa funktionsnamn i C"
+
+#: ../svnlook/svnlook.c:205
msgid ""
"usage: svnlook author REPOS_PATH\n"
"\n"
"Print the author.\n"
msgstr ""
-"användning: svnlook author ARKIV_SÖKVÄG\n"
+"användning: svnlook author ARKIVSÖKVÄG\n"
"\n"
"Visa författaren.\n"
-#: ../svnlook/main.c:194
+#: ../svnlook/svnlook.c:210
msgid ""
"usage: svnlook cat REPOS_PATH FILE_PATH\n"
"\n"
"Print the contents of a file. Leading '/' on FILE_PATH is optional.\n"
msgstr ""
-"användning: svnlook cat ARKIV_SÖKVÄG FIL_SÖKVÄG\n"
+"användning: svnlook cat ARKIVSÖKVÄG FIL_SÖKVÄG\n"
"\n"
"Visa innehållet i en fil. Inledande \"/\" är valfritt för FIL_SÖKVÄG.\n"
-#: ../svnlook/main.c:199
+#: ../svnlook/svnlook.c:215
msgid ""
"usage: svnlook changed REPOS_PATH\n"
"\n"
"Print the paths that were changed.\n"
msgstr ""
-"användning: svnlook changed ARKIV_SÖKVÄG\n"
+"användning: svnlook changed ARKIVSÖKVÄG\n"
"\n"
"Visa vilka sökvägar som har ändrats.\n"
-#: ../svnlook/main.c:204
+#: ../svnlook/svnlook.c:220
msgid ""
"usage: svnlook date REPOS_PATH\n"
"\n"
"Print the datestamp.\n"
msgstr ""
-"användning: svnlook date ARKIV_SÖKVÄG\n"
+"användning: svnlook date ARKIVSÖKVÄG\n"
"\n"
"Visa datumstämpel.\n"
-#: ../svnlook/main.c:209
+#: ../svnlook/svnlook.c:225
msgid ""
"usage: svnlook diff REPOS_PATH\n"
"\n"
"Print GNU-style diffs of changed files and properties.\n"
msgstr ""
-"användning: svnlook diff ARKIV_SÖKVÄG\n"
+"användning: svnlook diff ARKIVSÖKVÄG\n"
"\n"
"Visa diffar i GNU-stil för ändrade filer och egenskaper.\n"
-#: ../svnlook/main.c:215
+#: ../svnlook/svnlook.c:232
msgid ""
"usage: svnlook dirs-changed REPOS_PATH\n"
"\n"
"Print the directories that were themselves changed (property edits)\n"
"or whose file children were changed.\n"
msgstr ""
-"användning: svnlook dirs-changed ARKIV_SÖKVÄG\n"
+"användning: svnlook dirs-changed ARKIVSÖKVÄG\n"
"\n"
"Visa kataloger som själva har ändrats (egenskapsändringar) eller vars\n"
"barnfiler har ändrats.\n"
-#: ../svnlook/main.c:221
-#, fuzzy
+#: ../svnlook/svnlook.c:238
msgid ""
"usage: svnlook filesize REPOS_PATH PATH_IN_REPOS\n"
"\n"
"Print the size (in bytes) of the file located at PATH_IN_REPOS as\n"
"it is represented in the repository.\n"
msgstr ""
-"användning: svnlook tree ARKIV_SÖKVÄG [SÖKVÄG_I_ARKIV]\n"
+"användning: svnlook filesize ARKIVSÖKVÄG SÖKVÄG_I_ARKIV\n"
"\n"
-"Visa trädet, med början i SÖKVÄG_I_ARKIV (om den anges, annars används trädets\n"
-"rot). Visa även nodrevisions-ID:n om så önskas.\n"
+"Visa storleken (i byte) av filen i SÖKVÄG_I_ARKIV sådan den representeras\n"
+"i arkivet.\n"
-#: ../svnlook/main.c:227
+#: ../svnlook/svnlook.c:244
msgid ""
"usage: svnlook help [SUBCOMMAND...]\n"
"\n"
@@ -11275,51 +14316,50 @@ msgstr ""
"\n"
"Beskriv användningen av detta program eller dess underkommandon.\n"
-#: ../svnlook/main.c:232
+#: ../svnlook/svnlook.c:249
msgid ""
"usage: svnlook history REPOS_PATH [PATH_IN_REPOS]\n"
"\n"
"Print information about the history of a path in the repository (or\n"
"the root directory if no path is supplied).\n"
msgstr ""
-"användning: svnlook history ARKIV_SÖKVÄG [SÖKVÄG_I_ARKIV]\n"
+"användning: svnlook history ARKIVSÖKVÄG [SÖKVÄG_I_ARKIV]\n"
"\n"
"Visa information om historiken för en sökväg i arkivet (eller rotkatalogen\n"
"om ingen sökväg anges).\n"
-#: ../svnlook/main.c:238
+#: ../svnlook/svnlook.c:255
msgid ""
"usage: svnlook info REPOS_PATH\n"
"\n"
"Print the author, datestamp, log message size, and log message.\n"
msgstr ""
-"användning: svnlook info ARKIV_SÖKVÄG\n"
+"användning: svnlook info ARKIVSÖKVÄG\n"
"\n"
"Visa författaren, datumstämpeln, loggmeddelandets storlek samt\n"
"själva loggmeddelandet.\n"
-#: ../svnlook/main.c:243
+#: ../svnlook/svnlook.c:260
msgid ""
"usage: svnlook lock REPOS_PATH PATH_IN_REPOS\n"
"\n"
"If a lock exists on a path in the repository, describe it.\n"
msgstr ""
-"användning: svnlook lock ARKIV_SÖKVÄG SÖKVÄG_I_ARKIV\n"
+"användning: svnlook lock ARKIVSÖKVÄG SÖKVÄG_I_ARKIV\n"
"\n"
"Om ett lås finns på en sökväg i arkivet, visa information om det.\n"
-#: ../svnlook/main.c:248
+#: ../svnlook/svnlook.c:265
msgid ""
"usage: svnlook log REPOS_PATH\n"
"\n"
"Print the log message.\n"
msgstr ""
-"användning: svnlook log ARKIV_SÖKVÄG\n"
+"användning: svnlook log ARKIVSÖKVÄG\n"
"\n"
"Visa loggmeddelandet.\n"
-#: ../svnlook/main.c:253
-#, fuzzy
+#: ../svnlook/svnlook.c:270
msgid ""
"usage: 1. svnlook propget REPOS_PATH PROPNAME PATH_IN_REPOS\n"
" 2. svnlook propget --revprop REPOS_PATH PROPNAME\n"
@@ -11327,14 +14367,14 @@ msgid ""
"Print the raw value of a property on a path in the repository.\n"
"With --revprop, print the raw value of a revision property.\n"
msgstr ""
-"användning: svnlook propget ARKIV_SÖKVÄG EGENSKAPSNAMN\n"
-" [SÖKVÄG_I_ARKIV]\n"
+"användning: 1. svnlook propget ARKIVSÖKVÄG EGENSKAPSNAMN\n"
+" 2. svnlook propget --revprop ARKIVSÖKVÄG\n"
+" EGENSKAPSNAMN\n"
"\n"
"Skriv ut det råa värdet för en egenskap på en sökväg i arkivet.\n"
"Om --revprop används, skriv ut det råa värdet på en revisionsegenskap.\n"
-#: ../svnlook/main.c:262
-#, fuzzy
+#: ../svnlook/svnlook.c:279
msgid ""
"usage: 1. svnlook proplist REPOS_PATH PATH_IN_REPOS\n"
" 2. svnlook proplist --revprop REPOS_PATH\n"
@@ -11343,91 +14383,97 @@ msgid ""
"with the --revprop option, revision properties.\n"
"With -v, show the property values too.\n"
msgstr ""
-"användning: svnlook proplist ARKIV_SÖKVÄG [SÖKVÄG_I_ARKIV]\n"
+"användning: 1. svnlook proplist ARKIVSÖKVÄG SÖKVÄG_I_ARKIV\n"
+" 2. svnlook proplist --revprop ARKIVSÖKVÄG\n"
"\n"
"Lista egenskaperna för en sökväg i arkivet eller, om --revprop anges,\n"
"visa revisionsegenskaper. -v visar även egenskapernas värden.\n"
-#: ../svnlook/main.c:272
+#: ../svnlook/svnlook.c:290
msgid ""
"usage: svnlook tree REPOS_PATH [PATH_IN_REPOS]\n"
"\n"
"Print the tree, starting at PATH_IN_REPOS (if supplied, at the root\n"
"of the tree otherwise), optionally showing node revision ids.\n"
msgstr ""
-"användning: svnlook tree ARKIV_SÖKVÄG [SÖKVÄG_I_ARKIV]\n"
+"användning: svnlook tree ARKIVSÖKVÄG [SÖKVÄG_I_ARKIV]\n"
"\n"
"Visa trädet, med början i SÖKVÄG_I_ARKIV (om den anges, annars används trädets\n"
"rot). Visa även nodrevisions-ID:n om så önskas.\n"
-#: ../svnlook/main.c:278
+#: ../svnlook/svnlook.c:296
msgid ""
"usage: svnlook uuid REPOS_PATH\n"
"\n"
"Print the repository's UUID.\n"
msgstr ""
-"användning: svnlook uuid ARKIV_SÖKVÄG\n"
+"användning: svnlook uuid ARKIVSÖKVÄG\n"
"\n"
"Visa arkivets UUID.\n"
-#: ../svnlook/main.c:283
+#: ../svnlook/svnlook.c:301
msgid ""
"usage: svnlook youngest REPOS_PATH\n"
"\n"
"Print the youngest revision number.\n"
msgstr ""
-"användning: svnlook youngest ARKIV_SÖKVÄG\n"
+"användning: svnlook youngest ARKIVSÖKVÄG\n"
"\n"
"Visa det yngsta revisionsnumret.\n"
-#: ../svnlook/main.c:934
+#: ../svnlook/svnlook.c:861
#, c-format
msgid "Copied: %s (from rev %ld, %s)\n"
msgstr "Kopierad: %s (från revision %ld, %s)\n"
-#: ../svnlook/main.c:1002
+#: ../svnlook/svnlook.c:929
msgid "Added"
msgstr "Tillagd"
-#: ../svnlook/main.c:1003
+#: ../svnlook/svnlook.c:930
msgid "Deleted"
msgstr "Raderad"
-#: ../svnlook/main.c:1004
+#: ../svnlook/svnlook.c:931
msgid "Modified"
msgstr "Ändrad"
-#: ../svnlook/main.c:1005
+#: ../svnlook/svnlook.c:932
msgid "Index"
msgstr "Index"
-#: ../svnlook/main.c:1017
-#, fuzzy
+#: ../svnlook/svnlook.c:943
msgid ""
"(Binary files differ)\n"
"\n"
-msgstr "(Binära filer skiljer sig åt)\n"
+msgstr ""
+"(Binära filer skiljer sig åt)\n"
+"\n"
-#: ../svnlook/main.c:1227
+#: ../svnlook/svnlook.c:1222
msgid "unknown"
msgstr "okänd"
-#: ../svnlook/main.c:1374 ../svnlook/main.c:1480 ../svnlook/main.c:1509
+#: ../svnlook/svnlook.c:1279
#, c-format
msgid "Transaction '%s' is not based on a revision; how odd"
msgstr "Transaktionen \"%s\" är inte baserad på en revision; skumt"
-#: ../svnlook/main.c:1404
+#: ../svnlook/svnlook.c:1422
#, c-format
msgid "'%s' is a URL, probably should be a path"
msgstr "\"%s\" är en URL; ska troligen vara en sökväg"
-#: ../svnlook/main.c:1427 ../svnlook/main.c:1450
+#: ../svnlook/svnlook.c:1445 ../svnlook/svnlook.c:1468
#, c-format
msgid "Path '%s' is not a file"
msgstr "Sökvägen \"%s\" är inte en fil"
-#: ../svnlook/main.c:1593
+#: ../svnlook/svnlook.c:1604
+msgid "History item limit reached"
+msgstr "Gräns nådd för element i historiken"
+
+#: ../svnlook/svnlook.c:1623
#, c-format
msgid ""
"REVISION PATH <ID>\n"
@@ -11436,7 +14482,7 @@ msgstr ""
"REVISION SÖKVÄG <ID>\n"
"-------- -----------\n"
-#: ../svnlook/main.c:1598
+#: ../svnlook/svnlook.c:1628
#, c-format
msgid ""
"REVISION PATH\n"
@@ -11445,27 +14491,36 @@ msgstr ""
"REVISION SÖKVÄG\n"
"-------- ------\n"
-#: ../svnlook/main.c:1647
+#: ../svnlook/svnlook.c:1700
#, c-format
msgid "Property '%s' not found on revision %ld"
msgstr "Egenskapen \"%s\" finns inte för revision %ld"
-#: ../svnlook/main.c:1654
+#: ../svnlook/svnlook.c:1709
+#, c-format
+msgid "Property '%s' not found on path '%s' or inherited from a parent in revision %ld"
+msgstr "Egenskapen \"%s\" finns inte på sökvägen \"%s\" eller ärvd från en förälder i revision %ld"
+
+#: ../svnlook/svnlook.c:1715
#, c-format
msgid "Property '%s' not found on path '%s' in revision %ld"
msgstr "Egenskapen \"%s\" finns inte på sökvägen \"%s\" i revision %ld"
-#: ../svnlook/main.c:1659
-#, fuzzy, c-format
-msgid "Property '%s' not found on path '%s' in transaction %s"
-msgstr "Egenskapen \"%s\" finns inte på sökvägen \"%s\" i revision %ld"
+#: ../svnlook/svnlook.c:1723
+#, c-format
+msgid "Property '%s' not found on path '%s' or inherited from a parent in transaction %s"
+msgstr "Egenskapen \"%s\" finns inte på sökvägen \"%s\" eller ärvd från en förälder i transaktion %s"
-#: ../svnlook/main.c:1905 ../svnlook/main.c:1970 ../svnlook/main.c:2137
+#: ../svnlook/svnlook.c:1729
#, c-format
+msgid "Property '%s' not found on path '%s' in transaction %s"
+msgstr "Egenskapen \"%s\" finns inte på sökvägen \"%s\" i transaktion %s"
+
+#: ../svnlook/svnlook.c:2064
msgid "Missing repository path argument"
msgstr "Arkivargument saknas"
-#: ../svnlook/main.c:1983
+#: ../svnlook/svnlook.c:2216
msgid ""
"general usage: svnlook SUBCOMMAND REPOS_PATH [ARGS & OPTIONS ...]\n"
"Note: any subcommand which takes the '--revision' and '--transaction'\n"
@@ -11476,8 +14531,8 @@ msgid ""
"\n"
"Available subcommands:\n"
msgstr ""
-"allmän användning: svnlook UNDERKOMMANDO ARKIV_SÖKVÄG [ARGUMENT & FLAGGOR ...]\n"
-"Anmärkning: De kommandon som tar --revision- och --transaction-flaggor\n"
+"allmän användning: svnlook UNDERKOMMANDO ARKIVSÖKVÄG [ARGUMENT & FLAGGOR ...]\n"
+"Anmärkning: De kommandon som tar flaggorna --revision- och --transaction\n"
" använder arkivets yngsta revision om ingen av dessa anges.\n"
"Skriv \"svnlook help <underkommando>\" för att få hjälp om ett specifikt\n"
"underkommando.\n"
@@ -11485,12 +14540,8 @@ msgstr ""
"\n"
"Tillgängliga underkommandon:\n"
-#: ../svnlook/main.c:2039
-msgid "Missing path argument"
-msgstr "Sökvägsargument saknas"
-
-#: ../svnlook/main.c:2063
-#, fuzzy, c-format
+#: ../svnlook/svnlook.c:2294
+#, c-format
msgid ""
"Comment (%i line):\n"
"%s\n"
@@ -11501,43 +14552,51 @@ msgstr[0] ""
"Kommentar (%i rad):\n"
"%s\n"
msgstr[1] ""
-"Kommentar (%i rad):\n"
+"Kommentar (%i rader):\n"
"%s\n"
-#: ../svnlook/main.c:2111
+#: ../svnlook/svnlook.c:2346
#, c-format
msgid "Missing propname argument"
msgstr "Egenskapsargument saknas"
-#: ../svnlook/main.c:2112
+#: ../svnlook/svnlook.c:2347
#, c-format
msgid "Missing propname and repository path arguments"
msgstr "Egenskapsnamns- och arkivsökvägsargument saknas"
-#: ../svnlook/main.c:2118
+#: ../svnlook/svnlook.c:2353
msgid "Missing propname or repository path argument"
msgstr "Egenskapsnamns- eller arkivsökvägsargument saknas"
-#: ../svnlook/main.c:2277
+#: ../svnlook/svnlook.c:2517
msgid "Invalid revision number supplied"
msgstr "Ogiltigt revisionsnummer angivet"
-#: ../svnlook/main.c:2369
-#, fuzzy
+#: ../svnlook/svnlook.c:2629
msgid "The '--transaction' (-t) and '--revision' (-r) arguments cannot co-exist"
-msgstr "Flaggorna --transaction och --revision kan inte anges samtidigt"
+msgstr "Flaggorna \"--transaction\" (-t) och \"--revision\" (-r) kan inte anges samtidigt"
+
+#: ../svnlook/svnlook.c:2636
+msgid "Cannot use the '--show-inherited-props' option with the '--revprop' option"
+msgstr "Kan inte använda flaggan \"--show-inherited-props\" tillsammans med \"--revprop\""
+
+#: ../svnlook/svnlook.c:2695
+#, c-format
+msgid "Try 'svnadmin verify' instead.\n"
+msgstr "Försök med \"svnadmin verify\" istället.\n"
-#: ../svnlook/main.c:2451
+#: ../svnlook/svnlook.c:2729
#, c-format
msgid "Repository argument required\n"
msgstr "Arkivargument krävs\n"
-#: ../svnlook/main.c:2460
+#: ../svnlook/svnlook.c:2738
#, c-format
msgid "'%s' is a URL when it should be a path\n"
msgstr "\"%s\" är en URL när den skulle vara en sökväg\n"
-#: ../svnlook/main.c:2512
+#: ../svnlook/svnlook.c:2790
#, c-format
msgid ""
"Subcommand '%s' doesn't accept option '%s'\n"
@@ -11546,50 +14605,133 @@ msgstr ""
"Underkommandot \"%s\" tillåter inte flaggan \"%s\"\n"
"Skriv \"svnlook help %s\" för användning.\n"
-#: ../svnlook/main.c:2555
+#: ../svnlook/svnlook.c:2833
msgid "Try 'svnlook help' for more info"
-msgstr ""
-
-#: ../svnrdump/load_editor.c:97 ../svnsync/main.c:351
-msgid "Target server does not support atomic revision property edits; consider upgrading it to 1.7 or using an external locking program"
-msgstr ""
-
-#: ../svnrdump/load_editor.c:106 ../svnsync/main.c:360
-#, c-format
-msgid "Can't get local hostname"
-msgstr "Kan inte erhålla lokalt värdnamn"
+msgstr "Skriv \"svnlook help\" för mer information"
-#: ../svnrdump/load_editor.c:133 ../svnsync/main.c:396
+#: ../svnmucc/svnmucc.c:927
+msgid ""
+"Subversion multiple URL command client\n"
+"usage: svnmucc ACTION...\n"
+"\n"
+" Perform one or more Subversion repository URL-based ACTIONs, committing\n"
+" the result as a (single) new revision.\n"
+"\n"
+"Actions:\n"
+" cp REV SRC-URL DST-URL : copy SRC-URL@REV to DST-URL\n"
+" mkdir URL : create new directory URL\n"
+" mv SRC-URL DST-URL : move SRC-URL to DST-URL\n"
+" rm URL : delete URL\n"
+" put SRC-FILE URL : add or modify file URL with contents copied from\n"
+" SRC-FILE (use \"-\" to read from standard input)\n"
+" propset NAME VALUE URL : set property NAME on URL to VALUE\n"
+" propsetf NAME FILE URL : set property NAME on URL to value read from FILE\n"
+" propdel NAME URL : delete property NAME from URL\n"
+"\n"
+"Valid options:\n"
+" -h, -? [--help] : display this text\n"
+" -m [--message] ARG : use ARG as a log message\n"
+" -F [--file] ARG : read log message from file ARG\n"
+" -u [--username] ARG : commit the changes as username ARG\n"
+" -p [--password] ARG : use ARG as the password\n"
+" -U [--root-url] ARG : interpret all action URLs relative to ARG\n"
+" -r [--revision] ARG : use revision ARG as baseline for changes\n"
+" --with-revprop ARG : set revision property in the following format:\n"
+" NAME[=VALUE]\n"
+" --non-interactive : do no interactive prompting (default is to\n"
+" prompt only if standard input is a terminal)\n"
+" --force-interactive : do interactive prompting even if standard\n"
+" input is not a terminal\n"
+" --trust-server-cert : accept SSL server certificates from unknown\n"
+" certificate authorities without prompting (but\n"
+" only with '--non-interactive')\n"
+" -X [--extra-args] ARG : append arguments from file ARG (one per line;\n"
+" use \"-\" to read from standard input)\n"
+" --config-dir ARG : use ARG to override the config directory\n"
+" --config-option ARG : use ARG to override a configuration option\n"
+" --no-auth-cache : do not cache authentication tokens\n"
+" --version : print version information\n"
+msgstr ""
+"Subversionklient för kommandon mot multipla URL:er\n"
+"användning: svnmucc HANDLING...\n"
+"\n"
+" Genomför en eller flera URL-baserade HANDLINGar och arkivera resultatet\n"
+" som en (enda) ny revision.\n"
+"\n"
+"Handlingar:\n"
+" cp REV KÄLL-URL MÅL-URL : kopiera KÄLL-URL@REV till MÅL-URL\n"
+" mkdir URL : skapa den nya katalogen URL\n"
+" mv KÄLL-URL MÅL-URL : flytta KÄLL-URL till MÅL-URL\n"
+" rm URL : radera URL\n"
+" put KÄLLFIL URL : lägg till eller ändra filen URL med innehållet\n"
+" kopierat från KÄLLFIL (använd \"-\" för att läsa\n"
+" från standard in)\n"
+" propset NAMN VÄRDE URL : sätt egenskapen NAMN på URL till VÄRDE\n"
+" propsetf NAMN FIL URL : sätt egenskapen NAMN på URL till värdet läst\n"
+" från FIL\n"
+" propdel NAMN URL : radera egenskapen NAMN från URL\n"
+"\n"
+"Giltiga flaggor:\n"
+" -h, -? [--help] : visa denna text\n"
+" -m [--message] ARG : använd ARG som loggmeddelande\n"
+" -F [--file] ARG : läs loggmeddelande från filen ARG\n"
+" -u [--username] ARG : arkivera ändringarna under användarnamnet ARG\n"
+" -p [--password] ARG : använd ARG som lösenord\n"
+" -U [--root-url] ARG : tolka alla URL:er relativt ARG\n"
+" -r [--revision] ARG : använd revision ARG som utgångspunkt för ändringar\n"
+" --with-revprop ARG : sätt revisionsegenskapen i följande format:\n"
+" NAMN[=VÄRDE]\n"
+" --non-interactive : fråga inte användaren (normalt frågas användaren\n"
+" bara om standardinmatningen är en terminal)\n"
+" --force-interactive : fråga användaren även om standardinmatningen inte\n"
+" är en terminal\n"
+" --trust-server-cert : godta SSL-servercertifikat från okända utfärdare\n"
+" utan att fråga (men bara med \"--non-interactive\")\n"
+" -X [--extra-args] ARG : lägg till argument från filen ARG (ett per rad;\n"
+" använd \"-\" för att läsa från standard in)\n"
+" --config-dir ARG : använd ARG för att ange inställningskatalogen\n"
+" --config-option ARG : använd ARG för att ange en inställning\n"
+" --no-auth-cache : cacha inte autentiseringsinformation\n"
+" --version : visa versionsinformation\n"
+
+#: ../svnmucc/svnmucc.c:1003
+msgid "--message (-m), --file (-F), and --with-revprop=svn:log are mutually exclusive"
+msgstr "--message (-m), --file (-F) och --with-revprop=svn:log kan inte användas samtidigt"
+
+#: ../svnrdump/load_editor.c:382 ../svnsync/svnsync.c:327
#, c-format
msgid "Failed to get lock on destination repos, currently held by '%s'\n"
msgstr "Kunde inte låsa destinationsarkivet; det är för närvarande låst av \"%s\"\n"
-#: ../svnrdump/load_editor.c:167 ../svnsync/main.c:430
-#, fuzzy, c-format
-msgid "Couldn't get lock on destination repos after %d attempts"
-msgstr "Kunde inte låsa destinationsarkivet; det är för närvarande låst av \"%s\"\n"
-
-#: ../svnrdump/load_editor.c:684
-msgid "\"svnrdump load\"'s lock was stolen; can't remove it"
-msgstr ""
+#: ../svnrdump/load_editor.c:526
+msgid "Target server does not support atomic revision property edits; consider upgrading it to 1.7."
+msgstr "Målservern stöder inte atomisk ändring av revisionsegenskaper; överväg en uppgradering till 1.7."
-#: ../svnrdump/svnrdump.c:58
+#: ../svnrdump/svnrdump.c:101
msgid ""
"usage: svnrdump dump URL [-r LOWER[:UPPER]]\n"
"\n"
-"Dump revisions LOWER to UPPER of repository at remote URL to stdout in a 'dumpfile' portable format.\n"
-"If only LOWER is given, dump that one revision.\n"
+"Dump revisions LOWER to UPPER of repository at remote URL to stdout\n"
+"in a 'dumpfile' portable format. If only LOWER is given, dump that\n"
+"one revision.\n"
msgstr ""
+"användning: svnrdump dump URL [-r BÖRJAN[:SLUT]]\n"
+"\n"
+"Dumpa revisionerna BÖRJAN till SLUT av arkivet vid URL till standard ut\n"
+"i ett portabelt \"dumpfile\"-format. Om bara BÖRJAN anges, dumpa bara\n"
+"den revisionen.\n"
-#: ../svnrdump/svnrdump.c:64
+#: ../svnrdump/svnrdump.c:107
msgid ""
"usage: svnrdump load URL\n"
"\n"
"Load a 'dumpfile' given on stdin to a repository at remote URL.\n"
msgstr ""
+"användning: svnrdump load URL\n"
+"\n"
+"Läs in en dumpfil från standard in till ett arkiv vid URL.\n"
-#: ../svnrdump/svnrdump.c:69
-#, fuzzy
+#: ../svnrdump/svnrdump.c:111
msgid ""
"usage: svnrdump help [SUBCOMMAND...]\n"
"\n"
@@ -11597,190 +14739,318 @@ msgid ""
msgstr ""
"användning: svnadmin help [UNDERKOMMANDO...]\n"
"\n"
-"Beskriver hur det här programmet och dess underkommandon används.\n"
+"Beskriv hur det här programmet och dess underkommandon används.\n"
+
+#: ../svnrdump/svnrdump.c:124
+msgid "dump incrementally"
+msgstr "dumpa inkrementellt"
-#: ../svnrdump/svnrdump.c:88 ../svnserve/main.c:218 ../svnversion/main.c:133
+#: ../svnrdump/svnrdump.c:142 ../svnserve/svnserve.c:283
+#: ../svnversion/svnversion.c:139
msgid "display this help"
msgstr "visa denna hjälp"
-#: ../svnrdump/svnrdump.c:91 ../svnsync/main.c:196
-msgid ""
-"set user configuration option in the format:\n"
-" FILE:SECTION:OPTION=[VALUE]\n"
-" For example:\n"
-" servers:global:http-library=serf"
-msgstr ""
-
-#: ../svnrdump/svnrdump.c:405
-#, fuzzy
+#: ../svnrdump/svnrdump.c:731
msgid ""
"general usage: svnrdump SUBCOMMAND URL [-r LOWER[:UPPER]]\n"
"Type 'svnrdump help <subcommand>' for help on a specific subcommand.\n"
+"Type 'svnrdump --version' to see the program version and RA modules.\n"
"\n"
"Available subcommands:\n"
msgstr ""
-"allmän användning: svndumpfilter UNDERKOMMANDO [ARGUMENT & FLAGGOR ...]\n"
-"Skriv \"svndumpfilter help <UNDERKOMMANDO>\" för att få hjälp om ett specifikt\n"
-"underkommando.\n"
-"Skriv \"svndumpfilter --version\" för att se programversion.\n"
+"allmän användning: svnrdump UNDERKOMMANDO URL [-r BÖRJAN[:SLUT]]\n"
+"Skriv \"svnrdump help <underkommando>\" för hjälp med ett visst underkommando.\n"
+"Skriv \"svnrdump --version\" för att se programversion och\n"
+"arkivåtkomstmoduler.\n"
"\n"
"Tillgängliga underkommandon:\n"
-#: ../svnrdump/svnrdump.c:585
-#, fuzzy, c-format
-msgid "Revision %ld does not exist.\n"
-msgstr "\"%s\" finns inte"
+#: ../svnrdump/svnrdump.c:775 ../svnrdump/svnrdump.c:809
+msgid "Unsupported revision specifier used; use only integer values or 'HEAD'"
+msgstr "Ej stödd revisionsangivelse; använd endast heltal eller \"HEAD\""
-#: ../svnrdump/svnrdump.c:592
+#: ../svnrdump/svnrdump.c:783 ../svnrdump/svnrdump.c:817
#, c-format
-msgid "LOWER cannot be greater than UPPER.\n"
+msgid "Revision '%ld' does not exist"
+msgstr "Revisionen \"%ld\" finns inte"
+
+#: ../svnrdump/svnrdump.c:827
+msgid "LOWER revision cannot be greater than UPPER revision; consider reversing your revision range"
+msgstr "Revisionen BÖRJAN kan inte vara större än SLUT; byt plats på dem"
+
+#: ../svnrdump/svnrdump.c:1072
+#, c-format
+msgid ""
+"Subcommand '%s' doesn't accept option '%s'\n"
+"Type 'svnrdump help %s' for usage.\n"
msgstr ""
+"Underkommandot \"%s\" tillåter inte flaggan \"%s\"\n"
+"Skriv \"svnrdump help %s\" för användning.\n"
-#: ../svnserve/cyrus_auth.c:264
+#: ../svnserve/cyrus_auth.c:119
+msgid "Could not initialize the SASL library"
+msgstr "Kunde inte initiera SASL-biblioteket"
+
+#: ../svnserve/cyrus_auth.c:260
#, c-format
msgid "Can't get hostname"
msgstr "Kan inte erhålla värdnamn"
-#: ../svnserve/cyrus_auth.c:329
+#: ../svnserve/cyrus_auth.c:325
msgid "Could not obtain the list of SASL mechanisms"
msgstr "Kunde inte erhålla listan med SASL-mekanismer"
-#: ../svnserve/cyrus_auth.c:371
+#: ../svnserve/cyrus_auth.c:367
msgid "Couldn't obtain the authenticated username"
-msgstr "Kan inte erhålla autenticerat användarnamn"
+msgstr "Kan inte erhålla autentiserat användarnamn"
+
+#: ../svnserve/serve.c:2043
+msgid "Path is not a string"
+msgstr "Sökvägen är inte en sträng"
+
+#: ../svnserve/serve.c:2200
+msgid "Log revprop entry not a string"
+msgstr "Revisionsegenskapsposten för loggning är ej en sträng"
+
+#: ../svnserve/serve.c:2206
+#, c-format
+msgid "Unknown revprop word '%s' in log command"
+msgstr "Okänt revisionsegenskapsord \"%s\" i log-kommandot"
+
+#: ../svnserve/serve.c:2222
+msgid "Log path entry not a string"
+msgstr "Sökvägsposten för loggning är ej en sträng"
-#: ../svnserve/main.c:151
+#: ../svnserve/svnserve.c:162
msgid "daemon mode"
-msgstr "daemon-läge"
+msgstr "demonläge"
-#: ../svnserve/main.c:152
+#: ../svnserve/svnserve.c:163
msgid "inetd mode"
msgstr "inetd-läge"
-#: ../svnserve/main.c:153
+#: ../svnserve/svnserve.c:164
msgid "tunnel mode"
msgstr "tunnel-läge"
-#: ../svnserve/main.c:154
-#, fuzzy
+#: ../svnserve/svnserve.c:165
msgid "listen-once mode (useful for debugging)"
-msgstr "lyssna en gång (användbart för felsökning)"
+msgstr "engångslyssningsläge (användbart för felsökning)"
-#: ../svnserve/main.c:157
-#, fuzzy
+#: ../svnserve/svnserve.c:168
msgid "Windows service mode (Service Control Manager)"
-msgstr "Kunde inte ansluta till tjänsthanteraren (SCM)"
+msgstr "Windows-tjänst-läge (Tjänstehanteraren)"
-#: ../svnserve/main.c:159
+#: ../svnserve/svnserve.c:170
msgid "root of directory to serve"
msgstr "serverns rotkatalog"
-#: ../svnserve/main.c:161
+#: ../svnserve/svnserve.c:172
msgid "force read only, overriding repository config file"
msgstr ""
"tillåt endast läsning; överskuggar värdet i\n"
" arkivets konfigurationsfil"
-#: ../svnserve/main.c:163
-#, fuzzy
+#: ../svnserve/svnserve.c:174
msgid "read configuration from file ARG"
-msgstr ""
-"läs användarens konfigurationsfiler från katalogen\n"
-" ARG"
+msgstr "läs konfiguration från filen ARG"
-#: ../svnserve/main.c:166
+#: ../svnserve/svnserve.c:177
msgid ""
-"listen port\n"
+"listen port. The default port is 3690.\n"
" [mode: daemon, service, listen-once]"
msgstr ""
+"port att lyssna på. Förvald är 3690.\n"
+" [läge: demon, tjänst, engångslyssning]"
-#: ../svnserve/main.c:170
+#: ../svnserve/svnserve.c:181
msgid ""
-"listen port\n"
+"listen port. The default port is 3690.\n"
" [mode: daemon, listen-once]"
msgstr ""
+"port att lyssna på. Förvald är 3690.\n"
+" [läge: demon, engångslyssning]"
-#: ../svnserve/main.c:176
+#: ../svnserve/svnserve.c:187
msgid ""
"listen hostname or IP address\n"
+" By default svnserve listens on all addresses.\n"
" [mode: daemon, service, listen-once]"
msgstr ""
+"värdnamn eller IP-adress att lyssna på\n"
+" Normalt lyssnar svnserve på alla adresser.\n"
+" [läge: demon, tjänst, engångslyssning]"
-#: ../svnserve/main.c:180
-#, fuzzy
+#: ../svnserve/svnserve.c:193
msgid ""
"listen hostname or IP address\n"
+" By default svnserve listens on all addresses.\n"
" [mode: daemon, listen-once]"
msgstr ""
-"värdnamn eller IP-address att lyssna på\n"
-" (daemon-läge)"
+"värdnamn eller IP-adress att lyssna på\n"
+" Normalt lyssnar svnserve på alla adresser.\n"
+" [läge: demon, engångslyssning]"
-#: ../svnserve/main.c:185
+#: ../svnserve/svnserve.c:200
msgid ""
"prefer IPv6 when resolving the listen hostname\n"
" [IPv4 is preferred by default. Using IPv4 and IPv6\n"
" at the same time is not supported in daemon mode.\n"
" Use inetd mode or tunnel mode if you need this.]"
msgstr ""
+"föredra IPv6 vid uppslagning av värddatorn\n"
+" för lyssning. [Normal föredras IPv4. Både IPv4\n"
+" och IPv6 kan inte användas samtidigt i demonläge.\n"
+" Använd inetd-läge eller tunnelläge om detta\n"
+" behövs.]"
+
+#: ../svnserve/svnserve.c:208
+msgid ""
+"compression level to use for network transmissions\n"
+" [0 .. no compression, 5 .. default, \n"
+" 9 .. maximum compression]"
+msgstr ""
+"kompressionsnivå för nätverksöverföringar\n"
+" [0: ingen kompression, 5: normalnivå,\n"
+" 9: maximal kompression]"
+
+#: ../svnserve/svnserve.c:214
+msgid ""
+"size of the extra in-memory cache in MB used to\n"
+" minimize redundant operations.\n"
+" Default is 128 for threaded and 16 for non-\n"
+" threaded mode.\n"
+" [used for FSFS repositories only]"
+msgstr ""
+"storlek på extra cacheminne i MB som används\n"
+" för att reducera onödiga operation.\n"
+" Standardvärdet är 128 för trådläge och 16 för\n"
+" icke-trådat läge.\n"
+" [endast använt för FSFS-arkiv]"
+
+#: ../svnserve/svnserve.c:224
+msgid ""
+"enable or disable caching of deltas between older\n"
+" revisions.\n"
+" Default is no.\n"
+" [used for FSFS repositories only]"
+msgstr ""
+"slå på (\"yes\") eller av (\"no\") cachning\n"
+" av deltan mellan äldre revisioner.\n"
+" Normalvärdet är \"no\" (avstängt).\n"
+" [endast använt för FSFS-arkiv]"
+
+#: ../svnserve/svnserve.c:232
+msgid ""
+"enable or disable caching of file contents\n"
+" Default is yes.\n"
+" [used for FSFS repositories only]"
+msgstr ""
+"slå på (\"yes\") eller av (\"no\") cachning\n"
+" av filinnehåll.\n"
+" Normalvärdet är \"yes\" (påslaget).\n"
+" [endast använt för FSFS-arkiv]"
+
+#: ../svnserve/svnserve.c:238
+msgid ""
+"enable or disable caching of revision properties.\n"
+" Consult the documentation before activating this.\n"
+" Default is no.\n"
+" [used for FSFS repositories only]"
+msgstr ""
+"slå på (\"yes\") eller av (\"no\") cachning\n"
+" av revisionsegenskaper.\n"
+" Normalvärdet är \"no\" (avstängt).\n"
+" [endast använt för FSFS-arkiv]"
+
+#: ../svnserve/svnserve.c:246
+msgid ""
+"Optimize network handling based on the assumption\n"
+" that most clients are connected with a bitrate of\n"
+" ARG Mbit/s.\n"
+" Default is 0 (optimizations disabled)."
+msgstr ""
+"Optimera nätverkshanteringen under antagandet att\n"
+" de flesta klienter är anslutna med en\n"
+" överföringshastighet på ARG Mbit/s.\n"
+" Normalvärdet är 0 (optimeringar avstängda)."
#. ### Making the assumption here that WIN32 never has fork and so
#. * ### this option never exists when --service exists.
-#: ../svnserve/main.c:195
-#, fuzzy
+#: ../svnserve/svnserve.c:256
msgid "use threads instead of fork [mode: daemon]"
-msgstr "använd trådar istället för att skapa nya processer"
+msgstr ""
+"använd trådar istället för att skapa nya processer\n"
+" [läge: demon]"
-#: ../svnserve/main.c:199
-#, fuzzy
+#: ../svnserve/svnserve.c:260
msgid ""
"run in foreground (useful for debugging)\n"
" [mode: daemon]"
-msgstr "kör i förgrunden (användbart för felsökning)"
+msgstr ""
+"kör i förgrunden (användbart för felsökning)\n"
+" [läge: demon]"
+
+#: ../svnserve/svnserve.c:264
+msgid ""
+"handle one connection at a time in the parent process\n"
+" (useful for debugging)"
+msgstr ""
+"hantera en anslutning i taget i föräldraprocessen\n"
+" (användbart för felsökning)"
-#: ../svnserve/main.c:203
-#, fuzzy
+#: ../svnserve/svnserve.c:268
msgid "svnserve log file"
-msgstr "Skapar filen svnserve.conf"
+msgstr "loggfil för svnserve"
-#: ../svnserve/main.c:206
+#: ../svnserve/svnserve.c:271
msgid ""
"write server process ID to file ARG\n"
" [mode: daemon, listen-once, service]"
msgstr ""
+"skriv serverprocessens process-ID till filen ARG\n"
+" [läge: demon, engångslyssning, tjänst]"
-#: ../svnserve/main.c:210
+#: ../svnserve/svnserve.c:275
msgid ""
"write server process ID to file ARG\n"
" [mode: daemon, listen-once]"
msgstr ""
+"skriv serverprocessens process-ID till filen ARG\n"
+" [läge: demon, engångslyssning]"
-#: ../svnserve/main.c:215
-#, fuzzy
+#: ../svnserve/svnserve.c:280
msgid ""
"tunnel username (default is current uid's name)\n"
" [mode: tunnel]"
msgstr ""
"användarnamn för tunnel (standard är aktuell\n"
-" användares namn)"
+" användares namn) [läge: tunnel]"
+
+#: ../svnserve/svnserve.c:285
+msgid ""
+"virtual host mode (look for repo in directory\n"
+" of provided hostname)"
+msgstr ""
+"virtuell värddator-läge (leta efter arkiv i\n"
+" katalog med samma namn som använt värddatornamn)"
-#: ../svnserve/main.c:231
+#: ../svnserve/svnserve.c:302
#, c-format
msgid "Type '%s --help' for usage.\n"
msgstr "Skriv \"%s --help\" för användning.\n"
-#: ../svnserve/main.c:241
-#, fuzzy
+#: ../svnserve/svnserve.c:312
msgid ""
"usage: svnserve [-d | -i | -t | -X | --service] [options]\n"
"\n"
"Valid options:\n"
msgstr ""
-"Användning: svnserve [flaggor]\n"
+"användning: svnserve [-d | -i | -t | -X | --service] [flaggor]\n"
"\n"
"Giltiga flaggor:\n"
-#: ../svnserve/main.c:247
-#, fuzzy
+#: ../svnserve/svnserve.c:318
msgid ""
"usage: svnserve [-d | -i | -t | -X] [options]\n"
"\n"
@@ -11790,97 +15060,86 @@ msgstr ""
"\n"
"Giltiga flaggor:\n"
-#: ../svnserve/main.c:275
-#, fuzzy
+#: ../svnserve/svnserve.c:346
msgid ""
"\n"
"Cyrus SASL authentication is available.\n"
-msgstr "Ingen tillhandahållare av autentisering tillgänglig"
+msgstr ""
+"\n"
+"Cyrus-SASL-autentisering finns tillgänglig.\n"
-#: ../svnserve/main.c:487
-#, fuzzy, c-format
+#: ../svnserve/svnserve.c:618
+#, c-format
msgid "Invalid port '%s'"
-msgstr "Ogiltig URL \"%s\""
+msgstr "Ogiltig port \"%s\""
-#: ../svnserve/main.c:528
-#, fuzzy, c-format
+#: ../svnserve/svnserve.c:659
+#, c-format
msgid "svnserve: Root path '%s' does not exist or is not a directory.\n"
-msgstr "Sökvägen \"%s\" finns i arbetskopian men ej i arkivet"
+msgstr "svnserve: Rotsökvägen \"%s\" finns inte eller är ingen katalog.\n"
-#: ../svnserve/main.c:585
-#, fuzzy
+#: ../svnserve/svnserve.c:772
msgid "You must specify exactly one of -d, -i, -t, --service or -X.\n"
-msgstr "Du måste ange precis en av -d, -i, -t eller -X.\n"
+msgstr "Du måste ange precis en av -d, -i, -t, --service eller -X.\n"
-#: ../svnserve/main.c:588
+#: ../svnserve/svnserve.c:775
msgid "You must specify exactly one of -d, -i, -t or -X.\n"
msgstr "Du måste ange precis en av -d, -i, -t eller -X.\n"
-#: ../svnserve/main.c:613
+#: ../svnserve/svnserve.c:784
+msgid "You may only specify one of -T or --single-thread\n"
+msgstr "Du kan bara ange en av -T eller --single-thread\n"
+
+#: ../svnserve/svnserve.c:812
#, c-format
msgid "Option --tunnel-user is only valid in tunnel mode.\n"
msgstr "Flaggan --tunnel-user är endast giltig i tunnel-läge.\n"
-#: ../svnserve/main.c:678
+#: ../svnserve/svnserve.c:831
+#, c-format
+msgid "Can't open stdout"
+msgstr "Kan inte öppna standard ut"
+
+#: ../svnserve/svnserve.c:885
#, c-format
msgid "svnserve: The --service flag is only valid if the process is started by the Service Control Manager.\n"
-msgstr "svnserve: Flaggan --service är endast tillåten om processen startas av tjänsthanteraren (SCM).\n"
+msgstr "svnserve: Flaggan --service är endast tillåten om processen startas av tjänstehanteraren (SCM).\n"
-#: ../svnserve/main.c:728
+#: ../svnserve/svnserve.c:935
#, c-format
msgid "Can't get address info"
msgstr "Kan inte erhålla adressinfo"
-#: ../svnserve/main.c:742
+#: ../svnserve/svnserve.c:949
#, c-format
msgid "Can't create server socket"
msgstr "Kan inte skapa uttag (socket) för servern"
-#: ../svnserve/main.c:753
+#: ../svnserve/svnserve.c:960
#, c-format
msgid "Can't bind server socket"
msgstr "Kan inte knyta adress till serveruttaget (socket)"
-#: ../svnserve/main.c:831
+#: ../svnserve/svnserve.c:1058
#, c-format
msgid "Can't accept client connection"
msgstr "Kan inte acceptera anslutning från klient"
-#: ../svnserve/main.c:907
+#: ../svnserve/svnserve.c:1139
#, c-format
msgid "Can't create threadattr"
msgstr "Kan inte skapa trådattribut"
-#: ../svnserve/main.c:915
+#: ../svnserve/svnserve.c:1147
#, c-format
msgid "Can't set detached state"
-msgstr "Kan inte koppla låss tråd"
+msgstr "Kan inte koppla loss tråd"
-#: ../svnserve/main.c:928
+#: ../svnserve/svnserve.c:1160
#, c-format
msgid "Can't create thread"
msgstr "Kan inte skapa tråd"
-#: ../svnserve/serve.c:1857
-#, fuzzy
-msgid "Path is not a string"
-msgstr "Sökväg är inte en fil i en arbetskopia"
-
-#: ../svnserve/serve.c:2011
-#, fuzzy
-msgid "Log revprop entry not a string"
-msgstr "Loggposten är ej en lista"
-
-#: ../svnserve/serve.c:2018
-#, fuzzy, c-format
-msgid "Unknown revprop word '%s' in log command"
-msgstr "Okänt kommando i svn-protokollet"
-
-#: ../svnserve/serve.c:2034
-#, fuzzy
-msgid "Log path entry not a string"
-msgstr "Loggposten är ej en lista"
-
#: ../svnserve/winservice.c:346
#, c-format
msgid "Failed to create winservice_start_event"
@@ -11894,14 +15153,14 @@ msgstr "Tjänsten kunde inte starta"
#: ../svnserve/winservice.c:405
#, c-format
msgid "Failed to connect to Service Control Manager"
-msgstr "Kunde inte ansluta till tjänsthanteraren (SCM)"
+msgstr "Kunde inte ansluta till tjänstehanteraren (SCM)"
#: ../svnserve/winservice.c:416
#, c-format
msgid "The service failed to start; an internal error occurred while starting the service"
msgstr "Tjänsten kunde inte starta; ett internt fel inträffade då tjänsten skulle startas"
-#: ../svnsync/main.c:85
+#: ../svnsync/svnsync.c:92
msgid ""
"usage: svnsync initialize DEST_URL SOURCE_URL\n"
"\n"
@@ -11926,8 +15185,27 @@ msgid ""
"In other words, the destination repository should be a read-only\n"
"mirror of the source repository.\n"
msgstr ""
+"användning: svnsync initialize DEST-URL KÄLL-URL\n"
+"\n"
+"Initiera ett destinationsarkiv för synkronisering från ett annat arkiv.\n"
+"\n"
+"Om käll-URL:en inte är rot till ett arkiv kommer bara den angivna delen av\n"
+"arkivet synkroniseras.\n"
+"\n"
+"Destinations-URL:en måste utpeka roten till ett arkiv som tillåter ändring\n"
+"av revisionsegenskaper. I allmänhet får destinationsarkivet inte innehålla\n"
+"några arkiverade revisioner. Använd --allow-non-empty för att kringgå\n"
+"denna begränsning; detta får svnsync att anta att revisioner som redan\n"
+"finns i destinationsarkivet helt motsvarar dem i källarkivet. (Detta är\n"
+"till exempel användbart när en kopia av ett arkiv skall tjäna som spegling\n"
+"av samma arkiv.)\n"
+"\n"
+"Man bör inte arkivera till, eller göra ändringar av revisionsegenskaper i\n"
+"destinationsarkivet på något annat sätt än med \"svnsync\". Med andra ord\n"
+"bör destinationsarkivet vara en spegling av källarkivet som endast används\n"
+"för läsning.\n"
-#: ../svnsync/main.c:110
+#: ../svnsync/svnsync.c:118
msgid ""
"usage: svnsync synchronize DEST_URL [SOURCE_URL]\n"
"\n"
@@ -11940,8 +15218,17 @@ msgid ""
"if untrusted users/administrators may have write access to the\n"
"DEST_URL repository.\n"
msgstr ""
+"användning: svnsync synchronize DEST-URL [KÄLL-URL]\n"
+"\n"
+"Överför alla utestående revisioner till destinationen från källan som\n"
+"synkroniseringen förbereddes för.\n"
+"\n"
+"Om KÄLL-URL anges kommer den användas som URL till källarkivet istället för\n"
+"källan som var sparad i destinationsarkivet. Att ange KÄLL-URL rekommenderas\n"
+"speciellt när icke betrodda användare eller förvaltare kan ha skrivande\n"
+"Ã¥tkomst till arkivet DEST-URL.\n"
-#: ../svnsync/main.c:122
+#: ../svnsync/svnsync.c:131
msgid ""
"usage:\n"
"\n"
@@ -11962,16 +15249,34 @@ msgid ""
"\n"
"Form 2 is deprecated syntax, equivalent to specifying \"-rREV[:REV2]\".\n"
msgstr ""
+"användning:\n"
+"\n"
+" 1. svnsync copy-revprops DEST-URL [KÄLL-URL]\n"
+" 2. svnsync copy-revprops DEST-URL REV[:REV2]\n"
+"\n"
+"Kopiera revisionsegenskaperna i ett givet revisionsområde till destinationen\n"
+"från källan som synkroniseringen förbereddes för. Om revisionsområdet inte\n"
+"anges antas att alla revisioner i arkivet DEST-URL avsågs. Observera även\n"
+"att revisionen \"HEAD\" är den senaste i DEST-URL, inte nödvändigtvis den\n"
+"senaste i KÄLL-URL.\n"
+"\n"
+"Om KÄLL-URL anges kommer den användas som URL till källarkivet istället för\n"
+"källan som var sparad i destinationsarkivet. Att ange KÄLL-URL rekommenderas\n"
+"speciellt när icke betrodda användare eller förvaltare kan ha skrivande\n"
+"Ã¥tkomst till arkivet DEST-URL.\n"
-#: ../svnsync/main.c:142
+#: ../svnsync/svnsync.c:152
msgid ""
"usage: svnsync info DEST_URL\n"
"\n"
"Print information about the synchronization destination repository\n"
"located at DEST_URL.\n"
msgstr ""
+"användning: svnsync info DEST-URL\n"
+"\n"
+"Visa information om destinationsarkivet för synkronisering i DEST-URL.\n"
-#: ../svnsync/main.c:148
+#: ../svnsync/svnsync.c:158
msgid ""
"usage: svnsync help [SUBCOMMAND...]\n"
"\n"
@@ -11981,173 +15286,206 @@ msgstr ""
"\n"
"Visa hur detta program eller dess underkommandon används.\n"
-#: ../svnsync/main.c:158
+#: ../svnsync/svnsync.c:168
msgid "print as little as possible"
msgstr "visa så lite information som möjligt"
-#: ../svnsync/main.c:160
+#: ../svnsync/svnsync.c:170
msgid ""
"operate on revision ARG (or range ARG1:ARG2)\n"
" A revision argument can be one of:\n"
" NUMBER revision number\n"
" 'HEAD' latest in repository"
msgstr ""
+"arbeta med revision ARG (eller området ARG1:ARG2)\n"
+" Ett revisionsargument kan vara ett av:\n"
+" TAL revisionsnummer\n"
+" \"HEAD\" senaste i arkivet"
-#: ../svnsync/main.c:168
+#: ../svnsync/svnsync.c:178
msgid "allow a non-empty destination repository"
-msgstr ""
+msgstr "tillåt ett icke-tomt destinationsarkiv"
-#: ../svnsync/main.c:174
+#: ../svnsync/svnsync.c:190
msgid ""
"specify a username ARG (deprecated;\n"
" see --source-username and --sync-username)"
msgstr ""
+"ange användarnamnet ARG (föråldrat;\n"
+" se --source-username och --sync-username)"
-#: ../svnsync/main.c:178
+#: ../svnsync/svnsync.c:194
msgid ""
"specify a password ARG (deprecated;\n"
" see --source-password and --sync-password)"
msgstr ""
+"ange lösenordet ARG (föråldrat;\n"
+" se --source-password and --sync-password)"
-#: ../svnsync/main.c:182
-msgid ""
-"accept unknown SSL server certificates without\n"
-" prompting (but only with '--non-interactive')"
-msgstr ""
-
-#: ../svnsync/main.c:186
+#: ../svnsync/svnsync.c:204
msgid "connect to source repository with username ARG"
-msgstr ""
+msgstr "anslut till källarkivet med användarnamn ARG"
-#: ../svnsync/main.c:188
+#: ../svnsync/svnsync.c:206
msgid "connect to source repository with password ARG"
-msgstr ""
+msgstr "anslut till källarkivet med lösenord ARG"
-#: ../svnsync/main.c:190
+#: ../svnsync/svnsync.c:208
msgid "connect to sync repository with username ARG"
msgstr ""
+"anslut till synkroniseringsarkiv med\n"
+" användarnamn ARG"
-#: ../svnsync/main.c:192
+#: ../svnsync/svnsync.c:210
msgid "connect to sync repository with password ARG"
+msgstr "anslut till synkroniseringsarkiv med lösenord ARG"
+
+#: ../svnsync/svnsync.c:222
+msgid ""
+"convert translatable properties from encoding ARG\n"
+" to UTF-8. If not specified, then properties are\n"
+" presumed to be encoded in UTF-8."
msgstr ""
+"omvandla egenskaper som kan översättas från\n"
+" kodning ARG till UTF-8. Om ej angiven antas\n"
+" egenskaper vara kodade i UTF-8."
-#: ../svnsync/main.c:204
+#: ../svnsync/svnsync.c:228
msgid ""
-"Disable built-in locking. Use of this option can\n"
+"Disable built-in locking. Use of this option can\n"
" corrupt the mirror unless you ensure that no other\n"
" instance of svnsync is running concurrently."
msgstr ""
+"Stäng av inbyggd låsning. Användning av denna\n"
+" flagga kan förstöra arkivspegeln om inte är\n"
+" säkert att ingen annan körning av svnsync sker\n"
+" samtidigt."
-#: ../svnsync/main.c:488
-msgid "svnsync's lock was stolen; can't remove it"
+#: ../svnsync/svnsync.c:234
+msgid ""
+"Steal locks as necessary. Use, with caution,\n"
+" if your mirror repository contains stale locks\n"
+" and is not being concurrently accessed by another\n"
+" svnsync instance."
msgstr ""
+"Stjäl lås vid behov. Använd (med försiktighet)\n"
+" om spegelarkivet innehåller utgångna lås och\n"
+" ingen annan körning av svnsync sker samtidigt."
+
+#: ../svnsync/svnsync.c:357
+msgid "Target server does not support atomic revision property edits; consider upgrading it to 1.7 or using an external locking program"
+msgstr "Målservern stöder inte atomisk ändring av revisionsegenskaper; uppgradera den till 1.7 eller använd ett externt låsprogram."
+
+#: ../svnsync/svnsync.c:371
+#, c-format
+msgid "Stole lock previously held by '%s'\n"
+msgstr "Stal lås som tidigare ägdes av \"%s\"\n"
-#: ../svnsync/main.c:525
+#: ../svnsync/svnsync.c:460
#, c-format
msgid "Session is rooted at '%s' but the repos root is '%s'"
msgstr "Sessionens rot är \"%s\", men arkivets rot är \"%s\""
-#: ../svnsync/main.c:667
+#: ../svnsync/svnsync.c:602
#, c-format
msgid "Copied properties for revision %ld (%s* properties skipped).\n"
msgstr "Kopierade egenskaper för revision %ld (%s*-egenskaper hoppades över).\n"
-#: ../svnsync/main.c:672
+#: ../svnsync/svnsync.c:607
#, c-format
msgid "Copied properties for revision %ld.\n"
msgstr "Kopierade egenskaper för revision %ld.\n"
-#: ../svnsync/main.c:688
+#: ../svnsync/svnsync.c:623
#, c-format
msgid "NOTE: Normalized %s* properties to LF line endings (%d rev-props, %d node-props).\n"
-msgstr ""
+msgstr "ANMÄRKNING: %s*-egenskaper normaliserade till LF-radslut (%d revisionsegenskaper, %d nodegenskaper).\n"
-#: ../svnsync/main.c:810
+#: ../svnsync/svnsync.c:753
msgid "Destination repository already contains revision history; consider using --allow-non-empty if the repository's revisions are known to mirror their respective revisions in the source repository"
-msgstr ""
+msgstr "Destinationsarkivet innehåller redan en revisionshistorik; använd --allow-non-empty om det är känt att arkivets revisioner motsvarar dem i källarkivet"
-#: ../svnsync/main.c:819
+#: ../svnsync/svnsync.c:762
#, c-format
msgid "Destination repository is already synchronizing from '%s'"
msgstr "Destinationsarkivet synkroniseras redan från \"%s\""
-#: ../svnsync/main.c:854
-#, fuzzy
+#: ../svnsync/svnsync.c:797
msgid "Destination repository has more revisions than source repository"
-msgstr "Destinationsarkivet har ej initierats"
+msgstr "Destinationsarkivet har fler revisioner än källarkivet"
-#: ../svnsync/main.c:918 ../svnsync/main.c:921 ../svnsync/main.c:1425
-#: ../svnsync/main.c:1432 ../svnsync/main.c:1667 ../svnsync/main.c:1670
-#: ../svnsync/main.c:1712
+#: ../svnsync/svnsync.c:862 ../svnsync/svnsync.c:865 ../svnsync/svnsync.c:1518
+#: ../svnsync/svnsync.c:1525 ../svnsync/svnsync.c:1762
+#: ../svnsync/svnsync.c:1765 ../svnsync/svnsync.c:1809
#, c-format
msgid "Path '%s' is not a URL"
msgstr "Sökvägen \"%s\" är inte en URL"
-#: ../svnsync/main.c:947
+#: ../svnsync/svnsync.c:892
#, c-format
msgid "Committed revision %ld.\n"
msgstr "Arkiverade revision %ld.\n"
-#: ../svnsync/main.c:990
+#: ../svnsync/svnsync.c:935
msgid "Destination repository has not been initialized"
msgstr "Destinationsarkivet har ej initierats"
-#: ../svnsync/main.c:1208
+#: ../svnsync/svnsync.c:1301
#, c-format
-msgid "Commit created rev %ld but should have created %ld"
-msgstr "Arkiveringen skapade revision %ld, men den borde ha skapat %ld"
+msgid "Commit created r%ld but should have created r%ld"
+msgstr "Arkiveringen skapade r%ld, men den borde ha skapat r%ld"
-#: ../svnsync/main.c:1322
+#: ../svnsync/svnsync.c:1416
#, c-format
msgid "Revision being currently copied (%ld), last merged revision (%ld), and destination HEAD (%ld) are inconsistent; have you committed to the destination without using svnsync?"
-msgstr ""
+msgstr "Revisionen som nu kopieras (%ld), senaste sammanslagna revisionen (%ld) och målets HEAD (%ld) är inkonsistenta. Har du arkiverat till destinationen utan att använda svnsync?"
-#: ../svnsync/main.c:1360
+#: ../svnsync/svnsync.c:1453
#, c-format
msgid "Destination HEAD (%ld) is not the last merged revision (%ld); have you committed to the destination without using svnsync?"
-msgstr ""
+msgstr "HEAD i målarkivet (%ld) är inte den senaste sammanslagna revisionen (%ld). Har du arkiverat till destinationen utan att använda svnsync?"
-#: ../svnsync/main.c:1482 ../svnsync/main.c:1487
-#, fuzzy, c-format
+#: ../svnsync/svnsync.c:1576 ../svnsync/svnsync.c:1581
+#, c-format
msgid "Cannot copy revprops for a revision (%ld) that has not been synchronized yet"
-msgstr "Kan inte kopiera revisionsegenskaper för en revision som ej har synkroniserats"
+msgstr "Kan inte kopiera revisionsegenskaper för en revision (%ld) som ej har synkroniserats"
-#: ../svnsync/main.c:1550 ../svnsync/main.c:1570
-#, fuzzy, c-format
+#: ../svnsync/svnsync.c:1645 ../svnsync/svnsync.c:1665
+#, c-format
msgid "Invalid revision number (%ld)"
-msgstr "Ogiltigt revisionsnummer"
+msgstr "Ogiltigt revisionsnummer (%ld)"
-#: ../svnsync/main.c:1620
+#: ../svnsync/svnsync.c:1715
msgid "Cannot specify revisions via both command-line arguments and the --revision (-r) option"
-msgstr ""
+msgstr "Kan inte ange revisioner både som kommandoradsargument och med flaggan --revision (-r)"
-#: ../svnsync/main.c:1628 ../svnsync/main.c:1961
-#, fuzzy, c-format
+#: ../svnsync/svnsync.c:1723 ../svnsync/svnsync.c:2066
+#, c-format
msgid "Invalid revision range '%s' provided"
-msgstr "Ogiltigt revisionsnummer angivet"
+msgstr "Ogiltigt revisionsområde \"%s\" angivet"
-#: ../svnsync/main.c:1724
-#, fuzzy, c-format
+#: ../svnsync/svnsync.c:1822
+#, c-format
msgid "Repository '%s' is not initialized for synchronization"
-msgstr "Operationen kräver åtkomst till ett arkiv"
+msgstr "Arkivet \"%s\" har inte initierats för synkronisering"
#. Print the info.
-#: ../svnsync/main.c:1733
-#, fuzzy, c-format
+#: ../svnsync/svnsync.c:1828
+#, c-format
msgid "Source URL: %s\n"
-msgstr "URL: %s\n"
+msgstr "Käll-URL: %s\n"
-#: ../svnsync/main.c:1735
-#, fuzzy, c-format
+#: ../svnsync/svnsync.c:1830
+#, c-format
msgid "Source Repository UUID: %s\n"
-msgstr "Arkivets UUID: %s\n"
+msgstr "Källarkivets UUID: %s\n"
-#: ../svnsync/main.c:1738
-#, fuzzy, c-format
+#: ../svnsync/svnsync.c:1833
+#, c-format
msgid "Last Merged Revision: %s\n"
-msgstr "Senast ändrad i revision: %ld\n"
+msgstr "Senast sammanslagen revision: %s\n"
-#: ../svnsync/main.c:1755
+#: ../svnsync/svnsync.c:1850
msgid ""
"general usage: svnsync SUBCOMMAND DEST_URL [ARGS & OPTIONS ...]\n"
"Type 'svnsync help <subcommand>' for help on a specific subcommand.\n"
@@ -12157,16 +15495,20 @@ msgid ""
msgstr ""
"allmän användning: svnsync UNDERKOMMANDO DEST_URL [ARGUMENT & FLAGGOR ...]\n"
"Skriv \"svnsync help <underkommando>\" för hjälp med ett visst underkommando.\n"
-"Skriv @svnsync --version\" för att se programversion och arkivåtkomstmoduler.\n"
+"Skriv \"svnsync --version\" för att se programversion och arkivåtkomstmoduler.\n"
"\n"
"Tillgängliga underkommandon:\n"
-#: ../svnsync/main.c:1995
+#: ../svnsync/svnsync.c:2114
msgid "Cannot use --username or --password with any of --source-username, --source-password, --sync-username, or --sync-password.\n"
-msgstr ""
+msgstr "Kan inte använda --username eller --password tillsammans med någon av flaggorna --source-username, --source-password, --sync-username eller --sync-password.\n"
-#: ../svnsync/main.c:2085
-#, fuzzy, c-format
+#: ../svnsync/svnsync.c:2138
+msgid "--disable-locking and --steal-lock are mutually exclusive"
+msgstr "--disable-locking och --steal-lock kan inte användas samtidigt"
+
+#: ../svnsync/svnsync.c:2214
+#, c-format
msgid ""
"Subcommand '%s' doesn't accept option '%s'\n"
"Type 'svnsync help %s' for usage.\n"
@@ -12174,34 +15516,33 @@ msgstr ""
"Underkommandot \"%s\" tillåter inte flaggan \"%s\"\n"
"Skriv \"svnsync help %s\" för användning.\n"
-#: ../svnsync/main.c:2167
-#, fuzzy
+#: ../svnsync/svnsync.c:2297
msgid "Try 'svnsync help' for more info"
-msgstr "För få argument; försök med \"svnsync --help\" för mer information"
+msgstr "Skriv \"svnsync help\" för mer information"
-#: ../svnversion/main.c:45
+#: ../svnversion/svnversion.c:50
#, c-format
msgid "Type 'svnversion --help' for usage.\n"
msgstr "Skriv \"svnversion --help\" för användning.\n"
-#: ../svnversion/main.c:56
-#, fuzzy, c-format
+#: ../svnversion/svnversion.c:61
+#, c-format
msgid ""
"usage: svnversion [OPTIONS] [WC_PATH [TRAIL_URL]]\n"
"\n"
-" Produce a compact 'version number' for the working copy path\n"
+" Produce a compact version identifier for the working copy path\n"
" WC_PATH. TRAIL_URL is the trailing portion of the URL used to\n"
" determine if WC_PATH itself is switched (detection of switches\n"
-" within WC_PATH does not rely on TRAIL_URL). The version number\n"
+" within WC_PATH does not rely on TRAIL_URL). The version identifier\n"
" is written to standard output. For example:\n"
"\n"
" $ svnversion . /repos/svn/trunk\n"
" 4168\n"
"\n"
-" The version number will be a single number if the working\n"
+" The version identifier will be a single number if the working\n"
" copy is single revision, unmodified, not switched and with\n"
-" an URL that matches the TRAIL_URL argument. If the working\n"
-" copy is unusual the version number will be more complex:\n"
+" a URL that matches the TRAIL_URL argument. If the working\n"
+" copy is unusual the version identifier will be more complex:\n"
"\n"
" 4123:4168 mixed revision working copy\n"
" 4168M modified working copy\n"
@@ -12209,668 +15550,80 @@ msgid ""
" 4123P partial working copy, from a sparse checkout\n"
" 4123:4168MS mixed revision, modified, switched working copy\n"
"\n"
-" If invoked on a directory that is not a working copy, an\n"
-" exported directory say, the program will output 'exported'.\n"
+" If WC_PATH is an unversioned path, the program will output\n"
+" 'Unversioned directory' or 'Unversioned file'. If WC_PATH is\n"
+" an added or copied or moved path, the program will output\n"
+" 'Uncommitted local addition, copy or move'.\n"
"\n"
" If invoked without arguments WC_PATH will be the current directory.\n"
"\n"
"Valid options:\n"
msgstr ""
-"användning: svnversion [FLAGGOR] AK_SÖKVÄG [URL_AVSL]]\n"
+"användning: svnversion [FLAGGOR] [AK_SÖKVÄG [URL_AVSL]]\n"
"\n"
" Generera ett kompakt \"versionsnummer\" för sökvägen AK_SÖKVÄG i en\n"
" arbetskopia. URL_AVSL är den avslutande delen av URL:en som används för att\n"
-" avgöra om switch har gjorts på AK_SÖKVÄG (URL_AVSL behövs inte för att\n"
-" upptäcka \"switchningar\" under AK_SÖKVÄG). Versionsnumret skrivs till\n"
-" standard ut. Exempel:\n"
+" avgöra om AK_SÖKVÄG är växlad (URL_AVSL behövs inte för att upptäcka\n"
+" växlingar under AK_SÖKVÄG). Versionsnumret skrivs till standard ut.\n"
+" Exempel:\n"
"\n"
-" $ svnversion . /repos/svn/trunk\n"
+" $ svnversion . /arkiv/svn/trunk\n"
" 4168\n"
"\n"
" Versionsnumret är ett tal om arbetskopian är en enda revision som inte\n"
-" är ändrad, inte \"switchad\" och med en URL som matchar TRAIL_URL. Annars\n"
-" är versionsnumret mer komplext:\n"
+" är ändrad, inte växlad och med en URL som matchar URL_AVSL. Annars\n"
+" är versionsnumret mer sammansatt:\n"
"\n"
" 4123:4168 arbetskopia med blandade revisioner\n"
" 4168M arbetskopia med ändringar\n"
-" 4123S arbetskopia som det har gjorts switch på\n"
-" 123:4168MS arbetskopia med blandade revisioner, ändringar och som det har\n"
-" gjorts switch på\n"
+" 4123S växlad arbetskopia\n"
+" 4123P partiell arbetskopia från en gles utcheckning\n"
+" 123:4168MS växlad arbetskopia med blandade revisioner och ändringar\n"
+"\n"
+" Om AK_SÖKVÄG inte är versionshanterad så kommer programmet skriva ut\n"
+" \"Ej versionshanterad fil/katalog\". Om AK_SÖKVÄG är en tillagd, kopierad\n"
+" eller flyttad fil eller katalog, så kommer programmet skriva ut\n"
+" \"Oarkiverad lokalt tillagd, kopierad eller flyttad fil eller katalog.\".\n"
"\n"
-" Om programmet körs på en katalog som inte är en arbetskopia, till exempel\n"
-" en exporterad katalog, skrivs \"exporterad\" ut.\n"
+" Om inget argument ges antas AK_SÖKVÄG vara den aktuella arbetskatalogen.\n"
"\n"
"Giltiga flaggor:\n"
-#: ../svnversion/main.c:131
+#: ../svnversion/svnversion.c:137
msgid "do not output the trailing newline"
msgstr "skriv inte ut det avslutande radslutet"
-#: ../svnversion/main.c:132
+#: ../svnversion/svnversion.c:138
msgid "last changed rather than current revisions"
msgstr "senast ändrade istället för aktuella revisioner"
-#: ../svnversion/main.c:232
-#, fuzzy, c-format
+#: ../svnversion/svnversion.c:246
+#, c-format
+msgid "Unversioned symlink%s"
+msgstr "Ej versionshanterad symbolisk länk%s"
+
+#: ../svnversion/svnversion.c:249
+#, c-format
msgid "Unversioned directory%s"
-msgstr "Kan inte återspola katalogen \"%s\""
+msgstr "Ej versionshanterad katalog%s"
-#: ../svnversion/main.c:250 ../svnversion/main.c:266
+#: ../svnversion/svnversion.c:252
#, c-format
msgid "Unversioned file%s"
-msgstr ""
+msgstr "Ej versionshanterad fil%s"
-#: ../svnversion/main.c:279
-#, fuzzy, c-format
+#: ../svnversion/svnversion.c:258
+#, c-format
msgid "'%s' doesn't exist\n"
-msgstr "\"%s\" finns inte"
+msgstr "\"%s\" finns inte\n"
-#: ../svnversion/main.c:287
+#: ../svnversion/svnversion.c:259
#, c-format
msgid "'%s' is of unknown type\n"
-msgstr ""
+msgstr "\"%s\" är av okänd typ\n"
#. Local uncommitted modifications, no revision info was found.
-#: ../svnversion/main.c:296
+#: ../svnversion/svnversion.c:274
#, c-format
msgid "Uncommitted local addition, copy or move%s"
-msgstr ""
-
-#~ msgid "Invalid 'format' attribute"
-#~ msgstr "Ogiltigt format-attribut"
-
-#, fuzzy
-#~ msgid "Error getting file size on '%s'"
-#~ msgstr "Fel vid hämtning av senaste modifieringstid från \"%s\""
-
-#~ msgid "Can't grab FSFS repository mutex"
-#~ msgstr "Kan inte låsa arkivlås för FSFS"
-
-#~ msgid "Log command for directory '%s' is mislocated"
-#~ msgstr "Loggkommando för katalogen \"%s\" är felplacerat"
-
-#~ msgid "Error removing lock from entry for '%s'"
-#~ msgstr "Fel vid borttagning av lås från posten för \"%s\""
-
-#, fuzzy
-#~ msgid "write server process ID to file ARG"
-#~ msgstr "skriv serverns process-ID till filen arg"
-
-#~ msgid "Error modifying entry for '%s'"
-#~ msgstr "Fel vid ändring av posten för \"%s\""
-
-#, fuzzy
-#~ msgid "Destination does not exist: '%s'"
-#~ msgstr "Destinationen \"%s\" finns redan"
-
-#~ msgid "descend recursively"
-#~ msgstr "gå ned rekursivt"
-
-#~ msgid "Cannot revert: '%s' is not under version control"
-#~ msgstr "Kan inte återställa: \"%s\" är inte versionshanterad"
-
-#~ msgid "Cannot copy or move '%s': it's not under version control"
-#~ msgstr "Kan inte kopiera eller flytta \"%s\": den är inte versionshanterad"
-
-#, fuzzy
-#~ msgid "Path '%s' is missing"
-#~ msgstr "Katalogen \"%s\" saknas"
-
-#~ msgid ""
-#~ "usage: svnsync copy-revprops DEST_URL REV\n"
-#~ "\n"
-#~ "Copy all revision properties for revision REV from source to\n"
-#~ "destination.\n"
-#~ msgstr ""
-#~ "användning: svnsync copy-revprops DEST_URL REV\n"
-#~ "Kopiera alla revisionsegenskaper för revisionen REV från källan till\n"
-#~ "destinationen.\n"
-
-#~ msgid ""
-#~ "the change made by revision ARG (like -r ARG-1:ARG)\n"
-#~ " If ARG is negative this is like -r ARG:ARG-1"
-#~ msgstr ""
-#~ "ändringen som motsvaras av revisionen ARG\n"
-#~ " (som -r ARG-1:ARG). Om ARG är negativt är detta\n"
-#~ " samma som -r ARG:ARG-1."
-
-#~ msgid "Missing 'dest' attribute in '%s'"
-#~ msgstr "Attributet \"dest\" saknas i \"%s\""
-
-#~ msgid "; run 'svn update' to complete it"
-#~ msgstr "; kör \"svn update\" för att slutföra"
-
-#~ msgid "Missing 'left' attribute in '%s'"
-#~ msgstr "Attributet \"left\" saknas i \"%s\""
-
-#~ msgid "Item is out-of-date"
-#~ msgstr "Objektet är inaktuellt"
-
-#~ msgid "applying log message to %s"
-#~ msgstr "applicerar loggmeddelande på %s"
-
-#~ msgid "Failed to add directory '%s': object of the same name is already scheduled for addition"
-#~ msgstr "Kunde inte lägga till katalogen \"%s\": ett objekt med samma namn är redan schemalagt att läggas till"
-
-#~ msgid "No such entry: '%s'"
-#~ msgstr "Ingen post med namnet: \"%s\""
-
-#~ msgid "Relocate can only change the repository part of an URL"
-#~ msgstr "Vid omlokalisering kan endast den del av URL:en ändras som anger arkivet"
-
-#~ msgid "Revision action '%c' for revision %ld of '%s' lacks a prior revision"
-#~ msgstr "Saknar tidigare revision för åtgärden \"%c\" i revision %ld av \"%s\""
-
-#~ msgid "Error removing changelist from entry '%s'"
-#~ msgstr "Fel vid borttagning av ändringslista för posten \"%s\""
-
-#~ msgid "Name: %s%s"
-#~ msgstr "Namn: %s%s"
-
-#~ msgid "File '%s' in directory '%s' is not a versioned resource"
-#~ msgstr "Filen \"%s\" i katalogen \"%s\" är inte en versionshanterad resurs"
-
-#~ msgid "Error in post-commit clean-up (details follow):"
-#~ msgstr "Fel vid städning efter arkivering (mer information följer):"
-
-#~ msgid "APR_APPEND not supported for adm files"
-#~ msgstr "APR_APPEND stöds ej för administrationsfiler"
-
-#~ msgid "run as a windows service (SCM only)"
-#~ msgstr "kör som en Windows-tjänst (enacst från SCM)"
-
-#~ msgid "Log entry missing 'name' attribute (entry '%s' for directory '%s')"
-#~ msgstr "Loggposten saknar attributet \"name\" (post \"%s\" för katalogen \"%s\")"
-
-#~ msgid "Can't stat directory '%s'"
-#~ msgstr "Kan inte ta status på katalogen \"%s\""
-
-#~ msgid "Error parsing diff options"
-#~ msgstr "Fel vid tolkning av diff-flaggor"
-
-#~ msgid "Corrupt working copy: '%s' has no default entry"
-#~ msgstr "Trasig arbetskopia: \"%s\" saknar normalpost"
-
-#~ msgid "Target lists to diff may not contain both working copy paths and URLs"
-#~ msgstr "Mållistor till diff kan inte innehålla både sökvägar till arbetskopior och URL:er"
-
-#~ msgid "Unable to lock '%s'"
-#~ msgstr "Kunde inte låsa \"%s\""
-
-#~ msgid "'%s' has no ancestry information"
-#~ msgstr "\"%s\" saknar information om ursprung"
-
-#~ msgid "Can't replace '%s' in deleted directory; try undeleting its parent directory first"
-#~ msgstr "Kan inte ersätta \"%s\" i en raderad katalog; försök återställa föräldrakatalogen först"
-
-#, fuzzy
-#~ msgid "Failed to add directory '%s': an unversioned directory of the same name already exists"
-#~ msgstr "Kunde inte tvingande lägga till katalogen \"%s\": ett versionshanterat objekt med samma namn finns redan"
-
-#~ msgid "Checksum mismatch for '%s'; expected '%s', actual: '%s'"
-#~ msgstr "Felaktig kontrollsumma för \"%s\"; väntade \"%s\", fick \"%s\""
-
-#~ msgid "property '%s' set (recursively) on '%s'\n"
-#~ msgstr "satte egenskapen \"%s\" (rekursivt) på \"%s\"\n"
-
-#, fuzzy
-#~ msgid "mark revisions as merged (use with -r)"
-#~ msgstr "arbeta med en revisionsegenskap (används med -r)"
-
-#~ msgid "Can't get default file perms for file at '%s' (file stat error)"
-#~ msgstr "Kan inte erhålla rättigheter för filen \"%s\" (fel vid stat)"
-
-#~ msgid "Error comparing '%s' and '%s'"
-#~ msgstr "Fel då \"%s\" och \"%s\" jämfördes"
-
-#~ msgid "Invalid revision number"
-#~ msgstr "Ogiltigt revisionsnummer"
-
-#, fuzzy
-#~ msgid ""
-#~ "usage: svnsync synchronize DEST_URL\n"
-#~ "\n"
-#~ "Transfer all pending revisions to the destination from the source\n"
-#~ "with which it was initialized.\n"
-#~ msgstr ""
-#~ "användning: svnsync synchronize DEST_URL\n"
-#~ "Överför väntande revisioner från källa till destination.\n"
-
-#~ msgid "Error getting 'affected time' for '%s'"
-#~ msgstr "Fel vid hämtning av senaste modifieringstid från \"%s\""
-
-#~ msgid "Can't create a character converter from '%i' to '%i'"
-#~ msgstr "Kan inte skapa teckenkonverterare från \"%i\" till \"%i\""
-
-#~ msgid "Could not create a PUT request (%s)"
-#~ msgstr "Kunde inte skapa en PUT-förfrågan (%s)"
-
-#~ msgid "Unknown or unexpected kind for path '%s'"
-#~ msgstr "Okänd eller oväntad typ för sökvägen \"%s\""
-
-#~ msgid "No entry for '%s'"
-#~ msgstr "Ingen post för \"%s\""
-
-#~ msgid "Corrupt working copy: '%s' in directory '%s' (which is scheduled for deletion) is not itself scheduled for deletion"
-#~ msgstr "Trasig arbetskopia: \"%s\" i katalogen \"%s\" (som är schemalagd att raderas) är inte själv schemalagd att raderas"
-
-#~ msgid ""
-#~ "Comment (%i lines):\n"
-#~ "%s\n"
-#~ msgstr ""
-#~ "Kommentarommentar (%i rader):\n"
-#~ "%s\n"
-
-#~ msgid "Lock file '%s' is not a regular file"
-#~ msgstr "Låsfilen \"%s\" är ingen normal fil"
-
-#~ msgid ""
-#~ "usage: svnadmin lslocks REPOS_PATH\n"
-#~ "\n"
-#~ "Print descriptions of all locks.\n"
-#~ msgstr ""
-#~ "användning: svnadmin lslocks ARKIV_SÖKVÄG\n"
-#~ "\n"
-#~ "Visa beskrivningar av samtliga lås.\n"
-
-#~ msgid "Expected '%s' to be a file but found a directory"
-#~ msgstr "\"%s\" borde varit en fil, men den är en katalog"
-
-#~ msgid "Properties Last Updated"
-#~ msgstr "Egenskaper senast uppdaterade"
-
-#~ msgid "Entry '%s' is already under version control"
-#~ msgstr "Posten \"%s\" är redan versionshanterad"
-
-#~ msgid "Error opening local file"
-#~ msgstr "Fel när lokal fil skulle öppnas"
-
-#~ msgid "Revision type requires a working copy path, not a URL"
-#~ msgstr "Revisionstypen kräver en sökväg till en arbetskopia; inte en URL"
-
-#~ msgid "Cannot copy or move '%s': it's not in the repository yet; try committing first"
-#~ msgstr "Kan inte kopiera eller flytta \"%s\": den är inte i arkivet ännu; arkivera den först"
-
-#~ msgid "listen port (for daemon mode)"
-#~ msgstr "lyssningsport (för daemon-läge)"
-
-#~ msgid "property '%s' deleted (recursively) from '%s'.\n"
-#~ msgstr "egenskapen \"%s\" raderades (rekursivt) från \"%s\".\n"
-
-#~ msgid "Could not create a DELETE request (%s)"
-#~ msgstr "Kunde inte skapa en DELETE-förfrågan (%s)"
-
-#~ msgid "In directory '%s'"
-#~ msgstr "I katalogen \"%s\""
-
-#~ msgid "Checksum mismatch for '%s'; expected: '%s', actual: '%s'"
-#~ msgstr "Felaktig kontrollsumma för \"%s\"; väntade \"%s\", fick \"%s\""
-
-#~ msgid "Version %d is not non-negative"
-#~ msgstr "Versionsnumret %d är negativt"
-
-#~ msgid "Error checking existence of '%s'"
-#~ msgstr "Fel vid kontroll om \"%s\" finns"
-
-#~ msgid "Error reading administrative log file in '%s'"
-#~ msgstr "Fel vid läsning av administrativ loggfil i \"%s\""
-
-#~ msgid "'get-file-revs' REPORT not implemented"
-#~ msgstr "\"get-file-revs\"-rapporten ej implementerad"
-
-#~ msgid ""
-#~ "Send changes from your working copy to the repository.\n"
-#~ "usage: commit [PATH...]\n"
-#~ "\n"
-#~ " A log message must be provided, but it can be empty.\n"
-#~ " OS400 does not support the starting of an editor,\n"
-#~ " so --message or --file must be used. If any targets are\n"
-#~ " (or contain) locked items, those will be unlocked after a\n"
-#~ " successful commit.\n"
-#~ msgstr ""
-#~ "Skicka ändringar från arbetskopian till arkivet.\n"
-#~ "användning: commit [SÖKVÄG...]\n"
-#~ "\n"
-#~ " Ett loggmeddelande måste anges, men det kan vara tomt. OS400\n"
-#~ " stöder inte start av en editor, så --message eller --file måste anges.\n"
-#~ " Om något mål är låst (eller innehåller låsta objekt), kommer dessa att\n"
-#~ " låsas upp efter en lyckad arkivering.\n"
-
-#~ msgid "Lock comment has illegal characters"
-#~ msgstr "Låskommentaren innehåller ogiltiga tecken"
-
-#~ msgid "Can't find entry '%s' in '%s'"
-#~ msgstr "Kan inte hitta posten \"%s\" i \"%s\""
-
-#~ msgid "Non-string as part of text delta"
-#~ msgstr "Icke-sträng var del av textdelta"
-
-#~ msgid "No support for repos <--> working copy moves"
-#~ msgstr "Flytt mellan arbetskipia och arkiv stöds ej"
-
-#~ msgid "Can't open file at '%s'"
-#~ msgstr "Kan inte öppna filen \"%s\""
-
-#~ msgid "Error replacing text-base of '%s'"
-#~ msgstr "Fel när textbasen för \"%s\" ersattes"
-
-#~ msgid "URL '%s' is not properly URI-encoded"
-#~ msgstr "URL:en \"%s\" är inte korrekt URI-kodad"
-
-#~ msgid ""
-#~ "use a different EOL marker than the standard\n"
-#~ " system marker for files with the svn:eol-style\n"
-#~ " property set to 'native'.\n"
-#~ " ARG may be one of 'LF', 'CR', 'CRLF'"
-#~ msgstr ""
-#~ "använd andra tecken för radslut än vad systemet\n"
-#~ " normalt använder för filer med egenskapen\n"
-#~ " \"eol-style\" satt till \"native\". ARG kan vara\n"
-#~ " något av \"LF\", \"CR\" och \"CRLF\""
-
-#~ msgid "Bad type indicator"
-#~ msgstr "Felaktig typindikator"
-
-#~ msgid "Can't move source to dest"
-#~ msgstr "Kan inte flytta källa till mål"
-
-#~ msgid "Can't replace '%s' with a node of a differing type; the deletion must be committed and the parent updated before adding '%s'"
-#~ msgstr "Kan inte ersätta \"%s\" med en nod av en annan typ; raderingen måste arkiveras och föräldern uppdateras innann \"%s\" kan läggas till"
-
-#~ msgid "Could not create a request (%s '%s')"
-#~ msgstr "Kunde inte skapa en förfrågan (%s \"%s\")"
-
-#~ msgid "Error during recursive copy of '%s'"
-#~ msgstr "Fel vid rekursiv kopiering av \"%s\""
-
-#~ msgid "'%s' not versioned, and not exported\n"
-#~ msgstr "\"%s\" är varken versionshanterad eller exporterad\n"
-
-#~ msgid "Corrupt working copy: '%s' in directory '%s' has an invalid schedule"
-#~ msgstr "Trasig arbetskopia: \"%s\" i katalogen \"%s\" har felaktig schemaläggning"
-
-#~ msgid "Error modifying entry of '%s'"
-#~ msgstr "Fel när posten för \"%s\" ändrades"
-
-#~ msgid "Corrupt working copy: '%s' in directory '%s' (which is scheduled for addition) is not itself scheduled for addition"
-#~ msgstr "Trasig arbetskopia: \"%s\" i katalogen \"%s\" (som är schemalagd att läggas till) är inte själv schemalagd att läggas till"
-
-#, fuzzy
-#~ msgid "Can't get user name"
-#~ msgstr "Kan inte erhålla filnamn"
-
-#~ msgid "Error spooling the %s request response to disk"
-#~ msgstr "Fel vid temporärlagring av responsen för %s-förfrågan till disk"
-
-#~ msgid "Error writing entries file for '%s'"
-#~ msgstr "Fel när postfilen för \"%s\" skulle skrivas"
-
-#~ msgid "'%s' has invalid revision"
-#~ msgstr "\"%s\" har ogiltig revision"
-
-#~ msgid "Directory '%s' containing working copy admin area is missing"
-#~ msgstr "Katalogen \"%s\" med administrativ area saknas"
-
-#~ msgid ""
-#~ "Comment (%i lines):\n"
-#~ "%s\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Kommentar (%i rader):\n"
-#~ "%s\n"
-#~ "\n"
-
-#~ msgid "'%s' is marked as absent, so it cannot be scheduled for addition"
-#~ msgstr "\"%s\" är markerad som saknad, så den kan inte schemaläggas att läggas till"
-
-#~ msgid "Unable to make any directories"
-#~ msgstr "Kan inte skapa några kataloger över huvud taget"
-
-#~ msgid "Missing 'right' attribute in '%s'"
-#~ msgstr "Attributet \"right\" saknas i \"%s\""
-
-#~ msgid "exported%s"
-#~ msgstr "exporterad%s"
-
-#~ msgid "Corrupt working copy: '%s' in directory '%s' (which is scheduled for replacement) has an invalid schedule"
-#~ msgstr "Trasig arbetskopia: \"%s\" i katalogen \"%s\" (som är schemalagd att ersättas) har ogiltig schemaläggning"
-
-#~ msgid "Checksum mismatch for '%s'; recorded: '%s', actual: '%s'"
-#~ msgstr "Felaktig kontrollsumma för \"%s\"; lagrad: \"%s\", verklig: \"%s\""
-
-#~ msgid "Can't add '%s' to deleted directory; try undeleting its parent directory first"
-#~ msgstr "Kan inte lägga till \"%s\" i en raderad katalog; försök återställa den raderade föräldrakatalogen först"
-
-#~ msgid "Use of an external editor to fetch log message is not supported on OS400; consider using the --message (-m) or --file (-F) options"
-#~ msgstr "Användning av en extern editor för att erhålla et loggmeddelande stöds ej på OS400; använd en av flaggorna --message (-m) eller --file (-F)"
-
-#~ msgid "Corrupt working copy: directory '%s' has an invalid schedule"
-#~ msgstr "Trasig arbetskopia: katalogen \"%s\" har felaktig schemaläggning"
-
-#~ msgid ""
-#~ "Lock Comment (%i lines):\n"
-#~ "%s\n"
-#~ msgstr ""
-#~ "LÃ¥skommentar (%i rader):\n"
-#~ "%s\n"
-
-#~ msgid "Entry '%s' has illegal schedule"
-#~ msgstr "Posten \"%s\" har ogiltig schemaläggning"
-
-#~ msgid " arg"
-#~ msgstr " arg"
-
-#, fuzzy
-#~ msgid "'%s' is not currently a member of changelist '%s'."
-#~ msgstr "Sökvägen \"%s\" är inte en fil"
-
-#~ msgid "Can't close directory '%s'"
-#~ msgstr "Kan inte stänga katalogen \"%s\""
-
-#~ msgid "Won't delete locally modified directory '%s'"
-#~ msgstr "Raderar inte den lokalt ändrade katalogen \"%s\""
-
-#~ msgid ""
-#~ "ARG (some commands also take ARG1:ARG2 range)\n"
-#~ " A revision argument can be one of:\n"
-#~ " NUMBER revision number\n"
-#~ " '{' DATE '}' revision at start of the date\n"
-#~ " 'HEAD' latest in repository\n"
-#~ " 'BASE' base rev of item's working copy\n"
-#~ " 'COMMITTED' last commit at or before BASE\n"
-#~ " 'PREV' revision just before COMMITTED"
-#~ msgstr ""
-#~ "ARG (en del kommandon accepterar även ett område\n"
-#~ " (ARG1:ARG2))\n"
-#~ " Ett revisionsargument kan vara något av:\n"
-#~ " TAL revisionsnummer\n"
-#~ " \"{\"DATUM\"}\" revision vid början av angiven dag\n"
-#~ " \"HEAD\" senaste revisionen i arkivet\n"
-#~ " \"BASE\" basrevisionen för objektets\n"
-#~ " arbetskopia\n"
-#~ " \"COMMITTED\" revisionen för den senaste\n"
-#~ " arkiveringen vid eller före BASE\n"
-#~ " \"PREV\" revisionen före COMMITTED"
-
-#~ msgid "No such thing as 'base' working copy properties!"
-#~ msgstr "Det finns inget som heter \"base\"-egenskaper för en arbetskopia!"
-
-#, fuzzy
-#~ msgid "'%s' is neither a file nor a directory"
-#~ msgstr "\"%s\" är varken ett fil- eller katalognamn"
-
-# Don't spend time on improving this, since the code says it should never
-# happen anyway:-)
-#~ msgid "Unhandled SASL interaction"
-#~ msgstr "Ej hanterad SASL-interaktion"
-
-#~ msgid ""
-#~ "Checksum mismatch, rep '%s':\n"
-#~ " expected: %s\n"
-#~ " actual: %s\n"
-#~ msgstr ""
-#~ "Kontrollsumma fel, rep \"%s\"\n"
-#~ " väntad kontrollsumma: %s\n"
-#~ " erhållen kontrollsumma: %s\n"
-
-#~ msgid "Can't convert string from CCSID '%i' to CCSID '%i'"
-#~ msgstr "Kan inte konvertera sträng från CCSID \"%i\" till CCSID \"%i\""
-
-#~ msgid "Reference to non-existent revision %ld in filesystem '%s'"
-#~ msgstr "Referens till revision %ld som inte finns i filsystemet \"%s\""
-
-#~ msgid "Can't get file perms for file at '%s' (file stat error)"
-#~ msgstr "Kan inte erhålla rättigheter för filen \"%s\" (fel vid stat)"
-
-#~ msgid "Can't chmod '%s'"
-#~ msgstr "Kan inte göra chmod på \"%s\""
-
-#~ msgid "Can't parse '%s'"
-#~ msgstr "Kan inte tolka \"%s\""
-
-#~ msgid "Can't ungrab FSFS repository mutex"
-#~ msgstr "Kan inte låsa upp arkivlås för FSFS"
-
-#~ msgid "Cannot revert addition of current directory; please try again from the parent directory"
-#~ msgstr "Kan inte återställa tillägg av aktuell katalog; försök igen från föräldrakatalogen"
-
-#~ msgid "Error getting 'affected time' of '%s'"
-#~ msgstr "Fel vid hämtning av senaste modifieringstid från \"%s\""
-
-#~ msgid "Failed to add directory '%s': object of the same name already exists"
-#~ msgstr "Kunde inte lägga till katalogen \"%s\": ett objekt med samma namn finns redan"
-
-#~ msgid "Please upgrade the server to 0.19 or later"
-#~ msgstr "Var vänlig uppgradera servern till version 0.19 eller senare"
-
-#~ msgid "Unrecognized node kind '%s' from server"
-#~ msgstr "Okänd nodtyp \"%s\" från servern"
-
-#~ msgid "%s request failed on '%s'"
-#~ msgstr "%s-förfrågan misslyckades till \"%s\""
-
-#~ msgid "Out of date: '%s' in transaction '%s'"
-#~ msgstr "\"%s\" i transaktionen \"%s\" är inaktuell"
-
-#~ msgid "File doesn't exist on HEAD"
-#~ msgstr "Filen finns inte i huvudrevisionen"
-
-#, fuzzy
-#~ msgid "Failed to add file '%s': a file of the same name is already scheduled for addition with history"
-#~ msgstr "Kunde inte lägga till filen \"%s\": ett objekt med samma namn är redan schemalagt att läggas till"
-
-#~ msgid "Access repository via WebDAV protocol through serf."
-#~ msgstr "Modul för åtkomst av arkiv via protokollet WebDAV med serf."
-
-#~ msgid "Lock request failed"
-#~ msgstr "Låsförfrågan misslyckades"
-
-#~ msgid "Couldn't open log"
-#~ msgstr "Kunde inte öppna logg"
-
-#~ msgid "'DAV:version-name' was not present on the baseline resource"
-#~ msgstr "\"DAV:version-name\" finns inte på baseline-resursen"
-
-#~ msgid "Error writing log for '%s'"
-#~ msgstr "Fel vid skrivning av logg för \"%s\""
-
-#~ msgid "Unsupported RA loader version (%d) for ra_dav"
-#~ msgstr "Versionen för RA-laddaren (%d) stöds ej för ra_dav"
-
-#~ msgid "Multiple revision arguments encountered; can't specify -r and -c, or try '-r N:M' instead of '-r N -r M'"
-#~ msgstr "Flera revisionsargument påträffades; -r och -c kan inte anges samtidigt, eller försök med \"-r M:N\" istället för \"-r M -r N\""
-
-#~ msgid "Cannot read entry for '%s'"
-#~ msgstr "Kan inte läsa post för \"%s\""
-
-#~ msgid "Can't write property hash to '%s'"
-#~ msgstr "Kan inte skriva egenskapstabell till \"%s\""
-
-#~ msgid ""
-#~ "Checksum mismatch for '%s':\n"
-#~ " expected checksum: %s\n"
-#~ " actual checksum: %s\n"
-#~ msgstr ""
-#~ "Kontrollsumma fel för \"%s\"\n"
-#~ " väntad kontrollsumma: %s\n"
-#~ " erhållen kontrollsumma: %s\n"
-
-#~ msgid "'%s' is not under version control or doesn't exist"
-#~ msgstr "\"%s\" är inte versionshanterad eller finns inte"
-
-#~ msgid ""
-#~ "Base checksum mismatch on '%s':\n"
-#~ " expected: %s\n"
-#~ " actual: %s\n"
-#~ msgstr ""
-#~ "Baskontrollsumma fel för \"%s\":\n"
-#~ " väntade: %s\n"
-#~ " erhållen: %s\n"
-
-#~ msgid "This client is too old to work with working copy '%s'; please get a newer Subversion client"
-#~ msgstr "Den här klienten är för gammal för att arbeta med arbetskopian \"%s\"; skaffa en nyare Subversion-klient"
-
-#~ msgid "Error writing to '%s'"
-#~ msgstr "Fel vid skrivning till \"%s\""
-
-#, fuzzy
-#~ msgid "Path '%s' is now a member of changelist '%s'.\n"
-#~ msgstr "Sökvägen \"%s\" är inte en fil"
-
-#, fuzzy
-#~ msgid ""
-#~ "Copyright (C) 2000-2009 CollabNet.\n"
-#~ "Subversion is open source software, see http://subversion.tigris.org/\n"
-#~ "This product includes software developed by CollabNet (http://www.Collab.Net/).\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Copyright (C) 2000-2009 CollabNet.\n"
-#~ "Subversion är Open Source-programvara; se http://subversion.tigris.org/.\n"
-#~ "Denna produkt innehåller programvara som är utvecklad av CollabNet\n"
-#~ "(http://www.Collab.Net/).\n"
-#~ "\n"
-
-#~ msgid "No '.' entry in: '%s'"
-#~ msgstr "Ingen post för \".\" i: \"%s\""
-
-#~ msgid "Could not create a CHECKOUT request (%s)"
-#~ msgstr "Kunde inte skapa en CHECKOUT-förfrågan (%s)"
-
-#~ msgid "Cannot initialize a repository with content in it"
-#~ msgstr "Kan inte initiera ett arkiv som redan har innehåll"
-
-#~ msgid ""
-#~ "Entry for '%s' is marked as 'copied' but is not itself scheduled\n"
-#~ "for addition. Perhaps you're committing a target that is\n"
-#~ "inside an unversioned (or not-yet-versioned) directory?"
-#~ msgstr "Posten för \"%s\" är märkt som \"kopierad\", men är inte själv schemalagd att läggas till. Försöker du arkivera något som är inuti en icke (eller inte ännu) versionshanterad katalog?"
-
-#~ msgid "Error writing log file for '%s'"
-#~ msgstr "Fel när loggfilen för \"%s\" skrevs"
-
-#~ msgid "Error getting 'affected time' on '%s'"
-#~ msgstr "Fel vid hämtning av senaste modifieringstid från \"%s\""
-
-#~ msgid "Bad encoding option: prop value not stored as UTF8"
-#~ msgstr "Felaktig kodningsflagga: egenskapsvärdet lagras ej som UTF8"
-
-#~ msgid "Error during recursive add of '%s'"
-#~ msgstr "Fel vid rekursivt tillägg av \"%s\""
-
-#~ msgid "Failed to add directory '%s': copyfrom arguments not yet supported"
-#~ msgstr "Kunde inte lägga till katalogen \"%s\": \"copyfrom\"-argument stöds inte ännu"
-
-#~ msgid "'%s' has unsupported special file type '%s'"
-#~ msgstr "\"%s\" har en specialfiltyp som inte stöds: \"%s\""
-
-#~ msgid "Unlock request failed"
-#~ msgstr "Upplåsningsförfrågan misslyckades"
-
-#~ msgid "Write-lock stolen in '%s'"
-#~ msgstr "Skrivlås stulet i \"%s\""
-
-#~ msgid "Failed to add file '%s': a non-file object of the same name already exists"
-#~ msgstr "Kunde inte lägga till filen \"%s\": ett objekt med samma namn, som inte är en fil, finns redan"
-
-#~ msgid "Your .svn/tmp directory may be missing or corrupt; run 'svn cleanup' and try again"
-#~ msgstr "Din katalog .svn/tmp saknas eller är trasig; kör \"svn cleanup\" och försök igen"
+msgstr "Oarkiverad lokalt tillagd, kopierad eller flyttad fil eller katalog%s"
diff --git a/subversion/po/zh_CN.po b/subversion/po/zh_CN.po
index 42b3490..a11599d 100644
--- a/subversion/po/zh_CN.po
+++ b/subversion/po/zh_CN.po
@@ -21,6 +21,9 @@
# Update to new pot:
# ../../tools/po/po-update.sh zh_CN
#
+# Merge from trunk:
+# python ../../../../trunk/tools/dev/po-merge.py < ../../../../trunk/subversion/po/zh_CN.po zh_CN.po
+#
# Check translation:
# msgfmt --statistics -c -o zh_CN.mo zh_CN.po
#
@@ -53,1037 +56,1397 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: subversion 1.7\n"
+"Project-Id-Version: subversion 1.8\n"
"Report-Msgid-Bugs-To: dev@subversion.apache.org\n"
-"POT-Creation-Date: 2012-02-27 09:18+0000\n"
-"PO-Revision-Date: 2012-02-27 09:18+0000\n"
+"POT-Creation-Date: 2013-07-03 16:58+0800\n"
+"PO-Revision-Date: 2013-07-03 16:57+0800\n"
"Last-Translator: Subversion Developers <dev@subversion.apache.org>\n"
"Language-Team: Simplified Chinese <dev@subversion.apache.org>\n"
-"Language: \n"
+"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 1.5.5\n"
#. Constructing nice error messages for roots.
#. Build an SVN_ERR_FS_NOT_FOUND error, with a detailed error text,
#. for PATH in ROOT. ROOT is of type svn_fs_root_t *.
+#: ../include/private/svn_fs_util.h:81
#, c-format
msgid "File not found: transaction '%s', path '%s'"
msgstr "没有找到文件: 事务“%sâ€ï¼Œè·¯å¾„ “%sâ€"
+#: ../include/private/svn_fs_util.h:86
#, c-format
msgid "File not found: revision %ld, path '%s'"
msgstr "没有找到文件: 版本“%ldâ€ï¼Œè·¯å¾„ “%sâ€"
#. Build a detailed `file already exists' message for PATH in ROOT.
#. ROOT is of type svn_fs_root_t *.
+#: ../include/private/svn_fs_util.h:97
#, c-format
msgid "File already exists: filesystem '%s', transaction '%s', path '%s'"
msgstr "文件已ç»å­˜åœ¨: 文件系统“%sâ€ï¼Œäº‹åŠ¡â€œ%sâ€ï¼Œè·¯å¾„“%sâ€"
+#: ../include/private/svn_fs_util.h:102
#, c-format
msgid "File already exists: filesystem '%s', revision %ld, path '%s'"
msgstr "文件已ç»å­˜åœ¨: 文件系统“%sâ€ï¼Œç‰ˆæœ¬â€œ%ldâ€ï¼Œè·¯å¾„“%sâ€"
#. ROOT is of type svn_fs_root_t *.
+#: ../include/private/svn_fs_util.h:110
msgid "Root object must be a transaction root"
msgstr "根对象必须是事务的根"
#. SVN_FS__ERR_NOT_MUTABLE: the caller attempted to change a node
#. outside of a transaction. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:117
#, c-format
msgid "File is not mutable: filesystem '%s', revision %ld, path '%s'"
msgstr "文件ä¸æ˜¯å¯å˜çš„: 文件系统“%sâ€ï¼Œç‰ˆæœ¬â€œ%ldâ€ï¼Œè·¯å¾„ “%sâ€"
-#. FS is of type "svn fs_t *".
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:124
#, c-format
msgid "'%s' is not a directory in filesystem '%s'"
msgstr "“%sâ€åœ¨æ–‡ä»¶ç³»ç»Ÿâ€œ%sâ€ä¸­ä¸æ˜¯ç›®å½•"
-#. FS is of type "svn fs_t *".
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:131
#, c-format
msgid "'%s' is not a file in filesystem '%s'"
msgstr "“%sâ€åœ¨æ–‡ä»¶ç³»ç»Ÿâ€œ%sâ€ä¸­ä¸æ˜¯æ–‡ä»¶"
-#. FS is of type "svn fs_t *", LOCK is of type "svn_lock_t *".
+#. FS is of type "svn_fs_t *", LOCK is of type "svn_lock_t *".
+#: ../include/private/svn_fs_util.h:139
#, c-format
msgid "Path '%s' is already locked by user '%s' in filesystem '%s'"
msgstr "路径“%sâ€å·²ç»è¢«ç”¨æˆ·â€œ%sâ€é”定,其文件系统是“%sâ€"
-#. FS is of type "svn fs_t *".
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:146
#, c-format
msgid "No lock on path '%s' in filesystem '%s'"
msgstr "路径“%sâ€æ²¡æœ‰è¢«é”定,其文件系统是“%sâ€"
-#. FS is of type "svn fs_t *".
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:153
#, c-format
msgid "Lock has expired: lock-token '%s' in filesystem '%s'"
msgstr "é”å·²ç»è¿‡æœŸï¼šä»¤ç‰Œ “%sâ€ï¼Œæ–‡ä»¶ç³»ç»Ÿ “%sâ€"
-#. FS is of type "svn fs_t *".
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:160
#, c-format
msgid "No username is currently associated with filesystem '%s'"
msgstr "当å‰æ²¡æœ‰ç”¨æˆ·å称与文件系统“%sâ€å…³è”"
#. SVN_FS__ERR_LOCK_OWNER_MISMATCH: trying to use a lock whose
#. LOCK_OWNER doesn't match the USERNAME associated with FS.
-#. FS is of type "svn fs_t *".
+#. FS is of type "svn_fs_t *".
+#: ../include/private/svn_fs_util.h:169
#, c-format
msgid "User '%s' is trying to use a lock owned by '%s' in filesystem '%s'"
msgstr "用户“%sâ€è¯•å›¾ä½¿ç”¨â€œ%sâ€çš„é”,其文件系统是“%sâ€"
+#: ../include/svn_error_codes.h:164
msgid "Bad parent pool passed to svn_make_pool()"
msgstr "无效的父内存池传递到 svn_make_pool()"
+#: ../include/svn_error_codes.h:168
msgid "Bogus filename"
msgstr "éžæ³•çš„文件å"
+#: ../include/svn_error_codes.h:172
msgid "Bogus URL"
msgstr "éžæ³• URL"
+#: ../include/svn_error_codes.h:176
msgid "Bogus date"
msgstr "éžæ³•æ—¥æœŸ"
+#: ../include/svn_error_codes.h:180
msgid "Bogus mime-type"
msgstr "éžæ³• mime-type"
+#: ../include/svn_error_codes.h:190
msgid "Wrong or unexpected property value"
msgstr "错误或ä¸æœŸæœ›çš„属性值"
+#: ../include/svn_error_codes.h:194
msgid "Version file format not correct"
msgstr "版本文件格å¼ä¸æ­£ç¡®"
+#: ../include/svn_error_codes.h:198
msgid "Path is not an immediate child of the specified directory"
msgstr "路径ä¸æ˜¯æŒ‡å®šç›®å½•çš„直接å­å­™"
+#: ../include/svn_error_codes.h:202
msgid "Bogus UUID"
msgstr "éžæ³• UUID"
+#: ../include/svn_error_codes.h:207 ../include/svn_error_codes.h:944
msgid "Invalid configuration value"
msgstr "无效的é…ç½®å–值"
+#: ../include/svn_error_codes.h:211
msgid "Bogus server specification"
msgstr "å‡çš„æœåŠ¡å™¨è§„æ ¼"
+#: ../include/svn_error_codes.h:215
msgid "Unsupported checksum type"
msgstr "ä¸æ”¯æŒçš„校验和类型"
+#: ../include/svn_error_codes.h:219
msgid "Invalid character in hex checksum"
msgstr "在 16 进制的校验和中å‘现无效字符"
+#: ../include/svn_error_codes.h:224
msgid "Unknown string value of token"
msgstr "未知的字符串令牌值"
+#: ../include/svn_error_codes.h:229
msgid "Invalid changelist name"
msgstr "无效的修改列表å称"
+#: ../include/svn_error_codes.h:234
+msgid "Invalid atomic"
+msgstr "无效原å­"
+
+#: ../include/svn_error_codes.h:240
msgid "No such XML tag attribute"
msgstr "æ²¡æœ‰è¿™ç§ XML 标签属性"
+#: ../include/svn_error_codes.h:244
msgid "<delta-pkg> is missing ancestry"
msgstr "<delta-pkg> 没有祖先"
+#: ../include/svn_error_codes.h:248
msgid "Unrecognized binary data encoding; can't decode"
msgstr "无法识别的二进制数æ®ç¼–ç : 无法解ç "
+#: ../include/svn_error_codes.h:252
msgid "XML data was not well-formed"
msgstr "XML æ•°æ®è¯­æ³•é”™è¯¯"
+#: ../include/svn_error_codes.h:256
msgid "Data cannot be safely XML-escaped"
msgstr "XML æ•°æ®ä¸èƒ½æ­£ç¡®è§£ç "
+#: ../include/svn_error_codes.h:262
msgid "Inconsistent line ending style"
msgstr "ä¸ä¸€è‡´çš„行结æŸæ ·å¼"
+#: ../include/svn_error_codes.h:266
msgid "Unrecognized line ending style"
msgstr "无法识别的行结æŸæ ·å¼"
+#: ../include/svn_error_codes.h:271
msgid "Line endings other than expected"
msgstr "è¡Œæ„外结æŸ"
+#: ../include/svn_error_codes.h:275
msgid "Ran out of unique names"
msgstr "唯一å称耗尽"
+#: ../include/svn_error_codes.h:280
msgid "Framing error in pipe protocol"
msgstr "管é“å议中帧错误"
+#: ../include/svn_error_codes.h:285
msgid "Read error in pipe"
msgstr "管é“读å–错误"
+#: ../include/svn_error_codes.h:289 ../libsvn_subr/cmdline.c:362
+#: ../libsvn_subr/cmdline.c:385 ../svn/util.c:569 ../svnlook/svnlook.c:2008
#, c-format
msgid "Write error"
msgstr "写入错误"
+#: ../include/svn_error_codes.h:294
msgid "Write error in pipe"
msgstr "管é“写入错误"
+#: ../include/svn_error_codes.h:300
msgid "Unexpected EOF on stream"
msgstr "æµæ„外结æŸ"
+#: ../include/svn_error_codes.h:304
msgid "Malformed stream data"
msgstr "éžæ³•æµæ•°æ®"
+#: ../include/svn_error_codes.h:308
msgid "Unrecognized stream data"
msgstr "无法识别的æµæ•°æ®"
+#: ../include/svn_error_codes.h:313
msgid "Stream doesn't support seeking"
msgstr "æµä¸æ”¯æŒå®šä½æ“作"
+#: ../include/svn_error_codes.h:319
msgid "Unknown svn_node_kind"
msgstr "未知的 svn_node_kind"
+#: ../include/svn_error_codes.h:323
msgid "Unexpected node kind found"
msgstr "å‘现æ„外节点ç§ç±»"
+#: ../include/svn_error_codes.h:329
msgid "Can't find an entry"
msgstr "无法找到æ¡ç›®"
+#: ../include/svn_error_codes.h:335
msgid "Entry already exists"
msgstr "æ¡ç›®å·²å­˜åœ¨"
+#: ../include/svn_error_codes.h:339
msgid "Entry has no revision"
msgstr "æ¡ç›®æ²¡æœ‰ç‰ˆæœ¬"
+#: ../include/svn_error_codes.h:343
msgid "Entry has no URL"
msgstr "å…¥å£æ²¡æœ‰ URL"
+#: ../include/svn_error_codes.h:347
msgid "Entry has an invalid attribute"
msgstr "æ¡ç›®æœ‰æ— æ•ˆå±žæ€§"
+#: ../include/svn_error_codes.h:351
msgid "Can't create an entry for a forbidden name"
msgstr "ä¸èƒ½ä¸ºç¦ç”¨çš„å称创建æ¡ç›®"
+#: ../include/svn_error_codes.h:357
msgid "Obstructed update"
msgstr "更新阻塞"
+#: ../include/svn_error_codes.h:362
msgid "Mismatch popping the WC unwind stack"
msgstr "ä¸åŒ¹é…的弹出工作副本展开堆栈"
+#: ../include/svn_error_codes.h:367
msgid "Attempt to pop empty WC unwind stack"
msgstr "试图弹出空的工作副本展开堆栈"
+#: ../include/svn_error_codes.h:372
msgid "Attempt to unlock with non-empty unwind stack"
msgstr "试图解é”éžç©ºå±•å¼€å †æ ˆ"
+#: ../include/svn_error_codes.h:376
msgid "Attempted to lock an already-locked dir"
msgstr "试图é”定已加é”的目录"
+#: ../include/svn_error_codes.h:380
msgid "Working copy not locked; this is probably a bug, please report"
msgstr "工作副本没有é”定;这å¯èƒ½æ˜¯ä¸€ä¸ªæ¼æ´žï¼Œè¯·æŠ¥å‘Š"
+#: ../include/svn_error_codes.h:385
msgid "Invalid lock"
msgstr "无效é”"
+#: ../include/svn_error_codes.h:391 ../include/svn_error_codes.h:397
msgid "Path is not a working copy directory"
msgstr "路径ä¸æ˜¯å·¥ä½œå‰¯æœ¬ç›®å½•"
+#: ../include/svn_error_codes.h:401
msgid "Path is not a working copy file"
msgstr "路径ä¸æ˜¯å·¥ä½œå‰¯æœ¬æ–‡ä»¶"
+#: ../include/svn_error_codes.h:405
msgid "Problem running log"
msgstr "执行日志出错"
+#: ../include/svn_error_codes.h:409
msgid "Can't find a working copy path"
msgstr "找ä¸åˆ°å·¥ä½œå‰¯æœ¬è·¯å¾„"
+#: ../include/svn_error_codes.h:413
msgid "Working copy is not up-to-date"
msgstr "工作副本没有更新到最新版本"
+#: ../include/svn_error_codes.h:417
msgid "Left locally modified or unversioned files"
msgstr "ä¿ç•™æœ¬åœ°ä¿®æ”¹æˆ–未纳入版本控制的文件"
+#: ../include/svn_error_codes.h:421
msgid "Unmergeable scheduling requested on an entry"
msgstr "æ¡ç›®æœ‰æ— æ³•åˆå¹¶çš„调度"
+#: ../include/svn_error_codes.h:425
msgid "Found a working copy path"
msgstr "找到一个工作副本路径"
+#: ../include/svn_error_codes.h:429
msgid "A conflict in the working copy obstructs the current operation"
msgstr "工作副本中的冲çªé˜»æ­¢äº†å½“å‰æ“作"
+#: ../include/svn_error_codes.h:433
msgid "Working copy is corrupt"
msgstr "工作副本已æŸå"
+#: ../include/svn_error_codes.h:437
msgid "Working copy text base is corrupt"
msgstr "工作副本的å‚考文件æŸå"
+#: ../include/svn_error_codes.h:441
msgid "Cannot change node kind"
msgstr "无法修改节点类型"
+#: ../include/svn_error_codes.h:445
msgid "Invalid operation on the current working directory"
msgstr "æ“作对当å‰å·¥ä½œç›®å½•æ— æ•ˆ"
+#: ../include/svn_error_codes.h:449
msgid "Problem on first log entry in a working copy"
msgstr "æ“作工作副本的第一个日志æ¡ç›®å‡ºé”™"
+#: ../include/svn_error_codes.h:453
msgid "Unsupported working copy format"
msgstr "ä¸æ”¯æŒæ­¤å·¥ä½œå‰¯æœ¬æ ¼å¼"
+#: ../include/svn_error_codes.h:457
msgid "Path syntax not supported in this context"
msgstr "此上下文ä¸æ”¯æŒè·¯å¾„语法"
+#: ../include/svn_error_codes.h:462
msgid "Invalid schedule"
msgstr "无效的调度"
+#: ../include/svn_error_codes.h:467
msgid "Invalid relocation"
msgstr "无效é‡å®šä½"
+#: ../include/svn_error_codes.h:472
msgid "Invalid switch"
msgstr "无效的切æ¢"
+#: ../include/svn_error_codes.h:477
msgid "Changelist doesn't match"
msgstr "修改列表ä¸åŒ¹é…"
+#: ../include/svn_error_codes.h:482
msgid "Conflict resolution failed"
msgstr "解决冲çªå¤±è´¥"
+#: ../include/svn_error_codes.h:486
msgid "Failed to locate 'copyfrom' path in working copy"
msgstr "åœ¨å·¥ä½œå‰¯æœ¬ä¸­å®šä½ â€œcopyfrom†的路径失败。"
+#: ../include/svn_error_codes.h:494
msgid "Moving a path from one changelist to another"
msgstr "将路径从一个修改列表移到å¦ä¸€ä¸ª"
+#: ../include/svn_error_codes.h:499
msgid "Cannot delete a file external"
msgstr "无法删除外部文件"
+#: ../include/svn_error_codes.h:504
msgid "Cannot move a file external"
msgstr "无法移动外部文件"
+#: ../include/svn_error_codes.h:509
msgid "Something's amiss with the wc sqlite database"
msgstr "工作副本的 SQLite æ•°æ®åº“有错误"
+#: ../include/svn_error_codes.h:514
msgid "The working copy is missing"
msgstr "工作副本丢失"
+#: ../include/svn_error_codes.h:519
msgid "The specified node is not a symlink"
msgstr "指定的节点ä¸æ˜¯ç¬¦å·è¿žæŽ¥"
+#: ../include/svn_error_codes.h:524
msgid "The specified path has an unexpected status"
msgstr "指定的路径有ä¸æœŸæœ›çš„状æ€"
+#: ../include/svn_error_codes.h:529
msgid "The working copy needs to be upgraded"
msgstr "工作副本需è¦å‡çº§"
-msgid "Previous operation has not finished; run 'cleanup' if it was interrupted"
+#: ../include/svn_error_codes.h:534
+msgid ""
+"Previous operation has not finished; run 'cleanup' if it was interrupted"
msgstr "以å‰çš„æ“作没有完æˆï¼›å¦‚果它被中断,请执行“svn cleanupâ€"
-msgid "The operation can not be performed with the specified depth"
+#: ../include/svn_error_codes.h:540
+msgid "The operation cannot be performed with the specified depth"
msgstr "在指定的深度ä¸èƒ½æ‰§è¡Œæ­¤æ“作"
+#: ../include/svn_error_codes.h:545
msgid "Couldn't open a working copy file because access was denied"
msgstr "ä¸èƒ½æ‰“开工作副本文件,访问被拒ç»"
+#: ../include/svn_error_codes.h:550
+msgid "Mixed-revision working copy was found but not expected"
+msgstr "å‘现了ä¸æœŸæœ›çš„æ··åˆç‰ˆæœ¬çš„工作副本"
+
+#: ../include/svn_error_codes.h:555
+msgid "Duplicate targets in svn:externals property"
+msgstr "svn:externals 属性包å«é‡å¤çš„目标"
+
+#: ../include/svn_error_codes.h:561
msgid "General filesystem error"
msgstr "普通文件系统错误"
+#: ../include/svn_error_codes.h:565
msgid "Error closing filesystem"
msgstr "关闭文件系统出错"
+#: ../include/svn_error_codes.h:569
msgid "Filesystem is already open"
msgstr "文件系统已ç»æ‰“å¼€"
+#: ../include/svn_error_codes.h:573
msgid "Filesystem is not open"
msgstr "文件系统尚未打开"
+#: ../include/svn_error_codes.h:577
msgid "Filesystem is corrupt"
msgstr "文件系统æŸå"
+#: ../include/svn_error_codes.h:581
msgid "Invalid filesystem path syntax"
msgstr "无效文件系统路径语法"
+#: ../include/svn_error_codes.h:585
msgid "Invalid filesystem revision number"
msgstr "无效文件系统版本å·"
+#: ../include/svn_error_codes.h:589
msgid "Invalid filesystem transaction name"
msgstr "无效的文件系统事务å称"
+#: ../include/svn_error_codes.h:593
msgid "Filesystem directory has no such entry"
msgstr "文件系统目录没有此æ¡ç›®"
+#: ../include/svn_error_codes.h:597
msgid "Filesystem has no such representation"
msgstr "文件系统没有此修订版"
+#: ../include/svn_error_codes.h:601
msgid "Filesystem has no such string"
msgstr "文件系统没有此字符串"
+#: ../include/svn_error_codes.h:605
msgid "Filesystem has no such copy"
msgstr "文件系统此副本"
+#: ../include/svn_error_codes.h:609
msgid "The specified transaction is not mutable"
msgstr "指定的事务ä¸å¯æ”¹å˜"
+#: ../include/svn_error_codes.h:613
msgid "Filesystem has no item"
msgstr "文件系统没有æ¡ç›®"
+#: ../include/svn_error_codes.h:617
msgid "Filesystem has no such node-rev-id"
msgstr "文件系统没有此 node-rev-id"
+#: ../include/svn_error_codes.h:621
msgid "String does not represent a node or node-rev-id"
msgstr "字符串ä¸æ˜¯èŠ‚点或 node-rev-id"
+#: ../include/svn_error_codes.h:625
msgid "Name does not refer to a filesystem directory"
msgstr "文件系统无此目录"
+#: ../include/svn_error_codes.h:629
msgid "Name does not refer to a filesystem file"
msgstr "文件系统无此文件"
+#: ../include/svn_error_codes.h:633
msgid "Name is not a single path component"
msgstr "å称ä¸æ˜¯å•ä¸€è·¯å¾„"
+#: ../include/svn_error_codes.h:637
msgid "Attempt to change immutable filesystem node"
msgstr "试图修改ä¸å˜çš„文件系统节点"
+#: ../include/svn_error_codes.h:641
msgid "Item already exists in filesystem"
msgstr "文件系统已有此æ¡ç›®"
+#: ../include/svn_error_codes.h:645
msgid "Attempt to remove or recreate fs root dir"
msgstr "试图删除或é‡å»ºæ–‡ä»¶ç³»ç»Ÿæ ¹ç›®å½•"
+#: ../include/svn_error_codes.h:649
msgid "Object is not a transaction root"
msgstr "对象ä¸æ˜¯äº‹åŠ¡çš„æ ¹"
+#: ../include/svn_error_codes.h:653
msgid "Object is not a revision root"
msgstr "对象ä¸æ˜¯ç‰ˆæœ¬çš„æ ¹"
+#: ../include/svn_error_codes.h:657
msgid "Merge conflict during commit"
msgstr "æ交时å‘生åˆå¹¶å†²çª"
+#: ../include/svn_error_codes.h:661
msgid "A representation vanished or changed between reads"
msgstr "读å–时修订版消失或改å˜"
+#: ../include/svn_error_codes.h:665
msgid "Tried to change an immutable representation"
msgstr "试图修改ä¸å˜çš„修订版"
+#: ../include/svn_error_codes.h:669
msgid "Malformed skeleton data"
msgstr "éžæ³•éª¨æž¶æ•°æ®"
+#: ../include/svn_error_codes.h:673
msgid "Transaction is out of date"
msgstr "事务过时"
+#: ../include/svn_error_codes.h:677
msgid "Berkeley DB error"
msgstr "BDB 错误"
+#: ../include/svn_error_codes.h:681
msgid "Berkeley DB deadlock error"
msgstr "BDB æ­»é”"
+#: ../include/svn_error_codes.h:685
msgid "Transaction is dead"
msgstr "事务已ç»ç»“æŸ"
+#: ../include/svn_error_codes.h:689
msgid "Transaction is not dead"
msgstr "事务尚未结æŸ"
+#: ../include/svn_error_codes.h:694
msgid "Unknown FS type"
msgstr "未知的FS类型"
+#: ../include/svn_error_codes.h:699
msgid "No user associated with filesystem"
msgstr "没有用户与文件系统关è”"
+#: ../include/svn_error_codes.h:704
msgid "Path is already locked"
msgstr "å·²ç»é”定路径"
+#: ../include/svn_error_codes.h:709 ../include/svn_error_codes.h:886
msgid "Path is not locked"
msgstr "路径没有加é”"
+#: ../include/svn_error_codes.h:714
msgid "Lock token is incorrect"
msgstr "ä¸æ­£ç¡®çš„é”定令牌"
+#: ../include/svn_error_codes.h:719
msgid "No lock token provided"
msgstr "没有æä¾›é”定令牌"
+#: ../include/svn_error_codes.h:724
msgid "Username does not match lock owner"
msgstr "用户ä¸æ˜¯é”所有者"
+#: ../include/svn_error_codes.h:729
msgid "Filesystem has no such lock"
msgstr "文件系统没有此é”"
+#: ../include/svn_error_codes.h:734
msgid "Lock has expired"
msgstr "é”过期"
+#: ../include/svn_error_codes.h:739 ../include/svn_error_codes.h:873
msgid "Item is out of date"
msgstr "æ¡ç›®è¿‡æ—¶"
+#: ../include/svn_error_codes.h:751
msgid "Unsupported FS format"
msgstr "ä¸æ”¯æŒçš„文件系统格å¼"
+#: ../include/svn_error_codes.h:756
msgid "Representation is being written"
msgstr "正在写修订版"
+#: ../include/svn_error_codes.h:761
msgid "The generated transaction name is too long"
msgstr "产生的事务å称太长"
+#: ../include/svn_error_codes.h:766
msgid "Filesystem has no such node origin record"
msgstr "文件系统没有此节点的原始记录"
+#: ../include/svn_error_codes.h:771
msgid "Filesystem upgrade is not supported"
msgstr "ä¸æ”¯æŒæ–‡ä»¶ç³»ç»Ÿå‡çº§"
+#: ../include/svn_error_codes.h:776
msgid "Filesystem has no such checksum-representation index record"
msgstr "文件系统没有此校验和展现索引记录"
+#: ../include/svn_error_codes.h:781
msgid "Property value in filesystem differs from the provided base value"
msgstr "文件系统中的属性值与æ供的基础值ä¸åŒ"
+#: ../include/svn_error_codes.h:787
+msgid "The filesystem editor completion process was not followed"
+msgstr "没有è¿è¡Œæ–‡ä»¶ç³»ç»Ÿç¼–辑器完æˆè¿›ç¨‹"
+
+#: ../include/svn_error_codes.h:792
+msgid "A packed revprop could not be read"
+msgstr "ä¸èƒ½è¯»å–打包的 revprop"
+
+#: ../include/svn_error_codes.h:797
+msgid "Could not initialize the revprop caching infrastructure."
+msgstr "ä¸èƒ½åˆå§‹åŒ– revprop 缓存"
+
+#: ../include/svn_error_codes.h:803
msgid "The repository is locked, perhaps for db recovery"
msgstr "版本库被é”,å¯èƒ½æ­£åœ¨æ¢å¤"
+#: ../include/svn_error_codes.h:807
msgid "A repository hook failed"
msgstr "版本库钩å­é”™è¯¯"
+#: ../include/svn_error_codes.h:811
msgid "Incorrect arguments supplied"
msgstr "æ供了ä¸æ­£ç¡®çš„å‚æ•°"
+#: ../include/svn_error_codes.h:815
msgid "A report cannot be generated because no data was supplied"
msgstr "没有数æ®ï¼Œæ— æ³•äº§ç”ŸæŠ¥å‘Š"
+#: ../include/svn_error_codes.h:819
msgid "Bogus revision report"
msgstr "版本报告éžæ³•"
+#: ../include/svn_error_codes.h:828
msgid "Unsupported repository version"
msgstr "ä¸æ”¯æŒæ­¤ç‰ˆæœ¬åº“版本"
+#: ../include/svn_error_codes.h:832
msgid "Disabled repository feature"
msgstr "关闭版本库特性"
+#: ../include/svn_error_codes.h:836
msgid "Error running post-commit hook"
msgstr "执行 post-commit é’©å­é”™è¯¯"
+#: ../include/svn_error_codes.h:841
msgid "Error running post-lock hook"
msgstr "执行 post-lock é’©å­é”™è¯¯"
+#: ../include/svn_error_codes.h:846
msgid "Error running post-unlock hook"
msgstr "执行 post-unlock é’©å­é”™è¯¯"
+#: ../include/svn_error_codes.h:851
msgid "Repository upgrade is not supported"
msgstr "ä¸æ”¯æŒç‰ˆæœ¬åº“å‡çº§"
+#: ../include/svn_error_codes.h:857
msgid "Bad URL passed to RA layer"
msgstr "传递至 RA 层的 URL 错误"
+#: ../include/svn_error_codes.h:861
msgid "Authorization failed"
msgstr "认è¯å¤±è´¥"
+#: ../include/svn_error_codes.h:865
msgid "Unknown authorization method"
msgstr "未知认è¯"
+#: ../include/svn_error_codes.h:869
msgid "Repository access method not implemented"
msgstr "版本库未实现存å–方法"
+#: ../include/svn_error_codes.h:877
msgid "Repository has no UUID"
msgstr "版本库没有 UUID"
+#: ../include/svn_error_codes.h:881
msgid "Unsupported RA plugin ABI version"
msgstr "ä¸æ”¯æŒæ­¤ RA æ’件的 ABI 版本"
+#: ../include/svn_error_codes.h:891
msgid "Server can only replay from the root of a repository"
msgstr "æœåŠ¡å™¨åªèƒ½ä»Žç‰ˆæœ¬åº“çš„æ ¹é‡æ”¾"
+#: ../include/svn_error_codes.h:896
msgid "Repository UUID does not match expected UUID"
msgstr "版本库的 UUID 与期望的 UUID ä¸åŒ¹é…"
+#: ../include/svn_error_codes.h:901
msgid "Repository root URL does not match expected root URL"
msgstr "版本库根 URL 与期望的根 URL ä¸åŒ¹é…"
+#: ../include/svn_error_codes.h:906
msgid "Session URL does not match expected session URL"
msgstr "ä¼šè¯ URL ä¸ŽæœŸæœ›çš„ä¼šè¯ URL ä¸åŒ¹é…"
+#: ../include/svn_error_codes.h:911 ../libsvn_ra_svn/client.c:491
+#, c-format
+msgid "Can't create tunnel"
+msgstr "无法创建隧é“"
+
+#: ../include/svn_error_codes.h:917
msgid "RA layer failed to init socket layer"
msgstr "RA 层无法åˆå§‹åŒ– socket 层"
+#: ../include/svn_error_codes.h:921
msgid "RA layer failed to create HTTP request"
msgstr "RA 层创建 HTTP 请求失败"
+#: ../include/svn_error_codes.h:925
msgid "RA layer request failed"
msgstr "RA 层请求失败"
+#: ../include/svn_error_codes.h:929
msgid "RA layer didn't receive requested OPTIONS info"
msgstr "RA 层无法å–得请求的 OPTIONS ä¿¡æ¯"
+#: ../include/svn_error_codes.h:933
msgid "RA layer failed to fetch properties"
msgstr "RA 层无法å–得属性"
+#: ../include/svn_error_codes.h:937
msgid "RA layer file already exists"
msgstr "RA 层文件已ç»å­˜åœ¨"
+#: ../include/svn_error_codes.h:951
msgid "HTTP Path Not Found"
msgstr "找ä¸åˆ° HTTP 路径"
+#: ../include/svn_error_codes.h:955
msgid "Failed to execute WebDAV PROPPATCH"
msgstr "执行 WebDAV PROPPATCH 失败"
+#: ../include/svn_error_codes.h:960 ../include/svn_error_codes.h:1403
+#: ../libsvn_ra_svn/marshal.c:1075 ../libsvn_ra_svn/marshal.c:1285
+#: ../libsvn_ra_svn/marshal.c:1315
msgid "Malformed network data"
msgstr "éžæ³•ç½‘络数æ®"
+#: ../include/svn_error_codes.h:965
msgid "Unable to extract data from response header"
msgstr "ä¸èƒ½ä»Žå“应的头信æ¯ä¸­èŽ·å–æ•°æ®"
+#: ../include/svn_error_codes.h:970
msgid "Repository has been moved"
msgstr "版本库已ç»ç§»åŠ¨"
+#: ../include/svn_error_codes.h:975 ../libsvn_ra_serf/update.c:2881
+#: ../libsvn_ra_serf/util.c:767
msgid "Connection timed out"
msgstr "连接超时"
+#: ../include/svn_error_codes.h:980
msgid "URL access forbidden for unknown reason"
msgstr "因为未知的ç†ç”±ï¼Œç¦æ­¢è®¿é—® URL"
+#: ../include/svn_error_codes.h:986 ../include/svn_error_codes.h:1407
msgid "Couldn't find a repository"
msgstr "无法找到版本库"
+#: ../include/svn_error_codes.h:990
msgid "Couldn't open a repository"
msgstr "无法打开版本库"
-msgid "Special code for wrapping server errors to report to client"
-msgstr "用专用代ç å°è£…æœåŠ¡å™¨é”™è¯¯ä»¥ä¾¿æŠ¥å‘Šå®¢æˆ·ç«¯"
-
-msgid "Unknown svn protocol command"
-msgstr "未知的 svn å议命令"
-
-msgid "Network connection closed unexpectedly"
-msgstr "网络连接æ„外关闭"
-
-msgid "Network read/write error"
-msgstr "网络读写错误"
-
-msgid "Client/server version mismatch"
-msgstr "客户端/æœåŠ¡å™¨ç‰ˆæœ¬ä¸åŒ¹é…"
-
-msgid "Cannot negotiate authentication mechanism"
-msgstr "无法å商认è¯æœºåˆ¶"
-
-msgid "Editor drive was aborted"
-msgstr "编辑器中止"
-
-msgid "Initialization of SSPI library failed"
-msgstr "åˆå§‹åŒ– SSPI 库失败"
-
-msgid "Server SSL certificate untrusted"
-msgstr "æœåŠ¡å™¨çš„ SSL è¯ä¹¦ä¸è¢«ä¿¡ä»»"
-
-msgid "Initialization of the GSSAPI context failed"
-msgstr "åˆå§‹åŒ– GSSAPI 失败"
-
-msgid "While handling serf response:"
-msgstr "å½“å¤„ç† serf çš„å“应时:"
-
-msgid "Credential data unavailable"
-msgstr "无法å–得凭è¯æ•°æ®"
-
-msgid "No authentication provider available"
-msgstr "没有å¯ç”¨çš„认è¯æ供者"
-
-msgid "All authentication providers exhausted"
-msgstr "所有的认è¯æ供者都ä¸å¯ç”¨"
-
-msgid "Credentials not saved"
-msgstr "没有ä¿å­˜å‡­è¯æ•°æ®"
-
-msgid "Authentication failed"
-msgstr "认è¯å¤±è´¥"
-
-msgid "Read access denied for root of edit"
-msgstr "编辑根目录时拒ç»è¯»å–"
-
-msgid "Item is not readable"
-msgstr "æ¡ç›®ä¸å¯è¯»"
-
-msgid "Item is partially readable"
-msgstr "æ¡ç›®éƒ¨åˆ†å¯è¯»"
-
-msgid "Invalid authz configuration"
-msgstr "认è¯é…置无效"
-
-msgid "Item is not writable"
-msgstr "æ¡ç›®ä¸èƒ½å†™"
-
+#: ../include/svn_error_codes.h:996
msgid "Svndiff data has invalid header"
msgstr "svndiff æ•°æ®åŒ…å«æ— æ•ˆå¤´"
+#: ../include/svn_error_codes.h:1000
msgid "Svndiff data contains corrupt window"
msgstr "Svndiff æ•°æ®åŒ…å«æŸå窗å£"
+#: ../include/svn_error_codes.h:1004
msgid "Svndiff data contains backward-sliding source view"
msgstr "Svndiff æ•°æ®åŒ…å«å‘åŽå˜åŒ–的资æºè§†å›¾"
+#: ../include/svn_error_codes.h:1008
msgid "Svndiff data contains invalid instruction"
msgstr "svndiff æ•°æ®åŒ…å«æ— æ•ˆæŒ‡ä»¤"
+#: ../include/svn_error_codes.h:1012
msgid "Svndiff data ends unexpectedly"
msgstr "svndiff æ•°æ®æ„外结æŸ"
+#: ../include/svn_error_codes.h:1016
msgid "Svndiff compressed data is invalid"
msgstr "éžæ³• svndiff 压缩数æ®"
-msgid "Diff data source modified unexpectedly"
-msgstr "svndiff æ•°æ®è¢«æ„外修改"
-
+#: ../include/svn_error_codes.h:1022
msgid "Apache has no path to an SVN filesystem"
msgstr "Apache æ²¡æœ‰æŒ‡å‘ SVN 文件系统的路径"
+#: ../include/svn_error_codes.h:1026
msgid "Apache got a malformed URI"
msgstr "Apache 得到éžæ³• URI"
+#: ../include/svn_error_codes.h:1030
msgid "Activity not found"
msgstr "没有找到活动项"
+#: ../include/svn_error_codes.h:1034
msgid "Baseline incorrect"
msgstr "基线错误"
+#: ../include/svn_error_codes.h:1038
msgid "Input/output error"
msgstr "输出/输出错误"
+#: ../include/svn_error_codes.h:1044
msgid "A path under version control is needed for this operation"
msgstr "åªèƒ½å¯¹çº³å…¥ç‰ˆæœ¬æŽ§åˆ¶çš„路径执行此æ“作"
+#: ../include/svn_error_codes.h:1048
msgid "Repository access is needed for this operation"
msgstr "æ­¤æ“作需è¦å­˜å–版本库"
+#: ../include/svn_error_codes.h:1052
msgid "Bogus revision information given"
msgstr "给出的版本信æ¯éžæ³•"
+#: ../include/svn_error_codes.h:1056
msgid "Attempting to commit to a URL more than once"
msgstr "试图对 URL 进行多次æ交"
+#: ../include/svn_error_codes.h:1060
msgid "Operation does not apply to binary file"
msgstr "ä¸èƒ½å¯¹äºŒè¿›åˆ¶æ–‡ä»¶æ‰§è¡Œæ­¤æ“作"
+#: ../include/svn_error_codes.h:1066
msgid "Format of an svn:externals property was invalid"
msgstr "svn:externals 属性格å¼éžæ³•"
+#: ../include/svn_error_codes.h:1070
msgid "Attempting restricted operation for modified resource"
msgstr "试图对已修改的资æºè¿›è¡Œå—é™æ“作"
+#: ../include/svn_error_codes.h:1074
msgid "Operation does not apply to directory"
msgstr "ä¸èƒ½å¯¹ç›®å½•æ‰§è¡Œæ­¤æ“作"
+#: ../include/svn_error_codes.h:1078
msgid "Revision range is not allowed"
msgstr "ä¸å…许的版本范围"
+#: ../include/svn_error_codes.h:1082
msgid "Inter-repository relocation not allowed"
msgstr "ä¸æ”¯æŒç‰ˆæœ¬åº“之间的é‡æ–°å®šä½"
+#: ../include/svn_error_codes.h:1086
msgid "Author name cannot contain a newline"
msgstr "作者å称ä¸èƒ½æ¢è¡Œ"
+#: ../include/svn_error_codes.h:1090
msgid "Bad property name"
msgstr "属性å称错误"
+#: ../include/svn_error_codes.h:1095
msgid "Two versioned resources are unrelated"
msgstr "两个纳入版本控制的资æºä¸ç›¸å…³"
+#: ../include/svn_error_codes.h:1100
msgid "Path has no lock token"
msgstr "路径没有é”定令牌"
+#: ../include/svn_error_codes.h:1105
msgid "Operation does not support multiple sources"
msgstr "æ­¤æ“作ä¸æ”¯æŒå¤šä¸ªæºå¯¹è±¡"
+#: ../include/svn_error_codes.h:1110
msgid "No versioned parent directories"
msgstr "没有å—版本控制的父目录"
+#: ../include/svn_error_codes.h:1115 ../include/svn_error_codes.h:1135
msgid "Working copy and merge source not ready for reintegration"
msgstr "工作副本与åˆå¹¶æ¥æºæ²¡æœ‰å‡†å¤‡å¥½å¤å…´"
+#: ../include/svn_error_codes.h:1120
msgid "A file external cannot overwrite an existing versioned item"
msgstr "外部引用的文件ä¸èƒ½è¦†å†™å·²å­˜çš„版本控制的æ¡ç›®"
+#: ../include/svn_error_codes.h:1125
msgid "Invalid path component strip count specified"
msgstr "指定了无效的路径组件修剪计数"
+#: ../include/svn_error_codes.h:1130
msgid "Detected a cycle while processing the operation"
msgstr "当处ç†æ­¤æ“作是,检测到死循环"
+#: ../include/svn_error_codes.h:1140
msgid "Invalid mergeinfo detected in merge target"
msgstr "在åˆå¹¶ç›®æ ‡æ£€æµ‹åˆ°äº†åˆå¹¶ä¿¡æ¯"
+#: ../include/svn_error_codes.h:1145
msgid "Can't perform this operation without a valid lock token"
msgstr "ä¸èƒ½åœ¨æ²¡æœ‰åˆæ³•çš„é”令牌时执行此æ“作"
+#: ../include/svn_error_codes.h:1150
msgid "The operation is forbidden by the server"
msgstr "æ“作被æœåŠ¡å™¨ç¦æ­¢"
+#: ../include/svn_error_codes.h:1156
msgid "A problem occurred; see other errors for details"
msgstr "å‘生问题;请å‚阅其它错误信æ¯"
+#: ../include/svn_error_codes.h:1160
msgid "Failure loading plugin"
msgstr "加载æ’件失败"
+#: ../include/svn_error_codes.h:1164
msgid "Malformed file"
msgstr "文件格å¼é”™è¯¯"
+#: ../include/svn_error_codes.h:1168
msgid "Incomplete data"
msgstr "æ•°æ®ä¸å®Œæ•´"
+#: ../include/svn_error_codes.h:1172
msgid "Incorrect parameters given"
msgstr "å‚æ•°ä¸æ­£ç¡®"
+#: ../include/svn_error_codes.h:1176
msgid "Tried a versioning operation on an unversioned resource"
msgstr "试图对未纳入版本控制的资æºè¿›è¡Œç‰ˆæœ¬æ“作"
+#: ../include/svn_error_codes.h:1180
msgid "Test failed"
msgstr "测试失败"
+#: ../include/svn_error_codes.h:1184
msgid "Trying to use an unsupported feature"
msgstr "试图使用ä¸æ”¯æŒçš„特性"
+#: ../include/svn_error_codes.h:1188
msgid "Unexpected or unknown property kind"
msgstr "æ„外或未知的属性类型"
+#: ../include/svn_error_codes.h:1192
msgid "Illegal target for the requested operation"
msgstr "此请求æ“作的目标éžæ³•"
+#: ../include/svn_error_codes.h:1196
msgid "MD5 checksum is missing"
msgstr "没有 MD5 校验和"
+#: ../include/svn_error_codes.h:1200
msgid "Directory needs to be empty but is not"
msgstr "必须为空的目录有内容"
+#: ../include/svn_error_codes.h:1204
msgid "Error calling external program"
msgstr "调用外部程åºé”™è¯¯"
+#: ../include/svn_error_codes.h:1208
msgid "Python exception has been set with the error"
msgstr "Python 异常被设为错误"
+#: ../include/svn_error_codes.h:1212
msgid "A checksum mismatch occurred"
msgstr "校验和错误"
+#: ../include/svn_error_codes.h:1216
msgid "The operation was interrupted"
msgstr "æ“作被中断"
+#: ../include/svn_error_codes.h:1220
msgid "The specified diff option is not supported"
msgstr "ä¸æ”¯æŒæŒ‡å®šçš„ diff 选项"
+#: ../include/svn_error_codes.h:1224
msgid "Property not found"
msgstr "找ä¸åˆ°å±žæ€§"
+#: ../include/svn_error_codes.h:1228
msgid "No auth file path available"
msgstr "未æä¾› auth 文件路径"
+#: ../include/svn_error_codes.h:1233
msgid "Incompatible library version"
msgstr "ä¸å…¼å®¹çš„库版本"
+#: ../include/svn_error_codes.h:1238
msgid "Mergeinfo parse error"
msgstr "分æžåˆå¹¶ä¿¡æ¯å‡ºé”™"
+#: ../include/svn_error_codes.h:1243
msgid "Cease invocation of this API"
msgstr "åœæ­¢è°ƒç”¨æ­¤ API"
+#: ../include/svn_error_codes.h:1248
msgid "Error parsing revision number"
msgstr "解æžç‰ˆæœ¬å·å‡ºé”™"
+#: ../include/svn_error_codes.h:1253
msgid "Iteration terminated before completion"
msgstr "迭代在完æˆå‰ç»ˆæ­¢"
+#: ../include/svn_error_codes.h:1258
msgid "Unknown changelist"
msgstr "未知修改列表"
+#: ../include/svn_error_codes.h:1263
msgid "Reserved directory name in command line arguments"
msgstr "在命令行å‚数中包å«ä¿ç•™çš„目录å称"
+#: ../include/svn_error_codes.h:1268
msgid "Inquiry about unknown capability"
msgstr "查询未知特性"
+#: ../include/svn_error_codes.h:1273
msgid "Test skipped"
msgstr "跳过测试"
-msgid "apr memcache library not available"
-msgstr "apr memcache 库ä¸å¯ç”¨"
+#: ../include/svn_error_codes.h:1278
+msgid "APR memcache library not available"
+msgstr "APR memcache 库ä¸å¯ç”¨"
+#: ../include/svn_error_codes.h:1283
msgid "Couldn't perform atomic initialization"
msgstr "ä¸èƒ½å®ŒæˆåŽŸå­çš„åˆå§‹åŒ–"
+#: ../include/svn_error_codes.h:1288
msgid "SQLite error"
msgstr "SQLite 错误"
+#: ../include/svn_error_codes.h:1293
msgid "Attempted to write to readonly SQLite db"
msgstr "试图写至åªè¯» SQLite æ•°æ®åº“"
+#: ../include/svn_error_codes.h:1300
msgid "Unsupported schema found in SQLite db"
msgstr "ä¸æ”¯æŒ SQLite æ•°æ®åº“中的方案"
+#: ../include/svn_error_codes.h:1305
msgid "The SQLite db is busy"
msgstr "SQLite æ•°æ®åº“ç¹å¿™"
-msgid "SQLite busy at transaction rollback; resetting all busy SQLite statements to allow rollback"
+#: ../include/svn_error_codes.h:1310
+msgid ""
+"SQLite busy at transaction rollback; resetting all busy SQLite statements to "
+"allow rollback"
msgstr "SQLite 忙于回滚事务; 请é‡ç½®æ‰€æœ‰ç¹å¿™çš„ SQLite 语å¥ï¼Œä»¥ä¾¿å…许回滚"
+#: ../include/svn_error_codes.h:1316
msgid "Constraint error in SQLite db"
msgstr "在 SQLite æ•°æ®åº“中的约æŸå‡ºé”™"
+#: ../include/svn_error_codes.h:1321
+msgid "Too many memcached servers configured"
+msgstr "é…置了太多的 memcached æœåŠ¡å™¨"
+
+#: ../include/svn_error_codes.h:1326
+msgid "Failed to parse version number string"
+msgstr "解æžç‰ˆæœ¬å·å­—符串失败"
+
+#: ../include/svn_error_codes.h:1331
+msgid "Atomic data storage is corrupt"
+msgstr "原å­æ•°æ®å­˜å‚¨æŸå"
+
+#: ../include/svn_error_codes.h:1337
msgid "Error parsing arguments"
msgstr "解æžå‚数出错"
+#: ../include/svn_error_codes.h:1341
msgid "Not enough arguments provided"
msgstr "没有æ供足够的å‚æ•°"
+#: ../include/svn_error_codes.h:1345
msgid "Mutually exclusive arguments specified"
msgstr "å‚数冲çª"
+#: ../include/svn_error_codes.h:1349
msgid "Attempted command in administrative dir"
msgstr "试图在管ç†ç›®å½•ä¸­æ‰§è¡Œå‘½ä»¤"
+#: ../include/svn_error_codes.h:1353
msgid "The log message file is under version control"
msgstr "日志信æ¯æ–‡ä»¶è¢«çº³å…¥ç‰ˆæœ¬æŽ§åˆ¶"
+#: ../include/svn_error_codes.h:1357
msgid "The log message is a pathname"
msgstr "日志信æ¯æ˜¯è·¯å¾„å"
+#: ../include/svn_error_codes.h:1361
msgid "Committing in directory scheduled for addition"
msgstr "在调度增加的目录中进行æ交"
+#: ../include/svn_error_codes.h:1365
msgid "No external editor available"
msgstr "没有外部编辑器å¯ç”¨"
+#: ../include/svn_error_codes.h:1369
msgid "Something is wrong with the log message's contents"
msgstr "日志信æ¯å†…容ä¸å¦¥"
+#: ../include/svn_error_codes.h:1373
msgid "A log message was given where none was necessary"
msgstr "在ä¸éœ€è¦æ—¶ç»™å‡ºæ—¥å¿—ä¿¡æ¯"
+#: ../include/svn_error_codes.h:1377
msgid "No external merge tool available"
msgstr "没有外部åˆå¹¶å·¥å…·å¯ç”¨"
+#: ../include/svn_error_codes.h:1381
msgid "Failed processing one or more externals definitions"
msgstr "处ç†ä¸€ä¸ªæˆ–更多的外部定义失败"
+#: ../include/svn_error_codes.h:1387
+msgid "Special code for wrapping server errors to report to client"
+msgstr "用专用代ç å°è£…æœåŠ¡å™¨é”™è¯¯ä»¥ä¾¿æŠ¥å‘Šå®¢æˆ·ç«¯"
+
+#: ../include/svn_error_codes.h:1391
+msgid "Unknown svn protocol command"
+msgstr "未知的 svn å议命令"
+
+#: ../include/svn_error_codes.h:1395
+msgid "Network connection closed unexpectedly"
+msgstr "网络连接æ„外关闭"
+
+#: ../include/svn_error_codes.h:1399
+msgid "Network read/write error"
+msgstr "网络读写错误"
+
+#: ../include/svn_error_codes.h:1411
+msgid "Client/server version mismatch"
+msgstr "客户端/æœåŠ¡å™¨ç‰ˆæœ¬ä¸åŒ¹é…"
+
+#: ../include/svn_error_codes.h:1416
+msgid "Cannot negotiate authentication mechanism"
+msgstr "无法å商认è¯æœºåˆ¶"
+
+#: ../include/svn_error_codes.h:1421
+msgid "Editor drive was aborted"
+msgstr "编辑器中止"
+
+#: ../include/svn_error_codes.h:1429
+msgid "Credential data unavailable"
+msgstr "无法å–得凭è¯æ•°æ®"
+
+#: ../include/svn_error_codes.h:1433
+msgid "No authentication provider available"
+msgstr "没有å¯ç”¨çš„认è¯æ供者"
+
+#: ../include/svn_error_codes.h:1437
+msgid "All authentication providers exhausted"
+msgstr "所有的认è¯æ供者都ä¸å¯ç”¨"
+
+#: ../include/svn_error_codes.h:1441
+msgid "Credentials not saved"
+msgstr "没有ä¿å­˜å‡­è¯æ•°æ®"
+
+#: ../include/svn_error_codes.h:1446
+msgid "Authentication failed"
+msgstr "认è¯å¤±è´¥"
+
+#: ../include/svn_error_codes.h:1452
+msgid "Read access denied for root of edit"
+msgstr "编辑根目录时拒ç»è¯»å–"
+
+#: ../include/svn_error_codes.h:1457
+msgid "Item is not readable"
+msgstr "æ¡ç›®ä¸å¯è¯»"
+
+#: ../include/svn_error_codes.h:1462
+msgid "Item is partially readable"
+msgstr "æ¡ç›®éƒ¨åˆ†å¯è¯»"
+
+#: ../include/svn_error_codes.h:1466
+msgid "Invalid authz configuration"
+msgstr "认è¯é…置无效"
+
+#: ../include/svn_error_codes.h:1471
+msgid "Item is not writable"
+msgstr "æ¡ç›®ä¸èƒ½å†™"
+
+#: ../include/svn_error_codes.h:1478
+msgid "Diff data source modified unexpectedly"
+msgstr "svndiff æ•°æ®è¢«æ„外修改"
+
+#: ../include/svn_error_codes.h:1484
+msgid "Initialization of SSPI library failed"
+msgstr "åˆå§‹åŒ– SSPI 库失败"
+
+#: ../include/svn_error_codes.h:1488
+msgid "Server SSL certificate untrusted"
+msgstr "æœåŠ¡å™¨çš„ SSL è¯ä¹¦ä¸è¢«ä¿¡ä»»"
+
+#: ../include/svn_error_codes.h:1493
+msgid "Initialization of the GSSAPI context failed"
+msgstr "åˆå§‹åŒ– GSSAPI 失败"
+
+#: ../include/svn_error_codes.h:1498
+msgid "While handling serf response:"
+msgstr "å½“å¤„ç† serf çš„å“应时:"
+
+#: ../include/svn_error_codes.h:1504
msgid "Assertion failure"
msgstr "断言失败"
+#: ../include/svn_error_codes.h:1508
msgid "No non-tracing links found in the error chain"
msgstr "没有å‘现错误链中的éžè·Ÿè¸ªé“¾æŽ¥"
+#: ../libsvn_auth_gnome_keyring/gnome_keyring.c:274
msgid "GNOME Keyring is locked and we are non-interactive"
msgstr "GNOME Keyring 被é”定,并且我们处于éžäº¤äº’æ–¹å¼"
+#: ../libsvn_client/add.c:606 ../libsvn_client/cmdline.c:356
+#: ../libsvn_subr/opt.c:930
+#, c-format
+msgid "'%s' ends in a reserved name"
+msgstr "“%sâ€ä»¥ä¿ç•™å称结æŸ"
+
+#: ../libsvn_client/add.c:875
#, c-format
msgid "'%s' prevents creating parent of '%s'"
msgstr "'%s' 阻止创建 '%s' 的父亲"
+#: ../libsvn_client/add.c:914 ../libsvn_wc/adm_ops.c:731
#, c-format
-msgid "'%s' is an existing item in conflict; please mark the conflict as resolved before adding a new item here"
+msgid ""
+"'%s' is an existing item in conflict; please mark the conflict as resolved "
+"before adding a new item here"
msgstr "æ¡ç›®â€œ%sâ€å¤„于冲çªçŠ¶æ€ï¼›è¯·åœ¨æ–°å¢žä¹‹å‰æ ‡è®°å†²çªä¸ºå·²ç»è§£å†³"
+#: ../libsvn_client/add.c:921 ../libsvn_wc/adm_ops.c:686
+#: ../libsvn_wc/workqueue.c:904 ../libsvn_wc/workqueue.c:998
#, c-format
msgid "'%s' not found"
msgstr "找ä¸åˆ° “%sâ€"
+#: ../libsvn_client/add.c:927 ../libsvn_wc/adm_ops.c:691
+#: ../libsvn_wc/delete.c:98
#, c-format
msgid "Unsupported node kind for path '%s'"
msgstr "路径 “%s†有ä¸æ”¯æŒçš„节点ç§ç±»"
-#, c-format
-msgid "'%s' ends in a reserved name"
-msgstr "“%sâ€ä»¥ä¿ç•™å称结æŸ"
-
+#: ../libsvn_client/add.c:960 ../libsvn_client/changelist.c:65
+#: ../libsvn_client/changelist.c:104 ../libsvn_client/cleanup.c:55
+#: ../libsvn_client/export.c:1392 ../libsvn_client/import.c:815
+#: ../libsvn_client/patch.c:3009 ../libsvn_client/relocate.c:232
+#: ../libsvn_client/resolved.c:121 ../libsvn_client/revert.c:136
+#: ../libsvn_client/status.c:353 ../libsvn_client/switch.c:473
+#: ../libsvn_client/update.c:646 ../libsvn_client/upgrade.c:105
+#: ../svn/util.c:984
#, c-format
msgid "'%s' is not a local path"
msgstr "“%sâ€ä¸æ˜¯æœ¬åœ°è·¯å¾„"
+#: ../libsvn_client/add.c:1001 ../libsvn_client/copy_foreign.c:489
+#: ../libsvn_wc/adm_ops.c:765 ../libsvn_wc/copy.c:715
#, c-format
-msgid "There is no valid uri above '%s'"
-msgstr "在 '%s' 的上级没有åˆæ³•çš„ URI"
+msgid "'%s' is already under version control"
+msgstr "“%sâ€å·²çº³å…¥ç‰ˆæœ¬æŽ§åˆ¶"
+#: ../libsvn_client/add.c:1134 ../libsvn_client/add.c:1161
#, c-format
-msgid "Cannot calculate blame information for binary file '%s'"
-msgstr "无法为二进制文件 “%s†计算追溯信æ¯"
+msgid "There is no valid URI above '%s'"
+msgstr "在 '%s' 的上级没有åˆæ³•çš„ URI"
+#: ../libsvn_client/blame.c:605
msgid "Start revision must precede end revision"
msgstr "起始版本必须å°äºŽç»“æŸç‰ˆæœ¬"
+#: ../libsvn_client/blame.c:633
+#, c-format
+msgid "Cannot calculate blame information for binary file '%s'"
+msgstr "无法为二进制文件 “%s†计算追溯信æ¯"
+
+#: ../libsvn_client/cat.c:77 ../libsvn_client/commit_util.c:610
+#: ../libsvn_client/delete.c:81 ../libsvn_client/prop_commands.c:833
+#: ../libsvn_client/prop_commands.c:1388 ../libsvn_client/revisions.c:104
+#: ../libsvn_wc/adm_ops.c:1196 ../libsvn_wc/adm_ops.c:1246
+#: ../libsvn_wc/copy.c:563 ../libsvn_wc/copy.c:624 ../libsvn_wc/entries.c:1301
+#: ../libsvn_wc/entries.c:2681 ../libsvn_wc/entries.c:2712
+#: ../svn/notify.c:1095
#, c-format
msgid "'%s' is not under version control"
msgstr "“%s†尚未纳入版本控制"
+#: ../libsvn_client/cat.c:82
#, c-format
msgid "'%s' refers to a directory"
msgstr "“%s†引用一个目录"
+#: ../libsvn_client/cat.c:92
#, c-format
-msgid "'%s' has no base revision until it is committed"
+msgid "'%s' has no pristine version until it is committed"
msgstr "在æ交之å‰ï¼Œâ€œ%sâ€æ²¡æœ‰åŸºç¡€ç‰ˆæœ¬"
+#: ../libsvn_client/cat.c:147 ../libsvn_client/export.c:388
msgid "(local)"
msgstr "(本地)"
+#: ../libsvn_client/cat.c:247
#, c-format
msgid "URL '%s' refers to a directory"
msgstr "URL “%s†指å‘目录"
+#: ../libsvn_client/changelist.c:57
msgid "Target changelist name must not be empty"
msgstr "目标修改列表的å称ä¸èƒ½ä¸ºç©º"
+#: ../libsvn_client/checkout.c:109 ../libsvn_client/export.c:1445
#, c-format
msgid "URL '%s' doesn't exist"
msgstr "URL “%s†ä¸å­˜åœ¨"
+#: ../libsvn_client/checkout.c:113
#, c-format
msgid "URL '%s' refers to a file, not a directory"
msgstr "URL “%s†指å‘一个文件,ä¸æ˜¯ç›®å½•"
+#: ../libsvn_client/checkout.c:147
#, c-format
msgid "'%s' is already a working copy for a different URL"
msgstr "“%s†已ç»æ˜¯æŒ‡å‘ä¸åŒ URL 的工作副本"
+#: ../libsvn_client/checkout.c:155
#, c-format
msgid "'%s' already exists and is not a directory"
msgstr "“%s†已ç»å­˜åœ¨å¹¶ä¸”ä¸æ˜¯ç›®å½•"
-#, c-format
-msgid "Improper relative URL '%s'"
-msgstr "ä¸æ­£ç¡®çš„相对 URL“%sâ€"
-
+#: ../libsvn_client/cmdline.c:104
#, c-format
msgid "All non-relative targets must have the same root URL"
msgstr "所有éžç›¸å¯¹ç›®æ ‡å¿…须有相åŒçš„æ ¹ URL"
-msgid "Resolving '^/': no repository root found in the target arguments or in the current directory"
+#: ../libsvn_client/cmdline.c:312
+msgid ""
+"Resolving '^/': no repository root found in the target arguments or in the "
+"current directory"
msgstr "解æžâ€œ^/â€: 在目标å‚数或当å‰ç›®å½•ä¸­æ‰¾ä¸åˆ°ç‰ˆæœ¬åº“çš„æ ¹"
-#, c-format
-msgid "%s property on '%s' contains unrecognized EOL-style '%s'"
-msgstr "属性 %s (对象 '%s') 包å«ä¸å¯è¯†åˆ«çš„行结æŸç¬¦å· '%s'"
-
-#, c-format
-msgid "Unknown or unversionable type for '%s'"
-msgstr "“%s†是未知类型或ä¸å¯çº³å…¥ç‰ˆæœ¬æŽ§åˆ¶"
-
-msgid "New entry name required when importing a file"
-msgstr "导入文件时,需è¦ä¸€ä¸ªæ–°çš„æ¡ç›®å称"
-
-#, c-format
-msgid "'%s' does not exist"
-msgstr "“%s†ä¸å­˜åœ¨"
-
-#, c-format
-msgid "Path '%s' does not exist"
-msgstr "路径 “%s†ä¸å­˜åœ¨"
-
-#, c-format
-msgid "Path '%s' already exists"
-msgstr "路径 “%s†已ç»å­˜åœ¨"
-
-#, c-format
-msgid "'%s' is a reserved name and cannot be imported"
-msgstr "“%s†是ä¿ç•™å称,无法被导入"
-
+#: ../libsvn_client/commit.c:155 ../libsvn_client/copy.c:1510
msgid "Commit failed (details follow):"
msgstr "æ交失败(细节如下): "
+#: ../libsvn_client/commit.c:163
msgid "Commit succeeded, but other errors follow:"
msgstr "æ交æˆåŠŸï¼Œä½†æ˜¯å‘生了其它错误,细节如下: "
+#: ../libsvn_client/commit.c:170
msgid "Error unlocking locked dirs (details follow):"
msgstr "解除é”定目录出错(细节如下): "
+#: ../libsvn_client/commit.c:181
msgid "Error bumping revisions post-commit (details follow):"
msgstr "执行 post-commit 出错 (细节如下): "
+#: ../libsvn_client/commit.c:307
#, c-format
-msgid "Cannot delete the directory '%s' in a non-recursive commit because it has children"
+msgid ""
+"Cannot delete the directory '%s' in a non-recursive commit because it has "
+"children"
msgstr "因为目录“%sâ€éžç©ºï¼Œå› æ­¤ä¸èƒ½åœ¨éžé€’å½’æ交中删除它"
+#: ../libsvn_client/commit.c:606
#, c-format
msgid "'%s' is a URL, but URLs cannot be commit targets"
msgstr "“%s†是 URL,但是 URL ä¸å¯ä½œä¸ºæ交目标"
+#: ../libsvn_client/commit.c:728
msgid ""
"Commit can only commit to a single repository at a time.\n"
"Are all targets part of the same working copy?"
@@ -1091,353 +1454,538 @@ msgstr ""
"æ¯æ¬¡æ交åªèƒ½é’ˆå¯¹ä¸€ä¸ªç‰ˆæœ¬åº“。\n"
"是å¦æ‰€æœ‰ç›®æ ‡éƒ½å±žäºŽåŒä¸€å·¥ä½œå‰¯æœ¬ï¼Ÿ"
+#: ../libsvn_client/commit.c:844
+#, c-format
+msgid ""
+"Cannot commit '%s' because it was moved from '%s' which is not part of the "
+"commit; both sides of the move must be committed together"
+msgstr ""
+
+#: ../libsvn_client/commit.c:875
+#, c-format
+msgid ""
+"Cannot commit '%s' because it was moved to '%s' which is not part of the "
+"commit; both sides of the move must be committed together"
+msgstr ""
+
+#: ../libsvn_client/commit_util.c:94 ../libsvn_repos/commit.c:167
#, c-format
msgid "Directory '%s' is out of date"
msgstr "目录 “%s†已ç»è¿‡æ—¶"
+#: ../libsvn_client/commit_util.c:95 ../libsvn_repos/commit.c:169
#, c-format
msgid "File '%s' is out of date"
msgstr "文件 “%s†已ç»è¿‡æ—¶"
+#: ../libsvn_client/commit_util.c:130
#, c-format
msgid "Directory '%s' is locked in another working copy"
msgstr "目录“%sâ€åœ¨å…¶å®ƒå·¥ä½œå‰¯æœ¬ä¸­è¢«é”定"
+#: ../libsvn_client/commit_util.c:131
#, c-format
msgid "File '%s' is locked in another working copy"
msgstr "文件“%s†在其它工作副本中被é”定"
+#: ../libsvn_client/commit_util.c:166
#, c-format
msgid "Changing directory '%s' is forbidden by the server"
msgstr "æœåŠ¡å™¨ç¦æ­¢ä¿®æ”¹ç›®å½•â€œ%sâ€"
+#: ../libsvn_client/commit_util.c:167
#, c-format
msgid "Changing file '%s' is forbidden by the server"
msgstr "æœåŠ¡å™¨ç¦æ­¢ä¿®æ”¹æ–‡ä»¶â€œ%sâ€"
-#, c-format
-msgid "Aborting commit: '%s' remains in conflict"
-msgstr "æ交终止: “%s†处于冲çªçŠ¶æ€"
-
+#: ../libsvn_client/commit_util.c:315
#, c-format
msgid "Aborting commit: '%s' remains in tree-conflict"
msgstr "æ交终止: “%s†ä»å¤„于树冲çªçŠ¶æ€"
+#: ../libsvn_client/commit_util.c:666
#, c-format
-msgid "Unknown entry kind for '%s'"
-msgstr "“%s†有未知的æ¡ç›®ç±»åž‹"
+msgid "Aborting commit: '%s' remains in conflict"
+msgstr "æ交终止: “%s†处于冲çªçŠ¶æ€"
+#: ../libsvn_client/commit_util.c:685
#, c-format
-msgid "Entry '%s' has unexpectedly changed special status"
-msgstr "æ¡ç›® “%s†æ„外改å˜çŠ¶æ€"
+msgid "Node '%s' has unexpectedly changed kind"
+msgstr "节点 “%s†的类型æ„外改å˜"
+#: ../libsvn_client/commit_util.c:726
#, c-format
msgid "'%s' is scheduled for addition, but is missing"
msgstr "丢失了预定增加的“%sâ€"
+#: ../libsvn_client/commit_util.c:1212
#, c-format
-msgid "'%s' is not known to exist in the repository and is not part of the commit, yet its child '%s' is part of the commit"
-msgstr "“%s†ä¸åœ¨ç‰ˆæœ¬åº“中,也ä¸æ˜¯æ交的一部分,但是它的å­è·¯å¾„ “%s†是æ交的一部分"
+msgid ""
+"'%s' is not known to exist in the repository and is not part of the commit, "
+"yet its child '%s' is part of the commit"
+msgstr ""
+"“%s†ä¸åœ¨ç‰ˆæœ¬åº“中,也ä¸æ˜¯æ交的一部分,但是它的å­è·¯å¾„ “%s†是æ交的一部分"
+#: ../libsvn_client/commit_util.c:1351
#, c-format
msgid "Cannot commit both '%s' and '%s' as they refer to the same URL"
msgstr "无法åŒæ—¶æ交 “%s†与 “%sâ€ï¼Œå› ä¸ºå®ƒä»¬éƒ½æŒ‡å‘åŒä¸€ä¸ª URL"
+#: ../libsvn_client/commit_util.c:1502
#, c-format
msgid "Commit item '%s' has copy flag but no copyfrom URL"
msgstr "æ交项目 “%s†有å¤åˆ¶æ ‡è®°ï¼Œä½†æ˜¯æ²¡æœ‰æºåœ°å€(copyfrom URL)"
+#: ../libsvn_client/commit_util.c:1507
#, c-format
msgid "Commit item '%s' has copy flag but an invalid revision"
msgstr "æ交项目 “%s†有å¤åˆ¶æ ‡å¿—,但是版本无效"
+#: ../libsvn_client/commit_util.c:1969
msgid "Standard properties can't be set explicitly as revision properties"
msgstr "标准属性ä¸èƒ½è®¾ç½®ä¸ºç‰ˆæœ¬å±žæ€§"
+#: ../libsvn_client/copy.c:427
+#, c-format
+msgid "Path '%s' exists, but is excluded"
+msgstr "路径 “%s†存在,但被排除"
+
+#: ../libsvn_client/copy.c:433 ../libsvn_client/copy.c:1050
+#: ../libsvn_client/copy.c:1309 ../libsvn_client/copy.c:1884
+#: ../libsvn_client/import.c:862
+#, c-format
+msgid "Path '%s' already exists"
+msgstr "路径 “%s†已ç»å­˜åœ¨"
+
+#: ../libsvn_client/copy.c:488
+#, c-format
+msgid "Path '%s' already exists as unversioned node"
+msgstr "路径 “%s†已ç»ä½œä¸ºéžç‰ˆæœ¬æŽ§åˆ¶èŠ‚点存在"
+
+#: ../libsvn_client/copy.c:510 ../libsvn_client/copy.c:520
+#: ../libsvn_client/copy.c:1900
#, c-format
msgid "Path '%s' is not a directory"
msgstr "路径 “%s†ä¸æ˜¯ç›®å½•"
+#: ../libsvn_client/copy.c:559 ../libsvn_client/merge.c:10116
+#: ../svnlook/svnlook.c:1424
+#, c-format
+msgid "Path '%s' does not exist"
+msgstr "路径 “%s†ä¸å­˜åœ¨"
+
+#: ../libsvn_client/copy.c:729 ../libsvn_client/copy.c:770
#, c-format
msgid "Path '%s' already exists, but is not a directory"
msgstr "路径 “%s†已ç»å­˜åœ¨ï¼Œä½†ä¸æ˜¯ç›®å½•"
+#: ../libsvn_client/copy.c:831
msgid "Source and destination URLs appear not to point to the same repository."
msgstr "æ¥æºä¸Žç›®æ ‡ URL 似乎ä¸åœ¨åŒä¸€ç‰ˆæœ¬åº“。"
+#: ../libsvn_client/copy.c:1040 ../libsvn_client/prop_commands.c:167
#, c-format
msgid "Path '%s' does not exist in revision %ld"
msgstr "路径 “%s†ä¸åœ¨ç‰ˆæœ¬ %ld 中"
-#, c-format
-msgid "Source URL '%s' is from foreign repository; leaving it as a disjoint WC"
-msgstr "æº URL “%s†æ¥è‡ªå…¶å®ƒç‰ˆæœ¬åº“;把它当作脱离的工作副本"
-
-#, c-format
-msgid "'%s' is already under version control"
-msgstr "“%sâ€å·²çº³å…¥ç‰ˆæœ¬æŽ§åˆ¶"
-
-#, c-format
-msgid "Entry for '%s' exists (though the working file is missing)"
-msgstr "“%s†的入å£å­˜åœ¨(尽管丢失了工作文件)"
-
+#: ../libsvn_client/copy.c:1868
#, c-format
msgid "Path '%s' not found in revision %ld"
msgstr "路径 “%s†ä¸åœ¨ç‰ˆæœ¬ %ld 中"
+#: ../libsvn_client/copy.c:1873
#, c-format
msgid "Path '%s' not found in head revision"
msgstr "HEAD 版本中找ä¸åˆ°è·¯å¾„ “%sâ€"
+#: ../libsvn_client/copy.c:2001
msgid "Cannot mix repository and working copy sources"
msgstr "ä¸èƒ½åœ¨æºä¸­æ··åˆç‰ˆæœ¬åº“和工作副本"
+#: ../libsvn_client/copy.c:2053
#, c-format
msgid "Cannot copy path '%s' into its own child '%s'"
msgstr "无法å¤åˆ¶è·¯å¾„ “%s†到其å­ç›®å½• “%s†中"
+#: ../libsvn_client/copy.c:2089
#, c-format
-msgid "Cannot move the external at '%s'; please edit the svn:externals property on '%s'."
+msgid ""
+"Cannot move the external at '%s'; please edit the svn:externals property on "
+"'%s'."
msgstr "ä¸èƒ½ç§»åŠ¨åœ¨â€œ%sâ€çš„外部引用;请在“%sâ€ä¿®æ”¹å±žæ€§ svn:externals property 。"
+#: ../libsvn_client/copy.c:2104
msgid "Moves between the working copy and the repository are not supported"
msgstr "ä¸æ”¯æŒåœ¨å·¥ä½œå‰¯æœ¬å’Œç‰ˆæœ¬åº“之间移动"
+#: ../libsvn_client/copy.c:2119
#, c-format
msgid "Cannot move URL '%s' into itself"
msgstr "无法移动 URL “%s†到本身"
+#: ../libsvn_client/copy.c:2120
#, c-format
msgid "Cannot move path '%s' into itself"
msgstr "无法移动路径 “%s†到本身"
+#: ../libsvn_client/copy.c:2187
#, c-format
msgid "'%s' does not have a URL associated with it"
msgstr "“%s†没有关è”çš„ URL"
+#: ../libsvn_client/copy_foreign.c:131 ../libsvn_client/copy_foreign.c:282
+#: ../libsvn_client/externals.c:904 ../libsvn_client/externals.c:1103
+#: ../libsvn_wc/update_editor.c:1119
+#, c-format
+msgid "Path '%s' is not in the working copy"
+msgstr "路径 “%s†ä¸åœ¨å·¥ä½œå‰¯æœ¬ä¸­"
+
+#: ../libsvn_client/copy_foreign.c:372 ../libsvn_client/export.c:812
+#: ../libsvn_client/repos_diff.c:998 ../libsvn_fs_fs/dag.c:1051
+#: ../libsvn_ra_svn/client.c:1185 ../libsvn_wc/diff_editor.c:1977
+#: ../libsvn_wc/diff_editor.c:2056 ../libsvn_wc/externals.c:651
+#: ../libsvn_wc/update_editor.c:4205
+#, c-format
+msgid "Checksum mismatch for '%s'"
+msgstr "'%s' 的校验和ä¸åŒ¹é…"
+
+#: ../libsvn_client/copy_foreign.c:479
+#, c-format
+msgid "'%s' is not a valid location inside a repository"
+msgstr "“%sâ€åœ¨ç‰ˆæœ¬åº“中ä¸æ˜¯åˆæ³•çš„ä½ç½®"
+
+#: ../libsvn_client/copy_foreign.c:510
+#, c-format
+msgid "Can't add '%s', because no parent directory is found"
+msgstr "ä¸èƒ½å¢žåŠ â€œ%sâ€ï¼Œå› ä¸ºæ²¡æœ‰å‘现它的父目录"
+
+#: ../libsvn_client/delete.c:76
#, c-format
msgid "'%s' is in the way of the resource actually under version control"
msgstr "“%s†阻ç¢èµ„æºçº³å…¥ç‰ˆæœ¬æŽ§åˆ¶"
+#: ../libsvn_client/delete.c:95
#, c-format
msgid "'%s' has local modifications -- commit or revert them first"
msgstr "“%s†已有本地修改 -- 请先æ交或撤销"
+#: ../libsvn_client/delete.c:127
#, c-format
-msgid "Cannot remove the external at '%s'; please edit or delete the svn:externals property on '%s'"
+msgid ""
+"Cannot remove the external at '%s'; please edit or delete the svn:externals "
+"property on '%s'"
msgstr "ä¸èƒ½åœ¨â€œ%sâ€åˆ é™¤å¤–部引用;请在“%sâ€ä¿®æ”¹æˆ–删除属性 svn:externals"
+#: ../libsvn_client/deprecated.c:862 ../svn/move-cmd.c:65
msgid "Cannot specify revisions (except HEAD) with move operations"
msgstr "移动æ“作ä¸èƒ½æŒ‡å®šç‰ˆæœ¬"
+#: ../libsvn_client/deprecated.c:1624
msgid "No commits in repository"
msgstr "版本库中没有æ交"
+#: ../libsvn_client/deprecated.c:2930 ../libsvn_wc/deprecated.c:3953
msgid "Non-recursive relocation not supported"
msgstr "ä¸æ”¯æŒéžé€’å½’çš„é‡æ–°å®šä½"
-#, c-format
-msgid " Reverse-merged %s:r%s%s"
-msgstr " å·²ç»æ’¤é”€åˆå¹¶ %s:r%s%s"
-
-#, c-format
-msgid " Merged %s:r%s%s"
-msgstr " å·²ç»åˆå¹¶ %s:r%s%s"
-
+#. Utilities
+#: ../libsvn_client/diff.c:64
#, c-format
msgid "Path '%s' must be an immediate child of the directory '%s'"
msgstr "路径 “%s†必须是目录 “%s†的直接å­å­™"
+#: ../libsvn_client/diff.c:258
#, c-format
msgid "%s\t(revision %ld)"
msgstr "%s\t(版本 %ld)"
+#: ../libsvn_client/diff.c:260
#, c-format
msgid "%s\t(working copy)"
msgstr "%s\t(工作副本)"
+#: ../libsvn_client/diff.c:512 ../svnlook/svnlook.c:794
#, c-format
msgid "%sProperty changes on: %s%s"
msgstr "%s 属性改å˜: %s%s"
+#: ../libsvn_client/diff.c:760
#, c-format
msgid "Cannot display: file marked as a binary type.%s"
msgstr "无法显示: 文件标记为二进制类型。%s"
-#, c-format
-msgid "Path '%s' has no URL"
-msgstr "路径 '%s' 没有 URL"
-
+#: ../libsvn_client/diff.c:1265 ../libsvn_client/merge.c:7176
+#: ../libsvn_client/merge.c:10523
msgid "Not all required revisions are specified"
msgstr "没有全部æ供需è¦çš„版本"
-msgid "At least one revision must be non-local for a pegged diff"
-msgstr "对于铆钉差异,必须至少有一个éžæœ¬åœ°ç‰ˆæœ¬"
+#: ../libsvn_client/diff.c:1279
+msgid ""
+"At least one revision must be something other than BASE or WORKING when "
+"diffing a URL"
+msgstr "è¦æ¯”较 URL 的时候,必须有一个版本,既ä¸æ˜¯åŸºç¡€ç‰ˆæœ¬ï¼Œåˆä¸æ˜¯å·¥ä½œç‰ˆæœ¬"
+#: ../libsvn_client/diff.c:1316
#, c-format
msgid "Diff target '%s' was not found in the repository at revision '%ld'"
msgstr "差异目标 '%s' ä¸åœ¨ç‰ˆæœ¬åº“的版本 '%ld' 中"
+#: ../libsvn_client/diff.c:1321
#, c-format
-msgid "Diff target '%s' was not found in the repository at revision '%ld' or '%ld'"
+msgid ""
+"Diff target '%s' was not found in the repository at revision '%ld' or '%ld'"
msgstr "差异目标 '%s' ä¸åœ¨ç‰ˆæœ¬åº“的版本 '%ld' 或 '%ld' 中"
+#: ../libsvn_client/diff.c:1496
#, c-format
-msgid "Diff target '%s' was not found in the repository at revisions '%ld' and '%ld'"
+msgid ""
+"Diff target '%s' was not found in the repository at revisions '%ld' and '%ld'"
msgstr "差异目标 '%s' ä¸åœ¨ç‰ˆæœ¬åº“的版本 '%ld' å’Œ '%ld' 中"
+#: ../libsvn_client/diff.c:1501
#, c-format
-msgid "Diff targets '%s and '%s' were not found in the repository at revisions '%ld' and '%ld'"
+msgid ""
+"Diff targets '%s' and '%s' were not found in the repository at revisions "
+"'%ld' and '%ld'"
msgstr "差异目标 '%s' 与 '%s' ä¸åœ¨ç‰ˆæœ¬åº“的版本 '%ld' å’Œ '%ld' 中"
-msgid "Sorry, svn_client_diff5 was called in a way that is not yet supported"
-msgstr "抱歉,svn_client_diff5 å°šä¸æ”¯æŒè¿™ç§è°ƒç”¨æ–¹å¼"
+#: ../libsvn_client/diff.c:1575
+msgid "Sorry, svn_client_diff6 was called in a way that is not yet supported"
+msgstr "抱歉,svn_client_diff6 å°šä¸æ”¯æŒè¿™ç§è°ƒç”¨æ–¹å¼"
+
+#: ../libsvn_client/diff.c:1616
+msgid ""
+"Only diffs between a path's text-base and its working files are supported at "
+"this time"
+msgstr "当å‰åªæ”¯æŒçº¯æ–‡æœ¬ç±»åž‹çš„å‚考文件与其工作文件比较比较差异"
+
+#: ../libsvn_client/diff.c:2221
+msgid ""
+"Summarized diffs are only supported between a path's text-base and its "
+"working files at this time"
+msgstr "当å‰æ¦‚è¦å·®å¼‚åªæ”¯æŒå‚考文件与其工作文件比较"
-msgid "Only diffs between a path's text-base and its working files are supported at this time"
-msgstr "å½“å‰ diff åªæ”¯æŒå‚考文件与其工作文件比较"
+#: ../libsvn_client/diff.c:2582 ../libsvn_client/diff.c:2648
+msgid "Cannot ignore properties and show only properties at the same time"
+msgstr ""
+#: ../libsvn_client/diff_local.c:609
#, c-format
-msgid "Directory '%s' has no URL"
-msgstr "目录 “%s†没有 URL"
+msgid "'%s' is not the same node kind as '%s'"
+msgstr "'%s' 与 '%s' 的节点类型ä¸åŒ"
-msgid "Summarizing diff can only compare repository to repository"
-msgstr "åªæœ‰ç‰ˆæœ¬åº“和版本库æ‰èƒ½æ¯”较差异概è¦"
+#: ../libsvn_client/diff_local.c:629 ../libsvn_wc/props.c:1568
+#, c-format
+msgid "'%s' is not a file or directory"
+msgstr "“%sâ€ä¸æ˜¯æ–‡ä»¶æˆ–目录"
+#: ../libsvn_client/export.c:102
#, c-format
msgid "'%s' is not a valid EOL value"
msgstr "“%s†ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„ EOL 值"
+#: ../libsvn_client/export.c:240
msgid "Destination directory exists, and will not be overwritten unless forced"
msgstr "目的目录已存在,除éžå¼ºè¿«ä¸ºä¹‹ï¼Œå¦åˆ™ä¸ä¼šè¦†ç›–"
+#: ../libsvn_client/export.c:265 ../libsvn_client/export.c:1525
+#: ../libsvn_wc/adm_crawler.c:1204 ../libsvn_wc/conflicts.c:1293
+#: ../libsvn_wc/copy.c:586 ../libsvn_wc/crop.c:235 ../libsvn_wc/crop.c:326
+#: ../libsvn_wc/info.c:403 ../libsvn_wc/node.c:704 ../libsvn_wc/props.c:227
+#: ../libsvn_wc/status.c:2781 ../libsvn_wc/wc_db.c:2497
+#: ../libsvn_wc/wc_db.c:2691 ../libsvn_wc/wc_db.c:2715
+#: ../libsvn_wc/wc_db.c:2873 ../libsvn_wc/wc_db.c:3864
+#: ../libsvn_wc/wc_db.c:5883 ../libsvn_wc/wc_db.c:6203
+#: ../libsvn_wc/wc_db.c:6364 ../libsvn_wc/wc_db.c:6518
+#: ../libsvn_wc/wc_db.c:8343 ../libsvn_wc/wc_db.c:8800
+#: ../libsvn_wc/wc_db.c:9429 ../libsvn_wc/wc_db.c:9576
+#: ../libsvn_wc/wc_db.c:9716 ../libsvn_wc/wc_db.c:10066
+#: ../libsvn_wc/wc_db.c:11553 ../libsvn_wc/wc_db.c:11629
+#: ../libsvn_wc/wc_db.c:13163 ../libsvn_wc/wc_db.c:13223
+#: ../libsvn_wc/wc_db.c:13361 ../libsvn_wc/wc_db.c:13519
+#: ../libsvn_wc/wc_db.c:13956 ../libsvn_wc/wc_db.c:14737
+#, c-format
+msgid "The node '%s' was not found."
+msgstr "找ä¸åˆ°èŠ‚点 '%s'。"
+
+#: ../libsvn_client/export.c:283 ../libsvn_client/export.c:1182
+#: ../libsvn_client/export.c:1239
#, c-format
msgid "Destination file '%s' exists, and will not be overwritten unless forced"
msgstr "目标文件“%sâ€å·²å­˜åœ¨ï¼Œé™¤éžå¼ºè¿«ä¸ºä¹‹ï¼Œå¦åˆ™ä¸ä¼šè¢«è¦†ç›–"
+#: ../libsvn_client/export.c:289 ../libsvn_client/export.c:1187
+#: ../libsvn_client/export.c:1244
#, c-format
msgid "Destination '%s' exists. Cannot overwrite directory with non-directory"
msgstr "目标“%sâ€å·²å­˜åœ¨ã€‚ä¸èƒ½ç”¨éžç›®å½•è¦†ç›–目录"
+#: ../libsvn_client/export.c:471 ../libsvn_client/export.c:620
+#: ../libsvn_client/export.c:1076
#, c-format
msgid "'%s' exists and is not a directory"
msgstr "“%s†已存在且ä¸æ˜¯ç›®å½•"
+#: ../libsvn_client/export.c:475 ../libsvn_client/export.c:624
+#: ../libsvn_client/export.c:1080
#, c-format
msgid "'%s' already exists"
msgstr "“%s†已存在"
+#: ../libsvn_client/externals.c:406
#, c-format
-msgid "Checksum mismatch for '%s'"
-msgstr "'%s' 的校验和ä¸åŒ¹é…"
-
-#, c-format
-msgid "Cannot insert a file external defined on '%s' into the working copy '%s'."
+msgid ""
+"Cannot insert a file external defined on '%s' into the working copy '%s'."
msgstr "ä¸èƒ½å°†åœ¨â€œ%sâ€å®šä¹‰çš„文件外部引用æ’入到工作副本“%sâ€ã€‚"
+#: ../libsvn_client/externals.c:431
#, c-format
-msgid "The file external from '%s' cannot overwrite the existing versioned item at '%s'"
+msgid ""
+"The file external from '%s' cannot overwrite the existing versioned item at "
+"'%s'"
msgstr "æ¥æºäºŽ “%s†的外部引用的文件ä¸èƒ½è¦†å†™ä½äºŽ “%s†的已存版本控制æ¡ç›®"
+#: ../libsvn_client/externals.c:444
#, c-format
msgid "The file external '%s' can not be created because the node exists."
msgstr "ä¸èƒ½åˆ›å»ºæ–‡ä»¶å¤–部引用 '%s',节点已ç»å­˜åœ¨ã€‚"
+#: ../libsvn_client/externals.c:703
#, c-format
-msgid "URL '%s' does not begin with a scheme"
-msgstr "URL “%s†没有以方案开始"
+msgid "URL '%s' at revision %ld doesn't exist"
+msgstr "URL “%s†在版本 %ld 中ä¸å­˜åœ¨"
+#: ../libsvn_client/externals.c:708
#, c-format
-msgid "Illegal parent directory URL '%s'"
-msgstr "éžæ³•çˆ¶ç›®å½• URL “%sâ€"
+msgid "URL '%s' at revision %ld is not a file or a directory"
+msgstr "URL “%s†在版本 %ld 中ä¸æ˜¯æ–‡ä»¶æˆ–目录"
+#: ../libsvn_client/externals.c:786
#, c-format
-msgid "Illegal repository root URL '%s'"
-msgstr "éžæ³•ç‰ˆæœ¬åº“æ ¹ URL “%sâ€"
+msgid ""
+"Unsupported external: URL of file external '%s' is not in repository '%s'"
+msgstr "ä¸æ”¯æŒçš„外部对象:文件外部对象“%sâ€çš„ URL ä¸åœ¨ç‰ˆæœ¬åº““%sâ€ä¸­"
+#: ../libsvn_client/externals.c:979
#, c-format
-msgid "The external relative URL '%s' cannot have backpaths, i.e. '..'"
-msgstr "外部相对 URL “%s†ä¸èƒ½åŒ…å«åŽé€€è·¯å¾„,例如 “..â€"
+msgid "Traversal of '%s' found no ambient depth"
+msgstr "在 “%s†中找ä¸åˆ°æ·±åº¦"
+#: ../libsvn_client/import.c:159
#, c-format
-msgid "Unrecognized format for the relative external URL '%s'"
-msgstr "外部相对 URL “%s†的格å¼æ— æ³•è¯†åˆ«"
+msgid "%s property on '%s' contains unrecognized EOL-style '%s'"
+msgstr "属性 %s (对象 '%s') 包å«ä¸å¯è¯†åˆ«çš„行结æŸç¬¦å· '%s'"
+#: ../libsvn_client/import.c:489
#, c-format
-msgid "URL '%s' at revision %ld doesn't exist"
-msgstr "URL “%s†在版本 %ld 中ä¸å­˜åœ¨"
+msgid "Unknown or unversionable type for '%s'"
+msgstr "“%s†是未知类型或ä¸å¯çº³å…¥ç‰ˆæœ¬æŽ§åˆ¶"
-#, c-format
-msgid "URL '%s' at revision %ld is not a file or a directory"
-msgstr "URL “%s†在版本 %ld 中ä¸æ˜¯æ–‡ä»¶æˆ–目录"
+#: ../libsvn_client/import.c:707
+msgid "New entry name required when importing a file"
+msgstr "导入文件时,需è¦ä¸€ä¸ªæ–°çš„æ¡ç›®å称"
+#: ../libsvn_client/import.c:758 ../libsvn_client/patch.c:3016
+#: ../libsvn_client/patch.c:3028 ../libsvn_wc/delete.c:93
+#: ../libsvn_wc/lock.c:121 ../libsvn_wc/wc_db_wcroot.c:77
#, c-format
-msgid "Traversal of '%s' found no ambient depth"
-msgstr "在 “%s†中找ä¸åˆ°æ·±åº¦"
+msgid "'%s' does not exist"
+msgstr "“%s†ä¸å­˜åœ¨"
+#: ../libsvn_client/import.c:891
#, c-format
-msgid "Server does not support retrieving information about the repository root"
-msgstr "æœåŠ¡å™¨ä¸æ”¯æŒå–得版本库根的信æ¯"
+msgid "'%s' is a reserved name and cannot be imported"
+msgstr "“%s†是ä¿ç•™å称,无法被导入"
+#: ../libsvn_client/info.c:310 ../libsvn_client/list.c:376
#, c-format
msgid "URL '%s' non-existent in revision %ld"
msgstr "URL “%s†ä¸åœ¨ç‰ˆæœ¬ %ld 中"
+#: ../libsvn_client/locking_commands.c:266
+#: ../libsvn_client/locking_commands.c:292
msgid "No common parent found, unable to operate on disjoint arguments"
msgstr "没有找到公共父节点,ä¸èƒ½åœ¨åˆ†ç¦»çš„å‚数上æ“作"
+#: ../libsvn_client/locking_commands.c:325
#, c-format
-msgid "'%s' has no URL"
-msgstr "“%s†没有 URL"
+msgid "The node '%s' is not a file"
+msgstr "节点 '%s' ä¸æ˜¯æ–‡ä»¶"
+#: ../libsvn_client/locking_commands.c:345
msgid "Unable to lock/unlock across multiple repositories"
msgstr "ä¸èƒ½è·¨è¶Šå¤šä¸ªç‰ˆæœ¬åº“进行é”定/解é”"
+#: ../libsvn_client/locking_commands.c:400
#, c-format
msgid "'%s' is not locked in this working copy"
msgstr "“%s†没有在工作副本中é”定"
+#: ../libsvn_client/locking_commands.c:450
#, c-format
msgid "'%s' is not locked"
msgstr "“%s†没有被é”定"
+#: ../libsvn_client/locking_commands.c:483 ../libsvn_fs/fs-loader.c:1411
+#: ../libsvn_ra/ra_loader.c:1074
msgid "Lock comment contains illegal characters"
msgstr "é”定注释包å«éžæ³•å­—符"
-msgid "Missing required revision specification"
-msgstr "未æ供请求的版本"
+#: ../libsvn_client/log.c:309
+msgid "No valid target found"
+msgstr "没有å‘现åˆæ³•ç›®æ ‡"
+#: ../libsvn_client/log.c:340
#, c-format
msgid "'%s' is not a relative path"
msgstr "'%s' ä¸æ˜¯ç›¸å¯¹è·¯å¾„"
+#: ../libsvn_client/log.c:366
msgid "When specifying working copy paths, only one target may be given"
msgstr "当指定工作副本路径时,åªèƒ½ç»™å‡ºä¸€ä¸ªç›®æ ‡"
+#: ../libsvn_client/log.c:390 ../libsvn_client/revisions.c:189
+msgid "PREV, BASE, or COMMITTED revision keywords are invalid for URL"
+msgstr "对于 URL,版本关键字 PREV,BASE,或 COMMITTED éžæ³•"
+
+#: ../libsvn_client/log.c:523 ../libsvn_client/log.c:830
+msgid "Missing required revision specification"
+msgstr "未æ供请求的版本"
+
+#: ../libsvn_client/merge.c:439
#, c-format
-msgid "Entry '%s' has no URL"
-msgstr "æ¡ç›®â€œ%sâ€æ²¡æœ‰URL"
+msgid "URL '%s' of '%s' is not in repository '%s'"
+msgstr "URL“%sâ€(本地路径“%sâ€)ä¸åœ¨ç‰ˆæœ¬åº““%sâ€ä¸­"
+#: ../libsvn_client/merge.c:476
#, c-format
-msgid "Url '%s' of '%s' is not in repository '%s'"
-msgstr "URL“%sâ€(祖先“%sâ€)ä¸åœ¨ç‰ˆæœ¬åº““%sâ€ä¸­"
+msgid "'%s' must be from the same repository as '%s'"
+msgstr "“%sâ€å¿…须与“%sâ€åœ¨åŒä¸€ä¸ªç‰ˆæœ¬åº“中"
#. xgettext: the '.working', '.merge-left.r%ld' and
#. '.merge-right.r%ld' strings are used to tag onto a file
#. name in case of a merge conflict
+#: ../libsvn_client/merge.c:2028
msgid ".working"
msgstr ".working"
+#: ../libsvn_client/merge.c:2030
#, c-format
msgid ".merge-left.r%ld"
msgstr ".merge-left.r%ld"
+#: ../libsvn_client/merge.c:2033
#, c-format
msgid ".merge-right.r%ld"
msgstr ".merge-right.r%ld"
-msgid "Cannot reverse-merge a range from a path's own future history; try updating first"
+#: ../libsvn_client/merge.c:4681
+msgid ""
+"Cannot reverse-merge a range from a path's own future history; try updating "
+"first"
msgstr "ä¸èƒ½ä»Žè·¯å¾„的未æ¥åŽ†å²ä¸­åå‘åˆå¹¶èŒƒå›´ï¼›è¯·å…ˆæ›´æ–°"
+#: ../libsvn_client/merge.c:5416
#, c-format
msgid ""
"One or more conflicts were produced while merging r%ld:%ld into\n"
@@ -1448,192 +1996,307 @@ msgstr ""
"当åˆå¹¶ r%ld:%ld 到 “%s†时出现了一个或更多的冲çª\n"
"请解决所有冲çªåŽï¼Œå†æ¬¡è¿è¡Œåˆå¹¶ï¼Œå¤„ç†å‰©ä½™çš„未åˆå¹¶ç‰ˆæœ¬"
+#: ../libsvn_client/merge.c:6231
#, c-format
-msgid "Invalid mergeinfo detected on '%s', mergetracking not possible"
-msgstr "在“%sâ€å‘现了éžæ³•çš„åˆå¹¶ä¿¡æ¯ï¼›åˆå¹¶è·Ÿè¸ªæ˜¯ä¸å¯èƒ½çš„"
+msgid "Invalid mergeinfo detected on '%s', merge tracking not possible"
+msgstr "在“%sâ€æ£€æµ‹åˆ°éžæ³•çš„åˆå¹¶ä¿¡æ¯ï¼›åˆå¹¶è·Ÿè¸ªæ˜¯ä¸å¯èƒ½çš„"
-msgid "Merge tracking not allowed with missing subtrees; try restoring these items first:\n"
+#: ../libsvn_client/merge.c:6380
+msgid ""
+"Merge tracking not allowed with missing subtrees; try restoring these items "
+"first:\n"
msgstr "åˆå¹¶è·Ÿè¸ªä¸å…许丢失å­æ ‘; 请先æ¢å¤è¿™äº›é¡¹ç›®:\n"
+#: ../libsvn_client/merge.c:7380
#, c-format
-msgid "Invalid mergeinfo detected on merge target '%s', mergetracking not possible"
-msgstr "在åˆå¹¶ç›®æ ‡â€œ%sâ€å‘现了éžæ³•çš„åˆå¹¶ä¿¡æ¯ï¼›åˆå¹¶è·Ÿè¸ªæ˜¯ä¸å¯èƒ½çš„"
+msgid ""
+"Invalid mergeinfo detected on merge target '%s', merge tracking not possible"
+msgstr "在åˆå¹¶ç›®æ ‡â€œ%sâ€æ£€æµ‹åˆ°éžæ³•çš„åˆå¹¶ä¿¡æ¯ï¼›åˆå¹¶è·Ÿè¸ªæ˜¯ä¸å¯èƒ½çš„"
+#: ../libsvn_client/merge.c:9698
msgid "Use of two URLs is not compatible with mergeinfo modification"
msgstr "使用两个 URL 与åˆå¹¶ä¿¡æ¯ä¿®æ”¹ä¸å…¼å®¹"
-msgid "Merge from foreign repository is not compatible with mergeinfo modification"
+#: ../libsvn_client/merge.c:9705 ../libsvn_client/merge.c:10030
+msgid ""
+"Merge from foreign repository is not compatible with mergeinfo modification"
msgstr "从外部版本库åˆå¹¶ä¸Žåˆå¹¶ä¿¡æ¯ä¿®æ”¹ä¸å…¼å®¹"
+#: ../libsvn_client/merge.c:10123 ../libsvn_client/merge.c:10266
#, c-format
msgid "Merge target '%s' does not exist in the working copy"
msgstr "åˆå¹¶ç›®æ ‡ “%s†ä¸åœ¨å·¥ä½œå‰¯æœ¬ä¸­"
+#: ../libsvn_client/merge.c:10146
msgid "Cannot determine revision of working copy"
msgstr "ä¸èƒ½ç¡®å®šå·¥ä½œå‰¯æœ¬çš„版本"
+#: ../libsvn_client/merge.c:10152
#, c-format
-msgid "Cannot merge into mixed-revision working copy [%lu:%lu]; try updating first"
-msgstr "ä¸èƒ½åˆå¹¶åˆ°æœ‰æ··åˆç‰ˆæœ¬çš„工作副本 [%lu:%lu] 中;请先更新"
+msgid ""
+"Cannot merge into mixed-revision working copy [%ld:%ld]; try updating first"
+msgstr "ä¸èƒ½åˆå¹¶åˆ°æœ‰æ··åˆç‰ˆæœ¬çš„工作副本 [%ld:%ld] 中;请先更新"
+#: ../libsvn_client/merge.c:10167
msgid "Cannot merge into a working copy with a switched subtree"
msgstr "ä¸èƒ½åˆå¹¶åˆ°å·²ç»åˆ‡æ¢å­ç›®å½•çš„工作副本中"
+#: ../libsvn_client/merge.c:10183
msgid "Cannot merge into a working copy that has local modifications"
msgstr "ä¸èƒ½åˆå¹¶åˆ°æœ‰æœ¬åœ°ä¿®æ”¹çš„工作副本中"
-msgid "Merge sources must both be either paths or URLs"
-msgstr "åˆå¹¶æºå¿…é¡»åŒæ—¶æ˜¯è·¯å¾„或 URL"
-
+#: ../libsvn_client/merge.c:10203 ../svn/merge-cmd.c:60
#, c-format
-msgid "'%s' isn't in the same repository as '%s'"
-msgstr "“%sâ€ä¸Žâ€œ%sâ€å¹¶ä¸åœ¨åŒä¸€ä¸ªç‰ˆæœ¬åº“中"
+msgid ""
+"Invalid merge source '%s'; a working copy path can only be used with a "
+"repository revision (a number, a date, or head)"
+msgstr ""
-#, c-format
-msgid "Invalid mergeinfo detected on '%s', reintegrate merge not possible"
-msgstr "在“%sâ€å‘现了éžæ³•çš„åˆå¹¶ä¿¡æ¯ï¼›å¤å…´åˆå¹¶æ˜¯ä¸å¯èƒ½çš„"
+#: ../libsvn_client/merge.c:10526 ../svn/merge-cmd.c:127
+msgid "Merge sources must both be either paths or URLs"
+msgstr "åˆå¹¶æºå¿…é¡»åŒæ—¶æ˜¯è·¯å¾„或 URL"
+#: ../libsvn_client/merge.c:11287 ../libsvn_client/merge.c:11449
+#: ../libsvn_client/merge.c:12321
#, c-format
msgid "'%s@%ld' must be ancestrally related to '%s@%ld'"
msgstr "“%s@%ldâ€å¿…须与“%s@%ldâ€æœ‰ç¥–先关系"
+#: ../libsvn_client/merge.c:11399
#, c-format
-msgid "'%s' must be from the same repository as '%s'"
-msgstr "“%sâ€å¿…须与“%sâ€åœ¨åŒä¸€ä¸ªç‰ˆæœ¬åº“中"
-
-#, c-format
-msgid "Neither the reintegrate source nor target can be the root of the repository"
+msgid ""
+"Neither the reintegrate source nor target can be the root of the repository"
msgstr "å¤å…´æºæˆ–目标都ä¸èƒ½æ˜¯ç‰ˆæœ¬åº“的根。"
+#: ../libsvn_client/merge.c:11409
+msgid "Reintegrate merge not possible"
+msgstr "å¤å…´åˆå¹¶æ˜¯ä¸å¯èƒ½çš„"
+
+#: ../libsvn_client/merge.c:11482
#, c-format
msgid ""
-"Reintegrate can only be used if revisions %ld through %ld were previously merged from %s to the reintegrate source, but this is not the case:\n"
+"Reintegrate can only be used if revisions %ld through %ld were previously "
+"merged from %s to the reintegrate source, but this is not the case:\n"
"%s"
msgstr ""
-"å¤å…´åªèƒ½ç”¨äºŽç‰ˆæœ¬ %ld 到 %ld 以å‰æ›¾ç»ä»Ž %s åˆå¹¶åˆ°å¤å…´æºçš„情况,但是现在ä¸æ˜¯è¿™ç§æƒ…况:\n"
+"å¤å…´åªèƒ½ç”¨äºŽç‰ˆæœ¬ %ld 到 %ld 以å‰æ›¾ç»ä»Ž %s åˆå¹¶åˆ°å¤å…´æºçš„情况,但是现在ä¸æ˜¯è¿™"
+"ç§æƒ…况:\n"
"%s"
+#: ../libsvn_client/merge.c:11544
+#, c-format
+msgid ""
+"Can't reintegrate into '%s' because it is locally added and therefore not "
+"related to the merge source"
+msgstr ""
+
+#: ../libsvn_client/merge.c:11812
+msgid "Cannot merge automatically while ignoring mergeinfo"
+msgstr ""
+
+#: ../libsvn_client/merge.c:12537
+msgid ""
+"The required merge is reintegrate-like, and the record-only option cannot be "
+"used with this kind of merge"
+msgstr ""
+
+#: ../libsvn_client/merge.c:12543
+msgid ""
+"The required merge is reintegrate-like, and the depth option cannot be used "
+"with this kind of merge"
+msgstr ""
+
+#: ../libsvn_client/merge.c:12549
+msgid ""
+"The required merge is reintegrate-like, and the force_delete option cannot "
+"be used with this kind of merge"
+msgstr ""
+
+#: ../libsvn_client/mergeinfo.c:1700
msgid "Only depths 'infinity' and 'empty' are currently supported"
msgstr "当å‰ä»…支æŒæ·±åº¦ 'infinity' å’Œ 'empty'"
+#: ../libsvn_client/patch.c:279
#, c-format
msgid "Cannot strip %u components from '%s'"
msgstr "ä¸èƒ½ä¿®å‰ª %u 个组件于“%sâ€"
+#: ../libsvn_client/patch.c:910
+msgid "Invalid link representation"
+msgstr "éžæ³•é“¾æŽ¥è¡¨è¿°"
+
+#: ../libsvn_client/patch.c:3005
msgid "strip count must be positive"
msgstr "修剪计数å–值必须为正"
+#: ../libsvn_client/patch.c:3021 ../libsvn_fs_base/tree.c:3978
+#: ../libsvn_fs_base/tree.c:3983 ../libsvn_fs_fs/tree.c:3047
+#: ../libsvn_fs_fs/tree.c:3052 ../libsvn_ra/compat.c:675
+#: ../libsvn_ra_local/ra_plugin.c:1144
#, c-format
msgid "'%s' is not a file"
msgstr "“%sâ€ä¸æ˜¯ä¸€ä¸ªæ–‡ä»¶"
+#: ../libsvn_client/patch.c:3033 ../libsvn_wc/util.c:59
#, c-format
msgid "'%s' is not a directory"
msgstr "“%sâ€ä¸æ˜¯ç›®å½•"
+#: ../libsvn_client/prop_commands.c:60
#, c-format
msgid "'%s' is a wcprop, thus not accessible to clients"
msgstr "“%s†是一个工作副本属性,应此ä¸èƒ½è¢«å®¢æˆ·ç«¯å­˜å–"
+#: ../libsvn_client/prop_commands.c:155
#, c-format
msgid "Property '%s' is not a regular property"
msgstr "属性 “%s†ä¸æ˜¯å¸¸è§„属性"
+#: ../libsvn_client/prop_commands.c:266
#, c-format
msgid "Revision property '%s' not allowed in this context"
msgstr "此上下文中ä¸å…许版本属性 “%sâ€"
+#: ../libsvn_client/prop_commands.c:273 ../libsvn_client/prop_commands.c:468
#, c-format
msgid "Bad property name: '%s'"
msgstr "属性å称错误: “%sâ€"
+#: ../libsvn_client/prop_commands.c:301
msgid "Targets must be working copy paths"
msgstr "目标必须是工作副本路径"
+#: ../libsvn_client/prop_commands.c:362
msgid "Targets must be URLs"
msgstr "目标必须是 URL"
+#: ../libsvn_client/prop_commands.c:372
msgid "Setting property on non-local targets needs a base revision"
msgstr "设定éžæœ¬åœ°ç›®æ ‡çš„属性需è¦ç‰ˆæœ¬å‚æ•°"
+#: ../libsvn_client/prop_commands.c:387
#, c-format
msgid "Setting property '%s' on non-local targets is not supported"
msgstr "ä¸æ”¯æŒå¯¹éžæœ¬åœ°ç›®æ ‡è®¾ç½®å±žæ€§â€œ%sâ€"
+#: ../libsvn_client/prop_commands.c:415
#, c-format
-msgid "revprop '%s' in r%ld is unexpectedly absent in repository (maybe someone else deleted it?)"
+msgid ""
+"revprop '%s' in r%ld is unexpectedly absent in repository (maybe someone "
+"else deleted it?)"
msgstr "revprop “%s†于版本 r%ld 出乎æ„料地ä¸åœ¨ç‰ˆæœ¬åº“中(å¯èƒ½æŸäººåˆ é™¤äº†ï¼Ÿ)"
+#: ../libsvn_client/prop_commands.c:424
#, c-format
-msgid "revprop '%s' in r%ld has unexpected value in repository (maybe someone else changed it?)"
+msgid ""
+"revprop '%s' in r%ld has unexpected value in repository (maybe someone else "
+"changed it?)"
msgstr "revprop “%s†于版本 r%ld 在版本库中出乎æ„料地å–值(å¯èƒ½æŸäººä¿®æ”¹äº†ï¼Ÿ)"
+#: ../libsvn_client/prop_commands.c:432
#, c-format
-msgid "revprop '%s' in r%ld is unexpectedly present in repository (maybe someone else set it?)"
+msgid ""
+"revprop '%s' in r%ld is unexpectedly present in repository (maybe someone "
+"else set it?)"
msgstr "revprop “%s†于版本 r%ld 出乎æ„料地在版本库中(å¯èƒ½æŸäººè®¾ç½®äº†ï¼Ÿ)"
-msgid "Author name should not contain a newline; value will not be set unless forced"
+#: ../libsvn_client/prop_commands.c:463
+msgid ""
+"Author name should not contain a newline; value will not be set unless forced"
msgstr "作者å称ä¸èƒ½åŒ…å«æ¢è¡Œï¼›é™¤éžå¼ºè¿«ä¸ºä¹‹ï¼Œå¦åˆ™å…¶å€¼ä¸ä¼šè¢«è®¾å®š"
+#: ../libsvn_client/prop_commands.c:577
#, c-format
msgid "'%s' does not exist in revision %ld"
msgstr "没有路径 “%s†在版本 %ld 中"
+#: ../libsvn_client/prop_commands.c:583 ../libsvn_client/prop_commands.c:1096
+#: ../libsvn_wc/crop.c:167
#, c-format
msgid "Unknown node kind for '%s'"
msgstr "“%s†是未知的节点类型"
+#: ../libsvn_client/ra.c:161
#, c-format
-msgid "Attempt to set wc property '%s' on '%s' in a non-commit operation"
+msgid "Attempt to set wcprop '%s' on '%s' in a non-commit operation"
msgstr "试图在éžæ交æ“作中,设定工作副本属性 “%s†于 “%sâ€"
+#: ../libsvn_client/ra.c:415
#, c-format
msgid "Redirect cycle detected for URL '%s'"
msgstr "z在 URL '%s' 检测到循环é‡å®šå‘"
+#: ../libsvn_client/ra.c:501 ../libsvn_client/ra.c:812
+#, c-format
+msgid "'%s' has no URL"
+msgstr "“%s†没有 URL"
+
+#: ../libsvn_client/ra.c:679 ../libsvn_ra/compat.c:395
#, c-format
msgid "Unable to find repository location for '%s' in revision %ld"
msgstr "“%s†的版本库ä½ç½®ä¸åœ¨ç‰ˆæœ¬ %ld 中"
+#: ../libsvn_client/ra.c:691
#, c-format
-msgid "The location for '%s' for revision %ld does not exist in the repository or refers to an unrelated object"
+msgid ""
+"The location for '%s' for revision %ld does not exist in the repository or "
+"refers to an unrelated object"
msgstr "“%s†ä¸åœ¨ç‰ˆæœ¬åº“的版本 %ld 中,或是指å‘一个无关对象"
+#: ../libsvn_client/relocate.c:117
#, c-format
msgid "'%s' is not the root of the repository"
msgstr "“%s†ä¸æ˜¯ç‰ˆæœ¬åº“çš„æ ¹"
+#: ../libsvn_client/relocate.c:124
#, c-format
msgid "The repository at '%s' has uuid '%s', but the WC has '%s'"
msgstr "版本库 “%s†的 uuid 是 “%sâ€ï¼Œä½†æ˜¯å·¥ä½œå‰¯æœ¬çš„是 “%sâ€"
+#: ../libsvn_client/repos_diff.c:931 ../libsvn_wc/externals.c:570
#, c-format
msgid "Base checksum mismatch for '%s'"
msgstr "“%sâ€çš„校验和错误"
+#: ../libsvn_client/revisions.c:113 ../libsvn_client/revisions.c:138
#, c-format
msgid "Path '%s' has no committed revision"
msgstr "路径 “%s†没有æ交过"
+#: ../libsvn_client/revisions.c:166
#, c-format
msgid "Unrecognized revision type requested for '%s'"
msgstr "“%s†的请求版本类型无法识别"
-msgid "PREV, BASE, or COMMITTED revision keywords are invalid for URL"
-msgstr "对于 URL,版本关键字 PREV,BASE,或 COMMITTED éžæ³•"
-
+#: ../libsvn_client/status.c:407 ../libsvn_client/status.c:586
+#: ../libsvn_wc/lock.c:564 ../libsvn_wc/lock.c:856 ../libsvn_wc/lock.c:1542
+#: ../libsvn_wc/wc_db.c:12775 ../libsvn_wc/wc_db_wcroot.c:627
#, c-format
msgid "'%s' is not a working copy"
msgstr "“%sâ€ä¸æ˜¯å·¥ä½œå‰¯æœ¬"
+#: ../libsvn_client/status.c:454
+#, c-format
+msgid "Entry '%s' has no URL"
+msgstr "æ¡ç›®â€œ%sâ€æ²¡æœ‰URL"
+
+#: ../libsvn_client/switch.c:129
#, c-format
msgid "Cannot both exclude and switch a path"
msgstr "ä¸èƒ½åŒæ—¶æŽ’除和切æ¢åŒä¸€è·¯å¾„"
+#: ../libsvn_client/switch.c:150
#, c-format
msgid "Cannot switch '%s' because it is not in the repository yet"
msgstr "ä¸èƒ½åˆ‡æ¢â€œ%sâ€ï¼Œå› ä¸ºè¿˜ä¸åœ¨ç‰ˆæœ¬åº“中"
+#: ../libsvn_client/switch.c:175
+#, c-format
+msgid "Directory '%s' has no URL"
+msgstr "目录 “%s†没有 URL"
+
+#: ../libsvn_client/switch.c:215 ../libsvn_ra_local/ra_plugin.c:235
+#: ../libsvn_ra_local/ra_plugin.c:325 ../libsvn_wc/update_editor.c:4795
#, c-format
msgid ""
"'%s'\n"
@@ -1645,1910 +2308,2654 @@ msgstr ""
"“%sâ€\n"
"并ä¸åœ¨åŒä¸€ä¸ªç‰ˆæœ¬åº“中"
+#: ../libsvn_client/switch.c:242
#, c-format
msgid "'%s' shares no common ancestry with '%s'"
msgstr "“%sâ€ä¸Žâ€œ%sâ€æ²¡æœ‰å…±åŒçš„祖先"
-#, c-format
-msgid "URL '%s' is not a child of repository root URL '%s'"
-msgstr "URL “%s†ä¸æ˜¯ç‰ˆæœ¬åº“æ ¹ URL “%s†的å­èŠ‚点"
-
-#, c-format
-msgid "URL '%s' is not inside repository"
-msgstr "URL“%sâ€ä¸åœ¨ç‰ˆæœ¬åº“中"
-
+#: ../libsvn_client/util.c:329
#, c-format
msgid "Cannot mix repository and working copy targets"
msgstr "ä¸èƒ½æ··åˆç‰ˆæœ¬åº“和工作副本目标"
+#: ../libsvn_delta/svndiff.c:175
msgid "Compression of svndiff data failed"
msgstr "压缩 svndiff æ•°æ®å¤±è´¥"
+#: ../libsvn_delta/svndiff.c:538
msgid "Decompression of svndiff data failed: no size"
msgstr "解压 svndiff æ•°æ®å¤±è´¥: 没有长度"
+#: ../libsvn_delta/svndiff.c:541
msgid "Decompression of svndiff data failed: size too large"
msgstr "解压 svndiff æ•°æ®å¤±è´¥: 长度太大"
+#: ../libsvn_delta/svndiff.c:565
msgid "Decompression of svndiff data failed"
msgstr "解压 svndiff æ•°æ®å¤±è´¥"
+#: ../libsvn_delta/svndiff.c:572
msgid "Size of uncompressed data does not match stored original length"
msgstr "解压åŽçš„æ•°æ®é•¿åº¦ä¸ŽåŽŸå§‹é•¿åº¦ä¸ç›¸ç­‰"
+#: ../libsvn_delta/svndiff.c:648
#, c-format
msgid "Invalid diff stream: insn %d cannot be decoded"
msgstr "无效的差异æµ: insn %d ä¸èƒ½è§£ç "
+#: ../libsvn_delta/svndiff.c:652
#, c-format
msgid "Invalid diff stream: insn %d has length zero"
msgstr "无效的差异æµ: insn %d 出现 0 长度"
+#: ../libsvn_delta/svndiff.c:656
#, c-format
msgid "Invalid diff stream: insn %d overflows the target view"
msgstr "无效的差异æµ: insn %d 溢出目标视图"
+#: ../libsvn_delta/svndiff.c:665
#, c-format
msgid "Invalid diff stream: [src] insn %d overflows the source view"
msgstr "无效的差异æµ: [src] insn %d 溢出æºè§†å›¾"
+#: ../libsvn_delta/svndiff.c:672
#, c-format
-msgid "Invalid diff stream: [tgt] insn %d starts beyond the target view position"
+msgid ""
+"Invalid diff stream: [tgt] insn %d starts beyond the target view position"
msgstr "无效的差异æµ: [tgt] insn %d 起点超过目标视图ä½ç½®"
+#: ../libsvn_delta/svndiff.c:679
#, c-format
msgid "Invalid diff stream: [new] insn %d overflows the new data section"
msgstr "无效的差异æµ: [new] insn %d 溢出新数æ®åŒºåŸŸ"
+#: ../libsvn_delta/svndiff.c:689
msgid "Delta does not fill the target window"
msgstr "Delta 没有填充目标窗å£"
+#: ../libsvn_delta/svndiff.c:692
msgid "Delta does not contain enough new data"
msgstr "Delta 没有包å«è¶³å¤Ÿæ–°æ•°æ®"
+#: ../libsvn_delta/svndiff.c:797
msgid "Svndiff has invalid header"
msgstr "Svndiff æ•°æ®åŒ…å«æ— æ•ˆå¤´"
+#: ../libsvn_delta/svndiff.c:853 ../libsvn_delta/svndiff.c:1035
msgid "Svndiff contains a too-large window"
msgstr "Svndiff æ•°æ®åŒ…å«å¤ªå¤§çš„窗å£"
+#: ../libsvn_delta/svndiff.c:860 ../libsvn_delta/svndiff.c:1042
msgid "Svndiff contains corrupt window header"
msgstr "Svndiff æ•°æ®åŒ…å«æ— æ•ˆçª—å£"
+#: ../libsvn_delta/svndiff.c:869
msgid "Svndiff has backwards-sliding source views"
msgstr "Svndiff æ•°æ®åŒ…å«å‘åŽå˜åŒ–的资æºè§†å›¾"
+#: ../libsvn_delta/svndiff.c:926 ../libsvn_delta/svndiff.c:983
+#: ../libsvn_delta/svndiff.c:1064
msgid "Unexpected end of svndiff input"
msgstr "svndiff 输入æ„料结æŸ"
+#: ../libsvn_diff/diff_file.c:1094
#, c-format
msgid "The file '%s' changed unexpectedly during diff"
msgstr "文件“%sâ€åœ¨æ¯”较期间æ„外改å˜"
+#: ../libsvn_diff/diff_file.c:1264
msgid "Error in options to internal diff"
msgstr "内部比较的选项错误"
+#: ../libsvn_diff/diff_file.c:1290
#, c-format
msgid "Invalid argument '%s' in diff options"
msgstr "diff 选项中å‚æ•°'%s'无效"
-msgid "No newline at end of file"
-msgstr "文件没有以空行结尾"
-
#. Order of date components can be different in different languages
+#: ../libsvn_diff/diff_file.c:1787
msgid "%a %b %e %H:%M:%S %Y"
msgstr "%a %b %e %H:%M:%S %Y"
+#: ../libsvn_diff/diff_file.c:1863 ../libsvn_diff/diff_file.c:1879
+#, c-format
+msgid "Path '%s' must be inside the directory '%s'"
+msgstr "路径 “%s†必须在目录 “%sâ€å†…"
+
+#: ../libsvn_diff/diff_file.c:2397
#, c-format
msgid "Failed to delete mmap '%s'"
msgstr "删除 mmap“%sâ€å¤±è´¥"
+#: ../libsvn_diff/util.c:463
#, c-format
-msgid "'%s' does not define '%s()'"
-msgstr "“%s†未定义 “%s()â€"
+msgid " Reverse-merged %s:r%s%s"
+msgstr " å·²ç»æ’¤é”€åˆå¹¶ %s:r%s%s"
+
+#: ../libsvn_diff/util.c:480
+#, c-format
+msgid " Merged %s:r%s%s"
+msgstr " å·²ç»åˆå¹¶ %s:r%s%s"
+
+#: ../libsvn_fs/editor.c:219
+#, c-format
+msgid "Revision for modifying '%s' is required"
+msgstr "修改“%sâ€éœ€è¦ç‰ˆæœ¬å·"
+
+#: ../libsvn_fs/editor.c:228
+#, c-format
+msgid "'%s' is out of date; try updating"
+msgstr "“%s†已ç»è¿‡æ—¶ï¼›è¯·å…ˆæ›´æ–°"
+
+#: ../libsvn_fs/editor.c:265
+#, c-format
+msgid "'%s' has been modified since the commit began (restart the commit)"
+msgstr "自æ交开始,“%s†已有本地修改 (é‡æ–°æ交)"
+
+#: ../libsvn_fs/editor.c:323
+#, c-format
+msgid "'%s' already exists, so may be out of date; try updating"
+msgstr "“%s†已ç»å­˜åœ¨ï¼Œå› æ­¤å¯èƒ½è¿‡æ—¶ï¼›è¯·å…ˆæ›´æ–°"
+#: ../libsvn_fs/editor.c:456
+msgid "The filesystem does not support 'absent' nodes"
+msgstr "此文件系统ä¸æ”¯æŒ 'absent' 节点"
+
+#: ../libsvn_fs/fs-loader.c:120
#, c-format
-msgid "Can't grab FS mutex"
-msgstr "无法获å–文件系统互斥体"
+msgid "Invalid name for FS type '%s'"
+msgstr "文件类型“%sâ€çš„å称无效"
+#: ../libsvn_fs/fs-loader.c:137 ../libsvn_ra/ra_loader.c:161
+#: ../libsvn_ra/ra_loader.c:174
#, c-format
-msgid "Can't ungrab FS mutex"
-msgstr "ä¸èƒ½é‡Šæ”¾æ–‡ä»¶ç³»ç»Ÿäº’斥体"
+msgid "'%s' does not define '%s()'"
+msgstr "“%s†未定义 “%s()â€"
+#: ../libsvn_fs/fs-loader.c:163
#, c-format
msgid "Failed to load module for FS type '%s'"
msgstr "加载 “%s†文件系统模å—失败"
+#: ../libsvn_fs/fs-loader.c:185
#, c-format
-msgid "Mismatched FS module version for '%s': found %d.%d.%d%s, expected %d.%d.%d%s"
+msgid ""
+"Mismatched FS module version for '%s': found %d.%d.%d%s, expected %d.%d.%d%s"
msgstr "æ–‡ä»¶ç³»ç»Ÿæ¨¡å— â€œ%s†版本ä¸åŒ¹é… : 找到 %d.%d.%d%s,期望 %d.%d.%d%s"
+#: ../libsvn_fs/fs-loader.c:265
#, c-format
msgid "Unknown FS type '%s'"
msgstr "未知的文件系统类型 “%sâ€"
-#, c-format
-msgid "Can't allocate FS mutex"
-msgstr "ä¸èƒ½åˆ†é…文件系统互斥体"
-
+#: ../libsvn_fs/fs-loader.c:387
#, c-format
msgid "Path '%s' is not in UTF-8"
msgstr "路径 “%s†ä¸æ˜¯ UTF-8 ç¼–ç "
+#: ../libsvn_fs/fs-loader.c:395
#, c-format
msgid "Path '%s' contains '.' or '..' element"
msgstr "路径 “%sâ€ åŒ…å« â€œ.†或 “..†元素"
+#: ../libsvn_fs/fs-loader.c:552 ../libsvn_repos/repos.c:1982
+msgid "Hotcopy source and destination are equal"
+msgstr "热å¤åˆ¶çš„æºåœ°å€ä¸Žç›®æ ‡åœ°å€ç›¸åŒ"
+
+#: ../libsvn_fs/fs-loader.c:562
+#, c-format
+msgid "'%s' already exists and is a file"
+msgstr "“%sâ€å·²å­˜åœ¨ï¼Œå®ƒæ˜¯æ–‡ä»¶"
+
+#: ../libsvn_fs/fs-loader.c:567
+#, c-format
+msgid "'%s' already exists and has an unknown node kind"
+msgstr "“%sâ€å·²å­˜åœ¨ï¼Œå…·æœ‰æœªçŸ¥çš„节点类型"
+
+#: ../libsvn_fs/fs-loader.c:585
+#, c-format
+msgid ""
+"The filesystem type of the hotcopy source ('%s') does not match the "
+"filesystem type of the hotcopy destination ('%s')"
+msgstr "热å¤åˆ¶æºåœ°å€çš„文件系统类型('%s') 与目标地å€('%s') çš„ä¸ç›¸åŒ"
+
+#: ../libsvn_fs/fs-loader.c:1393
#, c-format
msgid "Malformed UUID '%s'"
msgstr "éžæ³• UUID “%sâ€"
+#: ../libsvn_fs/fs-loader.c:1421
#, c-format
msgid "Lock token URI '%s' has bad scheme; expected '%s'"
msgstr "é”令牌 URI '%s' 的方案错误;期望是 '%s'"
+#: ../libsvn_fs/fs-loader.c:1428
#, c-format
msgid "Lock token '%s' is not ASCII at byte %u"
msgstr "é”令牌 '%s' 在字节 %u 处ä¸æ˜¯ ASCII 字符"
+#: ../libsvn_fs/fs-loader.c:1435
#, c-format
msgid "Lock token URI '%s' is not XML-safe"
msgstr "é”令牌 URI '%s' ä¸æ˜¯ XML 安全的"
+#: ../libsvn_fs/fs-loader.c:1442
msgid "Negative expiration date passed to svn_fs_lock"
msgstr "传递到 svn_fs_lock 的有效期éžæ³•"
+#: ../libsvn_fs_base/bdb/bdb-err.c:104
#, c-format
msgid "Berkeley DB error for filesystem '%s' while %s:\n"
msgstr "当 %s 关闭文件系统 “%s†的 BDB 环境å¥æŸ„时出错: \n"
+#: ../libsvn_fs_base/bdb/changes-table.c:94
msgid "creating change"
msgstr "正在创建修改"
+#: ../libsvn_fs_base/bdb/changes-table.c:118
msgid "deleting changes"
msgstr "正在删除修改"
+#: ../libsvn_fs_base/bdb/changes-table.c:150 ../libsvn_fs_fs/fs_fs.c:5863
msgid "Missing required node revision ID"
msgstr "缺少必须的节点版本 ID"
+#: ../libsvn_fs_base/bdb/changes-table.c:161 ../libsvn_fs_fs/fs_fs.c:5873
msgid "Invalid change ordering: new node revision ID without delete"
msgstr "无效的改å˜é¡ºåº: 没有删除新节点版本 ID"
+#: ../libsvn_fs_base/bdb/changes-table.c:171 ../libsvn_fs_fs/fs_fs.c:5884
msgid "Invalid change ordering: non-add change on deleted path"
msgstr "无效的改å˜é¡ºåº: 在已ç»åˆ é™¤çš„路径执行éžå¢žåŠ ä¿®æ”¹"
+#: ../libsvn_fs_base/bdb/changes-table.c:180 ../libsvn_fs_fs/fs_fs.c:5893
msgid "Invalid change ordering: add change on preexisting path"
msgstr "无效的改å˜é¡ºåº: 在已有路径增加修改"
+#: ../libsvn_fs_base/bdb/changes-table.c:272
+#: ../libsvn_fs_base/bdb/changes-table.c:395
msgid "creating cursor for reading changes"
msgstr "正在为读å–修改创建指针"
+#: ../libsvn_fs_base/bdb/changes-table.c:297
+#: ../libsvn_fs_base/bdb/changes-table.c:416
#, c-format
msgid "Error reading changes for key '%s'"
msgstr "读å–é”® “%s†的修改时出错"
+#: ../libsvn_fs_base/bdb/changes-table.c:356
+#: ../libsvn_fs_base/bdb/changes-table.c:439
msgid "fetching changes"
msgstr "正在获å–修改"
+#: ../libsvn_fs_base/bdb/changes-table.c:369
+#: ../libsvn_fs_base/bdb/changes-table.c:452
msgid "closing changes cursor"
msgstr "正在关闭修改指针"
+#: ../libsvn_fs_base/bdb/checksum-reps-table.c:87
+#: ../libsvn_fs_base/bdb/checksum-reps-table.c:116
+#: ../libsvn_fs_base/bdb/checksum-reps-table.c:159
msgid "Only SHA1 checksums can be used as keys in the checksum-reps table.\n"
msgstr "在校验和展现表中,åªæœ‰ SHA1 校验和能用åšé”®å€¼ã€‚\n"
+#: ../libsvn_fs_base/bdb/checksum-reps-table.c:135
#, c-format
msgid "Representation key for checksum '%s' exists in filesystem '%s'."
msgstr "校验和 “%s†的展现键已ç»å­˜åœ¨äºŽæ–‡ä»¶ç³»ç»Ÿ “%s†中。"
+#: ../libsvn_fs_base/bdb/checksum-reps-table.c:142
msgid "storing checksum-reps record"
msgstr "正在存储校验和展现记录"
+#: ../libsvn_fs_base/bdb/checksum-reps-table.c:164
+msgid "deleting entry from 'checksum-reps' table"
+msgstr "正在从 “checksum-reps†表中删除æ¡ç›®"
+
+#: ../libsvn_fs_base/bdb/checksum-reps-table.c:186
msgid "allocating new representation reuse ID (getting 'next-key')"
msgstr "正在分é…新展现的å¤ç”¨ ID(æ­£åœ¨èŽ·å– â€œnext-keyâ€)"
+#: ../libsvn_fs_base/bdb/checksum-reps-table.c:207
msgid "bumping next representation reuse ID"
msgstr "跳到下个展现å¤ç”¨ ID"
+#: ../libsvn_fs_base/bdb/copies-table.c:92
msgid "storing copy record"
msgstr "正在存储副本记录"
+#: ../libsvn_fs_base/bdb/copies-table.c:115
msgid "allocating new copy ID (getting 'next-key')"
msgstr "正在分é…新副本 ID(æ­£åœ¨èŽ·å– â€œnext-keyâ€)"
+#: ../libsvn_fs_base/bdb/copies-table.c:133
msgid "bumping next copy key"
msgstr "正在æå–下一个副本键"
+#: ../libsvn_fs_base/bdb/copies-table.c:171
msgid "deleting entry from 'copies' table"
msgstr "正在从 “copies†表中删除æ¡ç›®"
+#: ../libsvn_fs_base/bdb/copies-table.c:199
msgid "reading copy"
msgstr "正在读å–副本"
+#: ../libsvn_fs_base/bdb/lock-tokens-table.c:87
+msgid "storing lock token record"
+msgstr "正在存储加é”令牌记录"
+
+#: ../libsvn_fs_base/bdb/lock-tokens-table.c:108
+msgid "deleting entry from 'lock-tokens' table"
+msgstr "正在从 “lock-tokens†表中删除æ¡ç›®"
+
+#: ../libsvn_fs_base/bdb/lock-tokens-table.c:135
+msgid "reading lock token"
+msgstr "正在读å–加é”令牌"
+
+#: ../libsvn_fs_base/bdb/locks-table.c:93
+msgid "storing lock record"
+msgstr "正在存储加é”记录"
+
+#: ../libsvn_fs_base/bdb/locks-table.c:116
+msgid "deleting lock from 'locks' table"
+msgstr "正在从“locksâ€è¡¨åˆ é™¤é”"
+
+#: ../libsvn_fs_base/bdb/locks-table.c:143
+msgid "reading lock"
+msgstr "正在读å–é”"
+
+#: ../libsvn_fs_base/bdb/locks-table.c:246
+msgid "creating cursor for reading lock tokens"
+msgstr "正在为读å–加é”令牌创建游标"
+
+#: ../libsvn_fs_base/bdb/locks-table.c:321
+msgid "fetching lock tokens"
+msgstr "正在å–出加é”令牌"
+
+#: ../libsvn_fs_base/bdb/locks-table.c:323
+msgid "fetching lock tokens (closing cursor)"
+msgstr "正在å–出加é”令牌 (正在关闭游标)"
+
+#: ../libsvn_fs_base/bdb/miscellaneous-table.c:95
+msgid "deleting record from 'miscellaneous' table"
+msgstr "正在从“miscellaneousâ€è¡¨åˆ é™¤æ¡ç›®"
+
+#: ../libsvn_fs_base/bdb/miscellaneous-table.c:103
+msgid "storing miscellaneous record"
+msgstr "正在存储æ‚项记录"
+
+#: ../libsvn_fs_base/bdb/miscellaneous-table.c:131
+msgid "fetching miscellaneous record"
+msgstr "正在å–出æ‚项记录"
+
+#: ../libsvn_fs_base/bdb/node-origins-table.c:117
#, c-format
-msgid "Node origin for '%s' exists in filesystem '%s' with a different value (%s) than what we were about to store (%s)"
+msgid ""
+"Node origin for '%s' exists in filesystem '%s' with a different value (%s) "
+"than what we were about to store (%s)"
msgstr "“%s†的原始节点在文件系统 “%s†中,å–值(%s)与我们è¦å­˜å‚¨çš„值(%s)ä¸åŒ"
+#: ../libsvn_fs_base/bdb/node-origins-table.c:127
msgid "storing node-origins record"
msgstr "正在存储节点原始记录"
+#: ../libsvn_fs_base/bdb/node-origins-table.c:142
+msgid "deleting entry from 'node-origins' table"
+msgstr "正在从“node-originsâ€è¡¨åˆ é™¤æ¡ç›®"
+
+#: ../libsvn_fs_base/bdb/nodes-table.c:102
msgid "allocating new node ID (getting 'next-key')"
msgstr "正在分é…新的节点 ID (正在获å–“next-keyâ€)"
+#: ../libsvn_fs_base/bdb/nodes-table.c:120
msgid "bumping next node ID key"
msgstr "正在æå–下一个节点 ID é”®"
+#: ../libsvn_fs_base/bdb/nodes-table.c:156
#, c-format
msgid "Successor id '%s' (for '%s') already exists in filesystem '%s'"
msgstr "åŽç»­ id “%sâ€(对于 %s)å·²ç»åœ¨æ–‡ä»¶ç³»ç»Ÿ “%s†中"
+#: ../libsvn_fs_base/bdb/nodes-table.c:182
msgid "deleting entry from 'nodes' table"
msgstr "正在从“nodesâ€è¡¨åˆ é™¤æ¡ç›®"
#. Handle any other error conditions.
+#: ../libsvn_fs_base/bdb/nodes-table.c:220
msgid "reading node revision"
msgstr "正在读å–节点版本"
+#: ../libsvn_fs_base/bdb/nodes-table.c:253
msgid "storing node revision"
msgstr "正在存储节点版本"
+#: ../libsvn_fs_base/bdb/reps-table.c:98
+#: ../libsvn_fs_base/bdb/reps-table.c:200
#, c-format
msgid "No such representation '%s'"
msgstr "没有修订版“%sâ€"
#. Handle any other error conditions.
+#: ../libsvn_fs_base/bdb/reps-table.c:101
msgid "reading representation"
msgstr "正在读å–修订版"
+#: ../libsvn_fs_base/bdb/reps-table.c:128
msgid "storing representation"
msgstr "正在存储修订版"
+#: ../libsvn_fs_base/bdb/reps-table.c:156
msgid "allocating new representation (getting next-key)"
msgstr "正在分é…新修订版(æ­£åœ¨èŽ·å– next-key)"
+#: ../libsvn_fs_base/bdb/reps-table.c:177
msgid "bumping next representation key"
msgstr "正在æå–下一个修订版键"
#. Handle any other error conditions.
+#: ../libsvn_fs_base/bdb/reps-table.c:203
msgid "deleting representation"
msgstr "正在删除修订版"
#. Handle any other error conditions.
+#: ../libsvn_fs_base/bdb/rev-table.c:95
msgid "reading filesystem revision"
msgstr "正在读å–文件系统版本"
+#: ../libsvn_fs_base/bdb/rev-table.c:141
+msgid "updating filesystem revision"
+msgstr "正在更新文件系统版本"
+
+#: ../libsvn_fs_base/bdb/rev-table.c:149
+msgid "storing filesystem revision"
+msgstr "正在存储文件系统版本"
+
+#: ../libsvn_fs_base/bdb/rev-table.c:179
+msgid "getting youngest revision (creating cursor)"
+msgstr "正在å–出最新版本(创建游标)"
+
+#: ../libsvn_fs_base/bdb/rev-table.c:203
+msgid "getting youngest revision (finding last entry)"
+msgstr "正在å–出最新版本(查找最新项)"
+
+#. You can't commit a transaction with open cursors, because:
+#. 1) key/value pairs don't get deleted until the cursors referring
+#. to them are closed, so closing a cursor can fail for various
+#. reasons, and txn_commit shouldn't fail that way, and
+#. 2) using a cursor after committing its transaction can cause
+#. undetectable database corruption.
+#: ../libsvn_fs_base/bdb/rev-table.c:213
+msgid "getting youngest revision (closing cursor)"
+msgstr "正在å–出最新版本(关闭游标)"
+
+#: ../libsvn_fs_base/bdb/strings-table.c:94
+#: ../libsvn_fs_base/bdb/strings-table.c:300
+#: ../libsvn_fs_base/bdb/strings-table.c:491
msgid "creating cursor for reading a string"
msgstr "正在为读å–字符串创建指针"
+#: ../libsvn_fs_base/bdb/strings-table.c:124
+msgid "moving cursor"
+msgstr "正在移动指针"
+
+#: ../libsvn_fs_base/bdb/strings-table.c:136
+msgid "rerunning cursor move"
+msgstr "é‡æ–°æ‰§è¡Œæ¸¸æ ‡ç§»åŠ¨"
+
+#: ../libsvn_fs_base/bdb/strings-table.c:228
+#: ../libsvn_fs_base/bdb/strings-table.c:247
+#: ../libsvn_fs_base/bdb/strings-table.c:265
+msgid "reading string"
+msgstr "正在读å–字符串"
+
+#. Done with the cursor.
+#: ../libsvn_fs_base/bdb/strings-table.c:254
+#: ../libsvn_fs_base/bdb/strings-table.c:334
+#: ../libsvn_fs_base/bdb/strings-table.c:539
+msgid "closing string-reading cursor"
+msgstr "正在关闭读å–字符串的游标"
+
+#: ../libsvn_fs_base/bdb/strings-table.c:313
+#: ../libsvn_fs_base/bdb/strings-table.c:505
+msgid "getting next-key value"
+msgstr "正在å–出 next-key 的值"
+
+#. ignore the error, the original is
+#. more important.
+#: ../libsvn_fs_base/bdb/strings-table.c:331
+msgid "bumping next string key"
+msgstr "正在跳到下一个字符串键"
+
+#: ../libsvn_fs_base/bdb/strings-table.c:358
+msgid "appending string"
+msgstr "正在追加字符串"
+
+#. Handle any other error conditions.
+#: ../libsvn_fs_base/bdb/strings-table.c:390
+msgid "clearing string"
+msgstr "正在清ç†å­—符串"
+
+#: ../libsvn_fs_base/bdb/strings-table.c:399
+msgid "storing empty contents"
+msgstr "正在存储空内容"
+
+#: ../libsvn_fs_base/bdb/strings-table.c:436
+msgid "fetching string length"
+msgstr "正在获å–字符串的长度"
+
+#. Handle any other error conditions.
+#: ../libsvn_fs_base/bdb/strings-table.c:466
+msgid "deleting string"
+msgstr "正在删除字符串"
+
+#: ../libsvn_fs_base/bdb/strings-table.c:524
+msgid "writing copied data"
+msgstr "正在写入已å¤åˆ¶çš„æ•°æ®"
+
+#: ../libsvn_fs_base/bdb/strings-table.c:535
+msgid "fetching string data for a copy"
+msgstr "正在å–出字符数æ®"
+
+#: ../libsvn_fs_base/bdb/txn-table.c:99
msgid "storing transaction record"
msgstr "正在存储事务记录"
+#: ../libsvn_fs_base/bdb/txn-table.c:123
+msgid "allocating new transaction ID (getting 'next-key')"
+msgstr "正在分é…新事务 ID(æ­£åœ¨èŽ·å– â€œnext-keyâ€)"
+
+#: ../libsvn_fs_base/bdb/txn-table.c:142
+msgid "bumping next transaction key"
+msgstr "正在跳到下一个事务键"
+
+#: ../libsvn_fs_base/bdb/txn-table.c:188
+msgid "deleting entry from 'transactions' table"
+msgstr "正在从“transactionsâ€è¡¨åˆ é™¤æ¡ç›®"
+
+#: ../libsvn_fs_base/bdb/txn-table.c:218
+msgid "reading transaction"
+msgstr "正在读å–事务"
+
+#: ../libsvn_fs_base/bdb/txn-table.c:251
+msgid "reading transaction list (opening cursor)"
+msgstr "正在读å–事务列表(游标已打开)"
+
+#: ../libsvn_fs_base/bdb/txn-table.c:314
+msgid "reading transaction list (listing keys)"
+msgstr "正在读å–事务列表(正在枚举键)"
+
+#: ../libsvn_fs_base/bdb/txn-table.c:317
+msgid "reading transaction list (closing cursor)"
+msgstr "正在读å–事务列表(游标已关闭)"
+
+#: ../libsvn_fs_base/bdb/uuids-table.c:119
msgid "get repository uuid"
msgstr "获å–版本库 UUID"
+#: ../libsvn_fs_base/bdb/uuids-table.c:147
msgid "set repository uuid"
msgstr "设置版本库 UUID"
+#: ../libsvn_fs_base/dag.c:228
#, c-format
msgid "Corrupt DB: initial transaction id not '0' in filesystem '%s'"
msgstr "æŸåçš„æ•°æ®åº“: åˆå§‹çš„事务编å·åœ¨æ–‡ä»¶ç³»ç»Ÿâ€œ%sâ€ä¸­ä¸æ˜¯â€œ0â€"
+#: ../libsvn_fs_base/dag.c:236
#, c-format
msgid "Corrupt DB: initial copy id not '0' in filesystem '%s'"
msgstr "æŸåçš„æ•°æ®åº“: åˆå§‹çš„副本编å·åœ¨æ–‡ä»¶ç³»ç»Ÿâ€œ%sâ€ä¸­ä¸æ˜¯â€œ0â€"
+#: ../libsvn_fs_base/dag.c:245
#, c-format
msgid "Corrupt DB: initial revision number is not '0' in filesystem '%s'"
msgstr "æŸåçš„æ•°æ®åº“: åˆå§‹çš„版本å·åœ¨æ–‡ä»¶ç³»ç»Ÿâ€œ%sâ€ä¸­ä¸æ˜¯â€œ0â€"
+#: ../libsvn_fs_base/dag.c:294
msgid "Attempted to get entries of a non-directory node"
msgstr "试图从éžç›®å½•èŠ‚点中获å–æ¡ç›®"
+#: ../libsvn_fs_base/dag.c:461 ../libsvn_fs_fs/dag.c:372
#, c-format
msgid "Attempted to create a node with an illegal name '%s'"
msgstr "试图用éžæ³•çš„å字“%sâ€åˆ›å»ºèŠ‚点"
+#: ../libsvn_fs_base/dag.c:467 ../libsvn_fs_fs/dag.c:378
msgid "Attempted to create entry in non-directory parent"
msgstr "试图在éžç›®å½•çš„父节点创建æ¡ç›®"
+#: ../libsvn_fs_base/dag.c:473 ../libsvn_fs_base/dag.c:737
+#: ../libsvn_fs_fs/dag.c:384
#, c-format
msgid "Attempted to clone child of non-mutable node"
msgstr "试图克隆éžå¯å˜èŠ‚点的å­èŠ‚点"
+#: ../libsvn_fs_base/dag.c:480
#, c-format
msgid "Attempted to create entry that already exists"
msgstr "试图创建已ç»å­˜åœ¨çš„æ¡ç›®"
+#: ../libsvn_fs_base/dag.c:529 ../libsvn_fs_fs/dag.c:462
msgid "Attempted to set entry in non-directory node"
msgstr "试图在éžç›®å½•èŠ‚点中设置æ¡ç›®"
+#: ../libsvn_fs_base/dag.c:535 ../libsvn_fs_fs/dag.c:468
msgid "Attempted to set entry in immutable node"
msgstr "试图在ä¸å˜èŠ‚点设置æ¡ç›®"
+#: ../libsvn_fs_base/dag.c:602
#, c-format
msgid "Can't set proplist on *immutable* node-revision %s"
msgstr "ä¸èƒ½åœ¨*ä¸å˜*节点版本 %s 设置属性列表"
+#: ../libsvn_fs_base/dag.c:743
#, c-format
msgid "Attempted to make a child clone with an illegal name '%s'"
msgstr "试图以éžæ³•å字“%sâ€åˆ›å»ºå­å…‹éš†"
+#: ../libsvn_fs_base/dag.c:860
#, c-format
msgid "Attempted to delete entry '%s' from *non*-directory node"
msgstr "试图从*éž*目录节点删除æ¡ç›®â€œ%sâ€"
+#: ../libsvn_fs_base/dag.c:866
#, c-format
msgid "Attempted to delete entry '%s' from immutable directory node"
msgstr "试图从ä¸å˜ç›®å½•èŠ‚点删除æ¡ç›®â€œ%sâ€"
+#: ../libsvn_fs_base/dag.c:873
#, c-format
msgid "Attempted to delete a node with an illegal name '%s'"
msgstr "试图删除一个éžæ³•å字“%sâ€çš„节点"
+#: ../libsvn_fs_base/dag.c:888 ../libsvn_fs_base/dag.c:921
#, c-format
msgid "Delete failed: directory has no entry '%s'"
msgstr "删除失败: 目录没有æ¡ç›®â€œ%sâ€"
+#: ../libsvn_fs_base/dag.c:970
#, c-format
msgid "Attempted removal of immutable node"
msgstr "试图删除ä¸å˜èŠ‚点"
+#: ../libsvn_fs_base/dag.c:1088
#, c-format
msgid "Attempted to get textual contents of a *non*-file node"
msgstr "试图获å–*éž*文件节点的文本内容"
+#: ../libsvn_fs_base/dag.c:1121
#, c-format
msgid "Attempted to get length of a *non*-file node"
msgstr "试图获å–*éž*文件节点的长度"
+#: ../libsvn_fs_base/dag.c:1148
#, c-format
msgid "Attempted to get checksum of a *non*-file node"
msgstr "试图获å–*éž*文件节点的校验和"
+#: ../libsvn_fs_base/dag.c:1187 ../libsvn_fs_base/dag.c:1244
#, c-format
msgid "Attempted to set textual contents of a *non*-file node"
msgstr "试图设置*éž*文件节点的文本内容"
+#: ../libsvn_fs_base/dag.c:1193 ../libsvn_fs_base/dag.c:1250
#, c-format
msgid "Attempted to set textual contents of an immutable node"
msgstr "试图设置ä¸å˜èŠ‚点的文本内容"
+#: ../libsvn_fs_base/dag.c:1279 ../libsvn_fs_base/reps-strings.c:829
#, c-format
msgid "Checksum mismatch on representation '%s'"
msgstr "'%s' 的校验和ä¸åŒ¹é…"
+#: ../libsvn_fs_base/dag.c:1373
#, c-format
msgid "Attempted to open non-existent child node '%s'"
msgstr "试图打开ä¸å­˜åœ¨çš„å­èŠ‚点“%sâ€"
+#: ../libsvn_fs_base/dag.c:1379
#, c-format
msgid "Attempted to open node with an illegal name '%s'"
msgstr "试图以éžæ³•å字“%sâ€æ‰“开节点"
+#: ../libsvn_fs_base/dag.c:1700
#, c-format
msgid "Attempted merge tracking info change on immutable node"
msgstr "试图在ä¸å˜èŠ‚点åˆå¹¶è·Ÿè¸ªä¿¡æ¯çš„修改"
+#: ../libsvn_fs_base/dag.c:1740
#, c-format
msgid "Attempted mergeinfo count change on immutable node"
msgstr "试图在ä¸å˜èŠ‚点修改åˆå¹¶ä¿¡æ¯è®¡æ•°"
+#: ../libsvn_fs_base/dag.c:1752
#, c-format
msgid "Invalid value (%%%s) for node revision mergeinfo count"
msgstr "节点åˆå¹¶ä¿¡æ¯è®¡æ•°çš„值éžæ³•(%%%s)"
+#: ../libsvn_fs_base/err.c:46
#, c-format
msgid "Corrupt filesystem revision %ld in filesystem '%s'"
msgstr "文件系统版本 %ld æŸå,其文件系统是 “%sâ€"
+#: ../libsvn_fs_base/err.c:57 ../libsvn_fs_fs/fs_fs.c:2267
#, c-format
msgid "Reference to non-existent node '%s' in filesystem '%s'"
msgstr "引用ä¸å­˜åœ¨çš„节点 “%sâ€ï¼Œå…¶æ–‡ä»¶ç³»ç»Ÿæ˜¯ “%sâ€"
+#: ../libsvn_fs_base/err.c:68
#, c-format
msgid "No such revision %ld in filesystem '%s'"
msgstr "没有版本 %ld,其文件系统是“%sâ€"
+#: ../libsvn_fs_base/err.c:80
#, c-format
msgid "Corrupt entry in 'transactions' table for '%s' in filesystem '%s'"
msgstr "“%s†的 “transactions†表有无效入å£ï¼Œå…¶æ–‡ä»¶ç³»ç»Ÿæ˜¯ “%sâ€"
+#: ../libsvn_fs_base/err.c:91
#, c-format
msgid "Corrupt entry in 'copies' table for '%s' in filesystem '%s'"
msgstr "“%s†的 “copies†表有无效入å£ï¼Œå…¶æ–‡ä»¶ç³»ç»Ÿæ˜¯ “%sâ€"
+#: ../libsvn_fs_base/err.c:102
#, c-format
msgid "No transaction named '%s' in filesystem '%s'"
msgstr "事务 “%s†ä¸åœ¨æ–‡ä»¶ç³»ç»Ÿ “%s†中"
+#: ../libsvn_fs_base/err.c:113
#, c-format
msgid "Cannot modify transaction named '%s' in filesystem '%s'"
msgstr "无法修改å为 “%s†的事务,其文件系统是 “%sâ€"
+#: ../libsvn_fs_base/err.c:124
#, c-format
msgid "No copy with id '%s' in filesystem '%s'"
msgstr "没有标识 “%s†的副本,其文件系统是 “%sâ€"
+#: ../libsvn_fs_base/err.c:134
#, c-format
msgid "Token '%s' does not point to any existing lock in filesystem '%s'"
msgstr "标识“%sâ€æ²¡æœ‰æŒ‡å‘文件系统“%sâ€ä¸­å­˜åœ¨çš„é”"
+#: ../libsvn_fs_base/err.c:144
#, c-format
msgid "No token given for path '%s' in filesystem '%s'"
msgstr "路径 “%s†没有令牌,其文件系统是 “%sâ€"
+#: ../libsvn_fs_base/err.c:153
#, c-format
msgid "Corrupt lock in 'locks' table for '%s' in filesystem '%s'"
msgstr "“%s†的 “locks†表é”æŸå,其文件系统是 “%sâ€"
+#: ../libsvn_fs_base/err.c:163
#, c-format
msgid "No record in 'node-origins' table for node id '%s' in filesystem '%s'"
msgstr "在 “node-origins†表中,没有节点 “%s†的记录,其文件系统是 “%sâ€"
+#: ../libsvn_fs_base/err.c:173
#, c-format
msgid "No record in 'checksum-reps' table for checksum '%s' in filesystem '%s'"
msgstr "在 “checksum-reps†表中,没有校验和 “%s†的记录,其文件系统是 “%sâ€"
+#: ../libsvn_fs_base/fs.c:87
#, c-format
msgid "Bad database version: got %d.%d.%d, should be at least %d.%d.%d"
msgstr "ä¸æ­£ç¡®çš„æ•°æ®åº“版本: 得到 %d.%d.%d,应该最低是 %d.%d.%d"
+#: ../libsvn_fs_base/fs.c:98
#, c-format
msgid "Bad database version: compiled with %d.%d.%d, running against %d.%d.%d"
msgstr "ä¸æ­£ç¡®çš„æ•°æ®åº“版本: 用 %d.%d.%d 版本编译,正在è¿è¡Œç‰ˆæœ¬ %d.%d.%d"
+#: ../libsvn_fs_base/fs.c:188
#, c-format
msgid "Berkeley DB error for filesystem '%s' while closing environment:\n"
msgstr "关闭文件系统“%sâ€çš„BDB环境å¥æŸ„时出错: \n"
+#: ../libsvn_fs_base/fs.c:551
#, c-format
msgid "Berkeley DB error for filesystem '%s' while creating environment:\n"
msgstr "创建文件系统“%sâ€çš„BDB环境å¥æŸ„时出错: \n"
+#: ../libsvn_fs_base/fs.c:557
#, c-format
msgid "Berkeley DB error for filesystem '%s' while opening environment:\n"
msgstr "打开文件系统“%sâ€çš„BDB环境å¥æŸ„时出错: \n"
+#: ../libsvn_fs_base/fs.c:572
+msgid "creating 'nodes' table"
+msgstr "正在创建“nodesâ€è¡¨"
+
+#: ../libsvn_fs_base/fs.c:573
+msgid "opening 'nodes' table"
+msgstr "正在打开“nodesâ€è¡¨"
+
+#: ../libsvn_fs_base/fs.c:578
+msgid "creating 'revisions' table"
+msgstr "正在创建“revisionsâ€è¡¨"
+
+#: ../libsvn_fs_base/fs.c:579
+msgid "opening 'revisions' table"
+msgstr "正在打开“revisionsâ€è¡¨"
+
+#: ../libsvn_fs_base/fs.c:584
+msgid "creating 'transactions' table"
+msgstr "正在创建“transactionsâ€è¡¨"
+
+#: ../libsvn_fs_base/fs.c:585
+msgid "opening 'transactions' table"
+msgstr "正在打开“transactionsâ€è¡¨"
+
+#: ../libsvn_fs_base/fs.c:590
+msgid "creating 'copies' table"
+msgstr "正在创建“copiesâ€è¡¨"
+
+#: ../libsvn_fs_base/fs.c:591
+msgid "opening 'copies' table"
+msgstr "正在打开“copiesâ€è¡¨"
+
+#: ../libsvn_fs_base/fs.c:596
+msgid "creating 'changes' table"
+msgstr "正在创建“changesâ€è¡¨"
+
+#: ../libsvn_fs_base/fs.c:597
+msgid "opening 'changes' table"
+msgstr "正在打开“changesâ€è¡¨"
+
+#: ../libsvn_fs_base/fs.c:602
+msgid "creating 'representations' table"
+msgstr "正在创建“representationsâ€è¡¨"
+
+#: ../libsvn_fs_base/fs.c:603
+msgid "opening 'representations' table"
+msgstr "正在打开“representationsâ€è¡¨"
+
+#: ../libsvn_fs_base/fs.c:608
+msgid "creating 'strings' table"
+msgstr "正在创建“stringsâ€è¡¨"
+
+#: ../libsvn_fs_base/fs.c:609
+msgid "opening 'strings' table"
+msgstr "正在打开“stringsâ€è¡¨"
+
+#: ../libsvn_fs_base/fs.c:614
+msgid "creating 'uuids' table"
+msgstr "正在创建“uuidsâ€è¡¨"
+
+#: ../libsvn_fs_base/fs.c:615
+msgid "opening 'uuids' table"
+msgstr "正在打开“uuidsâ€è¡¨"
+
+#: ../libsvn_fs_base/fs.c:620
+msgid "creating 'locks' table"
+msgstr "正在创建“locksâ€è¡¨"
+
+#: ../libsvn_fs_base/fs.c:621
+msgid "opening 'locks' table"
+msgstr "正在打开“locksâ€è¡¨"
+
+#: ../libsvn_fs_base/fs.c:626
+msgid "creating 'lock-tokens' table"
+msgstr "正在创建“lock-tokensâ€è¡¨"
+
+#: ../libsvn_fs_base/fs.c:627
+msgid "opening 'lock-tokens' table"
+msgstr "正在打开“lock-tokensâ€è¡¨"
+
+#: ../libsvn_fs_base/fs.c:635
+msgid "creating 'node-origins' table"
+msgstr "正在创建“node-originsâ€è¡¨"
+
+#: ../libsvn_fs_base/fs.c:636
+msgid "opening 'node-origins' table"
+msgstr "正在打开“node-originsâ€è¡¨"
+
+#: ../libsvn_fs_base/fs.c:645
+msgid "creating 'miscellaneous' table"
+msgstr "正在创建“miscellaneousâ€è¡¨"
+
+#: ../libsvn_fs_base/fs.c:646
+msgid "opening 'miscellaneous' table"
+msgstr "正在打开“miscellaneousâ€è¡¨"
+
+#: ../libsvn_fs_base/fs.c:655
+msgid "creating 'checksum-reps' table"
+msgstr "正在创建“checksum-repsâ€è¡¨"
+
+#: ../libsvn_fs_base/fs.c:656
+msgid "opening 'checksum-reps' table"
+msgstr "正在打开“checksum-repsâ€è¡¨"
+
+#: ../libsvn_fs_base/fs.c:728
#, c-format
-msgid "The '%s' feature requires version %d of the filesystem schema; filesystem '%s' uses only version %d"
+msgid ""
+"The '%s' feature requires version %d of the filesystem schema; filesystem "
+"'%s' uses only version %d"
msgstr "“%sâ€ç‰¹æ€§éœ€è¦æ–‡ä»¶ç³»ç»Ÿæ–¹æ¡ˆç‰ˆæœ¬ %d;文件系统“%sâ€ç‰ˆæœ¬ä»…为 %d"
+#: ../libsvn_fs_base/fs.c:747
#, c-format
msgid "Expected FS format '%d'; found format '%d'"
msgstr "期望文件系统格å¼â€œ%dâ€ï¼›å‘现格å¼â€œ%dâ€"
+#: ../libsvn_fs_base/fs.c:1213
+#, c-format
+msgid "BDB repositories do not support incremental hotcopy"
+msgstr "BDB 版本库ä¸æ”¯æŒå¢žé‡çƒ­å¤åˆ¶"
+
+#: ../libsvn_fs_base/fs.c:1317
msgid ""
"Error copying logfile; the DB_LOG_AUTOREMOVE feature\n"
"may be interfering with the hotcopy algorithm. If\n"
"the problem persists, try deactivating this feature\n"
"in DB_CONFIG"
msgstr ""
-"å¤åˆ¶æ—¥å¿—文件出错;DB_LOG_AUTOREMOVE 特性å¯èƒ½å¦¨ç¢çƒ­å¤åˆ¶ã€‚如果问题一直存在,请\n"
+"å¤åˆ¶æ—¥å¿—文件出错;DB_LOG_AUTOREMOVE 特性å¯èƒ½å¦¨ç¢çƒ­å¤åˆ¶ã€‚如果问题一直存在,"
+"请\n"
"å°è¯•åœ¨ DB_CONFIG 中ç¦ç”¨æ­¤ç‰¹æ€§ã€‚"
+#: ../libsvn_fs_base/fs.c:1336
msgid ""
"Error running catastrophic recovery on hotcopy; the\n"
"DB_LOG_AUTOREMOVE feature may be interfering with the\n"
"hotcopy algorithm. If the problem persists, try deactivating\n"
"this feature in DB_CONFIG"
msgstr ""
-"热å¤åˆ¶æ—¶æ‰§è¡Œç¾éš¾æ¢å¤å‡ºé”™ï¼›DB_LOG_AUTOREMOVE 特性å¯èƒ½å¦¨ç¢çƒ­å¤åˆ¶ã€‚如果问题一直\n"
+"热å¤åˆ¶æ—¶æ‰§è¡Œç¾éš¾æ¢å¤å‡ºé”™ï¼›DB_LOG_AUTOREMOVE 特性å¯èƒ½å¦¨ç¢çƒ­å¤åˆ¶ã€‚如果问题一"
+"ç›´\n"
"存在,请å°è¯•åœ¨ DB_CONFIG 中ç¦ç”¨æ­¤ç‰¹æ€§ã€‚"
+#: ../libsvn_fs_base/fs.c:1381
msgid "Module for working with a Berkeley DB repository."
msgstr "模å—åªèƒ½æ“作BDB版本库。"
+#: ../libsvn_fs_base/fs.c:1428
#, c-format
msgid "Unsupported FS loader version (%d) for bdb"
msgstr "ä¸æ”¯æŒçš„BDB之FS加载器版本 (%d)"
+#: ../libsvn_fs_base/lock.c:108 ../libsvn_fs_base/lock.c:113
+#: ../libsvn_fs_fs/lock.c:786 ../libsvn_fs_fs/lock.c:791
+#: ../libsvn_fs_fs/lock.c:813
#, c-format
msgid "Path '%s' doesn't exist in HEAD revision"
msgstr "HEAD中没有路径“%sâ€"
+#: ../libsvn_fs_base/lock.c:540 ../libsvn_fs_fs/lock.c:682
#, c-format
msgid "Cannot verify lock on path '%s'; no username available"
msgstr "ä¸èƒ½æ ¡éªŒè·¯å¾„“%sâ€ä¸Šçš„é”;没有用户å"
+#: ../libsvn_fs_base/lock.c:546 ../libsvn_fs_fs/lock.c:688
#, c-format
msgid "User '%s' does not own lock on path '%s' (currently locked by '%s')"
msgstr "用户 “%s†ä¸æ˜¯è·¯å¾„ “%s†的é”的所有者(当å‰ç”±ç”¨æˆ· “%s†é”定)"
+#: ../libsvn_fs_base/lock.c:552 ../libsvn_fs_fs/lock.c:694
#, c-format
msgid "Cannot verify lock on path '%s'; no matching lock-token available"
msgstr "ä¸èƒ½æ ¡éªŒè·¯å¾„“%sâ€çš„é”;没有匹é…çš„å¯ç”¨é”令牌"
#. Helper macro that evaluates to an error message indicating that
#. the representation referred to by X has an unknown node kind.
+#: ../libsvn_fs_base/reps-strings.c:58
#, c-format
msgid "Unknown node kind for representation '%s'"
msgstr "修订版“%sâ€çš„节点类型未知"
+#: ../libsvn_fs_base/reps-strings.c:110
msgid "Representation is not of type 'delta'"
msgstr "修订版ä¸æ˜¯â€œdeltaâ€ç±»åž‹"
+#: ../libsvn_fs_base/reps-strings.c:380
msgid "Svndiff source length inconsistency"
msgstr "svndiffæºé•¿åº¦ä¸ä¸€è‡´"
+#: ../libsvn_fs_base/reps-strings.c:506
#, c-format
msgid "Diff version inconsistencies in representation '%s'"
msgstr "在修订版“%sâ€ä¸­diff的版本ä¸ä¸€è‡´"
+#: ../libsvn_fs_base/reps-strings.c:532
#, c-format
-msgid "Corruption detected whilst reading delta chain from representation '%s' to '%s'"
+msgid ""
+"Corruption detected whilst reading delta chain from representation '%s' to "
+"'%s'"
msgstr "从修订版“%sâ€åˆ°â€œ%sâ€è¯»å·®å¼‚链时检测到数æ®æŸå"
+#: ../libsvn_fs_base/reps-strings.c:798
#, c-format
msgid "Rep contents are too large: got %s, limit is %s"
msgstr "版本内容太大: 得到 %s,上é™æ˜¯ %s"
+#: ../libsvn_fs_base/reps-strings.c:814
#, c-format
msgid "Failure reading representation '%s'"
msgstr "读å–修订版“%sâ€å¤±è´¥"
+#: ../libsvn_fs_base/reps-strings.c:924
#, c-format
msgid "MD5 checksum mismatch on representation '%s'"
msgstr "“%s†的 MD5 校验和ä¸åŒ¹é…"
+#: ../libsvn_fs_base/reps-strings.c:934
#, c-format
msgid "SHA1 checksum mismatch on representation '%s'"
msgstr "“%s†的 SHA1 校验和ä¸åŒ¹é…"
+#: ../libsvn_fs_base/reps-strings.c:945
msgid "Null rep, but offset past zero already"
msgstr "空的版本,但是å移已ç»å¤§äºŽé›¶"
+#: ../libsvn_fs_base/reps-strings.c:1062 ../libsvn_fs_base/reps-strings.c:1253
#, c-format
msgid "Rep '%s' is not mutable"
msgstr "版本“%sâ€æ˜¯ä¸å¯å˜çš„"
+#: ../libsvn_fs_base/reps-strings.c:1077
#, c-format
msgid "Rep '%s' both mutable and non-fulltext"
msgstr "版本 “%s†å¯å˜å¹¶ä¸”éžå…¨æ–‡æœ¬"
+#: ../libsvn_fs_base/reps-strings.c:1372
msgid "Failed to get new string key"
msgstr "å–新的字符串键失败"
+#: ../libsvn_fs_base/reps-strings.c:1449
#, c-format
msgid "Attempt to deltify '%s' against itself"
msgstr "“%sâ€è¯•å›¾ä¸Žè‡ªèº«æ¯”较"
+#: ../libsvn_fs_base/reps-strings.c:1522
#, c-format
msgid "Failed to calculate MD5 digest for '%s'"
msgstr "计算“%sâ€çš„MD5摘è¦å¤±è´¥"
+#: ../libsvn_fs_base/revs-txns.c:72
#, c-format
msgid "Transaction is not dead: '%s'"
msgstr "事务未结æŸ: “%sâ€"
+#: ../libsvn_fs_base/revs-txns.c:75
#, c-format
msgid "Transaction is dead: '%s'"
msgstr "事务已结æŸ: “%sâ€"
+#: ../libsvn_fs_base/revs-txns.c:272 ../libsvn_fs_fs/fs_fs.c:9710
#, c-format
msgid "revprop '%s' has unexpected value in filesystem"
msgstr "revprop“%sâ€åœ¨æ–‡ä»¶ç³»ç»Ÿä¸­æœ‰ä¸æœŸæœ›çš„值"
+#: ../libsvn_fs_base/revs-txns.c:1030
msgid "Transaction aborted, but cleanup failed"
msgstr "事务终止,但清除失败"
+#: ../libsvn_fs_base/trail.c:99
+msgid "beginning Berkeley DB transaction"
+msgstr "正在开始 BDB 事务"
+
+#: ../libsvn_fs_base/trail.c:134
+msgid "aborting Berkeley DB transaction"
+msgstr "正在中止 BDB 事务"
+
+#: ../libsvn_fs_base/trail.c:158
+msgid "committing Berkeley DB transaction"
+msgstr "正在æ交 BDB 事务"
+
+#: ../libsvn_fs_base/tree.c:772 ../libsvn_fs_fs/tree.c:1046
#, c-format
msgid "Failure opening '%s'"
msgstr "打开“%sâ€å¤±è´¥"
+#: ../libsvn_fs_base/tree.c:1403 ../libsvn_fs_fs/tree.c:1497
msgid "Cannot compare property value between two different filesystems"
msgstr "ä¸èƒ½åœ¨ä¸¤ä¸ªä¸åŒçš„文件系统之间比较属性值"
+#: ../libsvn_fs_base/tree.c:1849 ../libsvn_fs_base/tree.c:1919
msgid "Corrupt DB: faulty predecessor count"
msgstr "æŸåçš„æ•°æ®åº“: å…ˆå‰çš„æ•°ç›®ä¸å®Œæ•´"
+#: ../libsvn_fs_base/tree.c:1976
#, c-format
msgid "Unexpected immutable node at '%s'"
msgstr "“%sâ€æœ‰æ„外的ä¸å˜èŠ‚点"
+#: ../libsvn_fs_base/tree.c:1997 ../libsvn_fs_fs/tree.c:1527
+#: ../libsvn_repos/commit.c:1244
#, c-format
msgid "Conflict at '%s'"
msgstr "在“%sâ€å†²çª"
+#: ../libsvn_fs_base/tree.c:2050 ../libsvn_fs_base/tree.c:2802
+#: ../libsvn_fs_fs/tree.c:1578 ../libsvn_fs_fs/tree.c:2115
msgid "Bad merge; ancestor, source, and target not all in same fs"
msgstr "错误的åˆå¹¶ï¼›åˆå§‹ï¼ŒåŽŸå§‹ï¼Œç›®æ ‡ä¸åœ¨åŒä¸€ä¸ªæ–‡ä»¶ç³»ç»Ÿ"
+#: ../libsvn_fs_base/tree.c:2066 ../libsvn_fs_fs/tree.c:1594
#, c-format
msgid "Bad merge; target '%s' has id '%s', same as ancestor"
msgstr "错误的åˆå¹¶: 目标“%sâ€æ‹¥æœ‰æ ‡è¯†â€œ%sâ€ï¼Œä¸Žåˆå§‹ç›¸åŒ"
+#: ../libsvn_fs_base/tree.c:2610
#, c-format
msgid "Transaction '%s' out-of-date with respect to revision '%s'"
msgstr "事务 “%s†过时,对于版本 “%s†"
+#: ../libsvn_fs_base/tree.c:2886
#, c-format
msgid "Cannot deltify revisions prior to r%ld"
msgstr "ä¸èƒ½åœ¨ r%ld 之å‰è®¡ç®—增é‡å˜åŒ–"
+#: ../libsvn_fs_base/tree.c:3004 ../libsvn_fs_fs/tree.c:2270
msgid "The root directory cannot be deleted"
msgstr "ä¸èƒ½åˆ é™¤æ ¹ç›®å½•"
+#: ../libsvn_fs_base/tree.c:3217 ../libsvn_fs_fs/tree.c:2340
#, c-format
msgid "Cannot copy between two different filesystems ('%s' and '%s')"
msgstr "ä¸èƒ½åœ¨ä¸¤ä¸ªä¸åŒçš„文件系统(“%sâ€å’Œâ€œ%sâ€)之间å¤åˆ¶"
+#: ../libsvn_fs_base/tree.c:3226 ../libsvn_fs_fs/tree.c:2346
msgid "Copy from mutable tree not currently supported"
msgstr "当å‰ä¸æ”¯æŒä»Žå¯å˜çš„æ ‘å¤åˆ¶"
+#: ../libsvn_fs_base/tree.c:3736 ../libsvn_fs_fs/tree.c:2823
#, c-format
msgid "Base checksum mismatch on '%s'"
msgstr "'%s' 的校验和错误"
+#: ../libsvn_fs_base/tree.c:3969 ../libsvn_fs_fs/tree.c:3038
msgid "Cannot compare file contents between two different filesystems"
msgstr "ä¸èƒ½åœ¨ä¸¤ä¸ªä¸åŒçš„文件系统间比较文件内容"
+#: ../libsvn_fs_base/tree.c:5013 ../libsvn_fs_base/tree.c:5188
#, c-format
msgid "Node-revision '%s' claims to have mergeinfo but doesn't"
msgstr "节点版本“%sâ€å£°ç§°è‡ªå·±æœ‰åˆå¹¶ä¿¡æ¯ï¼Œå®žé™…上å´æ²¡æœ‰"
+#: ../libsvn_fs_base/tree.c:5049
#, c-format
-msgid "Node-revision '%s' claims to sit atop a tree containing mergeinfo but is not a directory"
+msgid ""
+"Node-revision '%s' claims to sit atop a tree containing mergeinfo but is not "
+"a directory"
msgstr "节点版本“%sâ€å£°ç§°è‡ªå·±æ˜¯åŒ…å«åˆå¹¶ä¿¡æ¯çš„树顶,实际上å´ä¸æ˜¯ç›®å½•"
+#: ../libsvn_fs_fs/dag.c:426 ../libsvn_fs_fs/dag.c:442
+#: ../libsvn_ra_serf/serf.c:971 ../libsvn_ra_serf/serf.c:1034
msgid "Can't get entries of non-directory"
msgstr "ä¸èƒ½èŽ·å–éžç›®å½•çš„æ¡ç›®"
+#: ../libsvn_fs_fs/dag.c:551
#, c-format
-msgid "Can't increment mergeinfo count on node-revision %%s to negative value %%%s"
+msgid ""
+"Can't increment mergeinfo count on node-revision %%s to negative value %%%s"
msgstr "ä¸èƒ½åœ¨èŠ‚点版本 %%s 增加åˆå¹¶ä¿¡æ¯è®¡æ•°ï¼Œå› ä¸ºä¼šæº¢å‡ºåˆ°è´Ÿå€¼ %%%s"
+#: ../libsvn_fs_fs/dag.c:562
#, c-format
-msgid "Can't increment mergeinfo count on *file* node-revision %%s to %%%s (> 1)"
+msgid ""
+"Can't increment mergeinfo count on *file* node-revision %%s to %%%s (> 1)"
msgstr "ä¸èƒ½åœ¨*文件*修订节点增加åˆå¹¶ä¿¡æ¯è®¡æ•° %%s 到 %%%s (> 1)"
+#: ../libsvn_fs_fs/dag.c:1134
msgid "Empty noderev in cache"
msgstr "缓存中 noderev 为空"
+#: ../libsvn_fs_fs/dag.c:1326
#, c-format
-msgid "Can't fetch FSFS shared data"
-msgstr "ä¸èƒ½èŽ·å–文件系统互斥体"
-
-#, c-format
-msgid "Can't create FSFS write-lock mutex"
-msgstr "ä¸èƒ½åˆ›å»ºæ–‡ä»¶ç³»ç»Ÿå†™äº’斥体"
+msgid "Attempted to update ancestry of non-mutable node"
+msgstr "试图更新éžå¯å˜èŠ‚点的å‰é©±"
+#: ../libsvn_fs_fs/fs.c:82
#, c-format
-msgid "Can't create FSFS txn-current mutex"
-msgstr "ä¸èƒ½åˆ›å»º FSFS txn-current 互斥体"
-
-#, c-format
-msgid "Can't create FSFS txn list mutex"
-msgstr "ä¸èƒ½åˆ›å»ºæ–‡ä»¶ç³»ç»Ÿäº‹åŠ¡åˆ—表互斥体"
+msgid "Can't fetch FSFS shared data"
+msgstr "ä¸èƒ½èŽ·å–文件系统互斥体"
+#: ../libsvn_fs_fs/fs.c:106
#, c-format
msgid "Can't store FSFS shared data"
msgstr "ä¸èƒ½å­˜å‚¨æ–‡ä»¶ç³»ç»Ÿå…±äº«æ•°æ®"
+#: ../libsvn_fs_fs/fs.c:400
msgid "Module for working with a plain file (FSFS) repository."
msgstr "模å—与文本文件(FSFS)版本库一起工作。"
+#: ../libsvn_fs_fs/fs.c:450
#, c-format
msgid "Unsupported FS loader version (%d) for fsfs"
msgstr "ä¸æ”¯æŒçš„FSFS之FS加载器版本 (%d)"
-#, c-format
-msgid "Can't grab FSFS txn list mutex"
-msgstr "ä¸èƒ½èŽ·å–文件系统事务列表互斥体"
-
-#, c-format
-msgid "Can't ungrab FSFS txn list mutex"
-msgstr "ä¸èƒ½é‡Šæ”¾æ–‡ä»¶ç³»ç»Ÿäº‹åŠ¡åˆ—表互斥体"
-
-#, c-format
-msgid "Can't grab FSFS mutex for '%s'"
-msgstr "无法为 “%sâ€ èŽ·å– FSFS 互斥体"
-
-#, c-format
-msgid "Can't ungrab FSFS mutex for '%s'"
-msgstr "ä¸èƒ½ä¸º “%s†释放 FSFS 互斥体"
-
+#: ../libsvn_fs_fs/fs_fs.c:727
#, c-format
msgid "Can't unlock unknown transaction '%s'"
msgstr "ä¸èƒ½è§£é”未知事务“%sâ€"
+#: ../libsvn_fs_fs/fs_fs.c:731
#, c-format
msgid "Can't unlock nonlocked transaction '%s'"
msgstr "ä¸èƒ½è§£é”未é”事务“%sâ€"
+#: ../libsvn_fs_fs/fs_fs.c:738
#, c-format
msgid "Can't unlock prototype revision lockfile for transaction '%s'"
msgstr "ä¸èƒ½ä¸ºäº‹åŠ¡â€œ%sâ€è§£é”原型版本é”文件"
+#: ../libsvn_fs_fs/fs_fs.c:744
#, c-format
msgid "Can't close prototype revision lockfile for transaction '%s'"
msgstr "ä¸èƒ½ä¸ºäº‹åŠ¡â€œ%sâ€å…³é—­åŽŸåž‹ç‰ˆæœ¬é”文件"
+#: ../libsvn_fs_fs/fs_fs.c:806
#, c-format
-msgid "Cannot write to the prototype revision file of transaction '%s' because a previous representation is currently being written by this process"
+msgid ""
+"Cannot write to the prototype revision file of transaction '%s' because a "
+"previous representation is currently being written by this process"
msgstr "因为当å‰è¿›ç¨‹æ­£åœ¨å†™å…¥ä»¥å‰ç‰ˆæœ¬ï¼Œæ‰€ä»¥ä¸èƒ½ä¸ºäº‹åŠ¡ '%s' 写入原型版本文件。"
+#: ../libsvn_fs_fs/fs_fs.c:842
#, c-format
-msgid "Cannot write to the prototype revision file of transaction '%s' because a previous representation is currently being written by another process"
+msgid ""
+"Cannot write to the prototype revision file of transaction '%s' because a "
+"previous representation is currently being written by another process"
msgstr "因为其它进程正在写入以å‰ç‰ˆæœ¬ï¼Œæ‰€ä»¥ä¸èƒ½ä¸ºäº‹åŠ¡ '%s' 写入原型版本文件。"
+#: ../libsvn_fs_fs/fs_fs.c:849 ../libsvn_subr/io.c:2007
#, c-format
msgid "Can't get exclusive lock on file '%s'"
msgstr "ä¸èƒ½èŽ·å–文件“%sâ€çš„排它é”"
+#: ../libsvn_fs_fs/fs_fs.c:968
#, c-format
-msgid "Format file '%s' contains unexpected non-digit '%c' within '%s'"
-msgstr "æ ¼å¼æ–‡ä»¶â€œ%sâ€åŒ…å«æ„外的éžæ•°å­—字符 '%c' 在 '%s' 中"
+msgid "%s file '%s' contains unexpected non-digit '%c' within '%s'"
+msgstr "%s 文件“%sâ€åŒ…å«æ„外的éžæ•°å­—字符 '%c' 在 '%s' 中"
+#: ../libsvn_fs_fs/fs_fs.c:1027
#, c-format
msgid "Can't read first line of format file '%s'"
msgstr "ä¸èƒ½è¯»å–æ ¼å¼æ–‡ä»¶â€œ%sâ€çš„首行"
+#: ../libsvn_fs_fs/fs_fs.c:1064
#, c-format
msgid "'%s' contains invalid filesystem format option '%s'"
msgstr "“%sâ€åŒ…å«éžæ³•æ–‡ä»¶ç³»ç»Ÿæ ¼å¼é€‰é¡¹â€œ%sâ€"
+#: ../libsvn_fs_fs/fs_fs.c:1130
#, c-format
-msgid "Found format '%d', only created by unreleased dev builds; see http://subversion.apache.org/docs/release-notes/1.7#revprop-packing"
-msgstr "å‘现了文件系统格å¼â€œ%dâ€ï¼Œå®ƒæ˜¯ç”±æœªå‘布的开å‘版本创建的;å‚è§ http://subversion.apache.org/docs/release-notes/1.7#revprop-packing"
+msgid ""
+"Found format '%d', only created by unreleased dev builds; see http://"
+"subversion.apache.org/docs/release-notes/1.7#revprop-packing"
+msgstr ""
+"å‘现了文件系统格å¼â€œ%dâ€ï¼Œå®ƒæ˜¯ç”±æœªå‘布的开å‘版本创建的;å‚è§ http://subversion."
+"apache.org/docs/release-notes/1.7#revprop-packing"
+#: ../libsvn_fs_fs/fs_fs.c:1141
#, c-format
msgid "Expected FS format between '1' and '%d'; found format '%d'"
msgstr "期望文件系统格å¼åœ¨â€œ1â€åˆ°â€œ%dâ€ä¹‹é—´ï¼›å‘现格å¼â€œ%dâ€"
+#: ../libsvn_fs_fs/fs_fs.c:1581
#, c-format
msgid "'%s' is not a regular file. Please move it out of the way and try again"
msgstr "'%s' ä¸æ˜¯æ™®é€šæ–‡ä»¶ã€‚请移除åŽé‡è¯•"
+#: ../libsvn_fs_fs/fs_fs.c:1752
#, c-format
-msgid "Failed to create hotcopy at '%s'. The file '%s' is missing from the source repository. Please create this file, for instance by running 'svnadmin upgrade %s'"
-msgstr "在“%sâ€åˆ›å»ºçƒ­å¤‡ä»½å¤±è´¥ã€‚æºç‰ˆæœ¬åº“丢失了文件“%sâ€ã€‚请创建此文件,例如通过执行“svnadmin upgrade %sâ€æ¥åˆ›å»ºå®ƒã€‚"
+msgid "Can't read '%s'"
+msgstr "ä¸èƒ½è¯»å–“%sâ€"
+#: ../libsvn_fs_fs/fs_fs.c:1815 ../libsvn_fs_fs/fs_fs.c:1834
#, c-format
msgid "Found malformed header '%s' in revision file"
msgstr "在版本文件中找到éžæ³•æ–‡ä»¶å¤´â€œ%sâ€"
+#: ../libsvn_fs_fs/fs_fs.c:1870
#, c-format
msgid "Invalid revision number '%ld'"
msgstr "无效的版本å·â€œ%ldâ€"
+#: ../libsvn_fs_fs/fs_fs.c:1885 ../libsvn_fs_fs/fs_fs.c:1940
+#: ../libsvn_fs_fs/fs_fs.c:1951 ../libsvn_repos/log.c:2268
+#: ../libsvn_repos/log.c:2272
#, c-format
msgid "No such revision %ld"
msgstr "没有版本 %ld"
+#: ../libsvn_fs_fs/fs_fs.c:1985
+msgid "Unexpected EOF"
+msgstr "æµæ„外结æŸ"
+
+#: ../libsvn_fs_fs/fs_fs.c:1992
#, c-format
-msgid "Manifest offset '%s' too large"
-msgstr "清å•å移“%sâ€å¤ªå¤§"
+msgid "Number '%s' invalid or too large"
+msgstr "数字“%sâ€ä¸åˆæ³•ï¼Œæˆ–者太大"
+#: ../libsvn_fs_fs/fs_fs.c:2159 ../libsvn_fs_fs/fs_fs.c:2173
+#: ../libsvn_fs_fs/fs_fs.c:2181 ../libsvn_fs_fs/fs_fs.c:2189
+#: ../libsvn_fs_fs/fs_fs.c:2198 ../libsvn_fs_fs/fs_fs.c:2211
+#: ../libsvn_fs_fs/fs_fs.c:2220
msgid "Malformed text representation offset line in node-rev"
msgstr "node-rev 中有éžæ³•çš„文本修订版å移行"
+#: ../libsvn_fs_fs/fs_fs.c:2251
#, c-format
msgid "While reading representation offsets for node-revision '%s':"
msgstr "读å–节点版本“%sâ€çš„å移失败:"
+#: ../libsvn_fs_fs/fs_fs.c:2406
msgid "Missing id field in node-rev"
msgstr "node-rev 中没有 id"
+#: ../libsvn_fs_fs/fs_fs.c:2420
#, c-format
msgid "Missing kind field in node-rev '%s'"
msgstr "node-rev '%s' 中没有 kind 字段"
+#: ../libsvn_fs_fs/fs_fs.c:2455
#, c-format
msgid "Missing cpath field in node-rev '%s'"
msgstr "node-rev '%s' 中没有 cpath 字段"
+#: ../libsvn_fs_fs/fs_fs.c:2483 ../libsvn_fs_fs/fs_fs.c:2490
#, c-format
msgid "Malformed copyroot line in node-rev '%s'"
msgstr "node-rev '%s' 中的 copyroot è¡Œéžæ³•"
+#: ../libsvn_fs_fs/fs_fs.c:2507 ../libsvn_fs_fs/fs_fs.c:2514
#, c-format
msgid "Malformed copyfrom line in node-rev '%s'"
msgstr "node-rev '%s' 中的 copyfrom è¡Œéžæ³•"
+#: ../libsvn_fs_fs/fs_fs.c:2683 ../libsvn_fs_fs/fs_fs.c:7584
#, c-format
msgid "Attempted to write to non-transaction '%s'"
msgstr "试图写至éžäº‹åŠ¡ '%s'"
+#: ../libsvn_fs_fs/fs_fs.c:2820
#, c-format
msgid "Malformed representation header at %s"
msgstr "ä½äºŽ %s 的修订版头éžæ³•"
+#: ../libsvn_fs_fs/fs_fs.c:2852
#, c-format
msgid "Missing node-id in node-rev at r%ld (offset %s)"
msgstr "node-rev r%ld (å移 %s) 中没有 node-id"
+#: ../libsvn_fs_fs/fs_fs.c:2861
#, c-format
msgid "Corrupt node-id '%s' in node-rev at r%ld (offset %s)"
msgstr "node-id '%s' æŸå,ä½äºŽ node-rev r%ld (å移 %s)"
+#: ../libsvn_fs_fs/fs_fs.c:2952
#, c-format
msgid "Revision file (r%ld) lacks trailing newline"
msgstr "版本文件 (r%ld) 缺少结尾æ¢è¡Œ"
+#: ../libsvn_fs_fs/fs_fs.c:2966
#, c-format
msgid "Final line in revision file (r%ld) longer than 64 characters"
msgstr "版本文件 (r%ld) 的最åŽä¸€è¡Œå¤§äºŽ 64 个字符"
+#: ../libsvn_fs_fs/fs_fs.c:2981
#, c-format
msgid "Final line in revision file r%ld missing space"
msgstr "版本文件 (r%ld) 的最åŽä¸€è¡Œç¼ºå°‘空白字符"
+#: ../libsvn_fs_fs/fs_fs.c:3676
+#, c-format
+msgid "Packed revprop manifest for rev %ld too small"
+msgstr "版本 %ld 打包的属性清å•å¤ªå°"
+
+#: ../libsvn_fs_fs/fs_fs.c:3722
+msgid "Header end not found"
+msgstr "找ä¸åˆ° Header 的结æŸæ ‡è®°"
+
+#: ../libsvn_fs_fs/fs_fs.c:3750
+msgid "Packed revprop size exceeds pack file size"
+msgstr "打包的版本属性大å°è¶…出了打包文件长度"
+
+#: ../libsvn_fs_fs/fs_fs.c:3809
+#, c-format
+msgid "No such packed revision %ld"
+msgstr "没有此打包版本 %ld"
+
+#: ../libsvn_fs_fs/fs_fs.c:3849
+#, c-format
+msgid "Failed to read revprop pack file for rev %ld"
+msgstr "无法找到版本 %ld 打包的版本属性"
+
+#: ../libsvn_fs_fs/fs_fs.c:3856
+#, c-format
+msgid "Revprop pack file for rev %ld is corrupt"
+msgstr "版本 %ld 的属性打包文件æŸå"
+
+#: ../libsvn_fs_fs/fs_fs.c:3929
+#, c-format
+msgid "Could not read revprops for revision %ld"
+msgstr "无法找到版本 %ld 的版本属性"
+
+#: ../libsvn_fs_fs/fs_fs.c:4154
+#, c-format
+msgid "Packed file '%s' misses a tag"
+msgstr "打包文件“%sâ€åŽ»å“¦å°‘标签"
+
+#: ../libsvn_fs_fs/fs_fs.c:4491
msgid "Malformed svndiff data in representation"
msgstr "修订版的 svndiff æ•°æ®éžæ³•"
+#: ../libsvn_fs_fs/fs_fs.c:4927 ../libsvn_fs_fs/fs_fs.c:4946
msgid "Reading one svndiff window read beyond the end of the representation"
msgstr "读svndiff窗å£æ—¶è¶…出了结尾"
-msgid "svndiff data requested non-existent source"
-msgstr "svndiff æ•°æ®è¯·æ±‚ä¸å­˜åœ¨çš„æ¥æº"
-
-msgid "svndiff requested position beyond end of stream"
-msgstr "svndiff 请求的ä½ç½®è¶…出了æµçš„结尾"
-
+#: ../libsvn_fs_fs/fs_fs.c:5034
msgid "svndiff window length is corrupt"
msgstr "svndiff 的窗体长度已æŸå"
+#: ../libsvn_fs_fs/fs_fs.c:5202
msgid "Checksum mismatch while reading representation"
msgstr "读å–修订版时校验和ä¸åŒ¹é…"
+#: ../libsvn_fs_fs/fs_fs.c:5565 ../libsvn_fs_fs/fs_fs.c:5579
+#: ../libsvn_fs_fs/fs_fs.c:5586
#, c-format
msgid "Directory entry corrupt in '%s'"
msgstr "'%s' 的目录入å£æŸå"
+#: ../libsvn_fs_fs/fs_fs.c:6064 ../libsvn_fs_fs/fs_fs.c:6069
+#: ../libsvn_fs_fs/fs_fs.c:6075 ../libsvn_fs_fs/fs_fs.c:6092
+#: ../libsvn_fs_fs/fs_fs.c:6125 ../libsvn_fs_fs/fs_fs.c:6145
+#: ../libsvn_fs_fs/fs_fs.c:6180 ../libsvn_fs_fs/fs_fs.c:6185
msgid "Invalid changes line in rev-file"
msgstr "rev-file 中有éžæ³•ä¿®æ”¹è¡Œ"
+#: ../libsvn_fs_fs/fs_fs.c:6118
msgid "Invalid change kind in rev file"
msgstr "rev 文件中有无效的改å˜ç§ç±»"
+#: ../libsvn_fs_fs/fs_fs.c:6138
msgid "Invalid text-mod flag in rev-file"
msgstr "rev-file 中有无效的 text-mod 标志"
+#: ../libsvn_fs_fs/fs_fs.c:6158
msgid "Invalid prop-mod flag in rev-file"
msgstr "rev-file 中有无效的 prop-mod 标志"
+#: ../libsvn_fs_fs/fs_fs.c:6416
msgid "Copying from transactions not allowed"
msgstr "ä¸å…许从事务å¤åˆ¶"
+#: ../libsvn_fs_fs/fs_fs.c:6549
#, c-format
msgid "Unable to create transaction directory in '%s' for revision %ld"
msgstr "无法在“%sâ€ä¸­ä¸ºç‰ˆæœ¬ %ld 创建事务目录"
+#: ../libsvn_fs_fs/fs_fs.c:6614
msgid "Internal error: a null transaction id was passed to get_txn_proplist()"
msgstr "内部错误: å‘ get_txn_proplist() 传递了空事务标识"
+#: ../libsvn_fs_fs/fs_fs.c:6773 ../libsvn_fs_fs/fs_fs.c:6780
msgid "next-id file corrupt"
msgstr "next-id 文件æŸå"
+#: ../libsvn_fs_fs/fs_fs.c:6876
#, c-format
msgid "Transaction '%s' cleanup failed"
msgstr "事务 '%s' 清ç†å¤±è´¥"
+#: ../libsvn_fs_fs/fs_fs.c:7016
#, c-format
msgid "Invalid change type %d"
msgstr "无效的修改类型 %d"
+#: ../libsvn_fs_fs/fs_fs.c:7604
msgid "Can't set text contents of a directory"
msgstr "无法设定目录的文本内容"
+#: ../libsvn_fs_fs/fs_fs.c:7690 ../libsvn_fs_fs/fs_fs.c:7695
+#: ../libsvn_fs_fs/fs_fs.c:7702
msgid "Corrupt 'current' file"
msgstr "文件 “current†æŸå"
+#: ../libsvn_fs_fs/fs_fs.c:7962
#, c-format
-msgid "predecessor count for the root node-revision is wrong: found %d, committing r%ld"
-msgstr "根节点版本的å‰é©±è®¡æ•°é”™è¯¯ï¼šå‘现 %d,正在æ交 r%ld"
+msgid ""
+"predecessor count for the root node-revision is wrong: found (%d+%ld != %d), "
+"committing r%ld"
+msgstr "根节点版本的å‰ä»»è®¡æ•°é”™è¯¯: å‘现 (%d+%ld != %d), 正在æ交 r%ld"
+#: ../libsvn_fs_fs/fs_fs.c:8097
msgid "Truncated protorev file detected"
msgstr "检测到文件 protorev 被截断"
+#: ../libsvn_fs_fs/fs_fs.c:8497
msgid "Transaction out of date"
msgstr "事务过时"
+#: ../libsvn_fs_fs/fs_fs.c:8991
msgid "Recovery encountered a non-directory node"
msgstr "ä¿®å¤æ—¶é‡åˆ°éžç›®å½•èŠ‚点"
+#: ../libsvn_fs_fs/fs_fs.c:9013
msgid "Recovery encountered a deltified directory representation"
msgstr "ä¿®å¤æ—¶é‡åˆ°å·®å¼‚目录表示"
+#: ../libsvn_fs_fs/fs_fs.c:9049 ../libsvn_fs_fs/fs_fs.c:9058
+#: ../libsvn_fs_fs/fs_fs.c:9064
msgid "Directory entry corrupt"
msgstr "目录æ¡ç›®æŸå"
+#: ../libsvn_fs_fs/fs_fs.c:9237
#, c-format
msgid "Expected current rev to be <= %ld but found %ld"
msgstr "期望当å‰ç‰ˆæœ¬ <= %ld,但它是 %ld"
+#: ../libsvn_fs_fs/fs_fs.c:9294
#, c-format
msgid "Revision %ld has a revs file but no revprops file"
msgstr "版本 %ld 有版本文件,但是没有版本属性文件"
+#: ../libsvn_fs_fs/fs_fs.c:9301
+#, c-format
+msgid "Revision %ld has a revs file but the revprops file is inaccessible"
+msgstr "版本 %ld 有版本文件,但是版本属性文件ä¸å¯è®¿é—®"
+
+#: ../libsvn_fs_fs/fs_fs.c:9310
#, c-format
msgid "Revision %ld has a non-file where its revprops file should be"
msgstr "版本 %ld 有éžæ–‡ä»¶é¡¹ç›®ï¼Œä¸Žå…¶å±žæ€§æ–‡ä»¶çš„记录矛盾"
+#: ../libsvn_fs_fs/fs_fs.c:9488
#, c-format
-msgid "Node origin for '%s' exists with a different value (%s) than what we were about to store (%s)"
+msgid ""
+"Node origin for '%s' exists with a different value (%s) than what we were "
+"about to store (%s)"
msgstr "“%s†的 origin 节点å–值(%s)与我们è¦å­˜å‚¨çš„值(%s)ä¸åŒ"
+#: ../libsvn_fs_fs/fs_fs.c:9594
#, c-format
msgid "No such transaction '%s'"
msgstr "没有事务 '%s'"
+#: ../libsvn_fs_fs/fs_fs.c:10311
#, c-format
msgid "FSFS format (%d) too old to pack; please upgrade the filesystem."
msgstr "è¦æ‰“包的 FSFS æ ¼å¼ (%d) 太旧,请å‡çº§ã€‚"
+#: ../libsvn_fs_fs/fs_fs.c:10590 ../libsvn_subr/io.c:248
+#, c-format
+msgid "Error converting entry in directory '%s' to UTF-8"
+msgstr "目录 “%s†中的æ¡ç›®ä»Žæœ¬åœ°ç¼–ç è½¬æ¢åˆ° UTF8 失败"
+
+#: ../libsvn_fs_fs/fs_fs.c:10627 ../libsvn_subr/io.c:1021
+#, c-format
+msgid "Source '%s' is not a directory"
+msgstr "æº â€œ%s†ä¸æ˜¯ç›®å½•"
+
+#: ../libsvn_fs_fs/fs_fs.c:10633 ../libsvn_subr/io.c:1027
+#, c-format
+msgid "Destination '%s' is not a directory"
+msgstr "目的 “%s†ä¸æ˜¯ç›®å½•"
+
+#: ../libsvn_fs_fs/fs_fs.c:10705 ../libsvn_subr/io.c:1104
+#: ../libsvn_subr/io.c:2485
+#, c-format
+msgid "Can't read directory '%s'"
+msgstr "无法读å–目录 “%sâ€"
+
+#: ../libsvn_fs_fs/fs_fs.c:10710 ../libsvn_subr/io.c:1109
+#: ../libsvn_subr/io.c:2490 ../libsvn_subr/io.c:3995
+#, c-format
+msgid "Error closing directory '%s'"
+msgstr "关闭目录 “%s†出错"
+
+#: ../libsvn_fs_fs/fs_fs.c:10950
+#, c-format
+msgid ""
+"The FSFS format (%d) of the hotcopy source does not match the FSFS format "
+"(%d) of the hotcopy destination; please upgrade both repositories to the "
+"same format"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:10959
+msgid ""
+"The UUID of the hotcopy source does not match the UUID of the hotcopy "
+"destination"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:10966
+msgid ""
+"The sharding layout configuration of the hotcopy source does not match the "
+"sharding layout configuration of the hotcopy destination"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:11071
+#, c-format
+msgid ""
+"Failed to create hotcopy at '%s'. The file '%s' is missing from the source "
+"repository. Please create this file, for instance by running 'svnadmin "
+"upgrade %s'"
+msgstr ""
+"在“%sâ€åˆ›å»ºçƒ­å¤‡ä»½å¤±è´¥ã€‚æºç‰ˆæœ¬åº“丢失了文件“%sâ€ã€‚请创建此文件,例如通过执"
+"行“svnadmin upgrade %sâ€æ¥åˆ›å»ºå®ƒã€‚"
+
+#: ../libsvn_fs_fs/fs_fs.c:11097
+#, c-format
+msgid ""
+"The hotcopy destination already contains more revisions (%lu) than the "
+"hotcopy source contains (%lu); are source and destination swapped?"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:11133
+#, c-format
+msgid ""
+"The hotcopy destination already contains more packed revisions (%lu) than "
+"the hotcopy source contains (%lu)"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:11246
+#, c-format
+msgid ""
+"The assumed HEAD revision (%lu) of the hotcopy source has been packed while "
+"the hotcopy was in progress; please restart the hotcopy operation"
+msgstr ""
+
+#: ../libsvn_fs_fs/fs_fs.c:11261
+#, c-format
+msgid ""
+"Revision %lu disappeared from the hotcopy source while hotcopy was in "
+"progress"
+msgstr "当正在进行热å¤åˆ¶æ—¶ï¼Œç‰ˆæœ¬ %lu 从热å¤åˆ¶æºåœ°å€æ¶ˆå¤±"
+
+#: ../libsvn_fs_fs/lock.c:120
#, c-format
msgid "Corrupt lockfile for path '%s' in filesystem '%s'"
msgstr "路径 “%sâ€çš„é”文件æŸå,其文件系统是 “%sâ€"
+#: ../libsvn_fs_fs/lock.c:228
#, c-format
msgid "Cannot write lock/entries hashfile '%s'"
msgstr "无法写入é”/æ¡ç›®çš„哈希文件“%sâ€"
+#: ../libsvn_fs_fs/lock.c:280
#, c-format
msgid "Can't parse lock/entries hashfile '%s'"
msgstr "ä¸èƒ½è§£æžé”/æ¡ç›®çš„哈希文件“%s“"
+#: ../libsvn_fs_fs/lock.c:818
#, c-format
msgid "Lock failed: newer version of '%s' exists"
msgstr "加é”失败: “%sâ€çš„新版本已ç»å­˜åœ¨"
+#: ../libsvn_fs_fs/rep-cache.c:113
msgid "Couldn't open rep-cache database"
msgstr "无法打开缓存数æ®åº“"
+#: ../libsvn_fs_fs/rep-cache.c:242 ../libsvn_fs_fs/rep-cache.c:287
msgid "Only SHA1 checksums can be used as keys in the rep_cache table.\n"
msgstr "在表 rep_cache 中,åªæœ‰ SHA1 校验和æ‰èƒ½ç”¨ä½œé”®ã€‚\n"
+#: ../libsvn_fs_fs/rep-cache.c:323
#, c-format
-msgid "Youngest revision is r%ld, but rep-cache contains r%ld"
-msgstr "最å°çš„版本是 r%ld,但是缓存中包å«çš„是 r%ld"
+msgid ""
+"Representation key for checksum '%%s' exists in filesystem '%%s' with a "
+"different value (%%ld,%%%s,%%%s,%%%s) than what we were about to store (%%ld,"
+"%%%s,%%%s,%%%s)"
+msgstr ""
+"校验和 “%%s†的展现键已ç»å­˜åœ¨äºŽæ–‡ä»¶ç³»ç»Ÿ “%%s†中,å–值(%%ld,%%%s,%%%s,%%%s)与"
+"我们è¦å­˜å‚¨çš„值(%%ld,%%%s,%%%s,%%%s)ä¸åŒ"
+#: ../libsvn_fs_fs/tree.c:2190 ../libsvn_subr/path.c:1233
#, c-format
-msgid "Representation key for checksum '%%s' exists in filesystem '%%s' with a different value (%%ld,%%%s,%%%s,%%%s) than what we were about to store (%%ld,%%%s,%%%s,%%%s)"
-msgstr "校验和 “%%s†的展现键已ç»å­˜åœ¨äºŽæ–‡ä»¶ç³»ç»Ÿ “%%s†中,å–值(%%ld,%%%s,%%%s,%%%s)与我们è¦å­˜å‚¨çš„值(%%ld,%%%s,%%%s,%%%s)ä¸åŒ"
+msgid "Invalid control character '0x%02x' in path '%s'"
+msgstr "无效控制字符 “0x%02x†在路径 “%s†中"
+#: ../libsvn_fs_fs/tree.c:3789
#, c-format
msgid "Node-revision #'%s' claims to have mergeinfo but doesn't"
msgstr "节点版本 #“%s†声称有åˆå¹¶ä¿¡æ¯ï¼Œå®žé™…上å´æ²¡æœ‰"
+#: ../libsvn_fs_fs/tree.c:3905
#, c-format
msgid "Node-revision '%s@%ld' claims to have mergeinfo but doesn't"
msgstr "节点版本“%s@%ldâ€å£°ç§°æœ‰åˆå¹¶ä¿¡æ¯ï¼Œå®žé™…上å´æ²¡æœ‰"
+#: ../libsvn_fs_fs/tree.c:4105
#, c-format
-msgid "Querying mergeinfo requires version %d of the FSFS filesystem schema; filesystem '%s' uses only version %d"
+msgid ""
+"Querying mergeinfo requires version %d of the FSFS filesystem schema; "
+"filesystem '%s' uses only version %d"
msgstr "查询åˆå¹¶ä¿¡æ¯éœ€è¦ FSFS 文件系统方案版本 %d;文件系统“%sâ€åªä½¿ç”¨ç‰ˆæœ¬ %d"
+#: ../libsvn_fs_util/fs-util.c:154
msgid "Filesystem object has not been opened yet"
msgstr "文件系统对象尚未打开"
+#: ../libsvn_fs_util/fs-util.c:157
msgid "Filesystem object already open"
msgstr "文件系统对象已ç»æ‰“å¼€"
+#: ../libsvn_ra/compat.c:182
#, c-format
msgid "Missing changed-path information for '%s' in revision %ld"
msgstr "未æä¾› “%s†于版本 %ld 中的 changed-path ä¿¡æ¯"
+#: ../libsvn_ra/compat.c:326 ../libsvn_ra/compat.c:570
#, c-format
msgid "Path '%s' doesn't exist in revision %ld"
msgstr "路径 “%s†ä¸åœ¨ç‰ˆæœ¬ %ld 中"
+#: ../libsvn_ra/compat.c:403
#, c-format
msgid "'%s' in revision %ld is an unrelated object"
msgstr "“%s†于版本 %ld 是一个无关对象"
+#: ../libsvn_ra/compat.c:843 ../libsvn_ra/ra_loader.c:1291
#, c-format
msgid "Invalid peg revision %ld"
msgstr "无效的铆钉版本 %ld"
+#: ../libsvn_ra/compat.c:846 ../libsvn_ra/ra_loader.c:1294
+#: ../libsvn_repos/rev_hunt.c:214 ../libsvn_repos/rev_hunt.c:329
#, c-format
msgid "Invalid end revision %ld"
msgstr "无效结æŸç‰ˆæœ¬ %ld"
+#: ../libsvn_ra/compat.c:849 ../libsvn_ra/ra_loader.c:1297
msgid "Peg revision must precede end revision"
msgstr "铆钉版本必须å°äºŽç»“æŸç‰ˆæœ¬"
+#: ../libsvn_ra/ra_loader.c:215
#, c-format
msgid "Mismatched RA version for '%s': found %d.%d.%d%s, expected %d.%d.%d%s"
msgstr "“%s†的 RA 版本ä¸åŒ¹é…: 找到 %d.%d.%d%s,期望 %d.%d.%d%s"
+#: ../libsvn_ra/ra_loader.c:292 ../libsvn_ra_serf/serf.c:527
#, c-format
msgid "Illegal repository URL '%s'"
msgstr "éžæ³•ç‰ˆæœ¬åº“ URL “%sâ€"
+#: ../libsvn_ra/ra_loader.c:399
#, c-format
msgid "Invalid config: unknown HTTP library '%s'"
msgstr "无效é…ç½®: 未知的 HTTP 库“%sâ€"
+#: ../libsvn_ra/ra_loader.c:468
#, c-format
msgid "Unrecognized URL scheme for '%s'"
msgstr "无法识别的URL方案(一般需è¦svn://,http://,file://等开头)“%sâ€"
+#: ../libsvn_ra/ra_loader.c:519
#, c-format
msgid "Repository UUID '%s' doesn't match expected UUID '%s'"
msgstr "版本库的 UUID“%sâ€ä¸ŽæœŸæœ›çš„ UUID“%sâ€ä¸åŒ¹é…"
+#: ../libsvn_ra/ra_loader.c:540
+#, c-format
+msgid "'%s' isn't in the same repository as '%s'"
+msgstr "“%sâ€ä¸Žâ€œ%sâ€å¹¶ä¸åœ¨åŒä¸€ä¸ªç‰ˆæœ¬åº“中"
+
+#: ../libsvn_ra/ra_loader.c:564
#, c-format
msgid "'%s' isn't a child of session URL '%s'"
msgstr "“%s†ä¸æ˜¯ä¼šè¯ URL “%s†的å­èŠ‚点"
+#: ../libsvn_ra/ra_loader.c:580 ../libsvn_ra_svn/client.c:2398
#, c-format
msgid "'%s' isn't a child of repository root URL '%s'"
msgstr "“%s†ä¸æ˜¯ç‰ˆæœ¬åº“æ ¹ URL “%s†的å­èŠ‚点"
+#: ../libsvn_ra/ra_loader.c:624
#, c-format
-msgid "Specifying 'old_value_p' is not allowed when the '%s' capability is not advertised, and could indicate a bug in your client"
-msgstr "当特性 '%s' 没有广告时,ä¸å…许指定 'old_value_p',也说明您的客户端有问题"
+msgid ""
+"Specifying 'old_value_p' is not allowed when the '%s' capability is not "
+"advertised, and could indicate a bug in your client"
+msgstr ""
+"当特性 '%s' 没有广告时,ä¸å…许指定 'old_value_p',也说明您的客户端有问题"
+#: ../libsvn_ra/ra_loader.c:1445
#, c-format
msgid " - handles '%s' scheme\n"
msgstr " - 处ç†â€œ%sâ€æ–¹æ¡ˆ\n"
+#: ../libsvn_ra/ra_loader.c:1538
#, c-format
msgid "Unrecognized URL scheme '%s'"
msgstr "无法识别的URL方案(一般需è¦svn://,http://,file://等开头)“%sâ€"
+#: ../libsvn_ra/util.c:64
#, c-format
msgid "Retrieval of mergeinfo unsupported by '%s'"
msgstr "“%s†ä¸æ”¯æŒå–回åˆå¹¶ä¿¡æ¯"
+#: ../libsvn_ra/util.c:88
+#, c-format
+msgid "The '%s' feature is not supported by '%s'"
+msgstr "特性“%sâ€ä¸è¢«â€œ%sâ€æ”¯æŒ"
+
+#: ../libsvn_ra/util.c:129
#, c-format
msgid "Lock was stolen by '%s'; unable to remove it"
msgstr "é”被 '%s' 窃å–ï¼›ä¸èƒ½åˆ é™¤"
+#: ../libsvn_ra/util.c:170
#, c-format
msgid "Unable to determine local hostname"
msgstr "无法确定本地主机å称"
+#: ../libsvn_ra/util.c:265
#, c-format
msgid "Couldn't get lock on destination repos after %d attempts"
msgstr "å°è¯• %d 次åŽï¼Œå¯¹ç›®æ ‡ç‰ˆæœ¬åº“加é”失败"
+#: ../libsvn_ra_local/ra_plugin.c:161
msgid "memory-cache-size invalid"
msgstr "éžæ³•çš„ memory-cache-size"
#. ----------------------------------------------------------------
#. ** The RA vtable routines **
+#: ../libsvn_ra_local/ra_plugin.c:502
msgid "Module for accessing a repository on local disk."
msgstr "访问本地ç£ç›˜çš„版本库模å—。"
+#: ../libsvn_ra_local/ra_plugin.c:578
msgid "Unable to open an ra_local session to URL"
msgstr "无法为 URL 打开 ra_local 会è¯"
+#: ../libsvn_ra_local/ra_plugin.c:611 ../libsvn_ra_serf/serf.c:519
#, c-format
msgid "URL '%s' is not a child of the session's repository root URL '%s'"
msgstr "URL “%s†ä¸æ˜¯ä¼šè¯ç‰ˆæœ¬åº“æ ¹ URL “%s†的å­èŠ‚点"
+#: ../libsvn_ra_local/ra_plugin.c:1139 ../libsvn_ra_local/ra_plugin.c:1596
+#: ../libsvn_ra_serf/util.c:2414
#, c-format
msgid "'%s' path not found"
msgstr "找ä¸åˆ°è·¯å¾„ “%sâ€"
+#: ../libsvn_ra_local/ra_plugin.c:1538 ../libsvn_ra_serf/options.c:616
+#: ../libsvn_ra_svn/client.c:2599
#, c-format
msgid "Don't know anything about capability '%s'"
msgstr "ä¸çŸ¥é“特性 “%s†的任何信æ¯"
+#: ../libsvn_ra_local/ra_plugin.c:1744
#, c-format
msgid "Unsupported RA loader version (%d) for ra_local"
msgstr "ä¸æ”¯æŒra_local RA加载器版本 %d"
+#: ../libsvn_ra_local/split_url.c:49 ../libsvn_ra_local/split_url.c:55
#, c-format
msgid "Unable to open repository '%s'"
msgstr "无法打开版本库“%sâ€"
-msgid "Could not fetch the Version Resource URL (needed during an import or when it is missing from the local, cached props)"
-msgstr "ä¸èƒ½èŽ·å–版本资æºURL(导入时需è¦æˆ–本地缓存属性中缺少)"
-
-#, c-format
-msgid "File or directory '%s' is out of date; try updating"
-msgstr "文件或目录 “%s†已ç»è¿‡æ—¶ï¼›è¯·å…ˆæ›´æ–°"
-
-msgid "The CHECKOUT response did not contain a 'Location:' header"
-msgstr "检出(CHECKOUT)å“应没有包å«â€œLocation:â€å¤´ä¿¡æ¯"
-
-#, c-format
-msgid "Unable to parse URL '%s'"
-msgstr "ä¸èƒ½è§£æž URL “%sâ€"
-
-#, c-format
-msgid "POST request did not return transaction information"
-msgstr "POST 请求没有返回事务的信æ¯"
-
-#, c-format
-msgid "File '%s' already exists"
-msgstr "文件“%sâ€å·²å­˜åœ¨"
-
+#: ../libsvn_ra_serf/commit.c:219
#, c-format
-msgid "Could not write svndiff to temp file"
-msgstr "无法将 svndiff 写入临时文件"
-
-#, c-format
-msgid "No lock on path '%s' (Status %d on PUT Request)"
-msgstr "路径“%sâ€æ²¡æœ‰è¢«é”定 (PUT 请求的状æ€ç æ˜¯ %d)"
-
-msgid "Could not save the URL of the version resource"
-msgstr "无法储存版本资æºçš„URL"
-
-msgid "Could not get content-type from response"
-msgstr "ä¸èƒ½ä»Žå“应中获得内容类型"
-
-msgid "Could not save file"
-msgstr "无法ä¿å­˜æ–‡ä»¶"
-
-msgid "Can't get text contents of a directory"
-msgstr "无法获得目录的文本内容"
-
-#, c-format
-msgid " expected: %s"
-msgstr " 期望: %s"
-
-#, c-format
-msgid " actual: %s"
-msgstr " 实际: %s"
-
-msgid "Server response missing the expected deadprop-count property"
-msgstr "æœåŠ¡å™¨å“应丢失了期望的 deadprop-count 属性"
-
-msgid "DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent"
-msgstr "DAV 请求失败;å¯èƒ½æ˜¯ç‰ˆæœ¬åº“çš„ pre-revprop-change é’©å­æ‰§è¡Œå¤±è´¥æˆ–者ä¸å­˜åœ¨"
-
-#, c-format
-msgid "Missing rev attr in target-revision element"
-msgstr "元素 target-revision 没有 rev 属性"
-
-#, c-format
-msgid "Missing name attr in absent-directory element"
-msgstr "元素 absent-directory 没有 name 属性"
-
-#, c-format
-msgid "Missing name attr in absent-file element"
-msgstr "元素 absent-file 没有 name 属性"
+msgid "%s of '%s': %d %s"
+msgstr "%s 于 '%s': %d %s"
-#, c-format
-msgid "Missing path attr in resource element"
-msgstr "元素 resource 没有 path 属性"
+#: ../libsvn_ra_serf/commit.c:319
+msgid "No Location header received"
+msgstr "没有收到ä½ç½®å¤´"
-#, c-format
-msgid "Missing rev attr in open-directory element"
-msgstr "元素 open-directory 没有 rev 属性"
+#: ../libsvn_ra_serf/commit.c:329
+msgid "Error parsing Location header value"
+msgstr "解æžä½ç½®å¤´å‡ºé”™"
+#: ../libsvn_ra_serf/commit.c:431
#, c-format
-msgid "Missing name attr in open-directory element"
-msgstr "元素 open-directory 没有 name 属性"
+msgid "Directory '%s' is out of date; try updating"
+msgstr "目录 “%s†已ç»è¿‡æ—¶ï¼›è¯·å…ˆæ›´æ–°"
+#: ../libsvn_ra_serf/commit.c:519 ../libsvn_repos/commit.c:512
#, c-format
-msgid "Missing name attr in add-directory element"
-msgstr "元素 add-directory 没有 name 属性"
+msgid "Path '%s' not present"
+msgstr "路径 “%s†ä¸å­˜åœ¨"
+#: ../libsvn_ra_serf/commit.c:569
#, c-format
-msgid "Missing copyfrom-rev attr in add-directory element"
-msgstr "元素 add-directory 没有 copyfrom-rev 属性"
+msgid "File '%s' is out of date; try updating"
+msgstr "文件 “%s†已ç»è¿‡æ—¶ï¼›è¯·å…ˆæ›´æ–°"
-#, c-format
-msgid "Missing rev attr in open-file element"
-msgstr "元素 open-file 没有 rev 属性"
+#: ../libsvn_ra_serf/commit.c:971
+msgid "At least one property change failed; repository is unchanged"
+msgstr "至少有一个属性å˜æ›´å¤±è´¥ï¼›ç‰ˆæœ¬åº“未改å˜"
+#: ../libsvn_ra_serf/commit.c:1171
#, c-format
-msgid "Missing name attr in open-file element"
-msgstr "元素 open-file 没有 name 属性"
+msgid "Failed writing updated file"
+msgstr "更新文件失败"
+#: ../libsvn_ra_serf/commit.c:1359 ../libsvn_ra_serf/commit.c:1449
#, c-format
-msgid "Missing name attr in add-file element"
-msgstr "元素 add-file 没有 name 属性"
+msgid "%s of '%s': %d %s (%s://%s)"
+msgstr "%s 于 '%s': %d %s (%s://%s)"
+#: ../libsvn_ra_serf/commit.c:1369
#, c-format
-msgid "Missing copyfrom-rev attr in add-file element"
-msgstr "元素 add-file 没有 copyfrom-rev 属性"
+msgid "POST request did not return transaction information"
+msgstr "POST 请求没有返回事务的信æ¯"
-#, c-format
-msgid "Missing name attr in set-prop element"
-msgstr "元素 set-pro 没有 name 属性"
+#: ../libsvn_ra_serf/commit.c:1413
+msgid ""
+"The OPTIONS response did not include the requested activity-collection-set "
+"value"
+msgstr "OPTIONS å“应中没有包å«è¯·æ±‚çš„ activity-collection-set 值。"
+#: ../libsvn_ra_serf/commit.c:1678 ../libsvn_ra_serf/commit.c:2076
+#: ../libsvn_ra_serf/update.c:2631
#, c-format
-msgid "Missing name attr in remove-prop element"
-msgstr "元素 remove-prop 没有 name 属性"
+msgid "Unable to parse URL '%s'"
+msgstr "ä¸èƒ½è§£æž URL “%sâ€"
+#: ../libsvn_ra_serf/commit.c:1706 ../libsvn_ra_serf/util.c:2410
#, c-format
-msgid "Missing name attr in delete-entry element"
-msgstr "元素 delete-entry 没有 attr 属性"
+msgid "Access to '%s' forbidden"
+msgstr "ç¦æ­¢è®¿é—® '%s'"
+#: ../libsvn_ra_serf/commit.c:1710
#, c-format
-msgid "Error writing to '%s': unexpected EOF"
-msgstr "写入 “%s†时出错: æ„外的 EOF"
+msgid "Adding directory failed: %s on %s (%d %s)"
+msgstr "增加目录失败: “%s†于 “%sâ€(%d %s)"
+#: ../libsvn_ra_serf/commit.c:1928
#, c-format
-msgid "Unknown XML encoding: '%s'"
-msgstr "未知的 XML ç¼–ç : “%sâ€"
+msgid "File '%s' already exists"
+msgstr "文件“%sâ€å·²å­˜åœ¨"
+#: ../libsvn_ra_serf/commit.c:2199
#, c-format
-msgid "REPORT response handling failed to complete the editor drive"
-msgstr "处ç†æŠ¥å‘Šå“应失败,ä¸èƒ½å®Œæˆç¼–辑"
+msgid "MERGE request failed: returned %d (during commit)"
+msgstr "MERGE 请求失败: 返回 %d (在æ交期间)"
-msgid "Failed to write full amount to stream"
-msgstr "无法将全部数æ®å†™å…¥æµ"
+#: ../libsvn_ra_serf/commit.c:2464
+msgid ""
+"DAV request failed; it's possible that the repository's pre-revprop-change "
+"hook either failed or is non-existent"
+msgstr "DAV 请求失败;å¯èƒ½æ˜¯ç‰ˆæœ¬åº“çš„ pre-revprop-change é’©å­æ‰§è¡Œå¤±è´¥æˆ–者ä¸å­˜åœ¨"
+#: ../libsvn_ra_serf/get_deleted_rev.c:173
#, c-format
msgid "'%s' REPORT not implemented"
msgstr "未实现 “%s†REPORT "
-msgid "The file-revs report didn't contain any revisions"
-msgstr "file-revs 报告中没有包å«ä»»ä½•ç‰ˆæœ¬"
-
-msgid "Server does not support date-based operations"
-msgstr "æœåŠ¡å™¨ä¸æ”¯æŒåŸºäºŽæ—¥æœŸçš„æ“作"
-
-msgid "Invalid server response to dated-rev request"
-msgstr "æœåŠ¡å™¨è¯·æ±‚ dated-rev çš„å“应无效"
-
-msgid "Expected valid revision range"
-msgstr "期望åˆæ³•çš„版本范围"
-
-msgid "Expected a valid revnum and path"
-msgstr "期望åˆæ³•çš„版本å·å’Œè·¯å¾„"
-
-msgid "Incomplete lock data returned"
-msgstr "返回了ä¸å®Œå…¨çš„é”æ•°æ®"
-
+#: ../libsvn_ra_serf/locks.c:234
#, c-format
-msgid "Got unrecognized encoding '%s'"
-msgstr "得到ä¸èƒ½è¯†åˆ«çš„ç¼–ç â€œ%sâ€"
+msgid "Lock request failed: %d %s"
+msgstr "加é”请求失败: %d %s"
+
+#: ../libsvn_ra_serf/locks.c:414
+msgid "Malformed URL for repository"
+msgstr "版本库的 URL éžæ³•"
+#: ../libsvn_ra_serf/locks.c:420
msgid "Server does not support locking features"
msgstr "æœåŠ¡å™¨ä¸æ”¯æŒåŠ é”"
-msgid "Invalid creation date header value in response."
-msgstr "在å“应头中有éžæ³•åˆ›å»ºæ—¥æœŸ"
-
-msgid "Invalid timeout value"
-msgstr "éžæ³•è¶…æ—¶å–值"
-
-#, c-format
-msgid "Failed to parse URI '%s'"
-msgstr "è§£æž URI “%s†失败"
-
-#, c-format
-msgid "Lock request failed: %d %s"
-msgstr "加é”请求失败: %d %s"
-
+#: ../libsvn_ra_serf/locks.c:581
#, c-format
msgid "'%s' is not locked in the repository"
msgstr "版本库中的“%sâ€æ²¡æœ‰è¢«é”定"
+#: ../libsvn_ra_serf/locks.c:632 ../libsvn_ra_serf/locks.c:638
#, c-format
-msgid "Unlock failed on '%s' (%d Forbidden)"
-msgstr "对 '%s' 解é”失败 (%d ç¦æ­¢)"
-
-#, c-format
-msgid "No lock on path '%s' (%d Bad Request)"
-msgstr "路径“%sâ€æ²¡æœ‰è¢«é”定 (%d 错误的请求)"
-
-msgid "Failed to fetch lock information"
-msgstr "获å–é”ä¿¡æ¯å¤±è´¥"
+msgid "Unlock request failed: %d %s"
+msgstr "解é”请求失败: %d %s"
+#: ../libsvn_ra_serf/log.c:169
#, c-format
-msgid "Missing name attr in revprop element"
-msgstr "元素 revprop 没有 name 属性"
+msgid "Unsupported encoding '%s'"
+msgstr "ä¸æ”¯æŒçš„ç¼–ç â€œ%sâ€"
+#: ../libsvn_ra_serf/log.c:568 ../libsvn_ra_svn/client.c:1551
msgid "Server does not support custom revprops via log"
msgstr "æœåŠ¡å™¨ä¸æ”¯æŒé€šè¿‡æ—¥å¿—自定义 revprops"
-#, c-format
-msgid "Protocol error: we told the server not to auto-merge any resources, but it said that '%s' was merged"
-msgstr "通讯å议错误: 我们让æœåŠ¡å™¨ä¸è¦è‡ªåŠ¨åˆå¹¶ä»»ä½•èµ„æºï¼Œä½†æ˜¯å®ƒæŠ¥å‘Šâ€œ%sâ€å·²è¢«åˆå¹¶"
-
-#, c-format
-msgid "Internal error: there is an unknown parent (%d) for the 'DAV:response' element within the MERGE response"
-msgstr "内部错误: 在 MERGE å“应中,“DAV:responseâ€å…ƒç´ æœ‰æœªçŸ¥çš„父项 (%d)"
-
-#, c-format
-msgid "Protocol error: the MERGE response for the '%s' resource did not return all of the properties that we asked for (and need to complete the commit)"
-msgstr "通讯å议错误: 对“%sâ€çš„ MERGE å“应并未返回所有我们请求的属性 (这些是完æˆæ交所需è¦çš„)"
-
+#: ../libsvn_ra_serf/merge.c:200
#, c-format
msgid "A MERGE response for '%s' is not a child of the destination ('%s')"
msgstr "“%sâ€çš„ MERGE å“应并ä¸æ˜¯ç›®æ ‡ (“%sâ€) çš„å­é¡¹"
-msgid "The MERGE property response had an error status"
-msgstr "MERGE 属性å“应包å«é”™è¯¯çŠ¶æ€"
-
-msgid "The OPTIONS response did not include the requested activity-collection-set; this often means that the URL is not WebDAV-enabled"
-msgstr "OPTIONS å“应没有包å«è¯·æ±‚çš„ activity-collection-set;通常是此 URL 没有å¯ç”¨ WebDAV。"
-
+#: ../libsvn_ra_serf/options.c:599
#, c-format
msgid "Don't know how to handle '%s' for capability '%s'"
msgstr "ä¸çŸ¥é“如何处ç†â€œ%sâ€ï¼Œå¯¹äºŽç‰¹æ€§â€œ%sâ€"
+#: ../libsvn_ra_serf/options.c:623
#, c-format
msgid "Attempt to fetch capability '%s' resulted in '%s'"
msgstr "试图å–得特性 “%s†导致 “%sâ€"
+#: ../libsvn_ra_serf/property.c:279 ../libsvn_ra_serf/update.c:2473
#, c-format
-msgid "Failed to find label '%s' for URL '%s'"
-msgstr "无法找到标签 “%s†于 URL “%sâ€"
-
-#, c-format
-msgid "'%s' was not present on the resource '%s'"
-msgstr "'%s' ä¸åœ¨èµ„æº '%s' 中"
-
-#, c-format
-msgid "Neon was unable to parse URL '%s'"
-msgstr "Neon ä¸èƒ½è§£æžURL“%sâ€"
+msgid "Got unrecognized encoding '%s'"
+msgstr "得到ä¸èƒ½è¯†åˆ«çš„ç¼–ç â€œ%sâ€"
-msgid "The path was not part of a repository"
-msgstr "路径ä¸æ˜¯ç‰ˆæœ¬åº“的一部分"
+#: ../libsvn_ra_serf/property.c:700
+msgid "The PROPFIND response did not include the requested properties"
+msgstr "PROPFIND å“应中没有包å«è¯·æ±‚的属性"
-#, c-format
-msgid "No part of path '%s' was found in repository HEAD"
-msgstr "路径“%sâ€çš„任何部分都ä¸åœ¨ç‰ˆæœ¬åº“çš„ HEAD 中"
+#: ../libsvn_ra_serf/property.c:993
+msgid ""
+"The PROPFIND response did not include the requested baseline-collection value"
+msgstr "PROPFIND å“应中没有包å«è¯·æ±‚çš„ baseline-collection 值。"
-msgid "The VCC property was not found on the resource"
-msgstr "资æºæ²¡æœ‰ VCC 属性"
+#: ../libsvn_ra_serf/property.c:1005
+msgid "The PROPFIND response did not include the requested version-name value"
+msgstr "PROPFIND å“应中没有包å«è¯·æ±‚çš„ version-name 值。"
-msgid "The relative-path property was not found on the resource"
-msgstr "资æºæ²¡æœ‰ relative-path 属性"
+#: ../libsvn_ra_serf/property.c:1043
+msgid "The OPTIONS response did not include the requested checked-in value"
+msgstr "OPTIONS å“应中没有包å«è¯·æ±‚çš„ checked-in 值。"
+#: ../libsvn_ra_serf/property.c:1125
msgid "The OPTIONS response did not include the youngest revision"
msgstr "OPTIONS å“应中没有包å«æœ€æ–°çš„版本"
-#, c-format
-msgid "Url '%s' is not in repository '%s'"
-msgstr "URL '%s' ä¸åœ¨ç‰ˆæœ¬åº“ '%s' 中"
+#: ../libsvn_ra_serf/property.c:1218
+msgid "The PROPFIND response did not include the requested resourcetype value"
+msgstr "PROPFIND å“应中没有包å«è¯·æ±‚çš„ resourcetype 值"
-msgid "'DAV:baseline-collection' was not present on the baseline resource"
-msgstr "基线资æºæ²¡æœ‰â€œDAV:baseline-collectionâ€"
+#: ../libsvn_ra_serf/property.c:1253
+msgid "The PROPFIND response did not include the requested 'DAV:' properties"
+msgstr "PROPFIND å“应中没有包å«è¯·æ±‚çš„ 'DAV:' 属性"
-#, c-format
-msgid "'%s' was not present on the baseline resource"
-msgstr "“%s†ä¸åœ¨åŸºçº¿èµ„æºä¸­"
+#: ../libsvn_ra_serf/replay.c:223 ../libsvn_ra_serf/update.c:1660
+msgid "Missing revision attr in target-revision element"
+msgstr "元素“target-revision没有revision属性"
-#, c-format
-msgid "No lock on path '%s'; repository is unchanged"
-msgstr "路径 '%s' 上没有é”;版本库未改å˜"
+#: ../libsvn_ra_serf/replay.c:241
+msgid "Missing revision attr in open-root element"
+msgstr "元素“open-root没有revisioin属性"
-msgid "At least one property change failed; repository is unchanged"
-msgstr "至少有一个属性å˜æ›´å¤±è´¥ï¼›ç‰ˆæœ¬åº“未改å˜"
+#: ../libsvn_ra_serf/replay.c:261 ../libsvn_ra_serf/update.c:1888
+msgid "Missing name attr in delete-entry element"
+msgstr "元素 delete-entry 没有 attr 属性"
-msgid "Got apply-textdelta element without preceding add-file or open-file"
-msgstr "元素 apply-textdelta 之å‰æ²¡æœ‰ add-file 或者 open-file 元素"
+#: ../libsvn_ra_serf/replay.c:267
+msgid "Missing revision attr in delete-entry element"
+msgstr "delete-entry元素没有revision属性"
-msgid "Got close-file element without preceding add-file or open-file"
-msgstr "元素close-file之å‰æ²¡æœ‰add-file或者open-file元素"
+#: ../libsvn_ra_serf/replay.c:287 ../libsvn_ra_serf/update.c:1727
+msgid "Missing name attr in open-directory element"
+msgstr "元素 open-directory 没有 name 属性"
-msgid "Got close-directory element without ever opening a directory"
-msgstr "在没有打开目录的情况下å‘现了close-directory元素"
+#: ../libsvn_ra_serf/replay.c:293 ../libsvn_ra_serf/update.c:1678
+#: ../libsvn_ra_serf/update.c:1718
+msgid "Missing revision attr in open-directory element"
+msgstr "open-directory元素没有revision属性"
-#, c-format
-msgid "Error writing stream: unexpected EOF"
-msgstr "写入æµå‡ºé”™: æ„外的 EOF"
+#: ../libsvn_ra_serf/replay.c:313 ../libsvn_ra_serf/update.c:1765
+msgid "Missing name attr in add-directory element"
+msgstr "元素 add-directory 没有 name 属性"
-#, c-format
-msgid "Got cdata content for a prop delete"
-msgstr "删除属性时é‡åˆ°cdata内容"
+#: ../libsvn_ra_serf/replay.c:349 ../libsvn_ra_serf/update.c:1809
+msgid "Missing name attr in open-file element"
+msgstr "元素 open-file 没有 name 属性"
+
+#: ../libsvn_ra_serf/replay.c:355 ../libsvn_ra_serf/update.c:1818
+msgid "Missing revision attr in open-file element"
+msgstr "open-file元素没有revision属性"
+#: ../libsvn_ra_serf/replay.c:376 ../libsvn_ra_serf/update.c:1843
+msgid "Missing name attr in add-file element"
+msgstr "元素 add-file 没有 name 属性"
+
+#: ../libsvn_ra_serf/replay.c:442 ../libsvn_ra_serf/update.c:1984
+#: ../libsvn_ra_serf/update.c:2071
#, c-format
-msgid "PIN for token \"%s\" in slot \"%s\""
-msgstr "é’‰ä½ä»¤ç‰Œâ€œ%sâ€äºŽé€šé““%sâ€"
+msgid "Missing name attr in %s element"
+msgstr "元素“%sâ€æ²¡æœ‰name属性"
-msgid "Invalid URL: illegal character in proxy port number"
-msgstr "无效URL: 代ç†ç«¯å£ä¸­æœ‰éžæ³•å­—符"
+#: ../libsvn_ra_serf/replay.c:579
+msgid "Error writing stream: unexpected EOF"
+msgstr "写入æµå‡ºé”™: æ„外的 EOF"
-msgid "Invalid URL: negative proxy port number"
-msgstr "无效URL: 负的代ç†ç«¯å£"
+#: ../libsvn_ra_serf/sb_bucket.c:65
+msgid "Failed to read the request"
+msgstr "读å–请求失败"
-msgid "Invalid URL: proxy port number greater than maximum TCP port number 65535"
-msgstr "无效URL: 代ç†ç«¯å£å¤§äºŽTCP通信端å£æœ€å¤§å€¼65535"
+#: ../libsvn_ra_serf/serf.c:62
+msgid "Module for accessing a repository via WebDAV protocol using serf."
+msgstr "通过 WebDAV å议使用 serf 访问版本库的模å—。"
+
+#: ../libsvn_ra_serf/serf.c:122
+#, c-format
+msgid "Invalid config: unknown %s '%s'"
+msgstr "无效é…ç½®: 未知 %s “%sâ€"
+#: ../libsvn_ra_serf/serf.c:303
msgid "Invalid config: illegal character in timeout value"
msgstr "无效é…ç½®: 超时数值中有éžæ³•å­—符"
+#: ../libsvn_ra_serf/serf.c:307
msgid "Invalid config: negative timeout value"
msgstr "无效é…ç½®: 负的超时"
-msgid "Invalid config: illegal character in debug mask value"
-msgstr "无效é…ç½®: 调试掩ç ä¸­æœ‰éžæ³•å­—符"
+#: ../libsvn_ra_serf/serf.c:320
+msgid "Invalid URL: illegal character in proxy port number"
+msgstr "无效URL: 代ç†ç«¯å£ä¸­æœ‰éžæ³•å­—符"
-#, c-format
-msgid "Invalid config: unknown http authtype '%s'"
-msgstr "无效é…ç½®: 未知的 http 认è¯ç±»åž‹â€œ%sâ€"
+#: ../libsvn_ra_serf/serf.c:324
+msgid "Invalid URL: negative proxy port number"
+msgstr "无效URL: 负的代ç†ç«¯å£"
-msgid "Module for accessing a repository via WebDAV protocol using Neon."
-msgstr "通过 WebDAV å议使用 neon 访问版本库的模å—。"
+#: ../libsvn_ra_serf/serf.c:327
+msgid ""
+"Invalid URL: proxy port number greater than maximum TCP port number 65535"
+msgstr "无效URL: 代ç†ç«¯å£å¤§äºŽTCP通信端å£æœ€å¤§å€¼65535"
+#: ../libsvn_ra_serf/serf.c:347
#, c-format
-msgid "URL '%s' is malformed or the scheme or host or path is missing"
-msgstr "éžæ³• URL “%sâ€ï¼Œç¼ºå°‘方案,主机或路径"
-
-msgid "Network socket initialization failed"
-msgstr "创建网络套接字失败"
-
-msgid "SSL is not supported"
-msgstr "ä¸æ”¯æŒ SSL"
+msgid "Could not resolve proxy server '%s'"
+msgstr "ä¸èƒ½è§£æžä»£ç†æœåŠ¡å™¨â€œ%sâ€"
+#: ../libsvn_ra_serf/serf.c:420
#, c-format
-msgid "Invalid config: unable to load certificate file '%s'"
-msgstr "无效的é…ç½®: 无法加载è¯ä¹¦æ–‡ä»¶â€œ%sâ€"
+msgid "Illegal URL '%s'"
+msgstr "éžæ³• URL “%sâ€"
+#: ../libsvn_ra_serf/serf.c:488
#, c-format
-msgid "Invalid config: unable to load PKCS#11 provider '%s'"
-msgstr "无效的é…ç½®: 无法加载 PKCS#11 æ供者“%sâ€"
+msgid "Connection to '%s' failed"
+msgstr "连接到“%sâ€å¤±è´¥"
+#: ../libsvn_ra_serf/serf.c:1149
msgid "The UUID property was not found on the resource or any of its parents"
msgstr "无法在本资æºæˆ–其任何父项目中找到UUID属性"
+#: ../libsvn_ra_serf/serf.c:1223
#, c-format
-msgid "Unsupported RA loader version (%d) for ra_neon"
-msgstr "ä¸æ”¯æŒçš„ ra_neon RA 加载器版本(%d)"
-
-msgid "The request response contained at least one error"
-msgstr "请求的å“应至少有一个错误"
-
-msgid "The response contains a non-conforming HTTP status line"
-msgstr "å“应包å«äº†ä¸ä¸€è‡´çš„HTTP状æ€è¡Œ"
-
-#, c-format
-msgid "Error setting property '%s': "
-msgstr "设置属性 “%s†出错: "
-
-#, c-format
-msgid "%s of '%s'"
-msgstr "方法 %s 失败于 “%sâ€"
-
-#, c-format
-msgid "Access to '%s' forbidden"
-msgstr "ç¦æ­¢è®¿é—® '%s'"
-
-#, c-format
-msgid "Repository moved permanently to '%s'; please relocate"
-msgstr "版本库永久移到 “%sâ€ï¼›è¯·é‡æ–°å®šä½ã€‚"
-
-#, c-format
-msgid "Repository moved temporarily to '%s'; please relocate"
-msgstr "版本库临时移到‘%s’;请é‡æ–°å®šä½ã€‚"
-
-#, c-format
-msgid "Server sent unexpected return value (%d %s) in response to %s request for '%s'"
-msgstr "æœåŠ¡å™¨å‘é€äº†æ„外的返回值(%d %s),在å“应 “%s†的请求 “%s†中"
-
-#, c-format
-msgid "authorization failed: %s"
-msgstr "认è¯å¤±è´¥: %s"
-
-msgid "authorization failed"
-msgstr "认è¯å¤±è´¥"
-
-msgid "could not connect to server"
-msgstr "无法连接到æœåŠ¡å™¨"
-
-msgid "timed out waiting for server"
-msgstr "等待æœåŠ¡å™¨è¶…æ—¶"
-
-#. ### This is a translation nightmare. Make sure to compose full strings
-#. and mark those for translation.
-#, c-format
-msgid "%s: %s (%s://%s)"
-msgstr "%s: %s (%s://%s)"
-
-msgid "General svn error from server"
-msgstr "æ¥è‡ªæœåŠ¡å™¨çš„一般 svn 错误"
-
-#, c-format
-msgid "Can't calculate the request body size"
-msgstr "无法计算请求主体大å°"
-
-#, c-format
-msgid "The %s request returned invalid XML in the response: %s (%s)"
-msgstr "%s 请求的å“应返回无效 XML: %s (%s)"
-
-#, c-format
-msgid "Error reading spooled %s request response"
-msgstr "读å–请求 %s å“应的脱机数æ®æ—¶å‡ºçŽ°é”™è¯¯"
-
-#, c-format
-msgid "%s of '%s': %d %s"
-msgstr "%s 于 '%s': %d %s"
-
-msgid "No Location header received"
-msgstr "没有收到ä½ç½®å¤´"
-
-#, c-format
-msgid "Directory '%s' is out of date; try updating"
-msgstr "目录 “%s†已ç»è¿‡æ—¶ï¼›è¯·å…ˆæ›´æ–°"
-
-#, c-format
-msgid "Path '%s' not present"
-msgstr "路径 “%s†ä¸å­˜åœ¨"
-
-#, c-format
-msgid "File '%s' is out of date; try updating"
-msgstr "文件 “%s†已ç»è¿‡æ—¶ï¼›è¯·å…ˆæ›´æ–°"
-
-#, c-format
-msgid "Failed writing updated file"
-msgstr "更新文件失败"
-
-#, c-format
-msgid "%s of '%s': %d %s (%s://%s)"
-msgstr "%s 于 '%s': %d %s (%s://%s)"
-
-msgid "The OPTIONS response did not include the requested activity-collection-set value"
-msgstr "OPTIONS å“应中没有包å«è¯·æ±‚çš„ activity-collection-set 值。"
-
-#, c-format
-msgid "Adding directory failed: %s on %s (%d %s)"
-msgstr "增加目录失败: “%s†于 “%sâ€(%d %s)"
+msgid "Unsupported RA loader version (%d) for ra_serf"
+msgstr "ä¸æ”¯æŒçš„ ra_serf RA 加载器版本(%d)"
+#: ../libsvn_ra_serf/serf.c:1237
#, c-format
-msgid "Location segment report failed on '%s'@'%ld'"
-msgstr "ä½ç½®åˆ†æ®µæŠ¥å‘Šå¤±è´¥äºŽâ€œ%sâ€@“%ldâ€"
-
-msgid "Malformed URL for repository"
-msgstr "版本库的 URL éžæ³•"
+msgid ""
+"ra_serf was compiled for serf %d.%d.%d but loaded an incompatible %d.%d.%d "
+"library"
+msgstr "ra_serf 为 serf %d.%d.%d 编译,但是加载了ä¸å…¼å®¹çš„共享库 %d.%d.%d"
+#: ../libsvn_ra_serf/update.c:1118
#, c-format
-msgid "Unlock request failed: %d %s"
-msgstr "解é”请求失败: %d %s"
+msgid "GET request returned unexpected delta base: %s"
+msgstr "GET 请求返回ä¸æœŸæœ›çš„差异基础: %s"
+#: ../libsvn_ra_serf/update.c:1136
#, c-format
-msgid "Unsupported encoding '%s'"
-msgstr "ä¸æ”¯æŒçš„ç¼–ç â€œ%sâ€"
-
-msgid "The PROPFIND response did not include the requested baseline-collection value"
-msgstr "PROPFIND å“应中没有包å«è¯·æ±‚çš„ baseline-collection 值。"
-
-msgid "The PROPFIND response did not include the requested version-name value"
-msgstr "PROPFIND å“应中没有包å«è¯·æ±‚çš„ version-name 值。"
-
-msgid "The OPTIONS response did not include the requested checked-in value"
-msgstr "OPTIONS å“应中没有包å«è¯·æ±‚çš„ checked-in 值。"
-
-msgid "The PROPFIND response did not include the requested resourcetype value"
-msgstr "PROPFIND å“应中没有包å«è¯·æ±‚çš„ resourcetype 值"
-
-msgid "Missing revision attr in target-revision element"
-msgstr "元素“target-revision没有revision属性"
-
-msgid "Missing revision attr in open-root element"
-msgstr "元素“open-root没有revisioin属性"
-
-msgid "Missing revision attr in delete-entry element"
-msgstr "delete-entry元素没有revision属性"
-
-msgid "Missing revision attr in open-directory element"
-msgstr "open-directory元素没有revision属性"
+msgid "GET request failed: %d %s"
+msgstr "GET 请求失败: %d %s"
-msgid "Missing revision attr in open-file element"
-msgstr "open-file元素没有revision属性"
+#: ../libsvn_ra_serf/update.c:1922
+msgid "Missing name attr in absent-directory element"
+msgstr "元素 absent-directory 没有 name 属性"
-#, c-format
-msgid "Missing name attr in %s element"
-msgstr "元素“%sâ€æ²¡æœ‰name属性"
+#: ../libsvn_ra_serf/update.c:1947
+msgid "Missing name attr in absent-file element"
+msgstr "元素 absent-file 没有 name 属性"
+#: ../libsvn_ra_serf/update.c:2015 ../libsvn_ra_serf/update.c:2122
#, c-format
-msgid "Error retrieving replay REPORT (%d)"
-msgstr "获å–é‡æ”¾æŠ¥å‘Šå‡ºé”™(%d)"
-
-msgid "Module for accessing a repository via WebDAV protocol using serf."
-msgstr "通过 WebDAV å议使用 serf 访问版本库的模å—。"
+msgid "Unknown tag '%s' while at state %d"
+msgstr "未知标签“%sâ€ï¼Œä¸Šä¸‹æ–‡çŠ¶æ€ %d"
-#, c-format
-msgid "Could not resolve proxy server '%s'"
-msgstr "ä¸èƒ½è§£æžä»£ç†æœåŠ¡å™¨â€œ%sâ€"
+#: ../libsvn_ra_serf/update.c:2190 ../libsvn_ra_serf/update.c:2314
+#: ../libsvn_ra_serf/update.c:2351
+msgid ""
+"The REPORT or PROPFIND response did not include the requested checked-in "
+"value"
+msgstr "REPORT 或 PROPFIND å“应中没有包å«è¯·æ±‚çš„ checked-in 值。"
+#: ../libsvn_ra_serf/update.c:2533
#, c-format
-msgid "Unsupported RA loader version (%d) for ra_serf"
-msgstr "ä¸æ”¯æŒçš„ ra_serf RA 加载器版本(%d)"
+msgid "Error writing to '%s': unexpected EOF"
+msgstr "写入“%sâ€å‡ºé”™: æ„外的文件结æŸ"
-#, c-format
-msgid "ra_serf was compiled for serf %d.%d.%d but loaded an incompatible %d.%d.%d library"
-msgstr "ra_serf 为 serf %d.%d.%d 编译,但是加载了ä¸å…¼å®¹çš„共享库 %d.%d.%d"
+#: ../libsvn_ra_serf/update.c:2902
+msgid "Error retrieving REPORT"
+msgstr "获å–报告出错"
-#, c-format
-msgid "GET request failed: %d %s"
-msgstr "GET 请求失败: %d %s"
+#: ../libsvn_ra_serf/update.c:3111
+msgid "Missing update-report close tag"
+msgstr "缺少更新报告的关闭标签"
-#, c-format
-msgid "Unknown tag '%s' while at state %d"
-msgstr "未知标签“%sâ€ï¼Œä¸Šä¸‹æ–‡çŠ¶æ€ %d"
+#: ../libsvn_ra_serf/update.c:3581
+msgid "Can't get text contents of a directory"
+msgstr "无法获得目录的文本内容"
+#: ../libsvn_ra_serf/util.c:347
#, c-format
-msgid "Error retrieving REPORT (%d)"
-msgstr "获å–报告出错(%d)"
+msgid "Invalid config: unable to load certificate file '%s'"
+msgstr "无效的é…ç½®: 无法加载è¯ä¹¦æ–‡ä»¶â€œ%sâ€"
-#, c-format
+#: ../libsvn_ra_serf/util.c:783 ../libsvn_ra_serf/util.c:786
msgid "Error running context"
msgstr "执行上下文错误"
+#: ../libsvn_ra_serf/util.c:1103 ../libsvn_ra_serf/util.c:1108
#, c-format
msgid "Malformed DAV:status CDATA '%s'"
msgstr "éžæ³• DAV:status CDATA '%s'"
+#: ../libsvn_ra_serf/util.c:1400
#, c-format
msgid "XML parsing failed"
msgstr "XML 解æžå¤±è´¥"
+#: ../libsvn_ra_serf/util.c:1403
#, c-format
msgid "XML parsing failed: (%d %s)"
msgstr "XML 解æžå¤±è´¥: (%d %s)"
+#: ../libsvn_ra_serf/util.c:1778
msgid ""
"No more credentials or we tried too many times.\n"
"Authentication failed"
msgstr ""
-"没有凭è¯æˆ–å·²ç»è¯•äº†å¤ªå¤šæ¬¡ã€‚\n"
+"没有更多凭æ®æˆ–å·²ç»è¯•äº†å¤ªå¤šæ¬¡ã€‚\n"
"认è¯å¤±è´¥"
+#: ../libsvn_ra_serf/util.c:1800
msgid "Proxy authentication failed"
msgstr "代ç†è®¤è¯å¤±è´¥"
+#: ../libsvn_ra_serf/util.c:1911
#, c-format
msgid "Premature EOF seen from server (http status=%d)"
msgstr "从æœåŠ¡å™¨å‘现 EOF 太早 (http status=%d)"
+#: ../libsvn_ra_serf/util.c:1980
#, c-format
msgid "%s request on '%s' failed: %d %s"
msgstr "%s 请求于 '%s' 失败: %d %s"
-msgid "The PROPFIND response did not include the requested version-controlled-configuration value"
+#: ../libsvn_ra_serf/util.c:2302
+msgid ""
+"The PROPFIND response did not include the requested version-controlled-"
+"configuration value"
msgstr "PROPFIND å“应中没有包å«è¯·æ±‚çš„ version-controlled-configuration 值。"
+#: ../libsvn_ra_serf/util.c:2404
+#, c-format
+msgid "Repository moved permanently to '%s'; please relocate"
+msgstr "版本库永久移到 “%sâ€ï¼›è¯·é‡æ–°å®šä½ã€‚"
+
+#: ../libsvn_ra_serf/util.c:2406
+#, c-format
+msgid "Repository moved temporarily to '%s'; please relocate"
+msgstr "版本库临时移到‘%s’;请é‡æ–°å®šä½ã€‚"
+
+#: ../libsvn_ra_serf/util.c:2417
#, c-format
msgid "'%s': no lock token available"
msgstr "“%sâ€ï¼šæ²¡æœ‰å¯ç”¨çš„é”定令牌"
+#: ../libsvn_ra_serf/util.c:2421
+#, c-format
+msgid "DAV request failed: Content length required"
+msgstr "DAV 请求失败: 需è¦å†…容长度"
+
+#: ../libsvn_ra_serf/util.c:2427
+#, c-format
+msgid "Unexpected HTTP status %d '%s' on '%s'\n"
+msgstr "æ„外 HTTP çŠ¶æ€ %d “%sâ€äºŽâ€œ%sâ€\n"
+
+#: ../libsvn_ra_serf/util.c:2571
+#, c-format
+msgid "The %s response contains invalid XML (%d %s)"
+msgstr "å“应 %s 包å«éžæ³• XML (%d %s)"
+
+#: ../libsvn_ra_serf/xml.c:674
+#, c-format
+msgid "Missing XML attribute: '%s'"
+msgstr "缺少 XML 属性: '%s'"
+
+#: ../libsvn_ra_serf/xml.c:749
+msgid "The response contains invalid XML"
+msgstr "æ­¤å“应包å«éžæ³• XML"
+
+#: ../libsvn_ra_svn/client.c:141
#, c-format
msgid "Unknown hostname '%s'"
msgstr "未知的主机“%sâ€"
+#: ../libsvn_ra_svn/client.c:166
#, c-format
msgid "Can't connect to host '%s'"
msgstr "无法连接主机“%sâ€"
+#: ../libsvn_ra_svn/client.c:204
msgid "Prop diffs element not a list"
msgstr "Prop diffs 元素ä¸æ˜¯ä¸€ä¸ªåˆ—表"
+#: ../libsvn_ra_svn/client.c:402
#, c-format
msgid "Undefined tunnel scheme '%s'"
msgstr "无法识别的隧é“方案 “%sâ€"
+#: ../libsvn_ra_svn/client.c:419
#, c-format
msgid "Tunnel scheme %s requires environment variable %s to be defined"
msgstr "隧é“方案 %s 需è¦è®¾å®šçŽ¯å¢ƒå˜é‡ %s"
+#: ../libsvn_ra_svn/client.c:430
#, c-format
msgid "Can't tokenize command '%s'"
msgstr "ä¸èƒ½è§£æžå‘½ä»¤â€œ%sâ€"
+#: ../libsvn_ra_svn/client.c:463
#, c-format
msgid "Error in child process: %s"
msgstr "å­è¿›ç¨‹é”™è¯¯: %s"
-#, c-format
-msgid "Can't create tunnel"
-msgstr "无法创建隧é“"
-
-msgid "To better debug SSH connection problems, remove the -q option from 'ssh' in the [tunnels] section of your Subversion configuration file."
-msgstr "为了更好的诊断 SSH 连接问题,请从你的 Subversion é…置文件中,[tunnels] 节,删除 ssh 命令行å‚æ•° -q 。"
+#: ../libsvn_ra_svn/client.c:538
+msgid ""
+"To better debug SSH connection problems, remove the -q option from 'ssh' in "
+"the [tunnels] section of your Subversion configuration file."
+msgstr ""
+"为了更好的诊断 SSH 连接问题,请从你的 Subversion é…置文件中,[tunnels] 节,删"
+"除 ssh 命令行å‚æ•° -q 。"
+#: ../libsvn_ra_svn/client.c:556
#, c-format
msgid "Illegal svn repository URL '%s'"
msgstr "éžæ³•çš„svn版本库URL“%sâ€"
+#: ../libsvn_ra_svn/client.c:636
#, c-format
msgid "Server requires minimum version %d"
msgstr "æœåŠ¡å™¨è¦æ±‚的最低版本是 %d"
+#: ../libsvn_ra_svn/client.c:640
#, c-format
msgid "Server only supports versions up to %d"
msgstr "æœåŠ¡å™¨æ”¯æŒçš„版本ä¸å¤§äºŽ %d"
+#: ../libsvn_ra_svn/client.c:648
msgid "Server does not support edit pipelining"
msgstr "æœåŠ¡å™¨ä¸æ”¯æŒæµæ°´çº¿ç¼–辑"
+#: ../libsvn_ra_svn/client.c:685
msgid "Impossibly long repository root from server"
msgstr "æœåŠ¡å™¨è¿”回的版本库根路径太长"
+#: ../libsvn_ra_svn/client.c:697
msgid ""
"Module for accessing a repository using the svn network protocol.\n"
" - with Cyrus SASL authentication"
msgstr "使用 svn 网络å议访问版本库的模å—。 - 使用 Cyrus SASL 认è¯"
+#: ../libsvn_ra_svn/client.c:701
msgid "Module for accessing a repository using the svn network protocol."
msgstr "使用 svn 网络å议访问版本库的模å—。"
+#: ../libsvn_ra_svn/client.c:911
msgid "Server did not send repository root"
msgstr "æœåŠ¡å™¨æ²¡æœ‰è¿”回版本库根路径"
-msgid "Server doesn't support setting arbitrary revision properties during commit"
+#: ../libsvn_ra_svn/client.c:985
+msgid ""
+"Server doesn't support setting arbitrary revision properties during commit"
msgstr "在æ交时,æœåŠ¡å™¨ä¸æ”¯æŒè®¾ç½®ä»»æ„版本属性"
+#: ../libsvn_ra_svn/client.c:1088
+msgid "Inherited proplist element not a list"
+msgstr "继承的属性列表元素ä¸æ˜¯åˆ—表"
+
+#: ../libsvn_ra_svn/client.c:1163
msgid "Non-string as part of file contents"
msgstr "部分文件内容ä¸æ˜¯å­—符串"
+#: ../libsvn_ra_svn/client.c:1249
msgid "Dirlist element not a list"
msgstr "目录列表元素ä¸æ˜¯åˆ—表"
+#: ../libsvn_ra_svn/client.c:1334
msgid "Mergeinfo element is not a list"
msgstr "Mergeinfo 元素ä¸æ˜¯åˆ—表"
+#: ../libsvn_ra_svn/client.c:1539
msgid "Log entry not a list"
msgstr "日志æ¡ç›®ä¸æ˜¯åˆ—表"
+#: ../libsvn_ra_svn/client.c:1586
msgid "Changed-path entry not a list"
msgstr "已修改路径æ¡ç›®ä¸æ˜¯åˆ—表"
+#: ../libsvn_ra_svn/client.c:1711
msgid "'stat' not implemented"
msgstr "未实现“statâ€"
+#: ../libsvn_ra_svn/client.c:1770
msgid "'get-locations' not implemented"
msgstr "未实现“get-locationsâ€"
+#: ../libsvn_ra_svn/client.c:1785
msgid "Location entry not a list"
msgstr "区域æ¡ç›®ä¸æ˜¯åˆ—表"
+#: ../libsvn_ra_svn/client.c:1824
msgid "'get-location-segments' not implemented"
msgstr "未实现 “get-location-segmentsâ€"
+#: ../libsvn_ra_svn/client.c:1841
msgid "Location segment entry not a list"
msgstr "ä½ç½®åˆ†æ®µå…¥å£ä¸æ˜¯åˆ—表"
+#: ../libsvn_ra_svn/client.c:1851
+msgid "Expected valid revision range"
+msgstr "期望åˆæ³•çš„版本范围"
+
+#: ../libsvn_ra_svn/client.c:1892
msgid "'get-file-revs' not implemented"
msgstr "未实现“get-file-revsâ€"
+#: ../libsvn_ra_svn/client.c:1916
msgid "Revision entry not a list"
msgstr "版本æ¡ç›®ä¸æ˜¯åˆ—表"
+#: ../libsvn_ra_svn/client.c:1933 ../libsvn_ra_svn/client.c:1963
msgid "Text delta chunk not a string"
msgstr "文本差异å—ä¸æ˜¯å­—符串"
+#: ../libsvn_ra_svn/client.c:1975
msgid "The get-file-revs command didn't return any revisions"
msgstr "get-file-revs 命令没有返回任何版本"
+#: ../libsvn_ra_svn/client.c:2022
msgid "Server doesn't support the lock command"
msgstr "æœåŠ¡å™¨ä¸æ”¯æŒåŠ é”"
+#: ../libsvn_ra_svn/client.c:2086
msgid "Server doesn't support the unlock command"
msgstr "æœåŠ¡å™¨ä¸æ”¯æŒè§£é”"
+#: ../libsvn_ra_svn/client.c:2184
msgid "Lock response not a list"
msgstr "加é”å“应ä¸æ˜¯åˆ—表"
+#: ../libsvn_ra_svn/client.c:2198
msgid "Unknown status for lock command"
msgstr "加é”命令的状æ€æœªçŸ¥"
+#: ../libsvn_ra_svn/client.c:2222
msgid "Didn't receive end marker for lock responses"
msgstr "加é”å“应没有结æŸæ ‡è®°"
+#: ../libsvn_ra_svn/client.c:2312
msgid "Unlock response not a list"
msgstr "解é”å“应ä¸æ˜¯åˆ—表"
+#: ../libsvn_ra_svn/client.c:2326
msgid "Unknown status for unlock command"
msgstr "未知的解é”命令状æ€"
+#: ../libsvn_ra_svn/client.c:2349
msgid "Didn't receive end marker for unlock responses"
msgstr "解é”å“应没有结æŸæ ‡è®°"
+#: ../libsvn_ra_svn/client.c:2373 ../libsvn_ra_svn/client.c:2425
msgid "Server doesn't support the get-lock command"
msgstr "æœåŠ¡å™¨ä¸æ”¯æŒå‘½ä»¤ get-lock"
+#: ../libsvn_ra_svn/client.c:2439
msgid "Lock element not a list"
msgstr "Lock元素ä¸æ˜¯åˆ—表"
+#: ../libsvn_ra_svn/client.c:2482
msgid "Server doesn't support the replay command"
msgstr "æœåŠ¡å™¨ä¸æ”¯æŒé‡æ”¾å‘½ä»¤"
+#: ../libsvn_ra_svn/client.c:2513
msgid "Server doesn't support the replay-range command"
msgstr "æœåŠ¡å™¨ä¸æ”¯æŒé‡æ”¾èŒƒå›´å‘½ä»¤"
+#: ../libsvn_ra_svn/client.c:2531
#, c-format
msgid "Expected 'revprops', found '%s'"
msgstr "期望“revpropsâ€ï¼Œå‘现“%sâ€"
+#: ../libsvn_ra_svn/client.c:2548
msgid "Error while replaying commit"
msgstr "é‡æ¼”æ交æ“作错误"
+#: ../libsvn_ra_svn/client.c:2621
msgid "'get-deleted-rev' not implemented"
msgstr "未实现 “get-deleted-revâ€"
+#: ../libsvn_ra_svn/client.c:2720
#, c-format
msgid "Unsupported RA loader version (%d) for ra_svn"
msgstr "ä¸æ”¯æŒ ra_svn RA 加载器版本(%d)"
+#: ../libsvn_ra_svn/cram.c:199 ../libsvn_ra_svn/cram.c:217
+#: ../libsvn_ra_svn/cyrus_auth.c:526 ../libsvn_ra_svn/cyrus_auth.c:582
+#: ../libsvn_ra_svn/internal_auth.c:66
msgid "Unexpected server response to authentication"
msgstr "æœåŠ¡å™¨æ„外å“应认è¯è¯·æ±‚"
+#: ../libsvn_ra_svn/cyrus_auth.c:225
#, c-format
msgid "SASL authentication error: %s%s"
msgstr "SASL 认è¯é”™è¯¯: %s%s"
-#, c-format
-msgid "Could not initialize the SASL library"
-msgstr "ä¸èƒ½åˆå§‹åŒ– SASL 库"
-
+#: ../libsvn_ra_svn/cyrus_auth.c:242
#, c-format
msgid "Could not initialized the SASL library: %s%s"
msgstr "ä¸èƒ½åˆå§‹åŒ– SASL 库: %s%s"
+#: ../libsvn_ra_svn/cyrus_auth.c:415
#, c-format
msgid "Could not create SASL context: %s%s"
msgstr "ä¸èƒ½åˆ›å»º SASL 上下文: %s%s"
+#: ../libsvn_ra_svn/cyrus_auth.c:921 ../libsvn_ra_svn/internal_auth.c:63
+#: ../libsvn_ra_svn/internal_auth.c:114
#, c-format
msgid "Authentication error from server: %s"
msgstr "æœåŠ¡å™¨æŠ¥å‘Šè®¤è¯é”™è¯¯: %s"
+#: ../libsvn_ra_svn/cyrus_auth.c:925
msgid "Can't get username or password"
msgstr "无法å–得用户å称或密ç "
+#: ../libsvn_ra_svn/editorp.c:145
msgid "Successful edit status returned too soon"
msgstr "太快返回编辑æˆåŠŸçŠ¶æ€"
+#: ../libsvn_ra_svn/editorp.c:487
msgid "Invalid file or dir token during edit"
msgstr "编辑时é‡åˆ°æ— æ•ˆçš„文件或目录令牌"
+#: ../libsvn_ra_svn/editorp.c:715
msgid "Apply-textdelta already active"
msgstr "å·²ç»æ¿€æ´» Apply-textdelta"
+#: ../libsvn_ra_svn/editorp.c:737 ../libsvn_ra_svn/editorp.c:755
msgid "Apply-textdelta not active"
msgstr "没有激活 Apply-textdelta"
+#: ../libsvn_ra_svn/editorp.c:850
#, c-format
msgid "Command 'finish-replay' invalid outside of replays"
msgstr "finish-replay命令åªåœ¨é‡æ”¾æ—¶æœ‰æ•ˆ"
+#: ../libsvn_ra_svn/editorp.c:954 ../libsvn_ra_svn/marshal.c:1498
#, c-format
-msgid "Unknown command '%s'"
-msgstr "未知命令: “%sâ€"
+msgid "Unknown editor command '%s'"
+msgstr "未知编辑器命令“%sâ€"
-#, c-format
+#: ../libsvn_ra_svn/internal_auth.c:101
msgid "Can't get password"
msgstr "无法å–得密ç "
+#: ../libsvn_ra_svn/marshal.c:151
msgid "Capability entry is not a word"
msgstr "容é‡ç±»åž‹ä¸æ˜¯ word "
+#: ../libsvn_ra_svn/marshal.c:941
msgid "String length larger than maximum"
msgstr "字符串长度超出上é™"
+#: ../libsvn_ra_svn/marshal.c:1007
msgid "Too many nested items"
msgstr "太多嵌套的项"
+#: ../libsvn_ra_svn/marshal.c:1027 ../libsvn_ra_svn/marshal.c:1105
msgid "Number is larger than maximum"
msgstr "数字超过上é™"
+#: ../libsvn_ra_svn/marshal.c:1133
+msgid "Word too long"
+msgstr "å•è¯å¤ªé•¿"
+
+#: ../libsvn_ra_svn/marshal.c:1351
msgid "Proplist element not a list"
msgstr "Proplist 元素ä¸æ˜¯åˆ—表"
+#: ../libsvn_ra_svn/marshal.c:1390
msgid "Empty error list"
msgstr "错误列表为空"
+#: ../libsvn_ra_svn/marshal.c:1399 ../libsvn_ra_svn/marshal.c:1425
msgid "Malformed error list"
msgstr "错误列表éžæ³•"
+#: ../libsvn_ra_svn/marshal.c:1454
#, c-format
msgid "Unknown status '%s' in command response"
msgstr "命令å“åº”ä¸­çš„çŠ¶æ€ â€œ%s†未知"
+#: ../libsvn_ra_svn/streams.c:78 ../libsvn_ra_svn/streams.c:157
#, c-format
msgid "Can't read from connection"
msgstr "无法读å–连接"
+#: ../libsvn_ra_svn/streams.c:91 ../libsvn_ra_svn/streams.c:170
#, c-format
msgid "Can't write to connection"
msgstr "无法写入连接"
+#: ../libsvn_ra_svn/streams.c:144
#, c-format
msgid "Can't get socket timeout"
msgstr "无法获得 socket 超时"
+#: ../libsvn_repos/commit.c:170
#, c-format
msgid "'%s' is out of date"
msgstr "“%s†已ç»è¿‡æ—¶"
+#: ../libsvn_repos/commit.c:291
#, c-format
msgid "Got source path but no source revision for '%s'"
msgstr "获得æºè·¯å¾„,但“%sâ€æ²¡æœ‰æºç‰ˆæœ¬"
+#: ../libsvn_repos/commit.c:324
#, c-format
msgid "Source url '%s' is from different repository"
msgstr "æº URL “%s†æ¥è‡ªå…¶å®ƒç‰ˆæœ¬åº“"
+#: ../libsvn_repos/commit.c:640
#, c-format
msgid ""
"Checksum mismatch for resulting fulltext\n"
@@ -3557,12 +4964,15 @@ msgstr ""
"结果的校验和ä¸åŒ¹é…: \n"
"(%s)"
+#: ../libsvn_repos/commit.c:685
msgid "(no error)"
msgstr "(没有错误)"
+#: ../libsvn_repos/commit.c:716 ../libsvn_repos/commit.c:722
msgid "post-commit hook failed with no error message."
msgstr "调用 post-commit é’©å­å¤±è´¥ (没有错误信æ¯)。"
+#: ../libsvn_repos/commit.c:725
#, c-format
msgid ""
"post commit FS processing had error:\n"
@@ -3573,9 +4983,11 @@ msgstr ""
"%s\n"
"%s"
+#: ../libsvn_repos/commit.c:726 ../libsvn_repos/commit.c:735
msgid "(no error message)"
msgstr "(没有错误信æ¯)"
+#: ../libsvn_repos/commit.c:733
#, c-format
msgid ""
"post commit FS processing had error:\n"
@@ -3584,26 +4996,40 @@ msgstr ""
"æ交åŽçš„文件系统进程出错:\n"
"%s"
+#: ../libsvn_repos/commit.c:1255 ../libsvn_repos/fs-wrap.c:98
+#: ../libsvn_repos/load-fs-vtable.c:978
+msgid "Commit succeeded, but post-commit hook failed"
+msgstr "æ交æˆåŠŸï¼Œä½†æ˜¯åŽç½®æ交钩å­(post-commit)失败"
+
+#: ../libsvn_repos/delta.c:192
msgid "Unable to open root of edit"
msgstr "无法打开根æ¥ç¼–辑"
+#: ../libsvn_repos/delta.c:247
msgid "Invalid target path"
msgstr "无效目标路径"
+#: ../libsvn_repos/delta.c:251
msgid "Delta depth 'exclude' not supported"
msgstr "ä¸æ”¯æŒå·®å¼‚深度 “excludeâ€"
-msgid "Invalid editor anchoring; at least one of the input paths is not a directory and there was no source entry"
+#: ../libsvn_repos/delta.c:277
+msgid ""
+"Invalid editor anchoring; at least one of the input paths is not a directory "
+"and there was no source entry"
msgstr "无效编辑器定ä½ï¼›è‡³å°‘一个输入路径ä¸æ˜¯ç›®å½•ï¼Œå¹¶ä¸”没有æºå…¥å£"
+#: ../libsvn_repos/deprecated.c:614 ../svnadmin/svnadmin.c:812
#, c-format
msgid "* Dumped revision %ld.\n"
msgstr "* 已转存版本 %ld。\n"
+#: ../libsvn_repos/deprecated.c:620 ../svnadmin/svnadmin.c:818
#, c-format
msgid "* Verified revision %ld.\n"
msgstr "* 已校验版本 %ld。\n"
+#: ../libsvn_repos/deprecated.c:628 ../svnadmin/svnadmin.c:866
#, c-format
msgid ""
"\n"
@@ -3614,6 +5040,7 @@ msgstr ""
"------- æ交åŽç‰ˆæœ¬ %ld >>>\n"
"\n"
+#: ../libsvn_repos/deprecated.c:634 ../svnadmin/svnadmin.c:872
#, c-format
msgid ""
"\n"
@@ -3624,413 +5051,527 @@ msgstr ""
"------- æ交新版本 %ld (从原始版本 %ld 装载) >>>\n"
"\n"
+#: ../libsvn_repos/deprecated.c:647 ../svnadmin/svnadmin.c:885
#, c-format
msgid " * editing path : %s ..."
msgstr " * 正在修改路径: %s ..."
+#: ../libsvn_repos/deprecated.c:653 ../svnadmin/svnadmin.c:891
#, c-format
msgid " * deleting path : %s ..."
msgstr " * 正在删除路径: %s ..."
+#: ../libsvn_repos/deprecated.c:659 ../svnadmin/svnadmin.c:897
#, c-format
msgid " * adding path : %s ..."
msgstr " * 正在增加路径: %s ..."
+#: ../libsvn_repos/deprecated.c:665 ../svnadmin/svnadmin.c:903
#, c-format
msgid " * replacing path : %s ..."
msgstr " * 正在替æ¢è·¯å¾„: %s ..."
+#: ../libsvn_repos/deprecated.c:675 ../svnadmin/svnadmin.c:912
msgid " done.\n"
msgstr "完æˆã€‚\n"
+#: ../libsvn_repos/deprecated.c:685 ../svnadmin/svnadmin.c:921
#, c-format
msgid "<<< Started new transaction, based on original revision %ld\n"
msgstr "<<< 开始新的事务,基于原始版本 %ld\n"
+#: ../libsvn_repos/deprecated.c:692 ../svnadmin/svnadmin.c:934
#, c-format
msgid " removing '\\r' from %s ..."
msgstr "正在从 '%s' 删除 '\\r' ..."
+#: ../libsvn_repos/dump.c:267
#, c-format
msgid "E%06d: While validating fspath '%s': %s"
msgstr "E%06d: 当验è¯æ–‡ä»¶ç³»ç»Ÿè·¯å¾„“%sâ€æ—¶å‡ºé”™ï¼š%s"
+#: ../libsvn_repos/dump.c:389
#, c-format
-msgid "Referencing data in revision %ld, which is older than the oldest dumped revision (r%ld). Loading this dump into an empty repository will fail."
-msgstr "版本 %ld 引用的数æ®æ¯”最旧的转存版本 (r%ld) 还旧。加载这个转存到空的版本库会失败。"
+msgid ""
+"Referencing data in revision %ld, which is older than the oldest dumped "
+"revision (r%ld). Loading this dump into an empty repository will fail."
+msgstr ""
+"版本 %ld 引用的数æ®æ¯”最旧的转存版本 (r%ld) 还旧。加载这个转存到空的版本库会失"
+"败。"
+#: ../libsvn_repos/dump.c:494
#, c-format
-msgid "Mergeinfo referencing revision(s) prior to the oldest dumped revision (r%ld). Loading this dump may result in invalid mergeinfo."
-msgstr "åˆå¹¶ä¿¡æ¯å¼•ç”¨çš„版本比最旧的转存版本 (r%ld) 还旧。加载这个转存å¯èƒ½å¯¼è‡´éžæ³•çš„åˆå¹¶ä¿¡æ¯ã€‚"
+msgid ""
+"Mergeinfo referencing revision(s) prior to the oldest dumped revision (r"
+"%ld). Loading this dump may result in invalid mergeinfo."
+msgstr ""
+"åˆå¹¶ä¿¡æ¯å¼•ç”¨çš„版本比最旧的转存版本 (r%ld) 还旧。加载这个转存å¯èƒ½å¯¼è‡´éžæ³•çš„åˆ"
+"并信æ¯ã€‚"
+#: ../libsvn_repos/dump.c:1124 ../libsvn_repos/dump.c:1416
#, c-format
msgid "Start revision %ld is greater than end revision %ld"
msgstr "起始版本 %ld 大于结æŸç‰ˆæœ¬ %ld"
+#: ../libsvn_repos/dump.c:1129 ../libsvn_repos/dump.c:1421
#, c-format
msgid "End revision %ld is invalid (youngest revision is %ld)"
msgstr "结æŸç‰ˆæœ¬ %ld 无效 (最新版本是 %ld)"
-msgid "The range of revisions dumped contained references to copy sources outside that range."
+#: ../libsvn_repos/dump.c:1267
+msgid ""
+"The range of revisions dumped contained references to copy sources outside "
+"that range."
msgstr "导出的版本范围包å«çš„引用超出导出范围。"
-msgid "The range of revisions dumped contained mergeinfo which reference revisions outside that range."
+#: ../libsvn_repos/dump.c:1281
+msgid ""
+"The range of revisions dumped contained mergeinfo which reference revisions "
+"outside that range."
msgstr "导出的版本范围包å«çš„åˆå¹¶ä¿¡æ¯ï¼Œå…¶å¼•ç”¨çš„版本超出导出范围。"
+#: ../libsvn_repos/dump.c:1340
#, c-format
msgid "Unexpected node kind %d for '%s'"
msgstr "æ„外å‘现节点ç§ç±» %d 于“%sâ€"
-msgid "Commit succeeded, but post-commit hook failed"
-msgstr "æ交æˆåŠŸï¼Œä½†æ˜¯åŽç½®æ交钩å­(post-commit)失败"
-
+#: ../libsvn_repos/fs-wrap.c:183
#, c-format
-msgid "Storage of non-regular property '%s' is disallowed through the repository interface, and could indicate a bug in your client"
+msgid ""
+"Storage of non-regular property '%s' is disallowed through the repository "
+"interface, and could indicate a bug in your client"
msgstr "ä¸å…许通过版本库接å£å­˜å‚¨éžæ­£è§„属性“%sâ€ï¼Œå®ƒè¯´æ˜Žæ‚¨çš„客户端有æ¼æ´ž"
+#: ../libsvn_repos/fs-wrap.c:198
#, c-format
msgid "Cannot accept '%s' property because it is not encoded in UTF-8"
msgstr "ä¸èƒ½æŽ¥å—属性 “%sâ€ï¼Œå› ä¸ºå®ƒçš„ç¼–ç ä¸æ˜¯ UTF-8"
+#: ../libsvn_repos/fs-wrap.c:208
#, c-format
msgid "Cannot accept non-LF line endings in '%s' property"
msgstr "ä¸èƒ½æŽ¥å—属性 “%sâ€ çš„éž LF 行结æŸç¬¦"
+#: ../libsvn_repos/fs-wrap.c:249
#, c-format
-msgid "Commit rejected because mergeinfo on '%s' contains unexpected string terminator"
+msgid ""
+"Commit rejected because mergeinfo on '%s' contains unexpected string "
+"terminator"
msgstr "由于 '%s' 上的åˆå¹¶ä¿¡æ¯åŒ…å«æ„外的字符串终结符,æ交被拒ç»"
+#: ../libsvn_repos/fs-wrap.c:256
#, c-format
msgid "Commit rejected because mergeinfo on '%s' is syntactically invalid"
msgstr "由于 '%s' 上的åˆå¹¶ä¿¡æ¯éžæ³•ï¼Œæ交被拒ç»"
+#: ../libsvn_repos/fs-wrap.c:386
#, c-format
msgid "Write denied: not authorized to read all of revision %ld"
msgstr "æ‹’ç»å†™å…¥: 未授æƒè¯»å–版本 %ld 的所有数æ®ã€‚"
+#: ../libsvn_repos/fs-wrap.c:570
#, c-format
msgid "Cannot unlock path '%s', no authenticated username available"
msgstr "ä¸èƒ½è§£é™¤è·¯å¾„“%sâ€çš„é”定,没有å¯ç”¨çš„已授æƒç”¨æˆ·å"
+#: ../libsvn_repos/fs-wrap.c:586
msgid "Unlock succeeded, but post-unlock hook failed"
msgstr "解é”æˆåŠŸï¼Œä½†æ˜¯åŽç½®è§£é”é’©å­(post-unlock)失败"
+#: ../libsvn_repos/hooks.c:92
#, c-format
msgid "'%s' hook succeeded, but error output could not be read"
msgstr "é’©å­æ‰§è¡Œâ€œ%sâ€æˆåŠŸï¼Œæ²¡æœ‰å¯ç”¨çš„错误输出"
+#: ../libsvn_repos/hooks.c:107
msgid "[Error output could not be translated from the native locale to UTF-8.]"
msgstr "[错误输出ä¸èƒ½ä»Žæœ¬åœ°åŒºåŸŸè½¬å˜ä¸º UTF-8。]"
+#: ../libsvn_repos/hooks.c:112
msgid "[Error output could not be read.]"
msgstr "[没有å¯ç”¨çš„错误输出。]"
+#: ../libsvn_repos/hooks.c:121
#, c-format
-msgid "'%s' hook failed (did not exit cleanly: apr_exit_why_e was %d, exitcode was %d). "
+msgid ""
+"'%s' hook failed (did not exit cleanly: apr_exit_why_e was %d, exitcode was "
+"%d). "
msgstr "é’©å­â€œ%sâ€å¤±è´¥(没有干净的退出: apr_exit_why_e 是 %d,exitcode 是 %d)。"
+#: ../libsvn_repos/hooks.c:130
msgid "Commit"
msgstr "æ交"
+#: ../libsvn_repos/hooks.c:132
msgid "Revprop change"
msgstr "版本属性改å˜"
+#: ../libsvn_repos/hooks.c:134
msgid "Lock"
msgstr "加é”"
+#: ../libsvn_repos/hooks.c:136
msgid "Unlock"
msgstr "解é”"
+#: ../libsvn_repos/hooks.c:141
#, c-format
msgid "%s hook failed (exit code %d)"
msgstr "é’©å­ â€œ%s†失败(é€€å‡ºä»£ç  %d)"
+#: ../libsvn_repos/hooks.c:145
#, c-format
msgid "%s blocked by %s hook (exit code %d)"
msgstr "%s 被 %s é’©å­é˜»å¡ž(é€€å‡ºä»£ç  %d)"
+#: ../libsvn_repos/hooks.c:152
msgid " with output:\n"
msgstr " 输出:\n"
+#: ../libsvn_repos/hooks.c:158
msgid " with no output."
msgstr " 没有输出。"
+#: ../libsvn_repos/hooks.c:233
#, c-format
msgid "Can't create null stdout for hook '%s'"
msgstr "无法为钩å­â€œ%sâ€åˆ›å»ºç©ºæ ‡å‡†è¾“出"
+#: ../libsvn_repos/hooks.c:260
#, c-format
msgid "Failed to start '%s' hook"
msgstr "å¯åŠ¨é’©å­â€œ%sâ€å¤±è´¥"
-#, c-format
-msgid "Error closing read end of stderr pipe"
-msgstr "关闭读标准错误管é“出错"
-
+#: ../libsvn_repos/hooks.c:282
#, c-format
msgid "Error closing null file"
msgstr "关闭空文件出错"
+#: ../libsvn_repos/hooks.c:446
#, c-format
msgid "Failed to run '%s' hook; broken symlink"
msgstr "è¿è¡Œé’©å­â€œ%sâ€å¤±è´¥ï¼›ç¬¦å·è¿žæŽ¥æŸå"
+#: ../libsvn_repos/hooks.c:664
msgid ""
"Repository has not been enabled to accept revision propchanges;\n"
"ask the administrator to create a pre-revprop-change hook"
msgstr "此版本库ä¸å…许修改版本属性;请管ç†å‘˜åˆ›å»º pre-revprop-change é’©å­"
+#: ../libsvn_repos/load-fs-vtable.c:565 ../svnrdump/load_editor.c:766
#, c-format
msgid "Relative source revision %ld is not available in current repository"
msgstr "当å‰ç‰ˆæœ¬åº“ä¸å­˜åœ¨ç›¸å¯¹æºç‰ˆæœ¬ %ld"
+#: ../libsvn_repos/load-fs-vtable.c:579
#, c-format
msgid ""
"Copy source checksum mismatch on copy from '%s'@%ld\n"
"to '%s' in rev based on r%ld"
msgstr "从 “%s@%ld†å¤åˆ¶åˆ° “%sâ€ï¼ŒåŸºäºŽç‰ˆæœ¬ r%ld çš„æºæ ¡éªŒå’Œä¸åŒ¹é…"
+#: ../libsvn_repos/load-fs-vtable.c:638
msgid "Malformed dumpstream: Revision 0 must not contain node records"
msgstr "éžæ³•çš„转存æµ: 版本 0 ä¸èƒ½åŒ…å«èŠ‚点记录"
+#: ../libsvn_repos/load-fs-vtable.c:654
#, c-format
msgid "Unrecognized node-action on node '%s'"
msgstr "节点“%sâ€çš„动作ä¸èƒ½è¯†åˆ«"
+#: ../libsvn_repos/load.c:54
msgid "Premature end of content data in dumpstream"
msgstr "转存æµä¸­å†…容数æ®è¿‡æ—©ç»“æŸ"
+#: ../libsvn_repos/load.c:61
msgid "Dumpstream data appears to be malformed"
msgstr "转存æµä¸­å‡ºçŽ°éžæ³•æ•°æ®"
+#: ../libsvn_repos/load.c:110
#, c-format
msgid "Dump stream contains a malformed header (with no ':') at '%.20s'"
msgstr "转存æµåœ¨â€œ%.20sâ€åŒ…å«é”™è¯¯å¤´éƒ¨(没有“:â€)"
+#: ../libsvn_repos/load.c:123
#, c-format
msgid "Dump stream contains a malformed header (with no value) at '%.20s'"
msgstr "转存æµåœ¨â€œ%.20sâ€åŒ…å«é”™è¯¯å¤´éƒ¨(没有值)"
+#: ../libsvn_repos/load.c:212
msgid "Incomplete or unterminated property block"
msgstr "ä¸å®Œæ•´æˆ–未结æŸçš„属性å—"
+#: ../libsvn_repos/load.c:360
msgid "Unexpected EOF writing contents"
msgstr "写内容时æ„外结æŸ"
+#: ../libsvn_repos/load.c:390
#, c-format
msgid "Malformed dumpfile header '%s'"
msgstr "éžæ³•çš„转存文件头 '%s'"
+#: ../libsvn_repos/load.c:397
#, c-format
msgid "Unsupported dumpfile version: %d"
msgstr "ä¸æ”¯æŒçš„转存文件版本: %d"
+#: ../libsvn_repos/load.c:538
msgid "Unrecognized record type in stream"
msgstr "æµä¸­æœ‰æ— æ³•è¯†åˆ«çš„记录类型"
+#: ../libsvn_repos/load.c:645
msgid "Sum of subblock sizes larger than total block content length"
msgstr "å­å—大å°ä¹‹å’Œå¤§äºŽå—内容长度"
+#: ../libsvn_repos/node_tree.c:244
#, c-format
msgid "'%s' not found in filesystem"
msgstr "在文件系统中找ä¸åˆ°â€œ%sâ€"
+#: ../libsvn_repos/replay.c:546 ../libsvn_repos/replay.c:1267
#, c-format
msgid "Filesystem path '%s' is neither a file nor a directory"
msgstr "文件系统中路径“%sâ€æ—¢ä¸æ˜¯æ–‡ä»¶ä¹Ÿä¸æ˜¯ç›®å½•"
+#: ../libsvn_repos/reporter.c:205
#, c-format
msgid "Invalid length (%%%s) when about to read a string"
msgstr "长度 (%%%s) 对于字符串éžæ³•"
+#: ../libsvn_repos/reporter.c:270
#, c-format
msgid "Invalid depth (%c) for path '%s'"
msgstr "éžæ³•æ·±åº¦(%c)于路径 “%sâ€"
+#: ../libsvn_repos/reporter.c:951
#, c-format
msgid "Working copy path '%s' does not exist in repository"
msgstr "工作副本路径“%sâ€ä¸åœ¨ç‰ˆæœ¬åº“中"
+#: ../libsvn_repos/reporter.c:1348
msgid "Not authorized to open root of edit operation"
msgstr "æ— æƒæ‰“开根进行编辑æ“作"
+#: ../libsvn_repos/reporter.c:1365
#, c-format
msgid "Target path '%s' does not exist"
msgstr "目标路径 “%s†ä¸å­˜åœ¨"
+#: ../libsvn_repos/reporter.c:1373
msgid "Cannot replace a directory from within"
msgstr "ä¸èƒ½åœ¨å­ç›®å½•ä¸­æ›¿æ¢ç›®å½•"
+#: ../libsvn_repos/reporter.c:1413
msgid "Invalid report for top level of working copy"
msgstr "最上层工作副本报告无效"
+#: ../libsvn_repos/reporter.c:1428
msgid "Two top-level reports with no target"
msgstr "两个最上层报告没有目标"
+#: ../libsvn_repos/reporter.c:1490
#, c-format
msgid "Unsupported report depth '%s'"
msgstr "ä¸æ”¯æŒæŠ¥å‘Šæ·±åº¦â€œ%sâ€"
+#: ../libsvn_repos/reporter.c:1520
msgid "Depth 'exclude' not supported for link"
msgstr "深度 “exclude†ä¸æ”¯æŒé“¾æŽ¥"
+#: ../libsvn_repos/reporter.c:1577
msgid "Request depth 'exclude' not supported"
msgstr "ä¸æ”¯æŒè¯·æ±‚的深度 “excludeâ€"
+#: ../libsvn_repos/repos.c:188
#, c-format
msgid "'%s' exists and is non-empty"
msgstr "“%sâ€å·²å­˜åœ¨å¹¶ä¸”éžç©º"
+#: ../libsvn_repos/repos.c:234
msgid "Creating db logs lock file"
msgstr "正在创建数æ®åº“日值é”文件"
+#: ../libsvn_repos/repos.c:252
msgid "Creating db lock file"
msgstr "正在创建数æ®åº“é”文件"
+#: ../libsvn_repos/repos.c:262
msgid "Creating lock dir"
msgstr "正在创建é”文件目录"
+#: ../libsvn_repos/repos.c:291
msgid "Creating hook directory"
msgstr "正在创建钩å­ç›®å½•"
+#: ../libsvn_repos/repos.c:373
msgid "Creating start-commit hook"
msgstr "正在创建 start-commit é’©å­"
+#: ../libsvn_repos/repos.c:465
msgid "Creating pre-commit hook"
msgstr "正在创建 pre-commit é’©å­"
+#: ../libsvn_repos/repos.c:543
msgid "Creating pre-revprop-change hook"
msgstr "正在创建 pre-revprop-change é’©å­"
+#: ../libsvn_repos/repos.c:783
msgid "Creating post-commit hook"
msgstr "正在创建 post-commit é’©å­"
+#: ../libsvn_repos/repos.c:975
msgid "Creating post-revprop-change hook"
msgstr "正在创建 post-revprop-change é’©å­"
+#: ../libsvn_repos/repos.c:987
msgid "Creating conf directory"
msgstr "正在创建 conf 目录"
+#: ../libsvn_repos/repos.c:1071
msgid "Creating svnserve.conf file"
msgstr "正在创建 svnserve.conf 文件"
+#: ../libsvn_repos/repos.c:1089
msgid "Creating passwd file"
msgstr "正在创建 passwd 文件"
+#: ../libsvn_repos/repos.c:1131
msgid "Creating authz file"
msgstr "正在创建 authz 文件"
+#: ../libsvn_repos/repos.c:1161
+msgid "Creating hooks-env file"
+msgstr "正在创建 hooks-env 文件"
+
+#: ../libsvn_repos/repos.c:1217
msgid "Could not create top-level directory"
msgstr "无法创建最上层目录"
+#: ../libsvn_repos/repos.c:1227
msgid "Creating DAV sandbox dir"
msgstr "正在创建 DAV 沙箱目录"
+#: ../libsvn_repos/repos.c:1296
msgid "Error opening db lockfile"
msgstr "打开数æ®åº“é”文件出错"
+#: ../libsvn_repos/repos.c:1333
#, c-format
msgid "'%s' is an existing repository"
msgstr "版本库的“%sâ€å·²ç»å­˜åœ¨"
+#: ../libsvn_repos/repos.c:1337
#, c-format
msgid "'%s' is a subdirectory of an existing repository rooted at '%s'"
msgstr "“%s†是当å‰æ ¹ä¸º “%s†的版本库的å­ç›®å½•"
+#: ../libsvn_repos/repos.c:1345
msgid "Repository creation failed"
msgstr "创建版本库失败"
+#: ../libsvn_repos/repos.c:1430
#, c-format
msgid "Expected repository format '%d' or '%d'; found format '%d'"
msgstr "期望版本库格å¼æ˜¯â€œ%dâ€æˆ–“%dâ€ï¼›å‘现格å¼æ˜¯â€œ%dâ€"
+#: ../libsvn_repos/repos.c:1674
#, c-format
msgid "unknown capability '%s'"
msgstr "未知特性“%sâ€"
+#: ../libsvn_repos/rev_hunt.c:71
#, c-format
msgid "Failed to find time on revision %ld"
msgstr "无法找到版本 %ld 的时间"
+#: ../libsvn_repos/rev_hunt.c:210 ../libsvn_repos/rev_hunt.c:325
#, c-format
msgid "Invalid start revision %ld"
msgstr "无效起始版本 %ld"
+#: ../libsvn_repos/rev_hunt.c:518
msgid "Unreadable path encountered; access denied"
msgstr "é‡åˆ°ä¸å¯è¯»çš„路径;拒ç»è®¿é—®ã€‚"
+#: ../libsvn_repos/rev_hunt.c:1156 ../libsvn_repos/rev_hunt.c:1495
#, c-format
msgid "'%s' is not a file in revision %ld"
msgstr "“%s†ä¸æ˜¯æ–‡ä»¶ï¼Œç‰ˆæœ¬ %ld"
+#: ../libsvn_subr/auth.c:221
#, c-format
msgid "No provider registered for '%s' credentials"
msgstr "没有æ供程åºä¸º '%s' 凭æ®æ³¨å†Œ"
-#, c-format
-msgid "Invalid config: unknown password store '%s'"
-msgstr "无效é…ç½®: 未知的密ç å­˜å‚¨ “%sâ€"
-
+#: ../libsvn_subr/cache-membuffer.c:496
#, c-format
msgid "Can't lock cache mutex"
msgstr "ä¸èƒ½é”定缓存互斥体"
+#: ../libsvn_subr/cache-membuffer.c:527 ../libsvn_subr/cache-membuffer.c:543
+#, c-format
+msgid "Can't write-lock cache mutex"
+msgstr "ä¸èƒ½èŽ·å¾—缓存互斥体的写入é”"
+
+#: ../libsvn_subr/cache-membuffer.c:562
#, c-format
msgid "Can't unlock cache mutex"
msgstr "ä¸èƒ½è§£é”缓存互斥体"
+#: ../libsvn_subr/cache-membuffer.c:1299
#, c-format
msgid "Can't create cache mutex"
-msgstr "ä¸èƒ½åˆ›å»ºç¼“存互斥体"
-
-#. We are OOM. There is no need to proceed with "half a cache".
-#.
-#, c-format
-msgid "OOM"
-msgstr "内存ä¸è¶³"
-
-#, c-format
-msgid "APR doesn't support threads"
-msgstr "APR ä¸æ”¯æŒ 线程"
+msgstr "无法创建缓存互斥体"
+#: ../libsvn_subr/cache-membuffer.c:2030
msgid "Can't iterate a membuffer-based cache"
msgstr "ä¸èƒ½è¿­ä»£åŸºäºŽå†…存的缓存"
+#: ../libsvn_subr/cache-memcache.c:170
#, c-format
msgid "Unknown memcached error while reading"
msgstr "当读å–时出现未知的 memcached 错误"
+#: ../libsvn_subr/cache-memcache.c:237
#, c-format
msgid "Unknown memcached error while writing"
msgstr "当写入时出现未知的 memcached 错误"
+#: ../libsvn_subr/cache-memcache.c:343
msgid "Can't iterate a memcached cache"
msgstr "ä¸èƒ½è¿­ä»£ memcached 缓存"
+#: ../libsvn_subr/cache-memcache.c:443
#, c-format
msgid "Error parsing memcache server '%s'"
msgstr "è§£æž memcache æœåŠ¡å™¨ “%s†时出错"
+#: ../libsvn_subr/cache-memcache.c:451
#, c-format
msgid "Scope not allowed in memcache server '%s'"
msgstr "memcache æœåŠ¡å™¨ “%s†中ä¸å…许出现范围"
+#: ../libsvn_subr/cache-memcache.c:459
#, c-format
msgid "Must specify host and port for memcache server '%s'"
msgstr "memcache æœåŠ¡å™¨ “%s†中必须指定主机和端å£"
+#: ../libsvn_subr/cache-memcache.c:479
#, c-format
msgid "Unknown error creating memcache server"
msgstr "创建 memcache æœåŠ¡å™¨æ—¶å‡ºçŽ°æœªçŸ¥é”™è¯¯"
+#: ../libsvn_subr/cache-memcache.c:487
#, c-format
msgid "Unknown error adding server to memcache"
msgstr "增加 memcache æœåŠ¡å™¨æ—¶å‡ºçŽ°æœªçŸ¥é”™è¯¯"
+#: ../libsvn_subr/cache-memcache.c:560
#, c-format
msgid "Unknown error creating apr_memcache_t"
msgstr "创建 memcache apr_memcache_t 时出现未知错误"
+#: ../libsvn_subr/checksum.c:470
#, c-format
msgid ""
"%s:\n"
@@ -4041,58 +5582,203 @@ msgstr ""
" 期望: %s\n"
" 实际: %s\n"
+#: ../libsvn_subr/cmdline.c:646
#, c-format
msgid "Error initializing command line arguments"
msgstr "åˆå§‹åŒ–命令行å‚数出错"
+#: ../libsvn_subr/cmdline.c:735
msgid "Invalid syntax of argument of --config-option"
msgstr "å‚æ•° --config-option 的语法无效"
+#: ../libsvn_subr/cmdline.c:762
#, c-format
msgid "Unrecognized file in argument of %s"
msgstr "ä¸èƒ½è¯†åˆ«å‚æ•° %s 指定的文件"
+#: ../libsvn_subr/cmdline.c:1008
+msgid ""
+"The EDITOR, SVN_EDITOR or VISUAL environment variable or 'editor-cmd' run-"
+"time configuration option is empty or consists solely of whitespace. "
+"Expected a shell command."
+msgstr ""
+"环境å˜é‡ EDITOR,SVN_EDITOR,或 VISUAL;或者è¿è¡Œæ—¶é…置选项 “editor-cmd†为空"
+"或å–值包å«äº†ä¸åŠ å¼•å·çš„空格。期望外壳命令。"
+
+#: ../libsvn_subr/cmdline.c:1015
+msgid ""
+"None of the environment variables SVN_EDITOR, VISUAL or EDITOR are set, and "
+"no 'editor-cmd' run-time configuration option was found"
+msgstr ""
+"没有设置 SVN_EDITOR,VISUAL 或 EDITOR 环境å˜é‡ï¼Œè¿è¡Œæ—¶çš„é…ç½®å‚数中也没有 "
+"“editor-cmd†选项"
+
+#: ../libsvn_subr/cmdline.c:1040 ../libsvn_subr/cmdline.c:1124
+#, c-format
+msgid "Can't get working directory"
+msgstr "无法å–得工作目录"
+
+#: ../libsvn_subr/cmdline.c:1051 ../libsvn_subr/cmdline.c:1135
+#: ../libsvn_subr/cmdline.c:1160
+#, c-format
+msgid "Can't change working directory to '%s'"
+msgstr "无法改å˜å·¥ä½œç›®å½•åˆ°â€œ%sâ€"
+
+#: ../libsvn_subr/cmdline.c:1059 ../libsvn_subr/cmdline.c:1307
+#, c-format
+msgid "Can't restore working directory"
+msgstr "无法还原工作目录"
+
+#: ../libsvn_subr/cmdline.c:1066 ../libsvn_subr/cmdline.c:1242
+#, c-format
+msgid "system('%s') returned %d"
+msgstr "system('%s') 返回 %d"
+
+#: ../libsvn_subr/cmdline.c:1187
+#, c-format
+msgid "Can't write to '%s'"
+msgstr "无法写入“%sâ€"
+
+#: ../libsvn_subr/cmdline.c:1202 ../libsvn_subr/cmdline.c:1217
+#: ../libsvn_subr/cmdline.c:1251 ../libsvn_subr/io.c:3609
+#, c-format
+msgid "Can't stat '%s'"
+msgstr "ä¸èƒ½å–得“%sâ€çš„状æ€"
+
+#: ../libsvn_subr/cmdline.c:1276
+msgid "Error normalizing edited contents to internal format"
+msgstr "将编辑内容规格化为内部格å¼å‡ºé”™"
+
+#: ../libsvn_subr/config.c:739
#, c-format
msgid "Config error: invalid boolean value '%s' for '[%s] %s'"
msgstr "é…置错误: 无效布尔值 “%sâ€ï¼Œå¯¹äºŽ “[%s] %sâ€"
+#: ../libsvn_subr/config.c:744
#, c-format
msgid "Config error: invalid boolean value '%s' for '%s'"
msgstr "é…置错误: 无效布尔值 “%sâ€ï¼Œå¯¹äºŽ “%sâ€"
+#: ../libsvn_subr/config.c:1173
#, c-format
msgid "Config error: invalid integer value '%s'"
msgstr "é…置错误: 无效整数值“%sâ€"
+#: ../libsvn_subr/config_auth.c:99
msgid "Unable to open auth file for reading"
msgstr "ä¸èƒ½æ‰“开认è¯æ–‡ä»¶è¯»å–æ•°æ®"
+#: ../libsvn_subr/config_auth.c:104
#, c-format
msgid "Error parsing '%s'"
msgstr "解æžâ€œ%sâ€æ—¶å‡ºé”™"
+#: ../libsvn_subr/config_auth.c:129
msgid "Unable to locate auth file"
msgstr "无法定ä½è®¤è¯æ–‡ä»¶æ–‡ä»¶"
+#: ../libsvn_subr/config_auth.c:140
msgid "Unable to open auth file for writing"
msgstr "无法打开认è¯æ–‡ä»¶å†™å…¥æ•°æ®"
+#: ../libsvn_subr/config_auth.c:144
#, c-format
msgid "Error writing hash to '%s'"
msgstr "写哈希数æ®è‡³â€œ%sâ€æ—¶å‡ºé”™"
+#: ../libsvn_subr/crypto.c:93
+#, c-format
+msgid "Failed to initialize cryptography subsystem"
+msgstr "åˆå§‹åŒ–加密å­ç³»ç»Ÿå¤±è´¥"
+
+#: ../libsvn_subr/crypto.c:108
+#, c-format
+msgid "code (%d), reason (\"%s\"), msg (\"%s\")"
+msgstr "ä»£ç  (%d), 原因 (\"%s\"), æ¶ˆæ¯ (\"%s\")"
+
+#: ../libsvn_subr/crypto.c:134
+#, c-format
+msgid "Fetching error from APR"
+msgstr "从 APR å–出错误"
+
+#: ../libsvn_subr/crypto.c:154
+#, c-format
+msgid "Error obtaining random data"
+msgstr "获得éšæœºæ•°æ®å¤±è´¥"
+
+#: ../libsvn_subr/crypto.c:224
+msgid "OpenSSL crypto driver error"
+msgstr "OpenSSL 加密的驱动程åºé”™è¯¯"
+
+#: ../libsvn_subr/crypto.c:228
+msgid "Bad return value while loading crypto driver"
+msgstr "加载加密的驱动程åºæ—¶è¿”回ä¸æ­£ç¡®çš„值"
+
+#: ../libsvn_subr/crypto.c:234
+msgid "Error creating OpenSSL crypto context"
+msgstr "创建 OpenSSL 加密上下文失败"
+
+#: ../libsvn_subr/crypto.c:291 ../libsvn_subr/crypto.c:294
+#: ../libsvn_subr/crypto.c:419 ../libsvn_subr/crypto.c:422
+#: ../libsvn_subr/crypto.c:526 ../libsvn_subr/crypto.c:529
+#: ../libsvn_subr/crypto.c:641 ../libsvn_subr/crypto.c:644
+msgid "Error creating derived key"
+msgstr "创建è¡ç”Ÿå¯†é’¥å¤±è´¥"
+
+#: ../libsvn_subr/crypto.c:297 ../libsvn_subr/crypto.c:425
+#: ../libsvn_subr/crypto.c:532 ../libsvn_subr/crypto.c:647
+msgid "Unexpected IV length returned"
+msgstr "返回了æ„外的 IV 长度"
+
+#: ../libsvn_subr/crypto.c:308 ../libsvn_subr/crypto.c:543
+msgid "Error initializing block encryption"
+msgstr "åˆå§‹åŒ–å—加密失败"
+
+#: ../libsvn_subr/crypto.c:347 ../libsvn_subr/crypto.c:444
+#: ../libsvn_subr/crypto.c:565 ../libsvn_subr/crypto.c:666
+msgid "Error fetching result length"
+msgstr "获得结果的长度失败"
+
+#: ../libsvn_subr/crypto.c:360 ../libsvn_subr/crypto.c:578
+msgid "Error during block encryption"
+msgstr "在å—加密期间出错"
+
+#: ../libsvn_subr/crypto.c:372 ../libsvn_subr/crypto.c:590
+msgid "Error finalizing block encryption"
+msgstr "在终结å—加密时出错"
+
+#: ../libsvn_subr/crypto.c:428 ../libsvn_subr/crypto.c:650
+msgid "Provided IV has incorrect length"
+msgstr "æ供的 IV 的长度ä¸æ­£ç¡®"
+
+#: ../libsvn_subr/crypto.c:436 ../libsvn_subr/crypto.c:658
+msgid "Error initializing block decryption"
+msgstr "åˆå§‹åŒ–å—解密失败"
+
+#: ../libsvn_subr/crypto.c:455 ../libsvn_subr/crypto.c:677
+msgid "Error during block decryption"
+msgstr "在å—解密期间出错"
+
+#: ../libsvn_subr/crypto.c:464 ../libsvn_subr/crypto.c:686
+msgid "Error finalizing block decryption"
+msgstr "在终结å—解密时出错"
+
+#: ../libsvn_subr/date.c:307
#, c-format
msgid "Can't manipulate current date"
msgstr "ä¸èƒ½èŽ·å¾—当å‰æ—¥æœŸ"
+#: ../libsvn_subr/date.c:381 ../libsvn_subr/date.c:389
#, c-format
msgid "Can't calculate requested date"
msgstr "无法计算被请求的日期"
+#: ../libsvn_subr/date.c:384
#, c-format
msgid "Can't expand time"
msgstr "无法明确时间"
+#: ../libsvn_subr/deprecated.c:360 ../libsvn_subr/opt.c:302
msgid ""
"\n"
"Valid options:\n"
@@ -4100,6 +5786,7 @@ msgstr ""
"\n"
"有效选项: \n"
+#: ../libsvn_subr/deprecated.c:436 ../libsvn_subr/opt.c:417
#, c-format
msgid ""
"\"%s\": unknown command.\n"
@@ -4108,241 +5795,335 @@ msgstr ""
"“%sâ€: 未知命令。\n"
"\n"
+#: ../libsvn_subr/deprecated.c:614 ../libsvn_subr/opt.c:1237
+#: ../svnrdump/svnrdump.c:646
#, c-format
msgid "Type '%s help' for usage.\n"
msgstr "使用“%s helpâ€å¾—到用法。\n"
+#: ../libsvn_subr/deprecated.c:1022
#, c-format
msgid "'%s' is neither a file nor a directory name"
msgstr "“%sâ€ä¸æ˜¯æ–‡ä»¶å也ä¸æ˜¯ç›®å½•å"
+#: ../libsvn_subr/dirent_uri.c:1604
#, c-format
msgid "Couldn't determine absolute path of '%s'"
msgstr "ä¸èƒ½ç¡®å®šâ€œ%sâ€çš„ç»å¯¹è·¯å¾„"
+#: ../libsvn_subr/dirent_uri.c:2311
#, c-format
msgid "Local URL '%s' does not contain 'file://' prefix"
msgstr "本地URL“%sâ€æ²¡æœ‰â€œfile://â€å‰ç¼€"
+#: ../libsvn_subr/dirent_uri.c:2390
#, c-format
msgid "Local URL '%s' contains only a hostname, no path"
msgstr "本地URL“%sâ€åªæœ‰ä¸»æœºå称,没有路径"
+#: ../libsvn_subr/dirent_uri.c:2404
#, c-format
msgid "Local URL '%s' contains unsupported hostname"
msgstr "本地URL“%sâ€åŒ…å«ä¸æ”¯æŒçš„主机å称"
-#, c-format
-msgid "Can't create DSO mutex"
-msgstr "无法创建 DSO 互斥体"
-
-#, c-format
-msgid "Can't grab DSO mutex"
-msgstr "æ— æ³•èŽ·å– DSO 互斥体"
-
-#, c-format
-msgid "Can't ungrab DSO mutex"
-msgstr "ä¸èƒ½é‡Šæ”¾ DSO 互斥体"
+#: ../libsvn_subr/error.c:263
+msgid "Additional errors:"
+msgstr "é¢å¤–错误:"
+#: ../libsvn_subr/error.c:524
msgid "Can't recode error string from APR"
msgstr "无法é‡æ–°ç¼–ç  APR 的错误信æ¯"
+#: ../libsvn_subr/error.c:624
#, c-format
msgid "%swarning: W%06d: %s\n"
msgstr "%s 警告: W%06d: %s\n"
+#: ../libsvn_subr/error.c:706
#, c-format
msgid "In file '%s' line %d: assertion failed (%s)"
msgstr "文件 “%sâ€ï¼Œè¡Œ %d:断言失败(%s)"
+#: ../libsvn_subr/error.c:710
#, c-format
msgid "In file '%s' line %d: internal malfunction"
msgstr "文件 “%s†行 %d:内部故障"
+#: ../libsvn_subr/error.c:766
+msgid "stream error"
+msgstr "æµå†™å…¥é”™è¯¯"
+
+#: ../libsvn_subr/error.c:771
+msgid "out of memory"
+msgstr "内存溢出"
+
+#: ../libsvn_subr/error.c:776
+msgid "buffer error"
+msgstr "缓冲区写入错误"
+
+#: ../libsvn_subr/error.c:781
+msgid "version error"
+msgstr "版本错误"
+
+#: ../libsvn_subr/error.c:786
+msgid "corrupt data"
+msgstr "æŸåçš„æ•°æ®"
+
+#: ../libsvn_subr/error.c:791
+msgid "unknown error"
+msgstr "未知错误"
+
+#: ../libsvn_subr/gpg_agent.c:342 ../libsvn_subr/prompt.c:631
+#, c-format
+msgid "Password for '%s': "
+msgstr "“%sâ€çš„密ç : "
+
+#: ../libsvn_subr/gpg_agent.c:343
+#, c-format
+msgid "Enter your Subversion password for %s"
+msgstr "请为 %s 输入 Subversion 密ç "
+
+#: ../libsvn_subr/hash.c:120
msgid "Serialized hash missing terminator"
msgstr "åºåˆ—化哈希值没有终结符"
+#: ../libsvn_subr/hash.c:129 ../libsvn_subr/hash.c:142
+#: ../libsvn_subr/hash.c:153 ../libsvn_subr/hash.c:165
+#: ../libsvn_subr/hash.c:173 ../libsvn_subr/hash.c:183
+#: ../libsvn_subr/hash.c:196 ../libsvn_subr/hash.c:204
msgid "Serialized hash malformed"
msgstr "畸形的åºåˆ—化哈希值"
-#, c-format
-msgid "Error converting entry in directory '%s' to UTF-8"
-msgstr "目录 “%s†中的æ¡ç›®ä»Žæœ¬åœ°ç¼–ç è½¬æ¢åˆ° UTF8 失败"
+#: ../libsvn_subr/hash.c:244
+msgid "Cannot serialize negative length"
+msgstr "ä¸èƒ½åºåˆ—化负数长度"
+#: ../libsvn_subr/io.c:309
#, c-format
msgid "Can't check path '%s'"
msgstr "无法检查路径 “%sâ€"
+#: ../libsvn_subr/io.c:537 ../libsvn_subr/io.c:4551
#, c-format
msgid "Can't open '%s'"
msgstr "ä¸èƒ½æ‰“å¼€ “%sâ€"
+#: ../libsvn_subr/io.c:563 ../libsvn_subr/io.c:649
#, c-format
msgid "Unable to make name for '%s'"
msgstr "ä¸èƒ½ä¸º “%s†产生åå­—"
+#: ../libsvn_subr/io.c:636
#, c-format
msgid "Can't create symbolic link '%s'"
msgstr "无法创建符å·è¿žæŽ¥ “%sâ€"
+#: ../libsvn_subr/io.c:653 ../libsvn_subr/io.c:686 ../libsvn_subr/io.c:714
msgid "Symbolic links are not supported on this platform"
msgstr "此平å°ä¸æ”¯æŒç¬¦å·é“¾æŽ¥"
+#: ../libsvn_subr/io.c:676
#, c-format
msgid "Can't read contents of link"
msgstr "ä¸èƒ½è¯»å–链接的内容"
+#: ../libsvn_subr/io.c:734
#, c-format
msgid "Can't find a temporary directory"
msgstr "无法找到临时目录"
+#: ../libsvn_subr/io.c:852
#, c-format
msgid "Can't copy '%s' to '%s'"
msgstr "ä¸èƒ½å¤åˆ¶ “%s†到 “%sâ€"
+#: ../libsvn_subr/io.c:895 ../libsvn_subr/io.c:917 ../libsvn_subr/io.c:963
#, c-format
msgid "Can't set permissions on '%s'"
msgstr "ä¸èƒ½åœ¨ “%s†设置æƒé™"
+#: ../libsvn_subr/io.c:913 ../libsvn_subr/io.c:1977 ../libsvn_subr/io.c:2036
+#: ../libsvn_subr/io.c:4589
#, c-format
msgid "Can't get file name"
msgstr "无法获å–文件å"
+#: ../libsvn_subr/io.c:987
#, c-format
msgid "Can't append '%s' to '%s'"
msgstr "ä¸èƒ½é™„加 “%s†到 “%sâ€"
-#, c-format
-msgid "Source '%s' is not a directory"
-msgstr "æº â€œ%s†ä¸æ˜¯ç›®å½•"
-
-#, c-format
-msgid "Destination '%s' is not a directory"
-msgstr "目的 “%s†ä¸æ˜¯ç›®å½•"
-
+#: ../libsvn_subr/io.c:1033
#, c-format
msgid "Destination '%s' already exists"
msgstr "目的 “%s†已存在"
-#, c-format
-msgid "Can't read directory '%s'"
-msgstr "无法读å–目录 “%sâ€"
-
-#, c-format
-msgid "Error closing directory '%s'"
-msgstr "关闭目录 “%s†出错"
-
+#: ../libsvn_subr/io.c:1137
#, c-format
msgid "Can't make directory '%s'"
msgstr "无法创建目录 “%sâ€"
+#: ../libsvn_subr/io.c:1206
#, c-format
msgid "Can't set access time of '%s'"
msgstr "ä¸èƒ½è®¾ç½® “%s†的存å–时间"
+#: ../libsvn_subr/io.c:1523 ../libsvn_subr/io.c:1630
#, c-format
msgid "Can't change perms of file '%s'"
msgstr "ä¸èƒ½æ”¹å˜æ–‡ä»¶ “%s†的æƒé™"
+#: ../libsvn_subr/io.c:1796
#, c-format
msgid "Can't set file '%s' read-only"
msgstr "无法设置文件 “%s†åªè¯»"
+#: ../libsvn_subr/io.c:1828
#, c-format
msgid "Can't set file '%s' read-write"
msgstr "无法设置文件 “%s†å¯è¯»å†™"
+#: ../libsvn_subr/io.c:1867 ../libsvn_subr/io.c:1901
#, c-format
msgid "Error getting UID of process"
msgstr "获å–进程用户 ID(UID) 时出错"
+#: ../libsvn_subr/io.c:2003
#, c-format
msgid "Can't get shared lock on file '%s'"
msgstr "ä¸èƒ½èŽ·å–文件 “%s†的共享é”"
+#: ../libsvn_subr/io.c:2041
+#, c-format
+msgid "Can't unlock file '%s'"
+msgstr "无法解é”文件“%sâ€"
+
+#: ../libsvn_subr/io.c:2096 ../libsvn_subr/io.c:3504
#, c-format
msgid "Can't flush file '%s'"
msgstr "ä¸èƒ½åˆ·æ–°æ–‡ä»¶ “%sâ€"
+#: ../libsvn_subr/io.c:2097 ../libsvn_subr/io.c:3505
#, c-format
msgid "Can't flush stream"
msgstr "ä¸èƒ½åˆ·æ–°æµ"
+#: ../libsvn_subr/io.c:2109 ../libsvn_subr/io.c:2126
#, c-format
msgid "Can't flush file to disk"
msgstr "ä¸èƒ½åˆ·æ–°æ–‡ä»¶åˆ°ç£ç›˜"
+#: ../libsvn_subr/io.c:2218 ../libsvn_subr/prompt.c:197
+#: ../svnserve/svnserve.c:822
#, c-format
msgid "Can't open stdin"
msgstr "无法打开标准输入"
+#: ../libsvn_subr/io.c:2238
msgid "Reading from stdin is disallowed"
msgstr "ä¸æŽ¥å—从标准输入设备读å–"
+#: ../libsvn_subr/io.c:2305
#, c-format
msgid "Can't remove file '%s'"
msgstr "ä¸èƒ½ç§»åŠ¨æ–‡ä»¶â€œ%sâ€"
+#: ../libsvn_subr/io.c:2392
#, c-format
msgid "Can't remove '%s'"
msgstr "无法删除“%sâ€"
+#: ../libsvn_subr/io.c:2555
+#, c-format
+msgid "Path '%s' not found, case obstructed by '%s'"
+msgstr "没有å‘现路径“%sâ€ï¼Œå¤§å°å†™éšœç¢â€œ%sâ€"
+
+#: ../libsvn_subr/io.c:2594
+#, c-format
+msgid "Path '%s' not found"
+msgstr "路径“%sâ€æ‰¾ä¸åˆ°"
+
+#: ../libsvn_subr/io.c:2668
#, c-format
msgid "Can't create process '%s' attributes"
msgstr "无法创建进程“%sâ€çš„属性"
+#: ../libsvn_subr/io.c:2675
#, c-format
msgid "Can't set process '%s' cmdtype"
msgstr "无法设置进程“%sâ€çš„命令类型"
+#: ../libsvn_subr/io.c:2687
#, c-format
msgid "Can't set process '%s' directory"
msgstr "无法设定进程“%sâ€çš„目录"
+#: ../libsvn_subr/io.c:2701
#, c-format
msgid "Can't set process '%s' child input"
msgstr "无法设置“%sâ€çš„å­è¿›ç¨‹è¾“入文件"
+#: ../libsvn_subr/io.c:2709
#, c-format
msgid "Can't set process '%s' child outfile"
msgstr "无法设置“%sâ€çš„å­è¿›ç¨‹è¾“出文件"
+#: ../libsvn_subr/io.c:2717
#, c-format
msgid "Can't set process '%s' child errfile"
msgstr "无法设置“%sâ€çš„å­è¿›ç¨‹é”™è¯¯è¾“出文件"
+#: ../libsvn_subr/io.c:2731
#, c-format
msgid "Can't set process '%s' stdio pipes"
msgstr "无法设置进程“%sâ€çš„标准 IO 管é“"
+#: ../libsvn_subr/io.c:2739
#, c-format
msgid "Can't set process '%s' child errfile for error handler"
msgstr "无法为错误处ç†å‡½æ•°è®¾ç½®â€œ%sâ€çš„å­è¿›ç¨‹é”™è¯¯è¾“出文件"
+#: ../libsvn_subr/io.c:2746
#, c-format
msgid "Can't set process '%s' error handler"
msgstr "无法设置进程“%sâ€çš„错误处ç†å‡½æ•°"
+#: ../libsvn_subr/io.c:2769
#, c-format
msgid "Can't start process '%s'"
msgstr "ä¸èƒ½å–得进程“%sâ€çŠ¶æ€"
+#: ../libsvn_subr/io.c:2793
#, c-format
msgid "Error waiting for process '%s'"
msgstr "等待进程“%sâ€å‡ºé”™"
+#: ../libsvn_subr/io.c:2802
#, c-format
-msgid "Process '%s' failed (exitwhy %d)"
-msgstr "进程“%sâ€å¤±è´¥(返回 %d)"
+msgid "Process '%s' failed (signal %d, core dumped)"
+msgstr "进程“%sâ€å¤±è´¥(ä¿¡å· %d,已ç»æ ¸å¿ƒè½¬å‚¨)"
+#: ../libsvn_subr/io.c:2807
+#, c-format
+msgid "Process '%s' failed (signal %d)"
+msgstr "进程“%sâ€å¤±è´¥(ä¿¡å· %d)"
+
+#: ../libsvn_subr/io.c:2813
+#, c-format
+msgid "Process '%s' failed (exitwhy %d, exitcode %d)"
+msgstr "进程“%sâ€å¤±è´¥(exitwhy %d, exitcode %d)"
+
+#: ../libsvn_subr/io.c:2821
#, c-format
msgid "Process '%s' returned error exitcode %d"
msgstr "进程“%sâ€è¿”å›žé”™è¯¯é€€å‡ºç  %d"
+#: ../libsvn_subr/io.c:2928
#, c-format
msgid "'%s' returned %d"
msgstr "“%s†返回 %d"
+#: ../libsvn_subr/io.c:3048
#, c-format
msgid ""
"Error running '%s': exitcode was %d, args were:\n"
@@ -4357,216 +6138,292 @@ msgstr ""
"%s\n"
"%s"
+#: ../libsvn_subr/io.c:3189
#, c-format
msgid "Can't detect MIME type of non-file '%s'"
msgstr "ä¸èƒ½æ£€æµ‹éžæ–‡ä»¶çš„“%sâ€ä¹‹MIME类型"
+#: ../libsvn_subr/io.c:3284
#, c-format
msgid "Can't open file '%s'"
msgstr "ä¸èƒ½æ‰“开文件“%sâ€"
+#: ../libsvn_subr/io.c:3324
#, c-format
msgid "Can't close file '%s'"
msgstr "无法关闭文件“%sâ€"
+#: ../libsvn_subr/io.c:3325
#, c-format
msgid "Can't close stream"
msgstr "无法关闭æµ"
+#: ../libsvn_subr/io.c:3334 ../libsvn_subr/io.c:3370 ../libsvn_subr/io.c:3395
#, c-format
msgid "Can't read file '%s'"
msgstr "ä¸èƒ½è¯»å–文件“%sâ€"
+#: ../libsvn_subr/io.c:3335 ../libsvn_subr/io.c:3371 ../libsvn_subr/io.c:3396
#, c-format
msgid "Can't read stream"
msgstr "无法读å–æµ"
+#: ../libsvn_subr/io.c:3344
#, c-format
msgid "Can't write file '%s'"
msgstr "无法写入文件“%sâ€"
+#: ../libsvn_subr/io.c:3345
#, c-format
msgid "Can't write stream"
msgstr "无法写入æµ"
+#: ../libsvn_subr/io.c:3359
#, c-format
msgid "Can't get attribute information from file '%s'"
msgstr "无法从文件“%sâ€èŽ·å–属性信æ¯"
+#: ../libsvn_subr/io.c:3360
#, c-format
msgid "Can't get attribute information from stream"
msgstr "无法从æµèŽ·å–属性信æ¯"
+#: ../libsvn_subr/io.c:3407
#, c-format
msgid "Can't set position pointer in file '%s'"
msgstr "无法在文件“%sâ€è®¾ç½®å®šä½æŒ‡é’ˆ"
+#: ../libsvn_subr/io.c:3408
#, c-format
msgid "Can't set position pointer in stream"
msgstr "无法在æµä¸­è®¾ç½®å®šä½æŒ‡é’ˆ"
+#: ../libsvn_subr/io.c:3419 ../libsvn_subr/io.c:3466
#, c-format
msgid "Can't write to file '%s'"
msgstr "无法写入文件“%sâ€"
+#: ../libsvn_subr/io.c:3420 ../libsvn_subr/io.c:3467
#, c-format
msgid "Can't write to stream"
msgstr "无法写入æµ"
+#: ../libsvn_subr/io.c:3509
#, c-format
msgid "Can't truncate file '%s'"
msgstr "ä¸èƒ½æˆªæ–­æ–‡ä»¶ “%sâ€"
+#: ../libsvn_subr/io.c:3510
#, c-format
msgid "Can't truncate stream"
msgstr "无法截断æµ"
+#: ../libsvn_subr/io.c:3583
#, c-format
msgid "Can't read length line in file '%s'"
msgstr "ä¸èƒ½ä»Žæ–‡ä»¶ “%s†中读å–é•¿è¡Œ"
+#: ../libsvn_subr/io.c:3587
msgid "Can't read length line in stream"
msgstr "无法从æµä¸­è¯»å–é•¿è¡Œ"
-#, c-format
-msgid "Can't stat '%s'"
-msgstr "ä¸èƒ½å–得“%sâ€çš„状æ€"
-
+#: ../libsvn_subr/io.c:3644
#, c-format
msgid "Can't move '%s' to '%s'"
msgstr "ä¸èƒ½ç§»åŠ¨ “%s†到 “%sâ€"
+#: ../libsvn_subr/io.c:3725
#, c-format
msgid "Can't create directory '%s'"
msgstr "无法创建目录 “%sâ€"
+#: ../libsvn_subr/io.c:3748
#, c-format
msgid "Can't hide directory '%s'"
msgstr "无法éšè—目录 “%sâ€"
+#: ../libsvn_subr/io.c:3808 ../libsvn_subr/io.c:3931
#, c-format
msgid "Can't open directory '%s'"
msgstr "无法打开目录“%sâ€"
+#: ../libsvn_subr/io.c:3843
#, c-format
msgid "Can't remove directory '%s'"
msgstr "无法删除目录 “%sâ€"
+#: ../libsvn_subr/io.c:3861
#, c-format
msgid "Can't read directory"
msgstr "无法读å–目录"
+#: ../libsvn_subr/io.c:3881
#, c-format
msgid "Error closing directory"
msgstr "关闭目录失败"
+#: ../libsvn_subr/io.c:3950
#, c-format
msgid "Can't read directory entry in '%s'"
msgstr "无法在 “%s†读å–目录内容"
+#: ../libsvn_subr/io.c:4076
#, c-format
msgid "Can't check directory '%s'"
msgstr "无法检查目录 “%sâ€"
+#: ../libsvn_subr/io.c:4138
#, c-format
msgid "Reading '%s'"
msgstr "æ­£åœ¨è¯»å– â€œ%sâ€"
+#: ../libsvn_subr/io.c:4157
#, c-format
msgid "First line of '%s' contains non-digit"
msgstr "“%s†的第一行包å«äº†éžæ•°å­—"
+#: ../libsvn_subr/io.c:4472
#, c-format
msgid "Can't create temporary file from template '%s'"
msgstr "无法从模版“%sâ€åˆ›å»ºä¸´æ—¶æ–‡ä»¶"
+#: ../libsvn_subr/io.c:4561
#, c-format
msgid "Can't set aside '%s'"
msgstr "ä¸èƒ½æ’¤é”€â€œ%sâ€"
+#: ../libsvn_subr/io.c:4573
#, c-format
msgid "Unable to make name in '%s'"
msgstr "ä¸èƒ½æŒ‰ç…§â€œ%sâ€ç”Ÿæˆåå­—"
-#, c-format
-msgid "Invalid revision number found parsing '%s'"
-msgstr "è§£æž â€œ%s†时å‘现无效的版本å·"
-
-#, c-format
-msgid "Negative revision number found parsing '%s'"
-msgstr "è§£æž â€œ%s†时å‘现负的版本å·"
-
+#: ../libsvn_subr/mergeinfo.c:100 ../libsvn_subr/mergeinfo.c:677
msgid "Pathname not terminated by ':'"
msgstr "路径å称没有以 “:†结æŸ"
+#: ../libsvn_subr/mergeinfo.c:103
msgid "No pathname preceding ':'"
msgstr "没有路径å称å‰ç¼€ “:â€"
-#, c-format
-msgid "Mergeinfo for '%s' maps to an empty revision range"
-msgstr "“%s†的åˆå¹¶ä¿¡æ¯æ˜ å°„到空的版本范围"
-
+#: ../libsvn_subr/mergeinfo.c:521
#, c-format
msgid "Invalid character '%c' found in revision list"
msgstr "在版本列表中å‘现无效字符 “%câ€"
+#: ../libsvn_subr/mergeinfo.c:529
#, c-format
msgid "Invalid revision number '0' found in range list"
msgstr "在范围列表中å‘现无效的版本å·ã€€â€œ0â€"
+#: ../libsvn_subr/mergeinfo.c:540
#, c-format
msgid "Unable to parse reversed revision range '%ld-%ld'"
msgstr "ä¸èƒ½è§£æžåå‘的版本范围 “%ld - %ldâ€"
+#: ../libsvn_subr/mergeinfo.c:545
#, c-format
-msgid "Unable to parse revision range '%ld-%ld' with same start and end revisions"
+msgid ""
+"Unable to parse revision range '%ld-%ld' with same start and end revisions"
msgstr "ä¸èƒ½è§£æžå¼€å§‹ä¸Žç»“æŸç‰ˆæœ¬ç›¸åŒçš„版本范围 “%ld-%ldâ€"
+#: ../libsvn_subr/mergeinfo.c:582 ../libsvn_subr/mergeinfo.c:589
#, c-format
msgid "Invalid character '%c' found in range list"
msgstr "在范围列表中å‘现无效字符 “%câ€"
+#: ../libsvn_subr/mergeinfo.c:596
msgid "Range list parsing ended before hitting newline"
msgstr "在é‡åˆ°æ–°è¡Œä¹‹å‰èŒƒå›´åˆ—表分æžç»“æŸ"
+#: ../libsvn_subr/mergeinfo.c:637
#, c-format
-msgid "Could not find end of line in range list line in '%s'"
-msgstr "在“%sâ€çš„范围列表行中没有找到行结æŸç¬¦"
+msgid ""
+"Unable to parse overlapping revision ranges '%s' and '%s' with different "
+"inheritance types"
+msgstr "ä¸æ”¯æŒè§£æžé‡å ä¸”继承类型ä¸åŒçš„版本范围 “%s†和 “%sâ€"
+#: ../libsvn_subr/mergeinfo.c:685
#, c-format
-msgid "Unable to parse overlapping revision ranges '%s' and '%s' with different inheritance types"
-msgstr "ä¸æ”¯æŒè§£æžé‡å ä¸”继承类型ä¸åŒçš„版本范围 “%s†和 “%sâ€"
+msgid "Mergeinfo for '%s' maps to an empty revision range"
+msgstr "“%s†的åˆå¹¶ä¿¡æ¯æ˜ å°„到空的版本范围"
+
+#: ../libsvn_subr/mergeinfo.c:689
+#, c-format
+msgid "Could not find end of line in range list line in '%s'"
+msgstr "在“%sâ€çš„范围列表行中没有找到行结æŸç¬¦"
+#: ../libsvn_subr/mergeinfo.c:753
#, c-format
msgid "Could not parse mergeinfo string '%s'"
msgstr "ä¸èƒ½è§£æžåˆå¹¶ä¿¡æ¯å­—符串“%sâ€"
+#: ../libsvn_subr/mergeinfo.c:2301
msgid "NULL mergeinfo catalog\n"
msgstr "空值åˆå¹¶ä¿¡æ¯ç›®å½•\n"
+#: ../libsvn_subr/mergeinfo.c:2306
msgid "empty mergeinfo catalog\n"
msgstr "空åˆå¹¶ä¿¡æ¯ç›®å½•\n"
-msgid "NULL mergeinfo\n"
-msgstr "空值åˆå¹¶ä¿¡æ¯\n"
+#: ../libsvn_subr/mutex.c:45
+#, c-format
+msgid "Can't create mutex"
+msgstr "无法创建互斥体"
+
+#: ../libsvn_subr/mutex.c:62
+#, c-format
+msgid "Can't lock mutex"
+msgstr "ä¸èƒ½é”定互斥体"
+
+#: ../libsvn_subr/mutex.c:78
+#, c-format
+msgid "Can't unlock mutex"
+msgstr "ä¸èƒ½è§£é”互斥体"
-msgid "empty mergeinfo\n"
-msgstr "空åˆå¹¶ä¿¡æ¯\n"
+#: ../libsvn_subr/named_atomic.c:335
+msgid "Not a valid atomic"
+msgstr "ä¸æ˜¯åˆæ³•çš„原å­æ•°æ®"
+#: ../libsvn_subr/named_atomic.c:474
+#, c-format
+msgid "MMAP failed for file '%s'"
+msgstr "创建内存映射文件“%sâ€å¤±è´¥"
+
+#: ../libsvn_subr/named_atomic.c:486
+msgid "Number of atomics in namespace is too large."
+msgstr "命å空间中的原å­æ•°é‡å¤ªå¤š"
+
+#: ../libsvn_subr/named_atomic.c:537
+msgid "Atomic's name is too long."
+msgstr "原å­çš„å称太长"
+
+#: ../libsvn_subr/named_atomic.c:543
+msgid "Namespace has not been initialized."
+msgstr "命å空间没有åˆå§‹åŒ–"
+
+#: ../libsvn_subr/named_atomic.c:591
+msgid "Out of slots for named atomic."
+msgstr "命å原å­çš„槽ä½å·²æ»¡"
+
+#: ../libsvn_subr/nls.c:80
#, c-format
msgid "Can't convert string to UCS-2: '%s'"
msgstr "ä¸èƒ½æŠŠå­—符串转æ¢ä¸º UCS-2: “%sâ€ã€‚"
+#: ../libsvn_subr/nls.c:87
msgid "Can't get module file name"
msgstr "无法获å–模å—文件å"
+#: ../libsvn_subr/nls.c:102
#, c-format
msgid "Can't convert module path to UTF-8 from UCS-2: '%s'"
msgstr "ä¸èƒ½æŠŠæ¨¡å—路径从UCS-2转æ¢ä¸ºUTF-8: “%sâ€"
+#: ../libsvn_subr/opt.c:189
msgid " ARG"
msgstr " ARG"
+#: ../libsvn_subr/opt.c:324
msgid ""
"\n"
"Global options:\n"
@@ -4574,99 +6431,148 @@ msgstr ""
"\n"
"全局选项: \n"
+#: ../libsvn_subr/opt.c:816
#, c-format
msgid "Syntax error parsing peg revision '%s'; did you mean '%s@'?"
msgstr "解æžé“†é’‰ç‰ˆæœ¬ '%s' æ—¶å‘生语法错误;你是ä¸æ˜¯æƒ³æ‰§è¡Œ '%s@'?"
+#: ../libsvn_subr/opt.c:822
#, c-format
msgid "Syntax error parsing peg revision '%s'"
msgstr "解æžé“†é’‰ç‰ˆæœ¬ '%s' æ—¶å‘生语法错误"
+#: ../libsvn_subr/opt.c:959
msgid "Revision property pair is empty"
msgstr "版本属性对为空"
+#: ../libsvn_subr/opt.c:979 ../svn/propedit-cmd.c:87 ../svn/propget-cmd.c:336
+#: ../svn/propset-cmd.c:68
#, c-format
msgid "'%s' is not a valid Subversion property name"
msgstr "“%sâ€ä¸æ˜¯æœ‰æ•ˆçš„ Subversion 属性å称"
+#: ../libsvn_subr/opt.c:1016
#, c-format
msgid "'%s' is just a peg revision. Maybe try '%s@' instead?"
msgstr "“%s†是铆钉版本。或许你应该使用 “%s@†?"
+#: ../libsvn_subr/opt.c:1062
#, c-format
msgid "URL '%s' contains a '..' element"
msgstr "URL“%sâ€åŒ…å«â€œ..â€å…ƒç´ "
+#: ../libsvn_subr/opt.c:1095
#, c-format
msgid "Error resolving case of '%s'"
msgstr "解æžâ€œ%sâ€å‡ºé”™"
+#: ../libsvn_subr/opt.c:1117
#, c-format
msgid ""
"%s, version %s\n"
-" compiled %s, %s\n"
+" compiled %s, %s on %s\n"
"\n"
msgstr ""
"%s,版本 %s\n"
-" 编译于 %s,%s\n"
+" 编译于 %s,%s 在 %s\n"
"\n"
+#: ../libsvn_subr/opt.c:1134
msgid ""
-"Copyright (C) 2012 The Apache Software Foundation.\n"
-"This software consists of contributions made by many people; see the NOTICE\n"
-"file for more information.\n"
-"Subversion is open source software, see http://subversion.apache.org/\n"
+"System information:\n"
"\n"
msgstr ""
-"版æƒæ‰€æœ‰ (C) 2012 Apache 软件基金会。\n"
-"此软件包å«äº†è®¸å¤šäººçš„贡献,请查看文件 NOTICE 以获得更多信æ¯ã€‚\n"
-"Subversion 是开放æºä»£ç è½¯ä»¶ï¼Œè¯·å‚阅 http://subversion.apache.org/ 站点。\n"
+"系统信æ¯:\n"
"\n"
+#: ../libsvn_subr/opt.c:1135
+#, c-format
+msgid "* running on %s\n"
+msgstr "* è¿è¡ŒäºŽ %s\n"
+
+#: ../libsvn_subr/opt.c:1139
+#, c-format
+msgid " - %s\n"
+msgstr " - %s\n"
+
+#: ../libsvn_subr/opt.c:1149
+msgid "* linked dependencies:\n"
+msgstr "* 链接的ä¾èµ–库:\n"
+
+#: ../libsvn_subr/opt.c:1174
+msgid "* loaded shared libraries:\n"
+msgstr "* 已加载的共享库:\n"
+
+#: ../libsvn_subr/path.c:1114
#, c-format
msgid "Can't determine the native path encoding"
msgstr "ä¸èƒ½ç¡®å®šæœ¬åœ°è·¯å¾„ç¼–ç "
+#: ../libsvn_subr/path.c:1303
#, c-format
-msgid "Invalid control character '0x%02x' in path '%s'"
-msgstr "无效控制字符 “0x%02x†在路径 “%s†中"
+msgid "Improper relative URL '%s'"
+msgstr "ä¸æ­£ç¡®çš„相对 URL“%sâ€"
+
+#: ../libsvn_subr/prompt.c:147
+msgid "Can't close terminal"
+msgstr "ä¸èƒ½å…³é—­ç»ˆç«¯"
+
+#: ../libsvn_subr/prompt.c:200
+#, c-format
+msgid "Can't open stderr"
+msgstr "ä¸èƒ½æ‰“开标准错误"
+
+#: ../libsvn_subr/prompt.c:263
+#, c-format
+msgid "Can't write to terminal"
+msgstr "无法写入终端"
+#: ../libsvn_subr/prompt.c:385 ../libsvn_subr/prompt.c:472
#, c-format
-msgid "Can't read stdin"
-msgstr "无法读å–标准输入"
+msgid "Can't read from terminal"
+msgstr "无法读å–终端"
+#: ../libsvn_subr/prompt.c:540
+msgid "End of file while reading from terminal"
+msgstr "从终端读到了文件结æŸæ ‡è®°"
+
+#: ../libsvn_subr/prompt.c:602
#, c-format
msgid "Authentication realm: %s\n"
msgstr "认è¯é¢†åŸŸ: %s\n"
+#: ../libsvn_subr/prompt.c:629 ../libsvn_subr/prompt.c:652
msgid "Username: "
msgstr "用户å: "
-#, c-format
-msgid "Password for '%s': "
-msgstr "“%sâ€çš„密ç : "
-
+#: ../libsvn_subr/prompt.c:674
#, c-format
msgid "Error validating server certificate for '%s':\n"
msgstr "验è¯â€œ%sâ€çš„æœåŠ¡å™¨è¯ä¹¦æ—¶å‡ºé”™: \n"
+#: ../libsvn_subr/prompt.c:680
msgid ""
" - The certificate is not issued by a trusted authority. Use the\n"
" fingerprint to validate the certificate manually!\n"
msgstr " - æ­¤è¯ä¹¦å¹¶ä¸æ˜¯ç”±ä¿¡ä»»çš„æƒå¨æœºæƒé¢å‘。请使用此指纹手工验è¯å…¶æœ‰æ•ˆæ€§ï¼\n"
+#: ../libsvn_subr/prompt.c:687
msgid " - The certificate hostname does not match.\n"
msgstr " - è¯ä¹¦çš„主机å称ä¸åŒ¹é…。\n"
+#: ../libsvn_subr/prompt.c:693
msgid " - The certificate is not yet valid.\n"
msgstr " - è¯ä¹¦æœªç”Ÿæ•ˆã€‚\n"
+#: ../libsvn_subr/prompt.c:699
msgid " - The certificate has expired.\n"
msgstr " - è¯ä¹¦å·²è¿‡æœŸã€‚\n"
+#: ../libsvn_subr/prompt.c:705
msgid " - The certificate has an unknown error.\n"
msgstr " - è¯ä¹¦å‘生未知错误。\n"
+#: ../libsvn_subr/prompt.c:710
#, c-format
msgid ""
"Certificate information:\n"
@@ -4681,37 +6587,48 @@ msgstr ""
" - å‘行者: %s\n"
" - 指纹: %s\n"
+#: ../libsvn_subr/prompt.c:725
msgid "(R)eject, accept (t)emporarily or accept (p)ermanently? "
msgstr "(R)æ‹’ç»ï¼Œ(t)暂时接å—,或(p)永远接å—?"
+#: ../libsvn_subr/prompt.c:729
msgid "(R)eject or accept (t)emporarily? "
msgstr "(R)æ‹’ç» æˆ– (t)æš‚æ—¶æŽ¥å— ï¼Ÿ"
+#: ../libsvn_subr/prompt.c:769
msgid "Client certificate filename: "
msgstr "客户è¯ä¹¦æ–‡ä»¶å: "
+#: ../libsvn_subr/prompt.c:793
#, c-format
msgid "Passphrase for '%s': "
msgstr "“%sâ€çš„密ç : "
+#: ../libsvn_subr/prompt.c:845
msgid "yes"
msgstr "yes"
+#: ../libsvn_subr/prompt.c:846
msgid "y"
msgstr "y"
+#: ../libsvn_subr/prompt.c:851
msgid "no"
msgstr "no"
+#: ../libsvn_subr/prompt.c:852
msgid "n"
msgstr "n"
+#: ../libsvn_subr/prompt.c:858
msgid "Please type 'yes' or 'no': "
msgstr "请输入 'yes' 或 'no': "
+#: ../libsvn_subr/prompt.c:872
msgid "Store password unencrypted (yes/no)? "
msgstr "ä¿å­˜æœªåŠ å¯†çš„密ç (yes/no)?"
+#: ../libsvn_subr/prompt.c:874
#, c-format
msgid ""
"\n"
@@ -4742,9 +6659,11 @@ msgstr ""
"æ¥é¿å…å†æ¬¡å‡ºçŽ°æ­¤è­¦å‘Šã€‚\n"
"-----------------------------------------------------------------------\n"
+#: ../libsvn_subr/prompt.c:901
msgid "Store passphrase unencrypted (yes/no)? "
msgstr "ä¿å­˜æœªåŠ å¯†çš„密ç (yes/no)?"
+#: ../libsvn_subr/prompt.c:903
#, c-format
msgid ""
"\n"
@@ -4775,99 +6694,143 @@ msgstr ""
" 或 “no†æ¥é¿å…å†æ¬¡å‡ºçŽ°æ­¤è­¦å‘Šã€‚\n"
"-----------------------------------------------------------------------\n"
+#: ../libsvn_subr/prompt.c:949
#, c-format
msgid "Password for '%s' GNOME keyring: "
msgstr "GNOME keyring [%s] 的密ç : "
+#: ../libsvn_subr/simple_providers.c:449
+#: ../libsvn_subr/ssl_client_cert_pw_providers.c:296
#, c-format
msgid "Config error: invalid value '%s' for option '%s'"
msgstr "é…置错误: 无效å–值 “%sâ€ï¼Œå¯¹äºŽé€‰é¡¹ “%sâ€"
+#: ../libsvn_subr/sqlite.c:176
#, c-format
-msgid "%s, executing statement '%s'"
-msgstr "%s, æ‰§è¡Œè¯­å¥ '%s'"
-
-msgid "Expected database row missing"
-msgstr "丢失了期待的数æ®åº“è¡Œ"
+msgid "sqlite[S%d]: %s, executing statement '%s'"
+msgstr "sqlite[S%d]: %s, æ‰§è¡Œè¯­å¥ '%s'"
-msgid "Extra database row found"
-msgstr "å‘现了é¢å¤–çš„æ•°æ®åº“è¡Œ"
+#: ../libsvn_subr/sqlite.c:265
+msgid "sqlite: Expected database row missing"
+msgstr "sqlite: 缺少期望的数æ®åº“è¡Œ"
-#, c-format
-msgid "Schema format %d not recognized"
-msgstr "ä¸èƒ½è¯†åˆ«æ–¹æ¡ˆæ ¼å¼ %d"
+#: ../libsvn_subr/sqlite.c:266
+msgid "sqlite: Extra database row found"
+msgstr "sqlite: å‘现é¢å¤–çš„æ•°æ®åº“è¡Œ"
+#: ../libsvn_subr/sqlite.c:726
#, c-format
msgid "SQLite compiled for %s, but running with %s"
msgstr "SQLite 编译为 %s,但是è¿è¡ŒäºŽ %s"
+#: ../libsvn_subr/sqlite.c:738
msgid "SQLite is required to be compiled and run in thread-safe mode"
msgstr "SQLite 需è¦åœ¨ç¼–译和è¿è¡Œæ—¶éƒ½å¤„于线程安全模å¼"
-msgid "Could not configure SQLite"
-msgstr "ä¸èƒ½é…ç½® SQLite"
+#: ../libsvn_subr/sqlite.c:747
+#, c-format
+msgid "Could not configure SQLite [S%d]"
+msgstr "ä¸èƒ½é…ç½® SQLite [S%d]"
+#: ../libsvn_subr/sqlite.c:749
msgid "Could not initialize SQLite"
msgstr "ä¸èƒ½åˆå§‹åŒ– SQLite"
+#: ../libsvn_subr/sqlite.c:1178
#, c-format
msgid "SQLite hotcopy failed for %s"
msgstr "SQLite 由于 %s 导致热å¤åˆ¶å¤±è´¥"
+#: ../libsvn_subr/string.c:943 ../libsvn_subr/string.c:987
+#, c-format
+msgid "Could not convert '%s' into a number"
+msgstr "æ— æ³•è½¬æ¢ '%s' 到数字"
+
+#: ../libsvn_subr/subst.c:1793 ../libsvn_wc/props.c:1660
#, c-format
msgid "File '%s' has inconsistent newlines"
msgstr "文件 “%s†内的æ¢è¡Œç¬¦ä¸ä¸€è‡´"
-#, c-format
-msgid "Could not convert '%s' into a number"
-msgstr "æ— æ³•è½¬æ¢ '%s' 到数字"
+#: ../libsvn_subr/sysinfo.c:1075
+msgid "Intel"
+msgstr "Intel"
+
+#: ../libsvn_subr/sysinfo.c:1076
+msgid "Intel 64-bit"
+msgstr "Intel 64 ä½"
+
+#: ../libsvn_subr/sysinfo.c:1077
+msgid "PowerPC"
+msgstr "PowerPC"
+
+#: ../libsvn_subr/sysinfo.c:1078
+msgid "PowerPC 64-bit"
+msgstr "PowerPC 64 ä½"
#. Human explanatory part, generated by apr_strftime as "Sat, 01 Jan 2000"
+#: ../libsvn_subr/time.c:85
msgid " (%a, %d %b %Y)"
msgstr " (%a, %Y-%m-%d)"
+#: ../libsvn_subr/token.c:66
#, c-format
msgid "Token '%s' is unrecognized"
msgstr "无法识别令牌 “%sâ€"
-msgid "Can't lock charset translation mutex"
-msgstr "ä¸èƒ½é”定字符转æ¢äº’斥体"
+#: ../libsvn_subr/types.c:48
+#, c-format
+msgid "Invalid revision number found parsing '%s'"
+msgstr "è§£æž â€œ%s†时å‘现无效的版本å·"
-msgid "Can't unlock charset translation mutex"
-msgstr "ä¸èƒ½è§£é”字符转æ¢äº’斥体"
+#: ../libsvn_subr/types.c:60
+#, c-format
+msgid "Negative revision number found parsing '%s'"
+msgstr "è§£æž â€œ%s†时å‘现负的版本å·"
+#: ../libsvn_subr/utf.c:240
#, c-format
msgid "Can't create a character converter from native encoding to '%s'"
msgstr "ä¸èƒ½åˆ›å»ºä»Žæœ¬åœ°ç¼–ç åˆ°â€œ%sâ€çš„字符转æ¢å™¨"
+#: ../libsvn_subr/utf.c:244
#, c-format
msgid "Can't create a character converter from '%s' to native encoding"
msgstr "ä¸èƒ½åˆ›å»ºä»Žâ€œ%sâ€åˆ°æœ¬åœ°ç¼–ç çš„字符转æ¢å™¨"
+#: ../libsvn_subr/utf.c:248
#, c-format
msgid "Can't create a character converter from '%s' to '%s'"
msgstr "ä¸èƒ½åˆ›å»ºä»Žâ€œ%sâ€åˆ°â€œ%sâ€çš„字符转æ¢å™¨"
+#: ../libsvn_subr/utf.c:590
#, c-format
msgid "Can't convert string from native encoding to '%s':"
msgstr "ä¸èƒ½æŠŠå­—符串从本地编ç è½¬æ¢ä¸ºâ€œ%sâ€ç¼–ç : "
+#: ../libsvn_subr/utf.c:594
#, c-format
msgid "Can't convert string from '%s' to native encoding:"
msgstr "ä¸èƒ½æŠŠå­—符串从â€%s“编ç è½¬æ¢ä¸ºæœ¬åœ°ç¼–ç ã€‚"
+#: ../libsvn_subr/utf.c:598
#, c-format
msgid "Can't convert string from '%s' to '%s':"
msgstr "ä¸èƒ½æŠŠå­—符串从“%sâ€ç¼–ç è½¬æ¢ä¸ºâ€œ%sâ€ç¼–ç ã€‚"
+#: ../libsvn_subr/utf.c:643
#, c-format
-msgid "Safe data '%s' was followed by non-ASCII byte %d: unable to convert to/from UTF-8"
+msgid ""
+"Safe data '%s' was followed by non-ASCII byte %d: unable to convert to/from "
+"UTF-8"
msgstr "安全数æ®â€œ%sâ€åŽé¢æ˜¯éžASCII字节 %d: ä¸èƒ½è½¬æ¢åˆ°/自 UTF-8"
+#: ../libsvn_subr/utf.c:651
#, c-format
-msgid "Non-ASCII character (code %d) detected, and unable to convert to/from UTF-8"
+msgid ""
+"Non-ASCII character (code %d) detected, and unable to convert to/from UTF-8"
msgstr "检测到éžASCII字符 (ä»£ç  %d),并且ä¸èƒ½è½¬æ¢åˆ°/自 UTF-8"
+#: ../libsvn_subr/utf.c:696
#, c-format
msgid ""
"Valid UTF-8 data\n"
@@ -4880,567 +6843,845 @@ msgstr ""
"åŽé¢æ˜¯æ— æ•ˆ UTF-8 åºåˆ—\n"
"(16进制: %s)"
+#: ../libsvn_subr/validate.c:56
#, c-format
msgid "MIME type '%s' has empty media type"
msgstr "MIME 类型“%sâ€å«æœ‰ç©ºçš„媒体类型"
+#: ../libsvn_subr/validate.c:61
#, c-format
msgid "MIME type '%s' does not contain '/'"
msgstr "MIME 类型 “%sâ€ æ²¡æœ‰åŒ…å« â€œ/â€"
+#: ../libsvn_subr/validate.c:73
#, c-format
msgid "MIME type '%s' contains invalid character '%c' in media type"
msgstr "MIME 类型“%sâ€çš„媒体类型中包å«éžæ³•å­—符“%câ€"
+#: ../libsvn_subr/validate.c:84
#, c-format
msgid "MIME type '%s' contains invalid character '0x%02x' in postfix"
msgstr "MIME 类型“%sâ€ä¸­åŒ…å«éžæ³•å­—符“0x%02xâ€"
+#: ../libsvn_subr/version.c:89
#, c-format
msgid "Version mismatch in '%s': found %d.%d.%d%s, expected %d.%d.%d%s"
msgstr "“%sâ€çš„版本ä¸ä¸€è‡´: 找到 %d.%d.%d%s,期望 %d.%d.%d%s"
+#: ../libsvn_subr/version.c:132
+msgid ""
+"Copyright (C) 2013 The Apache Software Foundation.\n"
+"This software consists of contributions made by many people;\n"
+"see the NOTICE file for more information.\n"
+"Subversion is open source software, see http://subversion.apache.org/\n"
+msgstr ""
+"版æƒæ‰€æœ‰ (C) 2013 Apache 软件基金会。\n"
+"此软件包å«äº†è®¸å¤šäººçš„贡献,请查看文件 NOTICE 以获得更多信æ¯ã€‚\n"
+"Subversion 是开放æºä»£ç è½¯ä»¶ï¼Œè¯·å‚阅 http://subversion.apache.org/ 站点。\n"
+"\n"
+
+#: ../libsvn_subr/version.c:210 ../libsvn_subr/version.c:221
+#: ../libsvn_subr/version.c:227 ../libsvn_subr/version.c:244
+#: ../libsvn_subr/version.c:251
+#, c-format
+msgid "Failed to parse version number string '%s'"
+msgstr "ä¸èƒ½è§£æžç‰ˆæœ¬å·å­—符串“%sâ€"
+
+#: ../libsvn_subr/xml.c:416
#, c-format
msgid "Malformed XML: %s at line %ld"
msgstr "éžæ³• XML: %s 在第 %ld è¡Œ"
+#: ../libsvn_wc/adm_crawler.c:114
#, c-format
msgid "The existing node '%s' can not be restored."
msgstr "已有节点 '%s' ä¸èƒ½æ¢å¤ã€‚"
+#: ../libsvn_wc/adm_crawler.c:133
#, c-format
msgid "The node '%s' can not be restored."
msgstr "节点 '%s' ä¸èƒ½æ¢å¤ã€‚"
+#: ../libsvn_wc/adm_crawler.c:851
msgid "Error aborting report"
msgstr "å–消报告出错"
+#: ../libsvn_wc/adm_crawler.c:963
#, c-format
msgid "Pristine checksum for file '%s' is missing"
msgstr "文件“%sâ€çš„原始内容校验和丢失"
+#: ../libsvn_wc/adm_crawler.c:1128
#, c-format
msgid "Checksum mismatch for text base of '%s'"
msgstr "'%s' 的文本校验和ä¸åŒ¹é…"
+#: ../libsvn_wc/adm_crawler.c:1139
#, c-format
msgid "While preparing '%s' for commit"
msgstr "当为æ交æ“作准备“%sâ€æ—¶"
+#: ../libsvn_wc/adm_files.c:105
#, c-format
msgid "'%s' is not a valid administrative directory name"
msgstr "“%sâ€ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„管ç†ç›®å½•å"
+#: ../libsvn_wc/adm_files.c:185 ../libsvn_wc/adm_files.c:241
#, c-format
msgid "Can only get the pristine contents of files; '%s' is not a file"
msgstr "åªèƒ½å–得文件的原始内容;“%sâ€ä¸æ˜¯æ–‡ä»¶"
+#: ../libsvn_wc/adm_files.c:194 ../libsvn_wc/adm_files.c:256
#, c-format
-msgid "Cannot get the pristine contents of '%s' because its delete is already committed"
+msgid ""
+"Cannot get the pristine contents of '%s' because its delete is already "
+"committed"
msgstr "ä¸èƒ½å–得“%sâ€çš„原始内容,因为其删除æ“作已ç»æ交"
+#: ../libsvn_wc/adm_files.c:202 ../libsvn_wc/adm_files.c:264
#, c-format
-msgid "Cannot get the pristine contents of '%s' because it has an unexpected status"
+msgid ""
+"Cannot get the pristine contents of '%s' because it has an unexpected status"
msgstr "ä¸èƒ½å–得“%sâ€çš„原始内容,因为其状æ€æœªçŸ¥"
+#: ../libsvn_wc/adm_files.c:209
#, c-format
msgid "Node '%s' has no pristine text"
msgstr "节点 '%s' 没有原始内容"
+#: ../libsvn_wc/adm_files.c:452
#, c-format
msgid "Revision %ld doesn't match existing revision %ld in '%s'"
msgstr "版本 %ld ä¸åŒ¹é…现有版本 %ld 于 “%sâ€"
+#: ../libsvn_wc/adm_files.c:489
#, c-format
-msgid "URL '%s' (uuid: '%s') doesn't match existing URL '%s' (uuid: '%s') in '%s'"
+msgid ""
+"URL '%s' (uuid: '%s') doesn't match existing URL '%s' (uuid: '%s') in '%s'"
msgstr "URL “%sâ€(uuid: '%s') ä¸åŒ¹é…现有 URL “%sâ€(uuid: '%s') 于 “%sâ€"
-#, c-format
-msgid "'%s' cannot be deleted"
-msgstr "'%s' ä¸èƒ½è¢«åˆ é™¤"
-
-#, c-format
-msgid "'%s' is the root of a working copy and cannot be deleted"
-msgstr "ä¸èƒ½åˆ é™¤å·¥ä½œå‰¯æœ¬æ ¹ç›®å½• '%s'"
-
+#: ../libsvn_wc/adm_ops.c:601 ../libsvn_wc/update_editor.c:5206
#, c-format
msgid "Can't find parent directory's node while trying to add '%s'"
msgstr "增加 “%s†时无法找到父目录节点"
+#: ../libsvn_wc/adm_ops.c:610 ../libsvn_wc/update_editor.c:5200
#, c-format
msgid "Can't add '%s' to a parent directory scheduled for deletion"
msgstr "增加 “%s†到调度删除的目录中"
+#: ../libsvn_wc/adm_ops.c:617 ../libsvn_wc/update_editor.c:5213
#, c-format
msgid "Can't schedule an addition of '%s' below a not-directory node"
msgstr "ä¸èƒ½åœ¨éžç›®å½•èŠ‚点 '%s' 下调度增加"
+#: ../libsvn_wc/adm_ops.c:676
#, c-format
msgid "Can't create an entry with a reserved name while trying to add '%s'"
msgstr "增加 “%s†时无法创建使用ä¿ç•™å称的æ¡ç›®"
+#: ../libsvn_wc/adm_ops.c:880
#, c-format
msgid "The URL '%s' has a different repository root than its parent"
msgstr "URL “%s†与其父目录的版本库根目录ä¸ç›¸åŒ"
+#: ../libsvn_wc/adm_ops.c:898
#, c-format
-msgid "Can't schedule the working copy at '%s' from repository '%s' with uuid '%s' for addition under a working copy from repository '%s' with uuid '%s'."
-msgstr "ä¸èƒ½è°ƒåº¦å·¥ä½œå‰¯æœ¬ '%s' (版本库 '%s',uuid '%s') 在版本库 '%s' (uuid '%s') 的工作副本下增加。"
+msgid ""
+"Can't schedule the working copy at '%s' from repository '%s' with uuid '%s' "
+"for addition under a working copy from repository '%s' with uuid '%s'."
+msgstr ""
+"ä¸èƒ½è°ƒåº¦å·¥ä½œå‰¯æœ¬ '%s' (版本库 '%s',uuid '%s') 在版本库 '%s' (uuid '%s') çš„å·¥"
+"作副本下增加。"
+#: ../libsvn_wc/adm_ops.c:912
#, c-format
msgid "Can't add '%s' with URL '%s', but with the data from '%s'"
msgstr "ä¸èƒ½å¢žåŠ  '%s' 为 URL '%s' (æ•°æ®æ¥è‡ª '%s')"
-#, c-format
-msgid "File '%s' has local modifications"
-msgstr "文件“%sâ€æœ‰æœ¬åœ°ä¿®æ”¹"
-
+#: ../libsvn_wc/cleanup.c:58
#, c-format
msgid "'%s' is not a working copy directory"
msgstr "“%s†ä¸æ˜¯å·¥ä½œå‰¯æœ¬ç›®å½•"
+#: ../libsvn_wc/cleanup.c:64
msgid "Log format too old, please use Subversion 1.6 or earlier"
msgstr "日志格å¼å¤ªæ—§ï¼Œè¯·ä½¿ç”¨ Subversion 1.6 或更新的版本"
+#: ../libsvn_wc/conflicts.c:83
+msgid "Not a conflict skel"
+msgstr "ä¸æ˜¯å†²çªéª¨æž¶"
+
+#: ../libsvn_wc/conflicts.c:610 ../libsvn_wc/conflicts.c:707
+msgid "Not a completed conflict skel"
+msgstr "ä¸æ˜¯å®Œæ•´çš„冲çªéª¨æž¶"
+
+#: ../libsvn_wc/conflicts.c:788 ../libsvn_wc/conflicts.c:861
+#: ../libsvn_wc/conflicts.c:951
+msgid "Conflict not set"
+msgstr "没有设置冲çª"
+
+#: ../libsvn_wc/conflicts.c:1438 ../libsvn_wc/conflicts.c:1790
+msgid "Conflict callback violated API: returned no results"
+msgstr "冲çªçš„回调函数è¿å API:没有返回结果。"
+
+#: ../libsvn_wc/conflicts.c:1482
+msgid "Conflict callback violated API: returned no merged file"
+msgstr "冲çªçš„回调函数è¿å API:没有返回åˆå¹¶æ–‡ä»¶ã€‚"
+
+#: ../libsvn_wc/conflicts.c:2468 ../libsvn_wc/conflicts.c:2644
msgid "Invalid 'conflict_result' argument"
msgstr "无效的 “conflict_result†å‚æ•°"
+#: ../libsvn_wc/conflicts.c:2767 ../libsvn_wc/conflicts.c:2807
+#, c-format
+msgid ""
+"Tree conflict can only be resolved to 'working' or 'mine-conflict' state; "
+"'%s' not resolved"
+msgstr "树冲çªåªèƒ½è§£å†³ä¸ºâ€œworkingâ€æˆ–“mine-conflictâ€çŠ¶æ€ï¼›â€œ%s†还没有解决"
+
+#: ../libsvn_wc/conflicts.c:2822
#, c-format
-msgid "Tree conflicts can only be resolved to 'working' state; '%s' not resolved"
-msgstr "树冲çªåªèƒ½è§£å†³ä¸º “working†状æ€ï¼›â€œ%s†还没有解决"
+msgid ""
+"Tree conflict can only be resolved to 'working' state; '%s' not resolved"
+msgstr "树冲çªåªèƒ½è§£å†³ä¸ºâ€œworkingâ€çŠ¶æ€ï¼›â€œ%s†还没有解决"
+
+#: ../libsvn_wc/conflicts.c:2924
+msgid "No conflict-callback and no pre-defined conflict-choice provided"
+msgstr "没有æ供冲çªå›žè°ƒæˆ–预定义的冲çªé€‰æ‹©"
+#: ../libsvn_wc/copy.c:86
#, c-format
msgid "Source '%s' is unexpected kind"
msgstr "æº â€œ%s†具有æ„外的类型"
+#: ../libsvn_wc/copy.c:410
#, c-format
msgid "cannot handle node kind for '%s'"
msgstr "ä¸èƒ½ä¸º '%s'“处ç†èŠ‚点类型"
+#: ../libsvn_wc/copy.c:432 ../libsvn_wc/wc_db.c:4400 ../libsvn_wc/wc_db.c:4975
+#, c-format
+msgid "Cannot handle status of '%s'"
+msgstr "ä¸èƒ½å¤„ç†â€œ%sâ€çš„状æ€"
+
+#: ../libsvn_wc/copy.c:441 ../libsvn_wc/wc_db.c:4391 ../libsvn_wc/wc_db.c:4969
+#: ../libsvn_wc/wc_db.c:5203
#, c-format
msgid "Cannot copy '%s' excluded by server"
msgstr "ä¸èƒ½å¤åˆ¶è¢«æœåŠ¡å™¨æŽ’除的 '%s'"
+#: ../libsvn_wc/copy.c:578
#, c-format
msgid "Deleted node '%s' can't be copied."
msgstr "å·²ç»åˆ é™¤çš„节点“%sâ€ä¸èƒ½è¢«å¤åˆ¶ã€‚"
+#: ../libsvn_wc/copy.c:596
#, c-format
-msgid "The node '%s' was not found."
-msgstr "找ä¸åˆ°èŠ‚点 '%s'。"
+msgid "'%s' is the root of a working copy and cannot be moved"
+msgstr "“%sâ€æ˜¯å·¥ä½œå‰¯æœ¬æ ¹ç›®å½•ï¼Œä¸èƒ½è¢«ç§»åŠ¨"
+#: ../libsvn_wc/copy.c:604
+#, c-format
+msgid "'%s' represents the repository root and cannot be moved"
+msgstr "“%sâ€æ˜¯ç‰ˆæœ¬åº“根目录,ä¸èƒ½è¢«ç§»åŠ¨"
+
+#: ../libsvn_wc/copy.c:673
#, c-format
msgid "Cannot copy to '%s', as it is not from repository '%s'; it is from '%s'"
msgstr "无法å¤åˆ¶åˆ°â€œ%sâ€ï¼Œå› ä¸ºå®ƒä¸åœ¨ç‰ˆæœ¬åº““%sâ€ä¸­ï¼›å®ƒæ¥è‡ªâ€œ%sâ€"
+#: ../libsvn_wc/copy.c:681
#, c-format
msgid "Cannot copy to '%s' as it is scheduled for deletion"
msgstr "无法å¤åˆ¶åˆ°â€œ%sâ€ï¼Œå› ä¸ºå®ƒå·²è°ƒåº¦åˆ é™¤"
+#: ../libsvn_wc/copy.c:709
#, c-format
msgid "'%s' is already under version control but is excluded."
msgstr "'%s' 已纳入版本控制,å´è¢«æŽ’除。"
+#: ../libsvn_wc/copy.c:724
#, c-format
msgid "There is already a versioned item '%s'"
msgstr "已有纳入版本控制项“%sâ€"
+#: ../libsvn_wc/copy.c:740
#, c-format
msgid "'%s' already exists and is in the way"
msgstr "“%sâ€å·²å­˜åœ¨ï¼Œå˜æˆæ‹¦è·¯è™Ž"
+#: ../libsvn_wc/copy.c:791
+#, c-format
+msgid ""
+"Cannot move mixed-revision subtree '%s' [%ld:%ld]; try updating it first"
+msgstr "ä¸èƒ½ç§»åŠ¨æœ‰æ··åˆç‰ˆæœ¬çš„å­æ ‘“%sâ€[%ld:%ld] 中;请先更新"
+
+#: ../libsvn_wc/crop.c:207
#, c-format
msgid "Cannot exclude '%s': it is a working copy root"
msgstr "ä¸èƒ½æŽ’除 '%s': 它是工作副本根目录"
+#: ../libsvn_wc/crop.c:215
#, c-format
msgid "Cannot exclude '%s': it is a switched path"
msgstr "ä¸èƒ½æŽ’除 '%s':它是已切æ¢çš„路径"
+#: ../libsvn_wc/crop.c:242
#, c-format
-msgid "Cannot exclude '%s': it is to be added to the repository. Try commit instead"
+msgid ""
+"Cannot exclude '%s': it is to be added to the repository. Try commit instead"
msgstr "ä¸èƒ½æŽ’除 '%s': 它将è¦å¢žåŠ åˆ°ç‰ˆæœ¬åº“中。请先æ交"
+#: ../libsvn_wc/crop.c:249
#, c-format
-msgid "Cannot exclude '%s': it is to be deleted from the repository. Try commit instead"
+msgid ""
+"Cannot exclude '%s': it is to be deleted from the repository. Try commit "
+"instead"
msgstr "ä¸èƒ½æŽ’除 '%s': 它将è¦ä»Žç‰ˆæœ¬åº“中删除。请先æ交"
+#: ../libsvn_wc/crop.c:308
msgid "Can only crop a working copy with a restrictive depth"
msgstr "åªèƒ½ä¿®å‰ªå·¥ä½œå‰¯æœ¬åˆ°æœ‰é™æ·±åº¦"
+#: ../libsvn_wc/crop.c:319
msgid "Can only crop directories"
msgstr "åªèƒ½ä¿®å‰ªç›®å½•"
+#: ../libsvn_wc/crop.c:332
#, c-format
-msgid "Cannot crop '%s': it is going to be removed from repository. Try commit instead"
+msgid ""
+"Cannot crop '%s': it is going to be removed from repository. Try commit "
+"instead"
msgstr "无法修剪 “%sâ€: 它将è¦ä»Žç‰ˆæœ¬åº“中删除;请先æ交"
+#: ../libsvn_wc/crop.c:339
#, c-format
-msgid "Cannot crop '%s': it is to be added to the repository. Try commit instead"
+msgid ""
+"Cannot crop '%s': it is to be added to the repository. Try commit instead"
msgstr "无法修剪 '%s': 它将è¦å¢žåŠ åˆ°ç‰ˆæœ¬åº“中。请先æ交"
+#: ../libsvn_wc/delete.c:237 ../libsvn_wc/delete.c:357
+#, c-format
+msgid "'%s' cannot be deleted"
+msgstr "'%s' ä¸èƒ½è¢«åˆ é™¤"
+
+#: ../libsvn_wc/delete.c:255 ../libsvn_wc/delete.c:373
+#, c-format
+msgid "'%s' is the root of a working copy and cannot be deleted"
+msgstr "ä¸èƒ½åˆ é™¤å·¥ä½œå‰¯æœ¬æ ¹ç›®å½• '%s'"
+
+#: ../libsvn_wc/delete.c:262 ../libsvn_wc/delete.c:379
+#, c-format
+msgid "'%s' represents the repository root and cannot be deleted"
+msgstr "“%sâ€æ˜¯ç‰ˆæœ¬åº“根目录,ä¸èƒ½è¢«åˆ é™¤"
+
+#: ../libsvn_wc/delete.c:476
+#, c-format
+msgid "File '%s' has local modifications"
+msgstr "文件“%sâ€æœ‰æœ¬åœ°ä¿®æ”¹"
+
+#: ../libsvn_wc/deprecated.c:2284
#, c-format
msgid "Unexpectedly found '%s': path is marked 'missing'"
msgstr "æ„外å‘现“%sâ€: 路径被标记为“丢失â€"
+#: ../libsvn_wc/entries.c:1044
#, c-format
msgid "'%s' is not a versioned working copy"
msgstr "“%sâ€ä¸æ˜¯å·²ç‰ˆæœ¬æŽ§åˆ¶çš„工作副本"
+#: ../libsvn_wc/entries.c:1290
#, c-format
msgid "Admin area of '%s' is missing"
msgstr "“%sâ€çš„管ç†ç›®å½•ä¸¢å¤±"
+#: ../libsvn_wc/entries.c:1310
#, c-format
msgid "'%s' is not of the right kind"
msgstr "“%s†的类型错误"
+#: ../libsvn_wc/entries.c:1507
#, c-format
msgid "The file '%s' has no checksum"
msgstr "文件 '%s' 没有校验和。"
+#: ../libsvn_wc/entries.c:1619
+#, c-format
+msgid "Unable to upgrade '%s' at line %d"
+msgstr "ä¸èƒ½å‡çº§â€œ%sâ€ï¼Œç¬¬ %d è¡Œ"
+
+#: ../libsvn_wc/entries.c:1837
#, c-format
msgid "No copyfrom URL for '%s'"
msgstr "'%s' 没有 copyfrom URL"
+#: ../libsvn_wc/entries.c:2051
#, c-format
msgid "Bad base MD5 checksum for '%s'; expected: '%s'; found '%s'; "
msgstr "'%s' 的基础的 MD5 校验和错误; 期望 '%s'; å‘现 '%s'; "
+#: ../libsvn_wc/entries.c:2398
#, c-format
msgid "No default entry in directory '%s'"
msgstr "在目录“%sâ€ä¸­æ²¡æœ‰é»˜è®¤å…¥å£"
+#: ../libsvn_wc/entries.c:2554
#, c-format
msgid "Directory '%s' has no THIS_DIR entry"
msgstr "目录“%sâ€æ²¡æœ‰ THIS_DIR å…¥å£"
+#: ../libsvn_wc/entries.c:2735 ../libsvn_wc/node.c:528
#, c-format
msgid "'%s' has an unrecognized node kind"
msgstr "“%sâ€æœ‰æ— æ³•è¯†åˆ«çš„节点ç§ç±»"
+#: ../libsvn_wc/externals.c:154 ../libsvn_wc/externals.c:232
#, c-format
msgid "Error parsing %s property on '%s': '%s'"
msgstr "è§£æž %s 属性于“%sâ€å‡ºé”™: “%sâ€"
+#: ../libsvn_wc/externals.c:202
#, c-format
msgid "Can't split line into components: '%s'"
msgstr "ä¸èƒ½åˆ†å‰²è¡Œåˆ°ç»„件:“%sâ€"
+#: ../libsvn_wc/externals.c:257
#, c-format
-msgid "Invalid %s property on '%s': cannot use two absolute URLs ('%s' and '%s') in an external; one must be a path where an absolute or relative URL is checked out to"
-msgstr "éžæ³•å±žæ€§ “%s†于 “%sâ€: ä¸èƒ½åœ¨å¤–部定义中使用 2 个ç»å¯¹ URL(“%s†和 “%sâ€)ï¼›ç»å¯¹æˆ–相对 URL 必须检出到本地路径"
+msgid ""
+"Invalid %s property on '%s': cannot use two absolute URLs ('%s' and '%s') in "
+"an external; one must be a path where an absolute or relative URL is checked "
+"out to"
+msgstr ""
+"éžæ³•å±žæ€§ “%s†于 “%sâ€: ä¸èƒ½åœ¨å¤–部定义中使用 2 个ç»å¯¹ URL(“%s†和 “%sâ€)ï¼›ç»å¯¹"
+"或相对 URL 必须检出到本地路径"
+#: ../libsvn_wc/externals.c:266 ../libsvn_wc/externals.c:274
#, c-format
-msgid "Invalid %s property on '%s': cannot use a URL '%s' as the target directory for an external definition"
+msgid ""
+"Invalid %s property on '%s': cannot use a URL '%s' as the target directory "
+"for an external definition"
msgstr "éžæ³•å±žæ€§ “%s†于 “%sâ€: 对于外部定义,ä¸èƒ½ä½¿ç”¨ URL \"%s\" 作为目标目录"
+#: ../libsvn_wc/externals.c:316
#, c-format
-msgid "Invalid %s property on '%s': target '%s' is an absolute path or involves '..'"
+msgid ""
+"Invalid %s property on '%s': target '%s' is an absolute path or involves '..'"
msgstr "无效属性 %s ä½äºŽ “%sâ€: 目标 “%sâ€ åŒ…å« â€œ..†或是ç»å¯¹è·¯å¾„"
+#: ../libsvn_wc/externals.c:491 ../libsvn_wc/externals.c:514
#, c-format
msgid "This editor can only update '%s'"
msgstr "此编辑器åªèƒ½æ›´æ–°â€œ%sâ€"
+#: ../libsvn_wc/externals.c:529
#, c-format
msgid "Node '%s' is no existing file external"
msgstr "节点 '%s' 的外部链接ä¸æ˜¯çŽ°å­˜æ–‡ä»¶"
+#: ../libsvn_wc/externals.c:1516
+#, c-format
+msgid "URL '%s' does not begin with a scheme"
+msgstr "URL “%s†没有以方案开始"
+
+#: ../libsvn_wc/externals.c:1571
+#, c-format
+msgid "Illegal parent directory URL '%s'"
+msgstr "éžæ³•çˆ¶ç›®å½• URL “%sâ€"
+
+#: ../libsvn_wc/externals.c:1610
+#, c-format
+msgid "Illegal repository root URL '%s'"
+msgstr "éžæ³•ç‰ˆæœ¬åº“æ ¹ URL “%sâ€"
+
+#: ../libsvn_wc/externals.c:1655
+#, c-format
+msgid "The external relative URL '%s' cannot have backpaths, i.e. '..'"
+msgstr "外部相对 URL “%s†ä¸èƒ½åŒ…å«åŽé€€è·¯å¾„,例如 “..â€"
+
+#: ../libsvn_wc/externals.c:1683
+#, c-format
+msgid "Unrecognized format for the relative external URL '%s'"
+msgstr "外部相对 URL “%s†的格å¼æ— æ³•è¯†åˆ«"
+
+#: ../libsvn_wc/lock.c:529
#, c-format
msgid "Path '%s' ends in '%s', which is unsupported for this operation"
msgstr "路径“%sâ€ä»¥â€œ%sâ€ç»“æŸï¼Œæ­¤æ“作ä¸æ”¯æŒ"
+#: ../libsvn_wc/lock.c:773 ../libsvn_wc/wc_db.c:13640
#, c-format
msgid "Working copy '%s' locked"
msgstr "工作副本“%sâ€å·²ç»é”定"
+#: ../libsvn_wc/lock.c:918
#, c-format
msgid "Unable to check path existence for '%s'"
msgstr "无法检查路径“%sâ€æ˜¯å¦å­˜åœ¨"
+#: ../libsvn_wc/lock.c:941
#, c-format
msgid "Expected '%s' to be a directory but found a file"
msgstr "期望“%sâ€æ˜¯ç›®å½•ï¼Œä½†å®ƒæ˜¯æ–‡ä»¶"
+#: ../libsvn_wc/lock.c:951
#, c-format
msgid "Can't retrieve an access baton for non-directory '%s'"
msgstr "ä¸èƒ½èŽ·å–éžç›®å½•å¯¹è±¡ '%s' 的访问æƒ"
+#: ../libsvn_wc/lock.c:960
#, c-format
msgid "Directory '%s' is missing"
msgstr "目录“%sâ€ä¸¢å¤±"
+#: ../libsvn_wc/lock.c:968
#, c-format
msgid "Working copy '%s' is not locked"
msgstr "工作副本“%sâ€æœªè¢«é”定"
+#: ../libsvn_wc/lock.c:1382
#, c-format
msgid "No write-lock in '%s'"
msgstr "“%sâ€æ²¡æœ‰å†™å…¥é”定"
+#: ../libsvn_wc/lock.c:1496
#, c-format
msgid "Can't obtain lock on non-directory '%s'."
msgstr "ä¸èƒ½èŽ·å–éžç›®å½•å¯¹è±¡ '%s' çš„é”"
-msgid "Conflict callback violated API: returned no results"
-msgstr "冲çªçš„回调函数è¿å API:没有返回结果。"
+#: ../libsvn_wc/merge.c:1281 ../libsvn_wc/props.c:257
+#, c-format
+msgid "Can't merge into conflicted node '%s'"
+msgstr "无法åˆå¹¶åˆ°å·²ç»å†²çªçš„节点“%sâ€"
-msgid "Conflict callback violated API: returned no merged file"
-msgstr "冲çªçš„回调函数è¿å API:没有返回åˆå¹¶æ–‡ä»¶ã€‚"
+#: ../libsvn_wc/merge.c:1324 ../libsvn_wc/props.c:273
+#, c-format
+msgid "The property '%s' may not be merged into '%s'."
+msgstr "属性 “%s†ä¸èƒ½åˆå¹¶åˆ° “%sâ€ã€‚"
+
+#: ../libsvn_wc/node.c:1047
+#, c-format
+msgid "Incomplete copy information on path '%s'."
+msgstr "路径“%sâ€ä¸Šçš„å¤åˆ¶ä¿¡æ¯ä¸å®Œæ•´"
+#: ../libsvn_wc/node.c:1211
#, c-format
msgid "'%s' is not the root of the working copy '%s'"
msgstr "“%sâ€ä¸æ˜¯å·¥ä½œå‰¯æœ¬â€œ%sâ€çš„æ ¹"
+#: ../libsvn_wc/old-and-busted.c:123
msgid "Invalid escape sequence"
msgstr "无效的转义åºåˆ—"
+#: ../libsvn_wc/old-and-busted.c:130
msgid "Invalid escaped character"
msgstr "无效的转义字符"
+#: ../libsvn_wc/old-and-busted.c:148 ../libsvn_wc/old-and-busted.c:177
+#: ../libsvn_wc/old-and-busted.c:241 ../libsvn_wc/old-and-busted.c:253
msgid "Unexpected end of entry"
msgstr "å…¥å£æ„外结æŸ"
+#: ../libsvn_wc/old-and-busted.c:203
#, c-format
msgid "Entry contains non-canonical path '%s'"
msgstr "å…¥å£åŒ…å«ä¸è§„范的路径 “%sâ€"
+#: ../libsvn_wc/old-and-busted.c:275
#, c-format
msgid "Invalid value for field '%s'"
msgstr "“%sâ€åŸŸçš„值无效"
+#: ../libsvn_wc/old-and-busted.c:347
#, c-format
msgid "Found an unexpected \\0 in the file external '%s'"
msgstr "在外部引用的文件 “%s†中,å‘现ä¸æœŸæœ›çš„ \\0"
+#: ../libsvn_wc/old-and-busted.c:391
#, c-format
msgid "Illegal file external revision kind %d for path '%s'"
msgstr "éžæ³•çš„外部引用文件的版本类型 %d,在路径 “%s†中"
+#: ../libsvn_wc/old-and-busted.c:489 ../libsvn_wc/old-and-busted.c:843
#, c-format
msgid "Entry '%s' has invalid node kind"
msgstr "å…¥å£â€œ%sâ€æœ‰æ— æ•ˆçš„节点ç§ç±»"
+#: ../libsvn_wc/old-and-busted.c:510 ../libsvn_wc/old-and-busted.c:823
#, c-format
msgid "Entry for '%s' has invalid repository root"
msgstr "“%sâ€æ¡ç›®çš„版本库根目录无效"
+#: ../libsvn_wc/old-and-busted.c:531 ../libsvn_wc/old-and-busted.c:868
#, c-format
msgid "Entry '%s' has invalid 'schedule' value"
msgstr "å…¥å£ '%s' 有无效 'schedule' 值"
+#: ../libsvn_wc/old-and-busted.c:681
#, c-format
msgid "Entry '%s' has invalid 'depth' value"
msgstr "å…¥å£ '%s' 有无效 'depth' 值"
+#: ../libsvn_wc/old-and-busted.c:732
#, c-format
msgid "Entry '%s' has invalid '%s' value"
msgstr "å…¥å£â€œ%sâ€æœ‰æ— æ•ˆå€¼â€œ%sâ€"
+#: ../libsvn_wc/old-and-busted.c:1081
#, c-format
msgid "XML parser failed in '%s'"
msgstr "XML 解æžå™¨å¤±è´¥äºŽâ€œ%sâ€"
+#: ../libsvn_wc/old-and-busted.c:1137
msgid "Missing default entry"
msgstr "丢失默认æ¡ç›®"
+#: ../libsvn_wc/old-and-busted.c:1142
msgid "Default entry has no revision number"
msgstr "默认æ¡ç›®æ²¡æœ‰ç‰ˆæœ¬å·"
+#: ../libsvn_wc/old-and-busted.c:1147
msgid "Default entry is missing URL"
msgstr "默认æ¡ç›®æ²¡æœ‰URL"
+#: ../libsvn_wc/old-and-busted.c:1226
#, c-format
msgid "Invalid version line in entries file of '%s'"
msgstr "“%sâ€æ–‡ä»¶ä¸­çš„版本行无效"
+#: ../libsvn_wc/old-and-busted.c:1243
msgid "Missing entry terminator"
msgstr "æ¡ç›®ç»ˆç»“符丢失"
+#: ../libsvn_wc/old-and-busted.c:1246
msgid "Invalid entry terminator"
msgstr "无效的æ¡ç›®ç»ˆæ­¢ç¬¦"
+#: ../libsvn_wc/old-and-busted.c:1250
#, c-format
msgid "Error at entry %d in entries file for '%s':"
msgstr "æ¡ç›®æ–‡ä»¶ä¸­çš„æ¡ç›® %d 出错于 “%sâ€"
+#: ../libsvn_wc/props.c:236
#, c-format
msgid "The node '%s' does not have properties in this state."
msgstr "节点 '%s' 没有属性。"
-#, c-format
-msgid "The property '%s' may not be merged into '%s'."
-msgstr "属性 “%s†ä¸èƒ½åˆå¹¶åˆ° “%sâ€ã€‚"
-
+#: ../libsvn_wc/props.c:401
#, c-format
msgid ""
"Trying to add new property '%s'\n"
"but the property already exists.\n"
msgstr "试图增加新属性 “%sâ€ï¼Œä½†æ˜¯å®ƒå·²ç»å­˜åœ¨ã€‚\n"
+#: ../libsvn_wc/props.c:410
#, c-format
msgid ""
"Trying to add new property '%s'\n"
"but the property has been locally deleted.\n"
msgstr "试图增加新属性 “%sâ€ï¼Œä½†æ˜¯å®ƒå·²ç»åœ¨æœ¬åœ°è¢«åˆ é™¤ã€‚\n"
+#: ../libsvn_wc/props.c:424
#, c-format
msgid ""
"Trying to delete property '%s'\n"
"but the property has been locally added.\n"
msgstr "试图删除属性 “%sâ€ï¼Œä½†æ˜¯å®ƒå·²ç»åœ¨æœ¬åœ°è¢«å¢žåŠ ã€‚\n"
+#: ../libsvn_wc/props.c:440
#, c-format
msgid ""
"Trying to delete property '%s'\n"
"but the property has been locally modified.\n"
msgstr "试图删除属性 “%sâ€ï¼Œä½†æ˜¯å®ƒå·²ç»åœ¨æœ¬åœ°è¢«ä¿®æ”¹ã€‚\n"
+#: ../libsvn_wc/props.c:450
#, c-format
msgid ""
"Trying to delete property '%s'\n"
"but the property has been locally deleted and had a different value.\n"
msgstr "试图删除属性 “%sâ€ï¼Œä½†æ˜¯å®ƒå·²ç»åœ¨æœ¬åœ°è¢«ä¿®æ”¹ï¼Œå¹¶ä¸”具有ä¸åŒçš„å–值。\n"
+#: ../libsvn_wc/props.c:462
#, c-format
msgid ""
"Trying to delete property '%s'\n"
"but the local property value is different.\n"
msgstr "试图删除属性 “%sâ€ï¼Œä½†æ˜¯å®ƒçš„本地å–值ä¸åŒã€‚\n"
+#: ../libsvn_wc/props.c:481
#, c-format
msgid ""
"Trying to change property '%s'\n"
"but the local property value conflicts with the incoming change.\n"
msgstr "试图修改属性 “%sâ€ï¼Œä½†æ˜¯å®ƒçš„本地å–值ä¸åŒã€‚\n"
+#: ../libsvn_wc/props.c:489
#, c-format
msgid ""
"Trying to change property '%s'\n"
"but the property has already been locally changed to a different value.\n"
msgstr "试图修改属性 “%sâ€ï¼Œä½†æ˜¯å®ƒçš„本地å–值已ç»æ”¹å˜ã€‚\n"
+#: ../libsvn_wc/props.c:496
#, c-format
msgid ""
"Trying to change property '%s'\n"
"but the property has been locally deleted.\n"
msgstr "试图修改属性 “%sâ€ï¼Œä½†æ˜¯å®ƒå·²ç»åœ¨æœ¬åœ°è¢«åˆ é™¤ã€‚\n"
+#: ../libsvn_wc/props.c:502
#, c-format
msgid ""
"Trying to change property '%s'\n"
"but the property has been locally added with a different value.\n"
msgstr "试图修改属性 “%sâ€ï¼Œä½†æ˜¯å®ƒå·²ç»åœ¨æœ¬åœ°è¢«å¢žåŠ ï¼Œå¹¶ä¸”å–值ä¸åŒã€‚\n"
+#: ../libsvn_wc/props.c:508
#, c-format
msgid ""
"Trying to change property '%s'\n"
"but the property does not exist locally.\n"
msgstr "试图修改属性 “%sâ€ï¼Œä½†æ˜¯å®ƒå¹¶ä¸å­˜åœ¨ã€‚\n"
+#: ../libsvn_wc/props.c:612
msgid "<<<<<<< (local property value)"
msgstr "<<<<<<< (本地属性值)"
+#: ../libsvn_wc/props.c:613
msgid ">>>>>>> (incoming property value)"
msgstr ">>>>>>> (æœåŠ¡å™¨ç«¯å±žæ€§å€¼)"
+#: ../libsvn_wc/props.c:648
msgid "Local property value:\n"
msgstr "本地属性å–值:\n"
+#: ../libsvn_wc/props.c:650 ../libsvn_wc/props.c:661
msgid "Cannot display: property value is binary data\n"
msgstr "无法显示: 属性å–值为二进制数æ®\n"
+#: ../libsvn_wc/props.c:659
msgid "Incoming property value:\n"
msgstr "外部属性å–值:\n"
-msgid "Conflict callback violated API: returned no results."
-msgstr "冲çªçš„回调函数è¿å API:没有返回结果。"
-
-msgid "Conflict callback violated API: returned no merged file."
-msgstr "冲çªçš„回调函数è¿å API:没有返回åˆå¹¶æ–‡ä»¶ã€‚"
-
+#: ../libsvn_wc/props.c:1475 ../libsvn_wc/props.c:1884
+#: ../libsvn_wc/props.c:1985
#, c-format
msgid "Property '%s' is an entry property"
msgstr "属性 “%s†是æ¡ç›®å±žæ€§"
+#: ../libsvn_wc/props.c:1512 ../libsvn_wc/props.c:1519
msgid "Failed to load properties"
msgstr "加载属性失败"
+#: ../libsvn_wc/props.c:1555
#, c-format
msgid "Cannot set '%s' on a directory ('%s')"
msgstr "无法设定“%sâ€äºŽç›®å½• (“%sâ€)"
+#: ../libsvn_wc/props.c:1562
#, c-format
msgid "Cannot set '%s' on a file ('%s')"
msgstr "无法设定“%sâ€äºŽæ–‡ä»¶ (“%sâ€)"
+#: ../libsvn_wc/props.c:1641
#, c-format
-msgid "'%s' is not a file or directory"
-msgstr "“%sâ€ä¸æ˜¯æ–‡ä»¶æˆ–目录"
+msgid "Can't set '%s': file '%s' has binary mime type property"
+msgstr "ä¸èƒ½è®¾ç½®â€œ%sâ€: 文件“%sâ€æœ‰äºŒè¿›åˆ¶çš„ mime 类型属性"
-#, c-format
-msgid "File '%s' has binary mime type property"
-msgstr "文件“%sâ€æœ‰äºŒè¿›åˆ¶çš„ mime 类型属性"
+#: ../libsvn_wc/props.c:1686
+msgid "Failed to load current properties"
+msgstr "加载当å‰å±žæ€§å¤±è´¥"
+#: ../libsvn_wc/props.c:1906
#, c-format
msgid "Can't set properties on '%s': invalid status for updating properties."
msgstr "ä¸èƒ½å¯¹ '%s' 设置属性: 对于更新属性,状æ€éžæ³•ã€‚"
-msgid "Failed to load current properties"
-msgstr "加载当å‰å±žæ€§å¤±è´¥"
+#: ../libsvn_wc/props.c:1990
+#, c-format
+msgid "Property '%s' is a WC property, not a regular property"
+msgstr "“%sâ€æ˜¯å·¥ä½œå‰¯æœ¬å±žæ€§ï¼Œä¸æ˜¯å¸¸è§„属性"
+#: ../libsvn_wc/props.c:2084
#, c-format
msgid "Unrecognized line ending style '%s' for '%s'"
msgstr "无法识别的行结æŸæ ·å¼â€œ%sâ€ï¼Œå¯¹äºŽâ€œ%sâ€"
+#. scratch_
+#: ../libsvn_wc/props.c:2135
+#, c-format
+msgid " (%d more duplicate targets found)"
+msgstr " (å‘现了 %d 个或更多地é‡å¤ç›®æ ‡)"
+
+#: ../libsvn_wc/props.c:2140
+#, c-format
+msgid "Invalid %s property on '%s': target '%s' appears more than once%s"
+msgstr "无效属性 %s 于“%sâ€: 目标“%sâ€å‡ºçŽ°å¤šæ¬¡%s"
+
+#: ../libsvn_wc/props.c:2171
#, c-format
msgid "Cannot set non-inheritable mergeinfo on a non-directory ('%s')"
msgstr "无法在éžç›®å½•å¯¹è±¡(“%sâ€)设定ä¸å¯ç»§æ‰¿çš„åˆå¹¶ä¿¡æ¯"
+#: ../libsvn_wc/relocate.c:111
#, c-format
msgid "Cannot relocate '%s' as it is not the root of a working copy"
msgstr "ä¸èƒ½é‡æ–°å®šä½ '%s',因为它ä¸æ˜¯å·¥ä½œå‰¯æœ¬æ ¹ç›®å½•"
+#: ../libsvn_wc/relocate.c:118
#, c-format
-msgid "Cannot relocate '%s' as it is not the root of a working copy; try relocating '%s' instead"
+msgid ""
+"Cannot relocate '%s' as it is not the root of a working copy; try relocating "
+"'%s' instead"
msgstr "ä¸èƒ½é‡æ–°å®šä½ '%s',因为它ä¸æ˜¯å·¥ä½œå‰¯æœ¬æ ¹ç›®å½•ï¼›è¯·é‡æ–°å®šä½ '%s'"
+#: ../libsvn_wc/relocate.c:136
msgid "Cannot relocate a single file"
msgstr "无法é‡æ–°å®šä½å•ä¸ªæ–‡ä»¶"
+#: ../libsvn_wc/relocate.c:144
#, c-format
msgid "Invalid source URL prefix: '%s' (does not overlap target's URL '%s')"
msgstr "éžæ³•æº URL å‰ç¼€: '%s' (ä¸ä¸Žç›®æ ‡çš„ URL '%s' 交å )"
+#: ../libsvn_wc/relocate.c:154
#, c-format
msgid "Invalid relocation destination: '%s' (not a URL)"
msgstr "éžæ³•è¿ç§»ç›®æ ‡: '%s' (ä¸æ˜¯ URL)"
+#: ../libsvn_wc/relocate.c:161
#, c-format
msgid "Invalid relocation destination: '%s' (does not point to target)"
msgstr "éžæ³•è¿ç§»ç›®æ ‡: '%s' (没有指å‘目标)"
+#: ../libsvn_wc/tree_conflicts.c:136
msgid "Unknown enumeration value in tree conflict description"
msgstr "树冲çªæ述中有未知的枚举值"
+#: ../libsvn_wc/tree_conflicts.c:160
msgid "Invalid version info in tree conflict description"
msgstr "树冲çªæ述中有éžæ³•çš„版本信æ¯"
+#: ../libsvn_wc/tree_conflicts.c:218
#, c-format
msgid "Invalid conflict info '%s' in tree conflict description"
msgstr "树冲çªæ述中有éžæ³•çš„冲çªä¿¡æ¯ '%s'"
+#: ../libsvn_wc/tree_conflicts.c:229
msgid "Empty 'victim' field in tree conflict description"
msgstr "树冲çªæ述中的 “victim†域为空"
+#: ../libsvn_wc/tree_conflicts.c:237
msgid "Invalid 'node_kind' field in tree conflict description"
msgstr "树冲çªæ述中有éžæ³•çš„ “node_kind†域"
+#: ../libsvn_wc/tree_conflicts.c:430
#, c-format
msgid "Attempt to add tree conflict that already exists at '%s'"
msgstr "试图增加已ç»ä½äºŽâ€œ%sâ€çš„树冲çª"
+#: ../libsvn_wc/update_editor.c:998
#, c-format
msgid ""
"Checksum mismatch while updating '%s':\n"
@@ -5451,25 +7692,47 @@ msgstr ""
" 期望: %s\n"
" 实际: %s\n"
+#: ../libsvn_wc/update_editor.c:1129
#, c-format
-msgid "Path '%s' is not in the working copy"
-msgstr "路径 “%s†ä¸åœ¨å·¥ä½œå‰¯æœ¬ä¸­"
+msgid "'%s' is not valid as filename in directory '%s'"
+msgstr "“%sâ€ä¸æ˜¯åˆæ³•æ–‡ä»¶å称于目录“%sâ€ä¸­"
+#: ../libsvn_wc/update_editor.c:1606
#, c-format
-msgid "Failed to add directory '%s': object of the same name as the administrative directory"
+msgid "Unexpected attempt to add a node at path '%s'"
+msgstr "æ„外的试图在路径“%sâ€å¢žåŠ èŠ‚点"
+
+#: ../libsvn_wc/update_editor.c:1617
+#, c-format
+msgid "Unexpected attempt to edit, delete, or replace a node at path '%s'"
+msgstr "æ„外的试图在路径“%sâ€ç¼–辑,删除或替æ¢èŠ‚点"
+
+#: ../libsvn_wc/update_editor.c:2019
+#, c-format
+msgid ""
+"Failed to add directory '%s': object of the same name as the administrative "
+"directory"
msgstr "无法增加目录“%sâ€: 对象与管ç†ç›®å½•åŒå"
+#: ../libsvn_wc/update_editor.c:2667
msgid "Couldn't do property merge"
msgstr "无法进行属性åˆå¹¶"
+#: ../libsvn_wc/update_editor.c:3023
#, c-format
-msgid "Failed to mark '%s' absent: item of the same name is already scheduled for addition"
+msgid ""
+"Failed to mark '%s' absent: item of the same name is already scheduled for "
+"addition"
msgstr "无法将“%sâ€æ ‡è®°ä¸ºä¸å­˜åœ¨: åŒå项目已加入增加调度"
+#: ../libsvn_wc/update_editor.c:3111
#, c-format
-msgid "Failed to add file '%s': object of the same name as the administrative directory"
+msgid ""
+"Failed to add file '%s': object of the same name as the administrative "
+"directory"
msgstr "无法增加文件“%sâ€: 对象与管ç†ç›®å½•åŒå"
+#: ../libsvn_wc/update_editor.c:3623
#, c-format
msgid ""
"Checksum mismatch for '%s':\n"
@@ -5480,216 +7743,378 @@ msgstr ""
" 期望: %s\n"
" 记录: %s\n"
+#: ../libsvn_wc/update_editor.c:5181
#, c-format
msgid "Node '%s' exists."
msgstr "节点“%sâ€å·²å­˜åœ¨"
+#: ../libsvn_wc/update_editor.c:5241
#, c-format
msgid "Copyfrom-url '%s' has different repository root than '%s'"
msgstr "Copyfrom-url“%sâ€ä¸Žâ€œ%sâ€çš„版本库根目录ä¸ç›¸åŒ"
+#: ../libsvn_wc/update_editor.c:5439
+#, c-format
+msgid "'%s' is not an unmodified copied directory"
+msgstr "“%sâ€ä¸æ˜¯æœªä¿®æ”¹çš„å¤åˆ¶ç›®å½•"
+
+#: ../libsvn_wc/update_editor.c:5450
+#, c-format
+msgid "Copyfrom '%s' doesn't match original location of '%s'"
+msgstr "Copyfrom“%sâ€ä¸Žâ€œ%sâ€çš„原始ä½ç½®ä¸åŒ¹é…"
+
+#: ../libsvn_wc/upgrade.c:255
#, c-format
msgid "Missing end of line in wcprops file for '%s'"
-msgstr "wcprops文件“%sâ€ä¸¢å¤±äº†è¡Œç»“æŸç¬¦"
+msgstr "“%sâ€çš„工作副本属性文件丢失了行结æŸç¬¦"
+#: ../libsvn_wc/upgrade.c:631
#, c-format
-msgid "Working copy '%s' can't be upgraded because the repository root is not available and can't be retrieved"
+msgid ""
+"Working copy '%s' can't be upgraded because the repository root is not "
+"available and can't be retrieved"
msgstr "由于版本库的根ä¸å¯ç”¨ï¼Œå¹¶ä¸”ä¸èƒ½æ‰¾å›žï¼Œæ‰€ä»¥å·¥ä½œå‰¯æœ¬â€œ%sâ€ä¸èƒ½è¢«å‡çº§"
+#: ../libsvn_wc/upgrade.c:638
#, c-format
-msgid "Working copy '%s' can't be upgraded because the repository uuid is not available and can't be retrieved"
+msgid ""
+"Working copy '%s' can't be upgraded because the repository uuid is not "
+"available and can't be retrieved"
msgstr "由于版本库的 UUID ä¸å¯ç”¨ï¼Œå¹¶ä¸”ä¸èƒ½æ‰¾å›žï¼Œæ‰€ä»¥å·¥ä½œå‰¯æœ¬â€œ%sâ€ä¸èƒ½è¢«å‡çº§"
+#: ../libsvn_wc/upgrade.c:645
#, c-format
msgid "Working copy '%s' can't be upgraded because it doesn't have a url"
msgstr "由于没有 URL,所以工作副本“%sâ€ä¸èƒ½è¢«å‡çº§"
+#: ../libsvn_wc/upgrade.c:690
msgid "Error parsing tree conflict skel"
msgstr "解æžæ ‘冲çªéª¨æž¶å‡ºé”™"
+#: ../libsvn_wc/upgrade.c:1173
#, c-format
-msgid "The working copy at '%s' is format 22 with WORKING nodes; use a format 22 client to diff/revert before using this client"
-msgstr "ä½äºŽ '%s' 的工作副本是有 WORKING èŠ‚ç‚¹çš„æ ¼å¼ 22;请先使用支æŒæ ¼å¼ 22 的客户端比较/还原åŽï¼Œå†ä½¿ç”¨æ­¤å®¢æˆ·ç«¯"
+msgid ""
+"The working copy at '%s' is format 22 with WORKING nodes; use a format 22 "
+"client to diff/revert before using this client"
+msgstr ""
+"ä½äºŽ '%s' 的工作副本是有 WORKING èŠ‚ç‚¹çš„æ ¼å¼ 22;请先使用支æŒæ ¼å¼ 22 的客户端"
+"比较/还原åŽï¼Œå†ä½¿ç”¨æ­¤å®¢æˆ·ç«¯"
+#: ../libsvn_wc/upgrade.c:1217
#, c-format
-msgid "The working copy at '%s' is format 26 with conflicts; use a format 26 client to resolve before using this client"
-msgstr "ä½äºŽ '%s' 的工作副本是有冲çªçš„æ ¼å¼ 26;请先使用支æŒæ ¼å¼ 26 的客户端解决冲çªåŽï¼Œå†ä½¿ç”¨æ­¤å®¢æˆ·ç«¯"
+msgid ""
+"The working copy at '%s' is format 26 with conflicts; use a format 26 client "
+"to resolve before using this client"
+msgstr ""
+"ä½äºŽ '%s' 的工作副本是有冲çªçš„æ ¼å¼ 26;请先使用支æŒæ ¼å¼ 26 的客户端解决冲çª"
+"åŽï¼Œå†ä½¿ç”¨æ­¤å®¢æˆ·ç«¯"
-msgid "Cannot upgrade with existing logs; run a cleanup operation on this working copy using a client version which is compatible with this working copy's format (such as the version you are upgrading from), then retry the upgrade with the current version"
-msgstr "ä¸èƒ½åœ¨æœ‰æ—¥å¿—文件时å‡çº§ï¼›è¯·å…ˆä½¿ç”¨ä¸Žæ­¤å·¥ä½œå‰¯æœ¬æ ¼å¼å…¼å®¹çš„客户端(例如生æˆæ­¤å·¥ä½œå‰¯æœ¬çš„客户端)执行清ç†æ“作,å†å‡çº§"
+#: ../libsvn_wc/upgrade.c:1723
+msgid ""
+"Cannot upgrade with existing logs; run a cleanup operation on this working "
+"copy using a client version which is compatible with this working copy's "
+"format (such as the version you are upgrading from), then retry the upgrade "
+"with the current version"
+msgstr ""
+"ä¸èƒ½åœ¨æœ‰æ—¥å¿—文件时å‡çº§ï¼›è¯·å…ˆä½¿ç”¨ä¸Žæ­¤å·¥ä½œå‰¯æœ¬æ ¼å¼å…¼å®¹çš„客户端(例如生æˆæ­¤å·¥ä½œå‰¯"
+"本的客户端)执行清ç†æ“作,å†å‡çº§"
-msgid "This working copy is corrupt and cannot be upgraded. Please check out a new working copy."
+#: ../libsvn_wc/upgrade.c:1792
+msgid ""
+"This working copy is corrupt and cannot be upgraded. Please check out a new "
+"working copy."
msgstr "此工作副本æŸå,ä¸èƒ½å‡çº§ã€‚请é‡æ–°æ£€å‡ºã€‚"
+#: ../libsvn_wc/upgrade.c:1837
msgid "(unreleased development version)"
msgstr "(未å‘布的开å‘版本)"
+#: ../libsvn_wc/upgrade.c:1853
#, c-format
msgid "Working copy '%s' is too old (format %d, created by Subversion %s)"
msgstr "工作副本 '%s' æ ¼å¼å¤ªæ—§ (æ ¼å¼ %d, Subversion %s 创建)"
+#: ../libsvn_wc/upgrade.c:1863
#, c-format
-msgid "Working copy '%s' is an old development version (format %d); to upgrade it, use a format 18 client, then use 'tools/dev/wc-ng/bump-to-19.py', then use the current client"
-msgstr "工作副本 '%s' 是旧开å‘版本的格å¼(%d); è¯·ä½¿ç”¨æ ¼å¼ 18 客户端清ç†åŽï¼Œ å†ä½¿ç”¨ 'tools/dev/wc-ng/bump-to-19.py' å‡çº§ï¼Œæœ€åŽä½¿ç”¨å½“å‰å®¢æˆ·ç«¯"
+msgid ""
+"Working copy '%s' is an old development version (format %d); to upgrade it, "
+"use a format 18 client, then use 'tools/dev/wc-ng/bump-to-19.py', then use "
+"the current client"
+msgstr ""
+"工作副本 '%s' 是旧开å‘版本的格å¼(%d); è¯·ä½¿ç”¨æ ¼å¼ 18 客户端清ç†åŽï¼Œ å†ä½¿ç”¨ "
+"'tools/dev/wc-ng/bump-to-19.py' å‡çº§ï¼Œæœ€åŽä½¿ç”¨å½“å‰å®¢æˆ·ç«¯"
+#: ../libsvn_wc/upgrade.c:2088
#, c-format
-msgid "Can't upgrade '%s' as it is not a pre-1.7 working copy directory"
-msgstr "ä¸èƒ½å‡çº§ '%s',因为它ä¸æ˜¯ 1.7 之å‰çš„工作副本目录"
+msgid "Can't upgrade '%s' as it is not a working copy"
+msgstr "ä¸èƒ½å‡çº§â€œ%sâ€ï¼Œå› ä¸ºå®ƒä¸æ˜¯å·¥ä½œå‰¯æœ¬ç›®å½•"
+#: ../libsvn_wc/upgrade.c:2137
#, c-format
-msgid "Can't upgrade '%s' as it is not a pre-1.7 working copy root, the root is '%s'"
-msgstr "ä¸èƒ½å‡çº§ '%s',因为它ä¸æ˜¯ 1.7 之å‰çš„工作副本根目录,根目录是 '%s'"
+msgid "Can't upgrade '%s' as it is not a working copy root, the root is '%s'"
+msgstr "ä¸èƒ½å‡çº§â€œ%sâ€ï¼Œå› ä¸ºå®ƒä¸æ˜¯å·¥ä½œå‰¯æœ¬æ ¹ç›®å½•ï¼Œæ ¹ç›®å½•æ˜¯ '%s'"
+#: ../libsvn_wc/wc_db.c:452
#, c-format
msgid "No REPOSITORY table entry for id '%ld'"
msgstr "对于标识 '%ld' 没有 REPOSITORY 表入å£"
+#: ../libsvn_wc/wc_db.c:718
#, c-format
msgid "The file '%s' has no checksum."
msgstr "文件 '%s' 没有校验和。"
-#, c-format
-msgid "The node '%s' is not in a workingcopy."
-msgstr "节点 “%s†ä¸åœ¨å·¥ä½œå‰¯æœ¬ä¸­"
-
+#: ../libsvn_wc/wc_db.c:2456 ../libsvn_wc/wc_db.c:2837
+#: ../libsvn_wc/wc_db.c:8878
#, c-format
msgid "The node '%s' has a corrupt checksum value."
msgstr "节点 '%s' 的校验和æŸå。"
+#: ../libsvn_wc/wc_db.c:2641
#, c-format
-msgid "The node '%s' is not an external."
-msgstr "节点 “%s†ä¸æ˜¯å¤–部对象"
+msgid "The node '%s' has a BASE status that has no properties."
+msgstr ""
+#: ../libsvn_wc/wc_db.c:3467
#, c-format
-msgid "Cannot handle status of '%s'"
-msgstr "ä¸èƒ½å¤„ç†â€œ%sâ€çš„状æ€"
+msgid "The node '%s' is not an external."
+msgstr "节点 “%s†ä¸æ˜¯å¤–部对象"
+#: ../libsvn_wc/wc_db.c:3874
#, c-format
-msgid "Can't store properties for '%s' in '%s'."
-msgstr "ä¸èƒ½å­˜å‚¨ '%s' 的属性,在 '%s' 中。"
+msgid "Expected node '%s' to be deleted."
+msgstr "期望节点“%sâ€è¢«åˆ é™¤ã€‚"
+#: ../libsvn_wc/wc_db.c:6355 ../libsvn_wc/wc_db.c:6433
#, c-format
msgid "Can't revert '%s' without reverting children"
msgstr "ä¸èƒ½æ¢å¤ '%s',而ä¸æ¢å¤å­©å­ã€‚"
+#: ../libsvn_wc/wc_db.c:6530
#, c-format
msgid "Can't revert '%s' without reverting parent"
msgstr "ä¸èƒ½æ¢å¤ '%s',而ä¸æ¢å¤çˆ¶äº²ã€‚"
+#: ../libsvn_wc/wc_db.c:6647
#, c-format
msgid "Unsupported depth for revert of '%s'"
msgstr "对于æ¢å¤ '%s',其深度ä¸å—支æŒ"
+#: ../libsvn_wc/wc_db.c:7490
#, c-format
msgid "Cannot delete '%s' as '%s' is excluded by server"
msgstr "ä¸èƒ½åˆ é™¤ '%s',因为 '%s' 被æœåŠ¡å™¨æŽ’除"
+#: ../libsvn_wc/wc_db.c:7501
+#, c-format
+msgid "Cannot delete '%s' as it is excluded by server"
+msgstr "ä¸èƒ½åˆ é™¤ '%s',因为它被æœåŠ¡å™¨æŽ’除"
+
+#: ../libsvn_wc/wc_db.c:7508
+#, c-format
+msgid "Cannot delete '%s' as it is excluded"
+msgstr "ä¸èƒ½åˆ é™¤ '%s',因为它被排除"
+
+#: ../libsvn_wc/wc_db.c:7922
+#, c-format
+msgid "Cannot move '%s' to '%s' because they are not in the same working copy"
+msgstr "ä¸èƒ½ç§»åŠ¨ '%s' 到 '%s',因为它们ä¸æ˜¯åŒä¸€å·¥ä½œå‰¯æœ¬"
+
+#: ../libsvn_wc/wc_db.c:8280
#, c-format
msgid "Corrupt data for '%s'"
msgstr "'%s' çš„æ•°æ®æŸå"
+#: ../libsvn_wc/wc_db.c:8584
#, c-format
-msgid "The node '%s' comes from unexpected repository '%s', expected '%s'; if this node is a file external using the correct URL in the external definition can fix the problem, see issue #4087"
-msgstr "节点“%sâ€æ¥è‡ªä¸æœŸæœ›çš„版本库“%sâ€ï¼ŒæœŸæœ›çš„版本库是“%sâ€ï¼›å¦‚果此节点是文件外部引用,那么在外部定义中使用正确的 URL å¯ä»¥ä¿®æ­£è¿™ä¸ªé—®é¢˜ï¼Œè¯·å‚è§é—®é¢˜ #4087 以获得详细信æ¯"
+msgid ""
+"The node '%s' comes from unexpected repository '%s', expected '%s'; if this "
+"node is a file external using the correct URL in the external definition can "
+"fix the problem, see issue #4087"
+msgstr ""
+"节点“%sâ€æ¥è‡ªä¸æœŸæœ›çš„版本库“%sâ€ï¼ŒæœŸæœ›çš„版本库是“%sâ€ï¼›å¦‚果此节点是文件外部引"
+"用,那么在外部定义中使用正确的 URL å¯ä»¥ä¿®æ­£è¿™ä¸ªé—®é¢˜ï¼Œè¯·å‚è§é—®é¢˜ #4087 以获得"
+"详细信æ¯"
+#: ../libsvn_wc/wc_db.c:9003
#, c-format
msgid "The node '%s' is not in working copy '%s'"
msgstr "节点“%sâ€ä¸åœ¨å·¥ä½œå‰¯æœ¬â€œ%sâ€ä¸­"
+#: ../libsvn_wc/wc_db.c:9040
#, c-format
msgid "The node '%s' is not installable"
msgstr "节点 '%s' ä¸å¯å®‰è£…"
+#: ../libsvn_wc/wc_db.c:9469 ../libsvn_wc/wc_db.c:9728
+#, c-format
+msgid "The node '%s' has a status that has no properties."
+msgstr "节点 '%s' 有状æ€ï¼Œæ²¡æœ‰å±žæ€§ã€‚"
+
+#: ../libsvn_wc/wc_db.c:11568
#, c-format
msgid "Expected node '%s' to be added."
msgstr "期望节点“%sâ€è¢«å¢žåŠ ã€‚"
+#: ../libsvn_wc/wc_db.c:11914
#, c-format
-msgid "Expected node '%s' to be deleted."
-msgstr "期望节点“%sâ€è¢«åˆ é™¤ã€‚"
+msgid "Path '%s' was not moved here"
+msgstr "路径“%sâ€ä¸æ˜¯ç§»åˆ°è¿™é‡Œ"
+#: ../libsvn_wc/wc_db.c:11983
#, c-format
-msgid "The properties of '%s' are in an indeterminate state and cannot be upgraded. See issue #2530."
+msgid "The base node '%s' was not found."
+msgstr "找ä¸åˆ°åŸºç¡€èŠ‚点 '%s'。"
+
+#: ../libsvn_wc/wc_db.c:12415
+#, c-format
+msgid ""
+"The properties of '%s' are in an indeterminate state and cannot be upgraded. "
+"See issue #2530."
msgstr "'%s' 的属性处于ä¸ç¡®å®šçš„状æ€ï¼Œä¸èƒ½æ›´æ–°ã€‚详情å‚è§é—®é¢˜ #2530。"
+#: ../libsvn_wc/wc_db.c:12427
#, c-format
msgid "Insufficient NODES rows for '%s'"
msgstr "'%s' 的节点行数ä¸è¶³"
+#: ../libsvn_wc/wc_db.c:12574
#, c-format
msgid "Repository '%s' not found in the database"
msgstr "在数æ®åº“中找ä¸åˆ°ç‰ˆæœ¬åº““%sâ€"
+#: ../libsvn_wc/wc_db.c:13561 ../libsvn_wc/wc_db.c:13609
#, c-format
msgid "'%s' is already locked."
msgstr "'%s' å·²ç»é”定。"
+#: ../libsvn_wc/wc_db.c:13566 ../libsvn_wc/wc_db.c:13617
#, c-format
msgid "Working copy '%s' locked."
msgstr "工作副本 '%s' å·²ç»é”定。"
+#: ../libsvn_wc/wc_db.c:13689
#, c-format
msgid "'%s' is already locked via '%s'."
msgstr "'%s' å·²ç»é€šè¿‡ '%s' é”定。"
+#: ../libsvn_wc/wc_db.c:13863
#, c-format
msgid "Working copy not locked at '%s'."
msgstr "工作副本 '%s' 未被é”定。"
+#: ../libsvn_wc/wc_db.c:14246
#, c-format
msgid "Modification of '%s' already exists"
msgstr "“%s†的修改已存在"
-#, c-format
-msgid "Invalid conflict file '%s' for '%s'"
-msgstr "éžæ³•çš„冲çªæ–‡ä»¶â€œ%sâ€äºŽâ€œ%sâ€"
-
-#, c-format
-msgid "Invalid property reject file '%s' for '%s'"
-msgstr "éžæ³•çš„属性拒ç»æ–‡ä»¶â€œ%sâ€äºŽâ€œ%sâ€"
-
#. If EXPRESSION is false, cause the caller to return an SVN_ERR_WC_CORRUPT
#. * error, showing EXPRESSION and the caller's LOCAL_RELPATH in the message.
+#: ../libsvn_wc/wc_db.c:14888
#, c-format
msgid "database inconsistency at local_relpath='%s' verifying expression '%s'"
msgstr "æ•°æ®åº“ä¸ä¸€è‡´ï¼Œè·¯å¾„是“%sâ€ï¼Œæ ¡éªŒè¡¨è¾¾å¼æ˜¯â€œ%sâ€"
+#: ../libsvn_wc/wc_db.c:15012
+#, c-format
+msgid "Can't upgrade '%s' as it is not a working copy root"
+msgstr "ä¸èƒ½å‡çº§ '%s',因为它ä¸æ˜¯å·¥ä½œå‰¯æœ¬ç›®å½•"
+
+#: ../libsvn_wc/wc_db.c:15018
#, c-format
-msgid "Pristine text not found"
-msgstr "找ä¸åˆ°åŽŸå§‹å†…容"
+msgid ""
+"Working copy '%s' is too old and must be upgraded to at least format %d, as "
+"created by Subversion %s"
+msgstr "工作副本 '%s' æ ¼å¼å¤ªæ—§ï¼Œå¿…须至少å‡çº§åˆ°æ ¼å¼ %d, 被 Subversion %s 创建"
+
+#: ../libsvn_wc/wc_db.c:15036
+msgid "Working copy upgrade failed"
+msgstr "工作副本å‡çº§å¤±è´¥"
+
+#: ../libsvn_wc/wc_db_pristine.c:125 ../libsvn_wc/wc_db_pristine.c:457
+#, c-format
+msgid "The pristine text with checksum '%s' was not found"
+msgstr "找ä¸åˆ°æ ¡éªŒå’Œä¸ºâ€œ%sâ€çš„原始内容"
+#: ../libsvn_wc/wc_db_pristine.c:191
#, c-format
msgid "Pristine text '%s' not present"
msgstr "原始内容 “%s†ä¸å­˜åœ¨"
+#: ../libsvn_wc/wc_db_pristine.c:224
#, c-format
msgid "Can't read '%s' from pristine store because no checksum supplied"
msgstr "没有æ供校验和,因此ä¸èƒ½ä»ŽåŽŸå§‹å†…å®¹ä»“åº“ä¸­è¯»å– '%s'"
+#: ../libsvn_wc/wc_db_pristine.c:328
#, c-format
msgid "New pristine text '%s' has different size: %ld versus %ld"
msgstr "新原始内容 '%s' 有ä¸åŒçš„大å°: %ld 与 %ld"
-#, c-format
-msgid "The pristine text with checksum '%s' was not found"
-msgstr "找ä¸åˆ°æ ¡éªŒå’Œä¸ºâ€œ%sâ€çš„原始内容"
-
+#: ../libsvn_wc/wc_db_pristine.c:496
#, c-format
msgid "The pristine text with MD5 checksum '%s' was not found"
msgstr "找ä¸åˆ° MD5 校验和为“%sâ€çš„原始内容"
+#: ../libsvn_wc/wc_db_update_move.c:282 ../libsvn_wc/wc_db_update_move.c:306
+#, c-format
+msgid "'%s' already in conflict"
+msgstr "“%s†已在冲çªä¸­"
+
+#: ../libsvn_wc/wc_db_update_move.c:1382
#, c-format
-msgid "The pristine text with checksum '%s' was found in the DB but not on disk"
-msgstr "在数æ®åº“中找到了校验和为“%sâ€çš„原始内容,但是它ä¸åœ¨ç£ç›˜ä¸Š"
+msgid "'%s' is not in conflict"
+msgstr "“%sâ€ä¸åœ¨å†²çªä¸­"
+#: ../libsvn_wc/wc_db_update_move.c:1395
+#, c-format
+msgid "'%s' is not a tree-conflict victim"
+msgstr "'%s' ä¸æ˜¯æ ‘冲çªç‰ºç‰²å“"
+
+#: ../libsvn_wc/wc_db_update_move.c:1754
+#, c-format
+msgid "Cannot auto-resolve tree-conflict on '%s'"
+msgstr "ä¸èƒ½åœ¨â€œ%sâ€è‡ªåŠ¨è§£å†³æ ‘冲çª"
+
+#: ../libsvn_wc/wc_db_update_move.c:1817
+#, c-format
+msgid ""
+"Cannot apply update because move source %s' is a mixed-revision working copy"
+msgstr ""
+
+#: ../libsvn_wc/wc_db_update_move.c:1828
+#, c-format
+msgid "Cannot apply update because move source '%s' is a switched subtree"
+msgstr ""
+
+#: ../libsvn_wc/wc_db_update_move.c:1879
+#, c-format
+msgid "The node '%s' has not been moved away"
+msgstr "节点“%sâ€æ²¡æœ‰è¢«ç§»èµ°"
+
+#: ../libsvn_wc/wc_db_update_move.c:1908
+#, c-format
+msgid "'%s' is not deleted"
+msgstr "“%sâ€æ²¡æœ‰è¢«åˆ é™¤"
+
+#: ../libsvn_wc/wc_db_util.c:69
#, c-format
msgid "Missing a row in WCROOT."
msgstr "WCROOT 中丢失了一行。"
+#: ../libsvn_wc/wc_db_util.c:135
#, c-format
-msgid "Working copy format of '%s' is too old (%d); please check out your working copy again"
+msgid "Working copy database '%s' not found"
+msgstr "找ä¸åˆ°å·¥ä½œå‰¯æœ¬æ•°æ®åº““%sâ€"
+
+#: ../libsvn_wc/wc_db_wcroot.c:276
+#, c-format
+msgid ""
+"Working copy format of '%s' is too old (%d); please check out your working "
+"copy again"
msgstr "“%sâ€çš„工作副本格å¼å¤ªæ—§(%d);请é‡æ–°å–出工作副本"
+#: ../libsvn_wc/wc_db_wcroot.c:286
#, c-format
msgid ""
"This client is too old to work with the working copy at\n"
@@ -5702,257 +8127,667 @@ msgstr ""
" http://subversion.apache.org/faq.html#working-copy-format-change\n"
"以获得更详细的信æ¯ã€‚\n"
+#: ../libsvn_wc/wc_db_wcroot.c:307
msgid "Cleanup with an older 1.7 client before upgrading with this client"
msgstr "请在用此客户端å‡çº§ä¹‹å‰ï¼Œç”¨æ—§çš„ 1.7 客户端清ç†"
+#: ../libsvn_wc/wc_db_wcroot.c:318
+#, c-format
+msgid ""
+"The working copy at '%s'\n"
+"is too old (format %d) to work with client version '%s' (expects format %d). "
+"You need to upgrade the working copy first.\n"
+msgstr ""
+
+#: ../libsvn_wc/wc_db_wcroot.c:396
+#, c-format
+msgid "The symlink at '%s' points nowhere"
+msgstr "ä½äºŽâ€œ%sâ€çš„符å·è¿žæŽ¥æ²¡æœ‰æŒ‡å‘任何地方"
+
+#: ../libsvn_wc/wc_db_wcroot.c:661
#, c-format
msgid "Missing a row in WCROOT for '%s'."
msgstr "WCROOT 中的 '%s' 丢失了一行。"
+#: ../libsvn_wc/wc_db_wcroot.c:709
+#, c-format
+msgid "The working copy at '%s' is corrupt."
+msgstr "ä½äºŽâ€œ%sâ€çš„工作副本已æŸå。"
+
+#: ../libsvn_wc/wc_db_wcroot.c:725
+#, c-format
+msgid "The working copy database at '%s' is missing."
+msgstr "ä½äºŽâ€œ%sâ€çš„工作副本数æ®åº“丢失。"
+
+#: ../libsvn_wc/wc_db_wcroot.c:734
+#, c-format
+msgid "The working copy database at '%s' is corrupt."
+msgstr "ä½äºŽâ€œ%sâ€çš„工作副本数æ®åº“æŸå。"
+
+#: ../libsvn_wc/wc_db_wcroot.c:881
#, c-format
msgid "'%s' is not a working copy root"
msgstr "'%s' ä¸æ˜¯å·¥ä½œå‰¯æœ¬æ ¹ç›®å½•"
+#: ../libsvn_wc/workqueue.c:517
#, c-format
-msgid "Can't install '%s' from pristine store, because no checksum is recorded for this file"
+msgid ""
+"Can't install '%s' from pristine store, because no checksum is recorded for "
+"this file"
msgstr "文件 '%s' 没有校验和记录,因此ä¸èƒ½ä»ŽåŽŸå§‹å†…容仓库中安装"
+#: ../libsvn_wc/workqueue.c:1498
+#, c-format
+msgid "Unrecognized work item in the queue"
+msgstr "队列中有无法识别的工作项"
+
+#: ../libsvn_wc/workqueue.c:1578
#, c-format
-msgid "Unrecognized work item in the queue associated with '%s'"
-msgstr "“%s†关è”的队列中的项目无法识别"
+msgid ""
+"Failed to run the WC DB work queue associated with '%s', work item %d %s"
+msgstr "è¿è¡Œä¸Žâ€œ%sâ€å…³è”的工作副本数æ®åº“工作队列失败,工作项 %d %s"
+#: ../svn/add-cmd.c:101
msgid "Could not add all targets because some targets don't exist"
msgstr "因为一些目标ä¸å­˜åœ¨ï¼Œæ‰€ä»¥ä¸èƒ½å¢žåŠ å…¨éƒ¨ç›®æ ‡"
+#: ../svn/add-cmd.c:105
msgid "Could not add all targets because some targets are already versioned"
msgstr "因为一些目标已ç»ç‰ˆæœ¬åŒ–,所以ä¸èƒ½å¢žåŠ å…¨éƒ¨ç›®æ ‡"
+#: ../svn/blame-cmd.c:303 ../svn/list-cmd.c:300
msgid "'verbose' option invalid in XML mode"
msgstr "在XML模å¼ä¸­â€œverboseâ€é€‰é¡¹æ— æ•ˆ"
+#: ../svn/blame-cmd.c:315 ../svn/info-cmd.c:613 ../svn/list-cmd.c:312
+#: ../svn/status-cmd.c:302
msgid "'incremental' option only valid in XML mode"
msgstr "åªæœ‰åœ¨XML模å¼â€œincrementalâ€é€‰é¡¹æ‰æœ‰æ•ˆ"
+#: ../svn/blame-cmd.c:378
#, c-format
-msgid "Skipping binary file: '%s'\n"
-msgstr "略过二进制文件: “%sâ€\n"
+msgid "Skipping binary file (use --force to treat as text): '%s'\n"
+msgstr "略过二进制文件(使用 --force 将之视为纯文本):“%sâ€\n"
+#: ../svn/blame-cmd.c:415
msgid "Could not perform blame on all targets because some targets don't exist"
msgstr "因为一些目标ä¸å­˜åœ¨ï¼Œæ‰€ä»¥ä¸èƒ½è¿½æº¯å…¨éƒ¨ç›®æ ‡"
+#: ../svn/cat-cmd.c:102
msgid "Could not cat all targets because some targets don't exist"
msgstr "因为一些目标ä¸å­˜åœ¨ï¼Œæ‰€ä»¥ä¸èƒ½æ˜¾ç¤ºå…¨éƒ¨ç›®æ ‡"
+#: ../svn/cat-cmd.c:106
msgid "Could not cat all targets because some targets are not versioned"
msgstr "因为一些目标没有版本化,所以ä¸èƒ½æ˜¾ç¤ºå…¨éƒ¨ç›®æ ‡"
+#: ../svn/cat-cmd.c:110
msgid "Could not cat all targets because some targets are directories"
msgstr "因为一些目标是目录,所以ä¸èƒ½æ˜¾ç¤ºå…¨éƒ¨ç›®æ ‡"
-msgid "Could not set changelists on all targets because some targets don't exist"
+#: ../svn/changelist-cmd.c:135
+msgid ""
+"Could not set changelists on all targets because some targets don't exist"
msgstr "因为一些目标ä¸å­˜åœ¨ï¼Œæ‰€ä»¥ä¸èƒ½å¯¹å…¨éƒ¨ç›®æ ‡è®¾ç½®ä¿®æ”¹åˆ—表"
-msgid "Could not set changelists on all targets because some targets are not versioned"
+#: ../svn/changelist-cmd.c:140
+msgid ""
+"Could not set changelists on all targets because some targets are not "
+"versioned"
msgstr "因为一些目标没有版本化,所以ä¸èƒ½å¯¹å…¨éƒ¨ç›®æ ‡è®¾ç½®ä¿®æ”¹åˆ—表"
+#: ../svn/checkout-cmd.c:133 ../svn/switch-cmd.c:138
#, c-format
msgid "'%s' does not appear to be a URL"
msgstr "“%sâ€ä¸åƒæ˜¯URL"
+#: ../svn/cl-conflicts.c:80
+msgid "local file edit"
+msgstr "本地文件编辑"
+
+#: ../svn/cl-conflicts.c:82
+msgid "local file obstruction"
+msgstr "本地文件障ç¢"
+
+#: ../svn/cl-conflicts.c:84
+msgid "local file delete"
+msgstr "本地文件删除"
+
+#: ../svn/cl-conflicts.c:86
+msgid "local file missing"
+msgstr "本地文件缺失"
+
+#: ../svn/cl-conflicts.c:88
+msgid "local file unversioned"
+msgstr "本地文件未版本控制"
+
+#: ../svn/cl-conflicts.c:90
+msgid "local file add"
+msgstr "本地文件增加"
+
+#: ../svn/cl-conflicts.c:92
+msgid "local file replace"
+msgstr "本地文件替æ¢"
+
+#: ../svn/cl-conflicts.c:94
+msgid "local file moved away"
+msgstr "本地文件移走"
+
+#: ../svn/cl-conflicts.c:96
+msgid "local file moved here"
+msgstr "本地文件移入"
+
+#: ../svn/cl-conflicts.c:103
+msgid "local dir edit"
+msgstr "本地目录编辑"
+
+#: ../svn/cl-conflicts.c:105
+msgid "local dir obstruction"
+msgstr "本地目录障ç¢"
+
+#: ../svn/cl-conflicts.c:107
+msgid "local dir delete"
+msgstr "本地目录删除"
+
+#: ../svn/cl-conflicts.c:109
+msgid "local dir missing"
+msgstr "本地目录缺失"
+
+#: ../svn/cl-conflicts.c:111
+msgid "local dir unversioned"
+msgstr "本地目录未版本控制"
+
+#: ../svn/cl-conflicts.c:113
+msgid "local dir add"
+msgstr "本地目录增加"
+
+#: ../svn/cl-conflicts.c:115
+msgid "local dir replace"
+msgstr "本地目录替æ¢"
+
+#: ../svn/cl-conflicts.c:117
+msgid "local dir moved away"
+msgstr "本地目录移走"
+
+#: ../svn/cl-conflicts.c:119
+msgid "local dir moved here"
+msgstr "本地目录移入"
+
+#: ../svn/cl-conflicts.c:141
+msgid "incoming file edit"
+msgstr "进入的文件编辑"
+
+#: ../svn/cl-conflicts.c:143
+msgid "incoming file add"
+msgstr "进入的文件增加"
+
+#: ../svn/cl-conflicts.c:145
+msgid "incoming file delete"
+msgstr "进入的文件删除"
+
+#: ../svn/cl-conflicts.c:147
+msgid "incoming file replace"
+msgstr "进入的文件替æ¢"
+
+#: ../svn/cl-conflicts.c:154
+msgid "incoming dir edit"
+msgstr "进入的目录编辑"
+
+#: ../svn/cl-conflicts.c:156
+msgid "incoming dir add"
+msgstr "进入的目录增加"
+
+#: ../svn/cl-conflicts.c:158
+msgid "incoming dir delete"
+msgstr "进入的目录删除"
+
+#: ../svn/cl-conflicts.c:160
+msgid "incoming dir replace"
+msgstr "进入的目录替æ¢"
+
+#: ../svn/cl-conflicts.c:178
+msgid "upon update"
+msgstr "接ç€æ›´æ–°"
+
+#: ../svn/cl-conflicts.c:179
+msgid "upon switch"
+msgstr "接ç€åˆ‡æ¢"
+
+#: ../svn/cl-conflicts.c:180
+msgid "upon merge"
+msgstr "接ç€åˆå¹¶"
+
+#: ../svn/cl-conflicts.c:181
+msgid "upon none"
+msgstr "æ— "
+
+#: ../svn/cl-conflicts.c:200
+msgid "local edit"
+msgstr "本地编辑"
+
+#: ../svn/cl-conflicts.c:203
+msgid "local add"
+msgstr "本地增加"
+
+#: ../svn/cl-conflicts.c:206
+msgid "local delete"
+msgstr "本地删除"
+
+#: ../svn/cl-conflicts.c:209
+msgid "local obstruction"
+msgstr "本地障ç¢"
+
+#: ../svn/cl-conflicts.c:212
+#, c-format
+msgid "local %s"
+msgstr "本地%s"
+
+#: ../svn/cl-conflicts.c:220
+msgid "incoming edit"
+msgstr "进入的编辑"
+
+#: ../svn/cl-conflicts.c:223
+msgid "incoming add"
+msgstr "进入的增加"
+
+#: ../svn/cl-conflicts.c:226
+msgid "incoming delete"
+msgstr "进入的删除"
+
+#: ../svn/cl-conflicts.c:229
+#, c-format
+msgid "incoming %s"
+msgstr "进入的 %s"
+
+#: ../svn/cl-conflicts.c:235 ../svn/cl-conflicts.c:277
+#, c-format
+msgid "%s, %s %s"
+msgstr "%s, %s %s"
+
+#. A catch-all message for very rare or nominally impossible cases.
+#. It will not be pretty, but is closer to an internal error than
+#. an ordinary user-facing string.
+#: ../svn/cl-conflicts.c:285
#, c-format
-msgid "Working copy locked; try running 'svn cleanup' on the root of the working copy ('%s') instead."
+msgid "local: %s %s incoming: %s %s %s"
+msgstr "本地: %s %s 进入的: %s %s %s"
+
+#: ../svn/cleanup-cmd.c:92
+#, c-format
+msgid ""
+"Working copy locked; try running 'svn cleanup' on the root of the working "
+"copy ('%s') instead."
msgstr "工作副本被é”定;请先对工作副本(“%sâ€)根目录执行“svn cleanupâ€ã€‚"
+#: ../svn/commit-cmd.c:80
#, c-format
-msgid "svn: The depth of this commit is '%s', but copies are always performed recursively in the repository.\n"
+msgid ""
+"svn: The depth of this commit is '%s', but copies are always performed "
+"recursively in the repository.\n"
msgstr "svn: æ­¤æ交的深度是“%sâ€ï¼Œä½†æ˜¯åœ¨ç‰ˆæœ¬åº“中执行的å¤åˆ¶æ€»æ˜¯é€’归的。\n"
+#: ../svn/commit-cmd.c:116
msgid "Commit targets must be local paths"
msgstr "æ交目标必须是本地路径"
+#: ../svn/conflict-callbacks.c:155 ../svn/conflict-callbacks.c:172
+msgid "MINE"
+msgstr "我的"
+
+#: ../svn/conflict-callbacks.c:160 ../svn/conflict-callbacks.c:170
+msgid "THEIRS"
+msgstr "别人的"
+
+#: ../svn/conflict-callbacks.c:163
+msgid "MERGED"
+msgstr "å·²åˆå¹¶"
+
+#: ../svn/conflict-callbacks.c:220 ../svn/conflict-callbacks.c:276
msgid "||||||| ORIGINAL"
msgstr "||||||| 原始版本"
+#: ../svn/conflict-callbacks.c:221
msgid "<<<<<<< MINE (select with 'mc')"
msgstr "<<<<<<< 我的版本 (使用 “mc†选择)"
+#: ../svn/conflict-callbacks.c:222
msgid ">>>>>>> THEIRS (select with 'tc')"
msgstr ">>>>>>> 他人版本 (使用 “tc†选择)"
+#: ../svn/conflict-callbacks.c:277
+msgid "<<<<<<< MINE"
+msgstr "<<<<<<< 我的"
+
+#: ../svn/conflict-callbacks.c:278
+msgid ">>>>>>> THEIRS"
+msgstr ">>>>>>> 别人的"
+
+#: ../svn/conflict-callbacks.c:333 ../svn/file-merge.c:503
msgid "No editor found."
msgstr "没有å‘现编辑器。"
+#: ../svn/conflict-callbacks.c:342 ../svn/file-merge.c:515
msgid "Error running editor."
msgstr "执行编辑器错误。"
+#: ../svn/conflict-callbacks.c:352
#, c-format
msgid ""
"Invalid option; there's no merged version to edit.\n"
"\n"
msgstr ""
-"éžæ³•é€‰é¡¹ï¼›æ²¡æœ‰å·²åˆå¹¶çš„版本æ¥ç¼–辑。\n"
+"无效选项;没有已åˆå¹¶çš„版本æ¥ç¼–辑。\n"
"\n"
-msgid "No merge tool found.\n"
-msgstr "没有å‘现åˆå¹¶å·¥å…·ã€‚\n"
+#: ../svn/conflict-callbacks.c:411
+msgid "No merge tool found, try '(m) merge' instead.\n"
+msgstr "没有å‘现åˆå¹¶å·¥å…·ï¼Œè¯·å°è¯•â€œ(m) mergeâ€ã€‚\n"
-msgid "Error running merge tool."
-msgstr "执行åˆå¹¶å·¥å…·é”™è¯¯ã€‚"
+#: ../svn/conflict-callbacks.c:419
+msgid "Error running merge tool, try '(m) merge' instead."
+msgstr "执行åˆå¹¶å·¥å…·é”™è¯¯ï¼Œè¯·å°è¯•â€œ(m) mergeâ€ã€‚"
-msgid "No editor found; leaving all conflicts."
-msgstr "没有å‘现编辑器;ä¸å¤„ç†å†²çªã€‚"
+#: ../svn/conflict-callbacks.c:451
+msgid "change merged file in an editor [edit]"
+msgstr "在编辑器中修改åˆå¹¶åŽçš„文件 [edit]"
-msgid "Error running editor; leaving all conflicts."
-msgstr "执行编辑器错误;ä¸å¤„ç†å†²çªã€‚"
+#. Translators: keep long_desc below 70 characters (wrap with a left
+#. margin of 9 spaces if needed); don't translate the words within square
+#. brackets.
+#: ../svn/conflict-callbacks.c:451
+msgid "edit file"
+msgstr "编辑文件"
-msgid "No merge tool found; leaving all conflicts."
-msgstr "没有å‘现åˆå¹¶å·¥å…·ï¼›ä¸å¤„ç†å†²çªã€‚"
+#: ../svn/conflict-callbacks.c:454
+msgid "show all changes made to merged file"
+msgstr "显示写入åˆå¹¶æ–‡ä»¶çš„所有改动"
-msgid "Error running merge tool; leaving all conflicts."
-msgstr "执行åˆå¹¶å·¥å…·é”™è¯¯ï¼›ä¸å¤„ç†å†²çªã€‚"
+#: ../svn/conflict-callbacks.c:454
+msgid "show diff"
+msgstr "显示差异"
-#, c-format
-msgid "Conflict discovered in '%s'.\n"
-msgstr "在 “%s†中å‘现冲çªã€‚\n"
+#: ../svn/conflict-callbacks.c:456
+msgid "accept merged version of file"
+msgstr "接å—文件的åˆå¹¶ç‰ˆæœ¬"
-#, c-format
-msgid "Conflict for property '%s' discovered on '%s'.\n"
-msgstr "属性 “%s†冲çªï¼Œä½äºŽ “%sâ€ã€‚\n"
+#: ../svn/conflict-callbacks.c:456 ../svn/conflict-callbacks.c:504
+#: ../svn/conflict-callbacks.c:535 ../svn/conflict-callbacks.c:550
+#: ../svn/conflict-callbacks.c:566 ../svn/conflict-callbacks.c:582
+msgid "resolved"
+msgstr "已解决"
-#, c-format
-msgid "They want to delete the property, you want to change the value to '%s'.\n"
-msgstr "他人想删除此属性,你想改å˜å…¶å–值为 “%sâ€ã€‚\n"
+#: ../svn/conflict-callbacks.c:459 ../svn/conflict-callbacks.c:501
+msgid "display conflict"
+msgstr "显示冲çª"
-#, c-format
-msgid "They want to change the property value to '%s', you want to delete the property.\n"
-msgstr "他人想改å˜å…¶å–值为 “%sâ€ï¼Œä½ æƒ³åˆ é™¤æ­¤å±žæ€§ã€‚\n"
+#: ../svn/conflict-callbacks.c:459
+msgid "show all conflicts (ignoring merged version)"
+msgstr "æ˜¾ç¤ºæ‰€æœ‰å†²çª (忽略已åˆå¹¶ç‰ˆæœ¬)"
-msgid "Select: (p) postpone"
-msgstr "选择: (p) 推迟"
+#: ../svn/conflict-callbacks.c:461
+msgid "accept my version for all conflicts (same) [mine-conflict]"
+msgstr "对于所有冲çªï¼Œä½¿ç”¨æˆ‘的版本 [mine-conflict]"
-msgid ", (df) diff-full, (e) edit"
-msgstr ",(df) 显示全部差异,(e) 编辑"
+#: ../svn/conflict-callbacks.c:461 ../svn/conflict-callbacks.c:547
+#: ../svn/conflict-callbacks.c:563 ../svn/conflict-callbacks.c:579
+msgid "my side of conflict"
+msgstr "我这边的冲çª"
-msgid ", (r) resolved"
-msgstr ",(r) 已解决"
+#: ../svn/conflict-callbacks.c:464
+msgid "accept their version for all conflicts (same) [theirs-conflict]"
+msgstr "对于所有冲çªï¼Œä½¿ç”¨ä»–们的版本 [theirs-conflict]"
-msgid ""
-",\n"
-" (mc) mine-conflict, (tc) theirs-conflict"
+#: ../svn/conflict-callbacks.c:464
+msgid "their side of conflict"
+msgstr "他们的冲çª"
+
+#: ../svn/conflict-callbacks.c:469 ../svn/conflict-callbacks.c:495
+msgid "accept my version of entire file (even non-conflicts) [mine-full]"
+msgstr "整个文件使用我的版本(纵然没有冲çª) [mine-full]"
+
+#: ../svn/conflict-callbacks.c:469 ../svn/conflict-callbacks.c:495
+#: ../svn/conflict-callbacks.c:518
+msgid "my version"
+msgstr "我的版本"
+
+#: ../svn/conflict-callbacks.c:472 ../svn/conflict-callbacks.c:498
+msgid "accept their version of entire file (same) [theirs-full]"
+msgstr "整个文件使用他们的版本 [theirs-full]"
+
+#: ../svn/conflict-callbacks.c:472 ../svn/conflict-callbacks.c:498
+#: ../svn/conflict-callbacks.c:521
+msgid "their version"
+msgstr "他们的版本"
+
+#: ../svn/conflict-callbacks.c:476 ../svn/conflict-callbacks.c:492
+#: ../svn/conflict-callbacks.c:515
+msgid "mark the conflict to be resolved later [postpone]"
+msgstr "编辑冲çªæŽ¨è¿Ÿè§£å†³ [postpone]"
+
+#: ../svn/conflict-callbacks.c:476 ../svn/conflict-callbacks.c:492
+#: ../svn/conflict-callbacks.c:515 ../svn/conflict-callbacks.c:533
+#: ../svn/conflict-callbacks.c:545 ../svn/conflict-callbacks.c:561
+#: ../svn/conflict-callbacks.c:577
+msgid "postpone"
+msgstr "推迟"
+
+#: ../svn/conflict-callbacks.c:479 ../svn/util.c:774
+msgid "merge"
+msgstr "åˆå¹¶"
+
+#: ../svn/conflict-callbacks.c:479
+msgid "use internal merge tool to resolve conflict"
+msgstr "使用内部åˆå¹¶å·¥å…·è§£å†³å†²çª"
+
+#: ../svn/conflict-callbacks.c:481
+msgid "launch external tool to resolve conflict [launch]"
+msgstr "æ‰§è¡Œå¤–éƒ¨å·¥å…·è§£å†³å†²çª [launch]"
+
+#: ../svn/conflict-callbacks.c:481
+msgid "launch tool"
+msgstr "执行工具"
+
+#: ../svn/conflict-callbacks.c:483 ../svn/conflict-callbacks.c:506
+#: ../svn/conflict-callbacks.c:524 ../svn/conflict-callbacks.c:537
+#: ../svn/conflict-callbacks.c:553 ../svn/conflict-callbacks.c:569
+#: ../svn/conflict-callbacks.c:585
+msgid "postpone all remaining conflicts"
+msgstr "推迟解决所有剩余的冲çª"
+
+#: ../svn/conflict-callbacks.c:483 ../svn/conflict-callbacks.c:506
+#: ../svn/conflict-callbacks.c:524 ../svn/conflict-callbacks.c:537
+#: ../svn/conflict-callbacks.c:553 ../svn/conflict-callbacks.c:569
+#: ../svn/conflict-callbacks.c:585
+msgid "quit resolution"
+msgstr "退出解决冲çª"
+
+#: ../svn/conflict-callbacks.c:485
+msgid "show all options"
+msgstr "显示全部选项"
+
+#: ../svn/conflict-callbacks.c:485
+msgid "show this list (also 'h', '?')"
+msgstr "显示此列表(åŒ 'h' 或 '?')"
+
+#: ../svn/conflict-callbacks.c:501
+msgid "show conflicts in this property"
+msgstr "显示此属性的冲çª"
+
+#: ../svn/conflict-callbacks.c:502
+msgid "change merged property value in an editor [edit]"
+msgstr "在编辑器中修改已ç»åˆå¹¶çš„属性值 [edit]"
+
+#: ../svn/conflict-callbacks.c:502
+msgid "edit property"
+msgstr "编辑属性"
+
+#: ../svn/conflict-callbacks.c:504
+msgid "accept edited version of property"
+msgstr "接å—属性的编辑版本"
+
+#: ../svn/conflict-callbacks.c:508 ../svn/conflict-callbacks.c:526
+#: ../svn/conflict-callbacks.c:539 ../svn/conflict-callbacks.c:555
+#: ../svn/conflict-callbacks.c:571 ../svn/conflict-callbacks.c:587
+msgid "help"
+msgstr "帮助"
+
+#: ../svn/conflict-callbacks.c:508 ../svn/conflict-callbacks.c:526
+#: ../svn/conflict-callbacks.c:539 ../svn/conflict-callbacks.c:555
+#: ../svn/conflict-callbacks.c:571 ../svn/conflict-callbacks.c:587
+msgid "show this help (also '?')"
+msgstr "显示此帮助(åŒ '?')"
+
+#: ../svn/conflict-callbacks.c:518
+msgid "accept pre-existing item (ignore upstream addition) [mine-full]"
+msgstr "接å—已有项 (覆盖进入的项) [mine-full]"
+
+#: ../svn/conflict-callbacks.c:521
+msgid "accept incoming item (overwrite pre-existing item) [theirs-full]"
+msgstr "接å—进入的项 (覆盖已有项) [theirs-full]"
+
+#: ../svn/conflict-callbacks.c:533 ../svn/conflict-callbacks.c:545
+#: ../svn/conflict-callbacks.c:561 ../svn/conflict-callbacks.c:577
+msgid "resolve the conflict later [postpone]"
+msgstr "æŽ¨è¿Ÿè§£å†³å†²çª [postpone]"
+
+#: ../svn/conflict-callbacks.c:535
+msgid "accept current working copy state"
+msgstr "接å—当å‰çš„工作副本路径状æ€"
+
+#: ../svn/conflict-callbacks.c:547
+msgid "apply update to the move destination [mine-conflict]"
msgstr ""
-",\n"
-" (mc) 我的版本, (tc) 他人的版本"
-msgid ""
-",\n"
-" (mf) mine-full, (tf) theirs-full"
+#: ../svn/conflict-callbacks.c:550
+msgid "mark resolved (the move will become a copy)"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:563
+msgid "keep any moves affected by this deletion [mine-conflict]"
msgstr ""
-",\n"
-" (mf) 全用我的, (tf) 全用他人的"
-msgid "(s) show all options: "
-msgstr "(s) 显示全部选项: "
+#: ../svn/conflict-callbacks.c:566 ../svn/conflict-callbacks.c:582
+msgid "mark resolved (any affected moves will become copies)"
+msgstr ""
+
+#: ../svn/conflict-callbacks.c:579
+msgid "keep any moves affected by this replacement [mine-conflict]"
+msgstr ""
+#: ../svn/conflict-callbacks.c:616
+msgid "Select:"
+msgstr "选择:"
+
+#: ../svn/conflict-callbacks.c:643
#, c-format
+msgid " (%s) %s"
+msgstr " (%s) %s"
+
+#: ../svn/conflict-callbacks.c:683
msgid ""
-"\n"
-" (e) edit - change merged file in an editor\n"
-" (df) diff-full - show all changes made to merged file\n"
-" (r) resolved - accept merged version of file\n"
-"\n"
-" (dc) display-conflict - show all conflicts (ignoring merged version)\n"
-" (mc) mine-conflict - accept my version for all conflicts (same)\n"
-" (tc) theirs-conflict - accept their version for all conflicts (same)\n"
-"\n"
-" (mf) mine-full - accept my version of entire file (even non-conflicts)\n"
-" (tf) theirs-full - accept their version of entire file (same)\n"
-"\n"
-" (p) postpone - mark the conflict to be resolved later\n"
-" (l) launch - launch external tool to resolve conflict\n"
-" (s) show all - show this list\n"
-"\n"
+"Words in square brackets are the corresponding --accept option arguments.\n"
msgstr ""
+
+#: ../svn/conflict-callbacks.c:722
+#, c-format
+msgid ""
+"Unrecognized option.\n"
"\n"
-" (e) 编辑 - 使用编辑器修改åˆå¹¶åŽçš„文件\n"
-" (df) 显示全部差异 - 显示åˆå¹¶æ–‡ä»¶åŽçš„所有修改\n"
-" (r) 解决 - 使用åˆå¹¶åŽçš„文件\n"
-"\n"
-" (dc) æ˜¾ç¤ºå†²çª - 显示全部冲çª(忽略已ç»åˆå¹¶çš„版本)\n"
-" (mc) 我的版本 - 使用我的版本解决冲çª(åŒä¸Š)\n"
-" (tc) 他人的版本 - 使用他人的版本解决冲çª(åŒä¸Š)\n"
-"\n"
-" (mf) 全用我的 - 全部使用我的版本(包å«ä¸å†²çªçš„文件)\n"
-" (tf) 全用他人的 - 全部使用他人的版本(åŒä¸Š)\n"
-"\n"
-" (p) 推迟 - 标记以åŽè§£å†³å†²çª\n"
-" (l) 执行 - 使用第三方工具解决冲çª\n"
-" (s) 显示全部选项 - 显示这个列表\n"
+msgstr ""
+"ä¸èƒ½è¯†åˆ«çš„选项。\n"
"\n"
+#: ../svn/conflict-callbacks.c:750
+#, c-format
+msgid "Conflict discovered in file '%s'.\n"
+msgstr "在文件“%sâ€ä¸­å‘现冲çªã€‚\n"
+
+#: ../svn/conflict-callbacks.c:820
#, c-format
msgid ""
-"Invalid option; cannot choose based on conflicts in a binary file.\n"
+"Invalid option; cannot display conflicts for a binary file.\n"
"\n"
msgstr ""
-"éžæ³•é€‰é¡¹ï¼›ä¸èƒ½ä¸ºäºŒè¿›åˆ¶æ–‡ä»¶å†²çªé€‰æ‹©åŸºå‡†ã€‚\n"
+"无效选项;ä¸èƒ½æ˜¾ç¤ºäºŒè¿›åˆ¶æ–‡ä»¶çš„冲çªã€‚\n"
"\n"
+#: ../svn/conflict-callbacks.c:829
#, c-format
msgid ""
-"Invalid option; cannot choose based on conflicts for properties.\n"
+"Invalid option; original files not available.\n"
"\n"
msgstr ""
-"éžæ³•é€‰é¡¹ï¼›ä¸èƒ½ä¸ºå±žæ€§å†²çªé€‰æ‹©åŸºå‡†ã€‚\n"
+"无效选项;原始文件ä¸å¯ç”¨ã€‚\n"
"\n"
+#: ../svn/conflict-callbacks.c:841
#, c-format
msgid ""
-"Invalid option; cannot display conflicts for a binary file.\n"
+"Invalid option; there's no merged version to diff.\n"
"\n"
msgstr ""
-"éžæ³•é€‰é¡¹ï¼›ä¸èƒ½æ˜¾ç¤ºäºŒè¿›åˆ¶æ–‡ä»¶çš„冲çªã€‚\n"
+"无效选项;没有已åˆå¹¶çš„版本æ¥æ¯”较差异。\n"
"\n"
+#: ../svn/conflict-callbacks.c:861
#, c-format
msgid ""
-"Invalid option; cannot display conflicts for properties.\n"
+"Invalid option; can only resolve text conflicts with the internal merge "
+"tool.\n"
"\n"
msgstr ""
-"éžæ³•é€‰é¡¹ï¼›ä¸èƒ½æ˜¾ç¤ºå±žæ€§çš„冲çªã€‚\n"
+"无效选项;åªèƒ½ä½¿ç”¨å†…部åˆå¹¶å·¥å…·æ¥è§£å†³çº¯æ–‡æœ¬å†²çªã€‚\n"
"\n"
+#: ../svn/conflict-callbacks.c:887 ../svn/conflict-callbacks.c:904
#, c-format
msgid ""
-"Invalid option; original files not available.\n"
+"Invalid option.\n"
"\n"
msgstr ""
-"éžæ³•é€‰é¡¹ï¼›åŽŸå§‹æ–‡ä»¶ä¸å¯ç”¨ã€‚\n"
+"无效选项。\n"
"\n"
+#: ../svn/conflict-callbacks.c:913
#, c-format
msgid ""
-"Invalid option; there's no merged version to diff.\n"
+"Invalid option; cannot choose based on conflicts in a binary file.\n"
"\n"
msgstr ""
-"éžæ³•é€‰é¡¹ï¼›æ²¡æœ‰å·²åˆå¹¶çš„版本æ¥æ¯”较差异。\n"
+"无效选项;ä¸èƒ½ä¸ºäºŒè¿›åˆ¶æ–‡ä»¶å†²çªé€‰æ‹©åŸºå‡†ã€‚\n"
"\n"
+#: ../svn/conflict-callbacks.c:927
#, c-format
msgid ""
-"Invalid option; cannot resolve property conflicts with an external merge tool.\n"
+"Invalid option; use diff/edit/merge/launch before choosing 'resolved'.\n"
"\n"
msgstr ""
-"éžæ³•é€‰é¡¹ï¼›ä¸èƒ½ä½¿ç”¨å¤–部åˆå¹¶å·¥å…·æ¥è§£å†³å±žæ€§å†²çªã€‚\n"
-"\n"
+#: ../svn/conflict-callbacks.c:968
+#, c-format
+msgid "Conflict for property '%s' discovered on '%s'.\n"
+msgstr "属性 “%s†冲çªï¼Œä½äºŽ “%sâ€ã€‚\n"
+
+#: ../svn/conflict-callbacks.c:1026
#, c-format
msgid ""
-"Invalid option.\n"
+"Invalid option; please edit the property first.\n"
"\n"
msgstr ""
-"无效选项。\n"
+"无效选项;请先编辑属性。\n"
"\n"
+#: ../svn/conflict-callbacks.c:1063
+#, c-format
+msgid ""
+"Tree conflict on '%s'\n"
+" > %s\n"
+msgstr ""
+"树冲çªäºŽâ€œ%sâ€\n"
+" > %s\n"
+
+#: ../svn/conflict-callbacks.c:1128
#, c-format
msgid ""
"Conflict discovered when trying to add '%s'.\n"
@@ -5961,50 +8796,126 @@ msgstr ""
"增加 “%s†时出现冲çªã€‚\n"
"åŒå对象已存在。\n"
-msgid "Select: (p) postpone, (mf) mine-full, (tf) theirs-full, (h) help:"
-msgstr "选择:(p) 推迟,(mf) 全用我的,(tf) 全用他人的,(h) 帮助:"
+#: ../svn/conflict-callbacks.c:1226
+msgid "No editor found; leaving all conflicts."
+msgstr "没有å‘现编辑器;ä¸å¤„ç†å†²çªã€‚"
-#, c-format
-msgid ""
-" (p) postpone - resolve the conflict later\n"
-" (mf) mine-full - accept pre-existing item (ignore upstream addition)\n"
-" (tf) theirs-full - accept incoming item (overwrite pre-existing item)\n"
-" (h) help - show this help\n"
-"\n"
-msgstr ""
-" (p) 推迟 - 以åŽè§£å†³å†²çª\n"
-" (mf) 全用我的 - 使用先å‰çš„项目(忽略上游的修改)\n"
-" (tf) 全用他人的 - 使用引入的项目(覆盖先å‰çš„项目)\n"
-" (h) 帮助 - 显示这个列表\n"
-"\n"
+#: ../svn/conflict-callbacks.c:1235
+msgid "Error running editor; leaving all conflicts."
+msgstr "执行编辑器错误;ä¸å¤„ç†å†²çªã€‚"
-msgid "Local, non-commit operations do not take a log message or revision properties"
-msgstr "本地æ“作,éžæ交æ“作无须日志信æ¯æˆ–版本属性"
+#: ../svn/conflict-callbacks.c:1271
+msgid "No merge tool found; leaving all conflicts."
+msgstr "没有å‘现åˆå¹¶å·¥å…·ï¼›ä¸å¤„ç†å†²çªã€‚"
-#, c-format
-msgid "Can't open stdout"
-msgstr "无法打开标准输出"
+#: ../svn/conflict-callbacks.c:1280
+msgid "Error running merge tool; leaving all conflicts."
+msgstr "执行åˆå¹¶å·¥å…·é”™è¯¯ï¼›ä¸å¤„ç†å†²çªã€‚"
+#: ../svn/copy-cmd.c:123 ../svn/util.c:957
#, c-format
-msgid "Can't open stderr"
-msgstr "无法打开标准错误"
+msgid "'%s': a peg revision is not allowed here"
+msgstr "'%s': 此处ä¸å…许铆钉版本范围"
+
+#: ../svn/copy-cmd.c:163 ../svn/delete-cmd.c:69 ../svn/mkdir-cmd.c:68
+#: ../svn/move-cmd.c:77 ../svn/propedit-cmd.c:260
+msgid ""
+"Local, non-commit operations do not take a log message or revision properties"
+msgstr "本地æ“作,éžæ交æ“作无须日志信æ¯æˆ–版本属性"
+#: ../svn/diff-cmd.c:208
msgid "'--xml' option only valid with '--summarize' option"
msgstr "“--xml†选项åªèƒ½ä¸Ž “--summarize†åŒæ—¶ä½¿ç”¨"
+#: ../svn/diff-cmd.c:299
msgid "'--new' option only valid with '--old' option"
msgstr "“--new†选项åªèƒ½ä¸Ž “--old†åŒæ—¶ä½¿ç”¨"
+#: ../svn/diff-cmd.c:317
+msgid ""
+"'svn diff [-r N[:M]] [TARGET[@REV]...]' does not support mixed target types. "
+"Try using the --old and --new options or one of the shorthand invocations "
+"listed in 'svn help diff'."
+msgstr ""
+"“svn diff [-r N[:M]] [TARGET[@REV]...]â€ä¸æ”¯æŒæ··åˆç›®æ ‡ç±»åž‹ã€‚请å°è¯•ä½¿ç”¨ --old "
+"å’Œ --new 选项或者“svn help diffâ€åˆ—出的缩写。"
+
+#: ../svn/diff-cmd.c:355
#, c-format
msgid "Path '%s' not relative to base URLs"
msgstr "路径“%sâ€ä¸æ˜¯ç›¸å¯¹äºŽåŸºç¡€ URL"
-msgid "Destination directory exists; please remove the directory or use --force to overwrite"
+#: ../svn/export-cmd.c:113
+msgid ""
+"Destination directory exists; please remove the directory or use --force to "
+"overwrite"
msgstr "目的目录已存在;请删除目录或用 --force æ¥è¦†ç›–目录"
+#: ../svn/export-cmd.c:122 ../svn/list-cmd.c:412 ../svn/switch-cmd.c:188
+#: ../svn/update-cmd.c:177
msgid "Failure occurred processing one or more externals definitions"
msgstr "处ç†ä¸€ä¸ªæˆ–更多的外部定义失败"
+#: ../svn/file-merge.c:135 ../svn/file-merge.c:785
+msgid "Could not write data to merged file"
+msgstr "无法写入数æ®åˆ°å·²ç»åˆå¹¶æ–‡ä»¶"
+
+#: ../svn/file-merge.c:491
+msgid "Could not write data to temporary file"
+msgstr "无法写入数æ®åˆ°ä¸´æ—¶æ–‡ä»¶"
+
+#: ../svn/file-merge.c:600
+msgid "Conflicting section found during merge:"
+msgstr ""
+
+#: ../svn/file-merge.c:603
+#, c-format
+msgid "(1) their version (at line %lu)"
+msgstr "(1) 他们的版本 (第 %lu 行)"
+
+#: ../svn/file-merge.c:608
+#, c-format
+msgid "(2) your version (at line %lu)"
+msgstr "(2) 你的版本 (第 %lu 行)"
+
+#: ../svn/file-merge.c:657
+msgid ""
+"Select: (1) use their version, (2) use your version,\n"
+" (e1) edit their version and use the result,\n"
+" (e2) edit your version and use the result,\n"
+" (eb) edit both versions and use the result,\n"
+" (p) postpone this conflicting section leaving conflict markers,\n"
+" (a) abort file merge and return to main menu: "
+msgstr ""
+
+#: ../svn/file-merge.c:868
+#, c-format
+msgid "Merging '%s'.\n"
+msgstr "正在åˆå¹¶â€œ%sâ€ã€‚\n"
+
+#: ../svn/file-merge.c:915
+#, c-format
+msgid "Merge of '%s' aborted.\n"
+msgstr "路径 '%s' çš„åˆå¹¶ä¸­æ­¢ã€‚\n"
+
+#: ../svn/file-merge.c:933
+#, c-format
+msgid ""
+"Could not write merged result to '%s', saved instead at '%s'.\n"
+"'%s' remains in conflict.\n"
+msgstr ""
+
+#: ../svn/file-merge.c:951
+#, c-format
+msgid "Merge of '%s' completed (remains in conflict).\n"
+msgstr "“%sâ€çš„åˆå¹¶å®Œæˆ(ä»æ—§å¤„于冲çªçŠ¶æ€)。\n"
+
+#: ../svn/file-merge.c:955
+#, c-format
+msgid "Merge of '%s' completed.\n"
+msgstr "“%sâ€çš„åˆå¹¶å®Œæˆã€‚\n"
+
+#: ../svn/help-cmd.c:53
#, c-format
msgid ""
"usage: svn <subcommand> [options] [args]\n"
@@ -6030,6 +8941,7 @@ msgstr ""
"\n"
"å¯ç”¨çš„å­å‘½ä»¤: \n"
+#: ../svn/help-cmd.c:66
msgid ""
"Subversion is a tool for version control.\n"
"For additional information, see http://subversion.apache.org/\n"
@@ -6037,6 +8949,7 @@ msgstr ""
"Subversion 是版本控制工具。\n"
"欲å–得详细资料,请å‚阅 http://subversion.apache.org/\n"
+#: ../svn/help-cmd.c:73 ../svnrdump/svnrdump.c:659 ../svnsync/svnsync.c:1856
msgid ""
"The following repository access (RA) modules are available:\n"
"\n"
@@ -6044,165 +8957,229 @@ msgstr ""
"å¯ä½¿ç”¨ä»¥ä¸‹çš„版本库访问模å—: \n"
"\n"
+#: ../svn/help-cmd.c:127
+msgid ""
+"WARNING: Plaintext password storage is enabled!\n"
+"\n"
+msgstr ""
+
+#: ../svn/import-cmd.c:87
msgid "Repository URL required when importing"
msgstr "导入时必须æ供版本库的URL"
+#: ../svn/import-cmd.c:91
msgid "Too many arguments to import command"
msgstr "导入命令å‚数太多"
+#: ../svn/import-cmd.c:107
#, c-format
msgid "Invalid URL '%s'"
msgstr "无效URL“%sâ€"
+#: ../svn/info-cmd.c:95
msgid "Resource is not under version control."
msgstr "资æºå°šæœªçº³å…¥ç‰ˆæœ¬æŽ§åˆ¶"
+#: ../svn/info-cmd.c:266 ../svnadmin/svnadmin.c:1774
#, c-format
msgid "Path: %s\n"
msgstr "路径: %s\n"
+#: ../svn/info-cmd.c:273
#, c-format
msgid "Name: %s\n"
msgstr "å称: %s\n"
+#: ../svn/info-cmd.c:277
#, c-format
msgid "Working Copy Root Path: %s\n"
msgstr "工作副本根目录: %s\n"
+#: ../svn/info-cmd.c:283
#, c-format
msgid "URL: %s\n"
msgstr "URL: %s\n"
+#: ../svn/info-cmd.c:286
+#, c-format
+msgid "Relative URL: ^/%s\n"
+msgstr "正确的相对 URL: ^/%s\n"
+
+#: ../svn/info-cmd.c:293
#, c-format
msgid "Repository Root: %s\n"
msgstr "版本库根: %s\n"
+#: ../svn/info-cmd.c:297
#, c-format
msgid "Repository UUID: %s\n"
msgstr "版本库 UUID: %s\n"
+#: ../svn/info-cmd.c:301
#, c-format
msgid "Revision: %ld\n"
msgstr "版本: %ld\n"
+#: ../svn/info-cmd.c:306
#, c-format
msgid "Node Kind: file\n"
msgstr "节点ç§ç±»: 文件\n"
+#: ../svn/info-cmd.c:310
#, c-format
msgid "Node Kind: directory\n"
msgstr "节点ç§ç±»: 目录\n"
+#: ../svn/info-cmd.c:314
#, c-format
msgid "Node Kind: none\n"
msgstr "节点ç§ç±»: æ— \n"
+#: ../svn/info-cmd.c:319
#, c-format
msgid "Node Kind: unknown\n"
msgstr "节点ç§ç±»: 未知\n"
+#: ../svn/info-cmd.c:328
#, c-format
msgid "Schedule: normal\n"
msgstr "调度: 正常\n"
+#: ../svn/info-cmd.c:332
#, c-format
msgid "Schedule: add\n"
msgstr "调度: 增加\n"
+#: ../svn/info-cmd.c:336
#, c-format
msgid "Schedule: delete\n"
msgstr "调度: 删除\n"
+#: ../svn/info-cmd.c:340
#, c-format
msgid "Schedule: replace\n"
msgstr "调度: 替æ¢\n"
+#: ../svn/info-cmd.c:356
#, c-format
msgid "Depth: empty\n"
msgstr "深度: 空\n"
+#: ../svn/info-cmd.c:360
#, c-format
msgid "Depth: files\n"
msgstr "深度: 文件\n"
+#: ../svn/info-cmd.c:364
#, c-format
msgid "Depth: immediates\n"
msgstr "深度: 直接\n"
+#: ../svn/info-cmd.c:368
#, c-format
msgid "Depth: exclude\n"
msgstr "深度: 排除\n"
#. Other depths should never happen here.
+#: ../svn/info-cmd.c:379
#, c-format
msgid "Depth: INVALID\n"
msgstr "深度: éžæ³•\n"
+#: ../svn/info-cmd.c:383
#, c-format
msgid "Copied From URL: %s\n"
msgstr "从URL %s å¤åˆ¶: \n"
+#: ../svn/info-cmd.c:387
#, c-format
msgid "Copied From Rev: %ld\n"
msgstr "从版本 %ld å¤åˆ¶: \n"
+#: ../svn/info-cmd.c:396 ../svn/info-cmd.c:398
+#, c-format
+msgid "Moved From: %s\n"
+msgstr "移自: %s\n"
+
+#: ../svn/info-cmd.c:409 ../svn/info-cmd.c:411
+#, c-format
+msgid "Moved To: %s\n"
+msgstr "移到: %s\n"
+
+#: ../svn/info-cmd.c:417
#, c-format
msgid "Last Changed Author: %s\n"
msgstr "最åŽä¿®æ”¹çš„作者: %s\n"
+#: ../svn/info-cmd.c:421
#, c-format
msgid "Last Changed Rev: %ld\n"
msgstr "最åŽä¿®æ”¹çš„版本: %ld\n"
+#: ../svn/info-cmd.c:426
msgid "Last Changed Date"
msgstr "最åŽä¿®æ”¹çš„时间"
+#: ../svn/info-cmd.c:432
msgid "Text Last Updated"
msgstr "文本最åŽæ›´æ–°"
+#: ../svn/info-cmd.c:435
#, c-format
msgid "Checksum: %s\n"
msgstr "校验和: %s\n"
+#: ../svn/info-cmd.c:456
#, c-format
msgid "Conflict Previous Base File: %s\n"
msgstr "与之å‰çš„å‚考文件冲çª: %s\n"
+#: ../svn/info-cmd.c:463
#, c-format
msgid "Conflict Previous Working File: %s\n"
msgstr "与之å‰çš„工作文件冲çª: %s\n"
+#: ../svn/info-cmd.c:470
#, c-format
msgid "Conflict Current Base File: %s\n"
msgstr "与当å‰çš„å‚考文件冲çª: %s\n"
+#: ../svn/info-cmd.c:479
#, c-format
msgid "Conflict Properties File: %s\n"
msgstr "属性冲çªçš„文件: %s\n"
+#: ../svn/info-cmd.c:491
msgid "Tree conflict"
msgstr "树冲çª"
+#: ../svn/info-cmd.c:517
msgid "Source left"
msgstr "æº å·¦è¾¹"
+#: ../svn/info-cmd.c:526
msgid "Source right"
msgstr "æº å³è¾¹"
+#: ../svn/info-cmd.c:535
#, c-format
msgid "Lock Token: %s\n"
msgstr "é”定令牌: %s\n"
+#: ../svn/info-cmd.c:539
#, c-format
msgid "Lock Owner: %s\n"
msgstr "é”定所有者: %s\n"
+#: ../svn/info-cmd.c:544
msgid "Lock Created"
msgstr "已创建é”定"
+#: ../svn/info-cmd.c:548
msgid "Lock Expires"
msgstr "é”定过期"
+#: ../svn/info-cmd.c:556
#, c-format
msgid ""
"Lock Comment (%i line):\n"
@@ -6214,129 +9191,954 @@ msgstr[0] ""
"é”定注释(%i è¡Œ): \n"
"%s\n"
+#: ../svn/info-cmd.c:565
#, c-format
msgid "Changelist: %s\n"
msgstr "修改列表: %s\n"
+#: ../svn/info-cmd.c:679
msgid "Could not display info for all targets because some targets don't exist"
msgstr "因为一些目标ä¸å­˜åœ¨ï¼Œæ‰€ä»¥ä¸èƒ½æ˜¾ç¤ºå…¨éƒ¨ç›®æ ‡"
+#: ../svn/list-cmd.c:73
msgid "%b %d %H:%M"
msgstr "%b %d %H:%M"
+#: ../svn/list-cmd.c:75
msgid "%b %d %Y"
msgstr "%Y-%m-%d"
+#: ../svn/list-cmd.c:101
+#, fuzzy, c-format
+msgid "Listing external '%s' defined on '%s':\n"
+msgstr ""
+"\n"
+"正在å–得外部项目至 '%s':\n"
+
+#: ../svn/list-cmd.c:421
msgid "Could not list all targets because some targets don't exist"
msgstr "因为一些目标ä¸å­˜åœ¨ï¼Œæ‰€ä»¥ä¸èƒ½åˆ—出全部目标"
+#: ../svn/lock-cmd.c:58
msgid "Lock comment contains a zero byte"
msgstr "加é”注释中有一个零字节"
+#: ../svn/log-cmd.c:144
+msgid "\n"
+msgstr "\n"
+
+#: ../svn/log-cmd.c:354
msgid "(no author)"
msgstr "(没有作者信æ¯)"
+#: ../svn/log-cmd.c:360
msgid "(no date)"
msgstr "(没有时间信æ¯)"
+#: ../svn/log-cmd.c:385
#, c-format
msgid " | %d line"
msgid_plural " | %d lines"
msgstr[0] " | %d 行"
+#: ../svn/log-cmd.c:401
#, c-format
msgid "Changed paths:\n"
msgstr "改å˜çš„路径: \n"
+#: ../svn/log-cmd.c:418
#, c-format
msgid " (from %s:%ld)"
msgstr " (从 %s:%ld)"
+#: ../svn/log-cmd.c:434
#, c-format
msgid "Reverse merged via:"
msgstr "å·²ç»æ’¤é”€åˆå¹¶ï¼Œé€šè¿‡:"
+#: ../svn/log-cmd.c:436
#, c-format
msgid "Merged via:"
msgstr "åˆå¹¶é€šè¿‡: "
-#, c-format
-msgid "\n"
-msgstr "\n"
-
+#: ../svn/log-cmd.c:689
msgid "'with-all-revprops' option only valid in XML mode"
msgstr "åªæœ‰åœ¨ XML æ¨¡å¼ â€œwith-all-revprops†选项æ‰æœ‰æ•ˆ"
+#: ../svn/log-cmd.c:693
msgid "'with-no-revprops' option only valid in XML mode"
msgstr "åªæœ‰åœ¨ XML æ¨¡å¼ â€œwith-no-revprops†选项æ‰æœ‰æ•ˆ"
+#: ../svn/log-cmd.c:697
msgid "'with-revprop' option only valid in XML mode"
msgstr "åªæœ‰åœ¨ XML æ¨¡å¼ â€œwith-revprop†选项æ‰æœ‰æ•ˆ"
+#: ../svn/log-cmd.c:704
msgid "'diff' option is not supported in XML mode"
msgstr "在 XML 模å¼ä¸æ”¯æŒ 'diff' 选项"
+#: ../svn/log-cmd.c:710
msgid "'quiet' and 'diff' options are mutually exclusive"
msgstr "'quiet' 与 'diff' 选项是互斥的"
+#: ../svn/log-cmd.c:714
msgid "'diff-cmd' option requires 'diff' option"
msgstr "'diff-cmd' é€‰é¡¹éœ€è¦ 'diff' 选项"
+#: ../svn/log-cmd.c:718
msgid "'internal-diff' option requires 'diff' option"
msgstr "'internal-diff' é€‰é¡¹éœ€è¦ 'diff' 选项"
+#: ../svn/log-cmd.c:722
msgid "'extensions' option requires 'diff' option"
msgstr "'extensions' 选项å¾å•Šå“Ÿ 'diff' 选项"
+#: ../svn/log-cmd.c:727
msgid "'depth' option requires 'diff' option"
msgstr "'depth' é€‰é¡¹éœ€è¦ 'diff' 选项"
+#: ../svn/log-cmd.c:743
msgid "-c and -r are mutually exclusive"
msgstr "-c 与 -r 是互斥的"
+#: ../svn/log-cmd.c:775
#, c-format
-msgid "Only relative paths can be specified after a URL for 'svn log', but '%s' is not a relative path"
+msgid ""
+"Only relative paths can be specified after a URL for 'svn log', but '%s' is "
+"not a relative path"
msgstr "对于 'svn log',在 URL åŽåªèƒ½æŒ‡å®šç›¸å¯¹è·¯å¾„,但 '%s' ä¸æ˜¯ç›¸å¯¹è·¯å¾„"
+#: ../svn/log-cmd.c:821
#, c-format
msgid "cannot assign with 'with-revprop' option (drop the '=')"
msgstr "选项 'with-revprop' ä¸æŽ¥å—赋值(请删除 '=')"
+#: ../svn/merge-cmd.c:107 ../svn/merge-cmd.c:131
+#, c-format
+msgid "--- Merging\n"
+msgstr "--- 正在åˆå¹¶\n"
+
+#: ../svn/merge-cmd.c:175
+msgid "-r and -c can't be used with --reintegrate"
+msgstr "-r å’Œ -c ä¸èƒ½ä¸Ž --reintegrate 共存"
+
+#: ../svn/merge-cmd.c:230
+msgid "Merge source required"
+msgstr "需è¦åˆå¹¶æº"
+
+#: ../svn/merge-cmd.c:276
+msgid "Second revision required"
+msgstr "需è¦ç¬¬äºŒä¸ªç‰ˆæœ¬"
+
+#: ../svn/merge-cmd.c:285 ../svn/merge-cmd.c:312 ../svn/mergeinfo-cmd.c:267
+#: ../svnadmin/svnadmin.c:1749 ../svnlook/svnlook.c:2060
+#: ../svnlook/svnlook.c:2253 ../svnlook/svnlook.c:2357
+#: ../svnlook/svnlook.c:2392
+msgid "Too many arguments given"
+msgstr "å‚数过多"
+
+#: ../svn/merge-cmd.c:302
+msgid "Cannot specify a revision range with two URLs"
+msgstr "ä¸èƒ½å¯¹ä¸¤ä¸ª URL 指定版本范围"
+
+#: ../svn/merge-cmd.c:406
+msgid "--reintegrate cannot be used with --ignore-ancestry"
+msgstr "--reintegrate ä¸èƒ½ä¸Ž --ignore-ancestry 共存"
+
+#: ../svn/merge-cmd.c:411
+msgid "--reintegrate cannot be used with --record-only"
+msgstr "--reintegrate ä¸èƒ½ä¸Ž --record-only 共存"
+
+#: ../svn/merge-cmd.c:416
+msgid "--depth cannot be used with --reintegrate"
+msgstr "--depth ä¸èƒ½ä¸Ž --reintegrate 共存"
+
+#: ../svn/merge-cmd.c:421
+msgid "--force cannot be used with --reintegrate"
+msgstr "--force ä¸èƒ½ä¸Ž --reintegrate 共存"
+
+#: ../svn/merge-cmd.c:426
+msgid "--reintegrate can only be used with a single merge source"
+msgstr "--reintegrate åªèƒ½ç”¨äºŽå•ä¸€åˆå¹¶æº"
+
+#: ../svn/merge-cmd.c:430
+msgid "--allow-mixed-revisions cannot be used with --reintegrate"
+msgstr "--allow-mixed-revisions ä¸èƒ½ä¸Ž --reintegrate 共存"
+
+#: ../svn/merge-cmd.c:445
+msgid ""
+"Merge tracking not possible, use --ignore-ancestry or\n"
+"fix invalid mergeinfo in target with 'svn propset'"
+msgstr ""
+"ä¸èƒ½æ‰§è¡Œåˆå¹¶è·Ÿè¸ªï¼Œå¯¹ç›®æ ‡ä½¿ç”¨â€œsvn propsetâ€ä¿®æ­£éžæ³•åˆå¹¶ä¿¡æ¯ï¼Œæˆ–者使用选项\n"
+"--ignore-ancestry"
+
+#: ../svn/mergeinfo-cmd.c:171
+msgid "last full merge"
+msgstr ""
+
+#: ../svn/mergeinfo-cmd.c:171
+msgid "youngest common ancestor"
+msgstr ""
+
+#: ../svn/mergeinfo-cmd.c:172
+msgid "repository path"
+msgstr "版本库路径"
+
+#: ../svn/mergeinfo-cmd.c:172
+msgid "tip of branch"
+msgstr ""
+
+#: ../svn/mergeinfo-cmd.c:264
+msgid "Not enough arguments given"
+msgstr "没有æ供足够的å‚æ•°"
+
+#: ../svn/mergeinfo-cmd.c:342
+msgid "--revision (-r) option valid only with --show-revs option"
+msgstr "--revision (-r) 选项åªèƒ½ä¸Ž --show-revs åŒæ—¶ä½¿ç”¨"
+
+#: ../svn/mergeinfo-cmd.c:346
+msgid "Depth specification options valid only with --show-revs option"
+msgstr ""
+
+#: ../svn/mkdir-cmd.c:92
+msgid "Try 'svn add' or 'svn add --non-recursive' instead?"
+msgstr "å°è¯•ç”¨ “svn addâ€æˆ– “svn add --non-recursiveâ€ä»£æ›¿ï¼Ÿ"
+
+#: ../svn/mkdir-cmd.c:98
+msgid "Try 'svn mkdir --parents' instead?"
+msgstr "å°è¯• “svn mkdir --parentsâ€ï¼Ÿ"
+
+#: ../svn/notify.c:132
+#, c-format
+msgid "%d remaining"
+msgid_plural "%d remaining"
+msgstr[0] "剩余 %d"
+
+#: ../svn/notify.c:141
+#, c-format
+msgid "and %d already resolved"
+msgid_plural "and %d already resolved"
+msgstr[0] "%d 个已ç»è§£å†³"
+
+#: ../svn/notify.c:163 ../svn/status-cmd.c:90
+#, c-format
+msgid "Summary of conflicts:\n"
+msgstr "冲çªæ¦‚è¦ï¼š\n"
+
+#: ../svn/notify.c:169
+#, c-format
+msgid " Text conflicts: %d\n"
+msgstr " 正文冲çªï¼š%d\n"
+
+#: ../svn/notify.c:173
+#, c-format
+msgid " Property conflicts: %d\n"
+msgstr " 属性冲çªï¼š%d\n"
+
+#: ../svn/notify.c:177
+#, c-format
+msgid " Tree conflicts: %d\n"
+msgstr " 树冲çªï¼š%d\n"
+
+#: ../svn/notify.c:184
+#, c-format
+msgid " Text conflicts: %s (%s)\n"
+msgstr " 正文冲çªï¼š%s (%s)\n"
+
+#: ../svn/notify.c:189
+#, c-format
+msgid " Property conflicts: %s (%s)\n"
+msgstr " 属性冲çªï¼š%s (%s)\n"
+
+#: ../svn/notify.c:194
+#, c-format
+msgid " Tree conflicts: %s (%s)\n"
+msgstr " 树冲çªï¼š%s (%s)\n"
+
+#: ../svn/notify.c:200
+#, c-format
+msgid " Skipped paths: %d\n"
+msgstr " 跳过的路径:%d\n"
+
+#: ../svn/notify.c:235
+#, c-format
+msgid "Skipped missing target: '%s'\n"
+msgstr "跳过缺少的目标: “%sâ€\n"
+
+#: ../svn/notify.c:242
+#, c-format
+msgid "Skipped target: '%s' -- copy-source is missing\n"
+msgstr "跳过目标: '%s' -- copy-source 丢失\n"
+
+#: ../svn/notify.c:249
+#, c-format
+msgid "Skipped '%s'\n"
+msgstr "跳过“%sâ€\n"
+
+#: ../svn/notify.c:256
+#, c-format
+msgid "Skipped '%s' -- An obstructing working copy was found\n"
+msgstr "忽略“%s†-- å‘现障ç¢å·¥ä½œå‰¯æœ¬\n"
+
+#: ../svn/notify.c:263
+#, c-format
+msgid "Skipped '%s' -- Has no versioned parent\n"
+msgstr "已跳过 '%s' -- 没有已版本控制的父亲\n"
+
+#: ../svn/notify.c:270
+#, c-format
+msgid "Skipped '%s' -- Access denied\n"
+msgstr "已跳过 '%s' -- æ‹’ç»è®¿é—®\n"
+
+#: ../svn/notify.c:277
+#, c-format
+msgid "Skipped '%s' -- Node remains in conflict\n"
+msgstr "已跳过 '%s' -- 节点处于冲çªçŠ¶æ€\n"
+
+#: ../svn/notify.c:358
+#, c-format
+msgid "Restored '%s'\n"
+msgstr "已还原“%sâ€\n"
+
+#: ../svn/notify.c:364
+#, c-format
+msgid "Reverted '%s'\n"
+msgstr "å·²æ¢å¤â€œ%sâ€\n"
+
+#: ../svn/notify.c:370
+#, c-format
+msgid "Failed to revert '%s' -- try updating instead.\n"
+msgstr "无法æ¢å¤â€œ%sâ€-- 请改用更新试试。\n"
+
+#: ../svn/notify.c:378
+#, c-format
+msgid "Resolved conflicted state of '%s'\n"
+msgstr "“%sâ€çš„冲çªçŠ¶æ€å·²è§£å†³\n"
+
+#: ../svn/notify.c:473 ../svn/notify.c:513
+#, c-format
+msgid "> applied hunk ## -%lu,%lu +%lu,%lu ## with offset %s"
+msgstr "> å·²åº”ç”¨å— ## -%lu,%lu +%lu,%lu ##,å移 %s"
+
+#: ../svn/notify.c:490 ../svn/notify.c:527
+#, c-format
+msgid "> applied hunk @@ -%lu,%lu +%lu,%lu @@ with offset %s"
+msgstr "> å·²åº”ç”¨å— @@ -%lu,%lu +%lu,%lu @@ å移 %s"
+
+#: ../svn/notify.c:548
+#, c-format
+msgid "> applied hunk ## -%lu,%lu +%lu,%lu ## with fuzz %lu (%s)\n"
+msgstr "> å·²åº”ç”¨å— ## -%lu,%lu +%lu,%lu ## 模糊 %lu (%s)\n"
+
+#: ../svn/notify.c:558
+#, c-format
+msgid "> applied hunk @@ -%lu,%lu +%lu,%lu @@ with fuzz %lu\n"
+msgstr "> å·²åº”ç”¨å— @@ -%lu,%lu +%lu,%lu @@ 模糊 %lu\n"
+
+#: ../svn/notify.c:576
+#, c-format
+msgid "> rejected hunk ## -%lu,%lu +%lu,%lu ## (%s)\n"
+msgstr "> 已拒ç»å— ## -%lu,%lu +%lu,%lu ## (%s)\n"
+
+#: ../svn/notify.c:585
+#, c-format
+msgid "> rejected hunk @@ -%lu,%lu +%lu,%lu @@\n"
+msgstr "> 已拒ç»çš„å— @@ -%lu,%lu +%lu,%lu @@\n"
+
+#: ../svn/notify.c:599
+#, c-format
+msgid "> hunk ## -%lu,%lu +%lu,%lu ## already applied (%s)\n"
+msgstr "> å— ## -%lu,%lu +%lu,%lu ## å·²ç»åº”用 (%s)\n"
+
+#: ../svn/notify.c:609
+#, c-format
+msgid "> hunk @@ -%lu,%lu +%lu,%lu @@ already applied\n"
+msgstr "> å— @@ -%lu,%lu +%lu,%lu @@ å·²ç»åº”用\n"
+
+#: ../svn/notify.c:669
+#, c-format
+msgid ""
+"\n"
+"Fetching external item into '%s':\n"
+msgstr ""
+"\n"
+"正在å–得外部项目至 '%s':\n"
+
+#: ../svn/notify.c:695
+#, c-format
+msgid "Error handling externals definition for '%s':"
+msgstr "处ç†å¤–部引用“%sâ€æ—¶å‡ºé”™ï¼š"
+
+#: ../svn/notify.c:708
+#, c-format
+msgid "Updating '%s':\n"
+msgstr "正在å‡çº§ '%s':\n"
+
+#: ../svn/notify.c:722
+#, c-format
+msgid "Exported external at revision %ld.\n"
+msgstr "已导出版本 %ld 的外部项目。\n"
+
+#: ../svn/notify.c:723
+#, c-format
+msgid "Exported revision %ld.\n"
+msgstr "已导出版本 %ld。\n"
+
+#: ../svn/notify.c:731
+#, c-format
+msgid "Checked out external at revision %ld.\n"
+msgstr "å–出版本 %ld 的外部项目。\n"
+
+#: ../svn/notify.c:732
+#, c-format
+msgid "Checked out revision %ld.\n"
+msgstr "å–出版本 %ld。\n"
+
+#: ../svn/notify.c:743
+#, c-format
+msgid "Updated external to revision %ld.\n"
+msgstr "更新外部项目至版本 %ld。\n"
+
+#: ../svn/notify.c:744
+#, c-format
+msgid "Updated to revision %ld.\n"
+msgstr "更新到版本 %ld。\n"
+
+#: ../svn/notify.c:752
+#, c-format
+msgid "External at revision %ld.\n"
+msgstr "外部项目版本 %ld。\n"
+
+#: ../svn/notify.c:753
+#, c-format
+msgid "At revision %ld.\n"
+msgstr "版本 %ld。\n"
+
+#: ../svn/notify.c:765
+#, c-format
+msgid "External export complete.\n"
+msgstr "完æˆå¤–部项目导出。\n"
+
+#: ../svn/notify.c:766
+#, c-format
+msgid "Export complete.\n"
+msgstr "完æˆå¯¼å‡ºã€‚\n"
+
+#: ../svn/notify.c:773
+#, c-format
+msgid "External checkout complete.\n"
+msgstr "完æˆå–出外部项目。\n"
+
+#: ../svn/notify.c:774
+#, c-format
+msgid "Checkout complete.\n"
+msgstr "完æˆå–出。\n"
+
+#: ../svn/notify.c:781
+#, c-format
+msgid "External update complete.\n"
+msgstr "完æˆå¤–部项目更新。\n"
+
+#: ../svn/notify.c:782
+#, c-format
+msgid "Update complete.\n"
+msgstr "完æˆæ›´æ–°ã€‚\n"
+
+#: ../svn/notify.c:798
+#, c-format
+msgid ""
+"\n"
+"Performing status on external item at '%s':\n"
+msgstr ""
+"\n"
+"对外部项目“%sâ€è¿›è¡ŒçŠ¶æ€æ£€æŸ¥:\n"
+
+#: ../svn/notify.c:806
+#, c-format
+msgid "Status against revision: %6ld\n"
+msgstr "版本 %6ld 的状æ€\n"
+
+#: ../svn/notify.c:815
+#, c-format
+msgid "Sending copy of %s\n"
+msgstr "正在å‘é€å‰¯æœ¬ %s\n"
+
+#: ../svn/notify.c:816
+#, c-format
+msgid "Sending %s\n"
+msgstr "正在å‘é€ %s\n"
+
+#: ../svn/notify.c:827
+#, c-format
+msgid "Adding copy of (bin) %s\n"
+msgstr "正在增加 (二进制) %s\n"
+
+#: ../svn/notify.c:828
+#, c-format
+msgid "Adding (bin) %s\n"
+msgstr "正在增加 (二进制) %s\n"
+
+#: ../svn/notify.c:836
+#, c-format
+msgid "Adding copy of %s\n"
+msgstr "正在增加副本 %s\n"
+
+#: ../svn/notify.c:837
+#, c-format
+msgid "Adding %s\n"
+msgstr "正在增加 %s\n"
+
+#: ../svn/notify.c:846
+#, c-format
+msgid "Deleting copy of %s\n"
+msgstr "正在删除副本 %s\n"
+
+#: ../svn/notify.c:847
+#, c-format
+msgid "Deleting %s\n"
+msgstr "正在删除 %s\n"
+
+#: ../svn/notify.c:856
+#, c-format
+msgid "Replacing copy of %s\n"
+msgstr "正在替æ¢å‰¯æœ¬ %s\n"
+
+#: ../svn/notify.c:857
+#, c-format
+msgid "Replacing %s\n"
+msgstr "æ­£åœ¨æ›¿æ¢ %s\n"
+
+#: ../svn/notify.c:867 ../svnsync/sync.c:327
+#, c-format
+msgid "Transmitting file data "
+msgstr "传输文件数æ®"
+
+#: ../svn/notify.c:876 ../svnadmin/svnadmin.c:1728
+#, c-format
+msgid "'%s' locked by user '%s'.\n"
+msgstr "“%sâ€è¢«ç”¨æˆ·â€œ%sâ€é”定。\n"
+
+#: ../svn/notify.c:882
+#, c-format
+msgid "'%s' unlocked.\n"
+msgstr "“%sâ€è§£é™¤é”定。\n"
+
+#: ../svn/notify.c:909
+#, c-format
+msgid "--- Merging differences between repository URLs into '%s':\n"
+msgstr "--- 正在åˆå¹¶ç‰ˆæœ¬åº“ URL 之间的差异到 “%sâ€ï¼š\n"
+
+#: ../svn/notify.c:914
+#, c-format
+msgid "--- Merging r%ld into '%s':\n"
+msgstr "--- 正在åˆå¹¶ r%ld 到 “%sâ€:\n"
+
+#: ../svn/notify.c:918
+#, c-format
+msgid "--- Reverse-merging r%ld into '%s':\n"
+msgstr "--- 正在åå‘åˆå¹¶ r%ld 到 “%sâ€:\n"
+
+#: ../svn/notify.c:922
+#, c-format
+msgid "--- Merging r%ld through r%ld into '%s':\n"
+msgstr "--- 正在åˆå¹¶ r%ld,ç»ç”± r%ld,到 “%sâ€:\n"
+
+#: ../svn/notify.c:928
+#, c-format
+msgid "--- Reverse-merging r%ld through r%ld into '%s':\n"
+msgstr "--- 正在åå‘åˆå¹¶ r%ld,ç»ç”± r%ld,到 “%sâ€:\n"
+
+#: ../svn/notify.c:940
+#, c-format
+msgid "--- Recording mergeinfo for merge between repository URLs into '%s':\n"
+msgstr "--- 记录版本库 URL 之间的åˆå¹¶ä¿¡æ¯åˆ°â€œ%sâ€ï¼š\n"
+
+#: ../svn/notify.c:950
+#, c-format
+msgid "--- Recording mergeinfo for merge of r%ld into '%s':\n"
+msgstr "--- 记录åˆå¹¶ r%ld 到“%sâ€çš„ä¿¡æ¯:\n"
+
+#: ../svn/notify.c:955
+#, c-format
+msgid "--- Recording mergeinfo for reverse merge of r%ld into '%s':\n"
+msgstr "--- 记录åå‘åˆå¹¶ r%ld 到“%sâ€çš„ä¿¡æ¯:\n"
+
+#: ../svn/notify.c:960
+#, c-format
+msgid "--- Recording mergeinfo for merge of r%ld through r%ld into '%s':\n"
+msgstr "--- 记录åˆå¹¶ r%ld,ç»ç”± r%ld,到“%sâ€çš„ä¿¡æ¯:\n"
+
+#: ../svn/notify.c:965
+#, c-format
+msgid ""
+"--- Recording mergeinfo for reverse merge of r%ld through r%ld into '%s':\n"
+msgstr "--- 记录åå‘åˆå¹¶ r%ld,ç»ç”± r%ld,到“%sâ€çš„ä¿¡æ¯:\n"
+
+#: ../svn/notify.c:975
+#, c-format
+msgid "--- Eliding mergeinfo from '%s':\n"
+msgstr "--- 正在从 '%s' 删除åˆå¹¶ä¿¡æ¯:\n"
+
+#: ../svn/notify.c:983
+#, c-format
+msgid "--- Merging differences between foreign repository URLs into '%s':\n"
+msgstr "--- 正在åˆå¹¶å¤–部版本库 URL 之间的差异到 “%sâ€ï¼š\n"
+
+#: ../svn/notify.c:989
+#, c-format
+msgid "--- Merging (from foreign repository) r%ld into '%s':\n"
+msgstr "--- 正在åˆå¹¶(从外部版本库) r%ld 到 “%sâ€ï¼š\n"
+
+#: ../svn/notify.c:994
+#, c-format
+msgid "--- Reverse-merging (from foreign repository) r%ld into '%s':\n"
+msgstr "--- 正在åå‘åˆå¹¶(从外部版本库) r%ld 到 “%sâ€:\n"
+
+#: ../svn/notify.c:999
+#, c-format
+msgid "--- Merging (from foreign repository) r%ld through r%ld into '%s':\n"
+msgstr "--- 正在åˆå¹¶(从外部版本库) r%ld,ç»ç”± r%ld,到 “%sâ€:\n"
+
+#: ../svn/notify.c:1005
+#, c-format
+msgid ""
+"--- Reverse-merging (from foreign repository) r%ld through r%ld into '%s':\n"
+msgstr "--- 正在åå‘åˆå¹¶(从外部版本库) r%ld,ç»ç”± r%ld,到 “%sâ€:\n"
+
+#: ../svn/notify.c:1041
+#, c-format
+msgid "property '%s' set on '%s'\n"
+msgstr "设置属性 “%s†于 “%sâ€\n"
+
+#: ../svn/notify.c:1049
+#, c-format
+msgid "property '%s' deleted from '%s'.\n"
+msgstr "删除属性 “%s†于 “%sâ€ã€‚\n"
+
+#: ../svn/notify.c:1057
+#, c-format
+msgid "Attempting to delete nonexistent property '%s' on '%s'\n"
+msgstr "试图删除ä¸å­˜åœ¨çš„属性“%sâ€äºŽâ€œ%sâ€\n"
+
+#: ../svn/notify.c:1066
+#, c-format
+msgid "property '%s' set on repository revision %ld\n"
+msgstr "设定属性 “%s†于版本库版本 %ld\n"
+
+#: ../svn/notify.c:1074
+#, c-format
+msgid "property '%s' deleted from repository revision %ld\n"
+msgstr "删除属性 “%s†于版本库版本 %ld\n"
+
+#: ../svn/notify.c:1081
+#, c-format
+msgid "Upgraded '%s'\n"
+msgstr "å·²å‡çº§çš„“%sâ€\n"
+
+#: ../svn/notify.c:1087
+#, c-format
+msgid "Redirecting to URL '%s':\n"
+msgstr "正在é‡å®šå‘到 URL '%s':\n"
+
+#: ../svn/notify.c:1115
+#, c-format
+msgid "--- Copying from foreign repository URL '%s':\n"
+msgstr "--- 正在从外部版本库 URL '%s' å¤åˆ¶:\n"
+
+#: ../svn/notify.c:1124
+#, c-format
+msgid "Breaking move with source path '%s'\n"
+msgstr "æºè·¯å¾„“%sâ€ç§»åŠ¨å¤±è´¥\n"
+
+#: ../svn/propdel-cmd.c:88
+#, c-format
+msgid "Cannot specify revision for deleting versioned property '%s'"
+msgstr "删除纳入版本控制的属性 “%s†时ä¸å¯æŒ‡å®šç‰ˆæœ¬"
+
+#: ../svn/propedit-cmd.c:62 ../svn/propedit-cmd.c:341
+#, c-format
+msgid "Set new value for property '%s' on '%s'\n"
+msgstr "属性 “%s†于 “%s†被设为新值\n"
+
+#: ../svn/propedit-cmd.c:96 ../svn/propset-cmd.c:97
+msgid ""
+"--encoding option applies only to textual Subversion-controlled properties"
+msgstr "--encoding 选项åªèƒ½ç”¨äºŽ Subversion 的文本属性"
+
+#: ../svn/propedit-cmd.c:162
+#, c-format
+msgid "Set new value for property '%s' on revision %ld\n"
+msgstr "属性 “%s†于版本 %ld 被设为新值\n"
+
+#: ../svn/propedit-cmd.c:168
+#, c-format
+msgid "No changes to property '%s' on revision %ld\n"
+msgstr "属性 “%s†于版本 %ld 没有改å˜\n"
+
+#: ../svn/propedit-cmd.c:176
+#, c-format
+msgid "Cannot specify revision for editing versioned property '%s'"
+msgstr "编辑纳入版本控制的属性 “%s†时ä¸å¯æŒ‡å®šç‰ˆæœ¬"
+
+#: ../svn/propedit-cmd.c:204 ../svn/propset-cmd.c:172
+msgid "Explicit target argument required"
+msgstr "必须明确地æ供目标å‚æ•°"
+
+#: ../svn/propedit-cmd.c:271
+#, c-format
+msgid "'%s' does not appear to be a working copy path"
+msgstr "“%sâ€ä¸åƒæ˜¯å·¥ä½œå‰¯æœ¬è·¯å¾„"
+
+#: ../svn/propedit-cmd.c:348
+#, c-format
+msgid "No changes to property '%s' on '%s'\n"
+msgstr "属性 “%s†于 “%s†没有改å˜\n"
+
+#: ../svn/propget-cmd.c:66
+msgid "Error writing to stream"
+msgstr "写入æµå‡ºé”™"
+
+#: ../svn/propget-cmd.c:186 ../svn/proplist-cmd.c:156
+#: ../svn/proplist-cmd.c:160 ../svnlook/svnlook.c:1753
+#: ../svnlook/svnlook.c:1907
+#, fuzzy, c-format
+msgid ""
+"Inherited properties on '%s',\n"
+"from '%s':\n"
+msgstr "版本 %ld 上的未纳入版本控制的属性: \n"
+
+#. Not a --revprop
+#: ../svn/propget-cmd.c:196 ../svn/proplist-cmd.c:175
+#: ../svnlook/svnlook.c:1789 ../svnlook/svnlook.c:1942
+#, c-format
+msgid "Properties on '%s':\n"
+msgstr "“%s†上的属性: \n"
+
+#: ../svn/propget-cmd.c:326
+msgid "--verbose cannot be used with --revprop or --strict or --xml"
+msgstr "--verbose ä¸èƒ½ä¸Ž --revprop, --strict 或 --xml 共存"
+
+#: ../svn/propget-cmd.c:358 ../svn/proplist-cmd.c:214
+msgid "--show-inherited-props can't be used with --revprop"
+msgstr "--show-inherited-props ä¸èƒ½ä¸Ž --revprop 共存"
+
+#: ../svn/propget-cmd.c:425
+msgid ""
+"Strict output of property values only available for single-target, non-"
+"recursive propget operations"
+msgstr "精确的输出属性值åªé€‚用于å•ä¸€ç›®æ ‡çš„éžé€’å½’æ“作 propget"
+
+#: ../svn/proplist-cmd.c:246
+#, c-format
+msgid "Unversioned properties on revision %ld:\n"
+msgstr "版本 %ld 上的未纳入版本控制的属性: \n"
+
+#: ../svn/proplist-cmd.c:321
+msgid ""
+"Could not display properties of all targets because some targets don't exist"
+msgstr "因为一些目标ä¸å­˜åœ¨ï¼Œæ‰€ä»¥ä¸èƒ½æ˜¾ç¤ºå…¨éƒ¨ç›®æ ‡çš„属性"
+
+#: ../svn/proplist-cmd.c:326
+msgid ""
+"Could not display properties of all targets because some targets are not "
+"versioned"
+msgstr "因为一些目标没有版本化,所以ä¸èƒ½æ˜¾ç¤ºå…¨éƒ¨ç›®æ ‡çš„属性"
+
+#: ../svn/props.c:66
+msgid ""
+"Must specify the revision as a number, a date or 'HEAD' when operating on a "
+"revision property"
+msgstr "æ“作版本属性时,必须指定数字ã€æ—¥æœŸå½¢å¼çš„版本å·æˆ–“HEADâ€ã€‚"
+
+#: ../svn/props.c:73
+msgid "Wrong number of targets specified"
+msgstr "指定的目标数目错误"
+
+#: ../svn/props.c:82
+msgid "Either a URL or versioned item is required"
+msgstr "å¿…é¡»æä¾›URL或纳入版本控制的项目"
+
+#: ../svn/props.c:107
+#, c-format
+msgid ""
+"To turn off the %s property, use 'svn propdel';\n"
+"setting the property to '%s' will not turn it off."
+msgstr ""
+"使用 “svn propdel†关闭属性 %s;\n"
+"设置属性为 “%s†ä¸ä¼šå…³é—­å®ƒã€‚"
+
+#: ../svn/props.c:177
+#, c-format
+msgid "(To set the '%s' property, re-run with '--force'.)"
+msgstr "(请使用“--forceâ€é‡æ–°æ‰§è¡Œï¼Œè®¾ç½®â€œ%sâ€å±žæ€§ã€‚)"
+
+#: ../svn/props.c:182
+#, c-format
+msgid "(To edit the '%s' property, re-run with '--force'.)"
+msgstr "(请使用“--forceâ€é‡æ–°æ‰§è¡Œï¼Œç¼–辑“%sâ€å±žæ€§ã€‚)"
+
+#: ../svn/props.c:188
+#, c-format
+msgid "(To use the '%s' property, re-run with '--force'.)"
+msgstr "(请使用“--forceâ€é‡æ–°æ‰§è¡Œï¼Œä½¿ç”¨â€œ%sâ€å±žæ€§ã€‚)"
+
+#: ../svn/props.c:202
+#, fuzzy, c-format
+msgid "'%s' is not a valid %s property name; re-run with '--force' to set it"
+msgstr "“%sâ€ä¸æ˜¯æœ‰æ•ˆçš„ Subversion 属性å称"
+
+#: ../svn/props.c:208
+#, fuzzy, c-format
+msgid "'%s' is not a valid %s property name; re-run with '--force' to edit it"
+msgstr "“%sâ€ä¸æ˜¯æœ‰æ•ˆçš„ Subversion 属性å称"
+
+#: ../svn/props.c:215
+#, fuzzy, c-format
+msgid "'%s' is not a valid %s property name; re-run with '--force' to use it"
+msgstr "“%sâ€ä¸æ˜¯æœ‰æ•ˆçš„ Subversion 属性å称"
+
+#: ../svn/props.c:281 ../svn/props.c:332
+#, fuzzy, c-format
+msgid ""
+"'%s' is not a valid %s property name; did you mean '%s'?\n"
+"%s"
+msgstr "“%sâ€ä¸æ˜¯æœ‰æ•ˆçš„ Subversion 属性å称"
+
+#: ../svn/props.c:340
+#, fuzzy, c-format
+msgid ""
+"'%s' is not a valid %s property name\n"
+"Did you mean '%s' or '%s'?\n"
+"%s"
+msgstr "“%sâ€ä¸æ˜¯æœ‰æ•ˆçš„ Subversion 属性å称"
+
+#: ../svn/props.c:350
+#, fuzzy, c-format
+msgid ""
+"'%s' is not a valid %s property name\n"
+"Did you mean '%s', '%s' or '%s'?\n"
+"%s"
+msgstr "“%sâ€ä¸æ˜¯æœ‰æ•ˆçš„ Subversion 属性å称"
+
+#: ../svn/propset-cmd.c:132
+#, c-format
+msgid "Cannot specify revision for setting versioned property '%s'"
+msgstr "设置å—版本控制的属性 “%s†时ä¸èƒ½æŒ‡å®šç‰ˆæœ¬"
+
+#: ../svn/propset-cmd.c:165
+#, c-format
+msgid "Explicit target required ('%s' interpreted as prop value)"
+msgstr "必须明确地æ供目的 (“%sâ€è§£é‡Šä¸ºå±žæ€§å†…容)"
+
+#: ../svn/resolve-cmd.c:79
+msgid "missing --accept option"
+msgstr "缺少选项 --accept"
+
+#: ../svn/resolve-cmd.c:84
+msgid "invalid 'accept' ARG"
+msgstr "无效的 “accept†å‚æ•°"
+
+#: ../svn/resolve-cmd.c:127
+msgid "Failure occurred resolving one or more conflicts"
+msgstr "处ç†ä¸€ä¸ªæˆ–更多的冲çªå¤±è´¥"
+
+#: ../svn/revert-cmd.c:77
+msgid "Try 'svn revert --depth infinity' instead?"
+msgstr "å°è¯• “svn revert --depth infinityâ€ï¼Ÿ"
+
+#: ../svn/status-cmd.c:94
+#, c-format
+msgid " Text conflicts: %u\n"
+msgstr " 正文冲çªï¼š%u\n"
+
+#: ../svn/status-cmd.c:98
+#, c-format
+msgid " Property conflicts: %u\n"
+msgstr " 属性冲çªï¼š%u\n"
+
+#: ../svn/status-cmd.c:102
+#, c-format
+msgid " Tree conflicts: %u\n"
+msgstr " 树冲çªï¼š%u\n"
+
+#: ../svn/status-cmd.c:388
+#, c-format
+msgid ""
+"\n"
+"--- Changelist '%s':\n"
+msgstr ""
+"\n"
+"--- 修改列表 '%s':\n"
+
+#: ../svn/status.c:302
+#, c-format
+msgid "swapped places with %s"
+msgstr ""
+
+#: ../svn/status.c:316
+#, c-format
+msgid "moved from %s"
+msgstr "移自 %s"
+
+#: ../svn/status.c:327
+#, c-format
+msgid "moved to %s"
+msgstr "移到 %s"
+
+#: ../svn/svn.c:146
msgid "force operation to run"
msgstr "强制æ“作è¿è¡Œ"
+#: ../svn/svn.c:148
msgid "force validity of log message source"
msgstr "强制校验日志信æ¯èµ„æº"
+#: ../svn/svn.c:149 ../svn/svn.c:150 ../svnadmin/svnadmin.c:208
+#: ../svnadmin/svnadmin.c:211 ../svndumpfilter/svndumpfilter.c:1018
+#: ../svndumpfilter/svndumpfilter.c:1021 ../svnlook/svnlook.c:113
+#: ../svnlook/svnlook.c:125 ../svnsync/svnsync.c:243 ../svnsync/svnsync.c:245
msgid "show help on a subcommand"
msgstr "显示å­å‘½ä»¤å¸®åŠ©ä¿¡æ¯"
+#: ../svn/svn.c:151
msgid "specify log message ARG"
msgstr "指定日志信æ¯ARG"
+#: ../svn/svn.c:152
msgid "print nothing, or only summary information"
msgstr "ä¸æ‰“å°ä¿¡æ¯ï¼Œæˆ–åªæ‰“å°æ¦‚è¦ä¿¡æ¯"
+#: ../svn/svn.c:153
msgid "descend recursively, same as --depth=infinity"
msgstr "å‘下递归,与 --depth=infinity 相åŒ"
+#: ../svn/svn.c:154
msgid "obsolete; try --depth=files or --depth=immediates"
msgstr "过时;å°è¯• --depth=files 或 --depth=immediates"
+#: ../svn/svn.c:156
msgid ""
"the change made by revision ARG (like -r ARG-1:ARG)\n"
-" If ARG is negative this is like -r ARG:ARG-1"
+" If ARG is negative this is like -r ARG:ARG-1\n"
+" If ARG is of the form ARG1-ARG2 then this is "
+"like\n"
+" ARG1:ARG2, where ARG1 is inclusive"
msgstr ""
-"在ARG版本(å¦‚åŒ -r ARG-1:ARG)作的修改\n"
-" 如果ARG为负数则等价于 -r ARG:ARG-1"
+"版本 ARG (å¦‚åŒ -r ARG-1:ARG) åšçš„修改\n"
+" 如果 ARG 为负数则等价于 -r ARG:"
+"ARG-1 如果 ARG çš„æ ¼å¼æ˜¯ ARG1-ARG2,那么它等价于\n"
+" ARG1:ARG2ï¼ŒåŒ…å« ARG1"
+#: ../svn/svn.c:164
msgid ""
"ARG (some commands also take ARG1:ARG2 range)\n"
" A revision argument can be one of:\n"
" NUMBER revision number\n"
" '{' DATE '}' revision at start of the date\n"
" 'HEAD' latest in repository\n"
-" 'BASE' base rev of item's working copy\n"
+" 'BASE' base rev of item's working "
+"copy\n"
" 'COMMITTED' last commit at or before BASE\n"
" 'PREV' revision just before COMMITTED"
msgstr ""
@@ -6349,47 +10151,58 @@ msgstr ""
" 'COMMITTED' 最åŽæ交或基线之å‰\n"
" 'PREV' COMMITTEDçš„å‰ä¸€ç‰ˆæœ¬"
+#: ../svn/svn.c:179
msgid "read log message from file ARG"
msgstr "从文件ARG读å–日志信æ¯"
+#: ../svn/svn.c:181
msgid "give output suitable for concatenation"
msgstr "给予适åˆä¸²è”的输出"
+#: ../svn/svn.c:183
msgid "treat value as being in charset encoding ARG"
msgstr "å°†ARG的值视为字符编ç "
+#: ../svn/svn.c:184 ../svnadmin/svnadmin.c:214
+#: ../svndumpfilter/svndumpfilter.c:1024 ../svnlook/svnlook.c:167
+#: ../svnrdump/svnrdump.c:144 ../svnserve/svnserve.c:288
+#: ../svnsync/svnsync.c:241 ../svnversion/svnversion.c:140
msgid "show program version information"
msgstr "显示程åºç‰ˆæœ¬ä¿¡æ¯"
+#: ../svn/svn.c:185
msgid "print extra information"
msgstr "打å°é™„加信æ¯"
+#: ../svn/svn.c:186
msgid "display update information"
msgstr "显示更新信æ¯"
+#: ../svn/svn.c:187 ../svnrdump/svnrdump.c:128
msgid "specify a username ARG"
msgstr "指定用户å称 ARG"
+#: ../svn/svn.c:188 ../svnrdump/svnrdump.c:130
msgid "specify a password ARG"
msgstr "æŒ‡å®šå¯†ç  ARG"
-msgid ""
-"Default: '-u'. When Subversion is invoking an\n"
-" external diff program, ARG is simply passed along\n"
-" to the program. But when Subversion is using its\n"
-" default internal diff implementation, or when\n"
-" Subversion is displaying blame annotations, ARG\n"
-" could be any of the following:\n"
-" -u (--unified):\n"
-" Output 3 lines of unified context.\n"
-" -b (--ignore-space-change):\n"
-" Ignore changes in the amount of white space.\n"
-" -w (--ignore-all-space):\n"
-" Ignore all white space.\n"
-" --ignore-eol-style:\n"
-" Ignore changes in EOL style.\n"
-" -p (--show-c-function):\n"
-" Show C function name in diff output."
+#: ../svn/svn.c:190
+#, fuzzy
+msgid ""
+"Specify differencing options for external diff or\n"
+" internal diff or blame. Default: '-u'. Options "
+"are\n"
+" separated by spaces. Internal diff and blame "
+"take:\n"
+" -u, --unified: Show 3 lines of unified "
+"context\n"
+" -b, --ignore-space-change: Ignore changes in\n"
+" amount of white space\n"
+" -w, --ignore-all-space: Ignore all white "
+"space\n"
+" --ignore-eol-style: Ignore changes in EOL "
+"style\n"
+" -p, --show-c-function: Show C function name"
msgstr ""
"缺çœ: “-uâ€ã€‚当 Subversion 调用外部比较程åºæ—¶ï¼ŒARG 直接传给它。但是当\n"
" Subversion 使用缺çœçš„内置比较实现,或者正\n"
@@ -6401,12 +10214,15 @@ msgstr ""
" -w (--ignore-all-space):\n"
" 忽略所有的空白。\n"
" --ignore-eol-style:\n"
-" 忽略行尾样å¼çš„改å˜ã€‚ -p (--show-c-function):\n"
+" 忽略行尾样å¼çš„改å˜ã€‚\n"
+" -p (--show-c-function):\n"
" 在比较输出中显示 C 函数å称。"
+#: ../svn/svn.c:208
msgid "pass contents of file ARG as additional args"
msgstr "传递文件 ARG 内容为附件å‚æ•°"
+#: ../svn/svn.c:210
msgid ""
"limit operation by depth ARG ('empty', 'files',\n"
" 'immediates', or 'infinity')"
@@ -6414,6 +10230,7 @@ msgstr ""
"é™åˆ¶æ“作深度是 ARG ('empty', 'files',\n"
" 'immediates', 或 'infinity')"
+#: ../svn/svn.c:214
msgid ""
"set new working copy depth to ARG ('exclude',\n"
" 'empty', 'files', 'immediates', or 'infinity')"
@@ -6421,72 +10238,98 @@ msgstr ""
"设置工作副本的新深度为 ARG('exclude',\n"
" 'empty', 'files', 'immediates', 或 'infinity')"
+#: ../svn/svn.c:217 ../svnlook/svnlook.c:170
msgid "output in XML"
msgstr "输出为 XML"
+#: ../svn/svn.c:218
msgid "use strict semantics"
msgstr "使用严格的语法"
+#: ../svn/svn.c:220
msgid "do not cross copies while traversing history"
msgstr "查看历å²ä¸è¦è·¨è¶Šä¸åŒçš„副本"
-msgid "disregard default and svn:ignore property ignores"
+#: ../svn/svn.c:222
+#, fuzzy
+msgid ""
+"disregard default and svn:ignore and\n"
+" svn:global-ignores property ignores"
msgstr "忽略默认值和 svn:ignore 属性"
+#: ../svn/svn.c:226 ../svnrdump/svnrdump.c:140 ../svnsync/svnsync.c:187
msgid "do not cache authentication tokens"
msgstr "ä¸è¦ç¼“存用户认è¯ä»¤ç‰Œ"
+#: ../svn/svn.c:228 ../svnrdump/svnrdump.c:154 ../svnsync/svnsync.c:197
msgid ""
"accept SSL server certificates from unknown\n"
-" certificate authorities without prompting (but only\n"
+" certificate authorities without prompting (but "
+"only\n"
" with '--non-interactive')"
-msgstr "ä¸æ示的接å—未知的è¯ä¹¦é¢å‘机构å‘行的 SSL æœåŠ¡å™¨è¯ä¹¦(åªç”¨äºŽé€‰é¡¹ “--non-interactiveâ€)"
+msgstr ""
+"ä¸æ示的接å—未知的è¯ä¹¦é¢å‘机构å‘行的 SSL æœåŠ¡å™¨è¯ä¹¦(åªç”¨äºŽé€‰é¡¹ “--non-"
+"interactiveâ€)"
+
+#: ../svn/svn.c:234 ../svnrdump/svnrdump.c:132 ../svnsync/svnsync.c:179
+msgid ""
+"do no interactive prompting (default is to prompt\n"
+" only if standard input is a terminal device)"
+msgstr ""
-msgid "do no interactive prompting"
-msgstr "ä¸è¦äº¤äº’æ示"
+#: ../svn/svn.c:238 ../svnrdump/svnrdump.c:136 ../svnsync/svnsync.c:183
+#, fuzzy
+msgid ""
+"do interactive prompting even if standard input\n"
+" is not a terminal device"
+msgstr "如果版本库被其他进程å ç”¨ï¼Œç­‰å¾…而ä¸ç›´æŽ¥é€€å‡º"
+#: ../svn/svn.c:242
msgid "try operation but make no changes"
msgstr "å°è¯•æ“作但没有修改"
-msgid "do not print differences for deleted files"
-msgstr "ä¸è¦è¾“出删除文件造æˆçš„差异"
-
-msgid "notice ancestry when calculating differences"
-msgstr "比较差异时æ示原始信æ¯"
-
-msgid "ignore ancestry when calculating merges"
-msgstr "åˆå¹¶æ—¶å¿½ç•¥åŽŸå§‹ä¿¡æ¯"
+#: ../svn/svn.c:244
+msgid "disable merge tracking; diff nodes as if related"
+msgstr ""
+#: ../svn/svn.c:246
msgid "ignore externals definitions"
msgstr "忽略外部项目"
-msgid "use ARG as diff command"
-msgstr "使用 ARG 作为比较命令"
-
+#: ../svn/svn.c:247
msgid "use ARG as merge command"
msgstr "使用 ARG 作为åˆå¹¶å‘½ä»¤"
+#: ../svn/svn.c:248
msgid "use ARG as external editor"
msgstr "使用 ARG 作为外部编辑器"
+#: ../svn/svn.c:250
msgid "merge only mergeinfo differences"
msgstr "åªåˆå¹¶åˆå¹¶ä¿¡æ¯çš„差异"
+#: ../svn/svn.c:251
msgid "use ARG as the older target"
msgstr "使用 ARG 作为旧目标"
+#: ../svn/svn.c:252
msgid "use ARG as the newer target"
msgstr "使用 ARG 作为新目标"
+#: ../svn/svn.c:254
msgid "operate on a revision property (use with -r)"
msgstr "在版本属性上æ“作(使用-rå‚æ•°)"
+#: ../svn/svn.c:255
msgid "relocate via URL-rewriting"
msgstr "通过URL改写é‡æ–°å®šä½"
+#: ../svn/svn.c:257 ../svnadmin/svnadmin.c:256 ../svnrdump/svnrdump.c:126
+#: ../svnsync/svnsync.c:211
msgid "read user configuration files from directory ARG"
msgstr "从目录 ARG 读å–用户é…置文件"
+#: ../svn/svn.c:259 ../svnrdump/svnrdump.c:146 ../svnsync/svnsync.c:213
msgid ""
"set user configuration option in the format:\n"
" FILE:SECTION:OPTION=[VALUE]\n"
@@ -6498,12 +10341,15 @@ msgstr ""
" 例如:\n"
" servers:global:http-library=serf"
+#: ../svn/svn.c:266
msgid "enable automatic properties"
msgstr "å¯ç”¨è‡ªåŠ¨å±žæ€§"
+#: ../svn/svn.c:267
msgid "disable automatic properties"
msgstr "关闭自动属性"
+#: ../svn/svn.c:269
msgid ""
"use a different EOL marker than the standard\n"
" system marker for files with the svn:eol-style\n"
@@ -6514,33 +10360,39 @@ msgstr ""
" 系统中立的文件标记 svn:eol-style 属性å–值为 “nativeâ€ã€‚\n"
" ARG å¯ä»¥æ˜¯ä»¥ä¸‹ä¹‹ä¸€â€œLFâ€ï¼Œâ€œCRâ€ï¼Œâ€œCRLFâ€"
+#: ../svn/svn.c:276
msgid "maximum number of log entries"
msgstr "日值项最大值"
+#: ../svn/svn.c:277
msgid "don't unlock the targets"
msgstr "ä¸è¦è§£é”目标"
-msgid "show a summary of the results"
-msgstr "显示结果的概è¦"
-
+#: ../svn/svn.c:278
msgid "remove changelist association"
msgstr "删除修改列表耦åˆ"
+#: ../svn/svn.c:280
msgid "operate only on members of changelist ARG"
msgstr "åªèƒ½å¯¹ä¿®æ”¹åˆ—表 ARG çš„æˆå‘˜æ“作"
+#: ../svn/svn.c:282
msgid "don't delete changelists after commit"
msgstr "ä¸è¦åœ¨æ交åŽåˆ é™¤ä¿®æ”¹åˆ—表"
+#: ../svn/svn.c:283
msgid "keep path in working copy"
msgstr "在工作副本中ä¿ç•™è·¯å¾„"
+#: ../svn/svn.c:285
msgid "retrieve all revision properties"
msgstr "获å–所有版本属性"
+#: ../svn/svn.c:287
msgid "retrieve no revision properties"
msgstr "没有找回版本属性"
+#: ../svn/svn.c:289
msgid ""
"set revision property ARG in new revision\n"
" using the name[=value] format"
@@ -6548,27 +10400,35 @@ msgstr ""
"在新版本设置版本属性 ARG\n"
" ä½¿ç”¨æ ¼å¼ name[=value]"
+#: ../svn/svn.c:292
msgid "make intermediate directories"
msgstr "创建中间目录"
+#: ../svn/svn.c:294
msgid ""
"use/display additional information from merge\n"
" history"
msgstr "从åˆå¹¶åŽ†å²ä½¿ç”¨/显示é¢å¤–ä¿¡æ¯"
+#: ../svn/svn.c:298
msgid ""
"specify automatic conflict resolution action\n"
-" ('postpone', 'working', 'base', 'mine-conflict',\n"
+" ('postpone', 'working', 'base', 'mine-"
+"conflict',\n"
" 'theirs-conflict', 'mine-full', 'theirs-full',\n"
" 'edit', 'launch')\n"
-" (shorthand: 'p', 'mc', 'tc', 'mf', 'tf', 'e', 'l')"
+" (shorthand: 'p', 'mc', 'tc', 'mf', 'tf', 'e', "
+"'l')"
msgstr ""
"指定自动解决冲çªåŠ¨ä½œ\n"
-" ('postpone', 'working', 'base', 'mine-conflict',\n"
+" ('postpone', 'working', 'base', 'mine-"
+"conflict',\n"
" 'theirs-conflict', 'mine-full', 'theirs-full',\n"
" 'edit', 'launch')\n"
-" (shorthand: 'p', 'mc', 'tc', 'mf', 'tf', 'e', 'l')"
+" (shorthand: 'p', 'mc', 'tc', 'mf', 'tf', 'e', "
+"'l')"
+#: ../svn/svn.c:309
msgid ""
"specify which collection of revisions to display\n"
" ('merged', 'eligible')"
@@ -6576,18 +10436,22 @@ msgstr ""
"指定显示哪个版本集åˆ\n"
" ('merged', 'eligible')"
-msgid "merge a branch back into its parent branch"
-msgstr "åˆå¹¶åˆ†æ”¯å›žçˆ¶åˆ†æ”¯"
+#: ../svn/svn.c:313
+msgid "deprecated"
+msgstr "å·²ç»æ·˜æ±°"
+#: ../svn/svn.c:315
msgid ""
"number of leading path components to strip from\n"
" paths parsed from the patch file. --strip 0\n"
" is the default and leaves paths unmodified.\n"
" --strip 1 would change the path\n"
-" 'doc/fudge/crunchy.html' to 'fudge/crunchy.html'.\n"
+" 'doc/fudge/crunchy.html' to 'fudge/crunchy."
+"html'.\n"
" --strip 2 would leave just 'crunchy.html'\n"
" The expected component separator is '/' on all\n"
-" platforms. A leading '/' counts as one component."
+" platforms. A leading '/' counts as one "
+"component."
msgstr ""
"需è¦ä»Žè¡¥ä¸æ–‡ä»¶ä¸­çš„路径中è£å‰ªçš„å‰å¯¼è·¯å¾„组件数é‡ã€‚\n"
" 默认 --strip 0 ä¸ä¿®æ”¹è·¯å¾„。指定 --strip 1 会将\n"
@@ -6596,29 +10460,78 @@ msgstr ""
" 'crunchy.html' 。在所有平å°ä¸­æœŸæœ›çš„组件分隔符\n"
" 都是 '/'。å‰å¯¼ '/' 被计算为一个组件。"
-msgid "don't diff copied or moved files with their source"
-msgstr "请ä¸è¦å°†å¤åˆ¶æˆ–移动的文件与其æºæ–‡ä»¶æ¯”较"
-
+#: ../svn/svn.c:331
msgid "don't expand keywords"
msgstr "ä¸è¦å±•å¼€å…³é”®å­—"
+#: ../svn/svn.c:333
msgid "apply the unidiff in reverse"
msgstr "åå‘应用补ä¸"
+#: ../svn/svn.c:335
msgid "ignore whitespace during pattern matching"
msgstr "在模å¼åŒ¹é…时,忽略空白"
+#: ../svn/svn.c:336
msgid "produce diff output"
msgstr "产生差异输出"
+#. maps to show_diff
+#. diff options
+#: ../svn/svn.c:338 ../svnlook/svnlook.c:137
+msgid "use ARG as diff command"
+msgstr "使用 ARG 作为比较命令"
+
+#: ../svn/svn.c:340
msgid "override diff-cmd specified in config file"
msgstr "覆盖é…置文件中指定的 diff-cmd"
+#: ../svn/svn.c:342 ../svnlook/svnlook.c:131
+msgid "do not print differences for added files"
+msgstr "ä¸è¦è¾“出增加文件造æˆçš„差异"
+
+#: ../svn/svn.c:344 ../svnlook/svnlook.c:134
+msgid "do not print differences for deleted files"
+msgstr "ä¸è¦è¾“出删除文件造æˆçš„差异"
+
+#: ../svn/svn.c:346
+msgid "don't diff copied or moved files with their source"
+msgstr "请ä¸è¦å°†å¤åˆ¶æˆ–移动的文件与其æºæ–‡ä»¶æ¯”较"
+
+#: ../svn/svn.c:348
+msgid "diff unrelated nodes as delete and add"
+msgstr ""
+
+#: ../svn/svn.c:349
+msgid "show a summary of the results"
+msgstr "显示结果的概è¦"
+
+#: ../svn/svn.c:351
msgid "use git's extended diff format"
msgstr "使用 git 的扩展差异格å¼"
+#: ../svn/svn.c:353 ../svnlook/svnlook.c:140
+msgid "ignore properties during the operation"
+msgstr "æ“作时忽略属性"
+
+#: ../svn/svn.c:355 ../svnlook/svnlook.c:143
+msgid "show only properties during the operation"
+msgstr "æ“作时åªæ˜¾ç¤ºå±žæ€§"
+
+#: ../svn/svn.c:357
+#, fuzzy
+msgid ""
+"generate diff suitable for generic third-party\n"
+" patch tools; currently the same as\n"
+" --show-copies-as-adds --ignore-properties"
+msgstr ""
+"生æˆé€‚用于第三方工具的差异格å¼ï¼›å½“å‰ç­‰ä»·äºŽ\n"
+" --show-copies-as-adds --ignore-properties\n"
+
+#: ../svn/svn.c:365
+#, fuzzy
msgid ""
-"Allow merge into mixed-revision working copy.\n"
+"Allow operation on mixed-revision working copy.\n"
" Use of this option is not recommended!\n"
" Please run 'svn update' instead."
msgstr ""
@@ -6626,6 +10539,27 @@ msgstr ""
" ä¸å»ºè®®ä½¿ç”¨æ­¤é€‰é¡¹!\n"
" 请先执行 'svn update' 。"
+#: ../svn/svn.c:371
+msgid ""
+"Also commit file and dir externals reached by\n"
+" recursion. This does not include externals with "
+"a\n"
+" fixed revision. (See the svn:externals property)"
+msgstr ""
+
+#: ../svn/svn.c:377
+msgid "retrieve target's inherited properties"
+msgstr "获å–目标继承的属性"
+
+#: ../svn/svn.c:379
+msgid "use ARG as search pattern (glob syntax)"
+msgstr ""
+
+#: ../svn/svn.c:381
+msgid "combine ARG with the previous search pattern"
+msgstr ""
+
+#: ../svn/svn.c:429
msgid ""
"Put files and directories under version control, scheduling\n"
"them for addition to repository. They will be added in next commit.\n"
@@ -6634,9 +10568,11 @@ msgstr ""
"把文件和目录纳入版本控制,通过调度加到版本库。它们会在下一次æ交时加入。\n"
"用法: add 路径...\n"
+#: ../svn/svn.c:434
msgid "add intermediate parents"
msgstr "增加中间父目录"
+#: ../svn/svn.c:437
msgid ""
"Output the content of specified files or\n"
"URLs with revision and author information in-line.\n"
@@ -6652,6 +10588,7 @@ msgstr ""
" 如果指定了版本,将从指定的版本开始查找。\n"
" \n"
+#: ../svn/svn.c:446
msgid ""
"Output the content of specified files or URLs.\n"
"usage: cat TARGET[@REV]...\n"
@@ -6665,6 +10602,7 @@ msgstr ""
" 如果指定了版本,将从指定的版本开始查找。\n"
" \n"
+#: ../svn/svn.c:454
msgid ""
"Associate (or dissociate) changelist CLNAME with the named files.\n"
"usage: 1. changelist CLNAME PATH...\n"
@@ -6674,6 +10612,7 @@ msgstr ""
"使用: 1. changelist CLNAME PATH...\n"
" 2. changelist --remove PATH...\n"
+#: ../svn/svn.c:460
msgid ""
"Check out a working copy from a repository.\n"
"usage: checkout URL[@REV]... [PATH]\n"
@@ -6710,12 +10649,15 @@ msgstr ""
"\n"
" 如果使用了 “--force†选项,在工作副本中未版本控制的障ç¢è·¯å¾„,ä¸ä¼šè‡ªåŠ¨å¯¼\n"
" 致签出失败。 如果障ç¢è·¯å¾„与版本库中的对应路径类型相åŒ(文件或目录),它将æˆ\n"
-" 为å—版本控制的路径,但是内容ä¸æ”¹å˜ã€‚它æ„味ç€éšœç¢è·¯å¾„çš„å­©å­ï¼Œå¦‚果也是障ç¢è·¯\n"
-" 径,那么也会å—版本控制。对于障ç¢è·¯å¾„中的文件,如果与版本库内的ä¸åŒï¼Œå°†è§†ä¸ºå·¥\n"
+" 为å—版本控制的路径,但是内容ä¸æ”¹å˜ã€‚它æ„味ç€éšœç¢è·¯å¾„çš„å­©å­ï¼Œå¦‚果也是障ç¢"
+"è·¯\n"
+" 径,那么也会å—版本控制。对于障ç¢è·¯å¾„中的文件,如果与版本库内的ä¸åŒï¼Œå°†è§†ä¸º"
+"å·¥\n"
" 作副本å‘生本地修改。版本库中的所有属性都应用于障ç¢è·¯å¾„。\n"
"\n"
" å‚è§ â€œsvn help update†以获å–报告执行动作的字符列表。\n"
+#: ../svn/svn.c:487
msgid ""
"Recursively clean up the working copy, removing locks, resuming\n"
"unfinished operations, etc.\n"
@@ -6724,6 +10666,7 @@ msgstr ""
"递归清ç†å·¥ä½œå‰¯æœ¬ï¼Œåˆ é™¤é”,继续未完æˆæ“作,等等。\n"
"用法: cleanup [路径...]\n"
+#: ../svn/svn.c:493
msgid ""
"Send changes from your working copy to the repository.\n"
"usage: commit [PATH...]\n"
@@ -6740,26 +10683,25 @@ msgstr ""
" 选项,编辑器会被å¯åŠ¨ã€‚如果有目标是é”定的或者包å«é”定æ¡ç›®ï¼Œåˆ™åœ¨æˆåŠŸ\n"
" æ交åŽä¼šè¢«è§£é”。\n"
+#: ../svn/svn.c:504
+#, fuzzy
msgid ""
-"Duplicate something in working copy or repository, remembering\n"
-"history.\n"
+"Copy files and directories in a working copy or repository.\n"
"usage: copy SRC[@REV]... DST\n"
"\n"
-"When copying multiple sources, they will be added as children of DST,\n"
-"which must be a directory.\n"
-"\n"
" SRC and DST can each be either a working copy (WC) path or URL:\n"
" WC -> WC: copy and schedule for addition (with history)\n"
" WC -> URL: immediately commit a copy of WC to URL\n"
" URL -> WC: check out URL into WC, schedule for addition\n"
" URL -> URL: complete server-side copy; used to branch and tag\n"
-" All the SRCs must be of the same type.\n"
+" All the SRCs must be of the same type. When copying multiple sources,\n"
+" they will be added as children of DST, which must be a directory.\n"
"\n"
-"WARNING: For compatibility with previous versions of Subversion,\n"
-"copies performed using two working copy paths (WC -> WC) will not\n"
-"contact the repository. As such, they may not, by default, be able\n"
-"to propagate merge tracking information from the source of the copy\n"
-"to the destination.\n"
+" WARNING: For compatibility with previous versions of Subversion,\n"
+" copies performed using two working copy paths (WC -> WC) will not\n"
+" contact the repository. As such, they may not, by default, be able\n"
+" to propagate merge tracking information from the source of the copy\n"
+" to the destination.\n"
msgstr ""
"在工作副本或版本库中å¤åˆ¶æ•°æ®ï¼Œä¿ç•™åŽ†å²ã€‚\n"
"用法: copy SRC[@REV]... DST\n"
@@ -6777,6 +10719,7 @@ msgstr ""
"æ“作ä¸ä¼šä¸Žç‰ˆæœ¬åº“通信。åŒæ ·åœ°ï¼Œåœ¨ç¼ºçœæƒ…况下,ä¸èƒ½ä»Žå¤åˆ¶æºåˆ°ç›®çš„地传播åˆ\n"
"并跟踪信æ¯ã€‚\n"
+#: ../svn/svn.c:523
msgid ""
"Remove files and directories from version control.\n"
"usage: 1. delete PATH...\n"
@@ -6804,30 +10747,48 @@ msgstr ""
"\n"
" 2ã€æ¯ä¸ª URL 指定的项目会通过立å³æ交从版本库中删除。\n"
+#: ../svn/svn.c:539
+#, fuzzy
msgid ""
-"Display the differences between two revisions or paths.\n"
-"usage: 1. diff [-c M | -r N[:M]] [TARGET[@REV]...]\n"
-" 2. diff [-r N[:M]] --old=OLD-TGT[@OLDREV] [--new=NEW-TGT[@NEWREV]] \\\n"
+"Display local changes or differences between two revisions or paths.\n"
+"usage: 1. diff\n"
+" 2. diff [-c M | -r N[:M]] [TARGET[@REV]...]\n"
+" 3. diff [-r N[:M]] --old=OLD-TGT[@OLDREV] [--new=NEW-TGT[@NEWREV]] "
+"\\\n"
" [PATH...]\n"
-" 3. diff OLD-URL[@OLDREV] NEW-URL[@NEWREV]\n"
+" 4. diff OLD-URL[@OLDREV] NEW-URL[@NEWREV]\n"
+" 5. diff OLD-URL[@OLDREV] NEW-PATH[@NEWREV]\n"
+" 6. diff OLD-PATH[@OLDREV] NEW-URL[@NEWREV]\n"
+"\n"
+" 1. Use just 'svn diff' to display local modifications in a working copy.\n"
"\n"
-" 1. Display the changes made to TARGETs as they are seen in REV between\n"
+" 2. Display the changes made to TARGETs as they are seen in REV between\n"
" two revisions. TARGETs may be all working copy paths or all URLs.\n"
" If TARGETs are working copy paths, N defaults to BASE and M to the\n"
" working copy; if URLs, N must be specified and M defaults to HEAD.\n"
" The '-c M' option is equivalent to '-r N:M' where N = M-1.\n"
" Using '-c -M' does the reverse: '-r M:N' where N = M-1.\n"
"\n"
-" 2. Display the differences between OLD-TGT as it was seen in OLDREV and\n"
+" 3. Display the differences between OLD-TGT as it was seen in OLDREV and\n"
" NEW-TGT as it was seen in NEWREV. PATHs, if given, are relative to\n"
" OLD-TGT and NEW-TGT and restrict the output to differences for those\n"
" paths. OLD-TGT and NEW-TGT may be working copy paths or URL[@REV].\n"
-" NEW-TGT defaults to OLD-TGT if not specified. -r N makes OLDREV default\n"
+" NEW-TGT defaults to OLD-TGT if not specified. -r N makes OLDREV "
+"default\n"
" to N, -r N:M makes OLDREV default to N and NEWREV default to M.\n"
+" If OLDREV or NEWREV are not specified, they default to WORKING for\n"
+" working copy targets and to HEAD for URL targets.\n"
"\n"
-" 3. Shorthand for 'svn diff --old=OLD-URL[@OLDREV] --new=NEW-URL[@NEWREV]'\n"
+" Either or both OLD-TGT and NEW-TGT may also be paths to unversioned\n"
+" targets. Revisions cannot be specified for unversioned targets.\n"
+" Both targets must be of the same node kind (file or directory).\n"
+" Diffing unversioned targets against URL targets is not supported.\n"
"\n"
-" Use just 'svn diff' to display local modifications in a working copy.\n"
+" 4. Shorthand for 'svn diff --old=OLD-URL[@OLDREV] --new=NEW-URL[@NEWREV]'\n"
+" 5. Shorthand for 'svn diff --old=OLD-URL[@OLDREV] --new=NEW-PATH"
+"[@NEWREV]'\n"
+" 6. Shorthand for 'svn diff --old=OLD-PATH[@OLDREV] --new=NEW-URL"
+"[@NEWREV]'\n"
msgstr ""
"显示两个版本或路径的差异。\n"
"用法: 1. diff [-c M | -r N[:M]] [TARGET[@REV]...]\n"
@@ -6837,17 +10798,20 @@ msgstr ""
"\n"
" 1ã€æ˜¾ç¤ºç‰ˆæœ¬ REV 中 TARGET 在两个ä¸åŒçš„版本之间的差异。TARGET è¦ä¹ˆå…¨æ˜¯\n"
" 工作副本路径,è¦ä¹ˆå…¨æ˜¯ URL。如果 TARGET 是工作副本路径,N 默认为\n"
-" BASE,M 默认为工作副本;如果 TARGET 是 URL,N 必须指定, M 默认为 HEAD。\n"
+" BASE,M 默认为工作副本;如果 TARGET 是 URL,N 必须指定, M 默认为 "
+"HEAD。\n"
" “-c M†等价于 “-r M-1:Mâ€ï¼Œâ€œ-c -M†等价于 “-r M:M-1â€ã€‚\n"
"\n"
" 2ã€æ˜¾ç¤ºæ–°æ—§ç‰ˆæœ¬ä¸­å¯¹åº”目标的差异。PATH 是相对于新旧目标的相对路径,\n"
-" 它é™åˆ¶åªè¾“出这些路径上的差异。新旧目标å¯ä»¥æ˜¯å·¥ä½œå‰¯æœ¬è·¯å¾„æˆ–åœ°å€ URL[@REV]。\n"
+" 它é™åˆ¶åªè¾“出这些路径上的差异。新旧目标å¯ä»¥æ˜¯å·¥ä½œå‰¯æœ¬è·¯å¾„æˆ–åœ°å€ URL"
+"[@REV]。\n"
" 新目标默认与旧目标相åŒï¼ŒOLDREV 默认为 N,NEWREV 默认为 M。\n"
"\n"
" 3ã€â€œsvn diff --old=OLD-URL[@OLDREV] --new=NEW-URL[@NEWREV]†的简写。\n"
"\n"
" 使用ä¸åŠ å‚æ•°çš„ “svn diff†显示工作副本中的本地修改。\n"
+#: ../svn/svn.c:580
msgid ""
"Create an unversioned copy of a tree.\n"
"usage: 1. export [-r REV] URL[@PEGREV] [PATH]\n"
@@ -6885,6 +10849,7 @@ msgstr ""
" 如果指定了 PEGREV ,将从指定的版本本开始查找。\n"
"\n"
+#: ../svn/svn.c:602
msgid ""
"Describe the usage of this program or its subcommands.\n"
"usage: help [SUBCOMMAND...]\n"
@@ -6892,6 +10857,7 @@ msgstr ""
"æ述本程åºæˆ–å…¶å­å‘½ä»¤çš„用法。\n"
"用法: help [å­å‘½ä»¤...]\n"
+#: ../svn/svn.c:608
msgid ""
"Commit an unversioned file or tree into the repository.\n"
"usage: import [PATH] URL\n"
@@ -6911,8 +10877,10 @@ msgstr ""
" 如果çœç•¥ PATH,则默认为 “.â€ã€‚\n"
" 父目录会根æ®éœ€è¦åœ¨ç‰ˆæœ¬åº“内创建。\n"
" 如果 PATH 是目录,则其下的内容直接加入到 URL 指定的ä½ç½®å†…。\n"
-" 如果使用了 “--forceâ€ï¼Œé‚£ä¹ˆä¸èƒ½çº³å…¥ç‰ˆæœ¬æŽ§åˆ¶çš„项目,例如设备文件,管é“等,会被忽略。\n"
+" 如果使用了 “--forceâ€ï¼Œé‚£ä¹ˆä¸èƒ½çº³å…¥ç‰ˆæœ¬æŽ§åˆ¶çš„项目,例如设备文件,管é“等,会"
+"被忽略。\n"
+#: ../svn/svn.c:622
msgid ""
"Display information about a local or remote item.\n"
"usage: info [TARGET[@REV]...]\n"
@@ -6928,6 +10896,7 @@ msgstr ""
" TARGET å¯ä»¥æ˜¯å·¥ä½œå‰¯æœ¬ä¸­çš„路径或版本库中的 URL。REV 指定从哪个\n"
" 版本开始查找目标。\n"
+#: ../svn/svn.c:632
msgid ""
"List directory entries in the repository.\n"
"usage: list [TARGET[@REV]...]\n"
@@ -6964,6 +10933,11 @@ msgstr ""
" å¤§å° (以字节为å•ä½)\n"
" 最åŽä¸€æ¬¡æ交的日期与时间\n"
+#: ../svn/svn.c:652
+msgid "include externals definitions"
+msgstr "包å«å¤–部定义"
+
+#: ../svn/svn.c:655
msgid ""
"Lock working copy paths or URLs in the repository, so that\n"
"no other user can commit changes to them.\n"
@@ -6976,15 +10950,20 @@ msgstr ""
"\n"
" 使用 --force 选项å¯ä»¥ä»Žå…¶ä»–用户或工作副本窃å–到é”。\n"
+#: ../svn/svn.c:661
msgid "read lock comment from file ARG"
msgstr "从文件 ARG 读å–加é”注释"
+#: ../svn/svn.c:662
msgid "specify lock comment ARG"
msgstr "指定加é”注释ARG"
+#: ../svn/svn.c:663
msgid "force validity of lock comment source"
msgstr "强制校验é”定注释æº"
+#: ../svn/svn.c:666
+#, fuzzy
msgid ""
"Show the log messages for a set of revision(s) and/or path(s).\n"
"usage: 1. log [PATH][@REV]\n"
@@ -7018,34 +10997,70 @@ msgid ""
" The --depth option is only valid in combination with the --diff option\n"
" and limits the scope of the displayed diff to the specified depth.\n"
"\n"
+" If the --search option is used, log messages are displayed only if the\n"
+" provided search pattern matches any of the author, date, log message\n"
+" text (unless --quiet is used), or, if the --verbose option is also\n"
+" provided, a changed path.\n"
+" The search pattern may include \"glob syntax\" wildcards:\n"
+" ? matches any single character\n"
+" * matches a sequence of arbitrary characters\n"
+" [abc] matches any of the characters listed inside the brackets\n"
+" If multiple --search options are provided, a log message is shown if\n"
+" it matches any of the provided search patterns. If the --search-and\n"
+" option is used, that option's argument is combined with the pattern\n"
+" from the previous --search or --search-and option, and a log message\n"
+" is shown only if it matches the combined search pattern.\n"
+" If --limit is used in combination with --search, --limit restricts the\n"
+" number of log messages searched, rather than restricting the output\n"
+" to a particular number of matching log messages.\n"
+"\n"
" Examples:\n"
-" svn log\n"
-" svn log foo.c\n"
-" svn log bar.c@42\n"
-" svn log http://www.example.com/repo/project/foo.c\n"
-" svn log http://www.example.com/repo/project foo.c bar.c\n"
-" svn log http://www.example.com/repo/project@50 foo.c bar.c\n"
+"\n"
+" Show the latest 5 log messages for the current working copy\n"
+" directory and display paths changed in each commit:\n"
+" svn log -l 5 -v\n"
+"\n"
+" Show the log for bar.c as of revision 42:\n"
+" svn log bar.c@42\n"
+"\n"
+" Show log messages and diffs for each commit to foo.c:\n"
+" svn log --diff http://www.example.com/repo/project/foo.c\n"
+" (Because the above command uses a full URL it does not require\n"
+" a working copy.)\n"
+"\n"
+" Show log messages for the children foo.c and bar.c of the directory\n"
+" '/trunk' as it appeared in revision 50, using the ^/ URL shortcut:\n"
+" svn log ^/trunk@50 foo.c bar.c\n"
+"\n"
+" Show the log messages for any incoming changes to foo.c during the\n"
+" next 'svn update':\n"
+" svn log -r BASE:HEAD foo.c\n"
+"\n"
+" Show the log message for the revision in which /branches/foo\n"
+" was created:\n"
+" svn log --stop-on-copy --limit 1 -r0:HEAD ^/branches/foo\n"
msgstr ""
"显示一组版本与/或路径的日志信æ¯ã€‚\n"
"用法: 1ã€log [PATH][@REV]\n"
" 2ã€log URL[@REV] [PATH...]\n"
"\n"
-" 1ã€æ˜¾ç¤ºä¸Žæœ¬åœ° PATH (默认: “.â€) 对应的 URL 的日志信æ¯ã€‚如果指定了 REV,版本\n"
+" 1ã€æ˜¾ç¤ºä¸Žæœ¬åœ° PATH (默认: “.â€) 对应的 URL 的日志信æ¯ã€‚如果指定了 REV,版"
+"本\n"
" 范围是 REV:1。默认的版本范围是 BASE:1,因为 URL 未必在 HEAD 中存在。\n"
"\n"
" 2ã€æ˜¾ç¤º URL 中 PATH (默认: “.â€) 的日志信æ¯ã€‚如果指定了 REV,版本范围是\n"
" REV:1。å¦åˆ™ç‰ˆæœ¬èŒƒå›´æ˜¯ HEAD:1。\n"
"\n"
-" å¯ä»¥æŒ‡å®šå¤šä¸ª “-c†或 “-r†选项 (但是ä¸å…许åŒæ—¶ä½¿ç”¨ “-c†和 “-r†选项),以åŠ\n"
+" å¯ä»¥æŒ‡å®šå¤šä¸ª “-c†或 “-r†选项 (但是ä¸å…许åŒæ—¶ä½¿ç”¨ “-c†和 “-r†选项),以"
+"åŠ\n"
" æ··åˆä½¿ç”¨å‰å‘å’ŒåŽå‘范围。\n"
"\n"
" 使用 -v 时,在日志信æ¯ä¸­æ˜¾ç¤ºå—å½±å“的路径å。\n"
" 使用 -q 时,ä¸æ˜¾ç¤ºæ—¥å¿—ä¿¡æ¯ä¸»ä½“ (请注æ„,它å¯ä¸Ž -v 并存)。\n"
"\n"
" æ¯æ¡æ—¥å¿—ä¿¡æ¯åªä¼šæ˜¾ç¤ºä¸€æ¬¡ï¼Œå³ä½¿æŒ‡å®šäº†æ­¤ç‰ˆæœ¬æ¶‰åŠåˆ°çš„多个路径。默认日志信æ¯\n"
-" 会追溯å¤åˆ¶åŽ†å²ï¼›ä½¿ç”¨ --stop-on-copy å¯ä»¥å…³é—­è¿™ç§è¡Œä¸ºï¼Œè¿™å¯ä»¥ç”¨æ¥æ‰¾å‡ºåˆ†æ”¯ç‚¹ã€‚\n"
-"\n"
-" 选项 --depth åªèƒ½ä¸Žé€‰é¡¹ --diff 组åˆä½¿ç”¨ï¼Œç”¨æ¥é™åˆ¶åœ¨æŒ‡å®šè·¯å¾„上显示差异的范围。\n"
+" 会追溯å¤åˆ¶åŽ†å²ï¼›ä½¿ç”¨ --stop-on-copy å¯ä»¥å…³é—­è¿™ç§è¡Œä¸ºï¼Œè¿™å¯ä»¥ç”¨æ¥æ‰¾å‡ºåˆ†æ”¯"
+"点。\n"
"\n"
" 范例: \n"
" svn log\n"
@@ -7055,37 +11070,37 @@ msgstr ""
" svn log http://www.example.com/repo/project foo.c bar.c\n"
" svn log http://www.example.com/repo/project@50 foo.c bar.c\n"
+#: ../svn/svn.c:744
msgid "retrieve revision property ARG"
msgstr "获å–版本属性 ARG"
+#: ../svn/svn.c:745
msgid "the change made in revision ARG"
msgstr "版本 ARG 引起的改å˜"
#. For this large section, let's keep it unindented for easier
#. * viewing/editing. It has been vim-treated with a textwidth=75 and 'gw'
#. * (with quotes and newlines removed).
+#: ../svn/svn.c:751
msgid ""
"Merge changes into a working copy.\n"
"usage: 1. merge SOURCE[@REV] [TARGET_WCPATH]\n"
-" (the 'sync' merge)\n"
+" (the 'complete' merge)\n"
" 2. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [TARGET_WCPATH]\n"
" (the 'cherry-pick' merge)\n"
-" 3. merge --reintegrate SOURCE[@REV] [TARGET_WCPATH]\n"
-" (the 'reintegrate' merge)\n"
-" 4. merge SOURCE1[@N] SOURCE2[@M] [TARGET_WCPATH]\n"
+" 3. merge SOURCE1[@REV1] SOURCE2[@REV2] [TARGET_WCPATH]\n"
" (the '2-URL' merge)\n"
"\n"
-" 1. This form is called a 'sync' (or 'catch-up') merge:\n"
+" 1. This form, with one source path and no revision range, is called\n"
+" a 'complete' merge:\n"
"\n"
" svn merge SOURCE[@REV] [TARGET_WCPATH]\n"
"\n"
-" A sync merge is used to fetch all the latest changes made on a parent\n"
-" branch. In other words, the target branch has originally been created\n"
-" by copying the source branch, and any changes committed on the source\n"
-" branch since branching are applied to the target branch. This uses\n"
-" merge tracking to skip all those revisions that have already been\n"
-" merged, so a sync merge can be repeated periodically to stay up-to-\n"
-" date with the source branch.\n"
+" The complete merge is used for the 'sync' and 'reintegrate' merges\n"
+" in the 'feature branch' pattern described below. It finds all the\n"
+" changes on the source branch that have not already been merged to the\n"
+" target branch, and merges them into the working copy. Merge tracking\n"
+" is used to know which changes have already been merged.\n"
"\n"
" SOURCE specifies the branch from where the changes will be pulled, and\n"
" TARGET_WCPATH specifies a working copy of the target branch to which\n"
@@ -7101,27 +11116,61 @@ msgid ""
" used, and the default value of 'REV' is the base revision (usually the\n"
" revision last updated to).\n"
"\n"
-" TARGET_WCPATH is a working copy path; if omitted, '.' is assumed.\n"
+" TARGET_WCPATH is a working copy path; if omitted, '.' is generally\n"
+" assumed. There are some special cases:\n"
"\n"
-" - Sync Merge Example -\n"
+" - If SOURCE is a URL:\n"
+"\n"
+" - If the basename of the URL and the basename of '.' are the\n"
+" same, then the differences are applied to '.'. Otherwise,\n"
+" if a file with the same basename as that of the URL is found\n"
+" within '.', then the differences are applied to that file.\n"
+" In all other cases, the target defaults to '.'.\n"
+"\n"
+" - If SOURCE is a working copy path:\n"
"\n"
-" A feature is being developed on a branch called 'feature', which has\n"
-" originally been a copy of trunk. The feature branch has been regularly\n"
-" synced with trunk to keep up with the changes made there. The previous\n"
-" sync merges are not shown on this diagram, and the last of them was\n"
-" done when HEAD was r100. Currently, HEAD is r200.\n"
+" - If the source is a file, then differences are applied to that\n"
+" file (useful for reverse-merging earlier changes). Otherwise,\n"
+" if the source is a directory, then the target defaults to '.'.\n"
"\n"
-" feature +------------------------o-----\n"
-" / ^\n"
-" / ............ |\n"
-" / . . /\n"
-" trunk ------+------------L--------------R------\n"
-" r100 r200\n"
+" In normal usage the working copy should be up to date, at a single\n"
+" revision, with no local modifications and no switched subtrees.\n"
+"\n"
+" - The 'Feature Branch' Merging Pattern -\n"
+"\n"
+" In this commonly used work flow, known also as the 'development\n"
+" branch' pattern, a developer creates a branch and commits a series of\n"
+" changes that implement a new feature. The developer periodically\n"
+" merges all the latest changes from the parent branch so as to keep the\n"
+" development branch up to date with those changes. When the feature is\n"
+" complete, the developer performs a merge from the feature branch to\n"
+" the parent branch to re-integrate the changes.\n"
+"\n"
+" parent --+----------o------o-o-------------o--\n"
+" \\ \\ \\ /\n"
+" \\ merge merge merge\n"
+" \\ \\ \\ /\n"
+" feature +--o-o-------o----o-o----o-------\n"
+"\n"
+" A merge from the parent branch to the feature branch is called a\n"
+" 'sync' or 'catch-up' merge, and a merge from the feature branch to the\n"
+" parent branch is called a 'reintegrate' merge.\n"
+"\n"
+" - Sync Merge Example -\n"
+" ............\n"
+" . .\n"
+" trunk --+------------L--------------R------\n"
+" \\ \\\n"
+" \\ |\n"
+" \\ v\n"
+" feature +------------------------o-----\n"
+" r100 r200\n"
"\n"
" Subversion will locate all the changes on 'trunk' that have not yet\n"
" been merged into the 'feature' branch. In this case that is a single\n"
-" range, r100:200. In the diagram above, L marks the left side\n"
-" (trunk@100) and R marks the right side (trunk@200) of the merge. The\n"
+" range, r100:200. In the diagram above, L marks the left side "
+"(trunk@100)\n"
+" and R marks the right side (trunk@200) of the merge source. The\n"
" difference between L and R will be applied to the target working copy\n"
" path. In this case, the working copy is a clean checkout of the entire\n"
" 'feature' branch.\n"
@@ -7136,6 +11185,39 @@ msgid ""
" others. You can review the changes and you may have to resolve\n"
" conflicts before you commit the merge.\n"
"\n"
+" - Reintegrate Merge Example -\n"
+"\n"
+" The feature branch was last synced with trunk up to revision X. So the\n"
+" difference between trunk@X and feature@HEAD contains the complete set\n"
+" of changes that implement the feature, and no other changes. These\n"
+" changes are applied to trunk.\n"
+"\n"
+" rW rX\n"
+" trunk ------+--------------------L------------------o\n"
+" \\ . ^\n"
+" \\ ............. /\n"
+" \\ . /\n"
+" feature +--------------------------------R\n"
+"\n"
+" In the diagram above, L marks the left side (trunk@X) and R marks the\n"
+" right side (feature@HEAD) of the merge. The difference between the\n"
+" left and right side is merged into trunk, the target.\n"
+"\n"
+" To perform the merge, have a clean working copy of trunk and run the\n"
+" following command in its top-level directory:\n"
+"\n"
+" svn merge ^/feature\n"
+"\n"
+" To prevent unnecessary merge conflicts, a reintegrate merge requires\n"
+" that TARGET_WCPATH is not a mixed-revision working copy, has no local\n"
+" modifications, and has no switched subtrees.\n"
+"\n"
+" A reintegrate merge also requires that the source branch is coherently\n"
+" synced with the target -- in the above example, this means that all\n"
+" revisions between the branch point W and the last merged revision X\n"
+" are merged to the feature branch, so that there are no unmerged\n"
+" revisions in-between.\n"
+"\n"
"\n"
" 2. This form is called a 'cherry-pick' merge:\n"
"\n"
@@ -7153,7 +11235,9 @@ msgid ""
" path, the corresponding URL of the path is used, and the default value\n"
" of 'REV' is the base revision (usually the revision last updated to).\n"
"\n"
-" TARGET_WCPATH is a working copy path; if omitted, '.' is assumed.\n"
+" TARGET_WCPATH is a working copy path; if omitted, '.' is generally\n"
+" assumed. The special cases noted above in the 'complete' merge form\n"
+" also apply here.\n"
"\n"
" The revision ranges to be merged are specified by the '-r' and/or '-c'\n"
" options. '-r N:M' refers to the difference in the history of the\n"
@@ -7170,7 +11254,8 @@ msgid ""
" source and target refer to the same branch, a previously committed\n"
" revision can be 'undone'. In a reverse range, N is greater than M in\n"
" '-r N:M', or the '-c' option is used with a negative number: '-c -M'\n"
-" is equivalent to '-r M:<M-1>'.\n"
+" is equivalent to '-r M:<M-1>'. Undoing changes like this is also known\n"
+" as performing a 'reverse merge'.\n"
"\n"
" Multiple '-c' and/or '-r' options may be specified and mixing of\n"
" forward and reverse ranges is allowed.\n"
@@ -7206,87 +11291,27 @@ msgid ""
" svn merge -c50,54,60 -r65:68 ^/trunk\n"
"\n"
"\n"
-" 3. This form is called a 'reintegrate merge':\n"
-"\n"
-" svn merge --reintegrate SOURCE[@REV] [TARGET_WCPATH]\n"
-"\n"
-" In a reintegrate merge, an (e.g. feature) branch is merged back to its\n"
-" originating branch. In other words, the source branch has originally\n"
-" been created by copying the target branch, development has concluded\n"
-" on the source branch and it should now be merged back into the target\n"
-" branch.\n"
-" \n"
-" SOURCE is the URL of a branch to be merged back. If REV is specified,\n"
-" it is used as the peg revision for SOURCE; if REV is not specified,\n"
-" the HEAD revision is assumed.\n"
-"\n"
-" TARGET_WCPATH is a working copy of the branch the changes will be\n"
-" applied to.\n"
-"\n"
-" - Reintegrate Merge Example -\n"
-"\n"
-" A feature has been developed on a branch called 'feature'. The feature\n"
-" branch started as a copy of trunk@W. Work on the feature has completed\n"
-" and it should be merged back into the trunk.\n"
-"\n"
-" The feature branch was last synced with trunk up to revision X. So the\n"
-" difference between trunk@X and feature@HEAD contains the complete set\n"
-" of changes that implement the feature, and no other changes. These\n"
-" changes are applied to trunk.\n"
-"\n"
-" feature +--------------------------------R\n"
-" / . \\\n"
-" / ............. \\\n"
-" / . v\n"
-" trunk ------+--------------------L------------------o\n"
-" rW rX\n"
-"\n"
-" In the diagram above, L marks the left side (trunk@X) and R marks the\n"
-" right side (feature@HEAD) of the merge. The difference between the\n"
-" left and right side is merged into trunk, the target.\n"
-"\n"
-" To perform the merge, have a clean working copy of trunk and run the\n"
-" following command in its top-level directory:\n"
-"\n"
-" svn merge --reintegrate ^/feature\n"
-"\n"
-" To prevent unnecessary merge conflicts, a reintegrate merge requires\n"
-" that TARGET_WCPATH is not a mixed-revision working copy, has no local\n"
-" modifications, and has no switched subtrees.\n"
-"\n"
-" A reintegrate merge also requires that the source branch is coherently\n"
-" synced with the target -- in the above example, this means that all\n"
-" revisions between the branch point W and the last merged revision X\n"
-" are merged to the feature branch, so that there are no unmerged\n"
-" revisions in-between.\n"
-"\n"
-" After the reintegrate merge, the feature branch cannot be synced to\n"
-" the trunk again without merge conflicts. If further work must be done\n"
-" on the feature branch, it should be deleted and then re-created.\n"
-"\n"
+" 3. This form is called a '2-URL merge':\n"
"\n"
-" 4. This form is called a '2-URL merge':\n"
-"\n"
-" svn merge SOURCE1[@N] SOURCE2[@M] [TARGET_WCPATH]\n"
-"\n"
-" Two source URLs are specified, together with two revisions N and M.\n"
-" The two sources are compared at the specified revisions, and the\n"
-" difference is applied to TARGET_WCPATH, which is a path to a working\n"
-" copy of another branch. The three branches involved can be completely\n"
-" unrelated.\n"
+" svn merge SOURCE1[@REV1] SOURCE2[@REV2] [TARGET_WCPATH]\n"
"\n"
" You should use this merge variant only if the other variants do not\n"
" apply to your situation, as this variant can be quite complex to\n"
" master.\n"
"\n"
-" If TARGET_WCPATH is omitted, a default value of '.' is assumed.\n"
-" However, in the special case where both sources refer to a file node\n"
-" with the same basename and a similarly named file is also found within\n"
-" '.', the differences will be applied to that local file. The source\n"
-" revisions default to HEAD if omitted.\n"
+" Two source URLs are specified, identifying two trees on the same\n"
+" branch or on different branches. The trees are compared and the\n"
+" difference from SOURCE1@REV1 to SOURCE2@REV2 is applied to the\n"
+" working copy of the target branch at TARGET_WCPATH. The target\n"
+" branch may be the same as one or both sources, or different again.\n"
+" The three branches involved can be completely unrelated.\n"
+"\n"
+" TARGET_WCPATH is a working copy path; if omitted, '.' is generally\n"
+" assumed. The special cases noted above in the 'complete' merge form\n"
+" also apply here.\n"
"\n"
-" The sources can also be specified as working copy paths, in which case\n"
-" the URLs of the merge sources are derived from the working copies.\n"
+" SOURCE1 and/or SOURCE2 can also be specified as a working copy path,\n"
+" in which case the merge source URL is derived from the working copy.\n"
"\n"
" - 2-URL Merge Example -\n"
"\n"
@@ -7388,26 +11413,39 @@ msgid ""
" repositories.\n"
msgstr ""
+#: ../svn/svn.c:1083
msgid ""
"Display merge-related information.\n"
-"usage: mergeinfo SOURCE[@REV] [TARGET[@REV]]\n"
-"\n"
-" Display information related to merges (or potential merges) between\n"
-" SOURCE and TARGET (default: '.'). Display the type of information\n"
-" specified by the --show-revs option. If --show-revs isn't passed,\n"
-" it defaults to --show-revs='merged'.\n"
+"usage: 1. mergeinfo SOURCE[@REV] [TARGET[@REV]]\n"
+" 2. mergeinfo --show-revs=WHICH SOURCE[@REV] [TARGET[@REV]]\n"
+"\n"
+" 1. Summarize the history of merging between SOURCE and TARGET. The graph\n"
+" shows, from left to right:\n"
+" the youngest common ancestor of the branches;\n"
+" the latest full merge in either direction, and thus the common base\n"
+" that will be used for the next complete merge;\n"
+" the repository path and revision number of the tip of each branch.\n"
+"\n"
+" 2. Print the revision numbers on SOURCE that have been merged to TARGET\n"
+" (with --show-revs=merged), or that have not been merged to TARGET\n"
+" (with --show-revs=eligible). Print only revisions in which there was\n"
+" at least one change in SOURCE.\n"
+"\n"
+" If --revision (-r) is provided, filter the displayed information to\n"
+" show only that which is associated with the revisions within the\n"
+" specified range. Revision numbers, dates, and the 'HEAD' keyword are\n"
+" valid range values.\n"
+"\n"
+" SOURCE and TARGET are the source and target branch URLs, respectively.\n"
+" (If a WC path is given, the corresponding base URL is used.) The default\n"
+" TARGET is the current working directory ('.'). REV specifies the revision\n"
+" to be considered the tip of the branch; the default for SOURCE is HEAD,\n"
+" and the default for TARGET is HEAD for a URL or BASE for a WC path.\n"
"\n"
" The depth can be 'empty' or 'infinity'; the default is 'empty'.\n"
msgstr ""
-"显示åˆå¹¶çš„相关信æ¯ã€‚\n"
-"用法: mergeinfo SOURCE[@REV] [TARGET[@REV]]\n"
-"\n"
-" 显示 SOURCE 与 TARGET(默认为“.â€) 之间的åˆå¹¶(或潜在åˆå¹¶)ä¿¡æ¯ã€‚显示选项\n"
-" --show-revs 指定的信æ¯ç±»åž‹ã€‚如果没有传入 --show-revs,那么就使用其默认值\n"
-" --show-revs='merged'。\n"
-"\n"
-" 深度å¯ä»¥æ˜¯â€œemptyâ€æˆ–“infinityâ€ï¼›é»˜è®¤å€¼æ˜¯â€œemptyâ€\n"
+#: ../svn/svn.c:1114
msgid ""
"Create a new directory under version control.\n"
"usage: 1. mkdir PATH...\n"
@@ -7438,34 +11476,30 @@ msgstr ""
" 在这两个情况下,所有的中间目录都必须事先存在,\n"
" 除éžä½¿ç”¨é€‰é¡¹ --parents。\n"
+#: ../svn/svn.c:1131
msgid ""
-"Move and/or rename something in working copy or repository.\n"
+"Move (rename) an item in a working copy or repository.\n"
"usage: move SRC... DST\n"
"\n"
-"When moving multiple sources, they will be added as children of DST,\n"
-"which must be a directory.\n"
-"\n"
-" Note: this subcommand is equivalent to a 'copy' and 'delete'.\n"
-" Note: the --revision option has no use and is deprecated.\n"
-"\n"
" SRC and DST can both be working copy (WC) paths or URLs:\n"
-" WC -> WC: move and schedule for addition (with history)\n"
-" URL -> URL: complete server-side rename.\n"
-" All the SRCs must be of the same type.\n"
-msgstr ""
-"在工作副本或版本库中移动或改å文件或目录。\n"
-"用法: move SRC... DST\n"
+" WC -> WC: move an item in a working copy, as a local change to\n"
+" be committed later (with or without further changes)\n"
+" URL -> URL: move an item in the repository directly, immediately\n"
+" creating a new revision in the repository\n"
+" All the SRCs must be of the same type. When moving multiple sources,\n"
+" they will be added as children of DST, which must be a directory.\n"
"\n"
-"当移动多个æºæ—¶ï¼Œå®ƒä»¬ä½œä¸º DST çš„å­èŠ‚点增加,DST 必须是目录。\n"
+" SRC and DST of WC -> WC moves must be committed in the same revision.\n"
+" Furthermore, WC -> WC moves will refuse to move a mixed-revision subtree.\n"
+" To avoid unnecessary conflicts, it is recommended to run 'svn update'\n"
+" to update the subtree to a single revision before moving it.\n"
+" The --allow-mixed-revisions option is provided for backward "
+"compatibility.\n"
"\n"
-" 注æ„: 本å­å‘½ä»¤ç­‰åŒäºŽå…ˆ “copyâ€ï¼Œç„¶åŽ “deleteâ€ã€‚\n"
-" 注æ„: 此命令中 --revision 选项没有作用,已ç»æ·˜æ±°ã€‚\n"
-"\n"
-" SRC å¯åŒæ—¶ä¸ºå·¥ä½œå‰¯æœ¬(WC) 路径或 URL: \n"
-" WC -> WC : 移动并加入新增调度 (è¿žåŒåŽ†å²è®°å½•)\n"
-" URL -> URL : 完全是æœåŠ¡å™¨ç«¯æ›´å。\n"
-" 所有 SRC 必须是åŒä¸€ç±»åž‹ã€‚\n"
+" The --revision option has no use and is deprecated.\n"
+msgstr ""
+#: ../svn/svn.c:1153
msgid ""
"Apply a patch to a working copy.\n"
"usage: patch PATCHFILE [WCPATH]\n"
@@ -7475,7 +11509,8 @@ msgid ""
"\n"
" A unidiff patch suitable for application to a working copy can be\n"
" produced with the 'svn diff' command or third-party diffing tools.\n"
-" Any non-unidiff content of PATCHFILE is ignored.\n"
+" Any non-unidiff content of PATCHFILE is ignored, except for Subversion\n"
+" property diffs as produced by 'svn diff'.\n"
"\n"
" Changes listed in the patch will either be applied or rejected.\n"
" If a change does not match at its exact line offset, it may be applied\n"
@@ -7505,12 +11540,13 @@ msgid ""
"\n"
" Hint: If the patch file was created with Subversion, it will contain\n"
" the number of a revision N the patch will cleanly apply to\n"
-" (look for lines like \"--- foo/bar.txt (revision N)\").\n"
-" To avoid rejects, first update to the revision N using \n"
+" (look for lines like '--- foo/bar.txt (revision N)').\n"
+" To avoid rejects, first update to the revision N using\n"
" 'svn update -r N', apply the patch, and then update back to the\n"
" HEAD revision. This way, conflicts can be resolved interactively.\n"
msgstr ""
+#: ../svn/svn.c:1201
msgid ""
"Remove a property from files, dirs, or revisions.\n"
"usage: 1. propdel PROPNAME [PATH...]\n"
@@ -7527,6 +11563,8 @@ msgstr ""
" 1ã€åˆ é™¤å·¥ä½œå‰¯æœ¬ä¸­çº³å…¥ç‰ˆæœ¬ç®¡ç†çš„文件或目录的属性。\n"
" 2ã€åˆ é™¤ç‰ˆæœ¬åº“中版本的属性。TARGETåªç”¨æ¥åˆ¤æ–­è®¿é—®å“ªä¸ªç‰ˆæœ¬åº“。\n"
+#: ../svn/svn.c:1211
+#, fuzzy
msgid ""
"Edit a property with an external editor.\n"
"usage: 1. propedit PROPNAME TARGET...\n"
@@ -7536,7 +11574,7 @@ msgid ""
" 2. Edits unversioned remote prop on repos revision.\n"
" TARGET only determines which repository to access.\n"
"\n"
-"See 'svn help propset' for more on setting properties.\n"
+" See 'svn help propset' for more on setting properties.\n"
msgstr ""
"使用外部编辑器编辑属性。\n"
"用法: 1ã€propedit PROPNAME TARGET...\n"
@@ -7548,6 +11586,8 @@ msgstr ""
"\n"
"å‚è§ â€œsvn help propset†以获得更多设置属性的信æ¯ã€‚\n"
+#: ../svn/svn.c:1223
+#, fuzzy
msgid ""
"Print the value of a property on files, dirs, or revisions.\n"
"usage: 1. propget PROPNAME [TARGET[@REV]...]\n"
@@ -7558,13 +11598,15 @@ msgid ""
" 2. Prints unversioned remote prop on repos revision.\n"
" TARGET only determines which repository to access.\n"
"\n"
-" By default, this subcommand will add an extra newline to the end\n"
-" of the property values so that the output looks pretty. Also,\n"
-" whenever there are multiple paths involved, each property value\n"
-" is prefixed with the path with which it is associated. Use the\n"
-" --strict option to disable these beautifications (useful when\n"
-" redirecting a binary property value to a file, but available only\n"
-" if you supply a single TARGET to a non-recursive propget operation).\n"
+" With --verbose, the target path and the property name are printed on\n"
+" separate lines before each value, like 'svn proplist --verbose'.\n"
+" Otherwise, if there is more than one TARGET or a depth other than\n"
+" 'empty', the target path is printed on the same line before each value.\n"
+"\n"
+" By default, an extra newline is printed after the property value so that\n"
+" the output looks pretty. With a single TARGET and depth 'empty', you can\n"
+" use the --strict option to disable this (useful when redirecting a binary\n"
+" property value to a file, for example).\n"
msgstr ""
"显示目录ã€æ–‡ä»¶æˆ–版本的属性å–值。\n"
"用法: 1ã€propget PROPNAME [TARGET[@REV]...]\n"
@@ -7579,6 +11621,16 @@ msgstr ""
" 使用 --strict 选项å¯ä»¥å…³é—­è¿™äº›ç¾ŽåŒ–行为 (它很有用,例如将二进制属\n"
" 性内容é‡å®šå‘到一个文件,但是仅用于å•ä¸€ç›®æ ‡çš„éžé€’å½’æ“作)。\n"
+#: ../svn/svn.c:1243 ../svn/svn.c:1260
+msgid "print path, name and value on separate lines"
+msgstr "在å•ç‹¬çš„行打å°è·¯å¾„,å称和å–值"
+
+#: ../svn/svn.c:1244
+msgid "don't print an extra newline"
+msgstr "ä¸æ‰“å°é¢å¤–çš„æ–°è¡Œ"
+
+#: ../svn/svn.c:1247
+#, fuzzy
msgid ""
"List all properties on files, dirs, or revisions.\n"
"usage: 1. proplist [TARGET[@REV]...]\n"
@@ -7588,6 +11640,10 @@ msgid ""
" revision the target is first looked up.\n"
" 2. Lists unversioned remote props on repos revision.\n"
" TARGET only determines which repository to access.\n"
+"\n"
+" With --verbose, the property values are printed as well, like 'svn "
+"propget\n"
+" --verbose'. With --quiet, the paths are not printed.\n"
msgstr ""
"列出目录ã€æ–‡ä»¶æˆ–版本的所有属性。\n"
"用法: 1ã€proplist [TARGET[@REV]...]\n"
@@ -7596,6 +11652,11 @@ msgstr ""
" 1ã€æ˜¾ç¤ºç›®æ ‡çš„属性。REV 指定从哪个版本开始查找目标。\n"
" 2ã€åˆ—出版本库中版本的属性。TARGET åªç”¨æ¥åˆ¤æ–­è®¿é—®å“ªä¸ªç‰ˆæœ¬åº“。\n"
+#: ../svn/svn.c:1261
+msgid "don't print the path"
+msgstr "ä¸è¦æ‰“å°è·¯å¾„"
+
+#: ../svn/svn.c:1264
msgid ""
"Set the value of a property on files, dirs, or revisions.\n"
"usage: 1. propset PROPNAME PROPVAL PATH...\n"
@@ -7607,18 +11668,36 @@ msgid ""
"\n"
" The value may be provided with the --file option instead of PROPVAL.\n"
"\n"
-" Note: svn recognizes the following special versioned properties\n"
-" but will store any arbitrary properties set:\n"
-" svn:ignore - A newline separated list of file glob patterns to ignore.\n"
+" Property names starting with 'svn:' are reserved. Subversion recognizes\n"
+" the following special versioned properties on a file:\n"
" svn:keywords - Keywords to be expanded. Valid keywords are:\n"
-" URL, HeadURL - The URL for the head version of the object.\n"
+" URL, HeadURL - The URL for the head version of the file.\n"
" Author, LastChangedBy - The last person to modify the file.\n"
-" Date, LastChangedDate - The date/time the object was last modified.\n"
-" Rev, Revision, - The last revision the object changed.\n"
-" LastChangedRevision\n"
-" Id - A compressed summary of the previous\n"
-" 4 keywords.\n"
+" Date, LastChangedDate - The date/time the file was last modified.\n"
+" Rev, Revision, - The last revision the file changed.\n"
+" LastChangedRevision\n"
+" Id - A compressed summary of the previous four.\n"
" Header - Similar to Id but includes the full URL.\n"
+"\n"
+" Custom keywords can be defined with a format string separated from\n"
+" the keyword name with '='. Valid format substitutions are:\n"
+" %a - The author of the revision given by %r.\n"
+" %b - The basename of the URL of the file.\n"
+" %d - Short format of the date of the revision given by %r.\n"
+" %D - Long format of the date of the revision given by %r.\n"
+" %P - The file's path, relative to the repository root.\n"
+" %r - The number of the revision which last changed the file.\n"
+" %R - The URL to the root of the repository.\n"
+" %u - The URL of the file.\n"
+" %_ - A space (keyword definitions cannot contain a literal "
+"space).\n"
+" %% - A literal '%'.\n"
+" %H - Equivalent to %P%_%r%_%d%_%a.\n"
+" %I - Equivalent to %b%_%r%_%d%_%a.\n"
+" Example custom keyword definition: MyKeyword=%r%_%a%_%P\n"
+" Once a custom keyword has been defined for a file, it can be used\n"
+" within the file like any other keyword: $MyKeyword$\n"
+"\n"
" svn:executable - If present, make the file executable. Use\n"
" 'svn propdel svn:executable PATH...' to clear.\n"
" svn:eol-style - One of 'native', 'LF', 'CR', 'CRLF'.\n"
@@ -7626,102 +11705,45 @@ msgid ""
" whether to merge the file, and how to serve it from Apache.\n"
" A mimetype beginning with 'text/' (or an absent mimetype) is\n"
" treated as text. Anything else is treated as binary.\n"
-" svn:externals - A newline separated list of module specifiers,\n"
-" each of which consists of a URL and a relative directory path,\n"
-" similar to the syntax of the 'svn checkout' command:\n"
-" http://example.com/repos/zig foo/bar\n"
-" A revision to check out can optionally be specified to pin the\n"
-" external to a known revision:\n"
-" -r25 http://example.com/repos/zig foo/bar\n"
-" To unambiguously identify an element at a path which has been\n"
-" deleted (possibly even deleted multiple times in its history),\n"
-" an optional peg revision can be appended to the URL:\n"
-" -r25 http://example.com/repos/zig@42 foo/bar\n"
-" Relative URLs are indicated by starting the URL with one\n"
-" of the following strings:\n"
-" ../ to the parent directory of the extracted external\n"
-" ^/ to the repository root\n"
-" // to the scheme\n"
-" / to the server root\n"
-" The ambiguous format 'relative_path relative_path' is taken as\n"
-" 'relative_url relative_path' with peg revision support.\n"
-" Lines in externals definitions starting with the '#' character\n"
-" are considered comments and are ignored.\n"
-" Subversion 1.4 and earlier only support the following formats\n"
-" where peg revisions can only be specified using a -r modifier\n"
-" and where URLs cannot be relative:\n"
-" foo http://example.com/repos/zig\n"
-" foo/bar -r 1234 http://example.com/repos/zag\n"
-" Use of these formats is discouraged. They should only be used if\n"
-" interoperability with 1.4 clients is desired.\n"
" svn:needs-lock - If present, indicates that the file should be locked\n"
" before it is modified. Makes the working copy file read-only\n"
" when it is not locked. Use 'svn propdel svn:needs-lock PATH...'\n"
" to clear.\n"
"\n"
-" The svn:keywords, svn:executable, svn:eol-style, svn:mime-type and\n"
-" svn:needs-lock properties cannot be set on a directory. A non-recursive\n"
-" attempt will fail, and a recursive attempt will set the property\n"
-" only on the file children of the directory.\n"
-msgstr ""
-"设定目录ã€æ–‡ä»¶æˆ–版本的属性。\n"
-"用法: 1. propset PROPNAME PROPVAL PATH...\n"
-" 2. propset PROPNAME --revprop -r REV PROPVAL [TARGET]\n"
-"\n"
-" 1ã€åœ¨å·¥ä½œå‰¯æœ¬ä¸­ä¿®æ”¹ä¸€ä¸ªå—版本控制的属性。\n"
-" 2ã€åœ¨ç‰ˆæœ¬åº“的版本中修改一个éžç‰ˆæœ¬æŽ§åˆ¶çš„属性。\n"
-" (TARGET åªç”¨æ¥åˆ¤æ–­è®¿é—®å“ªä¸€ä¸ªç‰ˆæœ¬åº“。)\n"
-"\n"
-" å¯ä»¥ä½¿ç”¨é€‰é¡¹ --file æ¥ä»£æ›¿ PROPVAL 赋值。\n"
-"\n"
-" 注æ„: svn 除了能存储任æ„属性外,还识别以下专用的版本控制属性: \n"
-" svn:ignore - 以æ¢è¡Œç¬¦éš”开的文件忽略模å¼åˆ—表。\n"
-" svn:keywords - 将被展开的关键字。有效的关键字为。\n"
-" URL, HeadURL - 此对象最新版本的 URL。\n"
-" Author, LastChangedBy - 最åŽä¿®æ”¹æ–‡ä»¶çš„人。\n"
-" Date, LastChangedDate - 此对象最åŽä¿®æ”¹çš„日期。\n"
-" Rev, Revision, - 此对象最åŽä¿®æ”¹çš„版本å·ã€‚\n"
-" LastChangedRevision\n"
-" Id - å‰å››ä¸ªå…³é”®å­—的压缩摘è¦ã€‚\n"
-" Header - 与 Id 类似,åªæ˜¯åŒ…å«å®Œæ•´çš„ URL。\n"
-" svn:executable - 如果存在此属性则设置文件为å¯æ‰§è¡Œçš„。\n"
-" 使用 “svn propdel svn:executable PATH...†清除。\n"
-" svn:eol-style - “nativeâ€ï¼Œâ€œLFâ€ï¼Œâ€œCRâ€ï¼Œâ€œCRLF†之一。\n"
-" svn:mime-type - 文件的媒体类型。用以决定是å¦è¯¥åˆå¹¶è¯¥æ–‡ä»¶ï¼Œ\n"
-" ä»¥åŠ Apache 如何处ç†å®ƒã€‚媒体类型以“text/â€å¼€å¤´(或是没有指\n"
-" 定媒体类型)的文件会被视为纯文本文件,å¦åˆ™å°±æ˜¯äºŒè¿›åˆ¶æ•°æ®ã€‚\n"
-" svn:externals - 以æ¢è¡Œç¬¦éš”开的模å—说明列表,æ¯é¡¹éƒ½ç”±ä¸€ä¸ª URL å’Œ\n"
-" 相对目录路径组æˆï¼Œä¸Žå‘½ä»¤â€œsvn checkoutâ€çš„å¥æ³•ç±»ä¼¼ï¼š\n"
+" Subversion recognizes the following special versioned properties on a\n"
+" directory:\n"
+" svn:ignore - A list of file glob patterns to ignore, one per "
+"line.\n"
+" svn:global-ignores - Like svn:ignore, but inheritable.\n"
+" svn:externals - A list of module specifiers, one per line, in the\n"
+" following format similar to the syntax of 'svn checkout':\n"
+" [-r REV] URL[@PEG] LOCALPATH\n"
+" Example:\n"
" http://example.com/repos/zig foo/bar\n"
-" å¯ä»¥æŒ‡å®šç‰ˆæœ¬ä»¥é’‰ä½å·²çŸ¥çš„版本:\n"
+" The LOCALPATH is relative to the directory having this property.\n"
+" To pin the external to a known revision, specify the optional REV:\n"
" -r25 http://example.com/repos/zig foo/bar\n"
-" 为了清楚的表明路径上的一个元素已ç»è¢«åˆ é™¤ï¼ˆç”šè‡³å¯èƒ½è¢«åˆ é™¤äº†å¤šæ¬¡ï¼‰ï¼Œ\n"
-" å¯ä»¥åœ¨ URL åŽè¿½åŠ ä¸€ä¸ª peg 版本:\n"
+" To unambiguously identify an element at a path which may have been\n"
+" subsequently deleted or renamed, specify the optional PEG revision:\n"
" -r25 http://example.com/repos/zig@42 foo/bar\n"
-" 下列开始字符串指示相对 URL:\n"
-" ../ 相对于外部引用的父目录\n"
-" ^/ 相对于版本库的根\n"
-" // 相对于方案\n"
-" / 相对于æœåŠ¡å™¨æ ¹\n"
-" 相对路径“relative_path relative_pathâ€è¿™ç§ä¸æ˜Žç¡®çš„æ ¼å¼æ¥è‡ª\n"
-" “relative_url relative_pathâ€å’Œ peg 版本支æŒã€‚\n"
-" 以字符 '#' 开始的外部定义行被认为是注释,并且忽略。\n"
-" Subversion 1.4 和早期的仅支æŒä¸‹åˆ—æ ¼å¼ï¼Œpeg 版本åªèƒ½ä½¿ç”¨ -r 指定,\n"
-" 并且 URL ä¸èƒ½ä½¿ç”¨ç›¸å¯¹æ ¼å¼:\n"
-" foo http://example.com/repos/zig\n"
-" foo/bar -r 1234 http://example.com/repos/zag\n"
-" ä¸èµžåŒä½¿ç”¨è¿™äº›æ ¼å¼ã€‚它们åªåº”è¯¥ç”¨äºŽå¸Œæœ›æ”¯æŒ 1.4 客户端的情况。\n"
-" svn:needs-lock - 此属性表明文件在修改å‰åº”该加é”。\n"
-" 如果没有加é”,则此文件在工作副本中应被设为åªè¯»ã€‚使用\n"
-" “svn propdel svn:needs-lock PATH...†清除。\n"
-"\n"
-" svn:keywords, svn:executable, svn:eol-style, svn:mime-type 以åŠ\n"
-" svn:needs-lock 属性ä¸èƒ½è®¾ç½®åœ¨ç›®å½•ä¸Šã€‚使用éžé€’归选项(-N)在目录上\n"
-" 设置这些属性时会失败,递归æ“作时åªä¼šä½œç”¨äºŽæŒ‡å®šç›®å½•ä¸­çš„文件å­å­™ä¸Šã€‚\n"
+" The URL may be a full URL or a relative URL starting with one of:\n"
+" ../ to the parent directory of the extracted external\n"
+" ^/ to the repository root\n"
+" / to the server root\n"
+" // to the URL scheme\n"
+" Use of the following format is discouraged but is supported for\n"
+" interoperability with Subversion 1.4 and earlier clients:\n"
+" LOCALPATH [-r PEG] URL\n"
+" The ambiguous format 'relative_path relative_path' is taken as\n"
+" 'relative_url relative_path' with peg revision support.\n"
+" Lines starting with a '#' character are ignored.\n"
+msgstr ""
+#: ../svn/svn.c:1343
msgid "read property value from file ARG"
msgstr "从文件 ARG 读å–属性值"
+#: ../svn/svn.c:1346
msgid ""
"Relocate the working copy to point to a different repository root URL.\n"
"usage: 1. relocate FROM-PREFIX TO-PREFIX [PATH...]\n"
@@ -7762,17 +11784,20 @@ msgstr ""
" svn relocate http://www.example.com/repo/project \\\n"
" svn://svn.example.com/repo/project\n"
+#: ../svn/svn.c:1369
msgid ""
"Resolve conflicts on working copy files or directories.\n"
-"usage: resolve --accept=ARG [PATH...]\n"
+"usage: resolve [PATH...]\n"
"\n"
-" Note: the --accept option is currently required.\n"
-msgstr ""
-"解决工作副本中目录或文件的冲çªã€‚\n"
-"用法: resolve --accept=ARG [PATH...]\n"
+" By default, perform interactive conflict resolution on PATH.\n"
+" In this mode, the command is recursive by default (depth 'infinity').\n"
"\n"
-" 注æ„: 当å‰éœ€è¦é€‰é¡¹ --accept 。\n"
+" The --accept=ARG option prevents interactive prompting and forces\n"
+" conflicts on PATH to be resolved in the manner specified by ARG.\n"
+" In this mode, the command is not recursive by default (depth 'empty').\n"
+msgstr ""
+#: ../svn/svn.c:1379
msgid ""
"specify automatic conflict resolution source\n"
" ('base', 'working', 'mine-conflict',\n"
@@ -7782,6 +11807,7 @@ msgstr ""
" ('base', 'working', 'mine-conflict',\n"
" 'theirs-conflict', 'mine-full', 'theirs-full')"
+#: ../svn/svn.c:1386
msgid ""
"Remove 'conflicted' state on working copy files or directories.\n"
"usage: resolved PATH...\n"
@@ -7798,18 +11824,21 @@ msgstr ""
" 附加文件,让 PATH å¯ä»¥è¢«å†æ¬¡æ交。它已ç»è¿‡æ—¶ï¼Œè¢«\n"
" “svn resolve --accept workingâ€å–代。\n"
+#: ../svn/svn.c:1396
msgid ""
-"Restore pristine working copy file (undo most local edits).\n"
+"Restore pristine working copy state (undo local changes).\n"
"usage: revert PATH...\n"
"\n"
-" Note: this subcommand does not require network access, and resolves\n"
-" any conflicted states.\n"
-msgstr ""
-"将工作副本文件æ¢å¤åˆ°åŽŸå§‹ç‰ˆæœ¬(æ¢å¤å¤§éƒ¨åˆ†çš„本地修改)。\n"
-"用法: revert PATH...\n"
+" Revert changes in the working copy at or within PATH, and remove\n"
+" conflict markers as well, if any.\n"
"\n"
-" 注æ„: 本å­å‘½ä»¤ä¸ä¼šè®¿é—®ç½‘络,它解除任何冲çªçš„状æ€ã€‚\n"
+" This subcommand does not revert already committed changes.\n"
+" For information about undoing already committed changes, search\n"
+" the output of 'svn help merge' for 'undo'.\n"
+msgstr ""
+#: ../svn/svn.c:1408
+#, fuzzy
msgid ""
"Print the status of working copy files and directories.\n"
"usage: status [PATH...]\n"
@@ -7836,9 +11865,10 @@ msgid ""
" ' ' no modifications\n"
" 'C' Conflicted\n"
" 'M' Modified\n"
-" Third column: Whether the working copy directory is locked\n"
-" ' ' not locked\n"
-" 'L' locked\n"
+" Third column: Whether the working copy is locked for writing by\n"
+" another Subversion client modifying the working copy\n"
+" ' ' not locked for writing\n"
+" 'L' locked for writing\n"
" Fourth column: Scheduled commit will contain addition-with-history\n"
" ' ' no history scheduled with commit\n"
" '+' history scheduled with commit\n"
@@ -7846,16 +11876,18 @@ msgid ""
" ' ' normal\n"
" 'S' the item has a Switched URL relative to the parent\n"
" 'X' a versioned file created by an eXternals definition\n"
-" Sixth column: Repository lock token\n"
+" Sixth column: Whether the item is locked in repository for exclusive "
+"commit\n"
" (without -u)\n"
-" ' ' no lock token\n"
-" 'K' lock token present\n"
+" ' ' not locked by this working copy\n"
+" 'K' locked by this working copy, but lock might be stolen or broken\n"
" (with -u)\n"
-" ' ' not locked in repository, no lock token\n"
-" 'K' locked in repository, lock toKen present\n"
-" 'O' locked in repository, lock token in some Other working copy\n"
-" 'T' locked in repository, lock token present but sTolen\n"
-" 'B' not locked in repository, lock token present but Broken\n"
+" ' ' not locked in repository, not locked by this working copy\n"
+" 'K' locked in repository, lock owned by this working copy\n"
+" 'O' locked in repository, lock owned by another working copy\n"
+" 'T' locked in repository, lock owned by this working copy was stolen\n"
+" 'B' not locked in repository, lock owned by this working copy is "
+"broken\n"
" Seventh column: Whether the item is the victim of a tree conflict\n"
" ' ' normal\n"
" 'C' tree-Conflicted\n"
@@ -7880,20 +11912,20 @@ msgid ""
"\n"
" Example output:\n"
" svn status wc\n"
-" M wc/bar.c\n"
-" A + wc/qax.c\n"
+" M wc/bar.c\n"
+" A + wc/qax.c\n"
"\n"
" svn status -u wc\n"
-" M 965 wc/bar.c\n"
-" * 965 wc/foo.c\n"
-" A + - wc/qax.c\n"
+" M 965 wc/bar.c\n"
+" * 965 wc/foo.c\n"
+" A + - wc/qax.c\n"
" Status against revision: 981\n"
"\n"
" svn status --show-updates --verbose wc\n"
-" M 965 938 kfogel wc/bar.c\n"
-" * 965 922 sussman wc/foo.c\n"
-" A + - 687 joe wc/qax.c\n"
-" 965 687 joe wc/zig.c\n"
+" M 965 938 kfogel wc/bar.c\n"
+" * 965 922 sussman wc/foo.c\n"
+" A + - 687 joe wc/qax.c\n"
+" 965 687 joe wc/zig.c\n"
" Status against revision: 981\n"
"\n"
" svn status\n"
@@ -7962,25 +11994,26 @@ msgstr ""
" 工作副本路径总是最åŽä¸€æ ï¼Œæ‰€ä»¥å®ƒå¯ä»¥åŒ…å«ç©ºç™½å­—符。\n"
"\n"
" é—®å·æ ‡è®° (“?â€) 出现在工作版本,最åŽæ交的版本,或最åŽæ交的作者ä½ç½®æ—¶ï¼Œ\n"
-" 它指示信æ¯æœªçŸ¥ï¼Œæˆ–者给出此项目的状æ€æ˜¯ä¸æ°å½“çš„ (例如项目是å¤åˆ¶æ“作的结果)。\n"
+" 它指示信æ¯æœªçŸ¥ï¼Œæˆ–者给出此项目的状æ€æ˜¯ä¸æ°å½“çš„ (例如项目是å¤åˆ¶æ“作的结"
+"果)。\n"
" é—®å·æ ‡è®°ç”¨æ¥ä½œä¸ºä¸€ä¸ªè§†è§‰å ä½ç¬¦ï¼Œæ˜“于解æž\n"
"\n"
" 范例输出: \n"
" svn status wc\n"
-" M wc/bar.c\n"
-" A + wc/qax.c\n"
+" M wc/bar.c\n"
+" A + wc/qax.c\n"
"\n"
" svn status -u wc\n"
-" M 965 wc/bar.c\n"
-" * 965 wc/foo.c\n"
-" A + - wc/qax.c\n"
+" M 965 wc/bar.c\n"
+" * 965 wc/foo.c\n"
+" A + - wc/qax.c\n"
" 版本 981 的状æ€\n"
"\n"
" svn status --show-updates --verbose wc\n"
-" M 965 938 kfogel wc/bar.c\n"
-" * 965 922 sussman wc/foo.c\n"
-" A + - 687 joe wc/qax.c\n"
-" 965 687 joe wc/zig.c\n"
+" M 965 938 kfogel wc/bar.c\n"
+" * 965 922 sussman wc/foo.c\n"
+" A + - 687 joe wc/qax.c\n"
+" 965 687 joe wc/zig.c\n"
" 版本 981 的状æ€\n"
"\n"
" svn status\n"
@@ -7989,9 +12022,11 @@ msgstr ""
" > local missing, incoming edit upon update\n"
" D wc/qax.c\n"
+#: ../svn/svn.c:1501
msgid "don't print unversioned items"
msgstr "ä¸æ‰“å°æœªç‰ˆæœ¬æŽ§åˆ¶çš„æ¡ç›®"
+#: ../svn/svn.c:1504
msgid ""
"Update the working copy to a different URL within the same repository.\n"
"usage: 1. switch URL[@PEGREV] [PATH]\n"
@@ -8009,7 +12044,8 @@ msgid ""
" or directory) as the corresponding path in the repository it becomes\n"
" versioned but its contents are left 'as-is' in the working copy.\n"
" This means that an obstructing directory's unversioned children may\n"
-" also obstruct and become versioned. For files, any content differences\n"
+" also obstruct and become versioned. For files, any content "
+"differences\n"
" between the obstruction and the repository are treated like a local\n"
" modification to the working copy. All properties from the repository\n"
" are applied to the obstructing path.\n"
@@ -8037,7 +12073,8 @@ msgstr ""
"用法: 1ã€switch URL[@PEGREV] [PATH]\n"
" 2ã€switch --relocate FROM-PREFIX TO-PREFIX [PATH...]\n"
"\n"
-" 1ã€æ›´æ–°å·¥ä½œå‰¯æœ¬ï¼Œä¸ŽåŒä¸€ç‰ˆæœ¬åº“中的新 URL 对应。其行为跟 “svn update†很åƒï¼Œ\n"
+" 1ã€æ›´æ–°å·¥ä½œå‰¯æœ¬ï¼Œä¸ŽåŒä¸€ç‰ˆæœ¬åº“中的新 URL 对应。其行为跟 “svn update†很"
+"åƒï¼Œ\n"
" 也是将工作副本切æ¢åˆ°åŒä¸€ç‰ˆæœ¬åº“中æŸä¸ªåˆ†æ”¯æˆ–者标签的方法。PEGREV 决定从\n"
" 哪个版本查找目标。\n"
"\n"
@@ -8049,7 +12086,8 @@ msgstr ""
"\n"
" 使用 “--set-depth†选项设置此æ“作目标的工作副本之新深度。\n"
"\n"
-" 如果新 URL 与工作副本路径没有版本继承关系,Subversion 将会拒ç»æ“作。选项\n"
+" 如果新 URL 与工作副本路径没有版本继承关系,Subversion 将会拒ç»æ“作。选"
+"项\n"
" '--ignore-ancestry' å¯ä»¥ç¦æ­¢æ­¤æ£€æŸ¥ã€‚\n"
"\n"
" 2ã€é€‰é¡¹ “--relocate†已ç»æ·˜æ±°ã€‚它的å¥æ³•ç­‰ä»·äºŽ\n"
@@ -8063,6 +12101,11 @@ msgstr ""
" svn switch --relocate http://www.example.com/repo/project \\\n"
" svn://svn.example.com/repo/project\n"
+#: ../svn/svn.c:1546
+msgid "allow switching to a node with no common ancestor"
+msgstr ""
+
+#: ../svn/svn.c:1550
msgid ""
"Unlock working copy paths or URLs.\n"
"usage: unlock TARGET...\n"
@@ -8074,6 +12117,7 @@ msgstr ""
"\n"
" 使用 --force 终止é”定。\n"
+#: ../svn/svn.c:1557
msgid ""
"Bring changes from the repository into the working copy.\n"
"usage: update [PATH...]\n"
@@ -8156,6 +12200,7 @@ msgstr ""
"\n"
" 使用“--set-depthâ€é€‰é¡¹è®¾ç½®æ­¤æ“作目标的工作副本之新深度。\n"
+#: ../svn/svn.c:1607
msgid ""
"Upgrade the metadata storage format for a working copy.\n"
"usage: upgrade [WCPATH...]\n"
@@ -8167,75 +12212,117 @@ msgstr ""
"\n"
" ä¿ç•™æœ¬åœ°ä¿®æ”¹ã€‚\n"
+#: ../svn/svn.c:1653 ../svnadmin/svnadmin.c:90 ../svnlook/svnlook.c:379
+#: ../svnrdump/svnrdump.c:65 ../svnsync/svnsync.c:296
msgid "Caught signal"
msgstr "æ•æ‰åˆ°ä¿¡å·"
+#: ../svn/svn.c:1806 ../svnlook/svnlook.c:2564
msgid "Non-numeric limit argument given"
msgstr "--limit å–值ä¸æ˜¯æ•°å­—"
+#: ../svn/svn.c:1812 ../svnlook/svnlook.c:2570
msgid "Argument to --limit must be positive"
msgstr "--limit å–值必须为正"
+#: ../svn/svn.c:1833 ../svn/svn.c:2110
msgid "Can't specify -c with --old"
msgstr "ä¸èƒ½åŒæ—¶æŒ‡å®š -c å’Œ --old"
+#: ../svn/svn.c:1864
#, c-format
msgid "Negative number in range (%s) not supported with -c"
msgstr "-c 选项ä¸æ”¯æŒè´Ÿæ•°åœ¨èŒƒå›´ (%s) 中"
+#: ../svn/svn.c:1877
#, c-format
msgid "Non-numeric change argument (%s) given to -c"
msgstr "-c 选项的å–值(%s)ä¸æ˜¯æ•°å­—"
+#: ../svn/svn.c:1885
msgid "There is no change 0"
msgstr "没有版本 0"
+#: ../svn/svn.c:1928 ../svnadmin/svnadmin.c:2067 ../svnrdump/svnrdump.c:937
+#: ../svnsync/svnsync.c:2051
#, c-format
msgid "Syntax error in revision argument '%s'"
msgstr "版本å‚数“%sâ€ä¸­æœ‰è¯­æ³•é”™è¯¯"
+#: ../svn/svn.c:1994 ../svn/svn.c:2013
#, c-format
msgid "Error converting depth from locale to UTF-8"
msgstr "将深度从本地编ç è½¬æ¢åˆ° UTF8 失败"
+#: ../svn/svn.c:2002
#, c-format
-msgid "'%s' is not a valid depth; try 'empty', 'files', 'immediates', or 'infinity'"
-msgstr "“%s†ä¸æ˜¯æœ‰æ•ˆçš„深度;å°è¯• “emptyâ€ï¼Œâ€œfilesâ€ï¼Œâ€œimmediatesâ€ï¼Œæˆ– “infinityâ€"
+msgid ""
+"'%s' is not a valid depth; try 'empty', 'files', 'immediates', or 'infinity'"
+msgstr ""
+"“%s†ä¸æ˜¯æœ‰æ•ˆçš„深度;å°è¯• “emptyâ€ï¼Œâ€œfilesâ€ï¼Œâ€œimmediatesâ€ï¼Œæˆ– “infinityâ€"
+#: ../svn/svn.c:2021
#, c-format
-msgid "'%s' is not a valid depth; try 'exclude', 'empty', 'files', 'immediates', or 'infinity'"
-msgstr "“%s†ä¸æ˜¯æœ‰æ•ˆçš„深度;å°è¯• “excludeâ€ï¼Œâ€œemptyâ€ï¼Œâ€œfilesâ€ï¼Œâ€œimmediatesâ€ï¼Œæˆ– “infinityâ€"
+msgid ""
+"'%s' is not a valid depth; try 'exclude', 'empty', 'files', 'immediates', or "
+"'infinity'"
+msgstr ""
+"“%s†ä¸æ˜¯æœ‰æ•ˆçš„深度;å°è¯• “excludeâ€ï¼Œâ€œemptyâ€ï¼Œâ€œfilesâ€ï¼Œâ€œimmediatesâ€ï¼Œæˆ– "
+"“infinityâ€"
+#: ../svn/svn.c:2150
#, c-format
msgid "Syntax error in native-eol argument '%s'"
msgstr "原生æ¢è¡Œç¬¦å·å‚æ•° “%s†中有语法错误"
+#: ../svn/svn.c:2170
msgid "Changelist names must not be empty"
msgstr "修改列表的å称ä¸èƒ½ä¸ºç©º"
+#: ../svn/svn.c:2204
#, c-format
msgid "'%s' is not a valid --accept value"
msgstr "“%s†是éžæ³• --accept å–值"
+#: ../svn/svn.c:2212
#, c-format
msgid "'%s' is not a valid --show-revs value"
msgstr "“%s†是éžæ³• --show-revs å–值"
+#: ../svn/svn.c:2224
#, c-format
msgid "Invalid strip count '%s'"
msgstr "无效修剪计数 '%s'"
+#: ../svn/svn.c:2230
msgid "Argument to --strip must be positive"
msgstr "--strip å‚æ•°çš„å–值必须为正"
+#: ../svn/svn.c:2285 ../svnmucc/svnmucc.c:1207 ../svnrdump/svnrdump.c:993
+#: ../svnsync/svnsync.c:2095
+msgid "--non-interactive and --force-interactive are mutually exclusive"
+msgstr "--non-interactive 与 --force-interactive 是互斥的"
+
+#: ../svn/svn.c:2339 ../svndumpfilter/svndumpfilter.c:1509
+#: ../svnlook/svnlook.c:2666
#, c-format
msgid "Subcommand argument required\n"
msgstr "å¿…é¡»æä¾›å­å‘½ä»¤å‚æ•°\n"
+#: ../svn/svn.c:2356 ../svnadmin/svnadmin.c:2250
+#: ../svndumpfilter/svndumpfilter.c:1529 ../svnlook/svnlook.c:2685
+#: ../svnrdump/svnrdump.c:1039
+#, c-format
+msgid "Unknown subcommand: '%s'\n"
+msgstr "未知å­å‘½ä»¤: “%sâ€\n"
+
+#: ../svn/svn.c:2365
#, c-format
-msgid "Unknown command: '%s'\n"
-msgstr "未知命令: “%sâ€\n"
+msgid ""
+"Undo is done using either the 'svn revert' or the 'svn merge' command.\n"
+msgstr ""
+#: ../svn/svn.c:2400
#, c-format
msgid ""
"Subcommand '%s' doesn't accept option '%s'\n"
@@ -8244,582 +12331,146 @@ msgstr ""
"å­å‘½ä»¤â€œ%sâ€ä¸æŽ¥å—选项“%sâ€\n"
"输入“svn help %sâ€å¾—到用法。\n"
-msgid "Multiple revision arguments encountered; can't specify -c twice, or both -c and -r"
+#: ../svn/svn.c:2414
+msgid ""
+"Multiple revision arguments encountered; can't specify -c twice, or both -c "
+"and -r"
msgstr "é‡åˆ°äº†å¤šä¸ªç‰ˆæœ¬å‚æ•°ï¼›ä¸èƒ½æŒ‡å®š -c 两次或者åŒæ—¶ä½¿ç”¨ -c å’Œ -r"
+#: ../svn/svn.c:2426
msgid "--depth and --set-depth are mutually exclusive"
msgstr "--depth 与 --set-depth 是互斥的"
+#: ../svn/svn.c:2436
msgid "--with-all-revprops and --with-no-revprops are mutually exclusive"
msgstr "--with-all-revprops 与 --with-no-revprops 是互斥的"
+#: ../svn/svn.c:2446
msgid "--with-revprop and --with-no-revprops are mutually exclusive"
msgstr "--with-revprop 与 --with-no-revprops 是互斥的"
+#: ../svn/svn.c:2459
msgid "--message (-m) and --file (-F) are mutually exclusive"
msgstr "--message (-m) 与 --file (-F) 是互斥的"
+#: ../svn/svn.c:2468 ../svnmucc/svnmucc.c:1218 ../svnrdump/svnrdump.c:1098
+#: ../svnsync/svnsync.c:2146
msgid "--trust-server-cert requires --non-interactive"
msgstr "--trust-server-cert éœ€è¦ --non-interactive"
+#: ../svn/svn.c:2478
msgid "--diff-cmd and --internal-diff are mutually exclusive"
msgstr "--diff-cmd 与 --internal-diff 是互斥的"
+#: ../svn/svn.c:2520
+msgid "--relocate and --depth are mutually exclusive"
+msgstr "--relocate 与 --depth 是互斥的"
+
+#: ../svn/svn.c:2528
+msgid "--relocate and --non-recursive (-N) are mutually exclusive"
+msgstr "--relocate 与 --non-recursive (-N) 是互斥的"
+
+#: ../svn/svn.c:2650
msgid "Log message file is a versioned file; use '--force-log' to override"
msgstr "日志信æ¯æ–‡ä»¶å—版本控制;请使用 “--force-log†强制执行"
+#: ../svn/svn.c:2657
msgid "Lock comment file is a versioned file; use '--force-log' to override"
msgstr "é”注释文件å—版本控制;请使用 “--force-log†强制执行"
-msgid "The log message is a pathname (was -F intended?); use '--force-log' to override"
-msgstr "日志信æ¯æ˜¯è·¯å¾„å称 (本æ¥æƒ³ç”¨ -F 选项的å—?);请使用“--force-logâ€å¼ºåˆ¶æ‰§è¡Œ"
+#: ../svn/svn.c:2678
+msgid ""
+"The log message is a pathname (was -F intended?); use '--force-log' to "
+"override"
+msgstr ""
+"日志信æ¯æ˜¯è·¯å¾„å称 (本æ¥æƒ³ç”¨ -F 选项的å—?);请使用“--force-logâ€å¼ºåˆ¶æ‰§è¡Œ"
-msgid "The lock comment is a pathname (was -F intended?); use '--force-log' to override"
+#: ../svn/svn.c:2685
+msgid ""
+"The lock comment is a pathname (was -F intended?); use '--force-log' to "
+"override"
msgstr "é”注释是路径å称 (本æ¥æƒ³ç”¨-F 选项的å—?);请使用“--force-logâ€å¼ºåˆ¶æ‰§è¡Œ"
-msgid "--relocate and --depth are mutually exclusive"
-msgstr "--relocate 与 --depth 是互斥的"
-
-msgid "--relocate and --non-recursive (-N) are mutually exclusive"
-msgstr "--relocate 与 --non-recursive (-N) 是互斥的"
-
+#: ../svn/svn.c:2709
msgid "--auto-props and --no-auto-props are mutually exclusive"
msgstr "--auto-props 与 --no-auto-props 是互斥的"
-msgid "--reintegrate cannot be used with --ignore-ancestry or --record-only"
-msgstr "--reintegrate ä¸èƒ½ä¸Ž --ignore-ancestry 或 --record-only 共存"
-
-msgid "--reintegrate cannot be used with --ignore-ancestry"
-msgstr "--reintegrate ä¸èƒ½ä¸Ž --ignore-ancestry 共存"
-
-msgid "--reintegrate cannot be used with --record-only"
-msgstr "--reintegrate ä¸èƒ½ä¸Ž --record-only 共存"
-
+#: ../svn/svn.c:2814 ../svn/svn.c:2821
#, c-format
msgid "--accept=%s incompatible with --non-interactive"
msgstr "--accept=%s 与 --non-interactive ä¸å…¼å®¹"
-msgid "Try 'svn help' for more info"
-msgstr "请使用 “svn help†以得到更多信æ¯"
+#: ../svn/svn.c:2877
+#, c-format
+msgid "Try 'svn help %s' for more information"
+msgstr "请使用 “svn help %s†以得到更多信æ¯"
+#: ../svn/svn.c:2883
msgid "Please see the 'svn upgrade' command"
msgstr "请å‚阅命令 'svn upgrade'"
-msgid "svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)\n"
-msgstr "svn: è¿è¡Œâ€œsvn cleanupâ€åˆ é™¤é”定 (输入“svn help cleanupâ€å¾—到用法)\n"
-
-msgid "-r and -c can't be used with --reintegrate"
-msgstr "-r å’Œ -c ä¸èƒ½ä¸Ž --reintegrate 共存"
-
-msgid "Merge source required"
-msgstr "需è¦åˆå¹¶æº"
-
-msgid "Second revision required"
-msgstr "需è¦ç¬¬äºŒä¸ªç‰ˆæœ¬"
-
-msgid "Too many arguments given"
-msgstr "å‚数过多"
-
-msgid "Cannot specify a revision range with two URLs"
-msgstr "ä¸èƒ½å¯¹ä¸¤ä¸ª URL 指定版本范围"
-
-msgid "A working copy merge source needs an explicit revision"
-msgstr "工作副本的åˆå¹¶æ¥æºéœ€è¦æŒ‡å®šç‰ˆæœ¬"
-
-msgid "--depth cannot be used with --reintegrate"
-msgstr "--depth ä¸èƒ½ä¸Ž --reintegrate 共存"
-
-msgid "--force cannot be used with --reintegrate"
-msgstr "--force ä¸èƒ½ä¸Ž --reintegrate 共存"
-
-msgid "--reintegrate can only be used with a single merge source"
-msgstr "--reintegrate åªèƒ½ç”¨äºŽå•ä¸€åˆå¹¶æº"
-
-msgid "--allow-mixed-revisions cannot be used with --reintegrate"
-msgstr "--allow-mixed-revisions ä¸èƒ½ä¸Ž --reintegrate 共存"
-
+#: ../svn/svn.c:2889 ../svnmucc/svnmucc.c:1449 ../svnrdump/svnrdump.c:1175
msgid ""
-"Merge tracking not possible, use --ignore-ancestry or\n"
-"fix invalid mergeinfo in target with 'svn propset'"
+"Authentication failed and interactive prompting is disabled; see the --force-"
+"interactive option"
msgstr ""
-"ä¸èƒ½æ‰§è¡Œåˆå¹¶è·Ÿè¸ªï¼Œå¯¹ç›®æ ‡ä½¿ç”¨â€œsvn propsetâ€ä¿®æ­£éžæ³•åˆå¹¶ä¿¡æ¯ï¼Œæˆ–者使用选项\n"
-"--ignore-ancestry"
-
-msgid "Not enough arguments given"
-msgstr "没有æ供足够的å‚æ•°"
-
-msgid "Try 'svn add' or 'svn add --non-recursive' instead?"
-msgstr "å°è¯•ç”¨ “svn addâ€æˆ– “svn add --non-recursiveâ€ä»£æ›¿ï¼Ÿ"
-
-msgid "Try 'svn mkdir --parents' instead?"
-msgstr "å°è¯• “svn mkdir --parentsâ€ï¼Ÿ"
-
-msgid "Summary of conflicts:\n"
-msgstr "冲çªæ¦‚è¦ï¼š\n"
-
-#, c-format
-msgid " Text conflicts: %u\n"
-msgstr " 正文冲çªï¼š%u\n"
-#, c-format
-msgid " Property conflicts: %u\n"
-msgstr " 属性冲çªï¼š%u\n"
-
-#, c-format
-msgid " Tree conflicts: %u\n"
-msgstr " 树冲çªï¼š%u\n"
-
-#, c-format
-msgid " Skipped paths: %u\n"
-msgstr " 跳过的路径:%u\n"
-
-#, c-format
-msgid "Skipped missing target: '%s'\n"
-msgstr "跳过缺少的目标: “%sâ€\n"
-
-#, c-format
-msgid "Skipped target: '%s' -- copy-source is missing\n"
-msgstr "跳过目标: '%s' -- copy-source 丢失\n"
-
-#, c-format
-msgid "Skipped '%s'\n"
-msgstr "跳过“%sâ€\n"
-
-#, c-format
-msgid "Skipped '%s' -- An obstructing working copy was found\n"
-msgstr "忽略“%s†-- å‘现障ç¢å·¥ä½œå‰¯æœ¬\n"
-
-#, c-format
-msgid "Skipped '%s' -- Has no versioned parent\n"
-msgstr "已跳过 '%s' -- 没有已版本控制的父亲\n"
-
-#, c-format
-msgid "Skipped '%s' -- Access denied\n"
-msgstr "已跳过 '%s' -- æ‹’ç»è®¿é—®\n"
-
-#, c-format
-msgid "Skipped '%s' -- Node remains in conflict\n"
-msgstr "已跳过 '%s' -- 节点处于冲çªçŠ¶æ€\n"
-
-#, c-format
-msgid "Restored '%s'\n"
-msgstr "已还原“%sâ€\n"
-
-#, c-format
-msgid "Reverted '%s'\n"
-msgstr "å·²æ¢å¤â€œ%sâ€\n"
-
-#, c-format
-msgid "Failed to revert '%s' -- try updating instead.\n"
-msgstr "无法æ¢å¤â€œ%sâ€-- 请改用更新试试。\n"
-
-#, c-format
-msgid "Resolved conflicted state of '%s'\n"
-msgstr "“%sâ€çš„冲çªçŠ¶æ€å·²è§£å†³\n"
-
-#, c-format
-msgid "> applied hunk ## -%lu,%lu +%lu,%lu ## with offset %s"
-msgstr "> å·²åº”ç”¨å— ## -%lu,%lu +%lu,%lu ##,å移 %s"
-
-#, c-format
-msgid "> applied hunk @@ -%lu,%lu +%lu,%lu @@ with offset %s"
-msgstr "> å·²åº”ç”¨å— @@ -%lu,%lu +%lu,%lu @@ å移 %s"
-
-#, c-format
-msgid "> applied hunk ## -%lu,%lu +%lu,%lu ## with fuzz %lu (%s)\n"
-msgstr "> å·²åº”ç”¨å— ## -%lu,%lu +%lu,%lu ## 模糊 %lu (%s)\n"
-
-#, c-format
-msgid "> applied hunk @@ -%lu,%lu +%lu,%lu @@ with fuzz %lu\n"
-msgstr "> å·²åº”ç”¨å— @@ -%lu,%lu +%lu,%lu @@ 模糊 %lu\n"
-
-#, c-format
-msgid "> rejected hunk ## -%lu,%lu +%lu,%lu ## (%s)\n"
-msgstr "> 已拒ç»å— ## -%lu,%lu +%lu,%lu ## (%s)\n"
-
-#, c-format
-msgid "> rejected hunk @@ -%lu,%lu +%lu,%lu @@\n"
-msgstr "> 已拒ç»çš„å— @@ -%lu,%lu +%lu,%lu @@\n"
-
-#, c-format
-msgid "> hunk ## -%lu,%lu +%lu,%lu ## already applied (%s)\n"
-msgstr "> å— ## -%lu,%lu +%lu,%lu ## å·²ç»åº”用 (%s)\n"
-
-#, c-format
-msgid "> hunk @@ -%lu,%lu +%lu,%lu @@ already applied\n"
-msgstr "> å— @@ -%lu,%lu +%lu,%lu @@ å·²ç»åº”用\n"
-
-#, c-format
+#: ../svn/svn.c:2894
msgid ""
-"\n"
-"Fetching external item into '%s':\n"
+"Reading file from standard input because of -F option; this can interfere "
+"with interactive prompting"
msgstr ""
-"\n"
-"正在å–得外部项目至 '%s':\n"
-
-#, c-format
-msgid "Error handling externals definition for '%s':"
-msgstr "处ç†å¤–部引用“%sâ€æ—¶å‡ºé”™ï¼š"
-
-#, c-format
-msgid "Updating '%s':\n"
-msgstr "正在å‡çº§ '%s':\n"
-
-#, c-format
-msgid "Exported external at revision %ld.\n"
-msgstr "已导出版本 %ld 的外部项目。\n"
-
-#, c-format
-msgid "Exported revision %ld.\n"
-msgstr "已导出版本 %ld。\n"
-
-#, c-format
-msgid "Checked out external at revision %ld.\n"
-msgstr "å–出版本 %ld 的外部项目。\n"
-
-#, c-format
-msgid "Checked out revision %ld.\n"
-msgstr "å–出版本 %ld。\n"
-
-#, c-format
-msgid "Updated external to revision %ld.\n"
-msgstr "更新外部项目至版本 %ld。\n"
-
-#, c-format
-msgid "Updated to revision %ld.\n"
-msgstr "更新到版本 %ld。\n"
-
-#, c-format
-msgid "External at revision %ld.\n"
-msgstr "外部项目版本 %ld。\n"
-
-#, c-format
-msgid "At revision %ld.\n"
-msgstr "版本 %ld。\n"
-
-#, c-format
-msgid "External export complete.\n"
-msgstr "完æˆå¤–部项目导出。\n"
-
-#, c-format
-msgid "Export complete.\n"
-msgstr "完æˆå¯¼å‡ºã€‚\n"
-
-#, c-format
-msgid "External checkout complete.\n"
-msgstr "完æˆå–出外部项目。\n"
-
-#, c-format
-msgid "Checkout complete.\n"
-msgstr "完æˆå–出。\n"
-
-#, c-format
-msgid "External update complete.\n"
-msgstr "完æˆå¤–部项目更新。\n"
-#, c-format
-msgid "Update complete.\n"
-msgstr "完æˆæ›´æ–°ã€‚\n"
+#: ../svn/svn.c:2905
+msgid "Run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)"
+msgstr "è¿è¡Œâ€œsvn cleanupâ€åˆ é™¤é” (è¿è¡Œâ€œsvn help cleanupâ€ä»¥å¾—到详细信æ¯)"
-#, c-format
+#: ../svn/svn.c:2912
msgid ""
-"\n"
-"Performing status on external item at '%s':\n"
+"Another process is blocking the working copy database, or the underlying "
+"filesystem does not support file locking; if the working copy is on a "
+"network filesystem, make sure file locking has been enabled on the file "
+"server"
msgstr ""
-"\n"
-"对外部项目“%sâ€è¿›è¡ŒçŠ¶æ€æ£€æŸ¥:\n"
-
-#, c-format
-msgid "Status against revision: %6ld\n"
-msgstr "版本 %6ld 的状æ€\n"
-
-#, c-format
-msgid "Sending copy of %s\n"
-msgstr "正在å‘é€å‰¯æœ¬ %s\n"
-
-#, c-format
-msgid "Sending %s\n"
-msgstr "正在å‘é€ %s\n"
-
-#, c-format
-msgid "Adding copy of (bin) %s\n"
-msgstr "正在增加 (二进制) %s\n"
-
-#, c-format
-msgid "Adding (bin) %s\n"
-msgstr "正在增加 (二进制) %s\n"
-
-#, c-format
-msgid "Adding copy of %s\n"
-msgstr "正在增加副本 %s\n"
-
-#, c-format
-msgid "Adding %s\n"
-msgstr "正在增加 %s\n"
-#, c-format
-msgid "Deleting copy of %s\n"
-msgstr "正在删除副本 %s\n"
-
-#, c-format
-msgid "Deleting %s\n"
-msgstr "正在删除 %s\n"
-
-#, c-format
-msgid "Replacing copy of %s\n"
-msgstr "正在替æ¢å‰¯æœ¬ %s\n"
-
-#, c-format
-msgid "Replacing %s\n"
-msgstr "æ­£åœ¨æ›¿æ¢ %s\n"
-
-#, c-format
-msgid "Transmitting file data "
-msgstr "传输文件数æ®"
-
-#, c-format
-msgid "'%s' locked by user '%s'.\n"
-msgstr "“%sâ€è¢«ç”¨æˆ·â€œ%sâ€é”定。\n"
-
-#, c-format
-msgid "'%s' unlocked.\n"
-msgstr "“%sâ€è§£é™¤é”定。\n"
-
-#, c-format
-msgid "--- Merging differences between repository URLs into '%s':\n"
-msgstr "--- 正在åˆå¹¶ç‰ˆæœ¬åº“ URL 之间的差异到 “%sâ€ï¼š\n"
-
-#, c-format
-msgid "--- Merging r%ld into '%s':\n"
-msgstr "--- 正在åˆå¹¶ r%ld 到 “%sâ€:\n"
-
-#, c-format
-msgid "--- Reverse-merging r%ld into '%s':\n"
-msgstr "--- 正在åå‘åˆå¹¶ r%ld 到 “%sâ€:\n"
-
-#, c-format
-msgid "--- Merging r%ld through r%ld into '%s':\n"
-msgstr "--- 正在åˆå¹¶ r%ld,ç»ç”± r%ld,到 “%sâ€:\n"
-
-#, c-format
-msgid "--- Reverse-merging r%ld through r%ld into '%s':\n"
-msgstr "--- 正在åå‘åˆå¹¶ r%ld,ç»ç”± r%ld,到 “%sâ€:\n"
-
-#, c-format
-msgid "--- Recording mergeinfo for merge between repository URLs into '%s':\n"
-msgstr "--- 记录版本库 URL 之间的åˆå¹¶ä¿¡æ¯åˆ°â€œ%sâ€ï¼š\n"
-
-#, c-format
-msgid "--- Recording mergeinfo for merge of r%ld into '%s':\n"
-msgstr "--- 记录åˆå¹¶ r%ld 到“%sâ€çš„ä¿¡æ¯:\n"
-
-#, c-format
-msgid "--- Recording mergeinfo for reverse merge of r%ld into '%s':\n"
-msgstr "--- 记录åå‘åˆå¹¶ r%ld 到“%sâ€çš„ä¿¡æ¯:\n"
-
-#, c-format
-msgid "--- Recording mergeinfo for merge of r%ld through r%ld into '%s':\n"
-msgstr "--- 记录åˆå¹¶ r%ld,ç»ç”± r%ld,到“%sâ€çš„ä¿¡æ¯:\n"
-
-#, c-format
-msgid "--- Recording mergeinfo for reverse merge of r%ld through r%ld into '%s':\n"
-msgstr "--- 记录åå‘åˆå¹¶ r%ld,ç»ç”± r%ld,到“%sâ€çš„ä¿¡æ¯:\n"
-
-#, c-format
-msgid "--- Eliding mergeinfo from '%s':\n"
-msgstr "--- 正在从 '%s' 删除åˆå¹¶ä¿¡æ¯:\n"
-
-#, c-format
-msgid "--- Merging differences between foreign repository URLs into '%s':\n"
-msgstr "--- 正在åˆå¹¶å¤–部版本库 URL 之间的差异到 “%sâ€ï¼š\n"
-
-#, c-format
-msgid "--- Merging (from foreign repository) r%ld into '%s':\n"
-msgstr "--- 正在åˆå¹¶(从外部版本库) r%ld 到 “%sâ€ï¼š\n"
-
-#, c-format
-msgid "--- Reverse-merging (from foreign repository) r%ld into '%s':\n"
-msgstr "--- 正在åå‘åˆå¹¶(从外部版本库) r%ld 到 “%sâ€:\n"
-
-#, c-format
-msgid "--- Merging (from foreign repository) r%ld through r%ld into '%s':\n"
-msgstr "--- 正在åˆå¹¶(从外部版本库) r%ld,ç»ç”± r%ld,到 “%sâ€:\n"
-
-#, c-format
-msgid "--- Reverse-merging (from foreign repository) r%ld through r%ld into '%s':\n"
-msgstr "--- 正在åå‘åˆå¹¶(从外部版本库) r%ld,ç»ç”± r%ld,到 “%sâ€:\n"
-
-#, c-format
-msgid "property '%s' set on '%s'\n"
-msgstr "设置属性 “%s†于 “%sâ€\n"
-
-#, c-format
-msgid "property '%s' deleted from '%s'.\n"
-msgstr "删除属性 “%s†于 “%sâ€ã€‚\n"
-
-#, c-format
-msgid "Attempting to delete nonexistent property '%s' on '%s'\n"
-msgstr "试图删除ä¸å­˜åœ¨çš„属性“%sâ€äºŽâ€œ%sâ€\n"
-
-#, c-format
-msgid "property '%s' set on repository revision %ld\n"
-msgstr "设定属性 “%s†于版本库版本 %ld\n"
-
-#, c-format
-msgid "property '%s' deleted from repository revision %ld\n"
-msgstr "删除属性 “%s†于版本库版本 %ld\n"
-
-#, c-format
-msgid "Upgraded '%s'\n"
-msgstr "å·²å‡çº§çš„“%sâ€\n"
-
-#, c-format
-msgid "Redirecting to URL '%s':\n"
-msgstr "正在é‡å®šå‘到 URL '%s':\n"
-
-#, c-format
-msgid "Cannot specify revision for deleting versioned property '%s'"
-msgstr "删除纳入版本控制的属性 “%s†时ä¸å¯æŒ‡å®šç‰ˆæœ¬"
-
-#, c-format
-msgid "Set new value for property '%s' on '%s'\n"
-msgstr "属性 “%s†于 “%s†被设为新值\n"
-
-msgid "--encoding option applies only to textual Subversion-controlled properties"
-msgstr "--encoding 选项åªèƒ½ç”¨äºŽ Subversion 的文本属性"
-
-#, c-format
-msgid "Set new value for property '%s' on revision %ld\n"
-msgstr "属性 “%s†于版本 %ld 被设为新值\n"
-
-#, c-format
-msgid "No changes to property '%s' on revision %ld\n"
-msgstr "属性 “%s†于版本 %ld 没有改å˜\n"
-
-#, c-format
-msgid "Cannot specify revision for editing versioned property '%s'"
-msgstr "编辑纳入版本控制的属性 “%s†时ä¸å¯æŒ‡å®šç‰ˆæœ¬"
-
-msgid "Explicit target argument required"
-msgstr "必须明确地æ供目标å‚æ•°"
-
-#, c-format
-msgid "'%s' does not appear to be a working copy path"
-msgstr "“%sâ€ä¸åƒæ˜¯å·¥ä½œå‰¯æœ¬è·¯å¾„"
-
-#, c-format
-msgid "No changes to property '%s' on '%s'\n"
-msgstr "属性 “%s†于 “%s†没有改å˜\n"
-
-msgid "Error writing to stream"
-msgstr "写入æµå‡ºé”™"
-
-#, c-format
-msgid "Properties on '%s':\n"
-msgstr "“%s†上的属性: \n"
-
-msgid "--verbose cannot be used with --revprop or --strict or --xml"
-msgstr "--verbose ä¸èƒ½ä¸Ž --revprop, --strict 或 --xml 共存"
-
-msgid "Strict output of property values only available for single-target, non-recursive propget operations"
-msgstr "精确的输出属性值åªé€‚用于å•ä¸€ç›®æ ‡çš„éžé€’å½’æ“作 propget"
-
-#, c-format
-msgid "Unversioned properties on revision %ld:\n"
-msgstr "版本 %ld 上的未纳入版本控制的属性: \n"
-
-msgid "Could not display properties of all targets because some targets don't exist"
-msgstr "因为一些目标ä¸å­˜åœ¨ï¼Œæ‰€ä»¥ä¸èƒ½æ˜¾ç¤ºå…¨éƒ¨ç›®æ ‡çš„属性"
-
-msgid "Could not display properties of all targets because some targets are not versioned"
-msgstr "因为一些目标没有版本化,所以ä¸èƒ½æ˜¾ç¤ºå…¨éƒ¨ç›®æ ‡çš„属性"
-
-msgid "Must specify the revision as a number, a date or 'HEAD' when operating on a revision property"
-msgstr "æ“作版本属性时,必须指定数字ã€æ—¥æœŸå½¢å¼çš„版本å·æˆ–“HEADâ€ã€‚"
-
-msgid "Wrong number of targets specified"
-msgstr "指定的目标数目错误"
-
-msgid "Either a URL or versioned item is required"
-msgstr "å¿…é¡»æä¾›URL或纳入版本控制的项目"
-
-#, c-format
+#: ../svn/svn.c:2925
msgid ""
-"To turn off the %s property, use 'svn propdel';\n"
-"setting the property to '%s' will not turn it off."
+"When using svn+ssh:// URLs, keep in mind that the --username and --password "
+"options are ignored because authentication is performed by SSH, not "
+"Subversion"
msgstr ""
-"使用 “svn propdel†关闭属性 %s;\n"
-"设置属性为 “%s†ä¸ä¼šå…³é—­å®ƒã€‚"
-
-#, c-format
-msgid "Cannot specify revision for setting versioned property '%s'"
-msgstr "设置å—版本控制的属性 “%s†时ä¸èƒ½æŒ‡å®šç‰ˆæœ¬"
-
-#, c-format
-msgid "Explicit target required ('%s' interpreted as prop value)"
-msgstr "必须明确地æ供目的 (“%sâ€è§£é‡Šä¸ºå±žæ€§å†…容)"
-
-msgid "missing --accept option"
-msgstr "缺少选项 --accept"
-
-msgid "invalid 'accept' ARG"
-msgstr "无效的 “accept†å‚æ•°"
-
-msgid "Try 'svn revert --depth infinity' instead?"
-msgstr "å°è¯• “svn revert --depth infinityâ€ï¼Ÿ"
-
-#, c-format
-msgid ""
-"\n"
-"--- Changelist '%s':\n"
-msgstr ""
-"\n"
-"--- 修改列表 '%s':\n"
+#: ../svn/switch-cmd.c:63
#, c-format
msgid "'%s' to '%s' is not a valid relocation"
msgstr "“%sâ€åˆ°â€œ%sâ€ä¸æ˜¯æœ‰æ•ˆçš„é‡å®šä½"
+#: ../svn/switch-cmd.c:170
#, c-format
-msgid "Path '%s' does not share common version control ancestry with the requested switch location. Use --ignore-ancestry to disable this check."
-msgstr "路径“%sâ€ä¸Žè¯·æ±‚的切æ¢ä½ç½®æ²¡æœ‰å…±åŒçš„祖先。使用 --ignore-ancestry å¯ä»¥ç¦ç”¨æ­¤æ£€æŸ¥ã€‚"
-
-msgid "edit"
-msgstr "编辑"
-
-msgid "delete"
-msgstr "删除"
-
-msgid "add"
-msgstr "增加"
-
-msgid "replace"
-msgstr "替æ¢"
-
-msgid "missing"
-msgstr "失踪"
-
-msgid "obstruction"
-msgstr "阻塞"
-
-msgid "unversioned"
-msgstr "未版本控制"
+msgid ""
+"Path '%s' does not share common version control ancestry with the requested "
+"switch location. Use --ignore-ancestry to disable this check."
+msgstr ""
+"路径“%sâ€ä¸Žè¯·æ±‚的切æ¢ä½ç½®æ²¡æœ‰å…±åŒçš„祖先。使用 --ignore-ancestry å¯ä»¥ç¦ç”¨æ­¤æ£€"
+"查。"
-#, c-format
-msgid "local %s, incoming %s upon %s"
-msgstr "本地 %s,动作 %s,æ“作 %s"
+#: ../svn/switch-cmd.c:180
+msgid ""
+"'svn switch' does not support switching a working copy to a different "
+"repository"
+msgstr "“svn switchâ€ä¸æ”¯æŒå°†å·¥ä½œå‰¯æœ¬åˆ‡æ¢åˆ°ä¸åŒçš„版本库"
+#: ../svn/update-cmd.c:93
#, c-format
msgid "Summary of updates:\n"
msgstr "更新概è¦ï¼š\n"
-#. Print an update summary for this target, removing the current
-#. working directory prefix from PATH (if PATH is at or under
-#. $CWD), and converting the path to local style for display.
+#: ../svn/update-cmd.c:97
#, c-format
msgid " Updated '%s' to r%ld.\n"
msgstr "更新 '%s' 到版本 %ld。\n"
+#: ../svn/util.c:79
#, c-format
msgid ""
"\n"
@@ -8828,9 +12479,11 @@ msgstr ""
"\n"
"æ交åŽçš„版本为 %ld%s。\n"
+#: ../svn/util.c:83
msgid " (the answer to life, the universe, and everything)"
msgstr " (生命,宇宙,和一切的答案)"
+#: ../svn/util.c:92
#, c-format
msgid ""
"\n"
@@ -8839,67 +12492,59 @@ msgstr ""
"\n"
"警告: %s\n"
-msgid "The EDITOR, SVN_EDITOR or VISUAL environment variable or 'editor-cmd' run-time configuration option is empty or consists solely of whitespace. Expected a shell command."
-msgstr "环境å˜é‡ EDITOR,SVN_EDITOR,或 VISUAL;或者è¿è¡Œæ—¶é…置选项 “editor-cmd†为空或å–值包å«äº†ä¸åŠ å¼•å·çš„空格。期望外壳命令。"
-
-msgid "None of the environment variables SVN_EDITOR, VISUAL or EDITOR are set, and no 'editor-cmd' run-time configuration option was found"
-msgstr "没有设置 SVN_EDITOR,VISUAL 或 EDITOR 环境å˜é‡ï¼Œè¿è¡Œæ—¶çš„é…ç½®å‚数中也没有 “editor-cmd†选项"
-
-#, c-format
-msgid "Can't get working directory"
-msgstr "无法å–得工作目录"
-
-#, c-format
-msgid "Can't change working directory to '%s'"
-msgstr "无法改å˜å·¥ä½œç›®å½•åˆ°â€œ%sâ€"
-
-#, c-format
-msgid "Can't restore working directory"
-msgstr "无法还原工作目录"
-
-#, c-format
-msgid "system('%s') returned %d"
-msgstr "system('%s') 返回 %d"
-
-msgid "The SVN_MERGE environment variable is empty or consists solely of whitespace. Expected a shell command.\n"
+#: ../svn/util.c:133
+msgid ""
+"The SVN_MERGE environment variable is empty or consists solely of "
+"whitespace. Expected a shell command.\n"
msgstr "环境å˜é‡ SVN_MERGE 没有设置或者由空白组æˆã€‚期望外壳命令。\n"
-msgid "The environment variable SVN_MERGE and the merge-tool-cmd run-time configuration option were not set.\n"
-msgstr "环境å˜é‡ SVN_MERGE 没有设置,è¿è¡Œæ—¶çš„é…置中也没有设置 “merge-tool-cmdâ€ã€‚\n"
+#: ../svn/util.c:139
+msgid ""
+"The environment variable SVN_MERGE and the merge-tool-cmd run-time "
+"configuration option were not set.\n"
+msgstr ""
+"环境å˜é‡ SVN_MERGE 没有设置,è¿è¡Œæ—¶çš„é…置中也没有设置 “merge-tool-cmdâ€ã€‚\n"
+#: ../svn/util.c:169
#, c-format
msgid "The external merge tool exited with exit code %d"
msgstr "外部åˆå¹¶å·¥å…·å·²ç»é€€å‡ºï¼Œä»£ç æ˜¯ %d"
-#, c-format
-msgid "Can't write to '%s'"
-msgstr "无法写入“%sâ€"
-
-msgid "Error normalizing edited contents to internal format"
-msgstr "将编辑内容规格化为内部格å¼å‡ºé”™"
-
+#: ../svn/util.c:211
msgid "Log message contains a zero byte"
msgstr "日志信æ¯ä¸­æœ‰ä¸€ä¸ªé›¶å­—节"
+#: ../svn/util.c:269
#, c-format
msgid " '%s'"
msgstr " '%s'"
+#: ../svn/util.c:273
msgid "Your commit message was left in a temporary file:"
msgstr "您的æ交信æ¯ä¿ç•™åœ¨ä¸´æ—¶æ–‡ä»¶ä¸­: "
+#: ../svn/util.c:325
msgid "--This line, and those below, will be ignored--"
msgstr "--此行åŠä»¥ä¸‹å†…容将会被忽略--"
+#: ../svn/util.c:360
msgid "Error normalizing log message to internal format"
msgstr "将日志内容规格化为内部格å¼å‡ºé”™"
+#: ../svn/util.c:447 ../svnmucc/svnmucc.c:763
msgid "Cannot invoke editor to get log message when non-interactive"
msgstr "在éžäº¤äº’å¼çŽ¯å¢ƒä¸­ä¸èƒ½è°ƒç”¨ç¼–辑器获得日志信æ¯"
-msgid "Could not use external editor to fetch log message; consider setting the $SVN_EDITOR environment variable or using the --message (-m) or --file (-F) options"
-msgstr "无法使用外部编辑器获得日志信æ¯ï¼›è€ƒè™‘设置环境å˜é‡ $SVN_EDITOR,或者使用 --message (-m) 或 --file (-F) 选项"
+#: ../svn/util.c:460
+msgid ""
+"Could not use external editor to fetch log message; consider setting the "
+"$SVN_EDITOR environment variable or using the --message (-m) or --file (-F) "
+"options"
+msgstr ""
+"无法使用外部编辑器获得日志信æ¯ï¼›è€ƒè™‘设置环境å˜é‡ $SVN_EDITOR,或者使用 --"
+"message (-m) 或 --file (-F) 选项"
+#: ../svn/util.c:496
msgid ""
"\n"
"Log message unchanged or not specified\n"
@@ -8909,103 +12554,130 @@ msgstr ""
"日志信æ¯æœªä¿®æ”¹ï¼Œæˆ–未指定\n"
"a)终止,c)继续,e)编辑:\n"
-msgid "Use --force to override this restriction (local modifications may be lost)"
+#: ../svn/util.c:549
+msgid ""
+"Use --force to override this restriction (local modifications may be lost)"
msgstr "请使用 --force 选项强制执行(å¯èƒ½ä¼šä¸¢å¤±æœ¬åœ°ä¿®æ”¹)"
+#: ../svn/util.c:738 ../svn/util.c:771
msgid "none"
msgstr "æ— "
+#: ../svn/util.c:739
msgid "file"
msgstr "文件"
+#: ../svn/util.c:740
msgid "dir"
msgstr "目录"
+#: ../svn/util.c:772
msgid "update"
msgstr "æ›´æ–°"
+#: ../svn/util.c:773
msgid "switch"
msgstr "切æ¢"
-msgid "merge"
-msgstr "åˆå¹¶"
-
+#: ../svn/util.c:896
msgid "(invalid date)"
msgstr "(éžæ³•æ—¥æœŸ)"
+#: ../svn/util.c:1069
+#, c-format
+msgid ""
+"svn: warning: '%s' is a binary mime-type but file '%s' looks like text; "
+"diff, merge, blame, and other operations will stop working on this file\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:217 ../svnrdump/svnrdump.c:120
msgid "specify revision number ARG (or X:Y range)"
msgstr "指定版本 ARG (或 X:Y 范围)"
-msgid "dump incrementally"
-msgstr "以增é‡æ–¹å¼è¿›è¡Œè½¬å­˜"
+#: ../svnadmin/svnadmin.c:220 ../svnlook/svnlook.c:161
+msgid "specify transaction name ARG"
+msgstr "指定事务å称 ARG"
+
+#: ../svnadmin/svnadmin.c:223
+msgid "dump or hotcopy incrementally"
+msgstr "以增é‡æ–¹å¼è¿›è¡Œè½¬å­˜æˆ–热å¤åˆ¶"
+#: ../svnadmin/svnadmin.c:226
msgid "use deltas in dump output"
msgstr "在转存输出中使用差异"
+#: ../svnadmin/svnadmin.c:229
msgid "bypass the repository hook system"
msgstr "跳过版本库钩å­ç³»ç»Ÿ"
+#: ../svnadmin/svnadmin.c:232
msgid "bypass property validation logic"
msgstr "跳过属性校验逻辑"
+#: ../svnadmin/svnadmin.c:235 ../svnlook/svnlook.c:192
+#: ../svnrdump/svnrdump.c:122 ../svnserve/svnserve.c:290
+#: ../svnversion/svnversion.c:142
msgid "no progress (only errors) to stderr"
msgstr "在标准错误输出ä¸æ˜¾ç¤ºè¿›åº¦ (仅错误)"
+#: ../svnadmin/svnadmin.c:238
msgid "ignore any repos UUID found in the stream"
msgstr "忽略所有æµä¸­çš„版本库 UUID"
+#: ../svnadmin/svnadmin.c:241
msgid "set repos UUID to that found in stream, if any"
msgstr "如果æµä¸­å­˜åœ¨UUID,则设定为版本库的 UUID"
+#: ../svnadmin/svnadmin.c:244
msgid "type of repository: 'fsfs' (default) or 'bdb'"
msgstr "版本库类型: “fsfsâ€(默认)或“bdbâ€"
+#: ../svnadmin/svnadmin.c:247
msgid "load at specified directory in repository"
msgstr "加载到版本库指定的目录中"
+#: ../svnadmin/svnadmin.c:250
msgid "disable fsync at transaction commit [Berkeley DB]"
msgstr "在æ交事务时ç¦ç”¨fsync [BDB]"
+#: ../svnadmin/svnadmin.c:253
msgid "disable automatic log file removal [Berkeley DB]"
msgstr "ç¦ç”¨è‡ªåŠ¨åˆ é™¤æ—¥å¿—文件 [BDB]"
+#: ../svnadmin/svnadmin.c:259
msgid ""
"remove redundant Berkeley DB log files\n"
" from source repository [Berkeley DB]"
msgstr "删除æºç‰ˆæœ¬åº“中多余的BDB日志文件 [BDB]"
+#: ../svnadmin/svnadmin.c:263
msgid "call pre-commit hook before committing revisions"
msgstr "æ交版本å‰è°ƒç”¨ pre-commit é’©å­"
+#: ../svnadmin/svnadmin.c:266
msgid "call post-commit hook after committing revisions"
msgstr "æ交版本åŽè°ƒç”¨ post-commit é’©å­"
+#: ../svnadmin/svnadmin.c:269
msgid "call hook before changing revision property"
msgstr "修改属性å‰è°ƒç”¨é’©å­"
+#: ../svnadmin/svnadmin.c:272
msgid "call hook after changing revision property"
msgstr "修改属性åŽè°ƒç”¨é’©å­"
+#: ../svnadmin/svnadmin.c:275
msgid ""
"wait instead of exit if the repository is in\n"
" use by another process"
msgstr "如果版本库被其他进程å ç”¨ï¼Œç­‰å¾…而ä¸ç›´æŽ¥é€€å‡º"
-msgid ""
-"use format compatible with Subversion versions\n"
-" earlier than 1.4"
-msgstr "使用与1.4之å‰ç‰ˆæœ¬å…¼å®¹çš„æ ¼å¼"
-
-msgid ""
-"use format compatible with Subversion versions\n"
-" earlier than 1.5"
-msgstr "使用 Subversion 1.5 之å‰ç‰ˆæœ¬çš„æ ¼å¼"
-
-msgid ""
-"use format compatible with Subversion versions\n"
-" earlier than 1.6"
-msgstr "使用与 1.6 之å‰ç‰ˆæœ¬å…¼å®¹çš„æ ¼å¼"
+#: ../svnadmin/svnadmin.c:279 ../svnadmin/svnadmin.c:282
+#: ../svnadmin/svnadmin.c:285
+msgid "deprecated; see --compatible-version"
+msgstr "å·²ç»æ·˜æ±°; å‚è§ --compatible-version"
+#: ../svnadmin/svnadmin.c:288
msgid ""
"size of the extra in-memory cache in MB used to\n"
" minimize redundant operations. Default: 16.\n"
@@ -9015,6 +12687,18 @@ msgstr ""
" 默认值: 16。\n"
" [仅用于 FSFS 仓库]"
+#: ../svnadmin/svnadmin.c:293
+#, fuzzy
+msgid ""
+"use repository format compatible with Subversion\n"
+" version ARG (\"1.5.5\", \"1.7\", etc.)"
+msgstr "使用 Subversion 1.5 之å‰ç‰ˆæœ¬çš„æ ¼å¼"
+
+#: ../svnadmin/svnadmin.c:296
+msgid "read repository paths from file ARG"
+msgstr "从文件 ARG 读å–版本库路径"
+
+#: ../svnadmin/svnadmin.c:308
msgid ""
"usage: svnadmin crashtest REPOS_PATH\n"
"\n"
@@ -9023,8 +12707,10 @@ msgid ""
msgstr ""
"用法: svnadmin crashtest REPOS_PATH\n"
"\n"
-"打开ä½äºŽ REPOS_PATH 的版本库, 然åŽç»ˆæ­¢, 从而模拟一个æŒæœ‰ç‰ˆæœ¬åº“å¥æŸ„进程的崩溃。\n"
+"打开ä½äºŽ REPOS_PATH 的版本库, 然åŽç»ˆæ­¢, 从而模拟一个æŒæœ‰ç‰ˆæœ¬åº“å¥æŸ„进程的崩"
+"溃。\n"
+#: ../svnadmin/svnadmin.c:314
msgid ""
"usage: svnadmin create REPOS_PATH\n"
"\n"
@@ -9034,6 +12720,7 @@ msgstr ""
"\n"
"在 REPOS_PATH 创建一个新的空版本库。\n"
+#: ../svnadmin/svnadmin.c:323
msgid ""
"usage: svnadmin deltify [-r LOWER[:UPPER]] REPOS_PATH\n"
"\n"
@@ -9048,6 +12735,7 @@ msgstr ""
"在指定的版本范围中,对其中å˜åŠ¨çš„路径增é‡è®¡ç®—。借助åªå‚¨å­˜ä¸Žä»¥å‰ç‰ˆæœ¬çš„差异,\n"
"它本质上å¯åŽ‹ç¼©ç‰ˆæœ¬åº“。如果没有指定版本则直接对 HEAD 版本进行。\n"
+#: ../svnadmin/svnadmin.c:332
msgid ""
"usage: svnadmin dump REPOS_PATH [-r LOWER[:UPPER] [--incremental]]\n"
"\n"
@@ -9063,12 +12751,28 @@ msgid ""
msgstr ""
"用法: svnadmin dump REPOS_PATH [-r LOWER[:UPPER] [--incremental]]\n"
"\n"
-"将文件系统的内容,以å¯ç§»æ¤â€œè½¬å­˜â€æ ¼å¼è¾“出到标准输出,并将å馈输出到标准错误。\n"
+"将文件系统的内容,以å¯ç§»æ¤â€œè½¬å­˜â€æ ¼å¼è¾“出到标准输出,并将å馈输出到标准错"
+"误。\n"
"转存 LOWER 与 UPPER 版本之间的内容。如果没有指定版本,则转储所有的版本树。\n"
-"如果åªæœ‰æŒ‡å®š LOWER ,则åªè½¬å‚¨ä¸€ä¸ªç‰ˆæœ¬æ ‘。如果使用了 --incremental 选项,那么\n"
-"第一个转存的版本åªæ述它改å˜çš„路径;å¦åˆ™å®ƒä¼šæ述此版本在版本库中涉åŠåˆ°çš„æ¯ä¸ª\n"
+"如果åªæœ‰æŒ‡å®š LOWER ,则åªè½¬å‚¨ä¸€ä¸ªç‰ˆæœ¬æ ‘。如果使用了 --incremental 选项,那"
+"么\n"
+"第一个转存的版本åªæ述它改å˜çš„路径;å¦åˆ™å®ƒä¼šæ述此版本在版本库中涉åŠåˆ°çš„æ¯"
+"个\n"
"路径。(在任何情况下,第二个以åŠåŽç»­çš„版本,åªæ述这些版本改å˜çš„路径。)\n"
+#: ../svnadmin/svnadmin.c:345
+msgid ""
+"usage: 1. svnadmin freeze REPOS_PATH PROGRAM [ARG...]\n"
+" 2. svnadmin freeze -F FILE PROGRAM [ARG...]\n"
+"\n"
+"1. Run PROGRAM passing ARGS while holding a write-lock on REPOS_PATH.\n"
+"\n"
+"2. Like 1 except all repositories listed in FILE are locked. The file\n"
+" format is repository paths separated by newlines. Repositories are\n"
+" locked in the same order as they are listed in the file.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:355
msgid ""
"usage: svnadmin help [SUBCOMMAND...]\n"
"\n"
@@ -9078,15 +12782,17 @@ msgstr ""
"\n"
"显示本程åºæˆ–å…¶å­å‘½ä»¤çš„用法。\n"
+#: ../svnadmin/svnadmin.c:360
msgid ""
"usage: svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH\n"
"\n"
-"Makes a hot copy of a repository.\n"
+"Make a hot copy of a repository.\n"
+"If --incremental is passed, data which already exists at the destination\n"
+"is not copied again. Incremental mode is implemented for FSFS "
+"repositories.\n"
msgstr ""
-"用法: svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH\n"
-"\n"
-"产生版本库的å³æ—¶å‰¯æœ¬ã€‚\n"
+#: ../svnadmin/svnadmin.c:367
msgid ""
"usage: svnadmin list-dblogs REPOS_PATH\n"
"\n"
@@ -9101,6 +12807,7 @@ msgstr ""
"\n"
"警告: 修改或删除ä»åœ¨ä½¿ç”¨ä¸­çš„记录文件将导致版本库æŸå。\n"
+#: ../svnadmin/svnadmin.c:374
msgid ""
"usage: svnadmin list-unused-dblogs REPOS_PATH\n"
"\n"
@@ -9112,6 +12819,7 @@ msgstr ""
"列出无用的BDB日志文件。\n"
"\n"
+#: ../svnadmin/svnadmin.c:379
msgid ""
"usage: svnadmin load REPOS_PATH\n"
"\n"
@@ -9119,13 +12827,26 @@ msgid ""
"new revisions into the repository's filesystem. If the repository\n"
"was previously empty, its UUID will, by default, be changed to the\n"
"one specified in the stream. Progress feedback is sent to stdout.\n"
+"If --revision is specified, limit the loaded revisions to only those\n"
+"in the dump stream whose revision numbers match the specified range.\n"
msgstr ""
"用法: svnadmin load REPOS_PATH\n"
"\n"
"从标准输入读å–“转存â€æ ¼å¼çš„æµï¼Œå°†æ–°çš„版本æ交至版本库的文件\n"
"系统中。如果版本库原先是空的,默认会将其 UUID 以æµä¸­çš„数值代替。\n"
-"进度报告会é€è‡³æ ‡å‡†è¾“出。\n"
+"进度报告会é€è‡³æ ‡å‡†è¾“出。如果使用了 --revision,那么就åªåŠ è½½è½¬å­˜\n"
+"æµä¸­ä¸ŽæŒ‡å®šèŒƒå›´ä¸€è‡´çš„版本。\n"
+
+#: ../svnadmin/svnadmin.c:391
+msgid ""
+"usage: svnadmin lock REPOS_PATH PATH USERNAME COMMENT-FILE [TOKEN]\n"
+"\n"
+"Lock PATH by USERNAME setting comments from COMMENT-FILE.\n"
+"If provided, use TOKEN as lock token. Use --bypass-hooks to avoid\n"
+"triggering the pre-lock and post-lock hook scripts.\n"
+msgstr ""
+#: ../svnadmin/svnadmin.c:398
msgid ""
"usage: svnadmin lslocks REPOS_PATH [PATH-IN-REPOS]\n"
"\n"
@@ -9134,9 +12855,11 @@ msgid ""
msgstr ""
"用法: svnadmin lslocks REPOS_PATH [PATH-IN-REPOS]\n"
"\n"
-"显示ä½äºŽ PATH-IN-REPOS 或其å­å­™ä¸Šçš„所有é”çš„æè¿°(如果没有æä¾› PATH-IN-REPOS,\n"
+"显示ä½äºŽ PATH-IN-REPOS 或其å­å­™ä¸Šçš„所有é”çš„æè¿°(如果没有æä¾› PATH-IN-"
+"REPOS,\n"
"那么显示版本库根的信æ¯)。\n"
+#: ../svnadmin/svnadmin.c:404
msgid ""
"usage: svnadmin lstxns REPOS_PATH\n"
"\n"
@@ -9146,6 +12869,7 @@ msgstr ""
"\n"
"显示所有未æ交事务的å称。\n"
+#: ../svnadmin/svnadmin.c:409
msgid ""
"usage: svnadmin pack REPOS_PATH\n"
"\n"
@@ -9157,6 +12881,7 @@ msgstr ""
"使用更有效的存储模型压缩版本库。\n"
"它å¯èƒ½ä¸é€‚用于所有的版本库,此时直接结æŸã€‚\n"
+#: ../svnadmin/svnadmin.c:415
msgid ""
"usage: svnadmin recover REPOS_PATH\n"
"\n"
@@ -9170,6 +12895,7 @@ msgstr ""
"对版本库è¿è¡Œä¿®å¤ç¨‹åºã€‚当你é‡åˆ°åº”当执行修å¤çš„错误指示时,请执行此命令。\n"
"ä¿®å¤ Berkeley DB 需è¦ç‹¬å è®¿é—®ï¼Œå¦‚果版本库被其它进程使用,它会立å³é€€å‡ºã€‚\n"
+#: ../svnadmin/svnadmin.c:423
msgid ""
"usage: svnadmin rmlocks REPOS_PATH LOCKED_PATH...\n"
"\n"
@@ -9179,6 +12905,7 @@ msgstr ""
"\n"
"æ— æ¡ä»¶åœ°ä»Žæ¯ä¸ª LOCKED_PATH 删除é”。\n"
+#: ../svnadmin/svnadmin.c:428
msgid ""
"usage: svnadmin rmtxns REPOS_PATH TXN_NAME...\n"
"\n"
@@ -9188,6 +12915,7 @@ msgstr ""
"\n"
"从版本库删除命å事务。\n"
+#: ../svnadmin/svnadmin.c:433
msgid ""
"usage: svnadmin setlog REPOS_PATH -r REVISION FILE\n"
"\n"
@@ -9209,6 +12937,7 @@ msgstr ""
"\n"
" 注æ„: 修订属性并未纳入版本管ç†ï¼Œæ‰€ä»¥è¿™ä¸ªå‘½ä»¤ä¼šè¦†ç›–以å‰çš„属性å–值。\n"
+#: ../svnadmin/svnadmin.c:445
msgid ""
"usage: svnadmin setrevprop REPOS_PATH -r REVISION NAME FILE\n"
"\n"
@@ -9229,6 +12958,7 @@ msgstr ""
"\n"
" 注æ„: 修订属性并未纳入版本管ç†ï¼Œæ‰€ä»¥è¿™ä¸ªå‘½ä»¤ä¼šè¦†ç›–以å‰çš„属性å–值。\n"
+#: ../svnadmin/svnadmin.c:456
msgid ""
"usage: svnadmin setuuid REPOS_PATH [NEW_UUID]\n"
"\n"
@@ -9241,6 +12971,16 @@ msgstr ""
"é‡ç½®ä½äºŽ REPOS_PATH 的版本库 UUID。如果æä¾› NEW_UUID,那么它就æˆä¸ºç‰ˆæœ¬åº“çš„\n"
"æ–° UUIDï¼›å¦åˆ™å°±ä¸ºç‰ˆæœ¬åº“生æˆä¸€ä¸ªæ–°çš„ UUID。\n"
+#: ../svnadmin/svnadmin.c:463
+msgid ""
+"usage: svnadmin unlock REPOS_PATH LOCKED_PATH USERNAME TOKEN\n"
+"\n"
+"Unlock LOCKED_PATH (as USERNAME) after verifying that the token\n"
+"associated with the lock matches TOKEN. Use --bypass-hooks to avoid\n"
+"triggering the pre-unlock and post-unlock hook scripts.\n"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:470
msgid ""
"usage: svnadmin upgrade REPOS_PATH\n"
"\n"
@@ -9264,42 +13004,77 @@ msgstr ""
"æ下执行最少的工作æ¥å®Œæˆå‡çº§ã€‚它ä¸æ‹…ä¿ç‰ˆæœ¬åº“的状æ€ä¸Žå¯¼å‡ºåŽåŠ è½½çš„å‡çº§æ–¹\n"
"案一样最优化。\n"
+#: ../svnadmin/svnadmin.c:483
msgid ""
"usage: svnadmin verify REPOS_PATH\n"
"\n"
-"Verifies the data stored in the repository.\n"
+"Verify the data stored in the repository.\n"
msgstr ""
"用法: svnadmin verify REPOS_PATH\n"
"\n"
"校验版本库中的数æ®ã€‚\n"
+#: ../svnadmin/svnadmin.c:545
msgid "Invalid revision specifier"
msgstr "无效的版本说明"
+#: ../svnadmin/svnadmin.c:549
#, c-format
msgid "Revisions must not be greater than the youngest revision (%ld)"
msgstr "版本å·ä¸èƒ½å¤§äºŽæœ€æ–°çš„版本å·(%ld)"
+#: ../svnadmin/svnadmin.c:656
+#, c-format
+msgid ""
+"%swarning: The \"%s\" repository back-end is deprecated, consider using \"%s"
+"\" instead.\n"
+msgstr "%s警告: “%sâ€ç‰ˆæœ¬åº“åŽç«¯å·²ç»æ·˜æ±°ï¼Œè¯·è€ƒè™‘使用“%sâ€æ¥ä»£æ›¿ã€‚\n"
+
+#: ../svnadmin/svnadmin.c:696
+msgid "Repositories compatible with 1.0.x must use --fs-type=bdb"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:739 ../svnadmin/svnadmin.c:1041
+#: ../svnadmin/svnadmin.c:1222
msgid "First revision cannot be higher than second"
msgstr "第一个版本ä¸å¯å¤§äºŽç¬¬äºŒä¸ª"
+#: ../svnadmin/svnadmin.c:748
#, c-format
msgid "Deltifying revision %ld..."
msgstr "正在计算版本 %ld 差异..."
+#: ../svnadmin/svnadmin.c:752 ../svnadmin/svnadmin.c:844
+#: ../svnadmin/svnadmin.c:859
#, c-format
msgid "done.\n"
msgstr "完æˆã€‚\n"
+#: ../svnadmin/svnadmin.c:825
+msgid "* Verifying repository metadata ...\n"
+msgstr "* æ­£åœ¨æ ¡éªŒç‰ˆæœ¬åº“å…ƒæ•°æ® ...\n"
+
+#: ../svnadmin/svnadmin.c:828
+#, c-format
+msgid "* Verifying metadata at revision %ld ...\n"
+msgstr "* 正在校验版本 %ld çš„å…ƒæ•°æ® ...\n"
+
+#: ../svnadmin/svnadmin.c:838
#, c-format
msgid "Packing revisions in shard %s..."
msgstr "正在打包版本碎片 %s ..."
+#: ../svnadmin/svnadmin.c:853
#, c-format
msgid "Packing revprops in shard %s..."
msgstr "正在打包版本属性碎片 %s ..."
+#: ../svnadmin/svnadmin.c:928
#, c-format
+msgid "<<< Skipped original revision %ld\n"
+msgstr "<<< 已跳过原始版本 %ld\n"
+
+#: ../svnadmin/svnadmin.c:945
msgid ""
"Repository lock acquired.\n"
"Please wait; recovering the repository may take some time...\n"
@@ -9307,7 +13082,7 @@ msgstr ""
"å·²å–得版本库é”定。\n"
"请ç¨å€™ï¼›ä¿®å¤ç‰ˆæœ¬åº“å¯èƒ½éœ€è¦ä¸€æ®µæ—¶é—´...\n"
-#, c-format
+#: ../svnadmin/svnadmin.c:952
msgid ""
"Repository lock acquired.\n"
"Please wait; upgrading the repository may take some time...\n"
@@ -9315,6 +13090,11 @@ msgstr ""
"å·²å–得版本库é”定。\n"
"请ç¨å€™ï¼›å‡çº§ç‰ˆæœ¬åº“å¯èƒ½éœ€è¦ä¸€æ®µæ—¶é—´...\n"
+#: ../svnadmin/svnadmin.c:1102
+msgid "No program provided"
+msgstr "没有æ供程åº"
+
+#: ../svnadmin/svnadmin.c:1138
msgid ""
"general usage: svnadmin SUBCOMMAND REPOS_PATH [ARGS & OPTIONS ...]\n"
"Type 'svnadmin help <subcommand>' for help on a specific subcommand.\n"
@@ -9328,6 +13108,8 @@ msgstr ""
"\n"
"å¯ç”¨çš„å­å‘½ä»¤: \n"
+#: ../svnadmin/svnadmin.c:1145 ../svnlook/svnlook.c:2225
+#: ../svnserve/svnserve.c:336
msgid ""
"The following repository back-end (FS) modules are available:\n"
"\n"
@@ -9335,9 +13117,24 @@ msgstr ""
"下列版本库åŽç«¯(FS) 模å—å¯ç”¨: \n"
"\n"
-msgid "Invalid property value found in dumpstream; consider repairing the source or using --bypass-prop-validation while loading."
-msgstr "在转储æµä¸­å‘现éžæ³•çš„属性值;考虑修å¤ï¼Œæˆ–者在加载时使用选项 '--bypass-prop-validation' 。"
+#: ../svnadmin/svnadmin.c:1174
+#, c-format
+msgid "Invalid revision number (%ld) specified"
+msgstr "指定了无效的版本 (%ld)"
+
+#: ../svnadmin/svnadmin.c:1184
+msgid "Non-numeric revision specified"
+msgstr "指定了éžæ•°å­—版本"
+#: ../svnadmin/svnadmin.c:1243
+msgid ""
+"Invalid property value found in dumpstream; consider repairing the source or "
+"using --bypass-prop-validation while loading."
+msgstr ""
+"在转储æµä¸­å‘现éžæ³•çš„属性值;考虑修å¤ï¼Œæˆ–者在加载时使用选项 '--bypass-prop-"
+"validation' 。"
+
+#: ../svnadmin/svnadmin.c:1309 ../svnadmin/svnadmin.c:1941
msgid ""
"Failed to get exclusive repository access; perhaps another process\n"
"such as httpd, svnserve or svn has it open?"
@@ -9345,10 +13142,12 @@ msgstr ""
"无法独å è®¿é—®ç‰ˆæœ¬åº“ï¼›å¯èƒ½æ˜¯å…¶å®ƒå¦‚ httpd,svnserve 或 svn 等进程已ç»æ‰“开它,\n"
"尚未关闭?"
+#: ../svnadmin/svnadmin.c:1314 ../svnadmin/svnadmin.c:1946
#, c-format
msgid "Waiting on repository lock; perhaps another process has it open?\n"
msgstr "等待版本库é”定中;也许其它的进程把它打开了?\n"
+#: ../svnadmin/svnadmin.c:1322
#, c-format
msgid ""
"\n"
@@ -9357,38 +13156,52 @@ msgstr ""
"\n"
"完æˆä¿®å¤ã€‚\n"
+#: ../svnadmin/svnadmin.c:1329
#, c-format
msgid "The latest repos revision is %ld.\n"
msgstr "最新的版本库版本是 %ld。\n"
+#: ../svnadmin/svnadmin.c:1444
#, c-format
msgid "Transaction '%s' removed.\n"
msgstr "事务“%sâ€è¢«åˆ é™¤ã€‚\n"
+#: ../svnadmin/svnadmin.c:1506 ../svnadmin/svnadmin.c:1551
#, c-format
msgid "Missing revision"
msgstr "丢失版本"
+#: ../svnadmin/svnadmin.c:1509 ../svnadmin/svnadmin.c:1554
#, c-format
msgid "Only one revision allowed"
msgstr "åªå…许一个版本"
+#: ../svnadmin/svnadmin.c:1608
+#, c-format
+msgid "--revision (-r) and --transaction (-t) are mutually exclusive"
+msgstr "--revision (-r) 与 --transaction (-t) 是互斥的"
+
+#: ../svnadmin/svnadmin.c:1775 ../svnlook/svnlook.c:2288
#, c-format
msgid "UUID Token: %s\n"
msgstr "UUID 标识: %s\n"
+#: ../svnadmin/svnadmin.c:1776 ../svnlook/svnlook.c:2289
#, c-format
msgid "Owner: %s\n"
msgstr "所有者: %s\n"
+#: ../svnadmin/svnadmin.c:1777 ../svnlook/svnlook.c:2290
#, c-format
msgid "Created: %s\n"
msgstr "已创建: %s\n"
+#: ../svnadmin/svnadmin.c:1778 ../svnlook/svnlook.c:2291
#, c-format
msgid "Expires: %s\n"
msgstr "过期: %s\n"
+#: ../svnadmin/svnadmin.c:1780
#, c-format
msgid ""
"Comment (%i line):\n"
@@ -9403,23 +13216,38 @@ msgstr[0] ""
"%s\n"
"\n"
+#: ../svnadmin/svnadmin.c:1826
msgid "No paths to unlock provided"
msgstr "没有æ供解é”的路径"
+#: ../svnadmin/svnadmin.c:1844
#, c-format
msgid "Path '%s' isn't locked.\n"
msgstr "路径 “%s†没有被é”定。\n"
+#: ../svnadmin/svnadmin.c:1856
#, c-format
msgid "Removed lock on '%s'.\n"
msgstr "删除 “%s†上的é”。\n"
-msgid "Upgrade of this repository's underlying versioned filesystem is not supported; consider dumping and loading the data elsewhere"
+#: ../svnadmin/svnadmin.c:1909
+#, c-format
+msgid "'%s' unlocked by user '%s'.\n"
+msgstr "“%sâ€è¢«ç”¨æˆ·â€œ%sâ€è§£é”。\n"
+
+#: ../svnadmin/svnadmin.c:1956
+msgid ""
+"Upgrade of this repository's underlying versioned filesystem is not "
+"supported; consider dumping and loading the data elsewhere"
msgstr "文件系统ä¸æ”¯æŒå‡çº§æ­¤ç‰ˆæœ¬åº“;请考虑使用导出åŽåŠ è½½æ•°æ®çš„å‡çº§æ–¹æ¡ˆ"
-msgid "Upgrade of this repository is not supported; consider dumping and loading the data elsewhere"
+#: ../svnadmin/svnadmin.c:1963
+msgid ""
+"Upgrade of this repository is not supported; consider dumping and loading "
+"the data elsewhere"
msgstr "ä¸æ”¯æŒå‡çº§æ­¤ç‰ˆæœ¬åº“;请考虑使用导出åŽåŠ è½½æ•°æ®çš„å‡çº§æ–¹æ¡ˆ"
+#: ../svnadmin/svnadmin.c:1969
#, c-format
msgid ""
"\n"
@@ -9428,20 +13256,36 @@ msgstr ""
"\n"
"完æˆå‡çº§ã€‚\n"
-msgid "Multiple revision arguments encountered; try '-r N:M' instead of '-r N -r M'"
+#: ../svnadmin/svnadmin.c:2054 ../svnrdump/svnrdump.c:923
+msgid ""
+"Multiple revision arguments encountered; try '-r N:M' instead of '-r N -r M'"
msgstr "é‡åˆ°äº†å¤šä¸ªç‰ˆæœ¬å‚数;请使用“-r N:Mâ€ä»£æ›¿â€œ-r M -r Nâ€"
+#: ../svnadmin/svnadmin.c:2132
+#, c-format
+msgid "Cannot create pre-1.0-compatible repositories"
+msgstr "ä¸èƒ½åˆ›å»ºä¸Žæ—©äºŽ 1.0 版本兼容的版本库"
+
+#: ../svnadmin/svnadmin.c:2145
+#, c-format
+msgid "Cannot guarantee compatibility beyond the current running version (%s)"
+msgstr ""
+
+#: ../svnadmin/svnadmin.c:2234
#, c-format
msgid "subcommand argument required\n"
msgstr "å¿…é¡»æä¾›å­å‘½ä»¤å‚æ•°\n"
+#: ../svnadmin/svnadmin.c:2269
msgid "Repository argument required"
msgstr "需è¦ç‰ˆæœ¬åº“å‚æ•°"
+#: ../svnadmin/svnadmin.c:2282
#, c-format
msgid "'%s' is a URL when it should be a local path"
msgstr "“%sâ€åº”该是本地路径,实际上å´æ˜¯ URL"
+#: ../svnadmin/svnadmin.c:2313
#, c-format
msgid ""
"Subcommand '%s' doesn't accept option '%s'\n"
@@ -9450,70 +13294,98 @@ msgstr ""
"å­å‘½ä»¤â€œ%sâ€ä¸æŽ¥å—选项“%sâ€\n"
"使用“svnadmin help %sâ€å¾—到用法。\n"
+#: ../svnadmin/svnadmin.c:2356
msgid "Try 'svnadmin help' for more info"
msgstr "请使用“svnadmin helpâ€ä»¥å¾—到更多信æ¯"
+#: ../svndumpfilter/svndumpfilter.c:78
#, c-format
msgid "Can't open stdio file"
msgstr "无法打开标准输出/入文件"
+#: ../svndumpfilter/svndumpfilter.c:405
msgid "This is an empty revision for padding."
msgstr "这是一个用æ¥å¡«å……的空版本。"
+#: ../svndumpfilter/svndumpfilter.c:488
#, c-format
msgid "Revision %ld committed as %ld.\n"
msgstr "版本 %ld æ交为 %ld。\n"
+#: ../svndumpfilter/svndumpfilter.c:511
#, c-format
msgid "Revision %ld skipped.\n"
msgstr "跳过版本 %ld。\n"
+#: ../svndumpfilter/svndumpfilter.c:605
#, c-format
msgid "Invalid copy source path '%s'"
msgstr "å¤åˆ¶æºè·¯å¾„“%sâ€æ— æ•ˆ"
+#: ../svndumpfilter/svndumpfilter.c:662
#, c-format
msgid "No valid copyfrom revision in filtered stream"
msgstr "在过滤æµä¸­æ²¡æœ‰æœ‰æ•ˆçš„copyfrom版本"
+#: ../svndumpfilter/svndumpfilter.c:787
#, c-format
msgid "Missing merge source path '%s'; try with --skip-missing-merge-sources"
msgstr "缺少åˆå¹¶æºè·¯å¾„ “%sâ€ï¼›å°è¯• --skip-missing-merge-sources"
+#: ../svndumpfilter/svndumpfilter.c:809
#, c-format
msgid "No valid revision range 'start' in filtered stream"
msgstr "在过滤æµä¸­æ²¡æœ‰æœ‰æ•ˆçš„版本范围 “startâ€"
+#: ../svndumpfilter/svndumpfilter.c:816
#, c-format
msgid "No valid revision range 'end' in filtered stream"
msgstr "在过滤æµä¸­æ²¡æœ‰æœ‰æ•ˆçš„版本范围 “endâ€"
-msgid "Delta property block detected - not supported by svndumpfilter"
-msgstr "检测到 Delta å±žæ€§å— - svndumpfilter ä¸æ”¯æŒ"
+#: ../svndumpfilter/svndumpfilter.c:862 ../svndumpfilter/svndumpfilter.c:893
+#, c-format
+msgid ""
+"Delta property block detected, but deltas are not enabled for node '%s' in "
+"original revision %ld"
+msgstr ""
+#: ../svndumpfilter/svndumpfilter.c:1026
msgid "Do not display filtering statistics."
msgstr "ä¸æ˜¾ç¤ºè¿‡æ»¤çš„统计数æ®ã€‚"
+#: ../svndumpfilter/svndumpfilter.c:1028
msgid "Treat the path prefixes as file glob patterns."
msgstr "将路径å‰ç¼€è§†ä¸ºæ–‡ä»¶ç»Ÿé…模å¼ã€‚"
+#: ../svndumpfilter/svndumpfilter.c:1030
msgid "Remove revisions emptied by filtering."
msgstr "删除因过滤而产生的空版本。"
+#: ../svndumpfilter/svndumpfilter.c:1032
+msgid ""
+"Remove all empty revisions found in dumpstream\n"
+" except revision 0."
+msgstr ""
+
+#: ../svndumpfilter/svndumpfilter.c:1035
msgid "Renumber revisions left after filtering."
msgstr "过滤åŽé‡ç¼–余下的版本。"
+#: ../svndumpfilter/svndumpfilter.c:1038
msgid "Skip missing merge sources."
msgstr "跳过缺少的åˆå¹¶æº"
+#: ../svndumpfilter/svndumpfilter.c:1040
msgid "Don't filter revision properties."
msgstr "ä¸è¿‡æ»¤ç‰ˆæœ¬å±žæ€§ã€‚"
+#: ../svndumpfilter/svndumpfilter.c:1042
msgid ""
"Read additional prefixes, one per line, from\n"
" file ARG."
msgstr "从文件 ARG 中读å–é¢å¤–çš„å‰ç¼€ï¼Œæ¯ä¸ªä¸€è¡Œã€‚"
+#: ../svndumpfilter/svndumpfilter.c:1054
msgid ""
"Filter out nodes with given prefixes from dumpstream.\n"
"usage: svndumpfilter exclude PATH_PREFIX...\n"
@@ -9521,6 +13393,7 @@ msgstr ""
"从转存æµåˆ é™¤åŒ¹é…指定å‰ç¼€çš„节点。\n"
"用法: svndumpfilter exclude PATH_PREFIX...\n"
+#: ../svndumpfilter/svndumpfilter.c:1063
msgid ""
"Filter out nodes without given prefixes from dumpstream.\n"
"usage: svndumpfilter include PATH_PREFIX...\n"
@@ -9528,6 +13401,7 @@ msgstr ""
"从转储串æµä¸­åˆ é™¤æœªåŒ…å«æŒ‡å®šå‰ç¼€çš„节点。\n"
"用法: svndumpfilter include PATH_PREFIX...\n"
+#: ../svndumpfilter/svndumpfilter.c:1072
msgid ""
"Describe the usage of this program or its subcommands.\n"
"usage: svndumpfilter help [SUBCOMMAND...]\n"
@@ -9535,6 +13409,7 @@ msgstr ""
"æ述本程åºæˆ–å…¶å­å‘½ä»¤çš„用法。\n"
"用法: svndumpfilter help [SUBCOMMAND...]\n"
+#: ../svndumpfilter/svndumpfilter.c:1148
msgid ""
"general usage: svndumpfilter SUBCOMMAND [ARGS & OPTIONS ...]\n"
"Type 'svndumpfilter help <subcommand>' for help on a specific subcommand.\n"
@@ -9548,38 +13423,47 @@ msgstr ""
"\n"
"å¯ç”¨çš„å­å‘½ä»¤: \n"
+#: ../svndumpfilter/svndumpfilter.c:1206
#, c-format
msgid "Excluding (and dropping empty revisions for) prefix patterns:\n"
msgstr "排除(以åŠä¸¢å¼ƒç©ºç‰ˆæœ¬)çš„å‰ç¼€åŒ¹é…模å¼: \n"
+#: ../svndumpfilter/svndumpfilter.c:1208
#, c-format
msgid "Excluding prefix patterns:\n"
msgstr "排除å‰ç¼€åŒ¹é…模å¼: \n"
+#: ../svndumpfilter/svndumpfilter.c:1211
#, c-format
msgid "Including (and dropping empty revisions for) prefix patterns:\n"
msgstr "包å«(以åŠä¸¢å¼ƒç©ºç‰ˆæœ¬)çš„å‰ç¼€åŒ¹é…模å¼: \n"
+#: ../svndumpfilter/svndumpfilter.c:1213
#, c-format
msgid "Including prefix patterns:\n"
msgstr "包å«çš„å‰ç¼€åŒ¹é…模å¼: \n"
+#: ../svndumpfilter/svndumpfilter.c:1221
#, c-format
msgid "Excluding (and dropping empty revisions for) prefixes:\n"
msgstr "排除 (以åŠä¸¢å¼ƒç©ºç‰ˆæœ¬) çš„å‰ç¼€: \n"
+#: ../svndumpfilter/svndumpfilter.c:1223
#, c-format
msgid "Excluding prefixes:\n"
msgstr "排除å‰ç¼€: \n"
+#: ../svndumpfilter/svndumpfilter.c:1226
#, c-format
msgid "Including (and dropping empty revisions for) prefixes:\n"
msgstr "åŒ…å« (以åŠä¸¢å¼ƒç©ºç‰ˆæœ¬) çš„å‰ç¼€: \n"
+#: ../svndumpfilter/svndumpfilter.c:1228
#, c-format
msgid "Including prefixes:\n"
msgstr "包å«çš„å‰ç¼€: \n"
+#: ../svndumpfilter/svndumpfilter.c:1256
#, c-format
msgid ""
"Dropped %d revision.\n"
@@ -9591,18 +13475,26 @@ msgstr[0] ""
"删除 %d 个版本。\n"
"\n"
+#: ../svndumpfilter/svndumpfilter.c:1264
msgid "Revisions renumbered as follows:\n"
msgstr "版本被é‡æ–°ç¼–å·å¦‚下: \n"
+#: ../svndumpfilter/svndumpfilter.c:1292
#, c-format
msgid " %ld => (dropped)\n"
msgstr " %ld => (丢弃)\n"
+#: ../svndumpfilter/svndumpfilter.c:1307
#, c-format
msgid "Dropped %d node:\n"
msgid_plural "Dropped %d nodes:\n"
msgstr[0] "丢弃 %d 个节点: \n"
+#: ../svndumpfilter/svndumpfilter.c:1476
+msgid "--drop-empty-revs cannot be used with --drop-all-empty-revs"
+msgstr "--drop-empty-rev ä¸èƒ½ä¸Ž --drop-all-empty-revs 共存"
+
+#: ../svndumpfilter/svndumpfilter.c:1596
#, c-format
msgid ""
"\n"
@@ -9611,6 +13503,7 @@ msgstr ""
"\n"
"错误: 没有æä¾›å‰ç¼€ã€‚\n"
+#: ../svndumpfilter/svndumpfilter.c:1627
#, c-format
msgid ""
"Subcommand '%s' doesn't accept option '%s'\n"
@@ -9619,59 +13512,65 @@ msgstr ""
"å­å‘½ä»¤â€œ%sâ€ä¸æŽ¥å—选项“%sâ€\n"
"使用“svndumpfilter help %sâ€å¾—到用法。\n"
+#: ../svndumpfilter/svndumpfilter.c:1645
msgid "Try 'svndumpfilter help' for more info"
msgstr "请使用“svndumpfilter helpâ€ä»¥å¾—到更多信æ¯"
+#: ../svnlook/svnlook.c:116
msgid "show details for copies"
msgstr "显示æ¯ä¸ªå‰¯æœ¬çš„详细信æ¯"
+#: ../svnlook/svnlook.c:119
msgid "print differences against the copy source"
msgstr "显示与原始内容的差异"
+#: ../svnlook/svnlook.c:122
msgid "show full paths instead of indenting them"
msgstr "显示完整路径(代替缩进)"
+#: ../svnlook/svnlook.c:128
msgid "maximum number of history entries"
msgstr "历å²é¡¹æœ€å¤§æ•°é‡"
-msgid "do not print differences for added files"
-msgstr "ä¸è¦è¾“出增加文件造æˆçš„差异"
-
+#: ../svnlook/svnlook.c:146
msgid "operate on single directory only"
msgstr "åªåœ¨å•ä¸ªç›®å½•æ“作"
+#: ../svnlook/svnlook.c:149
msgid "specify revision number ARG"
msgstr "æŒ‡å®šç‰ˆæœ¬ç¼–å· ARG"
+#: ../svnlook/svnlook.c:152
msgid "operate on a revision property (use with -r or -t)"
msgstr "æ“作版本的属性(使用 -r 或 -t)"
+#: ../svnlook/svnlook.c:155
msgid "show node revision ids for each path"
msgstr "为æ¯ä¸ªè·¯å¾„显示节点版本编å·"
-msgid "specify transaction name ARG"
-msgstr "指定事务å称 ARG"
+#: ../svnlook/svnlook.c:158
+msgid "show path's inherited properties"
+msgstr "显示路径继承的属性"
+#: ../svnlook/svnlook.c:164
msgid "be verbose"
msgstr "详细"
-msgid ""
-"Default: '-u'. When Subversion is invoking an\n"
-" external diff program, ARG is simply passed along\n"
-" to the program. But when Subversion is using its\n"
-" default internal diff implementation, or when\n"
-" Subversion is displaying blame annotations, ARG\n"
-" could be any of the following:\n"
-" -u (--unified):\n"
-" Output 3 lines of unified context.\n"
-" -b (--ignore-space-change):\n"
-" Ignore changes in the amount of white space.\n"
-" -w (--ignore-all-space):\n"
-" Ignore all white space.\n"
-" --ignore-eol-style:\n"
-" Ignore changes in EOL style\n"
-" -p (--show-c-function):\n"
-" Show C function name in diff output."
+#: ../svnlook/svnlook.c:173
+#, fuzzy
+msgid ""
+"Specify differencing options for external diff or\n"
+" internal diff. Default: '-u'. Options are\n"
+" separated by spaces. Internal diff takes:\n"
+" -u, --unified: Show 3 lines of unified "
+"context\n"
+" -b, --ignore-space-change: Ignore changes in\n"
+" amount of white space\n"
+" -w, --ignore-all-space: Ignore all white "
+"space\n"
+" --ignore-eol-style: Ignore changes in EOL "
+"style\n"
+" -p, --show-c-function: Show C function name"
msgstr ""
"缺çœ: “-uâ€ã€‚当 Subversion 调用外部比较程åºæ—¶ï¼ŒARG 直接传给它。但是当\n"
" Subversion 使用缺çœçš„内置比较实现,或者正\n"
@@ -9687,6 +13586,7 @@ msgstr ""
" -p (--show-c-function):\n"
" 在比较输出中显示 C 函数å称。"
+#: ../svnlook/svnlook.c:204
msgid ""
"usage: svnlook author REPOS_PATH\n"
"\n"
@@ -9696,6 +13596,7 @@ msgstr ""
"\n"
"显示作者。\n"
+#: ../svnlook/svnlook.c:209
msgid ""
"usage: svnlook cat REPOS_PATH FILE_PATH\n"
"\n"
@@ -9705,6 +13606,7 @@ msgstr ""
"\n"
"显示文件的内容。å¯çœç•¥ FILE_PATH å‰çš„“/â€ã€‚\n"
+#: ../svnlook/svnlook.c:214
msgid ""
"usage: svnlook changed REPOS_PATH\n"
"\n"
@@ -9714,6 +13616,7 @@ msgstr ""
"\n"
"显示已改å˜çš„路径。\n"
+#: ../svnlook/svnlook.c:219
msgid ""
"usage: svnlook date REPOS_PATH\n"
"\n"
@@ -9723,6 +13626,7 @@ msgstr ""
"\n"
"显示时戳。\n"
+#: ../svnlook/svnlook.c:224
msgid ""
"usage: svnlook diff REPOS_PATH\n"
"\n"
@@ -9732,6 +13636,7 @@ msgstr ""
"\n"
"以 GNU æ ·å¼ï¼Œæ˜¾ç¤ºç‰ˆæœ¬åº“中改å˜çš„文件与属性差异。\n"
+#: ../svnlook/svnlook.c:231
msgid ""
"usage: svnlook dirs-changed REPOS_PATH\n"
"\n"
@@ -9742,6 +13647,7 @@ msgstr ""
"\n"
"æ˜¾ç¤ºæœ¬èº«æ”¹å˜ (编辑属性) 的目录,或是其中的文件修改过的目录。\n"
+#: ../svnlook/svnlook.c:237
msgid ""
"usage: svnlook filesize REPOS_PATH PATH_IN_REPOS\n"
"\n"
@@ -9752,6 +13658,7 @@ msgstr ""
"\n"
"显示ä½äºŽ PATH_IN_REPOS 的文件在版本库中展现的大å°(字节)\n"
+#: ../svnlook/svnlook.c:243
msgid ""
"usage: svnlook help [SUBCOMMAND...]\n"
"\n"
@@ -9761,6 +13668,7 @@ msgstr ""
"\n"
"显示本程åºæˆ–å…¶å­å‘½ä»¤çš„用法。\n"
+#: ../svnlook/svnlook.c:248
msgid ""
"usage: svnlook history REPOS_PATH [PATH_IN_REPOS]\n"
"\n"
@@ -9771,6 +13679,7 @@ msgstr ""
"\n"
"显示版本库中,æŸä¸ªè·¯å¾„的历å²è®°å½•ä¿¡æ¯ (如果没有指定路径,则为根目录)。\n"
+#: ../svnlook/svnlook.c:254
msgid ""
"usage: svnlook info REPOS_PATH\n"
"\n"
@@ -9780,6 +13689,7 @@ msgstr ""
"\n"
"显示作者,时戳,日志信æ¯å¤§å°ï¼Œä»¥åŠæ—¥å¿—ä¿¡æ¯ã€‚\n"
+#: ../svnlook/svnlook.c:259
msgid ""
"usage: svnlook lock REPOS_PATH PATH_IN_REPOS\n"
"\n"
@@ -9789,6 +13699,7 @@ msgstr ""
"\n"
"如果版本库中的路径存在é”,显示其详细信æ¯ã€‚\n"
+#: ../svnlook/svnlook.c:264
msgid ""
"usage: svnlook log REPOS_PATH\n"
"\n"
@@ -9798,6 +13709,7 @@ msgstr ""
"\n"
"显示日志信æ¯ã€‚\n"
+#: ../svnlook/svnlook.c:269
msgid ""
"usage: 1. svnlook propget REPOS_PATH PROPNAME PATH_IN_REPOS\n"
" 2. svnlook propget --revprop REPOS_PATH PROPNAME\n"
@@ -9811,6 +13723,7 @@ msgstr ""
"显示版本库中指定路径上属性的原始值。\n"
"用 --revprop 选项显示版本属性的原始值。\n"
+#: ../svnlook/svnlook.c:278
msgid ""
"usage: 1. svnlook proplist REPOS_PATH PATH_IN_REPOS\n"
" 2. svnlook proplist --revprop REPOS_PATH\n"
@@ -9826,6 +13739,7 @@ msgstr ""
"使用 --revprop 选项列出版本属性。\n"
"使用 -v 选项显示属性的内容。\n"
+#: ../svnlook/svnlook.c:289
msgid ""
"usage: svnlook tree REPOS_PATH [PATH_IN_REPOS]\n"
"\n"
@@ -9837,6 +13751,7 @@ msgstr ""
"显示目录树,从 PATH_IN_REPOS 开始 (如果çœç•¥æ­¤å‚数就从版本库的根目录开始),\n"
"å¯é€‰çš„显示节点版本 id。\n"
+#: ../svnlook/svnlook.c:295
msgid ""
"usage: svnlook uuid REPOS_PATH\n"
"\n"
@@ -9846,6 +13761,7 @@ msgstr ""
"\n"
"显示版本库的 UUID。\n"
+#: ../svnlook/svnlook.c:300
msgid ""
"usage: svnlook youngest REPOS_PATH\n"
"\n"
@@ -9855,22 +13771,28 @@ msgstr ""
"\n"
"显示最新的版本å·ã€‚\n"
+#: ../svnlook/svnlook.c:860
#, c-format
msgid "Copied: %s (from rev %ld, %s)\n"
msgstr "å·²å¤åˆ¶: %s (æ¥è‡ªç‰ˆæœ¬ %ld,%s)\n"
+#: ../svnlook/svnlook.c:928
msgid "Added"
msgstr "已增加"
+#: ../svnlook/svnlook.c:929
msgid "Deleted"
msgstr "已删除"
+#: ../svnlook/svnlook.c:930
msgid "Modified"
msgstr "已修改"
+#: ../svnlook/svnlook.c:931
msgid "Index"
msgstr "索引"
+#: ../svnlook/svnlook.c:942
msgid ""
"(Binary files differ)\n"
"\n"
@@ -9878,24 +13800,30 @@ msgstr ""
"(二进制文件ä¸åŒ)\n"
"\n"
+#: ../svnlook/svnlook.c:1221
msgid "unknown"
msgstr "未知"
+#: ../svnlook/svnlook.c:1278
#, c-format
msgid "Transaction '%s' is not based on a revision; how odd"
msgstr "事务“%sâ€å¹¶éžåŸºäºŽæŸä¸ªç‰ˆæœ¬ï¼›å¤šç¥žç§˜å•Šï¼"
+#: ../svnlook/svnlook.c:1421
#, c-format
msgid "'%s' is a URL, probably should be a path"
msgstr "“%sâ€æ˜¯ URL,也许应该是路径。"
+#: ../svnlook/svnlook.c:1444 ../svnlook/svnlook.c:1467
#, c-format
msgid "Path '%s' is not a file"
msgstr "路径“%sâ€ä¸æ˜¯æ–‡ä»¶"
+#: ../svnlook/svnlook.c:1603
msgid "History item limit reached"
msgstr "达到历å²é¡¹ç›®é™åˆ¶"
+#: ../svnlook/svnlook.c:1622
#, c-format
msgid ""
"REVISION PATH <ID>\n"
@@ -9904,6 +13832,7 @@ msgstr ""
"修 订 版 路径 <ID>\n"
"-------- ---------\n"
+#: ../svnlook/svnlook.c:1627
#, c-format
msgid ""
"REVISION PATH\n"
@@ -9912,21 +13841,40 @@ msgstr ""
"修 订 版 路径\n"
"-------- ----\n"
+#: ../svnlook/svnlook.c:1699
#, c-format
msgid "Property '%s' not found on revision %ld"
msgstr "属性“%sâ€åœ¨ç‰ˆæœ¬ %ld 中找ä¸åˆ°"
+#: ../svnlook/svnlook.c:1708
+#, fuzzy, c-format
+msgid ""
+"Property '%s' not found on path '%s' or inherited from a parent in revision "
+"%ld"
+msgstr "属性 “%s†ä¸åœ¨è·¯å¾„ “%s†的版本 %ld 中"
+
+#: ../svnlook/svnlook.c:1714
#, c-format
msgid "Property '%s' not found on path '%s' in revision %ld"
msgstr "属性 “%s†ä¸åœ¨è·¯å¾„ “%s†的版本 %ld 中"
+#: ../svnlook/svnlook.c:1722
+#, fuzzy, c-format
+msgid ""
+"Property '%s' not found on path '%s' or inherited from a parent in "
+"transaction %s"
+msgstr "属性 “%s†ä¸åœ¨è·¯å¾„ “%s†中,事务 “%sâ€"
+
+#: ../svnlook/svnlook.c:1728
#, c-format
msgid "Property '%s' not found on path '%s' in transaction %s"
msgstr "属性 “%s†ä¸åœ¨è·¯å¾„ “%s†中,事务 “%sâ€"
+#: ../svnlook/svnlook.c:2063
msgid "Missing repository path argument"
msgstr "未æ供版本库路径å‚æ•°"
+#: ../svnlook/svnlook.c:2215
msgid ""
"general usage: svnlook SUBCOMMAND REPOS_PATH [ARGS & OPTIONS ...]\n"
"Note: any subcommand which takes the '--revision' and '--transaction'\n"
@@ -9945,6 +13893,7 @@ msgstr ""
"\n"
"å¯ç”¨çš„å­å‘½ä»¤: \n"
+#: ../svnlook/svnlook.c:2293
#, c-format
msgid ""
"Comment (%i line):\n"
@@ -9956,31 +13905,50 @@ msgstr[0] ""
"注释 (%i 行): \n"
"%s\n"
+#: ../svnlook/svnlook.c:2345
#, c-format
msgid "Missing propname argument"
msgstr "丢失属性åå‚æ•°"
+#: ../svnlook/svnlook.c:2346
#, c-format
msgid "Missing propname and repository path arguments"
msgstr "未æ供属性å称与版本库路径å‚æ•°"
+#: ../svnlook/svnlook.c:2352
msgid "Missing propname or repository path argument"
msgstr "未æ供属性å称或版本库路径å‚æ•°"
+#: ../svnlook/svnlook.c:2516
msgid "Invalid revision number supplied"
msgstr "æ供了无效的版本å·ç "
-msgid "The '--transaction' (-t) and '--revision' (-r) arguments cannot co-exist"
+#: ../svnlook/svnlook.c:2628
+msgid ""
+"The '--transaction' (-t) and '--revision' (-r) arguments cannot co-exist"
msgstr "“--transaction†(-t) 与 “--revision†(-r) å‚æ•°ä¸èƒ½åŒæ—¶å­˜åœ¨"
+#: ../svnlook/svnlook.c:2635
+msgid ""
+"Cannot use the '--show-inherited-props' option with the '--revprop' option"
+msgstr ""
+
+#: ../svnlook/svnlook.c:2694
+#, c-format
+msgid "Try 'svnadmin verify' instead.\n"
+msgstr "请è¿è¡Œâ€œsvnadmin verifyâ€ã€‚\n"
+
+#: ../svnlook/svnlook.c:2728
#, c-format
msgid "Repository argument required\n"
msgstr "需è¦ç‰ˆæœ¬åº“å‚æ•°\n"
+#: ../svnlook/svnlook.c:2737
#, c-format
msgid "'%s' is a URL when it should be a path\n"
msgstr "“%sâ€åº”该是路径,å´æ˜¯URL\n"
+#: ../svnlook/svnlook.c:2789
#, c-format
msgid ""
"Subcommand '%s' doesn't accept option '%s'\n"
@@ -9989,16 +13957,72 @@ msgstr ""
"å­å‘½ä»¤â€œ%sâ€å¹¶ä¸æŽ¥å—选项“%sâ€\n"
"使用“svnlook help %sâ€å¾—到用法。\n"
+#: ../svnlook/svnlook.c:2832
msgid "Try 'svnlook help' for more info"
msgstr "请使用“svnlook helpâ€ä»¥å¾—到更多信æ¯"
+#: ../svnmucc/svnmucc.c:926
+msgid ""
+"Subversion multiple URL command client\n"
+"usage: svnmucc ACTION...\n"
+"\n"
+" Perform one or more Subversion repository URL-based ACTIONs, committing\n"
+" the result as a (single) new revision.\n"
+"\n"
+"Actions:\n"
+" cp REV SRC-URL DST-URL : copy SRC-URL@REV to DST-URL\n"
+" mkdir URL : create new directory URL\n"
+" mv SRC-URL DST-URL : move SRC-URL to DST-URL\n"
+" rm URL : delete URL\n"
+" put SRC-FILE URL : add or modify file URL with contents copied from\n"
+" SRC-FILE (use \"-\" to read from standard input)\n"
+" propset NAME VALUE URL : set property NAME on URL to VALUE\n"
+" propsetf NAME FILE URL : set property NAME on URL to value read from FILE\n"
+" propdel NAME URL : delete property NAME from URL\n"
+"\n"
+"Valid options:\n"
+" -h, -? [--help] : display this text\n"
+" -m [--message] ARG : use ARG as a log message\n"
+" -F [--file] ARG : read log message from file ARG\n"
+" -u [--username] ARG : commit the changes as username ARG\n"
+" -p [--password] ARG : use ARG as the password\n"
+" -U [--root-url] ARG : interpret all action URLs relative to ARG\n"
+" -r [--revision] ARG : use revision ARG as baseline for changes\n"
+" --with-revprop ARG : set revision property in the following format:\n"
+" NAME[=VALUE]\n"
+" --non-interactive : do no interactive prompting (default is to\n"
+" prompt only if standard input is a terminal)\n"
+" --force-interactive : do interactive prompting even if standard\n"
+" input is not a terminal\n"
+" --trust-server-cert : accept SSL server certificates from unknown\n"
+" certificate authorities without prompting (but\n"
+" only with '--non-interactive')\n"
+" -X [--extra-args] ARG : append arguments from file ARG (one per line;\n"
+" use \"-\" to read from standard input)\n"
+" --config-dir ARG : use ARG to override the config directory\n"
+" --config-option ARG : use ARG to override a configuration option\n"
+" --no-auth-cache : do not cache authentication tokens\n"
+" --version : print version information\n"
+msgstr ""
+
+#: ../svnmucc/svnmucc.c:1002
+msgid ""
+"--message (-m), --file (-F), and --with-revprop=svn:log are mutually "
+"exclusive"
+msgstr "--message (-m),--file (-F) 与 --with-revprop=svn:log 是互斥的"
+
+#: ../svnrdump/load_editor.c:382 ../svnsync/svnsync.c:326
#, c-format
msgid "Failed to get lock on destination repos, currently held by '%s'\n"
msgstr "从目标版本库获得é”失败,当å‰è¢«â€œ%sâ€æŒæœ‰\n"
-msgid "Target server does not support atomic revision property edits; consider upgrading it to 1.7."
+#: ../svnrdump/load_editor.c:526
+msgid ""
+"Target server does not support atomic revision property edits; consider "
+"upgrading it to 1.7."
msgstr "目标æœåŠ¡å™¨ä¸æ”¯æŒåŽŸå­ç‰ˆæœ¬çš„属性编辑; 请考虑å‡çº§åˆ° 1.7 。"
+#: ../svnrdump/svnrdump.c:101
msgid ""
"usage: svnrdump dump URL [-r LOWER[:UPPER]]\n"
"\n"
@@ -10008,9 +14032,11 @@ msgid ""
msgstr ""
"用法: svnrdump dump URL [-r LOWER[:UPPER]]\n"
"\n"
-"以å¯ç§»æ¤çš„ 'dumpfile' æ ¼å¼å¯¼å‡ºè¿œç¨‹ç‰ˆæœ¬åº“ URL 中的 LOWER 到 UPPER 的所有版本到标准输出。\n"
+"以å¯ç§»æ¤çš„ 'dumpfile' æ ¼å¼å¯¼å‡ºè¿œç¨‹ç‰ˆæœ¬åº“ URL 中的 LOWER 到 UPPER 的所有版本到"
+"标准输出。\n"
"如果åªç»™å‡º LOWER,那么就导出这一个版本。\n"
+#: ../svnrdump/svnrdump.c:107
msgid ""
"usage: svnrdump load URL\n"
"\n"
@@ -10020,6 +14046,7 @@ msgstr ""
"\n"
"从标准输入加载 'dumpfile' 到远程版本库 URL。\n"
+#: ../svnrdump/svnrdump.c:111
msgid ""
"usage: svnrdump help [SUBCOMMAND...]\n"
"\n"
@@ -10029,9 +14056,16 @@ msgstr ""
"\n"
"显示本程åºæˆ–å…¶å­å‘½ä»¤çš„用法。\n"
+#: ../svnrdump/svnrdump.c:124
+msgid "dump incrementally"
+msgstr "以增é‡æ–¹å¼è¿›è¡Œè½¬å­˜"
+
+#: ../svnrdump/svnrdump.c:142 ../svnserve/svnserve.c:282
+#: ../svnversion/svnversion.c:138
msgid "display this help"
msgstr "显示本帮助"
+#: ../svnrdump/svnrdump.c:731
msgid ""
"general usage: svnrdump SUBCOMMAND URL [-r LOWER[:UPPER]]\n"
"Type 'svnrdump help <subcommand>' for help on a specific subcommand.\n"
@@ -10045,16 +14079,22 @@ msgstr ""
"\n"
"å¯ç”¨çš„å­å‘½ä»¤: \n"
+#: ../svnrdump/svnrdump.c:775 ../svnrdump/svnrdump.c:809
msgid "Unsupported revision specifier used; use only integer values or 'HEAD'"
msgstr "使用了ä¸æ”¯æŒçš„版本格å¼ï¼›è¯·åªä½¿ç”¨ 'HEAD' 或整数"
+#: ../svnrdump/svnrdump.c:783 ../svnrdump/svnrdump.c:817
#, c-format
msgid "Revision '%ld' does not exist"
msgstr "版本 '%ld' ä¸å­˜åœ¨"
-msgid "LOWER revision cannot be greater than UPPER revision; consider reversing your revision range"
+#: ../svnrdump/svnrdump.c:827
+msgid ""
+"LOWER revision cannot be greater than UPPER revision; consider reversing "
+"your revision range"
msgstr "LOWER 版本å·ä¸èƒ½å¤§äºŽ UPPER 版本å·ï¼›è€ƒè™‘将你的版本范围翻转"
+#: ../svnrdump/svnrdump.c:1072
#, c-format
msgid ""
"Subcommand '%s' doesn't accept option '%s'\n"
@@ -10063,78 +14103,126 @@ msgstr ""
"å­å‘½ä»¤â€œ%sâ€ä¸æŽ¥å—选项“%sâ€\n"
"输入“svnrdump help %sâ€å¾—到用法。\n"
+#: ../svnserve/cyrus_auth.c:119
+msgid "Could not initialize the SASL library"
+msgstr "ä¸èƒ½åˆå§‹åŒ– SASL 库"
+
+#: ../svnserve/cyrus_auth.c:260
#, c-format
msgid "Can't get hostname"
msgstr "无法获å–主机å称"
+#: ../svnserve/cyrus_auth.c:325
msgid "Could not obtain the list of SASL mechanisms"
msgstr "ä¸èƒ½èŽ·å¾—SASL机制列表"
+#: ../svnserve/cyrus_auth.c:367
msgid "Couldn't obtain the authenticated username"
msgstr "ä¸èƒ½èŽ·å¾—å·²ç»è®¤è¯çš„用户å称"
+#: ../svnserve/serve.c:2042
+msgid "Path is not a string"
+msgstr "路径ä¸æ˜¯å­—符串"
+
+#: ../svnserve/serve.c:2199
+msgid "Log revprop entry not a string"
+msgstr "日志 revprop å…¥å£ä¸æ˜¯å­—符串"
+
+#: ../svnserve/serve.c:2205
+#, c-format
+msgid "Unknown revprop word '%s' in log command"
+msgstr "日志命令中有未知的 revprop å•è¯ “%sâ€"
+
+#: ../svnserve/serve.c:2221
+msgid "Log path entry not a string"
+msgstr "日志路径入å£ä¸æ˜¯å­—符串"
+
+#: ../svnserve/svnserve.c:161
msgid "daemon mode"
msgstr "åŽå°æ¨¡å¼"
+#: ../svnserve/svnserve.c:162
msgid "inetd mode"
msgstr "inetd 模å¼"
+#: ../svnserve/svnserve.c:163
msgid "tunnel mode"
msgstr "隧é“模å¼"
+#: ../svnserve/svnserve.c:164
msgid "listen-once mode (useful for debugging)"
msgstr "监å¬ä¸€æ¬¡æ–¹å¼(调试用)"
+#: ../svnserve/svnserve.c:167
msgid "Windows service mode (Service Control Manager)"
msgstr "Windows æœåŠ¡æ–¹å¼(æœåŠ¡ç®¡ç†å™¨)"
+#: ../svnserve/svnserve.c:169
msgid "root of directory to serve"
msgstr "æœåŠ¡çš„根目录"
+#: ../svnserve/svnserve.c:171
msgid "force read only, overriding repository config file"
msgstr "强制åªè¯»ï¼›è¦†ç›–版本库é…置文件"
+#: ../svnserve/svnserve.c:173
msgid "read configuration from file ARG"
msgstr "从文件 ARG 读å–é…ç½®"
+#: ../svnserve/svnserve.c:176
+#, fuzzy
msgid ""
-"listen port\n"
+"listen port. The default port is 3690.\n"
" [mode: daemon, service, listen-once]"
msgstr ""
-"监å¬ç«¯å£\n"
-" [æ–¹å¼: daemon, service, listen-once]"
+"写进程 PID 到文件 ARG\n"
+" [æ–¹å¼: daemon, listen-once]"
+#: ../svnserve/svnserve.c:180
+#, fuzzy
msgid ""
-"listen port\n"
+"listen port. The default port is 3690.\n"
" [mode: daemon, listen-once]"
msgstr ""
-"监å¬ç«¯å£\n"
+"写进程 PID 到文件 ARG\n"
" [æ–¹å¼: daemon, listen-once]"
+#: ../svnserve/svnserve.c:186
+#, fuzzy
msgid ""
"listen hostname or IP address\n"
+" By default svnserve listens on all addresses.\n"
" [mode: daemon, service, listen-once]"
msgstr ""
"监å¬ä¸»æœºå称或IP地å€\n"
" [æ–¹å¼: daemon, service, listen-once]"
+#: ../svnserve/svnserve.c:192
+#, fuzzy
msgid ""
"listen hostname or IP address\n"
+" By default svnserve listens on all addresses.\n"
" [mode: daemon, listen-once]"
msgstr ""
"监å¬ä¸»æœºå称或IP地å€\n"
" [æ–¹å¼: daemon, listen-once]"
+#: ../svnserve/svnserve.c:199
msgid ""
"prefer IPv6 when resolving the listen hostname\n"
-" [IPv4 is preferred by default. Using IPv4 and IPv6\n"
-" at the same time is not supported in daemon mode.\n"
+" [IPv4 is preferred by default. Using IPv4 and "
+"IPv6\n"
+" at the same time is not supported in daemon "
+"mode.\n"
" Use inetd mode or tunnel mode if you need this.]"
msgstr ""
"在使用主机å称监å¬æ—¶ï¼Œé¦–选 IPv6\n"
-" [默认首选 IPv4。ä¸æ”¯æŒåœ¨å®ˆæŠ¤è¿›ç¨‹æ¨¡å¼ä¸­åŒæ—¶ä½¿ç”¨ IPv4\n"
-" å’Œ IPv6。如果需è¦ï¼Œè¯·ä½¿ç”¨ inetd 模å¼æˆ–隧é“模å¼ã€‚]"
+" [默认首选 IPv4。ä¸æ”¯æŒåœ¨å®ˆæŠ¤è¿›ç¨‹æ¨¡å¼ä¸­åŒæ—¶ä½¿ç”¨ "
+"IPv4\n"
+" å’Œ IPv6。如果需è¦ï¼Œè¯·ä½¿ç”¨ inetd 模å¼æˆ–隧é“模"
+"å¼ã€‚]"
+#: ../svnserve/svnserve.c:207
msgid ""
"compression level to use for network transmissions\n"
" [0 .. no compression, 5 .. default, \n"
@@ -10144,6 +14232,7 @@ msgstr ""
" [0 .. ä¸åŽ‹ç¼©, 5 .. 默认, \n"
" 9 .. 最大压缩]"
+#: ../svnserve/svnserve.c:213
msgid ""
"size of the extra in-memory cache in MB used to\n"
" minimize redundant operations.\n"
@@ -10152,9 +14241,11 @@ msgid ""
" [used for FSFS repositories only]"
msgstr ""
"用æ¥å‡å°‘冗余æ“作的内存中的é¢å¤–高速缓存的大å°(MB)\n"
-" 线程模型的默认值是 128,éžçº¿ç¨‹æ¨¡åž‹çš„默认值是 16。\n"
+" 线程模型的默认值是 128,éžçº¿ç¨‹æ¨¡åž‹çš„默认值是 "
+"16。\n"
" [仅用于 FSFS 仓库]"
+#: ../svnserve/svnserve.c:223
msgid ""
"enable or disable caching of deltas between older\n"
" revisions.\n"
@@ -10165,6 +14256,7 @@ msgstr ""
" 默认值: å¦ã€‚\n"
" [仅用于 FSFS 仓库]"
+#: ../svnserve/svnserve.c:231
msgid ""
"enable or disable caching of file contents\n"
" Default is yes.\n"
@@ -10174,11 +14266,39 @@ msgstr ""
" 默认值: 是。\n"
" [仅用于 FSFS 仓库]"
+#: ../svnserve/svnserve.c:237
+#, fuzzy
+msgid ""
+"enable or disable caching of revision properties.\n"
+" Consult the documentation before activating "
+"this.\n"
+" Default is no.\n"
+" [used for FSFS repositories only]"
+msgstr ""
+"是å¦å¯¹æ—§ç‰ˆæœ¬ä¹‹é—´çš„差异å¯ç”¨ç¼“å­˜\n"
+" 默认值: å¦ã€‚\n"
+" [仅用于 FSFS 仓库]"
+
+#: ../svnserve/svnserve.c:245
+#, fuzzy
+msgid ""
+"Optimize network handling based on the assumption\n"
+" that most clients are connected with a bitrate "
+"of\n"
+" ARG Mbit/s.\n"
+" Default is 0 (optimizations disabled)."
+msgstr ""
+"是å¦å¯¹æ—§ç‰ˆæœ¬ä¹‹é—´çš„差异å¯ç”¨ç¼“å­˜\n"
+" 默认值: å¦ã€‚\n"
+" [仅用于 FSFS 仓库]"
+
#. ### Making the assumption here that WIN32 never has fork and so
#. * ### this option never exists when --service exists.
+#: ../svnserve/svnserve.c:255
msgid "use threads instead of fork [mode: daemon]"
msgstr "使用线程代替进程 [æ–¹å¼: daemon]"
+#: ../svnserve/svnserve.c:259
msgid ""
"run in foreground (useful for debugging)\n"
" [mode: daemon]"
@@ -10186,9 +14306,17 @@ msgstr ""
"在å‰å°è¿è¡Œ(调试用)\n"
" [æ–¹å¼: daemon]"
+#: ../svnserve/svnserve.c:263
+msgid ""
+"handle one connection at a time in the parent process\n"
+" (useful for debugging)"
+msgstr ""
+
+#: ../svnserve/svnserve.c:267
msgid "svnserve log file"
msgstr "svnserve 日志文件"
+#: ../svnserve/svnserve.c:270
msgid ""
"write server process ID to file ARG\n"
" [mode: daemon, listen-once, service]"
@@ -10196,6 +14324,7 @@ msgstr ""
"写进程 PID 到文件 ARG\n"
" [æ–¹å¼: daemon, listen-once, service]"
+#: ../svnserve/svnserve.c:274
msgid ""
"write server process ID to file ARG\n"
" [mode: daemon, listen-once]"
@@ -10203,6 +14332,7 @@ msgstr ""
"写进程 PID 到文件 ARG\n"
" [æ–¹å¼: daemon, listen-once]"
+#: ../svnserve/svnserve.c:279
msgid ""
"tunnel username (default is current uid's name)\n"
" [mode: tunnel]"
@@ -10210,10 +14340,18 @@ msgstr ""
"隧é“用户å(默认是当å‰UID对应的用户å)\n"
" [æ–¹å¼: tunnel]"
+#: ../svnserve/svnserve.c:284
+msgid ""
+"virtual host mode (look for repo in directory\n"
+" of provided hostname)"
+msgstr ""
+
+#: ../svnserve/svnserve.c:301
#, c-format
msgid "Type '%s --help' for usage.\n"
msgstr "使用“%s --helpâ€å¾—到用法。\n"
+#: ../svnserve/svnserve.c:311
msgid ""
"usage: svnserve [-d | -i | -t | -X | --service] [options]\n"
"\n"
@@ -10223,6 +14361,7 @@ msgstr ""
"\n"
"有效选项: \n"
+#: ../svnserve/svnserve.c:317
msgid ""
"usage: svnserve [-d | -i | -t | -X] [options]\n"
"\n"
@@ -10232,6 +14371,7 @@ msgstr ""
"\n"
"有效选项: \n"
+#: ../svnserve/svnserve.c:345
msgid ""
"\n"
"Cyrus SASL authentication is available.\n"
@@ -10239,85 +14379,103 @@ msgstr ""
"\n"
"Cyrus SASL 认è¯å¯ç”¨ã€‚\n"
+#: ../svnserve/svnserve.c:616
#, c-format
msgid "Invalid port '%s'"
msgstr "无效端å£â€œ%sâ€"
+#: ../svnserve/svnserve.c:657
#, c-format
msgid "svnserve: Root path '%s' does not exist or is not a directory.\n"
msgstr "svnserve: 根路径“%sâ€ä¸å­˜åœ¨ï¼Œæˆ–者ä¸æ˜¯ç›®å½•ã€‚\n"
+#: ../svnserve/svnserve.c:770
msgid "You must specify exactly one of -d, -i, -t, --service or -X.\n"
msgstr "您必须指定 -d, -i, -t, --service 或 -X 中的一个。\n"
+#: ../svnserve/svnserve.c:773
msgid "You must specify exactly one of -d, -i, -t or -X.\n"
msgstr "您必须指定 -d, -i, -t 或 -X 中的一个。\n"
+#: ../svnserve/svnserve.c:782
+msgid "You may only specify one of -T or --single-thread\n"
+msgstr ""
+
+#: ../svnserve/svnserve.c:810
#, c-format
msgid "Option --tunnel-user is only valid in tunnel mode.\n"
msgstr "选项 --tunnel-user åªåœ¨éš§é“模å¼æœ‰æ•ˆã€‚\n"
+#: ../svnserve/svnserve.c:829
+#, c-format
+msgid "Can't open stdout"
+msgstr "无法打开标准输出"
+
+#: ../svnserve/svnserve.c:883
#, c-format
-msgid "svnserve: The --service flag is only valid if the process is started by the Service Control Manager.\n"
+msgid ""
+"svnserve: The --service flag is only valid if the process is started by the "
+"Service Control Manager.\n"
msgstr "svnserve: åªæœ‰è¢«æœåŠ¡æŽ§åˆ¶ç®¡ç†å™¨å¯åŠ¨æ—¶ --service 选项æ‰æœ‰æ•ˆã€‚\n"
+#: ../svnserve/svnserve.c:933
#, c-format
msgid "Can't get address info"
msgstr "ä¸èƒ½èŽ·å–地å€ä¿¡æ¯"
+#: ../svnserve/svnserve.c:947
#, c-format
msgid "Can't create server socket"
msgstr "无法创建æœåŠ¡å™¨å¥—接字"
+#: ../svnserve/svnserve.c:958
#, c-format
msgid "Can't bind server socket"
msgstr "ä¸èƒ½ç»‘定æœåŠ¡å™¨å¥—接字"
+#: ../svnserve/svnserve.c:1056
#, c-format
msgid "Can't accept client connection"
msgstr "无法接å—客户连接"
+#: ../svnserve/svnserve.c:1137
#, c-format
msgid "Can't create threadattr"
msgstr "无法创建线程属性"
+#: ../svnserve/svnserve.c:1145
#, c-format
msgid "Can't set detached state"
msgstr "ä¸èƒ½è®¾ç½®åˆ†ç¦»çš„状æ€"
+#: ../svnserve/svnserve.c:1158
#, c-format
msgid "Can't create thread"
msgstr "无法创建线程"
-msgid "Path is not a string"
-msgstr "路径ä¸æ˜¯å­—符串"
-
-msgid "Log revprop entry not a string"
-msgstr "日志 revprop å…¥å£ä¸æ˜¯å­—符串"
-
-#, c-format
-msgid "Unknown revprop word '%s' in log command"
-msgstr "日志命令中有未知的 revprop å•è¯ “%sâ€"
-
-msgid "Log path entry not a string"
-msgstr "日志路径入å£ä¸æ˜¯å­—符串"
-
+#: ../svnserve/winservice.c:346
#, c-format
msgid "Failed to create winservice_start_event"
msgstr "创建 Windows æœåŠ¡å¯åŠ¨äº‹ä»¶å¤±è´¥"
+#: ../svnserve/winservice.c:357
#, c-format
msgid "The service failed to start"
msgstr "å¯åŠ¨æœåŠ¡å¤±è´¥"
+#: ../svnserve/winservice.c:405
#, c-format
msgid "Failed to connect to Service Control Manager"
msgstr "连接æœåŠ¡ç®¡ç†å™¨å¤±è´¥"
+#: ../svnserve/winservice.c:416
#, c-format
-msgid "The service failed to start; an internal error occurred while starting the service"
+msgid ""
+"The service failed to start; an internal error occurred while starting the "
+"service"
msgstr "å‘生内部错误,å¯åŠ¨æœåŠ¡å¤±è´¥"
+#: ../svnsync/svnsync.c:91
msgid ""
"usage: svnsync initialize DEST_URL SOURCE_URL\n"
"\n"
@@ -10356,6 +14514,7 @@ msgstr ""
"除了 svnsync 外,你ä¸åº”该在目标版本库中æ交,或者修改版本属性。也就是说,\n"
"目标版本库应该是æºç‰ˆæœ¬åº“çš„åªè¯»é•œåƒã€‚\n"
+#: ../svnsync/svnsync.c:117
msgid ""
"usage: svnsync synchronize DEST_URL [SOURCE_URL]\n"
"\n"
@@ -10376,6 +14535,7 @@ msgstr ""
"æº URL。如果有ä¸ä¿¡ä»»çš„用户/管ç†å‘˜å¯ä»¥å†™å…¥ä½äºŽ DEST_URL 的版本库,那么特别\n"
"推è指定 SOURCE_URL。\n"
+#: ../svnsync/svnsync.c:130
msgid ""
"usage:\n"
"\n"
@@ -10411,6 +14571,7 @@ msgstr ""
"\n"
"æ ¼å¼ 2 是已ç»åºŸå¼ƒçš„语法,等价于指定 \"-rREV[:REV2]\" 。\n"
+#: ../svnsync/svnsync.c:151
msgid ""
"usage: svnsync info DEST_URL\n"
"\n"
@@ -10421,6 +14582,7 @@ msgstr ""
"\n"
"打å°ä½äºŽ DEST_URL çš„åŒæ­¥ç›®æ ‡ç‰ˆæœ¬åº“ä¿¡æ¯ã€‚\n"
+#: ../svnsync/svnsync.c:157
msgid ""
"usage: svnsync help [SUBCOMMAND...]\n"
"\n"
@@ -10430,9 +14592,11 @@ msgstr ""
"\n"
"显示本程åºæˆ–å…¶å­å‘½ä»¤çš„用法。\n"
+#: ../svnsync/svnsync.c:167
msgid "print as little as possible"
msgstr "å°½å¯èƒ½å°‘打å°"
+#: ../svnsync/svnsync.c:169
msgid ""
"operate on revision ARG (or range ARG1:ARG2)\n"
" A revision argument can be one of:\n"
@@ -10444,9 +14608,11 @@ msgstr ""
" æ•´æ•° 版本å·\n"
" 'HEAD' 最新版本"
+#: ../svnsync/svnsync.c:177
msgid "allow a non-empty destination repository"
msgstr "å…许éžç©ºç›®æ ‡ç‰ˆæœ¬åº“"
+#: ../svnsync/svnsync.c:189
msgid ""
"specify a username ARG (deprecated;\n"
" see --source-username and --sync-username)"
@@ -10454,6 +14620,7 @@ msgstr ""
"指定用户å称 ARG (å·²ç»è¿‡æ—¶;\n"
" å‚看 --source-username å’Œ --sync-username)"
+#: ../svnsync/svnsync.c:193
msgid ""
"specify a password ARG (deprecated;\n"
" see --source-password and --sync-password)"
@@ -10461,135 +14628,191 @@ msgstr ""
"æŒ‡å®šå¯†ç  ARG (å·²ç»è¿‡æ—¶;\n"
" å‚看 --source-password å’Œ --sync-password)"
+#: ../svnsync/svnsync.c:203
msgid "connect to source repository with username ARG"
msgstr "使用用户å称 ARG 连接æºç‰ˆæœ¬åº“"
+#: ../svnsync/svnsync.c:205
msgid "connect to source repository with password ARG"
msgstr "ä½¿ç”¨å¯†ç  ARG 连接æºç‰ˆæœ¬åº“"
+#: ../svnsync/svnsync.c:207
msgid "connect to sync repository with username ARG"
msgstr "使用用户å称 ARG 连接目的版本库"
+#: ../svnsync/svnsync.c:209
msgid "connect to sync repository with password ARG"
msgstr "ä½¿ç”¨å¯†ç  ARG 连接目的版本库"
+#: ../svnsync/svnsync.c:221
msgid ""
"convert translatable properties from encoding ARG\n"
-" to UTF-8. If not specified, then properties are\n"
+" to UTF-8. If not specified, then properties "
+"are\n"
" presumed to be encoded in UTF-8."
msgstr ""
"å°†å¯ç¿»è¯‘çš„å±žæ€§ä»Žç¼–ç  ARG 转æ¢åˆ° UTF-8。如果ä¸æŒ‡å®šï¼Œé‚£ä¹ˆå‡å®šå±žæ€§çš„ç¼–ç æ˜¯\n"
" UTF-8。"
+#: ../svnsync/svnsync.c:227
msgid ""
"Disable built-in locking. Use of this option can\n"
-" corrupt the mirror unless you ensure that no other\n"
+" corrupt the mirror unless you ensure that no "
+"other\n"
" instance of svnsync is running concurrently."
msgstr ""
"ç¦ç”¨å†…ç½®é”。使用此选项å¯èƒ½\n"
" 会æŸåé•œåƒï¼Œé™¤éžä½ èƒ½ç¡®è®¤æ²¡æœ‰å…¶å®ƒ svnsync\n"
" 实例åŒæ—¶è¿è¡Œã€‚"
+#: ../svnsync/svnsync.c:233
msgid ""
"Steal locks as necessary. Use, with caution,\n"
" if your mirror repository contains stale locks\n"
-" and is not being concurrently accessed by another\n"
+" and is not being concurrently accessed by "
+"another\n"
" svnsync instance."
msgstr ""
"在需è¦æ—¶çªƒå–é”。请å°å¿ƒä½¿ç”¨\n"
" 如果你的镜åƒåŒ…å«è¿‡æ—¶çš„é”,并且没有其它 svnsync\n"
" 实例åŒæ—¶è¿è¡Œã€‚"
-msgid "Target server does not support atomic revision property edits; consider upgrading it to 1.7 or using an external locking program"
-msgstr "目标æœåŠ¡å™¨ä¸æ”¯æŒåŽŸå­ç‰ˆæœ¬çš„属性编辑; 请考虑å‡çº§åˆ° 1.7 或者使用外部加é”程åº"
+#: ../svnsync/svnsync.c:356
+msgid ""
+"Target server does not support atomic revision property edits; consider "
+"upgrading it to 1.7 or using an external locking program"
+msgstr ""
+"目标æœåŠ¡å™¨ä¸æ”¯æŒåŽŸå­ç‰ˆæœ¬çš„属性编辑; 请考虑å‡çº§åˆ° 1.7 或者使用外部加é”程åº"
+#: ../svnsync/svnsync.c:370
#, c-format
msgid "Stole lock previously held by '%s'\n"
msgstr "窃å–被 '%s' æŒæœ‰çš„é”\n"
+#: ../svnsync/svnsync.c:459
#, c-format
msgid "Session is rooted at '%s' but the repos root is '%s'"
msgstr "会è¯æ ¹æ˜¯â€œ%sâ€ï¼Œä½†æ˜¯ç‰ˆæœ¬åº“根是“%sâ€"
+#: ../svnsync/svnsync.c:601
#, c-format
msgid "Copied properties for revision %ld (%s* properties skipped).\n"
msgstr "从版本 %ld (忽略 %s* 属性)å¤åˆ¶å±žæ€§ã€‚\n"
+#: ../svnsync/svnsync.c:606
#, c-format
msgid "Copied properties for revision %ld.\n"
msgstr "å¤åˆ¶ç‰ˆæœ¬ %ld 的属性。\n"
+#: ../svnsync/svnsync.c:622
#, c-format
-msgid "NOTE: Normalized %s* properties to LF line endings (%d rev-props, %d node-props).\n"
+msgid ""
+"NOTE: Normalized %s* properties to LF line endings (%d rev-props, %d node-"
+"props).\n"
msgstr "注æ„: å·²ç»æ ‡å‡†åŒ– %s* 属性为 LF 行尾 (%d rev-props, %d node-props)。\n"
-msgid "Destination repository already contains revision history; consider using --allow-non-empty if the repository's revisions are known to mirror their respective revisions in the source repository"
+#: ../svnsync/svnsync.c:752
+msgid ""
+"Destination repository already contains revision history; consider using --"
+"allow-non-empty if the repository's revisions are known to mirror their "
+"respective revisions in the source repository"
msgstr ""
"目标版本库已ç»åŒ…å«ç‰ˆæœ¬åŽ†å²ï¼›å¦‚果你确信它们是镜åƒæºç‰ˆæœ¬åº“的对应版本的è¯ï¼Œ\n"
"考虑使用选项 '--allow-non-empty'"
+#: ../svnsync/svnsync.c:761
#, c-format
msgid "Destination repository is already synchronizing from '%s'"
msgstr "目标版本库已ç»ä¸Žâ€œ%sâ€åŒæ­¥"
+#: ../svnsync/svnsync.c:796
msgid "Destination repository has more revisions than source repository"
msgstr "目标版本库的版本数é‡æ¯”æºç‰ˆæœ¬åº“多"
+#: ../svnsync/svnsync.c:861 ../svnsync/svnsync.c:864 ../svnsync/svnsync.c:1517
+#: ../svnsync/svnsync.c:1524 ../svnsync/svnsync.c:1761
+#: ../svnsync/svnsync.c:1764 ../svnsync/svnsync.c:1808
#, c-format
msgid "Path '%s' is not a URL"
msgstr "路径“%sâ€ä¸æ˜¯URL"
+#: ../svnsync/svnsync.c:891
#, c-format
msgid "Committed revision %ld.\n"
msgstr "å·²æ交版本 %ld。\n"
+#: ../svnsync/svnsync.c:934
msgid "Destination repository has not been initialized"
msgstr "目标版本库没有åˆå§‹åŒ–"
+#: ../svnsync/svnsync.c:1300
#, c-format
msgid "Commit created rev %ld but should have created %ld"
msgstr "æ交创建版本 %ld,应该创建版本 %ld"
+#: ../svnsync/svnsync.c:1415
#, c-format
-msgid "Revision being currently copied (%ld), last merged revision (%ld), and destination HEAD (%ld) are inconsistent; have you committed to the destination without using svnsync?"
-msgstr "当å‰å¤åˆ¶ç‰ˆæœ¬(%ld), 最åŽåˆå¹¶ç‰ˆæœ¬(%ld), 和目标 HEAD (%ld) ä¸ä¸€è‡´ï¼›ä½ æ˜¯å¦ä½¿ç”¨éžsvnsync方法æ交到目标版本库?"
+msgid ""
+"Revision being currently copied (%ld), last merged revision (%ld), and "
+"destination HEAD (%ld) are inconsistent; have you committed to the "
+"destination without using svnsync?"
+msgstr ""
+"当å‰å¤åˆ¶ç‰ˆæœ¬(%ld), 最åŽåˆå¹¶ç‰ˆæœ¬(%ld), 和目标 HEAD (%ld) ä¸ä¸€è‡´ï¼›ä½ æ˜¯å¦ä½¿ç”¨éž"
+"svnsync方法æ交到目标版本库?"
+#: ../svnsync/svnsync.c:1452
#, c-format
-msgid "Destination HEAD (%ld) is not the last merged revision (%ld); have you committed to the destination without using svnsync?"
-msgstr "目标 HEAD (%ld)ä¸æ˜¯æœ€åŽåˆå¹¶ç‰ˆæœ¬(%ld);你是å¦ä½¿ç”¨éž svnsync 方法æ交到目标版本库?"
+msgid ""
+"Destination HEAD (%ld) is not the last merged revision (%ld); have you "
+"committed to the destination without using svnsync?"
+msgstr ""
+"目标 HEAD (%ld)ä¸æ˜¯æœ€åŽåˆå¹¶ç‰ˆæœ¬(%ld);你是å¦ä½¿ç”¨éž svnsync 方法æ交到目标版本"
+"库?"
+#: ../svnsync/svnsync.c:1575 ../svnsync/svnsync.c:1580
#, c-format
-msgid "Cannot copy revprops for a revision (%ld) that has not been synchronized yet"
+msgid ""
+"Cannot copy revprops for a revision (%ld) that has not been synchronized yet"
msgstr "ä¸èƒ½åœ¨å°šæœªåŒæ­¥æ—¶å¤åˆ¶ç‰ˆæœ¬(%ld)çš„ revprops"
+#: ../svnsync/svnsync.c:1644 ../svnsync/svnsync.c:1664
#, c-format
msgid "Invalid revision number (%ld)"
msgstr "æ— æ•ˆçš„ç‰ˆæœ¬å· (%ld)"
-msgid "Cannot specify revisions via both command-line arguments and the --revision (-r) option"
+#: ../svnsync/svnsync.c:1714
+msgid ""
+"Cannot specify revisions via both command-line arguments and the --revision "
+"(-r) option"
msgstr "ä¸èƒ½åŒæ—¶ä½¿ç”¨ "
+#: ../svnsync/svnsync.c:1722 ../svnsync/svnsync.c:2065
#, c-format
msgid "Invalid revision range '%s' provided"
msgstr "æ供了无效的版本范围 '%s'"
+#: ../svnsync/svnsync.c:1821
#, c-format
msgid "Repository '%s' is not initialized for synchronization"
msgstr "版本库“%sâ€æ²¡æœ‰ä¸ºåŒæ­¥åˆå§‹åŒ–"
#. Print the info.
+#: ../svnsync/svnsync.c:1827
#, c-format
msgid "Source URL: %s\n"
msgstr "æº URL: %s\n"
+#: ../svnsync/svnsync.c:1829
#, c-format
msgid "Source Repository UUID: %s\n"
msgstr "æºç‰ˆæœ¬åº“ UUID: %s\n"
+#: ../svnsync/svnsync.c:1832
#, c-format
msgid "Last Merged Revision: %s\n"
msgstr "最åŽåˆå¹¶çš„版本: %s\n"
+#: ../svnsync/svnsync.c:1849
msgid ""
"general usage: svnsync SUBCOMMAND DEST_URL [ARGS & OPTIONS ...]\n"
"Type 'svnsync help <subcommand>' for help on a specific subcommand.\n"
@@ -10603,12 +14826,19 @@ msgstr ""
"\n"
"å¯ç”¨çš„å­å‘½ä»¤: \n"
-msgid "Cannot use --username or --password with any of --source-username, --source-password, --sync-username, or --sync-password.\n"
-msgstr "ä¸èƒ½å°† --username 或 --password 与 --source-username, --source-password, --sync-username, 或 --sync-password 一起使用。\n"
+#: ../svnsync/svnsync.c:2113
+msgid ""
+"Cannot use --username or --password with any of --source-username, --source-"
+"password, --sync-username, or --sync-password.\n"
+msgstr ""
+"ä¸èƒ½å°† --username 或 --password 与 --source-username, --source-password, --"
+"sync-username, 或 --sync-password 一起使用。\n"
+#: ../svnsync/svnsync.c:2137
msgid "--disable-locking and --steal-lock are mutually exclusive"
msgstr "--disable-locking 与 --steal-lock 是互斥的"
+#: ../svnsync/svnsync.c:2213
#, c-format
msgid ""
"Subcommand '%s' doesn't accept option '%s'\n"
@@ -10617,30 +14847,33 @@ msgstr ""
"å­å‘½ä»¤â€œ%sâ€ä¸æŽ¥å—选项“%sâ€\n"
"使用“svnsync help %sâ€å¾—到用法。\n"
+#: ../svnsync/svnsync.c:2296
msgid "Try 'svnsync help' for more info"
msgstr "请使用 “svnsync help†以得到更多信æ¯"
+#: ../svnversion/svnversion.c:49
#, c-format
msgid "Type 'svnversion --help' for usage.\n"
msgstr "使用 “svnversion --help†得到用法。\n"
-#, c-format
+#: ../svnversion/svnversion.c:60
+#, fuzzy, c-format
msgid ""
"usage: svnversion [OPTIONS] [WC_PATH [TRAIL_URL]]\n"
"\n"
-" Produce a compact 'version number' for the working copy path\n"
+" Produce a compact version identifier for the working copy path\n"
" WC_PATH. TRAIL_URL is the trailing portion of the URL used to\n"
" determine if WC_PATH itself is switched (detection of switches\n"
-" within WC_PATH does not rely on TRAIL_URL). The version number\n"
+" within WC_PATH does not rely on TRAIL_URL). The version identifier\n"
" is written to standard output. For example:\n"
"\n"
" $ svnversion . /repos/svn/trunk\n"
" 4168\n"
"\n"
-" The version number will be a single number if the working\n"
+" The version identifier will be a single number if the working\n"
" copy is single revision, unmodified, not switched and with\n"
-" an URL that matches the TRAIL_URL argument. If the working\n"
-" copy is unusual the version number will be more complex:\n"
+" a URL that matches the TRAIL_URL argument. If the working\n"
+" copy is unusual the version identifier will be more complex:\n"
"\n"
" 4123:4168 mixed revision working copy\n"
" 4168M modified working copy\n"
@@ -10685,36 +14918,41 @@ msgstr ""
"\n"
"有效选项: \n"
+#: ../svnversion/svnversion.c:136
msgid "do not output the trailing newline"
msgstr "ä¸è¾“出其åŽçš„æ¢è¡Œç¬¦"
+#: ../svnversion/svnversion.c:137
msgid "last changed rather than current revisions"
msgstr "最近一次改å˜çš„,而ä¸æ˜¯ç›®å‰çš„版本"
+#: ../svnversion/svnversion.c:245
#, c-format
msgid "Unversioned symlink%s"
msgstr "未版本控制的符å·é“¾æŽ¥ %s"
+#: ../svnversion/svnversion.c:248
#, c-format
msgid "Unversioned directory%s"
msgstr "目录 %s 未版本控制"
+#: ../svnversion/svnversion.c:251
#, c-format
msgid "Unversioned file%s"
msgstr "文件 %s 未版本控制"
+#: ../svnversion/svnversion.c:257
#, c-format
msgid "'%s' doesn't exist\n"
msgstr "“%s†ä¸å­˜åœ¨\n"
+#: ../svnversion/svnversion.c:258
#, c-format
msgid "'%s' is of unknown type\n"
msgstr "“%s†的类型未知\n"
#. Local uncommitted modifications, no revision info was found.
+#: ../svnversion/svnversion.c:273
#, c-format
msgid "Uncommitted local addition, copy or move%s"
msgstr "未æ交的本地增加,å¤åˆ¶æˆ–移动 %s"
-
-#~ msgid "'%s' is scheduled for addition within unversioned parent"
-#~ msgstr "在未纳入版本控制的父目录,“%s†被加入增加调度"
diff --git a/subversion/po/zh_TW.po b/subversion/po/zh_TW.po
index 8e3c640..9e7daf2 100644
--- a/subversion/po/zh_TW.po
+++ b/subversion/po/zh_TW.po
@@ -22,13 +22,13 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: subversion 1.7\n"
+"Project-Id-Version: subversion 1.8\n"
"Report-Msgid-Bugs-To: dev@subversion.apache.org\n"
"POT-Creation-Date: 2010-11-12 08:49-0600\n"
"PO-Revision-Date: 2004-09-12 22:05+0800\n"
"Last-Translator: Subversion Developers <dev@subversion.tigris.org>\n"
"Language-Team: Traditional Chinese <dev@subversion.tigris.org>\n"
-"Language: \n"
+"Language: zh_TW\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -12810,7 +12810,7 @@ msgstr ""
#~ " '{' DATE '}' 該日開始的修訂版\n"
#~ " 'HEAD' 檔案庫最新版本\n"
#~ " 'BASE' 該項目工作複本的基礎修訂版\n"
-#~ " 'COMMITED' ä½æ–¼æˆ–æ—©æ–¼ BASE 的最後é€äº¤\n"
+#~ " 'COMMITTED' ä½æ–¼æˆ–æ—©æ–¼ BASE 的最後é€äº¤\n"
#~ " 'PREV' COMMITTED 之å‰çš„修訂版"
#~ msgid "Error reading administrative log file in '%s'"
diff --git a/subversion/svn/add-cmd.c b/subversion/svn/add-cmd.c
index 7b79ee1..44f73c7 100644
--- a/subversion/svn/add-cmd.c
+++ b/subversion/svn/add-cmd.c
@@ -75,10 +75,11 @@ svn_cl__add(apr_getopt_t *os,
svn_pool_clear(iterpool);
SVN_ERR(svn_cl__check_cancel(ctx->cancel_baton));
SVN_ERR(svn_cl__try
- (svn_client_add4(target,
+ (svn_client_add5(target,
opt_state->depth,
opt_state->force, opt_state->no_ignore,
- opt_state->parents, ctx, iterpool),
+ opt_state->no_autoprops, opt_state->parents,
+ ctx, iterpool),
errors, opt_state->quiet,
SVN_ERR_ENTRY_EXISTS,
SVN_ERR_WC_PATH_NOT_FOUND,
diff --git a/subversion/svn/blame-cmd.c b/subversion/svn/blame-cmd.c
index e198178..174a199 100644
--- a/subversion/svn/blame-cmd.c
+++ b/subversion/svn/blame-cmd.c
@@ -203,11 +203,11 @@ blame_receiver(void *baton,
we may need to adjust this. */
if (merged_revision < revision)
{
- SVN_ERR(svn_stream_printf(out, pool, "G "));
+ SVN_ERR(svn_stream_puts(out, "G "));
use_merged = TRUE;
}
else
- SVN_ERR(svn_stream_printf(out, pool, " "));
+ SVN_ERR(svn_stream_puts(out, " "));
}
if (use_merged)
@@ -283,7 +283,7 @@ svn_cl__blame(apr_getopt_t *os,
if (! opt_state->xml)
SVN_ERR(svn_stream_for_stdout(&bl.out, pool));
else
- bl.sbuf = svn_stringbuf_create("", pool);
+ bl.sbuf = svn_stringbuf_create_empty(pool);
bl.opt_state = opt_state;
@@ -375,10 +375,13 @@ svn_cl__blame(apr_getopt_t *os,
{
svn_error_clear(err);
SVN_ERR(svn_cmdline_fprintf(stderr, subpool,
- _("Skipping binary file: '%s'\n"),
+ _("Skipping binary file "
+ "(use --force to treat as text): "
+ "'%s'\n"),
target));
}
else if (err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND ||
+ err->apr_err == SVN_ERR_ENTRY_NOT_FOUND ||
err->apr_err == SVN_ERR_FS_NOT_FILE ||
err->apr_err == SVN_ERR_FS_NOT_FOUND)
{
diff --git a/subversion/svn/cat-cmd.c b/subversion/svn/cat-cmd.c
index 7e28a81..551420e 100644
--- a/subversion/svn/cat-cmd.c
+++ b/subversion/svn/cat-cmd.c
@@ -98,7 +98,7 @@ svn_cl__cat(apr_getopt_t *os,
if (status == SVN_ERR_ENTRY_NOT_FOUND ||
status == SVN_ERR_FS_NOT_FOUND)
- err = svn_error_quick_wrap(err,
+ err = svn_error_quick_wrap(err,
_("Could not cat all targets because "
"some targets don't exist"));
else if (status == SVN_ERR_UNVERSIONED_RESOURCE)
@@ -113,6 +113,6 @@ svn_cl__cat(apr_getopt_t *os,
return svn_error_trace(err);
}
-
+
return SVN_NO_ERROR;
}
diff --git a/subversion/svn/cl-conflicts.c b/subversion/svn/cl-conflicts.c
new file mode 100644
index 0000000..440c9d7
--- /dev/null
+++ b/subversion/svn/cl-conflicts.c
@@ -0,0 +1,454 @@
+/*
+ * conflicts.c: Tree conflicts.
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#include "cl-conflicts.h"
+#include "svn_hash.h"
+#include "svn_xml.h"
+#include "svn_dirent_uri.h"
+#include "svn_path.h"
+#include "private/svn_token.h"
+
+#include "cl.h"
+
+#include "svn_private_config.h"
+
+
+/* A map for svn_wc_conflict_action_t values to XML strings */
+static const svn_token_map_t map_conflict_action_xml[] =
+{
+ { "edit", svn_wc_conflict_action_edit },
+ { "delete", svn_wc_conflict_action_delete },
+ { "add", svn_wc_conflict_action_add },
+ { "replace", svn_wc_conflict_action_replace },
+ { NULL, 0 }
+};
+
+/* A map for svn_wc_conflict_reason_t values to XML strings */
+static const svn_token_map_t map_conflict_reason_xml[] =
+{
+ { "edit", svn_wc_conflict_reason_edited },
+ { "delete", svn_wc_conflict_reason_deleted },
+ { "missing", svn_wc_conflict_reason_missing },
+ { "obstruction", svn_wc_conflict_reason_obstructed },
+ { "add", svn_wc_conflict_reason_added },
+ { "replace", svn_wc_conflict_reason_replaced },
+ { "unversioned", svn_wc_conflict_reason_unversioned },
+ { "moved-away", svn_wc_conflict_reason_moved_away },
+ { "moved-here", svn_wc_conflict_reason_moved_here },
+ { NULL, 0 }
+};
+
+static const svn_token_map_t map_conflict_kind_xml[] =
+{
+ { "text", svn_wc_conflict_kind_text },
+ { "property", svn_wc_conflict_kind_property },
+ { "tree", svn_wc_conflict_kind_tree },
+ { NULL, 0 }
+};
+
+/* Return a localised string representation of the local part of a conflict;
+ NULL for non-localised odd cases. */
+static const char *
+local_reason_str(svn_node_kind_t kind, svn_wc_conflict_reason_t reason)
+{
+ switch (kind)
+ {
+ case svn_node_file:
+ switch (reason)
+ {
+ case svn_wc_conflict_reason_edited:
+ return _("local file edit");
+ case svn_wc_conflict_reason_obstructed:
+ return _("local file obstruction");
+ case svn_wc_conflict_reason_deleted:
+ return _("local file delete");
+ case svn_wc_conflict_reason_missing:
+ return _("local file missing");
+ case svn_wc_conflict_reason_unversioned:
+ return _("local file unversioned");
+ case svn_wc_conflict_reason_added:
+ return _("local file add");
+ case svn_wc_conflict_reason_replaced:
+ return _("local file replace");
+ case svn_wc_conflict_reason_moved_away:
+ return _("local file moved away");
+ case svn_wc_conflict_reason_moved_here:
+ return _("local file moved here");
+ }
+ break;
+ case svn_node_dir:
+ switch (reason)
+ {
+ case svn_wc_conflict_reason_edited:
+ return _("local dir edit");
+ case svn_wc_conflict_reason_obstructed:
+ return _("local dir obstruction");
+ case svn_wc_conflict_reason_deleted:
+ return _("local dir delete");
+ case svn_wc_conflict_reason_missing:
+ return _("local dir missing");
+ case svn_wc_conflict_reason_unversioned:
+ return _("local dir unversioned");
+ case svn_wc_conflict_reason_added:
+ return _("local dir add");
+ case svn_wc_conflict_reason_replaced:
+ return _("local dir replace");
+ case svn_wc_conflict_reason_moved_away:
+ return _("local dir moved away");
+ case svn_wc_conflict_reason_moved_here:
+ return _("local dir moved here");
+ }
+ break;
+ case svn_node_symlink:
+ case svn_node_none:
+ case svn_node_unknown:
+ break;
+ }
+ return NULL;
+}
+
+/* Return a localised string representation of the incoming part of a
+ conflict; NULL for non-localised odd cases. */
+static const char *
+incoming_action_str(svn_node_kind_t kind, svn_wc_conflict_action_t action)
+{
+ switch (kind)
+ {
+ case svn_node_file:
+ switch (action)
+ {
+ case svn_wc_conflict_action_edit:
+ return _("incoming file edit");
+ case svn_wc_conflict_action_add:
+ return _("incoming file add");
+ case svn_wc_conflict_action_delete:
+ return _("incoming file delete");
+ case svn_wc_conflict_action_replace:
+ return _("incoming file replace");
+ }
+ break;
+ case svn_node_dir:
+ switch (action)
+ {
+ case svn_wc_conflict_action_edit:
+ return _("incoming dir edit");
+ case svn_wc_conflict_action_add:
+ return _("incoming dir add");
+ case svn_wc_conflict_action_delete:
+ return _("incoming dir delete");
+ case svn_wc_conflict_action_replace:
+ return _("incoming dir replace");
+ }
+ break;
+ case svn_node_symlink:
+ case svn_node_none:
+ case svn_node_unknown:
+ break;
+ }
+ return NULL;
+}
+
+/* Return a localised string representation of the operation part of a
+ conflict. */
+static const char *
+operation_str(svn_wc_operation_t operation)
+{
+ switch (operation)
+ {
+ case svn_wc_operation_update: return _("upon update");
+ case svn_wc_operation_switch: return _("upon switch");
+ case svn_wc_operation_merge: return _("upon merge");
+ case svn_wc_operation_none: return _("upon none");
+ }
+ SVN_ERR_MALFUNCTION_NO_RETURN();
+ return NULL;
+}
+
+svn_error_t *
+svn_cl__get_human_readable_prop_conflict_description(
+ const char **desc,
+ const svn_wc_conflict_description2_t *conflict,
+ apr_pool_t *pool)
+{
+ const char *reason_str, *action_str;
+
+ /* We provide separately translatable strings for the values that we
+ * know about, and a fall-back in case any other values occur. */
+ switch (conflict->reason)
+ {
+ case svn_wc_conflict_reason_edited:
+ reason_str = _("local edit");
+ break;
+ case svn_wc_conflict_reason_added:
+ reason_str = _("local add");
+ break;
+ case svn_wc_conflict_reason_deleted:
+ reason_str = _("local delete");
+ break;
+ case svn_wc_conflict_reason_obstructed:
+ reason_str = _("local obstruction");
+ break;
+ default:
+ reason_str = apr_psprintf(pool, _("local %s"),
+ svn_token__to_word(map_conflict_reason_xml,
+ conflict->reason));
+ break;
+ }
+ switch (conflict->action)
+ {
+ case svn_wc_conflict_action_edit:
+ action_str = _("incoming edit");
+ break;
+ case svn_wc_conflict_action_add:
+ action_str = _("incoming add");
+ break;
+ case svn_wc_conflict_action_delete:
+ action_str = _("incoming delete");
+ break;
+ default:
+ action_str = apr_psprintf(pool, _("incoming %s"),
+ svn_token__to_word(map_conflict_action_xml,
+ conflict->action));
+ break;
+ }
+ SVN_ERR_ASSERT(reason_str && action_str);
+ *desc = apr_psprintf(pool, _("%s, %s %s"),
+ reason_str, action_str,
+ operation_str(conflict->operation));
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_cl__get_human_readable_tree_conflict_description(
+ const char **desc,
+ const svn_wc_conflict_description2_t *conflict,
+ apr_pool_t *pool)
+{
+ const char *action, *reason, *operation;
+ svn_node_kind_t incoming_kind;
+
+ /* Determine the node kind of the incoming change. */
+ incoming_kind = svn_node_unknown;
+ if (conflict->action == svn_wc_conflict_action_edit ||
+ conflict->action == svn_wc_conflict_action_delete)
+ {
+ /* Change is acting on 'src_left' version of the node. */
+ if (conflict->src_left_version)
+ incoming_kind = conflict->src_left_version->node_kind;
+ }
+ else if (conflict->action == svn_wc_conflict_action_add ||
+ conflict->action == svn_wc_conflict_action_replace)
+ {
+ /* Change is acting on 'src_right' version of the node.
+ *
+ * ### For 'replace', the node kind is ambiguous. However, src_left
+ * ### is NULL for replace, so we must use src_right. */
+ if (conflict->src_right_version)
+ incoming_kind = conflict->src_right_version->node_kind;
+ }
+
+ reason = local_reason_str(conflict->node_kind, conflict->reason);
+ action = incoming_action_str(incoming_kind, conflict->action);
+ operation = operation_str(conflict->operation);
+ SVN_ERR_ASSERT(operation);
+
+ if (action && reason)
+ {
+ *desc = apr_psprintf(pool, _("%s, %s %s"),
+ reason, action, operation);
+ }
+ else
+ {
+ /* A catch-all message for very rare or nominally impossible cases.
+ It will not be pretty, but is closer to an internal error than
+ an ordinary user-facing string. */
+ *desc = apr_psprintf(pool, _("local: %s %s incoming: %s %s %s"),
+ svn_node_kind_to_word(conflict->node_kind),
+ svn_token__to_word(map_conflict_reason_xml,
+ conflict->reason),
+ svn_node_kind_to_word(incoming_kind),
+ svn_token__to_word(map_conflict_action_xml,
+ conflict->action),
+ operation);
+ }
+ return SVN_NO_ERROR;
+}
+
+
+/* Helper for svn_cl__append_tree_conflict_info_xml().
+ * Appends the attributes of the given VERSION to ATT_HASH.
+ * SIDE is the content of the version tag's side="..." attribute,
+ * currently one of "source-left" or "source-right".*/
+static svn_error_t *
+add_conflict_version_xml(svn_stringbuf_t **pstr,
+ const char *side,
+ const svn_wc_conflict_version_t *version,
+ apr_pool_t *pool)
+{
+ apr_hash_t *att_hash = apr_hash_make(pool);
+
+
+ svn_hash_sets(att_hash, "side", side);
+
+ if (version->repos_url)
+ svn_hash_sets(att_hash, "repos-url", version->repos_url);
+
+ if (version->path_in_repos)
+ svn_hash_sets(att_hash, "path-in-repos", version->path_in_repos);
+
+ if (SVN_IS_VALID_REVNUM(version->peg_rev))
+ svn_hash_sets(att_hash, "revision", apr_ltoa(pool, version->peg_rev));
+
+ if (version->node_kind != svn_node_unknown)
+ svn_hash_sets(att_hash, "kind",
+ svn_cl__node_kind_str_xml(version->node_kind));
+
+ svn_xml_make_open_tag_hash(pstr, pool, svn_xml_self_closing,
+ "version", att_hash);
+ return SVN_NO_ERROR;
+}
+
+
+static svn_error_t *
+append_tree_conflict_info_xml(svn_stringbuf_t *str,
+ const svn_wc_conflict_description2_t *conflict,
+ apr_pool_t *pool)
+{
+ apr_hash_t *att_hash = apr_hash_make(pool);
+ const char *tmp;
+
+ svn_hash_sets(att_hash, "victim",
+ svn_dirent_basename(conflict->local_abspath, pool));
+
+ svn_hash_sets(att_hash, "kind",
+ svn_cl__node_kind_str_xml(conflict->node_kind));
+
+ svn_hash_sets(att_hash, "operation",
+ svn_cl__operation_str_xml(conflict->operation, pool));
+
+ tmp = svn_token__to_word(map_conflict_action_xml, conflict->action);
+ svn_hash_sets(att_hash, "action", tmp);
+
+ tmp = svn_token__to_word(map_conflict_reason_xml, conflict->reason);
+ svn_hash_sets(att_hash, "reason", tmp);
+
+ /* Open the tree-conflict tag. */
+ svn_xml_make_open_tag_hash(&str, pool, svn_xml_normal,
+ "tree-conflict", att_hash);
+
+ /* Add child tags for OLDER_VERSION and THEIR_VERSION. */
+
+ if (conflict->src_left_version)
+ SVN_ERR(add_conflict_version_xml(&str,
+ "source-left",
+ conflict->src_left_version,
+ pool));
+
+ if (conflict->src_right_version)
+ SVN_ERR(add_conflict_version_xml(&str,
+ "source-right",
+ conflict->src_right_version,
+ pool));
+
+ svn_xml_make_close_tag(&str, pool, "tree-conflict");
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_cl__append_conflict_info_xml(svn_stringbuf_t *str,
+ const svn_wc_conflict_description2_t *conflict,
+ apr_pool_t *scratch_pool)
+{
+ apr_hash_t *att_hash;
+ const char *kind;
+ if (conflict->kind == svn_wc_conflict_kind_tree)
+ {
+ /* Uses other element type */
+ return svn_error_trace(
+ append_tree_conflict_info_xml(str, conflict, scratch_pool));
+ }
+
+ att_hash = apr_hash_make(scratch_pool);
+
+ svn_hash_sets(att_hash, "operation",
+ svn_cl__operation_str_xml(conflict->operation, scratch_pool));
+
+
+ kind = svn_token__to_word(map_conflict_kind_xml, conflict->kind);
+ svn_hash_sets(att_hash, "type", kind);
+
+ svn_hash_sets(att_hash, "operation",
+ svn_cl__operation_str_xml(conflict->operation, scratch_pool));
+
+
+ /* "<conflict>" */
+ svn_xml_make_open_tag_hash(&str, scratch_pool,
+ svn_xml_normal, "conflict", att_hash);
+
+ if (conflict->src_left_version)
+ SVN_ERR(add_conflict_version_xml(&str,
+ "source-left",
+ conflict->src_left_version,
+ scratch_pool));
+
+ if (conflict->src_right_version)
+ SVN_ERR(add_conflict_version_xml(&str,
+ "source-right",
+ conflict->src_right_version,
+ scratch_pool));
+
+ switch (conflict->kind)
+ {
+ case svn_wc_conflict_kind_text:
+ /* "<prev-base-file> xx </prev-base-file>" */
+ svn_cl__xml_tagged_cdata(&str, scratch_pool, "prev-base-file",
+ conflict->base_abspath);
+
+ /* "<prev-wc-file> xx </prev-wc-file>" */
+ svn_cl__xml_tagged_cdata(&str, scratch_pool, "prev-wc-file",
+ conflict->my_abspath);
+
+ /* "<cur-base-file> xx </cur-base-file>" */
+ svn_cl__xml_tagged_cdata(&str, scratch_pool, "cur-base-file",
+ conflict->their_abspath);
+
+ break;
+
+ case svn_wc_conflict_kind_property:
+ /* "<prop-file> xx </prop-file>" */
+ svn_cl__xml_tagged_cdata(&str, scratch_pool, "prop-file",
+ conflict->their_abspath);
+ break;
+
+ default:
+ case svn_wc_conflict_kind_tree:
+ SVN_ERR_MALFUNCTION(); /* Handled separately */
+ break;
+ }
+
+ /* "</conflict>" */
+ svn_xml_make_close_tag(&str, scratch_pool, "conflict");
+
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/svn/tree-conflicts.h b/subversion/svn/cl-conflicts.h
index 7a01604..07591a0 100644
--- a/subversion/svn/tree-conflicts.h
+++ b/subversion/svn/cl-conflicts.h
@@ -1,5 +1,5 @@
/*
- * tree-conflicts.h: Tree conflicts.
+ * conflicts.h: Conflicts handling
*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
@@ -23,8 +23,8 @@
-#ifndef SVN_TREE_CONFLICTS_H
-#define SVN_TREE_CONFLICTS_H
+#ifndef SVN_CONFLICTS_H
+#define SVN_CONFLICTS_H
/*** Includes. ***/
#include <apr_pools.h>
@@ -41,6 +41,18 @@ extern "C" {
/**
* Return in @a desc a possibly localized human readable
+ * description of a property conflict described by @a conflict.
+ *
+ * Allocate the result in @a pool.
+ */
+svn_error_t *
+svn_cl__get_human_readable_prop_conflict_description(
+ const char **desc,
+ const svn_wc_conflict_description2_t *conflict,
+ apr_pool_t *pool);
+
+/**
+ * Return in @a desc a possibly localized human readable
* description of a tree conflict described by @a conflict.
*
* Allocate the result in @a pool.
@@ -52,11 +64,11 @@ svn_cl__get_human_readable_tree_conflict_description(
apr_pool_t *pool);
/**
- * Append to @a str an XML representation of the tree conflict data
+ * Append to @a str an XML representation of the conflict data
* for @a conflict, in a format suitable for 'svn info --xml'.
*/
svn_error_t *
-svn_cl__append_tree_conflict_info_xml(
+svn_cl__append_conflict_info_xml(
svn_stringbuf_t *str,
const svn_wc_conflict_description2_t *conflict,
apr_pool_t *pool);
@@ -65,4 +77,4 @@ svn_cl__append_tree_conflict_info_xml(
}
#endif /* __cplusplus */
-#endif /* SVN_TREE_CONFLICTS_H */
+#endif /* SVN_CONFLICTS_H */
diff --git a/subversion/svn/cl.h b/subversion/svn/cl.h
index 2d4d341..8a732c7 100644
--- a/subversion/svn/cl.h
+++ b/subversion/svn/cl.h
@@ -65,15 +65,11 @@ typedef enum svn_cl__accept_t
svn_cl__accept_working,
/* Resolve the conflicted hunks by choosing the corresponding text
- from the pre-conflict working copy file.
-
- Note: this is a placeholder, not actually implemented in 1.5. */
+ from the pre-conflict working copy file. */
svn_cl__accept_mine_conflict,
/* Resolve the conflicted hunks by choosing the corresponding text
- from the post-conflict base copy file.
-
- Note: this is a placeholder, not actually implemented in 1.5. */
+ from the post-conflict base copy file. */
svn_cl__accept_theirs_conflict,
/* Resolve the conflict by taking the entire pre-conflict working
@@ -163,7 +159,6 @@ typedef struct svn_cl__opt_state_t
svn_boolean_t no_unlock;
const char *message; /* log message */
- const char *ancestor_path; /* ### todo: who sets this? */
svn_boolean_t force; /* be more forceful, as in "svn rm -f ..." */
svn_boolean_t force_log; /* force validity of a suspect log msg file */
svn_boolean_t incremental; /* yield output suitable for concatenation */
@@ -183,15 +178,25 @@ typedef struct svn_cl__opt_state_t
svn_boolean_t xml; /* output in xml, e.g., "svn log --xml" */
svn_boolean_t no_ignore; /* disregard default ignores & svn:ignore's */
svn_boolean_t no_auth_cache; /* do not cache authentication information */
- svn_boolean_t no_diff_deleted; /* do not show diffs for deleted files */
+ struct
+ {
+ const char *diff_cmd; /* the external diff command to use */
+ svn_boolean_t internal_diff; /* override diff_cmd in config file */
+ svn_boolean_t no_diff_added; /* do not show diffs for deleted files */
+ svn_boolean_t no_diff_deleted; /* do not show diffs for deleted files */
svn_boolean_t show_copies_as_adds; /* do not diff copies with their source */
- svn_boolean_t notice_ancestry; /* notice ancestry for diff-y operations */
+ svn_boolean_t notice_ancestry; /* notice ancestry for diff-y operations */
+ svn_boolean_t summarize; /* create a summary of a diff */
+ svn_boolean_t use_git_diff_format; /* Use git's extended diff format */
+ svn_boolean_t ignore_properties; /* ignore properties */
+ svn_boolean_t properties_only; /* Show properties only */
+ svn_boolean_t patch_compatible; /* Output compatible with GNU patch */
+ } diff;
svn_boolean_t ignore_ancestry; /* ignore ancestry for merge-y operations */
svn_boolean_t ignore_externals;/* ignore externals definitions */
svn_boolean_t stop_on_copy; /* don't cross copies during processing */
svn_boolean_t dry_run; /* try operation but make no changes */
svn_boolean_t revprop; /* operate on a revision property */
- const char *diff_cmd; /* the external diff command to use */
const char *merge_cmd; /* the external merge command to use */
const char *editor_cmd; /* the external editor command to use */
svn_boolean_t record_only; /* whether to record mergeinfo */
@@ -203,7 +208,6 @@ typedef struct svn_cl__opt_state_t
svn_boolean_t autoprops; /* enable automatic properties */
svn_boolean_t no_autoprops; /* disable automatic properties */
const char *native_eol; /* override system standard eol marker */
- svn_boolean_t summarize; /* create a summary of a diff */
svn_boolean_t remove; /* deassociate a changelist */
apr_array_header_t *changelists; /* changelist filters */
const char *changelist; /* operate on this changelist
@@ -215,21 +219,22 @@ typedef struct svn_cl__opt_state_t
apr_hash_t *revprop_table; /* table of revision properties to get/set */
svn_boolean_t parents; /* create intermediate directories */
svn_boolean_t use_merge_history; /* use/display extra merge information */
- svn_cl__accept_t accept_which; /* how to handle conflicts */
- svn_cl__show_revs_t show_revs; /* mergeinfo flavor */
- svn_depth_t set_depth; /* new sticky ambient depth value */
- svn_boolean_t reintegrate; /* use "reintegrate" merge-source heuristic */
+ svn_cl__accept_t accept_which; /* how to handle conflicts */
+ svn_cl__show_revs_t show_revs; /* mergeinfo flavor */
+ svn_depth_t set_depth; /* new sticky ambient depth value */
+ svn_boolean_t reintegrate; /* use "reintegrate" merge-source heuristic */
svn_boolean_t trust_server_cert; /* trust server SSL certs that would
otherwise be rejected as "untrusted" */
int strip; /* number of leading path components to strip */
- svn_boolean_t ignore_keywords; /* do not expand keywords */
- svn_boolean_t reverse_diff; /* reverse a diff (e.g. when patching) */
+ svn_boolean_t ignore_keywords; /* do not expand keywords */
+ svn_boolean_t reverse_diff; /* reverse a diff (e.g. when patching) */
svn_boolean_t ignore_whitespace; /* don't account for whitespace when
patching */
- svn_boolean_t show_diff; /* produce diff output (maps to --diff) */
- svn_boolean_t internal_diff; /* override diff_cmd in config file */
- svn_boolean_t use_git_diff_format; /* Use git's extended diff format */
- svn_boolean_t allow_mixed_rev; /* Allow operation on mixed-revision WC */
+ svn_boolean_t show_diff; /* produce diff output (maps to --diff) */
+ svn_boolean_t allow_mixed_rev; /* Allow operation on mixed-revision WC */
+ svn_boolean_t include_externals; /* Recurses (in)to file & dir externals */
+ svn_boolean_t show_inherited_props; /* get inherited properties */
+ apr_array_header_t* search_patterns; /* pattern arguments for --search */
} svn_cl__opt_state_t;
@@ -280,13 +285,13 @@ svn_opt_subcommand_t
svn_cl__upgrade;
-/* See definition in main.c for documentation. */
+/* See definition in svn.c for documentation. */
extern const svn_opt_subcommand_desc2_t svn_cl__cmd_table[];
-/* See definition in main.c for documentation. */
+/* See definition in svn.c for documentation. */
extern const int svn_cl__global_options[];
-/* See definition in main.c for documentation. */
+/* See definition in svn.c for documentation. */
extern const apr_getopt_option_t svn_cl__options[];
@@ -322,34 +327,57 @@ svn_cl__check_cancel(void *baton);
/* Various conflict-resolution callbacks. */
-typedef struct svn_cl__conflict_baton_t {
- svn_cl__accept_t accept_which;
- apr_hash_t *config;
- const char *editor_cmd;
- svn_boolean_t external_failed;
- svn_cmdline_prompt_baton_t *pb;
-} svn_cl__conflict_baton_t;
-
-/* Create and return a conflict baton, allocated from POOL, with the values
- ACCEPT_WHICH, CONFIG, EDITOR_CMD and PB placed in the same-named fields
- of the baton, and its 'external_failed' field initialised to FALSE. */
-svn_cl__conflict_baton_t *
-svn_cl__conflict_baton_make(svn_cl__accept_t accept_which,
- apr_hash_t *config,
- const char *editor_cmd,
- svn_cmdline_prompt_baton_t *pb,
- apr_pool_t *pool);
-
-/* A conflict-resolution callback which prompts the user to choose
- one of the 3 fulltexts, edit the merged file on the spot, or just
- skip the conflict (to be resolved later).
- Implements @c svn_wc_conflict_resolver_func_t. */
-svn_error_t *
-svn_cl__conflict_handler(svn_wc_conflict_result_t **result,
- const svn_wc_conflict_description_t *desc,
- void *baton,
- apr_pool_t *pool);
+/* Opaque baton type for svn_cl__conflict_func_interactive(). */
+typedef struct svn_cl__interactive_conflict_baton_t
+ svn_cl__interactive_conflict_baton_t;
+
+/* Conflict stats for operations such as update and merge. */
+typedef struct svn_cl__conflict_stats_t svn_cl__conflict_stats_t;
+
+/* Return a new, initialized, conflict stats structure, allocated in
+ * POOL. */
+svn_cl__conflict_stats_t *
+svn_cl__conflict_stats_create(apr_pool_t *pool);
+
+/* Update CONFLICT_STATS to reflect that a conflict on PATH_LOCAL of kind
+ * CONFLICT_KIND is resolved. (There is no support for updating the
+ * 'skipped paths' stats, since skips cannot be 'resolved'.) */
+void
+svn_cl__conflict_stats_resolved(svn_cl__conflict_stats_t *conflict_stats,
+ const char *path_local,
+ svn_wc_conflict_kind_t conflict_kind);
+
+/* Create and return an baton for use with svn_cl__conflict_func_interactive
+ * in *B, allocated from RESULT_POOL, and initialised with the values
+ * ACCEPT_WHICH, CONFIG, EDITOR_CMD, CANCEL_FUNC and CANCEL_BATON. */
+svn_error_t *
+svn_cl__get_conflict_func_interactive_baton(
+ svn_cl__interactive_conflict_baton_t **b,
+ svn_cl__accept_t accept_which,
+ apr_hash_t *config,
+ const char *editor_cmd,
+ svn_cl__conflict_stats_t *conflict_stats,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool);
+
+/* A callback capable of doing interactive conflict resolution.
+
+ The BATON must come from svn_cl__get_conflict_func_interactive_baton().
+ Resolves based on the --accept option if one was given to that function,
+ otherwise prompts the user to choose one of the three fulltexts, edit
+ the merged file on the spot, or just skip the conflict (to be resolved
+ later), among other options.
+
+ Implements svn_wc_conflict_resolver_func2_t.
+ */
+svn_error_t *
+svn_cl__conflict_func_interactive(svn_wc_conflict_result_t **result,
+ const svn_wc_conflict_description2_t *desc,
+ void *baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
/*** Command-line output functions -- printing to the user. ***/
@@ -381,6 +409,9 @@ svn_cl__time_cstring_to_human_cstring(const char **human_cstring,
/* Print STATUS for PATH to stdout for human consumption. Prints in
abbreviated format by default, or DETAILED format if flag is set.
+ When SUPPRESS_EXTERNALS_PLACEHOLDERS is set, avoid printing
+ externals placeholder lines ("X lines").
+
When DETAILED is set, use SHOW_LAST_COMMITTED to toggle display of
the last-committed-revision and last-committed-author.
@@ -392,10 +423,16 @@ svn_cl__time_cstring_to_human_cstring(const char **human_cstring,
Increment *TEXT_CONFLICTS, *PROP_CONFLICTS, or *TREE_CONFLICTS if
a conflict was encountered.
- */
+
+ Use TARGET_ABSPATH and TARGET_PATH to shorten PATH into something
+ relative to the target as necessary.
+*/
svn_error_t *
-svn_cl__print_status(const char *path,
+svn_cl__print_status(const char *target_abspath,
+ const char *target_path,
+ const char *path,
const svn_client_status_t *status,
+ svn_boolean_t suppress_externals_placeholders,
svn_boolean_t detailed,
svn_boolean_t show_last_committed,
svn_boolean_t skip_unrecognized,
@@ -408,37 +445,19 @@ svn_cl__print_status(const char *path,
/* Print STATUS for PATH in XML to stdout. Use POOL for temporary
- allocations. */
+ allocations.
+
+ Use TARGET_ABSPATH and TARGET_PATH to shorten PATH into something
+ relative to the target as necessary.
+ */
svn_error_t *
-svn_cl__print_status_xml(const char *path,
+svn_cl__print_status_xml(const char *target_abspath,
+ const char *target_path,
+ const char *path,
const svn_client_status_t *status,
svn_client_ctx_t *ctx,
apr_pool_t *pool);
-
-/* Print to stdout a hash that maps property names (char *) to property
- values (svn_string_t *). The names are assumed to be in UTF-8 format;
- the values are either in UTF-8 (the special Subversion props) or
- plain binary values.
-
- If OUT is not NULL, then write to it rather than stdout.
-
- If NAMES_ONLY is true, print just names, else print names and
- values. */
-svn_error_t *
-svn_cl__print_prop_hash(svn_stream_t *out,
- apr_hash_t *prop_hash,
- svn_boolean_t names_only,
- apr_pool_t *pool);
-
-/* Same as svn_cl__print_prop_hash(), only output xml to *OUTSTR. If *OUTSTR is
- NULL, allocate it first from POOL, otherwise append to it. */
-svn_error_t *
-svn_cl__print_xml_prop_hash(svn_stringbuf_t **outstr,
- apr_hash_t *prop_hash,
- svn_boolean_t names_only,
- apr_pool_t *pool);
-
/* Output a commit xml element to *OUTSTR. If *OUTSTR is NULL, allocate it
first from POOL, otherwise append to it. If AUTHOR or DATE is
NULL, it will be omitted. */
@@ -470,60 +489,6 @@ svn_cl__revprop_prepare(const svn_opt_revision_t *revision,
svn_client_ctx_t *ctx,
apr_pool_t *pool);
-/* Search for a text editor command in standard environment variables,
- and invoke it to edit CONTENTS (using a temporary file created in
- directory BASE_DIR). Return the new contents in *EDITED_CONTENTS,
- or set *EDITED_CONTENTS to NULL if no edit was performed.
-
- If EDITOR_CMD is not NULL, it is the name of the external editor
- command to use, overriding anything else that might determine the
- editor.
-
- If TMPFILE_LEFT is NULL, the temporary file will be destroyed.
- Else, the file will be left on disk, and its path returned in
- *TMPFILE_LEFT.
-
- CONFIG is a hash of svn_config_t * items keyed on a configuration
- category (SVN_CONFIG_CATEGORY_CONFIG et al), and may be NULL.
-
- If AS_TEXT is TRUE, recode CONTENTS and convert to native eol-style before
- editing and back again afterwards. In this case, ENCODING determines the
- encoding used during editing. If non-NULL, use the named encoding, else
- use the system encoding. If AS_TEXT is FALSE, don't do any translation.
- In that case, ENCODING is ignored.
-
- Use POOL for all allocations. Use PREFIX as the prefix for the
- temporary file used by the editor.
-
- If return error, *EDITED_CONTENTS is not touched. */
-svn_error_t *
-svn_cl__edit_string_externally(svn_string_t **edited_contents,
- const char **tmpfile_left,
- const char *editor_cmd,
- const char *base_dir,
- const svn_string_t *contents,
- const char *prefix,
- apr_hash_t *config,
- svn_boolean_t as_text,
- const char *encoding,
- apr_pool_t *pool);
-
-
-/* Search for a text editor command in standard environment variables,
- and invoke it to edit PATH. Use POOL for all allocations.
-
- If EDITOR_CMD is not NULL, it is the name of the external editor
- command to use, overriding anything else that might determine the
- editor.
-
- CONFIG is a hash of svn_config_t * items keyed on a configuration
- category (SVN_CONFIG_CATEGORY_CONFIG et al), and may be NULL. */
-svn_error_t *
-svn_cl__edit_file_externally(const char *path,
- const char *editor_cmd,
- apr_hash_t *config,
- apr_pool_t *pool);
-
/* Search for a merge tool command in environment variables,
and use it to perform the merge of the four given files.
WC_PATH is the path of the file that is in conflict, relative
@@ -546,20 +511,30 @@ svn_cl__merge_file_externally(const char *base_path,
svn_boolean_t *remains_in_conflict,
apr_pool_t *pool);
+/* Like svn_cl__merge_file_externally, but using a built-in merge tool
+ * with help from an external editor specified by EDITOR_CMD. */
+svn_error_t *
+svn_cl__merge_file(const char *base_path,
+ const char *their_path,
+ const char *my_path,
+ const char *merged_path,
+ const char *wc_path,
+ const char *path_prefix,
+ const char *editor_cmd,
+ apr_hash_t *config,
+ svn_boolean_t *remains_in_conflict,
+ apr_pool_t *scratch_pool);
/*** Notification functions to display results on the terminal. */
/* Set *NOTIFY_FUNC_P and *NOTIFY_BATON_P to a notifier/baton for all
* operations, allocated in POOL.
- *
- * If don't want a summary line at the end of notifications, set
- * SUPPRESS_FINAL_LINE.
*/
svn_error_t *
svn_cl__get_notifier(svn_wc_notify_func2_t *notify_func_p,
void **notify_baton_p,
- svn_boolean_t suppress_final_line,
+ svn_cl__conflict_stats_t *conflict_stats,
apr_pool_t *pool);
/* Make the notifier for use with BATON print the appropriate summary
@@ -595,14 +570,15 @@ svn_cl__check_externals_failed_notify_wrapper(void *baton,
const svn_wc_notify_t *n,
apr_pool_t *pool);
-/* Print conflict stats accumulated in NOTIFY_BATON.
+/* Print the conflict stats accumulated in BATON, which is the
+ * notifier baton from svn_cl__get_notifier().
* Return any error encountered during printing.
- * Do all allocations in POOL.*/
+ */
svn_error_t *
-svn_cl__print_conflict_stats(void *notify_baton, apr_pool_t *pool);
+svn_cl__notifier_print_conflict_stats(void *baton, apr_pool_t *scratch_pool);
-
-/*** Log message callback stuffs. ***/
+
+ /*** Log message callback stuffs. ***/
/* Allocate in POOL a baton for use with svn_cl__get_log_message().
@@ -709,6 +685,35 @@ svn_cl__operation_str_human_readable(svn_wc_operation_t operation,
apr_pool_t *pool);
+/* What use is a property name intended for.
+ Used by svn_cl__check_svn_prop_name to customize error messages. */
+typedef enum svn_cl__prop_use_e
+ {
+ svn_cl__prop_use_set, /* setting the property */
+ svn_cl__prop_use_edit, /* editing the property */
+ svn_cl__prop_use_use /* using the property name */
+ }
+svn_cl__prop_use_t;
+
+/* If PROPNAME looks like but is not identical to one of the svn:
+ * poperties, raise an error and suggest a better spelling. Names that
+ * raise errors look like this:
+ *
+ * - start with svn: but do not exactly match a known property; or,
+ * - start with a 3-letter prefix that differs in only one letter
+ * from "svn:", and the rest exactly matches a known propery.
+ *
+ * If REVPROP is TRUE, only check revision property names; otherwise
+ * only check node property names.
+ *
+ * Use SCRATCH_POOL for temporary allocations.
+ */
+svn_error_t *
+svn_cl__check_svn_prop_name(const char *propname,
+ svn_boolean_t revprop,
+ svn_cl__prop_use_t prop_use,
+ apr_pool_t *scratch_pool);
+
/* If PROPNAME is one of the svn: properties with a boolean value, and
* PROPVAL looks like an attempt to turn the property off (i.e., it's
* "off", "no", "false", or ""), then print a warning to the user that
@@ -745,15 +750,6 @@ svn_cl__args_to_target_array_print_reserved(apr_array_header_t **targets_p,
svn_boolean_t keep_dest_origpath_on_truepath_collision,
apr_pool_t *pool);
-/* Return a string allocated in POOL that is a copy of STR but with each
- * line prefixed with INDENT. A line is all characters up to the first
- * CR-LF, LF-CR, CR or LF, or the end of STR if sooner. */
-const char *
-svn_cl__indent_string(const char *str,
- const char *indent,
- apr_pool_t *pool);
-
-
/* Return a string showing NODE's kind, URL and revision, to the extent that
* that information is available in NODE. If NODE itself is NULL, this prints
* just a 'none' node kind.
@@ -766,42 +762,19 @@ svn_cl__node_description(const svn_wc_conflict_version_t *node,
const char *wc_repos_root_URL,
apr_pool_t *pool);
-/* Return, in @a *true_targets_p, a copy of @a targets with peg revision
- * specifiers snipped off the end of each element.
- *
- * ### JAF TODO: This function is not good because it does not allow the
- * ### caller to detect if an invalid peg revision was specified.
- * ###
- * ### Callers should never have a need to silently *discard* all peg
- * ### revisions, even if they are doing this *after* saving any peg
- * ### revisions that might be of interest on certain arguments: I don't
- * ### think it can ever be correct to silently ignore a peg revision that
- * ### is specified, whether it makes semantic sense or not.
- * ###
- * ### Instead, callers should parse all the arguments and silently
- * ### ignore an *empty* peg revision part (just an "@", which can be
- * ### used to escape an earlier "@" in the argument) on any argument,
- * ### even an argument on which a peg revision does not make sense,
- * ### but should not silently ignore a non-empty peg when it does not
- * ### make sense.
- * ###
- * ### Something like:
- * ### For each (URL-like?) argument that doesn't accept a peg rev:
- * ### Parse into peg-rev and true-path parts;
- * ### If (peg rev != unspecified)
- * ### Error("This arg doesn't accept a peg rev.").
- * ### Use the true-path part.
+/* Return, in @a *true_targets_p, a shallow copy of @a targets with any
+ * empty peg revision specifier snipped off the end of each element. If any
+ * target has a non-empty peg revision specifier, throw an error. The user
+ * may have specified a peg revision where it doesn't make sense to do so,
+ * or may have forgotten to escape an '@' character in a filename.
*
* This function is useful for subcommands for which peg revisions
- * do not make any sense. Such subcommands still need to allow peg
- * revisions to be specified on the command line so that users of
+ * do not make any sense. Such subcommands still need to allow an empty
+ * peg revision to be specified on the command line so that users of
* the command line client can consistently escape '@' characters
* in filenames by appending an '@' character, regardless of the
* subcommand being used.
*
- * If a peg revision is present but cannot be parsed, an error is thrown.
- * The user has likely forgotten to escape an '@' character in a filename.
- *
* It is safe to pass the address of @a targets as @a true_targets_p.
*
* Do all allocations in @a pool. */
@@ -833,6 +806,28 @@ svn_cl__local_style_skip_ancestor(const char *parent_path,
const char *path,
apr_pool_t *pool);
+/* If the user is setting a mime-type to mark one of the TARGETS as binary,
+ * as determined by property name PROPNAME and value PROPVAL, then check
+ * whether Subversion's own binary-file detection recognizes the target as
+ * a binary file. If Subversion doesn't consider the target to be a binary
+ * file, assume the user is making an error and print a warning to inform
+ * the user that some operations might fail on the file in the future. */
+svn_error_t *
+svn_cl__propset_print_binary_mime_type_warning(apr_array_header_t *targets,
+ const char *propname,
+ const svn_string_t *propval,
+ apr_pool_t *scratch_pool);
+
+/* A wrapper around the deprecated svn_client_merge_reintegrate. */
+svn_error_t *
+svn_cl__deprecated_merge_reintegrate(const char *source_path_or_url,
+ const svn_opt_revision_t *src_peg_revision,
+ const char *target_wcpath,
+ svn_boolean_t dry_run,
+ const apr_array_header_t *merge_options,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/svn/client_errors.h b/subversion/svn/client_errors.h
index 5041e25..19f0bdf 100644
--- a/subversion/svn/client_errors.h
+++ b/subversion/svn/client_errors.h
@@ -43,6 +43,8 @@ extern "C" {
#if defined(SVN_ERROR_BUILD_ARRAY)
+#error "Need to update err_defn for r1464679 and un-typo 'CDMLINE'"
+
#define SVN_ERROR_START \
static const err_defn error_table[] = { \
{ SVN_ERR_CDMLINE__WARNING, "Warning" },
diff --git a/subversion/svn/commit-cmd.c b/subversion/svn/commit-cmd.c
index e227f04..2d04c69 100644
--- a/subversion/svn/commit-cmd.c
+++ b/subversion/svn/commit-cmd.c
@@ -29,6 +29,7 @@
#include <apr_general.h>
+#include "svn_hash.h"
#include "svn_error.h"
#include "svn_error_codes.h"
#include "svn_wc.h"
@@ -136,8 +137,7 @@ svn_cl__commit(apr_getopt_t *os,
if (opt_state->depth == svn_depth_unknown)
opt_state->depth = svn_depth_infinity;
- cfg = apr_hash_get(ctx->config, SVN_CONFIG_CATEGORY_CONFIG,
- APR_HASH_KEY_STRING);
+ cfg = svn_hash_gets(ctx->config, SVN_CONFIG_CATEGORY_CONFIG);
if (cfg)
SVN_ERR(svn_config_get_bool(cfg, &no_unlock,
SVN_CONFIG_SECTION_MISCELLANY,
@@ -166,11 +166,13 @@ svn_cl__commit(apr_getopt_t *os,
}
/* Commit. */
- err = svn_client_commit5(targets,
+ err = svn_client_commit6(targets,
opt_state->depth,
no_unlock,
opt_state->keep_changelists,
TRUE /* commit_as_operations */,
+ opt_state->include_externals, /* file externals */
+ opt_state->include_externals, /* dir externals */
opt_state->changelists,
opt_state->revprop_table,
(opt_state->quiet
diff --git a/subversion/svn/conflict-callbacks.c b/subversion/svn/conflict-callbacks.c
index a158576..0f12413 100644
--- a/subversion/svn/conflict-callbacks.c
+++ b/subversion/svn/conflict-callbacks.c
@@ -24,36 +24,66 @@
#include <apr_xlate.h> /* for APR_LOCALE_CHARSET */
-#define APR_WANT_STDIO
#define APR_WANT_STRFUNC
#include <apr_want.h>
+#include "svn_hash.h"
#include "svn_cmdline.h"
#include "svn_client.h"
+#include "svn_dirent_uri.h"
#include "svn_types.h"
#include "svn_pools.h"
+#include "svn_sorts.h"
+#include "svn_utf.h"
#include "cl.h"
+#include "cl-conflicts.h"
+
+#include "private/svn_cmdline_private.h"
#include "svn_private_config.h"
+#define ARRAY_LEN(ary) ((sizeof (ary)) / (sizeof ((ary)[0])))
+
+struct svn_cl__interactive_conflict_baton_t {
+ svn_cl__accept_t accept_which;
+ apr_hash_t *config;
+ const char *editor_cmd;
+ svn_boolean_t external_failed;
+ svn_cmdline_prompt_baton_t *pb;
+ const char *path_prefix;
+ svn_boolean_t quit;
+ svn_cl__conflict_stats_t *conflict_stats;
+};
-svn_cl__conflict_baton_t *
-svn_cl__conflict_baton_make(svn_cl__accept_t accept_which,
- apr_hash_t *config,
- const char *editor_cmd,
- svn_cmdline_prompt_baton_t *pb,
- apr_pool_t *pool)
+svn_error_t *
+svn_cl__get_conflict_func_interactive_baton(
+ svn_cl__interactive_conflict_baton_t **b,
+ svn_cl__accept_t accept_which,
+ apr_hash_t *config,
+ const char *editor_cmd,
+ svn_cl__conflict_stats_t *conflict_stats,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool)
{
- svn_cl__conflict_baton_t *b = apr_palloc(pool, sizeof(*b));
- b->accept_which = accept_which;
- b->config = config;
- b->editor_cmd = editor_cmd;
- b->external_failed = FALSE;
- b->pb = pb;
- return b;
+ svn_cmdline_prompt_baton_t *pb = apr_palloc(result_pool, sizeof(*pb));
+ pb->cancel_func = cancel_func;
+ pb->cancel_baton = cancel_baton;
+
+ *b = apr_palloc(result_pool, sizeof(**b));
+ (*b)->accept_which = accept_which;
+ (*b)->config = config;
+ (*b)->editor_cmd = editor_cmd;
+ (*b)->external_failed = FALSE;
+ (*b)->pb = pb;
+ SVN_ERR(svn_dirent_get_absolute(&(*b)->path_prefix, "", result_pool));
+ (*b)->quit = FALSE;
+ (*b)->conflict_stats = conflict_stats;
+
+ return SVN_NO_ERROR;
}
svn_cl__accept_t
@@ -92,31 +122,63 @@ svn_cl__accept_from_word(const char *word)
}
-/* Print on stdout a diff between the 'base' and 'merged' files, if both of
- * those are available, else between 'their' and 'my' files, of DESC. */
+/* Print on stdout a diff that shows incoming conflicting changes
+ * corresponding to the conflict described in DESC. */
static svn_error_t *
-show_diff(const svn_wc_conflict_description_t *desc,
+show_diff(const svn_wc_conflict_description2_t *desc,
+ const char *path_prefix,
apr_pool_t *pool)
{
const char *path1, *path2;
+ const char *label1, *label2;
svn_diff_t *diff;
svn_stream_t *output;
svn_diff_file_options_t *options;
- if (desc->merged_file && desc->base_file)
+ if (desc->merged_file)
{
- /* Show the conflict markers to the user */
- path1 = desc->base_file;
+ /* For conflicts recorded by the 'merge' operation, show a diff between
+ * 'mine' (the working version of the file as it appeared before the
+ * 'merge' operation was run) and 'merged' (the version of the file
+ * as it appears after the merge operation).
+ *
+ * For conflicts recorded by the 'update' and 'switch' operations,
+ * show a diff beween 'theirs' (the new pristine version of the
+ * file) and 'merged' (the version of the file as it appears with
+ * local changes merged with the new pristine version).
+ *
+ * This way, the diff is always minimal and clearly identifies changes
+ * brought into the working copy by the update/switch/merge operation. */
+ if (desc->operation == svn_wc_operation_merge)
+ {
+ path1 = desc->my_abspath;
+ label1 = _("MINE");
+ }
+ else
+ {
+ path1 = desc->their_abspath;
+ label1 = _("THEIRS");
+ }
path2 = desc->merged_file;
+ label2 = _("MERGED");
}
else
{
- /* There's no base file, but we can show the
+ /* There's no merged file, but we can show the
difference between mine and theirs. */
- path1 = desc->their_file;
- path2 = desc->my_file;
+ path1 = desc->their_abspath;
+ label1 = _("THEIRS");
+ path2 = desc->my_abspath;
+ label2 = _("MINE");
}
+ label1 = apr_psprintf(pool, "%s\t- %s",
+ svn_cl__local_style_skip_ancestor(
+ path_prefix, path1, pool), label1);
+ label2 = apr_psprintf(pool, "%s\t- %s",
+ svn_cl__local_style_skip_ancestor(
+ path_prefix, path2, pool), label2);
+
options = svn_diff_file_options_create(pool);
options->ignore_eol_style = TRUE;
SVN_ERR(svn_stream_for_stdout(&output, pool));
@@ -124,7 +186,7 @@ show_diff(const svn_wc_conflict_description_t *desc,
options, pool));
return svn_diff_file_output_unified3(output, diff,
path1, path2,
- NULL, NULL,
+ label1, label2,
APR_LOCALE_CHARSET,
NULL, FALSE,
pool);
@@ -134,7 +196,7 @@ show_diff(const svn_wc_conflict_description_t *desc,
/* Print on stdout just the conflict hunks of a diff among the 'base', 'their'
* and 'my' files of DESC. */
static svn_error_t *
-show_conflicts(const svn_wc_conflict_description_t *desc,
+show_conflicts(const svn_wc_conflict_description2_t *desc,
apr_pool_t *pool)
{
svn_diff_t *diff;
@@ -145,16 +207,16 @@ show_conflicts(const svn_wc_conflict_description_t *desc,
options->ignore_eol_style = TRUE;
SVN_ERR(svn_stream_for_stdout(&output, pool));
SVN_ERR(svn_diff_file_diff3_2(&diff,
- desc->base_file,
- desc->my_file,
- desc->their_file,
+ desc->base_abspath,
+ desc->my_abspath,
+ desc->their_abspath,
options, pool));
/* ### Consider putting the markers/labels from
### svn_wc__merge_internal in the conflict description. */
return svn_diff_file_output_merge2(output, diff,
- desc->base_file,
- desc->my_file,
- desc->their_file,
+ desc->base_abspath,
+ desc->my_abspath,
+ desc->their_abspath,
_("||||||| ORIGINAL"),
_("<<<<<<< MINE (select with 'mc')"),
_(">>>>>>> THEIRS (select with 'tc')"),
@@ -163,8 +225,85 @@ show_conflicts(const svn_wc_conflict_description_t *desc,
pool);
}
+/* Perform a 3-way merge of the conflicting values of a property,
+ * and write the result to the OUTPUT stream.
+ *
+ * If MERGED_ABSPATH is non-NULL, use it as 'my' version instead of
+ * DESC->MY_ABSPATH.
+ *
+ * Assume the values are printable UTF-8 text.
+ */
+static svn_error_t *
+merge_prop_conflict(svn_stream_t *output,
+ const svn_wc_conflict_description2_t *desc,
+ const char *merged_abspath,
+ apr_pool_t *pool)
+{
+ const char *base_abspath = desc->base_abspath;
+ const char *my_abspath = desc->my_abspath;
+ const char *their_abspath = desc->their_abspath;
+ svn_diff_file_options_t *options = svn_diff_file_options_create(pool);
+ svn_diff_t *diff;
+
+ /* If any of the property values is missing, use an empty file instead
+ * for the purpose of showing a diff. */
+ if (! base_abspath || ! my_abspath || ! their_abspath)
+ {
+ const char *empty_file;
+
+ SVN_ERR(svn_io_open_unique_file3(NULL, &empty_file,
+ NULL, svn_io_file_del_on_pool_cleanup,
+ pool, pool));
+ if (! base_abspath)
+ base_abspath = empty_file;
+ if (! my_abspath)
+ my_abspath = empty_file;
+ if (! their_abspath)
+ their_abspath = empty_file;
+ }
+
+ options->ignore_eol_style = TRUE;
+ SVN_ERR(svn_diff_file_diff3_2(&diff,
+ base_abspath,
+ merged_abspath ? merged_abspath : my_abspath,
+ their_abspath,
+ options, pool));
+ SVN_ERR(svn_diff_file_output_merge2(output, diff,
+ base_abspath,
+ merged_abspath ? merged_abspath
+ : my_abspath,
+ their_abspath,
+ _("||||||| ORIGINAL"),
+ _("<<<<<<< MINE"),
+ _(">>>>>>> THEIRS"),
+ "=======",
+ svn_diff_conflict_display_modified_original_latest,
+ pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* Display the conflicting values of a property as a 3-way diff.
+ *
+ * If MERGED_ABSPATH is non-NULL, show it as 'my' version instead of
+ * DESC->MY_ABSPATH.
+ *
+ * Assume the values are printable UTF-8 text.
+ */
+static svn_error_t *
+show_prop_conflict(const svn_wc_conflict_description2_t *desc,
+ const char *merged_abspath,
+ apr_pool_t *pool)
+{
+ svn_stream_t *output;
+
+ SVN_ERR(svn_stream_for_stdout(&output, pool));
+ SVN_ERR(merge_prop_conflict(output, desc, merged_abspath, pool));
-/* Run an external editor, passing it the 'merged' file in DESC, or, if the
+ return SVN_NO_ERROR;
+}
+
+/* Run an external editor, passing it the MERGED_FILE, or, if the
* 'merged' file is null, return an error. The tool to use is determined by
* B->editor_cmd, B->config and environment variables; see
* svn_cl__edit_file_externally() for details.
@@ -175,27 +314,31 @@ show_conflicts(const svn_wc_conflict_description_t *desc,
* return that error. */
static svn_error_t *
open_editor(svn_boolean_t *performed_edit,
- const svn_wc_conflict_description_t *desc,
- svn_cl__conflict_baton_t *b,
+ const char *merged_file,
+ svn_cl__interactive_conflict_baton_t *b,
apr_pool_t *pool)
{
svn_error_t *err;
- if (desc->merged_file)
+ if (merged_file)
{
- err = svn_cl__edit_file_externally(desc->merged_file, b->editor_cmd,
- b->config, pool);
+ err = svn_cmdline__edit_file_externally(merged_file, b->editor_cmd,
+ b->config, pool);
if (err && (err->apr_err == SVN_ERR_CL_NO_EXTERNAL_EDITOR))
{
+ svn_error_t *root_err = svn_error_root_cause(err);
+
SVN_ERR(svn_cmdline_fprintf(stderr, pool, "%s\n",
- err->message ? err->message :
+ root_err->message ? root_err->message :
_("No editor found.")));
svn_error_clear(err);
}
else if (err && (err->apr_err == SVN_ERR_EXTERNAL_PROGRAM))
{
+ svn_error_t *root_err = svn_error_root_cause(err);
+
SVN_ERR(svn_cmdline_fprintf(stderr, pool, "%s\n",
- err->message ? err->message :
+ root_err->message ? root_err->message :
_("Error running editor.")));
svn_error_clear(err);
}
@@ -212,6 +355,34 @@ open_editor(svn_boolean_t *performed_edit,
return SVN_NO_ERROR;
}
+/* Run an external editor, passing it the 'merged' property in DESC.
+ * The tool to use is determined by B->editor_cmd, B->config and
+ * environment variables; see svn_cl__edit_file_externally() for details. */
+static svn_error_t *
+edit_prop_conflict(const char **merged_file_path,
+ const svn_wc_conflict_description2_t *desc,
+ svn_cl__interactive_conflict_baton_t *b,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ apr_file_t *file;
+ const char *file_path;
+ svn_boolean_t performed_edit = FALSE;
+ svn_stream_t *merged_prop;
+
+ SVN_ERR(svn_io_open_unique_file3(&file, &file_path, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ result_pool, scratch_pool));
+ merged_prop = svn_stream_from_aprfile2(file, TRUE /* disown */,
+ scratch_pool);
+ SVN_ERR(merge_prop_conflict(merged_prop, desc, NULL, scratch_pool));
+ SVN_ERR(svn_stream_close(merged_prop));
+ SVN_ERR(svn_io_file_flush_to_disk(file, scratch_pool));
+ SVN_ERR(open_editor(&performed_edit, file_path, b, scratch_pool));
+ *merged_file_path = (performed_edit ? file_path : NULL);
+
+ return SVN_NO_ERROR;
+}
/* Run an external merge tool, passing it the 'base', 'their', 'my' and
* 'merged' files in DESC. The tool to use is determined by B->config and
@@ -223,27 +394,30 @@ open_editor(svn_boolean_t *performed_edit,
* return that error. */
static svn_error_t *
launch_resolver(svn_boolean_t *performed_edit,
- const svn_wc_conflict_description_t *desc,
- svn_cl__conflict_baton_t *b,
+ const svn_wc_conflict_description2_t *desc,
+ svn_cl__interactive_conflict_baton_t *b,
apr_pool_t *pool)
{
svn_error_t *err;
- err = svn_cl__merge_file_externally(desc->base_file, desc->their_file,
- desc->my_file, desc->merged_file,
- desc->path, b->config, NULL, pool);
+ err = svn_cl__merge_file_externally(desc->base_abspath, desc->their_abspath,
+ desc->my_abspath, desc->merged_file,
+ desc->local_abspath, b->config, NULL,
+ pool);
if (err && err->apr_err == SVN_ERR_CL_NO_EXTERNAL_MERGE_TOOL)
{
SVN_ERR(svn_cmdline_fprintf(stderr, pool, "%s\n",
err->message ? err->message :
- _("No merge tool found.\n")));
+ _("No merge tool found, "
+ "try '(m) merge' instead.\n")));
svn_error_clear(err);
}
else if (err && err->apr_err == SVN_ERR_EXTERNAL_PROGRAM)
{
SVN_ERR(svn_cmdline_fprintf(stderr, pool, "%s\n",
err->message ? err->message :
- _("Error running merge tool.")));
+ _("Error running merge tool, "
+ "try '(m) merge' instead.")));
svn_error_clear(err);
}
else if (err)
@@ -255,21 +429,705 @@ launch_resolver(svn_boolean_t *performed_edit,
}
-/* Implement svn_wc_conflict_resolver_func_t; resolves based on
- --accept option if given, else by prompting. */
-svn_error_t *
-svn_cl__conflict_handler(svn_wc_conflict_result_t **result,
- const svn_wc_conflict_description_t *desc,
- void *baton,
- apr_pool_t *pool)
+/* Maximum line length for the prompt string. */
+#define MAX_PROMPT_WIDTH 70
+
+/* Description of a resolver option */
+typedef struct resolver_option_t
+{
+ const char *code; /* one or two characters */
+ const char *short_desc; /* label in prompt (localized) */
+ const char *long_desc; /* longer description (localized) */
+ svn_wc_conflict_choice_t choice; /* or -1 if not a simple choice */
+} resolver_option_t;
+
+/* Resolver options for a text conflict */
+/* (opt->code == "" causes a blank line break in help_string()) */
+static const resolver_option_t text_conflict_options[] =
+{
+ /* Translators: keep long_desc below 70 characters (wrap with a left
+ margin of 9 spaces if needed); don't translate the words within square
+ brackets. */
+ { "e", N_("edit file"), N_("change merged file in an editor"
+ " [edit]"),
+ -1 },
+ { "df", N_("show diff"), N_("show all changes made to merged file"),
+ -1 },
+ { "r", N_("mark resolved"), N_("accept merged version of file"),
+ svn_wc_conflict_choose_merged },
+ { "", "", "", svn_wc_conflict_choose_unspecified },
+ { "dc", N_("display conflict"), N_("show all conflicts "
+ "(ignoring merged version)"), -1 },
+ { "mc", N_("my side of conflict"), N_("accept my version for all conflicts "
+ "(same) [mine-conflict]"),
+ svn_wc_conflict_choose_mine_conflict },
+ { "tc", N_("their side of conflict"), N_("accept their version for all "
+ "conflicts (same)"
+ " [theirs-conflict]"),
+ svn_wc_conflict_choose_theirs_conflict },
+ { "", "", "", svn_wc_conflict_choose_unspecified },
+ { "mf", N_("my version"), N_("accept my version of entire file (even "
+ "non-conflicts) [mine-full]"),
+ svn_wc_conflict_choose_mine_full },
+ { "tf", N_("their version"), N_("accept their version of entire file "
+ "(same) [theirs-full]"),
+ svn_wc_conflict_choose_theirs_full },
+ { "", "", "", svn_wc_conflict_choose_unspecified },
+ { "m", N_("merge"), N_("use internal merge tool to resolve "
+ "conflict"), -1 },
+ { "l", N_("launch tool"), N_("launch external tool to resolve "
+ "conflict [launch]"), -1 },
+ { "p", N_("postpone"), N_("mark the conflict to be resolved later"
+ " [postpone]"),
+ svn_wc_conflict_choose_postpone },
+ { "q", N_("quit resolution"), N_("postpone all remaining conflicts"),
+ svn_wc_conflict_choose_postpone },
+ { "s", N_("show all options"), N_("show this list (also 'h', '?')"), -1 },
+ { NULL }
+};
+
+/* Resolver options for a property conflict */
+static const resolver_option_t prop_conflict_options[] =
+{
+ { "mf", N_("my version"), N_("accept my version of entire property (even "
+ "non-conflicts) [mine-full]"),
+ svn_wc_conflict_choose_mine_full },
+ { "tf", N_("their version"), N_("accept their version of entire property "
+ "(same) [theirs-full]"),
+ svn_wc_conflict_choose_theirs_full },
+ { "dc", N_("display conflict"), N_("show conflicts in this property"), -1 },
+ { "e", N_("edit property"), N_("change merged property value in an editor"
+ " [edit]"), -1 },
+ { "r", N_("mark resolved"), N_("accept edited version of property"),
+ svn_wc_conflict_choose_merged },
+ { "p", N_("postpone"), N_("mark the conflict to be resolved later"
+ " [postpone]"),
+ svn_wc_conflict_choose_postpone },
+ { "q", N_("quit resolution"), N_("postpone all remaining conflicts"),
+ svn_wc_conflict_choose_postpone },
+ { "h", N_("help"), N_("show this help (also '?')"), -1 },
+ { NULL }
+};
+
+/* Resolver options for a tree conflict */
+static const resolver_option_t tree_conflict_options[] =
+{
+ { "r", N_("mark resolved"), N_("accept current working copy state"),
+ svn_wc_conflict_choose_merged },
+ { "p", N_("postpone"), N_("resolve the conflict later [postpone]"),
+ svn_wc_conflict_choose_postpone },
+ { "q", N_("quit resolution"), N_("postpone all remaining conflicts"),
+ svn_wc_conflict_choose_postpone },
+ { "h", N_("help"), N_("show this help (also '?')"), -1 },
+ { NULL }
+};
+
+static const resolver_option_t tree_conflict_options_update_moved_away[] =
+{
+ { "mc", N_("apply update (recommended)"),
+ N_("apply update to the move destination"
+ " [mine-conflict]"),
+ svn_wc_conflict_choose_mine_conflict },
+ { "r", N_("discard update (breaks move)"), N_("discard update, mark "
+ "resolved, the move will "
+ "will become a copy"),
+ svn_wc_conflict_choose_merged },
+ { "p", N_("postpone"), N_("resolve the conflict later [postpone]"),
+ svn_wc_conflict_choose_postpone },
+ { "q", N_("quit resolution"), N_("postpone all remaining conflicts"),
+ svn_wc_conflict_choose_postpone },
+ { "h", N_("help"), N_("show this help (also '?')"), -1 },
+ { NULL }
+};
+
+static const resolver_option_t tree_conflict_options_update_edit_moved_away[] =
+{
+ { "mc", N_("apply update to move destination"),
+ N_("apply incoming update to move destination"
+ " [mine-conflict]"),
+ svn_wc_conflict_choose_mine_conflict },
+ { "p", N_("postpone"), N_("resolve the conflict later [postpone]"),
+ svn_wc_conflict_choose_postpone },
+ { "q", N_("quit resolution"), N_("postpone all remaining conflicts"),
+ svn_wc_conflict_choose_postpone },
+ { "h", N_("help"), N_("show this help (also '?')"), -1 },
+ { NULL }
+};
+
+static const resolver_option_t tree_conflict_options_update_deleted[] =
+{
+ { "mc", N_("keep affected local moves"), N_("keep any local moves affected "
+ "by this deletion [mine-conflict]"),
+ svn_wc_conflict_choose_mine_conflict },
+ { "r", N_("mark resolved (breaks moves)"), N_("mark resolved, any affected "
+ "moves will become copies"),
+ svn_wc_conflict_choose_merged },
+ { "p", N_("postpone"), N_("resolve the conflict later [postpone]"),
+ svn_wc_conflict_choose_postpone },
+ { "q", N_("quit resolution"), N_("postpone all remaining conflicts"),
+ svn_wc_conflict_choose_postpone },
+ { "h", N_("help"), N_("show this help (also '?')"), -1 },
+ { NULL }
+};
+
+static const resolver_option_t tree_conflict_options_update_replaced[] =
+{
+ { "mc", N_("keep affected local moves"), N_("keep any moves affected by this "
+ "replacement [mine-conflict]"),
+ svn_wc_conflict_choose_mine_conflict },
+ { "r", N_("mark resolved (breaks moves)"), N_("mark resolved (any affected "
+ "moves will become copies)"),
+ svn_wc_conflict_choose_merged },
+ { "p", N_("postpone"), N_("resolve the conflict later [postpone]"),
+ svn_wc_conflict_choose_postpone },
+ { "q", N_("quit resolution"), N_("postpone all remaining conflicts"),
+ svn_wc_conflict_choose_postpone },
+ { "h", N_("help"), N_("show this help (also '?')"), -1 },
+ { NULL }
+};
+
+
+/* Return a pointer to the option description in OPTIONS matching the
+ * one- or two-character OPTION_CODE. Return NULL if not found. */
+static const resolver_option_t *
+find_option(const resolver_option_t *options,
+ const char *option_code)
+{
+ const resolver_option_t *opt;
+
+ for (opt = options; opt->code; opt++)
+ {
+ /* Ignore code "" (blank lines) which is not a valid answer. */
+ if (opt->code[0] && strcmp(opt->code, option_code) == 0)
+ return opt;
+ }
+ return NULL;
+}
+
+/* Return a prompt string listing the options OPTIONS. If OPTION_CODES is
+ * non-null, select only the options whose codes are mentioned in it. */
+static const char *
+prompt_string(const resolver_option_t *options,
+ const char *const *option_codes,
+ apr_pool_t *pool)
+{
+ const char *result = _("Select:");
+ int left_margin = svn_utf_cstring_utf8_width(result);
+ const char *line_sep = apr_psprintf(pool, "\n%*s", left_margin, "");
+ int this_line_len = left_margin;
+ svn_boolean_t first = TRUE;
+
+ while (1)
+ {
+ const resolver_option_t *opt;
+ const char *s;
+ int slen;
+
+ if (option_codes)
+ {
+ if (! *option_codes)
+ break;
+ opt = find_option(options, *option_codes++);
+ }
+ else
+ {
+ opt = options++;
+ if (! opt->code)
+ break;
+ }
+
+ if (! first)
+ result = apr_pstrcat(pool, result, ",", (char *)NULL);
+ s = apr_psprintf(pool, _(" (%s) %s"),
+ opt->code, _(opt->short_desc));
+ slen = svn_utf_cstring_utf8_width(s);
+ /* Break the line if adding the next option would make it too long */
+ if (this_line_len + slen > MAX_PROMPT_WIDTH)
+ {
+ result = apr_pstrcat(pool, result, line_sep, (char *)NULL);
+ this_line_len = left_margin;
+ }
+ result = apr_pstrcat(pool, result, s, (char *)NULL);
+ this_line_len += slen;
+ first = FALSE;
+ }
+ return apr_pstrcat(pool, result, ": ", (char *)NULL);
+}
+
+/* Return a help string listing the OPTIONS. */
+static const char *
+help_string(const resolver_option_t *options,
+ apr_pool_t *pool)
+{
+ const char *result = "";
+ const resolver_option_t *opt;
+
+ for (opt = options; opt->code; opt++)
+ {
+ /* Append a line describing OPT, or a blank line if its code is "". */
+ if (opt->code[0])
+ {
+ const char *s = apr_psprintf(pool, " (%s)", opt->code);
+
+ result = apr_psprintf(pool, "%s%-6s - %s\n",
+ result, s, _(opt->long_desc));
+ }
+ else
+ {
+ result = apr_pstrcat(pool, result, "\n", (char *)NULL);
+ }
+ }
+ result = apr_pstrcat(pool, result,
+ _("Words in square brackets are the corresponding "
+ "--accept option arguments.\n"),
+ (char *)NULL);
+ return result;
+}
+
+/* Prompt the user with CONFLICT_OPTIONS, restricted to the options listed
+ * in OPTIONS_TO_SHOW if that is non-null. Set *OPT to point to the chosen
+ * one of CONFLICT_OPTIONS (not necessarily one of OPTIONS_TO_SHOW), or to
+ * NULL if the answer was not one of them.
+ *
+ * If the answer is the (globally recognized) 'help' option, then display
+ * the help (on stderr) and return with *OPT == NULL.
+ */
+static svn_error_t *
+prompt_user(const resolver_option_t **opt,
+ const resolver_option_t *conflict_options,
+ const char *const *options_to_show,
+ void *prompt_baton,
+ apr_pool_t *scratch_pool)
+{
+ const char *prompt
+ = prompt_string(conflict_options, options_to_show, scratch_pool);
+ const char *answer;
+
+ SVN_ERR(svn_cmdline_prompt_user2(&answer, prompt, prompt_baton, scratch_pool));
+ if (strcmp(answer, "h") == 0 || strcmp(answer, "?") == 0)
+ {
+ SVN_ERR(svn_cmdline_fprintf(stderr, scratch_pool, "\n%s\n",
+ help_string(conflict_options,
+ scratch_pool)));
+ *opt = NULL;
+ }
+ else
+ {
+ *opt = find_option(conflict_options, answer);
+ if (! *opt)
+ {
+ SVN_ERR(svn_cmdline_fprintf(stderr, scratch_pool,
+ _("Unrecognized option.\n\n")));
+ }
+ }
+ return SVN_NO_ERROR;
+}
+
+/* Ask the user what to do about the text conflict described by DESC.
+ * Return the answer in RESULT. B is the conflict baton for this
+ * conflict resolution session.
+ * SCRATCH_POOL is used for temporary allocations. */
+static svn_error_t *
+handle_text_conflict(svn_wc_conflict_result_t *result,
+ const svn_wc_conflict_description2_t *desc,
+ svn_cl__interactive_conflict_baton_t *b,
+ apr_pool_t *scratch_pool)
+{
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ svn_boolean_t diff_allowed = FALSE;
+ /* Have they done something that might have affected the merged
+ file (so that we need to save a .edited copy)? */
+ svn_boolean_t performed_edit = FALSE;
+ /* Have they done *something* (edit, look at diff, etc) to
+ give them a rational basis for choosing (r)esolved? */
+ svn_boolean_t knows_something = FALSE;
+
+ SVN_ERR_ASSERT(desc->kind == svn_wc_conflict_kind_text);
+
+ SVN_ERR(svn_cmdline_fprintf(stderr, scratch_pool,
+ _("Conflict discovered in file '%s'.\n"),
+ svn_cl__local_style_skip_ancestor(
+ b->path_prefix, desc->local_abspath,
+ scratch_pool)));
+
+ /* Diffing can happen between base and merged, to show conflict
+ markers to the user (this is the typical 3-way merge
+ scenario), or if no base is available, we can show a diff
+ between mine and theirs. */
+ if ((desc->merged_file && desc->base_abspath)
+ || (!desc->base_abspath && desc->my_abspath && desc->their_abspath))
+ diff_allowed = TRUE;
+
+ while (TRUE)
+ {
+ const char *options[ARRAY_LEN(text_conflict_options)];
+ const char **next_option = options;
+ const resolver_option_t *opt;
+
+ svn_pool_clear(iterpool);
+
+ *next_option++ = "p";
+ if (diff_allowed)
+ {
+ *next_option++ = "df";
+ *next_option++ = "e";
+ *next_option++ = "m";
+
+ if (knows_something)
+ *next_option++ = "r";
+
+ if (! desc->is_binary)
+ {
+ *next_option++ = "mc";
+ *next_option++ = "tc";
+ }
+ }
+ else
+ {
+ if (knows_something)
+ *next_option++ = "r";
+ *next_option++ = "mf";
+ *next_option++ = "tf";
+ }
+ *next_option++ = "s";
+ *next_option++ = NULL;
+
+ SVN_ERR(prompt_user(&opt, text_conflict_options, options, b->pb,
+ iterpool));
+ if (! opt)
+ continue;
+
+ if (strcmp(opt->code, "q") == 0)
+ {
+ result->choice = opt->choice;
+ b->accept_which = svn_cl__accept_postpone;
+ b->quit = TRUE;
+ break;
+ }
+ else if (strcmp(opt->code, "s") == 0)
+ {
+ SVN_ERR(svn_cmdline_fprintf(stderr, scratch_pool, "\n%s\n",
+ help_string(text_conflict_options,
+ iterpool)));
+ }
+ else if (strcmp(opt->code, "dc") == 0)
+ {
+ if (desc->is_binary)
+ {
+ SVN_ERR(svn_cmdline_fprintf(stderr, iterpool,
+ _("Invalid option; cannot "
+ "display conflicts for a "
+ "binary file.\n\n")));
+ continue;
+ }
+ else if (! (desc->my_abspath && desc->base_abspath &&
+ desc->their_abspath))
+ {
+ SVN_ERR(svn_cmdline_fprintf(stderr, iterpool,
+ _("Invalid option; original "
+ "files not available.\n\n")));
+ continue;
+ }
+ SVN_ERR(show_conflicts(desc, iterpool));
+ knows_something = TRUE;
+ }
+ else if (strcmp(opt->code, "df") == 0)
+ {
+ if (! diff_allowed)
+ {
+ SVN_ERR(svn_cmdline_fprintf(stderr, iterpool,
+ _("Invalid option; there's no "
+ "merged version to diff.\n\n")));
+ continue;
+ }
+
+ SVN_ERR(show_diff(desc, b->path_prefix, iterpool));
+ knows_something = TRUE;
+ }
+ else if (strcmp(opt->code, "e") == 0 || strcmp(opt->code, ":-E") == 0)
+ {
+ SVN_ERR(open_editor(&performed_edit, desc->merged_file, b, iterpool));
+ if (performed_edit)
+ knows_something = TRUE;
+ }
+ else if (strcmp(opt->code, "m") == 0 || strcmp(opt->code, ":-g") == 0 ||
+ strcmp(opt->code, "=>-") == 0 || strcmp(opt->code, ":>.") == 0)
+ {
+ if (desc->kind != svn_wc_conflict_kind_text)
+ {
+ SVN_ERR(svn_cmdline_fprintf(stderr, iterpool,
+ _("Invalid option; can only "
+ "resolve text conflicts with "
+ "the internal merge tool."
+ "\n\n")));
+ continue;
+ }
+
+ if (desc->base_abspath && desc->their_abspath &&
+ desc->my_abspath && desc->merged_file)
+ {
+ svn_boolean_t remains_in_conflict;
+
+ SVN_ERR(svn_cl__merge_file(desc->base_abspath,
+ desc->their_abspath,
+ desc->my_abspath,
+ desc->merged_file,
+ desc->local_abspath,
+ b->path_prefix,
+ b->editor_cmd,
+ b->config,
+ &remains_in_conflict,
+ iterpool));
+ knows_something = !remains_in_conflict;
+ }
+ else
+ SVN_ERR(svn_cmdline_fprintf(stderr, iterpool,
+ _("Invalid option.\n\n")));
+ }
+ else if (strcmp(opt->code, "l") == 0 || strcmp(opt->code, ":-l") == 0)
+ {
+ /* ### This check should be earlier as it's nasty to offer an option
+ * and then when the user chooses it say 'Invalid option'. */
+ /* ### 'merged_file' shouldn't be necessary *before* we launch the
+ * resolver: it should be the *result* of doing so. */
+ if (desc->base_abspath && desc->their_abspath &&
+ desc->my_abspath && desc->merged_file)
+ {
+ SVN_ERR(launch_resolver(&performed_edit, desc, b, iterpool));
+ if (performed_edit)
+ knows_something = TRUE;
+ }
+ else
+ SVN_ERR(svn_cmdline_fprintf(stderr, iterpool,
+ _("Invalid option.\n\n")));
+ }
+ else if (opt->choice != -1)
+ {
+ if ((opt->choice == svn_wc_conflict_choose_mine_conflict
+ || opt->choice == svn_wc_conflict_choose_theirs_conflict)
+ && desc->is_binary)
+ {
+ SVN_ERR(svn_cmdline_fprintf(stderr, iterpool,
+ _("Invalid option; cannot choose "
+ "based on conflicts in a "
+ "binary file.\n\n")));
+ continue;
+ }
+
+ /* We only allow the user accept the merged version of
+ the file if they've edited it, or at least looked at
+ the diff. */
+ if (opt->choice == svn_wc_conflict_choose_merged
+ && ! knows_something)
+ {
+ SVN_ERR(svn_cmdline_fprintf(
+ stderr, iterpool,
+ _("Invalid option; use diff/edit/merge/launch "
+ "before choosing 'mark resolved'.\n\n")));
+ continue;
+ }
+
+ result->choice = opt->choice;
+ if (performed_edit)
+ result->save_merged = TRUE;
+ break;
+ }
+ }
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+/* Ask the user what to do about the property conflict described by DESC.
+ * Return the answer in RESULT. B is the conflict baton for this
+ * conflict resolution session.
+ * SCRATCH_POOL is used for temporary allocations. */
+static svn_error_t *
+handle_prop_conflict(svn_wc_conflict_result_t *result,
+ const svn_wc_conflict_description2_t *desc,
+ svn_cl__interactive_conflict_baton_t *b,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ apr_pool_t *iterpool;
+ const char *message;
+ const char *merged_file_path = NULL;
+ svn_boolean_t resolved_allowed = FALSE;
+
+ /* ### Work around a historical bug in the provider: the path to the
+ * conflict description file was put in the 'theirs' field, and
+ * 'theirs' was put in the 'merged' field. */
+ ((svn_wc_conflict_description2_t *)desc)->their_abspath = desc->merged_file;
+ ((svn_wc_conflict_description2_t *)desc)->merged_file = NULL;
+
+ SVN_ERR_ASSERT(desc->kind == svn_wc_conflict_kind_property);
+
+ SVN_ERR(svn_cmdline_fprintf(stderr, scratch_pool,
+ _("Conflict for property '%s' discovered"
+ " on '%s'.\n"),
+ desc->property_name,
+ svn_cl__local_style_skip_ancestor(
+ b->path_prefix, desc->local_abspath,
+ scratch_pool)));
+
+ SVN_ERR(svn_cl__get_human_readable_prop_conflict_description(&message, desc,
+ scratch_pool));
+ SVN_ERR(svn_cmdline_fprintf(stderr, scratch_pool, "%s\n", message));
+
+ iterpool = svn_pool_create(scratch_pool);
+ while (TRUE)
+ {
+ const resolver_option_t *opt;
+ const char *options[ARRAY_LEN(prop_conflict_options)];
+ const char **next_option = options;
+
+ *next_option++ = "p";
+ *next_option++ = "mf";
+ *next_option++ = "tf";
+ *next_option++ = "dc";
+ *next_option++ = "e";
+ if (resolved_allowed)
+ *next_option++ = "r";
+ *next_option++ = "q";
+ *next_option++ = "h";
+ *next_option++ = NULL;
+
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(prompt_user(&opt, prop_conflict_options, options, b->pb,
+ iterpool));
+ if (! opt)
+ continue;
+
+ if (strcmp(opt->code, "q") == 0)
+ {
+ result->choice = opt->choice;
+ b->accept_which = svn_cl__accept_postpone;
+ b->quit = TRUE;
+ break;
+ }
+ else if (strcmp(opt->code, "dc") == 0)
+ {
+ SVN_ERR(show_prop_conflict(desc, merged_file_path, scratch_pool));
+ }
+ else if (strcmp(opt->code, "e") == 0)
+ {
+ SVN_ERR(edit_prop_conflict(&merged_file_path, desc, b,
+ result_pool, scratch_pool));
+ resolved_allowed = (merged_file_path != NULL);
+ }
+ else if (strcmp(opt->code, "r") == 0)
+ {
+ if (! resolved_allowed)
+ {
+ SVN_ERR(svn_cmdline_fprintf(stderr, iterpool,
+ _("Invalid option; please edit the property "
+ "first.\n\n")));
+ continue;
+ }
+
+ result->merged_file = merged_file_path;
+ result->choice = svn_wc_conflict_choose_merged;
+ break;
+ }
+ else if (opt->choice != -1)
+ {
+ result->choice = opt->choice;
+ break;
+ }
+ }
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+/* Ask the user what to do about the tree conflict described by DESC.
+ * Return the answer in RESULT. B is the conflict baton for this
+ * conflict resolution session.
+ * SCRATCH_POOL is used for temporary allocations. */
+static svn_error_t *
+handle_tree_conflict(svn_wc_conflict_result_t *result,
+ const svn_wc_conflict_description2_t *desc,
+ svn_cl__interactive_conflict_baton_t *b,
+ apr_pool_t *scratch_pool)
+{
+ const char *readable_desc;
+ apr_pool_t *iterpool;
+
+ SVN_ERR(svn_cl__get_human_readable_tree_conflict_description(
+ &readable_desc, desc, scratch_pool));
+ SVN_ERR(svn_cmdline_fprintf(
+ stderr, scratch_pool,
+ _("Tree conflict on '%s'\n > %s\n"),
+ svn_cl__local_style_skip_ancestor(b->path_prefix,
+ desc->local_abspath,
+ scratch_pool),
+ readable_desc));
+
+ iterpool = svn_pool_create(scratch_pool);
+ while (1)
+ {
+ const resolver_option_t *opt;
+ const resolver_option_t *tc_opts;
+
+ svn_pool_clear(iterpool);
+
+ if (desc->operation == svn_wc_operation_update ||
+ desc->operation == svn_wc_operation_switch)
+ {
+ if (desc->reason == svn_wc_conflict_reason_moved_away)
+ {
+ if (desc->action == svn_wc_conflict_action_edit)
+ tc_opts = tree_conflict_options_update_edit_moved_away;
+ else
+ tc_opts = tree_conflict_options_update_moved_away;
+ }
+ else if (desc->reason == svn_wc_conflict_reason_deleted)
+ tc_opts = tree_conflict_options_update_deleted;
+ else if (desc->reason == svn_wc_conflict_reason_replaced)
+ tc_opts = tree_conflict_options_update_replaced;
+ else
+ tc_opts = tree_conflict_options;
+ }
+ else
+ tc_opts = tree_conflict_options;
+
+ SVN_ERR(prompt_user(&opt, tc_opts, NULL, b->pb, iterpool));
+ if (! opt)
+ continue;
+
+ if (strcmp(opt->code, "q") == 0)
+ {
+ result->choice = opt->choice;
+ b->accept_which = svn_cl__accept_postpone;
+ b->quit = TRUE;
+ break;
+ }
+ else if (opt->choice != -1)
+ {
+ result->choice = opt->choice;
+ break;
+ }
+ }
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+/* The body of svn_cl__conflict_func_interactive(). */
+static svn_error_t *
+conflict_func_interactive(svn_wc_conflict_result_t **result,
+ const svn_wc_conflict_description2_t *desc,
+ void *baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- svn_cl__conflict_baton_t *b = baton;
+ svn_cl__interactive_conflict_baton_t *b = baton;
svn_error_t *err;
- apr_pool_t *subpool;
/* Start out assuming we're going to postpone the conflict. */
*result = svn_wc_create_conflict_result(svn_wc_conflict_choose_postpone,
- NULL, pool);
+ NULL, result_pool);
switch (b->accept_which)
{
@@ -284,6 +1142,10 @@ svn_cl__conflict_handler(svn_wc_conflict_result_t **result,
(*result)->choice = svn_wc_conflict_choose_base;
return SVN_NO_ERROR;
case svn_cl__accept_working:
+ /* If the caller didn't merge the property values, then I guess
+ * 'choose working' means 'choose mine'... */
+ if (! desc->merged_file)
+ (*result)->merged_file = desc->my_abspath;
(*result)->choice = svn_wc_conflict_choose_merged;
return SVN_NO_ERROR;
case svn_cl__accept_mine_conflict:
@@ -307,11 +1169,12 @@ svn_cl__conflict_handler(svn_wc_conflict_result_t **result,
return SVN_NO_ERROR;
}
- err = svn_cl__edit_file_externally(desc->merged_file,
- b->editor_cmd, b->config, pool);
+ err = svn_cmdline__edit_file_externally(desc->merged_file,
+ b->editor_cmd, b->config,
+ scratch_pool);
if (err && (err->apr_err == SVN_ERR_CL_NO_EXTERNAL_EDITOR))
{
- SVN_ERR(svn_cmdline_fprintf(stderr, pool, "%s\n",
+ SVN_ERR(svn_cmdline_fprintf(stderr, scratch_pool, "%s\n",
err->message ? err->message :
_("No editor found;"
" leaving all conflicts.")));
@@ -320,7 +1183,7 @@ svn_cl__conflict_handler(svn_wc_conflict_result_t **result,
}
else if (err && (err->apr_err == SVN_ERR_EXTERNAL_PROGRAM))
{
- SVN_ERR(svn_cmdline_fprintf(stderr, pool, "%s\n",
+ SVN_ERR(svn_cmdline_fprintf(stderr, scratch_pool, "%s\n",
err->message ? err->message :
_("Error running editor;"
" leaving all conflicts.")));
@@ -335,8 +1198,8 @@ svn_cl__conflict_handler(svn_wc_conflict_result_t **result,
/* else, fall through to prompting. */
break;
case svn_cl__accept_launch:
- if (desc->base_file && desc->their_file
- && desc->my_file && desc->merged_file)
+ if (desc->base_abspath && desc->their_abspath
+ && desc->my_abspath && desc->merged_file)
{
svn_boolean_t remains_in_conflict;
@@ -346,17 +1209,17 @@ svn_cl__conflict_handler(svn_wc_conflict_result_t **result,
return SVN_NO_ERROR;
}
- err = svn_cl__merge_file_externally(desc->base_file,
- desc->their_file,
- desc->my_file,
+ err = svn_cl__merge_file_externally(desc->base_abspath,
+ desc->their_abspath,
+ desc->my_abspath,
desc->merged_file,
- desc->path,
+ desc->local_abspath,
b->config,
&remains_in_conflict,
- pool);
+ scratch_pool);
if (err && err->apr_err == SVN_ERR_CL_NO_EXTERNAL_MERGE_TOOL)
{
- SVN_ERR(svn_cmdline_fprintf(stderr, pool, "%s\n",
+ SVN_ERR(svn_cmdline_fprintf(stderr, scratch_pool, "%s\n",
err->message ? err->message :
_("No merge tool found;"
" leaving all conflicts.")));
@@ -365,7 +1228,7 @@ svn_cl__conflict_handler(svn_wc_conflict_result_t **result,
}
else if (err && err->apr_err == SVN_ERR_EXTERNAL_PROGRAM)
{
- SVN_ERR(svn_cmdline_fprintf(stderr, pool, "%s\n",
+ SVN_ERR(svn_cmdline_fprintf(stderr, scratch_pool, "%s\n",
err->message ? err->message :
_("Error running merge tool;"
" leaving all conflicts.")));
@@ -387,371 +1250,50 @@ svn_cl__conflict_handler(svn_wc_conflict_result_t **result,
/* We're in interactive mode and either the user gave no --accept
option or the option did not apply; let's prompt. */
- subpool = svn_pool_create(pool);
/* Handle the most common cases, which is either:
Conflicting edits on a file's text, or
Conflicting edits on a property.
*/
- if (((desc->node_kind == svn_node_file)
+ if (((desc->kind == svn_wc_conflict_kind_text)
&& (desc->action == svn_wc_conflict_action_edit)
- && (desc->reason == svn_wc_conflict_reason_edited))
- || (desc->kind == svn_wc_conflict_kind_property))
- {
- const char *answer;
- char *prompt;
- svn_boolean_t diff_allowed = FALSE;
- /* Have they done something that might have affected the merged
- file (so that we need to save a .edited copy)? */
- svn_boolean_t performed_edit = FALSE;
- /* Have they done *something* (edit, look at diff, etc) to
- give them a rational basis for choosing (r)esolved? */
- svn_boolean_t knows_something = FALSE;
-
- if (desc->kind == svn_wc_conflict_kind_text)
- SVN_ERR(svn_cmdline_fprintf(stderr, subpool,
- _("Conflict discovered in '%s'.\n"),
- desc->path));
- else if (desc->kind == svn_wc_conflict_kind_property)
- {
- SVN_ERR(svn_cmdline_fprintf(stderr, subpool,
- _("Conflict for property '%s' discovered"
- " on '%s'.\n"),
- desc->property_name, desc->path));
-
- if ((!desc->my_file && desc->their_file)
- || (desc->my_file && !desc->their_file))
- {
- /* One agent wants to change the property, one wants to
- delete it. This is not something we can diff, so we
- just tell the user. */
- svn_stringbuf_t *myval = NULL, *theirval = NULL;
-
- if (desc->my_file)
- {
- SVN_ERR(svn_stringbuf_from_file2(&myval, desc->my_file,
- subpool));
- SVN_ERR(svn_cmdline_fprintf(stderr, subpool,
- _("They want to delete the property, "
- "you want to change the value to '%s'.\n"),
- myval->data));
- }
- else
- {
- SVN_ERR(svn_stringbuf_from_file2(&theirval, desc->their_file,
- subpool));
- SVN_ERR(svn_cmdline_fprintf(stderr, subpool,
- _("They want to change the property value to '%s', "
- "you want to delete the property.\n"),
- theirval->data));
- }
- }
- }
- else
- /* We don't recognize any other sort of conflict yet */
- return SVN_NO_ERROR;
-
- /* Diffing can happen between base and merged, to show conflict
- markers to the user (this is the typical 3-way merge
- scenario), or if no base is available, we can show a diff
- between mine and theirs. */
- if ((desc->merged_file && desc->base_file)
- || (!desc->base_file && desc->my_file && desc->their_file))
- diff_allowed = TRUE;
-
- while (TRUE)
- {
- svn_pool_clear(subpool);
-
- prompt = apr_pstrdup(subpool, _("Select: (p) postpone"));
-
- if (diff_allowed)
- {
- prompt = apr_pstrcat(subpool, prompt,
- _(", (df) diff-full, (e) edit"),
- (char *)NULL);
-
- if (knows_something)
- prompt = apr_pstrcat(subpool, prompt, _(", (r) resolved"),
- (char *)NULL);
-
- if (! desc->is_binary &&
- desc->kind != svn_wc_conflict_kind_property)
- prompt = apr_pstrcat(subpool, prompt,
- _(",\n (mc) mine-conflict, "
- "(tc) theirs-conflict"),
- (char *)NULL);
- }
- else
- {
- if (knows_something)
- prompt = apr_pstrcat(subpool, prompt, _(", (r) resolved"),
- (char *)NULL);
- prompt = apr_pstrcat(subpool, prompt,
- _(",\n "
- "(mf) mine-full, (tf) theirs-full"),
- (char *)NULL);
- }
-
- prompt = apr_pstrcat(subpool, prompt, ",\n ", (char *)NULL);
- prompt = apr_pstrcat(subpool, prompt,
- _("(s) show all options: "),
- (char *)NULL);
+ && (desc->reason == svn_wc_conflict_reason_edited)))
+ SVN_ERR(handle_text_conflict(*result, desc, b, scratch_pool));
+ else if (desc->kind == svn_wc_conflict_kind_property)
+ SVN_ERR(handle_prop_conflict(*result, desc, b, result_pool, scratch_pool));
+ else if (desc->kind == svn_wc_conflict_kind_tree)
+ SVN_ERR(handle_tree_conflict(*result, desc, b, scratch_pool));
- SVN_ERR(svn_cmdline_prompt_user2(&answer, prompt, b->pb, subpool));
-
- if (strcmp(answer, "s") == 0)
- {
- /* These are used in svn_cl__accept_from_word(). */
- SVN_ERR(svn_cmdline_fprintf(stderr, subpool,
- _("\n"
- " (e) edit - change merged file in an editor\n"
- " (df) diff-full - show all changes made to merged "
- "file\n"
- " (r) resolved - accept merged version of file\n"
- "\n"
- " (dc) display-conflict - show all conflicts "
- "(ignoring merged version)\n"
- " (mc) mine-conflict - accept my version for all "
- "conflicts (same)\n"
- " (tc) theirs-conflict - accept their version for all "
- "conflicts (same)\n"
- "\n"
- " (mf) mine-full - accept my version of entire file "
- "(even non-conflicts)\n"
- " (tf) theirs-full - accept their version of entire "
- "file (same)\n"
- "\n"
- " (p) postpone - mark the conflict to be "
- "resolved later\n"
- " (l) launch - launch external tool to "
- "resolve conflict\n"
- " (s) show all - show this list\n\n")));
- }
- else if (strcmp(answer, "p") == 0 || strcmp(answer, ":-P") == 0)
- {
- /* Do nothing, let file be marked conflicted. */
- (*result)->choice = svn_wc_conflict_choose_postpone;
- break;
- }
- else if (strcmp(answer, "mc") == 0 || strcmp(answer, "X-)") == 0)
- {
- if (desc->is_binary)
- {
- SVN_ERR(svn_cmdline_fprintf(stderr, subpool,
- _("Invalid option; cannot choose "
- "based on conflicts in a "
- "binary file.\n\n")));
- continue;
- }
- else if (desc->kind == svn_wc_conflict_kind_property)
- {
- SVN_ERR(svn_cmdline_fprintf(stderr, subpool,
- _("Invalid option; cannot choose "
- "based on conflicts for "
- "properties.\n\n")));
- continue;
- }
-
- (*result)->choice = svn_wc_conflict_choose_mine_conflict;
- if (performed_edit)
- (*result)->save_merged = TRUE;
- break;
- }
- else if (strcmp(answer, "tc") == 0 || strcmp(answer, "X-(") == 0)
- {
- if (desc->is_binary)
- {
- SVN_ERR(svn_cmdline_fprintf(stderr, subpool,
- _("Invalid option; cannot choose "
- "based on conflicts in a "
- "binary file.\n\n")));
- continue;
- }
- else if (desc->kind == svn_wc_conflict_kind_property)
- {
- SVN_ERR(svn_cmdline_fprintf(stderr, subpool,
- _("Invalid option; cannot choose "
- "based on conflicts for "
- "properties.\n\n")));
- continue;
- }
- (*result)->choice = svn_wc_conflict_choose_theirs_conflict;
- if (performed_edit)
- (*result)->save_merged = TRUE;
- break;
- }
- else if (strcmp(answer, "mf") == 0 || strcmp(answer, ":-)") == 0)
- {
- (*result)->choice = svn_wc_conflict_choose_mine_full;
- if (performed_edit)
- (*result)->save_merged = TRUE;
- break;
- }
- else if (strcmp(answer, "tf") == 0 || strcmp(answer, ":-(") == 0)
- {
- (*result)->choice = svn_wc_conflict_choose_theirs_full;
- if (performed_edit)
- (*result)->save_merged = TRUE;
- break;
- }
- else if (strcmp(answer, "dc") == 0)
- {
- if (desc->is_binary)
- {
- SVN_ERR(svn_cmdline_fprintf(stderr, subpool,
- _("Invalid option; cannot "
- "display conflicts for a "
- "binary file.\n\n")));
- continue;
- }
- else if (desc->kind == svn_wc_conflict_kind_property)
- {
- SVN_ERR(svn_cmdline_fprintf(stderr, subpool,
- _("Invalid option; cannot "
- "display conflicts for "
- "properties.\n\n")));
- continue;
- }
- else if (! (desc->my_file && desc->base_file && desc->their_file))
- {
- SVN_ERR(svn_cmdline_fprintf(stderr, subpool,
- _("Invalid option; original "
- "files not available.\n\n")));
- continue;
- }
- SVN_ERR(show_conflicts(desc, subpool));
- knows_something = TRUE;
- }
- else if (strcmp(answer, "df") == 0)
- {
- if (! diff_allowed)
- {
- SVN_ERR(svn_cmdline_fprintf(stderr, subpool,
- _("Invalid option; there's no "
- "merged version to diff.\n\n")));
- continue;
- }
-
- SVN_ERR(show_diff(desc, subpool));
- knows_something = TRUE;
- }
- else if (strcmp(answer, "e") == 0 || strcmp(answer, ":-E") == 0)
- {
- SVN_ERR(open_editor(&performed_edit, desc, b, subpool));
- if (performed_edit)
- knows_something = TRUE;
- }
- else if (strcmp(answer, "l") == 0 || strcmp(answer, ":-l") == 0)
- {
- if (desc->kind == svn_wc_conflict_kind_property)
- {
- SVN_ERR(svn_cmdline_fprintf(stderr, subpool,
- _("Invalid option; cannot "
- "resolve property conflicts "
- "with an external merge tool."
- "\n\n")));
- continue;
- }
- if (desc->base_file && desc->their_file && desc->my_file
- && desc->merged_file)
- {
- SVN_ERR(launch_resolver(&performed_edit, desc, b, subpool));
- if (performed_edit)
- knows_something = TRUE;
- }
- else
- SVN_ERR(svn_cmdline_fprintf(stderr, subpool,
- _("Invalid option.\n\n")));
- }
- else if (strcmp(answer, "r") == 0)
- {
- /* We only allow the user accept the merged version of
- the file if they've edited it, or at least looked at
- the diff. */
- if (knows_something)
- {
- (*result)->choice = svn_wc_conflict_choose_merged;
- break;
- }
- else
- SVN_ERR(svn_cmdline_fprintf(stderr, subpool,
- _("Invalid option.\n\n")));
- }
- }
+ else /* other types of conflicts -- do nothing about them. */
+ {
+ (*result)->choice = svn_wc_conflict_choose_postpone;
}
- /*
- Dealing with obstruction of additions can be tricky. The
- obstructing item could be unversioned, versioned, or even
- schedule-add. Here's a matrix of how the caller should behave,
- based on results we return.
-
- Unversioned Versioned Schedule-Add
- choose_mine skip addition, skip addition skip addition
- add existing item
+ return SVN_NO_ERROR;
+}
- choose_theirs destroy file, schedule-delete, revert add,
- add new item. add new item. rm file,
- add new item
+svn_error_t *
+svn_cl__conflict_func_interactive(svn_wc_conflict_result_t **result,
+ const svn_wc_conflict_description2_t *desc,
+ void *baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_cl__interactive_conflict_baton_t *b = baton;
- postpone [ bail out ]
+ SVN_ERR(conflict_func_interactive(result, desc, baton,
+ result_pool, scratch_pool));
- */
- else if ((desc->action == svn_wc_conflict_action_add)
- && (desc->reason == svn_wc_conflict_reason_obstructed))
+ /* If we are resolving a conflict, adjust the summary of conflicts. */
+ if ((*result)->choice != svn_wc_conflict_choose_postpone)
{
- const char *answer;
- const char *prompt;
-
- SVN_ERR(svn_cmdline_fprintf(
- stderr, subpool,
- _("Conflict discovered when trying to add '%s'.\n"
- "An object of the same name already exists.\n"),
- desc->path));
- prompt = _("Select: (p) postpone, (mf) mine-full, "
- "(tf) theirs-full, (h) help:");
-
- while (1)
- {
- svn_pool_clear(subpool);
-
- SVN_ERR(svn_cmdline_prompt_user2(&answer, prompt, b->pb, subpool));
+ const char *local_path
+ = svn_cl__local_style_skip_ancestor(
+ b->path_prefix, desc->local_abspath, scratch_pool);
- if (strcmp(answer, "h") == 0 || strcmp(answer, "?") == 0)
- {
- SVN_ERR(svn_cmdline_fprintf(stderr, subpool,
- _(" (p) postpone - resolve the conflict later\n"
- " (mf) mine-full - accept pre-existing item "
- "(ignore upstream addition)\n"
- " (tf) theirs-full - accept incoming item "
- "(overwrite pre-existing item)\n"
- " (h) help - show this help\n\n")));
- }
- if (strcmp(answer, "p") == 0 || strcmp(answer, ":-P") == 0)
- {
- (*result)->choice = svn_wc_conflict_choose_postpone;
- break;
- }
- if (strcmp(answer, "mf") == 0 || strcmp(answer, ":-)") == 0)
- {
- (*result)->choice = svn_wc_conflict_choose_mine_full;
- break;
- }
- if (strcmp(answer, "tf") == 0 || strcmp(answer, ":-(") == 0)
- {
- (*result)->choice = svn_wc_conflict_choose_theirs_full;
- break;
- }
- }
+ svn_cl__conflict_stats_resolved(b->conflict_stats, local_path,
+ desc->kind);
}
-
- else /* other types of conflicts -- do nothing about them. */
- {
- (*result)->choice = svn_wc_conflict_choose_postpone;
- }
-
- svn_pool_destroy(subpool);
return SVN_NO_ERROR;
}
diff --git a/subversion/svn/copy-cmd.c b/subversion/svn/copy-cmd.c
index 99b8703..e6fbd4b 100644
--- a/subversion/svn/copy-cmd.c
+++ b/subversion/svn/copy-cmd.c
@@ -68,7 +68,42 @@ svn_cl__copy(apr_getopt_t *os,
svn_opt_revision_t *peg_revision = apr_palloc(pool,
sizeof(*peg_revision));
- SVN_ERR(svn_opt_parse_path(peg_revision, &src, target, pool));
+ err = svn_opt_parse_path(peg_revision, &src, target, pool);
+
+ if (err)
+ {
+ /* Issue #3606: 'svn cp .@HEAD target' gives
+ svn: '@HEAD' is just a peg revision. Maybe try '@HEAD@' instead?
+
+ This is caused by a first round of canonicalization in
+ svn_cl__args_to_target_array_print_reserved(). Undo that in an
+ attempt to fix this issue without revving many apis.
+ */
+ if (*target == '@' && err->apr_err == SVN_ERR_BAD_FILENAME)
+ {
+ svn_error_t *err2;
+
+ err2 = svn_opt_parse_path(peg_revision, &src,
+ apr_pstrcat(pool, ".", target,
+ (const char *)NULL), pool);
+
+ if (err2)
+ {
+ /* Fix attempt failed; return original error */
+ svn_error_clear(err2);
+ }
+ else
+ {
+ /* Error resolved. Use path */
+ svn_error_clear(err);
+ err = NULL;
+ }
+ }
+
+ if (err)
+ return svn_error_trace(err);
+ }
+
source->path = src;
source->revision = &(opt_state->start_revision);
source->peg_revision = peg_revision;
@@ -76,7 +111,18 @@ svn_cl__copy(apr_getopt_t *os,
APR_ARRAY_PUSH(sources, svn_client_copy_source_t *) = source;
}
- SVN_ERR(svn_cl__eat_peg_revisions(&targets, targets, pool));
+ /* Get DST_PATH (the target path or URL) and check that no peg revision is
+ * specified for it. */
+ {
+ const char *tgt = APR_ARRAY_IDX(targets, targets->nelts - 1, const char *);
+ svn_opt_revision_t peg;
+
+ SVN_ERR(svn_opt_parse_path(&peg, &dst_path, tgt, pool));
+ if (peg.kind != svn_opt_revision_unspecified)
+ return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("'%s': a peg revision is not allowed here"),
+ tgt);
+ }
/* Figure out which type of notification to use.
(There is no need to check that the src paths are homogeneous;
@@ -84,8 +130,6 @@ svn_cl__copy(apr_getopt_t *os,
error if they are not.) */
src_path = APR_ARRAY_IDX(targets, 0, const char *);
srcs_are_urls = svn_path_is_url(src_path);
- dst_path = APR_ARRAY_IDX(targets, targets->nelts - 1, const char *);
- apr_array_pop(targets);
dst_is_url = svn_path_is_url(dst_path);
if ((! srcs_are_urls) && (! dst_is_url))
diff --git a/subversion/svn/deprecated.c b/subversion/svn/deprecated.c
new file mode 100644
index 0000000..6115573
--- /dev/null
+++ b/subversion/svn/deprecated.c
@@ -0,0 +1,41 @@
+/*
+ * deprecated.c: Wrappers to call deprecated functions.
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#define SVN_DEPRECATED
+#include "cl.h"
+#include "svn_client.h"
+
+svn_error_t *
+svn_cl__deprecated_merge_reintegrate(const char *source_path_or_url,
+ const svn_opt_revision_t *src_peg_revision,
+ const char *target_wcpath,
+ svn_boolean_t dry_run,
+ const apr_array_header_t *merge_options,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ SVN_ERR(svn_client_merge_reintegrate(source_path_or_url, src_peg_revision,
+ target_wcpath, dry_run, merge_options,
+ ctx, pool));
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/svn/diff-cmd.c b/subversion/svn/diff-cmd.c
index 3c62523..2cbd202 100644
--- a/subversion/svn/diff-cmd.c
+++ b/subversion/svn/diff-cmd.c
@@ -77,6 +77,12 @@ kind_to_word(svn_client_diff_summarize_kind_t kind)
}
}
+/* Baton for summarize_xml and summarize_regular */
+struct summarize_baton_t
+{
+ const char *anchor;
+};
+
/* Print summary information about a given change as XML, implements the
* svn_client_diff_summarize_func_t interface. The @a baton is a 'char *'
* representing the either the path to the working copy root or the url
@@ -86,10 +92,11 @@ summarize_xml(const svn_client_diff_summarize_t *summary,
void *baton,
apr_pool_t *pool)
{
+ struct summarize_baton_t *b = baton;
/* Full path to the object being diffed. This is created by taking the
* baton, and appending the target's relative path. */
- const char *path = *(const char **)baton;
- svn_stringbuf_t *sb = svn_stringbuf_create("", pool);
+ const char *path = b->anchor;
+ svn_stringbuf_t *sb = svn_stringbuf_create_empty(pool);
/* Tack on the target path, so we can differentiate between different parts
* of the output when we're given multiple targets. */
@@ -125,7 +132,8 @@ summarize_regular(const svn_client_diff_summarize_t *summary,
void *baton,
apr_pool_t *pool)
{
- const char *path = *(const char **)baton;
+ struct summarize_baton_t *b = baton;
+ const char *path = b->anchor;
/* Tack on the target path, so we can differentiate between different parts
* of the output when we're given multiple targets. */
@@ -166,12 +174,17 @@ svn_cl__diff(apr_getopt_t *os,
svn_client_ctx_t *ctx = ((svn_cl__cmd_baton_t *) baton)->ctx;
apr_array_header_t *options;
apr_array_header_t *targets;
- apr_file_t *outfile, *errfile;
- apr_status_t status;
+ svn_stream_t *outstream;
+ svn_stream_t *errstream;
const char *old_target, *new_target;
apr_pool_t *iterpool;
svn_boolean_t pegged_diff = FALSE;
+ svn_boolean_t show_copies_as_adds =
+ opt_state->diff.patch_compatible || opt_state->diff.show_copies_as_adds;
+ svn_boolean_t ignore_properties =
+ opt_state->diff.patch_compatible || opt_state->diff.ignore_properties;
int i;
+ struct summarize_baton_t summarize_baton;
const svn_client_diff_summarize_func_t summarize_func =
(opt_state->xml ? summarize_xml : summarize_regular);
@@ -180,26 +193,24 @@ svn_cl__diff(apr_getopt_t *os,
else
options = NULL;
- /* Get an apr_file_t representing stdout and stderr, which is where
+ /* Get streams representing stdout and stderr, which is where
we'll have the external 'diff' program print to. */
- if ((status = apr_file_open_stdout(&outfile, pool)))
- return svn_error_wrap_apr(status, _("Can't open stdout"));
- if ((status = apr_file_open_stderr(&errfile, pool)))
- return svn_error_wrap_apr(status, _("Can't open stderr"));
+ SVN_ERR(svn_stream_for_stdout(&outstream, pool));
+ SVN_ERR(svn_stream_for_stderr(&errstream, pool));
if (opt_state->xml)
{
svn_stringbuf_t *sb;
/* Check that the --summarize is passed as well. */
- if (!opt_state->summarize)
+ if (!opt_state->diff.summarize)
return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("'--xml' option only valid with "
"'--summarize' option"));
SVN_ERR(svn_cl__xml_print_header("diff", pool));
- sb = svn_stringbuf_create("", pool);
+ sb = svn_stringbuf_create_empty(pool);
svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "paths", NULL);
SVN_ERR(svn_cl__error_checked_fputs(sb->data, stdout));
}
@@ -210,12 +221,13 @@ svn_cl__diff(apr_getopt_t *os,
if (! opt_state->old_target && ! opt_state->new_target
&& (targets->nelts == 2)
- && svn_path_is_url(APR_ARRAY_IDX(targets, 0, const char *))
- && svn_path_is_url(APR_ARRAY_IDX(targets, 1, const char *))
+ && (svn_path_is_url(APR_ARRAY_IDX(targets, 0, const char *))
+ || svn_path_is_url(APR_ARRAY_IDX(targets, 1, const char *)))
&& opt_state->start_revision.kind == svn_opt_revision_unspecified
&& opt_state->end_revision.kind == svn_opt_revision_unspecified)
{
- /* The 'svn diff OLD_URL[@OLDREV] NEW_URL[@NEWREV]' case matches. */
+ /* A 2-target diff where one or both targets are URLs. These are
+ * shorthands for some 'svn diff --old X --new Y' invocations. */
SVN_ERR(svn_opt_parse_path(&opt_state->start_revision, &old_target,
APR_ARRAY_IDX(targets, 0, const char *),
@@ -225,10 +237,16 @@ svn_cl__diff(apr_getopt_t *os,
pool));
targets->nelts = 0;
+ /* Set default start/end revisions based on target types, in the same
+ * manner as done for the corresponding '--old X --new Y' cases,
+ * (note that we have an explicit --new target) */
if (opt_state->start_revision.kind == svn_opt_revision_unspecified)
- opt_state->start_revision.kind = svn_opt_revision_head;
+ opt_state->start_revision.kind = svn_path_is_url(old_target)
+ ? svn_opt_revision_head : svn_opt_revision_working;
+
if (opt_state->end_revision.kind == svn_opt_revision_unspecified)
- opt_state->end_revision.kind = svn_opt_revision_head;
+ opt_state->end_revision.kind = svn_path_is_url(new_target)
+ ? svn_opt_revision_head : svn_opt_revision_working;
}
else if (opt_state->old_target)
{
@@ -241,9 +259,8 @@ svn_cl__diff(apr_getopt_t *os,
tmp = apr_array_make(pool, 2, sizeof(const char *));
APR_ARRAY_PUSH(tmp, const char *) = (opt_state->old_target);
APR_ARRAY_PUSH(tmp, const char *) = (opt_state->new_target
- ? opt_state->new_target
- : APR_ARRAY_IDX(tmp, 0,
- const char *));
+ ? opt_state->new_target
+ : opt_state->old_target);
SVN_ERR(svn_cl__args_to_target_array_print_reserved(&tmp2, os, tmp,
ctx, FALSE, pool));
@@ -264,10 +281,14 @@ svn_cl__diff(apr_getopt_t *os,
if (new_rev.kind != svn_opt_revision_unspecified)
opt_state->end_revision = new_rev;
+ /* For URLs, default to HEAD. For WC paths, default to WORKING if
+ * new target is explicit; if new target is implicitly the same as
+ * old target, then default the old to BASE and new to WORKING. */
if (opt_state->start_revision.kind == svn_opt_revision_unspecified)
opt_state->start_revision.kind = svn_path_is_url(old_target)
- ? svn_opt_revision_head : svn_opt_revision_base;
-
+ ? svn_opt_revision_head
+ : (opt_state->new_target
+ ? svn_opt_revision_working : svn_opt_revision_base);
if (opt_state->end_revision.kind == svn_opt_revision_unspecified)
opt_state->end_revision.kind = svn_path_is_url(new_target)
? svn_opt_revision_head : svn_opt_revision_working;
@@ -292,7 +313,10 @@ svn_cl__diff(apr_getopt_t *os,
old_target = "";
new_target = "";
- SVN_ERR(svn_cl__assert_homogeneous_target_type(targets));
+ SVN_ERR_W(svn_cl__assert_homogeneous_target_type(targets),
+ _("'svn diff [-r N[:M]] [TARGET[@REV]...]' does not support mixed "
+ "target types. Try using the --old and --new options or one of "
+ "the shorthand invocations listed in 'svn help diff'."));
working_copy_present = ! svn_path_is_url(APR_ARRAY_IDX(targets, 0,
const char *));
@@ -347,34 +371,41 @@ svn_cl__diff(apr_getopt_t *os,
else
target2 = svn_dirent_join(new_target, path, iterpool);
- if (opt_state->summarize)
- SVN_ERR(svn_client_diff_summarize2
- (target1,
- &opt_state->start_revision,
- target2,
- &opt_state->end_revision,
- opt_state->depth,
- ! opt_state->notice_ancestry,
- opt_state->changelists,
- summarize_func, &target1,
- ctx, iterpool));
+ if (opt_state->diff.summarize)
+ {
+ summarize_baton.anchor = target1;
+
+ SVN_ERR(svn_client_diff_summarize2(
+ target1,
+ &opt_state->start_revision,
+ target2,
+ &opt_state->end_revision,
+ opt_state->depth,
+ ! opt_state->diff.notice_ancestry,
+ opt_state->changelists,
+ summarize_func, &summarize_baton,
+ ctx, iterpool));
+ }
else
- SVN_ERR(svn_client_diff5
- (options,
+ SVN_ERR(svn_client_diff6(
+ options,
target1,
&(opt_state->start_revision),
target2,
&(opt_state->end_revision),
NULL,
opt_state->depth,
- ! opt_state->notice_ancestry,
- opt_state->no_diff_deleted,
- opt_state->show_copies_as_adds,
+ ! opt_state->diff.notice_ancestry,
+ opt_state->diff.no_diff_added,
+ opt_state->diff.no_diff_deleted,
+ show_copies_as_adds,
opt_state->force,
- opt_state->use_git_diff_format,
+ ignore_properties,
+ opt_state->diff.properties_only,
+ opt_state->diff.use_git_diff_format,
svn_cmdline_output_encoding(pool),
- outfile,
- errfile,
+ outstream,
+ errstream,
opt_state->changelists,
ctx, iterpool));
}
@@ -392,34 +423,40 @@ svn_cl__diff(apr_getopt_t *os,
peg_revision.kind = svn_path_is_url(path)
? svn_opt_revision_head : svn_opt_revision_working;
- if (opt_state->summarize)
- SVN_ERR(svn_client_diff_summarize_peg2
- (truepath,
- &peg_revision,
- &opt_state->start_revision,
- &opt_state->end_revision,
- opt_state->depth,
- ! opt_state->notice_ancestry,
- opt_state->changelists,
- summarize_func, &truepath,
- ctx, iterpool));
+ if (opt_state->diff.summarize)
+ {
+ summarize_baton.anchor = truepath;
+ SVN_ERR(svn_client_diff_summarize_peg2(
+ truepath,
+ &peg_revision,
+ &opt_state->start_revision,
+ &opt_state->end_revision,
+ opt_state->depth,
+ ! opt_state->diff.notice_ancestry,
+ opt_state->changelists,
+ summarize_func, &summarize_baton,
+ ctx, iterpool));
+ }
else
- SVN_ERR(svn_client_diff_peg5
- (options,
+ SVN_ERR(svn_client_diff_peg6(
+ options,
truepath,
&peg_revision,
&opt_state->start_revision,
&opt_state->end_revision,
NULL,
opt_state->depth,
- ! opt_state->notice_ancestry,
- opt_state->no_diff_deleted,
- opt_state->show_copies_as_adds,
+ ! opt_state->diff.notice_ancestry,
+ opt_state->diff.no_diff_added,
+ opt_state->diff.no_diff_deleted,
+ show_copies_as_adds,
opt_state->force,
- opt_state->use_git_diff_format,
+ ignore_properties,
+ opt_state->diff.properties_only,
+ opt_state->diff.use_git_diff_format,
svn_cmdline_output_encoding(pool),
- outfile,
- errfile,
+ outstream,
+ errstream,
opt_state->changelists,
ctx, iterpool));
}
@@ -427,7 +464,7 @@ svn_cl__diff(apr_getopt_t *os,
if (opt_state->xml)
{
- svn_stringbuf_t *sb = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *sb = svn_stringbuf_create_empty(pool);
svn_xml_make_close_tag(&sb, pool, "paths");
SVN_ERR(svn_cl__error_checked_fputs(sb->data, stdout));
SVN_ERR(svn_cl__xml_print_footer("diff", pool));
diff --git a/subversion/svn/export-cmd.c b/subversion/svn/export-cmd.c
index c4c4aa4..75b6723 100644
--- a/subversion/svn/export-cmd.c
+++ b/subversion/svn/export-cmd.c
@@ -114,9 +114,15 @@ svn_cl__export(apr_getopt_t *os,
"the directory or use --force to overwrite"));
if (nwb.had_externals_error)
- return svn_error_create(SVN_ERR_CL_ERROR_PROCESSING_EXTERNALS, NULL,
- _("Failure occurred processing one or more "
- "externals definitions"));
+ {
+ svn_error_t *externals_err;
+
+ externals_err = svn_error_create(SVN_ERR_CL_ERROR_PROCESSING_EXTERNALS,
+ NULL,
+ _("Failure occurred processing one or "
+ "more externals definitions"));
+ return svn_error_compose_create(externals_err, err);
+ }
return svn_error_trace(err);
}
diff --git a/subversion/svn/file-merge.c b/subversion/svn/file-merge.c
new file mode 100644
index 0000000..c64f577
--- /dev/null
+++ b/subversion/svn/file-merge.c
@@ -0,0 +1,979 @@
+/*
+ * file-merge.c: internal file merge tool
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+/* This is an interactive file merge tool with an interface similar to
+ * the interactive mode of the UNIX sdiff ("side-by-side diff") utility.
+ * The merge tool is driven by Subversion's diff code and user input. */
+
+#include "svn_cmdline.h"
+#include "svn_dirent_uri.h"
+#include "svn_error.h"
+#include "svn_pools.h"
+#include "svn_io.h"
+#include "svn_utf.h"
+#include "svn_xml.h"
+
+#include "cl.h"
+
+#include "svn_private_config.h"
+#include "private/svn_utf_private.h"
+#include "private/svn_cmdline_private.h"
+#include "private/svn_dep_compat.h"
+
+#if APR_HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+
+#if APR_HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <fcntl.h>
+#include <stdlib.h>
+
+/* Baton for functions in this file which implement svn_diff_output_fns_t. */
+struct file_merge_baton {
+ /* The files being merged. */
+ apr_file_t *original_file;
+ apr_file_t *modified_file;
+ apr_file_t *latest_file;
+
+ /* Counters to keep track of the current line in each file. */
+ svn_linenum_t current_line_original;
+ svn_linenum_t current_line_modified;
+ svn_linenum_t current_line_latest;
+
+ /* The merge result is written to this file. */
+ apr_file_t *merged_file;
+
+ /* Whether the merged file remains in conflict after the merge. */
+ svn_boolean_t remains_in_conflict;
+
+ /* External editor command for editing chunks. */
+ const char *editor_cmd;
+
+ /* The client configuration hash. */
+ apr_hash_t *config;
+
+ /* Wether the merge should be aborted. */
+ svn_boolean_t abort_merge;
+
+ /* Pool for temporary allocations. */
+ apr_pool_t *scratch_pool;
+} file_merge_baton;
+
+/* Copy LEN lines from SOURCE_FILE to the MERGED_FILE, starting at
+ * line START. The CURRENT_LINE is the current line in the source file.
+ * The new current line is returned in *NEW_CURRENT_LINE. */
+static svn_error_t *
+copy_to_merged_file(svn_linenum_t *new_current_line,
+ apr_file_t *merged_file,
+ apr_file_t *source_file,
+ apr_off_t start,
+ apr_off_t len,
+ svn_linenum_t current_line,
+ apr_pool_t *scratch_pool)
+{
+ apr_pool_t *iterpool;
+ svn_stringbuf_t *line;
+ apr_size_t lines_read;
+ apr_size_t lines_copied;
+ svn_boolean_t eof;
+ svn_linenum_t orig_current_line = current_line;
+
+ lines_read = 0;
+ iterpool = svn_pool_create(scratch_pool);
+ while (current_line < start)
+ {
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(svn_io_file_readline(source_file, &line, NULL, &eof,
+ APR_SIZE_MAX, iterpool, iterpool));
+ if (eof)
+ break;
+
+ current_line++;
+ lines_read++;
+ }
+
+ lines_copied = 0;
+ while (lines_copied < len)
+ {
+ apr_size_t bytes_written;
+ const char *eol_str;
+
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(svn_io_file_readline(source_file, &line, &eol_str, &eof,
+ APR_SIZE_MAX, iterpool, iterpool));
+ if (eol_str)
+ svn_stringbuf_appendcstr(line, eol_str);
+ SVN_ERR(svn_io_file_write_full(merged_file, line->data, line->len,
+ &bytes_written, iterpool));
+ if (bytes_written != line->len)
+ return svn_error_create(SVN_ERR_IO_WRITE_ERROR, NULL,
+ _("Could not write data to merged file"));
+ if (eof)
+ break;
+ lines_copied++;
+ }
+ svn_pool_destroy(iterpool);
+
+ *new_current_line = orig_current_line + lines_read + lines_copied;
+
+ return SVN_NO_ERROR;
+}
+
+/* Copy common data to the merged file. */
+static svn_error_t *
+file_merge_output_common(void *output_baton,
+ apr_off_t original_start,
+ apr_off_t original_length,
+ apr_off_t modified_start,
+ apr_off_t modified_length,
+ apr_off_t latest_start,
+ apr_off_t latest_length)
+{
+ struct file_merge_baton *b = output_baton;
+
+ if (b->abort_merge)
+ return SVN_NO_ERROR;
+
+ SVN_ERR(copy_to_merged_file(&b->current_line_original,
+ b->merged_file,
+ b->original_file,
+ original_start,
+ original_length,
+ b->current_line_original,
+ b->scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+/* Original/latest match up, but modified differs.
+ * Copy modified data to the merged file. */
+static svn_error_t *
+file_merge_output_diff_modified(void *output_baton,
+ apr_off_t original_start,
+ apr_off_t original_length,
+ apr_off_t modified_start,
+ apr_off_t modified_length,
+ apr_off_t latest_start,
+ apr_off_t latest_length)
+{
+ struct file_merge_baton *b = output_baton;
+
+ if (b->abort_merge)
+ return SVN_NO_ERROR;
+
+ SVN_ERR(copy_to_merged_file(&b->current_line_modified,
+ b->merged_file,
+ b->modified_file,
+ modified_start,
+ modified_length,
+ b->current_line_modified,
+ b->scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* Original/modified match up, but latest differs.
+ * Copy latest data to the merged file. */
+static svn_error_t *
+file_merge_output_diff_latest(void *output_baton,
+ apr_off_t original_start,
+ apr_off_t original_length,
+ apr_off_t modified_start,
+ apr_off_t modified_length,
+ apr_off_t latest_start,
+ apr_off_t latest_length)
+{
+ struct file_merge_baton *b = output_baton;
+
+ if (b->abort_merge)
+ return SVN_NO_ERROR;
+
+ SVN_ERR(copy_to_merged_file(&b->current_line_latest,
+ b->merged_file,
+ b->latest_file,
+ latest_start,
+ latest_length,
+ b->current_line_latest,
+ b->scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* Modified/latest match up, but original differs.
+ * Copy latest data to the merged file. */
+static svn_error_t *
+file_merge_output_diff_common(void *output_baton,
+ apr_off_t original_start,
+ apr_off_t original_length,
+ apr_off_t modified_start,
+ apr_off_t modified_length,
+ apr_off_t latest_start,
+ apr_off_t latest_length)
+{
+ struct file_merge_baton *b = output_baton;
+
+ if (b->abort_merge)
+ return SVN_NO_ERROR;
+
+ SVN_ERR(copy_to_merged_file(&b->current_line_latest,
+ b->merged_file,
+ b->latest_file,
+ latest_start,
+ latest_length,
+ b->current_line_latest,
+ b->scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+
+/* Return LEN lines within the diff chunk staring at line START
+ * in a *LINES array of svn_stringbuf_t* elements.
+ * Store the resulting current in in *NEW_CURRENT_LINE. */
+static svn_error_t *
+read_diff_chunk(apr_array_header_t **lines,
+ svn_linenum_t *new_current_line,
+ apr_file_t *file,
+ svn_linenum_t current_line,
+ apr_off_t start,
+ apr_off_t len,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_stringbuf_t *line;
+ const char *eol_str;
+ svn_boolean_t eof;
+ apr_pool_t *iterpool;
+
+ *lines = apr_array_make(result_pool, 0, sizeof(svn_stringbuf_t *));
+
+ /* Skip lines before start of range. */
+ iterpool = svn_pool_create(scratch_pool);
+ while (current_line < start)
+ {
+ svn_pool_clear(iterpool);
+ SVN_ERR(svn_io_file_readline(file, &line, NULL, &eof, APR_SIZE_MAX,
+ iterpool, iterpool));
+ if (eof)
+ return SVN_NO_ERROR;
+ current_line++;
+ }
+ svn_pool_destroy(iterpool);
+
+ /* Now read the lines. */
+ do
+ {
+ SVN_ERR(svn_io_file_readline(file, &line, &eol_str, &eof, APR_SIZE_MAX,
+ result_pool, scratch_pool));
+ if (eol_str)
+ svn_stringbuf_appendcstr(line, eol_str);
+ APR_ARRAY_PUSH(*lines, svn_stringbuf_t *) = line;
+ if (eof)
+ break;
+ current_line++;
+ }
+ while ((*lines)->nelts < len);
+
+ *new_current_line = current_line;
+
+ return SVN_NO_ERROR;
+}
+
+/* Return the terminal width in number of columns. */
+static int
+get_term_width(void)
+{
+ char *columns_env;
+#ifdef TIOCGWINSZ
+ int fd;
+
+ fd = open("/dev/tty", O_RDONLY, 0);
+ if (fd != -1)
+ {
+ struct winsize ws;
+ int error;
+
+ error = ioctl(fd, TIOCGWINSZ, &ws);
+ close(fd);
+ if (error != -1)
+ {
+ if (ws.ws_col < 80)
+ return 80;
+ return ws.ws_col;
+ }
+ }
+#elif defined WIN32
+ CONSOLE_SCREEN_BUFFER_INFO csbi;
+
+ if (GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi))
+ {
+ if (csbi.dwSize.X < 80)
+ return 80;
+ return csbi.dwSize.X;
+ }
+#endif
+
+ columns_env = getenv("COLUMNS");
+ if (columns_env)
+ {
+ svn_error_t *err;
+ int cols;
+
+ err = svn_cstring_atoi(&cols, columns_env);
+ if (err)
+ {
+ svn_error_clear(err);
+ return 80;
+ }
+
+ if (cols < 80)
+ return 80;
+ return cols;
+ }
+ else
+ return 80;
+}
+
+#define LINE_DISPLAY_WIDTH ((get_term_width() / 2) - 2)
+
+/* Prepare LINE for display, pruning or extending it to an appropriate
+ * display width, and stripping the EOL marker, if any.
+ * This function assumes that the data in LINE is encoded in UTF-8. */
+static const char *
+prepare_line_for_display(const char *line, apr_pool_t *pool)
+{
+ svn_stringbuf_t *buf = svn_stringbuf_create(line, pool);
+ size_t width;
+ size_t line_width = LINE_DISPLAY_WIDTH;
+ apr_pool_t *iterpool;
+
+ /* Trim EOL. */
+ if (buf->len >= 2 &&
+ buf->data[buf->len - 2] == '\r' &&
+ buf->data[buf->len - 1] == '\n')
+ svn_stringbuf_chop(buf, 2);
+ else if (buf->len >= 1 &&
+ (buf->data[buf->len - 1] == '\n' ||
+ buf->data[buf->len - 1] == '\r'))
+ svn_stringbuf_chop(buf, 1);
+
+ /* Determine the on-screen width of the line. */
+ width = svn_utf_cstring_utf8_width(buf->data);
+ if (width == -1)
+ {
+ /* Determining the width failed. Try to get rid of unprintable
+ * characters in the line buffer. */
+ buf = svn_stringbuf_create(svn_xml_fuzzy_escape(buf->data, pool), pool);
+ width = svn_utf_cstring_utf8_width(buf->data);
+ if (width == -1)
+ width = buf->len; /* fallback: buffer length */
+ }
+
+ /* Trim further in case line is still too long, or add padding in case
+ * it is too short. */
+ iterpool = svn_pool_create(pool);
+ while (width > line_width)
+ {
+ const char *last_valid;
+
+ svn_pool_clear(iterpool);
+
+ svn_stringbuf_chop(buf, 1);
+
+ /* Be careful not to invalidate the UTF-8 string by trimming
+ * just part of a character. */
+ last_valid = svn_utf__last_valid(buf->data, buf->len);
+ if (last_valid < buf->data + buf->len)
+ svn_stringbuf_chop(buf, (buf->data + buf->len) - last_valid);
+
+ width = svn_utf_cstring_utf8_width(buf->data);
+ if (width == -1)
+ width = buf->len; /* fallback: buffer length */
+ }
+ svn_pool_destroy(iterpool);
+
+ while (width == 0 || width < line_width)
+ {
+ svn_stringbuf_appendbyte(buf, ' ');
+ width++;
+ }
+
+ SVN_ERR_ASSERT_NO_RETURN(width == line_width);
+ return buf->data;
+}
+
+/* Merge CHUNK1 and CHUNK2 into a new chunk with conflict markers. */
+static apr_array_header_t *
+merge_chunks_with_conflict_markers(apr_array_header_t *chunk1,
+ apr_array_header_t *chunk2,
+ apr_pool_t *result_pool)
+{
+ apr_array_header_t *merged_chunk;
+ int i;
+
+ merged_chunk = apr_array_make(result_pool, 0, sizeof(svn_stringbuf_t *));
+ /* ### would be nice to show filenames next to conflict markers */
+ APR_ARRAY_PUSH(merged_chunk, svn_stringbuf_t *) =
+ svn_stringbuf_create("<<<<<<<\n", result_pool);
+ for (i = 0; i < chunk1->nelts; i++)
+ {
+ APR_ARRAY_PUSH(merged_chunk, svn_stringbuf_t *) =
+ APR_ARRAY_IDX(chunk1, i, svn_stringbuf_t*);
+ }
+ APR_ARRAY_PUSH(merged_chunk, svn_stringbuf_t *) =
+ svn_stringbuf_create("=======\n", result_pool);
+ for (i = 0; i < chunk2->nelts; i++)
+ {
+ APR_ARRAY_PUSH(merged_chunk, svn_stringbuf_t *) =
+ APR_ARRAY_IDX(chunk2, i, svn_stringbuf_t*);
+ }
+ APR_ARRAY_PUSH(merged_chunk, svn_stringbuf_t *) =
+ svn_stringbuf_create(">>>>>>>\n", result_pool);
+
+ return merged_chunk;
+}
+
+/* Edit CHUNK and return the result in *MERGED_CHUNK allocated in POOL. */
+static svn_error_t *
+edit_chunk(apr_array_header_t **merged_chunk,
+ apr_array_header_t *chunk,
+ const char *editor_cmd,
+ apr_hash_t *config,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ apr_file_t *temp_file;
+ const char *temp_file_name;
+ int i;
+ apr_off_t pos;
+ svn_boolean_t eof;
+ svn_error_t *err;
+ apr_pool_t *iterpool;
+
+ SVN_ERR(svn_io_open_unique_file3(&temp_file, &temp_file_name, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ scratch_pool, scratch_pool));
+ iterpool = svn_pool_create(scratch_pool);
+ for (i = 0; i < chunk->nelts; i++)
+ {
+ svn_stringbuf_t *line = APR_ARRAY_IDX(chunk, i, svn_stringbuf_t *);
+ apr_size_t bytes_written;
+
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(svn_io_file_write_full(temp_file, line->data, line->len,
+ &bytes_written, iterpool));
+ if (line->len != bytes_written)
+ return svn_error_create(SVN_ERR_IO_WRITE_ERROR, NULL,
+ _("Could not write data to temporary file"));
+ }
+ SVN_ERR(svn_io_file_flush_to_disk(temp_file, scratch_pool));
+
+ err = svn_cmdline__edit_file_externally(temp_file_name, editor_cmd,
+ config, scratch_pool);
+ if (err && (err->apr_err == SVN_ERR_CL_NO_EXTERNAL_EDITOR))
+ {
+ svn_error_t *root_err = svn_error_root_cause(err);
+
+ SVN_ERR(svn_cmdline_fprintf(stderr, scratch_pool, "%s\n",
+ root_err->message ? root_err->message :
+ _("No editor found.")));
+ svn_error_clear(err);
+ *merged_chunk = NULL;
+ svn_pool_destroy(iterpool);
+ return SVN_NO_ERROR;
+ }
+ else if (err && (err->apr_err == SVN_ERR_EXTERNAL_PROGRAM))
+ {
+ svn_error_t *root_err = svn_error_root_cause(err);
+
+ SVN_ERR(svn_cmdline_fprintf(stderr, scratch_pool, "%s\n",
+ root_err->message ? root_err->message :
+ _("Error running editor.")));
+ svn_error_clear(err);
+ *merged_chunk = NULL;
+ svn_pool_destroy(iterpool);
+ return SVN_NO_ERROR;
+ }
+ else if (err)
+ return svn_error_trace(err);
+
+ *merged_chunk = apr_array_make(result_pool, 1, sizeof(svn_stringbuf_t *));
+ pos = 0;
+ SVN_ERR(svn_io_file_seek(temp_file, APR_SET, &pos, scratch_pool));
+ do
+ {
+ svn_stringbuf_t *line;
+ const char *eol_str;
+
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(svn_io_file_readline(temp_file, &line, &eol_str, &eof,
+ APR_SIZE_MAX, result_pool, iterpool));
+ if (eol_str)
+ svn_stringbuf_appendcstr(line, eol_str);
+
+ APR_ARRAY_PUSH(*merged_chunk, svn_stringbuf_t *) = line;
+ }
+ while (!eof);
+ svn_pool_destroy(iterpool);
+
+ SVN_ERR(svn_io_file_close(temp_file, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* Create a separator string of the appropriate length. */
+static const char *
+get_sep_string(apr_pool_t *result_pool)
+{
+ int line_width = LINE_DISPLAY_WIDTH;
+ int i;
+ svn_stringbuf_t *buf;
+
+ buf = svn_stringbuf_create_empty(result_pool);
+ for (i = 0; i < line_width; i++)
+ svn_stringbuf_appendbyte(buf, '-');
+ svn_stringbuf_appendbyte(buf, '+');
+ for (i = 0; i < line_width; i++)
+ svn_stringbuf_appendbyte(buf, '-');
+ svn_stringbuf_appendbyte(buf, '\n');
+
+ return buf->data;
+}
+
+/* Merge chunks CHUNK1 and CHUNK2.
+ * Each lines array contains elements of type svn_stringbuf_t*.
+ * Return the result in *MERGED_CHUNK, or set *MERGED_CHUNK to NULL in
+ * case the user chooses to postpone resolution of this chunk.
+ * If the user wants to abort the merge, set *ABORT_MERGE to TRUE. */
+static svn_error_t *
+merge_chunks(apr_array_header_t **merged_chunk,
+ svn_boolean_t *abort_merge,
+ apr_array_header_t *chunk1,
+ apr_array_header_t *chunk2,
+ svn_linenum_t current_line1,
+ svn_linenum_t current_line2,
+ const char *editor_cmd,
+ apr_hash_t *config,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_stringbuf_t *prompt;
+ int i;
+ int max_chunk_lines;
+ apr_pool_t *iterpool;
+
+ max_chunk_lines = chunk1->nelts > chunk2->nelts ? chunk1->nelts
+ : chunk2->nelts;
+ *abort_merge = FALSE;
+
+ /*
+ * Prepare the selection prompt.
+ */
+
+ prompt = svn_stringbuf_create(
+ apr_psprintf(scratch_pool, "%s\n%s|%s\n%s",
+ _("Conflicting section found during merge:"),
+ prepare_line_for_display(
+ apr_psprintf(scratch_pool,
+ _("(1) their version (at line %lu)"),
+ current_line1),
+ scratch_pool),
+ prepare_line_for_display(
+ apr_psprintf(scratch_pool,
+ _("(2) your version (at line %lu)"),
+ current_line2),
+ scratch_pool),
+ get_sep_string(scratch_pool)),
+ scratch_pool);
+
+ iterpool = svn_pool_create(scratch_pool);
+ for (i = 0; i < max_chunk_lines; i++)
+ {
+ const char *line1;
+ const char *line2;
+ const char *prompt_line;
+
+ svn_pool_clear(iterpool);
+
+ if (i < chunk1->nelts)
+ {
+ svn_stringbuf_t *line_utf8;
+
+ SVN_ERR(svn_utf_stringbuf_to_utf8(&line_utf8,
+ APR_ARRAY_IDX(chunk1, i,
+ svn_stringbuf_t*),
+ iterpool));
+ line1 = prepare_line_for_display(line_utf8->data, iterpool);
+ }
+ else
+ line1 = prepare_line_for_display("", iterpool);
+
+ if (i < chunk2->nelts)
+ {
+ svn_stringbuf_t *line_utf8;
+
+ SVN_ERR(svn_utf_stringbuf_to_utf8(&line_utf8,
+ APR_ARRAY_IDX(chunk2, i,
+ svn_stringbuf_t*),
+ iterpool));
+ line2 = prepare_line_for_display(line_utf8->data, iterpool);
+ }
+ else
+ line2 = prepare_line_for_display("", iterpool);
+
+ prompt_line = apr_psprintf(iterpool, "%s|%s\n", line1, line2);
+
+ svn_stringbuf_appendcstr(prompt, prompt_line);
+ }
+
+ svn_stringbuf_appendcstr(prompt, get_sep_string(scratch_pool));
+ svn_stringbuf_appendcstr(
+ prompt,
+ _("Select: (1) use their version, (2) use your version,\n"
+ " (12) their version first, then yours,\n"
+ " (21) your version first, then theirs,\n"
+ " (e1) edit their version and use the result,\n"
+ " (e2) edit your version and use the result,\n"
+ " (eb) edit both versions and use the result,\n"
+ " (p) postpone this conflicting section leaving conflict markers,\n"
+ " (a) abort file merge and return to main menu: "));
+
+ /* Now let's see what the user wants to do with this conflict. */
+ while (TRUE)
+ {
+ const char *answer;
+
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(svn_cmdline_prompt_user2(&answer, prompt->data, NULL, iterpool));
+ if (strcmp(answer, "1") == 0)
+ {
+ *merged_chunk = chunk1;
+ break;
+ }
+ else if (strcmp(answer, "2") == 0)
+ {
+ *merged_chunk = chunk2;
+ break;
+ }
+ if (strcmp(answer, "12") == 0)
+ {
+ *merged_chunk = apr_array_make(result_pool,
+ chunk1->nelts + chunk2->nelts,
+ sizeof(svn_stringbuf_t *));
+ apr_array_cat(*merged_chunk, chunk1);
+ apr_array_cat(*merged_chunk, chunk2);
+ break;
+ }
+ if (strcmp(answer, "21") == 0)
+ {
+ *merged_chunk = apr_array_make(result_pool,
+ chunk1->nelts + chunk2->nelts,
+ sizeof(svn_stringbuf_t *));
+ apr_array_cat(*merged_chunk, chunk2);
+ apr_array_cat(*merged_chunk, chunk1);
+ break;
+ }
+ else if (strcmp(answer, "p") == 0)
+ {
+ *merged_chunk = NULL;
+ break;
+ }
+ else if (strcmp(answer, "e1") == 0)
+ {
+ SVN_ERR(edit_chunk(merged_chunk, chunk1, editor_cmd, config,
+ result_pool, iterpool));
+ if (*merged_chunk)
+ break;
+ }
+ else if (strcmp(answer, "e2") == 0)
+ {
+ SVN_ERR(edit_chunk(merged_chunk, chunk2, editor_cmd, config,
+ result_pool, iterpool));
+ if (*merged_chunk)
+ break;
+ }
+ else if (strcmp(answer, "eb") == 0)
+ {
+ apr_array_header_t *conflict_chunk;
+
+ conflict_chunk = merge_chunks_with_conflict_markers(chunk1, chunk2,
+ scratch_pool);
+ SVN_ERR(edit_chunk(merged_chunk, conflict_chunk, editor_cmd, config,
+ result_pool, iterpool));
+ if (*merged_chunk)
+ break;
+ }
+ else if (strcmp(answer, "a") == 0)
+ {
+ *abort_merge = TRUE;
+ break;
+ }
+ }
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+/* Perform a merge of chunks from FILE1 and FILE2, specified by START1/LEN1
+ * and START2/LEN2, respectively. Append the result to MERGED_FILE.
+ * The current line numbers for FILE1 and FILE2 are passed in *CURRENT_LINE1
+ * and *CURRENT_LINE2, and will be updated to new values upon return.
+ * If the user wants to abort the merge, set *ABORT_MERGE to TRUE. */
+static svn_error_t *
+merge_file_chunks(svn_boolean_t *remains_in_conflict,
+ svn_boolean_t *abort_merge,
+ apr_file_t *merged_file,
+ apr_file_t *file1,
+ apr_file_t *file2,
+ apr_off_t start1,
+ apr_off_t len1,
+ apr_off_t start2,
+ apr_off_t len2,
+ svn_linenum_t *current_line1,
+ svn_linenum_t *current_line2,
+ const char *editor_cmd,
+ apr_hash_t *config,
+ apr_pool_t *scratch_pool)
+{
+ apr_array_header_t *chunk1;
+ apr_array_header_t *chunk2;
+ apr_array_header_t *merged_chunk;
+ apr_pool_t *iterpool;
+ int i;
+
+ SVN_ERR(read_diff_chunk(&chunk1, current_line1, file1, *current_line1,
+ start1, len1, scratch_pool, scratch_pool));
+ SVN_ERR(read_diff_chunk(&chunk2, current_line2, file2, *current_line2,
+ start2, len2, scratch_pool, scratch_pool));
+
+ SVN_ERR(merge_chunks(&merged_chunk, abort_merge, chunk1, chunk2,
+ *current_line1, *current_line2,
+ editor_cmd, config,
+ scratch_pool, scratch_pool));
+
+ if (*abort_merge)
+ return SVN_NO_ERROR;
+
+ /* If the user chose 'postpone' put conflict markers and left/right
+ * versions into the merged file. */
+ if (merged_chunk == NULL)
+ {
+ *remains_in_conflict = TRUE;
+ merged_chunk = merge_chunks_with_conflict_markers(chunk1, chunk2,
+ scratch_pool);
+ }
+
+ iterpool = svn_pool_create(scratch_pool);
+ for (i = 0; i < merged_chunk->nelts; i++)
+ {
+ apr_size_t bytes_written;
+ svn_stringbuf_t *line = APR_ARRAY_IDX(merged_chunk, i,
+ svn_stringbuf_t *);
+
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(svn_io_file_write_full(merged_file, line->data, line->len,
+ &bytes_written, iterpool));
+ if (line->len != bytes_written)
+ return svn_error_create(SVN_ERR_IO_WRITE_ERROR, NULL,
+ _("Could not write data to merged file"));
+ }
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+/* Original, modified, and latest all differ from one another.
+ * This is a conflict and we'll need to ask the user to merge it. */
+static svn_error_t *
+file_merge_output_conflict(void *output_baton,
+ apr_off_t original_start,
+ apr_off_t original_length,
+ apr_off_t modified_start,
+ apr_off_t modified_length,
+ apr_off_t latest_start,
+ apr_off_t latest_length,
+ svn_diff_t *resolved_diff)
+{
+ struct file_merge_baton *b = output_baton;
+
+ if (b->abort_merge)
+ return SVN_NO_ERROR;
+
+ SVN_ERR(merge_file_chunks(&b->remains_in_conflict,
+ &b->abort_merge,
+ b->merged_file,
+ b->modified_file,
+ b->latest_file,
+ modified_start,
+ modified_length,
+ latest_start,
+ latest_length,
+ &b->current_line_modified,
+ &b->current_line_latest,
+ b->editor_cmd,
+ b->config,
+ b->scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+/* Our collection of diff output functions that get driven during the merge. */
+static svn_diff_output_fns_t file_merge_diff_output_fns = {
+ file_merge_output_common,
+ file_merge_output_diff_modified,
+ file_merge_output_diff_latest,
+ file_merge_output_diff_common,
+ file_merge_output_conflict
+};
+
+svn_error_t *
+svn_cl__merge_file(const char *base_path,
+ const char *their_path,
+ const char *my_path,
+ const char *merged_path,
+ const char *wc_path,
+ const char *path_prefix,
+ const char *editor_cmd,
+ apr_hash_t *config,
+ svn_boolean_t *remains_in_conflict,
+ apr_pool_t *scratch_pool)
+{
+ svn_diff_t *diff;
+ svn_diff_file_options_t *diff_options;
+ apr_file_t *original_file;
+ apr_file_t *modified_file;
+ apr_file_t *latest_file;
+ apr_file_t *merged_file;
+ const char *merged_file_name;
+ struct file_merge_baton fmb;
+ svn_boolean_t executable;
+ const char *merged_path_local_style;
+ const char *merged_rel_path;
+ const char *wc_path_local_style;
+ const char *wc_rel_path = svn_dirent_skip_ancestor(path_prefix, wc_path);
+
+ /* PATH_PREFIX may not be an ancestor of WC_PATH, just use the
+ full WC_PATH in that case. */
+ if (wc_rel_path)
+ wc_path_local_style = svn_dirent_local_style(wc_rel_path, scratch_pool);
+ else
+ wc_path_local_style = svn_dirent_local_style(wc_path, scratch_pool);
+
+ SVN_ERR(svn_cmdline_printf(scratch_pool, _("Merging '%s'.\n"),
+ wc_path_local_style));
+
+ SVN_ERR(svn_io_file_open(&original_file, base_path,
+ APR_READ | APR_BUFFERED,
+ APR_OS_DEFAULT, scratch_pool));
+ SVN_ERR(svn_io_file_open(&modified_file, their_path,
+ APR_READ | APR_BUFFERED,
+ APR_OS_DEFAULT, scratch_pool));
+ SVN_ERR(svn_io_file_open(&latest_file, my_path,
+ APR_READ | APR_BUFFERED,
+ APR_OS_DEFAULT, scratch_pool));
+ SVN_ERR(svn_io_open_unique_file3(&merged_file, &merged_file_name,
+ NULL, svn_io_file_del_none,
+ scratch_pool, scratch_pool));
+
+ diff_options = svn_diff_file_options_create(scratch_pool);
+ SVN_ERR(svn_diff_file_diff3_2(&diff, base_path, their_path, my_path,
+ diff_options, scratch_pool));
+
+ fmb.original_file = original_file;
+ fmb.modified_file = modified_file;
+ fmb.latest_file = latest_file;
+ fmb.current_line_original = 0;
+ fmb.current_line_modified = 0;
+ fmb.current_line_latest = 0;
+ fmb.merged_file = merged_file;
+ fmb.remains_in_conflict = FALSE;
+ fmb.editor_cmd = editor_cmd;
+ fmb.config = config;
+ fmb.abort_merge = FALSE;
+ fmb.scratch_pool = scratch_pool;
+
+ SVN_ERR(svn_diff_output(diff, &fmb, &file_merge_diff_output_fns));
+
+ SVN_ERR(svn_io_file_close(original_file, scratch_pool));
+ SVN_ERR(svn_io_file_close(modified_file, scratch_pool));
+ SVN_ERR(svn_io_file_close(latest_file, scratch_pool));
+ SVN_ERR(svn_io_file_close(merged_file, scratch_pool));
+
+ /* Start out assuming that conflicts remain. */
+ if (remains_in_conflict)
+ *remains_in_conflict = TRUE;
+
+ if (fmb.abort_merge)
+ {
+ SVN_ERR(svn_io_remove_file2(merged_file_name, TRUE, scratch_pool));
+ SVN_ERR(svn_cmdline_printf(scratch_pool, _("Merge of '%s' aborted.\n"),
+ wc_path_local_style));
+ return SVN_NO_ERROR;
+ }
+
+ SVN_ERR(svn_io_is_file_executable(&executable, merged_path, scratch_pool));
+
+ merged_rel_path = svn_dirent_skip_ancestor(path_prefix, merged_path);
+ if (merged_rel_path)
+ merged_path_local_style = svn_dirent_local_style(merged_rel_path,
+ scratch_pool);
+ else
+ merged_path_local_style = svn_dirent_local_style(merged_path,
+ scratch_pool);
+
+ SVN_ERR_W(svn_io_copy_file(merged_file_name, merged_path, FALSE,
+ scratch_pool),
+ apr_psprintf(scratch_pool,
+ _("Could not write merged result to '%s', saved "
+ "instead at '%s'.\n'%s' remains in conflict.\n"),
+ merged_path_local_style,
+ svn_dirent_local_style(merged_file_name,
+ scratch_pool),
+ wc_path_local_style));
+ SVN_ERR(svn_io_set_file_executable(merged_path, executable, FALSE,
+ scratch_pool));
+ SVN_ERR(svn_io_remove_file2(merged_file_name, TRUE, scratch_pool));
+
+ /* The merge was not aborted and we could install the merged result. The
+ * file remains in conflict unless all conflicting sections were resolved. */
+ if (remains_in_conflict)
+ *remains_in_conflict = fmb.remains_in_conflict;
+
+ if (fmb.remains_in_conflict)
+ SVN_ERR(svn_cmdline_printf(
+ scratch_pool,
+ _("Merge of '%s' completed (remains in conflict).\n"),
+ wc_path_local_style));
+ else
+ SVN_ERR(svn_cmdline_printf(
+ scratch_pool, _("Merge of '%s' completed.\n"),
+ wc_path_local_style));
+
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/svn/help-cmd.c b/subversion/svn/help-cmd.c
index cd0373a..93fecc3 100644
--- a/subversion/svn/help-cmd.c
+++ b/subversion/svn/help-cmd.c
@@ -27,7 +27,9 @@
/*** Includes. ***/
+#include "svn_hash.h"
#include "svn_string.h"
+#include "svn_config.h"
#include "svn_error.h"
#include "svn_version.h"
#include "cl.h"
@@ -43,7 +45,8 @@ svn_cl__help(apr_getopt_t *os,
void *baton,
apr_pool_t *pool)
{
- svn_cl__opt_state_t *opt_state;
+ svn_cl__opt_state_t *opt_state = NULL;
+ svn_stringbuf_t *version_footer = NULL;
/* xgettext: the %s is for SVN_VER_NUMBER. */
char help_header_template[] =
@@ -69,20 +72,77 @@ svn_cl__help(apr_getopt_t *os,
const char *ra_desc_start
= _("The following repository access (RA) modules are available:\n\n");
- svn_stringbuf_t *version_footer;
-
if (baton)
- opt_state = ((svn_cl__cmd_baton_t *) baton)->opt_state;
- else
- opt_state = NULL;
+ {
+ svn_cl__cmd_baton_t *const cmd_baton = baton;
+#ifndef SVN_DISABLE_PLAINTEXT_PASSWORD_STORAGE
+ /* Windows never actually stores plaintext passwords, it
+ encrypts the contents using CryptoAPI. ...
+
+ ... If CryptoAPI is available ... but it should be on all
+ versions of Windows that are even remotely interesting two
+ days before the scheduled end of the world, when this comment
+ is being written. */
+# ifndef WIN32
+ svn_boolean_t store_auth_creds =
+ SVN_CONFIG_DEFAULT_OPTION_STORE_AUTH_CREDS;
+ svn_boolean_t store_passwords =
+ SVN_CONFIG_DEFAULT_OPTION_STORE_PASSWORDS;
+ svn_boolean_t store_plaintext_passwords = FALSE;
+ svn_config_t *cfg;
+
+ if (cmd_baton->ctx->config)
+ {
+ cfg = svn_hash_gets(cmd_baton->ctx->config,
+ SVN_CONFIG_CATEGORY_CONFIG);
+ if (cfg)
+ {
+ SVN_ERR(svn_config_get_bool(cfg, &store_auth_creds,
+ SVN_CONFIG_SECTION_AUTH,
+ SVN_CONFIG_OPTION_STORE_AUTH_CREDS,
+ store_auth_creds));
+ SVN_ERR(svn_config_get_bool(cfg, &store_passwords,
+ SVN_CONFIG_SECTION_AUTH,
+ SVN_CONFIG_OPTION_STORE_PASSWORDS,
+ store_passwords));
+ }
+ cfg = svn_hash_gets(cmd_baton->ctx->config,
+ SVN_CONFIG_CATEGORY_SERVERS);
+ if (cfg)
+ {
+ const char *value;
+ SVN_ERR(svn_config_get_yes_no_ask
+ (cfg, &value,
+ SVN_CONFIG_SECTION_GLOBAL,
+ SVN_CONFIG_OPTION_STORE_PLAINTEXT_PASSWORDS,
+ SVN_CONFIG_DEFAULT_OPTION_STORE_PLAINTEXT_PASSWORDS));
+ if (0 == svn_cstring_casecmp(value, SVN_CONFIG_TRUE))
+ store_plaintext_passwords = TRUE;
+ }
+ }
+
+ if (store_plaintext_passwords && store_auth_creds && store_passwords)
+ {
+ version_footer = svn_stringbuf_create(
+ _("WARNING: Plaintext password storage is enabled!\n\n"),
+ pool);
+ svn_stringbuf_appendcstr(version_footer, ra_desc_start);
+ }
+# endif /* !WIN32 */
+#endif /* !SVN_DISABLE_PLAINTEXT_PASSWORD_STORAGE */
+
+ opt_state = cmd_baton->opt_state;
+ }
- version_footer = svn_stringbuf_create(ra_desc_start, pool);
+ if (!version_footer)
+ version_footer = svn_stringbuf_create(ra_desc_start, pool);
SVN_ERR(svn_ra_print_modules(version_footer, pool));
- return svn_opt_print_help3(os,
+ return svn_opt_print_help4(os,
"svn", /* ### erm, derive somehow? */
opt_state ? opt_state->version : FALSE,
opt_state ? opt_state->quiet : FALSE,
+ opt_state ? opt_state->verbose : FALSE,
version_footer->data,
help_header, /* already gettext()'d */
svn_cl__cmd_table,
diff --git a/subversion/svn/import-cmd.c b/subversion/svn/import-cmd.c
index f795092..6fe5af6 100644
--- a/subversion/svn/import-cmd.c
+++ b/subversion/svn/import-cmd.c
@@ -114,12 +114,14 @@ svn_cl__import(apr_getopt_t *os,
SVN_ERR(svn_cl__cleanup_log_msg
(ctx->log_msg_baton3,
- svn_client_import4(path,
+ svn_client_import5(path,
url,
opt_state->depth,
opt_state->no_ignore,
+ opt_state->no_autoprops,
opt_state->force,
opt_state->revprop_table,
+ NULL, NULL, /* filter callback / baton */
(opt_state->quiet
? NULL : svn_cl__print_commit_info),
NULL,
diff --git a/subversion/svn/info-cmd.c b/subversion/svn/info-cmd.c
index 14d0db6..56833f6 100644
--- a/subversion/svn/info-cmd.c
+++ b/subversion/svn/info-cmd.c
@@ -40,7 +40,7 @@
#include "cl.h"
#include "svn_private_config.h"
-#include "tree-conflicts.h"
+#include "cl-conflicts.h"
/*** Code. ***/
@@ -85,7 +85,7 @@ print_info_xml(void *baton,
const svn_client_info2_t *info,
apr_pool_t *pool)
{
- svn_stringbuf_t *sb = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *sb = svn_stringbuf_create_empty(pool);
const char *rev_str;
const char *path_prefix = baton;
@@ -102,8 +102,22 @@ print_info_xml(void *baton,
"revision", rev_str,
NULL);
+ /* "<url> xx </url>" */
svn_cl__xml_tagged_cdata(&sb, pool, "url", info->URL);
+ if (info->repos_root_URL && info->URL)
+ {
+ /* "<relative-url> xx </relative-url>" */
+ svn_cl__xml_tagged_cdata(&sb, pool, "relative-url",
+ apr_pstrcat(pool, "^/",
+ svn_path_uri_encode(
+ svn_uri_skip_ancestor(
+ info->repos_root_URL,
+ info->URL, pool),
+ pool),
+ NULL));
+ }
+
if (info->repos_root_URL || info->repos_UUID)
{
/* "<repository>" */
@@ -172,6 +186,35 @@ print_info_xml(void *baton,
svn_cl__xml_tagged_cdata(&sb, pool, "changelist",
info->wc_info->changelist);
+ if (info->wc_info->moved_from_abspath)
+ {
+ const char *relpath;
+
+ relpath = svn_dirent_skip_ancestor(info->wc_info->wcroot_abspath,
+ info->wc_info->moved_from_abspath);
+
+ /* <moved-from> xx </moved-from> */
+ if (relpath && relpath[0] != '\0')
+ svn_cl__xml_tagged_cdata(&sb, pool, "moved-from", relpath);
+ else
+ svn_cl__xml_tagged_cdata(&sb, pool, "moved-from",
+ info->wc_info->moved_from_abspath);
+ }
+
+ if (info->wc_info->moved_to_abspath)
+ {
+ const char *relpath;
+
+ relpath = svn_dirent_skip_ancestor(info->wc_info->wcroot_abspath,
+ info->wc_info->moved_to_abspath);
+ /* <moved-to> xx </moved-to> */
+ if (relpath && relpath[0] != '\0')
+ svn_cl__xml_tagged_cdata(&sb, pool, "moved-to", relpath);
+ else
+ svn_cl__xml_tagged_cdata(&sb, pool, "moved-to",
+ info->wc_info->moved_to_abspath);
+ }
+
/* "</wc-info>" */
svn_xml_make_close_tag(&sb, pool, "wc-info");
}
@@ -197,47 +240,7 @@ print_info_xml(void *baton,
APR_ARRAY_IDX(info->wc_info->conflicts, i,
const svn_wc_conflict_description2_t *);
- switch (conflict->kind)
- {
- case svn_wc_conflict_kind_text:
- /* "<conflict>" */
- svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "conflict",
- NULL);
-
- /* "<prev-base-file> xx </prev-base-file>" */
- svn_cl__xml_tagged_cdata(&sb, pool, "prev-base-file",
- conflict->base_abspath);
-
- /* "<prev-wc-file> xx </prev-wc-file>" */
- svn_cl__xml_tagged_cdata(&sb, pool, "prev-wc-file",
- conflict->my_abspath);
-
- /* "<cur-base-file> xx </cur-base-file>" */
- svn_cl__xml_tagged_cdata(&sb, pool, "cur-base-file",
- conflict->their_abspath);
-
- /* "</conflict>" */
- svn_xml_make_close_tag(&sb, pool, "conflict");
- break;
-
- case svn_wc_conflict_kind_property:
- /* "<conflict>" */
- svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "conflict",
- NULL);
-
- /* "<prop-file> xx </prop-file>" */
- svn_cl__xml_tagged_cdata(&sb, pool, "prop-file",
- conflict->their_abspath);
-
- /* "</conflict>" */
- svn_xml_make_close_tag(&sb, pool, "conflict");
- break;
-
- case svn_wc_conflict_kind_tree:
- SVN_ERR(svn_cl__append_tree_conflict_info_xml(sb, conflict,
- pool));
- break;
- }
+ SVN_ERR(svn_cl__append_conflict_info_xml(sb, conflict, pool));
}
}
@@ -279,6 +282,13 @@ print_info(void *baton,
if (info->URL)
SVN_ERR(svn_cmdline_printf(pool, _("URL: %s\n"), info->URL));
+ if (info->URL && info->repos_root_URL)
+ SVN_ERR(svn_cmdline_printf(pool, _("Relative URL: ^/%s\n"),
+ svn_path_uri_encode(
+ svn_uri_skip_ancestor(info->repos_root_URL,
+ info->URL, pool),
+ pool)));
+
if (info->repos_root_URL)
SVN_ERR(svn_cmdline_printf(pool, _("Repository Root: %s\n"),
info->repos_root_URL));
@@ -376,6 +386,31 @@ print_info(void *baton,
if (SVN_IS_VALID_REVNUM(info->wc_info->copyfrom_rev))
SVN_ERR(svn_cmdline_printf(pool, _("Copied From Rev: %ld\n"),
info->wc_info->copyfrom_rev));
+ if (info->wc_info->moved_from_abspath)
+ {
+ const char *relpath;
+
+ relpath = svn_dirent_skip_ancestor(info->wc_info->wcroot_abspath,
+ info->wc_info->moved_from_abspath);
+ if (relpath && relpath[0] != '\0')
+ SVN_ERR(svn_cmdline_printf(pool, _("Moved From: %s\n"), relpath));
+ else
+ SVN_ERR(svn_cmdline_printf(pool, _("Moved From: %s\n"),
+ info->wc_info->moved_from_abspath));
+ }
+
+ if (info->wc_info->moved_to_abspath)
+ {
+ const char *relpath;
+
+ relpath = svn_dirent_skip_ancestor(info->wc_info->wcroot_abspath,
+ info->wc_info->moved_to_abspath);
+ if (relpath && relpath[0] != '\0')
+ SVN_ERR(svn_cmdline_printf(pool, _("Moved To: %s\n"), relpath));
+ else
+ SVN_ERR(svn_cmdline_printf(pool, _("Moved To: %s\n"),
+ info->wc_info->moved_to_abspath));
+ }
}
if (info->last_changed_author)
@@ -403,16 +438,15 @@ print_info(void *baton,
if (info->wc_info->conflicts)
{
+ svn_boolean_t printed_prop_conflict_file = FALSE;
int i;
for (i = 0; i < info->wc_info->conflicts->nelts; i++)
{
- const svn_wc_conflict_description2_t *conflict =
- APR_ARRAY_IDX(info->wc_info->conflicts, i,
- const svn_wc_conflict_description2_t *);
- const char *desc;
- const char *src_left_version;
- const char *src_right_version;
+ const svn_wc_conflict_description2_t *conflict =
+ APR_ARRAY_IDX(info->wc_info->conflicts, i,
+ const svn_wc_conflict_description2_t *);
+ const char *desc;
switch (conflict->kind)
{
@@ -440,10 +474,12 @@ print_info(void *baton,
break;
case svn_wc_conflict_kind_property:
- SVN_ERR(svn_cmdline_printf(pool,
- _("Conflict Properties File: %s\n"),
- svn_dirent_local_style(conflict->their_abspath,
- pool)));
+ if (! printed_prop_conflict_file)
+ SVN_ERR(svn_cmdline_printf(pool,
+ _("Conflict Properties File: %s\n"),
+ svn_dirent_local_style(conflict->their_abspath,
+ pool)));
+ printed_prop_conflict_file = TRUE;
break;
case svn_wc_conflict_kind_tree:
@@ -451,33 +487,45 @@ print_info(void *baton,
svn_cl__get_human_readable_tree_conflict_description(
&desc, conflict, pool));
- src_left_version =
- svn_cl__node_description(conflict->src_left_version,
- info->repos_root_URL, pool);
-
- src_right_version =
- svn_cl__node_description(conflict->src_right_version,
- info->repos_root_URL, pool);
-
SVN_ERR(svn_cmdline_printf(pool, "%s: %s\n",
_("Tree conflict"), desc));
-
- if (src_left_version)
- SVN_ERR(svn_cmdline_printf(pool, " %s: %s\n",
- _("Source left"), /* (1) */
- src_left_version));
- /* (1): Sneaking in a space in "Source left" so that
- * it is the same length as "Source right" while it still
- * starts in the same column. That's just a tiny tweak in
- * the English `svn'. */
-
- if (src_right_version)
- SVN_ERR(svn_cmdline_printf(pool, " %s: %s\n",
- _("Source right"),
- src_right_version));
break;
}
}
+
+ /* We only store one left and right version for all conflicts, which is
+ referenced from all conflicts.
+ Print it after the conflicts to match the 1.6/1.7 output where it is
+ only available for tree conflicts */
+ {
+ const char *src_left_version;
+ const char *src_right_version;
+ const svn_wc_conflict_description2_t *conflict =
+ APR_ARRAY_IDX(info->wc_info->conflicts, 0,
+ const svn_wc_conflict_description2_t *);
+
+ src_left_version =
+ svn_cl__node_description(conflict->src_left_version,
+ info->repos_root_URL, pool);
+
+ src_right_version =
+ svn_cl__node_description(conflict->src_right_version,
+ info->repos_root_URL, pool);
+
+ if (src_left_version)
+ SVN_ERR(svn_cmdline_printf(pool, " %s: %s\n",
+ _("Source left"), /* (1) */
+ src_left_version));
+ /* (1): Sneaking in a space in "Source left" so that
+ * it is the same length as "Source right" while it still
+ * starts in the same column. That's just a tiny tweak in
+ * the English `svn'. */
+
+ if (src_right_version)
+ SVN_ERR(svn_cmdline_printf(pool, " %s: %s\n",
+ _("Source right"),
+ src_right_version));
+ }
}
}
diff --git a/subversion/svn/list-cmd.c b/subversion/svn/list-cmd.c
index 7bc5183..efe4279 100644
--- a/subversion/svn/list-cmd.c
+++ b/subversion/svn/list-cmd.c
@@ -42,9 +42,14 @@
struct print_baton {
svn_boolean_t verbose;
svn_client_ctx_t *ctx;
+
+ /* To keep track of last seen external information. */
+ const char *last_external_parent_url;
+ const char *last_external_target;
+ svn_boolean_t in_external;
};
-/* This implements the svn_client_list_func_t API, printing a single
+/* This implements the svn_client_list_func2_t API, printing a single
directory entry in text format. */
static svn_error_t *
print_dirent(void *baton,
@@ -52,10 +57,22 @@ print_dirent(void *baton,
const svn_dirent_t *dirent,
const svn_lock_t *lock,
const char *abs_path,
- apr_pool_t *pool)
+ const char *external_parent_url,
+ const char *external_target,
+ apr_pool_t *scratch_pool)
{
struct print_baton *pb = baton;
const char *entryname;
+ static const char *time_format_long = NULL;
+ static const char *time_format_short = NULL;
+
+ SVN_ERR_ASSERT((external_parent_url == NULL && external_target == NULL) ||
+ (external_parent_url && external_target));
+
+ if (time_format_long == NULL)
+ time_format_long = _("%b %d %H:%M");
+ if (time_format_short == NULL)
+ time_format_short = _("%b %d %Y");
if (pb->ctx->cancel_func)
SVN_ERR(pb->ctx->cancel_func(pb->ctx->cancel_baton));
@@ -63,7 +80,7 @@ print_dirent(void *baton,
if (strcmp(path, "") == 0)
{
if (dirent->kind == svn_node_file)
- entryname = svn_dirent_basename(abs_path, pool);
+ entryname = svn_dirent_basename(abs_path, scratch_pool);
else if (pb->verbose)
entryname = ".";
else
@@ -73,6 +90,24 @@ print_dirent(void *baton,
else
entryname = path;
+ if (external_parent_url && external_target)
+ {
+ if ((pb->last_external_parent_url == NULL
+ && pb->last_external_target == NULL)
+ || (strcmp(pb->last_external_parent_url, external_parent_url) != 0
+ || strcmp(pb->last_external_target, external_target) != 0))
+ {
+ SVN_ERR(svn_cmdline_printf(scratch_pool,
+ _("Listing external '%s'"
+ " defined on '%s':\n"),
+ external_target,
+ external_parent_url));
+
+ pb->last_external_parent_url = external_parent_url;
+ pb->last_external_target = external_target;
+ }
+ }
+
if (pb->verbose)
{
apr_time_t now = apr_time_now();
@@ -90,12 +125,12 @@ print_dirent(void *baton,
&& apr_time_sec(dirent->time - now) < (365 * 86400 / 2))
{
apr_err = apr_strftime(timestr, &size, sizeof(timestr),
- _("%b %d %H:%M"), &exp_time);
+ time_format_long, &exp_time);
}
else
{
apr_err = apr_strftime(timestr, &size, sizeof(timestr),
- _("%b %d %Y"), &exp_time);
+ time_format_short, &exp_time);
}
/* if that failed, just zero out the string and print nothing */
@@ -103,12 +138,13 @@ print_dirent(void *baton,
timestr[0] = '\0';
/* we need it in UTF-8. */
- SVN_ERR(svn_utf_cstring_to_utf8(&utf8_timestr, timestr, pool));
+ SVN_ERR(svn_utf_cstring_to_utf8(&utf8_timestr, timestr, scratch_pool));
- sizestr = apr_psprintf(pool, "%" SVN_FILESIZE_T_FMT, dirent->size);
+ sizestr = apr_psprintf(scratch_pool, "%" SVN_FILESIZE_T_FMT,
+ dirent->size);
return svn_cmdline_printf
- (pool, "%7ld %-8.8s %c %10s %12s %s%s\n",
+ (scratch_pool, "%7ld %-8.8s %c %10s %12s %s%s\n",
dirent->created_rev,
dirent->last_author ? dirent->last_author : " ? ",
lock ? 'O' : ' ',
@@ -119,14 +155,14 @@ print_dirent(void *baton,
}
else
{
- return svn_cmdline_printf(pool, "%s%s\n", entryname,
+ return svn_cmdline_printf(scratch_pool, "%s%s\n", entryname,
(dirent->kind == svn_node_dir)
? "/" : "");
}
}
-/* This implements the svn_client_list_func_t API, printing a single dirent
+/* This implements the svn_client_list_func2_t API, printing a single dirent
in XML format. */
static svn_error_t *
print_dirent_xml(void *baton,
@@ -134,18 +170,21 @@ print_dirent_xml(void *baton,
const svn_dirent_t *dirent,
const svn_lock_t *lock,
const char *abs_path,
- apr_pool_t *pool)
+ const char *external_parent_url,
+ const char *external_target,
+ apr_pool_t *scratch_pool)
{
struct print_baton *pb = baton;
const char *entryname;
- svn_stringbuf_t *sb;
+ svn_stringbuf_t *sb = svn_stringbuf_create_empty(scratch_pool);
+
+ SVN_ERR_ASSERT((external_parent_url == NULL && external_target == NULL) ||
+ (external_parent_url && external_target));
if (strcmp(path, "") == 0)
{
if (dirent->kind == svn_node_file)
- entryname = svn_dirent_basename(abs_path, pool);
- else if (pb->verbose)
- entryname = ".";
+ entryname = svn_dirent_basename(abs_path, scratch_pool);
else
/* Don't bother to list if no useful information will be shown. */
return SVN_NO_ERROR;
@@ -156,48 +195,72 @@ print_dirent_xml(void *baton,
if (pb->ctx->cancel_func)
SVN_ERR(pb->ctx->cancel_func(pb->ctx->cancel_baton));
- sb = svn_stringbuf_create("", pool);
+ if (external_parent_url && external_target)
+ {
+ if ((pb->last_external_parent_url == NULL
+ && pb->last_external_target == NULL)
+ || (strcmp(pb->last_external_parent_url, external_parent_url) != 0
+ || strcmp(pb->last_external_target, external_target) != 0))
+ {
+ if (pb->in_external)
+ {
+ /* The external item being listed is different from the previous
+ one, so close the tag. */
+ svn_xml_make_close_tag(&sb, scratch_pool, "external");
+ pb->in_external = FALSE;
+ }
+
+ svn_xml_make_open_tag(&sb, scratch_pool, svn_xml_normal, "external",
+ "parent_url", external_parent_url,
+ "target", external_target,
+ NULL);
- svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "entry",
+ pb->last_external_parent_url = external_parent_url;
+ pb->last_external_target = external_target;
+ pb->in_external = TRUE;
+ }
+ }
+
+ svn_xml_make_open_tag(&sb, scratch_pool, svn_xml_normal, "entry",
"kind", svn_cl__node_kind_str_xml(dirent->kind),
NULL);
- svn_cl__xml_tagged_cdata(&sb, pool, "name", entryname);
+ svn_cl__xml_tagged_cdata(&sb, scratch_pool, "name", entryname);
if (dirent->kind == svn_node_file)
{
svn_cl__xml_tagged_cdata
- (&sb, pool, "size",
- apr_psprintf(pool, "%" SVN_FILESIZE_T_FMT, dirent->size));
+ (&sb, scratch_pool, "size",
+ apr_psprintf(scratch_pool, "%" SVN_FILESIZE_T_FMT, dirent->size));
}
- svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "commit",
+ svn_xml_make_open_tag(&sb, scratch_pool, svn_xml_normal, "commit",
"revision",
- apr_psprintf(pool, "%ld", dirent->created_rev),
+ apr_psprintf(scratch_pool, "%ld", dirent->created_rev),
NULL);
- svn_cl__xml_tagged_cdata(&sb, pool, "author", dirent->last_author);
+ svn_cl__xml_tagged_cdata(&sb, scratch_pool, "author", dirent->last_author);
if (dirent->time)
- svn_cl__xml_tagged_cdata(&sb, pool, "date",
- svn_time_to_cstring(dirent->time, pool));
- svn_xml_make_close_tag(&sb, pool, "commit");
+ svn_cl__xml_tagged_cdata(&sb, scratch_pool, "date",
+ svn_time_to_cstring(dirent->time, scratch_pool));
+ svn_xml_make_close_tag(&sb, scratch_pool, "commit");
if (lock)
{
- svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "lock", NULL);
- svn_cl__xml_tagged_cdata(&sb, pool, "token", lock->token);
- svn_cl__xml_tagged_cdata(&sb, pool, "owner", lock->owner);
- svn_cl__xml_tagged_cdata(&sb, pool, "comment", lock->comment);
- svn_cl__xml_tagged_cdata(&sb, pool, "created",
+ svn_xml_make_open_tag(&sb, scratch_pool, svn_xml_normal, "lock", NULL);
+ svn_cl__xml_tagged_cdata(&sb, scratch_pool, "token", lock->token);
+ svn_cl__xml_tagged_cdata(&sb, scratch_pool, "owner", lock->owner);
+ svn_cl__xml_tagged_cdata(&sb, scratch_pool, "comment", lock->comment);
+ svn_cl__xml_tagged_cdata(&sb, scratch_pool, "created",
svn_time_to_cstring(lock->creation_date,
- pool));
+ scratch_pool));
if (lock->expiration_date != 0)
- svn_cl__xml_tagged_cdata(&sb, pool, "expires",
+ svn_cl__xml_tagged_cdata(&sb, scratch_pool, "expires",
svn_time_to_cstring
- (lock->expiration_date, pool));
- svn_xml_make_close_tag(&sb, pool, "lock");
+ (lock->expiration_date, scratch_pool));
+ svn_xml_make_close_tag(&sb, scratch_pool, "lock");
}
- svn_xml_make_close_tag(&sb, pool, "entry");
+ svn_xml_make_close_tag(&sb, scratch_pool, "entry");
return svn_cl__error_checked_fputs(sb->data, stdout);
}
@@ -218,6 +281,8 @@ svn_cl__list(apr_getopt_t *os,
struct print_baton pb;
svn_boolean_t seen_nonexistent_target = FALSE;
svn_error_t *err;
+ svn_error_t *externals_err = SVN_NO_ERROR;
+ struct svn_cl__check_externals_failed_notify_baton nwb;
SVN_ERR(svn_cl__args_to_target_array_print_reserved(&targets, os,
opt_state->targets,
@@ -259,6 +324,15 @@ svn_cl__list(apr_getopt_t *os,
if (opt_state->depth == svn_depth_unknown)
opt_state->depth = svn_depth_immediates;
+ if (opt_state->include_externals)
+ {
+ nwb.wrapped_func = ctx->notify_func2;
+ nwb.wrapped_baton = ctx->notify_baton2;
+ nwb.had_externals_error = FALSE;
+ ctx->notify_func2 = svn_cl__check_externals_failed_notify_wrapper;
+ ctx->notify_baton2 = &nwb;
+ }
+
/* For each target, try to list it. */
for (i = 0; i < targets->nelts; i++)
{
@@ -266,6 +340,12 @@ svn_cl__list(apr_getopt_t *os,
const char *truepath;
svn_opt_revision_t peg_revision;
+ /* Initialize the following variables for
+ every list target. */
+ pb.last_external_parent_url = NULL;
+ pb.last_external_target = NULL;
+ pb.in_external = FALSE;
+
svn_pool_clear(subpool);
SVN_ERR(svn_cl__check_cancel(ctx->cancel_baton));
@@ -276,18 +356,19 @@ svn_cl__list(apr_getopt_t *os,
if (opt_state->xml)
{
- svn_stringbuf_t *sb = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *sb = svn_stringbuf_create_empty(pool);
svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "list",
"path", truepath[0] == '\0' ? "." : truepath,
NULL);
SVN_ERR(svn_cl__error_checked_fputs(sb->data, stdout));
}
- err = svn_client_list2(truepath, &peg_revision,
+ err = svn_client_list3(truepath, &peg_revision,
&(opt_state->start_revision),
opt_state->depth,
dirent_fields,
(opt_state->xml || opt_state->verbose),
+ opt_state->include_externals,
opt_state->xml ? print_dirent_xml : print_dirent,
&pb, ctx, subpool);
@@ -308,7 +389,15 @@ svn_cl__list(apr_getopt_t *os,
if (opt_state->xml)
{
- svn_stringbuf_t *sb = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *sb = svn_stringbuf_create_empty(pool);
+
+ if (pb.in_external)
+ {
+ /* close the final external item's tag */
+ svn_xml_make_close_tag(&sb, pool, "external");
+ pb.in_external = FALSE;
+ }
+
svn_xml_make_close_tag(&sb, pool, "list");
SVN_ERR(svn_cl__error_checked_fputs(sb->data, stdout));
}
@@ -316,13 +405,20 @@ svn_cl__list(apr_getopt_t *os,
svn_pool_destroy(subpool);
+ if (opt_state->include_externals && nwb.had_externals_error)
+ {
+ externals_err = svn_error_create(SVN_ERR_CL_ERROR_PROCESSING_EXTERNALS,
+ NULL,
+ _("Failure occurred processing one or "
+ "more externals definitions"));
+ }
+
if (opt_state->xml && ! opt_state->incremental)
SVN_ERR(svn_cl__xml_print_footer("lists", pool));
if (seen_nonexistent_target)
- return svn_error_create(
- SVN_ERR_ILLEGAL_TARGET, NULL,
- _("Could not list all targets because some targets don't exist"));
- else
- return SVN_NO_ERROR;
+ err = svn_error_create(SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("Could not list all targets because some targets don't exist"));
+
+ return svn_error_compose_create(externals_err, err);
}
diff --git a/subversion/svn/log-cmd.c b/subversion/svn/log-cmd.c
index 4057b0a..af57cf4 100644
--- a/subversion/svn/log-cmd.c
+++ b/subversion/svn/log-cmd.c
@@ -21,9 +21,7 @@
* ====================================================================
*/
-#define APR_WANT_STRFUNC
-#define APR_WANT_STDIO
-#include <apr_want.h>
+#include <apr_fnmatch.h>
#include "svn_client.h"
#include "svn_compat.h"
@@ -38,6 +36,8 @@
#include "svn_props.h"
#include "svn_pools.h"
+#include "private/svn_cmdline_private.h"
+
#include "cl.h"
#include "svn_private_config.h"
@@ -70,6 +70,10 @@ struct log_receiver_baton
/* Stack which keeps track of merge revision nesting, using svn_revnum_t's */
apr_array_header_t *merge_stack;
+ /* Log message search patterns. Log entries will only be shown if the author,
+ * the log message, or a changed path matches one of these patterns. */
+ apr_array_header_t *search_patterns;
+
/* Pool for persistent allocations. */
apr_pool_t *pool;
};
@@ -80,6 +84,168 @@ struct log_receiver_baton
"------------------------------------------------------------------------\n"
+/* Display a diff of the subtree TARGET_PATH_OR_URL@TARGET_PEG_REVISION as
+ * it changed in the revision that LOG_ENTRY describes.
+ *
+ * Restrict the diff to depth DEPTH. Pass DIFF_EXTENSIONS along to the diff
+ * subroutine.
+ *
+ * Write the diff to OUTSTREAM and write any stderr output to ERRSTREAM.
+ * ### How is exit code handled? 0 and 1 -> SVN_NO_ERROR, else an svn error?
+ * ### Should we get rid of ERRSTREAM and use svn_error_t instead?
+ */
+static svn_error_t *
+display_diff(const svn_log_entry_t *log_entry,
+ const char *target_path_or_url,
+ const svn_opt_revision_t *target_peg_revision,
+ svn_depth_t depth,
+ const char *diff_extensions,
+ svn_stream_t *outstream,
+ svn_stream_t *errstream,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ apr_array_header_t *diff_options;
+ svn_opt_revision_t start_revision;
+ svn_opt_revision_t end_revision;
+
+ /* Fall back to "" to get options initialized either way. */
+ if (diff_extensions)
+ diff_options = svn_cstring_split(diff_extensions, " \t\n\r",
+ TRUE, pool);
+ else
+ diff_options = NULL;
+
+ start_revision.kind = svn_opt_revision_number;
+ start_revision.value.number = log_entry->revision - 1;
+ end_revision.kind = svn_opt_revision_number;
+ end_revision.value.number = log_entry->revision;
+
+ SVN_ERR(svn_stream_puts(outstream, "\n"));
+ SVN_ERR(svn_client_diff_peg6(diff_options,
+ target_path_or_url,
+ target_peg_revision,
+ &start_revision, &end_revision,
+ NULL,
+ depth,
+ FALSE /* ignore ancestry */,
+ FALSE /* no diff added */,
+ TRUE /* no diff deleted */,
+ FALSE /* show copies as adds */,
+ FALSE /* ignore content type */,
+ FALSE /* ignore prop diff */,
+ FALSE /* properties only */,
+ FALSE /* use git diff format */,
+ svn_cmdline_output_encoding(pool),
+ outstream,
+ errstream,
+ NULL,
+ ctx, pool));
+ SVN_ERR(svn_stream_puts(outstream, _("\n")));
+ return SVN_NO_ERROR;
+}
+
+
+/* Return TRUE if SEARCH_PATTERN matches the AUTHOR, DATE, LOG_MESSAGE,
+ * or a path in the set of keys of the CHANGED_PATHS hash. Else, return FALSE.
+ * Any of AUTHOR, DATE, LOG_MESSAGE, and CHANGED_PATHS may be NULL. */
+static svn_boolean_t
+match_search_pattern(const char *search_pattern,
+ const char *author,
+ const char *date,
+ const char *log_message,
+ apr_hash_t *changed_paths,
+ apr_pool_t *pool)
+{
+ /* Match any substring containing the pattern, like UNIX 'grep' does. */
+ const char *pattern = apr_psprintf(pool, "*%s*", search_pattern);
+ int flags = 0;
+
+ /* Does the author match the search pattern? */
+ if (author && apr_fnmatch(pattern, author, flags) == APR_SUCCESS)
+ return TRUE;
+
+ /* Does the date the search pattern? */
+ if (date && apr_fnmatch(pattern, date, flags) == APR_SUCCESS)
+ return TRUE;
+
+ /* Does the log message the search pattern? */
+ if (log_message && apr_fnmatch(pattern, log_message, flags) == APR_SUCCESS)
+ return TRUE;
+
+ if (changed_paths)
+ {
+ apr_hash_index_t *hi;
+
+ /* Does a changed path match the search pattern? */
+ for (hi = apr_hash_first(pool, changed_paths);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ const char *path = svn__apr_hash_index_key(hi);
+ svn_log_changed_path2_t *log_item;
+
+ if (apr_fnmatch(pattern, path, flags) == APR_SUCCESS)
+ return TRUE;
+
+ /* Match copy-from paths, too. */
+ log_item = svn__apr_hash_index_val(hi);
+ if (log_item->copyfrom_path
+ && SVN_IS_VALID_REVNUM(log_item->copyfrom_rev)
+ && apr_fnmatch(pattern,
+ log_item->copyfrom_path, flags) == APR_SUCCESS)
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+/* Match all search patterns in SEARCH_PATTERNS against AUTHOR, DATE, MESSAGE,
+ * and CHANGED_PATHS. Return TRUE if any pattern matches, else FALSE.
+ * SCRACH_POOL is used for temporary allocations. */
+static svn_boolean_t
+match_search_patterns(apr_array_header_t *search_patterns,
+ const char *author,
+ const char *date,
+ const char *message,
+ apr_hash_t *changed_paths,
+ apr_pool_t *scratch_pool)
+{
+ int i;
+ svn_boolean_t match = FALSE;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+
+ for (i = 0; i < search_patterns->nelts; i++)
+ {
+ apr_array_header_t *pattern_group;
+ int j;
+
+ pattern_group = APR_ARRAY_IDX(search_patterns, i, apr_array_header_t *);
+
+ /* All patterns within the group must match. */
+ for (j = 0; j < pattern_group->nelts; j++)
+ {
+ const char *pattern;
+
+ svn_pool_clear(iterpool);
+
+ pattern = APR_ARRAY_IDX(pattern_group, j, const char *);
+ match = match_search_pattern(pattern, author, date, message,
+ changed_paths, iterpool);
+ if (!match)
+ break;
+ }
+
+ match = (match && j == pattern_group->nelts);
+ if (match)
+ break;
+ }
+ svn_pool_destroy(iterpool);
+
+ return match;
+}
+
/* Implement `svn_log_entry_receiver_t', printing the logs in
* a human-readable and machine-parseable format.
*
@@ -196,6 +362,16 @@ log_entry_receiver(void *baton,
if (! lb->omit_log_message && message == NULL)
message = "";
+ if (lb->search_patterns &&
+ ! match_search_patterns(lb->search_patterns, author, date, message,
+ log_entry->changed_paths2, pool))
+ {
+ if (log_entry->has_children)
+ APR_ARRAY_PUSH(lb->merge_stack, svn_revnum_t) = log_entry->revision;
+
+ return SVN_NO_ERROR;
+ }
+
SVN_ERR(svn_cmdline_printf(pool,
SEP_STRING "r%ld | %s | %s",
log_entry->revision, author, date));
@@ -228,8 +404,7 @@ log_entry_receiver(void *baton,
svn_sort__item_t *item = &(APR_ARRAY_IDX(sorted_paths, i,
svn_sort__item_t));
const char *path = item->key;
- svn_log_changed_path2_t *log_item
- = apr_hash_get(log_entry->changed_paths2, item->key, item->klen);
+ svn_log_changed_path2_t *log_item = item->value;
const char *copy_data = "";
if (lb->ctx->cancel_func)
@@ -275,56 +450,27 @@ log_entry_receiver(void *baton,
SVN_ERR(svn_cmdline_printf(pool, "\n%s\n", message));
}
+ SVN_ERR(svn_cmdline_fflush(stdout));
+ SVN_ERR(svn_cmdline_fflush(stderr));
+
/* Print a diff if requested. */
if (lb->show_diff)
{
- apr_file_t *outfile;
- apr_file_t *errfile;
- apr_array_header_t *diff_options;
- apr_status_t status;
- svn_opt_revision_t start_revision;
- svn_opt_revision_t end_revision;
-
- if ((status = apr_file_open_stdout(&outfile, pool)))
- return svn_error_wrap_apr(status, _("Can't open stdout"));
- if ((status = apr_file_open_stderr(&errfile, pool)))
- return svn_error_wrap_apr(status, _("Can't open stderr"));
-
- /* Fall back to "" to get options initialized either way. */
- if (lb->diff_extensions)
- diff_options = svn_cstring_split(lb->diff_extensions, " \t\n\r",
- TRUE, pool);
- else
- diff_options = NULL;
-
- start_revision.kind = svn_opt_revision_number;
- start_revision.value.number = log_entry->revision - 1;
- end_revision.kind = svn_opt_revision_number;
- end_revision.value.number = log_entry->revision;
-
- SVN_ERR(svn_cmdline_printf(pool, _("\n")));
- SVN_ERR(svn_cmdline_fflush(stdout));
- SVN_ERR(svn_client_diff_peg5(diff_options,
- lb->target_path_or_url,
- &lb->target_peg_revision,
- &start_revision, &end_revision,
- NULL,
- lb->depth,
- FALSE, /* ignore ancestry */
- TRUE, /* no diff deleted */
- FALSE, /* show copies as adds */
- FALSE, /* ignore content type */
- FALSE, /* use git diff format */
- svn_cmdline_output_encoding(pool),
- outfile,
- errfile,
- NULL,
- lb->ctx, pool));
- SVN_ERR(svn_cmdline_printf(pool, _("\n")));
- }
+ svn_stream_t *outstream;
+ svn_stream_t *errstream;
- SVN_ERR(svn_cmdline_fflush(stdout));
- SVN_ERR(svn_cmdline_fflush(stderr));
+ SVN_ERR(svn_stream_for_stdout(&outstream, pool));
+ SVN_ERR(svn_stream_for_stderr(&errstream, pool));
+
+ SVN_ERR(display_diff(log_entry,
+ lb->target_path_or_url, &lb->target_peg_revision,
+ lb->depth, lb->diff_extensions,
+ outstream, errstream,
+ lb->ctx, pool));
+
+ SVN_ERR(svn_stream_close(outstream));
+ SVN_ERR(svn_stream_close(errstream));
+ }
if (log_entry->has_children)
APR_ARRAY_PUSH(lb->merge_stack, svn_revnum_t) = log_entry->revision;
@@ -376,7 +522,7 @@ log_entry_receiver_xml(void *baton,
{
struct log_receiver_baton *lb = baton;
/* Collate whole log message into sb before printing. */
- svn_stringbuf_t *sb = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *sb = svn_stringbuf_create_empty(pool);
char *revstr;
const char *author;
const char *date;
@@ -387,13 +533,6 @@ log_entry_receiver_xml(void *baton,
svn_compat_log_revprops_out(&author, &date, &message, log_entry->revprops);
- if (author)
- author = svn_xml_fuzzy_escape(author, pool);
- if (date)
- date = svn_xml_fuzzy_escape(date, pool);
- if (message)
- message = svn_xml_fuzzy_escape(message, pool);
-
if (log_entry->revision == 0 && message == NULL)
return SVN_NO_ERROR;
@@ -406,6 +545,24 @@ log_entry_receiver_xml(void *baton,
return SVN_NO_ERROR;
}
+ /* Match search pattern before XML-escaping. */
+ if (lb->search_patterns &&
+ ! match_search_patterns(lb->search_patterns, author, date, message,
+ log_entry->changed_paths2, pool))
+ {
+ if (log_entry->has_children)
+ APR_ARRAY_PUSH(lb->merge_stack, svn_revnum_t) = log_entry->revision;
+
+ return SVN_NO_ERROR;
+ }
+
+ if (author)
+ author = svn_xml_fuzzy_escape(author, pool);
+ if (date)
+ date = svn_xml_fuzzy_escape(date, pool);
+ if (message)
+ message = svn_xml_fuzzy_escape(message, pool);
+
revstr = apr_psprintf(pool, "%ld", log_entry->revision);
/* <logentry revision="xxx"> */
svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "logentry",
@@ -425,18 +582,23 @@ log_entry_receiver_xml(void *baton,
if (log_entry->changed_paths2)
{
- apr_hash_index_t *hi;
+ apr_array_header_t *sorted_paths;
+ int i;
/* <paths> */
svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "paths",
NULL);
- for (hi = apr_hash_first(pool, log_entry->changed_paths2);
- hi != NULL;
- hi = apr_hash_next(hi))
+ /* Get an array of sorted hash keys. */
+ sorted_paths = svn_sort__hash(log_entry->changed_paths2,
+ svn_sort_compare_items_as_paths, pool);
+
+ for (i = 0; i < sorted_paths->nelts; i++)
{
- const char *path = svn__apr_hash_index_key(hi);
- svn_log_changed_path2_t *log_item = svn__apr_hash_index_val(hi);
+ svn_sort__item_t *item = &(APR_ARRAY_IDX(sorted_paths, i,
+ svn_sort__item_t));
+ const char *path = item->key;
+ svn_log_changed_path2_t *log_item = item->value;
char action[2];
action[0] = log_item->action;
@@ -464,7 +626,13 @@ log_entry_receiver_xml(void *baton,
/* <path action="X"> */
svn_xml_make_open_tag(&sb, pool, svn_xml_protect_pcdata, "path",
"action", action,
- "kind", svn_cl__node_kind_str_xml(log_item->node_kind), NULL);
+ "kind", svn_cl__node_kind_str_xml(
+ log_item->node_kind),
+ "text-mods", svn_tristate__to_word(
+ log_item->text_modified),
+ "prop-mods", svn_tristate__to_word(
+ log_item->props_modified),
+ NULL);
}
/* xxx</path> */
svn_xml_escape_cdata_cstring(&sb, path, pool);
@@ -485,9 +653,9 @@ log_entry_receiver_xml(void *baton,
if (log_entry->revprops && apr_hash_count(log_entry->revprops) > 0)
{
svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "revprops", NULL);
- SVN_ERR(svn_cl__print_xml_prop_hash(&sb, log_entry->revprops,
- FALSE, /* name_only */
- pool));
+ SVN_ERR(svn_cmdline__print_xml_prop_hash(&sb, log_entry->revprops,
+ FALSE, /* name_only */
+ FALSE, pool));
svn_xml_make_close_tag(&sb, pool, "revprops");
}
@@ -541,11 +709,11 @@ svn_cl__log(apr_getopt_t *os,
return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("'quiet' and 'diff' options are "
"mutually exclusive"));
- if (opt_state->diff_cmd && (! opt_state->show_diff))
+ if (opt_state->diff.diff_cmd && (! opt_state->show_diff))
return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("'diff-cmd' option requires 'diff' "
"option"));
- if (opt_state->internal_diff && (! opt_state->show_diff))
+ if (opt_state->diff.internal_diff && (! opt_state->show_diff))
return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("'internal-diff' option requires "
"'diff' option"));
@@ -618,6 +786,7 @@ svn_cl__log(apr_getopt_t *os,
: opt_state->depth;
lb.diff_extensions = opt_state->extensions;
lb.merge_stack = apr_array_make(pool, 0, sizeof(svn_revnum_t));
+ lb.search_patterns = opt_state->search_patterns;
lb.pool = pool;
if (opt_state->xml)
diff --git a/subversion/svn/merge-cmd.c b/subversion/svn/merge-cmd.c
index 57aad9f..17507a2 100644
--- a/subversion/svn/merge-cmd.c
+++ b/subversion/svn/merge-cmd.c
@@ -33,12 +33,121 @@
#include "svn_error.h"
#include "svn_types.h"
#include "cl.h"
+#include "private/svn_client_private.h"
#include "svn_private_config.h"
+/* A handy constant */
+static const svn_opt_revision_t unspecified_revision
+ = { svn_opt_revision_unspecified, { 0 } };
+
/*** Code. ***/
+/* Throw an error if PATH_OR_URL is a path and REVISION isn't a repository
+ * revision. */
+static svn_error_t *
+ensure_wc_path_has_repo_revision(const char *path_or_url,
+ const svn_opt_revision_t *revision,
+ apr_pool_t *scratch_pool)
+{
+ if (revision->kind != svn_opt_revision_number
+ && revision->kind != svn_opt_revision_date
+ && revision->kind != svn_opt_revision_head
+ && ! svn_path_is_url(path_or_url))
+ return svn_error_createf(
+ SVN_ERR_CLIENT_BAD_REVISION, NULL,
+ _("Invalid merge source '%s'; a working copy path can only be "
+ "used with a repository revision (a number, a date, or head)"),
+ svn_dirent_local_style(path_or_url, scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+/* Run a merge.
+ *
+ * (No docs yet, as this code was just hoisted out of svn_cl__merge().)
+ *
+ * Having FIRST_RANGE_START/_END params is ugly -- we should be able to use
+ * PEG_REVISION1/2 and/or RANGES_TO_MERGE instead, maybe adjusting the caller.
+ */
+static svn_error_t *
+run_merge(svn_boolean_t two_sources_specified,
+ const char *sourcepath1,
+ svn_opt_revision_t peg_revision1,
+ const char *sourcepath2,
+ const char *targetpath,
+ apr_array_header_t *ranges_to_merge,
+ svn_opt_revision_t first_range_start,
+ svn_opt_revision_t first_range_end,
+ svn_cl__opt_state_t *opt_state,
+ apr_array_header_t *options,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
+{
+ svn_error_t *merge_err;
+
+ if (opt_state->reintegrate)
+ {
+ merge_err = svn_cl__deprecated_merge_reintegrate(
+ sourcepath1, &peg_revision1, targetpath,
+ opt_state->dry_run, options, ctx, scratch_pool);
+ }
+ else if (! two_sources_specified)
+ {
+ /* If we don't have at least one valid revision range, pick a
+ good one that spans the entire set of revisions on our
+ source. */
+ if ((first_range_start.kind == svn_opt_revision_unspecified)
+ && (first_range_end.kind == svn_opt_revision_unspecified))
+ {
+ ranges_to_merge = NULL;
+ }
+
+ if (opt_state->verbose)
+ SVN_ERR(svn_cmdline_printf(scratch_pool, _("--- Merging\n")));
+ merge_err = svn_client_merge_peg5(sourcepath1,
+ ranges_to_merge,
+ &peg_revision1,
+ targetpath,
+ opt_state->depth,
+ opt_state->ignore_ancestry,
+ opt_state->ignore_ancestry,
+ opt_state->force, /* force_delete */
+ opt_state->record_only,
+ opt_state->dry_run,
+ opt_state->allow_mixed_rev,
+ options,
+ ctx,
+ scratch_pool);
+ }
+ else
+ {
+ if (svn_path_is_url(sourcepath1) != svn_path_is_url(sourcepath2))
+ return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("Merge sources must both be "
+ "either paths or URLs"));
+
+ if (opt_state->verbose)
+ SVN_ERR(svn_cmdline_printf(scratch_pool, _("--- Merging\n")));
+ merge_err = svn_client_merge5(sourcepath1,
+ &first_range_start,
+ sourcepath2,
+ &first_range_end,
+ targetpath,
+ opt_state->depth,
+ opt_state->ignore_ancestry,
+ opt_state->ignore_ancestry,
+ opt_state->force, /* force_delete */
+ opt_state->record_only,
+ opt_state->dry_run,
+ opt_state->allow_mixed_rev,
+ options,
+ ctx,
+ scratch_pool);
+ }
+
+ return merge_err;
+}
/* This implements the `svn_opt_subcommand_t' interface. */
svn_error_t *
@@ -51,10 +160,11 @@ svn_cl__merge(apr_getopt_t *os,
apr_array_header_t *targets;
const char *sourcepath1 = NULL, *sourcepath2 = NULL, *targetpath = "";
svn_boolean_t two_sources_specified = TRUE;
- svn_error_t *err;
+ svn_error_t *merge_err;
svn_opt_revision_t first_range_start, first_range_end, peg_revision1,
peg_revision2;
apr_array_header_t *options, *ranges_to_merge = opt_state->revision_ranges;
+ svn_boolean_t has_explicit_target = FALSE;
/* Merge doesn't support specifying a revision or revision range
when using --reintegrate. */
@@ -175,28 +285,22 @@ svn_cl__merge(apr_getopt_t *os,
_("Too many arguments given"));
/* Set the default value for unspecified paths and peg revision. */
- if (targets->nelts == 0)
- {
- peg_revision1.kind = svn_opt_revision_head;
- }
- else
- {
- /* targets->nelts is 1 ("svn merge SOURCE") or 2 ("svn merge
- SOURCE WCPATH") here. */
- sourcepath2 = sourcepath1;
+ /* targets->nelts is 1 ("svn merge SOURCE") or 2 ("svn merge
+ SOURCE WCPATH") here. */
+ sourcepath2 = sourcepath1;
- if (peg_revision1.kind == svn_opt_revision_unspecified)
- peg_revision1.kind = svn_path_is_url(sourcepath1)
- ? svn_opt_revision_head : svn_opt_revision_working;
+ if (peg_revision1.kind == svn_opt_revision_unspecified)
+ peg_revision1.kind = svn_path_is_url(sourcepath1)
+ ? svn_opt_revision_head : svn_opt_revision_working;
- if (targets->nelts == 2)
- {
- targetpath = APR_ARRAY_IDX(targets, 1, const char *);
- if (svn_path_is_url(targetpath))
- return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
- _("Cannot specify a revision range "
- "with two URLs"));
- }
+ if (targets->nelts == 2)
+ {
+ targetpath = APR_ARRAY_IDX(targets, 1, const char *);
+ has_explicit_target = TRUE;
+ if (svn_path_is_url(targetpath))
+ return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("Cannot specify a revision range "
+ "with two URLs"));
}
}
else /* using @rev syntax */
@@ -212,16 +316,13 @@ svn_cl__merge(apr_getopt_t *os,
/* Catch 'svn merge wc_path1 wc_path2 [target]' without explicit
revisions--since it ignores local modifications it may not do what
- the user expects. Forcing the user to specify a repository
+ the user expects. That is, it doesn't read from the WC itself, it
+ reads from the WC's URL. Forcing the user to specify a repository
revision should avoid any confusion. */
- if ((first_range_start.kind == svn_opt_revision_unspecified
- && ! svn_path_is_url(sourcepath1))
- ||
- (first_range_end.kind == svn_opt_revision_unspecified
- && ! svn_path_is_url(sourcepath2)))
- return svn_error_create
- (SVN_ERR_CLIENT_BAD_REVISION, 0,
- _("A working copy merge source needs an explicit revision"));
+ SVN_ERR(ensure_wc_path_has_repo_revision(sourcepath1, &first_range_start,
+ pool));
+ SVN_ERR(ensure_wc_path_has_repo_revision(sourcepath2, &first_range_end,
+ pool));
/* Default peg revisions to each URL's youngest revision. */
if (first_range_start.kind == svn_opt_revision_unspecified)
@@ -231,17 +332,22 @@ svn_cl__merge(apr_getopt_t *os,
/* Decide where to apply the delta (defaulting to "."). */
if (targets->nelts == 3)
- targetpath = APR_ARRAY_IDX(targets, 2, const char *);
+ {
+ targetpath = APR_ARRAY_IDX(targets, 2, const char *);
+ has_explicit_target = TRUE;
+ }
}
/* If no targetpath was specified, see if we can infer it from the
sourcepaths. */
- if (sourcepath1 && sourcepath2 && strcmp(targetpath, "") == 0)
+ if (! has_explicit_target
+ && sourcepath1 && sourcepath2
+ && strcmp(targetpath, "") == 0)
{
/* If the sourcepath is a URL, it can only refer to a target in
- the current working directory. However, if the sourcepath is
- a local path, it can refer to a target somewhere deeper in
- the directory structure. */
+ the current working directory or which is the current working
+ directory. However, if the sourcepath is a local path, it can
+ refer to a target somewhere deeper in the directory structure. */
if (svn_path_is_url(sourcepath1))
{
const char *sp1_basename = svn_uri_basename(sourcepath1, pool);
@@ -249,23 +355,40 @@ svn_cl__merge(apr_getopt_t *os,
if (strcmp(sp1_basename, sp2_basename) == 0)
{
- svn_node_kind_t kind;
+ const char *target_url;
+ const char *target_base;
- SVN_ERR(svn_io_check_path(sp1_basename, &kind, pool));
- if (kind == svn_node_file)
+ SVN_ERR(svn_client_url_from_path2(&target_url, targetpath, ctx,
+ pool, pool));
+ target_base = svn_uri_basename(target_url, pool);
+
+ /* If the basename of the source is the same as the basename of
+ the cwd assume the cwd is the target. */
+ if (strcmp(sp1_basename, target_base) != 0)
{
- targetpath = sp1_basename;
+ svn_node_kind_t kind;
+
+ /* If the basename of the source differs from the basename
+ of the target. We still might assume the cwd is the
+ target, but first check if there is a file in the cwd
+ with the same name as the source basename. If there is,
+ then assume that file is the target. */
+ SVN_ERR(svn_io_check_path(sp1_basename, &kind, pool));
+ if (kind == svn_node_file)
+ {
+ targetpath = sp1_basename;
+ }
}
}
}
else if (strcmp(sourcepath1, sourcepath2) == 0)
{
svn_node_kind_t kind;
- const char *decoded_path = svn_path_uri_decode(sourcepath1, pool);
- SVN_ERR(svn_io_check_path(decoded_path, &kind, pool));
+
+ SVN_ERR(svn_io_check_path(sourcepath1, &kind, pool));
if (kind == svn_node_file)
{
- targetpath = decoded_path;
+ targetpath = sourcepath1;
}
}
}
@@ -278,6 +401,16 @@ svn_cl__merge(apr_getopt_t *os,
/* More input validation. */
if (opt_state->reintegrate)
{
+ if (opt_state->ignore_ancestry)
+ return svn_error_create(SVN_ERR_CL_MUTUALLY_EXCLUSIVE_ARGS, NULL,
+ _("--reintegrate cannot be used with "
+ "--ignore-ancestry"));
+
+ if (opt_state->record_only)
+ return svn_error_create(SVN_ERR_CL_MUTUALLY_EXCLUSIVE_ARGS, NULL,
+ _("--reintegrate cannot be used with "
+ "--record-only"));
+
if (opt_state->depth != svn_depth_unknown)
return svn_error_create(SVN_ERR_CL_MUTUALLY_EXCLUSIVE_ARGS, NULL,
_("--depth cannot be used with "
@@ -298,86 +431,28 @@ svn_cl__merge(apr_getopt_t *os,
"with --reintegrate"));
}
- if (! two_sources_specified) /* TODO: Switch order of if */
+ merge_err = run_merge(two_sources_specified,
+ sourcepath1, peg_revision1,
+ sourcepath2,
+ targetpath,
+ ranges_to_merge, first_range_start, first_range_end,
+ opt_state, options, ctx, pool);
+ if (merge_err && merge_err->apr_err
+ == SVN_ERR_CLIENT_INVALID_MERGEINFO_NO_MERGETRACKING)
{
- /* If we don't have a source, use the target as the source. */
- if (! sourcepath1)
- sourcepath1 = targetpath;
-
- /* If we don't have at least one valid revision range, pick a
- good one that spans the entire set of revisions on our
- source. */
- if ((first_range_start.kind == svn_opt_revision_unspecified)
- && (first_range_end.kind == svn_opt_revision_unspecified))
- {
- svn_opt_revision_range_t *range = apr_pcalloc(pool, sizeof(*range));
- ranges_to_merge = apr_array_make(pool, 1, sizeof(range));
- range->start.kind = svn_opt_revision_number;
- range->start.value.number = 1;
- range->end = peg_revision1;
- APR_ARRAY_PUSH(ranges_to_merge, svn_opt_revision_range_t *) = range;
- }
-
- if (opt_state->reintegrate)
- err = svn_client_merge_reintegrate(sourcepath1,
- &peg_revision1,
- targetpath,
- opt_state->dry_run,
- options, ctx, pool);
- else
- err = svn_client_merge_peg4(sourcepath1,
- ranges_to_merge,
- &peg_revision1,
- targetpath,
- opt_state->depth,
- opt_state->ignore_ancestry,
- opt_state->force,
- opt_state->record_only,
- opt_state->dry_run,
- opt_state->allow_mixed_rev,
- options,
- ctx,
- pool);
+ return svn_error_quick_wrap(
+ merge_err,
+ _("Merge tracking not possible, use --ignore-ancestry or\n"
+ "fix invalid mergeinfo in target with 'svn propset'"));
}
- else
- {
- if (svn_path_is_url(sourcepath1) != svn_path_is_url(sourcepath2))
- return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
- _("Merge sources must both be "
- "either paths or URLs"));
- err = svn_client_merge4(sourcepath1,
- &first_range_start,
- sourcepath2,
- &first_range_end,
- targetpath,
- opt_state->depth,
- opt_state->ignore_ancestry,
- opt_state->force,
- opt_state->record_only,
- opt_state->dry_run,
- opt_state->allow_mixed_rev,
- options,
- ctx,
- pool);
- }
-
- if (! opt_state->quiet)
- SVN_ERR(svn_cl__print_conflict_stats(ctx->notify_baton2, pool));
- if (err)
+ if (!opt_state->quiet)
{
- if(err->apr_err == SVN_ERR_CLIENT_INVALID_MERGEINFO_NO_MERGETRACKING)
- {
- err = svn_error_quick_wrap(
- err,
- _("Merge tracking not possible, use --ignore-ancestry or\n"
- "fix invalid mergeinfo in target with 'svn propset'"));
- }
- else if (! opt_state->reintegrate)
- {
- return svn_cl__may_need_force(err);
- }
+ svn_error_t *err = svn_cl__notifier_print_conflict_stats(
+ ctx->notify_baton2, pool);
+
+ merge_err = svn_error_compose_create(merge_err, err);
}
- return svn_error_trace(err);
+ return svn_cl__may_need_force(merge_err);
}
diff --git a/subversion/svn/mergeinfo-cmd.c b/subversion/svn/mergeinfo-cmd.c
index 5875e2d..41edcda 100644
--- a/subversion/svn/mergeinfo-cmd.c
+++ b/subversion/svn/mergeinfo-cmd.c
@@ -55,6 +55,189 @@ print_log_rev(void *baton,
return SVN_NO_ERROR;
}
+/* Draw a diagram (by printing text to the console) summarizing the state
+ * of merging between two branches, given the merge description
+ * indicated by YCA, BASE, RIGHT, TARGET, REINTEGRATE_LIKE. */
+static svn_error_t *
+mergeinfo_diagram(const char *yca_url,
+ const char *base_url,
+ const char *right_url,
+ const char *target_url,
+ svn_revnum_t yca_rev,
+ svn_revnum_t base_rev,
+ svn_revnum_t right_rev,
+ svn_revnum_t target_rev,
+ const char *repos_root_url,
+ svn_boolean_t target_is_wc,
+ svn_boolean_t reintegrate_like,
+ apr_pool_t *pool)
+{
+ /* The graph occupies 4 rows of text, and the annotations occupy
+ * another 2 rows above and 2 rows below. The graph is constructed
+ * from left to right in discrete sections ("columns"), each of which
+ * can have a different width (measured in characters). Each element in
+ * the array is either a text string of the appropriate width, or can
+ * be NULL to draw a blank cell. */
+#define ROWS 8
+#define COLS 4
+ const char *g[ROWS][COLS] = {{0}};
+ int col_width[COLS];
+ int row, col;
+
+ /* The YCA (that is, the branching point). And an ellipsis, because we
+ * don't show information about earlier merges */
+ g[0][0] = apr_psprintf(pool, " %-8ld ", yca_rev);
+ g[1][0] = " | ";
+ if (strcmp(yca_url, right_url) == 0)
+ {
+ g[2][0] = "-------| |--";
+ g[3][0] = " \\ ";
+ g[4][0] = " \\ ";
+ g[5][0] = " --| |--";
+ }
+ else if (strcmp(yca_url, target_url) == 0)
+ {
+ g[2][0] = " --| |--";
+ g[3][0] = " / ";
+ g[4][0] = " / ";
+ g[5][0] = "-------| |--";
+ }
+ else
+ {
+ g[2][0] = " --| |--";
+ g[3][0] = "... / ";
+ g[4][0] = " \\ ";
+ g[5][0] = " --| |--";
+ }
+
+ /* The last full merge */
+ if ((base_rev > yca_rev) && reintegrate_like)
+ {
+ g[2][2] = "---------";
+ g[3][2] = " / ";
+ g[4][2] = " / ";
+ g[5][2] = "---------";
+ g[6][2] = "| ";
+ g[7][2] = apr_psprintf(pool, "%-8ld ", base_rev);
+ }
+ else if (base_rev > yca_rev)
+ {
+ g[0][2] = apr_psprintf(pool, "%-8ld ", base_rev);
+ g[1][2] = "| ";
+ g[2][2] = "---------";
+ g[3][2] = " \\ ";
+ g[4][2] = " \\ ";
+ g[5][2] = "---------";
+ }
+ else
+ {
+ g[2][2] = "---------";
+ g[3][2] = " ";
+ g[4][2] = " ";
+ g[5][2] = "---------";
+ }
+
+ /* The tips of the branches */
+ {
+ g[0][3] = apr_psprintf(pool, "%-8ld", right_rev);
+ g[1][3] = "| ";
+ g[2][3] = "- ";
+ g[3][3] = " ";
+ g[4][3] = " ";
+ g[5][3] = "- ";
+ g[6][3] = "| ";
+ g[7][3] = target_is_wc ? "WC "
+ : apr_psprintf(pool, "%-8ld", target_rev);
+ }
+
+ /* Find the width of each column, so we know how to print blank cells */
+ for (col = 0; col < COLS; col++)
+ {
+ col_width[col] = 0;
+ for (row = 0; row < ROWS; row++)
+ {
+ if (g[row][col] && ((int)strlen(g[row][col]) > col_width[col]))
+ col_width[col] = (int)strlen(g[row][col]);
+ }
+ }
+
+ /* Column headings */
+ SVN_ERR(svn_cmdline_printf(pool,
+ " %s\n"
+ " | %s\n"
+ " | | %s\n"
+ " | | | %s\n"
+ "\n",
+ _("youngest common ancestor"), _("last full merge"),
+ _("tip of branch"), _("repository path")));
+
+ /* Print the diagram, row by row */
+ for (row = 0; row < ROWS; row++)
+ {
+ SVN_ERR(svn_cmdline_fputs(" ", stdout, pool));
+ for (col = 0; col < COLS; col++)
+ {
+ if (g[row][col])
+ {
+ SVN_ERR(svn_cmdline_fputs(g[row][col], stdout, pool));
+ }
+ else
+ {
+ /* Print <column-width> spaces */
+ SVN_ERR(svn_cmdline_printf(pool, "%*s", col_width[col], ""));
+ }
+ }
+ if (row == 2)
+ SVN_ERR(svn_cmdline_printf(pool, " %s",
+ svn_uri_skip_ancestor(repos_root_url, right_url, pool)));
+ if (row == 5)
+ SVN_ERR(svn_cmdline_printf(pool, " %s",
+ svn_uri_skip_ancestor(repos_root_url, target_url, pool)));
+ SVN_ERR(svn_cmdline_fputs("\n", stdout, pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Display a summary of the state of merging between the two branches
+ * SOURCE_PATH_OR_URL@SOURCE_REVISION and
+ * TARGET_PATH_OR_URL@TARGET_REVISION. */
+static svn_error_t *
+mergeinfo_summary(
+ const char *source_path_or_url,
+ const svn_opt_revision_t *source_revision,
+ const char *target_path_or_url,
+ const svn_opt_revision_t *target_revision,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ const char *yca_url, *base_url, *right_url, *target_url;
+ svn_revnum_t yca_rev, base_rev, right_rev, target_rev;
+ const char *repos_root_url;
+ svn_boolean_t target_is_wc, is_reintegration;
+
+ target_is_wc = (! svn_path_is_url(target_path_or_url))
+ && (target_revision->kind == svn_opt_revision_unspecified
+ || target_revision->kind == svn_opt_revision_working);
+ SVN_ERR(svn_client_get_merging_summary(
+ &is_reintegration,
+ &yca_url, &yca_rev,
+ &base_url, &base_rev,
+ &right_url, &right_rev,
+ &target_url, &target_rev,
+ &repos_root_url,
+ source_path_or_url, source_revision,
+ target_path_or_url, target_revision,
+ ctx, pool, pool));
+
+ SVN_ERR(mergeinfo_diagram(yca_url, base_url, right_url, target_url,
+ yca_rev, base_rev, right_rev, target_rev,
+ repos_root_url, target_is_wc, is_reintegration,
+ pool));
+
+ return SVN_NO_ERROR;
+}
+
/* This implements the `svn_opt_subcommand_t' interface. */
svn_error_t *
svn_cl__mergeinfo(apr_getopt_t *os,
@@ -66,28 +249,24 @@ svn_cl__mergeinfo(apr_getopt_t *os,
apr_array_header_t *targets;
const char *source, *target;
svn_opt_revision_t src_peg_revision, tgt_peg_revision;
+ svn_opt_revision_t *src_start_revision, *src_end_revision;
/* Default to depth empty. */
- svn_depth_t depth = opt_state->depth == svn_depth_unknown
- ? svn_depth_empty : opt_state->depth;
+ svn_depth_t depth = (opt_state->depth == svn_depth_unknown)
+ ? svn_depth_empty : opt_state->depth;
SVN_ERR(svn_cl__args_to_target_array_print_reserved(&targets, os,
opt_state->targets,
ctx, FALSE, pool));
- /* We expect a single source URL followed by a single target --
- nothing more, nothing less. */
+ /* Parse the arguments: SOURCE[@REV] optionally followed by TARGET[@REV]. */
if (targets->nelts < 1)
return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("Not enough arguments given"));
if (targets->nelts > 2)
return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("Too many arguments given"));
-
- /* Parse the SOURCE-URL[@REV] argument. */
SVN_ERR(svn_opt_parse_path(&src_peg_revision, &source,
APR_ARRAY_IDX(targets, 0, const char *), pool));
-
- /* Parse the TARGET[@REV] argument (if provided). */
if (targets->nelts == 2)
{
SVN_ERR(svn_opt_parse_path(&tgt_peg_revision, &target,
@@ -101,11 +280,15 @@ svn_cl__mergeinfo(apr_getopt_t *os,
}
/* If no peg-rev was attached to the source URL, assume HEAD. */
+ /* ### But what if SOURCE is a WC path not a URL -- shouldn't we then use
+ * BASE (but not WORKING: that would be inconsistent with 'svn merge')? */
if (src_peg_revision.kind == svn_opt_revision_unspecified)
src_peg_revision.kind = svn_opt_revision_head;
/* If no peg-rev was attached to a URL target, then assume HEAD; if
no peg-rev was attached to a non-URL target, then assume BASE. */
+ /* ### But we would like to be able to examine a working copy with an
+ uncommitted merge in it, so change this to use WORKING not BASE? */
if (tgt_peg_revision.kind == svn_opt_revision_unspecified)
{
if (svn_path_is_url(target))
@@ -114,22 +297,58 @@ svn_cl__mergeinfo(apr_getopt_t *os,
tgt_peg_revision.kind = svn_opt_revision_base;
}
+ src_start_revision = &(opt_state->start_revision);
+ if (opt_state->end_revision.kind == svn_opt_revision_unspecified)
+ src_end_revision = src_start_revision;
+ else
+ src_end_revision = &(opt_state->end_revision);
+
/* Do the real work, depending on the requested data flavor. */
if (opt_state->show_revs == svn_cl__show_revs_merged)
{
- SVN_ERR(svn_client_mergeinfo_log(TRUE, target, &tgt_peg_revision,
- source, &src_peg_revision,
- print_log_rev, NULL,
- TRUE, depth, NULL, ctx,
- pool));
+ apr_array_header_t *revprops;
+
+ /* We need only revisions number, not revision properties. */
+ revprops = apr_array_make(pool, 0, sizeof(const char *));
+
+ SVN_ERR(svn_client_mergeinfo_log2(TRUE, target, &tgt_peg_revision,
+ source, &src_peg_revision,
+ src_start_revision,
+ src_end_revision,
+ print_log_rev, NULL,
+ TRUE, depth, revprops, ctx,
+ pool));
}
else if (opt_state->show_revs == svn_cl__show_revs_eligible)
{
- SVN_ERR(svn_client_mergeinfo_log(FALSE, target, &tgt_peg_revision,
- source, &src_peg_revision,
- print_log_rev, NULL,
- TRUE, depth, NULL, ctx,
- pool));
+ apr_array_header_t *revprops;
+
+ /* We need only revisions number, not revision properties. */
+ revprops = apr_array_make(pool, 0, sizeof(const char *));
+
+ SVN_ERR(svn_client_mergeinfo_log2(FALSE, target, &tgt_peg_revision,
+ source, &src_peg_revision,
+ src_start_revision,
+ src_end_revision,
+ print_log_rev, NULL,
+ TRUE, depth, revprops, ctx,
+ pool));
+ }
+ else
+ {
+ if ((opt_state->start_revision.kind != svn_opt_revision_unspecified)
+ || (opt_state->end_revision.kind != svn_opt_revision_unspecified))
+ return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("--revision (-r) option valid only with "
+ "--show-revs option"));
+ if (opt_state->depth != svn_depth_unknown)
+ return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("Depth specification options valid only "
+ "with --show-revs option"));
+
+ SVN_ERR(mergeinfo_summary(source, &src_peg_revision,
+ target, &tgt_peg_revision,
+ ctx, pool));
}
return SVN_NO_ERROR;
}
diff --git a/subversion/svn/move-cmd.c b/subversion/svn/move-cmd.c
index 795870a..bb71043 100644
--- a/subversion/svn/move-cmd.c
+++ b/subversion/svn/move-cmd.c
@@ -84,8 +84,12 @@ svn_cl__move(apr_getopt_t *os,
SVN_ERR(svn_cl__eat_peg_revisions(&targets, targets, pool));
- err = svn_client_move6(targets, dst_path,
- TRUE, opt_state->parents, opt_state->revprop_table,
+ err = svn_client_move7(targets, dst_path,
+ TRUE /* move_as_child */,
+ opt_state->parents /* make_parents */,
+ opt_state->allow_mixed_rev /* allow_mixed_revisions*/,
+ FALSE /* metadata_only */,
+ opt_state->revprop_table,
(opt_state->quiet ? NULL : svn_cl__print_commit_info),
NULL, ctx, pool);
diff --git a/subversion/svn/notify.c b/subversion/svn/notify.c
index a785e53..6498fb1 100644
--- a/subversion/svn/notify.c
+++ b/subversion/svn/notify.c
@@ -35,7 +35,11 @@
#include "svn_pools.h"
#include "svn_dirent_uri.h"
#include "svn_path.h"
+#include "svn_sorts.h"
+#include "svn_hash.h"
#include "cl.h"
+#include "private/svn_subr_private.h"
+#include "private/svn_dep_compat.h"
#include "svn_private_config.h"
@@ -47,56 +51,154 @@ struct notify_baton
svn_boolean_t is_checkout;
svn_boolean_t is_export;
svn_boolean_t is_wc_to_repos_copy;
- svn_boolean_t suppress_summary_lines;
svn_boolean_t sent_first_txdelta;
svn_boolean_t in_external;
svn_boolean_t had_print_error; /* Used to not keep printing error messages
when we've already had one print error. */
- /* Conflict stats for update and merge. */
- unsigned int text_conflicts;
- unsigned int prop_conflicts;
- unsigned int tree_conflicts;
- unsigned int skipped_paths;
+ svn_cl__conflict_stats_t *conflict_stats;
/* The cwd, for use in decomposing absolute paths. */
const char *path_prefix;
};
-
-svn_error_t *
-svn_cl__print_conflict_stats(void *notify_baton, apr_pool_t *pool)
+/* Conflict stats for operations such as update and merge. */
+struct svn_cl__conflict_stats_t
{
- struct notify_baton *nb = notify_baton;
- unsigned int text_conflicts;
- unsigned int prop_conflicts;
- unsigned int tree_conflicts;
- unsigned int skipped_paths;
+ apr_pool_t *stats_pool;
+ apr_hash_t *text_conflicts, *prop_conflicts, *tree_conflicts;
+ int text_conflicts_resolved, prop_conflicts_resolved, tree_conflicts_resolved;
+ int skipped_paths;
+};
- text_conflicts = nb->text_conflicts;
- prop_conflicts = nb->prop_conflicts;
- tree_conflicts = nb->tree_conflicts;
- skipped_paths = nb->skipped_paths;
+svn_cl__conflict_stats_t *
+svn_cl__conflict_stats_create(apr_pool_t *pool)
+{
+ svn_cl__conflict_stats_t *conflict_stats
+ = apr_palloc(pool, sizeof(*conflict_stats));
+
+ conflict_stats->stats_pool = pool;
+ conflict_stats->text_conflicts = apr_hash_make(pool);
+ conflict_stats->prop_conflicts = apr_hash_make(pool);
+ conflict_stats->tree_conflicts = apr_hash_make(pool);
+ conflict_stats->text_conflicts_resolved = 0;
+ conflict_stats->prop_conflicts_resolved = 0;
+ conflict_stats->tree_conflicts_resolved = 0;
+ conflict_stats->skipped_paths = 0;
+ return conflict_stats;
+}
- if (text_conflicts > 0 || prop_conflicts > 0
- || tree_conflicts > 0 || skipped_paths > 0)
- SVN_ERR(svn_cmdline_printf(pool, "%s", _("Summary of conflicts:\n")));
+/* Add the PATH (as a key, with a meaningless value) into the HASH in NB. */
+static void
+store_path(struct notify_baton *nb, apr_hash_t *hash, const char *path)
+{
+ svn_hash_sets(hash, apr_pstrdup(nb->conflict_stats->stats_pool, path), "");
+}
- if (text_conflicts > 0)
- SVN_ERR(svn_cmdline_printf
- (pool, _(" Text conflicts: %u\n"), text_conflicts));
+void
+svn_cl__conflict_stats_resolved(svn_cl__conflict_stats_t *conflict_stats,
+ const char *path_local,
+ svn_wc_conflict_kind_t conflict_kind)
+{
+ switch (conflict_kind)
+ {
+ case svn_wc_conflict_kind_text:
+ if (svn_hash_gets(conflict_stats->text_conflicts, path_local))
+ {
+ svn_hash_sets(conflict_stats->text_conflicts, path_local, NULL);
+ conflict_stats->text_conflicts_resolved++;
+ }
+ break;
+ case svn_wc_conflict_kind_property:
+ if (svn_hash_gets(conflict_stats->prop_conflicts, path_local))
+ {
+ svn_hash_sets(conflict_stats->prop_conflicts, path_local, NULL);
+ conflict_stats->prop_conflicts_resolved++;
+ }
+ break;
+ case svn_wc_conflict_kind_tree:
+ if (svn_hash_gets(conflict_stats->tree_conflicts, path_local))
+ {
+ svn_hash_sets(conflict_stats->tree_conflicts, path_local, NULL);
+ conflict_stats->tree_conflicts_resolved++;
+ }
+ break;
+ }
+}
- if (prop_conflicts > 0)
- SVN_ERR(svn_cmdline_printf
- (pool, _(" Property conflicts: %u\n"), prop_conflicts));
+static const char *
+remaining_str(apr_pool_t *pool, int n_remaining)
+{
+ return apr_psprintf(pool, Q_("%d remaining",
+ "%d remaining",
+ n_remaining),
+ n_remaining);
+}
- if (tree_conflicts > 0)
- SVN_ERR(svn_cmdline_printf
- (pool, _(" Tree conflicts: %u\n"), tree_conflicts));
+static const char *
+resolved_str(apr_pool_t *pool, int n_resolved)
+{
+ return apr_psprintf(pool, Q_("and %d already resolved",
+ "and %d already resolved",
+ n_resolved),
+ n_resolved);
+}
- if (skipped_paths > 0)
- SVN_ERR(svn_cmdline_printf
- (pool, _(" Skipped paths: %u\n"), skipped_paths));
+svn_error_t *
+svn_cl__notifier_print_conflict_stats(void *baton, apr_pool_t *scratch_pool)
+{
+ struct notify_baton *nb = baton;
+ int n_text = apr_hash_count(nb->conflict_stats->text_conflicts);
+ int n_prop = apr_hash_count(nb->conflict_stats->prop_conflicts);
+ int n_tree = apr_hash_count(nb->conflict_stats->tree_conflicts);
+ int n_text_r = nb->conflict_stats->text_conflicts_resolved;
+ int n_prop_r = nb->conflict_stats->prop_conflicts_resolved;
+ int n_tree_r = nb->conflict_stats->tree_conflicts_resolved;
+
+ if (n_text > 0 || n_text_r > 0
+ || n_prop > 0 || n_prop_r > 0
+ || n_tree > 0 || n_tree_r > 0
+ || nb->conflict_stats->skipped_paths > 0)
+ SVN_ERR(svn_cmdline_printf(scratch_pool,
+ _("Summary of conflicts:\n")));
+
+ if (n_text_r == 0 && n_prop_r == 0 && n_tree_r == 0)
+ {
+ if (n_text > 0)
+ SVN_ERR(svn_cmdline_printf(scratch_pool,
+ _(" Text conflicts: %d\n"),
+ n_text));
+ if (n_prop > 0)
+ SVN_ERR(svn_cmdline_printf(scratch_pool,
+ _(" Property conflicts: %d\n"),
+ n_prop));
+ if (n_tree > 0)
+ SVN_ERR(svn_cmdline_printf(scratch_pool,
+ _(" Tree conflicts: %d\n"),
+ n_tree));
+ }
+ else
+ {
+ if (n_text > 0 || n_text_r > 0)
+ SVN_ERR(svn_cmdline_printf(scratch_pool,
+ _(" Text conflicts: %s (%s)\n"),
+ remaining_str(scratch_pool, n_text),
+ resolved_str(scratch_pool, n_text_r)));
+ if (n_prop > 0 || n_prop_r > 0)
+ SVN_ERR(svn_cmdline_printf(scratch_pool,
+ _(" Property conflicts: %s (%s)\n"),
+ remaining_str(scratch_pool, n_prop),
+ resolved_str(scratch_pool, n_prop_r)));
+ if (n_tree > 0 || n_tree_r > 0)
+ SVN_ERR(svn_cmdline_printf(scratch_pool,
+ _(" Tree conflicts: %s (%s)\n"),
+ remaining_str(scratch_pool, n_tree),
+ resolved_str(scratch_pool, n_tree_r)));
+ }
+ if (nb->conflict_stats->skipped_paths > 0)
+ SVN_ERR(svn_cmdline_printf(scratch_pool,
+ _(" Skipped paths: %d\n"),
+ nb->conflict_stats->skipped_paths));
return SVN_NO_ERROR;
}
@@ -126,7 +228,7 @@ notify(void *baton, const svn_wc_notify_t *n, apr_pool_t *pool)
switch (n->action)
{
case svn_wc_notify_skip:
- nb->skipped_paths++;
+ nb->conflict_stats->skipped_paths++;
if (n->content_state == svn_wc_notify_state_missing)
{
if ((err = svn_cmdline_printf
@@ -149,28 +251,28 @@ notify(void *baton, const svn_wc_notify_t *n, apr_pool_t *pool)
}
break;
case svn_wc_notify_update_skip_obstruction:
- nb->skipped_paths++;
+ nb->conflict_stats->skipped_paths++;
if ((err = svn_cmdline_printf(
pool, _("Skipped '%s' -- An obstructing working copy was found\n"),
path_local)))
goto print_error;
break;
case svn_wc_notify_update_skip_working_only:
- nb->skipped_paths++;
+ nb->conflict_stats->skipped_paths++;
if ((err = svn_cmdline_printf(
pool, _("Skipped '%s' -- Has no versioned parent\n"),
path_local)))
goto print_error;
break;
case svn_wc_notify_update_skip_access_denied:
- nb->skipped_paths++;
+ nb->conflict_stats->skipped_paths++;
if ((err = svn_cmdline_printf(
pool, _("Skipped '%s' -- Access denied\n"),
path_local)))
goto print_error;
break;
case svn_wc_notify_skip_conflicted:
- nb->skipped_paths++;
+ nb->conflict_stats->skipped_paths++;
if ((err = svn_cmdline_printf(
pool, _("Skipped '%s' -- Node remains in conflict\n"),
path_local)))
@@ -182,6 +284,10 @@ notify(void *baton, const svn_wc_notify_t *n, apr_pool_t *pool)
if ((err = svn_cmdline_printf(pool, "D %s\n", path_local)))
goto print_error;
break;
+ case svn_wc_notify_update_broken_lock:
+ if ((err = svn_cmdline_printf(pool, "B %s\n", path_local)))
+ goto print_error;
+ break;
case svn_wc_notify_update_external_removed:
nb->received_some_change = TRUE;
@@ -199,6 +305,12 @@ notify(void *baton, const svn_wc_notify_t *n, apr_pool_t *pool)
}
break;
+ case svn_wc_notify_left_local_modifications:
+ if ((err = svn_cmdline_printf(pool, "Left local modifications as '%s'\n",
+ path_local)))
+ goto print_error;
+ break;
+
case svn_wc_notify_update_replace:
nb->received_some_change = TRUE;
if ((err = svn_cmdline_printf(pool, "R %s\n", path_local)))
@@ -209,7 +321,7 @@ notify(void *baton, const svn_wc_notify_t *n, apr_pool_t *pool)
nb->received_some_change = TRUE;
if (n->content_state == svn_wc_notify_state_conflicted)
{
- nb->text_conflicts++;
+ store_path(nb, nb->conflict_stats->text_conflicts, path_local);
if ((err = svn_cmdline_printf(pool, "C %s\n", path_local)))
goto print_error;
}
@@ -224,7 +336,7 @@ notify(void *baton, const svn_wc_notify_t *n, apr_pool_t *pool)
nb->received_some_change = TRUE;
if (n->content_state == svn_wc_notify_state_conflicted)
{
- nb->text_conflicts++;
+ store_path(nb, nb->conflict_stats->text_conflicts, path_local);
statchar_buf[0] = 'C';
}
else
@@ -232,7 +344,7 @@ notify(void *baton, const svn_wc_notify_t *n, apr_pool_t *pool)
if (n->prop_state == svn_wc_notify_state_conflicted)
{
- nb->prop_conflicts++;
+ store_path(nb, nb->conflict_stats->prop_conflicts, path_local);
statchar_buf[1] = 'C';
}
else if (n->prop_state == svn_wc_notify_state_merged)
@@ -298,7 +410,7 @@ notify(void *baton, const svn_wc_notify_t *n, apr_pool_t *pool)
nb->received_some_change = TRUE;
if (n->content_state == svn_wc_notify_state_conflicted)
{
- nb->text_conflicts++;
+ store_path(nb, nb->conflict_stats->text_conflicts, path_local);
statchar_buf[0] = 'C';
}
else if (n->kind == svn_node_file)
@@ -311,7 +423,7 @@ notify(void *baton, const svn_wc_notify_t *n, apr_pool_t *pool)
if (n->prop_state == svn_wc_notify_state_conflicted)
{
- nb->prop_conflicts++;
+ store_path(nb, nb->conflict_stats->prop_conflicts, path_local);
statchar_buf[1] = 'C';
}
else if (n->prop_state == svn_wc_notify_state_changed)
@@ -336,7 +448,13 @@ notify(void *baton, const svn_wc_notify_t *n, apr_pool_t *pool)
if (n->hunk_matched_line > n->hunk_original_start)
{
- off = n->hunk_matched_line - n->hunk_original_start;
+ /* If we are patching from the start of an empty file,
+ it is nicer to show offset 0 */
+ if (n->hunk_original_start == 0 && n->hunk_matched_line == 1)
+ off = 0; /* No offset, just adding */
+ else
+ off = n->hunk_matched_line - n->hunk_original_start;
+
minus = "";
}
else
@@ -504,7 +622,7 @@ notify(void *baton, const svn_wc_notify_t *n, apr_pool_t *pool)
{
if (n->content_state == svn_wc_notify_state_conflicted)
{
- nb->text_conflicts++;
+ store_path(nb, nb->conflict_stats->text_conflicts, path_local);
statchar_buf[0] = 'C';
}
else if (n->kind == svn_node_file)
@@ -517,7 +635,7 @@ notify(void *baton, const svn_wc_notify_t *n, apr_pool_t *pool)
if (n->prop_state == svn_wc_notify_state_conflicted)
{
- nb->prop_conflicts++;
+ store_path(nb, nb->conflict_stats->prop_conflicts, path_local);
statchar_buf[1] = 'C';
}
else if (n->prop_state == svn_wc_notify_state_merged)
@@ -583,8 +701,7 @@ notify(void *baton, const svn_wc_notify_t *n, apr_pool_t *pool)
break;
case svn_wc_notify_update_started:
- if (! (nb->suppress_summary_lines ||
- nb->in_external ||
+ if (! (nb->in_external ||
nb->is_checkout ||
nb->is_export))
{
@@ -596,77 +713,74 @@ notify(void *baton, const svn_wc_notify_t *n, apr_pool_t *pool)
case svn_wc_notify_update_completed:
{
- if (! nb->suppress_summary_lines)
+ if (SVN_IS_VALID_REVNUM(n->revision))
{
- if (SVN_IS_VALID_REVNUM(n->revision))
+ if (nb->is_export)
+ {
+ if ((err = svn_cmdline_printf
+ (pool, nb->in_external
+ ? _("Exported external at revision %ld.\n")
+ : _("Exported revision %ld.\n"),
+ n->revision)))
+ goto print_error;
+ }
+ else if (nb->is_checkout)
+ {
+ if ((err = svn_cmdline_printf
+ (pool, nb->in_external
+ ? _("Checked out external at revision %ld.\n")
+ : _("Checked out revision %ld.\n"),
+ n->revision)))
+ goto print_error;
+ }
+ else
{
- if (nb->is_export)
+ if (nb->received_some_change)
{
+ nb->received_some_change = FALSE;
if ((err = svn_cmdline_printf
(pool, nb->in_external
- ? _("Exported external at revision %ld.\n")
- : _("Exported revision %ld.\n"),
+ ? _("Updated external to revision %ld.\n")
+ : _("Updated to revision %ld.\n"),
n->revision)))
goto print_error;
}
- else if (nb->is_checkout)
+ else
{
if ((err = svn_cmdline_printf
(pool, nb->in_external
- ? _("Checked out external at revision %ld.\n")
- : _("Checked out revision %ld.\n"),
+ ? _("External at revision %ld.\n")
+ : _("At revision %ld.\n"),
n->revision)))
goto print_error;
}
- else
- {
- if (nb->received_some_change)
- {
- nb->received_some_change = FALSE;
- if ((err = svn_cmdline_printf
- (pool, nb->in_external
- ? _("Updated external to revision %ld.\n")
- : _("Updated to revision %ld.\n"),
- n->revision)))
- goto print_error;
- }
- else
- {
- if ((err = svn_cmdline_printf
- (pool, nb->in_external
- ? _("External at revision %ld.\n")
- : _("At revision %ld.\n"),
- n->revision)))
- goto print_error;
- }
- }
}
- else /* no revision */
+ }
+ else /* no revision */
+ {
+ if (nb->is_export)
{
- if (nb->is_export)
- {
- if ((err = svn_cmdline_printf
- (pool, nb->in_external
- ? _("External export complete.\n")
- : _("Export complete.\n"))))
- goto print_error;
- }
- else if (nb->is_checkout)
- {
- if ((err = svn_cmdline_printf
- (pool, nb->in_external
- ? _("External checkout complete.\n")
- : _("Checkout complete.\n"))))
- goto print_error;
- }
- else
- {
- if ((err = svn_cmdline_printf
- (pool, nb->in_external
- ? _("External update complete.\n")
- : _("Update complete.\n"))))
- goto print_error;
- }
+ if ((err = svn_cmdline_printf
+ (pool, nb->in_external
+ ? _("External export complete.\n")
+ : _("Export complete.\n"))))
+ goto print_error;
+ }
+ else if (nb->is_checkout)
+ {
+ if ((err = svn_cmdline_printf
+ (pool, nb->in_external
+ ? _("External checkout complete.\n")
+ : _("Checkout complete.\n"))))
+ goto print_error;
+ }
+ else
+ {
+ if ((err = svn_cmdline_printf
+ (pool, nb->in_external
+ ? _("External update complete.\n")
+ : _("Update complete.\n"))))
+ goto print_error;
}
}
}
@@ -898,7 +1012,7 @@ notify(void *baton, const svn_wc_notify_t *n, apr_pool_t *pool)
break;
case svn_wc_notify_tree_conflict:
- nb->tree_conflicts++;
+ store_path(nb, nb->conflict_stats->tree_conflicts, path_local);
if ((err = svn_cmdline_printf(pool, " C %s\n", path_local)))
goto print_error;
break;
@@ -923,50 +1037,50 @@ notify(void *baton, const svn_wc_notify_t *n, apr_pool_t *pool)
case svn_wc_notify_property_modified:
case svn_wc_notify_property_added:
- err = svn_cmdline_printf(pool,
- _("property '%s' set on '%s'\n"),
- n->prop_name, path_local);
- if (err)
- goto print_error;
+ err = svn_cmdline_printf(pool,
+ _("property '%s' set on '%s'\n"),
+ n->prop_name, path_local);
+ if (err)
+ goto print_error;
break;
case svn_wc_notify_property_deleted:
- err = svn_cmdline_printf(pool,
- _("property '%s' deleted from '%s'.\n"),
- n->prop_name, path_local);
- if (err)
- goto print_error;
+ err = svn_cmdline_printf(pool,
+ _("property '%s' deleted from '%s'.\n"),
+ n->prop_name, path_local);
+ if (err)
+ goto print_error;
break;
case svn_wc_notify_property_deleted_nonexistent:
- err = svn_cmdline_printf(pool,
- _("Attempting to delete nonexistent "
- "property '%s' on '%s'\n"), n->prop_name,
- path_local);
- if (err)
- goto print_error;
+ err = svn_cmdline_printf(pool,
+ _("Attempting to delete nonexistent "
+ "property '%s' on '%s'\n"), n->prop_name,
+ path_local);
+ if (err)
+ goto print_error;
break;
case svn_wc_notify_revprop_set:
- err = svn_cmdline_printf(pool,
- _("property '%s' set on repository revision %ld\n"),
- n->prop_name, n->revision);
+ err = svn_cmdline_printf(pool,
+ _("property '%s' set on repository revision %ld\n"),
+ n->prop_name, n->revision);
if (err)
goto print_error;
break;
case svn_wc_notify_revprop_deleted:
- err = svn_cmdline_printf(pool,
+ err = svn_cmdline_printf(pool,
_("property '%s' deleted from repository revision %ld\n"),
n->prop_name, n->revision);
- if (err)
- goto print_error;
+ if (err)
+ goto print_error;
break;
case svn_wc_notify_upgraded_path:
- err = svn_cmdline_printf(pool, _("Upgraded '%s'\n"), path_local);
- if (err)
- goto print_error;
+ err = svn_cmdline_printf(pool, _("Upgraded '%s'\n"), path_local);
+ if (err)
+ goto print_error;
break;
case svn_wc_notify_url_redirect:
@@ -977,7 +1091,37 @@ notify(void *baton, const svn_wc_notify_t *n, apr_pool_t *pool)
break;
case svn_wc_notify_path_nonexistent:
- err = svn_cmdline_printf(pool, _("'%s' is not under version control"),
+ err = svn_cmdline_printf(pool, "%s\n",
+ apr_psprintf(pool, _("'%s' is not under version control"),
+ path_local));
+ if (err)
+ goto print_error;
+ break;
+
+ case svn_wc_notify_conflict_resolver_starting:
+ /* Once all operations invoke the interactive conflict resolution after
+ * they've completed, we can run svn_cl__notifier_print_conflict_stats()
+ * here. */
+ break;
+
+ case svn_wc_notify_conflict_resolver_done:
+ break;
+
+ case svn_wc_notify_foreign_copy_begin:
+ if (n->merge_range == NULL)
+ {
+ err = svn_cmdline_printf(
+ pool,
+ _("--- Copying from foreign repository URL '%s':\n"),
+ n->url);
+ if (err)
+ goto print_error;
+ }
+ break;
+
+ case svn_wc_notify_move_broken:
+ err = svn_cmdline_printf(pool,
+ _("Breaking move with source path '%s'\n"),
path_local);
if (err)
goto print_error;
@@ -1016,7 +1160,7 @@ notify(void *baton, const svn_wc_notify_t *n, apr_pool_t *pool)
svn_error_t *
svn_cl__get_notifier(svn_wc_notify_func2_t *notify_func_p,
void **notify_baton_p,
- svn_boolean_t suppress_summary_lines,
+ svn_cl__conflict_stats_t *conflict_stats,
apr_pool_t *pool)
{
struct notify_baton *nb = apr_pcalloc(pool, sizeof(*nb));
@@ -1026,13 +1170,9 @@ svn_cl__get_notifier(svn_wc_notify_func2_t *notify_func_p,
nb->is_checkout = FALSE;
nb->is_export = FALSE;
nb->is_wc_to_repos_copy = FALSE;
- nb->suppress_summary_lines = suppress_summary_lines;
nb->in_external = FALSE;
nb->had_print_error = FALSE;
- nb->text_conflicts = 0;
- nb->prop_conflicts = 0;
- nb->tree_conflicts = 0;
- nb->skipped_paths = 0;
+ nb->conflict_stats = conflict_stats;
SVN_ERR(svn_dirent_get_absolute(&nb->path_prefix, "", pool));
*notify_func_p = notify;
@@ -1080,4 +1220,3 @@ svn_cl__check_externals_failed_notify_wrapper(void *baton,
if (nwb->wrapped_func)
nwb->wrapped_func(nwb->wrapped_baton, n, pool);
}
-
diff --git a/subversion/svn/patch-cmd.c b/subversion/svn/patch-cmd.c
index 24abb47..83707c6 100644
--- a/subversion/svn/patch-cmd.c
+++ b/subversion/svn/patch-cmd.c
@@ -92,7 +92,7 @@ svn_cl__patch(apr_getopt_t *os,
if (! opt_state->quiet)
- SVN_ERR(svn_cl__print_conflict_stats(ctx->notify_baton2, pool));
+ SVN_ERR(svn_cl__notifier_print_conflict_stats(ctx->notify_baton2, pool));
return SVN_NO_ERROR;
}
diff --git a/subversion/svn/propedit-cmd.c b/subversion/svn/propedit-cmd.c
index 0e36a34..520fe6c 100644
--- a/subversion/svn/propedit-cmd.c
+++ b/subversion/svn/propedit-cmd.c
@@ -27,6 +27,7 @@
/*** Includes. ***/
+#include "svn_hash.h"
#include "svn_cmdline.h"
#include "svn_wc.h"
#include "svn_pools.h"
@@ -39,8 +40,7 @@
#include "svn_props.h"
#include "cl.h"
-#include "private/svn_wc_private.h"
-
+#include "private/svn_cmdline_private.h"
#include "svn_private_config.h"
@@ -86,6 +86,10 @@ svn_cl__propedit(apr_getopt_t *os,
return svn_error_createf(SVN_ERR_CLIENT_PROPERTY_NAME, NULL,
_("'%s' is not a valid Subversion property name"),
pname_utf8);
+ if (!opt_state->force)
+ SVN_ERR(svn_cl__check_svn_prop_name(pname_utf8, opt_state->revprop,
+ svn_cl__prop_use_edit, pool));
+
if (opt_state->encoding && !svn_prop_needs_translation(pname_utf8))
return svn_error_create
(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
@@ -122,7 +126,7 @@ svn_cl__propedit(apr_getopt_t *os,
if (! propval)
{
- propval = svn_string_create("", pool);
+ propval = svn_string_create_empty(pool);
/* This is how we signify to svn_client_revprop_set2() that
we want it to check that the original value hasn't
changed, but that that original value was non-existent: */
@@ -136,8 +140,8 @@ svn_cl__propedit(apr_getopt_t *os,
/* Run the editor on a temporary file which contains the
original property value... */
SVN_ERR(svn_io_temp_dir(&temp_dir, pool));
- SVN_ERR(svn_cl__edit_string_externally
- (&propval, NULL,
+ SVN_ERR(svn_cmdline__edit_string_externally(
+ &propval, NULL,
opt_state->editor_cmd, temp_dir,
propval, "svn-prop",
ctx->config,
@@ -212,7 +216,7 @@ svn_cl__propedit(apr_getopt_t *os,
svn_string_t *propval, *edited_propval;
const char *base_dir = target;
const char *target_local;
- const char *local_abspath;
+ const char *abspath_or_url;
svn_node_kind_t kind;
svn_opt_revision_t peg_revision;
svn_revnum_t base_rev = SVN_INVALID_REVNUM;
@@ -221,28 +225,25 @@ svn_cl__propedit(apr_getopt_t *os,
SVN_ERR(svn_cl__check_cancel(ctx->cancel_baton));
if (!svn_path_is_url(target))
- SVN_ERR(svn_dirent_get_absolute(&local_abspath, target, subpool));
+ SVN_ERR(svn_dirent_get_absolute(&abspath_or_url, target, subpool));
+ else
+ abspath_or_url = target;
/* Propedits can only happen on HEAD or the working copy, so
the peg revision can be as unspecified. */
peg_revision.kind = svn_opt_revision_unspecified;
/* Fetch the current property. */
- SVN_ERR(svn_client_propget4(&props, pname_utf8,
- svn_path_is_url(target)
- ? target : local_abspath,
+ SVN_ERR(svn_client_propget5(&props, NULL, pname_utf8, abspath_or_url,
&peg_revision,
&(opt_state->start_revision),
&base_rev, svn_depth_empty,
NULL, ctx, subpool, subpool));
/* Get the property value. */
- propval = apr_hash_get(props,
- svn_path_is_url(target)
- ? target : local_abspath,
- APR_HASH_KEY_STRING);
+ propval = svn_hash_gets(props, abspath_or_url);
if (! propval)
- propval = svn_string_create("", subpool);
+ propval = svn_string_create_empty(subpool);
if (svn_path_is_url(target))
{
@@ -261,8 +262,8 @@ svn_cl__propedit(apr_getopt_t *os,
}
/* Split the path if it is a file path. */
- SVN_ERR(svn_wc_read_kind(&kind, ctx->wc_ctx, local_abspath, FALSE,
- subpool));
+ SVN_ERR(svn_wc_read_kind2(&kind, ctx->wc_ctx, abspath_or_url,
+ FALSE, FALSE, subpool));
if (kind == svn_node_none)
return svn_error_createf(
@@ -274,16 +275,16 @@ svn_cl__propedit(apr_getopt_t *os,
/* Run the editor on a temporary file which contains the
original property value... */
- SVN_ERR(svn_cl__edit_string_externally(&edited_propval, NULL,
- opt_state->editor_cmd,
- base_dir,
- propval,
- "svn-prop",
- ctx->config,
- svn_prop_needs_translation
- (pname_utf8),
- opt_state->encoding,
- subpool));
+ SVN_ERR(svn_cmdline__edit_string_externally(&edited_propval, NULL,
+ opt_state->editor_cmd,
+ base_dir,
+ propval,
+ "svn-prop",
+ ctx->config,
+ svn_prop_needs_translation
+ (pname_utf8),
+ opt_state->encoding,
+ subpool));
target_local = svn_path_is_url(target) ? target
: svn_dirent_local_style(target, subpool);
@@ -316,6 +317,10 @@ svn_cl__propedit(apr_getopt_t *os,
sizeof(const char *));
APR_ARRAY_PUSH(targs, const char *) = target;
+
+ SVN_ERR(svn_cl__propset_print_binary_mime_type_warning(
+ targs, pname_utf8, propval, subpool));
+
err = svn_client_propset_local(pname_utf8, edited_propval,
targs, svn_depth_empty,
opt_state->force, NULL,
@@ -329,7 +334,7 @@ svn_cl__propedit(apr_getopt_t *os,
return svn_error_trace(err);
/* Print a message if we successfully committed or if it
- was just a wc propset (but not if the user aborted an URL
+ was just a wc propset (but not if the user aborted a URL
propedit). */
if (!svn_path_is_url(target))
SVN_ERR(svn_cmdline_printf(
diff --git a/subversion/svn/propget-cmd.c b/subversion/svn/propget-cmd.c
index fcb6503..e291911 100644
--- a/subversion/svn/propget-cmd.c
+++ b/subversion/svn/propget-cmd.c
@@ -27,6 +27,7 @@
/*** Includes. ***/
+#include "svn_hash.h"
#include "svn_cmdline.h"
#include "svn_pools.h"
#include "svn_client.h"
@@ -70,11 +71,46 @@ stream_write(svn_stream_t *out,
static svn_error_t *
print_properties_xml(const char *pname,
apr_hash_t *props,
+ apr_array_header_t *inherited_props,
apr_pool_t *pool)
{
apr_array_header_t *sorted_props;
int i;
- apr_pool_t *iterpool = svn_pool_create(pool);
+ apr_pool_t *iterpool = NULL;
+ svn_stringbuf_t *sb;
+
+ if (inherited_props && inherited_props->nelts)
+ {
+ iterpool = svn_pool_create(pool);
+
+ for (i = 0; i < inherited_props->nelts; i++)
+ {
+ const char *name_local;
+ svn_prop_inherited_item_t *iprop =
+ APR_ARRAY_IDX(inherited_props, i, svn_prop_inherited_item_t *);
+ svn_string_t *propval = svn__apr_hash_index_val(
+ apr_hash_first(pool, iprop->prop_hash));
+
+ sb = NULL;
+ svn_pool_clear(iterpool);
+
+ if (svn_path_is_url(iprop->path_or_url))
+ name_local = iprop->path_or_url;
+ else
+ name_local = svn_dirent_local_style(iprop->path_or_url, iterpool);
+
+ svn_xml_make_open_tag(&sb, iterpool, svn_xml_normal, "target",
+ "path", name_local, NULL);
+
+ svn_cmdline__print_xml_prop(&sb, pname, propval, TRUE, iterpool);
+ svn_xml_make_close_tag(&sb, iterpool, "target");
+
+ SVN_ERR(svn_cl__error_checked_fputs(sb->data, stdout));
+ }
+ }
+
+ if (iterpool == NULL)
+ iterpool = svn_pool_create(iterpool);
sorted_props = svn_sort__hash(props, svn_sort_compare_items_as_paths, pool);
for (i = 0; i < sorted_props->nelts; i++)
@@ -82,38 +118,145 @@ print_properties_xml(const char *pname,
svn_sort__item_t item = APR_ARRAY_IDX(sorted_props, i, svn_sort__item_t);
const char *filename = item.key;
svn_string_t *propval = item.value;
- svn_stringbuf_t *sb = NULL;
+ sb = NULL;
svn_pool_clear(iterpool);
svn_xml_make_open_tag(&sb, iterpool, svn_xml_normal, "target",
"path", filename, NULL);
- svn_cmdline__print_xml_prop(&sb, pname, propval, iterpool);
+ svn_cmdline__print_xml_prop(&sb, pname, propval, FALSE, iterpool);
svn_xml_make_close_tag(&sb, iterpool, "target");
SVN_ERR(svn_cl__error_checked_fputs(sb->data, stdout));
}
- svn_pool_destroy(iterpool);
+ if (iterpool)
+ svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
+/* Print the property PNAME_UTF with the value PROPVAL set on ABSPATH_OR_URL
+ to the stream OUT.
+
+ If INHERITED_PROPERTY is true then the property described is inherited,
+ otherwise it is explicit.
-/* Print the properties in PROPS to the stream OUT. PROPS is a hash mapping
- * (const char *) path to (svn_string_t) property value.
- * If IS_URL is true, all paths are URLs, else all paths are local paths.
- * PNAME_UTF8 is the property name of all the properties.
- * If PRINT_FILENAMES is true, print the item's path before each property.
- * If OMIT_NEWLINE is true, don't add a newline at the end of each property.
- * If LIKE_PROPLIST is true, print everything in a more verbose format
- * like "svn proplist -v" does.
- * */
+ WC_PATH_PREFIX is the absolute path of the current working directory (and
+ is ignored if ABSPATH_OR_URL is a URL).
+
+ All other arguments are as per print_properties. */
+static svn_error_t *
+print_single_prop(svn_string_t *propval,
+ const char *target_abspath_or_url,
+ const char *abspath_or_URL,
+ const char *wc_path_prefix,
+ svn_stream_t *out,
+ const char *pname_utf8,
+ svn_boolean_t print_filenames,
+ svn_boolean_t omit_newline,
+ svn_boolean_t like_proplist,
+ svn_boolean_t inherited_property,
+ apr_pool_t *scratch_pool)
+{
+ if (print_filenames)
+ {
+ const char *header;
+
+ /* Print the file name. */
+
+ if (! svn_path_is_url(abspath_or_URL))
+ abspath_or_URL = svn_cl__local_style_skip_ancestor(wc_path_prefix,
+ abspath_or_URL,
+ scratch_pool);
+
+ /* In verbose mode, print exactly same as "proplist" does;
+ * otherwise, print a brief header. */
+ if (inherited_property)
+ {
+ if (like_proplist)
+ {
+ if (! svn_path_is_url(target_abspath_or_url))
+ target_abspath_or_url =
+ svn_cl__local_style_skip_ancestor(wc_path_prefix,
+ target_abspath_or_url,
+ scratch_pool);
+ header = apr_psprintf(
+ scratch_pool,
+ _("Inherited properties on '%s',\nfrom '%s':\n"),
+ target_abspath_or_url, abspath_or_URL);
+ }
+ else
+ {
+ header = apr_psprintf(scratch_pool, "%s - ", abspath_or_URL);
+ }
+ }
+ else
+ header = apr_psprintf(scratch_pool, like_proplist
+ ? _("Properties on '%s':\n")
+ : "%s - ", abspath_or_URL);
+ SVN_ERR(svn_cmdline_cstring_from_utf8(&header, header, scratch_pool));
+ SVN_ERR(svn_subst_translate_cstring2(header, &header,
+ APR_EOL_STR, /* 'native' eol */
+ FALSE, /* no repair */
+ NULL, /* no keywords */
+ FALSE, /* no expansion */
+ scratch_pool));
+ SVN_ERR(stream_write(out, header, strlen(header)));
+ }
+
+ if (like_proplist)
+ {
+ /* Print the property name and value just as "proplist -v" does */
+ apr_hash_t *hash = apr_hash_make(scratch_pool);
+
+ svn_hash_sets(hash, pname_utf8, propval);
+ SVN_ERR(svn_cmdline__print_prop_hash(out, hash, FALSE, scratch_pool));
+ }
+ else
+ {
+ /* If this is a special Subversion property, it is stored as
+ UTF8, so convert to the native format. */
+ if (svn_prop_needs_translation(pname_utf8))
+ SVN_ERR(svn_subst_detranslate_string(&propval, propval,
+ TRUE, scratch_pool));
+
+ SVN_ERR(stream_write(out, propval->data, propval->len));
+
+ if (! omit_newline)
+ SVN_ERR(stream_write(out, APR_EOL_STR,
+ strlen(APR_EOL_STR)));
+ }
+ return SVN_NO_ERROR;
+}
+
+/* Print the properties in PROPS and/or *INHERITED_PROPS to the stream OUT.
+ PROPS is a hash mapping (const char *) path to (svn_string_t) property
+ value. INHERITED_PROPS is a depth-first ordered array of
+ svn_prop_inherited_item_t * structures.
+
+ TARGET_ABSPATH_OR_URL is the path which inherits INHERITED_PROPS.
+
+ PROPS may be an empty hash, but is never null. INHERITED_PROPS may be
+ null.
+
+ If IS_URL is true, all paths in PROPS are URLs, else all paths are local
+ paths.
+
+ PNAME_UTF8 is the property name of all the properties.
+
+ If PRINT_FILENAMES is true, print the item's path before each property.
+
+ If OMIT_NEWLINE is true, don't add a newline at the end of each property.
+
+ If LIKE_PROPLIST is true, print everything in a more verbose format
+ like "svn proplist -v" does. */
static svn_error_t *
print_properties(svn_stream_t *out,
- svn_boolean_t is_url,
+ const char *target_abspath_or_url,
const char *pname_utf8,
apr_hash_t *props,
+ apr_array_header_t *inherited_props,
svn_boolean_t print_filenames,
svn_boolean_t omit_newline,
svn_boolean_t like_proplist,
@@ -126,6 +269,24 @@ print_properties(svn_stream_t *out,
SVN_ERR(svn_dirent_get_absolute(&path_prefix, "", pool));
+ if (inherited_props)
+ {
+ svn_pool_clear(iterpool);
+
+ for (i = 0; i < inherited_props->nelts; i++)
+ {
+ svn_prop_inherited_item_t *iprop =
+ APR_ARRAY_IDX(inherited_props, i, svn_prop_inherited_item_t *);
+ svn_string_t *propval = svn__apr_hash_index_val(apr_hash_first(pool,
+ iprop->prop_hash));
+ SVN_ERR(print_single_prop(propval, target_abspath_or_url,
+ iprop->path_or_url,
+ path_prefix, out, pname_utf8,
+ print_filenames, omit_newline,
+ like_proplist, TRUE, iterpool));
+ }
+ }
+
sorted_props = svn_sort__hash(props, svn_sort_compare_items_as_paths, pool);
for (i = 0; i < sorted_props->nelts; i++)
{
@@ -135,53 +296,10 @@ print_properties(svn_stream_t *out,
svn_pool_clear(iterpool);
- if (print_filenames)
- {
- const char *header;
-
- /* Print the file name. */
-
- if (! is_url)
- filename = svn_cl__local_style_skip_ancestor(path_prefix, filename,
- iterpool);
-
- /* In verbose mode, print exactly same as "proplist" does;
- * otherwise, print a brief header. */
- header = apr_psprintf(iterpool, like_proplist
- ? _("Properties on '%s':\n")
- : "%s - ", filename);
- SVN_ERR(svn_cmdline_cstring_from_utf8(&header, header, iterpool));
- SVN_ERR(svn_subst_translate_cstring2(header, &header,
- APR_EOL_STR, /* 'native' eol */
- FALSE, /* no repair */
- NULL, /* no keywords */
- FALSE, /* no expansion */
- iterpool));
- SVN_ERR(stream_write(out, header, strlen(header)));
- }
-
- if (like_proplist)
- {
- /* Print the property name and value just as "proplist -v" does */
- apr_hash_t *hash = apr_hash_make(iterpool);
-
- apr_hash_set(hash, pname_utf8, APR_HASH_KEY_STRING, propval);
- SVN_ERR(svn_cl__print_prop_hash(out, hash, FALSE, iterpool));
- }
- else
- {
- /* If this is a special Subversion property, it is stored as
- UTF8, so convert to the native format. */
- if (svn_prop_needs_translation(pname_utf8))
- SVN_ERR(svn_subst_detranslate_string(&propval, propval,
- TRUE, iterpool));
-
- SVN_ERR(stream_write(out, propval->data, propval->len));
-
- if (! omit_newline)
- SVN_ERR(stream_write(out, APR_EOL_STR,
- strlen(APR_EOL_STR)));
- }
+ SVN_ERR(print_single_prop(propval, target_abspath_or_url, filename,
+ path_prefix, out, pname_utf8, print_filenames,
+ omit_newline, like_proplist, FALSE,
+ iterpool));
}
svn_pool_destroy(iterpool);
@@ -234,6 +352,11 @@ svn_cl__propget(apr_getopt_t *os,
const char *URL;
svn_string_t *propval;
+ if (opt_state->show_inherited_props)
+ return svn_error_create(
+ SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("--show-inherited-props can't be used with --revprop"));
+
SVN_ERR(svn_cl__revprop_prepare(&opt_state->start_revision, targets,
&URL, ctx, pool));
@@ -255,7 +378,8 @@ svn_cl__propget(apr_getopt_t *os,
"revprops",
"rev", revstr, NULL);
- svn_cmdline__print_xml_prop(&sb, pname_utf8, propval, pool);
+ svn_cmdline__print_xml_prop(&sb, pname_utf8, propval, FALSE,
+ pool);
svn_xml_make_close_tag(&sb, pool, "revprops");
@@ -310,6 +434,7 @@ svn_cl__propget(apr_getopt_t *os,
svn_boolean_t like_proplist;
const char *truepath;
svn_opt_revision_t peg_revision;
+ apr_array_header_t *inherited_props;
svn_pool_clear(subpool);
SVN_ERR(svn_cl__check_cancel(ctx->cancel_baton));
@@ -321,12 +446,15 @@ svn_cl__propget(apr_getopt_t *os,
if (!svn_path_is_url(truepath))
SVN_ERR(svn_dirent_get_absolute(&truepath, truepath, subpool));
- SVN_ERR(svn_client_propget4(&props, pname_utf8, truepath,
- &peg_revision,
- &(opt_state->start_revision),
- NULL, opt_state->depth,
- opt_state->changelists, ctx, subpool,
- subpool));
+ SVN_ERR(svn_client_propget5(
+ &props,
+ opt_state->show_inherited_props ? &inherited_props : NULL,
+ pname_utf8, truepath,
+ &peg_revision,
+ &(opt_state->start_revision),
+ NULL, opt_state->depth,
+ opt_state->changelists, ctx, subpool,
+ subpool));
/* Any time there is more than one thing to print, or where
the path associated with a printed thing is not obvious,
@@ -335,17 +463,24 @@ svn_cl__propget(apr_getopt_t *os,
print_filenames = ((opt_state->depth > svn_depth_empty
|| targets->nelts > 1
|| apr_hash_count(props) > 1
- || opt_state->verbose)
+ || opt_state->verbose
+ || opt_state->show_inherited_props)
&& (! opt_state->strict));
omit_newline = opt_state->strict;
like_proplist = opt_state->verbose && !opt_state->strict;
if (opt_state->xml)
- SVN_ERR(print_properties_xml(pname_utf8, props, subpool));
+ SVN_ERR(print_properties_xml(
+ pname_utf8, props,
+ opt_state->show_inherited_props ? inherited_props : NULL,
+ subpool));
else
- SVN_ERR(print_properties(out, svn_path_is_url(target), pname_utf8,
- props, print_filenames, omit_newline,
- like_proplist, subpool));
+ SVN_ERR(print_properties(
+ out, truepath, pname_utf8,
+ props,
+ opt_state->show_inherited_props ? inherited_props : NULL,
+ print_filenames,
+ omit_newline, like_proplist, subpool));
}
if (opt_state->xml)
diff --git a/subversion/svn/proplist-cmd.c b/subversion/svn/proplist-cmd.c
index 64cb055..fe23a67 100644
--- a/subversion/svn/proplist-cmd.c
+++ b/subversion/svn/proplist-cmd.c
@@ -35,8 +35,11 @@
#include "svn_dirent_uri.h"
#include "svn_path.h"
#include "svn_xml.h"
+#include "svn_props.h"
#include "cl.h"
+#include "private/svn_cmdline_private.h"
+
#include "svn_private_config.h"
typedef struct proplist_baton_t
@@ -48,43 +51,81 @@ typedef struct proplist_baton_t
/*** Code. ***/
-/* This implements the svn_proplist_receiver_t interface, printing XML to
+/* This implements the svn_proplist_receiver2_t interface, printing XML to
stdout. */
static svn_error_t *
proplist_receiver_xml(void *baton,
const char *path,
apr_hash_t *prop_hash,
+ apr_array_header_t *inherited_props,
apr_pool_t *pool)
{
svn_cl__opt_state_t *opt_state = ((proplist_baton_t *)baton)->opt_state;
svn_boolean_t is_url = ((proplist_baton_t *)baton)->is_url;
- svn_stringbuf_t *sb = NULL;
+ svn_stringbuf_t *sb;
const char *name_local;
+ if (inherited_props && inherited_props->nelts)
+ {
+ int i;
+ apr_pool_t *iterpool = svn_pool_create(pool);
+
+ for (i = 0; i < inherited_props->nelts; i++)
+ {
+ svn_prop_inherited_item_t *iprop =
+ APR_ARRAY_IDX(inherited_props, i, svn_prop_inherited_item_t *);
+
+ sb = NULL;
+
+ if (svn_path_is_url(iprop->path_or_url))
+ name_local = iprop->path_or_url;
+ else
+ name_local = svn_dirent_local_style(iprop->path_or_url, iterpool);
+
+ svn_xml_make_open_tag(&sb, iterpool, svn_xml_normal, "target",
+ "path", name_local, NULL);
+ SVN_ERR(svn_cmdline__print_xml_prop_hash(&sb, iprop->prop_hash,
+ (! opt_state->verbose),
+ TRUE, iterpool));
+ svn_xml_make_close_tag(&sb, iterpool, "target");
+ SVN_ERR(svn_cl__error_checked_fputs(sb->data, stdout));
+ }
+ svn_pool_destroy(iterpool);
+ }
+
if (! is_url)
name_local = svn_dirent_local_style(path, pool);
else
name_local = path;
- /* "<target ...>" */
- svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "target",
- "path", name_local, NULL);
+ sb = NULL;
+
- SVN_ERR(svn_cl__print_xml_prop_hash(&sb, prop_hash, (! opt_state->verbose),
- pool));
+ if (prop_hash)
+ {
+ /* "<target ...>" */
+ svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "target",
+ "path", name_local, NULL);
- /* "</target>" */
- svn_xml_make_close_tag(&sb, pool, "target");
+ SVN_ERR(svn_cmdline__print_xml_prop_hash(&sb, prop_hash,
+ (! opt_state->verbose),
+ FALSE, pool));
+
+ /* "</target>" */
+ svn_xml_make_close_tag(&sb, pool, "target");
+ SVN_ERR(svn_cl__error_checked_fputs(sb->data, stdout));
+ }
- return svn_cl__error_checked_fputs(sb->data, stdout);
+ return SVN_NO_ERROR;
}
-/* This implements the svn_proplist_receiver_t interface. */
+/* This implements the svn_proplist_receiver2_t interface. */
static svn_error_t *
proplist_receiver(void *baton,
const char *path,
apr_hash_t *prop_hash,
+ apr_array_header_t *inherited_props,
apr_pool_t *pool)
{
svn_cl__opt_state_t *opt_state = ((proplist_baton_t *)baton)->opt_state;
@@ -96,10 +137,48 @@ proplist_receiver(void *baton,
else
name_local = path;
- if (!opt_state->quiet)
- SVN_ERR(svn_cmdline_printf(pool, _("Properties on '%s':\n"), name_local));
- return svn_cl__print_prop_hash(NULL, prop_hash, (! opt_state->verbose),
- pool);
+ if (inherited_props)
+ {
+ int i;
+ apr_pool_t *iterpool = svn_pool_create(pool);
+
+ for (i = 0; i < inherited_props->nelts; i++)
+ {
+ svn_prop_inherited_item_t *iprop =
+ APR_ARRAY_IDX(inherited_props, i, svn_prop_inherited_item_t *);
+
+ svn_pool_clear(iterpool);
+
+ if (!opt_state->quiet)
+ {
+ if (svn_path_is_url(iprop->path_or_url))
+ SVN_ERR(svn_cmdline_printf(
+ iterpool, _("Inherited properties on '%s',\nfrom '%s':\n"),
+ name_local, iprop->path_or_url));
+ else
+ SVN_ERR(svn_cmdline_printf(
+ iterpool, _("Inherited properties on '%s',\nfrom '%s':\n"),
+ name_local, svn_dirent_local_style(iprop->path_or_url,
+ iterpool)));
+ }
+
+ SVN_ERR(svn_cmdline__print_prop_hash(NULL, iprop->prop_hash,
+ (! opt_state->verbose),
+ iterpool));
+ }
+ svn_pool_destroy(iterpool);
+ }
+
+ if (prop_hash && apr_hash_count(prop_hash))
+ {
+ if (!opt_state->quiet)
+ SVN_ERR(svn_cmdline_printf(pool, _("Properties on '%s':\n"),
+ name_local));
+ SVN_ERR(svn_cmdline__print_prop_hash(NULL, prop_hash,
+ (! opt_state->verbose), pool));
+ }
+
+ return SVN_NO_ERROR;
}
@@ -129,6 +208,11 @@ svn_cl__proplist(apr_getopt_t *os,
const char *URL;
apr_hash_t *proplist;
+ if (opt_state->show_inherited_props)
+ return svn_error_create(
+ SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("--show-inherited-props can't be used with --revprop"));
+
SVN_ERR(svn_cl__revprop_prepare(&opt_state->start_revision, targets,
&URL, ctx, scratch_pool));
@@ -147,8 +231,9 @@ svn_cl__proplist(apr_getopt_t *os,
svn_xml_make_open_tag(&sb, scratch_pool, svn_xml_normal,
"revprops",
"rev", revstr, NULL);
- SVN_ERR(svn_cl__print_xml_prop_hash
- (&sb, proplist, (! opt_state->verbose), scratch_pool));
+ SVN_ERR(svn_cmdline__print_xml_prop_hash(&sb, proplist,
+ (! opt_state->verbose),
+ FALSE, scratch_pool));
svn_xml_make_close_tag(&sb, scratch_pool, "revprops");
SVN_ERR(svn_cl__error_checked_fputs(sb->data, stdout));
@@ -161,15 +246,16 @@ svn_cl__proplist(apr_getopt_t *os,
_("Unversioned properties on revision %ld:\n"),
rev));
- SVN_ERR(svn_cl__print_prop_hash
- (NULL, proplist, (! opt_state->verbose), scratch_pool));
+ SVN_ERR(svn_cmdline__print_prop_hash(NULL, proplist,
+ (! opt_state->verbose),
+ scratch_pool));
}
}
else /* operate on normal, versioned properties (not revprops) */
{
int i;
apr_pool_t *iterpool;
- svn_proplist_receiver_t pl_receiver;
+ svn_proplist_receiver2_t pl_receiver;
if (opt_state->xml)
{
@@ -203,10 +289,11 @@ svn_cl__proplist(apr_getopt_t *os,
iterpool));
SVN_ERR(svn_cl__try(
- svn_client_proplist3(truepath, &peg_revision,
+ svn_client_proplist4(truepath, &peg_revision,
&(opt_state->start_revision),
opt_state->depth,
opt_state->changelists,
+ opt_state->show_inherited_props,
pl_receiver, &pl_baton,
ctx, iterpool),
errors, opt_state->quiet,
@@ -223,12 +310,12 @@ svn_cl__proplist(apr_getopt_t *os,
if (errors->nelts > 0)
{
svn_error_t *err;
-
+
err = svn_error_create(SVN_ERR_ILLEGAL_TARGET, NULL, NULL);
for (i = 0; i < errors->nelts; i++)
{
apr_status_t status = APR_ARRAY_IDX(errors, i, apr_status_t);
-
+
if (status == SVN_ERR_ENTRY_NOT_FOUND)
err = svn_error_quick_wrap(err,
_("Could not display properties "
diff --git a/subversion/svn/props.c b/subversion/svn/props.c
index f08f18c..2a41ac8 100644
--- a/subversion/svn/props.c
+++ b/subversion/svn/props.c
@@ -27,7 +27,10 @@
/*** Includes. ***/
+#include <stdlib.h>
+
#include <apr_hash.h>
+#include "svn_hash.h"
#include "svn_cmdline.h"
#include "svn_string.h"
#include "svn_error.h"
@@ -40,10 +43,10 @@
#include "svn_base64.h"
#include "cl.h"
+#include "private/svn_string_private.h"
#include "private/svn_cmdline_private.h"
#include "svn_private_config.h"
-
svn_error_t *
@@ -81,144 +84,273 @@ svn_cl__revprop_prepare(const svn_opt_revision_t *revision,
return SVN_NO_ERROR;
}
-
-svn_error_t *
-svn_cl__print_prop_hash(svn_stream_t *out,
- apr_hash_t *prop_hash,
- svn_boolean_t names_only,
- apr_pool_t *pool)
+void
+svn_cl__check_boolean_prop_val(const char *propname, const char *propval,
+ apr_pool_t *pool)
{
- apr_array_header_t *sorted_props;
- int i;
+ svn_stringbuf_t *propbuf;
- sorted_props = svn_sort__hash(prop_hash, svn_sort_compare_items_lexically,
- pool);
- for (i = 0; i < sorted_props->nelts; i++)
- {
- svn_sort__item_t item = APR_ARRAY_IDX(sorted_props, i, svn_sort__item_t);
- const char *pname = item.key;
- svn_string_t *propval = item.value;
- const char *pname_stdout;
- apr_size_t len;
+ if (!svn_prop_is_boolean(propname))
+ return;
- if (svn_prop_needs_translation(pname))
- SVN_ERR(svn_subst_detranslate_string(&propval, propval,
- TRUE, pool));
+ propbuf = svn_stringbuf_create(propval, pool);
+ svn_stringbuf_strip_whitespace(propbuf);
- SVN_ERR(svn_cmdline_cstring_from_utf8(&pname_stdout, pname, pool));
+ if (propbuf->data[0] == '\0'
+ || svn_cstring_casecmp(propbuf->data, "0") == 0
+ || svn_cstring_casecmp(propbuf->data, "no") == 0
+ || svn_cstring_casecmp(propbuf->data, "off") == 0
+ || svn_cstring_casecmp(propbuf->data, "false") == 0)
+ {
+ svn_error_t *err = svn_error_createf
+ (SVN_ERR_BAD_PROPERTY_VALUE, NULL,
+ _("To turn off the %s property, use 'svn propdel';\n"
+ "setting the property to '%s' will not turn it off."),
+ propname, propval);
+ svn_handle_warning2(stderr, err, "svn: ");
+ svn_error_clear(err);
+ }
+}
- if (out)
- {
- pname_stdout = apr_psprintf(pool, " %s\n", pname_stdout);
- SVN_ERR(svn_subst_translate_cstring2(pname_stdout, &pname_stdout,
- APR_EOL_STR, /* 'native' eol */
- FALSE, /* no repair */
- NULL, /* no keywords */
- FALSE, /* no expansion */
- pool));
-
- len = strlen(pname_stdout);
- SVN_ERR(svn_stream_write(out, pname_stdout, &len));
- }
- else
- {
- /* ### We leave these printfs for now, since if propval wasn't
- translated above, we don't know anything about its encoding.
- In fact, it might be binary data... */
- printf(" %s\n", pname_stdout);
- }
- if (!names_only)
- {
- /* Add an extra newline to the value before indenting, so that
- * every line of output has the indentation whether the value
- * already ended in a newline or not. */
- const char *newval = apr_psprintf(pool, "%s\n", propval->data);
- const char *indented_newval = svn_cl__indent_string(newval,
- " ",
- pool);
- if (out)
- {
- len = strlen(indented_newval);
- SVN_ERR(svn_stream_write(out, indented_newval, &len));
- }
- else
- {
- printf("%s", indented_newval);
- }
- }
- }
+/* Context for sorting property names */
+struct simprop_context_t
+{
+ svn_string_t name; /* The name of the property we're comparing with */
+ svn_membuf_t buffer; /* Buffer for similarity testing */
+};
- return SVN_NO_ERROR;
+struct simprop_t
+{
+ const char *propname; /* The original svn: property name */
+ svn_string_t name; /* The property name without the svn: prefix */
+ unsigned int score; /* The similarity score */
+ apr_size_t diff; /* Number of chars different from context.name */
+ struct simprop_context_t *context; /* Sorting context for qsort() */
+};
+
+/* Similarity test between two property names */
+static APR_INLINE unsigned int
+simprop_key_diff(const svn_string_t *key, const svn_string_t *ctx,
+ svn_membuf_t *buffer, apr_size_t *diff)
+{
+ apr_size_t lcs;
+ const unsigned int score = svn_string__similarity(key, ctx, buffer, &lcs);
+ if (key->len > ctx->len)
+ *diff = key->len - lcs;
+ else
+ *diff = ctx->len - lcs;
+ return score;
}
-svn_error_t *
-svn_cl__print_xml_prop_hash(svn_stringbuf_t **outstr,
- apr_hash_t *prop_hash,
- svn_boolean_t names_only,
- apr_pool_t *pool)
+/* Key comparator for qsort for simprop_t */
+static int
+simprop_compare(const void *pkeya, const void *pkeyb)
{
- apr_array_header_t *sorted_props;
- int i;
+ struct simprop_t *const keya = *(struct simprop_t *const *)pkeya;
+ struct simprop_t *const keyb = *(struct simprop_t *const *)pkeyb;
+ struct simprop_context_t *const context = keya->context;
+
+ if (keya->score == -1)
+ keya->score = simprop_key_diff(&keya->name, &context->name,
+ &context->buffer, &keya->diff);
+ if (keyb->score == -1)
+ keyb->score = simprop_key_diff(&keyb->name, &context->name,
+ &context->buffer, &keyb->diff);
+
+ return (keya->score < keyb->score ? 1
+ : (keya->score > keyb->score ? -1
+ : (keya->diff > keyb->diff ? 1
+ : (keya->diff < keyb->diff ? -1 : 0))));
+}
- if (*outstr == NULL)
- *outstr = svn_stringbuf_create("", pool);
- sorted_props = svn_sort__hash(prop_hash, svn_sort_compare_items_lexically,
- pool);
- for (i = 0; i < sorted_props->nelts; i++)
+static const char*
+force_prop_option_message(svn_cl__prop_use_t prop_use, const char *prop_name,
+ apr_pool_t *scratch_pool)
+{
+ switch (prop_use)
{
- svn_sort__item_t item = APR_ARRAY_IDX(sorted_props, i, svn_sort__item_t);
- const char *pname = item.key;
- svn_string_t *propval = item.value;
-
- if (names_only)
- {
- svn_xml_make_open_tag(outstr, pool, svn_xml_self_closing, "property",
- "name", pname, NULL);
- }
- else
- {
- const char *pname_out;
+ case svn_cl__prop_use_set:
+ return apr_psprintf(
+ scratch_pool,
+ _("(To set the '%s' property, re-run with '--force'.)"),
+ prop_name);
+ case svn_cl__prop_use_edit:
+ return apr_psprintf(
+ scratch_pool,
+ _("(To edit the '%s' property, re-run with '--force'.)"),
+ prop_name);
+ case svn_cl__prop_use_use:
+ default:
+ return apr_psprintf(
+ scratch_pool,
+ _("(To use the '%s' property, re-run with '--force'.)"),
+ prop_name);
+ }
+}
- if (svn_prop_needs_translation(pname))
- SVN_ERR(svn_subst_detranslate_string(&propval, propval,
- TRUE, pool));
+static const char*
+wrong_prop_error_message(svn_cl__prop_use_t prop_use, const char *prop_name,
+ apr_pool_t *scratch_pool)
+{
+ switch (prop_use)
+ {
+ case svn_cl__prop_use_set:
+ return apr_psprintf(
+ scratch_pool,
+ _("'%s' is not a valid %s property name;"
+ " re-run with '--force' to set it"),
+ prop_name, SVN_PROP_PREFIX);
+ case svn_cl__prop_use_edit:
+ return apr_psprintf(
+ scratch_pool,
+ _("'%s' is not a valid %s property name;"
+ " re-run with '--force' to edit it"),
+ prop_name, SVN_PROP_PREFIX);
+ case svn_cl__prop_use_use:
+ default:
+ return apr_psprintf(
+ scratch_pool,
+ _("'%s' is not a valid %s property name;"
+ " re-run with '--force' to use it"),
+ prop_name, SVN_PROP_PREFIX);
+ }
+}
- SVN_ERR(svn_cmdline_cstring_from_utf8(&pname_out, pname, pool));
+svn_error_t *
+svn_cl__check_svn_prop_name(const char *propname,
+ svn_boolean_t revprop,
+ svn_cl__prop_use_t prop_use,
+ apr_pool_t *scratch_pool)
+{
+ static const char *const nodeprops[] =
+ {
+ SVN_PROP_NODE_ALL_PROPS
+ };
+ static const apr_size_t nodeprops_len = sizeof(nodeprops)/sizeof(*nodeprops);
- svn_cmdline__print_xml_prop(outstr, pname_out, propval, pool);
+ static const char *const revprops[] =
+ {
+ SVN_PROP_REVISION_ALL_PROPS
+ };
+ static const apr_size_t revprops_len = sizeof(revprops)/sizeof(*revprops);
+
+ const char *const *const proplist = (revprop ? revprops : nodeprops);
+ const apr_size_t numprops = (revprop ? revprops_len : nodeprops_len);
+
+ struct simprop_t **propkeys;
+ struct simprop_t *propbuf;
+ apr_size_t i;
+
+ struct simprop_context_t context;
+ svn_string_t prefix;
+
+ context.name.data = propname;
+ context.name.len = strlen(propname);
+ prefix.data = SVN_PROP_PREFIX;
+ prefix.len = strlen(SVN_PROP_PREFIX);
+
+ svn_membuf__create(&context.buffer, 0, scratch_pool);
+
+ /* First, check if the name is even close to being in the svn: namespace.
+ It must contain a colon in the right place, and we only allow
+ one-char typos or a single transposition. */
+ if (context.name.len < prefix.len
+ || context.name.data[prefix.len - 1] != prefix.data[prefix.len - 1])
+ return SVN_NO_ERROR; /* Wrong prefix, ignore */
+ else
+ {
+ apr_size_t lcs;
+ const apr_size_t name_len = context.name.len;
+ context.name.len = prefix.len; /* Only check up to the prefix length */
+ svn_string__similarity(&context.name, &prefix, &context.buffer, &lcs);
+ context.name.len = name_len; /* Restore the original propname length */
+ if (lcs < prefix.len - 1)
+ return SVN_NO_ERROR; /* Wrong prefix, ignore */
+
+ /* If the prefix is slightly different, the rest must be
+ identical in order to trigger the error. */
+ if (lcs == prefix.len - 1)
+ {
+ for (i = 0; i < numprops; ++i)
+ {
+ if (0 == strcmp(proplist[i] + prefix.len, propname + prefix.len))
+ return svn_error_createf(
+ SVN_ERR_CLIENT_PROPERTY_NAME, NULL,
+ _("'%s' is not a valid %s property name;"
+ " did you mean '%s'?\n%s"),
+ propname, SVN_PROP_PREFIX, proplist[i],
+ force_prop_option_message(prop_use, propname, scratch_pool));
+ }
+ return SVN_NO_ERROR;
}
}
- return SVN_NO_ERROR;
-}
-
+ /* Now find the closest match from amongst the set of reserved
+ node or revision property names. Skip the prefix while matching,
+ we already know that it's the same and looking at it would only
+ skew the results. */
+ propkeys = apr_palloc(scratch_pool,
+ numprops * sizeof(struct simprop_t*));
+ propbuf = apr_palloc(scratch_pool,
+ numprops * sizeof(struct simprop_t));
+ context.name.data += prefix.len;
+ context.name.len -= prefix.len;
+ for (i = 0; i < numprops; ++i)
+ {
+ propkeys[i] = &propbuf[i];
+ propbuf[i].propname = proplist[i];
+ propbuf[i].name.data = proplist[i] + prefix.len;
+ propbuf[i].name.len = strlen(propbuf[i].name.data);
+ propbuf[i].score = (unsigned int)-1;
+ propbuf[i].context = &context;
+ }
-void
-svn_cl__check_boolean_prop_val(const char *propname, const char *propval,
- apr_pool_t *pool)
-{
- svn_stringbuf_t *propbuf;
+ qsort(propkeys, numprops, sizeof(*propkeys), simprop_compare);
- if (!svn_prop_is_boolean(propname))
- return;
+ if (0 == propkeys[0]->diff)
+ return SVN_NO_ERROR; /* We found an exact match. */
- propbuf = svn_stringbuf_create(propval, pool);
- svn_stringbuf_strip_whitespace(propbuf);
+ /* See if we can suggest a sane alternative spelling */
+ for (i = 0; i < numprops; ++i)
+ if (propkeys[i]->score < 666) /* 2/3 similarity required */
+ break;
- if (propbuf->data[0] == '\0'
- || strcmp(propbuf->data, "no") == 0
- || strcmp(propbuf->data, "off") == 0
- || strcmp(propbuf->data, "false") == 0)
+ switch (i)
{
- svn_error_t *err = svn_error_createf
- (SVN_ERR_BAD_PROPERTY_VALUE, NULL,
- _("To turn off the %s property, use 'svn propdel';\n"
- "setting the property to '%s' will not turn it off."),
- propname, propval);
- svn_handle_warning2(stderr, err, "svn: ");
- svn_error_clear(err);
+ case 0:
+ /* The best alternative isn't good enough */
+ return svn_error_create(
+ SVN_ERR_CLIENT_PROPERTY_NAME, NULL,
+ wrong_prop_error_message(prop_use, propname, scratch_pool));
+
+ case 1:
+ /* There is only one good candidate */
+ return svn_error_createf(
+ SVN_ERR_CLIENT_PROPERTY_NAME, NULL,
+ _("'%s' is not a valid %s property name; did you mean '%s'?\n%s"),
+ propname, SVN_PROP_PREFIX, propkeys[0]->propname,
+ force_prop_option_message(prop_use, propname, scratch_pool));
+
+ case 2:
+ /* Suggest a list of the most likely candidates */
+ return svn_error_createf(
+ SVN_ERR_CLIENT_PROPERTY_NAME, NULL,
+ _("'%s' is not a valid %s property name\n"
+ "Did you mean '%s' or '%s'?\n%s"),
+ propname, SVN_PROP_PREFIX,
+ propkeys[0]->propname, propkeys[1]->propname,
+ force_prop_option_message(prop_use, propname, scratch_pool));
+
+ default:
+ /* Never suggest more than three candidates */
+ return svn_error_createf(
+ SVN_ERR_CLIENT_PROPERTY_NAME, NULL,
+ _("'%s' is not a valid %s property name\n"
+ "Did you mean '%s', '%s' or '%s'?\n%s"),
+ propname, SVN_PROP_PREFIX,
+ propkeys[0]->propname, propkeys[1]->propname, propkeys[2]->propname,
+ force_prop_option_message(prop_use, propname, scratch_pool));
}
}
-
diff --git a/subversion/svn/propset-cmd.c b/subversion/svn/propset-cmd.c
index 33b4b5d..07b9bbd 100644
--- a/subversion/svn/propset-cmd.c
+++ b/subversion/svn/propset-cmd.c
@@ -67,6 +67,9 @@ svn_cl__propset(apr_getopt_t *os,
return svn_error_createf(SVN_ERR_CLIENT_PROPERTY_NAME, NULL,
_("'%s' is not a valid Subversion property name"),
pname_utf8);
+ if (!opt_state->force)
+ SVN_ERR(svn_cl__check_svn_prop_name(pname_utf8, opt_state->revprop,
+ svn_cl__prop_use_set, scratch_pool));
/* Get the PROPVAL from either an external file, or from the command
line. */
@@ -170,6 +173,11 @@ svn_cl__propset(apr_getopt_t *os,
}
}
+ SVN_ERR(svn_cl__propset_print_binary_mime_type_warning(targets,
+ pname_utf8,
+ propval,
+ scratch_pool));
+
SVN_ERR(svn_client_propset_local(pname_utf8, propval, targets,
opt_state->depth, opt_state->force,
opt_state->changelists, ctx,
diff --git a/subversion/svn/relocate-cmd.c b/subversion/svn/relocate-cmd.c
index f07d4ae..fe50f66 100644
--- a/subversion/svn/relocate-cmd.c
+++ b/subversion/svn/relocate-cmd.c
@@ -50,7 +50,7 @@ svn_cl__relocate(apr_getopt_t *os,
svn_client_ctx_t *ctx = ((svn_cl__cmd_baton_t *) baton)->ctx;
svn_boolean_t ignore_externals = opt_state->ignore_externals;
apr_array_header_t *targets;
- const char *from = NULL, *to = NULL, *path;
+ const char *from, *to, *path;
/* We've got two different syntaxes to support:
diff --git a/subversion/svn/resolve-cmd.c b/subversion/svn/resolve-cmd.c
index 4ce57be..ce4818e 100644
--- a/subversion/svn/resolve-cmd.c
+++ b/subversion/svn/resolve-cmd.c
@@ -26,9 +26,6 @@
/*** Includes. ***/
-#define APR_WANT_STDIO
-#include <apr_want.h>
-
#include "svn_path.h"
#include "svn_client.h"
#include "svn_error.h"
@@ -54,6 +51,7 @@ svn_cl__resolve(apr_getopt_t *os,
apr_array_header_t *targets;
int i;
apr_pool_t *iterpool;
+ svn_boolean_t had_error = FALSE;
switch (opt_state->accept_which)
{
@@ -76,8 +74,11 @@ svn_cl__resolve(apr_getopt_t *os,
conflict_choice = svn_wc_conflict_choose_mine_full;
break;
case svn_cl__accept_unspecified:
- return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
- _("missing --accept option"));
+ if (opt_state->non_interactive)
+ return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("missing --accept option"));
+ conflict_choice = svn_wc_conflict_choose_unspecified;
+ break;
default:
return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("invalid 'accept' ARG"));
@@ -88,10 +89,15 @@ svn_cl__resolve(apr_getopt_t *os,
ctx, FALSE,
scratch_pool));
if (! targets->nelts)
- return svn_error_create(SVN_ERR_CL_INSUFFICIENT_ARGS, 0, NULL);
+ svn_opt_push_implicit_dot_target(targets, scratch_pool);
if (opt_state->depth == svn_depth_unknown)
- opt_state->depth = svn_depth_empty;
+ {
+ if (opt_state->accept_which == svn_cl__accept_unspecified)
+ opt_state->depth = svn_depth_infinity;
+ else
+ opt_state->depth = svn_depth_empty;
+ }
SVN_ERR(svn_cl__eat_peg_revisions(&targets, targets, scratch_pool));
@@ -111,9 +117,15 @@ svn_cl__resolve(apr_getopt_t *os,
{
svn_handle_warning2(stderr, err, "svn: ");
svn_error_clear(err);
+ had_error = TRUE;
}
}
svn_pool_destroy(iterpool);
+ if (had_error)
+ return svn_error_create(SVN_ERR_CL_ERROR_PROCESSING_EXTERNALS, NULL,
+ _("Failure occurred resolving one or more "
+ "conflicts"));
+
return SVN_NO_ERROR;
}
diff --git a/subversion/svn/resolved-cmd.c b/subversion/svn/resolved-cmd.c
index 0db3b4b..51e2da1 100644
--- a/subversion/svn/resolved-cmd.c
+++ b/subversion/svn/resolved-cmd.c
@@ -26,9 +26,6 @@
/*** Includes. ***/
-#define APR_WANT_STDIO
-#include <apr_want.h>
-
#include "svn_path.h"
#include "svn_client.h"
#include "svn_error.h"
diff --git a/subversion/svn/schema/diff.rnc b/subversion/svn/schema/diff.rnc
index 7ac51da..ab89b81 100644
--- a/subversion/svn/schema/diff.rnc
+++ b/subversion/svn/schema/diff.rnc
@@ -35,5 +35,5 @@ attlist.path &=
## The kind of the entry.
attribute kind { "dir" | "file" },
## The action performed against this path. This terminology
- ## was chosen for consistencey from 'svn list'.
+ ## was chosen for consistency with 'svn status'.
attribute item { "none" | "added" | "modified" | "deleted" }
diff --git a/subversion/svn/schema/info.rnc b/subversion/svn/schema/info.rnc
index 6ed2643..3dc43f6 100644
--- a/subversion/svn/schema/info.rnc
+++ b/subversion/svn/schema/info.rnc
@@ -27,8 +27,8 @@ info = element info { entry* }
entry =
element entry {
- attlist.entry, url?, repository?, wc-info?, commit?, conflict?, lock?,
- tree-conflict?
+ attlist.entry, url?, relative-url?, repository?, wc-info?,
+ commit?, conflict?, lock?, tree-conflict?
}
attlist.entry &=
## Local path.
@@ -41,6 +41,9 @@ attlist.entry &=
## URL of this item in the repository.
url = element url { xsd:anyURI }
+## Repository relative URL (^/...) of this item in the repository.
+relative-url = element relative-url { string }
+
## Information of this item's repository.
repository = element repository { root?, uuid? }
@@ -61,7 +64,9 @@ wc-info =
depth?,
text-updated?,
prop-updated?,
- checksum?
+ checksum?,
+ moved-from?,
+ moved-to?
}
wcroot-abspath = element wcroot-abspath { string }
@@ -84,6 +89,10 @@ prop-updated = element prop-updated { xsd:dateTime }
checksum = element checksum { md5sum.type }
+moved-from = element moved-from { string }
+
+moved-to = element moved-to { string }
+
conflict =
element conflict {
prev-base-file,
@@ -118,7 +127,8 @@ attlist.tree-conflict &=
## Operation causing the tree conflict.
attribute operation { "update" | "merge" | "switch" },
## Operation's action on the victim.
- attribute action { "edit" | "add" | "delete" },
+ attribute action { "edit" | "add" | "delete" | "replace" },
## Local reason for the conflict.
attribute reason { "edit" | "obstruction" | "delete" | "add" |
- "missing" | "unversioned" }
+ "missing" | "unversioned" | "replace" |
+ "moved-away" | "moved-here" }
diff --git a/subversion/svn/schema/status.rnc b/subversion/svn/schema/status.rnc
index 6e55fa1..73d0ca0 100644
--- a/subversion/svn/schema/status.rnc
+++ b/subversion/svn/schema/status.rnc
@@ -70,7 +70,11 @@ attlist.wc-status &=
attribute switched { "true" | "false" }?,
## Tree-conflict status of the item.
[ a:defaultValue = "false" ]
- attribute tree-conflicted { "true" | "false" }?
+ attribute tree-conflicted { "true" | "false" }?,
+ ## If root of a move-here, the local path to the move source.
+ attribute moved-from { text }?,
+ ## If root of a move-away, the local path to the move destination.
+ attribute moved-to { text }?
## Status in repository (if --update was specified).
repos-status = element repos-status { attlist.repos-status, lock? }
diff --git a/subversion/svn/status-cmd.c b/subversion/svn/status-cmd.c
index 74d2847..9840cd2 100644
--- a/subversion/svn/status-cmd.c
+++ b/subversion/svn/status-cmd.c
@@ -27,6 +27,7 @@
/*** Includes. ***/
+#include "svn_hash.h"
#include "svn_string.h"
#include "svn_wc.h"
#include "svn_client.h"
@@ -50,6 +51,9 @@ struct status_baton
{
/* These fields all correspond to the ones in the
svn_cl__print_status() interface. */
+ const char *target_abspath;
+ const char *target_path;
+ svn_boolean_t suppress_externals_placeholders;
svn_boolean_t detailed;
svn_boolean_t show_last_committed;
svn_boolean_t skip_unrecognized;
@@ -74,6 +78,8 @@ struct status_baton
struct status_cache
{
const char *path;
+ const char *target_abspath;
+ const char *target_path;
svn_client_status_t *status;
};
@@ -106,7 +112,7 @@ print_conflict_stats(struct status_baton *sb, apr_pool_t *pool)
static svn_error_t *
print_start_target_xml(const char *target, apr_pool_t *pool)
{
- svn_stringbuf_t *sb = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *sb = svn_stringbuf_create_empty(pool);
svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "target",
"path", target, NULL);
@@ -122,7 +128,7 @@ static svn_error_t *
print_finish_target_xml(svn_revnum_t repos_rev,
apr_pool_t *pool)
{
- svn_stringbuf_t *sb = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *sb = svn_stringbuf_create_empty(pool);
if (SVN_IS_VALID_REVNUM(repos_rev))
{
@@ -149,9 +155,13 @@ print_status_normal_or_xml(void *baton,
struct status_baton *sb = baton;
if (sb->xml_mode)
- return svn_cl__print_status_xml(path, status, sb->ctx, pool);
+ return svn_cl__print_status_xml(sb->target_abspath, sb->target_path,
+ path, status, sb->ctx, pool);
else
- return svn_cl__print_status(path, status, sb->detailed,
+ return svn_cl__print_status(sb->target_abspath, sb->target_path,
+ path, status,
+ sb->suppress_externals_placeholders,
+ sb->detailed,
sb->show_last_committed,
sb->skip_unrecognized,
sb->repos_locks,
@@ -233,16 +243,17 @@ print_status(void *baton,
const char *cl_key = apr_pstrdup(sb->cl_pool, status->changelist);
struct status_cache *scache = apr_pcalloc(sb->cl_pool, sizeof(*scache));
scache->path = apr_pstrdup(sb->cl_pool, path);
+ scache->target_abspath = apr_pstrdup(sb->cl_pool, sb->target_abspath);
+ scache->target_path = apr_pstrdup(sb->cl_pool, sb->target_path);
scache->status = svn_client_status_dup(status, sb->cl_pool);
path_array =
- apr_hash_get(sb->cached_changelists, cl_key, APR_HASH_KEY_STRING);
+ svn_hash_gets(sb->cached_changelists, cl_key);
if (path_array == NULL)
{
path_array = apr_array_make(sb->cl_pool, 1,
sizeof(struct status_cache *));
- apr_hash_set(sb->cached_changelists, cl_key,
- APR_HASH_KEY_STRING, path_array);
+ svn_hash_sets(sb->cached_changelists, cl_key, path_array);
}
APR_ARRAY_PUSH(path_array, struct status_cache *) = scache;
@@ -298,6 +309,8 @@ svn_cl__status(apr_getopt_t *os,
"mode"));
}
+ sb.suppress_externals_placeholders = (opt_state->quiet
+ && (! opt_state->verbose));
sb.detailed = (opt_state->verbose || opt_state->update);
sb.show_last_committed = opt_state->verbose;
sb.skip_unrecognized = opt_state->quiet;
@@ -320,6 +333,10 @@ svn_cl__status(apr_getopt_t *os,
svn_pool_clear(iterpool);
+ SVN_ERR(svn_dirent_get_absolute(&(sb.target_abspath), target,
+ scratch_pool));
+ sb.target_path = target;
+
SVN_ERR(svn_cl__check_cancel(ctx->cancel_baton));
if (opt_state->xml)
@@ -341,6 +358,7 @@ svn_cl__status(apr_getopt_t *os,
NULL, opt_state->quiet,
/* not versioned: */
SVN_ERR_WC_NOT_WORKING_COPY,
+ SVN_ERR_WC_PATH_NOT_FOUND,
SVN_NO_ERROR));
if (opt_state->xml)
@@ -355,7 +373,7 @@ svn_cl__status(apr_getopt_t *os,
svn_stringbuf_t *buf;
if (opt_state->xml)
- buf = svn_stringbuf_create("", scratch_pool);
+ buf = svn_stringbuf_create_empty(scratch_pool);
for (hi = apr_hash_first(scratch_pool, master_cl_hash); hi;
hi = apr_hash_next(hi))
@@ -369,7 +387,7 @@ svn_cl__status(apr_getopt_t *os,
### non-changelist entries. */
if (opt_state->xml)
{
- svn_stringbuf_set(buf, "");
+ svn_stringbuf_setempty(buf);
svn_xml_make_open_tag(&buf, scratch_pool, svn_xml_normal,
"changelist", "name", changelist_name,
NULL);
@@ -384,13 +402,15 @@ svn_cl__status(apr_getopt_t *os,
{
struct status_cache *scache =
APR_ARRAY_IDX(path_array, j, struct status_cache *);
+ sb.target_abspath = scache->target_abspath;
+ sb.target_path = scache->target_path;
SVN_ERR(print_status_normal_or_xml(&sb, scache->path,
scache->status, scratch_pool));
}
if (opt_state->xml)
{
- svn_stringbuf_set(buf, "");
+ svn_stringbuf_setempty(buf);
svn_xml_make_close_tag(&buf, scratch_pool, "changelist");
SVN_ERR(svn_cl__error_checked_fputs(buf->data, stdout));
}
diff --git a/subversion/svn/status.c b/subversion/svn/status.c
index 0c5bddb..9f1ad34 100644
--- a/subversion/svn/status.c
+++ b/subversion/svn/status.c
@@ -26,6 +26,7 @@
/*** Includes. ***/
+#include "svn_hash.h"
#include "svn_cmdline.h"
#include "svn_wc.h"
#include "svn_dirent_uri.h"
@@ -33,7 +34,7 @@
#include "svn_time.h"
#include "cl.h"
#include "svn_private_config.h"
-#include "tree-conflicts.h"
+#include "cl-conflicts.h"
#include "private/svn_wc_private.h"
/* Return the single character representation of STATUS */
@@ -135,11 +136,85 @@ generate_status_desc(enum svn_wc_status_kind status)
}
}
+/* Make a relative path containing '..' elements as needed.
+ TARGET_ABSPATH shall be the absolute version of TARGET_PATH.
+ TARGET_ABSPATH, TARGET_PATH and PATH shall be canonical.
+
+ If above conditions are met, a relative path that leads to PATH
+ from TARGET_PATH is returned, but there is no error checking involved.
+
+ The returned path is allocated from RESULT_POOL, all other
+ allocations are made in SCRATCH_POOL. */
+static const char *
+make_relpath(const char *target_abspath,
+ const char *target_path,
+ const char *path,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ const char *la;
+ const char *parent_dir_els = "";
+ const char *abspath, *relative;
+ svn_error_t *err = svn_dirent_get_absolute(&abspath, path, scratch_pool);
+
+ if (err)
+ {
+ /* We probably got passed some invalid path. */
+ svn_error_clear(err);
+ return apr_pstrdup(result_pool, path);
+ }
+
+ relative = svn_dirent_skip_ancestor(target_abspath, abspath);
+ if (relative)
+ {
+ return svn_dirent_join(target_path, relative, result_pool);
+ }
+
+ /* An example:
+ * relative_to_path = /a/b/c
+ * path = /a/x/y/z
+ * result = ../../x/y/z
+ *
+ * Another example (Windows specific):
+ * relative_to_path = F:/wc
+ * path = C:/wc
+ * result = C:/wc
+ */
+
+ /* Skip the common ancestor of both paths, here '/a'. */
+ la = svn_dirent_get_longest_ancestor(target_abspath, abspath,
+ scratch_pool);
+ if (*la == '\0')
+ {
+ /* Nothing in common: E.g. C:/ vs F:/ on Windows */
+ return apr_pstrdup(result_pool, path);
+ }
+ relative = svn_dirent_skip_ancestor(la, target_abspath);
+ path = svn_dirent_skip_ancestor(la, path);
+
+ /* In above example, we'd now have:
+ * relative_to_path = b/c
+ * path = x/y/z */
+
+ /* Count the elements of relative_to_path and prepend as many '..' elements
+ * to path. */
+ while (*relative)
+ {
+ svn_dirent_split(&relative, NULL, relative,
+ scratch_pool);
+ parent_dir_els = svn_dirent_join(parent_dir_els, "..", scratch_pool);
+ }
+
+ return svn_dirent_join(parent_dir_els, path, result_pool);
+}
+
/* Print STATUS and PATH in a format determined by DETAILED and
SHOW_LAST_COMMITTED. */
static svn_error_t *
-print_status(const char *path,
+print_status(const char *target_abspath,
+ const char *target_path,
+ const char *path,
svn_boolean_t detailed,
svn_boolean_t show_last_committed,
svn_boolean_t repos_locks,
@@ -154,6 +229,10 @@ print_status(const char *path,
enum svn_wc_status_kind prop_status = status->prop_status;
char tree_status_code = ' ';
const char *tree_desc_line = "";
+ const char *moved_from_line = "";
+ const char *moved_to_line = "";
+
+ path = make_relpath(target_abspath, target_path, path, pool, pool);
/* For historic reasons svn ignores the property status for added nodes, even
if these nodes were copied and have local property changes.
@@ -222,6 +301,55 @@ print_status(const char *path,
(*prop_conflicts)++;
}
+ /* Note that moved-from and moved-to information is only available in STATUS
+ * for (op-)roots of a move. Those are exactly the nodes we want to show
+ * move info for in 'svn status'. See also comments in svn_wc_status3_t. */
+ if (status->moved_from_abspath && status->moved_to_abspath &&
+ strcmp(status->moved_from_abspath, status->moved_to_abspath) == 0)
+ {
+ const char *relpath;
+
+ relpath = make_relpath(target_abspath, target_path,
+ status->moved_from_abspath,
+ pool, pool);
+ relpath = svn_dirent_local_style(relpath, pool);
+ moved_from_line = apr_pstrcat(pool, "\n > ",
+ apr_psprintf(pool,
+ _("swapped places with %s"),
+ relpath),
+ (char *)NULL);
+ }
+ else if (status->moved_from_abspath || status->moved_to_abspath)
+ {
+ const char *relpath;
+
+ if (status->moved_from_abspath)
+ {
+ relpath = make_relpath(target_abspath, target_path,
+ status->moved_from_abspath,
+ pool, pool);
+ relpath = svn_dirent_local_style(relpath, pool);
+ moved_from_line = apr_pstrcat(pool, "\n > ",
+ apr_psprintf(pool, _("moved from %s"),
+ relpath),
+ (char *)NULL);
+ }
+
+ if (status->moved_to_abspath)
+ {
+ relpath = make_relpath(target_abspath, target_path,
+ status->moved_to_abspath,
+ pool, pool);
+ relpath = svn_dirent_local_style(relpath, pool);
+ moved_to_line = apr_pstrcat(pool, "\n > ",
+ apr_psprintf(pool, _("moved to %s"),
+ relpath),
+ (char *)NULL);
+ }
+ }
+
+ path = svn_dirent_local_style(path, pool);
+
if (detailed)
{
char ood_status, lock_status;
@@ -284,7 +412,7 @@ print_status(const char *path,
SVN_ERR
(svn_cmdline_printf(pool,
- "%c%c%c%c%c%c%c %c %6s %6s %-12s %s%s\n",
+ "%c%c%c%c%c%c%c %c %8s %8s %-12s %s%s%s%s\n",
generate_status_code(combined_status(status)),
generate_status_code(prop_status),
status->wc_is_locked ? 'L' : ' ',
@@ -297,11 +425,13 @@ print_status(const char *path,
commit_rev,
commit_author,
path,
+ moved_to_line,
+ moved_from_line,
tree_desc_line));
}
else
SVN_ERR(
- svn_cmdline_printf(pool, "%c%c%c%c%c%c%c %c %6s %s%s\n",
+ svn_cmdline_printf(pool, "%c%c%c%c%c%c%c %c %8s %s%s%s%s\n",
generate_status_code(combined_status(status)),
generate_status_code(prop_status),
status->wc_is_locked ? 'L' : ' ',
@@ -312,11 +442,13 @@ print_status(const char *path,
ood_status,
working_rev,
path,
+ moved_to_line,
+ moved_from_line,
tree_desc_line));
}
else
SVN_ERR(
- svn_cmdline_printf(pool, "%c%c%c%c%c%c%c %s%s\n",
+ svn_cmdline_printf(pool, "%c%c%c%c%c%c%c %s%s%s%s\n",
generate_status_code(combined_status(status)),
generate_status_code(prop_status),
status->wc_is_locked ? 'L' : ' ',
@@ -326,6 +458,8 @@ print_status(const char *path,
? 'K' : ' '),
tree_status_code,
path,
+ moved_to_line,
+ moved_from_line,
tree_desc_line));
return svn_cmdline_fflush(stdout);
@@ -333,12 +467,14 @@ print_status(const char *path,
svn_error_t *
-svn_cl__print_status_xml(const char *path,
+svn_cl__print_status_xml(const char *target_abspath,
+ const char *target_path,
+ const char *path,
const svn_client_status_t *status,
svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
- svn_stringbuf_t *sb = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *sb = svn_stringbuf_create_empty(pool);
apr_hash_t *att_hash;
const char *local_abspath = status->local_abspath;
svn_boolean_t tree_conflicted = FALSE;
@@ -351,32 +487,54 @@ svn_cl__print_status_xml(const char *path,
SVN_ERR(svn_wc_conflicted_p3(NULL, NULL, &tree_conflicted,
ctx->wc_ctx, local_abspath, pool));
+ path = make_relpath(target_abspath, target_path, path, pool, pool);
+
svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "entry",
"path", svn_dirent_local_style(path, pool), NULL);
att_hash = apr_hash_make(pool);
- apr_hash_set(att_hash, "item", APR_HASH_KEY_STRING,
- generate_status_desc(combined_status(status)));
-
- apr_hash_set(att_hash, "props", APR_HASH_KEY_STRING,
- generate_status_desc(
- (status->node_status != svn_wc_status_deleted)
- ? status->prop_status
- : svn_wc_status_none));
+ svn_hash_sets(att_hash, "item",
+ generate_status_desc(combined_status(status)));
+
+ svn_hash_sets(att_hash, "props",
+ generate_status_desc(
+ (status->node_status != svn_wc_status_deleted)
+ ? status->prop_status
+ : svn_wc_status_none));
if (status->wc_is_locked)
- apr_hash_set(att_hash, "wc-locked", APR_HASH_KEY_STRING, "true");
+ svn_hash_sets(att_hash, "wc-locked", "true");
if (status->copied)
- apr_hash_set(att_hash, "copied", APR_HASH_KEY_STRING, "true");
+ svn_hash_sets(att_hash, "copied", "true");
if (status->switched)
- apr_hash_set(att_hash, "switched", APR_HASH_KEY_STRING, "true");
+ svn_hash_sets(att_hash, "switched", "true");
if (status->file_external)
- apr_hash_set(att_hash, "file-external", APR_HASH_KEY_STRING, "true");
+ svn_hash_sets(att_hash, "file-external", "true");
if (status->versioned && ! status->copied)
- apr_hash_set(att_hash, "revision", APR_HASH_KEY_STRING,
- apr_psprintf(pool, "%ld", status->revision));
+ svn_hash_sets(att_hash, "revision",
+ apr_psprintf(pool, "%ld", status->revision));
if (tree_conflicted)
- apr_hash_set(att_hash, "tree-conflicted", APR_HASH_KEY_STRING,
- "true");
+ svn_hash_sets(att_hash, "tree-conflicted", "true");
+ if (status->moved_from_abspath || status->moved_to_abspath)
+ {
+ const char *relpath;
+
+ if (status->moved_from_abspath)
+ {
+ relpath = make_relpath(target_abspath, target_path,
+ status->moved_from_abspath,
+ pool, pool);
+ relpath = svn_dirent_local_style(relpath, pool);
+ svn_hash_sets(att_hash, "moved-from", relpath);
+ }
+ if (status->moved_to_abspath)
+ {
+ relpath = make_relpath(target_abspath, target_path,
+ status->moved_to_abspath,
+ pool, pool);
+ relpath = svn_dirent_local_style(relpath, pool);
+ svn_hash_sets(att_hash, "moved-to", relpath);
+ }
+ }
svn_xml_make_open_tag_hash(&sb, pool, svn_xml_normal, "wc-status",
att_hash);
@@ -416,8 +574,11 @@ svn_cl__print_status_xml(const char *path,
/* Called by status-cmd.c */
svn_error_t *
-svn_cl__print_status(const char *path,
+svn_cl__print_status(const char *target_abspath,
+ const char *target_path,
+ const char *path,
const svn_client_status_t *status,
+ svn_boolean_t suppress_externals_placeholders,
svn_boolean_t detailed,
svn_boolean_t show_last_committed,
svn_boolean_t skip_unrecognized,
@@ -437,7 +598,33 @@ svn_cl__print_status(const char *path,
&& status->repos_node_status == svn_wc_status_none))
return SVN_NO_ERROR;
- return print_status(svn_dirent_local_style(path, pool),
+ /* If we're trying not to print boring "X /path/to/external"
+ lines..." */
+ if (suppress_externals_placeholders)
+ {
+ /* ... skip regular externals unmodified in the repository. */
+ if ((status->node_status == svn_wc_status_external)
+ && (status->repos_node_status == svn_wc_status_none)
+ && (! status->conflicted))
+ return SVN_NO_ERROR;
+
+ /* ... skip file externals that aren't modified locally or
+ remotely, changelisted, or locked (in either sense of the
+ word). */
+ if ((status->file_external)
+ && (status->repos_node_status == svn_wc_status_none)
+ && ((status->node_status == svn_wc_status_normal)
+ || (status->node_status == svn_wc_status_none))
+ && ((status->prop_status == svn_wc_status_normal)
+ || (status->prop_status == svn_wc_status_none))
+ && (! status->changelist)
+ && (! status->lock)
+ && (! status->wc_is_locked)
+ && (! status->conflicted))
+ return SVN_NO_ERROR;
+ }
+
+ return print_status(target_abspath, target_path, path,
detailed, show_last_committed, repos_locks, status,
text_conflicts, prop_conflicts, tree_conflicts,
ctx, pool);
diff --git a/subversion/svn/main.c b/subversion/svn/svn.c
index 8f3a7c4..38d4ce1 100644
--- a/subversion/svn/main.c
+++ b/subversion/svn/svn.c
@@ -1,5 +1,5 @@
/*
- * main.c: Subversion command line client.
+ * svn.c: Subversion command line client main file.
*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
@@ -54,8 +54,9 @@
#include "svn_version.h"
#include "cl.h"
-#include "private/svn_wc_private.h"
+#include "private/svn_opt_private.h"
#include "private/svn_cmdline_private.h"
+#include "private/svn_subr_private.h"
#include "svn_private_config.h"
@@ -66,14 +67,25 @@
option. Options that have both long and short options should just
use the short option letter as identifier. */
typedef enum svn_cl__longopt_t {
- opt_ancestor_path = SVN_OPT_FIRST_LONGOPT_ID,
- opt_auth_password,
+ opt_auth_password = SVN_OPT_FIRST_LONGOPT_ID,
opt_auth_username,
opt_autoprops,
opt_changelist,
opt_config_dir,
opt_config_options,
+ /* diff options */
opt_diff_cmd,
+ opt_internal_diff,
+ opt_no_diff_added,
+ opt_no_diff_deleted,
+ opt_show_copies_as_adds,
+ opt_notice_ancestry,
+ opt_summarize,
+ opt_use_git_diff_format,
+ opt_ignore_properties,
+ opt_properties_only,
+ opt_patch_compatible,
+ /* end of diff options */
opt_dry_run,
opt_editor_cmd,
opt_encoding,
@@ -88,11 +100,10 @@ typedef enum svn_cl__longopt_t {
opt_new_cmd,
opt_no_auth_cache,
opt_no_autoprops,
- opt_no_diff_deleted,
opt_no_ignore,
opt_no_unlock,
opt_non_interactive,
- opt_notice_ancestry,
+ opt_force_interactive,
opt_old_cmd,
opt_record_only,
opt_relocate,
@@ -100,7 +111,6 @@ typedef enum svn_cl__longopt_t {
opt_revprop,
opt_stop_on_copy,
opt_strict,
- opt_summarize,
opt_targets,
opt_depth,
opt_set_depth,
@@ -116,14 +126,15 @@ typedef enum svn_cl__longopt_t {
opt_reintegrate,
opt_trust_server_cert,
opt_strip,
- opt_show_copies_as_adds,
opt_ignore_keywords,
opt_reverse_diff,
opt_ignore_whitespace,
opt_diff,
- opt_internal_diff,
- opt_use_git_diff_format,
- opt_allow_mixed_revisions
+ opt_allow_mixed_revisions,
+ opt_include_externals,
+ opt_show_inherited_props,
+ opt_search,
+ opt_search_and
} svn_cl__longopt_t;
@@ -145,7 +156,11 @@ const apr_getopt_option_t svn_cl__options[] =
{"change", 'c', 1,
N_("the change made by revision ARG (like -r ARG-1:ARG)\n"
" "
- "If ARG is negative this is like -r ARG:ARG-1")},
+ "If ARG is negative this is like -r ARG:ARG-1\n"
+ " "
+ "If ARG is of the form ARG1-ARG2 then this is like\n"
+ " "
+ "ARG1:ARG2, where ARG1 is inclusive")},
{"revision", 'r', 1,
N_("ARG (some commands also take ARG1:ARG2 range)\n"
" "
@@ -173,37 +188,23 @@ const apr_getopt_option_t svn_cl__options[] =
{"username", opt_auth_username, 1, N_("specify a username ARG")},
{"password", opt_auth_password, 1, N_("specify a password ARG")},
{"extensions", 'x', 1,
- N_("Default: '-u'. When Subversion is invoking an\n"
+ N_("Specify differencing options for external diff or\n"
" "
- "external diff program, ARG is simply passed along\n"
+ "internal diff or blame. Default: '-u'. Options are\n"
" "
- "to the program. But when Subversion is using its\n"
+ "separated by spaces. Internal diff and blame take:\n"
" "
- "default internal diff implementation, or when\n"
+ " -u, --unified: Show 3 lines of unified context\n"
" "
- "Subversion is displaying blame annotations, ARG\n"
+ " -b, --ignore-space-change: Ignore changes in\n"
" "
- "could be any of the following:\n"
+ " amount of white space\n"
" "
- " -u (--unified):\n"
+ " -w, --ignore-all-space: Ignore all white space\n"
" "
- " Output 3 lines of unified context.\n"
+ " --ignore-eol-style: Ignore changes in EOL style\n"
" "
- " -b (--ignore-space-change):\n"
- " "
- " Ignore changes in the amount of white space.\n"
- " "
- " -w (--ignore-all-space):\n"
- " "
- " Ignore all white space.\n"
- " "
- " --ignore-eol-style:\n"
- " "
- " Ignore changes in EOL style.\n"
- " "
- " -p (--show-c-function):\n"
- " "
- " Show C function name in diff output.")},
+ " -p, --show-c-function: Show C function name")},
{"targets", opt_targets, 1,
N_("pass contents of file ARG as additional args")},
{"depth", opt_depth, 1,
@@ -219,7 +220,9 @@ const apr_getopt_option_t svn_cl__options[] =
{"stop-on-copy", opt_stop_on_copy, 0,
N_("do not cross copies while traversing history")},
{"no-ignore", opt_no_ignore, 0,
- N_("disregard default and svn:ignore property ignores")},
+ N_("disregard default and svn:ignore and\n"
+ " "
+ "svn:global-ignores property ignores")},
{"no-auth-cache", opt_no_auth_cache, 0,
N_("do not cache authentication tokens")},
{"trust-server-cert", opt_trust_server_cert, 0,
@@ -229,18 +232,19 @@ const apr_getopt_option_t svn_cl__options[] =
" "
"with '--non-interactive')") },
{"non-interactive", opt_non_interactive, 0,
- N_("do no interactive prompting")},
+ N_("do no interactive prompting (default is to prompt\n"
+ " "
+ "only if standard input is a terminal device)")},
+ {"force-interactive", opt_force_interactive, 0,
+ N_("do interactive prompting even if standard input\n"
+ " "
+ "is not a terminal device")},
{"dry-run", opt_dry_run, 0,
N_("try operation but make no changes")},
- {"no-diff-deleted", opt_no_diff_deleted, 0,
- N_("do not print differences for deleted files")},
- {"notice-ancestry", opt_notice_ancestry, 0,
- N_("notice ancestry when calculating differences")},
{"ignore-ancestry", opt_ignore_ancestry, 0,
- N_("ignore ancestry when calculating merges")},
+ N_("disable merge tracking; diff nodes as if related")},
{"ignore-externals", opt_ignore_externals, 0,
N_("ignore externals definitions")},
- {"diff-cmd", opt_diff_cmd, 1, N_("use ARG as diff command")},
{"diff3-cmd", opt_merge_cmd, 1, N_("use ARG as merge command")},
{"editor-cmd", opt_editor_cmd, 1, N_("use ARG as external editor")},
{"record-only", opt_record_only, 0,
@@ -272,7 +276,6 @@ const apr_getopt_option_t svn_cl__options[] =
"ARG may be one of 'LF', 'CR', 'CRLF'")},
{"limit", 'l', 1, N_("maximum number of log entries")},
{"no-unlock", opt_no_unlock, 0, N_("don't unlock the targets")},
- {"summarize", opt_summarize, 0, N_("show a summary of the results")},
{"remove", opt_remove, 0, N_("remove changelist association")},
{"changelist", opt_changelist, 1,
N_("operate only on members of changelist ARG")},
@@ -308,7 +311,7 @@ const apr_getopt_option_t svn_cl__options[] =
" "
"('merged', 'eligible')")},
{"reintegrate", opt_reintegrate, 0,
- N_("merge a branch back into its parent branch")},
+ N_("deprecated")},
{"strip", opt_strip, 1,
N_("number of leading path components to strip from\n"
" "
@@ -325,8 +328,6 @@ const apr_getopt_option_t svn_cl__options[] =
"The expected component separator is '/' on all\n"
" "
"platforms. A leading '/' counts as one component.")},
- {"show-copies-as-adds", opt_show_copies_as_adds, 0,
- N_("don't diff copied or moved files with their source")},
{"ignore-keywords", opt_ignore_keywords, 0,
N_("don't expand keywords")},
{"reverse-diff", opt_reverse_diff, 0,
@@ -334,16 +335,51 @@ const apr_getopt_option_t svn_cl__options[] =
{"ignore-whitespace", opt_ignore_whitespace, 0,
N_("ignore whitespace during pattern matching")},
{"diff", opt_diff, 0, N_("produce diff output")}, /* maps to show_diff */
+ /* diff options */
+ {"diff-cmd", opt_diff_cmd, 1, N_("use ARG as diff command")},
{"internal-diff", opt_internal_diff, 0,
N_("override diff-cmd specified in config file")},
+ {"no-diff-added", opt_no_diff_added, 0,
+ N_("do not print differences for added files")},
+ {"no-diff-deleted", opt_no_diff_deleted, 0,
+ N_("do not print differences for deleted files")},
+ {"show-copies-as-adds", opt_show_copies_as_adds, 0,
+ N_("don't diff copied or moved files with their source")},
+ {"notice-ancestry", opt_notice_ancestry, 0,
+ N_("diff unrelated nodes as delete and add")},
+ {"summarize", opt_summarize, 0, N_("show a summary of the results")},
{"git", opt_use_git_diff_format, 0,
N_("use git's extended diff format")},
+ {"ignore-properties", opt_ignore_properties, 0,
+ N_("ignore properties during the operation")},
+ {"properties-only", opt_properties_only, 0,
+ N_("show only properties during the operation")},
+ {"patch-compatible", opt_patch_compatible, 0,
+ N_("generate diff suitable for generic third-party\n"
+ " "
+ "patch tools; currently the same as\n"
+ " "
+ "--show-copies-as-adds --ignore-properties"
+ )},
+ /* end of diff options */
{"allow-mixed-revisions", opt_allow_mixed_revisions, 0,
- N_("Allow merge into mixed-revision working copy.\n"
+ N_("Allow operation on mixed-revision working copy.\n"
" "
"Use of this option is not recommended!\n"
" "
"Please run 'svn update' instead.")},
+ {"include-externals", opt_include_externals, 0,
+ N_("Also commit file and dir externals reached by\n"
+ " "
+ "recursion. This does not include externals with a\n"
+ " "
+ "fixed revision. (See the svn:externals property)")},
+ {"show-inherited-props", opt_show_inherited_props, 0,
+ N_("retrieve target's inherited properties")},
+ {"search", opt_search, 1,
+ N_("use ARG as search pattern (glob syntax)")},
+ {"search-and", opt_search_and, 1,
+ N_("combine ARG with the previous search pattern")},
/* Long-opt Aliases
*
@@ -366,7 +402,7 @@ const apr_getopt_option_t svn_cl__options[] =
*
* In most of the help text "PATH" is used where a working copy path is
* required, "URL" where a repository URL is required and "TARGET" when
- * either a path or an url can be used. Hmm, should this be part of the
+ * either a path or a url can be used. Hmm, should this be part of the
* help text?
*/
@@ -376,7 +412,8 @@ const apr_getopt_option_t svn_cl__options[] =
willy-nilly to every invocation of 'svn') . */
const int svn_cl__global_options[] =
{ opt_auth_username, opt_auth_password, opt_no_auth_cache, opt_non_interactive,
- opt_trust_server_cert, opt_config_dir, opt_config_options, 0
+ opt_force_interactive, opt_trust_server_cert, opt_config_dir,
+ opt_config_options, 0
};
/* Options for giving a log message. (Some of these also have other uses.)
@@ -448,9 +485,19 @@ const svn_opt_subcommand_desc2_t svn_cl__cmd_table[] =
{'r', 'q', 'N', opt_depth, opt_force, opt_ignore_externals} },
{ "cleanup", svn_cl__cleanup, {0}, N_
- ("Recursively clean up the working copy, removing locks, resuming\n"
+ ("Recursively clean up the working copy, removing write locks, resuming\n"
"unfinished operations, etc.\n"
- "usage: cleanup [WCPATH...]\n"),
+ "usage: cleanup [WCPATH...]\n"
+ "\n"
+ " Finish any unfinished business in the working copy at WCPATH, and remove\n"
+ " write locks (shown as 'L' by the 'svn status' command) from the working\n"
+ " copy. Usually, this is only necessary if a Subversion client has crashed\n"
+ " while using the working copy, leaving it in an unusable state.\n"
+ "\n"
+ " WARNING: There is no mechanism that will protect write locks still\n"
+ " being used by other Subversion clients. Running this command\n"
+ " while another client is using the working copy can corrupt\n"
+ " the working copy beyond repair!\n"),
{opt_merge_cmd} },
{ "commit", svn_cl__commit, {"ci"},
@@ -462,28 +509,25 @@ const svn_opt_subcommand_desc2_t svn_cl__cmd_table[] =
" If any targets are (or contain) locked items, those will be\n"
" unlocked after a successful commit.\n"),
{'q', 'N', opt_depth, opt_targets, opt_no_unlock, SVN_CL__LOG_MSG_OPTIONS,
- opt_changelist, opt_keep_changelists} },
+ opt_changelist, opt_keep_changelists, opt_include_externals} },
{ "copy", svn_cl__copy, {"cp"}, N_
- ("Duplicate something in working copy or repository, remembering\n"
- "history.\n"
+ ("Copy files and directories in a working copy or repository.\n"
"usage: copy SRC[@REV]... DST\n"
"\n"
- "When copying multiple sources, they will be added as children of DST,\n"
- "which must be a directory.\n"
- "\n"
" SRC and DST can each be either a working copy (WC) path or URL:\n"
" WC -> WC: copy and schedule for addition (with history)\n"
" WC -> URL: immediately commit a copy of WC to URL\n"
" URL -> WC: check out URL into WC, schedule for addition\n"
" URL -> URL: complete server-side copy; used to branch and tag\n"
- " All the SRCs must be of the same type.\n"
- "\n"
- "WARNING: For compatibility with previous versions of Subversion,\n"
- "copies performed using two working copy paths (WC -> WC) will not\n"
- "contact the repository. As such, they may not, by default, be able\n"
- "to propagate merge tracking information from the source of the copy\n"
- "to the destination.\n"),
+ " All the SRCs must be of the same type. When copying multiple sources,\n"
+ " they will be added as children of DST, which must be a directory.\n"
+ "\n"
+ " WARNING: For compatibility with previous versions of Subversion,\n"
+ " copies performed using two working copy paths (WC -> WC) will not\n"
+ " contact the repository. As such, they may not, by default, be able\n"
+ " to propagate merge tracking information from the source of the copy\n"
+ " to the destination.\n"),
{'r', 'q', opt_ignore_externals, opt_parents, SVN_CL__LOG_MSG_OPTIONS} },
{ "delete", svn_cl__delete, {"del", "remove", "rm"}, N_
@@ -503,33 +547,46 @@ const svn_opt_subcommand_desc2_t svn_cl__cmd_table[] =
{opt_force, 'q', opt_targets, SVN_CL__LOG_MSG_OPTIONS, opt_keep_local} },
{ "diff", svn_cl__diff, {"di"}, N_
- ("Display the differences between two revisions or paths.\n"
- "usage: 1. diff [-c M | -r N[:M]] [TARGET[@REV]...]\n"
- " 2. diff [-r N[:M]] --old=OLD-TGT[@OLDREV] [--new=NEW-TGT[@NEWREV]] \\\n"
+ ("Display local changes or differences between two revisions or paths.\n"
+ "usage: 1. diff\n"
+ " 2. diff [-c M | -r N[:M]] [TARGET[@REV]...]\n"
+ " 3. diff [-r N[:M]] --old=OLD-TGT[@OLDREV] [--new=NEW-TGT[@NEWREV]] \\\n"
" [PATH...]\n"
- " 3. diff OLD-URL[@OLDREV] NEW-URL[@NEWREV]\n"
+ " 4. diff OLD-URL[@OLDREV] NEW-URL[@NEWREV]\n"
+ " 5. diff OLD-URL[@OLDREV] NEW-PATH[@NEWREV]\n"
+ " 6. diff OLD-PATH[@OLDREV] NEW-URL[@NEWREV]\n"
+ "\n"
+ " 1. Use just 'svn diff' to display local modifications in a working copy.\n"
"\n"
- " 1. Display the changes made to TARGETs as they are seen in REV between\n"
+ " 2. Display the changes made to TARGETs as they are seen in REV between\n"
" two revisions. TARGETs may be all working copy paths or all URLs.\n"
" If TARGETs are working copy paths, N defaults to BASE and M to the\n"
" working copy; if URLs, N must be specified and M defaults to HEAD.\n"
" The '-c M' option is equivalent to '-r N:M' where N = M-1.\n"
" Using '-c -M' does the reverse: '-r M:N' where N = M-1.\n"
"\n"
- " 2. Display the differences between OLD-TGT as it was seen in OLDREV and\n"
+ " 3. Display the differences between OLD-TGT as it was seen in OLDREV and\n"
" NEW-TGT as it was seen in NEWREV. PATHs, if given, are relative to\n"
" OLD-TGT and NEW-TGT and restrict the output to differences for those\n"
" paths. OLD-TGT and NEW-TGT may be working copy paths or URL[@REV].\n"
" NEW-TGT defaults to OLD-TGT if not specified. -r N makes OLDREV default\n"
" to N, -r N:M makes OLDREV default to N and NEWREV default to M.\n"
+ " If OLDREV or NEWREV are not specified, they default to WORKING for\n"
+ " working copy targets and to HEAD for URL targets.\n"
"\n"
- " 3. Shorthand for 'svn diff --old=OLD-URL[@OLDREV] --new=NEW-URL[@NEWREV]'\n"
+ " Either or both OLD-TGT and NEW-TGT may also be paths to unversioned\n"
+ " targets. Revisions cannot be specified for unversioned targets.\n"
+ " Both targets must be of the same node kind (file or directory).\n"
+ " Diffing unversioned targets against URL targets is not supported.\n"
"\n"
- " Use just 'svn diff' to display local modifications in a working copy.\n"),
+ " 4. Shorthand for 'svn diff --old=OLD-URL[@OLDREV] --new=NEW-URL[@NEWREV]'\n"
+ " 5. Shorthand for 'svn diff --old=OLD-URL[@OLDREV] --new=NEW-PATH[@NEWREV]'\n"
+ " 6. Shorthand for 'svn diff --old=OLD-PATH[@OLDREV] --new=NEW-URL[@NEWREV]'\n"),
{'r', 'c', opt_old_cmd, opt_new_cmd, 'N', opt_depth, opt_diff_cmd,
- opt_internal_diff, 'x', opt_no_diff_deleted, opt_show_copies_as_adds,
- opt_notice_ancestry, opt_summarize, opt_changelist, opt_force, opt_xml,
- opt_use_git_diff_format} },
+ opt_internal_diff, 'x', opt_no_diff_added, opt_no_diff_deleted,
+ opt_ignore_properties, opt_properties_only,
+ opt_show_copies_as_adds, opt_notice_ancestry, opt_summarize, opt_changelist,
+ opt_force, opt_xml, opt_use_git_diff_format, opt_patch_compatible} },
{ "export", svn_cl__export, {0}, N_
("Create an unversioned copy of a tree.\n"
"usage: 1. export [-r REV] URL[@PEGREV] [PATH]\n"
@@ -601,7 +658,9 @@ const svn_opt_subcommand_desc2_t svn_cl__cmd_table[] =
" If locked, the letter 'O'. (Use 'svn info URL' to see details)\n"
" Size (in bytes)\n"
" Date and time of the last commit\n"),
- {'r', 'v', 'R', opt_depth, opt_incremental, opt_xml} },
+ {'r', 'v', 'R', opt_depth, opt_incremental, opt_xml,
+ opt_include_externals },
+ {{opt_include_externals, N_("include externals definitions")}} },
{ "lock", svn_cl__lock, {0}, N_
("Lock working copy paths or URLs in the repository, so that\n"
@@ -646,18 +705,53 @@ const svn_opt_subcommand_desc2_t svn_cl__cmd_table[] =
"\n"
" The --depth option is only valid in combination with the --diff option\n"
" and limits the scope of the displayed diff to the specified depth.\n"
-
+ "\n"
+ " If the --search option is used, log messages are displayed only if the\n"
+ " provided search pattern matches any of the author, date, log message\n"
+ " text (unless --quiet is used), or, if the --verbose option is also\n"
+ " provided, a changed path.\n"
+ " The search pattern may include \"glob syntax\" wildcards:\n"
+ " ? matches any single character\n"
+ " * matches a sequence of arbitrary characters\n"
+ " [abc] matches any of the characters listed inside the brackets\n"
+ " If multiple --search options are provided, a log message is shown if\n"
+ " it matches any of the provided search patterns. If the --search-and\n"
+ " option is used, that option's argument is combined with the pattern\n"
+ " from the previous --search or --search-and option, and a log message\n"
+ " is shown only if it matches the combined search pattern.\n"
+ " If --limit is used in combination with --search, --limit restricts the\n"
+ " number of log messages searched, rather than restricting the output\n"
+ " to a particular number of matching log messages.\n"
"\n"
" Examples:\n"
- " svn log\n"
- " svn log foo.c\n"
- " svn log bar.c@42\n"
- " svn log http://www.example.com/repo/project/foo.c\n"
- " svn log http://www.example.com/repo/project foo.c bar.c\n"
- " svn log http://www.example.com/repo/project@50 foo.c bar.c\n"),
+ "\n"
+ " Show the latest 5 log messages for the current working copy\n"
+ " directory and display paths changed in each commit:\n"
+ " svn log -l 5 -v\n"
+ "\n"
+ " Show the log for bar.c as of revision 42:\n"
+ " svn log bar.c@42\n"
+ "\n"
+ " Show log messages and diffs for each commit to foo.c:\n"
+ " svn log --diff http://www.example.com/repo/project/foo.c\n"
+ " (Because the above command uses a full URL it does not require\n"
+ " a working copy.)\n"
+ "\n"
+ " Show log messages for the children foo.c and bar.c of the directory\n"
+ " '/trunk' as it appeared in revision 50, using the ^/ URL shortcut:\n"
+ " svn log ^/trunk@50 foo.c bar.c\n"
+ "\n"
+ " Show the log messages for any incoming changes to foo.c during the\n"
+ " next 'svn update':\n"
+ " svn log -r BASE:HEAD foo.c\n"
+ "\n"
+ " Show the log message for the revision in which /branches/foo\n"
+ " was created:\n"
+ " svn log --stop-on-copy --limit 1 -r0:HEAD ^/branches/foo\n"),
{'r', 'q', 'v', 'g', 'c', opt_targets, opt_stop_on_copy, opt_incremental,
opt_xml, 'l', opt_with_all_revprops, opt_with_no_revprops, opt_with_revprop,
- opt_depth, opt_diff, opt_diff_cmd, opt_internal_diff, 'x'},
+ opt_depth, opt_diff, opt_diff_cmd, opt_internal_diff, 'x', opt_search,
+ opt_search_and, },
{{opt_with_revprop, N_("retrieve revision property ARG")},
{'c', N_("the change made in revision ARG")}} },
@@ -667,25 +761,22 @@ const svn_opt_subcommand_desc2_t svn_cl__cmd_table[] =
* (with quotes and newlines removed). */
"Merge changes into a working copy.\n"
"usage: 1. merge SOURCE[@REV] [TARGET_WCPATH]\n"
-" (the 'sync' merge)\n"
+" (the 'complete' merge)\n"
" 2. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [TARGET_WCPATH]\n"
" (the 'cherry-pick' merge)\n"
-" 3. merge --reintegrate SOURCE[@REV] [TARGET_WCPATH]\n"
-" (the 'reintegrate' merge)\n"
-" 4. merge SOURCE1[@N] SOURCE2[@M] [TARGET_WCPATH]\n"
+" 3. merge SOURCE1[@REV1] SOURCE2[@REV2] [TARGET_WCPATH]\n"
" (the '2-URL' merge)\n"
"\n"
-" 1. This form is called a 'sync' (or 'catch-up') merge:\n"
+" 1. This form, with one source path and no revision range, is called\n"
+" a 'complete' merge:\n"
"\n"
" svn merge SOURCE[@REV] [TARGET_WCPATH]\n"
"\n"
-" A sync merge is used to fetch all the latest changes made on a parent\n"
-" branch. In other words, the target branch has originally been created\n"
-" by copying the source branch, and any changes committed on the source\n"
-" branch since branching are applied to the target branch. This uses\n"
-" merge tracking to skip all those revisions that have already been\n"
-" merged, so a sync merge can be repeated periodically to stay up-to-\n"
-" date with the source branch.\n"
+" The complete merge is used for the 'sync' and 'reintegrate' merges\n"
+" in the 'feature branch' pattern described below. It finds all the\n"
+" changes on the source branch that have not already been merged to the\n"
+" target branch, and merges them into the working copy. Merge tracking\n"
+" is used to know which changes have already been merged.\n"
"\n"
" SOURCE specifies the branch from where the changes will be pulled, and\n"
" TARGET_WCPATH specifies a working copy of the target branch to which\n"
@@ -701,27 +792,60 @@ const svn_opt_subcommand_desc2_t svn_cl__cmd_table[] =
" used, and the default value of 'REV' is the base revision (usually the\n"
" revision last updated to).\n"
"\n"
-" TARGET_WCPATH is a working copy path; if omitted, '.' is assumed.\n"
+" TARGET_WCPATH is a working copy path; if omitted, '.' is generally\n"
+" assumed. There are some special cases:\n"
"\n"
-" - Sync Merge Example -\n"
+" - If SOURCE is a URL:\n"
+"\n"
+" - If the basename of the URL and the basename of '.' are the\n"
+" same, then the differences are applied to '.'. Otherwise,\n"
+" if a file with the same basename as that of the URL is found\n"
+" within '.', then the differences are applied to that file.\n"
+" In all other cases, the target defaults to '.'.\n"
+"\n"
+" - If SOURCE is a working copy path:\n"
+"\n"
+" - If the source is a file, then differences are applied to that\n"
+" file (useful for reverse-merging earlier changes). Otherwise,\n"
+" if the source is a directory, then the target defaults to '.'.\n"
+"\n"
+" In normal usage the working copy should be up to date, at a single\n"
+" revision, with no local modifications and no switched subtrees.\n"
"\n"
-" A feature is being developed on a branch called 'feature', which has\n"
-" originally been a copy of trunk. The feature branch has been regularly\n"
-" synced with trunk to keep up with the changes made there. The previous\n"
-" sync merges are not shown on this diagram, and the last of them was\n"
-" done when HEAD was r100. Currently, HEAD is r200.\n"
+" - The 'Feature Branch' Merging Pattern -\n"
"\n"
-" feature +------------------------o-----\n"
-" / ^\n"
-" / ............ |\n"
-" / . . /\n"
-" trunk ------+------------L--------------R------\n"
-" r100 r200\n"
+" In this commonly used work flow, known also as the 'development\n"
+" branch' pattern, a developer creates a branch and commits a series of\n"
+" changes that implement a new feature. The developer periodically\n"
+" merges all the latest changes from the parent branch so as to keep the\n"
+" development branch up to date with those changes. When the feature is\n"
+" complete, the developer performs a merge from the feature branch to\n"
+" the parent branch to re-integrate the changes.\n"
+"\n"
+" parent --+----------o------o-o-------------o--\n"
+" \\ \\ \\ /\n"
+" \\ merge merge merge\n"
+" \\ \\ \\ /\n"
+" feature +--o-o-------o----o-o----o-------\n"
+"\n"
+" A merge from the parent branch to the feature branch is called a\n"
+" 'sync' or 'catch-up' merge, and a merge from the feature branch to the\n"
+" parent branch is called a 'reintegrate' merge.\n"
+"\n"
+" - Sync Merge Example -\n"
+" ............\n"
+" . .\n"
+" trunk --+------------L--------------R------\n"
+" \\ \\\n"
+" \\ |\n"
+" \\ v\n"
+" feature +------------------------o-----\n"
+" r100 r200\n"
"\n"
" Subversion will locate all the changes on 'trunk' that have not yet\n"
" been merged into the 'feature' branch. In this case that is a single\n"
-" range, r100:200. In the diagram above, L marks the left side\n"
-" (trunk@100) and R marks the right side (trunk@200) of the merge. The\n"
+" range, r100:200. In the diagram above, L marks the left side (trunk@100)\n"
+" and R marks the right side (trunk@200) of the merge source. The\n"
" difference between L and R will be applied to the target working copy\n"
" path. In this case, the working copy is a clean checkout of the entire\n"
" 'feature' branch.\n"
@@ -736,6 +860,39 @@ const svn_opt_subcommand_desc2_t svn_cl__cmd_table[] =
" others. You can review the changes and you may have to resolve\n"
" conflicts before you commit the merge.\n"
"\n"
+" - Reintegrate Merge Example -\n"
+"\n"
+" The feature branch was last synced with trunk up to revision X. So the\n"
+" difference between trunk@X and feature@HEAD contains the complete set\n"
+" of changes that implement the feature, and no other changes. These\n"
+" changes are applied to trunk.\n"
+"\n"
+" rW rX\n"
+" trunk ------+--------------------L------------------o\n"
+" \\ . ^\n"
+" \\ ............. /\n"
+" \\ . /\n"
+" feature +--------------------------------R\n"
+"\n"
+" In the diagram above, L marks the left side (trunk@X) and R marks the\n"
+" right side (feature@HEAD) of the merge. The difference between the\n"
+" left and right side is merged into trunk, the target.\n"
+"\n"
+" To perform the merge, have a clean working copy of trunk and run the\n"
+" following command in its top-level directory:\n"
+"\n"
+" svn merge ^/feature\n"
+"\n"
+" To prevent unnecessary merge conflicts, a reintegrate merge requires\n"
+" that TARGET_WCPATH is not a mixed-revision working copy, has no local\n"
+" modifications, and has no switched subtrees.\n"
+"\n"
+" A reintegrate merge also requires that the source branch is coherently\n"
+" synced with the target -- in the above example, this means that all\n"
+" revisions between the branch point W and the last merged revision X\n"
+" are merged to the feature branch, so that there are no unmerged\n"
+" revisions in-between.\n"
+"\n"
"\n"
" 2. This form is called a 'cherry-pick' merge:\n"
"\n"
@@ -753,7 +910,9 @@ const svn_opt_subcommand_desc2_t svn_cl__cmd_table[] =
" path, the corresponding URL of the path is used, and the default value\n"
" of 'REV' is the base revision (usually the revision last updated to).\n"
"\n"
-" TARGET_WCPATH is a working copy path; if omitted, '.' is assumed.\n"
+" TARGET_WCPATH is a working copy path; if omitted, '.' is generally\n"
+" assumed. The special cases noted above in the 'complete' merge form\n"
+" also apply here.\n"
"\n"
" The revision ranges to be merged are specified by the '-r' and/or '-c'\n"
" options. '-r N:M' refers to the difference in the history of the\n"
@@ -770,7 +929,8 @@ const svn_opt_subcommand_desc2_t svn_cl__cmd_table[] =
" source and target refer to the same branch, a previously committed\n"
" revision can be 'undone'. In a reverse range, N is greater than M in\n"
" '-r N:M', or the '-c' option is used with a negative number: '-c -M'\n"
-" is equivalent to '-r M:<M-1>'.\n"
+" is equivalent to '-r M:<M-1>'. Undoing changes like this is also known\n"
+" as performing a 'reverse merge'.\n"
"\n"
" Multiple '-c' and/or '-r' options may be specified and mixing of\n"
" forward and reverse ranges is allowed.\n"
@@ -806,87 +966,27 @@ const svn_opt_subcommand_desc2_t svn_cl__cmd_table[] =
" svn merge -c50,54,60 -r65:68 ^/trunk\n"
"\n"
"\n"
-" 3. This form is called a 'reintegrate merge':\n"
-"\n"
-" svn merge --reintegrate SOURCE[@REV] [TARGET_WCPATH]\n"
-"\n"
-" In a reintegrate merge, an (e.g. feature) branch is merged back to its\n"
-" originating branch. In other words, the source branch has originally\n"
-" been created by copying the target branch, development has concluded\n"
-" on the source branch and it should now be merged back into the target\n"
-" branch.\n"
-" \n"
-" SOURCE is the URL of a branch to be merged back. If REV is specified,\n"
-" it is used as the peg revision for SOURCE; if REV is not specified,\n"
-" the HEAD revision is assumed.\n"
-"\n"
-" TARGET_WCPATH is a working copy of the branch the changes will be\n"
-" applied to.\n"
-"\n"
-" - Reintegrate Merge Example -\n"
-"\n"
-" A feature has been developed on a branch called 'feature'. The feature\n"
-" branch started as a copy of trunk@W. Work on the feature has completed\n"
-" and it should be merged back into the trunk.\n"
-"\n"
-" The feature branch was last synced with trunk up to revision X. So the\n"
-" difference between trunk@X and feature@HEAD contains the complete set\n"
-" of changes that implement the feature, and no other changes. These\n"
-" changes are applied to trunk.\n"
-"\n"
-" feature +--------------------------------R\n"
-" / . \\\n"
-" / ............. \\\n"
-" / . v\n"
-" trunk ------+--------------------L------------------o\n"
-" rW rX\n"
-"\n"
-" In the diagram above, L marks the left side (trunk@X) and R marks the\n"
-" right side (feature@HEAD) of the merge. The difference between the\n"
-" left and right side is merged into trunk, the target.\n"
-"\n"
-" To perform the merge, have a clean working copy of trunk and run the\n"
-" following command in its top-level directory:\n"
-"\n"
-" svn merge --reintegrate ^/feature\n"
+" 3. This form is called a '2-URL merge':\n"
"\n"
-" To prevent unnecessary merge conflicts, a reintegrate merge requires\n"
-" that TARGET_WCPATH is not a mixed-revision working copy, has no local\n"
-" modifications, and has no switched subtrees.\n"
-"\n"
-" A reintegrate merge also requires that the source branch is coherently\n"
-" synced with the target -- in the above example, this means that all\n"
-" revisions between the branch point W and the last merged revision X\n"
-" are merged to the feature branch, so that there are no unmerged\n"
-" revisions in-between.\n"
-"\n"
-" After the reintegrate merge, the feature branch cannot be synced to\n"
-" the trunk again without merge conflicts. If further work must be done\n"
-" on the feature branch, it should be deleted and then re-created.\n"
-"\n"
-"\n"
-" 4. This form is called a '2-URL merge':\n"
-"\n"
-" svn merge SOURCE1[@N] SOURCE2[@M] [TARGET_WCPATH]\n"
-"\n"
-" Two source URLs are specified, together with two revisions N and M.\n"
-" The two sources are compared at the specified revisions, and the\n"
-" difference is applied to TARGET_WCPATH, which is a path to a working\n"
-" copy of another branch. The three branches involved can be completely\n"
-" unrelated.\n"
+" svn merge SOURCE1[@REV1] SOURCE2[@REV2] [TARGET_WCPATH]\n"
"\n"
" You should use this merge variant only if the other variants do not\n"
" apply to your situation, as this variant can be quite complex to\n"
" master.\n"
"\n"
-" If TARGET_WCPATH is omitted, a default value of '.' is assumed.\n"
-" However, in the special case where both sources refer to a file node\n"
-" with the same basename and a similarly named file is also found within\n"
-" '.', the differences will be applied to that local file. The source\n"
-" revisions default to HEAD if omitted.\n"
+" Two source URLs are specified, identifying two trees on the same\n"
+" branch or on different branches. The trees are compared and the\n"
+" difference from SOURCE1@REV1 to SOURCE2@REV2 is applied to the\n"
+" working copy of the target branch at TARGET_WCPATH. The target\n"
+" branch may be the same as one or both sources, or different again.\n"
+" The three branches involved can be completely unrelated.\n"
+"\n"
+" TARGET_WCPATH is a working copy path; if omitted, '.' is generally\n"
+" assumed. The special cases noted above in the 'complete' merge form\n"
+" also apply here.\n"
"\n"
-" The sources can also be specified as working copy paths, in which case\n"
-" the URLs of the merge sources are derived from the working copies.\n"
+" SOURCE1 and/or SOURCE2 can also be specified as a working copy path,\n"
+" in which case the merge source URL is derived from the working copy.\n"
"\n"
" - 2-URL Merge Example -\n"
"\n"
@@ -988,16 +1088,35 @@ const svn_opt_subcommand_desc2_t svn_cl__cmd_table[] =
" repositories.\n"),
{'r', 'c', 'N', opt_depth, 'q', opt_force, opt_dry_run, opt_merge_cmd,
opt_record_only, 'x', opt_ignore_ancestry, opt_accept, opt_reintegrate,
- opt_allow_mixed_revisions} },
+ opt_allow_mixed_revisions, 'v'} },
{ "mergeinfo", svn_cl__mergeinfo, {0}, N_
("Display merge-related information.\n"
- "usage: mergeinfo SOURCE[@REV] [TARGET[@REV]]\n"
- "\n"
- " Display information related to merges (or potential merges) between\n"
- " SOURCE and TARGET (default: '.'). Display the type of information\n"
- " specified by the --show-revs option. If --show-revs isn't passed,\n"
- " it defaults to --show-revs='merged'.\n"
+ "usage: 1. mergeinfo SOURCE[@REV] [TARGET[@REV]]\n"
+ " 2. mergeinfo --show-revs=WHICH SOURCE[@REV] [TARGET[@REV]]\n"
+ "\n"
+ " 1. Summarize the history of merging between SOURCE and TARGET. The graph\n"
+ " shows, from left to right:\n"
+ " the youngest common ancestor of the branches;\n"
+ " the latest full merge in either direction, and thus the common base\n"
+ " that will be used for the next complete merge;\n"
+ " the repository path and revision number of the tip of each branch.\n"
+ "\n"
+ " 2. Print the revision numbers on SOURCE that have been merged to TARGET\n"
+ " (with --show-revs=merged), or that have not been merged to TARGET\n"
+ " (with --show-revs=eligible). Print only revisions in which there was\n"
+ " at least one change in SOURCE.\n"
+ "\n"
+ " If --revision (-r) is provided, filter the displayed information to\n"
+ " show only that which is associated with the revisions within the\n"
+ " specified range. Revision numbers, dates, and the 'HEAD' keyword are\n"
+ " valid range values.\n"
+ "\n"
+ " SOURCE and TARGET are the source and target branch URLs, respectively.\n"
+ " (If a WC path is given, the corresponding base URL is used.) The default\n"
+ " TARGET is the current working directory ('.'). REV specifies the revision\n"
+ " to be considered the tip of the branch; the default for SOURCE is HEAD,\n"
+ " and the default for TARGET is HEAD for a URL or BASE for a WC path.\n"
"\n"
" The depth can be 'empty' or 'infinity'; the default is 'empty'.\n"),
{'r', 'R', opt_depth, opt_show_revs} },
@@ -1020,20 +1139,26 @@ const svn_opt_subcommand_desc2_t svn_cl__cmd_table[] =
{'q', opt_parents, SVN_CL__LOG_MSG_OPTIONS} },
{ "move", svn_cl__move, {"mv", "rename", "ren"}, N_
- ("Move and/or rename something in working copy or repository.\n"
+ ("Move (rename) an item in a working copy or repository.\n"
"usage: move SRC... DST\n"
"\n"
- "When moving multiple sources, they will be added as children of DST,\n"
- "which must be a directory.\n"
- "\n"
- " Note: this subcommand is equivalent to a 'copy' and 'delete'.\n"
- " Note: the --revision option has no use and is deprecated.\n"
- "\n"
" SRC and DST can both be working copy (WC) paths or URLs:\n"
- " WC -> WC: move and schedule for addition (with history)\n"
- " URL -> URL: complete server-side rename.\n"
- " All the SRCs must be of the same type.\n"),
- {'r', 'q', opt_force, opt_parents, SVN_CL__LOG_MSG_OPTIONS} },
+ " WC -> WC: move an item in a working copy, as a local change to\n"
+ " be committed later (with or without further changes)\n"
+ " URL -> URL: move an item in the repository directly, immediately\n"
+ " creating a new revision in the repository\n"
+ " All the SRCs must be of the same type. When moving multiple sources,\n"
+ " they will be added as children of DST, which must be a directory.\n"
+ "\n"
+ " SRC and DST of WC -> WC moves must be committed in the same revision.\n"
+ " Furthermore, WC -> WC moves will refuse to move a mixed-revision subtree.\n"
+ " To avoid unnecessary conflicts, it is recommended to run 'svn update'\n"
+ " to update the subtree to a single revision before moving it.\n"
+ " The --allow-mixed-revisions option is provided for backward compatibility.\n"
+ "\n"
+ " The --revision option has no use and is deprecated.\n"),
+ {'r', 'q', opt_force, opt_parents, opt_allow_mixed_revisions,
+ SVN_CL__LOG_MSG_OPTIONS} },
{ "patch", svn_cl__patch, {0}, N_
("Apply a patch to a working copy.\n"
@@ -1044,7 +1169,8 @@ const svn_opt_subcommand_desc2_t svn_cl__cmd_table[] =
"\n"
" A unidiff patch suitable for application to a working copy can be\n"
" produced with the 'svn diff' command or third-party diffing tools.\n"
- " Any non-unidiff content of PATCHFILE is ignored.\n"
+ " Any non-unidiff content of PATCHFILE is ignored, except for Subversion\n"
+ " property diffs as produced by 'svn diff'.\n"
"\n"
" Changes listed in the patch will either be applied or rejected.\n"
" If a change does not match at its exact line offset, it may be applied\n"
@@ -1074,8 +1200,8 @@ const svn_opt_subcommand_desc2_t svn_cl__cmd_table[] =
"\n"
" Hint: If the patch file was created with Subversion, it will contain\n"
" the number of a revision N the patch will cleanly apply to\n"
- " (look for lines like \"--- foo/bar.txt (revision N)\").\n"
- " To avoid rejects, first update to the revision N using \n"
+ " (look for lines like '--- foo/bar.txt (revision N)').\n"
+ " To avoid rejects, first update to the revision N using\n"
" 'svn update -r N', apply the patch, and then update back to the\n"
" HEAD revision. This way, conflicts can be resolved interactively.\n"
),
@@ -1101,7 +1227,7 @@ const svn_opt_subcommand_desc2_t svn_cl__cmd_table[] =
" 2. Edits unversioned remote prop on repos revision.\n"
" TARGET only determines which repository to access.\n"
"\n"
- "See 'svn help propset' for more on setting properties.\n"),
+ " See 'svn help propset' for more on setting properties.\n"),
{'r', opt_revprop, SVN_CL__LOG_MSG_OPTIONS, opt_force} },
{ "propget", svn_cl__propget, {"pget", "pg"}, N_
@@ -1114,15 +1240,19 @@ const svn_opt_subcommand_desc2_t svn_cl__cmd_table[] =
" 2. Prints unversioned remote prop on repos revision.\n"
" TARGET only determines which repository to access.\n"
"\n"
- " By default, this subcommand will add an extra newline to the end\n"
- " of the property values so that the output looks pretty. Also,\n"
- " whenever there are multiple paths involved, each property value\n"
- " is prefixed with the path with which it is associated. Use the\n"
- " --strict option to disable these beautifications (useful when\n"
- " redirecting a binary property value to a file, but available only\n"
- " if you supply a single TARGET to a non-recursive propget operation).\n"),
+ " With --verbose, the target path and the property name are printed on\n"
+ " separate lines before each value, like 'svn proplist --verbose'.\n"
+ " Otherwise, if there is more than one TARGET or a depth other than\n"
+ " 'empty', the target path is printed on the same line before each value.\n"
+ "\n"
+ " By default, an extra newline is printed after the property value so that\n"
+ " the output looks pretty. With a single TARGET and depth 'empty', you can\n"
+ " use the --strict option to disable this (useful when redirecting a binary\n"
+ " property value to a file, for example).\n"),
{'v', 'R', opt_depth, 'r', opt_revprop, opt_strict, opt_xml,
- opt_changelist } },
+ opt_changelist, opt_show_inherited_props },
+ {{'v', N_("print path, name and value on separate lines")},
+ {opt_strict, N_("don't print an extra newline")}} },
{ "proplist", svn_cl__proplist, {"plist", "pl"}, N_
("List all properties on files, dirs, or revisions.\n"
@@ -1132,8 +1262,14 @@ const svn_opt_subcommand_desc2_t svn_cl__cmd_table[] =
" 1. Lists versioned props. If specified, REV determines in which\n"
" revision the target is first looked up.\n"
" 2. Lists unversioned remote props on repos revision.\n"
- " TARGET only determines which repository to access.\n"),
- {'v', 'R', opt_depth, 'r', 'q', opt_revprop, opt_xml, opt_changelist } },
+ " TARGET only determines which repository to access.\n"
+ "\n"
+ " With --verbose, the property values are printed as well, like 'svn propget\n"
+ " --verbose'. With --quiet, the paths are not printed.\n"),
+ {'v', 'R', opt_depth, 'r', 'q', opt_revprop, opt_xml, opt_changelist,
+ opt_show_inherited_props },
+ {{'v', N_("print path, name and value on separate lines")},
+ {'q', N_("don't print the path")}} },
{ "propset", svn_cl__propset, {"pset", "ps"}, N_
("Set the value of a property on files, dirs, or revisions.\n"
@@ -1146,18 +1282,35 @@ const svn_opt_subcommand_desc2_t svn_cl__cmd_table[] =
"\n"
" The value may be provided with the --file option instead of PROPVAL.\n"
"\n"
- " Note: svn recognizes the following special versioned properties\n"
- " but will store any arbitrary properties set:\n"
- " svn:ignore - A newline separated list of file glob patterns to ignore.\n"
+ " Property names starting with 'svn:' are reserved. Subversion recognizes\n"
+ " the following special versioned properties on a file:\n"
" svn:keywords - Keywords to be expanded. Valid keywords are:\n"
- " URL, HeadURL - The URL for the head version of the object.\n"
+ " URL, HeadURL - The URL for the head version of the file.\n"
" Author, LastChangedBy - The last person to modify the file.\n"
- " Date, LastChangedDate - The date/time the object was last modified.\n"
- " Rev, Revision, - The last revision the object changed.\n"
- " LastChangedRevision\n"
- " Id - A compressed summary of the previous\n"
- " 4 keywords.\n"
+ " Date, LastChangedDate - The date/time the file was last modified.\n"
+ " Rev, Revision, - The last revision the file changed.\n"
+ " LastChangedRevision\n"
+ " Id - A compressed summary of the previous four.\n"
" Header - Similar to Id but includes the full URL.\n"
+ "\n"
+ " Custom keywords can be defined with a format string separated from\n"
+ " the keyword name with '='. Valid format substitutions are:\n"
+ " %a - The author of the revision given by %r.\n"
+ " %b - The basename of the URL of the file.\n"
+ " %d - Short format of the date of the revision given by %r.\n"
+ " %D - Long format of the date of the revision given by %r.\n"
+ " %P - The file's path, relative to the repository root.\n"
+ " %r - The number of the revision which last changed the file.\n"
+ " %R - The URL to the root of the repository.\n"
+ " %u - The URL of the file.\n"
+ " %_ - A space (keyword definitions cannot contain a literal space).\n"
+ " %% - A literal '%'.\n"
+ " %H - Equivalent to %P%_%r%_%d%_%a.\n"
+ " %I - Equivalent to %b%_%r%_%d%_%a.\n"
+ " Example custom keyword definition: MyKeyword=%r%_%a%_%P\n"
+ " Once a custom keyword has been defined for a file, it can be used\n"
+ " within the file like any other keyword: $MyKeyword$\n"
+ "\n"
" svn:executable - If present, make the file executable. Use\n"
" 'svn propdel svn:executable PATH...' to clear.\n"
" svn:eol-style - One of 'native', 'LF', 'CR', 'CRLF'.\n"
@@ -1165,43 +1318,37 @@ const svn_opt_subcommand_desc2_t svn_cl__cmd_table[] =
" whether to merge the file, and how to serve it from Apache.\n"
" A mimetype beginning with 'text/' (or an absent mimetype) is\n"
" treated as text. Anything else is treated as binary.\n"
- " svn:externals - A newline separated list of module specifiers,\n"
- " each of which consists of a URL and a relative directory path,\n"
- " similar to the syntax of the 'svn checkout' command:\n"
+ " svn:needs-lock - If present, indicates that the file should be locked\n"
+ " before it is modified. Makes the working copy file read-only\n"
+ " when it is not locked. Use 'svn propdel svn:needs-lock PATH...'\n"
+ " to clear.\n"
+ "\n"
+ " Subversion recognizes the following special versioned properties on a\n"
+ " directory:\n"
+ " svn:ignore - A list of file glob patterns to ignore, one per line.\n"
+ " svn:global-ignores - Like svn:ignore, but inheritable.\n"
+ " svn:externals - A list of module specifiers, one per line, in the\n"
+ " following format similar to the syntax of 'svn checkout':\n"
+ " [-r REV] URL[@PEG] LOCALPATH\n"
+ " Example:\n"
" http://example.com/repos/zig foo/bar\n"
- " A revision to check out can optionally be specified to pin the\n"
- " external to a known revision:\n"
+ " The LOCALPATH is relative to the directory having this property.\n"
+ " To pin the external to a known revision, specify the optional REV:\n"
" -r25 http://example.com/repos/zig foo/bar\n"
- " To unambiguously identify an element at a path which has been\n"
- " deleted (possibly even deleted multiple times in its history),\n"
- " an optional peg revision can be appended to the URL:\n"
+ " To unambiguously identify an element at a path which may have been\n"
+ " subsequently deleted or renamed, specify the optional PEG revision:\n"
" -r25 http://example.com/repos/zig@42 foo/bar\n"
- " Relative URLs are indicated by starting the URL with one\n"
- " of the following strings:\n"
+ " The URL may be a full URL or a relative URL starting with one of:\n"
" ../ to the parent directory of the extracted external\n"
" ^/ to the repository root\n"
- " // to the scheme\n"
" / to the server root\n"
+ " // to the URL scheme\n"
+ " Use of the following format is discouraged but is supported for\n"
+ " interoperability with Subversion 1.4 and earlier clients:\n"
+ " LOCALPATH [-r PEG] URL\n"
" The ambiguous format 'relative_path relative_path' is taken as\n"
" 'relative_url relative_path' with peg revision support.\n"
- " Lines in externals definitions starting with the '#' character\n"
- " are considered comments and are ignored.\n"
- " Subversion 1.4 and earlier only support the following formats\n"
- " where peg revisions can only be specified using a -r modifier\n"
- " and where URLs cannot be relative:\n"
- " foo http://example.com/repos/zig\n"
- " foo/bar -r 1234 http://example.com/repos/zag\n"
- " Use of these formats is discouraged. They should only be used if\n"
- " interoperability with 1.4 clients is desired.\n"
- " svn:needs-lock - If present, indicates that the file should be locked\n"
- " before it is modified. Makes the working copy file read-only\n"
- " when it is not locked. Use 'svn propdel svn:needs-lock PATH...'\n"
- " to clear.\n"
- "\n"
- " The svn:keywords, svn:executable, svn:eol-style, svn:mime-type and\n"
- " svn:needs-lock properties cannot be set on a directory. A non-recursive\n"
- " attempt will fail, and a recursive attempt will set the property\n"
- " only on the file children of the directory.\n"),
+ " Lines starting with a '#' character are ignored.\n"),
{'F', opt_encoding, 'q', 'r', opt_targets, 'R', opt_depth, opt_revprop,
opt_force, opt_changelist },
{{'F', N_("read property value from file ARG")}} },
@@ -1231,9 +1378,14 @@ const svn_opt_subcommand_desc2_t svn_cl__cmd_table[] =
{ "resolve", svn_cl__resolve, {0}, N_
("Resolve conflicts on working copy files or directories.\n"
- "usage: resolve --accept=ARG [PATH...]\n"
+ "usage: resolve [PATH...]\n"
+ "\n"
+ " By default, perform interactive conflict resolution on PATH.\n"
+ " In this mode, the command is recursive by default (depth 'infinity').\n"
"\n"
- " Note: the --accept option is currently required.\n"),
+ " The --accept=ARG option prevents interactive prompting and forces\n"
+ " conflicts on PATH to be resolved in the manner specified by ARG.\n"
+ " In this mode, the command is not recursive by default (depth 'empty').\n"),
{opt_targets, 'R', opt_depth, 'q', opt_accept},
{{opt_accept, N_("specify automatic conflict resolution source\n"
" "
@@ -1252,11 +1404,15 @@ const svn_opt_subcommand_desc2_t svn_cl__cmd_table[] =
{opt_targets, 'R', opt_depth, 'q'} },
{ "revert", svn_cl__revert, {0}, N_
- ("Restore pristine working copy file (undo most local edits).\n"
+ ("Restore pristine working copy state (undo local changes).\n"
"usage: revert PATH...\n"
"\n"
- " Note: this subcommand does not require network access, and resolves\n"
- " any conflicted states.\n"),
+ " Revert changes in the working copy at or within PATH, and remove\n"
+ " conflict markers as well, if any.\n"
+ "\n"
+ " This subcommand does not revert already committed changes.\n"
+ " For information about undoing already committed changes, search\n"
+ " the output of 'svn help merge' for 'undo'.\n"),
{opt_targets, 'R', opt_depth, 'q', opt_changelist} },
{ "status", svn_cl__status, {"stat", "st"}, N_
@@ -1285,9 +1441,10 @@ const svn_opt_subcommand_desc2_t svn_cl__cmd_table[] =
" ' ' no modifications\n"
" 'C' Conflicted\n"
" 'M' Modified\n"
- " Third column: Whether the working copy directory is locked\n"
- " ' ' not locked\n"
- " 'L' locked\n"
+ " Third column: Whether the working copy is locked for writing by\n"
+ " another Subversion client modifying the working copy\n"
+ " ' ' not locked for writing\n"
+ " 'L' locked for writing\n"
" Fourth column: Scheduled commit will contain addition-with-history\n"
" ' ' no history scheduled with commit\n"
" '+' history scheduled with commit\n"
@@ -1295,16 +1452,16 @@ const svn_opt_subcommand_desc2_t svn_cl__cmd_table[] =
" ' ' normal\n"
" 'S' the item has a Switched URL relative to the parent\n"
" 'X' a versioned file created by an eXternals definition\n"
- " Sixth column: Repository lock token\n"
+ " Sixth column: Whether the item is locked in repository for exclusive commit\n"
" (without -u)\n"
- " ' ' no lock token\n"
- " 'K' lock token present\n"
+ " ' ' not locked by this working copy\n"
+ " 'K' locked by this working copy, but lock might be stolen or broken\n"
" (with -u)\n"
- " ' ' not locked in repository, no lock token\n"
- " 'K' locked in repository, lock toKen present\n"
- " 'O' locked in repository, lock token in some Other working copy\n"
- " 'T' locked in repository, lock token present but sTolen\n"
- " 'B' not locked in repository, lock token present but Broken\n"
+ " ' ' not locked in repository, not locked by this working copy\n"
+ " 'K' locked in repository, lock owned by this working copy\n"
+ " 'O' locked in repository, lock owned by another working copy\n"
+ " 'T' locked in repository, lock owned by this working copy was stolen\n"
+ " 'B' not locked in repository, lock owned by this working copy is broken\n"
" Seventh column: Whether the item is the victim of a tree conflict\n"
" ' ' normal\n"
" 'C' tree-Conflicted\n"
@@ -1395,7 +1552,10 @@ const svn_opt_subcommand_desc2_t svn_cl__cmd_table[] =
" svn switch --relocate http://www.example.com/repo/project \\\n"
" svn://svn.example.com/repo/project\n"),
{ 'r', 'N', opt_depth, opt_set_depth, 'q', opt_merge_cmd, opt_relocate,
- opt_ignore_externals, opt_ignore_ancestry, opt_force, opt_accept} },
+ opt_ignore_externals, opt_ignore_ancestry, opt_force, opt_accept},
+ {{opt_ignore_ancestry,
+ N_("allow switching to a node with no common ancestor")}}
+ },
{ "unlock", svn_cl__unlock, {0}, N_
("Unlock working copy paths or URLs.\n"
@@ -1479,9 +1639,9 @@ check_lib_versions(void)
{ "svn_diff", svn_diff_version },
{ NULL, NULL }
};
-
SVN_VERSION_DEFINE(my_version);
- return svn_ver_check_list(&my_version, checklist);
+
+ return svn_ver_check_list2(&my_version, checklist, svn_ver_equal);
}
@@ -1506,15 +1666,67 @@ svn_cl__check_cancel(void *baton)
return SVN_NO_ERROR;
}
+/* Add a --search argument to OPT_STATE.
+ * These options start a new search pattern group. */
+static void
+add_search_pattern_group(svn_cl__opt_state_t *opt_state,
+ const char *pattern,
+ apr_pool_t *result_pool)
+{
+ apr_array_header_t *group = NULL;
+
+ if (opt_state->search_patterns == NULL)
+ opt_state->search_patterns = apr_array_make(result_pool, 1,
+ sizeof(apr_array_header_t *));
+
+ group = apr_array_make(result_pool, 1, sizeof(const char *));
+ APR_ARRAY_PUSH(group, const char *) = pattern;
+ APR_ARRAY_PUSH(opt_state->search_patterns, apr_array_header_t *) = group;
+}
+
+/* Add a --search-and argument to OPT_STATE.
+ * These patterns are added to an existing pattern group, if any. */
+static void
+add_search_pattern_to_latest_group(svn_cl__opt_state_t *opt_state,
+ const char *pattern,
+ apr_pool_t *result_pool)
+{
+ apr_array_header_t *group;
+
+ if (opt_state->search_patterns == NULL)
+ {
+ add_search_pattern_group(opt_state, pattern, result_pool);
+ return;
+ }
+
+ group = APR_ARRAY_IDX(opt_state->search_patterns,
+ opt_state->search_patterns->nelts - 1,
+ apr_array_header_t *);
+ APR_ARRAY_PUSH(group, const char *) = pattern;
+}
+
/*** Main. ***/
-int
-main(int argc, const char *argv[])
+/* Report and clear the error ERR, and return EXIT_FAILURE. Suppress the
+ * error message if it is SVN_ERR_IO_PIPE_WRITE_ERROR. */
+#define EXIT_ERROR(err) \
+ svn_cmdline_handle_exit_error(err, NULL, "svn: ")
+
+/* A redefinition of the public SVN_INT_ERR macro, that suppresses the
+ * error message if it is SVN_ERR_IO_PIPE_WRITE_ERROR. */
+#undef SVN_INT_ERR
+#define SVN_INT_ERR(expr) \
+ do { \
+ svn_error_t *svn_err__temp = (expr); \
+ if (svn_err__temp) \
+ return EXIT_ERROR(svn_err__temp); \
+ } while (0)
+
+static int
+sub_main(int argc, const char *argv[], apr_pool_t *pool)
{
svn_error_t *err;
- apr_allocator_t *allocator;
- apr_pool_t *pool;
int opt_id;
apr_getopt_t *os;
svn_cl__opt_state_t opt_state = { 0, { 0 } };
@@ -1528,44 +1740,29 @@ main(int argc, const char *argv[])
svn_config_t *cfg_config;
svn_boolean_t descend = TRUE;
svn_boolean_t interactive_conflicts = FALSE;
+ svn_boolean_t force_interactive = FALSE;
+ svn_cl__conflict_stats_t *conflict_stats
+ = svn_cl__conflict_stats_create(pool);
+ svn_boolean_t use_notifier = TRUE;
+ svn_boolean_t reading_file_from_stdin = FALSE;
apr_hash_t *changelists;
-
- /* Initialize the app. */
- if (svn_cmdline_init("svn", stderr) != EXIT_SUCCESS)
- return EXIT_FAILURE;
-
- /* Create our top-level pool. Use a separate mutexless allocator,
- * given this application is single threaded.
- */
- if (apr_allocator_create(&allocator))
- return EXIT_FAILURE;
-
- apr_allocator_max_free_set(allocator, SVN_ALLOCATOR_RECOMMENDED_MAX_FREE);
-
- pool = svn_pool_create_ex(NULL, allocator);
- apr_allocator_owner_set(allocator, pool);
+ apr_hash_t *cfg_hash;
received_opts = apr_array_make(pool, SVN_OPT_MAX_OPTIONS, sizeof(int));
/* Check library versions */
- err = check_lib_versions();
- if (err)
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ SVN_INT_ERR(check_lib_versions());
#if defined(WIN32) || defined(__CYGWIN__)
/* Set the working copy administrative directory name. */
if (getenv("SVN_ASP_DOT_NET_HACK"))
{
- err = svn_wc_set_adm_dir("_svn", pool);
- if (err)
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ SVN_INT_ERR(svn_wc_set_adm_dir("_svn", pool));
}
#endif
/* Initialize the RA library. */
- err = svn_ra_initialize(pool);
- if (err)
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ SVN_INT_ERR(svn_ra_initialize(pool));
/* Init our changelists hash. */
changelists = apr_hash_make(pool);
@@ -1578,20 +1775,17 @@ main(int argc, const char *argv[])
opt_state.depth = svn_depth_unknown;
opt_state.set_depth = svn_depth_unknown;
opt_state.accept_which = svn_cl__accept_unspecified;
- opt_state.show_revs = svn_cl__show_revs_merged;
+ opt_state.show_revs = svn_cl__show_revs_invalid;
/* No args? Show usage. */
if (argc <= 1)
{
- svn_cl__help(NULL, NULL, pool);
- svn_pool_destroy(pool);
+ SVN_INT_ERR(svn_cl__help(NULL, NULL, pool));
return EXIT_FAILURE;
}
/* Else, parse options. */
- err = svn_cmdline__getopt_init(&os, argc, argv, pool);
- if (err)
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ SVN_INT_ERR(svn_cmdline__getopt_init(&os, argc, argv, pool));
os->interleave = 1;
while (1)
@@ -1606,8 +1800,7 @@ main(int argc, const char *argv[])
break;
else if (apr_err)
{
- svn_cl__help(NULL, NULL, pool);
- svn_pool_destroy(pool);
+ SVN_INT_ERR(svn_cl__help(NULL, NULL, pool));
return EXIT_FAILURE;
}
@@ -1622,13 +1815,13 @@ main(int argc, const char *argv[])
{
err = svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, err,
_("Non-numeric limit argument given"));
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ return EXIT_ERROR(err);
}
if (opt_state.limit <= 0)
{
err = svn_error_create(SVN_ERR_INCORRECT_PARAMS, NULL,
_("Argument to --limit must be positive"));
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ return EXIT_ERROR(err);
}
}
break;
@@ -1649,14 +1842,13 @@ main(int argc, const char *argv[])
err = svn_error_create
(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("Can't specify -c with --old"));
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ return EXIT_ERROR(err);
}
for (i = 0; i < change_revs->nelts; i++)
{
char *end;
svn_revnum_t changeno, changeno_end;
- svn_opt_revision_range_t *range;
const char *change_str =
APR_ARRAY_IDX(change_revs, i, const char *);
const char *s = change_str;
@@ -1683,7 +1875,7 @@ main(int argc, const char *argv[])
_("Negative number in range (%s)"
" not supported with -c"),
change_str);
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ return EXIT_ERROR(err);
}
s = end + 1;
while (*s == 'r')
@@ -1695,14 +1887,14 @@ main(int argc, const char *argv[])
err = svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("Non-numeric change argument (%s) "
"given to -c"), change_str);
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ return EXIT_ERROR(err);
}
if (changeno == 0)
{
err = svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("There is no change 0"));
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ return EXIT_ERROR(err);
}
if (is_negative)
@@ -1728,15 +1920,11 @@ main(int argc, const char *argv[])
changeno_end = changeno - 1;
}
- range = apr_palloc(pool, sizeof(*range));
- range->start.value.number = changeno;
- range->end.value.number = changeno_end;
-
opt_state.used_change_arg = TRUE;
- range->start.kind = svn_opt_revision_number;
- range->end.kind = svn_opt_revision_number;
APR_ARRAY_PUSH(opt_state.revision_ranges,
- svn_opt_revision_range_t *) = range;
+ svn_opt_revision_range_t *)
+ = svn_opt__revision_range_from_revnums(changeno, changeno_end,
+ pool);
}
}
break;
@@ -1745,13 +1933,12 @@ main(int argc, const char *argv[])
if (svn_opt_parse_revision_to_range(opt_state.revision_ranges,
opt_arg, pool) != 0)
{
- err = svn_utf_cstring_to_utf8(&utf8_opt_arg, opt_arg, pool);
- if (! err)
- err = svn_error_createf
+ SVN_INT_ERR(svn_utf_cstring_to_utf8(&utf8_opt_arg, opt_arg, pool));
+ err = svn_error_createf
(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("Syntax error in revision argument '%s'"),
utf8_opt_arg);
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ return EXIT_ERROR(err);
}
break;
case 'v':
@@ -1771,12 +1958,10 @@ main(int argc, const char *argv[])
opt_state.incremental = TRUE;
break;
case 'F':
- err = svn_utf_cstring_to_utf8(&utf8_opt_arg, opt_arg, pool);
- if (! err)
- err = svn_stringbuf_from_file2(&(opt_state.filedata),
- utf8_opt_arg, pool);
- if (err)
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ SVN_INT_ERR(svn_utf_cstring_to_utf8(&utf8_opt_arg, opt_arg, pool));
+ SVN_INT_ERR(svn_stringbuf_from_file2(&(opt_state.filedata),
+ utf8_opt_arg, pool));
+ reading_file_from_stdin = (strcmp(utf8_opt_arg, "-") == 0);
dash_F_arg = opt_arg;
break;
case opt_targets:
@@ -1787,14 +1972,9 @@ main(int argc, const char *argv[])
the targets into an array, because otherwise we wouldn't
know what delimiter to use for svn_cstring_split(). */
- err = svn_utf_cstring_to_utf8(&utf8_opt_arg, opt_arg, pool);
-
- if (! err)
- err = svn_stringbuf_from_file2(&buffer, utf8_opt_arg, pool);
- if (! err)
- err = svn_utf_stringbuf_to_utf8(&buffer_utf8, buffer, pool);
- if (err)
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ SVN_INT_ERR(svn_utf_cstring_to_utf8(&utf8_opt_arg, opt_arg, pool));
+ SVN_INT_ERR(svn_stringbuf_from_file2(&buffer, utf8_opt_arg, pool));
+ SVN_INT_ERR(svn_utf_stringbuf_to_utf8(&buffer_utf8, buffer, pool));
opt_state.targets = svn_cstring_split(buffer_utf8->data, "\n\r",
TRUE, pool);
}
@@ -1820,55 +2000,51 @@ main(int argc, const char *argv[])
case opt_depth:
err = svn_utf_cstring_to_utf8(&utf8_opt_arg, opt_arg, pool);
if (err)
- return svn_cmdline_handle_exit_error
- (svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ return EXIT_ERROR
+ (svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, err,
_("Error converting depth "
- "from locale to UTF-8")), pool, "svn: ");
+ "from locale to UTF-8")));
opt_state.depth = svn_depth_from_word(utf8_opt_arg);
if (opt_state.depth == svn_depth_unknown
|| opt_state.depth == svn_depth_exclude)
{
- return svn_cmdline_handle_exit_error
+ return EXIT_ERROR
(svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("'%s' is not a valid depth; try "
"'empty', 'files', 'immediates', "
"or 'infinity'"),
- utf8_opt_arg), pool, "svn: ");
+ utf8_opt_arg));
}
break;
case opt_set_depth:
err = svn_utf_cstring_to_utf8(&utf8_opt_arg, opt_arg, pool);
if (err)
- return svn_cmdline_handle_exit_error
- (svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ return EXIT_ERROR
+ (svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, err,
_("Error converting depth "
- "from locale to UTF-8")), pool, "svn: ");
+ "from locale to UTF-8")));
opt_state.set_depth = svn_depth_from_word(utf8_opt_arg);
/* svn_depth_exclude is okay for --set-depth. */
if (opt_state.set_depth == svn_depth_unknown)
{
- return svn_cmdline_handle_exit_error
+ return EXIT_ERROR
(svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("'%s' is not a valid depth; try "
"'exclude', 'empty', 'files', "
"'immediates', or 'infinity'"),
- utf8_opt_arg), pool, "svn: ");
+ utf8_opt_arg));
}
break;
case opt_version:
opt_state.version = TRUE;
break;
case opt_auth_username:
- err = svn_utf_cstring_to_utf8(&opt_state.auth_username,
- opt_arg, pool);
- if (err)
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ SVN_INT_ERR(svn_utf_cstring_to_utf8(&opt_state.auth_username,
+ opt_arg, pool));
break;
case opt_auth_password:
- err = svn_utf_cstring_to_utf8(&opt_state.auth_password,
- opt_arg, pool);
- if (err)
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ SVN_INT_ERR(svn_utf_cstring_to_utf8(&opt_state.auth_password,
+ opt_arg, pool));
break;
case opt_encoding:
opt_state.encoding = apr_pstrdup(pool, opt_arg);
@@ -1891,17 +2067,26 @@ main(int argc, const char *argv[])
case opt_non_interactive:
opt_state.non_interactive = TRUE;
break;
+ case opt_force_interactive:
+ force_interactive = TRUE;
+ break;
case opt_trust_server_cert:
opt_state.trust_server_cert = TRUE;
break;
+ case opt_no_diff_added:
+ opt_state.diff.no_diff_added = TRUE;
+ break;
case opt_no_diff_deleted:
- opt_state.no_diff_deleted = TRUE;
+ opt_state.diff.no_diff_deleted = TRUE;
+ break;
+ case opt_ignore_properties:
+ opt_state.diff.ignore_properties = TRUE;
break;
case opt_show_copies_as_adds:
- opt_state.show_copies_as_adds = TRUE;
+ opt_state.diff.show_copies_as_adds = TRUE;
break;
case opt_notice_ancestry:
- opt_state.notice_ancestry = TRUE;
+ opt_state.diff.notice_ancestry = TRUE;
break;
case opt_ignore_ancestry:
opt_state.ignore_ancestry = TRUE;
@@ -1913,12 +2098,11 @@ main(int argc, const char *argv[])
opt_state.relocate = TRUE;
break;
case 'x':
- err = svn_utf_cstring_to_utf8(&opt_state.extensions, opt_arg, pool);
- if (err)
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ SVN_INT_ERR(svn_utf_cstring_to_utf8(&opt_state.extensions,
+ opt_arg, pool));
break;
case opt_diff_cmd:
- opt_state.diff_cmd = apr_pstrdup(pool, opt_arg);
+ opt_state.diff.diff_cmd = apr_pstrdup(pool, opt_arg);
break;
case opt_merge_cmd:
opt_state.merge_cmd = apr_pstrdup(pool, opt_arg);
@@ -1935,7 +2119,7 @@ main(int argc, const char *argv[])
err = svn_error_create
(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("Can't specify -c with --old"));
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ return EXIT_ERROR(err);
}
opt_state.old_target = apr_pstrdup(pool, opt_arg);
break;
@@ -1945,9 +2129,7 @@ main(int argc, const char *argv[])
case opt_config_dir:
{
const char *path_utf8;
- err = svn_utf_cstring_to_utf8(&path_utf8, opt_arg, pool);
- if (err)
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ SVN_INT_ERR(svn_utf_cstring_to_utf8(&path_utf8, opt_arg, pool));
opt_state.config_dir = svn_dirent_internal_style(path_utf8, pool);
}
break;
@@ -1957,12 +2139,9 @@ main(int argc, const char *argv[])
apr_array_make(pool, 1,
sizeof(svn_cmdline__config_argument_t*));
- err = svn_utf_cstring_to_utf8(&opt_arg, opt_arg, pool);
- if (!err)
- err = svn_cmdline__parse_config_option(opt_state.config_options,
- opt_arg, pool);
- if (err)
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ SVN_INT_ERR(svn_utf_cstring_to_utf8(&opt_arg, opt_arg, pool));
+ SVN_INT_ERR(svn_cmdline__parse_config_option(opt_state.config_options,
+ opt_arg, pool));
break;
case opt_autoprops:
opt_state.autoprops = TRUE;
@@ -1976,34 +2155,33 @@ main(int argc, const char *argv[])
opt_state.native_eol = apr_pstrdup(pool, opt_arg);
else
{
- err = svn_utf_cstring_to_utf8(&utf8_opt_arg, opt_arg, pool);
- if (! err)
- err = svn_error_createf
+ SVN_INT_ERR(svn_utf_cstring_to_utf8(&utf8_opt_arg, opt_arg, pool));
+ err = svn_error_createf
(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("Syntax error in native-eol argument '%s'"),
utf8_opt_arg);
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ return EXIT_ERROR(err);
}
break;
case opt_no_unlock:
opt_state.no_unlock = TRUE;
break;
case opt_summarize:
- opt_state.summarize = TRUE;
+ opt_state.diff.summarize = TRUE;
break;
case opt_remove:
opt_state.remove = TRUE;
break;
case opt_changelist:
- opt_state.changelist = apr_pstrdup(pool, opt_arg);
+ SVN_INT_ERR(svn_utf_cstring_to_utf8(&utf8_opt_arg, opt_arg, pool));
+ opt_state.changelist = utf8_opt_arg;
if (opt_state.changelist[0] == '\0')
{
err = svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("Changelist names must not be empty"));
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ return EXIT_ERROR(err);
}
- apr_hash_set(changelists, opt_state.changelist,
- APR_HASH_KEY_STRING, (void *)1);
+ svn_hash_sets(changelists, opt_state.changelist, (void *)1);
break;
case opt_keep_changelists:
opt_state.keep_changelists = TRUE;
@@ -2020,9 +2198,8 @@ main(int argc, const char *argv[])
opt_state.no_revprops = TRUE;
break;
case opt_with_revprop:
- err = svn_opt_parse_revprop(&opt_state.revprop_table, opt_arg, pool);
- if (err != SVN_NO_ERROR)
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ SVN_INT_ERR(svn_opt_parse_revprop(&opt_state.revprop_table,
+ opt_arg, pool));
break;
case opt_parents:
opt_state.parents = TRUE;
@@ -2033,20 +2210,18 @@ main(int argc, const char *argv[])
case opt_accept:
opt_state.accept_which = svn_cl__accept_from_word(opt_arg);
if (opt_state.accept_which == svn_cl__accept_invalid)
- return svn_cmdline_handle_exit_error
+ return EXIT_ERROR
(svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("'%s' is not a valid --accept value"),
- opt_arg),
- pool, "svn: ");
+ opt_arg));
break;
case opt_show_revs:
opt_state.show_revs = svn_cl__show_revs_from_word(opt_arg);
if (opt_state.show_revs == svn_cl__show_revs_invalid)
- return svn_cmdline_handle_exit_error
+ return EXIT_ERROR
(svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("'%s' is not a valid --show-revs value"),
- opt_arg),
- pool, "svn: ");
+ opt_arg));
break;
case opt_reintegrate:
opt_state.reintegrate = TRUE;
@@ -2058,13 +2233,13 @@ main(int argc, const char *argv[])
{
err = svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, err,
_("Invalid strip count '%s'"), opt_arg);
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ return EXIT_ERROR(err);
}
if (opt_state.strip < 0)
{
err = svn_error_create(SVN_ERR_INCORRECT_PARAMS, NULL,
_("Argument to --strip must be positive"));
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ return EXIT_ERROR(err);
}
}
break;
@@ -2081,14 +2256,31 @@ main(int argc, const char *argv[])
opt_state.show_diff = TRUE;
break;
case opt_internal_diff:
- opt_state.internal_diff = TRUE;
+ opt_state.diff.internal_diff = TRUE;
+ break;
+ case opt_patch_compatible:
+ opt_state.diff.patch_compatible = TRUE;
break;
case opt_use_git_diff_format:
- opt_state.use_git_diff_format = TRUE;
+ opt_state.diff.use_git_diff_format = TRUE;
break;
case opt_allow_mixed_revisions:
opt_state.allow_mixed_rev = TRUE;
break;
+ case opt_include_externals:
+ opt_state.include_externals = TRUE;
+ break;
+ case opt_show_inherited_props:
+ opt_state.show_inherited_props = TRUE;
+ break;
+ case opt_properties_only:
+ opt_state.diff.properties_only = TRUE;
+ break;
+ case opt_search:
+ add_search_pattern_group(&opt_state, opt_arg, pool);
+ break;
+ case opt_search_and:
+ add_search_pattern_to_latest_group(&opt_state, opt_arg, pool);
default:
/* Hmmm. Perhaps this would be a good place to squirrel away
opts that commands like svn diff might need. Hmmm indeed. */
@@ -2096,10 +2288,22 @@ main(int argc, const char *argv[])
}
}
+ /* The --non-interactive and --force-interactive options are mutually
+ * exclusive. */
+ if (opt_state.non_interactive && force_interactive)
+ {
+ err = svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("--non-interactive and --force-interactive "
+ "are mutually exclusive"));
+ return EXIT_ERROR(err);
+ }
+ else
+ opt_state.non_interactive = !svn_cmdline__be_interactive(
+ opt_state.non_interactive,
+ force_interactive);
+
/* Turn our hash of changelists into an array of unique ones. */
- err = svn_hash_keys(&(opt_state.changelists), changelists, pool);
- if (err)
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ SVN_INT_ERR(svn_hash_keys(&(opt_state.changelists), changelists, pool));
/* ### This really belongs in libsvn_client. The trouble is,
there's no one place there to run it from, no
@@ -2111,9 +2315,7 @@ main(int argc, const char *argv[])
hand, the alternative is effectively to demand that they call
svn_config_ensure() instead, so maybe we should have a generic
init function anyway. Thoughts? */
- err = svn_config_ensure(opt_state.config_dir, pool);
- if (err)
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ SVN_INT_ERR(svn_config_ensure(opt_state.config_dir, pool));
/* If the user asked for help, then the rest of the arguments are
the names of subcommands to get help on (if any), or else they're
@@ -2135,6 +2337,7 @@ main(int argc, const char *argv[])
{ "--version", svn_cl__help, {0}, "",
{opt_version, /* must accept its own option */
'q', /* brief output */
+ 'v', /* verbose output */
opt_config_dir /* all commands accept this */
} };
@@ -2145,8 +2348,7 @@ main(int argc, const char *argv[])
svn_error_clear
(svn_cmdline_fprintf(stderr, pool,
_("Subcommand argument required\n")));
- svn_cl__help(NULL, NULL, pool);
- svn_pool_destroy(pool);
+ svn_error_clear(svn_cl__help(NULL, NULL, pool));
return EXIT_FAILURE;
}
}
@@ -2158,15 +2360,24 @@ main(int argc, const char *argv[])
if (subcommand == NULL)
{
const char *first_arg_utf8;
- err = svn_utf_cstring_to_utf8(&first_arg_utf8, first_arg, pool);
- if (err)
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ SVN_INT_ERR(svn_utf_cstring_to_utf8(&first_arg_utf8,
+ first_arg, pool));
svn_error_clear
(svn_cmdline_fprintf(stderr, pool,
- _("Unknown command: '%s'\n"),
+ _("Unknown subcommand: '%s'\n"),
first_arg_utf8));
- svn_cl__help(NULL, NULL, pool);
- svn_pool_destroy(pool);
+ svn_error_clear(svn_cl__help(NULL, NULL, pool));
+
+ /* Be kind to people who try 'svn undo'. */
+ if (strcmp(first_arg_utf8, "undo") == 0)
+ {
+ svn_error_clear
+ (svn_cmdline_fprintf(stderr, pool,
+ _("Undo is done using either the "
+ "'svn revert' or the 'svn merge' "
+ "command.\n")));
+ }
+
return EXIT_FAILURE;
}
}
@@ -2193,14 +2404,13 @@ main(int argc, const char *argv[])
subcommand, pool);
svn_opt_format_option(&optstr, badopt, FALSE, pool);
if (subcommand->name[0] == '-')
- svn_cl__help(NULL, NULL, pool);
+ svn_error_clear(svn_cl__help(NULL, NULL, pool));
else
svn_error_clear
(svn_cmdline_fprintf
(stderr, pool, _("Subcommand '%s' doesn't accept option '%s'\n"
"Type 'svn help %s' for usage.\n"),
subcommand->name, optstr, subcommand->name));
- svn_pool_destroy(pool);
return EXIT_FAILURE;
}
}
@@ -2215,7 +2425,7 @@ main(int argc, const char *argv[])
_("Multiple revision arguments "
"encountered; can't specify -c twice, "
"or both -c and -r"));
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ return EXIT_ERROR(err);
}
}
@@ -2226,7 +2436,7 @@ main(int argc, const char *argv[])
err = svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("--depth and --set-depth are mutually "
"exclusive"));
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ return EXIT_ERROR(err);
}
/* Disallow simultaneous use of both --with-all-revprops and
@@ -2236,7 +2446,7 @@ main(int argc, const char *argv[])
err = svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("--with-all-revprops and --with-no-revprops "
"are mutually exclusive"));
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ return EXIT_ERROR(err);
}
/* Disallow simultaneous use of both --with-revprop and
@@ -2246,12 +2456,12 @@ main(int argc, const char *argv[])
err = svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("--with-revprop and --with-no-revprops "
"are mutually exclusive"));
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ return EXIT_ERROR(err);
}
/* Disallow simultaneous use of both -m and -F, when they are
both used to pass a commit message or lock comment. ('propset'
- takes the property value, not a commit message, from -F.)
+ takes the property value, not a commit message, from -F.)
*/
if (opt_state.filedata && opt_state.message
&& subcommand->cmd_func != svn_cl__propset)
@@ -2259,7 +2469,7 @@ main(int argc, const char *argv[])
err = svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("--message (-m) and --file (-F) "
"are mutually exclusive"));
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ return EXIT_ERROR(err);
}
/* --trust-server-cert can only be used with --non-interactive */
@@ -2268,17 +2478,17 @@ main(int argc, const char *argv[])
err = svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("--trust-server-cert requires "
"--non-interactive"));
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ return EXIT_ERROR(err);
}
/* Disallow simultaneous use of both --diff-cmd and
--internal-diff. */
- if (opt_state.diff_cmd && opt_state.internal_diff)
+ if (opt_state.diff.diff_cmd && opt_state.diff.internal_diff)
{
err = svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("--diff-cmd and --internal-diff "
"are mutually exclusive"));
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ return EXIT_ERROR(err);
}
/* Ensure that 'revision_ranges' has at least one item, and make
@@ -2296,15 +2506,133 @@ main(int argc, const char *argv[])
opt_state.end_revision = APR_ARRAY_IDX(opt_state.revision_ranges, 0,
svn_opt_revision_range_t *)->end;
+ err = svn_config_get_config(&cfg_hash, opt_state.config_dir, pool);
+ if (err)
+ {
+ /* Fallback to default config if the config directory isn't readable
+ or is not a directory. */
+ if (APR_STATUS_IS_EACCES(err->apr_err)
+ || SVN__APR_STATUS_IS_ENOTDIR(err->apr_err))
+ {
+ svn_config_t *empty_cfg;
+
+ svn_handle_warning2(stderr, err, "svn: ");
+ svn_error_clear(err);
+ cfg_hash = apr_hash_make(pool);
+ SVN_INT_ERR(svn_config_create2(&empty_cfg, FALSE, FALSE, pool));
+ svn_hash_sets(cfg_hash, SVN_CONFIG_CATEGORY_CONFIG, empty_cfg);
+ SVN_INT_ERR(svn_config_create2(&empty_cfg, FALSE, FALSE, pool));
+ svn_hash_sets(cfg_hash, SVN_CONFIG_CATEGORY_SERVERS, empty_cfg);
+ }
+ else
+ return EXIT_ERROR(err);
+ }
+
+ /* Relocation is infinite-depth only. */
+ if (opt_state.relocate)
+ {
+ if (opt_state.depth != svn_depth_unknown)
+ {
+ err = svn_error_create(SVN_ERR_CL_MUTUALLY_EXCLUSIVE_ARGS, NULL,
+ _("--relocate and --depth are mutually "
+ "exclusive"));
+ return EXIT_ERROR(err);
+ }
+ if (! descend)
+ {
+ err = svn_error_create(
+ SVN_ERR_CL_MUTUALLY_EXCLUSIVE_ARGS, NULL,
+ _("--relocate and --non-recursive (-N) are mutually "
+ "exclusive"));
+ return EXIT_ERROR(err);
+ }
+ }
+
+ /* Only a few commands can accept a revision range; the rest can take at
+ most one revision number. */
+ if (subcommand->cmd_func != svn_cl__blame
+ && subcommand->cmd_func != svn_cl__diff
+ && subcommand->cmd_func != svn_cl__log
+ && subcommand->cmd_func != svn_cl__mergeinfo
+ && subcommand->cmd_func != svn_cl__merge)
+ {
+ if (opt_state.end_revision.kind != svn_opt_revision_unspecified)
+ {
+ err = svn_error_create(SVN_ERR_CLIENT_REVISION_RANGE, NULL, NULL);
+ return EXIT_ERROR(err);
+ }
+ }
+
+ /* -N has a different meaning depending on the command */
+ if (!descend)
+ {
+ if (subcommand->cmd_func == svn_cl__status)
+ {
+ opt_state.depth = svn_depth_immediates;
+ }
+ else if (subcommand->cmd_func == svn_cl__revert
+ || subcommand->cmd_func == svn_cl__add
+ || subcommand->cmd_func == svn_cl__commit)
+ {
+ /* In pre-1.5 Subversion, some commands treated -N like
+ --depth=empty, so force that mapping here. Anyway, with
+ revert it makes sense to be especially conservative,
+ since revert can lose data. */
+ opt_state.depth = svn_depth_empty;
+ }
+ else
+ {
+ opt_state.depth = svn_depth_files;
+ }
+ }
+
+ cfg_config = svn_hash_gets(cfg_hash, SVN_CONFIG_CATEGORY_CONFIG);
+
+ /* Update the options in the config */
+ if (opt_state.config_options)
+ {
+ svn_error_clear(
+ svn_cmdline__apply_config_options(cfg_hash,
+ opt_state.config_options,
+ "svn: ", "--config-option"));
+ }
+
+#if !defined(SVN_CL_NO_EXCLUSIVE_LOCK)
+ {
+ const char *exclusive_clients_option;
+ apr_array_header_t *exclusive_clients;
+
+ svn_config_get(cfg_config, &exclusive_clients_option,
+ SVN_CONFIG_SECTION_WORKING_COPY,
+ SVN_CONFIG_OPTION_SQLITE_EXCLUSIVE_CLIENTS,
+ NULL);
+ exclusive_clients = svn_cstring_split(exclusive_clients_option,
+ " ,", TRUE, pool);
+ for (i = 0; i < exclusive_clients->nelts; ++i)
+ {
+ const char *exclusive_client = APR_ARRAY_IDX(exclusive_clients, i,
+ const char *);
+
+ /* This blocks other clients from accessing the wc.db so it must
+ be explicitly enabled.*/
+ if (!strcmp(exclusive_client, "svn"))
+ svn_config_set(cfg_config,
+ SVN_CONFIG_SECTION_WORKING_COPY,
+ SVN_CONFIG_OPTION_SQLITE_EXCLUSIVE,
+ "true");
+ }
+ }
+#endif
+
/* Create a client context object. */
command_baton.opt_state = &opt_state;
- if ((err = svn_client_create_context(&ctx, pool)))
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ SVN_INT_ERR(svn_client_create_context2(&ctx, cfg_hash, pool));
command_baton.ctx = ctx;
/* If we're running a command that could result in a commit, verify
that any log message we were given on the command line makes
- sense (unless we've also been instructed not to care). */
+ sense (unless we've also been instructed not to care). This may
+ access the working copy so do it after setting the locking mode. */
if ((! opt_state.force_log)
&& (subcommand->cmd_func == svn_cl__commit
|| subcommand->cmd_func == svn_cl__copy
@@ -2327,8 +2655,8 @@ main(int argc, const char *argv[])
if (!err)
{
- err = svn_wc_read_kind(&kind, ctx->wc_ctx, local_abspath, FALSE,
- pool);
+ err = svn_wc_read_kind2(&kind, ctx->wc_ctx, local_abspath, TRUE,
+ FALSE, pool);
if (!err && kind != svn_node_none && kind != svn_node_unknown)
{
@@ -2346,7 +2674,7 @@ main(int argc, const char *argv[])
_("Lock comment file is a versioned file; "
"use '--force-log' to override"));
}
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ return EXIT_ERROR(err);
}
}
svn_error_clear(err);
@@ -2374,105 +2702,20 @@ main(int argc, const char *argv[])
_("The lock comment is a pathname "
"(was -F intended?); use '--force-log' to override"));
}
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ return EXIT_ERROR(err);
}
}
}
- /* Relocation is infinite-depth only. */
- if (opt_state.relocate)
- {
- if (opt_state.depth != svn_depth_unknown)
- {
- err = svn_error_create(SVN_ERR_CL_MUTUALLY_EXCLUSIVE_ARGS, NULL,
- _("--relocate and --depth are mutually "
- "exclusive"));
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
- }
- if (! descend)
- {
- err = svn_error_create(
- SVN_ERR_CL_MUTUALLY_EXCLUSIVE_ARGS, NULL,
- _("--relocate and --non-recursive (-N) are mutually "
- "exclusive"));
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
- }
- }
-
- /* Only a few commands can accept a revision range; the rest can take at
- most one revision number. */
- if (subcommand->cmd_func != svn_cl__blame
- && subcommand->cmd_func != svn_cl__diff
- && subcommand->cmd_func != svn_cl__log
- && subcommand->cmd_func != svn_cl__merge)
- {
- if (opt_state.end_revision.kind != svn_opt_revision_unspecified)
- {
- err = svn_error_create(SVN_ERR_CLIENT_REVISION_RANGE, NULL, NULL);
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
- }
- }
-
- /* -N has a different meaning depending on the command */
- if (descend == FALSE)
- {
- if (subcommand->cmd_func == svn_cl__status)
- {
- opt_state.depth = svn_depth_immediates;
- }
- else if (subcommand->cmd_func == svn_cl__revert
- || subcommand->cmd_func == svn_cl__add
- || subcommand->cmd_func == svn_cl__commit)
- {
- /* In pre-1.5 Subversion, some commands treated -N like
- --depth=empty, so force that mapping here. Anyway, with
- revert it makes sense to be especially conservative,
- since revert can lose data. */
- opt_state.depth = svn_depth_empty;
- }
- else
- {
- opt_state.depth = svn_depth_files;
- }
- }
-
- err = svn_config_get_config(&(ctx->config),
- opt_state.config_dir, pool);
- if (err)
- {
- /* Fallback to default config if the config directory isn't readable
- or is not a directory. */
- if (APR_STATUS_IS_EACCES(err->apr_err)
- || SVN__APR_STATUS_IS_ENOTDIR(err->apr_err))
- {
- svn_handle_warning2(stderr, err, "svn: ");
- svn_error_clear(err);
- }
- else
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
- }
-
- cfg_config = apr_hash_get(ctx->config, SVN_CONFIG_CATEGORY_CONFIG,
- APR_HASH_KEY_STRING);
-
- /* Update the options in the config */
- if (opt_state.config_options)
- {
- svn_error_clear(
- svn_cmdline__apply_config_options(ctx->config,
- opt_state.config_options,
- "svn: ", "--config-option"));
- }
-
/* XXX: Only diff_cmd for now, overlay rest later and stop passing
opt_state altogether? */
- if (opt_state.diff_cmd)
+ if (opt_state.diff.diff_cmd)
svn_config_set(cfg_config, SVN_CONFIG_SECTION_HELPERS,
- SVN_CONFIG_OPTION_DIFF_CMD, opt_state.diff_cmd);
+ SVN_CONFIG_OPTION_DIFF_CMD, opt_state.diff.diff_cmd);
if (opt_state.merge_cmd)
svn_config_set(cfg_config, SVN_CONFIG_SECTION_HELPERS,
SVN_CONFIG_OPTION_DIFF3_CMD, opt_state.merge_cmd);
- if (opt_state.internal_diff)
+ if (opt_state.diff.internal_diff)
svn_config_set(cfg_config, SVN_CONFIG_SECTION_HELPERS,
SVN_CONFIG_OPTION_DIFF_CMD, NULL);
@@ -2482,38 +2725,7 @@ main(int argc, const char *argv[])
err = svn_error_create(SVN_ERR_CL_MUTUALLY_EXCLUSIVE_ARGS, NULL,
_("--auto-props and --no-auto-props are "
"mutually exclusive"));
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
- }
-
- /* The --reintegrate option is mutually exclusive with both
- --ignore-ancestry and --record-only. */
- if (opt_state.reintegrate)
- {
- if (opt_state.ignore_ancestry)
- {
- if (opt_state.record_only)
- {
- err = svn_error_create(SVN_ERR_CL_MUTUALLY_EXCLUSIVE_ARGS, NULL,
- _("--reintegrate cannot be used with "
- "--ignore-ancestry or "
- "--record-only"));
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
- }
- else
- {
- err = svn_error_create(SVN_ERR_CL_MUTUALLY_EXCLUSIVE_ARGS, NULL,
- _("--reintegrate cannot be used with "
- "--ignore-ancestry"));
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
- }
- }
- else if (opt_state.record_only)
- {
- err = svn_error_create(SVN_ERR_CL_MUTUALLY_EXCLUSIVE_ARGS, NULL,
- _("--reintegrate cannot be used with "
- "--record-only"));
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
- }
+ return EXIT_ERROR(err);
}
/* Update auto-props-enable option, and populate the MIME types map,
@@ -2527,9 +2739,8 @@ main(int argc, const char *argv[])
SVN_CONFIG_OPTION_MIMETYPES_FILE, FALSE);
if (mimetypes_file && *mimetypes_file)
{
- if ((err = svn_io_parse_mimetypes_file(&(ctx->mimetypes_map),
- mimetypes_file, pool)))
- svn_handle_error2(err, stderr, TRUE, "svn: ");
+ SVN_INT_ERR(svn_io_parse_mimetypes_file(&(ctx->mimetypes_map),
+ mimetypes_file, pool));
}
if (opt_state.autoprops)
@@ -2553,14 +2764,22 @@ main(int argc, const char *argv[])
subcommands will populate the ctx->log_msg_baton3. */
ctx->log_msg_func3 = svn_cl__get_log_message;
- /* Set up the notifier. */
- if (((subcommand->cmd_func != svn_cl__status) && !opt_state.quiet)
- || ((subcommand->cmd_func == svn_cl__status) && !opt_state.xml))
+ /* Set up the notifier.
+
+ In general, we use it any time we aren't in --quiet mode. 'svn
+ status' is unique, though, in that we don't want it in --quiet mode
+ unless we're also in --verbose mode. When in --xml mode,
+ though, we never want it. */
+ if (opt_state.quiet)
+ use_notifier = FALSE;
+ if ((subcommand->cmd_func == svn_cl__status) && opt_state.verbose)
+ use_notifier = TRUE;
+ if (opt_state.xml)
+ use_notifier = FALSE;
+ if (use_notifier)
{
- err = svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2,
- FALSE, pool);
- if (err)
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ SVN_INT_ERR(svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2,
+ conflict_stats, pool));
}
/* Set up our cancellation support. */
@@ -2590,71 +2809,77 @@ main(int argc, const char *argv[])
#endif
/* Set up Authentication stuff. */
- if ((err = svn_cmdline_create_auth_baton(&ab,
- opt_state.non_interactive,
- opt_state.auth_username,
- opt_state.auth_password,
- opt_state.config_dir,
- opt_state.no_auth_cache,
- opt_state.trust_server_cert,
- cfg_config,
- ctx->cancel_func,
- ctx->cancel_baton,
- pool)))
- svn_handle_error2(err, stderr, TRUE, "svn: ");
+ SVN_INT_ERR(svn_cmdline_create_auth_baton(&ab,
+ opt_state.non_interactive,
+ opt_state.auth_username,
+ opt_state.auth_password,
+ opt_state.config_dir,
+ opt_state.no_auth_cache,
+ opt_state.trust_server_cert,
+ cfg_config,
+ ctx->cancel_func,
+ ctx->cancel_baton,
+ pool));
ctx->auth_baton = ab;
- /* Set up conflict resolution callback. */
- if ((err = svn_config_get_bool(cfg_config, &interactive_conflicts,
- SVN_CONFIG_SECTION_MISCELLANY,
- SVN_CONFIG_OPTION_INTERACTIVE_CONFLICTS,
- TRUE))) /* ### interactivity on by default.
- we can change this. */
- svn_handle_error2(err, stderr, TRUE, "svn: ");
-
- if ((opt_state.accept_which == svn_cl__accept_unspecified
- && (!interactive_conflicts || opt_state.non_interactive))
- || opt_state.accept_which == svn_cl__accept_postpone)
+ if (opt_state.non_interactive)
{
- /* If no --accept option at all and we're non-interactive, we're
- leaving the conflicts behind, so don't need the callback. Same if
- the user said to postpone. */
- ctx->conflict_func = NULL;
- ctx->conflict_baton = NULL;
+ if (opt_state.accept_which == svn_cl__accept_edit)
+ return EXIT_ERROR(
+ svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("--accept=%s incompatible with"
+ " --non-interactive"),
+ SVN_CL__ACCEPT_EDIT));
+
+ if (opt_state.accept_which == svn_cl__accept_launch)
+ return EXIT_ERROR(
+ svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("--accept=%s incompatible with"
+ " --non-interactive"),
+ SVN_CL__ACCEPT_LAUNCH));
+
+ /* The default action when we're non-interactive is to postpone
+ * conflict resolution. */
+ if (opt_state.accept_which == svn_cl__accept_unspecified)
+ opt_state.accept_which = svn_cl__accept_postpone;
}
- else
- {
- svn_cmdline_prompt_baton_t *pb = apr_palloc(pool, sizeof(*pb));
- pb->cancel_func = ctx->cancel_func;
- pb->cancel_baton = ctx->cancel_baton;
- if (opt_state.non_interactive)
- {
- if (opt_state.accept_which == svn_cl__accept_edit)
- return svn_cmdline_handle_exit_error
- (svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
- _("--accept=%s incompatible with"
- " --non-interactive"), SVN_CL__ACCEPT_EDIT),
- pool, "svn: ");
- if (opt_state.accept_which == svn_cl__accept_launch)
- return svn_cmdline_handle_exit_error
- (svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
- _("--accept=%s incompatible with"
- " --non-interactive"),
- SVN_CL__ACCEPT_LAUNCH),
- pool, "svn: ");
- }
+ /* Check whether interactive conflict resolution is disabled by
+ * the configuration file. If no --accept option was specified
+ * we postpone all conflicts in this case. */
+ SVN_INT_ERR(svn_config_get_bool(cfg_config, &interactive_conflicts,
+ SVN_CONFIG_SECTION_MISCELLANY,
+ SVN_CONFIG_OPTION_INTERACTIVE_CONFLICTS,
+ TRUE));
+ if (!interactive_conflicts)
+ {
+ /* Make 'svn resolve' non-interactive. */
+ if (subcommand->cmd_func == svn_cl__resolve)
+ opt_state.non_interactive = TRUE;
- ctx->conflict_func = svn_cl__conflict_handler;
- ctx->conflict_baton = svn_cl__conflict_baton_make(
- opt_state.accept_which,
- ctx->config,
- opt_state.editor_cmd,
- pb,
- pool);
+ /* We're not resolving conflicts interactively. If no --accept option
+ * was provided the default behaviour is to postpone all conflicts. */
+ if (opt_state.accept_which == svn_cl__accept_unspecified)
+ opt_state.accept_which = svn_cl__accept_postpone;
}
+ /* Install the default conflict handler. */
+ {
+ svn_cl__interactive_conflict_baton_t *b;
+
+ ctx->conflict_func = NULL;
+ ctx->conflict_baton = NULL;
+
+ ctx->conflict_func2 = svn_cl__conflict_func_interactive;
+ SVN_INT_ERR(svn_cl__get_conflict_func_interactive_baton(
+ &b,
+ opt_state.accept_which,
+ ctx->config, opt_state.editor_cmd, conflict_stats,
+ ctx->cancel_func, ctx->cancel_baton, pool));
+ ctx->conflict_baton2 = b;
+ }
+
/* And now we finally run the subcommand. */
err = (*subcommand->cmd_func)(os, &command_baton, pool);
if (err)
@@ -2664,8 +2889,10 @@ main(int argc, const char *argv[])
if (err->apr_err == SVN_ERR_CL_INSUFFICIENT_ARGS
|| err->apr_err == SVN_ERR_CL_ARG_PARSING_ERROR)
{
- err = svn_error_quick_wrap(err,
- _("Try 'svn help' for more info"));
+ err = svn_error_quick_wrap(
+ err, apr_psprintf(pool,
+ _("Try 'svn help %s' for more information"),
+ subcommand->name));
}
if (err->apr_err == SVN_ERR_WC_UPGRADE_REQUIRED)
{
@@ -2673,37 +2900,84 @@ main(int argc, const char *argv[])
_("Please see the 'svn upgrade' command"));
}
- /* Issue #3014:
- * Don't print anything on broken pipes. The pipe was likely
- * closed by the process at the other end. We expect that
- * process to perform error reporting as necessary.
- *
- * ### This assumes that there is only one error in a chain for
- * ### SVN_ERR_IO_PIPE_WRITE_ERROR. See svn_cmdline_fputs(). */
- if (err->apr_err != SVN_ERR_IO_PIPE_WRITE_ERROR)
- svn_handle_error2(err, stderr, FALSE, "svn: ");
+ if (err->apr_err == SVN_ERR_AUTHN_FAILED && opt_state.non_interactive)
+ {
+ err = svn_error_quick_wrap(err,
+ _("Authentication failed and interactive"
+ " prompting is disabled; see the"
+ " --force-interactive option"));
+ if (reading_file_from_stdin)
+ err = svn_error_quick_wrap(err,
+ _("Reading file from standard input "
+ "because of -F option; this can "
+ "interfere with interactive "
+ "prompting"));
+ }
/* Tell the user about 'svn cleanup' if any error on the stack
was about locked working copies. */
if (svn_error_find_cause(err, SVN_ERR_WC_LOCKED))
- svn_error_clear(svn_cmdline_fputs(_("svn: run 'svn cleanup' to "
- "remove locks (type 'svn help "
- "cleanup' for details)\n"),
- stderr, pool));
+ {
+ err = svn_error_quick_wrap(
+ err, _("Run 'svn cleanup' to remove locks "
+ "(type 'svn help cleanup' for details)"));
+ }
- svn_error_clear(err);
- svn_pool_destroy(pool);
- return EXIT_FAILURE;
+ if (err->apr_err == SVN_ERR_SQLITE_BUSY)
+ {
+ err = svn_error_quick_wrap(err,
+ _("Another process is blocking the "
+ "working copy database, or the "
+ "underlying filesystem does not "
+ "support file locking; if the working "
+ "copy is on a network filesystem, make "
+ "sure file locking has been enabled "
+ "on the file server"));
+ }
+
+ if (svn_error_find_cause(err, SVN_ERR_RA_CANNOT_CREATE_TUNNEL) &&
+ (opt_state.auth_username || opt_state.auth_password))
+ {
+ err = svn_error_quick_wrap(
+ err, _("When using svn+ssh:// URLs, keep in mind that the "
+ "--username and --password options are ignored "
+ "because authentication is performed by SSH, not "
+ "Subversion"));
+ }
+
+ /* Ensure that stdout is flushed, so the user will see any write errors.
+ This makes sure that output is not silently lost. */
+ err = svn_error_compose_create(err, svn_cmdline_fflush(stdout));
+
+ return EXIT_ERROR(err);
}
else
{
/* Ensure that stdout is flushed, so the user will see any write errors.
This makes sure that output is not silently lost. */
- err = svn_cmdline_fflush(stdout);
- if (err)
- return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ SVN_INT_ERR(svn_cmdline_fflush(stdout));
- svn_pool_destroy(pool);
return EXIT_SUCCESS;
}
}
+
+int
+main(int argc, const char *argv[])
+{
+ apr_pool_t *pool;
+ int exit_code;
+
+ /* Initialize the app. */
+ if (svn_cmdline_init("svn", stderr) != EXIT_SUCCESS)
+ return EXIT_FAILURE;
+
+ /* Create our top-level pool. Use a separate mutexless allocator,
+ * given this application is single threaded.
+ */
+ pool = apr_allocator_owner_get(svn_pool_create_allocator(FALSE));
+
+ exit_code = sub_main(argc, argv, pool);
+
+ svn_pool_destroy(pool);
+ return exit_code;
+}
diff --git a/subversion/svn/switch-cmd.c b/subversion/svn/switch-cmd.c
index 9c3bc14..aaef2b5 100644
--- a/subversion/svn/switch-cmd.c
+++ b/subversion/svn/switch-cmd.c
@@ -93,7 +93,8 @@ svn_cl__switch(apr_getopt_t *os,
void *baton,
apr_pool_t *scratch_pool)
{
- svn_error_t *err;
+ svn_error_t *err = SVN_NO_ERROR;
+ svn_error_t *externals_err = SVN_NO_ERROR;
svn_cl__opt_state_t *opt_state = ((svn_cl__cmd_baton_t *) baton)->opt_state;
svn_client_ctx_t *ctx = ((svn_cl__cmd_baton_t *) baton)->ctx;
apr_array_header_t *targets;
@@ -172,16 +173,27 @@ svn_cl__switch(apr_getopt_t *os,
"disable this check."),
svn_dirent_local_style(target,
scratch_pool));
+ if (err->apr_err == SVN_ERR_RA_UUID_MISMATCH
+ || err->apr_err == SVN_ERR_WC_INVALID_SWITCH)
+ return svn_error_quick_wrap(
+ err,
+ _("'svn switch' does not support switching a working copy to "
+ "a different repository"));
return err;
}
- if (! opt_state->quiet)
- SVN_ERR(svn_cl__print_conflict_stats(nwb.wrapped_baton, scratch_pool));
-
if (nwb.had_externals_error)
- return svn_error_create(SVN_ERR_CL_ERROR_PROCESSING_EXTERNALS, NULL,
- _("Failure occurred processing one or more "
- "externals definitions"));
+ externals_err = svn_error_create(SVN_ERR_CL_ERROR_PROCESSING_EXTERNALS,
+ NULL,
+ _("Failure occurred processing one or "
+ "more externals definitions"));
- return SVN_NO_ERROR;
+ if (! opt_state->quiet)
+ {
+ err = svn_cl__notifier_print_conflict_stats(nwb.wrapped_baton, scratch_pool);
+ if (err)
+ return svn_error_compose_create(externals_err, err);
+ }
+
+ return svn_error_compose_create(externals_err, err);
}
diff --git a/subversion/svn/tree-conflicts.c b/subversion/svn/tree-conflicts.c
deleted file mode 100644
index b374924..0000000
--- a/subversion/svn/tree-conflicts.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * tree-conflicts.c: Tree conflicts.
- *
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- * ====================================================================
- */
-
-#include "tree-conflicts.h"
-#include "svn_xml.h"
-#include "svn_dirent_uri.h"
-#include "svn_path.h"
-#include "private/svn_token.h"
-
-#include "cl.h"
-
-#include "svn_private_config.h"
-
-
-/* A map for svn_wc_conflict_action_t values to human-readable strings */
-static const svn_token_map_t map_conflict_action_human[] =
-{
- { N_("edit"), svn_wc_conflict_action_edit },
- { N_("delete"), svn_wc_conflict_action_delete },
- { N_("add"), svn_wc_conflict_action_add },
- { N_("replace"), svn_wc_conflict_action_replace },
- { NULL, 0 }
-};
-
-/* A map for svn_wc_conflict_action_t values to XML strings */
-static const svn_token_map_t map_conflict_action_xml[] =
-{
- { "edit", svn_wc_conflict_action_edit },
- { "delete", svn_wc_conflict_action_delete },
- { "add", svn_wc_conflict_action_add },
- { "replace", svn_wc_conflict_action_replace },
- { NULL, 0 }
-};
-
-/* A map for svn_wc_conflict_reason_t values to human-readable strings */
-static const svn_token_map_t map_conflict_reason_human[] =
-{
- { N_("edit"), svn_wc_conflict_reason_edited },
- { N_("delete"), svn_wc_conflict_reason_deleted },
- { N_("missing"), svn_wc_conflict_reason_missing },
- { N_("obstruction"), svn_wc_conflict_reason_obstructed },
- { N_("add"), svn_wc_conflict_reason_added },
- { N_("replace"), svn_wc_conflict_reason_replaced },
- { N_("unversioned"), svn_wc_conflict_reason_unversioned },
- { NULL, 0 }
-};
-
-/* A map for svn_wc_conflict_reason_t values to XML strings */
-static const svn_token_map_t map_conflict_reason_xml[] =
-{
- { "edit", svn_wc_conflict_reason_edited },
- { "delete", svn_wc_conflict_reason_deleted },
- { "missing", svn_wc_conflict_reason_missing },
- { "obstruction", svn_wc_conflict_reason_obstructed },
- { "add", svn_wc_conflict_reason_added },
- { "replace", svn_wc_conflict_reason_replaced },
- { "unversioned", svn_wc_conflict_reason_unversioned },
- { NULL, 0 }
-};
-
-/* Return a localized string representation of CONFLICT->action. */
-static const char *
-action_str(const svn_wc_conflict_description2_t *conflict)
-{
- return _(svn_token__to_word(map_conflict_action_human, conflict->action));
-}
-
-/* Return a localized string representation of CONFLICT->reason. */
-static const char *
-reason_str(const svn_wc_conflict_description2_t *conflict)
-{
- return _(svn_token__to_word(map_conflict_reason_human, conflict->reason));
-}
-
-
-svn_error_t *
-svn_cl__get_human_readable_tree_conflict_description(
- const char **desc,
- const svn_wc_conflict_description2_t *conflict,
- apr_pool_t *pool)
-{
- const char *action, *reason, *operation;
- reason = reason_str(conflict);
- action = action_str(conflict);
- operation = svn_cl__operation_str_human_readable(conflict->operation, pool);
- SVN_ERR_ASSERT(action && reason);
- *desc = apr_psprintf(pool, _("local %s, incoming %s upon %s"),
- reason, action, operation);
- return SVN_NO_ERROR;
-}
-
-
-/* Helper for svn_cl__append_tree_conflict_info_xml().
- * Appends the attributes of the given VERSION to ATT_HASH.
- * SIDE is the content of the version tag's side="..." attribute,
- * currently one of "source-left" or "source-right".*/
-static svn_error_t *
-add_conflict_version_xml(svn_stringbuf_t **pstr,
- const char *side,
- const svn_wc_conflict_version_t *version,
- apr_pool_t *pool)
-{
- apr_hash_t *att_hash = apr_hash_make(pool);
-
-
- apr_hash_set(att_hash, "side", APR_HASH_KEY_STRING, side);
-
- if (version->repos_url)
- apr_hash_set(att_hash, "repos-url", APR_HASH_KEY_STRING,
- version->repos_url);
-
- if (version->path_in_repos)
- apr_hash_set(att_hash, "path-in-repos", APR_HASH_KEY_STRING,
- version->path_in_repos);
-
- if (SVN_IS_VALID_REVNUM(version->peg_rev))
- apr_hash_set(att_hash, "revision", APR_HASH_KEY_STRING,
- apr_ltoa(pool, version->peg_rev));
-
- if (version->node_kind != svn_node_unknown)
- apr_hash_set(att_hash, "kind", APR_HASH_KEY_STRING,
- svn_cl__node_kind_str_xml(version->node_kind));
-
- svn_xml_make_open_tag_hash(pstr, pool, svn_xml_self_closing,
- "version", att_hash);
- return SVN_NO_ERROR;
-}
-
-
-svn_error_t *
-svn_cl__append_tree_conflict_info_xml(
- svn_stringbuf_t *str,
- const svn_wc_conflict_description2_t *conflict,
- apr_pool_t *pool)
-{
- apr_hash_t *att_hash = apr_hash_make(pool);
- const char *tmp;
-
- apr_hash_set(att_hash, "victim", APR_HASH_KEY_STRING,
- svn_dirent_basename(conflict->local_abspath, pool));
-
- apr_hash_set(att_hash, "kind", APR_HASH_KEY_STRING,
- svn_cl__node_kind_str_xml(conflict->node_kind));
-
- apr_hash_set(att_hash, "operation", APR_HASH_KEY_STRING,
- svn_cl__operation_str_xml(conflict->operation, pool));
-
- tmp = svn_token__to_word(map_conflict_action_xml, conflict->action);
- apr_hash_set(att_hash, "action", APR_HASH_KEY_STRING, tmp);
-
- tmp = svn_token__to_word(map_conflict_reason_xml, conflict->reason);
- apr_hash_set(att_hash, "reason", APR_HASH_KEY_STRING, tmp);
-
- /* Open the tree-conflict tag. */
- svn_xml_make_open_tag_hash(&str, pool, svn_xml_normal,
- "tree-conflict", att_hash);
-
- /* Add child tags for OLDER_VERSION and THEIR_VERSION. */
-
- if (conflict->src_left_version)
- SVN_ERR(add_conflict_version_xml(&str,
- "source-left",
- conflict->src_left_version,
- pool));
-
- if (conflict->src_right_version)
- SVN_ERR(add_conflict_version_xml(&str,
- "source-right",
- conflict->src_right_version,
- pool));
-
- svn_xml_make_close_tag(&str, pool, "tree-conflict");
-
- return SVN_NO_ERROR;
-}
-
diff --git a/subversion/svn/update-cmd.c b/subversion/svn/update-cmd.c
index 68d01f0..77c28f9 100644
--- a/subversion/svn/update-cmd.c
+++ b/subversion/svn/update-cmd.c
@@ -51,12 +51,12 @@ print_update_summary(apr_array_header_t *targets,
int i;
const char *path_prefix;
apr_pool_t *iterpool;
+ svn_boolean_t printed_header = FALSE;
if (targets->nelts < 2)
return SVN_NO_ERROR;
SVN_ERR(svn_dirent_get_absolute(&path_prefix, "", scratch_pool));
- SVN_ERR(svn_cmdline_printf(scratch_pool, _("Summary of updates:\n")));
iterpool = svn_pool_create(scratch_pool);
@@ -87,6 +87,13 @@ print_update_summary(apr_array_header_t *targets,
/* Print an update summary for this target, removing the current
working directory prefix from PATH (if PATH is at or under
$CWD), and converting the path to local style for display. */
+ if (! printed_header)
+ {
+ SVN_ERR(svn_cmdline_printf(scratch_pool,
+ _("Summary of updates:\n")));
+ printed_header = TRUE;
+ }
+
SVN_ERR(svn_cmdline_printf(iterpool, _(" Updated '%s' to r%ld.\n"),
svn_cl__local_style_skip_ancestor(
path_prefix, path, iterpool),
@@ -110,6 +117,8 @@ svn_cl__update(apr_getopt_t *os,
svn_boolean_t depth_is_sticky;
struct svn_cl__check_externals_failed_notify_baton nwb;
apr_array_header_t *result_revs;
+ svn_error_t *err = SVN_NO_ERROR;
+ svn_error_t *externals_err = SVN_NO_ERROR;
SVN_ERR(svn_cl__args_to_target_array_print_reserved(&targets, os,
opt_state->targets,
@@ -162,20 +171,26 @@ svn_cl__update(apr_getopt_t *os,
opt_state->parents,
ctx, scratch_pool));
+ if (nwb.had_externals_error)
+ externals_err = svn_error_create(SVN_ERR_CL_ERROR_PROCESSING_EXTERNALS,
+ NULL,
+ _("Failure occurred processing one or "
+ "more externals definitions"));
+
if (! opt_state->quiet)
{
- SVN_ERR(print_update_summary(targets, result_revs, scratch_pool));
+ err = print_update_summary(targets, result_revs, scratch_pool);
+ if (err)
+ return svn_error_compose_create(externals_err, err);
/* ### Layering problem: This call assumes that the baton we're
* passing is the one that was originally provided by
* svn_cl__get_notifier(), but that isn't promised. */
- SVN_ERR(svn_cl__print_conflict_stats(nwb.wrapped_baton, scratch_pool));
+ err = svn_cl__notifier_print_conflict_stats(nwb.wrapped_baton,
+ scratch_pool);
+ if (err)
+ return svn_error_compose_create(externals_err, err);
}
- if (nwb.had_externals_error)
- return svn_error_create(SVN_ERR_CL_ERROR_PROCESSING_EXTERNALS, NULL,
- _("Failure occurred processing one or more "
- "externals definitions"));
-
- return SVN_NO_ERROR;
+ return svn_error_compose_create(externals_err, err);
}
diff --git a/subversion/svn/util.c b/subversion/svn/util.c
index be8de9a..092bc7e 100644
--- a/subversion/svn/util.c
+++ b/subversion/svn/util.c
@@ -54,14 +54,17 @@
#include "svn_utf.h"
#include "svn_subst.h"
#include "svn_config.h"
+#include "svn_wc.h"
#include "svn_xml.h"
#include "svn_time.h"
+#include "svn_props.h"
#include "svn_private_config.h"
#include "cl.h"
#include "private/svn_token.h"
#include "private/svn_opt_private.h"
#include "private/svn_client_private.h"
+#include "private/svn_cmdline_private.h"
#include "private/svn_string_private.h"
@@ -93,125 +96,6 @@ svn_cl__print_commit_info(const svn_commit_info_t *commit_info,
}
-/* Helper for the next two functions. Set *EDITOR to some path to an
- editor binary. Sources to search include: the EDITOR_CMD argument
- (if not NULL), $SVN_EDITOR, the runtime CONFIG variable (if CONFIG
- is not NULL), $VISUAL, $EDITOR. Return
- SVN_ERR_CL_NO_EXTERNAL_EDITOR if no binary can be found. */
-static svn_error_t *
-find_editor_binary(const char **editor,
- const char *editor_cmd,
- apr_hash_t *config)
-{
- const char *e;
- struct svn_config_t *cfg;
-
- /* Use the editor specified on the command line via --editor-cmd, if any. */
- e = editor_cmd;
-
- /* Otherwise look for the Subversion-specific environment variable. */
- if (! e)
- e = getenv("SVN_EDITOR");
-
- /* If not found then fall back on the config file. */
- if (! e)
- {
- cfg = config ? apr_hash_get(config, SVN_CONFIG_CATEGORY_CONFIG,
- APR_HASH_KEY_STRING) : NULL;
- svn_config_get(cfg, &e, SVN_CONFIG_SECTION_HELPERS,
- SVN_CONFIG_OPTION_EDITOR_CMD, NULL);
- }
-
- /* If not found yet then try general purpose environment variables. */
- if (! e)
- e = getenv("VISUAL");
- if (! e)
- e = getenv("EDITOR");
-
-#ifdef SVN_CLIENT_EDITOR
- /* If still not found then fall back on the hard-coded default. */
- if (! e)
- e = SVN_CLIENT_EDITOR;
-#endif
-
- /* Error if there is no editor specified */
- if (e)
- {
- const char *c;
-
- for (c = e; *c; c++)
- if (!svn_ctype_isspace(*c))
- break;
-
- if (! *c)
- return svn_error_create
- (SVN_ERR_CL_NO_EXTERNAL_EDITOR, NULL,
- _("The EDITOR, SVN_EDITOR or VISUAL environment variable or "
- "'editor-cmd' run-time configuration option is empty or "
- "consists solely of whitespace. Expected a shell command."));
- }
- else
- return svn_error_create
- (SVN_ERR_CL_NO_EXTERNAL_EDITOR, NULL,
- _("None of the environment variables SVN_EDITOR, VISUAL or EDITOR are "
- "set, and no 'editor-cmd' run-time configuration option was found"));
-
- *editor = e;
- return SVN_NO_ERROR;
-}
-
-
-/* Use the visual editor to edit files. This requires that the file name itself
- be shell-safe, although the path to reach that file need not be shell-safe.
- */
-svn_error_t *
-svn_cl__edit_file_externally(const char *path,
- const char *editor_cmd,
- apr_hash_t *config,
- apr_pool_t *pool)
-{
- const char *editor, *cmd, *base_dir, *file_name, *base_dir_apr;
- char *old_cwd;
- int sys_err;
- apr_status_t apr_err;
-
- svn_dirent_split(&base_dir, &file_name, path, pool);
-
- SVN_ERR(find_editor_binary(&editor, editor_cmd, config));
-
- apr_err = apr_filepath_get(&old_cwd, APR_FILEPATH_NATIVE, pool);
- if (apr_err)
- return svn_error_wrap_apr(apr_err, _("Can't get working directory"));
-
- /* APR doesn't like "" directories */
- if (base_dir[0] == '\0')
- base_dir_apr = ".";
- else
- SVN_ERR(svn_path_cstring_from_utf8(&base_dir_apr, base_dir, pool));
-
- apr_err = apr_filepath_set(base_dir_apr, pool);
- if (apr_err)
- return svn_error_wrap_apr
- (apr_err, _("Can't change working directory to '%s'"), base_dir);
-
- cmd = apr_psprintf(pool, "%s %s", editor, file_name);
- sys_err = system(cmd);
-
- apr_err = apr_filepath_set(old_cwd, pool);
- if (apr_err)
- svn_handle_error2(svn_error_wrap_apr
- (apr_err, _("Can't restore working directory")),
- stderr, TRUE /* fatal */, "svn: ");
-
- if (sys_err)
- /* Extracting any meaning from sys_err is platform specific, so just
- use the raw value. */
- return svn_error_createf(SVN_ERR_EXTERNAL_PROGRAM, NULL,
- _("system('%s') returned %d"), cmd, sys_err);
-
- return SVN_NO_ERROR;
-}
-
svn_error_t *
svn_cl__merge_file_externally(const char *base_path,
const char *their_path,
@@ -228,8 +112,7 @@ svn_cl__merge_file_externally(const char *base_path,
{
struct svn_config_t *cfg;
merge_tool = NULL;
- cfg = config ? apr_hash_get(config, SVN_CONFIG_CATEGORY_CONFIG,
- APR_HASH_KEY_STRING) : NULL;
+ cfg = config ? svn_hash_gets(config, SVN_CONFIG_CATEGORY_CONFIG) : NULL;
/* apr_env_get wants char **, this wants const char ** */
svn_config_get(cfg, (const char **)&merge_tool,
SVN_CONFIG_SECTION_HELPERS,
@@ -290,248 +173,6 @@ svn_cl__merge_file_externally(const char *base_path,
return SVN_NO_ERROR;
}
-svn_error_t *
-svn_cl__edit_string_externally(svn_string_t **edited_contents /* UTF-8! */,
- const char **tmpfile_left /* UTF-8! */,
- const char *editor_cmd,
- const char *base_dir /* UTF-8! */,
- const svn_string_t *contents /* UTF-8! */,
- const char *filename,
- apr_hash_t *config,
- svn_boolean_t as_text,
- const char *encoding,
- apr_pool_t *pool)
-{
- const char *editor;
- const char *cmd;
- apr_file_t *tmp_file;
- const char *tmpfile_name;
- const char *tmpfile_native;
- const char *tmpfile_apr, *base_dir_apr;
- svn_string_t *translated_contents;
- apr_status_t apr_err, apr_err2;
- apr_size_t written;
- apr_finfo_t finfo_before, finfo_after;
- svn_error_t *err = SVN_NO_ERROR, *err2;
- char *old_cwd;
- int sys_err;
- svn_boolean_t remove_file = TRUE;
-
- SVN_ERR(find_editor_binary(&editor, editor_cmd, config));
-
- /* Convert file contents from UTF-8/LF if desired. */
- if (as_text)
- {
- const char *translated;
- SVN_ERR(svn_subst_translate_cstring2(contents->data, &translated,
- APR_EOL_STR, FALSE,
- NULL, FALSE, pool));
- translated_contents = svn_string_create("", pool);
- if (encoding)
- SVN_ERR(svn_utf_cstring_from_utf8_ex2(&translated_contents->data,
- translated, encoding, pool));
- else
- SVN_ERR(svn_utf_cstring_from_utf8(&translated_contents->data,
- translated, pool));
- translated_contents->len = strlen(translated_contents->data);
- }
- else
- translated_contents = svn_string_dup(contents, pool);
-
- /* Move to BASE_DIR to avoid getting characters that need quoting
- into tmpfile_name */
- apr_err = apr_filepath_get(&old_cwd, APR_FILEPATH_NATIVE, pool);
- if (apr_err)
- return svn_error_wrap_apr(apr_err, _("Can't get working directory"));
-
- /* APR doesn't like "" directories */
- if (base_dir[0] == '\0')
- base_dir_apr = ".";
- else
- SVN_ERR(svn_path_cstring_from_utf8(&base_dir_apr, base_dir, pool));
- apr_err = apr_filepath_set(base_dir_apr, pool);
- if (apr_err)
- {
- return svn_error_wrap_apr
- (apr_err, _("Can't change working directory to '%s'"), base_dir);
- }
-
- /*** From here on, any problems that occur require us to cd back!! ***/
-
- /* Ask the working copy for a temporary file named FILENAME-something. */
- err = svn_io_open_uniquely_named(&tmp_file, &tmpfile_name,
- "" /* dirpath */,
- filename,
- ".tmp",
- svn_io_file_del_none, pool, pool);
-
- if (err && (APR_STATUS_IS_EACCES(err->apr_err) || err->apr_err == EROFS))
- {
- const char *temp_dir_apr;
-
- svn_error_clear(err);
-
- SVN_ERR(svn_io_temp_dir(&base_dir, pool));
-
- SVN_ERR(svn_path_cstring_from_utf8(&temp_dir_apr, base_dir, pool));
- apr_err = apr_filepath_set(temp_dir_apr, pool);
- if (apr_err)
- {
- return svn_error_wrap_apr
- (apr_err, _("Can't change working directory to '%s'"), base_dir);
- }
-
- err = svn_io_open_uniquely_named(&tmp_file, &tmpfile_name,
- "" /* dirpath */,
- filename,
- ".tmp",
- svn_io_file_del_none, pool, pool);
- }
-
- if (err)
- goto cleanup2;
-
- /*** From here on, any problems that occur require us to cleanup
- the file we just created!! ***/
-
- /* Dump initial CONTENTS to TMP_FILE. */
- apr_err = apr_file_write_full(tmp_file, translated_contents->data,
- translated_contents->len, &written);
-
- apr_err2 = apr_file_close(tmp_file);
- if (! apr_err)
- apr_err = apr_err2;
-
- /* Make sure the whole CONTENTS were written, else return an error. */
- if (apr_err)
- {
- err = svn_error_wrap_apr(apr_err, _("Can't write to '%s'"),
- tmpfile_name);
- goto cleanup;
- }
-
- err = svn_path_cstring_from_utf8(&tmpfile_apr, tmpfile_name, pool);
- if (err)
- goto cleanup;
-
- /* Get information about the temporary file before the user has
- been allowed to edit its contents. */
- apr_err = apr_stat(&finfo_before, tmpfile_apr,
- APR_FINFO_MTIME, pool);
- if (apr_err)
- {
- err = svn_error_wrap_apr(apr_err, _("Can't stat '%s'"), tmpfile_name);
- goto cleanup;
- }
-
- /* Backdate the file a little bit in case the editor is very fast
- and doesn't change the size. (Use two seconds, since some
- filesystems have coarse granularity.) It's OK if this call
- fails, so we don't check its return value.*/
- apr_file_mtime_set(tmpfile_apr, finfo_before.mtime - 2000, pool);
-
- /* Stat it again to get the mtime we actually set. */
- apr_err = apr_stat(&finfo_before, tmpfile_apr,
- APR_FINFO_MTIME | APR_FINFO_SIZE, pool);
- if (apr_err)
- {
- err = svn_error_wrap_apr(apr_err, _("Can't stat '%s'"), tmpfile_name);
- goto cleanup;
- }
-
- /* Prepare the editor command line. */
- err = svn_utf_cstring_from_utf8(&tmpfile_native, tmpfile_name, pool);
- if (err)
- goto cleanup;
- cmd = apr_psprintf(pool, "%s %s", editor, tmpfile_native);
-
- /* If the caller wants us to leave the file around, return the path
- of the file we'll use, and make a note not to destroy it. */
- if (tmpfile_left)
- {
- *tmpfile_left = svn_dirent_join(base_dir, tmpfile_name, pool);
- remove_file = FALSE;
- }
-
- /* Now, run the editor command line. */
- sys_err = system(cmd);
- if (sys_err != 0)
- {
- /* Extracting any meaning from sys_err is platform specific, so just
- use the raw value. */
- err = svn_error_createf(SVN_ERR_EXTERNAL_PROGRAM, NULL,
- _("system('%s') returned %d"), cmd, sys_err);
- goto cleanup;
- }
-
- /* Get information about the temporary file after the assumed editing. */
- apr_err = apr_stat(&finfo_after, tmpfile_apr,
- APR_FINFO_MTIME | APR_FINFO_SIZE, pool);
- if (apr_err)
- {
- err = svn_error_wrap_apr(apr_err, _("Can't stat '%s'"), tmpfile_name);
- goto cleanup;
- }
-
- /* If the file looks changed... */
- if ((finfo_before.mtime != finfo_after.mtime) ||
- (finfo_before.size != finfo_after.size))
- {
- svn_stringbuf_t *edited_contents_s;
- err = svn_stringbuf_from_file2(&edited_contents_s, tmpfile_name, pool);
- if (err)
- goto cleanup;
-
- *edited_contents = svn_stringbuf__morph_into_string(edited_contents_s);
-
- /* Translate back to UTF8/LF if desired. */
- if (as_text)
- {
- err = svn_subst_translate_string2(edited_contents, FALSE, FALSE,
- *edited_contents, encoding, FALSE,
- pool, pool);
- if (err)
- {
- err = svn_error_quick_wrap
- (err,
- _("Error normalizing edited contents to internal format"));
- goto cleanup;
- }
- }
- }
- else
- {
- /* No edits seem to have been made */
- *edited_contents = NULL;
- }
-
- cleanup:
- if (remove_file)
- {
- /* Remove the file from disk. */
- err2 = svn_io_remove_file2(tmpfile_name, FALSE, pool);
-
- /* Only report remove error if there was no previous error. */
- if (! err && err2)
- err = err2;
- else
- svn_error_clear(err2);
- }
-
- cleanup2:
- /* If we against all probability can't cd back, all further relative
- file references would be screwed up, so we have to abort. */
- apr_err = apr_filepath_set(old_cwd, pool);
- if (apr_err)
- {
- svn_handle_error2(svn_error_wrap_apr
- (apr_err, _("Can't restore working directory")),
- stderr, TRUE /* fatal */, "svn: ");
- }
-
- return svn_error_trace(err);
-}
-
/* A svn_client_ctx_t's log_msg_baton3, for use with
svn_cl__make_log_msg_baton(). */
@@ -583,8 +224,7 @@ svn_cl__make_log_msg_baton(void **baton,
}
else if (config)
{
- svn_config_t *cfg = apr_hash_get(config, SVN_CONFIG_CATEGORY_CONFIG,
- APR_HASH_KEY_STRING);
+ svn_config_t *cfg = svn_hash_gets(config, SVN_CONFIG_CATEGORY_CONFIG);
svn_config_get(cfg, &(lmb->message_encoding),
SVN_CONFIG_SECTION_MISCELLANY,
SVN_CONFIG_OPTION_LOG_ENCODING,
@@ -732,12 +372,12 @@ svn_cl__get_log_message(const char **log_msg,
while (! message)
{
/* We still don't have a valid commit message. Use $EDITOR to
- get one. Note that svn_cl__edit_externally will still return
- a UTF-8'ized log message. */
+ get one. Note that svn_cl__edit_string_externally will still
+ return a UTF-8'ized log message. */
int i;
svn_stringbuf_t *tmp_message = svn_stringbuf_dup(default_msg, pool);
svn_error_t *err = SVN_NO_ERROR;
- svn_string_t *msg_string = svn_string_create("", pool);
+ svn_string_t *msg_string = svn_string_create_empty(pool);
for (i = 0; i < commit_items->nelts; i++)
{
@@ -793,12 +433,12 @@ svn_cl__get_log_message(const char **log_msg,
/* Use the external edit to get a log message. */
if (! lmb->non_interactive)
{
- err = svn_cl__edit_string_externally(&msg_string, &lmb->tmpfile_left,
- lmb->editor_cmd, lmb->base_dir,
- msg_string, "svn-commit",
- lmb->config, TRUE,
- lmb->message_encoding,
- pool);
+ err = svn_cmdline__edit_string_externally(&msg_string, &lmb->tmpfile_left,
+ lmb->editor_cmd, lmb->base_dir,
+ msg_string, "svn-commit",
+ lmb->config, TRUE,
+ lmb->message_encoding,
+ pool);
}
else /* non_interactive flag says we can't pop up an editor, so error */
{
@@ -876,7 +516,7 @@ svn_cl__get_log_message(const char **log_msg,
{
SVN_ERR(svn_io_remove_file2(lmb->tmpfile_left, FALSE, pool));
*tmp_file = lmb->tmpfile_left = NULL;
- message = svn_stringbuf_create("", pool);
+ message = svn_stringbuf_create_empty(pool);
}
/* If the user chooses anything else, the loop will
@@ -947,7 +587,7 @@ svn_cl__try(svn_error_t *err,
va_list ap;
va_start(ap, quiet);
- while ((apr_err = va_arg(ap, apr_status_t)) != SVN_NO_ERROR)
+ while ((apr_err = va_arg(ap, apr_status_t)) != APR_SUCCESS)
{
if (errors_seen)
{
@@ -1058,7 +698,7 @@ svn_error_t *
svn_cl__xml_print_header(const char *tagname,
apr_pool_t *pool)
{
- svn_stringbuf_t *sb = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *sb = svn_stringbuf_create_empty(pool);
/* <?xml version="1.0" encoding="UTF-8"?> */
svn_xml_make_header2(&sb, "UTF-8", pool);
@@ -1074,7 +714,7 @@ svn_error_t *
svn_cl__xml_print_footer(const char *tagname,
apr_pool_t *pool)
{
- svn_stringbuf_t *sb = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *sb = svn_stringbuf_create_empty(pool);
/* "</TAGNAME>" */
svn_xml_make_close_tag(&sb, pool, tagname);
@@ -1264,56 +904,6 @@ svn_cl__time_cstring_to_human_cstring(const char **human_cstring,
return SVN_NO_ERROR;
}
-
-/* Return a copy, allocated in POOL, of the next line of text from *STR
- * up to and including a CR and/or an LF. Change *STR to point to the
- * remainder of the string after the returned part. If there are no
- * characters to be returned, return NULL; never return an empty string.
- */
-static const char *
-next_line(const char **str, apr_pool_t *pool)
-{
- const char *start = *str;
- const char *p = *str;
-
- /* n.b. Throughout this fn, we never read any character after a '\0'. */
- /* Skip over all non-EOL characters, if any. */
- while (*p != '\r' && *p != '\n' && *p != '\0')
- p++;
- /* Skip over \r\n or \n\r or \r or \n, if any. */
- if (*p == '\r' || *p == '\n')
- {
- char c = *p++;
-
- if ((c == '\r' && *p == '\n') || (c == '\n' && *p == '\r'))
- p++;
- }
-
- /* Now p points after at most one '\n' and/or '\r'. */
- *str = p;
-
- if (p == start)
- return NULL;
-
- return svn_string_ncreate(start, p - start, pool)->data;
-}
-
-const char *
-svn_cl__indent_string(const char *str,
- const char *indent,
- apr_pool_t *pool)
-{
- svn_stringbuf_t *out = svn_stringbuf_create("", pool);
- const char *line;
-
- while ((line = next_line(&str, pool)))
- {
- svn_stringbuf_appendcstr(out, indent);
- svn_stringbuf_appendcstr(out, line);
- }
- return out->data;
-}
-
const char *
svn_cl__node_description(const svn_wc_conflict_version_t *node,
const char *wc_repos_root_URL,
@@ -1358,10 +948,14 @@ svn_cl__eat_peg_revisions(apr_array_header_t **true_targets_p,
for (i = 0; i < targets->nelts; i++)
{
const char *target = APR_ARRAY_IDX(targets, i, const char *);
- const char *true_target;
+ const char *true_target, *peg;
- SVN_ERR(svn_opt__split_arg_at_peg_revision(&true_target, NULL,
+ SVN_ERR(svn_opt__split_arg_at_peg_revision(&true_target, &peg,
target, pool));
+ if (peg[0] && peg[1])
+ return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("'%s': a peg revision is not allowed here"),
+ target);
APR_ARRAY_PUSH(true_targets, const char *) = true_target;
}
@@ -1378,9 +972,7 @@ svn_cl__assert_homogeneous_target_type(const apr_array_header_t *targets)
err = svn_client__assert_homogeneous_target_type(targets);
if (err && err->apr_err == SVN_ERR_ILLEGAL_TARGET)
- return svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, err,
- _("Cannot mix repository and working copy "
- "targets"));
+ return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, err, NULL);
return err;
}
@@ -1419,3 +1011,59 @@ svn_cl__local_style_skip_ancestor(const char *parent_path,
return svn_dirent_local_style(relpath ? relpath : path, pool);
}
+
+svn_error_t *
+svn_cl__propset_print_binary_mime_type_warning(apr_array_header_t *targets,
+ const char *propname,
+ const svn_string_t *propval,
+ apr_pool_t *scratch_pool)
+{
+ if (strcmp(propname, SVN_PROP_MIME_TYPE) == 0)
+ {
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ int i;
+
+ for (i = 0; i < targets->nelts; i++)
+ {
+ const char *detected_mimetype;
+ const char *target = APR_ARRAY_IDX(targets, i, const char *);
+ const char *local_abspath;
+ const svn_string_t *canon_propval;
+ svn_node_kind_t node_kind;
+
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(svn_dirent_get_absolute(&local_abspath, target, iterpool));
+ SVN_ERR(svn_io_check_path(local_abspath, &node_kind, iterpool));
+ if (node_kind != svn_node_file)
+ continue;
+
+ SVN_ERR(svn_wc_canonicalize_svn_prop(&canon_propval,
+ propname, propval,
+ local_abspath,
+ svn_node_file,
+ FALSE, NULL, NULL,
+ iterpool));
+
+ if (svn_mime_type_is_binary(canon_propval->data))
+ {
+ SVN_ERR(svn_io_detect_mimetype2(&detected_mimetype,
+ local_abspath, NULL,
+ iterpool));
+ if (detected_mimetype == NULL ||
+ !svn_mime_type_is_binary(detected_mimetype))
+ svn_error_clear(svn_cmdline_fprintf(stderr, iterpool,
+ _("svn: warning: '%s' is a binary mime-type but file '%s' "
+ "looks like text; diff, merge, blame, and other "
+ "operations will stop working on this file\n"),
+ canon_propval->data,
+ svn_dirent_local_style(local_abspath, iterpool)));
+
+ }
+ }
+ svn_pool_destroy(iterpool);
+ }
+
+ return SVN_NO_ERROR;
+}
+
diff --git a/subversion/svn_private_config.h.in b/subversion/svn_private_config.h.in
index 0d14c2f..b322e83 100644
--- a/subversion/svn_private_config.h.in
+++ b/subversion/svn_private_config.h.in
@@ -6,6 +6,9 @@
/* The http library to use by default */
#undef DEFAULT_HTTP_LIBRARY
+/* Define to 1 if Ev2 implementations should be used. */
+#undef ENABLE_EV2_IMPL
+
/* Define to 1 if translation of program messages to the user's native
language is requested. */
#undef ENABLE_NLS
@@ -64,6 +67,21 @@
/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H
+/* Define to 1 if you have the <sys/utsname.h> header file. */
+#undef HAVE_SYS_UTSNAME_H
+
+/* Define to 1 if you have the `tcgetattr' function. */
+#undef HAVE_TCGETATTR
+
+/* Define to 1 if you have the `tcsetattr' function. */
+#undef HAVE_TCSETATTR
+
+/* Defined if we have a usable termios library. */
+#undef HAVE_TERMIOS_H
+
+/* Define to 1 if you have the `uname' function. */
+#undef HAVE_UNAME
+
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
@@ -73,8 +91,7 @@
/* Define to 1 if you have the <zlib.h> header file. */
#undef HAVE_ZLIB_H
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
- */
+/* Define to the sub-directory where libtool stores uninstalled libraries. */
#undef LT_OBJDIR
/* Define to the address where bug reports for this package should be sent. */
@@ -107,12 +124,21 @@
/* Defined to be the path to the installed binaries */
#undef SVN_BINDIR
+/* Defined to the config.guess name of the build system */
+#undef SVN_BUILD_HOST
+
+/* Defined to the config.guess name of the build target */
+#undef SVN_BUILD_TARGET
+
/* The path of a default editor for the client. */
#undef SVN_CLIENT_EDITOR
/* Defined if the full version matching rules are disabled */
#undef SVN_DISABLE_FULL_VERSION_MATCH
+/* Defined if plaintext password/passphrase storage is disabled */
+#undef SVN_DISABLE_PLAINTEXT_PASSWORD_STORAGE
+
/* The desired major version for the Berkeley DB */
#undef SVN_FS_WANT_DB_MAJOR
@@ -122,9 +148,15 @@
/* The desired patch version for the Berkeley DB */
#undef SVN_FS_WANT_DB_PATCH
+/* Define if compiler provides atomic builtins */
+#undef SVN_HAS_ATOMIC_BUILTINS
+
/* Is GNOME Keyring support enabled? */
#undef SVN_HAVE_GNOME_KEYRING
+/* Is GPG Agent support enabled? */
+#undef SVN_HAVE_GPG_AGENT
+
/* Is Mac OS KeyChain support enabled? */
#undef SVN_HAVE_KEYCHAIN_SERVICES
@@ -134,12 +166,15 @@
/* Defined if libmagic support is enabled */
#undef SVN_HAVE_LIBMAGIC
+/* Is Mach-O low-level _dyld API available? */
+#undef SVN_HAVE_MACHO_ITERATE
+
+/* Is Mac OS property list API available? */
+#undef SVN_HAVE_MACOS_PLIST
+
/* Defined if apr_memcache (standalone or in apr-util) is present */
#undef SVN_HAVE_MEMCACHE
-/* Defined if support for Neon is enabled */
-#undef SVN_HAVE_NEON
-
/* Defined if Expat 1.0 or 1.1 was found */
#undef SVN_HAVE_OLD_EXPAT
@@ -152,9 +187,6 @@
/* Defined if libsvn_client should link against libsvn_ra_local */
#undef SVN_LIBSVN_CLIENT_LINKS_RA_LOCAL
-/* Defined if libsvn_client should link against libsvn_ra_neon */
-#undef SVN_LIBSVN_CLIENT_LINKS_RA_NEON
-
/* Defined if libsvn_client should link against libsvn_ra_serf */
#undef SVN_LIBSVN_CLIENT_LINKS_RA_SERF
@@ -170,23 +202,14 @@
/* Defined to be the path to the installed locale dirs */
#undef SVN_LOCALE_DIR
-/* Define to 1 if you have Neon 0.26 or later. */
-#undef SVN_NEON_0_26
-
-/* Define to 1 if you have Neon 0.27 or later. */
-#undef SVN_NEON_0_27
-
-/* Define to 1 if you have Neon 0.28 or later. */
-#undef SVN_NEON_0_28
-
/* Defined to be the null device for the system */
#undef SVN_NULL_DEVICE_NAME
/* Defined to be the path separator used on your local filesystem */
#undef SVN_PATH_LOCAL_SEPARATOR
-/* Defined if support for GSSAPI is enabled */
-#undef SVN_RA_SERF_HAVE_GSSAPI
+/* Subversion library major verson */
+#undef SVN_SOVERSION
/* Defined if svn should use the amalgamated version of sqlite */
#undef SVN_SQLITE_INLINE
@@ -206,12 +229,23 @@
#endif
+
+/* Indicate to translators that string X should be translated. Do not look
+ up the translation at run time; just expand to X. This macro is suitable
+ for use where a constant string is required at compile time. */
#define N_(x) x
+/* Indicate to translators that we have decided the string X should not be
+ translated. Expand to X. */
#define U_(x) x
#ifdef ENABLE_NLS
#include <locale.h>
#include <libintl.h>
+/* Indicate to translators that string X should be translated. At run time,
+ look up and return the translation of X. */
#define _(x) dgettext(PACKAGE_NAME, x)
+/* Indicate to translators that strings X1 and X2 are singular and plural
+ forms of the same message, and should be translated. At run time, return
+ an appropriate translation depending on the number N. */
#define Q_(x1, x2, n) dngettext(PACKAGE_NAME, x1, x2, n)
#else
#define _(x) (x)
diff --git a/subversion/svn_private_config.hw b/subversion/svn_private_config.hw
index 5bc6c54..61517f9 100644
--- a/subversion/svn_private_config.hw
+++ b/subversion/svn_private_config.hw
@@ -29,6 +29,20 @@
#ifndef SVN_PRIVATE_CONFIG_HW
#define SVN_PRIVATE_CONFIG_HW
+
+/* Define to a Windows-specific equivalent of config.guess output */
+#define SVN_BUILD_HOST "x86-microsoft-windows"
+
+#if defined(_M_X64)
+#define SVN_BUILD_TARGET "x64-microsoft-windows"
+#elif defined(_M_IA64)
+#define SVN_BUILD_TARGET "ia64-microsoft-windows"
+#elif defined( _M_IX86)
+#define SVN_BUILD_TARGET "x86-microsoft-windows"
+#else
+#error Unsupported build target.
+#endif
+
/* The minimal version of Berkeley DB we want */
#define SVN_FS_WANT_DB_MAJOR 4
#define SVN_FS_WANT_DB_MINOR 0
@@ -59,7 +73,7 @@
#define DEFAULT_FS_TYPE "fsfs"
/* The default HTTP library to use */
-#define DEFAULT_HTTP_LIBRARY "neon"
+#define DEFAULT_HTTP_LIBRARY "serf"
/* Define to the Python/C API format character suitable for apr_int64_t */
#if defined(_WIN64)
@@ -79,6 +93,7 @@
#include <libintl.h>
#define _(x) dgettext(PACKAGE_NAME, x)
#define Q_(x1, x2, n) dngettext(PACKAGE_NAME, x1, x2, n)
+#define HAVE_BIND_TEXTDOMAIN_CODESET
#else
#define _(x) (x)
#define Q_(x1, x2, n) (((n) == 1) ? x1 : x2)
diff --git a/subversion/svnadmin/main.c b/subversion/svnadmin/svnadmin.c
index c387e12..cfbcf66 100644
--- a/subversion/svnadmin/main.c
+++ b/subversion/svnadmin/svnadmin.c
@@ -1,5 +1,5 @@
/*
- * main.c: Subversion server administration tool.
+ * svnadmin.c: Subversion server administration tool main file.
*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
@@ -25,6 +25,7 @@
#include <apr_file_io.h>
#include <apr_signal.h>
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_cmdline.h"
#include "svn_error.h"
@@ -40,8 +41,11 @@
#include "svn_props.h"
#include "svn_time.h"
#include "svn_user.h"
+#include "svn_xml.h"
#include "private/svn_opt_private.h"
+#include "private/svn_subr_private.h"
+#include "private/svn_cmdline_private.h"
#include "svn_private_config.h"
@@ -107,12 +111,13 @@ open_repos(svn_repos_t **repos,
const char *path,
apr_pool_t *pool)
{
- /* construct FS configuration parameters: enable all available caches */
+ /* construct FS configuration parameters: enable caches for r/o data */
apr_hash_t *fs_config = apr_hash_make(pool);
- apr_hash_set(fs_config, SVN_FS_CONFIG_FSFS_CACHE_DELTAS,
- APR_HASH_KEY_STRING, "1");
- apr_hash_set(fs_config, SVN_FS_CONFIG_FSFS_CACHE_FULLTEXTS,
- APR_HASH_KEY_STRING, "1");
+ svn_hash_sets(fs_config, SVN_FS_CONFIG_FSFS_CACHE_DELTAS, "1");
+ svn_hash_sets(fs_config, SVN_FS_CONFIG_FSFS_CACHE_FULLTEXTS, "1");
+ svn_hash_sets(fs_config, SVN_FS_CONFIG_FSFS_CACHE_REVPROPS, "2");
+ svn_hash_sets(fs_config, SVN_FS_CONFIG_FSFS_CACHE_NS,
+ svn_uuid_generate(pool));
/* now, open the requested repository */
SVN_ERR(svn_repos_open2(repos, path, fs_config, pool));
@@ -133,9 +138,9 @@ check_lib_versions(void)
{ "svn_delta", svn_delta_version },
{ NULL, NULL }
};
-
SVN_VERSION_DEFINE(my_version);
- return svn_ver_check_list(&my_version, checklist);
+
+ return svn_ver_check_list2(&my_version, checklist, svn_ver_equal);
}
@@ -147,11 +152,13 @@ static svn_opt_subcommand_t
subcommand_create,
subcommand_deltify,
subcommand_dump,
+ subcommand_freeze,
subcommand_help,
subcommand_hotcopy,
subcommand_load,
subcommand_list_dblogs,
subcommand_list_unused_dblogs,
+ subcommand_lock,
subcommand_lslocks,
subcommand_lstxns,
subcommand_pack,
@@ -161,6 +168,7 @@ static svn_opt_subcommand_t
subcommand_setlog,
subcommand_setrevprop,
subcommand_setuuid,
+ subcommand_unlock,
subcommand_upgrade,
subcommand_verify;
@@ -186,7 +194,8 @@ enum svnadmin__cmdline_options_t
svnadmin__wait,
svnadmin__pre_1_4_compatible,
svnadmin__pre_1_5_compatible,
- svnadmin__pre_1_6_compatible
+ svnadmin__pre_1_6_compatible,
+ svnadmin__compatible_version
};
/* Option codes and descriptions.
@@ -207,8 +216,11 @@ static const apr_getopt_option_t options_table[] =
{"revision", 'r', 1,
N_("specify revision number ARG (or X:Y range)")},
+ {"transaction", 't', 1,
+ N_("specify transaction name ARG")},
+
{"incremental", svnadmin__incremental, 0,
- N_("dump incrementally")},
+ N_("dump or hotcopy incrementally")},
{"deltas", svnadmin__deltas, 0,
N_("use deltas in dump output")},
@@ -264,22 +276,25 @@ static const apr_getopt_option_t options_table[] =
" use by another process")},
{"pre-1.4-compatible", svnadmin__pre_1_4_compatible, 0,
- N_("use format compatible with Subversion versions\n"
- " earlier than 1.4")},
+ N_("deprecated; see --compatible-version")},
{"pre-1.5-compatible", svnadmin__pre_1_5_compatible, 0,
- N_("use format compatible with Subversion versions\n"
- " earlier than 1.5")},
+ N_("deprecated; see --compatible-version")},
{"pre-1.6-compatible", svnadmin__pre_1_6_compatible, 0,
- N_("use format compatible with Subversion versions\n"
- " earlier than 1.6")},
+ N_("deprecated; see --compatible-version")},
{"memory-cache-size", 'M', 1,
N_("size of the extra in-memory cache in MB used to\n"
" minimize redundant operations. Default: 16.\n"
" [used for FSFS repositories only]")},
+ {"compatible-version", svnadmin__compatible_version, 1,
+ N_("use repository format compatible with Subversion\n"
+ " version ARG (\"1.5.5\", \"1.7\", etc.)")},
+
+ {"file", 'F', 1, N_("read repository paths from file ARG")},
+
{NULL}
};
@@ -299,8 +314,9 @@ static const svn_opt_subcommand_desc2_t cmd_table[] =
("usage: svnadmin create REPOS_PATH\n\n"
"Create a new, empty repository at REPOS_PATH.\n"),
{svnadmin__bdb_txn_nosync, svnadmin__bdb_log_keep,
- svnadmin__config_dir, svnadmin__fs_type, svnadmin__pre_1_4_compatible,
- svnadmin__pre_1_5_compatible, svnadmin__pre_1_6_compatible
+ svnadmin__config_dir, svnadmin__fs_type, svnadmin__compatible_version,
+ svnadmin__pre_1_4_compatible, svnadmin__pre_1_5_compatible,
+ svnadmin__pre_1_6_compatible
} },
{"deltify", subcommand_deltify, {0}, N_
@@ -325,6 +341,16 @@ static const svn_opt_subcommand_desc2_t cmd_table[] =
"changed in those revisions.)\n"),
{'r', svnadmin__incremental, svnadmin__deltas, 'q', 'M'} },
+ {"freeze", subcommand_freeze, {0}, N_
+ ("usage: 1. svnadmin freeze REPOS_PATH PROGRAM [ARG...]\n"
+ " 2. svnadmin freeze -F FILE PROGRAM [ARG...]\n\n"
+ "1. Run PROGRAM passing ARGS while holding a write-lock on REPOS_PATH.\n"
+ "\n"
+ "2. Like 1 except all repositories listed in FILE are locked. The file\n"
+ " format is repository paths separated by newlines. Repositories are\n"
+ " locked in the same order as they are listed in the file.\n"),
+ {'F'} },
+
{"help", subcommand_help, {"?", "h"}, N_
("usage: svnadmin help [SUBCOMMAND...]\n\n"
"Describe the usage of this program or its subcommands.\n"),
@@ -332,8 +358,10 @@ static const svn_opt_subcommand_desc2_t cmd_table[] =
{"hotcopy", subcommand_hotcopy, {0}, N_
("usage: svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH\n\n"
- "Makes a hot copy of a repository.\n"),
- {svnadmin__clean_logs} },
+ "Make a hot copy of a repository.\n"
+ "If --incremental is passed, data which already exists at the destination\n"
+ "is not copied again. Incremental mode is implemented for FSFS repositories.\n"),
+ {svnadmin__clean_logs, svnadmin__incremental} },
{"list-dblogs", subcommand_list_dblogs, {0}, N_
("usage: svnadmin list-dblogs REPOS_PATH\n\n"
@@ -352,11 +380,20 @@ static const svn_opt_subcommand_desc2_t cmd_table[] =
"Read a 'dumpfile'-formatted stream from stdin, committing\n"
"new revisions into the repository's filesystem. If the repository\n"
"was previously empty, its UUID will, by default, be changed to the\n"
- "one specified in the stream. Progress feedback is sent to stdout.\n"),
- {'q', svnadmin__ignore_uuid, svnadmin__force_uuid,
+ "one specified in the stream. Progress feedback is sent to stdout.\n"
+ "If --revision is specified, limit the loaded revisions to only those\n"
+ "in the dump stream whose revision numbers match the specified range.\n"),
+ {'q', 'r', svnadmin__ignore_uuid, svnadmin__force_uuid,
svnadmin__use_pre_commit_hook, svnadmin__use_post_commit_hook,
svnadmin__parent_dir, svnadmin__bypass_prop_validation, 'M'} },
+ {"lock", subcommand_lock, {0}, N_
+ ("usage: svnadmin lock REPOS_PATH PATH USERNAME COMMENT-FILE [TOKEN]\n\n"
+ "Lock PATH by USERNAME setting comments from COMMENT-FILE.\n"
+ "If provided, use TOKEN as lock token. Use --bypass-hooks to avoid\n"
+ "triggering the pre-lock and post-lock hook scripts.\n"),
+ {svnadmin__bypass_hooks} },
+
{"lslocks", subcommand_lslocks, {0}, N_
("usage: svnadmin lslocks REPOS_PATH [PATH-IN-REPOS]\n\n"
"Print descriptions of all locks on or under PATH-IN-REPOS (which,\n"
@@ -422,6 +459,13 @@ static const svn_opt_subcommand_desc2_t cmd_table[] =
"generate a brand new UUID for the repository.\n"),
{0} },
+ {"unlock", subcommand_unlock, {0}, N_
+ ("usage: svnadmin unlock REPOS_PATH LOCKED_PATH USERNAME TOKEN\n\n"
+ "Unlock LOCKED_PATH (as USERNAME) after verifying that the token\n"
+ "associated with the lock matches TOKEN. Use --bypass-hooks to avoid\n"
+ "triggering the pre-unlock and post-unlock hook scripts.\n"),
+ {svnadmin__bypass_hooks} },
+
{"upgrade", subcommand_upgrade, {0}, N_
("usage: svnadmin upgrade REPOS_PATH\n\n"
"Upgrade the repository located at REPOS_PATH to the latest supported\n"
@@ -437,8 +481,8 @@ static const svn_opt_subcommand_desc2_t cmd_table[] =
{"verify", subcommand_verify, {0}, N_
("usage: svnadmin verify REPOS_PATH\n\n"
- "Verifies the data stored in the repository.\n"),
- {'r', 'q', 'M'} },
+ "Verify the data stored in the repository.\n"),
+ {'t', 'r', 'q', 'M'} },
{ NULL, NULL, {0}, NULL, {0} }
};
@@ -452,7 +496,9 @@ struct svnadmin_opt_state
svn_boolean_t pre_1_4_compatible; /* --pre-1.4-compatible */
svn_boolean_t pre_1_5_compatible; /* --pre-1.5-compatible */
svn_boolean_t pre_1_6_compatible; /* --pre-1.6-compatible */
+ svn_version_t *compatible_version; /* --compatible-version */
svn_opt_revision_t start_revision, end_revision; /* -r X[:Y] */
+ const char *txn_id; /* -t TXN */
svn_boolean_t help; /* --help or -? */
svn_boolean_t version; /* --version */
svn_boolean_t incremental; /* --incremental */
@@ -472,6 +518,7 @@ struct svnadmin_opt_state
--force-uuid */
apr_uint64_t memory_cache_size; /* --memory-cache-size M */
const char *parent_dir;
+ svn_stringbuf_t *filedata; /* --file */
const char *config_dir; /* Overriding Configuration Directory */
};
@@ -563,6 +610,21 @@ parse_args(apr_array_header_t **args,
return SVN_NO_ERROR;
}
+
+/* This implements `svn_opt_subcommand_t'. */
+static svn_error_t *
+subcommand_crashtest(apr_getopt_t *os, void *baton, apr_pool_t *pool)
+{
+ struct svnadmin_opt_state *opt_state = baton;
+ svn_repos_t *repos;
+
+ SVN_ERR(open_repos(&repos, opt_state->repository_path, pool));
+ SVN_ERR_MALFUNCTION();
+
+ /* merely silence a compiler warning (this will never be executed) */
+ return SVN_NO_ERROR;
+}
+
/* This implements `svn_opt_subcommand_t'. */
static svn_error_t *
subcommand_create(apr_getopt_t *os, void *baton, apr_pool_t *pool)
@@ -574,33 +636,66 @@ subcommand_create(apr_getopt_t *os, void *baton, apr_pool_t *pool)
/* Expect no more arguments. */
SVN_ERR(parse_args(NULL, os, 0, 0, pool));
- apr_hash_set(fs_config, SVN_FS_CONFIG_BDB_TXN_NOSYNC,
- APR_HASH_KEY_STRING,
- (opt_state->bdb_txn_nosync ? "1" : "0"));
+ svn_hash_sets(fs_config, SVN_FS_CONFIG_BDB_TXN_NOSYNC,
+ (opt_state->bdb_txn_nosync ? "1" :"0"));
- apr_hash_set(fs_config, SVN_FS_CONFIG_BDB_LOG_AUTOREMOVE,
- APR_HASH_KEY_STRING,
- (opt_state->bdb_log_keep ? "0" : "1"));
+ svn_hash_sets(fs_config, SVN_FS_CONFIG_BDB_LOG_AUTOREMOVE,
+ (opt_state->bdb_log_keep ? "0" :"1"));
if (opt_state->fs_type)
- apr_hash_set(fs_config, SVN_FS_CONFIG_FS_TYPE,
- APR_HASH_KEY_STRING,
- opt_state->fs_type);
+ {
+ /* With 1.8 we are announcing that BDB is deprecated. No support
+ * has been removed and it will continue to work until some future
+ * date. The purpose here is to discourage people from creating
+ * new BDB repositories which they will need to dump/load into
+ * FSFS or some new FS type in the future. */
+ if (0 == strcmp(opt_state->fs_type, SVN_FS_TYPE_BDB))
+ {
+ SVN_ERR(svn_cmdline_fprintf(
+ stderr, pool,
+ _("%swarning:"
+ " The \"%s\" repository back-end is deprecated,"
+ " consider using \"%s\" instead.\n"),
+ "svnadmin: ", SVN_FS_TYPE_BDB, SVN_FS_TYPE_FSFS));
+ fflush(stderr);
+ }
+ svn_hash_sets(fs_config, SVN_FS_CONFIG_FS_TYPE, opt_state->fs_type);
+ }
+ /* Prior to 1.8, we had explicit options to specify compatibility
+ with a handful of prior Subversion releases. */
if (opt_state->pre_1_4_compatible)
- apr_hash_set(fs_config, SVN_FS_CONFIG_PRE_1_4_COMPATIBLE,
- APR_HASH_KEY_STRING,
- "1");
-
+ svn_hash_sets(fs_config, SVN_FS_CONFIG_PRE_1_4_COMPATIBLE, "1");
if (opt_state->pre_1_5_compatible)
- apr_hash_set(fs_config, SVN_FS_CONFIG_PRE_1_5_COMPATIBLE,
- APR_HASH_KEY_STRING,
- "1");
-
+ svn_hash_sets(fs_config, SVN_FS_CONFIG_PRE_1_5_COMPATIBLE, "1");
if (opt_state->pre_1_6_compatible)
- apr_hash_set(fs_config, SVN_FS_CONFIG_PRE_1_6_COMPATIBLE,
- APR_HASH_KEY_STRING,
- "1");
+ svn_hash_sets(fs_config, SVN_FS_CONFIG_PRE_1_6_COMPATIBLE, "1");
+
+ /* In 1.8, we figured out that we didn't have to keep extending this
+ madness indefinitely. */
+ if (opt_state->compatible_version)
+ {
+ if (! svn_version__at_least(opt_state->compatible_version, 1, 4, 0))
+ svn_hash_sets(fs_config, SVN_FS_CONFIG_PRE_1_4_COMPATIBLE, "1");
+ if (! svn_version__at_least(opt_state->compatible_version, 1, 5, 0))
+ svn_hash_sets(fs_config, SVN_FS_CONFIG_PRE_1_5_COMPATIBLE, "1");
+ if (! svn_version__at_least(opt_state->compatible_version, 1, 6, 0))
+ svn_hash_sets(fs_config, SVN_FS_CONFIG_PRE_1_6_COMPATIBLE, "1");
+ if (! svn_version__at_least(opt_state->compatible_version, 1, 8, 0))
+ svn_hash_sets(fs_config, SVN_FS_CONFIG_PRE_1_8_COMPATIBLE, "1");
+ }
+
+ if (opt_state->compatible_version
+ && ! svn_version__at_least(opt_state->compatible_version, 1, 1, 0)
+ /* ### TODO: this NULL check hard-codes knowledge of the library's
+ default fs-type value */
+ && (opt_state->fs_type == NULL
+ || !strcmp(opt_state->fs_type, SVN_FS_TYPE_FSFS)))
+ {
+ return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("Repositories compatible with 1.0.x must use "
+ "--fs-type=bdb"));
+ }
SVN_ERR(svn_repos_create(&repos, opt_state->repository_path,
NULL, NULL, NULL, fs_config, pool));
@@ -692,6 +787,16 @@ repos_notify_handler(void *baton,
notify->revision));
return;
+ case svn_repos_notify_verify_rev_structure:
+ if (notify->revision == SVN_INVALID_REVNUM)
+ svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
+ _("* Verifying repository metadata ...\n")));
+ else
+ svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
+ _("* Verifying metadata at revision %ld ...\n"),
+ notify->revision));
+ return;
+
case svn_repos_notify_pack_shard_start:
{
const char *shardstr = apr_psprintf(scratch_pool,
@@ -704,8 +809,7 @@ repos_notify_handler(void *baton,
return;
case svn_repos_notify_pack_shard_end:
- svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
- _("done.\n")));
+ svn_error_clear(svn_stream_puts(feedback_stream, _("done.\n")));
return;
case svn_repos_notify_pack_shard_start_revprop:
@@ -720,8 +824,7 @@ repos_notify_handler(void *baton,
return;
case svn_repos_notify_pack_shard_end_revprop:
- svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
- _("done.\n")));
+ svn_error_clear(svn_stream_puts(feedback_stream, _("done.\n")));
return;
case svn_repos_notify_load_txn_committed:
@@ -774,8 +877,8 @@ repos_notify_handler(void *baton,
return;
case svn_repos_notify_load_node_done:
- len = 7;
- svn_error_clear(svn_stream_write(feedback_stream, _(" done.\n"), &len));
+ svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
+ "%s", _(" done.\n")));
return;
case svn_repos_notify_load_copied_node:
@@ -790,6 +893,12 @@ repos_notify_handler(void *baton,
notify->old_revision));
return;
+ case svn_repos_notify_load_skipped_rev:
+ svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
+ _("<<< Skipped original revision %ld\n"),
+ notify->old_revision));
+ return;
+
case svn_repos_notify_load_normalized_mergeinfo:
svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
_(" removing '\\r' from %s ..."),
@@ -809,7 +918,7 @@ repos_notify_handler(void *baton,
return;
case svn_repos_notify_upgrade_start:
- svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
+ svn_error_clear(svn_stream_puts(feedback_stream,
_("Repository lock acquired.\n"
"Please wait; upgrading the"
" repository may take some time...\n")));
@@ -915,6 +1024,80 @@ subcommand_dump(apr_getopt_t *os, void *baton, apr_pool_t *pool)
return SVN_NO_ERROR;
}
+struct freeze_baton_t {
+ const char *command;
+ const char **args;
+ int status;
+};
+
+/* Implements svn_repos_freeze_func_t */
+static svn_error_t *
+freeze_body(void *baton,
+ apr_pool_t *pool)
+{
+ struct freeze_baton_t *b = baton;
+ apr_status_t apr_err;
+ apr_file_t *infile, *outfile, *errfile;
+
+ apr_err = apr_file_open_stdin(&infile, pool);
+ if (apr_err)
+ return svn_error_wrap_apr(apr_err, "Can't open stdin");
+ apr_err = apr_file_open_stdout(&outfile, pool);
+ if (apr_err)
+ return svn_error_wrap_apr(apr_err, "Can't open stdout");
+ apr_err = apr_file_open_stderr(&errfile, pool);
+ if (apr_err)
+ return svn_error_wrap_apr(apr_err, "Can't open stderr");
+
+ SVN_ERR(svn_io_run_cmd(NULL, b->command, b->args, &b->status,
+ NULL, TRUE,
+ infile, outfile, errfile, pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+subcommand_freeze(apr_getopt_t *os, void *baton, apr_pool_t *pool)
+{
+ struct svnadmin_opt_state *opt_state = baton;
+ apr_array_header_t *paths;
+ apr_array_header_t *args;
+ int i;
+ struct freeze_baton_t b;
+
+ SVN_ERR(svn_opt_parse_all_args(&args, os, pool));
+
+ if (!args->nelts)
+ return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, 0,
+ _("No program provided"));
+
+ if (!opt_state->filedata)
+ {
+ /* One repository on the command line. */
+ paths = apr_array_make(pool, 1, sizeof(const char *));
+ APR_ARRAY_PUSH(paths, const char *) = opt_state->repository_path;
+ }
+ else
+ {
+ /* All repositories in filedata. */
+ paths = svn_cstring_split(opt_state->filedata->data, "\n", FALSE, pool);
+ }
+
+ b.command = APR_ARRAY_IDX(args, 0, const char *);
+ b.args = apr_palloc(pool, sizeof(char *) * (args->nelts + 1));
+ for (i = 0; i < args->nelts; ++i)
+ b.args[i] = APR_ARRAY_IDX(args, i, const char *);
+ b.args[args->nelts] = NULL;
+
+ SVN_ERR(svn_repos_freeze(paths, freeze_body, &b, pool));
+
+ /* Make any non-zero status visible to the user. */
+ if (b.status)
+ exit(b.status);
+
+ return SVN_NO_ERROR;
+}
+
/* This implements `svn_opt_subcommand_t'. */
static svn_error_t *
@@ -936,9 +1119,10 @@ subcommand_help(apr_getopt_t *os, void *baton, apr_pool_t *pool)
version_footer = svn_stringbuf_create(fs_desc_start, pool);
SVN_ERR(svn_fs_print_modules(version_footer, pool));
- SVN_ERR(svn_opt_print_help3(os, "svnadmin",
+ SVN_ERR(svn_opt_print_help4(os, "svnadmin",
opt_state ? opt_state->version : FALSE,
opt_state ? opt_state->quiet : FALSE,
+ /*###opt_state ? opt_state->verbose :*/ FALSE,
version_footer->data,
header, cmd_table, options_table, NULL, NULL,
pool));
@@ -947,6 +1131,32 @@ subcommand_help(apr_getopt_t *os, void *baton, apr_pool_t *pool)
}
+/* Set *REVNUM to the revision number of a numeric REV, or to
+ SVN_INVALID_REVNUM if REV is unspecified. */
+static svn_error_t *
+optrev_to_revnum(svn_revnum_t *revnum, const svn_opt_revision_t *opt_rev)
+{
+ if (opt_rev->kind == svn_opt_revision_number)
+ {
+ *revnum = opt_rev->value.number;
+ if (! SVN_IS_VALID_REVNUM(*revnum))
+ return svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("Invalid revision number (%ld) specified"),
+ *revnum);
+ }
+ else if (opt_rev->kind == svn_opt_revision_unspecified)
+ {
+ *revnum = SVN_INVALID_REVNUM;
+ }
+ else
+ {
+ return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("Non-numeric revision specified"));
+ }
+ return SVN_NO_ERROR;
+}
+
+
/* This implements `svn_opt_subcommand_t'. */
static svn_error_t *
subcommand_load(apr_getopt_t *os, void *baton, apr_pool_t *pool)
@@ -954,11 +1164,34 @@ subcommand_load(apr_getopt_t *os, void *baton, apr_pool_t *pool)
svn_error_t *err;
struct svnadmin_opt_state *opt_state = baton;
svn_repos_t *repos;
+ svn_revnum_t lower = SVN_INVALID_REVNUM, upper = SVN_INVALID_REVNUM;
svn_stream_t *stdin_stream, *stdout_stream = NULL;
/* Expect no more arguments. */
SVN_ERR(parse_args(NULL, os, 0, 0, pool));
+ /* Find the revision numbers at which to start and end. We only
+ support a limited set of revision kinds: number and unspecified. */
+ SVN_ERR(optrev_to_revnum(&lower, &opt_state->start_revision));
+ SVN_ERR(optrev_to_revnum(&upper, &opt_state->end_revision));
+
+ /* Fill in implied revisions if necessary. */
+ if ((upper == SVN_INVALID_REVNUM) && (lower != SVN_INVALID_REVNUM))
+ {
+ upper = lower;
+ }
+ else if ((upper != SVN_INVALID_REVNUM) && (lower == SVN_INVALID_REVNUM))
+ {
+ lower = upper;
+ }
+
+ /* Ensure correct range ordering. */
+ if (lower > upper)
+ {
+ return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("First revision cannot be higher than second"));
+ }
+
SVN_ERR(open_repos(&repos, opt_state->repository_path, pool));
/* Read the stream from STDIN. Users can redirect a file. */
@@ -968,11 +1201,11 @@ subcommand_load(apr_getopt_t *os, void *baton, apr_pool_t *pool)
if (! opt_state->quiet)
stdout_stream = recode_stream_create(stdout, pool);
- err = svn_repos_load_fs3(repos, stdin_stream,
+ err = svn_repos_load_fs4(repos, stdin_stream, lower, upper,
opt_state->uuid_action, opt_state->parent_dir,
opt_state->use_pre_commit_hook,
opt_state->use_post_commit_hook,
- opt_state->bypass_prop_validation ? FALSE : TRUE,
+ !opt_state->bypass_prop_validation,
opt_state->quiet ? NULL : repos_notify_handler,
stdout_stream, check_cancel, NULL, pool);
if (err && err->apr_err == SVN_ERR_BAD_PROPERTY_VALUE)
@@ -1197,7 +1430,7 @@ set_revprop(const char *prop_name, const char *filename,
struct svnadmin_opt_state *opt_state, apr_pool_t *pool)
{
svn_repos_t *repos;
- svn_string_t *prop_value = svn_string_create("", pool);
+ svn_string_t *prop_value = svn_string_create_empty(pool);
svn_stringbuf_t *file_contents;
SVN_ERR(svn_stringbuf_from_file2(&file_contents, filename, pool));
@@ -1316,7 +1549,7 @@ subcommand_pack(apr_getopt_t *os, void *baton, apr_pool_t *pool)
/* Progress feedback goes to STDOUT, unless they asked to suppress it. */
if (! opt_state->quiet)
- progress_stream = recode_stream_create(stderr, pool);
+ progress_stream = recode_stream_create(stdout, pool);
return svn_error_trace(
svn_repos_fs_pack2(repos, !opt_state->quiet ? repos_notify_handler : NULL,
@@ -1337,10 +1570,34 @@ subcommand_verify(apr_getopt_t *os, void *baton, apr_pool_t *pool)
/* Expect no more arguments. */
SVN_ERR(parse_args(NULL, os, 0, 0, pool));
+ if (opt_state->txn_id
+ && (opt_state->start_revision.kind != svn_opt_revision_unspecified
+ || opt_state->end_revision.kind != svn_opt_revision_unspecified))
+ {
+ return svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("--revision (-r) and --transaction (-t) "
+ "are mutually exclusive"));
+ }
+
SVN_ERR(open_repos(&repos, opt_state->repository_path, pool));
fs = svn_repos_fs(repos);
SVN_ERR(svn_fs_youngest_rev(&youngest, fs, pool));
+ /* Usage 2. */
+ if (opt_state->txn_id)
+ {
+ svn_fs_txn_t *txn;
+ svn_fs_root_t *root;
+
+ SVN_ERR(svn_fs_open_txn(&txn, fs, opt_state->txn_id, pool));
+ SVN_ERR(svn_fs_txn_root(&root, txn, pool));
+ SVN_ERR(svn_fs_verify_root(root, pool));
+ return SVN_NO_ERROR;
+ }
+ else
+ /* Usage 1. */
+ ;
+
/* Find the revision numbers at which to start and end. */
SVN_ERR(get_revnum(&lower, &opt_state->start_revision,
youngest, repos, pool));
@@ -1374,10 +1631,74 @@ subcommand_hotcopy(apr_getopt_t *os, void *baton, apr_pool_t *pool)
new_repos_path = APR_ARRAY_IDX(targets, 0, const char *);
SVN_ERR(target_arg_to_dirent(&new_repos_path, new_repos_path, pool));
- return svn_repos_hotcopy(opt_state->repository_path, new_repos_path,
- opt_state->clean_logs, pool);
+ return svn_repos_hotcopy2(opt_state->repository_path, new_repos_path,
+ opt_state->clean_logs, opt_state->incremental,
+ check_cancel, NULL, pool);
}
+/* This implements `svn_opt_subcommand_t'. */
+static svn_error_t *
+subcommand_lock(apr_getopt_t *os, void *baton, apr_pool_t *pool)
+{
+ struct svnadmin_opt_state *opt_state = baton;
+ svn_repos_t *repos;
+ svn_fs_t *fs;
+ svn_fs_access_t *access;
+ apr_array_header_t *args;
+ const char *username;
+ const char *lock_path;
+ const char *comment_file_name;
+ svn_stringbuf_t *file_contents;
+ const char *lock_path_utf8;
+ svn_lock_t *lock;
+ const char *lock_token = NULL;
+
+ /* Expect three more arguments: PATH USERNAME COMMENT-FILE */
+ SVN_ERR(parse_args(&args, os, 3, 4, pool));
+ lock_path = APR_ARRAY_IDX(args, 0, const char *);
+ username = APR_ARRAY_IDX(args, 1, const char *);
+ comment_file_name = APR_ARRAY_IDX(args, 2, const char *);
+
+ /* Expect one more optional argument: TOKEN */
+ if (args->nelts == 4)
+ lock_token = APR_ARRAY_IDX(args, 3, const char *);
+
+ SVN_ERR(target_arg_to_dirent(&comment_file_name, comment_file_name, pool));
+
+ SVN_ERR(open_repos(&repos, opt_state->repository_path, pool));
+ fs = svn_repos_fs(repos);
+
+ /* Create an access context describing the user. */
+ SVN_ERR(svn_fs_create_access(&access, username, pool));
+
+ /* Attach the access context to the filesystem. */
+ SVN_ERR(svn_fs_set_access(fs, access));
+
+ SVN_ERR(svn_stringbuf_from_file2(&file_contents, comment_file_name, pool));
+
+ SVN_ERR(svn_utf_cstring_to_utf8(&lock_path_utf8, lock_path, pool));
+
+ if (opt_state->bypass_hooks)
+ SVN_ERR(svn_fs_lock(&lock, fs, lock_path_utf8,
+ lock_token,
+ file_contents->data, /* comment */
+ 0, /* is_dav_comment */
+ 0, /* no expiration time. */
+ SVN_INVALID_REVNUM,
+ FALSE, pool));
+ else
+ SVN_ERR(svn_repos_fs_lock(&lock, repos, lock_path_utf8,
+ lock_token,
+ file_contents->data, /* comment */
+ 0, /* is_dav_comment */
+ 0, /* no expiration time. */
+ SVN_INVALID_REVNUM,
+ FALSE, pool));
+
+ SVN_ERR(svn_cmdline_printf(pool, _("'%s' locked by user '%s'.\n"),
+ lock_path, username));
+ return SVN_NO_ERROR;
+}
static svn_error_t *
subcommand_lslocks(apr_getopt_t *os, void *baton, apr_pool_t *pool)
@@ -1522,6 +1843,47 @@ subcommand_rmlocks(apr_getopt_t *os, void *baton, apr_pool_t *pool)
/* This implements `svn_opt_subcommand_t'. */
static svn_error_t *
+subcommand_unlock(apr_getopt_t *os, void *baton, apr_pool_t *pool)
+{
+ struct svnadmin_opt_state *opt_state = baton;
+ svn_repos_t *repos;
+ svn_fs_t *fs;
+ svn_fs_access_t *access;
+ apr_array_header_t *args;
+ const char *username;
+ const char *lock_path;
+ const char *lock_path_utf8;
+ const char *lock_token = NULL;
+
+ /* Expect three more arguments: PATH USERNAME TOKEN */
+ SVN_ERR(parse_args(&args, os, 3, 3, pool));
+ lock_path = APR_ARRAY_IDX(args, 0, const char *);
+ username = APR_ARRAY_IDX(args, 1, const char *);
+ lock_token = APR_ARRAY_IDX(args, 2, const char *);
+
+ /* Open the repos/FS, and associate an access context containing
+ USERNAME. */
+ SVN_ERR(open_repos(&repos, opt_state->repository_path, pool));
+ fs = svn_repos_fs(repos);
+ SVN_ERR(svn_fs_create_access(&access, username, pool));
+ SVN_ERR(svn_fs_set_access(fs, access));
+
+ SVN_ERR(svn_utf_cstring_to_utf8(&lock_path_utf8, lock_path, pool));
+ if (opt_state->bypass_hooks)
+ SVN_ERR(svn_fs_unlock(fs, lock_path_utf8, lock_token,
+ FALSE, pool));
+ else
+ SVN_ERR(svn_repos_fs_unlock(repos, lock_path_utf8, lock_token,
+ FALSE, pool));
+
+ SVN_ERR(svn_cmdline_printf(pool, _("'%s' unlocked by user '%s'.\n"),
+ lock_path, username));
+ return SVN_NO_ERROR;
+}
+
+
+/* This implements `svn_opt_subcommand_t'. */
+static svn_error_t *
subcommand_upgrade(apr_getopt_t *os, void *baton, apr_pool_t *pool)
{
svn_error_t *err;
@@ -1582,13 +1944,26 @@ subcommand_upgrade(apr_getopt_t *os, void *baton, apr_pool_t *pool)
/** Main. **/
-int
-main(int argc, const char *argv[])
+/* Report and clear the error ERR, and return EXIT_FAILURE. */
+#define EXIT_ERROR(err) \
+ svn_cmdline_handle_exit_error(err, NULL, "svnadmin: ")
+
+/* A redefinition of the public SVN_INT_ERR macro, that suppresses the
+ * error message if it is SVN_ERR_IO_PIPE_WRITE_ERROR, amd with the
+ * program name 'svnadmin' instead of 'svn'. */
+#undef SVN_INT_ERR
+#define SVN_INT_ERR(expr) \
+ do { \
+ svn_error_t *svn_err__temp = (expr); \
+ if (svn_err__temp) \
+ return EXIT_ERROR(svn_err__temp); \
+ } while (0)
+
+static int
+sub_main(int argc, const char *argv[], apr_pool_t *pool)
{
svn_error_t *err;
apr_status_t apr_err;
- apr_allocator_t *allocator;
- apr_pool_t *pool;
const svn_opt_subcommand_desc2_t *subcommand = NULL;
struct svnadmin_opt_state opt_state = { 0 };
@@ -1596,38 +1971,19 @@ main(int argc, const char *argv[])
int opt_id;
apr_array_header_t *received_opts;
int i;
-
- /* Initialize the app. */
- if (svn_cmdline_init("svnadmin", stderr) != EXIT_SUCCESS)
- return EXIT_FAILURE;
-
- /* Create our top-level pool. Use a separate mutexless allocator,
- * given this application is single threaded.
- */
- if (apr_allocator_create(&allocator))
- return EXIT_FAILURE;
-
- apr_allocator_max_free_set(allocator, SVN_ALLOCATOR_RECOMMENDED_MAX_FREE);
-
- pool = svn_pool_create_ex(NULL, allocator);
- apr_allocator_owner_set(allocator, pool);
+ svn_boolean_t dash_F_arg = FALSE;
received_opts = apr_array_make(pool, SVN_OPT_MAX_OPTIONS, sizeof(int));
/* Check library versions */
- err = check_lib_versions();
- if (err)
- return svn_cmdline_handle_exit_error(err, pool, "svnadmin: ");
+ SVN_INT_ERR(check_lib_versions());
/* Initialize the FS library. */
- err = svn_fs_initialize(pool);
- if (err)
- return svn_cmdline_handle_exit_error(err, pool, "svnadmin: ");
+ SVN_INT_ERR(svn_fs_initialize(pool));
if (argc <= 1)
{
SVN_INT_ERR(subcommand_help(NULL, NULL, pool));
- svn_pool_destroy(pool);
return EXIT_FAILURE;
}
@@ -1637,9 +1993,7 @@ main(int argc, const char *argv[])
opt_state.memory_cache_size = svn_cache_config_get()->cache_size;
/* Parse options. */
- err = svn_cmdline__getopt_init(&os, argc, argv, pool);
- if (err)
- return svn_cmdline_handle_exit_error(err, pool, "svnadmin: ");
+ SVN_INT_ERR(svn_cmdline__getopt_init(&os, argc, argv, pool));
os->interleave = 1;
@@ -1655,7 +2009,6 @@ main(int argc, const char *argv[])
else if (apr_err)
{
SVN_INT_ERR(subcommand_help(NULL, NULL, pool));
- svn_pool_destroy(pool);
return EXIT_FAILURE;
}
@@ -1670,7 +2023,7 @@ main(int argc, const char *argv[])
err = svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("Multiple revision arguments encountered; "
"try '-r N:M' instead of '-r N -r M'"));
- return svn_cmdline_handle_exit_error(err, pool, "svnadmin: ");
+ return EXIT_ERROR(err);
}
if (svn_opt_parse_revision(&(opt_state.start_revision),
&(opt_state.end_revision),
@@ -1683,10 +2036,14 @@ main(int argc, const char *argv[])
err = svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("Syntax error in revision argument '%s'"),
utf8_opt_arg);
- return svn_cmdline_handle_exit_error(err, pool, "svnadmin: ");
+ return EXIT_ERROR(err);
}
}
break;
+ case 't':
+ opt_state.txn_id = opt_arg;
+ break;
+
case 'q':
opt_state.quiet = TRUE;
break;
@@ -1698,6 +2055,11 @@ main(int argc, const char *argv[])
opt_state.memory_cache_size
= 0x100000 * apr_strtoi64(opt_arg, NULL, 0);
break;
+ case 'F':
+ SVN_INT_ERR(svn_utf_cstring_to_utf8(&utf8_opt_arg, opt_arg, pool));
+ SVN_INT_ERR(svn_stringbuf_from_file2(&(opt_state.filedata),
+ utf8_opt_arg, pool));
+ dash_F_arg = TRUE;
case svnadmin__version:
opt_state.version = TRUE;
break;
@@ -1722,16 +2084,50 @@ main(int argc, const char *argv[])
case svnadmin__pre_1_6_compatible:
opt_state.pre_1_6_compatible = TRUE;
break;
+ case svnadmin__compatible_version:
+ {
+ svn_version_t latest = { SVN_VER_MAJOR, SVN_VER_MINOR,
+ SVN_VER_PATCH, NULL };
+ svn_version_t *compatible_version;
+
+ /* Parse the version string which carries our target
+ compatibility. */
+ SVN_INT_ERR(svn_version__parse_version_string(&compatible_version,
+ opt_arg, pool));
+
+ /* We can't create repository with a version older than 1.0.0. */
+ if (! svn_version__at_least(compatible_version, 1, 0, 0))
+ {
+ err = svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
+ _("Cannot create pre-1.0-compatible "
+ "repositories"));
+ return EXIT_ERROR(err);
+ }
+
+ /* We can't create repository with a version newer than what
+ the running version of Subversion supports. */
+ if (! svn_version__at_least(&latest,
+ compatible_version->major,
+ compatible_version->minor,
+ compatible_version->patch))
+ {
+ err = svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
+ _("Cannot guarantee compatibility "
+ "beyond the current running version "
+ "(%s)"),
+ SVN_VER_NUM );
+ return EXIT_ERROR(err);
+ }
+
+ opt_state.compatible_version = compatible_version;
+ }
+ break;
case svnadmin__fs_type:
- err = svn_utf_cstring_to_utf8(&opt_state.fs_type, opt_arg, pool);
- if (err)
- return svn_cmdline_handle_exit_error(err, pool, "svnadmin: ");
+ SVN_INT_ERR(svn_utf_cstring_to_utf8(&opt_state.fs_type, opt_arg, pool));
break;
case svnadmin__parent_dir:
- err = svn_utf_cstring_to_utf8(&opt_state.parent_dir, opt_arg,
- pool);
- if (err)
- return svn_cmdline_handle_exit_error(err, pool, "svnadmin: ");
+ SVN_INT_ERR(svn_utf_cstring_to_utf8(&opt_state.parent_dir, opt_arg,
+ pool));
opt_state.parent_dir
= svn_dirent_internal_style(opt_state.parent_dir, pool);
break;
@@ -1763,9 +2159,7 @@ main(int argc, const char *argv[])
opt_state.clean_logs = TRUE;
break;
case svnadmin__config_dir:
- err = svn_utf_cstring_to_utf8(&utf8_opt_arg, opt_arg, pool);
- if (err)
- return svn_cmdline_handle_exit_error(err, pool, "svnadmin: ");
+ SVN_INT_ERR(svn_utf_cstring_to_utf8(&utf8_opt_arg, opt_arg, pool));
opt_state.config_dir =
apr_pstrdup(pool, svn_dirent_canonicalize(utf8_opt_arg, pool));
break;
@@ -1775,7 +2169,6 @@ main(int argc, const char *argv[])
default:
{
SVN_INT_ERR(subcommand_help(NULL, NULL, pool));
- svn_pool_destroy(pool);
return EXIT_FAILURE;
}
} /* close `switch' */
@@ -1810,7 +2203,6 @@ main(int argc, const char *argv[])
svn_error_clear(svn_cmdline_fprintf(stderr, pool,
_("subcommand argument required\n")));
SVN_INT_ERR(subcommand_help(NULL, NULL, pool));
- svn_pool_destroy(pool);
return EXIT_FAILURE;
}
}
@@ -1821,22 +2213,23 @@ main(int argc, const char *argv[])
if (subcommand == NULL)
{
const char *first_arg_utf8;
- err = svn_utf_cstring_to_utf8(&first_arg_utf8, first_arg, pool);
- if (err)
- return svn_cmdline_handle_exit_error(err, pool, "svnadmin: ");
- svn_error_clear(svn_cmdline_fprintf(stderr, pool,
- _("Unknown command: '%s'\n"),
- first_arg_utf8));
+ SVN_INT_ERR(svn_utf_cstring_to_utf8(&first_arg_utf8,
+ first_arg, pool));
+ svn_error_clear(
+ svn_cmdline_fprintf(stderr, pool,
+ _("Unknown subcommand: '%s'\n"),
+ first_arg_utf8));
SVN_INT_ERR(subcommand_help(NULL, NULL, pool));
- svn_pool_destroy(pool);
return EXIT_FAILURE;
}
}
}
- /* Every subcommand except `help' requires a second argument -- the
- repository path. Parse it out here and store it in opt_state. */
- if (subcommand->cmd_func != subcommand_help)
+ /* Every subcommand except `help' and `freeze' with '-F' require a
+ second argument -- the repository path. Parse it out here and
+ store it in opt_state. */
+ if (!(subcommand->cmd_func == subcommand_help
+ || (subcommand->cmd_func == subcommand_freeze && dash_F_arg)))
{
const char *repos_path = NULL;
@@ -1844,13 +2237,13 @@ main(int argc, const char *argv[])
{
err = svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("Repository argument required"));
- return svn_cmdline_handle_exit_error(err, pool, "svnadmin: ");
+ return EXIT_ERROR(err);
}
if ((err = svn_utf_cstring_to_utf8(&repos_path,
os->argv[os->ind++], pool)))
{
- return svn_cmdline_handle_exit_error(err, pool, "svnadmin: ");
+ return EXIT_ERROR(err);
}
if (svn_path_is_url(repos_path))
@@ -1858,7 +2251,7 @@ main(int argc, const char *argv[])
err = svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("'%s' is a URL when it should be a "
"local path"), repos_path);
- return svn_cmdline_handle_exit_error(err, pool, "svnadmin: ");
+ return EXIT_ERROR(err);
}
opt_state.repository_path = svn_dirent_internal_style(repos_path, pool);
@@ -1890,7 +2283,6 @@ main(int argc, const char *argv[])
, _("Subcommand '%s' doesn't accept option '%s'\n"
"Type 'svnadmin help %s' for usage.\n"),
subcommand->name, optstr, subcommand->name));
- svn_pool_destroy(pool);
return EXIT_FAILURE;
}
}
@@ -1933,43 +2325,38 @@ main(int argc, const char *argv[])
err = svn_error_quick_wrap(err,
_("Try 'svnadmin help' for more info"));
}
- return svn_cmdline_handle_exit_error(err, pool, "svnadmin: ");
+ return EXIT_ERROR(err);
}
else
{
- svn_pool_destroy(pool);
/* Ensure that everything is written to stdout, so the user will
see any print errors. */
err = svn_cmdline_fflush(stdout);
if (err)
{
- /* Issue #3014:
- * Don't print anything on broken pipes. The pipe was likely
- * closed by the process at the other end. We expect that
- * process to perform error reporting as necessary.
- *
- * ### This assumes that there is only one error in a chain for
- * ### SVN_ERR_IO_PIPE_WRITE_ERROR. See svn_cmdline_fputs(). */
- if (err->apr_err != SVN_ERR_IO_PIPE_WRITE_ERROR)
- svn_handle_error2(err, stderr, FALSE, "svnadmin: ");
- svn_error_clear(err);
- return EXIT_FAILURE;
+ return EXIT_ERROR(err);
}
return EXIT_SUCCESS;
}
}
-
-/* This implements `svn_opt_subcommand_t'. */
-static svn_error_t *
-subcommand_crashtest(apr_getopt_t *os, void *baton, apr_pool_t *pool)
+int
+main(int argc, const char *argv[])
{
- struct svnadmin_opt_state *opt_state = baton;
- svn_repos_t *repos;
+ apr_pool_t *pool;
+ int exit_code;
- SVN_ERR(open_repos(&repos, opt_state->repository_path, pool));
- SVN_ERR_MALFUNCTION();
+ /* Initialize the app. */
+ if (svn_cmdline_init("svnadmin", stderr) != EXIT_SUCCESS)
+ return EXIT_FAILURE;
- /* merely silence a compiler warning (this will never be executed) */
- return SVN_NO_ERROR;
+ /* Create our top-level pool. Use a separate mutexless allocator,
+ * given this application is single threaded.
+ */
+ pool = apr_allocator_owner_get(svn_pool_create_allocator(FALSE));
+
+ exit_code = sub_main(argc, argv, pool);
+
+ svn_pool_destroy(pool);
+ return exit_code;
}
diff --git a/subversion/svndumpfilter/main.c b/subversion/svndumpfilter/svndumpfilter.c
index f538ab9..0e5bbc6 100644
--- a/subversion/svndumpfilter/main.c
+++ b/subversion/svndumpfilter/svndumpfilter.c
@@ -1,5 +1,5 @@
/*
- * main.c: Subversion dump stream filtering tool.
+ * svndumpfilter.c: Subversion dump stream filtering tool main file.
*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
@@ -44,8 +44,15 @@
#include "svn_version.h"
#include "private/svn_mergeinfo_private.h"
+#include "private/svn_cmdline_private.h"
+#include "private/svn_subr_private.h"
+
+#ifdef _WIN32
+typedef apr_status_t (__stdcall *open_fn_t)(apr_file_t **, apr_pool_t *);
+#else
+typedef apr_status_t (*open_fn_t)(apr_file_t **, apr_pool_t *);
+#endif
-
/*** Code. ***/
/* Helper to open stdio streams */
@@ -62,8 +69,7 @@
*/
static svn_error_t *
create_stdio_stream(svn_stream_t **stream,
- APR_DECLARE(apr_status_t) open_fn(apr_file_t **,
- apr_pool_t *),
+ open_fn_t open_fn,
apr_pool_t *pool)
{
apr_file_t *stdio_file;
@@ -79,7 +85,7 @@ create_stdio_stream(svn_stream_t **stream,
/* Writes a property in dumpfile format to given stringbuf. */
static void
-write_prop_to_stringbuf(svn_stringbuf_t **strbuf,
+write_prop_to_stringbuf(svn_stringbuf_t *strbuf,
const char *name,
const svn_string_t *value)
{
@@ -89,28 +95,53 @@ write_prop_to_stringbuf(svn_stringbuf_t **strbuf,
/* Output name length, then name. */
namelen = strlen(name);
- svn_stringbuf_appendbytes(*strbuf, "K ", 2);
+ svn_stringbuf_appendbytes(strbuf, "K ", 2);
bytes_used = apr_snprintf(buf, sizeof(buf), "%" APR_SIZE_T_FMT, namelen);
- svn_stringbuf_appendbytes(*strbuf, buf, bytes_used);
- svn_stringbuf_appendbyte(*strbuf, '\n');
+ svn_stringbuf_appendbytes(strbuf, buf, bytes_used);
+ svn_stringbuf_appendbyte(strbuf, '\n');
- svn_stringbuf_appendbytes(*strbuf, name, namelen);
- svn_stringbuf_appendbyte(*strbuf, '\n');
+ svn_stringbuf_appendbytes(strbuf, name, namelen);
+ svn_stringbuf_appendbyte(strbuf, '\n');
/* Output value length, then value. */
- svn_stringbuf_appendbytes(*strbuf, "V ", 2);
+ svn_stringbuf_appendbytes(strbuf, "V ", 2);
bytes_used = apr_snprintf(buf, sizeof(buf), "%" APR_SIZE_T_FMT, value->len);
+ svn_stringbuf_appendbytes(strbuf, buf, bytes_used);
+ svn_stringbuf_appendbyte(strbuf, '\n');
+
+ svn_stringbuf_appendbytes(strbuf, value->data, value->len);
+ svn_stringbuf_appendbyte(strbuf, '\n');
+}
+
+
+/* Writes a property deletion in dumpfile format to given stringbuf. */
+static void
+write_propdel_to_stringbuf(svn_stringbuf_t **strbuf,
+ const char *name)
+{
+ int bytes_used;
+ size_t namelen;
+ char buf[SVN_KEYLINE_MAXLEN];
+
+ /* Output name length, then name. */
+ namelen = strlen(name);
+ svn_stringbuf_appendbytes(*strbuf, "D ", 2);
+
+ bytes_used = apr_snprintf(buf, sizeof(buf), "%" APR_SIZE_T_FMT, namelen);
svn_stringbuf_appendbytes(*strbuf, buf, bytes_used);
svn_stringbuf_appendbyte(*strbuf, '\n');
- svn_stringbuf_appendbytes(*strbuf, value->data, value->len);
+ svn_stringbuf_appendbytes(*strbuf, name, namelen);
svn_stringbuf_appendbyte(*strbuf, '\n');
}
-/* Prefix matching function to compare node-path with set of prefixes. */
+/* Compare the node-path PATH with the (const char *) prefixes in PFXLIST.
+ * Return TRUE if any prefix is a prefix of PATH (matching whole path
+ * components); FALSE otherwise.
+ * PATH starts with a '/', as do the (const char *) paths in PREFIXES. */
static svn_boolean_t
ary_prefix_match(const apr_array_header_t *pfxlist, const char *path)
{
@@ -125,7 +156,7 @@ ary_prefix_match(const apr_array_header_t *pfxlist, const char *path)
if (path_len < pfx_len)
continue;
if (strncmp(path, pfx, pfx_len) == 0
- && (path[pfx_len] == '\0' || path[pfx_len] == '/'))
+ && (pfx_len == 1 || path[pfx_len] == '\0' || path[pfx_len] == '/'))
return TRUE;
}
@@ -134,7 +165,8 @@ ary_prefix_match(const apr_array_header_t *pfxlist, const char *path)
/* Check whether we need to skip this PATH based on its presence in
- the PREFIXES list, and the DO_EXCLUDE option. */
+ the PREFIXES list, and the DO_EXCLUDE option.
+ PATH starts with a '/', as do the (const char *) paths in PREFIXES. */
static APR_INLINE svn_boolean_t
skip_path(const char *path, const apr_array_header_t *prefixes,
svn_boolean_t do_exclude, svn_boolean_t glob)
@@ -180,9 +212,11 @@ struct parse_baton_t
svn_boolean_t quiet;
svn_boolean_t glob;
svn_boolean_t drop_empty_revs;
+ svn_boolean_t drop_all_empty_revs;
svn_boolean_t do_renumber_revs;
svn_boolean_t preserve_revprops;
svn_boolean_t skip_missing_merge_sources;
+ svn_boolean_t allow_deltas;
apr_array_header_t *prefixes;
/* Input and output streams. */
@@ -246,12 +280,36 @@ struct node_baton_t
/* Pointers to dumpfile data. */
svn_stringbuf_t *header;
svn_stringbuf_t *props;
+
+ /* Expect deltas? */
+ svn_boolean_t has_prop_delta;
+ svn_boolean_t has_text_delta;
+
+ /* We might need the node path in a parse error message. */
+ char *node_path;
};
/* Filtering vtable members */
+/* File-format stamp. */
+static svn_error_t *
+magic_header_record(int version, void *parse_baton, apr_pool_t *pool)
+{
+ struct parse_baton_t *pb = parse_baton;
+
+ if (version >= SVN_REPOS_DUMPFILE_FORMAT_VERSION_DELTAS)
+ pb->allow_deltas = TRUE;
+
+ SVN_ERR(svn_stream_printf(pb->out_stream, pool,
+ SVN_REPOS_DUMPFILE_MAGIC_HEADER ": %d\n\n",
+ version));
+
+ return SVN_NO_ERROR;
+}
+
+
/* New revision: set up revision_baton, decide if we skip it. */
static svn_error_t *
new_revision_record(void **revision_baton,
@@ -271,13 +329,12 @@ new_revision_record(void **revision_baton,
rb->has_props = FALSE;
rb->had_dropped_nodes = FALSE;
rb->writing_begun = FALSE;
- rb->header = svn_stringbuf_create("", pool);
+ rb->header = svn_stringbuf_create_empty(pool);
rb->props = apr_hash_make(pool);
header_stream = svn_stream_from_stringbuf(rb->header, pool);
- rev_orig = apr_hash_get(headers, SVN_REPOS_DUMPFILE_REVISION_NUMBER,
- APR_HASH_KEY_STRING);
+ rev_orig = svn_hash_gets(headers, SVN_REPOS_DUMPFILE_REVISION_NUMBER);
rb->rev_orig = SVN_STR_TO_REV(rev_orig);
if (rb->pb->do_renumber_revs)
@@ -321,8 +378,9 @@ output_revision(struct revision_baton_t *rb)
int bytes_used;
char buf[SVN_KEYLINE_MAXLEN];
apr_hash_index_t *hi;
+ svn_boolean_t write_out_rev = FALSE;
apr_pool_t *hash_pool = apr_hash_pool_get(rb->props);
- svn_stringbuf_t *props = svn_stringbuf_create("", hash_pool);
+ svn_stringbuf_t *props = svn_stringbuf_create_empty(hash_pool);
apr_pool_t *subpool = svn_pool_create(hash_pool);
rb->writing_begun = TRUE;
@@ -336,17 +394,17 @@ output_revision(struct revision_baton_t *rb)
if ((! rb->pb->preserve_revprops)
&& (! rb->has_nodes)
&& rb->had_dropped_nodes
- && (! rb->pb->drop_empty_revs))
+ && (! rb->pb->drop_empty_revs)
+ && (! rb->pb->drop_all_empty_revs))
{
apr_hash_t *old_props = rb->props;
rb->has_props = TRUE;
rb->props = apr_hash_make(hash_pool);
- apr_hash_set(rb->props, SVN_PROP_REVISION_DATE, APR_HASH_KEY_STRING,
- apr_hash_get(old_props, SVN_PROP_REVISION_DATE,
- APR_HASH_KEY_STRING));
- apr_hash_set(rb->props, SVN_PROP_REVISION_LOG, APR_HASH_KEY_STRING,
- svn_string_create(_("This is an empty revision for "
- "padding."), hash_pool));
+ svn_hash_sets(rb->props, SVN_PROP_REVISION_DATE,
+ svn_hash_gets(old_props, SVN_PROP_REVISION_DATE));
+ svn_hash_sets(rb->props, SVN_PROP_REVISION_LOG,
+ svn_string_create(_("This is an empty revision for "
+ "padding."), hash_pool));
}
/* Now, "rasterize" the props to a string, and append the property
@@ -360,7 +418,7 @@ output_revision(struct revision_baton_t *rb)
const char *pname = svn__apr_hash_index_key(hi);
const svn_string_t *pval = svn__apr_hash_index_val(hi);
- write_prop_to_stringbuf(&props, pname, pval);
+ write_prop_to_stringbuf(props, pname, pval);
}
svn_stringbuf_appendcstr(props, "PROPS-END\n");
svn_stringbuf_appendcstr(rb->header,
@@ -384,14 +442,21 @@ output_revision(struct revision_baton_t *rb)
/* write out the revision */
/* Revision is written out in the following cases:
- 1. No --drop-empty-revs has been supplied.
+ 1. If the revision has nodes or
+ it is revision 0 (Special case: To preserve the props on r0).
2. --drop-empty-revs has been supplied,
- but revision has not all nodes dropped
- 3. Revision had no nodes to begin with.
+ but revision has not all nodes dropped.
+ 3. If no --drop-empty-revs or --drop-all-empty-revs have been supplied,
+ write out the revision which has no nodes to begin with.
*/
- if (rb->has_nodes
- || (! rb->pb->drop_empty_revs)
- || (! rb->had_dropped_nodes))
+ if (rb->has_nodes || (rb->rev_orig == 0))
+ write_out_rev = TRUE;
+ else if (rb->pb->drop_empty_revs)
+ write_out_rev = ! rb->had_dropped_nodes;
+ else if (! rb->pb->drop_all_empty_revs)
+ write_out_rev = TRUE;
+
+ if (write_out_rev)
{
/* This revision is a keeper. */
SVN_ERR(svn_stream_write(rb->pb->out_stream,
@@ -481,11 +546,8 @@ new_node_record(void **node_baton,
nb->rb = rev_baton;
pb = nb->rb->pb;
- node_path = apr_hash_get(headers, SVN_REPOS_DUMPFILE_NODE_PATH,
- APR_HASH_KEY_STRING);
- copyfrom_path = apr_hash_get(headers,
- SVN_REPOS_DUMPFILE_NODE_COPYFROM_PATH,
- APR_HASH_KEY_STRING);
+ node_path = svn_hash_gets(headers, SVN_REPOS_DUMPFILE_NODE_PATH);
+ copyfrom_path = svn_hash_gets(headers, SVN_REPOS_DUMPFILE_NODE_COPYFROM_PATH);
/* Ensure that paths start with a leading '/'. */
if (node_path[0] != '/')
@@ -500,16 +562,18 @@ new_node_record(void **node_baton,
rest. */
if (nb->do_skip)
{
- apr_hash_set(pb->dropped_nodes,
- apr_pstrdup(apr_hash_pool_get(pb->dropped_nodes),
- node_path),
- APR_HASH_KEY_STRING, (void *)1);
+ svn_hash_sets(pb->dropped_nodes,
+ apr_pstrdup(apr_hash_pool_get(pb->dropped_nodes),
+ node_path),
+ (void *)1);
nb->rb->had_dropped_nodes = TRUE;
}
else
{
- tcl = apr_hash_get(headers, SVN_REPOS_DUMPFILE_TEXT_CONTENT_LENGTH,
- APR_HASH_KEY_STRING);
+ const char *kind;
+ const char *action;
+
+ tcl = svn_hash_gets(headers, SVN_REPOS_DUMPFILE_TEXT_CONTENT_LENGTH);
/* Test if this node was copied from dropped source. */
if (copyfrom_path &&
@@ -523,18 +587,16 @@ new_node_record(void **node_baton,
dumpfile should contain the new contents of the file. In this
scenario, we'll just do an add without history using the new
contents. */
- const char *kind;
- kind = apr_hash_get(headers, SVN_REPOS_DUMPFILE_NODE_KIND,
- APR_HASH_KEY_STRING);
+ kind = svn_hash_gets(headers, SVN_REPOS_DUMPFILE_NODE_KIND);
/* If there is a Text-content-length header, and the kind is
"file", we just fallback to an add without history. */
if (tcl && (strcmp(kind, "file") == 0))
{
- apr_hash_set(headers, SVN_REPOS_DUMPFILE_NODE_COPYFROM_PATH,
- APR_HASH_KEY_STRING, NULL);
- apr_hash_set(headers, SVN_REPOS_DUMPFILE_NODE_COPYFROM_REV,
- APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(headers, SVN_REPOS_DUMPFILE_NODE_COPYFROM_PATH,
+ NULL);
+ svn_hash_sets(headers, SVN_REPOS_DUMPFILE_NODE_COPYFROM_REV,
+ NULL);
copyfrom_path = NULL;
}
/* Else, this is either a directory or a file whose contents we
@@ -549,10 +611,13 @@ new_node_record(void **node_baton,
nb->has_props = FALSE;
nb->has_text = FALSE;
+ nb->has_prop_delta = FALSE;
+ nb->has_text_delta = FALSE;
nb->writing_begun = FALSE;
nb->tcl = tcl ? svn__atoui64(tcl) : 0;
- nb->header = svn_stringbuf_create("", pool);
- nb->props = svn_stringbuf_create("", pool);
+ nb->header = svn_stringbuf_create_empty(pool);
+ nb->props = svn_stringbuf_create_empty(pool);
+ nb->node_path = apr_pstrdup(pool, node_path);
/* Now we know for sure that we have a node that will not be
skipped, flush the revision if it has not already been done. */
@@ -560,14 +625,49 @@ new_node_record(void **node_baton,
if (! nb->rb->writing_begun)
SVN_ERR(output_revision(nb->rb));
+ /* A node record is required to begin with 'Node-path', skip the
+ leading '/' to match the form used by 'svnadmin dump'. */
+ SVN_ERR(svn_stream_printf(nb->rb->pb->out_stream,
+ pool, "%s: %s\n",
+ SVN_REPOS_DUMPFILE_NODE_PATH, node_path + 1));
+
+ /* Node-kind is next and is optional. */
+ kind = svn_hash_gets(headers, SVN_REPOS_DUMPFILE_NODE_KIND);
+ if (kind)
+ SVN_ERR(svn_stream_printf(nb->rb->pb->out_stream,
+ pool, "%s: %s\n",
+ SVN_REPOS_DUMPFILE_NODE_KIND, kind));
+
+ /* Node-action is next and required. */
+ action = svn_hash_gets(headers, SVN_REPOS_DUMPFILE_NODE_ACTION);
+ if (action)
+ SVN_ERR(svn_stream_printf(nb->rb->pb->out_stream,
+ pool, "%s: %s\n",
+ SVN_REPOS_DUMPFILE_NODE_ACTION, action));
+ else
+ return svn_error_createf(SVN_ERR_INCOMPLETE_DATA, 0,
+ _("Missing Node-action for path '%s'"),
+ node_path);
+
for (hi = apr_hash_first(pool, headers); hi; hi = apr_hash_next(hi))
{
const char *key = svn__apr_hash_index_key(hi);
const char *val = svn__apr_hash_index_val(hi);
+ if ((!strcmp(key, SVN_REPOS_DUMPFILE_PROP_DELTA))
+ && (!strcmp(val, "true")))
+ nb->has_prop_delta = TRUE;
+
+ if ((!strcmp(key, SVN_REPOS_DUMPFILE_TEXT_DELTA))
+ && (!strcmp(val, "true")))
+ nb->has_text_delta = TRUE;
+
if ((!strcmp(key, SVN_REPOS_DUMPFILE_CONTENT_LENGTH))
|| (!strcmp(key, SVN_REPOS_DUMPFILE_PROP_CONTENT_LENGTH))
- || (!strcmp(key, SVN_REPOS_DUMPFILE_TEXT_CONTENT_LENGTH)))
+ || (!strcmp(key, SVN_REPOS_DUMPFILE_TEXT_CONTENT_LENGTH))
+ || (!strcmp(key, SVN_REPOS_DUMPFILE_NODE_PATH))
+ || (!strcmp(key, SVN_REPOS_DUMPFILE_NODE_KIND))
+ || (!strcmp(key, SVN_REPOS_DUMPFILE_NODE_ACTION)))
continue;
/* Rewrite Node-Copyfrom-Rev if we are renumbering revisions.
@@ -691,8 +791,7 @@ adjust_mergeinfo(svn_string_t **final_val, const svn_string_t *initial_val,
start of all history. E.g. if we dump -r100:400 then dumpfilter the
result with --skip-missing-merge-sources, any mergeinfo with revision
100 implies a change of -r99:100, but r99 is part of the history we
- want filtered. This is analogous to how r1 is always meaningless as
- a merge source revision.
+ want filtered.
If the oldest rev is r0 then there is nothing to filter. */
if (rb->pb->skip_missing_merge_sources && rb->pb->oldest_original_rev > 0)
@@ -704,7 +803,7 @@ adjust_mergeinfo(svn_string_t **final_val, const svn_string_t *initial_val,
for (hi = apr_hash_first(subpool, mergeinfo); hi; hi = apr_hash_next(hi))
{
const char *merge_source = svn__apr_hash_index_key(hi);
- apr_array_header_t *rangelist = svn__apr_hash_index_val(hi);
+ svn_rangelist_t *rangelist = svn__apr_hash_index_val(hi);
struct parse_baton_t *pb = rb->pb;
/* Determine whether the merge_source is a part of the prefix. */
@@ -749,11 +848,10 @@ adjust_mergeinfo(svn_string_t **final_val, const svn_string_t *initial_val,
range->end = revmap_end->rev;
}
}
- apr_hash_set(final_mergeinfo, merge_source,
- APR_HASH_KEY_STRING, rangelist);
+ svn_hash_sets(final_mergeinfo, merge_source, rangelist);
}
- SVN_ERR(svn_mergeinfo_sort(final_mergeinfo, subpool));
+ SVN_ERR(svn_mergeinfo__canonicalize_ranges(final_mergeinfo, subpool));
SVN_ERR(svn_mergeinfo_to_string(final_val, final_mergeinfo, pool));
svn_pool_destroy(subpool);
@@ -770,8 +868,9 @@ set_revision_property(void *revision_baton,
apr_pool_t *hash_pool = apr_hash_pool_get(rb->props);
rb->has_props = TRUE;
- apr_hash_set(rb->props, apr_pstrdup(hash_pool, name),
- APR_HASH_KEY_STRING, svn_string_dup(value, hash_pool));
+ svn_hash_sets(rb->props,
+ apr_pstrdup(hash_pool, name),
+ svn_string_dup(value, hash_pool));
return SVN_NO_ERROR;
}
@@ -787,10 +886,12 @@ set_node_property(void *node_baton,
if (nb->do_skip)
return SVN_NO_ERROR;
- if (!nb->has_props)
- return svn_error_create(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
- _("Delta property block detected - "
- "not supported by svndumpfilter"));
+ if (! (nb->has_props || nb->has_prop_delta))
+ return svn_error_createf(SVN_ERR_STREAM_MALFORMED_DATA, NULL,
+ _("Delta property block detected, but deltas "
+ "are not enabled for node '%s' in original "
+ "revision %ld"),
+ nb->node_path, rb->rev_orig);
if (strcmp(name, SVN_PROP_MERGEINFO) == 0)
{
@@ -800,7 +901,31 @@ set_node_property(void *node_baton,
value = filtered_mergeinfo;
}
- write_prop_to_stringbuf(&(nb->props), name, value);
+ nb->has_props = TRUE;
+ write_prop_to_stringbuf(nb->props, name, value);
+
+ return SVN_NO_ERROR;
+}
+
+
+static svn_error_t *
+delete_node_property(void *node_baton, const char *name)
+{
+ struct node_baton_t *nb = node_baton;
+ struct revision_baton_t *rb = nb->rb;
+
+ if (nb->do_skip)
+ return SVN_NO_ERROR;
+
+ if (!nb->has_prop_delta)
+ return svn_error_createf(SVN_ERR_STREAM_MALFORMED_DATA, NULL,
+ _("Delta property block detected, but deltas "
+ "are not enabled for node '%s' in original "
+ "revision %ld"),
+ nb->node_path, rb->rev_orig);
+
+ nb->has_props = TRUE;
+ write_propdel_to_stringbuf(&(nb->props), name);
return SVN_NO_ERROR;
}
@@ -874,14 +999,15 @@ close_revision(void *revision_baton)
/* Filtering vtable */
-svn_repos_parse_fns2_t filtering_vtable =
+svn_repos_parse_fns3_t filtering_vtable =
{
- new_revision_record,
+ magic_header_record,
uuid_record,
+ new_revision_record,
new_node_record,
set_revision_property,
set_node_property,
- NULL,
+ delete_node_property,
remove_node_props,
set_fulltext,
NULL,
@@ -901,6 +1027,7 @@ static svn_opt_subcommand_t
enum
{
svndumpfilter__drop_empty_revs = SVN_OPT_FIRST_LONGOPT_ID,
+ svndumpfilter__drop_all_empty_revs,
svndumpfilter__renumber_revs,
svndumpfilter__preserve_revprops,
svndumpfilter__skip_missing_merge_sources,
@@ -930,6 +1057,9 @@ static const apr_getopt_option_t options_table[] =
N_("Treat the path prefixes as file glob patterns.") },
{"drop-empty-revs", svndumpfilter__drop_empty_revs, 0,
N_("Remove revisions emptied by filtering.")},
+ {"drop-all-empty-revs", svndumpfilter__drop_all_empty_revs, 0,
+ N_("Remove all empty revisions found in dumpstream\n"
+ " except revision 0.")},
{"renumber-revs", svndumpfilter__renumber_revs, 0,
N_("Renumber revisions left after filtering.") },
{"skip-missing-merge-sources",
@@ -952,7 +1082,8 @@ static const svn_opt_subcommand_desc2_t cmd_table[] =
{"exclude", subcommand_exclude, {0},
N_("Filter out nodes with given prefixes from dumpstream.\n"
"usage: svndumpfilter exclude PATH_PREFIX...\n"),
- {svndumpfilter__drop_empty_revs, svndumpfilter__renumber_revs,
+ {svndumpfilter__drop_empty_revs, svndumpfilter__drop_all_empty_revs,
+ svndumpfilter__renumber_revs,
svndumpfilter__skip_missing_merge_sources, svndumpfilter__targets,
svndumpfilter__preserve_revprops, svndumpfilter__quiet,
svndumpfilter__glob} },
@@ -960,7 +1091,8 @@ static const svn_opt_subcommand_desc2_t cmd_table[] =
{"include", subcommand_include, {0},
N_("Filter out nodes without given prefixes from dumpstream.\n"
"usage: svndumpfilter include PATH_PREFIX...\n"),
- {svndumpfilter__drop_empty_revs, svndumpfilter__renumber_revs,
+ {svndumpfilter__drop_empty_revs, svndumpfilter__drop_all_empty_revs,
+ svndumpfilter__renumber_revs,
svndumpfilter__skip_missing_merge_sources, svndumpfilter__targets,
svndumpfilter__preserve_revprops, svndumpfilter__quiet,
svndumpfilter__glob} },
@@ -983,6 +1115,7 @@ struct svndumpfilter_opt_state
svn_boolean_t glob; /* --pattern */
svn_boolean_t version; /* --version */
svn_boolean_t drop_empty_revs; /* --drop-empty-revs */
+ svn_boolean_t drop_all_empty_revs; /* --drop-all-empty-revs */
svn_boolean_t help; /* --help or -? */
svn_boolean_t renumber_revs; /* --renumber-revs */
svn_boolean_t preserve_revprops; /* --preserve-revprops */
@@ -1014,9 +1147,11 @@ parse_baton_initialize(struct parse_baton_t **pb,
/* Ignore --renumber-revs if there can't possibly be
anything to renumber. */
baton->do_renumber_revs =
- (opt_state->renumber_revs && opt_state->drop_empty_revs);
+ (opt_state->renumber_revs && (opt_state->drop_empty_revs
+ || opt_state->drop_all_empty_revs));
baton->drop_empty_revs = opt_state->drop_empty_revs;
+ baton->drop_all_empty_revs = opt_state->drop_all_empty_revs;
baton->preserve_revprops = opt_state->preserve_revprops;
baton->quiet = opt_state->quiet;
baton->glob = opt_state->glob;
@@ -1027,17 +1162,7 @@ parse_baton_initialize(struct parse_baton_t **pb,
baton->renumber_history = apr_hash_make(pool);
baton->last_live_revision = SVN_INVALID_REVNUM;
baton->oldest_original_rev = SVN_INVALID_REVNUM;
-
- /* This is non-ideal: We should pass through the version of the
- * input dumpstream. However, our API currently doesn't allow that.
- * Hardcoding version 2 is acceptable because:
- * - We currently do not accept version 3 or greater.
- * - Dumpstream version 1 is so ancient as to be ignorable
- * (0.17.x and earlier)
- */
- SVN_ERR(svn_stream_printf(baton->out_stream, pool,
- SVN_REPOS_DUMPFILE_MAGIC_HEADER ": %d\n\n",
- 2));
+ baton->allow_deltas = FALSE;
*pb = baton;
return SVN_NO_ERROR;
@@ -1056,11 +1181,12 @@ subcommand_help(apr_getopt_t *os, void *baton, apr_pool_t *pool)
"\n"
"Available subcommands:\n");
- SVN_ERR(svn_opt_print_help3(os, "svndumpfilter",
+ SVN_ERR(svn_opt_print_help4(os, "svndumpfilter",
opt_state ? opt_state->version : FALSE,
- opt_state ? opt_state->quiet : FALSE, NULL,
- header, cmd_table, options_table, NULL,
- NULL, pool));
+ opt_state ? opt_state->quiet : FALSE,
+ /*###opt_state ? opt_state->verbose :*/ FALSE,
+ NULL, header, cmd_table, options_table,
+ NULL, NULL, pool));
return SVN_NO_ERROR;
}
@@ -1077,9 +1203,9 @@ check_lib_versions(void)
{ "svn_delta", svn_delta_version },
{ NULL, NULL }
};
-
SVN_VERSION_DEFINE(my_version);
- return svn_ver_check_list(&my_version, checklist);
+
+ return svn_ver_check_list2(&my_version, checklist, svn_ver_equal);
}
@@ -1104,27 +1230,31 @@ do_filter(apr_getopt_t *os,
{
SVN_ERR(svn_cmdline_fprintf(stderr, subpool,
do_exclude
- ? opt_state->drop_empty_revs
- ? _("Excluding (and dropping empty "
- "revisions for) prefix patterns:\n")
- : _("Excluding prefix patterns:\n")
- : opt_state->drop_empty_revs
- ? _("Including (and dropping empty "
- "revisions for) prefix patterns:\n")
- : _("Including prefix patterns:\n")));
+ ? (opt_state->drop_empty_revs
+ || opt_state->drop_all_empty_revs)
+ ? _("Excluding (and dropping empty "
+ "revisions for) prefix patterns:\n")
+ : _("Excluding prefix patterns:\n")
+ : (opt_state->drop_empty_revs
+ || opt_state->drop_all_empty_revs)
+ ? _("Including (and dropping empty "
+ "revisions for) prefix patterns:\n")
+ : _("Including prefix patterns:\n")));
}
else
{
SVN_ERR(svn_cmdline_fprintf(stderr, subpool,
do_exclude
- ? opt_state->drop_empty_revs
- ? _("Excluding (and dropping empty "
- "revisions for) prefixes:\n")
- : _("Excluding prefixes:\n")
- : opt_state->drop_empty_revs
- ? _("Including (and dropping empty "
- "revisions for) prefixes:\n")
- : _("Including prefixes:\n")));
+ ? (opt_state->drop_empty_revs
+ || opt_state->drop_all_empty_revs)
+ ? _("Excluding (and dropping empty "
+ "revisions for) prefixes:\n")
+ : _("Excluding prefixes:\n")
+ : (opt_state->drop_empty_revs
+ || opt_state->drop_all_empty_revs)
+ ? _("Including (and dropping empty "
+ "revisions for) prefixes:\n")
+ : _("Including prefixes:\n")));
}
for (i = 0; i < opt_state->prefixes->nelts; i++)
@@ -1140,8 +1270,8 @@ do_filter(apr_getopt_t *os,
}
SVN_ERR(parse_baton_initialize(&pb, opt_state, do_exclude, pool));
- SVN_ERR(svn_repos_parse_dumpstream2(pb->in_stream, &filtering_vtable, pb,
- NULL, NULL, pool));
+ SVN_ERR(svn_repos_parse_dumpstream3(pb->in_stream, &filtering_vtable, pb,
+ TRUE, NULL, NULL, pool));
/* The rest of this is just reporting. If we aren't reporting, get
outta here. */
@@ -1258,7 +1388,6 @@ main(int argc, const char *argv[])
{
svn_error_t *err;
apr_status_t apr_err;
- apr_allocator_t *allocator;
apr_pool_t *pool;
const svn_opt_subcommand_desc2_t *subcommand = NULL;
@@ -1276,13 +1405,7 @@ main(int argc, const char *argv[])
/* Create our top-level pool. Use a separate mutexless allocator,
* given this application is single threaded.
*/
- if (apr_allocator_create(&allocator))
- return EXIT_FAILURE;
-
- apr_allocator_max_free_set(allocator, SVN_ALLOCATOR_RECOMMENDED_MAX_FREE);
-
- pool = svn_pool_create_ex(NULL, allocator);
- apr_allocator_owner_set(allocator, pool);
+ pool = apr_allocator_owner_get(svn_pool_create_allocator(FALSE));
/* Check library versions */
err = check_lib_versions();
@@ -1350,6 +1473,9 @@ main(int argc, const char *argv[])
case svndumpfilter__drop_empty_revs:
opt_state.drop_empty_revs = TRUE;
break;
+ case svndumpfilter__drop_all_empty_revs:
+ opt_state.drop_all_empty_revs = TRUE;
+ break;
case svndumpfilter__renumber_revs:
opt_state.renumber_revs = TRUE;
break;
@@ -1371,6 +1497,16 @@ main(int argc, const char *argv[])
} /* close `switch' */
} /* close `while' */
+ /* Disallow simultaneous use of both --drop-empty-revs and
+ --drop-all-empty-revs. */
+ if (opt_state.drop_empty_revs && opt_state.drop_all_empty_revs)
+ {
+ err = svn_error_create(SVN_ERR_CL_MUTUALLY_EXCLUSIVE_ARGS, NULL,
+ _("--drop-empty-revs cannot be used with "
+ "--drop-all-empty-revs"));
+ return svn_cmdline_handle_exit_error(err, pool, "svndumpfilter: ");
+ }
+
/* If the user asked for help, then the rest of the arguments are
the names of subcommands to get help on (if any), or else they're
just typos/mistakes. Whatever the case, the subcommand to
@@ -1417,9 +1553,10 @@ main(int argc, const char *argv[])
return svn_cmdline_handle_exit_error(err, pool,
"svndumpfilter: ");
- svn_error_clear(svn_cmdline_fprintf(stderr, pool,
- _("Unknown command: '%s'\n"),
- first_arg_utf8));
+ svn_error_clear(
+ svn_cmdline_fprintf(stderr, pool,
+ _("Unknown subcommand: '%s'\n"),
+ first_arg_utf8));
SVN_INT_ERR(subcommand_help(NULL, NULL, pool));
svn_pool_destroy(pool);
return EXIT_FAILURE;
@@ -1453,6 +1590,8 @@ main(int argc, const char *argv[])
{
svn_stringbuf_t *buffer, *buffer_utf8;
const char *utf8_targets_file;
+ apr_array_header_t *targets = apr_array_make(pool, 0,
+ sizeof(const char *));
/* We need to convert to UTF-8 now, even before we divide
the targets into an array, because otherwise we wouldn't
@@ -1465,10 +1604,18 @@ main(int argc, const char *argv[])
pool));
SVN_INT_ERR(svn_utf_stringbuf_to_utf8(&buffer_utf8, buffer, pool));
- opt_state.prefixes = apr_array_append(pool,
- svn_cstring_split(buffer_utf8->data, "\n\r",
- TRUE, pool),
- opt_state.prefixes);
+ targets = apr_array_append(pool,
+ svn_cstring_split(buffer_utf8->data, "\n\r",
+ TRUE, pool),
+ targets);
+
+ for (i = 0; i < targets->nelts; i++)
+ {
+ const char *prefix = APR_ARRAY_IDX(targets, i, const char *);
+ if (prefix[0] != '/')
+ prefix = apr_pstrcat(pool, "/", prefix, (char *)NULL);
+ APR_ARRAY_PUSH(opt_state.prefixes, const char *) = prefix;
+ }
}
if (apr_is_empty_array(opt_state.prefixes))
diff --git a/subversion/svnlook/main.c b/subversion/svnlook/svnlook.c
index 00c3aa4..8162e41 100644
--- a/subversion/svnlook/main.c
+++ b/subversion/svnlook/svnlook.c
@@ -1,5 +1,5 @@
/*
- * main.c: Subversion server inspection tool.
+ * svnlook.c: Subversion server inspection tool main file.
*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
@@ -34,6 +34,7 @@
#define APR_WANT_STRFUNC
#include <apr_want.h>
+#include "svn_hash.h"
#include "svn_cmdline.h"
#include "svn_types.h"
#include "svn_pools.h"
@@ -46,14 +47,18 @@
#include "svn_time.h"
#include "svn_utf.h"
#include "svn_subst.h"
+#include "svn_sorts.h"
#include "svn_opt.h"
#include "svn_props.h"
#include "svn_diff.h"
#include "svn_version.h"
#include "svn_xml.h"
+#include "private/svn_diff_private.h"
#include "private/svn_cmdline_private.h"
#include "private/svn_fspath.h"
+#include "private/svn_io_private.h"
+#include "private/svn_subr_private.h"
#include "svn_private_config.h"
@@ -93,7 +98,11 @@ enum
svnlook__revprop_opt,
svnlook__full_paths,
svnlook__copy_info,
- svnlook__xml_opt
+ svnlook__xml_opt,
+ svnlook__ignore_properties,
+ svnlook__properties_only,
+ svnlook__diff_cmd,
+ svnlook__show_inherited_props
};
/*
@@ -125,6 +134,15 @@ static const apr_getopt_option_t options_table[] =
{"no-diff-deleted", svnlook__no_diff_deleted, 0,
N_("do not print differences for deleted files")},
+ {"diff-cmd", svnlook__diff_cmd, 1,
+ N_("use ARG as diff command")},
+
+ {"ignore-properties", svnlook__ignore_properties, 0,
+ N_("ignore properties during the operation")},
+
+ {"properties-only", svnlook__properties_only, 0,
+ N_("show only properties during the operation")},
+
{"non-recursive", 'N', 0,
N_("operate on single directory only")},
@@ -137,6 +155,9 @@ static const apr_getopt_option_t options_table[] =
{"show-ids", svnlook__show_ids, 0,
N_("show node revision ids for each path")},
+ {"show-inherited-props", svnlook__show_inherited_props, 0,
+ N_("show path's inherited properties")},
+
{"transaction", 't', 1,
N_("specify transaction name ARG")},
@@ -150,37 +171,23 @@ static const apr_getopt_option_t options_table[] =
N_("output in XML")},
{"extensions", 'x', 1,
- N_("Default: '-u'. When Subversion is invoking an\n"
- " "
- " external diff program, ARG is simply passed along\n"
- " "
- " to the program. But when Subversion is using its\n"
- " "
- " default internal diff implementation, or when\n"
- " "
- " Subversion is displaying blame annotations, ARG\n"
- " "
- " could be any of the following:\n"
- " "
- " -u (--unified):\n"
- " "
- " Output 3 lines of unified context.\n"
- " "
- " -b (--ignore-space-change):\n"
- " "
- " Ignore changes in the amount of white space.\n"
- " "
- " -w (--ignore-all-space):\n"
- " "
- " Ignore all white space.\n"
- " "
- " --ignore-eol-style:\n"
- " "
- " Ignore changes in EOL style\n"
- " "
- " -p (--show-c-function):\n"
- " "
- " Show C function name in diff output.")},
+ N_("Specify differencing options for external diff or\n"
+ " "
+ "internal diff. Default: '-u'. Options are\n"
+ " "
+ "separated by spaces. Internal diff takes:\n"
+ " "
+ " -u, --unified: Show 3 lines of unified context\n"
+ " "
+ " -b, --ignore-space-change: Ignore changes in\n"
+ " "
+ " amount of white space\n"
+ " "
+ " -w, --ignore-all-space: Ignore all white space\n"
+ " "
+ " --ignore-eol-style: Ignore changes in EOL style\n"
+ " "
+ " -p, --show-c-function: Show C function name")},
{"quiet", 'q', 0,
N_("no progress (only errors) to stderr")},
@@ -218,7 +225,8 @@ static const svn_opt_subcommand_desc2_t cmd_table[] =
N_("usage: svnlook diff REPOS_PATH\n\n"
"Print GNU-style diffs of changed files and properties.\n"),
{'r', 't', svnlook__no_diff_deleted, svnlook__no_diff_added,
- svnlook__diff_copy_from, 'x'} },
+ svnlook__diff_copy_from, svnlook__diff_cmd, 'x',
+ svnlook__ignore_properties, svnlook__properties_only} },
{"dirs-changed", subcommand_dirschanged, {0},
N_("usage: svnlook dirs-changed REPOS_PATH\n\n"
@@ -265,7 +273,7 @@ static const svn_opt_subcommand_desc2_t cmd_table[] =
" 2. svnlook propget --revprop REPOS_PATH PROPNAME\n\n"
"Print the raw value of a property on a path in the repository.\n"
"With --revprop, print the raw value of a revision property.\n"),
- {'r', 't', svnlook__revprop_opt} },
+ {'r', 't', 'v', svnlook__revprop_opt, svnlook__show_inherited_props} },
{"proplist", subcommand_plist, {"plist", "pl"},
N_("usage: 1. svnlook proplist REPOS_PATH PATH_IN_REPOS\n"
@@ -275,7 +283,8 @@ static const svn_opt_subcommand_desc2_t cmd_table[] =
"List the properties of a path in the repository, or\n"
"with the --revprop option, revision properties.\n"
"With -v, show the property values too.\n"),
- {'r', 't', 'v', svnlook__revprop_opt, svnlook__xml_opt} },
+ {'r', 't', 'v', svnlook__revprop_opt, svnlook__xml_opt,
+ svnlook__show_inherited_props} },
{"tree", subcommand_tree, {0},
N_("usage: svnlook tree REPOS_PATH [PATH_IN_REPOS]\n\n"
@@ -320,6 +329,10 @@ struct svnlook_opt_state
svn_boolean_t xml; /* --xml */
const char *extensions; /* diff extension args (UTF-8!) */
svn_boolean_t quiet; /* --quiet */
+ svn_boolean_t ignore_properties; /* --ignore_properties */
+ svn_boolean_t properties_only; /* --properties-only */
+ const char *diff_cmd; /* --diff-cmd */
+ svn_boolean_t show_inherited_props; /* --show-inherited-props */
};
@@ -339,6 +352,9 @@ typedef struct svnlook_ctxt_t
svn_fs_txn_t *txn;
const char *txn_name /* UTF-8! */;
const apr_array_header_t *diff_options;
+ svn_boolean_t ignore_properties;
+ svn_boolean_t properties_only;
+ const char *diff_cmd;
} svnlook_ctxt_t;
@@ -380,9 +396,9 @@ check_lib_versions(void)
{ "svn_diff", svn_diff_version },
{ NULL, NULL }
};
-
SVN_VERSION_DEFINE(my_version);
- return svn_ver_check_list(&my_version, checklist);
+
+ return svn_ver_check_list2(&my_version, checklist, svn_ver_equal);
}
@@ -445,7 +461,6 @@ generate_delta_tree(svn_repos_node_t **tree,
svn_repos_t *repos,
svn_fs_root_t *root,
svn_revnum_t base_rev,
- svn_boolean_t use_copy_history,
apr_pool_t *pool)
{
svn_fs_root_t *base_root;
@@ -462,7 +477,7 @@ generate_delta_tree(svn_repos_node_t **tree,
base_root, root, pool, edit_pool));
/* Drive our editor. */
- SVN_ERR(svn_repos_replay2(root, "", SVN_INVALID_REVNUM, FALSE,
+ SVN_ERR(svn_repos_replay2(root, "", SVN_INVALID_REVNUM, TRUE,
editor, edit_baton, NULL, NULL, edit_pool));
/* Return the tree we just built. */
@@ -476,16 +491,20 @@ generate_delta_tree(svn_repos_node_t **tree,
/*** Tree Printing Routines ***/
/* Recursively print only directory nodes that either a) have property
- mods, or b) contains files that have changed. */
+ mods, or b) contains files that have changed, or c) has added or deleted
+ children. NODE is the root node of the tree delta, so every node in it
+ is either changed or is a directory with a changed node somewhere in the
+ subtree below it.
+ */
static svn_error_t *
print_dirs_changed_tree(svn_repos_node_t *node,
const char *path /* UTF-8! */,
apr_pool_t *pool)
{
svn_repos_node_t *tmp_node;
- int print_me = 0;
+ svn_boolean_t print_me = FALSE;
const char *full_path;
- apr_pool_t *subpool;
+ apr_pool_t *iterpool;
SVN_ERR(check_cancel(NULL));
@@ -498,33 +517,19 @@ print_dirs_changed_tree(svn_repos_node_t *node,
/* Got prop mods? Excellent. */
if (node->prop_mod)
- print_me = 1;
+ print_me = TRUE;
- if (! print_me)
+ /* Fly through the list of children, checking for modified files. */
+ tmp_node = node->child;
+ while (tmp_node && (! print_me))
{
- /* Fly through the list of children, checking for modified files. */
- tmp_node = node->child;
- if (tmp_node)
+ if ((tmp_node->kind == svn_node_file)
+ || (tmp_node->action == 'A')
+ || (tmp_node->action == 'D'))
{
- if ((tmp_node->kind == svn_node_file)
- || (tmp_node->text_mod)
- || (tmp_node->action == 'A')
- || (tmp_node->action == 'D'))
- {
- print_me = 1;
- }
- while (tmp_node->sibling && (! print_me ))
- {
- tmp_node = tmp_node->sibling;
- if ((tmp_node->kind == svn_node_file)
- || (tmp_node->text_mod)
- || (tmp_node->action == 'A')
- || (tmp_node->action == 'D'))
- {
- print_me = 1;
- }
- }
+ print_me = TRUE;
}
+ tmp_node = tmp_node->sibling;
}
/* Print the node if it qualifies. */
@@ -539,17 +544,15 @@ print_dirs_changed_tree(svn_repos_node_t *node,
return SVN_NO_ERROR;
/* Recursively handle the node's children. */
- subpool = svn_pool_create(pool);
- full_path = svn_dirent_join(path, tmp_node->name, subpool);
- SVN_ERR(print_dirs_changed_tree(tmp_node, full_path, subpool));
- while (tmp_node->sibling)
+ iterpool = svn_pool_create(pool);
+ while (tmp_node)
{
- svn_pool_clear(subpool);
+ svn_pool_clear(iterpool);
+ full_path = svn_dirent_join(path, tmp_node->name, iterpool);
+ SVN_ERR(print_dirs_changed_tree(tmp_node, full_path, iterpool));
tmp_node = tmp_node->sibling;
- full_path = svn_dirent_join(path, tmp_node->name, subpool);
- SVN_ERR(print_dirs_changed_tree(tmp_node, full_path, subpool));
}
- svn_pool_destroy(subpool);
+ svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
@@ -565,8 +568,8 @@ print_changed_tree(svn_repos_node_t *node,
{
const char *full_path;
char status[4] = "_ ";
- int print_me = 1;
- apr_pool_t *subpool;
+ svn_boolean_t print_me = TRUE;
+ apr_pool_t *iterpool;
SVN_ERR(check_cancel(NULL));
@@ -585,14 +588,14 @@ print_changed_tree(svn_repos_node_t *node,
else if (node->action == 'R')
{
if ((! node->text_mod) && (! node->prop_mod))
- print_me = 0;
+ print_me = FALSE;
if (node->text_mod)
status[0] = 'U';
if (node->prop_mod)
status[1] = 'U';
}
else
- print_me = 0;
+ print_me = FALSE;
/* Print this node unless told to skip it. */
if (print_me)
@@ -618,17 +621,15 @@ print_changed_tree(svn_repos_node_t *node,
return SVN_NO_ERROR;
/* Recursively handle the node's children. */
- subpool = svn_pool_create(pool);
- full_path = svn_dirent_join(path, node->name, subpool);
- SVN_ERR(print_changed_tree(node, full_path, copy_info, subpool));
- while (node->sibling)
+ iterpool = svn_pool_create(pool);
+ while (node)
{
- svn_pool_clear(subpool);
+ svn_pool_clear(iterpool);
+ full_path = svn_dirent_join(path, node->name, iterpool);
+ SVN_ERR(print_changed_tree(node, full_path, copy_info, iterpool));
node = node->sibling;
- full_path = svn_dirent_join(path, node->name, subpool);
- SVN_ERR(print_changed_tree(node, full_path, copy_info, subpool));
}
- svn_pool_destroy(subpool);
+ svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
@@ -779,142 +780,42 @@ generate_label(const char **label,
return SVN_NO_ERROR;
}
-/* A helper function used by display_prop_diffs.
- TOKEN is a string holding a property value.
- If TOKEN is empty, or is already terminated by an EOL marker,
- return TOKEN unmodified. Else, return a new string consisting
- of the concatenation of TOKEN and the system's default EOL marker.
- The new string is allocated from POOL.
- If HAD_EOL is not NULL, indicate in *HAD_EOL if the token had a EOL. */
-static const svn_string_t *
-maybe_append_eol(const svn_string_t *token, svn_boolean_t *had_eol,
- apr_pool_t *pool)
-{
- const char *curp;
-
- if (had_eol)
- *had_eol = FALSE;
-
- if (token->len == 0)
- return token;
-
- curp = token->data + token->len - 1;
- if (*curp == '\r')
- {
- if (had_eol)
- *had_eol = TRUE;
- return token;
- }
- else if (*curp != '\n')
- {
- return svn_string_createf(pool, "%s%s", token->data, APR_EOL_STR);
- }
- else
- {
- if (had_eol)
- *had_eol = TRUE;
- return token;
- }
-}
-
-/*
- * Constant diff output separator strings
- */
-static const char equal_string[] =
- "===================================================================";
-static const char under_string[] =
- "___________________________________________________________________";
-
/* Helper function to display differences in properties of a file */
static svn_error_t *
-display_prop_diffs(const apr_array_header_t *prop_diffs,
- apr_hash_t *orig_props,
+display_prop_diffs(svn_stream_t *outstream,
+ const char *encoding,
+ const apr_array_header_t *propchanges,
+ apr_hash_t *original_props,
const char *path,
apr_pool_t *pool)
{
- int i;
-
- SVN_ERR(svn_cmdline_printf(pool, "\nProperty changes on: %s\n%s\n",
- path, under_string));
-
- for (i = 0; i < prop_diffs->nelts; i++)
- {
- const char *header_label;
- const svn_string_t *orig_value;
- const svn_prop_t *pc = &APR_ARRAY_IDX(prop_diffs, i, svn_prop_t);
- SVN_ERR(check_cancel(NULL));
+ SVN_ERR(svn_stream_printf_from_utf8(outstream, encoding, pool,
+ _("%sProperty changes on: %s%s"),
+ APR_EOL_STR,
+ path,
+ APR_EOL_STR));
- if (orig_props)
- orig_value = apr_hash_get(orig_props, pc->name, APR_HASH_KEY_STRING);
- else
- orig_value = NULL;
+ SVN_ERR(svn_stream_printf_from_utf8(outstream, encoding, pool,
+ SVN_DIFF__UNDER_STRING APR_EOL_STR));
- if (! orig_value)
- header_label = "Added";
- else if (! pc->value)
- header_label = "Deleted";
- else
- header_label = "Modified";
- SVN_ERR(svn_cmdline_printf(pool, "%s: %s\n", header_label, pc->name));
+ SVN_ERR(check_cancel(NULL));
- /* Flush stdout before we open a stream to it below. */
- SVN_ERR(svn_cmdline_fflush(stdout));
+ SVN_ERR(svn_diff__display_prop_diffs(
+ outstream, encoding, propchanges, original_props,
+ FALSE /* pretty_print_mergeinfo */, pool));
- {
- svn_stream_t *out;
- svn_diff_t *diff;
- svn_diff_file_options_t options;
- const svn_string_t *tmp;
- const svn_string_t *orig;
- const svn_string_t *val;
- svn_boolean_t val_has_eol;
-
- SVN_ERR(svn_stream_for_stdout(&out, pool));
-
- /* The last character in a property is often not a newline.
- An eol character is appended to prevent the diff API to add a
- ' \ No newline at end of file' line. We add
- ' \ No newline at end of property' manually if needed. */
- tmp = orig_value ? orig_value : svn_string_create("", pool);
- orig = maybe_append_eol(tmp, NULL, pool);
-
- tmp = pc->value ? pc->value :
- svn_string_create("", pool);
- val = maybe_append_eol(tmp, &val_has_eol, pool);
-
- SVN_ERR(svn_diff_mem_string_diff(&diff, orig, val, &options, pool));
-
- /* UNIX patch will try to apply a diff even if the diff header
- * is missing. It tries to be helpful by asking the user for a
- * target filename when it can't determine the target filename
- * from the diff header. But there usually are no files which
- * UNIX patch could apply the property diff to, so we use "##"
- * instead of "@@" as the default hunk delimiter for property diffs.
- * We also supress the diff header. */
- SVN_ERR(svn_diff_mem_string_output_unified2(out, diff, FALSE, "##",
- svn_dirent_local_style(path, pool),
- svn_dirent_local_style(path, pool),
- svn_cmdline_output_encoding(pool),
- orig, val, pool));
- if (!val_has_eol)
- {
- const char *s = "\\ No newline at end of property" APR_EOL_STR;
- apr_size_t len = strlen(s);
- SVN_ERR(svn_stream_write(out, s, &len));
- }
- }
- }
- return svn_cmdline_fflush(stdout);
+ return SVN_NO_ERROR;
}
-
/* Recursively print all nodes in the tree that have been modified
(do not include directories affected only by "bubble-up"). */
static svn_error_t *
-print_diff_tree(svn_fs_root_t *root,
+print_diff_tree(svn_stream_t *out_stream,
+ const char *encoding,
+ svn_fs_root_t *root,
svn_fs_root_t *base_root,
svn_repos_node_t *node,
const char *path /* UTF-8! */,
@@ -937,7 +838,7 @@ print_diff_tree(svn_fs_root_t *root,
if (! node)
return SVN_NO_ERROR;
- header = svn_stringbuf_create("", pool);
+ header = svn_stringbuf_create_empty(pool);
/* Print copyfrom history for the top node of a copied tree. */
if ((SVN_IS_VALID_REVNUM(node->copyfrom_rev))
@@ -1033,61 +934,48 @@ print_diff_tree(svn_fs_root_t *root,
}
}
- if (do_diff)
+ if (do_diff && (! c->properties_only))
{
- svn_stringbuf_appendcstr(header, equal_string);
- svn_stringbuf_appendcstr(header, "\n");
+ svn_stringbuf_appendcstr(header, SVN_DIFF__EQUAL_STRING "\n");
if (binary)
{
svn_stringbuf_appendcstr(header, _("(Binary files differ)\n\n"));
- SVN_ERR(svn_cmdline_printf(pool, "%s", header->data));
+ SVN_ERR(svn_stream_printf_from_utf8(out_stream, encoding, pool,
+ "%s", header->data));
}
else
{
- svn_diff_t *diff;
- svn_diff_file_options_t *opts = svn_diff_file_options_create(pool);
-
- if (c->diff_options)
- SVN_ERR(svn_diff_file_options_parse(opts, c->diff_options, pool));
-
- SVN_ERR(svn_diff_file_diff_2(&diff, orig_path,
- new_path, opts, pool));
-
- if (svn_diff_contains_diffs(diff))
+ if (c->diff_cmd)
{
- svn_stream_t *ostream;
- const char *orig_label, *new_label;
+ apr_file_t *outfile;
+ apr_file_t *errfile;
+ const char *outfilename;
+ const char *errfilename;
+ svn_stream_t *stream;
+ svn_stream_t *err_stream;
+ const char **diff_cmd_argv;
+ int diff_cmd_argc;
+ int exitcode;
+ const char *orig_label;
+ const char *new_label;
+
+ diff_cmd_argv = NULL;
+ diff_cmd_argc = c->diff_options->nelts;
+ if (diff_cmd_argc)
+ {
+ int i;
+ diff_cmd_argv = apr_palloc(pool,
+ diff_cmd_argc * sizeof(char *));
+ for (i = 0; i < diff_cmd_argc; i++)
+ SVN_ERR(svn_utf_cstring_to_utf8(&diff_cmd_argv[i],
+ APR_ARRAY_IDX(c->diff_options, i, const char *),
+ pool));
+ }
/* Print diff header. */
- SVN_ERR(svn_cmdline_printf(pool, "%s", header->data));
-
- /* This fflush() might seem odd, but it was added to deal
- with this bug report:
-
- http://subversion.tigris.org/servlets/ReadMsg?\
- list=dev&msgNo=140782
-
- From: "Steve Hay" <SteveHay{_AT_}planit.com>
- To: <dev@subversion.tigris.org>
- Subject: svnlook diff output in wrong order when redirected
- Date: Fri, 4 Jul 2008 16:34:15 +0100
- Message-ID: <1B32FF956ABF414C9BCE5E487A1497E702014F62@\
- ukmail02.planit.group>
-
- Adding the fflush() fixed the bug (not everyone could
- reproduce it, but those who could confirmed the fix).
- Later in the thread, Daniel Shahaf speculated as to
- why the fix works:
-
- "Because svn_cmdline_printf() uses the standard
- 'FILE *stdout' to write to stdout, while
- svn_stream_for_stdout() uses (through
- apr_file_open_stdout()) Windows API's to get a
- handle for stdout?" */
- SVN_ERR(svn_cmdline_fflush(stdout));
-
- SVN_ERR(svn_stream_for_stdout(&ostream, pool));
+ SVN_ERR(svn_stream_printf_from_utf8(out_stream, encoding, pool,
+ "%s", header->data));
if (orig_empty)
SVN_ERR(generate_label(&orig_label, NULL, path, pool));
@@ -1095,26 +983,102 @@ print_diff_tree(svn_fs_root_t *root,
SVN_ERR(generate_label(&orig_label, base_root,
base_path, pool));
SVN_ERR(generate_label(&new_label, root, path, pool));
- SVN_ERR(svn_diff_file_output_unified3
- (ostream, diff, orig_path, new_path,
- orig_label, new_label,
- svn_cmdline_output_encoding(pool), NULL,
- opts->show_c_function, pool));
- SVN_ERR(svn_stream_close(ostream));
- SVN_ERR(svn_cmdline_printf(pool, "\n"));
+
+ /* We deal in streams, but svn_io_run_diff2() deals in file
+ handles, so we may need to make temporary files and then
+ copy the contents to our stream. */
+ outfile = svn_stream__aprfile(out_stream);
+ if (outfile)
+ outfilename = NULL;
+ else
+ SVN_ERR(svn_io_open_unique_file3(&outfile, &outfilename, NULL,
+ svn_io_file_del_on_pool_cleanup, pool, pool));
+ SVN_ERR(svn_stream_for_stderr(&err_stream, pool));
+ errfile = svn_stream__aprfile(err_stream);
+ if (errfile)
+ errfilename = NULL;
+ else
+ SVN_ERR(svn_io_open_unique_file3(&errfile, &errfilename, NULL,
+ svn_io_file_del_on_pool_cleanup, pool, pool));
+
+ SVN_ERR(svn_io_run_diff2(".",
+ diff_cmd_argv,
+ diff_cmd_argc,
+ orig_label, new_label,
+ orig_path, new_path,
+ &exitcode, outfile, errfile,
+ c->diff_cmd, pool));
+
+ /* Now, open and copy our files to our output streams. */
+ if (outfilename)
+ {
+ SVN_ERR(svn_io_file_close(outfile, pool));
+ SVN_ERR(svn_stream_open_readonly(&stream, outfilename,
+ pool, pool));
+ SVN_ERR(svn_stream_copy3(stream,
+ svn_stream_disown(out_stream, pool),
+ NULL, NULL, pool));
+ }
+ if (errfilename)
+ {
+ SVN_ERR(svn_io_file_close(errfile, pool));
+ SVN_ERR(svn_stream_open_readonly(&stream, errfilename,
+ pool, pool));
+ SVN_ERR(svn_stream_copy3(stream,
+ svn_stream_disown(err_stream, pool),
+ NULL, NULL, pool));
+ }
+
+ SVN_ERR(svn_stream_printf_from_utf8(out_stream, encoding, pool,
+ "\n"));
diff_header_printed = TRUE;
}
- else if (! node->prop_mod &&
- ((! c->no_diff_added && node->action == 'A') ||
- (! c->no_diff_deleted && node->action == 'D')))
+ else
{
- /* There was an empty file added or deleted in this revision.
- * We can't print a diff, but we can at least print
- * a diff header since we know what happened to this file. */
- SVN_ERR(svn_cmdline_printf(pool, "%s", header->data));
+ svn_diff_t *diff;
+ svn_diff_file_options_t *opts = svn_diff_file_options_create(pool);
+
+ if (c->diff_options)
+ SVN_ERR(svn_diff_file_options_parse(opts, c->diff_options, pool));
+
+ SVN_ERR(svn_diff_file_diff_2(&diff, orig_path,
+ new_path, opts, pool));
+
+ if (svn_diff_contains_diffs(diff))
+ {
+ const char *orig_label, *new_label;
+
+ /* Print diff header. */
+ SVN_ERR(svn_stream_printf_from_utf8(out_stream, encoding, pool,
+ "%s", header->data));
+
+ if (orig_empty)
+ SVN_ERR(generate_label(&orig_label, NULL, path, pool));
+ else
+ SVN_ERR(generate_label(&orig_label, base_root,
+ base_path, pool));
+ SVN_ERR(generate_label(&new_label, root, path, pool));
+ SVN_ERR(svn_diff_file_output_unified3
+ (out_stream, diff, orig_path, new_path,
+ orig_label, new_label,
+ svn_cmdline_output_encoding(pool), NULL,
+ opts->show_c_function, pool));
+ SVN_ERR(svn_stream_printf_from_utf8(out_stream, encoding, pool,
+ "\n"));
+ diff_header_printed = TRUE;
+ }
+ else if (! node->prop_mod &&
+ ((! c->no_diff_added && node->action == 'A') ||
+ (! c->no_diff_deleted && node->action == 'D')))
+ {
+ /* There was an empty file added or deleted in this revision.
+ * We can't print a diff, but we can at least print
+ * a diff header since we know what happened to this file. */
+ SVN_ERR(svn_stream_printf_from_utf8(out_stream, encoding, pool,
+ "%s", header->data));
+ }
}
}
- SVN_ERR(svn_cmdline_fflush(stdout));
}
/* Make sure we delete any temporary files. */
@@ -1124,7 +1088,7 @@ print_diff_tree(svn_fs_root_t *root,
SVN_ERR(svn_io_remove_file2(new_path, FALSE, pool));
/*** Now handle property diffs ***/
- if ((node->prop_mod) && (node->action != 'D'))
+ if ((node->prop_mod) && (node->action != 'D') && (! c->ignore_properties))
{
apr_hash_t *local_proptable;
apr_hash_t *base_proptable;
@@ -1154,12 +1118,17 @@ print_diff_tree(svn_fs_root_t *root,
pool));
SVN_ERR(generate_label(&new_label, root, path, pool));
- SVN_ERR(svn_cmdline_printf(pool, "Index: %s\n", path));
- SVN_ERR(svn_cmdline_printf(pool, "%s\n", equal_string));
- SVN_ERR(svn_cmdline_printf(pool, "--- %s\n", orig_label));
- SVN_ERR(svn_cmdline_printf(pool, "+++ %s\n", new_label));
+ SVN_ERR(svn_stream_printf_from_utf8(out_stream, encoding, pool,
+ "Index: %s\n", path));
+ SVN_ERR(svn_stream_printf_from_utf8(out_stream, encoding, pool,
+ SVN_DIFF__EQUAL_STRING "\n"));
+ /* --- <label1>
+ * +++ <label2> */
+ SVN_ERR(svn_diff__unidiff_write_header(
+ out_stream, encoding, orig_label, new_label, pool));
}
- SVN_ERR(display_prop_diffs(props, base_proptable, path, pool));
+ SVN_ERR(display_prop_diffs(out_stream, encoding,
+ props, base_proptable, path, pool));
}
}
@@ -1170,7 +1139,7 @@ print_diff_tree(svn_fs_root_t *root,
/* Recursively handle the node's children. */
subpool = svn_pool_create(pool);
- SVN_ERR(print_diff_tree(root, base_root, node,
+ SVN_ERR(print_diff_tree(out_stream, encoding, root, base_root, node,
svn_dirent_join(path, node->name, subpool),
svn_dirent_join(base_path, node->name, subpool),
c, tmpdir, subpool));
@@ -1178,7 +1147,7 @@ print_diff_tree(svn_fs_root_t *root,
{
svn_pool_clear(subpool);
node = node->sibling;
- SVN_ERR(print_diff_tree(root, base_root, node,
+ SVN_ERR(print_diff_tree(out_stream, encoding, root, base_root, node,
svn_dirent_join(path, node->name, subpool),
svn_dirent_join(base_path, node->name, subpool),
c, tmpdir, subpool));
@@ -1214,7 +1183,6 @@ print_tree(svn_fs_root_t *root,
{
apr_pool_t *subpool;
apr_hash_t *entries;
- apr_hash_index_t *hi;
const char* name;
SVN_ERR(check_cancel(NULL));
@@ -1262,11 +1230,18 @@ print_tree(svn_fs_root_t *root,
/* Recursively handle the node's children. */
if (recurse || (indentation == 0))
{
+ apr_array_header_t *sorted_entries;
+ int i;
+
SVN_ERR(svn_fs_dir_entries(&entries, root, path, pool));
subpool = svn_pool_create(pool);
- for (hi = apr_hash_first(pool, entries); hi; hi = apr_hash_next(hi))
+ sorted_entries = svn_sort__hash(entries,
+ svn_sort_compare_items_lexically, pool);
+ for (i = 0; i < sorted_entries->nelts; i++)
{
- svn_fs_dirent_t *entry = svn__apr_hash_index_val(hi);
+ svn_sort__item_t item = APR_ARRAY_IDX(sorted_entries, i,
+ svn_sort__item_t);
+ svn_fs_dirent_t *entry = item.value;
svn_pool_clear(subpool);
SVN_ERR(print_tree(root,
@@ -1418,8 +1393,7 @@ do_dirs_changed(svnlook_ctxt_t *c, apr_pool_t *pool)
if (base_rev_id == SVN_INVALID_REVNUM)
return SVN_NO_ERROR;
- SVN_ERR(generate_delta_tree(&tree, c->repos, root, base_rev_id,
- TRUE, pool));
+ SVN_ERR(generate_delta_tree(&tree, c->repos, root, base_rev_id, pool));
if (tree)
SVN_ERR(print_dirs_changed_tree(tree, "", pool));
@@ -1517,8 +1491,7 @@ do_changed(svnlook_ctxt_t *c, apr_pool_t *pool)
if (base_rev_id == SVN_INVALID_REVNUM)
return SVN_NO_ERROR;
- SVN_ERR(generate_delta_tree(&tree, c->repos, root, base_rev_id,
- TRUE, pool));
+ SVN_ERR(generate_delta_tree(&tree, c->repos, root, base_rev_id, pool));
if (tree)
SVN_ERR(print_changed_tree(tree, "", c->copy_info, pool));
@@ -1539,17 +1512,44 @@ do_diff(svnlook_ctxt_t *c, apr_pool_t *pool)
if (base_rev_id == SVN_INVALID_REVNUM)
return SVN_NO_ERROR;
- SVN_ERR(generate_delta_tree(&tree, c->repos, root, base_rev_id,
- TRUE, pool));
+ SVN_ERR(generate_delta_tree(&tree, c->repos, root, base_rev_id, pool));
if (tree)
{
const char *tmpdir;
+ svn_stream_t *out_stream;
+ const char *encoding = svn_cmdline_output_encoding(pool);
SVN_ERR(svn_fs_revision_root(&base_root, c->fs, base_rev_id, pool));
SVN_ERR(svn_io_temp_dir(&tmpdir, pool));
- SVN_ERR(print_diff_tree(root, base_root, tree, "", "",
- c, tmpdir, pool));
+ /* This fflush() might seem odd, but it was added to deal
+ with this bug report:
+
+ http://subversion.tigris.org/servlets/ReadMsg?\
+ list=dev&msgNo=140782
+
+ From: "Steve Hay" <SteveHay{_AT_}planit.com>
+ To: <dev@subversion.tigris.org>
+ Subject: svnlook diff output in wrong order when redirected
+ Date: Fri, 4 Jul 2008 16:34:15 +0100
+ Message-ID: <1B32FF956ABF414C9BCE5E487A1497E702014F62@\
+ ukmail02.planit.group>
+
+ Adding the fflush() fixed the bug (not everyone could
+ reproduce it, but those who could confirmed the fix).
+ Later in the thread, Daniel Shahaf speculated as to
+ why the fix works:
+
+ "Because svn_cmdline_printf() uses the standard
+ 'FILE *stdout' to write to stdout, while
+ svn_stream_for_stdout() uses (through
+ apr_file_open_stdout()) Windows API's to get a
+ handle for stdout?" */
+ SVN_ERR(svn_cmdline_fflush(stdout));
+ SVN_ERR(svn_stream_for_stdout(&out_stream, pool));
+
+ SVN_ERR(print_diff_tree(out_stream, encoding, root, base_root, tree,
+ "", "", c, tmpdir, pool));
}
return SVN_NO_ERROR;
}
@@ -1643,13 +1643,23 @@ do_history(svnlook_ctxt_t *c,
/* Print the value of property PROPNAME on PATH in the repository.
- Error with SVN_ERR_FS_NOT_FOUND if PATH does not exist, or with
- SVN_ERR_PROPERTY_NOT_FOUND if no such property on PATH.
+
+ If VERBOSE, print their values too. If SHOW_INHERITED_PROPS, print
+ PATH's inherited props too.
+
+ Error with SVN_ERR_FS_NOT_FOUND if PATH does not exist. If
+ SHOW_INHERITED_PROPS is FALSE,then error with SVN_ERR_PROPERTY_NOT_FOUND
+ if there is no such property on PATH. If SHOW_INHERITED_PROPS is TRUE,
+ then error with SVN_ERR_PROPERTY_NOT_FOUND only if there is no such
+ property on PATH nor inherited by path.
+
If PATH is NULL, operate on a revision property. */
static svn_error_t *
do_pget(svnlook_ctxt_t *c,
const char *propname,
const char *path,
+ svn_boolean_t verbose,
+ svn_boolean_t show_inherited_props,
apr_pool_t *pool)
{
svn_fs_root_t *root;
@@ -1657,17 +1667,30 @@ do_pget(svnlook_ctxt_t *c,
svn_node_kind_t kind;
svn_stream_t *stdout_stream;
apr_size_t len;
+ apr_array_header_t *inherited_props = NULL;
SVN_ERR(get_root(&root, c, pool));
if (path != NULL)
{
+ path = svn_fspath__canonicalize(path, pool);
SVN_ERR(verify_path(&kind, root, path, pool));
SVN_ERR(svn_fs_node_prop(&prop, root, path, propname, pool));
+
+ if (show_inherited_props)
+ {
+ SVN_ERR(svn_repos_fs_get_inherited_props(&inherited_props, root,
+ path, propname, NULL,
+ NULL, pool, pool));
+ }
+ }
+ else /* --revprop */
+ {
+ SVN_ERR(get_property(&prop, c, propname, pool));
}
- else
- SVN_ERR(get_property(&prop, c, propname, pool));
- if (prop == NULL)
+ /* Did we find nothing? */
+ if (prop == NULL
+ && (!show_inherited_props || inherited_props->nelts == 0))
{
const char *err_msg;
if (path == NULL)
@@ -1680,61 +1703,162 @@ do_pget(svnlook_ctxt_t *c,
else
{
if (SVN_IS_VALID_REVNUM(c->rev_id))
- err_msg = apr_psprintf(pool,
- _("Property '%s' not found on path '%s' "
- "in revision %ld"),
- propname, path, c->rev_id);
+ {
+ if (show_inherited_props)
+ err_msg = apr_psprintf(pool,
+ _("Property '%s' not found on path '%s' "
+ "or inherited from a parent "
+ "in revision %ld"),
+ propname, path, c->rev_id);
+ else
+ err_msg = apr_psprintf(pool,
+ _("Property '%s' not found on path '%s' "
+ "in revision %ld"),
+ propname, path, c->rev_id);
+ }
else
- err_msg = apr_psprintf(pool,
- _("Property '%s' not found on path '%s' "
- "in transaction %s"),
- propname, path, c->txn_name);
+ {
+ if (show_inherited_props)
+ err_msg = apr_psprintf(pool,
+ _("Property '%s' not found on path '%s' "
+ "or inherited from a parent "
+ "in transaction %s"),
+ propname, path, c->txn_name);
+ else
+ err_msg = apr_psprintf(pool,
+ _("Property '%s' not found on path '%s' "
+ "in transaction %s"),
+ propname, path, c->txn_name);
+ }
}
return svn_error_create(SVN_ERR_PROPERTY_NOT_FOUND, NULL, err_msg);
}
- /* Else. */
-
SVN_ERR(svn_stream_for_stdout(&stdout_stream, pool));
- /* Unlike the command line client, we don't translate the property
- value or print a trailing newline here. We just output the raw
- bytes of whatever's in the repository, as svnlook is more likely
- to be used for automated inspections. */
- len = prop->len;
- SVN_ERR(svn_stream_write(stdout_stream, prop->data, &len));
+ if (verbose || show_inherited_props)
+ {
+ if (inherited_props)
+ {
+ int i;
+
+ for (i = 0; i < inherited_props->nelts; i++)
+ {
+ svn_prop_inherited_item_t *elt =
+ APR_ARRAY_IDX(inherited_props, i,
+ svn_prop_inherited_item_t *);
+
+ if (verbose)
+ {
+ SVN_ERR(svn_stream_printf(stdout_stream, pool,
+ _("Inherited properties on '%s',\nfrom '%s':\n"),
+ path, svn_fspath__canonicalize(elt->path_or_url,
+ pool)));
+ SVN_ERR(svn_cmdline__print_prop_hash(stdout_stream,
+ elt->prop_hash,
+ !verbose, pool));
+ }
+ else
+ {
+ svn_string_t *propval =
+ svn__apr_hash_index_val(apr_hash_first(pool,
+ elt->prop_hash));
+
+ SVN_ERR(svn_stream_printf(
+ stdout_stream, pool, "%s - ",
+ svn_fspath__canonicalize(elt->path_or_url, pool)));
+ len = propval->len;
+ SVN_ERR(svn_stream_write(stdout_stream, propval->data, &len));
+ /* If we have more than one property to write, then add a newline*/
+ if (inherited_props->nelts > 1 || prop)
+ {
+ len = strlen(APR_EOL_STR);
+ SVN_ERR(svn_stream_write(stdout_stream, APR_EOL_STR, &len));
+ }
+ }
+ }
+ }
+
+ if (prop)
+ {
+ if (verbose)
+ {
+ apr_hash_t *hash = apr_hash_make(pool);
+
+ svn_hash_sets(hash, propname, prop);
+ SVN_ERR(svn_stream_printf(stdout_stream, pool,
+ _("Properties on '%s':\n"), path));
+ SVN_ERR(svn_cmdline__print_prop_hash(stdout_stream, hash,
+ FALSE, pool));
+ }
+ else
+ {
+ SVN_ERR(svn_stream_printf(stdout_stream, pool, "%s - ", path));
+ len = prop->len;
+ SVN_ERR(svn_stream_write(stdout_stream, prop->data, &len));
+ }
+ }
+ }
+ else /* Raw single prop output, i.e. non-verbose output with no
+ inherited props. */
+ {
+ /* Unlike the command line client, we don't translate the property
+ value or print a trailing newline here. We just output the raw
+ bytes of whatever's in the repository, as svnlook is more likely
+ to be used for automated inspections. */
+ len = prop->len;
+ SVN_ERR(svn_stream_write(stdout_stream, prop->data, &len));
+ }
return SVN_NO_ERROR;
}
/* Print the property names of all properties on PATH in the repository.
- If VERBOSE, print their values too.
- If XML, print as XML rather than as plain text.
- Error with SVN_ERR_FS_NOT_FOUND if PATH does not exist, or with
- SVN_ERR_PROPERTY_NOT_FOUND if no such property on PATH.
+
+ If VERBOSE, print their values too. If XML, print as XML rather than as
+ plain text. If SHOW_INHERITED_PROPS, print PATH's inherited props too.
+
+ Error with SVN_ERR_FS_NOT_FOUND if PATH does not exist.
+
If PATH is NULL, operate on a revision properties. */
static svn_error_t *
do_plist(svnlook_ctxt_t *c,
const char *path,
svn_boolean_t verbose,
svn_boolean_t xml,
+ svn_boolean_t show_inherited_props,
apr_pool_t *pool)
{
- svn_stream_t *stdout_stream;
svn_fs_root_t *root;
apr_hash_t *props;
apr_hash_index_t *hi;
svn_node_kind_t kind;
svn_stringbuf_t *sb = NULL;
svn_boolean_t revprop = FALSE;
+ apr_array_header_t *inherited_props = NULL;
- SVN_ERR(svn_stream_for_stdout(&stdout_stream, pool));
if (path != NULL)
{
+ /* PATH might be the root of the repsository and we accept both
+ "" and "/". But to avoid the somewhat cryptic output like this:
+
+ >svnlook pl repos-path ""
+ Properties on '':
+ svn:auto-props
+ svn:global-ignores
+
+ We canonicalize PATH so that is has a leading slash. */
+ path = svn_fspath__canonicalize(path, pool);
+
SVN_ERR(get_root(&root, c, pool));
SVN_ERR(verify_path(&kind, root, path, pool));
SVN_ERR(svn_fs_node_proplist(&props, root, path, pool));
+
+ if (show_inherited_props)
+ SVN_ERR(svn_repos_fs_get_inherited_props(&inherited_props, root,
+ path, NULL, NULL, NULL,
+ pool, pool));
}
else if (c->is_revision)
{
@@ -1749,18 +1873,55 @@ do_plist(svnlook_ctxt_t *c,
if (xml)
{
- char *revstr = apr_psprintf(pool, "%ld", c->rev_id);
/* <?xml version="1.0" encoding="UTF-8"?> */
svn_xml_make_header2(&sb, "UTF-8", pool);
/* "<properties>" */
svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "properties", NULL);
+ }
+
+ if (inherited_props)
+ {
+ int i;
+
+ for (i = 0; i < inherited_props->nelts; i++)
+ {
+ svn_prop_inherited_item_t *elt =
+ APR_ARRAY_IDX(inherited_props, i, svn_prop_inherited_item_t *);
+
+ /* Canonicalize the inherited parent paths for consistency
+ with PATH. */
+ if (xml)
+ {
+ svn_xml_make_open_tag(
+ &sb, pool, svn_xml_normal, "target", "path",
+ svn_fspath__canonicalize(elt->path_or_url, pool),
+ NULL);
+ SVN_ERR(svn_cmdline__print_xml_prop_hash(&sb, elt->prop_hash,
+ !verbose, TRUE,
+ pool));
+ svn_xml_make_close_tag(&sb, pool, "target");
+ }
+ else
+ {
+ SVN_ERR(svn_cmdline_printf(
+ pool, _("Inherited properties on '%s',\nfrom '%s':\n"),
+ path, svn_fspath__canonicalize(elt->path_or_url, pool)));
+ SVN_ERR(svn_cmdline__print_prop_hash(NULL, elt->prop_hash,
+ !verbose, pool));
+ }
+ }
+ }
+ if (xml)
+ {
if (revprop)
{
/* "<revprops ...>" */
if (c->is_revision)
{
+ char *revstr = apr_psprintf(pool, "%ld", c->rev_id);
+
svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "revprops",
"rev", revstr, NULL);
}
@@ -1778,6 +1939,9 @@ do_plist(svnlook_ctxt_t *c,
}
}
+ if (!xml && path /* Not a --revprop */)
+ SVN_ERR(svn_cmdline_printf(pool, _("Properties on '%s':\n"), path));
+
for (hi = apr_hash_first(pool, props); hi; hi = apr_hash_next(hi))
{
const char *pname = svn__apr_hash_index_key(hi);
@@ -1797,14 +1961,23 @@ do_plist(svnlook_ctxt_t *c,
if (verbose)
{
if (xml)
- svn_cmdline__print_xml_prop(&sb, pname, propval, pool);
+ svn_cmdline__print_xml_prop(&sb, pname, propval, FALSE, pool);
else
{
const char *pname_stdout;
+ const char *indented_newval;
SVN_ERR(svn_cmdline_cstring_from_utf8(&pname_stdout, pname,
pool));
- printf(" %s : %s\n", pname_stdout, propval->data);
+ printf(" %s\n", pname_stdout);
+ /* Add an extra newline to the value before indenting, so that
+ every line of output has the indentation whether the value
+ already ended in a newline or not. */
+ indented_newval =
+ svn_cmdline__indent_string(apr_psprintf(pool, "%s\n",
+ propval->data),
+ " ", pool);
+ printf("%s", indented_newval);
}
}
else if (xml)
@@ -1918,6 +2091,9 @@ get_ctxt_baton(svnlook_ctxt_t **baton_p,
baton->diff_options = svn_cstring_split(opt_state->extensions
? opt_state->extensions : "",
" \t\n\r", TRUE, pool);
+ baton->ignore_properties = opt_state->ignore_properties;
+ baton->properties_only = opt_state->properties_only;
+ baton->diff_cmd = opt_state->diff_cmd;
if (baton->txn_name)
SVN_ERR(svn_fs_open_txn(&(baton->txn), baton->fs,
@@ -2054,9 +2230,10 @@ subcommand_help(apr_getopt_t *os, void *baton, apr_pool_t *pool)
version_footer = svn_stringbuf_create(fs_desc_start, pool);
SVN_ERR(svn_fs_print_modules(version_footer, pool));
- SVN_ERR(svn_opt_print_help3(os, "svnlook",
+ SVN_ERR(svn_opt_print_help4(os, "svnlook",
opt_state ? opt_state->version : FALSE,
opt_state ? opt_state->quiet : FALSE,
+ opt_state ? opt_state->verbose : FALSE,
version_footer->data,
header, cmd_table, options_table, NULL,
NULL, pool));
@@ -2182,7 +2359,9 @@ subcommand_pget(apr_getopt_t *os, void *baton, apr_pool_t *pool)
SVN_ERR(get_ctxt_baton(&c, opt_state, pool));
SVN_ERR(do_pget(c, opt_state->arg1,
- opt_state->revprop ? NULL : opt_state->arg2, pool));
+ opt_state->revprop ? NULL : opt_state->arg2,
+ opt_state->verbose, opt_state->show_inherited_props,
+ pool));
return SVN_NO_ERROR;
}
@@ -2197,7 +2376,8 @@ subcommand_plist(apr_getopt_t *os, void *baton, apr_pool_t *pool)
SVN_ERR(get_ctxt_baton(&c, opt_state, pool));
SVN_ERR(do_plist(c, opt_state->revprop ? NULL : opt_state->arg1,
- opt_state->verbose, opt_state->xml, pool));
+ opt_state->verbose, opt_state->xml,
+ opt_state->show_inherited_props, pool));
return SVN_NO_ERROR;
}
@@ -2258,7 +2438,6 @@ main(int argc, const char *argv[])
{
svn_error_t *err;
apr_status_t apr_err;
- apr_allocator_t *allocator;
apr_pool_t *pool;
const svn_opt_subcommand_desc2_t *subcommand = NULL;
@@ -2275,13 +2454,7 @@ main(int argc, const char *argv[])
/* Create our top-level pool. Use a separate mutexless allocator,
* given this application is single threaded.
*/
- if (apr_allocator_create(&allocator))
- return EXIT_FAILURE;
-
- apr_allocator_max_free_set(allocator, SVN_ALLOCATOR_RECOMMENDED_MAX_FREE);
-
- pool = svn_pool_create_ex(NULL, allocator);
- apr_allocator_owner_set(allocator, pool);
+ pool = apr_allocator_owner_get(svn_pool_create_allocator(FALSE));
received_opts = apr_array_make(pool, SVN_OPT_MAX_OPTIONS, sizeof(int));
@@ -2425,6 +2598,22 @@ main(int argc, const char *argv[])
opt_state.extensions = opt_arg;
break;
+ case svnlook__ignore_properties:
+ opt_state.ignore_properties = TRUE;
+ break;
+
+ case svnlook__properties_only:
+ opt_state.properties_only = TRUE;
+ break;
+
+ case svnlook__diff_cmd:
+ opt_state.diff_cmd = opt_arg;
+ break;
+
+ case svnlook__show_inherited_props:
+ opt_state.show_inherited_props = TRUE;
+ break;
+
default:
SVN_INT_ERR(subcommand_help(NULL, NULL, pool));
svn_pool_destroy(pool);
@@ -2440,6 +2629,13 @@ main(int argc, const char *argv[])
_("The '--transaction' (-t) and '--revision' (-r) arguments "
"cannot co-exist")));
+ /* The --show-inherited-props and --revprop options may not co-exist. */
+ if (opt_state.show_inherited_props && opt_state.revprop)
+ SVN_INT_ERR(svn_error_create
+ (SVN_ERR_CL_MUTUALLY_EXCLUSIVE_ARGS, NULL,
+ _("Cannot use the '--show-inherited-props' option with the "
+ "'--revprop' option")));
+
/* If the user asked for help, then the rest of the arguments are
the names of subcommands to get help on (if any), or else they're
just typos/mistakes. Whatever the case, the subcommand to
@@ -2459,7 +2655,7 @@ main(int argc, const char *argv[])
static const svn_opt_subcommand_desc2_t pseudo_cmd =
{ "--version", subcommand_help, {0}, "",
{svnlook__version, /* must accept its own option */
- 'q',
+ 'q', 'v',
} };
subcommand = &pseudo_cmd;
@@ -2485,11 +2681,21 @@ main(int argc, const char *argv[])
pool);
if (err)
return svn_cmdline_handle_exit_error(err, pool, "svnlook: ");
- svn_error_clear
- (svn_cmdline_fprintf(stderr, pool,
- _("Unknown command: '%s'\n"),
- first_arg_utf8));
+ svn_error_clear(
+ svn_cmdline_fprintf(stderr, pool,
+ _("Unknown subcommand: '%s'\n"),
+ first_arg_utf8));
SVN_INT_ERR(subcommand_help(NULL, NULL, pool));
+
+ /* Be kind to people who try 'svnlook verify'. */
+ if (strcmp(first_arg_utf8, "verify") == 0)
+ {
+ svn_error_clear(
+ svn_cmdline_fprintf(stderr, pool,
+ _("Try 'svnadmin verify' instead.\n")));
+ }
+
+
svn_pool_destroy(pool);
return EXIT_FAILURE;
}
diff --git a/subversion/svnmucc/svnmucc.1 b/subversion/svnmucc/svnmucc.1
new file mode 100644
index 0000000..2b9ae67
--- /dev/null
+++ b/subversion/svnmucc/svnmucc.1
@@ -0,0 +1,47 @@
+.\"
+.\"
+.\" Licensed to the Apache Software Foundation (ASF) under one
+.\" or more contributor license agreements. See the NOTICE file
+.\" distributed with this work for additional information
+.\" regarding copyright ownership. The ASF licenses this file
+.\" to you under the Apache License, Version 2.0 (the
+.\" "License"); you may not use this file except in compliance
+.\" with the License. You may obtain a copy of the License at
+.\"
+.\" http://www.apache.org/licenses/LICENSE-2.0
+.\"
+.\" Unless required by applicable law or agreed to in writing,
+.\" software distributed under the License is distributed on an
+.\" "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+.\" KIND, either express or implied. See the License for the
+.\" specific language governing permissions and limitations
+.\" under the License.
+.\"
+.\"
+.\" You can view this file with:
+.\" nroff -man [filename]
+.\"
+.TH svnmucc 1
+.SH NAME
+svnmucc \- Multiple URL Command Client for Subversion
+.SH SYNOPSIS
+.TP
+\fBsvnmucc\fP [\fIoptions\fP]
+.SH OVERVIEW
+Subversion is a version control system, which allows you to keep old
+versions of files and directories (usually source code), keep a log of
+who, when, and why changes occurred, etc., like CVS, RCS or SCCS.
+\fBSubversion\fP keeps a single copy of the master sources. This copy
+is called the source ``repository''; it contains all the information
+to permit extracting previous versions of those files at any time.
+
+For more information about the Subversion project, visit
+http://subversion.apache.org.
+
+Documentation for Subversion and its tools, including detailed usage
+explanations of the \fBsvn\fP, \fBsvnadmin\fP, \fBsvnserve\fP and
+\fBsvnlook\fP programs, historical background, philosophical
+approaches and reasonings, etc., can be found at
+http://svnbook.red-bean.com/.
+
+Run `svnmucc --help' to access the built-in tool documentation.
diff --git a/subversion/svnmucc/svnmucc.c b/subversion/svnmucc/svnmucc.c
new file mode 100644
index 0000000..d53f18f
--- /dev/null
+++ b/subversion/svnmucc/svnmucc.c
@@ -0,0 +1,1468 @@
+/*
+ * svnmucc.c: Subversion Multiple URL Client
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ *
+ */
+
+/* Multiple URL Command Client
+
+ Combine a list of mv, cp and rm commands on URLs into a single commit.
+
+ How it works: the command line arguments are parsed into an array of
+ action structures. The action structures are interpreted to build a
+ tree of operation structures. The tree of operation structures is
+ used to drive an RA commit editor to produce a single commit.
+
+ To build this client, type 'make svnmucc' from the root of your
+ Subversion source directory.
+*/
+
+#include <stdio.h>
+#include <string.h>
+
+#include <apr_lib.h>
+
+#include "svn_hash.h"
+#include "svn_client.h"
+#include "svn_cmdline.h"
+#include "svn_config.h"
+#include "svn_error.h"
+#include "svn_path.h"
+#include "svn_pools.h"
+#include "svn_props.h"
+#include "svn_ra.h"
+#include "svn_string.h"
+#include "svn_subst.h"
+#include "svn_utf.h"
+#include "svn_version.h"
+
+#include "private/svn_cmdline_private.h"
+#include "private/svn_ra_private.h"
+#include "private/svn_string_private.h"
+#include "private/svn_subr_private.h"
+
+#include "svn_private_config.h"
+
+static void handle_error(svn_error_t *err, apr_pool_t *pool)
+{
+ if (err)
+ svn_handle_error2(err, stderr, FALSE, "svnmucc: ");
+ svn_error_clear(err);
+ if (pool)
+ svn_pool_destroy(pool);
+ exit(EXIT_FAILURE);
+}
+
+static apr_pool_t *
+init(const char *application)
+{
+ svn_error_t *err;
+ const svn_version_checklist_t checklist[] = {
+ {"svn_client", svn_client_version},
+ {"svn_subr", svn_subr_version},
+ {"svn_ra", svn_ra_version},
+ {NULL, NULL}
+ };
+ SVN_VERSION_DEFINE(my_version);
+
+ if (svn_cmdline_init(application, stderr))
+ exit(EXIT_FAILURE);
+
+ err = svn_ver_check_list2(&my_version, checklist, svn_ver_equal);
+ if (err)
+ handle_error(err, NULL);
+
+ return apr_allocator_owner_get(svn_pool_create_allocator(FALSE));
+}
+
+static svn_error_t *
+open_tmp_file(apr_file_t **fp,
+ void *callback_baton,
+ apr_pool_t *pool)
+{
+ /* Open a unique file; use APR_DELONCLOSE. */
+ return svn_io_open_unique_file3(fp, NULL, NULL, svn_io_file_del_on_close,
+ pool, pool);
+}
+
+static svn_error_t *
+create_ra_callbacks(svn_ra_callbacks2_t **callbacks,
+ const char *username,
+ const char *password,
+ const char *config_dir,
+ svn_config_t *cfg_config,
+ svn_boolean_t non_interactive,
+ svn_boolean_t trust_server_cert,
+ svn_boolean_t no_auth_cache,
+ apr_pool_t *pool)
+{
+ SVN_ERR(svn_ra_create_callbacks(callbacks, pool));
+
+ SVN_ERR(svn_cmdline_create_auth_baton(&(*callbacks)->auth_baton,
+ non_interactive,
+ username, password, config_dir,
+ no_auth_cache,
+ trust_server_cert,
+ cfg_config, NULL, NULL, pool));
+
+ (*callbacks)->open_tmp_file = open_tmp_file;
+
+ return SVN_NO_ERROR;
+}
+
+
+
+static svn_error_t *
+commit_callback(const svn_commit_info_t *commit_info,
+ void *baton,
+ apr_pool_t *pool)
+{
+ SVN_ERR(svn_cmdline_printf(pool, "r%ld committed by %s at %s\n",
+ commit_info->revision,
+ (commit_info->author
+ ? commit_info->author : "(no author)"),
+ commit_info->date));
+ return SVN_NO_ERROR;
+}
+
+typedef enum action_code_t {
+ ACTION_MV,
+ ACTION_MKDIR,
+ ACTION_CP,
+ ACTION_PROPSET,
+ ACTION_PROPSETF,
+ ACTION_PROPDEL,
+ ACTION_PUT,
+ ACTION_RM
+} action_code_t;
+
+struct operation {
+ enum {
+ OP_OPEN,
+ OP_DELETE,
+ OP_ADD,
+ OP_REPLACE,
+ OP_PROPSET /* only for files for which no other operation is
+ occuring; directories are OP_OPEN with non-empty
+ props */
+ } operation;
+ svn_node_kind_t kind; /* to copy, mkdir, put or set revprops */
+ svn_revnum_t rev; /* to copy, valid for add and replace */
+ const char *url; /* to copy, valid for add and replace */
+ const char *src_file; /* for put, the source file for contents */
+ apr_hash_t *children; /* const char *path -> struct operation * */
+ apr_hash_t *prop_mods; /* const char *prop_name ->
+ const svn_string_t *prop_value */
+ apr_array_header_t *prop_dels; /* const char *prop_name deletions */
+ void *baton; /* as returned by the commit editor */
+};
+
+
+/* An iterator (for use via apr_table_do) which sets node properties.
+ REC is a pointer to a struct driver_state. */
+static svn_error_t *
+change_props(const svn_delta_editor_t *editor,
+ void *baton,
+ struct operation *child,
+ apr_pool_t *pool)
+{
+ apr_pool_t *iterpool = svn_pool_create(pool);
+
+ if (child->prop_dels)
+ {
+ int i;
+ for (i = 0; i < child->prop_dels->nelts; i++)
+ {
+ const char *prop_name;
+
+ svn_pool_clear(iterpool);
+ prop_name = APR_ARRAY_IDX(child->prop_dels, i, const char *);
+ if (child->kind == svn_node_dir)
+ SVN_ERR(editor->change_dir_prop(baton, prop_name,
+ NULL, iterpool));
+ else
+ SVN_ERR(editor->change_file_prop(baton, prop_name,
+ NULL, iterpool));
+ }
+ }
+ if (apr_hash_count(child->prop_mods))
+ {
+ apr_hash_index_t *hi;
+ for (hi = apr_hash_first(pool, child->prop_mods);
+ hi; hi = apr_hash_next(hi))
+ {
+ const char *propname = svn__apr_hash_index_key(hi);
+ const svn_string_t *val = svn__apr_hash_index_val(hi);
+
+ svn_pool_clear(iterpool);
+ if (child->kind == svn_node_dir)
+ SVN_ERR(editor->change_dir_prop(baton, propname, val, iterpool));
+ else
+ SVN_ERR(editor->change_file_prop(baton, propname, val, iterpool));
+ }
+ }
+
+ svn_pool_destroy(iterpool);
+ return SVN_NO_ERROR;
+}
+
+
+/* Drive EDITOR to affect the change represented by OPERATION. HEAD
+ is the last-known youngest revision in the repository. */
+static svn_error_t *
+drive(struct operation *operation,
+ svn_revnum_t head,
+ const svn_delta_editor_t *editor,
+ apr_pool_t *pool)
+{
+ apr_pool_t *subpool = svn_pool_create(pool);
+ apr_hash_index_t *hi;
+
+ for (hi = apr_hash_first(pool, operation->children);
+ hi; hi = apr_hash_next(hi))
+ {
+ const char *key = svn__apr_hash_index_key(hi);
+ struct operation *child = svn__apr_hash_index_val(hi);
+ void *file_baton = NULL;
+
+ svn_pool_clear(subpool);
+
+ /* Deletes and replacements are simple -- delete something. */
+ if (child->operation == OP_DELETE || child->operation == OP_REPLACE)
+ {
+ SVN_ERR(editor->delete_entry(key, head, operation->baton, subpool));
+ }
+ /* Opens could be for directories or files. */
+ if (child->operation == OP_OPEN || child->operation == OP_PROPSET)
+ {
+ if (child->kind == svn_node_dir)
+ {
+ SVN_ERR(editor->open_directory(key, operation->baton, head,
+ subpool, &child->baton));
+ }
+ else
+ {
+ SVN_ERR(editor->open_file(key, operation->baton, head,
+ subpool, &file_baton));
+ }
+ }
+ /* Adds and replacements could also be for directories or files. */
+ if (child->operation == OP_ADD || child->operation == OP_REPLACE)
+ {
+ if (child->kind == svn_node_dir)
+ {
+ SVN_ERR(editor->add_directory(key, operation->baton,
+ child->url, child->rev,
+ subpool, &child->baton));
+ }
+ else
+ {
+ SVN_ERR(editor->add_file(key, operation->baton, child->url,
+ child->rev, subpool, &file_baton));
+ }
+ }
+ /* If there's a source file and an open file baton, we get to
+ change textual contents. */
+ if ((child->src_file) && (file_baton))
+ {
+ svn_txdelta_window_handler_t handler;
+ void *handler_baton;
+ svn_stream_t *contents;
+
+ SVN_ERR(editor->apply_textdelta(file_baton, NULL, subpool,
+ &handler, &handler_baton));
+ if (strcmp(child->src_file, "-") != 0)
+ {
+ SVN_ERR(svn_stream_open_readonly(&contents, child->src_file,
+ pool, pool));
+ }
+ else
+ {
+ SVN_ERR(svn_stream_for_stdin(&contents, pool));
+ }
+ SVN_ERR(svn_txdelta_send_stream(contents, handler,
+ handler_baton, NULL, pool));
+ }
+ /* If we opened a file, we need to apply outstanding propmods,
+ then close it. */
+ if (file_baton)
+ {
+ if (child->kind == svn_node_file)
+ {
+ SVN_ERR(change_props(editor, file_baton, child, subpool));
+ }
+ SVN_ERR(editor->close_file(file_baton, NULL, subpool));
+ }
+ /* If we opened, added, or replaced a directory, we need to
+ recurse, apply outstanding propmods, and then close it. */
+ if ((child->kind == svn_node_dir)
+ && child->operation != OP_DELETE)
+ {
+ SVN_ERR(change_props(editor, child->baton, child, subpool));
+
+ SVN_ERR(drive(child, head, editor, subpool));
+
+ SVN_ERR(editor->close_directory(child->baton, subpool));
+ }
+ }
+ svn_pool_destroy(subpool);
+ return SVN_NO_ERROR;
+}
+
+
+/* Find the operation associated with PATH, which is a single-path
+ component representing a child of the path represented by
+ OPERATION. If no such child operation exists, create a new one of
+ type OP_OPEN. */
+static struct operation *
+get_operation(const char *path,
+ struct operation *operation,
+ apr_pool_t *pool)
+{
+ struct operation *child = svn_hash_gets(operation->children, path);
+ if (! child)
+ {
+ child = apr_pcalloc(pool, sizeof(*child));
+ child->children = apr_hash_make(pool);
+ child->operation = OP_OPEN;
+ child->rev = SVN_INVALID_REVNUM;
+ child->kind = svn_node_dir;
+ child->prop_mods = apr_hash_make(pool);
+ child->prop_dels = apr_array_make(pool, 1, sizeof(const char *));
+ svn_hash_sets(operation->children, path, child);
+ }
+ return child;
+}
+
+/* Return the portion of URL that is relative to ANCHOR (URI-decoded). */
+static const char *
+subtract_anchor(const char *anchor, const char *url, apr_pool_t *pool)
+{
+ return svn_uri_skip_ancestor(anchor, url, pool);
+}
+
+/* Add PATH to the operations tree rooted at OPERATION, creating any
+ intermediate nodes that are required. Here's what's expected for
+ each action type:
+
+ ACTION URL REV SRC-FILE PROPNAME
+ ------------ ----- ------- -------- --------
+ ACTION_MKDIR NULL invalid NULL NULL
+ ACTION_CP valid valid NULL NULL
+ ACTION_PUT NULL invalid valid NULL
+ ACTION_RM NULL invalid NULL NULL
+ ACTION_PROPSET valid invalid NULL valid
+ ACTION_PROPDEL valid invalid NULL valid
+
+ Node type information is obtained for any copy source (to determine
+ whether to create a file or directory) and for any deleted path (to
+ ensure it exists since svn_delta_editor_t->delete_entry doesn't
+ return an error on non-existent nodes). */
+static svn_error_t *
+build(action_code_t action,
+ const char *path,
+ const char *url,
+ svn_revnum_t rev,
+ const char *prop_name,
+ const svn_string_t *prop_value,
+ const char *src_file,
+ svn_revnum_t head,
+ const char *anchor,
+ svn_ra_session_t *session,
+ struct operation *operation,
+ apr_pool_t *pool)
+{
+ apr_array_header_t *path_bits = svn_path_decompose(path, pool);
+ const char *path_so_far = "";
+ const char *copy_src = NULL;
+ svn_revnum_t copy_rev = SVN_INVALID_REVNUM;
+ int i;
+
+ /* Look for any previous operations we've recognized for PATH. If
+ any of PATH's ancestors have not yet been traversed, we'll be
+ creating OP_OPEN operations for them as we walk down PATH's path
+ components. */
+ for (i = 0; i < path_bits->nelts; ++i)
+ {
+ const char *path_bit = APR_ARRAY_IDX(path_bits, i, const char *);
+ path_so_far = svn_relpath_join(path_so_far, path_bit, pool);
+ operation = get_operation(path_so_far, operation, pool);
+
+ /* If we cross a replace- or add-with-history, remember the
+ source of those things in case we need to lookup the node kind
+ of one of their children. And if this isn't such a copy,
+ but we've already seen one in of our parent paths, we just need
+ to extend that copy source path by our current path
+ component. */
+ if (operation->url
+ && SVN_IS_VALID_REVNUM(operation->rev)
+ && (operation->operation == OP_REPLACE
+ || operation->operation == OP_ADD))
+ {
+ copy_src = subtract_anchor(anchor, operation->url, pool);
+ copy_rev = operation->rev;
+ }
+ else if (copy_src)
+ {
+ copy_src = svn_relpath_join(copy_src, path_bit, pool);
+ }
+ }
+
+ /* Handle property changes. */
+ if (prop_name)
+ {
+ if (operation->operation == OP_DELETE)
+ return svn_error_createf(SVN_ERR_BAD_URL, NULL,
+ "cannot set properties on a location being"
+ " deleted ('%s')", path);
+ /* If we're not adding this thing ourselves, check for existence. */
+ if (! ((operation->operation == OP_ADD) ||
+ (operation->operation == OP_REPLACE)))
+ {
+ SVN_ERR(svn_ra_check_path(session,
+ copy_src ? copy_src : path,
+ copy_src ? copy_rev : head,
+ &operation->kind, pool));
+ if (operation->kind == svn_node_none)
+ return svn_error_createf(SVN_ERR_BAD_URL, NULL,
+ "propset: '%s' not found", path);
+ else if ((operation->kind == svn_node_file)
+ && (operation->operation == OP_OPEN))
+ operation->operation = OP_PROPSET;
+ }
+ if (! prop_value)
+ APR_ARRAY_PUSH(operation->prop_dels, const char *) = prop_name;
+ else
+ svn_hash_sets(operation->prop_mods, prop_name, prop_value);
+ if (!operation->rev)
+ operation->rev = rev;
+ return SVN_NO_ERROR;
+ }
+
+ /* We won't fuss about multiple operations on the same path in the
+ following cases:
+
+ - the prior operation was, in fact, a no-op (open)
+ - the prior operation was a propset placeholder
+ - the prior operation was a deletion
+
+ Note: while the operation structure certainly supports the
+ ability to do a copy of a file followed by a put of new contents
+ for the file, we don't let that happen (yet).
+ */
+ if (operation->operation != OP_OPEN
+ && operation->operation != OP_PROPSET
+ && operation->operation != OP_DELETE)
+ return svn_error_createf(SVN_ERR_BAD_URL, NULL,
+ "unsupported multiple operations on '%s'", path);
+
+ /* For deletions, we validate that there's actually something to
+ delete. If this is a deletion of the child of a copied
+ directory, we need to remember to look in the copy source tree to
+ verify that this thing actually exists. */
+ if (action == ACTION_RM)
+ {
+ operation->operation = OP_DELETE;
+ SVN_ERR(svn_ra_check_path(session,
+ copy_src ? copy_src : path,
+ copy_src ? copy_rev : head,
+ &operation->kind, pool));
+ if (operation->kind == svn_node_none)
+ {
+ if (copy_src && strcmp(path, copy_src))
+ return svn_error_createf(SVN_ERR_BAD_URL, NULL,
+ "'%s' (from '%s:%ld') not found",
+ path, copy_src, copy_rev);
+ else
+ return svn_error_createf(SVN_ERR_BAD_URL, NULL, "'%s' not found",
+ path);
+ }
+ }
+ /* Handle copy operations (which can be adds or replacements). */
+ else if (action == ACTION_CP)
+ {
+ if (rev > head)
+ return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ "Copy source revision cannot be younger "
+ "than base revision");
+ operation->operation =
+ operation->operation == OP_DELETE ? OP_REPLACE : OP_ADD;
+ if (operation->operation == OP_ADD)
+ {
+ /* There is a bug in the current version of mod_dav_svn
+ which incorrectly replaces existing directories.
+ Therefore we need to check if the target exists
+ and raise an error here. */
+ SVN_ERR(svn_ra_check_path(session,
+ copy_src ? copy_src : path,
+ copy_src ? copy_rev : head,
+ &operation->kind, pool));
+ if (operation->kind != svn_node_none)
+ {
+ if (copy_src && strcmp(path, copy_src))
+ return svn_error_createf(SVN_ERR_BAD_URL, NULL,
+ "'%s' (from '%s:%ld') already exists",
+ path, copy_src, copy_rev);
+ else
+ return svn_error_createf(SVN_ERR_BAD_URL, NULL,
+ "'%s' already exists", path);
+ }
+ }
+ SVN_ERR(svn_ra_check_path(session, subtract_anchor(anchor, url, pool),
+ rev, &operation->kind, pool));
+ if (operation->kind == svn_node_none)
+ return svn_error_createf(SVN_ERR_BAD_URL, NULL,
+ "'%s' not found",
+ subtract_anchor(anchor, url, pool));
+ operation->url = url;
+ operation->rev = rev;
+ }
+ /* Handle mkdir operations (which can be adds or replacements). */
+ else if (action == ACTION_MKDIR)
+ {
+ operation->operation =
+ operation->operation == OP_DELETE ? OP_REPLACE : OP_ADD;
+ operation->kind = svn_node_dir;
+ }
+ /* Handle put operations (which can be adds, replacements, or opens). */
+ else if (action == ACTION_PUT)
+ {
+ if (operation->operation == OP_DELETE)
+ {
+ operation->operation = OP_REPLACE;
+ }
+ else
+ {
+ SVN_ERR(svn_ra_check_path(session,
+ copy_src ? copy_src : path,
+ copy_src ? copy_rev : head,
+ &operation->kind, pool));
+ if (operation->kind == svn_node_file)
+ operation->operation = OP_OPEN;
+ else if (operation->kind == svn_node_none)
+ operation->operation = OP_ADD;
+ else
+ return svn_error_createf(SVN_ERR_BAD_URL, NULL,
+ "'%s' is not a file", path);
+ }
+ operation->kind = svn_node_file;
+ operation->src_file = src_file;
+ }
+ else
+ {
+ /* We shouldn't get here. */
+ SVN_ERR_MALFUNCTION();
+ }
+
+ return SVN_NO_ERROR;
+}
+
+struct action {
+ action_code_t action;
+
+ /* revision (copy-from-rev of path[0] for cp; base-rev for put) */
+ svn_revnum_t rev;
+
+ /* action path[0] path[1]
+ * ------ ------- -------
+ * mv source target
+ * mkdir target (null)
+ * cp source target
+ * put target source
+ * rm target (null)
+ * propset target (null)
+ */
+ const char *path[2];
+
+ /* property name/value */
+ const char *prop_name;
+ const svn_string_t *prop_value;
+};
+
+struct fetch_baton
+{
+ svn_ra_session_t *session;
+ svn_revnum_t head;
+};
+
+static svn_error_t *
+fetch_base_func(const char **filename,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct fetch_baton *fb = baton;
+ svn_stream_t *fstream;
+ svn_error_t *err;
+
+ if (! SVN_IS_VALID_REVNUM(base_revision))
+ base_revision = fb->head;
+
+ SVN_ERR(svn_stream_open_unique(&fstream, filename, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ result_pool, scratch_pool));
+
+ err = svn_ra_get_file(fb->session, path, base_revision, fstream, NULL, NULL,
+ scratch_pool);
+ if (err && err->apr_err == SVN_ERR_FS_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ SVN_ERR(svn_stream_close(fstream));
+
+ *filename = NULL;
+ return SVN_NO_ERROR;
+ }
+ else if (err)
+ return svn_error_trace(err);
+
+ SVN_ERR(svn_stream_close(fstream));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+fetch_props_func(apr_hash_t **props,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct fetch_baton *fb = baton;
+ svn_node_kind_t node_kind;
+
+ if (! SVN_IS_VALID_REVNUM(base_revision))
+ base_revision = fb->head;
+
+ SVN_ERR(svn_ra_check_path(fb->session, path, base_revision, &node_kind,
+ scratch_pool));
+
+ if (node_kind == svn_node_file)
+ {
+ SVN_ERR(svn_ra_get_file(fb->session, path, base_revision, NULL, NULL,
+ props, result_pool));
+ }
+ else if (node_kind == svn_node_dir)
+ {
+ apr_array_header_t *tmp_props;
+
+ SVN_ERR(svn_ra_get_dir2(fb->session, NULL, NULL, props, path,
+ base_revision, 0 /* Dirent fields */,
+ result_pool));
+ tmp_props = svn_prop_hash_to_array(*props, result_pool);
+ SVN_ERR(svn_categorize_props(tmp_props, NULL, NULL, &tmp_props,
+ result_pool));
+ *props = svn_prop_array_to_hash(tmp_props, result_pool);
+ }
+ else
+ {
+ *props = apr_hash_make(result_pool);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+fetch_kind_func(svn_node_kind_t *kind,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *scratch_pool)
+{
+ struct fetch_baton *fb = baton;
+
+ if (! SVN_IS_VALID_REVNUM(base_revision))
+ base_revision = fb->head;
+
+ SVN_ERR(svn_ra_check_path(fb->session, path, base_revision, kind,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_delta_shim_callbacks_t *
+get_shim_callbacks(svn_ra_session_t *session,
+ svn_revnum_t head,
+ apr_pool_t *result_pool)
+{
+ svn_delta_shim_callbacks_t *callbacks =
+ svn_delta_shim_callbacks_default(result_pool);
+ struct fetch_baton *fb = apr_pcalloc(result_pool, sizeof(*fb));
+
+ fb->session = session;
+ fb->head = head;
+
+ callbacks->fetch_props_func = fetch_props_func;
+ callbacks->fetch_kind_func = fetch_kind_func;
+ callbacks->fetch_base_func = fetch_base_func;
+ callbacks->fetch_baton = fb;
+
+ return callbacks;
+}
+
+static svn_error_t *
+execute(const apr_array_header_t *actions,
+ const char *anchor,
+ apr_hash_t *revprops,
+ const char *username,
+ const char *password,
+ const char *config_dir,
+ const apr_array_header_t *config_options,
+ svn_boolean_t non_interactive,
+ svn_boolean_t trust_server_cert,
+ svn_boolean_t no_auth_cache,
+ svn_revnum_t base_revision,
+ apr_pool_t *pool)
+{
+ svn_ra_session_t *session;
+ svn_ra_session_t *aux_session;
+ const char *repos_root;
+ svn_revnum_t head;
+ const svn_delta_editor_t *editor;
+ svn_ra_callbacks2_t *ra_callbacks;
+ void *editor_baton;
+ struct operation root;
+ svn_error_t *err;
+ apr_hash_t *config;
+ svn_config_t *cfg_config;
+ int i;
+
+ SVN_ERR(svn_config_get_config(&config, config_dir, pool));
+ SVN_ERR(svn_cmdline__apply_config_options(config, config_options,
+ "svnmucc: ", "--config-option"));
+ cfg_config = svn_hash_gets(config, SVN_CONFIG_CATEGORY_CONFIG);
+
+ if (! svn_hash_gets(revprops, SVN_PROP_REVISION_LOG))
+ {
+ svn_string_t *msg = svn_string_create("", pool);
+
+ /* If we can do so, try to pop up $EDITOR to fetch a log message. */
+ if (non_interactive)
+ {
+ return svn_error_create
+ (SVN_ERR_CL_INSUFFICIENT_ARGS, NULL,
+ _("Cannot invoke editor to get log message "
+ "when non-interactive"));
+ }
+ else
+ {
+ SVN_ERR(svn_cmdline__edit_string_externally(
+ &msg, NULL, NULL, "", msg, "svnmucc-commit", config,
+ TRUE, NULL, apr_hash_pool_get(revprops)));
+ }
+
+ svn_hash_sets(revprops, SVN_PROP_REVISION_LOG, msg);
+ }
+
+ SVN_ERR(create_ra_callbacks(&ra_callbacks, username, password, config_dir,
+ cfg_config, non_interactive, trust_server_cert,
+ no_auth_cache, pool));
+ SVN_ERR(svn_ra_open4(&session, NULL, anchor, NULL, ra_callbacks,
+ NULL, config, pool));
+ /* Open, then reparent to avoid AUTHZ errors when opening the reposroot */
+ SVN_ERR(svn_ra_open4(&aux_session, NULL, anchor, NULL, ra_callbacks,
+ NULL, config, pool));
+ SVN_ERR(svn_ra_get_repos_root2(aux_session, &repos_root, pool));
+ SVN_ERR(svn_ra_reparent(aux_session, repos_root, pool));
+ SVN_ERR(svn_ra_get_latest_revnum(session, &head, pool));
+
+ /* Reparent to ANCHOR's dir, if ANCHOR is not a directory. */
+ {
+ svn_node_kind_t kind;
+
+ SVN_ERR(svn_ra_check_path(aux_session,
+ svn_uri_skip_ancestor(repos_root, anchor, pool),
+ head, &kind, pool));
+ if (kind != svn_node_dir)
+ {
+ anchor = svn_uri_dirname(anchor, pool);
+ SVN_ERR(svn_ra_reparent(session, anchor, pool));
+ }
+ }
+
+ if (SVN_IS_VALID_REVNUM(base_revision))
+ {
+ if (base_revision > head)
+ return svn_error_createf(SVN_ERR_FS_NO_SUCH_REVISION, NULL,
+ "No such revision %ld (youngest is %ld)",
+ base_revision, head);
+ head = base_revision;
+ }
+
+ memset(&root, 0, sizeof(root));
+ root.children = apr_hash_make(pool);
+ root.operation = OP_OPEN;
+ root.kind = svn_node_dir; /* For setting properties */
+ root.prop_mods = apr_hash_make(pool);
+ root.prop_dels = apr_array_make(pool, 1, sizeof(const char *));
+
+ for (i = 0; i < actions->nelts; ++i)
+ {
+ struct action *action = APR_ARRAY_IDX(actions, i, struct action *);
+ const char *path1, *path2;
+ switch (action->action)
+ {
+ case ACTION_MV:
+ path1 = subtract_anchor(anchor, action->path[0], pool);
+ path2 = subtract_anchor(anchor, action->path[1], pool);
+ SVN_ERR(build(ACTION_RM, path1, NULL,
+ SVN_INVALID_REVNUM, NULL, NULL, NULL, head, anchor,
+ session, &root, pool));
+ SVN_ERR(build(ACTION_CP, path2, action->path[0],
+ head, NULL, NULL, NULL, head, anchor,
+ session, &root, pool));
+ break;
+ case ACTION_CP:
+ path2 = subtract_anchor(anchor, action->path[1], pool);
+ if (action->rev == SVN_INVALID_REVNUM)
+ action->rev = head;
+ SVN_ERR(build(ACTION_CP, path2, action->path[0],
+ action->rev, NULL, NULL, NULL, head, anchor,
+ session, &root, pool));
+ break;
+ case ACTION_RM:
+ path1 = subtract_anchor(anchor, action->path[0], pool);
+ SVN_ERR(build(ACTION_RM, path1, NULL,
+ SVN_INVALID_REVNUM, NULL, NULL, NULL, head, anchor,
+ session, &root, pool));
+ break;
+ case ACTION_MKDIR:
+ path1 = subtract_anchor(anchor, action->path[0], pool);
+ SVN_ERR(build(ACTION_MKDIR, path1, action->path[0],
+ SVN_INVALID_REVNUM, NULL, NULL, NULL, head, anchor,
+ session, &root, pool));
+ break;
+ case ACTION_PUT:
+ path1 = subtract_anchor(anchor, action->path[0], pool);
+ SVN_ERR(build(ACTION_PUT, path1, action->path[0],
+ SVN_INVALID_REVNUM, NULL, NULL, action->path[1],
+ head, anchor, session, &root, pool));
+ break;
+ case ACTION_PROPSET:
+ case ACTION_PROPDEL:
+ path1 = subtract_anchor(anchor, action->path[0], pool);
+ SVN_ERR(build(action->action, path1, action->path[0],
+ SVN_INVALID_REVNUM,
+ action->prop_name, action->prop_value,
+ NULL, head, anchor, session, &root, pool));
+ break;
+ case ACTION_PROPSETF:
+ default:
+ SVN_ERR_MALFUNCTION_NO_RETURN();
+ }
+ }
+
+ SVN_ERR(svn_ra__register_editor_shim_callbacks(session,
+ get_shim_callbacks(aux_session, head, pool)));
+ SVN_ERR(svn_ra_get_commit_editor3(session, &editor, &editor_baton, revprops,
+ commit_callback, NULL, NULL, FALSE, pool));
+
+ SVN_ERR(editor->open_root(editor_baton, head, pool, &root.baton));
+ err = change_props(editor, root.baton, &root, pool);
+ if (!err)
+ err = drive(&root, head, editor, pool);
+ if (!err)
+ err = editor->close_directory(root.baton, pool);
+ if (!err)
+ err = editor->close_edit(editor_baton, pool);
+
+ if (err)
+ err = svn_error_compose_create(err,
+ editor->abort_edit(editor_baton, pool));
+
+ return err;
+}
+
+static svn_error_t *
+read_propvalue_file(const svn_string_t **value_p,
+ const char *filename,
+ apr_pool_t *pool)
+{
+ svn_stringbuf_t *value;
+ apr_pool_t *scratch_pool = svn_pool_create(pool);
+
+ SVN_ERR(svn_stringbuf_from_file2(&value, filename, scratch_pool));
+ *value_p = svn_string_create_from_buf(value, pool);
+ svn_pool_destroy(scratch_pool);
+ return SVN_NO_ERROR;
+}
+
+/* Perform the typical suite of manipulations for user-provided URLs
+ on URL, returning the result (allocated from POOL): IRI-to-URI
+ conversion, auto-escaping, and canonicalization. */
+static const char *
+sanitize_url(const char *url,
+ apr_pool_t *pool)
+{
+ url = svn_path_uri_from_iri(url, pool);
+ url = svn_path_uri_autoescape(url, pool);
+ return svn_uri_canonicalize(url, pool);
+}
+
+static void
+usage(apr_pool_t *pool, int exit_val)
+{
+ FILE *stream = exit_val == EXIT_SUCCESS ? stdout : stderr;
+ svn_error_clear(svn_cmdline_fputs(
+ _("Subversion multiple URL command client\n"
+ "usage: svnmucc ACTION...\n"
+ "\n"
+ " Perform one or more Subversion repository URL-based ACTIONs, committing\n"
+ " the result as a (single) new revision.\n"
+ "\n"
+ "Actions:\n"
+ " cp REV SRC-URL DST-URL : copy SRC-URL@REV to DST-URL\n"
+ " mkdir URL : create new directory URL\n"
+ " mv SRC-URL DST-URL : move SRC-URL to DST-URL\n"
+ " rm URL : delete URL\n"
+ " put SRC-FILE URL : add or modify file URL with contents copied from\n"
+ " SRC-FILE (use \"-\" to read from standard input)\n"
+ " propset NAME VALUE URL : set property NAME on URL to VALUE\n"
+ " propsetf NAME FILE URL : set property NAME on URL to value read from FILE\n"
+ " propdel NAME URL : delete property NAME from URL\n"
+ "\n"
+ "Valid options:\n"
+ " -h, -? [--help] : display this text\n"
+ " -m [--message] ARG : use ARG as a log message\n"
+ " -F [--file] ARG : read log message from file ARG\n"
+ " -u [--username] ARG : commit the changes as username ARG\n"
+ " -p [--password] ARG : use ARG as the password\n"
+ " -U [--root-url] ARG : interpret all action URLs relative to ARG\n"
+ " -r [--revision] ARG : use revision ARG as baseline for changes\n"
+ " --with-revprop ARG : set revision property in the following format:\n"
+ " NAME[=VALUE]\n"
+ " --non-interactive : do no interactive prompting (default is to\n"
+ " prompt only if standard input is a terminal)\n"
+ " --force-interactive : do interactive prompting even if standard\n"
+ " input is not a terminal\n"
+ " --trust-server-cert : accept SSL server certificates from unknown\n"
+ " certificate authorities without prompting (but\n"
+ " only with '--non-interactive')\n"
+ " -X [--extra-args] ARG : append arguments from file ARG (one per line;\n"
+ " use \"-\" to read from standard input)\n"
+ " --config-dir ARG : use ARG to override the config directory\n"
+ " --config-option ARG : use ARG to override a configuration option\n"
+ " --no-auth-cache : do not cache authentication tokens\n"
+ " --version : print version information\n"),
+ stream, pool));
+ svn_pool_destroy(pool);
+ exit(exit_val);
+}
+
+static void
+insufficient(apr_pool_t *pool)
+{
+ handle_error(svn_error_create(SVN_ERR_INCORRECT_PARAMS, NULL,
+ "insufficient arguments"),
+ pool);
+}
+
+static svn_error_t *
+display_version(apr_getopt_t *os, apr_pool_t *pool)
+{
+ const char *ra_desc_start
+ = "The following repository access (RA) modules are available:\n\n";
+ svn_stringbuf_t *version_footer;
+
+ version_footer = svn_stringbuf_create(ra_desc_start, pool);
+ SVN_ERR(svn_ra_print_modules(version_footer, pool));
+
+ SVN_ERR(svn_opt_print_help4(os, "svnmucc", TRUE, FALSE, FALSE,
+ version_footer->data,
+ NULL, NULL, NULL, NULL, NULL, pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* Return an error about the mutual exclusivity of the -m, -F, and
+ --with-revprop=svn:log command-line options. */
+static svn_error_t *
+mutually_exclusive_logs_error(void)
+{
+ return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("--message (-m), --file (-F), and "
+ "--with-revprop=svn:log are mutually "
+ "exclusive"));
+}
+
+/* Ensure that the REVPROPS hash contains a command-line-provided log
+ message, if any, and that there was but one source of such a thing
+ provided on that command-line. */
+static svn_error_t *
+sanitize_log_sources(apr_hash_t *revprops,
+ const char *message,
+ svn_stringbuf_t *filedata)
+{
+ apr_pool_t *hash_pool = apr_hash_pool_get(revprops);
+
+ /* If we already have a log message in the revprop hash, then just
+ make sure the user didn't try to also use -m or -F. Otherwise,
+ we need to consult -m or -F to find a log message, if any. */
+ if (svn_hash_gets(revprops, SVN_PROP_REVISION_LOG))
+ {
+ if (filedata || message)
+ return mutually_exclusive_logs_error();
+ }
+ else if (filedata)
+ {
+ if (message)
+ return mutually_exclusive_logs_error();
+
+ SVN_ERR(svn_utf_cstring_to_utf8(&message, filedata->data, hash_pool));
+ svn_hash_sets(revprops, SVN_PROP_REVISION_LOG,
+ svn_stringbuf__morph_into_string(filedata));
+ }
+ else if (message)
+ {
+ svn_hash_sets(revprops, SVN_PROP_REVISION_LOG,
+ svn_string_create(message, hash_pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+int
+main(int argc, const char **argv)
+{
+ apr_pool_t *pool = init("svnmucc");
+ apr_array_header_t *actions = apr_array_make(pool, 1,
+ sizeof(struct action *));
+ const char *anchor = NULL;
+ svn_error_t *err = SVN_NO_ERROR;
+ apr_getopt_t *opts;
+ enum {
+ config_dir_opt = SVN_OPT_FIRST_LONGOPT_ID,
+ config_inline_opt,
+ no_auth_cache_opt,
+ version_opt,
+ with_revprop_opt,
+ non_interactive_opt,
+ force_interactive_opt,
+ trust_server_cert_opt
+ };
+ static const apr_getopt_option_t options[] = {
+ {"message", 'm', 1, ""},
+ {"file", 'F', 1, ""},
+ {"username", 'u', 1, ""},
+ {"password", 'p', 1, ""},
+ {"root-url", 'U', 1, ""},
+ {"revision", 'r', 1, ""},
+ {"with-revprop", with_revprop_opt, 1, ""},
+ {"extra-args", 'X', 1, ""},
+ {"help", 'h', 0, ""},
+ {NULL, '?', 0, ""},
+ {"non-interactive", non_interactive_opt, 0, ""},
+ {"force-interactive", force_interactive_opt, 0, ""},
+ {"trust-server-cert", trust_server_cert_opt, 0, ""},
+ {"config-dir", config_dir_opt, 1, ""},
+ {"config-option", config_inline_opt, 1, ""},
+ {"no-auth-cache", no_auth_cache_opt, 0, ""},
+ {"version", version_opt, 0, ""},
+ {NULL, 0, 0, NULL}
+ };
+ const char *message = NULL;
+ svn_stringbuf_t *filedata = NULL;
+ const char *username = NULL, *password = NULL;
+ const char *root_url = NULL, *extra_args_file = NULL;
+ const char *config_dir = NULL;
+ apr_array_header_t *config_options;
+ svn_boolean_t non_interactive = FALSE;
+ svn_boolean_t force_interactive = FALSE;
+ svn_boolean_t trust_server_cert = FALSE;
+ svn_boolean_t no_auth_cache = FALSE;
+ svn_revnum_t base_revision = SVN_INVALID_REVNUM;
+ apr_array_header_t *action_args;
+ apr_hash_t *revprops = apr_hash_make(pool);
+ int i;
+
+ config_options = apr_array_make(pool, 0,
+ sizeof(svn_cmdline__config_argument_t*));
+
+ apr_getopt_init(&opts, pool, argc, argv);
+ opts->interleave = 1;
+ while (1)
+ {
+ int opt;
+ const char *arg;
+ const char *opt_arg;
+
+ apr_status_t status = apr_getopt_long(opts, options, &opt, &arg);
+ if (APR_STATUS_IS_EOF(status))
+ break;
+ if (status != APR_SUCCESS)
+ handle_error(svn_error_wrap_apr(status, "getopt failure"), pool);
+ switch(opt)
+ {
+ case 'm':
+ err = svn_utf_cstring_to_utf8(&message, arg, pool);
+ if (err)
+ handle_error(err, pool);
+ break;
+ case 'F':
+ {
+ const char *arg_utf8;
+ err = svn_utf_cstring_to_utf8(&arg_utf8, arg, pool);
+ if (! err)
+ err = svn_stringbuf_from_file2(&filedata, arg, pool);
+ if (err)
+ handle_error(err, pool);
+ }
+ break;
+ case 'u':
+ username = apr_pstrdup(pool, arg);
+ break;
+ case 'p':
+ password = apr_pstrdup(pool, arg);
+ break;
+ case 'U':
+ err = svn_utf_cstring_to_utf8(&root_url, arg, pool);
+ if (err)
+ handle_error(err, pool);
+ if (! svn_path_is_url(root_url))
+ handle_error(svn_error_createf(SVN_ERR_INCORRECT_PARAMS, NULL,
+ "'%s' is not a URL\n", root_url),
+ pool);
+ root_url = sanitize_url(root_url, pool);
+ break;
+ case 'r':
+ {
+ char *digits_end = NULL;
+ base_revision = strtol(arg, &digits_end, 10);
+ if ((! SVN_IS_VALID_REVNUM(base_revision))
+ || (! digits_end)
+ || *digits_end)
+ handle_error(svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR,
+ NULL, "Invalid revision number"),
+ pool);
+ }
+ break;
+ case with_revprop_opt:
+ err = svn_opt_parse_revprop(&revprops, arg, pool);
+ if (err != SVN_NO_ERROR)
+ handle_error(err, pool);
+ break;
+ case 'X':
+ extra_args_file = apr_pstrdup(pool, arg);
+ break;
+ case non_interactive_opt:
+ non_interactive = TRUE;
+ break;
+ case force_interactive_opt:
+ force_interactive = TRUE;
+ break;
+ case trust_server_cert_opt:
+ trust_server_cert = TRUE;
+ break;
+ case config_dir_opt:
+ err = svn_utf_cstring_to_utf8(&config_dir, arg, pool);
+ if (err)
+ handle_error(err, pool);
+ break;
+ case config_inline_opt:
+ err = svn_utf_cstring_to_utf8(&opt_arg, arg, pool);
+ if (err)
+ handle_error(err, pool);
+
+ err = svn_cmdline__parse_config_option(config_options, opt_arg,
+ pool);
+ if (err)
+ handle_error(err, pool);
+ break;
+ case no_auth_cache_opt:
+ no_auth_cache = TRUE;
+ break;
+ case version_opt:
+ SVN_INT_ERR(display_version(opts, pool));
+ exit(EXIT_SUCCESS);
+ break;
+ case 'h':
+ case '?':
+ usage(pool, EXIT_SUCCESS);
+ break;
+ }
+ }
+
+ if (non_interactive && force_interactive)
+ {
+ err = svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("--non-interactive and --force-interactive "
+ "are mutually exclusive"));
+ return svn_cmdline_handle_exit_error(err, pool, "svnmucc: ");
+ }
+ else
+ non_interactive = !svn_cmdline__be_interactive(non_interactive,
+ force_interactive);
+
+ if (trust_server_cert && !non_interactive)
+ {
+ err = svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("--trust-server-cert requires "
+ "--non-interactive"));
+ return svn_cmdline_handle_exit_error(err, pool, "svnmucc: ");
+ }
+
+ /* Make sure we have a log message to use. */
+ err = sanitize_log_sources(revprops, message, filedata);
+ if (err)
+ handle_error(err, pool);
+
+ /* Copy the rest of our command-line arguments to an array,
+ UTF-8-ing them along the way. */
+ action_args = apr_array_make(pool, opts->argc, sizeof(const char *));
+ while (opts->ind < opts->argc)
+ {
+ const char *arg = opts->argv[opts->ind++];
+ if ((err = svn_utf_cstring_to_utf8(&(APR_ARRAY_PUSH(action_args,
+ const char *)),
+ arg, pool)))
+ handle_error(err, pool);
+ }
+
+ /* If there are extra arguments in a supplementary file, tack those
+ on, too (again, in UTF8 form). */
+ if (extra_args_file)
+ {
+ const char *extra_args_file_utf8;
+ svn_stringbuf_t *contents, *contents_utf8;
+
+ err = svn_utf_cstring_to_utf8(&extra_args_file_utf8,
+ extra_args_file, pool);
+ if (! err)
+ err = svn_stringbuf_from_file2(&contents, extra_args_file_utf8, pool);
+ if (! err)
+ err = svn_utf_stringbuf_to_utf8(&contents_utf8, contents, pool);
+ if (err)
+ handle_error(err, pool);
+ svn_cstring_split_append(action_args, contents_utf8->data, "\n\r",
+ FALSE, pool);
+ }
+
+ /* Now, we iterate over the combined set of arguments -- our actions. */
+ for (i = 0; i < action_args->nelts; )
+ {
+ int j, num_url_args;
+ const char *action_string = APR_ARRAY_IDX(action_args, i, const char *);
+ struct action *action = apr_pcalloc(pool, sizeof(*action));
+
+ /* First, parse the action. */
+ if (! strcmp(action_string, "mv"))
+ action->action = ACTION_MV;
+ else if (! strcmp(action_string, "cp"))
+ action->action = ACTION_CP;
+ else if (! strcmp(action_string, "mkdir"))
+ action->action = ACTION_MKDIR;
+ else if (! strcmp(action_string, "rm"))
+ action->action = ACTION_RM;
+ else if (! strcmp(action_string, "put"))
+ action->action = ACTION_PUT;
+ else if (! strcmp(action_string, "propset"))
+ action->action = ACTION_PROPSET;
+ else if (! strcmp(action_string, "propsetf"))
+ action->action = ACTION_PROPSETF;
+ else if (! strcmp(action_string, "propdel"))
+ action->action = ACTION_PROPDEL;
+ else if (! strcmp(action_string, "?") || ! strcmp(action_string, "h")
+ || ! strcmp(action_string, "help"))
+ usage(pool, EXIT_SUCCESS);
+ else
+ handle_error(svn_error_createf(SVN_ERR_INCORRECT_PARAMS, NULL,
+ "'%s' is not an action\n",
+ action_string), pool);
+ if (++i == action_args->nelts)
+ insufficient(pool);
+
+ /* For copies, there should be a revision number next. */
+ if (action->action == ACTION_CP)
+ {
+ const char *rev_str = APR_ARRAY_IDX(action_args, i, const char *);
+ if (strcmp(rev_str, "head") == 0)
+ action->rev = SVN_INVALID_REVNUM;
+ else if (strcmp(rev_str, "HEAD") == 0)
+ action->rev = SVN_INVALID_REVNUM;
+ else
+ {
+ char *end;
+
+ while (*rev_str == 'r')
+ ++rev_str;
+
+ action->rev = strtol(rev_str, &end, 0);
+ if (*end)
+ handle_error(svn_error_createf(SVN_ERR_INCORRECT_PARAMS, NULL,
+ "'%s' is not a revision\n",
+ rev_str), pool);
+ }
+ if (++i == action_args->nelts)
+ insufficient(pool);
+ }
+ else
+ {
+ action->rev = SVN_INVALID_REVNUM;
+ }
+
+ /* For puts, there should be a local file next. */
+ if (action->action == ACTION_PUT)
+ {
+ action->path[1] =
+ svn_dirent_internal_style(APR_ARRAY_IDX(action_args, i,
+ const char *), pool);
+ if (++i == action_args->nelts)
+ insufficient(pool);
+ }
+
+ /* For propset, propsetf, and propdel, a property name (and
+ maybe a property value or file which contains one) comes next. */
+ if ((action->action == ACTION_PROPSET)
+ || (action->action == ACTION_PROPSETF)
+ || (action->action == ACTION_PROPDEL))
+ {
+ action->prop_name = APR_ARRAY_IDX(action_args, i, const char *);
+ if (++i == action_args->nelts)
+ insufficient(pool);
+
+ if (action->action == ACTION_PROPDEL)
+ {
+ action->prop_value = NULL;
+ }
+ else if (action->action == ACTION_PROPSET)
+ {
+ action->prop_value =
+ svn_string_create(APR_ARRAY_IDX(action_args, i,
+ const char *), pool);
+ if (++i == action_args->nelts)
+ insufficient(pool);
+ }
+ else
+ {
+ const char *propval_file =
+ svn_dirent_internal_style(APR_ARRAY_IDX(action_args, i,
+ const char *), pool);
+
+ if (++i == action_args->nelts)
+ insufficient(pool);
+
+ err = read_propvalue_file(&(action->prop_value),
+ propval_file, pool);
+ if (err)
+ handle_error(err, pool);
+
+ action->action = ACTION_PROPSET;
+ }
+
+ if (action->prop_value
+ && svn_prop_needs_translation(action->prop_name))
+ {
+ svn_string_t *translated_value;
+ err = svn_subst_translate_string2(&translated_value, NULL,
+ NULL, action->prop_value, NULL,
+ FALSE, pool, pool);
+ if (err)
+ handle_error(
+ svn_error_quick_wrap(err,
+ "Error normalizing property value"),
+ pool);
+ action->prop_value = translated_value;
+ }
+ }
+
+ /* How many URLs does this action expect? */
+ if (action->action == ACTION_RM
+ || action->action == ACTION_MKDIR
+ || action->action == ACTION_PUT
+ || action->action == ACTION_PROPSET
+ || action->action == ACTION_PROPSETF /* shouldn't see this one */
+ || action->action == ACTION_PROPDEL)
+ num_url_args = 1;
+ else
+ num_url_args = 2;
+
+ /* Parse the required number of URLs. */
+ for (j = 0; j < num_url_args; ++j)
+ {
+ const char *url = APR_ARRAY_IDX(action_args, i, const char *);
+
+ /* If there's a ROOT_URL, we expect URL to be a path
+ relative to ROOT_URL (and we build a full url from the
+ combination of the two). Otherwise, it should be a full
+ url. */
+ if (! svn_path_is_url(url))
+ {
+ if (! root_url)
+ handle_error(svn_error_createf(SVN_ERR_INCORRECT_PARAMS, NULL,
+ "'%s' is not a URL, and "
+ "--root-url (-U) not provided\n",
+ url), pool);
+ /* ### These relpaths are already URI-encoded. */
+ url = apr_pstrcat(pool, root_url, "/",
+ svn_relpath_canonicalize(url, pool),
+ (char *)NULL);
+ }
+ url = sanitize_url(url, pool);
+ action->path[j] = url;
+
+ /* The first URL arguments to 'cp', 'pd', 'ps' could be the anchor,
+ but the other URLs should be children of the anchor. */
+ if (! (action->action == ACTION_CP && j == 0)
+ && action->action != ACTION_PROPDEL
+ && action->action != ACTION_PROPSET
+ && action->action != ACTION_PROPSETF)
+ url = svn_uri_dirname(url, pool);
+ if (! anchor)
+ anchor = url;
+ else
+ {
+ anchor = svn_uri_get_longest_ancestor(anchor, url, pool);
+ if (!anchor || !anchor[0])
+ handle_error(svn_error_createf(SVN_ERR_INCORRECT_PARAMS, NULL,
+ "URLs in the action list do not "
+ "share a common ancestor"),
+ pool);
+ }
+
+ if ((++i == action_args->nelts) && (j + 1 < num_url_args))
+ insufficient(pool);
+ }
+ APR_ARRAY_PUSH(actions, struct action *) = action;
+ }
+
+ if (! actions->nelts)
+ usage(pool, EXIT_FAILURE);
+
+ if ((err = execute(actions, anchor, revprops, username, password,
+ config_dir, config_options, non_interactive,
+ trust_server_cert, no_auth_cache, base_revision, pool)))
+ {
+ if (err->apr_err == SVN_ERR_AUTHN_FAILED && non_interactive)
+ err = svn_error_quick_wrap(err,
+ _("Authentication failed and interactive"
+ " prompting is disabled; see the"
+ " --force-interactive option"));
+ handle_error(err, pool);
+ }
+
+ /* Ensure that stdout is flushed, so the user will see all results. */
+ svn_error_clear(svn_cmdline_fflush(stdout));
+
+ svn_pool_destroy(pool);
+ return EXIT_SUCCESS;
+}
diff --git a/subversion/svnrdump/dump_editor.c b/subversion/svnrdump/dump_editor.c
index c51becd..faf029f 100644
--- a/subversion/svnrdump/dump_editor.c
+++ b/subversion/svnrdump/dump_editor.c
@@ -30,9 +30,12 @@
#include "svn_subst.h"
#include "svn_dirent_uri.h"
-#include "private/svn_fspath.h"
+#include "private/svn_subr_private.h"
+#include "private/svn_dep_compat.h"
+#include "private/svn_editor.h"
#include "svnrdump.h"
+#include <assert.h>
#define ARE_VALID_COPY_ARGS(p,r) ((p) && SVN_IS_VALID_REVNUM(r))
@@ -49,24 +52,72 @@ struct dir_baton
struct dump_edit_baton *eb;
struct dir_baton *parent_dir_baton;
+ /* Pool for per-directory allocations */
+ apr_pool_t *pool;
+
/* is this directory a new addition to this revision? */
svn_boolean_t added;
/* has this directory been written to the output stream? */
svn_boolean_t written_out;
- /* the absolute path to this directory */
- const char *abspath; /* an fspath */
+ /* the path to this directory */
+ const char *repos_relpath; /* a relpath */
/* Copyfrom info for the node, if any. */
const char *copyfrom_path; /* a relpath */
svn_revnum_t copyfrom_rev;
+ /* Properties which were modified during change_dir_prop. */
+ apr_hash_t *props;
+
+ /* Properties which were deleted during change_dir_prop. */
+ apr_hash_t *deleted_props;
+
/* Hash of paths that need to be deleted, though some -might- be
replaced. Maps const char * paths to this dir_baton. Note that
they're full paths, because that's what the editor driver gives
us, although they're all really within this directory. */
apr_hash_t *deleted_entries;
+
+ /* Flags to trigger dumping props and record termination newlines. */
+ svn_boolean_t dump_props;
+ svn_boolean_t dump_newlines;
+};
+
+/* A file baton used by all file-related callback functions in the dump
+ * editor */
+struct file_baton
+{
+ struct dump_edit_baton *eb;
+ struct dir_baton *parent_dir_baton;
+
+ /* Pool for per-file allocations */
+ apr_pool_t *pool;
+
+ /* the path to this file */
+ const char *repos_relpath; /* a relpath */
+
+ /* Properties which were modified during change_file_prop. */
+ apr_hash_t *props;
+
+ /* Properties which were deleted during change_file_prop. */
+ apr_hash_t *deleted_props;
+
+ /* The checksum of the file the delta is being applied to */
+ const char *base_checksum;
+
+ /* Copy state and source information (if any). */
+ svn_boolean_t is_copy;
+ const char *copyfrom_path;
+ svn_revnum_t copyfrom_rev;
+
+ /* The action associate with this node. */
+ enum svn_node_action action;
+
+ /* Flags to trigger dumping props and text. */
+ svn_boolean_t dump_text;
+ svn_boolean_t dump_props;
};
/* A handler baton to be used in window_handler(). */
@@ -81,20 +132,19 @@ struct dump_edit_baton {
/* The output stream we write the dumpfile to */
svn_stream_t *stream;
- /* Pool for per-revision allocations */
- apr_pool_t *pool;
+ /* A backdoor ra session to fetch additional information during the edit. */
+ svn_ra_session_t *ra_session;
- /* Properties which were modified during change_file_prop
- * or change_dir_prop. */
- apr_hash_t *props;
-
- /* Properties which were deleted during change_file_prop
- * or change_dir_prop. */
- apr_hash_t *deleted_props;
+ /* The repository relpath of the anchor of the editor when driven
+ via the RA update mechanism; NULL otherwise. (When the editor is
+ driven via the RA "replay" mechanism instead, the editor is
+ always anchored at the repository, we don't need to prepend an
+ anchor path to the dumped node paths, and open_root() doesn't
+ need to manufacture directory additions.) */
+ const char *update_anchor_relpath;
- /* Temporary buffer to write property hashes to in human-readable
- * form. ### Is this really needed? */
- svn_stringbuf_t *propstring;
+ /* Pool for per-revision allocations */
+ apr_pool_t *pool;
/* Temporary file used for textdelta application along with its
absolute path; these two variables should be allocated in the
@@ -102,13 +152,14 @@ struct dump_edit_baton {
const char *delta_abspath;
apr_file_t *delta_file;
- /* The checksum of the file the delta is being applied to */
- const char *base_checksum;
+ /* The revision we're currently dumping. */
+ svn_revnum_t current_revision;
- /* Flags to trigger dumping props and text */
- svn_boolean_t dump_text;
- svn_boolean_t dump_props;
- svn_boolean_t dump_newlines;
+ /* The kind (file or directory) and baton of the item whose block of
+ dump stream data has not been fully completed; NULL if there's no
+ such item. */
+ svn_node_kind_t pending_kind;
+ void *pending_baton;
};
/* Make a directory baton to represent the directory at PATH (relative
@@ -119,32 +170,28 @@ struct dump_edit_baton {
* information is valid, the directory will be compared against its
* copy source.
*
- * PARENT_DIR_BATON is the directory baton of this directory's parent,
- * or NULL if this is the top-level directory of the edit. ADDED
- * indicates if this directory is newly added in this revision.
- * Perform all allocations in POOL. */
+ * PB is the directory baton of this directory's parent, or NULL if
+ * this is the top-level directory of the edit. ADDED indicates if
+ * this directory is newly added in this revision. Perform all
+ * allocations in POOL. */
static struct dir_baton *
make_dir_baton(const char *path,
const char *copyfrom_path,
svn_revnum_t copyfrom_rev,
void *edit_baton,
- void *parent_dir_baton,
+ struct dir_baton *pb,
svn_boolean_t added,
apr_pool_t *pool)
{
struct dump_edit_baton *eb = edit_baton;
- struct dir_baton *pb = parent_dir_baton;
struct dir_baton *new_db = apr_pcalloc(pool, sizeof(*new_db));
- const char *abspath;
+ const char *repos_relpath;
/* Construct the full path of this node. */
- /* ### FIXME: Not sure why we use an abspath here. If I understand
- ### correctly, the only place we used this path is in dump_node(),
- ### which immediately converts it into a relpath. -- cmpilato. */
if (pb)
- abspath = svn_fspath__canonicalize(path, pool);
+ repos_relpath = svn_relpath_canonicalize(path, pool);
else
- abspath = "/";
+ repos_relpath = "";
/* Strip leading slash from copyfrom_path so that the path is
canonical and svn_relpath_join can be used */
@@ -153,68 +200,133 @@ make_dir_baton(const char *path,
new_db->eb = eb;
new_db->parent_dir_baton = pb;
- new_db->abspath = abspath;
- new_db->copyfrom_path = copyfrom_path;
+ new_db->pool = pool;
+ new_db->repos_relpath = repos_relpath;
+ new_db->copyfrom_path = copyfrom_path
+ ? svn_relpath_canonicalize(copyfrom_path, pool)
+ : NULL;
new_db->copyfrom_rev = copyfrom_rev;
new_db->added = added;
new_db->written_out = FALSE;
+ new_db->props = apr_hash_make(pool);
+ new_db->deleted_props = apr_hash_make(pool);
new_db->deleted_entries = apr_hash_make(pool);
return new_db;
}
-/* Extract and dump properties stored in edit baton EB, using POOL for
- * any temporary allocations. If TRIGGER_VAR is not NULL, it is set to FALSE.
- * Unless DUMP_DATA_TOO is set, only property headers are dumped.
- */
+/* Make a file baton to represent the directory at PATH (relative to
+ * PB->eb). PB is the directory baton of this directory's parent, or
+ * NULL if this is the top-level directory of the edit. Perform all
+ * allocations in POOL. */
+static struct file_baton *
+make_file_baton(const char *path,
+ struct dir_baton *pb,
+ apr_pool_t *pool)
+{
+ struct file_baton *new_fb = apr_pcalloc(pool, sizeof(*new_fb));
+
+ new_fb->eb = pb->eb;
+ new_fb->parent_dir_baton = pb;
+ new_fb->pool = pool;
+ new_fb->repos_relpath = svn_relpath_canonicalize(path, pool);
+ new_fb->props = apr_hash_make(pool);
+ new_fb->deleted_props = apr_hash_make(pool);
+ new_fb->is_copy = FALSE;
+ new_fb->copyfrom_path = NULL;
+ new_fb->copyfrom_rev = SVN_INVALID_REVNUM;
+ new_fb->action = svn_node_action_change;
+
+ return new_fb;
+}
+
+/* Return in *HEADER and *CONTENT the headers and content for PROPS. */
static svn_error_t *
-do_dump_props(struct dump_edit_baton *eb,
- svn_boolean_t *trigger_var,
- svn_boolean_t dump_data_too,
- apr_pool_t *pool)
+get_props_content(svn_stringbuf_t **header,
+ svn_stringbuf_t **content,
+ apr_hash_t *props,
+ apr_hash_t *deleted_props,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- svn_stream_t *propstream;
+ svn_stream_t *content_stream;
apr_hash_t *normal_props;
+ const char *buf;
- if (trigger_var && !*trigger_var)
- return SVN_NO_ERROR;
+ *content = svn_stringbuf_create_empty(result_pool);
+ *header = svn_stringbuf_create_empty(result_pool);
- SVN_ERR(svn_rdump__normalize_props(&normal_props, eb->props, eb->pool));
- svn_stringbuf_setempty(eb->propstring);
- propstream = svn_stream_from_stringbuf(eb->propstring, eb->pool);
- SVN_ERR(svn_hash_write_incremental(normal_props, eb->deleted_props,
- propstream, "PROPS-END", pool));
- SVN_ERR(svn_stream_close(propstream));
+ content_stream = svn_stream_from_stringbuf(*content, scratch_pool);
+
+ SVN_ERR(svn_rdump__normalize_props(&normal_props, props, scratch_pool));
+ SVN_ERR(svn_hash_write_incremental(normal_props, deleted_props,
+ content_stream, "PROPS-END",
+ scratch_pool));
+ SVN_ERR(svn_stream_close(content_stream));
/* Prop-delta: true */
- SVN_ERR(svn_stream_printf(eb->stream, pool,
- SVN_REPOS_DUMPFILE_PROP_DELTA
- ": true\n"));
+ *header = svn_stringbuf_createf(result_pool, SVN_REPOS_DUMPFILE_PROP_DELTA
+ ": true\n");
/* Prop-content-length: 193 */
- SVN_ERR(svn_stream_printf(eb->stream, pool,
- SVN_REPOS_DUMPFILE_PROP_CONTENT_LENGTH
- ": %" APR_SIZE_T_FMT "\n", eb->propstring->len));
+ buf = apr_psprintf(scratch_pool, SVN_REPOS_DUMPFILE_PROP_CONTENT_LENGTH
+ ": %" APR_SIZE_T_FMT "\n", (*content)->len);
+ svn_stringbuf_appendcstr(*header, buf);
+
+ return SVN_NO_ERROR;
+}
+
+/* Extract and dump properties stored in PROPS and property deletions
+ * stored in DELETED_PROPS. If TRIGGER_VAR is not NULL, it is set to
+ * FALSE.
+ *
+ * If PROPSTRING is non-NULL, set *PROPSTRING to a string containing
+ * the content block of the property changes; otherwise, dump that to
+ * the stream, too.
+ */
+static svn_error_t *
+do_dump_props(svn_stringbuf_t **propstring,
+ svn_stream_t *stream,
+ apr_hash_t *props,
+ apr_hash_t *deleted_props,
+ svn_boolean_t *trigger_var,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_stringbuf_t *header;
+ svn_stringbuf_t *content;
+ apr_size_t len;
- if (dump_data_too)
+ if (trigger_var && !*trigger_var)
+ return SVN_NO_ERROR;
+
+ SVN_ERR(get_props_content(&header, &content, props, deleted_props,
+ result_pool, scratch_pool));
+ len = header->len;
+ SVN_ERR(svn_stream_write(stream, header->data, &len));
+
+ if (propstring)
+ {
+ *propstring = content;
+ }
+ else
{
/* Content-length: 14 */
- SVN_ERR(svn_stream_printf(eb->stream, pool,
+ SVN_ERR(svn_stream_printf(stream, scratch_pool,
SVN_REPOS_DUMPFILE_CONTENT_LENGTH
": %" APR_SIZE_T_FMT "\n\n",
- eb->propstring->len));
+ content->len));
- /* The properties. */
- SVN_ERR(svn_stream_write(eb->stream, eb->propstring->data,
- &(eb->propstring->len)));
+ len = content->len;
+ SVN_ERR(svn_stream_write(stream, content->data, &len));
/* No text is going to be dumped. Write a couple of newlines and
wait for the next node/ revision. */
- SVN_ERR(svn_stream_printf(eb->stream, pool, "\n\n"));
+ SVN_ERR(svn_stream_puts(stream, "\n\n"));
/* Cleanup so that data is never dumped twice. */
- SVN_ERR(svn_hash__clear(eb->props, eb->pool));
- SVN_ERR(svn_hash__clear(eb->deleted_props, eb->pool));
+ apr_hash_clear(props);
+ apr_hash_clear(deleted_props);
if (trigger_var)
*trigger_var = FALSE;
}
@@ -229,7 +341,7 @@ do_dump_newlines(struct dump_edit_baton *eb,
{
if (trigger_var && *trigger_var)
{
- SVN_ERR(svn_stream_printf(eb->stream, pool, "\n\n"));
+ SVN_ERR(svn_stream_puts(eb->stream, "\n\n"));
*trigger_var = FALSE;
}
return SVN_NO_ERROR;
@@ -248,30 +360,36 @@ do_dump_newlines(struct dump_edit_baton *eb,
*/
static svn_error_t *
dump_node(struct dump_edit_baton *eb,
- const char *path, /* an absolute path. */
- svn_node_kind_t kind,
+ const char *repos_relpath,
+ struct dir_baton *db,
+ struct file_baton *fb,
enum svn_node_action action,
svn_boolean_t is_copy,
const char *copyfrom_path,
svn_revnum_t copyfrom_rev,
apr_pool_t *pool)
{
- /* Remove leading slashes from path and copyfrom_path */
- if (path)
- path = svn_relpath_canonicalize(path, pool);
+ const char *node_relpath = repos_relpath;
- if (copyfrom_path)
- copyfrom_path = svn_relpath_canonicalize(copyfrom_path, pool);
+ assert(svn_relpath_is_canonical(repos_relpath));
+ assert(!copyfrom_path || svn_relpath_is_canonical(copyfrom_path));
+ assert(! (db && fb));
- /* Node-path: commons/STATUS */
+ /* Add the edit root relpath prefix if necessary. */
+ if (eb->update_anchor_relpath)
+ node_relpath = svn_relpath_join(eb->update_anchor_relpath,
+ node_relpath, pool);
+
+ /* Node-path: ... */
SVN_ERR(svn_stream_printf(eb->stream, pool,
- SVN_REPOS_DUMPFILE_NODE_PATH ": %s\n", path));
+ SVN_REPOS_DUMPFILE_NODE_PATH ": %s\n",
+ node_relpath));
- /* Node-kind: file */
- if (kind == svn_node_file)
+ /* Node-kind: "file" | "dir" */
+ if (fb)
SVN_ERR(svn_stream_printf(eb->stream, pool,
SVN_REPOS_DUMPFILE_NODE_KIND ": file\n"));
- else if (kind == svn_node_dir)
+ else if (db)
SVN_ERR(svn_stream_printf(eb->stream, pool,
SVN_REPOS_DUMPFILE_NODE_KIND ": dir\n"));
@@ -282,88 +400,99 @@ dump_node(struct dump_edit_baton *eb,
case svn_node_action_change:
/* We are here after a change_file_prop or change_dir_prop. They
set up whatever dump_props they needed to- nothing to
- do here but print node action information */
- SVN_ERR(svn_stream_printf(eb->stream, pool,
- SVN_REPOS_DUMPFILE_NODE_ACTION
- ": change\n"));
+ do here but print node action information.
+
+ Node-action: change. */
+ SVN_ERR(svn_stream_puts(eb->stream,
+ SVN_REPOS_DUMPFILE_NODE_ACTION ": change\n"));
break;
case svn_node_action_replace:
- if (!is_copy)
+ if (is_copy)
+ {
+ /* Delete the original, and then re-add the replacement as a
+ copy using recursive calls into this function. */
+ SVN_ERR(dump_node(eb, repos_relpath, db, fb, svn_node_action_delete,
+ FALSE, NULL, SVN_INVALID_REVNUM, pool));
+ SVN_ERR(dump_node(eb, repos_relpath, db, fb, svn_node_action_add,
+ is_copy, copyfrom_path, copyfrom_rev, pool));
+ }
+ else
{
/* Node-action: replace */
- SVN_ERR(svn_stream_printf(eb->stream, pool,
- SVN_REPOS_DUMPFILE_NODE_ACTION
- ": replace\n"));
+ SVN_ERR(svn_stream_puts(eb->stream,
+ SVN_REPOS_DUMPFILE_NODE_ACTION
+ ": replace\n"));
/* Wait for a change_*_prop to be called before dumping
anything */
- eb->dump_props = TRUE;
- break;
+ if (fb)
+ fb->dump_props = TRUE;
+ else if (db)
+ db->dump_props = TRUE;
}
- /* More complex case: is_copy is true, and copyfrom_path/
- copyfrom_rev are present: delete the original, and then re-add
- it */
-
- SVN_ERR(svn_stream_printf(eb->stream, pool,
- SVN_REPOS_DUMPFILE_NODE_ACTION
- ": delete\n\n"));
-
- /* Recurse: Print an additional add-with-history record. */
- SVN_ERR(dump_node(eb, path, kind, svn_node_action_add,
- is_copy, copyfrom_path, copyfrom_rev, pool));
-
- /* We can leave this routine quietly now, don't need to dump any
- content; that was already done in the second record. */
break;
case svn_node_action_delete:
- SVN_ERR(svn_stream_printf(eb->stream, pool,
- SVN_REPOS_DUMPFILE_NODE_ACTION
- ": delete\n"));
+ /* Node-action: delete */
+ SVN_ERR(svn_stream_puts(eb->stream,
+ SVN_REPOS_DUMPFILE_NODE_ACTION ": delete\n"));
/* We can leave this routine quietly now. Nothing more to do-
print a couple of newlines because we're not dumping props or
text. */
- SVN_ERR(svn_stream_printf(eb->stream, pool, "\n\n"));
+ SVN_ERR(svn_stream_puts(eb->stream, "\n\n"));
+
break;
case svn_node_action_add:
- SVN_ERR(svn_stream_printf(eb->stream, pool,
- SVN_REPOS_DUMPFILE_NODE_ACTION ": add\n"));
+ /* Node-action: add */
+ SVN_ERR(svn_stream_puts(eb->stream,
+ SVN_REPOS_DUMPFILE_NODE_ACTION ": add\n"));
- if (!is_copy)
+ if (is_copy)
{
- /* eb->dump_props for files is handled in close_file
- which is called immediately. However, directories are not
- closed until all the work inside them has been done;
- eb->dump_props for directories is handled in all the
- functions that can possibly be called after add_directory:
- add_directory, open_directory, delete_entry, close_directory,
- add_file, open_file. change_dir_prop is a special case. */
-
- /* Wait for a change_*_prop to be called before dumping
- anything */
- eb->dump_props = TRUE;
- break;
+ /* Node-copyfrom-rev / Node-copyfrom-path */
+ SVN_ERR(svn_stream_printf(eb->stream, pool,
+ SVN_REPOS_DUMPFILE_NODE_COPYFROM_REV
+ ": %ld\n"
+ SVN_REPOS_DUMPFILE_NODE_COPYFROM_PATH
+ ": %s\n",
+ copyfrom_rev, copyfrom_path));
+
+ /* Ugly hack: If a directory was copied from a previous
+ revision, nothing like close_file() will be called to write two
+ blank lines. If change_dir_prop() is called, props are dumped
+ (along with the necessary PROPS-END\n\n and we're good. So
+ set DUMP_NEWLINES here to print the newlines unless
+ change_dir_prop() is called next otherwise the `svnadmin load`
+ parser will fail. */
+ if (db)
+ db->dump_newlines = TRUE;
+ }
+ else
+ {
+ /* fb->dump_props (for files) is handled in close_file()
+ which is called immediately.
+
+ However, directories are not closed until all the work
+ inside them has been done; db->dump_props (for directories)
+ is handled (via dump_pending()) in all the functions that
+ can possibly be called after add_directory():
+
+ - add_directory()
+ - open_directory()
+ - delete_entry()
+ - close_directory()
+ - add_file()
+ - open_file()
+
+ change_dir_prop() is a special case. */
+ if (fb)
+ fb->dump_props = TRUE;
+ else if (db)
+ db->dump_props = TRUE;
}
-
- SVN_ERR(svn_stream_printf(eb->stream, pool,
- SVN_REPOS_DUMPFILE_NODE_COPYFROM_REV
- ": %ld\n"
- SVN_REPOS_DUMPFILE_NODE_COPYFROM_PATH
- ": %s\n",
- copyfrom_rev, copyfrom_path));
-
- /* Ugly hack: If a directory was copied from a previous
- revision, nothing like close_file() will be called to write two
- blank lines. If change_dir_prop() is called, props are dumped
- (along with the necessary PROPS-END\n\n and we're good. So
- set DUMP_NEWLINES here to print the newlines unless
- change_dir_prop() is called next otherwise the `svnadmin load`
- parser will fail. */
- if (kind == svn_node_dir)
- eb->dump_newlines = TRUE;
break;
}
@@ -371,24 +500,156 @@ dump_node(struct dump_edit_baton *eb,
}
static svn_error_t *
+dump_mkdir(struct dump_edit_baton *eb,
+ const char *repos_relpath,
+ apr_pool_t *pool)
+{
+ svn_stringbuf_t *prop_header, *prop_content;
+ apr_size_t len;
+ const char *buf;
+
+ /* Node-path: ... */
+ SVN_ERR(svn_stream_printf(eb->stream, pool,
+ SVN_REPOS_DUMPFILE_NODE_PATH ": %s\n",
+ repos_relpath));
+
+ /* Node-kind: dir */
+ SVN_ERR(svn_stream_printf(eb->stream, pool,
+ SVN_REPOS_DUMPFILE_NODE_KIND ": dir\n"));
+
+ /* Node-action: add */
+ SVN_ERR(svn_stream_puts(eb->stream,
+ SVN_REPOS_DUMPFILE_NODE_ACTION ": add\n"));
+
+ /* Dump the (empty) property block. */
+ SVN_ERR(get_props_content(&prop_header, &prop_content,
+ apr_hash_make(pool), apr_hash_make(pool),
+ pool, pool));
+ len = prop_header->len;
+ SVN_ERR(svn_stream_write(eb->stream, prop_header->data, &len));
+ len = prop_content->len;
+ buf = apr_psprintf(pool, SVN_REPOS_DUMPFILE_CONTENT_LENGTH
+ ": %" APR_SIZE_T_FMT "\n", len);
+ SVN_ERR(svn_stream_puts(eb->stream, buf));
+ SVN_ERR(svn_stream_puts(eb->stream, "\n"));
+ SVN_ERR(svn_stream_write(eb->stream, prop_content->data, &len));
+
+ /* Newlines to tie it all off. */
+ SVN_ERR(svn_stream_puts(eb->stream, "\n\n"));
+
+ return SVN_NO_ERROR;
+}
+
+/* Dump pending items from the specified node, to allow starting the dump
+ of a child node */
+static svn_error_t *
+dump_pending(struct dump_edit_baton *eb,
+ apr_pool_t *scratch_pool)
+{
+ if (! eb->pending_baton)
+ return SVN_NO_ERROR;
+
+ if (eb->pending_kind == svn_node_dir)
+ {
+ struct dir_baton *db = eb->pending_baton;
+
+ /* Some pending properties to dump? */
+ SVN_ERR(do_dump_props(NULL, eb->stream, db->props, db->deleted_props,
+ &(db->dump_props), db->pool, scratch_pool));
+
+ /* Some pending newlines to dump? */
+ SVN_ERR(do_dump_newlines(eb, &(db->dump_newlines), scratch_pool));
+ }
+ else if (eb->pending_kind == svn_node_file)
+ {
+ struct file_baton *fb = eb->pending_baton;
+
+ /* Some pending properties to dump? */
+ SVN_ERR(do_dump_props(NULL, eb->stream, fb->props, fb->deleted_props,
+ &(fb->dump_props), fb->pool, scratch_pool));
+ }
+ else
+ abort();
+
+ /* Anything that was pending is pending no longer. */
+ eb->pending_baton = NULL;
+ eb->pending_kind = svn_node_none;
+
+ return SVN_NO_ERROR;
+}
+
+
+
+/*** Editor Function Implementations ***/
+
+static svn_error_t *
open_root(void *edit_baton,
svn_revnum_t base_revision,
apr_pool_t *pool,
void **root_baton)
{
struct dump_edit_baton *eb = edit_baton;
+ struct dir_baton *new_db = NULL;
/* Clear the per-revision pool after each revision */
svn_pool_clear(eb->pool);
- eb->props = apr_hash_make(eb->pool);
- eb->deleted_props = apr_hash_make(eb->pool);
- eb->propstring = svn_stringbuf_create("", eb->pool);
-
- *root_baton = make_dir_baton(NULL, NULL, SVN_INVALID_REVNUM,
- edit_baton, NULL, FALSE, eb->pool);
LDR_DBG(("open_root %p\n", *root_baton));
+ if (eb->update_anchor_relpath)
+ {
+ int i;
+ const char *parent_path = eb->update_anchor_relpath;
+ apr_array_header_t *dirs_to_add =
+ apr_array_make(pool, 4, sizeof(const char *));
+ apr_pool_t *iterpool = svn_pool_create(pool);
+
+ while (! svn_path_is_empty(parent_path))
+ {
+ APR_ARRAY_PUSH(dirs_to_add, const char *) = parent_path;
+ parent_path = svn_relpath_dirname(parent_path, pool);
+ }
+
+ for (i = dirs_to_add->nelts; i; --i)
+ {
+ const char *dir_to_add =
+ APR_ARRAY_IDX(dirs_to_add, i - 1, const char *);
+
+ svn_pool_clear(iterpool);
+
+ /* For parents of the source directory, we just manufacture
+ the adds ourselves. */
+ if (i > 1)
+ {
+ SVN_ERR(dump_mkdir(eb, dir_to_add, iterpool));
+ }
+ else
+ {
+ /* ... but for the source directory itself, we'll defer
+ to letting the typical plumbing handle this task. */
+ new_db = make_dir_baton(NULL, NULL, SVN_INVALID_REVNUM,
+ edit_baton, NULL, TRUE, pool);
+ SVN_ERR(dump_node(eb, new_db->repos_relpath, new_db,
+ NULL, svn_node_action_add, FALSE,
+ NULL, SVN_INVALID_REVNUM, pool));
+
+ /* Remember that we've started but not yet finished
+ handling this directory. */
+ new_db->written_out = TRUE;
+ eb->pending_baton = new_db;
+ eb->pending_kind = svn_node_dir;
+ }
+ }
+ svn_pool_destroy(iterpool);
+ }
+
+ if (! new_db)
+ {
+ new_db = make_dir_baton(NULL, NULL, SVN_INVALID_REVNUM,
+ edit_baton, NULL, FALSE, pool);
+ }
+
+ *root_baton = new_db;
return SVN_NO_ERROR;
}
@@ -402,16 +663,13 @@ delete_entry(const char *path,
LDR_DBG(("delete_entry %s\n", path));
- /* Some pending properties to dump? */
- SVN_ERR(do_dump_props(pb->eb, &(pb->eb->dump_props), TRUE, pool));
-
- /* Some pending newlines to dump? */
- SVN_ERR(do_dump_newlines(pb->eb, &(pb->eb->dump_newlines), pool));
+ SVN_ERR(dump_pending(pb->eb, pool));
- /* Add this path to the deleted_entries of the parent directory
- baton. */
- apr_hash_set(pb->deleted_entries, apr_pstrdup(pb->eb->pool, path),
- APR_HASH_KEY_STRING, pb);
+ /* We don't dump this deletion immediate. Rather, we add this path
+ to the deleted_entries of the parent directory baton. That way,
+ we can tell (later) an addition from a replacement. All the real
+ deletions get handled in close_directory(). */
+ svn_hash_sets(pb->deleted_entries, apr_pstrdup(pb->eb->pool, path), pb);
return SVN_NO_ERROR;
}
@@ -431,35 +689,34 @@ add_directory(const char *path,
LDR_DBG(("add_directory %s\n", path));
+ SVN_ERR(dump_pending(pb->eb, pool));
+
new_db = make_dir_baton(path, copyfrom_path, copyfrom_rev, pb->eb,
pb, TRUE, pb->eb->pool);
- /* Some pending properties to dump? */
- SVN_ERR(do_dump_props(pb->eb, &(pb->eb->dump_props), TRUE, pool));
-
- /* Some pending newlines to dump? */
- SVN_ERR(do_dump_newlines(pb->eb, &(pb->eb->dump_newlines), pool));
-
/* This might be a replacement -- is the path already deleted? */
- val = apr_hash_get(pb->deleted_entries, path, APR_HASH_KEY_STRING);
+ val = svn_hash_gets(pb->deleted_entries, path);
/* Detect an add-with-history */
is_copy = ARE_VALID_COPY_ARGS(copyfrom_path, copyfrom_rev);
/* Dump the node */
- SVN_ERR(dump_node(pb->eb, path,
- svn_node_dir,
+ SVN_ERR(dump_node(pb->eb, new_db->repos_relpath, new_db, NULL,
val ? svn_node_action_replace : svn_node_action_add,
is_copy,
- is_copy ? copyfrom_path : NULL,
+ is_copy ? new_db->copyfrom_path : NULL,
is_copy ? copyfrom_rev : SVN_INVALID_REVNUM,
pool));
if (val)
/* Delete the path, it's now been dumped */
- apr_hash_set(pb->deleted_entries, path, APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(pb->deleted_entries, path, NULL);
+ /* Remember that we've started, but not yet finished handling this
+ directory. */
new_db->written_out = TRUE;
+ pb->eb->pending_baton = new_db;
+ pb->eb->pending_kind = svn_node_dir;
*child_baton = new_db;
return SVN_NO_ERROR;
@@ -479,11 +736,7 @@ open_directory(const char *path,
LDR_DBG(("open_directory %s\n", path));
- /* Some pending properties to dump? */
- SVN_ERR(do_dump_props(pb->eb, &(pb->eb->dump_props), TRUE, pool));
-
- /* Some pending newlines to dump? */
- SVN_ERR(do_dump_newlines(pb->eb, &(pb->eb->dump_newlines), pool));
+ SVN_ERR(dump_pending(pb->eb, pool));
/* If the parent directory has explicit comparison path and rev,
record the same for this one. */
@@ -497,6 +750,7 @@ open_directory(const char *path,
new_db = make_dir_baton(path, copyfrom_path, copyfrom_rev, pb->eb, pb,
FALSE, pb->eb->pool);
+
*child_baton = new_db;
return SVN_NO_ERROR;
}
@@ -506,16 +760,34 @@ close_directory(void *dir_baton,
apr_pool_t *pool)
{
struct dir_baton *db = dir_baton;
- struct dump_edit_baton *eb = db->eb;
apr_hash_index_t *hi;
+ svn_boolean_t this_pending;
LDR_DBG(("close_directory %p\n", dir_baton));
- /* Some pending properties to dump? */
- SVN_ERR(do_dump_props(eb, &(eb->dump_props), TRUE, pool));
+ /* Remember if this directory is the one currently pending. */
+ this_pending = (db->eb->pending_baton == db);
- /* Some pending newlines to dump? */
- SVN_ERR(do_dump_newlines(eb, &(eb->dump_newlines), pool));
+ SVN_ERR(dump_pending(db->eb, pool));
+
+ /* If this directory was pending, then dump_pending() should have
+ taken care of all the props and such. Of course, the only way
+ that would be the case is if this directory was added/replaced.
+
+ Otherwise, if stuff for this directory has already been written
+ out (at some point in the past, prior to our handling other
+ nodes), we might need to generate a second "change" record just
+ to carry the information we've since learned about the
+ directory. */
+ if ((! this_pending) && (db->dump_props))
+ {
+ SVN_ERR(dump_node(db->eb, db->repos_relpath, db, NULL,
+ svn_node_action_change, FALSE,
+ NULL, SVN_INVALID_REVNUM, pool));
+ db->eb->pending_baton = db;
+ db->eb->pending_kind = svn_node_dir;
+ SVN_ERR(dump_pending(db->eb, pool));
+ }
/* Dump the deleted directory entries */
for (hi = apr_hash_first(pool, db->deleted_entries); hi;
@@ -523,11 +795,13 @@ close_directory(void *dir_baton,
{
const char *path = svn__apr_hash_index_key(hi);
- SVN_ERR(dump_node(db->eb, path, svn_node_unknown, svn_node_action_delete,
+ SVN_ERR(dump_node(db->eb, path, NULL, NULL, svn_node_action_delete,
FALSE, NULL, SVN_INVALID_REVNUM, pool));
}
- SVN_ERR(svn_hash__clear(db->deleted_entries, pool));
+ /* ### should be unnecessary */
+ apr_hash_clear(db->deleted_entries);
+
return SVN_NO_ERROR;
}
@@ -540,40 +814,33 @@ add_file(const char *path,
void **file_baton)
{
struct dir_baton *pb = parent_baton;
+ struct file_baton *fb;
void *val;
- svn_boolean_t is_copy;
LDR_DBG(("add_file %s\n", path));
- /* Some pending properties to dump? */
- SVN_ERR(do_dump_props(pb->eb, &(pb->eb->dump_props), TRUE, pool));
+ SVN_ERR(dump_pending(pb->eb, pool));
- /* Some pending newlines to dump? */
- SVN_ERR(do_dump_newlines(pb->eb, &(pb->eb->dump_newlines), pool));
+ /* Make the file baton. */
+ fb = make_file_baton(path, pb, pool);
/* This might be a replacement -- is the path already deleted? */
- val = apr_hash_get(pb->deleted_entries, path, APR_HASH_KEY_STRING);
+ val = svn_hash_gets(pb->deleted_entries, path);
/* Detect add-with-history. */
- is_copy = ARE_VALID_COPY_ARGS(copyfrom_path, copyfrom_rev);
-
- /* Dump the node. */
- SVN_ERR(dump_node(pb->eb, path,
- svn_node_file,
- val ? svn_node_action_replace : svn_node_action_add,
- is_copy,
- is_copy ? copyfrom_path : NULL,
- is_copy ? copyfrom_rev : SVN_INVALID_REVNUM,
- pool));
+ if (ARE_VALID_COPY_ARGS(copyfrom_path, copyfrom_rev))
+ {
+ fb->copyfrom_path = svn_relpath_canonicalize(copyfrom_path, fb->pool);
+ fb->copyfrom_rev = copyfrom_rev;
+ fb->is_copy = TRUE;
+ }
+ fb->action = val ? svn_node_action_replace : svn_node_action_add;
+ /* Delete the path, it's now been dumped. */
if (val)
- /* delete the path, it's now been dumped. */
- apr_hash_set(pb->deleted_entries, path, APR_HASH_KEY_STRING, NULL);
-
- /* Build a nice file baton to pass to change_file_prop and
- apply_textdelta */
- *file_baton = pb->eb;
+ svn_hash_sets(pb->deleted_entries, path, NULL);
+ *file_baton = fb;
return SVN_NO_ERROR;
}
@@ -585,34 +852,26 @@ open_file(const char *path,
void **file_baton)
{
struct dir_baton *pb = parent_baton;
- const char *copyfrom_path = NULL;
- svn_revnum_t copyfrom_rev = SVN_INVALID_REVNUM;
+ struct file_baton *fb;
LDR_DBG(("open_file %s\n", path));
- /* Some pending properties to dump? */
- SVN_ERR(do_dump_props(pb->eb, &(pb->eb->dump_props), TRUE, pool));
+ SVN_ERR(dump_pending(pb->eb, pool));
- /* Some pending newlines to dump? */
- SVN_ERR(do_dump_newlines(pb->eb, &(pb->eb->dump_newlines), pool));
+ /* Make the file baton. */
+ fb = make_file_baton(path, pb, pool);
/* If the parent directory has explicit copyfrom path and rev,
record the same for this one. */
if (ARE_VALID_COPY_ARGS(pb->copyfrom_path, pb->copyfrom_rev))
{
- copyfrom_path = svn_relpath_join(pb->copyfrom_path,
- svn_relpath_basename(path, NULL),
- pb->eb->pool);
- copyfrom_rev = pb->copyfrom_rev;
+ fb->copyfrom_path = svn_relpath_join(pb->copyfrom_path,
+ svn_relpath_basename(path, NULL),
+ pb->eb->pool);
+ fb->copyfrom_rev = pb->copyfrom_rev;
}
- SVN_ERR(dump_node(pb->eb, path, svn_node_file, svn_node_action_change,
- FALSE, copyfrom_path, copyfrom_rev, pool));
-
- /* Build a nice file baton to pass to change_file_prop and
- apply_textdelta */
- *file_baton = pb->eb;
-
+ *file_baton = fb;
return SVN_NO_ERROR;
}
@@ -623,37 +882,30 @@ change_dir_prop(void *parent_baton,
apr_pool_t *pool)
{
struct dir_baton *db = parent_baton;
+ svn_boolean_t this_pending;
LDR_DBG(("change_dir_prop %p\n", parent_baton));
- if (svn_property_kind(NULL, name) != svn_prop_regular_kind)
+ /* This directory is not pending, but something else is, so handle
+ the "something else". */
+ this_pending = (db->eb->pending_baton == db);
+ if (! this_pending)
+ SVN_ERR(dump_pending(db->eb, pool));
+
+ if (svn_property_kind2(name) != svn_prop_regular_kind)
return SVN_NO_ERROR;
if (value)
- apr_hash_set(db->eb->props, apr_pstrdup(db->eb->pool, name),
- APR_HASH_KEY_STRING, svn_string_dup(value, db->eb->pool));
+ svn_hash_sets(db->props,
+ apr_pstrdup(db->pool, name),
+ svn_string_dup(value, db->pool));
else
- apr_hash_set(db->eb->deleted_props, apr_pstrdup(db->eb->pool, name),
- APR_HASH_KEY_STRING, "");
-
- if (! db->written_out)
- {
- /* If db->written_out is set, it means that the node information
- corresponding to this directory has already been written: don't
- do anything; do_dump_props() will take care of dumping the
- props. If it not, dump the node itself before dumping the
- props. */
-
- SVN_ERR(dump_node(db->eb, db->abspath, svn_node_dir,
- svn_node_action_change, FALSE, db->copyfrom_path,
- db->copyfrom_rev, pool));
- db->written_out = TRUE;
- }
+ svn_hash_sets(db->deleted_props, apr_pstrdup(db->pool, name), "");
/* Make sure we eventually output the props, and disable printing
a couple of extra newlines */
- db->eb->dump_newlines = FALSE;
- db->eb->dump_props = TRUE;
+ db->dump_newlines = FALSE;
+ db->dump_props = TRUE;
return SVN_NO_ERROR;
}
@@ -664,24 +916,24 @@ change_file_prop(void *file_baton,
const svn_string_t *value,
apr_pool_t *pool)
{
- struct dump_edit_baton *eb = file_baton;
+ struct file_baton *fb = file_baton;
LDR_DBG(("change_file_prop %p\n", file_baton));
- if (svn_property_kind(NULL, name) != svn_prop_regular_kind)
+ if (svn_property_kind2(name) != svn_prop_regular_kind)
return SVN_NO_ERROR;
if (value)
- apr_hash_set(eb->props, apr_pstrdup(eb->pool, name),
- APR_HASH_KEY_STRING, svn_string_dup(value, eb->pool));
+ svn_hash_sets(fb->props,
+ apr_pstrdup(fb->pool, name),
+ svn_string_dup(value, fb->pool));
else
- apr_hash_set(eb->deleted_props, apr_pstrdup(eb->pool, name),
- APR_HASH_KEY_STRING, "");
+ svn_hash_sets(fb->deleted_props, apr_pstrdup(fb->pool, name), "");
/* Dump the property headers and wait; close_file might need
to write text headers too depending on whether
apply_textdelta is called */
- eb->dump_props = TRUE;
+ fb->dump_props = TRUE;
return SVN_NO_ERROR;
}
@@ -708,17 +960,17 @@ apply_textdelta(void *file_baton, const char *base_checksum,
svn_txdelta_window_handler_t *handler,
void **handler_baton)
{
- struct dump_edit_baton *eb = file_baton;
-
- /* Custom handler_baton allocated in a separate pool */
+ struct file_baton *fb = file_baton;
+ struct dump_edit_baton *eb = fb->eb;
struct handler_baton *hb;
svn_stream_t *delta_filestream;
- hb = apr_pcalloc(eb->pool, sizeof(*hb));
-
LDR_DBG(("apply_textdelta %p\n", file_baton));
- /* Use a temporary file to measure the text-content-length */
+ /* This is custom handler_baton, allocated from a separate pool. */
+ hb = apr_pcalloc(eb->pool, sizeof(*hb));
+
+ /* Use a temporary file to measure the Text-content-length */
delta_filestream = svn_stream_from_aprfile2(eb->delta_file, TRUE, pool);
/* Prepare to write the delta to the delta_filestream */
@@ -726,9 +978,9 @@ apply_textdelta(void *file_baton, const char *base_checksum,
delta_filestream, 0,
SVN_DELTA_COMPRESSION_LEVEL_DEFAULT, pool);
- eb->dump_text = TRUE;
- eb->base_checksum = apr_pstrdup(eb->pool, base_checksum);
- SVN_ERR(svn_stream_close(delta_filestream));
+ /* Record that there's text to be dumped, and its base checksum. */
+ fb->dump_text = TRUE;
+ fb->base_checksum = apr_pstrdup(eb->pool, base_checksum);
/* The actual writing takes place when this function has
finished. Set handler and handler_baton now so for
@@ -744,35 +996,46 @@ close_file(void *file_baton,
const char *text_checksum,
apr_pool_t *pool)
{
- struct dump_edit_baton *eb = file_baton;
+ struct file_baton *fb = file_baton;
+ struct dump_edit_baton *eb = fb->eb;
apr_finfo_t *info = apr_pcalloc(pool, sizeof(apr_finfo_t));
+ svn_stringbuf_t *propstring;
LDR_DBG(("close_file %p\n", file_baton));
- /* Some pending properties to dump? Dump just the headers- dump the
- props only after dumping the text headers too (if present) */
- SVN_ERR(do_dump_props(eb, &(eb->dump_props), FALSE, pool));
+ SVN_ERR(dump_pending(eb, pool));
+
+ /* Dump the node. */
+ SVN_ERR(dump_node(eb, fb->repos_relpath, NULL, fb,
+ fb->action, fb->is_copy, fb->copyfrom_path,
+ fb->copyfrom_rev, pool));
+
+ /* Some pending properties to dump? We'll dump just the headers for
+ now, then dump the actual propchange content only after dumping
+ the text headers too (if present). */
+ SVN_ERR(do_dump_props(&propstring, eb->stream, fb->props, fb->deleted_props,
+ &(fb->dump_props), pool, pool));
/* Dump the text headers */
- if (eb->dump_text)
+ if (fb->dump_text)
{
apr_status_t err;
/* Text-delta: true */
- SVN_ERR(svn_stream_printf(eb->stream, pool,
- SVN_REPOS_DUMPFILE_TEXT_DELTA
- ": true\n"));
+ SVN_ERR(svn_stream_puts(eb->stream,
+ SVN_REPOS_DUMPFILE_TEXT_DELTA
+ ": true\n"));
err = apr_file_info_get(info, APR_FINFO_SIZE, eb->delta_file);
if (err)
SVN_ERR(svn_error_wrap_apr(err, NULL));
- if (eb->base_checksum)
+ if (fb->base_checksum)
/* Text-delta-base-md5: */
SVN_ERR(svn_stream_printf(eb->stream, pool,
SVN_REPOS_DUMPFILE_TEXT_DELTA_BASE_MD5
": %s\n",
- eb->base_checksum));
+ fb->base_checksum));
/* Text-content-length: 39 */
SVN_ERR(svn_stream_printf(eb->stream, pool,
@@ -789,31 +1052,31 @@ close_file(void *file_baton,
/* Content-length: 1549 */
/* If both text and props are absent, skip this header */
- if (eb->dump_props)
+ if (fb->dump_props)
SVN_ERR(svn_stream_printf(eb->stream, pool,
SVN_REPOS_DUMPFILE_CONTENT_LENGTH
": %ld\n\n",
- (unsigned long)info->size + eb->propstring->len));
- else if (eb->dump_text)
+ (unsigned long)info->size + propstring->len));
+ else if (fb->dump_text)
SVN_ERR(svn_stream_printf(eb->stream, pool,
SVN_REPOS_DUMPFILE_CONTENT_LENGTH
": %ld\n\n",
(unsigned long)info->size));
/* Dump the props now */
- if (eb->dump_props)
+ if (fb->dump_props)
{
- SVN_ERR(svn_stream_write(eb->stream, eb->propstring->data,
- &(eb->propstring->len)));
+ SVN_ERR(svn_stream_write(eb->stream, propstring->data,
+ &(propstring->len)));
/* Cleanup */
- eb->dump_props = FALSE;
- SVN_ERR(svn_hash__clear(eb->props, eb->pool));
- SVN_ERR(svn_hash__clear(eb->deleted_props, eb->pool));
+ fb->dump_props = FALSE;
+ apr_hash_clear(fb->props);
+ apr_hash_clear(fb->deleted_props);
}
/* Dump the text */
- if (eb->dump_text)
+ if (fb->dump_text)
{
/* Seek to the beginning of the delta file, map it to a stream,
and copy the stream to eb->stream. Then close the stream and
@@ -830,12 +1093,11 @@ close_file(void *file_baton,
/* Cleanup */
SVN_ERR(svn_stream_close(delta_filestream));
SVN_ERR(svn_io_file_trunc(eb->delta_file, 0, pool));
- eb->dump_text = FALSE;
}
/* Write a couple of blank lines for matching output with `svnadmin
dump` */
- SVN_ERR(svn_stream_printf(eb->stream, pool, "\n\n"));
+ SVN_ERR(svn_stream_puts(eb->stream, "\n\n"));
return SVN_NO_ERROR;
}
@@ -846,19 +1108,134 @@ close_edit(void *edit_baton, apr_pool_t *pool)
return SVN_NO_ERROR;
}
+static svn_error_t *
+fetch_base_func(const char **filename,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct dump_edit_baton *eb = baton;
+ svn_stream_t *fstream;
+ svn_error_t *err;
+
+ if (path[0] == '/')
+ path += 1;
+
+ if (! SVN_IS_VALID_REVNUM(base_revision))
+ base_revision = eb->current_revision - 1;
+
+ SVN_ERR(svn_stream_open_unique(&fstream, filename, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ result_pool, scratch_pool));
+
+ err = svn_ra_get_file(eb->ra_session, path, base_revision,
+ fstream, NULL, NULL, scratch_pool);
+ if (err && err->apr_err == SVN_ERR_FS_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ SVN_ERR(svn_stream_close(fstream));
+
+ *filename = NULL;
+ return SVN_NO_ERROR;
+ }
+ else if (err)
+ return svn_error_trace(err);
+
+ SVN_ERR(svn_stream_close(fstream));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+fetch_props_func(apr_hash_t **props,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct dump_edit_baton *eb = baton;
+ svn_node_kind_t node_kind;
+
+ if (path[0] == '/')
+ path += 1;
+
+ if (! SVN_IS_VALID_REVNUM(base_revision))
+ base_revision = eb->current_revision - 1;
+
+ SVN_ERR(svn_ra_check_path(eb->ra_session, path, base_revision, &node_kind,
+ scratch_pool));
+
+ if (node_kind == svn_node_file)
+ {
+ SVN_ERR(svn_ra_get_file(eb->ra_session, path, base_revision,
+ NULL, NULL, props, result_pool));
+ }
+ else if (node_kind == svn_node_dir)
+ {
+ apr_array_header_t *tmp_props;
+
+ SVN_ERR(svn_ra_get_dir2(eb->ra_session, NULL, NULL, props, path,
+ base_revision, 0 /* Dirent fields */,
+ result_pool));
+ tmp_props = svn_prop_hash_to_array(*props, result_pool);
+ SVN_ERR(svn_categorize_props(tmp_props, NULL, NULL, &tmp_props,
+ result_pool));
+ *props = svn_prop_array_to_hash(tmp_props, result_pool);
+ }
+ else
+ {
+ *props = apr_hash_make(result_pool);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+fetch_kind_func(svn_node_kind_t *kind,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *scratch_pool)
+{
+ struct dump_edit_baton *eb = baton;
+
+ if (path[0] == '/')
+ path += 1;
+
+ if (! SVN_IS_VALID_REVNUM(base_revision))
+ base_revision = eb->current_revision - 1;
+
+ SVN_ERR(svn_ra_check_path(eb->ra_session, path, base_revision, kind,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
svn_error_t *
svn_rdump__get_dump_editor(const svn_delta_editor_t **editor,
void **edit_baton,
+ svn_revnum_t revision,
svn_stream_t *stream,
+ svn_ra_session_t *ra_session,
+ const char *update_anchor_relpath,
svn_cancel_func_t cancel_func,
void *cancel_baton,
apr_pool_t *pool)
{
struct dump_edit_baton *eb;
svn_delta_editor_t *de;
+ svn_delta_shim_callbacks_t *shim_callbacks =
+ svn_delta_shim_callbacks_default(pool);
eb = apr_pcalloc(pool, sizeof(struct dump_edit_baton));
eb->stream = stream;
+ eb->ra_session = ra_session;
+ eb->update_anchor_relpath = update_anchor_relpath;
+ eb->current_revision = revision;
+ eb->pending_kind = svn_node_none;
/* Create a special per-revision pool */
eb->pool = svn_pool_create(pool);
@@ -888,6 +1265,16 @@ svn_rdump__get_dump_editor(const svn_delta_editor_t **editor,
*editor = de;
/* Wrap this editor in a cancellation editor. */
- return svn_delta_get_cancellation_editor(cancel_func, cancel_baton,
- de, eb, editor, edit_baton, pool);
+ SVN_ERR(svn_delta_get_cancellation_editor(cancel_func, cancel_baton,
+ de, eb, editor, edit_baton, pool));
+
+ shim_callbacks->fetch_base_func = fetch_base_func;
+ shim_callbacks->fetch_props_func = fetch_props_func;
+ shim_callbacks->fetch_kind_func = fetch_kind_func;
+ shim_callbacks->fetch_baton = eb;
+
+ SVN_ERR(svn_editor__insert_shims(editor, edit_baton, *editor, *edit_baton,
+ NULL, NULL, shim_callbacks, pool, pool));
+
+ return SVN_NO_ERROR;
}
diff --git a/subversion/svnrdump/load_editor.c b/subversion/svnrdump/load_editor.c
index 0419446..c35a289 100644
--- a/subversion/svnrdump/load_editor.c
+++ b/subversion/svnrdump/load_editor.c
@@ -41,6 +41,8 @@
#define SVNRDUMP_PROP_LOCK SVN_PROP_PREFIX "rdump-lock"
+#define ARE_VALID_COPY_ARGS(p,r) ((p) && SVN_IS_VALID_REVNUM(r))
+
#if 0
#define LDR_DBG(x) SVN_DBG(x)
#else
@@ -102,6 +104,15 @@ struct directory_baton
void *baton;
const char *relpath;
int depth;
+
+ /* The copy-from source of this directory, no matter whether it is
+ copied explicitly (the root node of a copy) or implicitly (being an
+ existing child of a copied directory). For a node that is newly
+ added (without history), even inside a copied parent, these are
+ NULL and SVN_INVALID_REVNUM. */
+ const char *copyfrom_path;
+ svn_revnum_t copyfrom_rev;
+
struct directory_baton *parent;
};
@@ -115,12 +126,20 @@ struct node_baton
svn_node_kind_t kind;
enum svn_node_action action;
+ /* Is this directory explicitly added? If not, then it already existed
+ or is a child of a copy. */
+ svn_boolean_t is_added;
+
svn_revnum_t copyfrom_rev;
const char *copyfrom_path;
+ const char *copyfrom_url;
void *file_baton;
const char *base_checksum;
+ /* (const char *name) -> (svn_prop_t *) */
+ apr_hash_t *prop_changes;
+
struct revision_baton *rb;
};
@@ -199,7 +218,7 @@ prefix_mergeinfo_paths(svn_string_t **mergeinfo_val,
path = svn_fspath__canonicalize(svn_relpath_join(parent_dir,
merge_source, pool),
pool);
- apr_hash_set(prefixed_mergeinfo, path, APR_HASH_KEY_STRING, rangelist);
+ svn_hash_sets(prefixed_mergeinfo, path, rangelist);
}
return svn_mergeinfo_to_string(mergeinfo_val, prefixed_mergeinfo, pool);
}
@@ -250,7 +269,7 @@ renumber_mergeinfo_revs(svn_string_t **final_val,
for (hi = apr_hash_first(subpool, mergeinfo); hi; hi = apr_hash_next(hi))
{
- apr_array_header_t *rangelist;
+ svn_rangelist_t *rangelist;
struct parse_baton *pb = rb->pb;
int i;
const void *path;
@@ -312,20 +331,11 @@ renumber_mergeinfo_revs(svn_string_t **final_val,
if (predates_stream_mergeinfo)
{
- SVN_ERR(svn_mergeinfo_merge(final_mergeinfo, predates_stream_mergeinfo,
- subpool));
+ SVN_ERR(svn_mergeinfo_merge2(final_mergeinfo, predates_stream_mergeinfo,
+ subpool, subpool));
}
- SVN_ERR(svn_mergeinfo_sort(final_mergeinfo, subpool));
-
- /* Mergeinfo revision sources for r0 and r1 are invalid; you can't merge r0
- or r1. However, svndumpfilter can be abused to produce r1 merge source
- revs. So if we encounter any, then strip them out, no need to put them
- into the load target. */
- SVN_ERR(svn_mergeinfo__filter_mergeinfo_by_ranges(&final_mergeinfo,
- final_mergeinfo,
- 1, 0, FALSE,
- subpool, subpool));
+ SVN_ERR(svn_mergeinfo__canonicalize_ranges(final_mergeinfo, subpool));
SVN_ERR(svn_mergeinfo_to_string(final_val, final_mergeinfo, pool));
svn_pool_destroy(subpool);
@@ -384,9 +394,123 @@ lock_retry_func(void *baton,
reposlocktoken->data);
}
+
+static svn_error_t *
+fetch_base_func(const char **filename,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct revision_baton *rb = baton;
+ svn_stream_t *fstream;
+ svn_error_t *err;
+
+ if (! SVN_IS_VALID_REVNUM(base_revision))
+ base_revision = rb->rev - 1;
+
+ SVN_ERR(svn_stream_open_unique(&fstream, filename, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ result_pool, scratch_pool));
+
+ err = svn_ra_get_file(rb->pb->aux_session, path, base_revision,
+ fstream, NULL, NULL, scratch_pool);
+ if (err && err->apr_err == SVN_ERR_FS_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ SVN_ERR(svn_stream_close(fstream));
+
+ *filename = NULL;
+ return SVN_NO_ERROR;
+ }
+ else if (err)
+ return svn_error_trace(err);
+
+ SVN_ERR(svn_stream_close(fstream));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+fetch_props_func(apr_hash_t **props,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct revision_baton *rb = baton;
+ svn_node_kind_t node_kind;
+
+ if (! SVN_IS_VALID_REVNUM(base_revision))
+ base_revision = rb->rev - 1;
+
+ SVN_ERR(svn_ra_check_path(rb->pb->aux_session, path, base_revision,
+ &node_kind, scratch_pool));
+
+ if (node_kind == svn_node_file)
+ {
+ SVN_ERR(svn_ra_get_file(rb->pb->aux_session, path, base_revision,
+ NULL, NULL, props, result_pool));
+ }
+ else if (node_kind == svn_node_dir)
+ {
+ apr_array_header_t *tmp_props;
+
+ SVN_ERR(svn_ra_get_dir2(rb->pb->aux_session, NULL, NULL, props, path,
+ base_revision, 0 /* Dirent fields */,
+ result_pool));
+ tmp_props = svn_prop_hash_to_array(*props, result_pool);
+ SVN_ERR(svn_categorize_props(tmp_props, NULL, NULL, &tmp_props,
+ result_pool));
+ *props = svn_prop_array_to_hash(tmp_props, result_pool);
+ }
+ else
+ {
+ *props = apr_hash_make(result_pool);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+fetch_kind_func(svn_node_kind_t *kind,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *scratch_pool)
+{
+ struct revision_baton *rb = baton;
+
+ if (! SVN_IS_VALID_REVNUM(base_revision))
+ base_revision = rb->rev - 1;
+
+ SVN_ERR(svn_ra_check_path(rb->pb->aux_session, path, base_revision,
+ kind, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_delta_shim_callbacks_t *
+get_shim_callbacks(struct revision_baton *rb,
+ apr_pool_t *pool)
+{
+ svn_delta_shim_callbacks_t *callbacks =
+ svn_delta_shim_callbacks_default(pool);
+
+ callbacks->fetch_props_func = fetch_props_func;
+ callbacks->fetch_kind_func = fetch_kind_func;
+ callbacks->fetch_base_func = fetch_base_func;
+ callbacks->fetch_baton = rb;
+
+ return callbacks;
+}
+
/* Acquire a lock (of sorts) on the repository associated with the
* given RA SESSION. This lock is just a revprop change attempt in a
- * time-delay loop. This function is duplicated by svnsync in main.c.
+ * time-delay loop. This function is duplicated by svnsync in
+ * svnsync/svnsync.c
*
* ### TODO: Make this function more generic and
* expose it through a header for use by other Subversion
@@ -436,6 +560,7 @@ new_revision_record(void **revision_baton,
pb = parse_baton;
rb->pool = svn_pool_create(pool);
rb->pb = pb;
+ rb->db = NULL;
for (hi = apr_hash_first(pool, headers); hi; hi = apr_hash_next(hi))
{
@@ -452,7 +577,7 @@ new_revision_record(void **revision_baton,
several separate operations. It is highly susceptible to race conditions.
Calculate the revision 'offset' for finding copyfrom sources.
It might be positive or negative. */
- rb->rev_offset = (apr_int32_t) (rb->rev) - (head_rev + 1);
+ rb->rev_offset = (apr_int32_t) ((rb->rev) - (head_rev + 1));
/* Stash the oldest (non-zero) dumpstream revision seen. */
if ((rb->rev > 0) && (!SVN_IS_VALID_REVNUM(pb->oldest_dumpstream_rev)))
@@ -469,6 +594,14 @@ new_revision_record(void **revision_baton,
}
static svn_error_t *
+magic_header_record(int version,
+ void *parse_baton,
+ apr_pool_t *pool)
+{
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
uuid_record(const char *uuid,
void *parse_baton,
apr_pool_t *pool)
@@ -479,6 +612,47 @@ uuid_record(const char *uuid,
return SVN_NO_ERROR;
}
+/* Push information about another directory onto the linked list RB->db.
+ *
+ * CHILD_BATON is the baton returned by the commit editor. RELPATH is the
+ * repository-relative path of this directory. IS_ADDED is true iff this
+ * directory is being added (with or without history). If added with
+ * history then COPYFROM_PATH/COPYFROM_REV are the copyfrom source, else
+ * are NULL/SVN_INVALID_REVNUM.
+ */
+static void
+push_directory(struct revision_baton *rb,
+ void *child_baton,
+ const char *relpath,
+ svn_boolean_t is_added,
+ const char *copyfrom_path,
+ svn_revnum_t copyfrom_rev)
+{
+ struct directory_baton *child_db = apr_pcalloc(rb->pool, sizeof (*child_db));
+
+ SVN_ERR_ASSERT_NO_RETURN(
+ is_added || (copyfrom_path == NULL && copyfrom_rev == SVN_INVALID_REVNUM));
+
+ /* If this node is an existing (not newly added) child of a copied node,
+ calculate where it was copied from. */
+ if (!is_added
+ && ARE_VALID_COPY_ARGS(rb->db->copyfrom_path, rb->db->copyfrom_rev))
+ {
+ const char *name = svn_relpath_basename(relpath, NULL);
+
+ copyfrom_path = svn_relpath_join(rb->db->copyfrom_path, name,
+ rb->pool);
+ copyfrom_rev = rb->db->copyfrom_rev;
+ }
+
+ child_db->baton = child_baton;
+ child_db->relpath = relpath;
+ child_db->copyfrom_path = copyfrom_path;
+ child_db->copyfrom_rev = copyfrom_rev;
+ child_db->parent = rb->db;
+ rb->db = child_db;
+}
+
static svn_error_t *
new_node_record(void **node_baton,
apr_hash_t *headers,
@@ -489,17 +663,17 @@ new_node_record(void **node_baton,
const struct svn_delta_editor_t *commit_editor = rb->pb->commit_editor;
void *commit_edit_baton = rb->pb->commit_edit_baton;
struct node_baton *nb;
- struct directory_baton *child_db;
apr_hash_index_t *hi;
void *child_baton;
- char *relpath_compose;
const char *nb_dirname;
nb = apr_pcalloc(rb->pool, sizeof(*nb));
nb->rb = rb;
-
+ nb->is_added = FALSE;
nb->copyfrom_path = NULL;
+ nb->copyfrom_url = NULL;
nb->copyfrom_rev = SVN_INVALID_REVNUM;
+ nb->prop_changes = apr_hash_make(rb->pool);
/* If the creation of commit_editor is pending, create it now and
open_root on it; also create a top-level directory baton. */
@@ -513,11 +687,11 @@ new_node_record(void **node_baton,
commit_editor. We'll set them separately using the RA API
after closing the editor (see close_revision). */
- apr_hash_set(rb->revprop_table, SVN_PROP_REVISION_AUTHOR,
- APR_HASH_KEY_STRING, NULL);
- apr_hash_set(rb->revprop_table, SVN_PROP_REVISION_DATE,
- APR_HASH_KEY_STRING, NULL);
+ svn_hash_sets(rb->revprop_table, SVN_PROP_REVISION_AUTHOR, NULL);
+ svn_hash_sets(rb->revprop_table, SVN_PROP_REVISION_DATE, NULL);
+ SVN_ERR(svn_ra__register_editor_shim_callbacks(rb->pb->session,
+ get_shim_callbacks(rb, rb->pool)));
SVN_ERR(svn_ra_get_commit_editor3(rb->pb->session, &commit_editor,
&commit_edit_baton, rb->revprop_table,
commit_callback, revision_baton,
@@ -532,13 +706,9 @@ new_node_record(void **node_baton,
LDR_DBG(("Opened root %p\n", child_baton));
- /* child_db corresponds to the root directory baton here */
- child_db = apr_pcalloc(rb->pool, sizeof(*child_db));
- child_db->baton = child_baton;
- child_db->depth = 0;
- child_db->relpath = "";
- child_db->parent = NULL;
- rb->db = child_db;
+ /* child_baton corresponds to the root directory baton here */
+ push_directory(rb, child_baton, "", TRUE /*is_added*/,
+ NULL, SVN_INVALID_REVNUM);
}
for (hi = apr_hash_first(rb->pool, headers); hi; hi = apr_hash_next(hi))
@@ -579,6 +749,7 @@ new_node_record(void **node_baton,
apr_size_t residual_close_count;
apr_array_header_t *residual_open_path;
int i;
+ apr_size_t n;
/* Before attempting to handle the action, call open_directory
for all the path components and set the directory baton
@@ -595,7 +766,7 @@ new_node_record(void **node_baton,
/* First close all as many directories as there are after
skip_ancestor, and then open fresh directories */
- for (i = 0; i < residual_close_count; i ++)
+ for (n = 0; n < residual_close_count; n ++)
{
/* Don't worry about destroying the actual rb->db object,
since the pool we're using has the lifetime of one
@@ -607,7 +778,7 @@ new_node_record(void **node_baton,
for (i = 0; i < residual_open_path->nelts; i ++)
{
- relpath_compose =
+ char *relpath_compose =
svn_relpath_join(rb->db->relpath,
APR_ARRAY_IDX(residual_open_path, i, const char *),
rb->pool);
@@ -616,12 +787,8 @@ new_node_record(void **node_baton,
rb->rev - rb->rev_offset - 1,
rb->pool, &child_baton));
LDR_DBG(("Opened dir %p\n", child_baton));
- child_db = apr_pcalloc(rb->pool, sizeof(*child_db));
- child_db->baton = child_baton;
- child_db->depth = rb->db->depth + 1;
- child_db->relpath = relpath_compose;
- child_db->parent = rb->db;
- rb->db = child_db;
+ push_directory(rb, child_baton, relpath_compose, TRUE /*is_added*/,
+ NULL, SVN_INVALID_REVNUM);
}
}
@@ -649,7 +816,7 @@ new_node_record(void **node_baton,
if (rb->pb->parent_dir)
nb->copyfrom_path = svn_relpath_join(rb->pb->parent_dir,
nb->copyfrom_path, rb->pool);
- nb->copyfrom_path = svn_path_url_add_component2(rb->pb->root_url,
+ nb->copyfrom_url = svn_path_url_add_component2(rb->pb->root_url,
nb->copyfrom_path,
rb->pool);
}
@@ -660,18 +827,20 @@ new_node_record(void **node_baton,
case svn_node_action_delete:
case svn_node_action_replace:
LDR_DBG(("Deleting entry %s in %p\n", nb->path, rb->db->baton));
- SVN_ERR(commit_editor->delete_entry(nb->path, rb->rev - rb->rev_offset,
+ SVN_ERR(commit_editor->delete_entry(nb->path,
+ rb->rev - rb->rev_offset - 1,
rb->db->baton, rb->pool));
if (nb->action == svn_node_action_delete)
break;
else
/* FALL THROUGH */;
case svn_node_action_add:
+ nb->is_added = TRUE;
switch (nb->kind)
{
case svn_node_file:
SVN_ERR(commit_editor->add_file(nb->path, rb->db->baton,
- nb->copyfrom_path,
+ nb->copyfrom_url,
nb->copyfrom_rev,
rb->pool, &(nb->file_baton)));
LDR_DBG(("Added file %s to dir %p as %p\n",
@@ -679,17 +848,13 @@ new_node_record(void **node_baton,
break;
case svn_node_dir:
SVN_ERR(commit_editor->add_directory(nb->path, rb->db->baton,
- nb->copyfrom_path,
+ nb->copyfrom_url,
nb->copyfrom_rev,
rb->pool, &child_baton));
LDR_DBG(("Added dir %s to dir %p as %p\n",
nb->path, rb->db->baton, child_baton));
- child_db = apr_pcalloc(rb->pool, sizeof(*child_db));
- child_db->baton = child_baton;
- child_db->depth = rb->db->depth + 1;
- child_db->relpath = apr_pstrdup(rb->pool, nb->path);
- child_db->parent = rb->db;
- rb->db = child_db;
+ push_directory(rb, child_baton, nb->path, TRUE /*is_added*/,
+ nb->copyfrom_path, nb->copyfrom_rev);
break;
default:
break;
@@ -707,12 +872,8 @@ new_node_record(void **node_baton,
SVN_ERR(commit_editor->open_directory(nb->path, rb->db->baton,
rb->rev - rb->rev_offset - 1,
rb->pool, &child_baton));
- child_db = apr_pcalloc(rb->pool, sizeof(*child_db));
- child_db->baton = child_baton;
- child_db->depth = rb->db->depth + 1;
- child_db->relpath = apr_pstrdup(rb->pool, nb->path);
- child_db->parent = rb->db;
- rb->db = child_db;
+ push_directory(rb, child_baton, nb->path, FALSE /*is_added*/,
+ NULL, SVN_INVALID_REVNUM);
break;
}
break;
@@ -729,12 +890,15 @@ set_revision_property(void *baton,
{
struct revision_baton *rb = baton;
+ SVN_ERR(svn_rdump__normalize_prop(name, &value, rb->pool));
+
SVN_ERR(svn_repos__validate_prop(name, value, rb->pool));
if (rb->rev > 0)
{
- apr_hash_set(rb->revprop_table, apr_pstrdup(rb->pool, name),
- APR_HASH_KEY_STRING, svn_string_dup(value, rb->pool));
+ svn_hash_sets(rb->revprop_table,
+ apr_pstrdup(rb->pool, name),
+ svn_string_dup(value, rb->pool));
}
else if (rb->rev_offset == -1)
{
@@ -761,8 +925,8 @@ set_node_property(void *baton,
const svn_string_t *value)
{
struct node_baton *nb = baton;
- const struct svn_delta_editor_t *commit_editor = nb->rb->pb->commit_editor;
apr_pool_t *pool = nb->rb->pool;
+ svn_prop_t *prop;
if (value && strcmp(name, SVN_PROP_MERGEINFO) == 0)
{
@@ -808,23 +972,15 @@ set_node_property(void *baton,
}
}
+ SVN_ERR(svn_rdump__normalize_prop(name, &value, pool));
+
SVN_ERR(svn_repos__validate_prop(name, value, pool));
- switch (nb->kind)
- {
- case svn_node_file:
- LDR_DBG(("Applying properties on %p\n", nb->file_baton));
- SVN_ERR(commit_editor->change_file_prop(nb->file_baton, name,
- value, pool));
- break;
- case svn_node_dir:
- LDR_DBG(("Applying properties on %p\n", nb->rb->db->baton));
- SVN_ERR(commit_editor->change_dir_prop(nb->rb->db->baton, name,
- value, pool));
- break;
- default:
- break;
- }
+ prop = apr_palloc(nb->rb->pool, sizeof (*prop));
+ prop->name = apr_pstrdup(pool, name);
+ prop->value = value ? svn_string_dup(value, pool) : NULL;
+ svn_hash_sets(nb->prop_changes, prop->name, prop);
+
return SVN_NO_ERROR;
}
@@ -833,50 +989,90 @@ delete_node_property(void *baton,
const char *name)
{
struct node_baton *nb = baton;
- const struct svn_delta_editor_t *commit_editor = nb->rb->pb->commit_editor;
apr_pool_t *pool = nb->rb->pool;
+ svn_prop_t *prop;
SVN_ERR(svn_repos__validate_prop(name, NULL, pool));
- if (nb->kind == svn_node_file)
- SVN_ERR(commit_editor->change_file_prop(nb->file_baton, name,
- NULL, pool));
- else
- SVN_ERR(commit_editor->change_dir_prop(nb->rb->db->baton, name,
- NULL, pool));
+ prop = apr_palloc(pool, sizeof (*prop));
+ prop->name = apr_pstrdup(pool, name);
+ prop->value = NULL;
+ svn_hash_sets(nb->prop_changes, prop->name, prop);
return SVN_NO_ERROR;
}
+/* Delete all the properties of the node, if any.
+ *
+ * The commit editor doesn't have a method to delete a node's properties
+ * without knowing what they are, so we have to first find out what
+ * properties the node would have had. If it's copied (explicitly or
+ * implicitly), we look at the copy source. If it's only being changed,
+ * we look at the node's current path in the head revision.
+ */
static svn_error_t *
remove_node_props(void *baton)
{
struct node_baton *nb = baton;
+ struct revision_baton *rb = nb->rb;
apr_pool_t *pool = nb->rb->pool;
apr_hash_index_t *hi;
apr_hash_t *props;
+ const char *orig_path;
+ svn_revnum_t orig_rev;
+
+ /* Find the path and revision that has the node's original properties */
+ if (ARE_VALID_COPY_ARGS(nb->copyfrom_path, nb->copyfrom_rev))
+ {
+ LDR_DBG(("using nb->copyfrom %s@%ld", nb->copyfrom_path, nb->copyfrom_rev));
+ orig_path = nb->copyfrom_path;
+ orig_rev = nb->copyfrom_rev;
+ }
+ else if (!nb->is_added
+ && ARE_VALID_COPY_ARGS(rb->db->copyfrom_path, rb->db->copyfrom_rev))
+ {
+ /* If this is a dir, then it's described by rb->db;
+ if this is a file, then it's a child of the dir in rb->db. */
+ LDR_DBG(("using rb->db->copyfrom (k=%d) %s@%ld",
+ nb->kind, rb->db->copyfrom_path, rb->db->copyfrom_rev));
+ orig_path = (nb->kind == svn_node_dir)
+ ? rb->db->copyfrom_path
+ : svn_relpath_join(rb->db->copyfrom_path,
+ svn_relpath_basename(nb->path, NULL),
+ rb->pool);
+ orig_rev = rb->db->copyfrom_rev;
+ }
+ else
+ {
+ LDR_DBG(("using self.path@head %s@%ld", nb->path, SVN_INVALID_REVNUM));
+ /* ### Should we query at a known, fixed, "head" revision number
+ instead of passing SVN_INVALID_REVNUM and getting a moving target? */
+ orig_path = nb->path;
+ orig_rev = SVN_INVALID_REVNUM;
+ }
+ LDR_DBG(("Trying %s@%ld", orig_path, orig_rev));
if ((nb->action == svn_node_action_add
|| nb->action == svn_node_action_replace)
- && ! SVN_IS_VALID_REVNUM(nb->copyfrom_rev))
+ && ! ARE_VALID_COPY_ARGS(orig_path, orig_rev))
/* Add-without-history; no "old" properties to worry about. */
return SVN_NO_ERROR;
if (nb->kind == svn_node_file)
{
- SVN_ERR(svn_ra_get_file(nb->rb->pb->aux_session, nb->path,
- SVN_INVALID_REVNUM, NULL, NULL, &props, pool));
+ SVN_ERR(svn_ra_get_file(nb->rb->pb->aux_session,
+ orig_path, orig_rev, NULL, NULL, &props, pool));
}
else /* nb->kind == svn_node_dir */
{
SVN_ERR(svn_ra_get_dir2(nb->rb->pb->aux_session, NULL, NULL, &props,
- nb->path, SVN_INVALID_REVNUM, 0, pool));
+ orig_path, orig_rev, 0, pool));
}
for (hi = apr_hash_first(pool, props); hi; hi = apr_hash_next(hi))
{
const char *name = svn__apr_hash_index_key(hi);
- svn_prop_kind_t kind = svn_property_kind(NULL, name);
+ svn_prop_kind_t kind = svn_property_kind2(name);
if (kind == svn_prop_regular_kind)
SVN_ERR(set_node_property(nb, name, NULL));
@@ -924,6 +1120,29 @@ close_node(void *baton)
{
struct node_baton *nb = baton;
const struct svn_delta_editor_t *commit_editor = nb->rb->pb->commit_editor;
+ apr_pool_t *pool = nb->rb->pool;
+ apr_hash_index_t *hi;
+
+ for (hi = apr_hash_first(pool, nb->prop_changes);
+ hi; hi = apr_hash_next(hi))
+ {
+ const char *name = svn__apr_hash_index_key(hi);
+ svn_prop_t *prop = svn__apr_hash_index_val(hi);
+
+ switch (nb->kind)
+ {
+ case svn_node_file:
+ SVN_ERR(commit_editor->change_file_prop(nb->file_baton,
+ name, prop->value, pool));
+ break;
+ case svn_node_dir:
+ SVN_ERR(commit_editor->change_dir_prop(nb->rb->db->baton,
+ name, prop->value, pool));
+ break;
+ default:
+ break;
+ }
+ }
/* Pass a file node closure through to the editor *unless* we
deleted the file (which doesn't require us to open it). */
@@ -1029,7 +1248,7 @@ svn_rdump__load_dumpstream(svn_stream_t *stream,
void *cancel_baton,
apr_pool_t *pool)
{
- svn_repos_parse_fns2_t *parser;
+ svn_repos_parse_fns3_t *parser;
struct parse_baton *parse_baton;
const svn_string_t *lock_string;
svn_boolean_t be_atomic;
@@ -1046,8 +1265,9 @@ svn_rdump__load_dumpstream(svn_stream_t *stream,
session_url, pool));
parser = apr_pcalloc(pool, sizeof(*parser));
- parser->new_revision_record = new_revision_record;
+ parser->magic_header_record = magic_header_record;
parser->uuid_record = uuid_record;
+ parser->new_revision_record = new_revision_record;
parser->new_node_record = new_node_record;
parser->set_revision_property = set_revision_property;
parser->set_node_property = set_node_property;
@@ -1068,7 +1288,7 @@ svn_rdump__load_dumpstream(svn_stream_t *stream,
parse_baton->last_rev_mapped = SVN_INVALID_REVNUM;
parse_baton->oldest_dumpstream_rev = SVN_INVALID_REVNUM;
- err = svn_repos_parse_dumpstream2(stream, parser, parse_baton,
+ err = svn_repos_parse_dumpstream3(stream, parser, parse_baton, FALSE,
cancel_func, cancel_baton, pool);
/* If all goes well, or if we're cancelled cleanly, don't leave a
diff --git a/subversion/svnrdump/svnrdump.c b/subversion/svnrdump/svnrdump.c
index 0947f75..6bf409c 100644
--- a/subversion/svnrdump/svnrdump.c
+++ b/subversion/svnrdump/svnrdump.c
@@ -23,6 +23,7 @@
*/
#include <apr_signal.h>
+#include <apr_uri.h>
#include "svn_pools.h"
#include "svn_cmdline.h"
@@ -39,6 +40,7 @@
#include "svnrdump.h"
#include "private/svn_cmdline_private.h"
+#include "private/svn_ra_private.h"
@@ -78,6 +80,7 @@ enum svn_svnrdump__longopt_t
opt_auth_password,
opt_auth_nocache,
opt_non_interactive,
+ opt_force_interactive,
opt_incremental,
opt_trust_server_cert,
opt_version
@@ -89,7 +92,8 @@ enum svn_svnrdump__longopt_t
opt_auth_password, \
opt_auth_nocache, \
opt_trust_server_cert, \
- opt_non_interactive
+ opt_non_interactive, \
+ opt_force_interactive
static const svn_opt_subcommand_desc2_t svnrdump__cmd_table[] =
{
@@ -125,7 +129,13 @@ static const apr_getopt_option_t svnrdump__options[] =
{"password", opt_auth_password, 1,
N_("specify a password ARG")},
{"non-interactive", opt_non_interactive, 0,
- N_("do no interactive prompting")},
+ N_("do no interactive prompting (default is to prompt\n"
+ " "
+ "only if standard input is a terminal device)")},
+ {"force-interactive", opt_force_interactive, 0,
+ N_("do interactive prompting even if standard input\n"
+ " "
+ "is not a terminal device")},
{"no-auth-cache", opt_auth_nocache, 0,
N_("do not cache authentication tokens")},
{"help", 'h', 0,
@@ -151,11 +161,11 @@ static const apr_getopt_option_t svnrdump__options[] =
/* Baton for the RA replay session. */
struct replay_baton {
- /* The editor producing diffs. */
- const svn_delta_editor_t *editor;
+ /* A backdoor ra session for fetching information. */
+ svn_ra_session_t *extra_ra_session;
- /* Baton for the editor. */
- void *edit_baton;
+ /* The output stream */
+ svn_stream_t *stdout_stream;
/* Whether to be quiet. */
svn_boolean_t quiet;
@@ -217,13 +227,12 @@ replay_revstart(svn_revnum_t revision,
SVN_ERR(svn_stream_write(stdout_stream, propstring->data,
&(propstring->len)));
- SVN_ERR(svn_stream_printf(stdout_stream, pool, "\n"));
+ SVN_ERR(svn_stream_puts(stdout_stream, "\n"));
SVN_ERR(svn_stream_close(stdout_stream));
- /* Extract editor and editor_baton from the replay_baton and
- set them so that the editor callbacks can use them. */
- *editor = rb->editor;
- *edit_baton = rb->edit_baton;
+ SVN_ERR(svn_rdump__get_dump_editor(editor, edit_baton, revision,
+ rb->stdout_stream, rb->extra_ra_session,
+ NULL, check_cancel, NULL, pool));
return SVN_NO_ERROR;
}
@@ -240,16 +249,96 @@ replay_revend(svn_revnum_t revision,
{
/* No resources left to free. */
struct replay_baton *rb = replay_baton;
+
+ SVN_ERR(editor->close_edit(edit_baton, pool));
+
if (! rb->quiet)
SVN_ERR(svn_cmdline_fprintf(stderr, pool, "* Dumped revision %lu.\n",
revision));
return SVN_NO_ERROR;
}
+#ifdef USE_EV2_IMPL
+/* Print dumpstream-formatted information about REVISION.
+ * Implements the `svn_ra_replay_revstart_callback_t' interface.
+ */
+static svn_error_t *
+replay_revstart_v2(svn_revnum_t revision,
+ void *replay_baton,
+ svn_editor_t **editor,
+ apr_hash_t *rev_props,
+ apr_pool_t *pool)
+{
+ struct replay_baton *rb = replay_baton;
+ apr_hash_t *normal_props;
+ svn_stringbuf_t *propstring;
+ svn_stream_t *stdout_stream;
+ svn_stream_t *revprop_stream;
+
+ SVN_ERR(svn_stream_for_stdout(&stdout_stream, pool));
+
+ /* Revision-number: 19 */
+ SVN_ERR(svn_stream_printf(stdout_stream, pool,
+ SVN_REPOS_DUMPFILE_REVISION_NUMBER
+ ": %ld\n", revision));
+ SVN_ERR(svn_rdump__normalize_props(&normal_props, rev_props, pool));
+ propstring = svn_stringbuf_create_ensure(0, pool);
+ revprop_stream = svn_stream_from_stringbuf(propstring, pool);
+ SVN_ERR(svn_hash_write2(normal_props, revprop_stream, "PROPS-END", pool));
+ SVN_ERR(svn_stream_close(revprop_stream));
+
+ /* Prop-content-length: 13 */
+ SVN_ERR(svn_stream_printf(stdout_stream, pool,
+ SVN_REPOS_DUMPFILE_PROP_CONTENT_LENGTH
+ ": %" APR_SIZE_T_FMT "\n", propstring->len));
+
+ /* Content-length: 29 */
+ SVN_ERR(svn_stream_printf(stdout_stream, pool,
+ SVN_REPOS_DUMPFILE_CONTENT_LENGTH
+ ": %" APR_SIZE_T_FMT "\n\n", propstring->len));
+
+ /* Property data. */
+ SVN_ERR(svn_stream_write(stdout_stream, propstring->data,
+ &(propstring->len)));
+
+ SVN_ERR(svn_stream_puts(stdout_stream, "\n"));
+ SVN_ERR(svn_stream_close(stdout_stream));
+
+ SVN_ERR(svn_rdump__get_dump_editor_v2(editor, revision,
+ rb->stdout_stream,
+ rb->extra_ra_session,
+ NULL, check_cancel, NULL, pool, pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* Print progress information about the dump of REVISION.
+ Implements the `svn_ra_replay_revfinish_callback_t' interface. */
+static svn_error_t *
+replay_revend_v2(svn_revnum_t revision,
+ void *replay_baton,
+ svn_editor_t *editor,
+ apr_hash_t *rev_props,
+ apr_pool_t *pool)
+{
+ /* No resources left to free. */
+ struct replay_baton *rb = replay_baton;
+
+ SVN_ERR(svn_editor_complete(editor));
+
+ if (! rb->quiet)
+ SVN_ERR(svn_cmdline_fprintf(stderr, pool, "* Dumped revision %lu.\n",
+ revision));
+ return SVN_NO_ERROR;
+}
+#endif
+
/* Initialize the RA layer, and set *CTX to a new client context baton
* allocated from POOL. Use CONFIG_DIR and pass USERNAME, PASSWORD,
* CONFIG_DIR and NO_AUTH_CACHE to initialize the authorization baton.
* CONFIG_OPTIONS (if not NULL) is a list of configuration overrides.
+ * REPOS_URL is used to fiddle with server-specific configuration
+ * options.
*/
static svn_error_t *
init_client_context(svn_client_ctx_t **ctx_p,
@@ -257,18 +346,19 @@ init_client_context(svn_client_ctx_t **ctx_p,
const char *username,
const char *password,
const char *config_dir,
+ const char *repos_url,
svn_boolean_t no_auth_cache,
svn_boolean_t trust_server_cert,
apr_array_header_t *config_options,
apr_pool_t *pool)
{
svn_client_ctx_t *ctx = NULL;
- svn_config_t *cfg_config;
+ svn_config_t *cfg_config, *cfg_servers;
SVN_ERR(svn_ra_initialize(pool));
SVN_ERR(svn_config_ensure(config_dir, pool));
- SVN_ERR(svn_client_create_context(&ctx, pool));
+ SVN_ERR(svn_client_create_context2(&ctx, NULL, pool));
SVN_ERR(svn_config_get_config(&(ctx->config), config_dir, pool));
@@ -276,8 +366,47 @@ init_client_context(svn_client_ctx_t **ctx_p,
SVN_ERR(svn_cmdline__apply_config_options(ctx->config, config_options,
"svnrdump: ", "--config-option"));
- cfg_config = apr_hash_get(ctx->config, SVN_CONFIG_CATEGORY_CONFIG,
- APR_HASH_KEY_STRING);
+ cfg_config = svn_hash_gets(ctx->config, SVN_CONFIG_CATEGORY_CONFIG);
+
+ /* ### FIXME: This is a hack to work around the fact that our dump
+ ### editor simply can't handle the way ra_serf violates the
+ ### editor v1 drive ordering requirements.
+ ###
+ ### We'll override both the global value and server-specific one
+ ### for the 'http-bulk-updates' and 'http-max-connections'
+ ### options in order to get ra_serf to try a bulk-update if the
+ ### server will allow it, or at least try to limit all its
+ ### auxiliary GETs/PROPFINDs to happening (well-ordered) on a
+ ### single server connection.
+ ###
+ ### See http://subversion.tigris.org/issues/show_bug.cgi?id=4116.
+ */
+ cfg_servers = svn_hash_gets(ctx->config, SVN_CONFIG_CATEGORY_SERVERS);
+ svn_config_set_bool(cfg_servers, SVN_CONFIG_SECTION_GLOBAL,
+ SVN_CONFIG_OPTION_HTTP_BULK_UPDATES, TRUE);
+ svn_config_set_int64(cfg_servers, SVN_CONFIG_SECTION_GLOBAL,
+ SVN_CONFIG_OPTION_HTTP_MAX_CONNECTIONS, 2);
+ if (cfg_servers)
+ {
+ apr_status_t status;
+ apr_uri_t parsed_url;
+
+ status = apr_uri_parse(pool, repos_url, &parsed_url);
+ if (! status)
+ {
+ const char *server_group;
+
+ server_group = svn_config_find_group(cfg_servers, parsed_url.hostname,
+ SVN_CONFIG_SECTION_GROUPS, pool);
+ if (server_group)
+ {
+ svn_config_set_bool(cfg_servers, server_group,
+ SVN_CONFIG_OPTION_HTTP_BULK_UPDATES, TRUE);
+ svn_config_set_int64(cfg_servers, server_group,
+ SVN_CONFIG_OPTION_HTTP_MAX_CONNECTIONS, 2);
+ }
+ }
+ }
/* Set up our cancellation support. */
ctx->cancel_func = check_cancel;
@@ -311,7 +440,7 @@ dump_revision_header(svn_ra_session_t *session,
": %ld\n", revision));
prophash = apr_hash_make(pool);
- propstring = svn_stringbuf_create("", pool);
+ propstring = svn_stringbuf_create_empty(pool);
SVN_ERR(svn_ra_rev_proplist(session, revision, &prophash, pool));
propstream = svn_stream_from_stringbuf(propstring, pool);
@@ -330,40 +459,88 @@ dump_revision_header(svn_ra_session_t *session,
/* The properties */
SVN_ERR(svn_stream_write(stdout_stream, propstring->data,
&(propstring->len)));
- SVN_ERR(svn_stream_printf(stdout_stream, pool, "\n"));
+ SVN_ERR(svn_stream_puts(stdout_stream, "\n"));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+dump_initial_full_revision(svn_ra_session_t *session,
+ svn_ra_session_t *extra_ra_session,
+ svn_stream_t *stdout_stream,
+ svn_revnum_t revision,
+ svn_boolean_t quiet,
+ apr_pool_t *pool)
+{
+ const svn_ra_reporter3_t *reporter;
+ void *report_baton;
+ const svn_delta_editor_t *dump_editor;
+ void *dump_baton;
+ const char *session_url, *source_relpath;
+
+ /* Determine whether we're dumping the repository root URL or some
+ child thereof. If we're dumping a subtree of the repository
+ rather than the root, we have to jump through some hoops to make
+ our update-driven dump generation work the way a replay-driven
+ one would.
+
+ See http://subversion.tigris.org/issues/show_bug.cgi?id=4101
+ */
+ SVN_ERR(svn_ra_get_session_url(session, &session_url, pool));
+ SVN_ERR(svn_ra_get_path_relative_to_root(session, &source_relpath,
+ session_url, pool));
+
+ /* Start with a revision record header. */
+ SVN_ERR(dump_revision_header(session, stdout_stream, revision, pool));
+
+ /* Then, we'll drive the dump editor with what would look like a
+ full checkout of the repository as it looked in START_REVISION.
+ We do this by manufacturing a basic 'report' to the update
+ reporter, telling it that we have nothing to start with. The
+ delta between nothing and everything-at-REV is, effectively, a
+ full dump of REV. */
+ SVN_ERR(svn_rdump__get_dump_editor(&dump_editor, &dump_baton, revision,
+ stdout_stream, extra_ra_session,
+ source_relpath, check_cancel, NULL, pool));
+ SVN_ERR(svn_ra_do_update3(session, &reporter, &report_baton, revision,
+ "", svn_depth_infinity, FALSE, FALSE,
+ dump_editor, dump_baton, pool, pool));
+ SVN_ERR(reporter->set_path(report_baton, "", revision,
+ svn_depth_infinity, TRUE, NULL, pool));
+ SVN_ERR(reporter->finish_report(report_baton, pool));
+
+ /* All finished with START_REVISION! */
+ if (! quiet)
+ SVN_ERR(svn_cmdline_fprintf(stderr, pool, "* Dumped revision %lu.\n",
+ revision));
return SVN_NO_ERROR;
}
/* Replay revisions START_REVISION thru END_REVISION (inclusive) of
- * the repository located at URL, using callbacks which generate
- * Subversion repository dumpstreams describing the changes made in
- * those revisions. If QUIET is set, don't generate progress
- * messages.
+ * the repository URL at which SESSION is rooted, using callbacks
+ * which generate Subversion repository dumpstreams describing the
+ * changes made in those revisions. If QUIET is set, don't generate
+ * progress messages.
*/
static svn_error_t *
replay_revisions(svn_ra_session_t *session,
- const char *url,
+ svn_ra_session_t *extra_ra_session,
svn_revnum_t start_revision,
svn_revnum_t end_revision,
svn_boolean_t quiet,
svn_boolean_t incremental,
apr_pool_t *pool)
{
- const svn_delta_editor_t *dump_editor;
struct replay_baton *replay_baton;
- void *dump_baton;
const char *uuid;
svn_stream_t *stdout_stream;
SVN_ERR(svn_stream_for_stdout(&stdout_stream, pool));
- SVN_ERR(svn_rdump__get_dump_editor(&dump_editor, &dump_baton, stdout_stream,
- check_cancel, NULL, pool));
-
replay_baton = apr_pcalloc(pool, sizeof(*replay_baton));
- replay_baton->editor = dump_editor;
- replay_baton->edit_baton = dump_baton;
+ replay_baton->stdout_stream = stdout_stream;
+ replay_baton->extra_ra_session = extra_ra_session;
replay_baton->quiet = quiet;
/* Write the magic header and UUID */
@@ -391,46 +568,29 @@ replay_revisions(svn_ra_session_t *session,
incremental = TRUE;
}
- if (incremental)
+ /* If what remains to be dumped is not going to be dumped
+ incrementally, then dump the first revision in full. */
+ if (!incremental)
{
+ SVN_ERR(dump_initial_full_revision(session, extra_ra_session,
+ stdout_stream, start_revision,
+ quiet, pool));
+ start_revision++;
+ }
+
+ /* If there are still revisions left to be dumped, do so. */
+ if (start_revision <= end_revision)
+ {
+#ifndef USE_EV2_IMPL
SVN_ERR(svn_ra_replay_range(session, start_revision, end_revision,
0, TRUE, replay_revstart, replay_revend,
replay_baton, pool));
- }
- else
- {
- const svn_ra_reporter3_t *reporter;
- void *report_baton;
-
- /* First, we need to dump the start_revision in full. We'll
- start with a revision record header. */
- SVN_ERR(dump_revision_header(session, stdout_stream,
- start_revision, pool));
-
- /* Then, we'll drive the dump editor with what would look like a
- full checkout of the repository as it looked in
- START_REVISION. We do this by manufacturing a basic 'report'
- to the update reporter, telling it that we have nothing to
- start with. The delta between nothing and everything-at-REV
- is, effectively, a full dump of REV. */
- SVN_ERR(svn_ra_do_update2(session, &reporter, &report_baton,
- start_revision, "", svn_depth_infinity,
- FALSE, dump_editor, dump_baton, pool));
- SVN_ERR(reporter->set_path(report_baton, "", start_revision,
- svn_depth_infinity, TRUE, NULL, pool));
- SVN_ERR(reporter->finish_report(report_baton, pool));
-
- /* All finished with START_REVISION! */
- if (! quiet)
- SVN_ERR(svn_cmdline_fprintf(stderr, pool, "* Dumped revision %lu.\n",
- start_revision));
- start_revision++;
-
- /* Now go pick up additional revisions in the range, if any. */
- if (start_revision <= end_revision)
- SVN_ERR(svn_ra_replay_range(session, start_revision, end_revision,
- 0, TRUE, replay_revstart, replay_revend,
- replay_baton, pool));
+#else
+ SVN_ERR(svn_ra__replay_range_ev2(session, start_revision, end_revision,
+ 0, TRUE, replay_revstart_v2,
+ replay_revend_v2, replay_baton,
+ NULL, NULL, NULL, NULL, pool));
+#endif
}
SVN_ERR(svn_stream_close(stdout_stream));
@@ -501,8 +661,8 @@ version(const char *progname,
pool);
SVN_ERR(svn_ra_print_modules(version_footer, pool));
- return svn_opt_print_help3(NULL, ensure_appname(progname, pool),
- TRUE, quiet, version_footer->data,
+ return svn_opt_print_help4(NULL, ensure_appname(progname, pool),
+ TRUE, quiet, FALSE, version_footer->data,
NULL, NULL, NULL, NULL, NULL, pool);
}
@@ -531,7 +691,16 @@ dump_cmd(apr_getopt_t *os,
apr_pool_t *pool)
{
opt_baton_t *opt_baton = baton;
- return replay_revisions(opt_baton->session, opt_baton->url,
+ svn_ra_session_t *extra_ra_session;
+ const char *repos_root;
+
+ SVN_ERR(svn_client_open_ra_session2(&extra_ra_session,
+ opt_baton->url, NULL,
+ opt_baton->ctx, pool, pool));
+ SVN_ERR(svn_ra_get_repos_root2(extra_ra_session, &repos_root, pool));
+ SVN_ERR(svn_ra_reparent(extra_ra_session, repos_root, pool));
+
+ return replay_revisions(opt_baton->session, extra_ra_session,
opt_baton->start_revision.value.number,
opt_baton->end_revision.value.number,
opt_baton->quiet, opt_baton->incremental, pool);
@@ -546,8 +715,8 @@ load_cmd(apr_getopt_t *os,
opt_baton_t *opt_baton = baton;
svn_ra_session_t *aux_session;
- SVN_ERR(svn_client_open_ra_session(&aux_session, opt_baton->url,
- opt_baton->ctx, pool));
+ SVN_ERR(svn_client_open_ra_session2(&aux_session, opt_baton->url, NULL,
+ opt_baton->ctx, pool, pool));
return load_revisions(opt_baton->session, aux_session, opt_baton->url,
opt_baton->quiet, pool);
}
@@ -565,9 +734,9 @@ help_cmd(apr_getopt_t *os,
"\n"
"Available subcommands:\n");
- return svn_opt_print_help3(os, "svnrdump", FALSE, FALSE, NULL, header,
- svnrdump__cmd_table, svnrdump__options, NULL,
- NULL, pool);
+ return svn_opt_print_help4(os, "svnrdump", FALSE, FALSE, FALSE, NULL,
+ header, svnrdump__cmd_table, svnrdump__options,
+ NULL, NULL, pool);
}
/* Examine the OPT_BATON's 'start_revision' and 'end_revision'
@@ -676,11 +845,11 @@ main(int argc, const char **argv)
svn_boolean_t no_auth_cache = FALSE;
svn_boolean_t trust_server_cert = FALSE;
svn_boolean_t non_interactive = FALSE;
+ svn_boolean_t force_interactive = FALSE;
apr_array_header_t *config_options = NULL;
apr_getopt_t *os;
const char *first_arg;
apr_array_header_t *received_opts;
- apr_allocator_t *allocator;
int i;
if (svn_cmdline_init ("svnrdump", stderr) != EXIT_SUCCESS)
@@ -689,13 +858,7 @@ main(int argc, const char **argv)
/* Create our top-level pool. Use a separate mutexless allocator,
* given this application is single threaded.
*/
- if (apr_allocator_create(&allocator))
- return EXIT_FAILURE;
-
- apr_allocator_max_free_set(allocator, SVN_ALLOCATOR_RECOMMENDED_MAX_FREE);
-
- pool = svn_pool_create_ex(NULL, allocator);
- apr_allocator_owner_set(allocator, pool);
+ pool = apr_allocator_owner_get(svn_pool_create_allocator(FALSE));
opt_baton = apr_pcalloc(pool, sizeof(*opt_baton));
opt_baton->start_revision.kind = svn_opt_revision_unspecified;
@@ -801,6 +964,9 @@ main(int argc, const char **argv)
case opt_non_interactive:
non_interactive = TRUE;
break;
+ case opt_force_interactive:
+ force_interactive = TRUE;
+ break;
case opt_incremental:
opt_baton->incremental = TRUE;
break;
@@ -819,6 +985,16 @@ main(int argc, const char **argv)
}
}
+ /* The --non-interactive and --force-interactive options are mutually
+ * exclusive. */
+ if (non_interactive && force_interactive)
+ {
+ err = svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("--non-interactive and --force-interactive "
+ "are mutually exclusive"));
+ return svn_cmdline_handle_exit_error(err, pool, "svnrdump: ");
+ }
+
if (opt_baton->help)
{
subcommand = svn_opt_get_canonical_subcommand2(svnrdump__cmd_table,
@@ -858,9 +1034,10 @@ main(int argc, const char **argv)
err = svn_utf_cstring_to_utf8(&first_arg_utf8, first_arg, pool);
if (err)
return svn_cmdline_handle_exit_error(err, pool, "svnrdump: ");
- svn_error_clear(svn_cmdline_fprintf(stderr, pool,
- _("Unknown command: '%s'\n"),
- first_arg_utf8));
+ svn_error_clear(
+ svn_cmdline_fprintf(stderr, pool,
+ _("Unknown subcommand: '%s'\n"),
+ first_arg_utf8));
SVNRDUMP_ERR(help_cmd(NULL, NULL, pool));
svn_pool_destroy(pool);
exit(EXIT_FAILURE);
@@ -948,31 +1125,59 @@ main(int argc, const char **argv)
opt_baton->url = svn_uri_canonicalize(repos_url, pool);
}
+ if (strcmp(subcommand->name, "load") == 0)
+ {
+ /*
+ * By default (no --*-interactive options given), the 'load' subcommand
+ * is interactive unless username and password were provided on the
+ * command line. This allows prompting for auth creds to work without
+ * requiring users to remember to use --force-interactive.
+ * See issue #3913, "svnrdump load is not working in interactive mode".
+ */
+ if (!non_interactive && !force_interactive)
+ force_interactive = (username == NULL || password == NULL);
+ }
+
+ non_interactive = !svn_cmdline__be_interactive(non_interactive,
+ force_interactive);
+
SVNRDUMP_ERR(init_client_context(&(opt_baton->ctx),
non_interactive,
username,
password,
config_dir,
+ opt_baton->url,
no_auth_cache,
trust_server_cert,
config_options,
pool));
- SVNRDUMP_ERR(svn_client_open_ra_session(&(opt_baton->session),
- opt_baton->url,
- opt_baton->ctx, pool));
+ err = svn_client_open_ra_session2(&(opt_baton->session),
+ opt_baton->url, NULL,
+ opt_baton->ctx, pool, pool);
/* Have sane opt_baton->start_revision and end_revision defaults if
unspecified. */
- SVNRDUMP_ERR(svn_ra_get_latest_revnum(opt_baton->session,
- &latest_revision, pool));
+ if (!err)
+ err = svn_ra_get_latest_revnum(opt_baton->session, &latest_revision, pool);
/* Make sure any provided revisions make sense. */
- SVNRDUMP_ERR(validate_and_resolve_revisions(opt_baton,
- latest_revision, pool));
+ if (!err)
+ err = validate_and_resolve_revisions(opt_baton, latest_revision, pool);
/* Dispatch the subcommand */
- SVNRDUMP_ERR((*subcommand->cmd_func)(os, opt_baton, pool));
+ if (!err)
+ err = (*subcommand->cmd_func)(os, opt_baton, pool);
+
+ if (err && err->apr_err == SVN_ERR_AUTHN_FAILED && non_interactive)
+ {
+ err = svn_error_quick_wrap(err,
+ _("Authentication failed and interactive"
+ " prompting is disabled; see the"
+ " --force-interactive option"));
+ }
+
+ SVNRDUMP_ERR(err);
svn_pool_destroy(pool);
diff --git a/subversion/svnrdump/svnrdump.h b/subversion/svnrdump/svnrdump.h
index 1febb5a..2a81014 100644
--- a/subversion/svnrdump/svnrdump.h
+++ b/subversion/svnrdump/svnrdump.h
@@ -32,6 +32,8 @@
#include "svn_delta.h"
#include "svn_ra.h"
+#include "private/svn_editor.h"
+
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
@@ -39,18 +41,39 @@ extern "C" {
/**
* Get a dump editor @a editor along with a @a edit_baton allocated in
- * @a pool. The editor will write output to @a stream. Use @a
- * cancel_func and @a cancel_baton to check for user cancellation of
- * the operation (for timely-but-safe termination).
+ * @a pool. The editor will write output to @a stream.
+ *
+ * @a update_anchor_relpath is the repository relative path of the
+ * anchor of the update-style drive which will happen on @a *editor;
+ * if a replay-style drive will instead be used, it should be passed
+ * as @c NULL.
+ *
+ * Use @a cancel_func and @a cancel_baton to check for user
+ * cancellation of the operation (for timely-but-safe termination).
*/
svn_error_t *
svn_rdump__get_dump_editor(const svn_delta_editor_t **editor,
void **edit_baton,
+ svn_revnum_t revision,
svn_stream_t *stream,
+ svn_ra_session_t *ra_session,
+ const char *update_anchor_relpath,
svn_cancel_func_t cancel_func,
void *cancel_baton,
apr_pool_t *pool);
+/* Same as above, only returns an Ev2 editor. */
+svn_error_t *
+svn_rdump__get_dump_editor_v2(svn_editor_t **editor,
+ svn_revnum_t revision,
+ svn_stream_t *stream,
+ svn_ra_session_t *ra_session,
+ const char *edit_root_relpath,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool,
+ apr_pool_t *result_pool);
+
/**
* Load the dumpstream carried in @a stream to the location described
@@ -85,6 +108,20 @@ svn_rdump__normalize_props(apr_hash_t **normal_props,
apr_hash_t *props,
apr_pool_t *result_pool);
+/* Normalize the line ending style of a single property that "needs
+ * translation" (according to svn_prop_needs_translation(),
+ * currently all svn:* props) so that they contain only LF (\n) line endings.
+ * "\r" characters found mid-line are replaced with "\n".
+ * "\r\n" sequences are replaced with "\n"
+ *
+ * NAME is used to check that VALUE should be normalized, and if this is the
+ * case, VALUE is then normalized, allocated from RESULT_POOL
+ */
+svn_error_t *
+svn_rdump__normalize_prop(const char *name,
+ const svn_string_t **value,
+ apr_pool_t *result_pool);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/svnrdump/util.c b/subversion/svnrdump/util.c
index edf9c8f..2586cd1 100644
--- a/subversion/svnrdump/util.c
+++ b/subversion/svnrdump/util.c
@@ -31,6 +31,25 @@
svn_error_t *
+svn_rdump__normalize_prop(const char *name,
+ const svn_string_t **value,
+ apr_pool_t *result_pool)
+{
+ if (svn_prop_needs_translation(name) && *value)
+ {
+ const char *cstring;
+
+ SVN_ERR(svn_subst_translate_cstring2((*value)->data, &cstring,
+ "\n", TRUE,
+ NULL, FALSE,
+ result_pool));
+
+ *value = svn_string_create(cstring, result_pool);
+ }
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
svn_rdump__normalize_props(apr_hash_t **normal_props,
apr_hash_t *props,
apr_pool_t *result_pool)
@@ -45,18 +64,10 @@ svn_rdump__normalize_props(apr_hash_t **normal_props,
const char *key = svn__apr_hash_index_key(hi);
const svn_string_t *value = svn__apr_hash_index_val(hi);
- if (svn_prop_needs_translation(key))
- {
- const char *cstring;
-
- SVN_ERR(svn_subst_translate_cstring2(value->data, &cstring,
- "\n", TRUE,
- NULL, FALSE,
- result_pool));
- value = svn_string_create(cstring, result_pool);
- }
+ SVN_ERR(svn_rdump__normalize_prop(key, &value,
+ result_pool));
- apr_hash_set(*normal_props, key, APR_HASH_KEY_STRING, value);
+ svn_hash_sets(*normal_props, key, value);
}
return SVN_NO_ERROR;
}
diff --git a/subversion/svnserve/cyrus_auth.c b/subversion/svnserve/cyrus_auth.c
index 8b4dda9..2d75047 100644
--- a/subversion/svnserve/cyrus_auth.c
+++ b/subversion/svnserve/cyrus_auth.c
@@ -38,6 +38,7 @@
#include "private/svn_atomic.h"
#include "private/ra_svn_sasl.h"
+#include "private/svn_ra_svn_private.h"
#include "server.h"
@@ -61,7 +62,7 @@ static int canonicalize_username(sasl_conn_t *conn,
char *out, /* the output buffer */
unsigned out_max, unsigned *out_len)
{
- int realm_len = strlen(user_realm);
+ size_t realm_len = strlen(user_realm);
char *pos;
*out_len = inlen;
@@ -98,19 +99,14 @@ static int canonicalize_username(sasl_conn_t *conn,
static sasl_callback_t callbacks[] =
{
- { SASL_CB_CANON_USER, canonicalize_username, NULL },
+ { SASL_CB_CANON_USER, (int (*)(void))canonicalize_username, NULL },
{ SASL_CB_LIST_END, NULL, NULL }
};
static svn_error_t *initialize(void *baton, apr_pool_t *pool)
{
int result;
- apr_status_t status;
-
- status = svn_ra_svn__sasl_common_init(pool);
- if (status)
- return svn_error_wrap_apr(status,
- _("Could not initialize the SASL library"));
+ SVN_ERR(svn_ra_svn__sasl_common_init(pool));
/* The second parameter tells SASL to look for a configuration file
named subversion.conf. */
@@ -138,8 +134,8 @@ static svn_error_t *
fail_auth(svn_ra_svn_conn_t *conn, apr_pool_t *pool, sasl_conn_t *sasl_ctx)
{
const char *msg = sasl_errdetail(sasl_ctx);
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w(c)", "failure", msg));
- return svn_ra_svn_flush(conn, pool);
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "w(c)", "failure", msg));
+ return svn_ra_svn__flush(conn, pool);
}
/* Like svn_ra_svn_write_cmd_failure, but also clears the given error
@@ -147,7 +143,7 @@ fail_auth(svn_ra_svn_conn_t *conn, apr_pool_t *pool, sasl_conn_t *sasl_ctx)
static svn_error_t *
write_failure(svn_ra_svn_conn_t *conn, apr_pool_t *pool, svn_error_t **err_p)
{
- svn_error_t *write_err = svn_ra_svn_write_cmd_failure(conn, pool, *err_p);
+ svn_error_t *write_err = svn_ra_svn__write_cmd_failure(conn, pool, *err_p);
svn_error_clear(*err_p);
*err_p = SVN_NO_ERROR;
return write_err;
@@ -160,7 +156,7 @@ fail_cmd(svn_ra_svn_conn_t *conn, apr_pool_t *pool, sasl_conn_t *sasl_ctx)
svn_error_t *err = svn_error_create(SVN_ERR_RA_NOT_AUTHORIZED, NULL,
sasl_errdetail(sasl_ctx));
SVN_ERR(write_failure(conn, pool, &err));
- return svn_ra_svn_flush(conn, pool);
+ return svn_ra_svn__flush(conn, pool);
}
static svn_error_t *try_auth(svn_ra_svn_conn_t *conn,
@@ -178,7 +174,7 @@ static svn_error_t *try_auth(svn_ra_svn_conn_t *conn,
*success = FALSE;
/* Read the client's chosen mech and the initial token. */
- SVN_ERR(svn_ra_svn_read_tuple(conn, pool, "w(?s)", &mech, &in));
+ SVN_ERR(svn_ra_svn__read_tuple(conn, pool, "w(?s)", &mech, &in));
if (strcmp(mech, "EXTERNAL") == 0 && !in)
in = svn_string_create(b->tunnel_user, pool);
@@ -204,10 +200,10 @@ static svn_error_t *try_auth(svn_ra_svn_conn_t *conn,
if (use_base64)
arg = svn_base64_encode_string2(arg, TRUE, pool);
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w(s)", "step", arg));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "w(s)", "step", arg));
/* Read and decode the client response. */
- SVN_ERR(svn_ra_svn_read_item(conn, pool, &item));
+ SVN_ERR(svn_ra_svn__read_item(conn, pool, &item));
if (item->kind != SVN_RA_SVN_STRING)
return SVN_NO_ERROR;
@@ -228,7 +224,7 @@ static svn_error_t *try_auth(svn_ra_svn_conn_t *conn,
arg = NULL;
*success = TRUE;
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w(?s)", "success", arg));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "w(?s)", "success", arg));
return SVN_NO_ERROR;
}
@@ -263,7 +259,7 @@ svn_error_t *cyrus_auth_request(svn_ra_svn_conn_t *conn,
{
svn_error_t *err = svn_error_wrap_apr(apr_err, _("Can't get hostname"));
SVN_ERR(write_failure(conn, pool, &err));
- return svn_ra_svn_flush(conn, pool);
+ return svn_ra_svn__flush(conn, pool);
}
/* Create a SASL context. SASL_SUCCESS_DATA tells SASL that the protocol
@@ -278,7 +274,7 @@ svn_error_t *cyrus_auth_request(svn_ra_svn_conn_t *conn,
svn_error_t *err = svn_error_create(SVN_ERR_RA_NOT_AUTHORIZED, NULL,
sasl_errstring(result, NULL, NULL));
SVN_ERR(write_failure(conn, pool, &err));
- return svn_ra_svn_flush(conn, pool);
+ return svn_ra_svn__flush(conn, pool);
}
/* Make sure the context is always destroyed. */
@@ -329,12 +325,12 @@ svn_error_t *cyrus_auth_request(svn_ra_svn_conn_t *conn,
_("Could not obtain the list"
" of SASL mechanisms"));
SVN_ERR(write_failure(conn, pool, &err));
- return svn_ra_svn_flush(conn, pool);
+ return svn_ra_svn__flush(conn, pool);
}
/* Send the list of mechanisms and the realm to the client. */
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, "(w)c",
- mechlist, b->realm));
+ SVN_ERR(svn_ra_svn__write_cmd_response(conn, pool, "(w)c",
+ mechlist, b->realm));
/* The main authentication loop. */
subpool = svn_pool_create(pool);
@@ -371,7 +367,7 @@ svn_error_t *cyrus_auth_request(svn_ra_svn_conn_t *conn,
_("Couldn't obtain the authenticated"
" username"));
SVN_ERR(write_failure(conn, pool, &err));
- return svn_ra_svn_flush(conn, pool);
+ return svn_ra_svn__flush(conn, pool);
}
}
diff --git a/subversion/svnserve/serve.c b/subversion/svnserve/serve.c
index 8c4708d..23ef6ed 100644
--- a/subversion/svnserve/serve.c
+++ b/subversion/svnserve/serve.c
@@ -35,6 +35,7 @@
#include "svn_compat.h"
#include "svn_private_config.h" /* For SVN_PATH_LOCAL_SEPARATOR */
+#include "svn_hash.h"
#include "svn_types.h"
#include "svn_string.h"
#include "svn_pools.h"
@@ -52,6 +53,7 @@
#include "private/svn_log.h"
#include "private/svn_mergeinfo_private.h"
+#include "private/svn_ra_svn_private.h"
#include "private/svn_fspath.h"
#ifdef HAVE_UNISTD_H
@@ -97,6 +99,10 @@ typedef struct fs_warning_baton_t {
apr_pool_t *pool;
} fs_warning_baton_t;
+typedef struct authz_baton_t {
+ server_baton_t *server;
+ svn_ra_svn_conn_t *conn;
+} authz_baton_t;
/* Write LEN bytes of ERRSTR to LOG_FILE with svn_io_file_write(). */
static svn_error_t *
@@ -185,10 +191,10 @@ log_fail_and_flush(svn_error_t *err, server_baton_t *server,
svn_error_t *io_err;
log_server_error(err, server, conn, pool);
- io_err = svn_ra_svn_write_cmd_failure(conn, pool, err);
+ io_err = svn_ra_svn__write_cmd_failure(conn, pool, err);
svn_error_clear(err);
SVN_ERR(io_err);
- return svn_ra_svn_flush(conn, pool);
+ return svn_ra_svn__flush(conn, pool);
}
/* Log a client command. */
@@ -221,37 +227,60 @@ static svn_error_t *log_command(server_baton_t *b,
return log_write(b->log_file, line, nbytes, pool);
}
-svn_error_t *load_configs(svn_config_t **cfg,
- svn_config_t **pwdb,
- svn_authz_t **authzdb,
- enum username_case_type *username_case,
- const char *filename,
- svn_boolean_t must_exist,
- const char *base,
- server_baton_t *server,
- svn_ra_svn_conn_t *conn,
- apr_pool_t *pool)
+/* Log an authz failure */
+static svn_error_t *
+log_authz_denied(const char *path,
+ svn_repos_authz_access_t required,
+ server_baton_t *b,
+ svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool)
{
- const char *pwdb_path, *authzdb_path;
- svn_error_t *err;
+ const char *timestr, *remote_host, *line;
+
+ if (b->log_file == NULL)
+ return SVN_NO_ERROR;
+
+ if (!b->user)
+ return SVN_NO_ERROR;
+
+ timestr = svn_time_to_cstring(apr_time_now(), pool);
+ remote_host = svn_ra_svn_conn_remote_host(conn);
+
+ line = apr_psprintf(pool, "%" APR_PID_T_FMT
+ " %s %s %s %s Authorization Failed %s%s %s" APR_EOL_STR,
+ getpid(), timestr,
+ (remote_host ? remote_host : "-"),
+ (b->user ? b->user : "-"),
+ b->repos_name,
+ (required & svn_authz_recursive ? "recursive " : ""),
+ (required & svn_authz_write ? "write" : "read"),
+ (path && path[0] ? path : "/"));
+
+ return log_write(b->log_file, line, strlen(line), pool);
+}
+
- SVN_ERR(svn_config_read2(cfg, filename, must_exist, FALSE, pool));
+svn_error_t *load_pwdb_config(server_baton_t *server,
+ svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool)
+{
+ const char *pwdb_path;
+ svn_error_t *err;
- svn_config_get(*cfg, &pwdb_path, SVN_CONFIG_SECTION_GENERAL,
+ svn_config_get(server->cfg, &pwdb_path, SVN_CONFIG_SECTION_GENERAL,
SVN_CONFIG_OPTION_PASSWORD_DB, NULL);
- *pwdb = NULL;
+ server->pwdb = NULL;
if (pwdb_path)
{
- pwdb_path = svn_dirent_canonicalize(pwdb_path, pool);
- pwdb_path = svn_dirent_join(base, pwdb_path, pool);
+ pwdb_path = svn_dirent_internal_style(pwdb_path, pool);
+ pwdb_path = svn_dirent_join(server->base, pwdb_path, pool);
- err = svn_config_read2(pwdb, pwdb_path, TRUE, FALSE, pool);
+ err = svn_config_read3(&server->pwdb, pwdb_path, TRUE,
+ FALSE, FALSE, pool);
if (err)
{
- if (server)
- /* Called by listening server; log error no matter what it is. */
- log_server_error(err, server, conn, pool);
+ log_server_error(err, server, conn, pool);
/* Because it may be possible to read the pwdb file with some
access methods and not others, ignore errors reading the pwdb
@@ -265,18 +294,11 @@ svn_error_t *load_configs(svn_config_t **cfg,
if (err->apr_err != SVN_ERR_BAD_FILENAME
&& ! APR_STATUS_IS_EACCES(err->apr_err))
{
- if (server)
- {
- /* Called by listening server: Now that we've logged
- * the error, clear it and return a nice, generic
- * error to the user
- * (http://subversion.tigris.org/issues/show_bug.cgi?id=2271). */
- svn_error_clear(err);
- return svn_error_create(SVN_ERR_AUTHN_FAILED, NULL, NULL);
- }
- /* Called during startup; return the error, whereupon it
- * will go to standard error for the admin to see. */
- return err;
+ /* Now that we've logged the error, clear it and return a
+ * nice, generic error to the user:
+ * http://subversion.tigris.org/issues/show_bug.cgi?id=2271 */
+ svn_error_clear(err);
+ return svn_error_create(SVN_ERR_AUTHN_FAILED, NULL, NULL);
}
else
/* Ignore SVN_ERR_BAD_FILENAME and APR_EACCES and proceed. */
@@ -284,51 +306,98 @@ svn_error_t *load_configs(svn_config_t **cfg,
}
}
+ return SVN_NO_ERROR;
+}
+
+/* Canonicalize *ACCESS_FILE based on the type of argument. Results are
+ * placed in *ACCESS_FILE. SERVER baton is used to convert relative paths to
+ * absolute paths rooted at the server root. REPOS_ROOT is used to calculate
+ * an absolute URL for repos-relative URLs. */
+static svn_error_t *
+canonicalize_access_file(const char **access_file, server_baton_t *server,
+ const char *repos_root, apr_pool_t *pool)
+{
+ if (svn_path_is_url(*access_file))
+ {
+ *access_file = svn_uri_canonicalize(*access_file, pool);
+ }
+ else if (svn_path_is_repos_relative_url(*access_file))
+ {
+ const char *repos_root_url;
+
+ SVN_ERR(svn_uri_get_file_url_from_dirent(&repos_root_url, repos_root,
+ pool));
+ SVN_ERR(svn_path_resolve_repos_relative_url(access_file, *access_file,
+ repos_root_url, pool));
+ *access_file = svn_uri_canonicalize(*access_file, pool);
+ }
+ else
+ {
+ *access_file = svn_dirent_internal_style(*access_file, pool);
+ *access_file = svn_dirent_join(server->base, *access_file, pool);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *load_authz_config(server_baton_t *server,
+ svn_ra_svn_conn_t *conn,
+ const char *repos_root,
+ apr_pool_t *pool)
+{
+ const char *authzdb_path;
+ const char *groupsdb_path;
+ svn_error_t *err;
+
/* Read authz configuration. */
- svn_config_get(*cfg, &authzdb_path, SVN_CONFIG_SECTION_GENERAL,
+ svn_config_get(server->cfg, &authzdb_path, SVN_CONFIG_SECTION_GENERAL,
SVN_CONFIG_OPTION_AUTHZ_DB, NULL);
+
+ svn_config_get(server->cfg, &groupsdb_path, SVN_CONFIG_SECTION_GENERAL,
+ SVN_CONFIG_OPTION_GROUPS_DB, NULL);
+
if (authzdb_path)
{
const char *case_force_val;
- authzdb_path = svn_dirent_canonicalize(authzdb_path, pool);
- authzdb_path = svn_dirent_join(base, authzdb_path, pool);
- err = svn_repos_authz_read(authzdb, authzdb_path, TRUE, pool);
+ /* Canonicalize and add the base onto the authzdb_path (if needed). */
+ err = canonicalize_access_file(&authzdb_path, server,
+ repos_root, pool);
+
+ /* Same for the groupsdb_path if it is present. */
+ if (groupsdb_path && !err)
+ err = canonicalize_access_file(&groupsdb_path, server,
+ repos_root, pool);
+
+ if (!err)
+ err = svn_repos_authz_read2(&server->authzdb, authzdb_path,
+ groupsdb_path, TRUE, pool);
+
if (err)
{
- if (server)
- {
- /* Called by listening server: Log the error, clear it,
- * and return a nice, generic error to the user
- * (http://subversion.tigris.org/issues/show_bug.cgi?id=2271). */
- log_server_error(err, server, conn, pool);
- svn_error_clear(err);
- return svn_error_create(SVN_ERR_AUTHZ_INVALID_CONFIG, NULL, NULL);
- }
- else
- /* Called during startup; return the error, whereupon it
- * will go to standard error for the admin to see. */
- return err;
+ log_server_error(err, server, conn, pool);
+ svn_error_clear(err);
+ return svn_error_create(SVN_ERR_AUTHZ_INVALID_CONFIG, NULL, NULL);
}
/* Are we going to be case-normalizing usernames when we consult
* this authz file? */
- svn_config_get(*cfg, &case_force_val, SVN_CONFIG_SECTION_GENERAL,
+ svn_config_get(server->cfg, &case_force_val, SVN_CONFIG_SECTION_GENERAL,
SVN_CONFIG_OPTION_FORCE_USERNAME_CASE, NULL);
if (case_force_val)
{
if (strcmp(case_force_val, "upper") == 0)
- *username_case = CASE_FORCE_UPPER;
+ server->username_case = CASE_FORCE_UPPER;
else if (strcmp(case_force_val, "lower") == 0)
- *username_case = CASE_FORCE_LOWER;
+ server->username_case = CASE_FORCE_LOWER;
else
- *username_case = CASE_ASIS;
+ server->username_case = CASE_ASIS;
}
}
else
{
- *authzdb = NULL;
- *username_case = CASE_ASIS;
+ server->authzdb = NULL;
+ server->username_case = CASE_ASIS;
}
return SVN_NO_ERROR;
@@ -381,6 +450,7 @@ static svn_error_t *authz_check_access(svn_boolean_t *allowed,
const char *path,
svn_repos_authz_access_t required,
server_baton_t *b,
+ svn_ra_svn_conn_t *conn,
apr_pool_t *pool)
{
/* If authz cannot be performed, grant access. This is NOT the same
@@ -415,9 +485,13 @@ static svn_error_t *authz_check_access(svn_boolean_t *allowed,
b->authz_user = authz_user;
}
- return svn_repos_authz_check_access(b->authzdb, b->authz_repos_name,
- path, b->authz_user, required,
- allowed, pool);
+ SVN_ERR(svn_repos_authz_check_access(b->authzdb, b->authz_repos_name,
+ path, b->authz_user, required,
+ allowed, pool));
+ if (!*allowed)
+ SVN_ERR(log_authz_denied(path, required, b, conn, pool));
+
+ return SVN_NO_ERROR;
}
/* Set *ALLOWED to TRUE if PATH is readable by the user described in
@@ -430,9 +504,10 @@ static svn_error_t *authz_check_access_cb(svn_boolean_t *allowed,
void *baton,
apr_pool_t *pool)
{
- server_baton_t *sb = baton;
+ authz_baton_t *sb = baton;
- return authz_check_access(allowed, path, svn_authz_read, sb, pool);
+ return authz_check_access(allowed, path, svn_authz_read,
+ sb->server, sb->conn, pool);
}
/* If authz is enabled in the specified BATON, return a read authorization
@@ -456,9 +531,10 @@ static svn_error_t *authz_commit_cb(svn_repos_authz_access_t required,
void *baton,
apr_pool_t *pool)
{
- server_baton_t *sb = baton;
+ authz_baton_t *sb = baton;
- return authz_check_access(allowed, path, required, sb, pool);
+ return authz_check_access(allowed, path, required,
+ sb->server, sb->conn, pool);
}
@@ -488,11 +564,11 @@ static svn_error_t *send_mechs(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
svn_boolean_t needs_username)
{
if (!needs_username && get_access(b, UNAUTHENTICATED) >= required)
- SVN_ERR(svn_ra_svn_write_word(conn, pool, "ANONYMOUS"));
+ SVN_ERR(svn_ra_svn__write_word(conn, pool, "ANONYMOUS"));
if (b->tunnel_user && get_access(b, AUTHENTICATED) >= required)
- SVN_ERR(svn_ra_svn_write_word(conn, pool, "EXTERNAL"));
+ SVN_ERR(svn_ra_svn__write_word(conn, pool, "EXTERNAL"));
if (b->pwdb && get_access(b, AUTHENTICATED) >= required)
- SVN_ERR(svn_ra_svn_write_word(conn, pool, "CRAM-MD5"));
+ SVN_ERR(svn_ra_svn__write_word(conn, pool, "CRAM-MD5"));
return SVN_NO_ERROR;
}
@@ -565,10 +641,10 @@ static svn_error_t *auth(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
&& b->tunnel_user && strcmp(mech, "EXTERNAL") == 0)
{
if (*mecharg && strcmp(mecharg, b->tunnel_user) != 0)
- return svn_ra_svn_write_tuple(conn, pool, "w(c)", "failure",
- "Requested username does not match");
+ return svn_ra_svn__write_tuple(conn, pool, "w(c)", "failure",
+ "Requested username does not match");
b->user = b->tunnel_user;
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w()", "success"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "w()", "success"));
*success = TRUE;
return SVN_NO_ERROR;
}
@@ -576,7 +652,7 @@ static svn_error_t *auth(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
if (get_access(b, UNAUTHENTICATED) >= required
&& strcmp(mech, "ANONYMOUS") == 0 && ! needs_username)
{
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w()", "success"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "w()", "success"));
*success = TRUE;
return SVN_NO_ERROR;
}
@@ -589,7 +665,7 @@ static svn_error_t *auth(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
return SVN_NO_ERROR;
}
- return svn_ra_svn_write_tuple(conn, pool, "w(c)", "failure",
+ return svn_ra_svn__write_tuple(conn, pool, "w(c)", "failure",
"Must authenticate with listed mechanism");
}
@@ -602,12 +678,12 @@ internal_auth_request(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
svn_boolean_t success;
const char *mech, *mecharg;
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w((!", "success"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "w((!", "success"));
SVN_ERR(send_mechs(conn, pool, b, required, needs_username));
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!)c)", b->realm));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!)c)", b->realm));
do
{
- SVN_ERR(svn_ra_svn_read_tuple(conn, pool, "w(?c)", &mech, &mecharg));
+ SVN_ERR(svn_ra_svn__read_tuple(conn, pool, "w(?c)", &mech, &mecharg));
if (!*mech)
break;
SVN_ERR(auth(conn, pool, mech, mecharg, b, required, needs_username,
@@ -640,7 +716,7 @@ static svn_error_t *auth_request(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
static svn_error_t *trivial_auth_request(svn_ra_svn_conn_t *conn,
apr_pool_t *pool, server_baton_t *b)
{
- return svn_ra_svn_write_cmd_response(conn, pool, "()c", "");
+ return svn_ra_svn__write_cmd_response(conn, pool, "()c", "");
}
/* Ensure that the client has the REQUIRED access by checking the
@@ -667,7 +743,7 @@ static svn_boolean_t lookup_access(apr_pool_t *pool,
svn_error_t *err;
/* Get authz's opinion on the access. */
- err = authz_check_access(&authorized, path, required, baton, pool);
+ err = authz_check_access(&authorized, path, required, baton, conn, pool);
/* If an error made lookup fail, deny access. */
if (err)
@@ -763,7 +839,7 @@ static svn_error_t *set_path(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
svn_depth_t depth = svn_depth_infinity;
svn_boolean_t start_empty;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "crb?(?c)?w",
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "crb?(?c)?w",
&path, &rev, &start_empty, &lock_token,
&depth_word));
if (depth_word)
@@ -786,7 +862,7 @@ static svn_error_t *delete_path(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
report_driver_baton_t *b = baton;
const char *path;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c", &path));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c", &path));
path = svn_relpath_canonicalize(path, pool);
if (!b->err)
b->err = svn_repos_delete_path(b->report_baton, path, pool);
@@ -803,7 +879,7 @@ static svn_error_t *link_path(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
/* Default to infinity, for old clients that don't send depth. */
svn_depth_t depth = svn_depth_infinity;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "ccrb?(?c)?w",
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "ccrb?(?c)?w",
&path, &url, &rev, &start_empty,
&lock_token, &depth_word));
@@ -882,17 +958,22 @@ static svn_error_t *accept_report(svn_boolean_t *only_empty_entry,
void *edit_baton, *report_baton;
report_driver_baton_t rb;
svn_error_t *err;
+ authz_baton_t ab;
+
+ ab.server = b;
+ ab.conn = conn;
/* Make an svn_repos report baton. Tell it to drive the network editor
* when the report is complete. */
svn_ra_svn_get_editor(&editor, &edit_baton, conn, pool, NULL, NULL);
- SVN_CMD_ERR(svn_repos_begin_report2(&report_baton, rev, b->repos,
+ SVN_CMD_ERR(svn_repos_begin_report3(&report_baton, rev, b->repos,
b->fs_path->data, target, tgt_path,
text_deltas, depth, ignore_ancestry,
send_copyfrom_args,
editor, edit_baton,
authz_check_access_cb_func(b),
- b, pool));
+ &ab, svn_ra_svn_zero_copy_limit(conn),
+ pool));
rb.sb = b;
rb.repos_url = svn_path_uri_decode(b->repos_url, pool);
@@ -903,7 +984,7 @@ static svn_error_t *accept_report(svn_boolean_t *only_empty_entry,
rb.from_rev = from_rev;
if (from_rev)
*from_rev = SVN_INVALID_REVNUM;
- err = svn_ra_svn_handle_commands2(conn, pool, report_commands, &rb, TRUE);
+ err = svn_ra_svn__handle_commands2(conn, pool, report_commands, &rb, TRUE);
if (err)
{
/* Network or protocol error while handling commands. */
@@ -915,7 +996,7 @@ static svn_error_t *accept_report(svn_boolean_t *only_empty_entry,
/* Some failure during the reporting or editing operations. */
SVN_CMD_ERR(rb.err);
}
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, ""));
+ SVN_ERR(svn_ra_svn__write_cmd_response(conn, pool, ""));
if (only_empty_entry)
*only_empty_entry = rb.entry_counter == 1 && rb.only_empty_entries;
@@ -937,8 +1018,8 @@ static svn_error_t *write_prop_diffs(svn_ra_svn_conn_t *conn,
{
const svn_prop_t *prop = &APR_ARRAY_IDX(propdiffs, i, svn_prop_t);
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "c(?s)",
- prop->name, prop->value));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "c(?s)",
+ prop->name, prop->value));
}
return SVN_NO_ERROR;
@@ -954,41 +1035,58 @@ static svn_error_t *write_lock(svn_ra_svn_conn_t *conn,
cdate = svn_time_to_cstring(lock->creation_date, pool);
edate = lock->expiration_date
? svn_time_to_cstring(lock->expiration_date, pool) : NULL;
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "ccc(?c)c(?c)", lock->path,
- lock->token, lock->owner, lock->comment,
- cdate, edate));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "ccc(?c)c(?c)", lock->path,
+ lock->token, lock->owner, lock->comment,
+ cdate, edate));
return SVN_NO_ERROR;
}
/* ### This really belongs in libsvn_repos. */
-/* Get the properties for a path, with hardcoded committed-info values. */
-static svn_error_t *get_props(apr_hash_t **props, svn_fs_root_t *root,
- const char *path, apr_pool_t *pool)
-{
- svn_string_t *str;
- svn_revnum_t crev;
- const char *cdate, *cauthor, *uuid;
-
- /* Get the properties. */
- SVN_ERR(svn_fs_node_proplist(props, root, path, pool));
-
- /* Hardcode the values for the committed revision, date, and author. */
- SVN_ERR(svn_repos_get_committed_info(&crev, &cdate, &cauthor, root,
- path, pool));
- str = svn_string_create(apr_psprintf(pool, "%ld", crev),
- pool);
- apr_hash_set(*props, SVN_PROP_ENTRY_COMMITTED_REV, APR_HASH_KEY_STRING, str);
- str = (cdate) ? svn_string_create(cdate, pool) : NULL;
- apr_hash_set(*props, SVN_PROP_ENTRY_COMMITTED_DATE, APR_HASH_KEY_STRING,
- str);
- str = (cauthor) ? svn_string_create(cauthor, pool) : NULL;
- apr_hash_set(*props, SVN_PROP_ENTRY_LAST_AUTHOR, APR_HASH_KEY_STRING, str);
-
- /* Hardcode the values for the UUID. */
- SVN_ERR(svn_fs_get_uuid(svn_fs_root_fs(root), &uuid, pool));
- str = (uuid) ? svn_string_create(uuid, pool) : NULL;
- apr_hash_set(*props, SVN_PROP_ENTRY_UUID, APR_HASH_KEY_STRING, str);
+/* Get the explicit properties and/or inherited properties for a PATH in
+ ROOT, with hardcoded committed-info values. */
+static svn_error_t *
+get_props(apr_hash_t **props,
+ apr_array_header_t **iprops,
+ authz_baton_t *b,
+ svn_fs_root_t *root,
+ const char *path,
+ apr_pool_t *pool)
+{
+ /* Get the explicit properties. */
+ if (props)
+ {
+ svn_string_t *str;
+ svn_revnum_t crev;
+ const char *cdate, *cauthor, *uuid;
+
+ SVN_ERR(svn_fs_node_proplist(props, root, path, pool));
+
+ /* Hardcode the values for the committed revision, date, and author. */
+ SVN_ERR(svn_repos_get_committed_info(&crev, &cdate, &cauthor, root,
+ path, pool));
+ str = svn_string_create(apr_psprintf(pool, "%ld", crev),
+ pool);
+ svn_hash_sets(*props, SVN_PROP_ENTRY_COMMITTED_REV, str);
+ str = (cdate) ? svn_string_create(cdate, pool) : NULL;
+ svn_hash_sets(*props, SVN_PROP_ENTRY_COMMITTED_DATE, str);
+ str = (cauthor) ? svn_string_create(cauthor, pool) : NULL;
+ svn_hash_sets(*props, SVN_PROP_ENTRY_LAST_AUTHOR, str);
+
+ /* Hardcode the values for the UUID. */
+ SVN_ERR(svn_fs_get_uuid(svn_fs_root_fs(root), &uuid, pool));
+ str = (uuid) ? svn_string_create(uuid, pool) : NULL;
+ svn_hash_sets(*props, SVN_PROP_ENTRY_UUID, str);
+ }
+
+ /* Get any inherited properties the user is authorized to. */
+ if (iprops)
+ {
+ SVN_ERR(svn_repos_fs_get_inherited_props(
+ iprops, root, path, NULL,
+ authz_check_access_cb_func(b->server),
+ b, pool, pool));
+ }
return SVN_NO_ERROR;
}
@@ -1001,7 +1099,7 @@ static svn_error_t *reparent(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
const char *url;
const char *fs_path;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c", &url));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c", &url));
url = svn_uri_canonicalize(url, pool);
SVN_ERR(trivial_auth_request(conn, pool, b));
SVN_CMD_ERR(get_fs_path(svn_path_uri_decode(b->repos_url, pool),
@@ -1009,7 +1107,7 @@ static svn_error_t *reparent(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
&fs_path));
SVN_ERR(log_command(b, conn, pool, "%s", svn_log__reparent(fs_path, pool)));
svn_stringbuf_set(b->fs_path, fs_path);
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, ""));
+ SVN_ERR(svn_ra_svn__write_cmd_response(conn, pool, ""));
return SVN_NO_ERROR;
}
@@ -1023,7 +1121,7 @@ static svn_error_t *get_latest_rev(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
SVN_ERR(trivial_auth_request(conn, pool, b));
SVN_CMD_ERR(svn_fs_youngest_rev(&rev, b->fs, pool));
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, "r", rev));
+ SVN_ERR(svn_ra_svn__write_cmd_response(conn, pool, "r", rev));
return SVN_NO_ERROR;
}
@@ -1035,13 +1133,13 @@ static svn_error_t *get_dated_rev(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
apr_time_t tm;
const char *timestr;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c", &timestr));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c", &timestr));
SVN_ERR(log_command(b, conn, pool, "get-dated-rev %s", timestr));
SVN_ERR(trivial_auth_request(conn, pool, b));
SVN_CMD_ERR(svn_time_from_cstring(&tm, timestr, pool));
SVN_CMD_ERR(svn_repos_dated_revision(&rev, b->repos, tm, pool));
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, "r", rev));
+ SVN_ERR(svn_ra_svn__write_cmd_response(conn, pool, "r", rev));
return SVN_NO_ERROR;
}
@@ -1054,15 +1152,20 @@ static svn_error_t *do_change_rev_prop(svn_ra_svn_conn_t *conn,
const svn_string_t *value,
apr_pool_t *pool)
{
+ authz_baton_t ab;
+
+ ab.server = b;
+ ab.conn = conn;
+
SVN_ERR(must_have_access(conn, pool, b, svn_authz_write, NULL, FALSE));
SVN_ERR(log_command(b, conn, pool, "%s",
svn_log__change_rev_prop(rev, name, pool)));
SVN_CMD_ERR(svn_repos_fs_change_rev_prop4(b->repos, rev, b->user,
name, old_value_p, value,
TRUE, TRUE,
- authz_check_access_cb_func(b), b,
+ authz_check_access_cb_func(b), &ab,
pool));
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, ""));
+ SVN_ERR(svn_ra_svn__write_cmd_response(conn, pool, ""));
return SVN_NO_ERROR;
}
@@ -1078,9 +1181,9 @@ static svn_error_t *change_rev_prop2(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
svn_string_t *old_value;
svn_boolean_t dont_care;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "rc(?s)(b?s)",
- &rev, &name, &value,
- &dont_care, &old_value));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "rc(?s)(b?s)",
+ &rev, &name, &value,
+ &dont_care, &old_value));
/* Argument parsing. */
if (dont_care)
@@ -1114,7 +1217,7 @@ static svn_error_t *change_rev_prop(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
/* Because the revprop value was at one time mandatory, the usual
optional element pattern "(?s)" isn't used. */
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "rc?s", &rev, &name, &value));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "rc?s", &rev, &name, &value));
SVN_ERR(do_change_rev_prop(conn, b, rev, name, NULL, value, pool));
@@ -1127,17 +1230,21 @@ static svn_error_t *rev_proplist(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
server_baton_t *b = baton;
svn_revnum_t rev;
apr_hash_t *props;
+ authz_baton_t ab;
+
+ ab.server = b;
+ ab.conn = conn;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "r", &rev));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "r", &rev));
SVN_ERR(log_command(b, conn, pool, "%s", svn_log__rev_proplist(rev, pool)));
SVN_ERR(trivial_auth_request(conn, pool, b));
SVN_CMD_ERR(svn_repos_fs_revision_proplist(&props, b->repos, rev,
- authz_check_access_cb_func(b), b,
+ authz_check_access_cb_func(b), &ab,
pool));
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w((!", "success"));
- SVN_ERR(svn_ra_svn_write_proplist(conn, pool, props));
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!))"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "w((!", "success"));
+ SVN_ERR(svn_ra_svn__write_proplist(conn, pool, props));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!))"));
return SVN_NO_ERROR;
}
@@ -1148,16 +1255,20 @@ static svn_error_t *rev_prop(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
svn_revnum_t rev;
const char *name;
svn_string_t *value;
+ authz_baton_t ab;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "rc", &rev, &name));
+ ab.server = b;
+ ab.conn = conn;
+
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "rc", &rev, &name));
SVN_ERR(log_command(b, conn, pool, "%s",
svn_log__rev_prop(rev, name, pool)));
SVN_ERR(trivial_auth_request(conn, pool, b));
SVN_CMD_ERR(svn_repos_fs_revision_prop(&value, b->repos, rev, name,
- authz_check_access_cb_func(b), b,
+ authz_check_access_cb_func(b), &ab,
pool));
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, "(?s)", value));
+ SVN_ERR(svn_ra_svn__write_cmd_response(conn, pool, "(?s)", value));
return SVN_NO_ERROR;
}
@@ -1294,12 +1405,16 @@ static svn_error_t *commit(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
svn_boolean_t aborted;
commit_callback_baton_t ccb;
svn_revnum_t new_rev;
+ authz_baton_t ab;
+
+ ab.server = b;
+ ab.conn = conn;
if (params->nelts == 1)
{
/* Clients before 1.2 don't send lock-tokens, keep-locks,
and rev-props fields. */
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c", &log_msg));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c", &log_msg));
lock_tokens = NULL;
keep_locks = TRUE;
revprop_list = NULL;
@@ -1307,9 +1422,9 @@ static svn_error_t *commit(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
else
{
/* Clients before 1.5 don't send the rev-props field. */
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "clb?l", &log_msg,
- &lock_tokens, &keep_locks,
- &revprop_list));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "clb?l", &log_msg,
+ &lock_tokens, &keep_locks,
+ &revprop_list));
}
/* The handling for locks is a little problematic, because the
@@ -1326,19 +1441,20 @@ static svn_error_t *commit(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
if (lock_tokens && lock_tokens->nelts)
SVN_CMD_ERR(add_lock_tokens(conn, lock_tokens, b, pool));
+ /* Ignore LOG_MSG, per the protocol. See ra_svn_commit(). */
if (revprop_list)
- SVN_ERR(svn_ra_svn_parse_proplist(revprop_list, pool, &revprop_table));
+ SVN_ERR(svn_ra_svn__parse_proplist(revprop_list, pool, &revprop_table));
else
{
revprop_table = apr_hash_make(pool);
- apr_hash_set(revprop_table, SVN_PROP_REVISION_LOG, APR_HASH_KEY_STRING,
- svn_string_create(log_msg, pool));
+ svn_hash_sets(revprop_table, SVN_PROP_REVISION_LOG,
+ svn_string_create(log_msg, pool));
}
/* Get author from the baton, making sure clients can't circumvent
the authentication via the revision props. */
- apr_hash_set(revprop_table, SVN_PROP_REVISION_AUTHOR, APR_HASH_KEY_STRING,
- b->user ? svn_string_create(b->user, pool) : NULL);
+ svn_hash_sets(revprop_table, SVN_PROP_REVISION_AUTHOR,
+ b->user ? svn_string_create(b->user, pool) : NULL);
ccb.pool = pool;
ccb.new_rev = &new_rev;
@@ -1351,9 +1467,10 @@ static svn_error_t *commit(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
svn_path_uri_decode(b->repos_url, pool),
b->fs_path->data, revprop_table,
commit_done, &ccb,
- authz_commit_cb, baton, pool));
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, ""));
- SVN_ERR(svn_ra_svn_drive_editor(conn, pool, editor, edit_baton, &aborted));
+ authz_commit_cb, &ab, pool));
+ SVN_ERR(svn_ra_svn__write_cmd_response(conn, pool, ""));
+ SVN_ERR(svn_ra_svn_drive_editor2(conn, pool, editor, edit_baton,
+ &aborted, FALSE));
if (!aborted)
{
SVN_ERR(log_command(b, conn, pool, "%s",
@@ -1372,8 +1489,8 @@ static svn_error_t *commit(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
if (! keep_locks && lock_tokens && lock_tokens->nelts)
SVN_ERR(unlock_paths(lock_tokens, b, conn, pool));
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "r(?c)(?c)(?c)",
- new_rev, date, author, post_commit_err));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "r(?c)(?c)(?c)",
+ new_rev, date, author, post_commit_err));
if (! b->tunnel)
SVN_ERR(svn_fs_deltify_revision(b->fs, new_rev, pool));
@@ -1390,16 +1507,27 @@ static svn_error_t *get_file(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
svn_fs_root_t *root;
svn_stream_t *contents;
apr_hash_t *props = NULL;
+ apr_array_header_t *inherited_props;
svn_string_t write_str;
char buf[4096];
apr_size_t len;
svn_boolean_t want_props, want_contents;
+ apr_uint64_t wants_inherited_props;
svn_checksum_t *checksum;
svn_error_t *err, *write_err;
+ int i;
+ authz_baton_t ab;
+
+ ab.server = b;
+ ab.conn = conn;
/* Parse arguments. */
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?r)bb", &path, &rev,
- &want_props, &want_contents));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c(?r)bb?B", &path, &rev,
+ &want_props, &want_contents,
+ &wants_inherited_props));
+
+ if (wants_inherited_props == SVN_RA_SVN_UNSPECIFIED_NUMBER)
+ wants_inherited_props = FALSE;
full_path = svn_fspath__join(b->fs_path->data,
svn_relpath_canonicalize(path, pool), pool);
@@ -1420,16 +1548,44 @@ static svn_error_t *get_file(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
SVN_CMD_ERR(svn_fs_file_checksum(&checksum, svn_checksum_md5, root,
full_path, TRUE, pool));
hex_digest = svn_checksum_to_cstring_display(checksum, pool);
- if (want_props)
- SVN_CMD_ERR(get_props(&props, root, full_path, pool));
+
+ /* Fetch the file's explicit and/or inherited properties if
+ requested. Although the wants-iprops boolean was added to the
+ protocol in 1.8 a standard 1.8 client never requests iprops. */
+ if (want_props || wants_inherited_props)
+ SVN_CMD_ERR(get_props(want_props ? &props : NULL,
+ wants_inherited_props ? &inherited_props : NULL,
+ &ab, root, full_path,
+ pool));
if (want_contents)
SVN_CMD_ERR(svn_fs_file_contents(&contents, root, full_path, pool));
/* Send successful command response with revision and props. */
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w((?c)r(!", "success",
- hex_digest, rev));
- SVN_ERR(svn_ra_svn_write_proplist(conn, pool, props));
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!))"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "w((?c)r(!", "success",
+ hex_digest, rev));
+ SVN_ERR(svn_ra_svn__write_proplist(conn, pool, props));
+
+ if (wants_inherited_props)
+ {
+ apr_pool_t *iterpool = svn_pool_create(pool);
+
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!)(?!"));
+ for (i = 0; i < inherited_props->nelts; i++)
+ {
+ svn_prop_inherited_item_t *iprop =
+ APR_ARRAY_IDX(inherited_props, i, svn_prop_inherited_item_t *);
+
+ svn_pool_clear(iterpool);
+ SVN_ERR(svn_ra_svn__write_tuple(conn, iterpool, "!(c(!",
+ iprop->path_or_url));
+ SVN_ERR(svn_ra_svn__write_proplist(conn, iterpool, iprop->prop_hash));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, iterpool, "!))!",
+ iprop->path_or_url));
+ }
+ svn_pool_destroy(iterpool);
+ }
+
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!))"));
/* Now send the file's contents. */
if (want_contents)
@@ -1445,7 +1601,7 @@ static svn_error_t *get_file(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
{
write_str.data = buf;
write_str.len = len;
- SVN_ERR(svn_ra_svn_write_string(conn, pool, &write_str));
+ SVN_ERR(svn_ra_svn__write_string(conn, pool, &write_str));
}
if (len < sizeof(buf))
{
@@ -1453,14 +1609,14 @@ static svn_error_t *get_file(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
break;
}
}
- write_err = svn_ra_svn_write_cstring(conn, pool, "");
+ write_err = svn_ra_svn__write_cstring(conn, pool, "");
if (write_err)
{
svn_error_clear(err);
return write_err;
}
SVN_CMD_ERR(err);
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, ""));
+ SVN_ERR(svn_ra_svn__write_cmd_response(conn, pool, ""));
}
return SVN_NO_ERROR;
@@ -1470,20 +1626,31 @@ static svn_error_t *get_dir(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
apr_array_header_t *params, void *baton)
{
server_baton_t *b = baton;
- const char *path, *full_path, *file_path, *cauthor, *cdate;
+ const char *path, *full_path;
svn_revnum_t rev;
- apr_hash_t *entries, *props = NULL, *file_props;
+ apr_hash_t *entries, *props = NULL;
+ apr_array_header_t *inherited_props;
apr_hash_index_t *hi;
svn_fs_root_t *root;
apr_pool_t *subpool;
svn_boolean_t want_props, want_contents;
+ apr_uint64_t wants_inherited_props;
apr_uint64_t dirent_fields;
apr_array_header_t *dirent_fields_list = NULL;
svn_ra_svn_item_t *elt;
+ int i;
+ authz_baton_t ab;
+
+ ab.server = b;
+ ab.conn = conn;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?r)bb?l", &path, &rev,
- &want_props, &want_contents,
- &dirent_fields_list));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c(?r)bb?l?B", &path, &rev,
+ &want_props, &want_contents,
+ &dirent_fields_list,
+ &wants_inherited_props));
+
+ if (wants_inherited_props == SVN_RA_SVN_UNSPECIFIED_NUMBER)
+ wants_inherited_props = FALSE;
if (! dirent_fields_list)
{
@@ -1491,8 +1658,6 @@ static svn_error_t *get_dir(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
}
else
{
- int i;
-
dirent_fields = 0;
for (i = 0; i < dirent_fields_list->nelts; ++i)
@@ -1536,14 +1701,30 @@ static svn_error_t *get_dir(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
/* Fetch the root of the appropriate revision. */
SVN_CMD_ERR(svn_fs_revision_root(&root, b->fs, rev, pool));
- /* Fetch the directory properties if requested. */
- if (want_props)
- SVN_CMD_ERR(get_props(&props, root, full_path, pool));
+ /* Fetch the directory's explicit and/or inherited properties if
+ requested. Although the wants-iprops boolean was added to the
+ protocol in 1.8 a standard 1.8 client never requests iprops. */
+ if (want_props || wants_inherited_props)
+ SVN_CMD_ERR(get_props(want_props ? &props : NULL,
+ wants_inherited_props ? &inherited_props : NULL,
+ &ab, root, full_path,
+ pool));
+
+ /* Fetch the directories' entries before starting the response, to allow
+ proper error handling in cases like when FULL_PATH doesn't exist */
+ if (want_contents)
+ SVN_CMD_ERR(svn_fs_dir_entries(&entries, root, full_path, pool));
- /* Fetch the directory entries if requested. */
+ /* Begin response ... */
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "w(r(!", "success", rev));
+ SVN_ERR(svn_ra_svn__write_proplist(conn, pool, props));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!)(!"));
+
+ /* Fetch the directory entries if requested and send them immediately. */
if (want_contents)
{
- SVN_CMD_ERR(svn_fs_dir_entries(&entries, root, full_path, pool));
+ /* Use epoch for a placeholder for a missing date. */
+ const char *missing_date = svn_time_to_cstring(0, pool);
/* Transform the hash table's FS entries into dirents. This probably
* belongs in libsvn_repos. */
@@ -1552,43 +1733,44 @@ static svn_error_t *get_dir(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
{
const char *name = svn__apr_hash_index_key(hi);
svn_fs_dirent_t *fsent = svn__apr_hash_index_val(hi);
- svn_dirent_t *entry;
+ const char *file_path;
+
+ /* The fields in the entry tuple. */
+ svn_node_kind_t entry_kind = svn_node_none;
+ svn_filesize_t entry_size = 0;
+ svn_boolean_t has_props = FALSE;
+ /* If 'created rev' was not requested, send 0. We can't use
+ * SVN_INVALID_REVNUM as the tuple field is not optional.
+ * See the email thread on dev@, 2012-03-28, subject
+ * "buildbot failure in ASF Buildbot on svn-slik-w2k3-x64-ra",
+ * <http://svn.haxx.se/dev/archive-2012-03/0655.shtml>. */
+ svn_revnum_t created_rev = 0;
+ const char *cdate = NULL;
+ const char *last_author = NULL;
svn_pool_clear(subpool);
file_path = svn_fspath__join(full_path, name, subpool);
-
if (! lookup_access(subpool, b, conn, svn_authz_read,
file_path, FALSE))
- {
- apr_hash_set(entries, name, APR_HASH_KEY_STRING, NULL);
- continue;
- }
-
- entry = apr_pcalloc(pool, sizeof(*entry));
+ continue;
if (dirent_fields & SVN_DIRENT_KIND)
- {
- /* kind */
- entry->kind = fsent->kind;
- }
+ entry_kind = fsent->kind;
if (dirent_fields & SVN_DIRENT_SIZE)
- {
- /* size */
- if (entry->kind == svn_node_dir)
- entry->size = 0;
- else
- SVN_CMD_ERR(svn_fs_file_length(&entry->size, root, file_path,
+ if (entry_kind != svn_node_dir)
+ SVN_CMD_ERR(svn_fs_file_length(&entry_size, root, file_path,
subpool));
- }
if (dirent_fields & SVN_DIRENT_HAS_PROPS)
{
+ apr_hash_t *file_props;
+
/* has_props */
SVN_CMD_ERR(svn_fs_node_proplist(&file_props, root, file_path,
subpool));
- entry->has_props = (apr_hash_count(file_props) > 0);
+ has_props = (apr_hash_count(file_props) > 0);
}
if ((dirent_fields & SVN_DIRENT_LAST_AUTHOR)
@@ -1596,53 +1778,53 @@ static svn_error_t *get_dir(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
|| (dirent_fields & SVN_DIRENT_CREATED_REV))
{
/* created_rev, last_author, time */
- SVN_CMD_ERR(svn_repos_get_committed_info(&entry->created_rev,
+ SVN_CMD_ERR(svn_repos_get_committed_info(&created_rev,
&cdate,
- &cauthor, root,
+ &last_author,
+ root,
file_path,
subpool));
- entry->last_author = apr_pstrdup(pool, cauthor);
- if (cdate)
- SVN_CMD_ERR(svn_time_from_cstring(&entry->time, cdate,
- subpool));
- else
- entry->time = (time_t) -1;
}
- /* Store the entry. */
- apr_hash_set(entries, name, APR_HASH_KEY_STRING, entry);
+ /* The client does not properly handle a missing CDATE. For
+ interoperability purposes, we must fill in some junk.
+
+ See libsvn_ra_svn/client.c:ra_svn_get_dir() */
+ if (cdate == NULL)
+ cdate = missing_date;
+
+ /* Send the entry. */
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "cwnbr(?c)(?c)", name,
+ svn_node_kind_to_word(entry_kind),
+ (apr_uint64_t) entry_size,
+ has_props, created_rev,
+ cdate, last_author));
}
svn_pool_destroy(subpool);
}
- /* Write out response. */
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w(r(!", "success", rev));
- SVN_ERR(svn_ra_svn_write_proplist(conn, pool, props));
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!)(!"));
- if (want_contents)
+ if (wants_inherited_props)
{
- const char *missing_date = svn_time_to_cstring(0, pool);
- for (hi = apr_hash_first(pool, entries); hi; hi = apr_hash_next(hi))
- {
- const char *name = svn__apr_hash_index_key(hi);
- svn_dirent_t *entry = svn__apr_hash_index_val(hi);
+ apr_pool_t *iterpool = svn_pool_create(pool);
- /* The client does not properly handle a missing CDATE. For
- interoperability purposes, we must fill in some junk.
-
- See libsvn_ra_svn/client.c:ra_svn_get_dir() */
- cdate = (entry->time == (time_t) -1)
- ? missing_date
- : svn_time_to_cstring(entry->time, pool);
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "cwnbr(?c)(?c)", name,
- svn_node_kind_to_word(entry->kind),
- (apr_uint64_t) entry->size,
- entry->has_props, entry->created_rev,
- cdate, entry->last_author));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!)(?!"));
+ for (i = 0; i < inherited_props->nelts; i++)
+ {
+ svn_prop_inherited_item_t *iprop =
+ APR_ARRAY_IDX(inherited_props, i, svn_prop_inherited_item_t *);
+
+ svn_pool_clear(iterpool);
+ SVN_ERR(svn_ra_svn__write_tuple(conn, iterpool, "!(c(!",
+ iprop->path_or_url));
+ SVN_ERR(svn_ra_svn__write_proplist(conn, iterpool, iprop->prop_hash));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, iterpool, "!))!",
+ iprop->path_or_url));
}
+ svn_pool_destroy(iterpool);
}
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!))"));
- return SVN_NO_ERROR;
+
+ /* Finish response. */
+ return svn_ra_svn__write_tuple(conn, pool, "!))");
}
static svn_error_t *update(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
@@ -1652,16 +1834,17 @@ static svn_error_t *update(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
svn_revnum_t rev;
const char *target, *full_path, *depth_word;
svn_boolean_t recurse;
- svn_boolean_t send_copyfrom_args;
- apr_uint64_t send_copyfrom_param;
+ apr_uint64_t send_copyfrom_args; /* Optional; default FALSE */
+ apr_uint64_t ignore_ancestry; /* Optional; default FALSE */
/* Default to unknown. Old clients won't send depth, but we'll
handle that by converting recurse if necessary. */
svn_depth_t depth = svn_depth_unknown;
svn_boolean_t is_checkout;
/* Parse the arguments. */
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "(?r)cb?wB", &rev, &target,
- &recurse, &depth_word, &send_copyfrom_param));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "(?r)cb?wB?B", &rev, &target,
+ &recurse, &depth_word,
+ &send_copyfrom_args, &ignore_ancestry));
target = svn_relpath_canonicalize(target, pool);
if (depth_word)
@@ -1669,9 +1852,6 @@ static svn_error_t *update(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
else
depth = SVN_DEPTH_INFINITY_OR_FILES(recurse);
- send_copyfrom_args = (send_copyfrom_param == SVN_RA_SVN_UNSPECIFIED_NUMBER) ?
- FALSE : (svn_boolean_t) send_copyfrom_param;
-
full_path = svn_fspath__join(b->fs_path->data, target, pool);
/* Check authorization and authenticate the user if necessary. */
SVN_ERR(must_have_access(conn, pool, b, svn_authz_read, full_path, FALSE));
@@ -1681,7 +1861,9 @@ static svn_error_t *update(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
SVN_ERR(accept_report(&is_checkout, NULL,
conn, pool, b, rev, target, NULL, TRUE,
- depth, send_copyfrom_args, FALSE));
+ depth,
+ (send_copyfrom_args == TRUE) /* send_copyfrom_args */,
+ (ignore_ancestry == TRUE) /* ignore_ancestry */));
if (is_checkout)
{
SVN_ERR(log_command(b, conn, pool, "%s",
@@ -1709,10 +1891,13 @@ static svn_error_t *switch_cmd(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
/* Default to unknown. Old clients won't send depth, but we'll
handle that by converting recurse if necessary. */
svn_depth_t depth = svn_depth_unknown;
+ apr_uint64_t send_copyfrom_args; /* Optional; default FALSE */
+ apr_uint64_t ignore_ancestry; /* Optional; default TRUE */
/* Parse the arguments. */
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "(?r)cbc?w", &rev, &target,
- &recurse, &switch_url, &depth_word));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "(?r)cbc?w?BB", &rev, &target,
+ &recurse, &switch_url, &depth_word,
+ &send_copyfrom_args, &ignore_ancestry));
target = svn_relpath_canonicalize(target, pool);
switch_url = svn_uri_canonicalize(switch_url, pool);
@@ -1739,8 +1924,8 @@ static svn_error_t *switch_cmd(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
return accept_report(NULL, NULL,
conn, pool, b, rev, target, switch_path, TRUE,
depth,
- FALSE /* TODO(sussman): no copyfrom args for now */,
- TRUE);
+ (send_copyfrom_args == TRUE) /* send_copyfrom_args */,
+ (ignore_ancestry != FALSE) /* ignore_ancestry */);
}
static svn_error_t *status(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
@@ -1755,8 +1940,8 @@ static svn_error_t *status(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
svn_depth_t depth = svn_depth_unknown;
/* Parse the arguments. */
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "cb?(?r)?w",
- &target, &recurse, &rev, &depth_word));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "cb?(?r)?w",
+ &target, &recurse, &rev, &depth_word));
target = svn_relpath_canonicalize(target, pool);
if (depth_word)
@@ -1794,17 +1979,17 @@ static svn_error_t *diff(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
if (params->nelts == 5)
{
/* Clients before 1.4 don't send the text_deltas boolean or depth. */
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "(?r)cbbc", &rev, &target,
- &recurse, &ignore_ancestry, &versus_url));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "(?r)cbbc", &rev, &target,
+ &recurse, &ignore_ancestry, &versus_url));
text_deltas = TRUE;
depth_word = NULL;
}
else
{
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "(?r)cbbcb?w",
- &rev, &target, &recurse,
- &ignore_ancestry, &versus_url,
- &text_deltas, &depth_word));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "(?r)cbbcb?w",
+ &rev, &target, &recurse,
+ &ignore_ancestry, &versus_url,
+ &text_deltas, &depth_word));
}
target = svn_relpath_canonicalize(target, pool);
versus_url = svn_uri_canonicalize(versus_url, pool);
@@ -1855,9 +2040,13 @@ static svn_error_t *get_mergeinfo(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
svn_mergeinfo_inheritance_t inherit;
svn_boolean_t include_descendants;
apr_pool_t *iterpool;
+ authz_baton_t ab;
+
+ ab.server = b;
+ ab.conn = conn;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "l(?r)wb", &paths, &rev,
- &inherit_word, &include_descendants));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "l(?r)wb", &paths, &rev,
+ &inherit_word, &include_descendants));
inherit = svn_inheritance_from_word(inherit_word);
/* Canonicalize the paths which mergeinfo has been requested for. */
@@ -1885,11 +2074,11 @@ static svn_error_t *get_mergeinfo(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
canonical_paths, rev,
inherit,
include_descendants,
- authz_check_access_cb_func(b), b,
+ authz_check_access_cb_func(b), &ab,
pool));
SVN_ERR(svn_mergeinfo__remove_prefix_from_catalog(&mergeinfo, mergeinfo,
b->fs_path->data, pool));
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w((!", "success"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "w((!", "success"));
iterpool = svn_pool_create(pool);
for (hi = apr_hash_first(pool, mergeinfo); hi; hi = apr_hash_next(hi))
{
@@ -1900,11 +2089,11 @@ static svn_error_t *get_mergeinfo(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
svn_pool_clear(iterpool);
SVN_ERR(svn_mergeinfo_to_string(&mergeinfo_string, value, iterpool));
- SVN_ERR(svn_ra_svn_write_tuple(conn, iterpool, "cs", key,
- mergeinfo_string));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, iterpool, "cs", key,
+ mergeinfo_string));
}
svn_pool_destroy(iterpool);
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!))"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!))"));
return SVN_NO_ERROR;
}
@@ -1936,7 +2125,7 @@ static svn_error_t *log_receiver(void *baton,
b->stack_depth--;
}
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "(!"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "(!"));
if (log_entry->changed_paths2)
{
for (h = apr_hash_first(pool, log_entry->changed_paths2); h;
@@ -1947,7 +2136,7 @@ static svn_error_t *log_receiver(void *baton,
action[0] = change->action;
action[1] = '\0';
- SVN_ERR(svn_ra_svn_write_tuple(
+ SVN_ERR(svn_ra_svn__write_tuple(
conn, pool, "cw(?cr)(cbb)",
path,
action,
@@ -1965,14 +2154,14 @@ static svn_error_t *log_receiver(void *baton,
revprop_count = apr_hash_count(log_entry->revprops);
else
revprop_count = 0;
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!)r(?c)(?c)(?c)bbn(!",
- log_entry->revision,
- author, date, message,
- log_entry->has_children,
- invalid_revnum, revprop_count));
- SVN_ERR(svn_ra_svn_write_proplist(conn, pool, log_entry->revprops));
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!)b",
- log_entry->subtractive_merge));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!)r(?c)(?c)(?c)bbn(!",
+ log_entry->revision,
+ author, date, message,
+ log_entry->has_children,
+ invalid_revnum, revprop_count));
+ SVN_ERR(svn_ra_svn__write_proplist(conn, pool, log_entry->revprops));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!)b",
+ log_entry->subtractive_merge));
if (log_entry->has_children)
b->stack_depth++;
@@ -1987,19 +2176,23 @@ static svn_error_t *log_cmd(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
server_baton_t *b = baton;
svn_revnum_t start_rev, end_rev;
const char *full_path;
- svn_boolean_t changed_paths, strict_node, include_merged_revisions;
+ svn_boolean_t send_changed_paths, strict_node, include_merged_revisions;
apr_array_header_t *paths, *full_paths, *revprop_items, *revprops;
char *revprop_word;
svn_ra_svn_item_t *elt;
int i;
apr_uint64_t limit, include_merged_revs_param;
log_baton_t lb;
+ authz_baton_t ab;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "l(?r)(?r)bb?n?Bwl", &paths,
- &start_rev, &end_rev, &changed_paths,
- &strict_node, &limit,
- &include_merged_revs_param,
- &revprop_word, &revprop_items));
+ ab.server = b;
+ ab.conn = conn;
+
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "l(?r)(?r)bb?n?Bwl", &paths,
+ &start_rev, &end_rev, &send_changed_paths,
+ &strict_node, &limit,
+ &include_merged_revs_param,
+ &revprop_word, &revprop_items));
if (include_merged_revs_param == SVN_RA_SVN_UNSPECIFIED_NUMBER)
include_merged_revisions = FALSE;
@@ -2053,28 +2246,28 @@ static svn_error_t *log_cmd(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
SVN_ERR(log_command(b, conn, pool, "%s",
svn_log__log(full_paths, start_rev, end_rev,
- limit, changed_paths, strict_node,
- include_merged_revisions, revprops,
- pool)));
+ (int) limit, send_changed_paths,
+ strict_node, include_merged_revisions,
+ revprops, pool)));
/* Get logs. (Can't report errors back to the client at this point.) */
lb.fs_path = b->fs_path->data;
lb.conn = conn;
lb.stack_depth = 0;
err = svn_repos_get_logs4(b->repos, full_paths, start_rev, end_rev,
- (int) limit, changed_paths, strict_node,
+ (int) limit, send_changed_paths, strict_node,
include_merged_revisions, revprops,
- authz_check_access_cb_func(b), b, log_receiver,
+ authz_check_access_cb_func(b), &ab, log_receiver,
&lb, pool);
- write_err = svn_ra_svn_write_word(conn, pool, "done");
+ write_err = svn_ra_svn__write_word(conn, pool, "done");
if (write_err)
{
svn_error_clear(err);
return write_err;
}
SVN_CMD_ERR(err);
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, ""));
+ SVN_ERR(svn_ra_svn__write_cmd_response(conn, pool, ""));
return SVN_NO_ERROR;
}
@@ -2087,7 +2280,7 @@ static svn_error_t *check_path(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
svn_fs_root_t *root;
svn_node_kind_t kind;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?r)", &path, &rev));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c(?r)", &path, &rev));
full_path = svn_fspath__join(b->fs_path->data,
svn_relpath_canonicalize(path, pool), pool);
@@ -2103,8 +2296,8 @@ static svn_error_t *check_path(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
SVN_CMD_ERR(svn_fs_revision_root(&root, b->fs, rev, pool));
SVN_CMD_ERR(svn_fs_check_path(&kind, root, full_path, pool));
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, "w",
- svn_node_kind_to_word(kind)));
+ SVN_ERR(svn_ra_svn__write_cmd_response(conn, pool, "w",
+ svn_node_kind_to_word(kind)));
return SVN_NO_ERROR;
}
@@ -2117,7 +2310,7 @@ static svn_error_t *stat_cmd(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
svn_fs_root_t *root;
svn_dirent_t *dirent;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?r)", &path, &rev));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c(?r)", &path, &rev));
full_path = svn_fspath__join(b->fs_path->data,
svn_relpath_canonicalize(path, pool), pool);
@@ -2139,18 +2332,18 @@ static svn_error_t *stat_cmd(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
if (dirent == NULL)
{
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, "()"));
+ SVN_ERR(svn_ra_svn__write_cmd_response(conn, pool, "()"));
return SVN_NO_ERROR;
}
cdate = (dirent->time == (time_t) -1) ? NULL
: svn_time_to_cstring(dirent->time, pool);
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, "((wnbr(?c)(?c)))",
- svn_node_kind_to_word(dirent->kind),
- (apr_uint64_t) dirent->size,
- dirent->has_props, dirent->created_rev,
- cdate, dirent->last_author));
+ SVN_ERR(svn_ra_svn__write_cmd_response(conn, pool, "((wnbr(?c)(?c)))",
+ svn_node_kind_to_word(dirent->kind),
+ (apr_uint64_t) dirent->size,
+ dirent->has_props, dirent->created_rev,
+ cdate, dirent->last_author));
return SVN_NO_ERROR;
}
@@ -2168,11 +2361,15 @@ static svn_error_t *get_locations(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
svn_revnum_t peg_revision;
apr_hash_t *fs_locations;
const char *abs_path;
+ authz_baton_t ab;
+
+ ab.server = b;
+ ab.conn = conn;
/* Parse the arguments. */
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "crl", &relative_path,
- &peg_revision,
- &loc_revs_proto));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "crl", &relative_path,
+ &peg_revision,
+ &loc_revs_proto));
relative_path = svn_relpath_canonicalize(relative_path, pool);
abs_path = svn_fspath__join(b->fs_path->data, relative_path, pool);
@@ -2202,7 +2399,8 @@ static svn_error_t *get_locations(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
err = svn_repos_trace_node_locations(b->fs, &fs_locations, abs_path,
peg_revision, location_revisions,
- authz_check_access_cb_func(b), b, pool);
+ authz_check_access_cb_func(b), &ab,
+ pool);
/* Now, write the results to the connection. */
if (!err)
@@ -2217,13 +2415,13 @@ static svn_error_t *get_locations(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
const svn_revnum_t *iter_key = svn__apr_hash_index_key(iter);
const char *iter_value = svn__apr_hash_index_val(iter);
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "rc",
- *iter_key, iter_value));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "rc",
+ *iter_key, iter_value));
}
}
}
- write_err = svn_ra_svn_write_word(conn, pool, "done");
+ write_err = svn_ra_svn__write_word(conn, pool, "done");
if (write_err)
{
svn_error_clear(err);
@@ -2231,7 +2429,7 @@ static svn_error_t *get_locations(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
}
SVN_CMD_ERR(err);
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, ""));
+ SVN_ERR(svn_ra_svn__write_cmd_response(conn, pool, ""));
return SVN_NO_ERROR;
}
@@ -2241,10 +2439,10 @@ static svn_error_t *gls_receiver(svn_location_segment_t *segment,
apr_pool_t *pool)
{
svn_ra_svn_conn_t *conn = baton;
- return svn_ra_svn_write_tuple(conn, pool, "rr(?c)",
- segment->range_start,
- segment->range_end,
- segment->path);
+ return svn_ra_svn__write_tuple(conn, pool, "rr(?c)",
+ segment->range_start,
+ segment->range_end,
+ segment->path);
}
static svn_error_t *get_location_segments(svn_ra_svn_conn_t *conn,
@@ -2257,18 +2455,43 @@ static svn_error_t *get_location_segments(svn_ra_svn_conn_t *conn,
svn_revnum_t peg_revision, start_rev, end_rev;
const char *relative_path;
const char *abs_path;
+ authz_baton_t ab;
+
+ ab.server = b;
+ ab.conn = conn;
/* Parse the arguments. */
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?r)(?r)(?r)",
- &relative_path, &peg_revision,
- &start_rev, &end_rev));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c(?r)(?r)(?r)",
+ &relative_path, &peg_revision,
+ &start_rev, &end_rev));
relative_path = svn_relpath_canonicalize(relative_path, pool);
abs_path = svn_fspath__join(b->fs_path->data, relative_path, pool);
- if (SVN_IS_VALID_REVNUM(start_rev)
- && SVN_IS_VALID_REVNUM(end_rev)
- && (end_rev > start_rev))
+ SVN_ERR(trivial_auth_request(conn, pool, b));
+ SVN_ERR(log_command(baton, conn, pool, "%s",
+ svn_log__get_location_segments(abs_path, peg_revision,
+ start_rev, end_rev,
+ pool)));
+
+ /* No START_REV or PEG_REVISION? We'll use HEAD. */
+ if (!SVN_IS_VALID_REVNUM(start_rev) || !SVN_IS_VALID_REVNUM(peg_revision))
+ {
+ svn_revnum_t youngest;
+
+ SVN_CMD_ERR(svn_fs_youngest_rev(&youngest, b->fs, pool));
+
+ if (!SVN_IS_VALID_REVNUM(start_rev))
+ start_rev = youngest;
+ if (!SVN_IS_VALID_REVNUM(peg_revision))
+ peg_revision = youngest;
+ }
+
+ /* No END_REV? We'll use 0. */
+ if (!SVN_IS_VALID_REVNUM(end_rev))
+ end_rev = 0;
+
+ if (end_rev > start_rev)
{
err = svn_error_createf(SVN_ERR_INCORRECT_PARAMS, NULL,
"Get-location-segments end revision must not be "
@@ -2276,9 +2499,7 @@ static svn_error_t *get_location_segments(svn_ra_svn_conn_t *conn,
return log_fail_and_flush(err, b, conn, pool);
}
- if (SVN_IS_VALID_REVNUM(peg_revision)
- && SVN_IS_VALID_REVNUM(start_rev)
- && (start_rev > peg_revision))
+ if (start_rev > peg_revision)
{
err = svn_error_createf(SVN_ERR_INCORRECT_PARAMS, NULL,
"Get-location-segments start revision must not "
@@ -2286,12 +2507,6 @@ static svn_error_t *get_location_segments(svn_ra_svn_conn_t *conn,
return log_fail_and_flush(err, b, conn, pool);
}
- SVN_ERR(trivial_auth_request(conn, pool, b));
- SVN_ERR(log_command(baton, conn, pool, "%s",
- svn_log__get_location_segments(abs_path, peg_revision,
- start_rev, end_rev,
- pool)));
-
/* All the parameters are fine - let's perform the query against the
* repository. */
@@ -2301,9 +2516,9 @@ static svn_error_t *get_location_segments(svn_ra_svn_conn_t *conn,
err = svn_repos_node_location_segments(b->repos, abs_path,
peg_revision, start_rev, end_rev,
gls_receiver, (void *)conn,
- authz_check_access_cb_func(b), b,
+ authz_check_access_cb_func(b), &ab,
pool);
- write_err = svn_ra_svn_write_word(conn, pool, "done");
+ write_err = svn_ra_svn__write_word(conn, pool, "done");
if (write_err)
{
svn_error_clear(err);
@@ -2311,7 +2526,7 @@ static svn_error_t *get_location_segments(svn_ra_svn_conn_t *conn,
}
SVN_CMD_ERR(err);
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, ""));
+ SVN_ERR(svn_ra_svn__write_cmd_response(conn, pool, ""));
return SVN_NO_ERROR;
}
@@ -2326,7 +2541,7 @@ static svn_error_t *svndiff_handler(void *baton, const char *data,
str.data = data;
str.len = *len;
- return svn_ra_svn_write_string(b->conn, b->pool, &str);
+ return svn_ra_svn__write_string(b->conn, b->pool, &str);
}
/* This implements svn_close_fn_t. Mark the end of the data by writing an
@@ -2335,7 +2550,7 @@ static svn_error_t *svndiff_close_handler(void *baton)
{
file_revs_baton_t *b = baton;
- SVN_ERR(svn_ra_svn_write_cstring(b->conn, b->pool, ""));
+ SVN_ERR(svn_ra_svn__write_cstring(b->conn, b->pool, ""));
return SVN_NO_ERROR;
}
@@ -2351,12 +2566,12 @@ static svn_error_t *file_rev_handler(void *baton, const char *path,
file_revs_baton_t *frb = baton;
svn_stream_t *stream;
- SVN_ERR(svn_ra_svn_write_tuple(frb->conn, pool, "cr(!",
- path, rev));
- SVN_ERR(svn_ra_svn_write_proplist(frb->conn, pool, rev_props));
- SVN_ERR(svn_ra_svn_write_tuple(frb->conn, pool, "!)(!"));
+ SVN_ERR(svn_ra_svn__write_tuple(frb->conn, pool, "cr(!",
+ path, rev));
+ SVN_ERR(svn_ra_svn__write_proplist(frb->conn, pool, rev_props));
+ SVN_ERR(svn_ra_svn__write_tuple(frb->conn, pool, "!)(!"));
SVN_ERR(write_prop_diffs(frb->conn, pool, prop_diffs));
- SVN_ERR(svn_ra_svn_write_tuple(frb->conn, pool, "!)b", merged_revision));
+ SVN_ERR(svn_ra_svn__write_tuple(frb->conn, pool, "!)b", merged_revision));
/* Store the pool for the delta stream. */
frb->pool = pool;
@@ -2379,7 +2594,7 @@ static svn_error_t *file_rev_handler(void *baton, const char *path,
svn_ra_svn_compression_level(frb->conn), pool);
}
else
- SVN_ERR(svn_ra_svn_write_cstring(frb->conn, pool, ""));
+ SVN_ERR(svn_ra_svn__write_cstring(frb->conn, pool, ""));
return SVN_NO_ERROR;
}
@@ -2395,11 +2610,15 @@ static svn_error_t *get_file_revs(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
const char *full_path;
apr_uint64_t include_merged_revs_param;
svn_boolean_t include_merged_revisions;
+ authz_baton_t ab;
+
+ ab.server = b;
+ ab.conn = conn;
/* Parse arguments. */
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?r)(?r)?B",
- &path, &start_rev, &end_rev,
- &include_merged_revs_param));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c(?r)(?r)?B",
+ &path, &start_rev, &end_rev,
+ &include_merged_revs_param));
path = svn_relpath_canonicalize(path, pool);
SVN_ERR(trivial_auth_request(conn, pool, b));
full_path = svn_fspath__join(b->fs_path->data, path, pool);
@@ -2419,16 +2638,16 @@ static svn_error_t *get_file_revs(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
err = svn_repos_get_file_revs2(b->repos, full_path, start_rev, end_rev,
include_merged_revisions,
- authz_check_access_cb_func(b), b,
+ authz_check_access_cb_func(b), &ab,
file_rev_handler, &frb, pool);
- write_err = svn_ra_svn_write_word(conn, pool, "done");
+ write_err = svn_ra_svn__write_word(conn, pool, "done");
if (write_err)
{
svn_error_clear(err);
return write_err;
}
SVN_CMD_ERR(err);
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, ""));
+ SVN_ERR(svn_ra_svn__write_cmd_response(conn, pool, ""));
return SVN_NO_ERROR;
}
@@ -2444,8 +2663,8 @@ static svn_error_t *lock(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
svn_revnum_t current_rev;
svn_lock_t *l;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?c)b(?r)", &path, &comment,
- &steal_lock, &current_rev));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c(?c)b(?r)", &path, &comment,
+ &steal_lock, &current_rev));
full_path = svn_fspath__join(b->fs_path->data,
svn_relpath_canonicalize(path, pool), pool);
@@ -2458,9 +2677,9 @@ static svn_error_t *lock(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
0, /* No expiration time. */
current_rev, steal_lock, pool));
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w(!", "success"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "w(!", "success"));
SVN_ERR(write_lock(conn, pool, l));
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!)"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!)"));
return SVN_NO_ERROR;
}
@@ -2481,8 +2700,8 @@ static svn_error_t *lock_many(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
svn_lock_t *l;
svn_error_t *err = SVN_NO_ERROR, *write_err;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "(?c)bl", &comment, &steal_lock,
- &path_revs));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "(?c)bl", &comment, &steal_lock,
+ &path_revs));
subpool = svn_pool_create(pool);
@@ -2505,8 +2724,8 @@ static svn_error_t *lock_many(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
"Lock requests should be list of lists");
- SVN_ERR(svn_ra_svn_parse_tuple(item->u.list, pool, "c(?r)", &path,
- &current_rev));
+ SVN_ERR(svn_ra_svn__parse_tuple(item->u.list, pool, "c(?r)", &path,
+ &current_rev));
/* Allocate the full_path out of pool so it will survive for use
* by operational logging, after this loop. */
@@ -2532,7 +2751,7 @@ static svn_error_t *lock_many(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
{
if (SVN_ERR_IS_LOCK_ERROR(err))
{
- write_err = svn_ra_svn_write_cmd_failure(conn, pool, err);
+ write_err = svn_ra_svn__write_cmd_failure(conn, pool, err);
svn_error_clear(err);
err = NULL;
SVN_ERR(write_err);
@@ -2542,9 +2761,9 @@ static svn_error_t *lock_many(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
}
else
{
- SVN_ERR(svn_ra_svn_write_tuple(conn, subpool, "w!", "success"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, subpool, "w!", "success"));
SVN_ERR(write_lock(conn, subpool, l));
- SVN_ERR(svn_ra_svn_write_tuple(conn, subpool, "!"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, subpool, "!"));
}
}
@@ -2554,12 +2773,12 @@ static svn_error_t *lock_many(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
svn_log__lock(log_paths, steal_lock, pool)));
/* NOTE: err might contain a fatal locking error from the loop above. */
- write_err = svn_ra_svn_write_word(conn, pool, "done");
+ write_err = svn_ra_svn__write_word(conn, pool, "done");
if (!write_err)
SVN_CMD_ERR(err);
svn_error_clear(err);
SVN_ERR(write_err);
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, ""));
+ SVN_ERR(svn_ra_svn__write_cmd_response(conn, pool, ""));
return SVN_NO_ERROR;
}
@@ -2571,7 +2790,7 @@ static svn_error_t *unlock(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
const char *path, *token, *full_path;
svn_boolean_t break_lock;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?c)b", &path, &token,
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c(?c)b", &path, &token,
&break_lock));
full_path = svn_fspath__join(b->fs_path->data,
@@ -2586,7 +2805,7 @@ static svn_error_t *unlock(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
SVN_CMD_ERR(svn_repos_fs_unlock(b->repos, full_path, token, break_lock,
pool));
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, ""));
+ SVN_ERR(svn_ra_svn__write_cmd_response(conn, pool, ""));
return SVN_NO_ERROR;
}
@@ -2605,8 +2824,8 @@ static svn_error_t *unlock_many(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
const char *token;
svn_error_t *err = SVN_NO_ERROR, *write_err;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "bl", &break_lock,
- &unlock_tokens));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "bl", &break_lock,
+ &unlock_tokens));
/* Username required unless break_lock was specified. */
SVN_ERR(must_have_access(conn, pool, b, svn_authz_write, NULL, ! break_lock));
@@ -2626,8 +2845,8 @@ static svn_error_t *unlock_many(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
"Unlock request should be a list of lists");
- SVN_ERR(svn_ra_svn_parse_tuple(item->u.list, subpool, "c(?c)", &path,
- &token));
+ SVN_ERR(svn_ra_svn__parse_tuple(item->u.list, subpool, "c(?c)", &path,
+ &token));
/* Allocate the full_path out of pool so it will survive for use
* by operational logging, after this loop. */
@@ -2650,7 +2869,7 @@ static svn_error_t *unlock_many(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
{
if (SVN_ERR_IS_UNLOCK_ERROR(err))
{
- write_err = svn_ra_svn_write_cmd_failure(conn, pool, err);
+ write_err = svn_ra_svn__write_cmd_failure(conn, pool, err);
svn_error_clear(err);
err = NULL;
SVN_ERR(write_err);
@@ -2659,8 +2878,8 @@ static svn_error_t *unlock_many(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
break;
}
else
- SVN_ERR(svn_ra_svn_write_tuple(conn, subpool, "w(c)", "success",
- path));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, subpool, "w(c)", "success",
+ path));
}
svn_pool_destroy(subpool);
@@ -2669,11 +2888,11 @@ static svn_error_t *unlock_many(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
svn_log__unlock(log_paths, break_lock, pool)));
/* NOTE: err might contain a fatal unlocking error from the loop above. */
- write_err = svn_ra_svn_write_word(conn, pool, "done");
+ write_err = svn_ra_svn__write_word(conn, pool, "done");
if (! write_err)
SVN_CMD_ERR(err);
svn_error_clear(err);
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, ""));
+ SVN_ERR(svn_ra_svn__write_cmd_response(conn, pool, ""));
return SVN_NO_ERROR;
}
@@ -2686,7 +2905,7 @@ static svn_error_t *get_lock(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
const char *full_path;
svn_lock_t *l;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c", &path));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c", &path));
full_path = svn_fspath__join(b->fs_path->data,
svn_relpath_canonicalize(path, pool), pool);
@@ -2698,10 +2917,10 @@ static svn_error_t *get_lock(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
SVN_CMD_ERR(svn_fs_get_lock(&l, b->fs, full_path, pool));
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w((!", "success"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "w((!", "success"));
if (l)
SVN_ERR(write_lock(conn, pool, l));
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!))"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!))"));
return SVN_NO_ERROR;
}
@@ -2717,8 +2936,12 @@ static svn_error_t *get_locks(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
apr_hash_t *locks;
apr_hash_index_t *hi;
svn_error_t *err;
+ authz_baton_t ab;
+
+ ab.server = b;
+ ab.conn = conn;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c?(?w)", &path, &depth_word));
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c?(?w)", &path, &depth_word));
depth = depth_word ? svn_depth_from_word(depth_word) : svn_depth_infinity;
if ((depth != svn_depth_empty) &&
@@ -2739,16 +2962,17 @@ static svn_error_t *get_locks(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
SVN_ERR(log_command(b, conn, pool, "get-locks %s",
svn_path_uri_encode(full_path, pool)));
SVN_CMD_ERR(svn_repos_fs_get_locks2(&locks, b->repos, full_path, depth,
- authz_check_access_cb_func(b), b, pool));
+ authz_check_access_cb_func(b), &ab,
+ pool));
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w((!", "success"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "w((!", "success"));
for (hi = apr_hash_first(pool, locks); hi; hi = apr_hash_next(hi))
{
svn_lock_t *l = svn__apr_hash_index_val(hi);
SVN_ERR(write_lock(conn, pool, l));
}
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!))"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!))"));
return SVN_NO_ERROR;
}
@@ -2764,10 +2988,13 @@ static svn_error_t *replay_one_revision(svn_ra_svn_conn_t *conn,
void *edit_baton;
svn_fs_root_t *root;
svn_error_t *err;
+ authz_baton_t ab;
+
+ ab.server = b;
+ ab.conn = conn;
SVN_ERR(log_command(b, conn, pool,
- svn_log__replay(b->fs_path->data, low_water_mark,
- pool)));
+ svn_log__replay(b->fs_path->data, rev, pool)));
svn_ra_svn_get_editor(&editor, &edit_baton, conn, pool, NULL, NULL);
@@ -2776,13 +3003,13 @@ static svn_error_t *replay_one_revision(svn_ra_svn_conn_t *conn,
if (! err)
err = svn_repos_replay2(root, b->fs_path->data, low_water_mark,
send_deltas, editor, edit_baton,
- authz_check_access_cb_func(b), b, pool);
+ authz_check_access_cb_func(b), &ab, pool);
if (err)
svn_error_clear(editor->abort_edit(edit_baton, pool));
SVN_CMD_ERR(err);
- return svn_ra_svn_write_cmd(conn, pool, "finish-replay", "");
+ return svn_ra_svn__write_cmd_finish_replay(conn, pool);
}
static svn_error_t *replay(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
@@ -2792,7 +3019,7 @@ static svn_error_t *replay(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
svn_boolean_t send_deltas;
server_baton_t *b = baton;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "rrb", &rev, &low_water_mark,
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "rrb", &rev, &low_water_mark,
&send_deltas));
SVN_ERR(trivial_auth_request(conn, pool, b));
@@ -2800,7 +3027,7 @@ static svn_error_t *replay(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
SVN_ERR(replay_one_revision(conn, b, rev, low_water_mark,
send_deltas, pool));
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, ""));
+ SVN_ERR(svn_ra_svn__write_cmd_response(conn, pool, ""));
return SVN_NO_ERROR;
}
@@ -2812,8 +3039,12 @@ static svn_error_t *replay_range(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
svn_boolean_t send_deltas;
server_baton_t *b = baton;
apr_pool_t *iterpool;
+ authz_baton_t ab;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "rrrb", &start_rev,
+ ab.server = b;
+ ab.conn = conn;
+
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "rrrb", &start_rev,
&end_rev, &low_water_mark,
&send_deltas));
@@ -2828,11 +3059,11 @@ static svn_error_t *replay_range(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
SVN_CMD_ERR(svn_repos_fs_revision_proplist(&props, b->repos, rev,
authz_check_access_cb_func(b),
- b,
+ &ab,
iterpool));
- SVN_ERR(svn_ra_svn_write_tuple(conn, iterpool, "w(!", "revprops"));
- SVN_ERR(svn_ra_svn_write_proplist(conn, iterpool, props));
- SVN_ERR(svn_ra_svn_write_tuple(conn, iterpool, "!)"));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, iterpool, "w(!", "revprops"));
+ SVN_ERR(svn_ra_svn__write_proplist(conn, iterpool, props));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, iterpool, "!)"));
SVN_ERR(replay_one_revision(conn, b, rev, low_water_mark,
send_deltas, iterpool));
@@ -2840,7 +3071,7 @@ static svn_error_t *replay_range(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
}
svn_pool_destroy(iterpool);
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, ""));
+ SVN_ERR(svn_ra_svn__write_cmd_response(conn, pool, ""));
return SVN_NO_ERROR;
}
@@ -2857,7 +3088,7 @@ get_deleted_rev(svn_ra_svn_conn_t *conn,
svn_revnum_t end_revision;
svn_revnum_t revision_deleted;
- SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "crr",
+ SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "crr",
&path, &peg_revision, &end_revision));
full_path = svn_fspath__join(b->fs_path->data,
svn_relpath_canonicalize(path, pool), pool);
@@ -2865,7 +3096,70 @@ get_deleted_rev(svn_ra_svn_conn_t *conn,
SVN_ERR(trivial_auth_request(conn, pool, b));
SVN_ERR(svn_repos_deleted_rev(b->fs, full_path, peg_revision, end_revision,
&revision_deleted, pool));
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, "r", revision_deleted));
+ SVN_ERR(svn_ra_svn__write_cmd_response(conn, pool, "r", revision_deleted));
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+get_inherited_props(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ apr_array_header_t *params,
+ void *baton)
+{
+ server_baton_t *b = baton;
+ const char *path, *full_path;
+ svn_revnum_t rev;
+ svn_fs_root_t *root;
+ apr_array_header_t *inherited_props;
+ int i;
+ apr_pool_t *iterpool = svn_pool_create(pool);
+ authz_baton_t ab;
+
+ ab.server = b;
+ ab.conn = conn;
+
+ /* Parse arguments. */
+ SVN_ERR(svn_ra_svn__parse_tuple(params, iterpool, "c(?r)", &path, &rev));
+
+ full_path = svn_fspath__join(b->fs_path->data,
+ svn_relpath_canonicalize(path, iterpool),
+ pool);
+
+ /* Check authorizations */
+ SVN_ERR(must_have_access(conn, iterpool, b, svn_authz_read,
+ full_path, FALSE));
+
+ if (!SVN_IS_VALID_REVNUM(rev))
+ SVN_CMD_ERR(svn_fs_youngest_rev(&rev, b->fs, pool));
+
+ SVN_ERR(log_command(b, conn, pool, "%s",
+ svn_log__get_inherited_props(full_path, rev,
+ iterpool)));
+
+ /* Fetch the properties and a stream for the contents. */
+ SVN_CMD_ERR(svn_fs_revision_root(&root, b->fs, rev, iterpool));
+ SVN_CMD_ERR(get_props(NULL, &inherited_props, &ab, root, full_path, pool));
+
+ /* Send successful command response with revision and props. */
+ SVN_ERR(svn_ra_svn__write_tuple(conn, iterpool, "w(!", "success"));
+
+ SVN_ERR(svn_ra_svn__write_tuple(conn, iterpool, "!(?!"));
+
+ for (i = 0; i < inherited_props->nelts; i++)
+ {
+ svn_prop_inherited_item_t *iprop =
+ APR_ARRAY_IDX(inherited_props, i, svn_prop_inherited_item_t *);
+
+ svn_pool_clear(iterpool);
+ SVN_ERR(svn_ra_svn__write_tuple(conn, iterpool, "!(c(!",
+ iprop->path_or_url));
+ SVN_ERR(svn_ra_svn__write_proplist(conn, iterpool, iprop->prop_hash));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, iterpool, "!))!",
+ iprop->path_or_url));
+ }
+
+ SVN_ERR(svn_ra_svn__write_tuple(conn, iterpool, "!))"));
+ svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
@@ -2900,6 +3194,7 @@ static const svn_ra_svn_cmd_entry_t main_commands[] = {
{ "replay", replay },
{ "replay-range", replay_range },
{ "get-deleted-rev", get_deleted_rev },
+ { "get-iprops", get_inherited_props },
{ NULL }
};
@@ -2939,7 +3234,7 @@ repos_path_valid(const char *path)
consisting of just dots and spaces. Win32 functions treat
paths such as ".. " and "......." inconsistently. Make sure
no one can escape out of the root. */
- if (path - s >= 2 && strspn(s, ". ") == path - s)
+ if (path - s >= 2 && strspn(s, ". ") == (size_t)(path - s))
return FALSE;
#else /* ! WIN32 */
if (path - s == 2 && s[0] == '.' && s[1] == '.')
@@ -2967,7 +3262,7 @@ static svn_error_t *find_repos(const char *url, const char *root,
const apr_array_header_t *capabilities,
apr_pool_t *pool)
{
- const char *path, *full_path, *repos_root, *fs_path;
+ const char *path, *full_path, *repos_root, *fs_path, *hooks_env;
svn_stringbuf_t *url_buf;
/* Skip past the scheme and authority part. */
@@ -2976,9 +3271,13 @@ static svn_error_t *find_repos(const char *url, const char *root,
return svn_error_createf(SVN_ERR_BAD_URL, NULL,
"Non-svn URL passed to svn server: '%s'", url);
-
- path = strchr(path, '/');
- path = (path == NULL) ? "" : svn_relpath_canonicalize(path, pool);
+ if (! b->vhost)
+ {
+ path = strchr(path, '/');
+ if (path == NULL)
+ path = "";
+ }
+ path = svn_relpath_canonicalize(path, pool);
path = svn_path_uri_decode(path, pool);
/* Ensure that it isn't possible to escape the root by disallowing
@@ -3014,19 +3313,32 @@ static svn_error_t *find_repos(const char *url, const char *root,
b->repos_name = b->authz_repos_name;
b->repos_name = svn_path_uri_encode(b->repos_name, pool);
- /* If the svnserve configuration files have not been loaded then
- load them from the repository. */
+ /* If the svnserve configuration has not been loaded then load it from the
+ * repository. */
if (NULL == b->cfg)
- SVN_ERR(load_configs(&b->cfg, &b->pwdb, &b->authzdb, &b->username_case,
- svn_repos_svnserve_conf(b->repos, pool), FALSE,
- svn_repos_conf_dir(b->repos, pool),
- b, conn,
- pool));
+ {
+ b->base = svn_repos_conf_dir(b->repos, pool);
+
+ SVN_ERR(svn_config_read3(&b->cfg, svn_repos_svnserve_conf(b->repos, pool),
+ FALSE, /* must_exist */
+ FALSE, /* section_names_case_sensitive */
+ FALSE, /* option_names_case_sensitive */
+ pool));
+ SVN_ERR(load_pwdb_config(b, conn, pool));
+ SVN_ERR(load_authz_config(b, conn, repos_root, pool));
+ }
+ /* svnserve.conf has been loaded via the --config-file option so need
+ * to load pwdb and authz. */
+ else
+ {
+ SVN_ERR(load_pwdb_config(b, conn, pool));
+ SVN_ERR(load_authz_config(b, conn, repos_root, pool));
+ }
#ifdef SVN_HAVE_SASL
/* Should we use Cyrus SASL? */
- svn_config_get_bool(b->cfg, &b->use_sasl, SVN_CONFIG_SECTION_SASL,
- SVN_CONFIG_OPTION_USE_SASL, FALSE);
+ SVN_ERR(svn_config_get_bool(b->cfg, &b->use_sasl, SVN_CONFIG_SECTION_SASL,
+ SVN_CONFIG_OPTION_USE_SASL, FALSE));
#endif
/* Use the repository UUID as the default realm. */
@@ -3045,6 +3357,13 @@ static svn_error_t *find_repos(const char *url, const char *root,
"No access allowed to this repository",
b, conn, pool);
+ /* Configure hook script environment variables. */
+ svn_config_get(b->cfg, &hooks_env, SVN_CONFIG_SECTION_GENERAL,
+ SVN_CONFIG_OPTION_HOOKS_ENV, NULL);
+ if (hooks_env)
+ hooks_env = svn_dirent_internal_style(hooks_env, pool);
+ SVN_ERR(svn_repos_hooks_setenv(b->repos, hooks_env, pool));
+
return SVN_NO_ERROR;
}
@@ -3071,6 +3390,134 @@ fs_warning_func(void *baton, svn_error_t *err)
svn_pool_clear(b->pool);
}
+/* Return the normalized repository-relative path for the given PATH
+ * (may be a URL, full path or relative path) and fs contained in the
+ * server baton BATON. Allocate the result in POOL.
+ */
+static const char *
+get_normalized_repo_rel_path(void *baton,
+ const char *path,
+ apr_pool_t *pool)
+{
+ server_baton_t *sb = baton;
+
+ if (svn_path_is_url(path))
+ {
+ /* This is a copyfrom URL. */
+ path = svn_uri_skip_ancestor(sb->repos_url, path, pool);
+ path = svn_fspath__canonicalize(path, pool);
+ }
+ else
+ {
+ /* This is a base-relative path. */
+ if ((path)[0] != '/')
+ /* Get an absolute path for use in the FS. */
+ path = svn_fspath__join(sb->fs_path->data, path, pool);
+ }
+
+ return path;
+}
+
+/* Get the revision root for REVISION in fs given by server baton BATON
+ * and return it in *FS_ROOT. Use HEAD if REVISION is SVN_INVALID_REVNUM.
+ * Use POOL for allocations.
+ */
+static svn_error_t *
+get_revision_root(svn_fs_root_t **fs_root,
+ void *baton,
+ svn_revnum_t revision,
+ apr_pool_t *pool)
+{
+ server_baton_t *sb = baton;
+
+ if (!SVN_IS_VALID_REVNUM(revision))
+ SVN_ERR(svn_fs_youngest_rev(&revision, sb->fs, pool));
+
+ SVN_ERR(svn_fs_revision_root(fs_root, sb->fs, revision, pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+fetch_props_func(apr_hash_t **props,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_fs_root_t *fs_root;
+ svn_error_t *err;
+
+ path = get_normalized_repo_rel_path(baton, path, scratch_pool);
+ SVN_ERR(get_revision_root(&fs_root, baton, base_revision, scratch_pool));
+
+ err = svn_fs_node_proplist(props, fs_root, path, result_pool);
+ if (err && err->apr_err == SVN_ERR_FS_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ *props = apr_hash_make(result_pool);
+ return SVN_NO_ERROR;
+ }
+ else if (err)
+ return svn_error_trace(err);
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+fetch_kind_func(svn_node_kind_t *kind,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *scratch_pool)
+{
+ svn_fs_root_t *fs_root;
+
+ path = get_normalized_repo_rel_path(baton, path, scratch_pool);
+ SVN_ERR(get_revision_root(&fs_root, baton, base_revision, scratch_pool));
+
+ SVN_ERR(svn_fs_check_path(kind, fs_root, path, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+fetch_base_func(const char **filename,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_stream_t *contents;
+ svn_stream_t *file_stream;
+ const char *tmp_filename;
+ svn_fs_root_t *fs_root;
+ svn_error_t *err;
+
+ path = get_normalized_repo_rel_path(baton, path, scratch_pool);
+ SVN_ERR(get_revision_root(&fs_root, baton, base_revision, scratch_pool));
+
+ err = svn_fs_file_contents(&contents, fs_root, path, scratch_pool);
+ if (err && err->apr_err == SVN_ERR_FS_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ *filename = NULL;
+ return SVN_NO_ERROR;
+ }
+ else if (err)
+ return svn_error_trace(err);
+ SVN_ERR(svn_stream_open_unique(&file_stream, &tmp_filename, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_stream_copy3(contents, file_stream, NULL, NULL, scratch_pool));
+
+ *filename = apr_pstrdup(result_pool, tmp_filename);
+
+ return SVN_NO_ERROR;
+}
+
svn_error_t *serve(svn_ra_svn_conn_t *conn, serve_params_t *params,
apr_pool_t *pool)
{
@@ -3080,7 +3527,7 @@ svn_error_t *serve(svn_ra_svn_conn_t *conn, serve_params_t *params,
apr_array_header_t *caplist, *cap_words;
server_baton_t b;
fs_warning_baton_t warn_baton;
- svn_stringbuf_t *cap_log = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *cap_log = svn_stringbuf_create_empty(pool);
b.tunnel = params->tunnel;
b.tunnel_user = get_tunnel_user(params, pool);
@@ -3088,52 +3535,64 @@ svn_error_t *serve(svn_ra_svn_conn_t *conn, serve_params_t *params,
b.user = NULL;
b.username_case = params->username_case;
b.authz_user = NULL;
+ b.base = params->base;
b.cfg = params->cfg;
- b.pwdb = params->pwdb;
- b.authzdb = params->authzdb;
+ b.pwdb = NULL;
+ b.authzdb = NULL;
b.realm = NULL;
b.log_file = params->log_file;
b.pool = pool;
b.use_sasl = FALSE;
+ b.vhost = params->vhost;
/* construct FS configuration parameters */
b.fs_config = apr_hash_make(pool);
- apr_hash_set(b.fs_config, SVN_FS_CONFIG_FSFS_CACHE_DELTAS,
- APR_HASH_KEY_STRING, params->cache_txdeltas ? "1" : "0");
- apr_hash_set(b.fs_config, SVN_FS_CONFIG_FSFS_CACHE_FULLTEXTS,
- APR_HASH_KEY_STRING, params->cache_fulltexts ? "1" : "0");
+ svn_hash_sets(b.fs_config, SVN_FS_CONFIG_FSFS_CACHE_DELTAS,
+ params->cache_txdeltas ? "1" :"0");
+ svn_hash_sets(b.fs_config, SVN_FS_CONFIG_FSFS_CACHE_FULLTEXTS,
+ params->cache_fulltexts ? "1" :"0");
+ svn_hash_sets(b.fs_config, SVN_FS_CONFIG_FSFS_CACHE_REVPROPS,
+ params->cache_revprops ? "1" :"0");
/* Send greeting. We don't support version 1 any more, so we can
* send an empty mechlist. */
if (params->compression_level > 0)
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, "nn()(wwwwwwww)",
- (apr_uint64_t) 2, (apr_uint64_t) 2,
- SVN_RA_SVN_CAP_EDIT_PIPELINE,
- SVN_RA_SVN_CAP_SVNDIFF1,
- SVN_RA_SVN_CAP_ABSENT_ENTRIES,
- SVN_RA_SVN_CAP_COMMIT_REVPROPS,
- SVN_RA_SVN_CAP_DEPTH,
- SVN_RA_SVN_CAP_LOG_REVPROPS,
- SVN_RA_SVN_CAP_ATOMIC_REVPROPS,
- SVN_RA_SVN_CAP_PARTIAL_REPLAY));
+ SVN_ERR(svn_ra_svn__write_cmd_response(conn, pool, "nn()(wwwwwwwwwww)",
+ (apr_uint64_t) 2, (apr_uint64_t) 2,
+ SVN_RA_SVN_CAP_EDIT_PIPELINE,
+ SVN_RA_SVN_CAP_SVNDIFF1,
+ SVN_RA_SVN_CAP_ABSENT_ENTRIES,
+ SVN_RA_SVN_CAP_COMMIT_REVPROPS,
+ SVN_RA_SVN_CAP_DEPTH,
+ SVN_RA_SVN_CAP_LOG_REVPROPS,
+ SVN_RA_SVN_CAP_ATOMIC_REVPROPS,
+ SVN_RA_SVN_CAP_PARTIAL_REPLAY,
+ SVN_RA_SVN_CAP_INHERITED_PROPS,
+ SVN_RA_SVN_CAP_EPHEMERAL_TXNPROPS,
+ SVN_RA_SVN_CAP_GET_FILE_REVS_REVERSE
+ ));
else
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, "nn()(wwwwwww)",
- (apr_uint64_t) 2, (apr_uint64_t) 2,
- SVN_RA_SVN_CAP_EDIT_PIPELINE,
- SVN_RA_SVN_CAP_ABSENT_ENTRIES,
- SVN_RA_SVN_CAP_COMMIT_REVPROPS,
- SVN_RA_SVN_CAP_DEPTH,
- SVN_RA_SVN_CAP_LOG_REVPROPS,
- SVN_RA_SVN_CAP_ATOMIC_REVPROPS,
- SVN_RA_SVN_CAP_PARTIAL_REPLAY));
+ SVN_ERR(svn_ra_svn__write_cmd_response(conn, pool, "nn()(wwwwwwwwww)",
+ (apr_uint64_t) 2, (apr_uint64_t) 2,
+ SVN_RA_SVN_CAP_EDIT_PIPELINE,
+ SVN_RA_SVN_CAP_ABSENT_ENTRIES,
+ SVN_RA_SVN_CAP_COMMIT_REVPROPS,
+ SVN_RA_SVN_CAP_DEPTH,
+ SVN_RA_SVN_CAP_LOG_REVPROPS,
+ SVN_RA_SVN_CAP_ATOMIC_REVPROPS,
+ SVN_RA_SVN_CAP_PARTIAL_REPLAY,
+ SVN_RA_SVN_CAP_INHERITED_PROPS,
+ SVN_RA_SVN_CAP_EPHEMERAL_TXNPROPS,
+ SVN_RA_SVN_CAP_GET_FILE_REVS_REVERSE
+ ));
/* Read client response, which we assume to be in version 2 format:
* version, capability list, and client URL; then we do an auth
* request. */
- SVN_ERR(svn_ra_svn_read_tuple(conn, pool, "nlc?c(?c)",
- &ver, &caplist, &client_url,
- &ra_client_string,
- &client_string));
+ SVN_ERR(svn_ra_svn__read_tuple(conn, pool, "nlc?c(?c)",
+ &ver, &caplist, &client_url,
+ &ra_client_string,
+ &client_string));
if (ver != 2)
return SVN_NO_ERROR;
@@ -3188,10 +3647,10 @@ svn_error_t *serve(svn_ra_svn_conn_t *conn, serve_params_t *params,
{
log_error(err, b.log_file, svn_ra_svn_conn_remote_host(conn),
b.user, NULL, pool);
- io_err = svn_ra_svn_write_cmd_failure(conn, pool, err);
+ io_err = svn_ra_svn__write_cmd_failure(conn, pool, err);
svn_error_clear(err);
SVN_ERR(io_err);
- return svn_ra_svn_flush(conn, pool);
+ return svn_ra_svn__flush(conn, pool);
}
/* Log the open. */
@@ -3227,12 +3686,25 @@ svn_error_t *serve(svn_ra_svn_conn_t *conn, serve_params_t *params,
SVN_ERR(svn_repos_has_capability(b.repos, &supports_mergeinfo,
SVN_REPOS_CAPABILITY_MERGEINFO, pool));
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w(cc(!",
- "success", uuid, b.repos_url));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "w(cc(!",
+ "success", uuid, b.repos_url));
if (supports_mergeinfo)
- SVN_ERR(svn_ra_svn_write_word(conn, pool, SVN_RA_SVN_CAP_MERGEINFO));
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!))"));
+ SVN_ERR(svn_ra_svn__write_word(conn, pool, SVN_RA_SVN_CAP_MERGEINFO));
+ SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!))"));
+ }
+
+ /* Set up editor shims. */
+ {
+ svn_delta_shim_callbacks_t *callbacks =
+ svn_delta_shim_callbacks_default(pool);
+
+ callbacks->fetch_base_func = fetch_base_func;
+ callbacks->fetch_props_func = fetch_props_func;
+ callbacks->fetch_kind_func = fetch_kind_func;
+ callbacks->fetch_baton = &b;
+
+ SVN_ERR(svn_ra_svn__set_shim_callbacks(conn, callbacks));
}
- return svn_ra_svn_handle_commands2(conn, pool, main_commands, &b, FALSE);
+ return svn_ra_svn__handle_commands2(conn, pool, main_commands, &b, FALSE);
}
diff --git a/subversion/svnserve/server.h b/subversion/svnserve/server.h
index 41ab09c..926a96f 100644
--- a/subversion/svnserve/server.h
+++ b/subversion/svnserve/server.h
@@ -42,6 +42,7 @@ typedef struct server_baton_t {
svn_repos_t *repos;
const char *repos_name; /* URI-encoded name of repository (not for authz) */
svn_fs_t *fs; /* For convenience; same as svn_repos_fs(repos) */
+ const char *base; /* Base directory for config files */
svn_config_t *cfg; /* Parsed repository svnserve.conf */
svn_config_t *pwdb; /* Parsed password database */
svn_authz_t *authzdb; /* Parsed authz rules */
@@ -59,6 +60,7 @@ typedef struct server_baton_t {
svn_boolean_t use_sasl; /* Use Cyrus SASL for authentication;
always false if SVN_HAVE_SASL not defined */
apr_file_t *log_file; /* Log filehandle. */
+ svn_boolean_t vhost; /* Use virtual-host-based path to repo. */
apr_pool_t *pool;
} server_baton_t;
@@ -86,24 +88,15 @@ typedef struct serve_params_t {
which forces all connections to be read-only. */
svn_boolean_t read_only;
+ /* The base directory for any relative configuration files. */
+ const char *base;
+
/* A parsed repository svnserve configuration file, ala
svnserve.conf. If this is NULL, then no configuration file was
specified on the command line. If this is non-NULL, then
per-repository svnserve.conf are not read. */
svn_config_t *cfg;
- /* A parsed repository password database. If this is NULL, then
- either no svnserve configuration file was specified on the
- command line, or it was specified and it did not refer to a
- password database. */
- svn_config_t *pwdb;
-
- /* A parsed repository authorization database. If this is NULL,
- then either no svnserve configuration file was specified on the
- command line, or it was specified and it did not refer to a
- authorization database. */
- svn_authz_t *authzdb;
-
/* A filehandle open for writing logs to; possibly NULL. */
apr_file_t *log_file;
@@ -116,6 +109,9 @@ typedef struct serve_params_t {
/* Enable full-text caching for all FSFS repositories. */
svn_boolean_t cache_fulltexts;
+ /* Enable revprop caching for all FSFS repositories. */
+ svn_boolean_t cache_revprops;
+
/* Size of the in-memory cache (used by FSFS only). */
apr_uint64_t memory_cache_size;
@@ -125,37 +121,40 @@ typedef struct serve_params_t {
Defaults to SVN_DELTA_COMPRESSION_LEVEL_DEFAULT. */
int compression_level;
+ /* Item size up to which we use the zero-copy code path to transmit
+ them over the network. 0 disables that code path. */
+ apr_size_t zero_copy_limit;
+
+ /* Amount of data to send between checks for cancellation requests
+ coming in from the client. */
+ apr_size_t error_check_interval;
+
+ /* Use virtual-host-based path to repo. */
+ svn_boolean_t vhost;
} serve_params_t;
/* Serve the connection CONN according to the parameters PARAMS. */
svn_error_t *serve(svn_ra_svn_conn_t *conn, serve_params_t *params,
apr_pool_t *pool);
-/* Load a svnserve configuration file located at FILENAME into CFG,
- and if such as found, then:
-
- - set *PWDB to any referenced password database,
- - set *AUTHZDB to any referenced authorization database, and
- - set *USERNAME_CASE to the enumerated value of the
- 'force-username-case' configuration value (or its default).
-
- If MUST_EXIST is true and FILENAME does not exist, then return an
- error. BASE may be specified as the base path to any referenced
- password and authorization files found in FILENAME.
-
- If SERVER is not NULL, log the real errors with SERVER and CONN but
- return generic errors to the client. CONN must not be NULL if SERVER
- is not NULL. */
-svn_error_t *load_configs(svn_config_t **cfg,
- svn_config_t **pwdb,
- svn_authz_t **authzdb,
- enum username_case_type *username_case,
- const char *filename,
- svn_boolean_t must_exist,
- const char *base,
- server_baton_t *server,
- svn_ra_svn_conn_t *conn,
- apr_pool_t *pool);
+/* Load the password database for the listening server based on the
+ entries in the SERVER struct.
+
+ SERVER and CONN must not be NULL. The real errors will be logged with
+ SERVER and CONN but return generic errors to the client. */
+svn_error_t *load_pwdb_config(server_baton_t *server,
+ svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool);
+
+/* Load the authz database for the listening server based on the
+ entries in the SERVER struct.
+
+ SERVER and CONN must not be NULL. The real errors will be logged with
+ SERVER and CONN but return generic errors to the client. */
+svn_error_t *load_authz_config(server_baton_t *server,
+ svn_ra_svn_conn_t *conn,
+ const char *repos_root,
+ apr_pool_t *pool);
/* Initialize the Cyrus SASL library. POOL is used for allocations. */
svn_error_t *cyrus_init(apr_pool_t *pool);
diff --git a/subversion/svnserve/svnserve.8 b/subversion/svnserve/svnserve.8
index 66cb983..deea846 100644
--- a/subversion/svnserve/svnserve.8
+++ b/subversion/svnserve/svnserve.8
@@ -110,12 +110,12 @@ still backgrounds itself at startup time.
.TP 5
\fB\-\-config\-file\fP=\fIfilename\fP
When specified, \fBsvnserve\fP reads \fIfilename\fP once at program
-startup and caches the \fBsvnserve\fP configuration and any passwords
-and authorization configuration referenced from \fIfilename\fP.
-\fBsvnserve\fP will not read any per-repository
-\fBconf/svnserve.conf\fP files when this option is used. See the
-\fBsvnserve.conf\fP(5) man page for details of the file format for
-this option.
+startup and caches the \fBsvnserve\fP configuration. The password
+and authorization configurations referenced from \fIfilename\fP will
+be loaded on each connection. \fBsvnserve\fP will not read any
+per-repository \fBconf/svnserve.conf\fP files when this option is
+used. See the \fBsvnserve.conf\fP(5) man page for details of the
+file format for this option.
.PP
.TP 5
\fB\-\-pid\-file\fP=\fIfilename\fP
diff --git a/subversion/svnserve/main.c b/subversion/svnserve/svnserve.c
index a3378bf..3d83323 100644
--- a/subversion/svnserve/main.c
+++ b/subversion/svnserve/svnserve.c
@@ -1,5 +1,5 @@
/*
- * main.c : Main control function for svnserve
+ * svnserve.c : Main control function for svnserve
*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
@@ -50,7 +50,12 @@
#include "svn_io.h"
#include "svn_private_config.h"
+
#include "private/svn_dep_compat.h"
+#include "private/svn_cmdline_private.h"
+#include "private/svn_atomic.h"
+#include "private/svn_subr_private.h"
+
#include "winservice.h"
#ifdef HAVE_UNISTD_H
@@ -147,6 +152,10 @@ void winservice_notify_stop(void)
#define SVNSERVE_OPT_LOG_FILE 264
#define SVNSERVE_OPT_CACHE_TXDELTAS 265
#define SVNSERVE_OPT_CACHE_FULLTEXTS 266
+#define SVNSERVE_OPT_CACHE_REVPROPS 267
+#define SVNSERVE_OPT_SINGLE_CONN 268
+#define SVNSERVE_OPT_CLIENT_SPEED 269
+#define SVNSERVE_OPT_VIRTUAL_HOST 270
static const apr_getopt_option_t svnserve__options[] =
{
@@ -165,11 +174,11 @@ static const apr_getopt_option_t svnserve__options[] =
N_("read configuration from file ARG")},
{"listen-port", SVNSERVE_OPT_LISTEN_PORT, 1,
#ifdef WIN32
- N_("listen port\n"
+ N_("listen port. The default port is 3690.\n"
" "
"[mode: daemon, service, listen-once]")},
#else
- N_("listen port\n"
+ N_("listen port. The default port is 3690.\n"
" "
"[mode: daemon, listen-once]")},
#endif
@@ -177,10 +186,14 @@ static const apr_getopt_option_t svnserve__options[] =
#ifdef WIN32
N_("listen hostname or IP address\n"
" "
+ "By default svnserve listens on all addresses.\n"
+ " "
"[mode: daemon, service, listen-once]")},
#else
N_("listen hostname or IP address\n"
" "
+ "By default svnserve listens on all addresses.\n"
+ " "
"[mode: daemon, listen-once]")},
#endif
{"prefer-ipv6", '6', 0,
@@ -202,9 +215,7 @@ static const apr_getopt_option_t svnserve__options[] =
" "
"minimize redundant operations.\n"
" "
- "Default is 128 for threaded and 16 for non-\n"
- " "
- "threaded mode.\n"
+ "Default is 16.\n"
" "
"[used for FSFS repositories only]")},
{"cache-txdeltas", SVNSERVE_OPT_CACHE_TXDELTAS, 1,
@@ -221,6 +232,22 @@ static const apr_getopt_option_t svnserve__options[] =
"Default is yes.\n"
" "
"[used for FSFS repositories only]")},
+ {"cache-revprops", SVNSERVE_OPT_CACHE_REVPROPS, 1,
+ N_("enable or disable caching of revision properties.\n"
+ " "
+ "Consult the documentation before activating this.\n"
+ " "
+ "Default is no.\n"
+ " "
+ "[used for FSFS repositories only]")},
+ {"client-speed", SVNSERVE_OPT_CLIENT_SPEED, 1,
+ N_("Optimize network handling based on the assumption\n"
+ " "
+ "that most clients are connected with a bitrate of\n"
+ " "
+ "ARG Mbit/s.\n"
+ " "
+ "Default is 0 (optimizations disabled).")},
#ifdef CONNECTION_HAVE_THREAD_OPTION
/* ### Making the assumption here that WIN32 never has fork and so
* ### this option never exists when --service exists. */
@@ -231,6 +258,10 @@ static const apr_getopt_option_t svnserve__options[] =
N_("run in foreground (useful for debugging)\n"
" "
"[mode: daemon]")},
+ {"single-thread", SVNSERVE_OPT_SINGLE_CONN, 0,
+ N_("handle one connection at a time in the parent process\n"
+ " "
+ "(useful for debugging)")},
{"log-file", SVNSERVE_OPT_LOG_FILE, 1,
N_("svnserve log file")},
{"pid-file", SVNSERVE_OPT_PID_FILE, 1,
@@ -248,6 +279,10 @@ static const apr_getopt_option_t svnserve__options[] =
" "
"[mode: tunnel]")},
{"help", 'h', 0, N_("display this help")},
+ {"virtual-host", SVNSERVE_OPT_VIRTUAL_HOST, 0,
+ N_("virtual host mode (look for repo in directory\n"
+ " "
+ "of provided hostname)")},
{"version", SVNSERVE_OPT_VERSION, 0,
N_("show program version information")},
{"quiet", 'q', 0,
@@ -309,7 +344,8 @@ static svn_error_t * version(svn_boolean_t quiet, apr_pool_t *pool)
_("\nCyrus SASL authentication is available.\n"));
#endif
- return svn_opt_print_help3(NULL, "svnserve", TRUE, quiet, version_footer->data,
+ return svn_opt_print_help4(NULL, "svnserve", TRUE, quiet, FALSE,
+ version_footer->data,
NULL, NULL, NULL, NULL, NULL, pool);
}
@@ -342,11 +378,44 @@ static apr_status_t redirect_stdout(void *arg)
return apr_file_dup2(out_file, err_file, pool);
}
+#if APR_HAS_THREADS
+/* The pool passed to apr_thread_create can only be released when both
+
+ A: the call to apr_thread_create has returned to the calling thread
+ B: the new thread has started running and reached apr_thread_start_t
+
+ So we set the atomic counter to 2 then both the calling thread and
+ the new thread decrease it and when it reaches 0 the pool can be
+ released. */
+struct shared_pool_t {
+ svn_atomic_t count;
+ apr_pool_t *pool;
+};
+
+static struct shared_pool_t *
+attach_shared_pool(apr_pool_t *pool)
+{
+ struct shared_pool_t *shared = apr_palloc(pool, sizeof(struct shared_pool_t));
+
+ shared->pool = pool;
+ svn_atomic_set(&shared->count, 2);
+
+ return shared;
+}
+
+static void
+release_shared_pool(struct shared_pool_t *shared)
+{
+ if (svn_atomic_dec(&shared->count) == 0)
+ svn_pool_destroy(shared->pool);
+}
+#endif
+
/* "Arguments" passed from the main thread to the connection thread */
struct serve_thread_t {
svn_ra_svn_conn_t *conn;
serve_params_t *params;
- apr_pool_t *pool;
+ struct shared_pool_t *shared_pool;
};
#if APR_HAS_THREADS
@@ -354,8 +423,8 @@ static void * APR_THREAD_FUNC serve_thread(apr_thread_t *tid, void *data)
{
struct serve_thread_t *d = data;
- svn_error_clear(serve(d->conn, d->params, d->pool));
- svn_pool_destroy(d->pool);
+ svn_error_clear(serve(d->conn, d->params, d->shared_pool->pool));
+ release_shared_pool(d->shared_pool);
return NULL;
}
@@ -369,8 +438,9 @@ static svn_error_t *write_pid_file(const char *filename, apr_pool_t *pool)
const char *contents = apr_psprintf(pool, "%" APR_PID_T_FMT "\n",
getpid());
+ SVN_ERR(svn_io_remove_file2(filename, TRUE, pool));
SVN_ERR(svn_io_file_open(&file, filename,
- APR_WRITE | APR_CREATE | APR_TRUNCATE,
+ APR_WRITE | APR_CREATE | APR_EXCL,
APR_OS_DEFAULT, pool));
SVN_ERR(svn_io_file_write_full(file, contents, strlen(contents), NULL,
pool));
@@ -393,9 +463,9 @@ check_lib_versions(void)
{ "svn_ra_svn", svn_ra_svn_version },
{ NULL, NULL }
};
-
SVN_VERSION_DEFINE(my_version);
- return svn_ver_check_list(&my_version, checklist);
+
+ return svn_ver_check_list2(&my_version, checklist, svn_ver_equal);
}
@@ -408,7 +478,6 @@ int main(int argc, const char *argv[])
apr_sockaddr_t *sa;
apr_pool_t *pool;
apr_pool_t *connection_pool;
- apr_allocator_t *allocator;
svn_error_t *err;
apr_getopt_t *os;
int opt;
@@ -420,6 +489,7 @@ int main(int argc, const char *argv[])
#if APR_HAS_THREADS
apr_threadattr_t *tattr;
apr_thread_t *tid;
+ struct shared_pool_t *shared_pool;
struct serve_thread_t *thread_data;
#endif
@@ -428,10 +498,13 @@ int main(int argc, const char *argv[])
const char *host = NULL;
int family = APR_INET;
apr_int32_t sockaddr_info_flags = 0;
+#if APR_HAVE_IPV6
svn_boolean_t prefer_v6 = FALSE;
+#endif
svn_boolean_t quiet = FALSE;
svn_boolean_t is_version = FALSE;
int mode_opt_count = 0;
+ int handling_opt_count = 0;
const char *config_filename = NULL;
const char *pid_filename = NULL;
const char *log_filename = NULL;
@@ -466,15 +539,18 @@ int main(int argc, const char *argv[])
params.tunnel = FALSE;
params.tunnel_user = NULL;
params.read_only = FALSE;
+ params.base = NULL;
params.cfg = NULL;
- params.pwdb = NULL;
- params.authzdb = NULL;
params.compression_level = SVN_DELTA_COMPRESSION_LEVEL_DEFAULT;
params.log_file = NULL;
+ params.vhost = FALSE;
params.username_case = CASE_ASIS;
params.memory_cache_size = (apr_uint64_t)-1;
params.cache_fulltexts = TRUE;
params.cache_txdeltas = FALSE;
+ params.cache_revprops = FALSE;
+ params.zero_copy_limit = 0;
+ params.error_check_interval = 4096;
while (1)
{
@@ -486,7 +562,10 @@ int main(int argc, const char *argv[])
switch (opt)
{
case '6':
+#if APR_HAVE_IPV6
prefer_v6 = TRUE;
+#endif
+ /* ### Maybe error here if we don't have IPV6 support? */
break;
case 'h':
@@ -513,6 +592,11 @@ int main(int argc, const char *argv[])
foreground = TRUE;
break;
+ case SVNSERVE_OPT_SINGLE_CONN:
+ handling_mode = connection_mode_single;
+ handling_opt_count++;
+ break;
+
case 'i':
if (run_mode != run_mode_inetd)
{
@@ -585,6 +669,7 @@ int main(int argc, const char *argv[])
case 'T':
handling_mode = connection_mode_thread;
+ handling_opt_count++;
break;
case 'c':
@@ -609,6 +694,28 @@ int main(int argc, const char *argv[])
= svn_tristate__from_word(arg) == svn_tristate_true;
break;
+ case SVNSERVE_OPT_CACHE_REVPROPS:
+ params.cache_revprops
+ = svn_tristate__from_word(arg) == svn_tristate_true;
+ break;
+
+ case SVNSERVE_OPT_CLIENT_SPEED:
+ {
+ apr_size_t bandwidth = (apr_size_t)apr_strtoi64(arg, NULL, 0);
+
+ /* for slower clients, don't try anything fancy */
+ if (bandwidth >= 1000)
+ {
+ /* block other clients for at most 1 ms (at full bandwidth).
+ Note that the send buffer is 16kB anyways. */
+ params.zero_copy_limit = bandwidth * 120;
+
+ /* check for aborted connections at the same rate */
+ params.error_check_interval = bandwidth * 120;
+ }
+ }
+ break;
+
#ifdef WIN32
case SVNSERVE_OPT_SERVICE:
if (run_mode != run_mode_service)
@@ -633,7 +740,11 @@ int main(int argc, const char *argv[])
pool));
break;
- case SVNSERVE_OPT_LOG_FILE:
+ case SVNSERVE_OPT_VIRTUAL_HOST:
+ params.vhost = TRUE;
+ break;
+
+ case SVNSERVE_OPT_LOG_FILE:
SVN_INT_ERR(svn_utf_cstring_to_utf8(&log_filename, arg, pool));
log_filename = svn_dirent_internal_style(log_filename, pool);
SVN_INT_ERR(svn_dirent_get_absolute(&log_filename, log_filename,
@@ -665,14 +776,26 @@ int main(int argc, const char *argv[])
usage(argv[0], pool);
}
+ if (handling_opt_count > 1)
+ {
+ svn_error_clear(svn_cmdline_fputs(
+ _("You may only specify one of -T or --single-thread\n"),
+ stderr, pool));
+ usage(argv[0], pool);
+ }
+
/* If a configuration file is specified, load it and any referenced
* password and authorization files. */
if (config_filename)
- SVN_INT_ERR(load_configs(&params.cfg, &params.pwdb, &params.authzdb,
- &params.username_case, config_filename, TRUE,
- svn_dirent_dirname(config_filename, pool),
- NULL, NULL, /* server baton, conn */
- pool));
+ {
+ params.base = svn_dirent_dirname(config_filename, pool);
+
+ SVN_INT_ERR(svn_config_read3(&params.cfg, config_filename,
+ TRUE, /* must_exist */
+ FALSE, /* section_names_case_sensitive */
+ FALSE, /* option_names_case_sensitive */
+ pool));
+ }
if (log_filename)
SVN_INT_ERR(svn_io_file_open(&params.log_file, log_filename,
@@ -711,8 +834,10 @@ int main(int argc, const char *argv[])
* the pool cleanup handlers that call sasl_dispose() (connection_pool)
* and sasl_done() (pool) are run in the right order. See issue #3664. */
connection_pool = svn_pool_create(pool);
- conn = svn_ra_svn_create_conn2(NULL, in_file, out_file,
+ conn = svn_ra_svn_create_conn3(NULL, in_file, out_file,
params.compression_level,
+ params.zero_copy_limit,
+ params.error_check_interval,
connection_pool);
svn_error_clear(serve(conn, &params, connection_pool));
exit(0);
@@ -881,7 +1006,7 @@ int main(int argc, const char *argv[])
settings.single_threaded = TRUE;
if (handling_mode == connection_mode_thread)
{
-#ifdef APR_HAS_THREADS
+#if APR_HAS_THREADS
settings.single_threaded = FALSE;
#else
/* No requests will be processed at all
@@ -903,22 +1028,12 @@ int main(int argc, const char *argv[])
return ERROR_SUCCESS;
#endif
- /* If we are using fulltext caches etc. we will allocate many large
- chunks of memory of various sizes outside the cache for those
- fulltexts. Make sure we use the memory wisely: use an allocator
- that causes memory fragments to be given back to the OS early. */
-
- if (apr_allocator_create(&allocator))
- return EXIT_FAILURE;
-
- apr_allocator_max_free_set(allocator, SVN_ALLOCATOR_RECOMMENDED_MAX_FREE);
-
/* Non-standard pool handling. The main thread never blocks to join
the connection threads so it cannot clean up after each one. So
separate pools that can be cleared at thread exit are used. */
- connection_pool = svn_pool_create_ex(NULL, allocator);
- apr_allocator_owner_set(allocator, connection_pool);
+ connection_pool
+ = apr_allocator_owner_get(svn_pool_create_allocator(FALSE));
status = apr_socket_accept(&usock, sock, connection_pool);
if (handling_mode == connection_mode_fork)
@@ -928,7 +1043,9 @@ int main(int argc, const char *argv[])
connection_pool) == APR_CHILD_DONE)
;
}
- if (APR_STATUS_IS_EINTR(status))
+ if (APR_STATUS_IS_EINTR(status)
+ || APR_STATUS_IS_ECONNABORTED(status)
+ || APR_STATUS_IS_ECONNRESET(status))
{
svn_pool_destroy(connection_pool);
continue;
@@ -954,8 +1071,10 @@ int main(int argc, const char *argv[])
/* It's not a fatal error if we cannot enable keep-alives. */
}
- conn = svn_ra_svn_create_conn2(usock, NULL, NULL,
+ conn = svn_ra_svn_create_conn3(usock, NULL, NULL,
params.compression_level,
+ params.zero_copy_limit,
+ params.error_check_interval,
connection_pool);
if (run_mode == run_mode_listen_once)
@@ -1011,6 +1130,7 @@ int main(int argc, const char *argv[])
particularly sophisticated strategy for a threaded server, it's
little different from forking one process per connection. */
#if APR_HAS_THREADS
+ shared_pool = attach_shared_pool(connection_pool);
status = apr_threadattr_create(&tattr, connection_pool);
if (status)
{
@@ -1030,9 +1150,9 @@ int main(int argc, const char *argv[])
thread_data = apr_palloc(connection_pool, sizeof(*thread_data));
thread_data->conn = conn;
thread_data->params = &params;
- thread_data->pool = connection_pool;
+ thread_data->shared_pool = shared_pool;
status = apr_thread_create(&tid, tattr, serve_thread, thread_data,
- connection_pool);
+ shared_pool->pool);
if (status)
{
err = svn_error_wrap_apr(status, _("Can't create thread"));
@@ -1040,6 +1160,7 @@ int main(int argc, const char *argv[])
svn_error_clear(err);
exit(1);
}
+ release_shared_pool(shared_pool);
#endif
break;
diff --git a/subversion/svnserve/svnserve.conf.5 b/subversion/svnserve/svnserve.conf.5
index fefccce..f86aeb3 100644
--- a/subversion/svnserve/svnserve.conf.5
+++ b/subversion/svnserve/svnserve.conf.5
@@ -61,11 +61,13 @@ uses only one section "users"; each variable within the section is a
username, and each value is a password.
.PP
.TP 5
-\fBauthz-db\fP = \fIfilename\fP
+\fBauthz-db\fP = \fIpath\fP
The authz-db option controls the location of the authorization
-rules for path-based access control. \fIfilename\fP may be
-relative to the repository conf directory. There is no default value.
-If you don't specify an authz-db, no path-based access control is done.
+rules for path-based access control. \fIpath\fP may be
+relative to the repository conf directory. \fIpath\fP may be a repository
+relative URL (^/) or absolute file:// URL to a text file in a Subversion
+repository. There is no default value. If you don't specify an authz-db,
+no path-based access control is done.
.PP
.TP 5
\fBrealm\fP = \fIrealm\-name\fP
diff --git a/subversion/svnsync/main.c b/subversion/svnsync/svnsync.c
index 36603d4..621b782 100644
--- a/subversion/svnsync/main.c
+++ b/subversion/svnsync/svnsync.c
@@ -19,6 +19,7 @@
* ====================================================================
*/
+#include "svn_hash.h"
#include "svn_cmdline.h"
#include "svn_config.h"
#include "svn_pools.h"
@@ -37,6 +38,7 @@
#include "private/svn_opt_private.h"
#include "private/svn_ra_private.h"
#include "private/svn_cmdline_private.h"
+#include "private/svn_subr_private.h"
#include "sync.h"
@@ -53,6 +55,7 @@ static svn_opt_subcommand_t initialize_cmd,
enum svnsync__opt {
svnsync_opt_non_interactive = SVN_OPT_FIRST_LONGOPT_ID,
+ svnsync_opt_force_interactive,
svnsync_opt_no_auth_cache,
svnsync_opt_auth_username,
svnsync_opt_auth_password,
@@ -71,6 +74,7 @@ enum svnsync__opt {
};
#define SVNSYNC_OPTS_DEFAULT svnsync_opt_non_interactive, \
+ svnsync_opt_force_interactive, \
svnsync_opt_no_auth_cache, \
svnsync_opt_auth_username, \
svnsync_opt_auth_password, \
@@ -173,7 +177,13 @@ static const apr_getopt_option_t svnsync_options[] =
{"allow-non-empty", svnsync_opt_allow_non_empty, 0,
N_("allow a non-empty destination repository") },
{"non-interactive", svnsync_opt_non_interactive, 0,
- N_("do no interactive prompting") },
+ N_("do no interactive prompting (default is to prompt\n"
+ " "
+ "only if standard input is a terminal device)")},
+ {"force-interactive", svnsync_opt_force_interactive, 0,
+ N_("do interactive prompting even if standard input\n"
+ " "
+ "is not a terminal device")},
{"no-auth-cache", svnsync_opt_no_auth_cache, 0,
N_("do not cache authentication tokens") },
{"username", svnsync_opt_auth_username, 1,
@@ -301,10 +311,9 @@ check_lib_versions(void)
{ "svn_ra", svn_ra_version },
{ NULL, NULL }
};
-
SVN_VERSION_DEFINE(my_version);
- return svn_ver_check_list(&my_version, checklist);
+ return svn_ver_check_list2(&my_version, checklist, svn_ver_equal);
}
@@ -323,7 +332,7 @@ lock_retry_func(void *baton,
/* Acquire a lock (of sorts) on the repository associated with the
* given RA SESSION. This lock is just a revprop change attempt in a
* time-delay loop. This function is duplicated by svnrdump in
- * load_editor.c.
+ * svnrdump/load_editor.c
*/
static svn_error_t *
get_lock(const svn_string_t **lock_string_p,
@@ -483,7 +492,7 @@ remove_props_not_in_source(svn_ra_session_t *session,
continue;
/* Delete property if the name can't be found in SOURCE_PROPS. */
- if (! apr_hash_get(source_props, propname, APR_HASH_KEY_STRING))
+ if (! svn_hash_gets(source_props, propname))
SVN_ERR(svn_ra_change_rev_prop2(session, rev, propname, NULL,
NULL, subpool));
}
@@ -524,9 +533,9 @@ filter_props(int *filtered_count, apr_hash_t *props,
/* Copy all properties:
- not matching the exclude pattern if provided OR
- matching the include pattern if provided */
- if (!filter || filter(propname) == FALSE)
+ if (!filter || !filter(propname))
{
- apr_hash_set(filtered, propname, APR_HASH_KEY_STRING, propval);
+ svn_hash_sets(filtered, propname, propval);
}
else
{
@@ -654,6 +663,8 @@ copy_revprops(svn_ra_session_t *from_session,
in the property names, but we'll get the values 'for free'. */
if (sync)
SVN_ERR(svn_ra_rev_proplist(to_session, rev, &existing_props, subpool));
+ else
+ existing_props = NULL;
/* Get the list of revision properties on REV of SOURCE. */
SVN_ERR(svn_ra_rev_proplist(from_session, rev, &rev_props, subpool));
@@ -760,7 +771,7 @@ do_initialize(svn_ra_session_t *to_session,
/* If we're doing a partial replay, we have to check first if the server
supports this. */
- if (svn_uri__is_child(root_url, baton->from_url, pool))
+ if (strcmp(root_url, baton->from_url) != 0)
{
svn_boolean_t server_supports_partial_replay;
svn_error_t *err = svn_ra_has_capability(from_session,
@@ -914,12 +925,9 @@ open_source_session(svn_ra_session_t **from_session,
SVN_ERR(svn_ra_rev_proplist(to_session, 0, &props, pool));
- from_url_str = apr_hash_get(props, SVNSYNC_PROP_FROM_URL,
- APR_HASH_KEY_STRING);
- from_uuid_str = apr_hash_get(props, SVNSYNC_PROP_FROM_UUID,
- APR_HASH_KEY_STRING);
- *last_merged_rev = apr_hash_get(props, SVNSYNC_PROP_LAST_MERGED_REV,
- APR_HASH_KEY_STRING);
+ from_url_str = svn_hash_gets(props, SVNSYNC_PROP_FROM_URL);
+ from_uuid_str = svn_hash_gets(props, SVNSYNC_PROP_FROM_UUID);
+ *last_merged_rev = svn_hash_gets(props, SVNSYNC_PROP_LAST_MERGED_REV);
if (! from_url_str || ! from_uuid_str || ! *last_merged_rev)
return svn_error_create
@@ -959,16 +967,21 @@ open_target_session(svn_ra_session_t **target_session_p,
typedef struct replay_baton_t {
svn_ra_session_t *from_session;
svn_ra_session_t *to_session;
+ /* Extra 'backdoor' session for fetching data *from* the target repo. */
+ svn_ra_session_t *extra_to_session;
+ svn_revnum_t current_revision;
subcommand_baton_t *sb;
svn_boolean_t has_commit_revprops_capability;
int normalized_rev_props_count;
int normalized_node_props_count;
+ const char *to_root;
} replay_baton_t;
/* Return a replay baton allocated from POOL and populated with
data from the provided parameters. */
-static replay_baton_t *
-make_replay_baton(svn_ra_session_t *from_session,
+static svn_error_t *
+make_replay_baton(replay_baton_t **baton_p,
+ svn_ra_session_t *from_session,
svn_ra_session_t *to_session,
subcommand_baton_t *sb, apr_pool_t *pool)
{
@@ -976,7 +989,16 @@ make_replay_baton(svn_ra_session_t *from_session,
rb->from_session = from_session;
rb->to_session = to_session;
rb->sb = sb;
- return rb;
+
+ SVN_ERR(svn_ra_get_repos_root2(to_session, &rb->to_root, pool));
+
+#ifdef ENABLE_EV2_SHIMS
+ /* Open up the extra baton. Only needed for Ev2 shims. */
+ SVN_ERR(open_target_session(&rb->extra_to_session, sb, pool));
+#endif
+
+ *baton_p = rb;
+ return SVN_NO_ERROR;
}
/* Return TRUE iff KEY is the name of an svn:date or svn:author or any svnsync
@@ -1030,6 +1052,135 @@ filter_include_log(const char *key)
}
+static svn_error_t *
+fetch_base_func(const char **filename,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct replay_baton_t *rb = baton;
+ svn_stream_t *fstream;
+ svn_error_t *err;
+
+ if (svn_path_is_url(path))
+ path = svn_uri_skip_ancestor(rb->to_root, path, scratch_pool);
+ else if (path[0] == '/')
+ path += 1;
+
+ if (! SVN_IS_VALID_REVNUM(base_revision))
+ base_revision = rb->current_revision - 1;
+
+ SVN_ERR(svn_stream_open_unique(&fstream, filename, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ result_pool, scratch_pool));
+
+ err = svn_ra_get_file(rb->extra_to_session, path, base_revision,
+ fstream, NULL, NULL, scratch_pool);
+ if (err && err->apr_err == SVN_ERR_FS_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ SVN_ERR(svn_stream_close(fstream));
+
+ *filename = NULL;
+ return SVN_NO_ERROR;
+ }
+ else if (err)
+ return svn_error_trace(err);
+
+ SVN_ERR(svn_stream_close(fstream));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+fetch_props_func(apr_hash_t **props,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct replay_baton_t *rb = baton;
+ svn_node_kind_t node_kind;
+
+ if (svn_path_is_url(path))
+ path = svn_uri_skip_ancestor(rb->to_root, path, scratch_pool);
+ else if (path[0] == '/')
+ path += 1;
+
+ if (! SVN_IS_VALID_REVNUM(base_revision))
+ base_revision = rb->current_revision - 1;
+
+ SVN_ERR(svn_ra_check_path(rb->extra_to_session, path, base_revision,
+ &node_kind, scratch_pool));
+
+ if (node_kind == svn_node_file)
+ {
+ SVN_ERR(svn_ra_get_file(rb->extra_to_session, path, base_revision,
+ NULL, NULL, props, result_pool));
+ }
+ else if (node_kind == svn_node_dir)
+ {
+ apr_array_header_t *tmp_props;
+
+ SVN_ERR(svn_ra_get_dir2(rb->extra_to_session, NULL, NULL, props, path,
+ base_revision, 0 /* Dirent fields */,
+ result_pool));
+ tmp_props = svn_prop_hash_to_array(*props, result_pool);
+ SVN_ERR(svn_categorize_props(tmp_props, NULL, NULL, &tmp_props,
+ result_pool));
+ *props = svn_prop_array_to_hash(tmp_props, result_pool);
+ }
+ else
+ {
+ *props = apr_hash_make(result_pool);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+fetch_kind_func(svn_node_kind_t *kind,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *scratch_pool)
+{
+ struct replay_baton_t *rb = baton;
+
+ if (svn_path_is_url(path))
+ path = svn_uri_skip_ancestor(rb->to_root, path, scratch_pool);
+ else if (path[0] == '/')
+ path += 1;
+
+ if (! SVN_IS_VALID_REVNUM(base_revision))
+ base_revision = rb->current_revision - 1;
+
+ SVN_ERR(svn_ra_check_path(rb->extra_to_session, path, base_revision,
+ kind, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+
+static svn_delta_shim_callbacks_t *
+get_shim_callbacks(replay_baton_t *rb,
+ apr_pool_t *result_pool)
+{
+ svn_delta_shim_callbacks_t *callbacks =
+ svn_delta_shim_callbacks_default(result_pool);
+
+ callbacks->fetch_props_func = fetch_props_func;
+ callbacks->fetch_kind_func = fetch_kind_func;
+ callbacks->fetch_base_func = fetch_base_func;
+ callbacks->fetch_baton = rb;
+
+ return callbacks;
+}
+
+
/* Callback function for svn_ra_replay_range, invoked when starting to parse
* a replay report.
*/
@@ -1085,9 +1236,9 @@ replay_rev_started(svn_revnum_t revision,
have to set it to at least the empty string. If there's a svn:log
property on this revision, we will write the actual value in the
replay_rev_finished callback. */
- if (! apr_hash_get(filtered, SVN_PROP_REVISION_LOG, APR_HASH_KEY_STRING))
- apr_hash_set(filtered, SVN_PROP_REVISION_LOG, APR_HASH_KEY_STRING,
- svn_string_create("", pool));
+ if (! svn_hash_gets(filtered, SVN_PROP_REVISION_LOG))
+ svn_hash_sets(filtered, SVN_PROP_REVISION_LOG,
+ svn_string_create_empty(pool));
/* If necessary, normalize encoding and line ending style. Add the number
of properties that required EOL normalization to the overall count
@@ -1096,6 +1247,8 @@ replay_rev_started(svn_revnum_t revision,
rb->sb->source_prop_encoding, pool));
rb->normalized_rev_props_count += normalized_count;
+ SVN_ERR(svn_ra__register_editor_shim_callbacks(rb->to_session,
+ get_shim_callbacks(rb, pool)));
SVN_ERR(svn_ra_get_commit_editor3(rb->to_session, &commit_editor,
&commit_baton,
filtered,
@@ -1118,6 +1271,7 @@ replay_rev_started(svn_revnum_t revision,
*editor = cancel_editor;
*edit_baton = cancel_baton;
+ rb->current_revision = revision;
return SVN_NO_ERROR;
}
@@ -1144,7 +1298,7 @@ replay_rev_finished(svn_revnum_t revision,
if (rb->sb->committed_rev != revision)
return svn_error_createf
(APR_EINVAL, NULL,
- _("Commit created rev %ld but should have created %ld"),
+ _("Commit created r%ld but should have created r%ld"),
rb->sb->committed_rev, revision);
SVN_ERR(svn_ra_rev_proplist(rb->to_session, revision, &existing_props,
@@ -1311,7 +1465,7 @@ do_synchronize(svn_ra_session_t *to_session,
/* Ok, so there are new revisions, iterate over them copying them
into the destination repository. */
- rb = make_replay_baton(from_session, to_session, baton, pool);
+ SVN_ERR(make_replay_baton(&rb, from_session, to_session, baton, pool));
/* For compatibility with older svnserve versions, check first if we
support adding revprops to the commit. */
@@ -1527,7 +1681,7 @@ copy_revprops_cmd(apr_getopt_t *os, void *b, apr_pool_t *pool)
apr_array_header_t *targets;
subcommand_baton_t *baton;
const char *to_url = NULL;
- const char *from_url;
+ const char *from_url = NULL;
svn_opt_revision_t start_revision, end_revision;
svn_revnum_t start_rev = 0, end_rev = SVN_INVALID_REVNUM;
@@ -1660,18 +1814,15 @@ info_cmd(apr_getopt_t *os, void *b, apr_pool_t * pool)
SVN_ERR(svn_ra_rev_proplist(to_session, 0, &props, pool));
- from_url = apr_hash_get(props, SVNSYNC_PROP_FROM_URL,
- APR_HASH_KEY_STRING);
+ from_url = svn_hash_gets(props, SVNSYNC_PROP_FROM_URL);
if (! from_url)
return svn_error_createf
(SVN_ERR_BAD_URL, NULL,
_("Repository '%s' is not initialized for synchronization"), to_url);
- from_uuid = apr_hash_get(props, SVNSYNC_PROP_FROM_UUID,
- APR_HASH_KEY_STRING);
- last_merged_rev = apr_hash_get(props, SVNSYNC_PROP_LAST_MERGED_REV,
- APR_HASH_KEY_STRING);
+ from_uuid = svn_hash_gets(props, SVNSYNC_PROP_FROM_UUID);
+ last_merged_rev = svn_hash_gets(props, SVNSYNC_PROP_LAST_MERGED_REV);
/* Print the info. */
SVN_ERR(svn_cmdline_printf(pool, _("Source URL: %s\n"), from_url->data));
@@ -1710,9 +1861,10 @@ help_cmd(apr_getopt_t *os, void *baton, apr_pool_t *pool)
SVN_ERR(svn_ra_print_modules(version_footer, pool));
- SVN_ERR(svn_opt_print_help3(os, "svnsync",
+ SVN_ERR(svn_opt_print_help4(os, "svnsync",
opt_baton ? opt_baton->version : FALSE,
opt_baton ? opt_baton->quiet : FALSE,
+ /*###opt_state ? opt_state->verbose :*/ FALSE,
version_footer->data, header,
svnsync_cmd_table, svnsync_options, NULL,
NULL, pool));
@@ -1740,7 +1892,7 @@ main(int argc, const char *argv[])
const char *password = NULL, *source_password = NULL, *sync_password = NULL;
apr_array_header_t *config_options = NULL;
const char *source_prop_encoding = NULL;
- apr_allocator_t *allocator;
+ svn_boolean_t force_interactive = FALSE;
if (svn_cmdline_init("svnsync", stderr) != EXIT_SUCCESS)
{
@@ -1754,13 +1906,7 @@ main(int argc, const char *argv[])
/* Create our top-level pool. Use a separate mutexless allocator,
* given this application is single threaded.
*/
- if (apr_allocator_create(&allocator))
- return EXIT_FAILURE;
-
- apr_allocator_max_free_set(allocator, SVN_ALLOCATOR_RECOMMENDED_MAX_FREE);
-
- pool = svn_pool_create_ex(NULL, allocator);
- apr_allocator_owner_set(allocator, pool);
+ pool = apr_allocator_owner_get(svn_pool_create_allocator(FALSE));
err = svn_ra_initialize(pool);
if (err)
@@ -1809,6 +1955,10 @@ main(int argc, const char *argv[])
opt_baton.non_interactive = TRUE;
break;
+ case svnsync_opt_force_interactive:
+ force_interactive = TRUE;
+ break;
+
case svnsync_opt_trust_server_cert:
opt_baton.trust_server_cert = TRUE;
break;
@@ -1938,6 +2088,20 @@ main(int argc, const char *argv[])
if (opt_baton.help)
subcommand = svn_opt_get_canonical_subcommand2(svnsync_cmd_table, "help");
+ /* The --non-interactive and --force-interactive options are mutually
+ * exclusive. */
+ if (opt_baton.non_interactive && force_interactive)
+ {
+ err = svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("--non-interactive and --force-interactive "
+ "are mutually exclusive"));
+ return svn_cmdline_handle_exit_error(err, pool, "svnsync: ");
+ }
+ else
+ opt_baton.non_interactive = !svn_cmdline__be_interactive(
+ opt_baton.non_interactive,
+ force_interactive);
+
/* Disallow the mixing --username/password with their --source- and
--sync- variants. Treat "--username FOO" as "--source-username
FOO --sync-username FOO"; ditto for "--password FOO". */
@@ -2067,8 +2231,7 @@ main(int argc, const char *argv[])
"svnsync: ", "--config-option"));
}
- config = apr_hash_get(opt_baton.config, SVN_CONFIG_CATEGORY_CONFIG,
- APR_HASH_KEY_STRING);
+ config = svn_hash_gets(opt_baton.config, SVN_CONFIG_CATEGORY_CONFIG);
opt_baton.source_prop_encoding = source_prop_encoding;
diff --git a/subversion/svnsync/sync.c b/subversion/svnsync/sync.c
index 525a57c..4d54ee8 100644
--- a/subversion/svnsync/sync.c
+++ b/subversion/svnsync/sync.c
@@ -19,6 +19,7 @@
* ====================================================================
*/
+#include "svn_hash.h"
#include "svn_cmdline.h"
#include "svn_config.h"
#include "svn_pools.h"
@@ -33,8 +34,7 @@
#include "svn_subst.h"
#include "svn_string.h"
-#include "private/svn_opt_private.h"
-#include "private/svn_cmdline_private.h"
+#include "private/svn_string_private.h"
#include "sync.h"
@@ -85,6 +85,92 @@ normalize_string(const svn_string_t **str,
return SVN_NO_ERROR;
}
+/* Remove r0 references from the mergeinfo string *STR.
+ *
+ * r0 was never a valid mergeinfo reference and cannot be committed with
+ * recent servers, but can be committed through a server older than 1.6.18
+ * for HTTP or older than 1.6.17 for the other protocols. See issue #4476
+ * "Mergeinfo containing r0 makes svnsync and dump and load fail".
+ *
+ * Set *WAS_CHANGED to TRUE if *STR was changed, otherwise to FALSE.
+ */
+static svn_error_t *
+remove_r0_mergeinfo(const svn_string_t **str,
+ svn_boolean_t *was_changed,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_stringbuf_t *new_str = svn_stringbuf_create_empty(result_pool);
+ apr_array_header_t *lines;
+ int i;
+
+ SVN_ERR_ASSERT(*str && (*str)->data);
+
+ *was_changed = FALSE;
+
+ /* for each line */
+ lines = svn_cstring_split((*str)->data, "\n", FALSE, scratch_pool);
+
+ for (i = 0; i < lines->nelts; i++)
+ {
+ char *line = APR_ARRAY_IDX(lines, i, char *);
+ char *colon;
+ char *rangelist;
+
+ /* split at the last colon */
+ colon = strrchr(line, ':');
+
+ if (! colon)
+ return svn_error_createf(SVN_ERR_MERGEINFO_PARSE_ERROR, NULL,
+ _("Missing colon in svn:mergeinfo "
+ "property"));
+
+ rangelist = colon + 1;
+
+ /* remove r0 */
+ if (colon[1] == '0')
+ {
+ if (strncmp(rangelist, "0*,", 3) == 0)
+ {
+ rangelist += 3;
+ }
+ else if (strcmp(rangelist, "0*") == 0
+ || strncmp(rangelist, "0,", 2) == 0
+ || strncmp(rangelist, "0-1*", 4) == 0
+ || strncmp(rangelist, "0-1,", 4) == 0
+ || strcmp(rangelist, "0-1") == 0)
+ {
+ rangelist += 2;
+ }
+ else if (strcmp(rangelist, "0") == 0)
+ {
+ rangelist += 1;
+ }
+ else if (strncmp(rangelist, "0-", 2) == 0)
+ {
+ rangelist[0] = '1';
+ }
+ }
+
+ /* reassemble */
+ if (rangelist[0])
+ {
+ if (new_str->len)
+ svn_stringbuf_appendbyte(new_str, '\n');
+ svn_stringbuf_appendbytes(new_str, line, colon + 1 - line);
+ svn_stringbuf_appendcstr(new_str, rangelist);
+ }
+ }
+
+ if (strcmp((*str)->data, new_str->data) != 0)
+ {
+ *was_changed = TRUE;
+ }
+
+ *str = svn_stringbuf__morph_into_string(new_str);
+ return SVN_NO_ERROR;
+}
+
/* Normalize the encoding and line ending style of the values of properties
* in REV_PROPS that "need translation" (according to
@@ -119,7 +205,7 @@ svnsync_normalize_revprops(apr_hash_t *rev_props,
source_prop_encoding, pool, pool));
/* Replace the existing prop value. */
- apr_hash_set(rev_props, propname, APR_HASH_KEY_STRING, propval);
+ svn_hash_sets(rev_props, propname, propval);
if (was_normalized)
(*normalized_count)++; /* Count it. */
@@ -155,6 +241,7 @@ typedef struct edit_baton_t {
svn_boolean_t got_textdeltas;
svn_revnum_t base_revision;
svn_boolean_t quiet;
+ svn_boolean_t mergeinfo_tweaked; /* Did we tweak svn:mergeinfo? */
svn_boolean_t strip_mergeinfo; /* Are we stripping svn:mergeinfo? */
svn_boolean_t migrate_svnmerge; /* Are we converting svnmerge.py data? */
svn_boolean_t mergeinfo_stripped; /* Did we strip svn:mergeinfo? */
@@ -228,9 +315,7 @@ add_directory(const char *path,
edit_baton_t *eb = pb->edit_baton;
node_baton_t *b = apr_palloc(pool, sizeof(*b));
- /* if copyfrom_path starts with '/' join rest of copyfrom_path leaving
- * leading '/' with canonicalized url eb->to_url.
- */
+ /* if copyfrom_path is an fspath create a proper uri */
if (copyfrom_path && copyfrom_path[0] == '/')
copyfrom_path = svn_path_url_add_component2(eb->to_url,
copyfrom_path + 1, pool);
@@ -279,9 +364,10 @@ add_file(const char *path,
edit_baton_t *eb = pb->edit_baton;
node_baton_t *fb = apr_palloc(pool, sizeof(*fb));
- if (copyfrom_path)
- copyfrom_path = apr_psprintf(pool, "%s%s", eb->to_url,
- svn_path_uri_encode(copyfrom_path, pool));
+ /* if copyfrom_path is an fspath create a proper uri */
+ if (copyfrom_path && copyfrom_path[0] == '/')
+ copyfrom_path = svn_path_url_add_component2(eb->to_url,
+ copyfrom_path + 1, pool);
SVN_ERR(eb->wrapped_editor->add_file(path, pb->wrapped_node_baton,
copyfrom_path, copyfrom_rev,
@@ -389,7 +475,7 @@ change_file_prop(void *file_baton,
edit_baton_t *eb = fb->edit_baton;
/* only regular properties can pass over libsvn_ra */
- if (svn_property_kind(NULL, name) != svn_prop_regular_kind)
+ if (svn_property_kind2(name) != svn_prop_regular_kind)
return SVN_NO_ERROR;
/* Maybe drop svn:mergeinfo. */
@@ -417,8 +503,19 @@ change_file_prop(void *file_baton,
if (svn_prop_needs_translation(name))
{
svn_boolean_t was_normalized;
+ svn_boolean_t mergeinfo_tweaked = FALSE;
+
+ /* Normalize encoding to UTF-8, and EOL style to LF. */
SVN_ERR(normalize_string(&value, &was_normalized,
eb->source_prop_encoding, pool, pool));
+ /* Correct malformed mergeinfo. */
+ if (value && strcmp(name, SVN_PROP_MERGEINFO) == 0)
+ {
+ SVN_ERR(remove_r0_mergeinfo(&value, &mergeinfo_tweaked,
+ pool, pool));
+ if (mergeinfo_tweaked)
+ eb->mergeinfo_tweaked = TRUE;
+ }
if (was_normalized)
(*(eb->normalized_node_props_counter))++;
}
@@ -437,7 +534,7 @@ change_dir_prop(void *dir_baton,
edit_baton_t *eb = db->edit_baton;
/* Only regular properties can pass over libsvn_ra */
- if (svn_property_kind(NULL, name) != svn_prop_regular_kind)
+ if (svn_property_kind2(name) != svn_prop_regular_kind)
return SVN_NO_ERROR;
/* Maybe drop svn:mergeinfo. */
@@ -461,7 +558,7 @@ change_dir_prop(void *dir_baton,
are relative URLs, whereas svn:mergeinfo uses relative
paths (not URI-encoded). */
svn_error_t *err;
- svn_stringbuf_t *mergeinfo_buf = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *mergeinfo_buf = svn_stringbuf_create_empty(pool);
svn_mergeinfo_t mergeinfo;
int i;
apr_array_header_t *sources =
@@ -516,8 +613,19 @@ change_dir_prop(void *dir_baton,
if (svn_prop_needs_translation(name))
{
svn_boolean_t was_normalized;
+ svn_boolean_t mergeinfo_tweaked = FALSE;
+
+ /* Normalize encoding to UTF-8, and EOL style to LF. */
SVN_ERR(normalize_string(&value, &was_normalized, eb->source_prop_encoding,
pool, pool));
+ /* Maybe adjust svn:mergeinfo. */
+ if (value && strcmp(name, SVN_PROP_MERGEINFO) == 0)
+ {
+ SVN_ERR(remove_r0_mergeinfo(&value, &mergeinfo_tweaked,
+ pool, pool));
+ if (mergeinfo_tweaked)
+ eb->mergeinfo_tweaked = TRUE;
+ }
if (was_normalized)
(*(eb->normalized_node_props_counter))++;
}
@@ -551,6 +659,10 @@ close_edit(void *edit_baton,
{
if (eb->got_textdeltas)
SVN_ERR(svn_cmdline_printf(pool, "\n"));
+ if (eb->mergeinfo_tweaked)
+ SVN_ERR(svn_cmdline_printf(pool,
+ "NOTE: Adjusted Subversion mergeinfo in "
+ "this revision.\n"));
if (eb->mergeinfo_stripped)
SVN_ERR(svn_cmdline_printf(pool,
"NOTE: Dropped Subversion mergeinfo "
diff --git a/subversion/svnversion/svnversion.1 b/subversion/svnversion/svnversion.1
index 9cdb0b1..20edaa5 100644
--- a/subversion/svnversion/svnversion.1
+++ b/subversion/svnversion/svnversion.1
@@ -23,10 +23,10 @@
.\"
.TH svnversion 1
.SH NAME
-svnversion \- Produce a compact version number for a working copy.
+svnversion \- Produce a compact version identifier for a working copy.
.SH SYNOPSIS
.TP
-\fBsvnversion\fP [\fIwc_path\fP [\fItrail_url\fP]]
+\fBsvnversion\fP [\fIoptions\fP] [\fIwc_path\fP [\fItrail_url\fP]]
.SH OVERVIEW
Subversion is a version control system, which allows you to keep old
versions of files and directories (usually source code), keep a log of
diff --git a/subversion/svnversion/main.c b/subversion/svnversion/svnversion.c
index 7d364c7..94ac588 100644
--- a/subversion/svnversion/main.c
+++ b/subversion/svnversion/svnversion.c
@@ -28,6 +28,8 @@
#include "svn_version.h"
#include "private/svn_opt_private.h"
+#include "private/svn_cmdline_private.h"
+#include "private/svn_subr_private.h"
#include "svn_private_config.h"
@@ -37,8 +39,8 @@
static svn_error_t *
version(svn_boolean_t quiet, apr_pool_t *pool)
{
- return svn_opt_print_help3(NULL, "svnversion", TRUE, quiet, NULL, NULL,
- NULL, NULL, NULL, NULL, pool);
+ return svn_opt_print_help4(NULL, "svnversion", TRUE, quiet, FALSE,
+ NULL, NULL, NULL, NULL, NULL, NULL, pool);
}
static void
@@ -57,19 +59,19 @@ help(const apr_getopt_option_t *options, apr_pool_t *pool)
(svn_cmdline_fprintf
(stdout, pool,
_("usage: svnversion [OPTIONS] [WC_PATH [TRAIL_URL]]\n\n"
- " Produce a compact 'version number' for the working copy path\n"
+ " Produce a compact version identifier for the working copy path\n"
" WC_PATH. TRAIL_URL is the trailing portion of the URL used to\n"
" determine if WC_PATH itself is switched (detection of switches\n"
- " within WC_PATH does not rely on TRAIL_URL). The version number\n"
+ " within WC_PATH does not rely on TRAIL_URL). The version identifier\n"
" is written to standard output. For example:\n"
"\n"
" $ svnversion . /repos/svn/trunk\n"
" 4168\n"
"\n"
- " The version number will be a single number if the working\n"
+ " The version identifier will be a single number if the working\n"
" copy is single revision, unmodified, not switched and with\n"
- " an URL that matches the TRAIL_URL argument. If the working\n"
- " copy is unusual the version number will be more complex:\n"
+ " a URL that matches the TRAIL_URL argument. If the working\n"
+ " copy is unusual the version identifier will be more complex:\n"
"\n"
" 4123:4168 mixed revision working copy\n"
" 4168M modified working copy\n"
@@ -107,9 +109,9 @@ check_lib_versions(void)
{ "svn_wc", svn_wc_version },
{ NULL, NULL }
};
-
SVN_VERSION_DEFINE(my_version);
- return svn_ver_check_list(&my_version, checklist);
+
+ return svn_ver_check_list2(&my_version, checklist, svn_ver_equal);
}
/*
@@ -122,7 +124,6 @@ main(int argc, const char *argv[])
{
const char *wc_path, *trail_url;
const char *local_abspath;
- apr_allocator_t *allocator;
apr_pool_t *pool;
svn_wc_revision_status_t *res;
svn_boolean_t no_newline = FALSE, committed = FALSE;
@@ -150,13 +151,7 @@ main(int argc, const char *argv[])
/* Create our top-level pool. Use a separate mutexless allocator,
* given this application is single threaded.
*/
- if (apr_allocator_create(&allocator))
- return EXIT_FAILURE;
-
- apr_allocator_max_free_set(allocator, SVN_ALLOCATOR_RECOMMENDED_MAX_FREE);
-
- pool = svn_pool_create_ex(NULL, allocator);
- apr_allocator_owner_set(allocator, pool);
+ pool = apr_allocator_owner_get(svn_pool_create_allocator(FALSE));
/* Check library versions */
err = check_lib_versions();
@@ -186,10 +181,8 @@ main(int argc, const char *argv[])
if (APR_STATUS_IS_EOF(status))
break;
if (status != APR_SUCCESS)
- {
- usage(pool);
- return EXIT_FAILURE;
- }
+ usage(pool); /* this will exit() */
+
switch (opt)
{
case 'n':
@@ -208,8 +201,7 @@ main(int argc, const char *argv[])
is_version = TRUE;
break;
default:
- usage(pool);
- return EXIT_FAILURE;
+ usage(pool); /* this will exit() */
}
}
@@ -219,13 +211,10 @@ main(int argc, const char *argv[])
exit(0);
}
if (os->ind > argc || os->ind < argc - 2)
- {
- usage(pool);
- return EXIT_FAILURE;
- }
+ usage(pool); /* this will exit() */
SVN_INT_ERR(svn_utf_cstring_to_utf8(&wc_path,
- (os->ind < argc) ? os->argv[os->ind]
+ (os->ind < argc) ? os->argv[os->ind]
: ".",
pool));
diff --git a/subversion/tests/README b/subversion/tests/README
index 6ea4b81..9a506cd 100644
--- a/subversion/tests/README
+++ b/subversion/tests/README
@@ -20,7 +20,7 @@ sub-tests it can run. It has a standard interface:
1. If run with a numeric argument N, the program runs sub-test N.
-2. If run with the argument `list', it will list the names of all sub-tests.
+2. If run with the argument `--list', it will list the names of all sub-tests.
3. If run with no arguments, the program runs *all* sub-tests.
@@ -130,6 +130,47 @@ This same rule applies to Subversion development: ** If you fix a
bug, write a test for it. **
+When to file a related issue
+----------------------------
+
+By definition, if you write a new test which is set to XFail, then it
+assumed that the test is for a known bug. In these cases it is
+recommended that you associate an issue in the issue tracker with the
+XFailing test. This ensures that the issue tracker is the authoritative
+list of known bugs -- see http://subversion.tigris.org/issue-tracker.html.
+You may need to create a new issue if one doesn't already exist.
+
+For C tests simply add a comment noting any associated issue:
+
+ /* This is for issue #3234. */
+ static svn_error_t *
+ test_copy_crash(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+ {
+ apr_array_header_t *sources;
+ svn_opt_revision_t rev;
+ .
+ .
+
+For Python tests use the @Issue() decorator (a summary comment of the
+issue never hurts either):
+
+ #---------------------------------------------------------------------
+ # Test for issue #3657 'dav update report handler in skelta mode can
+ # cause spurious conflicts'.
+ @Issue(3657)
+ @XFail()
+ def dav_skelta_mode_causes_spurious_conflicts(sbox):
+ "dav skelta mode can cause spurious conflicts"
+ .
+ .
+
+Of course it isn't *always* necessary to create an associated issue.
+If a the fix for an new XFailing test is imminent, you are probably
+better off simply fixing the bug and moving on. Use common sense, but
+when in doubt associate a new issue.
+
+
What not to test
----------------
diff --git a/subversion/tests/cmdline/README b/subversion/tests/cmdline/README
index 500c728..9674cac 100644
--- a/subversion/tests/cmdline/README
+++ b/subversion/tests/cmdline/README
@@ -12,7 +12,7 @@ command-line client. It has no access to code internals; it never
looks inside the .svn/ directory; it only performs actions that a
human user would do.
-These tests require Python 2.4 or later.
+These tests require Python 2.5 or later.
[ For more general information on Subversion's testing system,
please read the README in subversion/tests/. ]
@@ -141,16 +141,17 @@ Note [1]: It would be quite too much to expect those password entries
----------------------------
-[If you want to test with serf instead of neon:
-
- $ ./basic_tests.py --url=http://localhost --http-library=serf
-
- or
-
- $ make check BASE_URL=http://localhost HTTP_LIBRARY=serf
-]
+As a shorthand to all of the above, ./davautocheck.sh will generate
+an Apache configuration listening on a random port on localhost and
+run some tests. Without arguments, or when invoking 'make davautocheck'
+on the top-level Makefile, it will run all tests. With arguments,
+it will run just one suite or just one test:
+ $ ./davautocheck.sh
+ $ ./davautocheck.sh basic
+ $ ./davautocheck.sh basic 15
+It also respects some environment variables.
Running over ra_svn
-------------------
@@ -188,6 +189,9 @@ $ saslpasswd2 -c -u svntest jconstant
As usual, both users should use the password 'rayjandom'.
+There are 'make svnserveautocheck' and ./svnserveautocheck.sh commands,
+analogous to davautocheck.sh documented above.
+
Running tests in a RAM disk
--------------------------
diff --git a/subversion/tests/cmdline/atomic-ra-revprop-change.c b/subversion/tests/cmdline/atomic-ra-revprop-change.c
index 30e0bac..5ef443f 100644
--- a/subversion/tests/cmdline/atomic-ra-revprop-change.c
+++ b/subversion/tests/cmdline/atomic-ra-revprop-change.c
@@ -31,6 +31,7 @@
#include "svn_pools.h"
#include "svn_dirent_uri.h"
#include "svn_ra.h"
+#include "svn_cmdline.h"
#include "private/svn_skel.h"
@@ -41,7 +42,7 @@
#define KEY_NEW_PROPVAL "value"
#define USAGE_MSG \
- "Usage: %s URL REVISION PROPNAME VALUES_SKEL HTTP_LIBRARY WANT_ERROR\n" \
+ "Usage: %s URL REVISION PROPNAME VALUES_SKEL WANT_ERROR CONFIG_DIR\n" \
"\n" \
"VALUES_SKEL is a proplist skel containing pseudo-properties '%s' \n" \
"and '%s'. A pseudo-property missing from the skel is interpreted \n" \
@@ -52,83 +53,28 @@
"the exit code shall be zero.\n"
-
-/* implements svn_auth_simple_prompt_func_t */
-static svn_error_t *
-aborting_simple_prompt_func(svn_auth_cred_simple_t **cred,
- void *baton,
- const char *realm,
- const char *username,
- svn_boolean_t may_save,
- apr_pool_t *pool)
-{
- /* Oops, the jrandom:rayjandom we passed for SVN_AUTH_PARAM_DEFAULT_* failed,
- and the prompt provider has retried.
- */
- SVN_ERR_MALFUNCTION();
-}
-
-/* implements svn_auth_username_prompt_func_t */
-static svn_error_t *
-aborting_username_prompt_func(svn_auth_cred_username_t **cred,
- void *baton,
- const char *realm,
- svn_boolean_t may_save,
- apr_pool_t *pool)
-{
- /* Oops, the jrandom:rayjandom we passed for SVN_AUTH_PARAM_DEFAULT_* failed,
- and the prompt provider has retried.
- */
- SVN_ERR_MALFUNCTION();
-}
-
static svn_error_t *
construct_auth_baton(svn_auth_baton_t **auth_baton_p,
+ const char *config_dir,
apr_pool_t *pool)
{
- apr_array_header_t *providers;
- svn_auth_provider_object_t *simple_provider;
- svn_auth_baton_t *auth_baton;
-
- /* A bit of dancing just to pass jrandom:rayjandom. */
- providers = apr_array_make(pool, 2, sizeof(svn_auth_provider_object_t *)),
- svn_auth_get_simple_prompt_provider(&simple_provider,
- aborting_simple_prompt_func, NULL,
- 0, pool);
- APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = simple_provider;
- svn_auth_get_username_prompt_provider(&simple_provider,
- aborting_username_prompt_func, NULL,
- 0, pool);
- APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = simple_provider;
- svn_auth_open(&auth_baton, providers, pool);
- svn_auth_set_parameter(auth_baton,
- SVN_AUTH_PARAM_DEFAULT_USERNAME, "jrandom");
- svn_auth_set_parameter(auth_baton,
- SVN_AUTH_PARAM_DEFAULT_PASSWORD, "rayjandom");
-
- *auth_baton_p = auth_baton;
+ SVN_ERR(svn_cmdline_create_auth_baton(auth_baton_p,
+ TRUE /* non_interactive */,
+ "jrandom", "rayjandom",
+ config_dir,
+ TRUE /* no_auth_cache */,
+ FALSE /* trust_server_cert */,
+ NULL, NULL, NULL, pool));
return SVN_NO_ERROR;
}
static svn_error_t *
construct_config(apr_hash_t **config_p,
- const char *http_library,
+ const char *config_dir,
apr_pool_t *pool)
{
- apr_hash_t *config;
- svn_config_t *servers;
+ SVN_ERR(svn_config_get_config(config_p, config_dir, pool));
- /* Populate SERVERS. */
- SVN_ERR(svn_config_create(&servers, FALSE, pool));
- svn_config_set(servers, SVN_CONFIG_SECTION_GLOBAL,
- SVN_CONFIG_OPTION_HTTP_LIBRARY, http_library);
-
- /* Populate CONFIG. */
- config = apr_hash_make(pool);
- apr_hash_set(config, SVN_CONFIG_CATEGORY_SERVERS,
- APR_HASH_KEY_STRING, servers);
-
- *config_p = config;
return SVN_NO_ERROR;
}
@@ -138,8 +84,8 @@ change_rev_prop(const char *url,
const char *propname,
const svn_string_t *propval,
const svn_string_t *old_value,
- const char *http_library,
svn_boolean_t want_error,
+ const char *config_dir,
apr_pool_t *pool)
{
svn_ra_callbacks2_t *callbacks;
@@ -149,8 +95,8 @@ change_rev_prop(const char *url,
svn_error_t *err;
SVN_ERR(svn_ra_create_callbacks(&callbacks, pool));
- SVN_ERR(construct_auth_baton(&callbacks->auth_baton, pool));
- SVN_ERR(construct_config(&config, http_library, pool));
+ SVN_ERR(construct_auth_baton(&callbacks->auth_baton, config_dir, pool));
+ SVN_ERR(construct_config(&config, config_dir, pool));
SVN_ERR(svn_ra_open4(&sess, NULL, url, NULL, callbacks, NULL /* baton */,
config, pool));
@@ -216,9 +162,9 @@ main(int argc, const char *argv[])
const char *propname;
svn_string_t *propval;
svn_string_t *old_propval;
- const char *http_library;
char *digits_end = NULL;
svn_boolean_t want_error;
+ const char *config_dir;
if (argc != 7)
{
@@ -240,8 +186,9 @@ main(int argc, const char *argv[])
revision = strtol(argv[2], &digits_end, 10);
propname = argv[3];
SVN_INT_ERR(extract_values_from_skel(&old_propval, &propval, argv[4], pool));
- http_library = argv[5];
- want_error = !strcmp(argv[6], "1");
+ want_error = !strcmp(argv[5], "1");
+ config_dir = svn_dirent_canonicalize(argv[6], pool);
+
if ((! SVN_IS_VALID_REVNUM(revision)) || (! digits_end) || *digits_end)
SVN_INT_ERR(svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
@@ -249,7 +196,7 @@ main(int argc, const char *argv[])
/* Do something. */
err = change_rev_prop(url, revision, propname, propval, old_propval,
- http_library, want_error, pool);
+ want_error, config_dir, pool);
if (err)
{
svn_handle_error2(err, stderr, FALSE, "atomic-ra-revprop-change: ");
diff --git a/subversion/tests/cmdline/authz_tests.py b/subversion/tests/cmdline/authz_tests.py
index 2848b72..20c833d 100755
--- a/subversion/tests/cmdline/authz_tests.py
+++ b/subversion/tests/cmdline/authz_tests.py
@@ -137,7 +137,7 @@ def broken_authz_file(sbox):
exit_code, out, err = svntest.main.run_svn(1,
"delete",
sbox.repo_url + "/A",
- "-m", "a log message");
+ "-m", "a log message")
if out:
raise svntest.verify.SVNUnexpectedStdout(out)
if not err:
@@ -576,7 +576,8 @@ def authz_log_and_tracing_test(sbox):
if sbox.repo_url.startswith('http'):
expected_err2 = expected_err
else:
- expected_err2 = ".*svn: E220001: Item is not readable.*"
+ expected_err2 = ".*svn: E220001: ((Unreadable path encountered; " \
+ "access denied)|(Item is not readable)).*"
# if we do the same thing directly on the unreadable file, we get:
# svn: Item is not readable
@@ -866,6 +867,7 @@ def authz_svnserve_anon_access_read(sbox):
B_url, B_path)
@XFail()
+@Issue(3796)
@Skip(svntest.main.is_ra_type_file)
def authz_switch_to_directory(sbox):
"switched to directory, no read access on parents"
@@ -882,7 +884,8 @@ def authz_switch_to_directory(sbox):
G_path = os.path.join(wc_dir, 'A', 'D', 'G')
# Switch /A/B/E to /A/B/F.
- svntest.main.run_svn(None, 'switch', sbox.repo_url + "/A/B/E", G_path)
+ svntest.main.run_svn(None, 'switch', sbox.repo_url + "/A/B/E", G_path,
+ '--ignore-ancestry')
# Test to reproduce the problem identified by Issue 3242 in which
# Subversion's authz, as of Subversion 1.5, requires access to the
@@ -1111,7 +1114,7 @@ def authz_recursive_ls(sbox):
@Issue(3781)
@Skip(svntest.main.is_ra_type_file)
def case_sensitive_authz(sbox):
- "authz issue #3781, check case sensitiveness"
+ "authz issue #3781, check case sensitivity"
sbox.build()
@@ -1221,12 +1224,13 @@ def authz_tree_conflict(sbox):
expected_output = svntest.wc.State(wc_dir, {})
expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
expected_status.tweak('A/C', status='A ', wc_rev='0')
+ expected_status.tweak('A', '', status='! ', wc_rev='1')
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
None,
expected_status,
- "Failed to mark '.*C' absent:",
+ "Failed to mark '.*C' (server|absent):",
None, None, None, None, 0,
'-r', '1', wc_dir)
@@ -1288,7 +1292,8 @@ def wc_commit_error_handling(sbox):
# Allow the informative error for dav and the ra_svn specific one that is
# returned on editor->edit_close().
expected_err = "(svn: E195023: Changing directory '.*Z' is forbidden)|" + \
- "(svn: E220004: Access denied)"
+ "(svn: E220004: Access denied)|" + \
+ "(svn: E175013: Access to '.*Z' forbidden)"
svntest.actions.run_and_verify_svn(None, None, expected_err,
'ci', wc_dir, '-m', '')
@@ -1300,7 +1305,8 @@ def wc_commit_error_handling(sbox):
# Allow the informative error for dav and the ra_svn specific one that is
# returned on editor->edit_close().
expected_err = "(svn: E195023: Changing file '.*zeta' is forbidden)|" + \
- "(svn: E220004: Access denied)"
+ "(svn: E220004: Access denied)|" + \
+ "(svn: E175013: Access to '.*zeta' forbidden)"
svntest.actions.run_and_verify_svn(None, None, expected_err,
'ci', wc_dir, '-m', '')
sbox.simple_revert('A/zeta')
@@ -1321,7 +1327,8 @@ def wc_commit_error_handling(sbox):
# Allow the informative error for dav and the ra_svn specific one that is
# returned on editor->edit_close().
expected_err = "(svn: E195023: Changing file '.*lambda' is forbidden.*)|" + \
- "(svn: E220004: Access denied)"
+ "(svn: E220004: Access denied)|" + \
+ "(svn: E175013: Access to '.*lambda' forbidden)"
svntest.actions.run_and_verify_svn(None, None, expected_err,
'ci', wc_dir, '-m', '')
@@ -1331,7 +1338,8 @@ def wc_commit_error_handling(sbox):
# Allow the informative error for dav and the ra_svn specific one that is
# returned on editor->edit_close().
expected_err = "(svn: E195023: Changing file '.*lambda' is forbidden.*)|" + \
- "(svn: E220004: Access denied)"
+ "(svn: E220004: Access denied)|" + \
+ "(svn: E175013: Access to '.*lambda' forbidden)"
svntest.actions.run_and_verify_svn(None, None, expected_err,
'ci', wc_dir, '-m', '')
@@ -1341,7 +1349,8 @@ def wc_commit_error_handling(sbox):
# Allow the informative error for dav and the ra_svn specific one that is
# returned on editor->edit_close().
expected_err = "(svn: E195023: Changing directory '.*F' is forbidden.*)|" + \
- "(svn: E220004: Access denied)"
+ "(svn: E220004: Access denied)|" + \
+ "(svn: E175013: Access to '.*F' forbidden)"
svntest.actions.run_and_verify_svn(None, None, expected_err,
'ci', wc_dir, '-m', '')
sbox.simple_revert('A/B/F')
@@ -1350,7 +1359,8 @@ def wc_commit_error_handling(sbox):
# Allow the informative error for dav and the ra_svn specific one that is
# returned on editor->edit_close().
expected_err = "(svn: E195023: Changing file '.*mu' is forbidden.*)|" + \
- "(svn: E220004: Access denied)"
+ "(svn: E220004: Access denied)|" + \
+ "(svn: E175013: Access to '.*mu' forbidden)"
svntest.actions.run_and_verify_svn(None, None, expected_err,
'ci', wc_dir, '-m', '')
@@ -1381,7 +1391,7 @@ def upgrade_absent(sbox):
# Relocate to allow finding the repository
svntest.actions.run_and_verify_svn(None, None, [], 'relocate',
'svn://127.0.0.1/authz_tests-2',
- sbox.repo_url, sbox.wc_dir)
+ sbox.repo_url, sbox.wc_dir)
expected_output = svntest.wc.State(sbox.wc_dir, {
})
@@ -1390,6 +1400,196 @@ def upgrade_absent(sbox):
svntest.actions.run_and_verify_update(sbox.wc_dir, expected_output,
None, None)
+@Issue(4183)
+@XFail()
+@Skip(svntest.main.is_ra_type_file)
+def remove_subdir_with_authz_and_tc(sbox):
+ "remove a subdir with authz file"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ sbox.simple_rm('A/B')
+ sbox.simple_commit()
+
+ svntest.main.write_restrictive_svnserve_conf(sbox.repo_dir)
+ svntest.main.write_authz_file(sbox, { "/" : "*=rw",
+ "/A/B/E" : "*="})
+
+ # Now update back to r1. This will reintroduce A/B except A/B/E.
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.remove('A/B/E', 'A/B/E/alpha', 'A/B/E/beta')
+
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/B' : Item(status='A '),
+ 'A/B/F' : Item(status='A '),
+ 'A/B/lambda' : Item(status='A '),
+ })
+
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ None,
+ expected_status,
+ None,
+ None, None,
+ None, None, False,
+ wc_dir, '-r', '1')
+
+ # Perform some edit operation to introduce a tree conflict
+ svntest.main.file_write(sbox.ospath('A/B/lambda'), 'qq')
+
+ # And now update to r2. This tries to delete A/B and causes a tree conflict
+ # ### But is also causes an error in creating the copied state
+ # ### svn: E220001: Cannot copy '<snip>\A\B\E' excluded by server
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/B' : Item(status=' ', treeconflict='C'),
+ })
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ None,
+ None,
+ None,
+ None, None,
+ None, None, False,
+ wc_dir)
+
+@SkipUnless(svntest.main.is_ra_type_svn)
+def authz_svnserve_groups(sbox):
+ "authz with configured global groups"
+
+ sbox.build(create_wc = False)
+
+ svntest.main.write_restrictive_svnserve_conf_with_groups(sbox.repo_dir)
+
+ svntest.main.write_authz_file(sbox, { "/A/B" : "@senate = r",
+ "/A/D" : "@senate = rw",
+ "/A/B/E" : "@senate = " })
+
+ svntest.main.write_groups_file(sbox, { "senate" : "jrandom" })
+
+ root_url = sbox.repo_url
+ A_url = root_url + '/A'
+ B_url = A_url + '/B'
+ E_url = B_url + '/E'
+ F_url = B_url + '/F'
+ D_url = A_url + '/D'
+ G_url = D_url + '/G'
+ lambda_url = B_url + '/lambda'
+ pi_url = G_url + '/pi'
+ alpha_url = E_url + '/alpha'
+
+ expected_err = ".*svn: E170001: Authorization failed.*"
+
+ # read a remote file
+ svntest.actions.run_and_verify_svn(None, ["This is the file 'lambda'.\n"],
+ [], 'cat',
+ lambda_url)
+
+ # read a remote file
+ svntest.actions.run_and_verify_svn(None, ["This is the file 'pi'.\n"],
+ [], 'cat',
+ pi_url)
+
+ # read a remote file, unreadable: should fail
+ svntest.actions.run_and_verify_svn(None,
+ None, expected_err,
+ 'cat',
+ alpha_url)
+
+ # copy a remote file, source is unreadable: should fail
+ svntest.actions.run_and_verify_svn(None,
+ None, expected_err,
+ 'cp',
+ '-m', 'logmsg',
+ alpha_url, B_url)
+
+ # copy a remote folder
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'cp',
+ '-m', 'logmsg',
+ F_url, D_url)
+
+ # copy a remote folder, source is unreadable: should fail
+ svntest.actions.run_and_verify_svn(None,
+ None, expected_err,
+ 'cp',
+ '-m', 'logmsg',
+ E_url, D_url)
+
+@Skip(svntest.main.is_ra_type_file)
+@Issue(4332)
+def authz_del_from_subdir(sbox):
+ "delete file without rights on the root"
+
+ sbox.build(create_wc = False)
+
+ write_authz_file(sbox, {"/": "* = ", "/A": "jrandom = rw"})
+
+ write_restrictive_svnserve_conf(sbox.repo_dir)
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'rm', sbox.repo_url + '/A/mu',
+ '-m', '')
+
+
+@XFail()
+@SkipUnless(svntest.main.is_ra_type_dav) # dontdothat is dav only
+@SkipUnless(svntest.main.is_os_windows) # until the buildbots are configured
+def log_diff_dontdothat(sbox):
+ "log --diff on dontdothat"
+ sbox.build(create_wc = False)
+
+ ddt_url = sbox.repo_url.replace('/svn-test-work/', '/ddt-test-work/')
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'log', sbox.repo_url,
+ '-c', 1, '--diff')
+
+ # We should expect a PASS or a proper error message instead of
+ # svn: E175009: XML parsing failed: (403 Forbidden)
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'log', ddt_url,
+ '-c', 1, '--diff')
+
+@Issue(4422)
+@Skip(svntest.main.is_ra_type_file)
+def authz_file_external_to_authz(sbox):
+ "replace file external with authz node"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ repo_url = sbox.repo_url
+
+ write_authz_file(sbox, {"/": "* = rw"})
+ write_restrictive_svnserve_conf(sbox.repo_dir)
+
+ sbox.simple_propset('svn:externals', 'Z ' + repo_url + '/iota', '')
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('', status=' M')
+ expected_status.add({
+ 'Z' : Item(status=' ', wc_rev='1', switched='X'),
+ })
+ svntest.actions.run_and_verify_update(wc_dir,
+ None, None, expected_status)
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'cp', repo_url + '/A',
+ repo_url + '/Z',
+ '-m', 'Add Z')
+
+ write_authz_file(sbox, {"/": "* = rw", "/Z": "* = "})
+
+ expected_status.tweak(wc_rev=2)
+
+ # ### This used to assert with
+ # ### svn: E235000: In file 'update_editor.c' line 3043: assertion failed
+ # ### (status != svn_wc__db_status_normal)
+
+ svntest.actions.run_and_verify_update(wc_dir,
+ None, None, expected_status)
+
+
########################################################################
# Run the tests
@@ -1419,6 +1619,11 @@ test_list = [ None,
wc_delete,
wc_commit_error_handling,
upgrade_absent,
+ remove_subdir_with_authz_and_tc,
+ authz_svnserve_groups,
+ authz_del_from_subdir,
+ log_diff_dontdothat,
+ authz_file_external_to_authz,
]
serial_only = True
diff --git a/subversion/tests/cmdline/autoprop_tests.py b/subversion/tests/cmdline/autoprop_tests.py
index 6c27153..f27504f 100755
--- a/subversion/tests/cmdline/autoprop_tests.py
+++ b/subversion/tests/cmdline/autoprop_tests.py
@@ -25,7 +25,9 @@
######################################################################
# General modules
-import os
+import os, logging
+
+logger = logging.getLogger()
# Our testing module
import svntest
@@ -40,6 +42,7 @@ Issue = svntest.testcase.Issue_deco
Wimp = svntest.testcase.Wimp_deco
Item = svntest.wc.StateItem
+from svntest.main import SVN_PROP_INHERITABLE_AUTOPROPS
# Helper function
def check_proplist(path, exp_out):
@@ -47,8 +50,8 @@ def check_proplist(path, exp_out):
props = svntest.tree.get_props([path]).get(path, {})
if props != exp_out:
- print("Expected properties: %s" % exp_out)
- print("Actual properties: %s" % props)
+ logger.warn("Expected properties: %s", exp_out)
+ logger.warn("Actual properties: %s", props)
raise svntest.Failure
@@ -99,7 +102,9 @@ def autoprops_test(sbox, cmd, cfgenable, clienable, subdir):
# some directories
wc_dir = sbox.wc_dir
- tmp_dir = os.path.abspath(svntest.main.temp_dir)
+ tmp_dir = os.path.join(os.path.abspath(svntest.main.temp_dir), sbox.name)
+ if not os.path.isdir(tmp_dir):
+ os.makedirs(tmp_dir)
config_dir = os.path.join(tmp_dir, 'autoprops_config_' + sbox.name)
repos_url = sbox.repo_url
@@ -322,6 +327,404 @@ def fail_add_mixed_eol_style(sbox):
{filename : Item(status='? ')})
run_and_verify_unquiet_status(filepath, expected_status)
+#----------------------------------------------------------------------
+
+def create_inherited_autoprops_config(config_dir, enable_flag):
+ "create config stuffs for inherited autoprops tests"
+
+ # contents of the file 'config'
+ config_contents = '''\
+[auth]
+password-stores =
+
+[miscellany]
+enable-auto-props = %s
+
+[auto-props]
+*.c = svn:keywords=Author Date Id Rev URL;svn:eol-style=native;
+''' % (enable_flag and 'yes' or 'no')
+
+ svntest.main.create_config_dir(config_dir, config_contents)
+
+#----------------------------------------------------------------------
+def check_inheritable_autoprops(sbox, auto_props_cfg_enabled,
+ inheritable_auto_props_enabled):
+ """Check that the autoprops added or imported by inheritable_autoprops_test
+ are as expected based on whether auto props are active or
+ not, as indicated by AUTO_PROPS_CFG_ENABLED and
+ INHERITABLE_AUTO_PROPS_ENABLED."""
+
+ foo_path = sbox.ospath('foo.c')
+ bar_path = sbox.ospath('B/bar.c')
+ baf_path = sbox.ospath('C/baf.c')
+ qux_path = sbox.ospath('D/qux.c')
+ rip_path = sbox.ospath('D/rip.bat')
+ snk_path = sbox.ospath('D/H/snk.py')
+ sir_path = sbox.ospath('D/H/sir.c')
+
+ if auto_props_cfg_enabled:
+ check_proplist(foo_path, {'svn:eol-style':'CRLF',
+ 'svn:keywords':'Author Date Id Rev URL'})
+ check_proplist(bar_path, {'svn:eol-style':'CR',
+ 'svn:keywords':'Date'})
+ check_proplist(baf_path, {'svn:eol-style':'LF',
+ 'svn:keywords':'Rev'})
+ check_proplist(qux_path, {'svn:eol-style':'CRLF',
+ 'svn:keywords':'Author Date Id Rev URL'})
+ check_proplist(rip_path, {'svn:executable':'*'})
+ check_proplist(snk_path, {'svn:mime-type':'text/x-python'})
+ check_proplist(sir_path, {'svn:eol-style':'CRLF',
+ 'svn:keywords':'Author Date Id Rev URL'})
+ elif inheritable_auto_props_enabled: # Config auto-props disabled,
+ # but not svn:auto-props.
+ check_proplist(foo_path, {'svn:eol-style':'CRLF'})
+ check_proplist(bar_path, {'svn:eol-style':'CR',
+ 'svn:keywords':'Date'})
+ check_proplist(baf_path, {'svn:eol-style':'LF',
+ 'svn:keywords':'Rev'})
+ check_proplist(qux_path, {'svn:eol-style':'CRLF'})
+ check_proplist(rip_path, {'svn:executable':'*'})
+ check_proplist(snk_path, {'svn:mime-type':'text/x-python'})
+ check_proplist(sir_path, {'svn:eol-style':'CRLF'})
+ else: # No autoprops of any kind.
+ check_proplist(foo_path, {})
+ check_proplist(bar_path, {})
+ check_proplist(baf_path, {})
+ check_proplist(qux_path, {})
+ check_proplist(rip_path, {})
+ check_proplist(snk_path, {})
+ check_proplist(sir_path, {})
+
+#----------------------------------------------------------------------
+def inheritable_autoprops_test(sbox, cmd, cfgenable, clienable, subdir,
+ do_import_or_add=True):
+ """configurable autoprops and svn:auto-props test.
+
+ CMD is the subcommand to test: 'import' or 'add'
+ if CFGENABLE is true, enable autoprops in the config file, else disable
+ if CLIENABLE == 1: --auto-props is added to the command line
+ 0: nothing is added
+ -1: --no-auto-props is added to command line
+ if string SUBDIR is not empty files are created in that subdir and the
+ directory is added/imported
+ if DO_IMPORT_OR_ADD is false, setup the test, but don't perform
+ the actual import or add.
+
+ Return the directory where the config dir (if any) is located."""
+
+ # Bootstrap
+ sbox.build()
+
+ # some directories
+ wc_dir = sbox.wc_dir
+ tmp_dir = os.path.abspath(svntest.main.temp_dir)
+ config_dir = os.path.join(tmp_dir, 'autoprops_config_' + sbox.name)
+ repos_url = sbox.repo_url
+
+ # initialize parameters
+ if cmd == 'import':
+ parameters = ['import', '-m', 'importing']
+ files_dir = tmp_dir
+ else:
+ parameters = ['add']
+ files_dir = wc_dir
+
+ parameters = parameters + ['--config-dir', config_dir]
+
+ create_inherited_autoprops_config(config_dir, cfgenable)
+
+ # add comandline flags
+ inheritable_auto_props_enabled = 1
+ if clienable == 1:
+ parameters = parameters + ['--auto-props']
+ auto_props_cfg_enabled = 1
+ elif clienable == -1:
+ parameters = parameters + ['--no-auto-props']
+ auto_props_cfg_enabled = 0
+ inheritable_auto_props_enabled = 0
+ else:
+ auto_props_cfg_enabled = cfgenable
+
+ # setup subdirectory if needed
+ if len(subdir) > 0:
+ files_dir = os.path.join(files_dir, subdir)
+ files_wc_dir = os.path.join(wc_dir, subdir)
+ os.makedirs(files_dir)
+ else:
+ files_wc_dir = wc_dir
+
+ # Set differing svn:auto-props properties on various
+ # directories.
+ sbox.simple_propset(SVN_PROP_INHERITABLE_AUTOPROPS,
+ '*.c = svn:eol-style=CRLF\n'
+ '*.bat = svn:executable',
+ '.')
+ sbox.simple_propset(SVN_PROP_INHERITABLE_AUTOPROPS,
+ '*.c = svn:eol-style=CR;svn:keywords=Date',
+ 'A/B')
+ sbox.simple_propset(SVN_PROP_INHERITABLE_AUTOPROPS,
+ '*.c = svn:eol-style=LF;svn:keywords=Rev',
+ 'A/C')
+ sbox.simple_propset(SVN_PROP_INHERITABLE_AUTOPROPS,
+ '*.py = svn:mime-type=text/x-python',
+ 'A/D')
+ svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m',
+ 'Add some ' + SVN_PROP_INHERITABLE_AUTOPROPS +
+ ' properties', wc_dir)
+
+ # Switch the root of the WC to ^/A.
+ svntest.main.run_svn(None, 'switch', '--ignore-ancestry',
+ sbox.repo_url + '/A', wc_dir)
+
+ # Array of file names to add or import, their WC locations (relative to the
+ # WC root) if being added, and their repository locations if being imported.
+ filenames = [['foo.c', 'foo.c', 'A/foo.c'],
+ ['bar.c', os.path.join('B', 'bar.c'), 'A/B/bar.c'],
+ ['baf.c', os.path.join('C', 'baf.c'), 'A/C/baf.c'],
+ ['qux.c', os.path.join('D', 'qux.c'), 'A/D/qux.c'],
+ ['rip.bat', os.path.join('D', 'rip.bat'), 'A/D/rip.bat'],
+ ['snk.py', os.path.join('D', 'H', 'snk.py'), 'A/D/H/snk.py'],
+ ['ric.c', os.path.join('D', 'H', 'sir.c'), 'A/D/H/sir.c']]
+
+ for filename in filenames:
+ if cmd == 'import':
+ svntest.main.file_write(os.path.join(files_dir, filename[0]),
+ 'foo\nbar\nbaz\n')
+ else:
+ svntest.main.file_write(os.path.join(files_dir, filename[1]),
+ 'foo\nbar\nbaz\n')
+
+ if do_import_or_add:
+ if len(subdir) == 0:
+ # add/import the files
+ for filename in filenames:
+ if cmd == 'import':
+ path = os.path.join(files_dir, filename[0])
+ tmp_params = parameters + [path, repos_url + '/' + filename[2]]
+ else:
+ path = os.path.join(files_dir, filename[1])
+ tmp_params = parameters + [path]
+ svntest.main.run_svn(None, *tmp_params)
+ else:
+ # add/import subdirectory
+ if cmd == 'import':
+ parameters = parameters + [files_dir, repos_url]
+ else:
+ parameters = parameters + [files_wc_dir]
+ svntest.main.run_svn(None, *parameters)
+
+ # do an svn co if needed
+ if cmd == 'import':
+ svntest.main.run_svn(None, 'checkout', repos_url + '/A', files_wc_dir,
+ '--config-dir', config_dir)
+
+ check_inheritable_autoprops(sbox, auto_props_cfg_enabled,
+ inheritable_auto_props_enabled)
+
+ return config_dir
+
+#----------------------------------------------------------------------
+
+def svn_prop_inheritable_autoprops_add_no_none(sbox):
+ "inherit add: config=no, commandline=none"
+ inheritable_autoprops_test(sbox, 'add', False, 0, '')
+
+#----------------------------------------------------------------------
+
+def svn_prop_inheritable_autoprops_add_yes_none(sbox):
+ "inherit add: config=yes, commandline=none"
+ inheritable_autoprops_test(sbox, 'add', True, 0, '')
+
+#----------------------------------------------------------------------
+
+def svn_prop_inheritable_autoprops_add_no_yes(sbox):
+ "inherit add: config=no, commandline=yes"
+
+ inheritable_autoprops_test(sbox, 'add', 0, 1, '')
+
+#----------------------------------------------------------------------
+
+def svn_prop_inheritable_autoprops_add_yes_yes(sbox):
+ "inherit add: config=yes, commandline=yes"
+
+ inheritable_autoprops_test(sbox, 'add', 1, 1, '')
+
+#----------------------------------------------------------------------
+
+def svn_prop_inheritable_autoprops_add_no_no(sbox):
+ "inherit add: config=no, commandline=no"
+
+ inheritable_autoprops_test(sbox, 'add', 0, -1, '')
+
+#----------------------------------------------------------------------
+
+def svn_prop_inheritable_autoprops_add_yes_no(sbox):
+ "inherit add: config=yes, commandline=no"
+
+ inheritable_autoprops_test(sbox, 'add', 1, -1, '')
+
+#----------------------------------------------------------------------
+
+def svn_prop_inheritable_autoprops_import_no_none(sbox):
+ "inherit import: config=no, commandline=none"
+
+ inheritable_autoprops_test(sbox, 'import', False, 0, '')
+
+#----------------------------------------------------------------------
+
+def svn_prop_inheritable_autoprops_imp_yes_none(sbox):
+ "inherit import: config=yes, commandline=none"
+
+ inheritable_autoprops_test(sbox, 'import', 1, 0, '')
+
+#----------------------------------------------------------------------
+
+def svn_prop_inheritable_autoprops_imp_no_yes(sbox):
+ "inherit import: config=no, commandline=yes"
+
+ inheritable_autoprops_test(sbox, 'import', 0, 1, '')
+
+#----------------------------------------------------------------------
+
+def svn_prop_inheritable_autoprops_imp_yes_yes(sbox):
+ "inherit import: config=yes, commandline=yes"
+
+ inheritable_autoprops_test(sbox, 'import', 1, 1, '')
+
+#----------------------------------------------------------------------
+
+def svn_prop_inheritable_autoprops_imp_no_no(sbox):
+ "inherit import: config=no, commandline=no"
+
+ inheritable_autoprops_test(sbox, 'import', 0, -1, '')
+
+#----------------------------------------------------------------------
+
+def svn_prop_inheritable_autoprops_imp_yes_no(sbox):
+ "inherit import: config=yes, commandline=no"
+
+ inheritable_autoprops_test(sbox, 'import', 1, -1, '')
+
+#----------------------------------------------------------------------
+# Test svn:auto-props when 'svn add' targets an already versioned
+# target.
+def svn_prop_inheritable_autoprops_add_versioned_target(sbox):
+ "svn:auto-props and versioned target"
+
+ config_dir = inheritable_autoprops_test(sbox, 'add', 1, 0, '', False)
+
+ # Perform the add with the --force flag, and check the status.
+ ### Note: You have to be inside the working copy or else Subversion
+ ### will think you're trying to add the working copy to its parent
+ ### directory, and will (possibly, if the parent directory isn't
+ ### versioned) fail -- see also schedule_tests.py 11 "'svn add'
+ ### should traverse already-versioned dirs"
+ saved_wd = os.getcwd()
+ os.chdir(sbox.wc_dir)
+ svntest.main.run_svn(None, 'add', '.', '--force', '--config-dir',
+ config_dir)
+ os.chdir(saved_wd)
+ check_inheritable_autoprops(sbox, True, True)
+
+ # Revert additions and try with --no-auto-props
+ svntest.main.run_svn(None, 'revert', '-R', sbox.wc_dir)
+
+ # When the add above sets svn:executable on D/rip.bat, subversion
+ # also sets the execute bits on the file (on systems that support
+ # that). The revert above does not return the file to its original
+ # permissions, so we do so manually now. Otherwise the follwing
+ # addition will notice the executable bits and set svn:executable
+ # again, which is not what we are here to test.
+ if os.name == 'posix':
+ os.chmod(os.path.join(sbox.wc_dir, 'D', 'rip.bat'), 0664)
+
+ os.chdir(sbox.wc_dir)
+ svntest.main.run_svn(None, 'add', '.', '--force', '--no-auto-props',
+ '--config-dir', config_dir)
+ os.chdir(saved_wd)
+ check_inheritable_autoprops(sbox, False, False)
+
+ # Create a new config with auto-props disabled.
+ #
+ # Then revert the previous additions and add again, only the
+ # svn:auto-props should be applied.
+ tmp_dir = os.path.abspath(svntest.main.temp_dir)
+ config_dir = os.path.join(tmp_dir,
+ 'autoprops_config_disabled_' + sbox.name)
+ create_inherited_autoprops_config(config_dir, False)
+
+ svntest.main.run_svn(None, 'revert', '-R', sbox.wc_dir)
+ os.chdir(sbox.wc_dir)
+ svntest.main.run_svn(None, 'add', '.', '--force',
+ '--config-dir', config_dir)
+ os.chdir(saved_wd)
+ check_inheritable_autoprops(sbox, False, True)
+
+ # Revert a final time and add again with the --auto-props switch.
+ # Both the config defined and svn:auto-props should be applied.
+ svntest.main.run_svn(None, 'revert', '-R', sbox.wc_dir)
+ os.chdir(sbox.wc_dir)
+ svntest.main.run_svn(None, 'add', '.', '--force', '--auto-props',
+ '--config-dir', config_dir)
+ os.chdir(saved_wd)
+ check_inheritable_autoprops(sbox, True, True)
+
+#----------------------------------------------------------------------
+# Can't set svn:auto-props on files.
+def svn_prop_inheritable_autoprops_propset_file_target(sbox):
+ "svn:auto-props can't be set on files"
+
+ sbox.build()
+ svntest.actions.run_and_verify_svn(
+ None, None,
+ ".*Cannot set '" + SVN_PROP_INHERITABLE_AUTOPROPS + "' on a file.*",
+ 'ps', SVN_PROP_INHERITABLE_AUTOPROPS, '*.c=svn:eol-style=native',
+ sbox.ospath('iota'))
+
+#----------------------------------------------------------------------
+# Multiple unversioned subtrees under a versioned target shouldn't segfault.
+def svn_prop_inheritable_autoprops_unversioned_subtrees_versioned_target(sbox):
+ "versioned target and unversioned subtrees"
+
+ sbox.build()
+ Z_path = sbox.ospath('A/D/Z')
+ Y_path = sbox.ospath('A/B/Y')
+ foo_path = sbox.ospath('A/D/Z/foo.c')
+ bar_path = sbox.ospath('A/B/Y/bar.c')
+
+ # Set svn:auto-props properties on two directories.
+ svntest.main.run_svn(None, 'ps', SVN_PROP_INHERITABLE_AUTOPROPS,
+ '*.c=svn:eol-style=CR', sbox.ospath('A/B'))
+ svntest.main.run_svn(None, 'ps', SVN_PROP_INHERITABLE_AUTOPROPS,
+ '*.c=svn:eol-style=native', sbox.ospath('A/D'))
+ svntest.main.run_svn(None, 'ci', '-m', 'Add inheritable autoprops',
+ sbox.wc_dir)
+
+ # Create two subtrees, each with one new file.
+ os.mkdir(Z_path)
+ os.mkdir(Y_path)
+ svntest.main.file_write(foo_path,
+ '/* Someday there will be code here. */\n')
+ svntest.main.file_write(bar_path,
+ '/* Someday there will be code here. */\n')
+
+ # Perform the add with the --force flag, targeting the root of the WC.
+ ### Note: You have to be inside the working copy or else Subversion
+ ### will think you're trying to add the working copy to its parent
+ ### directory, and will (possibly, if the parent directory isn't
+ ### versioned) fail -- see also schedule_tests.py 11 "'svn add'
+ ### should traverse already-versioned dirs"
+ saved_wd = os.getcwd()
+ os.chdir(sbox.wc_dir)
+ # This was causing a segfault at one point.
+ svntest.main.run_svn(None, 'add', '.', '--force')
+ os.chdir(saved_wd)
+
+ # Check the resulting autoprops.
+ svntest.actions.run_and_verify_svn(None, 'native\n', [],
+ 'pg', 'svn:eol-style', foo_path)
+ svntest.actions.run_and_verify_svn(None, 'CR\n', [],
+ 'pg', 'svn:eol-style', bar_path)
########################################################################
# Run the tests
@@ -344,6 +747,21 @@ test_list = [ None,
autoprops_add_dir,
autoprops_imp_dir,
fail_add_mixed_eol_style,
+ svn_prop_inheritable_autoprops_add_no_none,
+ svn_prop_inheritable_autoprops_add_yes_none,
+ svn_prop_inheritable_autoprops_add_no_yes,
+ svn_prop_inheritable_autoprops_add_yes_yes,
+ svn_prop_inheritable_autoprops_add_no_no,
+ svn_prop_inheritable_autoprops_add_yes_no,
+ svn_prop_inheritable_autoprops_import_no_none,
+ svn_prop_inheritable_autoprops_imp_yes_none,
+ svn_prop_inheritable_autoprops_imp_no_yes,
+ svn_prop_inheritable_autoprops_imp_yes_yes,
+ svn_prop_inheritable_autoprops_imp_no_no,
+ svn_prop_inheritable_autoprops_imp_yes_no,
+ svn_prop_inheritable_autoprops_add_versioned_target,
+ svn_prop_inheritable_autoprops_propset_file_target,
+ svn_prop_inheritable_autoprops_unversioned_subtrees_versioned_target,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/basic_tests.py b/subversion/tests/cmdline/basic_tests.py
index 45cac56..c51d80a 100755
--- a/subversion/tests/cmdline/basic_tests.py
+++ b/subversion/tests/cmdline/basic_tests.py
@@ -25,7 +25,9 @@
######################################################################
# General modules
-import shutil, stat, re, os
+import shutil, stat, re, os, logging
+
+logger = logging.getLogger()
# Our testing module
import svntest
@@ -65,11 +67,11 @@ def basic_checkout(sbox):
wc_dir)
# Make some changes to the working copy
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
svntest.main.file_append(mu_path, 'appended mu text')
- lambda_path = os.path.join(wc_dir, 'A', 'B', 'lambda')
+ lambda_path = sbox.ospath('A/B/lambda')
os.remove(lambda_path)
- G_path = os.path.join(wc_dir, 'A', 'D', 'G')
+ G_path = sbox.ospath('A/D/G')
svntest.actions.run_and_verify_svn(None, None, [], 'rm', G_path)
@@ -108,7 +110,7 @@ def basic_status(sbox):
svntest.actions.run_and_verify_status(wc_dir, output)
- os.chdir(os.path.join(wc_dir, 'A'))
+ os.chdir(sbox.ospath('A'))
output = svntest.actions.get_virginal_state("..", 1)
svntest.actions.run_and_verify_status("..", output)
@@ -121,8 +123,8 @@ def basic_commit(sbox):
wc_dir = sbox.wc_dir
# Make a couple of local mods to files
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
+ mu_path = sbox.ospath('A/mu')
+ rho_path = sbox.ospath('A/D/G/rho')
svntest.main.file_append(mu_path, 'appended mu text')
svntest.main.file_append(rho_path, 'new appended text for rho')
@@ -157,8 +159,8 @@ def basic_update(sbox):
svntest.actions.duplicate_dir(wc_dir, wc_backup)
# Make a couple of local mods to files
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
+ mu_path = sbox.ospath('A/mu')
+ rho_path = sbox.ospath('A/D/G/rho')
svntest.main.file_append(mu_path, 'appended mu text')
svntest.main.file_append(rho_path, 'new appended text for rho')
@@ -203,12 +205,12 @@ def basic_update(sbox):
# Unversioned paths, those that are not immediate children of a versioned
# path, are skipped and do not raise an error
- xx_path = os.path.join(wc_dir, 'xx', 'xx')
+ xx_path = sbox.ospath('xx/xx')
exit_code, out, err = svntest.actions.run_and_verify_svn(
"update xx/xx",
["Skipped '"+xx_path+"'\n",
- "Summary of conflicts:\n",
- " Skipped paths: 1\n"], [], 'update', xx_path)
+ ] + svntest.main.summary_of_conflicts(skipped_paths=1),
+ [], 'update', xx_path)
exit_code, out, err = svntest.actions.run_and_verify_svn(
"update xx/xx", [], [],
'update', '--quiet', xx_path)
@@ -324,7 +326,7 @@ def basic_mkdir_wc_with_parents(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- Y_Z_path = os.path.join(wc_dir, 'Y', 'Z')
+ Y_Z_path = sbox.ospath('Y/Z')
svntest.actions.run_and_verify_svn("erroneous mkdir dir/subdir", [],
".*Try 'svn mkdir --parents' instead.*",
@@ -344,8 +346,8 @@ def basic_mkdir_wc_with_parents(sbox):
#----------------------------------------------------------------------
-def basic_corruption(sbox):
- "basic corruption detection"
+def basic_commit_corruption(sbox):
+ "basic corruption detection on commit"
## I always wanted a test named "basic_corruption". :-)
## Here's how it works:
@@ -356,21 +358,14 @@ def basic_corruption(sbox):
## 3. Intentionally corrupt `first/A/.svn/text-base/mu.svn-base'.
## 4. Try to commit, expect a failure.
## 5. Repair the text-base, commit again, expect success.
- ## 6. Intentionally corrupt `second/A/.svn/text-base/mu.svn-base'.
- ## 7. Try to update `second', expect failure.
- ## 8. Repair the text-base, update again, expect success.
##
## Here we go...
sbox.build()
wc_dir = sbox.wc_dir
- # Make the "other" working copy
- other_wc = sbox.add_wc_path('other')
- svntest.actions.duplicate_dir(wc_dir, other_wc)
-
# Make a local mod to mu
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
svntest.main.file_append(mu_path, 'appended mu text')
# Created expected output tree for 'svn ci'
@@ -399,7 +394,7 @@ def basic_corruption(sbox):
# This commit should fail due to text base corruption.
svntest.actions.run_and_verify_commit(wc_dir, expected_output,
- expected_status,
+ None, # expected_status,
"svn: E200014: Checksum",
wc_dir)
@@ -415,6 +410,50 @@ def basic_corruption(sbox):
svntest.actions.run_and_verify_commit(wc_dir, expected_output,
expected_status, None, wc_dir)
+#----------------------------------------------------------------------
+def basic_update_corruption(sbox):
+ "basic corruption detection on update"
+
+ ## I always wanted a test named "basic_corruption". :-)
+ ## Here's how it works:
+ ##
+ ## 1. Make a working copy at rev 1, duplicate it. Now we have
+ ## two working copies at rev 1. Call them first and second.
+ ## 2. Make a local mod to `first/A/mu'.
+ ## 3. Repair the text-base, commit again, expect success.
+ ## 4. Intentionally corrupt `second/A/.svn/text-base/mu.svn-base'.
+ ## 5. Try to update `second', expect failure.
+ ## 6. Repair the text-base, update again, expect success.
+ ##
+ ## Here we go...
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # Make the "other" working copy
+ other_wc = sbox.add_wc_path('other')
+
+ svntest.actions.run_and_verify_svn("Checkout to wc2", None, [],
+ 'co', sbox.repo_url, other_wc)
+
+ # Make a local mod to mu
+ mu_path = sbox.ospath('A/mu')
+ svntest.main.file_append(mu_path, 'appended mu text')
+
+ # Created expected output tree for 'svn ci'
+ expected_output = wc.State(wc_dir, {
+ 'A/mu' : Item(verb='Sending'),
+ })
+
+ # Create expected status tree; all local revisions should be at 1,
+ # but mu should be at revision 2.
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('A/mu', wc_rev=2)
+
+ # This commit should succeed.
+ svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+ expected_status, None, wc_dir)
+
# Create expected output tree for an update of the other_wc.
expected_output = wc.State(other_wc, {
'A/mu' : Item(status='U '),
@@ -422,10 +461,6 @@ def basic_corruption(sbox):
# Create expected disk tree for the update.
expected_disk = svntest.main.greek_state.copy()
- expected_disk.tweak('A/mu',
- contents=expected_disk.desc['A/mu'].contents
- + 'appended mu text')
-
# Create expected status tree for the update.
expected_status = svntest.actions.get_virginal_state(other_wc, 2)
@@ -444,11 +479,15 @@ def basic_corruption(sbox):
os.chmod(tb_dir_path, tb_dir_saved_mode)
os.chmod(mu_tb_path, mu_tb_saved_mode)
- # Do the update and check the results in three ways.
+ # Do the update and check the results in four ways.
+ fail_output = wc.State(other_wc, {
+ })
+ fail_status = svntest.actions.get_virginal_state(other_wc, 1)
+ fail_status.tweak('A', '', status='! ', wc_rev=2)
svntest.actions.run_and_verify_update(other_wc,
- expected_output,
+ fail_output,
expected_disk,
- expected_status,
+ fail_status,
"svn: E155017: Checksum", other_wc)
# Restore the uncorrupted text base.
@@ -459,8 +498,15 @@ def basic_corruption(sbox):
os.chmod(tb_dir_path, tb_dir_saved_mode)
os.chmod(mu_tb_path, mu_tb_saved_mode)
+ # Create expected status tree for the update.
+ expected_status = svntest.actions.get_virginal_state(other_wc, 2)
+
# This update should succeed. (Actually, I'm kind of astonished
# that this works without even an intervening "svn cleanup".)
+ expected_disk.tweak('A/mu',
+ contents=expected_disk.desc['A/mu'].contents
+ + 'appended mu text')
+
svntest.actions.run_and_verify_update(other_wc,
expected_output,
expected_disk,
@@ -474,8 +520,8 @@ def basic_merging_update(sbox):
wc_dir = sbox.wc_dir
# First change the greek tree to make two files 10 lines long
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
+ mu_path = sbox.ospath('A/mu')
+ rho_path = sbox.ospath('A/D/G/rho')
mu_text = ""
rho_text = ""
for x in range(2,11):
@@ -580,8 +626,8 @@ def basic_conflict(sbox):
svntest.actions.duplicate_dir(wc_dir, wc_backup)
# Make a couple of local mods to files which will be committed
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
+ mu_path = sbox.ospath('A/mu')
+ rho_path = sbox.ospath('A/D/G/rho')
svntest.main.file_append(mu_path, 'Original appended text for mu\n')
svntest.main.file_append(rho_path, 'Original appended text for rho\n')
@@ -659,8 +705,8 @@ def basic_conflict(sbox):
# probably reveal the cause for the failure, if they were
# uncommented:
#
- # print("Not all extra reject files have been accounted for:")
- # print(extra_files)
+ # logger.warn("Not all extra reject files have been accounted for:")
+ # logger.warn(extra_files)
### we should raise a less generic error here. which?
raise svntest.Failure
@@ -687,9 +733,9 @@ def basic_cleanup(sbox):
wc_dir = sbox.wc_dir
# Lock some directories.
- B_path = os.path.join(wc_dir, 'A', 'B')
- G_path = os.path.join(wc_dir, 'A', 'D', 'G')
- C_path = os.path.join(wc_dir, 'A', 'C')
+ B_path = sbox.ospath('A/B')
+ G_path = sbox.ospath('A/D/G')
+ C_path = sbox.ospath('A/C')
svntest.actions.lock_admin_dir(B_path)
svntest.actions.lock_admin_dir(G_path)
svntest.actions.lock_admin_dir(C_path)
@@ -725,11 +771,11 @@ def basic_revert(sbox):
wc_dir = sbox.wc_dir
# Modify some files and props.
- beta_path = os.path.join(wc_dir, 'A', 'B', 'E', 'beta')
- gamma_path = os.path.join(wc_dir, 'A', 'D', 'gamma')
- iota_path = os.path.join(wc_dir, 'iota')
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
- zeta_path = os.path.join(wc_dir, 'A', 'D', 'H', 'zeta')
+ beta_path = sbox.ospath('A/B/E/beta')
+ gamma_path = sbox.ospath('A/D/gamma')
+ iota_path = sbox.ospath('iota')
+ rho_path = sbox.ospath('A/D/G/rho')
+ zeta_path = sbox.ospath('A/D/H/zeta')
svntest.main.file_append(beta_path, "Added some text to 'beta'.\n")
svntest.main.file_append(iota_path, "Added some text to 'iota'.\n")
svntest.main.file_append(rho_path, "Added some text to 'rho'.\n")
@@ -780,17 +826,17 @@ def basic_revert(sbox):
fp = open(beta_path, 'r')
lines = fp.readlines()
if not ((len (lines) == 1) and (lines[0] == "This is the file 'beta'.\n")):
- print("Revert failed to restore original text.")
+ logger.warn("Revert failed to restore original text.")
raise svntest.Failure
fp = open(iota_path, 'r')
lines = fp.readlines()
if not ((len (lines) == 1) and (lines[0] == "This is the file 'iota'.\n")):
- print("Revert failed to restore original text.")
+ logger.warn("Revert failed to restore original text.")
raise svntest.Failure
fp = open(rho_path, 'r')
lines = fp.readlines()
if not ((len (lines) == 1) and (lines[0] == "This is the file 'rho'.\n")):
- print("Revert failed to restore original text.")
+ logger.warn("Revert failed to restore original text.")
raise svntest.Failure
fp = open(zeta_path, 'r')
lines = fp.readlines()
@@ -806,7 +852,7 @@ def basic_revert(sbox):
# Check that a directory scheduled to be added, but physically
# removed, can be reverted.
- X_path = os.path.join(wc_dir, 'X')
+ X_path = sbox.ospath('X')
svntest.actions.run_and_verify_svn(None, None, [], 'mkdir', X_path)
@@ -824,7 +870,7 @@ def basic_revert(sbox):
# Check that a directory scheduled for deletion, but physically
# removed, can be reverted.
- E_path = os.path.join(wc_dir, 'A', 'B', 'E')
+ E_path = sbox.ospath('A/B/E')
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
### Most of the rest of this test is ineffective, due to the
@@ -890,7 +936,7 @@ def basic_switch(sbox):
### Switch the file `iota' to `A/D/gamma'.
# Construct some paths for convenience
- iota_path = os.path.join(wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
gamma_url = sbox.repo_url + '/A/D/gamma'
# Create expected output tree
@@ -924,7 +970,7 @@ def basic_switch(sbox):
### Switch the directory `A/D/H' to `A/D/G'.
# Construct some paths for convenience
- ADH_path = os.path.join(wc_dir, 'A', 'D', 'H')
+ ADH_path = sbox.ospath('A/D/H')
chi_path = os.path.join(ADH_path, 'chi')
omega_path = os.path.join(ADH_path, 'omega')
psi_path = os.path.join(ADH_path, 'psi')
@@ -989,9 +1035,9 @@ def verify_file_deleted(message, path):
except IOError:
return
if message is not None:
- print(message)
+ logger.warn(message)
###TODO We should raise a less generic error here. which?
- raise Failure
+ raise svntest.Failure
def verify_dir_deleted(path):
if not os.path.isdir(path):
@@ -1006,23 +1052,27 @@ def basic_delete(sbox):
sbox.build()
wc_dir = sbox.wc_dir
+ # Copies of unmodified
+ sbox.simple_copy('iota', 'iota-copied')
+ sbox.simple_copy('A/B/F', 'F-copied')
+
# modify text of chi
- chi_parent_path = os.path.join(wc_dir, 'A', 'D', 'H')
+ chi_parent_path = sbox.ospath('A/D/H')
chi_path = os.path.join(chi_parent_path, 'chi')
svntest.main.file_append(chi_path, 'added to chi')
# modify props of rho (file)
- rho_parent_path = os.path.join(wc_dir, 'A', 'D', 'G')
+ rho_parent_path = sbox.ospath('A/D/G')
rho_path = os.path.join(rho_parent_path, 'rho')
svntest.main.run_svn(None, 'ps', 'abc', 'def', rho_path)
# modify props of F (dir)
- F_parent_path = os.path.join(wc_dir, 'A', 'B')
+ F_parent_path = sbox.ospath('A/B')
F_path = os.path.join(F_parent_path, 'F')
svntest.main.run_svn(None, 'ps', 'abc', 'def', F_path)
# unversioned file
- sigma_parent_path = os.path.join(wc_dir, 'A', 'C')
+ sigma_parent_path = sbox.ospath('A/C')
sigma_path = os.path.join(sigma_parent_path, 'sigma')
svntest.main.file_append(sigma_path, 'unversioned sigma')
@@ -1032,13 +1082,13 @@ def basic_delete(sbox):
os.mkdir(Q_path)
# added directory hierarchies
- X_parent_path = os.path.join(wc_dir, 'A', 'B')
+ X_parent_path = sbox.ospath('A/B')
X_path = os.path.join(X_parent_path, 'X')
svntest.main.run_svn(None, 'mkdir', X_path)
X_child_path = os.path.join(X_path, 'xi')
svntest.main.file_append(X_child_path, 'added xi')
svntest.main.run_svn(None, 'add', X_child_path)
- Y_parent_path = os.path.join(wc_dir, 'A', 'D')
+ Y_parent_path = sbox.ospath('A/D')
Y_path = os.path.join(Y_parent_path, 'Y')
svntest.main.run_svn(None, 'mkdir', Y_path)
@@ -1048,9 +1098,11 @@ def basic_delete(sbox):
expected_output.tweak('A/D/G/rho', 'A/B/F', status=' M')
# expected_output.tweak('A/C/sigma', status='? ')
expected_output.add({
- 'A/B/X' : Item(status='A ', wc_rev=0),
- 'A/B/X/xi' : Item(status='A ', wc_rev=0),
- 'A/D/Y' : Item(status='A ', wc_rev=0),
+ 'A/B/X' : Item(status='A ', wc_rev='-'),
+ 'A/B/X/xi' : Item(status='A ', wc_rev='-'),
+ 'A/D/Y' : Item(status='A ', wc_rev='-'),
+ 'F-copied' : Item(status='A ', copied='+', wc_rev='-'),
+ 'iota-copied' : Item(status='A ', copied='+', wc_rev='-'),
})
svntest.actions.run_and_verify_status(wc_dir, expected_output)
@@ -1087,7 +1139,7 @@ def basic_delete(sbox):
svntest.actions.run_and_verify_status(wc_dir, expected_output)
# 'svn rm' that should work
- E_path = os.path.join(wc_dir, 'A', 'B', 'E')
+ E_path = sbox.ospath('A/B/E')
svntest.actions.run_and_verify_svn(None, None, [], 'rm', E_path)
# 'svn rm --force' that should work
@@ -1106,14 +1158,20 @@ def basic_delete(sbox):
svntest.actions.run_and_verify_svn(None, None, [],
'rm', '--force', X_path)
+ # Deleting an unchanged copy shouldn't error.
+ sbox.simple_mkdir('Z-added')
+ svntest.main.run_svn(None, 'rm', sbox.ospath('iota-copied'),
+ sbox.ospath('F-copied'),
+ sbox.ospath('Z-added'))
+
# Deleting already removed from wc versioned item with --force
- iota_path = os.path.join(wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
os.remove(iota_path)
svntest.actions.run_and_verify_svn(None, None, [],
'rm', '--force', iota_path)
# and without --force
- gamma_path = os.path.join(wc_dir, 'A', 'D', 'gamma')
+ gamma_path = sbox.ospath('A/D/gamma')
os.remove(gamma_path)
svntest.actions.run_and_verify_svn(None, None, [], 'rm', gamma_path)
@@ -1168,22 +1226,22 @@ def basic_delete(sbox):
# check unversioned and added dirs has been removed
if verify_dir_deleted(Q_path):
- print("Failed to remove unversioned dir")
+ logger.warn("Failed to remove unversioned dir")
### we should raise a less generic error here. which?
raise svntest.Failure
if verify_dir_deleted(X_path):
- print("Failed to remove added dir")
+ logger.warn("Failed to remove added dir")
### we should raise a less generic error here. which?
raise svntest.Failure
# Deleting unversioned file explicitly
- foo_path = os.path.join(wc_dir, 'foo')
+ foo_path = sbox.ospath('foo')
svntest.main.file_append(foo_path, 'unversioned foo')
svntest.actions.run_and_verify_svn(None, None, [],
'rm', '--force', foo_path)
verify_file_deleted("Failed to remove unversioned file foo", foo_path)
- # At one stage deleting an URL dumped core
+ # At one stage deleting a URL dumped core
iota_URL = sbox.repo_url + '/iota'
svntest.actions.run_and_verify_svn(None,
@@ -1206,7 +1264,7 @@ def basic_checkout_deleted(sbox):
wc_dir = sbox.wc_dir
# Delete A/D and commit.
- D_path = os.path.join(wc_dir, 'A', 'D')
+ D_path = sbox.ospath('A/D')
svntest.actions.run_and_verify_svn("error scheduling A/D for deletion",
None, [], 'rm', '--force', D_path)
@@ -1225,7 +1283,7 @@ def basic_checkout_deleted(sbox):
# Now try to checkout revision 1 of A/D.
url = sbox.repo_url + '/A/D'
- wc2 = os.path.join(sbox.wc_dir, 'new_D')
+ wc2 = sbox.ospath('new_D')
svntest.actions.run_and_verify_svn("error checking out r1 of A/D",
None, [], 'co', '-r', '1',
url + "@1", wc2)
@@ -1242,7 +1300,7 @@ def basic_node_kind_change(sbox):
wc_dir = sbox.wc_dir
# Schedule a file for deletion
- gamma_path = os.path.join(wc_dir, 'A', 'D', 'gamma')
+ gamma_path = sbox.ospath('A/D/gamma')
svntest.main.run_svn(None, 'rm', gamma_path)
# Status shows deleted file
@@ -1297,7 +1355,7 @@ def basic_import(sbox):
wc_dir = sbox.wc_dir
# create a new directory with files of various permissions
- new_path = os.path.join(wc_dir, 'new_file')
+ new_path = sbox.ospath('new_file')
svntest.main.file_append(new_path, "some text")
@@ -1355,7 +1413,7 @@ def basic_cat(sbox):
sbox.build(read_only = True)
wc_dir = sbox.wc_dir
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
# Get repository text even if wc is modified
svntest.main.file_append(mu_path, "some text")
@@ -1391,22 +1449,22 @@ def basic_ls(sbox):
svntest.actions.run_and_verify_svn('ls a working copy directory',
['B/\n', 'C/\n', 'D/\n', 'mu\n'],
[], 'ls',
- os.path.join(wc_dir, 'A'))
+ sbox.ospath('A'))
svntest.actions.run_and_verify_svn('ls working copy directory with -r BASE',
['B/\n', 'C/\n', 'D/\n', 'mu\n'],
[], 'ls', '-r', 'BASE',
- os.path.join(wc_dir, 'A'))
+ sbox.ospath('A'))
svntest.actions.run_and_verify_svn('ls a single file',
['mu\n'],
[], 'ls',
- os.path.join(wc_dir, 'A', 'mu'))
+ sbox.ospath('A/mu'))
svntest.actions.run_and_verify_svn('recursive ls',
['E/\n', 'E/alpha\n', 'E/beta\n', 'F/\n',
'lambda\n' ], [], 'ls', '-R',
- os.path.join(wc_dir, 'A', 'B'))
+ sbox.ospath('A/B'))
#----------------------------------------------------------------------
@@ -1472,16 +1530,16 @@ def basic_auth_cache(sbox):
repo_url, wc_dir)
# Failed with "not locked" error on missing directory
- svntest.main.safe_rmtree(os.path.join(wc_dir, 'A', 'B', 'E'))
+ svntest.main.safe_rmtree(sbox.ospath('A/B/E'))
svntest.actions.run_and_verify_svn(None, None, [],
'status', '-u',
- os.path.join(wc_dir, 'A', 'B'))
+ sbox.ospath('A/B'))
# Failed with "already locked" error on new dir
svntest.actions.run_and_verify_svn(None, None, [],
'copy',
repo_url + '/A/B/E',
- os.path.join(wc_dir, 'A', 'D', 'G'))
+ sbox.ospath('A/D/G'))
#----------------------------------------------------------------------
@@ -1498,7 +1556,7 @@ def basic_add_ignores(sbox):
sbox.build(read_only = True)
wc_dir = sbox.wc_dir
- dir_path = os.path.join(wc_dir, 'dir')
+ dir_path = sbox.ospath('dir')
foo_c_path = os.path.join(dir_path, 'foo.c')
foo_o_path = os.path.join(dir_path, 'foo.o')
@@ -1528,7 +1586,7 @@ def basic_add_local_ignores(sbox):
sbox.build(read_only = True)
wc_dir = sbox.wc_dir
- dir_path = os.path.join(wc_dir, 'dir')
+ dir_path = sbox.ospath('dir')
file_path = os.path.join(dir_path, 'app.lock')
svntest.actions.run_and_verify_svn(None, svntest.verify.AnyOutput, [],
@@ -1546,7 +1604,7 @@ def basic_add_no_ignores(sbox):
sbox.build(read_only = True)
wc_dir = sbox.wc_dir
- dir_path = os.path.join(wc_dir, 'dir')
+ dir_path = sbox.ospath('dir')
foo_c_path = os.path.join(dir_path, 'foo.c')
# add a few files that match the default ignore patterns
foo_o_path = os.path.join(dir_path, 'foo.o')
@@ -1575,7 +1633,7 @@ def basic_add_parents(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- X_path = os.path.join(wc_dir, 'X')
+ X_path = sbox.ospath('X')
Y_path = os.path.join(X_path, 'Y')
Z_path = os.path.join(Y_path, 'Z')
zeta_path = os.path.join(Z_path, 'zeta')
@@ -1673,8 +1731,8 @@ def basic_info(sbox):
if line.startswith('Path: '):
paths.append(line[6:].rstrip())
if paths != expected_paths:
- print("Reported paths: %s" % paths)
- print("Expected paths: %s" % expected_paths)
+ logger.warn("Reported paths: %s" % paths)
+ logger.warn("Expected paths: %s" % expected_paths)
raise svntest.Failure
sbox.build(read_only = True)
@@ -1697,7 +1755,7 @@ def repos_root(sbox):
if line == "Repository Root: " + sbox.repo_url + "\n":
break
else:
- print("Bad or missing repository root")
+ logger.warn("Bad or missing repository root")
raise svntest.Failure
sbox.build(read_only = True)
@@ -1776,7 +1834,7 @@ def info_nonhead(sbox):
wc_dir = sbox.wc_dir
repo_url = sbox.repo_url
- fname = os.path.join(wc_dir, 'iota')
+ fname = sbox.ospath('iota')
furl = repo_url + "/iota"
# Remove iota and commit.
@@ -1809,7 +1867,7 @@ def ls_nonhead(sbox):
wc_dir = sbox.wc_dir
# Delete A/D/rho and commit.
- G_path = os.path.join(wc_dir, 'A', 'D', 'G')
+ G_path = sbox.ospath('A/D/G')
svntest.actions.run_and_verify_svn("error scheduling A/D/G for deletion",
None, [], 'rm', G_path)
@@ -1838,7 +1896,7 @@ def cat_added_PREV(sbox):
sbox.build(read_only = True)
wc_dir = sbox.wc_dir
- f_path = os.path.join(wc_dir, 'f')
+ f_path = sbox.ospath('f')
# Create and add a file.
svntest.main.file_append(f_path, 'new text')
@@ -1869,8 +1927,8 @@ def delete_keep_local(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, 'iota')
- C_path = os.path.join(wc_dir, 'A', 'C')
+ iota_path = sbox.ospath('iota')
+ C_path = sbox.ospath('A/C')
# Remove file iota
svntest.actions.run_and_verify_svn(None, None, [], 'rm', '--keep-local',
@@ -1899,7 +1957,7 @@ def delete_keep_local(sbox):
# Update working copy to check disk state still greek tree
expected_disk = svntest.main.greek_state.copy()
expected_output = svntest.wc.State(wc_dir, {})
- expected_status.tweak(wc_rev = 2);
+ expected_status.tweak(wc_rev = 2)
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
@@ -1912,7 +1970,7 @@ def delete_keep_local_twice(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- dir = os.path.join(wc_dir, 'dir')
+ dir = sbox.ospath('dir')
svntest.actions.run_and_verify_svn(None, None, [], 'mkdir', dir)
@@ -1920,7 +1978,7 @@ def delete_keep_local_twice(sbox):
svntest.actions.run_and_verify_svn(None, None, [], 'rm', '--keep-local', dir)
if not os.path.isdir(dir):
- print('Directory was really deleted')
+ logger.warn('Directory was really deleted')
raise svntest.Failure
def windows_paths_in_repos(sbox):
@@ -2064,11 +2122,11 @@ def automatic_conflict_resolution(sbox):
svntest.actions.duplicate_dir(wc_dir, wc_backup)
# Make a couple of local mods to files which will be committed
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- lambda_path = os.path.join(wc_dir, 'A', 'B', 'lambda')
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
- tau_path = os.path.join(wc_dir, 'A', 'D', 'G', 'tau')
- omega_path = os.path.join(wc_dir, 'A', 'D', 'H', 'omega')
+ mu_path = sbox.ospath('A/mu')
+ lambda_path = sbox.ospath('A/B/lambda')
+ rho_path = sbox.ospath('A/D/G/rho')
+ tau_path = sbox.ospath('A/D/G/tau')
+ omega_path = sbox.ospath('A/D/H/omega')
svntest.main.file_append(mu_path, 'Original appended text for mu\n')
svntest.main.file_append(lambda_path, 'Original appended text for lambda\n')
svntest.main.file_append(rho_path, 'Original appended text for rho\n')
@@ -2194,8 +2252,8 @@ def automatic_conflict_resolution(sbox):
# probably reveal the cause for the failure, if they were
# uncommented:
#
- # print("Not all extra reject files have been accounted for:")
- # print(extra_files)
+ # logger.warn("Not all extra reject files have been accounted for:")
+ # logger.warn(extra_files)
### we should raise a less generic error here. which?
raise svntest.Failure
@@ -2212,12 +2270,14 @@ def automatic_conflict_resolution(sbox):
# stdout, stderr
None,
".*invalid 'accept' ARG",
- 'resolve', '--accept=edit')
+ 'resolve', '--accept=edit',
+ '--force-interactive')
svntest.actions.run_and_verify_svn(None,
# stdout, stderr
None,
".*invalid 'accept' ARG",
- 'resolve', '--accept=launch')
+ 'resolve', '--accept=launch',
+ '--force-interactive')
# Run 'svn resolved --accept=NOPE. Using omega for the test.
svntest.actions.run_and_verify_svn("Resolve command", None,
".*NOPE' is not a valid --accept value",
@@ -2317,7 +2377,7 @@ def basic_relative_url_using_current_dir(sbox):
sbox.build()
# First, make a new revision of iota.
- iota = os.path.join(sbox.wc_dir, 'iota')
+ iota = sbox.ospath('iota')
svntest.main.file_append(iota, "New contents for iota\n")
svntest.main.run_svn(None, 'ci',
'-m', '', iota)
@@ -2342,13 +2402,13 @@ def basic_relative_url_using_other_targets(sbox):
sbox.build()
# First, make a new revision of iota.
- iota = os.path.join(sbox.wc_dir, 'iota')
+ iota = sbox.ospath('iota')
svntest.main.file_append(iota, "New contents for iota\n")
svntest.main.run_svn(None, 'ci',
'-m', '', iota)
# Now, make a new revision of A/mu .
- mu = os.path.join(sbox.wc_dir, 'A', 'mu')
+ mu = sbox.ospath('A/mu')
mu_url = sbox.repo_url + '/A/mu'
svntest.main.file_append(mu, "New contents for mu\n")
@@ -2420,7 +2480,7 @@ def basic_relative_url_with_peg_revisions(sbox):
sbox.build()
# First, make a new revision of iota.
- iota = os.path.join(sbox.wc_dir, 'iota')
+ iota = sbox.ospath('iota')
svntest.main.file_append(iota, "New contents for iota\n")
svntest.main.run_svn(None, 'ci',
'-m', '', iota)
@@ -2428,7 +2488,7 @@ def basic_relative_url_with_peg_revisions(sbox):
iota_url = sbox.repo_url + '/iota'
# Now, make a new revision of A/mu .
- mu = os.path.join(sbox.wc_dir, 'A', 'mu')
+ mu = sbox.ospath('A/mu')
mu_url = sbox.repo_url + '/A/mu'
svntest.main.file_append(mu, "New contents for mu\n")
@@ -2456,8 +2516,17 @@ def basic_relative_url_with_peg_revisions(sbox):
'^//A/@3', iota_url)
+def basic_auth_test_xfail_predicate():
+ """Predicate for XFail for basic_auth_test:
+ The test will fail if plaintext password storage is disabled,
+ and the RA method requires authentication."""
+ return (not svntest.main.is_os_windows()
+ and svntest.main.is_ra_type_dav()
+ and svntest.main.is_plaintext_password_storage_disabled())
+
# Issue 2242, auth cache picking up password from wrong username entry
@Issue(2242)
+@XFail(basic_auth_test_xfail_predicate)
def basic_auth_test(sbox):
"basic auth test"
@@ -2471,22 +2540,22 @@ def basic_auth_test(sbox):
# Checkout with jrandom
exit_code, output, errput = svntest.main.run_command(
- svntest.main.svn_binary, None, 1, 'co', sbox.repo_url, wc_dir,
+ svntest.main.svn_binary, None, True, 'co', sbox.repo_url, wc_dir,
'--username', 'jrandom', '--password', 'rayjandom',
'--config-dir', config_dir)
exit_code, output, errput = svntest.main.run_command(
- svntest.main.svn_binary, None, 1, 'co', sbox.repo_url, wc_dir,
+ svntest.main.svn_binary, None, True, 'co', sbox.repo_url, wc_dir,
'--username', 'jrandom', '--non-interactive', '--config-dir', config_dir)
# Checkout with jconstant
exit_code, output, errput = svntest.main.run_command(
- svntest.main.svn_binary, None, 1, 'co', sbox.repo_url, wc_dir,
+ svntest.main.svn_binary, None, True, 'co', sbox.repo_url, wc_dir,
'--username', 'jconstant', '--password', 'rayjandom',
'--config-dir', config_dir)
exit_code, output, errput = svntest.main.run_command(
- svntest.main.svn_binary, None, 1, 'co', sbox.repo_url, wc_dir,
+ svntest.main.svn_binary, None, True, 'co', sbox.repo_url, wc_dir,
'--username', 'jconstant', '--non-interactive',
'--config-dir', config_dir)
@@ -2494,7 +2563,7 @@ def basic_auth_test(sbox):
# a password and the above cached password belongs to jconstant
expected_err = ["authorization failed: Could not authenticate to server:"]
exit_code, output, errput = svntest.main.run_command(
- svntest.main.svn_binary, expected_err, 1, 'co', sbox.repo_url, wc_dir,
+ svntest.main.svn_binary, expected_err, True, 'co', sbox.repo_url, wc_dir,
'--username', 'jrandom', '--non-interactive', '--config-dir', config_dir)
def basic_add_svn_format_file(sbox):
@@ -2563,8 +2632,8 @@ def delete_and_add_same_file(sbox):
wc_dir = sbox.wc_dir
- iota = os.path.join(wc_dir, 'iota')
- iota2 = os.path.join(wc_dir, 'iota2')
+ iota = sbox.ospath('iota')
+ iota2 = sbox.ospath('iota2')
shutil.copyfile(iota, iota2)
@@ -2725,7 +2794,7 @@ def ls_multiple_and_non_existent_targets(sbox):
def non_existent_wc_target():
"non-existent wc target"
- non_existent_path = os.path.join(wc_dir, 'non-existent')
+ non_existent_path = sbox.ospath('non-existent')
expected_err = ".*W155010.*"
svntest.actions.run_and_verify_svn2(None, None, expected_err,
@@ -2743,7 +2812,7 @@ def ls_multiple_and_non_existent_targets(sbox):
alpha = sbox.ospath('A/B/E/alpha')
beta = sbox.ospath('A/B/E/beta')
- non_existent_path = os.path.join(wc_dir, 'non-existent')
+ non_existent_path = sbox.ospath('non-existent')
# All targets are existing
svntest.actions.run_and_verify_svn2(None, None, [],
@@ -2797,7 +2866,7 @@ def add_multiple_targets(sbox):
file1 = sbox.ospath('file1')
file2 = sbox.ospath('file2')
- non_existent_path = os.path.join(wc_dir, 'non-existent')
+ non_existent_path = sbox.ospath('non-existent')
svntest.main.file_write(file1, "file1 contents", 'w+')
svntest.main.file_write(file2, "file2 contents", 'w+')
@@ -2886,6 +2955,100 @@ def quiet_commits(sbox):
expected_disk,
expected_status)
+# Regression test for issue #4023: on Windows, 'svn rm' incorrectly deletes
+# on-disk file if it is case-clashing with intended (non-on-disk) target.
+@Issue(4023)
+def rm_missing_with_case_clashing_ondisk_item(sbox):
+ """rm missing item with case-clashing ondisk item"""
+
+ sbox.build(read_only = True)
+ wc_dir = sbox.wc_dir
+
+ iota_path = sbox.ospath('iota')
+ IOTA_path = sbox.ospath('IOTA')
+
+ # Out-of-svn move, to make iota missing, while IOTA appears as unversioned.
+ os.rename(iota_path, IOTA_path)
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.add({
+ 'iota' : Item(status='! ', wc_rev='1'),
+ 'IOTA' : Item(status='? '),
+ })
+ svntest.actions.run_and_verify_unquiet_status(wc_dir, expected_status)
+
+ # Verify that the casing is not updated, because the path is on-disk.
+ expected_output = [ 'D %s\n' % iota_path ]
+ # 'svn rm' iota, should leave IOTA alone.
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'rm', iota_path)
+
+ # Test status: the unversioned IOTA should still be there.
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.add({
+ 'iota' : Item(status='D ', wc_rev='1'),
+ 'IOTA' : Item(status='? '),
+ })
+ svntest.actions.run_and_verify_unquiet_status(wc_dir, expected_status)
+
+
+def delete_conflicts_one_of_many(sbox):
+ """delete multiple targets one conflict"""
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ svntest.main.file_append(sbox.ospath('A/D/G/rho'), 'new rho')
+ sbox.simple_commit()
+ svntest.main.file_append(sbox.ospath('A/D/G/rho'), 'conflict rho')
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'update', '-r1', '--accept', 'postpone',
+ wc_dir)
+
+ if not os.path.exists(sbox.ospath('A/D/G/rho.mine')):
+ raise svntest.Failure("conflict file rho.mine missing")
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'rm', '--force',
+ sbox.ospath('A/D/G/rho'),
+ sbox.ospath('A/D/G/tau'))
+
+ verify_file_deleted("failed to remove conflict file",
+ sbox.ospath('A/D/G/rho.mine'))
+
+@Issue(3231)
+@XFail()
+def peg_rev_on_non_existent_wc_path(sbox):
+ """peg rev resolution on non-existent wc paths"""
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # setup some history
+ sbox.simple_move('A', 'A2')
+ sbox.simple_move('A2/mu', 'A2/mu2')
+ open(sbox.ospath('A2/mu2'), 'w').write('r2\n')
+ sbox.simple_commit(message='r2')
+ #
+ sbox.simple_move('A2/mu2', 'A2/mu3')
+ sbox.simple_move('A2', 'A3')
+ open(sbox.ospath('A3/mu3'), 'w').write('r3\n')
+ sbox.simple_commit(message='r3')
+ #
+ sbox.simple_move('A3/mu3', 'A3/mu4')
+ open(sbox.ospath('A3/mu4'), 'w').write('r4\n')
+ sbox.simple_move('A3', 'A4')
+ sbox.simple_commit(message='r4')
+
+ # test something.
+ sbox.simple_update()
+ # This currently fails with ENOENT on A/mu3.
+ svntest.actions.run_and_verify_svn(None, ['r2\n'], [],
+ 'cat', '-r2', sbox.ospath('A3/mu3') + '@3')
+ os.chdir(sbox.ospath('A4'))
+ svntest.actions.run_and_verify_svn(None, ['r2\n'], [],
+ 'cat', '-r2', sbox.ospath('mu3') + '@3')
+
########################################################################
# Run the tests
@@ -2898,7 +3061,8 @@ test_list = [ None,
basic_mkdir_url,
basic_mkdir_url_with_parents,
basic_mkdir_wc_with_parents,
- basic_corruption,
+ basic_commit_corruption,
+ basic_update_corruption,
basic_merging_update,
basic_conflict,
basic_cleanup,
@@ -2950,6 +3114,9 @@ test_list = [ None,
ls_multiple_and_non_existent_targets,
add_multiple_targets,
quiet_commits,
+ rm_missing_with_case_clashing_ondisk_item,
+ delete_conflicts_one_of_many,
+ peg_rev_on_non_existent_wc_path,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/blame_tests.py b/subversion/tests/cmdline/blame_tests.py
index f54c783..fdbb688 100755
--- a/subversion/tests/cmdline/blame_tests.py
+++ b/subversion/tests/cmdline/blame_tests.py
@@ -31,6 +31,8 @@ import os, sys, re
import svntest
from svntest.main import server_has_mergeinfo
+from prop_tests import binary_mime_type_on_text_file_warning
+
# For some basic merge setup used by blame -g tests.
from merge_tests import set_up_branch
@@ -126,10 +128,22 @@ def blame_binary(sbox):
# Then do it again, but this time we set the mimetype to binary.
iota = os.path.join(wc_dir, 'iota')
svntest.main.file_append(iota, "More new contents for iota\n")
- svntest.main.run_svn(None, 'propset', 'svn:mime-type', 'image/jpeg', iota)
+ svntest.main.run_svn(binary_mime_type_on_text_file_warning,
+ 'propset', 'svn:mime-type', 'image/jpeg', iota)
+
+ # Blame fails when mime-type is locally modified to binary
+ exit_code, output, errput = svntest.main.run_svn(2, 'blame', iota)
+ if (len(errput) != 1) or (errput[0].find('Skipping') == -1):
+ raise svntest.Failure
+
svntest.main.run_svn(None, 'ci',
'-m', '', iota)
+ # Blame fails when mime-type is binary
+ exit_code, output, errput = svntest.main.run_svn(2, 'blame', iota)
+ if (len(errput) != 1) or (errput[0].find('Skipping') == -1):
+ raise svntest.Failure
+
# Once more, but now let's remove that mimetype.
iota = os.path.join(wc_dir, 'iota')
svntest.main.file_append(iota, "Still more new contents for iota\n")
@@ -137,13 +151,15 @@ def blame_binary(sbox):
svntest.main.run_svn(None, 'ci',
'-m', '', iota)
- exit_code, output, errput = svntest.main.run_svn(2, 'blame', iota)
+ # Blame fails when asking about an old revision where the mime-type is binary
+ exit_code, output, errput = svntest.main.run_svn(2, 'blame', iota + '@3')
if (len(errput) != 1) or (errput[0].find('Skipping') == -1):
raise svntest.Failure
# But with --force, it should work.
- exit_code, output, errput = svntest.main.run_svn(2, 'blame', '--force', iota)
- if (len(errput) != 0 or len(output) != 4):
+ exit_code, output, errput = svntest.main.run_svn(2, 'blame', '--force',
+ iota + '@3')
+ if (len(errput) != 0 or len(output) != 3):
raise svntest.Failure
@@ -333,6 +349,7 @@ def blame_eol_styles(sbox):
# do the test for each eol-style
for eol in ['CR', 'LF', 'CRLF', 'native']:
+ svntest.main.run_svn(None, 'propdel', 'svn:eol-style', file_path)
svntest.main.file_write(file_path, "This is no longer the file 'iota'.\n")
for i in range(1,3):
@@ -598,7 +615,7 @@ def blame_file_not_in_head(sbox):
# Check that a correct error message is printed when blaming a target that
# doesn't exist (in HEAD).
- expected_err = ".*notexisting' (is not a file.*|path not found)"
+ expected_err = ".*notexisting' (is not a file.*|path not found|does not exist)"
svntest.actions.run_and_verify_svn(None, [], expected_err,
'blame', notexisting_url)
@@ -801,20 +818,20 @@ def blame_multiple_targets(sbox):
sbox.build()
+ # First, make a new revision of iota.
+ iota = os.path.join(sbox.wc_dir, 'iota')
+ svntest.main.file_append(iota, "New contents for iota\n")
+ svntest.main.run_svn(None, 'ci', '-m', '', iota)
+
+ expected_output = [
+ " 1 jrandom This is the file 'iota'.\n",
+ " 2 jrandom New contents for iota\n",
+ ]
+
def multiple_wc_targets():
"multiple wc targets"
- # First, make a new revision of iota.
- iota = os.path.join(sbox.wc_dir, 'iota')
non_existent = os.path.join(sbox.wc_dir, 'non-existent')
- svntest.main.file_append(iota, "New contents for iota\n")
- svntest.main.run_svn(None, 'ci',
- '-m', '', iota)
-
- expected_output = [
- " 1 jrandom This is the file 'iota'.\n",
- " 2 jrandom New contents for iota\n",
- ]
expected_err = ".*W155010.*\n.*E200009.*"
expected_err_re = re.compile(expected_err, re.DOTALL)
@@ -826,24 +843,15 @@ def blame_multiple_targets(sbox):
if not expected_err_re.match("".join(error)):
raise svntest.Failure('blame failed: expected error "%s", but received '
'"%s"' % (expected_err, "".join(error)))
+ svntest.verify.verify_outputs(None, output, None, expected_output, None)
def multiple_url_targets():
"multiple url targets"
- # First, make a new revision of iota.
- iota = os.path.join(sbox.wc_dir, 'iota')
iota_url = sbox.repo_url + '/iota'
non_existent = sbox.repo_url + '/non-existent'
- svntest.main.file_append(iota, "New contents for iota\n")
- svntest.main.run_svn(None, 'ci',
- '-m', '', iota)
-
- expected_output = [
- " 1 jrandom This is the file 'iota'.\n",
- " 2 jrandom New contents for iota\n",
- ]
- expected_err = ".*(W160017|W160013).*\n.*E200009.*"
+ expected_err = ".*(W160017|W160013|W150000).*\n.*E200009.*"
expected_err_re = re.compile(expected_err, re.DOTALL)
exit_code, output, error = svntest.main.run_svn(1, 'blame',
@@ -853,11 +861,104 @@ def blame_multiple_targets(sbox):
if not expected_err_re.match("".join(error)):
raise svntest.Failure('blame failed: expected error "%s", but received '
'"%s"' % (expected_err, "".join(error)))
+ svntest.verify.verify_outputs(None, output, None, expected_output, None)
# Test one by one
multiple_wc_targets()
multiple_url_targets()
+@Issue(4034)
+def blame_eol_handling(sbox):
+ "blame it on the eol handling"
+
+ sbox.build()
+
+ if os.name == 'nt':
+ native_eol = '\r\n'
+ else:
+ native_eol = '\n'
+
+ for eol, prop, rev in [ ('\r', 'CR', 2),
+ ('\n', 'LF', 4),
+ ('\r\n', 'CRLF', 6),
+ (native_eol, 'native', 8) ]:
+
+ f1 = sbox.ospath('blame-%s' % prop)
+ f2 = sbox.ospath('blame-%s-prop' % prop)
+
+ file_data = 'line 1 ' + eol + \
+ 'line 2 ' + eol + \
+ 'line 3 ' + eol + \
+ 'line 4 ' + eol + \
+ 'line 5 ' + eol
+
+ svntest.main.file_write(f1, file_data, mode='wb')
+ svntest.main.file_write(f2, file_data, mode='wb')
+
+ sbox.simple_add('blame-%s' % prop,
+ 'blame-%s-prop' % prop)
+ sbox.simple_propset('svn:eol-style', prop, 'blame-%s-prop' % prop)
+ sbox.simple_commit()
+
+ file_data = 'line 1 ' + eol + \
+ 'line 2 ' + eol + \
+ 'line 2a' + eol + \
+ 'line 3 ' + eol + \
+ 'line 4 ' + eol + \
+ 'line 4a' + eol + \
+ 'line 5 ' + eol
+
+ svntest.main.file_write(f1, file_data, mode='wb')
+ svntest.main.file_write(f2, file_data, mode='wb')
+
+ sbox.simple_commit()
+
+ expected_output = [
+ ' %d jrandom line 1 \n' % rev,
+ ' %d jrandom line 2 \n' % rev,
+ ' %d jrandom line 2a\n' % (rev + 1),
+ ' %d jrandom line 3 \n' % rev,
+ ' %d jrandom line 4 \n' % rev,
+ ' %d jrandom line 4a\n' % (rev + 1),
+ ' %d jrandom line 5 \n' % rev,
+ ]
+
+ svntest.actions.run_and_verify_svn(f1 + '-base', expected_output, [],
+ 'blame', f1)
+
+ svntest.actions.run_and_verify_svn(f2 + '-base', expected_output, [],
+ 'blame', f2)
+
+ file_data = 'line 1 ' + eol + \
+ 'line 2 ' + eol + \
+ 'line 2a' + eol + \
+ 'line 3 ' + eol + \
+ 'line 3b' + eol + \
+ 'line 4 ' + eol + \
+ 'line 4a' + eol + \
+ 'line 5 ' + eol
+
+ svntest.main.file_write(f1, file_data, mode='wb')
+ svntest.main.file_write(f2, file_data, mode='wb')
+
+ expected_output = [
+ ' %d jrandom line 1 \n' % rev,
+ ' %d jrandom line 2 \n' % rev,
+ ' %d jrandom line 2a\n' % (rev + 1),
+ ' %d jrandom line 3 \n' % rev,
+ ' - - line 3b\n',
+ ' %d jrandom line 4 \n' % rev,
+ ' %d jrandom line 4a\n' % (rev + 1),
+ ' %d jrandom line 5 \n' % rev,
+ ]
+
+ svntest.actions.run_and_verify_svn(f1 + '-modified', expected_output, [],
+ 'blame', f1)
+
+ svntest.actions.run_and_verify_svn(f2 + '-modified', expected_output, [],
+ 'blame', f2)
+
+
########################################################################
# Run the tests
@@ -880,6 +981,7 @@ test_list = [ None,
blame_output_after_merge,
merge_sensitive_blame_and_empty_mergeinfo,
blame_multiple_targets,
+ blame_eol_handling,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/changelist_tests.py b/subversion/tests/cmdline/changelist_tests.py
index 5d9b921..4652acc 100755
--- a/subversion/tests/cmdline/changelist_tests.py
+++ b/subversion/tests/cmdline/changelist_tests.py
@@ -129,9 +129,6 @@ def verify_changelist_output(output, expected_adds=None,
if not expected_skips:
output = [line for line in output if (not _re_cl_skip.match(line))]
- if len(output) != num_expected:
- raise svntest.Failure("Unexpected number of 'svn changelist' output lines")
-
for line in output:
line = line.rstrip()
match = _re_cl_rem.match(line)
@@ -157,6 +154,10 @@ def verify_changelist_output(output, expected_adds=None,
raise svntest.Failure("Unexpected changelist skip line: " + line)
raise svntest.Failure("Unexpected line: " + line)
+ if len(output) != num_expected:
+ raise svntest.Failure("Unexpected number of 'svn changelist' output " +
+ "lines (%d vs %d)" % (len(output), num_expected))
+
def verify_pget_output(output, expected_props):
"""Compare lines of OUTPUT from 'svn propget' against EXPECTED_PROPS
(a dictionary mapping paths to property values)."""
@@ -220,15 +221,15 @@ def add_remove_changelists(sbox):
# all dirs in the Greek tree
expected_skips_all = dict([(x, None) for x in [
- os.path.join(wc_dir),
- os.path.join(wc_dir, 'A'),
- os.path.join(wc_dir, 'A', 'B'),
- os.path.join(wc_dir, 'A', 'B', 'E'),
- os.path.join(wc_dir, 'A', 'B', 'F'),
- os.path.join(wc_dir, 'A', 'C'),
- os.path.join(wc_dir, 'A', 'D'),
- os.path.join(wc_dir, 'A', 'D', 'G'),
- os.path.join(wc_dir, 'A', 'D', 'H'),
+ sbox.ospath(''),
+ sbox.ospath('A'),
+ sbox.ospath('A/B'),
+ sbox.ospath('A/B/E'),
+ sbox.ospath('A/B/F'),
+ sbox.ospath('A/C'),
+ sbox.ospath('A/D'),
+ sbox.ospath('A/D/G'),
+ sbox.ospath('A/D/H'),
]])
expected_skips_wc_dir = { wc_dir : None }
@@ -254,17 +255,17 @@ def add_remove_changelists(sbox):
"--depth", "infinity",
wc_dir)
expected_adds = {
- os.path.join(wc_dir, 'A', 'B', 'E', 'alpha') : 'foo',
- os.path.join(wc_dir, 'A', 'B', 'E', 'beta') : 'foo',
- os.path.join(wc_dir, 'A', 'B', 'lambda') : 'foo',
- os.path.join(wc_dir, 'A', 'D', 'G', 'pi') : 'foo',
- os.path.join(wc_dir, 'A', 'D', 'G', 'rho') : 'foo',
- os.path.join(wc_dir, 'A', 'D', 'G', 'tau') : 'foo',
- os.path.join(wc_dir, 'A', 'D', 'H', 'chi') : 'foo',
- os.path.join(wc_dir, 'A', 'D', 'H', 'omega') : 'foo',
- os.path.join(wc_dir, 'A', 'D', 'H', 'psi') : 'foo',
- os.path.join(wc_dir, 'A', 'D', 'gamma') : 'foo',
- os.path.join(wc_dir, 'A', 'mu') : 'foo',
+ sbox.ospath('A/B/E/alpha') : 'foo',
+ sbox.ospath('A/B/E/beta') : 'foo',
+ sbox.ospath('A/B/lambda') : 'foo',
+ sbox.ospath('A/D/G/pi') : 'foo',
+ sbox.ospath('A/D/G/rho') : 'foo',
+ sbox.ospath('A/D/G/tau') : 'foo',
+ sbox.ospath('A/D/H/chi') : 'foo',
+ sbox.ospath('A/D/H/omega') : 'foo',
+ sbox.ospath('A/D/H/psi') : 'foo',
+ sbox.ospath('A/D/gamma') : 'foo',
+ sbox.ospath('A/mu') : 'foo',
}
verify_changelist_output(output, expected_adds)
@@ -273,16 +274,15 @@ def add_remove_changelists(sbox):
# svn changelist bar WC_DIR/A/D --depth infinity
exit_code, output, errput = svntest.main.run_svn(".*", "changelist", "bar",
"--depth", "infinity",
- os.path.join(wc_dir,
- 'A', 'D'))
+ sbox.ospath('A/D'))
expected_adds = {
- os.path.join(wc_dir, 'A', 'D', 'G', 'pi') : 'bar',
- os.path.join(wc_dir, 'A', 'D', 'G', 'rho') : 'bar',
- os.path.join(wc_dir, 'A', 'D', 'G', 'tau') : 'bar',
- os.path.join(wc_dir, 'A', 'D', 'H', 'chi') : 'bar',
- os.path.join(wc_dir, 'A', 'D', 'H', 'omega') : 'bar',
- os.path.join(wc_dir, 'A', 'D', 'H', 'psi') : 'bar',
- os.path.join(wc_dir, 'A', 'D', 'gamma') : 'bar',
+ sbox.ospath('A/D/G/pi') : 'bar',
+ sbox.ospath('A/D/G/rho') : 'bar',
+ sbox.ospath('A/D/G/tau') : 'bar',
+ sbox.ospath('A/D/H/chi') : 'bar',
+ sbox.ospath('A/D/H/omega') : 'bar',
+ sbox.ospath('A/D/H/psi') : 'bar',
+ sbox.ospath('A/D/gamma') : 'bar',
}
expected_removals = expected_adds
verify_changelist_output(output, expected_adds, expected_removals)
@@ -290,12 +290,11 @@ def add_remove_changelists(sbox):
# svn changelist baz WC_DIR/A/D/H --depth infinity
exit_code, output, errput = svntest.main.run_svn(".*", "changelist", "baz",
"--depth", "infinity",
- os.path.join(wc_dir, 'A',
- 'D', 'H'))
+ sbox.ospath('A/D/H'))
expected_adds = {
- os.path.join(wc_dir, 'A', 'D', 'H', 'chi') : 'baz',
- os.path.join(wc_dir, 'A', 'D', 'H', 'omega') : 'baz',
- os.path.join(wc_dir, 'A', 'D', 'H', 'psi') : 'baz',
+ sbox.ospath('A/D/H/chi') : 'baz',
+ sbox.ospath('A/D/H/omega') : 'baz',
+ sbox.ospath('A/D/H/psi') : 'baz',
}
expected_removals = expected_adds
verify_changelist_output(output, expected_adds, expected_removals)
@@ -309,11 +308,11 @@ def add_remove_changelists(sbox):
"--changelist", "foo",
wc_dir)
expected_adds = {
- os.path.join(wc_dir, 'A', 'B', 'E', 'alpha') : 'foo-rename',
- os.path.join(wc_dir, 'A', 'B', 'E', 'beta') : 'foo-rename',
- os.path.join(wc_dir, 'A', 'B', 'lambda') : 'foo-rename',
- os.path.join(wc_dir, 'A', 'mu') : 'foo-rename',
- os.path.join(wc_dir, 'iota') : 'foo-rename',
+ sbox.ospath('A/B/E/alpha') : 'foo-rename',
+ sbox.ospath('A/B/E/beta') : 'foo-rename',
+ sbox.ospath('A/B/lambda') : 'foo-rename',
+ sbox.ospath('A/mu') : 'foo-rename',
+ sbox.ospath('iota') : 'foo-rename',
}
expected_removals = expected_adds
verify_changelist_output(output, expected_adds, expected_removals)
@@ -325,14 +324,14 @@ def add_remove_changelists(sbox):
"--changelist", "foo-rename", "--changelist", "baz", wc_dir)
expected_adds = {
- os.path.join(wc_dir, 'A', 'B', 'E', 'alpha') : 'bar',
- os.path.join(wc_dir, 'A', 'B', 'E', 'beta') : 'bar',
- os.path.join(wc_dir, 'A', 'B', 'lambda') : 'bar',
- os.path.join(wc_dir, 'A', 'D', 'H', 'chi') : 'bar',
- os.path.join(wc_dir, 'A', 'D', 'H', 'omega') : 'bar',
- os.path.join(wc_dir, 'A', 'D', 'H', 'psi') : 'bar',
- os.path.join(wc_dir, 'A', 'mu') : 'bar',
- os.path.join(wc_dir, 'iota') : 'bar',
+ sbox.ospath('A/B/E/alpha') : 'bar',
+ sbox.ospath('A/B/E/beta') : 'bar',
+ sbox.ospath('A/B/lambda') : 'bar',
+ sbox.ospath('A/D/H/chi') : 'bar',
+ sbox.ospath('A/D/H/omega') : 'bar',
+ sbox.ospath('A/D/H/psi') : 'bar',
+ sbox.ospath('A/mu') : 'bar',
+ sbox.ospath('iota') : 'bar',
}
expected_removals = expected_adds
verify_changelist_output(output, expected_adds, expected_removals)
@@ -360,17 +359,17 @@ def add_remove_changelists(sbox):
"--depth", "infinity",
wc_dir)
expected_removals = {
- os.path.join(wc_dir, 'A', 'B', 'E', 'alpha') : None,
- os.path.join(wc_dir, 'A', 'B', 'E', 'beta') : None,
- os.path.join(wc_dir, 'A', 'B', 'lambda') : None,
- os.path.join(wc_dir, 'A', 'D', 'G', 'pi') : None,
- os.path.join(wc_dir, 'A', 'D', 'G', 'rho') : None,
- os.path.join(wc_dir, 'A', 'D', 'G', 'tau') : None,
- os.path.join(wc_dir, 'A', 'D', 'H', 'chi') : None,
- os.path.join(wc_dir, 'A', 'D', 'H', 'omega') : None,
- os.path.join(wc_dir, 'A', 'D', 'H', 'psi') : None,
- os.path.join(wc_dir, 'A', 'D', 'gamma') : None,
- os.path.join(wc_dir, 'A', 'mu') : None,
+ sbox.ospath('A/B/E/alpha') : None,
+ sbox.ospath('A/B/E/beta') : None,
+ sbox.ospath('A/B/lambda') : None,
+ sbox.ospath('A/D/G/pi') : None,
+ sbox.ospath('A/D/G/rho') : None,
+ sbox.ospath('A/D/G/tau') : None,
+ sbox.ospath('A/D/H/chi') : None,
+ sbox.ospath('A/D/H/omega') : None,
+ sbox.ospath('A/D/H/psi') : None,
+ sbox.ospath('A/D/gamma') : None,
+ sbox.ospath('A/mu') : None,
}
verify_changelist_output(output, None, expected_removals)
@@ -387,12 +386,12 @@ def add_remove_changelists(sbox):
"--changelist", "a",
wc_dir)
expected_removals = {
- os.path.join(wc_dir, 'A', 'B', 'E', 'alpha') : None,
- os.path.join(wc_dir, 'A', 'B', 'E', 'beta') : None,
- os.path.join(wc_dir, 'A', 'B', 'lambda') : None,
- os.path.join(wc_dir, 'A', 'D', 'H', 'omega') : None,
- os.path.join(wc_dir, 'A', 'D', 'gamma') : None,
- os.path.join(wc_dir, 'iota') : None,
+ sbox.ospath('A/B/E/alpha') : None,
+ sbox.ospath('A/B/E/beta') : None,
+ sbox.ospath('A/B/lambda') : None,
+ sbox.ospath('A/D/H/omega') : None,
+ sbox.ospath('A/D/gamma') : None,
+ sbox.ospath('iota') : None,
}
verify_changelist_output(output, None, expected_removals)
@@ -405,10 +404,10 @@ def add_remove_changelists(sbox):
"--changelist", "o",
wc_dir)
expected_removals = {
- os.path.join(wc_dir, 'A', 'D', 'G', 'pi') : None,
- os.path.join(wc_dir, 'A', 'D', 'G', 'rho') : None,
- os.path.join(wc_dir, 'A', 'D', 'H', 'chi') : None,
- os.path.join(wc_dir, 'A', 'D', 'H', 'psi') : None,
+ sbox.ospath('A/D/G/pi') : None,
+ sbox.ospath('A/D/G/rho') : None,
+ sbox.ospath('A/D/H/chi') : None,
+ sbox.ospath('A/D/H/psi') : None,
}
verify_changelist_output(output, None, expected_removals)
@@ -634,9 +633,8 @@ def propmods_with_changelists(sbox):
'A/D/G/pi', 'A/D/G/rho', 'A/D/G/tau', 'A/D/H',
'A/D/H/chi', 'A/D/H/omega', 'A/D/H/psi', 'A/D/gamma',
'A/mu', 'iota', props={ 'name' : 'value' })
- actual_disk_tree = svntest.tree.build_tree_from_wc(wc_dir, 1)
- svntest.tree.compare_trees("disk", actual_disk_tree,
- expected_disk.old_tree())
+
+ svntest.actions.verify_disk(wc_dir, expected_disk, True)
# Proplist the 'i' changelist
exit_code, output, errput = svntest.main.run_svn(None, "proplist", "--depth",
@@ -654,9 +652,7 @@ def propmods_with_changelists(sbox):
wc_dir)
expected_disk.tweak('A/D/G/pi', 'A/D/G/rho', 'A/D/H/chi', 'A/D/H/psi',
props={})
- actual_disk_tree = svntest.tree.build_tree_from_wc(wc_dir, 1)
- svntest.tree.compare_trees("disk", actual_disk_tree,
- expected_disk.old_tree())
+ svntest.actions.verify_disk(wc_dir, expected_disk, True)
# Add 'foo'='bar' property on all files under A/B to depth files and
# in changelist 'a'.
@@ -665,9 +661,7 @@ def propmods_with_changelists(sbox):
os.path.join(wc_dir, 'A', 'B'))
expected_disk.tweak('A/B/lambda', props={ 'name' : 'value',
'foo' : 'bar' })
- actual_disk_tree = svntest.tree.build_tree_from_wc(wc_dir, 1)
- svntest.tree.compare_trees("disk", actual_disk_tree,
- expected_disk.old_tree())
+ svntest.actions.verify_disk(wc_dir, expected_disk, True)
# Add 'bloo'='blarg' property to all files in changelist 'a'.
svntest.main.run_svn(None, "pset", "--depth", "infinity",
@@ -679,9 +673,7 @@ def propmods_with_changelists(sbox):
expected_disk.tweak('A/B/E/alpha', 'A/B/E/beta', 'A/D/H/omega', 'A/D/gamma',
'iota', props={ 'name' : 'value',
'bloo' : 'blarg' })
- actual_disk_tree = svntest.tree.build_tree_from_wc(wc_dir, 1)
- svntest.tree.compare_trees("disk", actual_disk_tree,
- expected_disk.old_tree())
+ svntest.actions.verify_disk(wc_dir, expected_disk, True)
# Propget 'name' in files in changelists 'a' and 'i' to depth files.
exit_code, output, errput = svntest.main.run_svn(None, "pget",
@@ -935,24 +927,24 @@ def tree_conflicts_and_changelists_on_commit2(sbox):
# Remove it, warp back, add a prop, update.
svntest.main.run_svn(None, 'delete', C)
- expected_output = svntest.verify.UnorderedRegexOutput(
- ["Deleting.*" + re.escape(C)],
+ expected_output = svntest.verify.RegexOutput(
+ "Deleting.*" + re.escape(C),
False)
svntest.actions.run_and_verify_svn(None, expected_output, [],
'commit', '-m', 'delete A/C', C)
- expected_output = svntest.verify.UnorderedRegexOutput(
+ expected_output = svntest.verify.RegexOutput(
"A.*" + re.escape(C), False)
svntest.actions.run_and_verify_svn(None, expected_output, [],
'update', C, "-r1")
- expected_output = svntest.verify.UnorderedRegexOutput(
+ expected_output = svntest.verify.RegexOutput(
".*'propname' set on '"
+ re.escape(C) + "'", False)
svntest.actions.run_and_verify_svn(None, expected_output, [],
'propset', 'propname', 'propval', C)
- expected_output = svntest.verify.UnorderedRegexOutput(
+ expected_output = svntest.verify.RegexOutput(
" C " + re.escape(C), False)
svntest.actions.run_and_verify_svn(None, expected_output, [],
'update', wc_dir)
diff --git a/subversion/tests/cmdline/checkout_tests.py b/subversion/tests/cmdline/checkout_tests.py
index 9925efe..7456221 100755
--- a/subversion/tests/cmdline/checkout_tests.py
+++ b/subversion/tests/cmdline/checkout_tests.py
@@ -27,10 +27,12 @@
# General modules
import sys, re, os, time, subprocess
+import datetime
# Our testing module
import svntest
from svntest import wc, actions
+import logging
# (abbreviation)
Skip = svntest.testcase.Skip_deco
@@ -41,6 +43,8 @@ Issue = svntest.testcase.Issue_deco
Wimp = svntest.testcase.Wimp_deco
Item = wc.StateItem
+logger = logging.getLogger()
+
#----------------------------------------------------------------------
# Helper function for testing stderr from co.
# If none of the strings in STDERR list matches the regular expression
@@ -50,10 +54,9 @@ def test_stderr(re_string, stderr):
for line in stderr:
if exp_err_re.search(line):
return
- if svntest.main.options.verbose:
- for x in stderr:
- sys.stdout.write(x)
- print("Expected stderr reg-ex: '" + re_string + "'")
+ for x in stderr:
+ logger.debug(x[:-1])
+ logger.info("Expected stderr reg-ex: '" + re_string + "'")
raise svntest.Failure("Checkout failed but not in the expected way")
#----------------------------------------------------------------------
@@ -658,11 +661,28 @@ def checkout_peg_rev_date(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- # note the current time to use it as peg revision date.
- current_time = time.strftime("%Y-%m-%dT%H:%M:%S")
-
- # sleep till the next second.
- time.sleep(1.1)
+ ## Get svn:date.
+ exit_code, output, errput = svntest.main.run_svn(None, 'propget', 'svn:date',
+ '--revprop', '-r1',
+ '--strict',
+ sbox.repo_url)
+ if exit_code or errput != [] or len(output) != 1:
+ raise svntest.Failure("svn:date propget failed")
+ r1_string = output[0]
+
+ ## Increment the svn:date date by one microsecond.
+ # TODO: pass tzinfo=UTC to datetime.datetime()
+ date_pattern = re.compile(r'(\d+)-(\d+)-(\d+)T(\d\d):(\d\d):(\d\d)\.(\d+)Z$')
+ r1_time = datetime.datetime(*map(int, date_pattern.match(r1_string).groups()))
+ peg_time = r1_time + datetime.timedelta(microseconds=1)
+ assert r1_time != peg_time
+ # peg_string is, by all likelihood, younger than r1's svn:date and older than
+ # r2's svn:date. It is also not equal to either of them, so we test the
+ # binary search of svn:date values.
+ peg_string = '%04d-%02d-%02dT%02d:%02d:%02d.%06dZ' % \
+ tuple(getattr(peg_time, x)
+ for x in ["year", "month", "day", "hour", "minute",
+ "second", "microsecond"])
# create a new revision
mu_path = os.path.join(wc_dir, 'A', 'mu')
@@ -671,7 +691,7 @@ def checkout_peg_rev_date(sbox):
svntest.actions.run_and_verify_svn(None, None, [],
'ci', '-m', 'changed file mu', wc_dir)
- # now checkout the repo@current_time in another folder, this should create our
+ # now checkout the repo@peg_string in another folder, this should create our
# initial wc without the change in mu.
checkout_target = sbox.add_wc_path('checkout')
os.mkdir(checkout_target)
@@ -684,7 +704,24 @@ def checkout_peg_rev_date(sbox):
# use an old date to checkout, that way we're sure we get the first revision
svntest.actions.run_and_verify_checkout(sbox.repo_url +
- '@{' + current_time + '}',
+ '@{' + peg_string + '}',
+ checkout_target,
+ expected_output,
+ expected_wc)
+
+ # now try another checkout with repo@r1_string
+ checkout_target = sbox.add_wc_path('checkout2')
+ os.mkdir(checkout_target)
+
+ expected_output = svntest.main.greek_state.copy()
+ expected_output.wc_dir = checkout_target
+ expected_output.tweak(status='A ', contents=None)
+
+ expected_wc = svntest.main.greek_state.copy()
+
+ # use an old date to checkout, that way we're sure we get the first revision
+ svntest.actions.run_and_verify_checkout(sbox.repo_url +
+ '@{' + r1_string + '}',
checkout_target,
expected_output,
expected_wc)
@@ -1050,7 +1087,7 @@ def checkout_wc_from_drive(sbox):
svntest.main.safe_rmtree(sbox.wc_dir)
os.mkdir(sbox.wc_dir)
- # create a virtual drive to the working copy folder
+ # create a virtual drive to the repository folder
drive = find_the_next_available_drive_letter()
if drive is None:
raise svntest.Skip
@@ -1086,8 +1123,49 @@ def checkout_wc_from_drive(sbox):
})
svntest.actions.run_and_verify_checkout(repo_url, wc_dir,
expected_output, expected_wc,
- None, None, None, None,
- '--force')
+ None, None, None, None)
+
+ wc2_dir = sbox.add_wc_path('2')
+ expected_output = wc.State(wc2_dir, {
+ 'D' : Item(status='A '),
+ 'D/H' : Item(status='A '),
+ 'D/H/psi' : Item(status='A '),
+ 'D/H/chi' : Item(status='A '),
+ 'D/H/omega' : Item(status='A '),
+ 'D/G' : Item(status='A '),
+ 'D/G/tau' : Item(status='A '),
+ 'D/G/pi' : Item(status='A '),
+ 'D/G/rho' : Item(status='A '),
+ 'D/gamma' : Item(status='A '),
+ 'C' : Item(status='A '),
+ 'mu' : Item(status='A '),
+ 'B' : Item(status='A '),
+ 'B/E' : Item(status='A '),
+ 'B/E/alpha' : Item(status='A '),
+ 'B/E/beta' : Item(status='A '),
+ 'B/F' : Item(status='A '),
+ 'B/lambda' : Item(status='A '),
+ })
+ svntest.actions.run_and_verify_checkout(repo_url + '/A', wc2_dir,
+ expected_output, None,
+ None, None, None, None)
+
+ wc3_dir = sbox.add_wc_path('3')
+ expected_output = wc.State(wc3_dir, {
+ 'H' : Item(status='A '),
+ 'H/psi' : Item(status='A '),
+ 'H/chi' : Item(status='A '),
+ 'H/omega' : Item(status='A '),
+ 'G' : Item(status='A '),
+ 'G/tau' : Item(status='A '),
+ 'G/pi' : Item(status='A '),
+ 'G/rho' : Item(status='A '),
+ 'gamma' : Item(status='A '),
+ })
+
+ svntest.actions.run_and_verify_checkout(repo_url + '/A/D', wc3_dir,
+ expected_output, None,
+ None, None, None, None)
finally:
os.chdir(was_cwd)
diff --git a/subversion/tests/cmdline/commit_tests.py b/subversion/tests/cmdline/commit_tests.py
index 3500b49..02ba0c6 100755
--- a/subversion/tests/cmdline/commit_tests.py
+++ b/subversion/tests/cmdline/commit_tests.py
@@ -31,6 +31,8 @@ import sys, os, re
import svntest
from svntest import wc
+from prop_tests import binary_mime_type_on_text_file_warning
+
# (abbreviation)
Skip = svntest.testcase.Skip_deco
SkipUnless = svntest.testcase.SkipUnless_deco
@@ -160,7 +162,7 @@ def commit_one_file(sbox):
expected_status = make_standard_slew_of_changes(wc_dir)
- omega_path = os.path.join(wc_dir, 'A', 'D', 'H', 'omega')
+ omega_path = sbox.ospath('A/D/H/omega')
# Create expected state.
expected_output = svntest.wc.State(wc_dir, {
@@ -186,7 +188,7 @@ def commit_one_new_file(sbox):
expected_status = make_standard_slew_of_changes(wc_dir)
- gloo_path = os.path.join(wc_dir, 'A', 'D', 'H', 'gloo')
+ gloo_path = sbox.ospath('A/D/H/gloo')
# Create expected state.
expected_output = svntest.wc.State(wc_dir, {
@@ -212,8 +214,9 @@ def commit_one_new_binary_file(sbox):
expected_status = make_standard_slew_of_changes(wc_dir)
- gloo_path = os.path.join(wc_dir, 'A', 'D', 'H', 'gloo')
- svntest.main.run_svn(None, 'propset', 'svn:mime-type',
+ gloo_path = sbox.ospath('A/D/H/gloo')
+ svntest.main.run_svn(binary_mime_type_on_text_file_warning,
+ 'propset', 'svn:mime-type',
'application/octet-stream', gloo_path)
# Create expected state.
@@ -241,12 +244,12 @@ def commit_multiple_targets(sbox):
# This test will commit three targets: psi, B, and pi. In that order.
# Make local mods to many files.
- AB_path = os.path.join(wc_dir, 'A', 'B')
- lambda_path = os.path.join(wc_dir, 'A', 'B', 'lambda')
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
- pi_path = os.path.join(wc_dir, 'A', 'D', 'G', 'pi')
- omega_path = os.path.join(wc_dir, 'A', 'D', 'H', 'omega')
- psi_path = os.path.join(wc_dir, 'A', 'D', 'H', 'psi')
+ AB_path = sbox.ospath('A/B')
+ lambda_path = sbox.ospath('A/B/lambda')
+ rho_path = sbox.ospath('A/D/G/rho')
+ pi_path = sbox.ospath('A/D/G/pi')
+ omega_path = sbox.ospath('A/D/H/omega')
+ psi_path = sbox.ospath('A/D/H/psi')
svntest.main.file_append(lambda_path, 'new appended text for lambda')
svntest.main.file_append(rho_path, 'new appended text for rho')
svntest.main.file_append(pi_path, 'new appended text for pi')
@@ -255,7 +258,7 @@ def commit_multiple_targets(sbox):
# Just for kicks, add a property to A/D/G as well. We'll make sure
# that it *doesn't* get committed.
- ADG_path = os.path.join(wc_dir, 'A', 'D', 'G')
+ ADG_path = sbox.ospath('A/D/G')
svntest.main.run_svn(None, 'propset', 'foo', 'bar', ADG_path)
# Create expected output tree for 'svn ci'. We should see changes
@@ -295,12 +298,12 @@ def commit_multiple_targets_2(sbox):
# This test will commit four targets: psi, B, omega and pi. In that order.
# Make local mods to many files.
- AB_path = os.path.join(wc_dir, 'A', 'B')
- lambda_path = os.path.join(wc_dir, 'A', 'B', 'lambda')
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
- pi_path = os.path.join(wc_dir, 'A', 'D', 'G', 'pi')
- omega_path = os.path.join(wc_dir, 'A', 'D', 'H', 'omega')
- psi_path = os.path.join(wc_dir, 'A', 'D', 'H', 'psi')
+ AB_path = sbox.ospath('A/B')
+ lambda_path = sbox.ospath('A/B/lambda')
+ rho_path = sbox.ospath('A/D/G/rho')
+ pi_path = sbox.ospath('A/D/G/pi')
+ omega_path = sbox.ospath('A/D/H/omega')
+ psi_path = sbox.ospath('A/D/H/psi')
svntest.main.file_append(lambda_path, 'new appended text for lambda')
svntest.main.file_append(rho_path, 'new appended text for rho')
svntest.main.file_append(pi_path, 'new appended text for pi')
@@ -309,7 +312,7 @@ def commit_multiple_targets_2(sbox):
# Just for kicks, add a property to A/D/G as well. We'll make sure
# that it *doesn't* get committed.
- ADG_path = os.path.join(wc_dir, 'A', 'D', 'G')
+ ADG_path = sbox.ospath('A/D/G')
svntest.main.run_svn(None, 'propset', 'foo', 'bar', ADG_path)
# Created expected output tree for 'svn ci'. We should see changes
@@ -350,7 +353,7 @@ def commit_inclusive_dir(sbox):
expected_status = make_standard_slew_of_changes(wc_dir)
- D_path = os.path.join(wc_dir, 'A', 'D')
+ D_path = sbox.ospath('A/D')
# Create expected state.
expected_output = svntest.wc.State(wc_dir, {
@@ -440,7 +443,7 @@ def commit_unversioned_thing(sbox):
wc_dir = sbox.wc_dir
# Create an unversioned file in the wc.
- svntest.main.file_append(os.path.join(wc_dir, 'blorg'), "nothing to see")
+ svntest.main.file_append(sbox.ospath('blorg'), "nothing to see")
# Commit a non-existent file and *expect* failure:
svntest.actions.run_and_verify_commit(wc_dir,
@@ -459,7 +462,7 @@ def nested_dir_replacements(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- A_D = os.path.join(wc_dir, 'A', 'D')
+ A_D = sbox.ospath('A/D')
# Delete and re-add A/D (a replacement), and A/D/H (another replace).
svntest.main.run_svn(None, 'rm', A_D)
@@ -542,7 +545,7 @@ def hudson_part_1(sbox):
wc_dir = sbox.wc_dir
# Remove gamma from the working copy.
- gamma_path = os.path.join(wc_dir, 'A', 'D', 'gamma')
+ gamma_path = sbox.ospath('A/D/gamma')
svntest.main.run_svn(None, 'rm', gamma_path)
# Create expected commit output.
@@ -593,7 +596,7 @@ def hudson_part_1_variation_1(sbox):
wc_dir = sbox.wc_dir
# Remove H from the working copy.
- H_path = os.path.join(wc_dir, 'A', 'D', 'H')
+ H_path = sbox.ospath('A/D/H')
svntest.main.run_svn(None, 'rm', H_path)
# Create expected commit output.
@@ -644,7 +647,7 @@ def hudson_part_1_variation_2(sbox):
wc_dir = sbox.wc_dir
# Remove gamma from the working copy.
- gamma_path = os.path.join(wc_dir, 'A', 'D', 'gamma')
+ gamma_path = sbox.ospath('A/D/gamma')
svntest.main.run_svn(None, 'rm', gamma_path)
# Create expected commit output.
@@ -703,8 +706,8 @@ def hudson_part_2(sbox):
wc_dir = sbox.wc_dir
# Remove gamma from the working copy.
- D_path = os.path.join(wc_dir, 'A', 'D')
- gamma_path = os.path.join(wc_dir, 'A', 'D', 'gamma')
+ D_path = sbox.ospath('A/D')
+ gamma_path = sbox.ospath('A/D/gamma')
svntest.main.run_svn(None, 'rm', gamma_path)
# Create expected commit output.
@@ -751,8 +754,8 @@ def hudson_part_2_1(sbox):
wc_dir = sbox.wc_dir
# Move all the files in H to G
- H_path = os.path.join(wc_dir, 'A', 'D', 'H')
- G_path = os.path.join(wc_dir, 'A', 'D', 'G')
+ H_path = sbox.ospath('A/D/H')
+ G_path = sbox.ospath('A/D/G')
chi_path = os.path.join(H_path, 'chi')
psi_path = os.path.join(H_path, 'psi')
omega_path = os.path.join(H_path, 'omega')
@@ -842,7 +845,7 @@ fp.close()"""
hook_format % "post_commit_hook")
# Modify iota just so there is something to commit.
- iota_path = os.path.join(wc_dir, "iota")
+ iota_path = sbox.ospath('iota')
svntest.main.file_append(iota_path, "More stuff in iota")
# Commit, no output expected.
@@ -880,10 +883,10 @@ def merge_mixed_revisions(sbox):
wc_dir = sbox.wc_dir
# Make some convenient paths.
- iota_path = os.path.join(wc_dir, 'iota')
- H_path = os.path.join(wc_dir, 'A', 'D', 'H')
- chi_path = os.path.join(wc_dir, 'A', 'D', 'H', 'chi')
- omega_path = os.path.join(wc_dir, 'A', 'D', 'H', 'omega')
+ iota_path = sbox.ospath('iota')
+ H_path = sbox.ospath('A/D/H')
+ chi_path = sbox.ospath('A/D/H/chi')
+ omega_path = sbox.ospath('A/D/H/omega')
# Here's the reproduction formula, in 5 parts.
# Hoo, what a buildup of state!
@@ -1029,15 +1032,15 @@ def commit_uri_unsafe(sbox):
nasty_name = '#![]{}()<>%'
# Make some convenient paths.
- hash_dir = os.path.join(wc_dir, '#hash#')
+ hash_dir = sbox.ospath('#hash#')
nasty_dir = os.path.join(wc_dir, nasty_name)
- space_path = os.path.join(wc_dir, 'A', 'D', 'space path')
- bang_path = os.path.join(wc_dir, 'A', 'D', 'H', 'bang!')
- bracket_path = os.path.join(wc_dir, 'A', 'D', 'H', 'bra[ket')
- brace_path = os.path.join(wc_dir, 'A', 'D', 'H', 'bra{e')
+ space_path = sbox.ospath('A/D/space path')
+ bang_path = sbox.ospath('A/D/H/bang!')
+ bracket_path = sbox.ospath('A/D/H/bra[ket')
+ brace_path = sbox.ospath('A/D/H/bra{e')
angle_path = os.path.join(wc_dir, 'A', 'D', 'H', angle_name)
- paren_path = os.path.join(wc_dir, 'A', 'D', 'pare)(theses')
- percent_path = os.path.join(wc_dir, '#hash#', 'percen%')
+ paren_path = sbox.ospath('A/D/pare)(theses')
+ percent_path = sbox.ospath('#hash#/percen%')
nasty_path = os.path.join(wc_dir, 'A', nasty_name)
os.mkdir(hash_dir)
@@ -1099,8 +1102,8 @@ def commit_deleted_edited(sbox):
wc_dir = sbox.wc_dir
# Make some convenient paths.
- iota_path = os.path.join(wc_dir, 'iota')
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ iota_path = sbox.ospath('iota')
+ mu_path = sbox.ospath('A/mu')
# Edit the files.
svntest.main.file_append(iota_path, "This file has been edited.")
@@ -1134,13 +1137,13 @@ def commit_in_dir_scheduled_for_addition(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, 'A')
- Z_path = os.path.join(wc_dir, 'Z')
+ A_path = sbox.ospath('A')
+ Z_path = sbox.ospath('Z')
Z_abspath = os.path.abspath(Z_path)
- mu_path = os.path.join(wc_dir, 'Z', 'mu')
+ mu_path = sbox.ospath('Z/mu')
svntest.main.run_svn(None, 'move', A_path, Z_path)
-
+
# Make sure mu is a committable
svntest.main.file_write(mu_path, "xxxx")
@@ -1154,7 +1157,7 @@ def commit_in_dir_scheduled_for_addition(sbox):
"' is not known to exist in the",
mu_path)
- Q_path = os.path.join(wc_dir, 'Q')
+ Q_path = sbox.ospath('Q')
Q_abspath = os.path.abspath(Q_path)
bloo_path = os.path.join(Q_path, 'bloo')
@@ -1183,7 +1186,7 @@ def commit_in_dir_scheduled_for_addition(sbox):
"svn: E200009: '" +
re.escape(Z_abspath) +
"' is not known to exist in the.*",
- R_path)
+ R_path)
#----------------------------------------------------------------------
@@ -1193,7 +1196,7 @@ def commit_rmd_and_deleted_file(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
# 'svn remove' mu
svntest.main.run_svn(None, 'rm', mu_path)
@@ -1214,7 +1217,7 @@ def commit_add_file_twice(sbox):
wc_dir = sbox.wc_dir
# Create a file
- gloo_path = os.path.join(wc_dir, 'A', 'D', 'H', 'gloo')
+ gloo_path = sbox.ospath('A/D/H/gloo')
svntest.main.file_append(gloo_path, "hello")
svntest.main.run_svn(None, 'add', gloo_path)
@@ -1247,7 +1250,7 @@ def commit_add_file_twice(sbox):
svntest.actions.run_and_verify_commit(wc_dir,
None,
None,
- "already exists",
+ "E160020: File.*already exists",
wc_dir)
#----------------------------------------------------------------------
@@ -1266,7 +1269,7 @@ def commit_from_long_dir(sbox):
abs_wc_dir = os.path.realpath(os.path.join(was_dir, wc_dir))
# something to commit
- svntest.main.file_append(os.path.join(wc_dir, 'iota'), "modified iota")
+ svntest.main.file_append(sbox.ospath('iota'), "modified iota")
# Create expected output tree.
expected_output = svntest.wc.State('', {
@@ -1297,7 +1300,7 @@ def commit_with_lock(sbox):
# modify gamma and lock its directory
wc_dir = sbox.wc_dir
- D_path = os.path.join(wc_dir, 'A', 'D')
+ D_path = sbox.ospath('A/D')
gamma_path = os.path.join(D_path, 'gamma')
svntest.main.file_append(gamma_path, "modified gamma")
svntest.actions.lock_admin_dir(D_path)
@@ -1375,7 +1378,7 @@ def failed_commit(sbox):
svntest.actions.duplicate_dir(wc_dir, other_wc_dir)
# Make different changes in the two working copies
- iota_path = os.path.join(wc_dir, "iota")
+ iota_path = sbox.ospath('iota')
svntest.main.file_append(iota_path, "More stuff in iota")
other_iota_path = os.path.join(other_wc_dir, "iota")
@@ -1414,7 +1417,7 @@ def commit_multiple_wc_nested(sbox):
wc_dir = sbox.wc_dir
# Checkout a second working copy
- wc2_dir = os.path.join(wc_dir, 'A', 'wc2')
+ wc2_dir = sbox.ospath('A/wc2')
url = sbox.repo_url
svntest.actions.run_and_verify_svn("Output on stderr where none expected",
svntest.verify.AnyOutput, [],
@@ -1422,7 +1425,7 @@ def commit_multiple_wc_nested(sbox):
url, wc2_dir)
# Modify both working copies
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
svntest.main.file_append(mu_path, 'appended mu text')
lambda2_path = os.path.join(wc2_dir, 'A', 'B', 'lambda')
svntest.main.file_append(lambda2_path, 'appended lambda2 text')
@@ -1459,8 +1462,8 @@ def commit_multiple_wc(sbox):
svntest.sandbox._cleanup_test_path(wc_dir)
# Checkout two wcs
- wc1_dir = os.path.join(wc_dir, 'wc1')
- wc2_dir = os.path.join(wc_dir, 'wc2')
+ wc1_dir = sbox.ospath('wc1')
+ wc2_dir = sbox.ospath('wc2')
url = sbox.repo_url
svntest.actions.run_and_verify_svn("Output on stderr where none expected",
svntest.verify.AnyOutput, [],
@@ -1515,8 +1518,8 @@ def commit_multiple_wc_multiple_repos(sbox):
svntest.sandbox._cleanup_test_path(wc_dir)
# Checkout two wcs
- wc1_dir = os.path.join(wc_dir, 'wc1')
- wc2_dir = os.path.join(wc_dir, 'wc2')
+ wc1_dir = sbox.ospath('wc1')
+ wc2_dir = sbox.ospath('wc2')
svntest.actions.run_and_verify_svn("Output on stderr where none expected",
svntest.verify.AnyOutput, [],
'checkout',
@@ -1589,28 +1592,28 @@ def commit_nonrecursive(sbox):
# These paths are relative to the top of the test's working copy.
file1_path = 'file1'
dir1_path = 'dir1'
- file2_path = os.path.join('dir1', 'file2')
- file3_path = os.path.join('dir1', 'file3')
- dir2_path = os.path.join('dir1', 'dir2')
- file4_path = os.path.join('dir1', 'dir2', 'file4')
+ file2_path = 'dir1/file2'
+ file3_path = 'dir1/file3'
+ dir2_path = 'dir1/dir2'
+ file4_path = 'dir1/dir2/file4'
# Create the new files and directories.
- svntest.main.file_append(os.path.join(wc_dir, file1_path), 'this is file1')
- os.mkdir(os.path.join(wc_dir, dir1_path))
- svntest.main.file_append(os.path.join(wc_dir, file2_path), 'this is file2')
- svntest.main.file_append(os.path.join(wc_dir, file3_path), 'this is file3')
- os.mkdir(os.path.join(wc_dir, dir2_path))
- svntest.main.file_append(os.path.join(wc_dir, file4_path), 'this is file4')
+ svntest.main.file_append(sbox.ospath(file1_path), 'this is file1')
+ os.mkdir(sbox.ospath(dir1_path))
+ svntest.main.file_append(sbox.ospath(file2_path), 'this is file2')
+ svntest.main.file_append(sbox.ospath(file3_path), 'this is file3')
+ os.mkdir(sbox.ospath(dir2_path))
+ svntest.main.file_append(sbox.ospath(file4_path), 'this is file4')
# Add them to version control.
svntest.actions.run_and_verify_svn(None, svntest.verify.AnyOutput, [],
'add', '--depth=empty',
- os.path.join(wc_dir, file1_path),
- os.path.join(wc_dir, dir1_path),
- os.path.join(wc_dir, file2_path),
- os.path.join(wc_dir, file3_path),
- os.path.join(wc_dir, dir2_path),
- os.path.join(wc_dir, file4_path))
+ sbox.ospath(file1_path),
+ sbox.ospath(dir1_path),
+ sbox.ospath(file2_path),
+ sbox.ospath(file3_path),
+ sbox.ospath(dir2_path),
+ sbox.ospath(file4_path))
# Commit. We should see all 6 items (2 dirs, 4 files) get sent.
expected_output = svntest.wc.State(
@@ -1639,12 +1642,12 @@ def commit_nonrecursive(sbox):
expected_status,
None,
'-N',
- os.path.join(wc_dir, file1_path),
- os.path.join(wc_dir, dir1_path),
- os.path.join(wc_dir, file2_path),
- os.path.join(wc_dir, file3_path),
- os.path.join(wc_dir, dir2_path),
- os.path.join(wc_dir, file4_path))
+ sbox.ospath(file1_path),
+ sbox.ospath(dir1_path),
+ sbox.ospath(file2_path),
+ sbox.ospath(file3_path),
+ sbox.ospath(dir2_path),
+ sbox.ospath(file4_path))
#######################################################################
###
@@ -1707,28 +1710,28 @@ def commit_nonrecursive(sbox):
# Now add these directories and files, except the last:
dirA_path = 'dirA'
- fileA_path = os.path.join('dirA', 'fileA')
- fileB_path = os.path.join('dirA', 'fileB')
- dirB_path = os.path.join('dirA', 'dirB')
- nope_1_path = os.path.join(dirB_path, 'nope_1')
- nope_2_path = os.path.join(dirB_path, 'nope_2')
+ fileA_path = 'dirA/fileA'
+ fileB_path = 'dirA/fileB'
+ dirB_path = 'dirA/dirB'
+ nope_1_path = 'dirA/dirB/nope_1'
+ nope_2_path = 'dirA/dirB/nope_2'
# Create the new files and directories.
- os.mkdir(os.path.join(wc_dir, dirA_path))
- svntest.main.file_append(os.path.join(wc_dir, fileA_path), 'fileA')
- svntest.main.file_append(os.path.join(wc_dir, fileB_path), 'fileB')
- os.mkdir(os.path.join(wc_dir, dirB_path))
- svntest.main.file_append(os.path.join(wc_dir, nope_1_path), 'nope_1')
- svntest.main.file_append(os.path.join(wc_dir, nope_2_path), 'nope_2')
+ os.mkdir(sbox.ospath(dirA_path))
+ svntest.main.file_append(sbox.ospath(fileA_path), 'fileA')
+ svntest.main.file_append(sbox.ospath(fileB_path), 'fileB')
+ os.mkdir(sbox.ospath(dirB_path))
+ svntest.main.file_append(sbox.ospath(nope_1_path), 'nope_1')
+ svntest.main.file_append(sbox.ospath(nope_2_path), 'nope_2')
# Add them to version control.
svntest.actions.run_and_verify_svn(None, svntest.verify.AnyOutput, [],
'add', '-N',
- os.path.join(wc_dir, dirA_path),
- os.path.join(wc_dir, fileA_path),
+ sbox.ospath(dirA_path),
+ sbox.ospath(fileA_path),
# don't add fileB
- os.path.join(wc_dir, dirB_path),
- os.path.join(wc_dir, nope_1_path),
+ sbox.ospath(dirB_path),
+ sbox.ospath(nope_1_path),
# don't add nope_2
)
@@ -1765,7 +1768,7 @@ def commit_nonrecursive(sbox):
expected_output,
expected_status,
None,
- '-N', os.path.join(wc_dir, dirA_path))
+ '-N', sbox.ospath(dirA_path))
#----------------------------------------------------------------------
# Regression for #1017: ra_neon was allowing the deletion of out-of-date
@@ -1791,7 +1794,7 @@ def commit_out_of_date_deletions(sbox):
wc_dir = sbox.wc_dir
# Need another empty dir
- I_path = os.path.join(wc_dir, 'A', 'I')
+ I_path = sbox.ospath('A/I')
os.mkdir(I_path)
svntest.main.run_svn(None, 'add', I_path)
svntest.main.run_svn(None, 'ci', '-m', 'prep', wc_dir)
@@ -1802,19 +1805,19 @@ def commit_out_of_date_deletions(sbox):
svntest.actions.duplicate_dir(wc_dir, wc_backup)
# Edits in wc 1
- C_path = os.path.join(wc_dir, 'A', 'C')
- omega_path = os.path.join(wc_dir, 'A', 'D', 'H', 'omega')
- alpha_path = os.path.join(wc_dir, 'A', 'B', 'E', 'alpha')
+ C_path = sbox.ospath('A/C')
+ omega_path = sbox.ospath('A/D/H/omega')
+ alpha_path = sbox.ospath('A/B/E/alpha')
svntest.main.run_svn(None, 'propset', 'fooprop', 'foopropval', C_path)
svntest.main.file_append(omega_path, 'appended omega text')
svntest.main.run_svn(None, 'propset', 'fooprop', 'foopropval', alpha_path)
# Deletions in wc 1
- I_path = os.path.join(wc_dir, 'A', 'I')
- F_path = os.path.join(wc_dir, 'A', 'B', 'F')
- chi_path = os.path.join(wc_dir, 'A', 'D', 'H', 'chi')
- beta_path = os.path.join(wc_dir, 'A', 'B', 'E', 'beta')
- psi_path = os.path.join(wc_dir, 'A', 'D', 'H', 'psi')
+ I_path = sbox.ospath('A/I')
+ F_path = sbox.ospath('A/B/F')
+ chi_path = sbox.ospath('A/D/H/chi')
+ beta_path = sbox.ospath('A/B/E/beta')
+ psi_path = sbox.ospath('A/D/H/psi')
svntest.main.run_svn(None, 'rm', I_path, F_path, chi_path, beta_path,
psi_path)
@@ -1871,8 +1874,8 @@ def commit_with_bad_log_message(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, 'iota')
- log_msg_path = os.path.join(wc_dir, 'log-message')
+ iota_path = sbox.ospath('iota')
+ log_msg_path = sbox.ospath('log-message')
# Make a random change, so there's something to commit.
svntest.main.file_append(iota_path, 'fish')
@@ -1895,8 +1898,8 @@ def commit_with_mixed_line_endings(sbox):
expected_status = make_standard_slew_of_changes(wc_dir)
- iota_path = os.path.join(wc_dir, 'iota')
- log_msg_path = os.path.join(wc_dir, 'log-message')
+ iota_path = sbox.ospath('iota')
+ log_msg_path = sbox.ospath('log-message')
# Make a random change, so there's something to commit.
svntest.main.file_append(iota_path, 'kebab')
@@ -1919,8 +1922,8 @@ def commit_with_mixed_line_endings_in_ignored_part(sbox):
expected_status = make_standard_slew_of_changes(wc_dir)
- iota_path = os.path.join(wc_dir, 'iota')
- log_msg_path = os.path.join(wc_dir, 'log-message')
+ iota_path = sbox.ospath('iota')
+ log_msg_path = sbox.ospath('log-message')
# Make a random change, so there's something to commit.
svntest.main.file_append(iota_path, 'cheeseburger')
@@ -1974,6 +1977,7 @@ def from_wc_top_with_bad_editor(sbox):
exit_code, out, err = svntest.actions.run_and_verify_svn(
"Commit succeeded when should have failed.",
None, svntest.verify.AnyOutput,
+ '--force-interactive',
'ci', '--editor-cmd', 'no_such-editor')
err = " ".join([x.strip() for x in err])
@@ -1990,7 +1994,7 @@ def mods_in_schedule_delete(sbox):
wc_dir = sbox.wc_dir
# Schedule a delete, then put in local mods
- C_path = os.path.join(wc_dir, 'A', 'C')
+ C_path = sbox.ospath('A/C')
svntest.actions.run_and_verify_svn(None, svntest.verify.AnyOutput, [],
'rm', C_path)
@@ -2026,8 +2030,8 @@ def tab_test(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- tab_file = os.path.join(wc_dir, 'A', "tab\tfile")
- tab_dir = os.path.join(wc_dir, 'A', "tab\tdir")
+ tab_file = sbox.ospath('A/tab\tfile')
+ tab_dir = sbox.ospath('A/tab\tdir')
source_url = sbox.repo_url + "/source_dir"
tab_url = sbox.repo_url + "/tab%09dir"
@@ -2091,30 +2095,30 @@ def local_mods_are_not_commits(sbox):
# copy wc->wc
svntest.actions.run_and_verify_svn(None, None, expected_error,
'cp', '-m', 'log msg',
- os.path.join(wc_dir, 'iota'),
- os.path.join(wc_dir, 'iota2'))
+ sbox.ospath('iota'),
+ sbox.ospath('iota2'))
# copy repos->wc
svntest.actions.run_and_verify_svn(None, None, expected_error,
'cp', '-m', 'log msg',
sbox.repo_url + "/iota",
- os.path.join(wc_dir, 'iota2'))
+ sbox.ospath('iota2'))
# delete
svntest.actions.run_and_verify_svn(None, None, expected_error,
'rm', '-m', 'log msg',
- os.path.join(wc_dir, 'A', 'D', 'gamma'))
+ sbox.ospath('A/D/gamma'))
# mkdir
svntest.actions.run_and_verify_svn(None, None, expected_error,
'mkdir', '-m', 'log msg',
- os.path.join(wc_dir, 'newdir'))
+ sbox.ospath('newdir'))
# rename
svntest.actions.run_and_verify_svn(None, None, expected_error,
'cp', '-m', 'log msg',
- os.path.join(wc_dir, 'A', 'mu'),
- os.path.join(wc_dir, 'A', 'yu'))
+ sbox.ospath('A/mu'),
+ sbox.ospath('A/yu'))
#----------------------------------------------------------------------
@@ -2136,7 +2140,7 @@ def post_commit_hook_test(sbox):
svntest.actions.create_failing_hook(repo_dir, "post-commit", error_msg)
# Modify iota just so there is something to commit.
- iota_path = os.path.join(wc_dir, "iota")
+ iota_path = sbox.ospath('iota')
svntest.main.file_append(iota_path, "lakalakalakalaka")
# Now, commit and examine the output (we happen to know that the
@@ -2163,7 +2167,7 @@ def commit_same_folder_in_targets(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
svntest.main.file_append(iota_path, "added extra line to file iota")
@@ -2196,8 +2200,8 @@ def commit_inconsistent_eol(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, 'iota')
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ iota_path = sbox.ospath('iota')
+ mu_path = sbox.ospath('A/mu')
svntest.main.run_svn(None, 'propset', 'svn:eol-style', 'native', iota_path)
svntest.main.file_append_binary(iota_path,
@@ -2263,8 +2267,8 @@ def commit_with_revprop(sbox):
wc_dir = sbox.wc_dir
expected_status = make_standard_slew_of_changes(wc_dir)
- omega_path = os.path.join(wc_dir, 'A', 'D', 'H', 'omega')
- gloo_path = os.path.join(wc_dir, 'A', 'D', 'H', 'gloo')
+ omega_path = sbox.ospath('A/D/H/omega')
+ gloo_path = sbox.ospath('A/D/H/gloo')
expected_output = svntest.wc.State(wc_dir, {
'A/D/H/omega' : Item(verb='Sending'),
'A/D/H/gloo' : Item(verb='Adding'),
@@ -2296,8 +2300,8 @@ def import_with_revprop(sbox):
"set revision props during import"
sbox.build()
- local_dir = os.path.join(sbox.wc_dir, 'folder')
- local_file = os.path.join(sbox.wc_dir, 'folder', 'file')
+ local_dir = sbox.ospath('folder')
+ local_file = sbox.ospath('folder/file')
os.mkdir(local_dir)
svntest.main.file_write(local_file, "xxxx")
@@ -2345,7 +2349,7 @@ def copy_WC2R_with_revprop(sbox):
sbox.build()
remote_dir = sbox.repo_url + "/dir"
- local_dir = os.path.join(sbox.wc_dir, 'folder')
+ local_dir = sbox.ospath('folder')
svntest.actions.run_and_verify_svn(None, None, [],
'mkdir', local_dir)
@@ -2518,7 +2522,7 @@ def start_commit_hook_test(sbox):
svntest.actions.create_failing_hook(repo_dir, "start-commit", error_msg)
# Modify iota just so there is something to commit.
- iota_path = os.path.join(wc_dir, "iota")
+ iota_path = sbox.ospath('iota')
svntest.main.file_append(iota_path, "More stuff in iota")
# Commit, expect error code 1
@@ -2541,6 +2545,16 @@ def start_commit_hook_test(sbox):
'STDERR',
expected_stderr, actual_stderr)
+ # Now list the txns in the repo. The list should be empty.
+ exit_code, output, errput = svntest.main.run_svnadmin('lstxns',
+ sbox.repo_dir)
+ svntest.verify.compare_and_display_lines(
+ "Error running 'svnadmin lstxns'.",
+ 'STDERR', [], errput)
+ svntest.verify.compare_and_display_lines(
+ "Output of 'svnadmin lstxns' is unexpected.",
+ 'STDOUT', [], output)
+
#----------------------------------------------------------------------
@Issue(3553)
def pre_commit_hook_test(sbox):
@@ -2558,7 +2572,7 @@ def pre_commit_hook_test(sbox):
svntest.actions.create_failing_hook(repo_dir, "pre-commit", error_msg)
# Modify iota just so there is something to commit.
- iota_path = os.path.join(wc_dir, "iota")
+ iota_path = sbox.ospath('iota')
svntest.main.file_append(iota_path, "More stuff in iota")
# Commit, expect error code 1
@@ -2624,9 +2638,9 @@ def changelist_near_conflict(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, "iota")
- mu_path = os.path.join(wc_dir, "A", "mu")
- gloo_path = os.path.join(wc_dir, "A", "D", "H", "gloo")
+ iota_path = sbox.ospath('iota')
+ mu_path = sbox.ospath('A/mu')
+ gloo_path = sbox.ospath('A/D/H/gloo')
expected_status = make_standard_slew_of_changes(wc_dir)
@@ -2665,7 +2679,7 @@ def commit_out_of_date_file(sbox):
wc_backup = sbox.add_wc_path('backup')
svntest.actions.duplicate_dir(wc_dir, wc_backup)
- pi_path = os.path.join(wc_dir, 'A', 'D', 'G', 'pi')
+ pi_path = sbox.ospath('A/D/G/pi')
backup_pi_path = os.path.join(wc_backup, 'A', 'D', 'G', 'pi')
svntest.main.file_append(pi_path, "new line\n")
@@ -2708,7 +2722,7 @@ def start_commit_detect_capabilities(sbox):
svntest.main.create_python_hook_script(start_commit_hook, hook_text)
# Commit something.
- iota_path = os.path.join(wc_dir, "iota")
+ iota_path = sbox.ospath('iota')
svntest.main.file_append(iota_path, "More stuff in iota")
svntest.actions.run_and_verify_svn(None, [], [], 'ci', '--quiet',
'-m', 'log msg', wc_dir)
@@ -2730,9 +2744,9 @@ def commit_added_missing(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- a_path = os.path.join(wc_dir, 'A', 'a.txt')
- b_path = os.path.join(wc_dir, 'A', 'b.txt')
+ mu_path = sbox.ospath('A/mu')
+ a_path = sbox.ospath('A/a.txt')
+ b_path = sbox.ospath('A/b.txt')
# Make two copies of mu: a and b
svntest.main.run_svn(None, 'cp', mu_path, a_path)
@@ -2765,9 +2779,9 @@ def tree_conflicts_block_commit(sbox):
svntest.actions.build_greek_tree_conflicts(sbox)
wc_dir = sbox.wc_dir
- A = os.path.join(wc_dir, 'A')
- D = os.path.join(wc_dir, 'A', 'D')
- G = os.path.join(wc_dir, 'A', 'D', 'G')
+ A = sbox.ospath('A')
+ D = sbox.ospath('A/D')
+ G = sbox.ospath('A/D/G')
error_re = "remains in conflict"
commit_fails_at_path(wc_dir, wc_dir, error_re)
@@ -2792,7 +2806,7 @@ def tree_conflicts_resolved(sbox):
svntest.actions.duplicate_dir(wc_dir, wc_dir_2)
# Mark the tree conflict victims as resolved
- G = os.path.join(wc_dir, 'A', 'D', 'G')
+ G = sbox.ospath('A/D/G')
victims = [ os.path.join(G, v) for v in ['pi', 'rho', 'tau'] ]
svntest.actions.run_and_verify_resolved(victims)
@@ -2818,7 +2832,7 @@ def commit_multiple_nested_deletes(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- A = os.path.join(wc_dir, 'A')
+ A = sbox.ospath('A')
A_B = os.path.join(A, 'B')
sbox.simple_rm('A')
@@ -2846,13 +2860,14 @@ def commit_incomplete(sbox):
expected_status,
None,
wc_dir)
-
+
#----------------------------------------------------------------------
# Reported here:
# Message-ID: <4EBF0FC9.300@gmail.com>
# Date: Sun, 13 Nov 2011 13:31:05 +1300
# From: Fergus Slorach <sugref@gmail.com>
# Subject: svn commit --targets behaviour change in 1.7?
+@Issue(4059)
def commit_add_subadd(sbox):
"committing add with explicit subadd targets"
@@ -2876,6 +2891,232 @@ def commit_add_subadd(sbox):
svntest.main.run_svn(None, 'merge', '-c', '-2', './')
svntest.main.run_svn(None, 'commit', '--targets', targets_file, '-mm')
+def commit_danglers(sbox):
+ "verify committing some dangling children fails"
+
+ sbox.build(read_only=True)
+ wc_dir = sbox.wc_dir
+
+ sbox.simple_copy('A','A_copied')
+
+ A_copied = sbox.ospath('A_copied')
+ mu_copied = sbox.ospath('A_copied/mu')
+
+ svntest.main.file_write(mu_copied, "xxxx")
+
+ # We already test for this problem for some time
+ expected_error = "svn: E200009: '.*A_copied' .*exist.*yet.* '.*mu'.*part"
+ svntest.actions.run_and_verify_commit(mu_copied,
+ None,
+ None,
+ expected_error,
+ mu_copied)
+
+ # But now do the same thing via changelist filtering
+ svntest.main.run_svn(None, 'changelist', 'L', mu_copied, sbox.ospath('A/mu'))
+
+ # And try to commit A_copied itself with changelist filtering
+ svntest.actions.run_and_verify_commit(A_copied,
+ None,
+ None,
+ expected_error,
+ A_copied, '--cl', 'L')
+
+ # And on the wcroot
+ svntest.actions.run_and_verify_commit(wc_dir,
+ None,
+ None,
+ expected_error,
+ wc_dir, '--cl', 'L')
+
+#----------------------------------------------------------------------
+# Test for issue 4203: Commit of moved dir with modified file in
+# dir/subdir should bump LastChangedRev of subdir in originating WC
+@XFail()
+@Issue(4203)
+def last_changed_of_copied_subdir(sbox):
+ "last changed of copied subdir"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ sbox.simple_move('A/B','A/B_copied')
+
+ B_copied = sbox.ospath('A/B_copied')
+ E_copied = sbox.ospath('A/B_copied/E')
+ alpha_copied = sbox.ospath('A/B_copied/E/alpha')
+
+ svntest.main.file_write(alpha_copied, "xxxx")
+
+ svntest.main.run_svn(None, 'commit', wc_dir, '-mm')
+
+ expected = {'Revision' : '2',
+ 'Last Changed Rev' : '2',
+ }
+ svntest.actions.run_and_verify_info([expected], E_copied)
+
+
+@Issue(4400)
+def commit_cp_with_deep_delete(sbox):
+ "verify behavior of a copy with a deep (>=3) delete"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # Prep by adding a tree deep enough to exercise the issue.
+ sbox.simple_mkdir('A/B/E/I')
+ sbox.simple_commit(message='prep')
+ svntest.main.run_svn(None, 'up', wc_dir)
+
+ # copy the deep tree and then delete a dir 3 deep.
+ sbox.simple_copy('A','A2')
+ sbox.simple_rm('A2/B/E/I')
+
+ # come up with the expected output and status
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A2' : Item(verb='Adding'),
+ 'A2/B/E/I' : Item(verb='Deleting'),
+ })
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
+ expected_status.add({
+ 'A/B/E/I' : Item(status=' ', wc_rev='2'),
+ 'A2' : Item(status=' ', wc_rev='3'),
+ 'A2/B' : Item(status=' ', wc_rev='3'),
+ 'A2/B/lambda' : Item(status=' ', wc_rev='3'),
+ 'A2/B/F' : Item(status=' ', wc_rev='3'),
+ 'A2/B/E' : Item(status=' ', wc_rev='3'),
+ 'A2/B/E/alpha' : Item(status=' ', wc_rev='3'),
+ 'A2/B/E/beta' : Item(status=' ', wc_rev='3'),
+ 'A2/D' : Item(status=' ', wc_rev='3'),
+ 'A2/D/gamma' : Item(status=' ', wc_rev='3'),
+ 'A2/D/H' : Item(status=' ', wc_rev='3'),
+ 'A2/D/H/psi' : Item(status=' ', wc_rev='3'),
+ 'A2/D/H/omega' : Item(status=' ', wc_rev='3'),
+ 'A2/D/H/chi' : Item(status=' ', wc_rev='3'),
+ 'A2/D/G' : Item(status=' ', wc_rev='3'),
+ 'A2/D/G/tau' : Item(status=' ', wc_rev='3'),
+ 'A2/D/G/rho' : Item(status=' ', wc_rev='3'),
+ 'A2/D/G/pi' : Item(status=' ', wc_rev='3'),
+ 'A2/C' : Item(status=' ', wc_rev='3'),
+ 'A2/mu' : Item(status=' ', wc_rev='3'),
+ })
+
+ # Commit the copy without the one dir.
+ svntest.actions.run_and_verify_commit(wc_dir,
+ expected_output,
+ expected_status,
+ None,
+ wc_dir)
+
+def commit_deep_deleted(sbox):
+ "try to commit a deep descendant of a deleted node"
+
+ sbox.build()
+
+ sbox.simple_move('A', 'AA')
+
+ sbox.simple_propset('k', 'v', 'AA/D/G')
+
+ # Committing some added descendant returns a proper error
+ expected_err = ('svn: E200009: \'%s\' is not known to exist in the ' +
+ 'repository and is not part of the commit, yet its ' +
+ 'child \'%s\' is part of the commit') % (
+ re.escape(os.path.abspath(sbox.ospath('AA'))),
+ re.escape(os.path.abspath(sbox.ospath('AA/D/G'))))
+
+ svntest.actions.run_and_verify_commit(sbox.wc_dir,
+ None,
+ None,
+ expected_err,
+ sbox.ospath('AA/D/G'))
+
+ sbox.simple_propdel('k', 'AA/D/G')
+ sbox.simple_rm('AA/D/G')
+
+ # But a delete fails..
+ # This used to trigger an assertion in Subversion 1.8.0-1.8.8, because
+ # the status walker couldn't find the repository path for AA/D/G
+ svntest.actions.run_and_verify_commit(sbox.wc_dir,
+ None,
+ None,
+ expected_err,
+ sbox.ospath('AA/D/G'))
+
+ # And now commit like how a GUI client would do it, but forgetting the move
+ expected_err = ('svn: E200009: Cannot commit \'%s\' because it was moved ' +
+ 'from \'%s\' which is not part of the commit; both sides ' +
+ 'of the move must be committed together') % (
+ re.escape(os.path.abspath(sbox.ospath('AA'))),
+ re.escape(os.path.abspath(sbox.ospath('A'))))
+ svntest.actions.run_and_verify_commit(sbox.wc_dir,
+ None,
+ None,
+ expected_err,
+ '--depth', 'empty',
+ sbox.ospath('AA/D/G'),
+ sbox.ospath('AA'))
+
+
+ # And now how it works
+ svntest.actions.run_and_verify_commit(sbox.wc_dir,
+ None,
+ None,
+ [],
+ '--depth', 'empty',
+ sbox.ospath('AA/D/G'),
+ sbox.ospath('AA'),
+ sbox.ospath('A'))
+
+@Issue(4480)
+def commit_mergeinfo_ood(sbox):
+ "commit of mergeinfo that should cause out of date"
+
+ sbox.build()
+ sbox.simple_rm('A', 'iota')
+ sbox.simple_commit() # r2
+
+ sbox.simple_mkdir('trunk', 'branch')
+ sbox.simple_commit() # r3
+
+ sbox.simple_append('trunk/a', 'This is a\n')
+ sbox.simple_add('trunk/a')
+ sbox.simple_commit() # r4
+
+ sbox.simple_append('trunk/b', 'This is b\n')
+ sbox.simple_add('trunk/b')
+ sbox.simple_commit() # r5
+
+ sbox.simple_update() # To r5
+
+ expected_output = [
+ '--- Merging r4 into \'%s\':\n' % sbox.ospath('branch'),
+ 'A %s\n' % sbox.ospath('branch/a'),
+ '--- Recording mergeinfo for merge of r4' \
+ ' into \'%s\':\n' % sbox.ospath('branch'),
+ ' U %s\n' % sbox.ospath('branch'),
+ ]
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'merge', '-c4', '^/trunk',
+ sbox.ospath('branch'))
+
+ sbox.simple_commit()
+
+ sbox.simple_update(revision='5')
+
+ expected_output = [
+ '--- Merging r5 into \'%s\':\n' % sbox.ospath('branch'),
+ 'A %s\n' % sbox.ospath('branch/b'),
+ '--- Recording mergeinfo for merge of r5 into \'%s\':\n' % sbox.ospath('branch'),
+ ' U %s\n' % sbox.ospath('branch'),
+ ]
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'merge', '-c5', '^/trunk',
+ sbox.ospath('branch'))
+
+ # Currently this commit succeeds with dav over HTTPv2, while it should really fail
+ expected_err = '.*out of date.*'
+ svntest.actions.run_and_verify_svn(None, None, expected_err,
+ 'commit', sbox.ospath(''), '-m', 'M')
########################################################################
# Run the tests
@@ -2946,6 +3187,11 @@ test_list = [ None,
commit_multiple_nested_deletes,
commit_incomplete,
commit_add_subadd,
+ commit_danglers,
+ last_changed_of_copied_subdir,
+ commit_cp_with_deep_delete,
+ commit_deep_deleted,
+ commit_mergeinfo_ood,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/copy_tests.py b/subversion/tests/cmdline/copy_tests.py
index d28e848..39a686b 100755
--- a/subversion/tests/cmdline/copy_tests.py
+++ b/subversion/tests/cmdline/copy_tests.py
@@ -25,7 +25,9 @@
######################################################################
# General modules
-import stat, os, re, shutil
+import stat, os, re, shutil, logging, sys
+
+logger = logging.getLogger()
# Our testing module
import svntest
@@ -61,7 +63,7 @@ or a url (when false) copy source is used."""
wc_dir = sbox.wc_dir
# File scheduled for deletion
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
+ rho_path = sbox.ospath('A/D/G/rho')
svntest.actions.run_and_verify_svn(None, None, [], 'rm', rho_path)
# Status before attempting copies
@@ -71,7 +73,7 @@ or a url (when false) copy source is used."""
# The copy shouldn't fail
if wc_copy:
- pi_src = os.path.join(wc_dir, 'A', 'D', 'G', 'pi')
+ pi_src = sbox.ospath('A/D/G/pi')
else:
pi_src = sbox.repo_url + '/A/D/G/pi'
@@ -105,12 +107,12 @@ def copy_replace_with_props(sbox, wc_copy):
# Use a temp file to set properties with wildcards in their values
# otherwise Win32/VS2005 will expand them
- prop_path = os.path.join(wc_dir, 'proptmp')
+ prop_path = sbox.ospath('proptmp')
svntest.main.file_append(prop_path, '*')
# Set props on file which is copy-source later on
- pi_path = os.path.join(wc_dir, 'A', 'D', 'G', 'pi')
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
+ pi_path = sbox.ospath('A/D/G/pi')
+ rho_path = sbox.ospath('A/D/G/rho')
svntest.actions.run_and_verify_svn(None, None, [],
'ps', 'phony-prop', '-F',
prop_path, pi_path)
@@ -125,8 +127,7 @@ def copy_replace_with_props(sbox, wc_copy):
expected_disk.tweak('A/D/G/rho',
props={ 'svn:eol-style': 'LF' })
- actual_disk = svntest.tree.build_tree_from_wc(wc_dir, 1)
- svntest.tree.compare_trees("disk", actual_disk, expected_disk.old_tree())
+ svntest.actions.verify_disk(wc_dir, expected_disk, True)
# Commit props
expected_output = svntest.wc.State(wc_dir, {
@@ -154,7 +155,7 @@ def copy_replace_with_props(sbox, wc_copy):
# The copy shouldn't fail
if wc_copy:
- pi_src = os.path.join(wc_dir, 'A', 'D', 'G', 'pi')
+ pi_src = sbox.ospath('A/D/G/pi')
else:
pi_src = sbox.repo_url + '/A/D/G/pi'
@@ -170,8 +171,7 @@ def copy_replace_with_props(sbox, wc_copy):
expected_disk.tweak('A/D/G/rho',
contents="This is the file 'pi'.\n",
props=props)
- actual_disk = svntest.tree.build_tree_from_wc(wc_dir, 1)
- svntest.tree.compare_trees("disk", actual_disk, expected_disk.old_tree())
+ svntest.actions.verify_disk(wc_dir, expected_disk.old_tree(), True)
# Now commit and verify
expected_status.tweak('A/D/G/rho', status='R ', copied='+', wc_rev='-')
@@ -268,14 +268,14 @@ def basic_copy_and_move_files(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- iota_path = os.path.join(wc_dir, 'iota')
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
- D_path = os.path.join(wc_dir, 'A', 'D')
- alpha_path = os.path.join(wc_dir, 'A', 'B', 'E', 'alpha')
- H_path = os.path.join(wc_dir, 'A', 'D', 'H')
- F_path = os.path.join(wc_dir, 'A', 'B', 'F')
- alpha2_path = os.path.join(wc_dir, 'A', 'C', 'alpha2')
+ mu_path = sbox.ospath('A/mu')
+ iota_path = sbox.ospath('iota')
+ rho_path = sbox.ospath('A/D/G/rho')
+ D_path = sbox.ospath('A/D')
+ alpha_path = sbox.ospath('A/B/E/alpha')
+ H_path = sbox.ospath('A/D/H')
+ F_path = sbox.ospath('A/B/F')
+ alpha2_path = sbox.ospath('A/C/alpha2')
# Make local mods to mu and rho
svntest.main.file_append(mu_path, 'appended mu text')
@@ -369,8 +369,8 @@ def receive_copy_in_update(sbox):
svntest.actions.duplicate_dir(wc_dir, wc_backup)
# Define a zillion paths in both working copies.
- G_path = os.path.join(wc_dir, 'A', 'D', 'G')
- newG_path = os.path.join(wc_dir, 'A', 'B', 'newG')
+ G_path = sbox.ospath('A/D/G')
+ newG_path = sbox.ospath('A/B/newG')
# Copy directory A/D to A/B/newG
svntest.actions.run_and_verify_svn(None, None, [], 'cp', G_path, newG_path)
@@ -447,7 +447,7 @@ def resurrect_deleted_dir(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- G_path = os.path.join(wc_dir, 'A', 'D', 'G')
+ G_path = sbox.ospath('A/D/G')
# Delete directory A/D/G, commit that as r2.
svntest.actions.run_and_verify_svn(None, None, [], 'rm', '--force',
@@ -500,7 +500,7 @@ def copy_deleted_dir_into_prefix(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- D_path = os.path.join(wc_dir, 'A', 'D')
+ D_path = sbox.ospath('A/D')
# Delete directory A/D, commit that as r2.
svntest.actions.run_and_verify_svn(None, None, [], 'rm', '--force',
@@ -575,7 +575,7 @@ def no_wc_copy_overwrites(sbox):
wc_dir = sbox.wc_dir
# File simply missing
- tau_path = os.path.join(wc_dir, 'A', 'D', 'G', 'tau')
+ tau_path = sbox.ospath('A/D/G/tau')
os.remove(tau_path)
# Status before attempting copies
@@ -584,8 +584,8 @@ def no_wc_copy_overwrites(sbox):
svntest.actions.run_and_verify_status(wc_dir, expected_status)
# These copies should fail
- pi_path = os.path.join(wc_dir, 'A', 'D', 'G', 'pi')
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
+ pi_path = sbox.ospath('A/D/G/pi')
+ rho_path = sbox.ospath('A/D/G/rho')
svntest.actions.run_and_verify_svn(None, None, svntest.verify.AnyOutput,
'cp', pi_path, rho_path)
svntest.actions.run_and_verify_svn(None, None, svntest.verify.AnyOutput,
@@ -604,13 +604,13 @@ def copy_modify_commit(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- B_path = os.path.join(wc_dir, 'A', 'B')
- B2_path = os.path.join(wc_dir, 'A', 'B2')
+ B_path = sbox.ospath('A/B')
+ B2_path = sbox.ospath('A/B2')
svntest.actions.run_and_verify_svn(None, None, [], 'cp',
B_path, B2_path)
- alpha_path = os.path.join(wc_dir, 'A', 'B2', 'E', 'alpha')
+ alpha_path = sbox.ospath('A/B2/E/alpha')
svntest.main.file_append(alpha_path, "modified alpha")
expected_output = svntest.wc.State(wc_dir, {
@@ -636,7 +636,7 @@ def copy_files_with_properties(sbox):
wc_dir = sbox.wc_dir
# Set a property on a file
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
+ rho_path = sbox.ospath('A/D/G/rho')
svntest.actions.run_and_verify_svn(None, None, [],
'propset', 'pname', 'pval', rho_path)
@@ -655,12 +655,12 @@ def copy_files_with_properties(sbox):
'propset', 'pname2', 'pval2', rho_path)
# WC to WC copy of file with committed and uncommitted properties
- rho_wc_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho_wc')
+ rho_wc_path = sbox.ospath('A/D/G/rho_wc')
svntest.actions.run_and_verify_svn(None, None, [],
'copy', rho_path, rho_wc_path)
# REPOS to WC copy of file with properties
- rho_url_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho_url')
+ rho_url_path = sbox.ospath('A/D/G/rho_url')
rho_url = sbox.repo_url + '/A/D/G/rho'
svntest.actions.run_and_verify_svn(None, None, [],
'copy', rho_url, rho_url_path)
@@ -706,16 +706,16 @@ def copy_delete_commit(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- B_path = os.path.join(wc_dir, 'A', 'B')
- B2_path = os.path.join(wc_dir, 'A', 'B2')
+ B_path = sbox.ospath('A/B')
+ B2_path = sbox.ospath('A/B2')
# copy a tree
svntest.actions.run_and_verify_svn(None, None, [], 'cp',
B_path, B2_path)
# delete two files
- lambda_path = os.path.join(wc_dir, 'A', 'B2', 'lambda')
- alpha_path = os.path.join(wc_dir, 'A', 'B2', 'E', 'alpha')
+ lambda_path = sbox.ospath('A/B2/lambda')
+ alpha_path = sbox.ospath('A/B2/E/alpha')
svntest.actions.run_and_verify_svn(None, None, [],
'rm', alpha_path, lambda_path)
@@ -733,11 +733,11 @@ def copy_delete_commit(sbox):
# copy a tree
svntest.actions.run_and_verify_svn(None, None, [], 'cp',
- os.path.join(wc_dir, 'A', 'B'),
- os.path.join(wc_dir, 'A', 'B3'))
+ sbox.ospath('A/B'),
+ sbox.ospath('A/B3'))
# delete a directory
- E_path = os.path.join(wc_dir, 'A', 'B3', 'E')
+ E_path = sbox.ospath('A/B3/E')
svntest.actions.run_and_verify_svn(None, None, [], 'rm', E_path)
# commit copied tree containing a deleted directory
@@ -759,17 +759,19 @@ def mv_and_revert_directory(sbox):
sbox.build(read_only = True)
wc_dir = sbox.wc_dir
- E_path = os.path.join(wc_dir, 'A', 'B', 'E')
- F_path = os.path.join(wc_dir, 'A', 'B', 'F')
+ E_path = sbox.ospath('A/B/E')
+ F_path = sbox.ospath('A/B/F')
new_E_path = os.path.join(F_path, 'E')
# Issue 931: move failed to lock the directory being deleted
svntest.actions.run_and_verify_svn(None, None, [], 'move',
E_path, F_path)
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
- expected_status.tweak('A/B/E', 'A/B/E/alpha', 'A/B/E/beta', status='D ')
+ expected_status.tweak('A/B/E/alpha', 'A/B/E/beta', status='D ')
+ expected_status.tweak('A/B/E', status='D ', moved_to='A/B/F/E')
expected_status.add({
- 'A/B/F/E' : Item(status='A ', wc_rev='-', copied='+'),
+ 'A/B/F/E' : Item(status='A ', wc_rev='-', copied='+',
+ moved_from='A/B/E'),
'A/B/F/E/alpha' : Item(status=' ', wc_rev='-', copied='+'),
'A/B/F/E/beta' : Item(status=' ', wc_rev='-', copied='+'),
})
@@ -779,6 +781,7 @@ def mv_and_revert_directory(sbox):
svntest.actions.run_and_verify_svn(None, None, [], 'revert', '--recursive',
new_E_path)
expected_status.remove('A/B/F/E', 'A/B/F/E/alpha', 'A/B/F/E/beta')
+ expected_status.tweak('A/B/E', moved_to=None)
svntest.actions.run_and_verify_status(wc_dir, expected_status)
@@ -795,8 +798,8 @@ def copy_preserve_executable_bit(sbox):
wc_dir = sbox.wc_dir
# Create two paths
- newpath1 = os.path.join(wc_dir, 'newfile1')
- newpath2 = os.path.join(wc_dir, 'newfile2')
+ newpath1 = sbox.ospath('newfile1')
+ newpath2 = sbox.ospath('newfile2')
# Create the first file.
svntest.main.file_append(newpath1, "a new file")
@@ -812,7 +815,7 @@ def copy_preserve_executable_bit(sbox):
mode2 = os.stat(newpath1)[stat.ST_MODE]
if mode1 == mode2:
- print("setting svn:executable did not change file's permissions")
+ logger.warn("setting svn:executable did not change file's permissions")
raise svntest.Failure
# Commit the file
@@ -827,7 +830,7 @@ def copy_preserve_executable_bit(sbox):
# The mode on the original and copied file should be identical
if mode2 != mode3:
- print("permissions on the copied file are not identical to original file")
+ logger.warn("permissions on the copied file are not identical to original file")
raise svntest.Failure
#----------------------------------------------------------------------
@@ -839,13 +842,13 @@ def wc_to_repos(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- beta_path = os.path.join(wc_dir, "A", "B", "E", "beta")
+ beta_path = sbox.ospath('A/B/E/beta')
beta2_url = sbox.repo_url + "/A/B/E/beta2"
- H_path = os.path.join(wc_dir, "A", "D", "H")
+ H_path = sbox.ospath('A/D/H')
H2_url = sbox.repo_url + "/A/D/H2"
# modify some items to be copied
- svntest.main.file_append(os.path.join(wc_dir, 'A', 'D', 'H', 'omega'),
+ svntest.main.file_append(sbox.ospath('A/D/H/omega'),
"new otext\n")
svntest.actions.run_and_verify_svn(None, None, [], 'propset', 'foo', 'bar',
beta_path)
@@ -904,7 +907,7 @@ def wc_to_repos(sbox):
#----------------------------------------------------------------------
# Issue 1090: various use-cases of 'svn cp URL wc' where the
# repositories might be different, or be the same repository.
-@Issues(1090,1444)
+@Issues(1090, 1444, 3590)
def repos_to_wc(sbox):
"repository to working-copy copy"
@@ -922,7 +925,7 @@ def repos_to_wc(sbox):
# we should get some scheduled additions *with history*.
E_url = sbox.repo_url + "/A/B/E"
pi_url = sbox.repo_url + "/A/D/G/pi"
- pi_path = os.path.join(wc_dir, 'pi')
+ pi_path = sbox.ospath('pi')
svntest.actions.run_and_verify_svn(None, None, [], 'copy', E_url, wc_dir)
svntest.actions.run_and_verify_svn(None, None, [], 'copy', pi_url, wc_dir)
@@ -942,19 +945,19 @@ def repos_to_wc(sbox):
# Modification will only show up if timestamps differ
exit_code, out, err = svntest.main.run_svn(None, 'diff', pi_path)
if err or not out:
- print("diff failed")
+ logger.warn("diff failed")
raise svntest.Failure
for line in out:
if line == '+zig\n': # Crude check for diff-like output
break
else:
- print("diff output incorrect %s" % out)
+ logger.warn("diff output incorrect %s" % out)
raise svntest.Failure
# Revert everything and verify.
svntest.actions.run_and_verify_svn(None, None, [], 'revert', '-R', wc_dir)
- svntest.main.safe_rmtree(os.path.join(wc_dir, 'E'))
+ svntest.main.safe_rmtree(sbox.ospath('E'))
expected_output = svntest.actions.get_virginal_state(wc_dir, 1)
svntest.actions.run_and_verify_status(wc_dir, expected_output)
@@ -974,7 +977,7 @@ def repos_to_wc(sbox):
# Revert everything and verify.
svntest.actions.run_and_verify_svn(None, None, [], 'revert', '-R', wc_dir)
- svntest.main.safe_rmtree(os.path.join(wc_dir, 'C'))
+ svntest.main.safe_rmtree(sbox.ospath('C'))
expected_output = svntest.actions.get_virginal_state(wc_dir, 1)
svntest.actions.run_and_verify_status(wc_dir, expected_output)
@@ -985,17 +988,29 @@ def repos_to_wc(sbox):
E_url = other_repo_url + "/A/B/E"
pi_url = other_repo_url + "/A/D/G/pi"
- # Expect an error in the directory case until we allow this copy to succeed.
- expected_error = "svn: E200007: Source URL '.*foreign repository"
- svntest.actions.run_and_verify_svn(None, None, expected_error,
+ # Finally, for 1.8 we allow this copy to succeed.
+ expected_output = svntest.verify.UnorderedOutput([
+ '--- Copying from foreign repository URL \'%s\':\n' % E_url,
+ 'A %s\n' % sbox.ospath('E'),
+ 'A %s\n' % sbox.ospath('E/beta'),
+ 'A %s\n' % sbox.ospath('E/alpha'),
+ ])
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
'copy', E_url, wc_dir)
- # But file case should work fine.
- svntest.actions.run_and_verify_svn(None, None, [], 'copy', pi_url, wc_dir)
+ expected_output = [
+ '--- Copying from foreign repository URL \'%s\':\n' % pi_url,
+ 'A %s\n' % sbox.ospath('pi'),
+ ]
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'copy', pi_url, wc_dir)
expected_output = svntest.actions.get_virginal_state(wc_dir, 1)
expected_output.add({
- 'pi' : Item(status='A ', wc_rev='0', entry_rev='1'),
+ 'pi' : Item(status='A ', wc_rev='0'),
+ 'E' : Item(status='A ', wc_rev='0'),
+ 'E/beta' : Item(status='A ', wc_rev='0'),
+ 'E/alpha' : Item(status='A ', wc_rev='0'),
})
svntest.actions.run_and_verify_status(wc_dir, expected_output)
@@ -1007,7 +1022,7 @@ def repos_to_wc(sbox):
# Copy a directory to a pre-existing WC directory.
# The source directory should be copied *under* the target directory.
B_url = sbox.repo_url + "/A/B"
- D_dir = os.path.join(wc_dir, 'A', 'D')
+ D_dir = sbox.ospath('A/D')
svntest.actions.run_and_verify_svn(None, None, [],
'copy', B_url, D_dir)
@@ -1240,7 +1255,7 @@ def diff_repos_to_wc_copy(sbox):
wc_dir = sbox.wc_dir
iota_repos_path = sbox.repo_url + '/iota'
- target_wc_path = os.path.join(wc_dir, 'new_file')
+ target_wc_path = sbox.ospath('new_file')
# Copy a file from the repository to the working copy.
svntest.actions.run_and_verify_svn(None, None, [], 'cp',
@@ -1264,8 +1279,8 @@ def repos_to_wc_copy_eol_keywords(sbox):
wc_dir = sbox.wc_dir
iota_repos_path = sbox.repo_url + '/iota'
- iota_wc_path = os.path.join(wc_dir, 'iota')
- target_wc_path = os.path.join(wc_dir, 'new_file')
+ iota_wc_path = sbox.ospath('iota')
+ target_wc_path = sbox.ospath('new_file')
# Modify iota to make it checkworthy.
svntest.main.file_write(iota_wc_path,
@@ -1321,7 +1336,7 @@ def revision_kinds_local_source(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
# Make a file with different content in each revision and WC; BASE != HEAD.
expected_output = svntest.wc.State(wc_dir, {
@@ -1367,12 +1382,11 @@ def revision_kinds_local_source(sbox):
if line.rstrip() == "Copied From Rev: " + str(from_rev):
break
else:
- print("%s should have been copied from revision %s" % (dst, from_rev))
+ logger.warn("%s should have been copied from revision %s" % (dst, from_rev))
raise svntest.Failure
# Check that the new files have the right contents
- actual_disk = svntest.tree.build_tree_from_wc(wc_dir)
- svntest.tree.compare_trees("disk", actual_disk, expected_disk.old_tree())
+ svntest.actions.verify_disk(wc_dir, expected_disk.old_tree(), True)
#-------------------------------------------------------------
@@ -1383,8 +1397,8 @@ def copy_over_missing_file(sbox):
sbox.build(read_only = True)
wc_dir = sbox.wc_dir
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- iota_path = os.path.join(wc_dir, 'iota')
+ mu_path = sbox.ospath('A/mu')
+ iota_path = sbox.ospath('iota')
iota_url = sbox.repo_url + "/iota"
# Make the target missing.
@@ -1418,7 +1432,7 @@ def repos_to_wc_1634(sbox):
wc_dir = sbox.wc_dir
# First delete a subdirectory and commit.
- E_path = os.path.join(wc_dir, 'A', 'B', 'E')
+ E_path = sbox.ospath('A/B/E')
svntest.actions.run_and_verify_svn(None, None, [], 'delete', E_path)
expected_output = svntest.wc.State(wc_dir, {
'A/B/E' : Item(verb='Deleting'),
@@ -1502,7 +1516,7 @@ def wc_to_wc_copy_between_different_repos(sbox):
# Attempt a copy between different repositories.
exit_code, out, err = svntest.main.run_svn(1, 'cp',
os.path.join(wc2_dir, 'A'),
- os.path.join(wc_dir, 'A', 'B'))
+ sbox.ospath('A/B'))
for line in err:
if line.find("it is not from repository") != -1:
break
@@ -1518,8 +1532,8 @@ def wc_to_wc_copy_deleted(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- B_path = os.path.join(wc_dir, 'A', 'B')
- B2_path = os.path.join(wc_dir, 'A', 'B2')
+ B_path = sbox.ospath('A/B')
+ B2_path = sbox.ospath('A/B2')
# Schedule for delete
svntest.actions.run_and_verify_svn(None, None, [], 'rm',
@@ -1625,7 +1639,7 @@ def url_to_non_existent_url_path(sbox):
if re.match (msg, err_line):
break
else:
- print("message \"%s\" not found in error output: %s" % (msg, err))
+ logger.warn("message \"%s\" not found in error output: %s" % (msg, err))
raise svntest.Failure
@@ -1718,14 +1732,14 @@ def mixed_wc_to_url(sbox):
wc_dir = sbox.wc_dir
Z_url = sbox.repo_url + '/A/D/Z'
Z2_url = sbox.repo_url + '/A/D/Z2'
- G_path = os.path.join(wc_dir, 'A', 'D', 'G')
- B_path = os.path.join(wc_dir, 'A', 'B')
- X_path = os.path.join(wc_dir, 'A', 'D', 'G', 'X')
- Y_path = os.path.join(wc_dir, 'A', 'D', 'G', 'Y')
- E_path = os.path.join(wc_dir, 'A', 'D', 'G', 'X', 'E')
- alpha_path = os.path.join(wc_dir, 'A', 'D', 'G', 'X', 'E', 'alpha')
- pi_path = os.path.join(wc_dir, 'A', 'D', 'G', 'pi')
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
+ G_path = sbox.ospath('A/D/G')
+ B_path = sbox.ospath('A/B')
+ X_path = sbox.ospath('A/D/G/X')
+ Y_path = sbox.ospath('A/D/G/Y')
+ E_path = sbox.ospath('A/D/G/X/E')
+ alpha_path = sbox.ospath('A/D/G/X/E/alpha')
+ pi_path = sbox.ospath('A/D/G/pi')
+ rho_path = sbox.ospath('A/D/G/rho')
# Remove A/D/G/pi, then commit that removal.
svntest.actions.run_and_verify_svn(None, None, [], 'rm', pi_path)
@@ -1787,10 +1801,10 @@ def mixed_wc_to_url(sbox):
svntest.actions.run_and_verify_svn(None, None, [],
'co', Z_url, wc_dir)
- if os.path.exists(os.path.join(wc_dir, 'pi')):
+ if os.path.exists(sbox.ospath('pi')):
raise svntest.Failure("Path 'pi' exists but should be gone.")
- fp = open(os.path.join(wc_dir, 'rho'), 'r')
+ fp = open(sbox.ospath('rho'), 'r')
found_it = 0
for line in fp.readlines():
if re.match("^Second modification to rho.", line):
@@ -1833,7 +1847,7 @@ def delete_replaced_file(sbox):
wc_dir = sbox.wc_dir
# File scheduled for deletion.
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
+ rho_path = sbox.ospath('A/D/G/rho')
svntest.actions.run_and_verify_svn(None, None, [], 'rm', rho_path)
# Status before attempting copies
@@ -1842,7 +1856,7 @@ def delete_replaced_file(sbox):
svntest.actions.run_and_verify_status(wc_dir, expected_status)
# Copy 'pi' over 'rho' with history.
- pi_src = os.path.join(wc_dir, 'A', 'D', 'G', 'pi')
+ pi_src = sbox.ospath('A/D/G/pi')
svntest.actions.run_and_verify_svn(None, None, [], 'cp', pi_src, rho_path)
# Check that file copied.
@@ -1866,22 +1880,24 @@ def mv_unversioned_file(sbox):
sbox.build(read_only = True)
wc_dir = sbox.wc_dir
- unver_path_1 = os.path.join(wc_dir, 'unversioned1')
- dest_path_1 = os.path.join(wc_dir, 'dest')
+ unver_path_1 = sbox.ospath('unversioned1')
+ dest_path_1 = sbox.ospath('dest')
svntest.main.file_append(unver_path_1, "an unversioned file")
- unver_path_2 = os.path.join(wc_dir, 'A', 'unversioned2')
- dest_path_2 = os.path.join(wc_dir, 'A', 'dest_forced')
+ unver_path_2 = sbox.ospath('A/unversioned2')
+ dest_path_2 = sbox.ospath('A/dest_forced')
svntest.main.file_append(unver_path_2, "another unversioned file")
# Try to move an unversioned file.
svntest.actions.run_and_verify_svn(None, None,
- ".*unversioned1.* is not under version control.*",
+ ".*unversioned1' " +
+ "(does not exist|is not under version control)",
'mv', unver_path_1, dest_path_1)
# Try to forcibly move an unversioned file.
svntest.actions.run_and_verify_svn(None, None,
- ".*unversioned2.* is not under version control.*",
+ ".*unversioned2.* " +
+ "(does not exist|is not under version control)",
'mv',
unver_path_2, dest_path_2)
@@ -1923,7 +1939,7 @@ def force_move(sbox):
os.chdir(was_cwd)
# check for the new content
- file_handle = open(os.path.join(wc_dir, "dest"), "r")
+ file_handle = open(sbox.ospath('dest'), "r")
modified_file_content = file_handle.readlines()
file_handle.close()
# Error if we dont find the modified contents...
@@ -1958,9 +1974,9 @@ def copy_copied_file_and_dir(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
- rho_copy_path_1 = os.path.join(wc_dir, 'A', 'D', 'rho_copy_1')
- rho_copy_path_2 = os.path.join(wc_dir, 'A', 'B', 'F', 'rho_copy_2')
+ rho_path = sbox.ospath('A/D/G/rho')
+ rho_copy_path_1 = sbox.ospath('A/D/rho_copy_1')
+ rho_copy_path_2 = sbox.ospath('A/B/F/rho_copy_2')
# Copy A/D/G/rho to A/D/rho_copy_1
svntest.actions.run_and_verify_svn(None, None, [], 'cp',
@@ -1970,9 +1986,9 @@ def copy_copied_file_and_dir(sbox):
svntest.actions.run_and_verify_svn(None, None, [], 'cp',
rho_copy_path_1, rho_copy_path_2)
- E_path = os.path.join(wc_dir, 'A', 'B', 'E')
- E_path_copy_1 = os.path.join(wc_dir, 'A', 'B', 'F', 'E_copy_1')
- E_path_copy_2 = os.path.join(wc_dir, 'A', 'D', 'G', 'E_copy_2')
+ E_path = sbox.ospath('A/B/E')
+ E_path_copy_1 = sbox.ospath('A/B/F/E_copy_1')
+ E_path_copy_2 = sbox.ospath('A/D/G/E_copy_2')
# Copy A/B/E to A/B/F/E_copy_1
svntest.actions.run_and_verify_svn(None, None, [], 'cp',
@@ -2016,9 +2032,9 @@ def move_copied_file_and_dir(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
- rho_copy_path = os.path.join(wc_dir, 'A', 'D', 'rho_copy')
- rho_copy_move_path = os.path.join(wc_dir, 'A', 'B', 'F', 'rho_copy_moved')
+ rho_path = sbox.ospath('A/D/G/rho')
+ rho_copy_path = sbox.ospath('A/D/rho_copy')
+ rho_copy_move_path = sbox.ospath('A/B/F/rho_copy_moved')
# Copy A/D/G/rho to A/D/rho_copy
svntest.actions.run_and_verify_svn(None, None, [], 'cp',
@@ -2028,9 +2044,9 @@ def move_copied_file_and_dir(sbox):
svntest.actions.run_and_verify_svn(None, None, [], 'mv',
rho_copy_path, rho_copy_move_path)
- E_path = os.path.join(wc_dir, 'A', 'B', 'E')
- E_path_copy = os.path.join(wc_dir, 'A', 'B', 'F', 'E_copy')
- E_path_copy_move = os.path.join(wc_dir, 'A', 'D', 'G', 'E_copy_moved')
+ E_path = sbox.ospath('A/B/E')
+ E_path_copy = sbox.ospath('A/B/F/E_copy')
+ E_path_copy_move = sbox.ospath('A/D/G/E_copy_moved')
# Copy A/B/E to A/B/F/E_copy
svntest.actions.run_and_verify_svn(None, None, [], 'cp',
@@ -2071,9 +2087,9 @@ def move_moved_file_and_dir(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
- rho_move_path = os.path.join(wc_dir, 'A', 'D', 'rho_moved')
- rho_move_moved_path = os.path.join(wc_dir, 'A', 'B', 'F', 'rho_move_moved')
+ rho_path = sbox.ospath('A/D/G/rho')
+ rho_move_path = sbox.ospath('A/D/rho_moved')
+ rho_move_moved_path = sbox.ospath('A/B/F/rho_move_moved')
# Move A/D/G/rho to A/D/rho_moved
svntest.actions.run_and_verify_svn(None, None, [], 'mv',
@@ -2083,9 +2099,9 @@ def move_moved_file_and_dir(sbox):
svntest.actions.run_and_verify_svn(None, None, [], 'mv',
rho_move_path, rho_move_moved_path)
- E_path = os.path.join(wc_dir, 'A', 'B', 'E')
- E_path_moved = os.path.join(wc_dir, 'A', 'B', 'F', 'E_moved')
- E_path_move_moved = os.path.join(wc_dir, 'A', 'D', 'G', 'E_move_moved')
+ E_path = sbox.ospath('A/B/E')
+ E_path_moved = sbox.ospath('A/B/F/E_moved')
+ E_path_move_moved = sbox.ospath('A/D/G/E_move_moved')
# Copy A/B/E to A/B/F/E_moved
svntest.actions.run_and_verify_svn(None, None, [], 'mv',
@@ -2106,7 +2122,7 @@ def move_moved_file_and_dir(sbox):
# Create expected status tree
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.add({
- 'A/D/G/E_move_moved/' : Item(status=' ', wc_rev=2),
+ 'A/D/G/E_move_moved' : Item(status=' ', wc_rev=2),
'A/D/G/E_move_moved/alpha' : Item(status=' ', wc_rev=2),
'A/D/G/E_move_moved/beta' : Item(status=' ', wc_rev=2),
'A/B/F/rho_move_moved' : Item(status=' ', wc_rev=2),
@@ -2130,14 +2146,14 @@ def move_file_within_moved_dir(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- D_path = os.path.join(wc_dir, 'A', 'D')
- D_path_moved = os.path.join(wc_dir, 'A', 'B', 'F', 'D_moved')
+ D_path = sbox.ospath('A/D')
+ D_path_moved = sbox.ospath('A/B/F/D_moved')
# Move A/B/D to A/B/F/D_moved
svntest.actions.run_and_verify_svn(None, None, [], 'mv',
D_path, D_path_moved)
- chi_path = os.path.join(wc_dir, 'A', 'B', 'F', 'D_moved', 'H', 'chi')
+ chi_path = sbox.ospath('A/B/F/D_moved/H/chi')
chi_moved_path = os.path.join(wc_dir, 'A', 'B', 'F', 'D_moved',
'H', 'chi_moved')
chi_moved_again_path = os.path.join(wc_dir, 'A', 'B', 'F',
@@ -2199,17 +2215,17 @@ def move_file_out_of_moved_dir(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- D_path = os.path.join(wc_dir, 'A', 'D')
- D_path_moved = os.path.join(wc_dir, 'A', 'B', 'F', 'D_moved')
+ D_path = sbox.ospath('A/D')
+ D_path_moved = sbox.ospath('A/B/F/D_moved')
# Move A/B/D to A/B/F/D_moved
svntest.actions.run_and_verify_svn(None, None, [], 'mv',
D_path, D_path_moved)
- chi_path = os.path.join(wc_dir, 'A', 'B', 'F', 'D_moved', 'H', 'chi')
+ chi_path = sbox.ospath('A/B/F/D_moved/H/chi')
chi_moved_path = os.path.join(wc_dir, 'A', 'B', 'F', 'D_moved',
'H', 'chi_moved')
- chi_moved_again_path = os.path.join(wc_dir, 'A', 'C', 'chi_moved_again')
+ chi_moved_again_path = sbox.ospath('A/C/chi_moved_again')
# Move A/B/F/D_moved/H/chi to A/B/F/D_moved/H/chi_moved
# then move that to A/C/chi_moved_again
@@ -2267,15 +2283,15 @@ def move_dir_within_moved_dir(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- D_path = os.path.join(wc_dir, 'A', 'D')
- D_path_moved = os.path.join(wc_dir, 'A', 'B', 'F', 'D_moved')
+ D_path = sbox.ospath('A/D')
+ D_path_moved = sbox.ospath('A/B/F/D_moved')
# Move A/D to A/B/F/D_moved
svntest.actions.run_and_verify_svn(None, None, [], 'mv',
D_path, D_path_moved)
- H_path = os.path.join(wc_dir, 'A', 'B', 'F', 'D_moved', 'H')
- H_moved_path = os.path.join(wc_dir, 'A', 'B', 'F', 'D_moved', 'H_moved')
+ H_path = sbox.ospath('A/B/F/D_moved/H')
+ H_moved_path = sbox.ospath('A/B/F/D_moved/H_moved')
H_moved_again_path = os.path.join(wc_dir, 'A', 'B', 'F',
'D_moved', 'H_moved_again')
@@ -2335,16 +2351,16 @@ def move_dir_out_of_moved_dir(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- D_path = os.path.join(wc_dir, 'A', 'D')
- D_path_moved = os.path.join(wc_dir, 'A', 'B', 'F', 'D_moved')
+ D_path = sbox.ospath('A/D')
+ D_path_moved = sbox.ospath('A/B/F/D_moved')
# Move A/D to A/B/F/D_moved
svntest.actions.run_and_verify_svn(None, None, [], 'mv',
D_path, D_path_moved)
- H_path = os.path.join(wc_dir, 'A', 'B', 'F', 'D_moved', 'H')
- H_moved_path = os.path.join(wc_dir, 'A', 'B', 'F', 'D_moved', 'H_moved')
- H_moved_again_path = os.path.join(wc_dir, 'A', 'C', 'H_moved_again')
+ H_path = sbox.ospath('A/B/F/D_moved/H')
+ H_moved_path = sbox.ospath('A/B/F/D_moved/H_moved')
+ H_moved_again_path = sbox.ospath('A/C/H_moved_again')
# Move A/B/F/D_moved/H to A/B/F/D_moved/H_moved
# then move that to A/C/H_moved_again
@@ -2404,8 +2420,8 @@ def move_file_back_and_forth(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
- rho_move_path = os.path.join(wc_dir, 'A', 'D', 'rho_moved')
+ rho_path = sbox.ospath('A/D/G/rho')
+ rho_move_path = sbox.ospath('A/D/rho_moved')
# Move A/D/G/rho away from and then back to its original path
svntest.actions.run_and_verify_svn(None, None, [], 'mv',
@@ -2415,19 +2431,11 @@ def move_file_back_and_forth(sbox):
# Check expected status before commit
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
- expected_status.add({
- 'A/D/G/rho' : Item(status='R ', copied='+', wc_rev='-'),
- })
svntest.actions.run_and_verify_status(wc_dir, expected_status)
- # Commit, and check expected output and status
- expected_output = svntest.wc.State(wc_dir, {
- 'A/D/G/rho' : Item(verb='Replacing'),
- })
+ # Try to commit and find out that there is nothing to commit.
+ expected_output = []
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
- expected_status.add({
- 'A/D/G/rho' : Item(status=' ', wc_rev=2),
- })
svntest.actions.run_and_verify_commit(wc_dir,
expected_output,
expected_status,
@@ -2444,8 +2452,8 @@ def move_dir_back_and_forth(sbox):
sbox.build(read_only = True)
wc_dir = sbox.wc_dir
- D_path = os.path.join(wc_dir, 'A', 'D')
- D_move_path = os.path.join(wc_dir, 'D_moved')
+ D_path = sbox.ospath('A/D')
+ D_move_path = sbox.ospath('D_moved')
# Move A/D to D_moved
svntest.actions.run_and_verify_svn(None, None, [], 'mv',
@@ -2454,34 +2462,11 @@ def move_dir_back_and_forth(sbox):
# Move the moved dir: D_moved back to its starting
# location at A/D.
- if svntest.main.wc_is_singledb(wc_dir):
- # In single-db target is gone on-disk after it was moved away, so this
- # move works ok
- expected_err = []
- else:
- # In !SINGLE_DB the target of the copy exists on-dir, so svn tries
- # to move the file below the deleted directory
- expected_err = '.*Cannot copy to .*as it is scheduled for deletion'
-
- svntest.actions.run_and_verify_svn(None, None, expected_err,
- 'mv', D_move_path, D_path)
+ svntest.actions.run_and_verify_svn(None, None, [], 'mv', D_move_path, D_path)
- if svntest.main.wc_is_singledb(wc_dir):
- # Verify that the status indicates a replace with history
- expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
- expected_status.add({
- 'A/D' : Item(status='R ', copied='+', wc_rev='-'),
- 'A/D/G' : Item(status=' ', copied='+', wc_rev='-'),
- 'A/D/G/pi' : Item(status=' ', copied='+', wc_rev='-'),
- 'A/D/G/rho' : Item(status=' ', copied='+', wc_rev='-'),
- 'A/D/G/tau' : Item(status=' ', copied='+', wc_rev='-'),
- 'A/D/gamma' : Item(status=' ', copied='+', wc_rev='-'),
- 'A/D/H' : Item(status=' ', copied='+', wc_rev='-'),
- 'A/D/H/chi' : Item(status=' ', copied='+', wc_rev='-'),
- 'A/D/H/omega' : Item(status=' ', copied='+', wc_rev='-'),
- 'A/D/H/psi' : Item(status=' ', copied='+', wc_rev='-'),
- })
- svntest.actions.run_and_verify_status(wc_dir, expected_status)
+ # Verify that the status indicates a replace with history
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
def copy_move_added_paths(sbox):
"copy and move added paths without commits"
@@ -2490,12 +2475,12 @@ def copy_move_added_paths(sbox):
wc_dir = sbox.wc_dir
# Create a new file and schedule it for addition
- upsilon_path = os.path.join(wc_dir, 'A', 'D', 'upsilon')
+ upsilon_path = sbox.ospath('A/D/upsilon')
svntest.main.file_write(upsilon_path, "This is the file 'upsilon'\n")
svntest.actions.run_and_verify_svn(None, None, [], 'add', upsilon_path)
# Create a dir with children and schedule it for addition
- I_path = os.path.join(wc_dir, 'A', 'D', 'I')
+ I_path = sbox.ospath('A/D/I')
J_path = os.path.join(I_path, 'J')
eta_path = os.path.join(I_path, 'eta')
theta_path = os.path.join(I_path, 'theta')
@@ -2508,7 +2493,7 @@ def copy_move_added_paths(sbox):
svntest.actions.run_and_verify_svn(None, None, [], 'add', I_path)
# Create another dir and schedule it for addition
- K_path = os.path.join(wc_dir, 'K')
+ K_path = sbox.ospath('K')
os.mkdir(K_path)
svntest.actions.run_and_verify_svn(None, None, [], 'add', K_path)
@@ -2547,8 +2532,8 @@ def copy_move_added_paths(sbox):
# Move added file A/D/upsilon to upsilon,
# then move it again to A/upsilon
- upsilon_move_path = os.path.join(wc_dir, 'upsilon')
- upsilon_move_path_2 = os.path.join(wc_dir, 'A', 'upsilon')
+ upsilon_move_path = sbox.ospath('upsilon')
+ upsilon_move_path_2 = sbox.ospath('A/upsilon')
svntest.actions.run_and_verify_svn(None, None, [], 'mv',
upsilon_path, upsilon_move_path)
svntest.actions.run_and_verify_svn(None, None, [], 'mv',
@@ -2556,8 +2541,8 @@ def copy_move_added_paths(sbox):
# Move added dir A/D/I to A/B/I,
# then move it again to A/D/H/I
- I_move_path = os.path.join(wc_dir, 'A', 'B', 'I')
- I_move_path_2 = os.path.join(wc_dir, 'A', 'D', 'H', 'I')
+ I_move_path = sbox.ospath('A/B/I')
+ I_move_path_2 = sbox.ospath('A/D/H/I')
svntest.actions.run_and_verify_svn(None, None, [], 'mv',
I_path, I_move_path)
svntest.actions.run_and_verify_svn(None, None, [], 'mv',
@@ -2607,15 +2592,15 @@ def copy_move_added_paths(sbox):
# Run_and_verify_commit() doesn't handle status of unversioned paths
# so manually confirm unversioned paths got copied and moved too.
unversioned_paths = [
- os.path.join(wc_dir, 'A', 'D', 'H', 'I', 'unversioned1'),
- os.path.join(wc_dir, 'A', 'D', 'H', 'I', 'L_UNVERSIONED'),
+ sbox.ospath('A/D/H/I/unversioned1'),
+ sbox.ospath('A/D/H/I/L_UNVERSIONED'),
os.path.join(wc_dir, 'A', 'D', 'H', 'I', 'L_UNVERSIONED',
'unversioned3'),
- os.path.join(wc_dir, 'A', 'D', 'H', 'I', 'J', 'unversioned2'),
- os.path.join(wc_dir, 'K', 'I', 'unversioned1'),
- os.path.join(wc_dir, 'K', 'I', 'L_UNVERSIONED'),
- os.path.join(wc_dir, 'K', 'I', 'L_UNVERSIONED', 'unversioned3'),
- os.path.join(wc_dir, 'K', 'I', 'J', 'unversioned2')]
+ sbox.ospath('A/D/H/I/J/unversioned2'),
+ sbox.ospath('K/I/unversioned1'),
+ sbox.ospath('K/I/L_UNVERSIONED'),
+ sbox.ospath('K/I/L_UNVERSIONED/unversioned3'),
+ sbox.ospath('K/I/J/unversioned2')]
for path in unversioned_paths:
if not os.path.exists(path):
raise svntest.Failure("Unversioned path '%s' not found." % path)
@@ -2627,14 +2612,14 @@ def copy_added_paths_with_props(sbox):
wc_dir = sbox.wc_dir
# Create a new file, schedule it for addition and set properties
- upsilon_path = os.path.join(wc_dir, 'A', 'D', 'upsilon')
+ upsilon_path = sbox.ospath('A/D/upsilon')
svntest.main.file_write(upsilon_path, "This is the file 'upsilon'\n")
svntest.actions.run_and_verify_svn(None, None, [], 'add', upsilon_path)
svntest.actions.run_and_verify_svn(None, None, [], 'propset',
'foo', 'bar', upsilon_path)
# Create a dir and schedule it for addition and set properties
- I_path = os.path.join(wc_dir, 'A', 'D', 'I')
+ I_path = sbox.ospath('A/D/I')
os.mkdir(I_path)
svntest.actions.run_and_verify_svn(None, None, [], 'add', I_path)
svntest.actions.run_and_verify_svn(None, None, [], 'propset',
@@ -2655,20 +2640,15 @@ def copy_added_paths_with_props(sbox):
'A/D/I' : Item(props={'foo' : 'bar'}),
})
- # Read disk state with props
- actual_disk_tree = svntest.tree.build_tree_from_wc(wc_dir, 1)
-
- # Compare actual vs. expected disk trees.
- svntest.tree.compare_trees("disk", actual_disk_tree,
- expected_disk.old_tree())
+ svntest.actions.verify_disk(wc_dir, expected_disk.old_tree(), True)
# Copy added dir I to dir A/C
- I_copy_path = os.path.join(wc_dir, 'A', 'C', 'I')
+ I_copy_path = sbox.ospath('A/C/I')
svntest.actions.run_and_verify_svn(None, None, [], 'cp',
I_path, I_copy_path)
# Copy added file A/upsilon into dir A/C
- upsilon_copy_path = os.path.join(wc_dir, 'A', 'C', 'upsilon')
+ upsilon_copy_path = sbox.ospath('A/C/upsilon')
svntest.actions.run_and_verify_svn(None, None, [], 'cp',
upsilon_path, upsilon_copy_path)
@@ -2701,12 +2681,7 @@ def copy_added_paths_with_props(sbox):
expected_status,
None,
wc_dir)
- # Read disk state with props
- actual_disk_tree = svntest.tree.build_tree_from_wc(wc_dir, 1)
-
- # Compare actual vs. expected disk trees.
- svntest.tree.compare_trees("disk", actual_disk_tree,
- expected_disk.old_tree())
+ svntest.actions.verify_disk(wc_dir, expected_disk.old_tree(), True)
def copy_added_paths_to_URL(sbox):
"copy added path to URL"
@@ -2715,12 +2690,12 @@ def copy_added_paths_to_URL(sbox):
wc_dir = sbox.wc_dir
# Create a new file and schedule it for addition
- upsilon_path = os.path.join(wc_dir, 'A', 'D', 'upsilon')
+ upsilon_path = sbox.ospath('A/D/upsilon')
svntest.main.file_write(upsilon_path, "This is the file 'upsilon'\n")
svntest.actions.run_and_verify_svn(None, None, [], 'add', upsilon_path)
# Create a dir with children and schedule it for addition
- I_path = os.path.join(wc_dir, 'A', 'D', 'I')
+ I_path = sbox.ospath('A/D/I')
J_path = os.path.join(I_path, 'J')
eta_path = os.path.join(I_path, 'eta')
theta_path = os.path.join(I_path, 'theta')
@@ -2857,7 +2832,7 @@ def move_to_relative_paths(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- E_path = os.path.join(wc_dir, 'A', 'B', 'E')
+ E_path = sbox.ospath('A/B/E')
rel_path = os.path.join('..', '..', '..')
current_dir = os.getcwd()
@@ -2867,8 +2842,9 @@ def move_to_relative_paths(sbox):
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.add({
- 'beta' : Item(status='A ', copied='+', wc_rev='-'),
- 'A/B/E/beta' : Item(status='D ', wc_rev='1')
+ 'beta' : Item(status='A ', copied='+', wc_rev='-',
+ moved_from='A/B/E/beta'),
+ 'A/B/E/beta' : Item(status='D ', wc_rev='1', moved_to='beta')
})
svntest.actions.run_and_verify_status(wc_dir, expected_status)
@@ -2879,7 +2855,7 @@ def move_from_relative_paths(sbox):
sbox.build(read_only = True)
wc_dir = sbox.wc_dir
- F_path = os.path.join(wc_dir, 'A', 'B', 'F')
+ F_path = sbox.ospath('A/B/F')
beta_rel_path = os.path.join('..', 'E', 'beta')
current_dir = os.getcwd()
@@ -2889,8 +2865,9 @@ def move_from_relative_paths(sbox):
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.add({
- 'A/B/F/beta' : Item(status='A ', copied='+', wc_rev='-'),
- 'A/B/E/beta' : Item(status='D ', wc_rev='1')
+ 'A/B/F/beta' : Item(status='A ', copied='+', wc_rev='-',
+ moved_from='A/B/E/beta'),
+ 'A/B/E/beta' : Item(status='D ', wc_rev='1', moved_to='A/B/F/beta')
})
svntest.actions.run_and_verify_status(wc_dir, expected_status)
@@ -2901,7 +2878,7 @@ def copy_to_relative_paths(sbox):
sbox.build(read_only = True)
wc_dir = sbox.wc_dir
- E_path = os.path.join(wc_dir, 'A', 'B', 'E')
+ E_path = sbox.ospath('A/B/E')
rel_path = os.path.join('..', '..', '..')
current_dir = os.getcwd()
@@ -2922,7 +2899,7 @@ def copy_from_relative_paths(sbox):
sbox.build(read_only = True)
wc_dir = sbox.wc_dir
- F_path = os.path.join(wc_dir, 'A', 'B', 'F')
+ F_path = sbox.ospath('A/B/F')
beta_rel_path = os.path.join('..', 'E', 'beta')
current_dir = os.getcwd()
@@ -2947,11 +2924,11 @@ def move_multiple_wc(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- chi_path = os.path.join(wc_dir, 'A', 'D', 'H', 'chi')
- psi_path = os.path.join(wc_dir, 'A', 'D', 'H', 'psi')
- omega_path = os.path.join(wc_dir, 'A', 'D', 'H', 'omega')
- E_path = os.path.join(wc_dir, 'A', 'B', 'E')
- C_path = os.path.join(wc_dir, 'A', 'C')
+ chi_path = sbox.ospath('A/D/H/chi')
+ psi_path = sbox.ospath('A/D/H/psi')
+ omega_path = sbox.ospath('A/D/H/omega')
+ E_path = sbox.ospath('A/B/E')
+ C_path = sbox.ospath('A/C')
# Move chi, psi, omega and E to A/C
svntest.actions.run_and_verify_svn(None, None, [], 'mv', chi_path, psi_path,
@@ -3002,11 +2979,11 @@ def copy_multiple_wc(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- chi_path = os.path.join(wc_dir, 'A', 'D', 'H', 'chi')
- psi_path = os.path.join(wc_dir, 'A', 'D', 'H', 'psi')
- omega_path = os.path.join(wc_dir, 'A', 'D', 'H', 'omega')
- E_path = os.path.join(wc_dir, 'A', 'B', 'E')
- C_path = os.path.join(wc_dir, 'A', 'C')
+ chi_path = sbox.ospath('A/D/H/chi')
+ psi_path = sbox.ospath('A/D/H/psi')
+ omega_path = sbox.ospath('A/D/H/omega')
+ E_path = sbox.ospath('A/B/E')
+ C_path = sbox.ospath('A/C')
# Copy chi, psi, omega and E to A/C
svntest.actions.run_and_verify_svn(None, None, [], 'cp', chi_path, psi_path,
@@ -3177,7 +3154,7 @@ def copy_multiple_repo_wc(sbox):
psi_url = sbox.repo_url + '/A/D/H/psi'
omega_with_space_url = sbox.repo_url + '/A/D/H/omega 2'
E_url = sbox.repo_url + '/A/B/E'
- C_path = os.path.join(wc_dir, 'A', 'C')
+ C_path = sbox.ospath('A/C')
# We need this in order to check that we don't end up with URI-encoded
# paths in the WC (issue #2955)
@@ -3223,10 +3200,10 @@ def copy_multiple_wc_repo(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- chi_path = os.path.join(wc_dir, 'A', 'D', 'H', 'chi')
- psi_path = os.path.join(wc_dir, 'A', 'D', 'H', 'psi')
- omega_path = os.path.join(wc_dir, 'A', 'D', 'H', 'omega')
- E_path = os.path.join(wc_dir, 'A', 'B', 'E')
+ chi_path = sbox.ospath('A/D/H/chi')
+ psi_path = sbox.ospath('A/D/H/psi')
+ omega_path = sbox.ospath('A/D/H/omega')
+ E_path = sbox.ospath('A/B/E')
C_url = sbox.repo_url + '/A/C'
# Perform the copy and check the output
@@ -3281,10 +3258,10 @@ def copy_peg_rev_local_files(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- psi_path = os.path.join(wc_dir, 'A', 'D', 'H', 'psi')
- new_iota_path = os.path.join(wc_dir, 'new_iota')
- iota_path = os.path.join(wc_dir, 'iota')
- sigma_path = os.path.join(wc_dir, 'sigma')
+ psi_path = sbox.ospath('A/D/H/psi')
+ new_iota_path = sbox.ospath('new_iota')
+ iota_path = sbox.ospath('iota')
+ sigma_path = sbox.ospath('sigma')
psi_text = "This is the file 'psi'.\n"
iota_text = "This is the file 'iota'.\n"
@@ -3323,8 +3300,7 @@ def copy_peg_rev_local_files(sbox):
'sigma' : Item(contents=psi_text, props={}),
})
- actual_disk = svntest.tree.build_tree_from_wc(wc_dir, 3)
- svntest.tree.compare_trees("disk", actual_disk, expected_disk.old_tree())
+ svntest.actions.verify_disk(wc_dir, expected_disk.old_tree(), True)
#----------------------------------------------------------------------
@@ -3338,10 +3314,10 @@ def copy_peg_rev_local_dirs(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- E_path = os.path.join(wc_dir, 'A', 'B', 'E')
- G_path = os.path.join(wc_dir, 'A', 'D', 'G')
- I_path = os.path.join(wc_dir, 'A', 'D', 'I')
- J_path = os.path.join(wc_dir, 'A', 'J')
+ E_path = sbox.ospath('A/B/E')
+ G_path = sbox.ospath('A/D/G')
+ I_path = sbox.ospath('A/D/I')
+ J_path = sbox.ospath('A/J')
alpha_path = os.path.join(E_path, 'alpha')
# Make some changes to the repository
@@ -3406,8 +3382,7 @@ def copy_peg_rev_local_dirs(sbox):
'A/J/beta' : Item(contents="This is the file 'beta'.\n"),
})
- actual_disk = svntest.tree.build_tree_from_wc(wc_dir, 5)
- svntest.tree.compare_trees("disk", actual_disk, expected_disk.old_tree())
+ svntest.actions.verify_disk(wc_dir, expected_disk.old_tree(), True)
#----------------------------------------------------------------------
@@ -3421,9 +3396,9 @@ def copy_peg_rev_url(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- psi_path = os.path.join(wc_dir, 'A', 'D', 'H', 'psi')
- new_iota_path = os.path.join(wc_dir, 'new_iota')
- iota_path = os.path.join(wc_dir, 'iota')
+ psi_path = sbox.ospath('A/D/H/psi')
+ new_iota_path = sbox.ospath('new_iota')
+ iota_path = sbox.ospath('iota')
iota_url = sbox.repo_url + '/iota'
sigma_url = sbox.repo_url + '/sigma'
@@ -3444,11 +3419,12 @@ def copy_peg_rev_url(sbox):
wc_dir)
# Copy using a peg rev
- # Add peg rev '@HEAD' to sigma_url when copying which tests for issue #3651.
+ # Add an empty peg specifier ('@') to sigma_url when copying, to test for
+ # issue #3651 "svn copy does not eat peg revision within copy target path".
svntest.actions.run_and_verify_svn(None, None, [],
'cp',
iota_url + '@HEAD', '-r', '1',
- sigma_url + '@HEAD', '-m', 'rev 3')
+ sigma_url + '@', '-m', 'rev 3')
# Validate the copy destination's mergeinfo (we expect none).
svntest.actions.run_and_verify_svn(None, [], [],
@@ -3483,8 +3459,8 @@ def old_dir_wc_to_wc(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- E = os.path.join(wc_dir, 'A', 'B', 'E')
- E2 = os.path.join(wc_dir, 'E2')
+ E = sbox.ospath('A/B/E')
+ E2 = sbox.ospath('E2')
E_url = sbox.repo_url + '/A/B/E'
alpha_url = E_url + '/alpha'
@@ -3529,8 +3505,8 @@ def copy_make_parents_wc_wc(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, 'iota')
- new_iota_path = os.path.join(wc_dir, 'X', 'Y', 'Z', 'iota')
+ iota_path = sbox.ospath('iota')
+ new_iota_path = sbox.ospath('X/Y/Z/iota')
# Copy iota
svntest.actions.run_and_verify_svn(None, None, [], 'cp', '--parents',
@@ -3571,7 +3547,7 @@ def copy_make_parents_repo_wc(sbox):
wc_dir = sbox.wc_dir
iota_url = sbox.repo_url + '/iota'
- new_iota_path = os.path.join(wc_dir, 'X', 'Y', 'Z', 'iota')
+ new_iota_path = sbox.ospath('X/Y/Z/iota')
# Copy iota
svntest.actions.run_and_verify_svn(None, None, [],
@@ -3613,7 +3589,7 @@ def copy_make_parents_wc_repo(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
new_iota_url = sbox.repo_url + '/X/Y/Z/iota'
# Copy iota
@@ -3804,7 +3780,7 @@ def allow_unversioned_parent_for_copy_src(sbox):
# Make the "other" working copy
wc2_dir = sbox.add_wc_path('other')
svntest.actions.duplicate_dir(wc_dir, wc2_dir)
- copy_to_path = os.path.join(wc_dir, 'A', 'copy_of_wc2')
+ copy_to_path = sbox.ospath('A/copy_of_wc2')
# Copy the wc-in-unversioned-parent working copy to our original wc.
svntest.actions.run_and_verify_svn(None,
@@ -3908,14 +3884,14 @@ def double_parents_with_url(sbox):
# Used to cause corruption not fixable by 'svn cleanup'.
-def copy_into_absent_dir(sbox):
- "copy file into absent dir"
+def copy_into_missing_dir(sbox):
+ "copy file into missing dir"
sbox.build(read_only = True)
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, 'A')
- iota_path = os.path.join(wc_dir, 'iota')
+ A_path = sbox.ospath('A')
+ iota_path = sbox.ospath('iota')
# Remove 'A'
svntest.main.safe_rmtree(A_path)
@@ -3966,8 +3942,8 @@ def find_copyfrom_information_upstairs(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, 'A')
- A2_path = os.path.join(wc_dir, 'A2')
+ A_path = sbox.ospath('A')
+ A2_path = sbox.ospath('A2')
B2_path = os.path.join(A2_path, 'B')
svntest.actions.run_and_verify_svn(None, None, [], 'cp', A_path, A2_path)
@@ -4018,25 +3994,25 @@ def path_move_and_copy_between_wcs_2475(sbox):
expected_wc)
# Copy a file from wc to wc2
- mu_path = os.path.join(sbox.wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
E_path = os.path.join(wc2_dir, 'A', 'B', 'E')
svntest.main.run_svn(None, 'cp', mu_path, E_path)
# Copy a folder from wc to wc2
- C_path = os.path.join(sbox.wc_dir, 'A', 'C')
+ C_path = sbox.ospath('A/C')
B_path = os.path.join(wc2_dir, 'A', 'B')
svntest.main.run_svn(None, 'cp', C_path, B_path)
# Move a file from wc to wc2
- mu_path = os.path.join(sbox.wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
B_path = os.path.join(wc2_dir, 'A', 'B')
svntest.main.run_svn(None, 'mv', mu_path, B_path)
# Move a folder from wc to wc2
- C_path = os.path.join(sbox.wc_dir, 'A', 'C')
+ C_path = sbox.ospath('A/C')
D_path = os.path.join(wc2_dir, 'A', 'D')
svntest.main.run_svn(None, 'mv', C_path, D_path)
@@ -4092,8 +4068,8 @@ def commit_copy_depth_empty(sbox):
"copy a wcdir, then commit it with --depth empty"
sbox.build()
- a = os.path.join(sbox.wc_dir, 'A')
- new_a = os.path.join(sbox.wc_dir, 'new_A')
+ a = sbox.ospath('A')
+ new_a = sbox.ospath('new_A')
svntest.actions.run_and_verify_svn(None, None, [],
'cp', a, new_a)
@@ -4106,8 +4082,8 @@ def copy_below_copy(sbox):
"copy a dir below a copied dir"
sbox.build()
- A = os.path.join(sbox.wc_dir, 'A')
- new_A = os.path.join(sbox.wc_dir, 'new_A')
+ A = sbox.ospath('A')
+ new_A = sbox.ospath('new_A')
new_A_D = os.path.join(new_A, 'D')
new_A_new_D = os.path.join(new_A, 'new_D')
new_A_mu = os.path.join(new_A, 'mu')
@@ -4170,8 +4146,8 @@ def move_below_move(sbox):
"move a dir below a moved dir"
sbox.build()
- A = os.path.join(sbox.wc_dir, 'A')
- new_A = os.path.join(sbox.wc_dir, 'new_A')
+ A = sbox.ospath('A')
+ new_A = sbox.ospath('new_A')
new_A_D = os.path.join(new_A, 'D')
new_A_new_D = os.path.join(new_A, 'new_D')
new_A_mu = os.path.join(new_A, 'mu')
@@ -4236,7 +4212,7 @@ def reverse_merge_move(sbox):
rav_svn = svntest.actions.run_and_verify_svn
wc_dir = sbox.wc_dir
- a_dir = os.path.join(wc_dir, 'A')
+ a_dir = sbox.ospath('A')
a_repo_url = sbox.repo_url + '/A'
sbox.build()
@@ -4289,12 +4265,12 @@ def nonrecursive_commit_of_copy(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- main.run_svn(None, 'cp', os.path.join(wc_dir, 'A'),
- os.path.join(wc_dir, 'A_new'))
- main.run_svn(None, 'cp', os.path.join(wc_dir, 'A/D/G'),
- os.path.join(wc_dir, 'A_new/G_new'))
- main.run_svn(None, 'rm', os.path.join(wc_dir, 'A_new/C'))
- main.run_svn(None, 'rm', os.path.join(wc_dir, 'A_new/B/E'))
+ main.run_svn(None, 'cp', sbox.ospath('A'),
+ sbox.ospath('A_new'))
+ main.run_svn(None, 'cp', sbox.ospath('A/D/G'),
+ sbox.ospath('A_new/G_new'))
+ main.run_svn(None, 'rm', sbox.ospath('A_new/C'))
+ main.run_svn(None, 'rm', sbox.ospath('A_new/B/E'))
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.add({
@@ -4354,19 +4330,20 @@ def nonrecursive_commit_of_copy(sbox):
# and then renaming the subdir, breaks history of the moved files.
@Issue(3474)
def copy_added_dir_with_copy(sbox):
- """copy of new dir with copied file keeps history"""
+ """copy/mv of new dir with copied file keeps history"""
- sbox.build()
+ sbox.build(read_only=True)
wc_dir = sbox.wc_dir
- new_dir = os.path.join(wc_dir, 'NewDir');
- new_dir2 = os.path.join(wc_dir, 'NewDir2');
+ new_dir = sbox.ospath('NewDir')
+ new_dir2 = sbox.ospath('NewDir2')
+ new_dir3 = sbox.ospath('NewDir3')
# Alias for svntest.actions.run_and_verify_svn
rav_svn = svntest.actions.run_and_verify_svn
rav_svn(None, None, [], 'mkdir', new_dir)
- rav_svn(None, None, [], 'cp', os.path.join(wc_dir, 'A', 'mu'), new_dir)
+ rav_svn(None, None, [], 'cp', sbox.ospath('A/mu'), new_dir)
rav_svn(None, None, [], 'cp', new_dir, new_dir2)
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
@@ -4381,8 +4358,17 @@ def copy_added_dir_with_copy(sbox):
svntest.actions.run_and_verify_status(wc_dir, expected_status)
+ # move of added dir also retains copy history of children
+ rav_svn(None, None, [], 'mv', new_dir, new_dir3)
+ expected_status.remove('NewDir', 'NewDir/mu')
+ expected_status.add(
+ {
+ 'NewDir3' : Item(status='A ', wc_rev='0'),
+ 'NewDir3/mu' : Item(status='A ', copied='+', wc_rev='-'),
+ })
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
-@SkipUnless(svntest.main.is_posix_os)
@Issue(3303)
def copy_broken_symlink(sbox):
"""copy broken symlink"""
@@ -4392,14 +4378,14 @@ def copy_broken_symlink(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- new_symlink = os.path.join(wc_dir, 'new_symlink');
- copied_symlink = os.path.join(wc_dir, 'copied_symlink');
- os.symlink('linktarget', new_symlink)
+ new_symlink = sbox.ospath('new_symlink')
+ copied_symlink = sbox.ospath('copied_symlink')
# Alias for svntest.actions.run_and_verify_svn
rav_svn = svntest.actions.run_and_verify_svn
- rav_svn(None, None, [], 'add', new_symlink)
+ sbox.simple_add_symlink('linktarget', 'new_symlink')
+
rav_svn(None, None, [], 'cp', new_symlink, copied_symlink)
# Check whether both new_symlink and copied_symlink are added to the
@@ -4432,22 +4418,27 @@ def move_dir_containing_move(sbox):
sbox.ospath('A/B_tmp'))
expected_status = svntest.actions.get_virginal_state(sbox.wc_dir, 1)
- expected_status.tweak('A/B',
- 'A/B/E',
+ expected_status.tweak('A/B', status='D ', moved_to='A/B_tmp')
+ expected_status.tweak('A/B/E',
'A/B/E/alpha',
'A/B/E/beta',
'A/B/F',
'A/B/lambda',
status='D ')
expected_status.add({
- 'A/B_tmp' : Item(status='A ', copied='+', wc_rev='-'),
+ 'A/B_tmp' : Item(status='A ', copied='+', wc_rev='-',
+ moved_from='A/B'),
# alpha has a revision that isn't reported by status.
'A/B_tmp/E' : Item(status=' ', copied='+', wc_rev='-'),
- 'A/B_tmp/E/alpha' : Item(status='D ', copied='+', wc_rev='-'),
- 'A/B_tmp/E/alpha_moved' : Item(status='A ', copied='+', wc_rev='-'),
+ 'A/B_tmp/E/alpha' : Item(status='D ', copied='+', wc_rev='-',
+ moved_to='A/B_tmp/E/alpha_moved'),
+ 'A/B_tmp/E/alpha_moved' : Item(status='A ', copied='+', wc_rev='-',
+ moved_from='A/B_tmp/E/alpha'),
'A/B_tmp/E/beta' : Item(status=' ', copied='+', wc_rev='-'),
- 'A/B_tmp/F' : Item(status='D ', copied='+', wc_rev='-'),
- 'A/B_tmp/F_moved' : Item(status='A ', copied='+', wc_rev='-'),
+ 'A/B_tmp/F' : Item(status='D ', copied='+', wc_rev='-',
+ moved_to='A/B_tmp/F_moved'),
+ 'A/B_tmp/F_moved' : Item(status='A ', copied='+', wc_rev='-',
+ moved_from='A/B_tmp/F'),
'A/B_tmp/lambda' : Item(status=' ', copied='+', wc_rev='-'),
})
@@ -4456,6 +4447,7 @@ def move_dir_containing_move(sbox):
svntest.actions.run_and_verify_svn(None, None, [], 'mv',
sbox.ospath('A/B_tmp'),
sbox.ospath('A/B_moved'))
+ expected_status.tweak('A/B', moved_to='A/B_moved')
expected_status.remove('A/B_tmp',
'A/B_tmp/E',
'A/B_tmp/E/alpha',
@@ -4465,13 +4457,18 @@ def move_dir_containing_move(sbox):
'A/B_tmp/F_moved',
'A/B_tmp/lambda')
expected_status.add({
- 'A/B_moved' : Item(status='A ', copied='+', wc_rev='-'),
+ 'A/B_moved' : Item(status='A ', copied='+', wc_rev='-',
+ moved_from='A/B'),
'A/B_moved/E' : Item(status=' ', copied='+', wc_rev='-'),
- 'A/B_moved/E/alpha' : Item(status='D ', copied='+', wc_rev='-'),
- 'A/B_moved/E/alpha_moved' : Item(status='A ', copied='+', wc_rev='-'),
+ 'A/B_moved/E/alpha' : Item(status='D ', copied='+', wc_rev='-',
+ moved_to='A/B_moved/E/alpha_moved'),
+ 'A/B_moved/E/alpha_moved' : Item(status='A ', copied='+', wc_rev='-',
+ moved_from='A/B_moved/E/alpha'),
'A/B_moved/E/beta' : Item(status=' ', copied='+', wc_rev='-'),
- 'A/B_moved/F' : Item(status='D ', copied='+', wc_rev='-'),
- 'A/B_moved/F_moved' : Item(status='A ', copied='+', wc_rev='-'),
+ 'A/B_moved/F' : Item(status='D ', copied='+', wc_rev='-',
+ moved_to='A/B_moved/F_moved'),
+ 'A/B_moved/F_moved' : Item(status='A ', copied='+', wc_rev='-',
+ moved_from='A/B_moved/F'),
'A/B_moved/lambda' : Item(status=' ', copied='+', wc_rev='-'),
})
@@ -4501,6 +4498,8 @@ def move_dir_containing_move(sbox):
'A/B/lambda',
'A/B_moved/E/alpha',
'A/B_moved/F')
+ expected_status.tweak('A/B_moved', 'A/B_moved/E/alpha_moved',
+ 'A/B_moved/F_moved', moved_from=None)
svntest.actions.run_and_verify_commit(sbox.wc_dir,
expected_output,
expected_status,
@@ -4513,12 +4512,12 @@ def copy_dir_with_space(sbox):
wc_dir = sbox.wc_dir
svntest.actions.run_and_verify_svn(None, None, [], 'cp',
- os.path.join(wc_dir, 'A', 'B', 'E'),
- os.path.join(wc_dir, 'E with spaces'))
+ sbox.ospath('A/B/E'),
+ sbox.ospath('E with spaces'))
svntest.actions.run_and_verify_svn(None, None, [], 'cp',
- os.path.join(wc_dir, 'A', 'B', 'E', 'alpha'),
- os.path.join(wc_dir, 'E with spaces', 'al pha'))
+ sbox.ospath('A/B/E/alpha'),
+ sbox.ospath('E with spaces/al pha'))
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_output = svntest.wc.State(wc_dir, {
@@ -4537,13 +4536,13 @@ def copy_dir_with_space(sbox):
None, wc_dir)
svntest.actions.run_and_verify_svn(None, None, [], 'cp',
- os.path.join(wc_dir, 'E with spaces'),
- os.path.join(wc_dir, 'E also spaces')
+ sbox.ospath('E with spaces'),
+ sbox.ospath('E also spaces')
)
svntest.actions.run_and_verify_svn(None, None, [], 'cp',
- os.path.join(wc_dir, 'E with spaces/al pha'),
- os.path.join(wc_dir, 'E also spaces/al b')
+ sbox.ospath('E with spaces/al pha'),
+ sbox.ospath('E also spaces/al b')
)
expected_output = svntest.wc.State(wc_dir, {
@@ -4563,13 +4562,13 @@ def copy_dir_with_space(sbox):
None, wc_dir)
svntest.actions.run_and_verify_svn(None, None, [], 'mv',
- os.path.join(wc_dir, 'E with spaces'),
- os.path.join(wc_dir, 'E new spaces')
+ sbox.ospath('E with spaces'),
+ sbox.ospath('E new spaces')
)
svntest.actions.run_and_verify_svn(None, None, [], 'mv',
- os.path.join(wc_dir, 'E new spaces/al pha'),
- os.path.join(wc_dir, 'E also spaces/al c')
+ sbox.ospath('E new spaces/al pha'),
+ sbox.ospath('E also spaces/al c')
)
expected_output = svntest.wc.State(wc_dir, {
@@ -4602,8 +4601,8 @@ def changed_data_should_match_checkout(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- A_B_E = os.path.join(wc_dir, 'A', 'B', 'E')
- E_new = os.path.join(wc_dir, 'E_new')
+ A_B_E = sbox.ospath('A/B/E')
+ E_new = sbox.ospath('E_new')
verify_dir = sbox.add_wc_path('verify')
@@ -4633,8 +4632,8 @@ def changed_dir_data_should_match_checkout(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- A_B = os.path.join(wc_dir, 'A', 'B')
- B_new = os.path.join(wc_dir, 'B_new')
+ A_B = sbox.ospath('A/B')
+ B_new = sbox.ospath('B_new')
verify_dir = sbox.add_wc_path('verify')
@@ -4665,7 +4664,7 @@ def changed_dir_data_should_match_checkout(sbox):
def move_added_nodes(sbox):
"""move added nodes"""
- sbox.build()
+ sbox.build(read_only=True)
svntest.actions.run_and_verify_svn(None, None, [], 'mkdir',
sbox.ospath('X'),
@@ -4703,9 +4702,9 @@ def copy_over_deleted_dir(sbox):
"copy a directory over a deleted directory"
sbox.build(read_only = True)
- main.run_svn(None, 'rm', os.path.join(sbox.wc_dir, 'A/B'))
- main.run_svn(None, 'cp', os.path.join(sbox.wc_dir, 'A/D'),
- os.path.join(sbox.wc_dir, 'A/B'))
+ main.run_svn(None, 'rm', sbox.ospath('A/B'))
+ main.run_svn(None, 'cp', sbox.ospath('A/D'),
+ sbox.ospath('A/B'))
@Issue(3314)
def mixed_rev_copy_del(sbox):
@@ -4733,13 +4732,23 @@ def mixed_rev_copy_del(sbox):
svntest.main.run_svn(None, 'up', wc_dir)
expected_status.tweak(wc_rev=2)
svntest.actions.run_and_verify_status(wc_dir, expected_status)
- svntest.main.run_svn(None, 'up', '-r1',
- sbox.ospath('A/B/E/alpha'),
- sbox.ospath('A/B/E/beta'))
+
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/B/E/alpha' : Item(status='A '),
+ })
+
expected_status.add({
'A/B/E/alpha' : Item(status=' ', wc_rev=1),
})
expected_status.tweak('A/B/E/beta', wc_rev=1)
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output, None,
+ expected_status, [],
+ None, None, None, None, None,
+ '-r1',
+ sbox.ospath('A/B/E/alpha'),
+ sbox.ospath('A/B/E/beta'))
+
svntest.actions.run_and_verify_status(wc_dir, expected_status)
# Copy A/B/E to A/B/E_copy
@@ -4779,7 +4788,7 @@ def mixed_rev_copy_del(sbox):
def copy_delete_undo(sbox, use_revert):
"copy, delete child, undo"
- sbox.build()
+ sbox.build(read_only=True)
wc_dir = sbox.wc_dir
# Copy directory with children
@@ -4802,7 +4811,7 @@ def copy_delete_undo(sbox, use_revert):
if (use_revert):
svntest.main.run_svn(wc_dir, 'revert', '--recursive',
sbox.ospath('A/B/E-copied'))
- svntest.main.safe_rmtree(os.path.join(wc_dir, 'A/B/E-copied'))
+ svntest.main.safe_rmtree(sbox.ospath('A/B/E-copied'))
else:
svntest.main.run_svn(wc_dir, 'rm', '--force', sbox.ospath('A/B/E-copied'))
expected_status.remove('A/B/E-copied',
@@ -4834,7 +4843,7 @@ def copy_delete_revert(sbox):
def delete_replace_delete(sbox):
"delete a directory scheduled for replacement"
- sbox.build()
+ sbox.build(read_only=True)
wc_dir = sbox.wc_dir
# Delete directory with children
@@ -4950,7 +4959,7 @@ def copy_wc_over_deleted_other_kind(sbox):
def move_wc_and_repo_dir_to_itself(sbox):
"move wc and repo dir to itself"
sbox.build(read_only = True)
- wc_dir = os.path.join(sbox.wc_dir, 'A')
+ wc_dir = sbox.ospath('A')
repo_url = sbox.repo_url + '/A'
# try to move wc dir to itself
@@ -4983,19 +4992,19 @@ def copy_wc_url_with_absent(sbox):
# A/D excluded
svntest.main.run_svn(None, 'up', '--set-depth', 'exclude',
- os.path.join(sbox.wc_dir, 'A/D'))
+ sbox.ospath('A/D'))
# Test issue #3314 after copy
sbox.simple_copy('A', 'A_copied')
- svntest.main.run_svn(None, 'ci', os.path.join(sbox.wc_dir, 'A_copied'),
+ svntest.main.run_svn(None, 'ci', sbox.ospath('A_copied'),
'-m', 'Commit A_copied')
# This tests issue #2763
- svntest.main.run_svn(None, 'cp', os.path.join(sbox.wc_dir, 'A'),
+ svntest.main.run_svn(None, 'cp', sbox.ospath('A'),
'^/A_tagged', '-m', 'Tag A')
# And perform a normal commit
- svntest.main.run_svn(None, 'ci', os.path.join(sbox.wc_dir, 'A'),
+ svntest.main.run_svn(None, 'ci', sbox.ospath('A'),
'-m', 'Commit A')
expected_output = svntest.wc.State(wc_dir, {
@@ -5069,20 +5078,20 @@ def copy_wc_url_with_absent(sbox):
'D/G/rho' : Item(status=' ', wc_rev='6'),
}
- expected_status = svntest.wc.State(os.path.join(wc_dir, 'A_copied'), items)
- svntest.actions.run_and_verify_status(os.path.join(wc_dir, 'A_copied'),
+ expected_status = svntest.wc.State(sbox.ospath('A_copied'), items)
+ svntest.actions.run_and_verify_status(sbox.ospath('A_copied'),
expected_status)
- expected_status = svntest.wc.State(os.path.join(wc_dir, 'A_tagged'), items)
- svntest.actions.run_and_verify_status(os.path.join(wc_dir, 'A_tagged'),
+ expected_status = svntest.wc.State(sbox.ospath('A_tagged'), items)
+ svntest.actions.run_and_verify_status(sbox.ospath('A_tagged'),
expected_status)
expected_status.add({
'no' : Item(status=' ', wc_rev='6')
})
- expected_status = svntest.wc.State(os.path.join(wc_dir, 'A'), items)
- svntest.actions.run_and_verify_status(os.path.join(wc_dir, 'A'),
+ expected_status = svntest.wc.State(sbox.ospath('A'), items)
+ svntest.actions.run_and_verify_status(sbox.ospath('A'),
expected_status)
@@ -5133,9 +5142,9 @@ def deleted_file_with_case_clash(sbox):
sbox.build(read_only = True)
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, 'iota')
- iota2_path = os.path.join(wc_dir, 'iota2')
- IOTA_path = os.path.join(wc_dir, 'IOTA')
+ iota_path = sbox.ospath('iota')
+ iota2_path = sbox.ospath('iota2')
+ IOTA_path = sbox.ospath('IOTA')
iota_url = sbox.repo_url + '/iota'
# Perform a case-only rename in two steps.
@@ -5144,8 +5153,8 @@ def deleted_file_with_case_clash(sbox):
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.add({
- 'iota' : Item(status='D ', wc_rev=1),
- 'IOTA' : Item(status='A ', copied='+', wc_rev='-'),
+ 'iota' : Item(status='D ', wc_rev=1, moved_to='IOTA'),
+ 'IOTA' : Item(status='A ', copied='+', wc_rev='-', moved_from='iota'),
})
svntest.actions.run_and_verify_status(wc_dir, expected_status)
@@ -5195,10 +5204,10 @@ def case_only_rename(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, 'iota')
- IoTa_path = os.path.join(wc_dir, 'IoTa')
- B_path = os.path.join(wc_dir, 'A/B')
- b_path = os.path.join(wc_dir, 'A/b')
+ iota_path = sbox.ospath('iota')
+ IoTa_path = sbox.ospath('IoTa')
+ B_path = sbox.ospath('A/B')
+ b_path = sbox.ospath('A/b')
# Perform a couple of case-only renames.
svntest.main.run_svn(None, 'move', iota_path, IoTa_path)
@@ -5207,15 +5216,16 @@ def case_only_rename(sbox):
# Create expected status.
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.add({
- 'iota' : Item(status='D ', wc_rev=1),
- 'IoTa' : Item(status='A ', copied='+', wc_rev='-'),
- 'A/B' : Item(status='D ', wc_rev='1'),
+
+ 'iota' : Item(status='D ', wc_rev=1, moved_to='IoTa'),
+ 'IoTa' : Item(status='A ', copied='+', wc_rev='-', moved_from='iota'),
+ 'A/B' : Item(status='D ', wc_rev='1', moved_to='A/b'),
'A/B/lambda' : Item(status='D ', wc_rev='1'),
'A/B/E' : Item(status='D ', wc_rev='1'),
'A/B/E/alpha' : Item(status='D ', wc_rev='1'),
'A/B/E/beta' : Item(status='D ', wc_rev='1'),
'A/B/F' : Item(status='D ', wc_rev='1'),
- 'A/b' : Item(status='A ', copied='+', wc_rev='-'),
+ 'A/b' : Item(status='A ', copied='+', wc_rev='-', moved_from='A/B'),
'A/b/E' : Item(status=' ', copied='+', wc_rev='-'),
'A/b/E/beta' : Item(status=' ', copied='+', wc_rev='-'),
'A/b/E/alpha' : Item(status=' ', copied='+', wc_rev='-'),
@@ -5453,12 +5463,21 @@ def copy_deleted_dir(sbox):
sbox.simple_rm('iota')
sbox.simple_rm('A')
+ # E145000 - SVN_ERR_NODE_UNKNOWN_KIND
+ # E155035 - SVN_ERR_WC_PATH_UNEXPECTED_STATUS
+ # E155010 - SVN_ERR_WC_PATH_NOT_FOUND
+
svntest.actions.run_and_verify_svn(None, None,
- 'svn: E145000: Path.* does not exist',
+ 'svn: (E145000|E155035|E155010): ' +
+ '(Path \'.*iota\' does not exist)|' +
+ '(Deleted node .*iota\' copied)',
'cp', sbox.ospath('iota'),
sbox.ospath('new_iota'))
+
svntest.actions.run_and_verify_svn(None, None,
- 'svn: E145000: Path.* does not exist',
+ 'svn: (E145000|E155035|E155010): ' +
+ '(Path \'.*D\' does not exist)|' +
+ '(Deleted node .*D\' copied)',
'cp', sbox.ospath('A/D'),
sbox.ospath('new_D'))
@@ -5466,16 +5485,397 @@ def copy_deleted_dir(sbox):
os.mkdir(sbox.ospath('A'))
os.mkdir(sbox.ospath('A/D'))
- # These two invocations raise an assertion.
+ # At one time these two invocations raised an assertion.
svntest.actions.run_and_verify_svn(None, None,
- 'svn: E155035: Deleted node.* can\'t be.*',
+ 'svn: (E155035|E155010): ' +
+ '(Path \'.*iota\' does not exist)|' +
+ '(Deleted node.* .*iota\' can\'t be.*)',
'cp', sbox.ospath('iota'),
sbox.ospath('new_iota'))
svntest.actions.run_and_verify_svn(None, None,
- 'svn: E155035: Deleted node.* can\'t be.*',
+ 'svn: (E155035|E155010): ' +
+ '(Path \'.*D\' does not exist)|' +
+ '(Deleted node.* .*D\' can\'t be.*)',
'cp', sbox.ospath('A/D'),
sbox.ospath('new_D'))
+@Issue(3631)
+def commit_copied_half_of_move(sbox):
+ "attempt to commit the copied part of move"
+ sbox.build(read_only = True)
+ wc_dir = sbox.wc_dir
+
+ iota_path = sbox.ospath('iota')
+ D_path = sbox.ospath('A/D')
+
+ # iota -> A/D/iota; verify we cannot commit just A/D/iota
+ svntest.actions.run_and_verify_svn(None, None, [], 'mv', iota_path, D_path)
+ expected_error = "svn: E200009: Cannot commit '.*%s' because it was " \
+ "moved from '.*%s'" % (re.escape(sbox.ospath('A/D/iota')),
+ re.escape(iota_path))
+ svntest.actions.run_and_verify_svn(None, None, expected_error,
+ 'commit', '-m', 'foo',
+ os.path.join(D_path, 'iota'))
+
+ # verify we cannot commit just A/D
+ expected_error = "svn: E200009: Cannot commit '.*%s' because it was " \
+ "moved from '.*%s'" % (re.escape(sbox.ospath('A/D/iota')),
+ re.escape(iota_path))
+ svntest.actions.run_and_verify_svn(None, None, expected_error,
+ 'commit', '-m', 'foo', D_path)
+
+ # A/D -> A/C/D; verify we cannot commit just A/C
+ C_path = sbox.ospath('A/C')
+
+ svntest.actions.run_and_verify_svn(None, None, [], 'mv', D_path, C_path)
+ expected_error = "svn: E200009: Cannot commit '.*%s' because it was moved " \
+ "from '.*%s'" % (re.escape(os.path.join(C_path, "D")),
+ re.escape(D_path))
+ svntest.actions.run_and_verify_svn(None, None, expected_error,
+ 'commit', '-m', 'foo', C_path)
+
+ # A/C/D/iota -> A/iota; verify that iota's moved-from hasn't changed
+ D_iota_path = sbox.ospath('A/C/D/iota')
+ A_iota_path = sbox.ospath('A/iota')
+ svntest.actions.run_and_verify_svn(None, None, [], 'mv', D_iota_path,
+ A_iota_path)
+ expected_error = "svn: E200009: Cannot commit '.*%s' because it was " \
+ "moved from '.*%s'" % (re.escape(A_iota_path),
+ re.escape(iota_path))
+ svntest.actions.run_and_verify_svn(None, None, expected_error,
+ 'commit', '-m', 'foo', A_iota_path)
+
+
+@Issue(3631)
+def commit_deleted_half_of_move(sbox):
+ "attempt to commit the deleted part of move"
+ sbox.build(read_only = True)
+ wc_dir = sbox.wc_dir
+
+ iota_path = sbox.ospath('iota')
+ A_path = sbox.ospath('A')
+ D_path = sbox.ospath('A/D')
+
+ # iota -> A/D/iota; verify we cannot commit just iota
+ svntest.actions.run_and_verify_svn(None, None, [], 'mv', iota_path, D_path)
+
+ expected_error = "svn: E200009: Cannot commit '.*%s' because it was moved " \
+ "to '.*%s'" % (re.escape(iota_path),
+ re.escape(os.path.join(D_path, "iota")))
+ svntest.actions.run_and_verify_svn(None, None, expected_error,
+ 'commit', '-m', 'foo', iota_path)
+
+ # A/D -> C; verify we cannot commit just A
+ C_path = sbox.ospath('C')
+
+ svntest.actions.run_and_verify_svn(None, None, [], 'mv', D_path, C_path)
+ expected_error = "svn: E200009: Cannot commit '.*%s' because it was moved " \
+ "to '.*%s'" % (re.escape(D_path), re.escape(C_path))
+ svntest.actions.run_and_verify_svn(None, None, expected_error,
+ 'commit', '-m', 'foo', A_path)
+
+@Issue(4026)
+def wc_wc_copy_incomplete(sbox):
+ "wc-to-wc copy of an incomplete directory"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # We don't know what order the copy will do children of A/B so
+ # remove files so that only subdirs remain then all children can be
+ # marked incomplete.
+ sbox.simple_rm('A/B/lambda')
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ # We don't know whether copy will do E or F first, so make both
+ # incomplete
+ svntest.actions.set_incomplete(sbox.ospath('A/B/E'), 2)
+ svntest.actions.set_incomplete(sbox.ospath('A/B/F'), 2)
+
+ # Copy fails with no changes to wc
+ svntest.actions.run_and_verify_svn(None, None,
+ 'svn: E155035: Cannot handle status',
+ 'copy',
+ sbox.ospath('A/B/E'),
+ sbox.ospath('A/B/E2'))
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
+ expected_status.remove('A/B/lambda')
+ expected_status.tweak('A/B/E', 'A/B/F', status='! ')
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ # Copy fails part way through
+ svntest.actions.run_and_verify_svn(None, None,
+ 'svn: E155035: Cannot handle status',
+ 'copy',
+ sbox.ospath('A/B'),
+ sbox.ospath('A/B2'))
+
+ expected_status.add({
+ 'A/B2' : Item(status='A ', copied='+', wc_rev='-'),
+ 'A/B2/E' : Item(status='! ', wc_rev='-'),
+ 'A/B2/F' : Item(status='! ', wc_rev='-'),
+ })
+ ### Can't get this to work as copied status of E and F in 1.6
+ ### entries tree doesn't match 1.7 status tree
+ #svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ # Commit preserves incomplete status
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/B2': Item(verb='Adding'),
+ })
+ expected_status.tweak('A/B2',
+ status=' ', copied=None, wc_rev=3)
+ expected_status.tweak('A/B2/E', 'A/B2/F',
+ status='! ', copied=None, wc_rev=3)
+ ### E and F are status '!' but the test code ignores them?
+ expected_status.remove('A/B2/E', 'A/B2/F')
+ svntest.actions.run_and_verify_commit(wc_dir,
+ expected_output,
+ expected_status,
+ None, wc_dir)
+ expected_status.add({
+ 'A/B2/E' : Item(status='! ', wc_rev=3),
+ 'A/B2/F' : Item(status='! ', wc_rev=3),
+ })
+
+ # Update makes things complete
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/B2/E' : Item(status='A '),
+ 'A/B2/E/alpha' : Item(status='A '),
+ 'A/B2/E/beta' : Item(status='A '),
+ 'A/B2/F' : Item(status='A '),
+ })
+ expected_status.tweak(wc_rev=3, status=' ')
+ expected_status.add({
+ 'A/B2/E/alpha' : Item(status=' ', wc_rev=3),
+ 'A/B2/E/beta' : Item(status=' ', wc_rev=3),
+ })
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ None,
+ expected_status)
+
+def three_nested_moves(sbox):
+ "three nested moves"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ svntest.actions.run_and_verify_svn(None, None, [], 'mv',
+ sbox.ospath('A/B'),
+ sbox.ospath('A/B2'))
+ svntest.actions.run_and_verify_svn(None, None, [], 'mv',
+ sbox.ospath('A/B2/E'),
+ sbox.ospath('A/B2/E2'))
+ svntest.actions.run_and_verify_svn(None, None, [], 'mv',
+ sbox.ospath('A/B2/E2/alpha'),
+ sbox.ospath('A/B2/E2/alpha2'))
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.add({
+ 'A/B2' : Item(status=' ', wc_rev=2),
+ 'A/B2/E2' : Item(status=' ', wc_rev=2),
+ 'A/B2/E2/alpha2' : Item(status=' ', wc_rev=2),
+ 'A/B2/E2/beta' : Item(status=' ', wc_rev=2),
+ 'A/B2/F' : Item(status=' ', wc_rev=2),
+ 'A/B2/lambda' : Item(status=' ', wc_rev=2),
+ })
+ expected_status.remove('A/B', 'A/B/E', 'A/B/E/alpha', 'A/B/E/beta',
+ 'A/B/F', 'A/B/lambda')
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/B' : Item(verb='Deleting'),
+ 'A/B2' : Item(verb='Adding'),
+ 'A/B2/E' : Item(verb='Deleting'),
+ 'A/B2/E2' : Item(verb='Adding'),
+ 'A/B2/E2/alpha' : Item(verb='Deleting'),
+ 'A/B2/E2/alpha2' : Item(verb='Adding'),
+ })
+
+ svntest.actions.run_and_verify_commit(wc_dir,
+ expected_output,
+ expected_status,
+ None, wc_dir)
+
+def copy_to_unversioned_parent(sbox):
+ "copy to unversioned parent"
+
+ sbox.build()
+
+ # This succeeds
+ #svntest.actions.run_and_verify_svn(None, None, [], 'cp', '--parents',
+ # sbox.ospath('A/B'),
+ # sbox.ospath('New/B2'))
+
+ # And this currently fails with The node '.*Unversioned' was not found,
+ # while it should succeed or returns some error that a GUI client can use.
+ os.mkdir(sbox.ospath('Unversioned'))
+ svntest.actions.run_and_verify_svn(None, None, [], 'cp', '--parents',
+ sbox.ospath('A/B'),
+ sbox.ospath('Unversioned/B2'))
+
+def copy_text_conflict(sbox):
+ "copy with a text conflict should not copy markers"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ mu_path = sbox.ospath('A/mu')
+ svntest.main.file_append(mu_path, 'appended mu text')
+
+ sbox.simple_commit()
+ svntest.main.file_append(mu_path, 'appended mu text')
+
+ sbox.simple_update(revision='1')
+
+ svntest.actions.run_and_verify_svn(None, None, [], 'cp',
+ sbox.ospath('A'),
+ sbox.ospath('A_copied'))
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('A/mu', status='C ')
+ expected_status.add({
+ # The markers in A
+ 'A/mu.mine' : Item(status='? '),
+ 'A/mu.r1' : Item(status='? '),
+ 'A/mu.r2' : Item(status='? '),
+ # And what is copied (without markers)
+ 'A_copied' : Item(status='A ', copied='+', wc_rev='-'),
+ 'A_copied/C' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_copied/B' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_copied/B/lambda' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_copied/B/E' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_copied/B/E/alpha': Item(status=' ', copied='+', wc_rev='-'),
+ 'A_copied/B/E/beta' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_copied/B/F' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_copied/D' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_copied/D/G' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_copied/D/G/tau' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_copied/D/G/rho' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_copied/D/G/pi' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_copied/D/H' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_copied/D/H/omega': Item(status=' ', copied='+', wc_rev='-'),
+ 'A_copied/D/H/psi' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_copied/D/H/chi' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_copied/D/gamma' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_copied/mu' : Item(status='M ', copied='+', wc_rev='-'),
+ })
+ svntest.actions.run_and_verify_unquiet_status(wc_dir, expected_status)
+
+@Issue(2843)
+def copy_over_excluded(sbox):
+ "copy on top of excluded should give error"
+
+ sbox.build(read_only = True)
+ wc_dir = sbox.wc_dir
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'update', '--set-depth', 'exclude',
+ sbox.ospath('A/D'))
+
+ expected_error = "svn: E155000: Path '.*D' exists.*excluded.*"
+
+ svntest.actions.run_and_verify_svn(None, None, expected_error,
+ 'cp',
+ sbox.repo_url + '/A/C',
+ sbox.ospath('A/D'))
+
+ expected_error = "svn: E155000: Path '.*D' exists.*excluded.*"
+ svntest.actions.run_and_verify_svn(None, None, expected_error,
+ 'cp',
+ sbox.ospath('A/C'),
+ sbox.ospath('A/D'))
+
+def copy_relocate(sbox):
+ "copy from a relocated location"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ tmp_dir = sbox.add_wc_path('relocated')
+
+ shutil.copytree(sbox.repo_dir, tmp_dir)
+
+ url = 'file://'
+
+ if sys.platform == 'win32':
+ url += '/'
+
+ url += os.path.abspath(tmp_dir).replace(os.path.sep, '/')
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'relocate', url, wc_dir)
+
+ copiedpath = sbox.ospath('AA')
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'cp', url + '/A', copiedpath)
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'info', copiedpath)
+
+def ext_wc_copy_deleted(sbox):
+ "copy deleted tree from separate wc"
+
+ sbox.build()
+
+ wc_dir = sbox.wc_dir
+ wc2_dir = sbox.add_wc_path('2')
+
+ sbox.simple_rm('A/B')
+ sbox.simple_commit()
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'up', '--set-depth', 'exclude',
+ sbox.ospath('A/D'))
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'co', sbox.repo_url, wc2_dir, '-r', 1)
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'cp', sbox.path('A'), os.path.join(wc2_dir,'AA'))
+
+ expected_output = expected_output = svntest.wc.State(wc2_dir, {
+ 'AA' : Item(verb='Adding'),
+ 'AA/B' : Item(verb='Deleting'),
+ })
+
+ svntest.actions.run_and_verify_commit(wc2_dir,
+ expected_output, None, None,
+ wc2_dir)
+
+def copy_subtree_deleted(sbox):
+ "copy to-be-deleted subtree"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ wc2_dir = sbox.add_wc_path('2')
+ svntest.actions.duplicate_dir(wc_dir, wc2_dir)
+
+ sbox.simple_rm('A/B')
+
+ # Commit copy within a working copy
+ sbox.simple_copy('A', 'AA')
+ expected_output = expected_output = svntest.wc.State(wc_dir, {
+ 'AA' : Item(verb='Adding'),
+ 'AA/B' : Item(verb='Deleting'),
+ })
+ svntest.actions.run_and_verify_commit(wc_dir,
+ expected_output, None, None,
+ sbox.ospath('AA'))
+
+ # Commit copy between working copies
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'cp', sbox.path('A'),
+ os.path.join(wc2_dir,'AA2'))
+ expected_output = expected_output = svntest.wc.State(wc2_dir, {
+ 'AA2' : Item(verb='Adding'),
+ 'AA2/B' : Item(verb='Deleting'),
+ })
+ svntest.actions.run_and_verify_commit(wc2_dir,
+ expected_output, None, None,
+ wc2_dir)
+
+
########################################################################
# Run the tests
@@ -5553,7 +5953,7 @@ test_list = [ None,
allow_unversioned_parent_for_copy_src,
unneeded_parents,
double_parents_with_url,
- copy_into_absent_dir,
+ copy_into_missing_dir,
find_copyfrom_information_upstairs,
path_move_and_copy_between_wcs_2475,
path_copy_in_repo_2475,
@@ -5586,6 +5986,16 @@ test_list = [ None,
case_only_rename,
copy_and_move_conflicts,
copy_deleted_dir,
+ commit_copied_half_of_move,
+ commit_deleted_half_of_move,
+ wc_wc_copy_incomplete,
+ three_nested_moves,
+ copy_to_unversioned_parent,
+ copy_text_conflict,
+ copy_over_excluded,
+ copy_relocate,
+ ext_wc_copy_deleted,
+ copy_subtree_deleted,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/dav-mirror-autocheck.sh b/subversion/tests/cmdline/dav-mirror-autocheck.sh
index bf6964e..42afa28 100755
--- a/subversion/tests/cmdline/dav-mirror-autocheck.sh
+++ b/subversion/tests/cmdline/dav-mirror-autocheck.sh
@@ -323,7 +323,7 @@ fi
[ -r "$MOD_AUTHZ_SVN" ] \
|| fail "authz_svn_module not found, please use '--enable-shared --enable-dso --with-apxs' with your 'configure' script"
-export LD_LIBRARY_PATH="$ABS_BUILDDIR/subversion/libsvn_ra_neon/.libs:$ABS_BUILDDIR/subversion/libsvn_ra_local/.libs:$ABS_BUILDDIR/subversion/libsvn_ra_svn/.libs"
+export LD_LIBRARY_PATH="$ABS_BUILDDIR/subversion/libsvn_ra_neon/.libs:$ABS_BUILDDIR/subversion/libsvn_ra_local/.libs:$ABS_BUILDDIR/subversion/libsvn_ra_svn/.libs:$LD_LIBRARY_PATH"
MASTER_REPOS="${MASTER_REPOS:-"$HTTPD_ROOT/master_repos"}"
SLAVE_REPOS="${SLAVE_REPOS:-"$HTTPD_ROOT/slave_repos"}"
diff --git a/subversion/tests/cmdline/davautocheck.sh b/subversion/tests/cmdline/davautocheck.sh
index 5ff4cb1..21fe418 100755
--- a/subversion/tests/cmdline/davautocheck.sh
+++ b/subversion/tests/cmdline/davautocheck.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
#
#
# Licensed to the Apache Software Foundation (ASF) under one
@@ -27,7 +27,7 @@
# testing are:
# - Subversion built using --enable-shared --enable-dso --with-apxs options,
# - Working Apache 2 HTTPD Server with the apxs program reachable through
-# PATH or specified via the APXS environment variable,
+# PATH or specified via the APXS Makefile variable or environment variable,
# - Modules dav_module and log_config_module compiled as DSO or built into
# Apache HTTPD Server executable.
# The basic intension of this script is to be able to perform "make check"
@@ -67,6 +67,10 @@
#
# To prevent the server from advertising httpv2, pass USE_HTTPV1 in
# the environment.
+#
+# To enable "SVNCacheRevProps on" set CACHE_REVPROPS in the environment.
+#
+# To test over https set USE_SSL in the environment.
#
# To use value for "SVNPathAuthz" directive set SVN_PATH_AUTHZ with
# appropriate value in the environment.
@@ -77,37 +81,51 @@
# Passing --no-tests as argv[1] will have the script start a server
# but not run any tests.
+PYTHON=${PYTHON:-python}
+
SCRIPTDIR=$(dirname $0)
SCRIPT=$(basename $0)
-trap stop_httpd_and_die SIGHUP SIGTERM SIGINT
+trap stop_httpd_and_die HUP TERM INT
# Ensure the server uses a known locale.
LC_ALL=C
export LC_ALL
-function stop_httpd_and_die() {
+stop_httpd_and_die() {
[ -e "$HTTPD_PID" ] && kill $(cat "$HTTPD_PID")
+ echo "HTTPD stopped."
exit 1
}
-function say() {
+say() {
echo "$SCRIPT: $*"
}
-function fail() {
+fail() {
say $*
stop_httpd_and_die
}
-function query() {
- echo -n "$SCRIPT: $1 (y/n)? [$2] "
- read -n 1 -t 32
+query() {
+ printf "%s" "$SCRIPT: $1 (y/n)? [$2] "
+ if [ -n "$BASH_VERSION" ]; then
+ read -n 1 -t 32
+ else
+ #
+ prog=$(cat) <<'EOF'
+import select as s
+import sys
+if s.select([sys.stdin.fileno()], [], [], 32)[0]:
+ sys.stdout.write(sys.stdin.read(1))
+EOF
+ REPLY=`stty cbreak; $PYTHON -c "$prog" "$@"; stty -cbreak`
+ fi
echo
[ "${REPLY:-$2}" = 'y' ]
}
-function get_loadmodule_config() {
+get_loadmodule_config() {
local SO="$($APXS -q LIBEXECDIR)/$1.so"
# shared object module?
@@ -124,7 +142,7 @@ function get_loadmodule_config() {
}
# Check apxs's SBINDIR and BINDIR for given program names
-function get_prog_name() {
+get_prog_name() {
for prog in $*
do
for dir in $($APXS -q SBINDIR) $($APXS -q BINDIR)
@@ -141,6 +159,17 @@ function get_prog_name() {
# Don't assume sbin is in the PATH.
PATH="$PATH:/usr/sbin:/usr/local/sbin"
+# Find the source and build directories. The build dir can be found if it is
+# the current working dir or the source dir.
+ABS_SRCDIR=$(cd ${SCRIPTDIR}/../../../; pwd)
+if [ -x subversion/svn/svn ]; then
+ ABS_BUILDDIR=$(pwd)
+elif [ -x $ABS_SRCDIR/subversion/svn/svn ]; then
+ ABS_BUILDDIR=$ABS_SRCDIR
+else
+ fail "Run this script from the root of Subversion's build tree!"
+fi
+
# Remove any proxy environmental variables that affect wget or curl.
# We don't need a proxy to connect to localhost and having the proxy
# environmental variables set breaks the Apache configuration file
@@ -151,10 +180,18 @@ unset http_proxy
unset HTTPS_PROXY
# Pick up value from environment or PATH (also try apxs2 - for Debian)
-[ ${APXS:+set} ] \
- || APXS=$(which apxs) \
- || APXS=$(which apxs2) \
- || fail "neither apxs or apxs2 found - required to run davautocheck"
+if [ ${APXS:+set} ]; then
+ :
+elif APXS=$(grep '^APXS' $ABS_BUILDDIR/Makefile | sed 's/^APXS *= *//') && \
+ [ -n "$APXS" ]; then
+ :
+elif APXS=$(which apxs); then
+ :
+elif APXS=$(which apxs2); then
+ :
+else
+ fail "neither apxs or apxs2 found - required to run davautocheck"
+fi
[ -x $APXS ] || fail "Can't execute apxs executable $APXS"
@@ -172,17 +209,9 @@ if [ ${SVN_PATH_AUTHZ:+set} ]; then
SVN_PATH_AUTHZ_LINE="SVNPathAuthz ${SVN_PATH_AUTHZ}"
fi
-# Find the source and build directories. The build dir can be found if it is
-# the current working dir or the source dir.
-pushd ${SCRIPTDIR}/../../../ > /dev/null
-ABS_SRCDIR=$(pwd)
-popd > /dev/null
-if [ -x subversion/svn/svn ]; then
- ABS_BUILDDIR=$(pwd)
-elif [ -x $ABS_SRCDIR/subversion/svn/svn ]; then
- ABS_BUILDDIR=$ABS_SRCDIR
-else
- fail "Run this script from the root of Subversion's build tree!"
+CACHE_REVPROPS_SETTING=off
+if [ ${CACHE_REVPROPS:+set} ]; then
+ CACHE_REVPROPS_SETTING=on
fi
if [ ${MODULE_PATH:+set} ]; then
@@ -198,12 +227,24 @@ fi
[ -r "$MOD_AUTHZ_SVN" ] \
|| fail "authz_svn_module not found, please use '--enable-shared --enable-dso --with-apxs' with your 'configure' script"
-export LD_LIBRARY_PATH="$ABS_BUILDDIR/subversion/libsvn_ra_neon/.libs:$ABS_BUILDDIR/subversion/libsvn_ra_local/.libs:$ABS_BUILDDIR/subversion/libsvn_ra_svn/.libs"
+for d in "$ABS_BUILDDIR"/subversion/*/.libs; do
+ if [ -z "$BUILDDIR_LIBRARY_PATH" ]; then
+ BUILDDIR_LIBRARY_PATH="$d"
+ else
+ BUILDDIR_LIBRARY_PATH="$BUILDDIR_LIBRARY_PATH:$d"
+ fi
+done
case "`uname`" in
- Darwin*) LDD='otool -L'
+ Darwin*)
+ LDD='otool -L'
+ DYLD_LIBRARY_PATH="$BUILDDIR_LIBRARY_PATH:$DYLD_LIBRARY_PATH"
+ export DYLD_LIBRARY_PATH
;;
- *) LDD='ldd'
+ *)
+ LDD='ldd'
+ LD_LIBRARY_PATH="$BUILDDIR_LIBRARY_PATH:$LD_LIBRARY_PATH"
+ export LD_LIBRARY_PATH
;;
esac
@@ -262,8 +303,23 @@ if [ ${APACHE_MPM:+set} ]; then
LOAD_MOD_MPM=$(get_loadmodule_config mod_mpm_$APACHE_MPM) \
|| fail "MPM module not found"
fi
+if [ ${USE_SSL:+set} ]; then
+ LOAD_MOD_SSL=$(get_loadmodule_config mod_ssl) \
+ || fail "SSL module not found"
+fi
+
+random_port() {
+ if [ -n "$BASH_VERSION" ]; then
+ echo $(($RANDOM+1024))
+ else
+ $PYTHON -c 'import random; print random.randint(1024, 2**16-1)'
+ fi
+}
-HTTPD_PORT=$(($RANDOM+1024))
+HTTPD_PORT=$(random_port)
+while netstat -an | grep $HTTPD_PORT | grep 'LISTEN'; do
+ HTTPD_PORT=$(random_port)
+done
HTTPD_ROOT="$ABS_BUILDDIR/subversion/tests/cmdline/httpd-$(date '+%Y%m%d-%H%M%S')"
HTTPD_CFG="$HTTPD_ROOT/cfg"
HTTPD_PID="$HTTPD_ROOT/pid"
@@ -278,6 +334,57 @@ mkdir "$HTTPD_ROOT" \
say "Using directory '$HTTPD_ROOT'..."
+if [ ${USE_SSL:+set} ]; then
+ say "Setting up SSL"
+ BASE_URL="https://localhost:$HTTPD_PORT"
+# A self-signed certifcate for localhost that expires after 2039-12-30
+# generated via:
+# openssl req -new -x509 -nodes -days 10000 -out cert.pem -keyout cert-key.pem
+# This is embedded, rather than generated on-the-fly, to avoid consuming
+# system entropy.
+ SSL_CERTIFICATE_FILE="$HTTPD_ROOT/cert.pem"
+cat > "$SSL_CERTIFICATE_FILE" <<__EOF__
+-----BEGIN CERTIFICATE-----
+MIIC7zCCAligAwIBAgIJALP1pLDiJRtuMA0GCSqGSIb3DQEBBQUAMFkxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxEjAQBgNVBAMTCWxvY2FsaG9zdDAeFw0xMjA4MTMxNDA5
+MDRaFw0zOTEyMzAxNDA5MDRaMFkxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21l
+LVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxEjAQBgNV
+BAMTCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA9kBx6trU
+WQnFNDrW+dU159zEbSWGts3ScITIMTLE4EclMh50SP2BnJDnetkNO8JhPXOm4KZi
+XdJugWAk0NmpawhAk3xVxHh5N8wwyPk3IMx7+Yu+sgcsd0Dj9YK1fIazgTUp/Dsk
+VGJvqu+kgNYxPvzWi/OsBLW/ZNp+spTzoAcCAwEAAaOBvjCBuzAdBgNVHQ4EFgQU
+f7OIDackB7zzPm10aiQgq9WzRdQwgYsGA1UdIwSBgzCBgIAUf7OIDackB7zzPm10
+aiQgq9WzRdShXaRbMFkxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRl
+MSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxEjAQBgNVBAMTCWxv
+Y2FsaG9zdIIJALP1pLDiJRtuMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
+gYEAD2rdgeVYCSEeseEfFCTNte//rDsT3coO9SbGOpmlCJ5TfbmXjs2YaQZH7NST
+mla3hw2Bf9ppTUw1ZWvOVgD3mpxAbYNBA/4HaxmK4GlS2kZsKiMr0xgcVGjmEIW/
+HS9q+PHwStDKNSyYc1+m+bUmeRGUKLgC4kuBF7JDK8A2WYc=
+-----END CERTIFICATE-----
+__EOF__
+ SSL_CERTIFICATE_KEY_FILE="$HTTPD_ROOT/cert-key.pem"
+cat > "$SSL_CERTIFICATE_KEY_FILE" <<__EOF__
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQD2QHHq2tRZCcU0Otb51TXn3MRtJYa2zdJwhMgxMsTgRyUyHnRI
+/YGckOd62Q07wmE9c6bgpmJd0m6BYCTQ2alrCECTfFXEeHk3zDDI+TcgzHv5i76y
+Byx3QOP1grV8hrOBNSn8OyRUYm+q76SA1jE+/NaL86wEtb9k2n6ylPOgBwIDAQAB
+AoGBAJBzhV+rNl10qcXVrj2noJN+oYsVNE0Pt55hhb22dl7J3TvlOXmHm/xn1CHw
+KR8hC0GtEfs+Hv3CbyhdabtJs2L7QxO5VjgLO+onBmAOw1iPF9DjbMcAlFJnoOWI
+HYwANOWGp2jRxL5cHUfrBVCgUISen3VUZEnQkr4n/Zty/QEBAkEA/XIZ3oh5MiFA
+o4IaFaFQpBc6K/e6fnM0217scaPvfZiYS1k9Fx/UQTAGsxJOnhnsi04WgHPMS5wB
+RP4/PiIGIQJBAPi7yIKKS4E8hWBZL+79TI8Zm2uehGCB8V6m9k7e3I82To9Tgcow
+qZHsAPtN50fg85I94L3REg2FSQlDlzbMkScCQQC2pweLv/EQNrS94eJomkRirban
+vzYxMVfzjRp737iWXGXNT7feNXsjq7f4UAZGnMpDrvg6hLnD999WWKE9ZwnhAkBl
+c9p9/EB9zxyrxtT5StGuUIiHJdnirz2vGLTASMB3nXP/m9UFjkGr5jIkTos2Uzel
+/50qbxtI7oNyxuHnlRrjAkASfQ51kaBcABYRiacesQi94W/kE3MkgHWkCXNb6//u
+gxk/ezALZ8neJzJudzRkX3auGwH1ne9vCM1ED5dkM54H
+-----END RSA PRIVATE KEY-----
+__EOF__
+ SSL_MAKE_VAR="SSL_CERT=$SSL_CERTIFICATE_FILE"
+ SSL_TEST_ARG="--ssl-cert $SSL_CERTIFICATE_FILE"
+fi
+
say "Adding users for lock authentication"
$HTPASSWD -bc $HTTPD_USERS jrandom rayjandom
$HTPASSWD -b $HTTPD_USERS jconstant rayjandom
@@ -286,6 +393,7 @@ touch $HTTPD_MIME_TYPES
cat > "$HTTPD_CFG" <<__EOF__
$LOAD_MOD_MPM
+$LOAD_MOD_SSL
$LOAD_MOD_LOG_CONFIG
$LOAD_MOD_MIME
$LOAD_MOD_ALIAS
@@ -309,9 +417,25 @@ User $(id -un)
Group $(id -gn)
__EOF__
else
+HTTPD_LOCK="$HTTPD_ROOT/lock"
+mkdir "$HTTPD_LOCK" \
+ || fail "couldn't create lock directory '$HTTPD_LOCK'"
cat >> "$HTTPD_CFG" <<__EOF__
-# TODO: maybe uncomment this for prefork,worker MPMs only?
-# Mutex file:lock mpm-accept
+# worker and prefork MUST have a mpm-accept lockfile in 2.3.0+
+<IfModule worker.c>
+ Mutex "file:$HTTPD_LOCK" mpm-accept
+</IfModule>
+<IfModule prefork.c>
+ Mutex "file:$HTTPD_LOCK" mpm-accept
+</IfModule>
+__EOF__
+fi
+
+if [ ${USE_SSL:+set} ]; then
+cat >> "$HTTPD_CFG" <<__EOF__
+SSLEngine on
+SSLCertificateFile $SSL_CERTIFICATE_FILE
+SSLCertificateKeyFile $SSL_CERTIFICATE_KEY_FILE
__EOF__
fi
@@ -333,7 +457,10 @@ MaxRequestsPerChild 0
<IfModule worker.c>
ThreadsPerChild 8
</IfModule>
-MaxClients 16
+<IfModule event.c>
+ ThreadsPerChild 8
+</IfModule>
+MaxClients 32
HostNameLookups Off
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" format
CustomLog "$HTTPD_ROOT/req" format
@@ -356,6 +483,7 @@ CustomLog "$HTTPD_ROOT/ops" "%t %u %{SVN-REPOS-NAME}e %{SVN-ACTION}e"
AuthUserFile $HTTPD_USERS
Require valid-user
SVNAdvertiseV2Protocol ${ADVERTISE_V2_PROTOCOL}
+ SVNCacheRevProps ${CACHE_REVPROPS_SETTING}
${SVN_PATH_AUTHZ_LINE}
</Location>
<Location /svn-test-work/local_tmp/repos>
@@ -383,6 +511,7 @@ $START &
sleep 2
say "HTTPD started and listening on '$BASE_URL'..."
+#query "Ready" "y"
# Perform a trivial validation of our httpd configuration by
# downloading a file and comparing it to the original copy.
@@ -391,7 +520,7 @@ say "HTTPD started and listening on '$BASE_URL'..."
### server/request.c:ap_process_request_internal():
### [Wed Feb 22 13:06:55 2006] [crit] [client 127.0.0.1] configuration error: couldn't check user: /cfg
HTTP_FETCH=wget
-HTTP_FETCH_OUTPUT="-q -O"
+HTTP_FETCH_OUTPUT="--no-check-certificate -q -O"
type wget > /dev/null 2>&1
if [ $? -ne 0 ]; then
type curl > /dev/null 2>&1
@@ -399,7 +528,7 @@ if [ $? -ne 0 ]; then
fail "Neither curl or wget found."
fi
HTTP_FETCH=curl
- HTTP_FETCH_OUTPUT='-s -o'
+ HTTP_FETCH_OUTPUT='-s -k -o'
fi
$HTTP_FETCH $HTTP_FETCH_OUTPUT "$HTTPD_CFG-copy" "$BASE_URL/cfg"
diff -q "$HTTPD_CFG" "$HTTPD_CFG-copy" > /dev/null \
@@ -409,9 +538,16 @@ rm "$HTTPD_CFG-copy"
say "HTTPD is good"
if [ $# -eq 1 ] && [ "x$1" = 'x--no-tests' ]; then
+ echo "http://localhost:$HTTPD_PORT"
exit
fi
+if type time > /dev/null; then
+ TIME_CMD=time
+else
+ TIME_CMD=""
+fi
+
say "starting the tests..."
CLIENT_CMD="$ABS_BUILDDIR/subversion/svn/svn"
@@ -429,15 +565,14 @@ else
fi
if [ $# = 0 ]; then
- time make check "BASE_URL=$BASE_URL"
+ $TIME_CMD make check "BASE_URL=$BASE_URL" $SSL_MAKE_VAR
r=$?
else
- pushd "$ABS_BUILDDIR/subversion/tests/cmdline/" >/dev/null
+ (cd "$ABS_BUILDDIR/subversion/tests/cmdline/"
TEST="$1"
shift
- time "$ABS_SRCDIR/subversion/tests/cmdline/${TEST}_tests.py" "--url=$BASE_URL" "$@"
+ $TIME_CMD "$ABS_SRCDIR/subversion/tests/cmdline/${TEST}_tests.py" "--url=$BASE_URL" $SSL_TEST_ARG "$@")
r=$?
- popd >/dev/null
fi
say "Finished testing..."
diff --git a/subversion/tests/cmdline/depth_tests.py b/subversion/tests/cmdline/depth_tests.py
index e0e7057..18af743 100755
--- a/subversion/tests/cmdline/depth_tests.py
+++ b/subversion/tests/cmdline/depth_tests.py
@@ -106,7 +106,7 @@ def verify_depth(msg, depth, path="."):
[], "info", path)
for line in out:
if line.startswith("Depth:"):
- raise svntest.failure(msg)
+ raise svntest.Failure(msg)
else:
expected_stdout = svntest.verify.ExpectedOutput("Depth: %s\n" % depth,
match_all=False)
@@ -151,10 +151,10 @@ def depth_files_same_as_nonrecursive(sbox, opt):
# Should create a depth-files top directory, so both iota and A
# should exist, and A should be empty and depth-empty.
- if not os.path.exists(os.path.join(sbox.wc_dir, "iota")):
+ if not os.path.exists(sbox.ospath('iota')):
raise svntest.Failure("'checkout %s' failed to create file 'iota'" % opt)
- if os.path.exists(os.path.join(sbox.wc_dir, "A")):
+ if os.path.exists(sbox.ospath('A')):
raise svntest.Failure("'checkout %s' unexpectedly created subdir 'A'" % opt)
verify_depth("Expected depth files for top of WC, got some other depth",
@@ -826,7 +826,7 @@ def depth_immediates_subdir_propset_2(sbox):
other_wc = sbox.add_wc_path('other')
svntest.actions.duplicate_dir(wc_dir, other_wc)
- A_path = os.path.join(wc_dir, 'A')
+ A_path = sbox.ospath('A')
# Set a property on an immediate subdirectory of the working copy.
svntest.actions.run_and_verify_svn(None, None, [],
@@ -959,8 +959,8 @@ def commit_propmods_with_depth_empty_helper(sbox, depth_arg):
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, 'iota')
- A_path = os.path.join(wc_dir, 'A')
+ iota_path = sbox.ospath('iota')
+ A_path = sbox.ospath('A')
D_path = os.path.join(A_path, 'D')
gamma_path = os.path.join(D_path, 'gamma')
G_path = os.path.join(D_path, 'G')
@@ -1042,46 +1042,26 @@ def diff_in_depthy_wc(sbox):
svntest.actions.run_and_verify_svn(None, None, [],
'commit', '-m', '', wc)
- diff = [
- "Index: A/mu\n",
- "===================================================================\n",
- "--- A/mu\t(revision 2)\n",
- "+++ A/mu\t(working copy)\n",
+ from diff_tests import make_diff_header, make_diff_prop_header
+ from diff_tests import make_diff_prop_deleted, make_diff_prop_added
+ diff_mu = make_diff_header('A/mu', 'revision 2', 'working copy') + [
"@@ -1 +1 @@\n",
"-new text\n",
- "+This is the file 'mu'.\n",
- "Index: A\n",
- "===================================================================\n",
- "--- A\t(revision 2)\n",
- "+++ A\t(working copy)\n",
- "\n",
- "Property changes on: A\n",
- "___________________________________________________________________\n",
- "Deleted: bar\n",
- "## -1 +0,0 ##\n",
- "-bar-val\n",
- "Index: iota\n",
- "===================================================================\n",
- "--- iota\t(revision 2)\n",
- "+++ iota\t(working copy)\n",
+ "+This is the file 'mu'.\n"]
+ diff_A = make_diff_header('A', 'revision 2', 'working copy') + \
+ make_diff_prop_header('A') + \
+ make_diff_prop_deleted('bar', 'bar-val')
+ diff_iota = make_diff_header('iota', 'revision 2', 'working copy') + [
"@@ -1 +1 @@\n",
"-new text\n",
- "+This is the file 'iota'.\n",
- "Index: .\n",
- "===================================================================\n",
- "--- .\t(revision 2)\n",
- "+++ .\t(working copy)\n",
- "\n",
- "Property changes on: .\n",
- "___________________________________________________________________\n",
- "Deleted: foo\n",
- "## -1 +0,0 ##\n",
- "-foo-val\n",
- "\\ No newline at end of property\n"]
+ "+This is the file 'iota'.\n"]
+ diff_dot = make_diff_header('.', 'revision 2', 'working copy') + \
+ make_diff_prop_header('.') + \
+ make_diff_prop_deleted('foo', 'foo-val')
os.chdir(wc_empty)
- expected_output = svntest.verify.UnorderedOutput(diff[24:])
+ expected_output = svntest.verify.UnorderedOutput(diff_dot)
# The diff should contain only the propchange on '.'
svntest.actions.run_and_verify_svn(None, expected_output, [],
'diff', '-rHEAD')
@@ -1091,11 +1071,11 @@ def diff_in_depthy_wc(sbox):
'--set-depth', 'files', '-r1')
# The diff should contain only the propchange on '.' and the
# contents change on iota.
- expected_output = svntest.verify.UnorderedOutput(diff[17:])
+ expected_output = svntest.verify.UnorderedOutput(diff_iota + diff_dot)
svntest.actions.run_and_verify_svn(None, expected_output, [],
'diff', '-rHEAD')
# Do a diff at --depth empty.
- expected_output = svntest.verify.UnorderedOutput(diff[24:])
+ expected_output = svntest.verify.UnorderedOutput(diff_dot)
svntest.actions.run_and_verify_svn(None, expected_output, [],
'diff', '--depth', 'empty', '-rHEAD')
@@ -1104,11 +1084,12 @@ def diff_in_depthy_wc(sbox):
'--set-depth', 'immediates', '-r1')
# The diff should contain the propchanges on '.' and 'A' and the
# contents change on iota.
- expected_output = svntest.verify.UnorderedOutput(diff[7:])
+ expected_output = svntest.verify.UnorderedOutput(diff_A + diff_iota +
+ diff_dot)
svntest.actions.run_and_verify_svn(None, expected_output, [],
'diff', '-rHEAD')
# Do a diff at --depth files.
- expected_output = svntest.verify.UnorderedOutput(diff[17:])
+ expected_output = svntest.verify.UnorderedOutput(diff_iota + diff_dot)
svntest.actions.run_and_verify_svn(None, expected_output, [],
'diff', '--depth', 'files', '-rHEAD')
@@ -1117,11 +1098,12 @@ def diff_in_depthy_wc(sbox):
'--set-depth', 'files', '-r1', 'A')
# The diff should contain everything but the contents change on
# gamma (which does not exist in this working copy).
- expected_output = svntest.verify.UnorderedOutput(diff)
+ expected_output = svntest.verify.UnorderedOutput(diff_mu + diff_A +
+ diff_iota + diff_dot)
svntest.actions.run_and_verify_svn(None, expected_output, [],
'diff', '-rHEAD')
# Do a diff at --depth immediates.
- expected_output = svntest.verify.UnorderedOutput(diff[7:])
+ expected_output = svntest.verify.UnorderedOutput(diff_A + diff_iota + diff_dot)
svntest.actions.run_and_verify_svn(None, expected_output, [],
'diff', '--depth', 'immediates', '-rHEAD')
@@ -1171,9 +1153,9 @@ def commit_depth_immediates(sbox):
# Transmitting file data ..
# Committed revision 2.
- iota_path = os.path.join(wc_dir, 'iota')
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- G_path = os.path.join(wc_dir, 'A', 'D', 'G')
+ iota_path = sbox.ospath('iota')
+ mu_path = sbox.ospath('A/mu')
+ G_path = sbox.ospath('A/D/G')
rho_path = os.path.join(G_path, 'rho')
svntest.main.file_append(iota_path, "new text in iota\n")
@@ -1254,7 +1236,7 @@ def add_tree_with_depth(sbox):
"add multi-subdir tree with --depth options" # For issue #2931
sbox.build()
wc_dir = sbox.wc_dir
- new1_path = os.path.join(wc_dir, 'new1')
+ new1_path = sbox.ospath('new1')
new2_path = os.path.join(new1_path, 'new2')
new3_path = os.path.join(new2_path, 'new3')
new4_path = os.path.join(new3_path, 'new4')
@@ -1512,7 +1494,7 @@ def depth_folding_clean_trees_1(sbox):
ign_a, ign_b, ign_c, wc_dir = set_up_depthy_working_copies(sbox,
infinity=True)
- A_path = os.path.join(wc_dir, 'A')
+ A_path = sbox.ospath('A')
C_path = os.path.join(A_path, 'C')
B_path = os.path.join(A_path, 'B')
D_path = os.path.join(A_path, 'D')
@@ -1979,7 +1961,7 @@ def fold_tree_with_unversioned_modified_items(sbox):
ign_a, ign_b, ign_c, wc_dir = set_up_depthy_working_copies(sbox,
infinity=True)
- A_path = os.path.join(wc_dir, 'A')
+ A_path = sbox.ospath('A')
pi_path = os.path.join(A_path, 'D', 'G', 'pi')
mu_path = os.path.join(A_path, 'mu')
unv_path = os.path.join(A_path, 'B', 'unv')
@@ -2035,7 +2017,7 @@ def depth_empty_update_on_file(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
# Change iota and commit it in r2.
svntest.main.file_write(iota_path, 'Modified iota\n')
@@ -2073,20 +2055,20 @@ def excluded_path_update_operation(sbox):
ign_a, ign_b, ign_c, wc_dir = set_up_depthy_working_copies(sbox,
infinity=True)
- A_path = os.path.join(wc_dir, 'A')
+ A_path = sbox.ospath('A')
B_path = os.path.join(A_path, 'B')
L_path = os.path.join(A_path, 'L')
E_path = os.path.join(B_path, 'E')
- iota_path = os.path.join(wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
# Simply exclude a subtree
expected_output = svntest.wc.State(wc_dir, {
'A/B/E' : Item(status='D '),
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
- expected_status.remove('A/B/E/alpha', 'A/B/E/beta', 'A/B/E');
+ expected_status.remove('A/B/E/alpha', 'A/B/E/beta', 'A/B/E')
expected_disk = svntest.main.greek_state.copy()
- expected_disk.remove('A/B/E/alpha', 'A/B/E/beta', 'A/B/E');
+ expected_disk.remove('A/B/E/alpha', 'A/B/E/beta', 'A/B/E')
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
@@ -2124,8 +2106,8 @@ def excluded_path_update_operation(sbox):
expected_output = svntest.wc.State(wc_dir, {
'A/B' : Item(status='D '),
})
- expected_status.remove('A/B/F', 'A/B/E', 'A/B/lambda', 'A/B');
- expected_disk.remove('A/B/F', 'A/B/E', 'A/B/lambda', 'A/B');
+ expected_status.remove('A/B/F', 'A/B/E', 'A/B/lambda', 'A/B')
+ expected_disk.remove('A/B/F', 'A/B/E', 'A/B/lambda', 'A/B')
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
expected_disk,
@@ -2158,8 +2140,8 @@ def excluded_path_update_operation(sbox):
expected_output = svntest.wc.State(wc_dir, {
'iota' : Item(status='D '),
})
- expected_status.remove('iota');
- expected_disk.remove('iota');
+ expected_status.remove('iota')
+ expected_disk.remove('iota')
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
expected_disk,
@@ -2190,7 +2172,7 @@ def excluded_path_misc_operation(sbox):
ign_a, ign_b, ign_c, wc_dir = set_up_depthy_working_copies(sbox,
infinity=True)
- A_path = os.path.join(wc_dir, 'A')
+ A_path = sbox.ospath('A')
B_path = os.path.join(A_path, 'B')
L_path = os.path.join(A_path, 'L')
M_path = os.path.join(A_path, 'M')
@@ -2202,9 +2184,9 @@ def excluded_path_misc_operation(sbox):
'A/B/E' : Item(status='D '),
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
- expected_status.remove('A/B/E/alpha', 'A/B/E/beta', 'A/B/E');
+ expected_status.remove('A/B/E/alpha', 'A/B/E/beta', 'A/B/E')
expected_disk = svntest.main.greek_state.copy()
- expected_disk.remove('A/B/E/alpha', 'A/B/E/beta', 'A/B/E');
+ expected_disk.remove('A/B/E/alpha', 'A/B/E/beta', 'A/B/E')
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
@@ -2336,7 +2318,7 @@ def exclude_keeps_hidden_entries(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, 'A')
+ A_path = sbox.ospath('A')
os.chdir(A_path)
# the second 'up' used to cause the entry of 'C' to be lost.
@@ -2370,7 +2352,7 @@ def info_excluded(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, 'A')
+ A_path = sbox.ospath('A')
svntest.main.run_svn(None, 'up', '--set-depth', 'exclude', A_path)
expected_info = {
@@ -2452,9 +2434,8 @@ def make_depth_tree_conflicts(sbox):
expected_disk = svntest.main.greek_state.copy()
expected_disk.remove('A/mu',
'A/B', 'A/B/lambda', 'A/B/E/alpha', 'A/B/E/beta',
- 'A/D/gamma');
- if svntest.main.wc_is_singledb(sbox.wc_dir):
- expected_disk.remove('A/B/E', 'A/B/F')
+ 'A/D/gamma',
+ 'A/B/E', 'A/B/F')
# This test is set XFail because this (correct) status cannot be
# verified due to an "svn update" bug. The tree-conflict on A/B
@@ -2539,7 +2520,7 @@ def update_excluded_path_sticky_depths(sbox):
ign_a, ign_b, ign_c, wc_dir = set_up_depthy_working_copies(sbox,
infinity=True)
- A_path = os.path.join(wc_dir, 'A')
+ A_path = sbox.ospath('A')
B_path = os.path.join(A_path, 'B')
# Exclude the subtree 'A/B'
@@ -2734,9 +2715,9 @@ def sparse_update_with_dash_dash_parents(sbox):
sbox.build(create_wc = False)
sbox.add_test_path(sbox.wc_dir, True)
- alpha_path = os.path.join(sbox.wc_dir, 'A', 'B', 'E', 'alpha')
- pi_path = os.path.join(sbox.wc_dir, 'A', 'D', 'G', 'pi')
- omega_path = os.path.join(sbox.wc_dir, 'A', 'D', 'H', 'omega')
+ alpha_path = sbox.ospath('A/B/E/alpha')
+ pi_path = sbox.ospath('A/D/G/pi')
+ omega_path = sbox.ospath('A/D/H/omega')
# Start with a depth=empty root checkout.
svntest.actions.run_and_verify_svn(
@@ -2886,9 +2867,9 @@ def revert_depth_files(sbox):
"depth immediate+files should revert deleted files"
sbox.build(read_only = True)
-
+
expected_output = "Reverted '" + re.escape(sbox.ospath('A/mu')) + "'"
-
+
# Apply an unrelated delete one level to deep
sbox.simple_rm('A/D/gamma')
@@ -2905,6 +2886,28 @@ def revert_depth_files(sbox):
svntest.actions.run_and_verify_svn(None, expected_output, [],
'revert', '--depth=files', sbox.ospath('A'))
+@Issue(4257)
+def spurious_nodes_row(sbox):
+ "update produces no spurious rows"
+
+ sbox.build(read_only = True)
+ return
+
+ val1 = svntest.wc.sqlite_stmt(sbox.wc_dir, "select count(*) from nodes")
+ expected_output = svntest.wc.State(sbox.wc_dir, { })
+ expected_disk = svntest.main.greek_state.copy()
+ expected_status = svntest.actions.get_virginal_state(sbox.wc_dir, 1)
+ svntest.actions.run_and_verify_update(sbox.wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None, None, None, False,
+ "--depth=empty", sbox.wc_dir)
+ val2 = svntest.wc.sqlite_stmt(sbox.wc_dir, "select count(*) from nodes")
+ if (val1 != val2):
+ # ra_neon added a spurious not-present row that does not show up in status
+ raise svntest.Failure("count changed from '%s' to '%s'" % (val1, val2))
+
#----------------------------------------------------------------------
# list all tests here, starting with None:
@@ -2955,6 +2958,7 @@ test_list = [ None,
update_below_depth_empty,
commit_then_immediates_update,
revert_depth_files,
+ spurious_nodes_row,
]
if __name__ == "__main__":
diff --git a/subversion/tests/cmdline/diff_tests.py b/subversion/tests/cmdline/diff_tests.py
index ac10557..aae8c46 100755
--- a/subversion/tests/cmdline/diff_tests.py
+++ b/subversion/tests/cmdline/diff_tests.py
@@ -26,11 +26,15 @@
######################################################################
# General modules
-import sys, re, os, time, shutil
+import sys, re, os, time, shutil, logging
+
+logger = logging.getLogger()
# Our testing module
import svntest
-from svntest import err
+from svntest import err, wc
+
+from prop_tests import binary_mime_type_on_text_file_warning
# (abbreviation)
Skip = svntest.testcase.Skip_deco
@@ -45,16 +49,28 @@ Item = svntest.wc.StateItem
######################################################################
# Generate expected output
-def make_diff_header(path, old_tag, new_tag):
+def make_diff_header(path, old_tag, new_tag, src_label=None, dst_label=None):
"""Generate the expected diff header for file PATH, with its old and new
- versions described in parentheses by OLD_TAG and NEW_TAG. Return the header
- as an array of newline-terminated strings."""
+ versions described in parentheses by OLD_TAG and NEW_TAG. SRC_LABEL and
+ DST_LABEL are paths or urls that are added to the diff labels if we're
+ diffing against the repository or diffing two arbitrary paths.
+ Return the header as an array of newline-terminated strings."""
+ if src_label:
+ src_label = src_label.replace('\\', '/')
+ src_label = '\t(.../' + src_label + ')'
+ else:
+ src_label = ''
+ if dst_label:
+ dst_label = dst_label.replace('\\', '/')
+ dst_label = '\t(.../' + dst_label + ')'
+ else:
+ dst_label = ''
path_as_shown = path.replace('\\', '/')
return [
"Index: " + path_as_shown + "\n",
"===================================================================\n",
- "--- " + path_as_shown + "\t(" + old_tag + ")\n",
- "+++ " + path_as_shown + "\t(" + new_tag + ")\n",
+ "--- " + path_as_shown + src_label + "\t(" + old_tag + ")\n",
+ "+++ " + path_as_shown + dst_label + "\t(" + new_tag + ")\n",
]
def make_no_diff_deleted_header(path, old_tag, new_tag):
@@ -70,7 +86,8 @@ def make_no_diff_deleted_header(path, old_tag, new_tag):
def make_git_diff_header(target_path, repos_relpath,
old_tag, new_tag, add=False, src_label=None,
dst_label=None, delete=False, text_changes=True,
- cp=False, mv=False, copyfrom_path=None):
+ cp=False, mv=False, copyfrom_path=None,
+ copyfrom_rev=None):
""" Generate the expected 'git diff' header for file TARGET_PATH.
REPOS_RELPATH is the location of the path relative to the repository root.
The old and new versions ("revision X", or "working copy") must be
@@ -93,64 +110,62 @@ def make_git_diff_header(target_path, repos_relpath,
else:
dst_label = ''
+ output = [
+ "Index: " + path_as_shown + "\n",
+ "===================================================================\n"
+ ]
if add:
- output = [
- "Index: " + path_as_shown + "\n",
- "===================================================================\n",
+ output.extend([
"diff --git a/" + repos_relpath + " b/" + repos_relpath + "\n",
"new file mode 10644\n",
- ]
+ ])
if text_changes:
output.extend([
"--- /dev/null\t(" + old_tag + ")\n",
"+++ b/" + repos_relpath + dst_label + "\t(" + new_tag + ")\n"
])
elif delete:
- output = [
- "Index: " + path_as_shown + "\n",
- "===================================================================\n",
+ output.extend([
"diff --git a/" + repos_relpath + " b/" + repos_relpath + "\n",
"deleted file mode 10644\n",
- ]
+ ])
if text_changes:
output.extend([
"--- a/" + repos_relpath + src_label + "\t(" + old_tag + ")\n",
"+++ /dev/null\t(" + new_tag + ")\n"
])
elif cp:
- output = [
- "Index: " + path_as_shown + "\n",
- "===================================================================\n",
+ if copyfrom_rev:
+ copyfrom_rev = '@' + copyfrom_rev
+ else:
+ copyfrom_rev = ''
+ output.extend([
"diff --git a/" + copyfrom_path + " b/" + repos_relpath + "\n",
- "copy from " + copyfrom_path + "\n",
+ "copy from " + copyfrom_path + copyfrom_rev + "\n",
"copy to " + repos_relpath + "\n",
- ]
+ ])
if text_changes:
output.extend([
"--- a/" + copyfrom_path + src_label + "\t(" + old_tag + ")\n",
"+++ b/" + repos_relpath + "\t(" + new_tag + ")\n"
])
elif mv:
- return [
- "Index: " + path_as_shown + "\n",
- "===================================================================\n",
+ output.extend([
"diff --git a/" + copyfrom_path + " b/" + path_as_shown + "\n",
"rename from " + copyfrom_path + "\n",
"rename to " + repos_relpath + "\n",
- ]
+ ])
if text_changes:
output.extend([
"--- a/" + copyfrom_path + src_label + "\t(" + old_tag + ")\n",
"+++ b/" + repos_relpath + "\t(" + new_tag + ")\n"
])
else:
- output = [
- "Index: " + path_as_shown + "\n",
- "===================================================================\n",
+ output.extend([
"diff --git a/" + repos_relpath + " b/" + repos_relpath + "\n",
"--- a/" + repos_relpath + src_label + "\t(" + old_tag + ")\n",
"+++ b/" + repos_relpath + dst_label + "\t(" + new_tag + ")\n",
- ]
+ ])
return output
def make_diff_prop_header(path):
@@ -167,7 +182,7 @@ def make_diff_prop_val(plus_minus, pval):
if len(pval) > 0 and pval[-1] != '\n':
return [plus_minus + pval + "\n","\\ No newline at end of property\n"]
return [plus_minus + pval]
-
+
def make_diff_prop_deleted(pname, pval):
"""Return a property diff for deletion of property PNAME, old value PVAL.
PVAL is a single string with no embedded newlines. Return the result
@@ -188,8 +203,14 @@ def make_diff_prop_added(pname, pval):
def make_diff_prop_modified(pname, pval1, pval2):
"""Return a property diff for modification of property PNAME, old value
- PVAL1, new value PVAL2. PVAL is a single string with no embedded
- newlines. Return the result as a list of newline-terminated strings."""
+ PVAL1, new value PVAL2.
+
+ PVAL is a single string with no embedded newlines. A newline at the
+ end is significant: without it, we add an extra line saying '\ No
+ newline at end of property'.
+
+ Return the result as a list of newline-terminated strings.
+ """
return [
"Modified: " + pname + "\n",
"## -1 +1 ##\n",
@@ -274,8 +295,8 @@ def verify_excluded_output(diff_output, excluded):
"verify given line does not exist in diff output as diff line"
for line in diff_output:
if re.match("^(\\+|-)%s" % re.escape(excluded), line):
- print('Sought: %s' % excluded)
- print('Found: %s' % line)
+ logger.warn('Sought: %s' % excluded)
+ logger.warn('Found: %s' % line)
raise svntest.Failure
def extract_diff_path(line):
@@ -645,21 +666,21 @@ def diff_non_recursive(sbox):
# full diff has three changes
exit_code, diff_output, err_output = svntest.main.run_svn(
- None, 'diff', '-r', '1', os.path.join(wc_dir, 'A', 'D'))
+ None, 'diff', '-r', '1', sbox.ospath('A/D'))
if count_diff_output(diff_output) != 3:
raise svntest.Failure
# non-recursive has one change
exit_code, diff_output, err_output = svntest.main.run_svn(
- None, 'diff', '-r', '1', '-N', os.path.join(wc_dir, 'A', 'D'))
+ None, 'diff', '-r', '1', '-N', sbox.ospath('A/D'))
if count_diff_output(diff_output) != 1:
raise svntest.Failure
# diffing a directory doesn't pick up other diffs in the anchor
exit_code, diff_output, err_output = svntest.main.run_svn(
- None, 'diff', '-r', '1', os.path.join(wc_dir, 'A', 'D', 'G'))
+ None, 'diff', '-r', '1', sbox.ospath('A/D/G'))
if count_diff_output(diff_output) != 1:
raise svntest.Failure
@@ -698,10 +719,10 @@ def diff_non_version_controlled_file(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- svntest.main.file_append(os.path.join(wc_dir, 'A', 'D', 'foo'), "a new file")
+ svntest.main.file_append(sbox.ospath('A/D/foo'), "a new file")
exit_code, diff_output, err_output = svntest.main.run_svn(
- 1, 'diff', os.path.join(wc_dir, 'A', 'D', 'foo'))
+ 1, 'diff', sbox.ospath('A/D/foo'))
if count_diff_output(diff_output) != 0: raise svntest.Failure
@@ -842,7 +863,7 @@ def dont_diff_binary_file(sbox):
# Add a binary file to the project.
theta_contents = open(os.path.join(sys.path[0], "theta.bin"), 'rb').read()
# Write PNG file data into 'A/theta'.
- theta_path = os.path.join(wc_dir, 'A', 'theta')
+ theta_path = sbox.ospath('A/theta')
svntest.main.file_write(theta_path, theta_contents, 'wb')
svntest.main.run_svn(None, 'add', theta_path)
@@ -967,7 +988,7 @@ def diff_head_of_moved_file(sbox):
"diff against the head of a moved file"
sbox.build()
- mu_path = os.path.join(sbox.wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
new_mu_path = mu_path + '.new'
svntest.main.run_svn(None, 'mv', mu_path, new_mu_path)
@@ -975,7 +996,21 @@ def diff_head_of_moved_file(sbox):
# Modify the file to ensure that the diff is non-empty.
svntest.main.file_append(new_mu_path, "\nActually, it's a new mu.")
- svntest.actions.run_and_verify_svn(None, svntest.verify.AnyOutput, [],
+ mu_new = sbox.ospath('A/mu.new').replace('\\','/')
+
+ expected_output = [
+ 'Index: %s\n' % mu_new,
+ '===================================================================\n',
+ '--- %s\t(.../mu)\t(revision 1)\n' % mu_new,
+ '+++ %s\t(.../mu.new)\t(working copy)\n' % mu_new,
+ '@@ -1 +1,3 @@\n',
+ ' This is the file \'mu\'.\n',
+ '+\n',
+ '+Actually, it\'s a new mu.\n',
+ '\ No newline at end of file\n',
+ ]
+
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
'diff', '-r', 'HEAD', new_mu_path)
@@ -991,9 +1026,9 @@ def diff_base_to_repos(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(sbox.wc_dir, 'iota')
- newfile_path = os.path.join(sbox.wc_dir, 'A', 'D', 'newfile')
- mu_path = os.path.join(sbox.wc_dir, 'A', 'mu')
+ iota_path = sbox.ospath('iota')
+ newfile_path = sbox.ospath('A/D/newfile')
+ mu_path = sbox.ospath('A/mu')
# Make changes to iota, commit r2, update to HEAD (r2).
svntest.main.file_append(iota_path, "some rev2 iota text.\n")
@@ -1191,8 +1226,8 @@ def diff_deleted_in_head(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- A_path = os.path.join(sbox.wc_dir, 'A')
- mu_path = os.path.join(sbox.wc_dir, 'A', 'mu')
+ A_path = sbox.ospath('A')
+ mu_path = sbox.ospath('A/mu')
# Make a change to mu, commit r2, update.
svntest.main.file_append(mu_path, "some rev2 mu text.\n")
@@ -1238,6 +1273,7 @@ def diff_deleted_in_head(sbox):
#----------------------------------------------------------------------
+@Issue(2873)
def diff_targets(sbox):
"select diff targets"
@@ -1322,8 +1358,8 @@ def diff_branches(sbox):
svntest.actions.run_and_verify_svn(None, None, [],
'up', sbox.wc_dir)
- A_alpha = os.path.join(sbox.wc_dir, 'A', 'B', 'E', 'alpha')
- A2_alpha = os.path.join(sbox.wc_dir, 'A2', 'B', 'E', 'alpha')
+ A_alpha = sbox.ospath('A/B/E/alpha')
+ A2_alpha = sbox.ospath('A2/B/E/alpha')
svntest.main.file_append(A_alpha, "\nfoo\n")
svntest.actions.run_and_verify_svn(None, None, [],
@@ -1388,8 +1424,8 @@ def diff_repos_and_wc(sbox):
svntest.actions.run_and_verify_svn(None, None, [],
'up', sbox.wc_dir)
- A_alpha = os.path.join(sbox.wc_dir, 'A', 'B', 'E', 'alpha')
- A2_alpha = os.path.join(sbox.wc_dir, 'A2', 'B', 'E', 'alpha')
+ A_alpha = sbox.ospath('A/B/E/alpha')
+ A2_alpha = sbox.ospath('A2/B/E/alpha')
svntest.main.file_append(A_alpha, "\nfoo\n")
svntest.actions.run_and_verify_svn(None, None, [],
@@ -1403,7 +1439,7 @@ def diff_repos_and_wc(sbox):
# Compare working file on one branch against repository file on
# another branch
- A_path = os.path.join(sbox.wc_dir, 'A')
+ A_path = sbox.ospath('A')
rel_path = os.path.join('B', 'E', 'alpha')
exit_code, diff_output, err = svntest.actions.run_and_verify_svn(
None, None, [],
@@ -1429,9 +1465,9 @@ def diff_file_urls(sbox):
sbox.build()
- iota_path = os.path.join(sbox.wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
iota_url = sbox.repo_url + '/iota'
- iota_copy_path = os.path.join(sbox.wc_dir, 'A', 'iota')
+ iota_copy_path = sbox.ospath('A/iota')
iota_copy_url = sbox.repo_url + '/A/iota'
iota_copy2_url = sbox.repo_url + '/A/iota2'
@@ -1488,7 +1524,7 @@ def diff_prop_change_local_edit(sbox):
sbox.build()
- iota_path = os.path.join(sbox.wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
iota_url = sbox.repo_url + '/iota'
# Change a property on iota, and commit.
@@ -1533,10 +1569,10 @@ def check_for_omitted_prefix_in_path_component(sbox):
sbox.build()
svntest.actions.do_sleep_for_timestamps()
- prefix_path = os.path.join(sbox.wc_dir, 'prefix_mydir')
+ prefix_path = sbox.ospath('prefix_mydir')
svntest.actions.run_and_verify_svn(None, None, [],
'mkdir', prefix_path)
- other_prefix_path = os.path.join(sbox.wc_dir, 'prefix_other')
+ other_prefix_path = sbox.ospath('prefix_other')
svntest.actions.run_and_verify_svn(None, None, [],
'mkdir', other_prefix_path)
@@ -1575,12 +1611,11 @@ def check_for_omitted_prefix_in_path_component(sbox):
good_dest = ".../prefix_other/mytag"
if ((src != good_src) or (dest != good_dest)):
- print("src is '%s' instead of '%s' and dest is '%s' instead of '%s'" %
+ logger.warn("src is '%s' instead of '%s' and dest is '%s' instead of '%s'" %
(src, good_src, dest, good_dest))
raise svntest.Failure
#----------------------------------------------------------------------
-@XFail()
def diff_renamed_file(sbox):
"diff a file that has been renamed"
@@ -1773,6 +1808,7 @@ def diff_prop_on_named_dir(sbox):
svntest.actions.run_and_verify_svn(None, None, [],
'propdel', 'p', 'A')
+
svntest.actions.run_and_verify_svn(None, None, [],
'ci', '-m', '')
@@ -1787,7 +1823,7 @@ def diff_keywords(sbox):
sbox.build()
- iota_path = os.path.join(sbox.wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
svntest.actions.run_and_verify_svn(None, None, [],
'ps',
@@ -1868,11 +1904,11 @@ def diff_force(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
# Append a line to iota and make it binary.
svntest.main.file_append(iota_path, "new line")
- svntest.main.run_svn(None,
+ svntest.main.run_svn(binary_mime_type_on_text_file_warning,
'propset', 'svn:mime-type',
'application/octet-stream', iota_path)
@@ -1950,7 +1986,7 @@ def diff_renamed_dir(sbox):
svntest.main.run_svn(None, 'mv', os.path.join('A', 'D', 'G'),
os.path.join('A', 'D', 'I'))
- # Check a repos->wc diff
+ # Check a wc->wc diff
exit_code, diff_output, err_output = svntest.main.run_svn(
None, 'diff', '--show-copies-as-adds', os.path.join('A', 'D'))
@@ -1963,6 +1999,23 @@ def diff_renamed_dir(sbox):
'A') :
raise svntest.Failure
+ # Check a repos->wc diff of the moved-here node before commit
+ exit_code, diff_output, err_output = svntest.main.run_svn(
+ None, 'diff', '-r', '1', '--show-copies-as-adds',
+ os.path.join('A', 'D', 'I'))
+ if check_diff_output(diff_output,
+ os.path.join('A', 'D', 'I', 'pi'),
+ 'A') :
+ raise svntest.Failure
+
+ # Check a repos->wc diff of the moved-away node before commit
+ exit_code, diff_output, err_output = svntest.main.run_svn(
+ None, 'diff', '-r', '1', os.path.join('A', 'D', 'G'))
+ if check_diff_output(diff_output,
+ os.path.join('A', 'D', 'G', 'pi'),
+ 'D') :
+ raise svntest.Failure
+
# Commit
svntest.actions.run_and_verify_svn(None, None, [],
'ci', '-m', 'log msg')
@@ -2058,45 +2111,36 @@ def diff_property_changes_to_base(sbox):
sbox.build()
wc_dir = sbox.wc_dir
-
- add_diff = \
- make_diff_prop_header("A") + \
- make_diff_prop_added("dirprop", "r2value") + \
- make_diff_prop_header("iota") + \
- make_diff_prop_added("fileprop", "r2value")
-
- del_diff = \
- make_diff_prop_header("A") + \
- make_diff_prop_deleted("dirprop", "r2value") + \
- make_diff_prop_header("iota") + \
- make_diff_prop_deleted("fileprop", "r2value")
-
-
- expected_output_r1_r2 = list(make_diff_header('A', 'revision 1', 'revision 2')
- + add_diff[:6]
- + make_diff_header('iota', 'revision 1',
- 'revision 2')
- + add_diff[7:])
-
- expected_output_r2_r1 = list(make_diff_header('A', 'revision 2',
- 'revision 1')
- + del_diff[:6]
- + make_diff_header('iota', 'revision 2',
- 'revision 1')
- + del_diff[7:])
-
- expected_output_r1 = list(make_diff_header('A', 'revision 1',
- 'working copy')
- + add_diff[:6]
- + make_diff_header('iota', 'revision 1',
- 'working copy')
- + add_diff[7:])
- expected_output_base_r1 = list(make_diff_header('A', 'working copy',
- 'revision 1')
- + del_diff[:6]
- + make_diff_header('iota', 'working copy',
- 'revision 1')
- + del_diff[7:])
+ # Each of these returns an expected diff as a list of lines.
+ def add_diff_A(r1, r2):
+ return (make_diff_header("A", r1, r2) +
+ make_diff_prop_header("A") +
+ make_diff_prop_added("dirprop", "r2value"))
+
+ def add_diff_iota(r1, r2):
+ return (make_diff_header("iota", r1, r2) +
+ make_diff_prop_header("iota") +
+ make_diff_prop_added("fileprop", "r2value"))
+
+ def del_diff_A(r1, r2):
+ return (make_diff_header("A", r1, r2) +
+ make_diff_prop_header("A") +
+ make_diff_prop_deleted("dirprop", "r2value"))
+
+ def del_diff_iota(r1, r2):
+ return (make_diff_header("iota", r1, r2) +
+ make_diff_prop_header("iota") +
+ make_diff_prop_deleted("fileprop", "r2value"))
+
+ # Each of these is an expected diff as a list of lines.
+ expected_output_r1_r2 = (add_diff_A('revision 1', 'revision 2') +
+ add_diff_iota('revision 1', 'revision 2'))
+ expected_output_r2_r1 = (del_diff_A('revision 2', 'revision 1') +
+ del_diff_iota('revision 2', 'revision 1'))
+ expected_output_r1 = (add_diff_A('revision 1', 'working copy') +
+ add_diff_iota('revision 1', 'working copy'))
+ expected_output_base_r1 = (del_diff_A('working copy', 'revision 1') +
+ del_diff_iota('working copy', 'revision 1'))
os.chdir(sbox.wc_dir)
@@ -2170,15 +2214,13 @@ def diff_schedule_delete(sbox):
expected_output_r2_base = make_diff_header("foo", "revision 2",
"working copy") + [
- "@@ -1 +1,2 @@\n",
- " xxx\n",
- "+yyy\n"
+ "@@ -1 +0,0 @@\n",
+ "-xxx\n",
]
- expected_output_base_r2 = make_diff_header("foo", "working copy",
+ expected_output_base_r2 = make_diff_header("foo", "revision 0",
"revision 2") + [
- "@@ -1,2 +1 @@\n",
- " xxx\n",
- "-yyy\n"
+ "@@ -0,0 +1 @@\n",
+ "+xxx\n",
]
expected_output_r1_base = make_diff_header("foo", "revision 0",
@@ -2272,8 +2314,9 @@ def diff_mime_type_changes(sbox):
'diff', '-r', 'BASE:1')
# Mark iota as a binary file in the working copy.
- svntest.actions.run_and_verify_svn(None, None, [],
- 'propset', 'svn:mime-type',
+ svntest.actions.run_and_verify_svn2(None, None,
+ binary_mime_type_on_text_file_warning, 0,
+ 'propset', 'svn:mime-type',
'application/octet-stream', 'iota')
# Check that the earlier diffs against BASE are unaffected by the
@@ -2387,9 +2430,9 @@ def diff_repos_wc_add_with_props(sbox):
] + make_diff_prop_header("X/bar") + \
make_diff_prop_added("propname", "propvalue")
- diff_X_r1_base = make_diff_header("X", "revision 1",
+ diff_X_r1_base = make_diff_header("X", "revision 0",
"working copy") + diff_X
- diff_X_base_r3 = make_diff_header("X", "working copy",
+ diff_X_base_r3 = make_diff_header("X", "revision 0",
"revision 3") + diff_X
diff_foo_r1_base = make_diff_header("foo", "revision 0",
"revision 3") + diff_foo
@@ -2488,7 +2531,7 @@ def diff_repos_working_added_dir(sbox):
"@@ -0,0 +1 @@\n",
"+content\n" ]
expected_output_r1_WORKING = make_diff_header("X/bar", "revision 0",
- "revision 2") + [
+ "working copy") + [
"@@ -0,0 +1,2 @@\n",
"+content\n",
"+more content\n" ]
@@ -2574,6 +2617,52 @@ def basic_diff_summarize(sbox):
wc_dir = sbox.wc_dir
p = sbox.ospath
+ # Diff summarize of a newly added file
+ expected_diff = svntest.wc.State(wc_dir, {
+ 'iota': Item(status='A '),
+ })
+ svntest.actions.run_and_verify_diff_summarize(expected_diff,
+ p('iota'), '-c1')
+
+ # Reverse summarize diff of a newly added file
+ expected_diff = svntest.wc.State(wc_dir, {
+ 'iota': Item(status='D '),
+ })
+ svntest.actions.run_and_verify_diff_summarize(expected_diff,
+ p('iota'), '-c-1')
+
+ # Diff summarize of a newly added directory
+ expected_diff = svntest.wc.State(wc_dir, {
+ 'A/D': Item(status='A '),
+ 'A/D/gamma': Item(status='A '),
+ 'A/D/H': Item(status='A '),
+ 'A/D/H/chi': Item(status='A '),
+ 'A/D/H/psi': Item(status='A '),
+ 'A/D/H/omega': Item(status='A '),
+ 'A/D/G': Item(status='A '),
+ 'A/D/G/pi': Item(status='A '),
+ 'A/D/G/rho': Item(status='A '),
+ 'A/D/G/tau': Item(status='A '),
+ })
+ svntest.actions.run_and_verify_diff_summarize(expected_diff,
+ p('A/D'), '-c1')
+
+ # Reverse summarize diff of a newly added directory
+ expected_diff = svntest.wc.State(wc_dir, {
+ 'A/D': Item(status='D '),
+ 'A/D/gamma': Item(status='D '),
+ 'A/D/H': Item(status='D '),
+ 'A/D/H/chi': Item(status='D '),
+ 'A/D/H/psi': Item(status='D '),
+ 'A/D/H/omega': Item(status='D '),
+ 'A/D/G': Item(status='D '),
+ 'A/D/G/pi': Item(status='D '),
+ 'A/D/G/rho': Item(status='D '),
+ 'A/D/G/tau': Item(status='D '),
+ })
+ svntest.actions.run_and_verify_diff_summarize(expected_diff,
+ p('A/D'), '-c-1')
+
# Add props to some items that will be deleted, and commit.
sbox.simple_propset('prop', 'val',
'A/C',
@@ -2685,7 +2774,7 @@ def diff_weird_author(sbox):
svntest.actions.enable_revprop_changes(sbox.repo_dir)
- svntest.main.file_write(os.path.join(sbox.wc_dir, 'A', 'mu'),
+ svntest.main.file_write(sbox.ospath('A/mu'),
"new content\n")
expected_output = svntest.wc.State(sbox.wc_dir, {
@@ -2811,8 +2900,8 @@ def diff_in_renamed_folder(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- C_path = os.path.join(wc_dir, "A", "C")
- D_path = os.path.join(wc_dir, "A", "D")
+ C_path = sbox.ospath('A/C')
+ D_path = sbox.ospath('A/D')
kappa_path = os.path.join(D_path, "C", "kappa")
# add a new file to a renamed (moved in this case) folder.
@@ -2857,146 +2946,117 @@ def diff_with_depth(sbox):
"test diffs at various depths"
sbox.build()
+ os.chdir(sbox.wc_dir)
+ sbox.wc_dir = ''
B_path = os.path.join('A', 'B')
- diff = make_diff_prop_header(".") + \
- make_diff_prop_added("foo1", "bar1") + \
- make_diff_prop_header("iota") + \
- make_diff_prop_added("foo2", "bar2") + \
- make_diff_prop_header("A") + \
- make_diff_prop_added("foo3", "bar3") + \
- make_diff_prop_header("A/B") + \
- make_diff_prop_added("foo4", "bar4")
-
- dot_header = make_diff_header(".", "revision 1", "working copy")
- iota_header = make_diff_header('iota', "revision 1", "working copy")
- A_header = make_diff_header('A', "revision 1", "working copy")
- B_header = make_diff_header(B_path, "revision 1", "working copy")
-
- expected_empty = svntest.verify.UnorderedOutput(dot_header + diff[:7])
- expected_files = svntest.verify.UnorderedOutput(dot_header + diff[:7]
- + iota_header + diff[8:14])
- expected_immediates = svntest.verify.UnorderedOutput(dot_header + diff[:7]
- + iota_header
- + diff[8:14]
- + A_header + diff[15:21])
- expected_infinity = svntest.verify.UnorderedOutput(dot_header + diff[:7]
- + iota_header
- + diff[8:14]
- + A_header + diff[15:21]
- + B_header + diff[22:])
-
- os.chdir(sbox.wc_dir)
-
- svntest.actions.run_and_verify_svn(None, None, [],
- 'propset',
- 'foo1', 'bar1', '.')
- svntest.actions.run_and_verify_svn(None, None, [],
- 'propset',
- 'foo2', 'bar2', 'iota')
- svntest.actions.run_and_verify_svn(None, None, [],
- 'propset',
- 'foo3', 'bar3', 'A')
- svntest.actions.run_and_verify_svn(None, None, [],
- 'propset',
- 'foo4', 'bar4', os.path.join('A', 'B'))
+ sbox.simple_propset('foo1', 'bar1', '.')
+ sbox.simple_propset('foo2', 'bar2', 'iota')
+ sbox.simple_propset('foo3', 'bar3', 'A')
+ sbox.simple_propset('foo4', 'bar4', 'A/B')
+
+ def create_expected_diffs(r1, r2):
+ diff_dot = \
+ make_diff_header(".", r1, r2) + \
+ make_diff_prop_header(".") + \
+ make_diff_prop_added("foo1", "bar1")
+ diff_iota = \
+ make_diff_header('iota', r1, r2) + \
+ make_diff_prop_header("iota") + \
+ make_diff_prop_added("foo2", "bar2")
+ diff_A = \
+ make_diff_header('A', r1, r2) + \
+ make_diff_prop_header("A") + \
+ make_diff_prop_added("foo3", "bar3")
+ diff_AB = \
+ make_diff_header(B_path, r1, r2) + \
+ make_diff_prop_header("A/B") + \
+ make_diff_prop_added("foo4", "bar4")
+
+ expected = {}
+ expected['empty'] = svntest.verify.UnorderedOutput(diff_dot)
+ expected['files'] = svntest.verify.UnorderedOutput(diff_dot +
+ diff_iota)
+ expected['immediates'] = svntest.verify.UnorderedOutput(diff_dot +
+ diff_iota +
+ diff_A)
+ expected['infinity'] = svntest.verify.UnorderedOutput(diff_dot +
+ diff_iota +
+ diff_A +
+ diff_AB)
+ return expected
# Test wc-wc diff.
- svntest.actions.run_and_verify_svn(None, expected_empty, [],
- 'diff', '--depth', 'empty')
- svntest.actions.run_and_verify_svn(None, expected_files, [],
- 'diff', '--depth', 'files')
- svntest.actions.run_and_verify_svn(None, expected_immediates, [],
- 'diff', '--depth', 'immediates')
- svntest.actions.run_and_verify_svn(None, expected_infinity, [],
- 'diff', '--depth', 'infinity')
+ expected_diffs = create_expected_diffs("revision 1", "working copy")
+ for depth in ['empty', 'files', 'immediates', 'infinity']:
+ svntest.actions.run_and_verify_svn(None, expected_diffs[depth], [],
+ 'diff', '--depth', depth)
# Commit the changes.
svntest.actions.run_and_verify_svn(None, None, [],
'ci', '-m', '')
- dot_header = make_diff_header(".", "revision 1", "revision 2")
- iota_header = make_diff_header('iota', "revision 1", "revision 2")
- A_header = make_diff_header('A', "revision 1", "revision 2")
- B_header = make_diff_header(B_path, "revision 1", "revision 2")
-
- expected_empty = svntest.verify.UnorderedOutput(dot_header + diff[:7])
- expected_files = svntest.verify.UnorderedOutput(dot_header + diff[:7]
- + iota_header + diff[8:14])
- expected_immediates = svntest.verify.UnorderedOutput(dot_header + diff[:7]
- + iota_header
- + diff[8:14]
- + A_header + diff[15:21])
- expected_infinity = svntest.verify.UnorderedOutput(dot_header + diff[:6]
- + iota_header
- + diff[8:14]
- + A_header + diff[15:21]
- + B_header + diff[22:])
-
# Test repos-repos diff.
- svntest.actions.run_and_verify_svn(None, expected_empty, [],
- 'diff', '-c2', '--depth', 'empty')
- svntest.actions.run_and_verify_svn(None, expected_files, [],
- 'diff', '-c2', '--depth', 'files')
- svntest.actions.run_and_verify_svn(None, expected_immediates, [],
- 'diff', '-c2', '--depth', 'immediates')
- svntest.actions.run_and_verify_svn(None, expected_infinity, [],
- 'diff', '-c2', '--depth', 'infinity')
-
- diff_wc_repos = \
- make_diff_header("A/B", "revision 2", "working copy") + \
- make_diff_prop_header("A/B") + \
- make_diff_prop_modified("foo4", "bar4", "baz4") + \
- make_diff_header("A", "revision 2", "working copy") + \
- make_diff_prop_header("A") + \
- make_diff_prop_modified("foo3", "bar3", "baz3") + \
- make_diff_header("A/mu", "revision 1", "working copy") + [
- "@@ -1 +1,2 @@\n",
- " This is the file 'mu'.\n",
- "+new text\n",
- ] + make_diff_header("iota", "revision 2", "working copy") + [
- "@@ -1 +1,2 @@\n",
- " This is the file 'iota'.\n",
- "+new text\n",
- ] + make_diff_prop_header("iota") + \
- make_diff_prop_modified("foo2", "bar2", "baz2") + \
- make_diff_header(".", "revision 2", "working copy") + \
- make_diff_prop_header(".") + \
- make_diff_prop_modified("foo1", "bar1", "baz1")
-
- expected_empty = svntest.verify.UnorderedOutput(diff_wc_repos[49:])
- expected_files = svntest.verify.UnorderedOutput(diff_wc_repos[33:])
- expected_immediates = svntest.verify.UnorderedOutput(diff_wc_repos[13:26]
- +diff_wc_repos[33:])
- expected_infinity = svntest.verify.UnorderedOutput(diff_wc_repos[:])
+ expected_diffs = create_expected_diffs("revision 1", "revision 2")
+ for depth in ['empty', 'files', 'immediates', 'infinity']:
+ svntest.actions.run_and_verify_svn(None, expected_diffs[depth], [],
+ 'diff', '-c2', '--depth', depth)
+
+ def create_expected_repos_wc_diffs():
+ diff_AB = \
+ make_diff_header("A/B", "revision 2", "working copy") + \
+ make_diff_prop_header("A/B") + \
+ make_diff_prop_modified("foo4", "bar4", "baz4")
+ diff_A = \
+ make_diff_header("A", "revision 2", "working copy") + \
+ make_diff_prop_header("A") + \
+ make_diff_prop_modified("foo3", "bar3", "baz3")
+ diff_mu = \
+ make_diff_header("A/mu", "revision 2", "working copy") + [
+ "@@ -1 +1,2 @@\n",
+ " This is the file 'mu'.\n",
+ "+new text\n",]
+ diff_iota = \
+ make_diff_header("iota", "revision 2", "working copy") + [
+ "@@ -1 +1,2 @@\n",
+ " This is the file 'iota'.\n",
+ "+new text\n",
+ ] + make_diff_prop_header("iota") + \
+ make_diff_prop_modified("foo2", "bar2", "baz2")
+ diff_dot = \
+ make_diff_header(".", "revision 2", "working copy") + \
+ make_diff_prop_header(".") + \
+ make_diff_prop_modified("foo1", "bar1", "baz1")
+
+ expected = {}
+ expected['empty'] = svntest.verify.UnorderedOutput(diff_dot)
+ expected['files'] = svntest.verify.UnorderedOutput(diff_iota +
+ diff_dot)
+ expected['immediates'] = svntest.verify.UnorderedOutput(diff_A +
+ diff_iota +
+ diff_dot)
+ expected['infinity'] = svntest.verify.UnorderedOutput(diff_AB +
+ diff_A +
+ diff_mu +
+ diff_iota +
+ diff_dot)
+ return expected
svntest.actions.run_and_verify_svn(None, None, [],
'up', '-r1')
- svntest.actions.run_and_verify_svn(None, None, [],
- 'propset',
- 'foo1', 'baz1', '.')
- svntest.actions.run_and_verify_svn(None, None, [],
- 'propset',
- 'foo2', 'baz2', 'iota')
- svntest.actions.run_and_verify_svn(None, None, [],
- 'propset',
- 'foo3', 'baz3', 'A')
- svntest.actions.run_and_verify_svn(None, None, [],
- 'propset',
- 'foo4', 'baz4', os.path.join('A', 'B'))
+ sbox.simple_propset('foo1', 'baz1', '.')
+ sbox.simple_propset('foo2', 'baz2', 'iota')
+ sbox.simple_propset('foo3', 'baz3', 'A')
+ sbox.simple_propset('foo4', 'baz4', 'A/B')
svntest.main.file_append(os.path.join('A', 'mu'), "new text\n")
svntest.main.file_append('iota', "new text\n")
# Test wc-repos diff.
- svntest.actions.run_and_verify_svn(None, expected_empty, [],
- 'diff', '-rHEAD', '--depth', 'empty')
- svntest.actions.run_and_verify_svn(None, expected_files, [],
- 'diff', '-rHEAD', '--depth', 'files')
- svntest.actions.run_and_verify_svn(None, expected_immediates, [],
- 'diff', '-rHEAD', '--depth', 'immediates')
- svntest.actions.run_and_verify_svn(None, expected_infinity, [],
- 'diff', '-rHEAD', '--depth', 'infinity')
+ expected_diffs = create_expected_repos_wc_diffs()
+ for depth in ['empty', 'files', 'immediates', 'infinity']:
+ svntest.actions.run_and_verify_svn(None, expected_diffs[depth], [],
+ 'diff', '-rHEAD', '--depth', depth)
# test for issue 2920: ignore eol-style on empty lines
@Issue(2920)
@@ -3073,21 +3133,21 @@ def diff_summarize_xml(sbox):
wc_dir = sbox.wc_dir
# A content modification.
- svntest.main.file_append(os.path.join(wc_dir, "A", "mu"), "New mu content")
+ svntest.main.file_append(sbox.ospath('A/mu'), "New mu content")
# A prop modification.
svntest.main.run_svn(None,
"propset", "prop", "val",
- os.path.join(wc_dir, 'iota'))
+ sbox.ospath('iota'))
# Both content and prop mods.
- tau_path = os.path.join(wc_dir, "A", "D", "G", "tau")
+ tau_path = sbox.ospath('A/D/G/tau')
svntest.main.file_append(tau_path, "tautau")
svntest.main.run_svn(None,
"propset", "prop", "val", tau_path)
# A file addition.
- newfile_path = os.path.join(wc_dir, 'newfile')
+ newfile_path = sbox.ospath('newfile')
svntest.main.file_append(newfile_path, 'newfile')
svntest.main.run_svn(None, 'add', newfile_path)
@@ -3096,7 +3156,7 @@ def diff_summarize_xml(sbox):
'lambda'))
# A directory addition
- svntest.main.run_svn(None, "mkdir", os.path.join(wc_dir, 'newdir'))
+ svntest.main.run_svn(None, "mkdir", sbox.ospath('newdir'))
expected_output = svntest.wc.State(wc_dir, {
'A/mu': Item(verb='Sending'),
@@ -3115,6 +3175,16 @@ def diff_summarize_xml(sbox):
wc_rev=2)
expected_status.remove("A/B/lambda")
+ # 3) Test working copy summarize
+ paths = ['A/mu', 'iota', 'A/D/G/tau', 'newfile', 'A/B/lambda',
+ 'newdir',]
+ items = ['modified', 'none', 'modified', 'added', 'deleted', 'added',]
+ kinds = ['file','file','file','file','file', 'dir',]
+ props = ['none', 'modified', 'modified', 'none', 'none', 'none',]
+
+ svntest.actions.run_and_verify_diff_summarize_xml(
+ [], wc_dir, paths, items, props, kinds, wc_dir)
+
svntest.actions.run_and_verify_commit(wc_dir, expected_output,
expected_status, None, wc_dir)
@@ -3128,38 +3198,21 @@ def diff_summarize_xml(sbox):
".*No such revision 5555555",
None, wc_dir, None, None, None, '-r0:5555555', wc_dir)
- # 3) Test working copy summarize
- svntest.actions.run_and_verify_diff_summarize_xml(
- ".*Summarizing diff can only compare repository to repository",
- None, wc_dir, None, None, wc_dir)
-
# 4) Test --summarize --xml on -c2
- paths = ['iota',]
- items = ['none',]
- kinds = ['file',]
- props = ['modified',]
+ paths_iota = ['iota',]
+ items_iota = ['none',]
+ kinds_iota = ['file',]
+ props_iota = ['modified',]
svntest.actions.run_and_verify_diff_summarize_xml(
- [], wc_dir, paths, items, props, kinds, '-c2',
- os.path.join(wc_dir, 'iota'))
+ [], wc_dir, paths_iota, items_iota, props_iota, kinds_iota, '-c2',
+ sbox.ospath('iota'))
# 5) Test --summarize --xml on -r1:2
- paths = ['A/mu', 'iota', 'A/D/G/tau', 'newfile', 'A/B/lambda',
- 'newdir',]
- items = ['modified', 'none', 'modified', 'added', 'deleted', 'added',]
- kinds = ['file','file','file','file','file', 'dir',]
- props = ['none', 'modified', 'modified', 'none', 'none', 'none',]
-
svntest.actions.run_and_verify_diff_summarize_xml(
[], wc_dir, paths, items, props, kinds, '-r1:2', wc_dir)
# 6) Same as test #5 but ran against a URL instead of a WC path
- paths = ['A/mu', 'iota', 'A/D/G/tau', 'newfile', 'A/B/lambda',
- 'newdir',]
- items = ['modified', 'none', 'modified', 'added', 'deleted', 'added',]
- kinds = ['file','file','file','file','file', 'dir',]
- props = ['none', 'modified', 'modified', 'none', 'none', 'none',]
-
svntest.actions.run_and_verify_diff_summarize_xml(
[], sbox.repo_url, paths, items, props, kinds, '-r1:2', sbox.repo_url)
@@ -3167,7 +3220,7 @@ def diff_file_depth_empty(sbox):
"svn diff --depth=empty FILE_WITH_LOCAL_MODS"
# The bug was that no diff output would be generated. Check that some is.
sbox.build()
- iota_path = os.path.join(sbox.wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
svntest.main.file_append(iota_path, "new text in iota")
exit_code, out, err = svntest.main.run_svn(None, 'diff',
'--depth', 'empty', iota_path)
@@ -3242,7 +3295,6 @@ def make_file_edit_del_add(dir):
svntest.main.run_svn(None, 'add', theta)
-@XFail()
@Issue(3295)
def diff_url_against_local_mods(sbox):
"diff URL against working copy with local mods"
@@ -3265,12 +3317,18 @@ def diff_url_against_local_mods(sbox):
'up')
# In A, add, remove and change a file, and commit.
- make_file_edit_del_add(A);
+ make_file_edit_del_add(A)
svntest.actions.run_and_verify_svn(None, None, [],
'ci', '-m', 'committing A')
# In A2, do the same changes but leave uncommitted.
- make_file_edit_del_add(A2);
+ make_file_edit_del_add(A2)
+
+ # Diff Path of A against working copy of A2.
+ # Output using arbritrary diff handling should be empty.
+ expected_output = []
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'diff', '--old', A, '--new', A2)
# Diff URL of A against working copy of A2. Output should be empty.
expected_output = []
@@ -3281,7 +3339,6 @@ def diff_url_against_local_mods(sbox):
#----------------------------------------------------------------------
# Diff against old revision of the parent directory of a removed and
# locally re-added file.
-@XFail()
@Issue(3797)
def diff_preexisting_rev_against_local_add(sbox):
"diff -r1 of dir with removed-then-readded file"
@@ -3310,13 +3367,13 @@ def diff_git_format_wc_wc(sbox):
"create a diff in git unidiff format for wc-wc"
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, 'iota')
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- new_path = os.path.join(wc_dir, 'new')
- lambda_path = os.path.join(wc_dir, 'A', 'B', 'lambda')
- lambda_copied_path = os.path.join(wc_dir, 'A', 'B', 'lambda_copied')
- alpha_path = os.path.join(wc_dir, 'A', 'B', 'E', 'alpha')
- alpha_copied_path = os.path.join(wc_dir, 'A', 'B', 'E', 'alpha_copied')
+ iota_path = sbox.ospath('iota')
+ mu_path = sbox.ospath('A/mu')
+ new_path = sbox.ospath('new')
+ lambda_path = sbox.ospath('A/B/lambda')
+ lambda_copied_path = sbox.ospath('A/B/lambda_copied')
+ alpha_path = sbox.ospath('A/B/E/alpha')
+ alpha_copied_path = sbox.ospath('A/B/E/alpha_copied')
svntest.main.file_append(iota_path, "Changed 'iota'.\n")
svntest.main.file_append(new_path, "This is the file 'new'.\n")
@@ -3328,35 +3385,84 @@ def diff_git_format_wc_wc(sbox):
### We're not testing moved paths
- expected_output = make_git_diff_header(lambda_copied_path,
+ expected_output = make_git_diff_header(
+ alpha_copied_path, "A/B/E/alpha_copied",
+ "revision 0", "working copy",
+ copyfrom_path="A/B/E/alpha",
+ copyfrom_rev='1', cp=True,
+ text_changes=True) + [
+ "@@ -1 +1,2 @@\n",
+ " This is the file 'alpha'.\n",
+ "+This is a copy of 'alpha'.\n",
+ ] + make_git_diff_header(lambda_copied_path,
"A/B/lambda_copied",
"revision 1", "working copy",
- copyfrom_path="A/B/lambda", cp=True,
+ copyfrom_path="A/B/lambda",
+ copyfrom_rev='1', cp=True,
text_changes=False) \
+ make_git_diff_header(mu_path, "A/mu", "revision 1",
"working copy",
delete=True) + [
"@@ -1 +0,0 @@\n",
"-This is the file 'mu'.\n",
- ] + make_git_diff_header(alpha_copied_path, "A/B/E/alpha_copied",
- "revision 0", "working copy",
- copyfrom_path="A/B/E/alpha", cp=True,
- text_changes=True) + [
+ ] + make_git_diff_header(iota_path, "iota", "revision 1",
+ "working copy") + [
"@@ -1 +1,2 @@\n",
- " This is the file 'alpha'.\n",
- "+This is a copy of 'alpha'.\n",
+ " This is the file 'iota'.\n",
+ "+Changed 'iota'.\n",
] + make_git_diff_header(new_path, "new", "revision 0",
"working copy", add=True) + [
"@@ -0,0 +1 @@\n",
"+This is the file 'new'.\n",
- ] + make_git_diff_header(iota_path, "iota", "revision 1",
- "working copy") + [
- "@@ -1 +1,2 @@\n",
- " This is the file 'iota'.\n",
- "+Changed 'iota'.\n",
]
- expected = svntest.verify.UnorderedOutput(expected_output)
+ expected = expected_output
+
+ svntest.actions.run_and_verify_svn(None, expected, [], 'diff',
+ '--git', wc_dir)
+
+@Issue(4294)
+def diff_git_format_wc_wc_dir_mv(sbox):
+ "create a diff in git unidff format for wc dir mv"
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ g_path = sbox.ospath('A/D/G')
+ g2_path = sbox.ospath('A/D/G2')
+ pi_path = sbox.ospath('A/D/G/pi')
+ rho_path = sbox.ospath('A/D/G/rho')
+ tau_path = sbox.ospath('A/D/G/tau')
+ new_pi_path = sbox.ospath('A/D/G2/pi')
+ new_rho_path = sbox.ospath('A/D/G2/rho')
+ new_tau_path = sbox.ospath('A/D/G2/tau')
+
+ svntest.main.run_svn(None, 'mv', g_path, g2_path)
+
+ expected_output = make_git_diff_header(pi_path, "A/D/G/pi",
+ "revision 1", "working copy",
+ delete=True) \
+ + [
+ "@@ -1 +0,0 @@\n",
+ "-This is the file 'pi'.\n"
+ ] + make_git_diff_header(rho_path, "A/D/G/rho",
+ "revision 1", "working copy",
+ delete=True) \
+ + [
+ "@@ -1 +0,0 @@\n",
+ "-This is the file 'rho'.\n"
+ ] + make_git_diff_header(tau_path, "A/D/G/tau",
+ "revision 1", "working copy",
+ delete=True) \
+ + [
+ "@@ -1 +0,0 @@\n",
+ "-This is the file 'tau'.\n"
+ ] + make_git_diff_header(new_pi_path, "A/D/G2/pi", None, None, cp=True,
+ copyfrom_path="A/D/G/pi", copyfrom_rev='1', text_changes=False) \
+ + make_git_diff_header(new_rho_path, "A/D/G2/rho", None, None, cp=True,
+ copyfrom_path="A/D/G/rho", copyfrom_rev='1', text_changes=False) \
+ + make_git_diff_header(new_tau_path, "A/D/G2/tau", None, None, cp=True,
+ copyfrom_path="A/D/G/tau", copyfrom_rev='1', text_changes=False)
+
+ expected = expected_output
svntest.actions.run_and_verify_svn(None, expected, [], 'diff',
'--git', wc_dir)
@@ -3366,9 +3472,9 @@ def diff_git_format_url_wc(sbox):
sbox.build()
wc_dir = sbox.wc_dir
repo_url = sbox.repo_url
- iota_path = os.path.join(wc_dir, 'iota')
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- new_path = os.path.join(wc_dir, 'new')
+ iota_path = sbox.ospath('iota')
+ mu_path = sbox.ospath('A/mu')
+ new_path = sbox.ospath('new')
svntest.main.file_append(iota_path, "Changed 'iota'.\n")
svntest.main.file_append(new_path, "This is the file 'new'.\n")
svntest.main.run_svn(None, 'add', new_path)
@@ -3406,9 +3512,9 @@ def diff_git_format_url_url(sbox):
sbox.build()
wc_dir = sbox.wc_dir
repo_url = sbox.repo_url
- iota_path = os.path.join(wc_dir, 'iota')
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- new_path = os.path.join(wc_dir, 'new')
+ iota_path = sbox.ospath('iota')
+ mu_path = sbox.ospath('A/mu')
+ new_path = sbox.ospath('new')
svntest.main.file_append(iota_path, "Changed 'iota'.\n")
svntest.main.file_append(new_path, "This is the file 'new'.\n")
svntest.main.run_svn(None, 'add', new_path)
@@ -3450,7 +3556,7 @@ def diff_prop_missing_context(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
prop_val = "".join([
"line 1\n",
"line 2\n",
@@ -3501,7 +3607,7 @@ def diff_prop_multiple_hunks(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
prop_val = "".join([
"line 1\n",
"line 2\n",
@@ -3575,8 +3681,8 @@ def diff_git_empty_files(sbox):
"create a diff in git format for empty files"
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, 'iota')
- new_path = os.path.join(wc_dir, 'new')
+ iota_path = sbox.ospath('iota')
+ new_path = sbox.ospath('new')
svntest.main.file_write(iota_path, "")
# Now commit the local mod, creating rev 2.
@@ -3612,8 +3718,8 @@ def diff_git_with_props(sbox):
"create a diff in git format showing prop changes"
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, 'iota')
- new_path = os.path.join(wc_dir, 'new')
+ iota_path = sbox.ospath('iota')
+ new_path = sbox.ospath('new')
svntest.main.file_write(iota_path, "")
# Now commit the local mod, creating rev 2.
@@ -3640,7 +3746,7 @@ def diff_git_with_props(sbox):
make_diff_prop_header("new") + \
make_diff_prop_added("svn:eol-style", "native") + \
make_git_diff_header(iota_path, "iota",
- "revision 1", "working copy",
+ "revision 2", "working copy",
text_changes=False) + \
make_diff_prop_header("iota") + \
make_diff_prop_added("svn:keywords", "Id")
@@ -3651,6 +3757,44 @@ def diff_git_with_props(sbox):
svntest.actions.run_and_verify_svn(None, expected_output, [], 'diff',
'--git', wc_dir)
+@Issue(4010)
+def diff_correct_wc_base_revnum(sbox):
+ "diff WC-WC shows the correct base rev num"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ iota_path = sbox.ospath('iota')
+ svntest.main.file_write(iota_path, "")
+
+ # Commit a local mod, creating rev 2.
+ expected_output = svntest.wc.State(wc_dir, {
+ 'iota' : Item(verb='Sending'),
+ })
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.add({
+ 'iota' : Item(status=' ', wc_rev=2),
+ })
+ svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+ expected_status, None, wc_dir)
+
+ # Child's base is now 2; parent's is still 1.
+ # Make a local mod.
+ svntest.main.run_svn(None, 'propset', 'svn:keywords', 'Id', iota_path)
+
+ expected_output = make_git_diff_header(iota_path, "iota",
+ "revision 2", "working copy") + \
+ make_diff_prop_header("iota") + \
+ make_diff_prop_added("svn:keywords", "Id")
+
+ # Diff the parent.
+ svntest.actions.run_and_verify_svn(None, expected_output, [], 'diff',
+ '--git', wc_dir)
+
+ # The same again, but specifying the target explicity. This should
+ # give the same output.
+ svntest.actions.run_and_verify_svn(None, expected_output, [], 'diff',
+ '--git', iota_path)
+
def diff_git_with_props_on_dir(sbox):
"diff in git format showing prop changes on dir"
sbox.build()
@@ -3659,24 +3803,31 @@ def diff_git_with_props_on_dir(sbox):
# Now commit the local mod, creating rev 2.
expected_output = svntest.wc.State(wc_dir, {
'.' : Item(verb='Sending'),
+ 'A' : Item(verb='Sending'),
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.add({
'' : Item(status=' ', wc_rev=2),
})
+ expected_status.tweak('A', wc_rev=2)
- svntest.main.run_svn(None, 'ps', 'a','b', wc_dir)
+ sbox.simple_propset('k','v', '', 'A')
svntest.actions.run_and_verify_commit(wc_dir, expected_output,
expected_status, None, wc_dir)
was_cwd = os.getcwd()
os.chdir(wc_dir)
- expected_output = make_git_diff_header(".", "", "revision 1",
+ expected_output = make_git_diff_header("A", "A", "revision 1",
+ "revision 2",
+ add=False, text_changes=False) + \
+ make_diff_prop_header("A") + \
+ make_diff_prop_added("k", "v") + \
+ make_git_diff_header(".", "", "revision 1",
"revision 2",
add=False, text_changes=False) + \
make_diff_prop_header("") + \
- make_diff_prop_added("a", "b")
+ make_diff_prop_added("k", "v")
svntest.actions.run_and_verify_svn(None, expected_output, [], 'diff',
'-c2', '--git')
@@ -3688,8 +3839,8 @@ def diff_abs_localpath_from_wc_folder(sbox):
sbox.build(read_only = True)
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, 'A')
- B_abs_path = os.path.abspath(os.path.join(wc_dir, 'A', 'B'))
+ A_path = sbox.ospath('A')
+ B_abs_path = os.path.abspath(sbox.ospath('A/B'))
os.chdir(os.path.abspath(A_path))
svntest.actions.run_and_verify_svn(None, None, [], 'diff', B_abs_path)
@@ -3733,6 +3884,833 @@ def no_spurious_conflict(sbox):
expected_status.tweak('3449_spurious', status=' ')
svntest.actions.run_and_verify_status(wc_dir, expected_status)
+def diff_two_working_copies(sbox):
+ "diff between two working copies"
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # Create a pristine working copy that will remain mostly unchanged
+ wc_dir_old = sbox.add_wc_path('old')
+ svntest.main.run_svn(None, 'co', sbox.repo_url, wc_dir_old)
+ # Add a property to A/B/F in the pristine working copy
+ svntest.main.run_svn(None, 'propset', 'newprop', 'propval-old\n',
+ os.path.join(wc_dir_old, 'A', 'B', 'F'))
+
+ # Make changes to the first working copy:
+
+ # removed nodes
+ sbox.simple_rm('A/mu')
+ sbox.simple_rm('A/D/H')
+
+ # new nodes
+ sbox.simple_mkdir('newdir')
+ svntest.main.file_append(sbox.ospath('newdir/newfile'), 'new text\n')
+ sbox.simple_add('newdir/newfile')
+ sbox.simple_mkdir('newdir/newdir2') # should not show up in the diff
+
+ # modified nodes
+ sbox.simple_propset('newprop', 'propval', 'A/D')
+ sbox.simple_propset('newprop', 'propval', 'A/D/gamma')
+ svntest.main.file_append(sbox.ospath('A/B/lambda'), 'new text\n')
+
+ # replaced nodes (files vs. directories) with property mods
+ sbox.simple_rm('A/B/F')
+ svntest.main.file_append(sbox.ospath('A/B/F'), 'new text\n')
+ sbox.simple_add('A/B/F')
+ sbox.simple_propset('newprop', 'propval-new\n', 'A/B/F')
+ sbox.simple_rm('A/D/G/pi')
+ sbox.simple_mkdir('A/D/G/pi')
+ sbox.simple_propset('newprop', 'propval', 'A/D/G/pi')
+
+ src_label = os.path.basename(wc_dir_old)
+ dst_label = os.path.basename(wc_dir)
+ expected_output = make_diff_header('newdir/newfile', 'working copy',
+ 'working copy',
+ src_label, dst_label) + [
+ "@@ -0,0 +1 @@\n",
+ "+new text\n",
+ ] + make_diff_header('A/mu', 'working copy',
+ 'working copy',
+ src_label, dst_label) + [
+ "@@ -1 +0,0 @@\n",
+ "-This is the file 'mu'.\n",
+ ] + make_diff_header('A/B/F', 'working copy',
+ 'working copy',
+ src_label, dst_label) + [
+ "@@ -0,0 +1 @@\n",
+ "+new text\n",
+ ] + make_diff_prop_header('A/B/F') + \
+ make_diff_prop_modified("newprop", "propval-old\n",
+ "propval-new\n") + \
+ make_diff_header('A/B/lambda', 'working copy',
+ 'working copy',
+ src_label, dst_label) + [
+ "@@ -1 +1,2 @@\n",
+ " This is the file 'lambda'.\n",
+ "+new text\n",
+ ] + make_diff_header('A/D', 'working copy', 'working copy',
+ src_label, dst_label) + \
+ make_diff_prop_header('A/D') + \
+ make_diff_prop_added("newprop", "propval") + \
+ make_diff_header('A/D/gamma', 'working copy',
+ 'working copy',
+ src_label, dst_label) + \
+ make_diff_prop_header('A/D/gamma') + \
+ make_diff_prop_added("newprop", "propval") + \
+ make_diff_header('A/D/G/pi', 'working copy',
+ 'working copy',
+ src_label, dst_label) + [
+ "@@ -1 +0,0 @@\n",
+ "-This is the file 'pi'.\n",
+ ] + make_diff_header('A/D/G/pi', 'working copy',
+ 'working copy',
+ src_label, dst_label) + \
+ make_diff_prop_header('A/D/G/pi') + \
+ make_diff_prop_added("newprop", "propval") + \
+ make_diff_header('A/D/H/chi', 'working copy',
+ 'working copy',
+ src_label, dst_label) + [
+ "@@ -1 +0,0 @@\n",
+ "-This is the file 'chi'.\n",
+ ] + make_diff_header('A/D/H/omega', 'working copy',
+ 'working copy',
+ src_label, dst_label) + [
+ "@@ -1 +0,0 @@\n",
+ "-This is the file 'omega'.\n",
+ ] + make_diff_header('A/D/H/psi', 'working copy',
+ 'working copy',
+ src_label, dst_label) + [
+ "@@ -1 +0,0 @@\n",
+ "-This is the file 'psi'.\n",
+ ]
+
+ # Files in diff may be in any order.
+ expected_output = svntest.verify.UnorderedOutput(expected_output)
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'diff', '--old', wc_dir_old,
+ '--new', wc_dir)
+
+def diff_deleted_url(sbox):
+ "diff -cN of URL deleted in rN"
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # remove A/D/H in r2
+ sbox.simple_rm("A/D/H")
+ sbox.simple_commit()
+
+ # A diff of r2 with target A/D/H should show the removed children
+ expected_output = make_diff_header("chi", "revision 1", "revision 2") + [
+ "@@ -1 +0,0 @@\n",
+ "-This is the file 'chi'.\n",
+ ] + make_diff_header("omega", "revision 1",
+ "revision 2") + [
+ "@@ -1 +0,0 @@\n",
+ "-This is the file 'omega'.\n",
+ ] + make_diff_header("psi", "revision 1",
+ "revision 2") + [
+ "@@ -1 +0,0 @@\n",
+ "-This is the file 'psi'.\n",
+ ]
+
+ # Files in diff may be in any order.
+ expected_output = svntest.verify.UnorderedOutput(expected_output)
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'diff', '-c2',
+ sbox.repo_url + '/A/D/H')
+
+def diff_arbitrary_files_and_dirs(sbox):
+ "diff arbitrary files and dirs"
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # diff iota with A/mu
+ expected_output = make_diff_header("iota", "working copy", "working copy",
+ "iota", "A/mu") + [
+ "@@ -1 +1 @@\n",
+ "-This is the file 'iota'.\n",
+ "+This is the file 'mu'.\n"
+ ]
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'diff', '--old', sbox.ospath('iota'),
+ '--new', sbox.ospath('A/mu'))
+
+ # diff A/B/E with A/D
+ expected_output = make_diff_header("G/pi", "working copy", "working copy",
+ "B/E", "D") + [
+ "@@ -0,0 +1 @@\n",
+ "+This is the file 'pi'.\n"
+ ] + make_diff_header("G/rho", "working copy",
+ "working copy", "B/E", "D") + [
+ "@@ -0,0 +1 @@\n",
+ "+This is the file 'rho'.\n"
+ ] + make_diff_header("G/tau", "working copy",
+ "working copy", "B/E", "D") + [
+ "@@ -0,0 +1 @@\n",
+ "+This is the file 'tau'.\n"
+ ] + make_diff_header("H/chi", "working copy",
+ "working copy", "B/E", "D") + [
+ "@@ -0,0 +1 @@\n",
+ "+This is the file 'chi'.\n"
+ ] + make_diff_header("H/omega", "working copy",
+ "working copy", "B/E", "D") + [
+ "@@ -0,0 +1 @@\n",
+ "+This is the file 'omega'.\n"
+ ] + make_diff_header("H/psi", "working copy",
+ "working copy", "B/E", "D") + [
+ "@@ -0,0 +1 @@\n",
+ "+This is the file 'psi'.\n"
+ ] + make_diff_header("alpha", "working copy",
+ "working copy", "B/E", "D") + [
+ "@@ -1 +0,0 @@\n",
+ "-This is the file 'alpha'.\n"
+ ] + make_diff_header("beta", "working copy",
+ "working copy", "B/E", "D") + [
+ "@@ -1 +0,0 @@\n",
+ "-This is the file 'beta'.\n"
+ ] + make_diff_header("gamma", "working copy",
+ "working copy", "B/E", "D") + [
+ "@@ -0,0 +1 @@\n",
+ "+This is the file 'gamma'.\n"
+ ]
+
+ # Files in diff may be in any order.
+ expected_output = svntest.verify.UnorderedOutput(expected_output)
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'diff', '--old', sbox.ospath('A/B/E'),
+ '--new', sbox.ospath('A/D'))
+
+def diff_properties_only(sbox):
+ "diff --properties-only"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ expected_output = \
+ make_diff_header("iota", "revision 1", "revision 2") + \
+ make_diff_prop_header("iota") + \
+ make_diff_prop_added("svn:eol-style", "native")
+
+ expected_reverse_output = \
+ make_diff_header("iota", "revision 2", "revision 1") + \
+ make_diff_prop_header("iota") + \
+ make_diff_prop_deleted("svn:eol-style", "native")
+
+ expected_rev1_output = \
+ make_diff_header("iota", "revision 1", "working copy") + \
+ make_diff_prop_header("iota") + \
+ make_diff_prop_added("svn:eol-style", "native")
+
+ # Make a property change and a content change to 'iota'
+ # Only the property change should be displayed by diff --properties-only
+ sbox.simple_propset('svn:eol-style', 'native', 'iota')
+ svntest.main.file_append(sbox.ospath('iota'), 'new text')
+
+ sbox.simple_commit() # r2
+
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'diff', '--properties-only', '-r', '1:2',
+ sbox.repo_url + '/iota')
+
+ svntest.actions.run_and_verify_svn(None, expected_reverse_output, [],
+ 'diff', '--properties-only', '-r', '2:1',
+ sbox.repo_url + '/iota')
+
+ os.chdir(wc_dir)
+ svntest.actions.run_and_verify_svn(None, expected_rev1_output, [],
+ 'diff', '--properties-only', '-r', '1',
+ 'iota')
+
+ svntest.actions.run_and_verify_svn(None, expected_rev1_output, [],
+ 'diff', '--properties-only',
+ '-r', 'PREV', 'iota')
+
+def diff_properties_no_newline(sbox):
+ "diff props; check no-newline-at-end messages"
+
+ sbox.build()
+ old_cwd = os.getcwd()
+ os.chdir(sbox.wc_dir)
+ sbox.wc_dir = ''
+
+ no_nl = "\\ No newline at end of property\n"
+ propchange_header = "Modified: p.*\n"
+
+ subtests = [
+ ('p1', 'val1', 'val2' ),
+ ('p2', 'val1', 'val2\n'),
+ ('p3', 'val1\n', 'val2' ),
+ ('p4', 'val1\n', 'val2\n'),
+ ]
+
+ # The "before" state.
+ for pname, old_val, new_val in subtests:
+ sbox.simple_propset(pname, old_val, 'iota')
+ sbox.simple_commit() # r2
+
+ # Test one change at a time. (Because, with multiple changes, the order
+ # may not be predictable.)
+ for pname, old_val, new_val in subtests:
+ expected_output = \
+ make_diff_header("iota", "revision 2", "working copy") + \
+ make_diff_prop_header("iota") + \
+ make_diff_prop_modified(pname, old_val, new_val)
+
+ sbox.simple_propset(pname, new_val, 'iota')
+ svntest.actions.run_and_verify_svn(None, expected_output, [], 'diff')
+ svntest.actions.run_and_verify_svn(None, None, [], 'revert', 'iota')
+
+ os.chdir(old_cwd)
+
+def diff_arbitrary_same(sbox):
+ "diff arbitrary files and dirs but same"
+
+ sbox.build(read_only = True)
+
+ sbox.simple_propset('k', 'v', 'A', 'A/mu', 'A/D/G/pi')
+
+ svntest.main.file_write(sbox.ospath('A/mu'), "new mu")
+
+ sbox.simple_copy('A', 'A2')
+
+ svntest.actions.run_and_verify_svn(None, [], [],
+ 'diff',
+ '--old', sbox.ospath('A'),
+ '--new', sbox.ospath('A2'))
+
+ svntest.actions.run_and_verify_svn(None, [], [],
+ 'diff', '--summarize',
+ '--old', sbox.ospath('A'),
+ '--new', sbox.ospath('A2'))
+
+def simple_ancestry(sbox):
+ "diff some simple ancestry changes"
+
+ sbox.build()
+ sbox.simple_copy('A/B/E', 'A/B/E_copied')
+ sbox.simple_copy('A/D/G/pi', 'A/D/G/pi-2')
+ sbox.simple_copy('A/D/G/rho', 'A/D/G/rho-2')
+ sbox.simple_rm('A/B/F', 'A/B/E', 'A/D/G/rho', 'A/D/G/tau')
+ sbox.simple_add_text('new', 'new')
+
+ line = '===================================================================\n'
+
+ expected_output = svntest.verify.UnorderedOutput([
+ 'Index: %s (added)\n' % sbox.path('new'),
+ line,
+ 'Index: %s (deleted)\n' % sbox.path('A/B/E/alpha'),
+ line,
+ 'Index: %s (deleted)\n' % sbox.path('A/B/E/beta'),
+ line,
+ 'Index: %s (added)\n' % sbox.path('A/B/E_copied/beta'),
+ line,
+ 'Index: %s (added)\n' % sbox.path('A/B/E_copied/alpha'),
+ line,
+ 'Index: %s (added)\n' % sbox.path('A/D/G/pi-2'),
+ line,
+ 'Index: %s (deleted)\n' % sbox.path('A/D/G/rho'),
+ line,
+ 'Index: %s (added)\n' % sbox.path('A/D/G/rho-2'),
+ line,
+ 'Index: %s (deleted)\n' % sbox.path('A/D/G/tau'),
+ line,
+ ])
+
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'diff', sbox.wc_dir,
+ '-r', '1',
+ '--notice-ancestry',
+ '--no-diff-deleted',
+ '--show-copies-as-adds',
+ '--no-diff-added')
+
+ # And try the same thing in reverse
+ sbox.simple_commit()
+ sbox.simple_update(revision=1)
+
+ expected_output = svntest.verify.UnorderedOutput([
+ 'Index: %s (deleted)\n' % sbox.path('new'),
+ line,
+ 'Index: %s (added)\n' % sbox.path('A/B/E/alpha'),
+ line,
+ 'Index: %s (added)\n' % sbox.path('A/B/E/beta'),
+ line,
+ 'Index: %s (deleted)\n' % sbox.path('A/B/E_copied/beta'),
+ line,
+ 'Index: %s (deleted)\n' % sbox.path('A/B/E_copied/alpha'),
+ line,
+ 'Index: %s (deleted)\n' % sbox.path('A/D/G/pi-2'),
+ line,
+ 'Index: %s (added)\n' % sbox.path('A/D/G/rho'),
+ line,
+ 'Index: %s (deleted)\n' % sbox.path('A/D/G/rho-2'),
+ line,
+ 'Index: %s (added)\n' % sbox.path('A/D/G/tau'),
+ line,
+ ])
+
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'diff', sbox.wc_dir,
+ '-r', 'HEAD',
+ '--notice-ancestry',
+ '--no-diff-deleted',
+ '--show-copies-as-adds',
+ '--no-diff-added')
+
+ # Now introduce a replacements and some delete-deletes
+ sbox.simple_update()
+ sbox.simple_mkdir('A/B/E')
+ sbox.simple_add_text('New alpha', 'A/B/E/alpha')
+ sbox.simple_add_text('New beta', 'A/B/E/beta')
+ sbox.simple_add_text('New rho', 'A/D/G/rho')
+ sbox.simple_add_text('New tau', 'A/D/G/tau')
+ sbox.simple_rm('A/B/E_copied', 'A/D/G/pi-2', 'A/D/G/rho-2')
+
+ expected_output = svntest.verify.UnorderedOutput([
+ 'Index: %s (added)\n' % sbox.path('new'),
+ line,
+ 'Index: %s (deleted)\n' % sbox.path('A/B/E/alpha'),
+ line,
+ 'Index: %s (deleted)\n' % sbox.path('A/B/E/beta'),
+ line,
+ 'Index: %s (added)\n' % sbox.path('A/B/E/alpha'),
+ line,
+ 'Index: %s (added)\n' % sbox.path('A/B/E/beta'),
+ line,
+ 'Index: %s (deleted)\n' % sbox.path('A/D/G/rho'),
+ line,
+ 'Index: %s (added)\n' % sbox.path('A/D/G/rho'),
+ line,
+ 'Index: %s (deleted)\n' % sbox.path('A/D/G/tau'),
+ line,
+ 'Index: %s (added)\n' % sbox.path('A/D/G/tau'),
+ line,
+ ])
+
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'diff', sbox.wc_dir,
+ '-r', '1',
+ '--notice-ancestry',
+ '--no-diff-deleted',
+ '--show-copies-as-adds',
+ '--no-diff-added')
+
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'diff', sbox.wc_dir,
+ '-r', '1',
+ '--notice-ancestry',
+ '--no-diff-deleted',
+ '--show-copies-as-adds',
+ '--no-diff-added')
+
+def local_tree_replace(sbox):
+ "diff a replaced tree"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ sbox.simple_add_text('extra', 'A/B/F/extra')
+ sbox.simple_commit()
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'rm', '--keep-local',
+ sbox.ospath('A/B'))
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'add', sbox.ospath('A/B'))
+
+ # And now check with ancestry
+
+ line = '===================================================================\n'
+
+ expected_output = svntest.verify.UnorderedOutput([
+ 'Index: %s (deleted)\n' % sbox.path('A/B/lambda'),
+ line,
+ 'Index: %s (deleted)\n' % sbox.path('A/B/E/alpha'),
+ line,
+ 'Index: %s (deleted)\n' % sbox.path('A/B/E/beta'),
+ line,
+ 'Index: %s (deleted)\n' % sbox.path('A/B/F/extra'),
+ line,
+ 'Index: %s (added)\n' % sbox.path('A/B/lambda'),
+ line,
+ 'Index: %s (added)\n' % sbox.path('A/B/E/alpha'),
+ line,
+ 'Index: %s (added)\n' % sbox.path('A/B/E/beta'),
+ line,
+ 'Index: %s (added)\n' % sbox.path('A/B/F/extra'),
+ line,
+ ])
+
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'diff', wc_dir,
+ '-r', '2',
+ '--notice-ancestry',
+ '--show-copies-as-adds',
+ '--no-diff-added',
+ '--no-diff-deleted')
+
+ # Now create patches to verify the tree ordering
+ patch = os.path.abspath(os.path.join(wc_dir, 'ancestry.patch'))
+
+ cwd = os.getcwd()
+ os.chdir(wc_dir)
+ _, out, _ = svntest.actions.run_and_verify_svn(None, None, [],
+ 'diff', '.',
+ '-r', '2',
+ '--notice-ancestry',
+ '--show-copies-as-adds')
+ svntest.main.file_append(patch, ''.join(out))
+ os.chdir(cwd)
+
+ # And try to apply it
+ svntest.actions.run_and_verify_svn(None, None, [], 'revert', '-R', wc_dir)
+
+ expected_output = svntest.verify.UnorderedOutput([
+ 'D %s\n' % sbox.ospath('A/B/F/extra'),
+ 'D %s\n' % sbox.ospath('A/B/F'),
+ 'D %s\n' % sbox.ospath('A/B/E/beta'),
+ 'D %s\n' % sbox.ospath('A/B/E/alpha'),
+ 'D %s\n' % sbox.ospath('A/B/E'),
+ 'D %s\n' % sbox.ospath('A/B/lambda'),
+ 'D %s\n' % sbox.ospath('A/B'),
+ 'A %s\n' % sbox.ospath('A/B'),
+ 'A %s\n' % sbox.ospath('A/B/lambda'),
+ 'A %s\n' % sbox.ospath('A/B/F'),
+ 'A %s\n' % sbox.ospath('A/B/F/extra'),
+ 'A %s\n' % sbox.ospath('A/B/E'),
+ 'A %s\n' % sbox.ospath('A/B/E/beta'),
+ 'A %s\n' % sbox.ospath('A/B/E/alpha'),
+ ])
+ # And this currently fails because the ordering is broken, but also
+ # because it hits an issue in 'svn patch'
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'patch', patch, wc_dir)
+
+def diff_dir_replaced_by_file(sbox):
+ "diff a directory replaced by a file"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ sbox.simple_rm('A/B/E')
+ sbox.simple_add_text('text', 'A/B/E')
+
+ expected_output = [
+ 'Index: %s\n' % sbox.path('A/B/E/alpha'),
+ '===================================================================\n',
+ '--- %s\t(revision 1)\n' % sbox.path('A/B/E/alpha'),
+ '+++ %s\t(working copy)\n' % sbox.path('A/B/E/alpha'),
+ '@@ -1 +0,0 @@\n',
+ '-This is the file \'alpha\'.\n',
+ 'Index: %s\n' % sbox.path('A/B/E/beta'),
+ '===================================================================\n',
+ '--- %s\t(revision 1)\n' % sbox.path('A/B/E/beta'),
+ '+++ %s\t(working copy)\n' % sbox.path('A/B/E/beta'),
+ '@@ -1 +0,0 @@\n',
+ '-This is the file \'beta\'.\n',
+ 'Index: %s\n' % sbox.path('A/B/E'),
+ '===================================================================\n',
+ '--- %s\t(revision 0)\n' % sbox.path('A/B/E'),
+ '+++ %s\t(working copy)\n' % sbox.path('A/B/E'),
+ '@@ -0,0 +1 @@\n',
+ '+text\n',
+ '\ No newline at end of file\n',
+ ]
+
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'diff', wc_dir)
+
+def diff_dir_replaced_by_dir(sbox):
+ "diff a directory replaced by a directory tree"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ sbox.simple_rm('A/B/E')
+ sbox.simple_mkdir('A/B/E')
+ sbox.simple_propset('a', 'b\n', 'A/B/E')
+ sbox.simple_add_text('New beta\n', 'A/B/E/beta')
+
+ # First check with ancestry (Tree replace)
+
+ expected_output = [
+ 'Index: %s\n' % sbox.path('A/B/E/alpha'),
+ '===================================================================\n',
+ '--- %s\t(revision 1)\n' % sbox.path('A/B/E/alpha'),
+ '+++ %s\t(working copy)\n' % sbox.path('A/B/E/alpha'),
+ '@@ -1 +0,0 @@\n',
+ '-This is the file \'alpha\'.\n',
+ 'Index: %s\n' % sbox.path('A/B/E/beta'),
+ '===================================================================\n',
+ '--- %s\t(revision 1)\n' % sbox.path('A/B/E/beta'),
+ '+++ %s\t(working copy)\n' % sbox.path('A/B/E/beta'),
+ '@@ -1 +0,0 @@\n',
+ '-This is the file \'beta\'.\n',
+ 'Index: %s\n' % sbox.path('A/B/E/beta'),
+ '===================================================================\n',
+ '--- %s\t(revision 0)\n' % sbox.path('A/B/E/beta'),
+ '+++ %s\t(working copy)\n' % sbox.path('A/B/E/beta'),
+ '@@ -0,0 +1 @@\n',
+ '+New beta\n',
+ 'Index: %s\n' % sbox.path('A/B/E'),
+ '===================================================================\n',
+ '--- %s\t(revision 0)\n' % sbox.path('A/B/E'),
+ '+++ %s\t(working copy)\n' % sbox.path('A/B/E'),
+ '\n',
+ 'Property changes on: %s\n' % sbox.path('A/B/E'),
+ '___________________________________________________________________\n',
+ 'Added: a\n',
+ '## -0,0 +1 ##\n',
+ '+b\n',
+ ]
+
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'diff', '--notice-ancestry', wc_dir)
+
+ # And summarized. Currently produces directory adds after their children
+ expected_output = svntest.verify.UnorderedOutput([
+ 'D %s\n' % sbox.ospath('A/B/E/alpha'),
+ 'D %s\n' % sbox.ospath('A/B/E/beta'),
+ 'D %s\n' % sbox.ospath('A/B/E'),
+ 'A %s\n' % sbox.ospath('A/B/E'),
+ 'A %s\n' % sbox.ospath('A/B/E/beta'),
+ ])
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'diff', '--summarize', wc_dir,
+ '--notice-ancestry')
+
+ # And now without (file delete, change + properties)
+ expected_output = [
+ 'Index: %s\n' % sbox.path('A/B/E/alpha'),
+ '===================================================================\n',
+ '--- %s\t(revision 1)\n' % sbox.path('A/B/E/alpha'),
+ '+++ %s\t(working copy)\n' % sbox.path('A/B/E/alpha'),
+ '@@ -1 +0,0 @@\n',
+ '-This is the file \'alpha\'.\n',
+ 'Index: %s\n' % sbox.path('A/B/E/beta'),
+ '===================================================================\n',
+ '--- %s\t(revision 1)\n' % sbox.path('A/B/E/beta'),
+ '+++ %s\t(working copy)\n' % sbox.path('A/B/E/beta'),
+ '@@ -1 +1 @@\n',
+ '-This is the file \'beta\'.\n',
+ '+New beta\n',
+ 'Index: %s\n' % sbox.path('A/B/E'),
+ '===================================================================\n',
+ '--- %s\t(revision 1)\n' % sbox.path('A/B/E'),
+ '+++ %s\t(working copy)\n' % sbox.path('A/B/E'),
+ '\n',
+ 'Property changes on: %s\n' % sbox.path('A/B/E'),
+ '___________________________________________________________________\n',
+ 'Added: a\n',
+ '## -0,0 +1 ##\n',
+ '+b\n',
+ ]
+
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'diff', wc_dir)
+
+ expected_output = [
+ 'D %s\n' % sbox.ospath('A/B/E/alpha'),
+ 'M %s\n' % sbox.ospath('A/B/E/beta'),
+ ' M %s\n' % sbox.ospath('A/B/E'),
+ ]
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'diff', '--summarize', wc_dir)
+
+
+@Issue(4366)
+def diff_repos_empty_file_addition(sbox):
+ "repos diff of rev which adds empty file"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # Add and commit an empty file.
+ svntest.main.file_append(sbox.ospath('newfile'), "")
+ svntest.main.run_svn(None, 'add', sbox.ospath('newfile'))
+ expected_output = svntest.wc.State(sbox.wc_dir, {
+ 'newfile': Item(verb='Adding'),
+ })
+ expected_status = svntest.actions.get_virginal_state(sbox.wc_dir, 1)
+ expected_status.add({
+ 'newfile' : Item(status=' ', wc_rev=2),
+ })
+ svntest.actions.run_and_verify_commit(sbox.wc_dir, expected_output,
+ expected_status, None, sbox.wc_dir)
+
+ # Now diff the revision that added the empty file.
+ expected_output = [
+ 'Index: newfile\n',
+ '===================================================================\n',
+ ]
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'diff', '-c', '2', sbox.repo_url)
+
+def diff_missing_tree_conflict_victim(sbox):
+ "diff with missing tree-conflict victim in wc"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # Produce an 'incoming edit vs. local missing' tree conflict:
+ # r2: edit iota and commit the change
+ svntest.main.file_append(sbox.ospath('iota'), "This is a change to iota.\n")
+ sbox.simple_propset('k', 'v', 'A/C')
+ sbox.simple_commit()
+ # now remove iota
+ sbox.simple_rm('iota', 'A/C')
+ sbox.simple_commit()
+ # update to avoid mixed-rev wc warning
+ sbox.simple_update()
+ # merge r2 into wc and verify that a tree conflict is flagged on iota
+ expected_output = wc.State(wc_dir, {
+ 'iota' : Item(status=' ', treeconflict='C'),
+ 'A/C' : Item(status=' ', treeconflict='C')
+ })
+ expected_mergeinfo_output = wc.State(wc_dir, {})
+ expected_elision_output = wc.State(wc_dir, {})
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.remove('iota','A/C')
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 3)
+ expected_status.tweak('iota', 'A/C',
+ status='! ', treeconflict='C', wc_rev=None)
+ expected_skip = wc.State('', { })
+ svntest.actions.run_and_verify_merge(wc_dir, '1', '2',
+ sbox.repo_url, None,
+ expected_output,
+ expected_mergeinfo_output,
+ expected_elision_output,
+ expected_disk,
+ expected_status,
+ expected_skip,
+ None, None, None, None, None, None,
+ False, '--ignore-ancestry', wc_dir)
+
+ # 'svn diff' should show no change for the working copy
+ # This currently fails because svn errors out with a 'node not found' error
+ expected_output = [ ]
+ svntest.actions.run_and_verify_svn(None, expected_output, [], 'diff', wc_dir)
+
+@Issue(4396)
+def diff_local_missing_obstruction(sbox):
+ "diff local missing and obstructed files"
+
+ sbox.build(read_only=True)
+ wc_dir = sbox.wc_dir
+
+ os.unlink(sbox.ospath('iota'))
+ os.unlink(sbox.ospath('A/mu'))
+ os.mkdir(sbox.ospath('A/mu'))
+
+ # Expect no output for missing and obstructed files
+ expected_output = [
+ ]
+ svntest.actions.run_and_verify_svn(None, expected_output, [], 'diff', wc_dir)
+
+ sbox.simple_propset('K', 'V', 'iota', 'A/mu')
+ sbox.simple_append('IotA', 'Content')
+
+ # But do expect a proper property diff
+ expected_output = [
+ 'Index: %s\n' % (sbox.path('A/mu'),),
+ '===================================================================\n',
+ '--- %s\t(revision 1)\n' % (sbox.path('A/mu'),),
+ '+++ %s\t(working copy)\n' % (sbox.path('A/mu'),),
+ '\n',
+ 'Property changes on: %s\n' % (sbox.path('A/mu'),),
+ '___________________________________________________________________\n',
+ 'Added: K\n',
+ '## -0,0 +1 ##\n',
+ '+V\n',
+ '\ No newline at end of property\n',
+ 'Index: %s\n' % (sbox.path('iota'),),
+ '===================================================================\n',
+ '--- %s\t(revision 1)\n' % (sbox.path('iota'),),
+ '+++ %s\t(working copy)\n' % (sbox.path('iota'),),
+ '\n',
+ 'Property changes on: %s\n' % (sbox.path('iota'),),
+ '___________________________________________________________________\n',
+ 'Added: K\n',
+ '## -0,0 +1 ##\n',
+ '+V\n',
+ '\ No newline at end of property\n',
+ ]
+ svntest.actions.run_and_verify_svn(None, expected_output, [], 'diff', wc_dir)
+
+ # Create an external. This produces an error in 1.8.0.
+ sbox.simple_propset('svn:externals', 'AA/BB ' + sbox.repo_url + '/A', '.')
+ sbox.simple_update()
+
+ svntest.actions.run_and_verify_svn(None, svntest.verify.AnyOutput, [],
+ 'diff', wc_dir)
+
+
+@Issue(4444)
+def diff_move_inside_copy(sbox):
+ "diff copied-along child that contains a moved file"
+ sbox.build(read_only=True)
+ wc_dir = sbox.wc_dir
+
+ d_path = 'A/D'
+ d_copy = 'A/D-copy'
+ h_path = 'A/D-copy/H'
+ chi_path = '%s/chi' % h_path
+ chi_moved = '%s/chi-moved' % h_path
+
+ sbox.simple_copy(d_path, d_copy)
+ sbox.simple_move(chi_path, chi_moved)
+ sbox.simple_append(chi_moved, 'a new line')
+
+ # Bug: Diffing the copied-along parent directory asserts
+ svntest.actions.run_and_verify_svn(None, svntest.verify.AnyOutput, [],
+ 'diff', sbox.ospath(h_path))
+# Regression test for the fix in r1619380. Prior to this (and in releases
+# 1.8.0 through 1.8.10) a local diff incorrectly showed a copied dir's
+# properties as added, whereas it should show only the changes against the
+# copy-source.
+def diff_local_copied_dir(sbox):
+ "local WC diff of copied dir"
+
+ sbox.build()
+
+ was_cwd = os.getcwd()
+ os.chdir(sbox.wc_dir)
+ sbox.wc_dir = ''
+
+ try:
+ sbox.simple_propset('p1', 'v1', 'A/C')
+ sbox.simple_commit()
+
+ # dir with no prop changes
+ sbox.simple_copy('A/C', 'C2')
+ # dir with prop changes
+ sbox.simple_copy('A/C', 'C3')
+ sbox.simple_propset('p2', 'v2', 'C3')
+
+ expected_output_C2 = []
+ expected_output_C3 = [
+ 'Index: C3\n',
+ '===================================================================\n',
+ '--- C3 (revision 2)\n',
+ '+++ C3 (working copy)\n',
+ '\n',
+ 'Property changes on: C3\n',
+ '___________________________________________________________________\n',
+ 'Added: p2\n',
+ '## -0,0 +1 ##\n',
+ '+v2\n',
+ '\ No newline at end of property\n',
+ ]
+
+ svntest.actions.run_and_verify_svn(None, expected_output_C2, [],
+ 'diff', 'C2')
+ svntest.actions.run_and_verify_svn(None, expected_output_C3, [],
+ 'diff', 'C3')
+ finally:
+ os.chdir(was_cwd)
########################################################################
#Run the tests
@@ -3800,6 +4778,23 @@ test_list = [ None,
diff_git_with_props_on_dir,
diff_abs_localpath_from_wc_folder,
no_spurious_conflict,
+ diff_correct_wc_base_revnum,
+ diff_two_working_copies,
+ diff_deleted_url,
+ diff_arbitrary_files_and_dirs,
+ diff_properties_only,
+ diff_properties_no_newline,
+ diff_arbitrary_same,
+ diff_git_format_wc_wc_dir_mv,
+ simple_ancestry,
+ local_tree_replace,
+ diff_dir_replaced_by_file,
+ diff_dir_replaced_by_dir,
+ diff_repos_empty_file_addition,
+ diff_missing_tree_conflict_victim,
+ diff_local_missing_obstruction,
+ diff_move_inside_copy,
+ diff_local_copied_dir,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/entries-dump.c b/subversion/tests/cmdline/entries-dump.c
index d508a95..e4edc61 100644
--- a/subversion/tests/cmdline/entries-dump.c
+++ b/subversion/tests/cmdline/entries-dump.c
@@ -30,6 +30,7 @@
#define SVN_DEPRECATED
#include "svn_types.h"
+#include "svn_cmdline.h"
#include "svn_pools.h"
#include "svn_wc.h"
#include "svn_dirent_uri.h"
@@ -37,6 +38,7 @@
#include "private/svn_wc_private.h"
#include "../../libsvn_wc/wc.h"
+#include "../../libsvn_wc/lock.h"
static void
str_value(const char *name, const char *value)
@@ -65,24 +67,46 @@ bool_value(const char *name, svn_boolean_t value)
}
static svn_error_t *
-entries_dump(const char *dir_path, apr_pool_t *pool)
+entries_dump(const char *dir_path, svn_wc_adm_access_t *related, apr_pool_t *pool)
{
- svn_wc_adm_access_t *adm_access;
+ svn_wc_adm_access_t *adm_access = NULL;
apr_hash_t *entries;
apr_hash_index_t *hi;
svn_boolean_t locked;
svn_error_t *err;
+ svn_wc_context_t *wc_ctx = NULL;
+ const char *dir_abspath;
- err = svn_wc_adm_open3(&adm_access, NULL, dir_path, FALSE, 0,
+ err = svn_wc_adm_open3(&adm_access, related, dir_path, FALSE, 0,
NULL, NULL, pool);
if (!err)
{
- SVN_ERR(svn_wc_locked(&locked, dir_path, pool));
+ SVN_ERR(svn_wc__context_create_with_db(&wc_ctx, NULL,
+ svn_wc__adm_get_db(adm_access),
+ pool));
+ SVN_ERR(svn_dirent_get_absolute(&dir_abspath, dir_path, pool));
+
+ SVN_ERR(svn_wc_locked2(NULL, &locked, wc_ctx, dir_abspath, pool));
SVN_ERR(svn_wc_entries_read(&entries, adm_access, TRUE, pool));
}
+ else if (err && err->apr_err == SVN_ERR_WC_LOCKED
+ && related
+ && ! strcmp(dir_path, svn_wc_adm_access_path(related)))
+ {
+ /* Common caller error: Can't open a baton when there is one. */
+ svn_error_clear(err);
+
+ SVN_ERR(svn_wc__context_create_with_db(&wc_ctx, NULL,
+ svn_wc__adm_get_db(related),
+ pool));
+ SVN_ERR(svn_dirent_get_absolute(&dir_abspath, dir_path, pool));
+
+ SVN_ERR(svn_wc_locked2(NULL, &locked, wc_ctx, dir_abspath, pool));
+ SVN_ERR(svn_wc_entries_read(&entries, related, TRUE, pool));
+ }
else
{
- const char *dir_abspath, *lockfile_path;
+ const char *lockfile_path;
svn_node_kind_t kind;
/* ### Should svn_wc_adm_open3 be returning UPGRADE_REQUIRED? */
@@ -101,12 +125,8 @@ entries_dump(const char *dir_path, apr_pool_t *pool)
for (hi = apr_hash_first(pool, entries); hi; hi = apr_hash_next(hi))
{
- const void *key;
- void *value;
- const svn_wc_entry_t *entry;
-
- apr_hash_this(hi, &key, NULL, &value);
- entry = value;
+ const char *key = svn__apr_hash_index_key(hi);
+ const svn_wc_entry_t *entry = svn__apr_hash_index_val(hi);
SVN_ERR_ASSERT(strcmp(key, entry->name) == 0);
@@ -147,13 +167,16 @@ entries_dump(const char *dir_path, apr_pool_t *pool)
/* skip: keep_local */
int_value("depth", entry->depth);
/* skip: tree_conflict_data */
- /* skip: file_external_path */
+ bool_value("file_external", entry->file_external_path != NULL);
/* skip: file_external_peg_rev */
/* skip: file_external_rev */
bool_value("locked", locked && *entry->name == '\0');
printf("entries['%s'] = e\n", (const char *)key);
}
+ if (wc_ctx)
+ SVN_ERR(svn_wc_context_destroy(wc_ctx));
+
if (adm_access)
SVN_ERR(svn_wc_adm_close2(adm_access, pool));
@@ -167,6 +190,7 @@ struct directory_walk_baton
svn_wc_context_t *wc_ctx;
const char *root_abspath;
const char *prefix_path;
+ svn_wc_adm_access_t *adm_access;
};
/* svn_wc__node_found_func_t implementation for directory_dump */
@@ -251,6 +275,81 @@ directory_dump(const char *path,
return svn_error_trace(svn_wc_context_destroy(bt.wc_ctx));
}
+static svn_error_t *
+tree_dump_dir(const char *local_abspath,
+ svn_node_kind_t kind,
+ void *walk_baton,
+ apr_pool_t *scratch_pool)
+{
+ struct directory_walk_baton *bt = walk_baton;
+ const char *path;
+
+ if (kind != svn_node_dir)
+ return SVN_NO_ERROR;
+
+ /* If LOCAL_ABSPATH a child of or equal to ROOT_ABSPATH, then display
+ a relative path starting with PREFIX_PATH. */
+ path = svn_dirent_skip_ancestor(bt->root_abspath, local_abspath);
+ if (path)
+ path = svn_dirent_join(bt->prefix_path, path, scratch_pool);
+ else
+ path = local_abspath;
+
+ printf("entries = {}\n");
+ SVN_ERR(entries_dump(path, bt->adm_access, scratch_pool));
+
+ printf("dirs['%s'] = entries\n", path);
+ return SVN_NO_ERROR;
+
+}
+
+static svn_error_t *
+tree_dump_txn(void *baton, svn_sqlite__db_t *db, apr_pool_t *scratch_pool)
+{
+ struct directory_walk_baton *bt = baton;
+
+ SVN_ERR(svn_wc__internal_walk_children(bt->wc_ctx->db, bt->root_abspath, FALSE,
+ NULL, tree_dump_dir, bt,
+ svn_depth_infinity,
+ NULL, NULL, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+tree_dump(const char *path,
+ apr_pool_t *scratch_pool)
+{
+ struct directory_walk_baton bt;
+ svn_sqlite__db_t *sdb;
+ svn_wc__db_t *db;
+
+ bt.prefix_path = path;
+
+ /* Obtain an access baton to allow re-using the same wc_db for all access */
+ SVN_ERR(svn_wc_adm_open3(&bt.adm_access, NULL, path, FALSE, 0, NULL, NULL,
+ scratch_pool));
+
+ db = svn_wc__adm_get_db(bt.adm_access);
+
+ SVN_ERR(svn_wc__context_create_with_db(&bt.wc_ctx, NULL, db, scratch_pool));
+
+ SVN_ERR(svn_dirent_get_absolute(&bt.root_abspath, path, scratch_pool));
+
+ /* And now get us a transaction on the database to avoid obtaining and
+ releasing locks all the time */
+ SVN_ERR(svn_wc__db_temp_borrow_sdb(&sdb, bt.wc_ctx->db, bt.root_abspath,
+ scratch_pool));
+
+ SVN_ERR(svn_sqlite__with_lock(sdb, tree_dump_txn, &bt, scratch_pool));
+
+ /* And close everything we've opened */
+ SVN_ERR(svn_wc_context_destroy(bt.wc_ctx));
+ SVN_ERR(svn_wc_adm_close2(bt.adm_access, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
int
main(int argc, const char *argv[])
{
@@ -262,18 +361,19 @@ main(int argc, const char *argv[])
if (argc < 2 || argc > 4)
{
- fprintf(stderr, "USAGE: entries-dump [--entries|--subdirs] DIR_PATH\n");
+ fprintf(stderr, "USAGE: entries-dump [--entries|--subdirs|--tree-dump] DIR_PATH\n");
exit(1);
}
- if (apr_initialize() != APR_SUCCESS)
+ if (svn_cmdline_init("entries-dump", stderr) != EXIT_SUCCESS)
{
- fprintf(stderr, "apr_initialize() failed.\n");
- exit(1);
+ return EXIT_FAILURE;
}
- /* set up the global pool */
- pool = svn_pool_create(NULL);
+ /* Create our top-level pool. Use a separate mutexless allocator,
+ * given this application is single threaded.
+ */
+ pool = apr_allocator_owner_get(svn_pool_create_allocator(FALSE));
path = svn_dirent_internal_style(argv[argc-1], pool);
@@ -283,9 +383,11 @@ main(int argc, const char *argv[])
cmd = NULL;
if (!cmd || !strcmp(cmd, "--entries"))
- err = entries_dump(path, pool);
+ err = entries_dump(path, NULL, pool);
else if (!strcmp(cmd, "--subdirs"))
err = directory_dump(path, pool);
+ else if (!strcmp(cmd, "--tree-dump"))
+ err = tree_dump(path, pool);
else
err = svn_error_createf(SVN_ERR_INCORRECT_PARAMS, NULL,
"Invalid command '%s'",
diff --git a/subversion/tests/cmdline/entries_tests.py b/subversion/tests/cmdline/entries_tests.py
index 03f657e..92baa7e 100755
--- a/subversion/tests/cmdline/entries_tests.py
+++ b/subversion/tests/cmdline/entries_tests.py
@@ -33,7 +33,9 @@
# test tries to pick up the straggly little edge cases.
#
-import os
+import os, logging
+
+logger = logging.getLogger()
import svntest
@@ -49,22 +51,22 @@ SCHEDULE_REPLACE = 3
def validate(entry, **kw):
for key, value in kw.items():
if getattr(entry, key) != value:
- print("Entry '%s' has an incorrect value for .%s" % (entry.name, key))
- print(" Expected: %s" % value)
- print(" Actual: %s" % getattr(entry, key))
+ logger.warn("Entry '%s' has an incorrect value for .%s", entry.name, key)
+ logger.warn(" Expected: %s", value)
+ logger.warn(" Actual: %s", getattr(entry, key))
raise svntest.Failure
def check_names(entries, *names):
if entries is None:
- print('entries-dump probably exited with a failure.')
+ logger.warn('entries-dump probably exited with a failure.')
raise svntest.Failure
have = set(entries.keys())
want = set(names)
missing = want - have
if missing:
- print("Entry name(s) not found: %s"
- % ', '.join("'%s'" % name for name in missing))
+ logger.warn("Entry name(s) not found: %s",
+ ', '.join("'%s'" % name for name in missing))
raise svntest.Failure
@@ -183,11 +185,8 @@ def obstructed_entries(sbox):
entries = svntest.main.run_entriesdump(D_path)
check_names(entries, 'H')
- if svntest.main.wc_is_singledb(wc_dir):
- # Data is not missing in single-db
- validate(entries['H'], revision=1)
- else:
- validate(entries['H'], revision=-1)
+ # Data is not missing in single-db
+ validate(entries['H'], revision=1)
### need to get svn_wc__db_read_info() to generate obstructed_add
diff --git a/subversion/tests/cmdline/export_tests.py b/subversion/tests/cmdline/export_tests.py
index 58b9e2d..d108847 100755
--- a/subversion/tests/cmdline/export_tests.py
+++ b/subversion/tests/cmdline/export_tests.py
@@ -166,7 +166,7 @@ def export_working_copy_with_mods(sbox):
'A/D/G/tau' : Item(status='A '),
'A/mu' : Item(status='A '),
'A/B' : Item(status='A '),
- 'A/B/E' : Item(status='A '),
+ #'A/B/E' : Item(status='A '), # Used to be reported as added
'A/B/lambda' : Item(status='A '),
'A/B/F' : Item(status='A '),
'A/C' : Item(status='A '),
@@ -356,6 +356,7 @@ def export_working_copy_with_property_mods(sbox):
expected_disk)
@XFail()
+@Issue(3798)
def export_working_copy_at_base_revision(sbox):
"export working copy at base revision"
sbox.build(read_only = True)
@@ -369,9 +370,12 @@ def export_working_copy_at_base_revision(sbox):
gamma_path = os.path.join(wc_dir, 'A', 'D', 'gamma')
E_path = os.path.join(wc_dir, 'A', 'B', 'E')
rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
+ H_path = os.path.join(wc_dir, 'A', 'D', 'H')
+ phi_path = os.path.join(wc_dir, 'A', 'D', 'H', 'phi')
+ chi_path = os.path.join(wc_dir, 'A', 'D', 'H', 'chi')
# Make some local modifications: modify mu and C, add kappa and K, delete
- # gamma and E, and replace rho. (Directories can't yet be replaced.)
+ # gamma and E, and replace rho and H.
# These modifications should *not* get exported at the base revision.
svntest.main.file_append(mu_path, 'Appended text')
svntest.main.run_svn(None, 'propset', 'p', 'v', mu_path, C_path)
@@ -382,6 +386,12 @@ def export_working_copy_at_base_revision(sbox):
svntest.main.run_svn(None, 'rm', rho_path)
svntest.main.file_append(rho_path, "Replacement file 'rho'.")
svntest.main.run_svn(None, 'add', rho_path)
+ svntest.main.run_svn(None, 'rm', H_path)
+ svntest.main.run_svn(None, 'mkdir', H_path)
+ svntest.main.file_append(phi_path, "This is the file 'phi'.")
+ svntest.main.run_svn(None, 'add', phi_path)
+ svntest.main.file_append(chi_path, "Replacement file 'chi'.")
+ svntest.main.run_svn(None, 'add', chi_path)
# Note that we don't tweak the expected disk tree at all,
# since the modifications should not be present.
@@ -908,6 +918,160 @@ def export_file_overwrite_with_force(sbox):
iota_url, tmpdir)
svntest.actions.verify_disk(tmpdir, expected_disk)
+def export_custom_keywords(sbox):
+ """export with custom keywords"""
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # 248=SVN_KEYWORD_MAX_LEN-7 where 7 is '$', 'Q', 'q', ':', ' ', ' ', '$'
+ alpha_content = ('[$Qq: %s $ $Pp: %s $]\n'
+ % (sbox.repo_url[:248],
+ (sbox.repo_url + '/A/B/E/alpha')[:248]))
+
+ sbox.simple_append('A/B/E/alpha', '[$Qq$ $Pp$]\n', truncate=True)
+ sbox.simple_propset('svn:keywords', 'Qq=%R Pp=%u', 'A/B/E/alpha')
+ sbox.simple_commit()
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.tweak('A/B/E/alpha', contents=alpha_content)
+ svntest.actions.verify_disk(sbox.wc_dir, expected_disk)
+
+ # Export a tree
+ export_target = sbox.add_wc_path('export')
+ expected_output = svntest.wc.State(export_target, {
+ '' : Item(status='A '),
+ 'alpha' : Item(status='A '),
+ 'beta' : Item(status='A '),
+ })
+ expected_disk = svntest.wc.State('', {
+ 'alpha': Item(contents=alpha_content),
+ 'beta' : Item(contents="This is the file 'beta'.\n"),
+ })
+ svntest.actions.run_and_verify_export(sbox.repo_url + '/A/B/E',
+ export_target,
+ expected_output,
+ expected_disk)
+
+ # Export a file
+ export_file = os.path.join(export_target, 'alpha')
+ os.remove(export_file)
+ expected_output = ['A %s\n' % export_file, 'Export complete.\n']
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'export', '--force',
+ sbox.repo_url + '/A/B/E/alpha',
+ export_target)
+
+ if open(export_file).read() != ''.join(alpha_content):
+ raise svntest.Failure("wrong keyword expansion")
+
+@Issue(4427)
+def export_file_external(sbox):
+ "export file external from WC and URL"
+ sbox.build()
+
+ wc_dir = sbox.wc_dir
+
+ # Set 'svn:externals' property in 'A/C' to 'A/B/E/alpha'(file external),
+ C_path = os.path.join(wc_dir, 'A', 'C')
+ externals_prop = "^/A/B/E/alpha exfile_alpha"
+
+ tmp_f = sbox.get_tempname('prop')
+ svntest.main.file_append(tmp_f, externals_prop)
+ svntest.main.run_svn(None, 'ps', '-F', tmp_f, 'svn:externals', C_path)
+ svntest.main.run_svn(None,'ci', '-m', 'log msg', '--quiet', C_path)
+
+ # Update the working copy to receive file external
+ svntest.main.run_svn(None, 'up', wc_dir)
+
+ # Update the expected disk tree to include the external.
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.add({
+ 'A/C/exfile_alpha' : Item("This is the file 'alpha'.\n"),
+ })
+
+ # Export from URL
+ export_target = sbox.add_wc_path('export_url')
+ expected_output = svntest.main.greek_state.copy()
+ expected_output.add({
+ 'A/C/exfile_alpha' : Item("This is the file 'alpha'.\r"),
+ })
+ expected_output.wc_dir = export_target
+ expected_output.desc[''] = Item()
+ expected_output.tweak(contents=None, status='A ')
+ svntest.actions.run_and_verify_export(sbox.repo_url,
+ export_target,
+ expected_output,
+ expected_disk)
+
+ # Export from WC
+ export_target = sbox.add_wc_path('export_wc')
+ expected_output = svntest.main.greek_state.copy()
+ expected_output.add({
+ 'A/C/exfile_alpha' : Item("This is the file 'alpha'.\r"),
+ })
+ expected_output.wc_dir = export_target
+ expected_output.desc['A'] = Item()
+ expected_output.tweak(contents=None, status='A ')
+ svntest.actions.run_and_verify_export(wc_dir,
+ export_target,
+ expected_output,
+ expected_disk)
+
+@Issue(4427)
+def export_file_externals2(sbox):
+ "exporting file externals"
+
+ sbox.build()
+ sbox.simple_mkdir('DIR', 'DIR2')
+
+ sbox.simple_propset('svn:externals', '^/iota file', 'DIR')
+ sbox.simple_propset('svn:externals', '^/DIR TheDir', 'DIR2')
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ tmp = sbox.add_wc_path('tmp')
+ os.mkdir(tmp)
+
+ expected_output = svntest.wc.State(tmp, {
+ 'file' : Item(status='A '),
+ })
+ expected_disk = svntest.wc.State('', {
+ 'file': Item(contents="This is the file 'iota'.\n")
+ })
+ # Fails in 1.8.8 and r1575909.
+ # Direct export of file external was just skipped
+ svntest.actions.run_and_verify_export(sbox.ospath('DIR/file'),
+ tmp,
+ expected_output,
+ expected_disk)
+
+ expected_output = svntest.wc.State(tmp, {
+ 'DIR/file' : Item(status='A '),
+ })
+ expected_disk = svntest.wc.State('', {
+ 'file': Item(contents="This is the file 'iota'.\n")
+ })
+ # Fails in 1.8.8 (doesn't export file), passes in r1575909
+ svntest.actions.run_and_verify_export(sbox.ospath('DIR'),
+ os.path.join(tmp, 'DIR'),
+ expected_output,
+ expected_disk)
+
+ expected_output = svntest.wc.State(tmp, {
+ 'DIR2/TheDir/file' : Item(status='A '),
+ })
+ expected_disk = svntest.wc.State('', {
+ 'TheDir' : Item(),
+ 'TheDir/file' : Item(contents="This is the file 'iota'.\n")
+ })
+ # Fails in 1.8.8 (doesn't export anything),
+ # Fails in r1575909 (exports file twice; once as file; once as external)
+ svntest.actions.run_and_verify_export(sbox.ospath('DIR2'),
+ os.path.join(tmp, 'DIR2'),
+ expected_output,
+ expected_disk)
+
+
########################################################################
# Run the tests
@@ -941,6 +1105,9 @@ test_list = [ None,
export_externals_with_native_eol,
export_to_current_dir,
export_file_overwrite_with_force,
+ export_custom_keywords,
+ export_file_external,
+ export_file_externals2
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/externals_tests.py b/subversion/tests/cmdline/externals_tests.py
index cea6933..36ccaa6 100755
--- a/subversion/tests/cmdline/externals_tests.py
+++ b/subversion/tests/cmdline/externals_tests.py
@@ -28,7 +28,7 @@
import sys
import os
import re
-import tempfile
+import shutil
# Our testing module
import svntest
@@ -214,25 +214,18 @@ def externals_test_setup(sbox):
def change_external(path, new_val, commit=True):
"""Change the value of the externals property on PATH to NEW_VAL,
and commit the change unless COMMIT is False."""
- (fd, tmp_f) = tempfile.mkstemp(dir=svntest.main.temp_dir)
- svntest.main.file_append(tmp_f, new_val)
- svntest.actions.run_and_verify_svn(None, None, [], 'pset',
- '-F', tmp_f, 'svn:externals', path)
+
+ svntest.actions.set_prop('svn:externals', new_val, path)
if commit:
svntest.actions.run_and_verify_svn(None, None, [], 'ci',
'-m', 'log msg', '--quiet', path)
- os.close(fd)
- os.remove(tmp_f)
def change_external_expect_error(path, new_val, expected_err):
"""Try to change the value of the externals property on PATH to NEW_VAL,
but expect to get an error message that matches EXPECTED_ERR."""
- (fd, tmp_f) = tempfile.mkstemp(dir=svntest.main.temp_dir)
- svntest.main.file_append(tmp_f, new_val)
- svntest.actions.run_and_verify_svn(None, None, expected_err, 'pset',
- '-F', tmp_f, 'svn:externals', path)
- os.close(fd)
- os.remove(tmp_f)
+
+ svntest.actions.set_prop('svn:externals', new_val, path,
+ expected_re_string=expected_err)
def probe_paths_exist(paths):
@@ -282,24 +275,24 @@ def checkout_with_externals(sbox):
# Probe the working copy a bit, see if it's as expected.
expected_existing_paths = [
- os.path.join(wc_dir, "A", "B", "gamma"),
- os.path.join(wc_dir, "A", "C", "exdir_G"),
- os.path.join(wc_dir, "A", "C", "exdir_G", "pi"),
- os.path.join(wc_dir, "A", "C", "exdir_H"),
- os.path.join(wc_dir, "A", "C", "exdir_H", "omega"),
- os.path.join(wc_dir, "A", "D", "x"),
- os.path.join(wc_dir, "A", "D", "x", "y"),
- os.path.join(wc_dir, "A", "D", "x", "y", "z"),
- os.path.join(wc_dir, "A", "D", "x", "y", "z", "blah"),
- os.path.join(wc_dir, "A", "D", "x", "y", "z", "blah", "E", "alpha"),
- os.path.join(wc_dir, "A", "D", "x", "y", "z", "blah", "E", "beta"),
+ sbox.ospath('A/B/gamma'),
+ sbox.ospath('A/C/exdir_G'),
+ sbox.ospath('A/C/exdir_G/pi'),
+ sbox.ospath('A/C/exdir_H'),
+ sbox.ospath('A/C/exdir_H/omega'),
+ sbox.ospath('A/D/x'),
+ sbox.ospath('A/D/x/y'),
+ sbox.ospath('A/D/x/y/z'),
+ sbox.ospath('A/D/x/y/z/blah'),
+ sbox.ospath('A/D/x/y/z/blah/E/alpha'),
+ sbox.ospath('A/D/x/y/z/blah/E/beta'),
]
probe_paths_exist(expected_existing_paths)
# Pick a file at random, make sure it has the expected contents.
- for path, contents in ((os.path.join(wc_dir, "A", "C", "exdir_H", "omega"),
+ for path, contents in ((sbox.ospath('A/C/exdir_H/omega'),
"This is the file 'omega'.\n"),
- (os.path.join(wc_dir, "A", "B", "gamma"),
+ (sbox.ospath('A/B/gamma'),
"This is the file 'gamma'.\n")):
if open(path).read() != contents:
raise svntest.Failure("Unexpected contents for rev 1 of " + path)
@@ -340,7 +333,7 @@ def update_receive_new_external(sbox):
"\n"
# Set and commit the property
- change_external(os.path.join(wc_dir, "A/D"), new_externals_desc)
+ change_external(sbox.ospath('A/D'), new_externals_desc)
# Update the other working copy, see if we get the new item.
expected_output = svntest.wc.State(other_wc_dir, {
@@ -398,7 +391,7 @@ def update_lose_external(sbox):
"\n"
# Set and commit the property
- change_external(os.path.join(wc_dir, "A/D"), new_externals_desc)
+ change_external(sbox.ospath('A/D'), new_externals_desc)
# The code should handle a missing local externals item
svntest.main.safe_rmtree(os.path.join(other_wc_dir, "A", "D", "exdir_A", \
@@ -462,7 +455,7 @@ def update_change_pristine_external(sbox):
"\n"
# Set and commit the property
- change_external(os.path.join(wc_dir, "A/D"), new_externals_desc)
+ change_external(sbox.ospath('A/D'), new_externals_desc)
# Update other working copy, see if get the right change.
expected_output = svntest.wc.State(other_wc_dir, {
@@ -523,7 +516,7 @@ def update_change_modified_external(sbox):
"\n"
# Set and commit the property
- change_external(os.path.join(wc_dir, "A/D"), new_externals_desc)
+ change_external(sbox.ospath('A/D'), new_externals_desc)
# Update other working copy, see if get the right change.
expected_output = svntest.wc.State(other_wc_dir, {
@@ -591,7 +584,7 @@ def update_receive_change_under_external(sbox):
svntest.actions.run_and_verify_update(wc_dir,
expected_output, None, None)
- external_gamma_path = os.path.join(wc_dir, 'A', 'D', 'exdir_A', 'D', 'gamma')
+ external_gamma_path = sbox.ospath('A/D/exdir_A/D/gamma')
contents = open(external_gamma_path).read()
if contents != ("This is the file 'gamma'.\n"
"New text in other gamma.\n"):
@@ -619,7 +612,7 @@ def update_receive_change_under_external(sbox):
svntest.actions.run_and_verify_update(sbox.ospath('A/C'),
expected_output, None, None)
- external_rho_path = os.path.join(wc_dir, 'A', 'C', 'exdir_G', 'rho')
+ external_rho_path = sbox.ospath('A/C/exdir_G/rho')
contents = open(external_rho_path).read()
if contents != ("This is the file 'rho'.\n"
"New text in other rho.\n"):
@@ -641,7 +634,7 @@ def modify_and_update_receive_new_external(sbox):
repo_url, wc_dir)
# Add one more external item
- B_path = os.path.join(wc_dir, "A/B")
+ B_path = sbox.ospath('A/B')
externals_desc = \
external_url_for["A/D/exdir_A/G/"] + " exdir_G" + \
"\n" + \
@@ -685,11 +678,11 @@ def disallow_dot_or_dotdot_directory_reference(sbox):
"'.*' is an absolute path or involves '..'.*"
change_external_expect_error(path, val, expected_err)
- B_path = os.path.join(wc_dir, 'A', 'B')
- G_path = os.path.join(wc_dir, 'A', 'D', 'G')
- H_path = os.path.join(wc_dir, 'A', 'D', 'H')
- C_path = os.path.join(wc_dir, 'A', 'C')
- F_path = os.path.join(wc_dir, 'A', 'B', 'F')
+ B_path = sbox.ospath('A/B')
+ G_path = sbox.ospath('A/D/G')
+ H_path = sbox.ospath('A/D/H')
+ C_path = sbox.ospath('A/C')
+ F_path = sbox.ospath('A/B/F')
external_urls = list(external_url_for.values())
@@ -752,28 +745,28 @@ def export_with_externals(sbox):
# Probe the working copy a bit, see if it's as expected.
expected_existing_paths = [
- os.path.join(wc_dir, "A", "C", "exdir_G"),
- os.path.join(wc_dir, "A", "C", "exdir_G", "pi"),
- os.path.join(wc_dir, "A", "C", "exdir_H"),
- os.path.join(wc_dir, "A", "C", "exdir_H", "omega"),
- os.path.join(wc_dir, "A", "D", "x"),
- os.path.join(wc_dir, "A", "D", "x", "y"),
- os.path.join(wc_dir, "A", "D", "x", "y", "z"),
- os.path.join(wc_dir, "A", "D", "x", "y", "z", "blah"),
- os.path.join(wc_dir, "A", "D", "x", "y", "z", "blah", "E", "alpha"),
- os.path.join(wc_dir, "A", "D", "x", "y", "z", "blah", "E", "beta"),
+ sbox.ospath('A/C/exdir_G'),
+ sbox.ospath('A/C/exdir_G/pi'),
+ sbox.ospath('A/C/exdir_H'),
+ sbox.ospath('A/C/exdir_H/omega'),
+ sbox.ospath('A/D/x'),
+ sbox.ospath('A/D/x/y'),
+ sbox.ospath('A/D/x/y/z'),
+ sbox.ospath('A/D/x/y/z/blah'),
+ sbox.ospath('A/D/x/y/z/blah/E/alpha'),
+ sbox.ospath('A/D/x/y/z/blah/E/beta'),
]
probe_paths_exist(expected_existing_paths)
# Pick some files, make sure their contents are as expected.
- exdir_G_pi_path = os.path.join(wc_dir, "A", "C", "exdir_G", "pi")
+ exdir_G_pi_path = sbox.ospath('A/C/exdir_G/pi')
contents = open(exdir_G_pi_path).read()
if contents != ("This is the file 'pi'.\n"
"Added to pi in revision 3.\n"):
raise svntest.Failure("Unexpected contents for rev 1 of " +
exdir_G_pi_path)
- exdir_H_omega_path = os.path.join(wc_dir, "A", "C", "exdir_H", "omega")
+ exdir_H_omega_path = sbox.ospath('A/C/exdir_H/omega')
contents = open(exdir_H_omega_path).read()
if contents != "This is the file 'omega'.\n":
raise svntest.Failure("Unexpected contents for rev 1 of " +
@@ -855,7 +848,7 @@ def external_with_peg_and_op_revision(sbox):
"\n"
# Set and commit the property.
- change_external(os.path.join(wc_dir, "A/D"), new_externals_desc)
+ change_external(sbox.ospath('A/D'), new_externals_desc)
# Update other working copy, see if we get the right change.
expected_output = svntest.wc.State(wc_dir, {
@@ -866,7 +859,7 @@ def external_with_peg_and_op_revision(sbox):
expected_output, None, None)
- external_chi_path = os.path.join(wc_dir, 'A', 'D', 'exdir_A', 'H', 'chi')
+ external_chi_path = sbox.ospath('A/D/exdir_A/H/chi')
contents = open(external_chi_path).read()
if contents != "This is the file 'chi'.\n":
raise svntest.Failure("Unexpected contents for externally modified " +
@@ -896,7 +889,7 @@ def new_style_externals(sbox):
"\n"
# Set and commit the property.
- change_external(os.path.join(wc_dir, "A/C"), new_externals_desc)
+ change_external(sbox.ospath('A/C'), new_externals_desc)
# Update other working copy.
expected_output = svntest.wc.State(wc_dir, {
@@ -922,7 +915,7 @@ def disallow_propset_invalid_formatted_externals(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, 'A')
+ A_path = sbox.ospath('A')
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
svntest.actions.run_and_verify_status(wc_dir, expected_status)
@@ -997,7 +990,7 @@ def old_style_externals_ignore_peg_reg(sbox):
ext = "exdir_G " + external_url_for["A/C/exdir_G"] + "@HEAD\n"
# Set and commit the property.
- change_external(os.path.join(wc_dir, "A"), ext)
+ change_external(sbox.ospath('A'), ext)
# Update the working copy. This should succeed (exitcode 0) but
# should print warnings on the external because the URL with '@HEAD'
@@ -1034,7 +1027,7 @@ def cannot_move_or_remove_file_externals(sbox):
".*gamma.*; please .* "
"the svn:externals .*",
'rm',
- os.path.join(wc_dir, 'A', 'B', 'gamma'))
+ sbox.ospath('A/B/gamma'))
# Should not be able to move the file external.
svntest.actions.run_and_verify_svn("Able to move file external",
@@ -1043,15 +1036,15 @@ def cannot_move_or_remove_file_externals(sbox):
".*gamma.*; please .*edit.*"
"svn:externals.*",
'mv',
- os.path.join(wc_dir, 'A', 'B', 'gamma'),
- os.path.join(wc_dir, 'A', 'B', 'gamma1'))
+ sbox.ospath('A/B/gamma'),
+ sbox.ospath('A/B/gamma1'))
# But the directory that contains it can be deleted.
expected_status = svntest.actions.get_virginal_state(wc_dir, 6)
svntest.actions.run_and_verify_svn(None, None, [],
'rm',
- os.path.join(wc_dir, "A", "B"))
+ sbox.ospath('A/B'))
expected_status.tweak('A/B', status='D ')
expected_output = svntest.wc.State(wc_dir, {
@@ -1062,10 +1055,51 @@ def cannot_move_or_remove_file_externals(sbox):
'A/B/F', 'A/B/lambda')
expected_status.add({
- 'A/D/exdir_A' : Item(status='X '),
- 'A/D/x' : Item(status='X '),
- 'A/C/exdir_H' : Item(status='X '),
- 'A/C/exdir_G' : Item(status='X '),
+ 'A/D/exdir_A' : Item(status=' ', wc_rev='5', prev_status='X '),
+ 'A/D/exdir_A/D' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/D/gamma' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/D/G' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/D/G/pi' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/D/G/rho' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/D/G/tau' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/D/H' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/D/H/chi' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/D/H/psi' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/D/H/omega' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/B' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/B/E' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/B/E/beta' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/B/E/alpha' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/B/F' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/B/lambda' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/G' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/G/pi' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/G/tau' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/G/rho' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/H' : Item(status=' ', wc_rev='1'),
+ 'A/D/exdir_A/H/psi' : Item(status=' ', wc_rev='1'),
+ 'A/D/exdir_A/H/omega' : Item(status=' ', wc_rev='1'),
+ 'A/D/exdir_A/H/chi' : Item(status=' ', wc_rev='1'),
+ 'A/D/exdir_A/C' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/mu' : Item(status=' ', wc_rev='5'),
+
+ 'A/C/exdir_G' : Item(status=' ', prev_status='X ', wc_rev='5'),
+ 'A/C/exdir_G/tau' : Item(status=' ', wc_rev='5'),
+ 'A/C/exdir_G/pi' : Item(status=' ', wc_rev='5'),
+ 'A/C/exdir_G/rho' : Item(status=' ', wc_rev='5'),
+
+ 'A/D/x' : Item(status='X '),
+ 'A/D/x/y/z/blah' : Item(status=' ', wc_rev='5'),
+ 'A/D/x/y/z/blah/lambda' : Item(status=' ', wc_rev='5'),
+ 'A/D/x/y/z/blah/E' : Item(status=' ', wc_rev='5'),
+ 'A/D/x/y/z/blah/E/beta' : Item(status=' ', wc_rev='5'),
+ 'A/D/x/y/z/blah/E/alpha': Item(status=' ', wc_rev='5'),
+ 'A/D/x/y/z/blah/F' : Item(status=' ', wc_rev='5'),
+
+ 'A/C/exdir_H' : Item(status=' ', prev_status='X ', wc_rev='1'),
+ 'A/C/exdir_H/omega' : Item(status=' ', wc_rev='1'),
+ 'A/C/exdir_H/chi' : Item(status=' ', wc_rev='1'),
+ 'A/C/exdir_H/psi' : Item(status=' ', wc_rev='1'),
})
svntest.actions.run_and_verify_commit(wc_dir,
@@ -1079,7 +1113,7 @@ def cannot_move_or_remove_file_externals(sbox):
svntest.actions.run_and_verify_update(wc_dir,
expected_output, None, None)
- open(os.path.join(wc_dir, 'A', 'D', 'gamma')).close()
+ open(sbox.ospath('A/D/gamma')).close()
#----------------------------------------------------------------------
@@ -1146,8 +1180,8 @@ def external_into_path_with_spaces(sbox):
svntest.actions.run_and_verify_update(wc_dir,
expected_output, None, None)
probe_paths_exist([
- os.path.join(wc_dir, 'A', 'copy of D'),
- os.path.join(wc_dir, 'A', 'another copy of D'),
+ sbox.ospath('A/copy of D'),
+ sbox.ospath('A/another copy of D'),
])
#----------------------------------------------------------------------
@@ -1162,7 +1196,7 @@ def binary_file_externals(sbox):
# Add a binary file A/theta, write PNG file data into it.
theta_contents = open(os.path.join(sys.path[0], "theta.bin"), 'rb').read()
- theta_path = os.path.join(wc_dir, 'A', 'theta')
+ theta_path = sbox.ospath('A/theta')
svntest.main.file_write(theta_path, theta_contents, 'wb')
svntest.main.run_svn(None, 'add', theta_path)
@@ -1182,7 +1216,7 @@ def binary_file_externals(sbox):
# Create a file external on the binary file A/theta
- C = os.path.join(wc_dir, 'A', 'C')
+ C = sbox.ospath('A/C')
external = os.path.join(C, 'external')
externals_prop = "^/A/theta external\n"
@@ -1233,7 +1267,7 @@ def update_lose_file_external(sbox):
# Create a file external in A/C/external on the file A/mu
- C = os.path.join(wc_dir, 'A', 'C')
+ C = sbox.ospath('A/C')
external = os.path.join(C, 'external')
externals_prop = "^/A/mu external\n"
@@ -1303,7 +1337,7 @@ def update_lose_file_external(sbox):
None, None, None, None, None,
True)
- probe_paths_missing([os.path.join(wc_dir, 'A', 'C', 'external')])
+ probe_paths_missing([sbox.ospath('A/C/external')])
#----------------------------------------------------------------------
@@ -1318,8 +1352,8 @@ def switch_relative_external(sbox):
repo_url = sbox.repo_url
# Create a relative external in A/D on ../B
- A_path = os.path.join(wc_dir, 'A')
- A_copy_path = os.path.join(wc_dir, 'A_copy')
+ A_path = sbox.ospath('A')
+ A_copy_path = sbox.ospath('A_copy')
A_copy_url = repo_url + '/A_copy'
D_path = os.path.join(A_path, 'D')
ext_path = os.path.join(D_path, 'ext')
@@ -1405,7 +1439,7 @@ def relegate_external(sbox):
wc_dir = sbox.wc_dir
repo_dir = sbox.repo_dir
repo_url = sbox.repo_url
- A_path = os.path.join(wc_dir, 'A')
+ A_path = sbox.ospath('A')
# setup an external within the same repository
externals_desc = '^/A/B/E external'
@@ -1440,7 +1474,9 @@ def relegate_external(sbox):
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 3)
expected_status.add({
- 'A/external' : Item(status='X '),
+ 'A/external' : Item(status=' ', prev_status='X ', wc_rev='2'),
+ 'A/external/alpha' : Item(status=' ', wc_rev='2'),
+ 'A/external/beta' : Item(status=' ', wc_rev='2'),
})
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
@@ -1461,7 +1497,7 @@ def wc_repos_file_externals(sbox):
repo_url = sbox.repo_url
# Add a file A/theta.
- theta_path = os.path.join(wc_dir, 'A', 'theta')
+ theta_path = sbox.ospath('A/theta')
svntest.main.file_write(theta_path, 'theta', 'w')
svntest.main.run_svn(None, 'add', theta_path)
@@ -1482,7 +1518,7 @@ def wc_repos_file_externals(sbox):
# Create a file external on the file A/theta
- C = os.path.join(wc_dir, 'A', 'C')
+ C = sbox.ospath('A/C')
external = os.path.join(C, 'theta')
externals_prop = "^/A/theta theta\n"
@@ -1564,9 +1600,9 @@ def merge_target_with_externals(sbox):
repo_url = sbox.repo_url
# Some paths we'll care about
- A_path = os.path.join(wc_dir, "A")
- A_branch_path = os.path.join(wc_dir, "A-branch")
- A_gamma_branch_path = os.path.join(wc_dir, "A-branch", "D", "gamma")
+ A_path = sbox.ospath('A')
+ A_branch_path = sbox.ospath('A-branch')
+ A_gamma_branch_path = sbox.ospath('A-branch/D/gamma')
svntest.actions.run_and_verify_svn(None, None, [],
'checkout',
@@ -1733,7 +1769,7 @@ def update_external_on_locally_added_dir(sbox):
svntest.actions.run_and_verify_update(wc_dir,
expected_output, None, None)
- probe_paths_exist([os.path.join(wc_dir, "A", "foo", "exdir_E")])
+ probe_paths_exist([sbox.ospath('A/foo/exdir_E')])
# Test for issue #2267
@Issue(2267)
@@ -1782,7 +1818,7 @@ def switch_external_on_locally_added_dir(sbox):
# Switch the working copy to the branch, see if we get the new item.
svntest.actions.run_and_verify_svn(None, None, [], 'sw', A_copy_path, wc_dir)
- probe_paths_exist([os.path.join(wc_dir, "foo", "exdir_E")])
+ probe_paths_exist([sbox.ospath('foo/exdir_E')])
@Issue(3819)
def file_external_in_sibling(sbox):
@@ -1885,10 +1921,52 @@ def exclude_externals(sbox):
expected_status = svntest.actions.get_virginal_state(wc_dir, 6)
expected_status.add({
'A/B/gamma' : Item(status=' ', wc_rev='6', switched='X'),
- 'A/C/exdir_H' : Item(status='X '),
- 'A/C/exdir_G' : Item(status='X '),
- 'A/D/exdir_A' : Item(status='X '),
+
+ 'A/C/exdir_H' : Item(status=' ', prev_status='X ', wc_rev='1'),
+ 'A/C/exdir_H/omega' : Item(status=' ', wc_rev='1'),
+ 'A/C/exdir_H/chi' : Item(status=' ', wc_rev='1'),
+ 'A/C/exdir_H/psi' : Item(status=' ', wc_rev='1'),
+
+ 'A/C/exdir_G' : Item(status=' ', prev_status='X ', wc_rev='5'),
+ 'A/C/exdir_G/pi' : Item(status=' ', wc_rev='5'),
+ 'A/C/exdir_G/rho' : Item(status=' ', wc_rev='5'),
+ 'A/C/exdir_G/tau' : Item(status=' ', wc_rev='5'),
+
+ 'A/D/exdir_A' : Item(status=' ', prev_status='X ', wc_rev='5'),
+ 'A/D/exdir_A/H' : Item(status=' ', wc_rev='1'),
+ 'A/D/exdir_A/H/psi' : Item(status=' ', wc_rev='1'),
+ 'A/D/exdir_A/H/chi' : Item(status=' ', wc_rev='1'),
+ 'A/D/exdir_A/H/omega': Item(status=' ', wc_rev='1'),
+ 'A/D/exdir_A/D' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/D/H' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/D/H/chi': Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/D/H/omega': Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/D/H/psi': Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/D/G' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/D/G/pi': Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/D/G/rho': Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/D/G/tau': Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/D/gamma': Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/B' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/B/F' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/B/E' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/B/E/beta': Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/B/E/alpha': Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/B/lambda': Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/C' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/G' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/G/tau' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/G/rho' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/G/pi' : Item(status=' ', wc_rev='5'),
+ 'A/D/exdir_A/mu' : Item(status=' ', wc_rev='5'),
+
'A/D/x' : Item(status='X '),
+ 'A/D/x/y/z/blah' : Item(status=' ', wc_rev='5'),
+ 'A/D/x/y/z/blah/E' : Item(status=' ', wc_rev='5'),
+ 'A/D/x/y/z/blah/E/alpha': Item(status=' ', wc_rev='5'),
+ 'A/D/x/y/z/blah/E/beta': Item(status=' ', wc_rev='5'),
+ 'A/D/x/y/z/blah/lambda': Item(status=' ', wc_rev='5'),
+ 'A/D/x/y/z/blah/F' : Item(status=' ', wc_rev='5'),
})
svntest.actions.run_and_verify_update(wc_dir,
None, None, expected_status, None,
@@ -1941,7 +2019,7 @@ def file_externals_different_url(sbox):
for e in ['r1-e-1', 'r1-e-2', 'r2-e-1', 'r2-e-2', 'rr-e-1']:
actions.run_and_verify_info([{'Repository Root' : r1_url}],
os.path.join(sbox.wc_dir, e))
-
+
svntest.actions.run_and_verify_svn(None, None, [],
'relocate', r1_url, r2_url, wc_dir)
@@ -1986,13 +2064,14 @@ def copy_file_externals(sbox):
# svntest.factory.make(sbox,"""
# svn mkdir X
+ # ### manual edit: add '\n ^/A/mu xmu' to externals definition:
# svn ps svn:externals "^/iota xiota" X
# """)
sbox.build()
wc_dir = sbox.wc_dir
- X = os.path.join(wc_dir, 'X')
+ X = sbox.ospath('X')
# svn mkdir X
expected_stdout = ['A ' + X + '\n']
@@ -2023,9 +2102,9 @@ def copy_file_externals(sbox):
# svn up
# ''')
- X = os.path.join(wc_dir, 'X')
- X_copy = os.path.join(wc_dir, 'X_copy')
- X_xmu = os.path.join(wc_dir, 'X', 'xmu')
+ X = sbox.ospath('X')
+ X_copy = sbox.ospath('X_copy')
+ X_xmu = sbox.ospath('X/xmu')
# svn ci
expected_output = svntest.wc.State(wc_dir, {
@@ -2137,6 +2216,605 @@ def copy_file_externals(sbox):
actions.run_and_verify_update(wc_dir, expected_output, expected_disk,
expected_status, None, None, None, None, None, True, wc_dir)
+def commit_include_externals(sbox):
+ "commit --include-externals"
+ # svntest.factory.make(sbox, """
+ # mkdir Z
+ # echo 'This is the file zeta.' > Z/zeta
+ # svn add Z
+ # svn mkdir --parents Xpegged X/Y
+ # svn ci
+ # svn up
+ # svn ps svn:externals "^/Z xZ" A/D/H
+ # svn ps svn:externals "^/iota@1 Xpegged/xiota" wc_dir
+ # # ^^^ manually set externals to:
+ # # ^/iota@1 Xpegged/xiota
+ # # -r1 ^/A/B/E Xpegged/xE
+ # # ^/A/mu X/xmu
+ # # ^/A/B/lambda X/Y/xlambda
+ # # ^/A/D/G X/xG
+ # # ^/A/D/H X/Y/xH
+ # """)
+ # exit(0)
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ A_D_H = sbox.ospath('A/D/H')
+ X = sbox.ospath('X')
+ X_Y = sbox.ospath('X/Y')
+ Xpegged = sbox.ospath('Xpegged')
+ Z = sbox.ospath('Z')
+ Z_zeta = sbox.ospath('Z/zeta')
+
+ # mkdir Z
+ os.makedirs(Z)
+
+ # echo 'This is the file zeta.' > Z/zeta
+ main.file_write(Z_zeta, 'This is the file zeta.\n')
+
+ # svn add Z
+ expected_stdout = verify.UnorderedOutput([
+ 'A ' + Z + '\n',
+ 'A ' + Z_zeta + '\n',
+ ])
+
+ actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'add', Z)
+
+ # svn mkdir --parents Xpegged X/Y
+ expected_stdout = verify.UnorderedOutput([
+ 'A ' + Xpegged + '\n',
+ 'A ' + X + '\n',
+ 'A ' + X_Y + '\n',
+ ])
+
+ actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'mkdir',
+ '--parents', Xpegged, X_Y)
+
+ # svn ci
+ expected_output = svntest.wc.State(wc_dir, {
+ 'Z' : Item(verb='Adding'),
+ 'Z/zeta' : Item(verb='Adding'),
+ 'X' : Item(verb='Adding'),
+ 'X/Y' : Item(verb='Adding'),
+ 'Xpegged' : Item(verb='Adding'),
+ })
+
+ expected_status = actions.get_virginal_state(wc_dir, 1)
+ expected_status.add({
+ 'Z' : Item(status=' ', wc_rev='2'),
+ 'Z/zeta' : Item(status=' ', wc_rev='2'),
+ 'X' : Item(status=' ', wc_rev='2'),
+ 'X/Y' : Item(status=' ', wc_rev='2'),
+ 'Xpegged' : Item(status=' ', wc_rev='2'),
+ })
+
+ actions.run_and_verify_commit(wc_dir, expected_output, expected_status,
+ None, wc_dir)
+
+ # svn up
+ expected_output = svntest.wc.State(wc_dir, {})
+
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.add({
+ 'Z' : Item(),
+ 'Z/zeta' : Item(contents="This is the file zeta.\n"),
+ 'Xpegged' : Item(),
+ 'X' : Item(),
+ 'X/Y' : Item(),
+ })
+
+ expected_status.tweak(wc_rev='2')
+
+ actions.run_and_verify_update(wc_dir, expected_output, expected_disk,
+ expected_status, None, None, None, None, None, False, wc_dir)
+
+ # svn ps svn:externals "^/Z xZ" A/D/H
+ expected_stdout = ["property 'svn:externals' set on '" + A_D_H + "'\n"]
+
+ actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'ps',
+ 'svn:externals', '^/Z xZ', A_D_H)
+
+ # svn ps svn:externals "^/iota@1 Xpegged/xiota" wc_dir
+ expected_stdout = ["property 'svn:externals' set on '" + wc_dir + "'\n"]
+
+ actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'ps',
+ 'svn:externals',
+ '''
+ ^/iota@1 Xpegged/xiota
+ -r1 ^/A/B/E Xpegged/xE
+ ^/A/mu X/xmu
+ ^/A/B/lambda X/Y/xlambda
+ ^/A/D/G X/xG
+ ^/A/D/H X/Y/xH
+ ''', wc_dir)
+
+ # svntest.factory.make(sbox, prev_disk=expected_disk,
+ # prev_status=expected_status,
+ # commands = """
+ # svn ci
+ # svn up
+ # echo mod >> Xpegged/xE/alpha
+ # echo mod >> X/xmu
+ # echo mod >> X/Y/xlambda
+ # echo mod >> X/xG/pi
+ # echo mod >> X/Y/xH/chi
+ # echo mod >> X/Y/xH/xZ/zeta
+ # svn status
+ # # Expect no externals to be committed
+ # svn ci
+ # # Expect no externals to be committed, because pegged
+ # svn ci --include-externals Xpegged
+ # # Expect no externals to be committed, because of depth
+ # svn ci --depth=immediates --include-externals
+ # # Expect only unpegged externals to be committed (those in X/)
+ # svn ci --include-externals
+ # # ### Below, manually add:
+ # # expected_status.tweak('A/D/H/xZ', 'Xpegged/xE', 'X/Y/xH', 'X/xG',
+ # # wc_rev=None)
+ # svn up
+ # # new mods to check more cases
+ # echo mod >> X/xmu
+ # echo mod >> X/Y/xlambda
+ # echo mod >> X/xG/pi
+ # echo mod >> X/Y/xH/chi
+ # echo mod >> X/Y/xH/xZ/zeta
+ # svn status
+ # # Expect no externals to be committed, because of depth
+ # svn ci --include-externals --depth=empty X
+ # # Expect only file external xmu to be committed, because of depth
+ # svn ci --include-externals --depth=files X
+ # svn status
+ # # ### Below, manually add:
+ # # expected_status.tweak('A/D/H/xZ', 'Xpegged/xE', 'X/Y/xH', 'X/xG',
+ # # wc_rev=None)
+ # svn up
+ # echo mod >> X/xG/pi
+ # svn status
+ # # Expect explicit targets to be committed
+ # svn ci X/Y/xlambda X/xG
+ # svn status
+ # """)
+
+ X = sbox.ospath('X')
+ X_xG = sbox.ospath('X/xG')
+ X_xG_pi = sbox.ospath('X/xG/pi')
+ X_xmu = sbox.ospath('X/xmu')
+ X_Y_xH_chi = sbox.ospath('X/Y/xH/chi')
+ X_Y_xH_xZ_zeta = sbox.ospath('X/Y/xH/xZ/zeta')
+ X_Y_xlambda = sbox.ospath('X/Y/xlambda')
+ Xpegged = sbox.ospath('Xpegged')
+ Xpegged_xE_alpha = sbox.ospath('Xpegged/xE/alpha')
+
+ # svn ci
+ expected_output = svntest.wc.State(wc_dir, {
+ '' : Item(verb='Sending'),
+ 'A/D/H' : Item(verb='Sending'),
+ })
+
+ expected_status.tweak('', 'A/D/H', wc_rev='3')
+
+ actions.run_and_verify_commit(wc_dir, expected_output, expected_status,
+ None, wc_dir)
+
+ # svn up
+ expected_output = svntest.wc.State(wc_dir, {
+ 'X/xmu' : Item(status='A '),
+ 'X/xG/tau' : Item(status='A '),
+ 'X/xG/rho' : Item(status='A '),
+ 'X/xG/pi' : Item(status='A '),
+ 'X/Y/xH' : Item(status=' U'),
+ 'X/Y/xH/psi' : Item(status='A '),
+ 'X/Y/xH/xZ/zeta' : Item(status='A '),
+ 'X/Y/xH/chi' : Item(status='A '),
+ 'X/Y/xH/omega' : Item(status='A '),
+ 'X/Y/xlambda' : Item(status='A '),
+ 'A/D/H/xZ/zeta' : Item(status='A '),
+ 'Xpegged/xiota' : Item(status='A '),
+ 'Xpegged/xE/alpha' : Item(status='A '),
+ 'Xpegged/xE/beta' : Item(status='A '),
+ })
+
+ expected_disk.add({
+ 'Xpegged/xE' : Item(),
+ 'Xpegged/xE/beta' : Item(contents="This is the file 'beta'.\n"),
+ 'Xpegged/xE/alpha' : Item(contents="This is the file 'alpha'.\n"),
+ 'Xpegged/xiota' : Item(contents="This is the file 'iota'.\n"),
+ 'A/D/H/xZ' : Item(),
+ 'A/D/H/xZ/zeta' : Item(contents="This is the file zeta.\n"),
+ 'X/Y/xlambda' : Item(contents="This is the file 'lambda'.\n"),
+ 'X/Y/xH' : Item(),
+ 'X/Y/xH/chi' : Item(contents="This is the file 'chi'.\n"),
+ 'X/Y/xH/xZ' : Item(),
+ 'X/Y/xH/xZ/zeta' : Item(contents="This is the file zeta.\n"),
+ 'X/Y/xH/psi' : Item(contents="This is the file 'psi'.\n"),
+ 'X/Y/xH/omega' : Item(contents="This is the file 'omega'.\n"),
+ 'X/xmu' : Item(contents="This is the file 'mu'.\n"),
+ 'X/xG' : Item(),
+ 'X/xG/tau' : Item(contents="This is the file 'tau'.\n"),
+ 'X/xG/rho' : Item(contents="This is the file 'rho'.\n"),
+ 'X/xG/pi' : Item(contents="This is the file 'pi'.\n"),
+ })
+
+ expected_status.tweak(wc_rev='3')
+ expected_status.add({
+ 'A/D/H/xZ' : Item(status=' ', prev_status='X ', wc_rev='3'),
+ 'A/D/H/xZ/zeta' : Item(status=' ', wc_rev='3'),
+
+ 'Xpegged/xiota' : Item(status=' ', wc_rev='1', switched='X'),
+ 'Xpegged/xE' : Item(status=' ', prev_status='X ', wc_rev='1'),
+ 'Xpegged/xE/alpha' : Item(status=' ', wc_rev='1'),
+ 'Xpegged/xE/beta' : Item(status=' ', wc_rev='1'),
+
+ 'X/Y/xH' : Item(status=' ', prev_status='X ', wc_rev='3'),
+ 'X/Y/xH/psi' : Item(status=' ', wc_rev='3'),
+ 'X/Y/xH/omega' : Item(status=' ', wc_rev='3'),
+ 'X/Y/xH/chi' : Item(status=' ', wc_rev='3'),
+ 'X/Y/xH/xZ' : Item(status=' ', prev_status='X ', wc_rev='3'),
+ 'X/Y/xH/xZ/zeta' : Item(status=' ', wc_rev='3'),
+
+ 'X/Y/xlambda' : Item(status=' ', wc_rev='3', switched='X'),
+ 'X/xmu' : Item(status=' ', wc_rev='3', switched='X'),
+
+ 'X/xG' : Item(status=' ', prev_status='X ', wc_rev='3'),
+ 'X/xG/rho' : Item(status=' ', wc_rev='3'),
+ 'X/xG/tau' : Item(status=' ', wc_rev='3'),
+ 'X/xG/pi' : Item(status=' ', wc_rev='3'),
+ })
+ expected_status.tweak('Xpegged/xiota', wc_rev='1')
+
+ actions.run_and_verify_update(wc_dir, expected_output, expected_disk,
+ expected_status, None, None, None, None, None, False, wc_dir)
+
+ # echo mod >> Xpegged/xE/alpha
+ main.file_append(Xpegged_xE_alpha, 'mod\n')
+
+ # echo mod >> X/xmu
+ main.file_append(X_xmu, 'mod\n')
+
+ # echo mod >> X/Y/xlambda
+ main.file_append(X_Y_xlambda, 'mod\n')
+
+ # echo mod >> X/xG/pi
+ main.file_append(X_xG_pi, 'mod\n')
+
+ # echo mod >> X/Y/xH/chi
+ main.file_append(X_Y_xH_chi, 'mod\n')
+
+ # echo mod >> X/Y/xH/xZ/zeta
+ main.file_append(X_Y_xH_xZ_zeta, 'mod\n')
+
+ # svn status
+ expected_status.tweak('X/Y/xlambda', 'X/xmu', 'X/Y/xH/chi',
+ 'X/Y/xH/xZ/zeta', 'Xpegged/xE/alpha',
+ 'X/xG/pi', status='M ')
+
+ actions.run_and_verify_unquiet_status(wc_dir, expected_status)
+
+ # Expect no externals to be committed
+ # svn ci
+ expected_output = svntest.wc.State(wc_dir, {})
+
+ actions.run_and_verify_commit(wc_dir, expected_output, expected_status,
+ None, wc_dir)
+
+ # Expect no externals to be committed, because pegged
+ # svn ci --include-externals Xpegged
+ expected_output = svntest.wc.State(wc_dir, {})
+
+ actions.run_and_verify_commit(wc_dir, expected_output, expected_status,
+ None, '--include-externals', Xpegged)
+
+ # Expect no externals to be committed, because of depth
+ # svn ci --depth=immediates --include-externals
+ expected_output = svntest.wc.State(wc_dir, {})
+
+ actions.run_and_verify_commit(wc_dir, expected_output, expected_status,
+ None, '--depth=immediates', '--include-externals', wc_dir)
+
+ # Expect only unpegged externals to be committed (those in X/)
+ # svn ci --include-externals
+ expected_output = svntest.wc.State(wc_dir, {
+ 'X/xmu' : Item(verb='Sending'),
+ 'X/Y/xlambda' : Item(verb='Sending'),
+ 'X/Y/xH/xZ/zeta' : Item(verb='Sending'),
+ 'X/Y/xH/chi' : Item(verb='Sending'),
+ 'X/xG/pi' : Item(verb='Sending'),
+ })
+
+ expected_status.tweak(status=' ')
+ expected_status.tweak('X/xmu', 'X/Y/xlambda', 'X/Y/xH/xZ/zeta',
+ 'X/Y/xH/chi', 'X/xG/pi', wc_rev='4')
+
+ expected_status.tweak('Xpegged/xE/alpha', status='M ')
+
+ actions.run_and_verify_commit(wc_dir, expected_output, expected_status,
+ None, '--include-externals', wc_dir)
+
+ # svn up
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/mu' : Item(status='U '),
+ 'A/D/H/chi' : Item(status='U '),
+ 'A/D/H/xZ/zeta' : Item(status='U '),
+ 'A/D/G/pi' : Item(status='U '),
+ 'A/B/lambda' : Item(status='U '),
+ 'Z/zeta' : Item(status='U '),
+ })
+
+ expected_disk.tweak('Xpegged/xE/alpha',
+ contents="This is the file 'alpha'.\nmod\n")
+ expected_disk.tweak('A/D/H/chi', 'X/Y/xH/chi',
+ contents="This is the file 'chi'.\nmod\n")
+ expected_disk.tweak('A/D/H/xZ/zeta', 'X/Y/xH/xZ/zeta', 'Z/zeta',
+ contents='This is the file zeta.\nmod\n')
+ expected_disk.tweak('A/D/G/pi', 'X/xG/pi',
+ contents="This is the file 'pi'.\nmod\n")
+ expected_disk.tweak('A/mu', 'X/xmu',
+ contents="This is the file 'mu'.\nmod\n")
+ expected_disk.tweak('A/B/lambda', 'X/Y/xlambda',
+ contents="This is the file 'lambda'.\nmod\n")
+
+
+ # Assume everything r4, except what is pegged
+ expected_status.tweak(wc_rev='4')
+ expected_status.tweak('Xpegged/xiota', 'Xpegged/xE', 'Xpegged/xE/alpha',
+ 'Xpegged/xE/beta', wc_rev=1)
+
+ actions.run_and_verify_update(wc_dir, expected_output, expected_disk,
+ expected_status, None, None, None, None, None, False, wc_dir)
+
+ # new mods to check more cases
+ # echo mod >> X/xmu
+ main.file_append(X_xmu, 'mod\n')
+
+ # echo mod >> X/Y/xlambda
+ main.file_append(X_Y_xlambda, 'mod\n')
+
+ # echo mod >> X/xG/pi
+ main.file_append(X_xG_pi, 'mod\n')
+
+ # echo mod >> X/Y/xH/chi
+ main.file_append(X_Y_xH_chi, 'mod\n')
+
+ # echo mod >> X/Y/xH/xZ/zeta
+ main.file_append(X_Y_xH_xZ_zeta, 'mod\n')
+
+ # svn status
+ expected_status.tweak('X/Y/xlambda', 'X/xmu', 'X/xG/pi',
+ 'X/Y/xH/chi', 'X/Y/xH/xZ/zeta', status='M ')
+
+ actions.run_and_verify_unquiet_status(wc_dir, expected_status)
+
+ # Expect no externals to be committed, because of depth
+ # svn ci --include-externals --depth=empty X
+ expected_output = svntest.wc.State(wc_dir, {})
+
+ actions.run_and_verify_commit(wc_dir, expected_output, expected_status,
+ None, '--include-externals', '--depth=empty', X)
+
+ # Expect only file external xmu to be committed, because of depth
+ # svn ci --include-externals --depth=files X
+ expected_output = svntest.wc.State(wc_dir, {
+ 'X/xmu' : Item(verb='Sending'),
+ })
+
+ expected_status.tweak(status=' ')
+ expected_status.tweak('X/xmu', wc_rev='5')
+ expected_status.tweak('X/Y/xlambda', 'X/xG/pi', 'X/Y/xH/chi',
+ 'X/Y/xH/xZ/zeta', 'Xpegged/xE/alpha', status='M ')
+
+ actions.run_and_verify_commit(wc_dir, expected_output, expected_status,
+ None, '--include-externals', '--depth=files', X)
+
+ # svn status
+ actions.run_and_verify_unquiet_status(wc_dir, expected_status)
+
+ # svn up
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/mu' : Item(status='U '),
+ })
+
+ expected_disk.tweak('A/mu', 'X/xmu',
+ contents="This is the file 'mu'.\nmod\nmod\n")
+ expected_disk.tweak('X/Y/xlambda',
+ contents="This is the file 'lambda'.\nmod\nmod\n")
+ expected_disk.tweak('X/Y/xH/chi',
+ contents="This is the file 'chi'.\nmod\nmod\n")
+ expected_disk.tweak('X/Y/xH/xZ/zeta',
+ contents='This is the file zeta.\nmod\nmod\n')
+ expected_disk.tweak('X/xG/pi',
+ contents="This is the file 'pi'.\nmod\nmod\n")
+
+ expected_status.tweak(wc_rev='5')
+ expected_status.tweak('Xpegged/xiota', wc_rev='1')
+ expected_status.tweak('Xpegged/xiota', 'Xpegged/xE', 'Xpegged/xE/alpha',
+ 'Xpegged/xE/beta', wc_rev=1)
+
+ expected_status.tweak('X/Y/xH/chi', status='M ')
+
+ actions.run_and_verify_update(wc_dir, expected_output, expected_disk,
+ expected_status, None, None, None, None, None, False, wc_dir)
+
+ # echo mod >> X/xG/pi
+ main.file_append(X_xG_pi, 'mod\n')
+
+ # svn status
+ actions.run_and_verify_unquiet_status(wc_dir, expected_status)
+
+ # Expect explicit targets to be committed
+ # svn ci X/Y/xlambda X/xG
+ expected_output = svntest.wc.State(wc_dir, {
+ 'X/Y/xlambda' : Item(verb='Sending'),
+ 'X/xG/pi' : Item(verb='Sending'),
+ })
+
+ expected_status.tweak(status=' ')
+ expected_status.tweak('X/Y/xlambda', 'X/xG/pi', wc_rev='6')
+ expected_status.tweak('X/Y/xH/chi', 'X/Y/xH/xZ/zeta', 'Xpegged/xE/alpha',
+ status='M ')
+
+ actions.run_and_verify_commit(wc_dir, expected_output, expected_status,
+ None, X_Y_xlambda, X_xG)
+
+ # svn status
+ actions.run_and_verify_unquiet_status(wc_dir, expected_status)
+
+
+@Issue(4252)
+def include_immediate_dir_externals(sbox):
+ "commit --include-externals --depth=immediates"
+ # See also comment in append_externals_as_explicit_targets() in
+ # libsvn_client/commit.c, from r1198765.
+
+ # svntest.factory.make(sbox,"""
+ # svn mkdir X
+ # svn ci
+ # svn up
+ # svn ps svn:externals "^/A/B/E X/XE" wc_dir
+ # svn ci
+ # svn up
+ #
+ # svn ps some change X/XE
+ # echo mod >> X/XE/alpha
+ #
+ # svn st X/XE
+ # # Expect only the propset on X/XE to be committed.
+ # # Should be like 'svn commit --include-externals --depth=empty X/XE'.
+ # svn commit --include-externals --depth=immediates X
+ # """)
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ X = sbox.ospath('X')
+ X_XE = sbox.ospath('X/XE')
+ X_XE_alpha = sbox.ospath('X/XE/alpha')
+
+ # svn mkdir X
+ expected_stdout = ['A ' + X + '\n']
+
+ actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'mkdir', X)
+
+ # svn ci
+ expected_output = svntest.wc.State(wc_dir, {
+ 'X' : Item(verb='Adding'),
+ })
+
+ expected_status = actions.get_virginal_state(wc_dir, 1)
+ expected_status.add({
+ 'X' : Item(status=' ', wc_rev='2'),
+ })
+
+ actions.run_and_verify_commit(wc_dir, expected_output, expected_status,
+ None, wc_dir)
+
+ # svn up
+ expected_output = svntest.wc.State(wc_dir, {})
+
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.add({
+ 'X' : Item(),
+ })
+
+ expected_status.tweak(wc_rev='2')
+
+ actions.run_and_verify_update(wc_dir, expected_output, expected_disk,
+ expected_status, None, None, None, None, None, False, wc_dir)
+
+ # svn ps svn:externals "^/A/B/E X/XE" wc_dir
+ expected_stdout = ["property 'svn:externals' set on '" + wc_dir + "'\n"]
+
+ actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'ps',
+ 'svn:externals', '^/A/B/E X/XE', wc_dir)
+
+ # svn ci
+ expected_output = svntest.wc.State(wc_dir, {
+ '' : Item(verb='Sending'),
+ })
+
+ expected_status.tweak('', wc_rev='3')
+
+ actions.run_and_verify_commit(wc_dir, expected_output, expected_status,
+ None, wc_dir)
+
+ # svn up
+ expected_output = svntest.wc.State(wc_dir, {
+ 'X/XE/alpha' : Item(status='A '),
+ 'X/XE/beta' : Item(status='A '),
+ })
+
+ expected_disk.add({
+ 'X/XE' : Item(),
+ 'X/XE/alpha' : Item(contents="This is the file 'alpha'.\n"),
+ 'X/XE/beta' : Item(contents="This is the file 'beta'.\n"),
+ })
+
+ expected_status.tweak(wc_rev='3')
+ expected_status.add({
+ 'X/XE' : Item(status=' ', prev_status='X ', wc_rev='3'),
+ 'X/XE/beta' : Item(status=' ', wc_rev='3'),
+ 'X/XE/alpha' : Item(status=' ', wc_rev='3'),
+ })
+
+ actions.run_and_verify_update(wc_dir, expected_output, expected_disk,
+ expected_status, None, None, None, None, None, False, wc_dir)
+
+ sbox.simple_propset('some', 'change', 'X/XE')
+
+ # echo mod >> X/XE/alpha
+ main.file_append(X_XE_alpha, 'mod\n')
+
+ # svn st X/XE
+ expected_status.tweak('X/XE', status=' M')
+ expected_status.tweak('X/XE/alpha', status='M ')
+ actions.run_and_verify_unquiet_status(wc_dir, expected_status)
+
+ # Expect only the propset on X/XE to be committed.
+ # Should be like 'svn commit --include-externals --depth=empty X/XE'.
+ # svn commit --include-externals --depth=immediates X
+ expected_output = svntest.wc.State(wc_dir, {
+ 'X/XE' : Item(verb='Sending'),
+ })
+ expected_status.tweak('X/XE', status=' ', wc_rev=4)
+
+ # Currently this fails because nothing is committed.
+ #
+ # >svn st
+ # X X\XE
+ #
+ # Performing status on external item at 'X\XE':
+ # M C:\SVN\src-trunk\...\externals_tests-37\X\XE
+ # M C:\SVN\src-trunk\...\externals_tests-37\X\XE\alpha
+ #
+ # >svn ci -m "m" --include-externals --depth immediates X
+ #
+ # >
+ actions.run_and_verify_commit(wc_dir, expected_output, expected_status,
+ None, '--include-externals', '--depth=immediates', X)
+
+
+@Issue(4085)
+def shadowing(sbox):
+ "external shadows an existing dir"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # Setup external: /A/B/F as 'C' child of /A
+ externals_prop = "^/A/B/F C\n"
+ change_external(sbox.ospath('A'), externals_prop, commit=False)
+
+ # An update errors out because the external is shadowed by an existing dir
+ svntest.main.run_svn("W205011: Error handling externals definition for '%s'"
+ % (sbox.wc_dir) + "/A/C", 'update', wc_dir)
+
+ # Remove the shadowed directory to unblock the external
+ svntest.main.run_svn(None, 'rm', sbox.repo_url + '/A/C', '-m', 'remove A/C')
+
+ # The next update should fetch the external and not error out
+ sbox.simple_update()
+
+
# Test for issue #4093 'remapping a file external can segfault due to
# "deleted" props'.
@Issue(4093)
@@ -2146,8 +2824,8 @@ def remap_file_external_with_prop_del(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, "A")
- mu_path = os.path.join(wc_dir, "A", "mu")
+ A_path = sbox.ospath('A')
+ mu_path = sbox.ospath('A/mu')
# Add a property to A/mu
svntest.actions.run_and_verify_svn(None, None, [],
@@ -2192,8 +2870,8 @@ def dir_external_with_dash_r_only(sbox):
wc_dir = sbox.wc_dir
url = sbox.repo_url
- A_B_E_alpha = os.path.join(wc_dir, 'A', 'B', 'E', 'alpha')
- E_ext = os.path.join(wc_dir, 'E_ext')
+ A_B_E_alpha = sbox.ospath('A/B/E/alpha')
+ E_ext = sbox.ospath('E_ext')
# echo 'newer alpha' > A/B/E/alpha
main.file_write(A_B_E_alpha, 'newer alpha\n')
@@ -2232,7 +2910,9 @@ def dir_external_with_dash_r_only(sbox):
expected_status.tweak(wc_rev='2')
expected_status.tweak('', status=' M')
expected_status.add({
- 'E_ext' : Item(status='X '),
+ 'E_ext' : Item(status=' ', prev_status='X ', wc_rev=1),
+ 'E_ext/beta' : Item(status=' ', wc_rev='1'),
+ 'E_ext/alpha' : Item(status=' ', wc_rev='1'),
})
actions.run_and_verify_update(wc_dir, expected_output, expected_disk,
@@ -2255,7 +2935,7 @@ def url_to_wc_copy_of_externals(sbox):
# Create an external A/C/external pointing to ^/A/D/G.
svntest.actions.run_and_verify_svn(None, None, [], 'ps',
'svn:externals', '^/A/D/G external',
- os.path.join(wc_dir, 'A', 'C'))
+ sbox.ospath('A/C'))
svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m',
'create an external', wc_dir)
svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
@@ -2265,7 +2945,7 @@ def url_to_wc_copy_of_externals(sbox):
# Previously this failed with:
# >svn copy ^^/A/C External-WC-to-URL-Copy
# U External-WC-to-URL-Copy
- #
+ #
# Fetching external item into 'External-WC-to-URL-Copy\external':
# A External-WC-to-URL-Copy\external\pi
# A External-WC-to-URL-Copy\external\rho
@@ -2285,7 +2965,7 @@ def url_to_wc_copy_of_externals(sbox):
# svn-F9E2C0EC' to 'C:\SVN\src-trunk-3\Debug\subversion\tests\cmdline\
# svn-test-work\working_copies\externals_tests-41\External-WC-to-URL-Copy':
# Access is denied.
- external_root_path = os.path.join(wc_dir, "External-WC-to-URL-Copy")
+ external_root_path = sbox.ospath('External-WC-to-URL-Copy')
external_ex_path = os.path.join(wc_dir, "External-WC-to-URL-Copy",
"external")
external_pi_path = os.path.join(wc_dir, "External-WC-to-URL-Copy",
@@ -2295,19 +2975,364 @@ def url_to_wc_copy_of_externals(sbox):
external_tau_path = os.path.join(wc_dir, "External-WC-to-URL-Copy",
"external", "tau")
expected_stdout = verify.UnorderedOutput([
- "\n",
" U " + external_root_path + "\n",
+ "\n",
"Fetching external item into '" + external_ex_path + "':\n",
"A " + external_pi_path + "\n",
"A " + external_rho_path + "\n",
"A " + external_tau_path + "\n",
"Checked out external at revision 2.\n",
+ "\n",
"Checked out revision 2.\n",
"A " + external_root_path + "\n"
])
exit_code, stdout, stderr = svntest.actions.run_and_verify_svn2(
"OUTPUT", expected_stdout, [], 0, 'copy', repo_url + '/A/C',
- os.path.join(wc_dir, 'External-WC-to-URL-Copy'))
+ sbox.ospath('External-WC-to-URL-Copy'))
+
+@Issue(4227)
+def duplicate_targets(sbox):
+ "local path appears twice in one svn:external prop"
+
+ if False:
+ svntest.factory.make(sbox, r"""
+ svn ps svn:externals "^/A/B/E barf\n^/A/B/E barf" .
+ svn ps svn:externals "^/A/B/E barf\n^/A/D/G barf" .
+ svn ps svn:externals "^/A/B/E barf/.\n^/A/D/G ./barf" .
+ svn ps svn:externals "^/A/B/E ././barf\n^/A/D/G .//barf" .
+ svn pg svn:externals .
+ svn ps svn:externals "^/A/B/E ok" .
+ svn pg svn:externals .
+ """)
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ abs_wc_dir = os.path.abspath(sbox.wc_dir)
+
+ expected_stderr = verify.RegexOutput(
+ ".*Invalid svn:externals property on '" + re.escape(abs_wc_dir) +
+ "': target 'barf' appears more than once\n",
+ match_all=False)
+
+ # svn ps svn:externals "^/A/B/E barf\n^/A/B/E barf" .
+ actions.run_and_verify_svn2('OUTPUT', [], expected_stderr, 1, 'ps',
+ 'svn:externals', '^/A/B/E barf\n^/A/B/E barf', wc_dir)
+
+ # svn ps svn:externals "^/A/B/E barf\n^/A/D/G barf" .
+ actions.run_and_verify_svn2('OUTPUT', [], expected_stderr, 1, 'ps',
+ 'svn:externals', '^/A/B/E barf\n^/A/D/G barf', wc_dir)
+
+ # svn ps svn:externals "^/A/B/E barf/.\n^/A/D/G ./barf" .
+ actions.run_and_verify_svn2('OUTPUT', [], expected_stderr, 1, 'ps',
+ 'svn:externals', '^/A/B/E barf/.\n^/A/D/G ./barf', wc_dir)
+
+ # svn ps svn:externals "^/A/B/E ././barf\n^/A/D/G .//barf" .
+ actions.run_and_verify_svn2('OUTPUT', [], expected_stderr, 1, 'ps',
+ 'svn:externals', '^/A/B/E ././barf\n^/A/D/G .//barf', wc_dir)
+
+ # svn pg svn:externals .
+ expected_stdout = []
+
+ actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'pg',
+ 'svn:externals', wc_dir)
+
+ # svn ps svn:externals "^/A/B/E ok" .
+ expected_stdout = ["property 'svn:externals' set on '" + wc_dir + "'\n"]
+
+ actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'ps',
+ 'svn:externals', '^/A/B/E ok', wc_dir)
+
+ # svn pg svn:externals .
+ expected_stdout = verify.UnorderedOutput([
+ '^/A/B/E ok\n',
+ '\n'
+ ])
+
+ actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'pg',
+ 'svn:externals', wc_dir)
+
+@Issue(4225)
+def list_include_externals(sbox):
+ "list with --include-externals"
+
+ externals_test_setup(sbox)
+
+ wc_dir = sbox.wc_dir
+ repo_url = sbox.repo_url
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'checkout',
+ repo_url, wc_dir)
+
+ B_path = sbox.ospath("A/B")
+ C_path = sbox.ospath("A/C")
+
+ B_url = repo_url + "/A/B"
+ C_url = repo_url + "/A/C"
+
+ def list_external_string(path, url):
+ string = "Listing external" + " '" + path + "' " + "defined on" + " '" + \
+ url + "'" + ":"
+ return string
+
+ expected_stdout = verify.UnorderedOutput([
+ "E/" + "\n",
+ "F/" + "\n",
+ "lambda" + "\n",
+ list_external_string("gamma", B_url ) + "\n",
+ "gamma" + "\n"])
+
+ exit_code, stdout, stderr = svntest.actions.run_and_verify_svn2(
+ "OUTPUT", expected_stdout, [], 0, 'ls', '--include-externals', B_path)
+
+ exit_code, stdout, stderr = svntest.actions.run_and_verify_svn2(
+ "OUTPUT", expected_stdout, [], 0, 'ls', '--include-externals', B_url)
+
+ expected_stdout = verify.UnorderedOutput([
+ list_external_string("exdir_G", C_url)+ "\n",
+ "pi" + "\n",
+ "rho" + "\n",
+ "tau" + "\n",
+ list_external_string("exdir_H", C_url) + "\n",
+ "chi" + "\n",
+ "omega" + "\n",
+ "psi" + "\n"])
+
+ exit_code, stdout, stderr = svntest.actions.run_and_verify_svn2(
+ "OUTPUT", expected_stdout, [], 0, 'ls', '--include-externals', C_path)
+
+ exit_code, stdout, stderr = svntest.actions.run_and_verify_svn2(
+ "OUTPUT", expected_stdout, [], 0, 'ls', '--include-externals', C_url)
+
+@Issue(4293)
+def move_with_file_externals(sbox):
+ "move with file externals"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ repo_url = sbox.repo_url
+
+ sbox.simple_propset('svn:externals', '^/A/mu@1 mu-1\n', 'A/D')
+ sbox.simple_commit()
+
+ sbox.simple_update()
+ sbox.simple_move('A/D', 'A/D_moved')
+ sbox.simple_commit()
+ sbox.simple_update()
+
+@Issue(4185)
+def pinned_externals(sbox):
+ "pinned external"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ repo_url = sbox.repo_url
+
+ # Create X in r2
+ sbox.simple_copy('A', 'X')
+ sbox.simple_mkdir('Z')
+ sbox.simple_commit('')
+
+ repo_X_mu = repo_url + '/X/mu'
+
+ expected_output = verify.RegexOutput(
+ '^ 1 jrandom .* mu$'
+ )
+
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'list', repo_X_mu, '-v')
+
+ # So, we copied A/mu to X/mu in r2, but its last changed revision is
+ # still r1. It existed as A/mu at r1.
+
+ # In the old format the -r is interpreted like an @1 on checkout.
+
+ sbox.simple_propset('svn:externals',
+ 'old-plain ' + repo_X_mu + '\n' +
+ 'old-rev -r 1 ' + repo_X_mu + '\n' +
+ repo_X_mu + ' new-plain\n' +
+ '-r1 ' + repo_X_mu + ' new-rev\n' +
+ repo_X_mu + '@1 new-peg\n',
+ 'Z')
+
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/D' : Item(status=' U'),
+ 'A/D/exdir_E/beta' : Item(status='A '),
+ 'A/D/exdir_E/alpha' : Item(status='A '),
+ })
+ expected_error = "svn: E205011: Failure.*externals"
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.add({
+ # The interesting values
+ 'Z/old-plain' : Item(contents="This is the file 'mu'.\n"),
+ 'Z/new-plain' : Item(contents="This is the file 'mu'.\n"),
+ 'Z/new-rev' : Item(contents="This is the file 'mu'.\n"),
+
+ # And verifying X
+ 'X/D/H/psi' : Item(contents="This is the file 'psi'.\n"),
+ 'X/D/H/chi' : Item(contents="This is the file 'chi'.\n"),
+ 'X/D/H/omega' : Item(contents="This is the file 'omega'.\n"),
+ 'X/D/G/tau' : Item(contents="This is the file 'tau'.\n"),
+ 'X/D/G/pi' : Item(contents="This is the file 'pi'.\n"),
+ 'X/D/G/rho' : Item(contents="This is the file 'rho'.\n"),
+ 'X/D/gamma' : Item(contents="This is the file 'gamma'.\n"),
+ 'X/B/E/alpha' : Item(contents="This is the file 'alpha'.\n"),
+ 'X/B/E/beta' : Item(contents="This is the file 'beta'.\n"),
+ 'X/B/lambda' : Item(contents="This is the file 'lambda'.\n"),
+ 'X/B/F' : Item(),
+ 'X/C' : Item(),
+ 'X/mu' : Item(contents="This is the file 'mu'.\n"),
+ })
+
+
+ # ### Would be nice if verify update would still verify the result
+ # on exiting with an error. Why would you pass it?
+ svntest.actions.run_and_verify_update(wc_dir, None, None, None,
+ expected_error)
+
+ svntest.actions.verify_disk(wc_dir, expected_disk)
+
+# Test for issue #3741 'externals not removed when working copy is made shallow'
+@Issue(3741)
+def update_dir_external_shallow(sbox):
+ "shallow update should remove externals"
+
+ sbox.build()
+
+ # Create an external in r2
+ sbox.simple_propset('svn:externals', '^/A/D/H X', 'A/B/E')
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ # Now make A/B/E shallow by updating with "--set-depth empty"
+ expected_output = svntest.wc.State(sbox.wc_dir, {
+ 'A/B/E/alpha' : Item(status='D '),
+ 'A/B/E/X' : Item(verb='Removed external'),
+ 'A/B/E/beta' : Item(status='D '),
+ })
+ svntest.actions.run_and_verify_update(sbox.wc_dir,
+ expected_output, None, None,
+ None, None, None, None, None, False,
+ '--set-depth=empty',
+ sbox.ospath('A/B/E'))
+
+ # And bring the external back by updating with "--set-depth infinity"
+ expected_output = svntest.wc.State(sbox.wc_dir, {
+ 'A/B/E/X/psi' : Item(status='A '),
+ 'A/B/E/X/chi' : Item(status='A '),
+ 'A/B/E/X/omega' : Item(status='A '),
+ 'A/B/E/alpha' : Item(status='A '),
+ 'A/B/E/beta' : Item(status='A '),
+ })
+ svntest.actions.run_and_verify_update(sbox.wc_dir,
+ expected_output, None, None,
+ None, None, None, None, None, False,
+ '--set-depth=infinity',
+ sbox.ospath('A/B/E'))
+
+@Issue(4411)
+def switch_parent_relative_file_external(sbox):
+ "switch parent-relative file external"
+
+ sbox.build()
+
+ # Create a parent-relative file external in r2
+ sbox.simple_propset('svn:externals', '../D/gamma gamma-ext', 'A/B')
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ # Create a branch that contains the file external
+ sbox.simple_copy('A', 'A_copy')
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ # Check out A/B_copy to a new working copy
+ branch_wc = sbox.add_wc_path("branch")
+ branch_url = sbox.repo_url + '/A_copy'
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'checkout', branch_url,
+ branch_wc)
+
+ # Rename the branch
+ sbox.simple_move('A_copy', 'A_copy2')
+ sbox.simple_commit()
+
+ # Switch the branch working copy to the new branch URL
+ new_branch_url = sbox.repo_url + '/A_copy2'
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'switch', new_branch_url,
+ branch_wc)
+
+ # Bug: The branch working copy can no longer be updated.
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'update', branch_wc)
+
+def update_deletes_file_external(sbox):
+ "update deletes a file external"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ sbox.simple_propset('svn:externals', '../D/gamma gamma', 'A/C')
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ # Create a branch
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'copy',
+ '-m', 'create branch',
+ sbox.repo_url + '/A',
+ sbox.repo_url + '/A_copy')
+
+ # Update the working copy
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ # Remove the branch
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'rm',
+ '-m', 'remove branch',
+ sbox.repo_url + '/A_copy')
+
+ # As of r1448345, this update fails:
+ # E000002: Can't remove directory '.../A_copy/C': No such file or directory
+ sbox.simple_update()
+
+
+@Issue(4519)
+def switch_relative_externals(sbox):
+ "switch relative externals"
+
+ sbox.build(create_wc=False)
+
+ svntest.actions.run_and_verify_svnmucc(None, None, [],
+ '-U', sbox.repo_url, '-m', 'Q',
+ 'mkdir', 'branches',
+ 'cp', '1', 'A', 'trunk',
+ 'cp', '1', 'A', 'branches/A',
+ 'propset', 'svn:externals',
+ '../C dirExC\n ../mu fileExMu',
+ 'trunk/B',
+ 'propset', 'svn:externals',
+ '../C dirExC\n ../mu fileExMu',
+ 'branches/A/B')
+
+ wc = sbox.add_wc_path('wc')
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'co', sbox.repo_url + '/trunk', wc)
+
+ # This forgets to update some externals data
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'switch', sbox.repo_url + '/branches/A', wc)
+
+ # This upgrade makes the following update fail
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'upgrade', wc)
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'up', wc)
+
########################################################################
# Run the tests
@@ -2350,9 +3375,20 @@ test_list = [ None,
file_externals_different_url,
file_external_in_unversioned,
copy_file_externals,
+ commit_include_externals,
+ include_immediate_dir_externals,
+ shadowing,
remap_file_external_with_prop_del,
dir_external_with_dash_r_only,
url_to_wc_copy_of_externals,
+ duplicate_targets,
+ list_include_externals,
+ move_with_file_externals,
+ pinned_externals,
+ update_dir_external_shallow,
+ switch_parent_relative_file_external,
+ update_deletes_file_external,
+ switch_relative_externals,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/getopt_tests.py b/subversion/tests/cmdline/getopt_tests.py
index 09fbe41..a258c6b 100755
--- a/subversion/tests/cmdline/getopt_tests.py
+++ b/subversion/tests/cmdline/getopt_tests.py
@@ -25,7 +25,9 @@
######################################################################
# General modules
-import sys, re, os.path
+import sys, re, os.path, logging
+
+logger = logging.getLogger()
# Our testing module
import svntest
@@ -57,6 +59,9 @@ def load_expected_output(basename):
return exp_stdout, exp_stderr
+# With plaintext password storage enabled, `svn --version' emits a warning:
+warn_line_re = re.compile("WARNING: Plaintext password storage")
+
# This is a list of lines to delete.
del_lines_res = [
# In 'svn --version', the date line is variable, for example:
@@ -67,6 +72,7 @@ del_lines_res = [
re.compile(r"\* ra_(neon|local|svn|serf) :"),
re.compile(r" - handles '(https?|file|svn)' scheme"),
re.compile(r" - with Cyrus SASL authentication"),
+ re.compile(r" - using serf \d+\.\d+\.\d+"),
re.compile(r"\* fs_(base|fs) :"),
]
@@ -93,21 +99,61 @@ rep_lines_res = [
'Subversion command-line client, version X.Y.Z.'),
]
+# This is a trigger pattern that selects the secondary set of
+# delete/replace patterns
+switch_res_line = 'System information:'
+
+# This is a list of lines to delete after having seen switch_res_line.
+switched_warn_line_re = None
+switched_del_lines_res = [
+ # In svn --version --verbose, dependent libs loaded
+ # shared libs are optional.
+ re.compile(r'^\* (loaded|linked)'),
+ # In svn --version --verbose, remove everything from
+ # the extended lists
+ re.compile(r'^ - '),
+ ]
+
+# This is a list of lines to search and replace text on after having
+# seen switch_res_line.
+switched_rep_lines_res = [
+ # We don't care about the actual canonical host
+ (re.compile('^\* running on.*$'), '* running on'),
+ ]
+
def process_lines(lines):
"delete lines that should not be compared and search and replace the rest"
output = [ ]
+ warn_re = warn_line_re
+ del_res = del_lines_res
+ rep_res = rep_lines_res
+
+ skip_next_line = 0
for line in lines:
+ if skip_next_line:
+ skip_next_line = 0
+ continue
+
+ if line.startswith(switch_res_line):
+ warn_re = switched_warn_line_re
+ del_res = switched_del_lines_res
+ rep_res = switched_rep_lines_res
+
# Skip these lines from the output list.
delete_line = 0
- for delete_re in del_lines_res:
- if delete_re.match(line):
- delete_line = 1
- break
+ if warn_re and warn_re.match(line):
+ delete_line = 1
+ skip_next_line = 1 # Ignore the empty line after the warning
+ else:
+ for delete_re in del_res:
+ if delete_re.match(line):
+ delete_line = 1
+ break
if delete_line:
continue
# Search and replace text on the rest.
- for replace_re, replace_str in rep_lines_res:
+ for replace_re, replace_str in rep_res:
line = replace_re.sub(replace_str, line)
output.append(line)
@@ -127,7 +173,7 @@ def run_one_test(sbox, basename, *varargs):
exit_code, actual_stdout, actual_stderr = svntest.main.run_svn(1, *varargs)
else:
exit_code, actual_stdout, actual_stderr = svntest.main.run_command(svntest.main.svn_binary,
- 1, 0, *varargs)
+ 1, False, *varargs)
# Delete and perform search and replaces on the lines from the
# actual and expected output that may differ between build
@@ -137,33 +183,11 @@ def run_one_test(sbox, basename, *varargs):
actual_stdout = process_lines(actual_stdout)
actual_stderr = process_lines(actual_stderr)
- if exp_stdout != actual_stdout:
- print("Standard output does not match.")
- print("Expected standard output:")
- print("=====")
- for x in exp_stdout:
- sys.stdout.write(x)
- print("=====")
- print("Actual standard output:")
- print("=====")
- for x in actual_stdout:
- sys.stdout.write(x)
- print("=====")
- raise svntest.Failure
-
- if exp_stderr != actual_stderr:
- print("Standard error does not match.")
- print("Expected standard error:")
- print("=====")
- for x in exp_stderr:
- sys.stdout.write(x)
- print("=====")
- print("Actual standard error:")
- print("=====")
- for x in actual_stderr:
- sys.stdout.write(x)
- print("=====")
- raise svntest.Failure
+ svntest.verify.compare_and_display_lines("Standard output does not match.",
+ "STDOUT", exp_stdout, actual_stdout)
+
+ svntest.verify.compare_and_display_lines("Standard error does not match.",
+ "STDERR", exp_stderr, actual_stderr)
def getopt_no_args(sbox):
"run svn with no arguments"
@@ -177,6 +201,10 @@ def getopt__version__quiet(sbox):
"run svn --version --quiet"
run_one_test(sbox, 'svn--version--quiet', '--version', '--quiet')
+def getopt__version__verbose(sbox):
+ "run svn --version --verbose"
+ run_one_test(sbox, 'svn--version--verbose', '--version', '--verbose')
+
def getopt__help(sbox):
"run svn --help"
run_one_test(sbox, 'svn--help', '--help')
@@ -202,6 +230,7 @@ test_list = [ None,
getopt_no_args,
getopt__version,
getopt__version__quiet,
+ getopt__version__verbose,
getopt__help,
getopt_help,
getopt_help_bogus_cmd,
diff --git a/subversion/tests/cmdline/getopt_tests_data/svn--version--verbose_stderr b/subversion/tests/cmdline/getopt_tests_data/svn--version--verbose_stderr
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/subversion/tests/cmdline/getopt_tests_data/svn--version--verbose_stderr
diff --git a/subversion/tests/cmdline/getopt_tests_data/svn--version--verbose_stdout b/subversion/tests/cmdline/getopt_tests_data/svn--version--verbose_stdout
new file mode 100644
index 0000000..ab183ee
--- /dev/null
+++ b/subversion/tests/cmdline/getopt_tests_data/svn--version--verbose_stdout
@@ -0,0 +1,90 @@
+svn, version 1.8.0-dev (under development)
+ compiled Sep 10 2012, 14:00:24 on i386-apple-darwin11.4.0
+
+Copyright (C) 2012 The Apache Software Foundation.
+This software consists of contributions made by many people;
+see the NOTICE file for more information.
+Subversion is open source software, see http://subversion.apache.org/
+
+The following repository access (RA) modules are available:
+
+* ra_svn : Module for accessing a repository using the svn network protocol.
+ - with Cyrus SASL authentication
+ - handles 'svn' scheme
+* ra_local : Module for accessing a repository on local disk.
+ - handles 'file' scheme
+* ra_serf : Module for accessing a repository via WebDAV protocol using serf.
+ - handles 'http' scheme
+ - handles 'https' scheme
+
+System information:
+
+* running on i386-apple-darwin11.4.0
+ - Mac OS X 10.7.4 Lion, build 11E53
+* linked dependencies:
+ - APR 1.4.2 (compiled with 1.4.2)
+ - APR-Util 1.3.10 (compiled with 1.3.10)
+ - SQLite 3.7.13 (compiled with 3.7.13)
+* loaded shared libraries:
+ - /opt/subversion/bin/svn (Intel 64-bit)
+ - /opt/subversion/lib/libsvn_client-1.0.dylib (Intel 64-bit)
+ - /opt/subversion/lib/libsvn_wc-1.0.dylib (Intel 64-bit)
+ - /opt/subversion/lib/libsvn_ra-1.0.dylib (Intel 64-bit)
+ - /opt/subversion/lib/libsvn_diff-1.0.dylib (Intel 64-bit)
+ - /opt/subversion/lib/libsvn_ra_local-1.0.dylib (Intel 64-bit)
+ - /opt/subversion/lib/libsvn_repos-1.0.dylib (Intel 64-bit)
+ - /opt/subversion/lib/libsvn_fs-1.0.dylib (Intel 64-bit)
+ - /opt/subversion/lib/libsvn_fs_fs-1.0.dylib (Intel 64-bit)
+ - /opt/subversion/lib/libsvn_fs_base-1.0.dylib (Intel 64-bit)
+ - /usr/local/lib/libdb-5.3.dylib (Intel 64-bit)
+ - /opt/subversion/lib/libsvn_fs_util-1.0.dylib (Intel 64-bit)
+ - /opt/subversion/lib/libsvn_ra_svn-1.0.dylib (Intel 64-bit)
+ - /usr/lib/libsasl2.2.dylib (Intel 64-bit)
+ - /opt/subversion/lib/libsvn_ra_serf-1.0.dylib (Intel 64-bit)
+ - /usr/local/lib/libserf-1.0.dylib (Intel 64-bit)
+ - /opt/subversion/lib/libsvn_delta-1.0.dylib (Intel 64-bit)
+ - /opt/subversion/lib/libsvn_subr-1.0.dylib (Intel 64-bit)
+ - /usr/lib/libexpat.1.dylib (Intel 64-bit)
+ - /usr/lib/libz.1.dylib (Intel 64-bit)
+ - /usr/local/lib/libsqlite3.0.8.6.dylib (Intel 64-bit)
+ - /usr/local/lib/libmagic.1.dylib (Intel 64-bit)
+ - /usr/lib/libaprutil-1.0.dylib (Intel 64-bit)
+ - /usr/lib/libapr-1.0.dylib (Intel 64-bit)
+ - /usr/lib/libSystem.B.dylib (Intel 64-bit)
+ - /usr/lib/libiconv.2.dylib (Intel 64-bit)
+ - /usr/lib/libpq.5.dylib (Intel 64-bit)
+ - /usr/lib/libsqlite3.dylib (Intel 64-bit)
+ - /usr/lib/libresolv.9.dylib (Intel 64-bit)
+ - /usr/lib/libssl.0.9.8.dylib (Intel 64-bit)
+ - /usr/lib/libcrypto.0.9.8.dylib (Intel 64-bit)
+ - /usr/lib/libicucore.A.dylib (Intel 64-bit)
+ - /usr/lib/libauto.dylib (Intel 64-bit)
+ - /usr/lib/libobjc.A.dylib (Intel 64-bit)
+ - /usr/lib/libstdc++.6.dylib (Intel 64-bit)
+ - /usr/lib/libpam.2.dylib (Intel 64-bit)
+ - /usr/lib/libbsm.0.dylib (Intel 64-bit)
+ - /usr/lib/libxar-nossl.dylib (Intel 64-bit)
+ - /usr/lib/libc++.1.dylib (Intel 64-bit)
+ - /usr/lib/libc++abi.dylib (Intel 64-bit)
+ - /usr/lib/libDiagnosticMessagesClient.dylib (Intel 64-bit)
+ - /usr/lib/libbz2.1.0.dylib (Intel 64-bit)
+ - /usr/lib/libxml2.2.dylib (Intel 64-bit)
+ - /usr/lib/liblangid.dylib (Intel 64-bit)
+ - /usr/lib/libCRFSuite.dylib (Intel 64-bit)
+ - /usr/lib/libxslt.1.dylib (Intel 64-bit)
+ - /usr/lib/sasl2/apop.so (Intel 64-bit)
+ - /usr/lib/sasl2/dhx.so (Intel 64-bit)
+ - /usr/lib/sasl2/digestmd5WebDAV.so (Intel 64-bit)
+ - /usr/lib/sasl2/libanonymous.2.so (Intel 64-bit)
+ - /usr/lib/sasl2/libcrammd5.2.so (Intel 64-bit)
+ - /usr/lib/sasl2/libdigestmd5.2.so (Intel 64-bit)
+ - /usr/lib/sasl2/libgssapiv2.2.so (Intel 64-bit)
+ - /usr/lib/sasl2/login.so (Intel 64-bit)
+ - /usr/lib/sasl2/libntlm.so (Intel 64-bit)
+ - /usr/lib/sasl2/libotp.2.so (Intel 64-bit)
+ - /usr/lib/sasl2/libplain.2.so (Intel 64-bit)
+ - /usr/lib/sasl2/libpps.so (Intel 64-bit)
+ - /usr/lib/sasl2/mschapv2.so (Intel 64-bit)
+ - /usr/lib/sasl2/shadow_auxprop.so (Intel 64-bit)
+ - /usr/lib/sasl2/smb_nt.so (Intel 64-bit)
+ - /usr/lib/sasl2/smb_ntlmv2.so (Intel 64-bit)
diff --git a/subversion/tests/cmdline/getopt_tests_data/svn--version_stdout b/subversion/tests/cmdline/getopt_tests_data/svn--version_stdout
index ffd51ba..346f218 100644
--- a/subversion/tests/cmdline/getopt_tests_data/svn--version_stdout
+++ b/subversion/tests/cmdline/getopt_tests_data/svn--version_stdout
@@ -2,8 +2,8 @@ svn, version 0.16.0 (r3987)
compiled Dec 5 2002, 00:02:51
Copyright (C) 2010 The Apache Software Foundation.
-This software consists of contributions made by many people; see the NOTICE
-file for more information.
+This software consists of contributions made by many people;
+see the NOTICE file for more information.
Subversion is open source software, see http://subversion.apache.org/
The following repository access (RA) modules are available:
diff --git a/subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout b/subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout
index 8db6f08..59b92aa 100644
--- a/subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout
+++ b/subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout
@@ -30,13 +30,48 @@ usage: 1. log [PATH][@REV]
The --depth option is only valid in combination with the --diff option
and limits the scope of the displayed diff to the specified depth.
+ If the --search option is used, log messages are displayed only if the
+ provided search pattern matches any of the author, date, log message
+ text (unless --quiet is used), or, if the --verbose option is also
+ provided, a changed path.
+ The search pattern may include "glob syntax" wildcards:
+ ? matches any single character
+ * matches a sequence of arbitrary characters
+ [abc] matches any of the characters listed inside the brackets
+ If multiple --search options are provided, a log message is shown if
+ it matches any of the provided search patterns. If the --search-and
+ option is used, that option's argument is combined with the pattern
+ from the previous --search or --search-and option, and a log message
+ is shown only if it matches the combined search pattern.
+ If --limit is used in combination with --search, --limit restricts the
+ number of log messages searched, rather than restricting the output
+ to a particular number of matching log messages.
+
Examples:
- svn log
- svn log foo.c
- svn log bar.c@42
- svn log http://www.example.com/repo/project/foo.c
- svn log http://www.example.com/repo/project foo.c bar.c
- svn log http://www.example.com/repo/project@50 foo.c bar.c
+
+ Show the latest 5 log messages for the current working copy
+ directory and display paths changed in each commit:
+ svn log -l 5 -v
+
+ Show the log for bar.c as of revision 42:
+ svn log bar.c@42
+
+ Show log messages and diffs for each commit to foo.c:
+ svn log --diff http://www.example.com/repo/project/foo.c
+ (Because the above command uses a full URL it does not require
+ a working copy.)
+
+ Show log messages for the children foo.c and bar.c of the directory
+ '/trunk' as it appeared in revision 50, using the ^/ URL shortcut:
+ svn log ^/trunk@50 foo.c bar.c
+
+ Show the log messages for any incoming changes to foo.c during the
+ next 'svn update':
+ svn log -r BASE:HEAD foo.c
+
+ Show the log message for the revision in which /branches/foo
+ was created:
+ svn log --stop-on-copy --limit 1 -r0:HEAD ^/branches/foo
Valid options:
-r [--revision] ARG : ARG (some commands also take ARG1:ARG2 range)
@@ -65,28 +100,26 @@ Valid options:
--diff : produce diff output
--diff-cmd ARG : use ARG as diff command
--internal-diff : override diff-cmd specified in config file
- -x [--extensions] ARG : Default: '-u'. When Subversion is invoking an
- external diff program, ARG is simply passed along
- to the program. But when Subversion is using its
- default internal diff implementation, or when
- Subversion is displaying blame annotations, ARG
- could be any of the following:
- -u (--unified):
- Output 3 lines of unified context.
- -b (--ignore-space-change):
- Ignore changes in the amount of white space.
- -w (--ignore-all-space):
- Ignore all white space.
- --ignore-eol-style:
- Ignore changes in EOL style.
- -p (--show-c-function):
- Show C function name in diff output.
+ -x [--extensions] ARG : Specify differencing options for external diff or
+ internal diff or blame. Default: '-u'. Options are
+ separated by spaces. Internal diff and blame take:
+ -u, --unified: Show 3 lines of unified context
+ -b, --ignore-space-change: Ignore changes in
+ amount of white space
+ -w, --ignore-all-space: Ignore all white space
+ --ignore-eol-style: Ignore changes in EOL style
+ -p, --show-c-function: Show C function name
+ --search ARG : use ARG as search pattern (glob syntax)
+ --search-and ARG : combine ARG with the previous search pattern
Global options:
--username ARG : specify a username ARG
--password ARG : specify a password ARG
--no-auth-cache : do not cache authentication tokens
- --non-interactive : do no interactive prompting
+ --non-interactive : do no interactive prompting (default is to prompt
+ only if standard input is a terminal device)
+ --force-interactive : do interactive prompting even if standard input
+ is not a terminal device
--trust-server-cert : accept SSL server certificates from unknown
certificate authorities without prompting (but only
with '--non-interactive')
@@ -154,7 +187,7 @@ Valid options:
--diff3-cmd ARG : use ARG as merge command
--relocate : relocate via URL-rewriting
--ignore-externals : ignore externals definitions
- --ignore-ancestry : ignore ancestry when calculating merges
+ --ignore-ancestry : allow switching to a node with no common ancestor
--force : force operation to run
--accept ARG : specify automatic conflict resolution action
('postpone', 'working', 'base', 'mine-conflict',
@@ -166,7 +199,10 @@ Global options:
--username ARG : specify a username ARG
--password ARG : specify a password ARG
--no-auth-cache : do not cache authentication tokens
- --non-interactive : do no interactive prompting
+ --non-interactive : do no interactive prompting (default is to prompt
+ only if standard input is a terminal device)
+ --force-interactive : do interactive prompting even if standard input
+ is not a terminal device
--trust-server-cert : accept SSL server certificates from unknown
certificate authorities without prompting (but only
with '--non-interactive')
diff --git a/subversion/tests/cmdline/history_tests.py b/subversion/tests/cmdline/history_tests.py
index badc864..8fd9c2c 100755
--- a/subversion/tests/cmdline/history_tests.py
+++ b/subversion/tests/cmdline/history_tests.py
@@ -64,7 +64,7 @@ def cat_traces_renames(sbox):
'A/D/G/bloo' : Item(verb='Adding')
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
- expected_status.remove('A/D/G/rho');
+ expected_status.remove('A/D/G/rho')
expected_status.add({ 'A/D/G/bloo' :
Item(wc_rev=2, status=' ') })
@@ -87,7 +87,7 @@ def cat_traces_renames(sbox):
'A/D/G/rho' : Item(verb='Adding')
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
- expected_status.remove('A/D/G/pi');
+ expected_status.remove('A/D/G/pi')
expected_status.tweak('A/D/G/rho', wc_rev=3)
expected_status.add({ 'A/D/G/bloo' :
Item(wc_rev=2, status=' ') })
diff --git a/subversion/tests/cmdline/import_tests.py b/subversion/tests/cmdline/import_tests.py
index 01b08b5..7adf4a8 100755
--- a/subversion/tests/cmdline/import_tests.py
+++ b/subversion/tests/cmdline/import_tests.py
@@ -25,11 +25,13 @@
######################################################################
# General modules
-import re, os.path
+import re, os.path, sys
# Our testing module
import svntest
from svntest import wc
+from prop_tests import create_inherited_ignores_config
+from svntest.main import SVN_PROP_INHERITABLE_IGNORES
# (abbreviation)
Skip = svntest.testcase.Skip_deco
@@ -298,6 +300,7 @@ def import_avoid_empty_revision(sbox):
#----------------------------------------------------------------------
# test for issue 2433: "import" does not handle eol-style correctly
+# and for normalising files with mixed line-endings upon import (r1205193)
@Issue(2433)
def import_eol_style(sbox):
"import should honor the eol-style property"
@@ -315,6 +318,7 @@ enable-auto-props = yes
[auto-props]
*.dsp = svn:eol-style=CRLF
+*.txt = svn:eol-style=native
'''
tmp_dir = os.path.abspath(svntest.main.temp_dir)
config_dir = os.path.join(tmp_dir, 'autoprops_config')
@@ -350,10 +354,13 @@ enable-auto-props = yes
# eol styl of test.dsp is CRLF, so diff will use that too. Make sure we
# define CRLF in a platform independent way.
+ # CRLF is a string that will match a CRLF sequence read from a text file.
+ # ### On Windows, we assume CRLF will be read as LF, so it's a poor test.
if os.name == 'nt':
crlf = '\n'
else:
crlf = '\r\n'
+
expected_output = [
"Index: test.dsp\n",
"===================================================================\n",
@@ -369,6 +376,26 @@ enable-auto-props = yes
file_path,
'--config-dir', config_dir)
+ # create a file with inconsistent EOLs and eol-style=native, and import it
+ file_name = "test.txt"
+ file_path = file_name
+ imp_dir_path = 'dir2'
+ imp_file_path = os.path.join(imp_dir_path, file_name)
+
+ os.mkdir(imp_dir_path, 0755)
+ svntest.main.file_append_binary(imp_file_path,
+ "This is file test.txt.\n" + \
+ "The second line.\r\n" + \
+ "The third line.\r")
+
+ # The import should succeed and not error out
+ svntest.actions.run_and_verify_svn(None, None, [], 'import',
+ '-m', 'Log message for new import',
+ imp_dir_path,
+ sbox.repo_url,
+ '--config-dir', config_dir)
+
+
#----------------------------------------------------------------------
@Issue(3983)
def import_into_foreign_repo(sbox):
@@ -385,6 +412,168 @@ def import_into_foreign_repo(sbox):
sbox.ospath('A/mu'), other_repo_url + '/f')
#----------------------------------------------------------------------
+def import_inherited_ignores(sbox):
+ 'import and inherited ignores'
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # Create this config file:
+ #
+ # [miscellany]
+ # global-ignores = *.boo *.goo
+ tmp_dir = os.path.abspath(svntest.main.temp_dir)
+ config_dir = os.path.join(tmp_dir, 'autoprops_config_' + sbox.name)
+ create_inherited_ignores_config(config_dir)
+
+ # Set some ignore properties.
+ sbox.simple_propset(SVN_PROP_INHERITABLE_IGNORES, '*.voo *.noo *.loo', '.')
+ sbox.simple_propset(SVN_PROP_INHERITABLE_IGNORES, '*.yoo\t*.doo', 'A/B')
+ sbox.simple_propset(SVN_PROP_INHERITABLE_IGNORES, '*.moo', 'A/D')
+ sbox.simple_propset('svn:ignore', '*.zoo\n*.foo\n*.poo', 'A/B/E')
+ sbox.simple_commit()
+
+ # Use this tree for importing:
+ #
+ # DIR1.noo
+ # DIR2.doo
+ # file1.txt
+ # DIR3.foo
+ # file2.txt
+ # DIR4.goo
+ # file3.txt
+ # file4.noo
+ # DIR5.moo
+ # file5.txt
+ # DIR6
+ # file6.foo
+ # DIR7
+ # file7.foo
+ # DIR8.noo
+ import_tree_dir = os.path.join(os.path.dirname(sys.argv[0]),
+ 'import_tests_data', 'import_tree')
+
+ # Relative WC paths of the imported tree.
+ dir1_path = os.path.join('DIR1.noo')
+ dir2_path = os.path.join('DIR2.doo')
+ file1_path = os.path.join('DIR2.doo', 'file1.txt')
+ dir3_path = os.path.join('DIR3.foo')
+ file2_path = os.path.join('DIR3.foo', 'file2.txt')
+ dir4_path = os.path.join('DIR4.goo')
+ file3_path = os.path.join('DIR4.goo', 'file3.txt')
+ file4_path = os.path.join('DIR4.goo', 'file4.noo')
+ dir5_path = os.path.join('DIR5.moo')
+ file5_path = os.path.join('DIR5.moo', 'file5.txt')
+ dir6_path = os.path.join('DIR6')
+ file6_path = os.path.join('DIR6', 'file6.foo')
+ dir7_path = os.path.join('DIR6', 'DIR7')
+ file7_path = os.path.join('DIR6', 'DIR7', 'file7.foo')
+ dir8_path = os.path.join('DIR6', 'DIR7', 'DIR8.noo')
+
+ # Import the tree to ^/A/B/E.
+ # We should not see any *.noo paths because those are blocked at the
+ # root of the repository by the svn:global-ignores property. Likewise
+ # *.doo paths are blocked by the svn:global-ignores on ^/A/B. Nor
+ # should we see and *.boo or *.goo paths, as those are blocked by the
+ # global-ignores config. Lastly, ^/A/B/E should not get any *.foo paths
+ # because of the svn:ignore property on ^/A/B/E, but non-immediate children
+ # of ^/A/B/E are permitted *.foo paths.
+ svntest.actions.run_and_verify_svn(None, None, [], 'import',
+ '--config-dir', config_dir,
+ import_tree_dir,
+ sbox.repo_url + '/A/B/E',
+ '-m', 'import')
+ E_path = os.path.join(wc_dir, 'A', 'B', 'E')
+ expected_output = svntest.verify.UnorderedOutput(
+ ["Updating '" + wc_dir + "':\n",
+ 'A ' + os.path.join(E_path, dir5_path) + '\n',
+ 'A ' + os.path.join(E_path, file5_path) + '\n',
+ 'A ' + os.path.join(E_path, dir6_path) + '\n',
+ 'A ' + os.path.join(E_path, file6_path) + '\n',
+ 'A ' + os.path.join(E_path, dir7_path) + '\n',
+ 'A ' + os.path.join(E_path, file7_path) + '\n',
+ 'Updated to revision 3.\n'])
+ svntest.actions.run_and_verify_svn(None, expected_output, [], 'up', wc_dir)
+
+ # Import the tree to ^/A/B/E/Z. The only difference from above is that
+ # DIR3.foo and its child file2.txt are also imported. Why? Because now
+ # we are creating a new directory in ^/A/B/E, so the svn:ignore property
+ # set on ^/A/B/E doesn't apply.
+ svntest.actions.run_and_verify_svn(None, None, [], 'import',
+ '--config-dir', config_dir,
+ import_tree_dir,
+ sbox.repo_url + '/A/B/E/Z',
+ '-m', 'import')
+ Z_path = os.path.join(wc_dir, 'A', 'B', 'E', 'Z')
+ expected_output = svntest.verify.UnorderedOutput(
+ ["Updating '" + wc_dir + "':\n",
+ 'A ' + os.path.join(Z_path) + '\n',
+ 'A ' + os.path.join(Z_path, dir5_path) + '\n',
+ 'A ' + os.path.join(Z_path, file5_path) + '\n',
+ 'A ' + os.path.join(Z_path, dir6_path) + '\n',
+ 'A ' + os.path.join(Z_path, file6_path) + '\n',
+ 'A ' + os.path.join(Z_path, dir7_path) + '\n',
+ 'A ' + os.path.join(Z_path, file7_path) + '\n',
+ 'A ' + os.path.join(Z_path, dir3_path) + '\n',
+ 'A ' + os.path.join(Z_path, file2_path) + '\n',
+ 'Updated to revision 4.\n'])
+ svntest.actions.run_and_verify_svn(None, expected_output, [], 'up', wc_dir)
+
+ # Import the tree to ^/A/B/F with the --no-ignore option.
+ # No ignores should be considered and the whole tree should
+ # be imported.
+ svntest.actions.run_and_verify_svn(None, None, [], 'import',
+ '--config-dir', config_dir,
+ '--no-ignore', import_tree_dir,
+ sbox.repo_url + '/A/B/F',
+ '-m', 'import')
+ F_path = os.path.join(wc_dir, 'A', 'B', 'F')
+ expected_output = svntest.verify.UnorderedOutput(
+ ["Updating '" + wc_dir + "':\n",
+ 'A ' + os.path.join(F_path, dir1_path) + '\n',
+ 'A ' + os.path.join(F_path, dir2_path) + '\n',
+ 'A ' + os.path.join(F_path, file1_path) + '\n',
+ 'A ' + os.path.join(F_path, dir3_path) + '\n',
+ 'A ' + os.path.join(F_path, file2_path) + '\n',
+ 'A ' + os.path.join(F_path, dir4_path) + '\n',
+ 'A ' + os.path.join(F_path, file3_path) + '\n',
+ 'A ' + os.path.join(F_path, file4_path) + '\n',
+ 'A ' + os.path.join(F_path, dir5_path) + '\n',
+ 'A ' + os.path.join(F_path, file5_path) + '\n',
+ 'A ' + os.path.join(F_path, dir6_path) + '\n',
+ 'A ' + os.path.join(F_path, file6_path) + '\n',
+ 'A ' + os.path.join(F_path, dir7_path) + '\n',
+ 'A ' + os.path.join(F_path, file7_path) + '\n',
+ 'A ' + os.path.join(F_path, dir8_path) + '\n',
+ 'Updated to revision 5.\n'])
+ svntest.actions.run_and_verify_svn(None, expected_output, [], 'up', wc_dir)
+
+ # Try importing a single file into a directory which has svn:ignore set
+ # on it with a matching pattern of the imported file. The import should
+ # be a no-op.
+ svntest.actions.run_and_verify_svn(None, [], [], 'import',
+ '--config-dir', config_dir,
+ os.path.join(import_tree_dir,
+ 'DIR6', 'file6.foo'),
+ sbox.repo_url + '/A/B/E/file6.foo',
+ '-m', 'This import should fail!')
+
+ # Try the above, but this time with --no-ignore, this time the import
+ # should succeed.
+ svntest.actions.run_and_verify_svn(None, None, [], 'import', '--no-ignore',
+ '--config-dir', config_dir,
+ os.path.join(import_tree_dir,
+ 'DIR6', 'file6.foo'),
+ sbox.repo_url + '/A/B/E/file6.foo',
+ '-m', 'import')
+ expected_output = svntest.verify.UnorderedOutput(
+ ["Updating '" + wc_dir + "':\n",
+ 'A ' + os.path.join(E_path, 'file6.foo') + '\n',
+ 'Updated to revision 6.\n'])
+ svntest.actions.run_and_verify_svn(None, expected_output, [], 'up', wc_dir)
+
+#----------------------------------------------------------------------
+
########################################################################
# Run the tests
@@ -397,6 +586,7 @@ test_list = [ None,
import_no_ignores,
import_eol_style,
import_into_foreign_repo,
+ import_inherited_ignores,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/import_tests_data/import_tree/DIR2.doo/file1.txt b/subversion/tests/cmdline/import_tests_data/import_tree/DIR2.doo/file1.txt
new file mode 100644
index 0000000..8f868f6
--- /dev/null
+++ b/subversion/tests/cmdline/import_tests_data/import_tree/DIR2.doo/file1.txt
@@ -0,0 +1 @@
+A file
diff --git a/subversion/tests/cmdline/import_tests_data/import_tree/DIR3.foo/file2.txt b/subversion/tests/cmdline/import_tests_data/import_tree/DIR3.foo/file2.txt
new file mode 100644
index 0000000..8f868f6
--- /dev/null
+++ b/subversion/tests/cmdline/import_tests_data/import_tree/DIR3.foo/file2.txt
@@ -0,0 +1 @@
+A file
diff --git a/subversion/tests/cmdline/import_tests_data/import_tree/DIR4.goo/file3.txt b/subversion/tests/cmdline/import_tests_data/import_tree/DIR4.goo/file3.txt
new file mode 100644
index 0000000..8f868f6
--- /dev/null
+++ b/subversion/tests/cmdline/import_tests_data/import_tree/DIR4.goo/file3.txt
@@ -0,0 +1 @@
+A file
diff --git a/subversion/tests/cmdline/import_tests_data/import_tree/DIR4.goo/file4.noo b/subversion/tests/cmdline/import_tests_data/import_tree/DIR4.goo/file4.noo
new file mode 100644
index 0000000..8f868f6
--- /dev/null
+++ b/subversion/tests/cmdline/import_tests_data/import_tree/DIR4.goo/file4.noo
@@ -0,0 +1 @@
+A file
diff --git a/subversion/tests/cmdline/import_tests_data/import_tree/DIR5.moo/file5.txt b/subversion/tests/cmdline/import_tests_data/import_tree/DIR5.moo/file5.txt
new file mode 100644
index 0000000..8f868f6
--- /dev/null
+++ b/subversion/tests/cmdline/import_tests_data/import_tree/DIR5.moo/file5.txt
@@ -0,0 +1 @@
+A file
diff --git a/subversion/tests/cmdline/import_tests_data/import_tree/DIR6/DIR7/file7.foo b/subversion/tests/cmdline/import_tests_data/import_tree/DIR6/DIR7/file7.foo
new file mode 100644
index 0000000..8f868f6
--- /dev/null
+++ b/subversion/tests/cmdline/import_tests_data/import_tree/DIR6/DIR7/file7.foo
@@ -0,0 +1 @@
+A file
diff --git a/subversion/tests/cmdline/import_tests_data/import_tree/DIR6/file6.foo b/subversion/tests/cmdline/import_tests_data/import_tree/DIR6/file6.foo
new file mode 100644
index 0000000..8f868f6
--- /dev/null
+++ b/subversion/tests/cmdline/import_tests_data/import_tree/DIR6/file6.foo
@@ -0,0 +1 @@
+A file
diff --git a/subversion/tests/cmdline/info_tests.py b/subversion/tests/cmdline/info_tests.py
index aa1c924..8feaf46 100755
--- a/subversion/tests/cmdline/info_tests.py
+++ b/subversion/tests/cmdline/info_tests.py
@@ -27,11 +27,15 @@
# See basic-tests.py for more svn info tests.
# General modules
-import shutil, stat, re, os
+import shutil, stat, re, os, logging
+
+logger = logging.getLogger()
# Our testing module
import svntest
+from prop_tests import binary_mime_type_on_text_file_warning
+
# (abbreviation)
Skip = svntest.testcase.Skip_deco
SkipUnless = svntest.testcase.SkipUnless_deco
@@ -74,9 +78,9 @@ def verify_xml_elements(lines, exprs):
str = str[m.end():] # skip xml version tag
(unmatched_str, unmatched_exprs) = match_xml_element(str, exprs)
if unmatched_exprs:
- print("Failed to find the following expressions:")
+ logger.warn("Failed to find the following expressions:")
for expr in unmatched_exprs:
- print(expr)
+ logger.warn(expr)
raise svntest.tree.SVNTreeUnequal
def match_xml_element(str, exprs):
@@ -115,7 +119,7 @@ def match_xml_element(str, exprs):
content_re = re.compile(content_re_str % name, re.DOTALL)
m = content_re.match(str)
if not m:
- print("No XML end-tag for '%s' found in '%s...'" % (name, str[:100]))
+ logger.warn("No XML end-tag for '%s' found in '%s...'" % (name, str[:100]))
raise(svntest.tree.SVNTreeUnequal)
content = m.group('content')
str = str[m.end():]
@@ -171,7 +175,7 @@ def info_with_tree_conflicts(sbox):
path = os.path.join(G, fname)
# check plain info
- expected_str1 = ".*local %s, incoming %s.*" % (reason, action)
+ expected_str1 = ".*local file %s, incoming file %s.*" % (reason, action)
expected_info = { 'Tree conflict' : expected_str1 }
svntest.actions.run_and_verify_info([expected_info], path)
@@ -195,7 +199,7 @@ def info_with_tree_conflicts(sbox):
expected_infos = [{ 'Path' : re.escape(G) }]
for fname, action, reason in scenarios:
path = os.path.join(G, fname)
- tree_conflict_re = ".*local %s, incoming %s.*" % (reason, action)
+ tree_conflict_re = ".*local file %s, incoming file %s.*" % (reason, action)
expected_infos.append({ 'Path' : re.escape(path),
'Tree conflict' : tree_conflict_re })
expected_infos.sort(key=lambda info: info['Path'])
@@ -219,6 +223,7 @@ def info_on_added_file(sbox):
expected = {'Path' : re.escape(new_file),
'Name' : 'new_file',
'URL' : '.*/new_file',
+ 'Relative URL' : '.*/new_file',
'Repository Root' : '.*',
'Node Kind' : 'file',
'Schedule' : 'add',
@@ -238,6 +243,7 @@ def info_on_added_file(sbox):
'path' : new_file,
'revision' : 'Resource is not under version control.'}),
('url', {}, '.*/new_file'),
+ ('relative-url', {}, '.*/new_file'),
('root', {}, '.*'),
('uuid', {}, uuid_regex),
('depth', {}, 'infinity'),
@@ -257,6 +263,7 @@ def info_on_mkdir(sbox):
# check that we have a Repository Root and Repository UUID
expected = {'Path' : re.escape(new_dir),
'URL' : '.*/new_dir',
+ 'Relative URL' : '.*/new_dir',
'Repository Root' : '.*',
'Node Kind' : 'directory',
'Schedule' : 'add',
@@ -275,6 +282,7 @@ def info_on_mkdir(sbox):
'path' : new_dir,
'revision' : 'Resource is not under version control.'}),
('url', {}, '.*/new_dir'),
+ ('relative-url', {}, '.*/new_dir'),
('root', {}, '.*'),
('uuid', {}, uuid_regex),
('depth', {}, 'infinity'),
@@ -299,13 +307,13 @@ def info_wcroot_abspaths(sbox):
target = "(UNKNOWN)"
if path is None:
- print "No WC root path for '%s'" % (target)
+ logger.warn("No WC root path for '%s'", target)
raise svntest.Failure
if path != wcroot_abspath:
- print("For target '%s'..." % (target))
- print(" Reported WC root path: %s" % (path))
- print(" Expected WC root path: %s" % (wcroot_abspath))
+ logger.warn("For target '%s'...", target)
+ logger.warn(" Reported WC root path: %s", path)
+ logger.warn(" Expected WC root path: %s", wcroot_abspath)
raise svntest.Failure
sbox.build(read_only=True)
@@ -394,6 +402,7 @@ def info_repos_root_url(sbox):
'Path' : re.escape(os.path.basename(sbox.repo_dir)),
'Repository Root' : re.escape(sbox.repo_url),
'URL' : re.escape(sbox.repo_url),
+ 'Relative URL' : '\^/', # escape ^ -- this isn't a regexp
'Revision' : '1',
'Node Kind' : 'directory',
'Last Changed Rev' : '1',
@@ -403,6 +412,7 @@ def info_repos_root_url(sbox):
'Name' : 'iota',
'Repository Root' : re.escape(sbox.repo_url),
'URL' : re.escape(sbox.repo_url + '/iota'),
+ 'Relative URL' : '\^/iota', # escape ^ -- this isn't a regexp
'Revision' : '1',
'Node Kind' : 'file',
'Last Changed Rev' : '1',
@@ -449,8 +459,8 @@ def info_show_exclude(sbox):
expected_info = [{
'Path' : '.*%siota' % re.escape(os.sep),
- 'Repository Root' : sbox.repo_url,
- 'Repository UUID' : wc_uuid,
+ 'Repository Root' : sbox.repo_url,
+ 'Repository UUID' : wc_uuid,
}]
svntest.main.run_svn(None, 'up', '--set-depth', 'exclude', iota)
svntest.actions.run_and_verify_info(expected_info, iota)
@@ -470,17 +480,15 @@ def info_show_exclude(sbox):
sbox.simple_rm('iota')
sbox.simple_commit()
+ expected_error = 'svn: E200009: Could not display info for all targets.*'
+
# Expect error on iota (status = not-present)
- svntest.actions.run_and_verify_svn(None, [],
- 'svn: E200009: Could not display info for all targets.*',
- 'info', iota)
+ svntest.actions.run_and_verify_svn(None, [], expected_error, 'info', iota)
sbox.simple_update()
# Expect error on iota (unversioned)
- svntest.actions.run_and_verify_svn(None, [],
- 'svn: E200009: Could not display info for all targets.*',
- 'info', iota)
+ svntest.actions.run_and_verify_svn(None, [], expected_error, 'info', iota)
@Issue(3998)
def binary_tree_conflict(sbox):
@@ -488,7 +496,9 @@ def binary_tree_conflict(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- sbox.simple_propset('svn:mime-type', 'binary/octet-stream', 'iota')
+ svntest.main.run_svn(binary_mime_type_on_text_file_warning,
+ 'propset', 'svn:mime-type', 'binary/octet-stream',
+ sbox.ospath('iota'))
sbox.simple_commit()
iota = sbox.ospath('iota')
@@ -516,8 +526,70 @@ def binary_tree_conflict(sbox):
}]
svntest.actions.run_and_verify_info(expected_info, iota)
+ expected_info = [{
+ 'Path' : '%s' % re.escape(wc_dir),
+ }]
+ svntest.actions.run_and_verify_info(expected_info, wc_dir)
+
+def relpath_escaping(sbox):
+ "relpath escaping should be usable as-is"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ name = 'path with space, +, % and #'
+ name2 = 'path with %20'
+ sbox.simple_copy('iota', name)
+ sbox.simple_copy('iota', name2)
+ sbox.simple_commit()
+
+ testpath = sbox.ospath(name)
+
+ expected = {'Path' : re.escape(testpath),
+ 'URL' : '.*/path.*with.*space.*',
+ 'Relative URL' : '.*/path.*with.*space.*',
+ }
+
+ svntest.actions.run_and_verify_info([expected], sbox.ospath(name))
+
+ info = svntest.actions.run_and_parse_info(sbox.ospath(name), sbox.ospath(name2))
+
+ # And now verify that the returned URL and relative url are usable
+
+ # Also test the local path (to help resolving the relative path) and an
+ # unescaped path which the client should automatically encode
+ svntest.actions.run_and_verify_svn(None, None, [], 'info',
+ info[0]['Relative URL'],
+ info[0]['URL'],
+ testpath,
+ '^/' + name,
+ info[1]['Relative URL'],
+ info[1]['URL'])
+
+ # And now do the same thing with a the file external handling
+ sbox.simple_propset('svn:externals',
+ info[0]['Relative URL'] + " f1\n" +
+ info[0]['URL'] + " f2\n" +
+ '"^/' + name + "\" f3\n" +
+
+ info[1]['Relative URL'] + " g1\n" +
+ info[1]['URL'] + " g2\n",
+ ''
+ )
+
+ # And now we expect to see 3 file externals
+ expected_output = svntest.wc.State(wc_dir, {
+ 'f1' : Item(status='A '),
+ 'f2' : Item(status='A '),
+ 'f3' : Item(status='A '),
+
+ 'g1' : Item(status='A '),
+ 'g2' : Item(status='A '),
+ })
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output, None, None)
########################################################################
# Run the tests
@@ -533,6 +605,7 @@ test_list = [ None,
info_repos_root_url,
info_show_exclude,
binary_tree_conflict,
+ relpath_escaping,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/input_validation_tests.py b/subversion/tests/cmdline/input_validation_tests.py
index 20c0fef..a454ac9 100755
--- a/subversion/tests/cmdline/input_validation_tests.py
+++ b/subversion/tests/cmdline/input_validation_tests.py
@@ -104,25 +104,22 @@ def invalid_copy_target(sbox):
sbox.build(read_only=True)
mu_path = os.path.join('A', 'mu')
C_path = os.path.join('A', 'C')
- run_and_verify_svn_in_wc(sbox, "svn: E155007: Path '.*' is not a directory",
+ run_and_verify_svn_in_wc(sbox, "svn: E155(007|010): Path '.*' is not a directory",
'copy', mu_path, C_path, "iota")
def invalid_delete_targets(sbox):
"invalid targets for 'delete'"
sbox.build(read_only=True)
for (target1, target2) in [("iota", "^/"), ("file://", "iota")]:
- run_and_verify_svn_in_wc(sbox, "svn: E205000: Cannot mix repository and working "
+ run_and_verify_svn_in_wc(sbox, "svn: E200009: Cannot mix repository and working "
"copy targets", 'delete', target1, target2)
def invalid_diff_targets(sbox):
"invalid targets for 'diff'"
sbox.build(read_only=True)
- for (target1, target2) in [("iota", "^/"), ("file://", "iota")]:
- run_and_verify_svn_in_wc(sbox, "svn: E205000: Cannot mix repository and working "
- "copy targets", 'diff', target1, target2)
- run_and_verify_svn_in_wc(sbox, "svn: E200007: Summarizing diff can only compare "
- "repository to repository",
- 'diff', '--summarize', "iota", "A")
+ for (target1, target2, target3) in [("iota", "^/", "A/mu"), ("file://", "iota", "A/mu")]:
+ run_and_verify_svn_in_wc(sbox, "svn: E200009: Cannot mix repository and working "
+ "copy targets", 'diff', target1, target2, target3)
def invalid_export_targets(sbox):
"invalid targets for 'export'"
@@ -154,18 +151,23 @@ def invalid_log_targets(sbox):
def invalid_merge_args(sbox):
"invalid arguments for 'merge'"
sbox.build(read_only=True)
- run_and_verify_svn_in_wc(sbox, "svn: E195002: A working copy merge source needs "
- "an explicit revision", 'merge', 'iota', '^/')
- for (src, target) in [('iota@HEAD', '^/'), ('iota@BASE', 'file://')]:
- run_and_verify_svn_in_wc(sbox, "svn: E205000: Merge sources must both be either "
- "paths or URLs", 'merge', src, target)
- run_and_verify_svn_in_wc(sbox, "svn: E155010: Path '.*' does not exist",
- 'merge', 'iota@BASE', 'iota@HEAD', 'nonexistent')
+ for args in [('iota', 'A/mu@HEAD'),
+ ('iota@BASE', 'A/mu@HEAD')]:
+ run_and_verify_svn_in_wc(sbox, "svn: E195002: .* working copy .* revision",
+ 'merge', *args)
+ for args in [(sbox.repo_url, 'A@1', 'A'),
+ ('^/A', 'A@HEAD', 'A'),
+ ('A@HEAD', '^/A', 'A'),
+ ('A@HEAD', '^/A')]:
+ run_and_verify_svn_in_wc(sbox, "svn: E205000: Merge sources must both "
+ "be either paths or URLs", 'merge', *args)
+ run_and_verify_svn_in_wc(sbox, "svn: E155010: .* was not found",
+ 'merge', '^/@0', '^/@1', 'nonexistent')
run_and_verify_svn_in_wc(sbox, "svn: E205000: Too many arguments given",
'merge', '-c42', '^/A/B', '^/A/C', 'iota')
run_and_verify_svn_in_wc(sbox, "svn: E205000: Cannot specify a revision range with" +
" two URLs", 'merge', '-c42', '^/mu', '^/')
- run_and_verify_svn_in_wc(sbox, "svn: E155010: Path '.*' does not exist",
+ run_and_verify_svn_in_wc(sbox, "svn: E155010: .* was not found",
'merge', '-c42', '^/mu', 'nonexistent')
def invalid_wcpath_upgrade(sbox):
@@ -200,14 +202,14 @@ def invalid_lock_targets(sbox):
"wc paths and repo URL target mixture for 'lock'"
sbox.build(read_only=True)
for (target1, target2) in [("iota", "^/"), ("file://", "iota")]:
- run_and_verify_svn_in_wc(sbox, "svn: E205000: Cannot mix repository and working "
+ run_and_verify_svn_in_wc(sbox, "svn: E200009: Cannot mix repository and working "
"copy targets", 'lock', target1, target2)
def invalid_unlock_targets(sbox):
"wc paths and repo URL target mixture for 'unlock'"
sbox.build(read_only=True)
for (target1, target2) in [("iota", "^/"), ("file://", "iota")]:
- run_and_verify_svn_in_wc(sbox, "svn: E205000: Cannot mix repository and working "
+ run_and_verify_svn_in_wc(sbox, "svn: E200009: Cannot mix repository and working "
"copy targets", 'unlock', target1, target2)
def invalid_status_targets(sbox):
@@ -241,7 +243,7 @@ def invalid_relocate_targets(sbox):
def invalid_mkdir_targets(sbox):
"invalid targets for 'mkdir'"
sbox.build(read_only=True)
- run_and_verify_svn_in_wc(sbox, "svn: E205000: Cannot mix repository and working "
+ run_and_verify_svn_in_wc(sbox, "svn: E200009: Cannot mix repository and working "
"copy targets", 'mkdir', "folder", "^/folder")
def invalid_update_targets(sbox):
@@ -250,6 +252,47 @@ def invalid_update_targets(sbox):
run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'update',
"^/")
+def delete_repos_root(sbox):
+ "do stupid things with the repository root"
+
+ sbox.build(read_only=True)
+ wc_dir = sbox.wc_dir
+ repo_url = sbox.repo_url
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+
+ expected_status.tweak('A/D/G', switched='S')
+ expected_status.remove('A/D/G/pi', 'A/D/G/rho', 'A/D/G/tau')
+ svntest.actions.run_and_verify_switch(sbox.wc_dir, sbox.ospath('A/D/G'),
+ repo_url,
+ None, None, expected_status,
+ None, None, None, None, None, None,
+ '--set-depth', 'empty', '--ignore-ancestry')
+
+ expected_status.tweak('A/B/F', switched='S')
+ svntest.actions.run_and_verify_switch(sbox.wc_dir, sbox.ospath('A/B/F'),
+ repo_url,
+ None, None, expected_status,
+ None, None, None, None, None, None,
+ '--depth', 'empty', '--ignore-ancestry')
+
+ # Delete the wcroot (which happens to be the repository root)
+ expected_error = 'svn: E155035: \'.*\' is the root of a working copy ' + \
+ 'and cannot be deleted'
+ svntest.actions.run_and_verify_svn('Delete root', [], expected_error,
+ 'rm', wc_dir)
+
+ # This should produce some error, because we can never commit this
+ expected_error = '.*repository root.*'
+ svntest.actions.run_and_verify_svn('Move root', None, expected_error,
+ 'mv', sbox.ospath('A/D/G'),
+ sbox.ospath('Z'))
+
+ # And this currently fails with another nasty error about a wc-lock
+ expected_error = '.*repository root.*'
+ svntest.actions.run_and_verify_svn('Delete root', [], expected_error,
+ 'rm', sbox.ospath('A/B/F'))
+
########################################################################
# Run the tests
@@ -279,6 +322,7 @@ test_list = [ None,
invalid_relocate_targets,
invalid_mkdir_targets,
invalid_update_targets,
+ delete_repos_root,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/iprop_authz_tests.py b/subversion/tests/cmdline/iprop_authz_tests.py
new file mode 100755
index 0000000..e306373
--- /dev/null
+++ b/subversion/tests/cmdline/iprop_authz_tests.py
@@ -0,0 +1,130 @@
+#!/usr/bin/env python
+#
+# iprop_authz_tests.py: iprop tests that need to write an authz file
+#
+# Subversion is a tool for revision control.
+# See http://subversion.apache.org for more information.
+#
+# ====================================================================
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+######################################################################
+
+# General modules
+import os
+
+# Our testing module
+import svntest
+
+# (abbreviation)
+Skip = svntest.testcase.Skip_deco
+
+from svntest.main import write_restrictive_svnserve_conf
+from svntest.main import write_authz_file
+
+######################################################################
+# Tests
+
+#----------------------------------------------------------------------
+# Property inheritance with read restrictions on parent paths.
+@Skip(svntest.main.is_ra_type_file)
+def iprops_authz(sbox):
+ "property inheritance and read restricted parents"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # r2 - Set properties at various levels.
+ sbox.simple_propset('RootProp', 'Root-Prop-Val', '.')
+ sbox.simple_propset('BranchProp', 'Branch-Prop-Val', 'A')
+ sbox.simple_propset('RandomProp1', 'Random-Prop-Val-1', 'A/D')
+ sbox.simple_propset('RandomProp2', 'Random-Prop-Val-2', 'A/D/H')
+ sbox.simple_propset('FileProp1', 'File-Prop-Val-1', 'A/D/H/psi')
+ svntest.main.run_svn(None, 'commit', '-m', 'Add some properties',
+ wc_dir)
+
+ write_restrictive_svnserve_conf(sbox.repo_dir)
+
+ # Check that a restricted user can only see inherited props from
+ # parent paths which he has read access to.
+
+ # Grant access only to ^/A/D/H/psi. No inherited properties should
+ # be shown.
+ write_authz_file(sbox, {
+ "/A/D/H/psi" : svntest.main.wc_author + "=rw",})
+
+ expected_iprops = {}
+ expected_explicit_props = {'FileProp1' : 'File-Prop-Val-1'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/D/H/psi', expected_iprops, expected_explicit_props)
+
+ # Grant access to ^/A/D/H/psi and the repos root but not the intermediate
+ # paths between the two.
+ write_authz_file(sbox, {
+ "/" : svntest.main.wc_author + "=rw",
+ "/A" : svntest.main.wc_author + "=",
+ "/A/D/H/psi" : svntest.main.wc_author + "=rw",})
+
+ expected_iprops = {
+ sbox.repo_url : {'RootProp' : 'Root-Prop-Val'}}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/D/H/psi', expected_iprops, expected_explicit_props)
+
+ # Grant access to ^/A/D/H/psi, the repos root, and the intermediate path
+ # ^/A/D. Everything else is still blocked.
+ write_authz_file(sbox, {
+ "/" : svntest.main.wc_author + "=rw",
+ "/A" : svntest.main.wc_author + "=",
+ "/A/D" : svntest.main.wc_author + "=rw",
+ "/A/D/H" : svntest.main.wc_author + "=",
+ "/A/D/H/psi" : svntest.main.wc_author + "=rw",})
+
+ expected_iprops = {
+ sbox.repo_url : {'RootProp' : 'Root-Prop-Val'},
+ sbox.repo_url + '/A/D': {'RandomProp1' : 'Random-Prop-Val-1'}}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/D/H/psi', expected_iprops, expected_explicit_props)
+
+ # Grant read access to everything except ^/A/D/H/psi. In this case we
+ # should get an authorization failed error. It doesn't matter that we can
+ # read the parents.
+ write_authz_file(sbox, {
+ "/" : svntest.main.wc_author + "=rw",
+ "/A/D/H/psi" : svntest.main.wc_author + "=",})
+ if sbox.repo_url.startswith("http"):
+ expected_err = ".*[Ff]orbidden.*"
+ else:
+ expected_err = ".*svn: E170001: Authorization failed.*"
+ svntest.actions.run_and_verify_svn(
+ None, None, expected_err, 'proplist', '-v',
+ '--show-inherited-props', sbox.repo_url + '/A/D/H/psi')
+
+########################################################################
+# Run the tests
+
+# list all tests here, starting with None:
+test_list = [ None,
+ iprops_authz,
+ ]
+
+serial_only = True
+
+if __name__ == '__main__':
+ svntest.main.run_tests(test_list)
+ # NOTREACHED
+
+### End of file.
diff --git a/subversion/tests/cmdline/iprop_tests.py b/subversion/tests/cmdline/iprop_tests.py
new file mode 100755
index 0000000..cc57e59
--- /dev/null
+++ b/subversion/tests/cmdline/iprop_tests.py
@@ -0,0 +1,1692 @@
+#!/usr/bin/env python
+#
+# iprop_tests.py: testing versioned inherited properties
+#
+# Subversion is a tool for revision control.
+# See http://subversion.apache.org for more information.
+#
+# ====================================================================
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+######################################################################
+
+# General modules
+import os
+
+# Our testing module
+import svntest
+
+# (abbreviation)
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
+Item = svntest.wc.StateItem
+
+######################################################################
+# Tests
+
+#----------------------------------------------------------------------
+# Working property inheritance, uniform revision WC.
+def iprops_basic_working(sbox):
+ "basic inherited working properties"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # Paths of note.
+ mu_path = sbox.ospath('A/mu')
+ D_path = sbox.ospath('A/D')
+ psi_path = sbox.ospath('A/D/H/psi')
+ iota_path = sbox.ospath('iota')
+ alpha_path = sbox.ospath('A/B/E/alpha')
+ G_path = sbox.ospath('A/D/G')
+ rho_path = sbox.ospath('A/D/G/rho')
+
+ sbox.simple_propset('RootProp1', 'Root-Prop-Val1', '.')
+ sbox.simple_propset('RootProp2', 'Root-Prop-Val2', '.')
+ sbox.simple_propset('DirProp2', 'Dir-Prop-Val-Root', '.')
+ sbox.simple_propset('FileProp1', 'File-Prop-Val1', 'iota')
+ sbox.simple_propset('FileProp2', 'File-Prop-Val2', 'A/D/H/psi')
+ sbox.simple_propset('DirProp1', 'Dir-Prop-Val1', 'A/D')
+ sbox.simple_propset('DirProp2', 'Dir-Prop-Val2', 'A/D')
+ sbox.simple_propset('DirProp3', 'Dir-Prop-Val3', 'A/D')
+ sbox.simple_propset('SomeProp', 'Some-Prop-Val1', 'A/D/G')
+ sbox.simple_propset('SomeProp', 'Some-Prop-Val2', 'A/D/G/rho')
+
+ ### Proplist Directory Targets
+
+ # Proplist directory target with only explicit props.
+ expected_iprops = {}
+ expected_explicit_props = {'DirProp2' : 'Dir-Prop-Val-Root',
+ 'RootProp1' : 'Root-Prop-Val1',
+ 'RootProp2' : 'Root-Prop-Val2'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ wc_dir, expected_iprops, expected_explicit_props)
+
+ # Proplist directory target with only inherited props.
+ expected_iprops = {wc_dir : {'DirProp2' : 'Dir-Prop-Val-Root',
+ 'RootProp1' : 'Root-Prop-Val1',
+ 'RootProp2' : 'Root-Prop-Val2'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ alpha_path, expected_iprops, expected_explicit_props)
+
+ # Proplist directory target with inherited and explicit props.
+ expected_iprops = {wc_dir : {'RootProp1' : 'Root-Prop-Val1',
+ 'RootProp2' : 'Root-Prop-Val2',
+ 'DirProp2' : 'Dir-Prop-Val-Root'}}
+ expected_explicit_props = {'DirProp1' : 'Dir-Prop-Val1',
+ 'DirProp2' : 'Dir-Prop-Val2',
+ 'DirProp3' : 'Dir-Prop-Val3'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props)
+
+ ### Propget Directory Targets
+
+ # Propget directory target with only explicit props.
+ expected_iprops = {}
+ expected_explicit_props = {'RootProp2' : 'Root-Prop-Val2'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ wc_dir, expected_iprops, expected_explicit_props, 'RootProp2')
+
+ # Propget directory target with only inherited props.
+ expected_iprops = {wc_dir : {'RootProp2': 'Root-Prop-Val2'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ alpha_path, expected_iprops, expected_explicit_props, 'RootProp2')
+
+ # Propget directory target with inherited and explicit props.
+ expected_iprops = {wc_dir : {'DirProp2' : 'Dir-Prop-Val-Root',}}
+ expected_explicit_props = {'DirProp2' : 'Dir-Prop-Val2'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, 'DirProp2')
+
+ ### Propget File Targets
+
+ # Propget file target with only explicit props.
+ expected_iprops = {}
+ expected_explicit_props = {'FileProp1' : 'File-Prop-Val1'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ iota_path, expected_iprops, expected_explicit_props, 'FileProp1')
+
+ # Propget file target with only inherited props.
+ expected_iprops = {wc_dir : {'RootProp2': 'Root-Prop-Val2'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ alpha_path, expected_iprops, expected_explicit_props, 'RootProp2')
+
+ # Propget file target with inherited and explicit props.
+ expected_iprops = {G_path : {'SomeProp' : 'Some-Prop-Val1',}}
+ expected_explicit_props = {'SomeProp' : 'Some-Prop-Val2'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ rho_path, expected_iprops, expected_explicit_props, 'SomeProp')
+
+ ### Proplist File Targets
+
+ # Proplist file target with only inherited props.
+ expected_iprops = {wc_dir : {'DirProp2' : 'Dir-Prop-Val-Root',
+ 'RootProp1' : 'Root-Prop-Val1',
+ 'RootProp2' : 'Root-Prop-Val2'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ mu_path, expected_iprops, expected_explicit_props)
+
+ # Proplist file target with inherited and explicit props.
+ expected_iprops = {wc_dir : {'RootProp1' : 'Root-Prop-Val1',
+ 'RootProp2' : 'Root-Prop-Val2',
+ 'DirProp2' : 'Dir-Prop-Val-Root'},
+ D_path : {'DirProp1' : 'Dir-Prop-Val1',
+ 'DirProp2' : 'Dir-Prop-Val2',
+ 'DirProp3' : 'Dir-Prop-Val3'}}
+ expected_explicit_props = {'FileProp2' : 'File-Prop-Val2'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ psi_path, expected_iprops, expected_explicit_props)
+
+ # Proplist file target with only explicit props.
+ svntest.actions.run_and_verify_svn(None, None, [], 'revert', wc_dir)
+ expected_iprops = {}
+ expected_explicit_props = {'FileProp1' : 'File-Prop-Val1'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ iota_path, expected_iprops, expected_explicit_props)
+
+#----------------------------------------------------------------------
+# Property inheritance with repository targets.
+def iprops_basic_repos(sbox):
+ "basic inherited repository properties"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # Paths of note.
+ D_path = sbox.ospath('A/D')
+ alpha_path = sbox.ospath('A/B/E/alpha')
+
+ sbox.simple_propset('FileProp1', 'File-Prop-Val1', 'iota')
+ sbox.simple_propset('FileProp2', 'File-Prop-Val2', 'A/D/H/psi')
+ sbox.simple_propset('SomeProp', 'Some-Prop-Val2', 'A/D/G/rho')
+ svntest.main.run_svn(None, 'commit', '-m', 'Add some file properties',
+ wc_dir)
+
+ svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+ sbox.simple_propset('RootProp1', 'Root-Prop-Val1', '.')
+ sbox.simple_propset('RootProp2', 'Root-Prop-Val2', '.')
+ sbox.simple_propset('DirProp2', 'Dir-Prop-Val-Root', '.')
+ sbox.simple_propset('DirProp1', 'Dir-Prop-Val1', 'A/D')
+ sbox.simple_propset('DirProp2', 'Dir-Prop-Val2', 'A/D')
+ sbox.simple_propset('DirProp3', 'Dir-Prop-Val3', 'A/D')
+ sbox.simple_propset('SomeProp', 'Some-Prop-Val1', 'A/D/G')
+ svntest.main.run_svn(None, 'commit', '-m', 'Add some dir properties',
+ wc_dir)
+
+ ### Proplist Directory Targets
+
+ # Proplist directory target with only explicit props.
+ expected_iprops = {}
+ expected_explicit_props = {'DirProp2' : 'Dir-Prop-Val-Root',
+ 'RootProp1' : 'Root-Prop-Val1',
+ 'RootProp2' : 'Root-Prop-Val2'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url, expected_iprops, expected_explicit_props)
+
+ # Proplist directory target with only inherited props.
+ expected_iprops = {sbox.repo_url : {'DirProp2' : 'Dir-Prop-Val-Root',
+ 'RootProp1' : 'Root-Prop-Val1',
+ 'RootProp2' : 'Root-Prop-Val2'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/B/E/alpha', expected_iprops, expected_explicit_props)
+
+ # Proplist directory target with inherited and explicit props.
+ expected_iprops = {sbox.repo_url : {'RootProp1' : 'Root-Prop-Val1',
+ 'RootProp2' : 'Root-Prop-Val2',
+ 'DirProp2' : 'Dir-Prop-Val-Root'}}
+ expected_explicit_props = {'DirProp1' : 'Dir-Prop-Val1',
+ 'DirProp2' : 'Dir-Prop-Val2',
+ 'DirProp3' : 'Dir-Prop-Val3'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props)
+
+ ### Propget Directory Targets
+
+ # Propget directory target with only explicit props.
+ expected_iprops = {}
+ expected_explicit_props = {'RootProp2' : 'Root-Prop-Val2'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url, expected_iprops, expected_explicit_props, 'RootProp2')
+
+ # Propget directory target with only inherited props.
+ expected_iprops = {sbox.repo_url : {'RootProp2': 'Root-Prop-Val2'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/B/E/alpha', expected_iprops, expected_explicit_props,
+ 'RootProp2')
+
+ # Propget directory target with inherited and explicit props.
+ expected_iprops = {sbox.repo_url : {'DirProp2' : 'Dir-Prop-Val-Root',}}
+ expected_explicit_props = {'DirProp2' : 'Dir-Prop-Val2'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props,
+ 'DirProp2')
+
+ ### Proplist File Targets
+
+ # Proplist file target with only explicit props.
+ expected_iprops = {}
+ expected_explicit_props = {'FileProp1' : 'File-Prop-Val1'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/iota', expected_iprops, expected_explicit_props,
+ 'FileProp1', 2)
+
+ # Proplist file target with only inherited props.
+ expected_iprops = {sbox.repo_url : {'RootProp1' : 'Root-Prop-Val1'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/mu', expected_iprops, expected_explicit_props,
+ 'RootProp1')
+
+ # Proplist file target with inherited and explicit props.
+ expected_iprops = {sbox.repo_url : {'RootProp1' : 'Root-Prop-Val1',
+ 'RootProp2' : 'Root-Prop-Val2',
+ 'DirProp2' : 'Dir-Prop-Val-Root'},
+ sbox.repo_url + '/A/D' : {'DirProp1' : 'Dir-Prop-Val1',
+ 'DirProp2' : 'Dir-Prop-Val2',
+ 'DirProp3' : 'Dir-Prop-Val3'}}
+ expected_explicit_props = {'FileProp2' : 'File-Prop-Val2'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/D/H/psi', expected_iprops, expected_explicit_props)
+
+ ### Propget File Targets
+
+ # Propget file target with only explicit props.
+ expected_iprops = {}
+ expected_explicit_props = {'FileProp1' : 'File-Prop-Val1'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/iota', expected_iprops, expected_explicit_props,
+ 'FileProp1', 2)
+
+ # Propget file target with only inherited props.
+ expected_iprops = {sbox.repo_url : {'RootProp2': 'Root-Prop-Val2'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/B/E/alpha', expected_iprops, expected_explicit_props,
+ 'RootProp2')
+
+ # Propget file target with inherited and explicit props.
+ expected_iprops = {sbox.repo_url + '/A/D/G' : {
+ 'SomeProp' : 'Some-Prop-Val1',}}
+ expected_explicit_props = {'SomeProp' : 'Some-Prop-Val2'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/D/G/rho', expected_iprops, expected_explicit_props,
+ 'SomeProp')
+
+#----------------------------------------------------------------------
+# Property inheritance in a WC with switched subtrees.
+def iprops_switched_subtrees(sbox):
+ "inherited properties in switched subtrees"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # Paths of note.
+ branch2_path = sbox.ospath('branch2')
+ branch2_B_path = sbox.ospath('branch2/B')
+ branch2_lambda_path = sbox.ospath('branch2/B/lambda')
+
+ # r2-3 - Create two branches
+ svntest.main.run_svn(None, 'copy', sbox.repo_url + '/A',
+ sbox.repo_url + '/branch1', '-m', 'Make branch1')
+
+ svntest.main.run_svn(None, 'copy', sbox.repo_url + '/A',
+ sbox.repo_url + '/branch2', '-m', 'Make branch2')
+
+ # Create a root property and two branch properties
+ svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+ sbox.simple_propset('Root-Prop-1', 'Root-Prop-Val1', '.')
+ sbox.simple_propset('Branch-Name', 'Feature #1', 'branch1')
+ sbox.simple_propset('Branch-Name', 'Feature #2', 'branch2')
+
+ # Switch a subtree of branch2 to branch1:
+ svntest.main.run_svn(None, 'switch', sbox.repo_url + '/branch1/B',
+ branch2_B_path)
+
+ # Check for inherited props on branch2/B/lambda. Since the prop changes
+ # made above have not been committed, there should be none.
+ expected_iprops = {}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ branch2_B_path, expected_iprops, expected_explicit_props)
+
+ # r4 - Commit the prop changes made above.
+ svntest.main.run_svn(None, 'commit', '-m', 'Add some dir properties',
+ wc_dir)
+
+ # Again check for inherited props on branch2/B/lambda. And again there
+ # should be none because branch2/B is switched to ^/branch1/B@3.
+ expected_iprops = {}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ branch2_lambda_path, expected_iprops, expected_explicit_props)
+
+ # Now update the WC, now branch2/B is switched to ^/branch1/B@4
+ # which does inherit properties from ^/branch1 and ^/. The inherited
+ # properties cache should be updated to reflect this when asking what
+ # properties branch2/B/lambda inherits.
+ svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+ expected_iprops = {
+ sbox.repo_url : {'Root-Prop-1' : 'Root-Prop-Val1'},
+ sbox.repo_url + '/branch1' : {'Branch-Name' : 'Feature #1'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ branch2_lambda_path, expected_iprops, expected_explicit_props)
+
+ # Now update the WC back to r3, where there are no properties. The
+ # inheritable properties cache for the WC-root at branch2/B should be
+ # cleared and no inheritable properties found for branch2/B/lambda.
+ svntest.actions.run_and_verify_svn(None, None, [], 'up', '-r3', wc_dir)
+ expected_iprops = {}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ branch2_lambda_path, expected_iprops, expected_explicit_props)
+ # Update back to HEAD=r4 before continuing.
+ svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+
+ # Now unswitch branch2/B and check branch2/B/lambda's inherited props.
+ # Now no iprop cache for branch2/B should exist and branch2/B/lambda
+ # should inherit from branch2 and '.'.
+ svntest.main.run_svn(None, 'switch', sbox.repo_url + '/branch2/B',
+ branch2_B_path)
+ svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+ expected_iprops = {
+ ### Working copy parents! ###
+ wc_dir : {'Root-Prop-1' : 'Root-Prop-Val1'},
+ branch2_path : {'Branch-Name' : 'Feature #2'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ branch2_lambda_path, expected_iprops, expected_explicit_props)
+
+ # Now switch the root of the WC to ^/branch2 and check the inherited
+ # properties on B/lambda. It should inherit the explicit property
+ # on the WC path '.' (i.e. ^/branch2) and the property on the root
+ # of the repos via the inherited props cache.
+ svntest.main.run_svn(None, 'switch', '--ignore-ancestry',
+ sbox.repo_url + '/branch2', wc_dir)
+ expected_iprops = {
+ ### Root if a repos parent ###
+ sbox.repo_url : {'Root-Prop-1' : 'Root-Prop-Val1'},
+ ### Branch root is a working copy parent ###
+ wc_dir : {'Branch-Name' : 'Feature #2'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('B/lambda'),
+ expected_iprops, expected_explicit_props)
+
+ # Check that switched files have properties cached too.
+ # Switch the root of the WC to ^/A, then switch mu to ^/branch1/mu.
+ svntest.main.run_svn(None, 'switch', sbox.repo_url + '/A', wc_dir)
+ svntest.main.run_svn(None, 'switch', sbox.repo_url + '/branch1/mu',
+ sbox.ospath('mu'))
+ expected_iprops = {
+ sbox.repo_url : {'Root-Prop-1' : 'Root-Prop-Val1'},
+ sbox.repo_url + '/branch1' : {'Branch-Name' : 'Feature #1'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('mu'),
+ expected_iprops, expected_explicit_props)
+
+#----------------------------------------------------------------------
+# Property inheritance with pegged wc and repos targets.
+def iprops_pegged_wc_targets(sbox):
+ "iprops of pegged wc targets at operative revs"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # Paths of note.
+ C_path = sbox.ospath('A/C')
+ D_path = sbox.ospath('A/D')
+ G_path = sbox.ospath('A/D/G')
+ alpha_path = sbox.ospath('A/B/E/alpha')
+ replaced_alpha_path = sbox.ospath('A/D/G/E/alpha')
+
+ # r2 - Set some root properties and a property on A/D, and make an edit
+ # to A/B/E/alpha.
+ sbox.simple_propset('RootProp1', 'Root-Prop-Val-1-set-in-r2', '.')
+ sbox.simple_propset('RootProp2', 'Root-Prop-Val-2-set-in-r2', '.')
+ sbox.simple_propset('D-Prop', 'D-Prop-Val-set-in-r2', 'A/D')
+ svntest.main.file_write(alpha_path, "Edit in r2.\n")
+ svntest.main.run_svn(None, 'commit', '-m', 'Add some properties',
+ wc_dir)
+
+ # r3 - Change all of the properties.
+ sbox.simple_propset('RootProp1', 'Root-Prop-Val-1-set-in-r3', '.')
+ sbox.simple_propset('RootProp2', 'Root-Prop-Val-2-set-in-r3', '.')
+ sbox.simple_propset('D-Prop', 'D-Prop-Val-set-in-r3', 'A/D')
+ svntest.main.run_svn(None, 'commit', '-m', 'Modify some properties',
+ wc_dir)
+
+ # Set some working properties.
+ sbox.simple_propset('RootProp1', 'Root-Prop-Val-1-WORKING', '.')
+ sbox.simple_propset('RootProp2', 'Root-Prop-Val-2-WORKING', '.')
+ sbox.simple_propset('D-Prop', 'D-Prop-Val-WORKING', 'A/D')
+
+ ### Peg Revision = HEAD
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | HEAD | unspecified
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, None, 'HEAD')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | HEAD | unspecified
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, 'RootProp1', 'HEAD')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | HEAD | revision=2
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r2'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r2'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, None, 'HEAD', '-r2')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | HEAD | revision=2
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, 'RootProp1', 'HEAD',
+ '-r2')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | HEAD | COMMITTED
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, None, 'HEAD',
+ '-rCOMMITTED')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | HEAD | COMMITTED
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, 'RootProp1', 'HEAD',
+ '-rCOMMITTED')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | HEAD | PREV
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r2'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r2'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, None, 'HEAD',
+ '-rPREV')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | HEAD | PREV
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, 'RootProp1', 'HEAD',
+ '-rPREV')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | HEAD | BASE
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, None, 'HEAD',
+ '-rBASE')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | HEAD | BASE
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, 'RootProp1', 'HEAD',
+ '-rBASE')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | HEAD | HEAD
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, None, 'HEAD',
+ '-rHEAD')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | HEAD | HEAD
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, 'RootProp1', 'HEAD',
+ '-rHEAD')
+
+ ### Peg Revision = Unspecified
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | unspecified | unspecified
+ expected_iprops = {
+ wc_dir : {'RootProp1' : 'Root-Prop-Val-1-WORKING',
+ 'RootProp2' : 'Root-Prop-Val-2-WORKING'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-WORKING'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props)
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | unspecified | unspecified
+ expected_iprops = {
+ wc_dir : {'RootProp1' : 'Root-Prop-Val-1-WORKING'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, 'RootProp1')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | unspecified | revision=2
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r2'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r2'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, None, None, '-r2')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | unspecified | revision=2
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, 'RootProp1', None,
+ '-r2')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | unspecified | revision=COMMITTED (i.e. r3)
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, None, None,
+ '-rCOMMITTED')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | unspecified | COMMITTED
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, 'RootProp1', None,
+ '-rCOMMITTED')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | unspecified | revision=PREV (i.e. r2)
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r2'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r2'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, None, None, '-rPREV')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | unspecified | revision=2
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, 'RootProp1', None,
+ '-rPREV')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | unspecified | revision=BASE (i.e. r3)
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, None, None, '-rBASE')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | unspecified | revision=BASE (i.e. r3)
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, 'RootProp1', None,
+ '-rBASE')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | unspecified | revision=HEAD (i.e. r3)
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, None, None, '-rHEAD')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | unspecified | revision=HEAD (i.e. r3)
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, 'RootProp1', None,
+ '-rHEAD')
+
+ ### Peg Revision = rN
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | revision=1 | unspecified
+ expected_iprops = {}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, None, '1')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | revision=1 | unspecified
+ expected_iprops = {}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, 'RootProp1', '1')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | revision=1 | revision=2
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r2'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r2'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, None, '1', '-r2')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | revision=1 | revision=2
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, 'RootProp1', '1', '-r2')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | revision=1 | COMMITTED
+ # The last committed revision for A/D is r3.
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, None, '1',
+ '-rCOMMITTED')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | revision=1 | COMMITTED
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, 'RootProp1', '1',
+ '-rCOMMITTED')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | revision=3 | PREV
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r2'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r2'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, None, '3', '-rPREV')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | revision=3 | PREV
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, 'RootProp1', '3',
+ '-rPREV')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | revision=1 | BASE
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, None, '1', '-rBASE')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | revision=1 | BASE
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, 'RootProp1', '1',
+ '-rBASE')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | revision=2 | HEAD
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, None, '2', '-rHEAD')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | revision=1 | HEAD
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, 'RootProp1', '1',
+ '-rHEAD')
+
+ ### Peg Revision = PREV
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | PREV | unspecified
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r2'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r2'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, None, 'PREV')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | PREV | unspecified
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, 'RootProp1', 'PREV')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | PREV | revision=3
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, None, 'PREV', '-r3')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | PREV | revision=3
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, 'RootProp1', 'PREV',
+ '-r3')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | PREV | COMMITTED
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, None, 'PREV',
+ '-rCOMMITTED')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | PREV | COMMITTED
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, 'RootProp1', 'PREV',
+ '-rCOMMITTED')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | PREV | PREV
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r2'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r2'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, None, 'PREV', '-rPREV')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | PREV | PREV
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, 'RootProp1', 'PREV',
+ '-rPREV')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | PREV | BASE
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, None, 'PREV', '-rBASE')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | PREV | BASE
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, 'RootProp1', 'PREV',
+ '-rBASE')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | PREV | HEAD
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, None, 'PREV', '-rHEAD')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | PREV | HEAD
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ D_path, expected_iprops, expected_explicit_props, 'RootProp1', 'PREV',
+ '-rHEAD')
+
+ ### Peg Revision = BASE
+
+ # Replace A/D/G with a copy of ^/A/B.
+ # Check inherited props on base of A/D/G/E/alpha.
+ # Inherited props should always come from the repository parent of
+ # ^/A/B/E/alpha and so should not include the property (working or
+ # otherwise) on A/D.
+ svntest.actions.run_and_verify_svn(None, None, [], 'delete', G_path)
+ svntest.actions.run_and_verify_svn(None, None, [], 'copy',
+ sbox.repo_url + '/A/B', G_path)
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | BASE | unspecified
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props, None,
+ 'BASE')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | BASE | unspecified
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props,
+ 'RootProp1', 'BASE')
+
+# Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | BASE | revision=2
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r2'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props, None,
+ 'BASE', '-r2')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | BASE | revision=2
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props,
+ 'RootProp1', 'BASE', '-r2')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | BASE | COMMITTED
+ # The most recent change on the copy source, ^/A/B/E/alpha is r2
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r2'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props, None,
+ 'BASE', '-rCOMMITTED')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | BASE | revision=2
+ # The most recent change on the copy source, ^/A/B/E/alpha is r2
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props,
+ 'RootProp1', 'BASE', '-rCOMMITTED')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | BASE | COMMITTED
+ # The most recent change on the copy source, ^/A/B/E/alpha is r2
+ # so PREV=r1, but there are no properties at all in r1.
+ expected_iprops = {}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props, None,
+ 'BASE', '-rPREV')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | BASE | COMMITTED
+ # The most recent change on the copy source, ^/A/B/E/alpha is r2
+ # so PREV=r1, but there are no properties at all in r1.
+ expected_iprops = {}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props,
+ 'RootProp1', 'BASE', '-rPREV')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | BASE | BASE
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props, None,
+ 'BASE', '-rBASE')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | BASE | BASE
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props,
+ 'RootProp1', 'BASE', '-rBASE')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | BASE | HEAD
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props, None,
+ 'BASE', '-rHEAD')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | BASE | HEAD
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props,
+ 'RootProp1', 'BASE', '-rHEAD')
+
+ ### Peg Revision = COMMITTED
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | COMMITTED | unspecified
+ # The most recent change on the copy source, ^/A/B/E/alpha is r2
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r2'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props, None,
+ 'COMMITTED')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | COMMITTED | unspecified
+ # The most recent change on the copy source, ^/A/B/E/alpha is r2
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props,
+ 'RootProp1', 'COMMITTED')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | COMMITTED | revision=3
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props, None,
+ 'COMMITTED', '-r3')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | COMMITTED | revision=3
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props,
+ 'RootProp1', 'COMMITTED', '-r3')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | COMMITTED | COMMITTED
+ # The most recent change on the copy source, ^/A/B/E/alpha is r2
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r2'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props, None,
+ 'COMMITTED', '-rCOMMITTED')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | COMMITTED | COMMITTED
+ # The most recent change on the copy source, ^/A/B/E/alpha is r2
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props,
+ 'RootProp1', 'COMMITTED', '-rCOMMITTED')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | COMMITTED | PREV
+ # The most recent change on the copy source, ^/A/B/E/alpha is r2
+ # so PREV=r1, but there are no properties at all in r1.
+ expected_iprops = {}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props, None,
+ 'COMMITTED', '-rPREV')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | COMMITTED | PREV
+ # The most recent change on the copy source, ^/A/B/E/alpha is r2
+ # so PREV=r1, but there are no properties at all in r1.
+ expected_iprops = {}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props,
+ 'RootProp1', 'COMMITTED', '-rPREV')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | COMMITTED | BASE
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props, None,
+ 'COMMITTED', '-rBASE')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | COMMITTED | BASE
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props,
+ 'RootProp1', 'COMMITTED', '-rBASE')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | WC | COMMITTED | HEAD
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props, None,
+ 'COMMITTED', '-rHEAD')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | WC | COMMITTED | HEAD
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props,
+ 'RootProp1', 'COMMITTED', '-rHEAD')
+
+ # Revert the replacement with history of A/D/G and once again
+ # replace A/D/G, but this time without history (using and export
+ # of A/B.
+ svntest.actions.run_and_verify_svn(None, None, [], 'revert', G_path, '-R')
+ svntest.actions.run_and_verify_svn(None, None, [], 'delete', G_path)
+ svntest.actions.run_and_verify_svn(None, None, [], 'export',
+ sbox.repo_url + '/A/B', G_path)
+ svntest.actions.run_and_verify_svn(None, None, [], 'add', G_path)
+ # Set a working prop on a file within the replaced tree, we should *never*
+ # see this property if asking about the
+ # file@[HEAD | PREV | COMMITTED | BASE]
+ sbox.simple_propset('FileProp', 'File-Prop-WORKING-NO-BASE',
+ 'A/D/G/E/alpha')
+
+ # There is no HEAD, PREV, COMMITTED, or BASE revs for A/D/G/E/alpha in this
+ # case # so be sure requests for such error out or return nothing as per the
+ # existing behavior for proplist and propget sans the --show-inherited-props
+ # option.
+ #
+ # proplist/propget WC-PATH@HEAD
+ svntest.actions.run_and_verify_svn(
+ None, None,
+ ".*Unknown node kind for '" + sbox.repo_url + "/A/D/G/E/alpha'\n",
+ 'pl', '-v', '--show-inherited-props', replaced_alpha_path + '@HEAD')
+ svntest.actions.run_and_verify_svn(
+ None, None,
+ ".*'" + sbox.repo_url + "/A/D/G/E/alpha' does not exist in revision 3\n",
+ 'pg', 'RootProp1', '-v', '--show-inherited-props',
+ replaced_alpha_path + '@HEAD')
+ # proplist/propget WC-PATH@PREV
+ svntest.actions.run_and_verify_svn(
+ None, None,
+ ".*Path '.*alpha' has no committed revision\n",
+ 'pl', '-v', '--show-inherited-props', replaced_alpha_path + '@PREV')
+ svntest.actions.run_and_verify_svn(
+ None, None,
+ ".*Path '.*alpha' has no committed revision\n",
+ 'pg', 'RootProp1', '-v', '--show-inherited-props', replaced_alpha_path + '@PREV')
+ # proplist/propget WC-PATH@COMMITTED
+ expected_iprops = {}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props, None,
+ 'COMMITTED')
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props,
+ 'RootProp1', 'COMMITTED')
+ # proplist/propget WC-PATH@BASE
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props, None,
+ 'BASE')
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ replaced_alpha_path, expected_iprops, expected_explicit_props,
+ 'RootProp1', 'BASE')
+
+#----------------------------------------------------------------------
+# Property inheritance with pegged repos targets at operative revs.
+def iprops_pegged_url_targets(sbox):
+ "iprops of pegged url targets at operative revs"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # r2 - Set some root properties and some properties on A/D.
+ sbox.simple_propset('RootProp1', 'Root-Prop-Val-1-set-in-r2', '.')
+ sbox.simple_propset('RootProp2', 'Root-Prop-Val-2-set-in-r2', '.')
+ sbox.simple_propset('DirProp', 'Dir-Prop-Val-set-in-r2', '.')
+ sbox.simple_propset('DirProp', 'Dir-Prop-Val-set-in-r2-on-D', 'A/D')
+ sbox.simple_propset('D-Prop', 'D-Prop-Val-set-in-r2', 'A/D')
+ svntest.main.run_svn(None, 'commit', '-m', 'Add some properties',
+ wc_dir)
+
+ # r3 - Make another change to all of the properties set in r2.
+ sbox.simple_propset('RootProp1', 'Root-Prop-Val-1-set-in-r3', '.')
+ sbox.simple_propset('RootProp2', 'Root-Prop-Val-2-set-in-r3', '.')
+ sbox.simple_propset('DirProp', 'Dir-Prop-Val-set-in-r3', '.')
+ sbox.simple_propset('DirProp', 'Dir-Prop-Val-set-in-r3-on-D', 'A/D')
+ sbox.simple_propset('D-Prop', 'D-Prop-Val-set-in-r3', 'A/D')
+ svntest.main.run_svn(None, 'commit', '-m', 'Modify some properties',
+ wc_dir)
+
+ ### Peg Revision = Unspecified
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | URL | unspecified | unspecified
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r3',
+ 'DirProp' : 'Dir-Prop-Val-set-in-r3'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3',
+ 'DirProp' : 'Dir-Prop-Val-set-in-r3-on-D'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props)
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | URL | unspecified | unspecified
+ expected_iprops = {
+ sbox.repo_url : {'DirProp' : 'Dir-Prop-Val-set-in-r3'}}
+ expected_explicit_props = {'DirProp' : 'Dir-Prop-Val-set-in-r3-on-D'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props,
+ 'DirProp')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | URL | unspecified | revision=2
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r2',
+ 'DirProp' : 'Dir-Prop-Val-set-in-r2'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r2',
+ 'DirProp' : 'Dir-Prop-Val-set-in-r2-on-D'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props, None,
+ None, '-r2')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | URL | unspecified | revision=2
+ expected_iprops = {
+ sbox.repo_url : {'DirProp' : 'Dir-Prop-Val-set-in-r2'}}
+ expected_explicit_props = {'DirProp' : 'Dir-Prop-Val-set-in-r2-on-D'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props,
+ 'DirProp', None, '-r2')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | URL | unspecified | HEAD
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r3',
+ 'DirProp' : 'Dir-Prop-Val-set-in-r3'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3',
+ 'DirProp' : 'Dir-Prop-Val-set-in-r3-on-D'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props,
+ None, None, '-rHEAD')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | URL | unspecified | HEAD
+ expected_iprops = {
+ sbox.repo_url : {'DirProp' : 'Dir-Prop-Val-set-in-r3'}}
+ expected_explicit_props = {'DirProp' : 'Dir-Prop-Val-set-in-r3-on-D'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props,
+ 'DirProp', None, '-rHEAD')
+
+ ### Peg Revision = rN
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | URL | revision=2 | unspecified
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r2',
+ 'DirProp' : 'Dir-Prop-Val-set-in-r2'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r2',
+ 'DirProp' : 'Dir-Prop-Val-set-in-r2-on-D'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props,
+ None, '2')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | URL | revision=2 | unspecified
+ expected_iprops = {
+ sbox.repo_url : {'DirProp' : 'Dir-Prop-Val-set-in-r2'}}
+ expected_explicit_props = {'DirProp' : 'Dir-Prop-Val-set-in-r2-on-D'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props,
+ 'DirProp', '2')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | URL | revision=2 | revision=2
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r2',
+ 'DirProp' : 'Dir-Prop-Val-set-in-r2'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r2',
+ 'DirProp' : 'Dir-Prop-Val-set-in-r2-on-D'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props, None,
+ '2', '-r2')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | URL | revision=2 | revision=2
+ expected_iprops = {
+ sbox.repo_url : {'DirProp' : 'Dir-Prop-Val-set-in-r2'}}
+ expected_explicit_props = {'DirProp' : 'Dir-Prop-Val-set-in-r2-on-D'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props,
+ 'DirProp', '2', '-r2')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | URL | revision=2 | HEAD
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r3',
+ 'DirProp' : 'Dir-Prop-Val-set-in-r3'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3',
+ 'DirProp' : 'Dir-Prop-Val-set-in-r3-on-D'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props,
+ None, '2', '-rHEAD')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | URL | revision=2 | HEAD
+ expected_iprops = {
+ sbox.repo_url : {'DirProp' : 'Dir-Prop-Val-set-in-r3'}}
+ expected_explicit_props = {'DirProp' : 'Dir-Prop-Val-set-in-r3-on-D'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props,
+ 'DirProp', '2', '-rHEAD')
+
+ ### Peg Revision = HEAD
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | URL | HEAD | unspecified
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r3',
+ 'DirProp' : 'Dir-Prop-Val-set-in-r3'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3',
+ 'DirProp' : 'Dir-Prop-Val-set-in-r3-on-D'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props,
+ None, 'HEAD')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | URL | HEAD | unspecified
+ expected_iprops = {
+ sbox.repo_url : {'DirProp' : 'Dir-Prop-Val-set-in-r3'}}
+ expected_explicit_props = {'DirProp' : 'Dir-Prop-Val-set-in-r3-on-D'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props,
+ 'DirProp', 'HEAD')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | URL | HEAD | revision=2
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r2',
+ 'DirProp' : 'Dir-Prop-Val-set-in-r2'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r2',
+ 'DirProp' : 'Dir-Prop-Val-set-in-r2-on-D'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props, None,
+ 'HEAD', '-r2')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | URL | HEAD | revision=2
+ expected_iprops = {
+ sbox.repo_url : {'DirProp' : 'Dir-Prop-Val-set-in-r2'}}
+ expected_explicit_props = {'DirProp' : 'Dir-Prop-Val-set-in-r2-on-D'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props,
+ 'DirProp', 'HEAD', '-r2')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # proplist | URL | HEAD | HEAD
+ expected_iprops = {
+ sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3',
+ 'RootProp2' : 'Root-Prop-Val-2-set-in-r3',
+ 'DirProp' : 'Dir-Prop-Val-set-in-r3'}}
+ expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3',
+ 'DirProp' : 'Dir-Prop-Val-set-in-r3-on-D'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props,
+ None, 'HEAD', '-rHEAD')
+
+ # Operation | Target | Peg Revision | Operative Revision
+ # propget | URL | HEAD | HEAD
+ expected_iprops = {
+ sbox.repo_url : {'DirProp' : 'Dir-Prop-Val-set-in-r3'}}
+ expected_explicit_props = {'DirProp' : 'Dir-Prop-Val-set-in-r3-on-D'}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props,
+ 'DirProp', 'HEAD', '-rHEAD')
+
+#----------------------------------------------------------------------
+# Inherited property caching during shallow updates.
+def iprops_shallow_operative_depths(sbox):
+ "iprop caching works with shallow updates"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # r2 - Create a branch..
+ svntest.main.run_svn(None, 'copy', sbox.repo_url + '/A',
+ sbox.repo_url + '/branch1', '-m', 'Make branch1')
+ svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+
+ # r3 - Create a root property and some branch properties
+ sbox.simple_propset('Root-Prop-1', 'Root-Prop-Val1', '.')
+ sbox.simple_propset('Branch-Name', 'Feature #1', 'branch1')
+ sbox.simple_propset('Branch-Name', 'Trunk', 'A')
+ svntest.main.run_svn(None, 'commit', '-m', 'Add some properties',
+ wc_dir)
+
+ # r4 - Change the root and a branch properties added in r3.
+ sbox.simple_propset('Root-Prop-1', 'Root-Prop-Val1.1', '.')
+ sbox.simple_propset('Branch-Name', 'Feature No. 1', 'branch1')
+ sbox.simple_propset('Branch-Name', 'Trunk Branch', 'A')
+ svntest.main.run_svn(None, 'commit', '-m', 'Change some properties',
+ wc_dir)
+
+ svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+
+ # Switch the WC to ^/branch1:
+ svntest.main.run_svn(None, 'switch', '--ignore-ancestry',
+ sbox.repo_url + '/branch1', wc_dir)
+ # Switch the B to ^/A/B:
+ svntest.main.run_svn(None, 'switch', sbox.repo_url + '/A/B',
+ sbox.ospath('B'))
+ # Switch the mu to ^/A/mu:
+ svntest.main.run_svn(None, 'switch', sbox.repo_url + '/A/mu',
+ sbox.ospath('mu'))
+ # Update the whole WC back to r3.
+ svntest.actions.run_and_verify_svn(None, None, [], 'up', '-r3', wc_dir)
+
+ # Check the inherited props on B/E within the switched subtree
+ # and the switched file mu. The props should all be inherited
+ # from repository locations and reflect the values at r3.
+ expected_iprops = {
+ sbox.repo_url : {'Root-Prop-1' : 'Root-Prop-Val1'},
+ sbox.repo_url + '/A' : {'Branch-Name' : 'Trunk'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('B/E'), expected_iprops, expected_explicit_props)
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('mu'), expected_iprops, expected_explicit_props)
+
+ # Update only the root of the WC (to HEAD=r4) using a shallow update.
+ # Again check the inherited props on B/E. This shouldn't affect the
+ # switched subtree at all, the props it inherits should still reflect
+ # the values at r3.
+ svntest.actions.run_and_verify_svn(None, None, [], 'up',
+ '--depth=empty', wc_dir)
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('B/E'), expected_iprops, expected_explicit_props)
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('mu'), expected_iprops, expected_explicit_props)
+
+ # Update the root of the WC (to HEAD=r4) at depth=files. B/E should
+ # still inherit vales from r3, but mu should now inherit props from r4.
+ svntest.actions.run_and_verify_svn(None, None, [], 'up',
+ '--depth=files', wc_dir)
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('B/E'), expected_iprops, expected_explicit_props)
+ expected_iprops = {
+ sbox.repo_url : {'Root-Prop-1' : 'Root-Prop-Val1.1'},
+ sbox.repo_url + '/A' : {'Branch-Name' : 'Trunk Branch'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('mu'), expected_iprops, expected_explicit_props)
+
+ # Update the root of the WC (to HEAD=r4) at depth=immediates. Now both B/E
+ # and mu inherit props from r4.
+ svntest.actions.run_and_verify_svn(None, None, [], 'up',
+ '--depth=immediates', wc_dir)
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('B/E'), expected_iprops, expected_explicit_props)
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('mu'), expected_iprops, expected_explicit_props)
+
+#----------------------------------------------------------------------
+# Inherited property caching by directory externals.
+def iprops_with_directory_externals(sbox):
+ "iprop caching works with directory externals"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # Create a second repository with the original greek tree
+ repo_dir = sbox.repo_dir
+ other_repo_dir, other_repo_url = sbox.add_repo_path("other")
+ other_wc_dir = sbox.add_wc_path("other")
+ svntest.main.copy_repos(repo_dir, other_repo_dir, 1, 1)
+ svntest.actions.run_and_verify_svn(None, None, [], 'co', other_repo_url,
+ other_wc_dir)
+
+ # Create a root property on the first WC.
+ sbox.simple_propset('Prime-Root-Prop', 'Root-Prop-Val1', '.')
+ svntest.main.run_svn(None, 'commit', '-m', 'Add a root property',
+ wc_dir)
+
+ # Create a root property on the "other" WC.
+ svntest.actions.run_and_verify_svn(None, None, [], 'ps', 'Other-Root-Prop',
+ 'Root-Prop-Val-from-other', other_wc_dir)
+ svntest.main.run_svn(None, 'commit', '-m', 'Add a root property',
+ other_wc_dir)
+
+ # Switch the root of the first WC to a repository non-root, it will
+ # now have cached iprops from the first repos.
+ svntest.main.run_svn(None, 'switch', sbox.repo_url + '/A/B',
+ wc_dir, '--ignore-ancestry')
+
+ # Create an external in the first WC that points to a location in the
+ # "other" WC.
+ sbox.simple_propset('svn:externals',
+ other_repo_url + '/A/D/G X-Other-Repos',
+ 'E')
+ svntest.actions.run_and_verify_svn(None, None, [], 'ci',
+ '-m', 'Add external point to other WC',
+ wc_dir)
+ svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+
+ # Create an external in the first WC that points to a location in the
+ # same WC.
+ sbox.simple_propset('svn:externals',
+ sbox.repo_url + '/A/D/H X-Same-Repos',
+ 'F')
+ svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m',
+ 'Add external pointing to same repos',
+ wc_dir)
+ svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+
+ # Check the properties inherited by the external from the same repository.
+ # It should inherit the props from the root of the same repository.
+ expected_iprops = {
+ sbox.repo_url : {'Prime-Root-Prop' : 'Root-Prop-Val1'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('F/X-Same-Repos'), expected_iprops, expected_explicit_props)
+
+ # Check the properties inherited by the external from the "other"
+ # repository. It should inherit from the root of the other repos,
+ # despite being located in the first repository's WC.
+ expected_iprops = {
+ other_repo_url : {'Other-Root-Prop' : 'Root-Prop-Val-from-other'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('E/X-Other-Repos'), expected_iprops, expected_explicit_props)
+
+#----------------------------------------------------------------------
+# Inherited property caching by file externals.
+def iprops_with_file_externals(sbox):
+ "iprop caching works with file externals"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # Create a root property.
+ sbox.simple_propset('Prime-Root-Prop', 'Root-Prop-Val1', '.')
+ svntest.main.run_svn(None, 'commit', '-m', 'Add a root property',
+ wc_dir)
+
+ # Create a "branch" property on 'A/D'.
+ sbox.simple_propset('Prime-Branch-Prop', 'Branch-Prop-Val1', 'A/D')
+ svntest.main.run_svn(None, 'commit', '-m', 'Add a branch property',
+ wc_dir)
+
+ # Create two file externals, one pegged to a fixed revision.
+ sbox.simple_propset('svn:externals',
+ sbox.repo_url + '/A/D/H/psi file-external',
+ 'A/B/E')
+ sbox.simple_propset('svn:externals',
+ sbox.repo_url + '/A/D/H/psi@4 file-external-pegged',
+ 'A/B/F')
+ svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m',
+ 'Add a file external', wc_dir)
+ svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+
+ # Check the properties inherited by the external files. Both should
+ # inherit the properties from ^/ and ^/A/D.
+ expected_iprops = {
+ sbox.repo_url : {'Prime-Root-Prop' : 'Root-Prop-Val1'},
+ sbox.repo_url + '/A/D' : {'Prime-Branch-Prop' : 'Branch-Prop-Val1'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('A/B/E/file-external'), expected_iprops,
+ expected_explicit_props)
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('A/B/F/file-external-pegged'), expected_iprops,
+ expected_explicit_props)
+
+ # Modify the "branch" property on 'A/D'.
+ sbox.simple_propset('Prime-Branch-Prop', 'Branch-Prop-Val2', 'A/D')
+ svntest.main.run_svn(None, 'commit', '-m', 'Add a branch property',
+ wc_dir)
+
+ # There should be no change in the external file's
+ # inherited properties until...
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('A/B/E/file-external'), expected_iprops,
+ expected_explicit_props)
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('A/B/F/file-external-pegged'), expected_iprops,
+ expected_explicit_props)
+
+ # ...We update the external:
+ svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+ # The pegged file external's iprops should remain unchanged.
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('A/B/F/file-external-pegged'), expected_iprops,
+ expected_explicit_props)
+ # But the other's should be updated.
+ expected_iprops = {
+ sbox.repo_url : {'Prime-Root-Prop' : 'Root-Prop-Val1'},
+ sbox.repo_url + '/A/D' : {'Prime-Branch-Prop' : 'Branch-Prop-Val2'}}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('A/B/E/file-external'), expected_iprops,
+ expected_explicit_props)
+
+def iprops_survive_commit(sbox):
+ "verify that iprops survive a commit"
+
+ sbox.build()
+ sbox.simple_propset('key', 'D', 'A/B',)
+ sbox.simple_commit()
+
+ svntest.main.run_svn(None, 'switch', sbox.repo_url + '/A/B/E',
+ sbox.ospath('A/D'), '--ignore-ancestry')
+ svntest.main.run_svn(None, 'switch', sbox.repo_url + '/A/B/F',
+ sbox.ospath('iota'), '--ignore-ancestry')
+ expected_iprops = {
+ sbox.repo_url + '/A/B' : {'key' : 'D'},
+ }
+
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(sbox.ospath('A/D'),
+ expected_iprops,
+ expected_explicit_props)
+ svntest.actions.run_and_verify_inherited_prop_xml(sbox.ospath('iota'),
+ expected_iprops,
+ expected_explicit_props)
+
+ sbox.simple_propset('new', 'V', 'A/D', 'iota')
+ sbox.simple_commit()
+
+ expected_explicit_props = {'new': 'V'}
+ svntest.actions.run_and_verify_inherited_prop_xml(sbox.ospath('A/D'),
+ expected_iprops,
+ expected_explicit_props)
+ svntest.actions.run_and_verify_inherited_prop_xml(sbox.ospath('iota'),
+ expected_iprops,
+ expected_explicit_props)
+
+########################################################################
+# Run the tests
+
+# list all tests here, starting with None:
+test_list = [ None,
+ iprops_basic_working,
+ iprops_basic_repos,
+ iprops_switched_subtrees,
+ iprops_pegged_wc_targets,
+ iprops_pegged_url_targets,
+ iprops_shallow_operative_depths,
+ iprops_with_directory_externals,
+ iprops_with_file_externals,
+ iprops_survive_commit,
+ ]
+
+if __name__ == '__main__':
+ svntest.main.run_tests(test_list)
+ # NOTREACHED
+
+### End of file.
diff --git a/subversion/tests/cmdline/utf8_tests.py b/subversion/tests/cmdline/legacy/utf8_tests.py
index 9b903a8..9b903a8 100755
--- a/subversion/tests/cmdline/utf8_tests.py
+++ b/subversion/tests/cmdline/legacy/utf8_tests.py
diff --git a/subversion/tests/cmdline/lock_tests.py b/subversion/tests/cmdline/lock_tests.py
index 860333c..aaca991 100755
--- a/subversion/tests/cmdline/lock_tests.py
+++ b/subversion/tests/cmdline/lock_tests.py
@@ -26,7 +26,9 @@
######################################################################
# General modules
-import re, os, stat
+import re, os, stat, logging
+
+logger = logging.getLogger()
# Our testing module
import svntest
@@ -79,9 +81,8 @@ def lock_file(sbox):
svntest.actions.duplicate_dir(wc_dir, wc_b)
# lock a file as wc_author
- fname = 'iota'
- file_path = os.path.join(sbox.wc_dir, fname)
- file_path_b = os.path.join(wc_b, fname)
+ file_path = sbox.ospath('iota')
+ file_path_b = sbox.ospath('iota', wc_dir=wc_b)
svntest.main.file_append(file_path, "This represents a binary file\n")
svntest.main.run_svn(None, 'commit',
@@ -133,45 +134,42 @@ def commit_file_keep_lock(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- fname = 'A/mu'
- file_path = os.path.join(sbox.wc_dir, fname)
-
- # lock fname as wc_author
+ # lock 'A/mu' as wc_author
svntest.actions.run_and_verify_svn(None, ".*locked by user", [], 'lock',
- '-m', 'some lock comment', file_path)
+ '-m', 'some lock comment',
+ sbox.ospath('A/mu'))
# make a change and commit it, holding lock
- svntest.main.file_append(file_path, "Tweak!\n")
+ sbox.simple_append('A/mu', 'Tweak!\n')
svntest.main.run_svn(None, 'commit', '-m', '', '--no-unlock',
- file_path)
+ sbox.ospath('A/mu'))
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
- expected_status.tweak(fname, wc_rev=2)
- expected_status.tweak(fname, writelocked='K')
+ expected_status.tweak('A/mu', wc_rev=2, writelocked='K')
# Make sure the file is still locked
svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
def commit_file_unlock(sbox):
"commit a file and release lock"
sbox.build()
wc_dir = sbox.wc_dir
- fname = 'A/mu'
- file_path = os.path.join(sbox.wc_dir, fname)
-
- # lock fname as wc_author
+ # lock A/mu and iota as wc_author
svntest.actions.run_and_verify_svn(None, ".*locked by user", [], 'lock',
- '-m', 'some lock comment', file_path)
+ '-m', 'some lock comment',
+ sbox.ospath('A/mu'),
+ sbox.ospath('iota'))
# make a change and commit it, allowing lock to be released
- svntest.main.file_append(file_path, "Tweak!\n")
- svntest.main.run_svn(None, 'commit', '-m', '',
- file_path)
+ sbox.simple_append('A/mu', 'Tweak!\n')
+ sbox.simple_commit()
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
- expected_status.tweak(fname, wc_rev=2)
+ expected_status.tweak('A/mu', wc_rev=2)
+ expected_status.tweak('iota', wc_rev=2)
# Make sure the file is unlocked
svntest.actions.run_and_verify_status(wc_dir, expected_status)
@@ -183,20 +181,17 @@ def commit_propchange(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- fname = 'A/mu'
- file_path = os.path.join(sbox.wc_dir, fname)
-
- # lock fname as wc_author
+ # lock A/mu as wc_author
svntest.actions.run_and_verify_svn(None, ".*locked by user", [], 'lock',
- '-m', 'some lock comment', file_path)
+ '-m', 'some lock comment',
+ sbox.ospath('A/mu'))
# make a property change and commit it, allowing lock to be released
- svntest.main.run_svn(None, 'propset', 'blue', 'azul', file_path)
- svntest.main.run_svn(None, 'commit',
- '-m', '', file_path)
+ sbox.simple_propset('blue', 'azul', 'A/mu')
+ sbox.simple_commit('A/mu')
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
- expected_status.tweak(fname, wc_rev=2)
+ expected_status.tweak('A/mu', wc_rev=2)
# Make sure the file is unlocked
svntest.actions.run_and_verify_status(wc_dir, expected_status)
@@ -222,9 +217,8 @@ def break_lock(sbox):
svntest.actions.duplicate_dir(wc_dir, wc_b)
# lock a file as wc_author
- fname = 'iota'
- file_path = os.path.join(sbox.wc_dir, fname)
- file_path_b = os.path.join(wc_b, fname)
+ file_path = sbox.ospath('iota')
+ file_path_b = sbox.ospath('iota', wc_dir=wc_b)
svntest.actions.run_and_verify_svn(None, ".*locked by user", [], 'lock',
'-m', '', file_path)
@@ -265,9 +259,8 @@ def steal_lock(sbox):
svntest.actions.duplicate_dir(wc_dir, wc_b)
# lock a file as wc_author
- fname = 'iota'
- file_path = os.path.join(sbox.wc_dir, fname)
- file_path_b = os.path.join(wc_b, fname)
+ file_path = sbox.ospath('iota')
+ file_path_b = sbox.ospath('iota', wc_dir=wc_b)
svntest.actions.run_and_verify_svn(None, ".*locked by user", [], 'lock',
'-m', '', file_path)
@@ -295,14 +288,9 @@ def examine_lock(sbox):
"examine the fields of a lockfile for correctness"
sbox.build()
- wc_dir = sbox.wc_dir
-
- fname = 'iota'
- comment = 'This is a lock test.'
- file_path = os.path.join(sbox.wc_dir, fname)
# lock a file as wc_author
- svntest.actions.run_and_validate_lock(file_path,
+ svntest.actions.run_and_validate_lock(sbox.ospath('iota'),
svntest.main.wc_author)
#----------------------------------------------------------------------
@@ -315,21 +303,17 @@ def handle_defunct_lock(sbox):
sbox.build()
wc_dir = sbox.wc_dir
-
- fname = 'iota'
- file_path = os.path.join(sbox.wc_dir, fname)
-
# set up our expected status
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
# lock the file
svntest.actions.run_and_verify_svn(None, ".*locked by user", [], 'lock',
- '-m', '', file_path)
+ '-m', '', sbox.ospath('iota'))
# Make a second copy of the working copy
wc_b = sbox.add_wc_path('_b')
svntest.actions.duplicate_dir(wc_dir, wc_b)
- file_path_b = os.path.join(wc_b, fname)
+ file_path_b = sbox.ospath('iota', wc_dir=wc_b)
# --- Meanwhile, in our other working copy... ---
@@ -339,7 +323,7 @@ def handle_defunct_lock(sbox):
# update the 1st wc, which should clear the lock there
- svntest.main.run_svn(None, 'update', wc_dir)
+ sbox.simple_update()
# Make sure the file is unlocked
svntest.actions.run_and_verify_status(wc_dir, expected_status)
@@ -357,9 +341,9 @@ def enforce_lock(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, 'iota')
- lambda_path = os.path.join(wc_dir, 'A', 'B', 'lambda')
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ iota_path = sbox.ospath('iota')
+ lambda_path = sbox.ospath('A/B/lambda')
+ mu_path = sbox.ospath('A/mu')
# svn:needs-lock value should be forced to a '*'
svntest.actions.set_prop('svn:needs-lock', 'foo', iota_path)
@@ -381,8 +365,8 @@ def enforce_lock(sbox):
if ((os.stat(iota_path)[0] & mode)
or (os.stat(lambda_path)[0] & mode)
or (os.stat(mu_path)[0] & mode)):
- print("Setting 'svn:needs-lock' property on a file failed to set")
- print("file mode to read-only.")
+ logger.warn("Setting 'svn:needs-lock' property on a file failed to set")
+ logger.warn("file mode to read-only.")
raise svntest.Failure
# obtain a lock on one of these files...
@@ -391,7 +375,7 @@ def enforce_lock(sbox):
# ...and verify that the write bit gets set...
if not (os.stat(iota_path)[0] & mode):
- print("Locking a file with 'svn:needs-lock' failed to set write bit.")
+ logger.warn("Locking a file with 'svn:needs-lock' failed to set write bit.")
raise svntest.Failure
# ...and unlock it...
@@ -400,13 +384,13 @@ def enforce_lock(sbox):
# ...and verify that the write bit gets unset
if (os.stat(iota_path)[0] & mode):
- print("Unlocking a file with 'svn:needs-lock' failed to unset write bit.")
+ logger.warn("Unlocking a file with 'svn:needs-lock' failed to unset write bit.")
raise svntest.Failure
# Verify that removing the property restores the file to read-write
svntest.main.run_svn(None, 'propdel', 'svn:needs-lock', iota_path)
if not (os.stat(iota_path)[0] & mode):
- print("Deleting 'svn:needs-lock' failed to set write bit.")
+ logger.warn("Deleting 'svn:needs-lock' failed to set write bit.")
raise svntest.Failure
#----------------------------------------------------------------------
@@ -418,30 +402,22 @@ def update_while_needing_lock(sbox):
"update handles svn:needs-lock correctly"
sbox.build()
- wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, 'iota')
- svntest.main.run_svn(None,
- 'propset', 'svn:needs-lock', 'foo', iota_path)
- svntest.main.run_svn(None,
- 'commit', '-m', 'log msg', iota_path)
- svntest.main.run_svn(None,
- 'up', wc_dir)
+ sbox.simple_propset('svn:needs-lock', 'foo', 'iota')
+ sbox.simple_commit('iota')
+ sbox.simple_update()
# Lock, modify, commit, unlock, to create r3.
svntest.actions.run_and_verify_svn(None, ".*locked by user", [], 'lock',
- '-m', '', iota_path)
- svntest.main.file_append(iota_path, "This line added in r2.\n")
- svntest.main.run_svn(None, 'commit',
- '-m', '', iota_path) # auto-unlocks
+ '-m', '', sbox.ospath('iota'))
+ sbox.simple_append('iota', 'This line added in r2.\n')
+ sbox.simple_commit('iota') # auto-unlocks
# Backdate to r2.
- svntest.main.run_svn(None,
- 'update', '-r2', iota_path)
+ sbox.simple_update(revision=2)
# Try updating forward to r3 again. This is where the bug happened.
- svntest.main.run_svn(None,
- 'update', '-r3', iota_path)
+ sbox.simple_update(revision=3)
#----------------------------------------------------------------------
@@ -456,17 +432,16 @@ def defunct_lock(sbox):
wc_b = sbox.add_wc_path('_b')
svntest.actions.duplicate_dir(wc_dir, wc_b)
- iota_path = os.path.join(wc_dir, 'iota')
- iota_path_b = os.path.join(wc_b, 'iota')
+ iota_path = sbox.ospath('iota')
+ iota_path_b = sbox.ospath('iota', wc_dir=wc_b)
mode = stat.S_IWGRP | stat.S_IWOTH | stat.S_IWRITE
# Set the prop in wc a
- svntest.main.run_svn(None, 'propset', 'svn:needs-lock', 'foo', iota_path)
+ sbox.simple_propset('svn:needs-lock', 'foo', 'iota')
# commit r2
- svntest.main.run_svn(None, 'commit',
- '-m', '', iota_path)
+ sbox.simple_commit('iota')
# update wc_b
svntest.main.run_svn(None, 'update', wc_b)
@@ -484,8 +459,8 @@ def defunct_lock(sbox):
# make sure that iota got set to read-only
if (os.stat(iota_path_b)[0] & mode):
- print("Upon removal of a defunct lock, a file with 'svn:needs-lock'")
- print("was not set back to read-only")
+ logger.warn("Upon removal of a defunct lock, a file with 'svn:needs-lock'")
+ logger.warn("was not set back to read-only")
raise svntest.Failure
@@ -498,14 +473,13 @@ def deleted_path_lock(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
iota_url = sbox.repo_url + '/iota'
svntest.actions.run_and_verify_svn(None, ".*locked by user", [], 'lock',
'-m', '', iota_path)
- svntest.actions.run_and_verify_svn(None, None, [], 'delete', iota_path)
-
+ sbox.simple_rm('iota')
svntest.actions.run_and_verify_svn(None, None, [], 'commit',
'--no-unlock',
'-m', '', iota_path)
@@ -524,9 +498,9 @@ def lock_unlock(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- pi_path = os.path.join(wc_dir, 'A', 'D', 'G', 'pi')
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
- tau_path = os.path.join(wc_dir, 'A', 'D', 'G', 'tau')
+ pi_path = sbox.ospath('A/D/G/pi')
+ rho_path = sbox.ospath('A/D/G/rho')
+ tau_path = sbox.ospath('A/D/G/tau')
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.tweak('A/D/G/pi', 'A/D/G/rho', 'A/D/G/tau', writelocked='K')
@@ -551,19 +525,17 @@ def deleted_dir_lock(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- parent_dir = os.path.join(wc_dir, 'A', 'D', 'G')
- pi_path = os.path.join(wc_dir, 'A', 'D', 'G', 'pi')
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
- tau_path = os.path.join(wc_dir, 'A', 'D', 'G', 'tau')
+ pi_path = sbox.ospath('A/D/G/pi')
+ rho_path = sbox.ospath('A/D/G/rho')
+ tau_path = sbox.ospath('A/D/G/tau')
svntest.actions.run_and_verify_svn(None, ".*locked by user", [], 'lock',
'-m', '', pi_path, rho_path, tau_path)
- svntest.actions.run_and_verify_svn(None, None, [], 'delete', parent_dir)
-
+ sbox.simple_rm('A/D/G') # the parent directory
svntest.actions.run_and_verify_svn(None, None, [], 'commit',
'--no-unlock',
- '-m', '', parent_dir)
+ '-m', '', sbox.ospath('A/D/G'))
#----------------------------------------------------------------------
# III.c : Lock a file and check the output of 'svn stat' from the same
@@ -581,30 +553,27 @@ def lock_status(sbox):
fname = 'iota'
file_path = os.path.join(sbox.wc_dir, fname)
- svntest.main.file_append(file_path, "This is a spreadsheet\n")
- svntest.main.run_svn(None, 'commit',
- '-m', '', file_path)
+ sbox.simple_append('iota', "This is a spreadsheet\n")
+ sbox.simple_commit('iota')
- svntest.main.run_svn(None, 'lock',
- '-m', '', file_path)
+ svntest.main.run_svn(None, 'lock', '-m', '', sbox.ospath('iota'))
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
- expected_status.tweak(fname, wc_rev=2)
- expected_status.tweak(fname, writelocked='K')
+ expected_status.tweak('iota', wc_rev=2, writelocked='K')
svntest.actions.run_and_verify_status(wc_dir, expected_status)
# Verify status again after modifying the file
- svntest.main.file_append(file_path, "check stat output after mod")
+ sbox.simple_append('iota', 'check stat output after mod')
- expected_status.tweak(fname, status='M ')
+ expected_status.tweak('iota', status='M ')
svntest.actions.run_and_verify_status(wc_dir, expected_status)
# Verify status of lock from another working copy
svntest.main.run_svn(None, 'update', wc_b)
expected_status = svntest.actions.get_virginal_state(wc_b, 2)
- expected_status.tweak(fname, writelocked='O')
+ expected_status.tweak('iota', writelocked='O')
svntest.actions.run_and_verify_status(wc_b, expected_status)
@@ -705,7 +674,7 @@ def lock_non_existent_file(sbox):
if line.find(error_msg) != -1:
break
else:
- print("Error: %s : not found in: %s" % (error_msg, error))
+ logger.warn("Error: %s : not found in: %s" % (error_msg, error))
raise svntest.Failure
#----------------------------------------------------------------------
@@ -744,7 +713,7 @@ def revert_lock(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
mode = stat.S_IWGRP | stat.S_IWOTH | stat.S_IWRITE
@@ -758,8 +727,8 @@ def revert_lock(sbox):
# make sure that iota got set to read-only
if (os.stat(iota_path)[0] & mode):
- print("Committing a file with 'svn:needs-lock'")
- print("did not set the file to read-only")
+ logger.warn("Committing a file with 'svn:needs-lock'")
+ logger.warn("did not set the file to read-only")
raise svntest.Failure
# verify status is as we expect
@@ -773,8 +742,8 @@ def revert_lock(sbox):
# make sure that iota got read-only-ness removed
if (os.stat(iota_path)[0] & mode == 0):
- print("Deleting the 'svn:needs-lock' property ")
- print("did not remove read-only-ness")
+ logger.warn("Deleting the 'svn:needs-lock' property ")
+ logger.warn("did not remove read-only-ness")
raise svntest.Failure
# revert the change
@@ -782,8 +751,8 @@ def revert_lock(sbox):
# make sure that iota got set back to read-only
if (os.stat(iota_path)[0] & mode):
- print("Reverting a file with 'svn:needs-lock'")
- print("did not set the file back to read-only")
+ logger.warn("Reverting a file with 'svn:needs-lock'")
+ logger.warn("did not set the file back to read-only")
raise svntest.Failure
# try propdel and revert from a different directory so
@@ -807,8 +776,8 @@ def revert_lock(sbox):
# make sure it is still writable since we have the lock
if (os.stat(iota_path)[0] & mode == 0):
- print("Reverting a 'svn:needs-lock' file (with lock in wc) ")
- print("did not leave the file writable")
+ logger.warn("Reverting a 'svn:needs-lock' file (with lock in wc) ")
+ logger.warn("did not leave the file writable")
raise svntest.Failure
@@ -863,8 +832,8 @@ def lock_switched_files(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- gamma_path = os.path.join(wc_dir, 'A', 'D', 'gamma')
- lambda_path = os.path.join(wc_dir, 'A', 'B', 'lambda')
+ gamma_path = sbox.ospath('A/D/gamma')
+ lambda_path = sbox.ospath('A/B/lambda')
iota_URL = sbox.repo_url + '/iota'
alpha_URL = sbox.repo_url + '/A/B/E/alpha'
@@ -886,12 +855,7 @@ def lock_switched_files(sbox):
expected_status.tweak('A/D/gamma', 'A/B/lambda', writelocked='K')
# In WC-NG locks are kept per working copy, not per file
- if svntest.main.wc_is_singledb(wc_dir):
- # In single-db you see these files are locked locally
- expected_status.tweak('A/B/E/alpha', 'iota', writelocked='K')
- else:
- # In multi-db you see these files are not locked in the right dir
- expected_status.tweak('A/B/E/alpha', 'iota', writelocked='O')
+ expected_status.tweak('A/B/E/alpha', 'iota', writelocked='K')
svntest.actions.run_and_verify_status(wc_dir, expected_status)
@@ -910,7 +874,7 @@ def lock_uri_encoded(sbox):
# lock a file as wc_author
fname = 'amazing space'
- file_path = os.path.join(wc_dir, fname)
+ file_path = sbox.ospath(fname)
svntest.main.file_append(file_path, "This represents a binary file\n")
svntest.actions.run_and_verify_svn(None, None, [], "add", file_path)
@@ -974,7 +938,7 @@ def lock_and_exebit1(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- gamma_path = os.path.join(wc_dir, 'A', 'D', 'gamma')
+ gamma_path = sbox.ospath('A/D/gamma')
expected_err = ".*svn: warning: W125005: To turn off the svn:needs-lock property,.*"
svntest.actions.run_and_verify_svn2(None, None, expected_err, 0,
@@ -992,8 +956,8 @@ def lock_and_exebit1(sbox):
if (not gamma_stat & mode_r
or gamma_stat & mode_w
or not gamma_stat & mode_x):
- print("Committing a file with 'svn:needs-lock, svn:executable'")
- print("did not set the file to read-only, executable")
+ logger.warn("Committing a file with 'svn:needs-lock, svn:executable'")
+ logger.warn("did not set the file to read-only, executable")
raise svntest.Failure
# lock
@@ -1004,8 +968,8 @@ def lock_and_exebit1(sbox):
if (not gamma_stat & mode_r
or not gamma_stat & mode_w
or not gamma_stat & mode_x):
- print("Locking a file with 'svn:needs-lock, svn:executable'")
- print("did not set the file to read-write, executable")
+ logger.warn("Locking a file with 'svn:needs-lock, svn:executable'")
+ logger.warn("did not set the file to read-write, executable")
raise svntest.Failure
# modify
@@ -1020,8 +984,8 @@ def lock_and_exebit1(sbox):
if (not gamma_stat & mode_r
or gamma_stat & mode_w
or not gamma_stat & mode_x):
- print("Unlocking a file with 'svn:needs-lock, svn:executable'")
- print("did not set the file to read-only, executable")
+ logger.warn("Unlocking a file with 'svn:needs-lock, svn:executable'")
+ logger.warn("did not set the file to read-only, executable")
raise svntest.Failure
# ci
@@ -1033,8 +997,8 @@ def lock_and_exebit1(sbox):
if (not gamma_stat & mode_r
or gamma_stat & mode_w
or not gamma_stat & mode_x):
- print("Commiting a file with 'svn:needs-lock, svn:executable'")
- print("after unlocking modified file's permissions")
+ logger.warn("Commiting a file with 'svn:needs-lock, svn:executable'")
+ logger.warn("after unlocking modified file's permissions")
raise svntest.Failure
@@ -1051,7 +1015,7 @@ def lock_and_exebit2(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- gamma_path = os.path.join(wc_dir, 'A', 'D', 'gamma')
+ gamma_path = sbox.ospath('A/D/gamma')
expected_err = ".*svn: warning: W125005: To turn off the svn:needs-lock property,.*"
svntest.actions.run_and_verify_svn2(None, None, expected_err, 0,
@@ -1069,8 +1033,8 @@ def lock_and_exebit2(sbox):
if (not gamma_stat & mode_r
or gamma_stat & mode_w
or not gamma_stat & mode_x):
- print("Committing a file with 'svn:needs-lock, svn:executable'")
- print("did not set the file to read-only, executable")
+ logger.warn("Committing a file with 'svn:needs-lock, svn:executable'")
+ logger.warn("did not set the file to read-only, executable")
raise svntest.Failure
# lock
@@ -1081,8 +1045,8 @@ def lock_and_exebit2(sbox):
if (not gamma_stat & mode_r
or not gamma_stat & mode_w
or not gamma_stat & mode_x):
- print("Locking a file with 'svn:needs-lock, svn:executable'")
- print("did not set the file to read-write, executable")
+ logger.warn("Locking a file with 'svn:needs-lock, svn:executable'")
+ logger.warn("did not set the file to read-write, executable")
raise svntest.Failure
# modify
@@ -1097,8 +1061,8 @@ def lock_and_exebit2(sbox):
if (not gamma_stat & mode_r
or gamma_stat & mode_w
or not gamma_stat & mode_x):
- print("Commiting a file with 'svn:needs-lock, svn:executable'")
- print("did not set the file to read-only, executable")
+ logger.warn("Commiting a file with 'svn:needs-lock, svn:executable'")
+ logger.warn("did not set the file to read-only, executable")
raise svntest.Failure
def commit_xml_unsafe_file_unlock(sbox):
@@ -1173,7 +1137,6 @@ def repos_lock_with_info(sbox):
#----------------------------------------------------------------------
@Issue(4126)
-@Skip(svntest.main.is_ra_type_dav_serf) # Issue 4126 unpredictable result
def unlock_already_unlocked_files(sbox):
"(un)lock set of files, one already (un)locked"
@@ -1181,10 +1144,10 @@ def unlock_already_unlocked_files(sbox):
wc_dir = sbox.wc_dir
# Deliberately have no direct child of A as a target
- iota_path = os.path.join(wc_dir, 'iota')
- lambda_path = os.path.join(wc_dir, 'A', 'B', 'lambda')
- alpha_path = os.path.join(wc_dir, 'A', 'B', 'E', 'alpha')
- gamma_path = os.path.join(wc_dir, 'A', 'D', 'gamma')
+ iota_path = sbox.ospath('iota')
+ lambda_path = sbox.ospath('A/B/lambda')
+ alpha_path = sbox.ospath('A/B/E/alpha')
+ gamma_path = sbox.ospath('A/D/gamma')
svntest.actions.run_and_verify_svn(None, ".*locked by user", [], 'lock',
'--username', svntest.main.wc_author2,
@@ -1229,8 +1192,8 @@ def info_moved_path(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- fname = os.path.join(wc_dir, "iota")
- fname2 = os.path.join(wc_dir, "iota2")
+ fname = sbox.ospath("iota")
+ fname2 = sbox.ospath("iota2")
# Move iota, creating r2.
svntest.actions.run_and_verify_svn(None, None, [],
@@ -1285,7 +1248,7 @@ def ls_url_encoded(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- dirname = os.path.join(wc_dir, "space dir")
+ dirname = sbox.ospath("space dir")
fname = os.path.join(dirname, "f")
# Create a dir with a space in its name and a file therein.
@@ -1337,7 +1300,7 @@ def unlock_wrong_token(sbox):
svntest.actions.run_and_verify_svn(None, ".*locked by user", [], 'lock',
file_path)
- # Steal the lock as the same author, but using an URL to keep the old token
+ # Steal the lock as the same author, but using a URL to keep the old token
# in the WC.
svntest.actions.run_and_verify_svn(None, ".*locked by user", [], 'lock',
"--force", file_url)
@@ -1391,7 +1354,7 @@ def unlocked_lock_of_other_user(sbox):
wc_dir = sbox.wc_dir
# lock a file with user jrandom
- pi_path = os.path.join(wc_dir, 'A', 'D', 'G', 'pi')
+ pi_path = sbox.ospath('A/D/G/pi')
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.tweak('A/D/G/pi', writelocked='K')
@@ -1439,8 +1402,8 @@ def lock_twice_in_one_wc(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- mu2_path = os.path.join(wc_dir, 'A', 'B', 'mu')
+ mu_path = sbox.ospath('A/mu')
+ mu2_path = sbox.ospath('A/B/mu')
# Create a needs-lock file
svntest.actions.set_prop('svn:needs-lock', '*', mu_path)
@@ -1454,7 +1417,7 @@ def lock_twice_in_one_wc(sbox):
# Switch a second location for the same file in the same working copy
svntest.actions.run_and_verify_svn(None, None, [],
'switch', sbox.repo_url + '/A',
- os.path.join(wc_dir, 'A', 'B'),
+ sbox.ospath('A/B'),
'--ignore-ancestry')
# Lock location 1
@@ -1469,15 +1432,10 @@ def lock_twice_in_one_wc(sbox):
os.chmod(mu2_path, 0700)
svntest.main.file_append(mu2_path, "Updated text")
- if svntest.main.wc_is_singledb(wc_dir):
- # Commit will just succeed as the DB owns the lock. It's a user decision
- # to commit the other target instead of the one originally locked
- expected_err = []
- else:
- # Commit should fail because it is locked in the other location
- expected_err = '.*(([Nn]o)|(Server)).*[lL]ock.*'
+ # Commit will just succeed as the DB owns the lock. It's a user decision
+ # to commit the other target instead of the one originally locked
- svntest.actions.run_and_verify_svn(None, None, expected_err,
+ svntest.actions.run_and_verify_svn(None, None, [],
'commit', mu2_path, '-m', '')
#----------------------------------------------------------------------
@@ -1490,8 +1448,8 @@ def lock_path_not_in_head(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- D_path = os.path.join(wc_dir, 'A', 'D')
- lambda_path = os.path.join(wc_dir, 'A', 'B', 'lambda')
+ D_path = sbox.ospath('A/D')
+ lambda_path = sbox.ospath('A/B/lambda')
# Commit deletion of A/D and A/B/lambda as r2, then update the WC
# back to r1. Then attempt to lock some paths that no longer exist
@@ -1516,10 +1474,13 @@ def lock_path_not_in_head(sbox):
# svn: In file '..\..\..\subversion\libsvn_ra_serf\util.c' line 1120:
# assertion failed (ctx->status_code)
svntest.actions.run_and_verify_svn2(None, None, expected_lock_fail_err_re,
- 0, 'lock', D_path)
- svntest.actions.run_and_verify_svn2(None, None, expected_lock_fail_err_re,
0, 'lock', lambda_path)
+ expected_err = 'svn: E155008: The node \'.*D\' is not a file'
+ svntest.actions.run_and_verify_svn(None, None, expected_err,
+ 'lock', D_path)
+
+
#----------------------------------------------------------------------
def verify_path_escaping(sbox):
"verify escaping of lock paths"
@@ -1529,9 +1490,9 @@ def verify_path_escaping(sbox):
# Add test paths using two characters that need escaping in a url, but
# are within the normal ascii range
- file1 = os.path.join(wc_dir, 'file #1')
- file2 = os.path.join(wc_dir, 'file #2')
- file3 = os.path.join(wc_dir, 'file #3')
+ file1 = sbox.ospath('file #1')
+ file2 = sbox.ospath('file #2')
+ file3 = sbox.ospath('file #3')
svntest.main.file_write(file1, 'File 1')
svntest.main.file_write(file2, 'File 2')
@@ -1552,7 +1513,7 @@ def verify_path_escaping(sbox):
'file #1' : Item(status=' ', writelocked='K', wc_rev='2'),
'file #2' : Item(status=' ', writelocked='O', wc_rev='2'),
'file #3' : Item(status=' ', writelocked='B', wc_rev='2')
- });
+ })
# Make sure the file locking is reported correctly
svntest.actions.run_and_verify_status(wc_dir, expected_status)
@@ -1560,7 +1521,6 @@ def verify_path_escaping(sbox):
#----------------------------------------------------------------------
# Issue #3674: Replace + propset of locked file fails over DAV
-@XFail(svntest.main.is_ra_type_dav)
@Issue(3674)
def replace_and_propset_locked_path(sbox):
"test replace + propset of locked file"
@@ -1568,9 +1528,9 @@ def replace_and_propset_locked_path(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- G_path = os.path.join(wc_dir, 'A', 'D', 'G')
- rho_path = os.path.join(G_path, 'rho')
+ mu_path = sbox.ospath('A/mu')
+ G_path = sbox.ospath('A/D/G')
+ rho_path = sbox.ospath('A/D/G/rho')
# Lock mu and A/D/G/rho.
svntest.actions.run_and_verify_svn(None, None, [],
@@ -1593,11 +1553,9 @@ def replace_and_propset_locked_path(sbox):
# Replace A/D/G and A/D/G/rho, propset on A/D/G/rho.
svntest.actions.run_and_verify_svn(None, None, [],
'rm', G_path)
- # Recreate path for single-db
- if not os.path.exists(G_path):
- os.mkdir(G_path)
+
svntest.actions.run_and_verify_svn(None, None, [],
- 'add', G_path)
+ 'mkdir', G_path)
svntest.main.file_append(rho_path, "This is the new file 'rho'.\n")
svntest.actions.run_and_verify_svn(None, None, [],
'add', rho_path)
@@ -1617,10 +1575,10 @@ def cp_isnt_ro(sbox):
wc_dir = sbox.wc_dir
mu_URL = sbox.repo_url + '/A/mu'
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- mu2_path = os.path.join(wc_dir, 'A', 'mu2')
- mu3_path = os.path.join(wc_dir, 'A', 'mu3')
- kappa_path = os.path.join(wc_dir, 'kappa')
+ mu_path = sbox.ospath('A/mu')
+ mu2_path = sbox.ospath('A/mu2')
+ mu3_path = sbox.ospath('A/mu3')
+ kappa_path = sbox.ospath('kappa')
open(kappa_path, 'w').write("This is the file 'kappa'.\n")
## added file
@@ -1694,9 +1652,9 @@ def update_locked_deleted(sbox):
status='D ', writelocked='O')
expected_output = svntest.wc.State(wc_dir, {
- 'A/mu' : Item(status=' '),
- 'A/B/E/alpha' : Item(status=' '),
- 'iota' : Item(status=' '),
+ 'A/mu' : Item(status='B '),
+ 'A/B/E/alpha' : Item(status='B '),
+ 'iota' : Item(status='B '),
})
svntest.actions.run_and_verify_update(wc_dir, expected_output,
@@ -1714,7 +1672,7 @@ def block_unlock_if_pre_unlock_hook_fails(sbox):
svntest.actions.create_failing_hook(repo_dir, "pre-unlock", "error text")
# lock a file.
- pi_path = os.path.join(wc_dir, 'A', 'D', 'G', 'pi')
+ pi_path = sbox.ospath('A/D/G/pi')
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.tweak('A/D/G/pi', writelocked='K')
@@ -1750,6 +1708,346 @@ def lock_invalid_token(sbox):
".*scheme.*'opaquelocktoken'", 0,
'lock', '-m', '', file_path)
+@Issue(3105)
+def lock_multi_wc(sbox):
+ "obtain locks in multiple working copies in one go"
+
+ sbox.build()
+
+ sbox2 = sbox.clone_dependent(copy_wc=True)
+
+ wc_name = os.path.basename(sbox.wc_dir)
+ wc2_name = os.path.basename(sbox2.wc_dir)
+
+ expected_output = svntest.verify.UnorderedOutput([
+ '\'%s\' locked by user \'jrandom\'.\n' % os.path.join(wc_name, 'iota'),
+ '\'%s\' locked by user \'jrandom\'.\n' % os.path.join(wc2_name, 'A', 'mu'),
+ ])
+
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'lock', sbox.ospath('iota'),
+ sbox2.ospath('A/mu'))
+
+ expected_output = svntest.verify.UnorderedOutput([
+ '\'%s\' unlocked.\n' % os.path.join(wc_name, 'iota'),
+ '\'%s\' unlocked.\n' % os.path.join(wc2_name, 'A', 'mu'),
+ ])
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'unlock', sbox.ospath('iota'),
+ sbox2.ospath('A/mu'))
+
+@Issue(3378)
+def locks_stick_over_switch(sbox):
+ "locks are kept alive over switching"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ repo_url = sbox.repo_url
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'cp', sbox.ospath('A'), repo_url + '/AA',
+ '-m', '')
+
+ expected_output = svntest.verify.UnorderedOutput([
+ '\'iota\' locked by user \'jrandom\'.\n',
+ '\'%s\' locked by user \'jrandom\'.\n' % os.path.join('A', 'D', 'H', 'chi'),
+ '\'%s\' locked by user \'jrandom\'.\n' % os.path.join('A', 'mu'),
+ ])
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'lock', sbox.ospath('A/D/H/chi'),
+ sbox.ospath('A/mu'),
+ sbox.ospath('iota'))
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('A/D/H/chi', 'A/mu', 'iota', writelocked='K')
+
+ # Make sure the file is still locked
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ expected_output = svntest.wc.State(wc_dir, {
+ })
+
+ expected_status.tweak(wc_rev=2)
+ expected_status.tweak('', wc_rev=1)
+ expected_status.tweak('iota', writelocked='K', wc_rev=1)
+
+ switched_status = expected_status.copy()
+ switched_status.tweak(writelocked=None)
+ switched_status.tweak('iota', writelocked='K')
+ switched_status.tweak('A', switched='S')
+
+ svntest.actions.run_and_verify_switch(wc_dir, sbox.ospath('A'),
+ repo_url + '/AA',
+ expected_output, None, switched_status)
+
+ # And now switch back to verify that the locks reappear
+ expected_output = svntest.wc.State(wc_dir, {
+ })
+ svntest.actions.run_and_verify_switch(wc_dir, sbox.ospath('A'),
+ repo_url + '/A',
+ expected_output, None, expected_status)
+
+@Issue(4304)
+def lock_unlock_deleted(sbox):
+ "lock/unlock a deleted file"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'rm', sbox.ospath('A/mu'))
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('A/mu', status='D ')
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ expected_output = '\'mu\' locked by user \'jrandom\'.'
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'lock', sbox.ospath('A/mu'))
+ expected_status.tweak('A/mu', writelocked='K')
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ expected_output = '\'mu\' unlocked.'
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'unlock', sbox.ospath('A/mu'))
+ expected_status.tweak('A/mu', writelocked=None)
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+@Issue(4369)
+def commit_stolen_lock(sbox):
+ "commit with a stolen lock"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ sbox.simple_append('A/mu', 'zig-zag')
+ sbox.simple_lock('A/mu')
+
+ expected_output = '\'mu\' locked by user \'jrandom\'.'
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'lock', '--force',
+ sbox.repo_url + '/A/mu')
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('A/mu', status='M ', writelocked='T')
+ err_re = "(.*E160037: Cannot verify lock on path '/A/mu')|" + \
+ "(.*E160038: '/.*/A/mu': no lock token available)"
+ svntest.actions.run_and_verify_commit(wc_dir,
+ [],
+ expected_status,
+ err_re,
+ wc_dir)
+
+# When removing directories, the locks of contained files were not
+# correctly removed from the working copy database, thus they later
+# magically reappeared when new files or directories with the same
+# pathes were added.
+@Issue(4364)
+def drop_locks_on_parent_deletion(sbox):
+ "drop locks when the parent is deleted"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # lock some files, and remove them.
+ sbox.simple_lock('A/B/lambda')
+ sbox.simple_lock('A/B/E/alpha')
+ sbox.simple_lock('A/B/E/beta')
+ sbox.simple_rm('A/B')
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.remove_subtree('A/B')
+
+ svntest.actions.run_and_verify_commit(wc_dir,
+ [],
+ expected_status,
+ None,
+ wc_dir)
+
+ # now re-add entities to the deleted pathes.
+ sbox.simple_mkdir('A/B')
+ sbox.simple_add_text('new file replacing old file', 'A/B/lambda')
+ sbox.simple_add_text('file replacing former dir', 'A/B/F')
+ # The bug also resurrected locks on directories when their path
+ # matched a former file.
+ sbox.simple_mkdir('A/B/E', 'A/B/E/alpha')
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('A/B',
+ 'A/B/E',
+ 'A/B/E/alpha',
+ 'A/B/F',
+ 'A/B/lambda',
+ wc_rev='3')
+ expected_status.remove('A/B/E/beta')
+
+ svntest.actions.run_and_verify_commit(wc_dir,
+ [],
+ expected_status,
+ None,
+ wc_dir)
+
+
+@SkipUnless(svntest.main.is_ra_type_dav)
+def dav_lock_timeout(sbox):
+ "unlock a lock with timeout"
+
+ import httplib
+ from urlparse import urlparse
+ import base64
+
+ sbox.build()
+ loc = urlparse(sbox.repo_url)
+
+ if loc.scheme == 'http':
+ h = httplib.HTTPConnection(loc.hostname, loc.port)
+ else:
+ h = httplib.HTTPSConnection(loc.hostname, loc.port)
+
+ lock_body = '<?xml version="1.0" encoding="utf-8" ?>' \
+ '<D:lockinfo xmlns:D="DAV:">' \
+ ' <D:lockscope><D:exclusive/></D:lockscope>' \
+ ' <D:locktype><D:write/></D:locktype>' \
+ ' <D:owner>' \
+ ' <D:href>http://a/test</D:href>' \
+ ' </D:owner>' \
+ '</D:lockinfo>'
+
+ lock_headers = {
+ 'Authorization': 'Basic ' + base64.b64encode('jconstant:rayjandom'),
+ 'Timeout': 'Second-86400'
+ }
+
+ # Enabling the following line makes this test easier to debug
+ h.set_debuglevel(9)
+
+ h.request('LOCK', sbox.repo_url + '/iota', lock_body, lock_headers)
+
+ r = h.getresponse()
+
+ # Verify that there is a lock, by trying to obtain one
+ svntest.actions.run_and_verify_svn2(None, None, ".*locked by user", 0,
+ 'lock', '-m', '', sbox.ospath('iota'))
+
+ # Before this patch this used to fail with a parse error of the timeout
+ svntest.actions.run_and_verify_svn2(None, None, ".*W160039.*Unlock.*403", 0,
+ 'unlock', sbox.repo_url + '/iota')
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'unlock', sbox.ospath('iota'), '--force')
+
+
+
+def non_root_locks(sbox):
+ "locks for working copies not at repos root"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'cp', sbox.repo_url, sbox.repo_url + '/X',
+ '-m', 'copy greek tree')
+
+ sbox.simple_switch(sbox.repo_url + '/X')
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ # Lock a file
+ svntest.actions.run_and_verify_svn(None, ".*locked by user", [],
+ 'lock', sbox.ospath('A/D/G/pi'),
+ '-m', '')
+ expected_status.tweak('A/D/G/pi', writelocked='K')
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ # Updates don't break the lock
+ sbox.simple_update('A/D')
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+ sbox.simple_update('')
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ # Break the lock
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'unlock', sbox.repo_url + '/X/A/D/G/pi')
+
+ # Subdir update reports the break
+ sbox.simple_update('A/D')
+ expected_status.tweak('A/D/G/pi', writelocked=None)
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ # Relock and break
+ svntest.actions.run_and_verify_svn(None, ".*locked by user", [],
+ 'lock', sbox.ospath('A/D/G/pi'),
+ '-m', '')
+ expected_status.tweak('A/D/G/pi', writelocked='K')
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'unlock', sbox.repo_url + '/X/A/D/G/pi')
+
+ # Root update reports the break
+ sbox.simple_update('')
+ expected_status.tweak('A/D/G/pi', writelocked=None)
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+@Issue(3515)
+@SkipUnless(svntest.main.is_ra_type_dav)
+def dav_lock_refresh(sbox):
+ "refresh timeout of DAV lock"
+
+ import httplib
+ from urlparse import urlparse
+ import base64
+
+ sbox.build(create_wc = False)
+
+ # Acquire lock on 'iota'
+ svntest.actions.run_and_verify_svn(None, ".*locked by user", [], 'lock',
+ sbox.repo_url + '/iota')
+
+ # Try to refresh lock using 'If' header
+ loc = urlparse(sbox.repo_url)
+
+ if loc.scheme == 'http':
+ h = httplib.HTTPConnection(loc.hostname, loc.port)
+ else:
+ h = httplib.HTTPSConnection(loc.hostname, loc.port)
+
+ lock_token = svntest.actions.run_and_parse_info(sbox.repo_url + '/iota')[0]['Lock Token']
+
+ lock_headers = {
+ 'Authorization': 'Basic ' + base64.b64encode('jrandom:rayjandom'),
+ 'If': '(<' + lock_token + '>)',
+ 'Timeout': 'Second-7200'
+ }
+
+ # Enabling the following line makes this test easier to debug
+ h.set_debuglevel(9)
+
+ h.request('LOCK', sbox.repo_url + '/iota', '', lock_headers)
+
+ # XFAIL Refreshing of DAV lock fails with error '412 Precondition Failed'
+ r = h.getresponse()
+ if r.status != httplib.OK:
+ raise svntest.Failure('Lock refresh failed: %d %s' % (r.status, r.reason))
+
+@SkipUnless(svntest.main.is_ra_type_dav)
+def delete_locked_file_with_percent(sbox):
+ "lock and delete a file called 'a %( ) .txt'"
+
+ sbox.build()
+
+ locked_filename = 'a %( ) .txt'
+ locked_path = sbox.ospath(locked_filename)
+ svntest.main.file_write(locked_path, "content\n")
+ sbox.simple_add(locked_filename)
+ sbox.simple_commit()
+
+ sbox.simple_lock(locked_filename)
+ sbox.simple_rm(locked_filename)
+
+ # XFAIL: With a 1.8.x client, this commit fails with:
+ # svn: E175002: Unexpected HTTP status 400 'Bad Request' on '/svn-test-work/repositories/lock_tests-52/!svn/txr/2-2/a%20%25(%20)%20.txt'
+ # and the following error in the httpd error log:
+ # Invalid percent encoded URI in tagged If-header [400, #104]
+ sbox.simple_commit()
########################################################################
# Run the tests
@@ -1799,6 +2097,15 @@ test_list = [ None,
update_locked_deleted,
block_unlock_if_pre_unlock_hook_fails,
lock_invalid_token,
+ lock_multi_wc,
+ locks_stick_over_switch,
+ lock_unlock_deleted,
+ commit_stolen_lock,
+ drop_locks_on_parent_deletion,
+ dav_lock_timeout,
+ non_root_locks,
+ dav_lock_refresh,
+ delete_locked_file_with_percent,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/log_tests.py b/subversion/tests/cmdline/log_tests.py
index 3c2372c..ffcdace 100755
--- a/subversion/tests/cmdline/log_tests.py
+++ b/subversion/tests/cmdline/log_tests.py
@@ -218,7 +218,7 @@ def guarantee_repos_and_wc(sbox):
def merge_history_repos(sbox):
"""Make a repos with varied and interesting merge history, similar
- to the repos found at: log_tests_data/merge_history_dump.png"""
+ to the repos found at: log_tests_data/merge_history_repo.png"""
upsilon_path = os.path.join('A', 'upsilon')
omicron_path = os.path.join('blocked', 'omicron')
@@ -281,7 +281,6 @@ def merge_history_repos(sbox):
# From branch_a to trunk: add 'upsilon' and modify 'iota' and 'mu'.
#
# Mergeinfo changes on /trunk:
- # Merged /trunk:r2
# Merged /branches/a:r3-5
os.chdir('trunk')
svntest.main.run_svn(None, 'merge', os.path.join('..', branch_a) + '@HEAD')
@@ -363,8 +362,6 @@ def merge_history_repos(sbox):
# More merging - r14
#
# Mergeinfo changes on /trunk:
- # Reverse-merged /trunk:r2
- # Merged /trunk:r3-9
# Merged /branches/a:r6,8-11
# Merged /branches/b:r10-13
os.chdir('trunk')
@@ -394,26 +391,16 @@ def merge_history_repos(sbox):
svntest.main.run_svn(None, 'ci', '-m',
"Modify 'mu' on branches/c.")
- # Merge branches/c to trunk, which produces a conflict - r17
+ # Merge branches/c to trunk - r17
#
# Mergeinfo changes on /trunk:
- # Merged /trunk:r2
- # Merged /branches/c:r3-16
+ # Merged /branches/c:r5-16
os.chdir('trunk')
- svntest.main.run_svn(None, 'merge', '--allow-mixed-revisions',
+ svntest.main.run_svn(None, 'up')
+ svntest.main.run_svn(None, 'merge', '--reintegrate',
os.path.join('..', branch_c) + '@HEAD')
- svntest.main.file_write(os.path.join('A', 'mu'),
- "This is the file 'mu'.\n" +
- "Don't forget to look at 'upsilon', as well.\n" +
- "This is yet more content in 'mu'.",
- "wb")
- # Resolve conflicts, and commit
- svntest.actions.run_and_verify_resolved([os.path.join('A', 'mu'),
- os.path.join('A', 'xi'),
- os.path.join('A', 'upsilon')])
svntest.main.run_svn(None, 'ci', '-m',
- "Merge branches/c to trunk, " +
- "resolving a conflict in 'mu'.",
+ "Merge branches/c to trunk.",
'--username', svntest.main.wc_author2)
os.chdir('..')
@@ -697,6 +684,42 @@ def check_log_chain(chain, revlist, path_counts=[]):
missing_revs, chain)
+def parse_diff(output):
+ """Return a set containing the various diff bits, broken up by file."""
+
+ diff_set = []
+ current_diff = []
+ for line in output:
+ if line.startswith('Index: ') and current_diff:
+ diff_set.append(current_diff)
+ current_diff = []
+ current_diff.append(line)
+ diff_set.append(current_diff)
+
+ return diff_set
+
+
+def setify(diff_list):
+ """Take a list of lists and make it a set of tuples."""
+ s = set()
+ for diff in diff_list:
+ s.add(tuple(diff))
+ return s
+
+
+def compare_diff_output(expected_diffs, output):
+ """Compare the diffs in EXPECTED_DIFFS (which is a Python set) with the
+ text in OUTPUT, remembering that there is no canonical ordering for diffs."""
+
+ diffs = parse_diff(output)
+ diffs = setify(diffs)
+ expected_diffs = setify(expected_diffs)
+
+ if diffs.issubset(expected_diffs) and diffs.issuperset(expected_diffs):
+ return
+
+ raise svntest.Failure("Diffs not equal")
+
######################################################################
# Tests
@@ -983,7 +1006,7 @@ def log_xml_empty_date(sbox):
# Create the revprop-change hook for this test
svntest.actions.enable_revprop_changes(sbox.repo_dir)
- date_re = re.compile('<date');
+ date_re = re.compile('<date')
# Ensure that we get a date before we delete the property.
exit_code, output, errput = svntest.actions.run_and_verify_svn(
@@ -2050,6 +2073,71 @@ def log_on_nonexistent_path_and_valid_rev(sbox):
'log', '-q', bad_path_default_rev)
#----------------------------------------------------------------------
+# Test for issue #4022 'svn log -g interprets change in inherited mergeinfo
+# due to move as a merge'.
+@Issue(4022)
+def merge_sensitive_log_copied_path_inherited_mergeinfo(sbox):
+ "log -g on copied path with inherited mergeinfo"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ wc_disk, wc_status = set_up_branch(sbox, branch_only=True)
+
+ A_path = os.path.join(wc_dir, 'A')
+ gamma_COPY_path = os.path.join(wc_dir, 'A_COPY', 'D', 'gamma')
+ old_gamma_path = os.path.join(wc_dir, 'A', 'D', 'gamma')
+ new_gamma_path = os.path.join(wc_dir, 'A', 'C', 'gamma')
+
+ # r3 - Modify a file (A_COPY/D/gamma) on the branch
+ svntest.main.file_write(gamma_COPY_path, "Branch edit.\n")
+ svntest.main.run_svn(None, 'ci', '-m', 'Branch edit', wc_dir)
+
+ # r4 - Reintegrate A_COPY to A
+ svntest.main.run_svn(None, 'up', wc_dir)
+ svntest.main.run_svn(None, 'merge', '--reintegrate',
+ sbox.repo_url + '/A_COPY', A_path)
+ svntest.main.run_svn(None, 'ci', '-m', 'Reintegrate A_COPY to A', wc_dir)
+
+ # r5 - Move file modified by reintegrate (A/D/gamma to A/C/gamma).
+ svntest.main.run_svn(None, 'move', old_gamma_path, new_gamma_path)
+ svntest.main.run_svn(None, 'ci', '-m', 'Move file', wc_dir)
+
+ # 'svn log -g --stop-on-copy ^/A/C/gamma' hould return *only* r5
+ # Previously this test failed because the change in gamma's inherited
+ # mergeinfo between r4 and r5, due to the move, was understood as a merge:
+ #
+ # >svn log -v -g --stop-on-copy ^^/A/C/gamma
+ # ------------------------------------------------------------------------
+ # r5 | jrandom | 2011-10-11 14:37:57 -0700 (Tue, 11 Oct 2011) | 1 line #
+ # Changed paths:
+ # A /A/C/gamma (from /A/D/gamma:4)
+ # D /A/D/gamma
+ #
+ # Move file
+ # ------------------------------------------------------------------------
+ # r3 | jrandom | 2011-10-11 14:37:56 -0700 (Tue, 11 Oct 2011) | 1 line
+ # Changed paths:
+ # M /A_COPY/D/gamma
+ # Reverse merged via: r5
+ #
+ # Branch edit
+ # ------------------------------------------------------------------------
+ # r2 | jrandom | 2011-10-11 14:37:56 -0700 (Tue, 11 Oct 2011) | 1 line
+ # Changed paths:
+ # A /A_COPY (from /A:1)
+ # Reverse merged via: r5
+ #
+ # log msg
+ # ------------------------------------------------------------------------
+ expected_merges = {5 : []}
+ svntest.main.run_svn(None, 'up', wc_dir)
+ exit_code, out, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '-g', '--stop-on-copy',
+ sbox.repo_url + '/A/C/gamma')
+ log_chain = parse_log_output(out)
+ check_merge_results(log_chain, expected_merges)
+
+#----------------------------------------------------------------------
def log_diff(sbox):
"'svn log --diff'"
@@ -2081,26 +2169,329 @@ def log_diff(sbox):
'-r10:8', 'A2')
os.chdir(was_cwd)
- r9diff = make_no_diff_deleted_header('A2/B/E/alpha', 8, 9) \
- + make_diff_header('A2/B/E/beta', 'revision 8', 'revision 9') \
- + [ "@@ -1 +1,2 @@\n",
- " This is the file 'beta'.\n",
- "+9\n",
- "\ No newline at end of file\n",
- ]
- r8diff = make_diff_header('A2/D/G/rho', 'revision 0', 'revision 8') \
- + [ "@@ -0,0 +1 @@\n",
- "+88\n",
- "\ No newline at end of file\n",
- ]
+ r9diff = [ make_no_diff_deleted_header('A2/B/E/alpha', 8, 9),
+ make_diff_header('A2/B/E/beta', 'revision 8', 'revision 9')
+ + [ "@@ -1 +1,2 @@\n",
+ " This is the file 'beta'.\n",
+ "+9\n",
+ "\ No newline at end of file\n",
+ ]
+ ]
+ r8diff = [ make_diff_header('A2/D/G/rho', 'revision 0', 'revision 8')
+ + [ "@@ -0,0 +1 @@\n",
+ "+88\n",
+ "\ No newline at end of file\n",
+ ]
+ ]
+ log_chain = parse_log_output(output, with_diffs=True)
+ if len(log_chain) != 3:
+ raise SVNLogParseError("%d logs found, 3 expected" % len(log_chain))
+ compare_diff_output(r9diff, log_chain[1]['diff_lines'])
+ compare_diff_output(r8diff, log_chain[2]['diff_lines'])
+
+def log_xml_old(sbox):
+ "log --xml shows kind for old style repository"
+
+ sbox.build(minor_version=5)
+
+ sbox.simple_copy('A/B', 'A/B2')
+ sbox.simple_rm('A/B/lambda', 'A/B/E', 'A/B2/lambda', 'A/B2/E')
+ sbox.simple_commit()
+
+ os.chdir(sbox.wc_dir)
+ paths=[{'/A/B/E' : [{'kind':'dir', 'action':'D'}],
+ '/A/B/lambda' : [{'kind':'file', 'action':'D'}],
+ '/A/B2' : [{'kind':'dir', 'action':'A'}],
+ '/A/B2/E' : [{'kind':'dir', 'action':'D'}],
+ '/A/B2/lambda' : [{'kind':'file', 'action':'D'}]}]
+ svntest.actions.run_and_verify_log_xml(args=['-r', '2', '-v'],
+ expected_paths=paths)
+
+
+@Issue(4153)
+def log_diff_moved(sbox):
+ "log --diff on moved file"
+
+ sbox.build()
+
+ sbox.simple_move('A/mu', 'A/mu2')
+ svntest.main.file_append(sbox.ospath('A/mu2'), "now mu2\n")
+ sbox.simple_commit()
+ sbox.simple_move('A/mu2', 'A/mu3')
+ svntest.main.file_append(sbox.ospath('A/mu3'), "now mu3\n")
+ sbox.simple_commit()
+
+ mu_at_1 = sbox.repo_url + '/A/mu@1'
+ mu3_at_3 = sbox.repo_url + '/A/mu3@3'
+
+ r1diff = [make_diff_header('mu', 'revision 0', 'revision 1')
+ + ["@@ -0,0 +1 @@\n",
+ "+This is the file 'mu'.\n"]]
+
+ # The mu2@2 and mu3@3 diffs show diffs relative to the copy source
+ r2diff = [make_diff_header('mu',
+ '.../mu)\t(revision 1',
+ '.../mu2)\t(revision 2')
+ + ["@@ -1 +1,2 @@\n",
+ " This is the file 'mu'.\n",
+ "+now mu2\n"]]
+
+ r3diff = [make_diff_header('mu2',
+ '.../mu2)\t(revision 2',
+ '.../mu3)\t(revision 3')
+ + ["@@ -1,2 +1,3 @@\n",
+ " This is the file 'mu'.\n",
+ " now mu2\n",
+ "+now mu3\n"]]
+
+ exit_code, output, err = svntest.actions.run_and_verify_svn(None, None, [],
+ 'log', '--diff',
+ mu_at_1)
+ log_chain = parse_log_output(output, with_diffs=True)
+ if len(log_chain) != 1:
+ raise SVNLogParseError("%d logs found, 1 expected" % len(log_chain))
+ compare_diff_output(r1diff, log_chain[0]['diff_lines'])
+
+ exit_code, output, err = svntest.actions.run_and_verify_svn(None, None, [],
+ 'log', '--diff',
+ '-r3', mu3_at_3)
+ log_chain = parse_log_output(output, with_diffs=True)
+ if len(log_chain) != 1:
+ raise SVNLogParseError("%d logs found, 1 expected" % len(log_chain))
+ compare_diff_output(r3diff, log_chain[0]['diff_lines'])
+
+ exit_code, output, err = svntest.actions.run_and_verify_svn(None, None, [],
+ 'log', '--diff',
+ '-r3:2', mu3_at_3)
+ log_chain = parse_log_output(output, with_diffs=True)
+ if len(log_chain) != 2:
+ raise SVNLogParseError("%d logs found, 2 expected" % len(log_chain))
+ compare_diff_output(r3diff, log_chain[0]['diff_lines'])
+ compare_diff_output(r2diff, log_chain[1]['diff_lines'])
+
+ # XFAIL mu3 not found at revisions 0 and 1
+ exit_code, output, err = svntest.actions.run_and_verify_svn(None, None, [],
+ 'log', '--diff',
+ mu3_at_3)
log_chain = parse_log_output(output, with_diffs=True)
if len(log_chain) != 3:
raise SVNLogParseError("%d logs found, 3 expected" % len(log_chain))
- svntest.verify.compare_and_display_lines(None, "diff for r9",
- r9diff, log_chain[1]['diff_lines'])
- svntest.verify.compare_and_display_lines(None, "diff for r8",
- r8diff, log_chain[2]['diff_lines'])
+ compare_diff_output(r3diff, log_chain[0]['diff_lines'])
+ compare_diff_output(r2diff, log_chain[1]['diff_lines'])
+ compare_diff_output(r1diff, log_chain[2]['diff_lines'])
+
+
+#----------------------------------------------------------------------
+def log_search(sbox):
+ "'svn log --search'"
+
+ guarantee_repos_and_wc(sbox)
+
+ os.chdir(sbox.wc_dir)
+
+ exit_code, output, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '--search',
+ 'for revision [367]')
+
+ log_chain = parse_log_output(output)
+ check_log_chain(log_chain, [7, 6, 3])
+
+ # search is case-sensitive
+ exit_code, output, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '--search',
+ 'FOR REVISION [367]')
+ log_chain = parse_log_output(output)
+ check_log_chain(log_chain, [])
+
+ # multi-pattern search
+ exit_code, output, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log',
+ '--search', 'for revision 3',
+ '--search', 'for revision 6',
+ '--search', 'for revision 7')
+
+ log_chain = parse_log_output(output)
+ check_log_chain(log_chain, [7, 6, 3])
+
+ # combined pattern search
+ exit_code, output, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '--verbose',
+ '--search', 'for revision 8',
+ '--search-and', 'test the code',
+ '--search', 'for revision 7',
+ '--search-and', 'this won\'t match ',
+ '--search', 'psi',
+ '--search-and', 'multiple lines',
+ '--search-and', 'revision 6') # don't match r4
+
+ log_chain = parse_log_output(output)
+ check_log_chain(log_chain, [8, 6])
+
+ exit_code, output, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '--verbose',
+ '--search', 'for revision 8',
+ '--search-and', 'this won\'t match ',
+ '--search', 'for revision 7',
+ '--search', 'psi',
+ '--search-and', 'multiple lines',
+ '--search-and', 'revision 4') # don't match r6
+
+ log_chain = parse_log_output(output)
+ check_log_chain(log_chain, [7, 4])
+
+
+@SkipUnless(server_has_mergeinfo)
+def merge_sensitive_log_with_search(sbox):
+ "test 'svn log -g --search'"
+
+ merge_history_repos(sbox)
+
+ TRUNK_path = os.path.join(sbox.wc_dir, "trunk")
+
+ # Run log -g on a non-copying revision that adds mergeinfo,
+ # and perform a search that only matches the merged revision
+ exit_code, output, err = svntest.actions.run_and_verify_svn(None, None, [],
+ 'log', '-g',
+ '-r6',
+ '--search',
+ 'upsilon',
+ TRUNK_path)
+
+ # Parse and check output. The only revision should be r4 (the merge rev).
+ log_chain = parse_log_output(output)
+ expected_merges = {
+ 4 : [6],
+ }
+ check_merge_results(log_chain, expected_merges)
+
+#----------------------------------------------------------------------
+# Test for issue #4355 'svn_client_log5 broken with multiple revisions
+# which span a rename'.
+@Issue(4355)
+@SkipUnless(server_has_mergeinfo)
+def log_multiple_revs_spanning_rename(sbox):
+ "log for multiple revs which span a rename"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ msg_file=os.path.join(sbox.repo_dir, 'log-msg')
+ msg_file=os.path.abspath(msg_file)
+ mu_path1 = os.path.join(wc_dir, 'A', 'mu')
+ mu_path2 = os.path.join(wc_dir, 'trunk', 'mu')
+ trunk_path = os.path.join(wc_dir, 'trunk')
+
+ # r2 - Change a file.
+ msg=""" Log message for revision 2
+ but with multiple lines
+ to test the code"""
+ svntest.main.file_write(msg_file, msg)
+ svntest.main.file_append(mu_path1, "2")
+ svntest.main.run_svn(None, 'ci', '-F', msg_file, wc_dir)
+
+ # r3 - Rename that file's parent.
+ svntest.main.run_svn(None, 'up', wc_dir)
+ sbox.simple_move('A', 'trunk')
+ svntest.main.run_svn(None, 'ci', '-m', "Log message for revision 3",
+ wc_dir)
+
+ # r4 - Change the file again.
+ msg=""" Log message for revision 4
+ but with multiple lines
+ to test the code"""
+ svntest.main.file_write(msg_file, msg)
+ svntest.main.file_append(mu_path2, "4")
+ svntest.main.run_svn(None, 'ci', '-F', msg_file, wc_dir)
+ svntest.main.run_svn(None, 'up', wc_dir)
+
+ # Check that log can handle a revision range that spans a rename.
+ exit_code, output, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '-r2:4', sbox.repo_url + '/trunk/mu')
+ log_chain = parse_log_output(output)
+ check_log_chain(log_chain, [2,3,4])
+
+ # Check that log can handle discrete revisions that don't span a rename.
+ exit_code, output, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '-c3,4', sbox.repo_url + '/trunk/mu')
+ log_chain = parse_log_output(output)
+ check_log_chain(log_chain, [3,4])
+
+ # Check that log can handle discrete revisions that span a rename.
+ #
+ # Currently this fails with:
+ #
+ # >svn log ^/trunk -c2,3,1
+ # ------------------------------------------------------------------------
+ # r2 | jrandom | 2013-04-18 19:58:47 -0400 (Thu, 18 Apr 2013) | 3 lines
+ #
+ # Log message for revision 2
+ # but with multiple lines
+ # to test the code
+ # ------------------------------------------------------------------------
+ # r3 | jrandom | 2013-04-18 19:58:47 -0400 (Thu, 18 Apr 2013) | 1 line
+ #
+ # Log message for revision 3
+ # ..\..\..\subversion\svn\log-cmd.c:868,
+ # ..\..\..\subversion\libsvn_client\log.c:641,
+ # ..\..\..\subversion\libsvn_repos\log.c:1931,
+ # ..\..\..\subversion\libsvn_repos\log.c:1358,
+ # ..\..\..\subversion\libsvn_fs\fs-loader.c:979,
+ # ..\..\..\subversion\libsvn_fs_fs\tree.c:3205:
+ # (apr_err=SVN_ERR_FS_NOT_FOUND)
+ # svn: E160013: File not found: revision 1, path '/trunk'
+ exit_code, output, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '-c2,3,1', sbox.repo_url + '/trunk/mu')
+ log_chain = parse_log_output(output)
+ check_log_chain(log_chain, [2,3,1])
+
+ # Should work with a WC target too.
+ exit_code, output, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '-c2,3,1', mu_path2)
+ log_chain = parse_log_output(output)
+ check_log_chain(log_chain, [2,3,1])
+
+ # Discreet revision *ranges* which span a rename should work too.
+ exit_code, output, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '-r1', '-r4:2', sbox.repo_url + '/trunk')
+ log_chain = parse_log_output(output)
+ check_log_chain(log_chain, [1,4,3,2])
+
+ # As above, but revision ranges from younger to older. Previously this
+ # failed with:
+ #
+ # >svn log ^/trunk -r1:1 -r2:4
+ # ------------------------------------------------------------------------
+ # r1 | jrandom | 2013-04-18 19:58:46 -0400 (Thu, 18 Apr 2013) | 1 line
+ #
+ # Log message for revision 1.
+ # ..\..\..\subversion\svn\log-cmd.c:868,
+ # ..\..\..\subversion\libsvn_client\log.c:678,
+ # ..\..\..\subversion\libsvn_repos\log.c:1931,
+ # ..\..\..\subversion\libsvn_repos\log.c:1358,
+ # ..\..\..\subversion\libsvn_fs\fs-loader.c:979,
+ # ..\..\..\subversion\libsvn_fs_fs\tree.c:3205:
+ # (apr_err=SVN_ERR_FS_NOT_FOUND)
+ # svn: E160013: File not found: revision 4, path '/A'
+ exit_code, output, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '-r1', '-r2:4', sbox.repo_url + '/trunk')
+ log_chain = parse_log_output(output)
+ check_log_chain(log_chain, [1,2,3,4])
+
+ # Discrete revs with WC-only opt revs shouldn't cause any problems.
+ exit_code, output, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '-r1', '-rPREV', trunk_path)
+ log_chain = parse_log_output(output)
+ check_log_chain(log_chain, [1,3])
+
+ exit_code, output, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '-r1', '-rCOMMITTED', trunk_path)
+ log_chain = parse_log_output(output)
+ check_log_chain(log_chain, [1,4])
+
+ exit_code, output, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '-r1', '-rBASE', trunk_path)
+ log_chain = parse_log_output(output)
+ check_log_chain(log_chain, [1,4])
########################################################################
# Run the tests
@@ -2141,7 +2532,13 @@ test_list = [ None,
merge_sensitive_log_ignores_cyclic_merges,
log_with_unrelated_peg_and_operative_revs,
log_on_nonexistent_path_and_valid_rev,
+ merge_sensitive_log_copied_path_inherited_mergeinfo,
log_diff,
+ log_xml_old,
+ log_diff_moved,
+ log_search,
+ merge_sensitive_log_with_search,
+ log_multiple_revs_spanning_rename,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/log_tests_data/merge_history_repo.png b/subversion/tests/cmdline/log_tests_data/merge_history_repo.png
index 792bfea..017a3e3 100644
--- a/subversion/tests/cmdline/log_tests_data/merge_history_repo.png
+++ b/subversion/tests/cmdline/log_tests_data/merge_history_repo.png
Binary files differ
diff --git a/subversion/tests/cmdline/merge_authz_tests.py b/subversion/tests/cmdline/merge_authz_tests.py
index c795ef3..8bf1968 100755
--- a/subversion/tests/cmdline/merge_authz_tests.py
+++ b/subversion/tests/cmdline/merge_authz_tests.py
@@ -73,7 +73,10 @@ from svntest.actions import inject_conflict_into_expected_state
# This is *not* a full test of issue #2829, see also merge_tests.py,
# search for "2829". This tests the problem where a merge adds a path
# with a missing sibling and so needs its own explicit mergeinfo.
-@Issues(2893,2997,2829)
+#
+# #4056 - Don't record non-inheritable mergeinfo if missing subtrees are not
+# touched by the full-depth diff
+@Issues(2893,2997,2829,4056)
@SkipUnless(svntest.main.server_has_mergeinfo)
@Skip(svntest.main.is_ra_type_file)
def mergeinfo_and_skipped_paths(sbox):
@@ -119,7 +122,7 @@ def mergeinfo_and_skipped_paths(sbox):
A_COPY_2_H_path = os.path.join(wc_restricted, "A_COPY_2", "D", "H")
A_COPY_3_path = os.path.join(wc_restricted, "A_COPY_3")
omega_path = os.path.join(wc_restricted, "A_COPY", "D", "H", "omega")
- zeta_path = os.path.join(wc_dir, "A", "D", "H", "zeta")
+ zeta_path = sbox.ospath("A/D/H/zeta")
# Merge r4:8 into the restricted WC's A_COPY.
#
@@ -181,7 +184,7 @@ def mergeinfo_and_skipped_paths(sbox):
'C' : Item(),
})
expected_skip = wc.State(A_COPY_path, {
- 'B/E' : Item(),
+ 'B/E' : Item(verb='Skipped missing target'),
})
svntest.actions.run_and_verify_merge(A_COPY_path, '4', '8',
sbox.repo_url + '/A', None,
@@ -209,6 +212,8 @@ def mergeinfo_and_skipped_paths(sbox):
# always takes precedence in terms of getting *non*-inheritable mergeinfo.
expected_output = wc.State(A_COPY_2_path, {
'D/H/omega' : Item(status='U '),
+ # Below the skip
+ 'D/G/rho' : Item(status=' ', treeconflict='U'),
})
expected_mergeinfo_output = wc.State(A_COPY_2_path, {
'' : Item(status=' U'),
@@ -253,9 +258,9 @@ def mergeinfo_and_skipped_paths(sbox):
'C' : Item(),
})
expected_skip = wc.State(A_COPY_2_path, {
- 'B/E' : Item(),
- 'D/G' : Item(),
- 'D/H/psi' : Item(),
+ 'B/E' : Item(verb='Skipped missing target'),
+ 'D/G' : Item(verb='Skipped missing target'),
+ 'D/H/psi' : Item(verb='Skipped missing target'),
})
svntest.actions.run_and_verify_merge(A_COPY_2_path, '4', '8',
sbox.repo_url + '/A', None,
@@ -320,7 +325,8 @@ def mergeinfo_and_skipped_paths(sbox):
'mu' : Item("This is the file 'mu'.\n"),
'C' : Item(),
})
- expected_skip = wc.State(A_COPY_3_path, {'B/E' : Item()})
+ expected_skip = wc.State(A_COPY_3_path,
+ {'B/E' : Item(verb='Skipped missing target')})
svntest.actions.run_and_verify_merge(A_COPY_3_path, '5', '7',
sbox.repo_url + '/A', None,
expected_output,
@@ -358,7 +364,7 @@ def mergeinfo_and_skipped_paths(sbox):
'chi' : Item("This is the file 'chi'.\n"),
})
expected_skip = wc.State(A_COPY_2_H_path, {
- 'psi' : Item(),
+ 'psi' : Item(verb='Skipped missing target'),
})
# Note we don't bother checking expected mergeinfo output because the
# multiple merges being performed here, -c5 and -c8, will result in
@@ -393,10 +399,54 @@ def mergeinfo_and_skipped_paths(sbox):
# Merge -r7:9 to the restricted WC's A_COPY_2/D/H.
#
+ # r9 adds a path, 'A_COPY_2/D/H/zeta', which has a missing sibling 'psi',
+ # but since 'psi' is untouched by the merge it isn't skipped, and since it
+ # isn't skipped, its parent 'A_COPY_2/D/H' won't get non-inheritable
+ # mergeinfo set on it to describe the merge, so none of the parent's
+ # children will get explicit mergeinfo -- see issue #4056.
+ expected_output = wc.State(A_COPY_2_H_path, {
+ 'omega' : Item(status='U '),
+ 'zeta' : Item(status='A '),
+ })
+ expected_mergeinfo_output = wc.State(A_COPY_2_H_path, {
+ '' : Item(status=' U'),
+ 'omega' : Item(status=' U'),
+ })
+ expected_elision_output = wc.State(A_COPY_2_H_path, {
+ 'omega' : Item(status=' U'),
+ })
+ expected_status = wc.State(A_COPY_2_H_path, {
+ '' : Item(status=' M', wc_rev=8),
+ 'chi' : Item(status=' ', wc_rev=8),
+ 'omega' : Item(status='M ', wc_rev=8),
+ 'zeta' : Item(status='A ', copied='+', wc_rev='-'),
+ })
+ expected_disk = wc.State('', {
+ '' : Item(props={SVN_PROP_MERGEINFO : '/A/D/H:8-9'}),
+ 'omega' : Item("New content"),
+ 'chi' : Item("This is the file 'chi'.\n"),
+ 'zeta' : Item("This is the file 'zeta'.\n"),
+ })
+ expected_skip = wc.State(A_COPY_2_H_path, {})
+ svntest.actions.run_and_verify_merge(A_COPY_2_H_path, '7', '9',
+ sbox.repo_url + '/A/D/H', None,
+ expected_output,
+ expected_mergeinfo_output,
+ expected_elision_output,
+ expected_disk,
+ expected_status,
+ expected_skip,
+ None, None, None, None,
+ None, 1, 0)
+
+ # Merge -r4:9 to the restricted WC's A_COPY_2/D/H.
+ #
# r9 adds a path, 'A_COPY_2/D/H/zeta', which has a parent with
- # non-inheritable mergeinfo (due to the fact 'A_COPY_2/D/H/psi' is missing).
- # 'A_COPY_2/D/H/zeta' must therefore get its own explicit mergeinfo from
- # this merge.
+ # non-inheritable mergeinfo (due to the fact 'A_COPY_2/D/H/psi' is missing
+ # and skipped). 'A_COPY_2/D/H/zeta' must therefore get its own explicit
+ # mergeinfo from this merge.
+ svntest.actions.run_and_verify_svn(None, None, [], 'revert', '--recursive',
+ wc_restricted)
expected_output = wc.State(A_COPY_2_H_path, {
'omega' : Item(status='U '),
'zeta' : Item(status='A '),
@@ -415,15 +465,17 @@ def mergeinfo_and_skipped_paths(sbox):
'zeta' : Item(status='A ', copied='+', wc_rev='-'),
})
expected_disk = wc.State('', {
- '' : Item(props={SVN_PROP_MERGEINFO : '/A/D/H:8-9*'}),
+ '' : Item(props={SVN_PROP_MERGEINFO : '/A/D/H:5-9*'}),
'omega' : Item("New content",
- props={SVN_PROP_MERGEINFO : '/A/D/H/omega:8-9'}),
+ props={SVN_PROP_MERGEINFO : '/A/D/H/omega:5-9'}),
'chi' : Item("This is the file 'chi'.\n"),
'zeta' : Item("This is the file 'zeta'.\n",
props={SVN_PROP_MERGEINFO : '/A/D/H/zeta:9'}),
})
- expected_skip = wc.State(A_COPY_2_H_path, {})
- svntest.actions.run_and_verify_merge(A_COPY_2_H_path, '7', '9',
+ expected_skip = wc.State(A_COPY_2_H_path, {
+ 'psi' : Item(verb='Skipped missing target'),
+ })
+ svntest.actions.run_and_verify_merge(A_COPY_2_H_path, '4', '9',
sbox.repo_url + '/A/D/H', None,
expected_output,
expected_mergeinfo_output,
@@ -451,10 +503,10 @@ def merge_fails_if_subtree_is_deleted_on_src(sbox):
svntest.main.wc_author2 + " = rw")})
# Some paths we'll care about
- Acopy_path = os.path.join(wc_dir, 'A_copy')
- gamma_path = os.path.join(wc_dir, 'A', 'D', 'gamma')
- Acopy_gamma_path = os.path.join(wc_dir, 'A_copy', 'D', 'gamma')
- Acopy_D_path = os.path.join(wc_dir, 'A_copy', 'D')
+ Acopy_path = sbox.ospath('A_copy')
+ gamma_path = sbox.ospath('A/D/gamma')
+ Acopy_gamma_path = sbox.ospath('A_copy/D/gamma')
+ Acopy_D_path = sbox.ospath('A_copy/D')
A_url = sbox.repo_url + '/A'
Acopy_url = sbox.repo_url + '/A_copy'
@@ -572,12 +624,12 @@ def reintegrate_fails_if_no_root_access(sbox):
# Some paths we'll care about
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, 'A')
- A_COPY_path = os.path.join(wc_dir, 'A_COPY')
- beta_COPY_path = os.path.join(wc_dir, 'A_COPY', 'B', 'E', 'beta')
- rho_COPY_path = os.path.join(wc_dir, 'A_COPY', 'D', 'G', 'rho')
- omega_COPY_path = os.path.join(wc_dir, 'A_COPY', 'D', 'H', 'omega')
- psi_COPY_path = os.path.join(wc_dir, 'A_COPY', 'D', 'H', 'psi')
+ A_path = sbox.ospath('A')
+ A_COPY_path = sbox.ospath('A_COPY')
+ beta_COPY_path = sbox.ospath('A_COPY/B/E/beta')
+ rho_COPY_path = sbox.ospath('A_COPY/D/G/rho')
+ omega_COPY_path = sbox.ospath('A_COPY/D/H/omega')
+ psi_COPY_path = sbox.ospath('A_COPY/D/H/psi')
# Copy A@1 to A_COPY in r2, and then make some changes to A in r3-6.
sbox.build()
@@ -585,7 +637,7 @@ def reintegrate_fails_if_no_root_access(sbox):
expected_disk, expected_status = set_up_branch(sbox)
# Make a change on the branch, to A_COPY/mu, commit in r7.
- svntest.main.file_write(os.path.join(wc_dir, "A_COPY", "mu"),
+ svntest.main.file_write(sbox.ospath("A_COPY/mu"),
"Changed on the branch.")
expected_output = wc.State(wc_dir, {'A_COPY/mu' : Item(verb='Sending')})
expected_status.tweak('A_COPY/mu', wc_rev=7)
diff --git a/subversion/tests/cmdline/merge_automatic_tests.py b/subversion/tests/cmdline/merge_automatic_tests.py
new file mode 100755
index 0000000..350ae3e
--- /dev/null
+++ b/subversion/tests/cmdline/merge_automatic_tests.py
@@ -0,0 +1,1367 @@
+#!/usr/bin/env python
+#
+# merge_automatic_tests.py: testing "automatic merge" scenarios
+#
+# Subversion is a tool for revision control.
+# See http://subversion.apache.org for more information.
+#
+# ====================================================================
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+######################################################################
+
+# General modules
+import shutil, sys, re, os
+import time
+
+# Our testing module
+import svntest
+from svntest import main, wc, verify, actions
+
+# (abbreviation)
+Item = wc.StateItem
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
+
+from svntest.main import SVN_PROP_MERGEINFO
+from svntest.main import server_has_mergeinfo
+from merge_tests import local_path
+from merge_tests import expected_merge_output
+from merge_tests import svn_merge
+from merge_tests import set_up_branch
+
+#----------------------------------------------------------------------
+
+# Merging scenarios to test
+#
+# Merge once
+#
+# A (--?---
+# ( \
+# B (--?--x
+#
+# Merge twice in same direction
+#
+# A (--o-----?---
+# ( \ \
+# B (--o--x--?--x
+#
+# Merge to and fro
+#
+# A (--o-----?--x
+# ( \ /
+# B (--o--x--?---
+#
+# A (--o-----o-----?--x
+# ( \ \ /
+# B (--o--x--o--x--?---
+#
+# A (--o-----o--x--?--x
+# ( \ / /
+# B (--o--x--o-----?---
+#
+# A (--o-----o--x--?---
+# ( \ / \
+# B (--o--x--o-----?--x
+#
+# Merge with cherry-picks
+# (This set of six cases represents all of the topologically distinct
+# scenarios involving one cherry-pick between two automatic merges.)
+#
+# Cherry1, fwd
+# A (--o-----o-[o]----o---
+# ( \ \ \
+# B (--o--x--?-----c-----x
+#
+# Cherry2, fwd
+# A (--o-----?-----c--o---
+# ( \ / \
+# B (--o--x--o-[o]-------x
+#
+# Cherry3, fwd
+# A (--o-----?-------c--o----
+# ( \_____ / \
+# ( \ / \
+# B (--o--o-[o]-x-/---------x
+# \__/
+#
+# Cherry1, back
+# A (--o-----o-[o]-------x
+# ( \ \ /
+# B (--o--x--?-----c--o---
+#
+# Cherry2, back
+# A (--o-----?-----c-----x
+# ( \ / /
+# B (--o--x--o-[o]----o---
+#
+# Cherry3, back
+# A (--o-----?-------c------x
+# ( \_____ / /
+# ( \ / /
+# B (--o--o-[o]-x-/-----o----
+# \__/
+#
+# Criss-cross merge
+#
+# A (--o--?--x--?----
+# ( \ / \
+# ( X \
+# ( / \ \
+# B (--o--?--x--?---x
+#
+# Subtree mergeinfo
+#
+# subtree to, fro
+# A (--o-o-o-o---------x
+# ( \ \ /
+# ( \ \ /
+# B ( o--o------s--
+#
+# merge to, reverse cherry subtree to, merge to
+# A (--o-o-o-o------------------
+# ( \ \ \ \
+# ( \ \ \ \
+# B ( o--o------x-------rcs----x
+#
+# Sparse WC
+#
+# ...
+#
+# Mixed-rev WC
+#
+# ...
+#
+#
+# Key to diagrams:
+#
+# o - an original change
+# ? - an original change or no-op (test both)
+# x - a branch root merge
+# c - a cherry-pick merge
+# [o] - source range of a cherry-pick merge
+# s - a subtree merge
+# r - reverse merge
+
+
+########################################################################
+
+def assert_equal(a, b):
+ """Assert that two generic Python objects are equal. If not, raise an
+ exception giving their values. Rationale: During debugging, it's
+ easier to see what's wrong if we see the values rather than just
+ an indication that the assertion failed."""
+ if a != b:
+ raise Exception("assert_equal failed: a = (%s), b = (%s)" % (a, b))
+
+def logical_changes_in_branch(sbox, branch):
+ """Return the set of logical changes that are actually in branch BRANCH
+ (at its current working version), by examining the state of the
+ branch files and directories rather than its mergeinfo.
+
+ Each logical change is described by its branch and revision number
+ as a string such as 'A1'."""
+ changes = set()
+ for propname in sbox.simple_proplist(branch + '/D').keys():
+ if propname.startswith('prop-'):
+ changes.add(propname[5:])
+ return changes
+
+def get_mergeinfo_change(sbox, target):
+ """Return a list of revision numbers representing the mergeinfo change
+ on TARGET (working version against base). Non-recursive."""
+ exit, out, err = actions.run_and_verify_svn(None, None, [],
+ 'diff', '--depth=empty',
+ sbox.ospath(target))
+ merged_revs = []
+ for line in out:
+ match = re.match(r' Merged /(\w+):r(.*)', line)
+ if match:
+ for r_range in match.group(2).split(','):
+ if '-' in r_range:
+ r_start, r_end = r_range.split('-')
+ else:
+ r_start = r_end = r_range
+ merged_revs += range(int(r_start), int(r_end) + 1)
+ return merged_revs
+
+def get_3ways_from_output(output):
+ """Scan the list of lines OUTPUT for indications of 3-way merges.
+ Return a list of (base, source-right) tuples."""
+ ### Problem: test suite strips debugging output within run_and_verify_...()
+ ### so we don't see it here. And relying on debug output is a temporary
+ ### measure only. Better to access svn_client_find_automatic_merge()
+ ### directly, via bindings?
+
+ merges = []
+ for line in output:
+ print "## " + line,
+ # Extract "A1" from a line like "DBG: merge.c:11336: base svn://.../A@1"
+ match = re.search(r'merge\.c:.* base .* /(\w+)@([0-9-]+)', line)
+ if match:
+ base = match.group(1) + match.group(2)
+ match = re.search(r'merge\.c:.* right.* /(\w+)@([0-9-]+)', line)
+ if match:
+ right = match.group(1) + match.group(2)
+ assert base is not None
+ merges.append((base, right))
+ base = None
+ return merges
+
+def make_branches(sbox):
+ """Make branches A and B."""
+ sbox.build()
+ sbox.simple_copy('A', 'B')
+ sbox.simple_commit()
+ os.chdir(sbox.wc_dir)
+ sbox.wc_dir = ''
+
+def modify_branch(sbox, branch, number, conflicting=False):
+ """Commit a modification to branch BRANCH. The actual modification depends
+ on NUMBER. If CONFLICTING=True, the change will be of a kind that
+ conflicts with any other change that has CONFLICTING=True. We don't
+ modify (properties on) the branch root node itself, to make it easier
+ for the tests to distinguish mergeinfo changes from these mods."""
+ uniq = branch + str(number) # something like 'A1' or 'B2'
+ if conflicting:
+ sbox.simple_propset('conflict', uniq, branch + '/C')
+ else:
+ # Make some changes. We add a property, which we will read later in
+ # logical_changes_in_branch() to check that the correct logical
+ # changes were merged. We add a file, so that we will notice if
+ # Subversion tries to merge this same logical change into a branch
+ # that already has it (it will raise a tree conflict).
+ sbox.simple_propset('prop-' + uniq, uniq, branch + '/D')
+ sbox.simple_copy(branch + '/mu', branch + '/mu-' + uniq)
+ sbox.simple_commit()
+
+def expected_automatic_merge_output(target, expect_3ways):
+ """Calculate the expected output."""
+
+ # (This is rather specific to the current implementation.)
+
+ # Match a notification for each rev-range.
+ if expect_3ways:
+ rev_ranges = []
+ for base, right in expect_3ways:
+ if base[0] == right[0]:
+ base_rev = int(base[1:])
+ right_rev = int(right[1:])
+ rev_ranges += [(base_rev + 1, right_rev)];
+ else:
+ rev_ranges = None
+
+ # Match any content modifications; but not of the root of the branch
+ # because we don't intentionally modify the branch root node in most
+ # tests and we don't want to accidentally overlook a mergeinfo change.
+ lines = ["(A |D |[UG] | [UG]|[UG][UG]) " + target + os.path.sep + ".*\n"]
+
+ # Match mergeinfo changes. (### Subtrees are not yet supported here.)
+ lines += [" [UG] " + target + "\n"]
+
+ # At the moment, the automatic merge code sometimes says 'Merging
+ # differences between repository URLs' and sometimes 'Merging r3 through
+ # r5', but it's not trivial to predict which, so expect either form.
+ lines += ["--- Merging .* into '%s':\n" % (target,),
+ "--- Recording mergeinfo for merge .* into '%s':\n" % (target,)]
+
+ return expected_merge_output(rev_ranges, lines, target=target)
+
+def automatic_merge(sbox, source, target, args=[],
+ expect_changes=None, expect_mi=None, expect_3ways=None):
+ """Do a complete, automatic merge from path SOURCE to path TARGET, and
+ commit. Verify the output and that there is no error.
+ ### TODO: Verify the changes made.
+
+ ARGS are additional arguments passed to svn merge."""
+
+ source = local_path(source)
+ target = local_path(target)
+
+ # First, update the WC target because mixed-rev is not fully supported.
+ sbox.simple_update(target)
+
+ before_changes = logical_changes_in_branch(sbox, target)
+
+ exp_out = expected_automatic_merge_output(target, expect_3ways)
+ exit, out, err = svntest.actions.run_and_verify_svn(None, exp_out, [],
+ 'merge',
+ '^/' + source, target,
+ *args)
+
+ if expect_changes is not None:
+ after_changes = logical_changes_in_branch(sbox, target)
+ merged_changes = after_changes - before_changes
+ assert_equal(merged_changes, set(expect_changes))
+ reversed_changes = before_changes - after_changes
+ assert_equal(reversed_changes, set())
+
+ if expect_mi is not None:
+ actual_mi_change = get_mergeinfo_change(sbox, target)
+ assert_equal(actual_mi_change, expect_mi)
+
+ if expect_3ways is not None:
+ ### actual_3ways = get_3ways_from_output(out)
+ ### assert_equal(actual_3ways, expect_3ways)
+ pass
+
+ sbox.simple_commit()
+
+def three_way_merge(base_node, source_right_node):
+ return (base_node, source_right_node)
+
+def three_way_merge_no_op(base_node, source_right_node):
+ return (base_node, source_right_node)
+
+def cherry_pick(sbox, rev, source, target):
+ """Cherry-pick merge revision REV from branch SOURCE to branch TARGET
+ (both WC-relative paths), and commit."""
+ sbox.simple_update(target)
+ svn_merge(rev, source, target)
+ sbox.simple_commit()
+
+no_op_commit__n = 0
+def no_op_commit(sbox):
+ """Commit a new revision that does not affect the branches under test."""
+
+ global no_op_commit__n
+ sbox.simple_propset('foo', str(no_op_commit__n), 'iota')
+ no_op_commit__n += 1
+ sbox.simple_commit('iota')
+
+
+#----------------------------------------------------------------------
+
+def init_mod_merge_mod(sbox, mod_6, mod_7):
+ """Modify both branches, merge A -> B, optionally modify again.
+ MOD_6 is True to modify A in r6, MOD_7 is True to modify B in r7,
+ otherwise make no-op commits for r6 and/or r7."""
+
+ # A (--o------?-
+ # ( \
+ # B (---o--x---?
+ # 2 34 5 67
+
+ make_branches(sbox)
+ modify_branch(sbox, 'A', 3)
+ modify_branch(sbox, 'B', 4)
+
+ automatic_merge(sbox, 'A', 'B',
+ expect_changes=['A3'],
+ expect_mi=[2, 3, 4],
+ expect_3ways=[three_way_merge('A1', 'A4')])
+
+ if mod_6:
+ modify_branch(sbox, 'A', 6)
+ else:
+ no_op_commit(sbox) # r6
+
+ if mod_7:
+ modify_branch(sbox, 'B', 7)
+ else:
+ no_op_commit(sbox) # r7
+
+########################################################################
+
+# Merge once
+
+@SkipUnless(server_has_mergeinfo)
+def merge_once_1(sbox):
+ """merge_once_1"""
+
+ # A (------
+ # ( \
+ # B (-----x
+ # 2 34 5
+
+ make_branches(sbox)
+ no_op_commit(sbox) # r3
+ no_op_commit(sbox) # r4
+
+ automatic_merge(sbox, 'A', 'B',
+ expect_changes=[],
+ expect_mi=[2, 3, 4],
+ expect_3ways=[three_way_merge_no_op('A1', 'A4')])
+
+@SkipUnless(server_has_mergeinfo)
+def merge_once_2(sbox):
+ """merge_once_2"""
+
+ # A (-o----
+ # ( \
+ # B (-----x
+ # 2 34 5
+
+ make_branches(sbox)
+ modify_branch(sbox, 'A', 3)
+ no_op_commit(sbox) # r4
+
+ automatic_merge(sbox, 'A', 'B',
+ expect_changes=['A3'],
+ expect_mi=[2, 3, 4],
+ expect_3ways=[three_way_merge('A1', 'A4')])
+
+@SkipUnless(server_has_mergeinfo)
+def merge_once_3(sbox):
+ """merge_once_3"""
+
+ # A (------
+ # ( \
+ # B (--o--x
+ # 2 34 5
+
+ make_branches(sbox)
+ no_op_commit(sbox) # r3
+ modify_branch(sbox, 'B', 4)
+
+ automatic_merge(sbox, 'A', 'B',
+ expect_changes=[],
+ expect_mi=[2, 3, 4],
+ expect_3ways=[three_way_merge_no_op('A1', 'A4')])
+
+@SkipUnless(server_has_mergeinfo)
+def merge_once_4(sbox):
+ """merge_once_4"""
+
+ # A (-o----
+ # ( \
+ # B (--o--x
+ # 2 34 5
+
+ make_branches(sbox)
+ modify_branch(sbox, 'A', 3)
+ modify_branch(sbox, 'B', 4)
+
+ automatic_merge(sbox, 'A', 'B',
+ expect_changes=['A3'],
+ expect_mi=[2, 3, 4],
+ expect_3ways=[three_way_merge('A1', 'A4')])
+
+#----------------------------------------------------------------------
+
+# Merge twice in same direction
+
+@SkipUnless(server_has_mergeinfo)
+def merge_twice_same_direction_1(sbox):
+ """merge_twice_same_direction_1"""
+
+ # A (--o-----------
+ # ( \ \
+ # B (---o--x------x
+ # 2 34 5 67 8
+
+ init_mod_merge_mod(sbox, mod_6=False, mod_7=False)
+
+ automatic_merge(sbox, 'A', 'B',
+ expect_changes=[],
+ expect_mi=[5, 6, 7],
+ expect_3ways=[three_way_merge_no_op('A4', 'A7')])
+
+@SkipUnless(server_has_mergeinfo)
+def merge_twice_same_direction_2(sbox):
+ """merge_twice_same_direction_2"""
+
+ # A (--o------o----
+ # ( \ \
+ # B (---o--x---o--x
+ # 2 34 5 67 8
+
+ init_mod_merge_mod(sbox, mod_6=True, mod_7=True)
+
+ automatic_merge(sbox, 'A', 'B',
+ expect_changes=['A6'],
+ expect_mi=[5, 6, 7],
+ expect_3ways=[three_way_merge('A4', 'A7')])
+
+#----------------------------------------------------------------------
+
+# Merge to and fro
+
+@SkipUnless(server_has_mergeinfo)
+def merge_to_and_fro_1_1(sbox):
+ """merge_to_and_fro_1_1"""
+
+ # A (--o----------x
+ # ( \ /
+ # B (---o--x-------
+ # 2 34 5 67 8
+
+ init_mod_merge_mod(sbox, mod_6=False, mod_7=False)
+
+ automatic_merge(sbox, 'B', 'A',
+ expect_changes=['B4'],
+ expect_mi=[2, 3, 4, 5, 6, 7],
+ expect_3ways=[three_way_merge('A4', 'B7')])
+
+@SkipUnless(server_has_mergeinfo)
+def merge_to_and_fro_1_2(sbox):
+ """merge_to_and_fro_1_2"""
+
+ # A (--o------o---x
+ # ( \ /
+ # B (---o--x---o---
+ # 2 34 5 67 8
+
+ init_mod_merge_mod(sbox, mod_6=True, mod_7=True)
+
+ automatic_merge(sbox, 'B', 'A',
+ expect_changes=['B4', 'B7'],
+ expect_mi=[2, 3, 4, 5, 6, 7],
+ expect_3ways=[three_way_merge('A4', 'B7')])
+
+def init_merge_to_and_fro_2(sbox, mod_9, mod_10):
+ """Set up branches A and B for the merge_to_and_fro_2 scenarios.
+ MOD_9 is True to modify A in r9, MOD_10 is True to modify B in r10,
+ otherwise make no-op commits for r9 and/or r10."""
+
+ # A (--o------o------?-
+ # ( \ \
+ # B (---o--x---o--x---?
+ # 2 34 5 67 8--90
+
+ init_mod_merge_mod(sbox, mod_6=True, mod_7=True)
+
+ automatic_merge(sbox, 'A', 'B',
+ expect_changes=['A6'],
+ expect_mi=[5, 6, 7],
+ expect_3ways=[three_way_merge('A4', 'A7')])
+
+ if mod_9:
+ modify_branch(sbox, 'A', 9)
+ else:
+ no_op_commit(sbox) # r9
+
+ if mod_10:
+ modify_branch(sbox, 'B', 10)
+ else:
+ no_op_commit(sbox) # r10
+
+@SkipUnless(server_has_mergeinfo)
+def merge_to_and_fro_2_1(sbox):
+ """merge_to_and_fro_2_1"""
+
+ # A (--o------o----------x
+ # ( \ \ /
+ # B (---o--x---o--x-------
+ # 2 34 5 67 8 90 1
+
+ init_merge_to_and_fro_2(sbox, mod_9=False, mod_10=False)
+
+ automatic_merge(sbox, 'B', 'A',
+ expect_changes=['B4', 'B7'],
+ expect_mi=[2, 3, 4, 5, 6, 7, 8, 9, 10],
+ expect_3ways=[three_way_merge('A7', 'B10')])
+
+@SkipUnless(server_has_mergeinfo)
+def merge_to_and_fro_2_2(sbox):
+ """merge_to_and_fro_2_2"""
+
+ # A (--o------o------o---x
+ # ( \ \ /
+ # B (---o--x---o--x---o---
+ # 2 34 5 67 8 90 1
+
+ init_merge_to_and_fro_2(sbox, mod_9=True, mod_10=True)
+
+ automatic_merge(sbox, 'B', 'A',
+ expect_changes=['B4', 'B7', 'B10'],
+ expect_mi=[2, 3, 4, 5, 6, 7, 8, 9, 10],
+ expect_3ways=[three_way_merge('A7', 'B10')])
+
+def init_merge_to_and_fro_3(sbox, mod_9, mod_10):
+ """Set up branches A and B for the merge_to_and_fro_3/4 scenarios.
+ MOD_9 is True to modify A in r9, MOD_10 is True to modify B in r10,
+ otherwise make no-op commits for r9 and/or r10."""
+
+ # A (--o------o---x--?-
+ # ( \ /
+ # B (---o--x---o------?
+ # 2 34 5 67 8 90
+
+ init_mod_merge_mod(sbox, mod_6=True, mod_7=True)
+
+ automatic_merge(sbox, 'B', 'A',
+ expect_changes=['B4', 'B7'],
+ expect_mi=[2, 3, 4, 5, 6, 7],
+ expect_3ways=[three_way_merge('A4', 'B7')])
+
+ if mod_9:
+ modify_branch(sbox, 'A', 9)
+ else:
+ no_op_commit(sbox) # r9
+
+ if mod_10:
+ modify_branch(sbox, 'B', 10)
+ else:
+ no_op_commit(sbox) # r10
+
+@SkipUnless(server_has_mergeinfo)
+def merge_to_and_fro_3_1(sbox):
+ """merge_to_and_fro_3_1"""
+
+ # A (--o------o---x------x
+ # ( \ / /
+ # B (---o--x---o----------
+ # 2 34 5 67 8 90 1
+
+ init_merge_to_and_fro_3(sbox, mod_9=False, mod_10=False)
+
+ automatic_merge(sbox, 'B', 'A',
+ expect_changes=[],
+ expect_mi=[8, 9, 10],
+ expect_3ways=[three_way_merge_no_op('B7', 'B10')])
+
+@SkipUnless(server_has_mergeinfo)
+def merge_to_and_fro_3_2(sbox):
+ """merge_to_and_fro_3_2"""
+
+ # A (--o------o---x--o---x
+ # ( \ / /
+ # B (---o--x---o------o---
+ # 2 34 5 67 8 90 1
+
+ init_merge_to_and_fro_3(sbox, mod_9=True, mod_10=True)
+
+ automatic_merge(sbox, 'B', 'A',
+ expect_changes=['B10'],
+ expect_mi=[8, 9, 10],
+ expect_3ways=[three_way_merge('B7', 'B10')])
+
+@SkipUnless(server_has_mergeinfo)
+def merge_to_and_fro_4_1(sbox):
+ """merge_to_and_fro_4_1"""
+
+ # A (--o------o---x-------
+ # ( \ / \
+ # B (---o--x---o---------x
+ # 2 34 5 67 8 90 1
+
+ init_merge_to_and_fro_3(sbox, mod_9=False, mod_10=False)
+
+ automatic_merge(sbox, 'A', 'B',
+ expect_changes=['A6'],
+ expect_mi=[5, 6, 7, 8, 9, 10],
+ expect_3ways=[three_way_merge_no_op('B7', 'A10')])
+
+@SkipUnless(server_has_mergeinfo)
+def merge_to_and_fro_4_2(sbox):
+ """merge_to_and_fro_4_2"""
+
+ # A (--o------o---x--o----
+ # ( \ / \
+ # B (---o--x---o------o--x
+ # 2 34 5 67 8 90 1
+
+ init_merge_to_and_fro_3(sbox, mod_9=True, mod_10=True)
+
+ automatic_merge(sbox, 'A', 'B',
+ expect_changes=['A6', 'A9'],
+ expect_mi=[5, 6, 7, 8, 9, 10],
+ expect_3ways=[three_way_merge('B7', 'A10')])
+
+#----------------------------------------------------------------------
+
+# Cherry-pick scenarios
+
+@SkipUnless(server_has_mergeinfo)
+def cherry1_fwd(sbox):
+ """cherry1_fwd"""
+
+ # A (--o------o--[o]----o---
+ # ( \ \ \
+ # B (---o--x---------c-----x
+ # 2 34 5 67 8 9 0 1
+
+ init_mod_merge_mod(sbox, mod_6=True, mod_7=False)
+ modify_branch(sbox, 'A', 8)
+ cherry_pick(sbox, 8, 'A', 'B')
+ modify_branch(sbox, 'A', 10)
+
+ automatic_merge(sbox, 'A', 'B',
+ expect_changes=['A6', 'A10'], # and NOT A8
+ expect_mi=[5, 6, 7, 9, 10],
+ expect_3ways=[three_way_merge('A4', 'A7'),
+ three_way_merge('A8', 'A10')])
+
+@SkipUnless(server_has_mergeinfo)
+@XFail()
+@Issue(4255)
+def cherry2_fwd(sbox):
+ """cherry2_fwd"""
+
+ # A (--o-------------c--o---
+ # ( \ / \
+ # B (---o--x---o-[o]-------x
+ # 2 34 5 67 8 9 0 1
+
+ init_mod_merge_mod(sbox, mod_6=False, mod_7=True)
+ modify_branch(sbox, 'B', 8)
+ cherry_pick(sbox, 8, 'B', 'A')
+ modify_branch(sbox, 'A', 10)
+
+ automatic_merge(sbox, 'A', 'B',
+ expect_changes=['A10'], # and NOT A9
+ expect_mi=[5, 6, 7, 8, 9, 10],
+ expect_3ways=[three_way_merge('A9', 'A10')])
+
+@SkipUnless(server_has_mergeinfo)
+@XFail()
+@Issue(4255)
+def cherry3_fwd(sbox):
+ """cherry3_fwd"""
+
+ # A (--o--------------c--o----
+ # ( \ / \
+ # ( \ / \
+ # B (---o--o-[o]-x-/---------x
+ # \__/
+ # 2 34 5 6 7 8 9 0
+
+ make_branches(sbox)
+ modify_branch(sbox, 'A', 3)
+ modify_branch(sbox, 'B', 4)
+ modify_branch(sbox, 'B', 5)
+ modify_branch(sbox, 'B', 6)
+
+ automatic_merge(sbox, 'A', 'B',
+ expect_changes=['A3'],
+ expect_mi=[2, 3, 4, 5, 6],
+ expect_3ways=[three_way_merge('A1', 'A6')])
+
+ cherry_pick(sbox, 6, 'B', 'A')
+ modify_branch(sbox, 'A', 9)
+
+ automatic_merge(sbox, 'A', 'B',
+ expect_changes=['A9'], # and NOT A8
+ expect_mi=[7, 8, 9],
+ expect_3ways=[three_way_merge('A8', 'A9')])
+
+#----------------------------------------------------------------------
+# Automatic merges ignore subtree mergeinfo during reintegrate.
+@SkipUnless(server_has_mergeinfo)
+@Issue(4258)
+def subtree_to_and_fro(sbox):
+ "reintegrate considers source subtree mergeinfo"
+
+ # A (-----o-o-o-o------------x
+ # ( \ \ /
+ # ( \ \ /
+ # A_COPY ( o---------o--s--o--
+ # 2 3 4 5 6 7 8 9
+
+ # Some paths we'll care about.
+ A_COPY_gamma_path = sbox.ospath('A_COPY/D/gamma')
+ psi_path = sbox.ospath('A/D/H/psi')
+ A_COPY_D_path = sbox.ospath('A_COPY/D')
+ A_path = sbox.ospath('A')
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # Setup a simple 'trunk & branch': Copy ^/A to ^/A_COPY in r2 and then
+ # make a few edits under A in r3-6 (edits r3, r4, r6 are under subtree 'D'):
+ wc_disk, wc_status = set_up_branch(sbox)
+
+ # r7 - Edit a file on the branch.
+ svntest.main.file_write(A_COPY_gamma_path, "Branch edit to 'gamma'.\n")
+ svntest.actions.run_and_verify_svn(None, None, [], 'ci', wc_dir,
+ '-m', 'Edit a file on our branch')
+
+ # r8 - Do a subtree sync merge from ^/A/D to A_COPY/D.
+ # Note that among other things this changes A_COPY/D/H/psi.
+ svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+ svntest.actions.run_and_verify_svn(None, None, [], 'merge',
+ sbox.repo_url + '/A/D', A_COPY_D_path)
+ svntest.actions.run_and_verify_svn(None, None, [], 'ci', wc_dir,
+ '-m', 'Automatic subtree merge')
+
+ # r9 - Make an edit to A/D/H/psi.
+ svntest.main.file_write(psi_path, "Trunk Edit to 'psi'.\n")
+ svntest.actions.run_and_verify_svn(None, None, [], 'ci', wc_dir,
+ '-m', 'Edit a file on our trunk')
+
+ # Now reintegrate ^/A_COPY back to A. Prior to issue #4258's fix, the
+ # the subtree merge to A_COPY/D just looks like any other branch edit and
+ # was not considered a merge. So the changes which exist on A/D and were
+ # merged to A_COPY/D, were merged *back* to A, resulting in a conflict:
+ #
+ # C:\...\working_copies\merge_automatic_tests-18>svn merge ^^/A_COPY A
+ # DBG: merge.c:11461: base on source: ^/A@1
+ # DBG: merge.c:11462: base on target: ^/A@1
+ # DBG: merge.c:11567: yca ^/A@1
+ # DBG: merge.c:11568: base ^/A@1
+ # DBG: merge.c:11571: right ^/A_COPY@8
+ # Conflict discovered in file 'A\D\H\psi'.
+ # Select: (p) postpone, (df) diff-full, (e) edit,
+ # (mc) mine-conflict, (tc) theirs-conflict,
+ # (s) show all options: p
+ # --- Merging r2 through r9 into 'A':
+ # C A\D\H\psi
+ # U A\D\gamma
+ # --- Recording mergeinfo for merge of r2 through r9 into 'A':
+ # U A
+ # Summary of conflicts:
+ # Text conflicts: 1
+ svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+ exit_code, out, err = svntest.actions.run_and_verify_svn(
+ None, [], svntest.verify.AnyOutput,
+ 'merge', sbox.repo_url + '/A_COPY', A_path)
+
+ # Better to produce the same warning that explicitly using the
+ # --reintegrate option would produce:
+ svntest.verify.verify_outputs("Automatic Reintegrate failed, but not "
+ "in the way expected",
+ err, None,
+ "(svn: E195016: Reintegrate can only be used if "
+ "revisions 2 through 9 were previously "
+ "merged from .*/A to the reintegrate source, "
+ "but this is not the case:\n)"
+ "|( A_COPY\n)"
+ "|( Missing ranges: /A:5\n)"
+ "|(\n)"
+ "|" + svntest.main.stack_trace_regexp,
+ None,
+ True) # Match *all* lines of stdout
+
+#----------------------------------------------------------------------
+# Automatic merges ignore subtree mergeinfo gaps older than the last rev
+# synced to the target root.
+@SkipUnless(server_has_mergeinfo)
+def merge_to_reverse_cherry_subtree_to_merge_to(sbox):
+ "sync merge considers target subtree mergeinfo"
+
+ # A (--o-o-o-o------------------
+ # ( \ \ \ \
+ # ( \ \ \ \
+ # B ( o--o------x-------rc-----x
+
+ # Some paths we'll care about.
+ A_COPY_path = sbox.ospath('A_COPY')
+ A_COPY_B_path = sbox.ospath('A_COPY/B')
+ A_COPY_beta_path = sbox.ospath('A_COPY/B/E/beta')
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # Setup a simple 'trunk & branch': Copy ^/A to ^/A_COPY in r2 and then
+ # make a few edits under A in r3-6:
+ wc_disk, wc_status = set_up_branch(sbox)
+
+ # Sync merge ^/A to A_COPY, then reverse merge r5 from ^/A/B to A_COPY/B.
+ # This results in mergeinfo on the target which makes it appear that the
+ # branch is synced up to r6, but the subtree mergeinfo on A_COPY/B reveals
+ # that r5 has not been merged to that subtree:
+ #
+ # Properties on 'A_COPY':
+ # svn:mergeinfo
+ # /A:2-6
+ # Properties on 'A_COPY\B':
+ # svn:mergeinfo
+ # /A/B:2-4,6
+ svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+ svntest.actions.run_and_verify_svn(None, None, [], 'merge',
+ sbox.repo_url + '/A', A_COPY_path)
+ svntest.actions.run_and_verify_svn(None, None, [], 'merge', '-c-5',
+ sbox.repo_url + '/A/B',
+ A_COPY_B_path)
+ svntest.actions.run_and_verify_svn(None, None, [], 'ci', wc_dir, '-m',
+ 'sync merge and reverse subtree merge')
+
+ # Try an automatic sync merge from ^/A to A_COPY. Revision 5 should be
+ # merged to A_COPY/B as its subtree mergeinfo reveals that rev is missing,
+ # like so:
+ #
+ # >svn merge ^/A A_COPY
+ # --- Merging r5 into 'A_COPY\B':
+ # U A_COPY\B\E\beta
+ # --- Recording mergeinfo for merge of r5 through r7 into 'A_COPY':
+ # U A_COPY
+ # --- Recording mergeinfo for merge of r5 through r7 into 'A_COPY\B':
+ # U A_COPY\B
+ # --- Eliding mergeinfo from 'A_COPY\B':
+ # U A_COPY\B
+ #
+ # But the merge ignores the subtree mergeinfo and considers
+ # only the mergeinfo on the target itself (and thus is a no-op but for
+ # the mergeinfo change on the root of the merge target):
+ #
+ # >svn merge ^/A A_COPY
+ # --- Recording mergeinfo for merge of r7 into 'A_COPY':
+ # U A_COPY
+ #
+ # >svn diff
+ # Index: A_COPY
+ # ===================================================================
+ # --- A_COPY (revision 7)
+ # +++ A_COPY (working copy)
+ #
+ # Property changes on: A_COPY
+ # ___________________________________________________________________
+ # Modified: svn:mergeinfo
+ # Merged /A:r7
+ svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+ expected_output = wc.State(A_COPY_path, {
+ 'B/E/beta' : Item(status='U '),
+ })
+ expected_mergeinfo_output = wc.State(A_COPY_path, {
+ '' : Item(status=' U'),
+ 'B' : Item(status=' U'),
+ })
+ expected_elision_output = wc.State(A_COPY_path, {
+ 'B' : Item(status=' U'),
+ })
+ expected_status = wc.State(A_COPY_path, {
+ '' : Item(status=' M'),
+ 'B' : Item(status=' M'),
+ 'mu' : Item(status=' '),
+ 'B/E' : Item(status=' '),
+ 'B/E/alpha' : Item(status=' '),
+ 'B/E/beta' : Item(status='M '),
+ 'B/lambda' : Item(status=' '),
+ 'B/F' : Item(status=' '),
+ 'C' : Item(status=' '),
+ 'D' : Item(status=' '),
+ 'D/G' : Item(status=' '),
+ 'D/G/pi' : Item(status=' '),
+ 'D/G/rho' : Item(status=' '),
+ 'D/G/tau' : Item(status=' '),
+ 'D/gamma' : Item(status=' '),
+ 'D/H' : Item(status=' '),
+ 'D/H/chi' : Item(status=' '),
+ 'D/H/psi' : Item(status=' '),
+ 'D/H/omega' : Item(status=' '),
+ })
+ expected_status.tweak(wc_rev='7')
+ expected_disk = wc.State('', {
+ '' : Item(props={SVN_PROP_MERGEINFO : '/A:2-7'}),
+ 'B' : Item(),
+ 'mu' : Item("This is the file 'mu'.\n"),
+ 'B/E' : Item(),
+ 'B/E/alpha' : Item("This is the file 'alpha'.\n"),
+ 'B/E/beta' : Item("New content"),
+ 'B/lambda' : Item("This is the file 'lambda'.\n"),
+ 'B/F' : Item(),
+ 'C' : Item(),
+ 'D' : Item(),
+ 'D/G' : Item(),
+ 'D/G/pi' : Item("This is the file 'pi'.\n"),
+ 'D/G/rho' : Item("New content"),
+ 'D/G/tau' : Item("This is the file 'tau'.\n"),
+ 'D/gamma' : Item("This is the file 'gamma'.\n"),
+ 'D/H' : Item(),
+ 'D/H/chi' : Item("This is the file 'chi'.\n"),
+ 'D/H/psi' : Item("New content"),
+ 'D/H/omega' : Item("New content"),
+ })
+ expected_skip = wc.State(A_COPY_path, { })
+ svntest.actions.run_and_verify_merge(A_COPY_path, None, None,
+ sbox.repo_url + '/A', None,
+ expected_output,
+ expected_mergeinfo_output,
+ expected_elision_output,
+ expected_disk,
+ expected_status,
+ expected_skip,
+ None, None, None, None,
+ None, 1, 0, A_COPY_path)
+
+#----------------------------------------------------------------------
+# Automatic merges should notice ancestory for replaced files
+@SkipUnless(server_has_mergeinfo)
+def merge_replacement(sbox):
+ "notice ancestory for replaced files"
+
+ A_path = sbox.ospath('A')
+ A_COPY_path = sbox.ospath('A_copy')
+ A_COPY_mu_path = sbox.ospath('A_copy/mu')
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ sbox.simple_copy('A', 'A_copy')
+ # Commit as r2
+ sbox.simple_commit()
+
+ sbox.simple_rm('A_copy/B/lambda')
+ sbox.simple_copy('A_copy/D/gamma', 'A_copy/B/lambda')
+
+ sbox.simple_rm('A_copy/mu')
+ svntest.main.file_write(A_COPY_mu_path, "Branch edit to 'mu'.\n")
+ sbox.simple_add('A_copy/mu')
+
+ # Commit as r3
+ sbox.simple_commit()
+
+ expected_output = wc.State(A_path, {
+ 'B/lambda' : Item(status='R '),
+ 'mu' : Item(status='R '),
+ })
+ expected_mergeinfo_output = wc.State(A_path, {
+ '' : Item(status=' U'),
+ })
+ expected_elision_output = wc.State(A_path, {
+ })
+
+ expected_status = wc.State(A_path, {
+ '' : Item(status=' M', wc_rev='1'),
+ 'B' : Item(status=' ', wc_rev='1'),
+ 'mu' : Item(status='R ', copied='+', wc_rev='-'),
+ 'B/E' : Item(status=' ', wc_rev='1'),
+ 'B/E/alpha' : Item(status=' ', wc_rev='1'),
+ 'B/E/beta' : Item(status=' ', wc_rev='1'),
+ 'B/lambda' : Item(status='R ', copied='+', wc_rev='-'),
+ 'B/F' : Item(status=' ', wc_rev='1'),
+ 'C' : Item(status=' ', wc_rev='1'),
+ 'D' : Item(status=' ', wc_rev='1'),
+ 'D/G' : Item(status=' ', wc_rev='1'),
+ 'D/G/pi' : Item(status=' ', wc_rev='1'),
+ 'D/G/rho' : Item(status=' ', wc_rev='1'),
+ 'D/G/tau' : Item(status=' ', wc_rev='1'),
+ 'D/gamma' : Item(status=' ', wc_rev='1'),
+ 'D/H' : Item(status=' ', wc_rev='1'),
+ 'D/H/chi' : Item(status=' ', wc_rev='1'),
+ 'D/H/psi' : Item(status=' ', wc_rev='1'),
+ 'D/H/omega' : Item(status=' ', wc_rev='1'),
+ })
+
+ expected_disk = wc.State('', {
+ '' : Item(props={SVN_PROP_MERGEINFO : '/A_copy:2-3'}),
+ 'B' : Item(),
+ 'mu' : Item("Branch edit to 'mu'.\n"),
+ 'B/E' : Item(),
+ 'B/E/alpha' : Item("This is the file 'alpha'.\n"),
+ 'B/E/beta' : Item("This is the file 'beta'.\n"),
+ 'B/lambda' : Item("This is the file 'gamma'.\n"),
+ 'B/F' : Item(),
+ 'C' : Item(),
+ 'D' : Item(),
+ 'D/G' : Item(),
+ 'D/G/pi' : Item("This is the file 'pi'.\n"),
+ 'D/G/rho' : Item("This is the file 'rho'.\n"),
+ 'D/G/tau' : Item("This is the file 'tau'.\n"),
+ 'D/gamma' : Item("This is the file 'gamma'.\n"),
+ 'D/H' : Item(),
+ 'D/H/chi' : Item("This is the file 'chi'.\n"),
+ 'D/H/psi' : Item("This is the file 'psi'.\n"),
+ 'D/H/omega' : Item("This is the file 'omega'.\n"),
+ })
+
+ expected_skip = wc.State(A_COPY_path, { })
+
+ svntest.actions.run_and_verify_merge(A_path, None, None,
+ sbox.repo_url + '/A_copy', None,
+ expected_output,
+ expected_mergeinfo_output,
+ expected_elision_output,
+ expected_disk,
+ expected_status,
+ expected_skip,
+ None, None, None, None,
+ None, 1, 0, A_path)
+
+@SkipUnless(server_has_mergeinfo)
+@Issue(4313)
+
+# Test for issue #4313 'replaced merges source causes assertion during
+# automatic merge'
+def auto_merge_handles_replacements_in_merge_source(sbox):
+ "automerge handles replacements in merge source"
+
+ sbox.build()
+
+ A_path = sbox.ospath('A')
+ branch1_path = sbox.ospath('branch-1')
+ branch2_path = sbox.ospath('branch-2')
+
+ # r2 - Make two branches.
+ sbox.simple_copy('A', 'branch-1')
+ sbox.simple_copy('A', 'branch-2')
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ # r3 - Replace 'A' with 'branch-1'.
+ svntest.main.run_svn(None, 'del', A_path)
+ svntest.main.run_svn(None, 'copy', branch1_path, A_path)
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ # Merge^/A to branch-2, it should be a no-op but for mergeinfo changes,
+ # but it *should* work. Previously this failed because automatic merges
+ # weren't adhering to the merge source normalization rules, resulting in
+ # this assertion:
+ #
+ # >svn merge ^/A branch-2
+ # ..\..\..\subversion\libsvn_client\merge.c:4568: (apr_err=235000)
+ # svn: E235000: In file '..\..\..\subversion\libsvn_client\merge.c'
+ # line 4568: assertion failed (apr_hash_count(implicit_src_mergeinfo)
+ # == 1)
+ #
+ # This application has requested the Runtime to terminate it in an
+ # unusual way.
+ # Please contact the application's support team for more information.
+ svntest.actions.run_and_verify_svn(
+ None,
+ ["--- Recording mergeinfo for merge of r2 into '" + branch2_path + "':\n",
+ " U " + branch2_path + "\n",
+ "--- Recording mergeinfo for merge of r3 into '" + branch2_path + "':\n",
+ " G " + branch2_path + "\n"],
+ [], 'merge', sbox.repo_url + '/A', branch2_path)
+
+# Test for issue #4329 'automatic merge uses reintegrate type merge if
+# source is fully synced'
+@SkipUnless(server_has_mergeinfo)
+@Issue(4329)
+def effective_sync_results_in_reintegrate(sbox):
+ "an effectively synced branch gets reintegrated"
+
+ sbox.build()
+
+ iota_path = sbox.ospath('iota')
+ A_path = sbox.ospath('A')
+ psi_path = sbox.ospath('A/D/H/psi')
+ mu_path = sbox.ospath('A/mu')
+ branch_path = sbox.ospath('branch')
+ psi_branch_path = sbox.ospath('branch/D/H/psi')
+
+ # r2 - Make a branch.
+ sbox.simple_copy('A', 'branch')
+ sbox.simple_commit()
+
+ # r3 - An edit to a file on the trunk.
+ sbox.simple_append('A/mu', "Trunk edit to 'mu'\n", True)
+ sbox.simple_commit()
+
+ # r4 - An edit to a file on the branch
+ sbox.simple_append('branch/D/H/psi', "Branch edit to 'psi'\n", True)
+ sbox.simple_commit()
+
+ # r5 - Effectively sync all changes on trunk to the branch. We do this
+ # not via an automatic sync merge, but with a cherry pick that effectively
+ # merges the same changes (i.e. r3).
+ sbox.simple_update()
+ cherry_pick(sbox, 3, A_path, branch_path)
+
+ # r6 - Make another edit to the file on the trunk.
+ sbox.simple_append('A/mu', "2nd trunk edit to 'mu'\n", True)
+ sbox.simple_commit()
+
+ # Now try an explicit --reintegrate merge from ^/branch to A.
+ # This should work because since the resolution of
+ # http://subversion.tigris.org/issues/show_bug.cgi?id=3577
+ # if B is *effectively* synced with A, then B can be reintegrated
+ # to A.
+ sbox.simple_update()
+ expected_output = [
+ "--- Merging differences between repository URLs into '" +
+ A_path + "':\n",
+ "U " + psi_path + "\n",
+ "--- Recording mergeinfo for merge between repository URLs into '" +
+ A_path + "':\n",
+ " U " + A_path + "\n"]
+ svntest.actions.run_and_verify_svn(None, expected_output, [], 'merge',
+ sbox.repo_url + '/branch', A_path,
+ '--reintegrate')
+
+ # Revert the merge and try it again, this time without the --reintegrate
+ # option. The merge should still work with the same results.
+ #
+ # Previously this failed because the reintegrate code path is not followed,
+ # rather the automatic merge attempts a sync style merge of the yca (^/A@1)
+ # through the HEAD of the branch (^/branch@7). This results in a spurious
+ # conflict on A/mu as the edit made in r3 is reapplied.
+ #
+ # >svn merge ^/branch A
+ # --- Merging r2 through r6 into 'A':
+ # C A\mu
+ # U A\D\H\psi
+ # --- Recording mergeinfo for merge of r2 through r6 into 'A':
+ # U A
+ # Summary of conflicts:
+ # Text conflicts: 1
+ # Conflict discovered in file 'A\mu'.
+ # Select: (p) postpone, (df) diff-full, (e) edit, (m) merge,
+ # (mc) mine-conflict, (tc) theirs-conflict, (s) show all options: p
+ svntest.actions.run_and_verify_svn(None, None, [], 'revert', A_path, '-R')
+ svntest.actions.run_and_verify_svn(None, expected_output, [], 'merge',
+ sbox.repo_url + '/branch', A_path)
+
+@Issue(4481)
+def reintegrate_subtree_not_updated(sbox):
+ "reintegrate subtree not updated"
+
+ sbox.build()
+
+ # Create change on branch 'D_1'
+ sbox.simple_copy('A/D', 'D_1')
+ sbox.simple_commit()
+ sbox.simple_append('D_1/G/pi', "D_1/G pi edit\n")
+ sbox.simple_append('D_1/H/chi', "D_1/H chi edit\n")
+ sbox.simple_commit()
+
+ # Merge back to 'D' with two subtree merges
+ expected_output = [
+ "--- Merging r2 through r3 into '"
+ + sbox.ospath('A/D/G') + "':\n",
+ "U "
+ + sbox.ospath('A/D/G/pi') + "\n",
+ "--- Recording mergeinfo for merge of r2 through r3 into '"
+ + sbox.ospath('A/D/G') + "':\n",
+ " U "
+ + sbox.ospath('A/D/G') + "\n"]
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'merge',
+ sbox.repo_url + '/D_1/G',
+ sbox.ospath('A/D/G'))
+ expected_output = [
+ "--- Merging r2 through r3 into '"
+ + sbox.ospath('A/D/H') + "':\n",
+ "U "
+ + sbox.ospath('A/D/H/chi') + "\n",
+ "--- Recording mergeinfo for merge of r2 through r3 into '"
+ + sbox.ospath('A/D/H') + "':\n",
+ " U "
+ + sbox.ospath('A/D/H') + "\n"]
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'merge',
+ sbox.repo_url + '/D_1/H',
+ sbox.ospath('A/D/H'))
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ # Create branch 'D_2'
+ sbox.simple_copy('A/D', 'D_2')
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ # Create change on 'D_2'
+ sbox.simple_append('D_2/G/pi', "D_2/G pi edit\n")
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ # Create change on 'D'
+ sbox.simple_append('A/D/G/rho', "D/G rho edit\n")
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ # Sync merge to 'D_2' (doesn't record mergeinfo on 'D_2/H' subtree)
+ expected_output = [
+ "--- Merging r5 through r7 into '"
+ + sbox.ospath('D_2') + "':\n",
+ "U "
+ + sbox.ospath('D_2/G/rho') + "\n",
+ "--- Recording mergeinfo for merge of r5 through r7 into '"
+ + sbox.ospath('D_2') + "':\n",
+ " U "
+ + sbox.ospath('D_2') + "\n",
+ "--- Recording mergeinfo for merge of r5 through r7 into '"
+ + sbox.ospath('D_2/G') + "':\n",
+ " U "
+ + sbox.ospath('D_2/G') + "\n"]
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'merge',
+ sbox.repo_url + '/A/D',
+ sbox.ospath('D_2'))
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ # Reintegrate 'D_2' to 'D'
+ expected_output = [
+ "--- Merging differences between repository URLs into '"
+ + sbox.ospath('A/D') + "':\n",
+ "U "
+ + sbox.ospath('A/D/G/pi') + "\n",
+ " U "
+ + sbox.ospath('A/D/G') + "\n",
+ "--- Recording mergeinfo for merge between repository URLs into '"
+ + sbox.ospath('A/D') + "':\n",
+ " U "
+ + sbox.ospath('A/D') + "\n",
+ " U "
+ + sbox.ospath('A/D/G') + "\n"]
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'merge',
+ sbox.repo_url + '/D_2',
+ sbox.ospath('A/D'))
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ # merge to 'D_2'. This merge previously failed with this error:
+ #
+ # svn: E195016: Reintegrate can only be used if revisions 5 through 9 were
+ # previously merged from [URL]/D_2 to the reintegrate source, but this is
+ # not the case:
+ # A/D/G
+ # Missing ranges: /A/D/G:7
+ #
+ expected_output = [
+ "--- Merging differences between repository URLs into '"
+ + sbox.ospath('D_2') + "':\n",
+ " U "
+ + sbox.ospath('D_2/G') + "\n",
+ "--- Recording mergeinfo for merge between repository URLs into '"
+ + sbox.ospath('D_2') + "':\n",
+ " U "
+ + sbox.ospath('D_2') + "\n",
+ " G "
+ + sbox.ospath('D_2/G') + "\n"]
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'merge',
+ sbox.repo_url + '/A/D',
+ sbox.ospath('D_2'))
+ sbox.simple_commit()
+ sbox.simple_update()
+
+########################################################################
+# Run the tests
+
+
+# list all tests here, starting with None:
+test_list = [ None,
+ merge_once_1,
+ merge_once_2,
+ merge_once_3,
+ merge_once_4,
+ merge_twice_same_direction_1,
+ merge_twice_same_direction_2,
+ merge_to_and_fro_1_1,
+ merge_to_and_fro_1_2,
+ merge_to_and_fro_2_1,
+ merge_to_and_fro_2_2,
+ merge_to_and_fro_3_1,
+ merge_to_and_fro_3_2,
+ merge_to_and_fro_4_1,
+ merge_to_and_fro_4_2,
+ cherry1_fwd,
+ cherry2_fwd,
+ cherry3_fwd,
+ subtree_to_and_fro,
+ merge_to_reverse_cherry_subtree_to_merge_to,
+ merge_replacement,
+ auto_merge_handles_replacements_in_merge_source,
+ effective_sync_results_in_reintegrate,
+ reintegrate_subtree_not_updated,
+ ]
+
+if __name__ == '__main__':
+ svntest.main.run_tests(test_list)
+ # NOTREACHED
+
+
+### End of file.
diff --git a/subversion/tests/cmdline/merge_reintegrate_tests.py b/subversion/tests/cmdline/merge_reintegrate_tests.py
index fc46c9c..8b3e91f 100755
--- a/subversion/tests/cmdline/merge_reintegrate_tests.py
+++ b/subversion/tests/cmdline/merge_reintegrate_tests.py
@@ -48,6 +48,62 @@ from merge_tests import set_up_branch
from merge_tests import expected_merge_output
#----------------------------------------------------------------------
+def run_reintegrate(src_url, tgt_path):
+ """Run 'svn merge --reintegrate SRC_URL TGT_PATH'. Raise an error if
+ there is nothing on stdout, anything on stderr, or a non-zero exit
+ code.
+ """
+ svntest.actions.run_and_verify_svn(None, svntest.verify.AnyOutput, [],
+ 'merge', '--reintegrate',
+ src_url, tgt_path)
+
+def run_reintegrate_expect_error(src_url, tgt_path,
+ expected_stdout, expected_stderr):
+ """Run 'svn merge --reintegrate SRC_URL TGT_PATH'. Raise an error
+ unless stdout and stderr both match and the exit code is non-zero.
+ Every line of stderr must match the regex EXPECTED_STDERR.
+ """
+ expected_stderr += "|" + svntest.main.stack_trace_regexp
+
+ # The actions.run_and_verify_* methods are happy if one line of the error
+ # matches the regex, but we want to check that every line matches.
+ # So we will pass the stderr to svntest.verify.verify_outputs()
+ # ourselves, but as the 'actual_stdout' argument, that way each line of
+ # error must match the regex.
+ exit_code, out, err = svntest.actions.run_and_verify_svn(
+ None, expected_stdout, svntest.verify.AnyOutput,
+ 'merge', '--reintegrate',
+ src_url, tgt_path)
+ assert exit_code
+ svntest.verify.verify_outputs(
+ "Reintegrate failed but not in the way expected",
+ err, None,
+ expected_stderr, None,
+ True) # Match *all* lines
+
+def run_and_verify_reintegrate(tgt_dir, src_url,
+ output_tree,
+ mergeinfo_output_tree,
+ elision_output_tree,
+ disk_tree, status_tree, skip_tree,
+ error_re_string = None,
+ check_props = True,
+ dry_run = True):
+ """Run 'svn merge --reintegrate SRC_URL TGT_DIR'. Raise an error if
+ there is nothing on stdout, anything on stderr, or a non-zero exit
+ code, or if the expected ERROR_RE_STRING or any of the given expected
+ trees don't match.
+ """
+ svntest.actions.run_and_verify_merge(
+ tgt_dir, None, None, src_url, None,
+ output_tree, mergeinfo_output_tree, elision_output_tree,
+ disk_tree, status_tree, skip_tree,
+ error_re_string,
+ None, None, None, None, check_props, dry_run,
+ '--reintegrate', tgt_dir)
+
+
+#----------------------------------------------------------------------
@SkipUnless(server_has_mergeinfo)
@Issue(3640)
def basic_reintegrate(sbox):
@@ -61,7 +117,7 @@ def basic_reintegrate(sbox):
expected_disk, expected_status = set_up_branch(sbox)
# Make a change on the branch, to A/mu. Commit in r7.
- svntest.main.file_write(os.path.join(wc_dir, "A_COPY", "mu"),
+ svntest.main.file_write(sbox.ospath('A_COPY/mu'),
"Changed on the branch.")
expected_output = wc.State(wc_dir, {'A_COPY/mu' : Item(verb='Sending')})
expected_status.tweak('A_COPY/mu', wc_rev=7)
@@ -77,7 +133,7 @@ def basic_reintegrate(sbox):
None, None, None, None, None, True)
# Merge from trunk to branch (ie, r3-6), using normal cherry-harvest.
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
+ A_COPY_path = sbox.ospath('A_COPY')
expected_output = wc.State(A_COPY_path, {
'D/H/psi' : Item(status='U '),
'D/G/rho' : Item(status='U '),
@@ -172,7 +228,7 @@ def basic_reintegrate(sbox):
# *finally*, actually run merge --reintegrate in trunk with the
# branch URL. This should bring in the mu change and the tauprime
# change.
- A_path = os.path.join(wc_dir, "A")
+ A_path = sbox.ospath('A')
expected_output = wc.State(A_path, {
'mu' : Item(status='U '),
})
@@ -204,17 +260,15 @@ def basic_reintegrate(sbox):
})
k_expected_disk.tweak('', props={SVN_PROP_MERGEINFO : '/A_COPY:2-8'})
expected_skip = wc.State(A_path, {})
- svntest.actions.run_and_verify_merge(A_path, None, None,
- sbox.repo_url + '/A_COPY', None,
+ run_and_verify_reintegrate(A_path,
+ sbox.repo_url + '/A_COPY',
expected_output,
expected_mergeinfo_output,
expected_elision_output,
k_expected_disk,
k_expected_status,
expected_skip,
- None, None, None, None,
- None, True, True,
- '--reintegrate', A_path)
+ None, True, True)
# Test issue #3640:
#
@@ -230,7 +284,7 @@ def basic_reintegrate(sbox):
sbox.repo_url + '/A_MOVED',
'-m', 'Copy A to A_MOVED')
svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
- A_MOVED_path = os.path.join(wc_dir, "A_MOVED")
+ A_MOVED_path = sbox.ospath('A_MOVED')
expected_output = wc.State(A_MOVED_path, {
'mu' : Item(status='U '),
})
@@ -263,17 +317,15 @@ def basic_reintegrate(sbox):
expected_status.tweak(wc_rev=9)
k_expected_disk.tweak('', props={SVN_PROP_MERGEINFO : '/A_COPY:2-9'})
expected_skip = wc.State(A_MOVED_path, {})
- svntest.actions.run_and_verify_merge(A_MOVED_path, None, None,
- sbox.repo_url + '/A_COPY', None,
+ run_and_verify_reintegrate(A_MOVED_path,
+ sbox.repo_url + '/A_COPY',
expected_output,
expected_mergeinfo_output,
expected_elision_output,
k_expected_disk,
expected_status,
expected_skip,
- None, None, None, None,
- None, True, True,
- '--reintegrate', A_MOVED_path)
+ None, True, True)
#----------------------------------------------------------------------
def reintegrate_with_rename(sbox):
@@ -285,7 +337,7 @@ def reintegrate_with_rename(sbox):
expected_disk, expected_status = set_up_branch(sbox)
# Make a change on the branch, to A/mu. Commit in r7.
- svntest.main.file_write(os.path.join(wc_dir, "A_COPY", "mu"),
+ svntest.main.file_write(sbox.ospath('A_COPY/mu'),
"Changed on the branch.")
expected_output = wc.State(wc_dir, {'A_COPY/mu' : Item(verb='Sending')})
expected_status.tweak('A_COPY/mu', wc_rev=7)
@@ -301,7 +353,7 @@ def reintegrate_with_rename(sbox):
None, None, None, None, None, True)
# Merge from trunk to branch (ie, r3-6), using normal cherry-harvest.
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
+ A_COPY_path = sbox.ospath('A_COPY')
expected_output = wc.State(A_COPY_path, {
'D/H/psi' : Item(status='U '),
'D/G/rho' : Item(status='U '),
@@ -452,7 +504,7 @@ def reintegrate_with_rename(sbox):
# *finally*, actually run merge --reintegrate in trunk with the
# branch URL. This should bring in the mu change and the tauprime
# change.
- A_path = os.path.join(wc_dir, "A")
+ A_path = sbox.ospath('A')
expected_output = wc.State(A_path, {
'mu' : Item(status='U '),
'D/G/tauprime' : Item(status='A '),
@@ -492,17 +544,15 @@ def reintegrate_with_rename(sbox):
contents="This is the file 'tau'.\n")
})
expected_skip = wc.State(A_path, {})
- svntest.actions.run_and_verify_merge(A_path, None, None,
- sbox.repo_url + '/A_COPY', None,
+ run_and_verify_reintegrate(A_path,
+ sbox.repo_url + '/A_COPY',
expected_output,
expected_mergeinfo_output,
expected_elision_output,
k_expected_disk,
k_expected_status,
expected_skip,
- None, None, None, None,
- None, True, True,
- '--reintegrate', A_path)
+ None, True, True)
# Finally, commit the result of the merge (r10).
expected_output = wc.State(wc_dir, {
@@ -527,7 +577,7 @@ def reintegrate_branch_never_merged_to(sbox):
expected_disk, expected_status = set_up_branch(sbox)
# Make a change on the branch, to A_COPY/mu. Commit in r7.
- svntest.main.file_write(os.path.join(wc_dir, "A_COPY", "mu"),
+ svntest.main.file_write(sbox.ospath('A_COPY/mu'),
"Changed on the branch.")
expected_output = wc.State(wc_dir, {'A_COPY/mu' : Item(verb='Sending')})
expected_status.tweak('A_COPY/mu', wc_rev=7)
@@ -570,7 +620,7 @@ def reintegrate_branch_never_merged_to(sbox):
# *finally*, actually run merge --reintegrate in trunk with the
# branch URL. This should bring in the mu change and the tauprime
# change.
- A_path = os.path.join(wc_dir, "A")
+ A_path = sbox.ospath('A')
expected_output = wc.State(A_path, {
'mu' : Item(status='U '),
'D/G/tauprime' : Item(status='A '),
@@ -625,17 +675,15 @@ def reintegrate_branch_never_merged_to(sbox):
'D/H/psi' : Item("New content"),
})
expected_skip = wc.State(A_path, {})
- svntest.actions.run_and_verify_merge(A_path, None, None,
- sbox.repo_url + '/A_COPY', None,
+ run_and_verify_reintegrate(A_path,
+ sbox.repo_url + '/A_COPY',
expected_output,
expected_mergeinfo_output,
expected_elision_output,
k_expected_disk,
k_expected_status,
expected_skip,
- None, None, None, None,
- None, True, True,
- '--reintegrate', A_path)
+ None, True, True)
# Finally, commit the result of the merge (r9).
expected_output = wc.State(wc_dir, {
@@ -655,23 +703,30 @@ def reintegrate_fail_on_modified_wc(sbox):
"merge --reintegrate should fail in modified wc"
sbox.build()
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, "A")
+ A_path = sbox.ospath('A')
+ A_COPY_path = sbox.ospath('A_COPY')
mu_path = os.path.join(A_path, "mu")
ignored_expected_disk, ignored_expected_status = set_up_branch(sbox)
+
+ # Do a 'sync' merge first so that the following merge really needs to be a
+ # reintegrate, so that an equivalent automatic merge would behave the same.
+ svntest.main.run_svn(None, 'merge', sbox.repo_url + '/A', A_COPY_path)
+ sbox.simple_commit()
+
svntest.main.file_write(mu_path, "Changed on 'trunk' (the merge target).")
sbox.simple_update() # avoid mixed-revision error
- svntest.actions.run_and_verify_merge(
- A_path, None, None, sbox.repo_url + '/A_COPY', None, None, None, None,
+ run_and_verify_reintegrate(
+ A_path, sbox.repo_url + '/A_COPY', None, None, None,
None, None, None,
".*Cannot merge into a working copy that has local modifications.*",
- None, None, None, None, True, False, '--reintegrate', A_path)
+ True, False)
#----------------------------------------------------------------------
def reintegrate_fail_on_mixed_rev_wc(sbox):
"merge --reintegrate should fail in mixed-rev wc"
sbox.build()
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, "A")
+ A_path = sbox.ospath('A')
mu_path = os.path.join(A_path, "mu")
ignored_expected_disk, expected_status = set_up_branch(sbox)
# Make and commit a change, in order to get a mixed-rev wc.
@@ -683,22 +738,41 @@ def reintegrate_fail_on_mixed_rev_wc(sbox):
svntest.actions.run_and_verify_commit(wc_dir, expected_output,
expected_status, None, wc_dir)
# Try merging into that same wc, expecting failure.
- svntest.actions.run_and_verify_merge(
- A_path, None, None, sbox.repo_url + '/A_COPY', None, None, None, None,
+ run_and_verify_reintegrate(
+ A_path, sbox.repo_url + '/A_COPY', None, None, None,
None, None, None,
".*Cannot merge into mixed-revision working copy.*",
- None, None, None, None, True, False, '--reintegrate', A_path)
+ True, False)
#----------------------------------------------------------------------
def reintegrate_fail_on_switched_wc(sbox):
"merge --reintegrate should fail in switched wc"
sbox.build()
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, "A")
+ A_path = sbox.ospath('A')
+ A_COPY_path = sbox.ospath('A_COPY')
G_path = os.path.join(A_path, "D", "G")
switch_url = sbox.repo_url + "/A/D/H"
expected_disk, expected_status = set_up_branch(sbox)
+ # Do a 'sync' merge first so that the following merge really needs to be a
+ # reintegrate, so that an equivalent automatic merge would behave the same.
+ expected_disk.tweak(
+ 'A_COPY/D/H/psi',
+ 'A_COPY/D/G/rho',
+ 'A_COPY/B/E/beta',
+ 'A_COPY/D/H/omega',
+ contents="New content")
+ expected_status.tweak(
+ 'A_COPY/D/H/psi',
+ 'A_COPY/D/G/rho',
+ 'A_COPY/B/E/beta',
+ 'A_COPY/D/H/omega',
+ 'A_COPY',
+ wc_rev=7)
+ svntest.main.run_svn(None, 'merge', sbox.repo_url + '/A', A_COPY_path)
+ sbox.simple_commit()
+
# Switch a subdir of the target.
expected_output = svntest.wc.State(wc_dir, {
'A/D/G/pi' : Item(status='D '),
@@ -716,10 +790,10 @@ def reintegrate_fail_on_switched_wc(sbox):
})
expected_status.remove('A/D/G/pi', 'A/D/G/rho', 'A/D/G/tau')
expected_status.add({
- 'A/D/G' : Item(status=' ', wc_rev=6, switched='S'),
- 'A/D/G/chi' : Item(status=' ', wc_rev=6),
- 'A/D/G/psi' : Item(status=' ', wc_rev=6),
- 'A/D/G/omega' : Item(status=' ', wc_rev=6),
+ 'A/D/G' : Item(status=' ', wc_rev=7, switched='S'),
+ 'A/D/G/chi' : Item(status=' ', wc_rev=7),
+ 'A/D/G/psi' : Item(status=' ', wc_rev=7),
+ 'A/D/G/omega' : Item(status=' ', wc_rev=7),
})
svntest.actions.run_and_verify_switch(wc_dir,
G_path,
@@ -730,11 +804,11 @@ def reintegrate_fail_on_switched_wc(sbox):
None, None, None, None, None,
False, '--ignore-ancestry')
sbox.simple_update() # avoid mixed-revision error
- svntest.actions.run_and_verify_merge(
- A_path, None, None, sbox.repo_url + '/A_COPY', None, None, None, None,
+ run_and_verify_reintegrate(
+ A_path, sbox.repo_url + '/A_COPY', None, None, None,
None, None, None,
".*Cannot merge into a working copy with a switched subtree.*",
- None, None, None, None, True, False, '--reintegrate', A_path)
+ True, False)
#----------------------------------------------------------------------
# Test for issue #3603 'allow reintegrate merges into WCs with
@@ -749,11 +823,11 @@ def reintegrate_on_shallow_wc(sbox):
expected_disk, expected_status = set_up_branch(sbox, branch_only = True)
# Some paths we'll care about
- A_path = os.path.join(wc_dir, "A")
- A_D_path = os.path.join(wc_dir, "A", "D")
- mu_COPY_path = os.path.join(wc_dir, "A_COPY", "mu")
- psi_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "psi")
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
+ A_path = sbox.ospath('A')
+ A_D_path = sbox.ospath('A/D')
+ mu_COPY_path = sbox.ospath('A_COPY/mu')
+ psi_COPY_path = sbox.ospath('A_COPY/D/H/psi')
+ A_COPY_path = sbox.ospath('A_COPY')
# r3 - Make a change on the A_COPY branch that will be
# reintegrated back to A.
@@ -804,27 +878,26 @@ def reintegrate_on_shallow_wc(sbox):
'D' : Item(), # Don't expect anything under D, its depth is empty!
})
expected_A_skip = wc.State(A_path, {})
- svntest.actions.run_and_verify_merge(A_path, None, None,
- sbox.repo_url + '/A_COPY', None,
+ run_and_verify_reintegrate(A_path,
+ sbox.repo_url + '/A_COPY',
expected_output,
expected_mergeinfo_output,
expected_elision_output,
expected_A_disk,
expected_A_status,
expected_A_skip,
- None, None, None, None,
- None, 1, 1, "--reintegrate", A_path)
+ None, 1, 1)
# Now revert the reintegrate and make a second change on the
# branch in r4, but this time change a subtree that corresponds
# to the missing (shallow) portion of the source. The reintegrate
- # should still succeed, albeit skipping some paths.
+ # should still succeed.
svntest.actions.run_and_verify_svn(None, None, [], 'revert', '-R', wc_dir)
svntest.main.file_write(psi_COPY_path, "more branch work")
svntest.main.run_svn(None, 'commit', '-m',
'Some more work on the A_COPY branch', wc_dir)
- # Reuse the same expectations as the prior merge, except that
- # non-inheritable mergeinfo is set on the root of the missing subtree...
+ # Reuse the same expectations as the prior merge, except for the mergeinfo
+ # on the target root that now includes the latest rev on the branch.
expected_mergeinfo_output.add({
'D' : Item(status=' U')
})
@@ -832,20 +905,25 @@ def reintegrate_on_shallow_wc(sbox):
expected_A_disk.tweak('D', props={SVN_PROP_MERGEINFO : '/A_COPY/D:2-4*'})
# ... a depth-restricted item is skipped ...
expected_A_skip.add({
- 'D/H' : Item()
+ 'D/H' : Item(verb='Skipped missing target')
+ })
+ expected_output.add({
+ # Below the skip
+ 'D/H/psi' : Item(status=' ', treeconflict='U'),
})
- # ... and the mergeinfo on the target root includes the latest rev on the branch.
+ # Currently this fails due to r1424469. For a full explanation see
+ # http://svn.haxx.se/dev/archive-2012-12/0472.shtml
+ # and http://svn.haxx.se/dev/archive-2012-12/0475.shtml
expected_A_disk.tweak('', props={SVN_PROP_MERGEINFO : '/A_COPY:2-4'})
- svntest.actions.run_and_verify_merge(A_path, None, None,
- sbox.repo_url + '/A_COPY', None,
+ run_and_verify_reintegrate(A_path,
+ sbox.repo_url + '/A_COPY',
expected_output,
expected_mergeinfo_output,
expected_elision_output,
expected_A_disk,
expected_A_status,
expected_A_skip,
- None, None, None, None,
- None, 1, 1, "--reintegrate", A_path)
+ None, 1, 1)
#----------------------------------------------------------------------
@SkipUnless(server_has_mergeinfo)
@@ -854,13 +932,13 @@ def reintegrate_fail_on_stale_source(sbox):
sbox.build()
wc_dir = sbox.wc_dir
expected_disk, expected_status = set_up_branch(sbox)
- A_path = os.path.join(wc_dir, "A")
+ A_path = sbox.ospath('A')
mu_path = os.path.join(A_path, "mu")
svntest.main.file_append(mu_path, 'some text appended to mu\n')
svntest.actions.run_and_verify_svn(None, None, [], 'commit',
- '-m', 'a change to mu', mu_path);
+ '-m', 'a change to mu', mu_path)
# Unmix the revisions in the working copy.
- svntest.actions.run_and_verify_svn(None, None, [], 'update', wc_dir);
+ svntest.actions.run_and_verify_svn(None, None, [], 'update', wc_dir)
# The merge --reintegrate succeeds but since there were no changes
# on A_COPY after it was branched the only result is updated mergeinfo
# on the reintegrate target.
@@ -914,16 +992,15 @@ def reintegrate_fail_on_stale_source(sbox):
'D/H/omega' : Item("New content"),
})
expected_skip = wc.State(A_path, { })
- svntest.actions.run_and_verify_merge(A_path, None, None,
- sbox.repo_url + '/A_COPY', None,
+ run_and_verify_reintegrate(A_path,
+ sbox.repo_url + '/A_COPY',
expected_output,
expected_mergeinfo_output,
expected_elision_output,
expected_disk,
expected_status,
expected_skip,
- [], None, None, None, None, True, True,
- '--reintegrate', A_path)
+ [], True, True)
#----------------------------------------------------------------------
def merge_file_with_space_in_its_path(sbox):
@@ -931,7 +1008,7 @@ def merge_file_with_space_in_its_path(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- some_dir = os.path.join(wc_dir, "some dir")
+ some_dir = sbox.ospath('some dir')
file1 = os.path.join(some_dir, "file1")
file2 = os.path.join(some_dir, "file2")
@@ -953,9 +1030,7 @@ def merge_file_with_space_in_its_path(sbox):
"ci", "-m", "r4", wc_dir)
target_url = sbox.repo_url + '/some%20dir/file2'
- svntest.actions.run_and_verify_svn(None, None, [],
- "merge", "--reintegrate", target_url,
- file1)
+ run_reintegrate(target_url, file1)
#----------------------------------------------------------------------
@SkipUnless(server_has_mergeinfo)
@@ -963,43 +1038,65 @@ def reintegrate_with_subtree_mergeinfo(sbox):
"merge --reintegrate with subtree mergeinfo"
# Create a standard greek tree, branch A to A_COPY in r2, A to A_COPY_2 in
- # r3, A to A_COPY_3 in r3, and then make some changes under A in r5-8.
+ # r3, A to A_COPY_3 in r4, and then make some changes under A in r5-8.
+ #
+ # A_COPY_3 4---------
+ # /
+ # A -1--------5-6-7-8-
+ # \ \
+ # A_COPY 2-\-----------
+ # \
+ # A_COPY_2 3---------
+
sbox.build()
wc_dir = sbox.wc_dir
expected_disk, expected_status = set_up_branch(sbox, False, 3)
# Some paths we'll care about
- gamma_COPY_3_path = os.path.join(wc_dir, "A_COPY_3", "D", "gamma")
- D_path = os.path.join(wc_dir, "A", "D")
- gamma_path = os.path.join(wc_dir, "A", "D", "gamma")
- mu_COPY_2_path = os.path.join(wc_dir, "A_COPY_2", "mu")
- mu_path = os.path.join(wc_dir, "A", "mu")
- mu_COPY_path = os.path.join(wc_dir, "A_COPY", "mu")
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- D_COPY_path = os.path.join(wc_dir, "A_COPY")
- beta_COPY_path = os.path.join(wc_dir, "A_COPY", "B", "E", "beta")
- gamma_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "gamma")
- gamma_moved_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "gamma_moved")
- gamma_moved_path = os.path.join(wc_dir, "A", "D", "gamma_moved")
- rho_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "G", "rho")
- omega_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "omega")
- psi_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "psi")
- D_COPY_path = os.path.join(wc_dir, "A_COPY", "D")
- alpha_COPY_path = os.path.join(wc_dir, "A_COPY", "B", "E", "alpha")
- A_path = os.path.join(wc_dir, "A")
+ gamma_COPY_3_path = sbox.ospath('A_COPY_3/D/gamma')
+ D_path = sbox.ospath('A/D')
+ gamma_path = sbox.ospath('A/D/gamma')
+ mu_COPY_2_path = sbox.ospath('A_COPY_2/mu')
+ mu_path = sbox.ospath('A/mu')
+ mu_COPY_path = sbox.ospath('A_COPY/mu')
+ A_COPY_path = sbox.ospath('A_COPY')
+ D_COPY_path = sbox.ospath('A_COPY')
+ beta_COPY_path = sbox.ospath('A_COPY/B/E/beta')
+ gamma_COPY_path = sbox.ospath('A_COPY/D/gamma')
+ gamma_moved_COPY_path = sbox.ospath('A_COPY/D/gamma_moved')
+ gamma_moved_path = sbox.ospath('A/D/gamma_moved')
+ rho_COPY_path = sbox.ospath('A_COPY/D/G/rho')
+ omega_COPY_path = sbox.ospath('A_COPY/D/H/omega')
+ psi_COPY_path = sbox.ospath('A_COPY/D/H/psi')
+ D_COPY_path = sbox.ospath('A_COPY/D')
+ alpha_COPY_path = sbox.ospath('A_COPY/B/E/alpha')
+ A_path = sbox.ospath('A')
# Now set up a situation where we try to reintegrate A_COPY back to A but
# both of these paths have subtree mergeinfo. Iff the mergeinfo on A_COPY
# reflects that the same revisions have been applied across all of A_COPY,
- # then the reintegrate merge should succeed.
+ # then the reintegrate merge should succeed. We'll try that case first.
+ #
+ # A_COPY_3 4-------[9]--
+ # / \
+ # / \
+ # A -1--------5-6-7-8---10-------------------WC--
+ # \ \ (D) \ /reint.
+ # \ \ (mu) \ /
+ # A_COPY 2-\--------------------12---13--14------
+ # \ /
+ # \ /
+ # A_COPY_2 3-------------[11]--
#
+ # Key: [#] = cherry-picked revision; (foo) = merge of subtree 'foo'
+ # Note: These diagrams show an overview and do not capture every detail.
+
# r9 - Make a text change to A_COPY_3/D/gamma
svntest.main.file_write(gamma_COPY_3_path, "New content")
expected_output = wc.State(wc_dir, {'A_COPY_3/D/gamma' : Item(verb='Sending')})
expected_status.tweak('A_COPY_3/D/gamma', wc_rev=9)
svntest.actions.run_and_verify_commit(wc_dir, expected_output,
expected_status, None, wc_dir)
- expected_disk.tweak('A_COPY_3/D/gamma', contents="New content")
# r10 - Merge r9 from A_COPY_3/D to A/D, creating explicit subtree
# mergeinfo under A. For this and every subsequent merge we update the WC
@@ -1019,8 +1116,6 @@ def reintegrate_with_subtree_mergeinfo(sbox):
expected_status.tweak('A/D', 'A/D/gamma', wc_rev=10)
svntest.actions.run_and_verify_commit(wc_dir, expected_output,
expected_status, None, wc_dir)
- expected_disk.tweak('A/D/gamma', contents="New content")
- expected_disk.tweak('A/D', props={SVN_PROP_MERGEINFO : '/A_COPY_3/D:9'})
# r11 - Make a text change to A_COPY_2/mu
svntest.main.file_write(mu_COPY_2_path, "New content")
@@ -1028,7 +1123,6 @@ def reintegrate_with_subtree_mergeinfo(sbox):
expected_status.tweak('A_COPY_2/mu', wc_rev=11)
svntest.actions.run_and_verify_commit(wc_dir, expected_output,
expected_status, None, wc_dir)
- expected_disk.tweak('A_COPY_2/mu', contents="New content")
# r12 - Merge r11 from A_COPY_2/mu to A_COPY/mu
svntest.actions.run_and_verify_svn(None, exp_noop_up_out(11), [], 'up',
@@ -1045,7 +1139,6 @@ def reintegrate_with_subtree_mergeinfo(sbox):
expected_status.tweak('A_COPY/mu', wc_rev=12)
svntest.actions.run_and_verify_commit(wc_dir, expected_output,
expected_status, None, wc_dir)
- expected_disk.tweak('A_COPY/mu', contents="New content")
# r13 - Do a 'synch' cherry harvest merge of all available revisions
# from A to A_COPY
@@ -1084,16 +1177,6 @@ def reintegrate_with_subtree_mergeinfo(sbox):
wc_rev=13)
svntest.actions.run_and_verify_commit(wc_dir, expected_output,
expected_status, None, wc_dir)
- expected_disk.tweak('A_COPY/B/E/beta',
- 'A_COPY/D',
- 'A_COPY/D/G/rho',
- 'A_COPY/D/H/omega',
- 'A_COPY/D/H/psi',
- 'A_COPY/D/gamma',
- contents="New content")
- expected_disk.tweak('A_COPY', props={SVN_PROP_MERGEINFO : '/A:2-12'})
- expected_disk.tweak('A_COPY/D',
- props={SVN_PROP_MERGEINFO : '/A/D:2-12\n/A_COPY_3/D:9\n'})
# r14 - Make a text change on A_COPY/B/E/alpha
svntest.main.file_write(alpha_COPY_path, "New content")
@@ -1101,7 +1184,6 @@ def reintegrate_with_subtree_mergeinfo(sbox):
expected_status.tweak('A_COPY/B/E/alpha', wc_rev=14)
svntest.actions.run_and_verify_commit(wc_dir, expected_output,
expected_status, None, wc_dir)
- expected_disk.tweak('A_COPY/B/E/alpha', contents="New content")
# Now, reintegrate A_COPY to A. This should succeed.
svntest.actions.run_and_verify_svn(None, exp_noop_up_out(14), [], 'up',
@@ -1166,22 +1248,32 @@ def reintegrate_with_subtree_mergeinfo(sbox):
'D/H/omega' : Item("New content"),
})
expected_A_skip = wc.State(A_COPY_path, {})
- svntest.actions.run_and_verify_merge(A_path, None, None,
- sbox.repo_url + '/A_COPY', None,
+ run_and_verify_reintegrate(A_path,
+ sbox.repo_url + '/A_COPY',
expected_output,
expected_mergeinfo_output,
expected_elision_output,
expected_A_disk,
expected_A_status,
expected_A_skip,
- None, None, None, None,
- None, 1, 1, "--reintegrate", A_path)
+ None, 1, 1)
# Make some more changes to A_COPY so that the same revisions have *not*
# been uniformly applied from A to A_COPY. In this case the reintegrate
# merge should fail, but should provide a helpful message as to where the
# problems are.
#
+ # A_COPY_3 4-------[9]--
+ # / \
+ # / \ [-8]___
+ # A -1---------5-6-7-8---10----------------\-------WC--
+ # \ \ (D) \ \ /reint.
+ # \ \ (mu) \ \ /
+ # A_COPY 2-\--------------------12---13--14--15--------
+ # \ / (D)
+ # \ /
+ # A_COPY_2 3-------------[11]--
+
# First revert the previous reintegrate merge
svntest.actions.run_and_verify_svn(None, None, [],
'revert', '-R', wc_dir)
@@ -1204,19 +1296,10 @@ def reintegrate_with_subtree_mergeinfo(sbox):
# to it from A, the merge should fail. Further we expect an error message
# that highlights the fact that A_COPY/D is the offending subtree.
#
- # The actions.run_and_verify_* methods are happy if one line of the error
- # matches the regex, but we want to know that the error actually provides
- # specific information about the paths that are stopping --reintegrate from
- # working. So we will pass the stderr to svntest.verify.verify_outputs()
- # ourselves, but as the 'actual_stdout' argument, that way each line of
- # error must match the regex.
- exit_code, out, err = svntest.actions.run_and_verify_svn(
- None, [], svntest.verify.AnyOutput,
- 'merge', '--reintegrate', sbox.repo_url + '/A_COPY', A_path)
-
- svntest.verify.verify_outputs("Reintegrate failed but not "
- "in the way expected",
- err, None,
+ # We want to know that the error provides specific information about the
+ # paths that are stopping --reintegrate from working.
+ run_reintegrate_expect_error(sbox.repo_url + '/A_COPY', A_path,
+ [],
"(svn: E195016: Reintegrate can only be used if "
"revisions 2 through 15 were previously "
"merged from .*/A to the reintegrate source, "
@@ -1225,10 +1308,7 @@ def reintegrate_with_subtree_mergeinfo(sbox):
"|( Missing ranges: /A/D:8\n)"
"|( A_COPY/mu\n)"
"|( Missing ranges: /A/mu:2-12\n)"
- "|(\n)"
- "|(.*apr_err.*)", # In case of debug build
- None,
- True) # Match *all* lines of stdout
+ "|(\n)")
# Test another common situation that can break reintegrate as a result
# of copies and moves:
@@ -1247,8 +1327,19 @@ def reintegrate_with_subtree_mergeinfo(sbox):
# rev N+3. The renamed subtree on 'branch' now has additional explicit
# mergeinfo decribing the synch merge from trunk@N+1 to trunk@N+2.
#
- # E) Reintegrate 'branch' to 'trunk'. This fails as it appears not all
- # of 'trunk' was previously merged to 'branch'
+ # E) Reintegrate 'branch' to 'trunk'.
+ #
+ # Step: A B C D E
+ # A_COPY_3 ---[9]--
+ # / \ (D/g.->
+ # / \ [-8]___ D/g.m.) (D/g.m.)
+ # A ------------10----------------\------16-------18--------WC
+ # \\ (D) \ \ \ \ /reint.
+ # \\ (mu) \ \ \ \ /
+ # A_COPY -\--------------12---13--14--15-------17-------19------
+ # \ / (D)
+ # \ /
+ # A_COPY_2 --------[11]--
# r16 - A) REPOS-to-REPOS rename of A/D/gamma to A/D/gamma_moved. Since
# r874258 WC-to-WC moves won't create mergeinfo on the dest if the source
@@ -1260,15 +1351,18 @@ def reintegrate_with_subtree_mergeinfo(sbox):
'-m', 'REPOS-to-REPOS move'
)
svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
- expected_disk.remove('A/D/gamma')
- expected_disk.add({
- 'A/D/gamma_moved' : Item(props={SVN_PROP_MERGEINFO: '/A_COPY_3/D/gamma:9'},
- contents="New content")
- })
expected_status.tweak(wc_rev=16)
expected_status.remove('A/D/gamma')
expected_status.add({'A/D/gamma_moved' : Item(status=' ', wc_rev=16)})
+ # Why is gamma_moved notified as ' G' rather than ' U'? It was
+ # added by the merge and there is only a single editor drive, so
+ # how can any prop changes be merged to it? The answer is that
+ # the merge code does some quiet housekeeping, merging gamma_moved's
+ # inherited mergeinfo into its incoming mergeinfo, see
+ # http://subversion.tigris.org/issues/show_bug.cgi?id=4309
+ # This test is not covering issue #4309 so we let the current
+ # behavior pass.
# r17 - B) Synch merge from A to A_COPY
svntest.actions.run_and_verify_svn(
None,
@@ -1278,7 +1372,7 @@ def reintegrate_with_subtree_mergeinfo(sbox):
'D ' + gamma_COPY_path + '\n',
' U ' + A_COPY_path + '\n',
' U ' + D_COPY_path + '\n',
- ' U ' + gamma_moved_COPY_path + '\n']),
+ ' G ' + gamma_moved_COPY_path + '\n']),
[], 'merge', sbox.repo_url + '/A', A_COPY_path)
expected_output = wc.State(
wc_dir,
@@ -1298,11 +1392,6 @@ def reintegrate_with_subtree_mergeinfo(sbox):
expected_status.add({'A_COPY/D/gamma_moved' : Item(status=' ', wc_rev=17)})
svntest.actions.run_and_verify_commit(wc_dir, expected_output,
expected_status, None, wc_dir)
- expected_disk.remove('A_COPY/D/gamma')
- expected_disk.add({
- 'A/D/gamma_moved' : Item(props={SVN_PROP_MERGEINFO: '/A_COPY_3/D/gamma:9'},
- contents="New content")
- })
# r18 - C) Text mod to A/D/gamma_moved
svntest.main.file_write(gamma_moved_path, "Even newer content")
@@ -1353,7 +1442,7 @@ def reintegrate_with_subtree_mergeinfo(sbox):
'' : Item(status=' U'),
'mu' : Item(status=' G'),
'D' : Item(status=' U'),
- 'D/gamma_moved' : Item(status=' U'),
+ 'D/gamma_moved' : Item(status=' G'), # More issue #4309 (see above)
})
expected_elision_output = wc.State(A_path, {
})
@@ -1397,38 +1486,49 @@ def reintegrate_with_subtree_mergeinfo(sbox):
'D/G/pi' : Item("This is the file 'pi'.\n"),
'D/G/rho' : Item("New content"),
'D/G/tau' : Item("This is the file 'tau'.\n"),
- # Why do we expect mergeinfo of '/A_COPY/D/G/tauprime:2-9' on
- # A/D/G/tauprime? Because this --reintegrate merge is effectively a
- # two URL merge of %URL%/A@9 %URL%/A_COPY@9 to 'A'. Since %URL%/A@9 and
- # %URL%/A_COPY@9 have a common ancestor in %URL%/A@1 we expect this 2-URL
- # merge to record mergeinfo and a component of that mergeinfo describes
- # the merge of %URL%/A_COPY@2 to %URL%/A_COPY@9. We see that above on
- # A. But we also get it on A's subtrees with explicit mergeinfo, namely
- # A/D/G/tauprime. Now I know what you are thinking, "'A_COPY/D/G/tauprime'
- # doesn't even exist until r9!", and you are quite right. But this
- # inheritance of bogus mergeinfo is a known problem, see
- # http://subversion.tigris.org/issues/show_bug.cgi?id=3157#desc8,
- # and is not what this test is about, so we won't fail because of it.
+ # What's with all this mergeinfo?
+ #
+ # '/A/D/gamma_moved:2-7,9-12' - Incoming from the merge source. Yes,
+ # this mergeinfo describes non-existent path-revs, this is the effect
+ # of issue #3669 'inheritance can result in mergeinfo describing
+ # nonexistent sources', but there is already a test for that issue so
+ # we tolerate it here.
+ #
+ # '/A_COPY/D/gamma_moved:17-19' - Describes the merge performed.
+ #
+ # '/A_COPY_3/D/gamma:9' - Explicit prior to the merge.
+ #
+ #'/A_COPY_3/D/gamma_moved:9' - Incoming from the merge source.
+ # For the curious, this was originally created in r17 when we merged
+ # ^/A to A_COPY. This merge added A_COPY/D/gamma_moved, which had
+ # explicit mergeinfo and due to issue #4309 'wrong notification and
+ # bogus mergeinfo during merge which adds subtree with mergeinfo'
+ # this file inherited this bogus mergeinfo from A_COPY/D. Yes, this
+ # is all quite ugly as the intersection or multiple known issues
+ # is likely to be. However, given that none of this mergeinfo is
+ # particularly harmful and that this test is *not* about issues #3669
+ # or #4309, we are tolerting it.
'D/gamma_moved' : Item(
"Even newer content", props={SVN_PROP_MERGEINFO :
+ '/A/D/gamma_moved:2-7,9-12\n'
'/A_COPY/D/gamma_moved:17-19\n'
- '/A_COPY_3/D/gamma:9'}),
+ '/A_COPY_3/D/gamma:9\n'
+ '/A_COPY_3/D/gamma_moved:9'}),
'D/H' : Item(),
'D/H/chi' : Item("This is the file 'chi'.\n"),
'D/H/psi' : Item("New content"),
'D/H/omega' : Item("New content"),
})
expected_A_skip = wc.State(A_COPY_path, {})
- svntest.actions.run_and_verify_merge(A_path, None, None,
- sbox.repo_url + '/A_COPY', None,
+ run_and_verify_reintegrate(A_path,
+ sbox.repo_url + '/A_COPY',
expected_output,
expected_mergeinfo_output,
expected_elision_output,
expected_A_disk,
expected_A_status,
expected_A_skip,
- None, None, None, None,
- None, 1, 1, "--reintegrate", A_path)
+ None, 1, 1)
#----------------------------------------------------------------------
@SkipUnless(server_has_mergeinfo)
@@ -1441,11 +1541,11 @@ def multiple_reintegrates_from_the_same_branch(sbox):
expected_disk, expected_status = set_up_branch(sbox)
# Some paths we'll care about
- A_path = os.path.join(wc_dir, "A")
- mu_path = os.path.join(wc_dir, "A", "mu")
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- psi_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "psi")
- Feature_branch_path = os.path.join(wc_dir, "A_FEATURE_BRANCH")
+ A_path = sbox.ospath('A')
+ mu_path = sbox.ospath('A/mu')
+ A_COPY_path = sbox.ospath('A_COPY')
+ psi_COPY_path = sbox.ospath('A_COPY/D/H/psi')
+ Feature_branch_path = sbox.ospath('A_FEATURE_BRANCH')
Feature_beta_path = os.path.join(wc_dir, "A_FEATURE_BRANCH", "B", "E",
"beta")
@@ -1485,9 +1585,7 @@ def multiple_reintegrates_from_the_same_branch(sbox):
# r11 - Reintegrate the feature branch back to 'A'.
svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
- svntest.actions.run_and_verify_svn(None, None, [], 'merge', '--reintegrate',
- sbox.repo_url + '/A_FEATURE_BRANCH',
- A_path)
+ run_reintegrate(sbox.repo_url + '/A_FEATURE_BRANCH', A_path)
svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m',
"Reintegrate feature branch back to 'A'",
wc_dir)
@@ -1495,7 +1593,7 @@ def multiple_reintegrates_from_the_same_branch(sbox):
# r12 - Do a --record-only merge from 'A' to the feature branch so we
# don't try to merge r11 from trunk during the next sync merge.
svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
- svntest.actions.run_and_verify_svn(None, None, [], 'merge',
+ svntest.actions.run_and_verify_svn(None, None, [], 'merge', '-c11',
'--record-only',
sbox.repo_url + '/A',
Feature_branch_path)
@@ -1579,17 +1677,15 @@ def multiple_reintegrates_from_the_same_branch(sbox):
'D/H/omega' : Item("New content"),
})
expected_skip = wc.State(A_path, { })
- svntest.actions.run_and_verify_merge(A_path, None, None,
+ run_and_verify_reintegrate(A_path,
sbox.repo_url + '/A_FEATURE_BRANCH',
- None,
expected_output,
expected_mergeinfo_output,
expected_elision_output,
expected_disk,
expected_status,
expected_skip,
- None, None, None, None,
- None, 1, 1, '--reintegrate', A_path)
+ None, 1, 1)
svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m',
"2nd Reintegrate feature branch back to 'A'",
wc_dir)
@@ -1631,11 +1727,11 @@ def reintegrate_with_self_referential_mergeinfo(sbox):
wc_disk, wc_status = set_up_branch(sbox, nbr_of_branches=0)
# Some paths we'll care about
- A_path = os.path.join(wc_dir, "A")
- A2_path = os.path.join(wc_dir, "A2")
- A2_B_path = os.path.join(wc_dir, "A2", "B")
- A2_1_path = os.path.join(wc_dir, "A2.1")
- A2_1_mu_path = os.path.join(wc_dir, "A2.1", "mu")
+ A_path = sbox.ospath('A')
+ A2_path = sbox.ospath('A2')
+ A2_B_path = sbox.ospath('A2/B')
+ A2_1_path = sbox.ospath('A2.1')
+ A2_1_mu_path = sbox.ospath('A2.1/mu')
# r6 Copy A to A2 and then manually set some self-referential mergeinfo on
# A2/B and A2.
@@ -1737,20 +1833,22 @@ def reintegrate_with_self_referential_mergeinfo(sbox):
# ..\..\..\subversion\libsvn_fs_fs\tree.c:2886: (apr_err=160013)
# ..\..\..\subversion\libsvn_fs_fs\tree.c:669: (apr_err=160013)
# svn: File not found: revision 4, path '/A2'
- svntest.actions.run_and_verify_merge(A2_path, None, None,
- sbox.repo_url + '/A2.1', None,
+ run_and_verify_reintegrate(A2_path,
+ sbox.repo_url + '/A2.1',
expected_output,
expected_mergeinfo_output,
expected_elision_output,
expected_disk,
expected_status,
expected_skip,
- None, None, None, None,
- None, 1, 0, '--reintegrate', A2_path)
+ None, 1, 0)
#----------------------------------------------------------------------
-# Test for issue #3577 '1.7 subtree mergeinfo recording breaks reintegrate'.
-@Issue(3577)
+# Test for issue #3577 '1.7 subtree mergeinfo recording breaks reintegrate'
+# and issue #4329 'automatic merge uses reintegrate type merge if source is
+# fully synced'.
+@Issue(3577,4329)
+@SkipUnless(server_has_mergeinfo)
def reintegrate_with_subtree_merges(sbox):
"reintegrate with prior subtree merges to source"
@@ -1761,12 +1859,13 @@ def reintegrate_with_subtree_merges(sbox):
expected_disk, expected_status = set_up_branch(sbox)
# Some paths we'll care about
- A_path = os.path.join(wc_dir, "A")
- mu_COPY_path = os.path.join(wc_dir, "A_COPY", "mu")
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- B_COPY_path = os.path.join(wc_dir, "A_COPY", "B")
- rho_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "G", "rho")
- H_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H")
+ A_path = sbox.ospath('A')
+ psi_path = sbox.ospath('A/D/H/psi')
+ mu_COPY_path = sbox.ospath('A_COPY/mu')
+ A_COPY_path = sbox.ospath('A_COPY')
+ B_COPY_path = sbox.ospath('A_COPY/B')
+ rho_COPY_path = sbox.ospath('A_COPY/D/G/rho')
+ H_COPY_path = sbox.ospath('A_COPY/D/H')
# r7 - Make a change on the A_COPY branch that will be
# reintegrated back to A.
@@ -1821,7 +1920,7 @@ def reintegrate_with_subtree_merges(sbox):
'mu' : Item(status='U '),
})
expected_mergeinfo_output = wc.State(A_path, {
- '' : Item(status=' G'),
+ '' : Item(status=' U'),
})
expected_elision_output = wc.State(A_path, {
})
@@ -1869,16 +1968,37 @@ def reintegrate_with_subtree_merges(sbox):
'D/H/omega' : Item("New content"),
})
expected_A_skip = wc.State(A_COPY_path, {})
+ run_and_verify_reintegrate(A_path,
+ sbox.repo_url + '/A_COPY',
+ expected_output,
+ expected_mergeinfo_output,
+ expected_elision_output,
+ expected_A_disk,
+ expected_A_status,
+ expected_A_skip,
+ None, 1, 1)
+
+ # Test issue #4329. Revert previous merge and commit a new edit to
+ # A/D/H/psi. Attempt the same merge without the --reintegrate option.
+ # It should succeed because the automatic merge code should detect that
+ # a reintegrate-style merge is required, that merge should succeed and
+ # there should be not conflict on A/D/H/psi.
+ svntest.actions.run_and_verify_svn(None, None, [], 'revert', '-R', wc_dir)
+ svntest.main.file_write(psi_path, "Non-conflicting trunk edit.\n")
+ svntest.main.run_svn(None, 'commit', '-m',
+ 'An edit on trunk prior to reintegrate.', wc_dir)
+ sbox.simple_update()
+ expected_A_status.tweak(wc_rev=9)
+ expected_A_disk.tweak('', props={SVN_PROP_MERGEINFO: '/A_COPY:2-9'})
+ expected_A_disk.tweak('D/H/psi', contents='Non-conflicting trunk edit.\n')
svntest.actions.run_and_verify_merge(A_path, None, None,
sbox.repo_url + '/A_COPY', None,
expected_output,
expected_mergeinfo_output,
expected_elision_output,
- expected_A_disk,
- expected_A_status,
- expected_A_skip,
- None, None, None, None,
- None, 1, 1, "--reintegrate", A_path)
+ expected_A_disk, expected_A_status,
+ expected_A_skip, None, None, None,
+ None, None, True, False, A_path)
#----------------------------------------------------------------------
# Test for issue #3654 'added subtrees with mergeinfo break reintegrate'.
@@ -1890,13 +2010,13 @@ def added_subtrees_with_mergeinfo_break_reintegrate(sbox):
wc_dir = sbox.wc_dir
# Some paths we'll care about
- A_path = os.path.join(wc_dir, "A")
- nu_path = os.path.join(wc_dir, "A", "C", "nu")
- mu_path = os.path.join(wc_dir, "A", "mu")
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- lambda_COPY_path = os.path.join(wc_dir, "A_COPY", "B", "lambda")
- A_COPY_2_path = os.path.join(wc_dir, "A_COPY_2")
- nu_COPY_2_path = os.path.join(wc_dir, "A_COPY_2", "C", "nu")
+ A_path = sbox.ospath('A')
+ nu_path = sbox.ospath('A/C/nu')
+ mu_path = sbox.ospath('A/mu')
+ A_COPY_path = sbox.ospath('A_COPY')
+ lambda_COPY_path = sbox.ospath('A_COPY/B/lambda')
+ A_COPY_2_path = sbox.ospath('A_COPY_2')
+ nu_COPY_2_path = sbox.ospath('A_COPY_2/C/nu')
# Branch A@1 to A_COPY and A_COPY_2 in r2 and r3 respectively.
# Make some changes under 'A' in r4-7.
@@ -1952,9 +2072,7 @@ def added_subtrees_with_mergeinfo_break_reintegrate(sbox):
# r14 - Reintegrate A_COPY to A.
svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
- svntest.actions.run_and_verify_svn(None, svntest.verify.AnyOutput, [],
- 'merge', '--reintegrate',
- sbox.repo_url + '/A_COPY', A_path)
+ run_reintegrate(sbox.repo_url + '/A_COPY', A_path)
svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m',
'Reintegrate A_COPY to A.',
wc_dir)
@@ -2064,16 +2182,15 @@ def added_subtrees_with_mergeinfo_break_reintegrate(sbox):
'D/H/omega' : Item("New content"),
})
expected_skip = wc.State(A_COPY_path, {})
- svntest.actions.run_and_verify_merge(A_path, None, None,
- sbox.repo_url + '/A_COPY', None,
+ run_and_verify_reintegrate(A_path,
+ sbox.repo_url + '/A_COPY',
expected_output,
expected_mergeinfo_output,
expected_elision_output,
expected_disk,
expected_status,
expected_skip,
- None, None, None, None,
- None, 1, 1, "--reintegrate", A_path)
+ None, 1, 1)
#----------------------------------------------------------------------
# Test for issue #3648 '2-URL merges incorrectly reverse-merge mergeinfo
@@ -2086,10 +2203,10 @@ def two_URL_merge_removes_valid_mergeinfo_from_target(sbox):
wc_dir = sbox.wc_dir
# Some paths we'll care about
- lambda_COPY_path = os.path.join(wc_dir, "A_COPY", "B", "lambda")
- mu_path = os.path.join(wc_dir, "A", "mu")
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- A_COPY_2_path = os.path.join(wc_dir, "A_COPY_2")
+ lambda_COPY_path = sbox.ospath('A_COPY/B/lambda')
+ mu_path = sbox.ospath('A/mu')
+ A_COPY_path = sbox.ospath('A_COPY')
+ A_COPY_2_path = sbox.ospath('A_COPY_2')
# Branch A@1 to A_COPY r2
# Branch A@1 to A_COPY_2 in r3.
@@ -2245,14 +2362,14 @@ def reintegrate_creates_bogus_mergeinfo(sbox):
sbox.build()
wc_dir=sbox.wc_dir
- mu_path = os.path.join(sbox.wc_dir, "A", "mu")
- lambda_path = os.path.join(sbox.wc_dir, "A", "B", "lambda")
- alpha_path = os.path.join(sbox.wc_dir, "A", "B", "E", "alpha")
- beta_path = os.path.join(sbox.wc_dir, "A", "B", "E", "beta")
- A_path = os.path.join(sbox.wc_dir, "A")
- A_path_1 = os.path.join(sbox.wc_dir, "A@1")
- A_COPY_path = os.path.join(sbox.wc_dir, "A_COPY")
- A_COPY_psi_path = os.path.join(sbox.wc_dir, "A_COPY", "D", "H", "psi")
+ mu_path = sbox.ospath('A/mu')
+ lambda_path = sbox.ospath('A/B/lambda')
+ alpha_path = sbox.ospath('A/B/E/alpha')
+ beta_path = sbox.ospath('A/B/E/beta')
+ A_path = sbox.ospath('A')
+ A_path_1 = sbox.ospath('A@1')
+ A_COPY_path = sbox.ospath('A_COPY')
+ A_COPY_psi_path = sbox.ospath('A_COPY/D/H/psi')
A_COPY_url = sbox.repo_url + "/A_COPY"
# Make 2 commits under /A pushing the repo to rev3
@@ -2280,7 +2397,7 @@ def reintegrate_creates_bogus_mergeinfo(sbox):
svntest.main.run_svn(None, "up", wc_dir)
# Reintegrate A_COPY to A. The resulting merginfo on A should be
- # /A_COPY:4-10
+ # /A_COPY:4-6
expected_output = wc.State(A_path, {
'D/H/psi' : Item(status='U '),
})
@@ -2313,14 +2430,14 @@ def reintegrate_creates_bogus_mergeinfo(sbox):
})
expected_skip = wc.State(A_COPY_path, {})
- svntest.actions.run_and_verify_merge(A_path, None, None,
- A_COPY_url, None,
+ run_and_verify_reintegrate(A_path,
+ A_COPY_url,
expected_output,
expected_mergeinfo_output,
expected_elision_output,
expected_disk, None, expected_skip,
- None, None, None, None, None,
- 1, 1, "--reintegrate", A_path)
+ None,
+ 1, 1)
#----------------------------------------------------------------------
@@ -2335,7 +2452,7 @@ def no_source_subtree_mergeinfo(sbox):
sbox.build()
wc_dir=sbox.wc_dir
- svntest.main.file_write(os.path.join(wc_dir, 'A', 'B', 'E', 'alpha'),
+ svntest.main.file_write(sbox.ospath('A/B/E/alpha'),
'AAA\n' +
'BBB\n' +
'CCC\n')
@@ -2344,32 +2461,32 @@ def no_source_subtree_mergeinfo(sbox):
# Create branch-1
svntest.main.run_svn(None, 'copy',
- os.path.join(wc_dir, 'A', 'B'),
- os.path.join(wc_dir, 'A', 'B1'))
+ sbox.ospath('A/B'),
+ sbox.ospath('A/B1'))
svntest.main.run_svn(None, 'commit', '-m', 'log message', wc_dir)
# Create branch-1
svntest.main.run_svn(None, 'copy',
- os.path.join(wc_dir, 'A', 'B'),
- os.path.join(wc_dir, 'A', 'B2'))
+ sbox.ospath('A/B'),
+ sbox.ospath('A/B2'))
svntest.main.run_svn(None, 'commit', '-m', 'log message', wc_dir)
# Change on trunk
- svntest.main.file_write(os.path.join(wc_dir, 'A', 'B', 'E', 'alpha'),
+ svntest.main.file_write(sbox.ospath('A/B/E/alpha'),
'AAAxx\n' +
'BBB\n' +
'CCC\n')
svntest.main.run_svn(None, 'commit', '-m', 'log message', wc_dir)
# Change on branch-1
- svntest.main.file_write(os.path.join(wc_dir, 'A', 'B1', 'E', 'alpha'),
+ svntest.main.file_write(sbox.ospath('A/B1/E/alpha'),
'AAA\n' +
'BBBxx\n' +
'CCC\n')
svntest.main.run_svn(None, 'commit', '-m', 'log message', wc_dir)
# Change on branch-2
- svntest.main.file_write(os.path.join(wc_dir, 'A', 'B2', 'E', 'alpha'),
+ svntest.main.file_write(sbox.ospath('A/B2/E/alpha'),
'AAA\n' +
'BBB\n' +
'CCCxx\n')
@@ -2377,45 +2494,52 @@ def no_source_subtree_mergeinfo(sbox):
svntest.main.run_svn(None, 'update', wc_dir)
# Merge trunk to branch-1
- svntest.main.run_svn(None, 'merge', '^/A/B', os.path.join(wc_dir, 'A', 'B1'))
+ svntest.main.run_svn(None, 'merge', '^/A/B', sbox.ospath('A/B1'))
svntest.main.run_svn(None, 'commit', '-m', 'log message', wc_dir)
svntest.main.run_svn(None, 'update', wc_dir)
# Reintegrate branch-1 subtree to trunk subtree
- svntest.main.run_svn(None, 'merge', '--reintegrate',
- '^/A/B1/E', os.path.join(wc_dir, 'A', 'B', 'E'))
+ run_reintegrate('^/A/B1/E', sbox.ospath('A/B/E'))
svntest.main.run_svn(None, 'commit', '-m', 'log message', wc_dir)
svntest.main.run_svn(None, 'update', wc_dir)
# Merge trunk to branch-2
- svntest.main.run_svn(None, 'merge', '^/A/B', os.path.join(wc_dir, 'A', 'B2'))
+ svntest.main.run_svn(None, 'merge', '^/A/B', sbox.ospath('A/B2'))
svntest.main.run_svn(None, 'commit', '-m', 'log message', wc_dir)
svntest.main.run_svn(None, 'update', wc_dir)
# Reverse merge branch-1 subtree to branch-2 subtree, this removes
# the subtree mergeinfo from branch 2
svntest.main.run_svn(None, 'merge', '-r8:2',
- '^/A/B1/E', os.path.join(wc_dir, 'A', 'B2', 'E'))
+ '^/A/B1/E', sbox.ospath('A/B2/E'))
svntest.main.run_svn(None, 'commit', '-m', 'log message', wc_dir)
svntest.main.run_svn(None, 'update', wc_dir)
+ # Verify that merge results in no subtree mergeinfo
+ svntest.actions.run_and_verify_svn(None, [], [], 'propget', 'svn:mergeinfo',
+ sbox.repo_url + '/A/B2/E')
+
# Merge trunk to branch-2
- svntest.main.run_svn(None, 'merge', '^/A/B', os.path.join(wc_dir, 'A', 'B2'))
+ svntest.main.run_svn(None, 'merge', '^/A/B', sbox.ospath('A/B2'))
svntest.main.run_svn(None, 'commit', '-m', 'log message', wc_dir)
svntest.main.run_svn(None, 'update', wc_dir)
+ # Verify that there is still no subtree mergeinfo
+ svntest.actions.run_and_verify_svn(None, [], [], 'propget', 'svn:mergeinfo',
+ sbox.repo_url + '/A/B2/E')
+
# Reintegrate branch-2 to trunk, this fails in 1.6.x from 1.6.13.
# The error message states revisions /A/B/E:3-11 are missing from
# /A/B2/E and yet the mergeinfo on /A/B2 is /A/B:3-11 and /A/B2/E
# has no mergeinfo.
- expected_output = wc.State(os.path.join(wc_dir, 'A', 'B'), {
+ expected_output = wc.State(sbox.ospath('A/B'), {
'E' : Item(status=' U'),
'E/alpha' : Item(status='U '),
})
- expected_mergeinfo = wc.State(os.path.join(wc_dir, 'A', 'B'), {
+ expected_mergeinfo = wc.State(sbox.ospath('A/B'), {
'' : Item(status=' U'),
})
- expected_elision = wc.State(os.path.join(wc_dir, 'A', 'B'), {
+ expected_elision = wc.State(sbox.ospath('A/B'), {
})
expected_disk = wc.State('', {
'' : Item(props={SVN_PROP_MERGEINFO : '/A/B2:4-12'}),
@@ -2427,24 +2551,15 @@ def no_source_subtree_mergeinfo(sbox):
'F' : Item(),
'lambda' : Item("This is the file 'lambda'.\n"),
})
- expected_skip = wc.State(os.path.join(wc_dir, 'A', 'B'), {
+ expected_skip = wc.State(sbox.ospath('A/B'), {
})
- svntest.actions.run_and_verify_merge(os.path.join(wc_dir, 'A', 'B'),
- None, None, '^/A/B2', None,
+ run_and_verify_reintegrate(sbox.ospath('A/B'),
+ '^/A/B2',
expected_output, expected_mergeinfo,
expected_elision, expected_disk,
None, expected_skip,
- None, None, None, None, None,
- 1, 1, '--reintegrate',
- os.path.join(wc_dir, 'A', 'B'))
- # For 1.6 testsuite use:
- # svntest.actions.run_and_verify_merge(os.path.join(wc_dir, 'A', 'B'),
- # None, None, '^/A/B2',
- # expected_output,
- # expected_disk,
- # None, expected_skip,
- # None, None, None, None, None,
- # 1, 1, '--reintegrate')
+ None,
+ 1, 1)
#----------------------------------------------------------------------
@SkipUnless(server_has_mergeinfo)
@@ -2457,15 +2572,15 @@ def reintegrate_replaced_source(sbox):
wc_dir = sbox.wc_dir
expected_disk, expected_status = set_up_branch(sbox)
- A_path = os.path.join(sbox.wc_dir, "A")
- A_COPY_path = os.path.join(sbox.wc_dir, "A_COPY")
- beta_COPY_path = os.path.join(sbox.wc_dir, "A_COPY", "B", "E", "beta")
- mu_COPY_path = os.path.join(sbox.wc_dir, "A_COPY", "mu")
+ A_path = sbox.ospath('A')
+ A_COPY_path = sbox.ospath('A_COPY')
+ beta_COPY_path = sbox.ospath('A_COPY/B/E/beta')
+ mu_COPY_path = sbox.ospath('A_COPY/mu')
# Using cherrypick merges, simulate a series of sync merges from A to
# A_COPY with a replace of A_COPY along the way.
#
- # r6 - Merge r3 from A to A_COPY
+ # r7 - Merge r3 from A to A_COPY
svntest.main.run_svn(None, 'up', wc_dir)
svntest.main.run_svn(None, 'merge', sbox.repo_url + '/A', A_COPY_path,
'-c3')
@@ -2500,7 +2615,7 @@ def reintegrate_replaced_source(sbox):
wc_dir)
# r12 - Do a final sync merge of A to A_COPY in preparation for
- # reintegration.
+ # reintegration.
svntest.main.run_svn(None, 'up', wc_dir)
svntest.main.run_svn(None, 'merge', sbox.repo_url + '/A', A_COPY_path)
svntest.main.run_svn(None, 'ci', '-m', 'Sycn A_COPY with A', wc_dir)
@@ -2561,17 +2676,16 @@ def reintegrate_replaced_source(sbox):
'D/H/omega' : Item("New content"),
})
expected_skip = wc.State(A_path, { })
- svntest.actions.run_and_verify_merge(A_path, None, None,
- sbox.repo_url + '/A_COPY', None,
+ run_and_verify_reintegrate(A_path,
+ sbox.repo_url + '/A_COPY',
expected_output,
expected_mergeinfo_output,
expected_elision_output,
expected_disk,
expected_status,
expected_skip,
- [], None, None, None, None, True, True,
- '--reintegrate', A_path)
-
+ [], True, True)
+
#----------------------------------------------------------------------
@SkipUnless(svntest.main.is_posix_os)
@Issue(4052)
@@ -2607,10 +2721,66 @@ def reintegrate_symlink_deletion(sbox):
## reintegrate
# ### TODO: verify something here
- svntest.main.run_svn(None, 'merge', '--reintegrate',
- A_COPY_url, A_path)
+ run_reintegrate(A_COPY_url, A_path)
+
+#----------------------------------------------------------------------
+def no_op_reintegrate(sbox):
+ """no-op reintegrate"""
+
+ # Make A_COPY branch in r2, and do a few more commits to A in r3-6.
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ A_path = sbox.ospath('A')
+ A_COPY_path = sbox.ospath('A_COPY')
+ expected_disk, expected_status = set_up_branch(sbox)
+
+ # Sync merge from trunk to branch
+ svntest.main.run_svn(None, 'merge', sbox.repo_url + '/A', A_COPY_path)
+ sbox.simple_commit()
+ sbox.simple_update()
+ # Reintegrate; there are no relevant changes on the branch.
+ # ### TODO: Check the result more carefully than merely that it completed.
+ run_reintegrate(sbox.repo_url + '/A_COPY', A_path)
+
+#----------------------------------------------------------------------
+def renamed_branch_reintegrate(sbox):
+ """reintegrate a branch that has been renamed"""
+
+ # The idea of this test is to ensure that the reintegrate merge is able to
+ # cope when one or both of the branches have been renamed.
+ #
+ # A -1-----3-4-5-6----------------------9--------
+ # \ \ / reintegrate
+ # A_COPY 2--------------7-------- /
+ # sync \ /
+ # RENAMED rename 8----------------
+
+ # TODO: Make some changes between the sync/rename/reintegrate steps so
+ # the reintegrate merge actually has to do something.
+ # TODO: Rename the other branch as well.
+
+ # Make A_COPY branch in r2, and do a few more commits to A in r3-6.
+ sbox.build()
+
+ wc_dir = sbox.wc_dir
+ A_path = sbox.ospath('A')
+ A_COPY_path = sbox.ospath('A_COPY')
+ expected_disk, expected_status = set_up_branch(sbox)
+
+ # Sync merge from trunk to branch
+ svntest.main.run_svn(None, 'merge', sbox.repo_url + '/A', A_COPY_path)
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ # Rename the branch
+ sbox.simple_move('A_COPY', 'RENAMED')
+ sbox.simple_commit()
+ sbox.simple_update()
+ # Reintegrate; there are no relevant changes on the branch.
+ # ### TODO: Check the result more carefully than merely that it completed.
+ run_reintegrate(sbox.repo_url + '/RENAMED@8', A_path)
########################################################################
# Run the tests
@@ -2630,12 +2800,15 @@ test_list = [ None,
reintegrate_with_subtree_mergeinfo,
multiple_reintegrates_from_the_same_branch,
reintegrate_with_self_referential_mergeinfo,
+ reintegrate_with_subtree_merges,
added_subtrees_with_mergeinfo_break_reintegrate,
two_URL_merge_removes_valid_mergeinfo_from_target,
reintegrate_creates_bogus_mergeinfo,
no_source_subtree_mergeinfo,
reintegrate_replaced_source,
reintegrate_symlink_deletion,
+ no_op_reintegrate,
+ renamed_branch_reintegrate,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/merge_tests.py b/subversion/tests/cmdline/merge_tests.py
index 4c92913..d116118 100755
--- a/subversion/tests/cmdline/merge_tests.py
+++ b/subversion/tests/cmdline/merge_tests.py
@@ -32,6 +32,8 @@ import time
import svntest
from svntest import main, wc, verify, actions
+from prop_tests import binary_mime_type_on_text_file_warning
+
# (abbreviation)
Item = wc.StateItem
Skip = svntest.testcase.Skip_deco
@@ -47,17 +49,38 @@ from svntest.main import server_has_mergeinfo
from svntest.actions import fill_file_with_lines
from svntest.actions import make_conflict_marker_text
from svntest.actions import inject_conflict_into_expected_state
+from svntest.verify import RegexListOutput
-def expected_merge_output(rev_ranges, additional_lines=None, foreign=False,
- elides=False, two_url=False):
+def expected_merge_output(rev_ranges, additional_lines=[], foreign=False,
+ elides=False, two_url=False, target=None,
+ text_conflicts=0, prop_conflicts=0, tree_conflicts=0,
+ text_resolved=0, prop_resolved=0, tree_resolved=0,
+ skipped_paths=0):
"""Generate an (inefficient) regex representing the expected merge
- output and mergeinfo notifications from REV_RANGES (a list of 'range' lists
- of the form [start, end] or [single_rev] --> [single_rev - 1, single_rev]),
- and ADDITIONAL_LINES (a list of strings). If REV_RANGES is None then only
- the standard notification for a 3-way merge is expected. If ELIDES is true
- add to the regex an expression representing elision notification. If TWO_URL
- us true tweak the regex to expect the appropriate mergeinfo notification
- for a 3-way merge."""
+ output and mergeinfo notifications from REV_RANGES and ADDITIONAL_LINES.
+
+ REV_RANGES is a list of revision ranges for which mergeinfo is being
+ recorded. Each range is of the form [start, end] (where both START and
+ END are inclusive, unlike in '-rX:Y') or the form [single_rev] (which is
+ like '-c SINGLE_REV'). If REV_RANGES is None then only the standard
+ notification for a 3-way merge is expected.
+
+ ADDITIONAL_LINES is a list of strings to match the other lines of output;
+ these are basically regular expressions except that backslashes will be
+ escaped herein. If ADDITIONAL_LINES is a single string, it is interpreted
+ the same as a list containing that string.
+
+ If ELIDES is true, add to the regex an expression representing elision
+ notification. If TWO_URL is true, tweak the regex to expect the
+ appropriate mergeinfo notification for a 3-way merge.
+
+ TARGET is the local path to the target, as it should appear in
+ notifications; if None, it is not checked.
+
+ TEXT_CONFLICTS, PROP_CONFLICTS, TREE_CONFLICTS and SKIPPED_PATHS specify
+ the number of each kind of conflict to expect.
+ """
+
if rev_ranges is None:
lines = [svntest.main.merge_notify_line(None, None, False, foreign)]
else:
@@ -69,8 +92,8 @@ def expected_merge_output(rev_ranges, additional_lines=None, foreign=False,
else:
end_rev = None
lines += [svntest.main.merge_notify_line(start_rev, end_rev,
- True, foreign)]
- lines += [svntest.main.mergeinfo_notify_line(start_rev, end_rev)]
+ True, foreign, target)]
+ lines += [svntest.main.mergeinfo_notify_line(start_rev, end_rev, target)]
if (elides):
lines += ["--- Eliding mergeinfo from .*\n"]
@@ -78,22 +101,25 @@ def expected_merge_output(rev_ranges, additional_lines=None, foreign=False,
if (two_url):
lines += ["--- Recording mergeinfo for merge between repository URLs .*\n"]
- if isinstance(additional_lines, list):
- # Address "The Backslash Plague"
- #
- # If ADDITIONAL_LINES are present there are possibly paths in it with
- # multiple components and on Windows these components are separated with
- # '\'. These need to be escaped properly in the regexp for the match to
- # work correctly. See http://aspn.activestate.com/ASPN/docs/ActivePython
- # /2.2/howto/regex/regex.html#SECTION000420000000000000000.
- if sys.platform == 'win32':
- for i in range(0, len(additional_lines)):
- additional_lines[i] = additional_lines[i].replace("\\", "\\\\")
- lines.extend(additional_lines)
- else:
- if sys.platform == 'win32' and additional_lines != None:
- additional_lines = additional_lines.replace("\\", "\\\\")
- lines.append(str(additional_lines))
+ # Address "The Backslash Plague"
+ #
+ # If ADDITIONAL_LINES are present there are possibly paths in it with
+ # multiple components and on Windows these components are separated with
+ # '\'. These need to be escaped properly in the regexp for the match to
+ # work correctly. See http://aspn.activestate.com/ASPN/docs/ActivePython
+ # /2.2/howto/regex/regex.html#SECTION000420000000000000000.
+ if isinstance(additional_lines, str):
+ additional_lines = [additional_lines]
+ if sys.platform == 'win32':
+ additional_lines = [line.replace("\\", "\\\\") for line in additional_lines]
+ lines += additional_lines
+
+ lines += svntest.main.summary_of_conflicts(
+ text_conflicts, prop_conflicts, tree_conflicts,
+ text_resolved, prop_resolved, tree_resolved,
+ skipped_paths,
+ as_regex=True)
+
return "|".join(lines)
def check_mergeinfo_recursively(root_path, subpaths_mergeinfo):
@@ -179,8 +205,8 @@ def textual_merges_galore(sbox):
# url = os.path.join(svntest.main.test_area_url, sbox.repo_dir)
# Change mu and rho for revision 2
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
+ mu_path = sbox.ospath('A/mu')
+ rho_path = sbox.ospath('A/D/G/rho')
mu_text = fill_file_with_lines(mu_path, 2)
rho_text = fill_file_with_lines(rho_path, 2)
@@ -208,9 +234,9 @@ def textual_merges_galore(sbox):
# Now commit some more mods from the original working copy, to
# produce revision 3.
- lambda_path = os.path.join(wc_dir, 'A', 'B', 'lambda')
- pi_path = os.path.join(wc_dir, 'A', 'D', 'G', 'pi')
- tau_path = os.path.join(wc_dir, 'A', 'D', 'G', 'tau')
+ lambda_path = sbox.ospath('A/B/lambda')
+ pi_path = sbox.ospath('A/D/G/pi')
+ tau_path = sbox.ospath('A/D/G/tau')
lambda_text = fill_file_with_lines(lambda_path, 2)
pi_text = fill_file_with_lines(pi_path, 2)
@@ -414,8 +440,8 @@ def add_with_history(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- C_path = os.path.join(wc_dir, 'A', 'C')
- F_path = os.path.join(wc_dir, 'A', 'B', 'F')
+ C_path = sbox.ospath('A/C')
+ F_path = sbox.ospath('A/B/F')
F_url = sbox.repo_url + '/A/B/F'
Q_path = os.path.join(F_path, 'Q')
@@ -493,6 +519,13 @@ def add_with_history(sbox):
expected_skip = wc.State(C_path, { })
+ # Add some unversioned directory obstructions to the incoming
+ # additions. This should be tolerated and *not* result in any
+ # difference between the --dry-run and actual merge.
+ # See http://svn.haxx.se/dev/archive-2012-11/0696.shtml
+ os.mkdir(sbox.ospath('A/C/Q'))
+ os.mkdir(sbox.ospath('A/C/Q2'))
+
svntest.actions.run_and_verify_merge(C_path, '1', '2', F_url, None,
expected_output,
expected_mergeinfo_output,
@@ -543,9 +576,9 @@ def simple_property_merges(sbox):
wc_dir = sbox.wc_dir
# Add a property to a file and a directory
- alpha_path = os.path.join(wc_dir, 'A', 'B', 'E', 'alpha')
- beta_path = os.path.join(wc_dir, 'A', 'B', 'E', 'beta')
- E_path = os.path.join(wc_dir, 'A', 'B', 'E')
+ alpha_path = sbox.ospath('A/B/E/alpha')
+ beta_path = sbox.ospath('A/B/E/beta')
+ E_path = sbox.ospath('A/B/E')
svntest.actions.run_and_verify_svn(None, None, [],
'propset', 'foo', 'foo_val',
@@ -616,7 +649,7 @@ def simple_property_merges(sbox):
pristine_status.tweak(wc_rev=4)
# Merge B 3:4 into B2
- B2_path = os.path.join(wc_dir, 'A', 'B2')
+ B2_path = sbox.ospath('A/B2')
expected_output = wc.State(B2_path, {
'E' : Item(status=' U'),
'E/alpha' : Item(status=' U'),
@@ -734,7 +767,7 @@ def simple_property_merges(sbox):
# inherited from A2 (created by its copy from A) allows us to avoid
# a repeated merge.
alpha_url = sbox.repo_url + '/A/B/E/alpha'
- alpha_path = os.path.join(wc_dir, 'B', 'E', 'alpha')
+ alpha_path = sbox.ospath('B/E/alpha')
# Cannot use run_and_verify_merge with a file target
svntest.actions.run_and_verify_svn(None, [], [], 'merge', '-r', '3:4',
@@ -769,9 +802,9 @@ def merge_similar_unrelated_trees(sbox):
# Modify some stuff in the second one. Now merge
# (firstdir:seconddir->thirddir).
- base1_path = os.path.join(wc_dir, 'base1')
- base2_path = os.path.join(wc_dir, 'base2')
- apply_path = os.path.join(wc_dir, 'apply')
+ base1_path = sbox.ospath('base1')
+ base2_path = sbox.ospath('base2')
+ apply_path = sbox.ospath('apply')
base1_url = os.path.join(sbox.repo_url + '/base1')
base2_url = os.path.join(sbox.repo_url + '/base2')
@@ -835,7 +868,8 @@ def merge_similar_unrelated_trees(sbox):
#----------------------------------------------------------------------
def merge_one_file_helper(sbox, arg_flav, record_only = 0):
- "ARG_FLAV is one of 'r' (revision range) or 'c' (single change)."
+ """ARG_FLAV is one of 'r' (revision range) or 'c' (single change) or
+ '*' (no revision specified)."""
if arg_flav not in ('r', 'c', '*'):
raise svntest.Failure("Unrecognized flavor of merge argument")
@@ -845,7 +879,7 @@ def merge_one_file_helper(sbox, arg_flav, record_only = 0):
rho_rel_path = os.path.join('A', 'D', 'G', 'rho')
rho_path = os.path.join(wc_dir, rho_rel_path)
- G_path = os.path.join(wc_dir, 'A', 'D', 'G')
+ G_path = sbox.ospath('A/D/G')
rho_url = sbox.repo_url + '/A/D/G/rho'
# Change rho for revision 2
@@ -972,9 +1006,13 @@ def merge_record_only(sbox):
merge_one_file_helper(sbox, 'r', 1)
#----------------------------------------------------------------------
-# This is a regression for the enhancement added in issue #785.
+# This is a regression test for the enhancement added in issue #785 "add
+# friendly enhancement to 'svn merge'", which is about inferring that
+# the default target of "svn merge [-r...] FILE" should not be "." but
+# rather should be "FILE".
def merge_with_implicit_target_helper(sbox, arg_flav):
- "ARG_FLAV is one of 'r' (revision range) or 'c' (single change)."
+ """ARG_FLAV is one of 'r' (revision range) or 'c' (single change) or
+ '*' (no revision specified)."""
if arg_flav not in ('r', 'c', '*'):
raise svntest.Failure("Unrecognized flavor of merge argument")
@@ -983,7 +1021,7 @@ def merge_with_implicit_target_helper(sbox, arg_flav):
wc_dir = sbox.wc_dir
# Change mu for revision 2
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
orig_mu_text = svntest.tree.get_text(mu_path)
added_mu_text = ""
for x in range(2,11):
@@ -1114,7 +1152,7 @@ def merge_with_prev(sbox):
wc_dir = sbox.wc_dir
# Change mu for revision 2
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
orig_mu_text = svntest.tree.get_text(mu_path)
added_mu_text = ""
for x in range(2,11):
@@ -1122,7 +1160,7 @@ def merge_with_prev(sbox):
added_mu_text += "\n"
svntest.main.file_append(mu_path, added_mu_text)
- zot_path = os.path.join(wc_dir, 'A', 'zot')
+ zot_path = sbox.ospath('A/zot')
svntest.main.file_append(zot_path, "bar")
svntest.main.run_svn(None, 'add', zot_path)
@@ -1217,7 +1255,7 @@ def merge_binary_file(sbox):
# Add a binary file to the project
theta_contents = open(os.path.join(sys.path[0], "theta.bin"), 'rb').read()
# Write PNG file data into 'A/theta'.
- theta_path = os.path.join(wc_dir, 'A', 'theta')
+ theta_path = sbox.ospath('A/theta')
svntest.main.file_write(theta_path, theta_contents, 'wb')
svntest.main.run_svn(None, 'add', theta_path)
@@ -1311,7 +1349,7 @@ def merge_in_new_file_and_diff(sbox):
svntest.actions.run_and_verify_svn(None, None, [],
'update', wc_dir)
- new_file_path = os.path.join(wc_dir, 'A', 'B', 'E', 'newfile')
+ new_file_path = sbox.ospath('A/B/E/newfile')
svntest.main.file_write(new_file_path, "newfile\n")
# Add the new file, and commit revision 3.
@@ -1320,7 +1358,7 @@ def merge_in_new_file_and_diff(sbox):
'ci', '-m',
"Changing the trunk.", wc_dir)
- branch_path = os.path.join(wc_dir, "branch")
+ branch_path = sbox.ospath('branch')
url_branch_path = branch_path.replace(os.path.sep, '/')
# Merge our addition into the branch.
@@ -1356,6 +1394,13 @@ def merge_in_new_file_and_diff(sbox):
# Finally, run diff.
expected_output = [
+ "Index: " + url_branch_path + "/newfile\n",
+ "===================================================================\n",
+ "--- "+ url_branch_path + "/newfile (revision 0)\n",
+ "+++ "+ url_branch_path + "/newfile (working copy)\n",
+ "@@ -0,0 +1 @@\n",
+ "+newfile\n",
+
"Index: " + url_branch_path + "\n",
"===================================================================\n",
"--- "+ url_branch_path + "\t(revision 2)\n",
@@ -1365,12 +1410,7 @@ def merge_in_new_file_and_diff(sbox):
"___________________________________________________________________\n",
"Added: " + SVN_PROP_MERGEINFO + "\n",
" Merged /A/B/E:r2-3\n",
- "Index: " + url_branch_path + "/newfile\n",
- "===================================================================\n",
- "--- "+ url_branch_path + "/newfile (revision 0)\n",
- "+++ "+ url_branch_path + "/newfile (working copy)\n",
- "@@ -0,0 +1 @@\n",
- "+newfile\n"]
+ ]
svntest.actions.run_and_verify_svn(None, expected_output, [], 'diff',
'--show-copies-as-adds', branch_path)
@@ -1387,8 +1427,8 @@ def merge_skips_obstructions(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- C_path = os.path.join(wc_dir, 'A', 'C')
- F_path = os.path.join(wc_dir, 'A', 'B', 'F')
+ C_path = sbox.ospath('A/C')
+ F_path = sbox.ospath('A/B/F')
F_url = sbox.repo_url + '/A/B/F'
Q_path = os.path.join(F_path, 'Q')
@@ -1445,7 +1485,7 @@ def merge_skips_obstructions(sbox):
'Q/bar' : Item(status=' ', wc_rev='-', copied='+'),
})
expected_skip = wc.State(C_path, {
- 'foo' : Item(),
+ 'foo' : Item(verb='Skipped'),
})
# Unversioned:
svntest.main.file_append(os.path.join(C_path, "foo"), "foo")
@@ -1473,6 +1513,7 @@ def merge_skips_obstructions(sbox):
expected_output = wc.State(C_path, {
'foo' : Item(status='A '),
+ 'Q/bar' : Item(status=' ', treeconflict='A'), # Skipped
})
expected_mergeinfo_output = wc.State(C_path, {
'' : Item(status=' U'),
@@ -1489,8 +1530,7 @@ def merge_skips_obstructions(sbox):
'foo' : Item(status='A ', wc_rev='-', copied='+'),
})
expected_skip = wc.State(C_path, {
- 'Q' : Item(),
- 'Q/bar' : Item(),
+ 'Q' : Item(verb='Skipped'),
})
svntest.actions.run_and_verify_merge(C_path, '1', '2', F_url, None,
@@ -1508,8 +1548,8 @@ def merge_skips_obstructions(sbox):
svntest.actions.run_and_verify_svn(None, None, [], 'revert', '-R', wc_dir)
svntest.actions.run_and_verify_status(wc_dir, pre_merge_status)
- iota_path = os.path.join(wc_dir, 'iota')
- G_path = os.path.join(wc_dir, 'A', 'D', 'G')
+ iota_path = sbox.ospath('iota')
+ G_path = sbox.ospath('A/D/G')
svntest.actions.run_and_verify_svn(None, None, [], 'rm', iota_path, G_path)
expected_output = wc.State(wc_dir, {
@@ -1550,8 +1590,8 @@ def merge_skips_obstructions(sbox):
# No-op merge still sets mergeinfo
expected_status.tweak('', status=' M')
expected_skip = wc.State(wc_dir, {
- 'iota' : Item(),
- 'A/D/G' : Item(),
+ 'iota' : Item(verb='Skipped'),
+ 'A/D/G' : Item(verb='Skipped'),
})
svntest.actions.run_and_verify_merge(wc_dir, '2', '3',
sbox.repo_url, None,
@@ -1572,7 +1612,7 @@ def merge_skips_obstructions(sbox):
expected_status.tweak('', status=' ')
svntest.actions.run_and_verify_status(wc_dir, expected_status)
- lambda_path = os.path.join(wc_dir, 'A', 'B', 'lambda')
+ lambda_path = sbox.ospath('A/B/lambda')
svntest.main.file_append(lambda_path, "more text")
expected_output = wc.State(wc_dir, {
'A/B/lambda' : Item(verb='Sending'),
@@ -1612,7 +1652,7 @@ def merge_skips_obstructions(sbox):
expected_disk.remove('A/D/G')
expected_disk.tweak('', props={SVN_PROP_MERGEINFO : '/:4'})
expected_skip = wc.State(wc_dir, {
- 'A/B/lambda' : Item(),
+ 'A/B/lambda' : Item(verb='Skipped'),
})
# No-op merge still sets mergeinfo.
expected_status_short = expected_status.copy(wc_dir)
@@ -1660,6 +1700,9 @@ def merge_skips_obstructions(sbox):
expected_disk.remove('A/B/lambda')
expected_status.tweak('A/B/lambda', status='! ')
expected_status.tweak('', status=' ')
+ expected_skip = wc.State(wc_dir, {
+ 'A/B/lambda' : Item(verb='Skipped missing target'),
+ })
# Why do we need to --ignore-ancestry? Because the previous merge of r4,
# despite being inoperative, set mergeinfo for r4 on the WC. With the
# advent of merge tracking this repeat merge attempt would not be attempted.
@@ -1690,9 +1733,7 @@ def merge_into_missing(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- single_db = svntest.main.wc_is_singledb(wc_dir)
-
- F_path = os.path.join(wc_dir, 'A', 'B', 'F')
+ F_path = sbox.ospath('A/B/F')
F_url = sbox.repo_url + '/A/B/F'
Q_path = os.path.join(F_path, 'Q')
foo_path = os.path.join(F_path, 'foo')
@@ -1753,23 +1794,16 @@ def merge_into_missing(sbox):
expected_status = wc.State(F_path, {
'' : Item(status=' ', wc_rev=1),
'foo' : Item(status='! ', wc_rev=2),
- 'Q' : Item(status='! ', wc_rev='?'),
- })
- expected_skip = wc.State(F_path, {
- 'Q' : Item(),
- 'foo' : Item(),
- })
-
- if single_db:
- # Revision not lost
- expected_status.tweak('Q', wc_rev=2)
+ 'Q' : Item(status='! ', wc_rev=2),
# Missing data still available
- expected_status.add({
- 'Q/R' : Item(status='! ', wc_rev='3'),
- 'Q/R/bar' : Item(status='! ', wc_rev='3'),
- 'Q/baz' : Item(status='! ', wc_rev='3'),
+ 'Q/R' : Item(status='! ', wc_rev=3),
+ 'Q/R/bar' : Item(status='! ', wc_rev=3),
+ 'Q/baz' : Item(status='! ', wc_rev=3),
+ })
+ expected_skip = wc.State(F_path, {
+ 'Q' : Item(verb='Skipped missing target'),
+ 'foo' : Item(verb='Skipped missing target'),
})
-
# Use --ignore-ancestry because merge tracking aware merges raise an
# error when the merge target is missing subtrees due to OS-level
# deletes.
@@ -1792,18 +1826,13 @@ def merge_into_missing(sbox):
expected_status = wc.State(F_path, {
'' : Item(status=' ', wc_rev=1),
'foo' : Item(status='! ', wc_rev=2),
- 'Q' : Item(status='! ', wc_rev='?'),
- })
- expected_mergeinfo_output = wc.State(F_path, {
- })
-
- if single_db:
+ 'Q' : Item(status='! ', wc_rev='2'),
# Revision is known and we can record mergeinfo
- expected_status.tweak('Q', wc_rev='2', entry_rev='?')
- expected_status.add({
- 'Q/R' : Item(status='! ', wc_rev='3'),
- 'Q/R/bar' : Item(status='! ', wc_rev='3'),
- 'Q/baz' : Item(status='! ', wc_rev='3'),
+ 'Q/R' : Item(status='! ', wc_rev='3'),
+ 'Q/R/bar' : Item(status='! ', wc_rev='3'),
+ 'Q/baz' : Item(status='! ', wc_rev='3'),
+ })
+ expected_mergeinfo_output = wc.State(F_path, {
})
svntest.actions.run_and_verify_merge(F_path, '1', '2', F_url, None,
@@ -1834,18 +1863,11 @@ def merge_into_missing(sbox):
expected_status.add({
'A/B/F' : Item(status=' ', wc_rev=1),
'A/B/F/foo' : Item(status='! ', wc_rev=2),
- 'A/B/F/Q' : Item(status='! ', wc_rev='?'),
- })
- if single_db:
- # Revision known and mergeinfo recorded
- expected_status.tweak('A/B/F/Q', wc_rev='2')
- # Missing data still available
- expected_status.add({
- 'A/B/F/Q' : Item(status='! ', wc_rev='2'),
- 'A/B/F/Q/baz' : Item(status='! ', wc_rev='3'),
- 'A/B/F/Q/R' : Item(status='! ', wc_rev='3'),
- 'A/B/F/Q/R/bar' : Item(status='! ', wc_rev='3'),
- })
+ 'A/B/F/Q' : Item(status='! ', wc_rev=2),
+ 'A/B/F/Q/baz' : Item(status='! ', wc_rev='3'),
+ 'A/B/F/Q/R' : Item(status='! ', wc_rev='3'),
+ 'A/B/F/Q/R/bar' : Item(status='! ', wc_rev='3'),
+ })
svntest.actions.run_and_verify_status(wc_dir, expected_status)
@@ -1860,7 +1882,7 @@ def dry_run_adds_file_with_prop(sbox):
wc_dir = sbox.wc_dir
# Commit a new file which has a property.
- zig_path = os.path.join(wc_dir, 'A', 'B', 'E', 'zig')
+ zig_path = sbox.ospath('A/B/E/zig')
svntest.main.file_append(zig_path, "zig contents")
svntest.actions.run_and_verify_svn(None, None, [], 'add', zig_path)
svntest.actions.run_and_verify_svn(None, None, [],
@@ -1880,7 +1902,7 @@ def dry_run_adds_file_with_prop(sbox):
None, wc_dir)
# Do a regular merge of that change into a different dir.
- F_path = os.path.join(wc_dir, 'A', 'B', 'F')
+ F_path = sbox.ospath('A/B/F')
E_url = sbox.repo_url + '/A/B/E'
expected_output = wc.State(F_path, {
@@ -1920,7 +1942,7 @@ def merge_binary_with_common_ancestry(sbox):
wc_dir = sbox.wc_dir
# Create the common ancestry path
- I_path = os.path.join(wc_dir, 'I')
+ I_path = sbox.ospath('I')
svntest.main.run_svn(None, 'mkdir', I_path)
# Add a binary file to the common ancestry path
@@ -1949,7 +1971,7 @@ def merge_binary_with_common_ancestry(sbox):
wc_dir)
# Create the first branch
- J_path = os.path.join(wc_dir, 'J')
+ J_path = sbox.ospath('J')
svntest.main.run_svn(None, 'copy', I_path, J_path)
# Commit the first branch
@@ -1968,7 +1990,7 @@ def merge_binary_with_common_ancestry(sbox):
wc_dir)
# Create the path where the files will be merged
- K_path = os.path.join(wc_dir, 'K')
+ K_path = sbox.ospath('K')
svntest.main.run_svn(None, 'mkdir', K_path)
# Commit the new path
@@ -2019,13 +2041,13 @@ def merge_binary_with_common_ancestry(sbox):
wc_dir)
# Create the second branch from the modified ancestry
- L_path = os.path.join(wc_dir, 'L')
+ L_path = sbox.ospath('L')
svntest.main.run_svn(None, 'copy', I_path, L_path)
# Commit the second branch
expected_output = wc.State(wc_dir, {
'L' : Item(verb='Adding'),
- 'L/theta' : Item(verb='Adding (bin)'),
+ 'L/theta' : Item(verb='Replacing'),
})
expected_status.add({
@@ -2138,7 +2160,7 @@ def merge_funny_chars_on_path(sbox):
None, wc_dir)
# Do a regular merge of that change into a different dir.
- F_path = os.path.join(wc_dir, 'A', 'B', 'F')
+ F_path = sbox.ospath('A/B/F')
E_url = sbox.repo_url + '/A/B/E'
expected_output_dic = {}
@@ -2284,7 +2306,7 @@ def merge_prop_change_to_deleted_target(sbox):
wc_dir = sbox.wc_dir
# Add a property to alpha.
- alpha_path = os.path.join(wc_dir, 'A', 'B', 'E', 'alpha')
+ alpha_path = sbox.ospath('A/B/E/alpha')
svntest.actions.run_and_verify_svn(None, None, [],
'propset', 'foo', 'foo_val',
alpha_path)
@@ -2333,8 +2355,8 @@ def set_up_dir_replace(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- C_path = os.path.join(wc_dir, 'A', 'C')
- F_path = os.path.join(wc_dir, 'A', 'B', 'F')
+ C_path = sbox.ospath('A/C')
+ F_path = sbox.ospath('A/B/F')
F_url = sbox.repo_url + '/A/B/F'
foo_path = os.path.join(F_path, 'foo')
@@ -2439,15 +2461,15 @@ def set_up_dir_replace(sbox):
# A merge that replaces a directory
# Tests for Issue #2144 and Issue #2607
@SkipUnless(server_has_mergeinfo)
-@Issue(2144)
+@Issue(2144,2607)
def merge_dir_replace(sbox):
"merge a replacement of a directory"
set_up_dir_replace(sbox)
wc_dir = sbox.wc_dir
- C_path = os.path.join(wc_dir, 'A', 'C')
- F_path = os.path.join(wc_dir, 'A', 'B', 'F')
+ C_path = sbox.ospath('A/C')
+ F_path = sbox.ospath('A/B/F')
F_url = sbox.repo_url + '/A/B/F'
foo_path = os.path.join(F_path, 'foo')
new_file2 = os.path.join(foo_path, "new file 2")
@@ -2560,8 +2582,8 @@ def merge_dir_and_file_replace(sbox):
set_up_dir_replace(sbox)
wc_dir = sbox.wc_dir
- C_path = os.path.join(wc_dir, 'A', 'C')
- F_path = os.path.join(wc_dir, 'A', 'B', 'F')
+ C_path = sbox.ospath('A/C')
+ F_path = sbox.ospath('A/B/F')
F_url = sbox.repo_url + '/A/B/F'
foo_path = os.path.join(F_path, 'foo')
new_file2 = os.path.join(foo_path, "new file 2")
@@ -2677,7 +2699,7 @@ def merge_file_with_space_in_its_name(sbox):
# For issue #2144
sbox.build()
wc_dir = sbox.wc_dir
- new_file = os.path.join(wc_dir, "new file")
+ new_file = sbox.ospath('new file')
# Make r2.
svntest.main.file_append(new_file, "Initial text in the file.\n")
@@ -2712,7 +2734,7 @@ def merge_dir_branches(sbox):
wc_dir = sbox.wc_dir
wc_uuid = svntest.actions.get_wc_uuid(wc_dir)
- F_path = os.path.join(wc_dir, 'A', 'B', 'F')
+ F_path = sbox.ospath('A/B/F')
F_url = sbox.repo_url + '/A/B/F'
C_url = sbox.repo_url + '/A/C'
@@ -2733,7 +2755,7 @@ def merge_dir_branches(sbox):
None, wc_dir)
# Create an unversioned foo
- foo_path = os.path.join(wc_dir, 'foo')
+ foo_path = sbox.ospath('foo')
os.mkdir(foo_path)
# Merge from C to F onto the wc_dir
@@ -2767,9 +2789,9 @@ def safe_property_merge(sbox):
wc_dir = sbox.wc_dir
# Add a property to two files and a directory, commit as r2.
- alpha_path = os.path.join(wc_dir, 'A', 'B', 'E', 'alpha')
- beta_path = os.path.join(wc_dir, 'A', 'B', 'E', 'beta')
- E_path = os.path.join(wc_dir, 'A', 'B', 'E')
+ alpha_path = sbox.ospath('A/B/E/alpha')
+ beta_path = sbox.ospath('A/B/E/beta')
+ E_path = sbox.ospath('A/B/E')
svntest.actions.run_and_verify_svn(None, None, [],
'propset', 'foo', 'foo_val',
@@ -2821,9 +2843,9 @@ def safe_property_merge(sbox):
svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
# Make local propchanges to E, alpha and beta in the branch.
- alpha_path2 = os.path.join(wc_dir, 'A', 'B2', 'E', 'alpha')
- beta_path2 = os.path.join(wc_dir, 'A', 'B2', 'E', 'beta')
- E_path2 = os.path.join(wc_dir, 'A', 'B2', 'E')
+ alpha_path2 = sbox.ospath('A/B2/E/alpha')
+ beta_path2 = sbox.ospath('A/B2/E/beta')
+ E_path2 = sbox.ospath('A/B2/E')
svntest.actions.run_and_verify_svn(None, None, [],
'propset', 'foo', 'branchval',
@@ -2834,7 +2856,7 @@ def safe_property_merge(sbox):
# Now merge the recent B change to the branch. Because we already
# have local propmods, we should get property conflicts.
- B2_path = os.path.join(wc_dir, 'A', 'B2')
+ B2_path = sbox.ospath('A/B2')
expected_output = wc.State(B2_path, {
'E' : Item(status=' C'),
@@ -2898,8 +2920,8 @@ def property_merge_from_branch(sbox):
wc_dir = sbox.wc_dir
# Add a property to a file and a directory, commit as r2.
- alpha_path = os.path.join(wc_dir, 'A', 'B', 'E', 'alpha')
- E_path = os.path.join(wc_dir, 'A', 'B', 'E')
+ alpha_path = sbox.ospath('A/B/E/alpha')
+ E_path = sbox.ospath('A/B/E')
svntest.actions.run_and_verify_svn(None, None, [],
'propset', 'foo', 'foo_val',
@@ -2945,8 +2967,8 @@ def property_merge_from_branch(sbox):
svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
# Make different propchanges changes to the B2 branch and commit as r5.
- alpha_path2 = os.path.join(wc_dir, 'A', 'B2', 'E', 'alpha')
- E_path2 = os.path.join(wc_dir, 'A', 'B2', 'E')
+ alpha_path2 = sbox.ospath('A/B2/E/alpha')
+ E_path2 = sbox.ospath('A/B2/E')
svntest.actions.run_and_verify_svn(None, None, [],
'propset', 'foo', 'branchval',
@@ -2965,7 +2987,7 @@ def property_merge_from_branch(sbox):
# Now merge the recent B change to the branch. There are no local
# mods anywhere, but we should still get property conflicts anyway!
- B2_path = os.path.join(wc_dir, 'A', 'B2')
+ B2_path = sbox.ospath('A/B2')
expected_output = wc.State(B2_path, {
'E' : Item(status=' C'),
@@ -3027,7 +3049,7 @@ def property_merge_undo_redo(sbox):
wc_dir = sbox.wc_dir
# Add a property to a file, commit as r2.
- alpha_path = os.path.join(wc_dir, 'A', 'B', 'E', 'alpha')
+ alpha_path = sbox.ospath('A/B/E/alpha')
svntest.actions.run_and_verify_svn(None, None, [],
'propset', 'foo', 'foo_val',
alpha_path)
@@ -3118,11 +3140,11 @@ def cherry_pick_text_conflict(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, 'A')
+ A_path = sbox.ospath('A')
A_url = sbox.repo_url + '/A'
mu_path = os.path.join(A_path, 'mu')
branch_A_url = sbox.repo_url + '/copy-of-A'
- branch_mu_path = os.path.join(wc_dir, 'copy-of-A', 'mu')
+ branch_mu_path = sbox.ospath('copy-of-A/mu')
# Create a branch of A.
svntest.actions.run_and_verify_svn(None, None, [], 'cp',
@@ -3228,7 +3250,7 @@ def merge_file_replace(sbox):
wc_dir = sbox.wc_dir
# File scheduled for deletion
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
+ rho_path = sbox.ospath('A/D/G/rho')
svntest.actions.run_and_verify_svn(None, None, [], 'rm', rho_path)
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
@@ -3320,7 +3342,7 @@ def merge_file_replace_to_mixed_rev_wc(sbox):
wc_dir = sbox.wc_dir
# File scheduled for deletion
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
+ rho_path = sbox.ospath('A/D/G/rho')
svntest.actions.run_and_verify_svn(None, None, [], 'rm', rho_path)
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
@@ -3597,8 +3619,10 @@ def merge_conflict_markers_matching_eol(sbox):
wc_dir = sbox.wc_dir
filecount = 1
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
+ # CRLF is a string that will match a CRLF sequence read from a text file.
+ # ### On Windows, we assume CRLF will be read as LF, so it's a poor test.
if os.name == 'nt':
crlf = '\n'
else:
@@ -3736,8 +3760,10 @@ def merge_eolstyle_handling(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
+ # CRLF is a string that will match a CRLF sequence read from a text file.
+ # ### On Windows, we assume CRLF will be read as LF, so it's a poor test.
if os.name == 'nt':
crlf = '\n'
else:
@@ -3950,7 +3976,7 @@ def avoid_repeated_merge_using_inherited_merge_info(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, 'A')
+ A_path = sbox.ospath('A')
A_B_path = os.path.join(A_path, 'B')
A_B_E_path = os.path.join(A_B_path, 'E')
A_B_F_path = os.path.join(A_B_path, 'F')
@@ -4069,7 +4095,7 @@ def avoid_repeated_merge_on_subtree_with_merge_info(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, 'A')
+ A_path = sbox.ospath('A')
A_B_path = os.path.join(A_path, 'B')
A_B_E_path = os.path.join(A_B_path, 'E')
A_B_F_path = os.path.join(A_B_path, 'F')
@@ -4331,9 +4357,9 @@ def obey_reporter_api_semantics_while_doing_subtree_merges(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, 'A')
- A_D_path = os.path.join(wc_dir, 'A', 'D')
- copy_of_A_D_path = os.path.join(wc_dir, 'A', 'copy-of-D')
+ A_path = sbox.ospath('A')
+ A_D_path = sbox.ospath('A/D')
+ copy_of_A_D_path = sbox.ospath('A/copy-of-D')
svntest.main.run_svn(None, "cp", A_D_path, copy_of_A_D_path)
@@ -4463,6 +4489,12 @@ def set_up_branch(sbox, branch_only = False, nbr_of_branches = 1):
r(5 + NBR_OF_BRANCHES) - A/D/H/omega
Return (expected_disk, expected_status).'''
+ # With the default parameters, the branching looks like this:
+ #
+ # A -1-----3-4-5-6--
+ # \
+ # A_COPY 2-----------
+
wc_dir = sbox.wc_dir
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
@@ -4556,7 +4588,7 @@ def set_up_branch(sbox, branch_only = False, nbr_of_branches = 1):
# Make some changes under A which we'll later merge under A_COPY:
# r(nbr_of_branches + 2) - modify and commit A/D/H/psi
- svntest.main.file_write(os.path.join(wc_dir, "A", "D", "H", "psi"),
+ svntest.main.file_write(sbox.ospath('A/D/H/psi'),
"New content")
expected_output = wc.State(wc_dir, {'A/D/H/psi' : Item(verb='Sending')})
expected_status.tweak('A/D/H/psi', wc_rev=nbr_of_branches + 2)
@@ -4565,7 +4597,7 @@ def set_up_branch(sbox, branch_only = False, nbr_of_branches = 1):
expected_disk.tweak('A/D/H/psi', contents="New content")
# r(nbr_of_branches + 3) - modify and commit A/D/G/rho
- svntest.main.file_write(os.path.join(wc_dir, "A", "D", "G", "rho"),
+ svntest.main.file_write(sbox.ospath('A/D/G/rho'),
"New content")
expected_output = wc.State(wc_dir, {'A/D/G/rho' : Item(verb='Sending')})
expected_status.tweak('A/D/G/rho', wc_rev=nbr_of_branches + 3)
@@ -4574,7 +4606,7 @@ def set_up_branch(sbox, branch_only = False, nbr_of_branches = 1):
expected_disk.tweak('A/D/G/rho', contents="New content")
# r(nbr_of_branches + 4) - modify and commit A/B/E/beta
- svntest.main.file_write(os.path.join(wc_dir, "A", "B", "E", "beta"),
+ svntest.main.file_write(sbox.ospath('A/B/E/beta'),
"New content")
expected_output = wc.State(wc_dir, {'A/B/E/beta' : Item(verb='Sending')})
expected_status.tweak('A/B/E/beta', wc_rev=nbr_of_branches + 4)
@@ -4583,7 +4615,7 @@ def set_up_branch(sbox, branch_only = False, nbr_of_branches = 1):
expected_disk.tweak('A/B/E/beta', contents="New content")
# r(nbr_of_branches + 5) - modify and commit A/D/H/omega
- svntest.main.file_write(os.path.join(wc_dir, "A", "D", "H", "omega"),
+ svntest.main.file_write(sbox.ospath('A/D/H/omega'),
"New content")
expected_output = wc.State(wc_dir, {'A/D/H/omega' : Item(verb='Sending')})
expected_status.tweak('A/D/H/omega', wc_rev=nbr_of_branches + 5)
@@ -4619,13 +4651,13 @@ def mergeinfo_inheritance(sbox):
wc_disk, wc_status = set_up_branch(sbox)
# Some paths we'll care about
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- B_COPY_path = os.path.join(wc_dir, "A_COPY", "B")
- beta_COPY_path = os.path.join(wc_dir, "A_COPY", "B", "E", "beta")
- E_COPY_path = os.path.join(wc_dir, "A_COPY", "B", "E")
- omega_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "omega")
- D_COPY_path = os.path.join(wc_dir, "A_COPY", "D")
- G_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "G")
+ A_COPY_path = sbox.ospath('A_COPY')
+ B_COPY_path = sbox.ospath('A_COPY/B')
+ beta_COPY_path = sbox.ospath('A_COPY/B/E/beta')
+ E_COPY_path = sbox.ospath('A_COPY/B/E')
+ omega_COPY_path = sbox.ospath('A_COPY/D/H/omega')
+ D_COPY_path = sbox.ospath('A_COPY/D')
+ G_COPY_path = sbox.ospath('A_COPY/D/G')
# Now start merging...
@@ -4890,56 +4922,54 @@ def mergeinfo_inheritance(sbox):
# In single-db mode you can't create a disconnected working copy by just
# copying a subdir
- if svntest.main.wc_is_singledb(wc_dir):
- return
-
- # Copy the subtree A_COPY/B/E from the working copy, making the
- # disconnected WC E_only.
- other_wc = sbox.add_wc_path('E_only')
- svntest.actions.duplicate_dir(E_COPY_path, other_wc)
-
- # Update the disconnected WC it so it will get the most recent mergeinfo
- # from the repos when merging.
- svntest.actions.run_and_verify_svn(None, exp_noop_up_out(7), [], 'up',
- other_wc)
-
- # Merge r5:4 into the root of the disconnected WC.
- # E_only has no explicit mergeinfo and since it's the root of the WC
- # cannot inherit any mergeinfo from a working copy ancestor path. Nor
- # does it have any mergeinfo explicitly set on it in the repository.
- # An ancestor path on the repository side, A_COPY/B does have the merge
- # info '/A/B:5' however and E_only should inherit this, resulting in
- # empty mergeinfo after the removal of r5 (A_COPY has mergeinfo of
- # '/A:3' so this empty mergeinfo is needed to override that.
- expected_output = wc.State(other_wc,
- {'beta' : Item(status='U ')})
- expected_mergeinfo_output = wc.State(other_wc, {
- '' : Item(status=' G')
- })
- expected_elision_output = wc.State(other_wc, {
- })
- expected_status = wc.State(other_wc, {
- '' : Item(status=' M', wc_rev=7),
- 'alpha' : Item(status=' ', wc_rev=7),
- 'beta' : Item(status='M ', wc_rev=7),
- })
- expected_disk = wc.State('', {
- '' : Item(props={SVN_PROP_MERGEINFO : ''}),
- 'alpha' : Item("This is the file 'alpha'.\n"),
- 'beta' : Item("This is the file 'beta'.\n"),
- })
- expected_skip = wc.State(other_wc, { })
- svntest.actions.run_and_verify_merge(other_wc, '5', '4',
- sbox.repo_url + '/A/B/E', None,
- expected_output,
- expected_mergeinfo_output,
- expected_elision_output,
- expected_disk,
- expected_status,
- expected_skip,
- None, None, None, None,
- None, 1)
+ ## Copy the subtree A_COPY/B/E from the working copy, making the
+ ## disconnected WC E_only.
+ #other_wc = sbox.add_wc_path('E_only')
+ #svntest.actions.duplicate_dir(E_COPY_path, other_wc)
+ #
+ ## Update the disconnected WC it so it will get the most recent mergeinfo
+ ## from the repos when merging.
+ #svntest.actions.run_and_verify_svn(None, exp_noop_up_out(7), [], 'up',
+ # other_wc)
+ #
+ ## Merge r5:4 into the root of the disconnected WC.
+ ## E_only has no explicit mergeinfo and since it's the root of the WC
+ ## cannot inherit any mergeinfo from a working copy ancestor path. Nor
+ ## does it have any mergeinfo explicitly set on it in the repository.
+ ## An ancestor path on the repository side, A_COPY/B does have the merge
+ ## info '/A/B:5' however and E_only should inherit this, resulting in
+ ## empty mergeinfo after the removal of r5 (A_COPY has mergeinfo of
+ ## '/A:3' so this empty mergeinfo is needed to override that.
+ #expected_output = wc.State(other_wc,
+ # {'beta' : Item(status='U ')})
+ #expected_mergeinfo_output = wc.State(other_wc, {
+ # '' : Item(status=' G')
+ # })
+ #expected_elision_output = wc.State(other_wc, {
+ # })
+ #expected_status = wc.State(other_wc, {
+ # '' : Item(status=' M', wc_rev=7),
+ # 'alpha' : Item(status=' ', wc_rev=7),
+ # 'beta' : Item(status='M ', wc_rev=7),
+ # })
+ #expected_disk = wc.State('', {
+ # '' : Item(props={SVN_PROP_MERGEINFO : ''}),
+ # 'alpha' : Item("This is the file 'alpha'.\n"),
+ # 'beta' : Item("This is the file 'beta'.\n"),
+ # })
+ #expected_skip = wc.State(other_wc, { })
+ #
+ #svntest.actions.run_and_verify_merge(other_wc, '5', '4',
+ # sbox.repo_url + '/A/B/E', None,
+ # expected_output,
+ # expected_mergeinfo_output,
+ # expected_elision_output,
+ # expected_disk,
+ # expected_status,
+ # expected_skip,
+ # None, None, None, None,
+ # None, 1)
#----------------------------------------------------------------------
@SkipUnless(server_has_mergeinfo)
@@ -4957,9 +4987,9 @@ def mergeinfo_elision(sbox):
wc_disk, wc_status = set_up_branch(sbox)
# Some paths we'll care about
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- beta_COPY_path = os.path.join(wc_dir, "A_COPY", "B", "E", "beta")
- G_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "G")
+ A_COPY_path = sbox.ospath('A_COPY')
+ beta_COPY_path = sbox.ospath('A_COPY/B/E/beta')
+ G_COPY_path = sbox.ospath('A_COPY/D/G')
# Now start merging...
@@ -5211,9 +5241,9 @@ def mergeinfo_inheritance_and_discontinuous_ranges(sbox):
# Some paths we'll care about
A_url = sbox.repo_url + '/A'
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- D_COPY_path = os.path.join(wc_dir, "A_COPY", "D")
- A_COPY_rho_path = os.path.join(wc_dir, "A_COPY", "D", "G", "rho")
+ A_COPY_path = sbox.ospath('A_COPY')
+ D_COPY_path = sbox.ospath('A_COPY/D')
+ A_COPY_rho_path = sbox.ospath('A_COPY/D/G/rho')
expected_disk, expected_status = set_up_branch(sbox)
@@ -5324,9 +5354,9 @@ def merge_to_target_with_copied_children(sbox):
expected_disk, expected_status = set_up_branch(sbox)
# Some paths we'll care about
- D_COPY_path = os.path.join(wc_dir, "A_COPY", "D")
- G_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "G")
- rho_COPY_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "G", "rho_copy")
+ D_COPY_path = sbox.ospath('A_COPY/D')
+ G_COPY_path = sbox.ospath('A_COPY/D/G')
+ rho_COPY_COPY_path = sbox.ospath('A_COPY/D/G/rho_copy')
# URL to URL copy A_COPY/D/G/rho to A_COPY/D/G/rho_copy
svntest.actions.run_and_verify_svn(None, None, [], 'copy',
@@ -5410,11 +5440,11 @@ def merge_to_switched_path(sbox):
wc_disk, wc_status = set_up_branch(sbox)
# Some paths we'll care about
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- A_COPY_D_path = os.path.join(wc_dir, "A_COPY", "D")
- G_COPY_path = os.path.join(wc_dir, "A", "D", "G_COPY")
- A_COPY_D_G_path = os.path.join(wc_dir, "A_COPY", "D", "G")
- A_COPY_D_G_rho_path = os.path.join(wc_dir, "A_COPY", "D", "G", "rho")
+ A_COPY_path = sbox.ospath('A_COPY')
+ A_COPY_D_path = sbox.ospath('A_COPY/D')
+ G_COPY_path = sbox.ospath('A/D/G_COPY')
+ A_COPY_D_G_path = sbox.ospath('A_COPY/D/G')
+ A_COPY_D_G_rho_path = sbox.ospath('A_COPY/D/G/rho')
expected = svntest.verify.UnorderedOutput(
["A " + os.path.join(G_COPY_path, "pi") + "\n",
@@ -5440,7 +5470,7 @@ def merge_to_switched_path(sbox):
None, wc_dir)
# r8 - modify and commit A/D/G_COPY/rho
- svntest.main.file_write(os.path.join(wc_dir, "A", "D", "G_COPY", "rho"),
+ svntest.main.file_write(sbox.ospath('A/D/G_COPY/rho'),
"New *and* improved rho content")
expected_output = wc.State(wc_dir, {'A/D/G_COPY/rho' : Item(verb='Sending')})
wc_status.tweak('A/D/G_COPY/rho', wc_rev=8)
@@ -5573,7 +5603,7 @@ def merge_to_switched_path(sbox):
# 3188: Mergeinfo on switched targets/subtrees should
# elide to repos
@SkipUnless(server_has_mergeinfo)
-@Issue(2823,2839,3187,3188)
+@Issue(2823,2839,3187,3188,4056)
def merge_to_path_with_switched_children(sbox):
"merge to path with switched children"
@@ -5603,18 +5633,18 @@ def merge_to_path_with_switched_children(sbox):
wc_disk, wc_status = set_up_branch(sbox, False, 3)
# Some paths we'll care about
- D_path = os.path.join(wc_dir, "A", "D")
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- A_COPY_beta_path = os.path.join(wc_dir, "A_COPY", "B", "E", "beta")
- A_COPY_chi_path = os.path.join(wc_dir, "A_COPY", "D", "H", "chi")
- A_COPY_omega_path = os.path.join(wc_dir, "A_COPY", "D", "H", "omega")
- A_COPY_psi_path = os.path.join(wc_dir, "A_COPY", "D", "H", "psi")
- A_COPY_G_path = os.path.join(wc_dir, "A_COPY", "D", "G")
- A_COPY_rho_path = os.path.join(wc_dir, "A_COPY", "D", "G", "rho")
- A_COPY_H_path = os.path.join(wc_dir, "A_COPY", "D", "H")
- A_COPY_D_path = os.path.join(wc_dir, "A_COPY", "D")
- A_COPY_gamma_path = os.path.join(wc_dir, "A_COPY", "D", "gamma")
- H_COPY_2_path = os.path.join(wc_dir, "A_COPY_2", "D", "H")
+ D_path = sbox.ospath('A/D')
+ A_COPY_path = sbox.ospath('A_COPY')
+ A_COPY_beta_path = sbox.ospath('A_COPY/B/E/beta')
+ A_COPY_chi_path = sbox.ospath('A_COPY/D/H/chi')
+ A_COPY_omega_path = sbox.ospath('A_COPY/D/H/omega')
+ A_COPY_psi_path = sbox.ospath('A_COPY/D/H/psi')
+ A_COPY_G_path = sbox.ospath('A_COPY/D/G')
+ A_COPY_rho_path = sbox.ospath('A_COPY/D/G/rho')
+ A_COPY_H_path = sbox.ospath('A_COPY/D/H')
+ A_COPY_D_path = sbox.ospath('A_COPY/D')
+ A_COPY_gamma_path = sbox.ospath('A_COPY/D/gamma')
+ H_COPY_2_path = sbox.ospath('A_COPY_2/D/H')
svntest.actions.run_and_verify_svn(None, exp_noop_up_out(8), [], 'up',
wc_dir)
@@ -5668,18 +5698,18 @@ def merge_to_path_with_switched_children(sbox):
'omega' : Item(status=' U')
})
expected_elision_output = wc.State(A_COPY_H_path, {
+ 'omega' : Item(status=' U')
})
expected_status = wc.State(A_COPY_H_path, {
'' : Item(status=' M', wc_rev=8),
'psi' : Item(status=' ', wc_rev=8, switched='S'),
- 'omega' : Item(status='MM', wc_rev=8),
+ 'omega' : Item(status='M ', wc_rev=8),
'chi' : Item(status=' ', wc_rev=8),
})
expected_disk = wc.State('', {
- '' : Item(props={SVN_PROP_MERGEINFO : '/A/D/H:8*'}),
+ '' : Item(props={SVN_PROP_MERGEINFO : '/A/D/H:8'}),
'psi' : Item("This is the file 'psi'.\n"),
- 'omega' : Item("New content",
- props={SVN_PROP_MERGEINFO : '/A/D/H/omega:8'}),
+ 'omega' : Item("New content"),
'chi' : Item("This is the file 'chi'.\n"),
})
expected_skip = wc.State(A_COPY_H_path, { })
@@ -5713,7 +5743,7 @@ def merge_to_path_with_switched_children(sbox):
'' : Item(status=' M', wc_rev=8),
'H' : Item(status=' M', wc_rev=8),
'H/chi' : Item(status=' ', wc_rev=8),
- 'H/omega' : Item(status='MM', wc_rev=8),
+ 'H/omega' : Item(status='M ', wc_rev=8),
'H/psi' : Item(status=' ', wc_rev=8, switched='S'),
'G' : Item(status=' M', wc_rev=8, switched='S'),
'G/pi' : Item(status=' ', wc_rev=8),
@@ -5723,10 +5753,9 @@ def merge_to_path_with_switched_children(sbox):
})
expected_disk_D = wc.State('', {
'' : Item(props={SVN_PROP_MERGEINFO : '/A/D:6*'}),
- 'H' : Item(props={SVN_PROP_MERGEINFO : '/A/D/H:8*'}),
+ 'H' : Item(props={SVN_PROP_MERGEINFO : '/A/D/H:8'}),
'H/chi' : Item("This is the file 'chi'.\n"),
- 'H/omega' : Item("New content",
- props={SVN_PROP_MERGEINFO : '/A/D/H/omega:8'}),
+ 'H/omega' : Item("New content"),
'H/psi' : Item("This is the file 'psi'.\n",),
'G' : Item(props={SVN_PROP_MERGEINFO : '/A/D/G:6*'}),
'G/pi' : Item("This is the file 'pi'.\n"),
@@ -5756,12 +5785,12 @@ def merge_to_path_with_switched_children(sbox):
expected_mergeinfo_output = wc.State(A_COPY_D_path, {
'' : Item(status=' G'),
'H' : Item(status=' G'),
- 'H/psi' : Item(status=' G')
+ 'H/psi' : Item(status=' U')
})
expected_elision_output = wc.State(A_COPY_D_path, {
})
- expected_disk_D.tweak('', props={SVN_PROP_MERGEINFO : '/A/D:5-6*'})
- expected_disk_D.tweak('H', props={SVN_PROP_MERGEINFO : '/A/D/H:5*,8*'})
+ expected_disk_D.tweak('', props={SVN_PROP_MERGEINFO : '/A/D:5,6*'})
+ expected_disk_D.tweak('H', props={SVN_PROP_MERGEINFO : '/A/D/H:5*,8'})
expected_disk_D.tweak('H/psi', contents="New content",
props={SVN_PROP_MERGEINFO :'/A/D/H/psi:5'})
expected_status_D.tweak('H/psi', status='MM')
@@ -5804,7 +5833,7 @@ def merge_to_path_with_switched_children(sbox):
'D/H' : Item(status=' M', wc_rev=8),
'D/H/chi' : Item(status=' ', wc_rev=8),
'D/H/psi' : Item(status='MM', wc_rev=8, switched='S'),
- 'D/H/omega' : Item(status='MM', wc_rev=8),
+ 'D/H/omega' : Item(status='M ', wc_rev=8),
})
expected_disk = wc.State('', {
'' : Item(props={SVN_PROP_MERGEINFO : '/A:5-8'}),
@@ -5816,19 +5845,18 @@ def merge_to_path_with_switched_children(sbox):
'B/lambda' : Item("This is the file 'lambda'.\n"),
'B/F' : Item(),
'C' : Item(),
- 'D' : Item(props={SVN_PROP_MERGEINFO : '/A/D:5-6*'}),
+ 'D' : Item(props={SVN_PROP_MERGEINFO : '/A/D:5,6*'}),
'D/G' : Item(props={SVN_PROP_MERGEINFO : '/A/D/G:6*'}),
'D/G/pi' : Item("This is the file 'pi'.\n"),
'D/G/rho' : Item("New content",
props={SVN_PROP_MERGEINFO : '/A/D/G/rho:6'}),
'D/G/tau' : Item("This is the file 'tau'.\n"),
'D/gamma' : Item("This is the file 'gamma'.\n"),
- 'D/H' : Item(props={SVN_PROP_MERGEINFO : '/A/D/H:5*,8*'}),
+ 'D/H' : Item(props={SVN_PROP_MERGEINFO : '/A/D/H:5*,8'}),
'D/H/chi' : Item("This is the file 'chi'.\n"),
'D/H/psi' : Item("New content",
props={SVN_PROP_MERGEINFO : '/A/D/H/psi:5'}),
- 'D/H/omega' : Item("New content",
- props={SVN_PROP_MERGEINFO : '/A/D/H/omega:8'}),
+ 'D/H/omega' : Item("New content"),
})
expected_skip = wc.State(A_COPY_path, { })
svntest.actions.run_and_verify_merge(A_COPY_path, '4', '8',
@@ -5839,7 +5867,6 @@ def merge_to_path_with_switched_children(sbox):
expected_disk,
expected_status, expected_skip,
None, None, None, None, None, 1)
-
# Commit changes thus far.
expected_output = svntest.wc.State(wc_dir, {
'A_COPY' : Item(verb='Sending'),
@@ -5866,17 +5893,16 @@ def merge_to_path_with_switched_children(sbox):
wc_disk.tweak("A_COPY/B/E/beta",
contents="New content")
wc_disk.tweak("A_COPY/D",
- props={SVN_PROP_MERGEINFO : '/A/D:5-6*'})
+ props={SVN_PROP_MERGEINFO : '/A/D:5,6*'})
wc_disk.tweak("A_COPY/D/G",
props={SVN_PROP_MERGEINFO : '/A/D/G:6*'})
wc_disk.tweak("A_COPY/D/G/rho",
contents="New content",
props={SVN_PROP_MERGEINFO : '/A/D/G/rho:6'})
wc_disk.tweak("A_COPY/D/H",
- props={SVN_PROP_MERGEINFO : '/A/D/H:5*,8*'})
+ props={SVN_PROP_MERGEINFO : '/A/D/H:5*,8'})
wc_disk.tweak("A_COPY/D/H/omega",
- contents="New content",
- props={SVN_PROP_MERGEINFO : '/A/D/H/omega:8'})
+ contents="New content")
wc_disk.tweak("A_COPY_2", props={})
svntest.actions.run_and_verify_switch(sbox.wc_dir, A_COPY_psi_path,
sbox.repo_url + "/A_COPY/D/H/psi",
@@ -5915,8 +5941,7 @@ def merge_to_path_with_switched_children(sbox):
expected_disk = wc.State('', {
'' : Item(props={SVN_PROP_MERGEINFO : '/A/D/H:5-8'}),
'psi' : Item("New content"),
- 'omega' : Item("New content",
- props={SVN_PROP_MERGEINFO : '/A/D/H/omega:8'}),
+ 'omega' : Item("New content"),
'chi' : Item("This is the file 'chi'.\n"),
})
expected_skip = wc.State(A_COPY_H_path, { })
@@ -5966,14 +5991,11 @@ def merge_to_path_with_switched_children(sbox):
expected_status_D.tweak('H/psi', wc_rev=10, switched=None)
expected_status_D.tweak('H/omega', wc_rev=9)
expected_status_D.tweak('G', 'G/rho', switched='S', wc_rev=9)
- expected_disk_D.tweak('', props={SVN_PROP_MERGEINFO : '/A/D:5-6*,10*',
+ expected_disk_D.tweak('', props={SVN_PROP_MERGEINFO : '/A/D:5,6*,10',
"prop:name" : "propval"})
expected_disk_D.tweak('G/rho',
props={SVN_PROP_MERGEINFO : '/A/D/G/rho:6'})
expected_disk_D.tweak('H', props={SVN_PROP_MERGEINFO : '/A/D/H:5-8'})
-
- expected_disk_D.tweak('H/omega',
- props={SVN_PROP_MERGEINFO : '/A/D/H/omega:8'})
expected_disk_D.tweak('H/psi', contents="New content", props={})
svntest.actions.run_and_verify_merge(A_COPY_D_path, '9', '10',
sbox.repo_url + '/A/D', None,
@@ -6034,7 +6056,6 @@ def merge_to_path_with_switched_children(sbox):
'D/G' : Item(status=' U'),
'D/G/rho' : Item(status=' U'),
'D/H' : Item(status=' U'),
- 'D/H/omega' : Item(status=' U'),
})
expected_elision_output = wc.State(A_COPY_path, {
'' : Item(status=' U'),
@@ -6042,7 +6063,6 @@ def merge_to_path_with_switched_children(sbox):
'D/G' : Item(status=' U'),
'D/G/rho' : Item(status=' U'),
'D/H' : Item(status=' U'),
- 'D/H/omega' : Item(status=' U'),
})
expected_status = wc.State(A_COPY_path, {
'' : Item(status=' M', wc_rev=10),
@@ -6063,7 +6083,7 @@ def merge_to_path_with_switched_children(sbox):
'D/H' : Item(status=' M', wc_rev=10),
'D/H/chi' : Item(status=' ', wc_rev=10),
'D/H/psi' : Item(status='M ', wc_rev=10),
- 'D/H/omega' : Item(status='MM', wc_rev=10),
+ 'D/H/omega' : Item(status='M ', wc_rev=10),
})
expected_disk = wc.State('', {
'B' : Item(),
@@ -6108,7 +6128,7 @@ def merge_with_implicit_target_file(sbox):
# Make a change to A/mu, then revert it using 'svn merge -r 2:1 A/mu'
# change A/mu and commit
- A_path = os.path.join(wc_dir, 'A')
+ A_path = sbox.ospath('A')
mu_path = os.path.join(A_path, 'mu')
svntest.main.file_append(mu_path, "A whole new line.\n")
@@ -6161,10 +6181,10 @@ def empty_mergeinfo(sbox):
wc_disk, wc_status = set_up_branch(sbox)
# Some paths we'll care about
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- H_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H")
- psi_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "psi")
- rho_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "G", "rho")
+ A_COPY_path = sbox.ospath('A_COPY')
+ H_COPY_path = sbox.ospath('A_COPY/D/H')
+ psi_COPY_path = sbox.ospath('A_COPY/D/H/psi')
+ rho_COPY_path = sbox.ospath('A_COPY/D/G/rho')
# Test area A -- Merge r2:4 into A_COPY then reverse merge 4:2 to
# A_COPY/D/G. A_COPY/D/G should end up with empty mergeinfo to
@@ -6299,9 +6319,9 @@ def prop_add_to_child_with_mergeinfo(sbox):
expected_disk, expected_status = set_up_branch(sbox)
# Some paths we'll care about
- beta_path = os.path.join(wc_dir, "A", "B", "E", "beta")
- beta_COPY_path = os.path.join(wc_dir, "A_COPY", "B", "E", "beta")
- B_COPY_path = os.path.join(wc_dir, "A_COPY", "B")
+ beta_path = sbox.ospath('A/B/E/beta')
+ beta_COPY_path = sbox.ospath('A_COPY/B/E/beta')
+ B_COPY_path = sbox.ospath('A_COPY/B')
# Set a non-mergeinfo prop on a file.
svntest.actions.run_and_verify_svn(None,
@@ -6390,7 +6410,7 @@ def foreign_repos_does_not_update_mergeinfo(sbox):
# Merge r3:4 (using implied peg revisions) from 'other' repos into
# A_COPY/D/G. Merge should succeed, but no mergeinfo should be set.
- G_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "G")
+ G_COPY_path = sbox.ospath('A_COPY/D/G')
svntest.actions.run_and_verify_svn(None,
expected_merge_output([[4]],
'U ' +
@@ -6402,7 +6422,7 @@ def foreign_repos_does_not_update_mergeinfo(sbox):
# Merge r4:5 (using explicit peg revisions) from 'other' repos into
# A_COPY/B/E. Merge should succeed, but no mergeinfo should be set.
- E_COPY_path = os.path.join(wc_dir, "A_COPY", "B", "E")
+ E_COPY_path = sbox.ospath('A_COPY/B/E')
svntest.actions.run_and_verify_svn(None,
expected_merge_output([[5]],
'U ' +
@@ -6471,7 +6491,7 @@ def foreign_repos_does_not_update_mergeinfo(sbox):
svntest.actions.run_and_verify_svn(None, None, [], 'merge',
other_repo_url + '/A@1',
other_repo_url + '/A_COPY@7',
- os.path.join(wc_dir, 'A_COPY'))
+ sbox.ospath('A_COPY'))
#...which means there should be no mergeinfo anywhere in WC_DIR, since
# this test never created any.
svntest.actions.run_and_verify_svn(None, [], [], 'pg',
@@ -6493,10 +6513,10 @@ def avoid_reflected_revs(sbox):
wc_disk, wc_status = set_up_branch(sbox, True, 1)
# Some paths we'll care about
- A_path = os.path.join(wc_dir, 'A')
- A_COPY_path = os.path.join(wc_dir, 'A_COPY')
- tfile1_path = os.path.join(wc_dir, 'A', 'tfile1')
- tfile2_path = os.path.join(wc_dir, 'A', 'tfile2')
+ A_path = sbox.ospath('A')
+ A_COPY_path = sbox.ospath('A_COPY')
+ tfile1_path = sbox.ospath('A/tfile1')
+ tfile2_path = sbox.ospath('A/tfile2')
bfile1_path = os.path.join(A_COPY_path, 'bfile1')
bfile2_path = os.path.join(A_COPY_path, 'bfile2')
@@ -6507,7 +6527,7 @@ def avoid_reflected_revs(sbox):
bfile2_content = "This is bfile2\n"
# We'll consider A as the trunk and A_COPY as the feature branch
- # Create a tfile1 in A
+ # r3 - Create a tfile1 in A
svntest.main.file_write(tfile1_path, tfile1_content)
svntest.actions.run_and_verify_svn(None, None, [], 'add', tfile1_path)
expected_output = wc.State(wc_dir, {'A/tfile1' : Item(verb='Adding')})
@@ -6515,7 +6535,7 @@ def avoid_reflected_revs(sbox):
svntest.actions.run_and_verify_commit(wc_dir, expected_output,
wc_status, None, wc_dir)
- # Create a bfile1 in A_COPY
+ # r4 - Create a bfile1 in A_COPY
svntest.main.file_write(bfile1_path, bfile1_content)
svntest.actions.run_and_verify_svn(None, None, [], 'add', bfile1_path)
expected_output = wc.State(wc_dir, {'A_COPY/bfile1' : Item(verb='Adding')})
@@ -6523,7 +6543,7 @@ def avoid_reflected_revs(sbox):
svntest.actions.run_and_verify_commit(wc_dir, expected_output,
wc_status, None, wc_dir)
- # Create one more file in A
+ # r5 - Create one more file in A
svntest.main.file_write(tfile2_path, tfile2_content)
svntest.actions.run_and_verify_svn(None, None, [], 'add', tfile2_path)
expected_output = wc.State(wc_dir, {'A/tfile2' : Item(verb='Adding')})
@@ -6600,7 +6620,6 @@ def avoid_reflected_revs(sbox):
None, A_COPY_path,
'--allow-mixed-revisions')
- # Sync up with the trunk ie., A
svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
expected_output = wc.State(wc_dir, {
'A_COPY' : Item(verb='Sending'),
@@ -6641,7 +6660,6 @@ def avoid_reflected_revs(sbox):
None, A_COPY_path,
'--allow-mixed-revisions')
-
svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
expected_output = wc.State(wc_dir, {
'A_COPY' : Item(verb='Sending'),
@@ -6650,7 +6668,7 @@ def avoid_reflected_revs(sbox):
svntest.actions.run_and_verify_commit(wc_dir, expected_output,
None, None, wc_dir)
- # Add bfile2 to A_COPY
+ # r8 - Add bfile2 to A_COPY
svntest.main.file_write(bfile2_path, bfile2_content)
svntest.actions.run_and_verify_svn(None, None, [], 'add', bfile2_path)
expected_output = wc.State(wc_dir, {'A_COPY/bfile2' : Item(verb='Adding')})
@@ -6666,7 +6684,6 @@ def avoid_reflected_revs(sbox):
# Merge 2:8 from A_COPY(feature branch) to A(trunk).
expected_output = wc.State(A_path, {
- '' : Item(status='C '),
'bfile2' : Item(status='A '),
'bfile1' : Item(status='A '),
})
@@ -6676,7 +6693,7 @@ def avoid_reflected_revs(sbox):
expected_elision_output = wc.State(A_path, {
})
expected_status = wc.State(A_path, {
- '' : Item(status='CM', wc_rev=6),
+ '' : Item(status=' M', wc_rev=6),
'bfile2' : Item(status='A ', wc_rev='-', copied='+'),
'bfile1' : Item(status='A ', wc_rev='-', copied='+'),
'tfile2' : Item(status=' ', wc_rev=6),
@@ -6751,7 +6768,7 @@ def update_loses_mergeinfo(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- A_C_wc_dir = os.path.join(wc_dir, 'A', 'C')
+ A_C_wc_dir = sbox.ospath('A/C')
A_B_url = sbox.repo_url + '/A/B'
A_B_J_url = sbox.repo_url + '/A/B/J'
A_B_K_url = sbox.repo_url + '/A/B/K'
@@ -6871,7 +6888,7 @@ def merge_loses_mergeinfo(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- A_C_wc_dir = os.path.join(wc_dir, 'A', 'C')
+ A_C_wc_dir = sbox.ospath('A/C')
A_B_url = sbox.repo_url + '/A/B'
A_B_J_url = sbox.repo_url + '/A/B/J'
A_B_K_url = sbox.repo_url + '/A/B/K'
@@ -6926,9 +6943,7 @@ def merge_loses_mergeinfo(sbox):
expected_elision_output = wc.State(A_C_wc_dir, {
'' : Item(status=' U'),
})
- expected_disk = wc.State('', {'J': Item()})
- if svntest.main.wc_is_singledb(wc_dir):
- expected_disk.remove('J')
+ expected_disk = wc.State('', {})
expected_status = wc.State(A_C_wc_dir,
{ '' : Item(wc_rev=4, status=' M'),
'J' : Item(wc_rev=4, status='D ')
@@ -6947,11 +6962,8 @@ def merge_loses_mergeinfo(sbox):
expected_output = wc.State(A_C_wc_dir, {'K' : Item(status='A ')})
expected_disk = wc.State('', {
'K' : Item(),
- 'J' : Item(),
'' : Item(props={SVN_PROP_MERGEINFO : '/A/B:3'}),
})
- if svntest.main.wc_is_singledb(wc_dir):
- expected_disk.remove('J')
expected_status = wc.State(A_C_wc_dir,
{ '' : Item(wc_rev=4, status=' M'),
'K' : Item(status='A ',
@@ -6984,8 +6996,8 @@ def single_file_replace_style_merge_capability(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, 'iota')
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ iota_path = sbox.ospath('iota')
+ mu_path = sbox.ospath('A/mu')
# delete mu and replace it with a copy of iota
svntest.main.run_svn(None, 'rm', mu_path)
@@ -7006,8 +7018,7 @@ def single_file_replace_style_merge_capability(sbox):
# Merge the file mu alone to rev1
svntest.actions.run_and_verify_svn(None,
expected_merge_output(None,
- ['D ' + mu_path + '\n',
- 'A ' + mu_path + '\n']),
+ ['R ' + mu_path + '\n']),
[],
'merge',
mu_path + '@2',
@@ -7031,7 +7042,7 @@ def merge_to_out_of_date_target(sbox):
svntest.actions.duplicate_dir(wc_dir, other_wc)
# Some paths we'll care about
- A_COPY_H_path = os.path.join(wc_dir, "A_COPY", "D", "H")
+ A_COPY_H_path = sbox.ospath('A_COPY/D/H')
other_A_COPY_H_path = os.path.join(other_wc, "A_COPY", "D", "H")
# Merge -c3 into A_COPY/D/H of first WC.
@@ -7140,10 +7151,10 @@ def merge_with_depth_files(sbox):
wc_dir = sbox.wc_dir
# Some paths we'll care about
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- gamma_path = os.path.join(wc_dir, 'A', 'D', 'gamma')
- Acopy_path = os.path.join(wc_dir, 'A_copy')
- Acopy_mu_path = os.path.join(wc_dir, 'A_copy', 'mu')
+ mu_path = sbox.ospath('A/mu')
+ gamma_path = sbox.ospath('A/D/gamma')
+ Acopy_path = sbox.ospath('A_copy')
+ Acopy_mu_path = sbox.ospath('A_copy/mu')
A_url = sbox.repo_url + '/A'
Acopy_url = sbox.repo_url + '/A_copy'
@@ -7260,7 +7271,7 @@ def merge_with_depth_files(sbox):
#
# Test issue #3407 'Shallow merges incorrectly set mergeinfo on children'.
@SkipUnless(server_has_mergeinfo)
-@Issues(2976,3392,3407)
+@Issues(2976,3392,3407,4057)
def merge_away_subtrees_noninheritable_ranges(sbox):
"subtrees can lose non-inheritable ranges"
@@ -7269,16 +7280,16 @@ def merge_away_subtrees_noninheritable_ranges(sbox):
wc_disk, wc_status = set_up_branch(sbox, nbr_of_branches=2)
# Some paths we'll care about
- H_path = os.path.join(wc_dir, "A", "D", "H")
- D_COPY_path = os.path.join(wc_dir, "A_COPY", "D")
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- nu_path = os.path.join(wc_dir, "A", "nu")
- mu_path = os.path.join(wc_dir, "A", "mu")
- mu_2_path = os.path.join(wc_dir, "A_COPY_2", "mu")
- D_COPY_2_path = os.path.join(wc_dir, "A_COPY_2", "D")
- H_COPY_2_path = os.path.join(wc_dir, "A_COPY_2", "D", "H")
- mu_COPY_path = os.path.join(wc_dir, "A_COPY", "mu")
- nu_COPY_path = os.path.join(wc_dir, "A_COPY", "nu")
+ H_path = sbox.ospath('A/D/H')
+ D_COPY_path = sbox.ospath('A_COPY/D')
+ A_COPY_path = sbox.ospath('A_COPY')
+ nu_path = sbox.ospath('A/nu')
+ mu_path = sbox.ospath('A/mu')
+ mu_2_path = sbox.ospath('A_COPY_2/mu')
+ D_COPY_2_path = sbox.ospath('A_COPY_2/D')
+ H_COPY_2_path = sbox.ospath('A_COPY_2/D/H')
+ mu_COPY_path = sbox.ospath('A_COPY/mu')
+ nu_COPY_path = sbox.ospath('A_COPY/nu')
# Make a change to directory A/D/H and commit as r8.
svntest.actions.run_and_verify_svn(None, exp_noop_up_out(7), [],
@@ -7403,16 +7414,16 @@ def merge_away_subtrees_noninheritable_ranges(sbox):
# Now merge -c10 from A to A_COPY.
svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
- expected_output = wc.State('.', {
+ expected_output = wc.State('', {
'nu': Item(status='A '),
})
- expected_mergeinfo_output = wc.State('.', {
+ expected_mergeinfo_output = wc.State('', {
'' : Item(status=' U'),
'nu' : Item(status=' U'),
})
- expected_elision_output = wc.State('.', {
+ expected_elision_output = wc.State('', {
})
- expected_status = wc.State('.', {
+ expected_status = wc.State('', {
'' : Item(status=' M'),
'nu' : Item(status='A ', copied='+'),
'B' : Item(status=' '),
@@ -7462,7 +7473,7 @@ def merge_away_subtrees_noninheritable_ranges(sbox):
expected_skip = wc.State('.', { })
saved_cwd = os.getcwd()
os.chdir(A_COPY_path)
- svntest.actions.run_and_verify_merge('.', '9', '10',
+ svntest.actions.run_and_verify_merge('', '9', '10',
sbox.repo_url + '/A', None,
expected_output,
expected_mergeinfo_output,
@@ -7510,7 +7521,7 @@ def merge_away_subtrees_noninheritable_ranges(sbox):
})
expected_elision_output = wc.State('.', {
})
- expected_status = wc.State('.', {
+ expected_status = wc.State('', {
'' : Item(status=' M'),
'B' : Item(status=' '),
'mu' : Item(status='MM'),
@@ -7579,8 +7590,9 @@ def merge_away_subtrees_noninheritable_ranges(sbox):
svntest.actions.run_and_verify_svn(None, None, [], 'revert', '-R', wc_dir)
svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
- # Merge r8 from A/D/H to A_COPY_D/H at depth empty, creating non-inheritable
- # mergeinfo on the target. Commit this merge as r13.
+ # Merge r8 from A/D/H to A_COPY_D/H at depth empty. Since r8 affects only
+ # A_COPY/D/H itself, the resulting mergeinfo is inheritable. Commit this
+ # merge as r13.
expected_output = wc.State(H_COPY_2_path, {
'' : Item(status=' U'),
})
@@ -7596,7 +7608,7 @@ def merge_away_subtrees_noninheritable_ranges(sbox):
'chi' : Item(status=' ', wc_rev=12),
})
expected_disk = wc.State('', {
- '' : Item(props={SVN_PROP_MERGEINFO : '/A/D/H:8*',
+ '' : Item(props={SVN_PROP_MERGEINFO : '/A/D/H:8',
"prop:name" : "propval"}),
'psi' : Item("This is the file 'psi'.\n"),
'omega' : Item("This is the file 'omega'.\n"),
@@ -7613,7 +7625,7 @@ def merge_away_subtrees_noninheritable_ranges(sbox):
None, None, None, None, None, 1, 1,
'--depth', 'empty', H_COPY_2_path)
svntest.actions.run_and_verify_svn(None, None, [], 'commit', '-m',
- 'log msg', wc_dir);
+ 'log msg', wc_dir)
svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
# Now reverse the prior merge. Issue #3392 manifests itself here with
# a mergeinfo parsing error:
@@ -7703,16 +7715,16 @@ def merge_to_sparse_directories(sbox):
wc_disk, wc_status = set_up_branch(sbox, False, 1)
# Some paths we'll care about
- A_path = os.path.join(wc_dir, "A")
- D_path = os.path.join(wc_dir, "A", "D")
- I_path = os.path.join(wc_dir, "A", "C", "I")
- G_path = os.path.join(wc_dir, "A", "D", "G")
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
+ A_path = sbox.ospath('A')
+ D_path = sbox.ospath('A/D')
+ I_path = sbox.ospath('A/C/I')
+ G_path = sbox.ospath('A/D/G')
+ A_COPY_path = sbox.ospath('A_COPY')
# Make a few more changes to the merge source...
# r7 - modify and commit A/mu
- svntest.main.file_write(os.path.join(wc_dir, "A", "mu"),
+ svntest.main.file_write(sbox.ospath('A/mu'),
"New content")
expected_output = wc.State(wc_dir, {'A/mu' : Item(verb='Sending')})
wc_status.tweak('A/mu', wc_rev=7)
@@ -7777,10 +7789,17 @@ def merge_to_sparse_directories(sbox):
# by the merge, 'B' and 'D', get non-inheritable mergeinfo for r4:9.
# The root and 'D' do should also get the changes
# that affect them directly (the prop adds from r8 and r9).
+ #
+ # Currently this fails due to r1424469. For a full explanation see
+ # http://svn.haxx.se/dev/archive-2012-12/0472.shtml
+ # and http://svn.haxx.se/dev/archive-2012-12/0475.shtml
expected_output = wc.State(immediates_dir, {
'D' : Item(status=' U'),
'mu' : Item(status='U '),
'' : Item(status=' U'),
+ # Shadowed below skips
+ 'D/H/omega' : Item(status=' ', treeconflict='U'),
+ 'B/E/beta' : Item(status=' ', treeconflict='U'),
})
expected_mergeinfo_output = wc.State(immediates_dir, {
'' : Item(status=' U'),
@@ -7806,8 +7825,8 @@ def merge_to_sparse_directories(sbox):
"prop:name" : "propval"}),
})
expected_skip = svntest.wc.State(immediates_dir, {
- 'D/H' : Item(),
- 'B/E' : Item(),
+ 'D/H' : Item(verb='Skipped missing target'),
+ 'B/E' : Item(verb='Skipped missing target'),
})
svntest.actions.run_and_verify_merge(immediates_dir, '4', '9',
sbox.repo_url + '/A', None,
@@ -7842,6 +7861,9 @@ def merge_to_sparse_directories(sbox):
expected_output = wc.State(files_dir, {
'mu' : Item(status='U '),
'' : Item(status=' U'),
+ # Below the skips
+ 'D/H/omega' : Item(status=' ', treeconflict='U'),
+ 'B/E/beta' : Item(status=' ', treeconflict='U'),
})
expected_mergeinfo_output = wc.State(files_dir, {
'' : Item(status=' U'),
@@ -7860,8 +7882,8 @@ def merge_to_sparse_directories(sbox):
props={SVN_PROP_MERGEINFO : '/A/mu:5-9'}),
})
expected_skip = svntest.wc.State(files_dir, {
- 'D' : Item(),
- 'B' : Item(),
+ 'D' : Item(verb='Skipped missing target'),
+ 'B' : Item(verb='Skipped missing target'),
})
svntest.actions.run_and_verify_merge(files_dir, '4', '9',
sbox.repo_url + '/A', None,
@@ -7889,6 +7911,9 @@ def merge_to_sparse_directories(sbox):
# the one change that affects it directly (the prop add from r9).
expected_output = wc.State(empty_dir, {
'' : Item(status=' U'),
+ # Below the skips
+ 'B/E/beta' : Item(status=' ', treeconflict='U'),
+ 'D/H/omega' : Item(status=' ', treeconflict='U'),
})
expected_mergeinfo_output = wc.State(empty_dir, {
'' : Item(status=' U'),
@@ -7903,9 +7928,9 @@ def merge_to_sparse_directories(sbox):
"prop:name" : "propval"}),
})
expected_skip = svntest.wc.State(empty_dir, {
- 'mu' : Item(),
- 'D' : Item(),
- 'B' : Item(),
+ 'mu' : Item(verb='Skipped missing target'),
+ 'D' : Item(verb='Skipped missing target'),
+ 'B' : Item(verb='Skipped missing target'),
})
svntest.actions.run_and_verify_merge(empty_dir, '4', '9',
sbox.repo_url + '/A', None,
@@ -7987,7 +8012,9 @@ def merge_to_sparse_directories(sbox):
def merge_old_and_new_revs_from_renamed_dir(sbox):
"merge -rold(before rename):head renamed dir"
- ## See http://svn.haxx.se/dev/archive-2007-09/0706.shtml ##
+ # See the email on dev@ from Paul Burba, 2007-09-27, "RE: svn commit:
+ # r26803 - [...]", <http://svn.haxx.se/dev/archive-2007-09/0706.shtml> or
+ # <http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=927127>.
# Create a WC with a single branch
sbox.build()
@@ -7997,9 +8024,9 @@ def merge_old_and_new_revs_from_renamed_dir(sbox):
# Some paths we'll care about
A_url = sbox.repo_url + '/A'
A_MOVED_url = sbox.repo_url + '/A_MOVED'
- A_COPY_path = os.path.join(wc_dir, 'A_COPY')
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- A_MOVED_mu_path = os.path.join(wc_dir, 'A_MOVED', 'mu')
+ A_COPY_path = sbox.ospath('A_COPY')
+ mu_path = sbox.ospath('A/mu')
+ A_MOVED_mu_path = sbox.ospath('A_MOVED/mu')
# Make a modification to A/mu
svntest.main.file_write(mu_path, "This is the file 'mu' modified.\n")
@@ -8074,10 +8101,10 @@ def merge_old_and_new_revs_from_renamed_dir(sbox):
# because /A_MOVED has renames in its history between the boundaries
# of the requested merge range.
expected_output = wc.State(A_COPY_path, {
- 'mu' : Item(status='G '), # mu gets touched twice
+ 'mu' : Item(status='G ', prev_status='U '), # mu gets touched twice
})
expected_mergeinfo_output = wc.State(A_COPY_path, {
- '' : Item(status=' G'),
+ '' : Item(status=' G', prev_status=' U'),
})
expected_elision_output = wc.State(A_COPY_path, {
})
@@ -8162,13 +8189,13 @@ def merge_with_child_having_different_rev_ranges_to_merge(sbox):
# Create a WC
sbox.build()
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, 'A')
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ A_path = sbox.ospath('A')
+ mu_path = sbox.ospath('A/mu')
A_url = sbox.repo_url + '/A'
A_mu_url = sbox.repo_url + '/A/mu'
A_COPY_url = sbox.repo_url + '/A_COPY'
- A_COPY_path = os.path.join(wc_dir, 'A_COPY')
- A_COPY_mu_path = os.path.join(wc_dir, 'A_COPY', 'mu')
+ A_COPY_path = sbox.ospath('A_COPY')
+ A_COPY_mu_path = sbox.ospath('A_COPY/mu')
thirty_line_dummy_text = 'line1\n'
for i in range(2, 31):
thirty_line_dummy_text += 'line' + str(i) + '\n'
@@ -8240,7 +8267,7 @@ def merge_with_child_having_different_rev_ranges_to_merge(sbox):
expected_skip = wc.State(A_COPY_path, {})
expected_output = wc.State(A_COPY_path, {
'' : Item(status=' U'),
- 'mu' : Item(status='G '),
+ 'mu' : Item(status='G ', prev_status='G '), # Updated twice
})
expected_mergeinfo_output = wc.State(A_COPY_path, {
'' : Item(status=' U'),
@@ -8373,7 +8400,7 @@ def merge_with_child_having_different_rev_ranges_to_merge(sbox):
svntest.main.file_write(A_COPY_mu_path, tweaked_17th_line_1)
expected_output = wc.State(A_COPY_path, {
'' : Item(status=' G'),
- 'mu' : Item(status='G '),
+ 'mu' : Item(status='G ', prev_status='G '),
})
expected_mergeinfo_output = wc.State(A_COPY_path, {
'' : Item(status=' G'),
@@ -8412,9 +8439,9 @@ def merge_old_and_new_revs_from_renamed_file(sbox):
mu_url = sbox.repo_url + '/A/mu'
mu_MOVED_url = sbox.repo_url + '/A/mu_MOVED'
mu_COPY_url = sbox.repo_url + '/A/mu_COPY'
- mu_COPY_path = os.path.join(wc_dir, 'A', 'mu_COPY')
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- mu_MOVED_path = os.path.join(wc_dir, 'A', 'mu_MOVED')
+ mu_COPY_path = sbox.ospath('A/mu_COPY')
+ mu_path = sbox.ospath('A/mu')
+ mu_MOVED_path = sbox.ospath('A/mu_MOVED')
# Copy mu to mu_COPY
svntest.actions.run_and_verify_svn(None, ['\n', 'Committed revision 2.\n'],
@@ -8480,9 +8507,9 @@ def merge_with_auto_rev_range_detection(sbox):
# Some paths we'll care about
A_url = sbox.repo_url + '/A'
A_COPY_url = sbox.repo_url + '/A_COPY'
- B1_path = os.path.join(wc_dir, 'A', 'B1')
- B1_mu_path = os.path.join(wc_dir, 'A', 'B1', 'mu')
- A_COPY_path = os.path.join(wc_dir, 'A_COPY')
+ B1_path = sbox.ospath('A/B1')
+ B1_mu_path = sbox.ospath('A/B1/mu')
+ A_COPY_path = sbox.ospath('A_COPY')
# Create B1 inside A
svntest.actions.run_and_verify_svn(None, ["A " + B1_path + "\n"],
@@ -8606,15 +8633,15 @@ def cherry_picking(sbox):
wc_disk, wc_status = set_up_branch(sbox)
# Some paths we'll care about
- H_path = os.path.join(wc_dir, "A", "D", "H")
- G_path = os.path.join(wc_dir, "A", "D", "G")
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- D_COPY_path = os.path.join(wc_dir, "A_COPY", "D")
- G_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "G")
- H_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H")
- rho_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "G", "rho")
- omega_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "omega")
- psi_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "psi")
+ H_path = sbox.ospath('A/D/H')
+ G_path = sbox.ospath('A/D/G')
+ A_COPY_path = sbox.ospath('A_COPY')
+ D_COPY_path = sbox.ospath('A_COPY/D')
+ G_COPY_path = sbox.ospath('A_COPY/D/G')
+ H_COPY_path = sbox.ospath('A_COPY/D/H')
+ rho_COPY_path = sbox.ospath('A_COPY/D/G/rho')
+ omega_COPY_path = sbox.ospath('A_COPY/D/H/omega')
+ psi_COPY_path = sbox.ospath('A_COPY/D/H/psi')
# Update working copy
expected_output = svntest.wc.State(wc_dir, {})
@@ -8793,11 +8820,11 @@ def propchange_of_subdir_raises_conflict(sbox):
# Some paths we'll care about
B_url = sbox.repo_url + '/A/B'
- E_path = os.path.join(wc_dir, 'A', 'B', 'E')
- lambda_path = os.path.join(wc_dir, 'A', 'B', 'lambda')
- A_COPY_B_path = os.path.join(wc_dir, 'A_COPY', 'B')
- A_COPY_B_E_path = os.path.join(wc_dir, 'A_COPY', 'B', 'E')
- A_COPY_lambda_path = os.path.join(wc_dir, 'A_COPY', 'B', 'E', 'lambda')
+ E_path = sbox.ospath('A/B/E')
+ lambda_path = sbox.ospath('A/B/lambda')
+ A_COPY_B_path = sbox.ospath('A_COPY/B')
+ A_COPY_B_E_path = sbox.ospath('A_COPY/B/E')
+ A_COPY_lambda_path = sbox.ospath('A_COPY/B/E/lambda')
# Set a property on A/B/E and Make a modification to A/B/lambda
svntest.main.run_svn(None, 'propset', 'x', 'x', E_path)
@@ -8907,9 +8934,9 @@ def reverse_merge_prop_add_on_child(sbox):
wc_disk, wc_status = set_up_branch(sbox, True, 1)
# Some paths we'll care about
- G_path = os.path.join(wc_dir, "A", "D", "G")
- D_COPY_path = os.path.join(wc_dir, "A_COPY", "D")
- G_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "G")
+ G_path = sbox.ospath('A/D/G')
+ D_COPY_path = sbox.ospath('A_COPY/D')
+ G_COPY_path = sbox.ospath('A_COPY/D/G')
# Make some prop changes to some dirs.
svntest.actions.run_and_verify_svn(None,
@@ -9019,9 +9046,9 @@ def merge_target_with_non_inheritable_mergeinfo(sbox):
# Some paths we'll care about
B_url = sbox.repo_url + '/A/B'
- lambda_path = os.path.join(wc_dir, 'A', 'B', 'lambda')
- newfile_path = os.path.join(wc_dir, 'A', 'B', 'E', 'newfile')
- A_COPY_B_path = os.path.join(wc_dir, 'A_COPY', 'B')
+ lambda_path = sbox.ospath('A/B/lambda')
+ newfile_path = sbox.ospath('A/B/E/newfile')
+ A_COPY_B_path = sbox.ospath('A_COPY/B')
# Make a modifications to A/B/lambda and add A/B/E/newfile
svntest.main.file_write(lambda_path, "This is the file 'lambda' modified.\n")
@@ -9131,7 +9158,7 @@ def self_reverse_merge(sbox):
wc_dir = sbox.wc_dir
# Make changes to the working copy
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
svntest.main.file_append(mu_path, 'appended mu text')
# Created expected output tree for 'svn ci'
@@ -9211,9 +9238,9 @@ def ignore_ancestry_and_mergeinfo(sbox):
# Some paths we'll care about
A_B_url = sbox.repo_url + '/A/B'
- A_COPY_B_path = os.path.join(wc_dir, 'A_COPY', 'B')
- lambda_path = os.path.join(wc_dir, 'A', 'B', 'lambda')
- A_COPY_lambda_path = os.path.join(wc_dir, 'A_COPY', 'B', 'lambda')
+ A_COPY_B_path = sbox.ospath('A_COPY/B')
+ lambda_path = sbox.ospath('A/B/lambda')
+ A_COPY_lambda_path = sbox.ospath('A_COPY/B/lambda')
# Make modifications to A/B/lambda
svntest.main.file_write(lambda_path, "This is the file 'lambda' modified.\n")
@@ -9308,6 +9335,7 @@ def ignore_ancestry_and_mergeinfo(sbox):
#----------------------------------------------------------------------
@SkipUnless(server_has_mergeinfo)
+@Issue(3032)
def merge_from_renamed_branch_fails_while_avoiding_repeat_merge(sbox):
"merge from renamed branch"
#Copy A/C to A/COPY_C results in r2.
@@ -9326,9 +9354,9 @@ def merge_from_renamed_branch_fails_while_avoiding_repeat_merge(sbox):
A_C_url = sbox.repo_url + '/A/C'
A_COPY_C_url = sbox.repo_url + '/A/COPY_C'
A_RENAMED_C_url = sbox.repo_url + '/A/RENAMED_C'
- A_C_path = os.path.join(wc_dir, 'A', 'C')
- A_RENAMED_C_path = os.path.join(wc_dir, 'A', 'RENAMED_C')
- A_RENAMED_C_file1_path = os.path.join(wc_dir, 'A', 'RENAMED_C', 'file1')
+ A_C_path = sbox.ospath('A/C')
+ A_RENAMED_C_path = sbox.ospath('A/RENAMED_C')
+ A_RENAMED_C_file1_path = sbox.ospath('A/RENAMED_C/file1')
svntest.main.run_svn(None, 'cp', A_C_url, A_COPY_C_url, '-m', 'copy...')
svntest.main.run_svn(None, 'mv', A_COPY_C_url, A_RENAMED_C_url, '-m',
@@ -9420,8 +9448,8 @@ def merge_source_normalization_and_subtree_merges(sbox):
wc_dir = sbox.wc_dir
# Some paths we'll care about
- D_COPY_path = os.path.join(wc_dir, "A_COPY", "D")
- G_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "G")
+ D_COPY_path = sbox.ospath('A_COPY/D')
+ G_COPY_path = sbox.ospath('A_COPY/D/G')
# Use our helper to copy 'A' to 'A_COPY' then make some changes under 'A'
wc_disk, wc_status = set_up_branch(sbox)
@@ -9463,7 +9491,7 @@ def merge_source_normalization_and_subtree_merges(sbox):
'update', wc_dir)
# r8 - Make a text mod to 'A_MOVED/D/G/tau'
- svntest.main.file_write(os.path.join(wc_dir, "A_MOVED", "D", "G", "tau"),
+ svntest.main.file_write(sbox.ospath('A_MOVED/D/G/tau'),
"New content")
expected_output = wc.State(wc_dir,
{'A_MOVED/D/G/tau' : Item(verb='Sending')})
@@ -9575,12 +9603,12 @@ def new_subtrees_should_not_break_merge(sbox):
wc_disk, wc_status = set_up_branch(sbox)
# Some paths we'll care about
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- D_COPY_path = os.path.join(wc_dir, "A_COPY", "D")
- nu_path = os.path.join(wc_dir, "A", "D", "H", "nu")
- nu_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "nu")
- rho_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "G", "rho")
- H_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H")
+ A_COPY_path = sbox.ospath('A_COPY')
+ D_COPY_path = sbox.ospath('A_COPY/D')
+ nu_path = sbox.ospath('A/D/H/nu')
+ nu_COPY_path = sbox.ospath('A_COPY/D/H/nu')
+ rho_COPY_path = sbox.ospath('A_COPY/D/G/rho')
+ H_COPY_path = sbox.ospath('A_COPY/D/H')
# Create 'A/D/H/nu', commit it as r7, make a text mod to it in r8.
svntest.main.file_write(nu_path, "This is the file 'nu'.\n")
@@ -10007,12 +10035,12 @@ def dont_add_mergeinfo_from_own_history(sbox):
wc_disk, wc_status = set_up_branch(sbox)
# Some paths we'll care about
- A_path = os.path.join(wc_dir, "A")
- A_MOVED_path = os.path.join(wc_dir, "A_MOVED")
- mu_path = os.path.join(wc_dir, "A", "mu")
- mu_MOVED_path = os.path.join(wc_dir, "A_MOVED", "mu")
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- mu_COPY_path = os.path.join(wc_dir, "A_COPY", "mu")
+ A_path = sbox.ospath('A')
+ A_MOVED_path = sbox.ospath('A_MOVED')
+ mu_path = sbox.ospath('A/mu')
+ mu_MOVED_path = sbox.ospath('A_MOVED/mu')
+ A_COPY_path = sbox.ospath('A_COPY')
+ mu_COPY_path = sbox.ospath('A_COPY/mu')
# Merge r3 from 'A' to 'A_COPY', make a text mod to 'A_COPY/mu' and
# commit both as r7. This results in mergeinfo of '/A:3' on 'A_COPY'.
@@ -10315,50 +10343,50 @@ def dont_add_mergeinfo_from_own_history(sbox):
#
# Create the new 'A' by exporting the old 'A@1'.
expected_output = svntest.verify.UnorderedOutput(
- ["A " + os.path.join(wc_dir, "A") + "\n",
- "A " + os.path.join(wc_dir, "A", "B") + "\n",
- "A " + os.path.join(wc_dir, "A", "B", "lambda") + "\n",
- "A " + os.path.join(wc_dir, "A", "B", "E") + "\n",
- "A " + os.path.join(wc_dir, "A", "B", "E", "alpha") + "\n",
- "A " + os.path.join(wc_dir, "A", "B", "E", "beta") + "\n",
- "A " + os.path.join(wc_dir, "A", "B", "F") + "\n",
- "A " + os.path.join(wc_dir, "A", "mu") + "\n",
- "A " + os.path.join(wc_dir, "A", "C") + "\n",
- "A " + os.path.join(wc_dir, "A", "D") + "\n",
- "A " + os.path.join(wc_dir, "A", "D", "gamma") + "\n",
- "A " + os.path.join(wc_dir, "A", "D", "G") + "\n",
- "A " + os.path.join(wc_dir, "A", "D", "G", "pi") + "\n",
- "A " + os.path.join(wc_dir, "A", "D", "G", "rho") + "\n",
- "A " + os.path.join(wc_dir, "A", "D", "G", "tau") + "\n",
- "A " + os.path.join(wc_dir, "A", "D", "H") + "\n",
- "A " + os.path.join(wc_dir, "A", "D", "H", "chi") + "\n",
- "A " + os.path.join(wc_dir, "A", "D", "H", "omega") + "\n",
- "A " + os.path.join(wc_dir, "A", "D", "H", "psi") + "\n",
+ ["A " + sbox.ospath('A') + "\n",
+ "A " + sbox.ospath('A/B') + "\n",
+ "A " + sbox.ospath('A/B/lambda') + "\n",
+ "A " + sbox.ospath('A/B/E') + "\n",
+ "A " + sbox.ospath('A/B/E/alpha') + "\n",
+ "A " + sbox.ospath('A/B/E/beta') + "\n",
+ "A " + sbox.ospath('A/B/F') + "\n",
+ "A " + sbox.ospath('A/mu') + "\n",
+ "A " + sbox.ospath('A/C') + "\n",
+ "A " + sbox.ospath('A/D') + "\n",
+ "A " + sbox.ospath('A/D/gamma') + "\n",
+ "A " + sbox.ospath('A/D/G') + "\n",
+ "A " + sbox.ospath('A/D/G/pi') + "\n",
+ "A " + sbox.ospath('A/D/G/rho') + "\n",
+ "A " + sbox.ospath('A/D/G/tau') + "\n",
+ "A " + sbox.ospath('A/D/H') + "\n",
+ "A " + sbox.ospath('A/D/H/chi') + "\n",
+ "A " + sbox.ospath('A/D/H/omega') + "\n",
+ "A " + sbox.ospath('A/D/H/psi') + "\n",
"Exported revision 1.\n",]
)
svntest.actions.run_and_verify_svn(None, expected_output, [],
'export', sbox.repo_url + '/A@1',
A_path)
expected_output = svntest.verify.UnorderedOutput(
- ["A " + os.path.join(wc_dir, "A") + "\n",
- "A " + os.path.join(wc_dir, "A", "B") + "\n",
- "A " + os.path.join(wc_dir, "A", "B", "lambda") + "\n",
- "A " + os.path.join(wc_dir, "A", "B", "E") + "\n",
- "A " + os.path.join(wc_dir, "A", "B", "E", "alpha") + "\n",
- "A " + os.path.join(wc_dir, "A", "B", "E", "beta") + "\n",
- "A " + os.path.join(wc_dir, "A", "B", "F") + "\n",
- "A " + os.path.join(wc_dir, "A", "mu") + "\n",
- "A " + os.path.join(wc_dir, "A", "C") + "\n",
- "A " + os.path.join(wc_dir, "A", "D") + "\n",
- "A " + os.path.join(wc_dir, "A", "D", "gamma") + "\n",
- "A " + os.path.join(wc_dir, "A", "D", "G") + "\n",
- "A " + os.path.join(wc_dir, "A", "D", "G", "pi") + "\n",
- "A " + os.path.join(wc_dir, "A", "D", "G", "rho") + "\n",
- "A " + os.path.join(wc_dir, "A", "D", "G", "tau") + "\n",
- "A " + os.path.join(wc_dir, "A", "D", "H") + "\n",
- "A " + os.path.join(wc_dir, "A", "D", "H", "chi") + "\n",
- "A " + os.path.join(wc_dir, "A", "D", "H", "omega") + "\n",
- "A " + os.path.join(wc_dir, "A", "D", "H", "psi") + "\n",]
+ ["A " + sbox.ospath('A') + "\n",
+ "A " + sbox.ospath('A/B') + "\n",
+ "A " + sbox.ospath('A/B/lambda') + "\n",
+ "A " + sbox.ospath('A/B/E') + "\n",
+ "A " + sbox.ospath('A/B/E/alpha') + "\n",
+ "A " + sbox.ospath('A/B/E/beta') + "\n",
+ "A " + sbox.ospath('A/B/F') + "\n",
+ "A " + sbox.ospath('A/mu') + "\n",
+ "A " + sbox.ospath('A/C') + "\n",
+ "A " + sbox.ospath('A/D') + "\n",
+ "A " + sbox.ospath('A/D/gamma') + "\n",
+ "A " + sbox.ospath('A/D/G') + "\n",
+ "A " + sbox.ospath('A/D/G/pi') + "\n",
+ "A " + sbox.ospath('A/D/G/rho') + "\n",
+ "A " + sbox.ospath('A/D/G/tau') + "\n",
+ "A " + sbox.ospath('A/D/H') + "\n",
+ "A " + sbox.ospath('A/D/H/chi') + "\n",
+ "A " + sbox.ospath('A/D/H/omega') + "\n",
+ "A " + sbox.ospath('A/D/H/psi') + "\n",]
)
svntest.actions.run_and_verify_svn(None, expected_output, [],
'add', A_path)
@@ -10485,12 +10513,12 @@ def merge_range_predates_history(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, "iota")
- trunk_file_path = os.path.join(wc_dir, "trunk", "file")
+ iota_path = sbox.ospath('iota')
+ trunk_file_path = sbox.ospath('trunk/file')
trunk_url = sbox.repo_url + "/trunk"
branches_url = sbox.repo_url + "/branches"
- branch_path = os.path.join(wc_dir, "branches", "branch")
- branch_file_path = os.path.join(wc_dir, "branches", "branch", "file")
+ branch_path = sbox.ospath('branches/branch')
+ branch_file_path = sbox.ospath('branches/branch/file')
branch_url = sbox.repo_url + "/branches/branch"
# Tweak a file and commit. (r2)
@@ -10536,15 +10564,15 @@ def foreign_repos(sbox):
wc_dir2 = sbox2.wc_dir
# Convenience variables for working copy paths.
- Z_path = os.path.join(wc_dir, 'A', 'D', 'G', 'Z')
- B_path = os.path.join(wc_dir, 'A', 'B')
- Q_path = os.path.join(wc_dir, 'Q')
- H_path = os.path.join(wc_dir, 'A', 'D', 'H')
- iota_path = os.path.join(wc_dir, 'iota')
- beta_path = os.path.join(wc_dir, 'A', 'B', 'E', 'beta')
- alpha_path = os.path.join(wc_dir, 'A', 'B', 'E', 'alpha')
- zeta_path = os.path.join(wc_dir, 'A', 'D', 'G', 'Z', 'zeta')
- fred_path = os.path.join(wc_dir, 'A', 'C', 'fred')
+ Z_path = sbox.ospath('A/D/G/Z')
+ B_path = sbox.ospath('A/B')
+ Q_path = sbox.ospath('Q')
+ H_path = sbox.ospath('A/D/H')
+ iota_path = sbox.ospath('iota')
+ beta_path = sbox.ospath('A/B/E/beta')
+ alpha_path = sbox.ospath('A/B/E/alpha')
+ zeta_path = sbox.ospath('A/D/G/Z/zeta')
+ fred_path = sbox.ospath('A/C/fred')
# Add new directories, with and without properties.
svntest.main.run_svn(None, 'mkdir', Q_path, Z_path)
@@ -10649,8 +10677,8 @@ def foreign_repos_uuid(sbox):
wc2_uuid = svntest.actions.get_wc_uuid(wc_dir2)
# Convenience variables for working copy paths.
- zeta_path = os.path.join(wc_dir, 'A', 'D', 'G', 'zeta')
- Z_path = os.path.join(wc_dir, 'A', 'Z')
+ zeta_path = sbox.ospath('A/D/G/zeta')
+ Z_path = sbox.ospath('A/Z')
# Add new file and directory.
zeta_contents = "This is the file 'zeta'.\n"
@@ -10722,13 +10750,13 @@ def foreign_repos_2_url(sbox):
wc_dir2 = sbox2.wc_dir
# Convenience variables for working copy paths.
- Z_path = os.path.join(wc_dir, 'A', 'D', 'G', 'Z')
- Q_path = os.path.join(wc_dir, 'A', 'Q')
- H_path = os.path.join(wc_dir, 'A', 'D', 'H')
- beta_path = os.path.join(wc_dir, 'A', 'B', 'E', 'beta')
- alpha_path = os.path.join(wc_dir, 'A', 'B', 'E', 'alpha')
- zeta_path = os.path.join(wc_dir, 'A', 'D', 'G', 'Z', 'zeta')
- fred_path = os.path.join(wc_dir, 'A', 'C', 'fred')
+ Z_path = sbox.ospath('A/D/G/Z')
+ Q_path = sbox.ospath('A/Q')
+ H_path = sbox.ospath('A/D/H')
+ beta_path = sbox.ospath('A/B/E/beta')
+ alpha_path = sbox.ospath('A/B/E/alpha')
+ zeta_path = sbox.ospath('A/D/G/Z/zeta')
+ fred_path = sbox.ospath('A/C/fred')
# First, "tag" the current state of the repository.
svntest.main.run_svn(None, 'copy', sbox.repo_url + '/A',
@@ -10824,7 +10852,7 @@ def merge_added_subtree(sbox):
# svn cp A A_COPY
A_url = url + "/A"
A_COPY_url = url + "/A_COPY"
- A_path = os.path.join(wc_dir, "A")
+ A_path = sbox.ospath('A')
svntest.actions.run_and_verify_svn("",["\n", "Committed revision 2.\n"], [],
"cp", "-m", "", A_url, A_COPY_url)
@@ -10880,9 +10908,7 @@ def merge_added_subtree(sbox):
svntest.actions.run_and_verify_svn("", None, [],
"cp", A_COPY_url + '/D2',
os.path.join(A_path, "D2"))
- actual_tree = svntest.tree.build_tree_from_wc(A_path, 0)
- svntest.tree.compare_trees("expected disk",
- actual_tree, expected_disk.old_tree())
+ svntest.actions.verify_disk(A_path, expected_disk)
svntest.actions.run_and_verify_status(A_path, expected_status)
# Remove the copy artifacts
@@ -10916,7 +10942,7 @@ def merge_unknown_url(sbox):
wc_dir = sbox.wc_dir
# remove a path from the repo and commit.
- iota_path = os.path.join(wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
svntest.actions.run_and_verify_svn(None, None, [], 'rm', iota_path)
svntest.actions.run_and_verify_svn("", None, [],
"ci", wc_dir, "-m", "log message")
@@ -10937,7 +10963,7 @@ def reverse_merge_away_all_mergeinfo(sbox):
wc_disk, wc_status = set_up_branch(sbox)
# Some paths we'll care about
- A_COPY_H_path = os.path.join(wc_dir, "A_COPY", "D", "H")
+ A_COPY_H_path = sbox.ospath('A_COPY/D/H')
# Merge r4:8 from A/D/H into A_COPY/D/H.
expected_output = wc.State(A_COPY_H_path, {
@@ -11027,19 +11053,31 @@ def reverse_merge_away_all_mergeinfo(sbox):
# merge'. Specifically see
# http://subversion.tigris.org/issues/show_bug.cgi?id=3067#desc5
@SkipUnless(server_has_mergeinfo)
-@Issues(3138,3067)
+@Issues(3138,3067,4217)
def dont_merge_revs_into_subtree_that_predate_it(sbox):
"dont merge revs into a subtree that predate it"
+ # +-> merge -c7 A/D/H/nu@7 H_COPY/nu
+ # | +-> merge -c2 A/D/H H_COPY
+ # | | +-> merge A/D/H H_COPY
+ # | | |
+ # A/D/H A----------------------
+ # +-psi +-M-------------M------
+ # +-nu A-D C---M-D
+ # H_COPY C---------G-G
+ # +-psi +---------+-.
+ # +-nu +-------G---.
+ # 1 2 3 4 5 6 7 8 9 w w w
+
# Create our good 'ole greek tree.
sbox.build()
wc_dir = sbox.wc_dir
# Some paths we'll care about
- psi_path = os.path.join(wc_dir, "A", "D", "H", "psi")
- nu_path = os.path.join(wc_dir, "A", "D", "H", "nu")
- H_COPY_path = os.path.join(wc_dir, "H_COPY")
- nu_COPY_path = os.path.join(wc_dir, "H_COPY", "nu")
+ psi_path = sbox.ospath('A/D/H/psi')
+ nu_path = sbox.ospath('A/D/H/nu')
+ H_COPY_path = sbox.ospath('H_COPY')
+ nu_COPY_path = sbox.ospath('H_COPY/nu')
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_disk = svntest.main.greek_state.copy()
@@ -11145,13 +11183,12 @@ def dont_merge_revs_into_subtree_that_predate_it(sbox):
H_COPY_path)
# H_COPY needs r6-9 applied while H_COPY/nu needs only 6,8-9.
- # This means r6 will be done as a separate editor drive targeted
- # on H_COPY. But r6 was only the copy of A/D/H to H_COPY and
- # so is a no-op and there will no notification for r6.
svntest.actions.run_and_verify_svn(
None,
expected_merge_output(
- [[6,9]], ['U ' + os.path.join(H_COPY_path, "psi") + '\n',
+ [[7,9], # Merge notification
+ [6,9]], # Mergeinfo notification
+ ['U ' + os.path.join(H_COPY_path, "psi") + '\n',
'D ' + os.path.join(H_COPY_path, "nu") + '\n',
' U ' + H_COPY_path + '\n',]),
[], 'merge', sbox.repo_url + '/A/D/H', H_COPY_path, '--force')
@@ -11182,11 +11219,11 @@ def set_up_renamed_subtree(sbox):
wc_dir = sbox.wc_dir
# Some paths we'll care about
- psi_path = os.path.join(wc_dir, "A", "D", "H", "psi")
- omega_path = os.path.join(wc_dir, "A", "D", "H", "omega")
- psi_moved_path = os.path.join(wc_dir, "A", "D", "H", "psi_moved")
- psi_COPY_moved_path = os.path.join(wc_dir, "H_COPY", "psi_moved")
- H_COPY_path = os.path.join(wc_dir, "H_COPY")
+ psi_path = sbox.ospath('A/D/H/psi')
+ omega_path = sbox.ospath('A/D/H/omega')
+ psi_moved_path = sbox.ospath('A/D/H/psi_moved')
+ psi_COPY_moved_path = sbox.ospath('H_COPY/psi_moved')
+ H_COPY_path = sbox.ospath('H_COPY')
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_disk = svntest.main.greek_state.copy()
@@ -11275,7 +11312,7 @@ def merge_chokes_on_renamed_subtrees(sbox):
wc_dir, expected_disk, expected_status = set_up_renamed_subtree(sbox)
# Some paths we'll care about
- psi_COPY_moved_path = os.path.join(wc_dir, "H_COPY", "psi_moved")
+ psi_COPY_moved_path = sbox.ospath('H_COPY/psi_moved')
# Cherry harvest all available revsions from 'A/D/H/psi_moved' to
@@ -11307,13 +11344,13 @@ def dont_explicitly_record_implicit_mergeinfo(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- A_path = os.path.join(sbox.wc_dir, 'A')
- A_copy_path = os.path.join(sbox.wc_dir, 'A_copy')
- A_copy2_path = os.path.join(sbox.wc_dir, 'A_copy2')
- A_copy_mu_path = os.path.join(sbox.wc_dir, 'A_copy', 'mu')
- A_copy2_mu_path = os.path.join(sbox.wc_dir, 'A_copy2', 'mu')
- nu_path = os.path.join(sbox.wc_dir, 'A', 'D', 'H', 'nu')
- nu_copy_path = os.path.join(sbox.wc_dir, 'A_copy', 'D', 'H', 'nu')
+ A_path = sbox.ospath('A')
+ A_copy_path = sbox.ospath('A_copy')
+ A_copy2_path = sbox.ospath('A_copy2')
+ A_copy_mu_path = sbox.ospath('A_copy/mu')
+ A_copy2_mu_path = sbox.ospath('A_copy2/mu')
+ nu_path = sbox.ospath('A/D/H/nu')
+ nu_copy_path = sbox.ospath('A_copy/D/H/nu')
def _commit_and_update(rev, action):
svntest.actions.run_and_verify_svn(None, None, [],
@@ -11658,8 +11695,8 @@ def merge_broken_link(sbox):
# Create our good 'ole greek tree.
sbox.build()
wc_dir = sbox.wc_dir
- src_path = os.path.join(wc_dir, 'A', 'B', 'E')
- copy_path = os.path.join(wc_dir, 'A', 'B', 'E_COPY')
+ src_path = sbox.ospath('A/B/E')
+ copy_path = sbox.ospath('A/B/E_COPY')
link_path = os.path.join(src_path, 'beta_link')
os.symlink('beta_broken', link_path)
@@ -11693,16 +11730,16 @@ def subtree_merges_dont_intersect_with_targets(sbox):
wc_disk, wc_status = set_up_branch(sbox, False, 2)
# Some paths we'll care about.
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- A_COPY_2_path = os.path.join(wc_dir, "A_COPY_2")
- H_COPY_2_path = os.path.join(wc_dir, "A_COPY_2", "D", "H")
- gamma_path = os.path.join(wc_dir, "A", "D", "gamma")
- psi_path = os.path.join(wc_dir, "A", "D", "H", "psi")
- psi_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "psi")
- gamma_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "gamma")
- psi_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "psi")
- psi_COPY_2_path = os.path.join(wc_dir, "A_COPY_2", "D", "H", "psi")
- rho_COPY_2_path = os.path.join(wc_dir, "A_COPY_2", "D", "G", "rho")
+ A_COPY_path = sbox.ospath('A_COPY')
+ A_COPY_2_path = sbox.ospath('A_COPY_2')
+ H_COPY_2_path = sbox.ospath('A_COPY_2/D/H')
+ gamma_path = sbox.ospath('A/D/gamma')
+ psi_path = sbox.ospath('A/D/H/psi')
+ psi_COPY_path = sbox.ospath('A_COPY/D/H/psi')
+ gamma_COPY_path = sbox.ospath('A_COPY/D/gamma')
+ psi_COPY_path = sbox.ospath('A_COPY/D/H/psi')
+ psi_COPY_2_path = sbox.ospath('A_COPY_2/D/H/psi')
+ rho_COPY_2_path = sbox.ospath('A_COPY_2/D/G/rho')
# Make a tweak to A/D/gamma and A/D/H/psi in r8.
svntest.main.file_write(gamma_path, "New content")
@@ -12009,11 +12046,11 @@ def subtree_source_missing_in_requested_range(sbox):
wc_disk, wc_status = set_up_branch(sbox, False, 1)
# Some paths we'll care about.
- psi_path = os.path.join(wc_dir, "A", "D", "H", "psi")
- omega_path = os.path.join(wc_dir, "A", "D", "H", "omega")
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- psi_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "psi")
- omega_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "omega")
+ psi_path = sbox.ospath('A/D/H/psi')
+ omega_path = sbox.ospath('A/D/H/omega')
+ A_COPY_path = sbox.ospath('A_COPY')
+ psi_COPY_path = sbox.ospath('A_COPY/D/H/psi')
+ omega_COPY_path = sbox.ospath('A_COPY/D/H/omega')
# r7 Delete A/D/H/psi.
svntest.actions.run_and_verify_svn(None, None, [],
@@ -12105,7 +12142,7 @@ def subtree_source_missing_in_requested_range(sbox):
expected_output = wc.State(A_COPY_path, {
'D/H/omega' : Item(status='U '),
'D/H/psi' : Item(status='U '),
- 'D/H/omega' : Item(status='G '),
+ 'D/H/omega' : Item(status='G ', prev_status='G '),
})
expected_mergeinfo_output = wc.State(A_COPY_path, {
'' : Item(status=' U'),
@@ -12330,7 +12367,7 @@ def subtrees_with_empty_mergeinfo(sbox):
wc_dir, expected_disk, expected_status = set_up_renamed_subtree(sbox)
# Some paths we'll care about
- H_COPY_path = os.path.join(wc_dir, "H_COPY")
+ H_COPY_path = sbox.ospath('H_COPY')
# Cherry harvest all available revsions from 'A/D/H' to 'H_COPY'.
#
@@ -12383,10 +12420,10 @@ def commit_to_subtree_added_by_merge(sbox):
wc_dir = sbox.wc_dir
# Some paths we'll care about
- N_path = os.path.join(wc_dir, "A", "D", "H", "N")
- nu_path = os.path.join(wc_dir, "A", "D", "H", "N", "nu")
- nu_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "N", "nu")
- H_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H")
+ N_path = sbox.ospath('A/D/H/N')
+ nu_path = sbox.ospath('A/D/H/N/nu')
+ nu_COPY_path = sbox.ospath('A_COPY/D/H/N/nu')
+ H_COPY_path = sbox.ospath('A_COPY/D/H')
# Copy 'A' to 'A_COPY' in r2.
wc_disk, wc_status = set_up_branch(sbox, True)
@@ -12508,24 +12545,52 @@ def svn_copy(s_rev, path1, path2):
svntest.actions.run_and_verify_svn(None, None, [], 'copy', '--parents',
'-r', s_rev, path1, path2)
-def svn_merge(rev_spec, source, target, exp_out=None, *args):
- """Merge a single change from path 'source' to path 'target'.
- SRC_CHANGE_NUM is either a number (to cherry-pick that specific change)
- or a command-line option revision range string such as '-r10:20'.
- *ARGS are additional arguments passed to svn merge."""
+def svn_merge(rev_range, source, target, lines=None, elides=[],
+ text_conflicts=0, prop_conflicts=0, tree_conflicts=0,
+ text_resolved=0, prop_resolved=0, tree_resolved=0,
+ args=[]):
+ """Merge a single change from path SOURCE to path TARGET and verify the
+ output and that there is no error. (The changes made are not verified.)
+
+ REV_RANGE is either a number (to cherry-pick that specific change) or a
+ two-element list [X,Y] to pick the revision range '-r(X-1):Y'.
+
+ LINES is a list of regular expressions to match other lines of output; if
+ LINES is 'None' then match all normal (non-conflicting) merges.
+
+ ELIDES is a list of paths on which mergeinfo elision should be reported.
+
+ TEXT_CONFLICTS, PROP_CONFLICTS and TREE_CONFLICTS specify the number of
+ each kind of conflict to expect.
+
+ ARGS are additional arguments passed to svn merge.
+ """
+
source = local_path(source)
target = local_path(target)
- if isinstance(rev_spec, int):
- rev_spec = '-c' + str(rev_spec)
- if exp_out is None:
- target_re = re.escape(target)
- exp_1 = "--- Merging r.* into '" + target_re + ".*':"
- exp_2 = "(A |D |[UG] | [UG]|[UG][UG]) " + target_re + ".*"
- exp_3 = "--- Recording mergeinfo for merge of r.* into '" + \
- target_re + ".*':"
- exp_out = svntest.verify.RegexOutput(exp_1 + "|" + exp_2 + "|" + exp_3)
+ elides = [local_path(p) for p in elides]
+ if isinstance(rev_range, int):
+ mi_rev_range = [rev_range]
+ rev_arg = '-c' + str(rev_range)
+ else:
+ mi_rev_range = rev_range
+ rev_arg = '-r' + str(rev_range[0] - 1) + ':' + str(rev_range[1])
+ if lines is None:
+ lines = ["(A |D |[UG] | [UG]|[UG][UG]) " + target + ".*\n"]
+ else:
+ # Expect mergeinfo on the target; caller must supply matches for any
+ # subtree mergeinfo paths.
+ lines.append(" [UG] " + target + "\n")
+ exp_out = expected_merge_output([mi_rev_range], lines, target=target,
+ elides=elides,
+ text_conflicts=text_conflicts,
+ prop_conflicts=prop_conflicts,
+ tree_conflicts=tree_conflicts,
+ text_resolved=text_resolved,
+ prop_resolved=prop_resolved,
+ tree_resolved=tree_resolved)
svntest.actions.run_and_verify_svn(None, exp_out, [],
- 'merge', rev_spec, source, target, *args)
+ 'merge', rev_arg, source, target, *args)
#----------------------------------------------------------------------
# Tests for merging the deletion of a node, where the node to be deleted
@@ -12557,7 +12622,8 @@ def del_identical_file(sbox):
svn_copy(s_rev_mod, source, target)
sbox.simple_commit(target)
# Should be deleted quietly.
- svn_merge(s_rev_del, source, target, '--- Merging|D |--- Recording| U')
+ svn_merge(s_rev_del, source, target,
+ ['D %s\n' % local_path('A/D/G2/tau')])
# Make a differing copy, locally modify it so it's the same,
# and merge a deletion to it.
@@ -12566,7 +12632,8 @@ def del_identical_file(sbox):
sbox.simple_commit(target)
svn_modfile(target+"/tau")
# Should be deleted quietly.
- svn_merge(s_rev_del, source, target, '--- Merging|D |--- Recording| U')
+ svn_merge(s_rev_del, source, target,
+ ['D %s\n' % local_path('A/D/G3/tau')])
os.chdir(saved_cwd)
@@ -12593,10 +12660,11 @@ def del_sched_add_hist_file(sbox):
svn_copy(s_rev_orig, source, target)
sbox.simple_commit(target)
s_rev = 3
- svn_merge(s_rev_add, source, target, '--- Merging|A |--- Recording| U')
+ svn_merge(s_rev_add, source, target,
+ ['A %s\n' % local_path('A/D/G2/file')])
# Should be deleted quietly.
svn_merge(-s_rev_add, source, target,
- '--- Reverse-merging|D |--- Recording| U| G|--- Eliding')
+ ['D %s\n' % local_path('A/D/G2/file')], elides=['A/D/G2'])
os.chdir(saved_cwd)
@@ -12617,9 +12685,9 @@ def subtree_merges_dont_cause_spurious_conflicts(sbox):
wc_dir = sbox.wc_dir
# Some paths we'll care about
- rho_path = os.path.join(wc_dir, "A", "D", "G", "rho")
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- psi_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "psi")
+ rho_path = sbox.ospath('A/D/G/rho')
+ A_COPY_path = sbox.ospath('A_COPY')
+ psi_COPY_path = sbox.ospath('A_COPY/D/H/psi')
# Make a branch to merge to.
wc_disk, wc_status = set_up_branch(sbox, False, 1)
@@ -12837,13 +12905,13 @@ def merge_target_and_subtrees_need_nonintersecting_ranges(sbox):
wc_dir = sbox.wc_dir
# Some paths we'll care about
- nu_path = os.path.join(wc_dir, "A", "D", "G", "nu")
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- nu_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "G", "nu")
- omega_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "omega")
- beta_COPY_path = os.path.join(wc_dir, "A_COPY", "B", "E", "beta")
- rho_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "G", "rho")
- psi_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "psi")
+ nu_path = sbox.ospath('A/D/G/nu')
+ A_COPY_path = sbox.ospath('A_COPY')
+ nu_COPY_path = sbox.ospath('A_COPY/D/G/nu')
+ omega_COPY_path = sbox.ospath('A_COPY/D/H/omega')
+ beta_COPY_path = sbox.ospath('A_COPY/B/E/beta')
+ rho_COPY_path = sbox.ospath('A_COPY/D/G/rho')
+ psi_COPY_path = sbox.ospath('A_COPY/D/H/psi')
# Make a branch to merge to.
wc_disk, wc_status = set_up_branch(sbox, False, 1)
@@ -12991,6 +13059,8 @@ def merge_target_and_subtrees_need_nonintersecting_ranges(sbox):
None, 1)
#----------------------------------------------------------------------
+# Part of this test is a regression test for issue #3250 "Repeated merging
+# of conflicting properties fails".
@Issue(3250)
def merge_two_edits_to_same_prop(sbox):
"merge two successive edits to the same property"
@@ -13037,12 +13107,21 @@ def merge_two_edits_to_same_prop(sbox):
# some other target within the same merge requiring only a part of the
# revision range.
- # We test issue #3250 here
- # Revert changes to target branch wc
+ # ====================================================================
+
+ # We test issue #3250 here: that is, test that we can make two successive
+ # conflicting changes to the same property on the same node (here a file;
+ # in #3250 it was on a dir).
+ #
+ # ### But we no longer support merging into a node that's already in
+ # conflict, and the 'rev3' merge here has been tweaked to resolve
+ # the conflict, so it no longer tests the original #3250 scenario.
+ #
+ # Revert changes to branch wc
svntest.actions.run_and_verify_svn(None, None, [],
'revert', '--recursive', A_COPY_path)
- # In the target branch, make two successive changes to the same property
+ # In the branch, make two successive changes to the same property
sbox.simple_propset('p', 'new-val-3', 'A_COPY/mu')
sbox.simple_commit('A_COPY/mu')
rev3 = initial_rev + 3
@@ -13050,38 +13129,25 @@ def merge_two_edits_to_same_prop(sbox):
sbox.simple_commit('A_COPY/mu')
rev4 = initial_rev + 4
- # Merge the two changes together to source.
- svn_merge('-r'+str(rev3-1)+':'+str(rev4), A_COPY_path, A_path, [
- "--- Merging r9 through r10 into '%s':\n" % A_path,
+ # Merge the two changes together to trunk.
+ svn_merge([rev3, rev4], A_COPY_path, A_path, [
" C %s\n" % mu_path,
- "--- Recording mergeinfo for merge of r9 through r10 into '%s':\n" \
- % A_path,
- " U A\n",
- "Summary of conflicts:\n",
- " Property conflicts: 1\n"],
- '--allow-mixed-revisions')
-
- # Revert changes to source wc, to test next scenario of #3250
+ ], prop_conflicts=1, args=['--allow-mixed-revisions'])
+
+ # Revert changes to trunk wc, to test next scenario of #3250
svntest.actions.run_and_verify_svn(None, None, [],
'revert', '--recursive', A_path)
- # Merge the first change, then the second, to source.
+ # Merge the first change, then the second, to trunk.
svn_merge(rev3, A_COPY_path, A_path, [
- "--- Merging r9 into '%s':\n" % A_path,
" C %s\n" % mu_path,
- "--- Recording mergeinfo for merge of r9 into '%s':\n" % A_path,
- " U A\n",
- "Summary of conflicts:\n",
- " Property conflicts: 1\n"],
- '--allow-mixed-revisions')
+ "Resolved .* '%s'\n" % mu_path,
+ ], prop_resolved=1,
+ args=['--allow-mixed-revisions',
+ '--accept=working'])
svn_merge(rev4, A_COPY_path, A_path, [
- "--- Merging r10 into '%s':\n" % A_path,
" C %s\n" % mu_path,
- "--- Recording mergeinfo for merge of r10 into '%s':\n" % A_path,
- " G A\n",
- "Summary of conflicts:\n",
- " Property conflicts: 1\n"],
- '--allow-mixed-revisions')
+ ], prop_conflicts=1, args=['--allow-mixed-revisions'])
os.chdir(was_cwd)
@@ -13130,8 +13196,8 @@ def merge_an_eol_unification_and_set_svn_eol_style(sbox):
sbox.simple_commit('A_COPY')
# Merge the two changes together to the target branch.
- svn_merge('-r'+str(rev1)+':'+str(rev3), 'A', 'A_COPY', None,
- '--allow-mixed-revisions')
+ svn_merge([rev2, rev3], 'A', 'A_COPY',
+ args=['--allow-mixed-revisions'])
# That merge should succeed.
# Surprise: setting svn:eol-style='LF' instead of 'native' doesn't fail.
@@ -13163,10 +13229,10 @@ def merge_adds_mergeinfo_correctly(sbox):
wc_disk, wc_status = set_up_branch(sbox, False, 2)
# Some paths we'll care about
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- D_COPY_path = os.path.join(wc_dir, "A_COPY", "D")
- A_COPY_2_path = os.path.join(wc_dir, "A_COPY_2")
- D_COPY_2_path = os.path.join(wc_dir, "A_COPY_2", "D")
+ A_COPY_path = sbox.ospath('A_COPY')
+ D_COPY_path = sbox.ospath('A_COPY/D')
+ A_COPY_2_path = sbox.ospath('A_COPY_2')
+ D_COPY_2_path = sbox.ospath('A_COPY_2/D')
# Update working copy to allow full inheritance and elision.
svntest.actions.run_and_verify_svn(None, exp_noop_up_out(7), [],
@@ -13417,6 +13483,12 @@ def natural_history_filtering(sbox):
#
# To set up a situation where this can occur we'll do the following:
#
+ # trunk -1-----3-4-5-6-------8----------- A
+ # \ \ \
+ # branch1 2-----------\-------9-------- A_COPY
+ # \ \
+ # branch2 7--------10---- A_COPY_2
+ #
# 1) Create a 'trunk'.
#
# 2) Copy 'trunk' to 'branch1'.
@@ -13438,9 +13510,9 @@ def natural_history_filtering(sbox):
wc_dir = sbox.wc_dir
# Some paths we'll care about
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- A_COPY_2_path = os.path.join(wc_dir, "A_COPY_2")
- chi_path = os.path.join(wc_dir, "A", "D", "H", "chi")
+ A_COPY_path = sbox.ospath('A_COPY')
+ A_COPY_2_path = sbox.ospath('A_COPY_2')
+ chi_path = sbox.ospath('A/D/H/chi')
# r1-r6: Setup a 'trunk' (A) and a 'branch' (A_COPY).
wc_disk, wc_status = set_up_branch(sbox, False, 1)
@@ -13713,9 +13785,9 @@ def subtree_gets_changes_even_if_ultimately_deleted(sbox):
wc_dir = sbox.wc_dir
# Some paths we'll care about
- H_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H")
- psi_path = os.path.join(wc_dir, "A", "D", "H", "psi")
- psi_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "psi")
+ H_COPY_path = sbox.ospath('A_COPY/D/H')
+ psi_path = sbox.ospath('A/D/H/psi')
+ psi_COPY_path = sbox.ospath('A_COPY/D/H/psi')
# r2 - r6: Copy A to A_COPY and then make some text changes under A.
set_up_branch(sbox)
@@ -13736,11 +13808,10 @@ def subtree_gets_changes_even_if_ultimately_deleted(sbox):
# r9: Merge r3,7 from A/D/H to A_COPY/D/H, then reverse merge r7 from
# A/D/H/psi to A_COPY/D/H/psi.
expected_output = wc.State(H_COPY_path, {
- 'psi' : Item(status='U '),
- 'psi' : Item(status='G '),
+ 'psi' : Item(status='G ', prev_status='U '), # Touched twice
})
expected_mergeinfo_output = wc.State(H_COPY_path, {
- '' : Item(status=' G'),
+ '' : Item(status=' G', prev_status=' U'),
})
expected_elision_output = wc.State(H_COPY_path, {
})
@@ -13788,7 +13859,7 @@ def subtree_gets_changes_even_if_ultimately_deleted(sbox):
svntest.main.run_svn(None, 'up', wc_dir)
expected_output = wc.State(H_COPY_path, {
'omega' : Item(status='U '),
- 'psi' : Item(status='D '),
+ 'psi' : Item(status='D ', prev_status='U '),
})
expected_mergeinfo_output = wc.State(H_COPY_path, {
'' : Item(status=' U'),
@@ -13826,10 +13897,10 @@ def no_self_referential_filtering_on_added_path(sbox):
wc_dir = sbox.wc_dir
# Some paths we'll care about
- C_COPY_path = os.path.join(wc_dir, "A_COPY", "C")
- A_path = os.path.join(wc_dir, "A")
- C_path = os.path.join(wc_dir, "A", "C")
- A_COPY_2_path = os.path.join(wc_dir, "A_COPY_2")
+ C_COPY_path = sbox.ospath('A_COPY/C')
+ A_path = sbox.ospath('A')
+ C_path = sbox.ospath('A/C')
+ A_COPY_2_path = sbox.ospath('A_COPY_2')
# r1-r7: Setup a 'trunk' and two 'branches'.
wc_disk, wc_status = set_up_branch(sbox, False, 2)
@@ -13897,6 +13968,14 @@ def no_self_referential_filtering_on_added_path(sbox):
'C' : Item(status='D '),
'C_MOVED' : Item(status='A '),
})
+ # Why is C_MOVED notified as ' G' rather than ' U'? C_MOVED was
+ # added by the merge and there is only a single editor drive, so
+ # how can any prop changes be merged to it? The answer is that
+ # the merge code does some quiet housekeeping, merging C_MOVED's
+ # inherited mergeinfo into its incoming mergeinfo, see
+ # http://subversion.tigris.org/issues/show_bug.cgi?id=4309
+ # This test is not covering issue #4309 so we let the current
+ # behavior pass.
expected_mergeinfo_output = wc.State(A_COPY_2_path, {
'' : Item(status=' G'),
'C_MOVED' : Item(status=' G'),
@@ -13934,11 +14013,11 @@ def no_self_referential_filtering_on_added_path(sbox):
'B/E/beta' : Item("New content"),
'B/lambda' : Item("This is the file 'lambda'.\n"),
'B/F' : Item(),
+ # What's up with the mergeinfo
'C_MOVED' : Item(props={SVN_PROP_MERGEINFO : '/A/C_MOVED:10\n' +
'/A_COPY/C:8\n' +
'/A_COPY/C_MOVED:8',
'propname' : 'propval'}),
- 'C' : Item(),
'D' : Item(),
'D/G' : Item(),
'D/G/pi' : Item("This is the file 'pi'.\n"),
@@ -13950,8 +14029,6 @@ def no_self_referential_filtering_on_added_path(sbox):
'D/H/psi' : Item("New content"),
'D/H/omega' : Item("New content"),
})
- if svntest.main.wc_is_singledb(wc_dir):
- expected_A_COPY_2_disk.remove('C')
expected_A_COPY_2_skip = wc.State(A_COPY_2_path, { })
svntest.actions.run_and_verify_merge(A_COPY_2_path, None, None,
sbox.repo_url + '/A', None,
@@ -13982,21 +14059,21 @@ def merge_range_prior_to_rename_source_existence(sbox):
wc_dir = sbox.wc_dir
# Some paths we'll care about
- nu_path = os.path.join(wc_dir, "A", "D", "H", "nu")
- nu_moved_path = os.path.join(wc_dir, "A", "D", "H", "nu_moved")
- A_path = os.path.join(wc_dir, "A")
- alpha_path = os.path.join(wc_dir, "A", "B", "E", "alpha")
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- A_COPY_2_path = os.path.join(wc_dir, "A_COPY_2")
- B_COPY_path = os.path.join(wc_dir, "A_COPY", "B")
- B_COPY_2_path = os.path.join(wc_dir, "A_COPY_2", "B")
- alpha_COPY_path = os.path.join(wc_dir, "A_COPY", "B", "E", "alpha")
- beta_COPY_path = os.path.join(wc_dir, "A_COPY", "B", "E", "beta")
- gamma_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "gamma")
- rho_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "G", "rho")
- omega_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "omega")
- psi_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "psi")
- nu_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "nu")
+ nu_path = sbox.ospath('A/D/H/nu')
+ nu_moved_path = sbox.ospath('A/D/H/nu_moved')
+ A_path = sbox.ospath('A')
+ alpha_path = sbox.ospath('A/B/E/alpha')
+ A_COPY_path = sbox.ospath('A_COPY')
+ A_COPY_2_path = sbox.ospath('A_COPY_2')
+ B_COPY_path = sbox.ospath('A_COPY/B')
+ B_COPY_2_path = sbox.ospath('A_COPY_2/B')
+ alpha_COPY_path = sbox.ospath('A_COPY/B/E/alpha')
+ beta_COPY_path = sbox.ospath('A_COPY/B/E/beta')
+ gamma_COPY_path = sbox.ospath('A_COPY/D/gamma')
+ rho_COPY_path = sbox.ospath('A_COPY/D/G/rho')
+ omega_COPY_path = sbox.ospath('A_COPY/D/H/omega')
+ psi_COPY_path = sbox.ospath('A_COPY/D/H/psi')
+ nu_COPY_path = sbox.ospath('A_COPY/D/H/nu')
# Setup our basic 'trunk' and 'branch':
# r2 - Copy A to A_COPY
@@ -14086,11 +14163,13 @@ def merge_range_prior_to_rename_source_existence(sbox):
'move', sbox.repo_url + '/A/D/H/nu',
sbox.repo_url + '/A/D/H/nu_moved',
'-m', 'Move nu to nu_moved')
- svntest.actions.run_and_verify_svn(None,
- ["Updating '%s':\n" % (wc_dir),
- "D " + nu_path + "\n",
- "A " + nu_moved_path + "\n",
- "Updated to revision 12.\n"],
+ expected_output = svntest.verify.UnorderedOutput(
+ ["Updating '%s':\n" % (wc_dir),
+ "D " + nu_path + "\n",
+ "A " + nu_moved_path + "\n",
+ "Updated to revision 12.\n"],
+ )
+ svntest.actions.run_and_verify_svn(None, expected_output,
[], 'up', wc_dir)
# Now merge -r7:12 from A to A_COPY.
@@ -14324,8 +14403,8 @@ def set_up_natural_history_gap(sbox):
wc_disk, wc_status = set_up_branch(sbox, False, 0)
# Some paths we'll care about.
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- gamma_path = os.path.join(wc_dir, "A", "D", "gamma")
+ A_COPY_path = sbox.ospath('A_COPY')
+ gamma_path = sbox.ospath('A/D/gamma')
# r6: Delete 'A'
exit_code, out, err = svntest.actions.run_and_verify_svn(
@@ -14394,7 +14473,7 @@ def dont_merge_gaps_in_history(sbox):
set_up_natural_history_gap(sbox)
# Some paths we'll care about.
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
+ A_COPY_path = sbox.ospath('A_COPY')
# Now merge all available changes from 'A' to 'A_COPY'. The only
# available revisions are r8 and r9. Only r9 effects the source/target
@@ -14501,7 +14580,7 @@ def handle_gaps_in_implicit_mergeinfo(sbox):
expected_disk, expected_status = set_up_natural_history_gap(sbox)
# Some paths we'll care about.
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
+ A_COPY_path = sbox.ospath('A_COPY')
# Merge r4 to 'A_COPY' from A@4, which is *not* part of A_COPY's history.
expected_output = wc.State(A_COPY_path, {
@@ -14624,9 +14703,9 @@ def mergeinfo_deleted_by_a_merge_should_disappear(sbox):
wc_dir = sbox.wc_dir
# Some paths we'll care about
- D_COPY_path = os.path.join(wc_dir, "A_COPY", "D")
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- A_COPY_2_path = os.path.join(wc_dir, "A_COPY_2")
+ D_COPY_path = sbox.ospath('A_COPY/D')
+ A_COPY_path = sbox.ospath('A_COPY')
+ A_COPY_2_path = sbox.ospath('A_COPY_2')
# r2 - r6: Copy A to A_COPY and then make some text changes under A.
wc_disk, wc_status = set_up_branch(sbox)
@@ -14746,9 +14825,9 @@ def noop_file_merge(sbox):
wc_dir = sbox.wc_dir
# Some paths we'll care about
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- beta_COPY_path = os.path.join(wc_dir, "A_COPY", "B", "E", "beta")
- chi_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "chi")
+ A_COPY_path = sbox.ospath('A_COPY')
+ beta_COPY_path = sbox.ospath('A_COPY/B/E/beta')
+ chi_COPY_path = sbox.ospath('A_COPY/D/H/chi')
# r2 - r6: Copy A to A_COPY and then make some text changes under A.
wc_disk, wc_status = set_up_branch(sbox)
@@ -14764,7 +14843,7 @@ def noop_file_merge(sbox):
[], 'merge', '-c5', sbox.repo_url + '/A', A_COPY_path)
svntest.actions.run_and_verify_svn(None, None, [], 'commit', '-m',
'Merge r5 from A to A_COPY',
- wc_dir);
+ wc_dir)
# Update working copy to allow full inheritance and elision.
svntest.actions.run_and_verify_svn(None, exp_noop_up_out(7), [],
@@ -14895,15 +14974,15 @@ def record_only_merge(sbox):
wc_disk, wc_status = set_up_branch(sbox)
# Some paths we'll care about
- nu_path = os.path.join(wc_dir, "A", "C", "nu")
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- A2_path = os.path.join(wc_dir, "A2")
- Z_path = os.path.join(wc_dir, "A", "B", "Z")
- Z_COPY_path = os.path.join(wc_dir, "A_COPY", "B", "Z")
- rho_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "G", "rho")
- omega_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "omega")
- H_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H")
- nu_COPY_path = os.path.join(wc_dir, "A_COPY", "C", "nu")
+ nu_path = sbox.ospath('A/C/nu')
+ A_COPY_path = sbox.ospath('A_COPY')
+ A2_path = sbox.ospath('A2')
+ Z_path = sbox.ospath('A/B/Z')
+ Z_COPY_path = sbox.ospath('A_COPY/B/Z')
+ rho_COPY_path = sbox.ospath('A_COPY/D/G/rho')
+ omega_COPY_path = sbox.ospath('A_COPY/D/H/omega')
+ H_COPY_path = sbox.ospath('A_COPY/D/H')
+ nu_COPY_path = sbox.ospath('A_COPY/C/nu')
# r7 - Copy the branch A_COPY@2 to A2 and update the WC.
svntest.actions.run_and_verify_svn(None, None, [],
@@ -15077,8 +15156,6 @@ def record_only_merge(sbox):
#----------------------------------------------------------------------
# Test for issue #3514 'svn merge --accept [ base | theirs-full ]
# doesn't work'
-#
-# This test is marked as XFail until issue #3514 is fixed.
@Issue(3514)
def merge_automatic_conflict_resolution(sbox):
"automatic conflict resolutions work with merge"
@@ -15089,8 +15166,8 @@ def merge_automatic_conflict_resolution(sbox):
# Some paths we'll care about
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- psi_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "psi")
+ A_COPY_path = sbox.ospath('A_COPY')
+ psi_COPY_path = sbox.ospath('A_COPY/D/H/psi')
# r7 - Make a change on A_COPY that will conflict with r3 on A
svntest.main.file_write(psi_COPY_path, "BASE.\n")
@@ -15176,7 +15253,8 @@ def merge_automatic_conflict_resolution(sbox):
'revert', '--recursive', wc_dir)
# Test --accept mine-conflict and mine-full
- expected_output = wc.State(A_COPY_path, {'D/H/psi' : Item(status='U ')})
+ ### TODO: Also test that the output has a 'Resolved' line for this path.
+ expected_output = wc.State(A_COPY_path, {'D/H/psi' : Item(status='C ')})
expected_disk.tweak('D/H/psi', contents="BASE.\n")
expected_status.tweak('D/H/psi', status=' ')
svntest.actions.run_and_verify_merge(A_COPY_path, '2', '3',
@@ -15211,7 +15289,8 @@ def merge_automatic_conflict_resolution(sbox):
'revert', '--recursive', wc_dir)
# Test --accept theirs-conflict and theirs-full
- expected_output = wc.State(A_COPY_path, {'D/H/psi' : Item(status='U ')})
+ ### TODO: Also test that the output has a 'Resolved' line for this path.
+ expected_output = wc.State(A_COPY_path, {'D/H/psi' : Item(status='C ')})
expected_disk.tweak('D/H/psi', contents="New content")
expected_status.tweak('D/H/psi', status='M ')
svntest.actions.run_and_verify_merge(A_COPY_path, '2', '3',
@@ -15245,7 +15324,8 @@ def merge_automatic_conflict_resolution(sbox):
svntest.actions.run_and_verify_svn(None, None, [],
'revert', '--recursive', wc_dir)
# Test --accept base
- expected_output = wc.State(A_COPY_path, {'D/H/psi' : Item(status='U ')})
+ ### TODO: Also test that the output has a 'Resolved' line for this path.
+ expected_output = wc.State(A_COPY_path, {'D/H/psi' : Item(status='C ')})
expected_elision_output = wc.State(A_COPY_path, {
})
expected_disk.tweak('D/H/psi', contents="This is the file 'psi'.\n")
@@ -15275,10 +15355,10 @@ def skipped_files_get_correct_mergeinfo(sbox):
wc_dir = sbox.wc_dir
# Some paths we'll care about
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- H_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H")
- psi_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "psi")
- psi_path = os.path.join(wc_dir, "A", "D", "H", "psi")
+ A_COPY_path = sbox.ospath('A_COPY')
+ H_COPY_path = sbox.ospath('A_COPY/D/H')
+ psi_COPY_path = sbox.ospath('A_COPY/D/H/psi')
+ psi_path = sbox.ospath('A/D/H/psi')
# Setup our basic 'trunk' and 'branch':
# r2 - Copy A to A_COPY
@@ -15356,9 +15436,10 @@ def skipped_files_get_correct_mergeinfo(sbox):
'D/gamma' : Item("This is the file 'gamma'.\n"),
'D/H' : Item(props={SVN_PROP_MERGEINFO : '/A/D/H:2*,3,4-8*'}),
})
- expected_skip = wc.State(A_COPY_path,
- {'D/H/psi' : Item(),
- 'D/H/omega' : Item()})
+ expected_skip = wc.State(
+ A_COPY_path,
+ {'D/H/psi' : Item(verb='Skipped missing target'),
+ 'D/H/omega' : Item(verb='Skipped missing target')})
expected_output = wc.State(A_COPY_path,
{'B/E/beta' : Item(status='U '),
'D/G/rho' : Item(status='U ')})
@@ -15392,7 +15473,7 @@ def committed_case_only_move_and_revert(sbox):
wc_disk, wc_status = set_up_branch(sbox, True)
# Some paths we'll care about
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
+ A_COPY_path = sbox.ospath('A_COPY')
# r3: A case-only file rename on the server
svntest.actions.run_and_verify_svn(None,
@@ -15513,14 +15594,13 @@ def committed_case_only_move_and_revert(sbox):
})
expected_disk.tweak('', props={SVN_PROP_MERGEINFO : '/A:3,5'})
expected_disk.add({'c' : Item()})
- if svntest.main.wc_is_singledb(wc_dir):
- expected_disk.remove('C')
+ expected_disk.remove('C')
expected_status.tweak('MU', status=' ', wc_rev=4, copied=None)
expected_status.remove('mu')
expected_status.tweak('C', status='D ')
expected_status.tweak('', wc_rev=4)
expected_status.add({'c' : Item(status='A ', copied='+', wc_rev='-')})
- # This merge succeeds, but A_COPY/c is in a strange state, added with
+ # This merge succeeds. It used to leave a strange state, added with
# history but missing:
#
# M merge_tests-139\A_COPY
@@ -15552,8 +15632,8 @@ def merge_into_wc_for_deleted_branch(sbox):
wc_disk, wc_status = set_up_branch(sbox)
# Some paths we'll care about
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- gamma_path = os.path.join(wc_dir, "A", "D", "gamma")
+ A_COPY_path = sbox.ospath('A_COPY')
+ gamma_path = sbox.ospath('A/D/gamma')
# r7 - Delete the branch on the repository, obviously it still
# exists in our WC.
@@ -15656,7 +15736,7 @@ def foreign_repos_del_and_props(sbox):
wc_dir = sbox.wc_dir
wc2_dir = sbox.add_wc_path('wc2')
- (r2_path, r2_url) = sbox.add_repo_path('fgn');
+ (r2_path, r2_url) = sbox.add_repo_path('fgn')
svntest.main.create_repos(r2_path)
svntest.actions.run_and_verify_svn(None, None, [], 'checkout',
@@ -15664,17 +15744,17 @@ def foreign_repos_del_and_props(sbox):
svntest.actions.run_and_verify_svn(None, None, [], 'propset',
'svn:eol-style', 'native',
- os.path.join(wc_dir, 'iota'))
+ sbox.ospath('iota'))
svntest.actions.run_and_verify_svn(None, None, [], 'cp',
- os.path.join(wc_dir, 'A/D'),
- os.path.join(wc_dir, 'D'))
+ sbox.ospath('A/D'),
+ sbox.ospath('D'))
svntest.actions.run_and_verify_svn(None, None, [], 'rm',
- os.path.join(wc_dir, 'A/D'),
- os.path.join(wc_dir, 'D/G'))
+ sbox.ospath('A/D'),
+ sbox.ospath('D/G'))
- new_file = os.path.join(wc_dir, 'new-file')
+ new_file = sbox.ospath('new-file')
svntest.main.file_write(new_file, 'new-file')
svntest.actions.run_and_verify_svn(None, None, [], 'add', new_file)
@@ -15744,8 +15824,8 @@ def immediate_depth_merge_creates_minimal_subtree_mergeinfo(sbox):
wc_dir = sbox.wc_dir
wc_disk, wc_status = set_up_branch(sbox)
- B_path = os.path.join(wc_dir, "A", "B")
- B_COPY_path = os.path.join(wc_dir, "A_COPY", "B")
+ B_path = sbox.ospath('A/B')
+ B_COPY_path = sbox.ospath('A_COPY/B')
svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
@@ -15816,9 +15896,9 @@ def record_only_merge_creates_self_referential_mergeinfo(sbox):
wc_dir = sbox.wc_dir
# Some paths we'll care about
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- A_path = os.path.join(wc_dir, 'A')
- A_branch_path = os.path.join(wc_dir, 'A-branch')
+ mu_path = sbox.ospath('A/mu')
+ A_path = sbox.ospath('A')
+ A_branch_path = sbox.ospath('A-branch')
# Make a change to A/mu in r2.
svntest.main.file_write(mu_path, "Trunk edit\n")
@@ -15905,11 +15985,11 @@ def dav_skelta_mode_causes_spurious_conflicts(sbox):
wc_dir = sbox.wc_dir
# Some paths we'll care about
- mu_path = os.path.join(wc_dir, "A", "mu")
- A_path = os.path.join(wc_dir, "A")
- C_path = os.path.join(wc_dir, "A", "C")
- A_branch_path = os.path.join(wc_dir, "A-branch")
- C_branch_path = os.path.join(wc_dir, "A-branch", "C")
+ mu_path = sbox.ospath('A/mu')
+ A_path = sbox.ospath('A')
+ C_path = sbox.ospath('A/C')
+ A_branch_path = sbox.ospath('A-branch')
+ C_branch_path = sbox.ospath('A-branch/C')
# r2 - Set some intial properties:
#
@@ -16057,7 +16137,7 @@ def merge_into_locally_added_file(sbox):
shutil.copy(pi_path, new_path)
svntest.main.file_append(pi_path, "foo\n")
- sbox.simple_commit(); # r2
+ sbox.simple_commit() # r2
sbox.simple_add('A/D/G/new')
@@ -16102,7 +16182,7 @@ def merge_into_locally_added_directory(sbox):
new_dir_path = sbox.ospath("A/D/new_dir")
svntest.main.file_append_binary(pi_path, "foo\n")
- sbox.simple_commit(); # r2
+ sbox.simple_commit() # r2
os.mkdir(new_dir_path)
svntest.main.file_append_binary(os.path.join(new_dir_path, 'pi'),
@@ -16165,11 +16245,11 @@ def merge_with_os_deleted_subtrees(sbox):
set_up_branch(sbox)
# Some paths we'll care about
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
- C_COPY_path = os.path.join(wc_dir, "A_COPY", "C")
- psi_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "psi")
- mu_COPY_path = os.path.join(wc_dir, "A_COPY", "mu")
- G_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "G")
+ A_COPY_path = sbox.ospath('A_COPY')
+ C_COPY_path = sbox.ospath('A_COPY/C')
+ psi_COPY_path = sbox.ospath('A_COPY/D/H/psi')
+ mu_COPY_path = sbox.ospath('A_COPY/mu')
+ G_COPY_path = sbox.ospath('A_COPY/D/G')
# Remove several subtrees from disk.
svntest.main.safe_rmtree(C_COPY_path)
@@ -16188,7 +16268,7 @@ def merge_with_os_deleted_subtrees(sbox):
err_re = "svn: E195016: Merge tracking not allowed with missing subtrees; " + \
"try restoring these items first:" + \
"|(\n)" + \
- "|(.*apr_err.*\n)" # In case of debug build
+ "|" + svntest.main.stack_trace_regexp
# Case 1: Infinite depth merge into infinite depth WC target.
# Every missing subtree under the target should be reported as missing.
@@ -16236,7 +16316,7 @@ def merge_with_os_deleted_subtrees(sbox):
# Test for issue #3668 'inheritance can result in self-referential
# mergeinfo' and issue #3669 'inheritance can result in mergeinfo
# describing nonexistent sources'
-@Issue(3668)
+@Issue(3668,3669)
@XFail()
def no_self_referential_or_nonexistent_inherited_mergeinfo(sbox):
"don't inherit bogus mergeinfo"
@@ -16249,12 +16329,12 @@ def no_self_referential_or_nonexistent_inherited_mergeinfo(sbox):
set_up_branch(sbox, nbr_of_branches=1)
# Some paths we'll care about
- nu_path = os.path.join(wc_dir, "A", "C", "nu")
- nu_COPY_path = os.path.join(wc_dir, "A_COPY", "C", "nu")
- J_path = os.path.join(wc_dir, "A", "D", "J")
- J_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "J")
- zeta_path = os.path.join(wc_dir, "A", "D", "J", "zeta")
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
+ nu_path = sbox.ospath('A/C/nu')
+ nu_COPY_path = sbox.ospath('A_COPY/C/nu')
+ J_path = sbox.ospath('A/D/J')
+ J_COPY_path = sbox.ospath('A_COPY/D/J')
+ zeta_path = sbox.ospath('A/D/J/zeta')
+ A_COPY_path = sbox.ospath('A_COPY')
# r7 - Add the file A/C/nu
svntest.main.file_write(nu_path, "This is the file 'nu'.\n")
@@ -16300,7 +16380,7 @@ def no_self_referential_or_nonexistent_inherited_mergeinfo(sbox):
# This test is marked as XFail because the following two merges
# create mergeinfo with both non-existent path-revs and self-referential
- # mergeinfo.c
+ # mergeinfo.
#
# Merge all available revisions from A/C/nu to A_COPY/C/nu.
# The target has no explicit mergeinfo of its own but inherits mergeinfo
@@ -16367,9 +16447,12 @@ def no_self_referential_or_nonexistent_inherited_mergeinfo(sbox):
None, 1)
#----------------------------------------------------------------------
-# Test for issue #3756 'subtree merge can inherit invalid working mergeinfo'.
+# Test for issue #3756 'subtree merge can inherit invalid working mergeinfo',
+# issue #3668 'inheritance can result in self-referential mergeinfo', and
+# issue #3669 'inheritance can result in mergeinfo describing nonexistent
+# sources'.
@XFail()
-@Issue(3756)
+@Issue(3756,3668,3669)
def subtree_merges_inherit_invalid_working_mergeinfo(sbox):
"don't inherit bogus working mergeinfo"
@@ -16381,9 +16464,9 @@ def subtree_merges_inherit_invalid_working_mergeinfo(sbox):
set_up_branch(sbox, nbr_of_branches=1)
# Some paths we'll care about
- nu_path = os.path.join(wc_dir, "A", "C", "nu")
- nu_COPY_path = os.path.join(wc_dir, "A_COPY", "C", "nu")
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
+ nu_path = sbox.ospath('A/C/nu')
+ nu_COPY_path = sbox.ospath('A_COPY/C/nu')
+ A_COPY_path = sbox.ospath('A_COPY')
# r7 - Add the file A/C/nu
svntest.main.file_write(nu_path, "This is the file 'nu'.\n")
@@ -16418,7 +16501,7 @@ def subtree_merges_inherit_invalid_working_mergeinfo(sbox):
# resulting mergeinfo on 'A_COPY/C/nu' should be only '/A/C/nu:9'.
#
# Currently this test is marked as XFail because the resulting mergeinfo is
- # '/A/C/nu:3,9' and thus includes a non-existent path-rev.
+ # '/A/C/nu:3,7,9' and thus includes a non-existent path-rev.
svntest.actions.run_and_verify_svn(
"Merge failed unexpectedly",
svntest.verify.AnyOutput, [], 'merge', sbox.repo_url + '/A',
@@ -16447,11 +16530,12 @@ def merge_change_to_file_with_executable(sbox):
wc_dir = sbox.wc_dir
trunk_url = sbox.repo_url + '/A/B/E'
- alpha_path = os.path.join(wc_dir, "A", "B", "E", "alpha")
- beta_path = os.path.join(wc_dir, "A", "B", "E", "beta")
+ alpha_path = sbox.ospath('A/B/E/alpha')
+ beta_path = sbox.ospath('A/B/E/beta')
# Force one of the files to be a binary type
- svntest.actions.run_and_verify_svn(None, None, [],
+ svntest.actions.run_and_verify_svn2(None, None,
+ binary_mime_type_on_text_file_warning, 0,
'propset', 'svn:mime-type',
'application/octet-stream',
alpha_path)
@@ -16497,8 +16581,8 @@ def merge_change_to_file_with_executable(sbox):
sbox.repo_url + '/branch', wc_dir)
# Recalculate the paths
- alpha_path = os.path.join(wc_dir, "alpha")
- beta_path = os.path.join(wc_dir, "beta")
+ alpha_path = sbox.ospath('alpha')
+ beta_path = sbox.ospath('beta')
expected_output = wc.State(wc_dir, {
'beta' : Item(status='U '),
@@ -16564,7 +16648,7 @@ def dry_run_merge_conflicting_binary(sbox):
# Add a binary file to the project
theta_contents = open(os.path.join(sys.path[0], "theta.bin"), 'rb').read()
# Write PNG file data into 'A/theta'.
- theta_path = os.path.join(wc_dir, 'A', 'theta')
+ theta_path = sbox.ospath('A/theta')
svntest.main.file_write(theta_path, theta_contents, 'wb')
svntest.main.run_svn(None, 'add', theta_path)
@@ -16679,11 +16763,9 @@ def foreign_repos_prop_conflict(sbox):
# Now, merge the propchange to the *second* working copy.
expected_output = [' C %s\n' % (os.path.join(other_wc_dir,
- "A", "D", "G")),
- 'Summary of conflicts:\n',
- ' Property conflicts: 1\n',
- ]
- expected_output = expected_merge_output([[3]], expected_output, True)
+ "A", "D", "G"))]
+ expected_output = expected_merge_output([[3]], expected_output, True,
+ prop_conflicts=1)
svntest.actions.run_and_verify_svn(None,
expected_output,
[], 'merge', '-c3',
@@ -16691,20 +16773,153 @@ def foreign_repos_prop_conflict(sbox):
other_wc_dir)
#----------------------------------------------------------------------
+# Test for issue #3975 'adds with explicit mergeinfo don't get mergeinfo
+# describing merge which added them'
+@Issue(3975)
+@SkipUnless(server_has_mergeinfo)
+def merge_adds_subtree_with_mergeinfo(sbox):
+ "merge adds subtree with mergeinfo"
+
+ sbox.build()
+ os.chdir(sbox.wc_dir)
+ sbox.wc_dir = ''
+ wc_dir = sbox.wc_dir
+ wc_disk, wc_status = set_up_branch(sbox, False, 2)
+
+ A_path = sbox.ospath('A')
+ nu_path = sbox.ospath('A/C/nu')
+ nu_COPY_path = sbox.ospath('A_COPY/C/nu')
+ A_COPY2_path = sbox.ospath('A_COPY_2')
+
+ # r8 - Add the file A_COPY/C/nu.
+ svntest.main.file_write(nu_COPY_path, "This is the file 'nu'.\n")
+ svntest.actions.run_and_verify_svn(None, None, [], 'add', nu_COPY_path)
+ svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m',
+ 'Add a file on the A_COPY branch',
+ wc_dir)
+
+ # r9 - Cherry pick r8 from A_COPY to A.
+ svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+ svntest.actions.run_and_verify_svn(None, None, [], 'merge',
+ sbox.repo_url + '/A_COPY',
+ A_path, '-c8')
+ svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m',
+ 'Merge r8 from A_COPY to A', wc_dir)
+
+ # r10 - Make a modification to A_COPY/C/nu
+ svntest.main.file_append(nu_COPY_path,
+ "More work on the A_COPY branch.\n")
+ svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m',
+ 'Some work on the A_COPY branch', wc_dir)
+
+ # r9 - Cherry pick r10 from A_COPY/C/nu to A/C/nu. Make some
+ # changes to A/C/nu before committing the merge.
+ svntest.actions.run_and_verify_svn(None, None, [], 'merge',
+ sbox.repo_url + '/A_COPY/C/nu',
+ nu_path, '-c10')
+ svntest.main.file_append(nu_path, "A faux conflict resolution.\n")
+ svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m',
+ 'Merge r8 from A_COPY to A', wc_dir)
+
+ # Sync merge A to A_COPY_2
+ svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+ expected_output = wc.State(A_COPY2_path, {
+ 'B/E/beta' : Item(status='U '),
+ 'C/nu' : Item(status='A '),
+ 'D/G/rho' : Item(status='U '),
+ 'D/H/omega' : Item(status='U '),
+ 'D/H/psi' : Item(status='U '),
+ '' : Item(status=' U'),
+ })
+ expected_mergeinfo_output = wc.State(A_COPY2_path, {
+ '' : Item(status=' G'),
+ 'C/nu' : Item(status=' U'),
+ })
+ expected_elision_output = wc.State(A_COPY2_path, {
+ })
+ expected_status = wc.State(A_COPY2_path, {
+ '' : Item(status=' M'),
+ 'B' : Item(status=' '),
+ 'mu' : Item(status=' '),
+ 'B/E' : Item(status=' '),
+ 'B/E/alpha' : Item(status=' '),
+ 'B/E/beta' : Item(status='M '),
+ 'B/lambda' : Item(status=' '),
+ 'B/F' : Item(status=' '),
+ 'C' : Item(status=' '),
+ 'C/nu' : Item(status='A ', copied='+'),
+ 'D' : Item(status=' '),
+ 'D/G' : Item(status=' '),
+ 'D/G/pi' : Item(status=' '),
+ 'D/G/rho' : Item(status='M '),
+ 'D/G/tau' : Item(status=' '),
+ 'D/gamma' : Item(status=' '),
+ 'D/H' : Item(status=' '),
+ 'D/H/chi' : Item(status=' '),
+ 'D/H/psi' : Item(status='M '),
+ 'D/H/omega' : Item(status='M '),
+ })
+ expected_status.tweak(wc_rev=11)
+ expected_status.tweak('C/nu', wc_rev='-')
+ expected_disk = wc.State('', {
+ '' : Item(props={SVN_PROP_MERGEINFO : '/A:3-11\n/A_COPY:8'}),
+ 'B' : Item(),
+ 'mu' : Item("This is the file 'mu'.\n"),
+ 'B/E' : Item(),
+ 'B/E/alpha' : Item("This is the file 'alpha'.\n"),
+ 'B/E/beta' : Item("New content"),
+ 'B/lambda' : Item("This is the file 'lambda'.\n"),
+ 'B/F' : Item(),
+ 'C' : Item(),
+ # C/nu will pick up the mergeinfo A_COPY/C/nu:8 which is self-referential.
+ # This is issue #3668 'inheritance can result in self-referential
+ # mergeinfo', but we'll allow it in this test since issue #3668 is
+ # tested elsewhere and is not the point of *this* test.
+ 'C/nu' : Item("This is the file 'nu'.\n" \
+ "More work on the A_COPY branch.\n" \
+ "A faux conflict resolution.\n",
+ props={SVN_PROP_MERGEINFO :
+ '/A/C/nu:9-11\n/A_COPY/C/nu:8,10'}),
+ 'D' : Item(),
+ 'D/G' : Item(),
+ 'D/G/pi' : Item("This is the file 'pi'.\n"),
+ 'D/G/rho' : Item("New content"),
+ 'D/G/tau' : Item("This is the file 'tau'.\n"),
+ 'D/gamma' : Item("This is the file 'gamma'.\n"),
+ 'D/H' : Item(),
+ 'D/H/chi' : Item("This is the file 'chi'.\n"),
+ 'D/H/psi' : Item("New content"),
+ 'D/H/omega' : Item("New content"),
+ })
+ expected_skip = wc.State('.', { })
+ svntest.actions.run_and_verify_merge(A_COPY2_path, None, None,
+ sbox.repo_url + '/A', None,
+ expected_output,
+ expected_mergeinfo_output,
+ expected_elision_output,
+ expected_disk,
+ expected_status,
+ expected_skip,
+ None, None, None, None,
+ None, 1, False)
+
+#----------------------------------------------------------------------
# A test for issue #3978 'reverse merge which adds subtree fails'.
-@Issue(3978)
+@Issue(3978,4057)
@SkipUnless(server_has_mergeinfo)
def reverse_merge_adds_subtree(sbox):
"reverse merge adds subtree"
sbox.build()
+ os.chdir(sbox.wc_dir)
+ sbox.wc_dir = ''
wc_dir = sbox.wc_dir
wc_disk, wc_status = set_up_branch(sbox)
- A_path = os.path.join(wc_dir, 'A')
- chi_path = os.path.join(wc_dir, 'A', 'D', 'H', 'chi')
- A_COPY_path = os.path.join(wc_dir, 'A_COPY')
- H_COPY_path = os.path.join(wc_dir, 'A_COPY', 'D', 'H')
+ A_path = sbox.ospath('A')
+ chi_path = sbox.ospath('A/D/H/chi')
+ A_COPY_path = sbox.ospath('A_COPY')
+ H_COPY_path = sbox.ospath('A_COPY/D/H')
# r7 - Delete A\D\H\chi
svntest.actions.run_and_verify_svn(None, None, [], 'delete', chi_path)
@@ -16719,6 +16934,9 @@ def reverse_merge_adds_subtree(sbox):
'Cherry-pick r7 from A to A_COPY', wc_dir)
# r9 - File depth sync merge from A/D/H to A_COPY/D/H/
+ # This shallow merge does not create non-inheritable mergeinfo because of
+ # the issue #4057 fix; all subtrees affected by the diff are present, so
+ # non-inheritable mergeinfo is not required.
svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
svntest.actions.run_and_verify_svn(None, None, [], 'merge',
sbox.repo_url + '/A/D/H',
@@ -16756,7 +16974,6 @@ def reverse_merge_adds_subtree(sbox):
# ..\..\..\subversion\libsvn_subr\kitchensink.c:57: (apr_err=200022)
# svn: E200022: Negative revision number found parsing '-7'
svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
- svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
expected_output = wc.State(A_COPY_path, {
'D/H/chi' : Item(status='A '),
})
@@ -16805,12 +17022,10 @@ def reverse_merge_adds_subtree(sbox):
'D/G/rho' : Item("This is the file 'rho'.\n"),
'D/G/tau' : Item("This is the file 'tau'.\n"),
'D/gamma' : Item("This is the file 'gamma'.\n"),
- 'D/H' : Item(props={SVN_PROP_MERGEINFO : '/A/D/H:2-6*,8*'}),
+ 'D/H' : Item(props={SVN_PROP_MERGEINFO : '/A/D/H:2-6,8'}),
'D/H/chi' : Item("This is the file 'chi'.\n"),
- 'D/H/psi' : Item("New content",
- props={SVN_PROP_MERGEINFO : '/A/D/H/psi:2-8'}),
- 'D/H/omega' : Item("New content",
- props={SVN_PROP_MERGEINFO : '/A/D/H/omega:2-8'}),
+ 'D/H/psi' : Item("New content"),
+ 'D/H/omega' : Item("New content"),
})
expected_skip = wc.State('.', { })
svntest.actions.run_and_verify_merge(A_COPY_path, 7, 6,
@@ -16833,11 +17048,13 @@ def merged_deletion_causes_tree_conflict(sbox):
"merged deletion causes spurious tree conflict"
sbox.build()
+ os.chdir(sbox.wc_dir)
+ sbox.wc_dir = ''
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, 'A')
- psi_path = os.path.join(wc_dir, 'A', 'D', 'H', 'psi')
- H_branch_path = os.path.join(wc_dir, 'branch', 'D', 'H')
+ A_path = sbox.ospath('A')
+ psi_path = sbox.ospath('A/D/H/psi')
+ H_branch_path = sbox.ospath('branch/D/H')
# r2 - Set svn:eol-style native on A/D/H/psi
svntest.actions.run_and_verify_svn(None, None, [], 'ps', 'svn:eol-style',
@@ -16853,7 +17070,7 @@ def merged_deletion_causes_tree_conflict(sbox):
'-m', 'Copy ^/A to ^/branch')
svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
- # r4 - Delete A/D/H/psi
+ # r4 - Delete A/D/H/psi
svntest.actions.run_and_verify_svn(None, None, [], 'delete', psi_path)
svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m',
'Delete a a path with native eol-style',
@@ -16897,135 +17114,6 @@ def merged_deletion_causes_tree_conflict(sbox):
None, 1, False)
#----------------------------------------------------------------------
-# Test for issue #3975 'adds with explicit mergeinfo don't get mergeinfo
-# describing merge which added them'
-@Issue(3975)
-@SkipUnless(server_has_mergeinfo)
-def merge_adds_subtree_with_mergeinfo(sbox):
- "merge adds subtree with mergeinfo"
-
- sbox.build()
- wc_dir = sbox.wc_dir
- wc_disk, wc_status = set_up_branch(sbox, False, 2)
-
- A_path = os.path.join(wc_dir, 'A')
- nu_path = os.path.join(wc_dir, 'A', 'C', 'nu')
- nu_COPY_path = os.path.join(wc_dir, 'A_COPY', 'C', 'nu')
- A_COPY2_path = os.path.join(wc_dir, 'A_COPY_2')
-
- # r8 - Add the file A_COPY/C/nu.
- svntest.main.file_write(nu_COPY_path, "This is the file 'nu'.\n")
- svntest.actions.run_and_verify_svn(None, None, [], 'add', nu_COPY_path)
- svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m',
- 'Add a file on the A_COPY branch',
- wc_dir)
-
- # r9 - Cherry pick r8 from A_COPY to A.
- svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
- svntest.actions.run_and_verify_svn(None, None, [], 'merge',
- sbox.repo_url + '/A_COPY',
- A_path, '-c8')
- svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m',
- 'Merge r8 from A_COPY to A', wc_dir)
-
- # r10 - Make a modification to A_COPY/C/nu
- svntest.main.file_append(nu_COPY_path,
- "More work on the A_COPY branch.\n")
- svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m',
- 'Some work on the A_COPY branch', wc_dir)
-
- # r9 - Cherry pick r10 from A_COPY/C/nu to A/C/nu. Make some
- # changes to A/C/nu before committing the merge.
- svntest.actions.run_and_verify_svn(None, None, [], 'merge',
- sbox.repo_url + '/A_COPY/C/nu',
- nu_path, '-c10')
- svntest.main.file_append(nu_path, "A faux conflict resolution.\n")
- svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m',
- 'Merge r8 from A_COPY to A', wc_dir)
-
- # Sync merge A to A_COPY_2
- svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
- expected_output = wc.State(A_COPY2_path, {
- 'B/E/beta' : Item(status='U '),
- 'C/nu' : Item(status='A '),
- 'D/G/rho' : Item(status='U '),
- 'D/H/omega' : Item(status='U '),
- 'D/H/psi' : Item(status='U '),
- '' : Item(status=' U'),
- })
- expected_mergeinfo_output = wc.State(A_COPY2_path, {
- '' : Item(status=' G'),
- 'C/nu' : Item(status=' U'),
- })
- expected_elision_output = wc.State(A_COPY2_path, {
- })
- expected_status = wc.State(A_COPY2_path, {
- '' : Item(status=' M'),
- 'B' : Item(status=' '),
- 'mu' : Item(status=' '),
- 'B/E' : Item(status=' '),
- 'B/E/alpha' : Item(status=' '),
- 'B/E/beta' : Item(status='M '),
- 'B/lambda' : Item(status=' '),
- 'B/F' : Item(status=' '),
- 'C' : Item(status=' '),
- 'C/nu' : Item(status='A ', copied='+'),
- 'D' : Item(status=' '),
- 'D/G' : Item(status=' '),
- 'D/G/pi' : Item(status=' '),
- 'D/G/rho' : Item(status='M '),
- 'D/G/tau' : Item(status=' '),
- 'D/gamma' : Item(status=' '),
- 'D/H' : Item(status=' '),
- 'D/H/chi' : Item(status=' '),
- 'D/H/psi' : Item(status='M '),
- 'D/H/omega' : Item(status='M '),
- })
- expected_status.tweak(wc_rev=11)
- expected_status.tweak('C/nu', wc_rev='-')
- expected_disk = wc.State('', {
- '' : Item(props={SVN_PROP_MERGEINFO : '/A:3-11\n/A_COPY:8'}),
- 'B' : Item(),
- 'mu' : Item("This is the file 'mu'.\n"),
- 'B/E' : Item(),
- 'B/E/alpha' : Item("This is the file 'alpha'.\n"),
- 'B/E/beta' : Item("New content"),
- 'B/lambda' : Item("This is the file 'lambda'.\n"),
- 'B/F' : Item(),
- 'C' : Item(),
- # C/nu will pick up the mergeinfo A_COPY/C/nu:8 which is self-referential.
- # This is issue #3668 'inheritance can result in self-referential
- # mergeinfo', but we'll allow it in this test since issue #3668 is
- # tested elsewhere and is not the point of *this* test.
- 'C/nu' : Item("This is the file 'nu'.\n" \
- "More work on the A_COPY branch.\n" \
- "A faux conflict resolution.\n",
- props={SVN_PROP_MERGEINFO :
- '/A/C/nu:9-11\n/A_COPY/C/nu:8,10'}),
- 'D' : Item(),
- 'D/G' : Item(),
- 'D/G/pi' : Item("This is the file 'pi'.\n"),
- 'D/G/rho' : Item("New content"),
- 'D/G/tau' : Item("This is the file 'tau'.\n"),
- 'D/gamma' : Item("This is the file 'gamma'.\n"),
- 'D/H' : Item(),
- 'D/H/chi' : Item("This is the file 'chi'.\n"),
- 'D/H/psi' : Item("New content"),
- 'D/H/omega' : Item("New content"),
- })
- expected_skip = wc.State('.', { })
- svntest.actions.run_and_verify_merge(A_COPY2_path, None, None,
- sbox.repo_url + '/A', None,
- expected_output,
- expected_mergeinfo_output,
- expected_elision_output,
- expected_disk,
- expected_status,
- expected_skip,
- None, None, None, None,
- None, 1, False)
-
-#----------------------------------------------------------------------
# A test for issue #3976 'record-only merges which add new subtree mergeinfo
# don't record mergeinfo describing merge'.
@Issue(3976)
@@ -17034,12 +17122,14 @@ def record_only_merge_adds_new_subtree_mergeinfo(sbox):
"record only merge adds new subtree mergeinfo"
sbox.build()
+ os.chdir(sbox.wc_dir)
+ sbox.wc_dir = ''
wc_dir = sbox.wc_dir
wc_disk, wc_status = set_up_branch(sbox)
- psi_path = os.path.join(wc_dir, 'A', 'D', 'H', 'psi')
- psi_COPY_path = os.path.join(wc_dir, 'A_COPY', 'D', 'H', 'psi')
- H_COPY2_path = os.path.join(wc_dir, 'A_COPY_2', 'D', 'H')
+ psi_path = sbox.ospath('A/D/H/psi')
+ psi_COPY_path = sbox.ospath('A_COPY/D/H/psi')
+ H_COPY2_path = sbox.ospath('A_COPY_2/D/H')
# r7 - Copy ^/A_COPY to ^/A_COPY_2
svntest.actions.run_and_verify_svn(None, None, [],
@@ -17111,6 +17201,374 @@ def record_only_merge_adds_new_subtree_mergeinfo(sbox):
None, 1, False)
#----------------------------------------------------------------------
+# Setup helper for issue #4056 and issue #4057 tests.
+def noninheritable_mergeinfo_test_set_up(sbox):
+ '''Starting with standard greek tree, copy 'A' to 'branch' in r2 and
+ then made a file edit to A/B/lambda in r3.
+ Return (expected_output, expected_mergeinfo_output, expected_elision_output,
+ expected_status, expected_disk, expected_skip) for a merge of
+ r3 from ^/A/B to branch/B.'''
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ lambda_path = sbox.ospath('A/B/lambda')
+ B_branch_path = sbox.ospath('branch/B')
+
+ # r2 - Branch ^/A to ^/branch.
+ svntest.main.run_svn(None, 'copy', sbox.repo_url + '/A',
+ sbox.repo_url + '/branch', '-m', 'make a branch')
+
+ # r3 - Make an edit to A/B/lambda.
+ svntest.main.file_write(lambda_path, "trunk edit.\n")
+ svntest.main.run_svn(None, 'commit', '-m', 'file edit', wc_dir)
+ svntest.main.run_svn(None, 'up', wc_dir)
+
+ expected_output = wc.State(B_branch_path, {
+ 'lambda' : Item(status='U '),
+ })
+ expected_mergeinfo_output = wc.State(B_branch_path, {
+ '' : Item(status=' U'),
+ 'lambda' : Item(status=' U'),
+ })
+ expected_elision_output = wc.State(B_branch_path, {
+ 'lambda' : Item(status=' U'),
+ })
+ expected_status = wc.State(B_branch_path, {
+ '' : Item(status=' M'),
+ 'lambda' : Item(status='M '),
+ 'E' : Item(status=' '),
+ 'E/alpha' : Item(status=' '),
+ 'E/beta' : Item(status=' '),
+ 'F' : Item(status=' '),
+ })
+ expected_status.tweak(wc_rev='3')
+ expected_disk = wc.State('', {
+ '' : Item(props={SVN_PROP_MERGEINFO : '/A/B:3'}),
+ 'lambda' : Item("trunk edit.\n"),
+ 'E' : Item(),
+ 'E/alpha' : Item("This is the file 'alpha'.\n"),
+ 'E/beta' : Item("This is the file 'beta'.\n"),
+ 'F' : Item(),
+ })
+ expected_skip = wc.State(B_branch_path, {})
+
+ return expected_output, expected_mergeinfo_output, expected_elision_output, \
+ expected_status, expected_disk, expected_skip
+
+
+#----------------------------------------------------------------------
+# Test for issue #4056 "don't record non-inheritable mergeinfo if missing
+# subtrees are not touched by the full-depth diff".
+@Issue(4056)
+@SkipUnless(server_has_mergeinfo)
+def unnecessary_noninheritable_mergeinfo_missing_subtrees(sbox):
+ "missing subtrees untouched by infinite depth merge"
+
+ B_branch_path = sbox.ospath('branch/B')
+
+ # Setup a simple branch to which
+ expected_output, expected_mergeinfo_output, expected_elision_output, \
+ expected_status, expected_disk, expected_skip = \
+ noninheritable_mergeinfo_test_set_up(sbox)
+
+ # Create a shallow merge target; set depth of branch/B to files.
+ svntest.main.run_svn(None, 'up', '--set-depth=files', B_branch_path)
+ expected_status.remove('E', 'E/alpha', 'E/beta', 'F')
+ expected_disk.remove('E', 'E/alpha', 'E/beta', 'F')
+
+ # Merge r3 from ^/A/B to branch/B
+ #
+ # Merge is smart enough to realize that despite the shallow merge target,
+ # the diff can only affect branch/B/lambda, which is still present, so there
+ # is no need to record non-inheritable mergeinfo on the target
+ # or any subtree mergeinfo whatsoever:
+ #
+ # >svn pg svn:mergeinfo -vR
+ # Properties on 'branch\B':
+ # svn:mergeinfo
+ # /A/B:3 <-- Nothing was skipped, so doesn't need
+ # to be non-inheritable.
+ svntest.actions.run_and_verify_merge(B_branch_path,
+ '2', '3',
+ sbox.repo_url + '/A/B', None,
+ expected_output,
+ expected_mergeinfo_output,
+ expected_elision_output,
+ expected_disk,
+ expected_status,
+ expected_skip,
+ None, None, None, None, None, 1, 1,
+ B_branch_path)
+
+#----------------------------------------------------------------------
+# Test for issue #4057 "don't record non-inheritable mergeinfo in shallow
+# merge if entire diff is within requested depth".
+@Issue(4057)
+@SkipUnless(server_has_mergeinfo)
+def unnecessary_noninheritable_mergeinfo_shallow_merge(sbox):
+ "shallow merge reaches all necessary subtrees"
+
+ B_branch_path = sbox.ospath('branch/B')
+ E_path = sbox.ospath('A/B/E')
+
+ # Setup a simple branch to which
+ expected_output, expected_mergeinfo_output, expected_elision_output, \
+ expected_status, expected_disk, expected_skip = \
+ noninheritable_mergeinfo_test_set_up(sbox)
+
+ # Merge r3 from ^/A/B to branch/B at operational depth=files
+ #
+ # Previously this failed because merge wasn't smart enough to
+ # realize that despite being a shallow merge, the diff can
+ # only affect branch/B/lambda, which is within the specified
+ # depth, so there is no need to record non-inheritable mergeinfo
+ # or subtree mergeinfo:
+ #
+ # >svn pg svn:mergeinfo -vR
+ # Properties on 'branch\B':
+ # svn:mergeinfo
+ # /A/B:3* <-- Should be inheritable
+ # Properties on 'branch\B\lambda':
+ # svn:mergeinfo
+ # /A/B/lambda:3 <-- Not necessary
+ expected_skip = wc.State(B_branch_path, {})
+ svntest.actions.run_and_verify_merge(B_branch_path, '2', '3',
+ sbox.repo_url + '/A/B', None,
+ expected_output,
+ expected_mergeinfo_output,
+ expected_elision_output,
+ expected_disk,
+ expected_status,
+ expected_skip,
+ None, None, None, None, None, 1, 1,
+ '--depth', 'files', B_branch_path)
+
+ # Revert the merge and then make a prop change to A/B/E in r4.
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'revert', '--recursive', sbox.wc_dir)
+ svntest.actions.run_and_verify_svn(None,
+ ["property 'prop:name' set on '" +
+ E_path + "'\n"], [], 'ps',
+ 'prop:name', 'propval', E_path)
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'ci', '-m', 'A new property on a dir',
+ sbox.wc_dir)
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'up', sbox.wc_dir)
+
+ # Merge r4 from ^/A/B to branch/B at operational depth=immediates
+ #
+ # Previously this failed because the mergetracking logic didn't realize
+ # that despite being a shallow merge, the diff only affected branch/B/E,
+ # which was within the specified depth, so there was no need to record
+ # non-inheritable mergeinfo or subtree mergeinfo:
+ #
+ # >svn pg svn:mergeinfo -vR
+ # Properties on 'branch\B':
+ # svn:mergeinfo
+ # /A/B:4* <-- Should be inheritable
+ # Properties on 'branch\B\E':
+ # svn:mergeinfo
+ # /A/B/E:4 <-- Not necessary
+ expected_output = wc.State(B_branch_path, {
+ 'E' : Item(status=' U'),
+ })
+ expected_mergeinfo_output = wc.State(B_branch_path, {
+ '' : Item(status=' U'),
+ 'E' : Item(status=' U'),
+ })
+ expected_elision_output = wc.State(B_branch_path, {
+ 'E' : Item(status=' U'),
+ })
+ expected_status = wc.State(B_branch_path, {
+ '' : Item(status=' M'),
+ 'lambda' : Item(status=' '),
+ 'E' : Item(status=' M'),
+ 'E/alpha' : Item(status=' '),
+ 'E/beta' : Item(status=' '),
+ 'F' : Item(status=' '),
+ })
+ expected_status.tweak(wc_rev='4')
+ expected_disk = wc.State('', {
+ '' : Item(props={SVN_PROP_MERGEINFO : '/A/B:4'}),
+ 'lambda' : Item("This is the file 'lambda'.\n"),
+ 'E' : Item(props={'prop:name' : 'propval'}),
+ 'E/alpha' : Item("This is the file 'alpha'.\n"),
+ 'E/beta' : Item("This is the file 'beta'.\n"),
+ 'F' : Item(),
+ })
+ svntest.actions.run_and_verify_merge(B_branch_path, '3', '4',
+ sbox.repo_url + '/A/B', None,
+ expected_output,
+ expected_mergeinfo_output,
+ expected_elision_output,
+ expected_disk,
+ expected_status,
+ expected_skip,
+ None, None, None, None, None, 1, 1,
+ '--depth', 'immediates', B_branch_path)
+
+#----------------------------------------------------------------------
+# Test for issue #4132, "merge of replaced source asserts".
+# The original use-case is the following merges, which both asserted:
+# svn merge -cr1295005 ^/subversion/trunk@1295000 ../src
+# svn merge -cr1295004 ^/subversion/trunk/@r1295004 ../src
+@Issue(4132)
+def svnmucc_abuse_1(sbox):
+ "svnmucc: merge a replacement"
+
+ sbox.build()
+ os.chdir(sbox.wc_dir)
+ sbox.wc_dir = ''
+ wc_dir = sbox.wc_dir
+
+ ## Using A/ as our trunk, since one cannot replace the root.
+
+ ## r2: open a branch
+ sbox.simple_repo_copy('A', 'A_COPY')
+
+ ## r3: padding (to make the revnums-mod-10 match)
+ sbox.simple_repo_copy('iota', 'padding')
+
+ ## r4: trunk: accidental change
+ sbox.simple_append('A/mu', 'accidental change')
+ sbox.simple_commit()
+
+ ## r5: fail to revert it
+ svntest.actions.run_and_verify_svnmucc(None, None, [],
+ '-m', 'r5',
+ '-U', sbox.repo_url,
+ 'rm', 'A',
+ 'cp', 'HEAD', 'A', 'A')
+
+ ## r6: really revert it
+ svntest.actions.run_and_verify_svnmucc(None, None, [],
+ '-m', 'r6',
+ '-U', sbox.repo_url,
+ 'rm', 'A',
+ 'cp', '3', 'A', 'A')
+
+ ## Attempt to merge that.
+ # This used to assert:
+ # --- Recording mergeinfo for merge of r5 into \
+ # 'svn-test-work/working_copies/merge_tests-125/A_COPY':
+ # subversion/libsvn_subr/mergeinfo.c:1172: (apr_err=235000)
+ # svn: E235000: In file 'subversion/libsvn_subr/mergeinfo.c' \
+ # line 1172: assertion failed (IS_VALID_FORWARD_RANGE(first))
+ #
+ # Then, prior to the fix asserted this way:
+ #
+ # >svn merge -c5 ^/A@r5 A_COPY
+ # subversion\libsvn_client\merge.c:4871: (apr_err=235000)
+ # svn: E235000: In file 'subversion\libsvn_client\merge.c'
+ # line 4871: assertion failed (*gap_start < *gap_end)
+ sbox.simple_update()
+ svntest.main.run_svn(None, 'merge', '-c', 'r5', '^/A@r5',
+ sbox.ospath('A_COPY'))
+
+#----------------------------------------------------------------------
+# Test for issue #4138 'replacement in merge source not notified correctly'.
+@SkipUnless(server_has_mergeinfo)
+@Issue(4138)
+def merge_source_with_replacement(sbox):
+ "replacement in merge source not notified correctly"
+
+ sbox.build()
+ os.chdir(sbox.wc_dir)
+ sbox.wc_dir = ''
+ wc_dir = sbox.wc_dir
+
+ # Some paths we'll care about.
+ A_path = sbox.ospath('A')
+ omega_path = sbox.ospath('A/D/H/omega')
+ A_COPY_path = sbox.ospath('A_COPY')
+ beta_COPY_path = sbox.ospath('A_COPY/B/E/beta')
+ psi_COPY_path = sbox.ospath('A_COPY/D/H/psi')
+ rho_COPY_path = sbox.ospath('A_COPY/D/G/rho')
+ omega_COPY_path = sbox.ospath('A_COPY/D/H/omega')
+
+ # branch A@1 to A_COPY in r2, then make a few edits under A in r3-6:
+ wc_disk, wc_status = set_up_branch(sbox)
+
+ # r7 Delete A, replace it with A@5, effectively reverting the change
+ # made to A/D/H/omega in r6:
+ svntest.main.run_svn(None, 'up', wc_dir)
+ svntest.main.run_svn(None, 'del', A_path)
+ svntest.main.run_svn(None, 'copy', sbox.repo_url + '/A@5', A_path)
+ svntest.main.run_svn(None, 'ci', '-m',
+ 'Replace A with older version of itself', wc_dir)
+
+ # r8: Make an edit to A/D/H/omega:
+ svntest.main.file_write(omega_path, "New content for 'omega'.\n")
+ svntest.main.run_svn(None, 'ci', '-m', 'file edit', wc_dir)
+
+ # Update and sync merge ^/A to A_COPY.
+ #
+ # text text text text text
+ # edit edit edit edit edit
+ # psi rho beta omega omega
+ # A@r1---r3----r4----r5----r6---X r7---r8--------->
+ # | | ^ |
+ # | v | |
+ # | +---replacement---+ |
+ # copy |
+ # | sync-merge
+ # | |
+ # v v
+ # r2---A_COPY----------------------------------------->
+ svntest.main.run_svn(None, 'up', wc_dir)
+ # This test previously failed because the merge notifications make it look
+ # like r6 from ^/A was merged and recorded:
+ #
+ # >svn merge ^^/A A_COPY
+ # --- Merging r2 through r5 into 'A_COPY':
+ # U A_COPY\B\E\beta
+ # U A_COPY\D\G\rho
+ # U A_COPY\D\H\psi
+ # --- Recording mergeinfo for merge of r2 through r5 into 'A_COPY':
+ # U A_COPY
+ # --- Merging r6 through r8 into 'A_COPY':
+ # U A_COPY\D\H\omega
+ # --- Recording mergeinfo for merge of r6 through r8 into 'A_COPY':
+ # G A_COPY
+ expected_output = expected_merge_output(
+ [[2,5],[7,8]],
+ ['U ' + beta_COPY_path + '\n',
+ 'U ' + rho_COPY_path + '\n',
+ 'U ' + omega_COPY_path + '\n',
+ 'U ' + psi_COPY_path + '\n',
+ ' U ' + A_COPY_path + '\n',
+ ' G ' + A_COPY_path + '\n',])
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'merge', sbox.repo_url + '/A',
+ A_COPY_path)
+
+ # Misleading notifications are one thing, incorrect mergeinfo is quite
+ # another.
+ svntest.actions.run_and_verify_svn(None,
+ [A_COPY_path + ' - /A:2-5,7-8\n'],
+ [], 'pg', SVN_PROP_MERGEINFO,
+ '-R', A_COPY_path)
+
+ # Commit the above merge and then reverse merge it. Again r6 is not
+ # being merged and should not be part of the notifications.
+ sbox.simple_commit()
+ sbox.simple_update()
+ expected_output = expected_merge_output(
+ [[5,2],[8,7]],
+ ['U ' + beta_COPY_path + '\n',
+ 'U ' + rho_COPY_path + '\n',
+ 'U ' + omega_COPY_path + '\n',
+ 'U ' + psi_COPY_path + '\n',
+ ' U ' + A_COPY_path + '\n',
+ ' G ' + A_COPY_path + '\n',],
+ elides=True)
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'merge', sbox.repo_url + '/A',
+ A_COPY_path, '-r8:1')
+
+#----------------------------------------------------------------------
# Test for issue #4144 'Reverse merge with replace in source applies
# diffs in forward order'.
@SkipUnless(server_has_mergeinfo)
@@ -17119,18 +17577,20 @@ def reverse_merge_with_rename(sbox):
"reverse merge applies revs in reverse order"
sbox.build()
+ os.chdir(sbox.wc_dir)
+ sbox.wc_dir = ''
wc_dir = sbox.wc_dir
# Some paths we'll care about.
- A_path = os.path.join(sbox.wc_dir, 'A')
- omega_path = os.path.join(sbox.wc_dir, 'trunk', 'D', 'H', 'omega')
- A_COPY_path = os.path.join(sbox.wc_dir, 'A_COPY')
- beta_COPY_path = os.path.join(sbox.wc_dir, 'A_COPY', 'B', 'E', 'beta')
- psi_COPY_path = os.path.join(sbox.wc_dir, 'A_COPY', 'D', 'H', 'psi')
- rho_COPY_path = os.path.join(sbox.wc_dir, 'A_COPY', 'D', 'G', 'rho')
- omega_COPY_path = os.path.join(sbox.wc_dir, 'A_COPY', 'D', 'H', 'omega')
-
- # branch A@1 to A_COPY in r2, then make a few edits under A in r3-6:
+ A_path = sbox.ospath('A')
+ omega_path = sbox.ospath('trunk/D/H/omega')
+ A_COPY_path = sbox.ospath('A_COPY')
+ beta_COPY_path = sbox.ospath('A_COPY/B/E/beta')
+ psi_COPY_path = sbox.ospath('A_COPY/D/H/psi')
+ rho_COPY_path = sbox.ospath('A_COPY/D/G/rho')
+ omega_COPY_path = sbox.ospath('A_COPY/D/H/omega')
+
+ # branch A@1 to A_COPY in r2, then make a few edits under A in r3-6:
wc_disk, wc_status = set_up_branch(sbox)
# r7 - Rename ^/A to ^/trunk.
@@ -17201,15 +17661,17 @@ def reverse_merge_with_rename(sbox):
def merge_adds_then_deletes_subtree(sbox):
"merge adds then deletes subtree"
- # Some paths we'll care about.
- A_path = os.path.join(sbox.wc_dir, 'A')
- nu_path = os.path.join(sbox.wc_dir, 'A', 'C', 'nu')
- C_branch_path = os.path.join(sbox.wc_dir, 'branch', 'C')
- nu_branch_path = os.path.join(sbox.wc_dir, 'branch', 'C', 'nu')
-
sbox.build()
+ os.chdir(sbox.wc_dir)
+ sbox.wc_dir = ''
wc_dir = sbox.wc_dir
+ # Some paths we'll care about.
+ A_path = sbox.ospath('A')
+ nu_path = sbox.ospath('A/C/nu')
+ C_branch_path = sbox.ospath('branch/C')
+ nu_branch_path = sbox.ospath('branch/C/nu')
+
# Make a branch.
svntest.actions.run_and_verify_svn(None, None, [], 'copy',
sbox.repo_url + '/A',
@@ -17271,19 +17733,21 @@ def merge_adds_then_deletes_subtree(sbox):
def merge_with_added_subtrees_with_mergeinfo(sbox):
"merge with added subtrees with mergeinfo"
- # Some paths we'll care about.
- A_path = os.path.join(sbox.wc_dir, 'A')
- Y_path = os.path.join(sbox.wc_dir, 'A', 'C', 'X', 'Y')
- Z_path = os.path.join(sbox.wc_dir, 'A', 'C', 'X', 'Y', 'Z')
- nu_path = os.path.join(sbox.wc_dir, 'A', 'C', 'X', 'Y', 'Z', 'nu')
- A_COPY_path = os.path.join(sbox.wc_dir, 'A_COPY')
- Y_COPY_path = os.path.join(sbox.wc_dir, 'A_COPY', 'C', 'X', 'Y')
- W_COPY_path = os.path.join(sbox.wc_dir, 'A_COPY', 'C', 'X', 'Y', 'Z', 'W')
- A_COPY2_path = os.path.join(sbox.wc_dir, 'A_COPY_2')
-
sbox.build()
+ os.chdir(sbox.wc_dir)
+ sbox.wc_dir = ''
wc_dir = sbox.wc_dir
+ # Some paths we'll care about.
+ A_path = sbox.ospath('A')
+ Y_path = sbox.ospath('A/C/X/Y')
+ Z_path = sbox.ospath('A/C/X/Y/Z')
+ nu_path = sbox.ospath('A/C/X/Y/Z/nu')
+ A_COPY_path = sbox.ospath('A_COPY')
+ Y_COPY_path = sbox.ospath('A_COPY/C/X/Y')
+ W_COPY_path = sbox.ospath('A_COPY/C/X/Y/Z/W')
+ A_COPY2_path = sbox.ospath('A_COPY_2')
+
# Make two branches of ^/A and then make a few edits under A in r4-7:
wc_disk, wc_status = set_up_branch(sbox, nbr_of_branches=2)
@@ -17341,7 +17805,7 @@ def merge_with_added_subtrees_with_mergeinfo(sbox):
# vvvvvvvvvvvvvvvvvvvv
# U A_COPY_2\C\X\Y\Z
# ^^^^^^^^^^^^^^^^^^^^
- #
+ #
# >svn pl -vR A_COPY_2
# Properties on 'A_COPY_2':
# svn:mergeinfo
@@ -17370,8 +17834,8 @@ def merge_with_added_subtrees_with_mergeinfo(sbox):
})
expected_mergeinfo_output = wc.State(A_COPY2_path, {
'' : Item(status=' U'),
- 'C/X/Y' : Item(status=' G'), # Added with explicit mergeinfo so mergeinfo
- }) # describing the merge shows as mer'G'ed.
+ 'C/X/Y' : Item(status=' U'), # Added with explicit mergeinfo
+ })
expected_elision_output = wc.State(A_COPY2_path, {
})
expected_status = wc.State(A_COPY2_path, {
@@ -17438,6 +17902,1400 @@ def merge_with_added_subtrees_with_mergeinfo(sbox):
None, None, None, None,
None, 1, 0)
+#----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
+def merge_with_externals_with_mergeinfo(sbox):
+ "merge with externals with mergeinfo"
+
+ sbox.build()
+ os.chdir(sbox.wc_dir)
+ sbox.wc_dir = ''
+ wc_dir = sbox.wc_dir
+
+ # Some paths we'll care about.
+ A_path = sbox.ospath('A')
+ A_COPY_path = sbox.ospath('A_COPY')
+ file_external_path = sbox.ospath('A/file-external')
+ mu_COPY_path = sbox.ospath('A_COPY/mu')
+ mu_path = sbox.ospath('A/mu')
+
+ # Make a branch of ^/A and then make a few edits under A in r3-6:
+ wc_disk, wc_status = set_up_branch(sbox)
+
+ svntest.main.file_write(mu_COPY_path, "branch edit")
+ svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m',
+ 'file edit on the branch', wc_dir)
+ svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+
+ # Create a file external under 'A' and set some bogus mergeinfo
+ # on it (the fact that this mergeinfo is bogus has no bearing on
+ # this test).
+ svntest.actions.run_and_verify_svn(None, None, [], 'propset',
+ 'svn:externals',
+ '^/iota file-external', A_path)
+ svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m',
+ 'set file external', wc_dir)
+ svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+ svntest.actions.run_and_verify_svn(None, None, [], 'ps', SVN_PROP_MERGEINFO,
+ "/bogus-mergeinfo:5", file_external_path)
+ svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m',
+ 'set mergeinfo on file external',
+ file_external_path)
+
+ # Sync merge ^/A to A_COPY and then reintegrate A_COPY back to A.
+ svntest.actions.run_and_verify_svn(None, None, [], 'merge',
+ sbox.repo_url + '/A', A_COPY_path)
+ svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m',
+ 'sync merge', wc_dir)
+ # This was segfaulting, see
+ # http://svn.haxx.se/dev/archive-2012-10/0364.shtml
+ svntest.actions.run_and_verify_svn(
+ None,
+ expected_merge_output(None,
+ ['U ' + mu_path + '\n',
+ ' U ' + A_path + '\n'],
+ two_url=True),
+ [], 'merge', '--reintegrate', sbox.repo_url + '/A_COPY',
+ A_path)
+
+#----------------------------------------------------------------------
+# Test merging 'binary' files with keyword expansion enabled.
+# Tests issue #4221 'Trivial merge of a binary file with svn:keywords
+# raises a conflict', among other cases.
+@SkipUnless(server_has_mergeinfo)
+@Issue(4221)
+def merge_binary_file_with_keywords(sbox):
+ "merge binary file with keywords"
+
+ sbox.build()
+ os.chdir(sbox.wc_dir)
+ sbox.wc_dir = ''
+
+ # Some binary files, and some binary files that will become text files.
+ # 'mod_src' means a content change on the branch (the merge source);
+ # 'mod_tgt' means a content change on the original (the merge target);
+ # 'to_txt' means svn:mime-type removed on the branch (the merge source).
+ file_mod_both = 'A/B/E/alpha'
+ file_mod_src = 'A/D/G/pi'
+ file_mod_tgt = 'A/D/G/rho'
+ file_mod_none = 'A/D/G/tau'
+ file_mod_both_to_txt = 'A/B/E/beta'
+ file_mod_src_to_txt = 'A/D/H/chi'
+ file_mod_tgt_to_txt = 'A/D/H/psi'
+ file_mod_none_to_txt = 'A/D/H/omega'
+ files_bin = [ file_mod_both, file_mod_src, file_mod_tgt, file_mod_none ]
+ files_txt = [ file_mod_both_to_txt, file_mod_src_to_txt,
+ file_mod_tgt_to_txt, file_mod_none_to_txt ]
+ files = files_bin + files_txt
+
+ # make some 'binary' files with keyword expansion enabled
+ for f in files:
+ svntest.main.file_append(sbox.ospath(f), "With $Revision: $ keyword.\n")
+ svntest.main.run_svn(binary_mime_type_on_text_file_warning,
+ 'propset', 'svn:mime-type',
+ 'application/octet-stream', sbox.ospath(f))
+ sbox.simple_propset('svn:keywords', 'Revision', f)
+ sbox.simple_commit()
+
+ # branch the files
+ sbox.simple_repo_copy('A', 'A2')
+ sbox.simple_update()
+
+ # Modify the branched (source) and/or original (target) versions. Remove
+ # the svn:mime-type from the 'to_txt' files on the branch.
+ # The original bug in issue #4221 gave a conflict if we modified either
+ # version or neither (using a single-file merge test case).
+ for f in [ file_mod_both, file_mod_both_to_txt,
+ file_mod_src, file_mod_src_to_txt ]:
+ f_branch = 'A2' + f[1:]
+ svntest.main.file_append(sbox.ospath(f_branch), "Incoming mod.\n")
+ for f in [ file_mod_both, file_mod_both_to_txt,
+ file_mod_tgt, file_mod_tgt_to_txt ]:
+ svntest.main.file_append(sbox.ospath(f), "Mod on merge target.\n")
+ for f in files_txt:
+ f_branch = 'A2' + f[1:]
+ sbox.simple_propdel('svn:mime-type', f_branch)
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ # merge back
+ svntest.actions.run_and_verify_svn(
+ None,
+ expected_merge_output([[3,4]],
+ ['C ' + sbox.ospath(file_mod_both) + '\n',
+ 'U ' + sbox.ospath(file_mod_src) + '\n',
+ #' ' + sbox.ospath(file_mod_tgt) + '\n',
+ #' ' + sbox.ospath(file_mod_none) + '\n',
+ 'CU ' + sbox.ospath(file_mod_both_to_txt) + '\n',
+ 'UU ' + sbox.ospath(file_mod_src_to_txt) + '\n',
+ ' U ' + sbox.ospath(file_mod_tgt_to_txt) + '\n',
+ ' U ' + sbox.ospath(file_mod_none_to_txt) + '\n',
+ ' U A\n'],
+ text_conflicts=2),
+ [], 'merge', '^/A2', 'A')
+
+#----------------------------------------------------------------------
+# Test for issue #4155 'Merge conflict text of expanded keyword incorrect
+# when svn:keyword property value removed'. Failed in 1.7.0 through 1.7.8.
+@SkipUnless(server_has_mergeinfo)
+@Issue(4155)
+def merge_conflict_when_keywords_removed(sbox):
+ "merge conflict when keywords removed"
+
+ sbox.build()
+ os.chdir(sbox.wc_dir)
+ sbox.wc_dir = ''
+
+ # make a file with keyword expansion enabled
+ svntest.main.file_write('A/keyfile', "$Date$ $Revision$\n")
+ sbox.simple_add('A/keyfile')
+ sbox.simple_propset('svn:keywords', 'Date Revision', 'A/keyfile')
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ # branch the file
+ sbox.simple_repo_copy('A', 'A2')
+ sbox.simple_update()
+
+ #
+ svntest.main.file_append('A/keyfile', " some changes\n")
+ sbox.simple_commit()
+
+ # sync merge
+ svntest.actions.run_and_verify_svn(
+ None,
+ expected_merge_output([[3,4]],
+ ['U '+ sbox.ospath('A2/keyfile') + '\n',
+ ' U A2\n']),
+ [], 'merge', '^/A', 'A2')
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ # modify the original version: disable those KW & enable 'Id'
+ sbox.simple_propset('svn:keywords', 'Id', 'A/keyfile')
+ svntest.main.file_append('A/keyfile', "$Id$\n")
+ sbox.simple_commit()
+
+ # sync merge again
+ svntest.actions.run_and_verify_svn(
+ None,
+ expected_merge_output([[5,6]],
+ ['UU ' + sbox.ospath('A2/keyfile') + '\n',
+ ' U A2\n']),
+ [], 'merge', '--accept=postpone', '^/A', 'A2')
+
+@SkipUnless(server_has_mergeinfo)
+@Issue(4139, 3274, 3503)
+def merge_target_selection(sbox):
+ "merge target selection handling"
+
+ sbox.build()
+ os.chdir(sbox.wc_dir)
+ sbox.wc_dir = ''
+
+ # r2
+ sbox.simple_mkdir('dir')
+ sbox.simple_add_text('\1\2\3\4\5', 'dir/binary-file')
+ sbox.simple_add_text('abcde', 'dir/text-file')
+ sbox.simple_commit()
+
+ # r3
+ sbox.simple_copy('dir', 'branch')
+ sbox.simple_commit()
+
+ # r4
+ svntest.main.file_write(sbox.ospath('dir/binary-file'),
+ '\9\8\7\6\5\4\3\2\1')
+ sbox.simple_commit()
+
+ sbox.simple_update()
+
+ os.chdir(sbox.ospath('branch'))
+
+ # Merge the directory (no target)
+ expected_output = [
+ '--- Merging r4 into \'.\':\n',
+ 'U binary-file\n',
+ '--- Recording mergeinfo for merge of r4 into \'.\':\n',
+ ' U .\n',
+ ]
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'merge', '^/dir', '-c', '4')
+
+ svntest.main.run_svn(None, 'revert', '-R', '.')
+
+ # Merge the file (no target)
+ expected_output = [
+ '--- Merging r4 into \'binary-file\':\n',
+ 'U binary-file\n',
+ '--- Recording mergeinfo for merge of r4 into \'binary-file\':\n',
+ ' U binary-file\n',
+ ]
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'merge', '^/dir/binary-file', '-c', '4')
+
+ svntest.main.run_svn(None, 'revert', '-R', '.')
+
+ # Merge the directory (explicit target)
+ expected_output = [
+ '--- Merging r4 into \'.\':\n',
+ 'U binary-file\n',
+ '--- Recording mergeinfo for merge of r4 into \'.\':\n',
+ ' U .\n',
+ ]
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'merge', '^/dir', '-c', '4', '.')
+
+ svntest.main.run_svn(None, 'revert', '-R', '.')
+
+ # Merge the file (explicit target)
+ expected_output = [
+ '--- Merging r4 into \'binary-file\':\n',
+ 'U binary-file\n',
+ '--- Recording mergeinfo for merge of r4 into \'binary-file\':\n',
+ ' U binary-file\n',
+ ]
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'merge', '^/dir/binary-file', '-c', '4', 'binary-file')
+
+ svntest.main.run_svn(None, 'revert', '-R', '.')
+
+ # Merge the file (wrong target)
+ expected_output = [
+ '--- Merging r4 into \'.\':\n',
+ ' C .\n',
+ '--- Recording mergeinfo for merge of r4 into \'.\':\n',
+ ' U .\n',
+ ] + svntest.main.summary_of_conflicts(tree_conflicts=1)
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'merge', '^/dir/binary-file', '-c', '4', '.')
+
+ svntest.main.run_svn(None, 'revert', '-R', '.')
+
+ # Merge the dir (wrong target)
+ expected_output = [
+ '--- Merging r4 into \'binary-file\':\n',
+ ' C %s\n' % os.path.join('binary-file'),
+ '--- Recording mergeinfo for merge of r4 into \'binary-file\':\n',
+ ' U binary-file\n',
+ ] + svntest.main.summary_of_conflicts(tree_conflicts=1)
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'merge', '^/dir', '-c', '4', 'binary-file')
+
+@Issue(3405)
+def merge_properties_on_adds(sbox):
+ "merged directory properties are added"
+
+ sbox.build()
+ os.chdir(sbox.wc_dir)
+ sbox.wc_dir = ''
+
+ sbox.simple_copy('A/D/G', 'G')
+
+ sbox.simple_mkdir('A/D/G/M')
+ sbox.simple_mkdir('A/D/G/M/N')
+ sbox.simple_add_text('QQ', 'A/D/G/file', 'A/D/G/M/file')
+ sbox.simple_propset('key', 'value',
+ 'A/D/G/M', 'A/D/G/file', 'A/D/G/M/N', 'A/D/G/M/file')
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'merge', '^/A/D/G', sbox.ospath('G'))
+
+ expected_output = svntest.verify.UnorderedOutput([
+ 'Properties on \'%s\':\n' % sbox.ospath('G'),
+ ' svn:mergeinfo\n',
+ 'Properties on \'%s\':\n' % sbox.ospath('G/M'),
+ ' key\n',
+ 'Properties on \'%s\':\n' % sbox.ospath('G/file'),
+ ' key\n',
+ 'Properties on \'%s\':\n' % sbox.ospath('G/M/N'),
+ ' key\n',
+ 'Properties on \'%s\':\n' % sbox.ospath('G/M/file'),
+ ' key\n',
+ ])
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'proplist', '-R', sbox.ospath('G'))
+
+ expected_output = svntest.verify.UnorderedOutput([
+ 'Properties on \'%s\':\n' % sbox.ospath('G/M'),
+ ' key\n',
+ 'Properties on \'%s\':\n' % sbox.ospath('G/file'),
+ ' key\n',
+ 'Properties on \'%s\':\n' % sbox.ospath('G/M/N'),
+ ' key\n',
+ 'Properties on \'%s\':\n' % sbox.ospath('G/M/file'),
+ ' key\n',
+ ])
+
+ # I merged the tree, which should include history but only the files have
+ # the properties stored in PRISTINE. All directories have the properties
+ # as local changes in ACTUAL.
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'proplist', '-R', sbox.ospath('G'),
+ '-r', 'BASE')
+
+ # Note that this is not a regression. This has been the case since 1.0.
+ # ### We just made status, update and merge handle this without users
+ # ### knowing about this limitation.
+
+ # ### My guess is that the base merge support on svn_wc_merge_props()
+ # ### was originally designed to resolve this problem, but I can't
+ # ### find a released version where this was actually implemented.
+
+ # For fun, also check the status: 'svn status' suppresses the M from AM.
+
+ # G = sbox.ospath('G')
+ #
+ # expected_status = wc.State('G', {
+ # '' : Item(status=' M', wc_rev='2'),
+ # 'pi' : Item(status=' ', wc_rev='2'),
+ # 'tau' : Item(status=' ', wc_rev='2'),
+ # 'file' : Item(status='A ', copied='+', wc_rev='-'), # Copied, no changes
+ # 'M' : Item(status='A ', copied='+', wc_rev='-'), # Copied, changes
+ # 'M/file' : Item(status=' ', copied='+', wc_rev='-'), # Copied, no changes
+ # 'M/N' : Item(status=' M', copied='+', wc_rev='-'), # Local changes
+ # 'rho' : Item(status=' ', wc_rev='2'),
+ # })
+ # svntest.actions.run_and_verify_status(G, expected_status)
+
+
+# ======================================================================
+# Functions for parsing mergeinfo
+
+def parse_changes_list(changes_string):
+ """Parse a string containing a list of revision numbers in the form
+ of the '--change' command-line argument (e.g. '1,3,-5,7-10').
+ Return a list of elements of the form [[1], [3], [-5], [7,10]].
+ """
+ rev_ranges = []
+ for rr in changes_string.split(','):
+ if '-' in rr[1:]:
+ revs = rr.split('-')
+ rev_ranges.append([int(revs[0]), int(revs[1])])
+ else:
+ rev_ranges.append([int(rr)])
+ return rev_ranges
+
+def parse_rev_args(arg_list):
+ """Return a list of [rX:rY] or [rZ] elements representing ARG_LIST
+ whose elements are strings in the form '-rX:Y' or '-cZ,X-Y,...'.
+ """
+ rev_ranges = []
+ for arg in arg_list:
+ kind = arg[:2]
+ val = arg[2:]
+ if kind == '-r':
+ if ':' in val:
+ revs = map(int, val.split(':'))
+ if revs[0] < revs[1]:
+ rev_ranges.append([revs[0] + 1, revs[1]])
+ else:
+ rev_ranges.append([revs[0], revs[1] + 1])
+ else:
+ rev_ranges.append([int(val)])
+ elif kind == '-c':
+ rev_ranges.extend(parse_changes_list(val))
+ else:
+ raise ValueError("revision arg '" + arg + "' in '" + arg_list +
+ "' does not start with -r or -c")
+ return rev_ranges
+
+class RangeList(list):
+ """Represents of a list of revision ranges, as a list of one- or
+ two-element lists, each of the form [X] meaning "--revision (X-1):X"
+ or [X,Y] meaning "--revision (X-1):Y".
+ """
+ def __init__(self, arg):
+ """
+ """
+ self.as_given = arg
+ if isinstance(arg, str):
+ list.__init__(self, parse_changes_list(arg))
+ elif isinstance(arg, list):
+ list.__init__(self, parse_rev_args(arg))
+ else:
+ raise ValueError("RangeList needs a string or a list, not '" + str(arg) + "'")
+
+def expected_merge_output2(tgt_ospath,
+ recorded_ranges,
+ merged_ranges=None,
+ prop_conflicts=0,
+ prop_resolved=0):
+ """Return an ExpectedOutput instance corresponding to the expected
+ output of a merge into TGT_OSPATH, with one 'recording
+ mergeinfo...' notification per specified revision range in
+ RECORDED_RANGES and one 'merging...' notification per revision
+ range in MERGED_RANGES.
+
+ RECORDED_RANGES is a mergeinfo-string or a RangeList.
+
+ MERGED_RANGES is a list of mergeinfo-strings or a list of
+ RangeLists. If None, it means [[r] for r in RECORDED_RANGES].
+ """
+ # Convert RECORDED_RANGES to a RangeList.
+ if isinstance(recorded_ranges, str):
+ recorded_ranges = RangeList(recorded_ranges)
+ # Convert MERGED_RANGES to a list of RangeLists.
+ if merged_ranges is None:
+ merged_ranges = [[r] for r in recorded_ranges]
+ elif len(merged_ranges) > 0 and isinstance(merged_ranges[0], str):
+ # List of mergeinfo-strings => list of rangelists
+ merged_ranges = [RangeList(r) for r in merged_ranges]
+
+ status_letters_re = (prop_conflicts or prop_resolved) and ' [UC]' or ' U'
+ status_letters_mi = ' [UG]'
+ lines = []
+ for i, rr in enumerate(recorded_ranges):
+ # Merging ...
+ for sr in merged_ranges[i]:
+ revstart = sr[0]
+ revend = len(sr) > 1 and sr[1] or None
+ lines += [svntest.main.merge_notify_line(revstart, revend,
+ target=tgt_ospath)]
+ lines += [status_letters_re + ' ' + re.escape(tgt_ospath) + '\n']
+ # Recording mergeinfo ...
+ revstart = rr[0]
+ revend = len(rr) > 1 and rr[1] or None
+ lines += [svntest.main.mergeinfo_notify_line(revstart, revend,
+ target=tgt_ospath)]
+ lines += [status_letters_mi + ' ' + re.escape(tgt_ospath) + '\n']
+
+ # Summary of conflicts
+ lines += svntest.main.summary_of_conflicts(prop_conflicts=prop_conflicts,
+ prop_resolved=prop_resolved,
+ as_regex=True)
+
+ # The 'match_all=False' is because we also expect some
+ # 'Resolved conflicted state of ...' lines.
+ return RegexListOutput(lines, match_all=False)
+
+def expected_out_and_err(tgt_ospath,
+ recorded_ranges,
+ merged_ranges=None,
+ prop_conflicts=0,
+ prop_resolved=0,
+ expect_error=True):
+ """Return a tuple (expected_out, expected_err) giving the expected
+ output and expected error output for a merge into TGT_OSPATH. See
+ expected_merge_output2() for details of RECORDED_RANGES and
+ MERGED_RANGES and PROP_CONFLICTS. EXPECT_ERROR should be true iff
+ we expect the merge to abort with an error about conflicts being
+ raised.
+ """
+ expected_out = expected_merge_output2(tgt_ospath, recorded_ranges,
+ merged_ranges,
+ prop_conflicts, prop_resolved)
+ if expect_error:
+ expected_err = RegexListOutput([
+ '^svn: E155015: .* conflicts were produced .* into$',
+ "^'.*" + re.escape(tgt_ospath) + "' --$",
+ '^resolve all conflicts .* remaining$',
+ '^unmerged revisions$'],
+ match_all=False)
+ else:
+ expected_err = []
+
+ return expected_out, expected_err
+
+def check_mergeinfo(expected_mergeinfo, tgt_ospath):
+ """Read the mergeinfo on TGT_OSPATH; verify that it matches
+ EXPECTED_MERGEINFO (list of lines).
+ """
+ svntest.actions.run_and_verify_svn(
+ None, expected_mergeinfo, [], 'pg', SVN_PROP_MERGEINFO, tgt_ospath)
+
+def simple_merge(src_path, tgt_ospath, rev_args):
+ """Merge from ^/SRC_PATH to TGT_OSPATH using revision arguments REV_ARGS
+ (list of '-r...' or '-c...' strings); expect a single-target merge
+ with no conflicts or errors.
+ """
+ rev_ranges = RangeList(rev_args)
+
+ expected_out = expected_merge_output(rev_ranges,
+ [' U ' + tgt_ospath + '\n',
+ ' [UG] ' + tgt_ospath + '\n'],
+ target=tgt_ospath)
+ src_url = '^/' + src_path
+ svntest.actions.run_and_verify_svn(
+ None, expected_out, [],
+ 'merge', src_url, tgt_ospath, '--accept', 'postpone', *rev_args)
+
+@SkipUnless(server_has_mergeinfo)
+@Issue(4306)
+# Test for issue #4306 'multiple editor drive file merges record wrong
+# mergeinfo during conflicts'
+def conflict_aborted_mergeinfo_described_partial_merge(sbox):
+ "conflicted split merge can be repeated"
+
+ sbox.build()
+ os.chdir(sbox.wc_dir)
+ sbox.wc_dir = ''
+
+ trunk = 'A'
+ branch = 'A2'
+ file = 'mu'
+ dir = 'B'
+ trunk_file = 'A/mu'
+ trunk_dir = 'A/B'
+
+ # r2: initial state
+ for rev in range(4, 11):
+ sbox.simple_propset('prop-' + str(rev), 'Old pval ' + str(rev),
+ trunk_file, trunk_dir)
+ sbox.simple_commit()
+
+ # r3: branch
+ sbox.simple_copy(trunk, branch)
+ sbox.simple_commit()
+
+ zero_rev = 3
+
+ def edit_file_or_dir(path, rev, val):
+ """Make a local edit to the file at PATH."""
+ sbox.simple_propset('prop-' + str(rev), val + ' pval ' + str(rev), path)
+
+ # r4 through r10: simple edits
+ for rev in range(4, 11):
+ edit_file_or_dir(trunk_file, rev, 'Edited')
+ edit_file_or_dir(trunk_dir, rev, 'Edited')
+ sbox.simple_commit()
+
+ # r14: merge some changes to the branch so that later merges will be split
+ svntest.actions.run_and_verify_svn(None, None, [], 'merge', '-c5,9',
+ '^/' + trunk, sbox.ospath(branch),
+ '--accept', 'theirs-conflict')
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ def revert_branch():
+ svntest.actions.run_and_verify_svn(None, None, [], 'revert', '-R',
+ sbox.ospath(branch))
+
+ def try_merge(relpath, conflict_rev, rev_args,
+ expected_out_err, expected_mi):
+ """Revert RELPATH in the branch; make a change that will conflict
+ with CONFLICT_REV if not None; merge RELPATH in the trunk
+ to RELPATH in the branch using revision arguments REV_ARGS (list of
+ '-r...' or '-c...' strings).
+
+ EXPECTED_OUT_ERR_MI is a tuple: (expected_out, expected_err,
+ expected_mi). EXPECTED_OUT and EXPECTED_ERR are instances of
+ ExpectedOutput.
+
+ Expect to find mergeinfo EXPECTED_MI if not None. EXPECTED_MI is
+ a single mergeinfo-string.
+ """
+ src_path = trunk + '/' + relpath
+ tgt_path = branch + '/' + relpath
+ tgt_ospath = sbox.ospath(tgt_path)
+
+ expected_out, expected_err = expected_out_err
+
+ revert_branch()
+
+ # Arrange for the merge to conflict at CONFLICT_REV.
+ if conflict_rev:
+ edit_file_or_dir(tgt_path, conflict_rev, 'Conflict')
+
+ src_url = '^/' + src_path
+ svntest.actions.run_and_verify_svn(
+ None, expected_out, expected_err,
+ 'merge', src_url, tgt_ospath, '--accept', 'postpone',
+ *rev_args)
+
+ if expected_mi is not None:
+ expected_mergeinfo = ['/' + src_path + ':' + expected_mi + '\n']
+ check_mergeinfo(expected_mergeinfo, tgt_ospath)
+
+ # In a mergeinfo-aware merge, each specified revision range is split
+ # internally into sub-ranges, to avoid any already-merged revisions.
+ #
+ # From white-box inspection, we see there are code paths that treat
+ # the last specified range and the last sub-range specially. The
+ # first specified range or sub-range is not treated specially in terms
+ # of the code paths, although it might be in terms of data flow.
+ #
+ # We test merges that raise a conflict in the first and last sub-range
+ # of the first and last specified range.
+
+ for target in [file, dir]:
+
+ tgt_ospath = sbox.ospath(branch + '/' + target)
+
+ # First test: Merge "everything" to the branch.
+ #
+ # This merge is split into three sub-ranges: r3-4, r6-8, r10-head.
+ # We have arranged that the merge will raise a conflict in the first
+ # sub-range. Since we are postponing conflict resolution, the merge
+ # should stop after the first sub-range, allowing us to resolve and
+ # repeat the merge at which point the next sub-range(s) can be merged.
+ # The mergeinfo on the target then should only reflect that the first
+ # sub-range (r3-4) has been merged.
+ #
+ # Previously the merge failed after merging only r3-4 (as it should)
+ # but mergeinfo for the whole range was recorded, preventing subsequent
+ # repeat merges from applying the rest of the source changes.
+ expect = expected_out_and_err(tgt_ospath,
+ '3-4', ['3-4'],
+ prop_conflicts=1)
+ try_merge(target, 4, [], expect, '3-5,9')
+
+ # Try a multiple-range merge that raises a conflict in the
+ # first sub-range in the first specified range;
+ expect = expected_out_and_err(tgt_ospath,
+ '4', ['4'],
+ prop_conflicts=1)
+ try_merge(target, 4, ['-c4-6,8-10'], expect, '4-5,9')
+ # last sub-range in the first specified range;
+ expect = expected_out_and_err(tgt_ospath,
+ '4-6', ['4,6'],
+ prop_conflicts=1)
+ try_merge(target, 6, ['-c4-6,8-10'], expect, '4-6,9')
+ # first sub-range in the last specified range;
+ expect = expected_out_and_err(tgt_ospath,
+ '4-6,8', ['4,6', '8'],
+ prop_conflicts=1)
+ try_merge(target, 8, ['-c4-6,8-10'], expect, '4-6,8-9')
+ # last sub-range in the last specified range.
+ # (Expect no error, because 'svn merge' does not throw an error if
+ # there is no more merging to do when a conflict occurs.)
+ expect = expected_out_and_err(tgt_ospath,
+ '4-6,8-10', ['4,6', '8,10'],
+ prop_conflicts=1, expect_error=False)
+ try_merge(target, 10, ['-c4-6,8-10'], expect, '4-6,8-10')
+
+ # Try similar merges but involving ranges in reverse order.
+ expect = expected_out_and_err(tgt_ospath,
+ '8', ['8'],
+ prop_conflicts=1)
+ try_merge(target, 8, ['-c8-10,4-6'], expect, '5,8-9')
+ expect = expected_out_and_err(tgt_ospath,
+ '8-10', ['8,10'],
+ prop_conflicts=1)
+ try_merge(target, 10, ['-c8-10,4-6'], expect, '5,8-10')
+ expect = expected_out_and_err(tgt_ospath,
+ '8-10,4', ['8,10', '4'],
+ prop_conflicts=1)
+ try_merge(target, 4, ['-c8-10,4-6'], expect, '4-5,8-10')
+ expect = expected_out_and_err(tgt_ospath,
+ '8-10,4-6', ['8,10', '4,6'],
+ prop_conflicts=1, expect_error=False)
+ try_merge(target, 6, ['-c8-10,4-6'], expect, '4-6,8-10')
+
+ # Try some reverse merges, with ranges in forward and reverse order.
+ #
+ # Reverse merges start with all source changes merged except 5 and 9.
+ revert_branch()
+ simple_merge(trunk + '/' + target, sbox.ospath(branch + '/' + target),
+ ['-c-5,-9,4,6-8,10'])
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ expect = expected_out_and_err(tgt_ospath,
+ '6-4,10-8', ['-6,-4', '-10,-8'],
+ expect_error=False)
+ try_merge(target, None, ['-r6:3', '-r10:7'], expect, '7')
+ expect = expected_out_and_err(tgt_ospath,
+ '-6', ['-6'],
+ prop_conflicts=1)
+ try_merge(target, 6, ['-r6:3', '-r10:7'], expect, '4,7-8,10')
+ expect = expected_out_and_err(tgt_ospath,
+ '6-4', ['-6,-4'],
+ prop_conflicts=1)
+ try_merge(target, 4, ['-r6:3', '-r10:7'], expect, '7-8,10')
+ expect = expected_out_and_err(tgt_ospath,
+ '6-4,-10', ['-6,-4', '-10'],
+ prop_conflicts=1)
+ try_merge(target, 10, ['-r6:3', '-r10:7'], expect, '7-8')
+ expect = expected_out_and_err(tgt_ospath,
+ '6-4,10-8', ['-6,-4', '-10,-8'],
+ prop_conflicts=1, expect_error=False)
+ try_merge(target, 8, ['-r6:3', '-r10:7'], expect, '7')
+
+@SkipUnless(server_has_mergeinfo)
+@Issue(4310)
+# Test for issue #4310 "each editor drive gets its own notification
+# during 'svn merge'"
+def multiple_editor_drive_merge_notifications(sbox):
+ "each editor drive gets its own notification"
+
+ sbox.build()
+ os.chdir(sbox.wc_dir)
+ sbox.wc_dir = ''
+
+ iota_branch_path = sbox.ospath('iota-copy')
+ C_branch_path = sbox.ospath('branch')
+
+ # Branch a file and a directory:
+
+ # r2
+ sbox.simple_copy('iota', 'iota-copy')
+ sbox.simple_commit()
+
+ # r3
+ sbox.simple_copy('A/C', 'branch')
+ sbox.simple_commit()
+
+ # r4-8 - Set five non-conflicting properties on the branch parents.
+ for i in range(0,5):
+ sbox.simple_propset('foo' + str(i) , 'bar', 'iota')
+ sbox.simple_propset('foo' + str(i) , 'bar', 'A/C')
+ sbox.simple_commit()
+
+ # Cherry pick merge r5 and r6 to each branch and commit.
+ svntest.actions.run_and_verify_svn(None, None, [], 'merge', '^/iota',
+ '-c', '5,7', iota_branch_path)
+ svntest.actions.run_and_verify_svn(None, None, [], 'merge', '^/A/C',
+ '-c', '5,7', C_branch_path)
+ sbox.simple_commit()
+
+ # Now auto merge all eligible revisions to each branch.
+ # First the directory target:
+ #
+ # TODO: We don't use run_and_verify_merge here because it has limitations
+ # re checking the merge notification headers -- which need to be improved
+ # at some point.
+ svntest.actions.run_and_verify_svn(
+ None,
+ ["--- Merging r2 through r4 into '" + C_branch_path + "':\n",
+ " U " + C_branch_path + "\n",
+ "--- Merging r6 into '" + C_branch_path + "':\n",
+ " U " + C_branch_path + "\n",
+ "--- Merging r8 through r9 into '" + C_branch_path + "':\n",
+ " U " + C_branch_path + "\n",
+ "--- Recording mergeinfo for merge of r2 through r9 into '" +
+ C_branch_path + "':\n",
+ " U " + C_branch_path + "\n"],
+ [], 'merge', sbox.repo_url + '/A/C', C_branch_path)
+
+ # Then the file target:
+ # Previously this failed because only the first range notification was
+ # printed:
+ #
+ # >svn merge ^/iota iota-copy
+ # --- Merging r2 through r4 into 'iota-copy':
+ # U iota-copy
+ # U iota-copy
+ # U iota-copy
+ # --- Recording mergeinfo for merge of r2 through r9 into 'iota-copy':
+ # U iota-copy
+ #
+ # This is what we expect:
+ #
+ # --- Merging r2 through r4 into 'iota-copy':
+ # U iota-copy
+ # --- Merging r6 into 'iota-copy': <-- 2nd editor drive
+ # U iota-copy
+ # --- Merging r8 through r9 into 'iota-copy': <-- 3rd editor drive
+ # U iota-copy
+ # --- Recording mergeinfo for merge of r2 through r9 into 'iota-copy':
+ # U iota-copy
+ svntest.actions.run_and_verify_svn(
+ None,
+ ["--- Merging r2 through r4 into '" + iota_branch_path + "':\n",
+ " U " + iota_branch_path + "\n",
+ "--- Merging r6 into '" + iota_branch_path + "':\n",
+ " U " + iota_branch_path + "\n",
+ "--- Merging r8 through r9 into '" + iota_branch_path + "':\n",
+ " U " + iota_branch_path + "\n",
+ "--- Recording mergeinfo for merge of r2 through r9 into '" +
+ iota_branch_path + "':\n",
+ " U " + iota_branch_path + "\n"],
+ [], 'merge', sbox.repo_url + '/iota', iota_branch_path)
+
+#----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
+@Issue(4317)
+# Test for issue #4317 "redundant notifications in single editor drive merge".
+def single_editor_drive_merge_notifications(sbox):
+ "single editor drive merge notifications"
+ sbox.build()
+ os.chdir(sbox.wc_dir)
+ sbox.wc_dir = ''
+ wc_dir = sbox.wc_dir
+
+ A_copy_path = sbox.ospath('A_COPY')
+ D_copy_path = sbox.ospath('A_COPY/D')
+ psi_copy_path = sbox.ospath('A_COPY/D/H/psi')
+ omega_copy_path = sbox.ospath('A_COPY/D/H/omega')
+ beta_copy_path = sbox.ospath('A_COPY/B/E/beta')
+
+ # r2 - r6: Copy A to A_COPY and then make some text changes under A.
+ set_up_branch(sbox)
+
+ # r7 - Subtree merge
+ svntest.actions.run_and_verify_svn(None, None, [], 'merge', '^/A/D',
+ '-c4', D_copy_path)
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ # Previously this failed because of redundant merge notifications
+ # for r4-7:
+ #
+ # >svn merge ^/A A_COPY
+ # --- Merging r2 through r3 into 'A_COPY\D':
+ # U A_COPY\D\H\psi
+ # --- Merging r5 through r7 into 'A_COPY\D':
+ # U A_COPY\D\H\omega
+ # --- Merging r4 through r7 into 'A_COPY':
+ # U A_COPY\B\E\beta
+ # --- Recording mergeinfo for merge of r2 through r7 into 'A_COPY':
+ # U A_COPY
+ # --- Recording mergeinfo for merge of r2 through r7 into 'A_COPY\D':
+ # U A_COPY\D
+ # --- Eliding mergeinfo from 'A_COPY\D':
+ # U A_COPY\D
+ #
+ # The order of 'beta' and 'omega' can vary, so use UnorderedOutput. This
+ # raises the possibility that the test could spuriously pass if the 'U'pdate
+ # notifications aren't grouped with the correct headers, but that's not what
+ # is being tested here.
+ expected_output = svntest.verify.UnorderedOutput(
+ ["--- Merging r2 through r3 into '" + A_copy_path + "':\n",
+ "U " + psi_copy_path + "\n",
+ "--- Merging r4 through r7 into '" + A_copy_path + "':\n",
+ "U " + omega_copy_path + "\n",
+ "U " + beta_copy_path + "\n",
+ "--- Recording mergeinfo for merge of r2 through r7 into '" +
+ A_copy_path + "':\n",
+ " U " + A_copy_path + "\n",
+ "--- Recording mergeinfo for merge of r2 through r7 into '" +
+ D_copy_path + "':\n",
+ " U " + D_copy_path + "\n",
+ "--- Eliding mergeinfo from '" + D_copy_path + "':\n",
+ " U " + D_copy_path + "\n"])
+ svntest.actions.run_and_verify_svn(None, expected_output, [], 'merge',
+ sbox.repo_url + '/A', A_copy_path)
+
+ # r8 and r9 - Commit and do reverse subtree merge.
+ sbox.simple_commit()
+ sbox.simple_update()
+ svntest.actions.run_and_verify_svn(None, None, [], 'merge', '^/A/D',
+ '-c-4', D_copy_path)
+ sbox.simple_commit()
+
+ # Now try a reverse merge. There should only be one notification for
+ # r7-5:
+ sbox.simple_update()
+ expected_output = svntest.verify.UnorderedOutput(
+ ["--- Reverse-merging r7 through r5 into '" + A_copy_path + "':\n",
+ "U " + beta_copy_path + "\n",
+ "U " + omega_copy_path + "\n",
+ "--- Reverse-merging r4 through r3 into '" + A_copy_path + "':\n",
+ "U " + psi_copy_path + "\n",
+ "--- Recording mergeinfo for reverse merge of r7 through r3 into '" +
+ A_copy_path + "':\n",
+ " U " + A_copy_path + "\n",
+ "--- Recording mergeinfo for reverse merge of r7 through r3 into '" +
+ D_copy_path + "':\n",
+ " U " + D_copy_path + "\n",
+ "--- Eliding mergeinfo from '" + D_copy_path + "':\n",
+ " U " + D_copy_path + "\n"])
+ svntest.actions.run_and_verify_svn(None, expected_output, [], 'merge',
+ '-r9:2', sbox.repo_url + '/A',
+ A_copy_path)
+
+@SkipUnless(server_has_mergeinfo)
+@Issue(4316) # 'Merge errors out after resolving conflicts'
+# Very similar to conflict_aborted_mergeinfo_described_partial_merge()
+# (test number 135), except here we tell the merge to resolve the
+# conflicts that are generated part way through a multi-revision-range
+# merge, and we expect it to continue with the rest of the merge.
+def conflicted_split_merge_with_resolve(sbox):
+ "conflicted split merge with resolve"
+
+ sbox.build()
+ os.chdir(sbox.wc_dir)
+ sbox.wc_dir = ''
+
+ trunk = 'A'
+ branch = 'A2'
+ file = 'mu'
+ dir = 'B'
+ trunk_file = 'A/mu'
+ trunk_dir = 'A/B'
+
+ # r2: initial state
+ for rev in range(4, 11):
+ sbox.simple_propset('prop-' + str(rev), 'Old pval ' + str(rev),
+ trunk_file, trunk_dir)
+ sbox.simple_commit()
+
+ # r3: branch
+ sbox.simple_update()
+ sbox.simple_copy(trunk, branch)
+ sbox.simple_commit()
+
+ zero_rev = 3
+
+ def edit_file_or_dir(path, rev, val):
+ """Make a local edit to the file at PATH."""
+ sbox.simple_propset('prop-' + str(rev), val + ' pval ' + str(rev), path)
+
+ # r4 through r10: simple edits
+ for rev in range(4, 11):
+ edit_file_or_dir(trunk_file, rev, 'Edited')
+ edit_file_or_dir(trunk_dir, rev, 'Edited')
+ sbox.simple_commit()
+
+ # r14: merge some changes to the branch so that later merges will be split
+ svntest.actions.run_and_verify_svn(None, None, [], 'merge', '-c5,9',
+ '^/' + trunk, sbox.ospath(branch),
+ '--accept', 'theirs-conflict')
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ def revert_branch():
+ svntest.actions.run_and_verify_svn(None, None, [], 'revert', '-R',
+ sbox.ospath(branch))
+
+ def try_merge(relpath, conflict_rev, rev_args,
+ expected_out_err, expected_mi):
+ """Revert RELPATH in the branch; make a change that will conflict
+ with CONFLICT_REV if not None; merge RELPATH in the trunk
+ to RELPATH in the branch using revision arguments REV_ARGS (list of
+ '-r...' or '-c...' strings).
+
+ EXPECTED_OUT_ERR_MI is a tuple: (expected_out, expected_err,
+ expected_mi). EXPECTED_OUT and EXPECTED_ERR are instances of
+ ExpectedOutput.
+
+ Expect to find mergeinfo EXPECTED_MI if not None. EXPECTED_MI is
+ a single mergeinfo-string.
+ """
+ src_path = trunk + '/' + relpath
+ tgt_path = branch + '/' + relpath
+ tgt_ospath = sbox.ospath(tgt_path)
+
+ expected_out, expected_err = expected_out_err
+
+ revert_branch()
+
+ # Arrange for the merge to conflict at CONFLICT_REV.
+ if conflict_rev:
+ edit_file_or_dir(tgt_path, conflict_rev, 'Conflict')
+
+ src_url = '^/' + src_path + '@11'
+ svntest.actions.run_and_verify_svn(
+ None, expected_out, expected_err,
+ 'merge', src_url, tgt_ospath, '--accept', 'mine-full',
+ *rev_args)
+
+ if expected_mi is not None:
+ expected_mergeinfo = ['/' + src_path + ':' + expected_mi + '\n']
+ check_mergeinfo(expected_mergeinfo, tgt_ospath)
+
+ # In a mergeinfo-aware merge, each specified revision range is split
+ # internally into sub-ranges, to avoid any already-merged revisions.
+ #
+ # From white-box inspection, we see there are code paths that treat
+ # the last specified range and the last sub-range specially. The
+ # first specified range or sub-range is not treated specially in terms
+ # of the code paths, although it might be in terms of data flow.
+ #
+ # We test merges that raise a conflict in the first and last sub-range
+ # of the first and last specified range.
+
+ for target in [file, dir]:
+
+ tgt_ospath = sbox.ospath(branch + '/' + target)
+
+ # First test: Merge "everything" to the branch.
+ #
+ # This merge is split into three sub-ranges: r3-4, r6-8, r10-head.
+ # We have arranged that the merge will raise a conflict in the first
+ # sub-range. Since we are postponing conflict resolution, the merge
+ # should stop after the first sub-range, allowing us to resolve and
+ # repeat the merge at which point the next sub-range(s) can be merged.
+ # The mergeinfo on the target then should only reflect that the first
+ # sub-range (r3-4) has been merged.
+ expect = expected_out_and_err(tgt_ospath,
+ '3-4,6-11',
+ ['3-4', '6-8,10-11'],
+ prop_resolved=1, expect_error=False)
+ try_merge(target, 4, [], expect, '3-11')
+
+ # Try a multiple-range merge that raises a conflict in the
+ # first sub-range in the first specified range;
+ expect = expected_out_and_err(tgt_ospath,
+ '4,6,8-10',
+ ['4', '6', '8,10'],
+ prop_resolved=1, expect_error=False)
+ try_merge(target, 4, ['-c4-6,8-10'], expect, '4-6,8-10')
+ # last sub-range in the first specified range;
+ expect = expected_out_and_err(tgt_ospath,
+ '4-6,8-10', ['4,6', '8,10'],
+ prop_resolved=1, expect_error=False)
+ try_merge(target, 6, ['-c4-6,8-10'], expect, '4-6,8-10')
+ # first sub-range in the last specified range;
+ expect = expected_out_and_err(tgt_ospath,
+ '4-6,8,10',
+ ['4,6', '8', '10'],
+ prop_resolved=1, expect_error=False)
+ try_merge(target, 8, ['-c4-6,8-10'], expect, '4-6,8-10')
+ # last sub-range in the last specified range.
+ # (Expect no error, because 'svn merge' does not throw an error if
+ # there is no more merging to do when a conflict occurs.)
+ expect = expected_out_and_err(tgt_ospath,
+ '4-6,8-10', ['4,6', '8,10'],
+ prop_resolved=1, expect_error=False)
+ try_merge(target, 10, ['-c4-6,8-10'], expect, '4-6,8-10')
+
+ # Try similar merges but involving ranges in reverse order.
+ expect = expected_out_and_err(tgt_ospath,
+ '8', ['8'],
+ prop_resolved=1, expect_error=False)
+ try_merge(target, 8, ['-c8-10,4-6'], expect, '4-6,8-10')
+ expect = expected_out_and_err(tgt_ospath,
+ '8-10', ['8,10'],
+ prop_resolved=1, expect_error=False)
+ try_merge(target, 10, ['-c8-10,4-6'], expect, '4-6,8-10')
+ expect = expected_out_and_err(tgt_ospath,
+ '8-10,4', ['8,10', '4'],
+ prop_resolved=1, expect_error=False)
+ try_merge(target, 4, ['-c8-10,4-6'], expect, '4-6,8-10')
+ expect = expected_out_and_err(tgt_ospath,
+ '8-10,4-6', ['8,10', '4,6'],
+ prop_resolved=1, expect_error=False)
+ try_merge(target, 6, ['-c8-10,4-6'], expect, '4-6,8-10')
+
+ # Try some reverse merges, with ranges in forward and reverse order.
+ #
+ # Reverse merges start with all source changes merged except 5 and 9.
+ revert_branch()
+ simple_merge(trunk + '/' + target, sbox.ospath(branch + '/' + target),
+ ['-c-5,-9,4,6-8,10'])
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ expect = expected_out_and_err(tgt_ospath,
+ '6-4,10-8', ['-6,-4', '-10,-8'],
+ expect_error=False)
+ try_merge(target, None, ['-r6:3', '-r10:7'], expect, '7')
+ expect = expected_out_and_err(tgt_ospath,
+ '-6,-4,10-8',
+ ['-6', '-4', '-10,-8'],
+ prop_resolved=1, expect_error=False)
+ try_merge(target, 6, ['-r6:3', '-r10:7'], expect, '7')
+ expect = expected_out_and_err(tgt_ospath,
+ '6-4,10-8', ['-6,-4', '-10,-8'],
+ prop_resolved=1, expect_error=False)
+ try_merge(target, 4, ['-r6:3', '-r10:7'], expect, '7')
+ expect = expected_out_and_err(tgt_ospath,
+ '6-4,-10,-8',
+ ['-6,-4', '-10', '-8'],
+ prop_resolved=1, expect_error=False)
+ try_merge(target, 10, ['-r6:3', '-r10:7'], expect, '7')
+ expect = expected_out_and_err(tgt_ospath,
+ '6-4,10-8', ['-6,-4', '-10,-8'],
+ prop_resolved=1, expect_error=False)
+ try_merge(target, 8, ['-r6:3', '-r10:7'], expect, '7')
+
+#----------------------------------------------------------------------
+# Test for issue 4367 'merge to shallow WC, repeat merge to infinite
+# depth WC is broken'.
+@SkipUnless(server_has_mergeinfo)
+@Issues(4367)
+def merge_to_empty_target_merge_to_infinite_target(sbox):
+ "repeat merge to infinite depth WC conflicts"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ wc_disk, wc_status = set_up_branch(sbox, branch_only=True)
+ A_COPY_path = sbox.ospath('A_COPY')
+ C_COPY_path = sbox.ospath('A_COPY/C')
+ E_path = sbox.ospath('A/B/E')
+ J_path = sbox.ospath('A/C/J')
+ K_path = sbox.ospath('A/C/J/K')
+ nu1_path = sbox.ospath('A/C/J/nu1')
+ nu2_path = sbox.ospath('A/C/J/K/nu2')
+ L_path = sbox.ospath('A/B/L')
+ nu3_path = sbox.ospath('A/B/L/nu3')
+
+ B1_path = sbox.ospath('A/B/B1')
+ B1a_path = sbox.ospath('A/B/B1/B1a')
+ test1_path = sbox.ospath('A/B/B1/test.txt')
+ test2_path = sbox.ospath('A/B/B1/B1a/test.txt')
+
+ C1_path = sbox.ospath('A/C/C1')
+ test3_path = sbox.ospath('A/C/C1/test.txt')
+
+ # r3 - Add some subtrees:
+ # A /A/B/B1
+ # A /A/B/B1/B1a
+ # A /A/B/B1/B1a/test.txt
+ # A /A/B/B1/test.txt
+ svntest.main.run_svn(None, 'mkdir', B1_path)
+ svntest.main.run_svn(None, 'mkdir', B1a_path)
+ svntest.main.file_append(test1_path, "New file.\n")
+ svntest.main.file_append(test2_path, "New file.\n")
+ svntest.main.run_svn(None, 'add', test1_path, test2_path)
+ sbox.simple_commit()
+
+ # r4 - Add some another subtree.
+ # A /A/C/C1
+ # A /A/C/C1/test.txt
+ svntest.main.run_svn(None, 'mkdir', C1_path)
+ svntest.main.file_append(test3_path, "New file.\n")
+ svntest.main.run_svn(None, 'add', test3_path)
+ sbox.simple_commit()
+
+ # r5 - Delete part of the subtree added in r3.
+ # D /A/B/B1/B1a
+ svntest.main.run_svn(None, 'del', B1a_path)
+ sbox.simple_commit()
+
+ # r6 - Set depth of A_COPY to empty, merge all available revs from ^/A.
+ svntest.actions.run_and_verify_svn(None, None, [], 'up',
+ '--set-depth=empty', A_COPY_path)
+ svntest.actions.run_and_verify_svn(None, None, [], 'up',
+ '--set-depth=infinity', C_COPY_path)
+ svntest.actions.run_and_verify_svn(None, None, [], 'merge', '^/A',
+ A_COPY_path)
+ sbox.simple_commit()
+
+ # Update A_COPY back to depth infinity and retry the prior merge.
+ svntest.actions.run_and_verify_svn(None, None, [], 'up',
+ '--set-depth=infinity', A_COPY_path)
+
+ expected_output = wc.State(A_COPY_path, {
+ 'B/B1' : Item(status='A '),
+ 'B/B1/test.txt' : Item(status='A '),
+ 'B/B1/B1a' : Item(status='D ', prev_status='A '),
+ 'B/B1/B1a/test.txt' : Item(status='A '),
+ })
+ expected_mergeinfo_output = wc.State(A_COPY_path, {
+ '' : Item(status=' U'),
+ 'B' : Item(status=' G'),
+ })
+ expected_elision_output = wc.State(A_COPY_path, {
+ 'B' : Item(status=' U'),
+ })
+ expected_status = wc.State(A_COPY_path, {
+ '' : Item(status=' M'),
+ 'B' : Item(status=' '),
+ 'mu' : Item(status=' '),
+ 'B/B1' : Item(status='A ', copied='+'),
+ 'B/B1/test.txt' : Item(status=' ', copied='+'),
+ 'B/B1/B1a' : Item(status='D ', copied='+'),
+ 'B/B1/B1a/test.txt' : Item(status='D ', copied='+'),
+ 'B/E' : Item(status=' '),
+ 'B/E/alpha' : Item(status=' '),
+ 'B/E/beta' : Item(status=' '),
+ 'B/lambda' : Item(status=' '),
+ 'B/F' : Item(status=' '),
+ 'C' : Item(status=' '),
+ 'C/C1' : Item(status=' '),
+ 'C/C1/test.txt' : Item(status=' '),
+ 'D' : Item(status=' '),
+ 'D/G' : Item(status=' '),
+ 'D/G/pi' : Item(status=' '),
+ 'D/G/rho' : Item(status=' '),
+ 'D/G/tau' : Item(status=' '),
+ 'D/gamma' : Item(status=' '),
+ 'D/H' : Item(status=' '),
+ 'D/H/chi' : Item(status=' '),
+ 'D/H/psi' : Item(status=' '),
+ 'D/H/omega' : Item(status=' '),
+ })
+ expected_status.tweak(wc_rev=6)
+ expected_status.tweak('B/B1', 'B/B1/test.txt', 'B/B1/B1a',
+ 'B/B1/B1a/test.txt', wc_rev='-')
+ expected_disk = wc.State('', {
+ '' : Item(props={SVN_PROP_MERGEINFO : '/A:2-6'}),
+ 'B' : Item(),
+ 'mu' : Item("This is the file 'mu'.\n"),
+ 'B/B1' : Item(),
+ 'B/B1/test.txt' : Item("New file.\n"),
+ 'B/E' : Item(),
+ 'B/E/alpha' : Item("This is the file 'alpha'.\n"),
+ 'B/E/beta' : Item("This is the file 'beta'.\n"),
+ 'B/lambda' : Item("This is the file 'lambda'.\n"),
+ 'B/F' : Item(),
+ 'C' : Item(props={SVN_PROP_MERGEINFO : '/A/C:2-5'}),
+ 'C/C1' : Item(),
+ 'C/C1/test.txt' : Item("New file.\n"),
+ 'D' : Item(),
+ 'D/G' : Item(),
+ 'D/G/pi' : Item("This is the file 'pi'.\n"),
+ 'D/G/rho' : Item("This is the file 'rho'.\n"),
+ 'D/G/tau' : Item("This is the file 'tau'.\n"),
+ 'D/gamma' : Item("This is the file 'gamma'.\n"),
+ 'D/H' : Item(),
+ 'D/H/chi' : Item("This is the file 'chi'.\n"),
+ 'D/H/psi' : Item("This is the file 'psi'.\n"),
+ 'D/H/omega' : Item("This is the file 'omega'.\n"),
+ })
+ expected_skip = wc.State(A_COPY_path, { })
+ svntest.actions.run_and_verify_merge(A_COPY_path, None, None,
+ sbox.repo_url + '/A', None,
+ expected_output,
+ expected_mergeinfo_output,
+ expected_elision_output,
+ expected_disk,
+ expected_status,
+ expected_skip,
+ None, None, None, None,
+ None, 1, 0)
+
+ # Commit the merge.
+ #sbox.simple_commit()
+
+def merge_dir_delete_force(sbox):
+ "merge a directory delete with --force"
+
+ sbox.build()
+
+ sbox.simple_rm('A/D/G')
+ sbox.simple_commit() # r2
+
+ sbox.simple_update(revision=1)
+
+ # Just merging r2 on r1 succeeds
+ svntest.actions.run_and_verify_svn(sbox.wc_dir, None, [],
+ 'merge', '-c2', '^/', sbox.wc_dir,
+ '--ignore-ancestry')
+
+ # Bring working copy to r1 again
+ svntest.actions.run_and_verify_svn(sbox.wc_dir, None, [],
+ 'revert', '-R', sbox.wc_dir)
+
+ # But when using --force this same merge caused a segfault in 1.8.0-1.8.8
+ svntest.actions.run_and_verify_svn(sbox.wc_dir, None, [],
+ 'merge', '-c2', '^/', sbox.wc_dir,
+ '--ignore-ancestry', '--force')
+
+def conflict_naming(sbox):
+ "verify conflict file naming"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ sbox.simple_append('file.txt', 'This is the initial content\n')
+ sbox.simple_add('file.txt')
+ sbox.simple_commit()
+
+ sbox.simple_append('file.txt', 'This is the new content\n', truncate=True)
+ sbox.simple_commit()
+
+ sbox.simple_append('file.txt', 'This is conflicting content\n', truncate=True)
+
+ # Update - no preserve ext
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
+ expected_disk = svntest.main.greek_state.copy()
+ expected_output = svntest.wc.State(wc_dir, {
+ 'file.txt' : Item(status='C ')
+ })
+ expected_status.add({
+ 'file.txt' : Item(status='C ', wc_rev='2')
+ })
+
+ expected_disk.add({
+ 'file.txt.r3' : Item(contents="This is the new content\n"),
+ 'file.txt.r2' : Item(contents="This is the initial content\n"),
+ 'file.txt' : Item(contents="<<<<<<< .mine\n" \
+ "This is conflicting content\n" \
+ "=======\n" \
+ "This is the initial content\n" \
+ ">>>>>>> .r2\n"),
+ 'file.txt.mine' : Item(contents="This is conflicting content\n"),
+ })
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output, expected_disk,
+ expected_status,
+ None, None, None,
+ None, None, None,
+ wc_dir, '-r', '2')
+
+ sbox.simple_revert('file.txt')
+ sbox.simple_update('', revision=3)
+ sbox.simple_append('file.txt', 'This is conflicting content\n', truncate=True)
+
+ # Update - preserve ext
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
+ expected_disk = svntest.main.greek_state.copy()
+ expected_output = svntest.wc.State(wc_dir, {
+ 'file.txt' : Item(status='C ')
+ })
+ expected_status.add({
+ 'file.txt' : Item(status='C ', wc_rev='2')
+ })
+
+ expected_disk.add({
+ 'file.txt.r3.txt' : Item(contents="This is the new content\n"),
+ 'file.txt.r2.txt' : Item(contents="This is the initial content\n"),
+ 'file.txt' : Item(contents="<<<<<<< .mine.txt\n" \
+ "This is conflicting content\n" \
+ "=======\n" \
+ "This is the initial content\n" \
+ ">>>>>>> .r2.txt\n"),
+ 'file.txt.mine.txt' : Item(contents="This is conflicting content\n"),
+ })
+ svntest.actions.run_and_verify_update(
+ wc_dir,
+ expected_output, expected_disk, expected_status,
+ None, None, None, None, None, None,
+ wc_dir, '-r', '2',
+ '--config-option',
+ 'config:miscellany:preserved-conflict-file-exts=' +
+ 'c txt h')
+
+ sbox.simple_revert('file.txt')
+ sbox.simple_update('', revision=3)
+ sbox.simple_append('file.txt', 'This is conflicting content\n', truncate=True)
+
+ # Merge - no preserve ext
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 3)
+ expected_disk = svntest.main.greek_state.copy()
+ expected_status.add({
+ 'file.txt' : Item(status='C ', wc_rev='3')
+ })
+ expected_disk.add({
+ 'file.txt.merge-left.r3' : Item(contents="This is the new content\n"),
+ 'file.txt.merge-right.r2': Item(contents="This is the initial content\n"),
+ 'file.txt' : Item(contents="<<<<<<< .working\n" \
+ "This is conflicting content\n" \
+ "=======\n" \
+ "This is the initial content\n" \
+ ">>>>>>> .merge-right.r2\n"),
+ 'file.txt.working' : Item(contents="This is conflicting content\n"),
+ })
+
+ svntest.actions.run_and_verify_svn(wc_dir, None, [],
+ 'merge', '-c-3', '^/', sbox.ospath(''))
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+ svntest.actions.verify_disk(wc_dir, expected_disk)
+
+ sbox.simple_revert('file.txt')
+ sbox.simple_append('file.txt', 'This is conflicting content\n', truncate=True)
+
+ # Merge - preserve ext
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 3)
+ expected_disk = svntest.main.greek_state.copy()
+ expected_status.add({
+ 'file.txt' : Item(status='C ', wc_rev='3')
+ })
+ expected_disk.add({
+ 'file.txt.merge-left.r3.txt' : Item(contents="This is the new content\n"),
+ 'file.txt.merge-right.r2.txt': Item(contents="This is the initial content\n"),
+ 'file.txt' : Item(contents="<<<<<<< .working.txt\n" \
+ "This is conflicting content\n" \
+ "=======\n" \
+ "This is the initial content\n" \
+ ">>>>>>> .merge-right.r2.txt\n"),
+ 'file.txt.working.txt' : Item(contents="This is conflicting content\n"),
+ })
+
+ svntest.actions.run_and_verify_svn(
+ wc_dir, None, [],
+ 'merge', '-c-3', '^/', sbox.ospath(''),
+ '--config-option',
+ 'config:miscellany:preserved-conflict-file-exts=' +
+ 'c txt h')
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+ svntest.actions.verify_disk(wc_dir, expected_disk)
+
########################################################################
# Run the tests
@@ -17562,13 +19420,29 @@ test_list = [ None,
merge_change_to_file_with_executable,
dry_run_merge_conflicting_binary,
foreign_repos_prop_conflict,
+ merge_adds_subtree_with_mergeinfo,
reverse_merge_adds_subtree,
merged_deletion_causes_tree_conflict,
- merge_adds_subtree_with_mergeinfo,
record_only_merge_adds_new_subtree_mergeinfo,
+ unnecessary_noninheritable_mergeinfo_missing_subtrees,
+ unnecessary_noninheritable_mergeinfo_shallow_merge,
+ svnmucc_abuse_1,
+ merge_source_with_replacement,
reverse_merge_with_rename,
merge_adds_then_deletes_subtree,
merge_with_added_subtrees_with_mergeinfo,
+ merge_with_externals_with_mergeinfo,
+ merge_binary_file_with_keywords,
+ merge_conflict_when_keywords_removed,
+ merge_target_selection,
+ merge_properties_on_adds,
+ conflict_aborted_mergeinfo_described_partial_merge,
+ multiple_editor_drive_merge_notifications,
+ single_editor_drive_merge_notifications,
+ conflicted_split_merge_with_resolve,
+ merge_to_empty_target_merge_to_infinite_target,
+ merge_dir_delete_force,
+ conflict_naming,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/merge_tree_conflict_tests.py b/subversion/tests/cmdline/merge_tree_conflict_tests.py
index 42dbb35..15287d3 100755
--- a/subversion/tests/cmdline/merge_tree_conflict_tests.py
+++ b/subversion/tests/cmdline/merge_tree_conflict_tests.py
@@ -30,7 +30,7 @@ import time
# Our testing module
import svntest
-from svntest import main, wc, verify, actions
+from svntest import main, wc, verify, actions, deeptrees
# (abbreviation)
Item = wc.StateItem
@@ -46,6 +46,7 @@ from svntest.main import server_has_mergeinfo
from merge_tests import set_up_branch
from merge_tests import svn_copy
from merge_tests import svn_merge
+from merge_tests import expected_merge_output
#----------------------------------------------------------------------
@SkipUnless(server_has_mergeinfo)
@@ -624,7 +625,6 @@ def mergeinfo_recording_in_skipped_merge(sbox):
'B' : Item(),
'B/lambda' : Item(contents="This is the file 'lambda'.\n"),
'B/F' : Item(),
- 'B/E' : Item(),
'D/gamma' : Item("This is the file 'gamma'.\n"),
'D/G' : Item(),
'D/G/pi' : Item("This is the file 'pi'.\n"),
@@ -635,9 +635,6 @@ def mergeinfo_recording_in_skipped_merge(sbox):
'D/H/omega': Item("This is the file 'omega'.\n"),
'D/H/psi' : Item("This is the file 'psi'.\n"),
})
- if svntest.main.wc_is_singledb(sbox.wc_dir):
- # Delete removes directories in single-db
- expected_disk.remove('B/E')
expected_skip = wc.State(A_COPY_path, {})
svntest.actions.run_and_verify_merge(A_COPY_path, None, None,
A_url, None,
@@ -680,25 +677,16 @@ def del_differing_file(sbox):
'newprop', 'v', target+"/pi")
dir_D = os.path.join('A','D')
- dir_G2 = os.path.join(dir_D, 'G2')
tau = os.path.join(dir_D,'G2','tau')
pi = os.path.join(dir_D, 'G2', 'pi')
# Should complain and "skip" it.
svn_merge(s_rev_tau, source, target, [
- "--- Merging r2 into '%s':\n" % dir_G2,
- " C %s\n" % tau,
- "--- Recording mergeinfo for merge of r2 into '%s':\n" % (dir_G2),
- " U %s\n" % (dir_G2),
- "Summary of conflicts:\n",
- " Tree conflicts: 1\n"])
+ " C %s\n" % tau, # merge
+ ], tree_conflicts=1)
svn_merge(s_rev_pi, source, target, [
- "--- Merging r3 into '%s':\n" % dir_G2,
- " C %s\n" % pi,
- "--- Recording mergeinfo for merge of r3 into '%s':\n" % (dir_G2),
- " G %s\n" % (dir_G2),
- "Summary of conflicts:\n",
- " Tree conflicts: 1\n"])
+ " C %s\n" % pi, # merge
+ ], tree_conflicts=1)
# Copy a file, modify it, commit, and merge a deletion to it.
@@ -710,26 +698,17 @@ def del_differing_file(sbox):
sbox.simple_commit(target)
- dir_G3 = os.path.join(dir_D, 'G3')
tau = os.path.join(dir_D,'G3','tau')
pi = os.path.join(dir_D, 'G3', 'pi')
# Should complain and "skip" it.
svn_merge(s_rev_tau, source, target, [
- "--- Merging r2 into '%s':\n" % dir_G3,
" C %s\n" % tau,
- "--- Recording mergeinfo for merge of r2 into '%s':\n" % (dir_G3),
- " U %s\n" % (dir_G3),
- "Summary of conflicts:\n",
- " Tree conflicts: 1\n"])
+ ], tree_conflicts=1)
svn_merge(s_rev_pi, source, target, [
- "--- Merging r3 into '%s':\n" % dir_G3,
" C %s\n" % pi,
- "--- Recording mergeinfo for merge of r3 into '%s':\n" % (dir_G3),
- " G %s\n" % (dir_G3),
- "Summary of conflicts:\n",
- " Tree conflicts: 1\n"])
+ ], tree_conflicts=1)
os.chdir(saved_cwd)
@@ -786,7 +765,7 @@ def tree_conflicts_and_obstructions(sbox):
'beta' : Item(status=' ', wc_rev=3),
})
expected_skip = wc.State(branch_path, {
- 'alpha-moved' : Item(),
+ 'alpha-moved' : Item(verb='Skipped'),
})
svntest.actions.run_and_verify_merge(branch_path,
@@ -810,21 +789,21 @@ def tree_conflicts_and_obstructions(sbox):
# parent directory.
# convenience definitions
-leaf_edit = svntest.actions.deep_trees_leaf_edit
-tree_del = svntest.actions.deep_trees_tree_del
-leaf_del = svntest.actions.deep_trees_leaf_del
+leaf_edit = svntest.deeptrees.deep_trees_leaf_edit
+tree_del = svntest.deeptrees.deep_trees_tree_del
+leaf_del = svntest.deeptrees.deep_trees_leaf_del
-disk_after_leaf_edit = svntest.actions.deep_trees_after_leaf_edit
-disk_after_leaf_del = svntest.actions.deep_trees_after_leaf_del
-disk_after_tree_del = svntest.actions.deep_trees_after_tree_del
-disk_after_leaf_del_no_ci = svntest.actions.deep_trees_after_leaf_del_no_ci
-disk_after_tree_del_no_ci = svntest.actions.deep_trees_after_tree_del_no_ci
+disk_after_leaf_edit = svntest.deeptrees.deep_trees_after_leaf_edit
+disk_after_leaf_del = svntest.deeptrees.deep_trees_after_leaf_del
+disk_after_tree_del = svntest.deeptrees.deep_trees_after_tree_del
+disk_after_leaf_del_no_ci = svntest.deeptrees.deep_trees_after_leaf_del_no_ci
+disk_after_tree_del_no_ci = svntest.deeptrees.deep_trees_after_tree_del_no_ci
-deep_trees_conflict_output = svntest.actions.deep_trees_conflict_output
+deep_trees_conflict_output = svntest.deeptrees.deep_trees_conflict_output
j = os.path.join
-DeepTreesTestCase = svntest.actions.DeepTreesTestCase
+DeepTreesTestCase = svntest.deeptrees.DeepTreesTestCase
alpha_beta_gamma = svntest.wc.State('', {
'F/alpha' : Item(),
@@ -861,7 +840,7 @@ def tree_conflicts_on_merge_local_ci_4_1(sbox):
expected_skip = svntest.wc.State('', { })
- svntest.actions.deep_trees_run_tests_scheme_for_merge(sbox,
+ svntest.deeptrees.deep_trees_run_tests_scheme_for_merge(sbox,
[ DeepTreesTestCase("local_tree_del_incoming_leaf_edit",
tree_del,
leaf_edit,
@@ -899,7 +878,7 @@ def tree_conflicts_on_merge_local_ci_4_2(sbox):
expected_skip = svntest.wc.State('', {
})
- svntest.actions.deep_trees_run_tests_scheme_for_merge(sbox,
+ svntest.deeptrees.deep_trees_run_tests_scheme_for_merge(sbox,
[ DeepTreesTestCase("local_tree_del_incoming_leaf_del",
tree_del,
leaf_del,
@@ -909,7 +888,6 @@ def tree_conflicts_on_merge_local_ci_4_2(sbox):
expected_skip) ], True)
#----------------------------------------------------------------------
-@XFail()
@Issue(2282)
def tree_conflicts_on_merge_local_ci_5_1(sbox):
"tree conflicts 5.1: leaf edit, tree del"
@@ -927,23 +905,23 @@ def tree_conflicts_on_merge_local_ci_5_1(sbox):
'' : Item(status=' M', wc_rev='3'),
'D' : Item(status=' ', wc_rev='3'),
'D/D1' : Item(status=' ', treeconflict='C', wc_rev='4'),
- 'D/D1/delta' : Item(status='D ', wc_rev='4'),
+ 'D/D1/delta' : Item(status=' ', wc_rev='4'),
'DD' : Item(status=' ', wc_rev='3'),
- 'DD/D1' : Item(status=' ', treeconflict='C', wc_rev='4'),
- 'DD/D1/D2' : Item(status='D ', wc_rev='3'),
- 'DD/D1/D2/epsilon' : Item(status='D ', wc_rev='4'),
+ 'DD/D1' : Item(status=' ', treeconflict='C', wc_rev='3'),
+ 'DD/D1/D2' : Item(status=' ', wc_rev='4'),
+ 'DD/D1/D2/epsilon' : Item(status=' ', wc_rev='4'),
'DDD' : Item(status=' ', wc_rev='3'),
- 'DDD/D1' : Item(status=' ', treeconflict='C', wc_rev='4'),
- 'DDD/D1/D2' : Item(status='D ', wc_rev='3'),
- 'DDD/D1/D2/D3' : Item(status='D ', wc_rev='3'),
- 'DDD/D1/D2/D3/zeta' : Item(status='D ', wc_rev='4'),
+ 'DDD/D1' : Item(status=' ', treeconflict='C', wc_rev='3'),
+ 'DDD/D1/D2' : Item(status=' ', wc_rev='3'),
+ 'DDD/D1/D2/D3' : Item(status=' ', wc_rev='4'),
+ 'DDD/D1/D2/D3/zeta' : Item(status=' ', wc_rev='4'),
'DDF' : Item(status=' ', wc_rev='3'),
- 'DDF/D1' : Item(status=' ', treeconflict='C', wc_rev='4'),
- 'DDF/D1/D2' : Item(status='D ', wc_rev='3'),
- 'DDF/D1/D2/gamma' : Item(status='D ', wc_rev='4'),
+ 'DDF/D1' : Item(status=' ', treeconflict='C', wc_rev='3'),
+ 'DDF/D1/D2' : Item(status=' ', wc_rev='3'),
+ 'DDF/D1/D2/gamma' : Item(status=' ', wc_rev='4'),
'DF' : Item(status=' ', wc_rev='3'),
- 'DF/D1' : Item(status=' ', treeconflict='C', wc_rev='4'),
- 'DF/D1/beta' : Item(status='D ', wc_rev='4'),
+ 'DF/D1' : Item(status=' ', treeconflict='C', wc_rev='3'),
+ 'DF/D1/beta' : Item(status=' ', wc_rev='4'),
'F' : Item(status=' ', wc_rev='3'),
'F/alpha' : Item(status=' ', treeconflict='C', wc_rev='4'),
@@ -952,7 +930,7 @@ def tree_conflicts_on_merge_local_ci_5_1(sbox):
expected_skip = svntest.wc.State('', {
})
- svntest.actions.deep_trees_run_tests_scheme_for_merge(sbox,
+ svntest.deeptrees.deep_trees_run_tests_scheme_for_merge(sbox,
[ DeepTreesTestCase("local_leaf_edit_incoming_tree_del",
leaf_edit,
tree_del,
@@ -962,7 +940,6 @@ def tree_conflicts_on_merge_local_ci_5_1(sbox):
expected_skip) ], True)
#----------------------------------------------------------------------
-@XFail()
@Issue(2282)
def tree_conflicts_on_merge_local_ci_5_2(sbox):
"tree conflicts 5.2: leaf del, tree del"
@@ -978,15 +955,15 @@ def tree_conflicts_on_merge_local_ci_5_2(sbox):
'D' : Item(status=' ', wc_rev='3'),
'F' : Item(status=' ', wc_rev='3'),
'DD' : Item(status=' ', wc_rev='3'),
- 'DD/D1' : Item(status='! ', treeconflict='C'),
+ 'DD/D1' : Item(status=' ', wc_rev='3', treeconflict='C'),
'DF' : Item(status=' ', wc_rev='3'),
- 'DF/D1' : Item(status='! ', treeconflict='C'),
+ 'DF/D1' : Item(status=' ', wc_rev='3', treeconflict='C'),
'DDD' : Item(status=' ', wc_rev='3'),
- 'DDD/D1' : Item(status='! ', treeconflict='C'),
- 'DDD/D1/D2' : Item(status='D ', wc_rev='3'),
+ 'DDD/D1' : Item(status=' ', wc_rev='3', treeconflict='C'),
+ 'DDD/D1/D2' : Item(status=' ', wc_rev='3'),
'DDF' : Item(status=' ', wc_rev='3'),
- 'DDF/D1' : Item(status='! ', treeconflict='C'),
- 'DDF/D1/D2' : Item(status='D ', wc_rev='3'),
+ 'DDF/D1' : Item(status=' ', wc_rev='3', treeconflict='C'),
+ 'DDF/D1/D2' : Item(status=' ', wc_rev='3'),
'D/D1' : Item(status='! ', treeconflict='C'),
'F/alpha' : Item(status='! ', treeconflict='C'),
})
@@ -994,7 +971,7 @@ def tree_conflicts_on_merge_local_ci_5_2(sbox):
expected_skip = svntest.wc.State('', {
})
- svntest.actions.deep_trees_run_tests_scheme_for_merge(sbox,
+ svntest.deeptrees.deep_trees_run_tests_scheme_for_merge(sbox,
[ DeepTreesTestCase("local_leaf_del_incoming_tree_del",
leaf_del,
tree_del,
@@ -1033,7 +1010,7 @@ def tree_conflicts_on_merge_local_ci_6(sbox):
expected_skip = svntest.wc.State('', {
})
- svntest.actions.deep_trees_run_tests_scheme_for_merge(sbox,
+ svntest.deeptrees.deep_trees_run_tests_scheme_for_merge(sbox,
[ DeepTreesTestCase("local_tree_del_incoming_tree_del",
tree_del,
tree_del,
@@ -1080,7 +1057,7 @@ def tree_conflicts_on_merge_no_local_ci_4_1(sbox):
expected_skip = svntest.wc.State('', {
})
- svntest.actions.deep_trees_run_tests_scheme_for_merge(sbox,
+ svntest.deeptrees.deep_trees_run_tests_scheme_for_merge(sbox,
[ DeepTreesTestCase(
"local_tree_del_incoming_leaf_edit",
tree_del,
@@ -1128,7 +1105,7 @@ def tree_conflicts_on_merge_no_local_ci_4_2(sbox):
expected_skip = svntest.wc.State('', {
})
- svntest.actions.deep_trees_run_tests_scheme_for_merge(sbox,
+ svntest.deeptrees.deep_trees_run_tests_scheme_for_merge(sbox,
[ DeepTreesTestCase(
"local_tree_del_incoming_leaf_del",
tree_del,
@@ -1179,7 +1156,7 @@ def tree_conflicts_on_merge_no_local_ci_5_1(sbox):
expected_skip = svntest.wc.State('', {
})
- svntest.actions.deep_trees_run_tests_scheme_for_merge(sbox,
+ svntest.deeptrees.deep_trees_run_tests_scheme_for_merge(sbox,
[ DeepTreesTestCase(
"local_leaf_edit_incoming_tree_del",
leaf_edit,
@@ -1191,7 +1168,6 @@ def tree_conflicts_on_merge_no_local_ci_5_1(sbox):
) ], False)
#----------------------------------------------------------------------
-@XFail()
@Issue(2282)
def tree_conflicts_on_merge_no_local_ci_5_2(sbox):
"tree conflicts 5.2: leaf del (no ci), tree del"
@@ -1209,25 +1185,25 @@ def tree_conflicts_on_merge_no_local_ci_5_2(sbox):
'F' : Item(status=' ', wc_rev='3'),
'F/alpha' : Item(status='D ', wc_rev='3', treeconflict='C'),
'DD' : Item(status=' ', wc_rev='3'),
- 'DD/D1' : Item(status='D ', wc_rev='3', treeconflict='C'),
+ 'DD/D1' : Item(status=' ', wc_rev='3', treeconflict='C'),
'DD/D1/D2' : Item(status='D ', wc_rev='3'),
'DF' : Item(status=' ', wc_rev='3'),
- 'DF/D1' : Item(status='D ', wc_rev='3', treeconflict='C'),
+ 'DF/D1' : Item(status=' ', wc_rev='3', treeconflict='C'),
'DF/D1/beta' : Item(status='D ', wc_rev='3'),
'DDD' : Item(status=' ', wc_rev='3'),
- 'DDD/D1' : Item(status='D ', wc_rev='3', treeconflict='C'),
- 'DDD/D1/D2' : Item(status='D ', wc_rev='3'),
+ 'DDD/D1' : Item(status=' ', wc_rev='3', treeconflict='C'),
+ 'DDD/D1/D2' : Item(status=' ', wc_rev='3'),
'DDD/D1/D2/D3' : Item(status='D ', wc_rev='3'),
'DDF' : Item(status=' ', wc_rev='3'),
- 'DDF/D1' : Item(status='D ', wc_rev='3', treeconflict='C'),
- 'DDF/D1/D2' : Item(status='D ', wc_rev='3'),
+ 'DDF/D1' : Item(status=' ', wc_rev='3', treeconflict='C'),
+ 'DDF/D1/D2' : Item(status=' ', wc_rev='3'),
'DDF/D1/D2/gamma' : Item(status='D ', wc_rev='3'),
})
expected_skip = svntest.wc.State('', {
})
- svntest.actions.deep_trees_run_tests_scheme_for_merge(sbox,
+ svntest.deeptrees.deep_trees_run_tests_scheme_for_merge(sbox,
[ DeepTreesTestCase(
"local_leaf_del_incoming_tree_del",
leaf_del,
@@ -1276,7 +1252,7 @@ def tree_conflicts_on_merge_no_local_ci_6(sbox):
expected_skip = svntest.wc.State('', {
})
- svntest.actions.deep_trees_run_tests_scheme_for_merge(sbox,
+ svntest.deeptrees.deep_trees_run_tests_scheme_for_merge(sbox,
[ DeepTreesTestCase(
"local_tree_del_incoming_tree_del",
tree_del,
@@ -1305,6 +1281,14 @@ def tree_conflicts_merge_edit_onto_missing(sbox):
sbox.build()
expected_output = wc.State('', {
+ # Below the skips
+ 'DD/D1/D2' : Item(status=' ', treeconflict='U'),
+ 'DD/D1/D2/epsilon' : Item(status=' ', treeconflict='A'),
+ 'DDD/D1/D2/D3' : Item(status=' ', treeconflict='U'),
+ 'DDD/D1/D2/D3/zeta' : Item(status=' ', treeconflict='A'),
+ 'DDF/D1/D2/gamma' : Item(status=' ', treeconflict='U'),
+ 'D/D1/delta' : Item(status=' ', treeconflict='A'),
+ 'DF/D1/beta' : Item(status=' ', treeconflict='U'),
})
expected_disk = disk_after_tree_del
@@ -1316,52 +1300,40 @@ def tree_conflicts_merge_edit_onto_missing(sbox):
'F' : Item(status=' ', wc_rev=3),
'F/alpha' : Item(status='! ', wc_rev=3),
'D' : Item(status=' ', wc_rev=3),
- 'D/D1' : Item(status='! ', wc_rev='?'),
+ 'D/D1' : Item(status='! ', wc_rev='3', entry_rev='?'),
'DF' : Item(status=' ', wc_rev=3),
- 'DF/D1' : Item(status='! ', wc_rev='?'),
- 'DF/D1/beta' : Item(status=' '),
+ 'DF/D1' : Item(status='! ', wc_rev=3, entry_rev='?'),
+ 'DF/D1/beta' : Item(status='! ', wc_rev=3),
'DD' : Item(status=' ', wc_rev=3),
- 'DD/D1' : Item(status='! ', wc_rev='?'),
- 'DD/D1/D2' : Item(status=' '),
+ 'DD/D1' : Item(status='! ', wc_rev=3, entry_rev='?'),
+ 'DD/D1/D2' : Item(status='! ', wc_rev=3),
'DDF' : Item(status=' ', wc_rev=3),
- 'DDF/D1' : Item(status='! ', wc_rev='?'),
- 'DDF/D1/D2' : Item(status=' '),
- 'DDF/D1/D2/gamma' : Item(status=' '),
+ 'DDF/D1' : Item(status='! ', wc_rev=3, entry_rev='?'),
+ 'DDF/D1/D2' : Item(status='! ', wc_rev=3),
+ 'DDF/D1/D2/gamma' : Item(status='! ', wc_rev=3),
'DDD' : Item(status=' ', wc_rev=3),
- 'DDD/D1' : Item(status='! ', wc_rev='?'),
- 'DDD/D1/D2' : Item(status=' '),
- 'DDD/D1/D2/D3' : Item(status=' '),
- })
-
- if svntest.main.wc_is_singledb(sbox.wc_dir):
- expected_status.tweak('D/D1', wc_rev=3, entry_rev='?')
- expected_status.tweak('DF/D1', wc_rev=3, entry_rev='?')
- expected_status.tweak('DF/D1/beta', wc_rev=3, status='! ')
- expected_status.tweak('DD/D1', wc_rev=3, entry_rev='?')
- expected_status.tweak('DD/D1/D2', wc_rev=3, status='! ')
- expected_status.tweak('DDF/D1', wc_rev=3, entry_rev='?')
- expected_status.tweak('DDF/D1/D2', wc_rev=3, status='! ')
- expected_status.tweak('DDF/D1/D2/gamma', wc_rev=3, status='! ')
- expected_status.tweak('DDD/D1', wc_rev=3, entry_rev='?')
- expected_status.tweak('DDD/D1/D2', wc_rev=3, status='! ')
- expected_status.tweak('DDD/D1/D2/D3', wc_rev=3, status='! ')
-
- expected_skip = svntest.wc.State('', {
- 'F/alpha' : Item(),
- # BH: After fixing several issues in the obstruction handling
- # I get the following Skip notifications. Please review!
- 'D/D1' : Item(),
- 'DD/D1' : Item(),
- 'DF/D1' : Item(),
- 'DDD/D1' : Item(),
- 'DDF/D1' : Item(),
+ 'DDD/D1' : Item(status='! ', wc_rev=3, entry_rev='?'),
+ 'DDD/D1/D2' : Item(status='! ', wc_rev=3),
+ 'DDD/D1/D2/D3' : Item(status='! ', wc_rev=3),
})
+ expected_skip = svntest.wc.State('', {
+ 'F/alpha' : Item(verb='Skipped missing target'),
+ # Obstruction handling improvements in 1.7 and 1.8 added
+ 'DDD/D1' : Item(verb='Skipped missing target'),
+ 'DF/D1' : Item(verb='Skipped missing target'),
+ 'DDF/D1' : Item(verb='Skipped missing target'),
+ 'D/D1' : Item(verb='Skipped missing target'),
+ 'DD/D1' : Item(verb='Skipped missing target'),
+ 'F/alpha' : Item(verb='Skipped missing target'),
+ })
- svntest.actions.deep_trees_run_tests_scheme_for_merge(sbox,
+ # Currently this test fails because some parts of the merge
+ # start succeeding.
+ svntest.deeptrees.deep_trees_run_tests_scheme_for_merge(sbox,
[ DeepTreesTestCase(
"local_tree_missing_incoming_leaf_edit",
- svntest.actions.deep_trees_rmtree,
+ svntest.deeptrees.deep_trees_rmtree,
leaf_edit,
expected_output,
expected_disk,
@@ -1387,6 +1359,11 @@ def tree_conflicts_merge_del_onto_missing(sbox):
sbox.build()
expected_output = wc.State('', {
+ # Below the skips
+ 'DF/D1/beta' : Item(status=' ', treeconflict='D'),
+ 'DDD/D1/D2/D3' : Item(status=' ', treeconflict='D'),
+ 'DD/D1/D2' : Item(status=' ', treeconflict='D'),
+ 'DDF/D1/D2/gamma' : Item(status=' ', treeconflict='D'),
})
expected_disk = disk_after_tree_del
@@ -1398,52 +1375,37 @@ def tree_conflicts_merge_del_onto_missing(sbox):
'F' : Item(status=' ', wc_rev=3),
'F/alpha' : Item(status='! ', wc_rev=3),
'D' : Item(status=' ', wc_rev=3),
- 'D/D1' : Item(status='! ', wc_rev='?'),
+ 'D/D1' : Item(status='! ', wc_rev=3),
'DF' : Item(status=' ', wc_rev=3),
- 'DF/D1' : Item(status='! ', wc_rev='?'),
- 'DF/D1/beta' : Item(status=' '),
+ 'DF/D1' : Item(status='! ', wc_rev=3),
+ 'DF/D1/beta' : Item(status='! ', wc_rev=3),
'DD' : Item(status=' ', wc_rev=3),
- 'DD/D1' : Item(status='! ', wc_rev='?'),
- 'DD/D1/D2' : Item(status=' '),
+ 'DD/D1' : Item(status='! ', wc_rev=3),
+ 'DD/D1/D2' : Item(status='! ', wc_rev=3),
'DDF' : Item(status=' ', wc_rev=3),
- 'DDF/D1' : Item(status='! ', wc_rev='?'),
- 'DDF/D1/D2' : Item(status=' '),
- 'DDF/D1/D2/gamma' : Item(status=' '),
+ 'DDF/D1' : Item(status='! ', wc_rev=3),
+ 'DDF/D1/D2' : Item(status='! ', wc_rev=3),
+ 'DDF/D1/D2/gamma' : Item(status='! ', wc_rev=3),
'DDD' : Item(status=' ', wc_rev=3),
- 'DDD/D1' : Item(status='! ', wc_rev='?'),
- 'DDD/D1/D2' : Item(status=' '),
- 'DDD/D1/D2/D3' : Item(status=' '),
- })
-
- if svntest.main.wc_is_singledb(sbox.wc_dir):
- expected_status.tweak('D/D1', wc_rev=3)
- expected_status.tweak('DF/D1', wc_rev=3)
- expected_status.tweak('DF/D1/beta', wc_rev=3, status='! ')
- expected_status.tweak('DD/D1', wc_rev=3)
- expected_status.tweak('DD/D1/D2', wc_rev=3, status='! ')
- expected_status.tweak('DDF/D1', wc_rev=3)
- expected_status.tweak('DDF/D1/D2', wc_rev=3, status='! ')
- expected_status.tweak('DDF/D1/D2/gamma', wc_rev=3, status='! ')
- expected_status.tweak('DDD/D1', wc_rev=3)
- expected_status.tweak('DDD/D1/D2', wc_rev=3, status='! ')
- expected_status.tweak('DDD/D1/D2/D3', wc_rev=3, status='! ')
+ 'DDD/D1' : Item(status='! ', wc_rev=3),
+ 'DDD/D1/D2' : Item(status='! ', wc_rev=3),
+ 'DDD/D1/D2/D3' : Item(status='! ', wc_rev=3),
+ })
expected_skip = svntest.wc.State('', {
- 'F/alpha' : Item(),
- 'D/D1' : Item(),
- # BH: After fixing several issues in the obstruction handling
- # I get the following Skip notifications. Please review!
- 'D/D1' : Item(),
- 'DD/D1' : Item(),
- 'DF/D1' : Item(),
- 'DDD/D1' : Item(),
- 'DDF/D1' : Item(),
- })
-
- svntest.actions.deep_trees_run_tests_scheme_for_merge(sbox,
+ 'F/alpha' : Item(verb='Skipped missing target'),
+ 'D/D1' : Item(verb='Skipped missing target'),
+ # Obstruction handling improvements in 1.7 and 1.8 added
+ 'DDD/D1' : Item(verb='Skipped missing target'),
+ 'DD/D1' : Item(verb='Skipped missing target'),
+ 'DDF/D1' : Item(verb='Skipped missing target'),
+ 'DF/D1' : Item(verb='Skipped missing target'),
+ })
+
+ svntest.deeptrees.deep_trees_run_tests_scheme_for_merge(sbox,
[ DeepTreesTestCase(
"local_tree_missing_incoming_leaf_del",
- svntest.actions.deep_trees_rmtree,
+ svntest.deeptrees.deep_trees_rmtree,
leaf_del,
expected_output,
expected_disk,
@@ -1688,7 +1650,6 @@ def merge_replace_setup(sbox):
#----------------------------------------------------------------------
# ra_serf causes duplicate notifications with this test:
-@XFail(svntest.main.is_ra_type_dav_serf)
@Issue(3802)
def merge_replace_causes_tree_conflict(sbox):
"replace vs. edit tree-conflicts"
@@ -1738,18 +1699,15 @@ def merge_replace_causes_tree_conflict(sbox):
'propname', 'propval', A_D_H)
# svn merge $URL/A $URL/branch A
- expected_stdout = verify.UnorderedOutput([
- "--- Merging differences between repository URLs into '" + A + "':\n",
+ expected_stdout = expected_merge_output(None, [
+ # merge
' C ' + A_B_E + '\n',
' C ' + A_mu + '\n',
' C ' + A_D_G_pi + '\n',
' C ' + A_D_H + '\n',
- "--- Recording mergeinfo for merge between repository URLs into '" \
- + A + "':\n",
+ # mergeinfo
' U ' + A + '\n',
- 'Summary of conflicts:\n',
- ' Tree conflicts: 4\n',
- ])
+ ], target=A, two_url=True, tree_conflicts=4)
actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'merge',
url_A, url_branch, A)
@@ -1758,13 +1716,11 @@ def merge_replace_causes_tree_conflict(sbox):
expected_status.tweak('A', status=' M')
expected_status.tweak('A/D/G/pi', 'A/mu', status='M ', treeconflict='C')
expected_status.tweak('A/D/H', status=' M', treeconflict='C')
- ### A/B/E gets both a property and tree conflict flagged. Is this OK?
- expected_status.tweak('A/B/E', status=' C', treeconflict='C')
+ expected_status.tweak('A/B/E', status=' M', treeconflict='C')
actions.run_and_verify_status(wc_dir, expected_status)
#----------------------------------------------------------------------
-@XFail()
@Issue(3806)
def merge_replace_causes_tree_conflict2(sbox):
"replace vs. delete tree-conflicts"
@@ -1825,19 +1781,19 @@ def merge_replace_causes_tree_conflict2(sbox):
'A/D/H', 'A/D/H/chi', 'A/D/H/omega', 'A/D/H/psi',
status='D ')
+ # H is now a file. This hides the status of the descendants.
+ expected_status.remove('A/D/H/chi', 'A/D/H/psi', 'A/D/H/omega')
+
# Merge them one by one to see all the errors.
### A file-with-file replacement onto a deleted file.
# svn merge $URL/A/mu $URL/branch/mu A/mu
- expected_stdout = verify.UnorderedOutput([
- "--- Merging differences between repository URLs into '" + A + "':\n",
- ' C ' + A_mu + '\n',
- "--- Recording mergeinfo for merge between repository URLs into '" +
- A + "':\n",
- " U " + A + "\n",
- 'Summary of conflicts:\n',
- ' Tree conflicts: 1\n',
- ])
+ expected_stdout = expected_merge_output(None, [
+ ' C ' + A_mu + '\n', # merge
+ 'A ' + A_mu + '\n', # merge
+ " U " + A + "\n", # mergeinfo
+ " U " + A_mu + "\n", # mergeinfo -> 'RM' status
+ ], target=A, two_url=True, tree_conflicts=1)
actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'merge',
url_A, url_branch, A, '--depth=files')
@@ -1848,20 +1804,16 @@ def merge_replace_causes_tree_conflict2(sbox):
#
# D C merge_tree_conflict_tests-23\A\mu
# > local delete, incoming replace upon merge
- expected_status.tweak('A/mu', status='R ', wc_rev='-', copied='+',
+ expected_status.tweak('A/mu', status='RM', wc_rev='-', copied='+',
treeconflict='C')
### A dir-with-dir replacement onto a deleted directory.
# svn merge $URL/A/B $URL/branch/B A/B
- expected_stdout = verify.UnorderedOutput([
- "--- Merging differences between repository URLs into '" + A_B + "':\n",
- ' C ' + A_B_E + '\n',
- "--- Recording mergeinfo for merge between repository URLs into '" +
- A_B + "':\n",
- " U " + A_B + "\n",
- 'Summary of conflicts:\n',
- ' Tree conflicts: 1\n',
- ])
+ expected_stdout = expected_merge_output(None, [
+ ' C ' + A_B_E + '\n', # merge
+ 'A ' + A_B_E + '\n', # merge
+ " U " + A_B + "\n", # mergeinfo
+ ], target=A_B, two_url=True, tree_conflicts=1)
actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'merge',
url_A_B, url_branch_B, A_B)
@@ -1877,16 +1829,11 @@ def merge_replace_causes_tree_conflict2(sbox):
### A dir-with-file replacement onto a deleted directory.
# svn merge --depth=immediates $URL/A/D $URL/branch/D A/D
- expected_stdout = verify.UnorderedOutput([
- "--- Merging differences between repository URLs into '" + A_D + "':\n",
- ' C ' + A_D_H + '\n',
- "--- Recording mergeinfo for merge between repository URLs into '" +
- A_D + "':\n",
- " U " + A_D + "\n",
- " U " + A_D_G + "\n",
- 'Summary of conflicts:\n',
- ' Tree conflicts: 1\n',
- ])
+ expected_stdout = expected_merge_output(None, [
+ ' C ' + A_D_H + '\n', # merge
+ 'A ' + A_D_H + '\n', # merge
+ " U " + A_D + "\n", # mergeinfo
+ ], target=A_D, two_url=True, tree_conflicts=1)
actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'merge',
'--depth=immediates', url_A_D, url_branch_D, A_D)
@@ -1902,20 +1849,11 @@ def merge_replace_causes_tree_conflict2(sbox):
### A file-with-dir replacement onto a deleted file.
# svn merge $URL/A/D/G $URL/branch/D/G A/D/G
- expected_stdout = verify.UnorderedOutput([
- "--- Merging differences between repository URLs into '" + A_D_G +
- "':\n",
- ' C ' + A_D_G_pi + '\n',
- "--- Recording mergeinfo for merge between repository URLs into '" +
- A_D_G + "':\n",
- "--- Eliding mergeinfo from '" + A_D_G_pi + "':\n",
- " U " + A_D_G_pi + "\n",
- "--- Eliding mergeinfo from '" + A_D_G_pi + "':\n",
- " U " + A_D_G_pi + "\n",
- " G " + A_D_G + "\n",
- 'Summary of conflicts:\n',
- ' Tree conflicts: 1\n',
- ])
+ expected_stdout = expected_merge_output(None, [
+ ' C ' + A_D_G_pi + '\n', # merge
+ 'A ' + A_D_G_pi + '\n', # merge
+ " U " + A_D_G + "\n", # mergeinfo
+ ], target=A_D_G, two_url=True, tree_conflicts=1)
actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'merge',
url_A_D_G, url_branch_D_G, A_D_G)
@@ -1934,12 +1872,194 @@ def merge_replace_causes_tree_conflict2(sbox):
# Check the tree conflict types:
expected_stdout = '(R.*)|(Summary of conflicts.*)|( Tree conflicts.*)' \
- '|(.*local delete, incoming replace upon merge.*)'
+ '|(.*local delete, incoming replace upon merge.*)' \
+ '|( \>.*)'
tree_conflicted_path = [A_B_E, A_mu, A_D_G_pi, A_D_H]
for path in tree_conflicted_path:
actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'st',
'--depth=empty', path)
+#----------------------------------------------------------------------
+# Test for issue #4011 'merge of replacement on local delete fails'
+@SkipUnless(server_has_mergeinfo)
+@Issue(4011)
+def merge_replace_on_del_fails(sbox):
+ "merge replace on local delete fails"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ C_path = os.path.join(wc_dir, 'A', 'C')
+ branch_path = os.path.join(wc_dir, 'branch')
+ C_branch_path = os.path.join(wc_dir, 'branch', 'C')
+
+ # r2 - Copy ^/A to ^/branch
+ svntest.actions.run_and_verify_svn(None, None, [], 'copy',
+ sbox.repo_url + '/A',
+ sbox.repo_url + '/branch',
+ '-m', 'Create a branch')
+
+ # r3 - Replace A/C
+ svntest.actions.run_and_verify_svn(None, None, [], 'del', C_path)
+ svntest.actions.run_and_verify_svn(None, None, [], 'mkdir', C_path)
+ svntest.actions.run_and_verify_svn(None, None, [], 'ci',
+ '-m', 'Replace A/C', wc_dir)
+
+ # r4 - Delete branch/C
+ svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+ svntest.actions.run_and_verify_svn(None, None, [], 'del', C_branch_path)
+ svntest.actions.run_and_verify_svn(None, None, [], 'ci',
+ '-m', 'Delete branch/C', wc_dir)
+
+ # Sync merge ^/A to branch
+ svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+ expected_stdout = expected_merge_output([[2,4]], [
+ ' C ' + C_branch_path + '\n', # merge
+ ' U ' + branch_path + '\n', # mergeinfo
+ ], target=branch_path, tree_conflicts=1)
+ # This currently fails with:
+ #
+ # >svn merge ^/A branch
+ # ..\..\..\subversion\svn\util.c:913: (apr_err=155010)
+ # ..\..\..\subversion\libsvn_client\merge.c:11349: (apr_err=155010)
+ # ..\..\..\subversion\libsvn_client\merge.c:11303: (apr_err=155010)
+ # ..\..\..\subversion\libsvn_client\merge.c:11303: (apr_err=155010)
+ # ..\..\..\subversion\libsvn_client\merge.c:11273: (apr_err=155010)
+ # ..\..\..\subversion\libsvn_client\merge.c:9287: (apr_err=155010)
+ # ..\..\..\subversion\libsvn_client\merge.c:8870: (apr_err=155010)
+ # ..\..\..\subversion\libsvn_client\merge.c:5349: (apr_err=155010)
+ # ..\..\..\subversion\libsvn_repos\reporter.c:1430: (apr_err=155010)
+ # ..\..\..\subversion\libsvn_client\ra.c:247: (apr_err=155010)
+ # ..\..\..\subversion\libsvn_repos\reporter.c:1269: (apr_err=155010)
+ # ..\..\..\subversion\libsvn_repos\reporter.c:1205: (apr_err=155010)
+ # ..\..\..\subversion\libsvn_repos\reporter.c:920: (apr_err=155010)
+ # ..\..\..\subversion\libsvn_delta\cancel.c:120: (apr_err=155010)
+ # ..\..\..\subversion\libsvn_delta\cancel.c:120: (apr_err=155010)
+ # ..\..\..\subversion\libsvn_client\repos_diff.c:710: (apr_err=155010)
+ # ..\..\..\subversion\libsvn_client\merge.c:2234: (apr_err=155010)
+ # ..\..\..\subversion\libsvn_wc\adm_ops.c:1069: (apr_err=155010)
+ # ..\..\..\subversion\libsvn_wc\adm_ops.c:956: (apr_err=155010)
+ # ..\..\..\subversion\libsvn_wc\update_editor.c:5036: (apr_err=155010)
+ # ..\..\..\subversion\libsvn_wc\wc_db.c:6985: (apr_err=155010)
+ # ..\..\..\subversion\libsvn_wc\wc_db.c:6929: (apr_err=155010)
+ # ..\..\..\subversion\libsvn_wc\wc_db.c:6920: (apr_err=155010)
+ # svn: E155010: The node 'C:\SVN\src-trunk\Debug\subversion\tests\
+ # cmdline\svn-test-work\working_copies\merge_tree_conflict_tests-24\
+ # branch\C' was not found.
+ actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'merge',
+ sbox.repo_url + '/A', branch_path)
+
+def merge_obstruction_recording(sbox):
+ "merge obstruction recording"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ sbox.simple_rm('iota', 'A')
+ sbox.simple_mkdir('trunk')
+ sbox.simple_mkdir('branches')
+ sbox.simple_commit() #r2
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'copy', sbox.repo_url + '/trunk',
+ sbox.repo_url + '/branches/branch',
+ '-mCopy') # r3
+
+ sbox.simple_mkdir('trunk/dir')
+ sbox.simple_add_text('The file on trunk\n', 'trunk/dir/file.txt')
+ sbox.simple_commit() #r4
+
+ sbox.simple_update()
+
+ sbox.simple_mkdir('branches/branch/dir')
+ sbox.simple_add_text('The file on branch\n', 'branches/branch/dir/file.txt')
+ sbox.simple_commit() #r5
+
+ sbox.simple_update()
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'switch', '^/branches/branch', wc_dir,
+ '--ignore-ancestry')
+
+ expected_output = wc.State(wc_dir, {
+ 'dir' : Item(status=' ', treeconflict='C'),
+ 'dir/file.txt' : Item(status=' ', treeconflict='A'),
+ })
+ expected_mergeinfo_output = wc.State(wc_dir, {
+ '' : Item(status=' U'),
+ 'dir' : Item(status=' U'), # Because dir already exists
+ })
+ expected_elision_output = wc.State(wc_dir, {
+ })
+ expected_disk = wc.State('', {
+ 'dir/file.txt' : Item(contents="The file on branch\n"),
+ 'dir' : Item(props={'svn:mergeinfo':''}),
+ '.' : Item(props={'svn:mergeinfo':'/trunk:3-5'}),
+ })
+ expected_status = wc.State(wc_dir, {
+ '' : Item(status=' M', wc_rev='5'),
+ 'dir' : Item(status=' M', treeconflict='C', wc_rev='5'),
+ 'dir/file.txt' : Item(status=' ', wc_rev='5'),
+ })
+ expected_skip = wc.State('', {
+ })
+ svntest.actions.run_and_verify_merge(wc_dir, '2', '5', sbox.repo_url + '/trunk',
+ None,
+ expected_output,
+ expected_mergeinfo_output,
+ expected_elision_output,
+ expected_disk,
+ expected_status,
+ expected_skip,
+ check_props=True)
+ expected_info = [
+ {
+ "Path" : re.escape(sbox.ospath('dir')),
+ "Tree conflict": re.escape(
+ 'local dir obstruction, incoming dir add upon merge' +
+ ' Source left: (dir) ^/trunk/dir@2' + # Should be '(none)'
+ ' Source right: (dir) ^/trunk/dir@5')
+ },
+ ]
+
+ svntest.actions.run_and_verify_info(expected_info, sbox.ospath('dir'))
+
+ # How should the user handle this conflict?
+ # ### Would be nice if we could just accept mine (leave as is, fix mergeinfo)
+ # ### or accept theirs (delete what is here and insert copy
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'resolve', '--accept=working',
+ sbox.ospath('dir'))
+
+ # Redo the skipped merge as record only merge
+ expected_output = [
+ '--- Recording mergeinfo for merge of r5 into \'%s\':\n' % \
+ sbox.ospath('dir'),
+ ' G %s\n' % sbox.ospath('dir'),
+ ]
+ # ### Why are r1-r3 not recorded?
+ # ### Guess: Because dir's history only exists since r4.
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'merge', '--record-only',
+ sbox.repo_url + '/trunk/dir',
+ sbox.ospath('dir'),
+ '-c', '2-5')
+
+ expected_disk = wc.State('', {
+ 'dir' : Item(props={'svn:mergeinfo':'/trunk/dir:5'}),
+ 'dir/file.txt' : Item(contents="The file on branch\n"),
+ '.' : Item(props={'svn:mergeinfo':'/trunk:3-5'}),
+ })
+ svntest.actions.verify_disk(wc_dir, expected_disk, check_props=True)
+
+ # Because r2-r4 are not recorded, the mergeinfo is not elided :(
+
+ # Even something like a two url merge wouldn't work, because dir
+ # didn't exist below trunk in r2 either.
+
+ # A resolver action could be smarter though...
+
+
########################################################################
# Run the tests
@@ -1969,6 +2089,8 @@ test_list = [ None,
tree_conflicts_merge_del_onto_missing,
merge_replace_causes_tree_conflict,
merge_replace_causes_tree_conflict2,
+ merge_replace_on_del_fails,
+ merge_obstruction_recording,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/mergeinfo_tests.py b/subversion/tests/cmdline/mergeinfo_tests.py
index 2766d67..adb7925 100755
--- a/subversion/tests/cmdline/mergeinfo_tests.py
+++ b/subversion/tests/cmdline/mergeinfo_tests.py
@@ -68,8 +68,12 @@ def no_mergeinfo(sbox):
"'mergeinfo' on a URL that lacks mergeinfo"
sbox.build(create_wc=False)
+ sbox.simple_repo_copy('A', 'A2')
svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""),
- [], sbox.repo_url, sbox.repo_url)
+ [],
+ sbox.repo_url + '/A',
+ sbox.repo_url + '/A2',
+ "--show-revs=merged")
def mergeinfo(sbox):
"'mergeinfo' on a path with mergeinfo"
@@ -77,41 +81,70 @@ def mergeinfo(sbox):
sbox.build()
wc_dir = sbox.wc_dir
+ # make a branch 'A2'
+ sbox.simple_repo_copy('A', 'A2') # r2
+ # make a change in branch 'A'
+ sbox.simple_mkdir('A/newdir')
+ sbox.simple_commit() # r3
+ sbox.simple_update()
+
# Dummy up some mergeinfo.
- svntest.actions.run_and_verify_svn(None, None, [], 'ps', SVN_PROP_MERGEINFO,
- '/:1', wc_dir)
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'ps', SVN_PROP_MERGEINFO, '/A:3',
+ sbox.ospath('A2'))
svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""),
- ['1'], sbox.repo_url, wc_dir)
+ ['3'],
+ sbox.repo_url + '/A',
+ sbox.ospath('A2'),
+ "--show-revs=merged")
@SkipUnless(server_has_mergeinfo)
def explicit_mergeinfo_source(sbox):
"'mergeinfo' with source selection"
+ # The idea is the target has mergeinfo pertaining to two or more different
+ # source branches and we're asking about just one of them.
+
sbox.build()
- wc_dir = sbox.wc_dir
- H_path = os.path.join(wc_dir, 'A', 'D', 'H')
- H2_path = os.path.join(wc_dir, 'A', 'D', 'H2')
- B_url = sbox.repo_url + '/A/B'
- B_path = os.path.join(wc_dir, 'A', 'B')
- G_url = sbox.repo_url + '/A/D/G'
- G_path = os.path.join(wc_dir, 'A', 'D', 'G')
- H2_url = sbox.repo_url + '/A/D/H2'
- # Make a copy, and dummy up some mergeinfo.
- mergeinfo = '/A/B:1\n/A/D/G:1\n'
- svntest.actions.set_prop(SVN_PROP_MERGEINFO, mergeinfo, H_path)
- svntest.main.run_svn(None, "cp", H_path, H2_path)
- svntest.main.run_svn(None, "ci", "-m", "r2", wc_dir)
+ def url(relpath):
+ return sbox.repo_url + '/' + relpath
+ def path(relpath):
+ return sbox.ospath(relpath)
+
+ B = 'A/B'
+
+ # make some branches
+ B2 = 'A/B2'
+ B3 = 'A/B3'
+ sbox.simple_repo_copy(B, B2) # r2
+ sbox.simple_repo_copy(B, B3) # r3
+ sbox.simple_update()
+
+ # make changes in the branches
+ sbox.simple_mkdir('A/B2/newdir')
+ sbox.simple_commit() # r4
+ sbox.simple_mkdir('A/B3/newdir')
+ sbox.simple_commit() # r5
+
+ # Put dummy mergeinfo on branch root
+ mergeinfo = '/A/B2:2-5\n/A/B3:2-5\n'
+ sbox.simple_propset(SVN_PROP_MERGEINFO, mergeinfo, B)
+ sbox.simple_commit()
# Check using each of our recorded merge sources (as paths and URLs).
svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""),
- ['1'], B_url, H_path)
+ ['2', '4'], url(B2), path(B),
+ "--show-revs=merged")
svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""),
- ['1'], B_path, H_path)
+ ['2', '4'], path(B2), path(B),
+ "--show-revs=merged")
svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""),
- ['1'], G_url, H_path)
+ ['3', '5'], url(B3), path(B),
+ "--show-revs=merged")
svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""),
- ['1'], G_path, H_path)
+ ['3', '5'], path(B3), path(B),
+ "--show-revs=merged")
@SkipUnless(server_has_mergeinfo)
def mergeinfo_non_source(sbox):
@@ -135,7 +168,8 @@ def mergeinfo_non_source(sbox):
# Check on a source we haven't "merged" from.
svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""),
- [], H2_url, H_path)
+ [], H2_url, H_path,
+ "--show-revs=merged")
#----------------------------------------------------------------------
# Issue #3138
@@ -211,7 +245,8 @@ def non_inheritable_mergeinfo(sbox):
svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""),
['4','6*'],
sbox.repo_url + '/A',
- A_COPY_path)
+ A_COPY_path,
+ '--show-revs', 'merged')
svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""),
['3','5','6*'],
sbox.repo_url + '/A',
@@ -222,7 +257,8 @@ def non_inheritable_mergeinfo(sbox):
svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""),
['4'],
sbox.repo_url + '/A/D',
- D_COPY_path)
+ D_COPY_path,
+ '--show-revs', 'merged')
svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""),
['3','6'],
sbox.repo_url + '/A/D',
@@ -348,6 +384,14 @@ def recursive_mergeinfo(sbox):
sbox.repo_url + '/A2',
sbox.repo_url + '/A_COPY',
'--show-revs', 'eligible', '-R')
+ # Do the same as above, but test that we can request the revisions
+ # in reverse order.
+ svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""),
+ ['8*', '4*', '3'],
+ sbox.repo_url + '/A2',
+ sbox.repo_url + '/A_COPY',
+ '--show-revs', 'eligible', '-R',
+ '-r', '9:0')
# Asking for merged revisions from A2 to A_COPY should show:
#
@@ -370,6 +414,15 @@ def recursive_mergeinfo(sbox):
A_COPY_path,
'--show-revs', 'merged',
'--depth', 'infinity')
+ # Do the same as above, but test that we can request the revisions
+ # in reverse order.
+ svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""),
+ ['8*', '6', '5', '4*'],
+ A2_path,
+ A_COPY_path,
+ '--show-revs', 'merged',
+ '--depth', 'infinity',
+ '-r', '9:0')
# A couple tests of problems found with initial issue #3242 fixes.
# We should be able to check for the merged revs from a URL to a URL
@@ -505,7 +558,7 @@ def wc_target_inherits_mergeinfo_from_repos(sbox):
gamma_2_path = os.path.join(wc_dir, 'A_COPY_2', 'D', 'gamma')
tau_path = os.path.join(wc_dir, 'A', 'D', 'G', 'tau')
D_COPY_path = os.path.join(wc_dir, 'A_COPY', 'D')
-
+
# Merge -c5 ^/A/D/G/rho A_COPY\D\G\rho
# Merge -c7 ^/A A_COPY
# Commit as r8
@@ -538,7 +591,7 @@ def wc_target_inherits_mergeinfo_from_repos(sbox):
# Check the merged and eligible revisions both recursively and
# non-recursively.
- # Eligible : Non-recursive
+ # Eligible : Non-recursive
svntest.actions.run_and_verify_mergeinfo(
adjust_error_for_server_version(''),
['4','5'], sbox.repo_url + '/A/D', subtree_wc,
@@ -591,7 +644,7 @@ def wc_target_inherits_mergeinfo_from_repos(sbox):
svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m',
'Merge r8 from A_COPY_2 to A_COPY',
wc_dir)
-
+
def test_svn_mergeinfo_4_way(wc_target):
# Eligible : Non-recursive
svntest.actions.run_and_verify_mergeinfo(
@@ -684,8 +737,8 @@ def natural_history_is_not_eligible_nor_merged(sbox):
# ranges as partially merged".
@Issue(4050)
@SkipUnless(server_has_mergeinfo)
-def noninheritabled_mergeinfo_not_always_eligible(sbox):
- "noninheritabled mergeinfo not always eligible"
+def noninheritable_mergeinfo_not_always_eligible(sbox):
+ "noninheritable mergeinfo not always eligible"
sbox.build()
wc_dir = sbox.wc_dir
@@ -706,15 +759,14 @@ def noninheritabled_mergeinfo_not_always_eligible(sbox):
svntest.actions.run_and_verify_svn(None, None, [], 'merge',
sbox.repo_url + '/A', branch_path,
'-c3', '--depth=empty')
+ # Forcibly set non-inheritable mergeinfo to replicate the pre-1.8 behavior,
+ # where prior to the fix for issue #4057, non-inheritable mergeinfo was
+ # unconditionally set for merges with shallow operational depths.
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'propset', SVN_PROP_MERGEINFO,
+ '/A:3*\n', branch_path)
svntest.main.run_svn(None, 'commit', '-m', 'shallow merge', wc_dir)
- # A sanity check that we really have non-inheritable mergeinfo.
- # If issue #4057 is ever fixed then the above merge will record
- # inheritable mergeinfo and this test will spuriously pass.
- svntest.actions.run_and_verify_svn(None, ["/A:3*\n"], [],
- 'propget', SVN_PROP_MERGEINFO,
- branch_path)
-
# Now check that r3 is reported as fully merged from ^/A to ^/branch
# and does not show up all when asking for eligible revs.
svntest.actions.run_and_verify_mergeinfo(
@@ -744,7 +796,7 @@ test_list = [ None,
mergeinfo_on_pegged_wc_path,
wc_target_inherits_mergeinfo_from_repos,
natural_history_is_not_eligible_nor_merged,
- noninheritabled_mergeinfo_not_always_eligible,
+ noninheritable_mergeinfo_not_always_eligible,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/move_tests.py b/subversion/tests/cmdline/move_tests.py
new file mode 100755
index 0000000..4495b59
--- /dev/null
+++ b/subversion/tests/cmdline/move_tests.py
@@ -0,0 +1,1558 @@
+#!/usr/bin/env python
+#
+# move_tests.py: testing the local move tracking
+#
+# Subversion is a tool for revision control.
+# See http://subversion.apache.org for more information.
+#
+# ====================================================================
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+######################################################################
+
+
+# General modules
+import os, re, logging
+
+logger = logging.getLogger()
+
+# Our testing module
+import svntest
+from svntest import wc, actions, verify
+
+# (abbreviation)
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
+Item = svntest.wc.StateItem
+exp_noop_up_out = svntest.actions.expected_noop_update_output
+
+def build_incoming_changes_file(sbox, source, dest):
+ "Build up revs to receive incoming changes over our local file move"
+
+ # r1 = greek tree sandbox
+
+ # r2 = Modify source of moved file
+ sbox.simple_append(source, "modified\n")
+ sbox.simple_commit(message="Modify source of moved file")
+
+ # r3 = Delete source of moved file
+ sbox.simple_rm(source)
+ sbox.simple_commit(message="Delete source of moved file")
+
+ # r4 = Replace source of moved file
+ # To get a replace update from r2 to r4.
+ sbox.simple_add_text("This is the replaced file.\n", source)
+ sbox.simple_commit(message="Replace source of moved file")
+
+ # r5 = Add destination of moved file
+ sbox.simple_add_text("This is the destination file.\n", dest)
+ sbox.simple_commit(message="Add destination of moved file")
+
+ # r6 = Modify destination of moved file
+ sbox.simple_append(dest, "modified\n")
+ sbox.simple_commit(message="Modify destination of moved file")
+
+ # r7 = Delete destination of moved file
+ sbox.simple_rm(dest)
+ sbox.simple_commit(message="Delete destination of moved file")
+
+ # r8 = Copy destination of moved file
+ sbox.simple_copy('A/mu', dest)
+ sbox.simple_commit(message="Copy destination of moved file")
+
+ # r9 = Replace destination of moved file
+ sbox.simple_rm(dest)
+ sbox.simple_add_text("This is the destination file.\n", dest)
+ sbox.simple_commit(message="Replace destination of moved file")
+
+ # r10 = Add property on destination of moved file.
+ sbox.simple_propset("foo", "bar", dest)
+ sbox.simple_commit(message="Add property on destination of moved file")
+
+ # r11 = Modify property on destination of moved file.
+ sbox.simple_propset("foo", "baz", dest)
+ sbox.simple_commit(message="Modify property on destination of moved file")
+
+ # r12 = Delete property on destination of moved file.
+ sbox.simple_propdel("foo", dest)
+ sbox.simple_commit(message="Delete property on destination of moved file")
+
+ # r13 = Remove destination again (not needed for any test just cleanup).
+ sbox.simple_rm(dest)
+ sbox.simple_commit(message="Remove destination (cleanup)")
+
+ # r14 = Add property on source of moved file.
+ sbox.simple_propset("foo", "bar", source)
+ sbox.simple_commit(message="Add property on source of moved file")
+
+ # r15 = Modify property on source of moved file.
+ sbox.simple_propset("foo", "baz", source)
+ sbox.simple_commit(message="Modify property on source of moved file")
+
+ # r16 = Delete property on source of moved file.
+ sbox.simple_propdel("foo", source)
+ sbox.simple_commit(message="Delete property on source of moved file")
+
+ # r17 = Move that is identical to our local move.
+ sbox.simple_move(source, dest)
+ sbox.simple_commit(message="Identical move to our local move")
+
+def move_file_test(sbox, source, dest, move_func, test):
+ """Execute a series of actions to test local move tracking. sbox is the
+ sandbox we're working in, source is the source of the move, dest is the
+ destination for the move and tests is various other parameters of the move
+ testing. In particular:
+ start_rev: revision to update to before starting
+ start_output: validate the output of the start update against this.
+ start_disk: validate the on disk state after the start update against this.
+ start_status: validate the wc status after the start update against this.
+ end_rev: revision to update to, bringing in some update you want to test.
+ up_output: validate the output of the end update agianst this.
+ up_disk: validate the on disk state after the end update against this.
+ up_status: validate the wc status after the end update against this.
+ revert_paths: validate the paths reverted.
+ resolves: A directory of resolve accept arguments to test, the whole test will
+ be run for each. The value is a directory with the following keys:
+ output: validate the output of the resolve command against this.
+ error: validate the error of the resolve command against this.
+ status: validate the wc status after the resolve against this.
+ revert_paths: override the paths reverted check in the test."""
+
+ wc_dir = sbox.wc_dir
+
+ source_path = sbox.ospath(source)
+ dest_path = sbox.ospath(dest)
+
+ # Deal with if there's no resolves key, as in we're not going to
+ # do a resolve.
+ if not 'resolves' in test or not test['resolves']:
+ test['resolves'] = {None: None}
+
+ # Do the test for every type of resolve provided.
+ for resolve_accept in test['resolves'].keys():
+
+ # update to start_rev
+ svntest.actions.run_and_verify_update(wc_dir, test['start_output'],
+ test['start_disk'], test['start_status'],
+ None, None, None, None, None, False,
+ '-r', test['start_rev'], wc_dir)
+ # execute the move
+ move_func(test['start_rev'])
+
+ # update to end_rev, which will create a conflict
+ # TODO: Limit the property checks to only when we're doing something with
+ # properties.
+ svntest.actions.run_and_verify_update(wc_dir, test['up_output'],
+ test['up_disk'], test['up_status'],
+ None, None, None, None, None, True,
+ '-r', test['end_rev'], wc_dir)
+
+ revert_paths = None
+ if 'revert_paths' in test:
+ revert_paths = test['revert_paths']
+
+ # resolve the conflict
+ # TODO: Switch to using run_and_verify_resolve, can't use it right now because
+ # it's not friendly with the output of resolutions right now.
+ if resolve_accept:
+ resolve = test['resolves'][resolve_accept]
+ if not 'output' in resolve:
+ resolve['output'] = None
+ if not 'error' in resolve:
+ resolve['error'] = []
+ if not 'disk' in resolve:
+ resolve['disk'] = None
+ if 'revert_paths' in resolve:
+ revert_paths = resolve['revert_paths']
+ svntest.actions.run_and_verify_svn('Resolve modification to source of move',
+ resolve['output'], resolve['error'],
+ 'resolve', '--accept', resolve_accept,
+ '-R', wc_dir)
+
+ # TODO: This should be moved into the run_and_verify_resolve mentioned
+ # above.
+ if resolve['status']:
+ svntest.actions.run_and_verify_status(wc_dir, resolve['status'])
+
+ # TODO: This should be moved into the run_and_verify_resolve mentioned
+ # above.
+ if resolve['disk']:
+ svntest.actions.verify_disk(wc_dir, resolve['disk'], True)
+
+ # revert to preprare for the next test
+ svntest.actions.run_and_verify_revert(revert_paths, '-R', wc_dir)
+
+# tests is an array of test dictionaries that move_file_test above will take
+def move_file_tests(sbox, source, dest, move_func, tests):
+ for test in tests:
+ move_file_test(sbox, source, dest, move_func, test)
+
+def build_simple_file_move_tests(sbox, source, dest):
+ """Given a sandbox, source and destination build the array of tests for
+ a file move"""
+
+ wc_dir = sbox.wc_dir
+ source_path = sbox.ospath(source)
+ dest_path = sbox.ospath(dest)
+
+ # Build the tests list
+ tests = []
+
+ # move and update with incoming change to source (r1-2).
+ test = {}
+ test['start_rev'] = 1
+ test['end_rev'] = 2
+ test['start_output'] = None
+ test['start_disk'] = None
+ test['start_status'] = None
+ test['up_output'] = svntest.wc.State(wc_dir, {
+ source : Item(status=' ', treeconflict='C'),
+ })
+ test['up_disk'] = svntest.main.greek_state.copy()
+ test['up_disk'].add({
+ dest: Item("This is the file 'lambda'.\n")
+ })
+ test['up_disk'].remove(source)
+ test['up_status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ test['up_status'].tweak(source, status='D ', moved_to=dest,
+ treeconflict='C')
+ test['up_status'].add({dest: Item(status='A ', moved_from=source,
+ copied='+', wc_rev='-')})
+ mc = {}
+ mc['output'] = svntest.verify.ExpectedOutput(
+ "Resolved conflicted state of '%s'\n" % source_path, match_all=False
+ )
+ mc['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ mc['status'].tweak(source, status='D ', moved_to=dest)
+ mc['status'].add({dest: Item(status='A ', moved_from=source,
+ copied='+', wc_rev='-')})
+ mc['disk'] = test['up_disk'].copy()
+ mc['disk'].tweak(dest, contents="This is the file 'lambda'.\nmodified\n")
+ # theirs-conflict doesn't work
+ tc = {}
+ tc['error'] = svntest.verify.RegexOutput(".*: .*: W155027:.*", match_all=False)
+ tc['status'] = test['up_status']
+ tc['disk'] = test['up_disk']
+ # working breaks the move
+ working = {}
+ working['output'] = svntest.verify.ExpectedOutput(
+ [
+ "Breaking move with source path '%s'\n" % source_path,
+ "Resolved conflicted state of '%s'\n" % source_path,
+ ]
+ )
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'].tweak(source, status='D ')
+ working['status'].add({dest: Item(status='A ', copied='+', wc_rev='-')})
+ working['disk'] = test['up_disk']
+ test['resolves'] = {'mine-conflict': mc, 'theirs-conflict': tc,
+ 'working': working}
+ test['revert_paths'] = [source_path, dest_path]
+ tests.append(test)
+
+ # move and update with incoming deletion of source (r2-3)
+ test = {}
+ test['start_rev'] = 2
+ test['end_rev'] = 3
+ test['start_output'] = None
+ test['start_disk'] = None
+ test['start_status'] = None
+ test['up_output'] = svntest.wc.State(wc_dir, {
+ source : Item(status=' ', treeconflict='C'),
+ })
+ test['up_disk'] = svntest.main.greek_state.copy()
+ test['up_disk'].add({
+ dest: Item("This is the file 'lambda'.\nmodified\n")
+ })
+ test['up_disk'].remove(source)
+ test['up_status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ test['up_status'].tweak(source, status='! ', treeconflict='C', wc_rev=None)
+ test['up_status'].add({dest: Item(status='A ', copied='+', wc_rev='-')})
+ # mine-conflict and theirs-conflict don't work.
+ mc = {}
+ mc['error'] = svntest.verify.RegexOutput(".*: .*: W155027:.*", match_all=False)
+ mc['status'] = test['up_status']
+ mc['disk'] = test['up_disk']
+ tc = {}
+ tc['error'] = svntest.verify.RegexOutput(".*: .*: W155027:.*", match_all=False)
+ tc['status'] = test['up_status']
+ tc['disk'] = test['up_disk']
+ working = {}
+ # XXX: Doesn't say it broke the move it should.
+ working['output'] = svntest.verify.ExpectedOutput(
+ "Resolved conflicted state of '%s'\n" % source_path, match_all=False
+ )
+ # move is broken now
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'].add({dest: Item(status='A ', copied='+', wc_rev='-')})
+ working['status'].remove(source)
+ working['disk'] = test['up_disk']
+ working['revert_paths'] = [dest_path]
+ test['resolves'] = {'mine-conflict': mc, 'theirs-conflict': tc,
+ 'working': working}
+ test['revert_paths'] = [dest_path, source_path]
+ tests.append(test)
+
+ # move and update with incoming replacement of source (r2-4)
+ test = {}
+ test['start_rev'] = 2
+ test['end_rev'] = 4
+ test['start_output'] = None
+ test['start_disk'] = None
+ test['start_status'] = None
+ test['up_output'] = svntest.wc.State(wc_dir, {
+ source : Item(status=' ', prev_status=' ', treeconflict='A',
+ prev_treeconflict='C'),
+ })
+ test['up_disk'] = svntest.main.greek_state.copy()
+ test['up_disk'].add({
+ dest: Item("This is the file 'lambda'.\nmodified\n")
+ })
+ test['up_disk'].remove(source)
+ test['up_status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ # XXX: Is entry_status=' ' really right here?
+ test['up_status'].tweak(source, status='! ', treeconflict='C', entry_status=' ')
+ test['up_status'].add({dest: Item(status='A ', copied='+', wc_rev='-')})
+ # mine-conflict and theirs-conflict don't work.
+ mc = {}
+ mc['error'] = svntest.verify.RegexOutput(".*: .*: W155027:.*", match_all=False)
+ mc['status'] = test['up_status']
+ mc['disk'] = test['up_disk']
+ tc = {}
+ tc['error'] = svntest.verify.RegexOutput(".*: .*: W155027:.*", match_all=False)
+ tc['status'] = test['up_status']
+ tc['disk'] = test['up_disk']
+ working = {}
+ # XXX: Broke the move but doesn't notify that it does.
+ working['output'] = svntest.verify.ExpectedOutput(
+ "Resolved conflicted state of '%s'\n" % source_path, match_all=False
+ )
+ # XXX: Not sure this status is really correct here
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'].tweak(source, status='! ')
+ working['status'].add({dest: Item(status='A ', copied='+', wc_rev='-')})
+ working['disk'] = test['up_disk']
+ test['resolves'] = {'mine-conflict': mc, 'theirs-conflict': tc,
+ 'working': working}
+ test['revert_paths'] = [source_path, dest_path]
+ tests.append(test)
+
+ # move and update with incoming add of dest (r4-5)
+ test = {}
+ test['start_rev'] = 4
+ test['end_rev'] = 5
+ test['start_output'] = None
+ test['start_disk'] = None
+ test['start_status'] = None
+ test['up_output'] = svntest.wc.State(wc_dir, {
+ dest : Item(status=' ', treeconflict='C'),
+ })
+ test['up_disk'] = svntest.main.greek_state.copy()
+ test['up_disk'].add({
+ dest: Item("This is the replaced file.\n")
+ })
+ test['up_disk'].remove(source)
+ test['up_status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ test['up_status'].tweak(source, status='D ', moved_to=dest)
+ test['up_status'].add({dest: Item(status='R ', copied='+', treeconflict='C',
+ wc_rev='-', moved_from=source)})
+ # mine-conflict and theirs-conflict don't work.
+ mc = {}
+ mc['error'] = svntest.verify.RegexOutput(".*: .*: W155027:.*", match_all=False)
+ mc['status'] = test['up_status']
+ mc['disk'] = test['up_disk']
+ tc = {}
+ tc['error'] = svntest.verify.RegexOutput(".*: .*: W155027:.*", match_all=False)
+ tc['status'] = test['up_status']
+ tc['disk'] = test['up_disk']
+ working = {}
+ # XXX: Doesn't say what it did.
+ working['output'] = svntest.verify.ExpectedOutput(
+ "Resolved conflicted state of '%s'\n" % dest_path, match_all=False
+ )
+ # working converts the move into a replacement
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'].tweak(source, status='D ', moved_to=dest)
+ working['status'].add({dest: Item(status='R ', moved_from=source,
+ copied='+', wc_rev='-')})
+ working['disk'] = test['up_disk']
+ test['resolves'] = {'mine-conflict': mc, 'theirs-conflict': tc,
+ 'working': working}
+ test['revert_paths'] = [source_path, dest_path]
+ tests.append(test)
+
+ # move and update with incoming add of dest (r4-6)
+ # we're going 4-6 because we're not testing a replacement move
+ test = {}
+ test['start_rev'] = 4
+ test['end_rev'] = 6
+ test['start_output'] = None
+ test['start_disk'] = None
+ test['start_status'] = None
+ test['up_output'] = svntest.wc.State(wc_dir, {
+ dest : Item(status=' ', treeconflict='C'),
+ })
+ test['up_disk'] = svntest.main.greek_state.copy()
+ test['up_disk'].add({
+ dest: Item("This is the replaced file.\n")
+ })
+ test['up_disk'].remove(source)
+ test['up_status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ test['up_status'].tweak(source, status='D ', moved_to=dest)
+ test['up_status'].add({dest: Item(status='R ', copied='+', treeconflict='C',
+ wc_rev='-', moved_from=source)})
+ # mine-conflict and theirs-conflict don't work.
+ mc = {}
+ mc['error'] = svntest.verify.RegexOutput(".*: .*: W155027:.*", match_all=False)
+ mc['status'] = test['up_status']
+ mc['disk'] = test['up_disk']
+ tc = {}
+ tc['error'] = svntest.verify.RegexOutput(".*: .*: W155027:.*", match_all=False)
+ tc['status'] = test['up_status']
+ tc['disk'] = test['up_disk']
+ working = {}
+ working['accept'] = 'working'
+ # XXX: Doesn't say what it did.
+ working['output'] = svntest.verify.ExpectedOutput(
+ "Resolved conflicted state of '%s'\n" % dest_path, match_all=False
+ )
+ # working converts the move into a replacement
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'].tweak(source, status='D ', moved_to=dest)
+ working['status'].add({dest: Item(status='R ', moved_from=source,
+ copied='+', wc_rev='-')})
+ working['disk'] = test['up_disk']
+ test['resolves'] = {'mine-conflict': mc, 'theirs-conflict': tc,
+ 'working': working}
+ test['revert_paths'] = [source_path, dest_path]
+ tests.append(test)
+
+ # move and update with incoming delete of dest (r4-7)
+ # Since we're not testing a replacement move the incoming delete has to
+ # be done starting from a rev where the file doesn't exist. So it ends
+ # up being a no-op update. So this test might be rather pointless.
+ test = {}
+ test['start_rev'] = 4
+ test['end_rev'] = 7
+ test['start_output'] = None
+ test['start_disk'] = None
+ test['start_status'] = None
+ test['up_output'] = svntest.wc.State(wc_dir, { })
+ test['up_disk'] = svntest.main.greek_state.copy()
+ test['up_disk'].add({
+ dest: Item("This is the replaced file.\n")
+ })
+ test['up_disk'].remove(source)
+ test['up_status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ test['up_status'].tweak(source, status='D ', moved_to=dest)
+ test['up_status'].add({dest: Item(status='A ', copied='+',
+ wc_rev='-', moved_from=source)})
+ # no conflict so no resolve.
+ test['revert_paths'] = [source_path, dest_path]
+ tests.append(test)
+
+ # move and update with incoming copy to dest (r7-8)
+ test = {}
+ test['start_rev'] = 7
+ test['end_rev'] = 8
+ test['start_output'] = None
+ test['start_disk'] = None
+ test['start_status'] = None
+ test['up_output'] = svntest.wc.State(wc_dir, {
+ dest : Item(status=' ', treeconflict='C'),
+ })
+ test['up_disk'] = svntest.main.greek_state.copy()
+ test['up_disk'].add({
+ dest: Item("This is the replaced file.\n")
+ })
+ test['up_disk'].remove(source)
+ test['up_status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ test['up_status'].tweak(source, status='D ', moved_to=dest)
+ test['up_status'].add({dest: Item(status='R ', copied='+', treeconflict='C',
+ wc_rev='-', moved_from=source)})
+ # mine-conflict and theirs-conflict don't work.
+ mc = {}
+ mc['error'] = svntest.verify.RegexOutput(".*: .*: W155027:.*", match_all=False)
+ mc['status'] = test['up_status']
+ mc['disk'] = test['up_disk']
+ tc = {}
+ tc['error'] = svntest.verify.RegexOutput(".*: .*: W155027:.*", match_all=False)
+ tc['status'] = test['up_status']
+ tc['disk'] = test['up_disk']
+ working = {}
+ # XXX: Doesn't say what it did.
+ working['output'] = svntest.verify.ExpectedOutput(
+ "Resolved conflicted state of '%s'\n" % dest_path, match_all=False
+ )
+ # working converts the move into a replacement
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'].tweak(source, status='D ', moved_to=dest)
+ working['status'].add({dest: Item(status='R ', moved_from=source,
+ copied='+', wc_rev='-')})
+ working['disk'] = test['up_disk']
+ test['resolves'] = {'mine-conflict': mc, 'theirs-conflict': tc,
+ 'working': working}
+ test['revert_paths'] = [source_path, dest_path]
+ tests.append(test)
+
+ # move and update with incoming replace to dest (r7-9)
+ test = {}
+ test['start_rev'] = 7
+ test['end_rev'] = 9
+ test['start_output'] = None
+ test['start_disk'] = None
+ test['start_status'] = None
+ test['up_output'] = svntest.wc.State(wc_dir, {
+ dest : Item(status=' ', treeconflict='C'),
+ })
+ test['up_disk'] = svntest.main.greek_state.copy()
+ test['up_disk'].add({
+ dest: Item("This is the replaced file.\n")
+ })
+ test['up_disk'].remove(source)
+ test['up_status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ test['up_status'].tweak(source, status='D ', moved_to=dest)
+ test['up_status'].add({dest: Item(status='R ', copied='+', treeconflict='C',
+ wc_rev='-', moved_from=source)})
+ # mine-conflict and theirs-conflict don't work.
+ mc = {}
+ mc['error'] = svntest.verify.RegexOutput(".*: .*: W155027:.*", match_all=False)
+ mc['status'] = test['up_status']
+ mc['disk'] = test['up_disk']
+ tc = {}
+ tc['error'] = svntest.verify.RegexOutput(".*: .*: W155027:.*", match_all=False)
+ tc['status'] = test['up_status']
+ tc['disk'] = test['up_disk']
+ working = {}
+ # XXX: Doesn't say what it did.
+ working['output'] = svntest.verify.ExpectedOutput(
+ "Resolved conflicted state of '%s'\n" % dest_path, match_all=False
+ )
+ # working converts the move into a replacement
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'].tweak(source, status='D ', moved_to=dest)
+ working['status'].add({dest: Item(status='R ', moved_from=source,
+ copied='+', wc_rev='-')})
+ working['disk'] = test['up_disk']
+ test['resolves'] = {'mine-conflict': mc, 'theirs-conflict': tc,
+ 'working': working}
+ test['revert_paths'] = [source_path, dest_path]
+ tests.append(test)
+
+ # move and update with incoming property addition to dest (r7-10)
+ test = {}
+ test['start_rev'] = 7
+ test['end_rev'] = 10
+ test['start_output'] = None
+ test['start_disk'] = None
+ test['start_status'] = None
+ test['up_output'] = svntest.wc.State(wc_dir, {
+ dest : Item(status=' ', treeconflict='C'),
+ })
+ test['up_disk'] = svntest.main.greek_state.copy()
+ test['up_disk'].add({
+ dest: Item("This is the replaced file.\n")
+ })
+ test['up_disk'].remove(source)
+ test['up_status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ test['up_status'].tweak(source, status='D ', moved_to=dest)
+ test['up_status'].add({dest: Item(status='R ', copied='+', treeconflict='C',
+ wc_rev='-', moved_from=source)})
+ # mine-conflict and theirs-conflict don't work.
+ mc = {}
+ mc['error'] = svntest.verify.RegexOutput(".*: .*: W155027:.*", match_all=False)
+ mc['status'] = test['up_status']
+ mc['disk'] = test['up_disk']
+ tc = {}
+ tc['error'] = svntest.verify.RegexOutput(".*: .*: W155027:.*", match_all=False)
+ tc['status'] = test['up_status']
+ tc['disk'] = test['up_disk']
+ working = {}
+ # XXX: Didn't tell us what it did.
+ working['output'] = svntest.verify.ExpectedOutput(
+ "Resolved conflicted state of '%s'\n" % dest_path, match_all=False
+ )
+ # working converts the move into a replacement
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'].tweak(source, status='D ', moved_to=dest)
+ working['status'].add({dest: Item(status='R ', moved_from=source,
+ copied='+', wc_rev='-')})
+ working['disk'] = test['up_disk']
+ test['resolves'] = {'mine-conflict': mc, 'theirs-conflict': tc,
+ 'working': working}
+ test['revert_paths'] = [source_path, dest_path]
+ tests.append(test)
+
+ # move and update with incoming property modification to dest (r7-11)
+ test = {}
+ test['start_rev'] = 7
+ test['end_rev'] = 11
+ test['start_output'] = None
+ test['start_disk'] = None
+ test['start_status'] = None
+ test['up_output'] = svntest.wc.State(wc_dir, {
+ dest : Item(status=' ', treeconflict='C'),
+ })
+ test['up_disk'] = svntest.main.greek_state.copy()
+ test['up_disk'].add({
+ dest: Item("This is the replaced file.\n")
+ })
+ test['up_disk'].remove(source)
+ test['up_status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ test['up_status'].tweak(source, status='D ', moved_to=dest)
+ test['up_status'].add({dest: Item(status='R ', copied='+', treeconflict='C',
+ wc_rev='-', moved_from=source)})
+ # mine-conflict and theirs-conflict don't work.
+ mc = {}
+ mc['error'] = svntest.verify.RegexOutput(".*: .*: W155027:.*", match_all=False)
+ mc['status'] = test['up_status']
+ mc['disk'] = test['up_disk']
+ tc = {}
+ tc['error'] = svntest.verify.RegexOutput(".*: .*: W155027:.*", match_all=False)
+ tc['status'] = test['up_status']
+ tc['disk'] = test['up_disk']
+ working = {}
+ # XXX: Doesn't tell you what it did.
+ working['output'] = svntest.verify.ExpectedOutput(
+ "Resolved conflicted state of '%s'\n" % dest_path, match_all=False
+ )
+ # working converts the move into a replacement
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'].tweak(source, status='D ', moved_to=dest)
+ working['status'].add({dest: Item(status='R ', moved_from=source,
+ copied='+', wc_rev='-')})
+ working['disk'] = test['up_disk']
+ test['resolves'] = {'mine-conflict': mc, 'theirs-conflict': tc,
+ 'working': working}
+ test['revert_paths'] = [source_path, dest_path]
+ tests.append(test)
+
+ # move and update with incoming property deletion to dest (r7-12)
+ test = {}
+ test['start_rev'] = 7
+ test['end_rev'] = 12
+ test['start_output'] = None
+ test['start_disk'] = None
+ test['start_status'] = None
+ test['up_output'] = svntest.wc.State(wc_dir, {
+ dest : Item(status=' ', treeconflict='C'),
+ })
+ test['up_disk'] = svntest.main.greek_state.copy()
+ test['up_disk'].add({
+ dest: Item("This is the replaced file.\n")
+ })
+ test['up_disk'].remove(source)
+ test['up_status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ test['up_status'].tweak(source, status='D ', moved_to=dest)
+ test['up_status'].add({dest: Item(status='R ', copied='+', treeconflict='C',
+ wc_rev='-', moved_from=source)})
+ # mine-conflict and theirs-conflict don't work.
+ mc = {}
+ mc['error'] = svntest.verify.RegexOutput(".*: .*: W155027:.*", match_all=False)
+ mc['status'] = test['up_status']
+ mc['disk'] = test['up_disk']
+ tc = {}
+ tc['error'] = svntest.verify.RegexOutput(".*: .*: W155027:.*", match_all=False)
+ tc['status'] = test['up_status']
+ tc['disk'] = test['up_disk']
+ working = {}
+ # XXX: Doesn't tell you what it did.
+ working['output'] = svntest.verify.ExpectedOutput(
+ "Resolved conflicted state of '%s'\n" % dest_path, match_all=False
+ )
+ # working converts the move into a replacement
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'].tweak(source, status='D ', moved_to=dest)
+ working['status'].add({dest: Item(status='R ', moved_from=source,
+ copied='+', wc_rev='-')})
+ working['disk'] = test['up_disk']
+ test['resolves'] = {'mine-conflict': mc, 'theirs-conflict': tc,
+ 'working': working}
+ test['revert_paths'] = [source_path, dest_path]
+ tests.append(test)
+
+ # move and update with incoming property addition to source (r13-14)
+ test = {}
+ test['start_rev'] = 13
+ test['end_rev'] = 14
+ test['start_output'] = None
+ test['start_disk'] = None
+ test['start_status'] = None
+ test['up_output'] = svntest.wc.State(wc_dir, {
+ source : Item(status=' ', treeconflict='C'),
+ })
+ test['up_disk'] = svntest.main.greek_state.copy()
+ test['up_disk'].add({
+ dest: Item("This is the replaced file.\n")
+ })
+ test['up_disk'].remove(source)
+ test['up_status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ test['up_status'].tweak(source, status='D ', moved_to=dest, treeconflict='C')
+ test['up_status'].add({dest: Item(status='A ', copied='+', wc_rev='-',
+ moved_from=source)})
+ mc = {}
+ # TODO: Should check that the output includes that the update was applied to
+ # the destination
+ mc['output'] = svntest.verify.ExpectedOutput(
+ "Resolved conflicted state of '%s'\n" % source_path, match_all=False
+ )
+ mc['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ mc['status'].tweak(source, status='D ', moved_to=dest)
+ mc['status'].add({dest: Item(status='A ', moved_from=source,
+ copied='+', wc_rev='-')})
+ mc['disk'] = test['up_disk'].copy()
+ mc['disk'].tweak(dest, props={u'foo': u'bar'})
+ # theirs-conflict doesn't work
+ tc = {}
+ tc['error'] = svntest.verify.RegexOutput(".*: .*: W155027:.*", match_all=False)
+ tc['status'] = test['up_status']
+ tc['disk'] = test['up_disk']
+ working = {}
+ working['output'] = svntest.verify.ExpectedOutput(
+ [
+ "Breaking move with source path '%s'\n" % source_path,
+ "Resolved conflicted state of '%s'\n" % source_path
+ ]
+ )
+ # XXX: working breaks the move? Is that right?
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'].tweak(source, status='D ')
+ working['status'].add({dest: Item(status='A ', copied='+', wc_rev='-')})
+ working['disk'] = test['up_disk']
+ test['resolves'] = {'mine-conflict': mc, 'theirs-conflict': tc,
+ 'working': working}
+ test['revert_paths'] = [source_path, dest_path]
+ tests.append(test)
+
+ # move and update with incoming property modification to source (r14-15)
+ test = {}
+ test['start_rev'] = 14
+ test['end_rev'] = 15
+ test['start_output'] = None
+ test['start_disk'] = None
+ test['start_status'] = None
+ test['up_output'] = svntest.wc.State(wc_dir, {
+ source : Item(status=' ', treeconflict='C'),
+ })
+ test['up_disk'] = svntest.main.greek_state.copy()
+ test['up_disk'].add({
+ dest: Item("This is the replaced file.\n", props={u'foo': u'bar'})
+ })
+ test['up_disk'].remove(source)
+ test['up_status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ test['up_status'].tweak(source, status='D ', moved_to=dest, treeconflict='C')
+ test['up_status'].add({dest: Item(status='A ', copied='+', wc_rev='-',
+ moved_from=source)})
+ mc = {}
+ # TODO: Should check that the output includes that the update was applied to
+ # the destination
+ mc['output'] = svntest.verify.ExpectedOutput(
+ "Resolved conflicted state of '%s'\n" % source_path, match_all=False
+ )
+ mc['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ mc['status'].tweak(source, status='D ', moved_to=dest)
+ mc['status'].add({dest: Item(status='A ', moved_from=source,
+ copied='+', wc_rev='-')})
+ mc['disk'] = test['up_disk'].copy()
+ mc['disk'].tweak(dest, props={u'foo': u'baz'})
+ # theirs-conflict doesn't work
+ tc = {}
+ tc['error'] = svntest.verify.RegexOutput(".*: .*: W155027:.*", match_all=False)
+ tc['status'] = test['up_status']
+ tc['disk'] = test['up_disk']
+ working = {}
+ working['output'] = svntest.verify.ExpectedOutput(
+ [
+ "Breaking move with source path '%s'\n" % source_path,
+ "Resolved conflicted state of '%s'\n" % source_path
+ ]
+ )
+ # XXX: working breaks the move? Is that right?
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'].tweak(source, status='D ')
+ working['status'].add({dest: Item(status='A ', copied='+', wc_rev='-')})
+ working['disk'] = test['up_disk']
+ test['resolves'] = {'mine-conflict': mc, 'theirs-conflict': tc,
+ 'working': working}
+ test['revert_paths'] = [source_path, dest_path]
+ tests.append(test)
+
+ # move and update with incoming property deletion to source (r15-16)
+ test = {}
+ test['start_rev'] = 15
+ test['end_rev'] = 16
+ test['start_output'] = None
+ test['start_disk'] = None
+ test['start_status'] = None
+ test['up_output'] = svntest.wc.State(wc_dir, {
+ source : Item(status=' ', treeconflict='C'),
+ })
+ test['up_disk'] = svntest.main.greek_state.copy()
+ test['up_disk'].add({
+ dest: Item("This is the replaced file.\n", props={'foo': 'baz'})
+ })
+ test['up_disk'].remove(source)
+ test['up_status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ test['up_status'].tweak(source, status='D ', moved_to=dest, treeconflict='C')
+ test['up_status'].add({dest: Item(status='A ', copied='+', wc_rev='-',
+ moved_from=source)})
+ mc = {}
+ # TODO: Should check that the output includes that the update was applied to
+ # the destination
+ mc['output'] = svntest.verify.ExpectedOutput(
+ "Resolved conflicted state of '%s'\n" % source_path, match_all=False
+ )
+ mc['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ mc['status'].tweak(source, status='D ', moved_to=dest)
+ mc['status'].add({dest: Item(status='A ', moved_from=source,
+ copied='+', wc_rev='-')})
+ mc['disk'] = test['up_disk'].copy()
+ mc['disk'].tweak(dest, props={})
+ # theirs-conflict doesn't work
+ tc = {}
+ tc['error'] = svntest.verify.RegexOutput(".*: .*: W155027:.*", match_all=False)
+ tc['status'] = test['up_status']
+ tc['disk'] = test['up_disk']
+ working = {}
+ working['output'] = svntest.verify.ExpectedOutput(
+ [
+ "Breaking move with source path '%s'\n" % source_path,
+ "Resolved conflicted state of '%s'\n" % source_path
+ ]
+ )
+ # XXX: working breaks the move? Is that right?
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'].tweak(source, status='D ')
+ working['status'].add({dest: Item(status='A ', copied='+', wc_rev='-')})
+ working['disk'] = test['up_disk']
+ test['resolves'] = {'mine-conflict': mc, 'theirs-conflict': tc,
+ 'working': working}
+ test['revert_paths'] = [source_path, dest_path]
+ tests.append(test)
+
+ # move and update with incoming identical move (r16-17)
+ # XXX: It'd be really nice if we actually recognized this and the wc
+ # showed no conflict at all on udpate.
+ test = {}
+ test['start_rev'] = 16
+ test['end_rev'] = 17
+ test['start_output'] = None
+ test['start_disk'] = None
+ test['start_status'] = None
+ test['up_output'] = svntest.wc.State(wc_dir, {
+ source : Item(status=' ', treeconflict='C'),
+ dest : Item(status=' ', treeconflict='C'),
+ })
+ test['up_disk'] = svntest.main.greek_state.copy()
+ test['up_disk'].add({
+ dest: Item("This is the replaced file.\n")
+ })
+ test['up_disk'].remove(source)
+ test['up_status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ test['up_status'].tweak(source, status='! ', treeconflict='C', wc_rev=None)
+ test['up_status'].add({dest: Item(status='R ', copied='+', wc_rev='-',
+ treeconflict='C')})
+ # mine-conflict and theirs-conflict don't work.
+ mc = {}
+ mc['error'] = svntest.verify.RegexOutput(".*: .*: W155027:.*", match_all=False)
+ mc['status'] = test['up_status']
+ mc['disk'] = test['up_disk']
+ tc = {}
+ tc['error'] = svntest.verify.RegexOutput(".*: .*: W155027:.*", match_all=False)
+ tc['status'] = test['up_status']
+ tc['disk'] = test['up_disk']
+ working = {}
+ working['output'] = svntest.verify.ExpectedOutput(
+ "Resolved conflicted state of '%s'\n" % source_path, match_all=False
+ )
+ # move is broken now
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'].add({dest: Item(status='R ', copied='+', wc_rev='-')})
+ working['status'].remove(source)
+ working['disk'] = test['up_disk']
+ working['revert_paths'] = [dest_path]
+ test['resolves'] = {'mine-conflict': mc, 'theirs-conflict': tc,
+ 'working': working}
+ test['revert_paths'] = [dest_path, source_path]
+ tests.append(test)
+
+ return tests
+
+def build_simple_file_move_func(sbox, source, dest):
+ wc_dir = sbox.wc_dir
+ source_path = sbox.ospath(source)
+ dest_path = sbox.ospath(dest)
+
+ # Setup the move function
+ def move_func(rev):
+ # execute the move
+ svntest.actions.run_and_verify_svn(None, None, [], "move",
+ source_path, dest_path)
+ if move_func.extra_mv_tests:
+ mv_status = svntest.actions.get_virginal_state(wc_dir, rev)
+ mv_status.tweak(source, status='D ', moved_to=dest)
+ mv_status.add({dest: Item(status='A ', moved_from=source,
+ copied='+', wc_rev='-')})
+ mv_info_src = [
+ {
+ 'Path' : re.escape(source_path),
+ 'Moved To' : re.escape(dest),
+ }
+ ]
+ mv_info_dst = [
+ {
+ 'Path' : re.escape(dest_path),
+ 'Moved From' : re.escape(source),
+ }
+ ]
+
+ # check the status output.
+ svntest.actions.run_and_verify_status(wc_dir, mv_status)
+
+ # check the info output
+ svntest.actions.run_and_verify_info(mv_info_src, source_path)
+ svntest.actions.run_and_verify_info(mv_info_dst, dest_path)
+ move_func.extra_mv_tests = False
+
+ # Do the status and info tests the first time through
+ # No reason to repeat these tests for each of the variations below
+ # since the move is exactly the same.
+ move_func.extra_mv_tests = True
+
+ return move_func
+
+######################################################################
+# Tests
+#
+# Each test must return on success or raise on failure.
+#
+# See http://wiki.apache.org/subversion/LocalMoves
+
+def lateral_move_file_test(sbox):
+ "lateral (rename) move of a file test"
+ sbox.build()
+
+ # Plan to test moving A/B/lambda to A/B/lambda-moved
+ source = 'A/B/lambda'
+ dest = 'A/B/lambda-moved'
+
+ # Build the revisions to do the updates via
+ build_incoming_changes_file(sbox, source, dest)
+
+ # Get function to implement the actual move
+ move_func = build_simple_file_move_func(sbox, source, dest)
+
+ # Get the test plan
+ tests = build_simple_file_move_tests(sbox, source, dest)
+
+ # Actually run the tests
+ move_file_tests(sbox, source, dest, move_func, tests)
+
+def sibling_move_file_test(sbox):
+ "sibling move of a file test"
+ sbox.build()
+
+ # Plan to test moving A/B/lambda to A/C/lambda
+ source = 'A/B/lambda'
+ dest = 'A/C/lambda'
+
+ # Build the revisions to do the updates via
+ build_incoming_changes_file(sbox, source, dest)
+
+ # Get function to implement the actual move
+ move_func = build_simple_file_move_func(sbox, source, dest)
+
+ # Get the test plan
+ tests = build_simple_file_move_tests(sbox, source, dest)
+
+ # Actually run the tests
+ move_file_tests(sbox, source, dest, move_func, tests)
+
+def shallower_move_file_test(sbox):
+ "shallower move of a file test"
+ sbox.build()
+
+ # Plan to test moving A/B/lambda to A/lambda
+ source = 'A/B/lambda'
+ dest = 'A/lambda'
+
+ # Build the revisions to do the updates via
+ build_incoming_changes_file(sbox, source, dest)
+
+ # Get function to implement the actual move
+ move_func = build_simple_file_move_func(sbox, source, dest)
+
+ # Get the test plan
+ tests = build_simple_file_move_tests(sbox, source, dest)
+
+ # Actually run the tests
+ move_file_tests(sbox, source, dest, move_func, tests)
+
+def deeper_move_file_test(sbox):
+ "deeper move of a file test"
+ sbox.build()
+
+ # Plan to test moving A/B/lambda to A/B/F/lambda
+ source = 'A/B/lambda'
+ dest = 'A/B/F/lambda'
+
+ # Build the revisions to do the updates via
+ build_incoming_changes_file(sbox, source, dest)
+
+ # Get function to implement the actual move
+ move_func = build_simple_file_move_func(sbox, source, dest)
+
+ # Get the test plan
+ tests = build_simple_file_move_tests(sbox, source, dest)
+
+ # Actually run the tests
+ move_file_tests(sbox, source, dest, move_func, tests)
+
+
+def property_merge(sbox):
+ "test property merging on move-update"
+
+ # pristine local incoming outcome revert
+ # 1 p1 v2 p2 v2 p1 v2, p2 v2 p2 v2
+ # 2 p1 v1 p1 v2 p2 v2 p1 v2, p2 v2 p1 v1 p2 v2
+ # 3 p1 v1 p1 v2 p1 v2 p1 v2 p1 v2
+ # 4 p1 v2 p1 v3 p1 v2 conflict p1 v3
+ # 5 p1 v1 p1 v2 p1 v3 p1 v2 conflict p1 v3
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ sbox.simple_mkdir('A/C/D1')
+ sbox.simple_mkdir('A/C/D2')
+ sbox.simple_mkdir('A/C/D3')
+ sbox.simple_mkdir('A/C/D4')
+ sbox.simple_mkdir('A/C/D5')
+ sbox.simple_add_text('content of f1', 'A/C/f1')
+ sbox.simple_add_text('content of f2', 'A/C/f2')
+ sbox.simple_add_text('content of f3', 'A/C/f3')
+ sbox.simple_add_text('content of f4', 'A/C/f4')
+ sbox.simple_add_text('content of f5', 'A/C/f5')
+ sbox.simple_propset('key1', 'value1',
+ 'A/C/D2', 'A/C/D3', 'A/C/D5',
+ 'A/C/f2', 'A/C/f3', 'A/C/f5')
+ sbox.simple_commit()
+ sbox.simple_propset('key2', 'value2',
+ 'A/C/D1', 'A/C/D2',
+ 'A/C/f1', 'A/C/f2')
+ sbox.simple_propset('key1', 'value2',
+ 'A/C/D3',
+ 'A/C/f3')
+ sbox.simple_propset('key1', 'value3',
+ 'A/C/D4', 'A/C/D5',
+ 'A/C/f4', 'A/C/f5')
+ sbox.simple_commit()
+ sbox.simple_update('', 2)
+ sbox.simple_propset('key1', 'value2',
+ 'A/C/D1', 'A/C/D2', 'A/C/D3', 'A/C/D4', 'A/C/D5',
+ 'A/C/f1', 'A/C/f2', 'A/C/f3', 'A/C/f4', 'A/C/f5')
+ sbox.simple_move('A/C', 'A/C2')
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
+ expected_status.tweak('A/C', status='D ', moved_to='A/C2')
+ expected_status.add({
+ 'A/C/D1' : Item(status='D ', wc_rev=2),
+ 'A/C/D2' : Item(status='D ', wc_rev=2),
+ 'A/C/D3' : Item(status='D ', wc_rev=2),
+ 'A/C/D4' : Item(status='D ', wc_rev=2),
+ 'A/C/D5' : Item(status='D ', wc_rev=2),
+ 'A/C/f1' : Item(status='D ', wc_rev=2),
+ 'A/C/f2' : Item(status='D ', wc_rev=2),
+ 'A/C/f3' : Item(status='D ', wc_rev=2),
+ 'A/C/f4' : Item(status='D ', wc_rev=2),
+ 'A/C/f5' : Item(status='D ', wc_rev=2),
+ 'A/C2' : Item(status='A ', copied='+', wc_rev='-', moved_from='A/C'),
+ 'A/C2/D1' : Item(status=' M', copied='+', wc_rev='-'),
+ 'A/C2/D2' : Item(status=' M', copied='+', wc_rev='-'),
+ 'A/C2/D3' : Item(status=' M', copied='+', wc_rev='-'),
+ 'A/C2/D4' : Item(status=' M', copied='+', wc_rev='-'),
+ 'A/C2/D5' : Item(status=' M', copied='+', wc_rev='-'),
+ 'A/C2/f1' : Item(status=' M', copied='+', wc_rev='-'),
+ 'A/C2/f2' : Item(status=' M', copied='+', wc_rev='-'),
+ 'A/C2/f3' : Item(status=' M', copied='+', wc_rev='-'),
+ 'A/C2/f4' : Item(status=' M', copied='+', wc_rev='-'),
+ 'A/C2/f5' : Item(status=' M', copied='+', wc_rev='-'),
+ })
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ sbox.simple_update()
+ svntest.actions.run_and_verify_svn("resolve failed", None, [],
+ 'resolve',
+ '--accept=mine-conflict',
+ sbox.ospath('A/C'))
+
+ expected_status.tweak(wc_rev=3)
+ expected_status.tweak('A/C2',
+ 'A/C2/D1', 'A/C2/D2', 'A/C2/D3', 'A/C2/D4', 'A/C2/D5',
+ 'A/C2/f1', 'A/C2/f2', 'A/C2/f3', 'A/C2/f4', 'A/C2/f5',
+ wc_rev='-')
+ expected_status.tweak('A/C2/D3',
+ 'A/C2/f3',
+ status=' ')
+ expected_status.tweak('A/C2/D4', 'A/C2/D5',
+ 'A/C2/f4', 'A/C2/f5',
+ status=' C')
+
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.remove('A/C')
+ expected_disk.add({
+ 'A/C2' : Item(),
+ 'A/C2/D1' : Item(props={'key1' : 'value2', 'key2' : 'value2'}),
+ 'A/C2/D2' : Item(props={'key1' : 'value2', 'key2' : 'value2'}),
+ 'A/C2/D3' : Item(props={'key1' : 'value2'}),
+ 'A/C2/D4' : Item(props={'key1' : 'value2'}),
+ 'A/C2/D5' : Item(props={'key1' : 'value2'}),
+ 'A/C2/f1' : Item(contents='content of f1',
+ props={'key1' : 'value2', 'key2' : 'value2'}),
+ 'A/C2/f2' : Item(contents='content of f2',
+ props={'key1' : 'value2', 'key2' : 'value2'}),
+ 'A/C2/f3' : Item(contents='content of f3',
+ props={'key1' : 'value2'}),
+ 'A/C2/f4' : Item(contents='content of f4',
+ props={'key1' : 'value2'}),
+ 'A/C2/f5' : Item(contents='content of f5',
+ props={'key1' : 'value2'}),
+ 'A/C2/D4/dir_conflicts.prej' : Item(contents=
+"""Trying to add new property 'key1'
+but the property already exists.
+<<<<<<< (local property value)
+value2=======
+value3>>>>>>> (incoming property value)
+"""),
+ 'A/C2/D5/dir_conflicts.prej' : Item(contents=
+"""Trying to change property 'key1'
+but the property has already been locally changed to a different value.
+<<<<<<< (local property value)
+value2=======
+value3>>>>>>> (incoming property value)
+"""),
+ 'A/C2/f4.prej' : Item(contents=
+"""Trying to add new property 'key1'
+but the property already exists.
+<<<<<<< (local property value)
+value2=======
+value3>>>>>>> (incoming property value)
+"""),
+ 'A/C2/f5.prej' : Item(contents=
+"""Trying to change property 'key1'
+but the property has already been locally changed to a different value.
+<<<<<<< (local property value)
+value2=======
+value3>>>>>>> (incoming property value)
+"""),
+ })
+
+ svntest.actions.verify_disk(wc_dir, expected_disk, True)
+
+ sbox.simple_revert('A/C2/D1', 'A/C2/D2', 'A/C2/D4', 'A/C2/D5',
+ 'A/C2/f1', 'A/C2/f2', 'A/C2/f4', 'A/C2/f5')
+
+ expected_status.tweak('A/C2/D1', 'A/C2/D2', 'A/C2/D4', 'A/C2/D5',
+ 'A/C2/f1', 'A/C2/f2', 'A/C2/f4', 'A/C2/f5',
+ status=' ')
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ expected_disk.remove('A/C2/D4/dir_conflicts.prej',
+ 'A/C2/D5/dir_conflicts.prej',
+ 'A/C2/f4.prej',
+ 'A/C2/f5.prej')
+ expected_disk.tweak('A/C2/D1',
+ 'A/C2/f1',
+ props={'key2' : 'value2'})
+ expected_disk.tweak('A/C2/D2',
+ 'A/C2/f2',
+ props={'key1' : 'value1', 'key2' : 'value2'})
+ expected_disk.tweak('A/C2/D4', 'A/C2/D5',
+ 'A/C2/f4', 'A/C2/f5',
+ props={'key1' : 'value3'})
+ svntest.actions.verify_disk(wc_dir, expected_disk, True)
+
+
+@Issue(4356)
+def move_missing(sbox):
+ "move a missing directory"
+
+ sbox.build(read_only=True)
+ wc_dir = sbox.wc_dir
+
+ svntest.main.safe_rmtree(sbox.ospath('A/D/G'))
+
+ expected_err = '.*Can\'t move \'.*G\' to \'.*R\':.*'
+
+ # This move currently fails halfway between adding the dest and
+ # deleting the source
+ svntest.actions.run_and_verify_svn(None, None, expected_err,
+ 'mv', sbox.ospath('A/D/G'),
+ sbox.ospath('R'))
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('A/D/G', 'A/D/G/tau', 'A/D/G/pi', 'A/D/G/rho',
+ status='! ', entry_status=' ')
+
+ expected_status.add({
+ 'R' : Item(status='! ', wc_rev='-',
+ entry_status='A ', entry_copied='+'),
+ 'R/pi' : Item(status='! ', wc_rev='-',
+ entry_status=' ', entry_copied='+'),
+ 'R/tau' : Item(status='! ', wc_rev='-',
+ entry_status=' ', entry_copied='+'),
+ 'R/rho' : Item(status='! ', wc_rev='-',
+ entry_status=' ', entry_copied='+'),
+ })
+
+ # Verify that the status processing doesn't crash
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ # The issue is a crash when the destination is present
+ os.mkdir(sbox.ospath('R'))
+ expected_status.tweak('R', status='A ', copied='+')
+
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+
+def setup_move_many(sbox):
+ "helper function which creates a wc with node A/A/A which is moved 3 times"
+
+ sbox.simple_rm('A', 'iota')
+ sbox.simple_mkdir('A',
+ 'A/A',
+ 'A/A/A',
+ 'A/A/A/A',
+ 'B',
+ 'B/A',
+ 'B/A/A',
+ 'B/A/A/A',
+ 'C',
+ 'C/A',
+ 'C/A/A',
+ 'C/A/A/A')
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ sbox.simple_move('A/A/A', 'AAA_1')
+
+ sbox.simple_rm('A')
+ sbox.simple_move('B', 'A')
+
+ sbox.simple_move('A/A/A', 'AAA_2')
+
+ sbox.simple_rm('A/A')
+ sbox.simple_move('C/A', 'A/A')
+
+ sbox.simple_move('A/A/A', 'AAA_3')
+
+def move_many_status(wc_dir):
+ "obtain standard status after setup_move_many"
+
+ return svntest.wc.State(wc_dir, {
+ '' : Item(status=' ', wc_rev='2'),
+
+ 'AAA_1' : Item(status='A ', copied='+', moved_from='A/A/A', wc_rev='-'),
+ 'AAA_1/A' : Item(status=' ', copied='+', wc_rev='-'),
+
+ 'AAA_2' : Item(status='A ', copied='+', moved_from='A/A/A', wc_rev='-'),
+ 'AAA_2/A' : Item(status=' ', copied='+', wc_rev='-'),
+
+ 'AAA_3' : Item(status='A ', copied='+', moved_from='A/A/A', wc_rev='-'),
+ 'AAA_3/A' : Item(status=' ', copied='+', wc_rev='-'),
+
+ 'A' : Item(status='R ', copied='+', moved_from='B', wc_rev='-'),
+ 'A/A' : Item(status='R ', copied='+', moved_from='C/A', wc_rev='-'),
+ 'A/A/A' : Item(status='D ', copied='+', wc_rev='-', moved_to='AAA_3'),
+ 'A/A/A/A' : Item(status='D ', copied='+', wc_rev='-'),
+
+ 'B' : Item(status='D ', wc_rev='2', moved_to='A'),
+ 'B/A' : Item(status='D ', wc_rev='2'),
+ 'B/A/A' : Item(status='D ', wc_rev='2'),
+ 'B/A/A/A' : Item(status='D ', wc_rev='2'),
+
+ 'C' : Item(status=' ', wc_rev='2'),
+ 'C/A' : Item(status='D ', wc_rev='2', moved_to='A/A'),
+ 'C/A/A' : Item(status='D ', wc_rev='2'),
+ 'C/A/A/A' : Item(status='D ', wc_rev='2'),
+ })
+
+def move_many_update_delete(sbox):
+ "move many and delete-on-update"
+
+ sbox.build()
+ setup_move_many(sbox)
+
+ wc_dir = sbox.wc_dir
+
+ # Verify start situation
+ expected_status = move_many_status(wc_dir)
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ # And now create a tree conflict
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'rm', sbox.repo_url + '/B',
+ '-m', '')
+
+ expected_output = svntest.wc.State(wc_dir, {
+ 'B' : Item(status=' ', treeconflict='C'),
+ })
+
+
+ expected_status.tweak('', 'C', 'C/A', 'C/A/A', 'C/A/A/A', wc_rev='3')
+ expected_status.tweak('A', moved_from=None)
+ expected_status.remove('B/A', 'B/A/A', 'B/A/A/A')
+ expected_status.tweak('B', status='! ', treeconflict='C', wc_rev=None, moved_to=None)
+
+ svntest.actions.run_and_verify_update(wc_dir, expected_output, None,
+ expected_status)
+
+ # Would be nice if we could run the resolver as a separate step,
+ # but 'svn resolve' just fails for any value but working
+
+@XFail()
+def move_many_update_add(sbox):
+ "move many and add-on-update"
+
+ sbox.build()
+ setup_move_many(sbox)
+
+ wc_dir = sbox.wc_dir
+
+ # Verify start situation
+ expected_status = move_many_status(wc_dir)
+ #svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ # And now create a tree conflict
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'mkdir', sbox.repo_url + '/B/A/A/BB',
+ '-m', '')
+
+ expected_output = svntest.wc.State(wc_dir, {
+ 'B' : Item(status=' ', treeconflict='C'),
+ 'B/A' : Item(status=' ', treeconflict='U'),
+ 'B/A/A' : Item(status=' ', treeconflict='U'),
+ 'B/A/A/BB' : Item(status=' ', treeconflict='A'),
+ # And while resolving
+ 'A/A/' : Item(status=' ', treeconflict='C')
+ })
+
+ expected_status.tweak('',
+ 'B', 'B/A', 'B/A/A', 'B/A/A/A',
+ 'C', 'C/A', 'C/A/A', 'C/A/A/A',
+ wc_rev='3')
+
+ expected_status.tweak('A/A', treeconflict='C')
+ expected_status.add({
+ 'A/A/A/BB' : Item(status='D ', copied='+', wc_rev='-'),
+ 'B/A/A/BB' : Item(status='D ', wc_rev='3'),
+ })
+
+ svntest.actions.run_and_verify_update(wc_dir, expected_output, None,
+ expected_status,
+ None, None, None,
+ None, None, None,
+ wc_dir, '--accept', 'mine-conflict')
+
+ # And another one
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'mkdir', sbox.repo_url + '/C/A/A/BB',
+ '-m', '')
+
+ expected_status.tweak('',
+ 'B', 'B/A', 'B/A/A', 'B/A/A/A',
+ 'C', 'C/A', 'C/A/A', 'C/A/A/A',
+ wc_rev='4')
+
+ expected_output = svntest.wc.State(wc_dir, {
+ 'C/A' : Item(status=' ', treeconflict='C'),
+ 'C/A/A' : Item(status=' ', treeconflict='U'),
+ 'C/A/A/BB' : Item(status=' ', treeconflict='A'),
+ })
+
+ # This currently triggers an assertion failure
+ svntest.actions.run_and_verify_update(wc_dir, expected_output, None,
+ expected_status,
+ None, None, None,
+ None, None, None,
+ wc_dir, '--accept', 'mine-conflict')
+
+@Issue(4437)
+def move_del_moved(sbox):
+ "delete moved node, still a move"
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ sbox.simple_mkdir('A/NEW')
+ sbox.simple_move('A/mu', 'A/NEW/mu')
+ sbox.simple_rm('A/NEW/mu')
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('A/mu', status='D ')
+ expected_status.add({
+ 'A/NEW' : Item(status='A ', wc_rev='-')
+ })
+
+ # A/mu still reports that it is moved to A/NEW/mu, while it is already
+ # deleted there.
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+def copy_move_commit(sbox):
+ "copy, move and commit"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ #repro
+ # Prepare
+ # - Create folder aaa
+ # - Add file bbb.sql
+ # create table bbb (Id int not null)
+ # - Commit
+ # Repro Issue 2
+ # - Copy folder aaa under same parent folder (i.e. as a sibling). (using Ctrl drag/drop).
+ # Creates Copy of aaa
+ # - Rename Copy of aaa to eee
+ # - Commit
+ # Get error need to update
+ # - Update
+ # - Commit
+ # Get error need to update
+
+ sbox.simple_copy('A/D/G', 'A/D/GG')
+ sbox.simple_move('A/D/GG', 'A/D/GG-moved')
+ sbox.simple_commit('A/D/GG-moved')
+
+
+def move_to_from_external(sbox):
+ "move to and from an external"
+
+ sbox.build()
+ sbox.simple_propset('svn:externals', '^/A/D/G GG', '')
+ sbox.simple_update()
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'move',
+ sbox.ospath('GG/tau'),
+ sbox.ospath('tau'))
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'move',
+ sbox.ospath('iota'),
+ sbox.ospath('GG/tau'))
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'ci', '-m', 'Commit both',
+ sbox.ospath(''),
+ sbox.ospath('GG'))
+
+def move_conflict_markers(sbox):
+ "move conflict markers"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ sbox.simple_propset('key','val', 'iota', 'A/B/E', 'A/B/E/beta')
+ sbox.simple_commit()
+ sbox.simple_update('', 1)
+ sbox.simple_propset('key','false', 'iota', 'A/B/E', 'A/B/E/beta')
+
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/B/E' : Item(status=' C'),
+ 'A/B/E/beta' : Item(status=' C'),
+ 'iota' : Item(status=' C'),
+ })
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
+ expected_status.tweak('iota', 'A/B/E', 'A/B/E/beta', status=' C')
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.add({
+ 'A/B/E/dir_conflicts.prej' : Item(contents=
+ "Trying to add new property 'key'\n"
+ "but the property already exists.\n"
+ "<<<<<<< (local property value)\n"
+ "false=======\n"
+ "val>>>>>>> (incoming property value)\n"),
+ 'A/B/E/beta.prej' : Item(contents=
+ "Trying to add new property 'key'\n"
+ "but the property already exists.\n"
+ "<<<<<<< (local property value)\n"
+ "false=======\n"
+ "val>>>>>>> (incoming property value)\n"),
+ 'iota.prej' : Item(contents=
+ "Trying to add new property 'key'\n"
+ "but the property already exists.\n"
+ "<<<<<<< (local property value)\n"
+ "false=======\n"
+ "val>>>>>>> (incoming property value)\n"),
+ })
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status)
+
+ sbox.simple_move('iota', 'A/iotb')
+ sbox.simple_move('A/B/E', 'E')
+
+ expected_status.tweak('iota', status='D ', moved_to='A/iotb')
+ expected_status.tweak('A/B/E', status='D ', moved_to='E')
+ expected_status.tweak('A/B/E/alpha', 'A/B/E/beta', status='D ')
+ expected_status.add({
+ 'A/iotb' : Item(status='A ', copied='+', moved_from='iota', wc_rev='-'),
+ 'E' : Item(status='A ', copied='+', moved_from='A/B/E', wc_rev='-'),
+ 'E/beta' : Item(status=' M', copied='+', wc_rev='-'),
+ 'E/alpha' : Item(status=' ', copied='+', wc_rev='-'),
+ })
+ expected_disk.remove('iota', 'iota.prej',
+ 'A/B/E', 'A/B/E/alpha', 'A/B/E/beta',
+ 'A/B/E/dir_conflicts.prej',
+ 'A/B/E/beta.prej')
+ expected_disk.add({
+ 'A/iotb' : Item(contents="This is the file 'iota'.\n"),
+ 'E/beta' : Item(contents="This is the file 'beta'.\n"),
+ 'E/alpha' : Item(contents="This is the file 'alpha'.\n"),
+ })
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+ svntest.actions.verify_disk(wc_dir, expected_disk)
+
+#######################################################################
+# Run the tests
+
+# list all tests here, starting with None:
+test_list = [ None,
+ lateral_move_file_test,
+ sibling_move_file_test,
+ shallower_move_file_test,
+ deeper_move_file_test,
+ property_merge,
+ move_missing,
+ move_many_update_delete,
+ move_many_update_add,
+ move_del_moved,
+ copy_move_commit,
+ move_to_from_external,
+ move_conflict_markers,
+ ]
+
+if __name__ == '__main__':
+ svntest.main.run_tests(test_list)
+ # NOTREACHED
+
+
+### End of file.
diff --git a/subversion/tests/cmdline/patch_tests.py b/subversion/tests/cmdline/patch_tests.py
index ae9c150..b17da63 100755
--- a/subversion/tests/cmdline/patch_tests.py
+++ b/subversion/tests/cmdline/patch_tests.py
@@ -34,6 +34,7 @@ import tempfile
import textwrap
import zlib
import posixpath
+import filecmp
# Our testing module
import svntest
@@ -64,7 +65,7 @@ def patch(sbox):
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
mu_contents = [
"Dear internet user,\n",
@@ -194,11 +195,11 @@ def patch(sbox):
]
expected_output = [
- 'U %s\n' % os.path.join(wc_dir, 'A', 'D', 'gamma'),
- 'U %s\n' % os.path.join(wc_dir, 'iota'),
- 'A %s\n' % os.path.join(wc_dir, 'new'),
- 'U %s\n' % os.path.join(wc_dir, 'A', 'mu'),
- 'D %s\n' % os.path.join(wc_dir, 'A', 'B', 'E', 'beta'),
+ 'U %s\n' % sbox.ospath('A/D/gamma'),
+ 'U %s\n' % sbox.ospath('iota'),
+ 'A %s\n' % sbox.ospath('new'),
+ 'U %s\n' % sbox.ospath('A/mu'),
+ 'D %s\n' % sbox.ospath('A/B/E/beta'),
]
expected_disk = svntest.main.greek_state.copy()
@@ -230,7 +231,7 @@ def patch(sbox):
def patch_absolute_paths(sbox):
"patch containing absolute paths"
- sbox.build()
+ sbox.build(read_only = True)
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
@@ -265,23 +266,21 @@ def patch_absolute_paths(sbox):
expected_output = [
'U %s\n' % os.path.join('A', 'B', 'E', 'alpha'),
'Skipped missing target: \'%s\'\n' % lambda_path,
- 'Summary of conflicts:\n',
- ' Skipped paths: 1\n'
- ]
+ ] + svntest.main.summary_of_conflicts(skipped_paths=1)
alpha_contents = "This is the file 'alpha'.\nWhoooo whooooo whoooooooo!\n"
expected_disk = svntest.main.greek_state.copy()
expected_disk.tweak('A/B/E/alpha', contents=alpha_contents)
- expected_status = svntest.actions.get_virginal_state('.', 1)
+ expected_status = svntest.actions.get_virginal_state('', 1)
expected_status.tweak('A/B/E/alpha', status='M ')
expected_skip = wc.State('', {
- lambda_path: Item(),
+ lambda_path: Item(verb='Skipped missing target'),
})
- svntest.actions.run_and_verify_patch('.', os.path.abspath(patch_file_path),
+ svntest.actions.run_and_verify_patch('', os.path.abspath(patch_file_path),
expected_output,
expected_disk,
expected_status,
@@ -297,8 +296,8 @@ def patch_offset(sbox):
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- iota_path = os.path.join(wc_dir, 'iota')
+ mu_path = sbox.ospath('A/mu')
+ iota_path = sbox.ospath('iota')
mu_contents = [
"Dear internet user,\n",
@@ -488,13 +487,13 @@ def patch_offset(sbox):
expected_disk.tweak('A/mu', contents=''.join(mu_contents))
expected_disk.tweak('iota', contents=''.join(iota_contents))
- expected_status = svntest.actions.get_virginal_state('.', 1)
+ expected_status = svntest.actions.get_virginal_state('', 1)
expected_status.tweak('A/mu', status='M ', wc_rev=2)
expected_status.tweak('iota', status='M ', wc_rev=2)
expected_skip = wc.State('', { })
- svntest.actions.run_and_verify_patch('.', os.path.abspath(patch_file_path),
+ svntest.actions.run_and_verify_patch('', os.path.abspath(patch_file_path),
expected_output,
expected_disk,
expected_status,
@@ -510,7 +509,7 @@ def patch_chopped_leading_spaces(sbox):
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
mu_contents = [
"Dear internet user,\n",
@@ -640,11 +639,11 @@ def patch_chopped_leading_spaces(sbox):
]
expected_output = [
- 'U %s\n' % os.path.join(wc_dir, 'A', 'D', 'gamma'),
- 'U %s\n' % os.path.join(wc_dir, 'iota'),
- 'A %s\n' % os.path.join(wc_dir, 'new'),
- 'U %s\n' % os.path.join(wc_dir, 'A', 'mu'),
- 'D %s\n' % os.path.join(wc_dir, 'A', 'B', 'E', 'beta'),
+ 'U %s\n' % sbox.ospath('A/D/gamma'),
+ 'U %s\n' % sbox.ospath('iota'),
+ 'A %s\n' % sbox.ospath('new'),
+ 'U %s\n' % sbox.ospath('A/mu'),
+ 'D %s\n' % sbox.ospath('A/B/E/beta'),
]
expected_disk = svntest.main.greek_state.copy()
@@ -680,7 +679,7 @@ def patch_strip1(sbox):
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
mu_contents = [
"Dear internet user,\n",
@@ -810,11 +809,11 @@ def patch_strip1(sbox):
]
expected_output = [
- 'U %s\n' % os.path.join(wc_dir, 'A', 'D', 'gamma'),
- 'U %s\n' % os.path.join(wc_dir, 'iota'),
- 'A %s\n' % os.path.join(wc_dir, 'new'),
- 'U %s\n' % os.path.join(wc_dir, 'A', 'mu'),
- 'D %s\n' % os.path.join(wc_dir, 'A', 'B', 'E', 'beta'),
+ 'U %s\n' % sbox.ospath('A/D/gamma'),
+ 'U %s\n' % sbox.ospath('iota'),
+ 'A %s\n' % sbox.ospath('new'),
+ 'U %s\n' % sbox.ospath('A/mu'),
+ 'D %s\n' % sbox.ospath('A/B/E/beta'),
]
expected_disk = svntest.main.greek_state.copy()
@@ -850,8 +849,8 @@ def patch_no_index_line(sbox):
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
- gamma_path = os.path.join(wc_dir, 'A', 'D', 'gamma')
- iota_path = os.path.join(wc_dir, 'iota')
+ gamma_path = sbox.ospath('A/D/gamma')
+ iota_path = sbox.ospath('iota')
gamma_contents = [
"\n",
@@ -906,8 +905,8 @@ def patch_no_index_line(sbox):
"Some more bytes\n",
]
expected_output = [
- 'U %s\n' % os.path.join(wc_dir, 'A', 'D', 'gamma'),
- 'U %s\n' % os.path.join(wc_dir, 'iota'),
+ 'U %s\n' % sbox.ospath('A/D/gamma'),
+ 'U %s\n' % sbox.ospath('iota'),
]
expected_disk = svntest.main.greek_state.copy()
@@ -932,7 +931,7 @@ def patch_no_index_line(sbox):
def patch_add_new_dir(sbox):
"patch with missing dirs"
- sbox.build()
+ sbox.build(read_only = True)
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
@@ -969,27 +968,24 @@ def patch_add_new_dir(sbox):
"+new\n",
]
- C_path = os.path.join(wc_dir, 'A', 'C')
- E_path = os.path.join(wc_dir, 'A', 'B', 'E')
- svntest.actions.run_and_verify_svn("Deleting C failed", None, [],
- 'rm', C_path)
- svntest.actions.run_and_verify_svn("Deleting E failed", None, [],
- 'rm', E_path)
+ C_path = sbox.ospath('A/C')
+ E_path = sbox.ospath('A/B/E')
+
+ svntest.main.safe_rmtree(C_path)
+ svntest.main.safe_rmtree(E_path)
svntest.main.file_write(patch_file_path, ''.join(unidiff_patch))
- A_B_E_Y_new_path = os.path.join(wc_dir, 'A', 'B', 'E', 'Y', 'new')
- A_C_new_path = os.path.join(wc_dir, 'A', 'C', 'new')
- A_Z_new_path = os.path.join(wc_dir, 'A', 'Z', 'new')
+ A_B_E_Y_new_path = sbox.ospath('A/B/E/Y/new')
+ A_C_new_path = sbox.ospath('A/C/new')
+ A_Z_new_path = sbox.ospath('A/Z/new')
expected_output = [
- 'A %s\n' % os.path.join(wc_dir, 'X'),
- 'A %s\n' % os.path.join(wc_dir, 'X', 'Y'),
- 'A %s\n' % os.path.join(wc_dir, 'X', 'Y', 'new'),
+ 'A %s\n' % sbox.ospath('X'),
+ 'A %s\n' % sbox.ospath('X/Y'),
+ 'A %s\n' % sbox.ospath('X/Y/new'),
'Skipped missing target: \'%s\'\n' % A_B_E_Y_new_path,
'Skipped missing target: \'%s\'\n' % A_C_new_path,
'Skipped missing target: \'%s\'\n' % A_Z_new_path,
- 'Summary of conflicts:\n',
- ' Skipped paths: 3\n',
- ]
+ ] + svntest.main.summary_of_conflicts(skipped_paths=3)
# Create the unversioned obstructing directory
os.mkdir(os.path.dirname(A_Z_new_path))
@@ -999,26 +995,24 @@ def patch_add_new_dir(sbox):
'X/Y/new' : Item(contents='new\n'),
'A/Z' : Item()
})
- expected_disk.remove('A/B/E/alpha')
- expected_disk.remove('A/B/E/beta')
- if svntest.main.wc_is_singledb(wc_dir):
- expected_disk.remove('A/B/E')
- expected_disk.remove('A/C')
+ expected_disk.remove('A/B/E', 'A/B/E/alpha', 'A/B/E/beta', 'A/C')
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.add({
- 'X' : Item(status='A ', wc_rev=0),
- 'X/Y' : Item(status='A ', wc_rev=0),
- 'X/Y/new' : Item(status='A ', wc_rev=0),
- 'A/B/E' : Item(status='D ', wc_rev=1),
- 'A/B/E/alpha': Item(status='D ', wc_rev=1),
- 'A/B/E/beta': Item(status='D ', wc_rev=1),
- 'A/C' : Item(status='D ', wc_rev=1),
+ 'X' : Item(status='A ', wc_rev=0),
+ 'X/Y' : Item(status='A ', wc_rev=0),
+ 'X/Y/new' : Item(status='A ', wc_rev=0),
+ 'A/B/E' : Item(status='! ', wc_rev=1),
+ 'A/B/E/alpha': Item(status='! ', wc_rev=1),
+ 'A/B/E/beta' : Item(status='! ', wc_rev=1),
+ 'A/C' : Item(status='! ', wc_rev=1),
})
- expected_skip = wc.State('', {A_Z_new_path : Item(),
- A_B_E_Y_new_path : Item(),
- A_C_new_path : Item()})
+ expected_skip = wc.State(
+ '',
+ {A_Z_new_path : Item(verb='Skipped missing target'),
+ A_B_E_Y_new_path : Item(verb='Skipped missing target'),
+ A_C_new_path : Item(verb='Skipped missing target')})
svntest.actions.run_and_verify_patch(wc_dir,
os.path.abspath(patch_file_path),
@@ -1032,7 +1026,7 @@ def patch_add_new_dir(sbox):
def patch_remove_empty_dirs(sbox):
"patch deleting all children of a directory"
- sbox.build()
+ sbox.build(read_only = True)
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
@@ -1084,35 +1078,35 @@ def patch_remove_empty_dirs(sbox):
svntest.main.file_write(patch_file_path, ''.join(unidiff_patch))
- F_path = os.path.join(wc_dir, 'A', 'B', 'F')
+ F_path = sbox.ospath('A/B/F')
svntest.actions.run_and_verify_svn("Deleting F failed", None, [],
'rm', F_path)
svntest.actions.run_and_verify_svn("Update failed", None, [],
'up', wc_dir)
# We should be able to handle one path beeing missing.
- os.remove(os.path.join(wc_dir, 'A', 'D', 'H', 'chi'))
+ os.remove(sbox.ospath('A/D/H/chi'))
expected_output = [
- 'D %s\n' % os.path.join(wc_dir, 'A', 'D', 'H', 'psi'),
- 'D %s\n' % os.path.join(wc_dir, 'A', 'D', 'H', 'omega'),
- 'D %s\n' % os.path.join(wc_dir, 'A', 'B', 'lambda'),
- 'D %s\n' % os.path.join(wc_dir, 'A', 'B', 'E', 'alpha'),
- 'D %s\n' % os.path.join(wc_dir, 'A', 'B', 'E', 'beta'),
- 'D %s\n' % os.path.join(wc_dir, 'A', 'B'),
+ 'D %s\n' % sbox.ospath('A/D/H/psi'),
+ 'D %s\n' % sbox.ospath('A/D/H/omega'),
+ 'D %s\n' % sbox.ospath('A/B/lambda'),
+ 'D %s\n' % sbox.ospath('A/B/E/alpha'),
+ 'D %s\n' % sbox.ospath('A/B/E/beta'),
+ 'D %s\n' % sbox.ospath('A/B/E'),
+ 'D %s\n' % sbox.ospath('A/B'),
]
expected_disk = svntest.main.greek_state.copy()
- expected_disk.remove('A/D/H/chi')
- expected_disk.remove('A/D/H/psi')
- expected_disk.remove('A/D/H/omega')
- expected_disk.remove('A/B/lambda')
- expected_disk.remove('A/B/E/alpha')
- expected_disk.remove('A/B/E/beta')
- if svntest.main.wc_is_singledb(wc_dir):
- expected_disk.remove('A/B/E')
- expected_disk.remove('A/B/F')
- expected_disk.remove('A/B')
+ expected_disk.remove('A/D/H/chi',
+ 'A/D/H/psi',
+ 'A/D/H/omega',
+ 'A/B/lambda',
+ 'A/B',
+ 'A/B/E',
+ 'A/B/E/alpha',
+ 'A/B/E/beta',
+ 'A/B/F')
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.add({'A/D/H/chi' : Item(status='! ', wc_rev=1)})
@@ -1146,7 +1140,7 @@ def patch_reject(sbox):
# Set gamma contents
gamma_contents = "Hello there! I'm the file 'gamma'.\n"
- gamma_path = os.path.join(wc_dir, 'A', 'D', 'gamma')
+ gamma_path = sbox.ospath('A/D/gamma')
svntest.main.file_write(gamma_path, gamma_contents)
expected_output = svntest.wc.State(wc_dir, {
'A/D/gamma' : Item(verb='Sending'),
@@ -1173,11 +1167,9 @@ def patch_reject(sbox):
svntest.main.file_write(patch_file_path, ''.join(unidiff_patch))
expected_output = [
- 'C %s\n' % os.path.join(wc_dir, 'A', 'D', 'gamma'),
+ 'C %s\n' % sbox.ospath('A/D/gamma'),
'> rejected hunk @@ -1,1 +1,1 @@\n',
- 'Summary of conflicts:\n',
- ' Text conflicts: 1\n',
- ]
+ ] + svntest.main.summary_of_conflicts(text_conflicts=1)
expected_disk = svntest.main.greek_state.copy()
expected_disk.tweak('A/D/gamma', contents=gamma_contents)
@@ -1216,11 +1208,11 @@ def patch_keywords(sbox):
# Set gamma contents
gamma_contents = "$Rev$\nHello there! I'm the file 'gamma'.\n"
- gamma_path = os.path.join(wc_dir, 'A', 'D', 'gamma')
+ gamma_path = sbox.ospath('A/D/gamma')
svntest.main.file_write(gamma_path, gamma_contents)
# Expand the keyword
svntest.main.run_svn(None, 'propset', 'svn:keywords', 'Rev',
- os.path.join(wc_dir, 'A', 'D', 'gamma'))
+ sbox.ospath('A/D/gamma'))
expected_output = svntest.wc.State(wc_dir, {
'A/D/gamma' : Item(verb='Sending'),
})
@@ -1247,7 +1239,7 @@ def patch_keywords(sbox):
svntest.main.file_write(patch_file_path, ''.join(unidiff_patch))
expected_output = [
- 'U %s\n' % os.path.join(wc_dir, 'A', 'D', 'gamma'),
+ 'U %s\n' % sbox.ospath('A/D/gamma'),
]
expected_disk = svntest.main.greek_state.copy()
@@ -1276,7 +1268,7 @@ def patch_with_fuzz(sbox):
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
# We have replaced a couple of lines to cause fuzz. Those lines contains
# the word fuzz
@@ -1386,7 +1378,7 @@ def patch_with_fuzz(sbox):
]
expected_output = [
- 'U %s\n' % os.path.join(wc_dir, 'A', 'mu'),
+ 'U %s\n' % sbox.ospath('A/mu'),
'> applied hunk @@ -1,6 +1,7 @@ with fuzz 1\n',
'> applied hunk @@ -7,7 +8,9 @@ with fuzz 2\n',
'> applied hunk @@ -19,6 +20,7 @@ with offset 1 and fuzz 2\n',
@@ -1415,7 +1407,7 @@ def patch_reverse(sbox):
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
mu_contents = [
"Dear internet user,\n",
@@ -1545,11 +1537,11 @@ def patch_reverse(sbox):
]
expected_output = [
- 'U %s\n' % os.path.join(wc_dir, 'A', 'D', 'gamma'),
- 'U %s\n' % os.path.join(wc_dir, 'iota'),
- 'A %s\n' % os.path.join(wc_dir, 'new'),
- 'U %s\n' % os.path.join(wc_dir, 'A', 'mu'),
- 'D %s\n' % os.path.join(wc_dir, 'A', 'B', 'E', 'beta'),
+ 'U %s\n' % sbox.ospath('A/D/gamma'),
+ 'U %s\n' % sbox.ospath('iota'),
+ 'A %s\n' % sbox.ospath('new'),
+ 'U %s\n' % sbox.ospath('A/mu'),
+ 'D %s\n' % sbox.ospath('A/B/E/beta'),
]
expected_disk = svntest.main.greek_state.copy()
@@ -1581,18 +1573,20 @@ def patch_reverse(sbox):
def patch_no_svn_eol_style(sbox):
"patch target with no svn:eol-style"
- sbox.build()
+ sbox.build(read_only = True)
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
+ # CRLF is a string that will match a CRLF sequence read from a text file.
+ # ### On Windows, we assume CRLF will be read as LF, so it's a poor test.
if os.name == 'nt':
crlf = '\n'
else:
crlf = '\r\n'
- eols = [crlf, '\015', '\n', '\012']
+ eols = [crlf, '\015', '\n', '\012']
for target_eol in eols:
for patch_eol in eols:
mu_contents = [
@@ -1658,7 +1652,7 @@ def patch_no_svn_eol_style(sbox):
svntest.main.file_write(patch_file_path, ''.join(unidiff_patch))
expected_output = [
- 'G %s\n' % os.path.join(wc_dir, 'A', 'mu'),
+ 'G %s\n' % sbox.ospath('A/mu'),
]
expected_disk = svntest.main.greek_state.copy()
expected_disk.tweak('A/mu', contents=''.join(mu_contents))
@@ -1688,9 +1682,10 @@ def patch_with_svn_eol_style(sbox):
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
- mu_path = os.path.join(wc_dir, 'A', 'mu')
-
+ mu_path = sbox.ospath('A/mu')
+ # CRLF is a string that will match a CRLF sequence read from a text file.
+ # ### On Windows, we assume CRLF will be read as LF, so it's a poor test.
if os.name == 'nt':
crlf = '\n'
else:
@@ -1770,7 +1765,7 @@ def patch_with_svn_eol_style(sbox):
svntest.main.file_write(patch_file_path, ''.join(unidiff_patch))
expected_output = [
- 'U %s\n' % os.path.join(wc_dir, 'A', 'mu'),
+ 'U %s\n' % sbox.ospath('A/mu'),
]
expected_disk = svntest.main.greek_state.copy()
expected_disk.tweak('A/mu', contents=''.join(mu_contents),
@@ -1798,13 +1793,14 @@ def patch_with_svn_eol_style(sbox):
def patch_with_svn_eol_style_uncommitted(sbox):
"patch target with uncommitted svn:eol-style"
- sbox.build()
+ sbox.build(read_only = True)
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
- mu_path = os.path.join(wc_dir, 'A', 'mu')
-
+ mu_path = sbox.ospath('A/mu')
+ # CRLF is a string that will match a CRLF sequence read from a text file.
+ # ### On Windows, we assume CRLF will be read as LF, so it's a poor test.
if os.name == 'nt':
crlf = '\n'
else:
@@ -1879,7 +1875,7 @@ def patch_with_svn_eol_style_uncommitted(sbox):
svntest.main.file_write(patch_file_path, ''.join(unidiff_patch))
expected_output = [
- 'G %s\n' % os.path.join(wc_dir, 'A', 'mu'),
+ 'G %s\n' % sbox.ospath('A/mu'),
]
expected_disk = svntest.main.greek_state.copy()
expected_disk.tweak('A/mu', contents=''.join(mu_contents),
@@ -1910,7 +1906,7 @@ def patch_with_ignore_whitespace(sbox):
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
mu_contents = [
"Dear internet user,\n",
@@ -2016,7 +2012,7 @@ def patch_with_ignore_whitespace(sbox):
]
expected_output = [
- 'U %s\n' % os.path.join(wc_dir, 'A', 'mu'),
+ 'U %s\n' % sbox.ospath('A/mu'),
]
expected_disk = svntest.main.greek_state.copy()
@@ -2044,7 +2040,7 @@ def patch_replace_locally_deleted_file(sbox):
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
mu_contents = [
"Dear internet user,\n",
@@ -2128,7 +2124,7 @@ def patch_no_eol_at_eof(sbox):
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
- iota_path = os.path.join(wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
iota_contents = [
"One line\n",
@@ -2174,7 +2170,7 @@ def patch_no_eol_at_eof(sbox):
"The last line with missing eol\n",
]
expected_output = [
- 'U %s\n' % os.path.join(wc_dir, 'iota'),
+ 'U %s\n' % sbox.ospath('iota'),
]
expected_disk = svntest.main.greek_state.copy()
@@ -2201,7 +2197,7 @@ def patch_with_properties(sbox):
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
- iota_path = os.path.join(wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
modified_prop_contents = "This is the property 'modified'.\n"
deleted_prop_contents = "This is the property 'deleted'.\n"
@@ -2245,7 +2241,7 @@ def patch_with_properties(sbox):
added_prop_contents = "This is the property 'added'.\n"
expected_output = [
- ' U %s\n' % os.path.join(wc_dir, 'iota'),
+ ' U %s\n' % sbox.ospath('iota'),
]
expected_disk = svntest.main.greek_state.copy()
@@ -2272,8 +2268,8 @@ def patch_same_twice(sbox):
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- beta_path = os.path.join(wc_dir, 'A', 'B', 'E', 'beta')
+ mu_path = sbox.ospath('A/mu')
+ beta_path = sbox.ospath('A/B/E/beta')
mu_contents = [
"Dear internet user,\n",
@@ -2403,10 +2399,10 @@ def patch_same_twice(sbox):
]
expected_output = [
- 'U %s\n' % os.path.join(wc_dir, 'A', 'D', 'gamma'),
- 'U %s\n' % os.path.join(wc_dir, 'iota'),
- 'A %s\n' % os.path.join(wc_dir, 'new'),
- 'U %s\n' % os.path.join(wc_dir, 'A', 'mu'),
+ 'U %s\n' % sbox.ospath('A/D/gamma'),
+ 'U %s\n' % sbox.ospath('iota'),
+ 'A %s\n' % sbox.ospath('new'),
+ 'U %s\n' % sbox.ospath('A/mu'),
'D %s\n' % beta_path,
]
@@ -2436,9 +2432,9 @@ def patch_same_twice(sbox):
1) # dry-run
# apply the patch again
expected_output = [
- 'G %s\n' % os.path.join(wc_dir, 'A', 'D', 'gamma'),
+ 'G %s\n' % sbox.ospath('A/D/gamma'),
'> hunk @@ -1,1 +1,1 @@ already applied\n',
- 'G %s\n' % os.path.join(wc_dir, 'iota'),
+ 'G %s\n' % sbox.ospath('iota'),
# The iota patch inserts a line after the first line in the file,
# with no trailing context. Currently, Subversion applies this patch
# multiple times, which matches the behaviour of Larry Wall's patch
@@ -2447,17 +2443,15 @@ def patch_same_twice(sbox):
# the duplicate application. Should Subversion be taught to detect it,
# we need this line here:
# '> hunk @@ -1,1 +1,2 @@ already applied\n',
- 'G %s\n' % os.path.join(wc_dir, 'new'),
+ 'G %s\n' % sbox.ospath('new'),
'> hunk @@ -0,0 +1,1 @@ already applied\n',
- 'G %s\n' % os.path.join(wc_dir, 'A', 'mu'),
+ 'G %s\n' % sbox.ospath('A/mu'),
'> hunk @@ -6,6 +6,9 @@ already applied\n',
'> hunk @@ -14,11 +17,8 @@ already applied\n',
'Skipped \'%s\'\n' % beta_path,
- 'Summary of conflicts:\n',
- ' Skipped paths: 1\n',
- ]
+ ] + svntest.main.summary_of_conflicts(skipped_paths=1)
- expected_skip = wc.State('', {beta_path : Item()})
+ expected_skip = wc.State('', {beta_path : Item(verb='Skipped')})
# See above comment about the iota patch being applied twice.
iota_contents += "Some more bytes\n"
@@ -2479,7 +2473,7 @@ def patch_dir_properties(sbox):
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
- B_path = os.path.join(wc_dir, 'A', 'B')
+ B_path = sbox.ospath('A/B')
modified_prop_contents = "This is the property 'modified'.\n"
deleted_prop_contents = "This is the property 'deleted'.\n"
@@ -2539,10 +2533,8 @@ def patch_dir_properties(sbox):
expected_output = [
' U %s\n' % wc_dir,
- ' C %s\n' % os.path.join(wc_dir, 'A', 'B'),
- 'Summary of conflicts:\n',
- ' Property conflicts: 1\n',
- ]
+ ' C %s\n' % sbox.ospath('A/B'),
+ ] + svntest.main.summary_of_conflicts(prop_conflicts=1)
expected_disk = svntest.main.greek_state.copy()
expected_disk.add({
@@ -2571,11 +2563,11 @@ def patch_dir_properties(sbox):
def patch_add_path_with_props(sbox):
"patch that adds paths with props"
- sbox.build()
+ sbox.build(read_only = True)
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
- iota_path = os.path.join(wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
# Apply patch that adds two files, one of which is empty.
# Both files have properties.
@@ -2610,8 +2602,8 @@ def patch_add_path_with_props(sbox):
added_prop_contents = "This is the property 'added'.\n"
expected_output = [
- 'A %s\n' % os.path.join(wc_dir, 'new'),
- 'A %s\n' % os.path.join(wc_dir, 'X'),
+ 'A %s\n' % sbox.ospath('new'),
+ 'A %s\n' % sbox.ospath('X'),
]
expected_disk = svntest.main.greek_state.copy()
@@ -2641,7 +2633,7 @@ def patch_prop_offset(sbox):
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
- iota_path = os.path.join(wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
prop1_content = ''.join([
"Dear internet user,\n",
@@ -2834,12 +2826,12 @@ def patch_prop_offset(sbox):
expected_disk.tweak('iota', props = {'prop1' : prop1_content,
'prop2' : prop2_content})
- expected_status = svntest.actions.get_virginal_state('.', 1)
+ expected_status = svntest.actions.get_virginal_state('', 1)
expected_status.tweak('iota', status=' M', wc_rev=2)
expected_skip = wc.State('', { })
- svntest.actions.run_and_verify_patch('.', os.path.abspath(patch_file_path),
+ svntest.actions.run_and_verify_patch('', os.path.abspath(patch_file_path),
expected_output,
expected_disk,
expected_status,
@@ -2855,7 +2847,7 @@ def patch_prop_with_fuzz(sbox):
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
# We have replaced a couple of lines to cause fuzz. Those lines contains
# the word fuzz
@@ -2969,7 +2961,7 @@ def patch_prop_with_fuzz(sbox):
])
expected_output = [
- ' U %s\n' % os.path.join(wc_dir, 'A', 'mu'),
+ ' U %s\n' % sbox.ospath('A/mu'),
'> applied hunk ## -1,6 +1,7 ## with fuzz 1 (prop)\n',
'> applied hunk ## -7,7 +8,9 ## with fuzz 2 (prop)\n',
'> applied hunk ## -19,6 +20,7 ## with offset 1 and fuzz 2 (prop)\n',
@@ -2994,11 +2986,11 @@ def patch_prop_with_fuzz(sbox):
def patch_git_empty_files(sbox):
"patch that contains empty files"
- sbox.build()
+ sbox.build(read_only = True)
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
- new_path = os.path.join(wc_dir, 'new')
+ new_path = sbox.ospath('new')
unidiff_patch = [
"Index: new\n",
@@ -3014,8 +3006,8 @@ def patch_git_empty_files(sbox):
svntest.main.file_write(patch_file_path, ''.join(unidiff_patch))
expected_output = [
- 'A %s\n' % os.path.join(wc_dir, 'new'),
- 'D %s\n' % os.path.join(wc_dir, 'iota'),
+ 'A %s\n' % sbox.ospath('new'),
+ 'D %s\n' % sbox.ospath('iota'),
]
expected_disk = svntest.main.greek_state.copy()
expected_disk.add({'new' : Item(contents="")})
@@ -3043,7 +3035,7 @@ def patch_old_target_names(sbox):
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
mu_contents = [
"Dear internet user,\n",
@@ -3142,7 +3134,7 @@ def patch_old_target_names(sbox):
]
expected_output = [
- 'U %s\n' % os.path.join(wc_dir, 'A', 'mu'),
+ 'U %s\n' % sbox.ospath('A/mu'),
]
expected_disk = svntest.main.greek_state.copy()
@@ -3169,7 +3161,7 @@ def patch_reverse_revert(sbox):
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
mu_contents_pre_patch = [
"Dear internet user,\n",
@@ -3299,11 +3291,11 @@ def patch_reverse_revert(sbox):
]
expected_output = [
- 'U %s\n' % os.path.join(wc_dir, 'A', 'D', 'gamma'),
- 'U %s\n' % os.path.join(wc_dir, 'iota'),
- 'A %s\n' % os.path.join(wc_dir, 'new'),
- 'U %s\n' % os.path.join(wc_dir, 'A', 'mu'),
- 'D %s\n' % os.path.join(wc_dir, 'A', 'B', 'E', 'beta'),
+ 'U %s\n' % sbox.ospath('A/D/gamma'),
+ 'U %s\n' % sbox.ospath('iota'),
+ 'A %s\n' % sbox.ospath('new'),
+ 'U %s\n' % sbox.ospath('A/mu'),
+ 'D %s\n' % sbox.ospath('A/B/E/beta'),
]
expected_disk = svntest.main.greek_state.copy()
@@ -3333,11 +3325,11 @@ def patch_reverse_revert(sbox):
# Applying the same patch in reverse should undo local mods
expected_output = [
- 'G %s\n' % os.path.join(wc_dir, 'A', 'D', 'gamma'),
- 'G %s\n' % os.path.join(wc_dir, 'iota'),
- 'D %s\n' % os.path.join(wc_dir, 'new'),
- 'G %s\n' % os.path.join(wc_dir, 'A', 'mu'),
- 'A %s\n' % os.path.join(wc_dir, 'A', 'B', 'E', 'beta'),
+ 'G %s\n' % sbox.ospath('A/D/gamma'),
+ 'G %s\n' % sbox.ospath('iota'),
+ 'D %s\n' % sbox.ospath('new'),
+ 'G %s\n' % sbox.ospath('A/mu'),
+ 'A %s\n' % sbox.ospath('A/B/E/beta'),
]
expected_disk = svntest.main.greek_state.copy()
expected_disk.tweak('A/mu', contents=''.join(mu_contents_pre_patch))
@@ -3364,11 +3356,11 @@ def patch_one_property(sbox, trailing_eol):
"""Helper. Apply a patch that sets the property 'k' to 'v\n' or to 'v',
and check the results."""
- sbox.build()
+ sbox.build(read_only = True)
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
# Apply patch
@@ -3439,7 +3431,7 @@ def patch_set_prop_no_eol(sbox):
def patch_add_symlink(sbox):
"patch that adds a symlink"
- sbox.build()
+ sbox.build(read_only = True)
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
@@ -3464,7 +3456,7 @@ def patch_add_symlink(sbox):
svntest.main.file_write(patch_file_path, ''.join(unidiff_patch))
expected_output = [
- 'A %s\n' % os.path.join(wc_dir, 'iota_symlink'),
+ 'A %s\n' % sbox.ospath('iota_symlink'),
]
expected_disk = svntest.main.greek_state.copy()
@@ -3484,6 +3476,192 @@ def patch_add_symlink(sbox):
1, # check-props
1) # dry-run
+def patch_moved_away(sbox):
+ "patch a file that was moved away"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ patch_file_path = make_patch_path(sbox)
+ mu_path = sbox.ospath('A/mu')
+
+ mu_contents = [
+ "Dear internet user,\n",
+ "\n",
+ "We wish to congratulate you over your email success in our computer\n",
+ "Balloting. This is a Millennium Scientific Electronic Computer Draw\n",
+ "in which email addresses were used. All participants were selected\n",
+ "through a computer ballot system drawn from over 100,000 company\n",
+ "and 50,000,000 individual email addresses from all over the world.\n",
+ "\n",
+ "Your email address drew and have won the sum of 750,000 Euros\n",
+ "( Seven Hundred and Fifty Thousand Euros) in cash credited to\n",
+ "file with\n",
+ " REFERENCE NUMBER: ESP/WIN/008/05/10/MA;\n",
+ " WINNING NUMBER : 14-17-24-34-37-45-16\n",
+ " BATCH NUMBERS :\n",
+ " EULO/1007/444/606/08;\n",
+ " SERIAL NUMBER: 45327\n",
+ "and PROMOTION DATE: 13th June. 2009\n",
+ "\n",
+ "To claim your winning prize, you are to contact the appointed\n",
+ "agent below as soon as possible for the immediate release of your\n",
+ "winnings with the below details.\n",
+ "\n",
+ "Again, we wish to congratulate you over your email success in our\n"
+ "computer Balloting.\n"
+ ]
+
+ # Set mu contents
+ svntest.main.file_write(mu_path, ''.join(mu_contents))
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/mu' : Item(verb='Sending'),
+ })
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('A/mu', wc_rev=2)
+ svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+ expected_status, None, wc_dir)
+
+ # Move mu away
+ sbox.simple_move("A/mu", "A/mu2")
+
+ # Apply patch
+ unidiff_patch = [
+ "--- A/mu.orig 2009-06-24 15:23:55.000000000 +0100\n",
+ "+++ A/mu 2009-06-24 15:21:23.000000000 +0100\n",
+ "@@ -6,6 +6,9 @@\n",
+ " through a computer ballot system drawn from over 100,000 company\n",
+ " and 50,000,000 individual email addresses from all over the world.\n",
+ " \n",
+ "+It is a promotional program aimed at encouraging internet users;\n",
+ "+therefore you do not need to buy ticket to enter for it.\n",
+ "+\n",
+ " Your email address drew and have won the sum of 750,000 Euros\n",
+ " ( Seven Hundred and Fifty Thousand Euros) in cash credited to\n",
+ " file with\n",
+ "@@ -14,11 +17,8 @@\n",
+ " BATCH NUMBERS :\n",
+ " EULO/1007/444/606/08;\n",
+ " SERIAL NUMBER: 45327\n",
+ "-and PROMOTION DATE: 13th June. 2009\n",
+ "+and PROMOTION DATE: 14th June. 2009\n",
+ " \n",
+ " To claim your winning prize, you are to contact the appointed\n",
+ " agent below as soon as possible for the immediate release of your\n",
+ " winnings with the below details.\n",
+ "-\n",
+ "-Again, we wish to congratulate you over your email success in our\n",
+ "-computer Balloting.\n",
+ ]
+
+ svntest.main.file_write(patch_file_path, ''.join(unidiff_patch))
+
+ mu_contents = [
+ "Dear internet user,\n",
+ "\n",
+ "We wish to congratulate you over your email success in our computer\n",
+ "Balloting. This is a Millennium Scientific Electronic Computer Draw\n",
+ "in which email addresses were used. All participants were selected\n",
+ "through a computer ballot system drawn from over 100,000 company\n",
+ "and 50,000,000 individual email addresses from all over the world.\n",
+ "\n",
+ "It is a promotional program aimed at encouraging internet users;\n",
+ "therefore you do not need to buy ticket to enter for it.\n",
+ "\n",
+ "Your email address drew and have won the sum of 750,000 Euros\n",
+ "( Seven Hundred and Fifty Thousand Euros) in cash credited to\n",
+ "file with\n",
+ " REFERENCE NUMBER: ESP/WIN/008/05/10/MA;\n",
+ " WINNING NUMBER : 14-17-24-34-37-45-16\n",
+ " BATCH NUMBERS :\n",
+ " EULO/1007/444/606/08;\n",
+ " SERIAL NUMBER: 45327\n",
+ "and PROMOTION DATE: 14th June. 2009\n",
+ "\n",
+ "To claim your winning prize, you are to contact the appointed\n",
+ "agent below as soon as possible for the immediate release of your\n",
+ "winnings with the below details.\n",
+ ]
+
+ expected_output = [
+ 'U %s\n' % sbox.ospath('A/mu2'),
+ ]
+
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.add({'A/mu2': Item(contents=''.join(mu_contents))})
+ expected_disk.remove('A/mu')
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.add({
+ 'A/mu2' : Item(status='A ', copied='+', wc_rev='-', moved_from='A/mu'),
+ })
+
+ expected_status.tweak('A/mu', status='D ', wc_rev=2, moved_to='A/mu2')
+
+ expected_skip = wc.State('', { })
+
+ svntest.actions.run_and_verify_patch(wc_dir, os.path.abspath(patch_file_path),
+ expected_output,
+ expected_disk,
+ expected_status,
+ expected_skip,
+ None, # expected err
+ 1, # check-props
+ 1) # dry-run
+
+@Issue(3991)
+def patch_lacking_trailing_eol(sbox):
+ "patch file lacking trailing eol"
+
+ sbox.build(read_only = True)
+ wc_dir = sbox.wc_dir
+
+ patch_file_path = make_patch_path(sbox)
+ iota_path = sbox.ospath('iota')
+ mu_path = sbox.ospath('A/mu')
+
+ # Prepare
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+
+ # Apply patch
+ unidiff_patch = [
+ "Index: iota\n",
+ "===================================================================\n",
+ "--- iota\t(revision 1)\n",
+ "+++ iota\t(working copy)\n",
+ # TODO: -1 +1
+ "@@ -1 +1,2 @@\n",
+ " This is the file 'iota'.\n",
+ "+Some more bytes", # No trailing \n on this line!
+ ]
+
+ svntest.main.file_write(patch_file_path, ''.join(unidiff_patch))
+
+ gamma_contents = "It is the file 'gamma'.\n"
+ iota_contents = "This is the file 'iota'.\n"
+ new_contents = "new\n"
+
+ expected_output = [
+ 'U %s\n' % sbox.ospath('iota'),
+ ]
+
+ # Expect a newline to be appended
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.tweak('iota', contents=iota_contents + "Some more bytes")
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('iota', status='M ')
+
+ expected_skip = wc.State('', { })
+
+ svntest.actions.run_and_verify_patch(wc_dir, os.path.abspath(patch_file_path),
+ expected_output,
+ expected_disk,
+ expected_status,
+ expected_skip,
+ None, # expected err
+ 1, # check-props
+ 1) # dry-run
@Issue(4003)
def patch_deletes_prop(sbox):
@@ -3493,7 +3671,7 @@ def patch_deletes_prop(sbox):
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
- iota_path = os.path.join(wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
svntest.main.run_svn(None, 'propset', 'propname', 'propvalue',
iota_path)
@@ -3528,7 +3706,7 @@ def patch_deletes_prop(sbox):
expected_status.tweak('iota', wc_rev=2)
expected_skip = wc.State('', { })
expected_output = [
- ' U %s\n' % os.path.join(wc_dir, 'iota'),
+ ' U %s\n' % sbox.ospath('iota'),
]
svntest.actions.run_and_verify_patch(wc_dir, os.path.abspath(patch_file_path),
expected_output,
@@ -3543,7 +3721,7 @@ def patch_deletes_prop(sbox):
# *adds* the property.
svntest.main.run_svn(None, 'revert', iota_path)
- # Apply patch
+ # Apply patch
unidiff_patch = [
"Index: iota\n",
"===================================================================\n",
@@ -3565,19 +3743,19 @@ def patch_deletes_prop(sbox):
expected_skip,
None, # expected err
1, # check-props
- 0, # dry-run
- '--reverse-diff')
+ 1, # dry-run
+ '--reverse-diff')
@Issue(4004)
def patch_reversed_add_with_props(sbox):
"reverse patch new file+props atop uncommitted"
- sbox.build()
+ sbox.build(read_only = True)
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
# Add a new file which also has props set on it.
- newfile_path = os.path.join(wc_dir, 'newfile')
+ newfile_path = sbox.ospath('newfile')
newfile_contents = ["This is the file 'newfile'.\n"]
svntest.main.file_write(newfile_path, ''.join(newfile_contents))
svntest.main.run_svn(None, 'add', newfile_path)
@@ -3614,8 +3792,8 @@ def patch_reversed_add_with_props(sbox):
expected_skip,
None, # expected err
1, # check-props
- 0, # dry-run
- '--reverse-diff')
+ 1, # dry-run
+ '--reverse-diff')
@Issue(4004)
def patch_reversed_add_with_props2(sbox):
@@ -3626,7 +3804,7 @@ def patch_reversed_add_with_props2(sbox):
patch_file_path = make_patch_path(sbox)
# Add a new file which also has props set on it.
- newfile_path = os.path.join(wc_dir, 'newfile')
+ newfile_path = sbox.ospath('newfile')
newfile_contents = ["This is the file 'newfile'.\n"]
svntest.main.file_write(newfile_path, ''.join(newfile_contents))
svntest.main.run_svn(None, 'add', newfile_path)
@@ -3669,13 +3847,13 @@ def patch_reversed_add_with_props2(sbox):
expected_skip,
None, # expected err
1, # check-props
- 0, # dry-run
- '--reverse-diff')
+ 1, # dry-run
+ '--reverse-diff')
def patch_dev_null(sbox):
"patch with /dev/null filenames"
- sbox.build()
+ sbox.build(read_only = True)
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
@@ -3704,8 +3882,8 @@ def patch_dev_null(sbox):
new_contents = "new\n"
expected_output = [
- 'A %s\n' % os.path.join(wc_dir, 'new'),
- 'D %s\n' % os.path.join(wc_dir, 'A', 'B', 'E', 'beta'),
+ 'A %s\n' % sbox.ospath('new'),
+ 'D %s\n' % sbox.ospath('A/B/E/beta'),
]
expected_disk = svntest.main.greek_state.copy()
@@ -3731,7 +3909,7 @@ def patch_dev_null(sbox):
def patch_delete_and_skip(sbox):
"patch that deletes and skips"
- sbox.build()
+ sbox.build(read_only = True)
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
@@ -3778,78 +3956,25 @@ def patch_delete_and_skip(sbox):
expected_output = [
'D %s\n' % os.path.join('A', 'B', 'E', 'alpha'),
'D %s\n' % os.path.join('A', 'B', 'E', 'beta'),
- 'Skipped missing target: \'%s\'\n' % skipped_path,
'D %s\n' % os.path.join('A', 'B', 'E'),
- 'Summary of conflicts:\n',
- ' Skipped paths: 1\n'
- ]
+ 'Skipped missing target: \'%s\'\n' % skipped_path,
+ ] + svntest.main.summary_of_conflicts(skipped_paths=1)
expected_disk = svntest.main.greek_state.copy()
expected_disk.remove('A/B/E/alpha')
expected_disk.remove('A/B/E/beta')
expected_disk.remove('A/B/E')
- expected_status = svntest.actions.get_virginal_state('.', 1)
+ expected_status = svntest.actions.get_virginal_state('', 1)
expected_status.tweak('A/B/E', status='D ')
expected_status.tweak('A/B/E/alpha', status='D ')
expected_status.tweak('A/B/E/beta', status='D ')
- expected_skip = wc.State('', {skipped_path: Item()})
-
- svntest.actions.run_and_verify_patch('.', os.path.abspath(patch_file_path),
- expected_output,
- expected_disk,
- expected_status,
- expected_skip,
- None, # expected err
- 1, # check-props
- 1) # dry-run
-
-@Issue(3991)
-def patch_lacking_trailing_eol(sbox):
- "patch file lacking trailing eol"
- sbox.build(read_only = True)
- wc_dir = sbox.wc_dir
-
- patch_file_path = make_patch_path(sbox)
- iota_path = os.path.join(wc_dir, 'iota')
- mu_path = os.path.join(wc_dir, 'A', 'mu')
-
- # Prepare
- expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
-
- # Apply patch
- unidiff_patch = [
- "Index: iota\n",
- "===================================================================\n",
- "--- iota\t(revision 1)\n",
- "+++ iota\t(working copy)\n",
- # TODO: -1 +1
- "@@ -1 +1,2 @@\n",
- " This is the file 'iota'.\n",
- "+Some more bytes", # No trailing \n on this line!
- ]
-
- svntest.main.file_write(patch_file_path, ''.join(unidiff_patch))
-
- gamma_contents = "It is the file 'gamma'.\n"
- iota_contents = "This is the file 'iota'.\n"
- new_contents = "new\n"
-
- expected_output = [
- 'U %s\n' % os.path.join(wc_dir, 'iota'),
- ]
-
- # Expect a newline to be appended
- expected_disk = svntest.main.greek_state.copy()
- expected_disk.tweak('iota', contents=iota_contents + "Some more bytes")
+ expected_skip = wc.State(
+ '',
+ {skipped_path: Item(verb='Skipped missing target')})
- expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
- expected_status.tweak('iota', status='M ')
-
- expected_skip = wc.State('', { })
-
- svntest.actions.run_and_verify_patch(wc_dir, os.path.abspath(patch_file_path),
+ svntest.actions.run_and_verify_patch('', os.path.abspath(patch_file_path),
expected_output,
expected_disk,
expected_status,
@@ -3865,25 +3990,58 @@ def patch_target_no_eol_at_eof(sbox):
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
- iota_path = os.path.join(wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
+ mu_path = sbox.ospath('A/mu')
iota_contents = [
"This is the file iota."
]
+ mu_contents = [
+ "context\n",
+ "context\n",
+ "context\n",
+ "context\n",
+ "This is the file mu.\n",
+ "context\n",
+ "context\n",
+ "context\n",
+ "context", # no newline at end of file
+ ]
+
svntest.main.file_write(iota_path, ''.join(iota_contents))
+ svntest.main.file_write(mu_path, ''.join(mu_contents))
expected_output = svntest.wc.State(wc_dir, {
'iota' : Item(verb='Sending'),
+ 'A/mu' : Item(verb='Sending'),
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.tweak('iota', wc_rev=2)
+ expected_status.tweak('A/mu', wc_rev=2)
svntest.actions.run_and_verify_commit(wc_dir, expected_output,
expected_status, None, wc_dir)
unidiff_patch = [
- "--- iota\t(revision 1)\n",
+ "Index: A/mu\n",
+ "===================================================================\n",
+ "--- A/mu\t(revision 2)\n",
+ "+++ A/mu\t(working copy)\n",
+ "@@ -2,8 +2,8 @@ context\n",
+ " context\n",
+ " context\n",
+ " context\n",
+ "-This is the file mu.\n",
+ "+It is really the file mu.\n",
+ " context\n",
+ " context\n",
+ " context\n",
+ " context\n",
+ "\\ No newline at end of file\n",
+ "Index: iota\n",
+ "===================================================================\n",
+ "--- iota\t(revision 2)\n",
"+++ iota\t(working copy)\n",
- "@@ -1,7 +1,7 @@\n",
- "-This is the file iota.\n"
+ "@@ -1 +1 @@\n",
+ "-This is the file iota.\n",
"\\ No newline at end of file\n",
"+It is really the file 'iota'.\n",
"\\ No newline at end of file\n",
@@ -3894,15 +4052,29 @@ def patch_target_no_eol_at_eof(sbox):
iota_contents = [
"It is really the file 'iota'."
]
+ mu_contents = [
+ "context\n",
+ "context\n",
+ "context\n",
+ "context\n",
+ "It is really the file mu.\n",
+ "context\n",
+ "context\n",
+ "context\n",
+ "context", # no newline at end of file
+ ]
expected_output = [
- 'U %s\n' % os.path.join(wc_dir, 'iota'),
+ 'U %s\n' % sbox.ospath('A/mu'),
+ 'U %s\n' % sbox.ospath('iota'),
]
expected_disk = svntest.main.greek_state.copy()
expected_disk.tweak('iota', contents=''.join(iota_contents))
+ expected_disk.tweak('A/mu', contents=''.join(mu_contents))
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.tweak('iota', status='M ', wc_rev=2)
+ expected_status.tweak('A/mu', status='M ', wc_rev=2)
expected_skip = wc.State('', { })
@@ -3940,10 +4112,10 @@ def patch_add_and_delete(sbox):
svntest.main.file_write(patch_file_path, ''.join(unidiff_patch))
expected_output = [
- 'A %s\n' % os.path.join(wc_dir, 'P'),
- 'A %s\n' % os.path.join(wc_dir, 'P', 'Q'),
- 'A %s\n' % os.path.join(wc_dir, 'P', 'Q', 'foo'),
- 'D %s\n' % os.path.join(wc_dir, 'iota'),
+ 'A %s\n' % sbox.ospath('P'),
+ 'A %s\n' % sbox.ospath('P/Q'),
+ 'A %s\n' % sbox.ospath('P/Q/foo'),
+ 'D %s\n' % sbox.ospath('iota'),
]
expected_disk = svntest.main.greek_state.copy()
expected_disk.remove('iota')
@@ -3968,6 +4140,761 @@ def patch_add_and_delete(sbox):
1, # check-props
1) # dry-run
+
+def patch_git_with_index_line(sbox):
+ "apply git patch with 'index' line"
+
+ sbox.build(read_only = True)
+ wc_dir = sbox.wc_dir
+ patch_file_path = make_patch_path(sbox)
+
+ unidiff_patch = [
+ "diff --git a/src/tools/ConsoleRunner/hi.txt b/src/tools/ConsoleRunner/hi.txt\n",
+ "new file mode 100644\n",
+ "index 0000000..c82a38f\n",
+ "--- /dev/null\n",
+ "+++ b/src/tools/ConsoleRunner/hi.txt\n",
+ "@@ -0,0 +1 @@\n",
+ "+hihihihihihi\n",
+ "\ No newline at end of file\n",
+ ]
+
+ svntest.main.file_write(patch_file_path, ''.join(unidiff_patch))
+
+ expected_output = [
+ 'A %s\n' % sbox.ospath('src'),
+ 'A %s\n' % sbox.ospath('src/tools'),
+ 'A %s\n' % sbox.ospath('src/tools/ConsoleRunner'),
+ 'A %s\n' % sbox.ospath('src/tools/ConsoleRunner/hi.txt'),
+ ]
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.add({
+ 'src' : Item(status='A ', wc_rev=0),
+ 'src/tools' : Item(status='A ', wc_rev=0),
+ 'src/tools/ConsoleRunner' : Item(status='A ', wc_rev=0),
+ 'src/tools/ConsoleRunner/hi.txt' : Item(status='A ', wc_rev=0),
+ })
+
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.add({'src' : Item(),
+ 'src/tools' : Item(),
+ 'src/tools/ConsoleRunner' : Item(),
+ 'src/tools/ConsoleRunner/hi.txt' :
+ Item(contents="hihihihihihi")
+ })
+
+ expected_skip = wc.State('', { })
+
+ svntest.actions.run_and_verify_patch(wc_dir, os.path.abspath(patch_file_path),
+ expected_output,
+ expected_disk,
+ expected_status,
+ expected_skip,
+ None, # expected err
+ 1, # check-props
+ 1) # dry-run
+
+@Issue(4273)
+def patch_change_symlink_target(sbox):
+ "patch changes symlink target"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ patch_file_path = make_patch_path(sbox)
+ svntest.main.file_write(patch_file_path, '\n'.join([
+ "Index: link",
+ "===================================================================",
+ "--- link\t(revision 1)",
+ "+++ link\t(working copy)",
+ "@@ -1 +1 @@",
+ "-link foo",
+ "\\ No newline at end of file",
+ "+link bardame",
+ "\\ No newline at end of file",
+ "",
+ ]))
+
+ # r2 - Try as plain text with how we encode the symlink
+ svntest.main.file_write(sbox.ospath('link'), 'link foo')
+ sbox.simple_add('link')
+
+ expected_output = svntest.wc.State(wc_dir, {
+ 'link' : Item(verb='Adding'),
+ })
+ svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+ None, None, wc_dir)
+
+ patch_output = [
+ 'U %s\n' % sbox.ospath('link'),
+ ]
+
+ svntest.actions.run_and_verify_svn(None, patch_output, [],
+ 'patch', patch_file_path, wc_dir)
+
+ # r3 - Store result
+ expected_output = svntest.wc.State(wc_dir, {
+ 'link' : Item(verb='Sending'),
+ })
+ svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+ None, None, wc_dir)
+
+ # r4 - Now as symlink
+ sbox.simple_rm('link')
+ sbox.simple_add_symlink('foo', 'link')
+ expected_output = svntest.wc.State(wc_dir, {
+ 'link' : Item(verb='Replacing'),
+ })
+ svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+ None, None, wc_dir)
+
+ svntest.actions.run_and_verify_svn(None, patch_output, [],
+ 'patch', patch_file_path, wc_dir)
+
+ # TODO: when it passes, verify that the on-disk 'link' is correct ---
+ # symlink to 'bar' (or "link bar" on non-HAVE_SYMLINK platforms)
+
+ # BH: easy check for node type: a non symlink would show as obstructed
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.add({
+ 'link' : Item(status='M ', wc_rev='4'),
+ })
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+def patch_replace_dir_with_file_and_vv(sbox):
+ "replace dir with file and file with dir"
+ sbox.build(read_only=True)
+
+ patch_file_path = make_patch_path(sbox)
+ svntest.main.file_write(patch_file_path, ''.join([
+ # Delete all files in D and descendants to delete D itself
+ "Index: A/D/G/pi\n",
+ "===================================================================\n",
+ "--- A/D/G/pi\t(revision 1)\n",
+ "+++ A/D/G/pi\t(working copy)\n",
+ "@@ -1 +0,0 @@\n",
+ "-This is the file 'pi'.\n",
+ "Index: A/D/G/rho\n",
+ "===================================================================\n",
+ "--- A/D/G/rho\t(revision 1)\n",
+ "+++ A/D/G/rho\t(working copy)\n",
+ "@@ -1 +0,0 @@\n",
+ "-This is the file 'rho'.\n",
+ "Index: A/D/G/tau\n",
+ "===================================================================\n",
+ "--- A/D/G/tau\t(revision 1)\n",
+ "+++ A/D/G/tau\t(working copy)\n",
+ "@@ -1 +0,0 @@\n",
+ "-This is the file 'tau'.\n",
+ "Index: A/D/H/chi\n",
+ "===================================================================\n",
+ "--- A/D/H/chi\t(revision 1)\n",
+ "+++ A/D/H/chi\t(working copy)\n",
+ "@@ -1 +0,0 @@\n",
+ "-This is the file 'chi'.\n",
+ "Index: A/D/H/omega\n",
+ "===================================================================\n",
+ "--- A/D/H/omega\t(revision 1)\n",
+ "+++ A/D/H/omega\t(working copy)\n",
+ "@@ -1 +0,0 @@\n",
+ "-This is the file 'omega'.\n",
+ "Index: A/D/H/psi\n",
+ "===================================================================\n",
+ "--- A/D/H/psi\t(revision 1)\n",
+ "+++ A/D/H/psi\t(working copy)\n",
+ "@@ -1 +0,0 @@\n",
+ "-This is the file 'psi'.\n",
+ "Index: A/D/gamma\n",
+ "===================================================================\n",
+ "--- A/D/gamma\t(revision 1)\n",
+ "+++ A/D/gamma\t(working copy)\n",
+ "@@ -1 +0,0 @@\n",
+ "-This is the file 'gamma'.\n",
+ # Delete iota
+ "Index: iota\n",
+ "===================================================================\n",
+ "--- iota\t(revision 1)\n",
+ "+++ iota\t(working copy)\n",
+ "@@ -1 +0,0 @@\n",
+ "-This is the file 'iota'.\n",
+
+ # Add A/D as file
+ "Index: A/D\n",
+ "===================================================================\n",
+ "--- A/D\t(revision 0)\n",
+ "+++ A/D\t(working copy)\n",
+ "@@ -0,0 +1 @@\n",
+ "+New file\n",
+ "\ No newline at end of file\n",
+
+ # Add iota as directory
+ "Index: iota\n",
+ "===================================================================\n",
+ "--- iota\t(revision 1)\n",
+ "+++ iota\t(working copy)\n",
+ "\n",
+ "Property changes on: iota\n",
+ "___________________________________________________________________\n",
+ "Added: k\n",
+ "## -0,0 +1 ##\n",
+ "+v\n",
+ "\ No newline at end of property\n",
+ ]))
+
+ expected_output = [
+ 'D %s\n' % sbox.ospath('A/D/G/pi'),
+ 'D %s\n' % sbox.ospath('A/D/G/rho'),
+ 'D %s\n' % sbox.ospath('A/D/G/tau'),
+ 'D %s\n' % sbox.ospath('A/D/G'),
+ 'D %s\n' % sbox.ospath('A/D/H/chi'),
+ 'D %s\n' % sbox.ospath('A/D/H/omega'),
+ 'D %s\n' % sbox.ospath('A/D/H/psi'),
+ 'D %s\n' % sbox.ospath('A/D/H'),
+ 'D %s\n' % sbox.ospath('A/D/gamma'),
+ 'D %s\n' % sbox.ospath('A/D'),
+ 'D %s\n' % sbox.ospath('iota'),
+ 'A %s\n' % sbox.ospath('A/D'),
+ 'A %s\n' % sbox.ospath('iota'),
+ ]
+
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'patch', patch_file_path, sbox.wc_dir)
+
+@Issue(4297)
+def single_line_mismatch(sbox):
+ "single line replacement mismatch"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ patch_file_path = make_patch_path(sbox)
+ svntest.main.file_write(patch_file_path, ''.join([
+ "Index: test\n",
+ "===================================================================\n",
+ "--- test\t(revision 1)\n",
+ "+++ test\t(working copy)\n",
+ "@@ -1 +1 @@\n",
+ "-foo\n",
+ "\\ No newline at end of file\n",
+ "+bar\n",
+ "\\ No newline at end of file\n"
+ ]))
+
+ # r2 - Try as plain text with how we encode the symlink
+ svntest.main.file_write(sbox.ospath('test'), 'line')
+ sbox.simple_add('test')
+ sbox.simple_commit()
+
+ # And now this patch should fail, as 'line' doesn't equal 'foo'
+ # But yet it shows up as deleted instead of conflicted
+ expected_output = [
+ 'C %s\n' % sbox.ospath('test'),
+ '> rejected hunk @@ -1,1 +1,1 @@\n',
+ ] + svntest.main.summary_of_conflicts(text_conflicts=1)
+
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'patch', patch_file_path, wc_dir)
+
+@Issue(3644)
+def patch_empty_file(sbox):
+ "apply a patch to an empty file"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ patch_file_path = make_patch_path(sbox)
+ svntest.main.file_write(patch_file_path, ''.join([
+ # patch a file containing just '\n' to 'replacement\n'
+ "Index: lf.txt\n",
+ "===================================================================\n",
+ "--- lf.txt\t(revision 2)\n",
+ "+++ lf.txt\t(working copy)\n",
+ "@@ -1 +1 @@\n",
+ "\n"
+ "+replacement\n",
+
+ # patch a new file 'new.txt\n'
+ "Index: new.txt\n",
+ "===================================================================\n",
+ "--- new.txt\t(revision 0)\n",
+ "+++ new.txt\t(working copy)\n",
+ "@@ -0,0 +1 @@\n",
+ "+new file\n",
+
+ # patch a file containing 0 bytes to 'replacement\n'
+ "Index: empty.txt\n",
+ "===================================================================\n",
+ "--- empty.txt\t(revision 2)\n",
+ "+++ empty.txt\t(working copy)\n",
+ "@@ -0,0 +1 @@\n",
+ "+replacement\n",
+ ]))
+
+ sbox.simple_add_text('', 'empty.txt')
+ sbox.simple_add_text('\n', 'lf.txt')
+ sbox.simple_commit()
+
+ expected_output = [
+ 'U %s\n' % sbox.ospath('lf.txt'),
+ 'A %s\n' % sbox.ospath('new.txt'),
+ 'U %s\n' % sbox.ospath('empty.txt'),
+ # Not sure if this line is necessary, but it doesn't hurt
+ '> applied hunk @@ -0,0 +1,1 @@ with offset 0\n',
+ ]
+
+ # Current result: lf.txt patched ok, new created, empty succeeds with offset.
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'patch', patch_file_path, wc_dir)
+
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.add({
+ 'lf.txt' : Item(contents="\n"),
+ 'new.txt' : Item(contents="new file\n"),
+ 'empty.txt' : Item(contents="replacement\n"),
+ })
+
+ svntest.actions.verify_disk(wc_dir, expected_disk)
+
+@Issue(3362)
+def patch_apply_no_fuz(sbox):
+ "svn diff created patch should apply without fuz"
+
+ sbox.build(read_only=True)
+ wc_dir = sbox.wc_dir
+
+ svntest.main.file_write(sbox.ospath('test.txt'), '\n'.join([
+ "line_1",
+ "line_2",
+ "line_3",
+ "line_4",
+ "line_5",
+ "line_6",
+ "line_7",
+ "line_8",
+ "line_9",
+ "line_10",
+ "line_11",
+ "line_12",
+ "line_13",
+ "line_14",
+ "line_15",
+ "line_16",
+ "line_17",
+ "line_18",
+ "line_19",
+ "line_20",
+ "line_21",
+ "line_22",
+ "line_23",
+ "line_24",
+ "line_25",
+ "line_26",
+ "line_27",
+ "line_28",
+ "line_29",
+ "line_30",
+ ""
+ ]))
+ svntest.main.file_write(sbox.ospath('test_v2.txt'), '\n'.join([
+ "line_1a",
+ "line_1b",
+ "line_1c",
+ "line_1",
+ "line_2",
+ "line_3",
+ "line_4",
+ "line_5a",
+ "line_5b",
+ "line_5c",
+ "line_6",
+ "line_7",
+ "line_8",
+ "line_9",
+ "line_10",
+ "line_11a",
+ "line_11b",
+ "line_11c",
+ "line_12",
+ "line_13",
+ "line_14",
+ "line_15",
+ "line_16",
+ "line_17",
+ "line_18",
+ "line_19a",
+ "line_19b",
+ "line_19c",
+ "line_20",
+ "line_21",
+ "line_22",
+ "line_23",
+ "line_24",
+ "line_25",
+ "line_26",
+ "line_27a",
+ "line_27b",
+ "line_27c",
+ "line_28",
+ "line_29",
+ "line_30",
+ ""
+ ]))
+
+ sbox.simple_add('test.txt', 'test_v2.txt')
+
+ result, out_text, err_text = svntest.main.run_svn(None,
+ 'diff',
+ '--old',
+ sbox.ospath('test.txt'),
+ '--new',
+ sbox.ospath('test_v2.txt'))
+
+ patch_path = sbox.ospath('patch.diff')
+ svntest.main.file_write(patch_path, ''.join(out_text))
+
+ expected_output = [
+ 'G %s\n' % sbox.ospath('test.txt'),
+ ]
+
+ # Current result: lf.txt patched ok, new created, empty succeeds with offset.
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'patch', patch_path, wc_dir)
+
+ if not filecmp.cmp(sbox.ospath('test.txt'), sbox.ospath('test_v2.txt')):
+ raise svntest.Failure("Patch result not identical")
+
+@XFail()
+def patch_lacking_trailing_eol_on_context(sbox):
+ "patch file lacking trailing eol on context"
+
+ # Apply a patch where a hunk (the only hunk, in this case) ends with a
+ # context line that has no EOL, where this context line is going to
+ # match an existing line that *does* have an EOL.
+ #
+ # Around trunk@1443700, 'svn patch' wrongly removed an EOL from the
+ # target file at that position.
+
+ sbox.build(read_only = True)
+ wc_dir = sbox.wc_dir
+
+ patch_file_path = make_patch_path(sbox)
+
+ # Prepare
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_disk = svntest.main.greek_state.copy()
+
+ # Prepare the patch
+ unidiff_patch = [
+ "Index: iota\n",
+ "===================================================================\n",
+ "--- iota\t(revision 1)\n",
+ "+++ iota\t(working copy)\n",
+ # TODO: -1 +1
+ "@@ -1 +1,2 @@\n",
+ "+Some more bytes\n",
+ " This is the file 'iota'.", # No trailing \n on this context line!
+ ]
+ svntest.main.file_write(patch_file_path, ''.join(unidiff_patch))
+
+ iota_contents = "This is the file 'iota'.\n"
+
+ expected_output = [ 'U %s\n' % sbox.ospath('iota') ]
+
+ # Test where the no-EOL context line is the last line in the target.
+ expected_disk.tweak('iota', contents="Some more bytes\n" + iota_contents)
+ expected_status.tweak('iota', status='M ')
+ expected_skip = wc.State('', { })
+ svntest.actions.run_and_verify_patch(wc_dir, os.path.abspath(patch_file_path),
+ expected_output, expected_disk,
+ expected_status, expected_skip)
+
+ # Test where the no-EOL context line is a non-last line in the target.
+ sbox.simple_revert('iota')
+ sbox.simple_append('iota', "Another line.\n")
+ expected_disk.tweak('iota', contents="Some more bytes\n" + iota_contents +
+ "Another line.\n")
+ expected_output = [ 'G %s\n' % sbox.ospath('iota') ]
+ svntest.actions.run_and_verify_patch(wc_dir, os.path.abspath(patch_file_path),
+ expected_output, expected_disk,
+ expected_status, expected_skip)
+
+def patch_with_custom_keywords(sbox):
+ """patch with custom keywords"""
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ sbox.simple_append('A/mu', '$Qq$\nAB\nZZ\n', truncate=True)
+ sbox.simple_propset('svn:keywords', 'Qq=%R', 'A/mu')
+ sbox.simple_commit()
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.tweak('A/mu',
+ contents='$Qq: %s $\nAB\nZZ\n' % sbox.repo_url)
+ svntest.actions.verify_disk(sbox.wc_dir, expected_disk)
+
+ unidiff_patch = [
+ "Index: A/mu\n",
+ "===================================================================\n",
+ "--- A/mu\t(revision 2)\n",
+ "+++ A/mu\t(working copy)\n",
+ "@@ -1,3 +1,3 @@\n",
+ " $Qq$\n",
+ "-AB\n",
+ "+ABAB\n",
+ " ZZ\n"
+ ]
+
+ patch_file_path = make_patch_path(sbox)
+ svntest.main.file_write(patch_file_path, ''.join(unidiff_patch))
+
+ expected_output = [ 'U %s\n' % sbox.ospath('A/mu') ]
+ expected_disk.tweak('A/mu',
+ contents='$Qq: %s $\nABAB\nZZ\n' % sbox.repo_url)
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('A/mu', wc_rev=2)
+ expected_status.tweak('A/mu', status='M ')
+ expected_skip = wc.State('', { })
+ svntest.actions.run_and_verify_patch(wc_dir, os.path.abspath(patch_file_path),
+ expected_output, expected_disk,
+ expected_status, expected_skip)
+
+
+@XFail()
+@Issue(4533)
+def patch_hunk_avoid_reorder(sbox):
+ """avoid reordering hunks"""
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ sbox.simple_append('A/mu',
+ 'AA\n' 'BB\n' 'CC\n' 'DD\n' 'EE\n' 'FF\n'
+ 'TT\n' 'UU\n' 'VV\n' 'WW\n' 'XX\n' 'YY\n'
+ 'GG\n' 'HH\n' 'II\n' 'JJ\n' 'KK\n' 'LL\n'
+ '33333\n' '33333\n' '33333\n'
+ '33333\n' '33333\n' '33333\n'
+ '33333\n' '33333\n' '33333\n'
+ '33333\n' '33333\n' '33333\n'
+ 'MM\n' 'NN\n' 'OO\n' 'PP\n' 'QQ\n' 'RR\n'
+ 'SS\n' 'TT\n' 'UU\n' 'VV\n' 'WW\n' 'XX\n'
+ 'YY\n' 'ZZ\n', truncate=True)
+ sbox.simple_commit()
+
+ # two hunks, first matches at offset +18, second matches at both -13
+ # and +18 but we want the second match as it is after the first
+ unidiff_patch = [
+ "Index: A/mu\n"
+ "===================================================================\n",
+ "--- A/mu\t(revision 1)\n",
+ "+++ A/mu\t(working copy)\n",
+ "@@ -13,6 +13,7 @@\n",
+ " MM\n",
+ " NN\n",
+ " OO\n",
+ "+11111\n",
+ " PP\n",
+ " QQ\n",
+ " RR\n",
+ "@@ -20,6 +20,7 @@\n",
+ " TT\n",
+ " UU\n",
+ " VV\n",
+ "+22222\n",
+ " WW\n",
+ " XX\n",
+ " YY\n",
+ ]
+
+ patch_file_path = make_patch_path(sbox)
+ svntest.main.file_write(patch_file_path, ''.join(unidiff_patch))
+
+ expected_output = [
+ 'U %s\n' % sbox.ospath('A/mu'),
+ '> applied hunk @@ -13,6 +13,7 @@ with offset 18\n',
+ '> applied hunk @@ -20,6 +20,7 @@ with offset 18\n'
+ ]
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.tweak('A/mu', contents=
+ 'AA\n' 'BB\n' 'CC\n' 'DD\n' 'EE\n' 'FF\n'
+ 'TT\n' 'UU\n' 'VV\n' 'WW\n' 'XX\n' 'YY\n'
+ 'GG\n' 'HH\n' 'II\n' 'JJ\n' 'KK\n' 'LL\n'
+ '33333\n' '33333\n' '33333\n'
+ '33333\n' '33333\n' '33333\n'
+ '33333\n' '33333\n' '33333\n'
+ '33333\n' '33333\n' '33333\n'
+ 'MM\n' 'NN\n' 'OO\n' '11111\n' 'PP\n' 'QQ\n' 'RR\n'
+ 'SS\n' 'TT\n' 'UU\n' 'VV\n' '22222\n' 'WW\n' 'XX\n'
+ 'YY\n' 'ZZ\n')
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('A/mu', status='M ', wc_rev=2)
+ expected_skip = wc.State('', { })
+ svntest.actions.run_and_verify_patch(wc_dir, os.path.abspath(patch_file_path),
+ expected_output, expected_disk,
+ expected_status, expected_skip)
+
+ sbox.simple_revert('A/mu')
+
+ # change patch so second hunk matches at both -14 and +17, we still
+ # want the second match
+ unidiff_patch = [
+ "Index: A/mu\n"
+ "===================================================================\n",
+ "--- A/mu\t(revision 1)\n",
+ "+++ A/mu\t(working copy)\n",
+ "@@ -13,6 +13,7 @@\n",
+ " MM\n",
+ " NN\n",
+ " OO\n",
+ "+11111\n",
+ " PP\n",
+ " QQ\n",
+ " RR\n",
+ "@@ -21,6 +21,7 @@\n",
+ " TT\n",
+ " UU\n",
+ " VV\n",
+ "+22222\n",
+ " WW\n",
+ " XX\n",
+ " YY\n",
+ ]
+
+ patch_file_path = make_patch_path(sbox)
+ svntest.main.file_write(patch_file_path, ''.join(unidiff_patch))
+
+ expected_output = [
+ 'U %s\n' % sbox.ospath('A/mu'),
+ '> applied hunk @@ -13,6 +13,7 @@ with offset 18\n',
+ '> applied hunk @@ -21,6 +21,7 @@ with offset 17\n'
+ ]
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.tweak('A/mu', contents=
+ 'AA\n' 'BB\n' 'CC\n' 'DD\n' 'EE\n' 'FF\n'
+ 'TT\n' 'UU\n' 'VV\n' 'WW\n' 'XX\n' 'YY\n'
+ 'GG\n' 'HH\n' 'II\n' 'JJ\n' 'KK\n' 'LL\n'
+ '33333\n' '33333\n' '33333\n'
+ '33333\n' '33333\n' '33333\n'
+ '33333\n' '33333\n' '33333\n'
+ '33333\n' '33333\n' '33333\n'
+ 'MM\n' 'NN\n' 'OO\n' '11111\n' 'PP\n' 'QQ\n' 'RR\n'
+ 'SS\n' 'TT\n' 'UU\n' 'VV\n' '22222\n' 'WW\n' 'XX\n'
+ 'YY\n' 'ZZ\n')
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('A/mu', status='M ', wc_rev=2)
+ expected_skip = wc.State('', { })
+ svntest.actions.run_and_verify_patch(wc_dir, os.path.abspath(patch_file_path),
+ expected_output, expected_disk,
+ expected_status, expected_skip)
+
+ sbox.simple_revert('A/mu')
+
+ # change patch so second hunk matches at both -12 and +19, we still
+ # want the second match
+ unidiff_patch = [
+ "Index: A/mu\n"
+ "===================================================================\n",
+ "--- A/mu\t(revision 1)\n",
+ "+++ A/mu\t(working copy)\n",
+ "@@ -13,6 +13,7 @@\n",
+ " MM\n",
+ " NN\n",
+ " OO\n",
+ "+11111\n",
+ " PP\n",
+ " QQ\n",
+ " RR\n",
+ "@@ -19,6 +19,7 @@\n",
+ " TT\n",
+ " UU\n",
+ " VV\n",
+ "+22222\n",
+ " WW\n",
+ " XX\n",
+ " YY\n",
+ ]
+
+ patch_file_path = make_patch_path(sbox)
+ svntest.main.file_write(patch_file_path, ''.join(unidiff_patch))
+
+ expected_output = [
+ 'U %s\n' % sbox.ospath('A/mu'),
+ '> applied hunk @@ -13,6 +13,7 @@ with offset 18\n',
+ '> applied hunk @@ -19,6 +19,7 @@ with offset 19\n'
+ ]
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.tweak('A/mu', contents=
+ 'AA\n' 'BB\n' 'CC\n' 'DD\n' 'EE\n' 'FF\n'
+ 'TT\n' 'UU\n' 'VV\n' 'WW\n' 'XX\n' 'YY\n'
+ 'GG\n' 'HH\n' 'II\n' 'JJ\n' 'KK\n' 'LL\n'
+ '33333\n' '33333\n' '33333\n'
+ '33333\n' '33333\n' '33333\n'
+ '33333\n' '33333\n' '33333\n'
+ '33333\n' '33333\n' '33333\n'
+ 'MM\n' 'NN\n' 'OO\n' '11111\n' 'PP\n' 'QQ\n' 'RR\n'
+ 'SS\n' 'TT\n' 'UU\n' 'VV\n' '22222\n' 'WW\n' 'XX\n'
+ 'YY\n' 'ZZ\n')
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('A/mu', status='M ', wc_rev=2)
+ expected_skip = wc.State('', { })
+ svntest.actions.run_and_verify_patch(wc_dir, os.path.abspath(patch_file_path),
+ expected_output, expected_disk,
+ expected_status, expected_skip)
+
+@Issue(4533)
+def patch_hunk_reorder(sbox):
+ """hunks that reorder"""
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ sbox.simple_append('A/mu',
+ 'AA\n' 'BB\n' 'CC\n' 'DD\n' 'EE\n' 'FF\n' 'GG\n'
+ 'HH\n' 'II\n' 'JJ\n' 'KK\n' 'LL\n' 'MM\n' 'NN\n',
+ truncate=True)
+ sbox.simple_commit()
+
+ # Two hunks match in opposite order
+ unidiff_patch = [
+ "Index: A/mu\n"
+ "===================================================================\n",
+ "--- A/mu\t(revision 1)\n",
+ "+++ A/mu\t(working copy)\n",
+ "@@ -2,6 +2,7 @@\n",
+ " II\n",
+ " JJ\n",
+ " KK\n",
+ "+11111\n",
+ " LL\n",
+ " MM\n",
+ " NN\n",
+ "@@ -9,6 +10,7 @@\n",
+ " BB\n",
+ " CC\n",
+ " DD\n",
+ "+22222\n",
+ " EE\n",
+ " FF\n",
+ " GG\n",
+ ]
+
+ patch_file_path = make_patch_path(sbox)
+ svntest.main.file_write(patch_file_path, ''.join(unidiff_patch))
+
+ expected_output = [
+ 'U %s\n' % sbox.ospath('A/mu'),
+ '> applied hunk @@ -9,6 +10,7 @@ with offset -7\n',
+ '> applied hunk @@ -2,6 +2,7 @@ with offset 7\n',
+ ]
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.tweak('A/mu', contents=
+ 'AA\n' 'BB\n' 'CC\n' 'DD\n' '22222\n' 'EE\n' 'FF\n' 'GG\n'
+ 'HH\n' 'II\n' 'JJ\n' 'KK\n' '11111\n' 'LL\n' 'MM\n' 'NN\n')
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('A/mu', status='M ', wc_rev=2)
+ expected_skip = wc.State('', { })
+ svntest.actions.run_and_verify_patch(wc_dir, os.path.abspath(patch_file_path),
+ expected_output, expected_disk,
+ expected_status, expected_skip)
+
########################################################################
#Run the tests
@@ -4003,14 +4930,25 @@ test_list = [ None,
patch_strip_cwd,
patch_set_prop_no_eol,
patch_add_symlink,
+ patch_moved_away,
+ patch_lacking_trailing_eol,
patch_deletes_prop,
patch_reversed_add_with_props,
patch_reversed_add_with_props2,
patch_dev_null,
patch_delete_and_skip,
- patch_lacking_trailing_eol,
patch_target_no_eol_at_eof,
patch_add_and_delete,
+ patch_git_with_index_line,
+ patch_change_symlink_target,
+ patch_replace_dir_with_file_and_vv,
+ single_line_mismatch,
+ patch_empty_file,
+ patch_apply_no_fuz,
+ patch_lacking_trailing_eol_on_context,
+ patch_with_custom_keywords,
+ patch_hunk_avoid_reorder,
+ patch_hunk_reorder,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/prop_tests.py b/subversion/tests/cmdline/prop_tests.py
index ac232e1..e3f963e 100755
--- a/subversion/tests/cmdline/prop_tests.py
+++ b/subversion/tests/cmdline/prop_tests.py
@@ -25,12 +25,16 @@
######################################################################
# General modules
-import sys, re, os, stat, subprocess
+import sys, re, os, stat, subprocess, logging
+
+logger = logging.getLogger()
# Our testing module
import svntest
from svntest.main import SVN_PROP_MERGEINFO
+from svntest.main import SVN_PROP_INHERITABLE_IGNORES
+from svntest import wc
# (abbreviation)
Skip = svntest.testcase.Skip_deco
@@ -45,6 +49,10 @@ def is_non_posix_and_non_windows_os():
"""lambda function to skip revprop_change test"""
return (not svntest.main.is_posix_os()) and sys.platform != 'win32'
+# this is global so other test files can use it
+binary_mime_type_on_text_file_warning = \
+ "svn: warning:.*is a binary mime-type but file.*looks like text.*"
+
######################################################################
# Tests
@@ -88,11 +96,7 @@ def make_local_props(sbox):
# Read the real disk tree. Notice we are passing the (normally
# disabled) "load props" flag to this routine. This will run 'svn
# proplist' on every item in the working copy!
- actual_disk_tree = svntest.tree.build_tree_from_wc(wc_dir, 1)
-
- # Compare actual vs. expected disk trees.
- svntest.tree.compare_trees("disk", actual_disk_tree,
- expected_disk.old_tree())
+ svntest.actions.verify_disk(wc_dir, expected_disk, True)
# Edit without actually changing the property
svntest.main.use_editor('identity')
@@ -365,7 +369,7 @@ def update_conflict_props(sbox):
None, None, 1)
if len(extra_files) != 0:
- print("didn't get expected conflict files")
+ logger.warn("didn't get expected conflict files")
raise svntest.verify.SVNUnexpectedOutput
# Resolve the conflicts
@@ -612,7 +616,9 @@ def inappropriate_props(sbox):
svntest.main.file_append(path, "binary")
sbox.simple_add('binary')
- sbox.simple_propset('svn:mime-type', 'application/octet-stream', 'binary')
+ svntest.main.run_svn(binary_mime_type_on_text_file_warning,
+ 'propset', 'svn:mime-type', 'application/octet-stream',
+ sbox.ospath('binary'))
svntest.actions.run_and_verify_svn('Illegal target', None,
svntest.verify.AnyOutput,
@@ -776,9 +782,9 @@ def copy_inherits_special_props(sbox):
expected_stdout = [orig_mime_type + '\n']
if actual_stdout != expected_stdout:
- print("svn pg svn:mime-type output does not match expected.")
- print("Expected standard output: %s\n" % expected_stdout)
- print("Actual standard output: %s\n" % actual_stdout)
+ logger.warn("svn pg svn:mime-type output does not match expected.")
+ logger.warn("Expected standard output: %s\n", expected_stdout)
+ logger.warn("Actual standard output: %s\n", actual_stdout)
raise svntest.verify.SVNUnexpectedOutput
# Check the svn:executable value.
@@ -789,9 +795,9 @@ def copy_inherits_special_props(sbox):
expected_stdout = ['*\n']
if actual_stdout != expected_stdout:
- print("svn pg svn:executable output does not match expected.")
- print("Expected standard output: %s\n" % expected_stdout)
- print("Actual standard output: %s\n" % actual_stdout)
+ logger.warn("svn pg svn:executable output does not match expected.")
+ logger.warn("Expected standard output: %s\n", expected_stdout)
+ logger.warn("Actual standard output: %s\n", actual_stdout)
raise svntest.verify.SVNUnexpectedOutput
#----------------------------------------------------------------------
@@ -896,9 +902,9 @@ def prop_value_conversions(sbox):
"svn: warning: W125005.*use 'svn propdel'")
# Anything else should be untouched
- svntest.actions.set_prop('svn:some-prop', 'bar', lambda_path)
- svntest.actions.set_prop('svn:some-prop', ' bar baz', mu_path)
- svntest.actions.set_prop('svn:some-prop', 'bar\n', iota_path)
+ svntest.actions.set_prop('svn:some-prop', 'bar', lambda_path, force=True)
+ svntest.actions.set_prop('svn:some-prop', ' bar baz', mu_path, force=True)
+ svntest.actions.set_prop('svn:some-prop', 'bar\n', iota_path, force=True)
svntest.actions.set_prop('some-prop', 'bar', lambda_path)
svntest.actions.set_prop('some-prop', ' bar baz', mu_path)
svntest.actions.set_prop('some-prop', 'bar\n', iota_path)
@@ -1038,8 +1044,8 @@ def binary_props(sbox):
# expected_out, and that errput is empty.
def verify_output(expected_out, output, errput):
if errput != []:
- print('Error: stderr:')
- print(errput)
+ logger.warn('Error: stderr:')
+ logger.warn(errput)
raise svntest.Failure
output.sort()
ln = 0
@@ -1048,8 +1054,8 @@ def verify_output(expected_out, output, errput):
continue
if ((line.find(expected_out[ln]) == -1) or
(line != '' and expected_out[ln] == '')):
- print('Error: expected keywords: %s' % expected_out)
- print(' actual full output: %s' % output)
+ logger.warn('Error: expected keywords: %s', expected_out)
+ logger.warn(' actual full output: %s', output)
raise svntest.Failure
ln = ln + 1
if ln != len(expected_out):
@@ -1124,7 +1130,7 @@ def recursive_base_wc_ops(sbox):
#----------------------------------------------------------------------
def url_props_ops(sbox):
- "property operations on an URL"
+ "property operations on a URL"
# Bootstrap
sbox.build()
@@ -1315,9 +1321,7 @@ def props_on_replaced_file(sbox):
# check that the replaced file has no properties
expected_disk = svntest.main.greek_state.copy()
expected_disk.tweak('iota', contents="some mod")
- actual_disk_tree = svntest.tree.build_tree_from_wc(wc_dir, 1)
- svntest.tree.compare_trees("disk", actual_disk_tree,
- expected_disk.old_tree())
+ svntest.actions.verify_disk(wc_dir, expected_disk.old_tree(), True)
# now add a new property to iota
sbox.simple_propset('red', 'mojo', 'iota')
@@ -1325,9 +1329,7 @@ def props_on_replaced_file(sbox):
# What we expect the disk tree to look like:
expected_disk.tweak('iota', props={'red' : 'mojo', 'groovy' : 'baby'})
- actual_disk_tree = svntest.tree.build_tree_from_wc(wc_dir, 1)
- svntest.tree.compare_trees("disk", actual_disk_tree,
- expected_disk.old_tree())
+ svntest.actions.verify_disk(wc_dir, expected_disk.old_tree(), True)
#----------------------------------------------------------------------
@@ -1738,11 +1740,9 @@ def post_revprop_change_hook(sbox):
svntest.actions.create_failing_hook(repo_dir, 'post-revprop-change',
error_msg)
- # serf/neon/mod_dav_svn splits the "svn: hook failed" line
- expected_error = svntest.verify.RegexOutput([
- '(svn: E165001: |)post-revprop-change hook failed',
- error_msg + "\n",
- ], match_all = False)
+ # serf/neon/mod_dav_svn give SVN_ERR_RA_DAV_REQUEST_FAILED
+ # file/svn give SVN_ERR_REPOS_HOOK_FAILURE
+ expected_error = 'svn: (E175002|E165001).*post-revprop-change hook failed'
svntest.actions.run_and_verify_svn(None, [], expected_error,
'ps', '--revprop', '-r0', 'p', 'v',
@@ -1779,26 +1779,23 @@ def rm_of_replaced_file(sbox):
expected_disk.tweak('iota', props={'red': 'rojo', 'blue': 'lagoon'})
expected_disk.tweak('A/mu', props={'red': 'rojo', 'blue': 'lagoon'},
contents="This is the file 'iota'.\n")
- actual_disk_tree = svntest.tree.build_tree_from_wc(wc_dir, 1)
- svntest.tree.compare_trees("disk", actual_disk_tree,
- expected_disk.old_tree())
+ svntest.actions.verify_disk(wc_dir, expected_disk.old_tree(), True)
# Remove the copy. This should leave the original locally-deleted mu,
# which should have no properties.
svntest.main.run_svn(None, 'rm', '--force', mu_path)
- exit_code, output, errput = svntest.main.run_svn(None,
- 'proplist', '-v', mu_path)
- if output or errput:
- raise svntest.Failure('no output/errors expected')
- svntest.verify.verify_exit_code(None, exit_code, 0)
+ svntest.actions.run_and_verify_svn(
+ None, [],
+ 'svn: E200009.*some targets are not versioned.*',
+ 'proplist', '-v', mu_path)
# Run it again, but ask for the pristine properties, which should
# be mu's original props.
exit_code, output, errput = svntest.main.run_svn(None,
'proplist', '-v',
mu_path + '@base')
- expected_output = svntest.verify.UnorderedRegexOutput([
+ expected_output = svntest.verify.UnorderedRegexListOutput([
'Properties on',
' yellow',
' submarine',
@@ -1984,7 +1981,7 @@ def prop_reject_grind(sbox):
if match:
# The last line in the list is always an empty string.
if msg_lines[i + 1] == "":
- #print("found message %i in file at line %i" % (n, j))
+ #logger.info("found message %i in file at line %i" % (n, j))
break
i += 1
else:
@@ -2010,17 +2007,13 @@ def obstructed_subdirs(sbox):
expected_disk = svntest.main.greek_state.copy()
expected_disk.tweak('A/C', props={'red': 'blue'})
- actual_disk_tree = svntest.tree.build_tree_from_wc(wc_dir, load_props=True)
- svntest.tree.compare_trees("disk", actual_disk_tree,
- expected_disk.old_tree())
+ svntest.actions.verify_disk(wc_dir, expected_disk.old_tree(), True)
# Remove the subdir from disk, and validate the status
svntest.main.safe_rmtree(C_path)
expected_disk.remove('A/C')
- actual_disk_tree = svntest.tree.build_tree_from_wc(wc_dir, load_props=True)
- svntest.tree.compare_trees("disk", actual_disk_tree,
- expected_disk.old_tree())
+ svntest.actions.verify_disk(wc_dir, expected_disk.old_tree(), True)
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.tweak('A/C', status='!M', wc_rev='1')
@@ -2033,9 +2026,7 @@ def obstructed_subdirs(sbox):
expected_disk.add({'A/C': Item(contents='', props={'red': 'blue'})})
expected_status.tweak('A/C', status='~M', wc_rev='1')
- actual_disk_tree = svntest.tree.build_tree_from_wc(wc_dir, load_props=True)
- svntest.tree.compare_trees("disk", actual_disk_tree,
- expected_disk.old_tree())
+ svntest.actions.verify_disk(wc_dir, expected_disk.old_tree(), True)
svntest.actions.run_and_verify_status(wc_dir, expected_status)
@@ -2047,7 +2038,7 @@ def atomic_over_ra(sbox):
sbox.build(create_wc=False)
repo_url = sbox.repo_url
- # From this point on, similar to ../libsvn_fs-fs-test.c:revision_props().
+ # From this point on, similar to ../libsvn_fs/fs-test.c:revision_props().
s1 = "violet"
s2 = "wrong value"
@@ -2138,6 +2129,8 @@ def propget_redirection(sbox):
# it refers to non-existent path-revs, but that is not relevant to
# this test. What matters is that it is a realistic 'big' mergeinfo
# value (it is from Subversion's own 1.6.x branch in fact).
+ # Also, the syntax is wrong: every path should start with '/';
+ # Subversion currently silently corrects this.
big_prop_val = "subversion/branches/1.5.x:872364-874936\n" + \
"subversion/branches/1.5.x-34184:874657-874741\n" + \
"subversion/branches/1.5.x-34432:874744-874798\n" + \
@@ -2268,7 +2261,7 @@ def propget_redirection(sbox):
# Run propget -vR svn:mergeinfo, redirecting the stdout to a file.
arglist = [svntest.main.svn_binary, 'propget', SVN_PROP_MERGEINFO, '-vR',
- wc_dir]
+ '--config-dir', svntest.main.default_config_dir, wc_dir]
redir_file = open(redirect_file, 'wb')
pg_proc = subprocess.Popen(arglist, stdout=redir_file)
pg_proc.wait()
@@ -2277,131 +2270,26 @@ def propget_redirection(sbox):
# Check if the redirected output of svn pg -vR on the root of the WC
# is what we expect.
+ expected_mergeinfo_displayed = [
+ ' /' + line for line in big_prop_val.splitlines(True) ]
expected_output = [
"Properties on '" + B_path + "':\n", # Should ocur only once!
+ " svn:mergeinfo\n",
+ ] + expected_mergeinfo_displayed + [
"Properties on '" + C_path + "':\n", # Should ocur only once!
+ " svn:mergeinfo\n",
+ ] + expected_mergeinfo_displayed + [
"Properties on '" + D_path + "':\n", # Should ocur only once!
- # Everything below should appear three times since this same
- # mergeinfo value is set on three paths in the WC.
" svn:mergeinfo\n",
- " /subversion/branches/1.5.x:872364-874936\n",
- " /subversion/branches/1.5.x-34184:874657-874741\n",
- " /subversion/branches/1.5.x-34432:874744-874798\n",
- " /subversion/branches/1.5.x-issue3067:872184-872314\n",
- " /subversion/branches/1.5.x-issue3157:872165-872175\n",
- " /subversion/branches/1.5.x-issue3174:872178-872348\n",
- " /subversion/branches/1.5.x-r30215:870310,870312,870319,870362\n",
- " /subversion/branches/1.5.x-r30756:874853-874870\n",
- " /subversion/branches/1.5.x-r30868:870951-870970\n",
- " /subversion/branches/1.5.x-r31314:874476-874605\n",
- " /subversion/branches/1.5.x-r31516:871592-871649\n",
- " /subversion/branches/1.5.x-r32470:872546-872676\n",
- " /subversion/branches/1.5.x-r32968:873773-873872\n",
- " /subversion/branches/1.5.x-r33447:873527-873547\n",
- " /subversion/branches/1.5.x-r33465:873541-873549\n",
- " /subversion/branches/1.5.x-r33641:873880-873883\n",
- " /subversion/branches/1.5.x-r34050-followups:874639-874686\n",
- " /subversion/branches/1.5.x-r34487:874562-874581\n",
- " /subversion/branches/1.5.x-ra_serf-backports:872354-872626\n",
- " /subversion/branches/1.5.x-rb-test-fix:874916-874919\n",
- " /subversion/branches/1.5.x-reintegrate-improvements:874586-874922\n",
- " /subversion/branches/1.5.x-tests-pass:870925-870973\n",
- " /subversion/branches/dont-save-plaintext-passwords-by-default:"
- "870728-871118\n",
- " /subversion/branches/gnome-keyring:870558-871410\n",
- " /subversion/branches/issue-3220-dev:872210-872226\n",
- " /subversion/branches/kwallet:870785-871314\n",
- " /subversion/branches/log-g-performance:870941-871032\n",
- " /subversion/branches/r30963-1.5.x:871056-871076\n",
- " /subversion/branches/reintegrate-improvements:873853-874164\n",
- " /subversion/branches/svn-mergeinfo-enhancements:870196\n",
- " /subversion/branches/svnpatch-diff:871905\n",
- " /subversion/trunk:869159-869165,869168-869181,869185,869188,869191,"
- "869200-869201,869203-869207,869209-869224,869227-869238,869240-869244,"
- "869248,869250-869260,869262-869263,869265,869267-869268,869272-869280,"
- "869282-869325,869328-869330,869335,869341-869347,869351,869354-869355,"
- "869358,869361-869377,869379-869381,869383-869417,869419-869422,869432-"
- "869453,869455-869466,869471-869473,869475,869483,869486,869488-869489,"
- "869491-869497,869499-869500,869503,869506-869508,869510-869521,869523-"
- "869540,869542-869552,869556,869558,869560-869561,869563,869565,869567,"
- "869570,869572,869582,869601-869602,869605,869607,869613-869614,869616,"
- "869618,869620,869625,869627,869630,869633,869639,869641-869643,869645-"
- "869652,869655,869657,869665,869668,869674,869677,869681,869685,869687-"
- "869688,869693,869697,869699-869700,869704-869708,869716,869719,869722,"
- "869724,869730,869733-869734,869737-869740,869745-869746,869751-869754,"
- "869766,869812-869813,869815-869818,869820,869825,869837,869841,869843-"
- "869844,869858,869860-869861,869871,869875,869889,869895,869898,869902,"
- "869907,869909,869926,869928-869929,869931-869933,869942-869943,869950,"
- "869952,869957-869958,869969,869972,869974,869988,869994,869996,869999,"
- "870004,870013-870014,870016,870024,870032,870036,870039,870041-870043,"
- "870054,870060,870068-870071,870078,870083,870094,870104,870124,870127-"
- "870128,870133,870135-870136,870141,870144,870148,870160,870172,870175,"
- "870191,870198,870203-870204,870211,870219,870225,870233,870235-870236,"
- "870254-870255,870259,870307,870311,870313,870320,870323,870330-870331,"
- "870352-870353,870355,870359-870360,870371,870373,870378,870393-870395,"
- "870402,870409-870410,870414,870416,870421,870436,870442,870447,870449,"
- "870452,870454,870466,870476,870481-870483,870486,870500,870502,870505,"
- "870513-870518,870522-870523,870527,870529,870534,870536-870538,870540-"
- "870541,870543-870548,870554,870556,870561,870563,870584,870590-870592,"
- "870594-870595,870597,870618,870620,870622,870625-870626,870641,870647,"
- "870657,870665,870671,870681,870702-870703,870706-870708,870717-870718,"
- "870727,870730,870737,870740,870742,870752,870758,870800,870809,870815,"
- "870817,870820-870825,870830,870834-870836,870850-870851,870853,870859,"
- "870861,870886,870894,870916-870918,870942,870945,870957,870962,870970,"
- "870979,870981,870989,870996,871003,871005,871009,871011,871023,871033,"
- "871035-871038,871041,871060,871078,871080,871092,871097,871099,871105,"
- "871107,871120,871123-871127,871130,871133-871135,871140,871149,871155-"
- "871156,871160,871162,871164,871181,871191,871199-871200,871205,871211-"
- "871212,871215,871219,871225,871227,871229,871231,871236,871270,871273,"
- "871277,871283,871297,871302,871306,871308,871315-871320,871323-871325,"
- "871333-871335,871345,871347-871350,871354,871357,871361,871363-871366,"
- "871374-871375,871377,871382,871385-871388,871391,871408,871411,871422,"
- "871435,871441,871443-871444,871465,871470,871472-871476,871481,871489,"
- "871499,871501-871502,871505,871508,871520,871523,871525-871527,871538,"
- "871542,871544,871547-871549,871556,871559,871562-871563,871578,871581,"
- "871587,871589-871597,871608,871613,871616-871617,871620,871624,871649,"
- "871668,871675,871677,871693-871694,871696,871704,871732-871733,871744,"
- "871747,871759,871762,871766,871769,871793,871796,871799,871801,871811,"
- "871813,871821-871826,871831,871843,871860,871880,871891,871894,871899,"
- "871907,871911,871926,871928,871933,871935,871941-871942,871947-871949,"
- "871958,871974,872000-872001,872003,872005,872018,872022,872038,872065,"
- "872068,872086,872091,872093,872097,872103,872112,872130,872154,872157,"
- "872206,872216,872218-872219,872227,872234,872238,872243,872253,872255,"
- "872259,872261,872278-872279,872281,872310-872311,872362,872404,872416-"
- "872417,872429,872431,872434,872439,872450-872453,872468,872470,872477-"
- "872478,872483,872490-872491,872495,872515-872516,872518-872519,872537,"
- "872541,872544,872565,872568,872571-872573,872584,872596-872597,872612,"
- "872619,872624,872632,872656,872670,872706,872710,872713,872717,872746-"
- "872748,872777,872780-872782,872791,872804,872813,872845,872864,872870,"
- "872872,872947-872948,872961,872974,872981,872985-872987,873004,873042,"
- "873049,873051,873076,873087,873090,873096,873098,873100,873183,873186,"
- "873192,873195,873210-873211,873247,873252,873256,873259,873275,873286,"
- "873288,873343,873379-873381,873443,873521,873538-873539,873714-873715,"
- "873718,873733,873745,873751,873767,873778,873781,873849,873856,873862,"
- "873914,873940,873947-873948,873975-873976,873987,873998,874026-874027,"
- "874075,874077-874078,874124-874125,874127,874156,874159,874161,874165,"
- "874168,874170,874184,874189,874204,874223-874224,874245,874258,874262,"
- "874270,874292-874297,874300-874301,874303,874305,874316-874318,874330,"
- "874363,874380,874405,874421,874441,874459,874467,874473,874497,874506,"
- "874545-874546,874561,874566,874568,874580,874619,874621,874634,874636,"
- "874659,874673,874681,874727,874730,874743,874765-874767,874806,874816,"
- "874848,874868,874888,874896,874909,874912,874996,875051,875069,875129,"
- "875132,875134,875137,875151-875153,875186-875188,875190,875235-875237,"
- "875242-875243,875249,875388,875393,875406,875411\n"]
+ ] + expected_mergeinfo_displayed
svntest.verify.verify_outputs(
"Redirected pg -vR doesn't match pg -vR stdout",
pg_stdout_redir, None,
svntest.verify.UnorderedOutput(expected_output), None)
- # Because we are using UnorderedOutput above, this test would spuriously
- # pass if the redirected pg output contained duplicates. This hasn't been
- # observed as part of issue #3721, but we might as well be thorough...
- #
- # ...Since we've set the same mergeinfo prop on A/B, A/C, and A/D, this
- # means the number of lines in the redirected output of svn pg -vR should
- # be three times the number of lines in EXPECTED_OUTPUT, adjusted for the
- # fact the "Properties on '[A/B | A/C | A/D]'" headers appear only once.
- if ((len(expected_output) * 3) - 6) != len(pg_stdout_redir):
- raise svntest.Failure("Redirected pg -vR has unexpected duplicates")
+ # (We want this check to fail if the redirected pg output contains
+ # unexpected duplicate lines, although this hasn't been observed as
+ # part of issue #3721. We used to check separately here because the old
+ # UnorderedOutput class ignored duplicates but now it detects them.)
@Issue(3852)
def file_matching_dir_prop_reject(sbox):
@@ -2466,7 +2354,7 @@ def file_matching_dir_prop_reject(sbox):
extra_files,
None, None, True, '-r', '2', wc_dir)
if len(extra_files) != 0:
- print("didn't get expected conflict files")
+ logger.warn("didn't get expected conflict files")
raise svntest.verify.SVNUnexpectedOutput
# Revert and update to check that conflict files are removed
@@ -2507,6 +2395,279 @@ def pristine_props_listed(sbox):
svntest.actions.run_and_verify_svn(None, expected_output, [],
'proplist', '-R', wc_dir, '-r', 'BASE')
+def create_inherited_ignores_config(config_dir):
+ "create config stuffs for inherited ignores tests"
+
+ # contents of the file 'config'
+ config_contents = '''\
+[miscellany]
+global-ignores = *.boo *.goo
+'''
+
+ svntest.main.create_config_dir(config_dir, config_contents)
+
+def inheritable_ignores(sbox):
+ "inheritable ignores with svn:ignores and config"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ tmp_dir = os.path.abspath(svntest.main.temp_dir)
+ config_dir = os.path.join(tmp_dir, 'autoprops_config_' + sbox.name)
+ create_inherited_ignores_config(config_dir)
+
+ sbox.simple_propset(SVN_PROP_INHERITABLE_IGNORES, '*.doo', 'A/B')
+ sbox.simple_propset(SVN_PROP_INHERITABLE_IGNORES, '*.moo', 'A/D')
+ sbox.simple_propset('svn:ignore', '*.foo', 'A/B/E')
+ sbox.simple_commit()
+
+ # Some directories and files that should always be added because they
+ # don't match any applicable ignore patterns.
+ X_dir_path = sbox.ospath('ADD-ME-DIR-X')
+ Y_dir_path = sbox.ospath('A/ADD-ME-DIR-Y.doo')
+ Z_dir_path = sbox.ospath('A/D/G/ADD-ME-DIR-Z.doo')
+ os.mkdir(X_dir_path)
+ os.mkdir(Y_dir_path)
+ os.mkdir(Z_dir_path)
+
+ # Some directories and files that should be ignored when adding
+ # because they match an ignore pattern (unless of course they are
+ # the direct target of an add, which we always add).
+ boo_dir_path = sbox.ospath('IGNORE-ME-DIR.boo')
+ goo_dir_path = sbox.ospath('IGNORE-ME-DIR.boo/IGNORE-ME-DIR.goo')
+ doo_dir_path = sbox.ospath('A/B/IGNORE-ME-DIR.doo')
+ moo_dir_path = sbox.ospath('A/D/IGNORE-ME-DIR.moo')
+ foo_dir_path = sbox.ospath('A/B/E/IGNORE-ME-DIR.foo')
+ os.mkdir(boo_dir_path)
+ os.mkdir(goo_dir_path)
+ os.mkdir(doo_dir_path)
+ os.mkdir(moo_dir_path)
+ os.mkdir(foo_dir_path)
+ boo_file_path = sbox.ospath('ADD-ME-DIR-X/ignore-me-file.boo')
+ goo_file_path = sbox.ospath('A/D/G/ignore-me-file.goo')
+ doo_file_path = sbox.ospath('A/B/IGNORE-ME-DIR.doo/ignore-me-file.doo')
+ doo_file2_path = sbox.ospath('A/B/E/ignore-me-file.doo')
+ moo_file_path = sbox.ospath('A/D/ignore-me-file.moo')
+ foo_file_path = sbox.ospath('A/B/E/ignore-me-file.foo')
+ svntest.main.file_write(boo_file_path, 'I should not be versioned!\n')
+ svntest.main.file_write(goo_file_path, 'I should not be versioned!\n')
+ svntest.main.file_write(doo_file_path, 'I should not be versioned!\n')
+ svntest.main.file_write(doo_file2_path, 'I should not be versioned!\n')
+ svntest.main.file_write(moo_file_path, 'I should not be versioned!\n')
+ svntest.main.file_write(foo_file_path, 'I should not be versioned!\n')
+
+ # Some directories and files that don't match any ignore pattern
+ # but are located within a subtree that does match and so shouldn't
+ # be added.
+ roo_file_path = sbox.ospath('A/B/IGNORE-ME-DIR.doo/ignore-me-file.roo')
+ svntest.main.file_write(roo_file_path, 'I should not be versioned!\n')
+
+ # Check (non-verbose) status with the custom config. We should only see
+ # the three unversioned directories which don't match any of the ignore
+ # patterns and aren't proper subtrees of an unversioned or ignored
+ # subtree.
+ expected_output = svntest.verify.UnorderedOutput(
+ ['? ' + X_dir_path + '\n',
+ '? ' + Y_dir_path + '\n',
+ '? ' + Z_dir_path + '\n',])
+ svntest.actions.run_and_verify_svn(None, expected_output, [], 'st',
+ '--config-dir', config_dir, wc_dir)
+
+ # Check status without the custom config.
+ # Should be the same as above except the *.boo and *.goo paths
+ # now show up as unversioned '?'.
+ expected_output = svntest.verify.UnorderedOutput(
+ ['? ' + X_dir_path + '\n',
+ '? ' + Y_dir_path + '\n',
+ '? ' + Z_dir_path + '\n',
+ '? ' + boo_dir_path + '\n',
+ '? ' + goo_file_path + '\n',])
+ svntest.actions.run_and_verify_svn(None, expected_output, [], 'st', wc_dir)
+
+ # Check status with the custom config and --no-ignore.
+ expected_output = svntest.verify.UnorderedOutput(
+ ['? ' + X_dir_path + '\n',
+ '? ' + Y_dir_path + '\n',
+ '? ' + Z_dir_path + '\n',
+ 'I ' + boo_dir_path + '\n',
+ 'I ' + doo_dir_path + '\n',
+ 'I ' + doo_file2_path + '\n',
+ 'I ' + moo_dir_path + '\n',
+ 'I ' + foo_dir_path + '\n',
+ 'I ' + goo_file_path + '\n',
+ 'I ' + moo_file_path + '\n',
+ 'I ' + foo_file_path + '\n',])
+ svntest.actions.run_and_verify_svn(None, expected_output, [], 'st',
+ '--config-dir', config_dir,
+ '--no-ignore', wc_dir)
+
+ # Check status without the custom config and --no-ignore.
+ # Should be the same as above except the *.boo and *.goo paths
+ # are reported as unversioned '?' rather than ignored 'I'.
+ expected_output = svntest.verify.UnorderedOutput(
+ ['? ' + X_dir_path + '\n',
+ '? ' + Y_dir_path + '\n',
+ '? ' + Z_dir_path + '\n',
+ '? ' + boo_dir_path + '\n',
+ 'I ' + doo_dir_path + '\n',
+ 'I ' + doo_file2_path + '\n',
+ 'I ' + moo_dir_path + '\n',
+ 'I ' + foo_dir_path + '\n',
+ '? ' + goo_file_path + '\n',
+ 'I ' + moo_file_path + '\n',
+ 'I ' + foo_file_path + '\n',])
+ svntest.actions.run_and_verify_svn(None, expected_output, [], 'st',
+ '--no-ignore', wc_dir)
+
+ # Perform the add with the --force flag, targeting the root of the WC.
+ ### Note: You have to be inside the working copy or else Subversion
+ ### will think you're trying to add the working copy to its parent
+ ### directory, and will (possibly, if the parent directory isn't
+ ### versioned) fail -- see also schedule_tests.py 11 "'svn add'
+ ### should traverse already-versioned dirs"
+ saved_wd = os.getcwd()
+ os.chdir(sbox.wc_dir)
+ expected = svntest.verify.UnorderedOutput(
+ ['A ' + 'ADD-ME-DIR-X\n',
+ 'A ' + os.path.join('A', 'ADD-ME-DIR-Y.doo') + '\n',
+ 'A ' + os.path.join('A', 'D', 'G', 'ADD-ME-DIR-Z.doo') + '\n'])
+ svntest.actions.run_and_verify_svn("Adds in spite of ignores", expected,
+ [], 'add', '.', '--force',
+ '--config-dir', config_dir)
+ os.chdir(saved_wd)
+
+ # Now revert and try the add with the --no-ignore flag, nothing should
+ # be ignored.
+ svntest.actions.run_and_verify_svn(None, None, [], 'revert', wc_dir, '-R')
+ saved_wd = os.getcwd()
+ os.chdir(sbox.wc_dir)
+ expected = svntest.verify.UnorderedOutput(
+ ['A ' + 'ADD-ME-DIR-X\n',
+ 'A ' + os.path.join('A', 'ADD-ME-DIR-Y.doo') + '\n',
+ 'A ' + os.path.join('A', 'D', 'G', 'ADD-ME-DIR-Z.doo') + '\n',
+ 'A ' + os.path.join('ADD-ME-DIR-X', 'ignore-me-file.boo') + '\n',
+ 'A ' + 'IGNORE-ME-DIR.boo' + '\n',
+ 'A ' + os.path.join('IGNORE-ME-DIR.boo',
+ 'IGNORE-ME-DIR.goo') + '\n',
+ 'A ' + os.path.join('A', 'B', 'E', 'IGNORE-ME-DIR.foo') + '\n',
+ 'A ' + os.path.join('A', 'B', 'E', 'ignore-me-file.foo') + '\n',
+ 'A ' + os.path.join('A', 'D', 'G', 'ignore-me-file.goo') + '\n',
+
+ 'A ' + os.path.join('A', 'B', 'E', 'ignore-me-file.doo') + '\n',
+ 'A ' + os.path.join('A', 'B', 'IGNORE-ME-DIR.doo') + '\n',
+ 'A ' + os.path.join('A', 'B', 'IGNORE-ME-DIR.doo',
+ 'ignore-me-file.doo') + '\n',
+ 'A ' + os.path.join('A', 'B', 'IGNORE-ME-DIR.doo',
+ 'ignore-me-file.roo') + '\n',
+ 'A ' + os.path.join('A', 'D', 'IGNORE-ME-DIR.moo') + '\n',
+ 'A ' + os.path.join('A', 'D', 'ignore-me-file.moo') + '\n'])
+ svntest.actions.run_and_verify_svn("Files ignored with --no-ignore",
+ expected, [], 'add', '.', '--force',
+ '--no-ignore', '--config-dir',
+ config_dir)
+
+def almost_known_prop_names(sbox):
+ "propset with svn: prefix but unknown name"
+
+ sbox.build(read_only=True)
+ wc_dir = sbox.wc_dir
+ iota_path = sbox.ospath('iota')
+
+ # Same prefix, different prop name
+ svntest.actions.set_prop('svn:exemutable', 'x', iota_path,
+ "svn: E195011: 'svn:exemutable' "
+ "is not a valid svn: property name")
+ svntest.actions.set_prop('svn:exemutable', 'x', iota_path, force=True)
+
+ # Similar prefix, different prop name
+ svntest.actions.set_prop('svm:exemutable', 'x', iota_path)
+
+ # Similar prefix, same prop name
+ svntest.actions.set_prop('svm:executable', 'x', iota_path,
+ "svn: E195011: 'svm:executable' "
+ "is not a valid svn: property name")
+ svntest.actions.set_prop('svm:executable', 'x', iota_path, force=True)
+
+ # Different prefix, same prop name
+ svntest.actions.set_prop('tsvn:executable', 'x', iota_path)
+
+ # Property name is too different to matter
+ svntest.actions.set_prop('svn:foobar', 'x', iota_path,
+ "svn: E195011: 'svn:foobar'"
+ " is not a valid svn: property name;"
+ " re-run with '--force' to set it")
+
+@Issue(3231)
+def peg_rev_base_working(sbox):
+ """peg rev @BASE, peg rev @WORKING"""
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # set up a local prop mod
+ svntest.actions.set_prop('ordinal', 'ninth\n', sbox.ospath('iota'))
+ sbox.simple_commit(message='r2')
+ svntest.actions.set_prop('cardinal', 'nine\n', sbox.ospath('iota'))
+ svntest.actions.run_and_verify_svn(None, ['ninth\n'], [],
+ 'propget', '--strict', 'ordinal',
+ sbox.ospath('iota') + '@BASE')
+
+def iprops_list_abspath(sbox):
+ "test listing iprops via abspath"
+
+ sbox.build()
+
+ sbox.simple_propset('im', 'root', '')
+ sbox.simple_commit()
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'switch', '^/A/D', sbox.ospath(''),
+ '--ignore-ancestry')
+
+ sbox.simple_propset('im', 'GammA', 'gamma')
+
+ expected_output = [
+ 'Inherited properties on \'%s\',\n' % sbox.ospath('')[:-1],
+ 'from \'%s\':\n' % sbox.repo_url,
+ ' im\n',
+ ' root\n',
+ 'Properties on \'%s\':\n' % sbox.ospath('gamma'),
+ ' im\n',
+ ' GammA\n'
+ ]
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'pl', '-R',
+ '--show-inherited-props', '-v',
+ sbox.ospath(''))
+
+ expected_output = [
+ 'Inherited properties on \'%s\',\n' % os.path.abspath(sbox.ospath('')),
+ 'from \'%s\':\n' % sbox.repo_url,
+ ' im\n',
+ ' root\n',
+ 'Properties on \'%s\':\n' % os.path.abspath(sbox.ospath('gamma')),
+ ' im\n',
+ ' GammA\n'
+ ]
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'pl', '-R',
+ '--show-inherited-props', '-v',
+ os.path.abspath(sbox.ospath('')))
+
+def wc_propop_on_url(sbox):
+ "perform wc specific operations on url"
+
+ sbox.build(create_wc = False)
+
+ svntest.actions.run_and_verify_svn(None, None, '.*E195000:.*path',
+ 'pl', '-r', 'PREV',
+ sbox.repo_url)
+
+ svntest.actions.run_and_verify_svn(None, None, '.*E195000:.*path',
+ 'pg', 'my:Q', '-r', 'PREV',
+ sbox.repo_url)
+
+
########################################################################
# Run the tests
@@ -2549,6 +2710,11 @@ test_list = [ None,
propget_redirection,
file_matching_dir_prop_reject,
pristine_props_listed,
+ inheritable_ignores,
+ almost_known_prop_names,
+ peg_rev_base_working,
+ iprops_list_abspath,
+ wc_propop_on_url,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/redirect_tests.py b/subversion/tests/cmdline/redirect_tests.py
index 4729d27..3262c1b 100755
--- a/subversion/tests/cmdline/redirect_tests.py
+++ b/subversion/tests/cmdline/redirect_tests.py
@@ -140,6 +140,44 @@ def redirected_update(sbox):
verify_url(wc_dir, sbox.repo_url)
#----------------------------------------------------------------------
+@SkipUnless(svntest.main.is_ra_type_dav)
+def redirected_nonroot_update(sbox):
+ "redirected update of non-repos-root wc"
+
+ sbox.build(create_wc=False)
+ wc_dir = sbox.wc_dir
+ checkout_url = sbox.repo_url + '/A'
+ relocate_url = sbox.redirected_root_url() + '/A'
+
+ # Checkout a subdir of the repository root.
+ exit_code, out, err = svntest.main.run_svn(None, 'co',
+ checkout_url, wc_dir)
+ if err:
+ raise svntest.Failure
+
+ # Relocate (by cheating) the working copy to the redirect URL. When
+ # we then update, we'll expect to find ourselves automagically back
+ # to the original URL. (This is because we can't easily introduce a
+ # redirect to the Apache configuration from the test suite here.)
+ svntest.actions.no_relocate_validation()
+ exit_code, out, err = svntest.main.run_svn(None, 'sw', '--relocate',
+ checkout_url, relocate_url,
+ wc_dir)
+ svntest.actions.do_relocate_validation()
+
+ # Now update the working copy.
+ exit_code, out, err = svntest.main.run_svn(None, 'up', wc_dir)
+ if err:
+ raise svntest.Failure
+ if not re.match("^Updating '.*':", out[0]):
+ raise svntest.Failure
+ if not redirect_regex.match(out[1]):
+ raise svntest.Failure
+
+ # Verify that we have the expected URL.
+ verify_url(wc_dir, checkout_url)
+
+#----------------------------------------------------------------------
########################################################################
# Run the tests
@@ -149,6 +187,7 @@ test_list = [ None,
temporary_redirect,
redirected_checkout,
redirected_update,
+ redirected_nonroot_update,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/relocate_tests.py b/subversion/tests/cmdline/relocate_tests.py
index fef438f..7e6ea19 100755
--- a/subversion/tests/cmdline/relocate_tests.py
+++ b/subversion/tests/cmdline/relocate_tests.py
@@ -88,10 +88,7 @@ def relocate_deleted_missing_copied(sbox):
'A/D2/H/omega' : Item(status=' ', wc_rev='-', copied='+'),
'A/D2/H/psi' : Item(status=' ', wc_rev='-', copied='+'),
})
- if svntest.main.wc_is_singledb(wc_dir):
- expected_status.tweak('A/B/F', status='! ', wc_rev='1')
- else:
- expected_status.tweak('A/B/F', status='! ', wc_rev='?')
+ expected_status.tweak('A/B/F', status='! ', wc_rev='1')
svntest.actions.run_and_verify_status(wc_dir, expected_status)
# Relocate
@@ -105,14 +102,10 @@ def relocate_deleted_missing_copied(sbox):
# Deleted and missing entries should be preserved, so update should
# show only A/B/F being reinstated
- if svntest.main.wc_is_singledb(wc_dir):
- expected_output = svntest.wc.State(wc_dir, {
+ expected_output = svntest.wc.State(wc_dir, {
'A/B/F' : Item(verb='Restored'),
- })
- else:
- expected_output = svntest.wc.State(wc_dir, {
- 'A/B/F' : Item(status='A '),
- })
+ })
+
expected_disk = svntest.main.greek_state.copy()
expected_disk.remove('A/mu')
expected_disk.add({
@@ -123,10 +116,7 @@ def relocate_deleted_missing_copied(sbox):
'A/D2/H/omega' : Item("This is the file 'omega'.\n"),
'A/D2/H/psi' : Item("This is the file 'psi'.\n"),
})
- if not svntest.main.wc_is_singledb(wc_dir):
- expected_disk.add({
- 'A/D2/G' : Item(),
- })
+
expected_status.add({
'A/B/F' : Item(status=' ', wc_rev='2'),
})
diff --git a/subversion/tests/cmdline/resolve_tests.py b/subversion/tests/cmdline/resolve_tests.py
index 474da40..c032b06 100755
--- a/subversion/tests/cmdline/resolve_tests.py
+++ b/subversion/tests/cmdline/resolve_tests.py
@@ -25,7 +25,7 @@
######################################################################
# General modules
-import shutil, sys, re, os
+import shutil, sys, re, os, stat
import time
# Our testing module
@@ -42,7 +42,15 @@ Issue = svntest.testcase.Issue_deco
Wimp = svntest.testcase.Wimp_deco
from merge_tests import set_up_branch
+from merge_tests import expected_merge_output
+
+######################################################################
+# Tests
+#
+# Each test must return on success or raise on failure.
+
+#----------------------------------------------------------------------
# 'svn resolve --accept [ base | mine-full | theirs-full ]' was segfaulting
# on 1.6.x. Prior to this test, the bug was only caught by the Ruby binding
# tests, see http://svn.haxx.se/dev/archive-2010-01/0088.shtml.
@@ -69,12 +77,10 @@ def automatic_conflict_resolution(sbox):
'revert', '--recursive', A_COPY_path)
svntest.actions.run_and_verify_svn(
None,
- "(--- Merging r3 into .*A_COPY':\n)|"
- "(C .*psi\n)|"
- "(--- Recording mergeinfo for merge of r3 into .*A_COPY':\n)|"
- "( U .*A_COPY\n)|"
- "(Summary of conflicts:\n)|"
- "( Text conflicts: 1\n)",
+ expected_merge_output([[3]], [
+ "C %s\n" % psi_COPY_path,
+ " U %s\n" % A_COPY_path],
+ target=A_COPY_path, text_conflicts=1),
[], 'merge', '-c3', '--allow-mixed-revisions',
sbox.repo_url + '/A',
A_COPY_path)
@@ -107,7 +113,6 @@ def automatic_conflict_resolution(sbox):
# Test for issue #3707 'property conflicts not handled correctly by
# svn resolve'.
@Issue(3707)
-@XFail()
def prop_conflict_resolution(sbox):
"resolving prop conflicts"
@@ -196,7 +201,7 @@ def prop_conflict_resolution(sbox):
# Update, postponing all conflict resolution.
svntest.actions.run_and_verify_svn(None, None, [], 'up',
'--accept=postpone', wc_dir)
- svntest.actions.run_and_verify_resolve([iota_path, mu_path, gamma_path], '-R',
+ svntest.actions.run_and_verify_resolve([iota_path, mu_path], '-R',
'--accept', resolve_accept, wc_dir)
svntest.actions.run_and_verify_svn(
'svn revolve -R --accept=' + resolve_accept + ' of prop conflict '
@@ -226,8 +231,8 @@ def prop_conflict_resolution(sbox):
# 2) 'A/mu' - An incoming prop edit on a local prop modification.
# 3) 'A/D/gamma' - An local, non-conflicted prop edit
#
- # This currently fails because svn resolve --accept=[theirs-conflict |
- # theirs-full] removes the conflicts, but doesn't install 'their' version
+ # Previously this failed because svn resolve --accept=[theirs-conflict |
+ # theirs-full] removed the conflicts, but didn't install 'their' version
# of the conflicted properties.
do_prop_conflicting_up_and_resolve('mine-full',
['local_edit\n'],
@@ -245,6 +250,363 @@ def prop_conflict_resolution(sbox):
[], # Prop deleted
['incoming-conflict\n'])
+#----------------------------------------------------------------------
+@SkipUnless(svntest.main.is_posix_os)
+def auto_resolve_executable_file(sbox):
+ "resolve file with executable bit set"
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # Mark iota as executable
+ sbox.simple_propset("svn:executable", '*', 'iota')
+ sbox.simple_commit() # r2
+
+ # Make a change to iota in r3
+ svntest.main.file_write(sbox.ospath('iota'), "boo\n")
+ sbox.simple_commit() # r3
+
+ # Update back to r2, and tweak iota to provoke a text conflict
+ sbox.simple_update(revision=2)
+ svntest.main.file_write(sbox.ospath('iota'), "bzzt\n")
+
+ # Get permission bits of iota
+ mode = os.stat(sbox.ospath('iota'))[stat.ST_MODE]
+
+ # Update back to r3, and auto-resolve the text conflict.
+ svntest.main.run_svn(False, 'update', wc_dir, '--accept', 'theirs-full')
+
+ # permission bits of iota should be unaffected
+ if mode != os.stat(sbox.ospath('iota'))[stat.ST_MODE]:
+ raise svntest.Failure
+
+#----------------------------------------------------------------------
+def resolved_on_wc_root(sbox):
+ "resolved on working copy root"
+
+ sbox.build()
+ wc = sbox.wc_dir
+
+ i = os.path.join(wc, 'iota')
+ B = os.path.join(wc, 'A', 'B')
+ g = os.path.join(wc, 'A', 'D', 'gamma')
+
+ # Create some conflicts...
+ # Commit mods
+ svntest.main.file_append(i, "changed iota.\n")
+ svntest.main.file_append(g, "changed gamma.\n")
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'propset', 'foo', 'foo-val', B)
+
+ expected_output = svntest.wc.State(wc, {
+ 'iota' : Item(verb='Sending'),
+ 'A/B' : Item(verb='Sending'),
+ 'A/D/gamma' : Item(verb='Sending'),
+ })
+
+ expected_status = svntest.actions.get_virginal_state(wc, 1)
+ expected_status.tweak('iota', 'A/B', 'A/D/gamma', wc_rev = 2)
+
+ svntest.actions.run_and_verify_commit(wc,
+ expected_output,
+ expected_status,
+ None,
+ wc)
+
+ # Go back to rev 1
+ expected_output = svntest.wc.State(wc, {
+ 'iota' : Item(status='U '),
+ 'A/B' : Item(status=' U'),
+ 'A/D/gamma' : Item(status='U '),
+ })
+ expected_status = svntest.actions.get_virginal_state(wc, 1)
+ expected_disk = svntest.main.greek_state.copy()
+ svntest.actions.run_and_verify_update(wc,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None, None, None, False,
+ '-r1', wc)
+
+ # Deletions so that the item becomes unversioned and
+ # will have a tree-conflict upon update.
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'rm', i, B, g)
+
+ # Update so that conflicts appear
+ expected_output = svntest.wc.State(wc, {
+ 'iota' : Item(status=' ', treeconflict='C'),
+ 'A/B' : Item(status=' ', treeconflict='C'),
+ 'A/D/gamma' : Item(status=' ', treeconflict='C'),
+ })
+
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.remove('iota',
+ 'A/B',
+ 'A/B/lambda',
+ 'A/B/E', 'A/B/E/alpha', 'A/B/E/beta',
+ 'A/B/F',
+ 'A/D/gamma')
+
+ expected_status = svntest.actions.get_virginal_state(wc, 2)
+ expected_status.tweak('iota', 'A/B', 'A/D/gamma',
+ status='D ', treeconflict='C')
+ expected_status.tweak('A/B/lambda', 'A/B/E', 'A/B/E/alpha', 'A/B/E/beta',
+ 'A/B/F', status='D ')
+ svntest.actions.run_and_verify_update(wc,
+ expected_output,
+ expected_disk,
+ None,
+ None, None, None, None, None, False,
+ wc)
+ svntest.actions.run_and_verify_unquiet_status(wc, expected_status)
+
+ # Resolve recursively
+ svntest.actions.run_and_verify_resolved([i, B, g], '--depth=infinity', wc)
+
+ expected_status.tweak('iota', 'A/B', 'A/D/gamma', treeconflict=None)
+ svntest.actions.run_and_verify_unquiet_status(wc, expected_status)
+
+#----------------------------------------------------------------------
+def resolved_on_deleted_item(sbox):
+ "resolved on deleted item"
+
+ sbox.build()
+ wc = sbox.wc_dir
+
+ A = os.path.join(wc, 'A',)
+ B = os.path.join(wc, 'A', 'B')
+ g = os.path.join(wc, 'A', 'D', 'gamma')
+ A2 = os.path.join(wc, 'A2')
+ B2 = os.path.join(A2, 'B')
+ g2 = os.path.join(A2, 'D', 'gamma')
+
+ A_url = sbox.repo_url + '/A'
+ A2_url = sbox.repo_url + '/A2'
+
+ # make a copy of A
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'cp', A_url, A2_url, '-m', 'm')
+
+ expected_output = svntest.wc.State(wc, {
+ 'A2' : Item(status='A '),
+ 'A2/B' : Item(status='A '),
+ 'A2/B/lambda' : Item(status='A '),
+ 'A2/B/E' : Item(status='A '),
+ 'A2/B/E/alpha' : Item(status='A '),
+ 'A2/B/E/beta' : Item(status='A '),
+ 'A2/B/F' : Item(status='A '),
+ 'A2/mu' : Item(status='A '),
+ 'A2/C' : Item(status='A '),
+ 'A2/D' : Item(status='A '),
+ 'A2/D/gamma' : Item(status='A '),
+ 'A2/D/G' : Item(status='A '),
+ 'A2/D/G/pi' : Item(status='A '),
+ 'A2/D/G/rho' : Item(status='A '),
+ 'A2/D/G/tau' : Item(status='A '),
+ 'A2/D/H' : Item(status='A '),
+ 'A2/D/H/chi' : Item(status='A '),
+ 'A2/D/H/omega' : Item(status='A '),
+ 'A2/D/H/psi' : Item(status='A '),
+ })
+
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.add({
+ 'A2/mu' : Item(contents="This is the file 'mu'.\n"),
+ 'A2/D/gamma' : Item(contents="This is the file 'gamma'.\n"),
+ 'A2/D/H/psi' : Item(contents="This is the file 'psi'.\n"),
+ 'A2/D/H/omega' : Item(contents="This is the file 'omega'.\n"),
+ 'A2/D/H/chi' : Item(contents="This is the file 'chi'.\n"),
+ 'A2/D/G/rho' : Item(contents="This is the file 'rho'.\n"),
+ 'A2/D/G/pi' : Item(contents="This is the file 'pi'.\n"),
+ 'A2/D/G/tau' : Item(contents="This is the file 'tau'.\n"),
+ 'A2/B/lambda' : Item(contents="This is the file 'lambda'.\n"),
+ 'A2/B/F' : Item(),
+ 'A2/B/E/beta' : Item(contents="This is the file 'beta'.\n"),
+ 'A2/B/E/alpha' : Item(contents="This is the file 'alpha'.\n"),
+ 'A2/C' : Item(),
+ })
+
+ expected_status = svntest.actions.get_virginal_state(wc, 2)
+ expected_status.add({
+ 'A2' : Item(),
+ 'A2/B' : Item(),
+ 'A2/B/lambda' : Item(),
+ 'A2/B/E' : Item(),
+ 'A2/B/E/alpha' : Item(),
+ 'A2/B/E/beta' : Item(),
+ 'A2/B/F' : Item(),
+ 'A2/mu' : Item(),
+ 'A2/C' : Item(),
+ 'A2/D' : Item(),
+ 'A2/D/gamma' : Item(),
+ 'A2/D/G' : Item(),
+ 'A2/D/G/pi' : Item(),
+ 'A2/D/G/rho' : Item(),
+ 'A2/D/G/tau' : Item(),
+ 'A2/D/H' : Item(),
+ 'A2/D/H/chi' : Item(),
+ 'A2/D/H/omega' : Item(),
+ 'A2/D/H/psi' : Item(),
+ })
+ expected_status.tweak(status=' ', wc_rev='2')
+
+ svntest.actions.run_and_verify_update(wc,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None, None, None, False,
+ wc)
+
+ # Create some conflicts...
+
+ # Modify the paths in the one directory.
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'propset', 'foo', 'foo-val', B)
+ svntest.main.file_append(g, "Modified gamma.\n")
+
+ expected_output = svntest.wc.State(wc, {
+ 'A/B' : Item(verb='Sending'),
+ 'A/D/gamma' : Item(verb='Sending'),
+ })
+
+ expected_status.tweak('A/B', 'A/D/gamma', wc_rev='3')
+
+ svntest.actions.run_and_verify_commit(wc,
+ expected_output,
+ expected_status,
+ None,
+ wc)
+
+ # Delete the paths in the second directory.
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'rm', B2, g2)
+
+ expected_output = svntest.wc.State(wc, {
+ 'A2/B' : Item(verb='Deleting'),
+ 'A2/D/gamma' : Item(verb='Deleting'),
+ })
+
+ expected_status.remove('A2/B', 'A2/B/lambda',
+ 'A2/B/E', 'A2/B/E/alpha', 'A2/B/E/beta',
+ 'A2/B/F',
+ 'A2/D/gamma')
+
+ svntest.actions.run_and_verify_commit(wc,
+ expected_output,
+ expected_status,
+ None,
+ A2)
+
+ # Now merge A to A2, creating conflicts...
+
+ expected_output = svntest.wc.State(A2, {
+ 'B' : Item(status=' ', treeconflict='C'),
+ 'D/gamma' : Item(status=' ', treeconflict='C'),
+ })
+ expected_mergeinfo_output = svntest.wc.State(A2, {
+ '' : Item(status=' U')
+ })
+ expected_elision_output = svntest.wc.State(A2, {
+ })
+ expected_disk = svntest.wc.State('', {
+ 'mu' : Item(contents="This is the file 'mu'.\n"),
+ 'D' : Item(),
+ 'D/H' : Item(),
+ 'D/H/psi' : Item(contents="This is the file 'psi'.\n"),
+ 'D/H/omega' : Item(contents="This is the file 'omega'.\n"),
+ 'D/H/chi' : Item(contents="This is the file 'chi'.\n"),
+ 'D/G' : Item(),
+ 'D/G/rho' : Item(contents="This is the file 'rho'.\n"),
+ 'D/G/pi' : Item(contents="This is the file 'pi'.\n"),
+ 'D/G/tau' : Item(contents="This is the file 'tau'.\n"),
+ 'C' : Item(),
+ })
+
+ expected_skip = svntest.wc.State(wc, {
+ })
+
+ expected_status = svntest.wc.State(A2, {
+ '' : Item(status=' M', wc_rev='2'),
+ 'D' : Item(status=' ', wc_rev='2'),
+ 'D/gamma' : Item(status='! ', treeconflict='C'),
+ 'D/G' : Item(status=' ', wc_rev='2'),
+ 'D/G/pi' : Item(status=' ', wc_rev='2'),
+ 'D/G/rho' : Item(status=' ', wc_rev='2'),
+ 'D/G/tau' : Item(status=' ', wc_rev='2'),
+ 'D/H' : Item(status=' ', wc_rev='2'),
+ 'D/H/chi' : Item(status=' ', wc_rev='2'),
+ 'D/H/omega' : Item(status=' ', wc_rev='2'),
+ 'D/H/psi' : Item(status=' ', wc_rev='2'),
+ 'B' : Item(status='! ', treeconflict='C'),
+ 'mu' : Item(status=' ', wc_rev='2'),
+ 'C' : Item(status=' ', wc_rev='2'),
+ })
+
+ svntest.actions.run_and_verify_merge(A2, None, None, A_url, None,
+ expected_output,
+ expected_mergeinfo_output,
+ expected_elision_output,
+ expected_disk, None, expected_skip,
+ None, dry_run = False)
+ svntest.actions.run_and_verify_unquiet_status(A2, expected_status)
+
+ # Now resolve by recursing on the working copy root.
+ svntest.actions.run_and_verify_resolved([B2, g2], '--depth=infinity', wc)
+
+ expected_status.remove('B', 'D/gamma')
+ svntest.actions.run_and_verify_unquiet_status(A2, expected_status)
+
+#----------------------------------------------------------------------
+
+def theirs_conflict_in_subdir(sbox):
+ "resolve to 'theirs-conflict' in sub-directory"
+
+ sbox.build()
+ wc = sbox.wc_dir
+ wc2 = sbox.add_wc_path('wc2')
+ svntest.actions.duplicate_dir(sbox.wc_dir, wc2)
+
+ alpha_path = os.path.join(wc, 'A', 'B', 'E', 'alpha')
+ alpha_path2 = os.path.join(wc2, 'A', 'B', 'E', 'alpha')
+
+ svntest.main.file_append(alpha_path, "Modified alpha.\n")
+ svntest.main.run_svn(None, 'ci', '-m', 'logmsg', wc)
+
+ svntest.main.file_append(alpha_path2, "Modified alpha, too.\n")
+ svntest.main.run_svn(None, 'up', wc2)
+
+ svntest.actions.run_and_verify_resolve([alpha_path2],
+ '--accept=theirs-conflict',
+ alpha_path2)
+
+#----------------------------------------------------------------------
+
+# Regression test for issue #4238 "merge -cA,B with --accept option aborts
+# if rA conflicts".
+@Issue(4238)
+def multi_range_merge_with_accept(sbox):
+ "multi range merge with --accept keeps going"
+
+ sbox.build()
+ os.chdir(sbox.wc_dir)
+ sbox.wc_dir = ''
+
+ # Commit some changes
+ for c in [2, 3, 4]:
+ svntest.main.file_append('iota', 'Change ' + str(c) + '\n')
+ sbox.simple_commit()
+
+ sbox.simple_update(revision=1)
+
+ # The bug: with a request to merge -c4 then -c3, it merges -c4 which
+ # conflicts then auto-resolves the conflict, then errors out with
+ # 'svn: E155035: Can't merge into conflicted node 'iota'.
+ # ### We need more checking of the result to make this test robust, since
+ # it may not always just error out.
+ svntest.main.run_svn(None, 'merge', '-c4,3', '^/iota', 'iota',
+ '--accept=theirs-conflict')
+
+
########################################################################
# Run the tests
@@ -252,6 +614,11 @@ def prop_conflict_resolution(sbox):
test_list = [ None,
automatic_conflict_resolution,
prop_conflict_resolution,
+ auto_resolve_executable_file,
+ resolved_on_wc_root,
+ resolved_on_deleted_item,
+ theirs_conflict_in_subdir,
+ multi_range_merge_with_accept,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/resolved_tests.py b/subversion/tests/cmdline/resolved_tests.py
deleted file mode 100755
index 9e7adda..0000000
--- a/subversion/tests/cmdline/resolved_tests.py
+++ /dev/null
@@ -1,375 +0,0 @@
-#!/usr/bin/env python
-#
-# resolved_tests.py: testing "resolved" cases.
-#
-# Subversion is a tool for revision control.
-# See http://subversion.apache.org for more information.
-#
-# ====================================================================
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-######################################################################
-
-# General modules
-import sys, re, os
-
-# Our testing module
-import svntest
-from svntest import wc
-
-# (abbreviation)
-Skip = svntest.testcase.Skip_deco
-SkipUnless = svntest.testcase.SkipUnless_deco
-XFail = svntest.testcase.XFail_deco
-Issues = svntest.testcase.Issues_deco
-Issue = svntest.testcase.Issue_deco
-Wimp = svntest.testcase.Wimp_deco
-Item = svntest.wc.StateItem
-
-from svntest.main import SVN_PROP_MERGEINFO, server_has_mergeinfo
-
-######################################################################
-# Tests
-#
-# Each test must return on success or raise on failure.
-
-
-#----------------------------------------------------------------------
-
-def resolved_on_wc_root(sbox):
- "resolved on working copy root"
-
- sbox.build()
- wc = sbox.wc_dir
-
- i = os.path.join(wc, 'iota')
- B = os.path.join(wc, 'A', 'B')
- g = os.path.join(wc, 'A', 'D', 'gamma')
-
- # Create some conflicts...
- # Commit mods
- svntest.main.file_append(i, "changed iota.\n")
- svntest.main.file_append(g, "changed gamma.\n")
- svntest.actions.run_and_verify_svn(None, None, [],
- 'propset', 'foo', 'foo-val', B)
-
- expected_output = svntest.wc.State(wc, {
- 'iota' : Item(verb='Sending'),
- 'A/B' : Item(verb='Sending'),
- 'A/D/gamma' : Item(verb='Sending'),
- })
-
- expected_status = svntest.actions.get_virginal_state(wc, 1)
- expected_status.tweak('iota', 'A/B', 'A/D/gamma', wc_rev = 2)
-
- svntest.actions.run_and_verify_commit(wc,
- expected_output,
- expected_status,
- None,
- wc)
-
- # Go back to rev 1
- expected_output = svntest.wc.State(wc, {
- 'iota' : Item(status='U '),
- 'A/B' : Item(status=' U'),
- 'A/D/gamma' : Item(status='U '),
- })
- expected_status = svntest.actions.get_virginal_state(wc, 1)
- expected_disk = svntest.main.greek_state.copy()
- svntest.actions.run_and_verify_update(wc,
- expected_output,
- expected_disk,
- expected_status,
- None, None, None, None, None, False,
- '-r1', wc)
-
- # Deletions so that the item becomes unversioned and
- # will have a tree-conflict upon update.
- svntest.actions.run_and_verify_svn(None, None, [],
- 'rm', i, B, g)
-
- # Update so that conflicts appear
- expected_output = svntest.wc.State(wc, {
- 'iota' : Item(status=' ', treeconflict='C'),
- 'A/B' : Item(status=' ', treeconflict='C'),
- 'A/D/gamma' : Item(status=' ', treeconflict='C'),
- })
-
- expected_disk = svntest.main.greek_state.copy()
- expected_disk.remove('iota',
- 'A/B/lambda',
- 'A/B/E/alpha', 'A/B/E/beta',
- 'A/D/gamma')
- if svntest.main.wc_is_singledb(sbox.wc_dir):
- expected_disk.remove('A/B/E', 'A/B/F', 'A/B')
-
- expected_status = svntest.actions.get_virginal_state(wc, 2)
- expected_status.tweak('iota', 'A/B', 'A/D/gamma',
- status='D ', treeconflict='C')
- expected_status.tweak('A/B/lambda', 'A/B/E', 'A/B/E/alpha', 'A/B/E/beta',
- 'A/B/F', status='D ')
- svntest.actions.run_and_verify_update(wc,
- expected_output,
- expected_disk,
- None,
- None, None, None, None, None, False,
- wc)
- svntest.actions.run_and_verify_unquiet_status(wc, expected_status)
-
- # Resolve recursively
- svntest.actions.run_and_verify_resolved([i, B, g], '--depth=infinity', wc)
-
- expected_status.tweak('iota', 'A/B', 'A/D/gamma', treeconflict=None)
- svntest.actions.run_and_verify_unquiet_status(wc, expected_status)
-
-
-
-
-
-def resolved_on_deleted_item(sbox):
- "resolved on deleted item"
-
- sbox.build()
- wc = sbox.wc_dir
-
- A = os.path.join(wc, 'A',)
- B = os.path.join(wc, 'A', 'B')
- g = os.path.join(wc, 'A', 'D', 'gamma')
- A2 = os.path.join(wc, 'A2')
- B2 = os.path.join(A2, 'B')
- g2 = os.path.join(A2, 'D', 'gamma')
-
- A_url = sbox.repo_url + '/A'
- A2_url = sbox.repo_url + '/A2'
-
- # make a copy of A
- svntest.actions.run_and_verify_svn(None, None, [],
- 'cp', A_url, A2_url, '-m', 'm')
-
- expected_output = svntest.wc.State(wc, {
- 'A2' : Item(status='A '),
- 'A2/B' : Item(status='A '),
- 'A2/B/lambda' : Item(status='A '),
- 'A2/B/E' : Item(status='A '),
- 'A2/B/E/alpha' : Item(status='A '),
- 'A2/B/E/beta' : Item(status='A '),
- 'A2/B/F' : Item(status='A '),
- 'A2/mu' : Item(status='A '),
- 'A2/C' : Item(status='A '),
- 'A2/D' : Item(status='A '),
- 'A2/D/gamma' : Item(status='A '),
- 'A2/D/G' : Item(status='A '),
- 'A2/D/G/pi' : Item(status='A '),
- 'A2/D/G/rho' : Item(status='A '),
- 'A2/D/G/tau' : Item(status='A '),
- 'A2/D/H' : Item(status='A '),
- 'A2/D/H/chi' : Item(status='A '),
- 'A2/D/H/omega' : Item(status='A '),
- 'A2/D/H/psi' : Item(status='A '),
- })
-
-
- expected_disk = svntest.main.greek_state.copy()
- expected_disk.add({
- 'A2/mu' : Item(contents="This is the file 'mu'.\n"),
- 'A2/D/gamma' : Item(contents="This is the file 'gamma'.\n"),
- 'A2/D/H/psi' : Item(contents="This is the file 'psi'.\n"),
- 'A2/D/H/omega' : Item(contents="This is the file 'omega'.\n"),
- 'A2/D/H/chi' : Item(contents="This is the file 'chi'.\n"),
- 'A2/D/G/rho' : Item(contents="This is the file 'rho'.\n"),
- 'A2/D/G/pi' : Item(contents="This is the file 'pi'.\n"),
- 'A2/D/G/tau' : Item(contents="This is the file 'tau'.\n"),
- 'A2/B/lambda' : Item(contents="This is the file 'lambda'.\n"),
- 'A2/B/F' : Item(),
- 'A2/B/E/beta' : Item(contents="This is the file 'beta'.\n"),
- 'A2/B/E/alpha' : Item(contents="This is the file 'alpha'.\n"),
- 'A2/C' : Item(),
- })
-
-
- expected_status = svntest.actions.get_virginal_state(wc, 2)
- expected_status.add({
- 'A2' : Item(),
- 'A2/B' : Item(),
- 'A2/B/lambda' : Item(),
- 'A2/B/E' : Item(),
- 'A2/B/E/alpha' : Item(),
- 'A2/B/E/beta' : Item(),
- 'A2/B/F' : Item(),
- 'A2/mu' : Item(),
- 'A2/C' : Item(),
- 'A2/D' : Item(),
- 'A2/D/gamma' : Item(),
- 'A2/D/G' : Item(),
- 'A2/D/G/pi' : Item(),
- 'A2/D/G/rho' : Item(),
- 'A2/D/G/tau' : Item(),
- 'A2/D/H' : Item(),
- 'A2/D/H/chi' : Item(),
- 'A2/D/H/omega' : Item(),
- 'A2/D/H/psi' : Item(),
- })
- expected_status.tweak(status=' ', wc_rev='2')
-
- svntest.actions.run_and_verify_update(wc,
- expected_output,
- expected_disk,
- expected_status,
- None, None, None, None, None, False,
- wc)
-
- # Create some conflicts...
-
- # Modify the paths in the one directory.
- svntest.actions.run_and_verify_svn(None, None, [],
- 'propset', 'foo', 'foo-val', B)
- svntest.main.file_append(g, "Modified gamma.\n")
-
- expected_output = svntest.wc.State(wc, {
- 'A/B' : Item(verb='Sending'),
- 'A/D/gamma' : Item(verb='Sending'),
- })
-
- expected_status.tweak('A/B', 'A/D/gamma', wc_rev='3')
-
- svntest.actions.run_and_verify_commit(wc,
- expected_output,
- expected_status,
- None,
- wc)
-
- # Delete the paths in the second directory.
- svntest.actions.run_and_verify_svn(None, None, [],
- 'rm', B2, g2)
-
- expected_output = svntest.wc.State(wc, {
- 'A2/B' : Item(verb='Deleting'),
- 'A2/D/gamma' : Item(verb='Deleting'),
- })
-
- expected_status.remove('A2/B', 'A2/B/lambda',
- 'A2/B/E', 'A2/B/E/alpha', 'A2/B/E/beta',
- 'A2/B/F',
- 'A2/D/gamma')
-
- svntest.actions.run_and_verify_commit(wc,
- expected_output,
- expected_status,
- None,
- A2)
-
- # Now merge A to A2, creating conflicts...
-
- expected_output = svntest.wc.State(A2, {
- 'B' : Item(status=' ', treeconflict='C'),
- 'D/gamma' : Item(status=' ', treeconflict='C'),
- })
- expected_mergeinfo_output = svntest.wc.State(A2, {
- '' : Item(status=' U')
- })
- expected_elision_output = svntest.wc.State(A2, {
- })
- expected_disk = svntest.wc.State('', {
- 'mu' : Item(contents="This is the file 'mu'.\n"),
- 'D' : Item(),
- 'D/H' : Item(),
- 'D/H/psi' : Item(contents="This is the file 'psi'.\n"),
- 'D/H/omega' : Item(contents="This is the file 'omega'.\n"),
- 'D/H/chi' : Item(contents="This is the file 'chi'.\n"),
- 'D/G' : Item(),
- 'D/G/rho' : Item(contents="This is the file 'rho'.\n"),
- 'D/G/pi' : Item(contents="This is the file 'pi'.\n"),
- 'D/G/tau' : Item(contents="This is the file 'tau'.\n"),
- 'C' : Item(),
- })
-
-
- expected_skip = svntest.wc.State(wc, {
- })
-
- expected_status = svntest.wc.State(A2, {
- '' : Item(status=' M', wc_rev='2'),
- 'D' : Item(status=' ', wc_rev='2'),
- 'D/gamma' : Item(status='! ', treeconflict='C'),
- 'D/G' : Item(status=' ', wc_rev='2'),
- 'D/G/pi' : Item(status=' ', wc_rev='2'),
- 'D/G/rho' : Item(status=' ', wc_rev='2'),
- 'D/G/tau' : Item(status=' ', wc_rev='2'),
- 'D/H' : Item(status=' ', wc_rev='2'),
- 'D/H/chi' : Item(status=' ', wc_rev='2'),
- 'D/H/omega' : Item(status=' ', wc_rev='2'),
- 'D/H/psi' : Item(status=' ', wc_rev='2'),
- 'B' : Item(status='! ', treeconflict='C'),
- 'mu' : Item(status=' ', wc_rev='2'),
- 'C' : Item(status=' ', wc_rev='2'),
- })
-
- svntest.actions.run_and_verify_merge(A2, None, None, A_url, None,
- expected_output,
- expected_mergeinfo_output,
- expected_elision_output,
- expected_disk, None, expected_skip,
- None, dry_run = False)
- svntest.actions.run_and_verify_unquiet_status(A2, expected_status)
-
-
- # Now resolve by recursing on the working copy root.
- svntest.actions.run_and_verify_resolved([B2, g2], '--depth=infinity', wc)
-
- expected_status.remove('B', 'D/gamma')
- svntest.actions.run_and_verify_unquiet_status(A2, expected_status)
-
-
-
-def theirs_conflict_in_subdir(sbox):
- "resolve to 'theirs-conflict' in sub-directory"
-
- sbox.build()
- wc = sbox.wc_dir
- wc2 = sbox.add_wc_path('wc2')
- svntest.actions.duplicate_dir(sbox.wc_dir, wc2)
-
- alpha_path = os.path.join(wc, 'A', 'B', 'E', 'alpha')
- alpha_path2 = os.path.join(wc2, 'A', 'B', 'E', 'alpha')
-
- svntest.main.file_append(alpha_path, "Modified alpha.\n")
- svntest.main.run_svn(None, 'ci', '-m', 'logmsg', wc)
-
- svntest.main.file_append(alpha_path2, "Modified alpha, too.\n")
- svntest.main.run_svn(None, 'up', wc2)
-
- svntest.actions.run_and_verify_resolve([alpha_path2],
- '--accept=theirs-conflict',
- alpha_path2)
-
-#######################################################################
-# Run the tests
-
-
-# list all tests here, starting with None:
-test_list = [ None,
- resolved_on_wc_root,
- resolved_on_deleted_item,
- theirs_conflict_in_subdir,
- ]
-
-if __name__ == '__main__':
- svntest.main.run_tests(test_list)
- # NOTREACHED
-
-
-### End of file.
diff --git a/subversion/tests/cmdline/revert_tests.py b/subversion/tests/cmdline/revert_tests.py
index 2309e7d..cf7b1fc 100755
--- a/subversion/tests/cmdline/revert_tests.py
+++ b/subversion/tests/cmdline/revert_tests.py
@@ -79,8 +79,7 @@ def revert_replacement_with_props(sbox, wc_copy):
expected_disk.tweak('A/D/G/rho',
props={ 'svn:eol-style': 'LF' })
- actual_disk = svntest.tree.build_tree_from_wc(wc_dir, 1)
- svntest.tree.compare_trees("disk", actual_disk, expected_disk.old_tree())
+ svntest.actions.verify_disk(wc_dir, expected_disk, True)
# Commit props
expected_output = svntest.wc.State(wc_dir, {
@@ -124,8 +123,7 @@ def revert_replacement_with_props(sbox, wc_copy):
expected_disk.tweak('A/D/G/rho',
contents="This is the file 'pi'.\n",
props=props)
- actual_disk = svntest.tree.build_tree_from_wc(wc_dir, 1)
- svntest.tree.compare_trees("disk", actual_disk, expected_disk.old_tree())
+ svntest.actions.verify_disk(wc_dir, expected_disk.old_tree(), True)
# Now revert
expected_status.tweak('A/D/G/rho', status='R ', copied='+', wc_rev='-')
@@ -144,8 +142,7 @@ def revert_replacement_with_props(sbox, wc_copy):
props={ 'phony-prop': '*' })
expected_disk.tweak('A/D/G/rho',
props={ 'svn:eol-style': 'LF' })
- actual_disk = svntest.tree.build_tree_from_wc(wc_dir, 1)
- svntest.tree.compare_trees("disk", actual_disk, expected_disk.old_tree())
+ svntest.actions.verify_disk(wc_dir, expected_disk.old_tree(), True)
@@ -368,37 +365,54 @@ def revert_replaced_file_without_props(sbox):
svntest.actions.run_and_verify_status(wc_dir, expected_status)
#----------------------------------------------------------------------
-# Regression test for issue #876:
-# svn revert of an svn move'd file does not revert the file
-@XFail()
+# Note that issue #876 has been rejected. This now basically tests that
+# reverting the delete side of a move does *not* also revert the copy side.
@Issue(876)
def revert_moved_file(sbox):
- "revert a moved file"
-
- sbox.build(read_only = True)
- wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, 'iota')
- iota_path_moved = os.path.join(wc_dir, 'iota_moved')
-
- svntest.actions.run_and_verify_svn(None, None, [], 'mv', iota_path,
- iota_path_moved)
- expected_output = svntest.actions.get_virginal_state(wc_dir, 1)
- expected_output.tweak('iota', status='D ')
- expected_output.add({
- 'iota_moved' : Item(status='A ', copied='+', wc_rev='-'),
- })
- svntest.actions.run_and_verify_status(wc_dir, expected_output)
+ "revert a moved file"
+
+ # svntest.factory.make(sbox, """svn mv iota iota_moved
+ # svn st
+ # svn revert iota
+ # svn st
+ # """)
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ iota = os.path.join(wc_dir, 'iota')
+ iota_moved = os.path.join(wc_dir, 'iota_moved')
+
+ # svn mv iota iota_moved
+ expected_stdout = svntest.verify.UnorderedOutput([
+ 'A ' + iota_moved + '\n',
+ 'D ' + iota + '\n',
+ ])
+
+ actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'mv', iota,
+ iota_moved)
+
+ # svn st
+ expected_status = actions.get_virginal_state(wc_dir, 1)
+ expected_status.add({
+ 'iota_moved' : Item(status='A ', copied='+', wc_rev='-',
+ moved_from='iota'),
+ })
+ expected_status.tweak('iota', status='D ', moved_to='iota_moved')
+
+ actions.run_and_verify_unquiet_status(wc_dir, expected_status)
- # now revert the file iota
- svntest.actions.run_and_verify_svn(None,
- ["Reverted '" + iota_path + "'\n"], [], 'revert', iota_path)
+ # svn revert iota
+ expected_stdout = ["Reverted '" + iota + "'\n"]
- # at this point, svn status on iota_path_moved should return nothing
- # since it should disappear on reverting the move, and since svn status
- # on a non-existent file returns nothing.
+ actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'revert',
+ iota)
- svntest.actions.run_and_verify_svn(None, [], [],
- 'status', '-v', iota_path_moved)
+ # svn st
+ expected_status.tweak('iota', status=' ', moved_to=None)
+ expected_status.tweak('iota_moved', moved_from=None)
+
+ actions.run_and_verify_unquiet_status(wc_dir, expected_status)
#----------------------------------------------------------------------
@@ -494,9 +508,8 @@ def revert_file_merge_replace_with_history(sbox):
expected_status.tweak('A/D/G/rho', copied=None, status=' ', wc_rev=3)
svntest.actions.run_and_verify_status(wc_dir, expected_status)
- actual_disk = svntest.tree.build_tree_from_wc(wc_dir, 1)
expected_disk.tweak('A/D/G/rho', contents="new rho\n")
- svntest.tree.compare_trees("disk", actual_disk, expected_disk.old_tree())
+ svntest.actions.verify_disk(wc_dir, expected_disk.old_tree(), True)
# Make sure the revert removed the copy from information.
expected_infos = [
@@ -561,8 +574,7 @@ def revert_after_second_replace(sbox):
# Check disk status
expected_disk = svntest.main.greek_state.copy()
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
- actual_disk = svntest.tree.build_tree_from_wc(wc_dir, 1)
- svntest.tree.compare_trees("disk", actual_disk, expected_disk.old_tree())
+ svntest.actions.verify_disk(wc_dir, expected_disk.old_tree(), True)
#----------------------------------------------------------------------
@@ -773,34 +785,22 @@ def status_of_missing_dir_after_revert(sbox):
svntest.actions.run_and_verify_svn(None, expected_output, [], "revert",
A_D_G_path)
- deletes = [
- "D " + os.path.join(A_D_G_path, "pi") + "\n",
- "D " + os.path.join(A_D_G_path, "rho") + "\n",
- "D " + os.path.join(A_D_G_path, "tau") + "\n"
- ]
- expected_output = svntest.verify.UnorderedOutput(deletes)
- svntest.actions.run_and_verify_svn(None, expected_output, [],
- "status", wc_dir)
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('A/D/G/rho', 'A/D/G/pi', 'A/D/G/tau',
+ status='D ')
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
svntest.main.safe_rmtree(A_D_G_path)
+ expected_status.tweak('A/D/G', status='! ')
- expected_output = ["! " + A_D_G_path + "\n"]
-
- if svntest.main.wc_is_singledb(wc_dir):
- expected_output.extend(deletes)
-
- expected_output = svntest.verify.UnorderedOutput(expected_output)
-
- svntest.actions.run_and_verify_svn(None, expected_output, [], "status",
- wc_dir)
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
# When using single-db, we can get back to the virginal state.
- if svntest.main.wc_is_singledb(wc_dir):
- svntest.actions.run_and_verify_svn(None, None, [], "revert",
- "-R", A_D_G_path)
+ svntest.actions.run_and_verify_svn(None, None, [], "revert",
+ "-R", A_D_G_path)
- expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
- svntest.actions.run_and_verify_status(wc_dir, expected_status)
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
#----------------------------------------------------------------------
# Test for issue #2804 with replaced directory
@@ -895,14 +895,10 @@ def status_of_missing_dir_after_revert_replaced_with_history_dir(sbox):
svntest.main.safe_rmtree(G_path)
- if svntest.main.wc_is_singledb(wc_dir):
- expected_output = svntest.verify.UnorderedOutput(
+ expected_output = svntest.verify.UnorderedOutput(
["! " + G_path + "\n",
"! " + os.path.join(G_path, "alpha") + "\n",
"! " + os.path.join(G_path, "beta") + "\n"])
- else:
- expected_output = svntest.verify.UnorderedOutput(
- ["! " + G_path + "\n"])
svntest.actions.run_and_verify_svn(None, expected_output, [], "status",
wc_dir)
@@ -946,17 +942,17 @@ def revert_tree_conflicts_in_updated_files(sbox):
svntest.actions.build_greek_tree_conflicts(sbox)
wc_dir = sbox.wc_dir
G = os.path.join(wc_dir, 'A', 'D', 'G')
- G_pi = os.path.join(G, 'pi');
- G_rho = os.path.join(G, 'rho');
- G_tau = os.path.join(G, 'tau');
+ G_pi = os.path.join(G, 'pi')
+ G_rho = os.path.join(G, 'rho')
+ G_tau = os.path.join(G, 'tau')
# Duplicate wc for tests
wc_dir_2 = sbox.add_wc_path('2')
svntest.actions.duplicate_dir(wc_dir, wc_dir_2)
G2 = os.path.join(wc_dir_2, 'A', 'D', 'G')
- G2_pi = os.path.join(G2, 'pi');
- G2_rho = os.path.join(G2, 'rho');
- G2_tau = os.path.join(G2, 'tau');
+ G2_pi = os.path.join(G2, 'pi')
+ G2_rho = os.path.join(G2, 'rho')
+ G2_tau = os.path.join(G2, 'tau')
# Expectations
expected_output = svntest.verify.UnorderedOutput(
@@ -1144,7 +1140,7 @@ def revert_permissions_only(sbox):
check_executability(path, False)
- os.chmod(sbox.ospath('A/B/E/alpha'), 0444); # read-only
+ os.chmod(sbox.ospath('A/B/E/alpha'), 0444) # read-only
is_readonly(sbox.ospath('A/B/E/alpha'))
expected_output = ["Reverted '%s'\n" % sbox.ospath('A/B/E/alpha')]
svntest.actions.run_and_verify_svn(None, expected_output, [],
@@ -1152,7 +1148,7 @@ def revert_permissions_only(sbox):
is_writable(sbox.ospath('A/B/E/alpha'))
if svntest.main.is_posix_os():
- os.chmod(sbox.ospath('A/B/E/beta'), 0777); # executable
+ os.chmod(sbox.ospath('A/B/E/beta'), 0777) # executable
is_executable(sbox.ospath('A/B/E/beta'))
expected_output = ["Reverted '%s'\n" % sbox.ospath('A/B/E/beta')]
svntest.actions.run_and_verify_svn(None, expected_output, [],
@@ -1178,7 +1174,7 @@ def revert_permissions_only(sbox):
expected_status,
None, wc_dir)
- os.chmod(sbox.ospath('A/B/E/alpha'), 0666); # not read-only
+ os.chmod(sbox.ospath('A/B/E/alpha'), 0666) # not read-only
is_writable(sbox.ospath('A/B/E/alpha'))
expected_output = ["Reverted '%s'\n" % sbox.ospath('A/B/E/alpha')]
svntest.actions.run_and_verify_svn(None, expected_output, [],
@@ -1186,13 +1182,24 @@ def revert_permissions_only(sbox):
is_readonly(sbox.ospath('A/B/E/alpha'))
if svntest.main.is_posix_os():
- os.chmod(sbox.ospath('A/B/E/beta'), 0666); # not executable
+ os.chmod(sbox.ospath('A/B/E/beta'), 0666) # not executable
is_non_executable(sbox.ospath('A/B/E/beta'))
expected_output = ["Reverted '%s'\n" % sbox.ospath('A/B/E/beta')]
svntest.actions.run_and_verify_svn(None, expected_output, [],
'revert', sbox.ospath('A/B/E/beta'))
is_executable(sbox.ospath('A/B/E/beta'))
+ # copied file is always writeable
+ sbox.simple_update()
+ expected_output = ["A %s\n" % sbox.ospath('A/B/E2')]
+ svntest.actions.run_and_verify_svn(None, expected_output, [], 'copy',
+ sbox.ospath('A/B/E'),
+ sbox.ospath('A/B/E2'))
+ is_writable(sbox.ospath('A/B/E2/alpha'))
+ svntest.actions.run_and_verify_svn(None, [], [],
+ 'revert', sbox.ospath('A/B/E2/alpha'))
+ is_writable(sbox.ospath('A/B/E2/alpha'))
+
@XFail()
@Issue(3851)
def revert_copy_depth_files(sbox):
@@ -1437,7 +1444,7 @@ def revert_tree_conflicts_with_replacements(sbox):
# Revert everything (i.e., accept "theirs-full").
svntest.actions.run_and_verify_revert([
wc('A/B/E'),
- wc('A/B/E/alpha'), # incoming
+ wc('A/B/E/alpha'), # incoming & local
wc('A/B/E/beta'),
wc('A/B/E/loc_beta'),
wc('A/B/lambda'),
@@ -1452,7 +1459,6 @@ def revert_tree_conflicts_with_replacements(sbox):
wc('A/D/H/loc_psi'),
wc('A/D/gamma'),
wc('A/mu'),
- wc('A/B/E/alpha'),
], '-R', wc_dir)
# Remove a few unversioned files that revert left behind.
@@ -1582,8 +1588,63 @@ def revert_with_unversioned_targets(sbox):
expected_disk.add({
'A/D/H/delta': Item(delta_contents),
})
- actual_disk = svntest.tree.build_tree_from_wc(wc_dir, 1)
- svntest.tree.compare_trees("disk", actual_disk, expected_disk.old_tree())
+ svntest.actions.verify_disk(wc_dir, expected_disk.old_tree(), True)
+
+def revert_nonexistent(sbox):
+ 'svn revert -R nonexistent'
+ sbox.build(read_only=True)
+ svntest.actions.run_and_verify_svn(None, 'Skipped.*nonexistent', [],
+ 'revert', '-R', sbox.ospath('nonexistent'))
+
+@Issue(4168)
+def revert_obstructing_wc(sbox):
+ "revert with an obstructing working copy"
+
+ sbox.build(create_wc=False, read_only=True)
+ wc_dir = sbox.wc_dir
+
+ expected_output = svntest.wc.State(wc_dir, {})
+ expected_disk = svntest.wc.State(wc_dir, {})
+
+ # Checkout wc as depth empty
+ svntest.actions.run_and_verify_checkout(sbox.repo_url, wc_dir,
+ expected_output, expected_disk,
+ None, None, None, None,
+ '--depth', 'empty')
+
+ # And create an obstructing working copy as A
+ svntest.actions.run_and_verify_checkout(sbox.repo_url, wc_dir + '/A',
+ expected_output, expected_disk,
+ None, None, None, None,
+ '--depth', 'empty')
+
+ # Now try to fetch the entire wc, which will find an obstruction
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A' : Item(verb='Skipped'),
+ 'iota' : Item(status='A '),
+ })
+ expected_status = svntest.wc.State(wc_dir, {
+ '' : Item(status=' ', wc_rev='1'),
+ 'iota' : Item(status=' ', wc_rev='1'),
+ # A is not versioned but exists
+ })
+
+ # Use expected_status.old_tree() to avoid doing an entries comparion
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output, None,
+ expected_status.old_tree(),
+ None, None, None,
+ None, None, None,
+ wc_dir, '--set-depth', 'infinity')
+
+ # Revert should do nothing (no local changes), and report the obstruction
+ # (reporting the obstruction is nice for debuging, but not really required
+ # in this specific case, as the node was not modified)
+ svntest.actions.run_and_verify_svn(None, "Skipped '.*A' -- .*obstruct.*", [],
+ 'revert', '-R', wc_dir)
+
+
+
########################################################################
# Run the tests
@@ -1623,6 +1684,8 @@ test_list = [ None,
revert_no_text_change_conflict,
revert_no_text_change_conflict_recursive,
revert_with_unversioned_targets,
+ revert_nonexistent,
+ revert_obstructing_wc,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/schedule_tests.py b/subversion/tests/cmdline/schedule_tests.py
index 39aa43f..d27fbf7 100755
--- a/subversion/tests/cmdline/schedule_tests.py
+++ b/subversion/tests/cmdline/schedule_tests.py
@@ -26,7 +26,9 @@
######################################################################
# General modules
-import os
+import os, logging
+
+logger = logging.getLogger()
# Our testing module
import svntest
@@ -256,8 +258,8 @@ def check_reversion(files, output):
output.sort()
expected_output.sort()
if output != expected_output:
- print("Expected output: %s" % expected_output)
- print("Actual output: %s" % output)
+ logger.warn("Expected output: %s", expected_output)
+ logger.warn("Actual output: %s", output)
raise svntest.Failure
#----------------------------------------------------------------------
@@ -561,6 +563,7 @@ def status_add_deleted_directory(sbox):
# Regression test for issue #939:
# Recursive 'svn add' should still traverse already-versioned dirs.
@Issue(939)
+@Issue(4241)
def add_recursive_already_versioned(sbox):
"'svn add' should traverse already-versioned dirs"
@@ -590,8 +593,8 @@ def add_recursive_already_versioned(sbox):
### or else Subversion will think you're trying to add the working copy
### to its parent directory, and will (possibly, if the parent directory
### isn't versioned) fail.
- #svntest.main.run_svn(None, 'add', '--force', wc_dir)
- #svntest.actions.run_and_verify_status(wc_dir, expected_status)
+ svntest.main.run_svn(None, 'add', '--force', wc_dir)
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
# Now revert, and do the adds again from inside the working copy.
svntest.main.run_svn(None, 'revert', '--recursive', wc_dir)
diff --git a/subversion/tests/cmdline/special_tests.py b/subversion/tests/cmdline/special_tests.py
index 2e1348e..6340002 100755
--- a/subversion/tests/cmdline/special_tests.py
+++ b/subversion/tests/cmdline/special_tests.py
@@ -25,12 +25,12 @@
######################################################################
# General modules
-import sys, os, re
+import sys, os, re, copy
# Our testing module
import svntest
-from svntest.main import server_has_mergeinfo
+from svntest.main import server_has_mergeinfo, run_svn, file_write
# (abbreviation)
Skip = svntest.testcase.Skip_deco
@@ -49,7 +49,6 @@ Item = svntest.wc.StateItem
#----------------------------------------------------------------------
-@SkipUnless(svntest.main.is_posix_os)
def general_symlink(sbox):
"general symlink handling"
@@ -57,11 +56,11 @@ def general_symlink(sbox):
wc_dir = sbox.wc_dir
# First try to just commit a symlink
- newfile_path = os.path.join(wc_dir, 'newfile')
- linktarget_path = os.path.join(wc_dir, 'linktarget')
- svntest.main.file_append(linktarget_path, 'this is just a link target')
- os.symlink('linktarget', newfile_path)
- svntest.main.run_svn(None, 'add', newfile_path, linktarget_path)
+ newfile_path = sbox.ospath('newfile')
+
+ sbox.simple_append('linktarget', 'this is just a link target')
+ sbox.simple_add('linktarget')
+ sbox.simple_add_symlink('linktarget', 'newfile')
expected_output = svntest.wc.State(wc_dir, {
'newfile' : Item(verb='Adding'),
@@ -104,14 +103,18 @@ def general_symlink(sbox):
'up', '-r', '2', wc_dir)
# Is the symlink back?
- new_target = os.readlink(newfile_path)
- if new_target != 'linktarget':
- raise svntest.Failure
+ if svntest.main.is_posix_os():
+ new_target = os.readlink(newfile_path)
+ if new_target != 'linktarget':
+ raise svntest.Failure
## Now change the target of the symlink, verify that it is shown as
## modified and that a commit succeeds.
os.remove(newfile_path)
- os.symlink('A', newfile_path)
+ if svntest.main.is_posix_os():
+ os.symlink('A', newfile_path)
+ else:
+ sbox.simple_append('newfile', 'link A', truncate = True)
was_cwd = os.getcwd()
os.chdir(wc_dir)
@@ -223,7 +226,6 @@ def import_export_symlink(sbox):
#----------------------------------------------------------------------
# Regression test for issue 1986
@Issue(1986)
-@SkipUnless(svntest.main.is_posix_os)
def copy_tree_with_symlink(sbox):
"'svn cp dir1 dir2' which contains a symlink"
@@ -231,11 +233,10 @@ def copy_tree_with_symlink(sbox):
wc_dir = sbox.wc_dir
# Create a versioned symlink within directory 'A/D/H'.
- newfile_path = os.path.join(wc_dir, 'A', 'D', 'H', 'newfile')
- linktarget_path = os.path.join(wc_dir, 'A', 'D', 'H', 'linktarget')
- svntest.main.file_append(linktarget_path, 'this is just a link target')
- os.symlink('linktarget', newfile_path)
- svntest.main.run_svn(None, 'add', newfile_path, linktarget_path)
+ newfile_path = sbox.ospath('A/D/H/newfile')
+ sbox.simple_append('A/D/H/linktarget', 'this is just a link target')
+ sbox.simple_add('A/D/H/linktarget')
+ sbox.simple_add_symlink('linktarget', 'A/D/H/newfile')
expected_output = svntest.wc.State(wc_dir, {
'A/D/H/newfile' : Item(verb='Adding'),
@@ -301,8 +302,8 @@ def replace_symlink_with_file(sbox):
# Now replace the symlink with a normal file and try to commit, we
# should get an error
- os.remove(newfile_path);
- svntest.main.file_append(newfile_path, "text of actual file");
+ os.remove(newfile_path)
+ svntest.main.file_append(newfile_path, "text of actual file")
# Does status show the obstruction?
was_cwd = os.getcwd()
@@ -323,7 +324,7 @@ def replace_symlink_with_file(sbox):
raise svntest.Failure
-@SkipUnless(svntest.main.is_posix_os)
+#----------------------------------------------------------------------
def remove_symlink(sbox):
"remove a symlink"
@@ -334,8 +335,8 @@ def remove_symlink(sbox):
newfile_path = os.path.join(wc_dir, 'newfile')
linktarget_path = os.path.join(wc_dir, 'linktarget')
svntest.main.file_append(linktarget_path, 'this is just a link target')
- os.symlink('linktarget', newfile_path)
- svntest.main.run_svn(None, 'add', newfile_path, linktarget_path)
+ sbox.simple_add_symlink('linktarget', 'newfile')
+ sbox.simple_add('linktarget')
expected_output = svntest.wc.State(wc_dir, {
'newfile' : Item(verb='Adding'),
@@ -367,7 +368,7 @@ def remove_symlink(sbox):
svntest.actions.run_and_verify_commit(wc_dir, expected_output,
expected_status, None, wc_dir)
-@SkipUnless(svntest.main.is_posix_os)
+#----------------------------------------------------------------------
@SkipUnless(server_has_mergeinfo)
@Issue(2530)
def merge_symlink_into_file(sbox):
@@ -378,8 +379,8 @@ def merge_symlink_into_file(sbox):
d_url = sbox.repo_url + '/A/D'
dprime_url = sbox.repo_url + '/A/Dprime'
- gamma_path = os.path.join(wc_dir, 'A', 'D', 'gamma')
- gamma_prime_path = os.path.join(wc_dir, 'A', 'Dprime', 'gamma')
+ gamma_path = sbox.ospath('A/D/gamma')
+ gamma_prime_path = sbox.ospath('A/Dprime/gamma')
# create a copy of the D directory to play with
svntest.main.run_svn(None,
@@ -400,8 +401,7 @@ def merge_symlink_into_file(sbox):
# Commit a symlink in its place
linktarget_path = os.path.join(wc_dir, 'linktarget')
svntest.main.file_append(linktarget_path, 'this is just a link target')
- os.symlink('linktarget', gamma_prime_path)
- svntest.main.run_svn(None, 'add', gamma_prime_path)
+ sbox.simple_add_symlink('linktarget', 'A/Dprime/gamma')
expected_output = svntest.wc.State(wc_dir, {
'A/Dprime/gamma' : Item(verb='Adding'),
@@ -435,7 +435,7 @@ def merge_symlink_into_file(sbox):
-@SkipUnless(svntest.main.is_posix_os)
+#----------------------------------------------------------------------
def merge_file_into_symlink(sbox):
"merge file into symlink"
@@ -466,8 +466,7 @@ def merge_file_into_symlink(sbox):
# Commit a symlink in its place
linktarget_path = os.path.join(wc_dir, 'linktarget')
svntest.main.file_append(linktarget_path, 'this is just a link target')
- os.symlink('linktarget', gamma_prime_path)
- svntest.main.run_svn(None, 'add', gamma_prime_path)
+ sbox.simple_add_symlink('linktarget', 'A/Dprime/gamma')
expected_output = svntest.wc.State(wc_dir, {
'A/Dprime/gamma' : Item(verb='Adding'),
@@ -520,22 +519,19 @@ def checkout_repo_with_symlinks(sbox):
expected_output,
expected_wc)
+#----------------------------------------------------------------------
# Issue 2716: 'svn diff' against a symlink to a directory within the wc
@Issue(2716)
-@SkipUnless(svntest.main.is_posix_os)
def diff_symlink_to_dir(sbox):
"diff a symlink to a directory"
sbox.build(read_only = True)
- os.chdir(sbox.wc_dir)
- # Create a symlink to A/D/.
+ # Create a symlink to A/D as link.
d_path = os.path.join('A', 'D')
- link_path = 'link'
- os.symlink(d_path, link_path)
+ sbox.simple_add_symlink('A/D', 'link')
- # Add the symlink.
- svntest.main.run_svn(None, 'add', link_path)
+ os.chdir(sbox.wc_dir)
# Now diff the wc itself and check the results.
expected_output = [
@@ -544,7 +540,7 @@ def diff_symlink_to_dir(sbox):
"--- link\t(revision 0)\n",
"+++ link\t(working copy)\n",
"@@ -0,0 +1 @@\n",
- "+link " + d_path + "\n",
+ "+link A/D\n",
"\ No newline at end of file\n",
"\n",
"Property changes on: link\n",
@@ -557,9 +553,9 @@ def diff_symlink_to_dir(sbox):
svntest.actions.run_and_verify_svn(None, expected_output, [], 'diff',
'.')
# We should get the same output if we the diff the symlink itself.
- svntest.actions.run_and_verify_svn(None, expected_output, [], 'diff',
- link_path)
+ svntest.actions.run_and_verify_svn(None, expected_output, [], 'diff', 'link')
+#----------------------------------------------------------------------
# Issue 2692 (part of): Check that the client can check out a repository
# that contains an unknown special file type.
@Issue(2692)
@@ -593,8 +589,8 @@ def replace_symlink_with_dir(sbox):
# Now replace the symlink with a directory and try to commit, we
# should get an error
- os.remove(from_path);
- os.mkdir(from_path);
+ os.remove(from_path)
+ os.mkdir(from_path)
# Does status show the obstruction?
was_cwd = os.getcwd()
@@ -608,10 +604,8 @@ def replace_symlink_with_dir(sbox):
expected_output = svntest.wc.State(wc_dir, {
})
- if svntest.main.is_posix_os():
- error_re_string = '.*E145001: Entry.*has unexpectedly changed special.*'
- else:
- error_re_string = None
+ error_re_string = 'E145001: (Entry|Node).*has.*changed (special|kind)'
+
svntest.actions.run_and_verify_commit(wc_dir, expected_output,
None, error_re_string, wc_dir)
@@ -712,9 +706,8 @@ def unrelated_changed_special_status(sbox):
'--changelist', 'chi cl',
'-m', 'psi changed special status')
-
+#----------------------------------------------------------------------
@Issue(3972)
-@SkipUnless(svntest.main.is_posix_os)
def symlink_destination_change(sbox):
"revert a symlink destination change"
@@ -723,8 +716,7 @@ def symlink_destination_change(sbox):
# Create a new symlink and commit it.
newfile_path = os.path.join(wc_dir, 'newfile')
- os.symlink('linktarget', newfile_path)
- svntest.main.run_svn(None, 'add', newfile_path)
+ sbox.simple_add_symlink('linktarget', 'newfile')
expected_output = svntest.wc.State(wc_dir, {
'newfile' : Item(verb='Adding'),
@@ -740,7 +732,10 @@ def symlink_destination_change(sbox):
# Modify the symlink to point somewhere else
os.remove(newfile_path)
- os.symlink('linktarget2', newfile_path)
+ if svntest.main.is_posix_os():
+ os.symlink('linktarget2', newfile_path)
+ else:
+ sbox.simple_append('newfile', 'link linktarget2', truncate = True)
expected_status.tweak('newfile', status='M ')
svntest.actions.run_and_verify_status(wc_dir, expected_status)
@@ -760,8 +755,6 @@ def symlink_destination_change(sbox):
# This used to lose the special status in the target working copy
# (disk and metadata).
@Issue(3884)
-@SkipUnless(svntest.main.is_posix_os)
-@XFail()
def merge_foreign_symlink(sbox):
"merge symlink-add from foreign repos"
@@ -780,8 +773,7 @@ def merge_foreign_symlink(sbox):
zeta2_path = sbox2.ospath('A/zeta')
# sbox2 r2: create zeta2 in sbox2
- os.symlink('target', zeta2_path)
- sbox2.simple_add('A/zeta')
+ sbox2.simple_add_symlink('target', 'A/zeta')
sbox2.simple_commit('A/zeta')
@@ -792,7 +784,7 @@ def merge_foreign_symlink(sbox):
# Verify special status.
expected_disk = svntest.main.greek_state.copy()
expected_disk.add({
- 'A/zeta': Item(props={ 'svn:special': '*' })
+ 'A/zeta': Item(contents="link target", props={ 'svn:special': '*' })
})
svntest.actions.verify_disk(sbox.ospath(''), expected_disk, True)
@@ -822,7 +814,7 @@ def symlink_to_wc_basic(sbox):
wc_uuid = svntest.actions.get_wc_uuid(wc_dir)
expected_info = [{
'Path' : re.escape(os.path.join(symlink_path)),
- 'Working Copy Root Path' : re.escape(os.path.abspath(symlink_path)),
+ 'Working Copy Root Path' : re.escape(os.path.abspath(wc_dir)),
'Repository Root' : sbox.repo_url,
'Repository UUID' : wc_uuid,
'Revision' : '1',
@@ -831,7 +823,7 @@ def symlink_to_wc_basic(sbox):
}, {
'Name' : 'iota',
'Path' : re.escape(os.path.join(symlink_path, 'iota')),
- 'Working Copy Root Path' : re.escape(os.path.abspath(symlink_path)),
+ 'Working Copy Root Path' : re.escape(os.path.abspath(wc_dir)),
'Repository Root' : sbox.repo_url,
'Repository UUID' : wc_uuid,
'Revision' : '1',
@@ -862,8 +854,8 @@ def symlink_to_wc_svnversion(sbox):
symlink_path, sbox.repo_url,
[ "1\n" ], [])
+#----------------------------------------------------------------------
# Regression in 1.7.0: Update fails to change a symlink
-@SkipUnless(svntest.main.is_posix_os)
def update_symlink(sbox):
"update a symlink"
@@ -876,13 +868,15 @@ def update_symlink(sbox):
symlink_path = sbox.ospath('symlink')
# create a symlink to /A/mu
- os.symlink("A/mu", symlink_path)
- sbox.simple_add('symlink')
+ sbox.simple_add_symlink("A/mu", 'symlink')
sbox.simple_commit()
# change the symlink to /iota
os.remove(symlink_path)
- os.symlink("iota", symlink_path)
+ if svntest.main.is_posix_os():
+ os.symlink("iota", symlink_path)
+ else:
+ file_write(symlink_path, 'link iota')
sbox.simple_commit()
# update back to r2
@@ -899,6 +893,10 @@ def update_symlink(sbox):
expected_status.add({
'symlink' : Item(status=' ', wc_rev='3'),
})
+
+ if not svntest.main.is_posix_os():
+ expected_disk = None
+
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
expected_disk,
@@ -906,6 +904,170 @@ def update_symlink(sbox):
None, None, None,
None, None, 1)
+#----------------------------------------------------------------------
+@Issue(4091)
+def replace_symlinks(sbox):
+ "replace symlinks"
+ sbox.build()
+ wc = sbox.ospath
+
+ # Some of these tests are implemented for git (in test script
+ # t/t9100-git-svn-basic.sh) using the Perl bindings for Subversion.
+ # Our issue #4091 is about 'svn update' failures in the git tests.
+
+ sbox.simple_mkdir('A/D/G/Z')
+ sbox.simple_mkdir('A/D/Gx')
+ sbox.simple_mkdir('A/D/Gx/Z')
+ sbox.simple_mkdir('A/D/Hx')
+ sbox.simple_mkdir('A/D/Y')
+ sbox.simple_mkdir('Ax')
+
+ sbox.simple_add_symlink('../Y', 'A/D/H/Z')
+ sbox.simple_add_symlink('../Y', 'A/D/Hx/Z')
+
+ for p in ['Ax/mu',
+ 'A/D/Gx/pi',
+ 'A/D/Hx/chi',
+ ]:
+ file_write(wc(p), 'This starts as a normal file.\n')
+ sbox.simple_add(p)
+ for p in ['iota.sh',
+ 'A/mu.sh',
+ 'Ax/mu.sh',
+ 'A/D/gamma.sh',
+ 'A/B/E/beta.sh',
+ 'A/D/G/rho.sh',
+ 'A/D/Gx/rho.sh',
+ 'A/D/H/psi.sh',
+ 'A/D/Hx/psi.sh',
+ ]:
+ file_write(wc(p), '#!/bin/sh\necho "hello, svn!"\n')
+ os.chmod(wc(p), 0775)
+ sbox.simple_add(p)
+ if not svntest.main.is_posix_os():
+ sbox.simple_propset('svn:executable', 'X', p)
+ sbox.simple_commit() # r2
+ sbox.simple_update()
+ expected_status = svntest.actions.get_virginal_state(sbox.wc_dir, 2)
+ expected_status.add({
+ 'A/D/Y' : Item(status=' ', wc_rev=2),
+ 'A/D/G/Z' : Item(status=' ', wc_rev=2),
+ 'A/D/G/rho.sh' : Item(status=' ', wc_rev=2),
+ 'A/D/Hx' : Item(status=' ', wc_rev=2),
+ 'A/D/Hx/Z' : Item(status=' ', wc_rev=2),
+ 'A/D/Hx/chi' : Item(status=' ', wc_rev=2),
+ 'A/D/Hx/psi.sh' : Item(status=' ', wc_rev=2),
+ 'A/D/H/psi.sh' : Item(status=' ', wc_rev=2),
+ 'A/D/H/Z' : Item(status=' ', wc_rev=2),
+ 'A/D/Gx' : Item(status=' ', wc_rev=2),
+ 'A/D/Gx/Z' : Item(status=' ', wc_rev=2),
+ 'A/D/Gx/pi' : Item(status=' ', wc_rev=2),
+ 'A/D/Gx/rho.sh' : Item(status=' ', wc_rev=2),
+ 'A/D/gamma.sh' : Item(status=' ', wc_rev=2),
+ 'A/B/E/beta.sh' : Item(status=' ', wc_rev=2),
+ 'Ax' : Item(status=' ', wc_rev=2),
+ 'Ax/mu' : Item(status=' ', wc_rev=2),
+ 'Ax/mu.sh' : Item(status=' ', wc_rev=2),
+ 'A/mu.sh' : Item(status=' ', wc_rev=2),
+ 'iota.sh' : Item(status=' ', wc_rev=2),
+ })
+ expected_status_r2 = copy.deepcopy(expected_status)
+ svntest.actions.run_and_verify_status(sbox.wc_dir, expected_status_r2)
+
+ # Failing git-svn test: 'new symlink is added to a file that was
+ # also just made executable', i.e., in the same revision.
+ sbox.simple_propset("svn:executable", "X", 'A/B/E/alpha')
+ sbox.simple_add_symlink('alpha', 'A/B/E/sym-alpha')
+
+ # Add a symlink to a file made non-executable in the same revision.
+ sbox.simple_propdel("svn:executable", 'A/B/E/beta.sh')
+ sbox.simple_add_symlink('beta.sh', 'A/B/E/sym-beta.sh')
+
+ # Replace a normal {file, exec, dir} with a symlink to the same kind
+ # via Subversion replacement.
+ sbox.simple_rm('A/D/G/pi',
+ 'A/D/G/rho.sh',
+ #'A/D/G/Z', # Ooops, not compatible with --bin=svn1.6.
+ )
+ sbox.simple_add_symlink('../gamma', 'A/D/G/pi')
+ sbox.simple_add_symlink('../gamma.sh', 'A/D/G/rho.sh')
+ #sbox.simple_add_symlink('../Y', 'A/D/G/Z')
+
+ # Replace a symlink to {file, exec, dir} with a normal item of the
+ # same kind via Subversion replacement.
+ sbox.simple_rm('A/D/H/chi',
+ 'A/D/H/psi.sh',
+ #'A/D/H/Z',
+ )
+ sbox.simple_add_symlink('../gamma', 'A/D/H/chi')
+ sbox.simple_add_symlink('../gamma.sh', 'A/D/H/psi.sh')
+ #sbox.simple_add_symlink('../Y', 'A/D/H/Z')
+
+ # Replace a normal {file, exec} with a symlink to {exec, file} via
+ # Subversion replacement.
+ sbox.simple_rm('A/mu',
+ 'A/mu.sh')
+ sbox.simple_add_symlink('../iota2', 'A/mu')
+ sbox.simple_add_symlink('../iota', 'A/mu.sh')
+
+ # Ditto, without the Subversion replacement. Failing git-svn test
+ # 'executable file becomes a symlink to bar/zzz (file)'.
+ if svntest.main.is_posix_os():
+ os.remove(wc('Ax/mu'))
+ os.remove(wc('Ax/mu.sh'))
+ os.symlink('../iota2', wc('Ax/mu'))
+ os.symlink('../iota', wc('Ax/mu.sh'))
+ else:
+ # At least modify the file a bit
+
+ # ### Somehow this breaks the test when using multiline data?
+ # ### Is that intended behavior?
+
+ file_write(sbox.ospath('Ax/mu'), 'Link to iota2')
+ file_write(sbox.ospath('Ax/mu.sh'), 'Link to iota')
+
+ sbox.simple_propset('svn:special', 'X',
+ 'Ax/mu',
+ 'Ax/mu.sh')
+ sbox.simple_propdel('svn:executable', 'Ax/mu.sh')
+
+ ### TODO Replace a normal {file, exec, dir, dir} with a symlink to
+ ### {dir, dir, file, exec}. And the same symlink-to-normal.
+
+ expected_status.tweak('A/D/G/pi',
+ 'A/D/G/rho.sh',
+ 'A/D/H/psi.sh',
+ 'A/D/H/chi',
+ 'A/mu',
+ 'A/mu.sh',
+ status='RM')
+ expected_status.tweak('A/B/E/beta.sh',
+ 'A/B/E/alpha',
+ status=' M')
+ expected_status.tweak('Ax/mu',
+ 'Ax/mu.sh',
+ status='MM')
+ expected_status.add({
+ 'A/B/E/sym-alpha' : Item(status='A ', wc_rev=0),
+ 'A/B/E/sym-beta.sh' : Item(status='A ', wc_rev=0),
+ })
+ svntest.actions.run_and_verify_status(sbox.wc_dir, expected_status)
+
+ sbox.simple_commit() # r3
+ sbox.simple_update()
+
+ expected_status.tweak(status=' ', wc_rev=3)
+ expected_status_r3 = expected_status
+ svntest.actions.run_and_verify_status(sbox.wc_dir, expected_status_r3)
+
+ # Try updating from HEAD-1 to HEAD. This is currently XFAIL as the
+ # update to HEAD-1 produces a tree conflict.
+ run_svn(None, 'up', '-r2', sbox.wc_dir)
+ svntest.actions.run_and_verify_status(sbox.wc_dir, expected_status_r2)
+ sbox.simple_update()
+ svntest.actions.run_and_verify_status(sbox.wc_dir, expected_status_r3)
+
+
@Issue(4102)
@SkipUnless(svntest.main.is_posix_os)
def externals_as_symlink_targets(sbox):
@@ -935,7 +1097,129 @@ def externals_as_symlink_targets(sbox):
sbox.simple_add('sym_ext_E')
sbox.simple_commit()
-
+
+#----------------------------------------------------------------------
+@XFail()
+@Issue(4119)
+def cat_added_symlink(sbox):
+ "cat added symlink"
+
+ sbox.build(read_only = True)
+
+ kappa_path = sbox.ospath('kappa')
+ sbox.simple_add_symlink('iota', 'kappa')
+ svntest.actions.run_and_verify_svn(None, "link iota", [],
+ "cat", kappa_path)
+
+#----------------------------------------------------------------------
+def incoming_symlink_changes(sbox):
+ "verify incoming symlink change behavior"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ sbox.simple_add_symlink('iota', 's-replace')
+ sbox.simple_add_symlink('iota', 's-in-place')
+ sbox.simple_add_symlink('iota', 's-type')
+ sbox.simple_append('s-reverse', 'link iota')
+ sbox.simple_add('s-reverse')
+ sbox.simple_commit() # r2
+
+ # Replace s-replace
+ sbox.simple_rm('s-replace')
+ # Note that we don't use 'A/mu' as the length of that matches 'iota', which
+ # would make us depend on timestamp changes for detecting differences.
+ sbox.simple_add_symlink('A/D/G/pi', 's-replace')
+
+ # Change target of s-in-place
+ if svntest.main.is_posix_os():
+ os.remove(sbox.ospath('s-in-place'))
+ os.symlink('A/D/G/pi', sbox.ospath('s-in-place'))
+ else:
+ sbox.simple_append('s-in-place', 'link A/D/G/pi', truncate = True)
+
+ # r3
+ expected_output = svntest.wc.State(wc_dir, {
+ 's-replace' : Item(verb='Replacing'),
+ 's-in-place' : Item(verb='Sending'),
+ })
+ svntest.actions.run_and_verify_commit(wc_dir,
+ expected_output, None, None,
+ wc_dir)
+
+ # r4
+ svntest.main.run_svnmucc('propdel', 'svn:special',
+ sbox.repo_url + '/s-type',
+ '-m', 'Turn s-type into a file')
+
+ # r5
+ svntest.main.run_svnmucc('propset', 'svn:special', 'X',
+ sbox.repo_url + '/s-reverse',
+ '-m', 'Turn s-reverse into a symlink')
+
+ # Currently we expect to see 'U'pdates, but we would like to see
+ # replacements
+ expected_output = svntest.wc.State(wc_dir, {
+ 's-reverse' : Item(status=' U'),
+ 's-type' : Item(status=' U'),
+ })
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 5)
+ expected_status.add({
+ 's-type' : Item(status=' ', wc_rev='5'),
+ 's-replace' : Item(status=' ', wc_rev='5'),
+ 's-reverse' : Item(status=' ', wc_rev='5'),
+ 's-in-place' : Item(status=' ', wc_rev='5'),
+ })
+
+ # Update to HEAD/r5 to fetch the r4 and r5 symlink changes
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ None,
+ expected_status,
+ None, None, None, None, None,
+ check_props=True)
+
+ # Update back to r2, to prepare some local changes
+ expected_output = svntest.wc.State(wc_dir, {
+ # s-replace is D + A
+ 's-replace' : Item(status='A ', prev_status='D '),
+ 's-in-place' : Item(status='U '),
+ 's-reverse' : Item(status=' U'),
+ 's-type' : Item(status=' U'),
+ })
+ expected_status.tweak(wc_rev=2)
+
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ None,
+ expected_status,
+ None, None, None, None, None,
+ True,
+ wc_dir, '-r', '2')
+
+ # Ok, now add a property on all of them to make future symlinkness changes
+ # a tree conflict
+ # ### We should also try this with a 'textual change'
+ sbox.simple_propset('x', 'y', 's-replace', 's-in-place', 's-reverse', 's-type')
+
+ expected_output = svntest.wc.State(wc_dir, {
+ 's-replace' : Item(prev_status = ' ', prev_treeconflict='C',
+ status=' ', treeconflict='A'),
+ 's-in-place' : Item(status='U '),
+ 's-reverse' : Item(status=' ', treeconflict='C'),
+ 's-type' : Item(status=' ', treeconflict='C'),
+ })
+ expected_status.tweak(wc_rev=5)
+ expected_status.tweak('s-replace', 's-reverse', 's-type', status='RM',
+ copied='+', treeconflict='C', wc_rev='-')
+ expected_status.tweak('s-in-place', status=' M')
+
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ None,
+ expected_status,
+ None, None, None, None, None,
+ True)
########################################################################
# Run the tests
@@ -964,7 +1248,10 @@ test_list = [ None,
symlink_to_wc_basic,
symlink_to_wc_svnversion,
update_symlink,
+ replace_symlinks,
externals_as_symlink_targets,
+ cat_added_symlink,
+ incoming_symlink_changes,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/stat_tests.py b/subversion/tests/cmdline/stat_tests.py
index 27094f7..6e706ef 100755
--- a/subversion/tests/cmdline/stat_tests.py
+++ b/subversion/tests/cmdline/stat_tests.py
@@ -29,6 +29,9 @@ import os
import re
import time
import datetime
+import logging
+
+logger = logging.getLogger()
# Our testing module
import svntest
@@ -80,8 +83,8 @@ def status_update_with_nested_adds(sbox):
svntest.actions.duplicate_dir(wc_dir, wc_backup)
# Create newdir and newfile
- newdir_path = os.path.join(wc_dir, 'newdir')
- newfile_path = os.path.join(wc_dir, 'newdir', 'newfile')
+ newdir_path = sbox.ospath('newdir')
+ newfile_path = sbox.ospath('newdir/newfile')
os.makedirs(newdir_path)
svntest.main.file_append(newfile_path, 'new text')
@@ -176,7 +179,6 @@ def status_type_change(sbox):
sbox.build(read_only = True)
wc_dir = sbox.wc_dir
- single_db = svntest.main.wc_is_singledb(wc_dir)
os.chdir(wc_dir)
@@ -186,8 +188,7 @@ def status_type_change(sbox):
os.rename('A', 'iota')
os.rename('was_iota', 'A')
- if single_db:
- expected_output = [
+ expected_output = [
'~ A\n',
'! A/mu\n',
'! A/B\n',
@@ -208,14 +209,9 @@ def status_type_change(sbox):
'! A/D/H/omega\n',
'! A/D/H/psi\n',
'~ iota\n',
- ]
+ ]
- expected_output = [s.replace('/', os.path.sep) for s in expected_output]
- else:
- expected_output = [
- '~ A\n',
- '~ iota\n',
- ]
+ expected_output = [s.replace('/', os.path.sep) for s in expected_output]
svntest.actions.run_and_verify_svn(None, UnorderedOutput(expected_output),
[], 'status')
@@ -225,10 +221,9 @@ def status_type_change(sbox):
os.remove('A')
os.mkdir('A')
- if single_db:
- # A is a directory again, so it is no longer missing, but it's
- # descendants are
- expected_output = [
+ # A is a directory again, so it is no longer missing, but it's
+ # descendants are
+ expected_output = [
'! A/mu\n',
'! A/B\n',
'! A/B/lambda\n',
@@ -248,15 +243,9 @@ def status_type_change(sbox):
'! A/D/H/omega\n',
'! A/D/H/psi\n',
'~ iota\n',
- ]
- # Fix separator for Windows
- expected_output = [s.replace('/', os.path.sep) for s in expected_output]
- else:
- # A misses its administrative area, so it is missing
- expected_output = [
- '~ A\n',
- '~ iota\n',
- ]
+ ]
+ # Fix separator for Windows
+ expected_output = [s.replace('/', os.path.sep) for s in expected_output]
svntest.actions.run_and_verify_svn(None, UnorderedOutput(expected_output),
[], 'status')
@@ -266,14 +255,6 @@ def status_type_change(sbox):
svntest.main.safe_rmtree('iota')
os.mkdir('iota')
- if not svntest.main.wc_is_singledb('.'):
- # A misses its administrative area, so it is still missing and
- # iota is still obstructed
- expected_output = [
- '~ A\n',
- '~ iota\n',
- ]
-
svntest.actions.run_and_verify_svn(None, UnorderedOutput(expected_output),
[], 'status')
@@ -284,7 +265,6 @@ def status_type_change_to_symlink(sbox):
sbox.build(read_only = True)
wc_dir = sbox.wc_dir
- single_db = svntest.main.wc_is_singledb(wc_dir)
os.chdir(wc_dir)
@@ -294,8 +274,7 @@ def status_type_change_to_symlink(sbox):
svntest.main.safe_rmtree('A/D')
os.symlink('bar', 'A/D')
- if single_db:
- expected_output = [
+ expected_output = [
'~ A/D\n',
'! A/D/gamma\n',
'! A/D/G\n',
@@ -307,12 +286,7 @@ def status_type_change_to_symlink(sbox):
'! A/D/H/omega\n',
'! A/D/H/psi\n',
'~ iota\n',
- ]
- else:
- expected_output = [
- '~ A/D\n',
- '~ iota\n',
- ]
+ ]
svntest.actions.run_and_verify_svn(None, UnorderedOutput(expected_output),
[], 'status')
@@ -644,7 +618,7 @@ def get_last_changed_date(path):
for line in out:
if re.match("^Last Changed Date", line):
return line
- print("Didn't find Last Changed Date for " + path)
+ logger.warn("Didn't find Last Changed Date for %s", path)
raise svntest.Failure
# Helper for timestamp_behaviour test
@@ -655,8 +629,17 @@ def get_text_timestamp(path):
for line in out:
if re.match("^Text Last Updated", line):
return line
- print("Didn't find text-time for " + path)
- raise svntest.Failure
+ logger.warn("Didn't find text-time for %s", path)
+ raise svntest.Failure("didn't find text-time")
+
+def no_text_timestamp(path):
+ "ensure no text-time for path using svn info"
+ exit_code, out, err = svntest.actions.run_and_verify_svn(None, None, [],
+ 'info', path)
+ for line in out:
+ if re.match("^Text Last Updated", line):
+ logger.warn("Found text-time for %s", path)
+ raise svntest.Failure("found text-time")
# Helper for timestamp_behaviour test
def text_time_behaviour(wc_dir, wc_path, status_path, expected_status, cmd):
@@ -704,8 +687,8 @@ def timestamp_behaviour(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, 'A')
- iota_path = os.path.join(wc_dir, 'iota')
+ A_path = sbox.ospath('A')
+ iota_path = sbox.ospath('iota')
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
svntest.actions.run_and_verify_status(wc_dir, expected_status)
@@ -789,9 +772,9 @@ use-commit-times = yes
or fmt[23:25] != iota_ts[23:25]):
# NOTE: the two strings below won't *exactly* match (see just above),
# but the *numeric* portions of them should.
- print("File timestamp on 'iota' does not match.")
- print(" EXPECTED: %s" % iota_ts)
- print(" ACTUAL: %s" % fmt)
+ logger.warn("File timestamp on 'iota' does not match.")
+ logger.warn(" EXPECTED: %s", iota_ts)
+ logger.warn(" ACTUAL: %s", fmt)
raise svntest.Failure
#----------------------------------------------------------------------
@@ -811,12 +794,9 @@ def status_on_unversioned_dotdot(sbox):
os.mkdir(new_subsub)
os.chdir(new_subsub)
- exit_code, out, err = svntest.main.run_svn(1, 'st', '..')
- for line in err:
- if line.find('svn: warning: W155007: \'..\' is not a working copy') != -1:
- break
- else:
- raise svntest.Failure
+ svntest.actions.run_and_verify_svn2(None, None,
+ "svn: warning: W155(010|007):.*'.*'.*not",
+ 0, 'st', '..')
#----------------------------------------------------------------------
@@ -860,7 +840,7 @@ def status_on_partially_nonrecursive_wc(sbox):
D_url = top_url + '/A/D'
G_url = top_url + '/A/D/G'
H_url = top_url + '/A/D/H'
- rho = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
+ rho = sbox.ospath('A/D/G/rho')
# Commit a change to A/D/G/rho. This will be our equivalent of
# whatever change it was that happened between r213 and HEAD in the
@@ -887,7 +867,7 @@ def missing_dir_in_anchor(sbox):
sbox.build(read_only = True)
wc_dir = sbox.wc_dir
- foo_path = os.path.join(wc_dir, 'foo')
+ foo_path = sbox.ospath('foo')
svntest.actions.run_and_verify_svn(None, None, [], 'mkdir', foo_path)
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.add({
@@ -936,7 +916,7 @@ def status_in_xml(sbox):
'cp', '-m', 'repo-to-repo copy',
sbox.repo_url + '/iota',
sbox.repo_url + '/iota2')
-
+
file_path = sbox.ospath('iota2')
expected_entries = {file_path : {'wcprops' : 'none',
@@ -968,7 +948,7 @@ def status_ignored_dir(sbox):
"status on ignored directory"
sbox.build()
wc_dir = sbox.wc_dir
- new_dir = os.path.join(wc_dir, "dir.o")
+ new_dir = sbox.ospath('dir.o')
new_dir_url = sbox.repo_url + "/dir.o"
svntest.actions.run_and_verify_svn("Create dir", "\n|Committed revision 2.", [],
@@ -986,15 +966,19 @@ def status_ignored_dir(sbox):
#----------------------------------------------------------------------
-@Issue(2030)
-def status_unversioned_dir(sbox):
- "status on unversioned dir"
+def status_unversioned_dir_in_wc(sbox):
+ "status on unversioned dir in working copy"
sbox.build(read_only = True)
- dir = sbox.repo_dir
- expected_err = "svn: warning: W155007: '.*(/|\\\\)" + os.path.basename(dir) + \
- "' is not a working copy"
+
+ # Create two unversioned directories within the test working copy
+ path = sbox.ospath('1/2')
+ os.makedirs(path)
+
+ expected_err = "svn: warning: (W155007|W155010): .*'.*(/|\\\\)" + \
+ os.path.basename(path) + \
+ "' was not found"
svntest.actions.run_and_verify_svn2(None, [], expected_err, 0,
- "status", dir, dir)
+ "status", path)
#----------------------------------------------------------------------
@@ -1002,58 +986,45 @@ def status_missing_dir(sbox):
"status with a versioned directory missing"
sbox.build(read_only = True)
wc_dir = sbox.wc_dir
- a_d_g = os.path.join(wc_dir, "A", "D", "G")
+ a_d_g = sbox.ospath('A/D/G')
# ok, blow away the A/D/G directory
svntest.main.safe_rmtree(a_d_g)
- if svntest.main.wc_is_singledb(wc_dir):
- expected = [
+ expected = [
'! A/D/G\n',
'! A/D/G/rho\n',
'! A/D/G/pi\n',
'! A/D/G/tau\n',
- ]
- expected = [ s.replace('A/D/G', a_d_g).replace('/', os.path.sep)
- for s in expected ]
- else:
- expected = ["! " + a_d_g + "\n"]
+ ]
+ expected = [ s.replace('A/D/G', a_d_g).replace('/', os.path.sep)
+ for s in expected ]
svntest.actions.run_and_verify_svn(None, UnorderedOutput(expected), [],
"status", wc_dir)
- if svntest.main.wc_is_singledb(wc_dir):
- expected = [
+ expected = [
"! 1 " + a_d_g + "\n",
"! 1 " + os.path.join(a_d_g, "rho") + "\n",
"! 1 " + os.path.join(a_d_g, "pi") + "\n",
"! 1 " + os.path.join(a_d_g, "tau") + "\n",
- "Status against revision: 1\n" ]
- else:
- expected = [
- " * " + os.path.join(a_d_g, "pi") + "\n",
- " * " + os.path.join(a_d_g, "rho") + "\n",
- " * " + os.path.join(a_d_g, "tau") + "\n",
- "! * ? " + a_d_g + "\n",
- " * 1 " + os.path.join(wc_dir, "A", "D") + "\n",
- "Status against revision: 1\n" ]
+ "Status against revision: 1\n"
+ ]
# now run status -u, we should be able to do this without crashing
svntest.actions.run_and_verify_svn(None, UnorderedOutput(expected), [],
"status", "-u", wc_dir)
# Finally run an explicit status request directly on the missing directory.
- if svntest.main.wc_is_singledb(wc_dir):
- expected = [
+ expected = [
"! A/D/G\n",
"! A/D/G/rho\n",
"! A/D/G/pi\n",
"! A/D/G/tau\n",
]
- expected = [ s.replace('A/D/G', a_d_g).replace('/', os.path.sep)
- for s in expected ]
- else:
- expected = ["! " + a_d_g + "\n"]
+ expected = [ s.replace('A/D/G', a_d_g).replace('/', os.path.sep)
+ for s in expected ]
+
svntest.actions.run_and_verify_svn(None, UnorderedOutput(expected), [],
"status", a_d_g)
@@ -1074,7 +1045,7 @@ def status_add_plus_conflict(sbox):
svntest.actions.run_and_verify_svn(None, None, [],
'update', wc_dir)
- branch_file = os.path.join(wc_dir, 'branch', 'file')
+ branch_file = sbox.ospath('branch/file')
svntest.main.file_write(branch_file, "line 1\nline2\nline3\n", 'wb+')
@@ -1096,7 +1067,7 @@ def status_add_plus_conflict(sbox):
'commit',
branch_file, '-m', 'rev 5')
- trunk_dir = os.path.join(wc_dir, 'trunk')
+ trunk_dir = sbox.ospath('trunk')
svntest.actions.run_and_verify_svn(None, None, [],
'merge',
@@ -1107,15 +1078,13 @@ def status_add_plus_conflict(sbox):
branch_url, '-r', '4:5', trunk_dir)
lines = [
- "? " + os.path.join(wc_dir, "trunk", "file.merge-left.r4") + "\n",
- "? " + os.path.join(wc_dir, "trunk", "file.merge-right.r5") + "\n",
- "? " + os.path.join(wc_dir, "trunk", "file.working") + "\n",
- "C + " + os.path.join(wc_dir, "trunk", "file") + "\n",
- "Summary of conflicts:\n",
- " Text conflicts: 1\n",
- ]
+ "? " + sbox.ospath('trunk/file.merge-left.r4') + "\n",
+ "? " + sbox.ospath('trunk/file.merge-right.r5') + "\n",
+ "? " + sbox.ospath('trunk/file.working') + "\n",
+ "C + " + sbox.ospath('trunk/file') + "\n",
+ ] + svntest.main.summary_of_conflicts(text_conflicts=1)
if svntest.main.server_has_mergeinfo():
- lines.append(" M " + os.path.join(wc_dir, "trunk") + "\n")
+ lines.append(" M " + sbox.ospath('trunk') + "\n")
expected_output = svntest.verify.UnorderedOutput(lines)
@@ -1129,7 +1098,7 @@ def inconsistent_eol(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, "iota")
+ iota_path = sbox.ospath('iota')
svntest.main.file_write(iota_path, "line 1\nline 2\n", "wb")
@@ -1137,7 +1106,7 @@ def inconsistent_eol(sbox):
"property 'svn:eol-style' set on.*iota",
[],
'propset', 'svn:eol-style', 'native',
- os.path.join(wc_dir, 'iota'))
+ sbox.ospath('iota'))
expected_output = svntest.wc.State(wc_dir, {
'iota' : Item(verb='Sending'),
@@ -1161,7 +1130,7 @@ def status_update_with_incoming_props(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, 'A')
+ A_path = sbox.ospath('A')
# Add a property to the root folder and a subdir
svntest.main.run_svn(None, 'propset', 'red', 'rojo', wc_dir)
@@ -1214,7 +1183,7 @@ def status_update_with_incoming_props(sbox):
expected = svntest.verify.UnorderedOutput(
[" 1 1 jrandom " +
- os.path.join(wc_dir, "iota") + "\n",
+ sbox.ospath('iota') + "\n",
" * 1 1 jrandom " + A_path + "\n",
" * 1 1 jrandom " + wc_dir + "\n",
"Status against revision: 2\n" ])
@@ -1260,7 +1229,7 @@ def status_update_verbose_with_incoming_props(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, 'A')
+ A_path = sbox.ospath('A')
D_path = os.path.join(A_path, 'D')
B_path = os.path.join(A_path, 'B')
E_path = os.path.join(A_path, 'B', 'E')
@@ -1328,7 +1297,7 @@ def status_update_verbose_with_incoming_props(sbox):
" " + common + os.path.join(A_path, 'mu') + "\n",
" " + common + os.path.join(A_path, 'C') + "\n",
" " + common + A_path + "\n",
- " " + common + os.path.join(wc_dir, 'iota') + "\n",
+ " " + common + sbox.ospath('iota') + "\n",
" *" + common + wc_dir + "\n",
"Status against revision: 2\n" ])
@@ -1345,7 +1314,7 @@ def status_nonrecursive_update(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, 'A')
+ A_path = sbox.ospath('A')
D_path = os.path.join(A_path, 'D')
mu_path = os.path.join(A_path, 'mu')
gamma_path = os.path.join(D_path, 'gamma')
@@ -1384,7 +1353,7 @@ def status_nonrecursive_update(sbox):
'-r', '1', wc_dir)
# Check the remote status of folder A (non-recursively)
- xout = [" * 1 " + os.path.join(wc_dir, "A", "mu") + "\n",
+ xout = [" * 1 " + sbox.ospath('A/mu') + "\n",
"Status against revision: 2\n" ]
svntest.actions.run_and_verify_svn(None,
@@ -1429,7 +1398,7 @@ def status_depth_local(sbox):
sbox.build(read_only = True)
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, 'A')
+ A_path = sbox.ospath('A')
D_path = os.path.join(A_path, 'D')
mu_path = os.path.join(A_path, 'mu')
@@ -1437,8 +1406,8 @@ def status_depth_local(sbox):
# make some changes to the greek tree
change_files(wc_dir, ['A/mu', 'A/D/gamma'])
- svntest.main.run_svn(None, 'propset', 'svn:test', 'value', A_path)
- svntest.main.run_svn(None, 'propset', 'svn:test', 'value', D_path)
+ svntest.main.run_svn(None, 'propset', '--force', 'svn:test', 'value', A_path)
+ svntest.main.run_svn(None, 'propset', '--force', 'svn:test', 'value', D_path)
# for all the possible types of depth, check the status
@@ -1488,7 +1457,7 @@ def status_depth_update(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, 'A')
+ A_path = sbox.ospath('A')
D_path = os.path.join(A_path, 'D')
mu_path = os.path.join(A_path, 'mu')
@@ -1497,8 +1466,8 @@ def status_depth_update(sbox):
# add some files, change directory properties
change_files_and_commit(wc_dir, ['A/mu', 'A/D/gamma'])
svntest.main.run_svn(None, 'up', wc_dir)
- svntest.main.run_svn(None, 'propset', 'svn:test', 'value', A_path)
- svntest.main.run_svn(None, 'propset', 'svn:test', 'value', D_path)
+ svntest.main.run_svn(None, 'propset', '--force', 'svn:test', 'value', A_path)
+ svntest.main.run_svn(None, 'propset', '--force', 'svn:test', 'value', D_path)
svntest.main.run_svn(None, 'ci', '-m', 'log message', wc_dir)
# update to r1
@@ -1559,7 +1528,7 @@ def status_depth_update(sbox):
#----------------------------------------------------------------------
def status_depth_update_local_modifications(sbox):
"run 'status --depth=X -u' with local changes"
-
+
sbox.build()
wc_dir = sbox.wc_dir
A_path = sbox.ospath('A')
@@ -1568,8 +1537,8 @@ def status_depth_update_local_modifications(sbox):
mu_path = os.path.join(A_path, 'mu')
gamma_path = os.path.join(D_path, 'gamma')
- svntest.main.run_svn(None, 'propset', 'svn:test', 'value', A_path)
- svntest.main.run_svn(None, 'propset', 'svn:test', 'value', D_path)
+ svntest.main.run_svn(None, 'propset', '--force', 'svn:test', 'value', A_path)
+ svntest.main.run_svn(None, 'propset', '--force', 'svn:test', 'value', D_path)
svntest.main.file_append(mu_path, 'modified')
svntest.main.file_append(gamma_path, 'modified')
@@ -1640,7 +1609,7 @@ def status_dash_u_deleted_directories(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, 'A')
+ A_path = sbox.ospath('A')
B_path = os.path.join(A_path, 'B')
# delete the B directory
@@ -1727,8 +1696,7 @@ def status_dash_u_type_change(sbox):
svntest.main.safe_rmtree('A')
os.mkdir('A')
- if svntest.main.wc_is_singledb('.'):
- output =[
+ output = [
"! 1 A/mu\n",
"! 1 A/B\n",
"! 1 A/B/lambda\n",
@@ -1749,16 +1717,11 @@ def status_dash_u_type_change(sbox):
"! 1 A/D/H/psi\n",
"~ 1 iota\n",
"Status against revision: 1\n"
- ]
+ ]
- expected = svntest.verify.UnorderedOutput(
+ expected = svntest.verify.UnorderedOutput(
[s.replace('/', os.path.sep)
for s in output])
- else:
- expected = svntest.verify.UnorderedOutput(
- ["~ 1 iota\n",
- "~ ? A\n",
- "Status against revision: 1\n" ])
svntest.actions.run_and_verify_svn(None,
expected,
@@ -1776,7 +1739,7 @@ def status_with_tree_conflicts(sbox):
svntest.actions.build_greek_tree_conflicts(sbox)
wc_dir = sbox.wc_dir
- G = os.path.join(wc_dir, 'A', 'D', 'G')
+ G = sbox.ospath('A/D/G')
pi = os.path.join(G, 'pi')
rho = os.path.join(G, 'rho')
tau = os.path.join(G, 'tau')
@@ -1784,14 +1747,12 @@ def status_with_tree_conflicts(sbox):
# check status of G
expected = svntest.verify.UnorderedOutput(
["A + C %s\n" % rho,
- " > local edit, incoming delete upon update\n",
+ " > local file edit, incoming file delete upon update\n",
"D C %s\n" % pi,
- " > local delete, incoming edit upon update\n",
+ " > local file delete, incoming file edit upon update\n",
"! C %s\n" % tau,
- " > local delete, incoming delete upon update\n",
- "Summary of conflicts:\n",
- " Tree conflicts: 3\n",
- ])
+ " > local file delete, incoming file delete upon update\n",
+ ] + svntest.main.summary_of_conflicts(tree_conflicts=3))
svntest.actions.run_and_verify_svn(None,
expected,
@@ -1802,15 +1763,12 @@ def status_with_tree_conflicts(sbox):
expected = svntest.verify.UnorderedOutput(
[" 2 2 jrandom %s\n" % G,
"D C 2 2 jrandom %s\n" % pi,
- " > local delete, incoming edit upon update\n",
+ " > local file delete, incoming file edit upon update\n",
"A + C - 1 jrandom %s\n" % rho,
- " > local edit, incoming delete upon update\n",
+ " > local file edit, incoming file delete upon update\n",
"! C %s\n" % tau,
- " > local delete, incoming delete upon update\n",
- "Summary of conflicts:\n",
- " Tree conflicts: 3\n",
- ])
-
+ " > local file delete, incoming file delete upon update\n",
+ ] + svntest.main.summary_of_conflicts(tree_conflicts=3))
svntest.actions.run_and_verify_svn(None,
expected,
@@ -1842,18 +1800,19 @@ def status_with_tree_conflicts(sbox):
# check if the path should be a victim
m = re.search('tree-conflicted="true"', entry)
if (m is None) and should_be_victim[path]:
- print("ERROR: expected '%s' to be a tree conflict victim." % path)
- print("ACTUAL STATUS OUTPUT:")
- print(output_str)
+ logger.warn("ERROR: expected '%s' to be a tree conflict victim.", path)
+ logger.warn("ACTUAL STATUS OUTPUT:")
+ logger.warn(output_str)
raise svntest.Failure
if m and not should_be_victim[path]:
- print("ERROR: did NOT expect '%s' to be a tree conflict victim." % path)
- print("ACTUAL STATUS OUTPUT:")
- print(output_str)
+ logger.warn("ERROR: did NOT expect '%s' to be a tree conflict victim.",
+ path)
+ logger.warn("ACTUAL STATUS OUTPUT:")
+ logger.warn(output_str)
raise svntest.Failure
if real_entry_count != len(should_be_victim):
- print("ERROR: 'status --xml' output is incomplete.")
+ logger.warn("ERROR: 'status --xml' output is incomplete.")
raise svntest.Failure
@@ -1865,21 +1824,13 @@ def status_nested_wc_old_format(sbox):
sbox.build(read_only = True)
wc_dir = sbox.wc_dir
- os.mkdir(os.path.join(wc_dir, 'subdir'))
- os.mkdir(os.path.join(wc_dir, 'subdir', '.svn'))
- svntest.main.file_append(os.path.join(wc_dir, 'subdir', '.svn', 'format'),
+ os.mkdir(sbox.ospath('subdir'))
+ os.mkdir(sbox.ospath('subdir/.svn'))
+ svntest.main.file_append(sbox.ospath('subdir/.svn/format'),
'10\n') # format 10 was the Subversion 1.6 format
os.chdir(wc_dir)
svntest.actions.run_and_verify_svn(None, [ "? subdir\n" ], [], 'st')
-########################################################################
-# Run the tests
-
-
-def simple_lock(sbox, relpath):
- path = os.path.join(sbox.wc_dir, relpath)
- svntest.actions.run_and_verify_svn(None, None, [], 'lock', path)
-
#----------------------------------------------------------------------
# Regression test for issue #3855 "status doesn't show 'K' on a locked
# deleted node".
@@ -1888,10 +1839,11 @@ def status_locked_deleted(sbox):
"status with locked deleted file"
sbox.build()
- iota_path = os.path.join(sbox.wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
sbox.simple_rm('iota')
- simple_lock(sbox, 'iota')
+ svntest.actions.run_and_verify_svn(None, None, [], 'lock',
+ os.path.join(sbox.wc_dir, 'iota'))
svntest.actions.run_and_verify_svn(None, ['D K %s\n' % iota_path], [],
'status', iota_path)
@@ -1980,6 +1932,32 @@ def wclock_status(sbox):
svntest.actions.run_and_verify_svn(None, expected_output, [],
'status', wc_dir)
+
+@Issue(4072)
+@XFail()
+def modified_modulo_translation(sbox):
+ "modified before translation, unmodified after"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # iota is a shell script.
+ sbox.simple_propset('svn:eol-style', 'LF', 'iota')
+ sbox.simple_commit()
+
+ # CRLF it.
+ open(sbox.ospath('iota'), 'wb').write("This is the file 'iota'.\r\n")
+
+ # Run status. Expect some output.
+ # TODO: decide how such files should show in the output; whether they
+ # always show, or only with some --flag; and adjust this accordingly.
+ svntest.actions.run_and_verify_svn(None, svntest.verify.AnyOutput, [],
+ 'status', wc_dir)
+
+ # Expect the file to be renormalized (to LF) after a revert.
+ sbox.simple_revert('iota')
+ svntest.actions.run_and_verify_svn(None, [], [], 'status', wc_dir)
+
def status_not_present(sbox):
"no status on not-present and excluded nodes"
@@ -1991,7 +1969,7 @@ def status_not_present(sbox):
svntest.main.run_svn(None, 'up', '--set-depth', 'exclude',
sbox.ospath('A/mu'), sbox.ospath('A/B'))
sbox.simple_commit()
-
+
svntest.actions.run_and_verify_svn(None, [], [],'status',
sbox.ospath('iota'),
sbox.ospath('A/B'),
@@ -1999,6 +1977,237 @@ def status_not_present(sbox):
sbox.ospath('A/mu'),
sbox.ospath('no-file'))
+# Skip this test is a .svn dir exists in the root directory
+@Skip(lambda: os.path.exists("/%s" % svntest.main.get_admin_name()))
+def status_unversioned_dir(sbox):
+ "status on unversioned dir"
+ sbox.build(read_only = True, create_wc = False)
+
+ # Run svn status on "/", which we assume exists and isn't a WC.
+ # This should work on UNIX-like systems and Windows systems
+ expected_err = "svn: warning: W1550(07|10): .*'.*(/|\\\\)" + \
+ "' is not a working copy"
+ svntest.actions.run_and_verify_svn2(None, [], expected_err, 0,
+ "status", "/")
+
+def status_case_changed(sbox):
+ "status reporting on case changed nodes directly"
+
+ sbox.build(read_only = True)
+ wc_dir = sbox.wc_dir
+
+ os.rename(sbox.ospath('iota'), sbox.ospath('iOTA'))
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.add({
+ 'iOTA' : Item(status='? '),
+ })
+ expected_status.tweak('iota', status='! ')
+
+ # First run status on the directory
+ svntest.actions.run_and_verify_unquiet_status(wc_dir,
+ expected_status)
+
+ # Now on the missing iota directly, which should give the same
+ # result, even on case insenstive filesystems
+ expected_status = svntest.wc.State(wc_dir, {
+ 'iota' : Item(status='! ', wc_rev=1),
+ })
+ svntest.actions.run_and_verify_unquiet_status(sbox.ospath('iota'),
+ expected_status)
+
+ # And on the unversioned iOTA
+ expected_status = svntest.wc.State(wc_dir, {
+ 'iOTA' : Item(status='? '),
+ })
+ svntest.actions.run_and_verify_unquiet_status(sbox.ospath('iOTA'),
+ expected_status)
+
+
+def move_update_timestamps(sbox):
+ "timestamp behaviour for move-update"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ sbox.simple_append('A/B/E/beta', 'X\nY\nZ\n', truncate=True)
+ sbox.simple_commit()
+ sbox.simple_append('A/B/E/alpha', 'modified alpha')
+ sbox.simple_append('A/B/E/beta', 'XX\nY\nZ\n', truncate=True)
+ sbox.simple_commit()
+ sbox.simple_update('', 2)
+
+ sbox.simple_append('A/B/E/beta', 'local beta')
+ src_time = get_text_timestamp(sbox.ospath('A/B/E/alpha'))
+ sbox.simple_move("A/B/E", "A/B/E2")
+ alpha_dst_time = get_text_timestamp(sbox.ospath('A/B/E2/alpha'))
+ beta_dst_time = get_text_timestamp(sbox.ospath('A/B/E2/beta'))
+ if src_time != alpha_dst_time:
+ raise svntest.Failure("move failed to copy timestamp")
+
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/B/E' : Item(status=' ', treeconflict='C'),
+ 'A/B/E/alpha' : Item(status=' ', treeconflict='U'),
+ 'A/B/E/beta' : Item(status=' ', treeconflict='U'),
+ })
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 3)
+ expected_status.tweak('A/B/E',
+ status='D ', treeconflict='C', moved_to='A/B/E2')
+ expected_status.tweak('A/B/E/alpha', 'A/B/E/beta', status='D ')
+ expected_status.add({
+ 'A/B/E2' : Item(status='A ', wc_rev='-', copied='+',
+ moved_from='A/B/E'),
+ 'A/B/E2/alpha' : Item(status=' ', wc_rev='-', copied='+'),
+ 'A/B/E2/beta' : Item(status='M ', wc_rev='-', copied='+'),
+ })
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.remove('A/B/E', 'A/B/E/alpha', 'A/B/E/beta')
+ expected_disk.add({
+ 'A/B/E2' : Item(),
+ 'A/B/E2/alpha' : Item("This is the file 'alpha'.\n"),
+ 'A/B/E2/beta' : Item("X\nY\nZ\nlocal beta"),
+ })
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status)
+
+ time.sleep(1.1)
+ svntest.actions.run_and_verify_svn("resolve failed", None, [],
+ 'resolve',
+ '--accept=mine-conflict',
+ sbox.ospath('A/B/E'))
+ expected_status.tweak('A/B/E', treeconflict=None)
+ expected_status.tweak('A/B/E2/beta', status='M ')
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+ expected_disk.tweak('A/B/E2/beta', contents="XX\nY\nZ\nlocal beta")
+ expected_disk.tweak('A/B/E2/alpha', contents="This is the file 'alpha'.\nmodified alpha")
+ svntest.actions.verify_disk(wc_dir, expected_disk)
+
+ # alpha is pristine so gets a new timestamp
+ new_time = get_text_timestamp(sbox.ospath('A/B/E2/alpha'))
+ if new_time == alpha_dst_time:
+ raise svntest.Failure("move failed to update timestamp")
+
+ # beta is modified so timestamp is removed
+ no_text_timestamp(sbox.ospath('A/B/E2/beta'))
+
+@Issue(4398)
+def status_path_handling(sbox):
+ "relative/absolute path handling"
+
+ sbox.build(read_only=True)
+
+ # target is a relative path to a subdir
+ wc_dir = sbox.wc_dir
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ # target is an absolute path to a subdir
+ cwd = os.getcwd()
+ abs_wc_dir = os.path.join(cwd, wc_dir)
+ expected_status = svntest.actions.get_virginal_state(abs_wc_dir, 1)
+ svntest.actions.run_and_verify_status(abs_wc_dir, expected_status)
+
+ # target is an absolute path to a parent dir
+ os.chdir(sbox.ospath('A/B'))
+ expected_status = svntest.actions.get_virginal_state(abs_wc_dir, 1)
+ svntest.actions.run_and_verify_status(abs_wc_dir, expected_status)
+
+ # target is a relative path to a parent dir
+ rel_wc_dir = os.path.join('..', '..')
+ expected_status = svntest.actions.get_virginal_state(rel_wc_dir, 1)
+ svntest.actions.run_and_verify_status(rel_wc_dir, expected_status)
+
+def status_move_missing_direct(sbox):
+ "move information when status is called directly"
+
+ sbox.build()
+ sbox.simple_copy('A', 'Z')
+ sbox.simple_commit('')
+ sbox.simple_update('')
+
+ sbox.simple_move('Z', 'ZZ')
+ sbox.simple_move('A', 'Z')
+ sbox.simple_move('Z/B', 'ZB')
+ sbox.simple_mkdir('Z/B')
+ sbox.simple_move('ZB/E', 'Z/B/E')
+
+ # Somehow 'svn status' now shows different output for 'ZB/E'
+ # when called directly and via an ancestor, as this handles
+ # multi-layer in a different way
+
+ # Note that the status output may change over different Subversion revisions,
+ # but the status on a node should be identical anyway 'svn status' is called
+ # on it.
+
+ expected_output = [
+ 'A + %s\n' % sbox.ospath('ZB'),
+ ' > moved from %s\n' % os.path.join('..', 'Z', 'B'),
+ 'D + %s\n' % sbox.ospath('ZB/E'),
+ ' > moved to %s\n' % os.path.join('..', 'Z', 'B', 'E'),
+ ]
+ svntest.actions.run_and_verify_svn(None, expected_output, [], 'status',
+ sbox.ospath('ZB'), '--depth', 'immediates')
+
+ # And calling svn status on just 'ZB/E' should have the same result for this node
+ # except that we calculate the relative path from a different base
+ expected_output = [
+ 'D + %s\n' % sbox.ospath('ZB/E'),
+ ' > moved to %s\n' % os.path.join('..', '..', 'Z', 'B', 'E'),
+ ]
+ svntest.actions.run_and_verify_svn(None, expected_output, [], 'status',
+ sbox.ospath('ZB/E'), '--depth', 'empty')
+
+def status_move_missing_direct_base(sbox):
+ "move when status is called directly with base"
+
+ sbox.build()
+ sbox.simple_copy('A', 'Z')
+ sbox.simple_mkdir('Q')
+ sbox.simple_mkdir('Q/ZB')
+ sbox.simple_mkdir('Q/ZB/E')
+ sbox.simple_commit('')
+ sbox.simple_update('')
+
+ sbox.simple_rm('Q')
+ sbox.simple_mkdir('Q')
+
+ sbox.simple_move('Z', 'ZZ')
+ sbox.simple_move('A', 'Z')
+ sbox.simple_move('Z/B', 'Q/ZB')
+ sbox.simple_mkdir('Z/B')
+ sbox.simple_move('Q/ZB/E', 'Z/B/E')
+
+ # Somehow 'svn status' now shows different output for 'Q/ZB/E'
+ # when called directly and via an ancestor, as this handles
+ # multi-layer in a different way
+
+ # Note that the status output may change over different Subversion revisions,
+ # but the status on a node should be identical anyway 'svn status' is called
+ # on it.
+
+ # This test had a different result as status_move_missing_direct at the time of
+ # writing this test.
+
+ expected_output = [
+ 'A + %s\n' % sbox.ospath('Q/ZB'),
+ ' > moved from %s\n' % os.path.join('..', '..', 'Z', 'B'),
+ 'D + %s\n' % sbox.ospath('Q/ZB/E'),
+ ' > moved to %s\n' % os.path.join('..', '..', 'Z', 'B', 'E'),
+ ]
+ svntest.actions.run_and_verify_svn(None, expected_output, [], 'status',
+ sbox.ospath('Q/ZB'), '--depth', 'immediates')
+
+ # And calling svn status on just 'ZB/E' should have the same result for this node,
+ # except that the moved_to information is calculated from the node itself
+ expected_output = [
+ 'D + %s\n' % sbox.ospath('Q/ZB/E'),
+ ' > moved to %s\n' % os.path.join('..', '..', '..', 'Z', 'B', 'E'),
+ ]
+ svntest.actions.run_and_verify_svn(None, expected_output, [], 'status',
+ sbox.ospath('Q/ZB/E'), '--depth', 'empty')
+
########################################################################
# Run the tests
@@ -2023,7 +2232,7 @@ test_list = [ None,
missing_dir_in_anchor,
status_in_xml,
status_ignored_dir,
- status_unversioned_dir,
+ status_unversioned_dir_in_wc,
status_missing_dir,
status_nonrecursive_update_different_cwd,
status_add_plus_conflict,
@@ -2041,7 +2250,14 @@ test_list = [ None,
status_locked_deleted,
wc_wc_copy_timestamp,
wclock_status,
+ modified_modulo_translation,
status_not_present,
+ status_unversioned_dir,
+ status_case_changed,
+ move_update_timestamps,
+ status_path_handling,
+ status_move_missing_direct,
+ status_move_missing_direct_base,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/svnadmin_tests.py b/subversion/tests/cmdline/svnadmin_tests.py
index 5655a33..e32681d 100755
--- a/subversion/tests/cmdline/svnadmin_tests.py
+++ b/subversion/tests/cmdline/svnadmin_tests.py
@@ -26,14 +26,19 @@
# General modules
import os
+import re
import shutil
import sys
import threading
+import logging
+
+logger = logging.getLogger()
# Our testing module
import svntest
from svntest.verify import SVNExpectedStdout, SVNExpectedStderr
from svntest.verify import SVNUnexpectedStderr
+from svntest.verify import UnorderedOutput
from svntest.main import SVN_PROP_MERGEINFO
# (abbreviation)
@@ -45,6 +50,101 @@ Issue = svntest.testcase.Issue_deco
Wimp = svntest.testcase.Wimp_deco
Item = svntest.wc.StateItem
+def check_hotcopy_bdb(src, dst):
+ "Verify that the SRC BDB repository has been correctly copied to DST."
+ ### TODO: This function should be extended to verify all hotcopied files,
+ ### not just compare the output of 'svnadmin dump'. See check_hotcopy_fsfs().
+ exit_code, origout, origerr = svntest.main.run_svnadmin("dump", src,
+ '--quiet')
+ exit_code, backout, backerr = svntest.main.run_svnadmin("dump", dst,
+ '--quiet')
+ if origerr or backerr or origout != backout:
+ raise svntest.Failure
+
+def check_hotcopy_fsfs(src, dst):
+ "Verify that the SRC FSFS repository has been correctly copied to DST."
+ # Walk the source and compare all files to the destination
+ for src_dirpath, src_dirs, src_files in os.walk(src):
+ # Verify that the current directory exists in the destination
+ dst_dirpath = src_dirpath.replace(src, dst)
+ if not os.path.isdir(dst_dirpath):
+ raise svntest.Failure("%s does not exist in hotcopy "
+ "destination" % dst_dirpath)
+ # Verify that all dirents in the current directory also exist in source
+ for dst_dirent in os.listdir(dst_dirpath):
+ src_dirent = os.path.join(src_dirpath, dst_dirent)
+ if not os.path.exists(src_dirent):
+ raise svntest.Failure("%s does not exist in hotcopy "
+ "source" % src_dirent)
+ # Compare all files in this directory
+ for src_file in src_files:
+ # Exclude temporary files
+ if src_file == 'rev-prop-atomics.shm':
+ continue
+ if src_file == 'rev-prop-atomics.mutex':
+ continue
+
+ src_path = os.path.join(src_dirpath, src_file)
+ dst_path = os.path.join(dst_dirpath, src_file)
+ if not os.path.isfile(dst_path):
+ raise svntest.Failure("%s does not exist in hotcopy "
+ "destination" % dst_path)
+
+ # Special case for rep-cache: It will always differ in a byte-by-byte
+ # comparison, so compare db tables instead.
+ if src_file == 'rep-cache.db':
+ db1 = svntest.sqlite3.connect(src_path)
+ db2 = svntest.sqlite3.connect(dst_path)
+ rows1 = []
+ rows2 = []
+ for row in db1.execute("select * from rep_cache order by hash"):
+ rows1.append(row)
+ for row in db2.execute("select * from rep_cache order by hash"):
+ rows2.append(row)
+ if len(rows1) != len(rows2):
+ raise svntest.Failure("number of rows in rep-cache differs")
+ for i in range(len(rows1)):
+ if rows1[i] != rows2[i]:
+ raise svntest.Failure("rep-cache row %i differs: '%s' vs. '%s'"
+ % (row, rows1[i]))
+ continue
+
+ # Special case for revprop-generation: It will always be zero in
+ # the hotcopy destination (i.e. a fresh cache generation)
+ if src_file == 'revprop-generation':
+ f2 = open(dst_path, 'r')
+ revprop_gen = int(f2.read().strip())
+ if revprop_gen != 0:
+ raise svntest.Failure("Hotcopy destination has non-zero " +
+ "revprop generation")
+ continue
+
+ f1 = open(src_path, 'r')
+ f2 = open(dst_path, 'r')
+ while True:
+ offset = 0
+ BUFSIZE = 1024
+ buf1 = f1.read(BUFSIZE)
+ buf2 = f2.read(BUFSIZE)
+ if not buf1 or not buf2:
+ if not buf1 and not buf2:
+ # both at EOF
+ break
+ elif buf1:
+ raise svntest.Failure("%s differs at offset %i" %
+ (dst_path, offset))
+ elif buf2:
+ raise svntest.Failure("%s differs at offset %i" %
+ (dst_path, offset))
+ if len(buf1) != len(buf2):
+ raise svntest.Failure("%s differs in length" % dst_path)
+ for i in range(len(buf1)):
+ if buf1[i] != buf2[i]:
+ raise svntest.Failure("%s differs at offset %i"
+ % (dst_path, offset))
+ offset += 1
+ f1.close()
+ f2.close()
#----------------------------------------------------------------------
@@ -90,17 +190,18 @@ def get_txns(repo_dir):
return txns
def load_and_verify_dumpstream(sbox, expected_stdout, expected_stderr,
- revs, dump, *varargs):
- """Load the array of lines passed in 'dump' into the
- current tests' repository and verify the repository content
- using the array of wc.States passed in revs. VARARGS are optional
- arguments passed to the 'load' command"""
+ revs, check_props, dump, *varargs):
+ """Load the array of lines passed in DUMP into the current tests'
+ repository and verify the repository content using the array of
+ wc.States passed in REVS. If CHECK_PROPS is True, check properties
+ of each rev's items. VARARGS are optional arguments passed to the
+ 'load' command."""
if isinstance(dump, str):
dump = [ dump ]
exit_code, output, errput = svntest.main.run_command_stdin(
- svntest.main.svnadmin_binary, expected_stderr, 0, 1, dump,
+ svntest.main.svnadmin_binary, expected_stderr, 0, True, dump,
'load', '--quiet', sbox.repo_dir, *varargs)
if expected_stdout:
@@ -129,15 +230,13 @@ def load_and_verify_dumpstream(sbox, expected_stdout, expected_stderr,
"update", "-r%s" % (rev+1),
sbox.wc_dir)
- wc_tree = svntest.tree.build_tree_from_wc(sbox.wc_dir)
- rev_tree = revs[rev].old_tree()
-
- try:
- svntest.tree.compare_trees("rev/disk", rev_tree, wc_tree)
- except svntest.tree.SVNTreeError:
- svntest.verify.display_trees(None, 'WC TREE', wc_tree, rev_tree)
- raise
+ rev_tree = revs[rev]
+ svntest.actions.verify_disk(sbox.wc_dir, rev_tree, check_props)
+def load_dumpstream(sbox, dump, *varargs):
+ "Load dump text without verification."
+ return load_and_verify_dumpstream(sbox, None, None, None, False, dump,
+ *varargs)
######################################################################
# Tests
@@ -214,7 +313,7 @@ def extra_headers(sbox):
dumpfile[3:3] = \
[ "X-Comment-Header: Ignored header normally not in dump stream\n" ]
- load_and_verify_dumpstream(sbox,[],[], dumpfile_revisions, dumpfile,
+ load_and_verify_dumpstream(sbox,[],[], dumpfile_revisions, False, dumpfile,
'--ignore-uuid')
#----------------------------------------------------------------------
@@ -233,7 +332,7 @@ def extra_blockcontent(sbox):
# Insert the extra content after "PROPS-END\n"
dumpfile[11] = dumpfile[11][:-2] + "extra text\n\n\n"
- load_and_verify_dumpstream(sbox,[],[], dumpfile_revisions, dumpfile,
+ load_and_verify_dumpstream(sbox,[],[], dumpfile_revisions, False, dumpfile,
'--ignore-uuid')
#----------------------------------------------------------------------
@@ -247,7 +346,7 @@ def inconsistent_headers(sbox):
dumpfile[-2] = "Content-length: 30\n\n"
load_and_verify_dumpstream(sbox, [], svntest.verify.AnyOutput,
- dumpfile_revisions, dumpfile)
+ dumpfile_revisions, False, dumpfile)
#----------------------------------------------------------------------
# Test for issue #2729: Datestamp-less revisions in dump streams do
@@ -267,7 +366,7 @@ def empty_date(sbox):
"K 7\nsvn:log\nV 0\n\nK 10\nsvn:author\nV 4\nerik\nPROPS-END\n\n\n"
]
- load_and_verify_dumpstream(sbox,[],[], dumpfile_revisions, dumpfile,
+ load_and_verify_dumpstream(sbox,[],[], dumpfile_revisions, False, dumpfile,
'--ignore-uuid')
# Verify that the revision still lacks the svn:date property.
@@ -358,17 +457,16 @@ def hotcopy_dot(sbox):
os.chdir(cwd)
- exit_code, origout, origerr = svntest.main.run_svnadmin("dump",
- sbox.repo_dir,
- '--quiet')
- exit_code, backout, backerr = svntest.main.run_svnadmin("dump",
- backup_dir,
- '--quiet')
- if origerr or backerr or origout != backout:
- raise svntest.Failure
+ if svntest.main.is_fs_type_fsfs():
+ check_hotcopy_fsfs(sbox.repo_dir, backup_dir)
+ else:
+ check_hotcopy_bdb(sbox.repo_dir, backup_dir)
#----------------------------------------------------------------------
+# This test is redundant for FSFS. The hotcopy_dot and hotcopy_incremental
+# tests cover this check for FSFS already.
+@SkipUnless(svntest.main.is_fs_type_bdb)
def hotcopy_format(sbox):
"'svnadmin hotcopy' checking db/format file"
sbox.build()
@@ -378,7 +476,7 @@ def hotcopy_format(sbox):
sbox.repo_dir,
backup_dir)
if errput:
- print("Error: hotcopy failed")
+ logger.warn("Error: hotcopy failed")
raise svntest.Failure
# verify that the db/format files are the same
@@ -391,7 +489,7 @@ def hotcopy_format(sbox):
fp2.close()
if contents1 != contents2:
- print("Error: db/format file contents do not match after hotcopy")
+ logger.warn("Error: db/format file contents do not match after hotcopy")
raise svntest.Failure
#----------------------------------------------------------------------
@@ -408,7 +506,7 @@ def setrevprop(sbox):
"--bypass-hooks",
iota_path)
if errput:
- print("Error: 'setlog' failed")
+ logger.warn("Error: 'setlog' failed")
raise svntest.Failure
# Verify that the revprop value matches what we set when retrieved
@@ -427,7 +525,7 @@ def setrevprop(sbox):
"-r0", "svn:author",
foo_path)
if errput:
- print("Error: 'setrevprop' failed")
+ logger.warn("Error: 'setrevprop' failed")
raise svntest.Failure
# Verify that the revprop value matches what we set when retrieved
@@ -450,11 +548,22 @@ def verify_windows_paths_in_repos(sbox):
exit_code, output, errput = svntest.main.run_svnadmin("verify",
sbox.repo_dir)
- svntest.verify.compare_and_display_lines(
- "Error while running 'svnadmin verify'.",
- 'STDERR', ["* Verified revision 0.\n",
- "* Verified revision 1.\n",
- "* Verified revision 2.\n"], errput)
+
+ # unfortunately, FSFS needs to do more checks than BDB resulting in
+ # different progress output
+ if svntest.main.is_fs_type_fsfs():
+ svntest.verify.compare_and_display_lines(
+ "Error while running 'svnadmin verify'.",
+ 'STDERR', ["* Verifying repository metadata ...\n",
+ "* Verified revision 0.\n",
+ "* Verified revision 1.\n",
+ "* Verified revision 2.\n"], errput)
+ else:
+ svntest.verify.compare_and_display_lines(
+ "Error while running 'svnadmin verify'.",
+ 'STDERR', ["* Verified revision 0.\n",
+ "* Verified revision 1.\n",
+ "* Verified revision 2.\n"], errput)
#----------------------------------------------------------------------
@@ -614,29 +723,34 @@ _0.0.t1-1 add false false /A/B/E/bravo
svntest.verify.verify_outputs(
message=None, actual_stdout=output, actual_stderr=errput,
expected_stdout=None,
- expected_stderr=".*Found malformed header '[^']*' in revision file")
+ expected_stderr=".*Found malformed header '[^']*' in revision file"
+ "|.*Missing id field in node-rev.*")
#----------------------------------------------------------------------
-@SkipUnless(svntest.main.is_fs_type_fsfs)
-def recover_fsfs(sbox):
- "recover a repository (FSFS only)"
- sbox.build()
+# Helper for two test functions.
+def corrupt_and_recover_db_current(sbox, minor_version=None):
+ """Build up a MINOR_VERSION sandbox and test different recovery scenarios
+ with missing, out-of-date or even corrupt db/current files. Recovery should
+ behave the same way with all values of MINOR_VERSION, hence this helper
+ containing the common code that allows us to check it."""
+
+ sbox.build(minor_version=minor_version)
current_path = os.path.join(sbox.repo_dir, 'db', 'current')
# Commit up to r3, so we can test various recovery scenarios.
svntest.main.file_append(os.path.join(sbox.wc_dir, 'iota'), 'newer line\n')
- svntest.main.run_svn(None, 'ci', sbox.wc_dir, '--quiet', '-m', 'log msg')
+ sbox.simple_commit(message='log msg')
svntest.main.file_append(os.path.join(sbox.wc_dir, 'iota'), 'newest line\n')
- svntest.main.run_svn(None, 'ci', sbox.wc_dir, '--quiet', '-m', 'log msg')
+ sbox.simple_commit(message='log msg')
# Remember the contents of the db/current file.
expected_current_contents = open(current_path).read()
# Move aside the current file for r3.
os.rename(os.path.join(sbox.repo_dir, 'db','current'),
- os.path.join(sbox.repo_dir, 'db','was_current'));
+ os.path.join(sbox.repo_dir, 'db','was_current'))
# Run 'svnadmin recover' and check that the current file is recreated.
exit_code, output, errput = svntest.main.run_svnadmin("recover",
@@ -696,6 +810,24 @@ def recover_fsfs(sbox):
"Contents of db/current is unexpected.",
'db/current', expected_current_contents, actual_current_contents)
+
+@SkipUnless(svntest.main.is_fs_type_fsfs)
+def fsfs_recover_db_current(sbox):
+ "fsfs recover db/current"
+ corrupt_and_recover_db_current(sbox)
+
+
+@SkipUnless(svntest.main.is_fs_type_fsfs)
+def fsfs_recover_old_db_current(sbox):
+ "fsfs recover db/current --compatible-version=1.3"
+
+ # Around trunk@1573728, 'svnadmin recover' wrongly errored out
+ # for the --compatible-version=1.3 repositories with missing or
+ # invalid db/current file:
+ # svnadmin: E160006: No such revision 1
+
+ corrupt_and_recover_db_current(sbox, minor_version=3)
+
#----------------------------------------------------------------------
@Issue(2983)
def load_with_parent_dir(sbox):
@@ -714,8 +846,7 @@ def load_with_parent_dir(sbox):
['\n', 'Committed revision 1.\n'],
[], "mkdir", sbox.repo_url + "/sample",
"-m", "Create sample dir")
- load_and_verify_dumpstream(sbox, [], [], None, dumpfile, '--parent-dir',
- '/sample')
+ load_dumpstream(sbox, dumpfile, '--parent-dir', '/sample')
# Verify the svn:mergeinfo properties for '--parent-dir'
svntest.actions.run_and_verify_svn(None,
@@ -737,8 +868,7 @@ def load_with_parent_dir(sbox):
['\n', 'Committed revision 11.\n'],
[], "mkdir", sbox.repo_url + "/sample-2",
"-m", "Create sample-2 dir")
- load_and_verify_dumpstream(sbox, [], [], None, dumpfile, '--parent-dir',
- 'sample-2')
+ load_dumpstream(sbox, dumpfile, '--parent-dir', 'sample-2')
# Verify the svn:mergeinfo properties for '--parent-dir'.
svntest.actions.run_and_verify_svn(None,
@@ -779,7 +909,7 @@ def set_uuid(sbox):
raise SVNUnexpectedStderr(errput)
new_uuid = output[0].rstrip()
if new_uuid == orig_uuid:
- print("Error: new UUID matches the original one")
+ logger.warn("Error: new UUID matches the original one")
raise svntest.Failure
# Now, try setting the UUID back to the original value.
@@ -790,7 +920,7 @@ def set_uuid(sbox):
raise SVNUnexpectedStderr(errput)
new_uuid = output[0].rstrip()
if new_uuid != orig_uuid:
- print("Error: new UUID doesn't match the original one")
+ logger.warn("Error: new UUID doesn't match the original one")
raise svntest.Failure
#----------------------------------------------------------------------
@@ -813,11 +943,10 @@ def reflect_dropped_renumbered_revs(sbox):
"-m", "Create toplevel dir")
# Load the dump stream in sbox.repo_url
- load_and_verify_dumpstream(sbox,[],[], None, dumpfile)
+ load_dumpstream(sbox, dumpfile)
# Load the dump stream in toplevel dir
- load_and_verify_dumpstream(sbox,[],[], None, dumpfile, '--parent-dir',
- '/toplevel')
+ load_dumpstream(sbox, dumpfile, '--parent-dir', '/toplevel')
# Verify the svn:mergeinfo properties
url = sbox.repo_url
@@ -1048,7 +1177,7 @@ def dont_drop_valid_mergeinfo_during_incremental_loads(sbox):
dumpfile_full = open(os.path.join(os.path.dirname(sys.argv[0]),
'svnadmin_tests_data',
'mergeinfo_included_full.dump')).read()
- load_and_verify_dumpstream(sbox, [], [], None, dumpfile_full, '--ignore-uuid')
+ load_dumpstream(sbox, dumpfile_full, '--ignore-uuid')
# Check that the mergeinfo is as expected.
url = sbox.repo_url + '/branches/'
@@ -1090,15 +1219,9 @@ def dont_drop_valid_mergeinfo_during_incremental_loads(sbox):
test_create(sbox)
# Load the three incremental dump files in sequence.
- load_and_verify_dumpstream(sbox, [], [], None,
- open(dump_file_r1_10).read(),
- '--ignore-uuid')
- load_and_verify_dumpstream(sbox, [], [], None,
- open(dump_file_r11_13).read(),
- '--ignore-uuid')
- load_and_verify_dumpstream(sbox, [], [], None,
- open(dump_file_r14_15).read(),
- '--ignore-uuid')
+ load_dumpstream(sbox, open(dump_file_r1_10).read(), '--ignore-uuid')
+ load_dumpstream(sbox, open(dump_file_r11_13).read(), '--ignore-uuid')
+ load_dumpstream(sbox, open(dump_file_r14_15).read(), '--ignore-uuid')
# Check the mergeinfo, we use the same expected output as before,
# as it (duh!) should be exactly the same as when we loaded the
@@ -1127,13 +1250,11 @@ def dont_drop_valid_mergeinfo_during_incremental_loads(sbox):
dumpfile_skeleton = open(os.path.join(os.path.dirname(sys.argv[0]),
'svnadmin_tests_data',
'skeleton_repos.dump')).read()
- load_and_verify_dumpstream(sbox, [], [], None, dumpfile_skeleton,
- '--ignore-uuid')
+ load_dumpstream(sbox, dumpfile_skeleton, '--ignore-uuid')
# Load 'svnadmin_tests_data/mergeinfo_included_full.dump' in one shot:
- load_and_verify_dumpstream(sbox, [], [], None, dumpfile_full,
- '--parent-dir', 'Projects/Project-X',
- '--ignore-uuid')
+ load_dumpstream(sbox, dumpfile_full, '--parent-dir', 'Projects/Project-X',
+ '--ignore-uuid')
# Check that the mergeinfo is as expected. This is exactly the
# same expected mergeinfo we previously checked, except that the
@@ -1169,22 +1290,15 @@ def dont_drop_valid_mergeinfo_during_incremental_loads(sbox):
test_create(sbox)
# Load this skeleton repos into the empty target:
- load_and_verify_dumpstream(sbox, [], [], None, dumpfile_skeleton,
- '--ignore-uuid')
+ load_dumpstream(sbox, dumpfile_skeleton, '--ignore-uuid')
# Load the three incremental dump files in sequence.
- load_and_verify_dumpstream(sbox, [], [], None,
- open(dump_file_r1_10).read(),
- '--parent-dir', 'Projects/Project-X',
- '--ignore-uuid')
- load_and_verify_dumpstream(sbox, [], [], None,
- open(dump_file_r11_13).read(),
- '--parent-dir', 'Projects/Project-X',
- '--ignore-uuid')
- load_and_verify_dumpstream(sbox, [], [], None,
- open(dump_file_r14_15).read(),
- '--parent-dir', 'Projects/Project-X',
- '--ignore-uuid')
+ load_dumpstream(sbox, open(dump_file_r1_10).read(),
+ '--parent-dir', 'Projects/Project-X', '--ignore-uuid')
+ load_dumpstream(sbox, open(dump_file_r11_13).read(),
+ '--parent-dir', 'Projects/Project-X', '--ignore-uuid')
+ load_dumpstream(sbox, open(dump_file_r14_15).read(),
+ '--parent-dir', 'Projects/Project-X', '--ignore-uuid')
# Check the resulting mergeinfo. We expect the exact same results
# as Part 3.
@@ -1308,7 +1422,7 @@ text
# Try to load the dumpstream, expecting a failure (because of mixed EOLs).
load_and_verify_dumpstream(sbox, [], svntest.verify.AnyOutput,
- dumpfile_revisions, dump_str,
+ dumpfile_revisions, False, dump_str,
'--ignore-uuid')
# Now try it again bypassing prop validation. (This interface takes
@@ -1329,8 +1443,8 @@ def verify_non_utf8_paths(sbox):
test_create(sbox)
# Load the dumpstream
- load_and_verify_dumpstream(sbox, [], [], dumpfile_revisions, dumpfile,
- '--ignore-uuid')
+ load_and_verify_dumpstream(sbox, [], [], dumpfile_revisions, False,
+ dumpfile, '--ignore-uuid')
# Replace the path 'A' in revision 1 with a non-UTF-8 sequence.
# This has been observed in repositories in the wild, though Subversion
@@ -1343,9 +1457,15 @@ def verify_non_utf8_paths(sbox):
if line == "A\n":
# replace 'A' with a latin1 character -- the new path is not valid UTF-8
fp_new.write("\xE6\n")
- elif line == "text: 1 279 32 32 d63ecce65d8c428b86f4f8b0920921fe\n":
+ elif line == "text: 1 279 32 0 d63ecce65d8c428b86f4f8b0920921fe\n":
+ # fix up the representation checksum
+ fp_new.write("text: 1 279 32 0 b50b1d5ed64075b5f632f3b8c30cd6b2\n")
+ elif line == "text: 1 280 32 32 d63ecce65d8c428b86f4f8b0920921fe\n":
# fix up the representation checksum
- fp_new.write("text: 1 279 32 32 b50b1d5ed64075b5f632f3b8c30cd6b2\n")
+ fp_new.write("text: 1 280 32 32 b50b1d5ed64075b5f632f3b8c30cd6b2\n")
+ elif line == "text: 1 292 44 32 a6be7b4cf075fd39e6a99eb69a31232b\n":
+ # fix up the representation checksum
+ fp_new.write("text: 1 292 44 32 f2e93e73272cac0f18fccf16f224eb93\n")
elif line == "cpath: /A\n":
# also fix up the 'created path' field
fp_new.write("cpath: /\xE6\n")
@@ -1382,6 +1502,306 @@ def verify_non_utf8_paths(sbox):
'STDERR', expected_stderr, errput):
raise svntest.Failure
+def test_lslocks_and_rmlocks(sbox):
+ "test 'svnadmin lslocks' and 'svnadmin rmlocks'"
+
+ sbox.build(create_wc=False)
+ iota_url = sbox.repo_url + '/iota'
+ lambda_url = sbox.repo_url + '/A/B/lambda'
+
+ exit_code, output, errput = svntest.main.run_svnadmin("lslocks",
+ sbox.repo_dir)
+
+ if exit_code or errput or output:
+ raise svntest.Failure("Error: 'lslocks' failed")
+
+ expected_output = UnorderedOutput(
+ ["'A/B/lambda' locked by user 'jrandom'.\n",
+ "'iota' locked by user 'jrandom'.\n"])
+
+ # Lock iota and A/B/lambda using svn client
+ svntest.actions.run_and_verify_svn(None, expected_output,
+ [], "lock", "-m", "Locking files",
+ iota_url, lambda_url)
+
+ def expected_output_list(path):
+ return [
+ "Path: " + path,
+ "UUID Token: opaquelocktoken",
+ "Owner: jrandom",
+ "Created:",
+ "Expires:",
+ "Comment \(1 line\):",
+ "Locking files",
+ "\n", # empty line
+ ]
+
+ # List all locks
+ exit_code, output, errput = svntest.main.run_svnadmin("lslocks",
+ sbox.repo_dir)
+ if errput:
+ raise SVNUnexpectedStderr(errput)
+ svntest.verify.verify_exit_code(None, exit_code, 0)
+
+ expected_output = svntest.verify.UnorderedRegexListOutput(
+ expected_output_list('/A/B/lambda') +
+ expected_output_list('/iota'))
+ svntest.verify.compare_and_display_lines('lslocks output mismatch',
+ 'output',
+ expected_output, output)
+
+ # List lock in path /A
+ exit_code, output, errput = svntest.main.run_svnadmin("lslocks",
+ sbox.repo_dir,
+ "A")
+ if errput:
+ raise SVNUnexpectedStderr(errput)
+
+ expected_output = svntest.verify.RegexListOutput(
+ expected_output_list('/A/B/lambda'))
+ svntest.verify.compare_and_display_lines('lslocks output mismatch',
+ 'output',
+ expected_output, output)
+ svntest.verify.verify_exit_code(None, exit_code, 0)
+
+ # Remove locks
+ exit_code, output, errput = svntest.main.run_svnadmin("rmlocks",
+ sbox.repo_dir,
+ "iota",
+ "A/B/lambda")
+ expected_output = UnorderedOutput(["Removed lock on '/iota'.\n",
+ "Removed lock on '/A/B/lambda'.\n"])
+
+ svntest.verify.verify_outputs(
+ "Unexpected output while running 'svnadmin rmlocks'.",
+ output, [], expected_output, None)
+
+#----------------------------------------------------------------------
+@Issue(3734)
+def load_ranges(sbox):
+ "'svnadmin load --revision X:Y'"
+
+ ## See http://subversion.tigris.org/issues/show_bug.cgi?id=3734. ##
+ test_create(sbox)
+
+ dumpfile_location = os.path.join(os.path.dirname(sys.argv[0]),
+ 'svnadmin_tests_data',
+ 'skeleton_repos.dump')
+ dumplines = open(dumpfile_location).readlines()
+ dumpdata = "".join(dumplines)
+
+ # Load our dumpfile, 2 revisions at a time, verifying that we have
+ # the correct youngest revision after each load.
+ load_dumpstream(sbox, dumpdata, '-r0:2')
+ svntest.actions.run_and_verify_svnlook("Unexpected output", ['2\n'],
+ None, 'youngest', sbox.repo_dir)
+ load_dumpstream(sbox, dumpdata, '-r3:4')
+ svntest.actions.run_and_verify_svnlook("Unexpected output", ['4\n'],
+ None, 'youngest', sbox.repo_dir)
+ load_dumpstream(sbox, dumpdata, '-r5:6')
+ svntest.actions.run_and_verify_svnlook("Unexpected output", ['6\n'],
+ None, 'youngest', sbox.repo_dir)
+
+ # There are ordering differences in the property blocks.
+ expected_dump = UnorderedOutput(dumplines)
+ new_dumpdata = svntest.actions.run_and_verify_dump(sbox.repo_dir)
+ svntest.verify.compare_and_display_lines("Dump files", "DUMP",
+ expected_dump, new_dumpdata)
+
+@SkipUnless(svntest.main.is_fs_type_fsfs)
+def hotcopy_incremental(sbox):
+ "'svnadmin hotcopy --incremental PATH .'"
+ sbox.build()
+
+ backup_dir, backup_url = sbox.add_repo_path('backup')
+ os.mkdir(backup_dir)
+ cwd = os.getcwd()
+
+ for i in [1, 2, 3]:
+ os.chdir(backup_dir)
+ svntest.actions.run_and_verify_svnadmin(
+ None, None, [],
+ "hotcopy", "--incremental", os.path.join(cwd, sbox.repo_dir), '.')
+
+ os.chdir(cwd)
+
+ check_hotcopy_fsfs(sbox.repo_dir, backup_dir)
+
+ if i < 3:
+ sbox.simple_mkdir("newdir-%i" % i)
+ sbox.simple_commit()
+
+@SkipUnless(svntest.main.is_fs_type_fsfs)
+def hotcopy_incremental_packed(sbox):
+ "'svnadmin hotcopy --incremental' with packing"
+ sbox.build()
+
+ backup_dir, backup_url = sbox.add_repo_path('backup')
+ os.mkdir(backup_dir)
+ cwd = os.getcwd()
+ # Configure two files per shard to trigger packing
+ format_file = open(os.path.join(sbox.repo_dir, 'db', 'format'), 'wb')
+ format_file.write("6\nlayout sharded 2\n")
+ format_file.close()
+
+ # Pack revisions 0 and 1.
+ svntest.actions.run_and_verify_svnadmin(
+ None, ['Packing revisions in shard 0...done.\n'], [], "pack",
+ os.path.join(cwd, sbox.repo_dir))
+
+ # Commit 5 more revs, hotcopy and pack after each commit.
+ for i in [1, 2, 3, 4, 5]:
+ os.chdir(backup_dir)
+ svntest.actions.run_and_verify_svnadmin(
+ None, None, [],
+ "hotcopy", "--incremental", os.path.join(cwd, sbox.repo_dir), '.')
+
+ os.chdir(cwd)
+
+ check_hotcopy_fsfs(sbox.repo_dir, backup_dir)
+
+ if i < 5:
+ sbox.simple_mkdir("newdir-%i" % i)
+ sbox.simple_commit()
+ if not i % 2:
+ expected_output = ['Packing revisions in shard %d...done.\n' % (i/2)]
+ else:
+ expected_output = []
+ svntest.actions.run_and_verify_svnadmin(
+ None, expected_output, [], "pack", os.path.join(cwd, sbox.repo_dir))
+
+
+def locking(sbox):
+ "svnadmin lock tests"
+ sbox.build(create_wc=False)
+
+ comment_path = os.path.join(svntest.main.temp_dir, "comment")
+ svntest.main.file_write(comment_path, "dummy comment")
+
+ invalid_comment_path = os.path.join(svntest.main.temp_dir, "invalid_comment")
+ svntest.main.file_write(invalid_comment_path, "character is invalid")
+
+ # Test illegal character in comment file.
+ expected_error = ".*svnadmin: E130004:.*"
+ svntest.actions.run_and_verify_svnadmin(None, None,
+ expected_error, "lock",
+ sbox.repo_dir,
+ "iota", "jrandom",
+ invalid_comment_path)
+
+ # Test locking path with --bypass-hooks
+ expected_output = "'iota' locked by user 'jrandom'."
+ svntest.actions.run_and_verify_svnadmin(None, expected_output,
+ None, "lock",
+ sbox.repo_dir,
+ "iota", "jrandom",
+ comment_path,
+ "--bypass-hooks")
+
+ # Remove lock
+ svntest.actions.run_and_verify_svnadmin(None, None,
+ None, "rmlocks",
+ sbox.repo_dir, "iota")
+
+ # Test locking path without --bypass-hooks
+ expected_output = "'iota' locked by user 'jrandom'."
+ svntest.actions.run_and_verify_svnadmin(None, expected_output,
+ None, "lock",
+ sbox.repo_dir,
+ "iota", "jrandom",
+ comment_path)
+
+ # Test locking already locked path.
+ expected_error = ".*svnadmin: E160035:.*"
+ svntest.actions.run_and_verify_svnadmin(None, None,
+ expected_error, "lock",
+ sbox.repo_dir,
+ "iota", "jrandom",
+ comment_path)
+
+ # Test locking non-existent path.
+ expected_error = ".*svnadmin: E160013:.*"
+ svntest.actions.run_and_verify_svnadmin(None, None,
+ expected_error, "lock",
+ sbox.repo_dir,
+ "non-existent", "jrandom",
+ comment_path)
+
+ # Test locking a path while specifying a lock token.
+ expected_output = "'A/D/G/rho' locked by user 'jrandom'."
+ lock_token = "opaquelocktoken:01234567-89ab-cdef-89ab-cdef01234567"
+ svntest.actions.run_and_verify_svnadmin(None, expected_output,
+ None, "lock",
+ sbox.repo_dir,
+ "A/D/G/rho", "jrandom",
+ comment_path, lock_token)
+
+ # Test unlocking a path, but provide the wrong lock token.
+ expected_error = ".*svnadmin: E160040:.*"
+ wrong_lock_token = "opaquelocktoken:12345670-9ab8-defc-9ab8-def01234567c"
+ svntest.actions.run_and_verify_svnadmin(None, None,
+ expected_error, "unlock",
+ sbox.repo_dir,
+ "A/D/G/rho", "jrandom",
+ wrong_lock_token)
+
+ # Test unlocking the path again, but this time provide the correct
+ # lock token.
+ expected_output = "'A/D/G/rho' unlocked."
+ svntest.actions.run_and_verify_svnadmin(None, expected_output,
+ None, "unlock",
+ sbox.repo_dir,
+ "A/D/G/rho", "jrandom",
+ lock_token)
+
+ # Install lock/unlock prevention hooks.
+ hook_path = svntest.main.get_pre_lock_hook_path(sbox.repo_dir)
+ svntest.main.create_python_hook_script(hook_path, 'import sys; sys.exit(1)')
+ hook_path = svntest.main.get_pre_unlock_hook_path(sbox.repo_dir)
+ svntest.main.create_python_hook_script(hook_path, 'import sys; sys.exit(1)')
+
+ # Test locking a path. Don't use --bypass-hooks, though, as we wish
+ # to verify that hook script is really getting executed.
+ expected_error = ".*svnadmin: E165001:.*"
+ svntest.actions.run_and_verify_svnadmin(None, None,
+ expected_error, "lock",
+ sbox.repo_dir,
+ "iota", "jrandom",
+ comment_path)
+
+ # Fetch the lock token for our remaining locked path. (We didn't
+ # explicitly set it, so it will vary from test run to test run.)
+ exit_code, output, errput = svntest.main.run_svnadmin("lslocks",
+ sbox.repo_dir,
+ "iota")
+ iota_token = None
+ for line in output:
+ if line.startswith("UUID Token: opaquelocktoken:"):
+ iota_token = line[12:].rstrip()
+ break
+ if iota_token is None:
+ raise svntest.Failure("Unable to lookup lock token for 'iota'")
+
+ # Try to unlock a path while providing the correct lock token but
+ # with a preventative hook in place.
+ expected_error = ".*svnadmin: E165001:.*"
+ svntest.actions.run_and_verify_svnadmin(None, None,
+ expected_error, "unlock",
+ sbox.repo_dir,
+ "iota", "jrandom",
+ iota_token)
+
+ # Finally, use --bypass-hooks to unlock the path (again using the
+ # correct lock token).
+ expected_output = "'iota' unlocked."
+ svntest.actions.run_and_verify_svnadmin(None, expected_output,
+ None, "unlock",
+ "--bypass-hooks",
+ sbox.repo_dir,
+ "iota", "jrandom",
+ iota_token)
+
+
@SkipUnless(svntest.main.is_threaded_python)
@Issue(4129)
def mergeinfo_race(sbox):
@@ -1411,9 +1831,9 @@ def mergeinfo_race(sbox):
t2 = threading.Thread(None, makethread(wc2_dir))
# t2 will trigger the issue #4129 sanity check in fs_fs.c
- t1.start(); t2.start();
+ t1.start(); t2.start()
- t1.join(); t2.join();
+ t1.join(); t2.join()
# Crude attempt to make sure everything worked.
# TODO: better way to catch exceptions in the thread
@@ -1421,6 +1841,42 @@ def mergeinfo_race(sbox):
raise svntest.Failure("one or both commits failed")
+@Issue(4213)
+def recover_old_empty(sbox):
+ "recover empty --compatible-version=1.3"
+ svntest.main.safe_rmtree(sbox.repo_dir, 1)
+ svntest.main.create_repos(sbox.repo_dir, minor_version=3)
+ svntest.actions.run_and_verify_svnadmin(None, None, [],
+ "recover", sbox.repo_dir)
+
+
+@SkipUnless(svntest.main.is_fs_type_fsfs)
+def fsfs_recover_old_non_empty(sbox):
+ "fsfs recover non-empty --compatible-version=1.3"
+
+ # Around trunk@1560210, 'svnadmin recover' wrongly errored out
+ # for the --compatible-version=1.3 Greek tree repository:
+ # svnadmin: E200002: Serialized hash missing terminator
+
+ sbox.build(create_wc=False, minor_version=3)
+ svntest.actions.run_and_verify_svnadmin(None, None, [], "recover",
+ sbox.repo_dir)
+
+
+@SkipUnless(svntest.main.is_fs_type_fsfs)
+def fsfs_hotcopy_old_non_empty(sbox):
+ "fsfs hotcopy non-empty --compatible-version=1.3"
+
+ # Around trunk@1560210, 'svnadmin hotcopy' wrongly errored out
+ # for the --compatible-version=1.3 Greek tree repository:
+ # svnadmin: E160006: No such revision 1
+
+ sbox.build(create_wc=False, minor_version=3)
+ backup_dir, backup_url = sbox.add_repo_path('backup')
+ svntest.actions.run_and_verify_svnadmin(None, None, [], "hotcopy",
+ sbox.repo_dir, backup_dir)
+
+ check_hotcopy_fsfs(sbox.repo_dir, backup_dir)
########################################################################
@@ -1441,7 +1897,8 @@ test_list = [ None,
setrevprop,
verify_windows_paths_in_repos,
verify_incremental_fsfs,
- recover_fsfs,
+ fsfs_recover_db_current,
+ fsfs_recover_old_db_current,
load_with_parent_dir,
set_uuid,
reflect_dropped_renumbered_revs,
@@ -1452,7 +1909,15 @@ test_list = [ None,
hotcopy_symlink,
load_bad_props,
verify_non_utf8_paths,
+ test_lslocks_and_rmlocks,
+ load_ranges,
+ hotcopy_incremental,
+ hotcopy_incremental_packed,
+ locking,
mergeinfo_race,
+ recover_old_empty,
+ fsfs_recover_old_non_empty,
+ fsfs_hotcopy_old_non_empty,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/svnauthz_tests.py b/subversion/tests/cmdline/svnauthz_tests.py
new file mode 100755
index 0000000..fc93b23
--- /dev/null
+++ b/subversion/tests/cmdline/svnauthz_tests.py
@@ -0,0 +1,978 @@
+#!/usr/bin/env python
+#
+# svnauthz_tests.py: testing the 'svnauthz' tool.
+#
+# Subversion is a tool for revision control.
+# See http://subversion.apache.org for more information.
+#
+# ====================================================================
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+######################################################################
+
+# General modules
+import os.path
+import tempfile
+
+# Our testing module
+import svntest
+from svntest import wc
+
+# (abbreviation)
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
+Item = svntest.wc.StateItem
+
+# Run svnauthz commands on commit
+hook_template = """import sys,os,subprocess
+svnauthz_bin=%s
+
+fp = open(os.path.join(sys.argv[1], 'hooks.log'), 'wb')
+def output_command(fp, cmd, opt):
+ command = [svnauthz_bin, cmd, '-t', sys.argv[2], sys.argv[1]] + opt
+ process = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False, bufsize=-1)
+ (output, errors) = process.communicate()
+ status = process.returncode
+ fp.write(output)
+ fp.write(errors)
+ fp.write("Exit %%d\\n" %% status)
+ return status
+
+for (svnauthz_cmd, svnauthz_opt) in %s:
+ output_command(fp, svnauthz_cmd, svnauthz_opt.split())
+fp.close()"""
+
+#----------------------------------------------------------------------
+def verify_logfile(logfilename, expected_data, delete_log=True):
+ if os.path.exists(logfilename):
+ fp = open(logfilename)
+ else:
+ raise svntest.verify.SVNUnexpectedOutput("hook logfile %s not found"\
+ % logfilename)
+
+ actual_data = fp.readlines()
+ fp.close()
+ if delete_log:
+ os.unlink(logfilename)
+ svntest.verify.compare_and_display_lines('wrong hook logfile content',
+ 'HOOKLOG',
+ expected_data, actual_data)
+
+#----------------------------------------------------------------------
+
+# Note we don't test various different validation failures, the
+# validation is actually just done when the file is loaded and
+# the library tests for the config file parser and the authz
+# parser already validate various failures that return errors.
+
+def svnauthz_validate_file_test(sbox):
+ "test 'svnauthz validate' on files"
+
+ # build an authz file
+ (authz_fd, authz_path) = tempfile.mkstemp()
+ authz_content = "[/]\n* = rw\n"
+ svntest.main.file_write(authz_path, authz_content)
+
+ # Valid authz file
+ svntest.actions.run_and_verify_svnauthz("Valid authz file", None, None,
+ 0, False, "validate", authz_path)
+
+ # Invalid authz file, expect exit code 1, we found the file loaded it
+ # but found an error
+ svntest.main.file_write(authz_path, 'x\n')
+ svntest.actions.run_and_verify_svnauthz("Invalid authz file", None, None,
+ 1, False, "validate", authz_path)
+
+ # Non-existant authz file
+ # exit code 2, operational error since we can't test the file.
+ os.close(authz_fd)
+ os.remove(authz_path)
+ svntest.actions.run_and_verify_svnauthz("Non-existant authz file", None,
+ None, 2, False, "validate",
+ authz_path)
+
+@SkipUnless(svntest.main.is_ra_type_file)
+def svnauthz_validate_repo_test(sbox):
+ "test 'svnauthz validate' on urls"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ repo_url = sbox.repo_url
+
+ authz_content = "[/]\n* = rw\n"
+
+ # build an authz file and commit it to the repo
+ authz_path = os.path.join(wc_dir, 'A', 'authz')
+ svntest.main.file_write(authz_path, authz_content)
+ svntest.main.run_svn(None, 'add', authz_path)
+ expected_output = wc.State(wc_dir, {'A/authz' : Item(verb='Adding')})
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.add({
+ 'A/authz' : Item(status=' ', wc_rev=2),
+ })
+ if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+ expected_status, None, wc_dir):
+ raise svntest.Failure
+
+ # Valid authz url (file stored in repo)
+ authz_url = repo_url + '/A/authz'
+ svntest.actions.run_and_verify_svnauthz("Valid authz url", None, None,
+ 0, False, "validate", authz_url)
+
+ # Invalid authz url (again use the iota file in the repo)
+ # expect exit code 1, we found the file loaded it but found an error
+ iota_url = repo_url + '/iota'
+ svntest.actions.run_and_verify_svnauthz("Invalid authz url", None, None,
+ 1, False, "validate", iota_url)
+
+ # Non-existant authz url
+ # exit code 2, operational error since we can't test the file.
+ svntest.actions.run_and_verify_svnauthz("Non-existant authz file", None,
+ None, 2, False, "validate",
+ repo_url + "/zilch")
+
+def svnauthz_validate_txn_test(sbox):
+ "test 'svnauthz validate --transaction'"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ repo_dir = sbox.repo_dir
+
+ logfilepath = os.path.join(repo_dir, 'hooks.log')
+ pre_commit_hook = svntest.main.get_pre_commit_hook_path(repo_dir)
+ hook_instance = hook_template % (repr(svntest.main.svnauthz_binary),
+ repr([('validate', 'A/authz')]))
+ svntest.main.create_python_hook_script(pre_commit_hook, hook_instance)
+
+ # Create an authz file
+ authz_content = "[/]\n* = rw\n"
+ authz_path = os.path.join(wc_dir, 'A/authz')
+ svntest.main.file_write(authz_path, authz_content)
+ svntest.main.run_svn(None, 'add', authz_path)
+
+ # commit a valid authz file, and check the hook's logfile
+ expected_output = wc.State(wc_dir, {'A/authz' : Item(verb='Adding')})
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.add({
+ 'A/authz' : Item(status=' ', wc_rev=2),
+ })
+ if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+ expected_status, None, wc_dir):
+ raise svntest.Failure
+ expected_data = ['Exit 0\n']
+ verify_logfile(logfilepath, expected_data)
+
+ # Add an invalid line to the authz file.
+ svntest.main.file_append(authz_path, 'x')
+ expected_output = wc.State(wc_dir, {'A/authz' : Item(verb='Sending')})
+ expected_status.tweak('A/authz', status=' ', wc_rev=3)
+ if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+ expected_status, None, wc_dir):
+ raise svntest.Failure
+ expected_data = svntest.verify.RegexOutput(".*?Error parsing authz file: '.*?'",
+ match_all=False)
+ verify_logfile(logfilepath, expected_data, delete_log=False)
+ # Check the logfile that our Exit was 1 too
+ expected_data = svntest.verify.ExpectedOutput("Exit 1\n", match_all=False)
+ verify_logfile(logfilepath, expected_data)
+
+ # Validate a file that doesn't exist and make sure we're exiting with 2.
+ hook_instance = hook_template % (repr(svntest.main.svnauthz_binary),
+ repr([('validate', 'zilch')]))
+ svntest.main.create_python_hook_script(pre_commit_hook, hook_instance)
+ svntest.main.file_append(authz_path, 'x')
+ expected_status.tweak('A/authz', status=' ', wc_rev=4)
+ if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+ expected_status, None, wc_dir):
+ raise svntest.Failure
+ expected_data = svntest.verify.ExpectedOutput("Exit 2\n", match_all=False)
+ verify_logfile(logfilepath, expected_data)
+
+def svnauthz_accessof_file_test(sbox):
+ "test 'svnauthz accessof' on files"
+
+ # build an authz file
+ (authz_fd, authz_path) = tempfile.mkstemp()
+ authz_content = "[/]\ngroucho = \ngallagher = rw\n* = r\n" + \
+ "[/bios]\n* = rw\n" + \
+ "[comedy:/jokes]\ngroucho = rw\n" + \
+ "[slapstick:/jokes]\n* =\n"
+ svntest.main.file_write(authz_path, authz_content)
+
+ # Anonymous access with no path, and no repository should be rw
+ # since it returns the highest level of access granted anywhere.
+ # So /bios being rw for everyone means this will be rw.
+ svntest.actions.run_and_verify_svnauthz("Anonymous access", ["rw\n"], None,
+ 0, False, "accessof", authz_path)
+
+ # Anonymous access on /jokes should be r, no repo so won't match
+ # the slapstick:/jokes section.
+ svntest.actions.run_and_verify_svnauthz("Anonymous access on path",
+ ["r\n"], None, 0, False, "accessof",
+ authz_path, "--path", "/jokes")
+
+ # Anonymous access on /jokes on slapstick repo should be no
+ svntest.actions.run_and_verify_svnauthz("Anonymous access on path with repo",
+ ["no\n"], None, 0, False, "accessof",
+ authz_path, "--path", "/jokes",
+ "--repository", "slapstick")
+
+ # User access with no path, and no repository should be rw
+ # since it returns the h ighest level of access anywhere.
+ # So /bios being rw for everyone means this will be rw.
+ svntest.actions.run_and_verify_svnauthz("User access", ["rw\n"], None,
+ 0, False, "accessof", authz_path,
+ "--username", "groucho")
+
+ # User groucho specified on /jokes with no repo, will not match any of the
+ # repo specific sections, so is r since everyone has read access.
+ svntest.actions.run_and_verify_svnauthz("User access on path", ["r\n"], None,
+ 0, False, "accessof", authz_path,
+ "--path", "/jokes", "--username",
+ "groucho")
+
+ # User groucho specified on /jokes with the repo comedy will be rw
+ svntest.actions.run_and_verify_svnauthz("User access on path with repo",
+ ["rw\n"], None, 0, False, "accessof",
+ authz_path, "--path", "/jokes",
+ "--username", "groucho",
+ "--repository", "comedy")
+
+ os.close(authz_fd)
+ os.remove(authz_path)
+
+@SkipUnless(svntest.main.is_ra_type_file)
+def svnauthz_accessof_repo_test(sbox):
+ "test 'svnauthz accessof' on urls"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ repo_url = sbox.repo_url
+
+ authz_content = "[/]\ngroucho = \ngallagher = rw\n* = r\n" + \
+ "[/bios]\n* = rw\n" + \
+ "[comedy:/jokes]\ngroucho = rw\n" + \
+ "[slapstick:/jokes]\n* =\n"
+
+ # build an authz file and commit it to the repo
+ authz_path = os.path.join(wc_dir, 'A', 'authz')
+ svntest.main.file_write(authz_path, authz_content)
+ svntest.main.run_svn(None, 'add', authz_path)
+ expected_output = wc.State(wc_dir, {'A/authz' : Item(verb='Adding')})
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.add({
+ 'A/authz' : Item(status=' ', wc_rev=2),
+ })
+ if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+ expected_status, None, wc_dir):
+ raise svntest.Failure
+
+ # Anonymous access with no path, and no repository should be rw
+ # since it returns the highest level of access granted anywhere.
+ # So /bios being rw for everyone means this will be rw.
+ authz_url = repo_url + "/A/authz"
+ svntest.actions.run_and_verify_svnauthz("Anonymous access", ["rw\n"], None,
+ 0, False, "accessof", authz_url)
+
+ # Anonymous access on /jokes should be r, no repo so won't match
+ # the slapstick:/jokes section.
+ svntest.actions.run_and_verify_svnauthz("Anonymous access on path",
+ ["r\n"], None, 0, False, "accessof",
+ authz_url, "--path", "/jokes")
+
+ # Anonymous access on /jokes on slapstick repo should be no
+ svntest.actions.run_and_verify_svnauthz("Anonymous access on path with repo",
+ ["no\n"], None, 0, False, "accessof",
+ authz_url, "--path", "/jokes",
+ "--repository", "slapstick")
+
+ # User access with no path, and no repository should be rw
+ # since it returns the h ighest level of access anywhere.
+ # So /bios being rw for everyone means this will be rw.
+ svntest.actions.run_and_verify_svnauthz("User access", ["rw\n"], None,
+ 0, False, "accessof", authz_url,
+ "--username", "groucho")
+
+ # User groucho specified on /jokes with no repo, will not match any of the
+ # repo specific sections, so is r since everyone has read access.
+ svntest.actions.run_and_verify_svnauthz("User access on path", ["r\n"], None,
+ 0, False, "accessof", authz_url,
+ "--path", "/jokes", "--username",
+ "groucho")
+
+ # User groucho specified on /jokes with the repo comedy will be rw
+ svntest.actions.run_and_verify_svnauthz("User access on path with repo",
+ ["rw\n"], None, 0, False, "accessof",
+ authz_url, "--path", "/jokes",
+ "--username", "groucho",
+ "--repository", "comedy")
+
+def svnauthz_accessof_groups_file_test(sbox):
+ "test 'svnauthz accessof --groups-file' on files"
+
+ # build an authz file
+ (authz_fd, authz_path) = tempfile.mkstemp()
+ authz_content = "[/]\n@musicians = rw\n@comedians = \n" + \
+ "[comedy:/jokes]\n@musicians = \n@comedians = r\n"
+ svntest.main.file_write(authz_path, authz_content)
+
+ # build a groups file
+ (groups_fd, groups_path) = tempfile.mkstemp()
+ groups_content = "[groups]\nmusicians=stafford\ncomedians=groucho\n"
+ svntest.main.file_write(groups_path, groups_content)
+
+ # Anonymous access with no path, and no repository should be no
+ # since it returns the highest level of access granted anywhere.
+ svntest.actions.run_and_verify_svnauthz("Anonymous access", ["no\n"], None,
+ 0, False, "accessof", authz_path,
+ "--groups-file", groups_path)
+
+ # User stafford (@musicians) access with no path, and no repository should
+ # be no since it returns the highest level of access granted anywhere.
+ svntest.actions.run_and_verify_svnauthz("Group 1 access",
+ ["rw\n"], None,
+ 0, False, "accessof", authz_path,
+ "--groups-file", groups_path,
+ "--username", "stafford")
+
+ # User groucho (@comedians) access with no path, and no repository should
+ # be no since it returns the highest level of access granted anywhere.
+ svntest.actions.run_and_verify_svnauthz("Group 2 access",
+ ["no\n"], None,
+ 0, False, "accessof", authz_path,
+ "--groups-file", groups_path,
+ "--username", "groucho")
+
+ # Anonymous access specified on /jokes with the repo comedy will be no.
+ svntest.actions.run_and_verify_svnauthz("Anonymous access on path with repo",
+ ["no\n"], None, 0, False,
+ "accessof", authz_path,
+ "--groups-file", groups_path,
+ "--path", "jokes",
+ "--repository", "comedy")
+
+ # User stafford (@musicians) specified on /jokes with the repo comedy
+ # will be no.
+ svntest.actions.run_and_verify_svnauthz("Group 1 access on path with repo",
+ ["no\n"], None,
+ 0, False, "accessof", authz_path,
+ "--groups-file", groups_path,
+ "--path", "jokes",
+ "--repository", "comedy",
+ "--username", "stafford")
+
+ # User groucho (@comedians) specified on /jokes with the repo
+ # comedy will be r.
+ svntest.actions.run_and_verify_svnauthz("Group 2 access on path with repo",
+ ["r\n"], None,
+ 0, False, "accessof", authz_path,
+ "--groups-file", groups_path,
+ "--path", "jokes",
+ "--repository", "comedy",
+ "--username", "groucho")
+
+ os.close(authz_fd)
+ os.remove(authz_path)
+ os.close(groups_fd)
+ os.remove(groups_path)
+
+@SkipUnless(svntest.main.is_ra_type_file)
+def svnauthz_accessof_groups_repo_test(sbox):
+ "test 'svnauthz accessof --groups-file' on urls"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ repo_url = sbox.repo_url
+
+ authz_content = "[/]\n@musicians = rw\n@comedians = \n" + \
+ "[comedy:/jokes]\n@musicians = \n@comedians = r\n"
+
+ groups_content = "[groups]\nmusicians=stafford\ncomedians=groucho\n"
+
+ # build authz and groups files and commit them to the repo
+ authz_path = os.path.join(wc_dir, 'A', 'authz')
+ groups_path = os.path.join(wc_dir, 'A', 'groups')
+ svntest.main.file_write(authz_path, authz_content)
+ svntest.main.file_write(groups_path, groups_content)
+ svntest.main.run_svn(None, 'add', authz_path, groups_path)
+ expected_output = wc.State(wc_dir, {
+ 'A/authz' : Item(verb='Adding'),
+ 'A/groups' : Item(verb='Adding'),
+ })
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.add({
+ 'A/authz' : Item(status=' ', wc_rev=2),
+ 'A/groups' : Item(status=' ', wc_rev=2),
+ })
+
+ if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+ expected_status, None, wc_dir):
+ raise svntest.Failure
+
+ # Anonymous access with no path, and no repository should be no
+ # since it returns the highest level of access granted anywhere.
+ authz_url = repo_url + "/A/authz"
+ groups_url = repo_url + "/A/groups"
+ svntest.actions.run_and_verify_svnauthz("Anonymous access", ["no\n"], None,
+ 0, False, "accessof", authz_url,
+ "--groups-file", groups_url)
+
+ # User stafford (@musicians) access with no path, and no repository should
+ # be no since it returns the highest level of access granted anywhere.
+ svntest.actions.run_and_verify_svnauthz("Group 1 access",
+ ["rw\n"], None,
+ 0, False, "accessof", authz_url,
+ "--groups-file", groups_url,
+ "--username", "stafford")
+
+ # User groucho (@comedians) access with no path, and no repository should
+ # be no since it returns the highest level of access granted anywhere.
+ svntest.actions.run_and_verify_svnauthz("Group 2 access",
+ ["no\n"], None,
+ 0, False, "accessof", authz_url,
+ "--groups-file", groups_url,
+ "--username", "groucho")
+
+ # Anonymous access specified on /jokes with the repo comedy will be no.
+ svntest.actions.run_and_verify_svnauthz("Anonymous access on path with repo",
+ ["no\n"], None, 0, False,
+ "accessof", authz_url,
+ "--groups-file", groups_url,
+ "--path", "jokes",
+ "--repository", "comedy")
+
+ # User stafford (@musicians) specified on /jokes with the repo comedy
+ # will be no.
+ svntest.actions.run_and_verify_svnauthz("Group 1 access on path with repo",
+ ["no\n"], None,
+ 0, False, "accessof", authz_url,
+ "--groups-file", groups_url,
+ "--path", "jokes",
+ "--repository", "comedy",
+ "--username", "stafford")
+
+ # User groucho (@comedians) specified on /jokes with the repo
+ # comedy will be r.
+ svntest.actions.run_and_verify_svnauthz("Group 2 access on path with repo",
+ ["r\n"], None,
+ 0, False, "accessof", authz_url,
+ "--groups-file", groups_url,
+ "--path", "jokes",
+ "--repository", "comedy",
+ "--username", "groucho")
+
+def svnauthz_accessof_is_file_test(sbox):
+ "test 'svnauthz accessof --is' on files"
+
+ # build an authz file
+ (authz_fd, authz_path) = tempfile.mkstemp()
+ authz_content = "[/]\ngroucho = \ngallagher = rw\n* = r\n" + \
+ "[/bios]\n* = rw\n" + \
+ "[comedy:/jokes]\ngroucho = rw\n" + \
+ "[slapstick:/jokes]\n* =\n"
+ svntest.main.file_write(authz_path, authz_content)
+
+ # Test an invalid --is option, should get an error message and exit code
+ # of 2.
+ expected_output = svntest.verify.RegexOutput(
+ ".*'x' is not a valid argument for --is", match_all=False
+ )
+ svntest.actions.run_and_verify_svnauthz("--is x fails", None,
+ expected_output, 2, False,
+ "accessof", authz_path, "--is", "x")
+
+ # Anonymous access with no path, and no repository should be rw
+ # since it returns the highest level of access granted anywhere.
+ # So /bios being rw for everyone means this will be rw.
+ # Test --is rw returns 0.
+ svntest.actions.run_and_verify_svnauthz("Anonymous access --is rw", None,
+ None, 0, False, "accessof",
+ authz_path, "--is", "rw")
+ # Test --is r returns 3.
+ svntest.actions.run_and_verify_svnauthz("Anonymous access --is r", None,
+ None, 3, False, "accessof",
+ authz_path, "--is", "r")
+ # Test --is no returns 3.
+ svntest.actions.run_and_verify_svnauthz("Anonymous access --is no", None,
+ None, 3, False, "accessof",
+ authz_path, "--is", "no")
+
+ # Anonymous access on /jokes should be r, no repo so won't match
+ # the slapstick:/jokes section.
+ # Test --is r returns 0.
+ svntest.actions.run_and_verify_svnauthz("Anonymous access on path --is r",
+ None, None, 0, False, "accessof",
+ authz_path, "--path", "/jokes",
+ "--is", "r")
+ # Test --is rw returns 3.
+ svntest.actions.run_and_verify_svnauthz("Anonymous access on path --is r",
+ None, None, 3, False, "accessof",
+ authz_path, "--path", "/jokes",
+ "--is", "rw")
+ # Test --is no returns 3.
+ svntest.actions.run_and_verify_svnauthz("Anonymous access on path --is r",
+ None, None, 3, False, "accessof",
+ authz_path, "--path", "/jokes",
+ "--is", "no")
+
+ # Anonymous access on /jokes on slapstick repo should be no
+ # Test --is no returns 0.
+ svntest.actions.run_and_verify_svnauthz("Anon access on path w/ repo --is no",
+ None, None, 0, False, "accessof",
+ authz_path, "--path", "/jokes",
+ "--repository", "slapstick",
+ "--is", "no")
+ # Test --is rw returns 3.
+ svntest.actions.run_and_verify_svnauthz("Anon access on path w/ repo --is no",
+ None, None, 3, False, "accessof",
+ authz_path, "--path", "/jokes",
+ "--repository", "slapstick",
+ "--is", "rw")
+ # Test --is r returns 3.
+ svntest.actions.run_and_verify_svnauthz("Anon access on path w/ repo --is no",
+ None, None, 3, False, "accessof",
+ authz_path, "--path", "/jokes",
+ "--repository", "slapstick",
+ "--is", "r")
+
+ # User access with no path, and no repository should be rw
+ # since it returns the h ighest level of access anywhere.
+ # So /bios being rw for everyone means this will be rw.
+ # Test --is rw returns 0.
+ svntest.actions.run_and_verify_svnauthz("User access --is rw", None, None,
+ 0, False, "accessof", authz_path,
+ "--username", "groucho", "--is",
+ "rw")
+ # Test --is r returns 3.
+ svntest.actions.run_and_verify_svnauthz("User access --is r", None, None,
+ 3, False, "accessof", authz_path,
+ "--username", "groucho", "--is",
+ "r")
+ # Test --is no returns 3.
+ svntest.actions.run_and_verify_svnauthz("User access --is no", None, None,
+ 3, False, "accessof", authz_path,
+ "--username", "groucho", "--is",
+ "no")
+
+ # User groucho specified on /jokes with no repo, will not match any of the
+ # repo specific sections, so is r since everyone has read access.
+ # Test --is r returns 0.
+ svntest.actions.run_and_verify_svnauthz("User access on path --is r", None,
+ None, 0, False, "accessof",
+ authz_path, "--path", "/jokes",
+ "--username", "groucho", "--is", "r")
+ # Test --is rw returns 3.
+ svntest.actions.run_and_verify_svnauthz("User access on path --is rw", None,
+ None, 3, False, "accessof",
+ authz_path, "--path", "/jokes",
+ "--username", "groucho",
+ "--is", "rw")
+ # Test --is no returns 3.
+ svntest.actions.run_and_verify_svnauthz("User access on path --is no", None,
+ None, 3, False, "accessof",
+ authz_path, "--path", "/jokes",
+ "--username", "groucho",
+ "--is", "no")
+
+ # User groucho specified on /jokes with the repo comedy will be rw
+ # Test --is rw returns 0.
+ svntest.actions.run_and_verify_svnauthz("User access on path w/ repo --is rw",
+ None, None, 0, False, "accessof",
+ authz_path, "--path", "/jokes",
+ "--username", "groucho",
+ "--repository", "comedy", "--is",
+ "rw")
+ # Test --is r returns 3.
+ svntest.actions.run_and_verify_svnauthz("User access on path w/ repo --is r",
+ None, None, 3, False, "accessof",
+ authz_path, "--path", "/jokes",
+ "--username", "groucho",
+ "--repository", "comedy", "--is",
+ "r")
+ # Test --is no returns 3.
+ svntest.actions.run_and_verify_svnauthz("User access on path w/ repo --is no",
+ None, None, 3, False, "accessof",
+ authz_path, "--path", "/jokes",
+ "--username", "groucho",
+ "--repository", "comedy", "--is",
+ "no")
+
+ # Add an invalid line to the authz file
+ svntest.main.file_append(authz_path, "x\n")
+ # Check that --is returns 1 when the syntax is invalid with a file..
+ expected_out = svntest.verify.RegexOutput(
+ ".*Error while parsing config file:",
+ match_all=False
+ )
+ svntest.actions.run_and_verify_svnauthz("--is with invalid authz file",
+ None, expected_out, 1, False,
+ "accessof", authz_path, "--path",
+ "/jokes", "--username", "groucho",
+ "--repository", "comedy", "--is",
+ "rw")
+
+ os.close(authz_fd)
+ os.remove(authz_path)
+
+@SkipUnless(svntest.main.is_ra_type_file)
+def svnauthz_accessof_is_repo_test(sbox):
+ "test 'svnauthz accessof --is' on files and urls"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ repo_url = sbox.repo_url
+
+ authz_content = "[/]\ngroucho = \ngallagher = rw\n* = r\n" + \
+ "[/bios]\n* = rw\n" + \
+ "[comedy:/jokes]\ngroucho = rw\n" + \
+ "[slapstick:/jokes]\n* =\n"
+
+ # build an authz file and commit it to the repo
+ authz_path = os.path.join(wc_dir, 'A', 'authz')
+ svntest.main.file_write(authz_path, authz_content)
+ svntest.main.run_svn(None, 'add', authz_path)
+ expected_output = wc.State(wc_dir, {'A/authz' : Item(verb='Adding')})
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.add({
+ 'A/authz' : Item(status=' ', wc_rev=2),
+ })
+ if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+ expected_status, None, wc_dir):
+ raise svntest.Failure
+
+ # Test an invalid --is option, should get an error message and exit code
+ # of 2.
+ authz_url = repo_url + "/A/authz"
+ expected_output = svntest.verify.RegexOutput(
+ ".*'x' is not a valid argument for --is", match_all=False
+ )
+ svntest.actions.run_and_verify_svnauthz("--is x fails", None,
+ expected_output, 2, False,
+ "accessof", authz_url, "--is", "x")
+
+ # Anonymous access with no path, and no repository should be rw
+ # since it returns the highest level of access granted anywhere.
+ # So /bios being rw for everyone means this will be rw.
+ # Test --is rw returns 0.
+ svntest.actions.run_and_verify_svnauthz("Anonymous access --is rw", None,
+ None, 0, False, "accessof",
+ authz_url, "--is", "rw")
+ # Test --is r returns 3.
+ svntest.actions.run_and_verify_svnauthz("Anonymous access --is r", None,
+ None, 3, False, "accessof",
+ authz_url, "--is", "r")
+ # Test --is no returns 3.
+ svntest.actions.run_and_verify_svnauthz("Anonymous access --is no", None,
+ None, 3, False, "accessof",
+ authz_url, "--is", "no")
+
+ # Anonymous access on /jokes should be r, no repo so won't match
+ # the slapstick:/jokes section.
+ # Test --is r returns 0.
+ svntest.actions.run_and_verify_svnauthz("Anonymous access on path --is r",
+ None, None, 0, False, "accessof",
+ authz_url, "--path", "/jokes",
+ "--is", "r")
+ # Test --is rw returns 3.
+ svntest.actions.run_and_verify_svnauthz("Anonymous access on path --is r",
+ None, None, 3, False, "accessof",
+ authz_url, "--path", "/jokes",
+ "--is", "rw")
+ # Test --is no returns 3.
+ svntest.actions.run_and_verify_svnauthz("Anonymous access on path --is r",
+ None, None, 3, False, "accessof",
+ authz_url, "--path", "/jokes",
+ "--is", "no")
+
+ # Anonymous access on /jokes on slapstick repo should be no
+ # Test --is no returns 0.
+ svntest.actions.run_and_verify_svnauthz("Anon access on path w/ repo --is no",
+ None, None, 0, False, "accessof",
+ authz_url, "--path", "/jokes",
+ "--repository", "slapstick",
+ "--is", "no")
+ # Test --is rw returns 3.
+ svntest.actions.run_and_verify_svnauthz("Anon access on path w/ repo --is no",
+ None, None, 3, False, "accessof",
+ authz_url, "--path", "/jokes",
+ "--repository", "slapstick",
+ "--is", "rw")
+ # Test --is r returns 3.
+ svntest.actions.run_and_verify_svnauthz("Anon access on path w/ repo --is no",
+ None, None, 3, False, "accessof",
+ authz_url, "--path", "/jokes",
+ "--repository", "slapstick",
+ "--is", "r")
+
+ # User access with no path, and no repository should be rw
+ # since it returns the h ighest level of access anywhere.
+ # So /bios being rw for everyone means this will be rw.
+ # Test --is rw returns 0.
+ svntest.actions.run_and_verify_svnauthz("User access --is rw", None, None,
+ 0, False, "accessof", authz_url,
+ "--username", "groucho", "--is",
+ "rw")
+ # Test --is r returns 3.
+ svntest.actions.run_and_verify_svnauthz("User access --is r", None, None,
+ 3, False, "accessof", authz_url,
+ "--username", "groucho", "--is",
+ "r")
+ # Test --is no returns 3.
+ svntest.actions.run_and_verify_svnauthz("User access --is no", None, None,
+ 3, False, "accessof", authz_url,
+ "--username", "groucho", "--is",
+ "no")
+
+ # User groucho specified on /jokes with no repo, will not match any of the
+ # repo specific sections, so is r since everyone has read access.
+ # Test --is r returns 0.
+ svntest.actions.run_and_verify_svnauthz("User access on path --is r", None,
+ None, 0, False, "accessof",
+ authz_url, "--path", "/jokes",
+ "--username", "groucho", "--is", "r")
+ # Test --is rw returns 3.
+ svntest.actions.run_and_verify_svnauthz("User access on path --is rw", None,
+ None, 3, False, "accessof",
+ authz_url, "--path", "/jokes",
+ "--username", "groucho",
+ "--is", "rw")
+ # Test --is no returns 3.
+ svntest.actions.run_and_verify_svnauthz("User access on path --is no", None,
+ None, 3, False, "accessof",
+ authz_url, "--path", "/jokes",
+ "--username", "groucho",
+ "--is", "no")
+
+ # User groucho specified on /jokes with the repo comedy will be rw
+ # Test --is rw returns 0.
+ svntest.actions.run_and_verify_svnauthz("User access on path w/ repo --is rw",
+ None, None, 0, False, "accessof",
+ authz_url, "--path", "/jokes",
+ "--username", "groucho",
+ "--repository", "comedy", "--is",
+ "rw")
+ # Test --is r returns 3.
+ svntest.actions.run_and_verify_svnauthz("User access on path w/ repo --is r",
+ None, None, 3, False, "accessof",
+ authz_url, "--path", "/jokes",
+ "--username", "groucho",
+ "--repository", "comedy", "--is",
+ "r")
+ # Test --is no returns 3.
+ svntest.actions.run_and_verify_svnauthz("User access on path w/ repo --is no",
+ None, None, 3, False, "accessof",
+ authz_url, "--path", "/jokes",
+ "--username", "groucho",
+ "--repository", "comedy", "--is",
+ "no")
+
+ # Add an invalid line to the authz file
+ svntest.main.file_append(authz_path, "x\n")
+ expected_output = wc.State(wc_dir, {'A/authz' : Item(verb='Sending')})
+ expected_status.tweak('A/authz', wc_rev=3)
+ if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+ expected_status, None, wc_dir):
+ raise svntest.Failure
+
+ # Check that --is returns 1 when the syntax is invalid with a url.
+ expected_out = svntest.verify.RegexOutput(
+ ".*Error while parsing config file:",
+ match_all=False
+ )
+ svntest.actions.run_and_verify_svnauthz("--is with invalid authz url",
+ None, expected_out, 1, False,
+ "accessof", authz_url, "--path",
+ "/jokes", "--username", "groucho",
+ "--repository", "comedy", "--is",
+ "rw")
+
+def svnauthz_accessof_txn_test(sbox):
+ "test 'svnauthz accessof --transaction'"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ repo_dir = sbox.repo_dir
+
+ logfilepath = os.path.join(repo_dir, 'hooks.log')
+ pre_commit_hook = svntest.main.get_pre_commit_hook_path(repo_dir)
+ hook_instance = hook_template % (repr(svntest.main.svnauthz_binary),
+ repr([('accessof',
+ '--is rw A/authz')]))
+ svntest.main.create_python_hook_script(pre_commit_hook, hook_instance)
+
+ # Create an authz file
+ authz_content = "[/]\n* = rw\n"
+ authz_path = os.path.join(wc_dir, 'A/authz')
+ svntest.main.file_write(authz_path, authz_content)
+ svntest.main.run_svn(None, 'add', authz_path)
+
+ # Only really testing the exit value code paths.
+
+ # commit a valid authz file, and run --is rw which is true.
+ # Should get an exit of 0.
+ expected_output = wc.State(wc_dir, {'A/authz' : Item(verb='Adding')})
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.add({
+ 'A/authz' : Item(status=' ', wc_rev=2),
+ })
+ if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+ expected_status, None, wc_dir):
+ raise svntest.Failure
+ expected_data = ['Exit 0\n']
+ verify_logfile(logfilepath, expected_data)
+
+ # commit a valid authz file, and run --is r which is false
+ # Should get an exit of 3.
+ hook_instance = hook_template % (repr(svntest.main.svnauthz_binary),
+ repr([('accessof',
+ '--is r A/authz')]))
+ svntest.main.create_python_hook_script(pre_commit_hook, hook_instance)
+ expected_output = wc.State(wc_dir, {'A/authz' : Item(verb='Sending')})
+ expected_status.tweak('A/authz', status=' ', wc_rev=3)
+ svntest.main.file_append(authz_path, "groucho = r\n")
+ if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+ expected_status, None, wc_dir):
+ raise svntest.Failure
+ expected_data = svntest.verify.ExpectedOutput('Exit 3\n', match_all=False)
+ verify_logfile(logfilepath, expected_data)
+
+ # break the authz file with a non-existant group and check for an exit 1.
+ expected_status.tweak('A/authz', status=' ', wc_rev=4)
+ svntest.main.file_append(authz_path, "@friends = rw\n")
+ if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+ expected_status, None, wc_dir):
+ raise svntest.Failure
+ expected_data = svntest.verify.ExpectedOutput('Exit 1\n', match_all=False)
+ verify_logfile(logfilepath, expected_data)
+
+ # break the authz file with a non-existant gropu and check for an exit 2.
+ expected_output = wc.State(wc_dir, {'A/authz' : Item(verb='Deleting')})
+ expected_status.remove('A/authz')
+ svntest.main.run_svn(None, 'rm', authz_path)
+ if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+ expected_status, None, wc_dir):
+ raise svntest.Failure
+ expected_data = svntest.verify.ExpectedOutput('Exit 2\n', match_all=False)
+ verify_logfile(logfilepath, expected_data)
+
+def svnauthz_compat_mode_file_test(sbox):
+ "test 'svnauthz-validate' compatability mode file"
+
+
+ # Create an authz file
+ (authz_fd, authz_path) = tempfile.mkstemp()
+ authz_content = "[/]\n* = rw\n"
+ svntest.main.file_write(authz_path, authz_content)
+
+ # Check a valid file.
+ svntest.actions.run_and_verify_svnauthz("svnauthz-validate on file",
+ None, None, 0, True,
+ authz_path)
+
+ # Check an invalid file.
+ svntest.main.file_append(authz_path, "x\n")
+ svntest.actions.run_and_verify_svnauthz("svnauthz-validate on invalid file",
+ None, None, 1, True,
+ authz_path)
+
+ # Remove the file.
+ os.close(authz_fd)
+ os.remove(authz_path)
+
+ # Check a non-existant file.
+ svntest.actions.run_and_verify_svnauthz(
+ "svnauthz-validate on non-existant file", None, None, 2, True,
+ authz_path
+ )
+
+
+@SkipUnless(svntest.main.is_ra_type_file)
+def svnauthz_compat_mode_repo_test(sbox):
+ "test 'svnauthz-validate' compatability mode url"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ repo_url = sbox.repo_url
+
+ # Create an authz file
+ authz_content = "[/]\n* = rw\n"
+ authz_path = os.path.join(wc_dir, 'A/authz')
+ svntest.main.file_write(authz_path, authz_content)
+ authz_url = repo_url + '/A/authz'
+
+ # Commit the file and check a URL
+ svntest.main.run_svn(None, 'add', authz_path)
+ expected_output = wc.State(wc_dir, {'A/authz' : Item(verb='Adding')})
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.add({
+ 'A/authz' : Item(status=' ', wc_rev=2),
+ })
+ if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+ expected_status, None, wc_dir):
+ raise svntest.Failure
+ svntest.actions.run_and_verify_svnauthz("svnauthz-validate on url",
+ None, None, 0, True,
+ authz_url)
+
+ # Check an invalid url.
+ svntest.main.file_append(authz_path, "x\n")
+ expected_output = wc.State(wc_dir, {'A/authz' : Item(verb='Sending')})
+ expected_status.tweak('A/authz', status=' ', wc_rev=3)
+ if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+ expected_status, None, wc_dir):
+ raise svntest.Failure
+ svntest.actions.run_and_verify_svnauthz("svnauthz-validate on invalid file",
+ None, None, 1, True,
+ authz_path)
+
+ # Check a non-existant url.
+ # Exit code really should be 2 since this is an operational error.
+ svntest.actions.run_and_verify_svnauthz(
+ "svnauthz-validate on non-existant file", None, None, 2, True,
+ repo_url + "/zilch"
+ )
+
+########################################################################
+# Run the tests
+
+
+# list all tests here, starting with None:
+test_list = [ None,
+ svnauthz_validate_file_test,
+ svnauthz_validate_repo_test,
+ svnauthz_validate_txn_test,
+ svnauthz_accessof_file_test,
+ svnauthz_accessof_repo_test,
+ svnauthz_accessof_groups_file_test,
+ svnauthz_accessof_groups_repo_test,
+ svnauthz_accessof_is_file_test,
+ svnauthz_accessof_is_repo_test,
+ svnauthz_accessof_txn_test,
+ svnauthz_compat_mode_file_test,
+ svnauthz_compat_mode_repo_test,
+ ]
+
+if __name__ == '__main__':
+ svntest.main.run_tests(test_list)
+ # NOTREACHED
+
+
+### End of file.
diff --git a/subversion/tests/cmdline/svndumpfilter_tests.py b/subversion/tests/cmdline/svndumpfilter_tests.py
index 30eaf44..93a3244 100755
--- a/subversion/tests/cmdline/svndumpfilter_tests.py
+++ b/subversion/tests/cmdline/svndumpfilter_tests.py
@@ -33,8 +33,10 @@ import tempfile
import svntest
from svntest.verify import SVNExpectedStdout, SVNExpectedStderr
-# Get some helper routines from svnadmin_tests
-from svnadmin_tests import load_and_verify_dumpstream, test_create
+# Get some helper routines
+from svnadmin_tests import (load_and_verify_dumpstream, load_dumpstream,
+ test_create)
+from svntest.main import run_svn, run_svnadmin
# (abbreviation)
Skip = svntest.testcase.Skip_deco
@@ -69,7 +71,7 @@ def filter_and_return_output(dump, bufsize=0, *varargs):
expected_errput = svntest.verify.AnyOutput
## TODO: Should we handle exit_code?
exit_code, output, errput = svntest.main.run_command_stdin(
- svntest.main.svndumpfilter_binary, expected_errput, bufsize, 1,
+ svntest.main.svndumpfilter_binary, expected_errput, bufsize, True,
dump, *varargs)
# Since we call svntest.main.run_command_stdin() in binary mode,
@@ -103,8 +105,7 @@ def reflect_dropped_renumbered_revs(sbox):
"--drop-empty-revs",
"--renumber-revs", "--quiet")
- load_and_verify_dumpstream(sbox, [], [], None, filtered_out,
- "--ignore-uuid")
+ load_dumpstream(sbox, filtered_out, "--ignore-uuid")
# Verify the svn:mergeinfo properties
url = sbox.repo_url
@@ -124,8 +125,7 @@ def reflect_dropped_renumbered_revs(sbox):
"--drop-empty-revs",
"--renumber-revs", "--quiet")
- load_and_verify_dumpstream(sbox, [], [], None, filtered_out,
- "--ignore-uuid")
+ load_dumpstream(sbox, filtered_out, "--ignore-uuid")
# Verify the svn:mergeinfo properties
expected_output = svntest.verify.UnorderedOutput([
@@ -151,7 +151,7 @@ def svndumpfilter_loses_mergeinfo(sbox):
filtered_out, filtered_err = filter_and_return_output(dumpfile, 0, "include",
"trunk", "branch1",
"--quiet")
- load_and_verify_dumpstream(sbox, [], [], None, filtered_out)
+ load_dumpstream(sbox, filtered_out)
# Verify the svn:mergeinfo properties
url = sbox.repo_url
@@ -164,6 +164,9 @@ def svndumpfilter_loses_mergeinfo(sbox):
def _simple_dumpfilter_test(sbox, dumpfile, *dumpargs):
+ """Run svndumpfilter with arguments DUMPARGS, taking input from DUMPFILE.
+ Check that the output consists of the standard Greek tree excluding
+ all paths that start with 'A/B/E', 'A/D/G' or 'A/D/H'."""
wc_dir = sbox.wc_dir
filtered_output, filtered_err = filter_and_return_output(dumpfile, 0,
@@ -171,8 +174,7 @@ def _simple_dumpfilter_test(sbox, dumpfile, *dumpargs):
*dumpargs)
# Setup our expectations
- load_and_verify_dumpstream(sbox, [], [], None, filtered_output,
- '--ignore-uuid')
+ load_dumpstream(sbox, filtered_output, '--ignore-uuid')
expected_disk = svntest.main.greek_state.copy()
expected_disk.remove('A/B/E/alpha')
expected_disk.remove('A/B/E/beta')
@@ -321,9 +323,9 @@ def filter_mergeinfo_revs_outside_of_dump_stream(sbox):
# --skip-missing-merge-soruces which should strip out any revisions < 6.
# Then we'll load the filtered result into an empty repository. This
# should offset the incoming mergeinfo by -5. In addition, any mergeinfo
- # revisions that are adjusted to r1 should be removed because that implies
- # a merge of -r0:1, which is impossible. The resulting mergeinfo should
- # look like this:
+ # referring to the initial revision in the dump file (r6) should be
+ # removed because the change it refers to (r5:6) is not wholly within the
+ # dumpfile. The resulting mergeinfo should look like this:
#
# Properties on 'branches/B1':
# svn:mergeinfo
@@ -346,8 +348,7 @@ def filter_mergeinfo_revs_outside_of_dump_stream(sbox):
"include", "trunk", "branches",
"--skip-missing-merge-sources",
"--quiet")
- load_and_verify_dumpstream(sbox, [], [], None, filtered_dumpfile2,
- '--ignore-uuid')
+ load_dumpstream(sbox, filtered_dumpfile2, '--ignore-uuid')
# Check the resulting mergeinfo.
url = sbox.repo_url + "/branches"
expected_output = svntest.verify.UnorderedOutput([
@@ -374,8 +375,7 @@ def filter_mergeinfo_revs_outside_of_dump_stream(sbox):
skeleton_dumpfile = open(os.path.join(os.path.dirname(sys.argv[0]),
'svnadmin_tests_data',
'skeleton_repos.dump')).read()
- load_and_verify_dumpstream(sbox, [], [], None, skeleton_dumpfile,
- '--ignore-uuid')
+ load_dumpstream(sbox, skeleton_dumpfile, '--ignore-uuid')
partial_dump2 = os.path.join(os.path.dirname(sys.argv[0]),
'svndumpfilter_tests_data',
'mergeinfo_included_partial.dump')
@@ -477,9 +477,8 @@ def filter_mergeinfo_revs_outside_of_dump_stream(sbox):
# Now actually load the filtered dump into the skeleton repository
# and then check the resulting mergeinfo.
- load_and_verify_dumpstream(sbox, [], [], None, filtered_dumpfile2,
- '--parent-dir', '/Projects/Project-X',
- '--ignore-uuid')
+ load_dumpstream(sbox, filtered_dumpfile2,
+ '--parent-dir', '/Projects/Project-X', '--ignore-uuid')
url = sbox.repo_url + "/Projects/Project-X/branches"
expected_output = svntest.verify.UnorderedOutput([
@@ -560,13 +559,12 @@ def dropped_but_not_renumbered_empty_revs(sbox):
full_dump_contents = open(full_dump).read()
filtered_dumpfile, filtered_out = filter_and_return_output(
full_dump_contents,
- 8192, # Set a sufficiently large bufsize to avoid a deadlock
+ 16384, # Set a sufficiently large bufsize to avoid a deadlock
"exclude", "branches/B2",
"--skip-missing-merge-sources", "--drop-empty-revs")
# Now load the filtered dump into an empty repository.
- load_and_verify_dumpstream(sbox, [], [], None, filtered_dumpfile,
- '--ignore-uuid')
+ load_dumpstream(sbox, filtered_dumpfile, '--ignore-uuid')
# The mergeinfo in the newly loaded repos should have no references to the
# dropped branch and the remaining merge source revs should be remapped to
@@ -596,6 +594,179 @@ def dropped_but_not_renumbered_empty_revs(sbox):
'propget', 'svn:mergeinfo', '-R',
sbox.repo_url)
+#----------------------------------------------------------------------
+def match_empty_prefix(sbox):
+ "svndumpfilter with an empty prefix"
+
+ dumpfile_location = os.path.join(os.path.dirname(sys.argv[0]),
+ 'svndumpfilter_tests_data',
+ 'greek_tree.dump')
+ dumpfile = open(dumpfile_location).read()
+
+ def test(sbox, dumpfile, *dumpargs):
+ """Run svndumpfilter with DUMPFILE as the input lines, load
+ the result and check it matches EXPECTED_DISK, EXPECTED_OUTPUT,
+ EXPECTED_STATUS."""
+
+ # Filter the Greek tree dump
+ filtered_output, filtered_err = filter_and_return_output(dumpfile, 0,
+ '--quiet',
+ *dumpargs)
+ if filtered_err:
+ raise verify.UnexpectedStderr(filtered_err)
+
+ # Load the filtered dump into a repo and check the result
+ test_create(sbox)
+ load_dumpstream(sbox, filtered_output, '--ignore-uuid')
+ svntest.actions.run_and_verify_update(sbox.wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status)
+
+ # Test excluding everything
+ expected_disk = svntest.wc.State(sbox.wc_dir, {})
+ expected_output = svntest.wc.State(sbox.wc_dir, {})
+ expected_status = svntest.wc.State(sbox.wc_dir, {
+ '': Item(status=' ', wc_rev=1) })
+
+ test(sbox, dumpfile, 'exclude', '')
+
+ # Test including everything
+ expected_disk = svntest.main.greek_state.copy()
+ expected_output = svntest.main.greek_state.copy().tweak(status='A ')
+ expected_status = svntest.actions.get_virginal_state(sbox.wc_dir, 1)
+
+ test(sbox, dumpfile, 'include', '', '/A/D/G')
+
+ # Note: We also ought to test the '--pattern' option, including or
+ # excluding a pattern of '*'. However, passing a wildcard parameter
+ # is troublesome on Windows: it may be expanded, depending on whether
+ # the svndumpfilter executable was linked with 'setargv.obj', and there
+ # doesn't seem to be a consistent way to quote such an argument to
+ # prevent expansion.
+
+@Issue(2760)
+def accepts_deltas(sbox):
+ "accepts deltas in the input"
+ # Accept format v3 (as created by 'svnadmin --deltas' or svnrdump).
+
+ test_create(sbox)
+ dumpfile_location = os.path.join(os.path.dirname(sys.argv[0]),
+ 'svndumpfilter_tests_data',
+ 'simple_v3.dump')
+ dump_in = open(dumpfile_location).read()
+
+ dump_out, err = filter_and_return_output(dump_in, 0, "include",
+ "trunk", "--quiet")
+
+ expected_revs = [
+ svntest.wc.State('', {
+ 'trunk' : svntest.wc.StateItem(props={'soup': 'No soup for you!'}),
+ 'trunk/foo' : svntest.wc.StateItem("This is file 'foo'.\n"),
+ }),
+ svntest.wc.State('', {
+ 'trunk' : svntest.wc.StateItem(props={'soup': 'No soup for you!'}),
+ 'trunk/foo' : svntest.wc.StateItem("This is file 'foo'.\n"),
+ }),
+ svntest.wc.State('', {
+ 'trunk' : svntest.wc.StateItem(props={'story': 'Yada yada yada...'}),
+ 'trunk/foo' : svntest.wc.StateItem("This is file 'foo'.\n"),
+ }),
+ ]
+
+ load_and_verify_dumpstream(sbox, [], [], expected_revs, True, dump_out,
+ '--ignore-uuid')
+
+
+
+@Issue(4234)
+def dumpfilter_targets_expect_leading_slash_prefixes(sbox):
+ "dumpfilter targets expect leading '/' in prefixes"
+ ## See http://subversion.tigris.org/issues/show_bug.cgi?id=4234. ##
+
+ test_create(sbox)
+
+ dumpfile_location = os.path.join(os.path.dirname(sys.argv[0]),
+ 'svndumpfilter_tests_data',
+ 'greek_tree.dump')
+ dumpfile = open(dumpfile_location).read()
+
+ (fd, targets_file) = tempfile.mkstemp(dir=svntest.main.temp_dir)
+ try:
+ targets = open(targets_file, 'w')
+
+ # Removing the leading slash in path prefixes should work.
+ targets.write('A/D/H\n')
+ targets.write('A/D/G\n')
+ targets.close()
+ _simple_dumpfilter_test(sbox, dumpfile,
+ 'exclude', '/A/B/E', '--targets', targets_file)
+ finally:
+ os.close(fd)
+ os.remove(targets_file)
+
+@Issue(3681)
+def drop_all_empty_revisions(sbox):
+ "drop all empty revisions except revision 0"
+
+ dumpfile_location = os.path.join(os.path.dirname(sys.argv[0]),
+ 'svndumpfilter_tests_data',
+ 'empty_revisions.dump')
+ dump_contents = open(dumpfile_location).read()
+
+ filtered_dumpfile, filtered_err = filter_and_return_output(
+ dump_contents,
+ 8192, # Set a sufficiently large bufsize to avoid a deadlock
+ "include", "branch1",
+ "--drop-all-empty-revs")
+
+ expected_err = [
+ "Including (and dropping empty revisions for) prefixes:\n",
+ " '/branch1'\n",
+ "\n",
+ "Revision 0 committed as 0.\n",
+ "Revision 1 skipped.\n",
+ "Revision 2 committed as 2.\n",
+ "Revision 3 skipped.\n",
+ "\n",
+ "Dropped 2 revisions.\n",
+ "\n"]
+
+ svntest.verify.verify_outputs(
+ "Actual svndumpfilter stderr does not agree with expected stderr",
+ None, filtered_err, None, expected_err)
+
+ # Test with --renumber-revs option.
+ filtered_dumpfile, filtered_err = filter_and_return_output(
+ dump_contents,
+ 8192, # Set a sufficiently large bufsize to avoid a deadlock
+ "include", "branch1",
+ "--drop-all-empty-revs",
+ "--renumber-revs")
+
+ expected_err = [
+ "Including (and dropping empty revisions for) prefixes:\n",
+ " '/branch1'\n",
+ "\n",
+ "Revision 0 committed as 0.\n",
+ "Revision 1 skipped.\n",
+ "Revision 2 committed as 1.\n",
+ "Revision 3 skipped.\n",
+ "\n",
+ "Dropped 2 revisions.\n",
+ "\n",
+ "Revisions renumbered as follows:\n",
+ " 3 => (dropped)\n",
+ " 2 => 1\n",
+ " 1 => (dropped)\n",
+ " 0 => 0\n",
+ "\n"]
+
+ svntest.verify.verify_outputs(
+ "Actual svndumpfilter stderr does not agree with expected stderr",
+ None, filtered_err, None, expected_err)
+
+
########################################################################
# Run the tests
@@ -608,6 +779,10 @@ test_list = [ None,
dumpfilter_with_patterns,
filter_mergeinfo_revs_outside_of_dump_stream,
dropped_but_not_renumbered_empty_revs,
+ match_empty_prefix,
+ accepts_deltas,
+ dumpfilter_targets_expect_leading_slash_prefixes,
+ drop_all_empty_revisions,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/svndumpfilter_tests_data/empty_revisions.dump b/subversion/tests/cmdline/svndumpfilter_tests_data/empty_revisions.dump
new file mode 100644
index 0000000..bc1df6c
--- /dev/null
+++ b/subversion/tests/cmdline/svndumpfilter_tests_data/empty_revisions.dump
@@ -0,0 +1,94 @@
+SVN-fs-dump-format-version: 2
+
+UUID: 40278d28-80c2-4ce3-9606-68ce4b659d51
+
+Revision-number: 0
+Prop-content-length: 56
+Content-length: 56
+
+K 8
+svn:date
+V 27
+2012-06-24T14:02:12.037632Z
+PROPS-END
+
+Revision-number: 1
+Prop-content-length: 105
+Content-length: 105
+
+K 10
+svn:author
+V 7
+jrandom
+K 8
+svn:date
+V 27
+2012-06-24T14:02:13.264066Z
+K 7
+svn:log
+V 4
+init
+PROPS-END
+
+Revision-number: 2
+Prop-content-length: 115
+Content-length: 115
+
+K 10
+svn:author
+V 7
+jrandom
+K 8
+svn:date
+V 27
+2012-06-24T14:02:14.070370Z
+K 7
+svn:log
+V 13
+make a branch
+PROPS-END
+
+Node-path: branch1
+Node-kind: dir
+Node-action: add
+Prop-content-length: 41
+Content-length: 41
+
+K 4
+soup
+V 16
+No soup for you!
+PROPS-END
+
+
+Node-path: branch1/foo
+Node-kind: file
+Node-action: add
+Prop-content-length: 10
+Text-content-length: 20
+Text-content-md5: 6f2d0469e1b4e16adf755b7e18f09d8a
+Text-content-sha1: 3df9ea3dfa67b8dea7968ecfd30e726285a2b383
+Content-length: 30
+
+PROPS-END
+This is file 'foo'.
+
+
+Revision-number: 3
+Prop-content-length: 112
+Content-length: 112
+
+K 10
+svn:author
+V 7
+jrandom
+K 8
+svn:date
+V 27
+2012-06-24T14:02:15.135672Z
+K 7
+svn:log
+V 10
+prop delta
+PROPS-END
+
diff --git a/subversion/tests/cmdline/svndumpfilter_tests_data/simple_v3.dump b/subversion/tests/cmdline/svndumpfilter_tests_data/simple_v3.dump
new file mode 100644
index 0000000..d145f74
--- /dev/null
+++ b/subversion/tests/cmdline/svndumpfilter_tests_data/simple_v3.dump
Binary files differ
diff --git a/subversion/tests/cmdline/svneditor.bat b/subversion/tests/cmdline/svneditor.bat
index 3d4ff3d..36e033d 100644
--- a/subversion/tests/cmdline/svneditor.bat
+++ b/subversion/tests/cmdline/svneditor.bat
@@ -19,7 +19,7 @@ rem specific language governing permissions and limitations
rem under the License.
rem
rem
-rem the svneditor.py script is expected to be in the same directory as the
+rem the svneditor.py script is expected to be in the same directory as the
rem .bat file
rem SVN_TEST_PYTHON set by svntest/main.py
"%SVN_TEST_PYTHON%" "%~dp0\svneditor.py" %*
diff --git a/subversion/tests/cmdline/svnlook_tests.py b/subversion/tests/cmdline/svnlook_tests.py
index b438eef..f7c620b 100755
--- a/subversion/tests/cmdline/svnlook_tests.py
+++ b/subversion/tests/cmdline/svnlook_tests.py
@@ -25,11 +25,14 @@
######################################################################
# General modules
-import re, os
+import re, os, logging
+
+logger = logging.getLogger()
# Our testing module
import svntest
+from prop_tests import binary_mime_type_on_text_file_warning
# (abbreviation)
Skip = svntest.testcase.Skip_deco
@@ -46,19 +49,21 @@ Item = svntest.wc.StateItem
# Convenience functions to make writing more tests easier
def run_svnlook(*varargs):
- """Run svnlook with VARARGS, returns stdout as list of lines.
- Raises Failure if any stderr messages."""
+ """Run svnlook with VARARGS, returns exit code as int; stdout, stderr as
+ list of lines (including line terminators).
+ Raises Failure if any stderr messages.
+ """
exit_code, output, dummy_errput = svntest.main.run_command(
- svntest.main.svnlook_binary, 0, 0, *varargs)
+ svntest.main.svnlook_binary, 0, False, *varargs)
return output
def expect(tag, expected, got):
if expected != got:
- print("When testing: %s" % tag)
- print("Expected: %s" % expected)
- print(" Got: %s" % got)
+ logger.warn("When testing: %s", tag)
+ logger.warn("Expected: %s", expected)
+ logger.warn(" Got: %s", got)
raise svntest.Failure
@@ -96,7 +101,7 @@ def test_misc(sbox):
# give the repo a new UUID
uuid = "01234567-89ab-cdef-89ab-cdef01234567"
- svntest.main.run_command_stdin(svntest.main.svnadmin_binary, None, 0, 1,
+ svntest.main.run_command_stdin(svntest.main.svnadmin_binary, None, 0, True,
["SVN-fs-dump-format-version: 2\n",
"\n",
"UUID: ", uuid, "\n",
@@ -165,7 +170,7 @@ def test_misc(sbox):
# We cannot rely on svn:author's presence. ra_svn doesn't set it.
if not (proplist == [ 'svn:author', 'svn:date', 'svn:log' ]
or proplist == [ 'svn:date', 'svn:log' ]):
- print("Unexpected result from proplist: %s" % proplist)
+ logger.warn("Unexpected result from proplist: %s", proplist)
raise svntest.Failure
prop_name = 'foo:bar-baz-quux'
@@ -415,12 +420,12 @@ def tree_non_recursive(sbox):
treelist = run_svnlook('tree', '--non-recursive', repo_dir)
for entry in treelist:
if not entry.rstrip() in expected_results_root:
- print("Unexpected result from tree with --non-recursive:")
- print(" entry : %s" % entry.rstrip())
+ logger.warn("Unexpected result from tree with --non-recursive:")
+ logger.warn(" entry : %s", entry.rstrip())
raise svntest.Failure
if len(treelist) != len(expected_results_root):
- print("Expected %i output entries, found %i"
- % (len(expected_results_root), len(treelist)))
+ logger.warn("Expected %i output entries, found %i",
+ len(expected_results_root), len(treelist))
raise svntest.Failure
# check the output of svnlook --non-recursive on a
@@ -428,12 +433,12 @@ def tree_non_recursive(sbox):
treelist = run_svnlook('tree', '--non-recursive', repo_dir, '/A/B')
for entry in treelist:
if not entry.rstrip() in expected_results_deep:
- print("Unexpected result from tree with --non-recursive:")
- print(" entry : %s" % entry.rstrip())
+ logger.warn("Unexpected result from tree with --non-recursive:")
+ logger.warn(" entry : %s", entry.rstrip())
raise svntest.Failure
if len(treelist) != len(expected_results_deep):
- print("Expected %i output entries, found %i"
- % (len(expected_results_deep), len(treelist)))
+ logger.warn("Expected %i output entries, found %i",
+ len(expected_results_deep), len(treelist))
raise svntest.Failure
#----------------------------------------------------------------------
@@ -502,6 +507,8 @@ def diff_ignore_eolstyle(sbox):
repo_dir = sbox.repo_dir
wc_dir = sbox.wc_dir
+ # CRLF is a string that will match a CRLF sequence read from a text file.
+ # ### On Windows, we assume CRLF will be read as LF, so it's a poor test.
if os.name == 'nt':
crlf = '\n'
else:
@@ -572,7 +579,8 @@ def diff_binary(sbox):
# Set A/mu to a binary mime-type, tweak its text, and commit.
mu_path = os.path.join(wc_dir, 'A', 'mu')
svntest.main.file_append(mu_path, 'new appended text for mu')
- svntest.main.run_svn(None, 'propset', 'svn:mime-type',
+ svntest.main.run_svn(binary_mime_type_on_text_file_warning,
+ 'propset', 'svn:mime-type',
'application/octet-stream', mu_path)
svntest.main.run_svn(None, 'ci', '-m', 'log msg', mu_path)
@@ -641,7 +649,7 @@ svnlook_bin=%s
fp = open(os.path.join(sys.argv[1], 'hooks.log'), 'wb')
def output_command(fp, cmd, opt):
command = [svnlook_bin, cmd, '-t', sys.argv[2], sys.argv[1]] + opt
- process = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False)
+ process = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False, bufsize=-1)
(output, errors) = process.communicate()
status = process.returncode
fp.write(output)
@@ -694,13 +702,36 @@ fp.close()"""
# Now check the logfile
expected_data = [ 'bogus_val\n',
'bogus_rev_val\n',
+ "Properties on '/A':\n",
' bogus_prop\n',
' svn:log\n', ' svn:author\n',
- # internal property, not really expected
- ' svn:check-locks\n',
- ' bogus_rev_prop\n', ' svn:date\n']
+ ' svn:check-locks\n', # internal prop, not really expected
+ ' bogus_rev_prop\n',
+ ' svn:date\n',
+ ' svn:txn-client-compat-version\n',
+ ]
+ # ra_dav and ra_svn add the user-agent ephemeral property
+ if svntest.main.is_ra_type_dav() or svntest.main.is_ra_type_svn():
+ expected_data.append(' svn:txn-user-agent\n')
verify_logfile(logfilepath, svntest.verify.UnorderedOutput(expected_data))
+def property_delete(sbox):
+ "property delete"
+
+ sbox.build()
+ repo_dir = sbox.repo_dir
+
+ sbox.simple_propset('foo', 'bar', 'A/mu')
+ sbox.simple_commit()
+ sbox.simple_propdel('foo', 'A/mu')
+ sbox.simple_commit()
+
+ # XFail since r1293375, changed and diff produce no output on a
+ # property delete
+ svntest.actions.run_and_verify_svnlook(None, ["_U A/mu\n"], [],
+ 'changed', repo_dir)
+
+
########################################################################
# Run the tests
@@ -719,6 +750,7 @@ test_list = [ None,
diff_binary,
test_filesize,
test_txn_flag,
+ property_delete,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/svnmucc_tests.py b/subversion/tests/cmdline/svnmucc_tests.py
index 64c857d..604ee67 100755
--- a/subversion/tests/cmdline/svnmucc_tests.py
+++ b/subversion/tests/cmdline/svnmucc_tests.py
@@ -25,6 +25,7 @@
######################################################################
import svntest
+import re
XFail = svntest.testcase.XFail_deco
Issues = svntest.testcase.Issues_deco
@@ -38,18 +39,386 @@ def reject_bogus_mergeinfo(sbox):
sbox.build(create_wc=False)
- expected_error = ".*(E200020.*Invalid revision|E175008.*property change)"
+ expected_error = ".*(E200020.*Invalid revision|E175002.*PROPPATCH)"
# At present this tests the server, but if we ever make svnmucc
# validate the mergeinfo up front then it will only test the client
svntest.actions.run_and_verify_svnmucc(None, [], expected_error,
'propset', 'svn:mergeinfo', '/B:0',
+ '-m', 'log msg',
sbox.repo_url + '/A')
+_svnmucc_re = re.compile('^(r[0-9]+) committed by jrandom at (.*)$')
+_log_re = re.compile('^ ([ADRM] /[^\(]+($| \(from .*:[0-9]+\)$))')
+_err_re = re.compile('^svnmucc: (.*)$')
+
+def test_svnmucc(repo_url, expected_path_changes, *varargs):
+ """Run svnmucc with the list of SVNMUCC_ARGS arguments. Verify that
+ its run results in a new commit with 'svn log -rHEAD' changed paths
+ that match the list of EXPECTED_PATH_CHANGES."""
+
+ # First, run svnmucc.
+ exit_code, outlines, errlines = svntest.main.run_svnmucc('-U', repo_url,
+ *varargs)
+ if errlines:
+ raise svntest.main.SVNCommitFailure(str(errlines))
+ if len(outlines) != 1 or not _svnmucc_re.match(outlines[0]):
+ raise svntest.main.SVNLineUnequal(str(outlines))
+
+ # Now, run 'svn log -vq -rHEAD'
+ changed_paths = []
+ exit_code, outlines, errlines = \
+ svntest.main.run_svn(None, 'log', '-vqrHEAD', repo_url)
+ if errlines:
+ raise svntest.Failure("Unable to verify commit with 'svn log': %s"
+ % (str(errlines)))
+ for line in outlines:
+ match = _log_re.match(line)
+ if match:
+ changed_paths.append(match.group(1).rstrip('\n\r'))
+
+ expected_path_changes.sort()
+ changed_paths.sort()
+ if changed_paths != expected_path_changes:
+ raise svntest.Failure("Logged path changes differ from expectations\n"
+ " expected: %s\n"
+ " actual: %s" % (str(expected_path_changes),
+ str(changed_paths)))
+
+def xtest_svnmucc(repo_url, expected_errors, *varargs):
+ """Run svnmucc with the list of SVNMUCC_ARGS arguments. Verify that
+ its run results match the list of EXPECTED_ERRORS."""
+
+ # First, run svnmucc.
+ exit_code, outlines, errlines = svntest.main.run_svnmucc('-U', repo_url,
+ *varargs)
+ errors = []
+ for line in errlines:
+ match = _err_re.match(line)
+ if match:
+ errors.append(line.rstrip('\n\r'))
+ if errors != expected_errors:
+ raise svntest.main.SVNUnmatchedError(str(errors))
+
+
+def basic_svnmucc(sbox):
+ "basic svnmucc tests"
+
+ sbox.build()
+ empty_file = sbox.ospath('empty')
+ svntest.main.file_append(empty_file, '')
+
+ # revision 2
+ test_svnmucc(sbox.repo_url,
+ ['A /foo'
+ ], # ---------
+ '-m', 'log msg',
+ 'mkdir', 'foo')
+
+ # revision 3
+ test_svnmucc(sbox.repo_url,
+ ['A /z.c',
+ ], # ---------
+ '-m', 'log msg',
+ 'put', empty_file, 'z.c')
+
+ # revision 4
+ test_svnmucc(sbox.repo_url,
+ ['A /foo/z.c (from /z.c:3)',
+ 'A /foo/bar (from /foo:3)',
+ ], # ---------
+ '-m', 'log msg',
+ 'cp', '3', 'z.c', 'foo/z.c',
+ 'cp', '3', 'foo', 'foo/bar')
+
+ # revision 5
+ test_svnmucc(sbox.repo_url,
+ ['A /zig (from /foo:4)',
+ 'D /zig/bar',
+ 'D /foo',
+ 'A /zig/zag (from /foo:4)',
+ ], # ---------
+ '-m', 'log msg',
+ 'cp', '4', 'foo', 'zig',
+ 'rm', 'zig/bar',
+ 'mv', 'foo', 'zig/zag')
+
+ # revision 6
+ test_svnmucc(sbox.repo_url,
+ ['D /z.c',
+ 'A /zig/zag/bar/y.c (from /z.c:5)',
+ 'A /zig/zag/bar/x.c (from /z.c:3)',
+ ], # ---------
+ '-m', 'log msg',
+ 'mv', 'z.c', 'zig/zag/bar/y.c',
+ 'cp', '3', 'z.c', 'zig/zag/bar/x.c')
+
+ # revision 7
+ test_svnmucc(sbox.repo_url,
+ ['D /zig/zag/bar/y.c',
+ 'A /zig/zag/bar/y y.c (from /zig/zag/bar/y.c:6)',
+ 'A /zig/zag/bar/y%20y.c (from /zig/zag/bar/y.c:6)',
+ ], # ---------
+ '-m', 'log msg',
+ 'mv', 'zig/zag/bar/y.c', 'zig/zag/bar/y%20y.c',
+ 'cp', 'HEAD', 'zig/zag/bar/y.c', 'zig/zag/bar/y%2520y.c')
+
+ # revision 8
+ test_svnmucc(sbox.repo_url,
+ ['D /zig/zag/bar/y y.c',
+ 'A /zig/zag/bar/z z1.c (from /zig/zag/bar/y y.c:7)',
+ 'A /zig/zag/bar/z%20z.c (from /zig/zag/bar/y%20y.c:7)',
+ 'A /zig/zag/bar/z z2.c (from /zig/zag/bar/y y.c:7)',
+ ], #---------
+ '-m', 'log msg',
+ 'mv', 'zig/zag/bar/y%20y.c', 'zig/zag/bar/z z1.c',
+ 'cp', 'HEAD', 'zig/zag/bar/y%2520y.c', 'zig/zag/bar/z%2520z.c',
+ 'cp', 'HEAD', 'zig/zag/bar/y y.c', 'zig/zag/bar/z z2.c')
+
+
+ # revision 9
+ test_svnmucc(sbox.repo_url,
+ ['D /zig/zag',
+ 'A /zig/foo (from /zig/zag:8)',
+ 'D /zig/foo/bar/z%20z.c',
+ 'D /zig/foo/bar/z z2.c',
+ 'R /zig/foo/bar/z z1.c (from /zig/zag/bar/x.c:6)',
+ ], #---------
+ '-m', 'log msg',
+ 'mv', 'zig/zag', 'zig/foo',
+ 'rm', 'zig/foo/bar/z z1.c',
+ 'rm', 'zig/foo/bar/z%20z2.c',
+ 'rm', 'zig/foo/bar/z%2520z.c',
+ 'cp', '6', 'zig/zag/bar/x.c', 'zig/foo/bar/z%20z1.c')
+
+ # revision 10
+ test_svnmucc(sbox.repo_url,
+ ['R /zig/foo/bar (from /zig/z.c:9)',
+ ], #---------
+ '-m', 'log msg',
+ 'rm', 'zig/foo/bar',
+ 'cp', '9', 'zig/z.c', 'zig/foo/bar')
+
+ # revision 11
+ test_svnmucc(sbox.repo_url,
+ ['R /zig/foo/bar (from /zig/foo/bar:9)',
+ 'D /zig/foo/bar/z z1.c',
+ ], #---------
+ '-m', 'log msg',
+ 'rm', 'zig/foo/bar',
+ 'cp', '9', 'zig/foo/bar', 'zig/foo/bar',
+ 'rm', 'zig/foo/bar/z%20z1.c')
+
+ # revision 12
+ test_svnmucc(sbox.repo_url,
+ ['R /zig/foo (from /zig/foo/bar:11)',
+ ], #---------
+ '-m', 'log msg',
+ 'rm', 'zig/foo',
+ 'cp', 'head', 'zig/foo/bar', 'zig/foo')
+
+ # revision 13
+ test_svnmucc(sbox.repo_url,
+ ['D /zig',
+ 'A /foo (from /foo:4)',
+ 'A /foo/foo (from /foo:4)',
+ 'A /foo/foo/foo (from /foo:4)',
+ 'D /foo/foo/bar',
+ 'R /foo/foo/foo/bar (from /foo:4)',
+ ], #---------
+ '-m', 'log msg',
+ 'rm', 'zig',
+ 'cp', '4', 'foo', 'foo',
+ 'cp', '4', 'foo', 'foo/foo',
+ 'cp', '4', 'foo', 'foo/foo/foo',
+ 'rm', 'foo/foo/bar',
+ 'rm', 'foo/foo/foo/bar',
+ 'cp', '4', 'foo', 'foo/foo/foo/bar')
+
+ # revision 14
+ test_svnmucc(sbox.repo_url,
+ ['A /boozle (from /foo:4)',
+ 'A /boozle/buz',
+ 'A /boozle/buz/nuz',
+ ], #---------
+ '-m', 'log msg',
+ 'cp', '4', 'foo', 'boozle',
+ 'mkdir', 'boozle/buz',
+ 'mkdir', 'boozle/buz/nuz')
+
+ # revision 15
+ test_svnmucc(sbox.repo_url,
+ ['A /boozle/buz/svnmucc-test.py',
+ 'A /boozle/guz (from /boozle/buz:14)',
+ 'A /boozle/guz/svnmucc-test.py',
+ ], #---------
+ '-m', 'log msg',
+ 'put', empty_file, 'boozle/buz/svnmucc-test.py',
+ 'cp', '14', 'boozle/buz', 'boozle/guz',
+ 'put', empty_file, 'boozle/guz/svnmucc-test.py')
+
+ # revision 16
+ test_svnmucc(sbox.repo_url,
+ ['M /boozle/buz/svnmucc-test.py',
+ 'R /boozle/guz/svnmucc-test.py',
+ ], #---------
+ '-m', 'log msg',
+ 'put', empty_file, 'boozle/buz/svnmucc-test.py',
+ 'rm', 'boozle/guz/svnmucc-test.py',
+ 'put', empty_file, 'boozle/guz/svnmucc-test.py')
+
+ # revision 17
+ test_svnmucc(sbox.repo_url,
+ ['R /foo/bar (from /foo/foo:16)'
+ ], #---------
+ '-m', 'log msg',
+ 'rm', 'foo/bar',
+ 'cp', '16', 'foo/foo', 'foo/bar',
+ 'propset', 'testprop', 'true', 'foo/bar')
+
+ # revision 18
+ test_svnmucc(sbox.repo_url,
+ ['M /foo/bar'
+ ], #---------
+ '-m', 'log msg',
+ 'propdel', 'testprop', 'foo/bar')
+
+ # revision 19
+ test_svnmucc(sbox.repo_url,
+ ['M /foo/z.c',
+ 'M /foo/foo',
+ ], #---------
+ '-m', 'log msg',
+ 'propset', 'testprop', 'true', 'foo/z.c',
+ 'propset', 'testprop', 'true', 'foo/foo')
+
+ # revision 20
+ test_svnmucc(sbox.repo_url,
+ ['M /foo/z.c',
+ 'M /foo/foo',
+ ], #---------
+ '-m', 'log msg',
+ 'propsetf', 'testprop', empty_file, 'foo/z.c',
+ 'propsetf', 'testprop', empty_file, 'foo/foo')
+
+ # Expected missing revision error
+ xtest_svnmucc(sbox.repo_url,
+ ["svnmucc: E200004: 'a' is not a revision"
+ ], #---------
+ '-m', 'log msg',
+ 'cp', 'a', 'b')
+
+ # Expected cannot be younger error
+ xtest_svnmucc(sbox.repo_url,
+ ['svnmucc: E205000: Copy source revision cannot be younger ' +
+ 'than base revision',
+ ], #---------
+ '-m', 'log msg',
+ 'cp', '42', 'a', 'b')
+
+ # Expected already exists error
+ xtest_svnmucc(sbox.repo_url,
+ ["svnmucc: E125002: 'foo' already exists",
+ ], #---------
+ '-m', 'log msg',
+ 'cp', '17', 'a', 'foo')
+
+ # Expected copy_src already exists error
+ xtest_svnmucc(sbox.repo_url,
+ ["svnmucc: E125002: 'a/bar' (from 'foo/bar:17') already exists",
+ ], #---------
+ '-m', 'log msg',
+ 'cp', '17', 'foo', 'a',
+ 'cp', '17', 'foo/foo', 'a/bar')
+
+ # Expected not found error
+ xtest_svnmucc(sbox.repo_url,
+ ["svnmucc: E125002: 'a' not found",
+ ], #---------
+ '-m', 'log msg',
+ 'cp', '17', 'a', 'b')
+
+
+def propset_root_internal(sbox, target):
+ ## propset on ^/
+ svntest.actions.run_and_verify_svnmucc(None, None, [],
+ '-m', 'log msg',
+ 'propset', 'foo', 'bar',
+ target)
+ svntest.actions.run_and_verify_svn(None, 'bar', [],
+ 'propget', '--strict', 'foo',
+ target)
+
+ ## propdel on ^/
+ svntest.actions.run_and_verify_svnmucc(None, None, [],
+ '-m', 'log msg',
+ 'propdel', 'foo',
+ target)
+ svntest.actions.run_and_verify_svn(None, [], [],
+ 'propget', '--strict', 'foo',
+ target)
+
+@Issues(3663)
+def propset_root(sbox):
+ "propset/propdel on repos root"
+
+ sbox.build(create_wc=False)
+ propset_root_internal(sbox, sbox.repo_url)
+ propset_root_internal(sbox, sbox.repo_url + '/iota')
+
+
+def too_many_log_messages(sbox):
+ "test log message mutual exclusivity checks"
+
+ sbox.build() # would use read-only=True, but need a place to stuff msg_file
+ msg_file = sbox.ospath('svnmucc_msg')
+ svntest.main.file_append(msg_file, 'some log message')
+ err_msg = ["svnmucc: E205000: --message (-m), --file (-F), and "
+ "--with-revprop=svn:log are mutually exclusive"]
+
+ xtest_svnmucc(sbox.repo_url, err_msg,
+ '--non-interactive',
+ '-m', 'log msg',
+ '-F', msg_file,
+ 'mkdir', 'A/subdir')
+ xtest_svnmucc(sbox.repo_url, err_msg,
+ '--non-interactive',
+ '-m', 'log msg',
+ '--with-revprop', 'svn:log=proppy log message',
+ 'mkdir', 'A/subdir')
+ xtest_svnmucc(sbox.repo_url, err_msg,
+ '--non-interactive',
+ '-F', msg_file,
+ '--with-revprop', 'svn:log=proppy log message',
+ 'mkdir', 'A/subdir')
+ xtest_svnmucc(sbox.repo_url, err_msg,
+ '--non-interactive',
+ '-m', 'log msg',
+ '-F', msg_file,
+ '--with-revprop', 'svn:log=proppy log message',
+ 'mkdir', 'A/subdir')
+
+@Issues(3418)
+def no_log_msg_non_interactive(sbox):
+ "test non-interactive without a log message"
+
+ sbox.build(create_wc=False)
+ xtest_svnmucc(sbox.repo_url,
+ ["svnmucc: E205001: Cannot invoke editor to get log message "
+ "when non-interactive"
+ ], #---------
+ '--non-interactive',
+ 'mkdir', 'A/subdir')
+
+
######################################################################
test_list = [ None,
reject_bogus_mergeinfo,
+ basic_svnmucc,
+ propset_root,
+ too_many_log_messages,
+ no_log_msg_non_interactive,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/svnrdump_tests.py b/subversion/tests/cmdline/svnrdump_tests.py
index 5801d56..334bd15 100755
--- a/subversion/tests/cmdline/svnrdump_tests.py
+++ b/subversion/tests/cmdline/svnrdump_tests.py
@@ -94,13 +94,15 @@ def compare_repos_dumps(svnrdump_sbox, svnadmin_dumpfile):
def run_dump_test(sbox, dumpfile_name, expected_dumpfile_name = None,
subdir = None, bypass_prop_validation = False,
- ignore_base_checksums = False):
+ ignore_base_checksums = False, extra_options = []):
+
"""Load a dumpfile using 'svnadmin load', dump it with 'svnrdump
dump' and check that the same dumpfile is produced or that
expected_dumpfile_name is produced if provided. Additionally, the
- subdir argument appends itself to the URL"""
+ subdir argument appends itself to the URL. EXTRA_OPTIONS is an
+ array of optional additional options to pass to 'svnrdump dump'."""
- # Create an empty sanbox repository
+ # Create an empty sandbox repository
build_repos(sbox)
# This directory contains all the dump files
@@ -121,10 +123,10 @@ def run_dump_test(sbox, dumpfile_name, expected_dumpfile_name = None,
repo_url = repo_url + subdir
# Create a dump file using svnrdump
+ opts = extra_options + ['-q', 'dump', repo_url]
svnrdump_dumpfile = \
svntest.actions.run_and_verify_svnrdump(None, svntest.verify.AnyOutput,
- [], 0, '-q', 'dump',
- repo_url)
+ [], 0, *opts)
if expected_dumpfile_name:
svnadmin_dumpfile = open(os.path.join(svnrdump_tests_dir,
@@ -136,13 +138,17 @@ def run_dump_test(sbox, dumpfile_name, expected_dumpfile_name = None,
if not l.startswith('Text-delta-base-md5')]
svnrdump_dumpfile = [l for l in svnrdump_dumpfile
if not l.startswith('Text-delta-base-md5')]
+ svnadmin_dumpfile = [l for l in svnadmin_dumpfile
+ if not mismatched_headers_re.match(l)]
+ svnrdump_dumpfile = [l for l in svnrdump_dumpfile
+ if not mismatched_headers_re.match(l)]
svnadmin_dumpfile = svntest.verify.UnorderedOutput(svnadmin_dumpfile)
svntest.verify.compare_and_display_lines(
"Dump files", "DUMP", svnadmin_dumpfile, svnrdump_dumpfile,
- None, mismatched_headers_re)
-
+ None)
+
else:
compare_repos_dumps(sbox, svnadmin_dumpfile)
@@ -197,7 +203,6 @@ def run_load_test(sbox, dumpfile_name, expected_dumpfile_name = None,
######################################################################
# Tests
-@Skip(svntest.main.is_ra_type_dav_serf)
def basic_dump(sbox):
"dump: standard sbox repos"
sbox.build(read_only = True, create_wc = False)
@@ -210,7 +215,6 @@ def basic_dump(sbox):
if not out[0].startswith('SVN-fs-dump-format-version:'):
raise svntest.Failure('No valid output')
-@Skip(svntest.main.is_ra_type_dav_serf)
def revision_0_dump(sbox):
"dump: revision zero"
run_dump_test(sbox, "revision-0.dump")
@@ -229,7 +233,6 @@ def revision_0_load(sbox):
# docs/ (Added r6)
# README (Added r6)
-@Skip(svntest.main.is_ra_type_dav_serf)
def skeleton_dump(sbox):
"dump: skeleton repository"
run_dump_test(sbox, "skeleton.dump")
@@ -238,7 +241,6 @@ def skeleton_load(sbox):
"load: skeleton repository"
run_load_test(sbox, "skeleton.dump")
-@Skip(svntest.main.is_ra_type_dav_serf)
def sparse_propchanges_dump(sbox):
"dump: sparse file/dir propchanges"
run_dump_test(sbox, "sparse-propchanges.dump")
@@ -248,7 +250,6 @@ def sparse_propchanges_load(sbox):
"load: sparse file/dir propchanges"
run_load_test(sbox, "sparse-propchanges.dump")
-@Skip(svntest.main.is_ra_type_dav_serf)
def copy_and_modify_dump(sbox):
"dump: copy and modify"
run_dump_test(sbox, "copy-and-modify.dump")
@@ -257,7 +258,6 @@ def copy_and_modify_load(sbox):
"load: copy and modify"
run_load_test(sbox, "copy-and-modify.dump")
-@Skip(svntest.main.is_ra_type_dav_serf)
def no_author_dump(sbox):
"dump: copy revs with no svn:author revprops"
run_dump_test(sbox, "no-author.dump")
@@ -266,7 +266,6 @@ def no_author_load(sbox):
"load: copy revs with no svn:author revprops"
run_load_test(sbox, "no-author.dump")
-@Skip(svntest.main.is_ra_type_dav_serf)
def copy_from_previous_version_and_modify_dump(sbox):
"dump: copy from previous version and modify"
run_dump_test(sbox, "copy-from-previous-version-and-modify.dump")
@@ -275,7 +274,6 @@ def copy_from_previous_version_and_modify_load(sbox):
"load: copy from previous version and modify"
run_load_test(sbox, "copy-from-previous-version-and-modify.dump")
-@Skip(svntest.main.is_ra_type_dav_serf)
def modified_in_place_dump(sbox):
"dump: modified in place"
run_dump_test(sbox, "modified-in-place.dump")
@@ -284,7 +282,6 @@ def modified_in_place_load(sbox):
"load: modified in place"
run_load_test(sbox, "modified-in-place.dump")
-@Skip(svntest.main.is_ra_type_dav_serf)
def move_and_modify_in_the_same_revision_dump(sbox):
"dump: move parent & modify child file in same rev"
run_dump_test(sbox, "move-and-modify.dump")
@@ -293,7 +290,6 @@ def move_and_modify_in_the_same_revision_load(sbox):
"load: move parent & modify child file in same rev"
run_load_test(sbox, "move-and-modify.dump")
-@Skip(svntest.main.is_ra_type_dav_serf)
def tag_empty_trunk_dump(sbox):
"dump: tag empty trunk"
run_dump_test(sbox, "tag-empty-trunk.dump")
@@ -302,7 +298,6 @@ def tag_empty_trunk_load(sbox):
"load: tag empty trunk"
run_load_test(sbox, "tag-empty-trunk.dump")
-@Skip(svntest.main.is_ra_type_dav_serf)
def tag_trunk_with_file_dump(sbox):
"dump: tag trunk containing a file"
run_dump_test(sbox, "tag-trunk-with-file.dump")
@@ -311,7 +306,6 @@ def tag_trunk_with_file_load(sbox):
"load: tag trunk containing a file"
run_load_test(sbox, "tag-trunk-with-file.dump")
-@Skip(svntest.main.is_ra_type_dav_serf)
def tag_trunk_with_file2_dump(sbox):
"dump: tag trunk containing a file (#2)"
run_dump_test(sbox, "tag-trunk-with-file2.dump")
@@ -320,7 +314,6 @@ def tag_trunk_with_file2_load(sbox):
"load: tag trunk containing a file (#2)"
run_load_test(sbox, "tag-trunk-with-file2.dump")
-@Skip(svntest.main.is_ra_type_dav_serf)
def dir_prop_change_dump(sbox):
"dump: directory property changes"
run_dump_test(sbox, "dir-prop-change.dump")
@@ -329,7 +322,6 @@ def dir_prop_change_load(sbox):
"load: directory property changes"
run_load_test(sbox, "dir-prop-change.dump")
-@Skip(svntest.main.is_ra_type_dav_serf)
def copy_parent_modify_prop_dump(sbox):
"dump: copy parent and modify prop"
run_dump_test(sbox, "copy-parent-modify-prop.dump")
@@ -338,7 +330,6 @@ def copy_parent_modify_prop_load(sbox):
"load: copy parent and modify prop"
run_load_test(sbox, "copy-parent-modify-prop.dump")
-@Skip(svntest.main.is_ra_type_dav_serf)
def copy_revprops_dump(sbox):
"dump: copy revprops other than svn:*"
run_dump_test(sbox, "revprops.dump")
@@ -347,19 +338,16 @@ def copy_revprops_load(sbox):
"load: copy revprops other than svn:*"
run_load_test(sbox, "revprops.dump")
-@Skip(svntest.main.is_ra_type_dav_serf)
def only_trunk_dump(sbox):
"dump: subdirectory"
run_dump_test(sbox, "trunk-only.dump", subdir="/trunk",
expected_dumpfile_name="trunk-only.expected.dump")
-@Skip(svntest.main.is_ra_type_dav_serf)
def only_trunk_A_with_changes_dump(sbox):
"dump: subdirectory with changes on root"
run_dump_test(sbox, "trunk-A-changes.dump", subdir="/trunk/A",
expected_dumpfile_name="trunk-A-changes.expected.dump")
-@Skip(svntest.main.is_ra_type_dav_serf)
def url_encoding_dump(sbox):
"dump: url encoding issues"
run_dump_test(sbox, "url-encoding-bug.dump")
@@ -368,21 +356,24 @@ def url_encoding_load(sbox):
"load: url encoding issues"
run_load_test(sbox, "url-encoding-bug.dump")
-@Skip(svntest.main.is_ra_type_dav_serf)
def copy_bad_line_endings_dump(sbox):
"dump: inconsistent line endings in svn:* props"
run_dump_test(sbox, "copy-bad-line-endings.dump",
expected_dumpfile_name="copy-bad-line-endings.expected.dump",
bypass_prop_validation=True)
-@Skip(svntest.main.is_ra_type_dav_serf)
+@Issue(4263)
+def copy_bad_line_endings_load(sbox):
+ "load: inconsistent line endings in svn:* props"
+ run_load_test(sbox, "copy-bad-line-endings.dump",
+ expected_dumpfile_name="copy-bad-line-endings.expected.dump")
+
def copy_bad_line_endings2_dump(sbox):
"dump: non-LF line endings in svn:* props"
run_dump_test(sbox, "copy-bad-line-endings2.dump",
expected_dumpfile_name="copy-bad-line-endings2.expected.dump",
bypass_prop_validation=True, ignore_base_checksums=True)
-@Skip(svntest.main.is_ra_type_dav_serf)
def commit_a_copy_of_root_dump(sbox):
"dump: commit a copy of root"
run_dump_test(sbox, "repo-with-copy-of-root-dir.dump")
@@ -391,7 +382,6 @@ def commit_a_copy_of_root_load(sbox):
"load: commit a copy of root"
run_load_test(sbox, "repo-with-copy-of-root-dir.dump")
-@Skip(svntest.main.is_ra_type_dav_serf)
def descend_into_replace_dump(sbox):
"dump: descending into replaced dir looks in src"
run_dump_test(sbox, "descend-into-replace.dump", subdir='/trunk/H',
@@ -402,7 +392,6 @@ def descend_into_replace_load(sbox):
run_load_test(sbox, "descend-into-replace.dump")
@Issue(3847)
-@Skip(svntest.main.is_ra_type_dav_serf)
def add_multi_prop_dump(sbox):
"dump: add with multiple props"
run_dump_test(sbox, "add-multi-prop.dump")
@@ -417,7 +406,6 @@ def multi_prop_edit_load(sbox):
# revs in svn:mergeinfo' but uses 'svnrdump load' in place of
# 'svnadmin load'.
@Issue(3890)
-@Skip(svntest.main.is_ra_type_dav_serf)
def reflect_dropped_renumbered_revs(sbox):
"svnrdump renumbers dropped revs in mergeinfo"
@@ -481,7 +469,6 @@ def reflect_dropped_renumbered_revs(sbox):
# from incremental dump' but uses 'svnrdump [dump|load]' in place of
# 'svnadmin [dump|load]'.
@Issue(3890)
-@Skip(svntest.main.is_ra_type_dav_serf)
def dont_drop_valid_mergeinfo_during_incremental_svnrdump_loads(sbox):
"don't drop mergeinfo revs in incremental svnrdump"
@@ -756,7 +743,179 @@ def svnrdump_load_partial_incremental_dump(sbox):
svntest.verify.AnyOutput,
[], 0, 'load', sbox.repo_url)
- ########################################################################
+
+#----------------------------------------------------------------------
+@Issue(4101)
+def range_dump(sbox):
+ "dump: using -rX:Y"
+ run_dump_test(sbox, "trunk-only.dump",
+ expected_dumpfile_name="root-range.expected.dump",
+ extra_options=['-r2:HEAD'])
+
+@Issue(4101)
+def only_trunk_range_dump(sbox):
+ "dump: subdirectory using -rX:Y"
+ run_dump_test(sbox, "trunk-only.dump", subdir="/trunk",
+ expected_dumpfile_name="trunk-only-range.expected.dump",
+ extra_options=['-r1:HEAD'])
+
+@Issue(4101)
+def only_trunk_A_range_dump(sbox):
+ "dump: deeper subdirectory using -rX:Y"
+ run_dump_test(sbox, "trunk-only.dump", subdir="/trunk/A",
+ expected_dumpfile_name="trunk-A-range.expected.dump",
+ extra_options=['-r2:HEAD'])
+
+
+#----------------------------------------------------------------------
+
+#----------------------------------------------------------------------
+
+# Regression test for issue 4551 "svnrdump load commits wrong properties,
+# or fails, on a non-deltas dumpfile". In this test, the copy source does
+# not exist and the failure mode is to error out.
+@Issue(4551)
+def load_non_deltas_copy_with_props(sbox):
+ "load non-deltas copy with props"
+ sbox.build()
+
+ # Case (1): Copies that do not replace anything: the copy target path
+ # at (new rev - 1) does not exist
+
+ # Set properties on each node to be copied
+ sbox.simple_propset('p', 'v', 'A/mu', 'A/B', 'A/B/E')
+ sbox.simple_propset('q', 'v', 'A/mu', 'A/B', 'A/B/E')
+ sbox.simple_commit()
+ sbox.simple_update() # avoid mixed-rev
+
+ # Do the copies
+ sbox.simple_copy('A/mu@2', 'A/mu_COPY')
+ sbox.simple_copy('A/B@2', 'A/B_COPY')
+ # Also add new nodes inside the copied dir, to test more code paths
+ sbox.simple_copy('A/B/E@2', 'A/B_COPY/copied')
+ sbox.simple_mkdir('A/B_COPY/added')
+ sbox.simple_copy('A/B/E@2', 'A/B_COPY/added/copied')
+ # On each copied node, delete a prop
+ sbox.simple_propdel('p', 'A/mu_COPY', 'A/B_COPY', 'A/B_COPY/E',
+ 'A/B_COPY/copied', 'A/B_COPY/added/copied')
+
+ sbox.simple_commit()
+
+ # Dump with 'svnadmin' (non-deltas mode)
+ dumpfile = svntest.actions.run_and_verify_dump(sbox.repo_dir, deltas=False)
+
+ # Load with 'svnrdump'. This used to throw an error:
+ # svnrdump: E160013: File not found: revision 2, path '/A/B_COPY'
+ new_repo_dir, new_repo_url = sbox.add_repo_path('new_repo')
+ svntest.main.create_repos(new_repo_dir)
+ svntest.actions.enable_revprop_changes(new_repo_dir)
+ svntest.actions.run_and_verify_svnrdump(dumpfile,
+ svntest.verify.AnyOutput,
+ [], 0, 'load', new_repo_url)
+
+ # Check that property 'p' really was deleted on each copied node
+ for tgt_path in ['A/mu_COPY', 'A/B_COPY', 'A/B_COPY/E',
+ 'A/B_COPY/copied', 'A/B_COPY/added/copied']:
+ tgt_url = new_repo_url + '/' + tgt_path
+ _, out, _ = svntest.main.run_svn(None, 'proplist', tgt_url)
+ expected = ["Properties on '%s':" % (tgt_url,),
+ 'q']
+ actual = map(str.strip, out)
+ svntest.verify.compare_and_display_lines(None, 'PROPS', expected, actual)
+
+# Regression test for issue 4551 "svnrdump load commits wrong properties,
+# or fails, on a non-deltas dumpfile". In this test, the copy source does
+# exist and the failure mode is to fail to delete a property.
+@Issue(4551)
+def load_non_deltas_replace_copy_with_props(sbox):
+ "load non-deltas replace&copy with props"
+ sbox.build()
+
+ # Case (2): Copies that replace something: the copy target path
+ # at (new rev - 1) exists and has no property named 'p'
+
+ # Set props on the copy source nodes (a file, a dir, a child of the dir)
+ sbox.simple_propset('p', 'v', 'A/mu', 'A/B', 'A/B/E')
+ sbox.simple_propset('q', 'v', 'A/mu', 'A/B', 'A/B/E')
+ sbox.simple_commit()
+ sbox.simple_update() # avoid mixed-rev
+
+ # Do the copies, replacing something
+ sbox.simple_rm('A/D/gamma', 'A/C')
+ sbox.simple_copy('A/mu@2', 'A/D/gamma')
+ sbox.simple_copy('A/B@2', 'A/C')
+ # On the copy, delete a prop that wasn't present on the node that it replaced
+ sbox.simple_propdel('p', 'A/D/gamma', 'A/C', 'A/C/E')
+
+ sbox.simple_commit()
+
+ # Dump with 'svnadmin' (non-deltas mode)
+ dumpfile = svntest.actions.run_and_verify_dump(sbox.repo_dir, deltas=False)
+
+ # Load with 'svnrdump'
+ new_repo_dir, new_repo_url = sbox.add_repo_path('new_repo')
+ svntest.main.create_repos(new_repo_dir)
+ svntest.actions.enable_revprop_changes(new_repo_dir)
+ svntest.actions.run_and_verify_svnrdump(dumpfile,
+ svntest.verify.AnyOutput,
+ [], 0, 'load', new_repo_url)
+
+ # Check that property 'p' really was deleted on each copied node
+ # This used to fail, finding that property 'p' was still present
+ for tgt_path in ['A/D/gamma', 'A/C', 'A/C/E']:
+ tgt_url = new_repo_url + '/' + tgt_path
+ _, out, _ = svntest.main.run_svn(None, 'proplist', tgt_url)
+ expected = ["Properties on '%s':" % (tgt_url,),
+ 'q']
+ actual = map(str.strip, out)
+ svntest.verify.compare_and_display_lines(None, 'PROPS', expected, actual)
+
+# Regression test for issue 4551 "svnrdump load commits wrong properties,
+# or fails, on a non-deltas dumpfile". In this test, a node's props are
+# modified, and the failure mode is that RA-serf would end up deleting
+# properties that should remain on the node.
+@Issue(4551)
+def load_non_deltas_with_props(sbox):
+ "load non-deltas with props"
+ sbox.build()
+
+ # Case (3): A node's props are modified, and at least one of its previous
+ # props remains after the modification. svnrdump made two prop mod method
+ # calls for the same property (delete, then set). RA-serf's commit editor
+ # didn't expect this and performed the deletes after the non-deletes, and
+ # so ended up deleting a property that should not be deleted.
+
+ # Set properties on each node to be modified
+ sbox.simple_propset('p', 'v', 'A/mu')
+ sbox.simple_propset('q', 'v', 'A/mu', 'A/B')
+ sbox.simple_commit()
+
+ # Do the modifications: a different kind of mod on each node
+ sbox.simple_propdel('p', 'A/mu')
+ sbox.simple_propset('q', 'v2', 'A/B')
+ sbox.simple_commit()
+
+ # Dump with 'svnadmin' (non-deltas mode)
+ dumpfile = svntest.actions.run_and_verify_dump(sbox.repo_dir, deltas=False)
+
+ # Load with 'svnrdump'
+ new_repo_dir, new_repo_url = sbox.add_repo_path('new_repo')
+ svntest.main.create_repos(new_repo_dir)
+ svntest.actions.enable_revprop_changes(new_repo_dir)
+ svntest.actions.run_and_verify_svnrdump(dumpfile,
+ svntest.verify.AnyOutput,
+ [], 0, 'load', new_repo_url)
+
+ # Check that property 'q' remains on each modified node
+ for tgt_path in ['A/mu', 'A/B']:
+ tgt_url = new_repo_url + '/' + tgt_path
+ _, out, _ = svntest.main.run_svn(None, 'proplist', tgt_url)
+ expected = ["Properties on '%s':" % (tgt_url,),
+ 'q']
+ actual = map(str.strip, out)
+ svntest.verify.compare_and_display_lines(None, 'PROPS', expected, actual)
+
+########################################################################
# Run the tests
@@ -796,6 +955,7 @@ test_list = [ None,
move_and_modify_in_the_same_revision_dump,
move_and_modify_in_the_same_revision_load,
copy_bad_line_endings_dump,
+ copy_bad_line_endings_load,
copy_bad_line_endings2_dump,
commit_a_copy_of_root_dump,
commit_a_copy_of_root_load,
@@ -806,6 +966,12 @@ test_list = [ None,
reflect_dropped_renumbered_revs,
dont_drop_valid_mergeinfo_during_incremental_svnrdump_loads,
svnrdump_load_partial_incremental_dump,
+ range_dump,
+ only_trunk_range_dump,
+ only_trunk_A_range_dump,
+ load_non_deltas_copy_with_props,
+ load_non_deltas_replace_copy_with_props,
+ load_non_deltas_with_props,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/svnrdump_tests_data/root-range.expected.dump b/subversion/tests/cmdline/svnrdump_tests_data/root-range.expected.dump
new file mode 100644
index 0000000..20e9e81
--- /dev/null
+++ b/subversion/tests/cmdline/svnrdump_tests_data/root-range.expected.dump
Binary files differ
diff --git a/subversion/tests/cmdline/svnrdump_tests_data/trunk-A-changes.expected.dump b/subversion/tests/cmdline/svnrdump_tests_data/trunk-A-changes.expected.dump
index 2d41568..c95fdcc 100644
--- a/subversion/tests/cmdline/svnrdump_tests_data/trunk-A-changes.expected.dump
+++ b/subversion/tests/cmdline/svnrdump_tests_data/trunk-A-changes.expected.dump
Binary files differ
diff --git a/subversion/tests/cmdline/svnrdump_tests_data/trunk-A-range.expected.dump b/subversion/tests/cmdline/svnrdump_tests_data/trunk-A-range.expected.dump
new file mode 100644
index 0000000..70a96c5
--- /dev/null
+++ b/subversion/tests/cmdline/svnrdump_tests_data/trunk-A-range.expected.dump
Binary files differ
diff --git a/subversion/tests/cmdline/svnrdump_tests_data/trunk-only-range.expected.dump b/subversion/tests/cmdline/svnrdump_tests_data/trunk-only-range.expected.dump
new file mode 100644
index 0000000..9ec633f
--- /dev/null
+++ b/subversion/tests/cmdline/svnrdump_tests_data/trunk-only-range.expected.dump
Binary files differ
diff --git a/subversion/tests/cmdline/svnrdump_tests_data/trunk-only.expected.dump b/subversion/tests/cmdline/svnrdump_tests_data/trunk-only.expected.dump
index 3c193f8..689c780 100644
--- a/subversion/tests/cmdline/svnrdump_tests_data/trunk-only.expected.dump
+++ b/subversion/tests/cmdline/svnrdump_tests_data/trunk-only.expected.dump
Binary files differ
diff --git a/subversion/tests/cmdline/svnserveautocheck.sh b/subversion/tests/cmdline/svnserveautocheck.sh
index 3545a85..d537731 100755
--- a/subversion/tests/cmdline/svnserveautocheck.sh
+++ b/subversion/tests/cmdline/svnserveautocheck.sh
@@ -21,16 +21,16 @@
#
# -*- mode: shell-script; -*-
-# This script simplifies the preparation of the environment for a Subversion client
-# communicating with an svnserve server.
+# This script simplifies the preparation of the environment for a Subversion
+# client communicating with an svnserve server.
#
-# The script runs svnserve, runs "make check", and kills the svnserve afterwards.
-# It makes sure to kill the svnserve even if the test run dies.
+# The script runs svnserve, runs "make check", and kills the svnserve
+# afterwards. It makes sure to kill the svnserve even if the test run dies.
#
# This script should be run from the top level of the Subversion
-# distribution; it's easiest to just run it as "make
-# svnserveautocheck". Like "make check", you can specify further options
-# like "make svnserveautocheck FS_TYPE=bdb TESTS=subversion/tests/cmdline/basic.py".
+# distribution; it's easiest to just run it as "make svnserveautocheck".
+# Like "make check", you can specify further options like
+# "make svnserveautocheck FS_TYPE=bdb TESTS=subversion/tests/cmdline/basic.py".
PYTHON=${PYTHON:-python}
@@ -80,8 +80,6 @@ fi
# for it and "make check-clean".
SVNSERVE_PID=$ABS_BUILDDIR/subversion/tests/svnserveautocheck.pid
-export LD_LIBRARY_PATH="$ABS_BUILDDIR/subversion/libsvn_ra_neon/.libs:$ABS_BUILDDIR/subversion/libsvn_ra_local/.libs:$ABS_BUILDDIR/subversion/libsvn_ra_svn/.libs:$LD_LIBRARY_PATH"
-
SERVER_CMD="$ABS_BUILDDIR/subversion/svnserve/svnserve"
rm -f $SVNSERVE_PID
@@ -94,6 +92,12 @@ random_port() {
fi
}
+if type time > /dev/null; then
+ TIME_CMD=time
+else
+ TIME_CMD=""
+fi
+
SVNSERVE_PORT=$(random_port)
while netstat -an | grep $SVNSERVE_PORT | grep 'LISTEN'; do
SVNSERVE_PORT=$(random_port)
@@ -103,6 +107,10 @@ if [ "$THREADED" != "" ]; then
SVNSERVE_ARGS="-T"
fi
+if [ ${CACHE_REVPROPS:+set} ]; then
+ SVNSERVE_ARGS="$SVNSERVE_ARGS --cache-revprops on"
+fi
+
"$SERVER_CMD" -d -r "$ABS_BUILDDIR/subversion/tests/cmdline" \
--listen-host 127.0.0.1 \
--listen-port $SVNSERVE_PORT \
@@ -111,13 +119,13 @@ fi
BASE_URL=svn://127.0.0.1:$SVNSERVE_PORT
if [ $# = 0 ]; then
- time make check "BASE_URL=$BASE_URL"
+ $TIME_CMD make check "BASE_URL=$BASE_URL"
r=$?
else
cd "$ABS_BUILDDIR/subversion/tests/cmdline/"
TEST="$1"
shift
- time "./${TEST}_tests.py" "--url=$BASE_URL" $*
+ $TIME_CMD "./${TEST}_tests.py" "--url=$BASE_URL" $*
r=$?
cd - > /dev/null
fi
diff --git a/subversion/tests/cmdline/svnsync_authz_tests.py b/subversion/tests/cmdline/svnsync_authz_tests.py
new file mode 100755
index 0000000..62e79c6
--- /dev/null
+++ b/subversion/tests/cmdline/svnsync_authz_tests.py
@@ -0,0 +1,538 @@
+#!/usr/bin/env python
+#
+# svnsync_authz_tests.py: Tests SVNSync's repository mirroring
+# capabilities that need to be run serially
+# (mainly authz).
+#
+# Subversion is a tool for revision control.
+# See http://subversion.apache.org for more information.
+#
+# ====================================================================
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+######################################################################
+
+# General modules
+import sys, os
+
+# Test suite-specific modules
+import locale, re, urllib
+
+# Our testing module
+import svntest
+from svntest.verify import SVNUnexpectedStdout, SVNUnexpectedStderr
+from svntest.verify import SVNExpectedStderr
+from svntest.main import write_restrictive_svnserve_conf
+from svntest.main import server_has_partial_replay
+
+# Shared helpers
+from svnsync_tests import build_repos, run_init, run_sync, run_test
+
+# (abbreviation)
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
+Item = svntest.wc.StateItem
+
+#----------------------------------------------------------------------
+@Skip(svntest.main.is_ra_type_file)
+def basic_authz(sbox):
+ "verify that unreadable content is not synced"
+
+ sbox.build("svnsync-basic-authz")
+
+ write_restrictive_svnserve_conf(sbox.repo_dir)
+
+ dest_sbox = sbox.clone_dependent()
+ build_repos(dest_sbox)
+
+ svntest.actions.enable_revprop_changes(dest_sbox.repo_dir)
+
+ run_init(dest_sbox.repo_url, sbox.repo_url)
+
+ args = tuple(s.authz_name() for s in [sbox, sbox, dest_sbox])
+ svntest.main.file_write(sbox.authz_file,
+ "[%s:/]\n"
+ "* = r\n"
+ "\n"
+ "[%s:/A/B]\n"
+ "* = \n"
+ "\n"
+ "[%s:/]\n"
+ "* = rw\n" % args)
+
+ run_sync(dest_sbox.repo_url)
+
+ lambda_url = dest_sbox.repo_url + '/A/B/lambda'
+ iota_url = dest_sbox.repo_url + '/iota'
+
+ # this file should have been blocked by authz
+ svntest.actions.run_and_verify_svn(None,
+ [], svntest.verify.AnyOutput,
+ 'cat',
+ lambda_url)
+ # this file should have been synced
+ svntest.actions.run_and_verify_svn(None,
+ svntest.verify.AnyOutput, [],
+ 'cat',
+ iota_url)
+
+#----------------------------------------------------------------------
+@Skip(svntest.main.is_ra_type_file)
+def copy_from_unreadable_dir(sbox):
+ "verify that copies from unreadable dirs work"
+
+ sbox.build("svnsync-copy-from-unreadable-dir")
+
+ B_url = sbox.repo_url + '/A/B'
+ P_url = sbox.repo_url + '/A/P'
+
+ # Set a property on the directory we're going to copy, and a file in it, to
+ # confirm that they're transmitted when we later sync the copied directory
+ svntest.actions.run_and_verify_svn(None,
+ None,
+ [],
+ 'pset',
+ 'foo',
+ 'bar',
+ sbox.wc_dir + '/A/B/lambda')
+
+ svntest.actions.run_and_verify_svn(None,
+ None,
+ [],
+ 'pset',
+ 'baz',
+ 'zot',
+ sbox.wc_dir + '/A/B')
+
+ svntest.actions.run_and_verify_svn(None,
+ None,
+ [],
+ 'ci',
+ sbox.wc_dir + '/A/B',
+ '-m', 'log_msg')
+
+ # Now copy that directory so we'll see it in our synced copy
+ svntest.actions.run_and_verify_svn(None,
+ None,
+ [],
+ 'cp',
+ B_url,
+ P_url,
+ '-m', 'Copy B to P')
+
+ write_restrictive_svnserve_conf(sbox.repo_dir)
+
+ dest_sbox = sbox.clone_dependent()
+ build_repos(dest_sbox)
+
+ svntest.actions.enable_revprop_changes(dest_sbox.repo_dir)
+
+ args = tuple(s.authz_name() for s in [sbox, sbox, dest_sbox])
+ open(sbox.authz_file, 'w').write(
+ "[%s:/]\n"
+ "* = r\n"
+ "\n"
+ "[%s:/A/B]\n"
+ "* = \n"
+ "\n"
+ "[%s:/]\n"
+ "* = rw"
+ % args)
+
+ run_init(dest_sbox.repo_url, sbox.repo_url)
+
+ run_sync(dest_sbox.repo_url)
+
+ expected_out = [
+ 'Changed paths:\n',
+ ' A /A/P\n',
+ ' A /A/P/E\n',
+ ' A /A/P/E/alpha\n',
+ ' A /A/P/E/beta\n',
+ ' A /A/P/F\n',
+ ' A /A/P/lambda\n',
+ '\n',
+ '\n', # log message is stripped
+ ]
+
+ exit_code, out, err = svntest.main.run_svn(None,
+ 'log',
+ '-r', '3',
+ '-v',
+ dest_sbox.repo_url)
+
+ if err:
+ raise SVNUnexpectedStderr(err)
+
+ svntest.verify.compare_and_display_lines(None,
+ 'LOG',
+ expected_out,
+ out[2:11])
+
+ svntest.actions.run_and_verify_svn(None,
+ ['bar\n'],
+ [],
+ 'pget',
+ 'foo',
+ dest_sbox.repo_url + '/A/P/lambda')
+
+ svntest.actions.run_and_verify_svn(None,
+ ['zot\n'],
+ [],
+ 'pget',
+ 'baz',
+ dest_sbox.repo_url + '/A/P')
+
+# Issue 2705.
+@Issue(2705)
+@Skip(svntest.main.is_ra_type_file)
+def copy_with_mod_from_unreadable_dir(sbox):
+ "verify copies with mods from unreadable dirs"
+
+ sbox.build("svnsync-copy-with-mod-from-unreadable-dir")
+
+ # Make a copy of the B directory.
+ svntest.actions.run_and_verify_svn(None,
+ None,
+ [],
+ 'cp',
+ sbox.wc_dir + '/A/B',
+ sbox.wc_dir + '/A/P')
+
+ # Set a property inside the copied directory.
+ svntest.actions.run_and_verify_svn(None,
+ None,
+ [],
+ 'pset',
+ 'foo',
+ 'bar',
+ sbox.wc_dir + '/A/P/lambda')
+
+ # Add a new directory and file inside the copied directory.
+ svntest.actions.run_and_verify_svn(None,
+ None,
+ [],
+ 'mkdir',
+ sbox.wc_dir + '/A/P/NEW-DIR')
+
+ svntest.main.file_append(sbox.wc_dir + '/A/P/E/new-file', "bla bla")
+ svntest.main.run_svn(None, 'add', sbox.wc_dir + '/A/P/E/new-file')
+
+ # Delete a file inside the copied directory.
+ svntest.actions.run_and_verify_svn(None,
+ None,
+ [],
+ 'rm',
+ sbox.wc_dir + '/A/P/E/beta')
+
+ # Commit the copy-with-modification.
+ svntest.actions.run_and_verify_svn(None,
+ None,
+ [],
+ 'ci',
+ sbox.wc_dir,
+ '-m', 'log_msg')
+
+ # Lock down the source repository.
+ write_restrictive_svnserve_conf(sbox.repo_dir)
+
+ dest_sbox = sbox.clone_dependent()
+ build_repos(dest_sbox)
+
+ svntest.actions.enable_revprop_changes(dest_sbox.repo_dir)
+
+ args = tuple(s.authz_name() for s in [sbox, sbox, dest_sbox])
+ open(sbox.authz_file, 'w').write(
+ "[%s:/]\n"
+ "* = r\n"
+ "\n"
+ "[%s:/A/B]\n"
+ "* = \n"
+ "\n"
+ "[%s:/]\n"
+ "* = rw"
+ % args)
+
+ run_init(dest_sbox.repo_url, sbox.repo_url)
+
+ run_sync(dest_sbox.repo_url)
+
+ expected_out = [
+ 'Changed paths:\n',
+ ' A /A/P\n',
+ ' A /A/P/E\n',
+ ' A /A/P/E/alpha\n',
+ ' A /A/P/E/new-file\n',
+ ' A /A/P/F\n',
+ ' A /A/P/NEW-DIR\n',
+ ' A /A/P/lambda\n',
+ '\n',
+ '\n', # log message is stripped
+ ]
+
+ exit_code, out, err = svntest.main.run_svn(None,
+ 'log',
+ '-r', '2',
+ '-v',
+ dest_sbox.repo_url)
+
+ if err:
+ raise SVNUnexpectedStderr(err)
+
+ svntest.verify.compare_and_display_lines(None,
+ 'LOG',
+ expected_out,
+ out[2:12])
+
+ svntest.actions.run_and_verify_svn(None,
+ ['bar\n'],
+ [],
+ 'pget',
+ 'foo',
+ dest_sbox.repo_url + '/A/P/lambda')
+
+# Issue 2705.
+@Issue(2705)
+@Skip(svntest.main.is_ra_type_file)
+def copy_with_mod_from_unreadable_dir_and_copy(sbox):
+ "verify copies with mods from unreadable dirs +copy"
+
+ sbox.build("svnsync-copy-with-mod-from-unreadable-dir-and-copy")
+
+ # Make a copy of the B directory.
+ svntest.actions.run_and_verify_svn(None,
+ None,
+ [],
+ 'cp',
+ sbox.wc_dir + '/A/B',
+ sbox.wc_dir + '/A/P')
+
+
+ # Copy a (readable) file into the copied directory.
+ svntest.actions.run_and_verify_svn(None,
+ None,
+ [],
+ 'cp',
+ sbox.wc_dir + '/A/D/gamma',
+ sbox.wc_dir + '/A/P/E')
+
+
+ # Commit the copy-with-modification.
+ svntest.actions.run_and_verify_svn(None,
+ None,
+ [],
+ 'ci',
+ sbox.wc_dir,
+ '-m', 'log_msg')
+
+ # Lock down the source repository.
+ write_restrictive_svnserve_conf(sbox.repo_dir)
+
+ dest_sbox = sbox.clone_dependent()
+ build_repos(dest_sbox)
+
+ svntest.actions.enable_revprop_changes(dest_sbox.repo_dir)
+
+ args = tuple(s.authz_name() for s in [sbox, sbox, dest_sbox])
+ open(sbox.authz_file, 'w').write(
+ "[%s:/]\n"
+ "* = r\n"
+ "\n"
+ "[%s:/A/B]\n"
+ "* = \n"
+ "\n"
+ "[%s:/]\n"
+ "* = rw"
+ % args)
+
+ run_init(dest_sbox.repo_url, sbox.repo_url)
+
+ run_sync(dest_sbox.repo_url)
+
+ expected_out = [
+ 'Changed paths:\n',
+ ' A /A/P\n',
+ ' A /A/P/E\n',
+ ' A /A/P/E/alpha\n',
+ ' A /A/P/E/beta\n',
+ ' A /A/P/E/gamma (from /A/D/gamma:1)\n',
+ ' A /A/P/F\n',
+ ' A /A/P/lambda\n',
+ '\n',
+ '\n', # log message is stripped
+ ]
+
+ exit_code, out, err = svntest.main.run_svn(None,
+ 'log',
+ '-r', '2',
+ '-v',
+ dest_sbox.repo_url)
+
+ if err:
+ raise SVNUnexpectedStderr(err)
+
+ svntest.verify.compare_and_display_lines(None,
+ 'LOG',
+ expected_out,
+ out[2:12])
+
+def identity_copy(sbox):
+ "copy UTF-8 svn:* props identically"
+ orig_lc_all = locale.setlocale(locale.LC_ALL)
+ other_locales = [ "English.1252", "German.1252", "French.1252",
+ "en_US.ISO-8859-1", "en_GB.ISO-8859-1", "de_DE.ISO-8859-1",
+ "en_US.ISO8859-1", "en_GB.ISO8859-1", "de_DE.ISO8859-1" ]
+ for other_locale in other_locales:
+ try:
+ locale.setlocale(locale.LC_ALL, other_locale)
+ break
+ except:
+ pass
+ if locale.setlocale(locale.LC_ALL) != other_locale:
+ raise svntest.Skip
+
+ try:
+ run_test(sbox, "copy-bad-encoding.expected.dump",
+ exp_dump_file_name="copy-bad-encoding.expected.dump",
+ bypass_prop_validation=True)
+ finally:
+ locale.setlocale(locale.LC_ALL, orig_lc_all)
+
+@Skip(svntest.main.is_ra_type_file)
+def specific_deny_authz(sbox):
+ "verify if specifically denied paths dont sync"
+
+ sbox.build("specific-deny-authz")
+
+ dest_sbox = sbox.clone_dependent()
+ build_repos(dest_sbox)
+
+ svntest.actions.enable_revprop_changes(dest_sbox.repo_dir)
+
+ run_init(dest_sbox.repo_url, sbox.repo_url)
+
+ svntest.main.run_svn(None, "cp",
+ os.path.join(sbox.wc_dir, "A"),
+ os.path.join(sbox.wc_dir, "A_COPY")
+ )
+ svntest.main.run_svn(None, "ci", "-mm", sbox.wc_dir)
+
+ write_restrictive_svnserve_conf(sbox.repo_dir)
+
+ # For mod_dav_svn's parent path setup we need per-repos permissions in
+ # the authz file...
+ if sbox.repo_url.startswith('http'):
+ svntest.main.file_write(sbox.authz_file,
+ "[specific-deny-authz:/]\n"
+ "* = r\n"
+ "\n"
+ "[specific-deny-authz:/A]\n"
+ "* = \n"
+ "\n"
+ "[specific-deny-authz:/A_COPY/B/lambda]\n"
+ "* = \n"
+ "\n"
+ "[specific-deny-authz-1:/]\n"
+ "* = rw\n")
+ # Otherwise we can just go with the permissions needed for the source
+ # repository.
+ else:
+ svntest.main.file_write(sbox.authz_file,
+ "[/]\n"
+ "* = r\n"
+ "\n"
+ "[/A]\n"
+ "* = \n"
+ "\n"
+ "[/A_COPY/B/lambda]\n"
+ "* = \n")
+
+ run_sync(dest_sbox.repo_url)
+
+ lambda_url = dest_sbox.repo_url + '/A_COPY/B/lambda'
+
+ # this file should have been blocked by authz
+ svntest.actions.run_and_verify_svn(None,
+ [], svntest.verify.AnyOutput,
+ 'cat',
+ lambda_url)
+
+@Issue(4121)
+@Skip(svntest.main.is_ra_type_file)
+def copy_delete_unreadable_child(sbox):
+ "copy, then rm at-src-unreadable child"
+
+ # Prepare the source: Greek tree (r1), cp+rm (r2).
+ sbox.build("copy-delete-unreadable-child")
+ svntest.actions.run_and_verify_svnmucc(None, None, [],
+ '-m', 'r2',
+ '-U', sbox.repo_url,
+ 'cp', 'HEAD', '/', 'branch',
+ 'rm', 'branch/A')
+
+ # Create the destination.
+ dest_sbox = sbox.clone_dependent()
+ build_repos(dest_sbox)
+ svntest.actions.enable_revprop_changes(dest_sbox.repo_dir)
+
+ # Lock down the source.
+ authz = sbox.authz_name()
+ write_restrictive_svnserve_conf(sbox.repo_dir, anon_access='read')
+ svntest.main.file_write(sbox.authz_file,
+ "[%s:/]\n"
+ "* = r\n"
+ "[%s:/A]\n"
+ "* = \n"
+ % (authz, authz))
+
+ dest_url = svntest.main.file_scheme_prefix \
+ + urllib.pathname2url(os.path.abspath(dest_sbox.repo_dir))
+ run_init(dest_url, sbox.repo_url)
+ run_sync(dest_url)
+
+ # sanity check
+ svntest.actions.run_and_verify_svn(None,
+ ["iota\n"], [],
+ 'ls', dest_url+'/branch@2')
+
+
+########################################################################
+# Run the tests
+
+
+# list all tests here, starting with None:
+test_list = [ None,
+ basic_authz,
+ copy_from_unreadable_dir,
+ copy_with_mod_from_unreadable_dir,
+ copy_with_mod_from_unreadable_dir_and_copy,
+ identity_copy,
+ specific_deny_authz,
+ copy_delete_unreadable_child,
+ ]
+serial_only = True
+
+if __name__ == '__main__':
+ svntest.main.run_tests(test_list, serial_only = serial_only)
+ # NOTREACHED
+
+
+### End of file.
diff --git a/subversion/tests/cmdline/svnsync_tests.py b/subversion/tests/cmdline/svnsync_tests.py
index 0835788..16594cb 100755
--- a/subversion/tests/cmdline/svnsync_tests.py
+++ b/subversion/tests/cmdline/svnsync_tests.py
@@ -28,13 +28,12 @@
import sys, os
# Test suite-specific modules
-import locale, re
+import re, urllib
# Our testing module
import svntest
from svntest.verify import SVNUnexpectedStdout, SVNUnexpectedStderr
from svntest.verify import SVNExpectedStderr
-from svntest.main import write_restrictive_svnserve_conf
from svntest.main import server_has_partial_replay
# (abbreviation)
@@ -191,14 +190,16 @@ def setup_and_sync(sbox, dump_file_contents, subdir=None,
repo_url = sbox.repo_url
cwd = os.getcwd()
if is_src_ra_local:
- repo_url = svntest.main.file_scheme_prefix + svntest.main.pathname2url(os.path.join(cwd, sbox.repo_dir))
+ repo_url = svntest.main.file_scheme_prefix + \
+ urllib.pathname2url(os.path.join(cwd, sbox.repo_dir))
if subdir:
repo_url = repo_url + subdir
dest_repo_url = dest_sbox.repo_url
if is_dest_ra_local:
- dest_repo_url = svntest.main.file_scheme_prefix + svntest.main.pathname2url(os.path.join(cwd, dest_sbox.repo_dir))
+ dest_repo_url = svntest.main.file_scheme_prefix + \
+ urllib.pathname2url(os.path.join(cwd, dest_sbox.repo_dir))
run_init(dest_repo_url, repo_url, source_prop_encoding)
run_sync(dest_repo_url, repo_url,
@@ -209,7 +210,11 @@ def setup_and_sync(sbox, dump_file_contents, subdir=None,
return dest_sbox
def verify_mirror(dest_sbox, exp_dump_file_contents):
- """Compare the contents of the DEST_SBOX repository with EXP_DUMP_FILE_CONTENTS."""
+ """Compare the contents of the mirror repository in DEST_SBOX with
+ EXP_DUMP_FILE_CONTENTS, by comparing the parsed dump stream content.
+
+ First remove svnsync rev-props from the DEST_SBOX repository.
+ """
# Remove some SVNSync-specific housekeeping properties from the
# mirror repository in preparation for the comparison dump.
@@ -249,12 +254,12 @@ or another dump file."""
# dump file (used to create the master repository) or another specified dump
# file.
if exp_dump_file_name:
- exp_master_dumpfile_contents = open(os.path.join(svnsync_tests_dir,
- exp_dump_file_name)).readlines()
+ exp_dump_file_contents = open(os.path.join(svnsync_tests_dir,
+ exp_dump_file_name), 'rb').readlines()
else:
- exp_master_dumpfile_contents = master_dumpfile_contents
+ exp_dump_file_contents = master_dumpfile_contents
- verify_mirror(dest_sbox, exp_master_dumpfile_contents)
+ verify_mirror(dest_sbox, exp_dump_file_contents)
@@ -378,349 +383,6 @@ def detect_meddling(sbox):
run_sync(dest_sbox.repo_url, None,
".*Destination HEAD \\(2\\) is not the last merged revision \\(1\\).*")
-#----------------------------------------------------------------------
-@Skip(svntest.main.is_ra_type_file)
-def basic_authz(sbox):
- "verify that unreadable content is not synced"
-
- sbox.build("svnsync-basic-authz")
-
- write_restrictive_svnserve_conf(sbox.repo_dir)
-
- dest_sbox = sbox.clone_dependent()
- build_repos(dest_sbox)
-
- svntest.actions.enable_revprop_changes(dest_sbox.repo_dir)
-
- run_init(dest_sbox.repo_url, sbox.repo_url)
-
- args = map(lambda x: x.authz_name(), [sbox, sbox, dest_sbox])
- svntest.main.file_write(sbox.authz_file,
- "[%s:/]\n"
- "* = r\n"
- "\n"
- "[%s:/A/B]\n"
- "* = \n"
- "\n"
- "[%s:/]\n"
- "* = rw\n" % tuple(args))
-
- run_sync(dest_sbox.repo_url)
-
- lambda_url = dest_sbox.repo_url + '/A/B/lambda'
- iota_url = dest_sbox.repo_url + '/iota'
-
- # this file should have been blocked by authz
- svntest.actions.run_and_verify_svn(None,
- [], svntest.verify.AnyOutput,
- 'cat',
- lambda_url)
- # this file should have been synced
- svntest.actions.run_and_verify_svn(None,
- svntest.verify.AnyOutput, [],
- 'cat',
- iota_url)
-
-#----------------------------------------------------------------------
-@Skip(svntest.main.is_ra_type_file)
-def copy_from_unreadable_dir(sbox):
- "verify that copies from unreadable dirs work"
-
- sbox.build("svnsync-copy-from-unreadable-dir")
-
- B_url = sbox.repo_url + '/A/B'
- P_url = sbox.repo_url + '/A/P'
-
- # Set a property on the directory we're going to copy, and a file in it, to
- # confirm that they're transmitted when we later sync the copied directory
- svntest.actions.run_and_verify_svn(None,
- None,
- [],
- 'pset',
- 'foo',
- 'bar',
- sbox.wc_dir + '/A/B/lambda')
-
- svntest.actions.run_and_verify_svn(None,
- None,
- [],
- 'pset',
- 'baz',
- 'zot',
- sbox.wc_dir + '/A/B')
-
- svntest.actions.run_and_verify_svn(None,
- None,
- [],
- 'ci',
- sbox.wc_dir + '/A/B',
- '-m', 'log_msg')
-
- # Now copy that directory so we'll see it in our synced copy
- svntest.actions.run_and_verify_svn(None,
- None,
- [],
- 'cp',
- B_url,
- P_url,
- '-m', 'Copy B to P')
-
- write_restrictive_svnserve_conf(sbox.repo_dir)
-
- dest_sbox = sbox.clone_dependent()
- build_repos(dest_sbox)
-
- svntest.actions.enable_revprop_changes(dest_sbox.repo_dir)
-
- args = map(lambda x: x.authz_name(), [sbox, sbox, dest_sbox])
- open(sbox.authz_file, 'w').write(
- "[%s:/]\n"
- "* = r\n"
- "\n"
- "[%s:/A/B]\n"
- "* = \n"
- "\n"
- "[%s:/]\n"
- "* = rw"
- % tuple(args))
-
- run_init(dest_sbox.repo_url, sbox.repo_url)
-
- run_sync(dest_sbox.repo_url)
-
- expected_out = [
- 'Changed paths:\n',
- ' A /A/P\n',
- ' A /A/P/E\n',
- ' A /A/P/E/alpha\n',
- ' A /A/P/E/beta\n',
- ' A /A/P/F\n',
- ' A /A/P/lambda\n',
- '\n',
- '\n', # log message is stripped
- ]
-
- exit_code, out, err = svntest.main.run_svn(None,
- 'log',
- '-r', '3',
- '-v',
- dest_sbox.repo_url)
-
- if err:
- raise SVNUnexpectedStderr(err)
-
- svntest.verify.compare_and_display_lines(None,
- 'LOG',
- expected_out,
- out[2:11])
-
- svntest.actions.run_and_verify_svn(None,
- ['bar\n'],
- [],
- 'pget',
- 'foo',
- dest_sbox.repo_url + '/A/P/lambda')
-
- svntest.actions.run_and_verify_svn(None,
- ['zot\n'],
- [],
- 'pget',
- 'baz',
- dest_sbox.repo_url + '/A/P')
-
-# Issue 2705.
-@Issue(2705)
-@Skip(svntest.main.is_ra_type_file)
-def copy_with_mod_from_unreadable_dir(sbox):
- "verify copies with mods from unreadable dirs"
-
- sbox.build("svnsync-copy-with-mod-from-unreadable-dir")
-
- # Make a copy of the B directory.
- svntest.actions.run_and_verify_svn(None,
- None,
- [],
- 'cp',
- sbox.wc_dir + '/A/B',
- sbox.wc_dir + '/A/P')
-
- # Set a property inside the copied directory.
- svntest.actions.run_and_verify_svn(None,
- None,
- [],
- 'pset',
- 'foo',
- 'bar',
- sbox.wc_dir + '/A/P/lambda')
-
- # Add a new directory and file inside the copied directory.
- svntest.actions.run_and_verify_svn(None,
- None,
- [],
- 'mkdir',
- sbox.wc_dir + '/A/P/NEW-DIR')
-
- svntest.main.file_append(sbox.wc_dir + '/A/P/E/new-file', "bla bla")
- svntest.main.run_svn(None, 'add', sbox.wc_dir + '/A/P/E/new-file')
-
- # Delete a file inside the copied directory.
- svntest.actions.run_and_verify_svn(None,
- None,
- [],
- 'rm',
- sbox.wc_dir + '/A/P/E/beta')
-
- # Commit the copy-with-modification.
- svntest.actions.run_and_verify_svn(None,
- None,
- [],
- 'ci',
- sbox.wc_dir,
- '-m', 'log_msg')
-
- # Lock down the source repository.
- write_restrictive_svnserve_conf(sbox.repo_dir)
-
- dest_sbox = sbox.clone_dependent()
- build_repos(dest_sbox)
-
- svntest.actions.enable_revprop_changes(dest_sbox.repo_dir)
-
- args = map(lambda x: x.authz_name(), [sbox, sbox, dest_sbox])
- open(sbox.authz_file, 'w').write(
- "[%s:/]\n"
- "* = r\n"
- "\n"
- "[%s:/A/B]\n"
- "* = \n"
- "\n"
- "[%s:/]\n"
- "* = rw"
- % tuple(args))
-
- run_init(dest_sbox.repo_url, sbox.repo_url)
-
- run_sync(dest_sbox.repo_url)
-
- expected_out = [
- 'Changed paths:\n',
- ' A /A/P\n',
- ' A /A/P/E\n',
- ' A /A/P/E/alpha\n',
- ' A /A/P/E/new-file\n',
- ' A /A/P/F\n',
- ' A /A/P/NEW-DIR\n',
- ' A /A/P/lambda\n',
- '\n',
- '\n', # log message is stripped
- ]
-
- exit_code, out, err = svntest.main.run_svn(None,
- 'log',
- '-r', '2',
- '-v',
- dest_sbox.repo_url)
-
- if err:
- raise SVNUnexpectedStderr(err)
-
- svntest.verify.compare_and_display_lines(None,
- 'LOG',
- expected_out,
- out[2:12])
-
- svntest.actions.run_and_verify_svn(None,
- ['bar\n'],
- [],
- 'pget',
- 'foo',
- dest_sbox.repo_url + '/A/P/lambda')
-
-# Issue 2705.
-@Issue(2705)
-@Skip(svntest.main.is_ra_type_file)
-def copy_with_mod_from_unreadable_dir_and_copy(sbox):
- "verify copies with mods from unreadable dirs +copy"
-
- sbox.build("svnsync-copy-with-mod-from-unreadable-dir-and-copy")
-
- # Make a copy of the B directory.
- svntest.actions.run_and_verify_svn(None,
- None,
- [],
- 'cp',
- sbox.wc_dir + '/A/B',
- sbox.wc_dir + '/A/P')
-
-
- # Copy a (readable) file into the copied directory.
- svntest.actions.run_and_verify_svn(None,
- None,
- [],
- 'cp',
- sbox.wc_dir + '/A/D/gamma',
- sbox.wc_dir + '/A/P/E')
-
-
- # Commit the copy-with-modification.
- svntest.actions.run_and_verify_svn(None,
- None,
- [],
- 'ci',
- sbox.wc_dir,
- '-m', 'log_msg')
-
- # Lock down the source repository.
- write_restrictive_svnserve_conf(sbox.repo_dir)
-
- dest_sbox = sbox.clone_dependent()
- build_repos(dest_sbox)
-
- svntest.actions.enable_revprop_changes(dest_sbox.repo_dir)
-
- args = map(lambda x: x.authz_name(), [sbox, sbox, dest_sbox])
- open(sbox.authz_file, 'w').write(
- "[%s:/]\n"
- "* = r\n"
- "\n"
- "[%s:/A/B]\n"
- "* = \n"
- "\n"
- "[%s:/]\n"
- "* = rw"
- % tuple(args))
-
- run_init(dest_sbox.repo_url, sbox.repo_url)
-
- run_sync(dest_sbox.repo_url)
-
- expected_out = [
- 'Changed paths:\n',
- ' A /A/P\n',
- ' A /A/P/E\n',
- ' A /A/P/E/alpha\n',
- ' A /A/P/E/beta\n',
- ' A /A/P/E/gamma (from /A/D/gamma:1)\n',
- ' A /A/P/F\n',
- ' A /A/P/lambda\n',
- '\n',
- '\n', # log message is stripped
- ]
-
- exit_code, out, err = svntest.main.run_svn(None,
- 'log',
- '-r', '2',
- '-v',
- dest_sbox.repo_url)
-
- if err:
- raise SVNUnexpectedStderr(err)
-
- svntest.verify.compare_and_display_lines(None,
- 'LOG',
- expected_out,
- out[2:12])
-
def url_encoding(sbox):
"test url encoding issues"
run_test(sbox, "url-encoding-bug.dump")
@@ -816,28 +478,6 @@ def copy_bad_encoding(sbox):
exp_dump_file_name="copy-bad-encoding.expected.dump",
bypass_prop_validation=True, source_prop_encoding="ISO-8859-3")
-def identity_copy(sbox):
- "copy UTF-8 svn:* props identically"
- orig_lc_all = locale.setlocale(locale.LC_ALL)
- other_locales = [ "English.1252", "German.1252", "French.1252",
- "en_US.ISO-8859-1", "en_GB.ISO-8859-1", "de_DE.ISO-8859-1",
- "en_US.ISO8859-1", "en_GB.ISO8859-1", "de_DE.ISO8859-1" ]
- for other_locale in other_locales:
- try:
- locale.setlocale(locale.LC_ALL, other_locale)
- break
- except:
- pass
- if locale.setlocale(locale.LC_ALL) != other_locale:
- raise svntest.Skip
-
- try:
- run_test(sbox, "copy-bad-encoding.expected.dump",
- exp_dump_file_name="copy-bad-encoding.expected.dump",
- bypass_prop_validation=True)
- finally:
- locale.setlocale(locale.LC_ALL, orig_lc_all)
-
#----------------------------------------------------------------------
def delete_svn_props(sbox):
@@ -851,66 +491,6 @@ def commit_a_copy_of_root(sbox):
run_test(sbox, "repo-with-copy-of-root-dir.dump")
-@Skip(svntest.main.is_ra_type_file)
-def specific_deny_authz(sbox):
- "verify if specifically denied paths dont sync"
-
- sbox.build("specific-deny-authz")
-
- dest_sbox = sbox.clone_dependent()
- build_repos(dest_sbox)
-
- svntest.actions.enable_revprop_changes(dest_sbox.repo_dir)
-
- run_init(dest_sbox.repo_url, sbox.repo_url)
-
- svntest.main.run_svn(None, "cp",
- os.path.join(sbox.wc_dir, "A"),
- os.path.join(sbox.wc_dir, "A_COPY")
- )
- svntest.main.run_svn(None, "ci", "-mm", sbox.wc_dir)
-
- write_restrictive_svnserve_conf(sbox.repo_dir)
-
- # For mod_dav_svn's parent path setup we need per-repos permissions in
- # the authz file...
- if sbox.repo_url.startswith('http'):
- svntest.main.file_write(sbox.authz_file,
- "[specific-deny-authz:/]\n"
- "* = r\n"
- "\n"
- "[specific-deny-authz:/A]\n"
- "* = \n"
- "\n"
- "[specific-deny-authz:/A_COPY/B/lambda]\n"
- "* = \n"
- "\n"
- "[specific-deny-authz-1:/]\n"
- "* = rw\n")
- # Otherwise we can just go with the permissions needed for the source
- # repository.
- else:
- svntest.main.file_write(sbox.authz_file,
- "[/]\n"
- "* = r\n"
- "\n"
- "[/A]\n"
- "* = \n"
- "\n"
- "[/A_COPY/B/lambda]\n"
- "* = \n")
-
- run_sync(dest_sbox.repo_url)
-
- lambda_url = dest_sbox.repo_url + '/A_COPY/B/lambda'
-
- # this file should have been blocked by authz
- svntest.actions.run_and_verify_svn(None,
- [], svntest.verify.AnyOutput,
- 'cat',
- lambda_url)
-
-
# issue #3641 'svnsync fails to partially copy a repository'.
# This currently fails because while replacements with history
# within copies are handled, replacements without history inside
@@ -992,44 +572,78 @@ def fd_leak_sync_from_serf_to_local(sbox):
import resource
resource.setrlimit(resource.RLIMIT_NOFILE, (128, 128))
run_test(sbox, "largemods.dump", is_src_ra_local=None, is_dest_ra_local=True)
-@Issue(4121)
-@Skip(svntest.main.is_ra_type_file)
-def copy_delete_unreadable_child(sbox):
- "copy, then rm at-src-unreadable child"
-
- ## Prepare the source: Greek tree (r1), cp+rm (r2).
- sbox.build("copy-delete-unreadable-child")
- svntest.actions.run_and_verify_svnmucc(None, None, [],
- '-m', 'r2',
- '-U', sbox.repo_url,
- 'cp', 'HEAD', '/', 'branch',
- 'rm', 'branch/A')
-
- ## Create the destination.
- dest_sbox = sbox.clone_dependent()
- build_repos(dest_sbox)
- svntest.actions.enable_revprop_changes(dest_sbox.repo_dir)
- ## Lock down the source.
- args = map(lambda x: x.authz_name(), [sbox, sbox])
- write_restrictive_svnserve_conf(sbox.repo_dir, anon_access='read')
- svntest.main.file_write(sbox.authz_file,
- "[%s:/]\n"
- "* = r\n"
- "[%s:/A]\n"
- "* = \n"
- % tuple(args)
- )
+#----------------------------------------------------------------------
+
+@Issue(4476)
+def mergeinfo_contains_r0(sbox):
+ "mergeinfo contains r0"
+
+ def make_node_record(node_name, mi):
+ """Return a dumpfile node-record for adding a (directory) node named
+ NODE_NAME with mergeinfo MI. Return it as a list of newline-terminated
+ lines.
+ """
+ headers_tmpl = """\
+Node-path: %s
+Node-kind: dir
+Node-action: add
+Prop-content-length: %d
+Content-length: %d
+"""
+ content_tmpl = """\
+K 13
+svn:mergeinfo
+V %d
+%s
+PROPS-END
+"""
+ content = content_tmpl % (len(mi), mi)
+ headers = headers_tmpl % (node_name, len(content), len(content))
+ record = headers + '\n' + content + '\n\n'
+ return record.splitlines(True)
+
+ # The test case mergeinfo (before, after) syncing, separated here with
+ # spaces instead of newlines
+ test_mi = [
+ ("", ""), # unchanged
+ ("/a:1", "/a:1"),
+ ("/a:1 /b:1*,2","/a:1 /b:1*,2"),
+ ("/:0:1", "/:0:1"), # unchanged; colon-zero in filename
+ ("/a:0", ""), # dropped entirely
+ ("/a:0*", ""),
+ ("/a:0 /b:0*", ""),
+ ("/a:1 /b:0", "/a:1"), # one kept, one dropped
+ ("/a:0 /b:1", "/b:1"),
+ ("/a:0,1 /b:1", "/a:1 /b:1"), # one kept, one changed
+ ("/a:1 /b:0,1", "/a:1 /b:1"),
+ ("/a:0,1 /b:0*,1 /c:0,2 /d:0-1 /e:0-1,3 /f:0-2 /g:0-3",
+ "/a:1 /b:1 /c:2 /d:1 /e:1,3 /f:1-2 /g:1-3"), # all changed
+ ("/a:0:0-1", "/a:0:1"), # changed; colon-zero in filename
+ ]
+
+ # Get the constant prefix for each dumpfile
+ dump_file_name = "mergeinfo-contains-r0.dump"
+ svnsync_tests_dir = os.path.join(os.path.dirname(sys.argv[0]),
+ 'svnsync_tests_data')
+ dump_in = open(os.path.join(svnsync_tests_dir, dump_file_name),
+ 'rb').readlines()
+ dump_out = list(dump_in) # duplicate the list
+
+ # Add dumpfile node records containing the test mergeinfo
+ for n, mi in enumerate(test_mi):
+ node_name = "D" + str(n)
+
+ mi_in = mi[0].replace(' ', '\n')
+ mi_out = mi[1].replace(' ', '\n')
+ dump_in.extend(make_node_record(node_name, mi_in))
+ dump_out.extend(make_node_record(node_name, mi_out))
- dest_url = svntest.main.file_scheme_prefix \
- + svntest.main.pathname2url(os.path.abspath(dest_sbox.repo_dir))
- run_init(dest_url, sbox.repo_url)
- run_sync(dest_url)
+ # Run the sync
+ dest_sbox = setup_and_sync(sbox, dump_in, bypass_prop_validation=True)
- # sanity check
- svntest.actions.run_and_verify_svn(None,
- ["iota\n"], [],
- 'ls', dest_url+'/branch@2')
+ # Compare the dump produced by the mirror repository with expected
+ verify_mirror(dest_sbox, dump_out)
########################################################################
@@ -1051,10 +665,6 @@ test_list = [ None,
file_dir_file,
copy_parent_modify_prop,
detect_meddling,
- basic_authz,
- copy_from_unreadable_dir,
- copy_with_mod_from_unreadable_dir,
- copy_with_mod_from_unreadable_dir_and_copy,
url_encoding,
no_author,
copy_revprops,
@@ -1066,19 +676,16 @@ test_list = [ None,
copy_bad_line_endings,
copy_bad_line_endings2,
copy_bad_encoding,
- identity_copy,
delete_svn_props,
commit_a_copy_of_root,
- specific_deny_authz,
descend_into_replace,
delete_revprops,
- fd_leak_sync_from_serf_to_local,
- copy_delete_unreadable_child,
+ fd_leak_sync_from_serf_to_local, # calls setrlimit
+ mergeinfo_contains_r0,
]
-serial_only = True
if __name__ == '__main__':
- svntest.main.run_tests(test_list, serial_only = serial_only)
+ svntest.main.run_tests(test_list)
# NOTREACHED
diff --git a/subversion/tests/cmdline/svnsync_tests_data/mergeinfo-contains-r0.dump b/subversion/tests/cmdline/svnsync_tests_data/mergeinfo-contains-r0.dump
new file mode 100644
index 0000000..25d244b
--- /dev/null
+++ b/subversion/tests/cmdline/svnsync_tests_data/mergeinfo-contains-r0.dump
@@ -0,0 +1,28 @@
+SVN-fs-dump-format-version: 2
+
+UUID: 6ad9f820-0205-0410-94a2-c8cf366bb2b3
+
+Revision-number: 0
+Prop-content-length: 56
+Content-length: 56
+
+K 8
+svn:date
+V 27
+2005-11-07T23:36:48.095832Z
+PROPS-END
+
+Revision-number: 1
+Prop-content-length: 84
+Content-length: 84
+
+K 10
+svn:author
+V 7
+jrandom
+K 8
+svn:date
+V 27
+2000-01-01T00:00:00.000000Z
+PROPS-END
+
diff --git a/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-A-changes.dump b/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-A-changes.dump
index 4fd3478..5e80293 100644
--- a/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-A-changes.dump
+++ b/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-A-changes.dump
@@ -1,6 +1,6 @@
SVN-fs-dump-format-version: 2
-UUID: 728f5e1e-a57c-4dd4-8b4f-ca752f5178f3
+UUID: 11659000-ab01-11e1-8800-0080c8fbf679
Revision-number: 0
Prop-content-length: 56
diff --git a/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-A-changes.expected.dump b/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-A-changes.expected.dump
index c6e665b..d2390d9 100644
--- a/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-A-changes.expected.dump
+++ b/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-A-changes.expected.dump
@@ -1,6 +1,6 @@
SVN-fs-dump-format-version: 2
-UUID: 728f5e1e-a57c-4dd4-8b4f-ca752f5178f3
+UUID: 11659000-ab01-11e1-8800-0080c8fbf679
Revision-number: 0
Prop-content-length: 56
diff --git a/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-only.dump b/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-only.dump
index fbefc4c..a4fc271 100644
--- a/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-only.dump
+++ b/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-only.dump
@@ -1,6 +1,6 @@
SVN-fs-dump-format-version: 2
-UUID: 728f5e1e-a57c-4dd4-8b4f-ca752f5178f3
+UUID: a6952d52-ab01-11e1-b37f-0080c8fbf679
Revision-number: 0
Prop-content-length: 56
diff --git a/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-only.expected.dump b/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-only.expected.dump
index 565bfcd..8e61c40 100644
--- a/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-only.expected.dump
+++ b/subversion/tests/cmdline/svnsync_tests_data/svnsync-trunk-only.expected.dump
@@ -1,6 +1,6 @@
SVN-fs-dump-format-version: 2
-UUID: 728f5e1e-a57c-4dd4-8b4f-ca752f5178f3
+UUID: a6952d52-ab01-11e1-b37f-0080c8fbf679
Revision-number: 0
Prop-content-length: 56
diff --git a/subversion/tests/cmdline/svntest/__init__.py b/subversion/tests/cmdline/svntest/__init__.py
index 55813a2..98a67b6 100644
--- a/subversion/tests/cmdline/svntest/__init__.py
+++ b/subversion/tests/cmdline/svntest/__init__.py
@@ -23,11 +23,11 @@
__all__ = [ ]
import sys
-if sys.hexversion < 0x2040000:
- sys.stderr.write('[SKIPPED] at least Python 2.4 is required\n')
+if sys.hexversion < 0x2050000:
+ sys.stderr.write('[SKIPPED] at least Python 2.5 is required\n')
# note: exiting is a bit harsh for a library module, but we really do
- # require Python 2.4. this package isn't going to work otherwise.
+ # require Python 2.5. this package isn't going to work otherwise.
# we're skipping this test, not failing, so exit with 0
sys.exit(0)
diff --git a/subversion/tests/cmdline/svntest/actions.py b/subversion/tests/cmdline/svntest/actions.py
index afee95a..feef017 100644
--- a/subversion/tests/cmdline/svntest/actions.py
+++ b/subversion/tests/cmdline/svntest/actions.py
@@ -24,14 +24,34 @@
######################################################################
import os, shutil, re, sys, errno
-import difflib, pprint
+import difflib, pprint, logging
import xml.parsers.expat
from xml.dom.minidom import parseString
+if sys.version_info[0] >= 3:
+ # Python >=3.0
+ from io import StringIO
+else:
+ # Python <3.0
+ from cStringIO import StringIO
import svntest
-from svntest import main, verify, tree, wc
+from svntest import main, verify, tree, wc, sandbox
from svntest import Failure
+logger = logging.getLogger()
+
+# (abbreviation)
+Item = svntest.wc.StateItem
+
+def _log_tree_state(msg, actual, subtree=""):
+ if subtree:
+ subtree += os.sep
+ o = StringIO()
+ o.write(msg + '\n')
+ tree.dump_tree_script(actual, subtree, stream=o)
+ logger.warn(o.getvalue())
+ o.close()
+
def no_sleep_for_timestamps():
os.environ['SVN_I_LOVE_CORRUPTED_WORKING_COPIES_SO_DISABLE_SLEEP_FOR_TIMESTAMPS'] = 'yes'
@@ -69,24 +89,18 @@ def setup_pristine_greek_repository():
# import the greek tree, using l:foo/p:bar
### todo: svn should not be prompting for auth info when using
### repositories with no auth/auth requirements
- exit_code, output, errput = main.run_svn(None, 'import', '-m',
- 'Log message for revision 1.',
- main.greek_dump_dir,
- main.pristine_greek_repos_url)
-
- # check for any errors from the import
- if len(errput):
- display_lines("Errors during initial 'svn import':",
- 'STDERR', None, errput)
- sys.exit(1)
+ _, output, _ = main.run_svn(None, 'import', '-m',
+ 'Log message for revision 1.',
+ main.greek_dump_dir,
+ main.pristine_greek_repos_url)
# verify the printed output of 'svn import'.
lastline = output.pop().strip()
match = re.search("(Committed|Imported) revision [0-9]+.", lastline)
if not match:
- print("ERROR: import did not succeed, while creating greek repos.")
- print("The final line from 'svn import' was:")
- print(lastline)
+ logger.error("import did not succeed, while creating greek repos.")
+ logger.error("The final line from 'svn import' was:")
+ logger.error(lastline)
sys.exit(1)
output_tree = wc.State.from_commit(output)
@@ -117,7 +131,7 @@ def guarantee_empty_repository(path):
nothing."""
if path == main.pristine_greek_repos_dir:
- print("ERROR: attempt to overwrite the pristine repos! Aborting.")
+ logger.error("attempt to overwrite the pristine repos! Aborting.")
sys.exit(1)
# create an empty repository at PATH.
@@ -129,18 +143,18 @@ def guarantee_empty_repository(path):
# the `pristine repos' to a new location.
# Note: make sure setup_pristine_greek_repository was called once before
# using this function.
-def guarantee_greek_repository(path):
+def guarantee_greek_repository(path, minor_version):
"""Guarantee that a local svn repository exists at PATH, containing
nothing but the greek-tree at revision 1."""
if path == main.pristine_greek_repos_dir:
- print("ERROR: attempt to overwrite the pristine repos! Aborting.")
+ logger.error("attempt to overwrite the pristine repos! Aborting.")
sys.exit(1)
# copy the pristine repository to PATH.
main.safe_rmtree(path)
- if main.copy_repos(main.pristine_greek_repos_dir, path, 1):
- print("ERROR: copying repository failed.")
+ if main.copy_repos(main.pristine_greek_repos_dir, path, 1, 1, minor_version):
+ logger.error("copying repository failed.")
sys.exit(1)
# make the repos world-writeable, for mod_dav_svn's sake.
@@ -316,11 +330,11 @@ def run_and_verify_load(repo_dir, dump_file_content,
expected_stderr = []
if bypass_prop_validation:
exit_code, output, errput = main.run_command_stdin(
- main.svnadmin_binary, expected_stderr, 0, 1, dump_file_content,
+ main.svnadmin_binary, expected_stderr, 0, True, dump_file_content,
'load', '--force-uuid', '--quiet', '--bypass-prop-validation', repo_dir)
else:
exit_code, output, errput = main.run_command_stdin(
- main.svnadmin_binary, expected_stderr, 0, 1, dump_file_content,
+ main.svnadmin_binary, expected_stderr, 0, True, dump_file_content,
'load', '--force-uuid', '--quiet', repo_dir)
verify.verify_outputs("Unexpected stderr output", None, errput,
@@ -407,6 +421,22 @@ def expected_noop_update_output(rev):
% (rev),
"no-op update")
+def run_and_verify_svnauthz(message, expected_stdout, expected_stderr,
+ expected_exit, compat_mode, *varargs):
+ """Run svnauthz command and check its output and exit code.
+ If COMPAT_MODE is True then run the command in pre-1.8
+ compatibility mode"""
+
+ if compat_mode:
+ exit_code, out, err = main.run_svnauthz_validate(*varargs)
+ else:
+ exit_code, out, err = main.run_svnauthz(*varargs)
+
+ verify.verify_outputs("Unexpected output", out, err,
+ expected_stdout, expected_stderr)
+ verify.verify_exit_code(message, exit_code, expected_exit)
+ return exit_code, out, err
+
######################################################################
# Subversion Actions
#
@@ -438,8 +468,6 @@ def run_and_verify_checkout2(do_remove,
if isinstance(output_tree, wc.State):
output_tree = output_tree.old_tree()
- if isinstance(disk_tree, wc.State):
- disk_tree = disk_tree.old_tree()
# Remove dir if it's already there, unless this is a forced checkout.
# In that case assume we want to test a forced checkout's toleration
@@ -458,22 +486,13 @@ def run_and_verify_checkout2(do_remove,
try:
tree.compare_trees("output", actual, output_tree)
except tree.SVNTreeUnequal:
- print("ACTUAL OUTPUT TREE:")
- tree.dump_tree_script(actual, wc_dir_name + os.sep)
+ _log_tree_state("ACTUAL OUTPUT TREE:", actual, wc_dir_name)
raise
- # Create a tree by scanning the working copy
- actual = tree.build_tree_from_wc(wc_dir_name)
-
- # Verify expected disk against actual disk.
- try:
- tree.compare_trees("disk", actual, disk_tree,
- singleton_handler_a, a_baton,
- singleton_handler_b, b_baton)
- except tree.SVNTreeUnequal:
- print("ACTUAL DISK TREE:")
- tree.dump_tree_script(actual, wc_dir_name + os.sep)
- raise
+ if disk_tree:
+ verify_disk(wc_dir_name, disk_tree, False,
+ singleton_handler_a, a_baton,
+ singleton_handler_b, b_baton)
def run_and_verify_checkout(URL, wc_dir_name, output_tree, disk_tree,
singleton_handler_a = None,
@@ -523,8 +542,7 @@ def run_and_verify_export(URL, export_dir_name, output_tree, disk_tree,
try:
tree.compare_trees("output", actual, output_tree)
except tree.SVNTreeUnequal:
- print("ACTUAL OUTPUT TREE:")
- tree.dump_tree_script(actual, export_dir_name + os.sep)
+ _log_tree_state("ACTUAL OUTPUT TREE:", actual, export_dir_name)
raise
# Create a tree by scanning the working copy. Don't ignore
@@ -536,8 +554,7 @@ def run_and_verify_export(URL, export_dir_name, output_tree, disk_tree,
try:
tree.compare_trees("disk", actual, disk_tree)
except tree.SVNTreeUnequal:
- print("ACTUAL DISK TREE:")
- tree.dump_tree_script(actual, export_dir_name + os.sep)
+ _log_tree_state("ACTUAL DISK TREE:", actual, export_dir_name)
raise
@@ -559,7 +576,10 @@ class LogEntry:
"""Assert that changed_paths is the same as this entry's changed_paths
Raises svntest.Failure if not.
"""
- raise Failure('NOT IMPLEMENTED')
+ if self.changed_paths != changed_paths:
+ raise Failure('\n' + '\n'.join(difflib.ndiff(
+ pprint.pformat(changed_paths).splitlines(),
+ pprint.pformat(self.changed_paths).splitlines())))
def assert_revprops(self, revprops):
"""Assert that the dict revprops is the same as this entry's revprops.
@@ -592,11 +612,13 @@ class LogParser:
self.parser.EndElementHandler = self.handle_end_element
self.parser.CharacterDataHandler = self.handle_character_data
# Ignore some things.
- self.ignore_elements('log', 'paths', 'path', 'revprops')
+ self.ignore_elements('log', 'paths', 'revprops')
self.ignore_tags('logentry_end', 'author_start', 'date_start', 'msg_start')
# internal state
self.cdata = []
self.property = None
+ self.kind = None
+ self.action = None
# the result
self.entries = []
@@ -640,6 +662,12 @@ class LogParser:
self.property = attrs['name']
def property_end(self):
self.entries[-1].revprops[self.property] = self.use_cdata()
+ def path_start(self, attrs):
+ self.kind = attrs['kind']
+ self.action = attrs['action']
+ def path_end(self):
+ self.entries[-1].changed_paths[self.use_cdata()] = [{'kind': self.kind,
+ 'action': self.action}]
def run_and_verify_log_xml(message=None, expected_paths=None,
expected_revprops=None, expected_stdout=None,
@@ -735,18 +763,13 @@ def verify_update(actual_output,
mergeinfo_output_tree = mergeinfo_output_tree.old_tree()
if isinstance(elision_output_tree, wc.State):
elision_output_tree = elision_output_tree.old_tree()
- if isinstance(disk_tree, wc.State):
- disk_tree = disk_tree.old_tree()
- if isinstance(status_tree, wc.State):
- status_tree = status_tree.old_tree()
# Verify actual output against expected output.
if output_tree:
try:
tree.compare_trees("output", actual_output, output_tree)
except tree.SVNTreeUnequal:
- print("ACTUAL OUTPUT TREE:")
- tree.dump_tree_script(actual_output, wc_dir_name + os.sep)
+ _log_tree_state("ACTUAL OUTPUT TREE:", actual_output, wc_dir_name)
raise
# Verify actual mergeinfo recording output against expected output.
@@ -755,9 +778,8 @@ def verify_update(actual_output,
tree.compare_trees("mergeinfo_output", actual_mergeinfo_output,
mergeinfo_output_tree)
except tree.SVNTreeUnequal:
- print("ACTUAL MERGEINFO OUTPUT TREE:")
- tree.dump_tree_script(actual_mergeinfo_output,
- wc_dir_name + os.sep)
+ _log_tree_state("ACTUAL MERGEINFO OUTPUT TREE:", actual_mergeinfo_output,
+ wc_dir_name)
raise
# Verify actual mergeinfo elision output against expected output.
@@ -766,36 +788,41 @@ def verify_update(actual_output,
tree.compare_trees("elision_output", actual_elision_output,
elision_output_tree)
except tree.SVNTreeUnequal:
- print("ACTUAL ELISION OUTPUT TREE:")
- tree.dump_tree_script(actual_elision_output,
- wc_dir_name + os.sep)
+ _log_tree_state("ACTUAL ELISION OUTPUT TREE:", actual_elision_output,
+ wc_dir_name)
raise
# Create a tree by scanning the working copy, and verify it
if disk_tree:
- actual_disk = tree.build_tree_from_wc(wc_dir_name, check_props)
- try:
- tree.compare_trees("disk", actual_disk, disk_tree,
- singleton_handler_a, a_baton,
- singleton_handler_b, b_baton)
- except tree.SVNTreeUnequal:
- print("EXPECTED DISK TREE:")
- tree.dump_tree_script(disk_tree)
- print("ACTUAL DISK TREE:")
- tree.dump_tree_script(actual_disk)
- raise
+ verify_disk(wc_dir_name, disk_tree, check_props,
+ singleton_handler_a, a_baton,
+ singleton_handler_b, b_baton)
# Verify via 'status' command too, if possible.
if status_tree:
run_and_verify_status(wc_dir_name, status_tree)
-def verify_disk(wc_dir_name, disk_tree, check_props=False):
+def verify_disk(wc_dir_name, disk_tree, check_props=False,
+ singleton_handler_a = None, a_baton = None,
+ singleton_handler_b = None, b_baton = None):
"""Verify WC_DIR_NAME against DISK_TREE. If CHECK_PROPS is set,
the comparison will examin props. Returns if successful, raises on
failure."""
- verify_update(None, None, None, wc_dir_name, None, None, None, disk_tree,
- None, check_props=check_props)
+
+ if isinstance(disk_tree, wc.State):
+ disk_tree = disk_tree.old_tree()
+
+ actual_disk = tree.build_tree_from_wc(wc_dir_name, check_props)
+ try:
+ tree.compare_trees("disk", actual_disk, disk_tree,
+ singleton_handler_a, a_baton,
+ singleton_handler_b, b_baton)
+ except tree.SVNTreeUnequal:
+ _log_tree_state("EXPECTED DISK TREE:", disk_tree)
+ _log_tree_state("ACTUAL DISK TREE:", actual_disk)
+ raise
+
@@ -819,8 +846,6 @@ def run_and_verify_update(wc_dir_name,
If ERROR_RE_STRING, the update must exit with error, and the error
message must match regular expression ERROR_RE_STRING.
- Else if ERROR_RE_STRING is None, then:
-
If OUTPUT_TREE is not None, the subcommand output will be verified
against OUTPUT_TREE. If DISK_TREE is not None, the working copy
itself will be verified against DISK_TREE. If STATUS_TREE is not
@@ -845,11 +870,13 @@ def run_and_verify_update(wc_dir_name,
if error_re_string:
rm = re.compile(error_re_string)
+ match = None
for line in errput:
match = rm.search(line)
if match:
- return
- raise main.SVNUnmatchedError
+ break
+ if not match:
+ raise main.SVNUnmatchedError
actual = wc.State.from_checkout(output)
verify_update(actual, None, None, wc_dir_name,
@@ -1030,9 +1057,9 @@ def run_and_verify_merge(dir, rev1, rev2, url1, url2,
try:
tree.compare_trees("disk", post_disk, pre_disk)
except tree.SVNTreeError:
- print("=============================================================")
- print("Dry-run merge altered working copy")
- print("=============================================================")
+ logger.warn("=============================================================")
+ logger.warn("Dry-run merge altered working copy")
+ logger.warn("=============================================================")
raise
@@ -1096,26 +1123,26 @@ def run_and_verify_merge(dir, rev1, rev2, url1, url2,
out_dry_copy = set(out_dry[:])
if out_copy != out_dry_copy:
- print("=============================================================")
- print("Merge outputs differ")
- print("The dry-run merge output:")
+ logger.warn("=============================================================")
+ logger.warn("Merge outputs differ")
+ logger.warn("The dry-run merge output:")
for x in out_dry:
- sys.stdout.write(x)
- print("The full merge output:")
- for x in out:
- sys.stdout.write(x)
- print("=============================================================")
+ logger.warn(x)
+ logger.warn("The full merge output:")
+ for x in merge_diff_out:
+ logger.warn(x)
+ logger.warn("=============================================================")
raise main.SVNUnmatchedError
def missing_skip(a, b):
- print("=============================================================")
- print("Merge failed to skip: " + a.path)
- print("=============================================================")
+ logger.warn("=============================================================")
+ logger.warn("Merge failed to skip: %s", a.path)
+ logger.warn("=============================================================")
raise Failure
def extra_skip(a, b):
- print("=============================================================")
- print("Merge unexpectedly skipped: " + a.path)
- print("=============================================================")
+ logger.warn("=============================================================")
+ logger.warn("Merge unexpectedly skipped: %s", a.path)
+ logger.warn("=============================================================")
raise Failure
myskiptree = tree.build_tree_from_skipped(out)
@@ -1125,8 +1152,7 @@ def run_and_verify_merge(dir, rev1, rev2, url1, url2,
tree.compare_trees("skip", myskiptree, skip_tree,
extra_skip, None, missing_skip, None)
except tree.SVNTreeUnequal:
- print("ACTUAL SKIP TREE:")
- tree.dump_tree_script(myskiptree, dir + os.sep)
+ _log_tree_state("ACTUAL SKIP TREE:", myskiptree, dir)
raise
actual_diff = svntest.wc.State.from_checkout(merge_diff_out, False)
@@ -1153,8 +1179,6 @@ def run_and_verify_patch(dir, patch_path,
If ERROR_RE_STRING, 'svn patch' must exit with error, and the error
message must match regular expression ERROR_RE_STRING.
- Else if ERROR_RE_STRING is None, then:
-
The subcommand output will be verified against OUTPUT_TREE, and the
working copy itself will be verified against DISK_TREE. If optional
STATUS_TREE is given, then 'svn status' output will be compared.
@@ -1182,9 +1206,9 @@ def run_and_verify_patch(dir, patch_path,
try:
tree.compare_trees("disk", post_disk, pre_disk)
except tree.SVNTreeError:
- print("=============================================================")
- print("'svn patch --dry-run' altered working copy")
- print("=============================================================")
+ logger.warn("=============================================================")
+ logger.warn("'svn patch --dry-run' altered working copy")
+ logger.warn("=============================================================")
raise
# Update and make a tree of the output.
@@ -1201,9 +1225,9 @@ def run_and_verify_patch(dir, patch_path,
if not match:
raise main.SVNUnmatchedError
elif err:
- print("UNEXPECTED STDERR:")
+ logger.warn("UNEXPECTED STDERR:")
for x in err:
- sys.stdout.write(x)
+ logger.warn(x)
raise verify.SVNUnexpectedStderr
if dry_run and out != out_dry:
@@ -1214,14 +1238,14 @@ def run_and_verify_patch(dir, patch_path,
'', out_dry_expected, out_dry)
def missing_skip(a, b):
- print("=============================================================")
- print("'svn patch' failed to skip: " + a.path)
- print("=============================================================")
+ logger.warn("=============================================================")
+ logger.warn("'svn patch' failed to skip: %s", a.path)
+ logger.warn("=============================================================")
raise Failure
def extra_skip(a, b):
- print("=============================================================")
- print("'svn patch' unexpectedly skipped: " + a.path)
- print("=============================================================")
+ logger.warn("=============================================================")
+ logger.warn("'svn patch' unexpectedly skipped: %s", a.path)
+ logger.warn("=============================================================")
raise Failure
myskiptree = tree.build_tree_from_skipped(out)
@@ -1263,8 +1287,7 @@ def run_and_verify_mergeinfo(error_re_string = None,
verify.verify_outputs(None, None, err, None, expected_err)
return
- out = sorted([_f for _f in [x.rstrip()[1:] for x in out] if _f])
- expected_output.sort()
+ out = [_f for _f in [x.rstrip()[1:] for x in out] if _f]
extra_out = []
if out != expected_output:
exp_hash = dict.fromkeys(expected_output)
@@ -1323,7 +1346,6 @@ def run_and_verify_switch(wc_dir_name,
error_re_string = ".*(" + error_re_string + ")"
expected_err = verify.RegexOutput(error_re_string, match_all=False)
verify.verify_outputs(None, None, errput, None, expected_err)
- return
elif errput:
raise verify.SVNUnexpectedStderr(err)
@@ -1335,7 +1357,7 @@ def run_and_verify_switch(wc_dir_name,
singleton_handler_b, b_baton,
check_props)
-def process_output_for_commit(output):
+def process_output_for_commit(output, error_re_string):
"""Helper for run_and_verify_commit(), also used in the factory."""
# Remove the final output line, and verify that the commit succeeded.
lastline = ""
@@ -1354,10 +1376,10 @@ def process_output_for_commit(output):
cm = re.compile("(Committed|Imported) revision [0-9]+.")
match = cm.search(lastline)
- if not match:
- print("ERROR: commit did not succeed.")
- print("The final line from 'svn ci' was:")
- print(lastline)
+ if not match and not error_re_string:
+ logger.warn("ERROR: commit did not succeed.")
+ logger.warn("The final line from 'svn ci' was:")
+ logger.warn(lastline)
raise main.SVNCommitFailure
# The new 'final' line in the output is either a regular line that
@@ -1399,8 +1421,6 @@ def run_and_verify_commit(wc_dir_name, output_tree, status_tree,
if isinstance(output_tree, wc.State):
output_tree = output_tree.old_tree()
- if isinstance(status_tree, wc.State):
- status_tree = status_tree.old_tree()
# Commit.
if '-m' not in args and '-F' not in args:
@@ -1413,23 +1433,22 @@ def run_and_verify_commit(wc_dir_name, output_tree, status_tree,
error_re_string = ".*(" + error_re_string + ")"
expected_err = verify.RegexOutput(error_re_string, match_all=False)
verify.verify_outputs(None, None, errput, None, expected_err)
- return
# Else not expecting error:
# Convert the output into a tree.
- output = process_output_for_commit(output)
+ output = process_output_for_commit(output, error_re_string)
actual = tree.build_tree_from_commit(output)
# Verify actual output against expected output.
- try:
- tree.compare_trees("output", actual, output_tree)
- except tree.SVNTreeError:
- verify.display_trees("Output of commit is unexpected",
- "OUTPUT TREE", output_tree, actual)
- print("ACTUAL OUTPUT TREE:")
- tree.dump_tree_script(actual, wc_dir_name + os.sep)
- raise
+ if output_tree:
+ try:
+ tree.compare_trees("output", actual, output_tree)
+ except tree.SVNTreeError:
+ verify.display_trees("Output of commit is unexpected",
+ "OUTPUT TREE", output_tree, actual)
+ _log_tree_state("ACTUAL OUTPUT TREE:", actual, wc_dir_name)
+ raise
# Verify via 'status' command too, if possible.
if status_tree:
@@ -1438,48 +1457,50 @@ def run_and_verify_commit(wc_dir_name, output_tree, status_tree,
# This function always passes '-q' to the status command, which
# suppresses the printing of any unversioned or nonexistent items.
-def run_and_verify_status(wc_dir_name, output_tree,
+def run_and_verify_status(wc_dir_name, status_tree,
singleton_handler_a = None,
a_baton = None,
singleton_handler_b = None,
b_baton = None):
"""Run 'status' on WC_DIR_NAME and compare it with the
- expected OUTPUT_TREE. SINGLETON_HANDLER_A and SINGLETON_HANDLER_B will
+ expected STATUS_TREE. SINGLETON_HANDLER_A and SINGLETON_HANDLER_B will
be passed to tree.compare_trees - see that function's doc string for
more details.
Returns on success, raises on failure."""
- if isinstance(output_tree, wc.State):
- output_state = output_tree
- output_tree = output_tree.old_tree()
- else:
- output_state = None
-
exit_code, output, errput = main.run_svn(None, 'status', '-v', '-u', '-q',
wc_dir_name)
- actual = tree.build_tree_from_status(output)
+ actual_status = svntest.wc.State.from_status(output)
# Verify actual output against expected output.
- try:
- tree.compare_trees("status", actual, output_tree,
- singleton_handler_a, a_baton,
- singleton_handler_b, b_baton)
- except tree.SVNTreeError:
- verify.display_trees(None, 'STATUS OUTPUT TREE', output_tree, actual)
- print("ACTUAL STATUS TREE:")
- tree.dump_tree_script(actual, wc_dir_name + os.sep)
- raise
+ if isinstance(status_tree, wc.State):
+ try:
+ status_tree.compare_and_display('status', actual_status)
+ except tree.SVNTreeError:
+ _log_tree_state("ACTUAL STATUS TREE:", actual_status.old_tree(),
+ wc_dir_name)
+ raise
+ else:
+ actual_status = actual_status.old_tree()
+ try:
+ tree.compare_trees("status", actual_status, status_tree,
+ singleton_handler_a, a_baton,
+ singleton_handler_b, b_baton)
+ except tree.SVNTreeError:
+ verify.display_trees(None, 'STATUS OUTPUT TREE', status_tree, actual_status)
+ _log_tree_state("ACTUAL STATUS TREE:", actual_status, wc_dir_name)
+ raise
# if we have an output State, and we can/are-allowed to create an
# entries-based State, then compare the two.
- if output_state:
- entries_state = wc.State.from_entries(wc_dir_name)
- if entries_state:
- tweaked = output_state.copy()
+ if isinstance(status_tree, wc.State):
+ actual_entries = wc.State.from_entries(wc_dir_name)
+ if actual_entries:
+ tweaked = status_tree.copy()
tweaked.tweak_for_entries_compare()
try:
- tweaked.compare_and_display('entries', entries_state)
+ tweaked.compare_and_display('entries', actual_entries)
except tree.SVNTreeUnequal:
### do something more
raise
@@ -1492,21 +1513,27 @@ def run_and_verify_unquiet_status(wc_dir_name, status_tree):
expected STATUS_TREE.
Returns on success, raises on failure."""
- if isinstance(status_tree, wc.State):
- status_tree = status_tree.old_tree()
-
exit_code, output, errput = main.run_svn(None, 'status', '-v',
'-u', wc_dir_name)
- actual = tree.build_tree_from_status(output)
+ actual_status = svntest.wc.State.from_status(output)
# Verify actual output against expected output.
- try:
- tree.compare_trees("UNQUIET STATUS", actual, status_tree)
- except tree.SVNTreeError:
- print("ACTUAL UNQUIET STATUS TREE:")
- tree.dump_tree_script(actual, wc_dir_name + os.sep)
- raise
+ if isinstance(status_tree, wc.State):
+ try:
+ status_tree.compare_and_display('unquiet status', actual_status)
+ except tree.SVNTreeError:
+ _log_tree_state("ACTUAL STATUS TREE:",
+ actual_status.normalize().old_tree(), wc_dir_name)
+ raise
+ else:
+ actual_status = actual_status.old_tree()
+ try:
+ tree.compare_trees("UNQUIET STATUS", actual_status, status_tree)
+ except tree.SVNTreeError:
+ _log_tree_state("ACTUAL UNQUIET STATUS TREE:", actual_status,
+ wc_dir_name)
+ raise
def run_and_verify_status_xml(expected_entries = [],
*args):
@@ -1558,6 +1585,90 @@ def run_and_verify_status_xml(expected_entries = [],
pprint.pformat(expected_entries).splitlines(),
pprint.pformat(actual_entries).splitlines())))
+def run_and_verify_inherited_prop_xml(path_or_url,
+ expected_inherited_props,
+ expected_explicit_props,
+ propname=None,
+ peg_rev=None,
+ *args):
+ """If PROPNAME is None, then call run_and_verify_svn with proplist -v --xml
+ --show-inherited-props on PATH_OR_URL, otherwise call run_and_verify_svn
+ with propget PROPNAME --xml --show-inherited-props.
+
+ PATH_OR_URL is pegged at PEG_REV if the latter is not None. If PEG_REV
+ is none, then PATH_OR_URL is pegged at HEAD if a url.
+
+ EXPECTED_INHERITED_PROPS is a (possibly empty) dict mapping working copy
+ paths or URLs to dicts of inherited properties. EXPECTED_EXPLICIT_PROPS is
+ a (possibly empty) dict of the explicit properties expected on PATH_OR_URL.
+
+ Returns on success, raises on failure if EXPECTED_INHERITED_PROPS or
+ EXPECTED_EXPLICIT_PROPS don't match the results of proplist/propget.
+ """
+
+ if peg_rev is None:
+ if sandbox.is_url(path_or_url):
+ path_or_url = path_or_url + '@HEAD'
+ else:
+ path_or_url = path_or_url + '@' + str(peg_rev)
+
+ if (propname):
+ exit_code, output, errput = svntest.actions.run_and_verify_svn(
+ None, None, [], 'propget', propname, '--xml',
+ '--show-inherited-props', path_or_url, *args)
+ else:
+ exit_code, output, errput = svntest.actions.run_and_verify_svn(
+ None, None, [], 'proplist', '-v', '--xml', '--show-inherited-props',
+ path_or_url, *args)
+
+ if len(errput) > 0:
+ raise Failure
+
+ # Props inherited from within the WC are keyed on absolute paths.
+ expected_iprops = {}
+ for x in expected_inherited_props:
+ if sandbox.is_url(x):
+ expected_iprops[x] = expected_inherited_props[x]
+ else:
+ expected_iprops[os.path.abspath(x)] = expected_inherited_props[x]
+
+ actual_iprops = {}
+ actual_explicit_props = {}
+
+ doc = parseString(''.join(output))
+ targets = doc.getElementsByTagName('target')
+ for t in targets:
+
+ # Create actual inherited props.
+ iprops = t.getElementsByTagName('inherited_property')
+
+ if len(iprops) > 0:
+ actual_iprops[t.getAttribute('path')]={}
+
+ for i in iprops:
+ actual_iprops[t.getAttribute('path')][i.getAttribute('name')] = \
+ i.firstChild.nodeValue
+
+ # Create actual explicit props.
+ xprops = t.getElementsByTagName('property')
+
+ for x in xprops:
+ actual_explicit_props[x.getAttribute('name')] = x.firstChild.nodeValue
+
+ if expected_explicit_props != actual_explicit_props:
+ raise svntest.Failure(
+ 'Actual and expected explicit props do not match\n' +
+ '\n'.join(difflib.ndiff(
+ pprint.pformat(expected_explicit_props).splitlines(),
+ pprint.pformat(actual_explicit_props).splitlines())))
+
+ if expected_iprops != actual_iprops:
+ raise svntest.Failure(
+ 'Actual and expected inherited props do not match\n' +
+ '\n'.join(difflib.ndiff(
+ pprint.pformat(expected_iprops).splitlines(),
+ pprint.pformat(actual_iprops).splitlines())))
+
def run_and_verify_diff_summarize_xml(error_re_string = [],
expected_prefix = None,
expected_paths = [],
@@ -1610,7 +1721,7 @@ def run_and_verify_diff_summarize_xml(error_re_string = [],
modified_path = modified_path.replace(os.sep, "/")
if modified_path not in expected_paths:
- print("ERROR: %s not expected in the changed paths." % modified_path)
+ logger.warn("ERROR: %s not expected in the changed paths.", modified_path)
raise Failure
index = expected_paths.index(modified_path)
@@ -1622,15 +1733,15 @@ def run_and_verify_diff_summarize_xml(error_re_string = [],
actual_prop = path.getAttribute('props')
if expected_item != actual_item:
- print("ERROR: expected: %s actual: %s" % (expected_item, actual_item))
+ logger.warn("ERROR: expected: %s actual: %s", expected_item, actual_item)
raise Failure
if expected_kind != actual_kind:
- print("ERROR: expected: %s actual: %s" % (expected_kind, actual_kind))
+ logger.warn("ERROR: expected: %s actual: %s", expected_kind, actual_kind)
raise Failure
if expected_prop != actual_prop:
- print("ERROR: expected: %s actual: %s" % (expected_prop, actual_prop))
+ logger.warn("ERROR: expected: %s actual: %s", expected_prop, actual_prop)
raise Failure
def run_and_verify_diff_summarize(output_tree, *args):
@@ -1653,8 +1764,7 @@ def run_and_verify_diff_summarize(output_tree, *args):
tree.compare_trees("output", actual, output_tree)
except tree.SVNTreeError:
verify.display_trees(None, 'DIFF OUTPUT TREE', output_tree, actual)
- print("ACTUAL DIFF OUTPUT TREE:")
- tree.dump_tree_script(actual)
+ _log_tree_state("ACTUAL DIFF OUTPUT TREE:", actual)
raise
def run_and_validate_lock(path, username):
@@ -1674,7 +1784,7 @@ def run_and_validate_lock(path, username):
'info','-R',
path)
- ### TODO: Leverage RegexOuput([...], match_all=True) here.
+ ### TODO: Leverage RegexOutput([...], match_all=True) here.
# prepare the regexs to compare against
token_re = re.compile(".*?Lock Token: opaquelocktoken:.*?", re.DOTALL)
author_re = re.compile(".*?Lock Owner: %s\n.*?" % username, re.DOTALL)
@@ -1697,9 +1807,17 @@ def _run_and_verify_resolve(cmd, expected_paths, *args):
# TODO: verify that the status of PATHS changes accordingly.
if len(args) == 0:
args = expected_paths
- expected_output = verify.UnorderedOutput([
- "Resolved conflicted state of '" + path + "'\n" for path in
- expected_paths])
+ expected_output = verify.AlternateOutput([
+ verify.UnorderedOutput([
+ "Resolved conflicted state of '" + path + "'\n" for path in
+ expected_paths]),
+ verify.UnorderedOutput([
+ "Breaking move with source path '" + path + "'\n" for path in
+ expected_paths] + [
+ "Resolved conflicted state of '" + path + "'\n" for path in
+ expected_paths]),
+ ],
+ match_all=False)
run_and_verify_svn(None, expected_output, [],
cmd, *args)
@@ -1733,7 +1851,8 @@ def run_and_verify_revert(expected_paths, *args):
# This allows a test to *quickly* bootstrap itself.
-def make_repo_and_wc(sbox, create_wc = True, read_only = False):
+def make_repo_and_wc(sbox, create_wc = True, read_only = False,
+ minor_version = None):
"""Create a fresh 'Greek Tree' repository and check out a WC from it.
If READ_ONLY is False, a dedicated repository will be created, at the path
@@ -1748,7 +1867,7 @@ def make_repo_and_wc(sbox, create_wc = True, read_only = False):
# Create (or copy afresh) a new repos with a greek tree in it.
if not read_only:
- guarantee_greek_repository(sbox.repo_dir)
+ guarantee_greek_repository(sbox.repo_dir, minor_version)
if create_wc:
# Generate the expected output tree.
@@ -1819,7 +1938,11 @@ def get_wc_base_rev(wc_dir):
def hook_failure_message(hook_name):
"""Return the error message that the client prints for failure of the
specified hook HOOK_NAME. The wording changed with Subversion 1.5."""
- if svntest.main.options.server_minor_version < 5:
+
+ # Output depends on the server version, not the repository version.
+ # This gets the wrong result for modern servers with old format
+ # repositories.
+ if svntest.main.options.server_minor_version < 5 and not svntest.main.is_ra_type_file():
return "'%s' hook failed with error output:\n" % hook_name
else:
if hook_name in ["start-commit", "pre-commit"]:
@@ -1853,7 +1976,8 @@ def enable_revprop_changes(repo_dir):
pre-revprop-change hook script and (if appropriate) making it executable."""
hook_path = main.get_pre_revprop_change_hook_path(repo_dir)
- main.create_python_hook_script(hook_path, 'import sys; sys.exit(0)')
+ main.create_python_hook_script(hook_path, 'import sys; sys.exit(0)',
+ cmd_alternative='@exit 0')
def disable_revprop_changes(repo_dir):
"""Disable revprop changes in the repository at REPO_DIR by creating a
@@ -1863,8 +1987,12 @@ def disable_revprop_changes(repo_dir):
hook_path = main.get_pre_revprop_change_hook_path(repo_dir)
main.create_python_hook_script(hook_path,
'import sys\n'
- 'sys.stderr.write("pre-revprop-change %s" % " ".join(sys.argv[1:6]))\n'
- 'sys.exit(1)\n')
+ 'sys.stderr.write("pre-revprop-change %s" %'
+ ' " ".join(sys.argv[1:]))\n'
+ 'sys.exit(1)\n',
+ cmd_alternative=
+ '@echo pre-revprop-change %* 1>&2\n'
+ '@exit 1\n')
def create_failing_post_commit_hook(repo_dir):
"""Create a post-commit hook script in the repository at REPO_DIR that always
@@ -1873,27 +2001,34 @@ def create_failing_post_commit_hook(repo_dir):
hook_path = main.get_post_commit_hook_path(repo_dir)
main.create_python_hook_script(hook_path, 'import sys\n'
'sys.stderr.write("Post-commit hook failed")\n'
- 'sys.exit(1)')
+ 'sys.exit(1)\n',
+ cmd_alternative=
+ '@echo Post-commit hook failed 1>&2\n'
+ '@exit 1\n')
# set_prop can be used for properties with NULL characters which are not
# handled correctly when passed to subprocess.Popen() and values like "*"
# which are not handled correctly on Windows.
-def set_prop(name, value, path, expected_re_string=None):
+def set_prop(name, value, path, expected_re_string=None, force=None):
"""Set a property with specified value"""
+ if not force:
+ propset = ('propset',)
+ else:
+ propset = ('propset', '--force')
if value and (value[0] == '-' or '\x00' in value or sys.platform == 'win32'):
from tempfile import mkstemp
(fd, value_file_path) = mkstemp()
+ os.close(fd)
value_file = open(value_file_path, 'wb')
value_file.write(value)
value_file.flush()
value_file.close()
- exit_code, out, err = main.run_svn(expected_re_string, 'propset',
- '-F', value_file_path, name, path)
- os.close(fd)
+ propset += ('-F', value_file_path, name, path)
+ exit_code, out, err = main.run_svn(expected_re_string, *propset)
os.remove(value_file_path)
else:
- exit_code, out, err = main.run_svn(expected_re_string, 'propset',
- name, value, path)
+ propset += (name, value, path)
+ exit_code, out, err = main.run_svn(expected_re_string, *propset)
if expected_re_string:
if not expected_re_string.startswith(".*"):
expected_re_string = ".*(" + expected_re_string + ")"
@@ -1909,7 +2044,7 @@ def check_prop(name, path, exp_out, revprop=None):
else:
revprop_options = []
# Not using run_svn because binary_mode must be set
- exit_code, out, err = main.run_command(main.svn_binary, None, 1, 'pg',
+ exit_code, out, err = main.run_command(main.svn_binary, None, True, 'pg',
'--strict', name, path,
'--config-dir',
main.default_config_dir,
@@ -1917,9 +2052,9 @@ def check_prop(name, path, exp_out, revprop=None):
'--password', main.wc_passwd,
*revprop_options)
if out != exp_out:
- print("svn pg --strict %s output does not match expected." % name)
- print("Expected standard output: %s\n" % exp_out)
- print("Actual standard output: %s\n" % out)
+ logger.warn("svn pg --strict %s output does not match expected.", name)
+ logger.warn("Expected standard output: %s\n", exp_out)
+ logger.warn("Actual standard output: %s\n", out)
raise Failure
def fill_file_with_lines(wc_path, line_nbr, line_descrip=None,
@@ -2092,980 +2227,3 @@ def build_greek_tree_conflicts(sbox):
run_and_verify_svn(None, verify.AnyOutput, [], 'update', wc_dir)
-def make_deep_trees(base):
- """Helper function for deep trees conflicts. Create a set of trees,
- each in its own "container" dir. Any conflicts can be tested separately
- in each container.
- """
- j = os.path.join
- # Create the container dirs.
- F = j(base, 'F')
- D = j(base, 'D')
- DF = j(base, 'DF')
- DD = j(base, 'DD')
- DDF = j(base, 'DDF')
- DDD = j(base, 'DDD')
- os.makedirs(F)
- os.makedirs(j(D, 'D1'))
- os.makedirs(j(DF, 'D1'))
- os.makedirs(j(DD, 'D1', 'D2'))
- os.makedirs(j(DDF, 'D1', 'D2'))
- os.makedirs(j(DDD, 'D1', 'D2', 'D3'))
-
- # Create their files.
- alpha = j(F, 'alpha')
- beta = j(DF, 'D1', 'beta')
- gamma = j(DDF, 'D1', 'D2', 'gamma')
- main.file_append(alpha, "This is the file 'alpha'.\n")
- main.file_append(beta, "This is the file 'beta'.\n")
- main.file_append(gamma, "This is the file 'gamma'.\n")
-
-
-def add_deep_trees(sbox, base_dir_name):
- """Prepare a "deep_trees" within a given directory.
-
- The directory <sbox.wc_dir>/<base_dir_name> is created and a deep_tree
- is created within. The items are only added, a commit has to be
- called separately, if needed.
-
- <base_dir_name> will thus be a container for the set of containers
- mentioned in make_deep_trees().
- """
- j = os.path.join
- base = j(sbox.wc_dir, base_dir_name)
- make_deep_trees(base)
- main.run_svn(None, 'add', base)
-
-
-Item = wc.StateItem
-
-# initial deep trees state
-deep_trees_virginal_state = wc.State('', {
- 'F' : Item(),
- 'F/alpha' : Item("This is the file 'alpha'.\n"),
- 'D' : Item(),
- 'D/D1' : Item(),
- 'DF' : Item(),
- 'DF/D1' : Item(),
- 'DF/D1/beta' : Item("This is the file 'beta'.\n"),
- 'DD' : Item(),
- 'DD/D1' : Item(),
- 'DD/D1/D2' : Item(),
- 'DDF' : Item(),
- 'DDF/D1' : Item(),
- 'DDF/D1/D2' : Item(),
- 'DDF/D1/D2/gamma' : Item("This is the file 'gamma'.\n"),
- 'DDD' : Item(),
- 'DDD/D1' : Item(),
- 'DDD/D1/D2' : Item(),
- 'DDD/D1/D2/D3' : Item(),
- })
-
-
-# Many actions on deep trees and their resulting states...
-
-def deep_trees_leaf_edit(base):
- """Helper function for deep trees test cases. Append text to files,
- create new files in empty directories, and change leaf node properties."""
- j = os.path.join
- F = j(base, 'F', 'alpha')
- DF = j(base, 'DF', 'D1', 'beta')
- DDF = j(base, 'DDF', 'D1', 'D2', 'gamma')
- main.file_append(F, "More text for file alpha.\n")
- main.file_append(DF, "More text for file beta.\n")
- main.file_append(DDF, "More text for file gamma.\n")
- run_and_verify_svn(None, verify.AnyOutput, [],
- 'propset', 'prop1', '1', F, DF, DDF)
-
- D = j(base, 'D', 'D1')
- DD = j(base, 'DD', 'D1', 'D2')
- DDD = j(base, 'DDD', 'D1', 'D2', 'D3')
- run_and_verify_svn(None, verify.AnyOutput, [],
- 'propset', 'prop1', '1', D, DD, DDD)
- D = j(base, 'D', 'D1', 'delta')
- DD = j(base, 'DD', 'D1', 'D2', 'epsilon')
- DDD = j(base, 'DDD', 'D1', 'D2', 'D3', 'zeta')
- main.file_append(D, "This is the file 'delta'.\n")
- main.file_append(DD, "This is the file 'epsilon'.\n")
- main.file_append(DDD, "This is the file 'zeta'.\n")
- run_and_verify_svn(None, verify.AnyOutput, [],
- 'add', D, DD, DDD)
-
-# deep trees state after a call to deep_trees_leaf_edit
-deep_trees_after_leaf_edit = wc.State('', {
- 'F' : Item(),
- 'F/alpha' : Item("This is the file 'alpha'.\nMore text for file alpha.\n"),
- 'D' : Item(),
- 'D/D1' : Item(),
- 'D/D1/delta' : Item("This is the file 'delta'.\n"),
- 'DF' : Item(),
- 'DF/D1' : Item(),
- 'DF/D1/beta' : Item("This is the file 'beta'.\nMore text for file beta.\n"),
- 'DD' : Item(),
- 'DD/D1' : Item(),
- 'DD/D1/D2' : Item(),
- 'DD/D1/D2/epsilon' : Item("This is the file 'epsilon'.\n"),
- 'DDF' : Item(),
- 'DDF/D1' : Item(),
- 'DDF/D1/D2' : Item(),
- 'DDF/D1/D2/gamma' : Item("This is the file 'gamma'.\nMore text for file gamma.\n"),
- 'DDD' : Item(),
- 'DDD/D1' : Item(),
- 'DDD/D1/D2' : Item(),
- 'DDD/D1/D2/D3' : Item(),
- 'DDD/D1/D2/D3/zeta' : Item("This is the file 'zeta'.\n"),
- })
-
-
-def deep_trees_leaf_del(base):
- """Helper function for deep trees test cases. Delete files and empty
- dirs."""
- j = os.path.join
- F = j(base, 'F', 'alpha')
- D = j(base, 'D', 'D1')
- DF = j(base, 'DF', 'D1', 'beta')
- DD = j(base, 'DD', 'D1', 'D2')
- DDF = j(base, 'DDF', 'D1', 'D2', 'gamma')
- DDD = j(base, 'DDD', 'D1', 'D2', 'D3')
- main.run_svn(None, 'rm', F, D, DF, DD, DDF, DDD)
-
-# deep trees state after a call to deep_trees_leaf_del
-deep_trees_after_leaf_del = wc.State('', {
- 'F' : Item(),
- 'D' : Item(),
- 'DF' : Item(),
- 'DF/D1' : Item(),
- 'DD' : Item(),
- 'DD/D1' : Item(),
- 'DDF' : Item(),
- 'DDF/D1' : Item(),
- 'DDF/D1/D2' : Item(),
- 'DDD' : Item(),
- 'DDD/D1' : Item(),
- 'DDD/D1/D2' : Item(),
- })
-
-# deep trees state after a call to deep_trees_leaf_del with no commit
-def deep_trees_after_leaf_del_no_ci(wc_dir):
- if svntest.main.wc_is_singledb(wc_dir):
- return deep_trees_after_leaf_del
- else:
- return deep_trees_empty_dirs
-
-
-def deep_trees_tree_del(base):
- """Helper function for deep trees test cases. Delete top-level dirs."""
- j = os.path.join
- F = j(base, 'F', 'alpha')
- D = j(base, 'D', 'D1')
- DF = j(base, 'DF', 'D1')
- DD = j(base, 'DD', 'D1')
- DDF = j(base, 'DDF', 'D1')
- DDD = j(base, 'DDD', 'D1')
- main.run_svn(None, 'rm', F, D, DF, DD, DDF, DDD)
-
-def deep_trees_rmtree(base):
- """Helper function for deep trees test cases. Delete top-level dirs
- with rmtree instead of svn del."""
- j = os.path.join
- F = j(base, 'F', 'alpha')
- D = j(base, 'D', 'D1')
- DF = j(base, 'DF', 'D1')
- DD = j(base, 'DD', 'D1')
- DDF = j(base, 'DDF', 'D1')
- DDD = j(base, 'DDD', 'D1')
- os.unlink(F)
- main.safe_rmtree(D)
- main.safe_rmtree(DF)
- main.safe_rmtree(DD)
- main.safe_rmtree(DDF)
- main.safe_rmtree(DDD)
-
-# deep trees state after a call to deep_trees_tree_del
-deep_trees_after_tree_del = wc.State('', {
- 'F' : Item(),
- 'D' : Item(),
- 'DF' : Item(),
- 'DD' : Item(),
- 'DDF' : Item(),
- 'DDD' : Item(),
- })
-
-# deep trees state without any files
-deep_trees_empty_dirs = wc.State('', {
- 'F' : Item(),
- 'D' : Item(),
- 'D/D1' : Item(),
- 'DF' : Item(),
- 'DF/D1' : Item(),
- 'DD' : Item(),
- 'DD/D1' : Item(),
- 'DD/D1/D2' : Item(),
- 'DDF' : Item(),
- 'DDF/D1' : Item(),
- 'DDF/D1/D2' : Item(),
- 'DDD' : Item(),
- 'DDD/D1' : Item(),
- 'DDD/D1/D2' : Item(),
- 'DDD/D1/D2/D3' : Item(),
- })
-
-# deep trees state after a call to deep_trees_tree_del with no commit
-def deep_trees_after_tree_del_no_ci(wc_dir):
- if svntest.main.wc_is_singledb(wc_dir):
- return deep_trees_after_tree_del
- else:
- return deep_trees_empty_dirs
-
-def deep_trees_tree_del_repos(base):
- """Helper function for deep trees test cases. Delete top-level dirs,
- directly in the repository."""
- j = '/'.join
- F = j([base, 'F', 'alpha'])
- D = j([base, 'D', 'D1'])
- DF = j([base, 'DF', 'D1'])
- DD = j([base, 'DD', 'D1'])
- DDF = j([base, 'DDF', 'D1'])
- DDD = j([base, 'DDD', 'D1'])
- main.run_svn(None, 'mkdir', '-m', '', F, D, DF, DD, DDF, DDD)
-
-# Expected merge/update/switch output.
-
-deep_trees_conflict_output = wc.State('', {
- 'F/alpha' : Item(status=' ', treeconflict='C'),
- 'D/D1' : Item(status=' ', treeconflict='C'),
- 'DF/D1' : Item(status=' ', treeconflict='C'),
- 'DD/D1' : Item(status=' ', treeconflict='C'),
- 'DDF/D1' : Item(status=' ', treeconflict='C'),
- 'DDD/D1' : Item(status=' ', treeconflict='C'),
- })
-
-deep_trees_conflict_output_skipped = wc.State('', {
- 'D/D1' : Item(verb='Skipped'),
- 'F/alpha' : Item(verb='Skipped'),
- 'DD/D1' : Item(verb='Skipped'),
- 'DF/D1' : Item(verb='Skipped'),
- 'DDD/D1' : Item(verb='Skipped'),
- 'DDF/D1' : Item(verb='Skipped'),
- })
-
-# Expected status output after merge/update/switch.
-
-deep_trees_status_local_tree_del = wc.State('', {
- '' : Item(status=' ', wc_rev=3),
- 'D' : Item(status=' ', wc_rev=3),
- 'D/D1' : Item(status='D ', wc_rev=2, treeconflict='C'),
- 'DD' : Item(status=' ', wc_rev=3),
- 'DD/D1' : Item(status='D ', wc_rev=2, treeconflict='C'),
- 'DD/D1/D2' : Item(status='D ', wc_rev=2),
- 'DDD' : Item(status=' ', wc_rev=3),
- 'DDD/D1' : Item(status='D ', wc_rev=2, treeconflict='C'),
- 'DDD/D1/D2' : Item(status='D ', wc_rev=2),
- 'DDD/D1/D2/D3' : Item(status='D ', wc_rev=2),
- 'DDF' : Item(status=' ', wc_rev=3),
- 'DDF/D1' : Item(status='D ', wc_rev=2, treeconflict='C'),
- 'DDF/D1/D2' : Item(status='D ', wc_rev=2),
- 'DDF/D1/D2/gamma' : Item(status='D ', wc_rev=2),
- 'DF' : Item(status=' ', wc_rev=3),
- 'DF/D1' : Item(status='D ', wc_rev=2, treeconflict='C'),
- 'DF/D1/beta' : Item(status='D ', wc_rev=2),
- 'F' : Item(status=' ', wc_rev=3),
- 'F/alpha' : Item(status='D ', wc_rev=2, treeconflict='C'),
- })
-
-deep_trees_status_local_leaf_edit = wc.State('', {
- '' : Item(status=' ', wc_rev=3),
- 'D' : Item(status=' ', wc_rev=3),
- 'D/D1' : Item(status=' M', wc_rev=2, treeconflict='C'),
- 'D/D1/delta' : Item(status='A ', wc_rev=0),
- 'DD' : Item(status=' ', wc_rev=3),
- 'DD/D1' : Item(status=' ', wc_rev=2, treeconflict='C'),
- 'DD/D1/D2' : Item(status=' M', wc_rev=2),
- 'DD/D1/D2/epsilon' : Item(status='A ', wc_rev=0),
- 'DDD' : Item(status=' ', wc_rev=3),
- 'DDD/D1' : Item(status=' ', wc_rev=2, treeconflict='C'),
- 'DDD/D1/D2' : Item(status=' ', wc_rev=2),
- 'DDD/D1/D2/D3' : Item(status=' M', wc_rev=2),
- 'DDD/D1/D2/D3/zeta' : Item(status='A ', wc_rev=0),
- 'DDF' : Item(status=' ', wc_rev=3),
- 'DDF/D1' : Item(status=' ', wc_rev=2, treeconflict='C'),
- 'DDF/D1/D2' : Item(status=' ', wc_rev=2),
- 'DDF/D1/D2/gamma' : Item(status='MM', wc_rev=2),
- 'DF' : Item(status=' ', wc_rev=3),
- 'DF/D1' : Item(status=' ', wc_rev=2, treeconflict='C'),
- 'DF/D1/beta' : Item(status='MM', wc_rev=2),
- 'F' : Item(status=' ', wc_rev=3),
- 'F/alpha' : Item(status='MM', wc_rev=2, treeconflict='C'),
- })
-
-
-class DeepTreesTestCase:
- """Describes one tree-conflicts test case.
- See deep_trees_run_tests_scheme_for_update(), ..._switch(), ..._merge().
-
- The name field is the subdirectory name in which the test should be run.
-
- The local_action and incoming_action are the functions to run
- to construct the local changes and incoming changes, respectively.
- See deep_trees_leaf_edit, deep_trees_tree_del, etc.
-
- The expected_* and error_re_string arguments are described in functions
- run_and_verify_[update|switch|merge]
- except expected_info, which is a dict that has path keys with values
- that are dicts as passed to run_and_verify_info():
- expected_info = {
- 'F/alpha' : {
- 'Revision' : '3',
- 'Tree conflict' :
- '^local delete, incoming edit upon update'
- + ' Source left: .file.*/F/alpha@2'
- + ' Source right: .file.*/F/alpha@3$',
- },
- 'DF/D1' : {
- 'Tree conflict' :
- '^local delete, incoming edit upon update'
- + ' Source left: .dir.*/DF/D1@2'
- + ' Source right: .dir.*/DF/D1@3$',
- },
- ...
- }
-
- Note: expected_skip is only used in merge, i.e. using
- deep_trees_run_tests_scheme_for_merge.
- """
-
- def __init__(self, name, local_action, incoming_action,
- expected_output = None, expected_disk = None,
- expected_status = None, expected_skip = None,
- error_re_string = None,
- commit_block_string = ".*remains in conflict.*",
- expected_info = None):
- self.name = name
- self.local_action = local_action
- self.incoming_action = incoming_action
- self.expected_output = expected_output
- self.expected_disk = expected_disk
- self.expected_status = expected_status
- self.expected_skip = expected_skip
- self.error_re_string = error_re_string
- self.commit_block_string = commit_block_string
- self.expected_info = expected_info
-
-
-
-def deep_trees_run_tests_scheme_for_update(sbox, greater_scheme):
- """
- Runs a given list of tests for conflicts occuring at an update operation.
-
- This function wants to save time and perform a number of different
- test cases using just a single repository and performing just one commit
- for all test cases instead of one for each test case.
-
- 1) Each test case is initialized in a separate subdir. Each subdir
- again contains one set of "deep_trees", being separate container
- dirs for different depths of trees (F, D, DF, DD, DDF, DDD).
-
- 2) A commit is performed across all test cases and depths.
- (our initial state, -r2)
-
- 3) In each test case subdir (e.g. "local_tree_del_incoming_leaf_edit"),
- its *incoming* action is performed (e.g. "deep_trees_leaf_edit"), in
- each of the different depth trees (F, D, DF, ... DDD).
-
- 4) A commit is performed across all test cases and depths:
- our "incoming" state is "stored away in the repository for now",
- -r3.
-
- 5) All test case dirs and contained deep_trees are time-warped
- (updated) back to -r2, the initial state containing deep_trees.
-
- 6) In each test case subdir (e.g. "local_tree_del_incoming_leaf_edit"),
- its *local* action is performed (e.g. "deep_trees_leaf_del"), in
- each of the different depth trees (F, D, DF, ... DDD).
-
- 7) An update to -r3 is performed across all test cases and depths.
- This causes tree-conflicts between the "local" state in the working
- copy and the "incoming" state from the repository, -r3.
-
- 8) A commit is performed in each separate container, to verify
- that each tree-conflict indeed blocks a commit.
-
- The sbox parameter is just the sbox passed to a test function. No need
- to call sbox.build(), since it is called (once) within this function.
-
- The "table" greater_scheme models all of the different test cases
- that should be run using a single repository.
-
- greater_scheme is a list of DeepTreesTestCase items, which define complete
- test setups, so that they can be performed as described above.
- """
-
- j = os.path.join
-
- if not sbox.is_built():
- sbox.build()
- wc_dir = sbox.wc_dir
-
-
- # 1) create directories
-
- for test_case in greater_scheme:
- try:
- add_deep_trees(sbox, test_case.name)
- except:
- print("ERROR IN: Tests scheme for update: "
- + "while setting up deep trees in '%s'" % test_case.name)
- raise
-
-
- # 2) commit initial state
-
- main.run_svn(None, 'commit', '-m', 'initial state', wc_dir)
-
-
- # 3) apply incoming changes
-
- for test_case in greater_scheme:
- try:
- test_case.incoming_action(j(sbox.wc_dir, test_case.name))
- except:
- print("ERROR IN: Tests scheme for update: "
- + "while performing incoming action in '%s'" % test_case.name)
- raise
-
-
- # 4) commit incoming changes
-
- main.run_svn(None, 'commit', '-m', 'incoming changes', wc_dir)
-
-
- # 5) time-warp back to -r2
-
- main.run_svn(None, 'update', '-r2', wc_dir)
-
-
- # 6) apply local changes
-
- for test_case in greater_scheme:
- try:
- test_case.local_action(j(wc_dir, test_case.name))
- except:
- print("ERROR IN: Tests scheme for update: "
- + "while performing local action in '%s'" % test_case.name)
- raise
-
-
- # 7) update to -r3, conflicting with incoming changes.
- # A lot of different things are expected.
- # Do separate update operations for each test case.
-
- for test_case in greater_scheme:
- try:
- base = j(wc_dir, test_case.name)
-
- x_out = test_case.expected_output
- if x_out != None:
- x_out = x_out.copy()
- x_out.wc_dir = base
-
- x_disk = test_case.expected_disk
-
- x_status = test_case.expected_status
- if x_status != None:
- x_status.copy()
- x_status.wc_dir = base
-
- run_and_verify_update(base, x_out, x_disk, None,
- error_re_string = test_case.error_re_string)
- if x_status:
- run_and_verify_unquiet_status(base, x_status)
-
- x_info = test_case.expected_info or {}
- for path in x_info:
- run_and_verify_info([x_info[path]], j(base, path))
-
- except:
- print("ERROR IN: Tests scheme for update: "
- + "while verifying in '%s'" % test_case.name)
- raise
-
-
- # 8) Verify that commit fails.
-
- for test_case in greater_scheme:
- try:
- base = j(wc_dir, test_case.name)
-
- x_status = test_case.expected_status
- if x_status != None:
- x_status.copy()
- x_status.wc_dir = base
-
- run_and_verify_commit(base, None, x_status,
- test_case.commit_block_string,
- base)
- except:
- print("ERROR IN: Tests scheme for update: "
- + "while checking commit-blocking in '%s'" % test_case.name)
- raise
-
-
-
-def deep_trees_skipping_on_update(sbox, test_case, skip_paths,
- chdir_skip_paths):
- """
- Create tree conflicts, then update again, expecting the existing tree
- conflicts to be skipped.
- SKIP_PATHS is a list of paths, relative to the "base dir", for which
- "update" on the "base dir" should report as skipped.
- CHDIR_SKIP_PATHS is a list of (target-path, skipped-path) pairs for which
- an update of "target-path" (relative to the "base dir") should result in
- "skipped-path" (relative to "target-path") being reported as skipped.
- """
-
- """FURTHER_ACTION is a function that will make a further modification to
- each target, this being the modification that we expect to be skipped. The
- function takes the "base dir" (the WC path to the test case directory) as
- its only argument."""
- further_action = deep_trees_tree_del_repos
-
- j = os.path.join
- wc_dir = sbox.wc_dir
- base = j(wc_dir, test_case.name)
-
- # Initialize: generate conflicts. (We do not check anything here.)
- setup_case = DeepTreesTestCase(test_case.name,
- test_case.local_action,
- test_case.incoming_action,
- None,
- None,
- None)
- deep_trees_run_tests_scheme_for_update(sbox, [setup_case])
-
- # Make a further change to each target in the repository so there is a new
- # revision to update to. (This is r4.)
- further_action(sbox.repo_url + '/' + test_case.name)
-
- # Update whole working copy, expecting the nodes still in conflict to be
- # skipped.
-
- x_out = test_case.expected_output
- if x_out != None:
- x_out = x_out.copy()
- x_out.wc_dir = base
-
- x_disk = test_case.expected_disk
-
- x_status = test_case.expected_status
- if x_status != None:
- x_status = x_status.copy()
- x_status.wc_dir = base
- # Account for nodes that were updated by further_action
- x_status.tweak('', 'D', 'F', 'DD', 'DF', 'DDD', 'DDF', wc_rev=4)
-
- run_and_verify_update(base, x_out, x_disk, None,
- error_re_string = test_case.error_re_string)
-
- run_and_verify_unquiet_status(base, x_status)
-
- # Try to update each in-conflict subtree. Expect a 'Skipped' output for
- # each, and the WC status to be unchanged.
- for path in skip_paths:
- run_and_verify_update(j(base, path),
- wc.State(base, {path : Item(verb='Skipped')}),
- None, None)
-
- run_and_verify_unquiet_status(base, x_status)
-
- # Try to update each in-conflict subtree. Expect a 'Skipped' output for
- # each, and the WC status to be unchanged.
- # This time, cd to the subdir before updating it.
- was_cwd = os.getcwd()
- for path, skipped in chdir_skip_paths:
- if isinstance(skipped, list):
- expected_skip = {}
- for p in skipped:
- expected_skip[p] = Item(verb='Skipped')
- else:
- expected_skip = {skipped : Item(verb='Skipped')}
- p = j(base, path)
- run_and_verify_update(p,
- wc.State(p, expected_skip),
- None, None)
- os.chdir(was_cwd)
-
- run_and_verify_unquiet_status(base, x_status)
-
- # Verify that commit still fails.
- for path, skipped in chdir_skip_paths:
-
- run_and_verify_commit(j(base, path), None, None,
- test_case.commit_block_string,
- base)
-
- run_and_verify_unquiet_status(base, x_status)
-
-
-def deep_trees_run_tests_scheme_for_switch(sbox, greater_scheme):
- """
- Runs a given list of tests for conflicts occuring at a switch operation.
-
- This function wants to save time and perform a number of different
- test cases using just a single repository and performing just one commit
- for all test cases instead of one for each test case.
-
- 1) Each test case is initialized in a separate subdir. Each subdir
- again contains two subdirs: one "local" and one "incoming" for
- the switch operation. These contain a set of deep_trees each.
-
- 2) A commit is performed across all test cases and depths.
- (our initial state, -r2)
-
- 3) In each test case subdir's incoming subdir, the
- incoming actions are performed.
-
- 4) A commit is performed across all test cases and depths. (-r3)
-
- 5) In each test case subdir's local subdir, the local actions are
- performed. They remain uncommitted in the working copy.
-
- 6) In each test case subdir's local dir, a switch is performed to its
- corresponding incoming dir.
- This causes conflicts between the "local" state in the working
- copy and the "incoming" state from the incoming subdir (still -r3).
-
- 7) A commit is performed in each separate container, to verify
- that each tree-conflict indeed blocks a commit.
-
- The sbox parameter is just the sbox passed to a test function. No need
- to call sbox.build(), since it is called (once) within this function.
-
- The "table" greater_scheme models all of the different test cases
- that should be run using a single repository.
-
- greater_scheme is a list of DeepTreesTestCase items, which define complete
- test setups, so that they can be performed as described above.
- """
-
- j = os.path.join
-
- if not sbox.is_built():
- sbox.build()
- wc_dir = sbox.wc_dir
-
-
- # 1) Create directories.
-
- for test_case in greater_scheme:
- try:
- base = j(sbox.wc_dir, test_case.name)
- os.makedirs(base)
- make_deep_trees(j(base, "local"))
- make_deep_trees(j(base, "incoming"))
- main.run_svn(None, 'add', base)
- except:
- print("ERROR IN: Tests scheme for switch: "
- + "while setting up deep trees in '%s'" % test_case.name)
- raise
-
-
- # 2) Commit initial state (-r2).
-
- main.run_svn(None, 'commit', '-m', 'initial state', wc_dir)
-
-
- # 3) Apply incoming changes
-
- for test_case in greater_scheme:
- try:
- test_case.incoming_action(j(sbox.wc_dir, test_case.name, "incoming"))
- except:
- print("ERROR IN: Tests scheme for switch: "
- + "while performing incoming action in '%s'" % test_case.name)
- raise
-
-
- # 4) Commit all changes (-r3).
-
- main.run_svn(None, 'commit', '-m', 'incoming changes', wc_dir)
-
-
- # 5) Apply local changes in their according subdirs.
-
- for test_case in greater_scheme:
- try:
- test_case.local_action(j(sbox.wc_dir, test_case.name, "local"))
- except:
- print("ERROR IN: Tests scheme for switch: "
- + "while performing local action in '%s'" % test_case.name)
- raise
-
-
- # 6) switch the local dir to the incoming url, conflicting with incoming
- # changes. A lot of different things are expected.
- # Do separate switch operations for each test case.
-
- for test_case in greater_scheme:
- try:
- local = j(wc_dir, test_case.name, "local")
- incoming = sbox.repo_url + "/" + test_case.name + "/incoming"
-
- x_out = test_case.expected_output
- if x_out != None:
- x_out = x_out.copy()
- x_out.wc_dir = local
-
- x_disk = test_case.expected_disk
-
- x_status = test_case.expected_status
- if x_status != None:
- x_status.copy()
- x_status.wc_dir = local
-
- run_and_verify_switch(local, local, incoming, x_out, x_disk, None,
- test_case.error_re_string, None, None, None,
- None, False, '--ignore-ancestry')
- run_and_verify_unquiet_status(local, x_status)
-
- x_info = test_case.expected_info or {}
- for path in x_info:
- run_and_verify_info([x_info[path]], j(local, path))
- except:
- print("ERROR IN: Tests scheme for switch: "
- + "while verifying in '%s'" % test_case.name)
- raise
-
-
- # 7) Verify that commit fails.
-
- for test_case in greater_scheme:
- try:
- local = j(wc_dir, test_case.name, 'local')
-
- x_status = test_case.expected_status
- if x_status != None:
- x_status.copy()
- x_status.wc_dir = local
-
- run_and_verify_commit(local, None, x_status,
- test_case.commit_block_string,
- local)
- except:
- print("ERROR IN: Tests scheme for switch: "
- + "while checking commit-blocking in '%s'" % test_case.name)
- raise
-
-
-def deep_trees_run_tests_scheme_for_merge(sbox, greater_scheme,
- do_commit_local_changes,
- do_commit_conflicts=True,
- ignore_ancestry=False):
- """
- Runs a given list of tests for conflicts occuring at a merge operation.
-
- This function wants to save time and perform a number of different
- test cases using just a single repository and performing just one commit
- for all test cases instead of one for each test case.
-
- 1) Each test case is initialized in a separate subdir. Each subdir
- initially contains another subdir, called "incoming", which
- contains a set of deep_trees.
-
- 2) A commit is performed across all test cases and depths.
- (a pre-initial state)
-
- 3) In each test case subdir, the "incoming" subdir is copied to "local",
- via the `svn copy' command. Each test case's subdir now has two sub-
- dirs: "local" and "incoming", initial states for the merge operation.
-
- 4) An update is performed across all test cases and depths, so that the
- copies made in 3) are pulled into the wc.
-
- 5) In each test case's "incoming" subdir, the incoming action is
- performed.
-
- 6) A commit is performed across all test cases and depths, to commit
- the incoming changes.
- If do_commit_local_changes is True, this becomes step 7 (swap steps).
-
- 7) In each test case's "local" subdir, the local_action is performed.
- If do_commit_local_changes is True, this becomes step 6 (swap steps).
- Then, in effect, the local changes are committed as well.
-
- 8) In each test case subdir, the "incoming" subdir is merged into the
- "local" subdir. If ignore_ancestry is True, then the merge is done
- with the --ignore-ancestry option, so mergeinfo is neither considered
- nor recorded. This causes conflicts between the "local" state in the
- working copy and the "incoming" state from the incoming subdir.
-
- 9) If do_commit_conflicts is True, then a commit is performed in each
- separate container, to verify that each tree-conflict indeed blocks
- a commit.
-
- The sbox parameter is just the sbox passed to a test function. No need
- to call sbox.build(), since it is called (once) within this function.
-
- The "table" greater_scheme models all of the different test cases
- that should be run using a single repository.
-
- greater_scheme is a list of DeepTreesTestCase items, which define complete
- test setups, so that they can be performed as described above.
- """
-
- j = os.path.join
-
- if not sbox.is_built():
- sbox.build()
- wc_dir = sbox.wc_dir
-
- # 1) Create directories.
- for test_case in greater_scheme:
- try:
- base = j(sbox.wc_dir, test_case.name)
- os.makedirs(base)
- make_deep_trees(j(base, "incoming"))
- main.run_svn(None, 'add', base)
- except:
- print("ERROR IN: Tests scheme for merge: "
- + "while setting up deep trees in '%s'" % test_case.name)
- raise
-
-
- # 2) Commit pre-initial state (-r2).
-
- main.run_svn(None, 'commit', '-m', 'pre-initial state', wc_dir)
-
-
- # 3) Copy "incoming" to "local".
-
- for test_case in greater_scheme:
- try:
- base_url = sbox.repo_url + "/" + test_case.name
- incoming_url = base_url + "/incoming"
- local_url = base_url + "/local"
- main.run_svn(None, 'cp', incoming_url, local_url, '-m',
- 'copy incoming to local')
- except:
- print("ERROR IN: Tests scheme for merge: "
- + "while copying deep trees in '%s'" % test_case.name)
- raise
-
- # 4) Update to load all of the "/local" subdirs into the working copies.
-
- try:
- main.run_svn(None, 'up', sbox.wc_dir)
- except:
- print("ERROR IN: Tests scheme for merge: "
- + "while updating local subdirs")
- raise
-
-
- # 5) Perform incoming actions
-
- for test_case in greater_scheme:
- try:
- test_case.incoming_action(j(sbox.wc_dir, test_case.name, "incoming"))
- except:
- print("ERROR IN: Tests scheme for merge: "
- + "while performing incoming action in '%s'" % test_case.name)
- raise
-
-
- # 6) or 7) Commit all incoming actions
-
- if not do_commit_local_changes:
- try:
- main.run_svn(None, 'ci', '-m', 'Committing incoming actions',
- sbox.wc_dir)
- except:
- print("ERROR IN: Tests scheme for merge: "
- + "while committing incoming actions")
- raise
-
-
- # 7) or 6) Perform all local actions.
-
- for test_case in greater_scheme:
- try:
- test_case.local_action(j(sbox.wc_dir, test_case.name, "local"))
- except:
- print("ERROR IN: Tests scheme for merge: "
- + "while performing local action in '%s'" % test_case.name)
- raise
-
-
- # 6) or 7) Commit all incoming actions
-
- if do_commit_local_changes:
- try:
- main.run_svn(None, 'ci', '-m', 'Committing incoming and local actions',
- sbox.wc_dir)
- except:
- print("ERROR IN: Tests scheme for merge: "
- + "while committing incoming and local actions")
- raise
-
-
- # 8) Merge all "incoming" subdirs to their respective "local" subdirs.
- # This creates conflicts between the local changes in the "local" wc
- # subdirs and the incoming states committed in the "incoming" subdirs.
-
- for test_case in greater_scheme:
- try:
- local = j(sbox.wc_dir, test_case.name, "local")
- incoming = sbox.repo_url + "/" + test_case.name + "/incoming"
-
- x_out = test_case.expected_output
- if x_out != None:
- x_out = x_out.copy()
- x_out.wc_dir = local
-
- x_disk = test_case.expected_disk
-
- x_status = test_case.expected_status
- if x_status != None:
- x_status.copy()
- x_status.wc_dir = local
-
- x_skip = test_case.expected_skip
- if x_skip != None:
- x_skip.copy()
- x_skip.wc_dir = local
-
- varargs = (local,)
- if ignore_ancestry:
- varargs = varargs + ('--ignore-ancestry',)
-
- run_and_verify_merge(local, None, None, incoming, None,
- x_out, None, None, x_disk, None, x_skip,
- test_case.error_re_string,
- None, None, None, None,
- False, False, *varargs)
- run_and_verify_unquiet_status(local, x_status)
- except:
- print("ERROR IN: Tests scheme for merge: "
- + "while verifying in '%s'" % test_case.name)
- raise
-
-
- # 9) Verify that commit fails.
-
- if do_commit_conflicts:
- for test_case in greater_scheme:
- try:
- local = j(wc_dir, test_case.name, 'local')
-
- x_status = test_case.expected_status
- if x_status != None:
- x_status.copy()
- x_status.wc_dir = local
-
- run_and_verify_commit(local, None, x_status,
- test_case.commit_block_string,
- local)
- except:
- print("ERROR IN: Tests scheme for merge: "
- + "while checking commit-blocking in '%s'" % test_case.name)
- raise
-
-
diff --git a/subversion/tests/cmdline/svntest/deeptrees.py b/subversion/tests/cmdline/svntest/deeptrees.py
new file mode 100644
index 0000000..52517a2
--- /dev/null
+++ b/subversion/tests/cmdline/svntest/deeptrees.py
@@ -0,0 +1,1020 @@
+#
+# deeptrees.py: routines that create specific test scenarios
+#
+# Subversion is a tool for revision control.
+# See http://subversion.tigris.org for more information.
+#
+# ====================================================================
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+######################################################################
+
+import os, shutil, re, sys, errno
+import difflib, pprint, logging
+import xml.parsers.expat
+from xml.dom.minidom import parseString
+if sys.version_info[0] >= 3:
+ # Python >=3.0
+ from io import StringIO
+else:
+ # Python <3.0
+ from cStringIO import StringIO
+
+import svntest
+from svntest import main, verify, tree, wc, sandbox
+from svntest import Failure
+from actions import *
+
+logger = logging.getLogger()
+
+def make_deep_trees(base):
+ """Helper function for deep trees conflicts. Create a set of trees,
+ each in its own "container" dir. Any conflicts can be tested separately
+ in each container.
+ """
+ j = os.path.join
+ # Create the container dirs.
+ F = j(base, 'F')
+ D = j(base, 'D')
+ DF = j(base, 'DF')
+ DD = j(base, 'DD')
+ DDF = j(base, 'DDF')
+ DDD = j(base, 'DDD')
+ os.makedirs(F)
+ os.makedirs(j(D, 'D1'))
+ os.makedirs(j(DF, 'D1'))
+ os.makedirs(j(DD, 'D1', 'D2'))
+ os.makedirs(j(DDF, 'D1', 'D2'))
+ os.makedirs(j(DDD, 'D1', 'D2', 'D3'))
+
+ # Create their files.
+ alpha = j(F, 'alpha')
+ beta = j(DF, 'D1', 'beta')
+ gamma = j(DDF, 'D1', 'D2', 'gamma')
+ main.file_append(alpha, "This is the file 'alpha'.\n")
+ main.file_append(beta, "This is the file 'beta'.\n")
+ main.file_append(gamma, "This is the file 'gamma'.\n")
+
+
+def add_deep_trees(sbox, base_dir_name):
+ """Prepare a "deep_trees" within a given directory.
+
+ The directory <sbox.wc_dir>/<base_dir_name> is created and a deep_tree
+ is created within. The items are only added, a commit has to be
+ called separately, if needed.
+
+ <base_dir_name> will thus be a container for the set of containers
+ mentioned in make_deep_trees().
+ """
+ j = os.path.join
+ base = j(sbox.wc_dir, base_dir_name)
+ make_deep_trees(base)
+ main.run_svn(None, 'add', base)
+
+
+Item = wc.StateItem
+
+# initial deep trees state
+deep_trees_virginal_state = wc.State('', {
+ 'F' : Item(),
+ 'F/alpha' : Item("This is the file 'alpha'.\n"),
+ 'D' : Item(),
+ 'D/D1' : Item(),
+ 'DF' : Item(),
+ 'DF/D1' : Item(),
+ 'DF/D1/beta' : Item("This is the file 'beta'.\n"),
+ 'DD' : Item(),
+ 'DD/D1' : Item(),
+ 'DD/D1/D2' : Item(),
+ 'DDF' : Item(),
+ 'DDF/D1' : Item(),
+ 'DDF/D1/D2' : Item(),
+ 'DDF/D1/D2/gamma' : Item("This is the file 'gamma'.\n"),
+ 'DDD' : Item(),
+ 'DDD/D1' : Item(),
+ 'DDD/D1/D2' : Item(),
+ 'DDD/D1/D2/D3' : Item(),
+ })
+
+
+# Many actions on deep trees and their resulting states...
+
+def deep_trees_leaf_edit(base):
+ """Helper function for deep trees test cases. Append text to files,
+ create new files in empty directories, and change leaf node properties."""
+ j = os.path.join
+ F = j(base, 'F', 'alpha')
+ DF = j(base, 'DF', 'D1', 'beta')
+ DDF = j(base, 'DDF', 'D1', 'D2', 'gamma')
+ main.file_append(F, "More text for file alpha.\n")
+ main.file_append(DF, "More text for file beta.\n")
+ main.file_append(DDF, "More text for file gamma.\n")
+ run_and_verify_svn(None, verify.AnyOutput, [],
+ 'propset', 'prop1', '1', F, DF, DDF)
+
+ D = j(base, 'D', 'D1')
+ DD = j(base, 'DD', 'D1', 'D2')
+ DDD = j(base, 'DDD', 'D1', 'D2', 'D3')
+ run_and_verify_svn(None, verify.AnyOutput, [],
+ 'propset', 'prop1', '1', D, DD, DDD)
+ D = j(base, 'D', 'D1', 'delta')
+ DD = j(base, 'DD', 'D1', 'D2', 'epsilon')
+ DDD = j(base, 'DDD', 'D1', 'D2', 'D3', 'zeta')
+ main.file_append(D, "This is the file 'delta'.\n")
+ main.file_append(DD, "This is the file 'epsilon'.\n")
+ main.file_append(DDD, "This is the file 'zeta'.\n")
+ run_and_verify_svn(None, verify.AnyOutput, [],
+ 'add', D, DD, DDD)
+
+# deep trees state after a call to deep_trees_leaf_edit
+deep_trees_after_leaf_edit = wc.State('', {
+ 'F' : Item(),
+ 'F/alpha' : Item("This is the file 'alpha'.\nMore text for file alpha.\n"),
+ 'D' : Item(),
+ 'D/D1' : Item(),
+ 'D/D1/delta' : Item("This is the file 'delta'.\n"),
+ 'DF' : Item(),
+ 'DF/D1' : Item(),
+ 'DF/D1/beta' : Item("This is the file 'beta'.\nMore text for file beta.\n"),
+ 'DD' : Item(),
+ 'DD/D1' : Item(),
+ 'DD/D1/D2' : Item(),
+ 'DD/D1/D2/epsilon' : Item("This is the file 'epsilon'.\n"),
+ 'DDF' : Item(),
+ 'DDF/D1' : Item(),
+ 'DDF/D1/D2' : Item(),
+ 'DDF/D1/D2/gamma' : Item("This is the file 'gamma'.\nMore text for file gamma.\n"),
+ 'DDD' : Item(),
+ 'DDD/D1' : Item(),
+ 'DDD/D1/D2' : Item(),
+ 'DDD/D1/D2/D3' : Item(),
+ 'DDD/D1/D2/D3/zeta' : Item("This is the file 'zeta'.\n"),
+ })
+
+
+def deep_trees_leaf_del(base):
+ """Helper function for deep trees test cases. Delete files and empty
+ dirs."""
+ j = os.path.join
+ F = j(base, 'F', 'alpha')
+ D = j(base, 'D', 'D1')
+ DF = j(base, 'DF', 'D1', 'beta')
+ DD = j(base, 'DD', 'D1', 'D2')
+ DDF = j(base, 'DDF', 'D1', 'D2', 'gamma')
+ DDD = j(base, 'DDD', 'D1', 'D2', 'D3')
+ main.run_svn(None, 'rm', F, D, DF, DD, DDF, DDD)
+
+# deep trees state after a call to deep_trees_leaf_del
+deep_trees_after_leaf_del = wc.State('', {
+ 'F' : Item(),
+ 'D' : Item(),
+ 'DF' : Item(),
+ 'DF/D1' : Item(),
+ 'DD' : Item(),
+ 'DD/D1' : Item(),
+ 'DDF' : Item(),
+ 'DDF/D1' : Item(),
+ 'DDF/D1/D2' : Item(),
+ 'DDD' : Item(),
+ 'DDD/D1' : Item(),
+ 'DDD/D1/D2' : Item(),
+ })
+
+# deep trees state after a call to deep_trees_leaf_del with no commit
+def deep_trees_after_leaf_del_no_ci(wc_dir):
+ if svntest.main.wc_is_singledb(wc_dir):
+ return deep_trees_after_leaf_del
+ else:
+ return deep_trees_empty_dirs
+
+
+def deep_trees_tree_del(base):
+ """Helper function for deep trees test cases. Delete top-level dirs."""
+ j = os.path.join
+ F = j(base, 'F', 'alpha')
+ D = j(base, 'D', 'D1')
+ DF = j(base, 'DF', 'D1')
+ DD = j(base, 'DD', 'D1')
+ DDF = j(base, 'DDF', 'D1')
+ DDD = j(base, 'DDD', 'D1')
+ main.run_svn(None, 'rm', F, D, DF, DD, DDF, DDD)
+
+def deep_trees_rmtree(base):
+ """Helper function for deep trees test cases. Delete top-level dirs
+ with rmtree instead of svn del."""
+ j = os.path.join
+ F = j(base, 'F', 'alpha')
+ D = j(base, 'D', 'D1')
+ DF = j(base, 'DF', 'D1')
+ DD = j(base, 'DD', 'D1')
+ DDF = j(base, 'DDF', 'D1')
+ DDD = j(base, 'DDD', 'D1')
+ os.unlink(F)
+ main.safe_rmtree(D)
+ main.safe_rmtree(DF)
+ main.safe_rmtree(DD)
+ main.safe_rmtree(DDF)
+ main.safe_rmtree(DDD)
+
+# deep trees state after a call to deep_trees_tree_del
+deep_trees_after_tree_del = wc.State('', {
+ 'F' : Item(),
+ 'D' : Item(),
+ 'DF' : Item(),
+ 'DD' : Item(),
+ 'DDF' : Item(),
+ 'DDD' : Item(),
+ })
+
+# deep trees state without any files
+deep_trees_empty_dirs = wc.State('', {
+ 'F' : Item(),
+ 'D' : Item(),
+ 'D/D1' : Item(),
+ 'DF' : Item(),
+ 'DF/D1' : Item(),
+ 'DD' : Item(),
+ 'DD/D1' : Item(),
+ 'DD/D1/D2' : Item(),
+ 'DDF' : Item(),
+ 'DDF/D1' : Item(),
+ 'DDF/D1/D2' : Item(),
+ 'DDD' : Item(),
+ 'DDD/D1' : Item(),
+ 'DDD/D1/D2' : Item(),
+ 'DDD/D1/D2/D3' : Item(),
+ })
+
+# deep trees state after a call to deep_trees_tree_del with no commit
+def deep_trees_after_tree_del_no_ci(wc_dir):
+ if svntest.main.wc_is_singledb(wc_dir):
+ return deep_trees_after_tree_del
+ else:
+ return deep_trees_empty_dirs
+
+def deep_trees_tree_del_repos(base):
+ """Helper function for deep trees test cases. Delete top-level dirs,
+ directly in the repository."""
+ j = '/'.join
+ F = j([base, 'F', 'alpha'])
+ D = j([base, 'D', 'D1'])
+ DF = j([base, 'DF', 'D1'])
+ DD = j([base, 'DD', 'D1'])
+ DDF = j([base, 'DDF', 'D1'])
+ DDD = j([base, 'DDD', 'D1'])
+ main.run_svn(None, 'mkdir', '-m', '', F, D, DF, DD, DDF, DDD)
+
+# Expected merge/update/switch output.
+
+deep_trees_conflict_output = wc.State('', {
+ 'F/alpha' : Item(status=' ', treeconflict='C'),
+ 'D/D1' : Item(status=' ', treeconflict='C'),
+ 'DF/D1' : Item(status=' ', treeconflict='C'),
+ 'DD/D1' : Item(status=' ', treeconflict='C'),
+ 'DDF/D1' : Item(status=' ', treeconflict='C'),
+ 'DDD/D1' : Item(status=' ', treeconflict='C'),
+ })
+
+deep_trees_conflict_output_skipped = wc.State('', {
+ 'D/D1' : Item(verb='Skipped'),
+ 'F/alpha' : Item(verb='Skipped'),
+ 'DD/D1' : Item(verb='Skipped'),
+ 'DF/D1' : Item(verb='Skipped'),
+ 'DDD/D1' : Item(verb='Skipped'),
+ 'DDF/D1' : Item(verb='Skipped'),
+ })
+
+# Expected status output after merge/update/switch.
+
+deep_trees_status_local_tree_del = wc.State('', {
+ '' : Item(status=' ', wc_rev=3),
+ 'D' : Item(status=' ', wc_rev=3),
+ 'D/D1' : Item(status='D ', wc_rev=2, treeconflict='C'),
+ 'DD' : Item(status=' ', wc_rev=3),
+ 'DD/D1' : Item(status='D ', wc_rev=2, treeconflict='C'),
+ 'DD/D1/D2' : Item(status='D ', wc_rev=2),
+ 'DDD' : Item(status=' ', wc_rev=3),
+ 'DDD/D1' : Item(status='D ', wc_rev=2, treeconflict='C'),
+ 'DDD/D1/D2' : Item(status='D ', wc_rev=2),
+ 'DDD/D1/D2/D3' : Item(status='D ', wc_rev=2),
+ 'DDF' : Item(status=' ', wc_rev=3),
+ 'DDF/D1' : Item(status='D ', wc_rev=2, treeconflict='C'),
+ 'DDF/D1/D2' : Item(status='D ', wc_rev=2),
+ 'DDF/D1/D2/gamma' : Item(status='D ', wc_rev=2),
+ 'DF' : Item(status=' ', wc_rev=3),
+ 'DF/D1' : Item(status='D ', wc_rev=2, treeconflict='C'),
+ 'DF/D1/beta' : Item(status='D ', wc_rev=2),
+ 'F' : Item(status=' ', wc_rev=3),
+ 'F/alpha' : Item(status='D ', wc_rev=2, treeconflict='C'),
+ })
+
+deep_trees_status_local_leaf_edit = wc.State('', {
+ '' : Item(status=' ', wc_rev=3),
+ 'D' : Item(status=' ', wc_rev=3),
+ 'D/D1' : Item(status=' M', wc_rev=2, treeconflict='C'),
+ 'D/D1/delta' : Item(status='A ', wc_rev=0),
+ 'DD' : Item(status=' ', wc_rev=3),
+ 'DD/D1' : Item(status=' ', wc_rev=2, treeconflict='C'),
+ 'DD/D1/D2' : Item(status=' M', wc_rev=2),
+ 'DD/D1/D2/epsilon' : Item(status='A ', wc_rev=0),
+ 'DDD' : Item(status=' ', wc_rev=3),
+ 'DDD/D1' : Item(status=' ', wc_rev=2, treeconflict='C'),
+ 'DDD/D1/D2' : Item(status=' ', wc_rev=2),
+ 'DDD/D1/D2/D3' : Item(status=' M', wc_rev=2),
+ 'DDD/D1/D2/D3/zeta' : Item(status='A ', wc_rev=0),
+ 'DDF' : Item(status=' ', wc_rev=3),
+ 'DDF/D1' : Item(status=' ', wc_rev=2, treeconflict='C'),
+ 'DDF/D1/D2' : Item(status=' ', wc_rev=2),
+ 'DDF/D1/D2/gamma' : Item(status='MM', wc_rev=2),
+ 'DF' : Item(status=' ', wc_rev=3),
+ 'DF/D1' : Item(status=' ', wc_rev=2, treeconflict='C'),
+ 'DF/D1/beta' : Item(status='MM', wc_rev=2),
+ 'F' : Item(status=' ', wc_rev=3),
+ 'F/alpha' : Item(status='MM', wc_rev=2, treeconflict='C'),
+ })
+
+
+class DeepTreesTestCase:
+ """Describes one tree-conflicts test case.
+ See deep_trees_run_tests_scheme_for_update(), ..._switch(), ..._merge().
+
+ The name field is the subdirectory name in which the test should be run.
+
+ The local_action and incoming_action are the functions to run
+ to construct the local changes and incoming changes, respectively.
+ See deep_trees_leaf_edit, deep_trees_tree_del, etc.
+
+ The expected_* and error_re_string arguments are described in functions
+ run_and_verify_[update|switch|merge]
+ except expected_info, which is a dict that has path keys with values
+ that are dicts as passed to run_and_verify_info():
+ expected_info = {
+ 'F/alpha' : {
+ 'Revision' : '3',
+ 'Tree conflict' :
+ '^local delete, incoming edit upon update'
+ + ' Source left: .file.*/F/alpha@2'
+ + ' Source right: .file.*/F/alpha@3$',
+ },
+ 'DF/D1' : {
+ 'Tree conflict' :
+ '^local delete, incoming edit upon update'
+ + ' Source left: .dir.*/DF/D1@2'
+ + ' Source right: .dir.*/DF/D1@3$',
+ },
+ ...
+ }
+
+ Note: expected_skip is only used in merge, i.e. using
+ deep_trees_run_tests_scheme_for_merge.
+ """
+
+ def __init__(self, name, local_action, incoming_action,
+ expected_output = None, expected_disk = None,
+ expected_status = None, expected_skip = None,
+ error_re_string = None,
+ commit_block_string = ".*remains in conflict.*",
+ expected_info = None):
+ self.name = name
+ self.local_action = local_action
+ self.incoming_action = incoming_action
+ self.expected_output = expected_output
+ self.expected_disk = expected_disk
+ self.expected_status = expected_status
+ self.expected_skip = expected_skip
+ self.error_re_string = error_re_string
+ self.commit_block_string = commit_block_string
+ self.expected_info = expected_info
+
+
+
+def deep_trees_run_tests_scheme_for_update(sbox, greater_scheme):
+ """
+ Runs a given list of tests for conflicts occuring at an update operation.
+
+ This function wants to save time and perform a number of different
+ test cases using just a single repository and performing just one commit
+ for all test cases instead of one for each test case.
+
+ 1) Each test case is initialized in a separate subdir. Each subdir
+ again contains one set of "deep_trees", being separate container
+ dirs for different depths of trees (F, D, DF, DD, DDF, DDD).
+
+ 2) A commit is performed across all test cases and depths.
+ (our initial state, -r2)
+
+ 3) In each test case subdir (e.g. "local_tree_del_incoming_leaf_edit"),
+ its *incoming* action is performed (e.g. "deep_trees_leaf_edit"), in
+ each of the different depth trees (F, D, DF, ... DDD).
+
+ 4) A commit is performed across all test cases and depths:
+ our "incoming" state is "stored away in the repository for now",
+ -r3.
+
+ 5) All test case dirs and contained deep_trees are time-warped
+ (updated) back to -r2, the initial state containing deep_trees.
+
+ 6) In each test case subdir (e.g. "local_tree_del_incoming_leaf_edit"),
+ its *local* action is performed (e.g. "deep_trees_leaf_del"), in
+ each of the different depth trees (F, D, DF, ... DDD).
+
+ 7) An update to -r3 is performed across all test cases and depths.
+ This causes tree-conflicts between the "local" state in the working
+ copy and the "incoming" state from the repository, -r3.
+
+ 8) A commit is performed in each separate container, to verify
+ that each tree-conflict indeed blocks a commit.
+
+ The sbox parameter is just the sbox passed to a test function. No need
+ to call sbox.build(), since it is called (once) within this function.
+
+ The "table" greater_scheme models all of the different test cases
+ that should be run using a single repository.
+
+ greater_scheme is a list of DeepTreesTestCase items, which define complete
+ test setups, so that they can be performed as described above.
+ """
+
+ j = os.path.join
+
+ if not sbox.is_built():
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+
+ # 1) create directories
+
+ for test_case in greater_scheme:
+ try:
+ add_deep_trees(sbox, test_case.name)
+ except:
+ logger.warn("ERROR IN: Tests scheme for update: "
+ + "while setting up deep trees in '%s'", test_case.name)
+ raise
+
+
+ # 2) commit initial state
+
+ main.run_svn(None, 'commit', '-m', 'initial state', wc_dir)
+
+
+ # 3) apply incoming changes
+
+ for test_case in greater_scheme:
+ try:
+ test_case.incoming_action(j(sbox.wc_dir, test_case.name))
+ except:
+ logger.warn("ERROR IN: Tests scheme for update: "
+ + "while performing incoming action in '%s'", test_case.name)
+ raise
+
+
+ # 4) commit incoming changes
+
+ main.run_svn(None, 'commit', '-m', 'incoming changes', wc_dir)
+
+
+ # 5) time-warp back to -r2
+
+ main.run_svn(None, 'update', '-r2', wc_dir)
+
+
+ # 6) apply local changes
+
+ for test_case in greater_scheme:
+ try:
+ test_case.local_action(j(wc_dir, test_case.name))
+ except:
+ logger.warn("ERROR IN: Tests scheme for update: "
+ + "while performing local action in '%s'", test_case.name)
+ raise
+
+
+ # 7) update to -r3, conflicting with incoming changes.
+ # A lot of different things are expected.
+ # Do separate update operations for each test case.
+
+ for test_case in greater_scheme:
+ try:
+ base = j(wc_dir, test_case.name)
+
+ x_out = test_case.expected_output
+ if x_out != None:
+ x_out = x_out.copy()
+ x_out.wc_dir = base
+
+ x_disk = test_case.expected_disk
+
+ x_status = test_case.expected_status
+ if x_status != None:
+ x_status.copy()
+ x_status.wc_dir = base
+
+ run_and_verify_update(base, x_out, x_disk, None,
+ error_re_string = test_case.error_re_string)
+ if x_status:
+ run_and_verify_unquiet_status(base, x_status)
+
+ x_info = test_case.expected_info or {}
+ for path in x_info:
+ run_and_verify_info([x_info[path]], j(base, path))
+
+ except:
+ logger.warn("ERROR IN: Tests scheme for update: "
+ + "while verifying in '%s'", test_case.name)
+ raise
+
+
+ # 8) Verify that commit fails.
+
+ for test_case in greater_scheme:
+ try:
+ base = j(wc_dir, test_case.name)
+
+ x_status = test_case.expected_status
+ if x_status != None:
+ x_status.copy()
+ x_status.wc_dir = base
+
+ run_and_verify_commit(base, None, x_status,
+ test_case.commit_block_string,
+ base)
+ except:
+ logger.warn("ERROR IN: Tests scheme for update: "
+ + "while checking commit-blocking in '%s'", test_case.name)
+ raise
+
+
+
+def deep_trees_skipping_on_update(sbox, test_case, skip_paths,
+ chdir_skip_paths):
+ """
+ Create tree conflicts, then update again, expecting the existing tree
+ conflicts to be skipped.
+ SKIP_PATHS is a list of paths, relative to the "base dir", for which
+ "update" on the "base dir" should report as skipped.
+ CHDIR_SKIP_PATHS is a list of (target-path, skipped-path) pairs for which
+ an update of "target-path" (relative to the "base dir") should result in
+ "skipped-path" (relative to "target-path") being reported as skipped.
+ """
+
+ """FURTHER_ACTION is a function that will make a further modification to
+ each target, this being the modification that we expect to be skipped. The
+ function takes the "base dir" (the WC path to the test case directory) as
+ its only argument."""
+ further_action = deep_trees_tree_del_repos
+
+ j = os.path.join
+ wc_dir = sbox.wc_dir
+ base = j(wc_dir, test_case.name)
+
+ # Initialize: generate conflicts. (We do not check anything here.)
+ setup_case = DeepTreesTestCase(test_case.name,
+ test_case.local_action,
+ test_case.incoming_action,
+ None,
+ None,
+ None)
+ deep_trees_run_tests_scheme_for_update(sbox, [setup_case])
+
+ # Make a further change to each target in the repository so there is a new
+ # revision to update to. (This is r4.)
+ further_action(sbox.repo_url + '/' + test_case.name)
+
+ # Update whole working copy, expecting the nodes still in conflict to be
+ # skipped.
+
+ x_out = test_case.expected_output
+ if x_out != None:
+ x_out = x_out.copy()
+ x_out.wc_dir = base
+
+ x_disk = test_case.expected_disk
+
+ x_status = test_case.expected_status
+ if x_status != None:
+ x_status = x_status.copy()
+ x_status.wc_dir = base
+ # Account for nodes that were updated by further_action
+ x_status.tweak('', 'D', 'F', 'DD', 'DF', 'DDD', 'DDF', wc_rev=4)
+
+ run_and_verify_update(base, x_out, x_disk, None,
+ error_re_string = test_case.error_re_string)
+
+ run_and_verify_unquiet_status(base, x_status)
+
+ # Try to update each in-conflict subtree. Expect a 'Skipped' output for
+ # each, and the WC status to be unchanged.
+ for path in skip_paths:
+ run_and_verify_update(j(base, path),
+ wc.State(base, {path : Item(verb='Skipped')}),
+ None, None)
+
+ run_and_verify_unquiet_status(base, x_status)
+
+ # Try to update each in-conflict subtree. Expect a 'Skipped' output for
+ # each, and the WC status to be unchanged.
+ # This time, cd to the subdir before updating it.
+ was_cwd = os.getcwd()
+ for path, skipped in chdir_skip_paths:
+ if isinstance(skipped, list):
+ expected_skip = {}
+ for p in skipped:
+ expected_skip[p] = Item(verb='Skipped')
+ else:
+ expected_skip = {skipped : Item(verb='Skipped')}
+ p = j(base, path)
+ run_and_verify_update(p,
+ wc.State(p, expected_skip),
+ None, None)
+ os.chdir(was_cwd)
+
+ run_and_verify_unquiet_status(base, x_status)
+
+ # Verify that commit still fails.
+ for path, skipped in chdir_skip_paths:
+
+ run_and_verify_commit(j(base, path), None, None,
+ test_case.commit_block_string,
+ base)
+
+ run_and_verify_unquiet_status(base, x_status)
+
+
+def deep_trees_run_tests_scheme_for_switch(sbox, greater_scheme):
+ """
+ Runs a given list of tests for conflicts occuring at a switch operation.
+
+ This function wants to save time and perform a number of different
+ test cases using just a single repository and performing just one commit
+ for all test cases instead of one for each test case.
+
+ 1) Each test case is initialized in a separate subdir. Each subdir
+ again contains two subdirs: one "local" and one "incoming" for
+ the switch operation. These contain a set of deep_trees each.
+
+ 2) A commit is performed across all test cases and depths.
+ (our initial state, -r2)
+
+ 3) In each test case subdir's incoming subdir, the
+ incoming actions are performed.
+
+ 4) A commit is performed across all test cases and depths. (-r3)
+
+ 5) In each test case subdir's local subdir, the local actions are
+ performed. They remain uncommitted in the working copy.
+
+ 6) In each test case subdir's local dir, a switch is performed to its
+ corresponding incoming dir.
+ This causes conflicts between the "local" state in the working
+ copy and the "incoming" state from the incoming subdir (still -r3).
+
+ 7) A commit is performed in each separate container, to verify
+ that each tree-conflict indeed blocks a commit.
+
+ The sbox parameter is just the sbox passed to a test function. No need
+ to call sbox.build(), since it is called (once) within this function.
+
+ The "table" greater_scheme models all of the different test cases
+ that should be run using a single repository.
+
+ greater_scheme is a list of DeepTreesTestCase items, which define complete
+ test setups, so that they can be performed as described above.
+ """
+
+ j = os.path.join
+
+ if not sbox.is_built():
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+
+ # 1) Create directories.
+
+ for test_case in greater_scheme:
+ try:
+ base = j(sbox.wc_dir, test_case.name)
+ os.makedirs(base)
+ make_deep_trees(j(base, "local"))
+ make_deep_trees(j(base, "incoming"))
+ main.run_svn(None, 'add', base)
+ except:
+ logger.warn("ERROR IN: Tests scheme for switch: "
+ + "while setting up deep trees in '%s'", test_case.name)
+ raise
+
+
+ # 2) Commit initial state (-r2).
+
+ main.run_svn(None, 'commit', '-m', 'initial state', wc_dir)
+
+
+ # 3) Apply incoming changes
+
+ for test_case in greater_scheme:
+ try:
+ test_case.incoming_action(j(sbox.wc_dir, test_case.name, "incoming"))
+ except:
+ logger.warn("ERROR IN: Tests scheme for switch: "
+ + "while performing incoming action in '%s'", test_case.name)
+ raise
+
+
+ # 4) Commit all changes (-r3).
+
+ main.run_svn(None, 'commit', '-m', 'incoming changes', wc_dir)
+
+
+ # 5) Apply local changes in their according subdirs.
+
+ for test_case in greater_scheme:
+ try:
+ test_case.local_action(j(sbox.wc_dir, test_case.name, "local"))
+ except:
+ logger.warn("ERROR IN: Tests scheme for switch: "
+ + "while performing local action in '%s'", test_case.name)
+ raise
+
+
+ # 6) switch the local dir to the incoming url, conflicting with incoming
+ # changes. A lot of different things are expected.
+ # Do separate switch operations for each test case.
+
+ for test_case in greater_scheme:
+ try:
+ local = j(wc_dir, test_case.name, "local")
+ incoming = sbox.repo_url + "/" + test_case.name + "/incoming"
+
+ x_out = test_case.expected_output
+ if x_out != None:
+ x_out = x_out.copy()
+ x_out.wc_dir = local
+
+ x_disk = test_case.expected_disk
+
+ x_status = test_case.expected_status
+ if x_status != None:
+ x_status.copy()
+ x_status.wc_dir = local
+
+ run_and_verify_switch(local, local, incoming, x_out, x_disk, None,
+ test_case.error_re_string, None, None, None,
+ None, False, '--ignore-ancestry')
+ run_and_verify_unquiet_status(local, x_status)
+
+ x_info = test_case.expected_info or {}
+ for path in x_info:
+ run_and_verify_info([x_info[path]], j(local, path))
+ except:
+ logger.warn("ERROR IN: Tests scheme for switch: "
+ + "while verifying in '%s'", test_case.name)
+ raise
+
+
+ # 7) Verify that commit fails.
+
+ for test_case in greater_scheme:
+ try:
+ local = j(wc_dir, test_case.name, 'local')
+
+ x_status = test_case.expected_status
+ if x_status != None:
+ x_status.copy()
+ x_status.wc_dir = local
+
+ run_and_verify_commit(local, None, x_status,
+ test_case.commit_block_string,
+ local)
+ except:
+ logger.warn("ERROR IN: Tests scheme for switch: "
+ + "while checking commit-blocking in '%s'", test_case.name)
+ raise
+
+
+def deep_trees_run_tests_scheme_for_merge(sbox, greater_scheme,
+ do_commit_local_changes,
+ do_commit_conflicts=True,
+ ignore_ancestry=False):
+ """
+ Runs a given list of tests for conflicts occuring at a merge operation.
+
+ This function wants to save time and perform a number of different
+ test cases using just a single repository and performing just one commit
+ for all test cases instead of one for each test case.
+
+ 1) Each test case is initialized in a separate subdir. Each subdir
+ initially contains another subdir, called "incoming", which
+ contains a set of deep_trees.
+
+ 2) A commit is performed across all test cases and depths.
+ (a pre-initial state)
+
+ 3) In each test case subdir, the "incoming" subdir is copied to "local",
+ via the `svn copy' command. Each test case's subdir now has two sub-
+ dirs: "local" and "incoming", initial states for the merge operation.
+
+ 4) An update is performed across all test cases and depths, so that the
+ copies made in 3) are pulled into the wc.
+
+ 5) In each test case's "incoming" subdir, the incoming action is
+ performed.
+
+ 6) A commit is performed across all test cases and depths, to commit
+ the incoming changes.
+ If do_commit_local_changes is True, this becomes step 7 (swap steps).
+
+ 7) In each test case's "local" subdir, the local_action is performed.
+ If do_commit_local_changes is True, this becomes step 6 (swap steps).
+ Then, in effect, the local changes are committed as well.
+
+ 8) In each test case subdir, the "incoming" subdir is merged into the
+ "local" subdir. If ignore_ancestry is True, then the merge is done
+ with the --ignore-ancestry option, so mergeinfo is neither considered
+ nor recorded. This causes conflicts between the "local" state in the
+ working copy and the "incoming" state from the incoming subdir.
+
+ 9) If do_commit_conflicts is True, then a commit is performed in each
+ separate container, to verify that each tree-conflict indeed blocks
+ a commit.
+
+ The sbox parameter is just the sbox passed to a test function. No need
+ to call sbox.build(), since it is called (once) within this function.
+
+ The "table" greater_scheme models all of the different test cases
+ that should be run using a single repository.
+
+ greater_scheme is a list of DeepTreesTestCase items, which define complete
+ test setups, so that they can be performed as described above.
+ """
+
+ j = os.path.join
+
+ if not sbox.is_built():
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # 1) Create directories.
+ for test_case in greater_scheme:
+ try:
+ base = j(sbox.wc_dir, test_case.name)
+ os.makedirs(base)
+ make_deep_trees(j(base, "incoming"))
+ main.run_svn(None, 'add', base)
+ except:
+ logger.warn("ERROR IN: Tests scheme for merge: "
+ + "while setting up deep trees in '%s'", test_case.name)
+ raise
+
+
+ # 2) Commit pre-initial state (-r2).
+
+ main.run_svn(None, 'commit', '-m', 'pre-initial state', wc_dir)
+
+
+ # 3) Copy "incoming" to "local".
+
+ for test_case in greater_scheme:
+ try:
+ base_url = sbox.repo_url + "/" + test_case.name
+ incoming_url = base_url + "/incoming"
+ local_url = base_url + "/local"
+ main.run_svn(None, 'cp', incoming_url, local_url, '-m',
+ 'copy incoming to local')
+ except:
+ logger.warn("ERROR IN: Tests scheme for merge: "
+ + "while copying deep trees in '%s'", test_case.name)
+ raise
+
+ # 4) Update to load all of the "/local" subdirs into the working copies.
+
+ try:
+ main.run_svn(None, 'up', sbox.wc_dir)
+ except:
+ logger.warn("ERROR IN: Tests scheme for merge: "
+ + "while updating local subdirs")
+ raise
+
+
+ # 5) Perform incoming actions
+
+ for test_case in greater_scheme:
+ try:
+ test_case.incoming_action(j(sbox.wc_dir, test_case.name, "incoming"))
+ except:
+ logger.warn("ERROR IN: Tests scheme for merge: "
+ + "while performing incoming action in '%s'", test_case.name)
+ raise
+
+
+ # 6) or 7) Commit all incoming actions
+
+ if not do_commit_local_changes:
+ try:
+ main.run_svn(None, 'ci', '-m', 'Committing incoming actions',
+ sbox.wc_dir)
+ except:
+ logger.warn("ERROR IN: Tests scheme for merge: "
+ + "while committing incoming actions")
+ raise
+
+
+ # 7) or 6) Perform all local actions.
+
+ for test_case in greater_scheme:
+ try:
+ test_case.local_action(j(sbox.wc_dir, test_case.name, "local"))
+ except:
+ logger.warn("ERROR IN: Tests scheme for merge: "
+ + "while performing local action in '%s'", test_case.name)
+ raise
+
+
+ # 6) or 7) Commit all incoming actions
+
+ if do_commit_local_changes:
+ try:
+ main.run_svn(None, 'ci', '-m', 'Committing incoming and local actions',
+ sbox.wc_dir)
+ except:
+ logger.warn("ERROR IN: Tests scheme for merge: "
+ + "while committing incoming and local actions")
+ raise
+
+
+ # 8) Merge all "incoming" subdirs to their respective "local" subdirs.
+ # This creates conflicts between the local changes in the "local" wc
+ # subdirs and the incoming states committed in the "incoming" subdirs.
+
+ for test_case in greater_scheme:
+ try:
+ local = j(sbox.wc_dir, test_case.name, "local")
+ incoming = sbox.repo_url + "/" + test_case.name + "/incoming"
+
+ x_out = test_case.expected_output
+ if x_out != None:
+ x_out = x_out.copy()
+ x_out.wc_dir = local
+
+ x_disk = test_case.expected_disk
+
+ x_status = test_case.expected_status
+ if x_status != None:
+ x_status.copy()
+ x_status.wc_dir = local
+
+ x_skip = test_case.expected_skip
+ if x_skip != None:
+ x_skip.copy()
+ x_skip.wc_dir = local
+
+ varargs = (local,'--allow-mixed-revisions',)
+ if ignore_ancestry:
+ varargs = varargs + ('--ignore-ancestry',)
+
+ run_and_verify_merge(local, '0', 'HEAD', incoming, None,
+ x_out, None, None, x_disk, None, x_skip,
+ test_case.error_re_string,
+ None, None, None, None,
+ False, False, *varargs)
+ run_and_verify_unquiet_status(local, x_status)
+ except:
+ logger.warn("ERROR IN: Tests scheme for merge: "
+ + "while verifying in '%s'", test_case.name)
+ raise
+
+
+ # 9) Verify that commit fails.
+
+ if do_commit_conflicts:
+ for test_case in greater_scheme:
+ try:
+ local = j(wc_dir, test_case.name, 'local')
+
+ x_status = test_case.expected_status
+ if x_status != None:
+ x_status.copy()
+ x_status.wc_dir = local
+
+ run_and_verify_commit(local, None, x_status,
+ test_case.commit_block_string,
+ local)
+ except:
+ logger.warn("ERROR IN: Tests scheme for merge: "
+ + "while checking commit-blocking in '%s'", test_case.name)
+ raise
+
+
diff --git a/subversion/tests/cmdline/svntest/err.py b/subversion/tests/cmdline/svntest/err.py
index 77ba4e3..e5271c0 100644
--- a/subversion/tests/cmdline/svntest/err.py
+++ b/subversion/tests/cmdline/svntest/err.py
@@ -22,6 +22,7 @@ AUTHZ_PARTIALLY_READABLE = 220002
AUTHZ_ROOT_UNREADABLE = 220000
AUTHZ_UNREADABLE = 220001
AUTHZ_UNWRITABLE = 220004
+BAD_ATOMIC = 125015
BAD_CHANGELIST_NAME = 125014
BAD_CHECKSUM_KIND = 125011
BAD_CHECKSUM_PARSE = 125012
@@ -40,21 +41,24 @@ BAD_UUID = 125008
BAD_VERSION_FILE_FORMAT = 125006
BASE = 200000
CANCELLED = 200015
-CATEGORY_SIZE = 5000
CEASE_INVOCATION = 200021
CHECKSUM_MISMATCH = 200014
CLIENT_BAD_REVISION = 195002
CLIENT_CYCLE_DETECTED = 195019
CLIENT_DUPLICATE_COMMIT_URL = 195003
CLIENT_FILE_EXTERNAL_OVERWRITE_VERSIONED = 195017
+CLIENT_FORBIDDEN_BY_SERVER = 195023
CLIENT_INVALID_EXTERNALS_DESCRIPTION = 195005
+CLIENT_INVALID_MERGEINFO_NO_MERGETRACKING = 195021
CLIENT_INVALID_RELOCATION = 195009
CLIENT_IS_BINARY_FILE = 195004
CLIENT_IS_DIRECTORY = 195007
+CLIENT_MERGE_UPDATE_REQUIRED = 195020
CLIENT_MISSING_LOCK_TOKEN = 195013
CLIENT_MODIFIED = 195006
CLIENT_MULTIPLE_SOURCES_DISALLOWED = 195014
CLIENT_NOT_READY_TO_MERGE = 195016
+CLIENT_NO_LOCK_TOKEN = 195022
CLIENT_NO_VERSIONED_PARENT = 195015
CLIENT_PATCH_BAD_STRIP_COUNT = 195018
CLIENT_PROPERTY_NAME = 195011
@@ -95,6 +99,7 @@ FS_CONFLICT = 160024
FS_CORRUPT = 160004
FS_GENERAL = 160000
FS_ID_NOT_FOUND = 160014
+FS_INCORRECT_EDITOR_COMPLETION = 160050
FS_LOCK_EXPIRED = 160041
FS_LOCK_OWNER_MISMATCH = 160039
FS_MALFORMED_SKEL = 160027
@@ -143,11 +148,11 @@ IO_CORRUPT_EOL = 135002
IO_INCONSISTENT_EOL = 135000
IO_PIPE_FRAME_ERROR = 135004
IO_PIPE_READ_ERROR = 135005
+IO_PIPE_WRITE_ERROR = 135007
IO_UNIQUE_NAMES_EXHAUSTED = 135003
IO_UNKNOWN_EOL = 135001
IO_WRITE_ERROR = 135006
ITER_BREAK = 200023
-LAST = 235002
MALFORMED_FILE = 200002
MERGEINFO_PARSE_ERROR = 200020
NODE_UNEXPECTED_KIND = 145001
@@ -211,6 +216,7 @@ REPOS_UNSUPPORTED_VERSION = 165005
RESERVED_FILENAME_SPECIFIED = 200025
REVNUM_PARSE_FAILURE = 200022
SQLITE_BUSY = 200033
+SQLITE_CONSTRAINT = 200035
SQLITE_ERROR = 200030
SQLITE_READONLY = 200031
SQLITE_RESETTING_FOR_ROLLBACK = 200034
@@ -263,6 +269,7 @@ WC_NOT_SYMLINK = 155034
WC_NOT_UP_TO_DATE = 155011
WC_NOT_WORKING_COPY = 155007
WC_OBSTRUCTED_UPDATE = 155000
+WC_PATH_ACCESS_DENIED = 155039
WC_PATH_FOUND = 155014
WC_PATH_NOT_FOUND = 155010
WC_PATH_UNEXPECTED_STATUS = 155035
diff --git a/subversion/tests/cmdline/svntest/factory.py b/subversion/tests/cmdline/svntest/factory.py
index f9a0086..9a2b17b 100644
--- a/subversion/tests/cmdline/svntest/factory.py
+++ b/subversion/tests/cmdline/svntest/factory.py
@@ -255,7 +255,7 @@ if sys.version_info[0] >= 3:
from io import StringIO
else:
# Python <3.0
- from StringIO import StringIO
+ from cStringIO import StringIO
def make(wc_dir, commands, prev_status=None, prev_disk=None, verbose=True):
"""The Factory Invocation Function. This is typically the only one
@@ -288,7 +288,9 @@ class TestFactory:
# Any expected_disk still there from a previous verification
self.prev_disk = None
if prev_disk:
- self.prev_disk = [None, prev_disk] # svntest.wc.State
+ reparented_prev_disk = svntest.wc.State(prev_disk.wc_dir, {});
+ reparented_prev_disk.add_state(sbox.wc_dir, prev_disk);
+ self.prev_disk = [None, reparented_prev_disk]
# Those command line options that expect an argument following
# which is not a path. (don't expand args following these)
@@ -308,6 +310,7 @@ class TestFactory:
# Wether we ever used the variables 'wc_dir' and 'url' (tiny tweak)
self.used_wc_dir = False
+ self.used_abs_wc_dir = False
self.used_url = False
# The alternate working copy directories created that need to be
@@ -348,6 +351,8 @@ class TestFactory:
# main wc_dir and url
if self.used_wc_dir:
init += 'wc_dir = sbox.wc_dir\n'
+ if self.used_abs_wc_dir:
+ init += 'abs_wc_dir = os.path.abspath(sbox.wc_dir)\n'
if self.used_url:
init += 'url = sbox.repo_url\n'
@@ -445,9 +450,14 @@ class TestFactory:
return self.cmd_svn_checkout(args[2:])
if second in ['propset','pset','ps']:
- return self.cmd_svn(args[1:], False,
+ multiline_args = [arg.replace(r'\n', '\n') for arg in args[1:]]
+ return self.cmd_svn(multiline_args, False,
self.keep_args_of, 3)
+ if second in ['propget','pget','pg']:
+ return self.cmd_svn(args[1:], False,
+ self.keep_args_of, 2)
+
if second in ['delete','del','remove', 'rm']:
return self.cmd_svn(args[1:], False,
self.keep_args_of + ['--with-revprop'])
@@ -1113,7 +1123,7 @@ class TestFactory:
if not runpath:
continue
strlen = len(runpath)
- item = [strlen, name, runpath]
+ item = (strlen, name, runpath)
bisect.insort(lst, item)
return lst
@@ -1126,14 +1136,14 @@ class TestFactory:
urls = []
for name in self.vars:
if name.startswith('url_'):
- bisect.insort(urls, [name.lower(), name])
+ bisect.insort(urls, (name.lower(), name))
else:
- bisect.insort(paths, [name.lower(), name])
+ bisect.insort(paths, (name.lower(), name))
list = []
for path in paths:
- list += [path[1]]
+ list.append(path[1])
for url in urls:
- list += [url[1]]
+ list.append(url[1])
return list
@@ -1166,8 +1176,20 @@ class TestFactory:
path = var[2]
str = replace(str, path, name, quote)
- str = replace(str, self.sbox.wc_dir, 'wc_dir', quote)
- str = replace(str, self.sbox.repo_url, 'url', quote)
+ str2 = replace(str, os.path.abspath(self.sbox.wc_dir), 'abs_wc_dir', quote)
+ if str != str2:
+ self.used_abs_wc_dir = True
+ str = str2
+
+ str2 = replace(str, self.sbox.wc_dir, 'wc_dir', quote)
+ if str != str2:
+ self.used_wc_dir = True
+ str = str2
+
+ str2 = replace(str, self.sbox.repo_url, 'url', quote)
+ if str != str2:
+ self.used_url = True
+ str = str2
# now remove trailing null-str adds:
# '' + url_A_C + ''
@@ -1610,6 +1632,12 @@ class TestFactory:
def ensure_path_var(self, wc, pathelements):
"Given a path in a working copy, make sure we have a variable for it."
+
+ # special case: if a path is '.', simply use wc_dir.
+ if pathelements == ['.']:
+ self.used_wc_dir = True
+ return wc.py, wc.realpath
+
name = "_".join(pathelements)
if wc.suffix is not None:
diff --git a/subversion/tests/cmdline/svntest/main.py b/subversion/tests/cmdline/svntest/main.py
index 820a080..0d1ca91 100644
--- a/subversion/tests/cmdline/svntest/main.py
+++ b/subversion/tests/cmdline/svntest/main.py
@@ -23,18 +23,20 @@
# under the License.
######################################################################
-import sys # for argv[]
+import sys
import os
-import shutil # for rmtree()
+import shutil
import re
-import stat # for ST_MODE
+import stat
import subprocess
-import time # for time()
-import traceback # for print_exc()
+import time
import threading
-import optparse # for argument parsing
+import optparse
import xml
import urllib
+import logging
+import hashlib
+from urlparse import urlparse
try:
# Python >=3.0
@@ -51,6 +53,7 @@ import svntest
from svntest import Failure
from svntest import Skip
+SVN_VER_MINOR = 8
######################################################################
#
@@ -77,6 +80,10 @@ from svntest import Skip
default_num_threads = 5
+# Don't try to use this before calling execute_tests()
+logger = None
+
+
class SVNProcessTerminatedBySignal(Failure):
"Exception raised if a spawned process segfaulted, aborted, etc."
pass
@@ -104,7 +111,7 @@ class SVNRepositoryCreateFailure(Failure):
# Windows specifics
if sys.platform == 'win32':
windows = True
- file_scheme_prefix = 'file:///'
+ file_scheme_prefix = 'file:'
_exe = '.exe'
_bat = '.bat'
os.environ['SVN_DBG_STACKTRACES_TO_STDERR'] = 'y'
@@ -128,26 +135,11 @@ wc_passwd = 'rayjandom'
# scenarios
wc_author2 = 'jconstant' # use the same password as wc_author
+stack_trace_regexp = r'(?:.*subversion[\\//].*\.c:[0-9]*,$|.*apr_err=.*)'
+
# Set C locale for command line programs
os.environ['LC_ALL'] = 'C'
-# This function mimics the Python 2.3 urllib function of the same name.
-def pathname2url(path):
- """Convert the pathname PATH from the local syntax for a path to the form
- used in the path component of a URL. This does not produce a complete URL.
- The return value will already be quoted using the quote() function."""
-
- # Don't leave ':' in file://C%3A/ escaped as our canonicalization
- # rules will replace this with a ':' on input.
- return urllib_parse_quote(path.replace('\\', '/')).replace('%3A', ':')
-
-# This function mimics the Python 2.3 urllib function of the same name.
-def url2pathname(path):
- """Convert the path component PATH from an encoded URL to the local syntax
- for a path. This does not accept a complete URL. This function uses
- unquote() to decode PATH."""
- return os.path.normpath(urllib_parse_unquote(path))
-
######################################################################
# The locations of the svn, svnadmin and svnlook binaries, relative to
# the only scripts that import this file right now (they live in ../).
@@ -160,13 +152,21 @@ svnsync_binary = os.path.abspath('../../svnsync/svnsync' + _exe)
svnversion_binary = os.path.abspath('../../svnversion/svnversion' + _exe)
svndumpfilter_binary = os.path.abspath('../../svndumpfilter/svndumpfilter' + \
_exe)
+svnmucc_binary=os.path.abspath('../../svnmucc/svnmucc' + _exe)
entriesdump_binary = os.path.abspath('entries-dump' + _exe)
atomic_ra_revprop_change_binary = os.path.abspath('atomic-ra-revprop-change' + \
_exe)
wc_lock_tester_binary = os.path.abspath('../libsvn_wc/wc-lock-tester' + _exe)
wc_incomplete_tester_binary = os.path.abspath('../libsvn_wc/wc-incomplete-tester' + _exe)
-svnmucc_binary=os.path.abspath('../../../tools/client-side/svnmucc/svnmucc' + \
- _exe)
+
+######################################################################
+# The location of svnauthz binary, relative to the only scripts that
+# import this file right now (they live in ../).
+# Use --tools to overide these defaults.
+svnauthz_binary = os.path.abspath('../../../tools/server-side/svnauthz' + _exe)
+svnauthz_validate_binary = os.path.abspath(
+ '../../../tools/server-side/svnauthz-validate' + _exe
+)
# Location to the pristine repository, will be calculated from test_area_url
# when we know what the user specified for --url.
@@ -185,6 +185,12 @@ work_dir = "svn-test-work"
# Constant for the merge info property.
SVN_PROP_MERGEINFO = "svn:mergeinfo"
+# Constant for the inheritable auto-props property.
+SVN_PROP_INHERITABLE_AUTOPROPS = "svn:auto-props"
+
+# Constant for the inheritable ignores property.
+SVN_PROP_INHERITABLE_IGNORES = "svn:global-ignores"
+
# Where we want all the repositories and working copies to live.
# Each test will have its own!
general_repo_dir = os.path.join(work_dir, "repositories")
@@ -234,7 +240,7 @@ greek_state = svntest.wc.State('', {
######################################################################
# Utilities shared by the tests
-def wrap_ex(func):
+def wrap_ex(func, output):
"Wrap a function, catch, print and ignore exceptions"
def w(*args, **kwds):
try:
@@ -243,9 +249,9 @@ def wrap_ex(func):
if ex.__class__ != Failure or ex.args:
ex_args = str(ex)
if ex_args:
- print('EXCEPTION: %s: %s' % (ex.__class__.__name__, ex_args))
+ logger.warn('EXCEPTION: %s: %s', ex.__class__.__name__, ex_args)
else:
- print('EXCEPTION: %s' % ex.__class__.__name__)
+ logger.warn('EXCEPTION: %s', ex.__class__.__name__)
return w
def setup_development_mode():
@@ -301,13 +307,11 @@ def get_start_commit_hook_path(repo_dir):
return os.path.join(repo_dir, "hooks", "start-commit")
-
def get_pre_commit_hook_path(repo_dir):
"Return the path of the pre-commit-hook conf file in REPO_DIR."
return os.path.join(repo_dir, "hooks", "pre-commit")
-
def get_post_commit_hook_path(repo_dir):
"Return the path of the post-commit-hook conf file in REPO_DIR."
@@ -318,6 +322,16 @@ def get_pre_revprop_change_hook_path(repo_dir):
return os.path.join(repo_dir, "hooks", "pre-revprop-change")
+def get_pre_lock_hook_path(repo_dir):
+ "Return the path of the pre-lock hook script in REPO_DIR."
+
+ return os.path.join(repo_dir, "hooks", "pre-lock")
+
+def get_pre_unlock_hook_path(repo_dir):
+ "Return the path of the pre-unlock hook script in REPO_DIR."
+
+ return os.path.join(repo_dir, "hooks", "pre-unlock")
+
def get_svnserve_conf_file_path(repo_dir):
"Return the path of the svnserve.conf file in REPO_DIR."
@@ -334,12 +348,13 @@ def get_fsfs_format_file_path(repo_dir):
return os.path.join(repo_dir, "db", "format")
def filter_dbg(lines):
- for line in lines:
- if not line.startswith('DBG:'):
- yield line
+ excluded = filter(lambda line: line.startswith('DBG:'), lines)
+ included = filter(lambda line: not line.startswith('DBG:'), lines)
+ sys.stdout.write(''.join(excluded))
+ return included
# Run any binary, logging the command line and return code
-def run_command(command, error_expected, binary_mode=0, *varargs):
+def run_command(command, error_expected, binary_mode=False, *varargs):
"""Run COMMAND with VARARGS. Return exit code as int; stdout, stderr
as lists of lines (including line terminators). See run_command_stdin()
for details. If ERROR_EXPECTED is None, any stderr output will be
@@ -374,7 +389,7 @@ def _quote_arg(arg):
# Quoting suitable for most Unix shells.
return "'" + arg.replace("'", "'\\''") + "'"
-def open_pipe(command, bufsize=0, stdin=None, stdout=None, stderr=None):
+def open_pipe(command, bufsize=-1, stdin=None, stdout=None, stderr=None):
"""Opens a subprocess.Popen pipe to COMMAND using STDIN,
STDOUT, and STDERR. BUFSIZE is passed to subprocess.Popen's
argument of the same name.
@@ -435,43 +450,39 @@ def wait_on_pipe(waiter, binary_mode, stdin=None):
exit_signal = exit_code
if stdout_lines is not None:
- sys.stdout.write("".join(stdout_lines))
- sys.stdout.flush()
+ logger.info("".join(stdout_lines))
if stderr_lines is not None:
- sys.stderr.write("".join(stderr_lines))
- sys.stderr.flush()
- if options.verbose:
- # show the whole path to make it easier to start a debugger
- sys.stderr.write("CMD: %s terminated by signal %d\n"
- % (command_string, exit_signal))
- sys.stderr.flush()
+ logger.warning("".join(stderr_lines))
+ # show the whole path to make it easier to start a debugger
+ logger.warning("CMD: %s terminated by signal %d"
+ % (command_string, exit_signal))
raise SVNProcessTerminatedBySignal
else:
- if exit_code and options.verbose:
- sys.stderr.write("CMD: %s exited with %d\n"
- % (command_string, exit_code))
- sys.stderr.flush()
+ if exit_code:
+ logger.info("CMD: %s exited with %d" % (command_string, exit_code))
return stdout_lines, stderr_lines, exit_code
-def spawn_process(command, bufsize=0, binary_mode=0, stdin_lines=None,
+def spawn_process(command, bufsize=-1, binary_mode=False, stdin_lines=None,
*varargs):
"""Run any binary, supplying input text, logging the command line.
+
BUFSIZE dictates the pipe buffer size used in communication with the
- subprocess: 0 means unbuffered, 1 means line buffered, any other
- positive value means use a buffer of (approximately) that size.
- A negative bufsize means to use the system default, which usually
- means fully buffered. The default value for bufsize is 0 (unbuffered).
+ subprocess: quoting from subprocess.Popen(), "0 means unbuffered,
+ 1 means line buffered, any other positive value means use a buffer of
+ (approximately) that size. A negative bufsize means to use the system
+ default, which usually means fully buffered."
+
Normalize Windows line endings of stdout and stderr if not BINARY_MODE.
Return exit code as int; stdout, stderr as lists of lines (including
- line terminators)."""
+ line terminators).
+ """
if stdin_lines and not isinstance(stdin_lines, list):
raise TypeError("stdin_lines should have list type")
# Log the command line
- if options.verbose and not command.endswith('.py'):
- sys.stdout.write('CMD: %s %s\n' % (os.path.basename(command),
- ' '.join([_quote_arg(x) for x in varargs])))
- sys.stdout.flush()
+ if not command.endswith('.py'):
+ logger.info('CMD: %s %s' % (os.path.basename(command),
+ ' '.join([_quote_arg(x) for x in varargs])))
infile, outfile, errfile, kid = open_pipe([command] + list(varargs), bufsize)
@@ -487,7 +498,7 @@ def spawn_process(command, bufsize=0, binary_mode=0, stdin_lines=None,
return exit_code, stdout_lines, stderr_lines
-def run_command_stdin(command, error_expected, bufsize=0, binary_mode=0,
+def run_command_stdin(command, error_expected, bufsize=-1, binary_mode=False,
stdin_lines=None, *varargs):
"""Run COMMAND with VARARGS; input STDIN_LINES (a list of strings
which should include newline characters) to program via stdin - this
@@ -502,8 +513,7 @@ def run_command_stdin(command, error_expected, bufsize=0, binary_mode=0,
If ERROR_EXPECTED is None, any stderr output will be printed and any
stderr output or a non-zero exit code will raise an exception."""
- if options.verbose:
- start = time.time()
+ start = time.time()
exit_code, stdout_lines, stderr_lines = spawn_process(command,
bufsize,
@@ -511,25 +521,47 @@ def run_command_stdin(command, error_expected, bufsize=0, binary_mode=0,
stdin_lines,
*varargs)
- if options.verbose:
- stop = time.time()
- print('<TIME = %.6f>' % (stop - start))
- for x in stdout_lines:
- sys.stdout.write(x)
- for x in stderr_lines:
- sys.stdout.write(x)
+ def _line_contains_repos_diskpath(line):
+ # ### Note: this assumes that either svn-test-work isn't a symlink,
+ # ### or the diskpath isn't realpath()'d somewhere on the way from
+ # ### the server's configuration and the client's stderr. We could
+ # ### check for both the symlinked path and the realpath.
+ return \
+ os.path.join('cmdline', 'svn-test-work', 'repositories') in line \
+ or os.path.join('cmdline', 'svn-test-work', 'local_tmp', 'repos') in line
+
+ for lines, name in [[stdout_lines, "stdout"], [stderr_lines, "stderr"]]:
+ if is_ra_type_file() or 'svnadmin' in command or 'svnlook' in command:
+ break
+ # Does the server leak the repository on-disk path?
+ # (prop_tests-12 installs a hook script that does that intentionally)
+ if any(map(_line_contains_repos_diskpath, lines)) \
+ and not any(map(lambda arg: 'prop_tests-12' in arg, varargs)):
+ raise Failure("Repository diskpath in %s: %r" % (name, lines))
+
+ stop = time.time()
+ logger.info('<TIME = %.6f>' % (stop - start))
+ for x in stdout_lines:
+ logger.info(x.rstrip())
+ for x in stderr_lines:
+ logger.info(x.rstrip())
if (not error_expected) and ((stderr_lines) or (exit_code != 0)):
- if not options.verbose:
- for x in stderr_lines:
- sys.stdout.write(x)
- raise Failure
+ for x in stderr_lines:
+ logger.warning(x.rstrip())
+ if len(varargs) <= 5:
+ brief_command = ' '.join((command,) + varargs)
+ else:
+ brief_command = ' '.join(((command,) + varargs)[:4]) + ' ...'
+ raise Failure('Command failed: "' + brief_command +
+ '"; exit code ' + str(exit_code))
return exit_code, \
- [line for line in stdout_lines if not line.startswith("DBG:")], \
+ filter_dbg(stdout_lines), \
stderr_lines
-def create_config_dir(cfgdir, config_contents=None, server_contents=None):
+def create_config_dir(cfgdir, config_contents=None, server_contents=None,
+ ssl_cert=None, ssl_url=None, http_proxy=None):
"Create config directories and files"
# config file names
@@ -556,17 +588,73 @@ interactive-conflicts = false
http_library_str = ""
if options.http_library:
http_library_str = "http-library=%s" % (options.http_library)
+ http_proxy_str = ""
+ if options.http_proxy:
+ http_proxy_parsed = urlparse("//" + options.http_proxy)
+ http_proxy_str = "http-proxy-host=%s\n" % (http_proxy_parsed.hostname) + \
+ "http-proxy-port=%d" % (http_proxy_parsed.port or 80)
server_contents = """
#
[global]
%s
+%s
store-plaintext-passwords=yes
store-passwords=yes
-""" % (http_library_str)
+""" % (http_library_str, http_proxy_str)
file_write(cfgfile_cfg, config_contents)
file_write(cfgfile_srv, server_contents)
+ if (ssl_cert and ssl_url):
+ trust_ssl_cert(cfgdir, ssl_cert, ssl_url)
+ elif cfgdir != default_config_dir:
+ copy_trust(cfgdir, default_config_dir)
+
+
+def trust_ssl_cert(cfgdir, ssl_cert, ssl_url):
+ """Setup config dir to trust the given ssl_cert for the given ssl_url
+ """
+
+ cert_rep = ''
+ fp = open(ssl_cert, 'r')
+ for line in fp.readlines()[1:-1]:
+ cert_rep = cert_rep + line.strip()
+
+ parsed_url = urlparse(ssl_url)
+ netloc_url = '%s://%s' % (parsed_url.scheme, parsed_url.netloc)
+ ssl_dir = os.path.join(cfgdir, 'auth', 'svn.ssl.server')
+ if not os.path.isdir(ssl_dir):
+ os.makedirs(ssl_dir)
+ md5_name = hashlib.md5(netloc_url).hexdigest()
+ md5_file = os.path.join(ssl_dir, md5_name)
+ md5_file_contents = """K 10
+ascii_cert
+V %d
+%s
+K 8
+failures
+V 1
+8
+K 15
+svn:realmstring
+V %d
+%s
+END
+""" % (len(cert_rep), cert_rep, len(netloc_url), netloc_url)
+
+ file_write(md5_file, md5_file_contents)
+
+def copy_trust(dst_cfgdir, src_cfgdir):
+ """Copy svn.ssl.server files from one config dir to another.
+ """
+
+ src_ssl_dir = os.path.join(src_cfgdir, 'auth', 'svn.ssl.server')
+ dst_ssl_dir = os.path.join(dst_cfgdir, 'auth', 'svn.ssl.server')
+ if not os.path.isdir(dst_ssl_dir):
+ os.makedirs(dst_ssl_dir)
+ for f in os.listdir(src_ssl_dir):
+ shutil.copy(os.path.join(src_ssl_dir, f), os.path.join(dst_ssl_dir, f))
+
def _with_config_dir(args):
if '--config-dir' in args:
return args
@@ -582,13 +670,6 @@ def _with_auth(args):
else:
return args + ('--username', wc_author )
-def _with_log_message(args):
-
- if '-m' in args or '--message' in args or '-F' in args:
- return args
- else:
- return args + ('--message', 'default log message')
-
# For running subversion and returning the output
def run_svn(error_expected, *varargs):
"""Run svn with VARARGS; return exit code as int; stdout, stderr as
@@ -597,53 +678,73 @@ def run_svn(error_expected, *varargs):
non-zero exit code will raise an exception. If
you're just checking that something does/doesn't come out of
stdout/stderr, you might want to use actions.run_and_verify_svn()."""
- return run_command(svn_binary, error_expected, 0,
+ return run_command(svn_binary, error_expected, False,
*(_with_auth(_with_config_dir(varargs))))
# For running svnadmin. Ignores the output.
def run_svnadmin(*varargs):
"""Run svnadmin with VARARGS, returns exit code as int; stdout, stderr as
list of lines (including line terminators)."""
- return run_command(svnadmin_binary, 1, 0, *varargs)
+
+ use_binary = ('dump' in varargs)
+
+ exit_code, stdout_lines, stderr_lines = \
+ run_command(svnadmin_binary, 1, use_binary, *varargs)
+
+ if use_binary and sys.platform == 'win32':
+ # Callers don't expect binary output on stderr
+ stderr_lines = [x.replace('\r', '') for x in stderr_lines]
+
+ return exit_code, stdout_lines, stderr_lines
# For running svnlook. Ignores the output.
def run_svnlook(*varargs):
"""Run svnlook with VARARGS, returns exit code as int; stdout, stderr as
list of lines (including line terminators)."""
- return run_command(svnlook_binary, 1, 0, *varargs)
+ return run_command(svnlook_binary, 1, False, *varargs)
def run_svnrdump(stdin_input, *varargs):
"""Run svnrdump with VARARGS, returns exit code as int; stdout, stderr as
list of lines (including line terminators). Use binary mode for output."""
if stdin_input:
- return run_command_stdin(svnrdump_binary, 1, 1, 1, stdin_input,
+ return run_command_stdin(svnrdump_binary, 1, 1, True, stdin_input,
*(_with_auth(_with_config_dir(varargs))))
else:
- return run_command(svnrdump_binary, 1, 1,
+ return run_command(svnrdump_binary, 1, True,
*(_with_auth(_with_config_dir(varargs))))
def run_svnsync(*varargs):
"""Run svnsync with VARARGS, returns exit code as int; stdout, stderr as
list of lines (including line terminators)."""
- return run_command(svnsync_binary, 1, 0, *(_with_config_dir(varargs)))
+ return run_command(svnsync_binary, 1, False, *(_with_config_dir(varargs)))
def run_svnversion(*varargs):
"""Run svnversion with VARARGS, returns exit code as int; stdout, stderr
as list of lines (including line terminators)."""
- return run_command(svnversion_binary, 1, 0, *varargs)
+ return run_command(svnversion_binary, 1, False, *varargs)
def run_svnmucc(*varargs):
"""Run svnmucc with VARARGS, returns exit code as int; stdout, stderr as
list of lines (including line terminators). Use binary mode for output."""
- return run_command(svnmucc_binary, 1, 1,
- *(_with_auth(_with_config_dir(_with_log_message(varargs)))))
+ return run_command(svnmucc_binary, 1, True,
+ *(_with_auth(_with_config_dir(varargs))))
+
+def run_svnauthz(*varargs):
+ """Run svnauthz with VARARGS, returns exit code as int; stdout, stderr
+ as list of lines (including line terminators)."""
+ return run_command(svnauthz_binary, 1, False, *varargs)
+
+def run_svnauthz_validate(*varargs):
+ """Run svnauthz-validate with VARARGS, returns exit code as int; stdout,
+ stderr as list of lines (including line terminators)."""
+ return run_command(svnauthz_validate_binary, 1, False, *varargs)
def run_entriesdump(path):
"""Run the entries-dump helper, returning a dict of Entry objects."""
# use spawn_process rather than run_command to avoid copying all the data
# to stdout in verbose mode.
exit_code, stdout_lines, stderr_lines = spawn_process(entriesdump_binary,
- 0, 0, None, path)
+ 0, False, None, path)
if exit_code or stderr_lines:
### report on this? or continue to just skip it?
return None
@@ -651,7 +752,7 @@ def run_entriesdump(path):
class Entry(object):
pass
entries = { }
- exec(''.join([line for line in stdout_lines if not line.startswith("DBG:")]))
+ exec(''.join(filter_dbg(stdout_lines)))
return entries
def run_entriesdump_subdirs(path):
@@ -659,8 +760,25 @@ def run_entriesdump_subdirs(path):
# use spawn_process rather than run_command to avoid copying all the data
# to stdout in verbose mode.
exit_code, stdout_lines, stderr_lines = spawn_process(entriesdump_binary,
- 0, 0, None, '--subdirs', path)
- return [line.strip() for line in stdout_lines if not line.startswith("DBG:")]
+ 0, False, None, '--subdirs', path)
+ return map(lambda line: line.strip(), filter_dbg(stdout_lines))
+
+def run_entriesdump_tree(path):
+ """Run the entries-dump helper, returning a dict of a dict of Entry objects."""
+ # use spawn_process rather than run_command to avoid copying all the data
+ # to stdout in verbose mode.
+ exit_code, stdout_lines, stderr_lines = spawn_process(entriesdump_binary,
+ 0, False, None,
+ '--tree-dump', path)
+ if exit_code or stderr_lines:
+ ### report on this? or continue to just skip it?
+ return None
+
+ class Entry(object):
+ pass
+ dirs = { }
+ exec(''.join(filter_dbg(stdout_lines)))
+ return dirs
def run_atomic_ra_revprop_change(url, revision, propname, skel, want_error):
"""Run the atomic-ra-revprop-change helper, returning its exit code, stdout,
@@ -668,12 +786,12 @@ def run_atomic_ra_revprop_change(url, revision, propname, skel, want_error):
# use spawn_process rather than run_command to avoid copying all the data
# to stdout in verbose mode.
#exit_code, stdout_lines, stderr_lines = spawn_process(entriesdump_binary,
- # 0, 0, None, path)
+ # 0, False, None, path)
# This passes HTTP_LIBRARY in addition to our params.
return run_command(atomic_ra_revprop_change_binary, True, False,
url, revision, propname, skel,
- options.http_library, want_error and 1 or 0)
+ want_error and 1 or 0, default_config_dir)
def run_wc_lock_tester(recursive, path):
"Run the wc-lock obtainer tool, returning its exit code, stdout and stderr"
@@ -690,7 +808,7 @@ def run_wc_incomplete_tester(wc_dir, revision):
def youngest(repos_path):
"run 'svnlook youngest' on REPOS_PATH, returns revision as int"
- exit_code, stdout_lines, stderr_lines = run_command(svnlook_binary, None, 0,
+ exit_code, stdout_lines, stderr_lines = run_command(svnlook_binary, None, False,
'youngest', repos_path)
if exit_code or stderr_lines:
raise Failure("Unexpected failure of 'svnlook youngest':\n%s" % stderr_lines)
@@ -757,7 +875,7 @@ def file_substitute(path, contents, new_contents):
open(path, 'w').write(fcontent)
# For creating blank new repositories
-def create_repos(path):
+def create_repos(path, minor_version = None):
"""Create a brand-new SVN repository at PATH. If PATH does not yet
exist, create it."""
@@ -765,25 +883,38 @@ def create_repos(path):
os.makedirs(path) # this creates all the intermediate dirs, if neccessary
opts = ("--bdb-txn-nosync",)
- if options.server_minor_version < 4:
- opts += ("--pre-1.4-compatible",)
- elif options.server_minor_version < 5:
- opts += ("--pre-1.5-compatible",)
- elif options.server_minor_version < 6:
- opts += ("--pre-1.6-compatible",)
+ if not minor_version or minor_version > options.server_minor_version:
+ minor_version = options.server_minor_version
+ opts += ("--compatible-version=1.%d" % (minor_version),)
if options.fs_type is not None:
opts += ("--fs-type=" + options.fs_type,)
- exit_code, stdout, stderr = run_command(svnadmin_binary, 1, 0, "create",
+ exit_code, stdout, stderr = run_command(svnadmin_binary, 1, False, "create",
path, *opts)
# Skip tests if we can't create the repository.
if stderr:
+ stderr_lines = 0
+ not_using_fsfs_backend = (options.fs_type != "fsfs")
+ backend_deprecation_warning = False
for line in stderr:
+ stderr_lines += 1
if line.find('Unknown FS type') != -1:
raise Skip
- # If the FS type is known, assume the repos couldn't be created
- # (e.g. due to a missing 'svnadmin' binary).
- raise SVNRepositoryCreateFailure("".join(stderr).rstrip())
+ if not_using_fsfs_backend:
+ if 0 < line.find('repository back-end is deprecated, consider using'):
+ backend_deprecation_warning = True
+
+ # Creating BDB repositories will cause svnadmin to print a warning
+ # which should be ignored.
+ if (stderr_lines == 1
+ and not_using_fsfs_backend
+ and backend_deprecation_warning):
+ pass
+ else:
+ # If the FS type is known and we noticed more than just the
+ # BDB-specific warning, assume the repos couldn't be created
+ # (e.g. due to a missing 'svnadmin' binary).
+ raise SVNRepositoryCreateFailure("".join(stderr).rstrip())
# Require authentication to write to the repos, for ra_svn testing.
file_write(get_svnserve_conf_file_path(path),
@@ -793,12 +924,16 @@ def create_repos(path):
"realm = svntest\n[sasl]\nuse-sasl = true\n")
else:
file_append(get_svnserve_conf_file_path(path), "password-db = passwd\n")
+ # This actually creates TWO [users] sections in the file (one of them is
+ # uncommented in `svnadmin create`'s template), so we exercise the .ini
+ # files reading code's handling of duplicates, too. :-)
file_append(os.path.join(path, "conf", "passwd"),
"[users]\njrandom = rayjandom\njconstant = rayjandom\n");
if options.fs_type is None or options.fs_type == 'fsfs':
# fsfs.conf file
- if options.config_file is not None:
+ if options.config_file is not None and \
+ (not minor_version or minor_version >= 6):
shutil.copy(options.config_file, get_fsfs_conf_file_path(path))
# format file
@@ -843,7 +978,8 @@ def create_repos(path):
chmod_tree(path, 0666, 0666)
# For copying a repository
-def copy_repos(src_path, dst_path, head_revision, ignore_uuid = 1):
+def copy_repos(src_path, dst_path, head_revision, ignore_uuid = 1,
+ minor_version = None):
"Copy the repository SRC_PATH, with head revision HEAD_REVISION, to DST_PATH"
# Save any previous value of SVN_DBG_QUIET
@@ -852,17 +988,16 @@ def copy_repos(src_path, dst_path, head_revision, ignore_uuid = 1):
# Do an svnadmin dump|svnadmin load cycle. Print a fake pipe command so that
# the displayed CMDs can be run by hand
- create_repos(dst_path)
+ create_repos(dst_path, minor_version)
dump_args = ['dump', src_path]
load_args = ['load', dst_path]
if ignore_uuid:
load_args = load_args + ['--ignore-uuid']
- if options.verbose:
- sys.stdout.write('CMD: %s %s | %s %s\n' %
+
+ logger.info('CMD: %s %s | %s %s' %
(os.path.basename(svnadmin_binary), ' '.join(dump_args),
os.path.basename(svnadmin_binary), ' '.join(load_args)))
- sys.stdout.flush()
start = time.time()
dump_in, dump_out, dump_err, dump_kid = open_pipe(
@@ -871,10 +1006,6 @@ def copy_repos(src_path, dst_path, head_revision, ignore_uuid = 1):
[svnadmin_binary] + load_args,
stdin=dump_out) # Attached to dump_kid
- stop = time.time()
- if options.verbose:
- print('<TIME = %.6f>' % (stop - start))
-
load_stdout, load_stderr, load_exit_code = wait_on_pipe(load_kid, True)
dump_stdout, dump_stderr, dump_exit_code = wait_on_pipe(dump_kid, True)
@@ -885,6 +1016,9 @@ def copy_repos(src_path, dst_path, head_revision, ignore_uuid = 1):
load_out.close()
load_err.close()
+ stop = time.time()
+ logger.info('<TIME = %.6f>' % (stop - start))
+
if saved_quiet is None:
del os.environ['SVN_DBG_QUIET']
else:
@@ -892,14 +1026,18 @@ def copy_repos(src_path, dst_path, head_revision, ignore_uuid = 1):
dump_re = re.compile(r'^\* Dumped revision (\d+)\.\r?$')
expect_revision = 0
+ dump_failed = False
for dump_line in dump_stderr:
match = dump_re.match(dump_line)
if not match or match.group(1) != str(expect_revision):
- print('ERROR: dump failed: %s' % dump_line.strip())
- raise SVNRepositoryCopyFailure
- expect_revision += 1
+ logger.warn('ERROR: dump failed: %s', dump_line.strip())
+ dump_failed = True
+ else:
+ expect_revision += 1
+ if dump_failed:
+ raise SVNRepositoryCopyFailure
if expect_revision != head_revision + 1:
- print('ERROR: dump failed; did not see revision %s' % head_revision)
+ logger.warn('ERROR: dump failed; did not see revision %s', head_revision)
raise SVNRepositoryCopyFailure
load_re = re.compile(r'^------- Committed revision (\d+) >>>\r?$')
@@ -908,11 +1046,11 @@ def copy_repos(src_path, dst_path, head_revision, ignore_uuid = 1):
match = load_re.match(load_line)
if match:
if match.group(1) != str(expect_revision):
- print('ERROR: load failed: %s' % load_line.strip())
+ logger.warn('ERROR: load failed: %s', load_line.strip())
raise SVNRepositoryCopyFailure
expect_revision += 1
if expect_revision != head_revision + 1:
- print('ERROR: load failed; did not see revision %s' % head_revision)
+ logger.warn('ERROR: load failed; did not see revision %s', head_revision)
raise SVNRepositoryCopyFailure
@@ -927,18 +1065,23 @@ def canonicalize_url(input):
return input
-def create_python_hook_script(hook_path, hook_script_code):
+def create_python_hook_script(hook_path, hook_script_code,
+ cmd_alternative=None):
"""Create a Python hook script at HOOK_PATH with the specified
HOOK_SCRIPT_CODE."""
if windows:
- # Use an absolute path since the working directory is not guaranteed
- hook_path = os.path.abspath(hook_path)
- # Fill the python file.
- file_write("%s.py" % hook_path, hook_script_code)
- # Fill the batch wrapper file.
- file_append("%s.bat" % hook_path,
- "@\"%s\" %s.py %%*\n" % (sys.executable, hook_path))
+ if cmd_alternative is not None:
+ file_write("%s.bat" % hook_path,
+ cmd_alternative)
+ else:
+ # Use an absolute path since the working directory is not guaranteed
+ hook_path = os.path.abspath(hook_path)
+ # Fill the python file.
+ file_write("%s.py" % hook_path, hook_script_code)
+ # Fill the batch wrapper file.
+ file_write("%s.bat" % hook_path,
+ "@\"%s\" %s.py %%*\n" % (sys.executable, hook_path))
else:
# For all other platforms
file_write(hook_path, "#!%s\n%s" % (sys.executable, hook_script_code))
@@ -956,6 +1099,19 @@ def write_restrictive_svnserve_conf(repo_dir, anon_access="none"):
fp.write("password-db = passwd\n")
fp.close()
+def write_restrictive_svnserve_conf_with_groups(repo_dir,
+ anon_access="none"):
+ "Create a restrictive configuration with groups stored in a separate file."
+
+ fp = open(get_svnserve_conf_file_path(repo_dir), 'w')
+ fp.write("[general]\nanon-access = %s\nauth-access = write\n"
+ "authz-db = authz\ngroups-db = groups\n" % anon_access)
+ if options.enable_sasl:
+ fp.write("realm = svntest\n[sasl]\nuse-sasl = true\n");
+ else:
+ fp.write("password-db = passwd\n")
+ fp.close()
+
# Warning: because mod_dav_svn uses one shared authz file for all
# repositories, you *cannot* use write_authz_file in any test that
# might be run in parallel.
@@ -991,57 +1147,120 @@ an appropriate list of mappings.
fp.write("[%s%s]\n%s\n" % (prefix, p, r))
fp.close()
+# See the warning about parallel test execution in write_authz_file
+# method description.
+def write_groups_file(sbox, groups):
+ """Write a groups file to SBOX, appropriate for the RA method used,
+with group contents set to GROUPS."""
+ fp = open(sbox.groups_file, 'w')
+ fp.write("[groups]\n")
+ if groups:
+ for p, r in groups.items():
+ fp.write("%s = %s\n" % (p, r))
+ fp.close()
+
def use_editor(func):
os.environ['SVN_EDITOR'] = svneditor_script
os.environ['SVN_MERGE'] = svneditor_script
os.environ['SVNTEST_EDITOR_FUNC'] = func
os.environ['SVN_TEST_PYTHON'] = sys.executable
-def mergeinfo_notify_line(revstart, revend):
+def mergeinfo_notify_line(revstart, revend, target=None):
"""Return an expected output line that describes the beginning of a
mergeinfo recording notification on revisions REVSTART through REVEND."""
+ if target:
+ target_re = re.escape(target)
+ else:
+ target_re = ".+"
if (revend is None):
if (revstart < 0):
revstart = abs(revstart)
- return "--- Recording mergeinfo for reverse merge of r%ld .*:\n" \
- % (revstart)
+ return "--- Recording mergeinfo for reverse merge of r%ld into '%s':\n" \
+ % (revstart, target_re)
else:
- return "--- Recording mergeinfo for merge of r%ld .*:\n" % (revstart)
+ return "--- Recording mergeinfo for merge of r%ld into '%s':\n" \
+ % (revstart, target_re)
elif (revstart < revend):
- return "--- Recording mergeinfo for merge of r%ld through r%ld .*:\n" \
- % (revstart, revend)
+ return "--- Recording mergeinfo for merge of r%ld through r%ld into '%s':\n" \
+ % (revstart, revend, target_re)
else:
return "--- Recording mergeinfo for reverse merge of r%ld through " \
- "r%ld .*:\n" % (revstart, revend)
+ "r%ld into '%s':\n" % (revstart, revend, target_re)
def merge_notify_line(revstart=None, revend=None, same_URL=True,
- foreign=False):
+ foreign=False, target=None):
"""Return an expected output line that describes the beginning of a
merge operation on revisions REVSTART through REVEND. Omit both
REVSTART and REVEND for the case where the left and right sides of
the merge are from different URLs."""
from_foreign_phrase = foreign and "\(from foreign repository\) " or ""
+ if target:
+ target_re = re.escape(target)
+ else:
+ target_re = ".+"
if not same_URL:
- return "--- Merging differences between %srepository URLs into '.+':\n" \
- % (foreign and "foreign " or "")
+ return "--- Merging differences between %srepository URLs into '%s':\n" \
+ % (foreign and "foreign " or "", target_re)
if revend is None:
if revstart is None:
# The left and right sides of the merge are from different URLs.
- return "--- Merging differences between %srepository URLs into '.+':\n" \
- % (foreign and "foreign " or "")
+ return "--- Merging differences between %srepository URLs into '%s':\n" \
+ % (foreign and "foreign " or "", target_re)
elif revstart < 0:
- return "--- Reverse-merging %sr%ld into '.+':\n" \
- % (from_foreign_phrase, abs(revstart))
+ return "--- Reverse-merging %sr%ld into '%s':\n" \
+ % (from_foreign_phrase, abs(revstart), target_re)
else:
- return "--- Merging %sr%ld into '.+':\n" \
- % (from_foreign_phrase, revstart)
+ return "--- Merging %sr%ld into '%s':\n" \
+ % (from_foreign_phrase, revstart, target_re)
else:
if revstart > revend:
- return "--- Reverse-merging %sr%ld through r%ld into '.+':\n" \
- % (from_foreign_phrase, revstart, revend)
+ return "--- Reverse-merging %sr%ld through r%ld into '%s':\n" \
+ % (from_foreign_phrase, revstart, revend, target_re)
else:
- return "--- Merging %sr%ld through r%ld into '.+':\n" \
- % (from_foreign_phrase, revstart, revend)
+ return "--- Merging %sr%ld through r%ld into '%s':\n" \
+ % (from_foreign_phrase, revstart, revend, target_re)
+
+def summary_of_conflicts(text_conflicts=0,
+ prop_conflicts=0,
+ tree_conflicts=0,
+ text_resolved=0,
+ prop_resolved=0,
+ tree_resolved=0,
+ skipped_paths=0,
+ as_regex=False):
+ """Return a list of lines corresponding to the summary of conflicts and
+ skipped paths that is printed by merge and update and switch. If all
+ parameters are zero, return an empty list.
+ """
+ lines = []
+ if (text_conflicts or prop_conflicts or tree_conflicts
+ or text_resolved or prop_resolved or tree_resolved
+ or skipped_paths):
+ lines.append("Summary of conflicts:\n")
+ if text_conflicts or text_resolved:
+ if text_resolved == 0:
+ lines.append(" Text conflicts: %d\n" % text_conflicts)
+ else:
+ lines.append(" Text conflicts: %d remaining (and %d already resolved)\n"
+ % (text_conflicts, text_resolved))
+ if prop_conflicts or prop_resolved:
+ if prop_resolved == 0:
+ lines.append(" Property conflicts: %d\n" % prop_conflicts)
+ else:
+ lines.append(" Property conflicts: %d remaining (and %d already resolved)\n"
+ % (prop_conflicts, prop_resolved))
+ if tree_conflicts or tree_resolved:
+ if tree_resolved == 0:
+ lines.append(" Tree conflicts: %d\n" % tree_conflicts)
+ else:
+ lines.append(" Tree conflicts: %d remaining (and %d already resolved)\n"
+ % (tree_conflicts, tree_resolved))
+ if skipped_paths:
+ lines.append(" Skipped paths: %d\n" % skipped_paths)
+
+ if as_regex:
+ lines = map(re.escape, lines)
+ return lines
def make_log_msg():
@@ -1148,6 +1367,17 @@ def server_enforces_date_syntax():
def server_has_atomic_revprop():
return options.server_minor_version >= 7
+def is_plaintext_password_storage_disabled():
+ try:
+ predicate = re.compile("^WARNING: Plaintext password storage is enabled!")
+ code, out, err = run_svn(False, "--version")
+ for line in out:
+ if predicate.match(line):
+ return False
+ except:
+ return False
+ return True
+
######################################################################
@@ -1155,10 +1385,12 @@ class TestSpawningThread(threading.Thread):
"""A thread that runs test cases in their own processes.
Receives test numbers to run from the queue, and saves results into
the results field."""
- def __init__(self, queue):
+ def __init__(self, queue, progress_func, tests_total):
threading.Thread.__init__(self)
self.queue = queue
self.results = []
+ self.progress_func = progress_func
+ self.tests_total = tests_total
def run(self):
while True:
@@ -1169,6 +1401,11 @@ class TestSpawningThread(threading.Thread):
self.run_one(next_index)
+ # signal progress
+ if self.progress_func:
+ self.progress_func(self.tests_total - self.queue.qsize(),
+ self.tests_total)
+
def run_one(self, index):
command = os.path.abspath(sys.argv[0])
@@ -1180,7 +1417,7 @@ class TestSpawningThread(threading.Thread):
args.append('--fs-type=' + options.fs_type)
if options.test_area_url:
args.append('--url=' + options.test_area_url)
- if options.verbose:
+ if logger.getEffectiveLevel() <= logging.DEBUG:
args.append('-v')
if options.cleanup:
args.append('--cleanup')
@@ -1194,18 +1431,15 @@ class TestSpawningThread(threading.Thread):
args.append('--mode-filter=' + options.mode_filter)
if options.milestone_filter:
args.append('--milestone-filter=' + options.milestone_filter)
+ if options.ssl_cert:
+ args.append('--ssl-cert=' + options.ssl_cert)
+ if options.http_proxy:
+ args.append('--http-proxy=' + options.http_proxy)
- result, stdout_lines, stderr_lines = spawn_process(command, 0, 0, None,
+ result, stdout_lines, stderr_lines = spawn_process(command, 0, False, None,
*args)
self.results.append((index, result, stdout_lines, stderr_lines))
- if result != 1:
- sys.stdout.write('.')
- else:
- sys.stdout.write('F')
-
- sys.stdout.flush()
-
class TestRunner:
"""Encapsulate a single test case (predicate), including logic for
runing the test and test list output."""
@@ -1216,7 +1450,8 @@ class TestRunner:
def list(self, milestones_dict=None):
"""Print test doc strings. MILESTONES_DICT is an optional mapping
- of issue numbers to target milestones."""
+ of issue numbers to an list containing target milestones and who
+ the issue is assigned to."""
if options.mode_filter.upper() == 'ALL' \
or options.mode_filter.upper() == self.pred.list_mode().upper() \
or (options.mode_filter.upper() == 'PASS' \
@@ -1226,6 +1461,7 @@ class TestRunner:
if self.pred.issues:
if not options.milestone_filter or milestones_dict is None:
issues = self.pred.issues
+ tail += " [%s]" % ','.join(['#%s' % str(i) for i in issues])
else: # Limit listing by requested target milestone(s).
filter_issues = []
matches_filter = False
@@ -1234,13 +1470,16 @@ class TestRunner:
# If any one of them matches the MILESTONE_FILTER then we'll print
# them all.
for issue in self.pred.issues:
- # A safe starting assumption.
+ # Some safe starting assumptions.
milestone = 'unknown'
+ assigned_to = 'unknown'
if milestones_dict:
if milestones_dict.has_key(str(issue)):
- milestone = milestones_dict[str(issue)]
+ milestone = milestones_dict[str(issue)][0]
+ assigned_to = milestones_dict[str(issue)][1]
- filter_issues.append(str(issue) + '(' + milestone + ')')
+ filter_issues.append(
+ str(issue) + '(' + milestone + '/' + assigned_to + ')')
pattern = re.compile(options.milestone_filter)
if pattern.match(milestone):
matches_filter = True
@@ -1248,13 +1487,16 @@ class TestRunner:
# Did at least one of the associated issues meet our filter?
if matches_filter:
issues = filter_issues
-
- tail += " [%s]" % ','.join(['#%s' % str(i) for i in issues])
-
+ # Wrap the issue#/target-milestone/assigned-to string
+ # to the next line and add a line break to enhance
+ # readability.
+ tail += "\n %s" % '\n '.join(
+ ['#%s' % str(i) for i in issues])
+ tail += '\n'
# If there is no filter or this test made if through
# the filter then print it!
if options.milestone_filter is None or len(issues):
- if options.verbose and self.pred.inprogress:
+ if self.pred.inprogress:
tail += " [[%s]]" % self.pred.inprogress
else:
print(" %3d %-5s %s%s" % (self.index,
@@ -1326,32 +1568,29 @@ class TestRunner:
result = svntest.testcase.RESULT_SKIP
except Failure, ex:
result = svntest.testcase.RESULT_FAIL
+ msg = ''
# We captured Failure and its subclasses. We don't want to print
# anything for plain old Failure since that just indicates test
# failure, rather than relevant information. However, if there
# *is* information in the exception's arguments, then print it.
if ex.__class__ != Failure or ex.args:
ex_args = str(ex)
- print('CWD: %s' % os.getcwd())
+ logger.warn('CWD: %s' % os.getcwd())
if ex_args:
- print('EXCEPTION: %s: %s' % (ex.__class__.__name__, ex_args))
+ msg = 'EXCEPTION: %s: %s' % (ex.__class__.__name__, ex_args)
else:
- print('EXCEPTION: %s' % ex.__class__.__name__)
- traceback.print_exc(file=sys.stdout)
- sys.stdout.flush()
+ msg = 'EXCEPTION: %s' % ex.__class__.__name__
+ logger.warn(msg, exc_info=True)
except KeyboardInterrupt:
- print('Interrupted')
+ logger.error('Interrupted')
sys.exit(0)
except SystemExit, ex:
- print('EXCEPTION: SystemExit(%d), skipping cleanup' % ex.code)
+ logger.error('EXCEPTION: SystemExit(%d), skipping cleanup' % ex.code)
self._print_name(ex.code and 'FAIL: ' or 'PASS: ')
raise
except:
result = svntest.testcase.RESULT_FAIL
- print('CWD: %s' % os.getcwd())
- print('UNEXPECTED EXCEPTION:')
- traceback.print_exc(file=sys.stdout)
- sys.stdout.flush()
+ logger.warn('CWD: %s' % os.getcwd(), exc_info=True)
os.chdir(saved_dir)
exit_code, result_text, result_benignity = self.pred.results(result)
@@ -1426,7 +1665,8 @@ def _internal_run_tests(test_list, testnums, parallel, srcdir, progress_func):
for num in testnums:
number_queue.put(num)
- threads = [ TestSpawningThread(number_queue) for i in range(parallel) ]
+ threads = [ TestSpawningThread(number_queue, progress_func,
+ len(testnums)) for i in range(parallel) ]
for t in threads:
t.start()
@@ -1439,13 +1679,6 @@ def _internal_run_tests(test_list, testnums, parallel, srcdir, progress_func):
results += t.results
results.sort()
- # signal some kind of progress
- if progress_func:
- progress_func(len(testnums), len(testnums))
-
- # terminate the line of dots
- print("")
-
# all tests are finished, find out the result and print the logs.
for (index, result, stdout_lines, stderr_lines) in results:
if stdout_lines:
@@ -1469,16 +1702,26 @@ def create_default_options():
def _create_parser():
"""Return a parser for our test suite."""
+ def set_log_level(option, opt, value, parser, level=None):
+ if level:
+ # called from --verbose
+ logger.setLevel(level)
+ else:
+ # called from --set-log-level
+ logger.setLevel(getattr(logging, value, None) or int(value))
+
# set up the parser
- _default_http_library = 'neon'
+ _default_http_library = 'serf'
usage = 'usage: %prog [options] [<test> ...]'
parser = optparse.OptionParser(usage=usage)
parser.add_option('-l', '--list', action='store_true', dest='list_tests',
help='Print test doc strings instead of running them')
parser.add_option('--milestone-filter', action='store', dest='milestone_filter',
help='Limit --list to those with target milestone specified')
- parser.add_option('-v', '--verbose', action='store_true', dest='verbose',
- help='Print binary command-lines (not with --quiet)')
+ parser.add_option('-v', '--verbose', action='callback',
+ callback=set_log_level, callback_args=(logging.DEBUG, ),
+ help='Print binary command-lines (same as ' +
+ '"--set-log-level logging.DEBUG")')
parser.add_option('-q', '--quiet', action='store_true',
help='Print only unexpected results (not with --verbose)')
parser.add_option('-p', '--parallel', action='store_const',
@@ -1508,14 +1751,21 @@ def _create_parser():
"it supports both, else assume it's using this " +
"one; the default is " + _default_http_library)
parser.add_option('--server-minor-version', type='int', action='store',
- help="Set the minor version for the server ('4', " +
- "'5', or '6').")
+ help="Set the minor version for the server ('3'..'%d')."
+ % SVN_VER_MINOR)
parser.add_option('--fsfs-packing', action='store_true',
help="Run 'svnadmin pack' automatically")
parser.add_option('--fsfs-sharding', action='store', type='int',
help='Default shard size (for fsfs)')
parser.add_option('--config-file', action='store',
help="Configuration file for tests.")
+ parser.add_option('--set-log-level', action='callback', type='str',
+ callback=set_log_level,
+ help="Set log level (numerically or symbolically). " +
+ "Symbolic levels are: CRITICAL, ERROR, WARNING, " +
+ "INFO, DEBUG")
+ parser.add_option('--log-with-timestamps', action='store_true',
+ help="Show timestamps in test log.")
parser.add_option('--keep-local-tmp', action='store_true',
help="Don't remove svn-test-work/local_tmp after test " +
"run is complete. Useful for debugging failures.")
@@ -1526,11 +1776,18 @@ def _create_parser():
'useful during test development!')
parser.add_option('--srcdir', action='store', dest='srcdir',
help='Source directory.')
+ parser.add_option('--ssl-cert', action='store',
+ help='Path to SSL server certificate.')
+ parser.add_option('--http-proxy', action='store',
+ help='Use the HTTP Proxy at hostname:port.')
+ parser.add_option('--tools-bin', action='store', dest='tools_bin',
+ help='Use the svn tools installed in this path')
# most of the defaults are None, but some are other values, set them here
parser.set_defaults(
- server_minor_version=7,
- url=file_scheme_prefix + pathname2url(os.path.abspath(os.getcwd())),
+ server_minor_version=SVN_VER_MINOR,
+ url=file_scheme_prefix + \
+ urllib.pathname2url(os.path.abspath(os.getcwd())),
http_library=_default_http_library)
return parser
@@ -1546,15 +1803,14 @@ def _parse_options(arglist=sys.argv[1:]):
(options, args) = parser.parse_args(arglist)
# some sanity checking
- if options.verbose and options.quiet:
- parser.error("'verbose' and 'quiet' are incompatible")
if options.fsfs_packing and not options.fsfs_sharding:
parser.error("--fsfs-packing requires --fsfs-sharding")
# If you change the below condition then change
# ../../../../build/run_tests.py too.
- if options.server_minor_version < 3 or options.server_minor_version > 7:
- parser.error("test harness only supports server minor versions 3-7")
+ if options.server_minor_version not in range(3, SVN_VER_MINOR+1):
+ parser.error("test harness only supports server minor versions 3-%d"
+ % SVN_VER_MINOR)
if options.url:
if options.url[-1:] == '/': # Normalize url to have no trailing slash
@@ -1574,7 +1830,12 @@ def run_tests(test_list, serial_only = False):
sys.exit(execute_tests(test_list, serial_only))
-def get_target_milestones_for_issues(issue_numbers):
+def get_issue_details(issue_numbers):
+ """For each issue number in ISSUE_NUMBERS query the issue
+ tracker and determine what the target milestone is and
+ who the issue is assigned to. Return this information
+ as a dictionary mapping issue numbers to a list
+ [target_milestone, assigned_to]"""
xml_url = "http://subversion.tigris.org/issues/xml.cgi?id="
issue_dict = {}
@@ -1602,20 +1863,45 @@ def get_target_milestones_for_issues(issue_numbers):
xmldoc = xml.dom.minidom.parse(issue_xml_f)
issue_xml_f.close()
- # Get the target milestone for each issue.
+ # For each issue: Get the target milestone and who
+ # the issue is assigned to.
issue_element = xmldoc.getElementsByTagName('issue')
for i in issue_element:
issue_id_element = i.getElementsByTagName('issue_id')
issue_id = issue_id_element[0].childNodes[0].nodeValue
milestone_element = i.getElementsByTagName('target_milestone')
milestone = milestone_element[0].childNodes[0].nodeValue
- issue_dict[issue_id] = milestone
+ assignment_element = i.getElementsByTagName('assigned_to')
+ assignment = assignment_element[0].childNodes[0].nodeValue
+ issue_dict[issue_id] = [milestone, assignment]
except:
print "ERROR: Unable to parse target milestones from issue tracker"
raise
return issue_dict
+
+class AbbreviatedFormatter(logging.Formatter):
+ """A formatter with abbreviated loglevel indicators in the output.
+
+ Use %(levelshort)s in the format string to get a single character
+ representing the loglevel..
+ """
+
+ _level_short = {
+ logging.CRITICAL : 'C',
+ logging.ERROR : 'E',
+ logging.WARNING : 'W',
+ logging.INFO : 'I',
+ logging.DEBUG : 'D',
+ logging.NOTSET : '-',
+ }
+
+ def format(self, record):
+ record.levelshort = self._level_short[record.levelno]
+ return logging.Formatter.format(self, record)
+
+
# Main func. This is the "entry point" that all the test scripts call
# to run their list of tests.
#
@@ -1626,6 +1912,7 @@ def execute_tests(test_list, serial_only = False, test_name = None,
exiting the process. This function can be used when a caller doesn't
want the process to die."""
+ global logger
global pristine_url
global pristine_greek_repos_url
global svn_binary
@@ -1635,6 +1922,8 @@ def execute_tests(test_list, serial_only = False, test_name = None,
global svndumpfilter_binary
global svnversion_binary
global svnmucc_binary
+ global svnauthz_binary
+ global svnauthz_validate_binary
global options
if test_name:
@@ -1642,6 +1931,19 @@ def execute_tests(test_list, serial_only = False, test_name = None,
testnums = []
+ # Initialize the LOGGER global variable so the option parsing can set
+ # its loglevel, as appropriate.
+ logger = logging.getLogger()
+
+ # Did some chucklehead log something before we configured it? If they
+ # did, then a default handler/formatter would get installed. We want
+ # to be the one to install the first (and only) handler.
+ for handler in logger.handlers:
+ if not isinstance(handler.formatter, AbbreviatedFormatter):
+ raise Exception('Logging occurred before configuration. Some code'
+ ' path needs to be fixed. Examine the log output'
+ ' to find what/where logged something.')
+
if not options:
# Override which tests to run from the commandline
(parser, args) = _parse_options()
@@ -1649,6 +1951,22 @@ def execute_tests(test_list, serial_only = False, test_name = None,
else:
parser = _create_parser()
+ # If there are no handlers registered yet, then install our own with
+ # our custom formatter. (anything currently installed *is* our handler
+ # as tested above)
+ if not logger.handlers:
+ # Now that we have some options, let's get the logger configured before
+ # doing anything more
+ if options.log_with_timestamps:
+ formatter = AbbreviatedFormatter('%(levelshort)s:'
+ ' [%(asctime)s] %(message)s',
+ datefmt='%Y-%m-%d %H:%M:%S')
+ else:
+ formatter = AbbreviatedFormatter('%(levelshort)s: %(message)s')
+ handler = logging.StreamHandler(sys.stdout)
+ handler.setFormatter(formatter)
+ logger.addHandler(handler)
+
# parse the positional arguments (test nums, names)
for arg in test_selection:
appended = False
@@ -1697,7 +2015,8 @@ def execute_tests(test_list, serial_only = False, test_name = None,
"or function '%s'\n" % arg)
# Calculate pristine_greek_repos_url from test_area_url.
- pristine_greek_repos_url = options.test_area_url + '/' + pathname2url(pristine_greek_repos_dir)
+ pristine_greek_repos_url = options.test_area_url + '/' + \
+ urllib.pathname2url(pristine_greek_repos_dir)
if options.use_jsvn:
if options.svn_bin is None:
@@ -1722,6 +2041,11 @@ def execute_tests(test_list, serial_only = False, test_name = None,
svnversion_binary = os.path.join(options.svn_bin, 'svnversion' + _exe)
svnmucc_binary = os.path.join(options.svn_bin, 'svnmucc' + _exe)
+ if options.tools_bin:
+ svnauthz_binary = os.path.join(options.tools_bin, 'svnauthz' + _exe)
+ svnauthz_validate_binary = os.path.join(options.tools_bin,
+ 'svnauthz-validate' + _exe)
+
######################################################################
# Cleanup: if a previous run crashed or interrupted the python
@@ -1749,10 +2073,13 @@ def execute_tests(test_list, serial_only = False, test_name = None,
options.mode_filter.upper() == test_mode or
(options.mode_filter.upper() == 'PASS' and test_mode == '')):
issues_dict[issue]=issue
- milestones_dict = get_target_milestones_for_issues(issues_dict.keys())
+ milestones_dict = get_issue_details(issues_dict.keys())
+
+ header = "Test # Mode Test Description\n"
+ if options.milestone_filter:
+ header += " Issue#(Target Mileston/Assigned To)\n"
+ header += "------ ----- ----------------"
- header = "Test # Mode Test Description\n" \
- "------ ----- ----------------"
printed_header = False
for testnum in testnums:
test_mode = TestRunner(test_list[testnum], testnum).get_mode().upper()
@@ -1773,7 +2100,10 @@ def execute_tests(test_list, serial_only = False, test_name = None,
if not options.is_child_process:
# Build out the default configuration directory
- create_config_dir(default_config_dir)
+ create_config_dir(default_config_dir,
+ ssl_cert=options.ssl_cert,
+ ssl_url=options.test_area_url,
+ http_proxy=options.http_proxy)
# Setup the pristine repository
svntest.actions.setup_pristine_greek_repository()
diff --git a/subversion/tests/cmdline/svntest/sandbox.py b/subversion/tests/cmdline/svntest/sandbox.py
index c96750f..ad67ac0 100644
--- a/subversion/tests/cmdline/svntest/sandbox.py
+++ b/subversion/tests/cmdline/svntest/sandbox.py
@@ -24,17 +24,24 @@
import os
import shutil
import copy
+import urllib
+import logging
import svntest
+logger = logging.getLogger()
+
class Sandbox:
"""Manages a sandbox (one or more repository/working copy pairs) for
a test to operate within."""
dependents = None
+ tmp_dir = None
def __init__(self, module, idx):
+ self.test_paths = []
+
self._set_name("%s-%d" % (module, idx))
# This flag is set to True by build() and returned by is_built()
self._is_built = False
@@ -46,10 +53,12 @@ class Sandbox:
self.name = name
self.read_only = read_only
self.wc_dir = os.path.join(svntest.main.general_wc_dir, self.name)
+ self.add_test_path(self.wc_dir)
if not read_only:
self.repo_dir = os.path.join(svntest.main.general_repo_dir, self.name)
self.repo_url = (svntest.main.options.test_area_url + '/'
- + svntest.main.pathname2url(self.repo_dir))
+ + urllib.pathname2url(self.repo_dir))
+ self.add_test_path(self.repo_dir)
else:
self.repo_dir = svntest.main.pristine_greek_repos_dir
self.repo_url = svntest.main.pristine_greek_repos_url
@@ -66,14 +75,14 @@ class Sandbox:
tmp_authz_file = os.path.join(svntest.main.work_dir, "authz-" + self.name)
open(tmp_authz_file, 'w').write("[/]\n* = rw\n")
shutil.move(tmp_authz_file, self.authz_file)
+ self.groups_file = os.path.join(svntest.main.work_dir, "groups")
# For svnserve tests we have a per-repository authz file, and it
# doesn't need to be there in order for things to work, so we don't
# have any default contents.
elif self.repo_url.startswith("svn"):
self.authz_file = os.path.join(self.repo_dir, "conf", "authz")
-
- self.test_paths = [self.wc_dir, self.repo_dir]
+ self.groups_file = os.path.join(self.repo_dir, "conf", "groups")
def clone_dependent(self, copy_wc=False):
"""A convenience method for creating a near-duplicate of this
@@ -93,12 +102,13 @@ class Sandbox:
shutil.copytree(self.wc_dir, clone.wc_dir, symlinks=True)
return clone
- def build(self, name=None, create_wc=True, read_only=False):
+ def build(self, name=None, create_wc=True, read_only=False,
+ minor_version=None):
"""Make a 'Greek Tree' repo (or refer to the central one if READ_ONLY),
and check out a WC from it (unless CREATE_WC is false). Change the
sandbox's name to NAME. See actions.make_repo_and_wc() for details."""
self._set_name(name, read_only)
- svntest.actions.make_repo_and_wc(self, create_wc, read_only)
+ svntest.actions.make_repo_and_wc(self, create_wc, read_only, minor_version)
self._is_built = True
def authz_name(self, repo_dir=None):
@@ -125,7 +135,7 @@ class Sandbox:
path = (os.path.join(svntest.main.general_repo_dir, self.name)
+ '.' + suffix)
url = svntest.main.options.test_area_url + \
- '/' + svntest.main.pathname2url(path)
+ '/' + urllib.pathname2url(path)
self.add_test_path(path, remove)
return path, url
@@ -146,13 +156,14 @@ class Sandbox:
"""Get a stable name for a temporary file that will be removed after
running the test"""
- dir = self.add_wc_path('tmp')
- if not os.path.exists(dir):
- os.mkdir(dir)
+ if not self.tmp_dir:
+ # Create an empty directory for temporary files
+ self.tmp_dir = self.add_wc_path('tmp', remove=True)
+ os.mkdir(self.tmp_dir)
self.tempname_offs = self.tempname_offs + 1
- return os.path.join(dir, '%s-%s' % (prefix, self.tempname_offs))
+ return os.path.join(self.tmp_dir, '%s-%s' % (prefix, self.tempname_offs))
def cleanup_test_paths(self):
"Clean up detritus from this sandbox, and any dependents."
@@ -182,6 +193,12 @@ class Sandbox:
path WC_DIR if supplied."""
return [self.ospath(rp, wc_dir) for rp in relpaths]
+ def path(self, relpath, wc_dir=None):
+ """Return RELPATH converted to an path relative to the WC dir
+ of this sbox, or relative to WC_DIR if supplied, but always
+ using '/' as directory separator."""
+ return self.ospath(relpath, wc_dir=wc_dir).replace(os.path.sep, '/')
+
def redirected_root_url(self, temporary=False):
"""If TEMPORARY is set, return the URL which should be configured
to temporarily redirect to the root of this repository;
@@ -195,17 +212,18 @@ class Sandbox:
temporary and 'TEMP' or 'PERM',
parts[1])
- def simple_update(self, target=None):
+ def simple_update(self, target=None, revision='HEAD'):
"""Update the WC or TARGET.
TARGET is a relpath relative to the WC."""
if target is None:
target = self.wc_dir
else:
target = self.ospath(target)
- svntest.main.run_svn(False, 'update', target)
+ svntest.main.run_svn(False, 'update', target, '-r', revision)
def simple_switch(self, url, target=None):
- """Switch a TARGET to URL"""
+ """Switch the WC or TARGET to URL.
+ TARGET is a relpath relative to the WC."""
if target is None:
target = self.wc_dir
else:
@@ -223,63 +241,134 @@ class Sandbox:
target = self.ospath(target)
if message is None:
message = svntest.main.make_log_msg()
- svntest.main.run_svn(False, 'commit', '-m', message,
- target)
+ svntest.actions.run_and_verify_commit(self.wc_dir, None, None, [],
+ '-m', message, target)
def simple_rm(self, *targets):
- """TARGET is a relpath relative to the WC."""
+ """Schedule TARGETS for deletion.
+ TARGETS are relpaths relative to the WC."""
assert len(targets) > 0
targets = self.ospaths(targets)
svntest.main.run_svn(False, 'rm', *targets)
def simple_mkdir(self, *targets):
- """TARGET is a relpath relative to the WC."""
+ """Create TARGETS as directories scheduled for addition.
+ TARGETS are relpaths relative to the WC."""
assert len(targets) > 0
targets = self.ospaths(targets)
svntest.main.run_svn(False, 'mkdir', *targets)
def simple_add(self, *targets):
- """TARGET is a relpath relative to the WC."""
+ """Schedule TARGETS for addition.
+ TARGETS are relpaths relative to the WC."""
assert len(targets) > 0
targets = self.ospaths(targets)
svntest.main.run_svn(False, 'add', *targets)
def simple_revert(self, *targets):
- """TARGET is a relpath relative to the WC."""
+ """Revert TARGETS.
+ TARGETS are relpaths relative to the WC."""
assert len(targets) > 0
targets = self.ospaths(targets)
svntest.main.run_svn(False, 'revert', *targets)
def simple_propset(self, name, value, *targets):
- """TARGET is a relpath relative to the WC."""
+ """Set property NAME to VALUE on TARGETS.
+ TARGETS are relpaths relative to the WC."""
assert len(targets) > 0
targets = self.ospaths(targets)
svntest.main.run_svn(False, 'propset', name, value, *targets)
def simple_propdel(self, name, *targets):
- """TARGET is a relpath relative to the WC."""
+ """Delete property NAME from TARGETS.
+ TARGETS are relpaths relative to the WC."""
assert len(targets) > 0
targets = self.ospaths(targets)
svntest.main.run_svn(False, 'propdel', name, *targets)
+ def simple_propget(self, name, target):
+ """Return the value of the property NAME on TARGET.
+ TARGET is a relpath relative to the WC."""
+ target = self.ospath(target)
+ exit, out, err = svntest.main.run_svn(False, 'propget',
+ '--strict', name, target)
+ return ''.join(out)
+
+ def simple_proplist(self, target):
+ """Return a dictionary mapping property name to property value, of the
+ properties on TARGET.
+ TARGET is a relpath relative to the WC."""
+ target = self.ospath(target)
+ exit, out, err = svntest.main.run_svn(False, 'proplist',
+ '--verbose', '--quiet', target)
+ props = {}
+ for line in out:
+ line = line.rstrip('\r\n')
+ if line[2] != ' ': # property name
+ name = line[2:]
+ val = None
+ elif line.startswith(' '): # property value
+ if val is None:
+ val = line[4:]
+ else:
+ val += '\n' + line[4:]
+ props[name] = val
+ else:
+ raise Exception("Unexpected line '" + line + "' in proplist output" + str(out))
+ return props
+
+ def simple_add_symlink(self, dest, target):
+ """Create a symlink TARGET pointing to DEST and add it to subversion"""
+ if svntest.main.is_posix_os():
+ os.symlink(dest, self.ospath(target))
+ else:
+ svntest.main.file_write(self.ospath(target), "link %s" % dest)
+ self.simple_add(target)
+ if not svntest.main.is_posix_os():
+ # '*' is evaluated on Windows
+ self.simple_propset('svn:special', 'X', target)
+
+ def simple_add_text(self, text, *targets):
+ """Create files containing TEXT as TARGETS"""
+ assert len(targets) > 0
+ for target in targets:
+ svntest.main.file_write(self.ospath(target), text, mode='wb')
+ self.simple_add(*targets)
+
def simple_copy(self, source, dest):
- """SOURCE and DEST are relpaths relative to the WC."""
+ """Copy SOURCE to DEST in the WC.
+ SOURCE and DEST are relpaths relative to the WC."""
source = self.ospath(source)
dest = self.ospath(dest)
svntest.main.run_svn(False, 'copy', source, dest)
def simple_move(self, source, dest):
- """SOURCE and DEST are relpaths relative to the WC."""
+ """Move SOURCE to DEST in the WC.
+ SOURCE and DEST are relpaths relative to the WC."""
source = self.ospath(source)
dest = self.ospath(dest)
svntest.main.run_svn(False, 'move', source, dest)
def simple_repo_copy(self, source, dest):
- """SOURCE and DEST are relpaths relative to the repo root."""
+ """Copy SOURCE to DEST in the repository, committing the result with a
+ default log message.
+ SOURCE and DEST are relpaths relative to the repo root."""
svntest.main.run_svn(False, 'copy', '-m', svntest.main.make_log_msg(),
self.repo_url + '/' + source,
self.repo_url + '/' + dest)
+ def simple_append(self, dest, contents, truncate=False):
+ """Append CONTENTS to file DEST, optionally truncating it first.
+ DEST is a relpath relative to the WC."""
+ open(self.ospath(dest), truncate and 'w' or 'a').write(contents)
+
+ def simple_lock(self, *targets):
+ """Lock TARGETS in the WC.
+ TARGETS are relpaths relative to the WC."""
+ assert len(targets) > 0
+ targets = self.ospaths(targets)
+ svntest.main.run_svn(False, 'lock', *targets)
+
def is_url(target):
return (target.startswith('^/')
@@ -301,14 +390,13 @@ def cleanup_deferred_test_paths():
def _cleanup_test_path(path, retrying=False):
- if svntest.main.options.verbose:
- if retrying:
- print("CLEANUP: RETRY: %s" % path)
- else:
- print("CLEANUP: %s" % path)
+ if retrying:
+ logger.info("CLEANUP: RETRY: %s", path)
+ else:
+ logger.info("CLEANUP: %s", path)
+
try:
- svntest.main.safe_rmtree(path)
+ svntest.main.safe_rmtree(path, retrying)
except:
- if svntest.main.options.verbose:
- print("WARNING: cleanup failed, will try again later")
+ logger.info("WARNING: cleanup failed, will try again later")
_deferred_test_paths.append(path)
diff --git a/subversion/tests/cmdline/svntest/tree.py b/subversion/tests/cmdline/svntest/tree.py
index 1604f49..b8dd03e 100644
--- a/subversion/tests/cmdline/svntest/tree.py
+++ b/subversion/tests/cmdline/svntest/tree.py
@@ -31,12 +31,15 @@ if sys.version_info[0] >= 3:
from io import StringIO
else:
# Python <3.0
- from StringIO import StringIO
+ from cStringIO import StringIO
from xml.dom.minidom import parseString
import base64
+import logging
import svntest
+logger = logging.getLogger()
+
# Tree Exceptions.
# All tree exceptions should inherit from SVNTreeError
@@ -250,6 +253,10 @@ class SVNTreeNode:
# remove the subtree path, skip this node if necessary.
if path.startswith(subtree):
path = path[len(subtree):]
+ elif path + os.sep == subtree:
+ # Many callers set subtree to 'some-path' + os.sep. Don't skip the
+ # root node in that case.
+ path = ''
else:
return 0
@@ -569,7 +576,7 @@ def get_child(node, name):
"""If SVNTreeNode NODE contains a child named NAME, return child;
else, return None. If SVNTreeNode is not a directory, exit completely."""
if node.children == None:
- print("Error: Foolish call to get_child.")
+ logger.error("Foolish call to get_child.")
sys.exit(1)
for n in node.children:
if name == n.name:
@@ -581,8 +588,8 @@ def get_child(node, name):
def default_singleton_handler(node, description):
"""Print SVNTreeNode NODE's name, describing it with the string
DESCRIPTION, then raise SVNTreeUnequal."""
- print("Couldn't find node '%s' in %s tree" % (node.name, description))
- node.pprint()
+ logger.warn("Couldn't find node '%s' in %s tree" % (node.name, description))
+ logger.warn(str(node))
raise SVNTreeUnequal
# A test helper function implementing the singleton_handler_a API.
@@ -599,8 +606,8 @@ def detect_conflict_files(node, extra_files):
break
else:
msg = "Encountered unexpected disk path '" + node.name + "'"
- print(msg)
- node.pprint()
+ logger.warn(msg)
+ logger.warn(str(node))
raise SVNTreeUnequal(msg)
###########################################################################
@@ -634,17 +641,20 @@ def compare_trees(label,
def display_nodes(a, b):
'Display two nodes, expected and actual.'
- print("=============================================================")
- print("Expected '%s' and actual '%s' in %s tree are different!"
- % (b.name, a.name, label))
- print("=============================================================")
- print("EXPECTED NODE TO BE:")
- print("=============================================================")
- b.pprint()
- print("=============================================================")
- print("ACTUAL NODE FOUND:")
- print("=============================================================")
- a.pprint()
+ o = StringIO()
+ o.write("=============================================================\n")
+ o.write("Expected '%s' and actual '%s' in %s tree are different!\n"
+ % (b.name, a.name, label))
+ o.write("=============================================================\n")
+ o.write("EXPECTED NODE TO BE:\n")
+ o.write("=============================================================\n")
+ b.pprint(o)
+ o.write("=============================================================\n")
+ o.write("ACTUAL NODE FOUND:\n")
+ o.write("=============================================================\n")
+ a.pprint(o)
+ logger.warn(o.getvalue())
+ o.close()
# Setup singleton handlers
if singleton_handler_a is None:
@@ -690,21 +700,21 @@ def compare_trees(label,
if b_child not in accounted_for:
singleton_handler_b(b_child, b_baton)
except SVNTypeMismatch:
- print('Unequal Types: one Node is a file, the other is a directory')
+ logger.warn('Unequal Types: one Node is a file, the other is a directory')
raise SVNTreeUnequal
except IndexError:
- print("Error: unequal number of children")
+ logger.warn("Error: unequal number of children")
raise SVNTreeUnequal
except SVNTreeUnequal:
if a.name != root_node_name:
- print("Unequal at node %s" % a.name)
+ logger.warn("Unequal at node %s" % a.name)
raise
# Visually show a tree's structure
-def dump_tree(n,indent=""):
+def _dump_tree(n,indent="",stream=sys.stdout):
"""Print out a nice representation of the structure of the tree in
the SVNTreeNode N. Prefix each line with the string INDENT."""
@@ -712,18 +722,25 @@ def dump_tree(n,indent=""):
tmp_children = sorted(n.children or [])
if n.name == root_node_name:
- print("%s%s" % (indent, "ROOT"))
+ stream.write("%s%s\n" % (indent, "ROOT"))
else:
- print("%s%s" % (indent, n.name))
+ stream.write("%s%s\n" % (indent, n.name))
indent = indent.replace("-", " ")
indent = indent.replace("+", " ")
for i in range(len(tmp_children)):
c = tmp_children[i]
if i == len(tmp_children)-1:
- dump_tree(c,indent + " +-- ")
+ _dump_tree(c,indent + " +-- ",stream)
else:
- dump_tree(c,indent + " |-- ")
+ _dump_tree(c,indent + " |-- ",stream)
+
+
+def dump_tree(n):
+ output = StringIO()
+ _dump_tree(n,stream=output)
+ logger.warn(output.getvalue())
+ output.close()
def dump_tree_script__crawler(n, subtree="", stream=sys.stdout):
diff --git a/subversion/tests/cmdline/svntest/verify.py b/subversion/tests/cmdline/svntest/verify.py
index 3aa59b2..1c0ae2e 100644
--- a/subversion/tests/cmdline/svntest/verify.py
+++ b/subversion/tests/cmdline/svntest/verify.py
@@ -27,9 +27,12 @@
import re, sys
from difflib import unified_diff, ndiff
import pprint
+import logging
import svntest
+logger = logging.getLogger()
+
######################################################################
# Exception types
@@ -93,129 +96,72 @@ def createExpectedOutput(expected, output_type, match_all=True):
raise SVNIncorrectDatatype("Unexpected type for '%s' data" % output_type)
return expected
-class ExpectedOutput:
- """Contains expected output, and performs comparisons."""
+class ExpectedOutput(object):
+ """Matches an ordered list of lines.
- is_regex = False
- is_unordered = False
+ If MATCH_ALL is True, the expected lines must match all the actual
+ lines, one-to-one, in the same order. If MATCH_ALL is False, the
+ expected lines must match a subset of the actual lines, one-to-one,
+ in the same order, ignoring any other actual lines among the
+ matching ones.
+ """
- def __init__(self, output, match_all=True):
- """Initialize the expected output to OUTPUT which is a string, or a list
- of strings, or None meaning an empty list. If MATCH_ALL is True, the
- expected strings will be matched with the actual strings, one-to-one, in
- the same order. If False, they will be matched with a subset of the
- actual strings, one-to-one, in the same order, ignoring any other actual
- strings among the matching ones."""
- self.output = output
+ def __init__(self, expected, match_all=True):
+ """Initialize the expected output to EXPECTED which is a string, or
+ a list of strings.
+ """
+ assert expected is not None
+ self.expected = expected
self.match_all = match_all
def __str__(self):
- return str(self.output)
+ return str(self.expected)
def __cmp__(self, other):
- raise Exception('badness')
-
- def matches(self, other, except_re=None):
- """Return whether SELF.output matches OTHER (which may be a list
- of newline-terminated lines, or a single string). Either value
- may be None."""
- if self.output is None:
- expected = []
- else:
- expected = self.output
- if other is None:
- actual = []
- else:
- actual = other
-
- if not isinstance(actual, list):
- actual = [actual]
+ raise TypeError("ExpectedOutput does not implement direct comparison; "
+ "see the 'matches()' method")
+
+ def matches(self, actual):
+ """Return whether SELF matches ACTUAL (which may be a list
+ of newline-terminated lines, or a single string).
+ """
+ assert actual is not None
+ expected = self.expected
if not isinstance(expected, list):
expected = [expected]
+ if not isinstance(actual, list):
+ actual = [actual]
- if except_re:
- return self.matches_except(expected, actual, except_re)
- else:
- return self.is_equivalent_list(expected, actual)
-
- def matches_except(self, expected, actual, except_re):
- "Return whether EXPECTED and ACTUAL match except for except_re."
- if not self.is_regex:
- i_expected = 0
- i_actual = 0
- while i_expected < len(expected) and i_actual < len(actual):
- if re.match(except_re, actual[i_actual]):
- i_actual += 1
- elif re.match(except_re, expected[i_expected]):
- i_expected += 1
- elif expected[i_expected] == actual[i_actual]:
- i_expected += 1
- i_actual += 1
- else:
- return False
- if i_expected == len(expected) and i_actual == len(actual):
- return True
- return False
- else:
- raise Exception("is_regex and except_re are mutually exclusive")
-
- def is_equivalent_list(self, expected, actual):
- "Return whether EXPECTED and ACTUAL are equivalent."
- if not self.is_regex:
- if self.match_all:
- # The EXPECTED lines must match the ACTUAL lines, one-to-one, in
- # the same order.
- return expected == actual
-
- # The EXPECTED lines must match a subset of the ACTUAL lines,
- # one-to-one, in the same order, with zero or more other ACTUAL
- # lines interspersed among the matching ACTUAL lines.
- i_expected = 0
- for actual_line in actual:
- if expected[i_expected] == actual_line:
- i_expected += 1
- if i_expected == len(expected):
- return True
- return False
-
- expected_re = expected[0]
- # If we want to check that every line matches the regexp
- # assume they all match and look for any that don't. If
- # only one line matching the regexp is enough, assume none
- # match and look for even one that does.
if self.match_all:
- all_lines_match_re = True
- else:
- all_lines_match_re = False
-
- # If a regex was provided assume that we actually require
- # some output. Fail if we don't have any.
- if len(actual) == 0:
- return False
+ return expected == actual
+ i_expected = 0
for actual_line in actual:
- if self.match_all:
- if not re.match(expected_re, actual_line):
- return False
- else:
- # As soon an actual_line matches something, then we're good.
- if re.match(expected_re, actual_line):
+ if expected[i_expected] == actual_line:
+ i_expected += 1
+ if i_expected == len(expected):
return True
-
- return all_lines_match_re
+ return False
def display_differences(self, message, label, actual):
- """Delegate to the display_lines() routine with the appropriate
- args. MESSAGE is ignored if None."""
- display_lines(message, label, self.output, actual,
- self.is_regex, self.is_unordered)
+ """Show the differences between the expected and ACTUAL lines. Print
+ MESSAGE unless it is None, the expected lines, the ACTUAL lines,
+ and a diff, all labeled with LABEL.
+ """
+ display_lines(message, self.expected, actual, label, label)
+ display_lines_diff(self.expected, actual, label, label)
class AnyOutput(ExpectedOutput):
+ """Matches any non-empty output.
+ """
+
def __init__(self):
- ExpectedOutput.__init__(self, None, False)
+ ExpectedOutput.__init__(self, [], False)
+
+ def matches(self, actual):
+ assert actual is not None
- def is_equivalent_list(self, ignored, actual):
if len(actual) == 0:
# No actual output. No match.
return False
@@ -230,64 +176,166 @@ class AnyOutput(ExpectedOutput):
def display_differences(self, message, label, actual):
if message:
- print(message)
+ logger.warn(message)
class RegexOutput(ExpectedOutput):
- is_regex = True
+ """Matches a single regular expression.
+ If MATCH_ALL is true, every actual line must match the RE. If
+ MATCH_ALL is false, at least one actual line must match the RE. In
+ any case, there must be at least one line of actual output.
+ """
-class UnorderedOutput(ExpectedOutput):
- """Marks unordered output, and performs comparisons."""
+ def __init__(self, expected, match_all=True):
+ "EXPECTED is a regular expression string."
+ assert isinstance(expected, str)
+ ExpectedOutput.__init__(self, expected, match_all)
+ self.expected_re = re.compile(expected)
- is_unordered = True
+ def matches(self, actual):
+ assert actual is not None
- def __cmp__(self, other):
- raise Exception('badness')
+ if not isinstance(actual, list):
+ actual = [actual]
+
+ # If a regex was provided assume that we require some actual output.
+ # Fail if we don't have any.
+ if len(actual) == 0:
+ return False
+
+ if self.match_all:
+ return all(self.expected_re.match(line) for line in actual)
+ else:
+ return any(self.expected_re.match(line) for line in actual)
- def matches_except(self, expected, actual, except_re):
- assert type(actual) == type([]) # ### if this trips: fix it!
- return self.is_equivalent_list([l for l in expected if not except_re.match(l)],
- [l for l in actual if not except_re.match(l)])
+ def display_differences(self, message, label, actual):
+ display_lines(message, self.expected, actual, label + ' (regexp)', label)
+
+
+class RegexListOutput(ExpectedOutput):
+ """Matches an ordered list of regular expressions.
+
+ If MATCH_ALL is True, the expressions must match all the actual
+ lines, one-to-one, in the same order. If MATCH_ALL is False, the
+ expressions must match a subset of the actual lines, one-to-one, in
+ the same order, ignoring any other actual lines among the matching
+ ones.
+
+ In any case, there must be at least one line of actual output.
+ """
- def is_equivalent_list(self, expected, actual):
- "Disregard the order of ACTUAL lines during comparison."
+ def __init__(self, expected, match_all=True):
+ "EXPECTED is a list of regular expression strings."
+ assert isinstance(expected, list) and expected != []
+ ExpectedOutput.__init__(self, expected, match_all)
+ self.expected_res = [re.compile(e) for e in expected]
- e_set = set(expected)
- a_set = set(actual)
+ def matches(self, actual):
+ assert actual is not None
+ if not isinstance(actual, list):
+ actual = [actual]
if self.match_all:
- if len(e_set) != len(a_set):
- return False
- if self.is_regex:
- for expect_re in e_set:
- for actual_line in a_set:
- if re.match(expect_re, actual_line):
- a_set.remove(actual_line)
- break
- else:
- # One of the regexes was not found
- return False
- return True
+ return (len(self.expected_res) == len(actual) and
+ all(e.match(a) for e, a in zip(self.expected_res, actual)))
- # All expected lines must be in the output.
- return e_set == a_set
+ i_expected = 0
+ for actual_line in actual:
+ if self.expected_res[i_expected].match(actual_line):
+ i_expected += 1
+ if i_expected == len(self.expected_res):
+ return True
+ return False
+
+ def display_differences(self, message, label, actual):
+ display_lines(message, self.expected, actual, label + ' (regexp)', label)
+
+
+class UnorderedOutput(ExpectedOutput):
+ """Matches an unordered list of lines.
+
+ The expected lines must match all the actual lines, one-to-one, in
+ any order.
+ """
+
+ def __init__(self, expected):
+ assert isinstance(expected, list)
+ ExpectedOutput.__init__(self, expected)
+
+ def matches(self, actual):
+ if not isinstance(actual, list):
+ actual = [actual]
+
+ return sorted(self.expected) == sorted(actual)
+
+ def display_differences(self, message, label, actual):
+ display_lines(message, self.expected, actual, label + ' (unordered)', label)
+ display_lines_diff(self.expected, actual, label + ' (unordered)', label)
+
+
+class UnorderedRegexListOutput(ExpectedOutput):
+ """Matches an unordered list of regular expressions.
+
+ The expressions must match all the actual lines, one-to-one, in any
+ order.
+
+ Note: This can give a false negative result (no match) when there is
+ an actual line that matches multiple expressions and a different
+ actual line that matches some but not all of those same
+ expressions. The implementation matches each expression in turn to
+ the first unmatched actual line that it can match, and does not try
+ all the permutations when there are multiple possible matches.
+ """
+
+ def __init__(self, expected):
+ assert isinstance(expected, list)
+ ExpectedOutput.__init__(self, expected)
+
+ def matches(self, actual):
+ assert actual is not None
+ if not isinstance(actual, list):
+ actual = [actual]
- if self.is_regex:
- # If any of the expected regexes are in the output, then we match.
- for expect_re in e_set:
- for actual_line in a_set:
- if re.match(expect_re, actual_line):
- return True
+ if len(self.expected) != len(actual):
return False
+ for e in self.expected:
+ expect_re = re.compile(e)
+ for actual_line in actual:
+ if expect_re.match(actual_line):
+ actual.remove(actual_line)
+ break
+ else:
+ # One of the regexes was not found
+ return False
+ return True
+
+ def display_differences(self, message, label, actual):
+ display_lines(message, self.expected, actual,
+ label + ' (regexp) (unordered)', label)
- # If any of the expected lines are in the output, then we match.
- return len(e_set.intersection(a_set)) > 0
+class AlternateOutput(ExpectedOutput):
+ """Matches any one of a list of ExpectedOutput instances.
+ """
+
+ def __init__(self, expected, match_all=True):
+ "EXPECTED is a list of ExpectedOutput instances."
+ assert isinstance(expected, list) and expected != []
+ assert all(isinstance(e, ExpectedOutput) for e in expected)
+ ExpectedOutput.__init__(self, expected)
+
+ def matches(self, actual):
+ assert actual is not None
+ for e in self.expected:
+ if e.matches(actual):
+ return True
+ return False
-class UnorderedRegexOutput(UnorderedOutput, RegexOutput):
- is_regex = True
- is_unordered = True
+ def display_differences(self, message, label, actual):
+ # For now, just display differences against the first alternative.
+ e = self.expected[0]
+ e.display_differences(message, label, actual)
######################################################################
@@ -296,72 +344,76 @@ class UnorderedRegexOutput(UnorderedOutput, RegexOutput):
def display_trees(message, label, expected, actual):
'Print two trees, expected and actual.'
if message is not None:
- print(message)
+ logger.warn(message)
if expected is not None:
- print('EXPECTED %s:' % label)
+ logger.warn('EXPECTED %s:', label)
svntest.tree.dump_tree(expected)
if actual is not None:
- print('ACTUAL %s:' % label)
+ logger.warn('ACTUAL %s:', label)
svntest.tree.dump_tree(actual)
-def display_lines(message, label, expected, actual, expected_is_regexp=None,
- expected_is_unordered=None):
+def display_lines_diff(expected, actual, expected_label, actual_label):
+ """Print a unified diff between EXPECTED (labeled with EXPECTED_LABEL)
+ and ACTUAL (labeled with ACTUAL_LABEL).
+ Each of EXPECTED and ACTUAL is a string or a list of strings.
+ """
+ if not isinstance(expected, list):
+ expected = [expected]
+ if not isinstance(actual, list):
+ actual = [actual]
+ logger.warn('DIFF ' + expected_label + ':')
+ for x in unified_diff(expected, actual,
+ fromfile='EXPECTED ' + expected_label,
+ tofile='ACTUAL ' + actual_label):
+ logger.warn('| ' + x.rstrip())
+
+def display_lines(message, expected, actual,
+ expected_label, actual_label=None):
"""Print MESSAGE, unless it is None, then print EXPECTED (labeled
- with LABEL) followed by ACTUAL (also labeled with LABEL).
- Both EXPECTED and ACTUAL may be strings or lists of strings."""
+ with EXPECTED_LABEL) followed by ACTUAL (labeled with ACTUAL_LABEL).
+ Each of EXPECTED and ACTUAL is a string or a list of strings.
+ """
if message is not None:
- print(message)
+ logger.warn(message)
+
+ if type(expected) is str:
+ expected = [expected]
+ if type(actual) is str:
+ actual = [actual]
+ if actual_label is None:
+ actual_label = expected_label
if expected is not None:
- output = 'EXPECTED %s' % label
- if expected_is_regexp:
- output += ' (regexp)'
- expected = [expected + '\n']
- if expected_is_unordered:
- output += ' (unordered)'
- output += ':'
- print(output)
+ logger.warn('EXPECTED %s:', expected_label)
for x in expected:
- sys.stdout.write(x)
+ logger.warn('| ' + x.rstrip())
if actual is not None:
- print('ACTUAL %s:' % label)
+ logger.warn('ACTUAL %s:', actual_label)
for x in actual:
- sys.stdout.write(x)
-
- # Additionally print unified diff
- if not expected_is_regexp:
- print('DIFF ' + ' '.join(output.split(' ')[1:]))
-
- if type(expected) is str:
- expected = [expected]
-
- if type(actual) is str:
- actual = [actual]
-
- for x in unified_diff(expected, actual,
- fromfile="EXPECTED %s" % label,
- tofile="ACTUAL %s" % label):
- sys.stdout.write(x)
+ logger.warn('| ' + x.rstrip())
def compare_and_display_lines(message, label, expected, actual,
- raisable=None, except_re=None):
+ raisable=None):
"""Compare two sets of output lines, and print them if they differ,
preceded by MESSAGE iff not None. EXPECTED may be an instance of
- ExpectedOutput (and if not, it is wrapped as such). RAISABLE is an
+ ExpectedOutput (and if not, it is wrapped as such). ACTUAL may be a
+ list of newline-terminated lines, or a single string. RAISABLE is an
exception class, an instance of which is thrown if ACTUAL doesn't
match EXPECTED."""
if raisable is None:
raisable = svntest.main.SVNLineUnequal
### It'd be nicer to use createExpectedOutput() here, but its
### semantics don't match all current consumers of this function.
+ assert expected is not None
+ assert actual is not None
if not isinstance(expected, ExpectedOutput):
expected = ExpectedOutput(expected)
if isinstance(actual, str):
actual = [actual]
- actual = [line for line in actual if not line.startswith('DBG:')]
+ actual = svntest.main.filter_dbg(actual)
- if not expected.matches(actual, except_re):
+ if not expected.matches(actual):
expected.display_differences(message, label, actual)
raise raisable
@@ -399,8 +451,7 @@ def verify_exit_code(message, actual, expected,
not None) and raise an exception."""
if expected != actual:
- display_lines(message, "Exit Code",
- str(expected) + '\n', str(actual) + '\n')
+ display_lines(message, str(expected), str(actual), "Exit Code")
raise raisable
# A simple dump file parser. While sufficient for the current
diff --git a/subversion/tests/cmdline/svntest/wc.py b/subversion/tests/cmdline/svntest/wc.py
index fa21d3e..171c18d 100644
--- a/subversion/tests/cmdline/svntest/wc.py
+++ b/subversion/tests/cmdline/svntest/wc.py
@@ -27,9 +27,20 @@ import os
import sys
import re
import urllib
+import logging
+import pprint
+
+if sys.version_info[0] >= 3:
+ # Python >=3.0
+ from io import StringIO
+else:
+ # Python <3.0
+ from cStringIO import StringIO
import svntest
+logger = logging.getLogger()
+
#
# 'status -v' output looks like this:
@@ -83,11 +94,17 @@ _re_parse_status = re.compile('^([?!MACDRUGXI_~ ][MACDRUG_ ])'
'((?P<wc_rev>\d+|-|\?) +(\d|-|\?)+ +(\S+) +)?'
'(?P<path>.+)$')
-_re_parse_skipped = re.compile("^Skipped[^']* '(.+)'( --.*)?\n")
+_re_parse_status_ex = re.compile('^ ('
+ '( \> moved (from (?P<moved_from>.+)|to (?P<moved_to>.*)))'
+ '|( \> swapped places with (?P<swapped_with>.+).*)'
+ '|(\> (?P<tc>.+))'
+ ')$')
+
+_re_parse_skipped = re.compile("^(Skipped[^']*) '(.+)'( --.*)?\n")
_re_parse_summarize = re.compile("^([MAD ][M ]) (.+)\n")
-_re_parse_checkout = re.compile('^([RMAGCUDE_ ][MAGCUDE_ ])'
+_re_parse_checkout = re.compile('^([RMAGCUDE_ B][MAGCUDE_ ])'
'([B ])'
'([CAUD ])\s+'
'(.+)')
@@ -128,10 +145,11 @@ class State:
"Import state items from a State object, reparent the items to PARENT."
assert isinstance(state, State)
- if parent and parent[-1] != '/':
- parent += '/'
for path, item in state.desc.items():
- path = parent + path
+ if path == '':
+ path = parent
+ else:
+ path = parent + '/' + path
self.desc[path] = item
def remove(self, *paths):
@@ -245,6 +263,20 @@ class State:
desc = dict([(repos_join(base, path), item)
for path, item in self.desc.items()])
+
+ for path, item in desc.copy().items():
+ if item.moved_from or item.moved_to:
+ i = item.copy()
+
+ if i.moved_from:
+ i.moved_from = to_relpath(os.path.normpath(
+ repos_join(base, i.moved_from)))
+ if i.moved_to:
+ i.moved_to = to_relpath(os.path.normpath(
+ repos_join(base, i.moved_to)))
+
+ desc[path] = i
+
return State('', desc)
def compare(self, other):
@@ -316,8 +348,16 @@ class State:
if item.status:
# If this is an unversioned tree-conflict, remove it.
# These are only in their parents' THIS_DIR, they don't have entries.
- if item.status[0] in '!?' and item.treeconflict == 'C':
+ if item.status[0] in '!?' and item.treeconflict == 'C' and \
+ item.entry_status is None:
+ del self.desc[path]
+ # Normal externals are not stored in the parent wc, drop the root
+ # and everything in these working copies
+ elif item.status == 'X ' or item.prev_status == 'X ':
del self.desc[path]
+ for p, i in self.desc.copy().items():
+ if p.startswith(path + '/'):
+ del self.desc[p]
else:
# when reading the entry structures, we don't examine for text or
# property mods, so clear those flags. we also do not examine the
@@ -336,6 +376,9 @@ class State:
if item.entry_status is not None:
item.status = item.entry_status
item.entry_status = None
+ if item.entry_copied is not None:
+ item.copied = item.entry_copied
+ item.entry_copied = None
if item.writelocked:
# we don't contact the repository, so our only information is what
# is in the working copy. 'K' means we have one and it matches the
@@ -351,6 +394,11 @@ class State:
item.writelocked = 'K'
elif item.writelocked == 'O':
item.writelocked = None
+ item.moved_from = None
+ item.moved_to = None
+ if path == '':
+ item.switched = None
+ item.treeconflict = None
def old_tree(self):
"Return an old-style tree (for compatibility purposes)."
@@ -362,9 +410,8 @@ class State:
if 0:
check = tree.as_state()
if self != check:
- import pprint
- pprint.pprint(self.desc)
- pprint.pprint(check.desc)
+ logger.warn(pprint.pformat(self.desc))
+ logger.warn(pprint.pformat(check.desc))
# STATE -> TREE -> STATE is lossy.
# In many cases, TREE -> STATE -> TREE is not.
# Even though our conversion from a TREE has lost some information, we
@@ -396,21 +443,43 @@ class State:
return None
desc = { }
+ last = None
for line in lines:
if line.startswith('DBG:'):
continue
- # Quit when we hit an externals status announcement.
- ### someday we can fix the externals tests to expect the additional
- ### flood of externals status data.
- if line.startswith('Performing'):
- break
-
match = _re_parse_status.search(line)
if not match or match.group(10) == '-':
+
+ ex_match = _re_parse_status_ex.search(line)
+
+ if ex_match:
+ if ex_match.group('moved_from'):
+ path = ex_match.group('moved_from')
+ last.tweak(moved_from = to_relpath(path))
+ elif ex_match.group('moved_to'):
+ path = ex_match.group('moved_to')
+ last.tweak(moved_to = to_relpath(path))
+ elif ex_match.group('swapped_with'):
+ path = ex_match.group('swapped_with')
+ last.tweak(moved_to = to_relpath(path))
+ last.tweak(moved_from = to_relpath(path))
+
+ # Parse TC description?
+
# ignore non-matching lines, or items that only exist on repos
continue
+ prev_status = None
+ prev_treeconflict = None
+
+ path = to_relpath(match.group('path'))
+ if path == '.':
+ path = ''
+ if path in desc:
+ prev_status = desc[path].status
+ prev_treeconflict = desc[path].treeconflict
+
item = StateItem(status=match.group(1),
locked=not_space(match.group(2)),
copied=not_space(match.group(3)),
@@ -418,8 +487,11 @@ class State:
writelocked=not_space(match.group(5)),
treeconflict=not_space(match.group(6)),
wc_rev=not_space(match.group('wc_rev')),
+ prev_status=prev_status,
+ prev_treeconflict =prev_treeconflict
)
- desc[to_relpath(match.group('path'))] = item
+ desc[path] = item
+ last = item
return cls('', desc)
@@ -434,7 +506,8 @@ class State:
match = _re_parse_skipped.search(line)
if match:
- desc[to_relpath(match.group(1))] = StateItem()
+ desc[to_relpath(match.group(2))] = StateItem(
+ verb=(match.group(1).strip(':')))
return cls('', desc)
@@ -473,12 +546,38 @@ class State:
treeconflict = match.group(3)
else:
treeconflict = None
- desc[to_relpath(match.group(4))] = StateItem(status=match.group(1),
- treeconflict=treeconflict)
+ path = to_relpath(match.group(4))
+ prev_status = None
+ prev_verb = None
+ prev_treeconflict = None
+
+ if path in desc:
+ prev_status = desc[path].status
+ prev_verb = desc[path].verb
+ prev_treeconflict = desc[path].treeconflict
+
+ desc[path] = StateItem(status=match.group(1),
+ treeconflict=treeconflict,
+ prev_status=prev_status,
+ prev_verb=prev_verb,
+ prev_treeconflict=prev_treeconflict)
else:
match = re_extra.search(line)
if match:
- desc[to_relpath(match.group(2))] = StateItem(verb=match.group(1))
+ path = to_relpath(match.group(2))
+ prev_status = None
+ prev_verb = None
+ prev_treeconflict = None
+
+ if path in desc:
+ prev_status = desc[path].status
+ prev_verb = desc[path].verb
+ prev_treeconflict = desc[path].treeconflict
+
+ desc[path] = StateItem(verb=match.group(1),
+ prev_status=prev_status,
+ prev_verb=prev_verb,
+ prev_treeconflict=prev_treeconflict)
return cls('', desc)
@@ -569,21 +668,14 @@ class State:
desc = { }
dot_svn = svntest.main.get_admin_name()
- for dirpath in svntest.main.run_entriesdump_subdirs(base):
-
- if base == '.' and dirpath != '.':
- dirpath = '.' + os.path.sep + dirpath
+ dump_data = svntest.main.run_entriesdump_tree(base)
- entries = svntest.main.run_entriesdump(dirpath)
- if entries is None:
- continue
+ if not dump_data:
+ # Probably 'svn status' run on an actual only node
+ # ### Improve!
+ return cls('', desc)
- if dirpath == '.':
- parent = ''
- elif dirpath.startswith('.' + os.sep):
- parent = to_relpath(dirpath[2:])
- else:
- parent = to_relpath(dirpath)
+ for parent, entries in sorted(dump_data.items()):
parent_url = entries[''].url
@@ -596,6 +688,9 @@ class State:
# entries that are ABSENT don't show up in status
if entry.absent:
continue
+ # entries that are User Excluded don't show up in status
+ if entry.depth == -1:
+ continue
if name and entry.kind == 2:
# stub subdirectory. leave a "missing" StateItem in here. note
# that we can't put the status as "! " because that gets tweaked
@@ -621,6 +716,9 @@ class State:
if implied_url and implied_url != entry.url:
item.switched = 'S'
+ if entry.file_external:
+ item.switched = 'X'
+
return cls('', desc)
@@ -634,9 +732,10 @@ class StateItem:
def __init__(self, contents=None, props=None,
status=None, verb=None, wc_rev=None,
- entry_rev=None, entry_status=None,
+ entry_rev=None, entry_status=None, entry_copied=None,
locked=None, copied=None, switched=None, writelocked=None,
- treeconflict=None):
+ treeconflict=None, moved_from=None, moved_to=None,
+ prev_status=None, prev_verb=None, prev_treeconflict=None):
# provide an empty prop dict if it wasn't provided
if props is None:
props = { }
@@ -653,22 +752,29 @@ class StateItem:
self.props = props
# A two-character string from the first two columns of 'svn status'.
self.status = status
+ self.prev_status = prev_status
# The action word such as 'Adding' printed by commands like 'svn update'.
self.verb = verb
+ self.prev_verb = prev_verb
# The base revision number of the node in the WC, as a string.
self.wc_rev = wc_rev
# These will be set when we expect the wc_rev/status to differ from those
# found in the entries code.
self.entry_rev = entry_rev
self.entry_status = entry_status
+ self.entry_copied = entry_copied
# For the following attributes, the value is the status character of that
# field from 'svn status', except using value None instead of status ' '.
self.locked = locked
self.copied = copied
self.switched = switched
self.writelocked = writelocked
- # Value 'C' or ' ', or None as an expected status meaning 'do not check'.
+ # Value 'C', 'A', 'D' or ' ', or None as an expected status meaning 'do not check'.
self.treeconflict = treeconflict
+ self.prev_treeconflict = prev_treeconflict
+ # Relative paths to the move locations
+ self.moved_from = moved_from
+ self.moved_to = moved_to
def copy(self):
"Make a deep copy of self."
@@ -688,15 +794,14 @@ class StateItem:
if not isinstance(other, StateItem):
return False
v_self = dict([(k, v) for k, v in vars(self).items()
- if not k.startswith('_')])
+ if not k.startswith('_') and not k.startswith('entry_')])
v_other = dict([(k, v) for k, v in vars(other).items()
- if not k.startswith('_')])
- if self.treeconflict is None:
- v_other = v_other.copy()
- v_other['treeconflict'] = None
- if other.treeconflict is None:
- v_self = v_self.copy()
- v_self['treeconflict'] = None
+ if not k.startswith('_') and not k.startswith('entry_')])
+
+ if self.wc_rev == '0' and self.status == 'A ':
+ v_self['wc_rev'] = '-'
+ if other.wc_rev == '0' and other.status == 'A ':
+ v_other['wc_rev'] = '-'
return v_self == v_other
def __ne__(self, other):
@@ -706,8 +811,12 @@ class StateItem:
atts = { }
if self.status is not None:
atts['status'] = self.status
+ if self.prev_status is not None:
+ atts['prev_status'] = self.prev_status
if self.verb is not None:
atts['verb'] = self.verb
+ if self.prev_verb is not None:
+ atts['prev_verb'] = self.prev_verb
if self.wc_rev is not None:
atts['wc_rev'] = self.wc_rev
if self.locked is not None:
@@ -720,6 +829,12 @@ class StateItem:
atts['writelocked'] = self.writelocked
if self.treeconflict is not None:
atts['treeconflict'] = self.treeconflict
+ if self.prev_treeconflict is not None:
+ atts['prev_treeconflict'] = self.prev_treeconflict
+ if self.moved_from is not None:
+ atts['moved_from'] = self.moved_from
+ if self.moved_to is not None:
+ atts['moved_to'] = self.moved_to
return (os.path.normpath(path), self.contents, self.props, atts)
@@ -817,9 +932,12 @@ def repos_join(base, path):
"""Join two repos paths. This generally works for URLs too."""
if base == '':
return path
- if path == '':
+ elif path == '':
return base
- return base + '/' + path
+ elif base[len(base)-1:] == '/':
+ return base + path
+ else:
+ return base + '/' + path
def svn_uri_quote(url):
@@ -876,6 +994,24 @@ def text_base_path(file_path):
raise svntest.Failure("No pristine text for " + relpath)
+def sqlite_stmt(wc_root_path, stmt):
+ """Execute STMT on the SQLite wc.db in WC_ROOT_PATH and return the
+ results."""
+
+ db = open_wc_db(wc_root_path)[0]
+ c = db.cursor()
+ c.execute(stmt)
+ return c.fetchall()
+
+def sqlite_exec(wc_root_path, stmt):
+ """Execute STMT on the SQLite wc.db in WC_ROOT_PATH and return the
+ results."""
+
+ db = open_wc_db(wc_root_path)[0]
+ c = db.cursor()
+ c.execute(stmt)
+ db.commit()
+
# ------------
### probably toss these at some point. or major rework. or something.
@@ -894,21 +1030,29 @@ def display_nodes(label, path, expected, actual):
'Display two nodes, expected and actual.'
expected = item_to_node(path, expected)
actual = item_to_node(path, actual)
- print("=============================================================")
- print("Expected '%s' and actual '%s' in %s tree are different!"
- % (expected.name, actual.name, label))
- print("=============================================================")
- print("EXPECTED NODE TO BE:")
- print("=============================================================")
- expected.pprint()
- print("=============================================================")
- print("ACTUAL NODE FOUND:")
- print("=============================================================")
- actual.pprint()
+
+ o = StringIO()
+ o.write("=============================================================\n")
+ o.write("Expected '%s' and actual '%s' in %s tree are different!\n"
+ % (expected.name, actual.name, label))
+ o.write("=============================================================\n")
+ o.write("EXPECTED NODE TO BE:\n")
+ o.write("=============================================================\n")
+ expected.pprint(o)
+ o.write("=============================================================\n")
+ o.write("ACTUAL NODE FOUND:\n")
+ o.write("=============================================================\n")
+ actual.pprint(o)
+
+ logger.warn(o.getvalue())
+ o.close()
### yanked from tree.py
def default_singleton_handler(description, path, item):
node = item_to_node(path, item)
- print("Couldn't find node '%s' in %s tree" % (node.name, description))
- node.pprint()
+ logger.warn("Couldn't find node '%s' in %s tree" % (node.name, description))
+ o = StringIO()
+ node.pprint(o)
+ logger.warn(o.getvalue())
+ o.close()
raise svntest.tree.SVNTreeUnequal
diff --git a/subversion/tests/cmdline/switch_tests.py b/subversion/tests/cmdline/switch_tests.py
index e18c23f..3f1e7ab 100755
--- a/subversion/tests/cmdline/switch_tests.py
+++ b/subversion/tests/cmdline/switch_tests.py
@@ -29,7 +29,7 @@ import shutil, re, os
# Our testing module
import svntest
-from svntest import verify, actions, main
+from svntest import verify, actions, main, deeptrees
# (abbreviation)
Skip = svntest.testcase.Skip_deco
@@ -284,14 +284,14 @@ def full_update(sbox):
commit_routine_switching(wc_backup, 0)
# Some convenient path variables
- iota_path = os.path.join(wc_dir, 'iota')
- gamma_path = os.path.join(wc_dir, 'A', 'D', 'gamma')
- Bpi_path = os.path.join(wc_dir, 'A', 'B', 'pi')
- BZ_path = os.path.join(wc_dir, 'A', 'B', 'Z')
- Bzeta_path = os.path.join(wc_dir, 'A', 'B', 'Z', 'zeta')
- Gpi_path = os.path.join(wc_dir, 'A', 'D', 'G', 'pi')
- GZ_path = os.path.join(wc_dir, 'A', 'D', 'G', 'Z')
- Gzeta_path = os.path.join(wc_dir, 'A', 'D', 'G', 'Z', 'zeta')
+ iota_path = sbox.ospath('iota')
+ gamma_path = sbox.ospath('A/D/gamma')
+ Bpi_path = sbox.ospath('A/B/pi')
+ BZ_path = sbox.ospath('A/B/Z')
+ Bzeta_path = sbox.ospath('A/B/Z/zeta')
+ Gpi_path = sbox.ospath('A/D/G/pi')
+ GZ_path = sbox.ospath('A/D/G/Z')
+ Gzeta_path = sbox.ospath('A/D/G/Z/zeta')
# Create expected output tree for an update of wc_backup.
expected_output = svntest.wc.State(wc_dir, {
@@ -352,12 +352,12 @@ def full_rev_update(sbox):
svntest.main.run_svn(None, 'up', wc_dir)
# Some convenient path variables
- iota_path = os.path.join(wc_dir, 'iota')
- gamma_path = os.path.join(wc_dir, 'A', 'D', 'gamma')
- Bpi_path = os.path.join(wc_dir, 'A', 'B', 'pi')
- BZ_path = os.path.join(wc_dir, 'A', 'B', 'Z')
- Gpi_path = os.path.join(wc_dir, 'A', 'D', 'G', 'pi')
- GZ_path = os.path.join(wc_dir, 'A', 'D', 'G', 'Z')
+ iota_path = sbox.ospath('iota')
+ gamma_path = sbox.ospath('A/D/gamma')
+ Bpi_path = sbox.ospath('A/B/pi')
+ BZ_path = sbox.ospath('A/B/Z')
+ Gpi_path = sbox.ospath('A/D/G/pi')
+ GZ_path = sbox.ospath('A/D/G/Z')
# Now, reverse update, back to the pre-commit state.
expected_output = svntest.wc.State(wc_dir, {
@@ -403,8 +403,8 @@ def update_switched_things(sbox):
commit_routine_switching(wc_backup, 0)
# Some convenient path variables
- iota_path = os.path.join(wc_dir, 'iota')
- B_path = os.path.join(wc_dir, 'A', 'B')
+ iota_path = sbox.ospath('iota')
+ B_path = sbox.ospath('A/B')
# Create expected output tree for an update of wc_backup.
expected_output = svntest.wc.State(wc_dir, {
@@ -459,8 +459,8 @@ def rev_update_switched_things(sbox):
commit_routine_switching(wc_dir, 0)
# Some convenient path variables
- iota_path = os.path.join(wc_dir, 'iota')
- B_path = os.path.join(wc_dir, 'A', 'B')
+ iota_path = sbox.ospath('iota')
+ B_path = sbox.ospath('A/B')
# Update to HEAD (tested elsewhere)
svntest.main.run_svn(None, 'up', wc_dir)
@@ -515,7 +515,7 @@ def log_switched_file(sbox):
do_routine_switching(wc_dir, sbox.repo_url, 0)
# edit and commit switched file 'iota'
- iota_path = os.path.join(wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
svntest.main.run_svn(None, 'ps', 'x', 'x', iota_path)
svntest.main.run_svn(None,
'ci', '-m',
@@ -537,7 +537,7 @@ def delete_subdir(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, 'A')
+ A_path = sbox.ospath('A')
A_url = sbox.repo_url + '/A'
A2_url = sbox.repo_url + '/A2'
A2_B_F_url = sbox.repo_url + '/A2/B/F'
@@ -577,7 +577,7 @@ def file_dir_file(sbox):
sbox.build(read_only = True)
wc_dir = sbox.wc_dir
- file_path = os.path.join(wc_dir, 'iota')
+ file_path = sbox.ospath('iota')
file_url = sbox.repo_url + '/iota'
dir_url = sbox.repo_url + '/A/C'
@@ -586,6 +586,11 @@ def file_dir_file(sbox):
if not os.path.isdir(file_path):
raise svntest.Failure
+ # The reason the following switch currently fails is that the node
+ # is determined to be a 'root', because it is switched against its parent.
+ # In this specific case the switch editor is designed to be rooted on the node
+ # itself instead of its ancestor. If you would use sbox.ospath('A') for
+ # file_path the switch works both ways.
svntest.actions.run_and_verify_svn(None, None, [], 'switch',
'--ignore-ancestry', file_url, file_path)
if not os.path.isfile(file_path):
@@ -672,7 +677,7 @@ def failed_anchor_is_target(sbox):
'mkdir', '-m', 'log msg', G_psi_url)
# Modify the file 'H/psi' locally.
- H_path = os.path.join(wc_dir, 'A', 'D', 'H')
+ H_path = sbox.ospath('A/D/H')
psi_path = os.path.join(H_path, 'psi')
svntest.main.file_append(psi_path, "more text")
@@ -718,8 +723,8 @@ def bad_intermediate_urls(sbox):
wc_dir = sbox.wc_dir
url = sbox.repo_url
- A = os.path.join(wc_dir, 'A')
- A_Z = os.path.join(wc_dir, 'A', 'Z')
+ A = sbox.ospath('A')
+ A_Z = sbox.ospath('A/Z')
url_A_C = url + '/A/C'
url_A_C_A = url + '/A/C/A'
url_A_C_A_Z = url + '/A/C/A/Z'
@@ -822,8 +827,8 @@ def obstructed_switch(sbox):
wc_dir = sbox.wc_dir
url = sbox.repo_url
- A_B_E = os.path.join(wc_dir, 'A', 'B', 'E')
- A_B_E_alpha = os.path.join(wc_dir, 'A', 'B', 'E', 'alpha')
+ A_B_E = sbox.ospath('A/B/E')
+ A_B_E_alpha = sbox.ospath('A/B/E/alpha')
url_A_B_E = url + '/A/B/E'
url_A_B_Esave = url + '/A/B/Esave'
@@ -886,7 +891,7 @@ def obstructed_switch(sbox):
# svn info A/B/E/alpha
expected_stdout = verify.RegexOutput(
- ".*local unversioned, incoming add upon switch",
+ ".*local file unversioned, incoming file add upon switch",
match_all=False)
actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'info',
A_B_E_alpha)
@@ -899,7 +904,7 @@ def commit_mods_below_switch(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- C_path = os.path.join(wc_dir, 'A', 'C')
+ C_path = sbox.ospath('A/C')
B_url = sbox.repo_url + '/A/B'
expected_output = svntest.wc.State(wc_dir, {
'A/C/E' : Item(status='A '),
@@ -932,7 +937,7 @@ def commit_mods_below_switch(sbox):
None, None, None, None, None,
False, '--ignore-ancestry')
- D_path = os.path.join(wc_dir, 'A', 'D')
+ D_path = sbox.ospath('A/D')
svntest.actions.run_and_verify_svn(None, None, [],
'propset', 'x', 'x', C_path, D_path)
@@ -974,7 +979,7 @@ def refresh_read_only_attribute(sbox):
url, branch_url)
# Set the svn:needs-lock property on a file from the "trunk".
- A_path = os.path.join(wc_dir, 'A')
+ A_path = sbox.ospath('A')
mu_path = os.path.join(A_path, 'mu')
svntest.actions.run_and_verify_svn(None, None, [],
'ps', 'svn:needs-lock', '1', mu_path)
@@ -1033,7 +1038,7 @@ def switch_change_repos_root(sbox):
other_repo_url = other_repo_url + "_bogus"
other_A_url = other_repo_url + "/A"
- A_wc_dir = os.path.join(wc_dir, "A")
+ A_wc_dir = sbox.ospath('A')
# Test 1: A switch that changes to a non-existing repo shouldn't work.
expected_err = ".*Unable to open repository.*|.*Could not open.*|"\
@@ -1064,22 +1069,22 @@ def forced_switch(sbox):
sbox.build(read_only = True)
# Dir obstruction
- G_path = os.path.join(sbox.wc_dir, 'A', 'B', 'F', 'G')
+ G_path = sbox.ospath('A/B/F/G')
os.mkdir(G_path)
# Faux file obstructions
- shutil.copyfile(os.path.join(sbox.wc_dir, 'A', 'D', 'gamma'),
- os.path.join(sbox.wc_dir, 'A', 'B', 'F', 'gamma'))
- shutil.copyfile(os.path.join(sbox.wc_dir, 'A', 'D', 'G', 'tau'),
- os.path.join(sbox.wc_dir, 'A', 'B', 'F', 'G', 'tau'))
+ shutil.copyfile(sbox.ospath('A/D/gamma'),
+ sbox.ospath('A/B/F/gamma'))
+ shutil.copyfile(sbox.ospath('A/D/G/tau'),
+ sbox.ospath('A/B/F/G/tau'))
# Real file obstruction
- pi_path = os.path.join(sbox.wc_dir, 'A', 'B', 'F', 'G', 'pi')
+ pi_path = sbox.ospath('A/B/F/G/pi')
svntest.main.file_write(pi_path,
"This is the OBSTRUCTING file 'pi'.\n")
# Non-obstructing dir and file
- I_path = os.path.join(sbox.wc_dir, 'A', 'B', 'F', 'I')
+ I_path = sbox.ospath('A/B/F/I')
os.mkdir(I_path)
upsilon_path = os.path.join(G_path, 'upsilon')
svntest.main.file_write(upsilon_path,
@@ -1126,7 +1131,7 @@ def forced_switch(sbox):
})
# Do the switch and check the results in three ways.
- F_path = os.path.join(sbox.wc_dir, 'A', 'B', 'F')
+ F_path = sbox.ospath('A/B/F')
AD_url = sbox.repo_url + '/A/D'
svntest.actions.run_and_verify_switch(sbox.wc_dir, F_path, AD_url,
expected_output,
@@ -1186,12 +1191,12 @@ def forced_switch_failures(sbox):
wc_dir = sbox.wc_dir
url = sbox.repo_url
- A_B_F = os.path.join(wc_dir, 'A', 'B', 'F')
- A_B_F_pi = os.path.join(wc_dir, 'A', 'B', 'F', 'pi')
- A_C = os.path.join(wc_dir, 'A', 'C')
- A_C_H = os.path.join(wc_dir, 'A', 'C', 'H')
- A_D_G = os.path.join(wc_dir, 'A', 'D', 'G')
- A_D_G_I = os.path.join(wc_dir, 'A', 'D', 'G', 'I')
+ A_B_F = sbox.ospath('A/B/F')
+ A_B_F_pi = sbox.ospath('A/B/F/pi')
+ A_C = sbox.ospath('A/C')
+ A_C_H = sbox.ospath('A/C/H')
+ A_D_G = sbox.ospath('A/D/G')
+ A_D_G_I = sbox.ospath('A/D/G/I')
url_A_D = url + '/A/D'
url_A_D_G = url + '/A/D/G'
url_A_D_H = url + '/A/D/H'
@@ -1280,7 +1285,7 @@ def forced_switch_failures(sbox):
# svn info A/B/F/pi
expected_stdout = verify.ExpectedOutput(
- 'Tree conflict: local unversioned, incoming add upon switch\n',
+ 'Tree conflict: local file unversioned, incoming file add upon switch\n',
match_all=False)
actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'info',
@@ -1387,7 +1392,7 @@ def forced_switch_failures(sbox):
expected_status.tweak('A/B/F/pi', 'A/C/H', treeconflict=None)
expected_status.tweak('A/D/G', switched='S')
- svntest.main.run_svn(None, 'revert', '-R', os.path.join(wc_dir, 'A/C/H'))
+ svntest.main.run_svn(None, 'revert', '-R', sbox.ospath('A/C/H'))
actions.run_and_verify_update(wc_dir, expected_output, expected_disk,
expected_status, None, None, None, None, None, False, wc_dir)
@@ -1398,25 +1403,25 @@ def switch_with_obstructing_local_adds(sbox):
sbox.build(read_only = True)
# Dir obstruction scheduled for addition without history.
- G_path = os.path.join(sbox.wc_dir, 'A', 'B', 'F', 'G')
+ G_path = sbox.ospath('A/B/F/G')
os.mkdir(G_path)
# File obstructions scheduled for addition without history.
# Contents identical to additions from switch.
- gamma_copy_path = os.path.join(sbox.wc_dir, 'A', 'B', 'F', 'gamma')
- shutil.copyfile(os.path.join(sbox.wc_dir, 'A', 'D', 'gamma'),
+ gamma_copy_path = sbox.ospath('A/B/F/gamma')
+ shutil.copyfile(sbox.ospath('A/D/gamma'),
gamma_copy_path)
- shutil.copyfile(os.path.join(sbox.wc_dir, 'A', 'D', 'G', 'tau'),
- os.path.join(sbox.wc_dir, 'A', 'B', 'F', 'G', 'tau'))
+ shutil.copyfile(sbox.ospath('A/D/G/tau'),
+ sbox.ospath('A/B/F/G/tau'))
# File obstruction scheduled for addition without history.
# Contents conflict with addition from switch.
- pi_path = os.path.join(sbox.wc_dir, 'A', 'B', 'F', 'G', 'pi')
+ pi_path = sbox.ospath('A/B/F/G/pi')
svntest.main.file_write(pi_path,
"This is the OBSTRUCTING file 'pi'.\n")
# Non-obstructing dir and file scheduled for addition without history.
- I_path = os.path.join(sbox.wc_dir, 'A', 'B', 'F', 'I')
+ I_path = sbox.ospath('A/B/F/I')
os.mkdir(I_path)
upsilon_path = os.path.join(G_path, 'upsilon')
svntest.main.file_write(upsilon_path,
@@ -1458,22 +1463,22 @@ def switch_with_obstructing_local_adds(sbox):
expected_status.add({
'A/B/F/gamma' : Item(status='R ', treeconflict='C', wc_rev='1'),
'A/B/F/G' : Item(status='R ', treeconflict='C', wc_rev='1'),
- 'A/B/F/G/pi' : Item(status='A ', wc_rev='-'),
- 'A/B/F/G/tau' : Item(status='A ', wc_rev='-'),
- 'A/B/F/G/upsilon' : Item(status='A ', wc_rev='-'),
+ 'A/B/F/G/pi' : Item(status='A ', wc_rev='-', entry_status='R ', entry_rev='1'),
+ 'A/B/F/G/tau' : Item(status='A ', wc_rev='-', entry_status='R ', entry_rev='1'),
+ 'A/B/F/G/upsilon' : Item(status='A ', wc_rev='-', entry_rev='0'),
'A/B/F/G/rho' : Item(status='D ', wc_rev='1'),
'A/B/F/H' : Item(status=' ', wc_rev='1'),
'A/B/F/H/chi' : Item(status=' ', wc_rev='1'),
'A/B/F/H/omega' : Item(status=' ', wc_rev='1'),
'A/B/F/H/psi' : Item(status=' ', wc_rev='1'),
- 'A/B/F/I' : Item(status='A ', wc_rev='-'),
+ 'A/B/F/I' : Item(status='A ', wc_rev='-', entry_rev='0'),
})
# "Extra" files that we expect to result from the conflicts.
extra_files = ['pi\.r0', 'pi\.r1', 'pi\.mine']
# Do the switch and check the results in three ways.
- F_path = os.path.join(sbox.wc_dir, 'A', 'B', 'F')
+ F_path = sbox.ospath('A/B/F')
D_url = sbox.repo_url + '/A/D'
svntest.actions.run_and_verify_switch(sbox.wc_dir, F_path, D_url,
@@ -1492,9 +1497,9 @@ def switch_scheduled_add(sbox):
sbox.build(read_only = True)
wc_dir = sbox.wc_dir
- file_path = os.path.join(wc_dir, 'stub_file')
+ file_path = sbox.ospath('stub_file')
switch_url = sbox.repo_url + '/iota'
- nodo_path = os.path.join(wc_dir, 'nodo')
+ nodo_path = sbox.ospath('nodo')
svntest.main.file_append(file_path, "")
svntest.actions.run_and_verify_svn(None, None, [],
@@ -1524,20 +1529,20 @@ def mergeinfo_switch_elision(sbox):
wc_dir = sbox.wc_dir
# Some paths we'll care about
- lambda_path = os.path.join(wc_dir, "A", "B_COPY_1", "lambda")
- B_COPY_1_path = os.path.join(wc_dir, "A", "B_COPY_1")
- B_COPY_2_path = os.path.join(wc_dir, "A", "B_COPY_2")
- E_COPY_2_path = os.path.join(wc_dir, "A", "B_COPY_2", "E")
- alpha_path = os.path.join(wc_dir, "A", "B", "E", "alpha")
- beta_path = os.path.join(wc_dir, "A", "B", "E", "beta")
+ lambda_path = sbox.ospath('A/B_COPY_1/lambda')
+ B_COPY_1_path = sbox.ospath('A/B_COPY_1')
+ B_COPY_2_path = sbox.ospath('A/B_COPY_2')
+ E_COPY_2_path = sbox.ospath('A/B_COPY_2/E')
+ alpha_path = sbox.ospath('A/B/E/alpha')
+ beta_path = sbox.ospath('A/B/E/beta')
# Make branches A/B_COPY_1 and A/B_COPY_2
expected_stdout = verify.UnorderedOutput([
- "A " + os.path.join(wc_dir, "A", "B_COPY_1", "lambda") + "\n",
- "A " + os.path.join(wc_dir, "A", "B_COPY_1", "E") + "\n",
- "A " + os.path.join(wc_dir, "A", "B_COPY_1", "E", "alpha") + "\n",
- "A " + os.path.join(wc_dir, "A", "B_COPY_1", "E", "beta") + "\n",
- "A " + os.path.join(wc_dir, "A", "B_COPY_1", "F") + "\n",
+ "A " + sbox.ospath('A/B_COPY_1/lambda') + "\n",
+ "A " + sbox.ospath('A/B_COPY_1/E') + "\n",
+ "A " + sbox.ospath('A/B_COPY_1/E/alpha') + "\n",
+ "A " + sbox.ospath('A/B_COPY_1/E/beta') + "\n",
+ "A " + sbox.ospath('A/B_COPY_1/F') + "\n",
"Checked out revision 1.\n",
"A " + B_COPY_1_path + "\n",
])
@@ -1545,11 +1550,11 @@ def mergeinfo_switch_elision(sbox):
sbox.repo_url + "/A/B", B_COPY_1_path)
expected_stdout = verify.UnorderedOutput([
- "A " + os.path.join(wc_dir, "A", "B_COPY_2", "lambda") + "\n",
- "A " + os.path.join(wc_dir, "A", "B_COPY_2", "E") + "\n",
- "A " + os.path.join(wc_dir, "A", "B_COPY_2", "E", "alpha") + "\n",
- "A " + os.path.join(wc_dir, "A", "B_COPY_2", "E", "beta") + "\n",
- "A " + os.path.join(wc_dir, "A", "B_COPY_2", "F") + "\n",
+ "A " + sbox.ospath('A/B_COPY_2/lambda') + "\n",
+ "A " + sbox.ospath('A/B_COPY_2/E') + "\n",
+ "A " + sbox.ospath('A/B_COPY_2/E/alpha') + "\n",
+ "A " + sbox.ospath('A/B_COPY_2/E/beta') + "\n",
+ "A " + sbox.ospath('A/B_COPY_2/F') + "\n",
"Checked out revision 1.\n",
"A " + B_COPY_2_path + "\n",
])
@@ -1795,7 +1800,7 @@ def switch_with_depth(sbox):
repo_url = sbox.repo_url
AD_url = repo_url + '/A/D'
AB_url = repo_url + '/A/B'
- AB_path = os.path.join(wc_dir, 'A', 'B')
+ AB_path = sbox.ospath('A/B')
# Set up expected results of 'switch --depth=empty'
expected_output = svntest.wc.State(wc_dir, {})
@@ -1968,15 +1973,15 @@ def switch_to_dir_with_peg_rev(sbox):
repo_url = sbox.repo_url
# prepare two dirs X and Y in rev. 2
- X_path = os.path.join(wc_dir, 'X')
- Y_path = os.path.join(wc_dir, 'Y')
+ X_path = sbox.ospath('X')
+ Y_path = sbox.ospath('Y')
svntest.main.run_svn(None, 'mkdir', X_path, Y_path)
svntest.main.run_svn(None, 'ci',
'-m', 'log message',
wc_dir)
# change tau in rev. 3
- ADG_path = os.path.join(wc_dir, 'A', 'D', 'G')
+ ADG_path = sbox.ospath('A/D/G')
tau_path = os.path.join(ADG_path, 'tau')
svntest.main.file_append(tau_path, "new line\n")
svntest.main.run_svn(None, 'ci',
@@ -2032,12 +2037,12 @@ def switch_urls_with_spaces(sbox):
repo_url = sbox.repo_url
# add file and directory with spaces in their names.
- XYZ_path = os.path.join(wc_dir, 'X Y Z')
- ABC_path = os.path.join(wc_dir, 'A B C')
+ XYZ_path = sbox.ospath('X Y Z')
+ ABC_path = sbox.ospath('A B C')
svntest.main.run_svn(None, 'mkdir', XYZ_path, ABC_path)
- tpm_path = os.path.join(wc_dir, 'tau pau mau')
- bbb_path = os.path.join(wc_dir, 'bar baz bal')
+ tpm_path = sbox.ospath('tau pau mau')
+ bbb_path = sbox.ospath('bar baz bal')
svntest.main.file_write(tpm_path, "This is the file 'tau pau mau'.\n")
svntest.main.file_write(bbb_path, "This is the file 'bar baz bal'.\n")
svntest.main.run_svn(None, 'add', tpm_path, bbb_path)
@@ -2105,21 +2110,21 @@ def switch_to_dir_with_peg_rev2(sbox):
repo_url = sbox.repo_url
# prepare dir X in rev. 2
- X_path = os.path.join(wc_dir, 'X')
+ X_path = sbox.ospath('X')
svntest.main.run_svn(None, 'mkdir', X_path)
svntest.main.run_svn(None, 'ci',
'-m', 'log message',
wc_dir)
# make a change in ADG in rev. 3
- tau_path = os.path.join(wc_dir, 'A', 'D', 'G', 'tau')
+ tau_path = sbox.ospath('A/D/G/tau')
svntest.main.file_append(tau_path, "extra line\n")
svntest.main.run_svn(None, 'ci', '-m', 'log message', wc_dir)
# Rename ADG to ADY in rev 4
svntest.main.run_svn(None, 'up', wc_dir)
- ADG_path = os.path.join(wc_dir, 'A', 'D', 'G')
- ADY_path = os.path.join(wc_dir, 'A', 'D', 'Y')
+ ADG_path = sbox.ospath('A/D/G')
+ ADY_path = sbox.ospath('A/D/Y')
svntest.main.run_svn(None, 'mv', ADG_path, ADY_path)
svntest.main.run_svn(None, 'ci',
'-m', 'log message',
@@ -2172,7 +2177,7 @@ def switch_to_root(sbox):
wc_dir = sbox.wc_dir
repo_url = sbox.repo_url
- ADG_path = os.path.join(wc_dir, 'A', 'D', 'G')
+ ADG_path = sbox.ospath('A/D/G')
# Test switch /A/D/G to /
AD_url = sbox.repo_url + '/A/D'
@@ -2208,7 +2213,7 @@ def switch_to_root(sbox):
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.remove('A/D/G/pi', 'A/D/G/rho', 'A/D/G/tau')
expected_status.add_state('A/D/G',
- svntest.actions.get_virginal_state(wc_dir, 1))
+ svntest.actions.get_virginal_state(wc_dir + '/A/D/G', 1))
expected_status.tweak('A/D/G', switched = 'S')
svntest.actions.run_and_verify_switch(wc_dir, ADG_path, sbox.repo_url,
expected_output,
@@ -2219,15 +2224,16 @@ def switch_to_root(sbox):
#----------------------------------------------------------------------
# Make sure that switch continue after deleting locally modified
-# directories, as it update and merge do.
+# directories, as update and merge do.
+@Issue(2505)
def tolerate_local_mods(sbox):
"tolerate deletion of a directory with local mods"
sbox.build()
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, 'A')
+ A_path = sbox.ospath('A')
L_path = os.path.join(A_path, 'L')
LM_path = os.path.join(L_path, 'local_mod')
A_url = sbox.repo_url + '/A'
@@ -2277,25 +2283,25 @@ def tolerate_local_mods(sbox):
# parent directory.
# convenience definitions
-leaf_edit = svntest.actions.deep_trees_leaf_edit
-tree_del = svntest.actions.deep_trees_tree_del
-leaf_del = svntest.actions.deep_trees_leaf_del
+leaf_edit = svntest.deeptrees.deep_trees_leaf_edit
+tree_del = svntest.deeptrees.deep_trees_tree_del
+leaf_del = svntest.deeptrees.deep_trees_leaf_del
-disk_after_leaf_edit = svntest.actions.deep_trees_after_leaf_edit
-disk_after_leaf_del = svntest.actions.deep_trees_after_leaf_del
-disk_after_tree_del = svntest.actions.deep_trees_after_tree_del
+disk_after_leaf_edit = svntest.deeptrees.deep_trees_after_leaf_edit
+disk_after_leaf_del = svntest.deeptrees.deep_trees_after_leaf_del
+disk_after_tree_del = svntest.deeptrees.deep_trees_after_tree_del
-disk_empty_dirs = svntest.actions.deep_trees_empty_dirs
+disk_empty_dirs = svntest.deeptrees.deep_trees_empty_dirs
-deep_trees_conflict_output = svntest.actions.deep_trees_conflict_output
+deep_trees_conflict_output = svntest.deeptrees.deep_trees_conflict_output
deep_trees_conflict_output_skipped = \
- svntest.actions.deep_trees_conflict_output_skipped
+ svntest.deeptrees.deep_trees_conflict_output_skipped
deep_trees_status_local_tree_del = \
- svntest.actions.deep_trees_status_local_tree_del
+ svntest.deeptrees.deep_trees_status_local_tree_del
deep_trees_status_local_leaf_edit = \
- svntest.actions.deep_trees_status_local_leaf_edit
+ svntest.deeptrees.deep_trees_status_local_leaf_edit
-DeepTreesTestCase = svntest.actions.DeepTreesTestCase
+DeepTreesTestCase = svntest.deeptrees.DeepTreesTestCase
j = os.path.join
@@ -2322,10 +2328,9 @@ def tree_conflicts_on_switch_1_1(sbox):
})
expected_disk = disk_empty_dirs.copy()
- if svntest.main.wc_is_singledb(sbox.wc_dir):
- expected_disk.remove('D/D1', 'DF/D1', 'DD/D1', 'DD/D1/D2',
- 'DDF/D1', 'DDF/D1/D2',
- 'DDD/D1', 'DDD/D1/D2', 'DDD/D1/D2/D3')
+ expected_disk.remove('D/D1', 'DF/D1', 'DD/D1', 'DD/D1/D2',
+ 'DDF/D1', 'DDF/D1/D2',
+ 'DDD/D1', 'DDD/D1/D2', 'DDD/D1/D2/D3')
# The files delta, epsilon, and zeta are incoming additions, but since
# they are all within locally deleted trees they should also be schedule
@@ -2344,43 +2349,43 @@ def tree_conflicts_on_switch_1_1(sbox):
expected_info = {
'F/alpha' : {
'Tree conflict' :
- '^local delete, incoming edit upon switch'
+ '^local file delete, incoming file edit upon switch'
+ ' Source left: .file.*/F/alpha@2'
+ ' Source right: .file.*/F/alpha@3$',
},
'DF/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon switch'
+ '^local dir delete, incoming dir edit upon switch'
+ ' Source left: .dir.*/DF/D1@2'
+ ' Source right: .dir.*/DF/D1@3$',
},
'DDF/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon switch'
+ '^local dir delete, incoming dir edit upon switch'
+ ' Source left: .dir.*/DDF/D1@2'
+ ' Source right: .dir.*/DDF/D1@3$',
},
'D/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon switch'
+ '^local dir delete, incoming dir edit upon switch'
+ ' Source left: .dir.*/D/D1@2'
+ ' Source right: .dir.*/D/D1@3$',
},
'DD/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon switch'
+ '^local dir delete, incoming dir edit upon switch'
+ ' Source left: .dir.*/DD/D1@2'
+ ' Source right: .dir.*/DD/D1@3$',
},
'DDD/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon switch'
+ '^local dir delete, incoming dir edit upon switch'
+ ' Source left: .dir.*/DDD/D1@2'
+ ' Source right: .dir.*/DDD/D1@3$',
},
}
- svntest.actions.deep_trees_run_tests_scheme_for_switch(sbox,
+ svntest.deeptrees.deep_trees_run_tests_scheme_for_switch(sbox,
[ DeepTreesTestCase("local_tree_del_incoming_leaf_edit",
tree_del,
leaf_edit,
@@ -2435,51 +2440,50 @@ def tree_conflicts_on_switch_1_2(sbox):
expected_disk.remove('D/D1',
'DD/D1/D2',
'DDD/D1/D2/D3')
- if svntest.main.wc_is_singledb(sbox.wc_dir):
- expected_disk.remove('DF/D1', 'DD/D1',
- 'DDF/D1', 'DDF/D1/D2',
- 'DDD/D1', 'DDD/D1/D2')
+ expected_disk.remove('DF/D1', 'DD/D1',
+ 'DDF/D1', 'DDF/D1/D2',
+ 'DDD/D1', 'DDD/D1/D2')
expected_info = {
'F/alpha' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local file delete, incoming file delete upon switch'
+ ' Source left: .file.*/F/alpha@2'
- + ' Source right: .none.*/F/alpha@3$',
+ + ' Source right: .none.*(/F/alpha@3)?$',
},
'DF/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon switch'
+ '^local dir delete, incoming dir edit upon switch'
+ ' Source left: .dir.*/DF/D1@2'
+ ' Source right: .dir.*/DF/D1@3$',
},
'DDF/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon switch'
+ '^local dir delete, incoming dir edit upon switch'
+ ' Source left: .dir.*/DDF/D1@2'
+ ' Source right: .dir.*/DDF/D1@3$',
},
'D/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local dir delete, incoming dir delete upon switch'
+ ' Source left: .dir.*/D/D1@2'
- + ' Source right: .none.*/D/D1@3$',
+ + ' Source right: .none.*(/D/D1@3)?$',
},
'DD/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon switch'
+ '^local dir delete, incoming dir edit upon switch'
+ ' Source left: .dir.*/DD/D1@2'
+ ' Source right: .dir.*/DD/D1@3$',
},
'DDD/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon switch'
+ '^local dir delete, incoming dir edit upon switch'
+ ' Source left: .dir.*/DDD/D1@2'
+ ' Source right: .dir.*/DDD/D1@3$',
},
}
- svntest.actions.deep_trees_run_tests_scheme_for_switch(sbox,
+ svntest.deeptrees.deep_trees_run_tests_scheme_for_switch(sbox,
[ DeepTreesTestCase("local_tree_del_incoming_leaf_del",
tree_del,
leaf_del,
@@ -2526,39 +2530,39 @@ def tree_conflicts_on_switch_2_1(sbox):
expected_info = {
'F/alpha' : {
'Tree conflict' :
- '^local edit, incoming delete upon switch'
+ '^local file edit, incoming file delete upon switch'
+ ' Source left: .file.*/F/alpha@2'
- + ' Source right: .none.*/F/alpha@3$',
+ + ' Source right: .none.*(/F/alpha@3)?$',
},
'DF/D1' : {
'Tree conflict' :
- '^local edit, incoming delete upon switch'
+ '^local dir edit, incoming dir delete upon switch'
+ ' Source left: .dir.*/DF/D1@2'
- + ' Source right: .none.*/DF/D1@3$',
+ + ' Source right: .none.*(/DF/D1@3)?$',
},
'DDF/D1' : {
'Tree conflict' :
- '^local edit, incoming delete upon switch'
+ '^local dir edit, incoming dir delete upon switch'
+ ' Source left: .dir.*/DDF/D1@2'
- + ' Source right: .none.*/DDF/D1@3$',
+ + ' Source right: .none.*(/DDF/D1@3)?$',
},
'D/D1' : {
'Tree conflict' :
- '^local edit, incoming delete upon switch'
+ '^local dir edit, incoming dir delete upon switch'
+ ' Source left: .dir.*/D/D1@2'
- + ' Source right: .none.*/D/D1@3$',
+ + ' Source right: .none.*(/D/D1@3)?$',
},
'DD/D1' : {
'Tree conflict' :
- '^local edit, incoming delete upon switch'
+ '^local dir edit, incoming dir delete upon switch'
+ ' Source left: .dir.*/DD/D1@2'
- + ' Source right: .none.*/DD/D1@3$',
+ + ' Source right: .none.*(/DD/D1@3)?$',
},
'DDD/D1' : {
'Tree conflict' :
- '^local edit, incoming delete upon switch'
+ '^local dir edit, incoming dir delete upon switch'
+ ' Source left: .dir.*/DDD/D1@2'
- + ' Source right: .none.*/DDD/D1@3$',
+ + ' Source right: .none.*(/DDD/D1@3)?$',
},
}
@@ -2567,7 +2571,7 @@ def tree_conflicts_on_switch_2_1(sbox):
### local-copy from its original revision. however, right now, we cannot
### denote that delta is a local-add rather than a child of that D/D1 copy.
### thus, it appears in the status output as a (M)odified child.
- svntest.actions.deep_trees_run_tests_scheme_for_switch(sbox,
+ svntest.deeptrees.deep_trees_run_tests_scheme_for_switch(sbox,
[ DeepTreesTestCase("local_leaf_edit_incoming_tree_del",
leaf_edit,
tree_del,
@@ -2589,7 +2593,7 @@ def tree_conflicts_on_switch_2_2(sbox):
expected_disk = disk_empty_dirs.copy()
- expected_status = svntest.actions.deep_trees_virginal_state.copy()
+ expected_status = svntest.deeptrees.deep_trees_virginal_state.copy()
expected_status.add({'' : Item(),
'F/alpha' : Item()})
expected_status.tweak(contents=None, status=' ', wc_rev=3)
@@ -2625,43 +2629,43 @@ def tree_conflicts_on_switch_2_2(sbox):
expected_info = {
'F/alpha' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local file delete, incoming file delete upon switch'
+ ' Source left: .file.*/F/alpha@2'
- + ' Source right: .none.*/F/alpha@3$',
+ + ' Source right: .none.*(/F/alpha@3)?$',
},
'DF/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local dir delete, incoming dir delete upon switch'
+ ' Source left: .dir.*/DF/D1@2'
- + ' Source right: .none.*/DF/D1@3$',
+ + ' Source right: .none.*(/DF/D1@3)?$',
},
'DDF/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local dir delete, incoming dir delete upon switch'
+ ' Source left: .dir.*/DDF/D1@2'
- + ' Source right: .none.*/DDF/D1@3$',
+ + ' Source right: .none.*(/DDF/D1@3)?$',
},
'D/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local dir delete, incoming dir delete upon switch'
+ ' Source left: .dir.*/D/D1@2'
- + ' Source right: .none.*/D/D1@3$',
+ + ' Source right: .none.*(/D/D1@3)?$',
},
'DD/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local dir delete, incoming dir delete upon switch'
+ ' Source left: .dir.*/DD/D1@2'
- + ' Source right: .none.*/DD/D1@3$',
+ + ' Source right: .none.*(/DD/D1@3)?$',
},
'DDD/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local dir delete, incoming dir delete upon switch'
+ ' Source left: .dir.*/DDD/D1@2'
- + ' Source right: .none.*/DDD/D1@3$',
+ + ' Source right: .none.*(/DDD/D1@3)?$',
},
}
- svntest.actions.deep_trees_run_tests_scheme_for_switch(sbox,
+ svntest.deeptrees.deep_trees_run_tests_scheme_for_switch(sbox,
[ DeepTreesTestCase("local_leaf_del_incoming_tree_del",
leaf_del,
tree_del,
@@ -2714,43 +2718,43 @@ def tree_conflicts_on_switch_3(sbox):
expected_info = {
'F/alpha' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local file delete, incoming file delete upon switch'
+ ' Source left: .file.*/F/alpha@2'
- + ' Source right: .none.*/F/alpha@3$',
+ + ' Source right: .none.*(/F/alpha@3)?$',
},
'DF/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local dir delete, incoming dir delete upon switch'
+ ' Source left: .dir.*/DF/D1@2'
- + ' Source right: .none.*/DF/D1@3$',
+ + ' Source right: .none.*(/DF/D1@3)?$',
},
'DDF/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local dir delete, incoming dir delete upon switch'
+ ' Source left: .dir.*/DDF/D1@2'
- + ' Source right: .none.*/DDF/D1@3$',
+ + ' Source right: .none.*(/DDF/D1@3)?$',
},
'D/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local dir delete, incoming dir delete upon switch'
+ ' Source left: .dir.*/D/D1@2'
- + ' Source right: .none.*/D/D1@3$',
+ + ' Source right: .none.*(/D/D1@3)?$',
},
'DD/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local dir delete, incoming dir delete upon switch'
+ ' Source left: .dir.*/DD/D1@2'
- + ' Source right: .none.*/DD/D1@3$',
+ + ' Source right: .none.*(/DD/D1@3)?$',
},
'DDD/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local dir delete, incoming dir delete upon switch'
+ ' Source left: .dir.*/DDD/D1@2'
- + ' Source right: .none.*/DDD/D1@3$',
+ + ' Source right: .none.*(/DDD/D1@3)?$',
},
}
- svntest.actions.deep_trees_run_tests_scheme_for_switch(sbox,
+ svntest.deeptrees.deep_trees_run_tests_scheme_for_switch(sbox,
[ DeepTreesTestCase("local_tree_del_incoming_tree_del",
tree_del,
tree_del,
@@ -2763,11 +2767,11 @@ def copy_with_switched_subdir(sbox):
"copy directory with switched subdir"
sbox.build()
wc_dir = sbox.wc_dir
- D = os.path.join(wc_dir, 'A/D')
+ D = sbox.ospath('A/D')
G = os.path.join(D, 'G')
E_url = sbox.repo_url + '/A/B/E'
- R = os.path.join(wc_dir, 'R')
+ R = sbox.ospath('R')
state = svntest.actions.get_virginal_state(wc_dir, 1)
@@ -2779,7 +2783,7 @@ def copy_with_switched_subdir(sbox):
'--ignore-ancestry', E_url, G)
state.tweak('A/D/G', switched='S')
- state.remove('A/D/G/pi', 'A/D/G/rho', 'A/D/G/tau');
+ state.remove('A/D/G/pi', 'A/D/G/rho', 'A/D/G/tau')
state.add({
'A/D/G/alpha' : Item(status=' ', wc_rev=1),
'A/D/G/beta' : Item(status=' ', wc_rev=1),
@@ -2807,7 +2811,7 @@ def copy_with_switched_subdir(sbox):
# Additional test, it should commit to R/G/alpha.
svntest.main.run_svn(None, 'up', wc_dir)
- svntest.main.file_append(os.path.join(wc_dir, 'R/G/alpha'), "apple")
+ svntest.main.file_append(sbox.ospath('R/G/alpha'), "apple")
svntest.main.run_svn(None, 'ci', '-m', 'Commit changed file', wc_dir)
# Checkout working copy to verify result
@@ -2836,8 +2840,8 @@ def up_to_old_rev_with_subtree_switched_to_root(sbox):
wc_dir = sbox.wc_dir
# Some paths we'll care about.
- A_path = os.path.join(wc_dir, 'A')
- branch_path = os.path.join(wc_dir, 'branch')
+ A_path = sbox.ospath('A')
+ branch_path = sbox.ospath('branch')
# Starting with a vanilla greek tree, create a branch of A, switch
# that branch to the root of the repository, then update the WC to
@@ -2902,6 +2906,69 @@ def different_node_kind(sbox):
switch_to_file(sbox, 'iota', 'A/C')
switch_to_file(sbox, 'A/D/gamma', 'A/D/G')
+@Issue(3332, 3333)
+def switch_to_spaces(sbox):
+ "switch to a directory with spaces in its name"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ repo_url = sbox.repo_url
+
+ # Paths are normalized in the command processing, so %20 is equivalent to ' '
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'cp', repo_url + '/A',
+ repo_url + '/A%20with space',
+ '-m', '')
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'mv', repo_url + '/A%20with space',
+ repo_url + '/A with%20more spaces',
+ '-m', '')
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 3)
+ expected_status.tweak('A', switched='S')
+ expected_status.tweak('', 'iota', wc_rev=1)
+
+ svntest.actions.run_and_verify_switch(sbox.wc_dir, sbox.ospath('A'),
+ repo_url + '/A%20with more%20spaces',
+ None, None, expected_status)
+
+def switch_across_replacement(sbox):
+ "switch across a node replacement"
+ sbox.build()
+ os.chdir(sbox.wc_dir)
+ sbox.wc_dir = ''
+
+ # replacement
+ sbox.simple_rm('A/mu')
+ sbox.simple_append('A/mu', "This is the file 'mu'.\n", truncate=True)
+ sbox.simple_add('A/mu')
+ sbox.simple_commit() # r2
+
+ # When 'switch' of a dir brings in a replacement of a child file with no
+ # textual difference and ignoring ancestry, the switch doesn't report any
+ # incoming change at all, (and so won't raise a tree conflict if there is
+ # a local mod). 'update' on the other hand does report the replacement
+ # as expected.
+
+ # This test FAILs when using a Subversion 1.0-1.7 svnserve.
+
+ expected_output = svntest.wc.State(sbox.wc_dir, {
+ 'A/mu' : Item(status='A ', prev_status='D '),
+ })
+ svntest.actions.run_and_verify_update(sbox.wc_dir,
+ expected_output, None, None,
+ None, None, None, None, None, False,
+ '-r1')
+ svntest.actions.run_and_verify_update(sbox.wc_dir,
+ expected_output, None, None,
+ None, None, None, None, None, False,
+ '-r2')
+ svntest.actions.run_and_verify_switch(sbox.wc_dir, sbox.ospath('A'), '^/A',
+ expected_output, None, None,
+ None, None, None, None, None, False,
+ '-r1')
+
########################################################################
# Run the tests
@@ -2942,6 +3009,8 @@ test_list = [ None,
copy_with_switched_subdir,
up_to_old_rev_with_subtree_switched_to_root,
different_node_kind,
+ switch_to_spaces,
+ switch_across_replacement,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/trans_tests.py b/subversion/tests/cmdline/trans_tests.py
index 2f333e6..3dd4fd4 100755
--- a/subversion/tests/cmdline/trans_tests.py
+++ b/subversion/tests/cmdline/trans_tests.py
@@ -25,7 +25,9 @@
######################################################################
# General modules
-import os, re
+import os, re, logging, sys
+
+logger = logging.getLogger()
# Our testing module
import svntest
@@ -92,13 +94,13 @@ def check_keywords(actual_kw, expected_kw, name):
"""A Helper function to compare two keyword lists"""
if len(actual_kw) != len(expected_kw):
- print("Keyword lists are different by size")
+ logger.warn("Keyword lists are different by size")
raise svntest.Failure
for i in range(0,len(actual_kw)):
if actual_kw[i] != expected_kw[i]:
- print('%s item %s, Expected: %s' % (name, i, expected_kw[i][:-1]))
- print('%s item %s, Got: %s' % (name, i, actual_kw[i][:-1]))
+ logger.warn('%s item %s, Expected: %s', name, i, expected_kw[i][:-1])
+ logger.warn('%s item %s, Got: %s', name, i, actual_kw[i][:-1])
raise svntest.Failure
def setup_working_copy(wc_dir, value_len):
@@ -304,7 +306,7 @@ def keywords_from_birth(sbox):
if not ((len(lines) == 1)
and (re.match("\$URL: (http|https|file|svn|svn\\+ssh)://",
lines[0]))):
- print("URL expansion failed for %s" % url_unexp_path)
+ logger.warn("URL expansion failed for %s", url_unexp_path)
raise svntest.Failure
fp.close()
@@ -314,7 +316,7 @@ def keywords_from_birth(sbox):
if not ((len(lines) == 1)
and (re.match("\$URL: (http|https|file|svn|svn\\+ssh)://",
lines[0]))):
- print("URL expansion failed for %s" % url_exp_path)
+ logger.warn("URL expansion failed for %s", url_exp_path)
raise svntest.Failure
fp.close()
@@ -323,7 +325,7 @@ def keywords_from_birth(sbox):
lines = fp.readlines()
if not ((len(lines) == 1)
and (re.match("\$Id: id_unexp", lines[0]))):
- print("Id expansion failed for %s" % id_exp_path)
+ logger.warn("Id expansion failed for %s", id_exp_path)
raise svntest.Failure
fp.close()
@@ -332,7 +334,7 @@ def keywords_from_birth(sbox):
lines = fp.readlines()
if not ((len(lines) == 1)
and (re.match("\$Id: id_exp", lines[0]))):
- print("Id expansion failed for %s" % id_exp_path)
+ logger.warn("Id expansion failed for %s", id_exp_path)
raise svntest.Failure
fp.close()
@@ -342,7 +344,7 @@ def keywords_from_birth(sbox):
if not ((len(lines) == 1)
and (re.match("\$Header: (https?|file|svn|svn\\+ssh)://.* jrandom",
lines[0]))):
- print("Header expansion failed for %s" % header_unexp_path)
+ logger.warn("Header expansion failed for %s", header_unexp_path)
raise svntest.Failure
fp.close()
@@ -352,7 +354,7 @@ def keywords_from_birth(sbox):
if not ((len(lines) == 1)
and (re.match("\$Header: (https?|file|svn|svn\\+ssh)://.* jrandom",
lines[0]))):
- print("Header expansion failed for %s" % header_exp_path)
+ logger.warn("Header expansion failed for %s", header_exp_path)
raise svntest.Failure
fp.close()
@@ -401,7 +403,7 @@ def keywords_from_birth(sbox):
lines = fp.readlines()
if not ((len(lines) == 1)
and (re.match("\$Id: .*id with space", lines[0]))):
- print("Id expansion failed for %s" % id_with_space_path)
+ logger.warn("Id expansion failed for %s", id_with_space_path)
raise svntest.Failure
fp.close()
@@ -411,7 +413,7 @@ def keywords_from_birth(sbox):
if not ((len(lines) == 1)
and (re.match("\$Id: .*id_exp with_\$_sign [^$]* jrandom \$",
lines[0]))):
- print("Id expansion failed for %s" % id_exp_with_dollar_path)
+ logger.warn("Id expansion failed for %s", id_exp_with_dollar_path)
raise svntest.Failure
fp.close()
@@ -627,7 +629,7 @@ def keyword_expanded_on_checkout(sbox):
if not ((len(lines) == 1)
and (re.match("\$URL: (http|https|file|svn|svn\\+ssh)://",
lines[0]))):
- print("URL expansion failed for %s" % other_url_path)
+ logger.warn("URL expansion failed for %s", other_url_path)
raise svntest.Failure
fp.close()
@@ -764,7 +766,7 @@ def propset_commit_checkout_nocrash(sbox):
mu_other_contents = open(mu_other_path).read()
if mu_other_contents != "This is the file 'mu'.\n$Rev: 3 $":
- print("'%s' does not have the expected contents" % mu_other_path)
+ logger.warn("'%s' does not have the expected contents", mu_other_path)
raise svntest.Failure
@@ -878,9 +880,79 @@ def props_only_file_update(sbox):
temps.remove('prop-base')
temps.remove('props')
if temps:
- print('Temporary files leftover: %s' % (', '.join(temps),))
+ logger.warn('Temporary files leftover: %s', (', '.join(temps),))
raise svntest.Failure
+@XFail()
+@Issues(4327)
+def autoprops_inconsistent_eol(sbox):
+ "able to handle inconsistent eols on add"
+
+ sbox.build(read_only = True)
+ wc_dir = sbox.wc_dir
+
+ text = 'line with NL\n' + \
+ 'line with CR\r' + \
+ 'line with CRLF\r\n' + \
+ 'line with LFCR (or is that not a line? ;-)\n\r'
+
+ # Compensate for python smartness
+ if sys.platform == 'win32':
+ expected_text = text.replace('\r\n', '\n')
+ else:
+ expected_text = text
+
+ sbox.simple_add_text(text, 'add.c')
+ sbox.simple_add_text(text, 'add-force.c')
+
+ svntest.actions.run_and_verify_svn(None, None, '.*inconsistent newlines.*',
+ 'ps', 'svn:eol-style', 'native',
+ sbox.ospath('add.c'))
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'ps', 'svn:eol-style', 'native', '--force',
+ sbox.ospath('add.c'))
+
+ expected_disk = svntest.main.greek_state.copy()
+
+ expected_disk.add({
+ 'add-force.c' : Item(contents=expected_text),
+ 'add.c' : Item(contents=expected_text),
+ })
+
+ # Verify that both add and add-force haven't been changed
+ svntest.actions.verify_disk(wc_dir, expected_disk)
+
+ sbox.simple_propset('svn:auto-props', '*.c = svn:eol-style=native', '')
+
+
+ svntest.main.file_write(sbox.ospath('auto.c'), text, mode='wb')
+
+ expected_output = ['A %s\n' % sbox.ospath('auto.c')]
+
+ # Fails with svn: E200009: File '.*auto.c' has inconsistent newlines
+ svntest.actions.run_and_verify_svn(None, expected_output,
+ [], 'add', sbox.ospath('auto.c'))
+
+@XFail()
+@Issues(4327)
+def autoprops_inconsistent_mime(sbox):
+ "able to handle inconsistent mime on add"
+
+ sbox.build(read_only = True)
+
+ sbox.simple_propset('svn:auto-props',
+ '*.c = svn:eol-style=native\n'
+ 'c.* = svn:mime-type=application/octet-stream', '')
+
+ sbox.simple_append('c.iota.c', '')
+
+ expected_output = ['A %s\n' % sbox.ospath('c.iota.c')]
+
+ # Fails with svn: E200009: File '.*c.iota.c' has binary mime type property
+ svntest.actions.run_and_verify_svn(None, expected_output,
+ [], 'add', sbox.ospath('c.iota.c'))
+
########################################################################
# Run the tests
@@ -900,6 +972,8 @@ test_list = [ None,
propset_commit_checkout_nocrash,
propset_revert_noerror,
props_only_file_update,
+ autoprops_inconsistent_eol,
+ autoprops_inconsistent_mime,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/tree_conflict_tests.py b/subversion/tests/cmdline/tree_conflict_tests.py
index 05af8cd..c9e5b1a 100755
--- a/subversion/tests/cmdline/tree_conflict_tests.py
+++ b/subversion/tests/cmdline/tree_conflict_tests.py
@@ -38,6 +38,7 @@ from svntest.actions import run_and_verify_status
from svntest.actions import run_and_verify_info
from svntest.actions import get_virginal_state
import shutil
+import logging
# (abbreviation)
Skip = svntest.testcase.Skip_deco
@@ -48,17 +49,12 @@ Issue = svntest.testcase.Issue_deco
Wimp = svntest.testcase.Wimp_deco
Item = svntest.wc.StateItem
AnyOutput = svntest.verify.AnyOutput
+RegexOutput = svntest.verify.RegexOutput
+RegexListOutput = svntest.verify.RegexListOutput
+UnorderedOutput = svntest.verify.UnorderedOutput
+AlternateOutput = svntest.verify.AlternateOutput
-# If verbose mode is enabled, print the LINE and a newline.
-def verbose_print(line):
- if main.options.verbose:
- print(line)
-
-# If verbose mode is enabled, print the (assumed newline-terminated) LINES.
-def verbose_printlines(lines):
- if main.options.verbose:
- for line in lines:
- sys.stdout.write(line)
+logger = logging.getLogger()
######################################################################
# Tests
@@ -254,8 +250,10 @@ d_adds = [
# Scenarios that start with an existing versioned item
#
# GO-AWAY: node is no longer at the path where it was.
-# file-del(F) = del(F) or move(F,F2)
+# file-del(F) = del(F)
+# file-move(F) = move(F,F2)
# dir-del(D) = del(D) or move(D,D2)
+# Note: file-move(F) does not conflict with incoming edit
#
# REPLACE: node is no longer at the path where it was, but another node is.
# file-rpl(F) = file-del(F) + file-add(F)
@@ -268,20 +266,30 @@ d_adds = [
f_dels = [
( create_f, ['fD'] ),
+]
+
+f_moves = [
( create_f, ['fM'] ),
]
+
d_dels = [
( create_d, ['dD'] ),
+]
+
+d_moves = [
( create_d, ['dM'] ),
]
f_rpls = [
- #( create_f, ['fD','fa','fA'] ), # replacement - not yet
- #( create_f, ['fM','fa','fC'] ), # don't test all combinations, just because it's slow
+ # Don't test all possible combinations, just because it's slow
+ ( create_f, ['fD','fa','fA'] ),
+ ( create_f, ['fM','fC'] ),
]
d_rpls = [
- #( create_d, ['dD','dA'] ), # replacement - not yet
- #( create_d, ['dM','dC'] ), # don't test all combinations, just because it's slow
+ # We're not testing directory replacements yet.
+ # Don't test all possible combinations, just because it's slow
+ #( create_d, ['dD','dA'] ),
+ #( create_d, ['dM','dC'] ),
# Note that directory replacement differs from file replacement: the
# schedule-delete dir is still on disk and is re-used for the re-addition.
]
@@ -372,21 +380,21 @@ def set_up_repos(wc_dir, br_dir, scenarios):
# the target branch before applying the INCOMING_SCENARIOS.
def ensure_tree_conflict(sbox, operation,
incoming_scenarios, localmod_scenarios,
- commit_local_mods):
+ commit_local_mods=False):
sbox.build()
wc_dir = sbox.wc_dir
def url_of(repo_relative_path):
return sbox.repo_url + '/' + repo_relative_path
- verbose_print("")
- verbose_print("=== Starting a set of '" + operation + "' tests.")
+ logger.debug("")
+ logger.debug("=== Starting a set of '" + operation + "' tests.")
# Path to source branch, relative to wc_dir.
# Source is where the "incoming" mods are made.
source_br = "branch1"
- verbose_print("--- Creating changes in repos")
+ logger.debug("--- Creating changes in repos")
source_wc_dir = os.path.join(wc_dir, source_br)
source_left_rev, source_right_rev = set_up_repos(wc_dir, source_wc_dir,
incoming_scenarios)
@@ -421,9 +429,9 @@ def ensure_tree_conflict(sbox, operation,
source_url = url_of(source_br + '/' + scen_name)
target_path = os.path.join(target_br, scen_name)
- verbose_print("=== " + str(inc_action) + " onto " + str(loc_action))
+ logger.debug("=== " + str(inc_action) + " onto " + str(loc_action))
- verbose_print("--- Making local mods")
+ logger.debug("--- Making local mods")
for modaction in loc_action:
modify(modaction, localmod_paths(".", target_path), is_init=False)
if commit_local_mods:
@@ -435,7 +443,7 @@ def ensure_tree_conflict(sbox, operation,
# For update, verify the pre-condition that WC is out of date.
# For switch/merge, there is no such precondition.
if operation == 'update':
- verbose_print("--- Trying to commit (expecting 'out-of-date' error)")
+ logger.debug("--- Trying to commit (expecting 'out-of-date' error)")
run_and_verify_commit(".", None, None, "Commit failed",
target_path)
@@ -453,24 +461,24 @@ def ensure_tree_conflict(sbox, operation,
match_all=False)
# Do the main action
if operation == 'update':
- verbose_print("--- Updating")
+ logger.debug("--- Updating")
run_and_verify_svn(None, expected_stdout, [],
'update', target_path)
elif operation == 'switch':
- verbose_print("--- Switching")
+ logger.debug("--- Switching")
run_and_verify_svn(None, expected_stdout, [],
'switch', source_url, target_path)
elif operation == 'merge':
- verbose_print("--- Merging")
+ logger.debug("--- Merging")
run_and_verify_svn(None, expected_stdout, [],
- 'merge', '--ignore-ancestry',
+ 'merge',
'--allow-mixed-revisions',
'-r', str(source_left_rev) + ':' + str(source_right_rev),
source_url, target_path)
else:
raise Exception("unknown operation: '" + operation + "'")
- verbose_print("--- Checking that 'info' reports the conflict")
+ logger.debug("--- Checking that 'info' reports the conflict")
if operation == 'update' or operation == 'switch':
incoming_left_rev = target_start_rev
else:
@@ -486,39 +494,47 @@ def ensure_tree_conflict(sbox, operation,
re.escape(victim_name + '@' + str(incoming_right_rev)) + r')' }
run_and_verify_info([expected_info], victim_path)
- verbose_print("--- Trying to commit (expecting 'conflict' error)")
+ logger.debug("--- Trying to commit (expecting 'conflict' error)")
### run_and_verify_commit() requires an "output_tree" argument, but
# here we get away with passing None because we know an implementation
# detail: namely that it's not going to look at that argument if it
# gets the stderr that we're expecting.
run_and_verify_commit(".", None, None, ".*conflict.*", victim_path)
- verbose_print("--- Checking that 'status' reports the conflict")
- expected_stdout = svntest.verify.RegexOutput("^......C.* " +
- re.escape(victim_path) + "$",
- match_all=False)
+ logger.debug("--- Checking that 'status' reports the conflict")
+ expected_stdout = AlternateOutput([
+ RegexListOutput([
+ "^......C.* " + re.escape(victim_path) + "$",
+ "^ > .* upon " + operation] +
+ svntest.main.summary_of_conflicts(tree_conflicts=1)),
+ RegexListOutput([
+ "^......C.* " + re.escape(victim_path) + "$",
+ "^ > moved to .*",
+ "^ > .* upon " + operation] +
+ svntest.main.summary_of_conflicts(tree_conflicts=1))
+ ])
run_and_verify_svn(None, expected_stdout, [],
'status', victim_path)
- verbose_print("--- Resolving the conflict")
+ logger.debug("--- Resolving the conflict")
# Make sure resolving the parent does nothing.
run_and_verify_resolved([], os.path.dirname(victim_path))
# The real resolved call.
run_and_verify_resolved([victim_path])
- verbose_print("--- Checking that 'status' does not report a conflict")
+ logger.debug("--- Checking that 'status' does not report a conflict")
exitcode, stdout, stderr = run_and_verify_svn(None, None, [],
'status', victim_path)
for line in stdout:
if line[6] == 'C': # and line.endswith(victim_path + '\n'):
raise svntest.Failure("unexpected status C") # on victim_path
- # verbose_print("--- Committing (should now succeed)")
+ # logger.debug("--- Committing (should now succeed)")
# run_and_verify_svn(None, None, [],
# 'commit', '-m', '', target_path)
# target_start_rev += 1
- verbose_print("")
+ logger.debug("")
os.chdir(saved_cwd)
@@ -533,37 +549,18 @@ def ensure_tree_conflict(sbox, operation,
#----------------------------------------------------------------------
-# The main entry points for testing a set of scenarios.
-
-# Test 'update' and/or 'switch'
-# See test_wc_merge() for arguments.
-def test_tc_up_sw(sbox, incoming_scen, wc_scen):
- sbox2 = sbox.clone_dependent()
- ensure_tree_conflict(sbox, 'update', incoming_scen, wc_scen, False)
- ensure_tree_conflict(sbox2, 'switch', incoming_scen, wc_scen, False)
-
-# Test 'merge'
-# INCOMING_SCEN is a list of scenarios describing the incoming changes to apply.
-# BR_SCEN is a list of scenarios describing how the local branch has
-# been modified relative to the merge-left source.
-# WC_SCEN is a list of scenarios describing the local WC mods.
-# One of BR_SCEN or WC_SCEN must be given but not both.
-def test_tc_merge(sbox, incoming_scen, br_scen=None, wc_scen=None):
- if br_scen:
- ensure_tree_conflict(sbox, 'merge', incoming_scen, br_scen, True)
- else:
- ensure_tree_conflict(sbox, 'merge', incoming_scen, wc_scen, False)
-
-#----------------------------------------------------------------------
-
# Tests for update/switch affecting a file, where the incoming change
# conflicts with a scheduled change in the WC.
#
# WC state: as scheduled (no obstruction)
def up_sw_file_mod_onto_del(sbox):
- "up/sw file: modify onto del/rpl/mv"
- test_tc_up_sw(sbox, f_mods, f_dels + f_rpls)
+ "up/sw file: modify onto del/rpl"
+ sbox2 = sbox.clone_dependent()
+ ensure_tree_conflict(sbox, 'update', f_mods,
+ f_dels + f_rpls)
+ ensure_tree_conflict(sbox2, 'switch', f_mods,
+ f_dels + f_rpls)
# Note: See UC1 in notes/tree-conflicts/use-cases.txt.
def up_sw_file_del_onto_mod(sbox):
@@ -573,17 +570,27 @@ def up_sw_file_del_onto_mod(sbox):
# ### OR (see Nico's email <>):
# schedule-delete but leave F on disk (can only apply with
# text-mod; prop-mod can't be preserved in this way)
- test_tc_up_sw(sbox, f_dels + f_rpls, f_mods)
+ sbox2 = sbox.clone_dependent()
+ ensure_tree_conflict(sbox, 'update', f_dels + f_moves + f_rpls,
+ f_mods)
+ ensure_tree_conflict(sbox2, 'switch', f_dels + f_moves + f_rpls,
+ f_mods)
# Note: See UC2 in notes/tree-conflicts/use-cases.txt.
def up_sw_file_del_onto_del(sbox):
"up/sw file: del/rpl/mv onto del/rpl/mv"
- test_tc_up_sw(sbox, f_dels + f_rpls, f_dels + f_rpls)
+ sbox2 = sbox.clone_dependent()
+ ensure_tree_conflict(sbox, 'update', f_dels + f_moves + f_rpls,
+ f_dels + f_rpls)
+ ensure_tree_conflict(sbox2, 'switch', f_dels + f_moves + f_rpls,
+ f_dels + f_rpls)
# Note: See UC3 in notes/tree-conflicts/use-cases.txt.
def up_sw_file_add_onto_add(sbox):
"up/sw file: add onto add"
- test_tc_up_sw(sbox, f_adds, f_adds)
+ sbox2 = sbox.clone_dependent()
+ ensure_tree_conflict(sbox, 'update', f_adds, f_adds)
+ ensure_tree_conflict(sbox2, 'switch', f_adds, f_adds)
#----------------------------------------------------------------------
@@ -593,17 +600,29 @@ def up_sw_file_add_onto_add(sbox):
def up_sw_dir_mod_onto_del(sbox):
"up/sw dir: modify onto del/rpl/mv"
# WC state: any (D necessarily exists; children may have any state)
- test_tc_up_sw(sbox, d_mods, d_dels + d_rpls)
+ sbox2 = sbox.clone_dependent()
+ ensure_tree_conflict(sbox, 'update', d_mods,
+ d_dels + d_rpls)
+ ensure_tree_conflict(sbox2, 'switch', d_mods,
+ d_dels + d_rpls)
def up_sw_dir_del_onto_mod(sbox):
"up/sw dir: del/rpl/mv onto modify"
# WC state: any (D necessarily exists; children may have any state)
- test_tc_up_sw(sbox, d_dels + d_rpls, d_mods)
+ sbox2 = sbox.clone_dependent()
+ ensure_tree_conflict(sbox, 'update', d_dels + d_moves + d_rpls,
+ d_mods)
+ ensure_tree_conflict(sbox2, 'switch', d_dels + d_moves + d_rpls,
+ d_mods)
def up_sw_dir_del_onto_del(sbox):
"up/sw dir: del/rpl/mv onto del/rpl/mv"
# WC state: any (D necessarily exists; children may have any state)
- test_tc_up_sw(sbox, d_dels + d_rpls, d_dels + d_rpls)
+ sbox2 = sbox.clone_dependent()
+ ensure_tree_conflict(sbox, 'update', d_dels + d_moves + d_rpls,
+ d_dels + d_rpls)
+ ensure_tree_conflict(sbox2, 'switch', d_dels + d_moves + d_rpls,
+ d_dels + d_rpls)
# This is currently set as XFail over ra_dav because it hits
# issue #3314 'DAV can overwrite directories during copy'
@@ -640,7 +659,9 @@ def up_sw_dir_del_onto_del(sbox):
def up_sw_dir_add_onto_add(sbox):
"up/sw dir: add onto add"
# WC state: as scheduled (no obstruction)
- test_tc_up_sw(sbox, d_adds, d_adds)
+ sbox2 = sbox.clone_dependent()
+ ensure_tree_conflict(sbox, 'update', d_adds, d_adds)
+ ensure_tree_conflict(sbox2, 'switch', d_adds, d_adds)
#----------------------------------------------------------------------
@@ -650,29 +671,38 @@ def up_sw_dir_add_onto_add(sbox):
def merge_file_mod_onto_not_file(sbox):
"merge file: modify onto not-file"
sbox2 = sbox.clone_dependent()
- test_tc_merge(sbox, f_mods, br_scen = f_dels + f_rpl_d)
- test_tc_merge(sbox2, f_mods, wc_scen = f_dels)
+ # Test merges where the "local mods" are committed to the target branch.
+ ensure_tree_conflict(sbox, 'merge', f_mods, f_dels + f_moves + f_rpl_d,
+ commit_local_mods=True)
+ # Test merges where the "local mods" are uncommitted mods in the WC.
+ ensure_tree_conflict(sbox2, 'merge', f_mods, f_dels + f_moves)
# Note: See UC4 in notes/tree-conflicts/use-cases.txt.
def merge_file_del_onto_not_same(sbox):
"merge file: del/rpl/mv onto not-same"
sbox2 = sbox.clone_dependent()
- test_tc_merge(sbox, f_dels + f_rpls, br_scen = f_mods)
- test_tc_merge(sbox2, f_dels + f_rpls, wc_scen = f_mods)
+ ensure_tree_conflict(sbox, 'merge', f_dels + f_moves + f_rpls, f_mods,
+ commit_local_mods=True)
+ ensure_tree_conflict(sbox2, 'merge', f_dels + f_moves + f_rpls, f_mods)
# Note: See UC5 in notes/tree-conflicts/use-cases.txt.
def merge_file_del_onto_not_file(sbox):
"merge file: del/rpl/mv onto not-file"
sbox2 = sbox.clone_dependent()
- test_tc_merge(sbox, f_dels + f_rpls, br_scen = f_dels + f_rpl_d)
- test_tc_merge(sbox2, f_dels + f_rpls, wc_scen = f_dels)
+ ensure_tree_conflict(sbox, 'merge', f_dels + f_moves + f_rpls,
+ f_dels + f_moves + f_rpl_d,
+ commit_local_mods=True)
+ ensure_tree_conflict(sbox2, 'merge', f_dels + f_moves + f_rpls,
+ f_dels + f_moves)
# Note: See UC6 in notes/tree-conflicts/use-cases.txt.
def merge_file_add_onto_not_none(sbox):
"merge file: add onto not-none"
sbox2 = sbox.clone_dependent()
- test_tc_merge(sbox, f_adds, br_scen = f_adds) ### + d_adds (at path "F")
- test_tc_merge(sbox2, f_adds, wc_scen = f_adds) ### + d_adds (at path "F")
+ ensure_tree_conflict(sbox, 'merge', f_adds, f_adds,
+ commit_local_mods=True)
+ ensure_tree_conflict(sbox2, 'merge', f_adds, f_adds)
+ # TODO: Also test directory adds at path "F"?
#----------------------------------------------------------------------
@@ -682,29 +712,35 @@ def merge_file_add_onto_not_none(sbox):
def merge_dir_mod_onto_not_dir(sbox):
"merge dir: modify onto not-dir"
sbox2 = sbox.clone_dependent()
- test_tc_merge(sbox, d_mods, br_scen = d_dels + d_rpl_f)
- test_tc_merge(sbox2, d_mods, wc_scen = d_dels)
+ ensure_tree_conflict(sbox, 'merge', d_mods, d_dels + d_moves + d_rpl_f,
+ commit_local_mods=True)
+ ensure_tree_conflict(sbox2, 'merge', d_mods, d_dels + d_moves)
# Test for issue #3150 'tree conflicts with directories as victims'.
-@XFail()
@Issue(3150)
def merge_dir_del_onto_not_same(sbox):
"merge dir: del/rpl/mv onto not-same"
sbox2 = sbox.clone_dependent()
- test_tc_merge(sbox, d_dels + d_rpls, br_scen = d_mods)
- test_tc_merge(sbox2, d_dels + d_rpls, wc_scen = d_mods)
+ ensure_tree_conflict(sbox, 'merge', d_dels + d_moves + d_rpls, d_mods,
+ commit_local_mods=True)
+ ensure_tree_conflict(sbox2, 'merge', d_dels + d_moves + d_rpls, d_mods)
def merge_dir_del_onto_not_dir(sbox):
"merge dir: del/rpl/mv onto not-dir"
sbox2 = sbox.clone_dependent()
- test_tc_merge(sbox, d_dels + d_rpls, br_scen = d_dels + d_rpl_f)
- test_tc_merge(sbox2, d_dels + d_rpls, wc_scen = d_dels)
+ ensure_tree_conflict(sbox, 'merge', d_dels + d_moves + d_rpls,
+ d_dels + d_moves + d_rpl_f,
+ commit_local_mods=True)
+ ensure_tree_conflict(sbox2, 'merge', d_dels + d_moves + d_rpls,
+ d_dels + d_moves)
def merge_dir_add_onto_not_none(sbox):
"merge dir: add onto not-none"
sbox2 = sbox.clone_dependent()
- test_tc_merge(sbox, d_adds, br_scen = d_adds) ### + f_adds (at path "D")
- test_tc_merge(sbox2, d_adds, wc_scen = d_adds) ### + f_adds (at path "D")
+ ensure_tree_conflict(sbox, 'merge', d_adds, d_adds,
+ commit_local_mods=True)
+ ensure_tree_conflict(sbox2, 'merge', d_adds, d_adds)
+ # TODO: also try with file adds at path "D"?
#----------------------------------------------------------------------
@@ -1213,14 +1249,14 @@ def actual_only_node_behaviour(sbox):
"export", foo_path, sbox.get_tempname())
# import
expected_stdout = None
- expected_stderr = ".*foo.*does not exist.*"
+ expected_stderr = ".*(foo.*does not exist|Can't stat.*foo).*"
run_and_verify_svn(None, expected_stdout, expected_stderr,
"import", '-m', svntest.main.make_log_msg(),
foo_path, sbox.repo_url + '/foo_imported')
# info
expected_info = {
- 'Tree conflict': 'local missing, incoming edit upon merge.*',
+ 'Tree conflict': 'local file missing, incoming file edit upon merge.*',
'Name': 'foo',
'Schedule': 'normal',
'Node Kind': 'none',
@@ -1247,7 +1283,7 @@ def actual_only_node_behaviour(sbox):
# merge
# note: this is intentionally a no-op merge that does not record mergeinfo
expected_stdout = None
- expected_stderr = ".*foo.*does not exist.*"
+ expected_stderr = ".*foo.*was not found.*"
run_and_verify_svn(None, expected_stdout, expected_stderr,
"merge", '--ignore-ancestry', '-c', '4',
A_copy_url + '/mu', foo_path)
@@ -1340,6 +1376,18 @@ def actual_only_node_behaviour(sbox):
svntest.main.run_svn(None, "merge", '-c', '4', A_copy_url,
os.path.join(wc_dir, 'A'))
+ # revert
+ expected_stdout = "Reverted.*foo.*"
+ expected_stderr = []
+ run_and_verify_svn(None, expected_stdout, expected_stderr,
+ "revert", "-R", foo_path)
+
+ # revert the entire working copy and repeat the merge so we can test
+ # more commands
+ svntest.main.run_svn(None, "revert", "-R", wc_dir)
+ svntest.main.run_svn(None, "merge", '-c', '4', A_copy_url,
+ os.path.join(wc_dir, 'A'))
+
# status (stat, st)
expected_status = wc.State(foo_path, {
'' : Item(status='! ', treeconflict='C'),
@@ -1359,11 +1407,11 @@ def actual_only_node_behaviour(sbox):
"unlock", foo_path)
# update (up)
+ # This doesn't skip because the update is anchored at the parent of A,
+ # the parent of A is not in conflict, and the update doesn't attempt to
+ # change foo itself.
expected_stdout = [
- "Skipped '%s' -- Node remains in conflict\n" % sbox.ospath('A/foo'),
- "Summary of conflicts:\n",
- " Skipped paths: 1\n",
- ]
+ "Updating '" + foo_path + "':\n", "At revision 4.\n"]
expected_stderr = []
run_and_verify_svn(None, expected_stdout, expected_stderr,
"update", foo_path)
@@ -1395,7 +1443,8 @@ def update_dir_with_not_present(sbox):
sbox.simple_rm('A/B')
# We can't commit this without updating (ra_svn produces its own error)
- run_and_verify_svn(None, None, "svn: (E155011|E160028): Dir.*B.*out of date",
+ run_and_verify_svn(None, None,
+ "svn: (E155011|E160028|E170004): (Dir|Item).*B.*out of date",
'ci', '-m', '', wc_dir)
# So we run update
diff --git a/subversion/tests/cmdline/update_tests.py b/subversion/tests/cmdline/update_tests.py
index 2eb746c..8a6c31c 100755
--- a/subversion/tests/cmdline/update_tests.py
+++ b/subversion/tests/cmdline/update_tests.py
@@ -27,10 +27,13 @@
# General modules
import sys, re, os, subprocess
import time
+import logging
+
+logger = logging.getLogger()
# Our testing module
import svntest
-from svntest import wc, actions, verify
+from svntest import wc, actions, verify, deeptrees
from merge_tests import expected_merge_output
from merge_tests import set_up_branch
@@ -92,7 +95,7 @@ def detect_extra_files(node, extra_files):
extra_files.pop(extra_files.index(fdata)) # delete pattern from list
return
- print("Found unexpected object: %s" % node.name)
+ logger.warn("Found unexpected object: %s", node.name)
raise svntest.tree.SVNTreeUnequal
@@ -106,7 +109,7 @@ def update_binary_file(sbox):
# Add a binary file to the project.
theta_contents = open(os.path.join(sys.path[0], "theta.bin"), 'rb').read()
# Write PNG file data into 'A/theta'.
- theta_path = os.path.join(wc_dir, 'A', 'theta')
+ theta_path = sbox.ospath('A/theta')
svntest.main.file_write(theta_path, theta_contents, 'wb')
svntest.main.run_svn(None, 'add', theta_path)
@@ -197,8 +200,8 @@ def update_binary_file(sbox):
# verify that the extra_files list is now empty.
if len(extra_files) != 0:
- print("Not all extra reject files have been accounted for:")
- print(extra_files)
+ logger.warn("Not all extra reject files have been accounted for:")
+ logger.warn(extra_files)
raise svntest.Failure
#----------------------------------------------------------------------
@@ -223,9 +226,9 @@ def update_binary_file_2(sbox):
zeta_contents = zeta_contents + zeta_contents
# Write our two files' contents out to disk, in A/theta and A/zeta.
- theta_path = os.path.join(wc_dir, 'A', 'theta')
+ theta_path = sbox.ospath('A/theta')
svntest.main.file_write(theta_path, theta_contents, 'wb')
- zeta_path = os.path.join(wc_dir, 'A', 'zeta')
+ zeta_path = sbox.ospath('A/zeta')
svntest.main.file_write(zeta_path, zeta_contents, 'wb')
# Now, `svn add' those two files.
@@ -307,6 +310,91 @@ def update_binary_file_2(sbox):
#----------------------------------------------------------------------
+@Issue(4128)
+def update_binary_file_3(sbox):
+ "update locally modified file to equal versions"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # Suck up contents of a test .png file.
+ theta_contents = open(os.path.join(sys.path[0], "theta.bin"), 'rb').read()
+
+ # Write our files contents out to disk, in A/theta.
+ theta_path = sbox.ospath('A/theta')
+ svntest.main.file_write(theta_path, theta_contents, 'wb')
+
+ # Now, `svn add' that file.
+ svntest.main.run_svn(None, 'add', theta_path)
+
+ # Created expected output tree for 'svn ci'
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/theta' : Item(verb='Adding (bin)'),
+ })
+
+ # Create expected status tree
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.add({
+ 'A/theta' : Item(status=' ', wc_rev=2),
+ })
+
+ # Commit the new binary file, creating revision 2.
+ svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+ expected_status, None, wc_dir)
+
+ # Make some mods to the binary files.
+ svntest.main.file_append(theta_path, "foobar")
+ new_theta_contents = theta_contents + "foobar"
+
+ # Created expected output tree for 'svn ci'
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/theta' : Item(verb='Sending'),
+ })
+
+ # Create expected status tree
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.add({
+ 'A/theta' : Item(status=' ', wc_rev=3),
+ })
+
+ # Commit modified working copy, creating revision 3.
+ svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+ expected_status, None, wc_dir)
+
+ # Now we locally modify the file back to the old version.
+ svntest.main.file_write(theta_path, theta_contents, 'wb')
+
+ # Create expected output tree for an update to rev 2.
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/theta' : Item(status='G '),
+ })
+
+ # Create expected disk tree for the update
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.add({
+ 'A/theta' : Item(theta_contents,
+ props={'svn:mime-type' : 'application/octet-stream'}),
+ })
+
+ # Create expected status tree for the update.
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
+ expected_status.add({
+ 'A/theta' : Item(status=' ', wc_rev=2),
+ })
+
+ # Do an update from revision 2 and make sure that our binary file
+ # gets reverted to its original contents.
+ # This used to raise a conflict.
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None,
+ None, None, 1,
+ '-r', '2', wc_dir)
+
+#----------------------------------------------------------------------
+
def update_missing(sbox):
"update missing items (by name) in working copy"
@@ -314,10 +402,10 @@ def update_missing(sbox):
wc_dir = sbox.wc_dir
# Remove some files and dirs from the working copy.
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
- E_path = os.path.join(wc_dir, 'A', 'B', 'E')
- H_path = os.path.join(wc_dir, 'A', 'D', 'H')
+ mu_path = sbox.ospath('A/mu')
+ rho_path = sbox.ospath('A/D/G/rho')
+ E_path = sbox.ospath('A/B/E')
+ H_path = sbox.ospath('A/D/H')
# remove two files to verify that they get restored
os.remove(mu_path)
@@ -329,10 +417,7 @@ def update_missing(sbox):
svntest.main.safe_rmtree(H_path)
# In single-db mode all missing items will just be restored
- if svntest.main.wc_is_singledb(wc_dir):
- A_or_Restored = Item(verb='Restored')
- else:
- A_or_Restored = Item(status='A ')
+ A_or_Restored = Item(verb='Restored')
# Create expected output tree for an update of the missing items by name
expected_output = svntest.wc.State(wc_dir, {
@@ -371,18 +456,18 @@ def update_ignores_added(sbox):
wc_dir = sbox.wc_dir
# Commit something so there's actually a new revision to update to.
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
+ rho_path = sbox.ospath('A/D/G/rho')
svntest.main.file_append(rho_path, "More stuff in rho.\n")
svntest.main.run_svn(None,
'ci', '-m', 'log msg', rho_path)
# Create a new file, 'zeta', and schedule it for addition.
- zeta_path = os.path.join(wc_dir, 'A', 'B', 'zeta')
+ zeta_path = sbox.ospath('A/B/zeta')
svntest.main.file_append(zeta_path, "This is the file 'zeta'.\n")
svntest.main.run_svn(None, 'add', zeta_path)
# Schedule another file, say, 'gamma', for replacement.
- gamma_path = os.path.join(wc_dir, 'A', 'D', 'gamma')
+ gamma_path = sbox.ospath('A/D/gamma')
svntest.main.run_svn(None, 'delete', gamma_path)
svntest.main.file_append(gamma_path, "This is a new 'gamma' now.\n")
svntest.main.run_svn(None, 'add', gamma_path)
@@ -430,8 +515,8 @@ def update_to_rev_zero(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, 'iota')
- A_path = os.path.join(wc_dir, 'A')
+ iota_path = sbox.ospath('iota')
+ A_path = sbox.ospath('A')
# Create expected output tree for an update to rev 0
expected_output = svntest.wc.State(wc_dir, {
@@ -477,7 +562,7 @@ def receive_overlapping_same_change(sbox):
wc_dir = sbox.wc_dir
# Modify iota.
- iota_path = os.path.join(wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
svntest.main.file_append(iota_path, "A change to iota.\n")
# Duplicate locally modified wc, giving us the "other" wc.
@@ -530,8 +615,8 @@ def update_to_resolve_text_conflicts(sbox):
svntest.actions.duplicate_dir(wc_dir, wc_backup)
# Make a couple of local mods to files which will be committed
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
+ mu_path = sbox.ospath('A/mu')
+ rho_path = sbox.ospath('A/D/G/rho')
svntest.main.file_append(mu_path, 'Original appended text for mu\n')
svntest.main.file_append(rho_path, 'Original appended text for rho\n')
svntest.main.run_svn(None, 'propset', 'Kubla', 'Khan', rho_path)
@@ -609,7 +694,7 @@ def update_to_resolve_text_conflicts(sbox):
# verify that the extra_files list is now empty.
if len(extra_files) != 0:
- print("didn't get expected extra files")
+ logger.warn("didn't get expected extra files")
raise svntest.Failure
# remove the conflicting files to clear text conflict but not props conflict
@@ -622,7 +707,7 @@ def update_to_resolve_text_conflicts(sbox):
exit_code, stdout_lines, stdout_lines = svntest.main.run_svn(None, 'up',
wc_backup)
if len (stdout_lines) > 0:
- print("update 2 failed")
+ logger.warn("update 2 failed")
raise svntest.Failure
# Create expected status tree
@@ -640,12 +725,12 @@ def update_delete_modified_files(sbox):
wc_dir = sbox.wc_dir
# Delete a file
- alpha_path = os.path.join(wc_dir, 'A', 'B', 'E', 'alpha')
+ alpha_path = sbox.ospath('A/B/E/alpha')
svntest.actions.run_and_verify_svn("Deleting alpha failed", None, [],
'rm', alpha_path)
# Delete a directory containing files
- G_path = os.path.join(wc_dir, 'A', 'D', 'G')
+ G_path = sbox.ospath('A/D/G')
svntest.actions.run_and_verify_svn("Deleting G failed", None, [],
'rm', G_path)
@@ -720,8 +805,8 @@ def update_after_add_rm_deleted(sbox):
wc_dir = sbox.wc_dir
# Delete a file and directory from WC
- alpha_path = os.path.join(wc_dir, 'A', 'B', 'E', 'alpha')
- F_path = os.path.join(wc_dir, 'A', 'B', 'F')
+ alpha_path = sbox.ospath('A/B/E/alpha')
+ F_path = sbox.ospath('A/B/F')
svntest.actions.run_and_verify_svn(None, None, [], 'rm', alpha_path, F_path)
# Commit deletion
@@ -797,7 +882,7 @@ def obstructed_update_alters_wc_props(sbox):
# Create an obstruction, a file in the WC with the same name as
# present in a newer rev of the repo.
#print "Creating obstruction"
- obstruction_parent_path = os.path.join(wc_dir, 'A')
+ obstruction_parent_path = sbox.ospath('A')
obstruction_path = os.path.join(obstruction_parent_path, 'foo')
svntest.main.file_append(obstruction_path, 'an obstruction')
@@ -863,7 +948,7 @@ def update_replace_dir(sbox):
wc_dir = sbox.wc_dir
# Delete a directory
- F_path = os.path.join(wc_dir, 'A', 'B', 'F')
+ F_path = sbox.ospath('A/B/F')
svntest.actions.run_and_verify_svn(None, None, [], 'rm', F_path)
# Commit deletion
@@ -905,21 +990,16 @@ def update_replace_dir(sbox):
expected_status)
# Update to revision 1 replaces the directory
- ### I can't get this to work :-(
- #expected_output = svntest.wc.State(wc_dir, {
- # 'A/B/F' : Item(verb='Adding'),
- # 'A/B/F' : Item(verb='Deleting'),
- # })
- #expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
- #svntest.actions.run_and_verify_update(wc_dir,
- # expected_output,
- # expected_disk,
- # expected_status,
- # None, None, None, None, None, 0,
- # '-r', '1', wc_dir)
-
- # Update to revision 1 replaces the directory
- svntest.actions.run_and_verify_svn(None, None, [], 'up', '-r', '1', wc_dir)
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/B/F' : Item(status='A ', prev_status='D '),
+ })
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None, None, None, 0,
+ '-r', '1', wc_dir)
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
@@ -936,7 +1016,7 @@ def update_single_file(sbox):
expected_disk = svntest.main.greek_state.copy()
# Make a local mod to a file which will be committed
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
svntest.main.file_append(mu_path, '\nAppended text for mu')
# Commit.
@@ -952,7 +1032,7 @@ def update_single_file(sbox):
# At one stage 'svn up file' failed with a parent lock error
was_cwd = os.getcwd()
- os.chdir(os.path.join(wc_dir, 'A'))
+ os.chdir(sbox.ospath('A'))
### Can't get run_and_verify_update to work having done the chdir.
svntest.actions.run_and_verify_svn("update failed", None, [],
@@ -975,7 +1055,7 @@ def prop_update_on_scheduled_delete(sbox):
# Make the "other" working copy.
svntest.actions.duplicate_dir(wc_dir, other_wc)
- iota_path = os.path.join(wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
other_iota_path = os.path.join(other_wc, 'iota')
svntest.main.run_svn(None, 'propset', 'foo', 'bar', iota_path)
@@ -1060,8 +1140,8 @@ def update_deleted_missing_dir(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- E_path = os.path.join(wc_dir, 'A', 'B', 'E')
- H_path = os.path.join(wc_dir, 'A', 'D', 'H')
+ E_path = sbox.ospath('A/B/E')
+ H_path = sbox.ospath('A/D/H')
# Create a new revision with directories deleted
svntest.main.run_svn(None, 'rm', E_path)
@@ -1079,20 +1159,15 @@ def update_deleted_missing_dir(sbox):
# Create expected output tree for an update of the missing items by name
expected_output = svntest.wc.State(wc_dir, {
- 'A/B/E' : Item(status='D '),
- 'A/D/H' : Item(status='D '),
- })
-
- # In single-db mode the missing items are restored before the update
- if svntest.main.wc_is_singledb(wc_dir):
- expected_output.add({
- 'A/D/H/psi' : Item(verb='Restored'),
- 'A/D/H/omega' : Item(verb='Restored'),
- 'A/D/H/chi' : Item(verb='Restored'),
- 'A/B/E/beta' : Item(verb='Restored'),
- 'A/B/E/alpha' : Item(verb='Restored')
- # A/B/E and A/D/H are also restored, but are then overriden by the delete
- })
+ 'A/D/H/psi' : Item(verb='Restored'),
+ 'A/D/H/omega' : Item(verb='Restored'),
+ 'A/D/H/chi' : Item(verb='Restored'),
+ 'A/B/E/beta' : Item(verb='Restored'),
+ 'A/B/E/alpha' : Item(verb='Restored'),
+ # A/B/E and A/D/H are also restored, but are then overriden by the delete
+ 'A/B/E' : Item(status='D ', prev_verb='Restored'),
+ 'A/D/H' : Item(status='D ', prev_verb='Restored'),
+ })
# Create expected disk tree for the update.
expected_disk = svntest.main.greek_state.copy()
@@ -1144,7 +1219,7 @@ def another_hudson_problem(sbox):
wc_dir = sbox.wc_dir
# Delete/commit gamma thus making it 'deleted'
- gamma_path = os.path.join(wc_dir, 'A', 'D', 'gamma')
+ gamma_path = sbox.ospath('A/D/gamma')
svntest.main.run_svn(None, 'rm', gamma_path)
expected_output = svntest.wc.State(wc_dir, {
@@ -1166,26 +1241,20 @@ def another_hudson_problem(sbox):
sbox.repo_url + '/A/D/G')
# Remove corresponding tree from working copy
- G_path = os.path.join(wc_dir, 'A', 'D', 'G')
+ G_path = sbox.ospath('A/D/G')
svntest.main.safe_rmtree(G_path)
# Update missing directory to receive the delete, this should mark G
# as 'deleted' and should not alter gamma's entry.
- if not svntest.main.wc_is_singledb(wc_dir):
- expected_output = ["Updating '%s' ...\n" % (G_path),
- 'D '+G_path+'\n',
- 'Updated to revision 3.\n',
- ]
- else:
- expected_output = ["Updating '%s':\n" % (G_path),
- 'Restored \'' + G_path + '\'\n',
- 'Restored \'' + G_path + os.path.sep + 'pi\'\n',
- 'Restored \'' + G_path + os.path.sep + 'rho\'\n',
- 'Restored \'' + G_path + os.path.sep + 'tau\'\n',
- 'D '+G_path+'\n',
- 'Updated to revision 3.\n',
- ]
+ expected_output = ["Updating '%s':\n" % (G_path),
+ 'Restored \'' + G_path + '\'\n',
+ 'Restored \'' + G_path + os.path.sep + 'pi\'\n',
+ 'Restored \'' + G_path + os.path.sep + 'rho\'\n',
+ 'Restored \'' + G_path + os.path.sep + 'tau\'\n',
+ 'D '+G_path+'\n',
+ 'Updated to revision 3.\n',
+ ]
# Sigh, I can't get run_and_verify_update to work (but not because
# of issue 919 as far as I can tell)
@@ -1216,8 +1285,8 @@ def update_deleted_targets(sbox):
wc_dir = sbox.wc_dir
# Delete/commit thus creating 'deleted=true' entries
- gamma_path = os.path.join(wc_dir, 'A', 'D', 'gamma')
- F_path = os.path.join(wc_dir, 'A', 'B', 'F')
+ gamma_path = sbox.ospath('A/D/gamma')
+ F_path = sbox.ospath('A/B/F')
svntest.main.run_svn(None, 'rm', gamma_path, F_path)
expected_output = svntest.wc.State(wc_dir, {
@@ -1303,8 +1372,8 @@ def non_recursive_update(sbox):
wc_dir = sbox.wc_dir
# Commit a change to A/mu and A/D/G/rho
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
+ mu_path = sbox.ospath('A/mu')
+ rho_path = sbox.ospath('A/D/G/rho')
svntest.main.file_append(mu_path, "new")
svntest.main.file_append(rho_path, "new")
@@ -1337,7 +1406,7 @@ def non_recursive_update(sbox):
'-r', '1', wc_dir)
# Non-recursive update of A should change A/mu but not A/D/G/rho
- A_path = os.path.join(wc_dir, 'A')
+ A_path = sbox.ospath('A')
expected_output = svntest.wc.State(wc_dir, {
'A/mu' : Item(status='U '),
@@ -1381,7 +1450,7 @@ def update_to_deletion(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
# Update iota to rev 0, so it gets removed.
expected_output = svntest.wc.State(wc_dir, {
@@ -1421,7 +1490,7 @@ def update_deletion_inside_out(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- parent_path = os.path.join(wc_dir, 'A', 'B')
+ parent_path = sbox.ospath('A/B')
child_path = os.path.join(parent_path, 'E') # Could be a file, doesn't matter
# Delete the parent directory.
@@ -1464,7 +1533,7 @@ def update_schedule_add_dir(sbox):
wc_dir = sbox.wc_dir
# Delete directory A/D/G in the repository via immediate commit
- G_path = os.path.join(wc_dir, 'A', 'D', 'G')
+ G_path = sbox.ospath('A/D/G')
G_url = sbox.repo_url + '/A/D/G'
svntest.actions.run_and_verify_svn(None, None, [],
'rm', G_url, '-m', 'rev 2')
@@ -1487,7 +1556,7 @@ def update_schedule_add_dir(sbox):
# Do a URL->wc copy, creating a new schedule-add A/D/G.
# (Standard procedure when trying to resurrect the directory.)
- D_path = os.path.join(wc_dir, 'A', 'D')
+ D_path = sbox.ospath('A/D')
svntest.actions.run_and_verify_svn("Copy error:", None, [],
'cp', G_url + '@1', D_path)
@@ -1538,7 +1607,7 @@ def update_to_future_add(sbox):
'-r', '0', wc_dir)
# Update iota to the current HEAD.
- iota_path = os.path.join(wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
expected_output = svntest.wc.State(wc_dir, {
'iota' : Item(status='A '),
@@ -1556,7 +1625,7 @@ def update_to_future_add(sbox):
iota_path)
# Now try updating the directory into the future
- A_path = os.path.join(wc_dir, 'A')
+ A_path = sbox.ospath('A')
expected_output = svntest.wc.State(wc_dir, {
'A' : Item(status='A '),
@@ -1587,105 +1656,7 @@ def update_to_future_add(sbox):
expected_disk,
None, None,
None, None, None, None, 0,
- A_path);
-
-#----------------------------------------------------------------------
-
-def nested_in_read_only(sbox):
- "update a nested wc in a read-only wc"
-
- sbox.build()
- wc_dir = sbox.wc_dir
-
- if svntest.main.wc_is_singledb(wc_dir):
- raise svntest.Skip('Unsupported in single-db')
-
- # Delete/commit a file
- alpha_path = os.path.join(wc_dir, 'A', 'B', 'E', 'alpha')
- svntest.actions.run_and_verify_svn(None, None, [], 'rm', alpha_path)
-
- expected_output = svntest.wc.State(wc_dir, {
- 'A/B/E/alpha' : Item(verb='Deleting'),
- })
-
- expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
- expected_status.remove('A/B/E/alpha')
-
- svntest.actions.run_and_verify_commit(wc_dir, expected_output,
- expected_status, None, wc_dir)
-
- svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
-
- expected_status.tweak(wc_rev=2)
-
- svntest.actions.run_and_verify_status(wc_dir, expected_status)
-
- # Delete/commit a directory that used to contain the deleted file
- B_path = os.path.join(wc_dir, 'A', 'B')
- svntest.actions.run_and_verify_svn(None, None, [], 'rm', B_path)
-
- expected_output = svntest.wc.State(wc_dir, {
- 'A/B' : Item(verb='Deleting'),
- })
-
- expected_status.remove('A/B', 'A/B/lambda', 'A/B/E', 'A/B/E/beta', 'A/B/F')
-
- svntest.actions.run_and_verify_commit(wc_dir, expected_output,
- expected_status, None, wc_dir)
-
- svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
-
- expected_status.tweak(wc_rev=3)
-
- svntest.actions.run_and_verify_status(wc_dir, expected_status)
-
- # Replace the deleted directory with a new checkout of an old
- # version of the directory, this gives it a "plausible" URL that
- # could be part of the containing wc
- B_url = sbox.repo_url + '/A/B'
- svntest.actions.run_and_verify_svn(None, None, [],
- 'checkout', '-r', '1', B_url + "@1",
- B_path)
-
- expected_status = svntest.wc.State(B_path, {
- '' : Item(),
- 'lambda' : Item(),
- 'E' : Item(),
- 'E/alpha' : Item(),
- 'E/beta' : Item(),
- 'F' : Item(),
- })
- expected_status.tweak(wc_rev=1, status=' ')
-
- svntest.actions.run_and_verify_status(B_path, expected_status)
-
- # Make enclosing wc read only
- os.chmod(os.path.join(wc_dir, 'A', svntest.main.get_admin_name()), 0555)
-
- try:
- # Update of nested wc should still work
- expected_output = svntest.wc.State(B_path, {
- 'E/alpha' : Item(status='D '),
- })
-
- expected_disk = wc.State('', {
- 'lambda' : wc.StateItem("This is the file 'lambda'.\n"),
- 'E' : wc.StateItem(),
- 'E/beta' : wc.StateItem("This is the file 'beta'.\n"),
- 'F' : wc.StateItem(),
- })
-
- expected_status.remove('E/alpha')
- expected_status.tweak(wc_rev=2)
-
- svntest.actions.run_and_verify_update(B_path,
- expected_output,
- expected_disk,
- expected_status,
- None, None, None, None, None, 0,
- '-r', '2', B_path)
- finally:
- os.chmod(os.path.join(wc_dir, 'A', svntest.main.get_admin_name()), 0777)
+ A_path)
#----------------------------------------------------------------------
@@ -1700,7 +1671,7 @@ def update_xml_unsafe_dir(sbox):
svntest.actions.duplicate_dir(wc_dir, wc_backup)
# Make a couple of local mods to files
- test_path = os.path.join(wc_dir, ' foo & bar')
+ test_path = sbox.ospath(' foo & bar')
svntest.main.run_svn(None, 'mkdir', test_path)
# Created expected output tree for 'svn ci'
@@ -1749,8 +1720,10 @@ def conflict_markers_matching_eol(sbox):
wc_dir = sbox.wc_dir
filecount = 1
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
+ # CRLF is a string that will match a CRLF sequence read from a text file.
+ # ### On Windows, we assume CRLF will be read as LF, so it's a poor test.
if os.name == 'nt':
crlf = '\n'
else:
@@ -1880,8 +1853,10 @@ def update_eolstyle_handling(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
+ # CRLF is a string that will match a CRLF sequence read from a text file.
+ # ### On Windows, we assume CRLF will be read as LF, so it's a poor test.
if os.name == 'nt':
crlf = '\n'
else:
@@ -1978,8 +1953,8 @@ def update_copy_of_old_rev(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- dir = os.path.join(wc_dir, 'A')
- dir2 = os.path.join(wc_dir, 'A2')
+ dir = sbox.ospath('A')
+ dir2 = sbox.ospath('A2')
file = os.path.join(dir, 'mu')
file2 = os.path.join(dir2, 'mu')
url = sbox.repo_url + '/A/mu'
@@ -2026,21 +2001,21 @@ def forced_update(sbox):
svntest.actions.duplicate_dir(wc_dir, wc_backup)
# Make a couple of local mods to files
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
+ mu_path = sbox.ospath('A/mu')
+ rho_path = sbox.ospath('A/D/G/rho')
svntest.main.file_append(mu_path, 'appended mu text')
svntest.main.file_append(rho_path, 'new appended text for rho')
# Add some files
- nu_path = os.path.join(wc_dir, 'A', 'B', 'F', 'nu')
+ nu_path = sbox.ospath('A/B/F/nu')
svntest.main.file_append(nu_path, "This is the file 'nu'\n")
svntest.main.run_svn(None, 'add', nu_path)
- kappa_path = os.path.join(wc_dir, 'kappa')
+ kappa_path = sbox.ospath('kappa')
svntest.main.file_append(kappa_path, "This is the file 'kappa'\n")
svntest.main.run_svn(None, 'add', kappa_path)
# Add a dir with two files
- I_path = os.path.join(wc_dir, 'A', 'C', 'I')
+ I_path = sbox.ospath('A/C/I')
os.mkdir(I_path)
svntest.main.run_svn(None, 'add', I_path)
upsilon_path = os.path.join(I_path, 'upsilon')
@@ -2165,12 +2140,12 @@ def forced_update_failures(sbox):
svntest.actions.duplicate_dir(wc_dir, wc_backup)
# Add a file
- nu_path = os.path.join(wc_dir, 'A', 'B', 'F', 'nu')
+ nu_path = sbox.ospath('A/B/F/nu')
svntest.main.file_append(nu_path, "This is the file 'nu'\n")
svntest.main.run_svn(None, 'add', nu_path)
# Add a dir
- I_path = os.path.join(wc_dir, 'A', 'C', 'I')
+ I_path = sbox.ospath('A/C/I')
os.mkdir(I_path)
svntest.main.run_svn(None, 'add', I_path)
@@ -2376,9 +2351,9 @@ def update_wc_on_windows_drive(sbox):
sbox.repo_url, wc_dir)
# Make some local modifications
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = os.path.join(wc_dir, 'A', 'mu').replace(os.sep, '/')
svntest.main.file_append(mu_path, '\nAppended text for mu')
- zeta_path = os.path.join(wc_dir, 'zeta')
+ zeta_path = os.path.join(wc_dir, 'zeta').replace(os.sep, '/')
svntest.main.file_append(zeta_path, "This is the file 'zeta'\n")
svntest.main.run_svn(None, 'add', zeta_path)
@@ -2399,7 +2374,7 @@ def update_wc_on_windows_drive(sbox):
wc_dir, zeta_path)
# Non recursive commit
- dir1_path = os.path.join(wc_dir, 'dir1')
+ dir1_path = os.path.join(wc_dir, 'dir1').replace(os.sep, '/')
os.mkdir(dir1_path)
svntest.main.run_svn(None, 'add', '-N', dir1_path)
file1_path = os.path.join(dir1_path, 'file1')
@@ -2468,10 +2443,11 @@ def update_wc_on_windows_drive(sbox):
expected_disk.tweak('A/mu', contents = expected_disk.desc['A/mu'].contents
+ '\nAppended text for mu')
+ # Use .old_tree() for status to avoid the entries validation
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
expected_disk,
- expected_status)
+ expected_status.old_tree())
finally:
os.chdir(was_cwd)
@@ -2491,8 +2467,8 @@ def update_wc_with_replaced_file(sbox):
svntest.actions.duplicate_dir(wc_dir, wc_backup)
# we need a change in the repository
- iota_path = os.path.join(wc_dir, 'iota')
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ iota_path = sbox.ospath('iota')
+ mu_path = sbox.ospath('A/mu')
iota_bu_path = os.path.join(wc_backup, 'iota')
svntest.main.file_append(iota_bu_path, "New line in 'iota'\n")
svntest.main.run_svn(None,
@@ -2621,17 +2597,17 @@ def update_with_obstructing_additions(sbox):
#
# A/D/H/I/J/eta: Conflicts with the file scheduled for addition in
# the backup WC. No props.
- upsilon_path = os.path.join(wc_dir, 'A', 'B', 'upsilon')
+ upsilon_path = sbox.ospath('A/B/upsilon')
svntest.main.file_append(upsilon_path, "This is the file 'upsilon'\n")
- nu_path = os.path.join(wc_dir, 'A', 'C', 'nu')
+ nu_path = sbox.ospath('A/C/nu')
svntest.main.file_append(nu_path, "This is the file 'nu'\n")
- kappa_path = os.path.join(wc_dir, 'A', 'D', 'kappa')
+ kappa_path = sbox.ospath('A/D/kappa')
svntest.main.file_append(kappa_path, "This is REPOS file 'kappa'\n")
- epsilon_path = os.path.join(wc_dir, 'A', 'D', 'epsilon')
+ epsilon_path = sbox.ospath('A/D/epsilon')
svntest.main.file_append(epsilon_path, "This is REPOS file 'epsilon'\n")
- zeta_path = os.path.join(wc_dir, 'A', 'D', 'zeta')
+ zeta_path = sbox.ospath('A/D/zeta')
svntest.main.file_append(zeta_path, "This is the file 'zeta'\n")
- I_path = os.path.join(wc_dir, 'A', 'D', 'H', 'I')
+ I_path = sbox.ospath('A/D/H/I')
os.mkdir(I_path)
J_path = os.path.join(I_path, 'J')
os.mkdir(J_path)
@@ -2833,9 +2809,9 @@ def update_with_obstructing_additions(sbox):
# WC to WC copy of A/D/H to A/M, M now scheduled for addition with
# history in WC and pending addition from the repos.
- H_path = os.path.join(wc_dir, 'A', 'D', 'H')
- A_path = os.path.join(wc_dir, 'A')
- M_path = os.path.join(wc_dir, 'A', 'M')
+ H_path = sbox.ospath('A/D/H')
+ A_path = sbox.ospath('A')
+ M_path = sbox.ospath('A/M')
svntest.actions.run_and_verify_svn("Copy error:", None, [],
'cp', H_path, M_path)
@@ -2849,8 +2825,8 @@ def update_with_obstructing_additions(sbox):
# WC to WC copy of A/D/H/chi to omicron, omicron now scheduled for
# addition with history in WC and pending addition from the repos.
- chi_path = os.path.join(wc_dir, 'A', 'D', 'H', 'chi')
- omicron_path = os.path.join(wc_dir, 'omicron')
+ chi_path = sbox.ospath('A/D/H/chi')
+ omicron_path = sbox.ospath('omicron')
svntest.actions.run_and_verify_svn("Copy error:", None, [],
'cp', chi_path,
@@ -2967,11 +2943,11 @@ def update_conflicted(sbox):
"update conflicted files"
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, 'iota')
- lambda_path = os.path.join(wc_dir, 'A', 'B', 'lambda')
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- D_path = os.path.join(wc_dir, 'A', 'D')
- pi_path = os.path.join(wc_dir, 'A', 'D', 'G', 'pi')
+ iota_path = sbox.ospath('iota')
+ lambda_path = sbox.ospath('A/B/lambda')
+ mu_path = sbox.ospath('A/mu')
+ D_path = sbox.ospath('A/D')
+ pi_path = sbox.ospath('A/D/G/pi')
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
@@ -3135,20 +3111,20 @@ def mergeinfo_update_elision(sbox):
wc_dir = sbox.wc_dir
# Some paths we'll care about
- alpha_COPY_path = os.path.join(wc_dir, "A", "B_COPY", "E", "alpha")
- alpha_path = os.path.join(wc_dir, "A", "B", "E", "alpha")
- B_COPY_path = os.path.join(wc_dir, "A", "B_COPY")
- E_COPY_path = os.path.join(wc_dir, "A", "B_COPY", "E")
- beta_path = os.path.join(wc_dir, "A", "B", "E", "beta")
- lambda_path = os.path.join(wc_dir, "A", "B", "lambda")
+ alpha_COPY_path = sbox.ospath('A/B_COPY/E/alpha')
+ alpha_path = sbox.ospath('A/B/E/alpha')
+ B_COPY_path = sbox.ospath('A/B_COPY')
+ E_COPY_path = sbox.ospath('A/B_COPY/E')
+ beta_path = sbox.ospath('A/B/E/beta')
+ lambda_path = sbox.ospath('A/B/lambda')
# Make a branch A/B_COPY
expected_stdout = verify.UnorderedOutput([
- "A " + os.path.join(wc_dir, "A", "B_COPY", "lambda") + "\n",
- "A " + os.path.join(wc_dir, "A", "B_COPY", "E") + "\n",
- "A " + os.path.join(wc_dir, "A", "B_COPY", "E", "alpha") + "\n",
- "A " + os.path.join(wc_dir, "A", "B_COPY", "E", "beta") + "\n",
- "A " + os.path.join(wc_dir, "A", "B_COPY", "F") + "\n",
+ "A " + sbox.ospath('A/B_COPY/lambda') + "\n",
+ "A " + sbox.ospath('A/B_COPY/E') + "\n",
+ "A " + sbox.ospath('A/B_COPY/E/alpha') + "\n",
+ "A " + sbox.ospath('A/B_COPY/E/beta') + "\n",
+ "A " + sbox.ospath('A/B_COPY/F') + "\n",
"Checked out revision 1.\n",
"A " + B_COPY_path + "\n",
])
@@ -3534,12 +3510,12 @@ def update_copied_from_replaced_and_changed(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- fn1_relpath = os.path.join('A', 'B', 'E', 'aardvark')
- fn2_relpath = os.path.join('A', 'B', 'E', 'alpha')
- fn3_relpath = os.path.join('A', 'B', 'E', 'beta')
- fn1_path = os.path.join(wc_dir, fn1_relpath)
- fn2_path = os.path.join(wc_dir, fn2_relpath)
- fn3_path = os.path.join(wc_dir, fn3_relpath)
+ fn1_relpath = 'A/B/E/aardvark'
+ fn2_relpath = 'A/B/E/alpha'
+ fn3_relpath = 'A/B/E/beta'
+ fn1_path = sbox.ospath(fn1_relpath)
+ fn2_path = sbox.ospath(fn2_relpath)
+ fn3_path = sbox.ospath(fn3_relpath)
# Move fn2 to fn1
svntest.actions.run_and_verify_svn(None, None, [],
@@ -3588,7 +3564,7 @@ def update_copied_from_replaced_and_changed(sbox):
# Go back to r1.
expected_output = svntest.wc.State(wc_dir, {
fn1_relpath: Item(status='D '),
- fn2_relpath: Item(status='A '), # though actually should be D and A
+ fn2_relpath: Item(status='A ', prev_status='D '), # D then A
fn3_relpath: Item(status='A '),
})
@@ -3606,7 +3582,7 @@ def update_copied_from_replaced_and_changed(sbox):
# And back up to 3 again.
expected_output = svntest.wc.State(wc_dir, {
fn1_relpath: Item(status='A '),
- fn2_relpath: Item(status='A '), # though actually should be D and A
+ fn2_relpath: Item(status='A ', prev_status='D '), # D then A
fn3_relpath: Item(status='D '),
})
@@ -3636,8 +3612,8 @@ def update_copied_and_deleted_prop(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- iota_path = os.path.join(wc_dir, 'iota')
- iota2_path = os.path.join(wc_dir, 'iota2')
+ iota_path = sbox.ospath('iota')
+ iota2_path = sbox.ospath('iota2')
# Add a property on iota
svntest.actions.run_and_verify_svn(None, None, [],
@@ -3718,6 +3694,35 @@ def update_copied_and_deleted_prop(sbox):
#----------------------------------------------------------------------
+def update_output_with_conflicts(rev, target, paths=None, resolved=False):
+ """Return the expected output for an update of TARGET to revision REV, in
+ which all of the PATHS are updated and conflicting.
+
+ If PATHS is None, it means [TARGET]. The output is a list of lines.
+ """
+ if paths is None:
+ paths = [target]
+
+ lines = ["Updating '%s':\n" % target]
+ for path in paths:
+ lines += ['C %s\n' % path]
+ lines += ['Updated to revision %d.\n' % rev]
+ if resolved:
+ for path in paths:
+ lines += ["Resolved conflicted state of '%s'\n" % path]
+ lines += svntest.main.summary_of_conflicts(text_resolved=len(paths))
+ else:
+ lines += svntest.main.summary_of_conflicts(text_conflicts=len(paths))
+ return lines
+
+def update_output_with_conflicts_resolved(rev, target, paths=None):
+ """Like update_output_with_conflicts(), but where all of the conflicts are
+ resolved within the update.
+ """
+ lines = update_output_with_conflicts(rev, target, paths, resolved=True)
+ return lines
+
+#----------------------------------------------------------------------
def update_accept_conflicts(sbox):
"update --accept automatic conflict resolution"
@@ -3730,13 +3735,13 @@ def update_accept_conflicts(sbox):
svntest.actions.duplicate_dir(wc_dir, wc_backup)
# Make a few local mods to files which will be committed
- iota_path = os.path.join(wc_dir, 'iota')
- lambda_path = os.path.join(wc_dir, 'A', 'B', 'lambda')
- mu_path = os.path.join(wc_dir, 'A', 'mu')
- alpha_path = os.path.join(wc_dir, 'A', 'B', 'E', 'alpha')
- beta_path = os.path.join(wc_dir, 'A', 'B', 'E', 'beta')
- pi_path = os.path.join(wc_dir, 'A', 'D', 'G', 'pi')
- rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
+ iota_path = sbox.ospath('iota')
+ lambda_path = sbox.ospath('A/B/lambda')
+ mu_path = sbox.ospath('A/mu')
+ alpha_path = sbox.ospath('A/B/E/alpha')
+ beta_path = sbox.ospath('A/B/E/beta')
+ pi_path = sbox.ospath('A/D/G/pi')
+ rho_path = sbox.ospath('A/D/G/rho')
svntest.main.file_append(lambda_path, 'Their appended text for lambda\n')
svntest.main.file_append(iota_path, 'Their appended text for iota\n')
svntest.main.file_append(mu_path, 'Their appended text for mu\n')
@@ -3802,22 +3807,16 @@ def update_accept_conflicts(sbox):
# Just leave the conflicts alone, since run_and_verify_svn already uses
# the --non-interactive option.
svntest.actions.run_and_verify_svn(None,
- ["Updating '%s':\n" % (iota_path_backup),
- 'C %s\n' % (iota_path_backup,),
- 'Updated to revision 2.\n',
- 'Summary of conflicts:\n',
- ' Text conflicts: 1\n'],
+ update_output_with_conflicts(
+ 2, iota_path_backup),
[],
'update', iota_path_backup)
# lambda: --accept=postpone
# Just leave the conflicts alone.
svntest.actions.run_and_verify_svn(None,
- ["Updating '%s':\n" % (lambda_path_backup),
- 'C %s\n' % (lambda_path_backup,),
- 'Updated to revision 2.\n',
- 'Summary of conflicts:\n',
- ' Text conflicts: 1\n'],
+ update_output_with_conflicts(
+ 2, lambda_path_backup),
[],
'update', '--accept=postpone',
lambda_path_backup)
@@ -3825,9 +3824,8 @@ def update_accept_conflicts(sbox):
# mu: --accept=base
# Accept the pre-update base file.
svntest.actions.run_and_verify_svn(None,
- ["Updating '%s':\n" % (mu_path_backup),
- 'G %s\n' % (mu_path_backup,),
- 'Updated to revision 2.\n'],
+ update_output_with_conflicts_resolved(
+ 2, mu_path_backup),
[],
'update', '--accept=base',
mu_path_backup)
@@ -3835,9 +3833,8 @@ def update_accept_conflicts(sbox):
# alpha: --accept=mine
# Accept the user's working file.
svntest.actions.run_and_verify_svn(None,
- ["Updating '%s':\n" % (alpha_path_backup),
- 'G %s\n' % (alpha_path_backup,),
- 'Updated to revision 2.\n'],
+ update_output_with_conflicts_resolved(
+ 2, alpha_path_backup),
[],
'update', '--accept=mine-full',
alpha_path_backup)
@@ -3845,9 +3842,8 @@ def update_accept_conflicts(sbox):
# beta: --accept=theirs
# Accept their file.
svntest.actions.run_and_verify_svn(None,
- ["Updating '%s':\n" % (beta_path_backup),
- 'G %s\n' % (beta_path_backup,),
- 'Updated to revision 2.\n'],
+ update_output_with_conflicts_resolved(
+ 2, beta_path_backup),
[],
'update', '--accept=theirs-full',
beta_path_backup)
@@ -3857,23 +3853,21 @@ def update_accept_conflicts(sbox):
# conflicts in place, so expect a message on stderr, but expect
# svn to exit with an exit code of 0.
svntest.actions.run_and_verify_svn2(None,
- ["Updating '%s':\n" % (pi_path_backup),
- 'G %s\n' % (pi_path_backup,),
- 'Updated to revision 2.\n'],
+ update_output_with_conflicts_resolved(
+ 2, pi_path_backup),
"system(.*) returned.*", 0,
'update', '--accept=edit',
+ '--force-interactive',
pi_path_backup)
# rho: --accept=launch
# Run the external merge tool, it should leave conflict markers in place.
svntest.actions.run_and_verify_svn(None,
- ["Updating '%s':\n" % (rho_path_backup),
- 'C %s\n' % (rho_path_backup,),
- 'Updated to revision 2.\n',
- 'Summary of conflicts:\n',
- ' Text conflicts: 1\n'],
+ update_output_with_conflicts(
+ 2, rho_path_backup),
[],
'update', '--accept=launch',
+ '--force-interactive',
rho_path_backup)
# Set the expected disk contents for the test
@@ -3949,6 +3943,11 @@ def update_accept_conflicts(sbox):
# WC update editor flush and run incomplete logs and lead to WC
# corruption, detectable by another update command.
+# FIXME: With issue #4280 fixed and this test using --force-interactive,
+# the test driver can no longer redirect terminal input to cause
+# an EOF. Consequently, skip this test so that it does not hang
+# the test suite.
+@Skip()
def eof_in_interactive_conflict_resolver(sbox):
"eof in interactive resolution can't break wc"
@@ -3968,7 +3967,7 @@ interactive-conflicts = true
config_dir = os.path.join(tmp_dir, 'interactive-conflicts-config')
svntest.main.create_config_dir(config_dir, config_contents)
- iota_path = os.path.join(wc_dir, 'iota')
+ iota_path = sbox.ospath('iota')
# Modify iota and commit for r2.
svntest.main.file_append(iota_path, "Appended text in r2.\n")
@@ -4001,20 +4000,34 @@ interactive-conflicts = true
# Modify iota differently and try to update *with the interactive
# resolver*. ### The parser won't go so well with the output
svntest.main.file_append(iota_path, "Local mods to r1 text.\n")
- svntest.actions.run_and_verify_update(wc_dir, None, None, None,
- "Can't read stdin: End of file found",
- None, None, None, None, 1,
- wc_dir, '--config-dir', config_dir)
+ svntest.actions.run_and_verify_update(
+ wc_dir, None, None, None,
+ "End of file while reading from terminal",
+ None, None, None, None, 1,
+ wc_dir, '--force-interactive', '--config-dir', config_dir)
# Now update -r1 again. Hopefully we don't get a checksum error!
- expected_output = svntest.wc.State(wc_dir, {})
+ expected_output = svntest.wc.State(wc_dir, {
+ 'iota': Item(verb="Skipped"),
+ })
+
+ # The interactive callback aborts, so the file remains in conflict.
+ expected_disk.tweak('iota', contents="This is the file 'iota'.\n"
+ "<<<<<<< .mine\n"
+ "Local mods to r1 text.\n"
+ "=======\n"
+ "Appended text in r2.\n"
+ ">>>>>>> .r2\n"),
+ expected_disk.add({
+ 'iota.r1' : Item(contents="This is the file 'iota'.\n"),
+ 'iota.r2' : Item(contents="This is the file 'iota'.\n"
+ "Appended text in r2.\n"),
+ 'iota.mine' : Item(contents="This is the file 'iota'.\n"
+ "Local mods to r1 text.\n"),
+ })
- # note: it's possible that the correct disk here should be the
- # merged file?
- expected_disk.tweak('iota', contents=("This is the file 'iota'.\n"
- "Local mods to r1 text.\n"))
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
- expected_status.tweak('iota', status='M ')
+ expected_status.tweak('iota', status='C ', wc_rev=2)
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
@@ -4066,7 +4079,7 @@ def restarted_update_should_delete_dir_prop(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- A_path = os.path.join(wc_dir, 'A')
+ A_path = sbox.ospath('A')
zeta_path = os.path.join(A_path, 'zeta')
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
@@ -4168,25 +4181,25 @@ def restarted_update_should_delete_dir_prop(sbox):
# See use cases 1-3 in notes/tree-conflicts/use-cases.txt for background.
# convenience definitions
-leaf_edit = svntest.actions.deep_trees_leaf_edit
-tree_del = svntest.actions.deep_trees_tree_del
-leaf_del = svntest.actions.deep_trees_leaf_del
+leaf_edit = svntest.deeptrees.deep_trees_leaf_edit
+tree_del = svntest.deeptrees.deep_trees_tree_del
+leaf_del = svntest.deeptrees.deep_trees_leaf_del
-disk_after_leaf_edit = svntest.actions.deep_trees_after_leaf_edit
-disk_after_leaf_del = svntest.actions.deep_trees_after_leaf_del
-disk_after_tree_del = svntest.actions.deep_trees_after_tree_del
+disk_after_leaf_edit = svntest.deeptrees.deep_trees_after_leaf_edit
+disk_after_leaf_del = svntest.deeptrees.deep_trees_after_leaf_del
+disk_after_tree_del = svntest.deeptrees.deep_trees_after_tree_del
-disk_empty_dirs = svntest.actions.deep_trees_empty_dirs
+disk_empty_dirs = svntest.deeptrees.deep_trees_empty_dirs
-deep_trees_conflict_output = svntest.actions.deep_trees_conflict_output
+deep_trees_conflict_output = svntest.deeptrees.deep_trees_conflict_output
deep_trees_conflict_output_skipped = \
- svntest.actions.deep_trees_conflict_output_skipped
+ svntest.deeptrees.deep_trees_conflict_output_skipped
deep_trees_status_local_tree_del = \
- svntest.actions.deep_trees_status_local_tree_del
+ svntest.deeptrees.deep_trees_status_local_tree_del
deep_trees_status_local_leaf_edit = \
- svntest.actions.deep_trees_status_local_leaf_edit
+ svntest.deeptrees.deep_trees_status_local_leaf_edit
-DeepTreesTestCase = svntest.actions.DeepTreesTestCase
+DeepTreesTestCase = svntest.deeptrees.DeepTreesTestCase
def tree_conflicts_on_update_1_1(sbox):
@@ -4211,10 +4224,9 @@ def tree_conflicts_on_update_1_1(sbox):
})
expected_disk = disk_empty_dirs.copy()
- if svntest.main.wc_is_singledb(sbox.wc_dir):
- expected_disk.remove('D/D1', 'DF/D1', 'DD/D1', 'DD/D1/D2',
- 'DDF/D1', 'DDF/D1/D2',
- 'DDD/D1', 'DDD/D1/D2', 'DDD/D1/D2/D3')
+ expected_disk.remove('D/D1', 'DF/D1', 'DD/D1', 'DD/D1/D2',
+ 'DDF/D1', 'DDF/D1/D2',
+ 'DDD/D1', 'DDD/D1/D2', 'DDD/D1/D2/D3')
# The files delta, epsilon, and zeta are incoming additions, but since
# they are all within locally deleted trees they should also be schedule
@@ -4232,43 +4244,43 @@ def tree_conflicts_on_update_1_1(sbox):
expected_info = {
'F/alpha' : {
'Tree conflict' :
- '^local delete, incoming edit upon update'
+ '^local file delete, incoming file edit upon update'
+ ' Source left: .file.*/F/alpha@2'
+ ' Source right: .file.*/F/alpha@3$',
},
'DF/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon update'
+ '^local dir delete, incoming dir edit upon update'
+ ' Source left: .dir.*/DF/D1@2'
+ ' Source right: .dir.*/DF/D1@3$',
},
'DDF/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon update'
+ '^local dir delete, incoming dir edit upon update'
+ ' Source left: .dir.*/DDF/D1@2'
+ ' Source right: .dir.*/DDF/D1@3$',
},
'D/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon update'
+ '^local dir delete, incoming dir edit upon update'
+ ' Source left: .dir.*/D/D1@2'
+ ' Source right: .dir.*/D/D1@3$',
},
'DD/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon update'
+ '^local dir delete, incoming dir edit upon update'
+ ' Source left: .dir.*/DD/D1@2'
+ ' Source right: .dir.*/DD/D1@3$',
},
'DDD/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon update'
+ '^local dir delete, incoming dir edit upon update'
+ ' Source left: .dir.*/DDD/D1@2'
+ ' Source right: .dir.*/DDD/D1@3$',
},
}
- svntest.actions.deep_trees_run_tests_scheme_for_update(sbox,
+ svntest.deeptrees.deep_trees_run_tests_scheme_for_update(sbox,
[ DeepTreesTestCase("local_tree_del_incoming_leaf_edit",
tree_del,
leaf_edit,
@@ -4321,52 +4333,51 @@ def tree_conflicts_on_update_1_2(sbox):
### Why does the deep trees state not include files?
expected_disk.remove('D/D1',
'DD/D1/D2',
- 'DDD/D1/D2/D3')
- if svntest.main.wc_is_singledb(sbox.wc_dir):
- expected_disk.remove('DF/D1', 'DD/D1',
- 'DDF/D1', 'DDF/D1/D2',
- 'DDD/D1', 'DDD/D1/D2')
+ 'DDD/D1/D2/D3',
+ 'DF/D1', 'DD/D1',
+ 'DDF/D1', 'DDF/D1/D2',
+ 'DDD/D1', 'DDD/D1/D2')
expected_info = {
'F/alpha' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local file delete, incoming file delete upon update'
+ ' Source left: .file.*/F/alpha@2'
- + ' Source right: .none.*/F/alpha@3$',
+ + ' Source right: .none.*(/F/alpha@3)?$',
},
'DF/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon update'
+ '^local dir delete, incoming dir edit upon update'
+ ' Source left: .dir.*/DF/D1@2'
+ ' Source right: .dir.*/DF/D1@3$',
},
'DDF/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon update'
+ '^local dir delete, incoming dir edit upon update'
+ ' Source left: .dir.*/DDF/D1@2'
+ ' Source right: .dir.*/DDF/D1@3$',
},
'D/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local dir delete, incoming dir delete upon update'
+ ' Source left: .dir.*/D/D1@2'
- + ' Source right: .none.*/D/D1@3$',
+ + ' Source right: .none.*(/D/D1@3)?$',
},
'DD/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon update'
+ '^local dir delete, incoming dir edit upon update'
+ ' Source left: .dir.*/DD/D1@2'
+ ' Source right: .dir.*/DD/D1@3$',
},
'DDD/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon update'
+ '^local dir delete, incoming dir edit upon update'
+ ' Source left: .dir.*/DDD/D1@2'
+ ' Source right: .dir.*/DDD/D1@3$',
},
}
- svntest.actions.deep_trees_run_tests_scheme_for_update(sbox,
+ svntest.deeptrees.deep_trees_run_tests_scheme_for_update(sbox,
[ DeepTreesTestCase("local_tree_del_incoming_leaf_del",
tree_del,
leaf_del,
@@ -4413,39 +4424,39 @@ def tree_conflicts_on_update_2_1(sbox):
expected_info = {
'F/alpha' : {
'Tree conflict' :
- '^local edit, incoming delete upon update'
+ '^local file edit, incoming file delete upon update'
+ ' Source left: .file.*/F/alpha@2'
- + ' Source right: .none.*/F/alpha@3$',
+ + ' Source right: .none.*(/F/alpha@3)?$',
},
'DF/D1' : {
'Tree conflict' :
- '^local edit, incoming delete upon update'
+ '^local dir edit, incoming dir delete upon update'
+ ' Source left: .dir.*/DF/D1@2'
- + ' Source right: .none.*/DF/D1@3$',
+ + ' Source right: .none.*(/DF/D1@3)?$',
},
'DDF/D1' : {
'Tree conflict' :
- '^local edit, incoming delete upon update'
+ '^local dir edit, incoming dir delete upon update'
+ ' Source left: .dir.*/DDF/D1@2'
- + ' Source right: .none.*/DDF/D1@3$',
+ + ' Source right: .none.*(/DDF/D1@3)?$',
},
'D/D1' : {
'Tree conflict' :
- '^local edit, incoming delete upon update'
+ '^local dir edit, incoming dir delete upon update'
+ ' Source left: .dir.*/D/D1@2'
- + ' Source right: .none.*/D/D1@3$',
+ + ' Source right: .none.*(/D/D1@3)?$',
},
'DD/D1' : {
'Tree conflict' :
- '^local edit, incoming delete upon update'
+ '^local dir edit, incoming dir delete upon update'
+ ' Source left: .dir.*/DD/D1@2'
- + ' Source right: .none.*/DD/D1@3$',
+ + ' Source right: .none.*(/DD/D1@3)?$',
},
'DDD/D1' : {
'Tree conflict' :
- '^local edit, incoming delete upon update'
+ '^local dir edit, incoming dir delete upon update'
+ ' Source left: .dir.*/DDD/D1@2'
- + ' Source right: .none.*/DDD/D1@3$',
+ + ' Source right: .none.*(/DDD/D1@3)?$',
},
}
@@ -4454,7 +4465,7 @@ def tree_conflicts_on_update_2_1(sbox):
### local-copy from its original revision. however, right now, we cannot
### denote that delta is a local-add rather than a child of that D/D1 copy.
### thus, it appears in the status output as a (M)odified child.
- svntest.actions.deep_trees_run_tests_scheme_for_update(sbox,
+ svntest.deeptrees.deep_trees_run_tests_scheme_for_update(sbox,
[ DeepTreesTestCase("local_leaf_edit_incoming_tree_del",
leaf_edit,
tree_del,
@@ -4477,7 +4488,7 @@ def tree_conflicts_on_update_2_2(sbox):
expected_disk = disk_empty_dirs.copy()
- expected_status = svntest.actions.deep_trees_virginal_state.copy()
+ expected_status = svntest.deeptrees.deep_trees_virginal_state.copy()
expected_status.add({'' : Item()})
expected_status.tweak(contents=None, status=' ', wc_rev=3)
# Tree conflicts.
@@ -4521,43 +4532,43 @@ def tree_conflicts_on_update_2_2(sbox):
expected_info = {
'F/alpha' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local file delete, incoming file delete upon update'
+ ' Source left: .file.*/F/alpha@2'
- + ' Source right: .none.*/F/alpha@3$',
+ + ' Source right: .none.*(/F/alpha@3)?$',
},
'DF/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local dir delete, incoming dir delete upon update'
+ ' Source left: .dir.*/DF/D1@2'
- + ' Source right: .none.*/DF/D1@3$',
+ + ' Source right: .none.*(/DF/D1@3)?$',
},
'DDF/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local dir delete, incoming dir delete upon update'
+ ' Source left: .dir.*/DDF/D1@2'
- + ' Source right: .none.*/DDF/D1@3$',
+ + ' Source right: .none.*(/DDF/D1@3)?$',
},
'D/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local dir delete, incoming dir delete upon update'
+ ' Source left: .dir.*/D/D1@2'
- + ' Source right: .none.*/D/D1@3$',
+ + ' Source right: .none.*(/D/D1@3)?$',
},
'DD/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local dir delete, incoming dir delete upon update'
+ ' Source left: .dir.*/DD/D1@2'
- + ' Source right: .none.*/DD/D1@3$',
+ + ' Source right: .none.*(/DD/D1@3)?$',
},
'DDD/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local dir delete, incoming dir delete upon update'
+ ' Source left: .dir.*/DDD/D1@2'
- + ' Source right: .none.*/DDD/D1@3$',
+ + ' Source right: .none.*(/DDD/D1@3)?$',
},
}
- svntest.actions.deep_trees_run_tests_scheme_for_update(sbox,
+ svntest.deeptrees.deep_trees_run_tests_scheme_for_update(sbox,
[ DeepTreesTestCase("local_leaf_del_incoming_tree_del",
leaf_del,
tree_del,
@@ -4629,7 +4640,7 @@ def tree_conflicts_on_update_2_3(sbox):
# tree-conflict on DDD/D1. ('D/D1', '') likewise, as tree-conflict
# information is stored in the parent of a victim directory.
- svntest.actions.deep_trees_skipping_on_update(sbox,
+ svntest.deeptrees.deep_trees_skipping_on_update(sbox,
DeepTreesTestCase("local_leaf_edit_incoming_tree_del_skipping",
leaf_edit,
tree_del,
@@ -4683,43 +4694,43 @@ def tree_conflicts_on_update_3(sbox):
expected_info = {
'F/alpha' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local file delete, incoming file delete upon update'
+ ' Source left: .file.*/F/alpha@2'
- + ' Source right: .none.*/F/alpha@3$',
+ + ' Source right: .none.*(/F/alpha@3)?$',
},
'DF/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local dir delete, incoming dir delete upon update'
+ ' Source left: .dir.*/DF/D1@2'
- + ' Source right: .none.*/DF/D1@3$',
+ + ' Source right: .none.*(/DF/D1@3)?$',
},
'DDF/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local dir delete, incoming dir delete upon update'
+ ' Source left: .dir.*/DDF/D1@2'
- + ' Source right: .none.*/DDF/D1@3$',
+ + ' Source right: .none.*(/DDF/D1@3)?$',
},
'D/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local dir delete, incoming dir delete upon update'
+ ' Source left: .dir.*/D/D1@2'
- + ' Source right: .none.*/D/D1@3$',
+ + ' Source right: .none.*(/D/D1@3)?$',
},
'DD/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local dir delete, incoming dir delete upon update'
+ ' Source left: .dir.*/DD/D1@2'
- + ' Source right: .none.*/DD/D1@3$',
+ + ' Source right: .none.*(/DD/D1@3)?$',
},
'DDD/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local dir delete, incoming dir delete upon update'
+ ' Source left: .dir.*/DDD/D1@2'
- + ' Source right: .none.*/DDD/D1@3$',
+ + ' Source right: .none.*(/DDD/D1@3)?$',
},
}
- svntest.actions.deep_trees_run_tests_scheme_for_update(sbox,
+ svntest.deeptrees.deep_trees_run_tests_scheme_for_update(sbox,
[ DeepTreesTestCase("local_tree_del_incoming_tree_del",
tree_del,
tree_del,
@@ -4757,7 +4768,7 @@ def tree_conflict_uc1_update_deleted_tree(sbox):
]]]
"""
- A = os.path.join(wc_dir, 'A')
+ A = sbox.ospath('A')
def modify_dir(dir):
"""Make some set of local modifications to an existing tree:
@@ -4990,9 +5001,9 @@ def set_deep_depth_on_target_with_shallow_children(sbox):
wc_dir = sbox.wc_dir
# Some paths we'll care about
- A_path = os.path.join(wc_dir, "A")
- B_path = os.path.join(wc_dir, "A", "B")
- D_path = os.path.join(wc_dir, "A", "D")
+ A_path = sbox.ospath('A')
+ B_path = sbox.ospath('A/B')
+ D_path = sbox.ospath('A/D')
# Trim the tree: Set A/B to depth empty and A/D to depth immediates.
expected_output = svntest.wc.State(wc_dir, {
@@ -5184,8 +5195,8 @@ def mergeinfo_updates_merge_with_local_mods(sbox):
expected_disk, expected_status = set_up_branch(sbox)
# Some paths we'll care about
- A_path = os.path.join(wc_dir, "A")
- A_COPY_path = os.path.join(wc_dir, "A_COPY")
+ A_path = sbox.ospath('A')
+ A_COPY_path = sbox.ospath('A_COPY')
# Merge -c3 from A to A_COPY at --depth empty, commit as r7.
###
@@ -5237,7 +5248,7 @@ def update_with_excluded_subdir(sbox):
wc_dir = sbox.wc_dir
- G = os.path.join(os.path.join(wc_dir, 'A', 'D', 'G'))
+ G = os.path.join(sbox.ospath('A/D/G'))
# Make the directory 'G' excluded.
expected_output = svntest.wc.State(wc_dir, {
@@ -5275,7 +5286,7 @@ def update_with_file_lock_and_keywords_property_set(sbox):
wc_dir = sbox.wc_dir
- mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_path = sbox.ospath('A/mu')
svntest.main.file_append(mu_path, '$Id$')
svntest.main.run_svn(None, 'ps', 'svn:keywords', 'Id', mu_path)
svntest.main.run_svn(None, 'lock', mu_path)
@@ -5289,7 +5300,7 @@ def update_with_file_lock_and_keywords_property_set(sbox):
sbox.simple_update()
mu_ts_after_update = os.path.getmtime(mu_path)
if (mu_ts_before_update != mu_ts_after_update):
- print("The timestamp of 'mu' before and after update does not match.")
+ logger.warn("The timestamp of 'mu' before and after update does not match.")
raise svntest.Failure
#----------------------------------------------------------------------
@@ -5397,12 +5408,1376 @@ def update_to_HEAD_plus_1(sbox):
sbox.build(read_only = True)
wc_dir = sbox.wc_dir
+ # Attempt the update, expecting an error. (Sometimes the error
+ # strings says "No such revision", sometimes "No such target
+ # revision".)
svntest.actions.run_and_verify_update(wc_dir,
None, None, None,
- ".*No such revision",
+ "E160006.*No such.*revision",
None, None,
None, None, None, wc_dir, '-r', '2')
+ other_wc = sbox.add_wc_path('other')
+ other_url = sbox.repo_url + '/A'
+ svntest.actions.run_and_verify_svn("subtree checkout", None, [],
+ 'co', other_url, other_wc)
+ svntest.actions.run_and_verify_update(other_wc,
+ None, None, None,
+ "E160006.*No such.*revision",
+ None, None,
+ None, None, None, other_wc, '-r', '2')
+
+def update_moved_dir_leaf_del(sbox):
+ "update locally moved dir with leaf del"
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ svntest.main.run_svn(False, 'rm', '-m', 'remove /A/B/E/alpha',
+ sbox.repo_url + "/A/B/E/alpha")
+ sbox.simple_move("A/B/E", "A/B/E2")
+
+ # Produce a tree conflict by updating the working copy to the
+ # revision which removed A/B/E/alpha. The deletion collides with
+ # the local move of A/B/E to A/B/E2.
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/B/E' : Item(status=' ', treeconflict='C'),
+ 'A/B/E/alpha' : Item(status=' ', treeconflict='D'),
+ })
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.remove('A/B/E/alpha', 'A/B/E/beta', 'A/B/E')
+ expected_disk.add({
+ 'A/B/E2' : Item(),
+ 'A/B/E2/alpha' : Item(contents="This is the file 'alpha'.\n"),
+ 'A/B/E2/beta' : Item(contents="This is the file 'beta'.\n"),
+ })
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
+ expected_status.add({
+ 'A/B/E2' : Item(status='A ', copied='+', wc_rev='-',
+ moved_from='A/B/E'),
+ 'A/B/E2/beta' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A/B/E2/alpha' : Item(status=' ', copied='+', wc_rev='-'),
+ })
+ expected_status.remove('A/B/E/alpha')
+ expected_status.tweak('A/B/E', status='D ', treeconflict='C',
+ moved_to='A/B/E2')
+ expected_status.tweak('A/B/E/beta', status='D ')
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None,
+ None, None, 1)
+
+ # Now resolve the conflict, using --accept=mine-conflict applying
+ # the update to A/B/E2
+ svntest.actions.run_and_verify_svn("resolve failed", None, [],
+ 'resolve',
+ '--accept=mine-conflict',
+ sbox.ospath('A/B/E'))
+ expected_status.tweak('A/B/E', treeconflict=None)
+ expected_status.remove('A/B/E2/alpha')
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+@Issue(3144,3630)
+# Like break_moved_dir_edited_leaf_del, but with --accept=mine-conflict
+def update_moved_dir_edited_leaf_del(sbox):
+ "update locally moved dir with edited leaf del"
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ svntest.main.run_svn(False, 'rm', '-m', 'remove /A/B/E/alpha',
+ sbox.repo_url + "/A/B/E/alpha")
+ sbox.simple_move("A/B/E", "A/B/E2")
+ svntest.main.file_write(sbox.ospath('A/B/E2/alpha'),
+ "This is a changed 'alpha'.\n")
+
+ # Produce a tree conflict by updating the working copy to the
+ # revision which removed A/B/E/alpha. The deletion collides with
+ # the local move of A/B/E to A/B/E2.
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/B/E' : Item(status=' ', treeconflict='C'),
+ 'A/B/E/alpha' : Item(status=' ', treeconflict='D'),
+ })
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.remove('A/B/E/alpha', 'A/B/E/beta', 'A/B/E')
+ expected_disk.add({
+ 'A/B/E2' : Item(),
+ 'A/B/E2/alpha' : Item(contents="This is a changed 'alpha'.\n"),
+ 'A/B/E2/beta' : Item(contents="This is the file 'beta'.\n"),
+ })
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
+ expected_status.add({
+ 'A/B/E2' : Item(status='A ', copied='+', wc_rev='-',
+ moved_from='A/B/E'),
+ 'A/B/E2/beta' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A/B/E2/alpha' : Item(status='M ', copied='+', wc_rev='-'),
+ })
+ expected_status.remove('A/B/E/alpha')
+ expected_status.tweak('A/B/E', status='D ', treeconflict='C',
+ moved_to='A/B/E2')
+ expected_status.tweak('A/B/E/beta', status='D ')
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None,
+ None, None, 1)
+
+ # Now resolve the conflict, using --accept=mine-conflict.
+ # This should apply the update to A/B/E2, and flag a tree
+ # conflict on A/B/E2/alpha (incoming delete vs. local edit)
+ svntest.actions.run_and_verify_svn("resolve failed", None, [],
+ 'resolve',
+ '--accept=mine-conflict',
+ sbox.ospath('A/B/E'))
+ expected_status.tweak('A/B/E', treeconflict=None)
+ expected_status.tweak('A/B/E2/alpha', status='A ', copied='+', wc_rev='-',
+ entry_status=' ', treeconflict='C')
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+def update_moved_dir_file_add(sbox):
+ "update locally moved dir with incoming file"
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ foo_path = "A/B/E/foo"
+ foo_content = "This is the file 'foo'.\n"
+
+ svntest.main.file_write(sbox.ospath(foo_path), foo_content, 'wb')
+ sbox.simple_add(foo_path)
+ sbox.simple_commit()
+ # update to go back in time, before the last commit
+ svntest.main.run_svn(False, 'update', '-r', '1', wc_dir)
+ sbox.simple_move("A/B/E", "A/B/E2")
+
+ # Produce a tree conflict by updating the working copy to the
+ # revision which created A/B/E/foo. The addition collides with
+ # the local move of A/B/E to A/B/E2.
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/B/E' : Item(status=' ', treeconflict='C'),
+ 'A/B/E/foo' : Item(status=' ', treeconflict='A'),
+ })
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.remove('A/B/E/alpha', 'A/B/E/beta', 'A/B/E')
+ expected_disk.add({
+ 'A/B/E2' : Item(),
+ 'A/B/E2/alpha' : Item(contents="This is the file 'alpha'.\n"),
+ 'A/B/E2/beta' : Item(contents="This is the file 'beta'.\n"),
+ })
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
+ expected_status.add({
+ 'A/B/E/foo' : Item(status='D ', wc_rev='2'),
+ 'A/B/E2' : Item(status='A ', copied='+', wc_rev='-',
+ moved_from='A/B/E'),
+ 'A/B/E2/beta' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A/B/E2/alpha' : Item(status=' ', copied='+', wc_rev='-'),
+ })
+ expected_status.tweak('A/B/E', status='D ', treeconflict='C',
+ moved_to='A/B/E2')
+ expected_status.tweak('A/B/E/alpha', status='D ')
+ expected_status.tweak('A/B/E/beta', status='D ')
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None,
+ None, None, 1)
+
+ # Now resolve the conflict, using --accept=mine-conflict.
+ # This should apply the update to A/B/E2, adding A/B/E2/foo.
+ svntest.actions.run_and_verify_svn("resolve failed", None, [],
+ 'resolve',
+ '--accept=mine-conflict',
+ sbox.ospath('A/B/E'))
+ # the incoming file should auto-merge
+ expected_status.tweak('A/B/E', treeconflict=None)
+ expected_status.add({
+ 'A/B/E2/foo' : Item(status=' ', copied='+', wc_rev='-'),
+ })
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+
+def update_moved_dir_dir_add(sbox):
+ "update locally moved dir with incoming dir"
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ foo_path = "A/B/E/foo"
+ bar_path = "A/B/E/foo/bar"
+ bar_content = "This is the file 'bar'.\n"
+
+ sbox.simple_mkdir(foo_path)
+ svntest.main.file_write(sbox.ospath(bar_path), bar_content, 'wb')
+ sbox.simple_add(bar_path)
+ sbox.simple_commit()
+ # update to go back in time, before the last commit
+ svntest.main.run_svn(False, 'update', '-r', '1', wc_dir)
+ sbox.simple_move("A/B/E", "A/B/E2")
+
+ # the incoming file should auto-merge
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/B/E' : Item(status=' ', treeconflict='C'),
+ 'A/B/E/foo' : Item(status=' ', treeconflict='A'),
+ 'A/B/E/foo/bar' : Item(status=' ', treeconflict='A'),
+ })
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.remove('A/B/E/alpha', 'A/B/E/beta', 'A/B/E')
+ expected_disk.add({
+ 'A/B/E2' : Item(),
+ 'A/B/E2/alpha' : Item(contents="This is the file 'alpha'.\n"),
+ 'A/B/E2/beta' : Item(contents="This is the file 'beta'.\n"),
+ })
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
+ expected_status.tweak('A/B/E', 'A/B/E/alpha', 'A/B/E/beta', status='D ')
+ expected_status.tweak('A/B/E', treeconflict='C', moved_to='A/B/E2')
+ expected_status.add({
+ 'A/B/E/foo' : Item(status='D ', wc_rev='2'),
+ 'A/B/E/foo/bar' : Item(status='D ', wc_rev='2'),
+ 'A/B/E2' : Item(status='A ', copied='+', wc_rev='-',
+ moved_from='A/B/E'),
+ 'A/B/E2/beta' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A/B/E2/alpha' : Item(status=' ', copied='+', wc_rev='-'),
+ })
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None,
+ None, None, 1)
+ svntest.actions.run_and_verify_svn("resolve failed", None, [],
+ 'resolve',
+ '--recursive',
+ '--accept=mine-conflict', wc_dir)
+ expected_status.tweak(treeconflict=None)
+ expected_status.add({
+ 'A/B/E2/foo' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A/B/E2/foo/bar' : Item(status=' ', copied='+', wc_rev='-'),
+ })
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+@Issue(4037)
+def update_moved_dir_file_move(sbox):
+ "update locally moved dir with incoming file move"
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ sbox.simple_move("A/B/E/alpha", "A/B/F/alpha")
+ sbox.simple_commit()
+ # update to go back in time, before the previous commit
+ svntest.main.run_svn(False, 'update', '-r', '1', wc_dir)
+ sbox.simple_move("A/B/E", "A/B/E2")
+
+ # The incoming "move" creates a tree-conflict as an incoming change
+ # in a local move. We don't yet track moves on the server so we
+ # don't recognise the incoming change as a move.
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/B/E' : Item(status=' ', treeconflict='C'),
+ 'A/B/E/alpha' : Item(status=' ', treeconflict='D'),
+ 'A/B/F/alpha' : Item(status='A '),
+ })
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.remove('A/B/E/alpha', 'A/B/E/beta', 'A/B/E')
+ expected_disk.add({
+ 'A/B/E2' : Item(),
+ 'A/B/E2/alpha' : Item(contents="This is the file 'alpha'.\n"),
+ 'A/B/E2/beta' : Item(contents="This is the file 'beta'.\n"),
+ 'A/B/F/alpha' : Item(contents="This is the file 'alpha'.\n"),
+ })
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
+ expected_status.remove('A/B/E/alpha')
+ expected_status.tweak('A/B/E', status='D ', treeconflict='C',
+ moved_to='A/B/E2')
+ expected_status.tweak('A/B/E/beta', status='D ')
+ expected_status.add({
+ 'A/B/F/alpha' : Item(status=' ', wc_rev='2'),
+ 'A/B/E2' : Item(status='A ', copied='+', wc_rev='-',
+ moved_from='A/B/E'),
+ 'A/B/E2/alpha' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A/B/E2/beta' : Item(status=' ', copied='+', wc_rev='-'),
+ })
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None,
+ None, None, 1)
+
+ # The incoming change is a delete as we don't yet track server-side
+ # moves. Resolving the tree-conflict as "mine-conflict" applies the
+ # delete to the move destination.
+ svntest.actions.run_and_verify_svn("resolve failed", None, [],
+ 'resolve',
+ '--accept=mine-conflict',
+ sbox.ospath('A/B/E'))
+
+ expected_status.tweak('A/B/E', treeconflict=None)
+ expected_status.remove('A/B/E2/alpha')
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+
+@Issue(3144,3630)
+def update_move_text_mod(sbox):
+ "text mod to moved files"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ svntest.main.file_append(sbox.ospath('A/B/lambda'), "modified\n")
+ svntest.main.file_append(sbox.ospath('A/B/E/beta'), "modified\n")
+ sbox.simple_commit()
+ sbox.simple_update(revision=1)
+
+ sbox.simple_move("A/B/E", "A/E2")
+ sbox.simple_move("A/B/lambda", "A/lambda2")
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('A/B/E', 'A/B/E/alpha', 'A/B/E/beta', 'A/B/lambda',
+ status='D ')
+ expected_status.tweak('A/B/E', moved_to='A/E2')
+ expected_status.tweak('A/B/lambda', moved_to='A/lambda2')
+ expected_status.add({
+ 'A/E2' : Item(status='A ', copied='+', wc_rev='-',
+ moved_from='A/B/E'),
+ 'A/E2/alpha' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A/E2/beta' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A/lambda2' : Item(status='A ', copied='+', wc_rev='-',
+ moved_from='A/B/lambda'),
+ })
+
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/B/lambda' : Item(status=' ', treeconflict='C'),
+ 'A/B/E' : Item(status=' ', treeconflict='C'),
+ 'A/B/E/beta' : Item(status=' ', treeconflict='U'),
+ })
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.remove('A/B/E/alpha', 'A/B/E/beta', 'A/B/E', 'A/B/lambda')
+ expected_disk.add({
+ 'A/E2' : Item(),
+ 'A/E2/alpha' : Item(contents="This is the file 'alpha'.\n"),
+ 'A/E2/beta' : Item(contents="This is the file 'beta'.\n"),
+ 'A/lambda2' : Item(contents="This is the file 'lambda'.\n"),
+ })
+ expected_status.tweak(wc_rev=2)
+ expected_status.tweak('A/B/E', 'A/B/lambda', treeconflict='C')
+ expected_status.tweak('A/E2', 'A/E2/alpha', 'A/E2/beta', 'A/lambda2',
+ wc_rev='-')
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None,
+ None, None, 1)
+
+ svntest.actions.run_and_verify_svn("resolve failed", None, [],
+ 'resolve',
+ '--recursive',
+ '--accept=mine-conflict',
+ wc_dir)
+
+ expected_status.tweak('A/B/E', 'A/B/lambda', treeconflict=None)
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ expected_disk.tweak('A/E2/beta',
+ contents="This is the file 'beta'.\nmodified\n"),
+ expected_disk.tweak('A/lambda2',
+ contents="This is the file 'lambda'.\nmodified\n"),
+ svntest.actions.verify_disk(wc_dir, expected_disk, check_props = True)
+
+
+@Issue(3144,3630)
+def update_nested_move_text_mod(sbox):
+ "text mod to moved file in moved dir"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ svntest.main.file_append(sbox.ospath('A/B/E/alpha'), "modified\n")
+ sbox.simple_commit()
+ sbox.simple_update(revision=1)
+
+ sbox.simple_move("A/B/E", "A/E2")
+ sbox.simple_move("A/E2/alpha", "A/alpha2")
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('A/B/E', 'A/B/E/alpha', 'A/B/E/beta', status='D ')
+ expected_status.tweak('A/B/E', moved_to='A/E2')
+ expected_status.add({
+ 'A/E2' : Item(status='A ', copied='+', wc_rev='-',
+ moved_from='A/B/E'),
+ 'A/E2/alpha' : Item(status='D ', copied='+', wc_rev='-',
+ moved_to='A/alpha2'),
+ 'A/E2/beta' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A/alpha2' : Item(status='A ', copied='+', wc_rev='-',
+ moved_from='A/E2/alpha'),
+ })
+
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/B/E' : Item(status=' ', treeconflict='C'),
+ 'A/B/E/alpha' : Item(status=' ', treeconflict='U'),
+ })
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.remove('A/B/E/alpha', 'A/B/E/beta', 'A/B/E')
+ expected_disk.add({
+ 'A/E2' : Item(),
+ 'A/E2/beta' : Item(contents="This is the file 'beta'.\n"),
+ 'A/alpha2' : Item(contents="This is the file 'alpha'.\n"),
+ })
+ expected_status.tweak(wc_rev=2)
+ expected_status.tweak('A/B/E', treeconflict='C')
+ expected_status.tweak('A/E2', 'A/E2/alpha', 'A/E2/beta', 'A/alpha2',
+ wc_rev='-')
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None,
+ None, None, 1)
+
+ svntest.actions.run_and_verify_svn("resolve failed", None, [],
+ 'resolve',
+ '--recursive',
+ '--accept=mine-conflict',
+ wc_dir)
+
+ expected_status.tweak('A/B/E', treeconflict=None)
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ expected_disk.tweak('A/alpha2',
+ contents="This is the file 'alpha'.\nmodified\n"),
+ svntest.actions.verify_disk(wc_dir, expected_disk, check_props = True)
+
+def update_with_parents_and_exclude(sbox):
+ "bring a subtree in over an excluded path"
+
+ sbox.build(read_only = True)
+ wc_dir = sbox.wc_dir
+
+ # Now we are going to exclude A
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A' : Item(status='D '),
+ })
+
+ expected_status = svntest.wc.State(wc_dir, {
+ '' : Item(status=' ', wc_rev='1'),
+ 'iota' : Item(status=' ', wc_rev='1'),
+ })
+
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ None,
+ expected_status,
+ None, None, None,
+ None, None, False,
+ '--set-depth', 'exclude',
+ sbox.ospath('A'))
+
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A' : Item(status='A '),
+ 'A/B' : Item(status='A '),
+ 'A/B/F' : Item(status='A '),
+ 'A/B/E' : Item(status='A '),
+ 'A/B/E/beta' : Item(status='A '),
+ 'A/B/E/alpha' : Item(status='A '),
+ 'A/B/lambda' : Item(status='A '),
+ })
+
+ expected_status = svntest.wc.State(wc_dir, {
+ '' : Item(status=' ', wc_rev='1'),
+ 'A' : Item(status=' ', wc_rev='1'),
+ 'A/B' : Item(status=' ', wc_rev='1'),
+ 'A/B/F' : Item(status=' ', wc_rev='1'),
+ 'A/B/E' : Item(status=' ', wc_rev='1'),
+ 'A/B/E/beta' : Item(status=' ', wc_rev='1'),
+ 'A/B/E/alpha' : Item(status=' ', wc_rev='1'),
+ 'A/B/lambda' : Item(status=' ', wc_rev='1'),
+ 'iota' : Item(status=' ', wc_rev='1'),
+ })
+
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ None,
+ expected_status,
+ None, None, None,
+ None, None, False,
+ '--parents',
+ sbox.ospath('A/B'))
+
+@Issue(4288)
+def update_edit_delete_obstruction(sbox):
+ "obstructions shouldn't cause update failures"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # r2
+ sbox.simple_rm('A/B','iota')
+ svntest.main.file_append(sbox.ospath('A/mu'), "File change")
+ sbox.simple_propset('key', 'value', 'A/D', 'A/D/G')
+ sbox.simple_commit()
+
+ # r3
+ sbox.simple_mkdir('iota')
+ sbox.simple_copy('A/D/gamma', 'A/B')
+ sbox.simple_rm('A/D/H/chi')
+ sbox.simple_commit()
+
+ sbox.simple_update('', 1)
+
+ # Create obstructions
+ svntest.main.safe_rmtree(sbox.ospath('A/B'))
+ svntest.main.file_append(sbox.ospath('A/B'), "Obstruction")
+
+ svntest.main.safe_rmtree(sbox.ospath('A/D'))
+ svntest.main.file_append(sbox.ospath('A/D'), "Obstruction")
+
+ os.remove(sbox.ospath('iota'))
+ os.mkdir(sbox.ospath('iota'))
+
+ os.remove(sbox.ospath('A/mu'))
+ os.mkdir(sbox.ospath('A/mu'))
+
+ expected_status = svntest.wc.State(wc_dir, {
+ '' : Item(status=' ', wc_rev='2'),
+ 'A' : Item(status=' ', wc_rev='2'),
+ 'A/mu' : Item(status='~ ', treeconflict='C', wc_rev='2'),
+ 'A/D' : Item(status='~ ', treeconflict='C', wc_rev='2'),
+ 'A/D/G' : Item(status='! ', wc_rev='2'),
+ 'A/D/G/pi' : Item(status='! ', wc_rev='2'),
+ 'A/D/G/tau' : Item(status='! ', wc_rev='2'),
+ 'A/D/G/rho' : Item(status='! ', wc_rev='2'),
+ 'A/D/H' : Item(status='! ', wc_rev='2'),
+ 'A/D/H/omega' : Item(status='! ', wc_rev='2'),
+ 'A/D/H/chi' : Item(status='! ', wc_rev='2'),
+ 'A/D/H/psi' : Item(status='! ', wc_rev='2'),
+ 'A/D/gamma' : Item(status='! ', wc_rev='2'),
+ 'A/C' : Item(status=' ', wc_rev='2'),
+ 'A/B' : Item(status='~ ', treeconflict='C', wc_rev='-',
+ entry_status='A ', entry_copied='+'),
+ 'A/B/F' : Item(status='! ', wc_rev='-', entry_copied='+'),
+ 'A/B/E' : Item(status='! ', wc_rev='-', entry_copied='+'),
+ 'A/B/E/beta' : Item(status='! ', wc_rev='-', entry_copied='+'),
+ 'A/B/E/alpha' : Item(status='! ', wc_rev='-', entry_copied='+'),
+ 'A/B/lambda' : Item(status='! ', wc_rev='-', entry_copied='+'),
+ 'iota' : Item(status='~ ', treeconflict='C', wc_rev='-',
+ entry_status='A ', entry_copied='+'),
+ })
+ expected_disk = svntest.wc.State('', {
+ 'A/D' : Item(contents="Obstruction", props={'key':'value'}),
+ 'A/C' : Item(),
+ 'A/B' : Item(contents="Obstruction"),
+ 'A/mu' : Item(),
+ 'iota' : Item(),
+ })
+
+ expected_output = svntest.wc.State(wc_dir, {
+ 'iota' : Item(status=' ', treeconflict='C'),
+ 'A/mu' : Item(status=' ', treeconflict='C'),
+ 'A/D' : Item(status=' ', treeconflict='C'),
+ 'A/D/G' : Item(status=' ', treeconflict='U'),
+ 'A/B' : Item(status=' ', treeconflict='C'),
+ })
+
+ # And now update to delete B and iota
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None,
+ None, None, 1,
+ '-r', '2', wc_dir)
+
+ # Cleanup obstructions
+ os.remove(sbox.ospath('A/B'))
+ os.remove(sbox.ospath('A/D'))
+ os.rmdir(sbox.ospath('iota'))
+ os.rmdir(sbox.ospath('A/mu'))
+
+ # Revert to remove working nodes and tree conflicts
+ svntest.actions.run_and_verify_svn('Reverting', None, [],
+ 'revert', '-R',
+ sbox.ospath('A/B'),
+ sbox.ospath('A/mu'),
+ sbox.ospath('A/D'),
+ sbox.ospath('iota'))
+ sbox.simple_update('', 1)
+
+ # Now obstruct A (as parent of the changed node), and retry
+ svntest.main.safe_rmtree(sbox.ospath('A'))
+ svntest.main.file_append(sbox.ospath('A'), "Obstruction")
+
+ # And now update to delete B and iota
+
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A' : Item(status=' ', treeconflict='C'),
+ 'A/mu' : Item(status=' ', treeconflict='U'),
+ 'A/D' : Item(status=' ', treeconflict='U'),
+ 'A/D/G' : Item(status=' ', treeconflict='U'),
+ 'A/D/H' : Item(status=' ', treeconflict='U'),
+ 'A/D/H/chi' : Item(status=' ', treeconflict='D'),
+ 'A/B' : Item(prev_status=' ', prev_treeconflict='D', # Replacement
+ status=' ', treeconflict='A'),
+ 'iota' : Item(status='A ', prev_status='D '), # Replacement
+ })
+
+ expected_disk = svntest.wc.State('', {
+ 'A' : Item(contents="Obstruction"),
+ 'iota' : Item(),
+ })
+
+ expected_status = svntest.wc.State(wc_dir, {
+ '' : Item(status=' ', wc_rev='3'),
+ 'A' : Item(status='~ ', treeconflict='C', wc_rev='3'),
+ 'A/mu' : Item(status='! ', wc_rev='3'),
+ 'A/D' : Item(status='! ', wc_rev='3'),
+ 'A/D/G' : Item(status='! ', wc_rev='3'),
+ 'A/D/G/rho' : Item(status='! ', wc_rev='3'),
+ 'A/D/G/pi' : Item(status='! ', wc_rev='3'),
+ 'A/D/G/tau' : Item(status='! ', wc_rev='3'),
+ 'A/D/gamma' : Item(status='! ', wc_rev='3'),
+ 'A/D/H' : Item(status='! ', wc_rev='3'),
+ 'A/D/H/psi' : Item(status='! ', wc_rev='3'),
+ 'A/D/H/omega' : Item(status='! ', wc_rev='3'),
+ 'A/C' : Item(status='! ', wc_rev='3'),
+ 'A/B' : Item(status='! ', wc_rev='3'),
+ 'iota' : Item(status=' ', wc_rev='3'),
+ })
+
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None,
+ None, None, 1,
+ '-r', '3', wc_dir)
+
+def update_deleted(sbox):
+ "update a deleted tree"
+
+ sbox.build(read_only = True)
+ wc_dir = sbox.wc_dir
+ sbox.simple_rm('A')
+
+ expected_output = svntest.wc.State(wc_dir, {
+ })
+
+ expected_status = svntest.wc.State(wc_dir, {
+ })
+
+ # This runs an update anchored on A, which is deleted. The update editor
+ # shouldn't look at the ACTUAL/WORKING data in this case, but in 1.7 it did.
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ None,
+ None,
+ None, None, None,
+ None, None, 1,
+ sbox.ospath('A/B'))
+
+@Issue(3144,3630)
+# Like update_moved_dir_edited_leaf_del, but with --accept=theirs-conflict
+def break_moved_dir_edited_leaf_del(sbox):
+ "break local move of dir with edited leaf del"
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ svntest.main.run_svn(False, 'rm', '-m', 'remove /A/B/E/alpha',
+ sbox.repo_url + "/A/B/E/alpha")
+ sbox.simple_move("A/B/E", "A/B/E2")
+ svntest.main.file_write(sbox.ospath('A/B/E2/alpha'),
+ "This is a changed 'alpha'.\n")
+
+ # Produce a tree conflict by updating the working copy to the
+ # revision which removed A/B/E/alpha. The deletion collides with
+ # the local move of A/B/E to A/B/E2.
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/B/E' : Item(status=' ', treeconflict='C'),
+ 'A/B/E/alpha' : Item(status=' ', treeconflict='D'),
+ })
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.remove('A/B/E/alpha', 'A/B/E/beta', 'A/B/E')
+ expected_disk.add({
+ 'A/B/E2' : Item(),
+ 'A/B/E2/alpha' : Item(contents="This is a changed 'alpha'.\n"),
+ 'A/B/E2/beta' : Item(contents="This is the file 'beta'.\n"),
+ })
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
+ expected_status.add({
+ 'A/B/E2' : Item(status='A ', copied='+', wc_rev='-',
+ moved_from='A/B/E'),
+ 'A/B/E2/beta' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A/B/E2/alpha' : Item(status='M ', copied='+', wc_rev='-'),
+ })
+ expected_status.remove('A/B/E/alpha')
+ expected_status.tweak('A/B/E', status='D ', treeconflict='C',
+ moved_to='A/B/E2')
+ expected_status.tweak('A/B/E/beta', status='D ')
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None,
+ None, None, 1)
+
+ # Now resolve the conflict, using --accept=working
+ # This should break the move of A/B/E to A/B/E2, leaving A/B/E2
+ # as a copy. The deletion of A/B/E is not reverted.
+ svntest.actions.run_and_verify_svn("resolve failed", None, [],
+ 'resolve', '--recursive',
+ '--accept=working', wc_dir)
+ expected_status.tweak('A/B/E', treeconflict=None, moved_to=None)
+ expected_status.tweak('A/B/E2', moved_from=None)
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+@Issue(3144,3630)
+def break_moved_replaced_dir(sbox):
+ "break local move of dir plus replace"
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ svntest.main.run_svn(False, 'rm', '-m', 'remove /A/B/E/alpha',
+ sbox.repo_url + "/A/B/E/alpha")
+ sbox.simple_move("A/B/E", "A/B/E2")
+ svntest.main.file_write(sbox.ospath('A/B/E2/alpha'),
+ "This is a changed 'alpha'.\n")
+
+ # Locally replace A/B/E with something else
+ sbox.simple_copy('A/D/H', 'A/B/E')
+
+ # Produce a tree conflict by updating the working copy to the
+ # revision which removed A/B/E/alpha. The deletion collides with
+ # the local move of A/B/E to A/B/E2.
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/B/E' : Item(status=' ', treeconflict='C'),
+ 'A/B/E/alpha' : Item(status=' ', treeconflict='D'),
+ })
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.remove('A/B/E/alpha', 'A/B/E/beta')
+ expected_disk.add({
+ 'A/B/E/chi' : Item(contents="This is the file 'chi'.\n"),
+ 'A/B/E/psi' : Item(contents="This is the file 'psi'.\n"),
+ 'A/B/E/omega' : Item(contents="This is the file 'omega'.\n"),
+ 'A/B/E2' : Item(),
+ 'A/B/E2/alpha' : Item(contents="This is a changed 'alpha'.\n"),
+ 'A/B/E2/beta' : Item(contents="This is the file 'beta'.\n"),
+ })
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
+ expected_status.add({
+ 'A/B/E/chi' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A/B/E/psi' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A/B/E/omega' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A/B/E2' : Item(status='A ', copied='+', wc_rev='-',
+ moved_from='A/B/E'),
+ 'A/B/E2/beta' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A/B/E2/alpha' : Item(status='M ', copied='+', wc_rev='-'),
+ })
+ expected_status.remove('A/B/E/alpha')
+ expected_status.tweak('A/B/E', status='R ', copied='+', wc_rev='-',
+ treeconflict='C', moved_to='A/B/E2')
+ expected_status.tweak('A/B/E/beta', status='D ')
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None,
+ None, None, 1)
+
+ # Now resolve the conflict, using --accept=working
+ # This should break the move of A/B/E to A/B/E2, leaving A/B/E2
+ # as a copy. A/B/E is not reverted.
+ svntest.actions.run_and_verify_svn("resolve failed", None, [],
+ 'resolve', '--recursive',
+ '--accept=working', wc_dir)
+ expected_status.tweak('A/B/E2', moved_from=None)
+ expected_status.tweak('A/B/E', treeconflict=None, moved_to=None)
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+@Issue(4295)
+def update_removes_switched(sbox):
+ "update completely removes switched node"
+
+ sbox.build(create_wc = False)
+
+ wc_dir = sbox.wc_dir
+ repo_url = sbox.repo_url
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'cp', repo_url + '/A',
+ repo_url + '/AA', '-m', 'Q')
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'co', repo_url + '/A', sbox.wc_dir)
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'switch', repo_url + '/AA/B',
+ wc_dir + '/B')
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'rm', repo_url + '/AA/B', '-m', 'Q')
+
+ expected_output = svntest.wc.State(wc_dir, {
+ 'B' : Item(status='D '),
+ })
+ expected_status = svntest.wc.State(wc_dir, {
+ '' : Item(status=' ', wc_rev='3'),
+ 'D' : Item(status=' ', wc_rev='3'),
+ 'D/G' : Item(status=' ', wc_rev='3'),
+ 'D/G/rho' : Item(status=' ', wc_rev='3'),
+ 'D/G/pi' : Item(status=' ', wc_rev='3'),
+ 'D/G/tau' : Item(status=' ', wc_rev='3'),
+ 'D/H' : Item(status=' ', wc_rev='3'),
+ 'D/H/omega' : Item(status=' ', wc_rev='3'),
+ 'D/H/chi' : Item(status=' ', wc_rev='3'),
+ 'D/H/psi' : Item(status=' ', wc_rev='3'),
+ 'D/gamma' : Item(status=' ', wc_rev='3'),
+ 'C' : Item(status=' ', wc_rev='3'),
+ 'mu' : Item(status=' ', wc_rev='3'),
+ })
+
+ # Before r1435684 the inherited properties code would try to fetch
+ # inherited properties for ^/AA/B and fail.
+ #
+ # The inherited properties fetch code would then bail and forget to reset
+ # the ra-session URL back to its original value.
+ #
+ # After that the update code (which ignored the specific error code) was
+ # continued the update against /AA/B (url of missing switched path)
+ # instead of against A (the working copy url).
+
+ # This update removes 'A/B', since its in-repository location is removed.
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ None,
+ expected_status)
+
+ expected_output = svntest.wc.State(wc_dir, {
+ 'B' : Item(status='A '),
+ 'B/lambda' : Item(status='A '),
+ 'B/E' : Item(status='A '),
+ 'B/E/alpha' : Item(status='A '),
+ 'B/E/beta' : Item(status='A '),
+ 'B/F' : Item(status='A '),
+ })
+ expected_status = svntest.wc.State(wc_dir, {
+ '' : Item(status=' ', wc_rev='3'),
+ 'D' : Item(status=' ', wc_rev='3'),
+ 'D/G' : Item(status=' ', wc_rev='3'),
+ 'D/G/rho' : Item(status=' ', wc_rev='3'),
+ 'D/G/pi' : Item(status=' ', wc_rev='3'),
+ 'D/G/tau' : Item(status=' ', wc_rev='3'),
+ 'D/H' : Item(status=' ', wc_rev='3'),
+ 'D/H/omega' : Item(status=' ', wc_rev='3'),
+ 'D/H/chi' : Item(status=' ', wc_rev='3'),
+ 'D/H/psi' : Item(status=' ', wc_rev='3'),
+ 'D/gamma' : Item(status=' ', wc_rev='3'),
+ 'B' : Item(status=' ', wc_rev='3'),
+ 'B/E' : Item(status=' ', wc_rev='3'),
+ 'B/E/alpha' : Item(status=' ', wc_rev='3'),
+ 'B/E/beta' : Item(status=' ', wc_rev='3'),
+ 'B/F' : Item(status=' ', wc_rev='3'),
+ 'B/lambda' : Item(status=' ', wc_rev='3'),
+ 'C' : Item(status=' ', wc_rev='3'),
+ 'mu' : Item(status=' ', wc_rev='3'),
+ })
+
+ # And this final update brings back the node, as it was before switching.
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ None,
+ expected_status)
+
+@Issue(3192)
+def incomplete_overcomplete(sbox):
+ "verify editor v1 incomplete behavior"
+
+ sbox.build()
+
+ wc_dir = sbox.wc_dir
+ repo_dir = sbox.repo_dir
+ repo_url = sbox.repo_url
+
+ # r2 - Make sure we have some dir properties in a clean wc
+ sbox.simple_rm('A', 'iota')
+ sbox.simple_propset('keep', 'keep-value', '')
+ sbox.simple_propset('del', 'del-value', '')
+ sbox.simple_commit()
+
+ # r3 - Perform some changes that will be undone later
+ sbox.simple_mkdir('ADDED-dir')
+ sbox.simple_add_text('The added file', 'added-file')
+ sbox.simple_propset('prop-added', 'value', '')
+ sbox.simple_commit('')
+ sbox.simple_update('')
+
+ r3_disk = svntest.wc.State('', {
+ 'added-file' : Item(contents="The added file"),
+ '.' : Item(props={'prop-added':'value', 'del':'del-value', 'keep':'keep-value'}),
+ 'ADDED-dir' : Item(),
+ })
+
+ r3_status = svntest.wc.State(wc_dir, {
+ '' : Item(status=' ', wc_rev='3'),
+ 'ADDED-dir' : Item(status=' ', wc_rev='3'),
+ 'added-file' : Item(status=' ', wc_rev='3'),
+ })
+
+ # Verify assumptions for later check
+ svntest.actions.run_and_verify_status(wc_dir, r3_status)
+ svntest.actions.verify_disk(wc_dir, r3_disk, check_props = True)
+
+
+ # r4 - And we undo r3
+ sbox.simple_rm('ADDED-dir', 'added-file')
+ sbox.simple_propdel('prop-added', '')
+ sbox.simple_commit('')
+
+ # r5 - Create some alternate changes
+ sbox.simple_mkdir('NOT-ADDED-dir')
+ sbox.simple_add_text('The not added file', 'not-added-file')
+ sbox.simple_propset('prop-not-added', 'value', '')
+ sbox.simple_commit('')
+
+ # Nothing to do to bring the wc to single revision
+ expected_output = svntest.wc.State(wc_dir, {
+ })
+
+ r5_disk = svntest.wc.State('', {
+ '' : Item(props={'prop-not-added':'value',
+ 'del':'del-value',
+ 'keep':'keep-value'}),
+ 'NOT-ADDED-dir' : Item(),
+ 'not-added-file' : Item(contents="The not added file"),
+ })
+
+ expected_status = svntest.wc.State(wc_dir, {
+ '' : Item(status=' ', wc_rev='5'),
+ 'NOT-ADDED-dir' : Item(status=' ', wc_rev='5'),
+ 'not-added-file' : Item(status=' ', wc_rev='5'),
+ })
+
+
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ r5_disk,
+ expected_status,
+ None, None, None, None, None,
+ True)
+
+ # And now we mark the directory incomplete, as if the update had failed
+ # half-way through an update to r3
+ svntest.actions.set_incomplete(wc_dir, 3)
+
+ # Tweak status to verify us breaking the wc
+ expected_status.tweak('', status='! ', wc_rev=3)
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ # But the working copy is still 100% at r5
+ svntest.actions.verify_disk(wc_dir, r5_disk, check_props = True)
+
+ # And expect update to do the right thing even though r3 is already encoded
+ # in the parent. This includes fixing the list of children (reported to the
+ # server, which will report adds and deletes) and fixing the property list
+ # (received all; client should delete properties that shouldn't be here)
+
+ expected_output = svntest.wc.State(wc_dir, {
+ '' : Item(status=' U'),
+ 'not-added-file' : Item(status='D '),
+ 'ADDED-dir' : Item(status='A '),
+ 'added-file' : Item(status='A '),
+ 'NOT-ADDED-dir' : Item(status='D '),
+ })
+
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ r3_disk,
+ r3_status,
+ None, None, None, None, None,
+ True,
+ wc_dir, '-r', 3)
+
+@Issue(4300)
+def update_swapped_depth_dirs(sbox):
+ "text mod to file in swapped depth dir"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ svntest.main.file_append(sbox.ospath('A/B/E/alpha'), "modified\n")
+ sbox.simple_commit()
+ sbox.simple_update(revision=1)
+
+ sbox.simple_move("A/B/E", "A/E")
+ sbox.simple_move("A/B", "A/E/B")
+ # This is almost certainly not the right status but it's what
+ # is currently being output so we're using it here so we
+ # can get to the deeper problem.
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak("A/B", "A/B/lambda", "A/B/F", "A/B/E",
+ "A/B/E/alpha", "A/B/E/beta", status="D ")
+ expected_status.tweak("A/B", moved_to="A/E/B")
+ expected_status.add({
+ 'A/E' : Item(status='A ', copied='+', wc_rev='-',
+ moved_from='A/E/B/E'),
+ 'A/E/B' : Item(status='A ', copied='+', wc_rev='-',
+ moved_from='A/B'),
+ 'A/E/B/E' : Item(status='D ', copied='+', wc_rev='-',
+ moved_to='A/E'),
+ 'A/E/B/F' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A/E/B/lambda' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A/E/alpha' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A/E/beta' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A/E/B/E/alpha': Item(status='D ', copied='+', wc_rev='-'),
+ 'A/E/B/E/beta' : Item(status='D ', copied='+', wc_rev='-'),
+ })
+
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/B' : Item(status=' ', treeconflict='C'),
+ 'A/B/E' : Item(status=' ', treeconflict='U'),
+ 'A/B/E/alpha' : Item(status=' ', treeconflict='U'),
+ })
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.remove('A/B', 'A/B/lambda', 'A/B/F', 'A/B/E',
+ 'A/B/E/alpha', 'A/B/E/beta')
+ expected_disk.add({
+ 'A/E' : Item(),
+ 'A/E/alpha' : Item(contents="This is the file 'alpha'.\n"),
+ 'A/E/beta' : Item(contents="This is the file 'beta'.\n"),
+ 'A/E/B' : Item(),
+ 'A/E/B/lambda' : Item(contents="This is the file 'lambda'.\n"),
+ 'A/E/B/F' : Item(),
+ })
+ expected_status.tweak(wc_rev=2)
+ expected_status.tweak('A/B', treeconflict='C')
+ expected_status.tweak('A/E', 'A/E/alpha', 'A/E/beta', 'A/E/B',
+ 'A/E/B/E', 'A/E/B/E/alpha', 'A/E/B/E/beta',
+ 'A/E/B/lambda', 'A/E/B/F', wc_rev='-')
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None,
+ None, None, 1)
+
+def move_update_props(sbox):
+ "move-update with property mods"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # Commit some 'future' property changes
+ sbox.simple_propset('propertyA', 'value1',
+ 'A/B', 'A/B/E', 'A/B/E/alpha', 'A/B/E/beta')
+ sbox.simple_commit()
+ sbox.simple_propset('propertyB', 'value2',
+ 'A/B', 'A/B/E', 'A/B/E/alpha', 'A/B/E/beta')
+ sbox.simple_commit()
+ sbox.simple_update(revision=1)
+
+ # Make some local property changes
+ sbox.simple_propset('propertyB', 'value3',
+ 'A/B/E', 'A/B/E/beta')
+
+ sbox.simple_move("A/B", "A/B2")
+
+ # Update and expect a conflict
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/B' : Item(status=' ', treeconflict='C'),
+ 'A/B/E' : Item(status=' ', treeconflict='U'),
+ 'A/B/E/alpha' : Item(status=' ', treeconflict='U'),
+ 'A/B/E/beta' : Item(status=' ', treeconflict='U'),
+ })
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.remove('A/B/E/alpha', 'A/B/E/beta', 'A/B/E',
+ 'A/B/lambda', 'A/B/F', 'A/B')
+ expected_disk.add({
+ 'A/B2' : Item(),
+ 'A/B2/E' : Item(),
+ 'A/B2/E/alpha' : Item(contents="This is the file 'alpha'.\n"),
+ 'A/B2/E/beta' : Item(contents="This is the file 'beta'.\n"),
+ 'A/B2/F' : Item(),
+ 'A/B2/lambda' : Item(contents="This is the file 'lambda'.\n"),
+ })
+ expected_disk.tweak('A/B2/E', 'A/B2/E/beta', props={'propertyB':'value3'})
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
+ expected_status.tweak('A/B', status='D ', treeconflict='C', moved_to='A/B2')
+ expected_status.tweak('A/B/E', 'A/B/E/alpha', 'A/B/E/beta',
+ 'A/B/F', 'A/B/lambda', status='D ')
+ expected_status.add({
+ 'A/B2' : Item(status='A ', copied='+', wc_rev='-',
+ moved_from='A/B'),
+ 'A/B2/E' : Item(status=' M', copied='+', wc_rev='-'),
+ 'A/B2/E/beta' : Item(status=' M', copied='+', wc_rev='-'),
+ 'A/B2/E/alpha' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A/B2/F' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A/B2/lambda' : Item(status=' ', copied='+', wc_rev='-'),
+ })
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None,
+ None, None, 1,
+ '-r', '2', wc_dir)
+
+ # Resolve conflict moving changes to destination without conflict
+ svntest.actions.run_and_verify_svn("resolve failed", None, [],
+ 'resolve',
+ '--accept=mine-conflict',
+ sbox.ospath('A/B'))
+
+ expected_status.tweak('A/B', treeconflict=None)
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ expected_disk.tweak('A/B2', 'A/B2/E/alpha', props={'propertyA' : 'value1'})
+ expected_disk.tweak('A/B2/E', 'A/B2/E/beta', props={'propertyA' : 'value1',
+ 'propertyB':'value3'})
+ svntest.actions.verify_disk(wc_dir, expected_disk, check_props = True)
+
+ # Further update and expect a conflict.
+ expected_status.tweak('A/B', status='D ', treeconflict='C', moved_to='A/B2')
+ expected_status.tweak(wc_rev=3)
+ expected_status.tweak( 'A/B2', 'A/B2/E', 'A/B2/E/beta', 'A/B2/E/alpha',
+ 'A/B2/F', 'A/B2/lambda', wc_rev='-')
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None,
+ None, None, 1,
+ '-r', '3', wc_dir)
+
+ # Resolve conflict moving changes and raising property conflicts
+ svntest.actions.run_and_verify_svn("resolve failed", None, [],
+ 'resolve',
+ '--accept=mine-conflict',
+ sbox.ospath('A/B'))
+
+ expected_status.tweak('A/B', treeconflict=None)
+ expected_status.tweak('A/B2/E', 'A/B2/E/beta', status=' C')
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ expected_disk.tweak('A/B2', 'A/B2/E/alpha', props={'propertyA' : 'value1',
+ 'propertyB' : 'value2'})
+ expected_disk.tweak('A/B2/E', 'A/B2/E/beta', props={'propertyA' : 'value1',
+ 'propertyB' : 'value3'})
+ extra_files = ['dir_conflicts.prej', 'beta.prej']
+ svntest.actions.verify_disk(wc_dir, expected_disk, True,
+ svntest.tree.detect_conflict_files, extra_files)
+
+@Issues(3288)
+@SkipUnless(svntest.main.is_os_windows)
+@XFail(svntest.main.is_ra_type_dav)
+def windows_update_backslash(sbox):
+ "test filename with backslashes inside"
+
+ sbox.build()
+
+ wc_dir = sbox.wc_dir
+
+ svntest.actions.run_and_verify_svnmucc(None, None, [],
+ '-U', sbox.repo_url,
+ '-m', '',
+ 'mkdir', 'A/completely\\unusable\\dir')
+
+ # No error and a proper skip + recording in the working copy would also
+ # be a good result. This just verifies current behavior.
+
+ expected_error = 'svn: E155000: .* is not valid.*'
+ svntest.actions.run_and_verify_svn(wc_dir, None, expected_error, 'up',
+ wc_dir)
+
+def update_moved_away(sbox):
+ "update subtree of moved away"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ sbox.simple_add_text('new', 'new')
+ sbox.simple_commit()
+
+ sbox.simple_move('A', 'A_moved')
+
+ # Adding prev_status=' ' and prev_treeconflict='C' to A will make
+ # the test PASS but why are we getting two conflicts?
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A' : Item(status=' ', treeconflict='C'),
+ })
+
+ expected_disk = None
+ expected_status = svntest.wc.State(wc_dir, {
+ '' : Item(status=' ', wc_rev='1'),
+ 'A' : Item(status='D ', wc_rev='1', moved_to='A_moved',
+ treeconflict='C'),
+ 'A/B' : Item(status='D ', wc_rev='1'),
+ 'A/B/E' : Item(status='D ', wc_rev='2'),
+ 'A/B/E/beta' : Item(status='D ', wc_rev='2'),
+ 'A/B/E/alpha' : Item(status='D ', wc_rev='2'),
+ 'A/B/F' : Item(status='D ', wc_rev='1'),
+ 'A/B/lambda' : Item(status='D ', wc_rev='1'),
+ 'A/D' : Item(status='D ', wc_rev='1'),
+ 'A/D/G' : Item(status='D ', wc_rev='1'),
+ 'A/D/G/pi' : Item(status='D ', wc_rev='1'),
+ 'A/D/G/tau' : Item(status='D ', wc_rev='1'),
+ 'A/D/G/rho' : Item(status='D ', wc_rev='1'),
+ 'A/D/H' : Item(status='D ', wc_rev='1'),
+ 'A/D/H/psi' : Item(status='D ', wc_rev='1'),
+ 'A/D/H/chi' : Item(status='D ', wc_rev='1'),
+ 'A/D/H/omega' : Item(status='D ', wc_rev='1'),
+ 'A/D/gamma' : Item(status='D ', wc_rev='1'),
+ 'A/C' : Item(status='D ', wc_rev='1'),
+ 'A/mu' : Item(status='D ', wc_rev='1'),
+ 'A_moved' : Item(status='A ', copied='+', wc_rev='-',
+ moved_from='A'),
+ 'A_moved/D' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_moved/D/G' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_moved/D/G/rho' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_moved/D/G/tau' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_moved/D/G/pi' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_moved/D/H' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_moved/D/H/omega' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_moved/D/H/psi' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_moved/D/H/chi' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_moved/D/gamma' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_moved/B' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_moved/B/E' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_moved/B/E/beta' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_moved/B/E/alpha' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_moved/B/lambda' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_moved/B/F' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_moved/mu' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_moved/C' : Item(status=' ', copied='+', wc_rev='-'),
+ 'iota' : Item(status=' ', wc_rev='1'),
+ 'new' : Item(status=' ', wc_rev='2'),
+ })
+
+ # This update raises a tree-conflict on A. The conflict cannot be
+ # resolved to update the move destination because the move source is
+ # mixed rev.
+
+ # Note that this exact scenario doesn't apply to switch as we don't
+ # allow switches with as root a shadowed node. However it is
+ # possible to get essentially the problem with switch by invoking a
+ # depth immedates switch on the parent of the root of the move
+ # source. That switches the root of the move without switching the
+ # children.
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None,
+ None, None, None,
+ sbox.ospath('A/B/E'))
+
+@Issues(4323)
+def bump_below_tree_conflict(sbox):
+ "tree conflicts should be skipped during update"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'rm', sbox.repo_url + '/A/B',
+ '-m', '')
+
+ sbox.simple_add_text('Q', 'q')
+ sbox.simple_commit()
+ sbox.simple_add_text('R', 'r')
+ sbox.simple_commit()
+
+ sbox.simple_update(revision='1')
+
+ sbox.simple_rm('A')
+
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A' : Item(status=' ', treeconflict='C'), # The real TC
+ 'A/B' : Item(status=' ', treeconflict='D'), # Shadowed delete
+ })
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
+
+ expected_status.tweak('A', status='D ', treeconflict='C', wc_rev='2')
+ expected_status.tweak('A/D', 'A/D/G', 'A/D/G/rho', 'A/D/G/tau', 'A/D/G/pi',
+ 'A/D/H', 'A/D/H/omega', 'A/D/H/chi', 'A/D/H/psi',
+ 'A/D/gamma', 'A/mu', 'A/C', status='D ')
+
+ expected_status.remove('A/B', 'A/B/lambda', 'A/B/E', 'A/B/E/alpha',
+ 'A/B/E/beta', 'A/B/F')
+
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ None,
+ expected_status,
+ None, None, None,
+ None, None, None,
+ '-r', '2', wc_dir)
+
+ # A is tree conflicted, so an update of A/D should be a skip/no-op.
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/D' : Item(verb='Skipped'),
+ })
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ None,
+ expected_status,
+ None, None, None,
+ None, None, None,
+ sbox.ospath('A/D'))
+
+ # A is tree conflicted, so an update of A/D/G should be a skip/no-op.
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/D/G' : Item(verb='Skipped'),
+ })
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ None,
+ expected_status,
+ None, None, None,
+ None, None, None,
+ sbox.ospath('A/D/G'))
+
+@Issues(4111)
+def update_child_below_add(sbox):
+ "update child below added tree"
+
+ sbox.build(read_only = True)
+ wc_dir = sbox.wc_dir
+
+ sbox.simple_update('A/B', 0)
+
+ # Update skips A/B/E because A/B has a not-present BASE node.
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/B/E' : Item(verb='Skipped'),
+ })
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.remove('A/B', 'A/B/E', 'A/B/E/alpha', 'A/B/E/beta',
+ 'A/B/F', 'A/B/lambda')
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ None,
+ expected_status,
+ None, None, None,
+ None, None, None,
+ sbox.ospath('A/B/E'))
+
+ # Add working nodes over A/B
+ sbox.simple_mkdir('A/B')
+ sbox.simple_mkdir('A/B/E')
+ sbox.simple_add_text('the new alpha', 'A/B/E/alpha')
+
+ expected_status.add({
+ 'A/B' : Item(status='A ', wc_rev='-'),
+ 'A/B/E' : Item(status='A ', wc_rev='-'),
+ 'A/B/E/alpha' : Item(status='A ', wc_rev='-'),
+ })
+ # Update should still skip A/B/E
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ None,
+ expected_status,
+ None, None, None,
+ None, None, None,
+ sbox.ospath('A/B/E'))
+
#######################################################################
# Run the tests
@@ -5433,7 +6808,6 @@ test_list = [ None,
update_deletion_inside_out,
update_schedule_add_dir,
update_to_future_add,
- nested_in_read_only,
obstructed_update_alters_wc_props,
update_xml_unsafe_dir,
conflict_markers_matching_eol,
@@ -5470,6 +6844,27 @@ test_list = [ None,
revive_children_of_copy,
skip_access_denied,
update_to_HEAD_plus_1,
+ update_moved_dir_leaf_del,
+ update_moved_dir_edited_leaf_del,
+ update_moved_dir_file_add,
+ update_moved_dir_dir_add,
+ update_moved_dir_file_move,
+ update_binary_file_3,
+ update_move_text_mod,
+ update_nested_move_text_mod,
+ update_with_parents_and_exclude,
+ update_edit_delete_obstruction,
+ update_deleted,
+ break_moved_dir_edited_leaf_del,
+ break_moved_replaced_dir,
+ update_removes_switched,
+ incomplete_overcomplete,
+ update_swapped_depth_dirs,
+ move_update_props,
+ windows_update_backslash,
+ update_moved_away,
+ bump_below_tree_conflict,
+ update_child_below_add,
]
if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/upgrade_tests.py b/subversion/tests/cmdline/upgrade_tests.py
index 9fec333..839206e 100755
--- a/subversion/tests/cmdline/upgrade_tests.py
+++ b/subversion/tests/cmdline/upgrade_tests.py
@@ -35,6 +35,9 @@ import shutil
import sys
import tarfile
import tempfile
+import logging
+
+logger = logging.getLogger()
import svntest
from svntest import wc
@@ -47,7 +50,7 @@ Issues = svntest.testcase.Issues_deco
Issue = svntest.testcase.Issue_deco
Wimp = svntest.testcase.Wimp_deco
-wc_is_too_old_regex = (".*Working copy '.*' is too old \(format \d+.*\).*")
+wc_is_too_old_regex = (".*is too old \(format \d+.*\).*")
def get_current_format():
@@ -83,7 +86,7 @@ def replace_sbox_repo_with_tarfile(sbox, tar_filename, dir=None):
if not dir:
dir = tar_filename.split('.')[0]
-
+
tarpath = os.path.join(os.path.dirname(sys.argv[0]), 'upgrade_tests_data',
tar_filename)
t = tarfile.open(tarpath, 'r:bz2')
@@ -179,15 +182,15 @@ def simple_property_verify(dir_path, expected_props):
v2 = node2.get(prop, None)
if not v2:
- print('\'%s\' property on \'%s\' not found in %s' %
- (prop, key, name))
+ logger.warn('\'%s\' property on \'%s\' not found in %s',
+ prop, key, name)
equal = False
if match and v1 != v2:
- print('Expected \'%s\' on \'%s\' to be \'%s\', but found \'%s\'' %
- (prop, key, v1, v2))
+ logger.warn('Expected \'%s\' on \'%s\' to be \'%s\', but found \'%s\'',
+ prop, key, v1, v2)
equal = False
else:
- print('\'%s\': %s not found in %s' % (key, dict1[key], name))
+ logger.warn('\'%s\': %s not found in %s', key, dict1[key], name)
equal = False
return equal
@@ -214,7 +217,7 @@ def simple_property_verify(dir_path, expected_props):
v2 = diff_props(actual_props, expected_props, 'expected', False)
if not v1 or not v2:
- print('Actual properties: %s' % actual_props)
+ logger.warn('Actual properties: %s', actual_props)
raise svntest.Failure("Properties unequal")
def simple_checksum_verify(expected_checksums):
@@ -244,7 +247,7 @@ def run_and_verify_status_no_server(wc_dir, expected_status):
except svntest.tree.SVNTreeError:
svntest.verify.display_trees(None, 'STATUS OUTPUT TREE',
expected_status.old_tree(), actual)
- print("ACTUAL STATUS TREE:")
+ logger.warn("ACTUAL STATUS TREE:")
svntest.tree.dump_tree_script(actual, wc_dir + os.sep)
raise
@@ -255,28 +258,29 @@ def basic_upgrade(sbox):
replace_sbox_with_tarfile(sbox, 'basic_upgrade.tar.bz2')
# Attempt to use the working copy, this should give an error
- expected_stderr = wc_is_too_old_regex
- svntest.actions.run_and_verify_svn(None, None, expected_stderr,
+ svntest.actions.run_and_verify_svn(None, None, wc_is_too_old_regex,
'info', sbox.wc_dir)
-
- # Upgrade on something not a versioned dir gives a 'not directory' error.
- not_dir = ".*E155019.*%s'.*directory"
+ # Upgrade on something anywhere within a versioned subdir gives a
+ # 'not a working copy root' error. Upgrade on something without any
+ # versioned parent gives a 'not a working copy' error.
+ # Both cases use the same error code.
+ not_wc = ".*(E155007|E155019).*%s'.*not a working copy.*"
os.mkdir(sbox.ospath('X'))
- svntest.actions.run_and_verify_svn(None, None, not_dir % 'X',
+ svntest.actions.run_and_verify_svn(None, None, not_wc % 'X',
'upgrade', sbox.ospath('X'))
- svntest.actions.run_and_verify_svn(None, None, not_dir % 'Y',
+ # Upgrade on a non-existent subdir within an old WC gives a
+ # 'not a working copy' error.
+ svntest.actions.run_and_verify_svn(None, None, not_wc % 'Y',
'upgrade', sbox.ospath('Y'))
-
- svntest.actions.run_and_verify_svn(None, None, not_dir %
- re.escape(sbox.ospath('A/mu')),
+ # Upgrade on a versioned file within an old WC gives a
+ # 'not a working copy' error.
+ svntest.actions.run_and_verify_svn(None, None, not_wc % 'mu',
'upgrade', sbox.ospath('A/mu'))
-
- # Upgrade on a versioned subdir gives a 'not root' error.
- not_root = ".*E155019.*%s'.*root.*%s'"
- svntest.actions.run_and_verify_svn(None, None, not_root %
- ('A', re.escape(sbox.wc_dir)),
+ # Upgrade on a versioned dir within an old WC gives a
+ # 'not a working copy' error.
+ svntest.actions.run_and_verify_svn(None, None, not_wc % 'A',
'upgrade', sbox.ospath('A'))
# Now upgrade the working copy
@@ -426,7 +430,10 @@ def basic_upgrade_1_0(sbox):
url = sbox.repo_url
- xml_entries_relocate(sbox.wc_dir, 'file:///1.0.0/repos', url)
+ # This is non-canonical by the rules of svn_uri_canonicalize, it gets
+ # written into the entries file and upgrade has to canonicalize.
+ non_canonical_url = url[:-1] + '%%%02x' % ord(url[-1])
+ xml_entries_relocate(sbox.wc_dir, 'file:///1.0.0/repos', non_canonical_url)
# Attempt to use the working copy, this should give an error
expected_stderr = wc_is_too_old_regex
@@ -791,10 +798,9 @@ def upgrade_tree_conflict_data(sbox):
no_actual_node(sbox, 'A/D/G/tau')
# While the upgrade from f20 to f21 will work the upgrade from f22
- # to f23 will not, since working nodes are present, so the
- # auto-upgrade will fail. If this happens we cannot use the
- # Subversion libraries to query the working copy.
- exit_code, output, errput = svntest.main.run_svn('format 22', 'st', wc_dir)
+ # to f23 will not, since working nodes are present.
+ exit_code, output, errput = svntest.main.run_svn('format 22', 'upgrade',
+ wc_dir)
if not exit_code:
run_and_verify_status_no_server(wc_dir, expected_status)
@@ -981,8 +987,8 @@ def upgrade_from_format_28(sbox):
assert os.path.exists(old_pristine_path)
assert not os.path.exists(new_pristine_path)
- # Touch the WC to auto-upgrade it
- svntest.actions.run_and_verify_svn(None, None, [], 'info', sbox.wc_dir)
+ # Upgrade the WC
+ svntest.actions.run_and_verify_svn(None, None, [], 'upgrade', sbox.wc_dir)
assert not os.path.exists(old_pristine_path)
assert os.path.exists(new_pristine_path)
@@ -1140,18 +1146,21 @@ def upgrade_file_externals(sbox):
expected_output = svntest.verify.RegexOutput('r2 committed.*')
svntest.actions.run_and_verify_svnmucc(None, expected_output, [],
+ '-m', 'r2',
'propset', 'svn:externals',
'^/A/B/E EX\n^/A/mu muX',
sbox.repo_url + '/A/B/F')
expected_output = svntest.verify.RegexOutput('r3 committed.*')
svntest.actions.run_and_verify_svnmucc(None, expected_output, [],
+ '-m', 'r3',
'propset', 'svn:externals',
'^/A/B/F FX\n^/A/B/lambda lambdaX',
sbox.repo_url + '/A/C')
expected_output = svntest.verify.RegexOutput('r4 committed.*')
svntest.actions.run_and_verify_svnmucc(None, expected_output, [],
+ '-m', 'r4',
'propset', 'pname1', 'pvalue1',
sbox.repo_url + '/A/mu',
'propset', 'pname2', 'pvalue2',
@@ -1163,7 +1172,7 @@ def upgrade_file_externals(sbox):
svntest.actions.run_and_verify_svn(None, None, [], 'relocate',
'file:///tmp/repo', sbox.repo_url,
sbox.wc_dir)
-
+
expected_output = svntest.wc.State(sbox.wc_dir, {
'A/mu' : Item(status=' U'),
'A/B/lambda' : Item(status=' U'),
@@ -1198,7 +1207,6 @@ def upgrade_file_externals(sbox):
'alpha' : {'pname3' : 'pvalue3' },
})
-
@Issue(4035)
def upgrade_missing_replaced(sbox):
"upgrade with missing replaced dir"
@@ -1214,19 +1222,28 @@ def upgrade_missing_replaced(sbox):
sbox.wc_dir)
expected_output = svntest.wc.State(sbox.wc_dir, {
- 'A/B/E' : Item(status=' ', treeconflict='C'),
+ 'A/B/E' : Item(status=' ', treeconflict='C',
+ prev_verb='Restored'),
'A/B/E/alpha' : Item(status=' ', treeconflict='A'),
'A/B/E/beta' : Item(status=' ', treeconflict='A'),
})
expected_status = svntest.actions.get_virginal_state(sbox.wc_dir, 1)
- expected_status.tweak('A/B/E', status='! ', treeconflict='C', wc_rev='-')
+ expected_status.tweak('A/B/E', status='! ', treeconflict='C', wc_rev='-',
+ entry_status='R ', entry_rev='1')
expected_status.tweak('A/B/E/alpha', 'A/B/E/beta', status='D ')
+
+ # This upgrade installs an INCOMPLETE node in WORKING for E, which makes the
+ # database technically invalid... but we did that for 1.7 and nobody noticed.
+
+ # Pass the old status tree to avoid testing via entries-dump
+ # as fetching the entries crashes on the invalid db state.
svntest.actions.run_and_verify_update(sbox.wc_dir, expected_output,
None, expected_status)
svntest.actions.run_and_verify_svn(None, 'Reverted.*', [], 'revert', '-R',
sbox.wc_dir)
expected_status = svntest.actions.get_virginal_state(sbox.wc_dir, 1)
+ # And verify that the state is now valid in both the entries an status world.
svntest.actions.run_and_verify_status(sbox.wc_dir, expected_status)
@Issue(4033)
@@ -1253,6 +1270,216 @@ def upgrade_not_present_replaced(sbox):
svntest.actions.run_and_verify_update(sbox.wc_dir, expected_output,
None, expected_status)
+@Issue(4307)
+def upgrade_from_1_7_conflict(sbox):
+ "upgrade from 1.7 WC with conflict (format 29)"
+
+ sbox.build(create_wc=False)
+ replace_sbox_with_tarfile(sbox, 'upgrade_from_1_7_wc.tar.bz2')
+
+ # The working copy contains a text conflict, and upgrading such
+ # a working copy used to cause a pointless 'upgrade required' error.
+ svntest.actions.run_and_verify_svn(None, None, [], 'upgrade', sbox.wc_dir)
+
+def do_iprops_upgrade(nonrootfile, rootfile, sbox):
+
+ wc_dir = sbox.wc_dir
+
+ replace_sbox_with_tarfile(sbox, nonrootfile)
+ svntest.actions.run_and_verify_svn(None, None, [], 'upgrade', sbox.wc_dir)
+ svntest.actions.run_and_verify_svn(None, None, [], 'relocate',
+ 'file:///tmp/repo', sbox.repo_url, wc_dir)
+
+ expected_output = []
+ expected_disk = svntest.wc.State('', {
+ 'E' : Item(),
+ 'E/alpha' : Item(contents="This is the file 'alpha'.\n"),
+ 'E/beta' : Item(contents="This is the file 'beta'.\n"),
+ 'F' : Item(),
+ 'lambda' : Item(contents="This is the file 'lambda'.\n"),
+ })
+ expected_status = svntest.wc.State(sbox.wc_dir, {
+ '' : Item(),
+ 'E' : Item(switched='S'),
+ 'E/alpha' : Item(),
+ 'E/beta' : Item(),
+ 'F' : Item(),
+ 'lambda' : Item(),
+ })
+ expected_status.tweak(status=' ', wc_rev=2)
+
+ # No inherited props after upgrade until an update
+ expected_iprops = {}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ wc_dir, expected_iprops, expected_explicit_props)
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('E'), expected_iprops, expected_explicit_props)
+
+ # Update populates the inherited props
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status)
+
+ expected_iprops = {sbox.repo_url : {'p' : 'v'},
+ sbox.repo_url + '/A' : {'pA' : 'vA'}}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ wc_dir, expected_iprops, expected_explicit_props)
+
+ expected_iprops = {sbox.repo_url : {'p' : 'v'},
+ sbox.repo_url + '/X' : {'pX' : 'vX'}}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('E'), expected_iprops, expected_explicit_props)
+
+ # Now try with a repository root working copy
+ replace_sbox_with_tarfile(sbox, rootfile)
+ svntest.actions.run_and_verify_svn(None, None, [], 'upgrade', sbox.wc_dir)
+ svntest.actions.run_and_verify_svn(None, None, [], 'relocate',
+ 'file:///tmp/repo', sbox.repo_url, wc_dir)
+
+ # Unswitched inherited props available after upgrade
+ expected_iprops = {wc_dir : {'p' : 'v'},
+ sbox.ospath('A') : {'pA' : 'vA'}}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('A/B'), expected_iprops, expected_explicit_props)
+
+ # Switched inherited props not populated until update after upgrade
+ expected_iprops = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('A/B/E'), expected_iprops, expected_explicit_props)
+
+ expected_disk = svntest.wc.State('', {
+ 'A' : Item(),
+ 'A/B' : Item(),
+ 'A/B/E' : Item(),
+ })
+ expected_status = svntest.wc.State(sbox.wc_dir, {
+ '' : Item(),
+ 'A' : Item(),
+ 'A/B' : Item(),
+ 'A/B/E' : Item(switched='S'),
+ })
+ expected_status.tweak(status=' ', wc_rev=2)
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status)
+
+ expected_iprops = {wc_dir : {'p' : 'v'},
+ sbox.ospath('A') : {'pA' : 'vA'}}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('A/B'), expected_iprops, expected_explicit_props)
+
+ expected_iprops = {sbox.repo_url : {'p' : 'v'},
+ sbox.repo_url + '/X' : {'pX' : 'vX'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('A/B/E'), expected_iprops, expected_explicit_props)
+
+def iprops_upgrade(sbox):
+ "inherited properties after upgrade from 1.7"
+
+ sbox.build()
+
+ sbox.simple_copy('A', 'X')
+ sbox.simple_propset('p', 'v', '')
+ sbox.simple_propset('pA', 'vA', 'A')
+ sbox.simple_propset('pX', 'vX', 'X')
+ sbox.simple_commit()
+ svntest.main.run_svnadmin('setuuid', sbox.repo_dir,
+ '8f4d0ebe-2ebf-4f62-ad11-804fd88c2382')
+
+ do_iprops_upgrade('iprops_upgrade_nonroot.tar.bz2',
+ 'iprops_upgrade_root.tar.bz2',
+ sbox)
+
+def iprops_upgrade1_6(sbox):
+ "inherited properties after upgrade from 1.6"
+
+ sbox.build()
+
+ sbox.simple_copy('A', 'X')
+ sbox.simple_propset('p', 'v', '')
+ sbox.simple_propset('pA', 'vA', 'A')
+ sbox.simple_propset('pX', 'vX', 'X')
+ sbox.simple_commit()
+ svntest.main.run_svnadmin('setuuid', sbox.repo_dir,
+ '8f4d0ebe-2ebf-4f62-ad11-804fd88c2382')
+
+ do_iprops_upgrade('iprops_upgrade_nonroot1_6.tar.bz2',
+ 'iprops_upgrade_root1_6.tar.bz2',
+ sbox)
+
+def changelist_upgrade_1_6(sbox):
+ "upgrade from 1.6 with changelist"
+
+ sbox.build(create_wc = False)
+ svntest.main.run_svnadmin('setuuid', sbox.repo_dir,
+ 'aa4c97bd-2e1a-4e55-a1e5-3db22cff2673')
+ replace_sbox_with_tarfile(sbox, 'changelist_upgrade_1_6.tar.bz2')
+ svntest.actions.run_and_verify_svn(None, None, [], 'upgrade', sbox.wc_dir)
+
+ exit_code, output, errput = svntest.main.run_svn(None, 'info', sbox.wc_dir,
+ '--depth', 'infinity',
+ '--changelist', 'foo')
+ paths = [x for x in output if x[:6] == 'Path: ']
+ expected_paths = ['Path: %s\n' % sbox.ospath('A/D/gamma')]
+ if paths != expected_paths:
+ raise svntest.Failure("changelist not matched")
+
+
+def upgrade_1_7_dir_external(sbox):
+ "upgrade from 1.7 with dir external"
+
+ sbox.build(create_wc = False)
+ replace_sbox_with_tarfile(sbox, 'upgrade_1_7_dir_external.tar.bz2')
+
+ # This fails for 'make check EXCLUSIVE_WC_LOCKS=1' giving an error:
+ # svn: warning: W200033: sqlite[S5]: database is locked
+ svntest.actions.run_and_verify_svn(None, None, [], 'upgrade', sbox.wc_dir)
+
+def auto_analyze(sbox):
+ """automatic SQLite ANALYZE"""
+
+ sbox.build(create_wc = False)
+
+ replace_sbox_with_tarfile(sbox, 'wc-without-stat1.tar.bz2')
+ svntest.main.run_svnadmin('setuuid', sbox.repo_dir,
+ '52ec7e4b-e5f0-451d-829f-f05d5571b4ab')
+
+ # Don't use svn to do relocate as that will add the table.
+ svntest.wc.sqlite_exec(sbox.wc_dir,
+ "update repository "
+ "set root ='" + sbox.repo_url + "'")
+ val = svntest.wc.sqlite_stmt(sbox.wc_dir,
+ "select 1 from sqlite_master "
+ "where name = 'sqlite_stat1'")
+ if val != []:
+ raise svntest.Failure("initial state failed")
+
+ # Make working copy read-only (but not wc_dir itself as
+ # svntest.main.chmod_tree will not reset it.)
+ for path, subdirs, files in os.walk(sbox.wc_dir):
+ for d in subdirs:
+ os.chmod(os.path.join(path, d), 0555)
+ for f in files:
+ os.chmod(os.path.join(path, f), 0444)
+
+ state = svntest.actions.get_virginal_state(sbox.wc_dir, 1)
+ svntest.actions.run_and_verify_status(sbox.wc_dir, state)
+
+ svntest.main.chmod_tree(sbox.wc_dir, 0666, 0022)
+
+ state = svntest.actions.get_virginal_state(sbox.wc_dir, 1)
+ svntest.actions.run_and_verify_status(sbox.wc_dir, state)
+
+ val = svntest.wc.sqlite_stmt(sbox.wc_dir,
+ "select 1 from sqlite_master "
+ "where name = 'sqlite_stat1'")
+ if val != [(1,)]:
+ raise svntest.Failure("analyze failed")
+
########################################################################
# Run the tests
@@ -1304,6 +1531,12 @@ test_list = [ None,
upgrade_file_externals,
upgrade_missing_replaced,
upgrade_not_present_replaced,
+ upgrade_from_1_7_conflict,
+ iprops_upgrade,
+ iprops_upgrade1_6,
+ changelist_upgrade_1_6,
+ upgrade_1_7_dir_external,
+ auto_analyze,
]
diff --git a/subversion/tests/cmdline/upgrade_tests_data/changelist_upgrade_1_6.tar.bz2 b/subversion/tests/cmdline/upgrade_tests_data/changelist_upgrade_1_6.tar.bz2
new file mode 100644
index 0000000..78d3a66
--- /dev/null
+++ b/subversion/tests/cmdline/upgrade_tests_data/changelist_upgrade_1_6.tar.bz2
Binary files differ
diff --git a/subversion/tests/cmdline/upgrade_tests_data/iprops_upgrade_nonroot.tar.bz2 b/subversion/tests/cmdline/upgrade_tests_data/iprops_upgrade_nonroot.tar.bz2
new file mode 100644
index 0000000..2e47aaa
--- /dev/null
+++ b/subversion/tests/cmdline/upgrade_tests_data/iprops_upgrade_nonroot.tar.bz2
Binary files differ
diff --git a/subversion/tests/cmdline/upgrade_tests_data/iprops_upgrade_nonroot1_6.tar.bz2 b/subversion/tests/cmdline/upgrade_tests_data/iprops_upgrade_nonroot1_6.tar.bz2
new file mode 100644
index 0000000..820ca5c
--- /dev/null
+++ b/subversion/tests/cmdline/upgrade_tests_data/iprops_upgrade_nonroot1_6.tar.bz2
Binary files differ
diff --git a/subversion/tests/cmdline/upgrade_tests_data/iprops_upgrade_root.tar.bz2 b/subversion/tests/cmdline/upgrade_tests_data/iprops_upgrade_root.tar.bz2
new file mode 100644
index 0000000..11df646
--- /dev/null
+++ b/subversion/tests/cmdline/upgrade_tests_data/iprops_upgrade_root.tar.bz2
Binary files differ
diff --git a/subversion/tests/cmdline/upgrade_tests_data/iprops_upgrade_root1_6.tar.bz2 b/subversion/tests/cmdline/upgrade_tests_data/iprops_upgrade_root1_6.tar.bz2
new file mode 100644
index 0000000..fbb363a
--- /dev/null
+++ b/subversion/tests/cmdline/upgrade_tests_data/iprops_upgrade_root1_6.tar.bz2
Binary files differ
diff --git a/subversion/tests/cmdline/upgrade_tests_data/upgrade_1_7_dir_external.tar.bz2 b/subversion/tests/cmdline/upgrade_tests_data/upgrade_1_7_dir_external.tar.bz2
new file mode 100644
index 0000000..b9f3f9a
--- /dev/null
+++ b/subversion/tests/cmdline/upgrade_tests_data/upgrade_1_7_dir_external.tar.bz2
Binary files differ
diff --git a/subversion/tests/cmdline/upgrade_tests_data/upgrade_from_1_7_wc.tar.bz2 b/subversion/tests/cmdline/upgrade_tests_data/upgrade_from_1_7_wc.tar.bz2
new file mode 100644
index 0000000..b2d385b
--- /dev/null
+++ b/subversion/tests/cmdline/upgrade_tests_data/upgrade_from_1_7_wc.tar.bz2
Binary files differ
diff --git a/subversion/tests/cmdline/upgrade_tests_data/wc-without-stat1.tar.bz2 b/subversion/tests/cmdline/upgrade_tests_data/wc-without-stat1.tar.bz2
new file mode 100644
index 0000000..56271cd
--- /dev/null
+++ b/subversion/tests/cmdline/upgrade_tests_data/wc-without-stat1.tar.bz2
Binary files differ
diff --git a/subversion/tests/cmdline/wc_tests.py b/subversion/tests/cmdline/wc_tests.py
new file mode 100755
index 0000000..75f6743
--- /dev/null
+++ b/subversion/tests/cmdline/wc_tests.py
@@ -0,0 +1,253 @@
+#!/usr/bin/env python
+#
+# wc_tests.py: testing working-copy operations
+#
+# Subversion is a tool for revision control.
+# See http://subversion.apache.org for more information.
+#
+# ====================================================================
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+######################################################################
+
+# General modules
+from __future__ import with_statement
+import shutil, stat, re, os, logging
+
+logger = logging.getLogger()
+
+# Our testing module
+import svntest
+from svntest import wc
+
+# (abbreviation)
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
+Item = wc.StateItem
+
+######################################################################
+# Tests
+#
+# Each test must return on success or raise on failure.
+
+
+@XFail()
+@Issue(4193)
+@SkipUnless(svntest.main.is_posix_os)
+def status_through_unversioned_symlink(sbox):
+ """file status through unversioned symlink"""
+
+ sbox.build(read_only = True)
+ state = svntest.actions.get_virginal_state(sbox.wc_dir, 1)
+ os.symlink('A', sbox.ospath('Z'))
+ svntest.actions.run_and_verify_status(sbox.ospath('Z/mu'), state)
+
+@XFail()
+@Issue(4193)
+@SkipUnless(svntest.main.is_posix_os)
+def status_through_versioned_symlink(sbox):
+ """file status through versioned symlink"""
+
+ sbox.build(read_only = True)
+ state = svntest.actions.get_virginal_state(sbox.wc_dir, 1)
+ os.symlink('A', sbox.ospath('Z'))
+ sbox.simple_add('Z')
+ state.add({'Z': Item(status='A ')})
+ svntest.actions.run_and_verify_status(sbox.ospath('Z/mu'), state)
+
+@XFail()
+@Issue(4193)
+@SkipUnless(svntest.main.is_posix_os)
+def status_with_symlink_in_path(sbox):
+ """file status with not-parent symlink"""
+
+ sbox.build(read_only = True)
+ state = svntest.actions.get_virginal_state(sbox.wc_dir, 1)
+ os.symlink('A', sbox.ospath('Z'))
+ svntest.actions.run_and_verify_status(sbox.ospath('Z/B/lambda'), state)
+
+@XFail()
+@Issue(4193)
+@SkipUnless(svntest.main.is_posix_os)
+def add_through_unversioned_symlink(sbox):
+ """add file through unversioned symlink"""
+
+ sbox.build(read_only = True)
+ os.symlink('A', sbox.ospath('Z'))
+ sbox.simple_append('A/kappa', 'xyz', True)
+ sbox.simple_add('Z/kappa')
+
+@XFail()
+@Issue(4193)
+@SkipUnless(svntest.main.is_posix_os)
+def add_through_versioned_symlink(sbox):
+ """add file through versioned symlink"""
+
+ sbox.build(read_only = True)
+ os.symlink('A', sbox.ospath('Z'))
+ sbox.simple_add('Z')
+ sbox.simple_append('A/kappa', 'xyz', True)
+ sbox.simple_add('Z/kappa')
+
+@XFail()
+@Issue(4193)
+@SkipUnless(svntest.main.is_posix_os)
+def add_with_symlink_in_path(sbox):
+ """add file with not-parent symlink"""
+
+ sbox.build(read_only = True)
+ os.symlink('A', sbox.ospath('Z'))
+ sbox.simple_append('A/B/kappa', 'xyz', True)
+ sbox.simple_add('Z/B/kappa')
+
+def is_posix_os_and_not_root():
+ if not svntest.main.is_posix_os():
+ return False
+ return os.getuid() != 0
+
+@Issue(4118)
+@SkipUnless(is_posix_os_and_not_root)
+def status_with_inaccessible_wc_db(sbox):
+ """inaccessible .svn/wc.db"""
+
+ sbox.build(read_only = True)
+ os.chmod(sbox.ospath(".svn/wc.db"), 0)
+ svntest.actions.run_and_verify_svn(
+ "Status when wc.db is not accessible", None,
+ r"[^ ]+ E155016: The working copy database at '.*' is corrupt",
+ "st", sbox.wc_dir)
+
+@Issue(4118)
+def status_with_corrupt_wc_db(sbox):
+ """corrupt .svn/wc.db"""
+
+ sbox.build(read_only = True)
+ with open(sbox.ospath(".svn/wc.db"), 'wb') as fd:
+ fd.write('\0' * 17)
+ svntest.actions.run_and_verify_svn(
+ "Status when wc.db is corrupt", None,
+ r"[^ ]+ E155016: The working copy database at '.*' is corrupt",
+ "st", sbox.wc_dir)
+
+@Issue(4118)
+def status_with_zero_length_wc_db(sbox):
+ """zero-length .svn/wc.db"""
+
+ sbox.build(read_only = True)
+ os.close(os.open(sbox.ospath(".svn/wc.db"), os.O_RDWR | os.O_TRUNC))
+ svntest.actions.run_and_verify_svn(
+ "Status when wc.db has zero length", None,
+ r"[^ ]+ E200030:", # SVN_ERR_SQLITE_ERROR
+ "st", sbox.wc_dir)
+
+@Issue(4118)
+def status_without_wc_db(sbox):
+ """missing .svn/wc.db"""
+
+ sbox.build(read_only = True)
+ os.remove(sbox.ospath(".svn/wc.db"))
+ svntest.actions.run_and_verify_svn(
+ "Status when wc.db is missing", None,
+ r"[^ ]+ E155016: The working copy database at '.*' is missing",
+ "st", sbox.wc_dir)
+
+@Issue(4118)
+@Skip() # FIXME: Test fails in-tree because it finds the source WC root
+def status_without_wc_db_and_entries(sbox):
+ """missing .svn/wc.db and .svn/entries"""
+
+ sbox.build(read_only = True)
+ os.remove(sbox.ospath(".svn/wc.db"))
+ os.remove(sbox.ospath(".svn/entries"))
+ svntest.actions.run_and_verify_svn2(
+ "Status when wc.db and entries are missing", None,
+ r"[^ ]+ warning: W155007: '.*' is not a working copy",
+ 0, "st", sbox.wc_dir)
+
+@Issue(4118)
+def status_with_missing_wc_db_and_maybe_valid_entries(sbox):
+ """missing .svn/wc.db, maybe valid .svn/entries"""
+
+ sbox.build(read_only = True)
+ with open(sbox.ospath(".svn/entries"), 'ab') as fd:
+ fd.write('something\n')
+ os.remove(sbox.ospath(".svn/wc.db"))
+ svntest.actions.run_and_verify_svn(
+ "Status when wc.db is missing and .svn/entries might be valid", None,
+ r"[^ ]+ E155036:", # SVN_ERR_WC_UPGRADE_REQUIRED
+ "st", sbox.wc_dir)
+
+
+@Issue(4267)
+def cleanup_below_wc_root(sbox):
+ """cleanup from directory below WC root"""
+
+ sbox.build(read_only = True)
+ svntest.actions.lock_admin_dir(sbox.ospath(""), True)
+ svntest.actions.run_and_verify_svn("Cleanup below wc root", None, [],
+ "cleanup", sbox.ospath("A"))
+
+@SkipUnless(svntest.main.is_posix_os)
+@Issue(4383)
+def update_through_unversioned_symlink(sbox):
+ """update through unversioned symlink"""
+
+ sbox.build(read_only = True)
+ wc_dir = sbox.wc_dir
+ state = svntest.actions.get_virginal_state(wc_dir, 1)
+ symlink = sbox.get_tempname()
+ os.symlink(os.path.abspath(sbox.wc_dir), symlink)
+ expected_output = []
+ expected_disk = []
+ expected_status = []
+ # Subversion 1.8.0 crashes when updating a working copy through a symlink
+ svntest.actions.run_and_verify_update(wc_dir, expected_output,
+ expected_disk, expected_status,
+ None, None, None, None, None, 1,
+ symlink)
+
+########################################################################
+# Run the tests
+
+# list all tests here, starting with None:
+test_list = [ None,
+ status_through_unversioned_symlink,
+ status_through_versioned_symlink,
+ status_with_symlink_in_path,
+ add_through_unversioned_symlink,
+ add_through_versioned_symlink,
+ add_with_symlink_in_path,
+ status_with_inaccessible_wc_db,
+ status_with_corrupt_wc_db,
+ status_with_zero_length_wc_db,
+ status_without_wc_db,
+ status_without_wc_db_and_entries,
+ status_with_missing_wc_db_and_maybe_valid_entries,
+ cleanup_below_wc_root,
+ update_through_unversioned_symlink,
+ ]
+
+if __name__ == '__main__':
+ svntest.main.run_tests(test_list)
+ # NOTREACHED
+
+
+### End of file.
diff --git a/subversion/tests/libsvn_client/client-test.c b/subversion/tests/libsvn_client/client-test.c
index 4275c91..9fad3bb 100644
--- a/subversion/tests/libsvn_client/client-test.c
+++ b/subversion/tests/libsvn_client/client-test.c
@@ -28,14 +28,50 @@
#include <limits.h>
#include "svn_mergeinfo.h"
#include "../../libsvn_client/mergeinfo.h"
+#include "../../libsvn_client/client.h"
#include "svn_pools.h"
#include "svn_client.h"
#include "svn_repos.h"
#include "svn_subst.h"
+#include "private/svn_wc_private.h"
#include "../svn_test.h"
#include "../svn_test_fs.h"
+
+/* Create a repository with a filesystem based on OPTS in a subdir NAME,
+ * commit the standard Greek tree as revision 1, and set *REPOS_URL to
+ * the URL we will use to access it.
+ *
+ * ### This always returns a file: URL. We should upgrade this to use the
+ * test suite's specified URL scheme instead. */
+static svn_error_t *
+create_greek_repos(const char **repos_url,
+ const char *name,
+ const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ svn_repos_t *repos;
+ svn_revnum_t committed_rev;
+ svn_fs_txn_t *txn;
+ svn_fs_root_t *txn_root;
+
+ /* Create a filesytem and repository. */
+ SVN_ERR(svn_test__create_repos(&repos, name, opts, pool));
+
+ /* Prepare and commit a txn containing the Greek tree. */
+ SVN_ERR(svn_fs_begin_txn2(&txn, svn_repos_fs(repos), 0 /* rev */,
+ 0 /* flags */, pool));
+ SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+ SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
+ SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &committed_rev, txn, pool));
+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(committed_rev));
+
+ SVN_ERR(svn_uri_get_file_url_from_dirent(repos_url, name, pool));
+ return SVN_NO_ERROR;
+}
+
+
typedef struct mergeinfo_catalog_item {
const char *path;
const char *unparsed_mergeinfo;
@@ -68,26 +104,28 @@ test_elide_mergeinfo_catalog(apr_pool_t *pool)
i < sizeof(elide_testcases) / sizeof(elide_testcases[0]);
i++)
{
- apr_hash_t *catalog;
+ svn_mergeinfo_catalog_t mergeinfo_catalog;
mergeinfo_catalog_item *item;
svn_pool_clear(iterpool);
- catalog = apr_hash_make(iterpool);
+ mergeinfo_catalog = apr_hash_make(iterpool);
for (item = elide_testcases[i]; item->path; item++)
{
- apr_hash_t *mergeinfo;
+ svn_mergeinfo_t mergeinfo;
SVN_ERR(svn_mergeinfo_parse(&mergeinfo, item->unparsed_mergeinfo,
iterpool));
- apr_hash_set(catalog, item->path, APR_HASH_KEY_STRING, mergeinfo);
+ apr_hash_set(mergeinfo_catalog, item->path, APR_HASH_KEY_STRING,
+ mergeinfo);
}
- SVN_ERR(svn_client__elide_mergeinfo_catalog(catalog, iterpool));
+ SVN_ERR(svn_client__elide_mergeinfo_catalog(mergeinfo_catalog,
+ iterpool));
for (item = elide_testcases[i]; item->path; item++)
{
- apr_hash_t *mergeinfo = apr_hash_get(catalog, item->path,
+ apr_hash_t *mergeinfo = apr_hash_get(mergeinfo_catalog, item->path,
APR_HASH_KEY_STRING);
if (item->remains && !mergeinfo)
return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
@@ -244,6 +282,7 @@ check_patch_result(const char *path, const char **expected_lines, const char *eo
svn_pool_destroy(iterpool);
SVN_TEST_ASSERT(i == num_expected_lines);
+ SVN_ERR(svn_stream_close(stream));
SVN_ERR(svn_io_remove_file2(path, FALSE, pool));
return SVN_NO_ERROR;
@@ -290,14 +329,9 @@ static svn_error_t *
test_patch(const svn_test_opts_t *opts,
apr_pool_t *pool)
{
- svn_repos_t *repos;
- svn_fs_t *fs;
- svn_fs_txn_t *txn;
- svn_fs_root_t *txn_root;
const char *repos_url;
const char *wc_path;
const char *cwd;
- svn_revnum_t committed_rev;
svn_opt_revision_t rev;
svn_opt_revision_t peg_rev;
svn_client_ctx_t *ctx;
@@ -332,22 +366,11 @@ test_patch(const svn_test_opts_t *opts,
"+It is really the file 'gamma'."
};
- /* Create a filesytem and repository. */
- SVN_ERR(svn_test__create_repos(&repos, "test-patch-repos",
- opts, pool));
- fs = svn_repos_fs(repos);
-
- /* Prepare a txn to receive the greek tree. */
- SVN_ERR(svn_fs_begin_txn2(&txn, fs, 0, 0, pool));
- SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
- SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
- SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &committed_rev, txn, pool));
- SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(committed_rev));
+ /* Create a filesytem and repository containing the Greek tree. */
+ SVN_ERR(create_greek_repos(&repos_url, "test-patch-repos", opts, pool));
/* Check out the HEAD revision */
SVN_ERR(svn_dirent_get_absolute(&cwd, "", pool));
- SVN_ERR(svn_uri_get_file_url_from_dirent(&repos_url, "test-patch-repos",
- pool));
/* Put wc inside an unversioned directory. Checking out a 1.7 wc
directly inside a 1.6 wc doesn't work reliably, an intervening
@@ -408,10 +431,6 @@ static svn_error_t *
test_wc_add_scenarios(const svn_test_opts_t *opts,
apr_pool_t *pool)
{
- svn_repos_t *repos;
- svn_fs_t *fs;
- svn_fs_txn_t *txn;
- svn_fs_root_t *txn_root;
const char *repos_url;
const char *wc_path;
svn_revnum_t committed_rev;
@@ -422,20 +441,9 @@ test_wc_add_scenarios(const svn_test_opts_t *opts,
const char *ex_dir_path;
const char *ex2_dir_path;
- /* Create a filesytem and repository. */
- SVN_ERR(svn_test__create_repos(&repos, "test-wc-add-repos",
- opts, pool));
- fs = svn_repos_fs(repos);
-
- /* Prepare a txn to receive the greek tree. */
- SVN_ERR(svn_fs_begin_txn2(&txn, fs, 0, 0, pool));
- SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
- SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
- SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &committed_rev, txn, pool));
- SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(committed_rev));
-
- SVN_ERR(svn_uri_get_file_url_from_dirent(&repos_url, "test-wc-add-repos",
- pool));
+ /* Create a filesytem and repository containing the Greek tree. */
+ SVN_ERR(create_greek_repos(&repos_url, "test-wc-add-repos", opts, pool));
+ committed_rev = 1;
SVN_ERR(svn_dirent_get_absolute(&wc_path, "test-wc-add", pool));
@@ -555,34 +563,17 @@ static svn_error_t *
test_copy_crash(const svn_test_opts_t *opts,
apr_pool_t *pool)
{
- svn_repos_t *repos;
- svn_fs_t *fs;
- svn_fs_txn_t *txn;
- svn_fs_root_t *txn_root;
apr_array_header_t *sources;
- svn_revnum_t committed_rev;
svn_opt_revision_t rev;
svn_client_copy_source_t source;
svn_client_ctx_t *ctx;
const char *dest;
const char *repos_url;
- /* Create a filesytem and repository. */
- SVN_ERR(svn_test__create_repos(&repos, "test-copy-crash",
- opts, pool));
- fs = svn_repos_fs(repos);
-
- /* Prepare a txn to receive the greek tree. */
- SVN_ERR(svn_fs_begin_txn2(&txn, fs, 0, 0, pool));
- SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
- SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
- SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &committed_rev, txn, pool));
- SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(committed_rev));
-
- SVN_ERR(svn_uri_get_file_url_from_dirent(&repos_url, "test-copy-crash",
- pool));
+ /* Create a filesytem and repository containing the Greek tree. */
+ SVN_ERR(create_greek_repos(&repos_url, "test-copy-crash", opts, pool));
- svn_client_create_context(&ctx, pool);
+ SVN_ERR(svn_client_create_context(&ctx, pool));
rev.kind = svn_opt_revision_head;
dest = svn_path_url_add_component2(repos_url, "A/E", pool);
@@ -604,11 +595,6 @@ static svn_error_t *
test_16k_add(const svn_test_opts_t *opts,
apr_pool_t *pool)
{
- svn_repos_t *repos;
- svn_fs_t *fs;
- svn_fs_txn_t *txn;
- svn_fs_root_t *txn_root;
- svn_revnum_t committed_rev;
svn_opt_revision_t rev;
svn_client_ctx_t *ctx;
const char *repos_url;
@@ -618,22 +604,11 @@ test_16k_add(const svn_test_opts_t *opts,
apr_pool_t *iterpool = svn_pool_create(pool);
int i;
- /* Create a filesytem and repository. */
- SVN_ERR(svn_test__create_repos(&repos, "test-16k-repos",
- opts, pool));
- fs = svn_repos_fs(repos);
-
- /* Prepare a txn to receive the greek tree. */
- SVN_ERR(svn_fs_begin_txn2(&txn, fs, 0, 0, pool));
- SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
- SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
- SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &committed_rev, txn, pool));
- SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(committed_rev));
+ /* Create a filesytem and repository containing the Greek tree. */
+ SVN_ERR(create_greek_repos(&repos_url, "test-16k-repos", opts, pool));
/* Check out the HEAD revision */
SVN_ERR(svn_dirent_get_absolute(&cwd, "", pool));
- SVN_ERR(svn_uri_get_file_url_from_dirent(&repos_url, "test-16k-repos",
- pool));
/* Put wc inside an unversioned directory. Checking out a 1.7 wc
directly inside a 1.6 wc doesn't work reliably, an intervening
@@ -661,8 +636,8 @@ test_16k_add(const svn_test_opts_t *opts,
svn_io_file_del_none,
iterpool, iterpool));
- SVN_ERR(svn_client_add4(path, svn_depth_unknown, FALSE, FALSE, FALSE,
- ctx, iterpool));
+ SVN_ERR(svn_client_add5(path, svn_depth_unknown, FALSE, FALSE, FALSE,
+ FALSE, ctx, iterpool));
}
targets = apr_array_make(pool, 1, sizeof(const char *));
@@ -677,6 +652,123 @@ test_16k_add(const svn_test_opts_t *opts,
}
#endif
+static svn_error_t *
+test_youngest_common_ancestor(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ const char *repos_url;
+ const char *repos_uuid = "fake-uuid"; /* the functions we call don't care */
+ svn_client_ctx_t *ctx;
+ svn_opt_revision_t head_rev = { svn_opt_revision_head, { 0 } };
+ svn_opt_revision_t zero_rev = { svn_opt_revision_number, { 0 } };
+ svn_client_copy_source_t source;
+ apr_array_header_t *sources;
+ const char *dest;
+ svn_client__pathrev_t *yc_ancestor;
+
+ /* Create a filesytem and repository containing the Greek tree. */
+ SVN_ERR(create_greek_repos(&repos_url, "test-youngest-common-ancestor", opts, pool));
+
+ SVN_ERR(svn_client_create_context(&ctx, pool));
+
+ /* Copy a file into dir 'A', keeping its own basename. */
+ sources = apr_array_make(pool, 1, sizeof(svn_client_copy_source_t *));
+ source.path = svn_path_url_add_component2(repos_url, "iota", pool);
+ source.peg_revision = &head_rev;
+ source.revision = &head_rev;
+ APR_ARRAY_PUSH(sources, svn_client_copy_source_t *) = &source;
+ dest = svn_path_url_add_component2(repos_url, "A", pool);
+ SVN_ERR(svn_client_copy6(sources, dest, TRUE /* copy_as_child */,
+ FALSE /* make_parents */,
+ FALSE /* ignore_externals */,
+ NULL, NULL, NULL, ctx, pool));
+
+ /* Test: YCA(iota@2, A/iota@2) is iota@1. */
+ SVN_ERR(svn_client__get_youngest_common_ancestor(
+ &yc_ancestor,
+ svn_client__pathrev_create_with_relpath(
+ repos_url, repos_uuid, 2, "iota", pool),
+ svn_client__pathrev_create_with_relpath(
+ repos_url, repos_uuid, 2, "A/iota", pool),
+ NULL, ctx, pool, pool));
+ SVN_TEST_STRING_ASSERT(svn_client__pathrev_relpath(yc_ancestor, pool),
+ "iota");
+ SVN_TEST_ASSERT(yc_ancestor->rev == 1);
+
+ /* Copy the root directory (at revision 0) into A as 'ROOT'. */
+ sources = apr_array_make(pool, 1, sizeof(svn_client_copy_source_t *));
+ source.path = repos_url;
+ source.peg_revision = &zero_rev;
+ source.revision = &zero_rev;
+ APR_ARRAY_PUSH(sources, svn_client_copy_source_t *) = &source;
+ dest = svn_path_url_add_component2(repos_url, "A/ROOT", pool);
+ SVN_ERR(svn_client_copy6(sources, dest, FALSE /* copy_as_child */,
+ FALSE /* make_parents */,
+ FALSE /* ignore_externals */,
+ NULL, NULL, NULL, ctx, pool));
+
+ /* Test: YCA(''@0, A/ROOT@3) is ''@0 (handled as a special case). */
+ SVN_ERR(svn_client__get_youngest_common_ancestor(
+ &yc_ancestor,
+ svn_client__pathrev_create_with_relpath(
+ repos_url, repos_uuid, 0, "", pool),
+ svn_client__pathrev_create_with_relpath(
+ repos_url, repos_uuid, 3, "A/ROOT", pool),
+ NULL, ctx, pool, pool));
+ SVN_TEST_STRING_ASSERT(svn_client__pathrev_relpath(yc_ancestor, pool), "");
+ SVN_TEST_ASSERT(yc_ancestor->rev == 0);
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_foreign_repos_copy(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ svn_opt_revision_t rev;
+ svn_opt_revision_t peg_rev;
+ const char *repos_url;
+ const char *repos2_url;
+ const char *wc_path;
+ svn_client_ctx_t *ctx;
+/* Create a filesytem and repository containing the Greek tree. */
+ SVN_ERR(create_greek_repos(&repos_url, "foreign-copy1", opts, pool));
+ SVN_ERR(create_greek_repos(&repos2_url, "foreign-copy2", opts, pool));
+
+ SVN_ERR(svn_dirent_get_absolute(&wc_path, "test-wc-add", pool));
+
+ wc_path = svn_dirent_join(wc_path, "foreign-wc", pool);
+
+ /* Remove old test data from the previous run */
+ SVN_ERR(svn_io_remove_dir2(wc_path, TRUE, NULL, NULL, pool));
+
+ SVN_ERR(svn_io_make_dir_recursively(wc_path, pool));
+ svn_test_add_dir_cleanup(wc_path);
+
+ rev.kind = svn_opt_revision_head;
+ peg_rev.kind = svn_opt_revision_unspecified;
+ SVN_ERR(svn_client_create_context(&ctx, pool));
+ /* Checkout greek tree as wc_path */
+ SVN_ERR(svn_client_checkout3(NULL, repos_url, wc_path, &peg_rev, &rev,
+ svn_depth_infinity, FALSE, FALSE, ctx, pool));
+
+ SVN_ERR(svn_client__copy_foreign(svn_path_url_add_component2(repos2_url, "A",
+ pool),
+ svn_dirent_join(wc_path, "A-copied", pool),
+ &peg_rev, &rev, svn_depth_infinity, FALSE, FALSE,
+ ctx, pool));
+
+
+ SVN_ERR(svn_client__copy_foreign(svn_path_url_add_component2(repos2_url,
+ "iota",
+ pool),
+ svn_dirent_join(wc_path, "iota-copied", pool),
+ &peg_rev, &rev, svn_depth_infinity, FALSE, FALSE,
+ ctx, pool));
+
+ return SVN_NO_ERROR;
+}
+
/* ========================================================================== */
struct svn_test_descriptor_t test_funcs[] =
@@ -692,5 +784,7 @@ struct svn_test_descriptor_t test_funcs[] =
#ifdef TEST16K_ADD
SVN_TEST_OPTS_PASS(test_16k_add, "test adding 16k files"),
#endif
+ SVN_TEST_OPTS_PASS(test_youngest_common_ancestor, "test youngest_common_ancestor"),
+ SVN_TEST_OPTS_PASS(test_foreign_repos_copy, "test foreign repository copy"),
SVN_TEST_NULL
};
diff --git a/subversion/tests/libsvn_delta/random-test.c b/subversion/tests/libsvn_delta/random-test.c
index 2347ef0..209ab1d 100644
--- a/subversion/tests/libsvn_delta/random-test.c
+++ b/subversion/tests/libsvn_delta/random-test.c
@@ -57,7 +57,7 @@ static void init_params(apr_uint32_t *seed,
apr_uint32_t *maxlen, int *iterations,
int *dump_files, int *print_windows,
const char **random_bytes,
- apr_uint32_t *bytes_range,
+ apr_size_t *bytes_range,
apr_pool_t *pool)
{
apr_getopt_t *opt;
@@ -80,7 +80,7 @@ static void init_params(apr_uint32_t *seed,
switch (optch)
{
case 's':
- *seed = atol(opt_arg);
+ *seed = (apr_uint32_t) atol(opt_arg);
break;
case 'l':
*maxlen = atoi(opt_arg);
@@ -160,7 +160,7 @@ generate_random_file(apr_uint32_t maxlen,
apr_uint32_t subseed_base,
apr_uint32_t *seed,
const char *random_bytes,
- apr_uint32_t bytes_range,
+ apr_size_t bytes_range,
int dump_files,
apr_pool_t *pool)
{
@@ -189,7 +189,7 @@ generate_random_file(apr_uint32_t maxlen,
{
const int ch = (random_bytes
? (unsigned)random_bytes[r % bytes_range]
- : r % bytes_range);
+ : (int)(r % bytes_range));
if (buf == end)
{
apr_size_t ignore_length;
@@ -198,7 +198,7 @@ generate_random_file(apr_uint32_t maxlen,
buf = file_buffer;
}
- *buf++ = ch;
+ *buf++ = (char)ch;
r = r * 1103515245 + 12345;
}
}
@@ -287,7 +287,8 @@ copy_tempfile(apr_file_t *fp, apr_pool_t *pool)
static svn_error_t *
random_test(apr_pool_t *pool)
{
- apr_uint32_t seed, bytes_range, maxlen;
+ apr_uint32_t seed, maxlen;
+ apr_size_t bytes_range;
int i, iterations, dump_files, print_windows;
const char *random_bytes;
@@ -335,10 +336,11 @@ random_test(apr_pool_t *pool)
delta_pool);
/* Make stage 1: create the text delta. */
- svn_txdelta(&txdelta_stream,
- svn_stream_from_aprfile(source, delta_pool),
- svn_stream_from_aprfile(target, delta_pool),
- delta_pool);
+ svn_txdelta2(&txdelta_stream,
+ svn_stream_from_aprfile(source, delta_pool),
+ svn_stream_from_aprfile(target, delta_pool),
+ FALSE,
+ delta_pool);
SVN_ERR(svn_txdelta_send_txstream(txdelta_stream,
handler,
@@ -365,7 +367,8 @@ static svn_error_t *
do_random_combine_test(apr_pool_t *pool,
apr_uint32_t *last_seed)
{
- apr_uint32_t seed, bytes_range, maxlen;
+ apr_uint32_t seed, maxlen;
+ apr_size_t bytes_range;
int i, iterations, dump_files, print_windows;
const char *random_bytes;
@@ -419,15 +422,17 @@ do_random_combine_test(apr_pool_t *pool,
/* Make stage 1: create the text deltas. */
- svn_txdelta(&txdelta_stream_A,
- svn_stream_from_aprfile(source, delta_pool),
- svn_stream_from_aprfile(middle, delta_pool),
- delta_pool);
-
- svn_txdelta(&txdelta_stream_B,
- svn_stream_from_aprfile(middle_copy, delta_pool),
- svn_stream_from_aprfile(target, delta_pool),
- delta_pool);
+ svn_txdelta2(&txdelta_stream_A,
+ svn_stream_from_aprfile(source, delta_pool),
+ svn_stream_from_aprfile(middle, delta_pool),
+ FALSE,
+ delta_pool);
+
+ svn_txdelta2(&txdelta_stream_B,
+ svn_stream_from_aprfile(middle_copy, delta_pool),
+ svn_stream_from_aprfile(target, delta_pool),
+ FALSE,
+ delta_pool);
{
svn_txdelta_window_t *window_A;
diff --git a/subversion/tests/libsvn_delta/range-index-test.h b/subversion/tests/libsvn_delta/range-index-test.h
index 75c6057..4301201 100644
--- a/subversion/tests/libsvn_delta/range-index-test.h
+++ b/subversion/tests/libsvn_delta/range-index-test.h
@@ -1,5 +1,5 @@
/*
- * range-index-test.c: An extension for random-test.
+ * range-index-test.h: An extension for random-test.
*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
@@ -136,8 +136,9 @@ check_copy_count(int src_cp, int tgt_cp)
static svn_error_t *
random_range_index_test(apr_pool_t *pool)
{
- unsigned long seed, bytes_range;
- int i, maxlen, iterations, dump_files, print_windows;
+ apr_uint32_t seed, maxlen;
+ apr_size_t bytes_range;
+ int i, iterations, dump_files, print_windows;
const char *random_bytes;
range_index_t *ndx;
int tgt_cp = 0, src_cp = 0;
@@ -153,8 +154,8 @@ random_range_index_test(apr_pool_t *pool)
ndx = create_range_index(pool);
for (i = 1; i <= iterations; ++i)
{
- apr_off_t offset = myrand(&seed) % 47;
- apr_off_t limit = offset + myrand(&seed) % 16 + 1;
+ apr_off_t offset = svn_test_rand(&seed) % 47;
+ apr_off_t limit = offset + svn_test_rand(&seed) % 16 + 1;
range_list_node_t *list, *r;
apr_off_t ret;
const char *msg2;
@@ -181,8 +182,7 @@ random_range_index_test(apr_pool_t *pool)
printf(" Ooops!\n");
print_range_index(ndx->tree, msg2, ret);
check_copy_count(src_cp, tgt_cp);
- return svn_error_create(SVN_ERR_TEST_FAILED, 0, NULL, pool,
- "insert_range");
+ return svn_error_create(SVN_ERR_TEST_FAILED, NULL, "insert_range");
}
}
diff --git a/subversion/tests/libsvn_delta/svndiff-test.c b/subversion/tests/libsvn_delta/svndiff-test.c
index 3bd390c..1d1d220 100644
--- a/subversion/tests/libsvn_delta/svndiff-test.c
+++ b/subversion/tests/libsvn_delta/svndiff-test.c
@@ -75,10 +75,11 @@ main(int argc, char **argv)
if (argc == 4)
version = atoi(argv[3]);
- svn_txdelta(&txdelta_stream,
- svn_stream_from_aprfile(source_file, pool),
- svn_stream_from_aprfile(target_file, pool),
- pool);
+ svn_txdelta2(&txdelta_stream,
+ svn_stream_from_aprfile(source_file, pool),
+ svn_stream_from_aprfile(target_file, pool),
+ FALSE,
+ pool);
err = svn_stream_for_stdout(&stdout_stream, pool);
if (err)
diff --git a/subversion/tests/libsvn_delta/vdelta-test.c b/subversion/tests/libsvn_delta/vdelta-test.c
index 14514cf..f214a0e 100644
--- a/subversion/tests/libsvn_delta/vdelta-test.c
+++ b/subversion/tests/libsvn_delta/vdelta-test.c
@@ -28,6 +28,7 @@
#include "../svn_test.h"
+#include "svn_ctype.h"
#include "svn_delta.h"
#include "svn_error.h"
#include "svn_pools.h"
@@ -59,10 +60,11 @@ do_one_diff(apr_file_t *source_file, apr_file_t *target_file,
*count = 0;
*len = 0;
- svn_txdelta(&delta_stream,
- svn_stream_from_aprfile(source_file, fpool),
- svn_stream_from_aprfile(target_file, fpool),
- fpool);
+ svn_txdelta2(&delta_stream,
+ svn_stream_from_aprfile(source_file, fpool),
+ svn_stream_from_aprfile(target_file, fpool),
+ FALSE,
+ fpool);
do {
svn_error_t *err;
err = svn_txdelta_next_window(&delta_window, delta_stream, wpool);
@@ -82,75 +84,17 @@ do_one_diff(apr_file_t *source_file, apr_file_t *target_file,
}
-static apr_file_t *
-open_binary_read(const char *path, apr_pool_t *pool)
-{
- apr_status_t apr_err;
- apr_file_t *fp;
-
- apr_err = apr_file_open(&fp, path, (APR_READ | APR_BINARY),
- APR_OS_DEFAULT, pool);
-
- if (apr_err)
- {
- fprintf(stderr, "unable to open \"%s\" for reading\n", path);
- exit(1);
- }
-
- return fp;
-}
-
-
-int
-main(int argc, char **argv)
+static void
+do_one_test_cycle(apr_file_t *source_file_A, apr_file_t *target_file_A,
+ apr_file_t *source_file_B, apr_file_t *target_file_B,
+ int quiet, apr_pool_t *pool)
{
- apr_file_t *source_file_A = NULL;
- apr_file_t *target_file_A = NULL;
int count_A = 0;
apr_off_t len_A = 0;
- apr_file_t *source_file_B = NULL;
- apr_file_t *target_file_B = NULL;
int count_B = 0;
apr_off_t len_B = 0;
- apr_pool_t *pool;
- int quiet = 0;
-
- if (argc > 1 && argv[1][0] == '-' && argv[1][1] == 'q')
- {
- quiet = 1;
- --argc; ++argv;
- }
-
- apr_initialize();
- pool = svn_pool_create(NULL);
-
- if (argc == 2)
- {
- target_file_A = open_binary_read(argv[1], pool);
- }
- else if (argc == 3)
- {
- source_file_A = open_binary_read(argv[1], pool);
- target_file_A = open_binary_read(argv[2], pool);
- }
- else if (argc == 4)
- {
- source_file_A = open_binary_read(argv[1], pool);
- target_file_A = open_binary_read(argv[2], pool);
- source_file_B = open_binary_read(argv[2], pool);
- target_file_B = open_binary_read(argv[3], pool);
- }
- else
- {
- fprintf(stderr,
- "Usage: vdelta-test [-q] <target>\n"
- " or: vdelta-test [-q] <source> <target>\n"
- " or: vdelta-test [-q] <source> <intermediate> <target>\n");
- exit(1);
- }
-
do_one_diff(source_file_A, target_file_A,
&count_A, &len_A, quiet, pool, "A ", stdout);
@@ -181,14 +125,16 @@ main(int argc, char **argv)
apr_file_seek(target_file_B, APR_SET, &offset);
}
- svn_txdelta(&stream_A,
- svn_stream_from_aprfile(source_file_A, fpool),
- svn_stream_from_aprfile(target_file_A, fpool),
- fpool);
- svn_txdelta(&stream_B,
- svn_stream_from_aprfile(source_file_B, fpool),
- svn_stream_from_aprfile(target_file_B, fpool),
- fpool);
+ svn_txdelta2(&stream_A,
+ svn_stream_from_aprfile(source_file_A, fpool),
+ svn_stream_from_aprfile(target_file_A, fpool),
+ FALSE,
+ fpool);
+ svn_txdelta2(&stream_B,
+ svn_stream_from_aprfile(source_file_B, fpool),
+ svn_stream_from_aprfile(target_file_B, fpool),
+ FALSE,
+ fpool);
for (count_AB = 0; count_AB < count_B; ++count_AB)
{
@@ -219,6 +165,98 @@ main(int argc, char **argv)
fprintf(stdout, "AB: (LENGTH %" APR_OFF_T_FMT " +%d)\n",
len_AB, count_AB);
}
+}
+
+
+static apr_file_t *
+open_binary_read(const char *path, apr_pool_t *pool)
+{
+ apr_status_t apr_err;
+ apr_file_t *fp;
+
+ apr_err = apr_file_open(&fp, path, (APR_READ | APR_BINARY),
+ APR_OS_DEFAULT, pool);
+
+ if (apr_err)
+ {
+ fprintf(stderr, "unable to open \"%s\" for reading\n", path);
+ exit(1);
+ }
+
+ return fp;
+}
+
+
+int
+main(int argc, char **argv)
+{
+ apr_file_t *source_file_A = NULL;
+ apr_file_t *target_file_A = NULL;
+
+ apr_file_t *source_file_B = NULL;
+ apr_file_t *target_file_B = NULL;
+
+ apr_pool_t *pool;
+ int quiet = 0;
+ int repeat = 1;
+
+ while (argc > 1)
+ {
+ const char *const arg = argv[1];
+ if (arg[0] != '-')
+ break;
+
+ if (arg[1] == 'q')
+ quiet = 1;
+ else if (svn_ctype_isdigit(arg[1]))
+ repeat = atoi(arg + 1);
+ else
+ break;
+ --argc; ++argv;
+ }
+
+ apr_initialize();
+ pool = svn_pool_create(NULL);
+
+ if (argc == 2)
+ {
+ target_file_A = open_binary_read(argv[1], pool);
+ }
+ else if (argc == 3)
+ {
+ source_file_A = open_binary_read(argv[1], pool);
+ target_file_A = open_binary_read(argv[2], pool);
+ }
+ else if (argc == 4)
+ {
+ source_file_A = open_binary_read(argv[1], pool);
+ target_file_A = open_binary_read(argv[2], pool);
+ source_file_B = open_binary_read(argv[2], pool);
+ target_file_B = open_binary_read(argv[3], pool);
+ }
+ else
+ {
+ fprintf(stderr,
+ "Usage: vdelta-test [-q] [-<repeat>] <target>\n"
+ " or: vdelta-test [-q] [-<repeat>] <source> <target>\n"
+ " or: vdelta-test [-q] [-<repeat>] "
+ "<source> <intermediate> <target>\n");
+ exit(1);
+ }
+
+ while (0 < repeat--)
+ {
+ apr_off_t offset = 0;
+
+ do_one_test_cycle(source_file_A, target_file_A,
+ source_file_B, target_file_B,
+ quiet, pool);
+
+ if (source_file_A) apr_file_seek(source_file_A, APR_SET, &offset);
+ if (target_file_A) apr_file_seek(target_file_A, APR_SET, &offset);
+ if (source_file_B) apr_file_seek(source_file_B, APR_SET, &offset);
+ if (target_file_B) apr_file_seek(target_file_B, APR_SET, &offset);
+ }
if (source_file_A) apr_file_close(source_file_A);
if (target_file_A) apr_file_close(target_file_A);
diff --git a/subversion/tests/libsvn_delta/window-test.c b/subversion/tests/libsvn_delta/window-test.c
index f5ed5c2..384f0df 100644
--- a/subversion/tests/libsvn_delta/window-test.c
+++ b/subversion/tests/libsvn_delta/window-test.c
@@ -29,6 +29,7 @@
#include "svn_error.h"
#include "svn_delta.h"
+#include "private/svn_subr_private.h"
static svn_error_t *
stream_window_test(apr_pool_t *pool)
@@ -69,7 +70,7 @@ stream_window_test(apr_pool_t *pool)
target_str.len = 109000;
target_stream = svn_stream_from_string(&target_str, pool);
- svn_txdelta(&txstream, source_stream, target_stream, pool);
+ svn_txdelta2(&txstream, source_stream, target_stream, TRUE, pool);
while (1)
{
@@ -82,8 +83,8 @@ stream_window_test(apr_pool_t *pool)
/* ### examine the window */
}
- actual = svn_checksum__from_digest(svn_txdelta_md5_digest(txstream),
- svn_checksum_md5, pool);
+ actual = svn_checksum__from_digest_md5(svn_txdelta_md5_digest(txstream),
+ pool);
printf(" actual: %s\n", svn_checksum_to_cstring(actual, pool));
if (!svn_checksum_match(expected, actual))
diff --git a/subversion/tests/libsvn_diff/diff-diff3-test.c b/subversion/tests/libsvn_diff/diff-diff3-test.c
index a81520a..1839034 100644
--- a/subversion/tests/libsvn_diff/diff-diff3-test.c
+++ b/subversion/tests/libsvn_diff/diff-diff3-test.c
@@ -76,16 +76,14 @@ make_random_file(const char *filename,
apr_pool_t *pool)
{
apr_file_t *file;
- apr_status_t status;
int num_lines;
num_lines = range_rand(min_lines, max_lines);
- status = apr_file_open(&file, filename,
- APR_WRITE | APR_CREATE | APR_TRUNCATE, APR_OS_DEFAULT,
- pool);
- if (status)
- return svn_error_createf(status, NULL, "failed to open '%s'", filename);
+ SVN_ERR(svn_io_file_open(&file, filename,
+ APR_WRITE | APR_CREATE | APR_TRUNCATE,
+ APR_OS_DEFAULT,
+ pool));
while (num_lines--)
{
@@ -100,9 +98,7 @@ make_random_file(const char *filename,
apr_file_printf(file, "line %d line %d line %d", x, x, x);
}
- status = apr_file_close(file);
- if (status)
- return svn_error_createf(status, NULL, "failed to close '%s'", filename);
+ SVN_ERR(svn_io_file_close(file, pool));
return SVN_NO_ERROR;
}
@@ -117,19 +113,15 @@ make_file(const char *filename,
apr_file_t *file;
apr_status_t status;
- status = apr_file_open(&file, filename,
- APR_WRITE | APR_CREATE | APR_TRUNCATE, APR_OS_DEFAULT,
- pool);
- if (status)
- return svn_error_createf(status, NULL, "failed to open '%s'", filename);
+ SVN_ERR(svn_io_file_open(&file, filename,
+ APR_WRITE | APR_CREATE | APR_TRUNCATE,
+ APR_OS_DEFAULT, pool));
status = apr_file_write_full(file, contents, strlen(contents), NULL);
if (status)
return svn_error_createf(status, NULL, "failed to write '%s'", filename);
- status = apr_file_close(file);
- if (status)
- return svn_error_createf(status, NULL, "failed to close '%s'", filename);
+ SVN_ERR(svn_io_file_close(file, pool));
return SVN_NO_ERROR;
}
@@ -159,7 +151,6 @@ three_way_merge(const char *filename1,
svn_diff_t *diff;
apr_file_t *output;
svn_stream_t *ostream;
- apr_status_t status;
svn_stringbuf_t *actual;
char *merge_name = apr_psprintf(pool, "merge-%s-%s-%s",
filename1, filename2, filename3);
@@ -175,7 +166,7 @@ three_way_merge(const char *filename1,
SVN_ERR(svn_diff_mem_string_diff3(&diff,
original, modified, latest, options, pool));
- actual = svn_stringbuf_create("", pool);
+ actual = svn_stringbuf_create_empty(pool);
ostream = svn_stream_from_stringbuf(actual, pool);
SVN_ERR(svn_diff_mem_string_output_merge2
@@ -199,34 +190,29 @@ three_way_merge(const char *filename1,
SVN_ERR(svn_diff_file_diff3_2(&diff, filename1, filename2, filename3,
options, pool));
- status = apr_file_open(&output, merge_name,
- APR_WRITE | APR_CREATE | APR_TRUNCATE, APR_OS_DEFAULT,
- pool);
- if (status)
- return svn_error_createf(status, NULL, "failed to open '%s'", merge_name);
+ SVN_ERR(svn_io_file_open(&output, merge_name,
+ APR_WRITE | APR_CREATE | APR_TRUNCATE,
+ APR_OS_DEFAULT, pool));
- ostream = svn_stream_from_aprfile(output, pool);
+ ostream = svn_stream_from_aprfile2(output, FALSE, pool);
SVN_ERR(svn_diff_file_output_merge2(ostream, diff,
filename1, filename2, filename3,
NULL, NULL, NULL, NULL,
style,
pool));
SVN_ERR(svn_stream_close(ostream));
- status = apr_file_close(output);
- if (status)
- return svn_error_createf(status, NULL, "failed to close '%s'", merge_name);
- SVN_ERR(svn_stringbuf_from_file(&actual, merge_name, pool));
+ SVN_ERR(svn_stringbuf_from_file2(&actual, merge_name, pool));
if (strcmp(actual->data, expected))
return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
"failed merging diff '%s' to '%s' into '%s'",
filename1, filename2, filename3);
- SVN_ERR(svn_io_remove_file(filename1, pool));
+ SVN_ERR(svn_io_remove_file2(filename1, TRUE, pool));
if (strcmp(filename1, filename2))
- SVN_ERR(svn_io_remove_file(filename2, pool));
+ SVN_ERR(svn_io_remove_file2(filename2, TRUE, pool));
if (strcmp(filename1, filename3) && strcmp(filename2, filename3))
- SVN_ERR(svn_io_remove_file(filename3, pool));
- SVN_ERR(svn_io_remove_file(merge_name, pool));
+ SVN_ERR(svn_io_remove_file2(filename3, TRUE, pool));
+ SVN_ERR(svn_io_remove_file2(merge_name, TRUE, pool));
return SVN_NO_ERROR;
}
@@ -252,10 +238,15 @@ two_way_diff(const char *filename1,
svn_diff_t *diff;
apr_file_t *output;
svn_stream_t *ostream;
- apr_status_t status;
svn_stringbuf_t *actual;
char *diff_name = apr_psprintf(pool, "diff-%s-%s", filename1, filename2);
+ /* Some of the tests have lots of lines, although not much data as
+ the lines are short, and the in-memory diffs allocate a lot of
+ memory. Since we are doing multiple diff in a single test we use
+ a subpool to reuse that memory. */
+ apr_pool_t *subpool = svn_pool_create(pool);
+
/* We have an EXPECTED string we can match, because we don't support
any other combinations (yet) than the ones above. */
svn_string_t *original = svn_string_create(contents1, pool);
@@ -263,15 +254,17 @@ two_way_diff(const char *filename1,
options = options ? options : svn_diff_file_options_create(pool);
- SVN_ERR(svn_diff_mem_string_diff(&diff, original, modified, options, pool));
+ SVN_ERR(svn_diff_mem_string_diff(&diff, original, modified, options,
+ subpool));
- actual = svn_stringbuf_create("", pool);
+ actual = svn_stringbuf_create_empty(pool);
ostream = svn_stream_from_stringbuf(actual, pool);
SVN_ERR(svn_diff_mem_string_output_unified(ostream, diff,
filename1, filename2,
SVN_APR_LOCALE_CHARSET,
- original, modified, pool));
+ original, modified, subpool));
+ svn_pool_clear(subpool);
SVN_ERR(svn_stream_close(ostream));
if (strcmp(actual->data, expected) != 0)
return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
@@ -285,39 +278,56 @@ two_way_diff(const char *filename1,
/* Check that two-way diff between contents1 and contents2 produces
expected output. */
SVN_ERR(svn_diff_file_diff_2(&diff, filename1, filename2, options, pool));
- status = apr_file_open(&output, diff_name,
- APR_WRITE | APR_CREATE | APR_TRUNCATE, APR_OS_DEFAULT,
- pool);
- if (status)
- return svn_error_createf(status, NULL, "failed to open '%s'", diff_name);
- ostream = svn_stream_from_aprfile(output, pool);
+ SVN_ERR(svn_io_file_open(&output, diff_name,
+ APR_WRITE | APR_CREATE | APR_TRUNCATE,
+ APR_OS_DEFAULT, pool));
+
+ ostream = svn_stream_from_aprfile2(output, FALSE, pool);
SVN_ERR(svn_diff_file_output_unified2(ostream, diff,
filename1, filename2,
filename1, filename2,
SVN_APR_LOCALE_CHARSET, pool));
SVN_ERR(svn_stream_close(ostream));
- status = apr_file_close(output);
- if (status)
- return svn_error_createf(status, NULL, "failed to close '%s'", diff_name);
- SVN_ERR(svn_stringbuf_from_file(&actual, diff_name, pool));
+ SVN_ERR(svn_stringbuf_from_file2(&actual, diff_name, pool));
if (strcmp(actual->data, expected))
- return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
- "failed comparing '%s' and '%s'",
- filename1, filename2);
+ {
+ /*svn_stringbuf_t *dump_actual;
+ svn_stream_t *dump_ostream;
+ dump_actual = svn_stringbuf_create_empty(pool);
+ dump_ostream = svn_stream_from_stringbuf(dump_actual, pool);
+
+ SVN_ERR(svn_diff_mem_string_output_unified(dump_ostream, diff,
+ "expected", "actual",
+ SVN_APR_LOCALE_CHARSET,
+ svn_string_create(expected, pool),
+ svn_string_create(actual->data, pool),
+ pool));
+ SVN_ERR(svn_stream_close(ostream));
+
+ SVN_DBG(("%s\n", dump_actual->data));
+
+ SVN_ERR(make_file("memory", expected, pool));*/
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "failed comparing '%s' and '%s'"
+ " (memory and file results are different)",
+ filename1, filename2);
+ }
/* May as well do the trivial merges while we are here */
SVN_ERR(three_way_merge(filename1, filename2, filename1,
contents1, contents2, contents1, contents2, NULL,
svn_diff_conflict_display_modified_latest,
- pool));
+ subpool));
+ svn_pool_clear(subpool);
SVN_ERR(three_way_merge(filename2, filename1, filename2,
contents2, contents1, contents2, contents1, NULL,
svn_diff_conflict_display_modified_latest,
- pool));
+ subpool));
+ svn_pool_destroy(subpool);
- SVN_ERR(svn_io_remove_file(diff_name, pool));
+ SVN_ERR(svn_io_remove_file2(diff_name, TRUE, pool));
return SVN_NO_ERROR;
}
@@ -373,14 +383,11 @@ make_random_merge_file(const char *filename,
apr_pool_t *pool)
{
apr_file_t *file;
- apr_status_t status;
int i;
- status = apr_file_open(&file, filename,
- APR_WRITE | APR_CREATE | APR_TRUNCATE, APR_OS_DEFAULT,
- pool);
- if (status)
- return svn_error_createf(status, NULL, "failed to open '%s'", filename);
+ SVN_ERR(svn_io_file_open(&file, filename,
+ APR_WRITE | APR_CREATE | APR_TRUNCATE,
+ APR_OS_DEFAULT, pool));
for (i = 0; i < num_lines; ++i)
{
@@ -413,9 +420,7 @@ make_random_merge_file(const char *filename,
}
}
- status = apr_file_close(file);
- if (status)
- return svn_error_createf(status, NULL, "failed to close '%s'", filename);
+ SVN_ERR(svn_io_file_close(file, pool));
return SVN_NO_ERROR;
}
@@ -2193,8 +2198,8 @@ random_trivial_merge(apr_pool_t *pool)
min_lines, max_lines, var_lines, block_lines,
i % 2, subpool));
- SVN_ERR(svn_stringbuf_from_file(&contents1, filename1, subpool));
- SVN_ERR(svn_stringbuf_from_file(&contents2, filename2, subpool));
+ SVN_ERR(svn_stringbuf_from_file2(&contents1, filename1, subpool));
+ SVN_ERR(svn_stringbuf_from_file2(&contents2, filename2, subpool));
SVN_ERR(three_way_merge(filename1, filename2, filename1,
contents1->data, contents2->data,
@@ -2262,10 +2267,10 @@ random_three_way_merge(apr_pool_t *pool)
SVN_ERR(make_random_merge_file(filename4, num_lines, mrg_lines,
num_src + num_dst, pool));
- SVN_ERR(svn_stringbuf_from_file(&original, filename1, pool));
- SVN_ERR(svn_stringbuf_from_file(&modified1, filename2, pool));
- SVN_ERR(svn_stringbuf_from_file(&modified2, filename3, pool));
- SVN_ERR(svn_stringbuf_from_file(&combined, filename4, pool));
+ SVN_ERR(svn_stringbuf_from_file2(&original, filename1, pool));
+ SVN_ERR(svn_stringbuf_from_file2(&modified1, filename2, pool));
+ SVN_ERR(svn_stringbuf_from_file2(&modified2, filename3, pool));
+ SVN_ERR(svn_stringbuf_from_file2(&combined, filename4, pool));
SVN_ERR(three_way_merge(filename1, filename2, filename3,
original->data, modified1->data,
@@ -2278,7 +2283,7 @@ random_three_way_merge(apr_pool_t *pool)
svn_diff_conflict_display_modified_latest,
subpool));
- SVN_ERR(svn_io_remove_file(filename4, pool));
+ SVN_ERR(svn_io_remove_file2(filename4, TRUE, pool));
svn_pool_clear(subpool);
}
@@ -2335,10 +2340,10 @@ merge_with_part_already_present(apr_pool_t *pool)
SVN_ERR(make_random_merge_file(filename4, num_lines, mrg_lines,
num_src + num_dst / 2, pool));
- SVN_ERR(svn_stringbuf_from_file(&original, filename1, pool));
- SVN_ERR(svn_stringbuf_from_file(&modified1, filename2, pool));
- SVN_ERR(svn_stringbuf_from_file(&modified2, filename3, pool));
- SVN_ERR(svn_stringbuf_from_file(&combined, filename4, pool));
+ SVN_ERR(svn_stringbuf_from_file2(&original, filename1, pool));
+ SVN_ERR(svn_stringbuf_from_file2(&modified1, filename2, pool));
+ SVN_ERR(svn_stringbuf_from_file2(&modified2, filename3, pool));
+ SVN_ERR(svn_stringbuf_from_file2(&combined, filename4, pool));
SVN_ERR(three_way_merge(filename1, filename2, filename3,
original->data, modified1->data,
@@ -2351,7 +2356,7 @@ merge_with_part_already_present(apr_pool_t *pool)
svn_diff_conflict_display_modified_latest,
subpool));
- SVN_ERR(svn_io_remove_file(filename4, pool));
+ SVN_ERR(svn_io_remove_file2(filename4, TRUE, pool));
svn_pool_clear(subpool);
}
@@ -2394,7 +2399,519 @@ merge_adjacent_changes(apr_pool_t *pool)
return SVN_NO_ERROR;
}
+/* Issue #4133, 'When sequences of whitespace characters at head of line
+ strides chunk boundary, "diff -x -w" showing wrong change'.
+ The magic number used in this test, 1<<17, is
+ CHUNK_SIZE from ../../libsvn_diff/diff_file.c
+ */
+static svn_error_t *
+test_norm_offset(apr_pool_t *pool)
+{
+ apr_size_t chunk_size = 1 << 17;
+ const char *pattern1 = " \n";
+ const char *pattern2 = "\n\n\n\n\n\n\n\n";
+ const char *pattern3 = " @@@@@@@\n";
+ const char *pattern4 = " \n";
+ svn_stringbuf_t *original, *modified;
+ svn_diff_file_options_t *diff_opts = svn_diff_file_options_create(pool);
+
+ /* The original contents become like this
+
+ $ hexdump -C norm-offset-original
+ 00000000 20 20 20 20 20 20 20 0a 0a 0a 0a 0a 0a 0a 0a 0a | .........|
+ 00000010 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a |................|
+ *
+ 0001fff0 0a 0a 0a 0a 0a 0a 0a 0a 20 20 20 20 20 20 20 20 |........ |
+ 00020000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
+ 00020010 40 40 40 40 40 40 40 0a 0a 0a 0a 0a 0a 0a 0a 0a |@@@@@@@.........|
+ 00020020 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a |................|
+ *
+ 000203f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0a | .|
+ 00020400
+ */
+ original = svn_stringbuf_create_ensure(chunk_size + 1024, pool);
+ svn_stringbuf_appendcstr(original, pattern1);
+ while (original->len < chunk_size - 8)
+ {
+ svn_stringbuf_appendcstr(original, pattern2);
+ }
+ svn_stringbuf_appendcstr(original, pattern3);
+ while (original->len < chunk_size +1024 - 16)
+ {
+ svn_stringbuf_appendcstr(original, pattern2);
+ }
+ svn_stringbuf_appendcstr(original, pattern4);
+
+ /* The modified contents become like this.
+
+ $ hexdump -C norm-offset-modified
+ 00000000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0a | .|
+ 00000010 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a |................|
+ *
+ 00020000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
+ 00020010 20 20 20 20 20 20 20 20 40 40 40 40 40 40 40 0a | @@@@@@@.|
+ 00020020 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a |................|
+ *
+ 000203f0 0a 0a 0a 0a 0a 0a 0a 0a 20 20 20 20 20 20 20 0a |........ .|
+ 00020400
+ */
+ modified = svn_stringbuf_create_ensure(chunk_size + 1024, pool);
+ svn_stringbuf_appendcstr(modified, pattern4);
+ while (modified->len < chunk_size)
+ {
+ svn_stringbuf_appendcstr(modified, pattern2);
+ }
+ svn_stringbuf_appendcstr(modified, pattern3);
+ while (modified->len < chunk_size +1024 - 8)
+ {
+ svn_stringbuf_appendcstr(modified, pattern2);
+ }
+ svn_stringbuf_appendcstr(modified, pattern1);
+
+ /* Diff them. Modulo whitespace, they are identical. */
+ diff_opts->ignore_space = svn_diff_file_ignore_space_all;
+ SVN_ERR(two_way_diff("norm-offset-original", "norm-offset-modified",
+ original->data, modified->data, "",
+ diff_opts, pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* Issue #4283, 'When identical suffix started at a chunk boundary,
+ incorrect diff was generated'.
+ The magic number used in this test, (1<<17) and 50 are CHUNK_SIZE
+ and SUFFIX_LINES_TO_KEEP from ../../libsvn_diff/diff_file.c, respectively.
+ */
+#define ORIGINAL_CONTENTS_PATTERN "0123456789abcde\n"
+#define INSERTED_LINE "0123456789ABCDE\n"
+static svn_error_t *
+test_identical_suffix(apr_pool_t *pool)
+{
+ apr_size_t lines_in_chunk = (1 << 17)
+ / (sizeof(ORIGINAL_CONTENTS_PATTERN) - 1);
+ /* To let identical suffix start at a chunk boundary,
+ insert a line at before (SUFFIX_LINES_TO_KEEP + 1) lines
+ from tail of the previous chunk. */
+ apr_size_t insert_pos = lines_in_chunk
+#ifdef SUFFIX_LINES_TO_KEEP
+ - SUFFIX_LINES_TO_KEEP
+#else
+ - 50
+#endif
+ - 1;
+ apr_size_t i;
+ svn_stringbuf_t *original, *modified;
+
+ /* The original contents become like this.
+
+ $ hexdump -C identical-suffix-original
+ 00000000 30 31 32 33 34 35 36 37 38 39 61 62 63 64 65 0a |0123456789abcde.|
+ *
+ 00020400
+ */
+ original = svn_stringbuf_create_ensure((1 << 17) + 1024, pool);
+ for (i = 0; i < lines_in_chunk + 64; i++)
+ {
+ svn_stringbuf_appendbytes(original, ORIGINAL_CONTENTS_PATTERN,
+ sizeof(ORIGINAL_CONTENTS_PATTERN) - 1);
+ }
+
+ /* The modified contents become like this.
+
+ $ hexdump -C identical-suffix-modified
+ 00000000 30 31 32 33 34 35 36 37 38 39 61 62 63 64 65 0a |0123456789abcde.|
+ *
+ 00000400 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 0a |0123456789ABCDE.|
+ 00000410 30 31 32 33 34 35 36 37 38 39 61 62 63 64 65 0a |0123456789abcde.|
+ *
+ 0001fcd0 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 0a |0123456789ABCDE.|
+ 0001fce0 30 31 32 33 34 35 36 37 38 39 61 62 63 64 65 0a |0123456789abcde.|
+ *
+ 00020420
+ */
+ modified = svn_stringbuf_dup(original, pool);
+ svn_stringbuf_insert(modified,
+ 64 * (sizeof(ORIGINAL_CONTENTS_PATTERN) - 1),
+ INSERTED_LINE, sizeof(INSERTED_LINE) - 1);
+ svn_stringbuf_insert(modified,
+ insert_pos * (sizeof(ORIGINAL_CONTENTS_PATTERN) - 1),
+ INSERTED_LINE, sizeof(INSERTED_LINE) - 1);
+
+ SVN_ERR(two_way_diff("identical-suffix-original",
+ "identical-suffix-modified",
+ original->data, modified->data,
+ apr_psprintf(pool,
+ "--- identical-suffix-original" NL
+ "+++ identical-suffix-modified" NL
+ "@@ -62,6 +62,7 @@" NL
+ " " ORIGINAL_CONTENTS_PATTERN
+ " " ORIGINAL_CONTENTS_PATTERN
+ " " ORIGINAL_CONTENTS_PATTERN
+ "+" INSERTED_LINE
+ " " ORIGINAL_CONTENTS_PATTERN
+ " " ORIGINAL_CONTENTS_PATTERN
+ " " ORIGINAL_CONTENTS_PATTERN
+ "@@ -%u,6 +%u,7 @@" NL
+ " " ORIGINAL_CONTENTS_PATTERN
+ " " ORIGINAL_CONTENTS_PATTERN
+ " " ORIGINAL_CONTENTS_PATTERN
+ "+" INSERTED_LINE
+ " " ORIGINAL_CONTENTS_PATTERN
+ " " ORIGINAL_CONTENTS_PATTERN
+ " " ORIGINAL_CONTENTS_PATTERN,
+ 1 + (unsigned int)insert_pos - 3 - 1,
+ 1 + (unsigned int)insert_pos - 3),
+ NULL, pool));
+
+ return SVN_NO_ERROR;
+}
+#undef ORIGINAL_CONTENTS_PATTERN
+#undef INSERTED_LINE
+
+/* The magic number used in this test, 1<<17, is
+ CHUNK_SIZE from ../../libsvn_diff/diff_file.c
+ */
+static svn_error_t *
+test_token_compare(apr_pool_t *pool)
+{
+ apr_size_t chunk_size = 1 << 17;
+ const char *pattern = "ABCDEFG\n";
+ svn_stringbuf_t *original, *modified;
+ svn_diff_file_options_t *diff_opts = svn_diff_file_options_create(pool);
+
+ diff_opts->ignore_space = svn_diff_file_ignore_space_all;
+
+ original = svn_stringbuf_create_ensure(chunk_size * 2 + 8, pool);
+ /* CHUNK_SIZE bytes */
+ while (original->len < chunk_size - 8)
+ {
+ svn_stringbuf_appendcstr(original, pattern);
+ }
+ svn_stringbuf_appendcstr(original, " @@@\n");
+
+ modified = svn_stringbuf_create_ensure(chunk_size * 2 + 9, pool);
+ /* CHUNK_SIZE+1 bytes, one ' ' more than original */
+ while (modified->len < chunk_size - 8)
+ {
+ svn_stringbuf_appendcstr(modified, pattern);
+ }
+ svn_stringbuf_appendcstr(modified, " @@@\n");
+
+ /* regression test for reading exceeding the file size */
+ SVN_ERR(two_way_diff("token-compare-original1", "token-compare-modified1",
+ original->data, modified->data, "",
+ diff_opts, pool));
+
+ svn_stringbuf_appendcstr(original, "aaaaaaa\n");
+ svn_stringbuf_appendcstr(modified, "bbbbbbb\n");
+
+ /* regression test for comparison beyond the end-of-line */
+ SVN_ERR(two_way_diff("token-compare-original2", "token-compare-modified2",
+ original->data, modified->data,
+ apr_psprintf(pool,
+ "--- token-compare-original2" NL
+ "+++ token-compare-modified2" NL
+ "@@ -%u,4 +%u,4 @@" NL
+ " ABCDEFG\n"
+ " ABCDEFG\n"
+ " @@@\n"
+ "-aaaaaaa\n"
+ "+bbbbbbb\n",
+ (unsigned int)chunk_size/8 - 2,
+ (unsigned int)chunk_size/8 - 2),
+ diff_opts, pool));
+
+ /* CHUNK_SIZE*2 bytes */
+ while (original->len <= chunk_size * 2 - 8)
+ {
+ svn_stringbuf_appendcstr(original, pattern);
+ }
+
+ /* CHUNK_SIZE*2+1 bytes, one ' ' more than original */
+ while (modified->len <= chunk_size * 2 - 7)
+ {
+ svn_stringbuf_appendcstr(modified, pattern);
+ }
+
+ SVN_ERR(two_way_diff("token-compare-original2", "token-compare-modified2",
+ original->data, modified->data,
+ apr_psprintf(pool,
+ "--- token-compare-original2" NL
+ "+++ token-compare-modified2" NL
+ "@@ -%u,7 +%u,7 @@" NL
+ " ABCDEFG\n"
+ " ABCDEFG\n"
+ " @@@\n"
+ "-aaaaaaa\n"
+ "+bbbbbbb\n"
+ " ABCDEFG\n"
+ " ABCDEFG\n"
+ " ABCDEFG\n",
+ (unsigned int)chunk_size/8 - 2,
+ (unsigned int)chunk_size/8 - 2),
+ diff_opts, pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+two_way_issue_3362_v1(apr_pool_t *pool)
+{
+ svn_diff_file_options_t *diff_opts = svn_diff_file_options_create(pool);
+
+ SVN_ERR(two_way_diff("issue-3362-1-v1",
+ "issue-3362-2-v1",
+ /* File 1 */
+ "line_1\n"
+ "line_2\n"
+ "line_3\n"
+ "line_4\n"
+ "line_5\n"
+ "line_6\n"
+ "line_7\n"
+ "line_8\n"
+ "line_9\n"
+ "line_10\n"
+ "line_11\n"
+ "line_12\n"
+ "line_13\n"
+ "line_14\n"
+ "line_15\n"
+ "line_16\n"
+ "line_17\n"
+ "line_18\n"
+ "line_19\n"
+ "line_20\n"
+ "line_21\n"
+ "line_22\n"
+ "line_23\n"
+ "line_24\n"
+ "line_25\n"
+ "line_26\n"
+ "line_27\n"
+ "line_28\n"
+ "line_29\n"
+ "line_30\n",
+ /* File 2 */
+ "line_1a\n"
+ "line_2a\n"
+ "line_3a\n"
+ "line_1\n"
+ "line_2\n"
+ "line_3\n"
+ "line_4\n"
+ "line_5a\n"
+ "line_6b\n"
+ "line_7c\n"
+ "line_8\n"
+ "line_9\n"
+ "line_10\n"
+ "line_11a\n"
+ "line_11b\n"
+ "line_11c\n"
+ "line_12\n"
+ "line_13\n"
+ "line_14\n"
+ "line_15\n"
+ "line_16\n"
+ "line_17\n"
+ "line_18\n"
+ "line_19a\n"
+ "line_19b\n"
+ "line_19c\n"
+ "line_20\n"
+ "line_21\n"
+ "line_22\n"
+ "line_23\n"
+ "line_24\n"
+ "line_25\n"
+ "line_26\n"
+ "line_27\n"
+ "line_27a\n",
+ /* Expected */
+ "--- issue-3362-1-v1" APR_EOL_STR
+ "+++ issue-3362-2-v1" APR_EOL_STR
+ "@@ -1,14 +1,19 @@" APR_EOL_STR
+ "+line_1a\n"
+ "+line_2a\n"
+ "+line_3a\n"
+ " line_1\n" /* 1.7 mem diff: line missing */
+ " line_2\n"
+ " line_3\n"
+ " line_4\n"
+ "-line_5\n"
+ "-line_6\n"
+ "-line_7\n"
+ "+line_5a\n"
+ "+line_6b\n"
+ "+line_7c\n"
+ " line_8\n"
+ " line_9\n"
+ " line_10\n"
+ "-line_11\n"
+ "+line_11a\n"
+ "+line_11b\n"
+ "+line_11c\n"
+ " line_12\n"
+ " line_13\n"
+ " line_14\n" /* 1.7 mem diff: line missing */
+ "@@ -16,7 +21,9 @@" APR_EOL_STR
+ " line_16\n"
+ " line_17\n"
+ " line_18\n"
+ "-line_19\n"
+ "+line_19a\n"
+ "+line_19b\n"
+ "+line_19c\n"
+ " line_20\n"
+ " line_21\n"
+ " line_22\n"
+ "@@ -25,6 +32,4 @@" APR_EOL_STR
+ " line_25\n"
+ " line_26\n"
+ " line_27\n"
+ "-line_28\n"
+ "-line_29\n"
+ "-line_30\n"
+ "+line_27a\n",
+ diff_opts, pool));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+two_way_issue_3362_v2(apr_pool_t *pool)
+{
+ svn_diff_file_options_t *diff_opts = svn_diff_file_options_create(pool);
+ SVN_ERR(two_way_diff("issue-3362-1-v2",
+ "issue-3362-2-v2",
+ /* File 1 */
+ "line_1\n"
+ "line_2\n"
+ "line_3\n"
+ "line_4\n"
+ "line_5\n"
+ "line_6\n"
+ "line_7\n"
+ "line_8\n"
+ "line_9\n"
+ "line_10\n"
+ "line_11\n"
+ "line_12\n"
+ "line_13\n"
+ "line_14\n"
+ "line_15\n"
+ "line_16\n"
+ "line_17\n"
+ "line_18\n"
+ "line_19\n"
+ "line_20\n"
+ "line_21\n"
+ "line_22\n"
+ "line_23\n"
+ "line_24\n"
+ "line_25\n"
+ "line_26\n"
+ "line_27\n"
+ "line_28\n"
+ "line_29\n"
+ "line_30\n",
+ /* File 2 */
+ "line_1a\n"
+ "line_1b\n"
+ "line_1c\n"
+ "line_1\n"
+ "line_2\n"
+ "line_3\n"
+ "line_4\n"
+ "line_5a\n"
+ "line_5b\n"
+ "line_5c\n"
+ "line_6\n"
+ "line_7\n"
+ "line_8\n"
+ "line_9\n"
+ "line_10\n"
+ "line_11a\n"
+ "line_11b\n"
+ "line_11c\n"
+ "line_12\n"
+ "line_13\n"
+ "line_14\n"
+ "line_15\n"
+ "line_16\n"
+ "line_17\n"
+ "line_18\n"
+ "line_19a\n"
+ "line_19b\n"
+ "line_19c\n"
+ "line_20\n"
+ "line_21\n"
+ "line_22\n"
+ "line_23\n"
+ "line_24\n"
+ "line_25\n"
+ "line_26\n"
+ "line_27a\n"
+ "line_27b\n"
+ "line_27c\n"
+ "line_28\n"
+ "line_29\n"
+ "line_30\n",
+ /* Expected */
+ "--- issue-3362-1-v2" APR_EOL_STR
+ "+++ issue-3362-2-v2" APR_EOL_STR
+ "@@ -1,14 +1,21 @@" APR_EOL_STR
+ "+line_1a\n"
+ "+line_1b\n"
+ "+line_1c\n"
+ " line_1\n" /* 1.7 mem diff: line missing */
+ " line_2\n"
+ " line_3\n"
+ " line_4\n"
+ "-line_5\n"
+ "+line_5a\n"
+ "+line_5b\n"
+ "+line_5c\n"
+ " line_6\n"
+ " line_7\n"
+ " line_8\n"
+ " line_9\n"
+ " line_10\n"
+ "-line_11\n"
+ "+line_11a\n"
+ "+line_11b\n"
+ "+line_11c\n"
+ " line_12\n"
+ " line_13\n"
+ " line_14\n" /* 1.7 mem diff: line missing */
+ "@@ -16,7 +23,9 @@" APR_EOL_STR
+ " line_16\n"
+ " line_17\n"
+ " line_18\n"
+ "-line_19\n"
+ "+line_19a\n"
+ "+line_19b\n"
+ "+line_19c\n"
+ " line_20\n"
+ " line_21\n"
+ " line_22\n"
+ "@@ -24,7 +33,9 @@" APR_EOL_STR
+ " line_24\n"
+ " line_25\n"
+ " line_26\n"
+ "-line_27\n"
+ "+line_27a\n"
+ "+line_27b\n"
+ "+line_27c\n"
+ " line_28\n"
+ " line_29\n"
+ " line_30\n",
+ diff_opts, pool));
+
+ return SVN_NO_ERROR;
+}
/* ========================================================================== */
@@ -2425,5 +2942,15 @@ struct svn_test_descriptor_t test_funcs[] =
"3-way merge with conflict styles"),
SVN_TEST_PASS2(test_diff4,
"4-way merge; see variance-adjusted-patching.html"),
+ SVN_TEST_PASS2(test_norm_offset,
+ "offset of the normalized token"),
+ SVN_TEST_PASS2(test_identical_suffix,
+ "identical suffix starts at the boundary of a chunk"),
+ SVN_TEST_PASS2(test_token_compare,
+ "compare tokes at the chunk boundary"),
+ SVN_TEST_PASS2(two_way_issue_3362_v1,
+ "2-way issue #3362 test v1"),
+ SVN_TEST_PASS2(two_way_issue_3362_v2,
+ "2-way issue #3362 test v2"),
SVN_TEST_NULL
};
diff --git a/subversion/tests/libsvn_diff/parse-diff-test.c b/subversion/tests/libsvn_diff/parse-diff-test.c
index 16fa0be..9a44369 100644
--- a/subversion/tests/libsvn_diff/parse-diff-test.c
+++ b/subversion/tests/libsvn_diff/parse-diff-test.c
@@ -132,8 +132,6 @@ static const char *bad_git_diff_header =
"diff --git foo4 b/foo4" NL
"diff --git a/foo5 b/foo5" NL
"random noise" NL
- "copy from foo5" NL
- "copy to foo5" NL
"diff --git a/foo6 b/foo6" NL
"copy from foo6" NL
"random noise" NL
diff --git a/subversion/tests/libsvn_fs/fs-test.c b/subversion/tests/libsvn_fs/fs-test.c
index 6f4d5db..104a692 100644
--- a/subversion/tests/libsvn_fs/fs-test.c
+++ b/subversion/tests/libsvn_fs/fs-test.c
@@ -27,6 +27,7 @@
#include "../svn_test.h"
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_time.h"
#include "svn_string.h"
@@ -34,6 +35,7 @@
#include "svn_checksum.h"
#include "svn_mergeinfo.h"
#include "svn_props.h"
+#include "svn_version.h"
#include "private/svn_fs_private.h"
@@ -658,6 +660,7 @@ revision_props(const svn_test_opts_t *opts,
/* Copy a property's value into a new property. */
SVN_ERR(svn_fs_revision_prop(&value, fs, 0, "color", pool));
+ SVN_TEST_ASSERT(value);
s1.data = value->data;
s1.len = value->len;
@@ -694,6 +697,7 @@ revision_props(const svn_test_opts_t *opts,
/* Obtain a list of all current properties, and make sure it matches
the expected values. */
SVN_ERR(svn_fs_revision_proplist(&proplist, fs, 0, pool));
+ SVN_TEST_ASSERT(proplist);
{
svn_string_t *prop_value;
@@ -1564,6 +1568,7 @@ merging_commit(const svn_test_opts_t *opts,
/* (5) E doesn't exist in ANCESTOR, and has been added to A. */
{
+ svn_revnum_t failed_rev;
/* (1) E doesn't exist in ANCESTOR, and has been added to B.
Conflict. */
SVN_ERR(svn_fs_begin_txn(&txn, fs, revisions[4], pool));
@@ -1571,7 +1576,7 @@ merging_commit(const svn_test_opts_t *opts,
SVN_ERR(svn_fs_make_file(txn_root, "theta", pool));
SVN_ERR(svn_test__set_file_contents
(txn_root, "theta", "This is another file 'theta'.\n", pool));
- SVN_ERR(test_commit_txn(&after_rev, txn, "/theta", pool));
+ SVN_ERR(test_commit_txn(&failed_rev, txn, "/theta", pool));
SVN_ERR(svn_fs_abort_txn(txn, pool));
/* (1) E exists in ANCESTOR, but has been deleted from B. Can't
@@ -1579,6 +1584,8 @@ merging_commit(const svn_test_opts_t *opts,
/* (3) E exists in both ANCESTOR and B. Can't occur, by assumption
that E doesn't exist in ANCESTOR. */
+
+ SVN_TEST_ASSERT(failed_rev == SVN_INVALID_REVNUM);
}
/* (4) E exists in ANCESTOR, but has been deleted from A */
@@ -1592,15 +1599,16 @@ merging_commit(const svn_test_opts_t *opts,
SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
SVN_ERR(svn_fs_delete(txn_root, "A/D/H", pool));
- /* ### FIXME: It is at this point that our test stops being valid,
- ### hence its expected failure. The following call will now
- ### conflict on /A/D/H, causing revision 6 *not* to be created,
- ### and the remainer of this test (which was written long ago)
- ### to suffer from a shift in the expected state and behavior
- ### of the filesystem as a result of this commit not happening.
- */
+ /* We used to create the revision like this before fixing issue
+ #2751 -- Directory prop mods reverted in overlapping commits scenario.
- SVN_ERR(test_commit_txn(&after_rev, txn, NULL, pool));
+ But we now expect that to fail as out of date */
+ {
+ svn_revnum_t failed_rev;
+ SVN_ERR(test_commit_txn(&failed_rev, txn, "/A/D/H", pool));
+
+ SVN_TEST_ASSERT(failed_rev == SVN_INVALID_REVNUM);
+ }
/*********************************************************************/
/* REVISION 6 */
/*********************************************************************/
@@ -1638,18 +1646,22 @@ merging_commit(const svn_test_opts_t *opts,
/* Try deleting a file F inside a subtree S where S does not exist
in the most recent revision, but does exist in the ancestor
tree. This should conflict. */
- SVN_ERR(svn_fs_begin_txn(&txn, fs, revisions[1], pool));
- SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
- SVN_ERR(svn_fs_delete(txn_root, "A/D/H/omega", pool));
- SVN_ERR(test_commit_txn(&after_rev, txn, "/A/D/H", pool));
- SVN_ERR(svn_fs_abort_txn(txn, pool));
+ {
+ svn_revnum_t failed_rev;
+ SVN_ERR(svn_fs_begin_txn(&txn, fs, revisions[1], pool));
+ SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+ SVN_ERR(svn_fs_delete(txn_root, "A/D/H/omega", pool));
+ SVN_ERR(test_commit_txn(&failed_rev, txn, "/A/D/H", pool));
+ SVN_ERR(svn_fs_abort_txn(txn, pool));
+
+ SVN_TEST_ASSERT(failed_rev == SVN_INVALID_REVNUM);
+ }
/* E exists in both ANCESTOR and B ... */
{
/* (1) but refers to different nodes. Conflict. */
- SVN_ERR(svn_fs_begin_txn(&txn, fs, revisions[1], pool));
+ SVN_ERR(svn_fs_begin_txn(&txn, fs, after_rev, pool));
SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
- SVN_ERR(svn_fs_delete(txn_root, "A/D/H", pool));
SVN_ERR(svn_fs_make_dir(txn_root, "A/D/H", pool));
SVN_ERR(test_commit_txn(&after_rev, txn, NULL, pool));
revisions[revision_count++] = after_rev;
@@ -3527,11 +3539,12 @@ get_file_checksum(svn_checksum_t **checksum,
/* Return a pseudo-random number in the range [0,SCALAR) i.e. return
a number N such that 0 <= N < SCALAR */
-static int my_rand(int scalar, apr_uint32_t *seed)
+static int my_rand(apr_uint64_t scalar, apr_uint32_t *seed)
{
static const apr_uint32_t TEST_RAND_MAX = 0xffffffffUL;
/* Assumes TEST_RAND_MAX+1 can be exactly represented in a double */
- return (int)(((double)svn_test_rand(seed)
+ apr_uint32_t r = svn_test_rand(seed);
+ return (int)(((double)r
/ ((double)TEST_RAND_MAX+1.0))
* (double)scalar);
}
@@ -3553,7 +3566,7 @@ random_data_to_buffer(char *buf,
int ds_off = 0;
const char *dataset = "0123456789";
- int dataset_size = strlen(dataset);
+ apr_size_t dataset_size = strlen(dataset);
if (full)
{
@@ -4174,12 +4187,12 @@ check_related(const svn_test_opts_t *opts,
int related = 0;
/* Get the ID for the first path/revision combination. */
- SVN_ERR(svn_fs_revision_root(&rev_root, fs, pr1.rev, pool));
- SVN_ERR(svn_fs_node_id(&id1, rev_root, pr1.path, pool));
+ SVN_ERR(svn_fs_revision_root(&rev_root, fs, pr1.rev, subpool));
+ SVN_ERR(svn_fs_node_id(&id1, rev_root, pr1.path, subpool));
/* Get the ID for the second path/revision combination. */
- SVN_ERR(svn_fs_revision_root(&rev_root, fs, pr2.rev, pool));
- SVN_ERR(svn_fs_node_id(&id2, rev_root, pr2.path, pool));
+ SVN_ERR(svn_fs_revision_root(&rev_root, fs, pr2.rev, subpool));
+ SVN_ERR(svn_fs_node_id(&id2, rev_root, pr2.path, subpool));
/* <exciting> Now, run the relationship check! </exciting> */
related = svn_fs_check_related(id1, id2) ? 1 : 0;
@@ -4799,6 +4812,223 @@ node_origin_rev(const svn_test_opts_t *opts,
return SVN_NO_ERROR;
}
+
+/* Helper: call svn_fs_history_location() and check the results. */
+static svn_error_t *
+check_history_location(const char *expected_path,
+ svn_revnum_t expected_revision,
+ svn_fs_history_t *history,
+ apr_pool_t *pool)
+{
+ const char *actual_path;
+ svn_revnum_t actual_revision;
+
+ SVN_ERR(svn_fs_history_location(&actual_path, &actual_revision,
+ history, pool));
+
+ /* Validate the location against our expectations. */
+ if (actual_revision != expected_revision
+ || (actual_path && expected_path && strcmp(actual_path, expected_path))
+ || (actual_path != NULL) != (expected_path != NULL))
+ {
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "svn_fs_history_location() failed:\n"
+ " expected '%s@%ld'\n"
+ " found '%s@%ld",
+ expected_path ? expected_path : "(null)",
+ expected_revision,
+ actual_path ? actual_path : "(null)",
+ actual_revision);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Test svn_fs_history_*(). */
+static svn_error_t *
+node_history(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ svn_fs_t *fs;
+ svn_fs_txn_t *txn;
+ svn_fs_root_t *txn_root;
+ svn_revnum_t after_rev;
+
+ /* Prepare a txn to receive the greek tree. */
+ SVN_ERR(svn_test__create_fs(&fs, "test-repo-node-history",
+ opts, pool));
+ SVN_ERR(svn_fs_begin_txn(&txn, fs, 0, pool));
+ SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+
+ /* Create and verify the greek tree. */
+ SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
+ SVN_ERR(test_commit_txn(&after_rev, txn, NULL, pool));
+
+ /* Make some changes, following copy_test() above. */
+
+ /* r2: copy pi to pi2, with textmods. */
+ {
+ svn_fs_root_t *rev_root;
+
+ SVN_ERR(svn_fs_revision_root(&rev_root, fs, after_rev, pool));
+ SVN_ERR(svn_fs_begin_txn(&txn, fs, after_rev, pool));
+ SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+ SVN_ERR(svn_fs_copy(rev_root, "A/D/G/pi",
+ txn_root, "A/D/H/pi2",
+ pool));
+ SVN_ERR(svn_test__set_file_contents
+ (txn_root, "A/D/H/pi2", "This is the file 'pi2'.\n", pool));
+ SVN_ERR(test_commit_txn(&after_rev, txn, NULL, pool));
+ }
+
+ /* Go back in history: pi2@r2 -> pi@r1 */
+ {
+ svn_fs_history_t *history;
+ svn_fs_root_t *rev_root;
+
+ SVN_ERR(svn_fs_revision_root(&rev_root, fs, after_rev, pool));
+
+ /* Fetch a history object, and walk it until its start. */
+
+ SVN_ERR(svn_fs_node_history(&history, rev_root, "A/D/H/pi2", pool));
+ SVN_ERR(check_history_location("/A/D/H/pi2", 2, history, pool));
+
+ SVN_ERR(svn_fs_history_prev(&history, history, TRUE, pool));
+ SVN_ERR(check_history_location("/A/D/H/pi2", 2, history, pool));
+
+ SVN_ERR(svn_fs_history_prev(&history, history, TRUE, pool));
+ SVN_ERR(check_history_location("/A/D/G/pi", 1, history, pool));
+
+ SVN_ERR(svn_fs_history_prev(&history, history, TRUE, pool));
+ SVN_TEST_ASSERT(history == NULL);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Test svn_fs_delete_fs(). */
+static svn_error_t *
+delete_fs(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ const char *path;
+ svn_node_kind_t kind;
+
+ /* We have to use a subpool to close the svn_fs_t before calling
+ svn_fs_delete_fs. See issue 4264. */
+ {
+ svn_fs_t *fs;
+ apr_pool_t *subpool = svn_pool_create(pool);
+ SVN_ERR(svn_test__create_fs(&fs, "test-repo-delete-fs", opts, subpool));
+ path = svn_fs_path(fs, pool);
+ svn_pool_destroy(subpool);
+ }
+
+ SVN_ERR(svn_io_check_path(path, &kind, pool));
+ SVN_TEST_ASSERT(kind != svn_node_none);
+ SVN_ERR(svn_fs_delete_fs(path, pool));
+ SVN_ERR(svn_io_check_path(path, &kind, pool));
+ SVN_TEST_ASSERT(kind == svn_node_none);
+
+ /* Recreate dir so that test cleanup doesn't fail. */
+ SVN_ERR(svn_io_dir_make(path, APR_OS_DEFAULT, pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* Issue 4340, "fs layer should reject filenames with trailing \n" */
+static svn_error_t *
+filename_trailing_newline(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ apr_pool_t *subpool = svn_pool_create(pool);
+ svn_fs_t *fs;
+ svn_fs_txn_t *txn;
+ svn_fs_root_t *txn_root, *root;
+ svn_revnum_t youngest_rev = 0;
+ svn_error_t *err;
+ svn_boolean_t legacy_backend;
+ static const char contents[] = "foo\003bar";
+
+ /* The FS API wants \n to be permitted, but FSFS never implemented that,
+ * so for FSFS we expect errors rather than successes in some of the commits.
+ * Use a blacklist approach so that new FSes default to implementing the API
+ * as originally defined. */
+ legacy_backend = (!strcmp(opts->fs_type, SVN_FS_TYPE_FSFS));
+
+ SVN_ERR(svn_test__create_fs(&fs, "test-repo-filename-trailing-newline",
+ opts, pool));
+
+ /* Revision 1: Add a directory /foo */
+ SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
+ SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
+ SVN_ERR(svn_fs_make_dir(txn_root, "/foo", subpool));
+ SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
+ svn_pool_clear(subpool);
+
+ /* Attempt to copy /foo to "/bar\n". This should fail on FSFS. */
+ SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
+ SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
+ SVN_ERR(svn_fs_revision_root(&root, fs, youngest_rev, subpool));
+ err = svn_fs_copy(root, "/foo", txn_root, "/bar\n", subpool);
+ if (!legacy_backend)
+ SVN_TEST_ASSERT(err == SVN_NO_ERROR);
+ else
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_FS_PATH_SYNTAX);
+
+ /* Attempt to create a file /foo/baz\n. This should fail on FSFS. */
+ err = svn_fs_make_file(txn_root, "/foo/baz\n", subpool);
+ if (!legacy_backend)
+ SVN_TEST_ASSERT(err == SVN_NO_ERROR);
+ else
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_FS_PATH_SYNTAX);
+
+
+ /* Create another file, with contents. */
+ if (!legacy_backend)
+ {
+ SVN_ERR(svn_fs_make_file(txn_root, "/bar\n/baz\n", subpool));
+ SVN_ERR(svn_test__set_file_contents(txn_root, "bar\n/baz\n",
+ contents, pool));
+ }
+
+ if (!legacy_backend)
+ {
+ svn_revnum_t after_rev;
+ static svn_test__tree_entry_t expected_entries[] = {
+ { "foo", NULL },
+ { "bar\n", NULL },
+ { "foo/baz\n", "" },
+ { "bar\n/baz\n", contents },
+ { NULL, NULL }
+ };
+ const char *expected_changed_paths[] = {
+ "/bar\n",
+ "/foo/baz\n",
+ "/bar\n/baz\n",
+ NULL
+ };
+ apr_hash_t *expected_changes = apr_hash_make(pool);
+ int i;
+
+ SVN_ERR(svn_fs_commit_txn(NULL, &after_rev, txn, subpool));
+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(after_rev));
+
+ /* Validate the DAG. */
+ SVN_ERR(svn_fs_revision_root(&root, fs, after_rev, pool));
+ SVN_ERR(svn_test__validate_tree(root, expected_entries, 4, pool));
+
+ /* Validate changed-paths, where the problem originally occurred. */
+ for (i = 0; expected_changed_paths[i]; i++)
+ svn_hash_sets(expected_changes, expected_changed_paths[i],
+ "undefined value");
+ SVN_ERR(svn_test__validate_changes(root, expected_changes, pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
/* ------------------------------------------------------------------------ */
/* The test table. */
@@ -4840,10 +5070,7 @@ struct svn_test_descriptor_t test_funcs[] =
"basic commit"),
SVN_TEST_OPTS_PASS(test_tree_node_validation,
"testing tree validation helper"),
- SVN_TEST_OPTS_WIMP(merging_commit,
- "merging commit",
- "needs to be written to match new"
- " merge() algorithm expectations"),
+ SVN_TEST_OPTS_PASS(merging_commit, "merging commit"),
SVN_TEST_OPTS_PASS(copy_test,
"copying and tracking copy history"),
SVN_TEST_OPTS_PASS(commit_date,
@@ -4878,5 +5105,11 @@ struct svn_test_descriptor_t test_funcs[] =
"test svn_fs_node_origin_rev"),
SVN_TEST_OPTS_PASS(small_file_integrity,
"create and modify small file"),
+ SVN_TEST_OPTS_PASS(node_history,
+ "test svn_fs_node_history"),
+ SVN_TEST_OPTS_PASS(delete_fs,
+ "test svn_fs_delete_fs"),
+ SVN_TEST_OPTS_PASS(filename_trailing_newline,
+ "filenames with trailing \\n might be rejected"),
SVN_TEST_NULL
};
diff --git a/subversion/tests/libsvn_fs/locks-test.c b/subversion/tests/libsvn_fs/locks-test.c
index ff6772c..ee275de 100644
--- a/subversion/tests/libsvn_fs/locks-test.c
+++ b/subversion/tests/libsvn_fs/locks-test.c
@@ -91,28 +91,24 @@ verify_matching_lock_paths(struct get_locks_baton_t *baton,
}
-/*-----------------------------------------------------------------*/
-
-/** The actual lock-tests called by `make check` **/
-
-
-
-/* Test that we can create a lock--nothing more. */
+/* Create a filesystem in a directory called NAME, and populate it with
+ * the standard Greek tree. Set *FS_P to the new filesystem object and
+ * *NEWREV_P to the head revision number. Unwanted outputs may be NULL. */
static svn_error_t *
-lock_only(const svn_test_opts_t *opts,
- apr_pool_t *pool)
+create_greek_fs(svn_fs_t **fs_p,
+ svn_revnum_t *newrev_p,
+ const char *name,
+ const svn_test_opts_t *opts,
+ apr_pool_t *pool)
{
svn_fs_t *fs;
svn_fs_txn_t *txn;
svn_fs_root_t *txn_root;
const char *conflict;
svn_revnum_t newrev;
- svn_fs_access_t *access;
- svn_lock_t *mylock;
/* Prepare a filesystem and a new txn. */
- SVN_ERR(svn_test__create_fs(&fs, "test-repo-lock-only",
- opts, pool));
+ SVN_ERR(svn_test__create_fs(&fs, name, opts, pool));
SVN_ERR(svn_fs_begin_txn2(&txn, fs, 0, SVN_FS_TXN_CHECK_LOCKS, pool));
SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
@@ -121,6 +117,32 @@ lock_only(const svn_test_opts_t *opts,
SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
+ if (fs_p)
+ *fs_p = fs;
+ if (newrev_p)
+ *newrev_p = newrev;
+ return SVN_NO_ERROR;
+}
+
+
+/*-----------------------------------------------------------------*/
+
+/** The actual lock-tests called by `make check` **/
+
+
+
+/* Test that we can create a lock--nothing more. */
+static svn_error_t *
+lock_only(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ svn_fs_t *fs;
+ svn_fs_access_t *access;
+ svn_lock_t *mylock;
+
+ SVN_ERR(create_greek_fs(&fs, NULL, "test-repo-lock-only",
+ opts, pool));
+
/* We are now 'bubba'. */
SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
SVN_ERR(svn_fs_set_access(fs, access));
@@ -143,23 +165,11 @@ lookup_lock_by_path(const svn_test_opts_t *opts,
apr_pool_t *pool)
{
svn_fs_t *fs;
- svn_fs_txn_t *txn;
- svn_fs_root_t *txn_root;
- const char *conflict;
- svn_revnum_t newrev;
svn_fs_access_t *access;
svn_lock_t *mylock, *somelock;
- /* Prepare a filesystem and a new txn. */
- SVN_ERR(svn_test__create_fs(&fs, "test-repo-lookup-lock-by-path",
- opts, pool));
- SVN_ERR(svn_fs_begin_txn2(&txn, fs, 0, SVN_FS_TXN_CHECK_LOCKS, pool));
- SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
-
- /* Create the greek tree and commit it. */
- SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
- SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
- SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
+ SVN_ERR(create_greek_fs(&fs, NULL, "test-repo-lookup-lock-by-path",
+ opts, pool));
/* We are now 'bubba'. */
SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
@@ -185,25 +195,13 @@ attach_lock(const svn_test_opts_t *opts,
apr_pool_t *pool)
{
svn_fs_t *fs;
- svn_fs_txn_t *txn;
- svn_fs_root_t *txn_root;
- const char *conflict;
- svn_revnum_t newrev;
svn_fs_access_t *access;
svn_lock_t *somelock;
svn_lock_t *mylock;
const char *token;
- /* Prepare a filesystem and a new txn. */
- SVN_ERR(svn_test__create_fs(&fs, "test-repo-attach-lock",
- opts, pool));
- SVN_ERR(svn_fs_begin_txn2(&txn, fs, 0, SVN_FS_TXN_CHECK_LOCKS, pool));
- SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
-
- /* Create the greek tree and commit it. */
- SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
- SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
- SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
+ SVN_ERR(create_greek_fs(&fs, NULL, "test-repo-attach-lock",
+ opts, pool));
/* We are now 'bubba'. */
SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
@@ -238,25 +236,13 @@ get_locks(const svn_test_opts_t *opts,
apr_pool_t *pool)
{
svn_fs_t *fs;
- svn_fs_txn_t *txn;
- svn_fs_root_t *txn_root;
- const char *conflict;
- svn_revnum_t newrev;
svn_fs_access_t *access;
svn_lock_t *mylock;
struct get_locks_baton_t *get_locks_baton;
apr_size_t i, num_expected_paths;
- /* Prepare a filesystem and a new txn. */
- SVN_ERR(svn_test__create_fs(&fs, "test-repo-get-locks",
- opts, pool));
- SVN_ERR(svn_fs_begin_txn2(&txn, fs, 0, SVN_FS_TXN_CHECK_LOCKS, pool));
- SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
-
- /* Create the greek tree and commit it. */
- SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
- SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
- SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
+ SVN_ERR(create_greek_fs(&fs, NULL, "test-repo-get-locks",
+ opts, pool));
/* We are now 'bubba'. */
SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
@@ -358,6 +344,18 @@ get_locks(const svn_test_opts_t *opts,
num_expected_paths, pool));
}
+ /* A path that is longer and alphabetically earlier than some locked
+ paths, this exercises the r1205848 BDB lock code. */
+ {
+ static const char *expected_paths[] = { 0 };
+ num_expected_paths = 0;
+ get_locks_baton = make_get_locks_baton(pool);
+ SVN_ERR(svn_fs_get_locks(fs, "A/D/H/ABCDEFGHIJKLMNOPQR", get_locks_callback,
+ get_locks_baton, pool));
+ SVN_ERR(verify_matching_lock_paths(get_locks_baton, expected_paths,
+ num_expected_paths, pool));
+ }
+
return SVN_NO_ERROR;
}
@@ -369,23 +367,11 @@ basic_lock(const svn_test_opts_t *opts,
apr_pool_t *pool)
{
svn_fs_t *fs;
- svn_fs_txn_t *txn;
- svn_fs_root_t *txn_root;
- const char *conflict;
- svn_revnum_t newrev;
svn_fs_access_t *access;
svn_lock_t *mylock, *somelock;
- /* Prepare a filesystem and a new txn. */
- SVN_ERR(svn_test__create_fs(&fs, "test-repo-basic-lock",
- opts, pool));
- SVN_ERR(svn_fs_begin_txn2(&txn, fs, 0, SVN_FS_TXN_CHECK_LOCKS, pool));
- SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
-
- /* Create the greek tree and commit it. */
- SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
- SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
- SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
+ SVN_ERR(create_greek_fs(&fs, NULL, "test-repo-basic-lock",
+ opts, pool));
/* We are now 'bubba'. */
SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
@@ -428,16 +414,8 @@ lock_credentials(const svn_test_opts_t *opts,
svn_lock_t *mylock;
svn_error_t *err;
- /* Prepare a filesystem and a new txn. */
- SVN_ERR(svn_test__create_fs(&fs, "test-repo-lock-credentials",
- opts, pool));
- SVN_ERR(svn_fs_begin_txn2(&txn, fs, 0, SVN_FS_TXN_CHECK_LOCKS, pool));
- SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
-
- /* Create the greek tree and commit it. */
- SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
- SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
- SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
+ SVN_ERR(create_greek_fs(&fs, &newrev, "test-repo-lock-credentials",
+ opts, pool));
/* We are now 'bubba'. */
SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
@@ -523,16 +501,8 @@ final_lock_check(const svn_test_opts_t *opts,
svn_lock_t *mylock;
svn_error_t *err;
- /* Prepare a filesystem and a new txn. */
- SVN_ERR(svn_test__create_fs(&fs, "test-repo-final-lock-check",
- opts, pool));
- SVN_ERR(svn_fs_begin_txn2(&txn, fs, 0, SVN_FS_TXN_CHECK_LOCKS, pool));
- SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
-
- /* Create the greek tree and commit it. */
- SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
- SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
- SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
+ SVN_ERR(create_greek_fs(&fs, &newrev, "test-repo-final-lock-check",
+ opts, pool));
/* Make a new transaction and delete "/A" */
SVN_ERR(svn_fs_begin_txn2(&txn, fs, newrev, SVN_FS_TXN_CHECK_LOCKS, pool));
@@ -583,16 +553,8 @@ lock_dir_propchange(const svn_test_opts_t *opts,
svn_fs_access_t *access;
svn_lock_t *mylock;
- /* Prepare a filesystem and a new txn. */
- SVN_ERR(svn_test__create_fs(&fs, "test-repo-lock-dir-propchange",
- opts, pool));
- SVN_ERR(svn_fs_begin_txn2(&txn, fs, 0, SVN_FS_TXN_CHECK_LOCKS, pool));
- SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
-
- /* Create the greek tree and commit it. */
- SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
- SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
- SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
+ SVN_ERR(create_greek_fs(&fs, &newrev, "test-repo-lock-dir-propchange",
+ opts, pool));
/* Become 'bubba' and lock "/A/D/G/rho". */
SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
@@ -633,16 +595,8 @@ lock_expiration(const svn_test_opts_t *opts,
svn_error_t *err;
struct get_locks_baton_t *get_locks_baton;
- /* Prepare a filesystem and a new txn. */
- SVN_ERR(svn_test__create_fs(&fs, "test-repo-lock-expiration",
- opts, pool));
- SVN_ERR(svn_fs_begin_txn2(&txn, fs, 0, SVN_FS_TXN_CHECK_LOCKS, pool));
- SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
-
- /* Create the greek tree and commit it. */
- SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
- SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
- SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
+ SVN_ERR(create_greek_fs(&fs, &newrev, "test-repo-lock-expiration",
+ opts, pool));
/* Make a new transaction and change rho. */
SVN_ERR(svn_fs_begin_txn2(&txn, fs, newrev, SVN_FS_TXN_CHECK_LOCKS, pool));
@@ -713,23 +667,11 @@ lock_break_steal_refresh(const svn_test_opts_t *opts,
apr_pool_t *pool)
{
svn_fs_t *fs;
- svn_fs_txn_t *txn;
- svn_fs_root_t *txn_root;
- const char *conflict;
- svn_revnum_t newrev;
svn_fs_access_t *access;
svn_lock_t *mylock, *somelock;
- /* Prepare a filesystem and a new txn. */
- SVN_ERR(svn_test__create_fs(&fs, "test-repo-steal-refresh",
- opts, pool));
- SVN_ERR(svn_fs_begin_txn2(&txn, fs, 0, SVN_FS_TXN_CHECK_LOCKS, pool));
- SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
-
- /* Create the greek tree and commit it. */
- SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
- SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
- SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
+ SVN_ERR(create_greek_fs(&fs, NULL, "test-repo-steal-refresh",
+ opts, pool));
/* Become 'bubba' and lock "/A/D/G/rho". */
SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
@@ -801,16 +743,8 @@ lock_out_of_date(const svn_test_opts_t *opts,
svn_lock_t *mylock;
svn_error_t *err;
- /* Prepare a filesystem and a new txn. */
- SVN_ERR(svn_test__create_fs(&fs, "test-repo-lock-out-of-date",
- opts, pool));
- SVN_ERR(svn_fs_begin_txn2(&txn, fs, 0, SVN_FS_TXN_CHECK_LOCKS, pool));
- SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
-
- /* Create the greek tree and commit it. */
- SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
- SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
- SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
+ SVN_ERR(create_greek_fs(&fs, &newrev, "test-repo-lock-out-of-date",
+ opts, pool));
/* Commit a small change to /A/D/G/rho, creating revision 2. */
SVN_ERR(svn_fs_begin_txn2(&txn, fs, newrev, SVN_FS_TXN_CHECK_LOCKS, pool));
diff --git a/subversion/tests/libsvn_fs_base/strings-reps-test.c b/subversion/tests/libsvn_fs_base/strings-reps-test.c
index a852103..4512eef 100644
--- a/subversion/tests/libsvn_fs_base/strings-reps-test.c
+++ b/subversion/tests/libsvn_fs_base/strings-reps-test.c
@@ -360,7 +360,7 @@ verify_expected_record(svn_fs_t *fs,
size, expected_len);
/* Read the string back in 100-byte chunks. */
- text = svn_stringbuf_create("", trail->pool);
+ text = svn_stringbuf_create_empty(trail->pool);
while (1)
{
size = sizeof(buf);
diff --git a/subversion/tests/libsvn_fs_fs/fs-pack-test.c b/subversion/tests/libsvn_fs_fs/fs-pack-test.c
index d68b79e..f0d7650 100644
--- a/subversion/tests/libsvn_fs_fs/fs-pack-test.c
+++ b/subversion/tests/libsvn_fs_fs/fs-pack-test.c
@@ -30,6 +30,7 @@
#include "svn_pools.h"
#include "svn_props.h"
#include "svn_fs.h"
+#include "private/svn_string_private.h"
#include "../svn_test_fs.h"
@@ -37,6 +38,16 @@
/*** Helper Functions ***/
+static void
+ignore_fs_warnings(void *baton, svn_error_t *err)
+{
+#ifdef SVN_DEBUG
+ SVN_DBG(("Ignoring FS warning %s\n",
+ svn_error_symbolic_name(err ? err->apr_err : 0)));
+#endif
+ return;
+}
+
/* Write the format number and maximum number of files per directory
to a new format file in PATH, overwriting a previously existing
file. Use POOL for temporary allocation.
@@ -95,6 +106,43 @@ get_rev_contents(svn_revnum_t rev, apr_pool_t *pool)
return apr_psprintf(pool, "%" APR_INT64_T_FMT "\n", num);
}
+struct pack_notify_baton
+{
+ apr_int64_t expected_shard;
+ svn_fs_pack_notify_action_t expected_action;
+};
+
+static svn_error_t *
+pack_notify(void *baton,
+ apr_int64_t shard,
+ svn_fs_pack_notify_action_t action,
+ apr_pool_t *pool)
+{
+ struct pack_notify_baton *pnb = baton;
+
+ SVN_TEST_ASSERT(shard == pnb->expected_shard);
+ SVN_TEST_ASSERT(action == pnb->expected_action);
+
+ /* Update expectations. */
+ switch (action)
+ {
+ case svn_fs_pack_notify_start:
+ pnb->expected_action = svn_fs_pack_notify_end;
+ break;
+
+ case svn_fs_pack_notify_end:
+ pnb->expected_action = svn_fs_pack_notify_start;
+ pnb->expected_shard++;
+ break;
+
+ default:
+ return svn_error_create(SVN_ERR_TEST_FAILED, NULL,
+ "Unknown notification action when packing");
+ }
+
+ return SVN_NO_ERROR;
+}
+
/* Create a packed filesystem in DIR. Set the shard size to
SHARD_SIZE and create NUM_REVS number of revisions (in addition to
r0). Use POOL for allocations. After this function successfully
@@ -113,6 +161,7 @@ create_packed_filesystem(const char *dir,
const char *conflict;
svn_revnum_t after_rev;
apr_pool_t *subpool = svn_pool_create(pool);
+ struct pack_notify_baton pnb;
apr_pool_t *iterpool;
int version;
@@ -156,7 +205,80 @@ create_packed_filesystem(const char *dir,
svn_pool_destroy(subpool);
/* Now pack the FS */
- return svn_fs_pack(dir, NULL, NULL, NULL, NULL, pool);
+ pnb.expected_shard = 0;
+ pnb.expected_action = svn_fs_pack_notify_start;
+ return svn_fs_pack(dir, pack_notify, &pnb, NULL, NULL, pool);
+}
+
+/* Create a packed FSFS filesystem for revprop tests at REPO_NAME with
+ * MAX_REV revisions and the given SHARD_SIZE and OPTS. Return it in *FS.
+ * Use POOL for allocations.
+ */
+static svn_error_t *
+prepare_revprop_repo(svn_fs_t **fs,
+ const char *repo_name,
+ int max_rev,
+ int shard_size,
+ const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ svn_fs_txn_t *txn;
+ svn_fs_root_t *txn_root;
+ const char *conflict;
+ svn_revnum_t after_rev;
+ apr_pool_t *subpool;
+
+ /* Create the packed FS and open it. */
+ SVN_ERR(create_packed_filesystem(repo_name, opts, max_rev, shard_size, pool));
+ SVN_ERR(svn_fs_open(fs, repo_name, NULL, pool));
+
+ subpool = svn_pool_create(pool);
+ /* Do a commit to trigger packing. */
+ SVN_ERR(svn_fs_begin_txn(&txn, *fs, max_rev, subpool));
+ SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
+ SVN_ERR(svn_test__set_file_contents(txn_root, "iota", "new-iota", subpool));
+ SVN_ERR(svn_fs_commit_txn(&conflict, &after_rev, txn, subpool));
+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(after_rev));
+ svn_pool_destroy(subpool);
+
+ /* Pack the repository. */
+ SVN_ERR(svn_fs_pack(repo_name, NULL, NULL, NULL, NULL, pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* For revision REV, return a short log message allocated in POOL.
+ */
+static svn_string_t *
+default_log(svn_revnum_t rev, apr_pool_t *pool)
+{
+ return svn_string_createf(pool, "Default message for rev %ld", rev);
+}
+
+/* For revision REV, return a long log message allocated in POOL.
+ */
+static svn_string_t *
+large_log(svn_revnum_t rev, apr_size_t length, apr_pool_t *pool)
+{
+ svn_stringbuf_t *temp = svn_stringbuf_create_ensure(100000, pool);
+ int i, count = (int)(length - 50) / 6;
+
+ svn_stringbuf_appendcstr(temp, "A ");
+ for (i = 0; i < count; ++i)
+ svn_stringbuf_appendcstr(temp, "very, ");
+
+ svn_stringbuf_appendcstr(temp,
+ apr_psprintf(pool, "very long message for rev %ld, indeed", rev));
+
+ return svn_stringbuf__morph_into_string(temp);
+}
+
+/* For revision REV, return a long log message allocated in POOL.
+ */
+static svn_string_t *
+huge_log(svn_revnum_t rev, apr_pool_t *pool)
+{
+ return large_log(rev, 90000, pool);
}
@@ -364,18 +486,13 @@ commit_packed_fs(const svn_test_opts_t *opts,
/* ------------------------------------------------------------------------ */
#define REPO_NAME "test-repo-get-set-revprop-packed-fs"
#define SHARD_SIZE 4
-#define MAX_REV 1
+#define MAX_REV 10
static svn_error_t *
get_set_revprop_packed_fs(const svn_test_opts_t *opts,
apr_pool_t *pool)
{
svn_fs_t *fs;
- svn_fs_txn_t *txn;
- svn_fs_root_t *txn_root;
- const char *conflict;
- svn_revnum_t after_rev;
svn_string_t *prop_value;
- apr_pool_t *subpool;
/* Bail (with success) on known-untestable scenarios */
if ((strcmp(opts->fs_type, "fsfs") != 0)
@@ -383,30 +500,179 @@ get_set_revprop_packed_fs(const svn_test_opts_t *opts,
return SVN_NO_ERROR;
/* Create the packed FS and open it. */
- SVN_ERR(create_packed_filesystem(REPO_NAME, opts, MAX_REV, SHARD_SIZE, pool));
- SVN_ERR(svn_fs_open(&fs, REPO_NAME, NULL, pool));
-
- subpool = svn_pool_create(pool);
- /* Do a commit to trigger packing. */
- SVN_ERR(svn_fs_begin_txn(&txn, fs, MAX_REV, subpool));
- SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
- SVN_ERR(svn_test__set_file_contents(txn_root, "iota", "new-iota", subpool));
- SVN_ERR(svn_fs_commit_txn(&conflict, &after_rev, txn, subpool));
- SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(after_rev));
- svn_pool_clear(subpool);
-
- /* Pack the repository. */
- SVN_ERR(svn_fs_pack(REPO_NAME, NULL, NULL, NULL, NULL, pool));
+ SVN_ERR(prepare_revprop_repo(&fs, REPO_NAME, MAX_REV, SHARD_SIZE, opts,
+ pool));
- /* Try to get revprop for revision 0. */
+ /* Try to get revprop for revision 0
+ * (non-packed due to special handling). */
SVN_ERR(svn_fs_revision_prop(&prop_value, fs, 0, SVN_PROP_REVISION_AUTHOR,
pool));
- /* Try to change revprop for revision 0. */
+ /* Try to change revprop for revision 0
+ * (non-packed due to special handling). */
SVN_ERR(svn_fs_change_rev_prop(fs, 0, SVN_PROP_REVISION_AUTHOR,
svn_string_create("tweaked-author", pool),
pool));
+ /* verify */
+ SVN_ERR(svn_fs_revision_prop(&prop_value, fs, 0, SVN_PROP_REVISION_AUTHOR,
+ pool));
+ SVN_TEST_STRING_ASSERT(prop_value->data, "tweaked-author");
+
+ /* Try to get packed revprop for revision 5. */
+ SVN_ERR(svn_fs_revision_prop(&prop_value, fs, 5, SVN_PROP_REVISION_AUTHOR,
+ pool));
+
+ /* Try to change packed revprop for revision 5. */
+ SVN_ERR(svn_fs_change_rev_prop(fs, 5, SVN_PROP_REVISION_AUTHOR,
+ svn_string_create("tweaked-author2", pool),
+ pool));
+
+ /* verify */
+ SVN_ERR(svn_fs_revision_prop(&prop_value, fs, 5, SVN_PROP_REVISION_AUTHOR,
+ pool));
+ SVN_TEST_STRING_ASSERT(prop_value->data, "tweaked-author2");
+
+ return SVN_NO_ERROR;
+}
+#undef REPO_NAME
+#undef MAX_REV
+#undef SHARD_SIZE
+
+/* ------------------------------------------------------------------------ */
+#define REPO_NAME "test-repo-get-set-large-revprop-packed-fs"
+#define SHARD_SIZE 4
+#define MAX_REV 11
+static svn_error_t *
+get_set_large_revprop_packed_fs(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ svn_fs_t *fs;
+ svn_string_t *prop_value;
+ svn_revnum_t rev;
+
+ /* Bail (with success) on known-untestable scenarios */
+ if ((strcmp(opts->fs_type, "fsfs") != 0)
+ || (opts->server_minor_version && (opts->server_minor_version < 7)))
+ return SVN_NO_ERROR;
+
+ /* Create the packed FS and open it. */
+ SVN_ERR(prepare_revprop_repo(&fs, REPO_NAME, MAX_REV, SHARD_SIZE, opts,
+ pool));
+
+ /* Set commit messages to different, large values that fill the pack
+ * files but do not exceed the pack size limit. */
+ for (rev = 0; rev <= MAX_REV; ++rev)
+ SVN_ERR(svn_fs_change_rev_prop(fs, rev, SVN_PROP_REVISION_LOG,
+ large_log(rev, 15000, pool),
+ pool));
+
+ /* verify */
+ for (rev = 0; rev <= MAX_REV; ++rev)
+ {
+ SVN_ERR(svn_fs_revision_prop(&prop_value, fs, rev,
+ SVN_PROP_REVISION_LOG, pool));
+ SVN_TEST_STRING_ASSERT(prop_value->data,
+ large_log(rev, 15000, pool)->data);
+ }
+
+ /* Put a larger revprop into the last, some middle and the first revision
+ * of a pack. This should cause the packs to split in the middle. */
+ SVN_ERR(svn_fs_change_rev_prop(fs, 3, SVN_PROP_REVISION_LOG,
+ /* rev 0 is not packed */
+ large_log(3, 37000, pool),
+ pool));
+ SVN_ERR(svn_fs_change_rev_prop(fs, 5, SVN_PROP_REVISION_LOG,
+ large_log(5, 25000, pool),
+ pool));
+ SVN_ERR(svn_fs_change_rev_prop(fs, 8, SVN_PROP_REVISION_LOG,
+ large_log(8, 25000, pool),
+ pool));
+
+ /* verify */
+ for (rev = 0; rev <= MAX_REV; ++rev)
+ {
+ SVN_ERR(svn_fs_revision_prop(&prop_value, fs, rev,
+ SVN_PROP_REVISION_LOG, pool));
+
+ if (rev == 3)
+ SVN_TEST_STRING_ASSERT(prop_value->data,
+ large_log(rev, 37000, pool)->data);
+ else if (rev == 5 || rev == 8)
+ SVN_TEST_STRING_ASSERT(prop_value->data,
+ large_log(rev, 25000, pool)->data);
+ else
+ SVN_TEST_STRING_ASSERT(prop_value->data,
+ large_log(rev, 15000, pool)->data);
+ }
+
+ return SVN_NO_ERROR;
+}
+#undef REPO_NAME
+#undef MAX_REV
+#undef SHARD_SIZE
+
+/* ------------------------------------------------------------------------ */
+#define REPO_NAME "test-repo-get-set-huge-revprop-packed-fs"
+#define SHARD_SIZE 4
+#define MAX_REV 10
+static svn_error_t *
+get_set_huge_revprop_packed_fs(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ svn_fs_t *fs;
+ svn_string_t *prop_value;
+ svn_revnum_t rev;
+
+ /* Bail (with success) on known-untestable scenarios */
+ if ((strcmp(opts->fs_type, "fsfs") != 0)
+ || (opts->server_minor_version && (opts->server_minor_version < 7)))
+ return SVN_NO_ERROR;
+
+ /* Create the packed FS and open it. */
+ SVN_ERR(prepare_revprop_repo(&fs, REPO_NAME, MAX_REV, SHARD_SIZE, opts,
+ pool));
+
+ /* Set commit messages to different values */
+ for (rev = 0; rev <= MAX_REV; ++rev)
+ SVN_ERR(svn_fs_change_rev_prop(fs, rev, SVN_PROP_REVISION_LOG,
+ default_log(rev, pool),
+ pool));
+
+ /* verify */
+ for (rev = 0; rev <= MAX_REV; ++rev)
+ {
+ SVN_ERR(svn_fs_revision_prop(&prop_value, fs, rev,
+ SVN_PROP_REVISION_LOG, pool));
+ SVN_TEST_STRING_ASSERT(prop_value->data, default_log(rev, pool)->data);
+ }
+
+ /* Put a huge revprop into the last, some middle and the first revision
+ * of a pack. They will cause the pack files to split accordingly. */
+ SVN_ERR(svn_fs_change_rev_prop(fs, 3, SVN_PROP_REVISION_LOG,
+ huge_log(3, pool),
+ pool));
+ SVN_ERR(svn_fs_change_rev_prop(fs, 5, SVN_PROP_REVISION_LOG,
+ huge_log(5, pool),
+ pool));
+ SVN_ERR(svn_fs_change_rev_prop(fs, 8, SVN_PROP_REVISION_LOG,
+ huge_log(8, pool),
+ pool));
+
+ /* verify */
+ for (rev = 0; rev <= MAX_REV; ++rev)
+ {
+ SVN_ERR(svn_fs_revision_prop(&prop_value, fs, rev,
+ SVN_PROP_REVISION_LOG, pool));
+
+ if (rev == 3 || rev == 5 || rev == 8)
+ SVN_TEST_STRING_ASSERT(prop_value->data,
+ huge_log(rev, pool)->data);
+ else
+ SVN_TEST_STRING_ASSERT(prop_value->data,
+ default_log(rev, pool)->data);
+ }
+
return SVN_NO_ERROR;
}
#undef REPO_NAME
@@ -477,6 +743,181 @@ recover_fully_packed(const svn_test_opts_t *opts,
#undef SHARD_SIZE
/* ------------------------------------------------------------------------ */
+/* Regression test for issue #4320 (fsfs file-hinting fails when reading a rep
+ from the transaction that is commiting rev = SHARD_SIZE). */
+#define REPO_NAME "test-repo-file-hint-at-shard-boundary"
+#define SHARD_SIZE 4
+#define MAX_REV (SHARD_SIZE - 1)
+static svn_error_t *
+file_hint_at_shard_boundary(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ apr_pool_t *subpool;
+ svn_fs_t *fs;
+ svn_fs_txn_t *txn;
+ svn_fs_root_t *txn_root;
+ const char *file_contents;
+ svn_stringbuf_t *retrieved_contents;
+ svn_error_t *err = SVN_NO_ERROR;
+
+ /* Bail (with success) on known-untestable scenarios */
+ if ((strcmp(opts->fs_type, "fsfs") != 0)
+ || (opts->server_minor_version && (opts->server_minor_version < 8)))
+ return SVN_NO_ERROR;
+
+ /* Create a packed FS and MAX_REV revisions */
+ SVN_ERR(create_packed_filesystem(REPO_NAME, opts, MAX_REV, SHARD_SIZE, pool));
+
+ /* Reopen the filesystem */
+ subpool = svn_pool_create(pool);
+ SVN_ERR(svn_fs_open(&fs, REPO_NAME, NULL, subpool));
+
+ /* Revision = SHARD_SIZE */
+ file_contents = get_rev_contents(SHARD_SIZE, subpool);
+ SVN_ERR(svn_fs_begin_txn(&txn, fs, MAX_REV, subpool));
+ SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
+ SVN_ERR(svn_test__set_file_contents(txn_root, "iota", file_contents,
+ subpool));
+
+ /* Retrieve the file. */
+ SVN_ERR(svn_test__get_file_contents(txn_root, "iota", &retrieved_contents,
+ subpool));
+ if (strcmp(retrieved_contents->data, file_contents))
+ {
+ err = svn_error_create(SVN_ERR_TEST_FAILED, err,
+ "Retrieved incorrect contents from iota.");
+ }
+
+ /* Close the repo. */
+ svn_pool_destroy(subpool);
+
+ return err;
+}
+#undef REPO_NAME
+#undef MAX_REV
+#undef SHARD_SIZE
+
+/* ------------------------------------------------------------------------ */
+#define REPO_NAME "get_set_multiple_huge_revprops_packed_fs"
+#define SHARD_SIZE 4
+#define MAX_REV 9
+static svn_error_t *
+get_set_multiple_huge_revprops_packed_fs(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ svn_fs_t *fs;
+ svn_string_t *prop_value;
+ svn_revnum_t rev;
+
+ /* Bail (with success) on known-untestable scenarios */
+ if ((strcmp(opts->fs_type, "fsfs") != 0)
+ || (opts->server_minor_version && (opts->server_minor_version < 7)))
+ return SVN_NO_ERROR;
+
+ /* Create the packed FS and open it. */
+ SVN_ERR(prepare_revprop_repo(&fs, REPO_NAME, MAX_REV, SHARD_SIZE, opts,
+ pool));
+
+ /* Set commit messages to different values */
+ for (rev = 0; rev <= MAX_REV; ++rev)
+ SVN_ERR(svn_fs_change_rev_prop(fs, rev, SVN_PROP_REVISION_LOG,
+ default_log(rev, pool),
+ pool));
+
+ /* verify */
+ for (rev = 0; rev <= MAX_REV; ++rev)
+ {
+ SVN_ERR(svn_fs_revision_prop(&prop_value, fs, rev,
+ SVN_PROP_REVISION_LOG, pool));
+ SVN_TEST_STRING_ASSERT(prop_value->data, default_log(rev, pool)->data);
+ }
+
+ /* Put a huge revprop into revision 1 and 2. */
+ SVN_ERR(svn_fs_change_rev_prop(fs, 1, SVN_PROP_REVISION_LOG,
+ huge_log(1, pool),
+ pool));
+ SVN_ERR(svn_fs_change_rev_prop(fs, 2, SVN_PROP_REVISION_LOG,
+ huge_log(2, pool),
+ pool));
+ SVN_ERR(svn_fs_change_rev_prop(fs, 5, SVN_PROP_REVISION_LOG,
+ huge_log(5, pool),
+ pool));
+ SVN_ERR(svn_fs_change_rev_prop(fs, 6, SVN_PROP_REVISION_LOG,
+ huge_log(6, pool),
+ pool));
+
+ /* verify */
+ for (rev = 0; rev <= MAX_REV; ++rev)
+ {
+ SVN_ERR(svn_fs_revision_prop(&prop_value, fs, rev,
+ SVN_PROP_REVISION_LOG, pool));
+
+ if (rev == 1 || rev == 2 || rev == 5 || rev == 6)
+ SVN_TEST_STRING_ASSERT(prop_value->data,
+ huge_log(rev, pool)->data);
+ else
+ SVN_TEST_STRING_ASSERT(prop_value->data,
+ default_log(rev, pool)->data);
+ }
+
+ return SVN_NO_ERROR;
+}
+#undef REPO_NAME
+#undef MAX_REV
+#undef SHARD_SIZE
+
+/* ------------------------------------------------------------------------ */
+
+#define REPO_NAME "revprop_caching_on_off"
+static svn_error_t *
+revprop_caching_on_off(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ svn_fs_t *fs1;
+ svn_fs_t *fs2;
+ apr_hash_t *fs_config;
+ svn_string_t *value;
+ const svn_string_t *another_value_for_avoiding_warnings_from_a_broken_api;
+ const svn_string_t *new_value = svn_string_create("new", pool);
+
+ if (strcmp(opts->fs_type, "fsfs") != 0)
+ return svn_error_create(SVN_ERR_TEST_SKIPPED, NULL, NULL);
+
+ /* Open two filesystem objects, enable revision property caching
+ * in one of them. */
+ SVN_ERR(svn_test__create_fs(&fs1, REPO_NAME, opts, pool));
+
+ fs_config = apr_hash_make(pool);
+ apr_hash_set(fs_config, SVN_FS_CONFIG_FSFS_CACHE_REVPROPS,
+ APR_HASH_KEY_STRING, "1");
+
+ SVN_ERR(svn_fs_open(&fs2, svn_fs_path(fs1, pool), fs_config, pool));
+
+ /* With inefficient named atomics, the filesystem will output a warning
+ and disable the revprop caching, but we still would like to test
+ these cases. Ignore the warning(s). */
+ svn_fs_set_warning_func(fs2, ignore_fs_warnings, NULL);
+
+ SVN_ERR(svn_fs_revision_prop(&value, fs2, 0, "svn:date", pool));
+ another_value_for_avoiding_warnings_from_a_broken_api = value;
+ SVN_ERR(svn_fs_change_rev_prop2(
+ fs1, 0, "svn:date",
+ &another_value_for_avoiding_warnings_from_a_broken_api,
+ new_value, pool));
+
+ /* Expect the change to be visible through both objects.*/
+ SVN_ERR(svn_fs_revision_prop(&value, fs1, 0, "svn:date", pool));
+ SVN_TEST_STRING_ASSERT(value->data, "new");
+
+ SVN_ERR(svn_fs_revision_prop(&value, fs2, 0, "svn:date", pool));
+ SVN_TEST_STRING_ASSERT(value->data, "new");
+
+ return SVN_NO_ERROR;
+}
+
+#undef REPO_NAME
+
+/* ------------------------------------------------------------------------ */
/* The test table. */
@@ -493,7 +934,17 @@ struct svn_test_descriptor_t test_funcs[] =
"commit to a packed FSFS filesystem"),
SVN_TEST_OPTS_PASS(get_set_revprop_packed_fs,
"get/set revprop while packing FSFS filesystem"),
+ SVN_TEST_OPTS_PASS(get_set_large_revprop_packed_fs,
+ "get/set large packed revprops in FSFS"),
+ SVN_TEST_OPTS_PASS(get_set_huge_revprop_packed_fs,
+ "get/set huge packed revprops in FSFS"),
SVN_TEST_OPTS_PASS(recover_fully_packed,
"recover a fully packed filesystem"),
+ SVN_TEST_OPTS_PASS(file_hint_at_shard_boundary,
+ "test file hint at shard boundary"),
+ SVN_TEST_OPTS_PASS(get_set_multiple_huge_revprops_packed_fs,
+ "set multiple huge revprops in packed FSFS"),
+ SVN_TEST_OPTS_PASS(revprop_caching_on_off,
+ "change revprops with enabled and disabled caching"),
SVN_TEST_NULL
};
diff --git a/subversion/tests/libsvn_ra/ra-test.c b/subversion/tests/libsvn_ra/ra-test.c
new file mode 100644
index 0000000..584da3d
--- /dev/null
+++ b/subversion/tests/libsvn_ra/ra-test.c
@@ -0,0 +1,213 @@
+/*
+ * ra-local-test.c : basic tests for the RA LOCAL library
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+
+
+#include <apr_general.h>
+#include <apr_pools.h>
+
+#define SVN_DEPRECATED
+
+#include "svn_error.h"
+#include "svn_delta.h"
+#include "svn_ra.h"
+#include "svn_time.h"
+#include "svn_pools.h"
+
+#include "../svn_test.h"
+#include "../svn_test_fs.h"
+#include "../../libsvn_ra_local/ra_local.h"
+
+/*-------------------------------------------------------------------*/
+
+/** Helper routines. **/
+
+
+static svn_error_t *
+make_and_open_local_repos(svn_ra_session_t **session,
+ const char *repos_name,
+ const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ svn_repos_t *repos;
+ const char *url;
+ svn_ra_callbacks2_t *cbtable;
+
+ SVN_ERR(svn_ra_create_callbacks(&cbtable, pool));
+
+ SVN_ERR(svn_test__create_repos(&repos, repos_name, opts, pool));
+ SVN_ERR(svn_ra_initialize(pool));
+
+ SVN_ERR(svn_uri_get_file_url_from_dirent(&url, repos_name, pool));
+
+ SVN_ERR(svn_ra_open3(session, url, NULL, cbtable, NULL, NULL, pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* Commit some simple changes */
+static svn_error_t *
+commit_changes(svn_ra_session_t *session,
+ apr_pool_t *pool)
+{
+ apr_hash_t *revprop_table = apr_hash_make(pool);
+ const svn_delta_editor_t *editor;
+ void *edit_baton;
+ const char *repos_root_url;
+ void *root_baton, *dir_baton;
+
+ SVN_ERR(svn_ra_get_commit_editor3(session, &editor, &edit_baton,
+ revprop_table,
+ NULL, NULL, NULL, TRUE, pool));
+ SVN_ERR(svn_ra_get_repos_root(session, &repos_root_url, pool));
+
+ SVN_ERR(editor->open_root(edit_baton, SVN_INVALID_REVNUM,
+ pool, &root_baton));
+ /* copy root-dir@0 to A@1 */
+ SVN_ERR(editor->add_directory("A", root_baton, repos_root_url, 0,
+ pool, &dir_baton));
+ SVN_ERR(editor->close_edit(edit_baton, pool));
+ return SVN_NO_ERROR;
+}
+
+/*-------------------------------------------------------------------*/
+
+/** The tests **/
+
+/* Baton for gls_receiver(). */
+struct gls_receiver_baton_t
+{
+ apr_array_header_t *segments;
+ apr_pool_t *pool;
+};
+
+/* Receive a location segment and append it to BATON.segments. */
+static svn_error_t *
+gls_receiver(svn_location_segment_t *segment,
+ void *baton,
+ apr_pool_t *pool)
+{
+ struct gls_receiver_baton_t *b = baton;
+
+ APR_ARRAY_PUSH(b->segments, svn_location_segment_t *)
+ = svn_location_segment_dup(segment, b->pool);
+ return SVN_NO_ERROR;
+}
+
+/* Test svn_ra_get_location_segments(). */
+static svn_error_t *
+location_segments_test(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ svn_ra_session_t *session;
+ apr_array_header_t *segments
+ = apr_array_make(pool, 1, sizeof(svn_location_segment_t *));
+ struct gls_receiver_baton_t b;
+ const char *path = "A";
+ svn_revnum_t peg_revision = 1;
+ svn_location_segment_t *seg;
+
+ b.segments = segments;
+ b.pool = pool;
+
+ SVN_ERR(make_and_open_local_repos(&session,
+ "test-repo-locsegs", opts,
+ pool));
+
+ /* ### This currently tests only a small subset of what's possible. */
+ SVN_ERR(commit_changes(session, pool));
+ SVN_ERR(svn_ra_get_location_segments(session, path, peg_revision,
+ SVN_INVALID_REVNUM, SVN_INVALID_REVNUM,
+ gls_receiver, &b, pool));
+ SVN_TEST_ASSERT(segments->nelts == 2);
+ seg = APR_ARRAY_IDX(segments, 0, svn_location_segment_t *);
+ SVN_TEST_STRING_ASSERT(seg->path, "A");
+ SVN_TEST_ASSERT(seg->range_start == 1);
+ SVN_TEST_ASSERT(seg->range_end == 1);
+ seg = APR_ARRAY_IDX(segments, 1, svn_location_segment_t *);
+ SVN_TEST_STRING_ASSERT(seg->path, "");
+ SVN_TEST_ASSERT(seg->range_start == 0);
+ SVN_TEST_ASSERT(seg->range_end == 0);
+
+ return SVN_NO_ERROR;
+}
+
+
+/* Implements svn_commit_callback2_t for commit_callback_failure() */
+static svn_error_t *
+commit_callback_with_failure(const svn_commit_info_t *info,
+ void *baton,
+ apr_pool_t *scratch_pool)
+{
+ apr_time_t timetemp;
+
+ SVN_TEST_ASSERT(info != NULL);
+ SVN_TEST_STRING_ASSERT(info->author, ""); /* No auth baton supplied. */
+ SVN_TEST_STRING_ASSERT(info->post_commit_err, NULL);
+
+ SVN_ERR(svn_time_from_cstring(&timetemp, info->date, scratch_pool));
+ SVN_TEST_ASSERT(info->date != 0);
+ SVN_TEST_ASSERT(info->repos_root != NULL);
+ SVN_TEST_ASSERT(info->revision == 1);
+
+ return svn_error_create(SVN_ERR_CANCELLED, NULL, NULL);
+}
+
+static svn_error_t *
+commit_callback_failure(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ svn_ra_session_t *ra_session;
+ const svn_delta_editor_t *editor;
+ void *edit_baton;
+ void *root_baton;
+ SVN_ERR(make_and_open_local_repos(&ra_session, "commit_cb_failure", opts, pool));
+
+ SVN_ERR(svn_ra_get_commit_editor3(ra_session, &editor, &edit_baton,
+ apr_hash_make(pool), commit_callback_with_failure,
+ NULL, NULL, FALSE, pool));
+
+ SVN_ERR(editor->open_root(edit_baton, 1, pool, &root_baton));
+ SVN_ERR(editor->change_dir_prop(root_baton, "A",
+ svn_string_create("B", pool), pool));
+ SVN_ERR(editor->close_directory(root_baton, pool));
+ SVN_TEST_ASSERT_ERROR(editor->close_edit(edit_baton, pool),
+ SVN_ERR_CANCELLED);
+
+ /* This is what users should do if close_edit fails... Except that in this case
+ the commit actually succeeded*/
+ SVN_ERR(editor->abort_edit(edit_baton, pool));
+ return SVN_NO_ERROR;
+}
+
+
+/* The test table. */
+struct svn_test_descriptor_t test_funcs[] =
+ {
+ SVN_TEST_NULL,
+ SVN_TEST_OPTS_PASS(location_segments_test,
+ "test svn_ra_get_location_segments"),
+ SVN_TEST_OPTS_PASS(commit_callback_failure,
+ "commit callback failure"),
+ SVN_TEST_NULL
+ };
diff --git a/subversion/tests/libsvn_ra_local/ra-local-test.c b/subversion/tests/libsvn_ra_local/ra-local-test.c
index 0c15817..fc13ecc 100644
--- a/subversion/tests/libsvn_ra_local/ra-local-test.c
+++ b/subversion/tests/libsvn_ra_local/ra-local-test.c
@@ -125,7 +125,7 @@ try_split_url(const char *url, apr_pool_t *pool)
err = svn_ra_local__split_URL(&repos, &repos_path, &fs_path, url, pool);
if (! err)
- return SVN_NO_ERROR;
+ return APR_SUCCESS;
apr_err = err->apr_err;
svn_error_clear(err);
diff --git a/subversion/tests/libsvn_repos/repos-test.c b/subversion/tests/libsvn_repos/repos-test.c
index 76687cd..87265f0 100644
--- a/subversion/tests/libsvn_repos/repos-test.c
+++ b/subversion/tests/libsvn_repos/repos-test.c
@@ -29,16 +29,20 @@
#include "svn_pools.h"
#include "svn_error.h"
#include "svn_fs.h"
+#include "svn_hash.h"
#include "svn_repos.h"
#include "svn_path.h"
#include "svn_delta.h"
#include "svn_config.h"
#include "svn_props.h"
+#include "svn_version.h"
#include "../svn_test_fs.h"
#include "dir-delta-editor.h"
+#include "private/svn_repos_private.h"
+
/* Used to terminate lines in large multi-line string literals. */
#define NL APR_EOL_STR
@@ -49,6 +53,20 @@
#define MIN(a,b) (((a)<(b))?(a):(b))
#endif
+/* Compare strings, like strcmp but either or both may be NULL which
+ * compares equal to NULL and not equal to any non-NULL string. */
+static int
+strcmp_null(const char *s1, const char *s2)
+{
+ if (s1 && s2)
+ return strcmp(s1, s2);
+ else if (s1 || s2)
+ return 1;
+ else
+ return 0;
+}
+
+
static svn_error_t *
dir_deltas(const svn_test_opts_t *opts,
@@ -1077,9 +1095,10 @@ rmlocks(const svn_test_opts_t *opts,
SVN_ERR(create_rmlocks_editor(&editor, &edit_baton, &removed, subpool));
/* Report what we have. */
- SVN_ERR(svn_repos_begin_report2(&report_baton, 1, repos, "/", "", NULL,
+ SVN_ERR(svn_repos_begin_report3(&report_baton, 1, repos, "/", "", NULL,
FALSE, svn_depth_infinity, FALSE, FALSE,
- editor, edit_baton, NULL, NULL, subpool));
+ editor, edit_baton, NULL, NULL, 1024,
+ subpool));
SVN_ERR(svn_repos_set_path3(report_baton, "", 1,
svn_depth_infinity,
FALSE, NULL, subpool));
@@ -1108,30 +1127,104 @@ rmlocks(const svn_test_opts_t *opts,
/* Helper for the authz test. Set *AUTHZ_P to a representation of
- AUTHZ_CONTENTS, using POOL for temporary allocation. */
+ AUTHZ_CONTENTS, using POOL for temporary allocation. If DISK
+ is TRUE then write the contents to a temp file and use
+ svn_repos_authz_read() to get the data if FALSE write the
+ data to a buffered stream and use svn_repos_authz_parse(). */
static svn_error_t *
authz_get_handle(svn_authz_t **authz_p, const char *authz_contents,
- apr_pool_t *pool)
+ svn_boolean_t disk, apr_pool_t *pool)
{
- const char *authz_file_path;
+ if (disk)
+ {
+ const char *authz_file_path;
+
+ /* Create a temporary file. */
+ SVN_ERR_W(svn_io_write_unique(&authz_file_path, NULL,
+ authz_contents, strlen(authz_contents),
+ svn_io_file_del_on_pool_cleanup, pool),
+ "Writing temporary authz file");
- /* Create a temporary file. */
- SVN_ERR_W(svn_io_write_unique(&authz_file_path, NULL,
- authz_contents, strlen(authz_contents),
- svn_io_file_del_on_pool_cleanup, pool),
- "Writing temporary authz file");
+ /* Read the authz configuration back and start testing. */
+ SVN_ERR_W(svn_repos_authz_read(authz_p, authz_file_path, TRUE, pool),
+ "Opening test authz file");
- /* Read the authz configuration back and start testing. */
- SVN_ERR_W(svn_repos_authz_read(authz_p, authz_file_path, TRUE, pool),
- "Opening test authz file");
+ /* Done with the file. */
+ SVN_ERR_W(svn_io_remove_file(authz_file_path, pool),
+ "Removing test authz file");
+ }
+ else
+ {
+ svn_stream_t *stream;
- /* Done with the file. */
- SVN_ERR_W(svn_io_remove_file(authz_file_path, pool),
- "Removing test authz file");
+ stream = svn_stream_buffered(pool);
+ SVN_ERR_W(svn_stream_puts(stream, authz_contents),
+ "Writing authz contents to stream");
+
+ SVN_ERR_W(svn_repos_authz_parse(authz_p, stream, NULL, pool),
+ "Parsing the authz contents");
+
+ SVN_ERR_W(svn_stream_close(stream),
+ "Closing the stream");
+ }
return SVN_NO_ERROR;
}
+struct check_access_tests {
+ const char *path;
+ const char *repo_name;
+ const char *user;
+ const svn_repos_authz_access_t required;
+ const svn_boolean_t expected;
+};
+
+/* Helper for the authz test. Runs a set of tests against AUTHZ_CFG
+ * as defined in TESTS. */
+static svn_error_t *
+authz_check_access(svn_authz_t *authz_cfg,
+ const struct check_access_tests *tests,
+ apr_pool_t *pool)
+{
+ int i;
+ svn_boolean_t access_granted;
+
+ /* Loop over the test array and test each case. */
+ for (i = 0; !(tests[i].path == NULL
+ && tests[i].required == svn_authz_none); i++)
+ {
+ SVN_ERR(svn_repos_authz_check_access(authz_cfg,
+ tests[i].repo_name,
+ tests[i].path,
+ tests[i].user,
+ tests[i].required,
+ &access_granted, pool));
+
+ if (access_granted != tests[i].expected)
+ {
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "Authz incorrectly %s %s%s access "
+ "to %s%s%s for user %s",
+ access_granted ?
+ "grants" : "denies",
+ tests[i].required
+ & svn_authz_recursive ?
+ "recursive " : "",
+ tests[i].required
+ & svn_authz_read ?
+ "read" : "write",
+ tests[i].repo_name ?
+ tests[i].repo_name : "",
+ tests[i].repo_name ?
+ ":" : "",
+ tests[i].path,
+ tests[i].user ?
+ tests[i].user : "-");
+ }
+ }
+
+ return SVN_NO_ERROR;
+}
/* Test that authz is giving out the right authorizations. */
@@ -1143,36 +1236,30 @@ authz(apr_pool_t *pool)
svn_error_t *err;
svn_boolean_t access_granted;
apr_pool_t *subpool = svn_pool_create(pool);
- int i;
+
/* Definition of the paths to test and expected replies for each. */
- struct
- {
- const char *path;
- const char *user;
- const svn_repos_authz_access_t required;
- const svn_boolean_t expected;
- } test_set[] = {
+ struct check_access_tests test_set[] = {
/* Test that read rules are correctly used. */
- { "/A", NULL, svn_authz_read, TRUE },
- { "/iota", NULL, svn_authz_read, FALSE },
+ { "/A", "greek", NULL, svn_authz_read, TRUE },
+ { "/iota", "greek", NULL, svn_authz_read, FALSE },
/* Test that write rules are correctly used. */
- { "/A", "plato", svn_authz_write, TRUE },
- { "/A", NULL, svn_authz_write, FALSE },
+ { "/A", "greek", "plato", svn_authz_write, TRUE },
+ { "/A", "greek", NULL, svn_authz_write, FALSE },
/* Test that pan-repository rules are found and used. */
- { "/A/B/lambda", "plato", svn_authz_read, TRUE },
- { "/A/B/lambda", NULL, svn_authz_read, FALSE },
+ { "/A/B/lambda", "greek", "plato", svn_authz_read, TRUE },
+ { "/A/B/lambda", "greek", NULL, svn_authz_read, FALSE },
/* Test that authz uses parent path ACLs if no rule for the path
exists. */
- { "/A/C", NULL, svn_authz_read, TRUE },
+ { "/A/C", "greek", NULL, svn_authz_read, TRUE },
/* Test that recursive access requests take into account the rules
of subpaths. */
- { "/A/D", "plato", svn_authz_read | svn_authz_recursive, TRUE },
- { "/A/D", NULL, svn_authz_read | svn_authz_recursive, FALSE },
+ { "/A/D", "greek", "plato", svn_authz_read | svn_authz_recursive, TRUE },
+ { "/A/D", "greek", NULL, svn_authz_read | svn_authz_recursive, FALSE },
/* Test global write access lookups. */
- { NULL, "plato", svn_authz_read, TRUE },
- { NULL, NULL, svn_authz_write, FALSE },
+ { NULL, "greek", "plato", svn_authz_read, TRUE },
+ { NULL, "greek", NULL, svn_authz_write, FALSE },
/* Sentinel */
- { NULL, NULL, svn_authz_none, FALSE }
+ { NULL, NULL, NULL, svn_authz_none, FALSE }
};
/* The test logic:
@@ -1224,37 +1311,14 @@ authz(apr_pool_t *pool)
"" NL;
/* Load the test authz rules. */
- SVN_ERR(authz_get_handle(&authz_cfg, contents, subpool));
+ SVN_ERR(authz_get_handle(&authz_cfg, contents, FALSE, subpool));
/* Loop over the test array and test each case. */
- for (i = 0; !(test_set[i].path == NULL
- && test_set[i].required == svn_authz_none); i++)
- {
- SVN_ERR(svn_repos_authz_check_access(authz_cfg, "greek",
- test_set[i].path,
- test_set[i].user,
- test_set[i].required,
- &access_granted, subpool));
-
- if (access_granted != test_set[i].expected)
- {
- return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
- "Authz incorrectly %s %s%s access "
- "to greek:%s for user %s",
- access_granted ?
- "grants" : "denies",
- test_set[i].required
- & svn_authz_recursive ?
- "recursive " : "",
- test_set[i].required
- & svn_authz_read ?
- "read" : "write",
- test_set[i].path,
- test_set[i].user ?
- test_set[i].user : "-");
- }
- }
+ SVN_ERR(authz_check_access(authz_cfg, test_set, subpool));
+ /* Repeat the previous test on disk */
+ SVN_ERR(authz_get_handle(&authz_cfg, contents, TRUE, subpool));
+ SVN_ERR(authz_check_access(authz_cfg, test_set, subpool));
/* The authz rules for the phase 2 tests, first case (cyclic
dependency). */
@@ -1268,7 +1332,7 @@ authz(apr_pool_t *pool)
/* Load the test authz rules and check that group cycles are
reported. */
- err = authz_get_handle(&authz_cfg, contents, subpool);
+ err = authz_get_handle(&authz_cfg, contents, FALSE, subpool);
if (!err || err->apr_err != SVN_ERR_AUTHZ_INVALID_CONFIG)
return svn_error_createf(SVN_ERR_TEST_FAILED, err,
"Got %s error instead of expected "
@@ -1283,7 +1347,7 @@ authz(apr_pool_t *pool)
"@senate = r" NL;
/* Check that references to undefined groups are reported. */
- err = authz_get_handle(&authz_cfg, contents, subpool);
+ err = authz_get_handle(&authz_cfg, contents, FALSE, subpool);
if (!err || err->apr_err != SVN_ERR_AUTHZ_INVALID_CONFIG)
return svn_error_createf(SVN_ERR_TEST_FAILED, err,
"Got %s error instead of expected "
@@ -1300,7 +1364,7 @@ authz(apr_pool_t *pool)
"* =" NL;
/* Load the test authz rules. */
- SVN_ERR(authz_get_handle(&authz_cfg, contents, subpool));
+ SVN_ERR(authz_get_handle(&authz_cfg, contents, FALSE, subpool));
/* Verify that the rule on /dir2/secret doesn't affect this
request */
@@ -1314,12 +1378,525 @@ authz(apr_pool_t *pool)
"Regression: incomplete ancestry test "
"for recursive access lookup.");
+ /* The authz rules for the phase 4 tests */
+ contents =
+ "[greek:/dir2//secret]" NL
+ "* =" NL;
+ SVN_TEST_ASSERT_ERROR(authz_get_handle(&authz_cfg, contents, FALSE, subpool),
+ SVN_ERR_AUTHZ_INVALID_CONFIG);
+
/* That's a wrap! */
svn_pool_destroy(subpool);
return SVN_NO_ERROR;
}
+
+/* Test in-repo authz paths */
+static svn_error_t *
+in_repo_authz(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ svn_repos_t *repos;
+ svn_fs_t *fs;
+ svn_fs_txn_t *txn;
+ svn_fs_root_t *txn_root;
+ svn_revnum_t youngest_rev;
+ svn_authz_t *authz_cfg;
+ const char *authz_contents;
+ const char *repos_root;
+ const char *repos_url;
+ const char *authz_url;
+ const char *noent_authz_url;
+ svn_error_t *err;
+ struct check_access_tests test_set[] = {
+ /* reads */
+ { "/A", NULL, NULL, svn_authz_read, FALSE },
+ { "/A", NULL, "plato", svn_authz_read, TRUE },
+ { "/A", NULL, "socrates", svn_authz_read, TRUE },
+ /* writes */
+ { "/A", NULL, NULL, svn_authz_write, FALSE },
+ { "/A", NULL, "socrates", svn_authz_write, FALSE },
+ { "/A", NULL, "plato", svn_authz_write, TRUE },
+ /* Sentinel */
+ { NULL, NULL, NULL, svn_authz_none, FALSE }
+ };
+
+ /* Test plan:
+ * Create an authz file and put it in the repository.
+ * Verify it can be read with an relative URL.
+ * Verify it can be read with an absolute URL.
+ * Verify non-existant path does not error out when must_exist is FALSE.
+ * Verify non-existant path does error out when must_exist is TRUE.
+ * Verify that an http:// URL produces an error.
+ * Verify that an svn:// URL produces an error.
+ */
+
+ /* What we'll put in the authz file, it's simple since we're not testing
+ * the parsing, just that we got what we expected. */
+ authz_contents =
+ "" NL
+ "" NL
+ "[/]" NL
+ "plato = rw" NL
+ "socrates = r";
+
+ /* Create a filesystem and repository. */
+ SVN_ERR(svn_test__create_repos(&repos, "test-repo-in-repo-authz",
+ opts, pool));
+ fs = svn_repos_fs(repos);
+
+ /* Commit the authz file to the repo. */
+ SVN_ERR(svn_fs_begin_txn(&txn, fs, 0, pool));
+ SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+ SVN_ERR(svn_fs_make_file(txn_root, "authz", pool));
+ SVN_ERR(svn_test__set_file_contents(txn_root, "authz", authz_contents,
+ pool));
+ SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
+
+ repos_root = svn_repos_path(repos, pool);
+ SVN_ERR(svn_uri_get_file_url_from_dirent(&repos_url, repos_root, pool));
+ authz_url = apr_pstrcat(pool, repos_url, "/authz", (char *)NULL);
+ noent_authz_url = apr_pstrcat(pool, repos_url, "/A/authz", (char *)NULL);
+
+ /* absolute file URL. */
+ SVN_ERR(svn_repos_authz_read2(&authz_cfg, authz_url, NULL, TRUE, pool));
+ SVN_ERR(authz_check_access(authz_cfg, test_set, pool));
+
+ /* Non-existant path in the repo with must_exist set to FALSE */
+ SVN_ERR(svn_repos_authz_read2(&authz_cfg, noent_authz_url, NULL,
+ FALSE, pool));
+
+ /* Non-existant path in the repo with must_exist set to TRUE */
+ err = svn_repos_authz_read2(&authz_cfg, noent_authz_url, NULL, TRUE, pool);
+ if (!err || err->apr_err != SVN_ERR_ILLEGAL_TARGET)
+ return svn_error_createf(SVN_ERR_TEST_FAILED, err,
+ "Got %s error instead of expected "
+ "SVN_ERR_ILLEGAL_TARGET",
+ err ? "unexpected" : "no");
+ svn_error_clear(err);
+
+ /* http:// URL which is unsupported */
+ err = svn_repos_authz_read2(&authz_cfg, "http://example.com/repo/authz",
+ NULL, TRUE, pool);
+ if (!err || err->apr_err != SVN_ERR_RA_ILLEGAL_URL)
+ return svn_error_createf(SVN_ERR_TEST_FAILED, err,
+ "Got %s error instead of expected "
+ "SVN_ERR_RA_ILLEGAL_URL",
+ err ? "unexpected" : "no");
+ svn_error_clear(err);
+
+ /* svn:// URL which is unsupported */
+ err = svn_repos_authz_read2(&authz_cfg, "svn://example.com/repo/authz",
+ NULL, TRUE, pool);
+ if (!err || err->apr_err != SVN_ERR_RA_ILLEGAL_URL)
+ return svn_error_createf(SVN_ERR_TEST_FAILED, err,
+ "Got %s error instead of expected "
+ "SVN_ERR_RA_ILLEGAL_URL",
+ err ? "unexpected" : "no");
+ svn_error_clear(err);
+
+
+ return SVN_NO_ERROR;
+}
+
+
+/* Test in-repo authz with global groups. */
+static svn_error_t *
+in_repo_groups_authz(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ svn_repos_t *repos;
+ svn_fs_t *fs;
+ svn_fs_txn_t *txn;
+ svn_fs_root_t *txn_root;
+ svn_revnum_t youngest_rev;
+ svn_authz_t *authz_cfg;
+ const char *groups_contents;
+ const char *authz_contents;
+ const char *repos_root;
+ const char *repos_url;
+ const char *groups_url;
+ const char *noent_groups_url;
+ const char *authz_url;
+ const char *empty_authz_url;
+ const char *noent_authz_url;
+ svn_error_t *err;
+ struct check_access_tests test_set[] = {
+ /* reads */
+ { "/A", NULL, NULL, svn_authz_read, FALSE },
+ { "/A", NULL, "plato", svn_authz_read, TRUE },
+ { "/A", NULL, "socrates", svn_authz_read, TRUE },
+ { "/A", NULL, "solon", svn_authz_read, TRUE },
+ { "/A", NULL, "ephialtes", svn_authz_read, TRUE },
+ /* writes */
+ { "/A", NULL, NULL, svn_authz_write, FALSE },
+ { "/A", NULL, "plato", svn_authz_write, FALSE },
+ { "/A", NULL, "socrates", svn_authz_write, FALSE },
+ { "/A", NULL, "solon", svn_authz_write, TRUE },
+ { "/A", NULL, "ephialtes", svn_authz_write, TRUE },
+ /* Sentinel */
+ { NULL, NULL, NULL, svn_authz_none, FALSE }
+ };
+
+ /* Test plan:
+ * 1. Create an authz file, a global groups file and an empty authz file,
+ * put all these files in the repository. The empty authz file is
+ * required to perform the non-existent path checks (4-7) --
+ * otherwise we would get the authz validation error due to undefined
+ * groups.
+ * 2. Verify that the groups file can be read with an relative URL.
+ * 3. Verify that the groups file can be read with an absolute URL.
+ * 4. Verify that non-existent groups file path does not error out when
+ * must_exist is FALSE.
+ * 5. Same as (4), but when both authz and groups file paths do
+ * not exist.
+ * 6. Verify that non-existent path for the groups file does error out when
+ * must_exist is TRUE.
+ * 7. Verify that an http:// URL produces an error.
+ * 8. Verify that an svn:// URL produces an error.
+ */
+
+ /* What we'll put in the authz and groups files, it's simple since
+ * we're not testing the parsing, just that we got what we expected. */
+
+ groups_contents =
+ "[groups]" NL
+ "philosophers = plato, socrates" NL
+ "senate = solon, ephialtes" NL
+ "" NL;
+
+ authz_contents =
+ "[/]" NL
+ "@senate = rw" NL
+ "@philosophers = r" NL
+ "" NL;
+
+ /* Create a filesystem and repository. */
+ SVN_ERR(svn_test__create_repos(&repos,
+ "test-repo-in-repo-global-groups-authz",
+ opts, pool));
+ fs = svn_repos_fs(repos);
+
+ /* Commit the authz, empty authz and groups files to the repo. */
+ SVN_ERR(svn_fs_begin_txn(&txn, fs, 0, pool));
+ SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+ SVN_ERR(svn_fs_make_file(txn_root, "groups", pool));
+ SVN_ERR(svn_fs_make_file(txn_root, "authz", pool));
+ SVN_ERR(svn_fs_make_file(txn_root, "empty-authz", pool));
+ SVN_ERR(svn_test__set_file_contents(txn_root, "groups",
+ groups_contents, pool));
+ SVN_ERR(svn_test__set_file_contents(txn_root, "authz",
+ authz_contents, pool));
+ SVN_ERR(svn_test__set_file_contents(txn_root, "empty-authz", "", pool));
+ SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
+
+ /* Calculate URLs */
+ repos_root = svn_repos_path(repos, pool);
+ SVN_ERR(svn_uri_get_file_url_from_dirent(&repos_url, repos_root, pool));
+ authz_url = apr_pstrcat(pool, repos_url, "/authz", (char *)NULL);
+ empty_authz_url = apr_pstrcat(pool, repos_url, "/empty-authz", (char *)NULL);
+ noent_authz_url = apr_pstrcat(pool, repos_url, "/A/authz", (char *)NULL);
+ groups_url = apr_pstrcat(pool, repos_url, "/groups", (char *)NULL);
+ noent_groups_url = apr_pstrcat(pool, repos_url, "/A/groups", (char *)NULL);
+
+
+ /* absolute file URLs. */
+ groups_url = apr_pstrcat(pool, repos_url, "/groups", (char *)NULL);
+ SVN_ERR(svn_repos_authz_read2(&authz_cfg, authz_url, groups_url, TRUE, pool));
+ SVN_ERR(authz_check_access(authz_cfg, test_set, pool));
+
+ /* Non-existent path for the groups file with must_exist
+ * set to TRUE */
+ SVN_ERR(svn_repos_authz_read2(&authz_cfg, empty_authz_url, noent_groups_url,
+ FALSE, pool));
+
+ /* Non-existent paths for both the authz and the groups files
+ * with must_exist set to TRUE */
+ SVN_ERR(svn_repos_authz_read2(&authz_cfg, noent_authz_url, noent_groups_url,
+ FALSE, pool));
+
+ /* Non-existent path for the groups file with must_exist
+ * set to TRUE */
+ err = svn_repos_authz_read2(&authz_cfg, empty_authz_url, noent_groups_url,
+ TRUE, pool);
+ if (!err || err->apr_err != SVN_ERR_ILLEGAL_TARGET)
+ return svn_error_createf(SVN_ERR_TEST_FAILED, err,
+ "Got %s error instead of expected "
+ "SVN_ERR_ILLEGAL_TARGET",
+ err ? "unexpected" : "no");
+ svn_error_clear(err);
+
+ /* http:// URL which is unsupported */
+ err = svn_repos_authz_read2(&authz_cfg, empty_authz_url,
+ "http://example.com/repo/groups",
+ TRUE, pool);
+ if (!err || err->apr_err != SVN_ERR_RA_ILLEGAL_URL)
+ return svn_error_createf(SVN_ERR_TEST_FAILED, err,
+ "Got %s error instead of expected "
+ "SVN_ERR_RA_ILLEGAL_URL",
+ err ? "unexpected" : "no");
+ svn_error_clear(err);
+
+ /* svn:// URL which is unsupported */
+ err = svn_repos_authz_read2(&authz_cfg, empty_authz_url,
+ "http://example.com/repo/groups",
+ TRUE, pool);
+ if (!err || err->apr_err != SVN_ERR_RA_ILLEGAL_URL)
+ return svn_error_createf(SVN_ERR_TEST_FAILED, err,
+ "Got %s error instead of expected "
+ "SVN_ERR_RA_ILLEGAL_URL",
+ err ? "unexpected" : "no");
+ svn_error_clear(err);
+
+
+ return SVN_NO_ERROR;
+}
+
+
+/* Helper for the groups_authz test. Set *AUTHZ_P to a representation of
+ AUTHZ_CONTENTS in conjuction with GROUPS_CONTENTS, using POOL for
+ temporary allocation. If DISK is TRUE then write the contents to
+ temporary files and use svn_repos_authz_read2() to get the data if FALSE
+ write the data to a buffered stream and use svn_repos_authz_parse(). */
+static svn_error_t *
+authz_groups_get_handle(svn_authz_t **authz_p,
+ const char *authz_contents,
+ const char *groups_contents,
+ svn_boolean_t disk,
+ apr_pool_t *pool)
+{
+ if (disk)
+ {
+ const char *authz_file_path;
+ const char *groups_file_path;
+
+ /* Create temporary files. */
+ SVN_ERR_W(svn_io_write_unique(&authz_file_path, NULL,
+ authz_contents,
+ strlen(authz_contents),
+ svn_io_file_del_on_pool_cleanup, pool),
+ "Writing temporary authz file");
+ SVN_ERR_W(svn_io_write_unique(&groups_file_path, NULL,
+ groups_contents,
+ strlen(groups_contents),
+ svn_io_file_del_on_pool_cleanup, pool),
+ "Writing temporary groups file");
+
+ /* Read the authz configuration back and start testing. */
+ SVN_ERR_W(svn_repos_authz_read2(authz_p, authz_file_path,
+ groups_file_path, TRUE, pool),
+ "Opening test authz and groups files");
+
+ /* Done with the files. */
+ SVN_ERR_W(svn_io_remove_file(authz_file_path, pool),
+ "Removing test authz file");
+ SVN_ERR_W(svn_io_remove_file(groups_file_path, pool),
+ "Removing test groups file");
+ }
+ else
+ {
+ svn_stream_t *stream;
+ svn_stream_t *groups_stream;
+
+ /* Create the streams. */
+ stream = svn_stream_buffered(pool);
+ groups_stream = svn_stream_buffered(pool);
+
+ SVN_ERR_W(svn_stream_puts(stream, authz_contents),
+ "Writing authz contents to stream");
+ SVN_ERR_W(svn_stream_puts(groups_stream, groups_contents),
+ "Writing groups contents to stream");
+
+ /* Read the authz configuration from the streams and start testing. */
+ SVN_ERR_W(svn_repos_authz_parse(authz_p, stream, groups_stream, pool),
+ "Parsing the authz and groups contents");
+
+ /* Done with the streams. */
+ SVN_ERR_W(svn_stream_close(stream),
+ "Closing the authz stream");
+ SVN_ERR_W(svn_stream_close(groups_stream),
+ "Closing the groups stream");
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Test authz with global groups. */
+static svn_error_t *
+groups_authz(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ svn_authz_t *authz_cfg;
+ const char *authz_contents;
+ const char *groups_contents;
+ svn_error_t *err;
+
+ struct check_access_tests test_set1[] = {
+ /* reads */
+ { "/A", "greek", NULL, svn_authz_read, FALSE },
+ { "/A", "greek", "plato", svn_authz_read, TRUE },
+ { "/A", "greek", "demetrius", svn_authz_read, TRUE },
+ { "/A", "greek", "galenos", svn_authz_read, TRUE },
+ { "/A", "greek", "pamphilos", svn_authz_read, FALSE },
+ /* writes */
+ { "/A", "greek", NULL, svn_authz_write, FALSE },
+ { "/A", "greek", "plato", svn_authz_write, TRUE },
+ { "/A", "greek", "demetrius", svn_authz_write, FALSE },
+ { "/A", "greek", "galenos", svn_authz_write, FALSE },
+ { "/A", "greek", "pamphilos", svn_authz_write, FALSE },
+ /* Sentinel */
+ { NULL, NULL, NULL, svn_authz_none, FALSE }
+ };
+
+ struct check_access_tests test_set2[] = {
+ /* reads */
+ { "/A", "greek", NULL, svn_authz_read, FALSE },
+ { "/A", "greek", "socrates", svn_authz_read, FALSE },
+ { "/B", "greek", NULL, svn_authz_read, FALSE},
+ { "/B", "greek", "socrates", svn_authz_read, TRUE },
+ /* writes */
+ { "/A", "greek", NULL, svn_authz_write, FALSE },
+ { "/A", "greek", "socrates", svn_authz_write, FALSE },
+ { "/B", "greek", NULL, svn_authz_write, FALSE},
+ { "/B", "greek", "socrates", svn_authz_write, TRUE },
+ /* Sentinel */
+ { NULL, NULL, NULL, svn_authz_none, FALSE }
+ };
+
+ /* Test plan:
+ * 1. Ensure that a simple setup with global groups and access rights in
+ * two separate files works as expected.
+ * 2. Verify that access rights written in the global groups file are
+ * discarded and affect nothing in authorization terms.
+ * 3. Verify that local groups in the authz file are prohibited in
+ * conjuction with global groups (and that a configuration error is
+ * reported in this scenario).
+ * 4. Ensure that group cycles in the global groups file are reported.
+ *
+ * All checks are performed twice -- for the configurations stored on disk
+ * and in memory. See authz_groups_get_handle.
+ */
+
+ groups_contents =
+ "[groups]" NL
+ "slaves = pamphilos,@gladiators" NL
+ "gladiators = demetrius,galenos" NL
+ "philosophers = plato" NL
+ "" NL;
+
+ authz_contents =
+ "[greek:/A]" NL
+ "@slaves = " NL
+ "@gladiators = r" NL
+ "@philosophers = rw" NL
+ "" NL;
+
+ SVN_ERR(authz_groups_get_handle(&authz_cfg, authz_contents,
+ groups_contents, TRUE, pool));
+
+ SVN_ERR(authz_check_access(authz_cfg, test_set1, pool));
+
+ SVN_ERR(authz_groups_get_handle(&authz_cfg, authz_contents,
+ groups_contents, FALSE, pool));
+
+ SVN_ERR(authz_check_access(authz_cfg, test_set1, pool));
+
+ /* Access rights in the global groups file are discarded. */
+ groups_contents =
+ "[groups]" NL
+ "philosophers = socrates" NL
+ "" NL
+ "[greek:/A]" NL
+ "@philosophers = rw" NL
+ "" NL;
+
+ authz_contents =
+ "[greek:/B]" NL
+ "@philosophers = rw" NL
+ "" NL;
+
+ SVN_ERR(authz_groups_get_handle(&authz_cfg, authz_contents,
+ groups_contents, TRUE, pool));
+
+ SVN_ERR(authz_check_access(authz_cfg, test_set2, pool));
+
+ SVN_ERR(authz_groups_get_handle(&authz_cfg, authz_contents,
+ groups_contents, FALSE, pool));
+
+ SVN_ERR(authz_check_access(authz_cfg, test_set2, pool));
+
+ /* Local groups cannot be used in conjuction with global groups. */
+ groups_contents =
+ "[groups]" NL
+ "slaves = maximus" NL
+ "" NL;
+
+ authz_contents =
+ "[greek:/A]" NL
+ "@slaves = " NL
+ "@kings = rw" NL
+ "" NL
+ "[groups]" NL
+ /* That's an epic story of the slave who tried to become a king. */
+ "kings = maximus" NL
+ "" NL;
+
+ err = authz_groups_get_handle(&authz_cfg, authz_contents,
+ groups_contents, TRUE, pool);
+
+ if (!err || err->apr_err != SVN_ERR_AUTHZ_INVALID_CONFIG)
+ return svn_error_createf(SVN_ERR_TEST_FAILED, err,
+ "Got %s error instead of expected "
+ "SVN_ERR_AUTHZ_INVALID_CONFIG",
+ err ? "unexpected" : "no");
+ svn_error_clear(err);
+
+ err = authz_groups_get_handle(&authz_cfg, authz_contents,
+ groups_contents, FALSE, pool);
+
+ if (!err || err->apr_err != SVN_ERR_AUTHZ_INVALID_CONFIG)
+ return svn_error_createf(SVN_ERR_TEST_FAILED, err,
+ "Got %s error instead of expected "
+ "SVN_ERR_AUTHZ_INVALID_CONFIG",
+ err ? "unexpected" : "no");
+ svn_error_clear(err);
+
+ /* Ensure that group cycles are reported. */
+ groups_contents =
+ "[groups]" NL
+ "slaves = cooks,scribes,@gladiators" NL
+ "gladiators = equites,thraces,@slaves" NL
+ "" NL;
+
+ authz_contents =
+ "[greek:/A]" NL
+ "@slaves = r" NL
+ "" NL;
+
+ err = authz_groups_get_handle(&authz_cfg, authz_contents,
+ groups_contents, TRUE, pool);
+
+ if (!err || err->apr_err != SVN_ERR_AUTHZ_INVALID_CONFIG)
+ return svn_error_createf(SVN_ERR_TEST_FAILED, err,
+ "Got %s error instead of expected "
+ "SVN_ERR_AUTHZ_INVALID_CONFIG",
+ err ? "unexpected" : "no");
+ svn_error_clear(err);
+
+ err = authz_groups_get_handle(&authz_cfg, authz_contents,
+ groups_contents, FALSE, pool);
+
+ if (!err || err->apr_err != SVN_ERR_AUTHZ_INVALID_CONFIG)
+ return svn_error_createf(SVN_ERR_TEST_FAILED, err,
+ "Got %s error instead of expected "
+ "SVN_ERR_AUTHZ_INVALID_CONFIG",
+ err ? "unexpected" : "no");
+ svn_error_clear(err);
+ return SVN_NO_ERROR;
+}
/* Callback for the commit editor tests that relays requests to
authz. */
@@ -1340,6 +1917,149 @@ commit_authz_cb(svn_repos_authz_access_t required,
+enum action_t {
+ A_DELETE,
+ A_ADD_FILE,
+ A_ADD_DIR,
+ A_CHANGE_FILE_PROP
+};
+struct authz_path_action_t
+{
+ enum action_t action;
+ const char *path;
+ svn_boolean_t authz_error_expected;
+ const char *copyfrom_path;
+};
+
+/* Return the appropriate dir baton for the parent of PATH in *DIR_BATON,
+ allocated in POOL. */
+static svn_error_t *
+get_dir_baton(void **dir_baton,
+ const char *path,
+ const svn_delta_editor_t *editor,
+ void *root_baton,
+ apr_pool_t *pool)
+{
+ int i;
+ apr_array_header_t *path_bits = svn_path_decompose(path, pool);
+ const char *path_so_far = "";
+
+ *dir_baton = root_baton;
+ for (i = 0; i < (path_bits->nelts - 1); i++)
+ {
+ const char *path_bit = APR_ARRAY_IDX(path_bits, i, const char *);
+ path_so_far = svn_path_join(path_so_far, path_bit, pool);
+ SVN_ERR(editor->open_directory(path_so_far, *dir_baton,
+ SVN_INVALID_REVNUM, pool, dir_baton));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Return the appropriate file baton for PATH in *FILE_BATON, allocated in
+ POOL. */
+static svn_error_t *
+get_file_baton(void **file_baton,
+ const char *path,
+ const svn_delta_editor_t *editor,
+ void *root_baton,
+ apr_pool_t *pool)
+{
+ void *dir_baton;
+
+ SVN_ERR(get_dir_baton(&dir_baton, path, editor, root_baton, pool));
+
+ SVN_ERR(editor->open_file(path, dir_baton, SVN_INVALID_REVNUM, pool,
+ file_baton));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_path_authz(svn_repos_t *repos,
+ struct authz_path_action_t *path_action,
+ svn_authz_t *authz_file,
+ svn_revnum_t youngest_rev,
+ apr_pool_t *scratch_pool)
+{
+ void *edit_baton;
+ void *root_baton;
+ void *dir_baton;
+ void *file_baton;
+ void *out_baton;
+ const svn_delta_editor_t *editor;
+ svn_error_t *err;
+ svn_error_t *err2;
+
+ /* Create a new commit editor in which we're going to play with
+ authz */
+ SVN_ERR(svn_repos_get_commit_editor4(&editor, &edit_baton, repos,
+ NULL, "file://test", "/",
+ "plato", "test commit", NULL,
+ NULL, commit_authz_cb, authz_file,
+ scratch_pool));
+
+ /* Start fiddling. First get the root, which is readonly. */
+ SVN_ERR(editor->open_root(edit_baton, 1, scratch_pool, &root_baton));
+
+ /* Fetch the appropriate baton for our action. This may involve opening
+ intermediate batons, but we only care about the final one for the
+ cooresponding action. */
+ if (path_action->action == A_CHANGE_FILE_PROP)
+ SVN_ERR(get_file_baton(&file_baton, path_action->path, editor, root_baton,
+ scratch_pool));
+ else
+ SVN_ERR(get_dir_baton(&dir_baton, path_action->path, editor, root_baton,
+ scratch_pool));
+
+ /* Test the appropriate action. */
+ switch (path_action->action)
+ {
+ case A_DELETE:
+ err = editor->delete_entry(path_action->path, SVN_INVALID_REVNUM,
+ dir_baton, scratch_pool);
+ break;
+
+ case A_CHANGE_FILE_PROP:
+ err = editor->change_file_prop(file_baton, "svn:test",
+ svn_string_create("test", scratch_pool),
+ scratch_pool);
+ break;
+
+ case A_ADD_FILE:
+ err = editor->add_file(path_action->path, dir_baton,
+ path_action->copyfrom_path, youngest_rev,
+ scratch_pool, &out_baton);
+ break;
+
+ case A_ADD_DIR:
+ err = editor->add_directory(path_action->path, dir_baton,
+ path_action->copyfrom_path, youngest_rev,
+ scratch_pool, &out_baton);
+ break;
+
+ default:
+ SVN_TEST_ASSERT(FALSE);
+ }
+
+ /* Don't worry about closing batons, just abort the edit. Since errors
+ may be delayed, we need to capture results of the abort as well. */
+ err2 = editor->abort_edit(edit_baton, scratch_pool);
+ if (!err)
+ err = err2;
+ else
+ svn_error_clear(err2);
+
+ /* Check for potential errors. */
+ if (path_action->authz_error_expected)
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_AUTHZ_UNWRITABLE);
+ else
+ SVN_ERR(err);
+
+ return SVN_NO_ERROR;
+}
+
+
/* Test that the commit editor is taking authz into account
properly */
static svn_error_t *
@@ -1351,13 +2071,26 @@ commit_editor_authz(const svn_test_opts_t *opts,
svn_fs_txn_t *txn;
svn_fs_root_t *txn_root;
svn_revnum_t youngest_rev;
- void *edit_baton;
- void *root_baton, *dir_baton, *dir2_baton, *file_baton;
- svn_error_t *err;
- const svn_delta_editor_t *editor;
svn_authz_t *authz_file;
- apr_pool_t *subpool = svn_pool_create(pool);
+ apr_pool_t *iterpool;
const char *authz_contents;
+ int i;
+ struct authz_path_action_t path_actions[] = {
+ { A_DELETE, "/iota", TRUE },
+ { A_CHANGE_FILE_PROP, "/iota", TRUE },
+ { A_ADD_FILE, "/alpha", TRUE },
+ { A_ADD_FILE, "/alpha", TRUE, "file://test/A/B/lambda" },
+ { A_ADD_DIR, "/I", TRUE },
+ { A_ADD_DIR, "/J", TRUE, "file://test/A/D" },
+ { A_ADD_FILE, "/A/alpha", TRUE },
+ { A_ADD_FILE, "/A/B/theta", FALSE },
+ { A_DELETE, "/A/mu", FALSE },
+ { A_ADD_DIR, "/A/E", FALSE },
+ { A_ADD_DIR, "/A/J", FALSE, "file://test/A/D" },
+ { A_DELETE, "A/D/G", TRUE },
+ { A_DELETE, "A/D/H", FALSE },
+ { A_CHANGE_FILE_PROP, "A/D/gamma", FALSE }
+ };
/* The Test Plan
*
@@ -1367,25 +2100,24 @@ commit_editor_authz(const svn_test_opts_t *opts,
* authorized/denied when necessary. We don't try to be exhaustive
* in the kinds of authz lookups. We just make sure that the editor
* replies to the calls in a way that proves it is doing authz
- * lookups.
+ * lookups. Some actions are tested implicitly (such as open_file being
+ * required for change_file_props).
*
- * Note that this use of the commit editor is not kosher according
- * to the generic editor API (we aren't allowed to continue editing
- * after an error, nor are we allowed to assume that errors are
- * returned by the operations which caused them). But it should
- * work fine with this particular editor implementation.
+ * Note that because of the error handling requirements of the generic
+ * editor API, each operation needs its own editor, which is handled by
+ * a helper function above.
*/
/* Create a filesystem and repository. */
SVN_ERR(svn_test__create_repos(&repos, "test-repo-commit-authz",
- opts, subpool));
+ opts, pool));
fs = svn_repos_fs(repos);
/* Prepare a txn to receive the greek tree. */
- SVN_ERR(svn_fs_begin_txn(&txn, fs, 0, subpool));
- SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
- SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
- SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+ SVN_ERR(svn_fs_begin_txn(&txn, fs, 0, pool));
+ SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+ SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
+ SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
/* Load the authz rules for the greek tree. */
@@ -1411,147 +2143,18 @@ commit_editor_authz(const svn_test_opts_t *opts,
"[/A/D/G]" NL
"plato = r"; /* No newline at end of file. */
- SVN_ERR(authz_get_handle(&authz_file, authz_contents, subpool));
-
- /* Create a new commit editor in which we're going to play with
- authz */
- SVN_ERR(svn_repos_get_commit_editor4(&editor, &edit_baton, repos,
- NULL, "file://test", "/",
- "plato", "test commit", NULL,
- NULL, commit_authz_cb, authz_file,
- subpool));
-
- /* Start fiddling. First get the root, which is readonly. All
- write operations fail because of the root's permissions. */
- SVN_ERR(editor->open_root(edit_baton, 1, subpool, &root_baton));
-
- /* Test denied file deletion. */
- err = editor->delete_entry("/iota", SVN_INVALID_REVNUM, root_baton, subpool);
- if (err == SVN_NO_ERROR || err->apr_err != SVN_ERR_AUTHZ_UNWRITABLE)
- return svn_error_createf(SVN_ERR_TEST_FAILED, err,
- "Got %s error instead of expected "
- "SVN_ERR_AUTHZ_UNWRITABLE",
- err ? "unexpected" : "no");
- svn_error_clear(err);
-
- /* Test authorized file open. */
- SVN_ERR(editor->open_file("/iota", root_baton, SVN_INVALID_REVNUM,
- subpool, &file_baton));
-
- /* Test unauthorized file prop set. */
- err = editor->change_file_prop(file_baton, "svn:test",
- svn_string_create("test", subpool),
- subpool);
- if (err == SVN_NO_ERROR || err->apr_err != SVN_ERR_AUTHZ_UNWRITABLE)
- return svn_error_createf(SVN_ERR_TEST_FAILED, err,
- "Got %s error instead of expected "
- "SVN_ERR_AUTHZ_UNWRITABLE",
- err ? "unexpected" : "no");
- svn_error_clear(err);
-
- /* Test denied file addition. */
- err = editor->add_file("/alpha", root_baton, NULL, SVN_INVALID_REVNUM,
- subpool, &file_baton);
- if (err == SVN_NO_ERROR || err->apr_err != SVN_ERR_AUTHZ_UNWRITABLE)
- return svn_error_createf(SVN_ERR_TEST_FAILED, err,
- "Got %s error instead of expected "
- "SVN_ERR_AUTHZ_UNWRITABLE",
- err ? "unexpected" : "no");
- svn_error_clear(err);
-
- /* Test denied file copy. */
- err = editor->add_file("/alpha", root_baton, "file://test/A/B/lambda",
- youngest_rev, subpool, &file_baton);
- if (err == SVN_NO_ERROR || err->apr_err != SVN_ERR_AUTHZ_UNWRITABLE)
- return svn_error_createf(SVN_ERR_TEST_FAILED, err,
- "Got %s error instead of expected "
- "SVN_ERR_AUTHZ_UNWRITABLE",
- err ? "unexpected" : "no");
- svn_error_clear(err);
-
- /* Test denied directory addition. */
- err = editor->add_directory("/I", root_baton, NULL,
- SVN_INVALID_REVNUM, subpool, &dir_baton);
- if (err == SVN_NO_ERROR || err->apr_err != SVN_ERR_AUTHZ_UNWRITABLE)
- return svn_error_createf(SVN_ERR_TEST_FAILED, err,
- "Got %s error instead of expected "
- "SVN_ERR_AUTHZ_UNWRITABLE",
- err ? "unexpected" : "no");
- svn_error_clear(err);
+ SVN_ERR(authz_get_handle(&authz_file, authz_contents, FALSE, pool));
- /* Test denied directory copy. */
- err = editor->add_directory("/J", root_baton, "file://test/A/D",
- youngest_rev, subpool, &dir_baton);
- if (err == SVN_NO_ERROR || err->apr_err != SVN_ERR_AUTHZ_UNWRITABLE)
- return svn_error_createf(SVN_ERR_TEST_FAILED, err,
- "Got %s error instead of expected "
- "SVN_ERR_AUTHZ_UNWRITABLE",
- err ? "unexpected" : "no");
- svn_error_clear(err);
-
- /* Open directory /A, to which we have read/write access. */
- SVN_ERR(editor->open_directory("/A", root_baton,
- SVN_INVALID_REVNUM,
- subpool, &dir_baton));
-
- /* Test denied file addition. Denied because of a conflicting rule
- on the file path itself. */
- err = editor->add_file("/A/alpha", dir_baton, NULL,
- SVN_INVALID_REVNUM, subpool, &file_baton);
- if (err == SVN_NO_ERROR || err->apr_err != SVN_ERR_AUTHZ_UNWRITABLE)
- return svn_error_createf(SVN_ERR_TEST_FAILED, err,
- "Got %s error instead of expected "
- "SVN_ERR_AUTHZ_UNWRITABLE",
- err ? "unexpected" : "no");
- svn_error_clear(err);
-
- /* Test authorized file addition. */
- SVN_ERR(editor->add_file("/A/B/theta", dir_baton, NULL,
- SVN_INVALID_REVNUM, subpool,
- &file_baton));
-
- /* Test authorized file deletion. */
- SVN_ERR(editor->delete_entry("/A/mu", SVN_INVALID_REVNUM, dir_baton,
- subpool));
-
- /* Test authorized directory creation. */
- SVN_ERR(editor->add_directory("/A/E", dir_baton, NULL,
- SVN_INVALID_REVNUM, subpool,
- &dir2_baton));
-
- /* Test authorized copy of a tree. */
- SVN_ERR(editor->add_directory("/A/J", dir_baton, "file://test/A/D",
- youngest_rev, subpool,
- &dir2_baton));
-
- /* Open /A/D. This should be granted. */
- SVN_ERR(editor->open_directory("/A/D", dir_baton, SVN_INVALID_REVNUM,
- subpool, &dir_baton));
-
- /* Test denied recursive deletion. */
- err = editor->delete_entry("/A/D/G", SVN_INVALID_REVNUM, dir_baton,
- subpool);
- if (err == SVN_NO_ERROR || err->apr_err != SVN_ERR_AUTHZ_UNWRITABLE)
- return svn_error_createf(SVN_ERR_TEST_FAILED, err,
- "Got %s error instead of expected "
- "SVN_ERR_AUTHZ_UNWRITABLE",
- err ? "unexpected" : "no");
- svn_error_clear(err);
-
- /* Test authorized recursive deletion. */
- SVN_ERR(editor->delete_entry("/A/D/H", SVN_INVALID_REVNUM,
- dir_baton, subpool));
-
- /* Test authorized propset (open the file first). */
- SVN_ERR(editor->open_file("/A/D/gamma", dir_baton, SVN_INVALID_REVNUM,
- subpool, &file_baton));
- SVN_ERR(editor->change_file_prop(file_baton, "svn:test",
- svn_string_create("test", subpool),
- subpool));
+ iterpool = svn_pool_create(pool);
+ for (i = 0; i < (sizeof(path_actions) / sizeof(struct authz_path_action_t));
+ i++)
+ {
+ svn_pool_clear(iterpool);
+ SVN_ERR(test_path_authz(repos, &path_actions[i], authz_file,
+ youngest_rev, iterpool));
+ }
- /* Done. */
- SVN_ERR(editor->abort_edit(edit_baton, subpool));
- svn_pool_destroy(subpool);
+ svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
@@ -1675,15 +2278,17 @@ commit_continue_txn(const svn_test_opts_t *opts,
}
+
+/* A baton for check_location_segments(). */
struct nls_receiver_baton
{
int count;
- svn_location_segment_t *expected_segments;
+ const svn_location_segment_t *expected_segments;
};
-
+/* Return a pretty-printed string representing SEGMENT. */
static const char *
-format_segment(svn_location_segment_t *segment,
+format_segment(const svn_location_segment_t *segment,
apr_pool_t *pool)
{
return apr_psprintf(pool, "[r%ld-r%ld: /%s]",
@@ -1692,14 +2297,15 @@ format_segment(svn_location_segment_t *segment,
segment->path ? segment->path : "(null)");
}
-
+/* A location segment receiver for check_location_segments().
+ * Implements svn_location_segment_receiver_t. */
static svn_error_t *
nls_receiver(svn_location_segment_t *segment,
void *baton,
apr_pool_t *pool)
{
struct nls_receiver_baton *b = baton;
- svn_location_segment_t *expected_segment = b->expected_segments + b->count;
+ const svn_location_segment_t *expected_segment = b->expected_segments + b->count;
/* expected_segments->range_end can't be 0, so if we see that, it's
our end-of-the-list sentry. */
@@ -1708,7 +2314,9 @@ nls_receiver(svn_location_segment_t *segment,
"Got unexpected location segment: %s",
format_segment(segment, pool));
- if (expected_segment->range_start != segment->range_start)
+ if (expected_segment->range_start != segment->range_start
+ || expected_segment->range_end != segment->range_end
+ || strcmp_null(expected_segment->path, segment->path) != 0)
return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
"Location segments differ\n"
" Expected location segment: %s\n"
@@ -1719,18 +2327,22 @@ nls_receiver(svn_location_segment_t *segment,
return SVN_NO_ERROR;
}
-
+/* Run a svn_repos_node_location_segments() query with REPOS, PATH, PEG_REV,
+ * START_REV, END_REV. Check that the result exactly matches the list of
+ * segments EXPECTED_SEGMENTS, which is terminated by an entry with
+ * 'range_end'==0.
+ */
static svn_error_t *
check_location_segments(svn_repos_t *repos,
const char *path,
svn_revnum_t peg_rev,
svn_revnum_t start_rev,
svn_revnum_t end_rev,
- svn_location_segment_t *expected_segments,
+ const svn_location_segment_t *expected_segments,
apr_pool_t *pool)
{
struct nls_receiver_baton b;
- svn_location_segment_t *segment;
+ const svn_location_segment_t *segment;
/* Run svn_repos_node_location_segments() with a receiver that
validates against EXPECTED_SEGMENTS. */
@@ -1752,6 +2364,21 @@ check_location_segments(svn_repos_t *repos,
return SVN_NO_ERROR;
}
+/* Inputs and expected outputs for svn_repos_node_location_segments() tests.
+ */
+typedef struct location_segment_test_t
+{
+ /* Path and peg revision to query */
+ const char *path;
+ svn_revnum_t peg;
+ /* Start (youngest) and end (oldest) revisions to query */
+ svn_revnum_t start;
+ svn_revnum_t end;
+
+ /* Expected segments */
+ svn_location_segment_t segments[10];
+
+} location_segment_test_t;
static svn_error_t *
node_location_segments(const svn_test_opts_t *opts,
@@ -1764,6 +2391,72 @@ node_location_segments(const svn_test_opts_t *opts,
svn_fs_root_t *txn_root, *root;
svn_revnum_t youngest_rev = 0;
+ static const location_segment_test_t subtests[] =
+ {
+ { /* Check locations for /@HEAD. */
+ "", SVN_INVALID_REVNUM, SVN_INVALID_REVNUM, SVN_INVALID_REVNUM,
+ {
+ { 0, 7, "" },
+ { 0 }
+ }
+ },
+ { /* Check locations for A/D@HEAD. */
+ "A/D", SVN_INVALID_REVNUM, SVN_INVALID_REVNUM, SVN_INVALID_REVNUM,
+ {
+ { 7, 7, "A/D" },
+ { 3, 6, "A/D2" },
+ { 1, 2, "A/D" },
+ { 0 }
+ }
+ },
+ { /* Check a subset of the locations for A/D@HEAD. */
+ "A/D", SVN_INVALID_REVNUM, 5, 2,
+ {
+ { 3, 5, "A/D2" },
+ { 2, 2, "A/D" },
+ { 0 }
+ },
+ },
+ { /* Check a subset of locations for A/D2@5. */
+ "A/D2", 5, 3, 2,
+ {
+ { 3, 3, "A/D2" },
+ { 2, 2, "A/D" },
+ { 0 }
+ },
+ },
+ { /* Check locations for A/D@6. */
+ "A/D", 6, 6, SVN_INVALID_REVNUM,
+ {
+ { 1, 6, "A/D" },
+ { 0 }
+ },
+ },
+ { /* Check locations for A/D/G@HEAD. */
+ "A/D/G", SVN_INVALID_REVNUM, SVN_INVALID_REVNUM, SVN_INVALID_REVNUM,
+ {
+ { 7, 7, "A/D/G" },
+ { 6, 6, "A/D2/G" },
+ { 5, 5, NULL },
+ { 3, 4, "A/D2/G" },
+ { 1, 2, "A/D/G" },
+ { 0 }
+ },
+ },
+ { /* Check a subset of the locations for A/D/G@HEAD. */
+ "A/D/G", SVN_INVALID_REVNUM, 3, 2,
+ {
+ { 3, 3, "A/D2/G" },
+ { 2, 2, "A/D/G" },
+ { 0 }
+ },
+ },
+ {
+ NULL
+ },
+ };
+ const location_segment_test_t *subtest;
+
/* Bail (with success) on known-untestable scenarios */
if ((strcmp(opts->fs_type, "bdb") == 0)
&& (opts->server_minor_version == 4))
@@ -1837,117 +2530,19 @@ node_location_segments(const svn_test_opts_t *opts,
SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
svn_pool_clear(subpool);
- /* Check locations for /@HEAD. */
- {
- svn_location_segment_t expected_segments[] =
- {
- { 0, 7, "" },
- { 0 }
- };
- SVN_ERR(check_location_segments(repos, "",
- SVN_INVALID_REVNUM,
- SVN_INVALID_REVNUM,
- SVN_INVALID_REVNUM,
- expected_segments, pool));
- }
-
- /* Check locations for A/D@HEAD. */
- {
- svn_location_segment_t expected_segments[] =
- {
- { 7, 7, "A/D" },
- { 3, 6, "A/D2" },
- { 1, 2, "A/D" },
- { 0 }
- };
- SVN_ERR(check_location_segments(repos, "A/D",
- SVN_INVALID_REVNUM,
- SVN_INVALID_REVNUM,
- SVN_INVALID_REVNUM,
- expected_segments, pool));
- }
-
- /* Check a subset of the locations for A/D@HEAD. */
- {
- svn_location_segment_t expected_segments[] =
- {
- { 3, 5, "A/D2" },
- { 2, 2, "A/D" },
- { 0 }
- };
- SVN_ERR(check_location_segments(repos, "A/D",
- SVN_INVALID_REVNUM,
- 5,
- 2,
- expected_segments, pool));
- }
-
- /* Check a subset of locations for A/D2@5. */
- {
- svn_location_segment_t expected_segments[] =
- {
- { 3, 3, "A/D2" },
- { 2, 2, "A/D" },
- { 0 }
- };
- SVN_ERR(check_location_segments(repos, "A/D2",
- 5,
- 3,
- 2,
- expected_segments, pool));
- }
-
- /* Check locations for A/D@6. */
- {
- svn_location_segment_t expected_segments[] =
- {
- { 1, 6, "A/D" },
- { 0 }
- };
- SVN_ERR(check_location_segments(repos, "A/D",
- 6,
- 6,
- SVN_INVALID_REVNUM,
- expected_segments, pool));
- }
-
- /* Check locations for A/D/G@HEAD. */
- {
- svn_location_segment_t expected_segments[] =
- {
- { 7, 7, "A/D/G" },
- { 6, 6, "A/D2/G" },
- { 5, 5, NULL },
- { 3, 4, "A/D2/G" },
- { 1, 2, "A/D2/G" },
- { 0 }
- };
- SVN_ERR(check_location_segments(repos, "A/D/G",
- SVN_INVALID_REVNUM,
- SVN_INVALID_REVNUM,
- SVN_INVALID_REVNUM,
- expected_segments, pool));
- }
-
- /* Check a subset of the locations for A/D/G@HEAD. */
- {
- svn_location_segment_t expected_segments[] =
- {
- { 3, 3, "A/D2/G" },
- { 2, 2, "A/D2/G" },
- { 0 }
- };
- SVN_ERR(check_location_segments(repos, "A/D/G",
- SVN_INVALID_REVNUM,
- 3,
- 2,
- expected_segments, pool));
- }
+ /* */
+ for (subtest = subtests; subtest->path; subtest++)
+ {
+ SVN_ERR(check_location_segments(repos, subtest->path, subtest->peg,
+ subtest->start, subtest->end,
+ subtest->segments, pool));
+ }
return SVN_NO_ERROR;
}
+
/* Test that the reporter doesn't send deltas under excluded paths. */
static svn_error_t *
reporter_depth_exclude(const svn_test_opts_t *opts,
@@ -2035,9 +2630,10 @@ reporter_depth_exclude(const svn_test_opts_t *opts,
SVN_ERR(dir_delta_get_editor(&editor, &edit_baton, fs,
txn_root, "", subpool));
- SVN_ERR(svn_repos_begin_report2(&report_baton, 2, repos, "/", "", NULL,
+ SVN_ERR(svn_repos_begin_report3(&report_baton, 2, repos, "/", "", NULL,
TRUE, svn_depth_infinity, FALSE, FALSE,
- editor, edit_baton, NULL, NULL, subpool));
+ editor, edit_baton, NULL, NULL, 0,
+ subpool));
SVN_ERR(svn_repos_set_path3(report_baton, "", 1,
svn_depth_infinity,
FALSE, NULL, subpool));
@@ -2092,9 +2688,10 @@ reporter_depth_exclude(const svn_test_opts_t *opts,
SVN_ERR(dir_delta_get_editor(&editor, &edit_baton, fs,
txn_root, "", subpool));
- SVN_ERR(svn_repos_begin_report2(&report_baton, 2, repos, "/", "", NULL,
+ SVN_ERR(svn_repos_begin_report3(&report_baton, 2, repos, "/", "", NULL,
TRUE, svn_depth_infinity, FALSE, FALSE,
- editor, edit_baton, NULL, NULL, subpool));
+ editor, edit_baton, NULL, NULL, 0,
+ subpool));
SVN_ERR(svn_repos_set_path3(report_baton, "", 1,
svn_depth_infinity,
FALSE, NULL, subpool));
@@ -2226,7 +2823,7 @@ prop_validation(const svn_test_opts_t *opts,
{
svn_error_t *err;
svn_repos_t *repos;
- const char non_utf8_string[5] = { 'a', 0xff, 'b', '\n', 0 };
+ const char non_utf8_string[5] = { 'a', '\xff', 'b', '\n', 0 };
const char *non_lf_string = "a\r\nb\n\rc\rd\n";
apr_pool_t *subpool = svn_pool_create(pool);
@@ -2447,6 +3044,7 @@ test_get_file_revs(const svn_test_opts_t *opts,
};
apr_hash_t *ht_trunk_results = apr_hash_make(subpool);
apr_hash_t *ht_branch_results = apr_hash_make(subpool);
+ apr_hash_t *ht_reverse_results = apr_hash_make(subpool);
for (i = 0; i < sizeof(trunk_results) / sizeof(trunk_results[0]); i++)
apr_hash_set(ht_trunk_results, &trunk_results[i].rev,
@@ -2456,6 +3054,11 @@ test_get_file_revs(const svn_test_opts_t *opts,
apr_hash_set(ht_branch_results, &branch_results[i].rev,
sizeof(svn_revnum_t), &branch_results[i]);
+ for (i = 0; i < sizeof(trunk_results) / sizeof(trunk_results[0]); i++)
+ if (!trunk_results[i].result_of_merge)
+ apr_hash_set(ht_reverse_results, &trunk_results[i].rev,
+ sizeof(svn_revnum_t), &trunk_results[i]);
+
/* Create the repository and verify blame results. */
SVN_ERR(svn_test__create_blame_repository(&repos, "test-repo-get-filerevs",
opts, subpool));
@@ -2465,7 +3068,7 @@ test_get_file_revs(const svn_test_opts_t *opts,
/* Verify blame of /trunk/A/mu */
SVN_ERR(svn_repos_get_file_revs2(repos, "/trunk/A/mu", 0, youngest_rev,
- 1, NULL, NULL,
+ TRUE, NULL, NULL,
file_rev_handler,
ht_trunk_results,
subpool));
@@ -2474,7 +3077,7 @@ test_get_file_revs(const svn_test_opts_t *opts,
/* Verify blame of /branches/1.0.x/A/mu */
SVN_ERR(svn_repos_get_file_revs2(repos, "/branches/1.0.x/A/mu", 0,
youngest_rev,
- 1, NULL, NULL,
+ TRUE, NULL, NULL,
file_rev_handler,
ht_branch_results,
subpool));
@@ -2482,6 +3085,13 @@ test_get_file_revs(const svn_test_opts_t *opts,
/* ### TODO: Verify blame of /branches/1.0.x/A/mu in range 6-7 */
+ SVN_ERR(svn_repos_get_file_revs2(repos, "/trunk/A/mu", youngest_rev, 0,
+ FALSE, NULL, NULL,
+ file_rev_handler,
+ ht_reverse_results,
+ subpool));
+ SVN_TEST_ASSERT(apr_hash_count(ht_reverse_results) == 0);
+
svn_pool_destroy(subpool);
return SVN_NO_ERROR;
@@ -2501,7 +3111,7 @@ issue_4060(const svn_test_opts_t *opts,
"ozymandias = r" NL
"" NL;
- SVN_ERR(authz_get_handle(&authz_cfg, authz_contents, subpool));
+ SVN_ERR(authz_get_handle(&authz_cfg, authz_contents, FALSE, subpool));
SVN_ERR(svn_repos_authz_check_access(authz_cfg, "babylon",
"/A/B/C", "ozymandias",
@@ -2526,7 +3136,394 @@ issue_4060(const svn_test_opts_t *opts,
return SVN_NO_ERROR;
}
+/* Test svn_repos_delete(). */
+static svn_error_t *
+test_delete_repos(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ const char *path;
+ svn_node_kind_t kind;
+
+ /* We have to use a subpool to close the svn_repos_t before calling
+ svn_repos_delete. */
+ {
+ svn_repos_t *repos;
+ apr_pool_t *subpool = svn_pool_create(pool);
+ SVN_ERR(svn_test__create_repos(&repos, "test-repo-delete-repos", opts,
+ subpool));
+ path = svn_repos_path(repos, pool);
+ svn_pool_destroy(subpool);
+ }
+
+ SVN_ERR(svn_io_check_path(path, &kind, pool));
+ SVN_TEST_ASSERT(kind != svn_node_none);
+ SVN_ERR(svn_repos_delete(path, pool));
+ SVN_ERR(svn_io_check_path(path, &kind, pool));
+ SVN_TEST_ASSERT(kind == svn_node_none);
+
+ /* Recreate dir so that test cleanup doesn't fail. */
+ SVN_ERR(svn_io_dir_make(path, APR_OS_DEFAULT, pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* Related to issue 4340, "fs layer should reject filenames with trailing \n" */
+static svn_error_t *
+filename_with_control_chars(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ apr_pool_t *subpool = svn_pool_create(pool);
+ svn_repos_t *repos;
+ svn_fs_t *fs;
+ svn_fs_txn_t *txn;
+ svn_fs_root_t *txn_root;
+ svn_revnum_t youngest_rev = 0;
+ svn_error_t *err;
+ static const char *bad_paths[] = {
+ "/bar\t",
+ "/bar\n",
+ "/\barb\az",
+ "/\x02 baz",
+ NULL,
+ };
+ const char *p;
+ int i;
+ void *edit_baton;
+ void *root_baton;
+ void *out_baton;
+ const svn_delta_editor_t *editor;
+
+ /* Create the repository. */
+ SVN_ERR(svn_test__create_repos(&repos, "test-repo-filename-with-cntrl-chars",
+ opts, pool));
+ fs = svn_repos_fs(repos);
+
+ /* Revision 1: Add a directory /foo */
+ SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
+ SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
+ SVN_ERR(svn_fs_make_dir(txn_root, "/foo", subpool));
+ SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
+ svn_pool_clear(subpool);
+
+ /* Checks for control characters are implemented in the commit editor,
+ * not in the FS API. */
+ SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, pool));
+ SVN_ERR(svn_repos_get_commit_editor4(&editor, &edit_baton, repos,
+ txn, "file://test", "/",
+ "plato", "test commit",
+ dummy_commit_cb, NULL, NULL, NULL,
+ pool));
+
+ SVN_ERR(editor->open_root(edit_baton, 1, pool, &root_baton));
+
+ /* Attempt to copy /foo to a bad path P. This should fail. */
+ i = 0;
+ do
+ {
+ p = bad_paths[i++];
+ if (p == NULL)
+ break;
+ svn_pool_clear(subpool);
+ err = editor->add_directory(p, root_baton, "/foo", 1, subpool,
+ &out_baton);
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_FS_PATH_SYNTAX);
+ } while (p);
+
+ /* Attempt to add a file with bad path P. This should fail. */
+ i = 0;
+ do
+ {
+ p = bad_paths[i++];
+ if (p == NULL)
+ break;
+ svn_pool_clear(subpool);
+ err = editor->add_file(p, root_baton, NULL, SVN_INVALID_REVNUM,
+ subpool, &out_baton);
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_FS_PATH_SYNTAX);
+ } while (p);
+
+
+ /* Attempt to add a directory with bad path P. This should fail. */
+ i = 0;
+ do
+ {
+ p = bad_paths[i++];
+ if (p == NULL)
+ break;
+ svn_pool_clear(subpool);
+ err = editor->add_directory(p, root_baton, NULL, SVN_INVALID_REVNUM,
+ subpool, &out_baton);
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_FS_PATH_SYNTAX);
+ } while (p);
+
+ SVN_ERR(editor->abort_edit(edit_baton, subpool));
+
+ return SVN_NO_ERROR;
+}
+
+/* Notification receiver for test_dump_bad_mergeinfo(). This does not
+ need to do anything, it just needs to exist.
+ */
+static void
+dump_r0_mergeinfo_notifier(void *baton,
+ const svn_repos_notify_t *notify,
+ apr_pool_t *scratch_pool)
+{
+}
+
+/* Regression test for part the 'dump' part of issue #4476 "Mergeinfo
+ containing r0 makes svnsync and svnadmin dump fail". */
+static svn_error_t *
+test_dump_r0_mergeinfo(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ svn_repos_t *repos;
+ svn_fs_t *fs;
+ svn_fs_txn_t *txn;
+ svn_fs_root_t *txn_root;
+ svn_revnum_t youngest_rev = 0;
+ const svn_string_t *bad_mergeinfo = svn_string_create("/foo:0", pool);
+
+ SVN_ERR(svn_test__create_repos(&repos, "test-repo-dump-r0-mergeinfo",
+ opts, pool));
+ fs = svn_repos_fs(repos);
+
+ /* Revision 1: Any commit will do, here */
+ SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, pool));
+ SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+ SVN_ERR(svn_fs_make_dir(txn_root, "/bar", pool));
+ SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
+
+ /* Revision 2: Add bad mergeinfo */
+ SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, pool));
+ SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+ SVN_ERR(svn_fs_change_node_prop(txn_root, "/bar", "svn:mergeinfo", bad_mergeinfo, pool));
+ SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
+
+ /* Test that a dump completes without error. In order to exercise the
+ functionality under test -- that is, in order for the dump to try to
+ parse the mergeinfo it is dumping -- the dump must start from a
+ revision greater than 1 and must take a notification callback. */
+ {
+ svn_stringbuf_t *stringbuf = svn_stringbuf_create_empty(pool);
+ svn_stream_t *stream = svn_stream_from_stringbuf(stringbuf, pool);
+
+ SVN_ERR(svn_repos_dump_fs3(repos, stream, 2, SVN_INVALID_REVNUM,
+ FALSE, FALSE,
+ dump_r0_mergeinfo_notifier, NULL,
+ NULL, NULL,
+ pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
+/* Test dumping in the presence of the property PROP_NAME:PROP_VAL.
+ * Return the dumped data in *DUMP_DATA_P (if DUMP_DATA_P is not null).
+ * REPOS is an empty repository.
+ * See svn_repos_dump_fs3() for START_REV, END_REV, NOTIFY_FUNC, NOTIFY_BATON.
+ */
+static svn_error_t *
+test_dump_bad_props(svn_stringbuf_t **dump_data_p,
+ svn_repos_t *repos,
+ const char *prop_name,
+ const svn_string_t *prop_val,
+ svn_revnum_t start_rev,
+ svn_revnum_t end_rev,
+ svn_repos_notify_func_t notify_func,
+ void *notify_baton,
+ apr_pool_t *pool)
+{
+ const char *test_path = "/bar";
+ svn_fs_t *fs = svn_repos_fs(repos);
+ svn_fs_txn_t *txn;
+ svn_fs_root_t *txn_root;
+ svn_revnum_t youngest_rev = 0;
+ svn_stringbuf_t *dump_data = svn_stringbuf_create_empty(pool);
+ svn_stream_t *stream = svn_stream_from_stringbuf(dump_data, pool);
+ const char *expected_str;
+
+ /* Revision 1: Any commit will do, here */
+ SVN_ERR(svn_fs_begin_txn2(&txn, fs, youngest_rev, 0, pool));
+ SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+ SVN_ERR(svn_fs_make_dir(txn_root, test_path , pool));
+ SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
+
+ /* Revision 2: Add the bad property */
+ SVN_ERR(svn_fs_begin_txn2(&txn, fs, youngest_rev, 0, pool));
+ SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+ SVN_ERR(svn_fs_change_node_prop(txn_root, test_path , prop_name, prop_val,
+ pool));
+ SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
+
+ /* Test that a dump completes without error. */
+ SVN_ERR(svn_repos_dump_fs3(repos, stream, start_rev, end_rev,
+ FALSE, FALSE,
+ notify_func, notify_baton,
+ NULL, NULL,
+ pool));
+ svn_stream_close(stream);
+
+ /* Check that the property appears in the dump data */
+ expected_str = apr_psprintf(pool, "K %d\n%s\n"
+ "V %d\n%s\n"
+ "PROPS-END\n",
+ (int)strlen(prop_name), prop_name,
+ (int)prop_val->len, prop_val->data);
+ SVN_TEST_ASSERT(strstr(dump_data->data, expected_str));
+
+ if (dump_data_p)
+ *dump_data_p = dump_data;
+ return SVN_NO_ERROR;
+}
+
+/* Test loading in the presence of the property PROP_NAME:PROP_VAL.
+ * Load data from DUMP_DATA.
+ * REPOS is an empty repository.
+ */
+static svn_error_t *
+test_load_bad_props(svn_stringbuf_t *dump_data,
+ svn_repos_t *repos,
+ const char *prop_name,
+ const svn_string_t *prop_val,
+ const char *parent_fspath,
+ svn_boolean_t validate_props,
+ svn_repos_notify_func_t notify_func,
+ void *notify_baton,
+ apr_pool_t *pool)
+{
+ const char *test_path = apr_psprintf(pool, "%s%s",
+ parent_fspath ? parent_fspath : "",
+ "/bar");
+ svn_stream_t *stream = svn_stream_from_stringbuf(dump_data, pool);
+ svn_fs_t *fs;
+ svn_fs_root_t *rev_root;
+ svn_revnum_t youngest_rev;
+ svn_string_t *loaded_prop_val;
+
+ SVN_ERR(svn_repos_load_fs4(repos, stream,
+ SVN_INVALID_REVNUM, SVN_INVALID_REVNUM,
+ svn_repos_load_uuid_default,
+ parent_fspath,
+ FALSE, FALSE, /*use_*_commit_hook*/
+ validate_props,
+ notify_func, notify_baton,
+ NULL, NULL, /*cancellation*/
+ pool));
+ svn_stream_close(stream);
+
+ /* Check the loaded property */
+ fs = svn_repos_fs(repos);
+ SVN_ERR(svn_fs_youngest_rev(&youngest_rev, fs, pool));
+ SVN_ERR(svn_fs_revision_root(&rev_root, fs, youngest_rev, pool));
+ SVN_ERR(svn_fs_node_prop(&loaded_prop_val,
+ rev_root, test_path, prop_name, pool));
+ SVN_TEST_ASSERT(svn_string_compare(loaded_prop_val, prop_val));
+ return SVN_NO_ERROR;
+}
+
+static void
+load_r0_mergeinfo_notifier(void *baton,
+ const svn_repos_notify_t *notify,
+ apr_pool_t *scratch_pool)
+{
+ svn_boolean_t *had_mergeinfo_warning = baton;
+
+ if (notify->action == svn_repos_notify_warning)
+ {
+ if (notify->warning == svn_repos__notify_warning_invalid_mergeinfo)
+ {
+ *had_mergeinfo_warning = TRUE;
+ }
+ }
+}
+
+/* Regression test for the 'load' part of issue #4476 "Mergeinfo
+ * containing r0 makes svnsync and svnadmin dump fail".
+ *
+ * Bad mergeinfo should not prevent loading a backup, at least when we do not
+ * require mergeinfo revision numbers or paths to be adjusted during loading.
+ */
+static svn_error_t *
+test_load_r0_mergeinfo(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ const char *prop_name = "svn:mergeinfo";
+ const svn_string_t *prop_val = svn_string_create("/foo:0", pool);
+ svn_stringbuf_t *dump_data = svn_stringbuf_create_empty(pool);
+
+ /* Produce a dump file containing bad mergeinfo */
+ {
+ svn_repos_t *repos;
+
+ SVN_ERR(svn_test__create_repos(&repos, "test-repo-load-r0-mi-1",
+ opts, pool));
+ SVN_ERR(test_dump_bad_props(&dump_data, repos,
+ prop_name, prop_val,
+ SVN_INVALID_REVNUM, SVN_INVALID_REVNUM,
+ NULL, NULL, pool));
+ }
+
+ /* Test loading without validating properties: should warn and succeed */
+ {
+ svn_repos_t *repos;
+ svn_boolean_t had_mergeinfo_warning = FALSE;
+
+ SVN_ERR(svn_test__create_repos(&repos, "test-repo-load-r0-mi-2",
+ opts, pool));
+
+ /* Without changing revision numbers or paths */
+ SVN_ERR(test_load_bad_props(dump_data, repos,
+ prop_name, prop_val,
+ NULL /*parent_dir*/, FALSE /*validate_props*/,
+ load_r0_mergeinfo_notifier, &had_mergeinfo_warning,
+ pool));
+ SVN_TEST_ASSERT(had_mergeinfo_warning);
+
+ /* With changing revision numbers and/or paths (by loading the same data
+ again, on top of existing revisions, into subdirectory 'bar') */
+ had_mergeinfo_warning = FALSE;
+ SVN_ERR(test_load_bad_props(dump_data, repos,
+ prop_name, prop_val,
+ "/bar", FALSE /*validate_props*/,
+ load_r0_mergeinfo_notifier, &had_mergeinfo_warning,
+ pool));
+ SVN_TEST_ASSERT(had_mergeinfo_warning);
+ }
+
+ /* Test loading with validating properties: should return an error */
+ {
+ svn_repos_t *repos;
+
+ SVN_ERR(svn_test__create_repos(&repos, "test-repo-load-r0-mi-3",
+ opts, pool));
+
+ /* Without changing revision numbers or paths */
+ SVN_TEST__ASSERT_ANY_ERROR(test_load_bad_props(dump_data, repos,
+ prop_name, prop_val,
+ NULL /*parent_dir*/, TRUE /*validate_props*/,
+ NULL, NULL,
+ pool));
+
+ /* With changing revision numbers and/or paths (by loading the same data
+ again, on top of existing revisions, into subdirectory 'bar') */
+ SVN_TEST__ASSERT_ANY_ERROR(test_load_bad_props(dump_data, repos,
+ prop_name, prop_val,
+ "/bar", TRUE /*validate_props*/,
+ NULL, NULL,
+ pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
/* The test table. */
struct svn_test_descriptor_t test_funcs[] =
@@ -2546,6 +3543,12 @@ struct svn_test_descriptor_t test_funcs[] =
"test removal of defunct locks"),
SVN_TEST_PASS2(authz,
"test authz access control"),
+ SVN_TEST_OPTS_PASS(in_repo_authz,
+ "test authz stored in the repo"),
+ SVN_TEST_OPTS_PASS(in_repo_groups_authz,
+ "test authz and global groups stored in the repo"),
+ SVN_TEST_OPTS_PASS(groups_authz,
+ "test authz with global groups"),
SVN_TEST_OPTS_PASS(commit_editor_authz,
"test authz in the commit editor"),
SVN_TEST_OPTS_PASS(commit_continue_txn,
@@ -2562,5 +3565,13 @@ struct svn_test_descriptor_t test_funcs[] =
"test svn_repos_get_file_revsN"),
SVN_TEST_OPTS_PASS(issue_4060,
"test issue 4060"),
+ SVN_TEST_OPTS_PASS(test_delete_repos,
+ "test svn_repos_delete"),
+ SVN_TEST_OPTS_PASS(filename_with_control_chars,
+ "test filenames with control characters"),
+ SVN_TEST_OPTS_PASS(test_dump_r0_mergeinfo,
+ "test dumping with r0 mergeinfo"),
+ SVN_TEST_OPTS_PASS(test_load_r0_mergeinfo,
+ "test loading with r0 mergeinfo"),
SVN_TEST_NULL
};
diff --git a/subversion/tests/libsvn_subr/auth-test.c b/subversion/tests/libsvn_subr/auth-test.c
index 6c3862d..9d7d866 100644
--- a/subversion/tests/libsvn_subr/auth-test.c
+++ b/subversion/tests/libsvn_subr/auth-test.c
@@ -22,9 +22,11 @@
*/
#include "svn_auth.h"
+#include "svn_dirent_uri.h"
#include "svn_private_config.h"
#include "../svn_test.h"
+#include "private/svn_auth_private.h"
static svn_error_t *
test_platform_specific_auth_providers(apr_pool_t *pool)
@@ -54,6 +56,9 @@ test_platform_specific_auth_providers(apr_pool_t *pool)
#ifdef SVN_HAVE_KWALLET
number_of_providers += 2;
#endif
+#ifdef SVN_HAVE_GPG_AGENT
+ number_of_providers += 1;
+#endif
#ifdef SVN_HAVE_KEYCHAIN_SERVICES
number_of_providers += 2;
#endif
@@ -140,8 +145,8 @@ test_platform_specific_auth_providers(apr_pool_t *pool)
/* Test GNOME Keyring auth providers */
#ifdef SVN_HAVE_GNOME_KEYRING
- svn_auth_get_platform_specific_provider(&provider, "gnome_keyring",
- "simple", pool);
+ SVN_ERR(svn_auth_get_platform_specific_provider(&provider, "gnome_keyring",
+ "simple", pool));
if (!provider)
return svn_error_createf
@@ -149,8 +154,8 @@ test_platform_specific_auth_providers(apr_pool_t *pool)
"svn_auth_get_platform_specific_provider('gnome_keyring', 'simple') "
"should not return NULL");
- svn_auth_get_platform_specific_provider(&provider, "gnome_keyring",
- "ssl_client_cert_pw", pool);
+ SVN_ERR(svn_auth_get_platform_specific_provider(&provider, "gnome_keyring",
+ "ssl_client_cert_pw", pool));
if (!provider)
return svn_error_createf
@@ -159,8 +164,8 @@ test_platform_specific_auth_providers(apr_pool_t *pool)
"'ssl_client_cert_pw') should not return NULL");
/* Make sure you do not get a Windows auth provider */
- svn_auth_get_platform_specific_provider(&provider, "windows",
- "simple", pool);
+ SVN_ERR(svn_auth_get_platform_specific_provider(&provider, "windows",
+ "simple", pool));
if (provider)
return svn_error_createf
@@ -203,6 +208,109 @@ test_platform_specific_auth_providers(apr_pool_t *pool)
return SVN_NO_ERROR;
}
+/* Helper for test_auth_clear(). Implements svn_config_auth_walk_func_t */
+static svn_error_t *
+cleanup_callback(svn_boolean_t *delete_cred,
+ void *walk_baton,
+ const char *cred_kind,
+ const char *realmstring,
+ apr_hash_t *cred_hash,
+ apr_pool_t *scratch_pool)
+{
+ svn_auth_baton_t *b = walk_baton;
+
+ SVN_TEST_ASSERT(strcmp(cred_kind, SVN_AUTH_CRED_SIMPLE) == 0);
+ SVN_TEST_ASSERT(strcmp(realmstring, "<http://my.host> My realm") == 0);
+
+ SVN_ERR(svn_auth_forget_credentials(b, cred_kind, realmstring, scratch_pool));
+
+ *delete_cred = TRUE;
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_auth_clear(apr_pool_t *pool)
+{
+ const char *auth_dir;
+ svn_auth_provider_object_t *provider;
+ svn_auth_baton_t *baton;
+ apr_array_header_t *providers;
+ void *credentials;
+ svn_auth_cred_simple_t *creds;
+ svn_auth_iterstate_t *state;
+
+ SVN_ERR(svn_dirent_get_absolute(&auth_dir, "", pool));
+ auth_dir = svn_dirent_join(auth_dir, "auth-clear", pool);
+
+ svn_test_add_dir_cleanup(auth_dir);
+
+ SVN_ERR(svn_io_remove_dir2(auth_dir, TRUE, NULL, NULL, pool));
+ SVN_ERR(svn_io_dir_make(auth_dir, APR_OS_DEFAULT, pool));
+
+ svn_auth_get_simple_provider2(&provider, NULL, NULL, pool);
+
+ providers = apr_array_make(pool, 1, sizeof(svn_auth_provider_object_t *));
+ APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
+
+ svn_auth_open(&baton, providers, pool);
+
+ svn_auth_set_parameter(baton, SVN_AUTH_PARAM_DEFAULT_USERNAME, "jrandom");
+ svn_auth_set_parameter(baton, SVN_AUTH_PARAM_DEFAULT_PASSWORD, "rayjandom");
+ svn_auth_set_parameter(baton, SVN_AUTH_PARAM_CONFIG_DIR, auth_dir);
+
+ /* Create the auth subdirs. Without these we can't store passwords */
+ SVN_ERR(svn_config_ensure(auth_dir, pool));
+
+ /* Obtain the default credentials just passed */
+ SVN_ERR(svn_auth_first_credentials(&credentials,
+ &state,
+ SVN_AUTH_CRED_SIMPLE,
+ "<http://my.host> My realm",
+ baton,
+ pool));
+
+ creds = credentials;
+ SVN_TEST_ASSERT(strcmp(creds->username, "jrandom") == 0);
+ SVN_TEST_ASSERT(creds->may_save);
+
+ /* And tell that they are ok and can be saved */
+ SVN_ERR(svn_auth_save_credentials(state, pool));
+
+ /* Ok, and now we try to remove the credentials */
+ svn_auth_set_parameter(baton, SVN_AUTH_PARAM_DEFAULT_USERNAME, NULL);
+ svn_auth_set_parameter(baton, SVN_AUTH_PARAM_DEFAULT_PASSWORD, NULL);
+
+ /* Are they still in the baton? */
+ SVN_ERR(svn_auth_first_credentials(&credentials,
+ &state,
+ SVN_AUTH_CRED_SIMPLE,
+ "<http://my.host> My realm",
+ baton,
+ pool));
+
+ SVN_TEST_ASSERT(credentials);
+ creds = credentials;
+ SVN_TEST_ASSERT(strcmp(creds->username, "jrandom") == 0);
+ SVN_TEST_ASSERT(creds->may_save);
+
+ /* Use our walker function to delete credentials (and forget them
+ from the auth baton). */
+ SVN_ERR(svn_config_walk_auth_data(auth_dir, cleanup_callback, baton, pool));
+
+ /* Finally, they should be gone! */
+ SVN_ERR(svn_auth_first_credentials(&credentials,
+ &state,
+ SVN_AUTH_CRED_SIMPLE,
+ "<http://my.host> My realm",
+ baton,
+ pool));
+
+ SVN_TEST_ASSERT(! credentials);
+
+ return SVN_NO_ERROR;
+}
+
/* The test table. */
@@ -211,5 +319,13 @@ struct svn_test_descriptor_t test_funcs[] =
SVN_TEST_NULL,
SVN_TEST_PASS2(test_platform_specific_auth_providers,
"test retrieving platform-specific auth providers"),
+#ifndef SVN_DISABLE_PLAINTEXT_PASSWORD_STORAGE
+ SVN_TEST_PASS2(test_auth_clear,
+ "test svn_auth_clear()"),
+#else
+ SVN_TEST_WIMP(test_auth_clear,
+ "test svn_auth_clear()",
+ "Needs testing with SVN_DISABLE_PLAINTEXT_PASSWORD_STORAGE"),
+#endif
SVN_TEST_NULL
};
diff --git a/subversion/tests/libsvn_subr/cache-test.c b/subversion/tests/libsvn_subr/cache-test.c
index 9920296..9e7a7b3 100644
--- a/subversion/tests/libsvn_subr/cache-test.c
+++ b/subversion/tests/libsvn_subr/cache-test.c
@@ -36,7 +36,7 @@
/* Implements svn_cache__serialize_func_t */
static svn_error_t *
-serialize_revnum(char **data,
+serialize_revnum(void **data,
apr_size_t *data_len,
void *in,
apr_pool_t *pool)
@@ -51,7 +51,7 @@ serialize_revnum(char **data,
/* Implements svn_cache__deserialize_func_t */
static svn_error_t *
deserialize_revnum(void **out,
- char *data,
+ void *data,
apr_size_t data_len,
apr_pool_t *pool)
{
@@ -155,8 +155,8 @@ test_memcache_basic(const svn_test_opts_t *opts,
if (opts->config_file)
{
- SVN_ERR(svn_config_read2(&config, opts->config_file,
- TRUE, FALSE, pool));
+ SVN_ERR(svn_config_read3(&config, opts->config_file,
+ TRUE, FALSE, FALSE, pool));
SVN_ERR(svn_cache__make_memcache_from_config(&memcache, config, pool));
}
@@ -182,16 +182,9 @@ test_membuffer_cache_basic(apr_pool_t *pool)
{
svn_cache__t *cache;
svn_membuffer_t *membuffer;
- svn_boolean_t thread_safe;
-#if APR_HAS_THREADS
- thread_safe = TRUE;
-#else
- thread_safe = FALSE;
-#endif
-
- SVN_ERR(svn_cache__membuffer_cache_create(&membuffer, 10*1024, 1,
- thread_safe, pool));
+ SVN_ERR(svn_cache__membuffer_cache_create(&membuffer, 10*1024, 1, 0,
+ TRUE, TRUE, pool));
/* Create a cache with just one entry. */
SVN_ERR(svn_cache__create_membuffer_cache(&cache,
@@ -200,11 +193,73 @@ test_membuffer_cache_basic(apr_pool_t *pool)
deserialize_revnum,
APR_HASH_KEY_STRING,
"cache:",
+ FALSE,
pool));
return basic_cache_test(cache, FALSE, pool);
}
+/* Implements svn_cache__deserialize_func_t */
+static svn_error_t *
+raise_error_deserialize_func(void **out,
+ void *data,
+ apr_size_t data_len,
+ apr_pool_t *pool)
+{
+ return svn_error_create(APR_EGENERAL, NULL, NULL);
+}
+
+/* Implements svn_cache__partial_getter_func_t */
+static svn_error_t *
+raise_error_partial_getter_func(void **out,
+ const void *data,
+ apr_size_t data_len,
+ void *baton,
+ apr_pool_t *result_pool)
+{
+ return svn_error_create(APR_EGENERAL, NULL, NULL);
+}
+
+static svn_error_t *
+test_membuffer_serializer_error_handling(apr_pool_t *pool)
+{
+ svn_cache__t *cache;
+ svn_membuffer_t *membuffer;
+ svn_revnum_t twenty = 20;
+ svn_boolean_t found;
+ void *val;
+
+ SVN_ERR(svn_cache__membuffer_cache_create(&membuffer, 10*1024, 1, 0,
+ TRUE, TRUE, pool));
+
+ /* Create a cache with just one entry. */
+ SVN_ERR(svn_cache__create_membuffer_cache(&cache,
+ membuffer,
+ serialize_revnum,
+ raise_error_deserialize_func,
+ APR_HASH_KEY_STRING,
+ "cache:",
+ FALSE,
+ pool));
+
+ SVN_ERR(svn_cache__set(cache, "twenty", &twenty, pool));
+
+ /* Test retrieving data from cache using full getter that
+ always raises an error. */
+ SVN_TEST_ASSERT_ERROR(
+ svn_cache__get(&val, &found, cache, "twenty", pool),
+ APR_EGENERAL);
+
+ /* Test retrieving data from cache using partial getter that
+ always raises an error. */
+ SVN_TEST_ASSERT_ERROR(
+ svn_cache__get_partial(&val, &found, cache, "twenty",
+ raise_error_partial_getter_func,
+ NULL, pool),
+ APR_EGENERAL);
+
+ return SVN_NO_ERROR;
+}
static svn_error_t *
test_memcache_long_key(const svn_test_opts_t *opts,
@@ -229,8 +284,8 @@ test_memcache_long_key(const svn_test_opts_t *opts,
if (opts->config_file)
{
- SVN_ERR(svn_config_read2(&config, opts->config_file,
- TRUE, FALSE, pool));
+ SVN_ERR(svn_config_read3(&config, opts->config_file,
+ TRUE, FALSE, FALSE, pool));
SVN_ERR(svn_cache__make_memcache_from_config(&memcache, config, pool));
}
@@ -275,5 +330,7 @@ struct svn_test_descriptor_t test_funcs[] =
"memcache svn_cache with very long keys"),
SVN_TEST_PASS2(test_membuffer_cache_basic,
"basic membuffer svn_cache test"),
+ SVN_TEST_PASS2(test_membuffer_serializer_error_handling,
+ "test for error handling in membuffer svn_cache"),
SVN_TEST_NULL
};
diff --git a/subversion/tests/libsvn_subr/checksum-test.c b/subversion/tests/libsvn_subr/checksum-test.c
index 8e957a6..c5e2409 100644
--- a/subversion/tests/libsvn_subr/checksum-test.c
+++ b/subversion/tests/libsvn_subr/checksum-test.c
@@ -23,7 +23,11 @@
#include <apr_pools.h>
+#include <zlib.h>
+
#include "svn_error.h"
+#include "svn_io.h"
+#include "private/svn_pseudo_md5.h"
#include "../svn_test.h"
@@ -59,11 +63,195 @@ test_checksum_parse(apr_pool_t *pool)
return SVN_NO_ERROR;
}
+static svn_error_t *
+test_checksum_empty(apr_pool_t *pool)
+{
+ svn_checksum_t *checksum;
+ char data = '\0';
+
+ checksum = svn_checksum_empty_checksum(svn_checksum_md5, pool);
+ SVN_TEST_ASSERT(svn_checksum_is_empty_checksum(checksum));
+
+ checksum = svn_checksum_empty_checksum(svn_checksum_sha1, pool);
+ SVN_TEST_ASSERT(svn_checksum_is_empty_checksum(checksum));
+
+ SVN_ERR(svn_checksum(&checksum, svn_checksum_md5, &data, 0, pool));
+ SVN_TEST_ASSERT(svn_checksum_is_empty_checksum(checksum));
+
+ SVN_ERR(svn_checksum(&checksum, svn_checksum_sha1, &data, 0, pool));
+ SVN_TEST_ASSERT(svn_checksum_is_empty_checksum(checksum));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_pseudo_md5(apr_pool_t *pool)
+{
+ apr_uint32_t input[16] = { 0 };
+ apr_uint32_t digest_15[4] = { 0 };
+ apr_uint32_t digest_31[4] = { 0 };
+ apr_uint32_t digest_63[4] = { 0 };
+ svn_checksum_t *checksum;
+
+ /* input is all 0s but the hash shall be different
+ (due to different input sizes)*/
+ svn__pseudo_md5_15(digest_15, input);
+ svn__pseudo_md5_31(digest_31, input);
+ svn__pseudo_md5_63(digest_63, input);
+
+ SVN_TEST_ASSERT(memcmp(digest_15, digest_31, sizeof(digest_15)));
+ SVN_TEST_ASSERT(memcmp(digest_15, digest_63, sizeof(digest_15)));
+ SVN_TEST_ASSERT(memcmp(digest_31, digest_63, sizeof(digest_15)));
+
+ /* the checksums shall also be different from "proper" MD5 */
+ SVN_ERR(svn_checksum(&checksum, svn_checksum_md5, input, 15, pool));
+ SVN_TEST_ASSERT(memcmp(digest_15, checksum->digest, sizeof(digest_15)));
+
+ SVN_ERR(svn_checksum(&checksum, svn_checksum_md5, input, 31, pool));
+ SVN_TEST_ASSERT(memcmp(digest_31, checksum->digest, sizeof(digest_15)));
+
+ SVN_ERR(svn_checksum(&checksum, svn_checksum_md5, input, 63, pool));
+ SVN_TEST_ASSERT(memcmp(digest_63, checksum->digest, sizeof(digest_15)));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+zero_match(apr_pool_t *pool)
+{
+ svn_checksum_t *zero_md5;
+ svn_checksum_t *zero_sha1;
+ svn_checksum_t *A_md5;
+ svn_checksum_t *B_md5;
+ svn_checksum_t *A_sha1;
+ svn_checksum_t *B_sha1;
+
+
+ zero_md5 = svn_checksum_create(svn_checksum_md5, pool);
+ SVN_ERR(svn_checksum_clear(zero_md5));
+ SVN_ERR(svn_checksum(&A_md5, svn_checksum_md5, "A", 1, pool));
+ SVN_ERR(svn_checksum(&B_md5, svn_checksum_md5, "B", 1, pool));
+
+ zero_sha1 = svn_checksum_create(svn_checksum_sha1, pool);
+ SVN_ERR(svn_checksum_clear(zero_sha1));
+ SVN_ERR(svn_checksum(&A_sha1, svn_checksum_sha1, "A", 1, pool));
+ SVN_ERR(svn_checksum(&B_sha1, svn_checksum_sha1, "B", 1, pool));
+
+ /* Different non-zero don't match. */
+ SVN_TEST_ASSERT(!svn_checksum_match(A_md5, B_md5));
+ SVN_TEST_ASSERT(!svn_checksum_match(A_sha1, B_sha1));
+ SVN_TEST_ASSERT(!svn_checksum_match(A_md5, A_sha1));
+ SVN_TEST_ASSERT(!svn_checksum_match(A_md5, B_sha1));
+
+ /* Zero matches anything of the same kind. */
+ SVN_TEST_ASSERT(svn_checksum_match(A_md5, zero_md5));
+ SVN_TEST_ASSERT(svn_checksum_match(zero_md5, B_md5));
+ SVN_TEST_ASSERT(svn_checksum_match(A_sha1, zero_sha1));
+ SVN_TEST_ASSERT(svn_checksum_match(zero_sha1, B_sha1));
+
+ /* Zero doesn't match anything of a different kind... */
+ SVN_TEST_ASSERT(!svn_checksum_match(zero_md5, A_sha1));
+ SVN_TEST_ASSERT(!svn_checksum_match(zero_sha1, A_md5));
+ /* ...even another zero. */
+ SVN_TEST_ASSERT(!svn_checksum_match(zero_md5, zero_sha1));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+zlib_expansion_test(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ const char *data_path;
+ svn_stringbuf_t *deflated;
+ Byte dst_buffer[256 * 1024];
+ Byte *src_buffer;
+ apr_size_t sz;
+
+ data_path = svn_dirent_join(opts->srcdir, "zlib.deflated", pool);
+
+ SVN_ERR(svn_stringbuf_from_file2(&deflated, data_path, pool));
+ src_buffer = (Byte*)deflated->data;
+
+ /* Try to decompress the same data with different blocksizes */
+ for (sz = 1; sz < 256; sz++)
+ {
+ z_stream stream;
+ memset(&stream, 0, sizeof(stream));
+ inflateInit2(&stream, -15 /* DEFLATE_WINDOW_SIZE */);
+
+ stream.avail_in = sz;
+ stream.next_in = src_buffer;
+ stream.avail_out = sizeof(dst_buffer);
+ stream.next_out = dst_buffer;
+
+ do
+ {
+ int zr = inflate(&stream, Z_NO_FLUSH);
+
+ if (zr != Z_OK && zr != Z_STREAM_END)
+ {
+ return svn_error_createf(
+ SVN_ERR_TEST_FAILED, NULL,
+ "Failure decompressing with blocksize %d", (int)sz);
+ }
+ stream.avail_in += sz;
+ } while (stream.next_in + stream.avail_in < src_buffer + deflated->len);
+
+ stream.avail_in = (src_buffer + deflated->len) - stream.next_in;
+
+ {
+ int zr = inflate(&stream, Z_NO_FLUSH);
+
+ if (zr != Z_STREAM_END)
+ {
+ return svn_error_createf(
+ SVN_ERR_TEST_FAILED, NULL,
+ "Final flush failed with blocksize %d", (int)sz);
+ }
+
+ zr = inflateEnd(&stream);
+
+ if (zr != Z_OK)
+ {
+ return svn_error_createf(
+ SVN_ERR_TEST_FAILED, NULL,
+ "End of stream handling failed with blocksize %d",
+ (int)sz);
+ }
+ }
+
+ {
+ apr_uint32_t crc = crc32(0, dst_buffer, stream.total_out);
+
+ if (stream.total_out != 242014 || crc != 0x8f03d934)
+ {
+ return svn_error_createf(
+ SVN_ERR_TEST_FAILED, NULL,
+ "Decompressed data doesn't match expected size or crc with "
+ "blocksize %d: Found crc32=0x%08x, size=%d.\n"
+ "Verify your ZLib installation, as this should never happen",
+ (int)sz, (unsigned)crc, (int)stream.total_out);
+ }
+ }
+ }
+
+ return SVN_NO_ERROR;
+}
+
/* An array of all test functions */
struct svn_test_descriptor_t test_funcs[] =
{
SVN_TEST_NULL,
SVN_TEST_PASS2(test_checksum_parse,
"checksum parse"),
+ SVN_TEST_PASS2(test_checksum_empty,
+ "checksum emptiness"),
+ SVN_TEST_PASS2(test_pseudo_md5,
+ "pseudo-md5 compatibility"),
+ SVN_TEST_PASS2(zero_match,
+ "zero checksum matching"),
+ SVN_TEST_OPTS_PASS(zlib_expansion_test,
+ "zlib expansion test (zlib regression)"),
SVN_TEST_NULL
};
diff --git a/subversion/tests/libsvn_subr/compat-test.c b/subversion/tests/libsvn_subr/compat-test.c
index 5ce3f08..9ff8099 100644
--- a/subversion/tests/libsvn_subr/compat-test.c
+++ b/subversion/tests/libsvn_subr/compat-test.c
@@ -24,10 +24,12 @@
#include <apr_pools.h>
#include "svn_error.h"
+#include "svn_pools.h"
#include "svn_version.h"
#include "../svn_test.h"
#include "svn_private_config.h"
+#include "private/svn_subr_private.h"
#ifndef SVN_DISABLE_FULL_VERSION_MATCH
#define FALSE_IF_FULL FALSE
@@ -100,11 +102,121 @@ test_version_compatibility(apr_pool_t *pool)
return SVN_NO_ERROR;
}
+
+static svn_error_t *
+test_version_parsing(apr_pool_t *pool)
+{
+ unsigned int i;
+ apr_pool_t *iterpool;
+
+ struct version_pair {
+ const char *str;
+ svn_boolean_t malformed;
+ svn_version_t version;
+ } versions[] = {
+ /* str malformed version */
+ { "1.8", FALSE, { 1, 8, 0, ""} },
+ { "1.8-dev", TRUE, { 0, 0, 0, ""} },
+ { "1.1.0", FALSE, { 1, 1, 0, ""} },
+ { "1.1.3", FALSE, { 1, 1, 3, ""} },
+ { "2.10.0", FALSE, { 2, 10, 0, ""} },
+ { "1.8.0-dev", FALSE, { 1, 8, 0, "dev"} },
+ { "1.7.0-beta1", FALSE, { 1, 7, 0, "beta1"} },
+ { "1a.8.0", TRUE, { 0, 0, 0, ""} },
+ { "1a.8.0", TRUE, { 0, 0, 0, ""} },
+ { "1.a8.0", TRUE, { 0, 0, 0, ""} },
+ { "1.8.0a", TRUE, { 0, 0, 0, ""} },
+ { "1.8.0.1", TRUE, { 0, 0, 0, ""} },
+ };
+
+ iterpool = svn_pool_create(pool);
+ for (i = 0; i < sizeof(versions)/sizeof(versions[0]); ++i)
+ {
+ svn_version_t *version;
+ svn_error_t *err;
+
+ svn_pool_clear(iterpool);
+
+ err = svn_version__parse_version_string(&version, versions[i].str,
+ iterpool);
+ if (err && (err->apr_err != SVN_ERR_MALFORMED_VERSION_STRING))
+ return svn_error_create(SVN_ERR_TEST_FAILED, err,
+ "Unexpected error code");
+ if (err)
+ {
+ if (! versions[i].malformed)
+ return svn_error_create(SVN_ERR_TEST_FAILED, err,
+ "Unexpected parsing error returned");
+ else
+ svn_error_clear(err);
+ }
+ else
+ {
+ if (versions[i].malformed)
+ return svn_error_create(SVN_ERR_TEST_FAILED, NULL,
+ "Parsing error expected; none returned");
+ if (! svn_ver_equal(version, &(versions[i].version)))
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "Parsed version of '%s' doesn't match "
+ "expected", versions[i].str);
+ }
+ }
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_version_at_least(apr_pool_t *pool)
+{
+ unsigned int i;
+
+ struct version_pair {
+ svn_version_t version;
+ int major;
+ int minor;
+ int patch;
+ svn_boolean_t at_least;
+ } versions[] = {
+ /* maj min pat version at_least */
+ { { 1, 3, 3, ""}, 1, 3, 3, TRUE },
+ { { 1, 3, 3, ""}, 1, 3, 4, FALSE },
+ { { 1, 3, 3, ""}, 1, 4, 3, FALSE },
+ { { 1, 3, 3, ""}, 0, 4, 3, TRUE },
+ { { 1, 3, 3, ""}, 2, 0, 0, FALSE },
+ { { 1, 3, 3, ""}, 1, 3, 2, TRUE },
+ { { 1, 3, 3, ""}, 1, 2, 4, TRUE },
+ { { 1, 3, 3, "dev"}, 1, 3, 2, TRUE },
+ { { 1, 3, 3, "dev"}, 1, 3, 3, FALSE },
+ { { 1, 3, 3, ""}, 0, 4, 3, TRUE },
+ };
+
+ for (i = 0; i < sizeof(versions)/sizeof(versions[0]); ++i)
+ {
+ svn_boolean_t at_least = svn_version__at_least(&(versions[i].version),
+ versions[i].major,
+ versions[i].minor,
+ versions[i].patch);
+ if (at_least && (! versions[i].at_least))
+ return svn_error_create(SVN_ERR_TEST_FAILED, NULL,
+ "Expected at-least to be FALSE; got TRUE");
+ if ((! at_least) && versions[i].at_least)
+ return svn_error_create(SVN_ERR_TEST_FAILED, NULL,
+ "Expected at-least to be TRUE; got FALSE");
+ }
+
+ return SVN_NO_ERROR;
+}
+
/* An array of all test functions */
struct svn_test_descriptor_t test_funcs[] =
{
SVN_TEST_NULL,
SVN_TEST_PASS2(test_version_compatibility,
"svn_ver_compatible"),
+ SVN_TEST_PASS2(test_version_parsing,
+ "svn_version__parse_version_string"),
+ SVN_TEST_PASS2(test_version_at_least,
+ "svn_version__at_least"),
SVN_TEST_NULL
};
diff --git a/subversion/tests/libsvn_subr/config-test.c b/subversion/tests/libsvn_subr/config-test.c
index aee56f8..8938457 100644
--- a/subversion/tests/libsvn_subr/config-test.c
+++ b/subversion/tests/libsvn_subr/config-test.c
@@ -109,7 +109,7 @@ test_text_retrieval(apr_pool_t *pool)
SVN_ERR(init_params(pool));
cfg_file = apr_pstrcat(pool, srcdir, "/", "config-test.cfg", (char *)NULL);
- SVN_ERR(svn_config_read2(&cfg, cfg_file, TRUE, FALSE, pool));
+ SVN_ERR(svn_config_read3(&cfg, cfg_file, TRUE, FALSE, FALSE, pool));
/* Test values retrieved from our ConfigParser instance against
values retrieved using svn_config. */
@@ -160,7 +160,7 @@ test_boolean_retrieval(apr_pool_t *pool)
SVN_ERR(init_params(pool));
cfg_file = apr_pstrcat(pool, srcdir, "/", "config-test.cfg", (char *)NULL);
- SVN_ERR(svn_config_read2(&cfg, cfg_file, TRUE, FALSE, pool));
+ SVN_ERR(svn_config_read3(&cfg, cfg_file, TRUE, FALSE, FALSE, pool));
for (i = 0; true_keys[i] != NULL; i++)
{
@@ -211,7 +211,7 @@ test_boolean_retrieval(apr_pool_t *pool)
}
static svn_error_t *
-test_has_section(apr_pool_t *pool)
+test_has_section_case_insensitive(apr_pool_t *pool)
{
svn_config_t *cfg;
const char *cfg_file;
@@ -220,17 +220,164 @@ test_has_section(apr_pool_t *pool)
SVN_ERR(init_params(pool));
cfg_file = apr_pstrcat(pool, srcdir, "/", "config-test.cfg", (char *)NULL);
- SVN_ERR(svn_config_read2(&cfg, cfg_file, TRUE, FALSE, pool));
+ SVN_ERR(svn_config_read3(&cfg, cfg_file, TRUE, FALSE, FALSE, pool));
if (! svn_config_has_section(cfg, "section1"))
return fail(pool, "Failed to find section1");
+ if (! svn_config_has_section(cfg, "SECTION1"))
+ return fail(pool, "Failed to find SECTION1");
+
+ if (! svn_config_has_section(cfg, "UpperCaseSection"))
+ return fail(pool, "Failed to find UpperCaseSection");
+
+ if (! svn_config_has_section(cfg, "uppercasesection"))
+ return fail(pool, "Failed to find UpperCaseSection");
+
+ if (svn_config_has_section(cfg, "notthere"))
+ return fail(pool, "Returned true on missing section");
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_has_section_case_sensitive(apr_pool_t *pool)
+{
+ svn_config_t *cfg;
+ const char *cfg_file;
+
+ if (!srcdir)
+ SVN_ERR(init_params(pool));
+
+ cfg_file = apr_pstrcat(pool, srcdir, "/", "config-test.cfg", (char *)NULL);
+ SVN_ERR(svn_config_read3(&cfg, cfg_file, TRUE, TRUE, FALSE, pool));
+
+ if (! svn_config_has_section(cfg, "section1"))
+ return fail(pool, "Failed to find section1");
+
+ if (svn_config_has_section(cfg, "SECTION1"))
+ return fail(pool, "Returned true on missing section");
+
+ if (! svn_config_has_section(cfg, "UpperCaseSection"))
+ return fail(pool, "Failed to find UpperCaseSection");
+
+ if (svn_config_has_section(cfg, "uppercasesection"))
+ return fail(pool, "Returned true on missing section");
+
if (svn_config_has_section(cfg, "notthere"))
return fail(pool, "Returned true on missing section");
return SVN_NO_ERROR;
}
+static svn_error_t *
+test_has_option_case_sensitive(apr_pool_t *pool)
+{
+ svn_config_t *cfg;
+ const char *cfg_file;
+ apr_int64_t value;
+ int i;
+
+ static struct test_dataset {
+ const char *option;
+ apr_int64_t value;
+ } const test_data[] = {
+ { "a", 1 },
+ { "A", 2 },
+ { "B", 3 },
+ { "b", 4 }
+ };
+ static const int test_data_size = sizeof(test_data)/sizeof(*test_data);
+
+ if (!srcdir)
+ SVN_ERR(init_params(pool));
+
+ cfg_file = apr_pstrcat(pool, srcdir, "/", "config-test.cfg", (char *)NULL);
+ SVN_ERR(svn_config_read3(&cfg, cfg_file, TRUE, TRUE, TRUE, pool));
+
+ for (i = 0; i < test_data_size; ++i)
+ {
+ SVN_ERR(svn_config_get_int64(cfg, &value, "case-sensitive-option",
+ test_data[i].option, -1));
+ if (test_data[i].value != value)
+ return fail(pool,
+ apr_psprintf(pool,
+ "case-sensitive-option.%s != %"
+ APR_INT64_T_FMT" but %"APR_INT64_T_FMT,
+ test_data[i].option,
+ test_data[i].value,
+ value));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_stream_interface(apr_pool_t *pool)
+{
+ svn_config_t *cfg;
+ const char *cfg_file;
+ svn_stream_t *stream;
+
+ if (!srcdir)
+ SVN_ERR(init_params(pool));
+
+ cfg_file = apr_pstrcat(pool, srcdir, "/", "config-test.cfg", (char *)NULL);
+ SVN_ERR(svn_stream_open_readonly(&stream, cfg_file, pool, pool));
+
+ SVN_ERR(svn_config_parse(&cfg, stream, TRUE, TRUE, pool));
+
+ /* nominal test to make sure cfg is populated with something since
+ * svn_config_parse will happily return an empty cfg if the stream is
+ * empty. */
+ if (! svn_config_has_section(cfg, "section1"))
+ return fail(pool, "Failed to find section1");
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_ignore_bom(apr_pool_t *pool)
+{
+ svn_config_t *cfg;
+ svn_string_t *cfg_string = svn_string_create("\xEF\xBB\xBF[s1]\nfoo=bar\n",
+ pool);
+ svn_stream_t *stream = svn_stream_from_string(cfg_string, pool);
+
+ SVN_ERR(svn_config_parse(&cfg, stream, TRUE, TRUE, pool));
+
+ if (! svn_config_has_section(cfg, "s1"))
+ return fail(pool, "failed to find section s1");
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_expand(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ svn_config_t *cfg;
+ const char *cfg_file, *val;
+
+ if (!srcdir)
+ SVN_ERR(init_params(pool));
+
+ cfg_file = apr_pstrcat(pool, srcdir, "/", "config-test.cfg", (char *)NULL);
+ SVN_ERR(svn_config_read3(&cfg, cfg_file, TRUE, TRUE, FALSE, pool));
+
+ /* Get expanded "g" which requires expanding "c". */
+ svn_config_get(cfg, &val, "section1", "g", NULL);
+
+ /* Get expanded "c". */
+ svn_config_get(cfg, &val, "section1", "c", NULL);
+
+ /* With pool debugging enabled this ensures that the expanded value
+ of "c" was not created in a temporary pool when expanding "g". */
+ SVN_TEST_STRING_ASSERT(val, "bar");
+
+ return SVN_NO_ERROR;
+}
+
/*
====================================================================
If you add a new test to this file, update this array.
@@ -246,7 +393,16 @@ struct svn_test_descriptor_t test_funcs[] =
"test svn_config"),
SVN_TEST_PASS2(test_boolean_retrieval,
"test svn_config boolean conversion"),
- SVN_TEST_PASS2(test_has_section,
- "test svn_config_has_section"),
+ SVN_TEST_PASS2(test_has_section_case_insensitive,
+ "test svn_config_has_section (case insensitive)"),
+ SVN_TEST_PASS2(test_has_section_case_sensitive,
+ "test svn_config_has_section (case sensitive)"),
+ SVN_TEST_PASS2(test_has_option_case_sensitive,
+ "test case-sensitive option name lookup"),
+ SVN_TEST_PASS2(test_stream_interface,
+ "test svn_config_parse"),
+ SVN_TEST_PASS2(test_ignore_bom, "test parsing config file with BOM"),
+ SVN_TEST_OPTS_PASS(test_expand,
+ "test variable expansion"),
SVN_TEST_NULL
};
diff --git a/subversion/tests/libsvn_subr/config-test.cfg b/subversion/tests/libsvn_subr/config-test.cfg
index 214889b..8d79a4b 100644
--- a/subversion/tests/libsvn_subr/config-test.cfg
+++ b/subversion/tests/libsvn_subr/config-test.cfg
@@ -41,6 +41,9 @@ h= %(unterminated
# Multiple expansions
i=%(a)s %(b)s
+[UpperCaseSection]
+a=Aa
+
[booleans]
true1 = true
true2 = Yes
@@ -52,3 +55,9 @@ false2 = no
false3 = oFf
false4 = 0
bad_false = nyet!
+
+[case-sensitive-option]
+a = 1
+A = 2
+B = 3
+b = 4
diff --git a/subversion/tests/libsvn_subr/crypto-test.c b/subversion/tests/libsvn_subr/crypto-test.c
new file mode 100644
index 0000000..0c52804
--- /dev/null
+++ b/subversion/tests/libsvn_subr/crypto-test.c
@@ -0,0 +1,188 @@
+/*
+ * crypto-test.c -- test cryptographic routines
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include "svn_pools.h"
+
+#include "../svn_test.h"
+#include "../../libsvn_subr/crypto.h"
+
+
+/*** Helper functions ***/
+
+/* Encrypt PASSWORD within CTX using MASTER, then
+ decrypt those results and ensure the original PASSWORD comes out
+ the other end. */
+static svn_error_t *
+encrypt_decrypt(svn_crypto__ctx_t *ctx,
+ const svn_string_t *master,
+ const char *password,
+ apr_pool_t *pool)
+{
+ const svn_string_t *ciphertext, *iv, *salt;
+ const char *password_again;
+
+ SVN_ERR(svn_crypto__encrypt_password(&ciphertext, &iv, &salt, ctx,
+ password, master, pool, pool));
+ if (! ciphertext)
+ return svn_error_create(SVN_ERR_TEST_FAILED, NULL,
+ "Encryption failed to return ciphertext");
+ if (! salt)
+ return svn_error_create(SVN_ERR_TEST_FAILED, NULL,
+ "Encryption failed to return salt");
+ if (! iv)
+ return svn_error_create(SVN_ERR_TEST_FAILED, NULL,
+ "Encryption failed to return initialization "
+ "vector");
+
+ SVN_ERR(svn_crypto__decrypt_password(&password_again, ctx, ciphertext, iv,
+ salt, master, pool, pool));
+
+ if (! password_again)
+ return svn_error_create(SVN_ERR_TEST_FAILED, NULL,
+ "Decryption failed to generate results");
+
+ if (strcmp(password, password_again) != 0)
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "Encrypt/decrypt cycle failed to produce "
+ "original result\n"
+ " orig (%s)\n"
+ " new (%s)\n",
+ password, password_again);
+
+ return SVN_NO_ERROR;
+}
+
+
+
+/*** Test functions ***/
+
+static svn_error_t *
+test_encrypt_decrypt_password(apr_pool_t *pool)
+{
+ svn_crypto__ctx_t *ctx;
+ const svn_string_t *master = svn_string_create("Pastor Massword", pool);
+ int i;
+ apr_pool_t *iterpool;
+ const char *passwords[] = {
+ "3ncryptm!3", /* fits in one block */
+ "this is a particularly long password", /* spans blocks */
+ "mypassphrase", /* with 4-byte padding, should align on block boundary */
+ };
+
+ /* Skip this test if the crypto subsystem is unavailable. */
+ if (! svn_crypto__is_available())
+ return svn_error_create(SVN_ERR_TEST_SKIPPED, NULL, NULL);
+
+ SVN_ERR(svn_crypto__context_create(&ctx, pool));
+
+ iterpool = svn_pool_create(pool);
+ for (i = 0; i < (sizeof(passwords) / sizeof(const char *)); i++)
+ {
+ svn_pool_clear(iterpool);
+ SVN_ERR(encrypt_decrypt(ctx, master, passwords[i], iterpool));
+ }
+
+ svn_pool_destroy(iterpool);
+ return SVN_NO_ERROR;
+}
+
+
+static svn_error_t *
+test_passphrase_check(apr_pool_t *pool)
+{
+ svn_crypto__ctx_t *ctx;
+ int i;
+ apr_pool_t *iterpool;
+ const char *passwords[] = {
+ "3ncryptm!3", /* fits in one block */
+ "this is a particularly long password", /* spans blocks */
+ "mypassphrase", /* with 4-byte padding, should align on block boundary */
+ };
+ const svn_string_t *ciphertext, *iv, *salt, *secret;
+ const char *checktext;
+ svn_boolean_t is_valid;
+ int num_passwords = sizeof(passwords) / sizeof(const char *);
+
+ /* Skip this test if the crypto subsystem is unavailable. */
+ if (! svn_crypto__is_available())
+ return svn_error_create(SVN_ERR_TEST_SKIPPED, NULL, NULL);
+
+ SVN_ERR(svn_crypto__context_create(&ctx, pool));
+
+ iterpool = svn_pool_create(pool);
+ for (i = 0; i < num_passwords; i++)
+ {
+ svn_pool_clear(iterpool);
+ secret = svn_string_create(passwords[i], iterpool);
+ SVN_ERR(svn_crypto__generate_secret_checktext(&ciphertext, &iv, &salt,
+ &checktext, ctx, secret,
+ iterpool, iterpool));
+ SVN_ERR(svn_crypto__verify_secret(&is_valid, ctx, secret, ciphertext,
+ iv, salt, checktext, iterpool));
+ if (! is_valid)
+ return svn_error_create(SVN_ERR_TEST_FAILED, NULL,
+ "Error validating secret against checktext");
+ }
+
+ /* Now check that a bogus secret causes the validation to fail. We
+ try to verify each secret against the checktext generated by the
+ previous one. */
+ for (i = 0; i < num_passwords; i++)
+ {
+ int test_secret_index = (i + 1) % num_passwords;
+
+ svn_pool_clear(iterpool);
+ secret = svn_string_create(passwords[i], iterpool);
+ SVN_ERR(svn_crypto__generate_secret_checktext(&ciphertext, &iv, &salt,
+ &checktext, ctx, secret,
+ iterpool, iterpool));
+ secret = svn_string_create(passwords[test_secret_index], iterpool);
+ SVN_ERR(svn_crypto__verify_secret(&is_valid, ctx, secret, ciphertext,
+ iv, salt, checktext, iterpool));
+ if (is_valid)
+ return svn_error_create(SVN_ERR_TEST_FAILED, NULL,
+ "Expected secret validation failure; "
+ "got success");
+ }
+
+ svn_pool_destroy(iterpool);
+ return SVN_NO_ERROR;
+}
+
+
+
+
+/* The test table. */
+
+struct svn_test_descriptor_t test_funcs[] =
+ {
+ SVN_TEST_NULL,
+ SVN_TEST_PASS2(test_encrypt_decrypt_password,
+ "basic password encryption/decryption test"),
+ SVN_TEST_PASS2(test_passphrase_check,
+ "password checktext generation/validation"),
+ SVN_TEST_NULL
+ };
diff --git a/subversion/tests/libsvn_subr/dirent_uri-test.c b/subversion/tests/libsvn_subr/dirent_uri-test.c
index f10ab2e..992d288 100644
--- a/subversion/tests/libsvn_subr/dirent_uri-test.c
+++ b/subversion/tests/libsvn_subr/dirent_uri-test.c
@@ -37,6 +37,7 @@
#include "svn_pools.h"
#include "svn_dirent_uri.h"
#include "private/svn_fspath.h"
+#include "private/svn_cert.h"
#include "../svn_test.h"
@@ -618,6 +619,11 @@ test_uri_dirname(apr_pool_t *pool)
{ "http://server", "http://server" },
{ "file:///a/b", "file:///a" },
{ "file:///a", "file://" },
+ { "file://", "file://" },
+#ifdef WIN32
+ { "file:///A:/dir", "file:///A:" },
+ { "file:///A:", "file://" },
+#endif
};
for (i = 0; i < COUNT_OF(tests); i++)
@@ -670,6 +676,7 @@ test_dirent_canonicalize(apr_pool_t *pool)
{ "foo/../", "foo/.." },
{ "foo/../.", "foo/.." },
{ "foo//.//bar", "foo/bar" },
+ { "//foo", "/foo" },
{ "///foo", "/foo" },
{ "/.//./.foo", "/.foo" },
{ ".///.foo", ".foo" },
@@ -743,6 +750,7 @@ test_relpath_canonicalize(apr_pool_t *pool)
{ "foo/../", "foo/.." },
{ "foo/../.", "foo/.." },
{ "foo//.//bar", "foo/bar" },
+ { "//foo", "foo" },
{ "///foo", "foo" },
{ "/.//./.foo", ".foo" },
{ ".///.foo", ".foo" },
@@ -882,15 +890,31 @@ static const testcase_canonicalize_t uri_canonical_tests[] =
{ "https://SERVER:80/", "https://server:80" },
{ "svn://server:80", "svn://server:80" },
{ "svn://SERVER:443/", "svn://server:443" },
+ { "file:///C%7C/temp/REPOS", "file:///C%7C/temp/REPOS" },
+ { "file:///C|/temp/REPOS", "file:///C%7C/temp/REPOS" },
+ { "file:///C:/", "file:///C:" },
+ { "http://[::1]/", "http://[::1]" },
+ { "http://[::1]:80/", "http://[::1]" },
+ { "https://[::1]:443", "https://[::1]" },
+ { "http://[::1]/", "http://[::1]" },
+ { "http://[::1]:80/", "http://[::1]" },
+ { "https://[::1]:443", "https://[::1]" },
+ { "http://[FACE:B00C::]/s","http://[face:b00c::]/s" },
+ { "svn+ssh://b@[1:2::3]/s","svn+ssh://b@[1:2::3]/s" },
#ifdef SVN_USE_DOS_PATHS
{ "file:///c:/temp/repos", "file:///C:/temp/repos" },
{ "file:///c:/temp/REPOS", "file:///C:/temp/REPOS" },
{ "file:///C:/temp/REPOS", "file:///C:/temp/REPOS" },
+ { "file:///c:/", "file:///C:" },
#else /* !SVN_USE_DOS_PATHS */
{ "file:///c:/temp/repos", "file:///c:/temp/repos" },
{ "file:///c:/temp/REPOS", "file:///c:/temp/REPOS" },
{ "file:///C:/temp/REPOS", "file:///C:/temp/REPOS" },
+ { "file:///c:/", "file:///c:" },
#endif /* SVN_USE_DOS_PATHS */
+ /* Hostnames that look like non-canonical paths */
+ { "file://./foo", "file://./foo" },
+ { "http://./foo", "http://./foo" },
/* svn_uri_is_canonical() was a private function in the 1.6 API, and
has since taken a MAJOR change of direction, namely that only
absolute URLs are considered canonical uris now. */
@@ -917,6 +941,7 @@ static const testcase_canonicalize_t uri_canonical_tests[] =
{ "foo/../", NULL },
{ "foo/../.", NULL },
{ "foo//.//bar", NULL },
+ { "//foo", NULL },
{ "///foo", NULL },
{ "/.//./.foo", NULL },
{ ".///.foo", NULL },
@@ -1004,6 +1029,7 @@ test_dirent_is_canonical(apr_pool_t *pool)
{ "foo/../", FALSE },
{ "foo/../.", FALSE },
{ "foo//.//bar", FALSE },
+ { "//foo", FALSE },
{ "///foo", FALSE },
{ "/.//./.foo", FALSE },
{ ".///.foo", FALSE },
@@ -1104,6 +1130,7 @@ test_relpath_is_canonical(apr_pool_t *pool)
{ "foo/../", FALSE },
{ "foo/../.", FALSE },
{ "foo//.//bar", FALSE },
+ { "//foo", FALSE },
{ "///foo", FALSE },
{ "/.//./.foo", FALSE },
{ ".///.foo", FALSE },
@@ -1357,6 +1384,9 @@ static const testcase_ancestor_t dirent_ancestor_tests[] =
{ "foo.", "foo./.bar", ".bar" },
{ "X:foo", "X:bar", NULL },
{ "../foo", "..", NULL },
+ { "/foo/bar/zig", "/foo", NULL },
+ { "/foo/bar/zig", "/foo/ba", NULL },
+ { "/foo/bar/zig", "/foo/bar/zi", NULL },
#ifdef SVN_USE_DOS_PATHS
{ "", "C:", NULL },
{ "", "C:foo", NULL },
@@ -1377,6 +1407,9 @@ static const testcase_ancestor_t dirent_ancestor_tests[] =
{ "X:/foo", "X:/", NULL },
{ "A:/foo", "A:/foo/bar", "bar" },
{ "A:/foo", "A:/foot", NULL },
+ { "A:/foo/bar/zig", "A:/foo", NULL },
+ { "A:/foo/bar/zig", "A:/foo/ba", NULL },
+ { "A:/foo/bar/zig", "A:/foo/bar/zi", NULL },
{ "//srv", "//srv/share", NULL },
{ "//srv", "//srv/shr/fld", NULL },
{ "//srv/shr", "//srv", NULL },
@@ -1386,6 +1419,7 @@ static const testcase_ancestor_t dirent_ancestor_tests[] =
{ "//srv/s r", "//srv/s r/fld", "fld" },
{ "//srv/shr/fld", "//srv/shr", NULL },
{ "//srv/shr/fld", "//srv2/shr/fld", NULL },
+ { "//srv/shr/fld", "//srv/shr/f", NULL },
{ "/", "//srv/share", NULL },
#else /* !SVN_USE_DOS_PATHS */
{ "", "C:", "C:" },
@@ -1441,28 +1475,6 @@ static const testcase_ancestor_t relpath_ancestor_tests[] =
{ "X:foo", "X:bar", NULL },
};
-static svn_error_t *
-test_relpath_is_ancestor(apr_pool_t *pool)
-{
- const testcase_ancestor_t *t;
-
- for (t = relpath_ancestor_tests;
- t < relpath_ancestor_tests + COUNT_OF(relpath_ancestor_tests);
- t++)
- {
- svn_boolean_t retval;
-
- retval = svn_relpath__is_ancestor(t->path1, t->path2);
- if (!!t->result != retval)
- return svn_error_createf
- (SVN_ERR_TEST_FAILED, NULL,
- "svn_relpath_is_ancestor (%s, %s) returned %s instead of %s",
- t->path1, t->path2, retval ? "TRUE" : "FALSE",
- t->result ? "TRUE" : "FALSE");
- }
- return SVN_NO_ERROR;
-}
-
static const testcase_ancestor_t uri_ancestor_tests[] =
{
{ "http://test", "http://test", "" },
@@ -1473,6 +1485,8 @@ static const testcase_ancestor_t uri_ancestor_tests[] =
{ "http://", "http://test", NULL },
{ "http://server", "http://server/q", "q" },
{ "svn://server", "http://server/q", NULL },
+ { "http://foo/bar", "http://foo", NULL },
+ { "http://foo/bar", "http://foo/ba", NULL },
};
static svn_error_t *
@@ -1860,133 +1874,6 @@ test_dirent_is_child(apr_pool_t *pool)
}
static svn_error_t *
-test_relpath_is_child(apr_pool_t *pool)
-{
- int i, j;
-
- static const char * const paths[] = {
- "",
- "foo",
- "foo/bar",
- "foo/bars",
- "foo/baz",
- "foo/bar/baz",
- "flu/blar/blaz",
- "foo/bar/baz/bing/boom",
- ".foo",
- ":",
- "foo2",
- "food",
- "bar",
- "baz",
- "ba",
- "bad"
- };
-
- /* Maximum number of path[] items for all platforms */
-#define MAX_PATHS 32
-
- static const char * const
- remainders[COUNT_OF(paths)][MAX_PATHS] = {
- { 0, "foo", "foo/bar", "foo/bars", "foo/baz", "foo/bar/baz",
- "flu/blar/blaz", "foo/bar/baz/bing/boom", ".foo", ":", "foo2", "food",
- "bar", "baz", "ba", "bad" },
- { 0, 0, "bar", "bars", "baz", "bar/baz", 0, "bar/baz/bing/boom", 0, 0, 0,
- 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, "baz", 0, "baz/bing/boom", 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, "bing/boom", 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- };
-
- for (i = 0; i < COUNT_OF(paths); i++)
- {
- for (j = 0; j < COUNT_OF(paths); j++)
- {
- const char *remainder;
-
- remainder = svn_dirent_is_child(paths[i], paths[j], pool);
-
- if (strcmp(paths[j], "foodbar") == 0)
- SVN_ERR_MALFUNCTION();
-
- if (((remainder) && (! remainders[i][j]))
- || ((! remainder) && (remainders[i][j]))
- || (remainder && strcmp(remainder, remainders[i][j])))
- return svn_error_createf
- (SVN_ERR_TEST_FAILED, NULL,
- "svn_relpath_is_child(%s, %s) returned '%s' instead of '%s'",
- paths[i], paths[j],
- remainder ? remainder : "(null)",
- remainders[i][j] ? remainders[i][j] : "(null)" );
- }
- }
-
-#undef NUM_TEST_PATHS
- return SVN_NO_ERROR;
-}
-
-
-static svn_error_t *
-test_uri_is_child(apr_pool_t *pool)
-{
- int i, j;
-
- static const char * const paths[] = {
- "http://foo/bar",
- "http://foo/bar%20bell",
- "http://foo/baz",
- "http://foo",
- "http://f",
- "file://foo/bar",
- "file://foo/bar/baz%20bol",
- };
-
- static const char * const
- remainders[COUNT_OF(paths)][COUNT_OF(paths)] = {
- { 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0 },
- { "bar", "bar bell", "baz", 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, "baz bol" },
- { 0, 0, 0, 0, 0, 0, 0 },
- };
-
- for (i = 0; i < COUNT_OF(paths); i++)
- {
- for (j = 0; j < COUNT_OF(paths); j++)
- {
- const char *remainder;
-
- remainder = svn_uri__is_child(paths[i], paths[j], pool);
-
- if (((remainder) && (! remainders[i][j]))
- || ((! remainder) && (remainders[i][j]))
- || (remainder && strcmp(remainder, remainders[i][j])))
- return svn_error_createf
- (SVN_ERR_TEST_FAILED, NULL,
- "svn_uri_is_child (%s, %s) [%d,%d] "
- "returned '%s' instead of '%s'",
- paths[i], paths[j], i, j,
- remainder ? remainder : "(null)",
- remainders[i][j] ? remainders[i][j] : "(null)" );
- }
- }
-
- return SVN_NO_ERROR;
-}
-
-static svn_error_t *
test_dirent_get_absolute(apr_pool_t *pool)
{
int i;
@@ -2166,15 +2053,34 @@ test_dirent_condense_targets(apr_pool_t *pool)
const char* common;
apr_array_header_t *hdr = apr_array_make(pool, 8, sizeof(const char*));
apr_array_header_t *condensed;
+ svn_boolean_t skip = FALSE;
for (j = 0; j < COUNT_OF(tests[i].paths); j++)
{
if (tests[i].paths[j] != NULL)
- APR_ARRAY_PUSH(hdr, const char*) = tests[i].paths[j];
+ {
+ APR_ARRAY_PUSH(hdr, const char*) = tests[i].paths[j];
+#ifdef SVN_USE_DOS_PATHS
+ /* For tests that are referencing a D: drive, specifically test
+ if such a drive exists on the system. If not, skip the test
+ (svn_dirent_condense_targets will fail, because
+ apr_filepath_merge will produce an APR_EBADPATH error). */
+ if (strncmp(tests[i].paths[j], "D:", 2) == 0
+ && GetDriveType("D:\\") == DRIVE_NO_ROOT_DIR)
+ {
+ /* There is no D: drive, skip this. */
+ skip = TRUE;
+ break;
+ }
+#endif
+ }
else
break;
}
+ if (skip)
+ continue;
+
SVN_ERR(svn_dirent_condense_targets(&common, &condensed, hdr,
FALSE, pool, pool));
@@ -2483,7 +2389,7 @@ test_file_url_from_dirent(apr_pool_t *pool)
} tests[] = {
#ifdef SVN_USE_DOS_PATHS
{ "C:/file", "file:///C:/file" },
- { "C:/", "file:///C:/" },
+ { "C:/", "file:///C:" },
{ "C:/File#$", "file:///C:/File%23$" },
/* We can't check these as svn_dirent_get_absolute() won't work
on shares that don't exist */
@@ -2510,6 +2416,8 @@ test_file_url_from_dirent(apr_pool_t *pool)
"svn_uri_get_file_url_from_dirent(\"%s\") "
"returned \"%s\" expected \"%s\"",
tests[i].dirent, result, tests[i].result);
+
+ SVN_TEST_ASSERT(svn_uri_is_canonical(result, pool));
}
return SVN_NO_ERROR;
@@ -2686,7 +2594,7 @@ test_fspath_join(apr_pool_t *pool)
}
static svn_error_t *
-test_fspath_is_child(apr_pool_t *pool)
+test_fspath_skip_ancestor(apr_pool_t *pool)
{
int i, j;
@@ -2701,12 +2609,12 @@ test_fspath_is_child(apr_pool_t *pool)
static const char * const
remainders[COUNT_OF(paths)][COUNT_OF(paths)] = {
- { 0, "f", "foo", "foo/bar", "foo/bars", "foo/bar/baz" },
- { 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, "bar", "bars", "bar/baz" },
- { 0, 0, 0, 0, 0, "baz" },
- { 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0 },
+ { "", "f", "foo", "foo/bar", "foo/bars", "foo/bar/baz" },
+ { 0, "", 0, 0, 0, 0 },
+ { 0, 0, "", "bar", "bars", "bar/baz" },
+ { 0, 0, 0, "", 0, "baz" },
+ { 0, 0, 0, 0, "", 0 },
+ { 0, 0, 0, 0, 0, "" },
};
for (i = 0; i < COUNT_OF(paths); i++)
@@ -2714,7 +2622,7 @@ test_fspath_is_child(apr_pool_t *pool)
for (j = 0; j < COUNT_OF(paths); j++)
{
const char *remainder
- = svn_fspath__is_child(paths[i], paths[j], pool);
+ = svn_fspath__skip_ancestor(paths[i], paths[j]);
SVN_TEST_STRING_ASSERT(remainder, remainders[i][j]);
}
@@ -2807,6 +2715,145 @@ test_fspath_get_longest_ancestor(apr_pool_t *pool)
return SVN_NO_ERROR;
}
+struct cert_match_dns_test {
+ const char *pattern;
+ const char *hostname;
+ svn_boolean_t expected;
+};
+
+static svn_error_t *
+run_cert_match_dns_tests(struct cert_match_dns_test *tests, apr_pool_t *pool)
+{
+ struct cert_match_dns_test *ct;
+ apr_pool_t *iterpool = svn_pool_create(pool);
+
+ for (ct = tests; ct->pattern; ct++)
+ {
+ svn_boolean_t result;
+ svn_string_t *pattern, *hostname;
+
+ svn_pool_clear(iterpool);
+
+ pattern = svn_string_create(ct->pattern, iterpool);
+ hostname = svn_string_create(ct->hostname, iterpool);
+
+ result = svn_cert__match_dns_identity(pattern, hostname);
+ if (result != ct->expected)
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "Expected %s but got %s for pattern '%s' on "
+ "hostname '%s'",
+ ct->expected ? "match" : "no match",
+ result ? "match" : "no match",
+ pattern->data, hostname->data);
+
+ }
+
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+static struct cert_match_dns_test cert_match_dns_tests[] = {
+ { "foo.example.com", "foo.example.com", TRUE }, /* exact match */
+ { "foo.example.com", "FOO.EXAMPLE.COM", TRUE }, /* case differences */
+ { "FOO.EXAMPLE.COM", "foo.example.com", TRUE },
+ { "*.example.com", "FoO.ExAmPlE.CoM", TRUE },
+ { "*.ExAmPlE.CoM", "foo.example.com", TRUE },
+ { "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz", TRUE },
+ { "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ", TRUE },
+ { "foo.example.com", "bar.example.com", FALSE }, /* difference at start */
+ { "foo.example.com", "foo.example.net", FALSE }, /* difference at end */
+ { "foo.example.com", "foo.example.commercial", FALSE }, /* hostname longer */
+ { "foo.example.commercial", "foo.example.com", FALSE }, /* pattern longer */
+ { "foo.example.comcom", "foo.example.com", FALSE }, /* repeated suffix */
+ { "foo.example.com", "foo.example.comcom", FALSE },
+ { "foo.example.com.com", "foo.example.com", FALSE },
+ { "foo.example.com", "foo.example.com.com", FALSE },
+ { "foofoo.example.com", "foo.example.com", FALSE }, /* repeated prefix */
+ { "foo.example.com", "foofoo.example.com", FALSE },
+ { "foo.foo.example.com", "foo.example.com", FALSE },
+ { "foo.example.com", "foo.foo.example.com", FALSE },
+ { "foo.*.example.com", "foo.bar.example.com", FALSE }, /* RFC 6125 s. 6.4.3
+ Rule 1 */
+ { "*.example.com", "foo.example.com", TRUE }, /* RFC 6125 s. 6.4.3 Rule 2 */
+ { "*.example.com", "bar.foo.example.com", FALSE }, /* Rule 2 */
+ { "*.example.com", "example.com", FALSE }, /* Rule 2 */
+ { "*.example.com", ".example.com", FALSE }, /* RFC doesn't say what to do
+ here and a leading period on
+ a hostname doesn't make sense
+ so we'll just reject this. */
+ { "*", "foo.example.com", FALSE }, /* wildcard must be left-most label,
+ implies that there must be more than
+ one label. */
+ { "*", "example.com", FALSE },
+ { "*", "com", FALSE },
+ { "*.example.com", "foo.example.net", FALSE }, /* difference in literal text
+ with a wildcard. */
+ { "*.com", "example.com", TRUE }, /* See Errata ID 3090 for RFC 6125,
+ probably shouldn't allow this but
+ we do for now. */
+ { "*.", "example.com", FALSE }, /* test some dubious 2 character wildcard
+ patterns */
+ { "*.", "example.", TRUE }, /* This one feels questionable */
+ { "*.", "example", FALSE },
+ { "*.", ".", FALSE },
+ { "a", "a", TRUE }, /* check that single letter exact matches work */
+ { "a", "b", FALSE }, /* and single letter not matches shouldn't */
+ { "*.*.com", "foo.example.com", FALSE }, /* unsupported wildcards */
+ { "*.*.com", "example.com", FALSE },
+ { "**.example.com", "foo.example.com", FALSE },
+ { "**.example.com", "example.com", FALSE },
+ { "f*.example.com", "foo.example.com", FALSE },
+ { "f*.example.com", "bar.example.com", FALSE },
+ { "*o.example.com", "foo.example.com", FALSE },
+ { "*o.example.com", "bar.example.com", FALSE },
+ { "f*o.example.com", "foo.example.com", FALSE },
+ { "f*o.example.com", "bar.example.com", FALSE },
+ { "foo.e*.com", "foo.example.com", FALSE },
+ { "foo.*e.com", "foo.example.com", FALSE },
+ { "foo.e*e.com", "foo.example.com", FALSE },
+ { "foo.example.com", "foo.example.com.", TRUE }, /* trailing dot */
+ { "*.example.com", "foo.example.com.", TRUE },
+ { "foo", "foo.", TRUE },
+ { "foo.example.com.", "foo.example.com", FALSE },
+ { "*.example.com.", "foo.example.com", FALSE },
+ { "foo.", "foo", FALSE },
+ { "foo.example.com", "foo.example.com..", FALSE },
+ { "*.example.com", "foo.example.com..", FALSE },
+ { "foo", "foo..", FALSE },
+ { "foo.example.com..", "foo.example.com", FALSE },
+ { "*.example.com..", "foo.example.com", FALSE },
+ { "foo..", "foo", FALSE },
+ { NULL }
+};
+
+static svn_error_t *
+test_cert_match_dns_identity(apr_pool_t *pool)
+{
+ return run_cert_match_dns_tests(cert_match_dns_tests, pool);
+}
+
+/* This test table implements results that should happen if we supported
+ * RFC 6125 s. 6.4.3 Rule 3. We don't so it's expected to fail for now. */
+static struct cert_match_dns_test rule3_tests[] = {
+ { "baz*.example.net", "baz1.example.net", TRUE },
+ { "*baz.example.net", "foobaz.example.net", TRUE },
+ { "b*z.example.net", "buuz.example.net", TRUE },
+ { "b*z.example.net", "bz.example.net", FALSE }, /* presume wildcard can't
+ match nothing */
+ { "baz*.example.net", "baz.example.net", FALSE },
+ { "*baz.example.net", "baz.example.net", FALSE },
+ { "b*z.example.net", "buuzuuz.example.net", TRUE }, /* presume wildcard
+ should be greedy */
+ { NULL }
+};
+
+static svn_error_t *
+test_rule3(apr_pool_t *pool)
+{
+ return run_cert_match_dns_tests(rule3_tests, pool);
+}
+
/* The test table. */
@@ -2861,14 +2908,8 @@ struct svn_test_descriptor_t test_funcs[] =
"test svn_uri_get_longest_ancestor"),
SVN_TEST_PASS2(test_dirent_is_child,
"test svn_dirent_is_child"),
- SVN_TEST_PASS2(test_relpath_is_child,
- "test svn_relpath_is_child"),
- SVN_TEST_PASS2(test_uri_is_child,
- "test svn_uri_is_child"),
SVN_TEST_PASS2(test_dirent_is_ancestor,
"test svn_dirent_is_ancestor"),
- SVN_TEST_PASS2(test_relpath_is_ancestor,
- "test svn_relpath_is_ancestor"),
SVN_TEST_PASS2(test_uri_is_ancestor,
"test svn_uri_is_ancestor"),
SVN_TEST_PASS2(test_dirent_skip_ancestor,
@@ -2905,11 +2946,15 @@ struct svn_test_descriptor_t test_funcs[] =
"test svn_fspath__is_canonical"),
SVN_TEST_PASS2(test_fspath_join,
"test svn_fspath__join"),
- SVN_TEST_PASS2(test_fspath_is_child,
- "test svn_fspath__is_child"),
+ SVN_TEST_PASS2(test_fspath_skip_ancestor,
+ "test svn_fspath__skip_ancestor"),
SVN_TEST_PASS2(test_fspath_dirname_basename_split,
"test svn_fspath__dirname/basename/split"),
SVN_TEST_PASS2(test_fspath_get_longest_ancestor,
"test svn_fspath__get_longest_ancestor"),
+ SVN_TEST_PASS2(test_cert_match_dns_identity,
+ "test svn_cert__match_dns_identity"),
+ SVN_TEST_XFAIL2(test_rule3,
+ "test match with RFC 6125 s. 6.4.3 Rule 3"),
SVN_TEST_NULL
};
diff --git a/subversion/tests/libsvn_subr/error-code-test.c b/subversion/tests/libsvn_subr/error-code-test.c
new file mode 100644
index 0000000..e996616
--- /dev/null
+++ b/subversion/tests/libsvn_subr/error-code-test.c
@@ -0,0 +1,83 @@
+/*
+ * error-code-test.c -- tests for error codes
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <apr_general.h>
+
+#include "svn_error.h"
+
+/* Duplicate of the same typedef in libsvn_subr/error.c */
+typedef struct err_defn {
+ svn_errno_t errcode; /* 160004 */
+ const char *errname; /* SVN_ERR_FS_CORRUPT */
+ const char *errdesc; /* default message */
+} err_defn;
+
+/* To understand what is going on here, read svn_error_codes.h. */
+#define SVN_ERROR_BUILD_ARRAY
+#include "svn_error_codes.h"
+
+#include "../svn_test.h"
+
+#define NUM_ERRORS (sizeof(error_table)/sizeof(error_table[0]))
+
+static svn_error_t *
+check_error_codes_unique(apr_pool_t *pool)
+{
+ int i;
+ struct err_defn e = error_table[0];
+
+ /* Ensure error codes are strictly monotonically increasing. */
+ for (i = 1; i < NUM_ERRORS; i++)
+ {
+ struct err_defn e2 = error_table[i];
+
+ /* Don't fail the test if there is an odd number of errors.
+ * The error array's sentinel has an error code of zero. */
+ if (i == NUM_ERRORS - 1 && e2.errcode == 0)
+ break;
+
+ /* SVN_ERR_WC_NOT_DIRECTORY is an alias for SVN_ERR_WC_NOT_WORKING_COPY
+ * and shares the same error code. */
+ if (e.errcode != SVN_ERR_WC_NOT_DIRECTORY &&
+ e.errcode >= e2.errcode)
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "Error 0x%x (%s) is not < 0x%x (%s)\n",
+ e.errcode, e.errdesc, e2.errcode, e2.errdesc);
+ e = e2;
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
+/* The test table. */
+
+struct svn_test_descriptor_t test_funcs[] =
+ {
+ SVN_TEST_NULL,
+ SVN_TEST_PASS2(check_error_codes_unique,
+ "check that error codes are unique"),
+ SVN_TEST_NULL
+ };
diff --git a/subversion/tests/libsvn_subr/error-test.c b/subversion/tests/libsvn_subr/error-test.c
index a19af72..18dacde 100644
--- a/subversion/tests/libsvn_subr/error-test.c
+++ b/subversion/tests/libsvn_subr/error-test.c
@@ -125,8 +125,9 @@ test_error_purge_tracing(apr_pool_t *pool)
svn_error_malfunction_handler_t orig_handler;
/* For this test, use a random error status. */
- err = svn_error_create(SVN_ERR_BAD_UUID, NULL, SVN_ERR__TRACED);
+ err = svn_error_create(SVN_ERR_BAD_UUID, NULL, "");
err = svn_error_trace(err);
+ err->child->message = err->message;
/* Register a malfunction handler that doesn't call abort() to
check that a new error chain with an assertion error is
@@ -181,6 +182,46 @@ test_error_purge_tracing(apr_pool_t *pool)
return SVN_NO_ERROR;
}
+static svn_error_t *
+test_error_symbolic_name(apr_pool_t *pool)
+{
+ struct {
+ svn_errno_t errcode;
+ const char *errname;
+ } errors[] = {
+ { SVN_ERR_BAD_CONTAINING_POOL, "SVN_ERR_BAD_CONTAINING_POOL" },
+ { SVN_ERR_BAD_FILENAME, "SVN_ERR_BAD_FILENAME" },
+ { SVN_ERR_XML_ATTRIB_NOT_FOUND, "SVN_ERR_XML_ATTRIB_NOT_FOUND" },
+ { SVN_ERR_ENTRY_NOT_FOUND, "SVN_ERR_ENTRY_NOT_FOUND" },
+ { SVN_ERR_ENTRY_CATEGORY_START + 1, NULL }, /* unused slot */
+ { SVN_ERR_ENTRY_EXISTS, "SVN_ERR_ENTRY_EXISTS" },
+ { SVN_ERR_ASSERTION_ONLY_TRACING_LINKS, "SVN_ERR_ASSERTION_ONLY_TRACING_LINKS" },
+ { SVN_ERR_FS_CORRUPT, "SVN_ERR_FS_CORRUPT" },
+ /* The following two error codes can return either of their names
+ as the string. For simplicity, test what the current implementation
+ returns; but if it starts returning "SVN_ERR_WC_NOT_DIRECTORY",
+ that's fine (and permitted by the API contract). */
+ { SVN_ERR_WC_NOT_DIRECTORY, "SVN_ERR_WC_NOT_WORKING_COPY" },
+ { SVN_ERR_WC_NOT_WORKING_COPY, "SVN_ERR_WC_NOT_WORKING_COPY" },
+ /* Test an implementation detail. */
+ { SVN_ERR_BAD_CATEGORY_START, "SVN_ERR_BAD_CONTAINING_POOL" },
+ /* Test non-errors. */
+ { 1, NULL },
+ { SVN_ERR_WC_CATEGORY_START - 1, NULL },
+ /* Whitebox-test exceptional cases. */
+ { SVN_WARNING, "SVN_WARNING" },
+ { 0, "SVN_NO_ERROR" }
+ /* No sentinel. */
+ };
+ int i;
+
+ for (i = 0; i < sizeof(errors) / sizeof(errors[0]); i++)
+ SVN_TEST_STRING_ASSERT(svn_error_symbolic_name(errors[i].errcode),
+ errors[i].errname);
+
+ return SVN_NO_ERROR;
+}
+
/* The test table. */
@@ -191,5 +232,7 @@ struct svn_test_descriptor_t test_funcs[] =
"test svn_error_root_cause"),
SVN_TEST_PASS2(test_error_purge_tracing,
"test svn_error_purge_tracing"),
+ SVN_TEST_PASS2(test_error_symbolic_name,
+ "test svn_error_symbolic_name"),
SVN_TEST_NULL
};
diff --git a/subversion/tests/libsvn_subr/io-test.c b/subversion/tests/libsvn_subr/io-test.c
new file mode 100644
index 0000000..82e8630
--- /dev/null
+++ b/subversion/tests/libsvn_subr/io-test.c
@@ -0,0 +1,527 @@
+/* io-test.c --- tests for some i/o functions
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <stdio.h>
+
+#include <apr.h>
+
+#include "svn_pools.h"
+#include "svn_string.h"
+#include "private/svn_skel.h"
+
+#include "../svn_test.h"
+#include "../svn_test_fs.h"
+
+
+/* Helpers to create the test data directory. */
+
+#define TEST_DIR "io-test-temp"
+
+/* The definition for the test data files. */
+struct test_file_definition_t
+ {
+ /* The name of the test data file. */
+ const char* const name;
+
+ /* The string needs to contain up to 5 bytes, they
+ * are interpreded as:
+ * - first byte
+ * - filler between first and medium byte
+ * - medium byte (the byte in the middle of the file)
+ * - filler between medium and last byte
+ * - last byte.
+ * If the string is shorter than the file length,
+ * the test will fail. */
+ const char* const data;
+
+ /* The size of the file actually to create. */
+ const apr_off_t size;
+
+ /* The created path of the file. Will be filled in
+ * by create_test_file() */
+ char* created_path;
+ };
+
+struct test_file_definition_t test_file_definitions[] =
+ {
+ {"empty", "", 0},
+ {"single_a", "a", 1},
+ {"single_b", "b", 1},
+ {"hundred_a", "aaaaa", 100},
+ {"hundred_b", "bbbbb", 100},
+ {"hundred_b1", "baaaa", 100},
+ {"hundred_b2", "abaaa", 100},
+ {"hundred_b3", "aabaa", 100},
+ {"hundred_b4", "aaaba", 100},
+ {"hundred_b5", "aaaab", 100},
+ {"chunk_minus_one_a", "aaaaa", SVN__STREAM_CHUNK_SIZE - 1},
+ {"chunk_minus_one_b1", "baaaa", SVN__STREAM_CHUNK_SIZE - 1},
+ {"chunk_minus_one_b2", "abaaa", SVN__STREAM_CHUNK_SIZE - 1},
+ {"chunk_minus_one_b3", "aabaa", SVN__STREAM_CHUNK_SIZE - 1},
+ {"chunk_minus_one_b4", "aaaba", SVN__STREAM_CHUNK_SIZE - 1},
+ {"chunk_minus_one_b5", "aaaab", SVN__STREAM_CHUNK_SIZE - 1},
+ {"chunk_a", "aaaaa", SVN__STREAM_CHUNK_SIZE},
+ {"chunk_b1", "baaaa", SVN__STREAM_CHUNK_SIZE},
+ {"chunk_b2", "abaaa", SVN__STREAM_CHUNK_SIZE},
+ {"chunk_b3", "aabaa", SVN__STREAM_CHUNK_SIZE},
+ {"chunk_b4", "aaaba", SVN__STREAM_CHUNK_SIZE},
+ {"chunk_b5", "aaaab", SVN__STREAM_CHUNK_SIZE},
+ {"chunk_plus_one_a", "aaaaa", SVN__STREAM_CHUNK_SIZE + 1},
+ {"chunk_plus_one_b1", "baaaa", SVN__STREAM_CHUNK_SIZE + 1},
+ {"chunk_plus_one_b2", "abaaa", SVN__STREAM_CHUNK_SIZE + 1},
+ {"chunk_plus_one_b3", "aabaa", SVN__STREAM_CHUNK_SIZE + 1},
+ {"chunk_plus_one_b4", "aaaba", SVN__STREAM_CHUNK_SIZE + 1},
+ {"chunk_plus_one_b5", "aaaab", SVN__STREAM_CHUNK_SIZE + 1},
+ {"twochunk_minus_one_a", "aaaaa", SVN__STREAM_CHUNK_SIZE*2 - 1},
+ {"twochunk_minus_one_b1", "baaaa", SVN__STREAM_CHUNK_SIZE*2 - 1},
+ {"twochunk_minus_one_b2", "abaaa", SVN__STREAM_CHUNK_SIZE*2 - 1},
+ {"twochunk_minus_one_b3", "aabaa", SVN__STREAM_CHUNK_SIZE*2 - 1},
+ {"twochunk_minus_one_b4", "aaaba", SVN__STREAM_CHUNK_SIZE*2 - 1},
+ {"twochunk_minus_one_b5", "aaaab", SVN__STREAM_CHUNK_SIZE*2 - 1},
+ {"twochunk_a", "aaaaa", SVN__STREAM_CHUNK_SIZE*2},
+ {"twochunk_b1", "baaaa", SVN__STREAM_CHUNK_SIZE*2},
+ {"twochunk_b2", "abaaa", SVN__STREAM_CHUNK_SIZE*2},
+ {"twochunk_b3", "aabaa", SVN__STREAM_CHUNK_SIZE*2},
+ {"twochunk_b4", "aaaba", SVN__STREAM_CHUNK_SIZE*2},
+ {"twochunk_b5", "aaaab", SVN__STREAM_CHUNK_SIZE*2},
+ {"twochunk_plus_one_a", "aaaaa", SVN__STREAM_CHUNK_SIZE*2 + 1},
+ {"twochunk_plus_one_b1", "baaaa", SVN__STREAM_CHUNK_SIZE*2 + 1},
+ {"twochunk_plus_one_b2", "abaaa", SVN__STREAM_CHUNK_SIZE*2 + 1},
+ {"twochunk_plus_one_b3", "aabaa", SVN__STREAM_CHUNK_SIZE*2 + 1},
+ {"twochunk_plus_one_b4", "aaaba", SVN__STREAM_CHUNK_SIZE*2 + 1},
+ {"twochunk_plus_one_b5", "aaaab", SVN__STREAM_CHUNK_SIZE*2 + 1},
+ {0},
+ };
+
+/* Function to prepare a single test file */
+
+static svn_error_t *
+create_test_file(struct test_file_definition_t* definition,
+ apr_pool_t *pool,
+ apr_pool_t *scratch_pool)
+{
+ apr_status_t status = 0;
+ apr_file_t *file_h;
+ apr_off_t midpos = definition->size / 2;
+ svn_error_t *err = NULL;
+ int i;
+
+ if (definition->size < 5)
+ SVN_ERR_ASSERT(strlen(definition->data) >= (apr_size_t)definition->size);
+ else
+ SVN_ERR_ASSERT(strlen(definition->data) >= 5);
+
+
+ definition->created_path = svn_dirent_join(TEST_DIR,
+ definition->name,
+ pool);
+
+ SVN_ERR(svn_io_file_open(&file_h,
+ definition->created_path,
+ (APR_WRITE | APR_CREATE | APR_EXCL | APR_BUFFERED),
+ APR_OS_DEFAULT,
+ scratch_pool));
+
+ for (i=1; i <= definition->size; i += 1)
+ {
+ char c;
+ if (i == 1)
+ c = definition->data[0];
+ else if (i < midpos)
+ c = definition->data[1];
+ else if (i == midpos)
+ c = definition->data[2];
+ else if (i < definition->size)
+ c = definition->data[3];
+ else
+ c = definition->data[4];
+
+ status = apr_file_putc(c, file_h);
+
+ if (status)
+ break;
+ }
+
+ if (status)
+ err = svn_error_wrap_apr(status, "Can't write to file '%s'",
+ definition->name);
+
+ return svn_error_compose_create(err,
+ svn_io_file_close(file_h, scratch_pool));
+}
+
+/* Function to prepare the whole set of on-disk files to be compared. */
+static svn_error_t *
+create_comparison_candidates(apr_pool_t *scratch_pool)
+{
+ svn_node_kind_t kind;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ struct test_file_definition_t *candidate;
+ svn_error_t *err = SVN_NO_ERROR;
+
+ /* If there's already a directory named io-test-temp, delete it.
+ Doing things this way means that repositories stick around after
+ a failure for postmortem analysis, but also that tests can be
+ re-run without cleaning out the repositories created by prior
+ runs. */
+ SVN_ERR(svn_io_check_path(TEST_DIR, &kind, scratch_pool));
+
+ if (kind == svn_node_dir)
+ SVN_ERR(svn_io_remove_dir2(TEST_DIR, TRUE, NULL, NULL, scratch_pool));
+ else if (kind != svn_node_none)
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "There is already a file named '%s'",
+ TEST_DIR);
+
+ SVN_ERR(svn_io_dir_make(TEST_DIR, APR_OS_DEFAULT, scratch_pool));
+
+ svn_test_add_dir_cleanup(TEST_DIR);
+
+ for (candidate = test_file_definitions;
+ candidate->name != NULL;
+ candidate += 1)
+ {
+ svn_pool_clear(iterpool);
+ err = create_test_file(candidate, scratch_pool, iterpool);
+ if (err)
+ break;
+ }
+
+ svn_pool_destroy(iterpool);
+
+ return err;
+}
+
+
+/* Functions to check the 2-way and 3-way file comparison functions. */
+
+/* Test 2-way file size checking */
+static svn_error_t *
+test_two_file_size_comparison(apr_pool_t *scratch_pool)
+{
+ struct test_file_definition_t *inner, *outer;
+ svn_boolean_t actual;
+ svn_boolean_t expected;
+ svn_error_t *err = SVN_NO_ERROR;
+ svn_error_t *cmp_err;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+
+ SVN_ERR(create_comparison_candidates(scratch_pool));
+
+ for (outer = test_file_definitions; outer->name != NULL; outer += 1)
+ {
+#ifdef SVN_IO_TEST_ALL_PERMUTATIONS
+ inner = test_file_definitions;
+#else
+ inner = outer;
+#endif
+ for (; inner->name != NULL; inner += 1)
+ {
+ svn_pool_clear(iterpool);
+
+ expected = inner->size != outer->size;
+
+ cmp_err = svn_io_filesizes_different_p(&actual,
+ inner->created_path,
+ outer->created_path,
+ iterpool);
+
+ if (cmp_err)
+ {
+ err = svn_error_compose_create(err, cmp_err);
+ }
+ else if (expected != actual)
+ {
+ err = svn_error_compose_create(err,
+ svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "size comparison problem: '%s' and '%s'",
+ inner->created_path,
+ outer->created_path));
+ }
+ }
+ }
+
+ svn_pool_destroy(iterpool);
+ return err;
+}
+
+
+/* Test 2-way file content checking */
+static svn_error_t *
+test_two_file_content_comparison(apr_pool_t *scratch_pool)
+{
+ struct test_file_definition_t *inner, *outer;
+ svn_boolean_t actual;
+ svn_boolean_t expected;
+ svn_error_t *err = SVN_NO_ERROR;
+ svn_error_t *cmp_err;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+
+ SVN_ERR(create_comparison_candidates(scratch_pool));
+
+ for (outer = test_file_definitions; outer->name != NULL; outer += 1)
+ {
+#ifdef SVN_IO_TEST_ALL_PERMUTATIONS
+ inner = test_file_definitions;
+#else
+ inner = outer;
+#endif
+ for (; inner->name != NULL; inner += 1)
+ {
+ svn_pool_clear(iterpool);
+
+ expected = inner->size == outer->size
+ && strcmp(inner->data, outer->data) == 0;
+
+ cmp_err = svn_io_files_contents_same_p(&actual,
+ inner->created_path,
+ outer->created_path,
+ iterpool);
+
+ if (cmp_err)
+ {
+ err = svn_error_compose_create(err, cmp_err);
+ }
+ else
+ {
+ if (expected != actual)
+ err = svn_error_compose_create(err,
+ svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "content comparison problem: '%s' and '%s'",
+ inner->created_path,
+ outer->created_path));
+ }
+ }
+ }
+
+ svn_pool_destroy(iterpool);
+ return err;
+}
+
+
+/* Test 3-way file size checking */
+static svn_error_t *
+test_three_file_size_comparison(apr_pool_t *scratch_pool)
+{
+ struct test_file_definition_t *inner, *middle, *outer;
+ svn_boolean_t actual12, actual23, actual13;
+ svn_boolean_t expected12, expected23, expected13;
+ svn_error_t *err = SVN_NO_ERROR;
+ svn_error_t *cmp_err;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+
+ SVN_ERR(create_comparison_candidates(scratch_pool));
+
+ for (outer = test_file_definitions; outer->name != NULL; outer += 1)
+ {
+#ifdef SVN_IO_TEST_ALL_PERMUTATIONS
+ middle = test_file_definitions;
+#else
+ middle = outer;
+#endif
+ for (; middle->name != NULL; middle += 1)
+ {
+#ifdef SVN_IO_TEST_ALL_PERMUTATIONS
+ inner = test_file_definitions;
+#else
+ inner = middle;
+#endif
+ for (; inner->name != NULL; inner += 1)
+ {
+ svn_pool_clear(iterpool);
+
+ expected12 = inner->size != middle->size;
+ expected23 = middle->size != outer->size;
+ expected13 = inner->size != outer->size;
+
+ cmp_err = svn_io_filesizes_three_different_p(&actual12,
+ &actual23,
+ &actual13,
+ inner->created_path,
+ middle->created_path,
+ outer->created_path,
+ iterpool);
+
+ if (cmp_err)
+ {
+ err = svn_error_compose_create(err, cmp_err);
+ }
+ else
+ {
+ if (expected12 != actual12)
+ err = svn_error_compose_create(err,
+ svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "size comparison problem: '%s' and '%s'",
+ inner->created_path,
+ middle->created_path));
+
+ if (expected23 != actual23)
+ err = svn_error_compose_create(err,
+ svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "size comparison problem: '%s' and '%s'",
+ middle->created_path,
+ outer->created_path));
+
+ if (expected13 != actual13)
+ err = svn_error_compose_create(err,
+ svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "size comparison problem: '%s' and '%s'",
+ inner->created_path,
+ outer->created_path));
+ }
+ }
+ }
+ }
+
+ svn_pool_destroy(iterpool);
+
+ return err;
+}
+
+
+/* Test 3-way file content checking */
+static svn_error_t *
+test_three_file_content_comparison(apr_pool_t *scratch_pool)
+{
+ struct test_file_definition_t *inner, *middle, *outer;
+ svn_boolean_t actual12, actual23, actual13;
+ svn_boolean_t expected12, expected23, expected13;
+ svn_error_t *err = SVN_NO_ERROR;
+ svn_error_t *cmp_err;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+
+ SVN_ERR(create_comparison_candidates(scratch_pool));
+
+ for (outer = test_file_definitions; outer->name != NULL; outer += 1)
+ {
+#ifdef SVN_IO_TEST_ALL_PERMUTATIONS
+ middle = test_file_definitions;
+#else
+ middle = outer;
+#endif
+ for (; middle->name != NULL; middle += 1)
+ {
+#ifdef SVN_IO_TEST_ALL_PERMUTATIONS
+ inner = test_file_definitions;
+#else
+ inner = middle;
+#endif
+ for (; inner->name != NULL; inner += 1)
+ {
+ svn_pool_clear(iterpool);
+
+ expected12 = outer->size == middle->size
+ && strcmp(outer->data, middle->data) == 0;
+ expected23 = middle->size == inner->size
+ && strcmp(middle->data, inner->data) == 0;
+ expected13 = outer->size == inner->size
+ && strcmp(outer->data, inner->data) == 0;
+
+ cmp_err = svn_io_files_contents_three_same_p(&actual12,
+ &actual23,
+ &actual13,
+ outer->created_path,
+ middle->created_path,
+ inner->created_path,
+ iterpool);
+
+ if (cmp_err)
+ {
+ err = svn_error_compose_create(err, cmp_err);
+ }
+ else
+ {
+ if (expected12 != actual12)
+ err = svn_error_compose_create(err,
+ svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "size comparison problem: '%s' and '%s'",
+ inner->created_path,
+ middle->created_path));
+
+ if (expected23 != actual23)
+ err = svn_error_compose_create(err,
+ svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "size comparison problem: '%s' and '%s'",
+ middle->created_path,
+ outer->created_path));
+
+ if (expected13 != actual13)
+ err = svn_error_compose_create(err,
+ svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "size comparison problem: '%s' and '%s'",
+ inner->created_path,
+ outer->created_path));
+ }
+ }
+ }
+ }
+
+ return err;
+}
+
+static svn_error_t *
+read_length_line_shouldnt_loop(apr_pool_t *pool)
+{
+ const char *tmp_dir;
+ const char *tmp_file;
+ char buffer[4];
+ apr_size_t buffer_limit = sizeof(buffer);
+ apr_file_t *f;
+
+ SVN_ERR(svn_dirent_get_absolute(&tmp_dir, "read_length_tmp", pool));
+ SVN_ERR(svn_io_remove_dir2(tmp_dir, TRUE, NULL, NULL, pool));
+ SVN_ERR(svn_io_make_dir_recursively(tmp_dir, pool));
+ svn_test_add_dir_cleanup(tmp_dir);
+
+ SVN_ERR(svn_io_write_unique(&tmp_file, tmp_dir, "1234\r\n", 6,
+ svn_io_file_del_on_pool_cleanup, pool));
+
+ SVN_ERR(svn_io_file_open(&f, tmp_file, APR_READ, APR_OS_DEFAULT, pool));
+
+ SVN_TEST_ASSERT_ERROR(svn_io_read_length_line(f, buffer, &buffer_limit,
+ pool), SVN_ERR_MALFORMED_FILE);
+ SVN_TEST_ASSERT(buffer_limit == 4);
+
+ return SVN_NO_ERROR;
+}
+
+
+/* The test table. */
+
+struct svn_test_descriptor_t test_funcs[] =
+ {
+ SVN_TEST_NULL,
+ SVN_TEST_PASS2(test_two_file_size_comparison,
+ "two file size comparison"),
+ SVN_TEST_PASS2(test_two_file_content_comparison,
+ "two file content comparison"),
+ SVN_TEST_PASS2(test_three_file_size_comparison,
+ "three file size comparison"),
+ SVN_TEST_PASS2(test_three_file_content_comparison,
+ "three file content comparison"),
+ SVN_TEST_PASS2(read_length_line_shouldnt_loop,
+ "svn_io_read_length_line() shouldn't loop"),
+ SVN_TEST_NULL
+ };
diff --git a/subversion/tests/libsvn_subr/mergeinfo-test.c b/subversion/tests/libsvn_subr/mergeinfo-test.c
index 9da9a27..ecfcd02 100644
--- a/subversion/tests/libsvn_subr/mergeinfo-test.c
+++ b/subversion/tests/libsvn_subr/mergeinfo-test.c
@@ -28,6 +28,7 @@
#define SVN_DEPRECATED
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_types.h"
#include "svn_mergeinfo.h"
@@ -78,7 +79,7 @@ verify_mergeinfo_parse(const char *input,
{
const void *path;
void *val;
- apr_array_header_t *ranges;
+ svn_rangelist_t *ranges;
svn_merge_range_t *range;
int j;
@@ -236,7 +237,7 @@ test_mergeinfo_dup(apr_pool_t *pool)
{
apr_hash_t *orig_mergeinfo, *copied_mergeinfo;
apr_pool_t *subpool;
- apr_array_header_t *rangelist;
+ svn_rangelist_t *rangelist;
/* Assure that copies which should be empty turn out that way. */
subpool = svn_pool_create(pool);
@@ -399,7 +400,7 @@ range_to_string(svn_merge_range_t *range,
verified (e.g. "svn_rangelist_intersect"), while TYPE is a word
describing what the ranges being examined represent. */
static svn_error_t *
-verify_ranges_match(const apr_array_header_t *actual_rangelist,
+verify_ranges_match(const svn_rangelist_t *actual_rangelist,
svn_merge_range_t *expected_ranges, int nbr_expected,
const char *func_verified, const char *type,
apr_pool_t *pool)
@@ -436,7 +437,7 @@ verify_mergeinfo_deltas(apr_hash_t *deltas, svn_merge_range_t *expected_deltas,
const char *func_verified, const char *type,
apr_pool_t *pool)
{
- apr_array_header_t *rangelist;
+ svn_rangelist_t *rangelist;
if (apr_hash_count(deltas) != 1)
/* Deltas on "/trunk" expected. */
@@ -479,12 +480,11 @@ test_diff_mergeinfo(apr_pool_t *pool)
static svn_error_t *
test_rangelist_reverse(apr_pool_t *pool)
{
- apr_array_header_t *rangelist;
+ svn_rangelist_t *rangelist;
svn_merge_range_t expected_rangelist[3] =
{ {10, 9, TRUE}, {7, 4, TRUE}, {3, 2, TRUE} };
- SVN_ERR(svn_mergeinfo_parse(&info1, "/trunk: 3,5-7,10", pool));
- rangelist = apr_hash_get(info1, "/trunk", APR_HASH_KEY_STRING);
+ SVN_ERR(svn_rangelist__parse(&rangelist, "3,5-7,10", pool));
SVN_ERR(svn_rangelist_reverse(rangelist, pool));
@@ -495,7 +495,7 @@ test_rangelist_reverse(apr_pool_t *pool)
static svn_error_t *
test_rangelist_intersect(apr_pool_t *pool)
{
- apr_array_header_t *rangelist1, *rangelist2, *intersection;
+ svn_rangelist_t *rangelist1, *rangelist2, *intersection;
/* Expected intersection when considering inheritance. */
svn_merge_range_t intersection_consider_inheritance[] =
@@ -506,11 +506,9 @@ test_rangelist_intersect(apr_pool_t *pool)
{ {0, 1, TRUE}, {2, 4, TRUE}, {11, 12, TRUE}, {30, 32, FALSE},
{39, 42, TRUE} };
- SVN_ERR(svn_mergeinfo_parse(&info1, "/trunk: 1-6,12-16,30-32*,40-42", pool));
- SVN_ERR(svn_mergeinfo_parse(&info2, "/trunk: 1,3-4*,7,9,11-12,31-34*,38-44",
- pool));
- rangelist1 = apr_hash_get(info1, "/trunk", APR_HASH_KEY_STRING);
- rangelist2 = apr_hash_get(info2, "/trunk", APR_HASH_KEY_STRING);
+ SVN_ERR(svn_rangelist__parse(&rangelist1, "1-6,12-16,30-32*,40-42", pool));
+ SVN_ERR(svn_rangelist__parse(&rangelist2, "1,3-4*,7,9,11-12,31-34*,38-44",
+ pool));
/* Check the intersection while considering inheritance twice, reversing
the order of the rangelist arguments on the second call to
@@ -565,7 +563,7 @@ test_mergeinfo_intersect(apr_pool_t *pool)
{
svn_merge_range_t expected_intersection[3] =
{ {0, 1, TRUE}, {2, 4, TRUE}, {11, 12, TRUE} };
- apr_array_header_t *rangelist;
+ svn_rangelist_t *rangelist;
apr_hash_t *intersection;
SVN_ERR(svn_mergeinfo_parse(&info1, "/trunk: 1-6,12-16\n/foo: 31", pool));
@@ -605,6 +603,7 @@ test_merge_mergeinfo(apr_pool_t *pool)
struct mergeinfo_merge_path_range
{
const char *path;
+ int expected_n;
svn_merge_range_t expected_rngs[MAX_NBR_MERGEINFO_RANGES];
};
@@ -627,75 +626,75 @@ test_merge_mergeinfo(apr_pool_t *pool)
/* One path, intersecting inheritable ranges */
{ "/trunk: 5-10",
"/trunk: 6", 1,
- { {"/trunk", { {4, 10, TRUE} } } } },
+ { {"/trunk", 1, { {4, 10, TRUE} } } } },
/* One path, intersecting non-inheritable ranges */
{ "/trunk: 5-10*",
"/trunk: 6*", 1,
- { {"/trunk", { {4, 10, FALSE} } } } },
+ { {"/trunk", 1, { {4, 10, FALSE} } } } },
/* One path, intersecting ranges with different inheritability */
{ "/trunk: 5-10",
"/trunk: 6*", 1,
- { {"/trunk", { {4, 10, TRUE} } } } },
+ { {"/trunk", 1, { {4, 10, TRUE} } } } },
/* One path, intersecting ranges with different inheritability */
{ "/trunk: 5-10*",
"/trunk: 6", 1,
- { {"/trunk", { {4, 5, FALSE}, {5, 6, TRUE}, {6, 10, FALSE} } } } },
+ { {"/trunk", 3, { {4, 5, FALSE}, {5, 6, TRUE}, {6, 10, FALSE} } } } },
/* Adjacent ranges all inheritable ranges */
{ "/trunk: 1,3,5-11,13",
"/trunk: 2,4,12,14-22", 1,
- { {"/trunk", { {0, 22, TRUE} } } } },
+ { {"/trunk", 1, { {0, 22, TRUE} } } } },
/* Adjacent ranges all non-inheritable ranges */
{ "/trunk: 1*,3*,5-11*,13*",
"/trunk: 2*,4*,12*,14-22*", 1,
- { {"/trunk", { {0, 22, FALSE} } } } },
+ { {"/trunk", 1, { {0, 22, FALSE} } } } },
/* Adjacent ranges differing inheritability */
{ "/trunk: 1*,3*,5-11*,13*",
"/trunk: 2,4,12,14-22", 1,
- { {"/trunk", { { 0, 1, FALSE}, { 1, 2, TRUE},
- { 2, 3, FALSE}, { 3, 4, TRUE},
- { 4, 11, FALSE}, {11, 12, TRUE},
- {12, 13, FALSE}, {13, 22, TRUE} } } } },
+ { {"/trunk", 8, { { 0, 1, FALSE}, { 1, 2, TRUE},
+ { 2, 3, FALSE}, { 3, 4, TRUE},
+ { 4, 11, FALSE}, {11, 12, TRUE},
+ {12, 13, FALSE}, {13, 22, TRUE} } } } },
/* Adjacent ranges differing inheritability */
{ "/trunk: 1,3,5-11,13",
"/trunk: 2*,4*,12*,14-22*", 1,
- { {"/trunk", { { 0, 1, TRUE}, { 1, 2, FALSE},
- { 2, 3, TRUE}, { 3, 4, FALSE},
- { 4, 11, TRUE}, {11, 12, FALSE},
- {12, 13, TRUE}, {13, 22, FALSE} } } } },
+ { {"/trunk", 8, { { 0, 1, TRUE}, { 1, 2, FALSE},
+ { 2, 3, TRUE}, { 3, 4, FALSE},
+ { 4, 11, TRUE}, {11, 12, FALSE},
+ {12, 13, TRUE}, {13, 22, FALSE} } } } },
/* Two paths all inheritable ranges */
{ "/trunk::1: 3,5,7-9,10,11,13,14\n/fred:8-10",
"/trunk::1: 1-4,6\n/fred:9-12", 2,
- { {"/trunk::1", { {0, 11, TRUE}, {12, 14, TRUE} } },
- {"/fred", { {7, 12, TRUE} } } } },
+ { {"/trunk::1", 2, { {0, 11, TRUE}, {12, 14, TRUE} } },
+ {"/fred", 1, { {7, 12, TRUE} } } } },
/* Two paths all non-inheritable ranges */
{ "/trunk: 3*,5*,7-9*,10*,11*,13*,14*\n/fred:8-10*",
"/trunk: 1-4*,6*\n/fred:9-12*", 2,
- { {"/trunk", { {0, 11, FALSE}, {12, 14, FALSE} } },
- {"/fred", { {7, 12, FALSE} } } } },
+ { {"/trunk", 2, { {0, 11, FALSE}, {12, 14, FALSE} } },
+ {"/fred", 1, { {7, 12, FALSE} } } } },
/* Two paths mixed inheritability */
{ "/trunk: 3,5*,7-9,10,11*,13,14\n/fred:8-10",
"/trunk: 1-4,6\n/fred:9-12*", 2,
- { {"/trunk", { { 0, 4, TRUE }, { 4, 5, FALSE}, {5, 10, TRUE},
- {10, 11, FALSE}, {12, 14, TRUE } } },
- {"/fred", { { 7, 10, TRUE }, {10, 12, FALSE} } } } },
+ { {"/trunk", 5, { { 0, 4, TRUE }, { 4, 5, FALSE}, {5, 10, TRUE},
+ {10, 11, FALSE}, {12, 14, TRUE } } },
+ {"/fred", 2, { { 7, 10, TRUE }, {10, 12, FALSE} } } } },
/* A slew of different paths but no ranges to be merged */
{ "/trunk: 3,5-9*\n/betty: 2-4",
"/fred: 1-18\n/:barney: 1,3-43", 4,
- { {"/trunk", { {2, 3, TRUE}, {4, 9, FALSE} } },
- {"/betty", { {1, 4, TRUE} } },
- {"/:barney", { {0, 1, TRUE}, {2, 43, TRUE} } },
- {"/fred", { {0, 18, TRUE} } } } }
+ { {"/trunk", 2, { {2, 3, TRUE}, {4, 9, FALSE} } },
+ {"/betty", 1, { {1, 4, TRUE} } },
+ {"/:barney", 2, { {0, 1, TRUE}, {2, 43, TRUE} } },
+ {"/fred", 1, { {0, 18, TRUE} } } } }
};
for (i = 0; i < NBR_MERGEINFO_MERGES; i++)
@@ -714,7 +713,7 @@ test_merge_mergeinfo(apr_pool_t *pool)
SVN_ERR(svn_mergeinfo_to_string(&info2_starting, info2, pool));
SVN_ERR(svn_mergeinfo_merge(info1, info2, pool));
- if (mergeinfo[i].expected_paths != apr_hash_count(info1))
+ if (mergeinfo[i].expected_paths != (int)apr_hash_count(info1))
return fail(pool, "Wrong number of paths in merged mergeinfo");
/* Check that info2 remained unchanged. */
@@ -730,36 +729,18 @@ test_merge_mergeinfo(apr_pool_t *pool)
for (j = 0; j < mergeinfo[i].expected_paths; j++)
{
- int k;
- apr_array_header_t *rangelist =
+ svn_rangelist_t *rangelist =
apr_hash_get(info1, mergeinfo[i].path_rngs[j].path,
APR_HASH_KEY_STRING);
if (!rangelist)
return fail(pool, "Missing path '%s' in merged mergeinfo",
- mergeinfo[i].path_rngs->path);
- for (k = 0; k < rangelist->nelts; k++)
- {
- svn_merge_range_t *ranges =
- APR_ARRAY_IDX(rangelist, k, svn_merge_range_t *);
- if (ranges->start
- != mergeinfo[i].path_rngs[j].expected_rngs[k].start
- || ranges->end
- != mergeinfo[i].path_rngs[j].expected_rngs[k].end
- || ranges->inheritable
- != mergeinfo[i].path_rngs[j].expected_rngs[k].inheritable)
- return fail(
- pool,
- "Range'%i-%i%s' not found in merged mergeinfo",
- mergeinfo[i].path_rngs->expected_rngs[k].start,
- mergeinfo[i].path_rngs->expected_rngs[k].end,
- mergeinfo[i].path_rngs->expected_rngs[k].inheritable
- ? "" : "*");
- }
- /* Were more ranges expected? */
- if (k < MAX_NBR_MERGEINFO_RANGES
- && mergeinfo[i].path_rngs[j].expected_rngs[k].start != 0)
- return fail(pool,
- "Not all expected ranges found in merged mergeinfo");
+ mergeinfo[i].path_rngs[j].path);
+ SVN_ERR(verify_ranges_match(
+ rangelist,
+ mergeinfo[i].path_rngs[j].expected_rngs,
+ mergeinfo[i].path_rngs[j].expected_n,
+ apr_psprintf(pool, "svn_rangelist_merge case %i:%i", i, j),
+ "merge", pool));
}
}
@@ -771,7 +752,7 @@ test_remove_rangelist(apr_pool_t *pool)
{
int i, j;
svn_error_t *err, *child_err;
- apr_array_header_t *output, *eraser, *whiteboard;
+ svn_rangelist_t *output, *eraser, *whiteboard;
/* Struct for svn_rangelist_remove test data.
Parse WHITEBOARD and ERASER to hashes and then get the rangelist for
@@ -800,39 +781,39 @@ test_remove_rangelist(apr_pool_t *pool)
struct rangelist_remove_test_data test_data[SIZE_OF_RANGE_REMOVE_TEST_ARRAY] =
{
/* Eraser is a proper subset of whiteboard */
- {"/A: 1-44", "/A: 5", 2, { {0, 4, TRUE }, {5, 44, TRUE }},
- 2, { {0, 4, TRUE }, {5, 44, TRUE }}},
- {"/A: 1-44*", "/A: 5", 1, { {0, 44, FALSE} },
- 2, { {0, 4, FALSE}, {5, 44, FALSE}}},
- {"/A: 1-44", "/A: 5*", 1, { {0, 44, TRUE } },
- 2, { {0, 4, TRUE }, {5, 44, TRUE }}},
- {"/A: 1-44*", "/A: 5*", 2, { {0, 4, FALSE}, {5, 44, FALSE}},
- 2, { {0, 4, FALSE}, {5, 44, FALSE}}},
+ {"1-44", "5", 2, { {0, 4, TRUE }, {5, 44, TRUE }},
+ 2, { {0, 4, TRUE }, {5, 44, TRUE }}},
+ {"1-44*", "5", 1, { {0, 44, FALSE} },
+ 2, { {0, 4, FALSE}, {5, 44, FALSE}}},
+ {"1-44", "5*", 1, { {0, 44, TRUE } },
+ 2, { {0, 4, TRUE }, {5, 44, TRUE }}},
+ {"1-44*", "5*", 2, { {0, 4, FALSE}, {5, 44, FALSE}},
+ 2, { {0, 4, FALSE}, {5, 44, FALSE}}},
/* Non-intersecting ranges...nothing is removed */
- {"/A: 2-9,14-19", "/A: 12", 2, { {1, 9, TRUE }, {13, 19, TRUE }},
- 2, { {1, 9, TRUE }, {13, 19, TRUE }}},
- {"/A: 2-9*,14-19*", "/A: 12", 2, { {1, 9, FALSE}, {13, 19, FALSE}},
- 2, { {1, 9, FALSE}, {13, 19, FALSE}}},
- {"/A: 2-9,14-19", "/A: 12*", 2, { {1, 9, TRUE }, {13, 19, TRUE }},
- 2, { {1, 9, TRUE }, {13, 19, TRUE }}},
- {"/A: 2-9*,14-19*", "/A: 12*", 2, { {1, 9, FALSE}, {13, 19, FALSE}},
- 2, { {1, 9, FALSE}, {13, 19, FALSE}}},
+ {"2-9,14-19", "12", 2, { {1, 9, TRUE }, {13, 19, TRUE }},
+ 2, { {1, 9, TRUE }, {13, 19, TRUE }}},
+ {"2-9*,14-19*", "12", 2, { {1, 9, FALSE}, {13, 19, FALSE}},
+ 2, { {1, 9, FALSE}, {13, 19, FALSE}}},
+ {"2-9,14-19", "12*", 2, { {1, 9, TRUE }, {13, 19, TRUE }},
+ 2, { {1, 9, TRUE }, {13, 19, TRUE }}},
+ {"2-9*,14-19*", "12*", 2, { {1, 9, FALSE}, {13, 19, FALSE}},
+ 2, { {1, 9, FALSE}, {13, 19, FALSE}}},
/* Eraser overlaps whiteboard */
- {"/A: 1,9-17", "/A: 12-20", 2, { {0, 1, TRUE }, {8, 11, TRUE }},
- 2, { {0, 1, TRUE }, {8, 11, TRUE }}},
- {"/A: 1,9-17*", "/A: 12-20", 2, { {0, 1, TRUE }, {8, 17, FALSE}},
- 2, { {0, 1, TRUE }, {8, 11, FALSE}}},
- {"/A: 1,9-17", "/A: 12-20*", 2, { {0, 1, TRUE }, {8, 17, TRUE }},
- 2, { {0, 1, TRUE }, {8, 11, TRUE }}},
- {"/A: 1,9-17*", "/A: 12-20*", 2, { {0, 1, TRUE }, {8, 11, FALSE}},
- 2, { {0, 1, TRUE }, {8, 11, FALSE}}},
- /* Empty mergeinfo (i.e. empty rangelist) */
- {"", "", 0, { {0, 0, FALSE}},
- 0, { {0, 0, FALSE}}},
- {"", "/A: 5-8,10-100", 0, { {0, 0, FALSE}},
- 0, { {0, 0, FALSE}}},
- {"/A: 5-8,10-100", "", 2, { {4, 8, TRUE }, {9, 100, TRUE }},
- 2, { {4, 8, TRUE }, {9, 100, TRUE }}}
+ {"1,9-17", "12-20", 2, { {0, 1, TRUE }, {8, 11, TRUE }},
+ 2, { {0, 1, TRUE }, {8, 11, TRUE }}},
+ {"1,9-17*", "12-20", 2, { {0, 1, TRUE }, {8, 17, FALSE}},
+ 2, { {0, 1, TRUE }, {8, 11, FALSE}}},
+ {"1,9-17", "12-20*", 2, { {0, 1, TRUE }, {8, 17, TRUE }},
+ 2, { {0, 1, TRUE }, {8, 11, TRUE }}},
+ {"1,9-17*", "12-20*", 2, { {0, 1, TRUE }, {8, 11, FALSE}},
+ 2, { {0, 1, TRUE }, {8, 11, FALSE}}},
+ /* Empty rangelist */
+ {"", "", 0, { {0, 0, FALSE}},
+ 0, { {0, 0, FALSE}}},
+ {"", "5-8,10-100", 0, { {0, 0, FALSE}},
+ 0, { {0, 0, FALSE}}},
+ {"5-8,10-100", "", 2, { {4, 8, TRUE }, {9, 100, TRUE }},
+ 2, { {4, 8, TRUE }, {9, 100, TRUE }}}
};
err = child_err = SVN_NO_ERROR;
@@ -847,10 +828,8 @@ test_remove_rangelist(apr_pool_t *pool)
svn_string_t *whiteboard_starting;
svn_string_t *whiteboard_ending;
- SVN_ERR(svn_mergeinfo_parse(&info1, (test_data[i]).eraser, pool));
- SVN_ERR(svn_mergeinfo_parse(&info2, (test_data[i]).whiteboard, pool));
- eraser = apr_hash_get(info1, "/A", APR_HASH_KEY_STRING);
- whiteboard = apr_hash_get(info2, "/A", APR_HASH_KEY_STRING);
+ SVN_ERR(svn_rangelist__parse(&eraser, test_data[i].eraser, pool));
+ SVN_ERR(svn_rangelist__parse(&whiteboard, test_data[i].whiteboard, pool));
/* Represent empty mergeinfo with an empty rangelist. */
if (eraser == NULL)
@@ -960,7 +939,7 @@ randomly_fill_rev_array(svn_boolean_t *revs)
/* Set *RANGELIST to a rangelist representing the revisions that are marked
* with TRUE in the array REVS[RANDOM_REV_ARRAY_LENGTH]. */
static svn_error_t *
-rev_array_to_rangelist(apr_array_header_t **rangelist,
+rev_array_to_rangelist(svn_rangelist_t **rangelist,
svn_boolean_t *revs,
apr_pool_t *pool)
{
@@ -1002,7 +981,7 @@ test_rangelist_remove_randomly(apr_pool_t *pool)
svn_boolean_t first_revs[RANDOM_REV_ARRAY_LENGTH],
second_revs[RANDOM_REV_ARRAY_LENGTH],
expected_revs[RANDOM_REV_ARRAY_LENGTH];
- apr_array_header_t *first_rangelist, *second_rangelist,
+ svn_rangelist_t *first_rangelist, *second_rangelist,
*expected_rangelist, *actual_rangelist;
/* There will be at most RANDOM_REV_ARRAY_LENGTH ranges in
expected_rangelist. */
@@ -1060,7 +1039,7 @@ test_rangelist_intersect_randomly(apr_pool_t *pool)
svn_boolean_t first_revs[RANDOM_REV_ARRAY_LENGTH],
second_revs[RANDOM_REV_ARRAY_LENGTH],
expected_revs[RANDOM_REV_ARRAY_LENGTH];
- apr_array_header_t *first_rangelist, *second_rangelist,
+ svn_rangelist_t *first_rangelist, *second_rangelist,
*expected_rangelist, *actual_rangelist;
/* There will be at most RANDOM_REV_ARRAY_LENGTH ranges in
expected_rangelist. */
@@ -1127,7 +1106,7 @@ test_remove_mergeinfo(apr_pool_t *pool)
static svn_error_t *
test_rangelist_to_string(apr_pool_t *pool)
{
- apr_array_header_t *result;
+ svn_rangelist_t *result;
svn_string_t *output;
svn_string_t *expected = svn_string_create("3,5,7-11,13-14", pool);
@@ -1139,7 +1118,7 @@ test_rangelist_to_string(apr_pool_t *pool)
SVN_ERR(svn_rangelist_to_string(&output, result, pool));
- if (svn_string_compare(expected, output) != TRUE)
+ if (!svn_string_compare(expected, output))
return fail(pool, "Rangelist string not what we expected");
return SVN_NO_ERROR;
@@ -1156,7 +1135,7 @@ test_mergeinfo_to_string(apr_pool_t *pool)
SVN_ERR(svn_mergeinfo_to_string(&output, info1, pool));
- if (svn_string_compare(expected, output) != TRUE)
+ if (!svn_string_compare(expected, output))
return fail(pool, "Mergeinfo string not what we expected");
/* Manually construct some mergeinfo with relative path
@@ -1172,7 +1151,7 @@ test_mergeinfo_to_string(apr_pool_t *pool)
apr_hash_get(info1, "/trunk", APR_HASH_KEY_STRING));
SVN_ERR(svn_mergeinfo_to_string(&output, info2, pool));
- if (svn_string_compare(expected, output) != TRUE)
+ if (!svn_string_compare(expected, output))
return fail(pool, "Mergeinfo string not what we expected");
return SVN_NO_ERROR;
@@ -1184,7 +1163,7 @@ test_rangelist_merge(apr_pool_t *pool)
{
int i;
svn_error_t *err, *child_err;
- apr_array_header_t *rangelist1, *rangelist2;
+ svn_rangelist_t *rangelist1, *rangelist2;
/* Struct for svn_rangelist_merge test data. Similar to
mergeinfo_merge_test_data struct in svn_mergeinfo_merge() test. */
@@ -1201,118 +1180,118 @@ test_rangelist_merge(apr_pool_t *pool)
struct rangelist_merge_test_data test_data[SIZE_OF_RANGE_MERGE_TEST_ARRAY] =
{
/* Non-intersecting ranges */
- {"/A: 1-44", "/A: 70-101", 2, {{ 0, 44, TRUE }, {69, 101, TRUE }}},
- {"/A: 1-44*", "/A: 70-101", 2, {{ 0, 44, FALSE}, {69, 101, TRUE }}},
- {"/A: 1-44", "/A: 70-101*", 2, {{ 0, 44, TRUE }, {69, 101, FALSE}}},
- {"/A: 1-44*", "/A: 70-101*", 2, {{ 0, 44, FALSE}, {69, 101, FALSE}}},
- {"/A: 70-101", "/A: 1-44", 2, {{ 0, 44, TRUE }, {69, 101, TRUE }}},
- {"/A: 70-101*", "/A: 1-44", 2, {{ 0, 44, TRUE }, {69, 101, FALSE}}},
- {"/A: 70-101", "/A: 1-44*", 2, {{ 0, 44, FALSE}, {69, 101, TRUE }}},
- {"/A: 70-101*", "/A: 1-44*", 2, {{ 0, 44, FALSE}, {69, 101, FALSE}}},
+ {"1-44", "70-101", 2, {{ 0, 44, TRUE }, {69, 101, TRUE }}},
+ {"1-44*", "70-101", 2, {{ 0, 44, FALSE}, {69, 101, TRUE }}},
+ {"1-44", "70-101*", 2, {{ 0, 44, TRUE }, {69, 101, FALSE}}},
+ {"1-44*", "70-101*", 2, {{ 0, 44, FALSE}, {69, 101, FALSE}}},
+ {"70-101", "1-44", 2, {{ 0, 44, TRUE }, {69, 101, TRUE }}},
+ {"70-101*", "1-44", 2, {{ 0, 44, TRUE }, {69, 101, FALSE}}},
+ {"70-101", "1-44*", 2, {{ 0, 44, FALSE}, {69, 101, TRUE }}},
+ {"70-101*", "1-44*", 2, {{ 0, 44, FALSE}, {69, 101, FALSE}}},
/* Intersecting ranges with same starting and ending revisions */
- {"/A: 4-20", "/A: 4-20", 1, {{3, 20, TRUE }}},
- {"/A: 4-20*", "/A: 4-20", 1, {{3, 20, TRUE }}},
- {"/A: 4-20", "/A: 4-20*", 1, {{3, 20, TRUE }}},
- {"/A: 4-20*", "/A: 4-20*", 1, {{3, 20, FALSE}}},
+ {"4-20", "4-20", 1, {{3, 20, TRUE }}},
+ {"4-20*", "4-20", 1, {{3, 20, TRUE }}},
+ {"4-20", "4-20*", 1, {{3, 20, TRUE }}},
+ {"4-20*", "4-20*", 1, {{3, 20, FALSE}}},
/* Intersecting ranges with same starting revision */
- {"/A: 6-17", "/A: 6-12", 1, {{5, 17, TRUE}}},
- {"/A: 6-17*", "/A: 6-12", 2, {{5, 12, TRUE }, {12, 17, FALSE}}},
- {"/A: 6-17", "/A: 6-12*", 1, {{5, 17, TRUE }}},
- {"/A: 6-17*", "/A: 6-12*", 1, {{5, 17, FALSE}}},
- {"/A: 6-12", "/A: 6-17", 1, {{5, 17, TRUE }}},
- {"/A: 6-12*", "/A: 6-17", 1, {{5, 17, TRUE }}},
- {"/A: 6-12", "/A: 6-17*", 2, {{5, 12, TRUE }, {12, 17, FALSE}}},
- {"/A: 6-12*", "/A: 6-17*", 1, {{5, 17, FALSE}}},
+ {"6-17", "6-12", 1, {{5, 17, TRUE}}},
+ {"6-17*", "6-12", 2, {{5, 12, TRUE }, {12, 17, FALSE}}},
+ {"6-17", "6-12*", 1, {{5, 17, TRUE }}},
+ {"6-17*", "6-12*", 1, {{5, 17, FALSE}}},
+ {"6-12", "6-17", 1, {{5, 17, TRUE }}},
+ {"6-12*", "6-17", 1, {{5, 17, TRUE }}},
+ {"6-12", "6-17*", 2, {{5, 12, TRUE }, {12, 17, FALSE}}},
+ {"6-12*", "6-17*", 1, {{5, 17, FALSE}}},
/* Intersecting ranges with same ending revision */
- {"/A: 5-77", "/A: 44-77", 1, {{4, 77, TRUE }}},
- {"/A: 5-77*", "/A: 44-77", 2, {{4, 43, FALSE}, {43, 77, TRUE}}},
- {"/A: 5-77", "/A: 44-77*", 1, {{4, 77, TRUE }}},
- {"/A: 5-77*", "/A: 44-77*", 1, {{4, 77, FALSE}}},
- {"/A: 44-77", "/A: 5-77", 1, {{4, 77, TRUE }}},
- {"/A: 44-77*", "/A: 5-77", 1, {{4, 77, TRUE }}},
- {"/A: 44-77", "/A: 5-77*", 2, {{4, 43, FALSE}, {43, 77, TRUE}}},
- {"/A: 44-77*", "/A: 5-77*", 1, {{4, 77, FALSE}}},
+ {"5-77", "44-77", 1, {{4, 77, TRUE }}},
+ {"5-77*", "44-77", 2, {{4, 43, FALSE}, {43, 77, TRUE}}},
+ {"5-77", "44-77*", 1, {{4, 77, TRUE }}},
+ {"5-77*", "44-77*", 1, {{4, 77, FALSE}}},
+ {"44-77", "5-77", 1, {{4, 77, TRUE }}},
+ {"44-77*", "5-77", 1, {{4, 77, TRUE }}},
+ {"44-77", "5-77*", 2, {{4, 43, FALSE}, {43, 77, TRUE}}},
+ {"44-77*", "5-77*", 1, {{4, 77, FALSE}}},
/* Intersecting ranges with different starting and ending revision
where one range is a proper subset of the other. */
- {"/A: 12-24", "/A: 20-23", 1, {{11, 24, TRUE }}},
- {"/A: 12-24*", "/A: 20-23", 3, {{11, 19, FALSE}, {19, 23, TRUE },
- {23, 24, FALSE}}},
- {"/A: 12-24", "/A: 20-23*", 1, {{11, 24, TRUE }}},
- {"/A: 12-24*", "/A: 20-23*", 1, {{11, 24, FALSE}}},
- {"/A: 20-23", "/A: 12-24", 1, {{11, 24, TRUE }}},
- {"/A: 20-23*", "/A: 12-24", 1, {{11, 24, TRUE }}},
- {"/A: 20-23", "/A: 12-24*", 3, {{11, 19, FALSE}, {19, 23, TRUE },
- {23, 24, FALSE}}},
- {"/A: 20-23*", "/A: 12-24*", 1, {{11, 24, FALSE}}},
+ {"12-24", "20-23", 1, {{11, 24, TRUE }}},
+ {"12-24*", "20-23", 3, {{11, 19, FALSE}, {19, 23, TRUE },
+ {23, 24, FALSE}}},
+ {"12-24", "20-23*", 1, {{11, 24, TRUE }}},
+ {"12-24*", "20-23*", 1, {{11, 24, FALSE}}},
+ {"20-23", "12-24", 1, {{11, 24, TRUE }}},
+ {"20-23*", "12-24", 1, {{11, 24, TRUE }}},
+ {"20-23", "12-24*", 3, {{11, 19, FALSE}, {19, 23, TRUE },
+ {23, 24, FALSE}}},
+ {"20-23*", "12-24*", 1, {{11, 24, FALSE}}},
/* Intersecting ranges with different starting and ending revision
where neither range is a proper subset of the other. */
- {"/A: 50-73", "/A: 60-99", 1, {{49, 99, TRUE }}},
- {"/A: 50-73*", "/A: 60-99", 2, {{49, 59, FALSE}, {59, 99, TRUE }}},
- {"/A: 50-73", "/A: 60-99*", 2, {{49, 73, TRUE }, {73, 99, FALSE}}},
- {"/A: 50-73*", "/A: 60-99*", 1, {{49, 99, FALSE}}},
- {"/A: 60-99", "/A: 50-73", 1, {{49, 99, TRUE }}},
- {"/A: 60-99*", "/A: 50-73", 2, {{49, 73, TRUE }, {73, 99, FALSE}}},
- {"/A: 60-99", "/A: 50-73*", 2, {{49, 59, FALSE}, {59, 99, TRUE }}},
- {"/A: 60-99*", "/A: 50-73*", 1, {{49, 99, FALSE}}},
+ {"50-73", "60-99", 1, {{49, 99, TRUE }}},
+ {"50-73*", "60-99", 2, {{49, 59, FALSE}, {59, 99, TRUE }}},
+ {"50-73", "60-99*", 2, {{49, 73, TRUE }, {73, 99, FALSE}}},
+ {"50-73*", "60-99*", 1, {{49, 99, FALSE}}},
+ {"60-99", "50-73", 1, {{49, 99, TRUE }}},
+ {"60-99*", "50-73", 2, {{49, 73, TRUE }, {73, 99, FALSE}}},
+ {"60-99", "50-73*", 2, {{49, 59, FALSE}, {59, 99, TRUE }}},
+ {"60-99*", "50-73*", 1, {{49, 99, FALSE}}},
/* Multiple ranges. */
- {"/A: 1-5,7,12-13", "/A: 2-17", 1, {{0, 17, TRUE }}},
- {"/A: 1-5*,7*,12-13*", "/A: 2-17*", 1, {{0, 17, FALSE}}},
+ {"1-5,7,12-13", "2-17", 1, {{0, 17, TRUE }}},
+ {"1-5*,7*,12-13*", "2-17*", 1, {{0, 17, FALSE}}},
- {"/A: 1-5,7,12-13", "/A: 2-17*", 6,
+ {"1-5,7,12-13", "2-17*", 6,
{{0, 5, TRUE }, { 5, 6, FALSE}, { 6, 7, TRUE },
{7, 11, FALSE}, {11, 13, TRUE }, {13, 17, FALSE}}},
- {"/A: 1-5*,7*,12-13*", "/A: 2-17", 2,
+ {"1-5*,7*,12-13*", "2-17", 2,
{{0, 1, FALSE}, {1, 17, TRUE }}},
- {"/A: 2-17", "/A: 1-5,7,12-13", 1, {{0, 17, TRUE }}},
- {"/A: 2-17*", "/A: 1-5*,7*,12-13*", 1, {{0, 17, FALSE}}},
+ {"2-17", "1-5,7,12-13", 1, {{0, 17, TRUE }}},
+ {"2-17*", "1-5*,7*,12-13*", 1, {{0, 17, FALSE}}},
- {"/A: 2-17*", "/A: 1-5,7,12-13", 6,
+ {"2-17*", "1-5,7,12-13", 6,
{{0, 5, TRUE }, { 5, 6, FALSE}, { 6, 7, TRUE },
{7, 11, FALSE}, {11, 13, TRUE }, {13, 17, FALSE}}},
- {"/A: 2-17", "/A: 1-5*,7*,12-13*", 2,
+ {"2-17", "1-5*,7*,12-13*", 2,
{{0, 1, FALSE}, {1, 17, TRUE}}},
- {"/A: 3-4*,10-15,20", "/A: 5-60*", 5,
+ {"3-4*,10-15,20", "5-60*", 5,
{{2, 9, FALSE}, {9, 15, TRUE}, {15, 19, FALSE},{19, 20, TRUE},
{20, 60, FALSE}}},
- {"/A: 5-60*", "/A: 3-4*,10-15,20", 5,
+ {"5-60*", "3-4*,10-15,20", 5,
{{2, 9, FALSE}, {9, 15, TRUE}, {15, 19, FALSE},{19, 20, TRUE},
{20, 60, FALSE}}},
- {"/A: 3-4*,50-100*", "/A: 5-60*", 1, {{2, 100, FALSE}}},
+ {"3-4*,50-100*", "5-60*", 1, {{2, 100, FALSE}}},
- {"/A: 5-60*", "/A: 3-4*,50-100*", 1, {{2, 100, FALSE}}},
+ {"5-60*", "3-4*,50-100*", 1, {{2, 100, FALSE}}},
- {"/A: 3-4*,50-100", "/A: 5-60*", 2, {{2, 49, FALSE}, {49, 100, TRUE}}},
+ {"3-4*,50-100", "5-60*", 2, {{2, 49, FALSE}, {49, 100, TRUE}}},
- {"/A: 5-60*", "/A: 3-4*,50-100", 2, {{2, 49, FALSE}, {49, 100, TRUE}}},
+ {"5-60*", "3-4*,50-100", 2, {{2, 49, FALSE}, {49, 100, TRUE}}},
- {"/A: 3-4,50-100*", "/A: 5-60", 2, {{2, 60, TRUE}, {60, 100, FALSE}}},
+ {"3-4,50-100*", "5-60", 2, {{2, 60, TRUE}, {60, 100, FALSE}}},
- {"/A: 5-60", "/A: 3-4,50-100*", 2, {{2, 60, TRUE}, {60, 100, FALSE}}},
+ {"5-60", "3-4,50-100*", 2, {{2, 60, TRUE}, {60, 100, FALSE}}},
- {"/A: 5,9,11-15,17,200-300,999", "/A: 7-50", 4,
+ {"5,9,11-15,17,200-300,999", "7-50", 4,
{{4, 5, TRUE}, {6, 50, TRUE}, {199, 300, TRUE}, {998, 999, TRUE}}},
/* A rangelist merged with an empty rangelist should equal the
non-empty rangelist but in compacted form. */
- {"/A: 1-44,45,46,47-50", "", 1, {{ 0, 50, TRUE }}},
- {"/A: 1,2,3,4,5,6,7,8", "", 1, {{ 0, 8, TRUE }}},
- {"/A: 6-10,12-13,14,15,16-22", "", 2,
+ {"1-44,45,46,47-50", "", 1, {{ 0, 50, TRUE }}},
+ {"1,2,3,4,5,6,7,8", "", 1, {{ 0, 8, TRUE }}},
+ {"6-10,12-13,14,15,16-22", "", 2,
{{ 5, 10, TRUE }, { 11, 22, TRUE }}},
- {"", "/A: 1-44,45,46,47-50", 1, {{ 0, 50, TRUE }}},
- {"", "/A: 1,2,3,4,5,6,7,8", 1, {{ 0, 8, TRUE }}},
- {"", "/A: 6-10,12-13,14,15,16-22", 2,
+ {"", "1-44,45,46,47-50", 1, {{ 0, 50, TRUE }}},
+ {"", "1,2,3,4,5,6,7,8", 1, {{ 0, 8, TRUE }}},
+ {"", "6-10,12-13,14,15,16-22", 2,
{{ 5, 10, TRUE }, { 11, 22, TRUE }}},
/* An empty rangelist merged with an empty rangelist is, drum-roll
@@ -1325,10 +1304,8 @@ test_rangelist_merge(apr_pool_t *pool)
{
svn_string_t *rangelist2_starting, *rangelist2_ending;
- SVN_ERR(svn_mergeinfo_parse(&info1, (test_data[i]).mergeinfo1, pool));
- SVN_ERR(svn_mergeinfo_parse(&info2, (test_data[i]).mergeinfo2, pool));
- rangelist1 = apr_hash_get(info1, "/A", APR_HASH_KEY_STRING);
- rangelist2 = apr_hash_get(info2, "/A", APR_HASH_KEY_STRING);
+ SVN_ERR(svn_rangelist__parse(&rangelist1, test_data[i].mergeinfo1, pool));
+ SVN_ERR(svn_rangelist__parse(&rangelist2, test_data[i].mergeinfo2, pool));
/* Create empty rangelists if necessary. */
if (rangelist1 == NULL)
@@ -1383,7 +1360,7 @@ test_rangelist_diff(apr_pool_t *pool)
{
int i;
svn_error_t *err, *child_err;
- apr_array_header_t *from, *to, *added, *deleted;
+ svn_rangelist_t *from, *to, *added, *deleted;
/* Structure containing two ranges to diff and the expected output of the
diff both when considering and ignoring range inheritance. */
@@ -1412,7 +1389,7 @@ test_rangelist_diff(apr_pool_t *pool)
#define SIZE_OF_RANGE_DIFF_TEST_ARRAY 16
/* The actual test data array.
- 'from' --> {"/A: 1,5-8", "/A: 1,6,10-12", <-- 'to'
+ 'from' --> {"1,5-8", "1,6,10-12", <-- 'to'
Number of adds when --> 1, { { 9, 12, TRUE } },
considering inheritance
@@ -1430,97 +1407,97 @@ test_rangelist_diff(apr_pool_t *pool)
struct rangelist_diff_test_data test_data[SIZE_OF_RANGE_DIFF_TEST_ARRAY] =
{
/* Add and Delete */
- {"/A: 1", "/A: 3",
+ {"1", "3",
1, { { 2, 3, TRUE } },
1, { { 0, 1, TRUE } },
1, { { 2, 3, TRUE } },
1, { { 0, 1, TRUE } } },
/* Add only */
- {"/A: 1", "/A: 1,3",
+ {"1", "1,3",
1, { { 2, 3, TRUE } },
0, { { 0, 0, FALSE } },
1, { { 2, 3, TRUE } },
0, { { 0, 0, FALSE } } },
/* Delete only */
- {"/A: 1,3", "/A: 1",
+ {"1,3", "1",
0, { { 0, 0, FALSE } },
1, { { 2, 3, TRUE } },
0, { { 0, 0, FALSE } },
1, { { 2, 3, TRUE } } },
/* No diff */
- {"/A: 1,3", "/A: 1,3",
+ {"1,3", "1,3",
0, { { 0, 0, FALSE } },
0, { { 0, 0, FALSE } },
0, { { 0, 0, FALSE } },
0, { { 0, 0, FALSE } } },
- {"/A: 1,3*", "/A: 1,3*",
+ {"1,3*", "1,3*",
0, { { 0, 0, FALSE } },
0, { { 0, 0, FALSE } },
0, { { 0, 0, FALSE } },
0, { { 0, 0, FALSE } } },
/* Adds and Deletes */
- {"/A: 1,5-8", "/A: 1,6,10-12",
+ {"1,5-8", "1,6,10-12",
1, { { 9, 12, TRUE } },
2, { { 4, 5, TRUE }, { 6, 8, TRUE } },
1, { { 9, 12, TRUE } },
2, { { 4, 5, TRUE }, { 6, 8, TRUE } } },
- {"/A: 6*", "/A: 6",
+ {"6*", "6",
1, { { 5, 6, TRUE } },
1, { { 5, 6, FALSE } },
0, { { 0, 0, FALSE } },
0, { { 0, 0, FALSE } } },
/* Intersecting range with different inheritability */
- {"/A: 6", "/A: 6*",
+ {"6", "6*",
1, { { 5, 6, FALSE } },
1, { { 5, 6, TRUE } },
0, { { 0, 0, FALSE } },
0, { { 0, 0, FALSE } } },
- {"/A: 6*", "/A: 6",
+ {"6*", "6",
1, { { 5, 6, TRUE } },
1, { { 5, 6, FALSE } },
0, { { 0, 0, FALSE } },
0, { { 0, 0, FALSE } } },
- {"/A: 1,5-8", "/A: 1,6*,10-12",
+ {"1,5-8", "1,6*,10-12",
2, { { 5, 6, FALSE }, { 9, 12, TRUE } },
1, { { 4, 8, TRUE } },
1, { { 9, 12, TRUE } },
2, { { 4, 5, TRUE }, { 6, 8, TRUE } } },
- {"/A: 1,5-8*", "/A: 1,6,10-12",
+ {"1,5-8*", "1,6,10-12",
2, { { 5, 6, TRUE }, { 9, 12, TRUE } },
1, { { 4, 8, FALSE } },
1, { { 9, 12, TRUE } },
2, { { 4, 5, FALSE }, { 6, 8, FALSE } } },
/* Empty range diffs */
- {"/A: 3-9", "",
+ {"3-9", "",
0, { { 0, 0, FALSE } },
1, { { 2, 9, TRUE } },
0, { { 0, 0, FALSE } },
1, { { 2, 9, TRUE } } },
- {"/A: 3-9*", "",
+ {"3-9*", "",
0, { { 0, 0, FALSE } },
1, { { 2, 9, FALSE } },
0, { { 0, 0, FALSE } },
1, { { 2, 9, FALSE } } },
- {"", "/A: 3-9",
+ {"", "3-9",
1, { { 2, 9, TRUE } },
0, { { 0, 0, FALSE } },
1, { { 2, 9, TRUE } },
0, { { 0, 0, FALSE } } },
- {"", "/A: 3-9*",
+ {"", "3-9*",
1, { { 2, 9, FALSE } },
0, { { 0, 0, FALSE } },
1, { { 2, 9, FALSE } },
@@ -1537,10 +1514,8 @@ test_rangelist_diff(apr_pool_t *pool)
err = child_err = SVN_NO_ERROR;
for (i = 0; i < SIZE_OF_RANGE_DIFF_TEST_ARRAY; i++)
{
- SVN_ERR(svn_mergeinfo_parse(&info1, (test_data[i]).to, pool));
- SVN_ERR(svn_mergeinfo_parse(&info2, (test_data[i]).from, pool));
- to = apr_hash_get(info1, "/A", APR_HASH_KEY_STRING);
- from = apr_hash_get(info2, "/A", APR_HASH_KEY_STRING);
+ SVN_ERR(svn_rangelist__parse(&to, test_data[i].to, pool));
+ SVN_ERR(svn_rangelist__parse(&from, test_data[i].from, pool));
/* Represent empty mergeinfo with an empty rangelist. */
if (to == NULL)
@@ -1721,7 +1696,7 @@ struct svn_test_descriptor_t test_funcs[] =
SVN_TEST_PASS2(test_diff_mergeinfo,
"diff of mergeinfo"),
SVN_TEST_PASS2(test_merge_mergeinfo,
- "merging of mergeinfo hashs"),
+ "merging of mergeinfo hashes"),
SVN_TEST_PASS2(test_mergeinfo_intersect,
"intersection of mergeinfo"),
SVN_TEST_PASS2(test_rangelist_to_string,
diff --git a/subversion/tests/libsvn_subr/named_atomic-test-common.h b/subversion/tests/libsvn_subr/named_atomic-test-common.h
new file mode 100644
index 0000000..2ada4ee
--- /dev/null
+++ b/subversion/tests/libsvn_subr/named_atomic-test-common.h
@@ -0,0 +1,245 @@
+/*
+ * named_atomic-test-common.h: shared function implementations for
+ * named_atomic-test
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+
+
+#include "../svn_test.h"
+#include "svn_pools.h"
+#include "private/svn_named_atomic.h"
+
+/* Some constants that we will use in our tests */
+
+/* All our atomics start with that name */
+#define ATOMIC_NAME "MyTestAtomic"
+
+/* Factor used to create non-trivial 64 bit numbers */
+#define HUGE_VALUE 1234567890123456ll
+
+/* to separate this code from any production environment */
+const char *name_namespace = NULL;
+const char *name_namespace1 = NULL;
+const char *name_namespace2 = NULL;
+
+/* data structure containing all information we need to check for
+ * a) passing some deadline
+ * b) reaching the maximum iteration number
+ */
+typedef struct watchdog_t
+{
+ apr_time_t deadline;
+ svn_named_atomic__t *atomic_counter;
+ int iterations;
+ int call_count; /* don't call apr_time_now() too often '*/
+} watchdog_t;
+
+/* init the WATCHDOG data structure for checking ATOMIC_COUNTER to reach
+ * ITERATIONS and for the system time to pass a deadline MAX_DURATION
+ * microsecs in the future.
+ */
+static void
+init_watchdog(watchdog_t *watchdog,
+ svn_named_atomic__t *atomic_counter,
+ int iterations,
+ apr_time_t max_duration)
+{
+ watchdog->deadline = apr_time_now() + max_duration;
+ watchdog->atomic_counter = atomic_counter;
+ watchdog->iterations = iterations;
+ watchdog->call_count = 0;
+}
+
+/* test for watchdog conditions */
+static svn_error_t *
+check_watchdog(watchdog_t *watchdog, svn_boolean_t *done)
+{
+ apr_int64_t counter = 0;
+
+ /* check for normal end of loop.
+ * We are a watchdog, so don't check for errors. */
+ *done = FALSE;
+ svn_error_clear(svn_named_atomic__read(&counter,
+ watchdog->atomic_counter));
+ if (counter >= watchdog->iterations)
+ {
+ *done = TRUE;
+ return SVN_NO_ERROR;
+ }
+
+ /* Check the system time and indicate when deadline has passed */
+ if (++watchdog->call_count > 100)
+ {
+ watchdog->call_count = 100;
+ if (apr_time_now() > watchdog->deadline)
+ return svn_error_createf(SVN_ERR_TEST_FAILED,
+ 0,
+ "Deadline has passed at iteration %d/%d",
+ (int)counter, watchdog->iterations);
+ }
+
+ /* no problem so far */
+ return SVN_NO_ERROR;
+}
+
+/* "pipeline" test: initialization code executed by the worker with ID 0.
+ * Pushes COUNT tokens into ATOMIC_OUT and checks for ATOMIC_COUNTER not to
+ * exceed ITERATIONS (early termination).
+ */
+static svn_error_t *
+test_pipeline_prepare(svn_named_atomic__t *atomic_out,
+ int count,
+ watchdog_t *watchdog)
+{
+ apr_int64_t value = 0;
+ int i;
+ svn_boolean_t done = FALSE;
+
+ /* Initialize values in thread 0, pass them along in other threads */
+
+ for (i = 1; i <= count; ++i)
+ do
+ {
+ /* Generate new token (once the old one has been removed)*/
+ SVN_ERR(svn_named_atomic__cmpxchg(&value,
+ i,
+ 0,
+ atomic_out));
+ SVN_ERR(check_watchdog(watchdog, &done));
+ if (done) return SVN_NO_ERROR;
+ }
+ while (value != 0);
+
+ return SVN_NO_ERROR;
+}
+
+/* "pipeline" test: the main loop. Each one of the COUNT workers receives
+ * data in its ATOMIC_IN and passes it on to ATOMIC_OUT until ATOMIC_COUNTER
+ * exceeds ITERATIONS.
+ */
+static svn_error_t *
+test_pipeline_loop(svn_named_atomic__t *atomic_in,
+ svn_named_atomic__t *atomic_out,
+ svn_named_atomic__t *atomic_counter,
+ int count,
+ int iterations,
+ watchdog_t *watchdog)
+{
+ apr_int64_t value = 0, old_value, last_value = 0;
+ apr_int64_t counter;
+ svn_boolean_t done = FALSE;
+
+ /* Pass the tokens along */
+
+ do
+ {
+ /* Wait for and consume incoming token. */
+ do
+ {
+ SVN_ERR(svn_named_atomic__write(&value, 0, atomic_in));
+ SVN_ERR(check_watchdog(watchdog, &done));
+ if (done) return SVN_NO_ERROR;
+ }
+ while (value == 0);
+
+ /* All tokes must come in in the same order */
+ SVN_TEST_ASSERT((last_value % count) == (value - 1));
+ last_value = value;
+
+ /* Wait for the target atomic to become vacant and write the token */
+ do
+ {
+ SVN_ERR(svn_named_atomic__cmpxchg(&old_value,
+ value,
+ 0,
+ atomic_out));
+ SVN_ERR(check_watchdog(watchdog, &done));
+ if (done) return SVN_NO_ERROR;
+ }
+ while (old_value != 0);
+
+ /* Count the number of operations */
+ SVN_ERR(svn_named_atomic__add(&counter, 1, atomic_counter));
+ }
+ while (counter < iterations);
+
+ /* done */
+
+ return SVN_NO_ERROR;
+}
+
+/* "pipeline" test: worker with ID 0 initializes the data; all workers
+ * (COUNT in total) have one input and one output bucket that form a ring
+ * spanning all workers. Each worker passes the value along ITERATIONS times.
+ */
+static svn_error_t *
+test_pipeline(int id, int count, int iterations, apr_pool_t *pool)
+{
+ svn_atomic_namespace__t *ns;
+ svn_named_atomic__t *atomic_in;
+ svn_named_atomic__t *atomic_out;
+ svn_named_atomic__t *atomic_counter;
+ svn_error_t *err = SVN_NO_ERROR;
+ watchdog_t watchdog;
+
+ /* get the two I/O atomics for this thread */
+ SVN_ERR(svn_atomic_namespace__create(&ns, name_namespace, pool));
+ SVN_ERR(svn_named_atomic__get(&atomic_in,
+ ns,
+ apr_pstrcat(pool,
+ ATOMIC_NAME,
+ apr_itoa(pool,
+ id),
+ NULL),
+ FALSE));
+ SVN_ERR(svn_named_atomic__get(&atomic_out,
+ ns,
+ apr_pstrcat(pool,
+ ATOMIC_NAME,
+ apr_itoa(pool,
+ (id + 1) % count),
+ NULL),
+ FALSE));
+
+ /* our iteration counter */
+ SVN_ERR(svn_named_atomic__get(&atomic_counter, ns, "counter", FALSE));
+
+ /* safeguard our execution time. Limit it to 20s */
+ init_watchdog(&watchdog, atomic_counter, iterations, 20000000);
+
+ /* fill pipeline */
+ if (id == 0)
+ err = test_pipeline_prepare(atomic_out, count, &watchdog);
+
+ /* Pass the tokens along */
+ if (!err)
+ err = test_pipeline_loop(atomic_in, atomic_out, atomic_counter,
+ count, iterations, &watchdog);
+
+ /* if we experienced an error, cause everybody to exit */
+ if (err)
+ svn_error_clear(svn_named_atomic__write(NULL, iterations, atomic_counter));
+
+ /* done */
+
+ return err;
+}
diff --git a/subversion/tests/libsvn_subr/named_atomic-test-proc.c b/subversion/tests/libsvn_subr/named_atomic-test-proc.c
new file mode 100644
index 0000000..534247c
--- /dev/null
+++ b/subversion/tests/libsvn_subr/named_atomic-test-proc.c
@@ -0,0 +1,86 @@
+/*
+ * named_atomic-test-proc.c: a collection of svn_named_atomic__t tests
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+/* ====================================================================
+ To add tests, look toward the bottom of this file.
+*/
+
+
+#include <stdio.h>
+
+/* shared test implementation */
+#include "named_atomic-test-common.h"
+
+/* Very simple process frame around the actual test code */
+int
+main(int argc, const char *argv[])
+{
+ svn_boolean_t got_error = FALSE;
+ apr_pool_t *pool;
+ svn_error_t *err;
+
+ int id = 0;
+ int count = 0;
+ int iterations = 0;
+
+ /* Initialize APR (Apache pools) */
+ if (apr_initialize() != APR_SUCCESS)
+ {
+ printf("apr_initialize() failed.\n");
+ exit(1);
+ }
+
+ pool = svn_pool_create(NULL);
+
+ /* lean & mean parameter parsing */
+ if (argc != 5)
+ {
+ if (argc == 1) /* used to test that this executable can be started */
+ exit(0);
+
+ printf("Usage: named_atomic-proc-test ID COUNT ITERATIONS NS.\n");
+ exit(1);
+ }
+
+ id = (int)apr_atoi64(argv[1]);
+ count = (int)apr_atoi64(argv[2]);
+ iterations = (int)apr_atoi64(argv[3]);
+ name_namespace = argv[4];
+
+ /* run test routine */
+
+ err = test_pipeline(id, count, iterations, pool);
+ if (err)
+ {
+ const char *prefix = apr_psprintf(pool, "Process %d: ", id);
+ got_error = TRUE;
+ svn_handle_error2(err, stdout, FALSE, prefix);
+ svn_error_clear(err);
+ }
+
+ /* Clean up APR */
+ svn_pool_destroy(pool);
+ apr_terminate();
+
+ return got_error;
+}
diff --git a/subversion/tests/libsvn_subr/named_atomic-test.c b/subversion/tests/libsvn_subr/named_atomic-test.c
new file mode 100644
index 0000000..05604d2
--- /dev/null
+++ b/subversion/tests/libsvn_subr/named_atomic-test.c
@@ -0,0 +1,761 @@
+/*
+ * named_atomic-test.c: a collection of svn_named_atomic__t tests
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+/* ====================================================================
+ To add tests, look toward the bottom of this file.
+*/
+
+
+#include <stdio.h>
+#include <apr_file_io.h>
+
+#include "svn_io.h"
+
+/* shared test implementation */
+#include "named_atomic-test-common.h"
+
+/* Name of the worker process executable */
+#define TEST_PROC "named_atomic-proc-test"
+
+/* number of hardware threads (logical cores) that we may use.
+ * Will be set to at least 2 - even on unicore machines. */
+static int hw_thread_count = 0;
+
+/* number of iterations that we should perform on concurrency tests
+ * (will be calibrated to about 1s runtime)*/
+static int suggested_iterations = 0;
+
+/* If possible, translate PROC to a global path and set DIRECTORY to
+ * the current directory.
+ */
+static svn_error_t *
+adjust_proc_path(const char **proc, const char **directory, apr_pool_t *pool)
+{
+#ifdef WIN32
+ /* Under Windows, the test will not be in the current directory
+ * and neither will be PROC. Therefore, determine its full path */
+ char path [MAX_PATH] = { 0 };
+ GetModuleFileNameA(NULL, path, sizeof(path));
+ *(strrchr(path, '\\') + 1) = 0;
+ *proc = apr_pstrcat(pool, path, *proc, ".exe", NULL);
+
+ /* And we need to set the working dir to our working dir to make
+ * our sub-processes find all DLLs. */
+ GetCurrentDirectoryA(sizeof(path), path);
+ *directory = apr_pstrdup(pool, path);
+#endif
+
+ return SVN_NO_ERROR;
+}
+
+/* Returns true if PROC can be found and executed.
+ */
+static svn_boolean_t
+proc_found(const char *proc, apr_pool_t *pool)
+{
+ static svn_tristate_t result = svn_tristate_unknown;
+
+ if (result == svn_tristate_unknown)
+ {
+ svn_error_t *error = SVN_NO_ERROR;
+ const char * directory = NULL;
+
+ /* all processes and their I/O data */
+ apr_proc_t process;
+ const char * args[2];
+
+ args[0] = proc;
+ args[1] = NULL;
+ svn_error_clear(adjust_proc_path(&args[0], &directory, pool));
+
+ /* try to start the process */
+ error = svn_io_start_cmd3(&process,
+ directory, /* working directory */
+ args[0],
+ args,
+ NULL, /* environment */
+ FALSE, /* no handle inheritance */
+ FALSE, /* no STDIN pipe */
+ NULL,
+ FALSE, /* no STDOUT pipe */
+ NULL,
+ FALSE, /* no STDERR pipe */
+ NULL,
+ pool);
+ if (!error)
+ error = svn_io_wait_for_cmd(&process, proc, NULL, NULL, pool);
+
+ result = error ? svn_tristate_false : svn_tristate_true;
+ svn_error_clear(error);
+ }
+
+ return result == svn_tristate_true;
+}
+
+/* Remove temporary files from disk.
+ */
+static apr_status_t
+cleanup_test_shm(void *arg)
+{
+ apr_pool_t *pool = arg;
+
+ svn_error_clear(svn_atomic_namespace__cleanup(name_namespace, pool));
+ svn_error_clear(svn_atomic_namespace__cleanup(name_namespace1, pool));
+ svn_error_clear(svn_atomic_namespace__cleanup(name_namespace2, pool));
+
+ return 0;
+}
+
+/* Bring shared memory to a defined state. This is very useful in case of
+ * lingering problems from previous tests or test runs.
+ */
+static svn_error_t *
+init_test_shm(apr_pool_t *pool)
+{
+ svn_atomic_namespace__t *ns;
+ svn_named_atomic__t *atomic;
+ apr_pool_t *scratch = svn_pool_create(pool);
+
+ if (name_namespace == NULL)
+ {
+ apr_pool_t *global_pool = svn_pool_create(NULL);
+ SVN_ERR(svn_io_open_unique_file3(NULL,
+ &name_namespace,
+ NULL,
+ svn_io_file_del_on_pool_cleanup,
+ global_pool,
+ pool));
+ SVN_ERR(svn_io_open_unique_file3(NULL,
+ &name_namespace1,
+ NULL,
+ svn_io_file_del_on_pool_cleanup,
+ global_pool,
+ pool));
+ SVN_ERR(svn_io_open_unique_file3(NULL,
+ &name_namespace2,
+ NULL,
+ svn_io_file_del_on_pool_cleanup,
+ global_pool,
+ pool));
+ }
+
+ /* skip tests if the current user does not have the required privileges */
+ if (!svn_named_atomic__is_supported())
+ return svn_error_wrap_apr(SVN_ERR_TEST_SKIPPED,
+ "user has insufficient privileges");
+
+ /* destroy temp files after usage */
+
+ apr_pool_cleanup_register(pool, pool,
+ cleanup_test_shm, apr_pool_cleanup_null);
+
+ /* get the two I/O atomics for this thread */
+ SVN_ERR(svn_atomic_namespace__create(&ns, name_namespace, scratch));
+ SVN_ERR(svn_named_atomic__get(&atomic, ns, ATOMIC_NAME, TRUE));
+ SVN_ERR(svn_named_atomic__write(NULL, 0, atomic));
+ SVN_ERR(svn_named_atomic__get(&atomic, ns, ATOMIC_NAME "1", TRUE));
+ SVN_ERR(svn_named_atomic__write(NULL, 0, atomic));
+ SVN_ERR(svn_named_atomic__get(&atomic, ns, ATOMIC_NAME "2", TRUE));
+ SVN_ERR(svn_named_atomic__write(NULL, 0, atomic));
+
+ svn_pool_clear(scratch);
+
+ SVN_ERR(svn_atomic_namespace__create(&ns, name_namespace1, scratch));
+ SVN_ERR(svn_named_atomic__get(&atomic, ns, ATOMIC_NAME, TRUE));
+ SVN_ERR(svn_named_atomic__write(NULL, 0, atomic));
+ svn_pool_clear(scratch);
+
+ SVN_ERR(svn_atomic_namespace__create(&ns, name_namespace2, scratch));
+ SVN_ERR(svn_named_atomic__get(&atomic, ns, ATOMIC_NAME, TRUE));
+ SVN_ERR(svn_named_atomic__write(NULL, 0, atomic));
+ svn_pool_clear(scratch);
+
+ /* done */
+
+ return SVN_NO_ERROR;
+}
+
+/* Prepare the shared memory for a run with COUNT workers.
+ */
+static svn_error_t *
+init_concurrency_test_shm(apr_pool_t *pool, int count)
+{
+ svn_atomic_namespace__t *ns;
+ svn_named_atomic__t *atomic;
+ int i;
+
+ /* get the two I/O atomics for this thread */
+ SVN_ERR(svn_atomic_namespace__create(&ns, name_namespace, pool));
+
+ /* reset the I/O atomics for all threads */
+ for (i = 0; i < count; ++i)
+ {
+ SVN_ERR(svn_named_atomic__get(&atomic,
+ ns,
+ apr_pstrcat(pool,
+ ATOMIC_NAME,
+ apr_itoa(pool, i),
+ NULL),
+ TRUE));
+ SVN_ERR(svn_named_atomic__write(NULL, 0, atomic));
+ }
+
+ SVN_ERR(svn_named_atomic__get(&atomic, ns, "counter", TRUE));
+ SVN_ERR(svn_named_atomic__write(NULL, 0, atomic));
+
+ return SVN_NO_ERROR;
+}
+
+#if APR_HAS_THREADS
+
+/* our thread function type
+ */
+typedef svn_error_t *(*thread_func_t)(int, int, int, apr_pool_t *);
+
+/* Per-thread input and output data.
+ */
+struct thread_baton
+{
+ int thread_count;
+ int thread_no;
+ int iterations;
+ svn_error_t *result;
+ thread_func_t func;
+};
+
+/* APR thread function implementation: A wrapper around baton->func that
+ * handles the svn_error_t return value.
+ */
+static void *
+APR_THREAD_FUNC test_thread(apr_thread_t *thread, void *baton)
+{
+ struct thread_baton *params = baton;
+ apr_pool_t *pool = svn_pool_create_ex(NULL, NULL);
+
+ params->result = (*params->func)(params->thread_no,
+ params->thread_count,
+ params->iterations,
+ pool);
+ svn_pool_destroy(pool);
+ apr_thread_exit(thread, APR_SUCCESS);
+
+ return NULL;
+}
+
+/* Runs FUNC in COUNT concurrent threads ITERATION times and combines the
+ * results.
+ */
+static svn_error_t *
+run_threads(apr_pool_t *pool, int count, int iterations, thread_func_t func)
+{
+ apr_status_t status;
+ int i;
+ svn_error_t *error = SVN_NO_ERROR;
+
+ /* all threads and their I/O data */
+ apr_thread_t **threads = apr_palloc(pool, count * sizeof(*threads));
+ struct thread_baton *batons = apr_palloc(pool, count * sizeof(*batons));
+
+ /* start threads */
+ for (i = 0; i < count; ++i)
+ {
+ batons[i].thread_count = count;
+ batons[i].thread_no = i;
+ batons[i].iterations = iterations;
+ batons[i].func = func;
+
+ status = apr_thread_create(&threads[i],
+ NULL,
+ test_thread,
+ &batons[i],
+ pool);
+ if (status != APR_SUCCESS)
+ SVN_ERR(svn_error_wrap_apr(status, "could not create a thread"));
+ }
+
+ /* Wait for threads to finish and return result. */
+ for (i = 0; i < count; ++i)
+ {
+ apr_status_t retval;
+ status = apr_thread_join(&retval, threads[i]);
+ if (status != APR_SUCCESS)
+ SVN_ERR(svn_error_wrap_apr(status, "waiting for thread's end failed"));
+
+ if (batons[i].result)
+ error = svn_error_compose_create (error, svn_error_quick_wrap
+ (batons[i].result, apr_psprintf(pool, "Thread %d failed", i)));
+ }
+
+ return error;
+}
+#endif
+
+/* Runs PROC in COUNT concurrent worker processes and check the results.
+ */
+static svn_error_t *
+run_procs(apr_pool_t *pool, const char *proc, int count, int iterations)
+{
+ int i, k;
+ svn_error_t *error = SVN_NO_ERROR;
+ const char * directory = NULL;
+
+ /* all processes and their I/O data */
+ apr_proc_t *process = apr_palloc(pool, count * sizeof(*process));
+ apr_file_t *common_stdout = NULL;
+ apr_file_open_stdout(&common_stdout, pool);
+
+ SVN_ERR(adjust_proc_path(&proc, &directory, pool));
+
+ /* start sub-processes */
+ for (i = 0; i < count; ++i)
+ {
+ const char * args[6];
+
+ args[0] = proc;
+ args[1] = apr_itoa(pool, i);
+ args[2] = apr_itoa(pool, count);
+ args[3] = apr_itoa(pool, iterations);
+ args[4] = name_namespace;
+ args[5] = NULL;
+
+ error = svn_io_start_cmd3(&process[i],
+ directory, /* working directory */
+ args[0],
+ args,
+ NULL, /* environment */
+ FALSE, /* no handle inheritance */
+ FALSE, /* no STDIN pipe */
+ NULL,
+ FALSE, /* consolidate into 1 STDOUT */
+ common_stdout,
+ FALSE, /* no STDERR pipe */
+ NULL,
+ pool);
+ if (error)
+ {
+ /* dump program name and parameters */
+ for (k = 0; k < sizeof(args) / sizeof(args[0]); ++k)
+ if (args[k])
+ printf(k == 0 ? "%s\n" : " %s\n", args[k]);
+
+ if (directory)
+ printf("working folder %s:\n", directory);
+
+ return error;
+ }
+ }
+
+ /* Wait for sub-processes to finish and return result. */
+ for (i = 0; i < count; ++i)
+ {
+ const char *cmd = apr_psprintf(pool,
+ "named_atomic-test-proc %d %d %d",
+ i, count, iterations);
+ error = svn_error_compose_create(error,
+ svn_io_wait_for_cmd(&process[i],
+ cmd, NULL, NULL,
+ pool));
+ }
+
+ return error;
+}
+
+/* Set SUGGESTED_ITERATIONS to a value that COUNT workers will take
+ * about 1 second to execute.
+ */
+static svn_error_t *
+calibrate_iterations(apr_pool_t *pool, int count)
+{
+ apr_time_t start;
+ int calib_iterations;
+ double taken = 0.0;
+
+ /* increase iterations until we pass the 100ms mark */
+
+ for (calib_iterations = 10; taken < 100000.0; calib_iterations *= 2)
+ {
+ apr_pool_t *scratch = svn_pool_create(pool);
+ SVN_ERR(init_concurrency_test_shm(scratch, count));
+
+ start = apr_time_now();
+ SVN_ERR(run_procs(pool, TEST_PROC, count, calib_iterations));
+
+ taken = (double)(apr_time_now() - start);
+ svn_pool_destroy(scratch);
+ }
+
+ /* scale that to 1s */
+
+ suggested_iterations = (int)(1000000.0 / taken * calib_iterations);
+
+ return SVN_NO_ERROR;
+}
+
+/* Find out how far the system will scale, i.e. how many workers can be
+ * run concurrently without experiencing significant slowdowns.
+ * Sets HW_THREAD_COUNT to a value of 2 .. 32 (limit the system impact in
+ * case our heuristics fail) and determines the number of iterations.
+ * Can be called multiple times but will skip the calculations after the
+ * first successful run.
+ */
+static svn_error_t *
+calibrate_concurrency(apr_pool_t *pool)
+{
+ if (hw_thread_count == 0)
+ {
+ /* these parameters should be ok even on very slow machines */
+ hw_thread_count = 2;
+ suggested_iterations = 100;
+
+ /* if we've got a proper machine and OS setup, let's prepare for
+ * some real testing */
+ if (svn_named_atomic__is_efficient() && proc_found(TEST_PROC, pool))
+ {
+ SVN_ERR(calibrate_iterations(pool, 2));
+ for (; hw_thread_count < 32; hw_thread_count *= 2)
+ {
+ int saved_suggestion = suggested_iterations;
+
+ /* run with an additional core to spare
+ * (even low CPU usage might cause heavy context switching) */
+ SVN_ERR(calibrate_iterations(pool, hw_thread_count * 2 + 1));
+ if (suggested_iterations < 100000)
+ {
+ /* Machines with only a small number of cores are prone
+ * to inconsistent performance due context switching.
+ * Reduce the number of iterations on those machines. */
+ suggested_iterations = hw_thread_count > 2
+ ? saved_suggestion
+ : saved_suggestion / 2;
+ break;
+ }
+ }
+ }
+
+ printf("using %d cores for %d iterations\n", hw_thread_count,
+ suggested_iterations);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* The individual tests */
+
+static svn_error_t *
+test_basics(apr_pool_t *pool)
+{
+ svn_atomic_namespace__t *ns;
+ svn_named_atomic__t *atomic;
+ apr_int64_t value;
+
+ SVN_ERR(init_test_shm(pool));
+
+ /* Use a separate namespace for our tests isolate them from production */
+ SVN_ERR(svn_atomic_namespace__create(&ns, name_namespace, pool));
+
+ /* Test a non-existing atomic */
+ SVN_ERR(svn_named_atomic__get(&atomic, ns, ATOMIC_NAME "x", FALSE));
+ SVN_TEST_ASSERT(atomic == NULL);
+
+ /* Now, we auto-create it */
+ SVN_ERR(svn_named_atomic__get(&atomic, ns, ATOMIC_NAME, TRUE));
+ SVN_TEST_ASSERT(atomic != NULL);
+
+ /* The default value should be 0 */
+ SVN_TEST_ASSERT_ERROR(svn_named_atomic__read(&value, NULL),
+ SVN_ERR_BAD_ATOMIC);
+ value = 1;
+ SVN_ERR(svn_named_atomic__read(&value, atomic));
+ SVN_TEST_ASSERT(value == 0);
+
+ /* Write should return the previous value. */
+ SVN_TEST_ASSERT_ERROR(svn_named_atomic__write(&value, 0, NULL),
+ SVN_ERR_BAD_ATOMIC);
+ value = 1;
+ SVN_ERR(svn_named_atomic__write(&value, 21, atomic));
+ SVN_TEST_ASSERT(value == 0);
+ SVN_ERR(svn_named_atomic__read(&value, atomic));
+ SVN_TEST_ASSERT(value == 21);
+
+ SVN_ERR(svn_named_atomic__write(&value, 42, atomic));
+ SVN_TEST_ASSERT(value == 21);
+ SVN_ERR(svn_named_atomic__read(&value, atomic));
+ SVN_TEST_ASSERT(value == 42);
+
+ SVN_ERR(svn_named_atomic__write(NULL, 17, atomic));
+ SVN_ERR(svn_named_atomic__read(&value, atomic));
+ SVN_TEST_ASSERT(value == 17);
+
+ /* Adding & subtracting values */
+ SVN_TEST_ASSERT_ERROR(svn_named_atomic__add(&value, 0, NULL),
+ SVN_ERR_BAD_ATOMIC);
+ SVN_ERR(svn_named_atomic__add(&value, 25, atomic));
+ SVN_TEST_ASSERT(value == 42);
+ SVN_ERR(svn_named_atomic__add(NULL, 47, atomic));
+ SVN_ERR(svn_named_atomic__read(&value, atomic));
+ SVN_TEST_ASSERT(value == 89);
+
+ SVN_ERR(svn_named_atomic__add(&value, -25, atomic));
+ SVN_TEST_ASSERT(value == 64);
+ SVN_ERR(svn_named_atomic__add(NULL, -22, atomic));
+ SVN_ERR(svn_named_atomic__read(&value, atomic));
+ SVN_TEST_ASSERT(value == 42);
+
+ /* Compare-and-exchange */
+ SVN_TEST_ASSERT_ERROR(svn_named_atomic__cmpxchg(&value, 0, 0, NULL),
+ SVN_ERR_BAD_ATOMIC);
+ value = 1;
+ SVN_ERR(svn_named_atomic__cmpxchg(&value, 99, 41, atomic));
+ SVN_TEST_ASSERT(value == 42);
+
+ value = 1;
+ SVN_ERR(svn_named_atomic__cmpxchg(&value, 98, 42, atomic));
+ SVN_TEST_ASSERT(value == 42);
+ SVN_ERR(svn_named_atomic__cmpxchg(&value, 67, 98, atomic));
+ SVN_TEST_ASSERT(value == 98);
+
+ SVN_ERR(svn_named_atomic__cmpxchg(NULL, 42, 67, atomic));
+ SVN_ERR(svn_named_atomic__read(&value, atomic));
+ SVN_TEST_ASSERT(value == 42);
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_bignums(apr_pool_t *pool)
+{
+ svn_atomic_namespace__t *ns;
+ svn_named_atomic__t *atomic;
+ apr_int64_t value;
+
+ SVN_ERR(init_test_shm(pool));
+
+ /* Use a separate namespace for our tests isolate them from production */
+ SVN_ERR(svn_atomic_namespace__create(&ns, name_namespace, pool));
+
+ /* Auto-create our atomic variable */
+ SVN_ERR(svn_named_atomic__get(&atomic, ns, ATOMIC_NAME, TRUE));
+ SVN_TEST_ASSERT(atomic != NULL);
+
+ /* Write should return the previous value. */
+
+ SVN_ERR(svn_named_atomic__write(NULL, 0, atomic));
+ value = 1;
+ SVN_ERR(svn_named_atomic__write(&value, 21 * HUGE_VALUE, atomic));
+ SVN_TEST_ASSERT(value == 0 * HUGE_VALUE);
+ SVN_ERR(svn_named_atomic__read(&value, atomic));
+ SVN_TEST_ASSERT(value == 21 * HUGE_VALUE);
+
+ SVN_ERR(svn_named_atomic__write(&value, 17 * HUGE_VALUE, atomic));
+ SVN_TEST_ASSERT(value == 21 * HUGE_VALUE);
+
+ /* Adding & subtracting values */
+ SVN_ERR(svn_named_atomic__add(&value, 25 * HUGE_VALUE, atomic));
+ SVN_TEST_ASSERT(value == 42 * HUGE_VALUE);
+ SVN_ERR(svn_named_atomic__add(&value, -25 * HUGE_VALUE, atomic));
+ SVN_TEST_ASSERT(value == 17 * HUGE_VALUE);
+
+ /* Compare-and-exchange */
+ value = 1;
+ SVN_ERR(svn_named_atomic__cmpxchg(&value, 99 * HUGE_VALUE, 41 * HUGE_VALUE, atomic));
+ SVN_TEST_ASSERT(value == 17 * HUGE_VALUE);
+
+ value = 1;
+ SVN_ERR(svn_named_atomic__cmpxchg(&value, 98 * HUGE_VALUE, 17 * HUGE_VALUE, atomic));
+ SVN_TEST_ASSERT(value == 17 * HUGE_VALUE);
+ SVN_ERR(svn_named_atomic__read(&value, atomic));
+ SVN_TEST_ASSERT(value == 98 * HUGE_VALUE);
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_multiple_atomics(apr_pool_t *pool)
+{
+ svn_atomic_namespace__t *ns;
+ svn_named_atomic__t *atomic1;
+ svn_named_atomic__t *atomic2;
+ svn_named_atomic__t *atomic1_alias;
+ svn_named_atomic__t *atomic2_alias;
+ apr_int64_t value1;
+ apr_int64_t value2;
+
+ SVN_ERR(init_test_shm(pool));
+
+ /* Use a separate namespace for our tests isolate them from production */
+ SVN_ERR(svn_atomic_namespace__create(&ns, name_namespace, pool));
+
+ /* Create two atomics */
+ SVN_ERR(svn_named_atomic__get(&atomic1, ns, ATOMIC_NAME "1", TRUE));
+ SVN_ERR(svn_named_atomic__get(&atomic2, ns, ATOMIC_NAME "2", TRUE));
+ SVN_TEST_ASSERT(atomic1 != NULL);
+ SVN_TEST_ASSERT(atomic2 != NULL);
+ SVN_TEST_ASSERT(atomic1 != atomic2);
+
+ /* Get aliases to those */
+ SVN_ERR(svn_named_atomic__get(&atomic1_alias, ns, ATOMIC_NAME "1", TRUE));
+ SVN_ERR(svn_named_atomic__get(&atomic2_alias, ns, ATOMIC_NAME "2", TRUE));
+ SVN_TEST_ASSERT(atomic1 == atomic1_alias);
+ SVN_TEST_ASSERT(atomic2 == atomic2_alias);
+
+ /* The atomics shall not overlap, i.e. changes to one do not affect the other */
+ SVN_ERR(svn_named_atomic__write(NULL, 0, atomic1));
+ SVN_ERR(svn_named_atomic__write(NULL, 0, atomic2));
+ SVN_ERR(svn_named_atomic__write(&value1, 21 * HUGE_VALUE, atomic1));
+ SVN_ERR(svn_named_atomic__write(&value2, 42 * HUGE_VALUE, atomic2));
+ SVN_TEST_ASSERT(value1 == 0);
+ SVN_TEST_ASSERT(value2 == 0);
+
+ SVN_ERR(svn_named_atomic__read(&value1, atomic1));
+ SVN_ERR(svn_named_atomic__read(&value2, atomic2));
+ SVN_TEST_ASSERT(value1 == 21 * HUGE_VALUE);
+ SVN_TEST_ASSERT(value2 == 42 * HUGE_VALUE);
+
+ SVN_ERR(svn_named_atomic__add(&value1, 25 * HUGE_VALUE, atomic1));
+ SVN_ERR(svn_named_atomic__add(&value2, -25 * HUGE_VALUE, atomic2));
+ SVN_TEST_ASSERT(value1 == 46 * HUGE_VALUE);
+ SVN_TEST_ASSERT(value2 == 17 * HUGE_VALUE);
+
+ value1 = 1;
+ value2 = 1;
+ SVN_ERR(svn_named_atomic__cmpxchg(&value1, 4 * HUGE_VALUE, 46 * HUGE_VALUE, atomic1));
+ SVN_ERR(svn_named_atomic__cmpxchg(&value2, 98 * HUGE_VALUE, 17 * HUGE_VALUE, atomic2));
+ SVN_TEST_ASSERT(value1 == 46 * HUGE_VALUE);
+ SVN_TEST_ASSERT(value2 == 17 * HUGE_VALUE);
+
+ SVN_ERR(svn_named_atomic__read(&value1, atomic1));
+ SVN_ERR(svn_named_atomic__read(&value2, atomic2));
+ SVN_TEST_ASSERT(value1 == 4 * HUGE_VALUE);
+ SVN_TEST_ASSERT(value2 == 98 * HUGE_VALUE);
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_namespaces(apr_pool_t *pool)
+{
+ svn_atomic_namespace__t *test_namespace1;
+ svn_atomic_namespace__t *test_namespace1_alias;
+ svn_atomic_namespace__t *test_namespace2;
+ svn_atomic_namespace__t *test_namespace2_alias;
+ svn_named_atomic__t *atomic1;
+ svn_named_atomic__t *atomic2;
+ svn_named_atomic__t *atomic1_alias;
+ svn_named_atomic__t *atomic2_alias;
+ apr_int64_t value;
+
+ SVN_ERR(init_test_shm(pool));
+
+ /* Use a separate namespace for our tests isolate them from production */
+ SVN_ERR(svn_atomic_namespace__create(&test_namespace1, name_namespace1, pool));
+ SVN_ERR(svn_atomic_namespace__create(&test_namespace1_alias, name_namespace1, pool));
+ SVN_ERR(svn_atomic_namespace__create(&test_namespace2, name_namespace2, pool));
+ SVN_ERR(svn_atomic_namespace__create(&test_namespace2_alias, name_namespace2, pool));
+
+ /* Create two atomics with the same name in different namespaces */
+ SVN_ERR(svn_named_atomic__get(&atomic1, test_namespace1, ATOMIC_NAME, TRUE));
+ SVN_ERR(svn_named_atomic__get(&atomic1_alias, test_namespace1_alias, ATOMIC_NAME, FALSE));
+ SVN_ERR(svn_named_atomic__get(&atomic2, test_namespace2, ATOMIC_NAME, TRUE));
+ SVN_ERR(svn_named_atomic__get(&atomic2_alias, test_namespace2_alias, ATOMIC_NAME, FALSE));
+ SVN_TEST_ASSERT(atomic1 != atomic1_alias);
+ SVN_TEST_ASSERT(atomic1_alias != NULL);
+ SVN_TEST_ASSERT(atomic2 != atomic2_alias);
+ SVN_TEST_ASSERT(atomic2_alias != NULL);
+
+ /* Write data to our atomics */
+ SVN_ERR(svn_named_atomic__write(NULL, 21 * HUGE_VALUE, atomic1));
+ SVN_ERR(svn_named_atomic__write(NULL, 42 * HUGE_VALUE, atomic2));
+
+ /* Now check who sees which value */
+ SVN_ERR(svn_named_atomic__read(&value, atomic1));
+ SVN_TEST_ASSERT(value == 21 * HUGE_VALUE);
+ SVN_ERR(svn_named_atomic__read(&value, atomic2));
+ SVN_TEST_ASSERT(value == 42 * HUGE_VALUE);
+
+ SVN_ERR(svn_named_atomic__read(&value, atomic1_alias));
+ SVN_TEST_ASSERT(value == 21 * HUGE_VALUE);
+ SVN_ERR(svn_named_atomic__read(&value, atomic2_alias));
+ SVN_TEST_ASSERT(value == 42 * HUGE_VALUE);
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_multithreaded(apr_pool_t *pool)
+{
+#if APR_HAS_THREADS
+ SVN_ERR(init_test_shm(pool));
+
+ SVN_ERR(calibrate_concurrency(pool));
+
+ SVN_ERR(init_concurrency_test_shm(pool, hw_thread_count));
+ SVN_ERR(run_threads(pool, hw_thread_count, suggested_iterations, test_pipeline));
+
+ return SVN_NO_ERROR;
+#else
+ return svn_error_create(SVN_ERR_TEST_SKIPPED, NULL, NULL);
+#endif
+}
+
+static svn_error_t *
+test_multiprocess(apr_pool_t *pool)
+{
+ if (!proc_found(TEST_PROC, pool))
+ return svn_error_wrap_apr(SVN_ERR_TEST_SKIPPED,
+ "executable '%s' not found", TEST_PROC);
+
+ SVN_ERR(init_test_shm(pool));
+
+ SVN_ERR(calibrate_concurrency(pool));
+
+ SVN_ERR(init_concurrency_test_shm(pool, hw_thread_count));
+ SVN_ERR(run_procs(pool, TEST_PROC, hw_thread_count, suggested_iterations));
+
+ return SVN_NO_ERROR;
+}
+
+/*
+ ====================================================================
+ If you add a new test to this file, update this array.
+
+ (These globals are required by our included main())
+*/
+
+/* An array of all test functions */
+struct svn_test_descriptor_t test_funcs[] =
+ {
+ SVN_TEST_NULL,
+ SVN_TEST_PASS2(test_basics,
+ "basic r/w access to a single atomic"),
+ SVN_TEST_PASS2(test_bignums,
+ "atomics must be 64 bits"),
+ SVN_TEST_PASS2(test_multiple_atomics,
+ "basic r/w access to multiple atomics"),
+ SVN_TEST_PASS2(test_namespaces,
+ "use different namespaces"),
+ SVN_TEST_PASS2(test_multithreaded,
+ "multithreaded access to atomics"),
+ SVN_TEST_PASS2(test_multiprocess,
+ "multi-process access to atomics"),
+ SVN_TEST_NULL
+ };
diff --git a/subversion/tests/libsvn_subr/path-test.c b/subversion/tests/libsvn_subr/path-test.c
index f9d36ff..ec35176 100644
--- a/subversion/tests/libsvn_subr/path-test.c
+++ b/subversion/tests/libsvn_subr/path-test.c
@@ -21,6 +21,13 @@
* ====================================================================
*/
+#ifdef _MSC_VER
+#include <direct.h>
+#define getcwd _getcwd
+#else
+#include <unistd.h> /* for getcwd() */
+#endif
+
#include <stdio.h>
#include <string.h>
#include <apr_general.h>
@@ -871,7 +878,7 @@ test_path_remove_component(apr_pool_t *pool)
int i;
svn_stringbuf_t *buf;
- buf = svn_stringbuf_create("", pool);
+ buf = svn_stringbuf_create_empty(pool);
i = 0;
while (tests[i].path)
@@ -1195,7 +1202,6 @@ test_path_splitext(apr_pool_t *pool)
const char *path;
const char *path_root;
const char *path_ext;
- svn_boolean_t result;
} tests[] = {
{ "no-ext", "no-ext", "" },
{ "test-file.py", "test-file.", "py" },
@@ -1465,6 +1471,225 @@ test_path_internal_style(apr_pool_t *pool)
}
+/* The type of a function to be tested by condense_targets_tests_helper().
+ * Matches svn_path_condense_targets().
+ */
+typedef svn_error_t *(*condense_targets_func_t)
+ (const char **pcommon,
+ apr_array_header_t **pcondensed_targets,
+ const apr_array_header_t *targets,
+ svn_boolean_t remove_redundancies,
+ apr_pool_t *pool);
+
+/** Executes function CONDENSE_TARGETS twice - with and without requesting the
+ * condensed targets list - on TEST_TARGETS (comma sep. string) and compares
+ * the results with EXP_COMMON and EXP_TARGETS (comma sep. string).
+ *
+ * @note: a '%' character at the beginning of EXP_COMMON or EXP_TARGETS will
+ * be replaced by the current working directory.
+ *
+ * Returns an error if any of the comparisons fail.
+ */
+static svn_error_t *
+condense_targets_tests_helper(const char* title,
+ const char* test_targets,
+ const char* exp_common,
+ const char* exp_targets,
+ const char* func_name,
+ condense_targets_func_t condense_targets,
+ apr_pool_t *pool)
+{
+ apr_array_header_t *targets;
+ apr_array_header_t *condensed_targets;
+ const char *common_path, *common_path2, *curdir;
+ char *token, *iter;
+ const char *exp_common_abs = exp_common;
+ int i;
+ char buf[8192];
+
+ if (! getcwd(buf, sizeof(buf)))
+ return svn_error_create(SVN_ERR_BASE, NULL, "getcwd() failed");
+ curdir = svn_path_internal_style(buf, pool);
+
+ /* Create the target array */
+ targets = apr_array_make(pool, sizeof(test_targets), sizeof(const char *));
+ token = apr_strtok(apr_pstrdup(pool, test_targets), ",", &iter);
+ while (token)
+ {
+ APR_ARRAY_PUSH(targets, const char *) =
+ svn_path_internal_style(token, pool);
+ token = apr_strtok(NULL, ",", &iter);
+ };
+
+ /* Call the function */
+ SVN_ERR(condense_targets(&common_path, &condensed_targets, targets,
+ TRUE, pool));
+
+ /* Verify the common part with the expected (prefix with cwd). */
+ if (*exp_common == '%')
+ exp_common_abs = apr_pstrcat(pool, curdir, exp_common + 1, (char *)NULL);
+
+ if (strcmp(common_path, exp_common_abs) != 0)
+ {
+ return svn_error_createf
+ (SVN_ERR_TEST_FAILED, NULL,
+ "%s (test %s) returned %s instead of %s",
+ func_name, title,
+ common_path, exp_common_abs);
+ }
+
+ /* Verify the condensed targets */
+ token = apr_strtok(apr_pstrdup(pool, exp_targets), ",", &iter);
+ for (i = 0; i < condensed_targets->nelts; i++)
+ {
+ const char * target = APR_ARRAY_IDX(condensed_targets, i, const char*);
+ if (token && (*token == '%'))
+ token = apr_pstrcat(pool, curdir, token + 1, (char *)NULL);
+ if (! token ||
+ (target && (strcmp(target, token) != 0)))
+ {
+ return svn_error_createf
+ (SVN_ERR_TEST_FAILED, NULL,
+ "%s (test %s) couldn't find %s in expected targets list",
+ func_name, title,
+ target);
+ }
+ token = apr_strtok(NULL, ",", &iter);
+ }
+
+ /* Now ensure it works without the pbasename */
+ SVN_ERR(condense_targets(&common_path2, NULL, targets, TRUE, pool));
+
+ /* Verify the common part again */
+ if (strcmp(common_path, common_path2) != 0)
+ {
+ return svn_error_createf
+ (SVN_ERR_TEST_FAILED, NULL,
+ "%s (test %s): Common path without getting targets %s does not match" \
+ "common path with targets %s",
+ func_name, title,
+ common_path2, common_path);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
+static svn_error_t *
+test_path_condense_targets(apr_pool_t *pool)
+{
+ int i;
+ struct {
+ const char* title;
+ const char* targets;
+ const char* exp_common;
+ const char* exp_targets;
+ } tests[] = {
+ { "normal use", "z/A/B,z/A,z/A/C,z/D/E,z/D/F,z/D,z/G,z/G/H,z/G/I",
+ "%/z", "A,D,G" },
+ {"identical dirs", "z/A,z/A,z/A,z/A",
+ "%/z/A", "" },
+ {"identical files", "z/A/file,z/A/file,z/A/file,z/A/file",
+ "%/z/A/file", "" },
+ {"single dir", "z/A",
+ "%/z/A", "" },
+ {"single file", "z/A/file",
+ "%/z/A/file", "" },
+ {"URLs", "http://host/A/C,http://host/A/C/D,http://host/A/B/D",
+ "http://host/A", "C,B/D" },
+ {"URLs with no common prefix",
+ "http://host1/A/C,http://host2/A/C/D,http://host3/A/B/D",
+ "", "http://host1/A/C,http://host2/A/C/D,http://host3/A/B/D" },
+ {"file URLs with no common prefix", "file:///A/C,file:///B/D",
+ "", "file:///A/C,file:///B/D" },
+ {"URLs with mixed protocols",
+ "http://host/A/C,file:///B/D,gopher://host/A",
+ "", "http://host/A/C,file:///B/D,gopher://host/A" },
+ {"mixed paths and URLs",
+ "z/A/B,z/A,http://host/A/C/D,http://host/A/C",
+ "", "%/z/A,http://host/A/C" },
+ };
+
+ for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++)
+ {
+ SVN_ERR(condense_targets_tests_helper(tests[i].title,
+ tests[i].targets,
+ tests[i].exp_common,
+ tests[i].exp_targets,
+ "svn_path_condense_targets",
+ svn_path_condense_targets,
+ pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_path_is_repos_relative_url(apr_pool_t *pool)
+{
+ int i;
+ struct {
+ const char* path;
+ svn_boolean_t result;
+ } tests[] = {
+ { "^/A", TRUE },
+ { "http://host/A", FALSE },
+ { "/A/B", FALSE },
+ };
+
+ for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++)
+ {
+ svn_boolean_t result = svn_path_is_repos_relative_url(tests[i].path);
+
+ if (tests[i].result != result)
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "svn_path_is_repos_relative_url(\"%s\")"
+ " returned \"%s\" expected \"%s\"",
+ tests[i].path,
+ result ? "TRUE" : "FALSE",
+ tests[i].result ? "TRUE" : "FALSE");
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_path_resolve_repos_relative_url(apr_pool_t *pool)
+{
+ int i;
+ struct {
+ const char *relative_url;
+ const char *repos_root_url;
+ const char *absolute_url;
+ } tests[] = {
+ { "^/A", "file:///Z/X", "file:///Z/X/A" },
+ { "^/A", "file:///Z/X/", "file:///Z/X//A" }, /* doesn't canonicalize */
+ { "^/A@2", "file:///Z/X", "file:///Z/X/A@2" }, /* peg rev */
+ { "^/A", "/Z/X", "/Z/X/A" }, /* doesn't verify repos_root is URL */
+ };
+
+ for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++)
+ {
+ const char *result;
+
+ SVN_ERR(svn_path_resolve_repos_relative_url(&result,
+ tests[i].relative_url,
+ tests[i].repos_root_url,
+ pool));
+
+ if (strcmp(tests[i].absolute_url,result))
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "svn_path_resolve_repos_relative_url(\"%s\","
+ "\"%s\") returned \"%s\" expected \"%s\"",
+ tests[i].relative_url,
+ tests[i].repos_root_url,
+ result, tests[i].absolute_url);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
/* local define to support XFail-ing tests on Windows/Cygwin only */
#ifdef SVN_USE_DOS_PATHS
#define WINDOWS_OR_CYGWIN TRUE
@@ -1526,5 +1751,11 @@ struct svn_test_descriptor_t test_funcs[] =
"test svn_path_local_style"),
SVN_TEST_PASS2(test_path_internal_style,
"test svn_path_internal_style"),
+ SVN_TEST_PASS2(test_path_condense_targets,
+ "test svn_path_condense_targets"),
+ SVN_TEST_PASS2(test_path_is_repos_relative_url,
+ "test svn_path_is_repos_relative_url"),
+ SVN_TEST_PASS2(test_path_resolve_repos_relative_url,
+ "test svn_path_resolve_repos_relative_url"),
SVN_TEST_NULL
};
diff --git a/subversion/tests/libsvn_subr/skel-test.c b/subversion/tests/libsvn_subr/skel-test.c
index e38aa73..49fe1a3 100644
--- a/subversion/tests/libsvn_subr/skel-test.c
+++ b/subversion/tests/libsvn_subr/skel-test.c
@@ -216,7 +216,7 @@ gen_implicit_length_all_chars(apr_size_t *len_p)
for (i = 0; i < 256; i++)
if (! skel_is_space( (apr_byte_t)i)
&& ! skel_is_paren( (apr_byte_t)i))
- name[pos++] = i;
+ name[pos++] = (char)i;
*len_p = pos;
return name;
@@ -375,7 +375,7 @@ parse_explicit_length(apr_pool_t *pool)
{
char buf[1];
- buf[0] = i;
+ buf[0] = (char)i;
SVN_ERR(try_explicit_length(buf, 1, 1, pool));
}
}
@@ -386,7 +386,7 @@ parse_explicit_length(apr_pool_t *pool)
char data[256];
for (i = 0; i < 256; i++)
- data[i] = i;
+ data[i] = (char)i;
SVN_ERR(try_explicit_length(data, 256, 256, pool));
}
@@ -592,7 +592,7 @@ parse_list(apr_pool_t *pool)
svn_skel_t *child;
char buf[1];
- buf[0] = atom_byte;
+ buf[0] = (char)atom_byte;
put_list_start(str, (apr_byte_t)sep, sep_count);
for (i = 0; i < list_len; i++)
@@ -619,7 +619,7 @@ parse_list(apr_pool_t *pool)
char data[256];
for (i = 0; i < 256; i++)
- data[i] = i;
+ data[i] = (char)i;
put_list_start(str, (apr_byte_t)sep, sep_count);
for (i = 0; i < list_len; i++)
@@ -797,7 +797,7 @@ unparse_list(apr_pool_t *pool)
for (byte = 0; byte < 256; byte++)
if (skel_is_name( (apr_byte_t)byte))
{
- char buf = byte;
+ char buf = (char)byte;
add(build_atom(1, &buf, pool), list);
}
@@ -858,7 +858,7 @@ unparse_list(apr_pool_t *pool)
val = i * 10 + j;
for (k = 0; k < sizeof(buf); k++)
{
- buf[k] = val;
+ buf[k] = (char)val;
val += j;
}
@@ -873,6 +873,11 @@ unparse_list(apr_pool_t *pool)
if (! skel_equal(top, reparsed))
return fail(pool, "failed to reparse list of lists");
+
+ reparsed = svn_skel__dup(reparsed, TRUE, pool);
+
+ if (! skel_equal(top, reparsed))
+ return fail(pool, "failed to dup list of lists");
}
return SVN_NO_ERROR;
diff --git a/subversion/tests/libsvn_subr/spillbuf-test.c b/subversion/tests/libsvn_subr/spillbuf-test.c
new file mode 100644
index 0000000..c928dc3
--- /dev/null
+++ b/subversion/tests/libsvn_subr/spillbuf-test.c
@@ -0,0 +1,433 @@
+/*
+ * spillbuf-test.c : test the spill buffer code
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#include "svn_types.h"
+
+#include "private/svn_subr_private.h"
+
+#include "../svn_test.h"
+
+
+static const char basic_data[] = "abcdefghijklmnopqrstuvwxyz"
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "0123456789";
+
+
+/* Validate that BUF is STARTING_SIZE in length. Then read some data from
+ the buffer, which should match EXPECTED. The EXPECTED value must be
+ NUL-terminated, but the NUL is not part of the expected/verified value. */
+#define CHECK_READ(b, s, e, p) SVN_ERR(check_read(b, s, e, p))
+static svn_error_t *
+check_read(svn_spillbuf_t *buf,
+ svn_filesize_t starting_size,
+ const char *expected,
+ apr_pool_t *scratch_pool)
+{
+ apr_size_t expected_len = strlen(expected);
+ const char *readptr;
+ apr_size_t readlen;
+
+ SVN_TEST_ASSERT(svn_spillbuf__get_size(buf) == starting_size);
+ SVN_ERR(svn_spillbuf__read(&readptr, &readlen, buf, scratch_pool));
+ SVN_TEST_ASSERT(readptr != NULL
+ && readlen == expected_len
+ && memcmp(readptr, expected, expected_len) == 0);
+ return SVN_NO_ERROR;
+}
+
+
+static svn_error_t *
+test_spillbuf_basic(apr_pool_t *pool)
+{
+ apr_size_t len = strlen(basic_data); /* Don't include basic_data's NUL */
+ svn_spillbuf_t *buf = svn_spillbuf__create(len, 10 * len, pool);
+ int i;
+ const char *readptr;
+ apr_size_t readlen;
+
+ /* It starts empty. */
+ SVN_TEST_ASSERT(svn_spillbuf__get_size(buf) == 0);
+
+ /* Place enough data into the buffer to cause a spill to disk. */
+ for (i = 20; i--; )
+ SVN_ERR(svn_spillbuf__write(buf, basic_data, len, pool));
+
+ /* And now has content. */
+ SVN_TEST_ASSERT(svn_spillbuf__get_size(buf) > 0);
+
+ /* Verify that we can read 20 copies of basic_data from the buffer. */
+ for (i = 20; i--; )
+ CHECK_READ(buf, (i + 1) * len, basic_data, pool);
+
+ /* And after precisely 20 reads, it should be empty. */
+ SVN_ERR(svn_spillbuf__read(&readptr, &readlen, buf, pool));
+ SVN_TEST_ASSERT(readptr == NULL);
+ SVN_TEST_ASSERT(svn_spillbuf__get_size(buf) == 0);
+
+ return SVN_NO_ERROR;
+}
+
+
+static svn_error_t *
+read_callback(svn_boolean_t *stop,
+ void *baton,
+ const char *data,
+ apr_size_t len,
+ apr_pool_t *scratch_pool)
+{
+ int *counter = baton;
+
+ SVN_TEST_ASSERT(len == sizeof(basic_data));
+ SVN_TEST_ASSERT(memcmp(data, basic_data, len) == 0);
+
+ *stop = (++*counter == 10);
+
+ return SVN_NO_ERROR;
+}
+
+
+static svn_error_t *
+test_spillbuf_callback(apr_pool_t *pool)
+{
+ svn_spillbuf_t *buf = svn_spillbuf__create(
+ sizeof(basic_data) /* blocksize */,
+ 10 * sizeof(basic_data) /* maxsize */,
+ pool);
+ int i;
+ int counter;
+ svn_boolean_t exhausted;
+
+ /* Place enough data into the buffer to cause a spill to disk. */
+ for (i = 20; i--; )
+ SVN_ERR(svn_spillbuf__write(buf, basic_data, sizeof(basic_data), pool));
+
+ counter = 0;
+ SVN_ERR(svn_spillbuf__process(&exhausted, buf, read_callback, &counter,
+ pool));
+ SVN_TEST_ASSERT(!exhausted);
+
+ SVN_ERR(svn_spillbuf__process(&exhausted, buf, read_callback, &counter,
+ pool));
+ SVN_TEST_ASSERT(exhausted);
+
+ return SVN_NO_ERROR;
+}
+
+
+static svn_error_t *
+test_spillbuf_file(apr_pool_t *pool)
+{
+ apr_size_t altsize = sizeof(basic_data) + 2;
+ svn_spillbuf_t *buf = svn_spillbuf__create(
+ altsize /* blocksize */,
+ 2 * sizeof(basic_data) /* maxsize */,
+ pool);
+ int i;
+ const char *readptr;
+ apr_size_t readlen;
+ apr_size_t cur_index;
+
+ /* Place enough data into the buffer to cause a spill to disk. Note that
+ we are writing data that is *smaller* than the blocksize. */
+ for (i = 7; i--; )
+ SVN_ERR(svn_spillbuf__write(buf, basic_data, sizeof(basic_data), pool));
+
+ /* The first two reads will be in-memory blocks (the third write causes
+ the spill to disk). The spillbuf will pack the content into BLOCKSIZE
+ blocks. The second/last memory block will (thus) be a bit smaller. */
+ SVN_ERR(svn_spillbuf__read(&readptr, &readlen, buf, pool));
+ SVN_TEST_ASSERT(readptr != NULL);
+ SVN_TEST_ASSERT(readlen == altsize);
+ SVN_ERR(svn_spillbuf__read(&readptr, &readlen, buf, pool));
+ SVN_TEST_ASSERT(readptr != NULL);
+ /* The second write put sizeof(basic_data) into the buffer. A small
+ portion was stored at the end of the memblock holding the first write.
+ Thus, the size of this read will be the written data, minus that
+ slice written to the first block. */
+ SVN_TEST_ASSERT(readlen
+ == sizeof(basic_data) - (altsize - sizeof(basic_data)));
+
+ /* Current index into basic_data[] that we compare against. */
+ cur_index = 0;
+
+ while (TRUE)
+ {
+ /* This will read more bytes (from the spill file into a temporary
+ in-memory block) than the blocks of data that we wrote. This makes
+ it trickier to verify that the right data is being returned. */
+ SVN_ERR(svn_spillbuf__read(&readptr, &readlen, buf, pool));
+ if (readptr == NULL)
+ break;
+
+ while (TRUE)
+ {
+ apr_size_t amt;
+
+ /* Compute the slice of basic_data that we will compare against,
+ given the readlen and cur_index. */
+ if (cur_index + readlen >= sizeof(basic_data))
+ amt = sizeof(basic_data) - cur_index;
+ else
+ amt = readlen;
+ SVN_TEST_ASSERT(memcmp(readptr, &basic_data[cur_index], amt) == 0);
+ if ((cur_index += amt) == sizeof(basic_data))
+ cur_index = 0;
+ if ((readlen -= amt) == 0)
+ break;
+ readptr += amt;
+ }
+ }
+
+ SVN_TEST_ASSERT(svn_spillbuf__get_size(buf) == 0);
+
+ return SVN_NO_ERROR;
+}
+
+
+static svn_error_t *
+test_spillbuf_interleaving(apr_pool_t *pool)
+{
+ svn_spillbuf_t *buf = svn_spillbuf__create(8 /* blocksize */,
+ 15 /* maxsize */,
+ pool);
+
+ SVN_ERR(svn_spillbuf__write(buf, "abcdef", 6, pool));
+ SVN_ERR(svn_spillbuf__write(buf, "ghijkl", 6, pool));
+ /* now: two blocks: 8 and 4 bytes */
+
+ CHECK_READ(buf, 12, "abcdefgh", pool);
+ /* now: one block: 4 bytes */
+
+ SVN_ERR(svn_spillbuf__write(buf, "mnopqr", 6, pool));
+ /* now: two blocks: 8 and 2 bytes */
+
+ CHECK_READ(buf, 10, "ijklmnop", pool);
+ /* now: one block: 2 bytes */
+
+ SVN_ERR(svn_spillbuf__write(buf, "stuvwx", 6, pool));
+ SVN_ERR(svn_spillbuf__write(buf, "ABCDEF", 6, pool));
+ SVN_ERR(svn_spillbuf__write(buf, "GHIJKL", 6, pool));
+ /* now: two blocks: 8 and 6 bytes, and 6 bytes spilled to a file */
+
+ CHECK_READ(buf, 20, "qrstuvwx", pool);
+ CHECK_READ(buf, 12, "ABCDEF", pool);
+ CHECK_READ(buf, 6, "GHIJKL", pool);
+
+ SVN_TEST_ASSERT(svn_spillbuf__get_size(buf) == 0);
+
+ return SVN_NO_ERROR;
+}
+
+
+static svn_error_t *
+test_spillbuf_reader(apr_pool_t *pool)
+{
+ svn_spillbuf_reader_t *sbr;
+ apr_size_t amt;
+ char buf[10];
+
+ sbr = svn_spillbuf__reader_create(4 /* blocksize */,
+ 100 /* maxsize */,
+ pool);
+
+ SVN_ERR(svn_spillbuf__reader_write(sbr, "abcdef", 6, pool));
+
+ /* Get a buffer from the underlying reader, and grab a couple bytes. */
+ SVN_ERR(svn_spillbuf__reader_read(&amt, sbr, buf, 2, pool));
+ SVN_TEST_ASSERT(amt == 2 && memcmp(buf, "ab", 2) == 0);
+
+ /* Trigger the internal "save" feature of the SBR. */
+ SVN_ERR(svn_spillbuf__reader_write(sbr, "ghijkl", 6, pool));
+
+ /* Read from the save buffer, and from the internal blocks. */
+ SVN_ERR(svn_spillbuf__reader_read(&amt, sbr, buf, 10, pool));
+ SVN_TEST_ASSERT(amt == 10 && memcmp(buf, "cdefghijkl", 10) == 0);
+
+ /* Should be done. */
+ SVN_ERR(svn_spillbuf__reader_read(&amt, sbr, buf, 10, pool));
+ SVN_TEST_ASSERT(amt == 0);
+
+ return SVN_NO_ERROR;
+}
+
+
+static svn_error_t *
+test_spillbuf_stream(apr_pool_t *pool)
+{
+ svn_stream_t *stream = svn_stream__from_spillbuf(8 /* blocksize */,
+ 15 /* maxsize */,
+ pool);
+ char readbuf[256];
+ apr_size_t readlen;
+ apr_size_t writelen;
+
+ writelen = 6;
+ SVN_ERR(svn_stream_write(stream, "abcdef", &writelen));
+ SVN_ERR(svn_stream_write(stream, "ghijkl", &writelen));
+ /* now: two blocks: 8 and 4 bytes */
+
+ readlen = 8;
+ SVN_ERR(svn_stream_read(stream, readbuf, &readlen));
+ SVN_TEST_ASSERT(readlen == 8
+ && memcmp(readbuf, "abcdefgh", 8) == 0);
+ /* now: one block: 4 bytes */
+
+ SVN_ERR(svn_stream_write(stream, "mnopqr", &writelen));
+ /* now: two blocks: 8 and 2 bytes */
+
+ SVN_ERR(svn_stream_read(stream, readbuf, &readlen));
+ SVN_TEST_ASSERT(readlen == 8
+ && memcmp(readbuf, "ijklmnop", 8) == 0);
+ /* now: one block: 2 bytes */
+
+ SVN_ERR(svn_stream_write(stream, "stuvwx", &writelen));
+ SVN_ERR(svn_stream_write(stream, "ABCDEF", &writelen));
+ SVN_ERR(svn_stream_write(stream, "GHIJKL", &writelen));
+ /* now: two blocks: 8 and 6 bytes, and 6 bytes spilled to a file */
+
+ SVN_ERR(svn_stream_read(stream, readbuf, &readlen));
+ SVN_TEST_ASSERT(readlen == 8
+ && memcmp(readbuf, "qrstuvwx", 8) == 0);
+ readlen = 6;
+ SVN_ERR(svn_stream_read(stream, readbuf, &readlen));
+ SVN_TEST_ASSERT(readlen == 6
+ && memcmp(readbuf, "ABCDEF", 6) == 0);
+ SVN_ERR(svn_stream_read(stream, readbuf, &readlen));
+ SVN_TEST_ASSERT(readlen == 6
+ && memcmp(readbuf, "GHIJKL", 6) == 0);
+
+ return SVN_NO_ERROR;
+}
+
+
+static svn_error_t *
+test_spillbuf_rwfile(apr_pool_t *pool)
+{
+ svn_spillbuf_t *buf = svn_spillbuf__create(4 /* blocksize */,
+ 10 /* maxsize */,
+ pool);
+
+ SVN_ERR(svn_spillbuf__write(buf, "abcdef", 6, pool));
+ SVN_ERR(svn_spillbuf__write(buf, "ghijkl", 6, pool));
+ SVN_ERR(svn_spillbuf__write(buf, "mnopqr", 6, pool));
+ /* now: two blocks: 4 and 2 bytes, and 12 bytes in spill file. */
+
+ CHECK_READ(buf, 18, "abcd", pool);
+ /* now: one block: 2 bytes, and 12 bytes in spill file. */
+
+ CHECK_READ(buf, 14, "ef", pool);
+ /* now: no blocks, and 12 bytes in spill file. */
+
+ CHECK_READ(buf, 12, "ghij", pool);
+ /* now: no blocks, and 8 bytes in spill file. */
+
+ /* Write more data. It should be appended to the spill file. */
+ SVN_ERR(svn_spillbuf__write(buf, "stuvwx", 6, pool));
+ /* now: no blocks, and 14 bytes in spill file. */
+
+ CHECK_READ(buf, 14, "klmn", pool);
+ /* now: no blocks, and 10 bytes in spill file. */
+
+ CHECK_READ(buf, 10, "opqr", pool);
+ /* now: no blocks, and 6 bytes in spill file. */
+
+ CHECK_READ(buf, 6, "stuv", pool);
+ /* now: no blocks, and 2 bytes in spill file. */
+
+ CHECK_READ(buf, 2, "wx", pool);
+ /* now: no blocks, and no spill file. */
+
+ return SVN_NO_ERROR;
+}
+
+
+static svn_error_t *
+test_spillbuf_eof(apr_pool_t *pool)
+{
+ svn_spillbuf_t *buf = svn_spillbuf__create(4 /* blocksize */,
+ 10 /* maxsize */,
+ pool);
+
+ SVN_ERR(svn_spillbuf__write(buf, "abcdef", 6, pool));
+ SVN_ERR(svn_spillbuf__write(buf, "ghijkl", 6, pool));
+ /* now: two blocks: 4 and 2 bytes, and 6 bytes in spill file. */
+
+ CHECK_READ(buf, 12, "abcd", pool);
+ CHECK_READ(buf, 8, "ef", pool);
+ CHECK_READ(buf, 6, "ghij", pool);
+ CHECK_READ(buf, 2, "kl", pool);
+ /* The spill file should have been emptied and forgotten. */
+
+ /* Assuming the spill file has been forgotten, this should result in
+ precisely the same behavior. Specifically: the initial write should
+ create two blocks, and the second write should be spilled. If there
+ *was* a spill file, then this written data would go into the file. */
+ SVN_ERR(svn_spillbuf__write(buf, "abcdef", 6, pool));
+ SVN_ERR(svn_spillbuf__write(buf, "ghijkl", 6, pool));
+ CHECK_READ(buf, 12, "abcd", pool);
+ CHECK_READ(buf, 8, "ef", pool);
+ CHECK_READ(buf, 6, "ghij", pool);
+ CHECK_READ(buf, 2, "kl", pool);
+ /* The spill file should have been emptied and forgotten. */
+
+ /* Now, let's do a sequence where we arrange to hit EOF precisely on
+ a block-sized read. Note: the second write must be more than 4 bytes,
+ or it will not cause a spill. We use 8 to get the right boundary. */
+ SVN_ERR(svn_spillbuf__write(buf, "abcdef", 6, pool));
+ SVN_ERR(svn_spillbuf__write(buf, "ghijklmn", 8, pool));
+ CHECK_READ(buf, 14, "abcd", pool);
+ CHECK_READ(buf, 10, "ef", pool);
+ CHECK_READ(buf, 8, "ghij", pool);
+ CHECK_READ(buf, 4, "klmn", pool);
+ /* We discard the spill file when we know it has no data, rather than
+ upon hitting EOF (upon a read attempt). Thus, the spill file should
+ be gone. */
+
+ /* Verify the forgotten spill file. */
+ SVN_ERR(svn_spillbuf__write(buf, "abcdef", 6, pool));
+ SVN_ERR(svn_spillbuf__write(buf, "ghijkl", 6, pool));
+ CHECK_READ(buf, 12, "abcd", pool);
+ CHECK_READ(buf, 8, "ef", pool);
+ CHECK_READ(buf, 6, "ghij", pool);
+ /* Two unread bytes remaining in the spill file. */
+ SVN_TEST_ASSERT(svn_spillbuf__get_size(buf) == 2);
+
+ return SVN_NO_ERROR;
+}
+
+
+/* The test table. */
+struct svn_test_descriptor_t test_funcs[] =
+ {
+ SVN_TEST_NULL,
+ SVN_TEST_PASS2(test_spillbuf_basic, "basic spill buffer test"),
+ SVN_TEST_PASS2(test_spillbuf_callback, "spill buffer read callback"),
+ SVN_TEST_PASS2(test_spillbuf_file, "spill buffer file test"),
+ SVN_TEST_PASS2(test_spillbuf_interleaving,
+ "interleaving reads and writes"),
+ SVN_TEST_PASS2(test_spillbuf_reader, "spill buffer reader test"),
+ SVN_TEST_PASS2(test_spillbuf_stream, "spill buffer stream test"),
+ SVN_TEST_PASS2(test_spillbuf_rwfile, "read/write spill file"),
+ SVN_TEST_PASS2(test_spillbuf_eof, "validate reaching EOF of spill file"),
+ SVN_TEST_NULL
+ };
diff --git a/subversion/tests/libsvn_subr/stream-test.c b/subversion/tests/libsvn_subr/stream-test.c
index 536e01c..c8dba13 100644
--- a/subversion/tests/libsvn_subr/stream-test.c
+++ b/subversion/tests/libsvn_subr/stream-test.c
@@ -67,7 +67,7 @@ test_stream_from_string(apr_pool_t *pool)
apr_size_t len;
inbuf = svn_stringbuf_create(strings[i], subpool);
- outbuf = svn_stringbuf_create("", subpool);
+ outbuf = svn_stringbuf_create_empty(subpool);
stream = svn_stream_from_stringbuf(inbuf, subpool);
len = TEST_BUF_SIZE;
while (len == TEST_BUF_SIZE)
@@ -94,7 +94,7 @@ test_stream_from_string(apr_pool_t *pool)
apr_size_t amt_read, len;
inbuf = svn_stringbuf_create(strings[i], subpool);
- outbuf = svn_stringbuf_create("", subpool);
+ outbuf = svn_stringbuf_create_empty(subpool);
stream = svn_stream_from_stringbuf(outbuf, subpool);
amt_read = 0;
while (amt_read < inbuf->len)
@@ -125,7 +125,7 @@ test_stream_from_string(apr_pool_t *pool)
static svn_stringbuf_t *
generate_test_bytes(int num_bytes, apr_pool_t *pool)
{
- svn_stringbuf_t *buffer = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *buffer = svn_stringbuf_create_empty(pool);
int total, repeat, repeat_iter;
char c;
@@ -138,7 +138,7 @@ generate_test_bytes(int num_bytes, apr_pool_t *pool)
{
if (c == 127)
repeat++;
- c = (c + 1) % 127;
+ c = (char)((c + 1) % 127);
repeat_iter = repeat;
}
}
@@ -189,8 +189,8 @@ test_stream_compressed(apr_pool_t *pool)
apr_size_t len;
origbuf = bufs[i];
- inbuf = svn_stringbuf_create("", subpool);
- outbuf = svn_stringbuf_create("", subpool);
+ inbuf = svn_stringbuf_create_empty(subpool);
+ outbuf = svn_stringbuf_create_empty(subpool);
stream = svn_stream_compressed(svn_stream_from_stringbuf(outbuf,
subpool),
@@ -232,8 +232,8 @@ static svn_error_t *
test_stream_tee(apr_pool_t *pool)
{
svn_stringbuf_t *test_bytes = generate_test_bytes(100, pool);
- svn_stringbuf_t *output_buf1 = svn_stringbuf_create("", pool);
- svn_stringbuf_t *output_buf2 = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *output_buf1 = svn_stringbuf_create_empty(pool);
+ svn_stringbuf_t *output_buf2 = svn_stringbuf_create_empty(pool);
svn_stream_t *source_stream = svn_stream_from_stringbuf(test_bytes, pool);
svn_stream_t *output_stream1 = svn_stream_from_stringbuf(output_buf1, pool);
svn_stream_t *output_stream2 = svn_stream_from_stringbuf(output_buf2, pool);
@@ -490,7 +490,7 @@ test_readonly(apr_pool_t *pool)
/* File should be writable */
SVN_ERR(svn_io_stat(&finfo, path, wanted, pool));
SVN_ERR(svn_io__is_finfo_read_only(&read_only, &finfo, pool));
- SVN_TEST_ASSERT(read_only == FALSE);
+ SVN_TEST_ASSERT(!read_only);
/* Set read only */
SVN_ERR(svn_io_set_file_read_only(path, FALSE, pool));
@@ -506,7 +506,7 @@ test_readonly(apr_pool_t *pool)
/* File should be writable */
SVN_ERR(svn_io_stat(&finfo, path, wanted, pool));
SVN_ERR(svn_io__is_finfo_read_only(&read_only, &finfo, pool));
- SVN_TEST_ASSERT(read_only == FALSE);
+ SVN_TEST_ASSERT(!read_only);
return SVN_NO_ERROR;
}
@@ -538,8 +538,8 @@ static svn_error_t *
test_stream_base64(apr_pool_t *pool)
{
svn_stream_t *stream;
- svn_stringbuf_t *actual = svn_stringbuf_create("", pool);
- svn_stringbuf_t *expected = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *actual = svn_stringbuf_create_empty(pool);
+ svn_stringbuf_t *expected = svn_stringbuf_create_empty(pool);
int i;
static const char *strings[] = {
"fairly boring test data... blah blah",
@@ -568,6 +568,165 @@ test_stream_base64(apr_pool_t *pool)
return SVN_NO_ERROR;
}
+/* This test doesn't test much unless run under valgrind when it
+ triggers the problem reported here:
+
+ http://mail-archives.apache.org/mod_mbox/subversion-dev/201202.mbox/%3C87sjik3m8q.fsf@stat.home.lan%3E
+
+ The two data writes caused the base 64 code to allocate a buffer
+ that was a byte short but exactly matched a stringbuf blocksize.
+ That meant the stringbuf didn't overallocate and a write beyond
+ the end of the buffer occurred.
+ */
+static svn_error_t *
+test_stream_base64_2(apr_pool_t *pool)
+{
+ const struct data_t {
+ const char *encoded1;
+ const char *encoded2;
+ } data[] = {
+ {
+ "MTI",
+ "123456789A123456789B123456789C123456789D123456789E"
+ "223456789A123456789B123456789C123456789D123456789E"
+ "323456789A123456789B123456789C123456789D123456789E"
+ "423456789A123456789B123456789C123456789D123456789E"
+ "523456789A123456789B123456789C123456789D123456789E"
+ "623456789A123456789B123456789C123456789D123456789E"
+ "723456789A123456789B123456789C123456789D123456789E"
+ "823456789A123456789B123456789C123456789D123456789E"
+ "923456789A123456789B123456789C123456789D123456789E"
+ "A23456789A123456789B123456789C123456789D123456789E"
+ "123456789A123456789B123456789C123456789D123456789E"
+ "223456789A123456789B123456789C123456789D123456789E"
+ "323456789A123456789B123456789C123456789D123456789E"
+ "423456789A123456789B123456789C123456789D123456789E"
+ "523456789A123456789B123456789C123456789D123456789E"
+ "623456789A123456789B123456789C123456789D123456789E"
+ "723456789A123456789B123456789C123456789D123456789E"
+ "823456789A123456789B123456789C123456789D123456789E"
+ "923456789A123456789B123456789C123456789D123456789E"
+ "B23456789A123456789B123456789C123456789D123456789E"
+ "123456789A123456789B123456789C123456789D123456789E"
+ "223456789A123456789B123456789C123456789D123456789E"
+ "323456789A123456789B123456789C123456789D123456789E"
+ "423456789A123456789B123456789C123456789D123456789E"
+ "523456789A123456789B123456789C123456789D123456789E"
+ "623456789A123456789B123456789C123456789D123456789E"
+ "723456789A123456789B123456789C123456789D123456789E"
+ "823456789A123456789B123456789C123456789D123456789E"
+ "923456789A123456789B123456789C123456789D123456789E"
+ "C23456789A123456789B123456789C123456789D123456789E"
+ "123456789A123456789B123456789C123456789D123456789E"
+ "223456789A123456789B123456789C123456789D123456789E"
+ "323456789A123456789B123456789C123456789D123456789E"
+ "423456789A123456789B123456789C123456789D123456789E"
+ "523456789A123456789B123456789C123456789D123456789E"
+ "623456789A123456789B123456789C123456789D123456789E"
+ "723456789A123456789B123456789C123456789D123456789E"
+ "823456789A123456789B123456789C123456789D123456789E"
+ "923456789A123456789B123456789C123456789D123456789E"
+ "D23456789A123456789B123456789C123456789D123456789E"
+ "123456789A123456789B123456789C123456789D123456789E"
+ "223456789A123456789B123456789C123456789D123456789E"
+ "323456789A123456789B123456789C123456789D123456789E"
+ "423456789A123456789B123456789C123456789D123456789E"
+ "523456789A123456789B123456789C123456789D123456789E"
+ "623456789A123456789B123456789C123456789D123456789E"
+ "723456789A123456789B123456789C123456789D123456789E"
+ "823456789A123456789B123456789C123456789D123456789E"
+ "923456789A123456789B123456789C123456789D123456789E"
+ "E23456789A123456789B123456789C123456789D123456789E"
+ "123456789A123456789B123456789C123456789D123456789E"
+ "223456789A123456789B123456789C123456789D123456789E"
+ "323456789A123456789B123456789C123456789D123456789E"
+ "423456789A123456789B123456789C123456789D123456789E"
+ "523456789A123456789B123456789C123456789D123456789E"
+ "623456789A123456789B123456789C123456789D123456789E"
+ "723456789A123456789B123456789C123456789D123456789E"
+ "823456789A123456789B123456789C123456789D123456789E"
+ "923456789A123456789B123456789C123456789D123456789E"
+ "F23456789A123456789B123456789C123456789D123456789E"
+ "123456789A123456789B123456789C123456789D123456789E"
+ "223456789A123456789B123456789C123456789D123456789E"
+ "323456789A123456789B123456789C123456789D123456789E"
+ "423456789A123456789B123456789C123456789D123456789E"
+ "523456789A123456789B123456789C123456789D123456789E"
+ "623456789A123456789B123456789C123456789D123456789E"
+ "723456789A123456789B123456789C123456789D123456789E"
+ "823456789A123456789B123456789C123456789D123456789E"
+ "923456789A123456789B123456789C123456789D123456789E"
+ "G23456789A123456789B123456789C123456789D123456789E"
+ "123456789A123456789B123456789C123456789D123456789E"
+ "223456789A123456789B123456789C123456789D123456789E"
+ "323456789A123456789B123456789C123456789D123456789E"
+ "423456789A123456789B123456789C123456789D123456789E"
+ "523456789A123456789B123456789C123456789D123456789E"
+ "623456789A123456789B123456789C123456789D123456789E"
+ "723456789A123456789B123456789C123456789D123456789E"
+ "823456789A123456789B123456789C123456789D123456789E"
+ "923456789A123456789B123456789C123456789D123456789E"
+ "H23456789A123456789B123456789C123456789D123456789E"
+ "123456789A123456789B123456789C123456789D123456789E"
+ "223456789A123456789B123456789C123456789D123456789E"
+ "323456789A123456789B123456789C123456789D123456789E"
+ "423456789A123456789B123456789C123456789D123456789E"
+ "523456789A123456789B123456789C123456789D123456789E"
+ "623456789A123456789B123456789C123456789D123456789E"
+ "723456789A123456789B123456789C123456789D123456789E"
+ "823456789A123456789B123456789C123456789D123456789E"
+ "923456789A123456789B123456789C123456789D123456789E"
+ "I23456789A123456789B123456789C123456789D123456789E"
+ "123456789A123456789B123456789C123456789D123456789E"
+ "223456789A123456789B123456789C123456789D123456789E"
+ "323456789A123456789B123456789C123456789D123456789E"
+ "423456789A123456789B123456789C123456789D123456789E"
+ "523456789A123456789B123456789C123456789D123456789E"
+ "623456789A123456789B123456789C123456789D123456789E"
+ "723456789A123456789B123456789C123456789D123456789E"
+ "823456789A123456789B123456789C123456789D123456789E"
+ "923456789A123456789B123456789C123456789D123456789E"
+ "J23456789A123456789B123456789C123456789D123456789E"
+ "123456789A123456789B123456789C123456789D123456789E"
+ "223456789A123456789B123456789C123456789D123456789E"
+ "323456789A123456789B123456789C123456789D123456789E"
+ "423456789A123456789B123456789C123456789D123456789E"
+ "523456789A123456789B123456789C123456789D12345"
+ },
+ {
+ NULL,
+ NULL,
+ },
+ };
+ int i;
+
+ for (i = 0; data[i].encoded1; i++)
+ {
+ apr_size_t len1 = strlen(data[i].encoded1);
+
+ svn_stringbuf_t *actual = svn_stringbuf_create_empty(pool);
+ svn_stringbuf_t *expected = svn_stringbuf_create_empty(pool);
+ svn_stream_t *stream = svn_stream_from_stringbuf(actual, pool);
+
+ stream = svn_base64_encode(stream, pool);
+ stream = svn_base64_decode(stream, pool);
+
+ SVN_ERR(svn_stream_write(stream, data[i].encoded1, &len1));
+ svn_stringbuf_appendbytes(expected, data[i].encoded1, len1);
+
+ if (data[i].encoded2)
+ {
+ apr_size_t len2 = strlen(data[i].encoded2);
+ SVN_ERR(svn_stream_write(stream, data[i].encoded2, &len2));
+ svn_stringbuf_appendbytes(expected, data[i].encoded2, len2);
+ }
+
+ SVN_ERR(svn_stream_close(stream));
+ }
+
+ return SVN_NO_ERROR;
+}
+
/* The test table. */
struct svn_test_descriptor_t test_funcs[] =
@@ -591,5 +750,7 @@ struct svn_test_descriptor_t test_funcs[] =
"test compressed streams with empty files"),
SVN_TEST_PASS2(test_stream_base64,
"test base64 encoding/decoding streams"),
+ SVN_TEST_PASS2(test_stream_base64_2,
+ "base64 decoding allocation problem"),
SVN_TEST_NULL
};
diff --git a/subversion/tests/libsvn_subr/string-test.c b/subversion/tests/libsvn_subr/string-test.c
index e6c285a..735db18 100644
--- a/subversion/tests/libsvn_subr/string-test.c
+++ b/subversion/tests/libsvn_subr/string-test.c
@@ -39,7 +39,7 @@
#include "svn_io.h"
#include "svn_error.h"
#include "svn_string.h" /* This includes <apr_*.h> */
-
+#include "private/svn_string_private.h"
/* A quick way to create error messages. */
static svn_error_t *
@@ -419,7 +419,7 @@ test15(apr_pool_t *pool)
static svn_error_t *
test16(apr_pool_t *pool)
{
- a = svn_stringbuf_create("", pool);
+ a = svn_stringbuf_create_empty(pool);
return test_find_char_backward(a->data, a->len, ',', 0, pool);
}
@@ -479,7 +479,7 @@ test21(apr_pool_t *pool)
svn_stringbuf_strip_whitespace(a);
- if (svn_stringbuf_compare(a, b) == TRUE)
+ if (svn_stringbuf_compare(a, b))
return SVN_NO_ERROR;
else
return fail(pool, "test failed");
@@ -511,6 +511,234 @@ test23(apr_pool_t *pool)
return test_stringbuf_unequal("abc", "abb", pool);
}
+static svn_error_t *
+test24(apr_pool_t *pool)
+{
+ char buffer[SVN_INT64_BUFFER_SIZE];
+ apr_size_t length;
+
+ length = svn__i64toa(buffer, 0);
+ SVN_TEST_ASSERT(length == 1);
+ SVN_TEST_STRING_ASSERT(buffer, "0");
+
+ length = svn__i64toa(buffer, 0x8000000000000000ll);
+ SVN_TEST_ASSERT(length == 20);
+ SVN_TEST_STRING_ASSERT(buffer, "-9223372036854775808");
+
+ length = svn__i64toa(buffer, 0x7fffffffffffffffll);
+ SVN_TEST_ASSERT(length == 19);
+ SVN_TEST_STRING_ASSERT(buffer, "9223372036854775807");
+
+ length = svn__ui64toa(buffer, 0ull);
+ SVN_TEST_ASSERT(length == 1);
+ SVN_TEST_STRING_ASSERT(buffer, "0");
+
+ length = svn__ui64toa(buffer, 0xffffffffffffffffull);
+ SVN_TEST_ASSERT(length == 20);
+ SVN_TEST_STRING_ASSERT(buffer, "18446744073709551615");
+
+ return test_stringbuf_unequal("abc", "abb", pool);
+}
+
+static svn_error_t *
+expect_stringbuf_equal(const svn_stringbuf_t* str1,
+ const char* str2,
+ apr_pool_t *pool)
+{
+ if (svn_stringbuf_compare(str1, svn_stringbuf_create(str2, pool)))
+ return SVN_NO_ERROR;
+ else
+ return fail(pool, "test failed");
+}
+
+static svn_error_t *
+test_stringbuf_insert(apr_pool_t *pool)
+{
+ a = svn_stringbuf_create("st , ", pool);
+
+ svn_stringbuf_insert(a, 0, "teflon", 2);
+ SVN_TEST_STRING_ASSERT(a->data, "test , ");
+
+ svn_stringbuf_insert(a, 5, "hllo", 4);
+ SVN_TEST_STRING_ASSERT(a->data, "test hllo, ");
+
+ svn_stringbuf_insert(a, 6, a->data + 1, 1);
+ SVN_TEST_STRING_ASSERT(a->data, "test hello, ");
+
+ svn_stringbuf_insert(a, 12, "world class", 5);
+ SVN_TEST_STRING_ASSERT(a->data, "test hello, world");
+
+ svn_stringbuf_insert(a, 1200, "!", 1);
+ SVN_TEST_STRING_ASSERT(a->data, "test hello, world!");
+
+ svn_stringbuf_insert(a, 4, "\0-\0", 3);
+ SVN_TEST_ASSERT(svn_stringbuf_compare(a,
+ svn_stringbuf_ncreate("test\0-\0 hello, world!",
+ 21, pool)));
+
+ svn_stringbuf_insert(a, 14, a->data + 4, 3);
+ SVN_TEST_ASSERT(svn_stringbuf_compare(a,
+ svn_stringbuf_ncreate("test\0-\0 hello,\0-\0 world!",
+ 24, pool)));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_stringbuf_remove(apr_pool_t *pool)
+{
+ a = svn_stringbuf_create("test hello, world!", pool);
+
+ svn_stringbuf_remove(a, 0, 2);
+ SVN_TEST_STRING_ASSERT(a->data, "st hello, world!");
+
+ svn_stringbuf_remove(a, 2, 2);
+ SVN_TEST_STRING_ASSERT(a->data, "stello, world!");
+
+ svn_stringbuf_remove(a, 5, 200);
+ SVN_TEST_STRING_ASSERT(a->data, "stell");
+
+ svn_stringbuf_remove(a, 1200, 393);
+ return expect_stringbuf_equal(a, "stell", pool);
+}
+
+static svn_error_t *
+test_stringbuf_replace(apr_pool_t *pool)
+{
+ a = svn_stringbuf_create("odd with some world?", pool);
+
+ svn_stringbuf_replace(a, 0, 3, "tester", 4);
+ SVN_TEST_STRING_ASSERT(a->data, "test with some world?");
+
+ svn_stringbuf_replace(a, 5, 10, "hllo, coder", 6);
+ SVN_TEST_STRING_ASSERT(a->data, "test hllo, world?");
+
+ svn_stringbuf_replace(a, 6, 0, a->data + 1, 1);
+ SVN_TEST_STRING_ASSERT(a->data, "test hello, world?");
+
+ svn_stringbuf_replace(a, 17, 10, "!", 1);
+ SVN_TEST_STRING_ASSERT(a->data, "test hello, world!");
+
+ svn_stringbuf_replace(a, 1200, 199, "!!", 2);
+ SVN_TEST_STRING_ASSERT(a->data, "test hello, world!!!");
+
+ svn_stringbuf_replace(a, 10, 2, "\0-\0", 3);
+ SVN_TEST_ASSERT(svn_stringbuf_compare(a,
+ svn_stringbuf_ncreate("test hello\0-\0world!!!",
+ 21, pool)));
+
+ svn_stringbuf_replace(a, 10, 3, a->data + 10, 3);
+ SVN_TEST_ASSERT(svn_stringbuf_compare(a,
+ svn_stringbuf_ncreate("test hello\0-\0world!!!",
+ 21, pool)));
+
+ svn_stringbuf_replace(a, 19, 1, a->data + 10, 3);
+ SVN_TEST_ASSERT(svn_stringbuf_compare(a,
+ svn_stringbuf_ncreate("test hello\0-\0world!\0-\0!",
+ 23, pool)));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_string_similarity(apr_pool_t *pool)
+{
+ const struct sim_score_test_t
+ {
+ const char *stra;
+ const char *strb;
+ apr_size_t lcs;
+ int score;
+ } tests[] =
+ {
+#define SCORE(lcs, len) ((2000 * (lcs) + (len)/2) / (len))
+
+ /* Equality */
+ {"", "", 0, 1000},
+ {"quoth", "quoth", 5, SCORE(5, 5+5)},
+
+ /* Deletion at start */
+ {"quoth", "uoth", 4, SCORE(4, 5+4)},
+ {"uoth", "quoth", 4, SCORE(4, 4+5)},
+
+ /* Deletion at end */
+ {"quoth", "quot", 4, SCORE(4, 5+4)},
+ {"quot", "quoth", 4, SCORE(4, 4+5)},
+
+ /* Insertion at start */
+ {"quoth", "Xquoth", 5, SCORE(5, 5+6)},
+ {"Xquoth", "quoth", 5, SCORE(5, 6+5)},
+
+ /* Insertion at end */
+ {"quoth", "quothX", 5, SCORE(5, 5+6)},
+ {"quothX", "quoth", 5, SCORE(5, 6+5)},
+
+ /* Insertion in middle */
+ {"quoth", "quoXth", 5, SCORE(5, 5+6)},
+ {"quoXth", "quoth", 5, SCORE(5, 6+5)},
+
+ /* Transposition at start */
+ {"quoth", "uqoth", 4, SCORE(4, 5+5)},
+ {"uqoth", "quoth", 4, SCORE(4, 5+5)},
+
+ /* Transposition at end */
+ {"quoth", "quoht", 4, SCORE(4, 5+5)},
+ {"quoht", "quoth", 4, SCORE(4, 5+5)},
+
+ /* Transposition in middle */
+ {"quoth", "qutoh", 4, SCORE(4, 5+5)},
+ {"qutoh", "quoth", 4, SCORE(4, 5+5)},
+
+ /* Difference */
+ {"quoth", "raven", 0, SCORE(0, 5+5)},
+ {"raven", "quoth", 0, SCORE(0, 5+5)},
+ {"x", "", 0, SCORE(0, 1+0)},
+ {"", "x", 0, SCORE(0, 0+1)},
+ {"", "quoth", 0, SCORE(0, 0+5)},
+ {"quoth", "", 0, SCORE(0, 5+0)},
+ {"quoth", "the raven", 2, SCORE(2, 5+9)},
+ {"the raven", "quoth", 2, SCORE(2, 5+9)},
+ {NULL, NULL}
+ };
+
+ const struct sim_score_test_t *t;
+ svn_membuf_t buffer;
+
+ svn_membuf__create(&buffer, 0, pool);
+ for (t = tests; t->stra; ++t)
+ {
+ apr_size_t lcs;
+ const unsigned int score =
+ svn_cstring__similarity(t->stra, t->strb, &buffer, &lcs);
+ /*
+ fprintf(stderr,
+ "lcs %s ~ %s score %.3f (%"APR_SIZE_T_FMT
+ ") expected %.3f (%"APR_SIZE_T_FMT"))\n",
+ t->stra, t->strb, score/1000.0, lcs, t->score/1000.0, t->lcs);
+ */
+ if (score != t->score)
+ return fail(pool, "%s ~ %s score %.3f <> expected %.3f",
+ t->stra, t->strb, score/1000.0, t->score/1000.0);
+
+ if (lcs != t->lcs)
+ return fail(pool,
+ "%s ~ %s lcs %"APR_SIZE_T_FMT
+ " <> expected %"APR_SIZE_T_FMT,
+ t->stra, t->strb, lcs, t->lcs);
+ }
+
+ /* Test partial similarity */
+ {
+ const svn_string_t foo = {"svn:foo", 4};
+ const svn_string_t bar = {"svn:bar", 4};
+ if (1000 != svn_string__similarity(&foo, &bar, &buffer, NULL))
+ return fail(pool, "'%s'[:4] ~ '%s'[:4] found different",
+ foo.data, bar.data);
+ }
+
+ return SVN_NO_ERROR;
+}
+
/*
====================================================================
If you add a new test to this file, update this array.
@@ -568,5 +796,15 @@ struct svn_test_descriptor_t test_funcs[] =
"compare stringbufs; different lengths"),
SVN_TEST_PASS2(test23,
"compare stringbufs; same length, different content"),
+ SVN_TEST_PASS2(test24,
+ "verify i64toa"),
+ SVN_TEST_PASS2(test_stringbuf_insert,
+ "check inserting into svn_stringbuf_t"),
+ SVN_TEST_PASS2(test_stringbuf_remove,
+ "check deletion from svn_stringbuf_t"),
+ SVN_TEST_PASS2(test_stringbuf_replace,
+ "check replacement in svn_stringbuf_t"),
+ SVN_TEST_PASS2(test_string_similarity,
+ "test string similarity scores"),
SVN_TEST_NULL
};
diff --git a/subversion/tests/libsvn_subr/subst_translate-test.c b/subversion/tests/libsvn_subr/subst_translate-test.c
index 537c9b3..1e555f2 100644
--- a/subversion/tests/libsvn_subr/subst_translate-test.c
+++ b/subversion/tests/libsvn_subr/subst_translate-test.c
@@ -23,12 +23,14 @@
#include <locale.h>
#include <string.h>
+#include <apr_time.h>
#include "../svn_test.h"
#include "svn_types.h"
#include "svn_string.h"
#include "svn_subst.h"
+#include "svn_hash.h"
#define ARRAY_LEN(ary) ((sizeof (ary)) / (sizeof ((ary)[0])))
@@ -96,9 +98,7 @@ test_svn_subst_translate_string2(apr_pool_t *pool)
source_string,
"ISO-8859-1", FALSE, pool,
pool);
- SVN_TEST_ASSERT(err != SVN_NO_ERROR);
- SVN_TEST_ASSERT(err->apr_err == SVN_ERR_IO_INCONSISTENT_EOL);
- svn_error_clear(err);
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_IO_INCONSISTENT_EOL);
}
return SVN_NO_ERROR;
@@ -115,7 +115,7 @@ test_svn_subst_translate_string2_null_encoding_helper(apr_pool_t *pool)
svn_string_t *new_value = NULL;
svn_boolean_t translated_to_utf8 = FALSE;
svn_boolean_t translated_line_endings = TRUE;
- /* 'Æ', which is 0xc6 in both ISO-8859-1 and Windows-1252 */
+ /* 'Æ', which is 0xc6 in both ISO-8859-1 and Windows-1252 */
svn_string_t *source_string = svn_string_create("\xc6", pool);
SVN_ERR(svn_subst_translate_string2(&new_value, &translated_to_utf8,
@@ -123,8 +123,8 @@ test_svn_subst_translate_string2_null_encoding_helper(apr_pool_t *pool)
source_string, NULL, FALSE,
pool, pool));
SVN_TEST_STRING_ASSERT(new_value->data, "\xc3\x86");
- SVN_TEST_ASSERT(translated_to_utf8 == TRUE);
- SVN_TEST_ASSERT(translated_line_endings == FALSE);
+ SVN_TEST_ASSERT(translated_to_utf8);
+ SVN_TEST_ASSERT(!translated_line_endings);
}
return SVN_NO_ERROR;
@@ -248,6 +248,258 @@ test_svn_subst_translate_cstring2(apr_pool_t *pool)
return SVN_NO_ERROR;
}
+static svn_error_t *
+test_svn_subst_build_keywords3(apr_pool_t *pool)
+{
+ /* Test expansion of custom keywords. */
+ struct keywords_tests_data
+ {
+ const char *keyword_name;
+ const char *keywords_string;
+ const char *expanded_keyword;
+ const char *rev;
+ const char *url;
+ const char *repos_root_url;
+ /* Can't test date since expanded value depends on local clock. */
+ const char *author;
+ }
+ tests[] =
+ {
+ {"FOO", "FOO=%P%_%a%_%b%_%%",
+ "trunk/foo.txt stsp foo.txt %",
+ "1234", "http://svn.example.com/repos/trunk/foo.txt",
+ "http://svn.example.com/repos", "stsp"},
+ {"FOO", "FOO=author%_=%_%a",
+ "author = stsp",
+ "1234", "http://svn.example.com/repos/trunk/foo.txt",
+ "http://svn.example.com/repos", "stsp"},
+ {"MyKeyword", "MyKeyword=%r%_%u%_%_%a",
+ "4567 http://svn.example.com/svn/branches/myfile jrandom",
+ "4567", "http://svn.example.com/svn/branches/myfile",
+ "http://svn.example.com/svn", "jrandom"},
+ {"FreeBSD", "FreeBSD=%H",
+ "head/README 222812 joel", /* date is not expanded in this test */
+ "222812", "http://svn.freebsd.org/base/head/README",
+ "http://svn.freebsd.org/base", "joel"},
+ {"FreeBSD", "FreeBSD=%I",
+ "README 222812 joel", /* date is not expanded in this test */
+ "222812", "http://svn.freebsd.org/base/head/README",
+ "http://svn.freebsd.org/base", "joel"},
+ { NULL, NULL, NULL, NULL, NULL, NULL, NULL}
+ };
+
+ const struct keywords_tests_data *t;
+
+ for (t = tests; t->keyword_name != NULL; t++)
+ {
+ apr_hash_t *kw;
+ svn_string_t *expanded_keyword;
+
+ SVN_ERR(svn_subst_build_keywords3(&kw, t->keywords_string,
+ t->rev, t->url, t->repos_root_url,
+ 0 /* date */, t->author, pool));
+ expanded_keyword = svn_hash_gets(kw, t->keyword_name);
+ SVN_TEST_ASSERT(expanded_keyword != NULL);
+ SVN_TEST_STRING_ASSERT(expanded_keyword->data, t->expanded_keyword);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_svn_subst_truncated_keywords(apr_pool_t *pool)
+{
+ svn_string_t *src_string
+ = svn_string_create("$Qq: "
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "012345678901234567890123456789012345678901234567"
+ " $", pool);
+ svn_stream_t *src_stream = svn_stream_from_string(src_string, pool);
+ svn_stringbuf_t *dst_stringbuf = svn_stringbuf_create_empty(pool);
+ svn_stream_t *dst_stream = svn_stream_from_stringbuf(dst_stringbuf, pool);
+ apr_hash_t *keywords = apr_hash_make(pool);
+ svn_string_t *expanded
+ = svn_string_create("01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "012345678901234567890123456789012345678901234567"
+ "xxxxxxxxxx",
+ pool);
+
+ /* The source is already at the maximum length. */
+ SVN_TEST_ASSERT(src_string->len == SVN_KEYWORD_MAX_LEN);
+
+ svn_hash_sets(keywords, "Qq", expanded);
+ dst_stream = svn_subst_stream_translated(dst_stream, NULL, FALSE, keywords,
+ TRUE, pool);
+ SVN_ERR(svn_stream_copy3(src_stream, dst_stream, NULL, NULL, pool));
+
+ /* The expanded value would make the keyword longer than the maximum
+ allowed so it must be truncated; the remaining part of the
+ expanded value is the same as the source. */
+ SVN_TEST_STRING_ASSERT(dst_stringbuf->data, src_string->data);
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_one_long_keyword(const char *keyword,
+ const char *expected,
+ apr_pool_t *pool)
+{
+ svn_string_t *src_string;
+ svn_stream_t *src_stream, *dst_stream;
+ svn_stringbuf_t *dst_stringbuf, *src_stringbuf;
+ apr_hash_t *keywords = apr_hash_make(pool);
+ svn_string_t *expanded = svn_string_create("abcdefg", pool);
+
+ svn_hash_sets(keywords, keyword, expanded);
+
+ /* Expand */
+ src_string = svn_string_createf(pool, "$%s$", keyword);
+ src_stream = svn_stream_from_string(src_string, pool);
+ dst_stringbuf = svn_stringbuf_create_empty(pool);
+ dst_stream = svn_stream_from_stringbuf(dst_stringbuf, pool);
+ dst_stream = svn_subst_stream_translated(dst_stream, NULL, FALSE, keywords,
+ TRUE, pool);
+ SVN_ERR(svn_stream_copy3(src_stream, dst_stream, NULL, NULL, pool));
+
+ SVN_TEST_STRING_ASSERT(dst_stringbuf->data, expected);
+
+ /* Unexpand */
+ src_stringbuf = dst_stringbuf;
+ src_stream = svn_stream_from_stringbuf(src_stringbuf, pool);
+ dst_stringbuf = svn_stringbuf_create_empty(pool);
+ dst_stream = svn_stream_from_stringbuf(dst_stringbuf, pool);
+ dst_stream = svn_subst_stream_translated(dst_stream, NULL, FALSE, keywords,
+ FALSE, pool);
+ SVN_ERR(svn_stream_copy3(src_stream, dst_stream, NULL, NULL, pool));
+
+ SVN_TEST_STRING_ASSERT(dst_stringbuf->data, src_string->data);
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_svn_subst_long_keywords(apr_pool_t *pool)
+{
+ /* The longest keyword that can be expanded to a value: there is
+ space for one character in the expanded value. */
+ const char keyword_p1[]
+ = "Q"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "012345678901234567890123456789012345678901234567";
+
+ /* The longest keyword that can be expanded: the value is empty. */
+ const char keyword_z[]
+ = "Q"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "0123456789012345678901234567890123456789012345678";
+
+ /* One more than the longest keyword that can be expanded. */
+ const char keyword_m1[]
+ = "Q"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789";
+
+ /* Two more than the longest keyword that can be expanded. */
+ const char keyword_m2[]
+ = "Q"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "0";
+
+ /* Three more than the longest keyword that can be expanded. */
+ const char keyword_m3[]
+ = "Q"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01";
+
+ /* Four more than the longest keyword that can be expanded. */
+ const char keyword_m4[]
+ = "Q"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "012";
+
+ /* Five more than the longest keyword that can be expanded. */
+ const char keyword_m5[]
+ = "Q"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "0123";
+
+ /* Six more than the longest keyword that can be expanded. */
+ const char keyword_m6[]
+ = "Q"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234";
+
+ SVN_ERR(test_one_long_keyword(keyword_p1,
+ apr_psprintf(pool, "$%s: a $", keyword_p1),
+ pool));
+
+ SVN_ERR(test_one_long_keyword(keyword_z,
+ apr_psprintf(pool, "$%s: $", keyword_z),
+ pool));
+
+ SVN_ERR(test_one_long_keyword(keyword_m1,
+ apr_psprintf(pool, "$%s$", keyword_m1),
+ pool));
+
+ SVN_ERR(test_one_long_keyword(keyword_m2,
+ apr_psprintf(pool, "$%s$", keyword_m2),
+ pool));
+
+ SVN_ERR(test_one_long_keyword(keyword_m3,
+ apr_psprintf(pool, "$%s$", keyword_m3),
+ pool));
+
+ SVN_ERR(test_one_long_keyword(keyword_m4,
+ apr_psprintf(pool, "$%s$", keyword_m4),
+ pool));
+
+ SVN_ERR(test_one_long_keyword(keyword_m5,
+ apr_psprintf(pool, "$%s$", keyword_m5),
+ pool));
+
+ SVN_ERR(test_one_long_keyword(keyword_m6,
+ apr_psprintf(pool, "$%s$", keyword_m6),
+ pool));
+
+ return SVN_NO_ERROR;
+}
+
struct svn_test_descriptor_t test_funcs[] =
{
SVN_TEST_NULL,
@@ -259,5 +511,11 @@ struct svn_test_descriptor_t test_funcs[] =
"test repairing svn_subst_translate_string2()"),
SVN_TEST_PASS2(test_svn_subst_translate_cstring2,
"test svn_subst_translate_cstring2()"),
+ SVN_TEST_PASS2(test_svn_subst_build_keywords3,
+ "test svn_subst_build_keywords3()"),
+ SVN_TEST_PASS2(test_svn_subst_truncated_keywords,
+ "test truncated keywords (issue 4349)"),
+ SVN_TEST_PASS2(test_svn_subst_long_keywords,
+ "test long keywords (issue 4350)"),
SVN_TEST_NULL
};
diff --git a/subversion/tests/libsvn_subr/target-test.c b/subversion/tests/libsvn_subr/target-test.c
deleted file mode 100644
index 9ab42c1..0000000
--- a/subversion/tests/libsvn_subr/target-test.c
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * target-test.c: test the condense_targets functions
- *
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- * ====================================================================
- */
-
-#include <apr_general.h>
-
-
-#ifdef _MSC_VER
-#include <direct.h>
-#define getcwd _getcwd
-#else
-#include <unistd.h> /* for getcwd() */
-#endif
-
-#define SVN_DEPRECATED
-
-#include "svn_pools.h"
-#include "svn_path.h"
-
-#include "../svn_test.h"
-
-typedef svn_error_t *(*condense_targets_func_t)
- (const char **pcommon,
- apr_array_header_t **pcondensed_targets,
- const apr_array_header_t *targets,
- svn_boolean_t remove_redundancies,
- apr_pool_t *pool);
-
-/** Executes function CONDENSE_TARGETS twice - with and without requesting the
- * condensed targets list - on TEST_TARGETS (comma sep. string) and compares
- * the results with EXP_COMMON and EXP_TARGETS (comma sep. string).
- *
- * @note: a '%' character at the beginning of EXP_COMMON or EXP_TARGETS will
- * be replaced by the current working directory.
- *
- * Returns an error if any of the comparisons fail.
- */
-static svn_error_t *
-condense_targets_tests_helper(const char* title,
- const char* test_targets,
- const char* exp_common,
- const char* exp_targets,
- const char* func_name,
- condense_targets_func_t condense_targets,
- apr_pool_t *pool)
-{
- apr_array_header_t *targets;
- apr_array_header_t *condensed_targets;
- const char *common_path, *common_path2, *curdir;
- char *token, *iter;
- const char *exp_common_abs = exp_common;
- int i;
- char buf[8192];
-
- if (! getcwd(buf, sizeof(buf)))
- return svn_error_create(SVN_ERR_BASE, NULL, "getcwd() failed");
- curdir = svn_path_internal_style(buf, pool);
-
- /* Create the target array */
- targets = apr_array_make(pool, sizeof(test_targets), sizeof(const char *));
- token = apr_strtok(apr_pstrdup(pool, test_targets), ",", &iter);
- while (token)
- {
- APR_ARRAY_PUSH(targets, const char *) =
- svn_path_internal_style(token, pool);
- token = apr_strtok(NULL, ",", &iter);
- };
-
- /* Call the function */
- SVN_ERR(condense_targets(&common_path, &condensed_targets, targets,
- TRUE, pool));
-
- /* Verify the common part with the expected (prefix with cwd). */
- if (*exp_common == '%')
- exp_common_abs = apr_pstrcat(pool, curdir, exp_common + 1, (char *)NULL);
-
- if (strcmp(common_path, exp_common_abs) != 0)
- {
- return svn_error_createf
- (SVN_ERR_TEST_FAILED, NULL,
- "%s (test %s) returned %s instead of %s",
- func_name, title,
- common_path, exp_common_abs);
- }
-
- /* Verify the condensed targets */
- token = apr_strtok(apr_pstrdup(pool, exp_targets), ",", &iter);
- for (i = 0; i < condensed_targets->nelts; i++)
- {
- const char * target = APR_ARRAY_IDX(condensed_targets, i, const char*);
- if (token && (*token == '%'))
- token = apr_pstrcat(pool, curdir, token + 1, (char *)NULL);
- if (! token ||
- (target && (strcmp(target, token) != 0)))
- {
- return svn_error_createf
- (SVN_ERR_TEST_FAILED, NULL,
- "%s (test %s) couldn't find %s in expected targets list",
- func_name, title,
- target);
- }
- token = apr_strtok(NULL, ",", &iter);
- }
-
- /* Now ensure it works without the pbasename */
- SVN_ERR(condense_targets(&common_path2, NULL, targets, TRUE, pool));
-
- /* Verify the common part again */
- if (strcmp(common_path, common_path2) != 0)
- {
- return svn_error_createf
- (SVN_ERR_TEST_FAILED, NULL,
- "%s (test %s): Common path without getting targets %s does not match" \
- "common path with targets %s",
- func_name, title,
- common_path2, common_path);
- }
-
- return SVN_NO_ERROR;
-}
-
-
-static svn_error_t *
-test_path_condense_targets(apr_pool_t *pool)
-{
- int i;
- struct {
- const char* title;
- const char* targets;
- const char* exp_common;
- const char* exp_targets;
- } tests[] = {
- { "normal use", "z/A/B,z/A,z/A/C,z/D/E,z/D/F,z/D,z/G,z/G/H,z/G/I",
- "%/z", "A,D,G" },
- {"identical dirs", "z/A,z/A,z/A,z/A",
- "%/z/A", "" },
- {"identical files", "z/A/file,z/A/file,z/A/file,z/A/file",
- "%/z/A/file", "" },
- {"single dir", "z/A",
- "%/z/A", "" },
- {"single file", "z/A/file",
- "%/z/A/file", "" },
- {"URLs", "http://host/A/C,http://host/A/C/D,http://host/A/B/D",
- "http://host/A", "C,B/D" },
- {"URLs with no common prefix",
- "http://host1/A/C,http://host2/A/C/D,http://host3/A/B/D",
- "", "http://host1/A/C,http://host2/A/C/D,http://host3/A/B/D" },
- {"file URLs with no common prefix", "file:///A/C,file:///B/D",
- "", "file:///A/C,file:///B/D" },
- {"URLs with mixed protocols",
- "http://host/A/C,file:///B/D,gopher://host/A",
- "", "http://host/A/C,file:///B/D,gopher://host/A" },
- {"mixed paths and URLs",
- "z/A/B,z/A,http://host/A/C/D,http://host/A/C",
- "", "%/z/A,http://host/A/C" },
- };
-
- for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++)
- {
- SVN_ERR(condense_targets_tests_helper(tests[i].title,
- tests[i].targets,
- tests[i].exp_common,
- tests[i].exp_targets,
- "svn_path_condense_targets",
- svn_path_condense_targets,
- pool));
- }
-
- return SVN_NO_ERROR;
-}
-
-
-
-/* The test table. */
-
-struct svn_test_descriptor_t test_funcs[] =
- {
- SVN_TEST_NULL,
- SVN_TEST_PASS2(test_path_condense_targets,
- "test svn_path_condense_targets"),
- SVN_TEST_NULL
- };
diff --git a/subversion/tests/libsvn_subr/utf-test.c b/subversion/tests/libsvn_subr/utf-test.c
index 474e308..2028e14 100644
--- a/subversion/tests/libsvn_subr/utf-test.c
+++ b/subversion/tests/libsvn_subr/utf-test.c
@@ -197,7 +197,7 @@ utf_validate2(apr_pool_t *pool)
/* A random string; experiment shows that it's occasionally (less
than 1%) valid but usually invalid. */
for (j = 0; j < sizeof(str) - 1; ++j)
- str[j] = range_rand(0, 255);
+ str[j] = (char)range_rand(0, 255);
str[sizeof(str) - 1] = 0;
len = strlen(str);
diff --git a/subversion/tests/libsvn_subr/zlib.deflated b/subversion/tests/libsvn_subr/zlib.deflated
new file mode 100644
index 0000000..73dc6ae
--- /dev/null
+++ b/subversion/tests/libsvn_subr/zlib.deflated
Binary files differ
diff --git a/subversion/tests/libsvn_wc/conflict-data-test.c b/subversion/tests/libsvn_wc/conflict-data-test.c
new file mode 100644
index 0000000..97d22ea
--- /dev/null
+++ b/subversion/tests/libsvn_wc/conflict-data-test.c
@@ -0,0 +1,831 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+/*
+ * conflict-data-test.c -- test the storage of tree conflict data
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <apr_hash.h>
+#include <apr_tables.h>
+
+#include "svn_props.h"
+#include "svn_pools.h"
+#include "svn_hash.h"
+#include "svn_types.h"
+#include "svn_wc.h"
+#include "private/svn_wc_private.h"
+#include "utils.h"
+#include "../svn_test.h"
+#include "../../libsvn_wc/tree_conflicts.h"
+#include "../../libsvn_wc/wc.h"
+#include "../../libsvn_wc/wc_db.h"
+#include "../../libsvn_wc/conflicts.h"
+
+/* A quick way to create error messages. */
+static svn_error_t *
+fail(apr_pool_t *pool, const char *fmt, ...)
+{
+ va_list ap;
+ char *msg;
+
+ va_start(ap, fmt);
+ msg = apr_pvsprintf(pool, fmt, ap);
+ va_end(ap);
+
+ return svn_error_create(SVN_ERR_TEST_FAILED, 0, msg);
+}
+
+/* Assert that two integers are equal. Return an error if not. */
+#define ASSERT_INT_EQ(a, b) \
+ do { \
+ if ((a) != (b)) \
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL, \
+ "failed: ASSERT_INT_EQ(" #a ", " #b ") " \
+ "-> (%d == %d)", a, b); \
+ } while (0)
+
+/* Assert that two strings are equal or both null. Return an error if not. */
+#define ASSERT_STR_EQ(a, b) \
+ SVN_TEST_STRING_ASSERT(a, b)
+
+/* Assert that two version_t's are equal or both null. Return an error if not. */
+static svn_error_t *
+compare_version(const svn_wc_conflict_version_t *actual,
+ const svn_wc_conflict_version_t *expected)
+{
+ if (actual == NULL && expected == NULL)
+ return SVN_NO_ERROR;
+
+ SVN_TEST_ASSERT(actual && expected);
+ ASSERT_STR_EQ(actual->repos_url, expected->repos_url);
+ ASSERT_INT_EQ((int)actual->peg_rev, (int)expected->peg_rev);
+ ASSERT_STR_EQ(actual->path_in_repos, expected->path_in_repos);
+ ASSERT_INT_EQ(actual->node_kind, expected->node_kind);
+ return SVN_NO_ERROR;
+}
+
+/* Assert that two conflict descriptions contain exactly the same data
+ * (including names of temporary files), or are both NULL. Return an
+ * error if not. */
+static svn_error_t *
+compare_conflict(const svn_wc_conflict_description2_t *actual,
+ const svn_wc_conflict_description2_t *expected)
+{
+ if (actual == NULL && expected == NULL)
+ return SVN_NO_ERROR;
+
+ SVN_TEST_ASSERT(actual && expected);
+
+ ASSERT_INT_EQ(actual->kind, expected->kind);
+ ASSERT_STR_EQ(actual->local_abspath, expected->local_abspath);
+ ASSERT_INT_EQ(actual->node_kind, expected->node_kind);
+ ASSERT_STR_EQ(actual->property_name, expected->property_name);
+ ASSERT_INT_EQ(actual->is_binary, expected->is_binary);
+ ASSERT_STR_EQ(actual->mime_type, expected->mime_type);
+ ASSERT_INT_EQ(actual->action, expected->action);
+ ASSERT_INT_EQ(actual->reason, expected->reason);
+ ASSERT_STR_EQ(actual->base_abspath, expected->base_abspath);
+ ASSERT_STR_EQ(actual->their_abspath, expected->their_abspath);
+ ASSERT_STR_EQ(actual->my_abspath, expected->my_abspath);
+ ASSERT_STR_EQ(actual->merged_file, expected->merged_file);
+ ASSERT_INT_EQ(actual->operation, expected->operation);
+ SVN_ERR(compare_version(actual->src_left_version,
+ expected->src_left_version));
+ SVN_ERR(compare_version(actual->src_right_version,
+ expected->src_right_version));
+ return SVN_NO_ERROR;
+}
+
+/* Assert that a file contains the expected data. Return an
+ * error if not. */
+static svn_error_t *
+compare_file_content(const char *file_abspath,
+ const char *expected_val,
+ apr_pool_t *scratch_pool)
+{
+ svn_stringbuf_t *actual_val;
+
+ SVN_ERR(svn_stringbuf_from_file2(&actual_val, file_abspath, scratch_pool));
+ ASSERT_STR_EQ(actual_val->data, expected_val);
+ return SVN_NO_ERROR;
+}
+
+/* Assert that ACTUAL and EXPECTED both represent the same property
+ * conflict, or are both NULL. Return an error if not.
+ *
+ * Compare the property values found in files named by
+ * ACTUAL->base_abspath, ACTUAL->my_abspath, ACTUAL->merged_abspath
+ * with EXPECTED_BASE_VAL, EXPECTED_MY_VAL, EXPECTED_THEIR_VAL
+ * respectively, ignoring the corresponding fields in EXPECTED. */
+static svn_error_t *
+compare_prop_conflict(const svn_wc_conflict_description2_t *actual,
+ const svn_wc_conflict_description2_t *expected,
+ const char *expected_base_val,
+ const char *expected_my_val,
+ const char *expected_their_val,
+ apr_pool_t *scratch_pool)
+{
+ if (actual == NULL && expected == NULL)
+ return SVN_NO_ERROR;
+
+ SVN_TEST_ASSERT(actual && expected);
+ ASSERT_INT_EQ(actual->kind, svn_wc_conflict_kind_property);
+ ASSERT_INT_EQ(expected->kind, svn_wc_conflict_kind_property);
+
+ ASSERT_STR_EQ(actual->local_abspath, expected->local_abspath);
+ ASSERT_INT_EQ(actual->node_kind, expected->node_kind);
+ ASSERT_STR_EQ(actual->property_name, expected->property_name);
+ ASSERT_INT_EQ(actual->action, expected->action);
+ ASSERT_INT_EQ(actual->reason, expected->reason);
+ ASSERT_INT_EQ(actual->operation, expected->operation);
+ SVN_ERR(compare_version(actual->src_left_version,
+ expected->src_left_version));
+ SVN_ERR(compare_version(actual->src_right_version,
+ expected->src_right_version));
+
+ SVN_ERR(compare_file_content(actual->base_abspath, expected_base_val,
+ scratch_pool));
+ SVN_ERR(compare_file_content(actual->my_abspath, expected_my_val,
+ scratch_pool));
+ /* Historical wart: for a prop conflict, 'theirs' is in the 'merged_file'
+ * field, and the conflict artifact file is in the 'theirs_abspath' field. */
+ SVN_ERR(compare_file_content(actual->merged_file, expected_their_val,
+ scratch_pool));
+ /*ASSERT_STR_EQ(actual->theirs_abspath, conflict_artifact_file));*/
+
+ /* These are 'undefined' for a prop conflict */
+ /*ASSERT_INT_EQ(actual->is_binary, expected->is_binary);*/
+ /*ASSERT_STR_EQ(actual->mime_type, expected->mime_type);*/
+
+ return SVN_NO_ERROR;
+}
+
+/* Create and return a tree conflict description */
+static svn_wc_conflict_description2_t *
+tree_conflict_create(const char *local_abspath,
+ svn_node_kind_t node_kind,
+ svn_wc_operation_t operation,
+ svn_wc_conflict_action_t action,
+ svn_wc_conflict_reason_t reason,
+ const char *left_repo,
+ const char *left_path,
+ svn_revnum_t left_revnum,
+ svn_node_kind_t left_kind,
+ const char *right_repo,
+ const char *right_path,
+ svn_revnum_t right_revnum,
+ svn_node_kind_t right_kind,
+ apr_pool_t *result_pool)
+{
+ svn_wc_conflict_version_t *left, *right;
+ svn_wc_conflict_description2_t *conflict;
+
+ left = svn_wc_conflict_version_create2(left_repo, NULL, left_path,
+ left_revnum, left_kind, result_pool);
+ right = svn_wc_conflict_version_create2(right_repo, NULL, right_path,
+ right_revnum, right_kind,
+ result_pool);
+ conflict = svn_wc_conflict_description_create_tree2(
+ local_abspath, node_kind, operation,
+ left, right, result_pool);
+ conflict->action = action;
+ conflict->reason = reason;
+ return conflict;
+}
+
+static svn_error_t *
+test_deserialize_tree_conflict(apr_pool_t *pool)
+{
+ const svn_wc_conflict_description2_t *conflict;
+ svn_wc_conflict_description2_t *exp_conflict;
+ const char *tree_conflict_data;
+ const char *local_abspath;
+ const svn_skel_t *skel;
+
+ tree_conflict_data = "(conflict Foo.c file update deleted edited "
+ "(version 0 2 -1 0 0 ) (version 0 2 -1 0 0 ))";
+
+ SVN_ERR(svn_dirent_get_absolute(&local_abspath, "Foo.c", pool));
+ exp_conflict = svn_wc_conflict_description_create_tree2(
+ local_abspath, svn_node_file, svn_wc_operation_update,
+ NULL, NULL, pool);
+ exp_conflict->action = svn_wc_conflict_action_delete;
+ exp_conflict->reason = svn_wc_conflict_reason_edited;
+
+ skel = svn_skel__parse(tree_conflict_data, strlen(tree_conflict_data), pool);
+ SVN_ERR(svn_wc__deserialize_conflict(&conflict, skel, "", pool, pool));
+
+ if ((conflict->node_kind != exp_conflict->node_kind) ||
+ (conflict->action != exp_conflict->action) ||
+ (conflict->reason != exp_conflict->reason) ||
+ (conflict->operation != exp_conflict->operation) ||
+ (strcmp(conflict->local_abspath, exp_conflict->local_abspath) != 0))
+ return fail(pool, "Unexpected tree conflict");
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_serialize_tree_conflict_data(apr_pool_t *pool)
+{
+ svn_wc_conflict_description2_t *conflict;
+ const char *tree_conflict_data;
+ const char *expected;
+ const char *local_abspath;
+ svn_skel_t *skel;
+
+ SVN_ERR(svn_dirent_get_absolute(&local_abspath, "Foo.c", pool));
+
+ conflict = svn_wc_conflict_description_create_tree2(
+ local_abspath, svn_node_file, svn_wc_operation_update,
+ NULL, NULL, pool);
+ conflict->action = svn_wc_conflict_action_delete;
+ conflict->reason = svn_wc_conflict_reason_edited;
+
+ SVN_ERR(svn_wc__serialize_conflict(&skel, conflict, pool, pool));
+ tree_conflict_data = svn_skel__unparse(skel, pool)->data;
+
+ expected = "(conflict Foo.c file update deleted edited "
+ "(version 0 2 -1 0 0 ) (version 0 2 -1 0 0 ))";
+
+ if (strcmp(expected, tree_conflict_data) != 0)
+ return fail(pool, "Unexpected text from tree conflict\n"
+ " Expected: %s\n"
+ " Actual: %s\n", expected, tree_conflict_data);
+
+ return SVN_NO_ERROR;
+}
+
+/* Test WC-DB-level conflict APIs. Especially tree conflicts. */
+static svn_error_t *
+test_read_write_tree_conflicts(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ svn_test__sandbox_t sbox;
+
+ const char *parent_abspath;
+ const char *child1_abspath, *child2_abspath;
+ svn_wc_conflict_description2_t *conflict1, *conflict2;
+
+ SVN_ERR(svn_test__sandbox_create(&sbox, "read_write_tree_conflicts", opts, pool));
+ parent_abspath = svn_dirent_join(sbox.wc_abspath, "A", pool);
+ SVN_ERR(svn_wc__db_op_add_directory(sbox.wc_ctx->db, parent_abspath,
+ NULL /*props*/, NULL, pool));
+ child1_abspath = svn_dirent_join(parent_abspath, "foo", pool);
+ child2_abspath = svn_dirent_join(parent_abspath, "bar", pool);
+
+ conflict1 = tree_conflict_create(child1_abspath, svn_node_file,
+ svn_wc_operation_merge,
+ svn_wc_conflict_action_delete,
+ svn_wc_conflict_reason_edited,
+ "dummy://localhost", "path/to/foo",
+ 51, svn_node_file,
+ "dummy://localhost", "path/to/foo",
+ 52, svn_node_none,
+ pool);
+
+ conflict2 = tree_conflict_create(child2_abspath, svn_node_dir,
+ svn_wc_operation_merge,
+ svn_wc_conflict_action_replace,
+ svn_wc_conflict_reason_edited,
+ "dummy://localhost", "path/to/bar",
+ 51, svn_node_dir,
+ "dummy://localhost", "path/to/bar",
+ 52, svn_node_file,
+ pool);
+
+ /* Write */
+ SVN_ERR(svn_wc__add_tree_conflict(sbox.wc_ctx, /*child1_abspath,*/
+ conflict1, pool));
+ SVN_ERR(svn_wc__add_tree_conflict(sbox.wc_ctx, /*child2_abspath,*/
+ conflict2, pool));
+
+ /* Query (conflict1 through WC-DB API, conflict2 through WC API) */
+ {
+ svn_boolean_t text_c, prop_c, tree_c;
+
+ SVN_ERR(svn_wc__internal_conflicted_p(&text_c, &prop_c, &tree_c,
+ sbox.wc_ctx->db, child1_abspath, pool));
+ SVN_TEST_ASSERT(tree_c);
+ SVN_TEST_ASSERT(! text_c && ! prop_c);
+
+ SVN_ERR(svn_wc_conflicted_p3(&text_c, &prop_c, &tree_c,
+ sbox.wc_ctx, child2_abspath, pool));
+ SVN_TEST_ASSERT(tree_c);
+ SVN_TEST_ASSERT(! text_c && ! prop_c);
+ }
+
+ /* Read conflicts back */
+ {
+ const svn_wc_conflict_description2_t *read_conflict;
+
+ SVN_ERR(svn_wc__get_tree_conflict(&read_conflict, sbox.wc_ctx,
+ child1_abspath, pool, pool));
+ SVN_ERR(compare_conflict(read_conflict, conflict1));
+
+ SVN_ERR(svn_wc__get_tree_conflict(&read_conflict, sbox.wc_ctx,
+ child2_abspath, pool, pool));
+ SVN_ERR(compare_conflict(read_conflict, conflict2));
+ }
+
+ /* Read many */
+ {
+ const apr_array_header_t *victims;
+
+ SVN_ERR(svn_wc__db_read_conflict_victims(&victims,
+ sbox.wc_ctx->db, parent_abspath,
+ pool, pool));
+ SVN_TEST_ASSERT(victims->nelts == 2);
+ }
+
+ /* ### TODO: to test...
+ * svn_wc__db_read_conflicts
+ * svn_wc__node_get_conflict_info
+ * svn_wc__del_tree_conflict
+ */
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_serialize_prop_conflict(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ svn_test__sandbox_t sbox;
+ svn_skel_t *conflict_skel;
+ svn_boolean_t complete;
+
+ SVN_ERR(svn_test__sandbox_create(&sbox, "test_serialize_prop_conflict", opts, pool));
+
+ conflict_skel = svn_wc__conflict_skel_create(pool);
+
+ SVN_TEST_ASSERT(conflict_skel != NULL);
+ SVN_TEST_ASSERT(svn_skel__list_length(conflict_skel) == 2);
+
+ SVN_ERR(svn_wc__conflict_skel_is_complete(&complete, conflict_skel));
+ SVN_TEST_ASSERT(!complete); /* Nothing set */
+
+ {
+ apr_hash_t *mine = apr_hash_make(pool);
+ apr_hash_t *their_old = apr_hash_make(pool);
+ apr_hash_t *theirs = apr_hash_make(pool);
+ apr_hash_t *conflicts = apr_hash_make(pool);
+ const char *marker_abspath;
+
+ apr_hash_set(mine, "prop", APR_HASH_KEY_STRING,
+ svn_string_create("Mine", pool));
+
+ apr_hash_set(their_old, "prop", APR_HASH_KEY_STRING,
+ svn_string_create("Their-Old", pool));
+
+ apr_hash_set(theirs, "prop", APR_HASH_KEY_STRING,
+ svn_string_create("Theirs", pool));
+
+ apr_hash_set(conflicts, "prop", APR_HASH_KEY_STRING, "");
+
+ SVN_ERR(svn_io_open_unique_file3(NULL, &marker_abspath, sbox.wc_abspath,
+ svn_io_file_del_on_pool_cleanup, pool,
+ pool));
+
+ SVN_ERR(svn_wc__conflict_skel_add_prop_conflict(conflict_skel,
+ sbox.wc_ctx->db,
+ sbox.wc_abspath,
+ marker_abspath,
+ mine, their_old,
+ theirs, conflicts,
+ pool, pool));
+ }
+
+ SVN_ERR(svn_wc__conflict_skel_is_complete(&complete, conflict_skel));
+ SVN_TEST_ASSERT(!complete); /* Misses operation */
+
+ SVN_ERR(svn_wc__conflict_skel_set_op_update(
+ conflict_skel,
+ svn_wc_conflict_version_create2("http://my-repos/svn",
+ "uuid", "trunk", 12,
+ svn_node_dir, pool),
+ NULL /* wc_only */,
+ pool, pool));
+
+ SVN_ERR(svn_wc__conflict_skel_is_complete(&complete, conflict_skel));
+ SVN_TEST_ASSERT(complete); /* Everything available */
+
+ {
+ apr_hash_t *mine;
+ apr_hash_t *their_old;
+ apr_hash_t *theirs;
+ apr_hash_t *conflicts;
+ const char *marker_abspath;
+ svn_string_t *v;
+
+ SVN_ERR(svn_wc__conflict_read_prop_conflict(&marker_abspath,
+ &mine,
+ &their_old,
+ &theirs,
+ &conflicts,
+ sbox.wc_ctx->db,
+ sbox.wc_abspath,
+ conflict_skel,
+ pool, pool));
+
+ SVN_TEST_ASSERT(svn_dirent_is_ancestor(sbox.wc_abspath, marker_abspath));
+
+ v = apr_hash_get(mine, "prop", APR_HASH_KEY_STRING);
+ SVN_TEST_STRING_ASSERT(v->data, "Mine");
+
+ v = apr_hash_get(their_old, "prop", APR_HASH_KEY_STRING);
+ SVN_TEST_STRING_ASSERT(v->data, "Their-Old");
+
+ v = apr_hash_get(theirs, "prop", APR_HASH_KEY_STRING);
+ SVN_TEST_STRING_ASSERT(v->data, "Theirs");
+
+ SVN_TEST_ASSERT(apr_hash_count(conflicts) == 1);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_serialize_text_conflict(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ svn_test__sandbox_t sbox;
+ svn_skel_t *conflict_skel;
+ svn_boolean_t complete;
+
+ SVN_ERR(svn_test__sandbox_create(&sbox, "test_serialize_text_conflict", opts, pool));
+
+ conflict_skel = svn_wc__conflict_skel_create(pool);
+
+ SVN_ERR(svn_wc__conflict_skel_add_text_conflict(
+ conflict_skel,
+ sbox.wc_ctx->db, sbox.wc_abspath,
+ svn_dirent_join(sbox.wc_abspath, "mine", pool),
+ svn_dirent_join(sbox.wc_abspath, "old-theirs", pool),
+ svn_dirent_join(sbox.wc_abspath, "theirs", pool),
+ pool, pool));
+
+ SVN_ERR(svn_wc__conflict_skel_set_op_merge(
+ conflict_skel,
+ svn_wc_conflict_version_create2("http://my-repos/svn",
+ "uuid", "trunk", 12,
+ svn_node_dir, pool),
+ svn_wc_conflict_version_create2("http://my-repos/svn",
+ "uuid", "branch/my", 8,
+ svn_node_dir, pool),
+ pool, pool));
+
+ SVN_ERR(svn_wc__conflict_skel_is_complete(&complete, conflict_skel));
+ SVN_TEST_ASSERT(complete); /* Everything available */
+
+ {
+ const char *mine_abspath;
+ const char *old_their_abspath;
+ const char *their_abspath;
+
+ SVN_ERR(svn_wc__conflict_read_text_conflict(&mine_abspath,
+ &old_their_abspath,
+ &their_abspath,
+ sbox.wc_ctx->db,
+ sbox.wc_abspath,
+ conflict_skel,
+ pool, pool));
+
+ SVN_TEST_STRING_ASSERT(
+ svn_dirent_skip_ancestor(sbox.wc_abspath, mine_abspath),
+ "mine");
+
+ SVN_TEST_STRING_ASSERT(
+ svn_dirent_skip_ancestor(sbox.wc_abspath, old_their_abspath),
+ "old-theirs");
+
+ SVN_TEST_STRING_ASSERT(
+ svn_dirent_skip_ancestor(sbox.wc_abspath, their_abspath),
+ "theirs");
+ }
+
+ {
+ svn_wc_operation_t operation;
+ svn_boolean_t text_conflicted;
+ const apr_array_header_t *locs;
+ SVN_ERR(svn_wc__conflict_read_info(&operation, &locs,
+ &text_conflicted, NULL, NULL,
+ sbox.wc_ctx->db, sbox.wc_abspath,
+ conflict_skel, pool, pool));
+
+ SVN_TEST_ASSERT(text_conflicted);
+ SVN_TEST_ASSERT(operation == svn_wc_operation_merge);
+
+ SVN_TEST_ASSERT(locs != NULL && locs->nelts == 2);
+ SVN_TEST_ASSERT(APR_ARRAY_IDX(locs, 0, svn_wc_conflict_version_t*) != NULL);
+ SVN_TEST_ASSERT(APR_ARRAY_IDX(locs, 1, svn_wc_conflict_version_t*) != NULL);
+ }
+
+ {
+ const apr_array_header_t *markers;
+ const char *old_their_abspath;
+ const char *their_abspath;
+ const char *mine_abspath;
+
+ SVN_ERR(svn_wc__conflict_read_markers(&markers,
+ sbox.wc_ctx->db, sbox.wc_abspath,
+ conflict_skel, pool, pool));
+
+ SVN_TEST_ASSERT(markers != NULL);
+ SVN_TEST_ASSERT(markers->nelts == 3);
+
+ old_their_abspath = APR_ARRAY_IDX(markers, 0, const char *);
+ mine_abspath = APR_ARRAY_IDX(markers, 1, const char *);
+ their_abspath = APR_ARRAY_IDX(markers, 2, const char *);
+
+ SVN_TEST_STRING_ASSERT(
+ svn_dirent_skip_ancestor(sbox.wc_abspath, mine_abspath),
+ "mine");
+
+ SVN_TEST_STRING_ASSERT(
+ svn_dirent_skip_ancestor(sbox.wc_abspath, old_their_abspath),
+ "old-theirs");
+
+ SVN_TEST_STRING_ASSERT(
+ svn_dirent_skip_ancestor(sbox.wc_abspath, their_abspath),
+ "theirs");
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_serialize_tree_conflict(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ svn_test__sandbox_t sbox;
+ svn_skel_t *conflict_skel;
+ svn_boolean_t complete;
+
+ SVN_ERR(svn_test__sandbox_create(&sbox, "test_serialize_tree_conflict", opts, pool));
+
+ conflict_skel = svn_wc__conflict_skel_create(pool);
+
+ SVN_ERR(svn_wc__conflict_skel_add_tree_conflict(
+ conflict_skel,
+ sbox.wc_ctx->db, sbox_wc_path(&sbox, "A/B"),
+ svn_wc_conflict_reason_moved_away,
+ svn_wc_conflict_action_delete,
+ sbox_wc_path(&sbox, "A/B"),
+ pool, pool));
+
+ SVN_ERR(svn_wc__conflict_skel_set_op_switch(
+ conflict_skel,
+ svn_wc_conflict_version_create2("http://my-repos/svn",
+ "uuid", "trunk", 12,
+ svn_node_dir, pool),
+ NULL /* wc_only */,
+ pool, pool));
+
+ SVN_ERR(svn_wc__conflict_skel_is_complete(&complete, conflict_skel));
+ SVN_TEST_ASSERT(complete); /* Everything available */
+
+ {
+ svn_wc_conflict_reason_t local_change;
+ svn_wc_conflict_action_t incoming_change;
+ const char *moved_away_op_root_abspath;
+
+ SVN_ERR(svn_wc__conflict_read_tree_conflict(&local_change,
+ &incoming_change,
+ &moved_away_op_root_abspath,
+ sbox.wc_ctx->db,
+ sbox.wc_abspath,
+ conflict_skel,
+ pool, pool));
+
+ SVN_TEST_ASSERT(local_change == svn_wc_conflict_reason_moved_away);
+ SVN_TEST_ASSERT(incoming_change == svn_wc_conflict_action_delete);
+ SVN_TEST_ASSERT(!strcmp(moved_away_op_root_abspath,
+ sbox_wc_path(&sbox, "A/B")));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* A conflict resolver callback baton for test_prop_conflicts(). */
+typedef struct test_prop_conflict_baton_t
+{
+ /* Sets of properties. */
+ apr_hash_t *mine;
+ apr_hash_t *their_old;
+ apr_hash_t *theirs;
+ /* The set of prop names in conflict. */
+ apr_hash_t *conflicts;
+
+ /* We use all the fields of DESC except the base/theirs/mine/merged paths. */
+ svn_wc_conflict_description2_t *desc;
+
+ int conflicts_seen;
+} test_prop_conflict_baton_t;
+
+/* Set *CONFLICT_SKEL_P to a new property conflict skel reflecting the
+ * conflict details given in B. */
+static svn_error_t *
+create_prop_conflict_skel(svn_skel_t **conflict_skel_p,
+ svn_wc_context_t *wc_ctx,
+ const test_prop_conflict_baton_t *b,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_skel_t *conflict_skel = svn_wc__conflict_skel_create(result_pool);
+ const char *marker_abspath;
+ svn_boolean_t complete;
+
+ SVN_ERR(svn_io_write_unique(&marker_abspath,
+ b->desc->local_abspath,
+ "conflict-artifact-file-content\n", 6,
+ svn_io_file_del_none, scratch_pool));
+
+ SVN_ERR(svn_wc__conflict_skel_add_prop_conflict(conflict_skel,
+ wc_ctx->db,
+ b->desc->local_abspath,
+ marker_abspath,
+ b->mine, b->their_old,
+ b->theirs, b->conflicts,
+ result_pool, scratch_pool));
+
+ switch (b->desc->operation)
+ {
+ case svn_wc_operation_update:
+ SVN_ERR(svn_wc__conflict_skel_set_op_update(
+ conflict_skel,
+ b->desc->src_left_version, b->desc->src_right_version,
+ result_pool, scratch_pool));
+ break;
+ case svn_wc_operation_switch:
+ SVN_ERR(svn_wc__conflict_skel_set_op_switch(
+ conflict_skel,
+ b->desc->src_left_version, b->desc->src_right_version,
+ result_pool, scratch_pool));
+ break;
+ case svn_wc_operation_merge:
+ SVN_ERR(svn_wc__conflict_skel_set_op_merge(
+ conflict_skel,
+ b->desc->src_left_version, b->desc->src_right_version,
+ result_pool, scratch_pool));
+ break;
+ default:
+ SVN_ERR_MALFUNCTION();
+ }
+
+ SVN_ERR(svn_wc__conflict_skel_is_complete(&complete, conflict_skel));
+ SVN_TEST_ASSERT(complete);
+ *conflict_skel_p = conflict_skel;
+ return SVN_NO_ERROR;
+}
+
+/* A conflict resolver callback for test_prop_conflicts(), that checks
+ * that the conflict described to it matches the one described in BATON,
+ * and also counts the number of times it is called. */
+static svn_error_t *
+prop_conflict_cb(svn_wc_conflict_result_t **result_p,
+ const svn_wc_conflict_description2_t *desc,
+ void *baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ test_prop_conflict_baton_t *b = baton;
+
+ SVN_ERR(compare_prop_conflict(
+ desc, b->desc,
+ svn_prop_get_value(b->their_old, desc->property_name),
+ svn_prop_get_value(b->mine, desc->property_name),
+ svn_prop_get_value(b->theirs, desc->property_name),
+ scratch_pool));
+ b->conflicts_seen++;
+
+ *result_p = svn_wc_create_conflict_result(svn_wc_conflict_choose_postpone,
+ NULL /*merged_file*/, result_pool);
+ return SVN_NO_ERROR;
+}
+
+/* Test for correct retrieval of property conflict descriptions from
+ * the WC DB.
+ *
+ * Presently it tests just one prop conflict, and only during the
+ * 'resolve' operation. We should also test during the 'update'/
+ * 'switch'/'merge' operations.
+ */
+static svn_error_t *
+test_prop_conflicts(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ svn_test__sandbox_t sbox;
+ svn_skel_t *conflict_skel;
+ svn_error_t *err;
+ const char *lock_abspath;
+ test_prop_conflict_baton_t *b = apr_pcalloc(pool, sizeof(*b));
+ svn_wc_conflict_description2_t *desc = apr_pcalloc(pool, sizeof(*desc));
+
+ SVN_ERR(svn_test__sandbox_create(&sbox, "test_prop_conflicts", opts, pool));
+
+ /* Describe a property conflict */
+ b->mine = apr_hash_make(pool);
+ b->their_old = apr_hash_make(pool);
+ b->theirs = apr_hash_make(pool);
+ b->conflicts = apr_hash_make(pool);
+ svn_hash_sets(b->mine, "prop", svn_string_create("Mine", pool));
+ svn_hash_sets(b->their_old, "prop", svn_string_create("Their-Old", pool));
+ svn_hash_sets(b->theirs, "prop", svn_string_create("Theirs", pool));
+ svn_hash_sets(b->conflicts, "prop", "");
+
+ b->desc = desc;
+ desc->local_abspath = sbox.wc_abspath;
+ desc->kind = svn_wc_conflict_kind_property;
+ desc->node_kind = svn_node_dir;
+ desc->operation = svn_wc_operation_update;
+ desc->action = svn_wc_conflict_action_edit;
+ desc->reason = svn_wc_conflict_reason_edited;
+ desc->mime_type = NULL;
+ desc->is_binary = FALSE;
+ desc->property_name = "prop";
+ desc->src_left_version
+ = svn_wc_conflict_version_create2(sbox.repos_url, "uuid",
+ "trunk", 12, svn_node_dir, pool);
+ desc->src_right_version = NULL; /* WC only */
+
+ b->conflicts_seen = 0;
+
+ /* Record a conflict */
+ {
+ apr_pool_t *subpool = svn_pool_create(pool);
+ SVN_ERR(create_prop_conflict_skel(&conflict_skel, sbox.wc_ctx, b,
+ pool, subpool));
+ svn_pool_clear(subpool);
+ SVN_ERR(svn_wc__db_op_mark_conflict(sbox.wc_ctx->db,
+ sbox.wc_abspath,
+ conflict_skel, NULL, subpool));
+ svn_pool_destroy(subpool);
+ }
+
+ /* Test the API for resolving the conflict: check that correct details
+ * of the conflict are returned. */
+ SVN_ERR(svn_wc__acquire_write_lock_for_resolve(&lock_abspath, sbox.wc_ctx,
+ sbox.wc_abspath, pool, pool));
+ err = svn_wc__resolve_conflicts(sbox.wc_ctx, sbox.wc_abspath,
+ svn_depth_empty,
+ FALSE /* resolve_text */,
+ "" /* resolve_prop (ALL props) */,
+ FALSE /* resolve_tree */,
+ svn_wc_conflict_choose_unspecified,
+ prop_conflict_cb, b,
+ NULL, NULL, /* cancellation */
+ NULL, NULL, /* notification */
+ pool);
+
+ SVN_ERR(svn_error_compose_create(err,
+ svn_wc__release_write_lock(sbox.wc_ctx,
+ lock_abspath,
+ pool)));
+
+ ASSERT_INT_EQ(b->conflicts_seen, 1);
+ return SVN_NO_ERROR;
+}
+
+/* The test table. */
+
+struct svn_test_descriptor_t test_funcs[] =
+ {
+ SVN_TEST_NULL,
+ SVN_TEST_PASS2(test_deserialize_tree_conflict,
+ "deserialize tree conflict"),
+ SVN_TEST_PASS2(test_serialize_tree_conflict_data,
+ "serialize tree conflict data"),
+ SVN_TEST_OPTS_PASS(test_read_write_tree_conflicts,
+ "read and write tree conflict data"),
+ SVN_TEST_OPTS_PASS(test_serialize_prop_conflict,
+ "read and write a property conflict"),
+ SVN_TEST_OPTS_PASS(test_serialize_text_conflict,
+ "read and write a text conflict"),
+ SVN_TEST_OPTS_PASS(test_serialize_tree_conflict,
+ "read and write a tree conflict"),
+ SVN_TEST_OPTS_PASS(test_prop_conflicts,
+ "test prop conflicts"),
+ SVN_TEST_NULL
+ };
+
diff --git a/subversion/tests/libsvn_wc/create_wc_for_upgrade.sh b/subversion/tests/libsvn_wc/create_wc_for_upgrade.sh
index 10ded2e..622595c 100755
--- a/subversion/tests/libsvn_wc/create_wc_for_upgrade.sh
+++ b/subversion/tests/libsvn_wc/create_wc_for_upgrade.sh
@@ -83,10 +83,10 @@ echo epsilon > epsilon
### row is created).
# a file with just .working
-### what comes after epsilon??
-echo lambda > lambda
-"${SVN}" add lambda
-"${SVN}" propset l-prop l-value lambda
+# zeta = epsilon+1
+echo zeta > zeta
+"${SVN}" add zeta
+"${SVN}" propset z-prop z-value zeta
# a file with .base and .working
"${SVN}" propset b-more b-value2 beta
diff --git a/subversion/tests/libsvn_wc/db-test.c b/subversion/tests/libsvn_wc/db-test.c
index 462fcb7..45e9c4d 100644
--- a/subversion/tests/libsvn_wc/db-test.c
+++ b/subversion/tests/libsvn_wc/db-test.c
@@ -97,91 +97,91 @@ static const char * const TESTING_DATA = (
"insert into nodes values ("
" 1, '', 0, null, 1, '', 1, 'normal',"
" null, null, 'dir', '()', 'infinity', null, null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " null, null, null, null);"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'A', 0, '', 1, 'A', 1, 'normal',"
" null, null, 'file', '()', null, '$sha1$" SHA1_1 "', null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " 10, null, null, null);"
+ " 10, null, null, null, null);"
"insert into nodes values ("
" 1, 'B', 0, '', 1, 'B', null, 'excluded',"
" null, null, 'symlink', null, null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, null, null, null);"
"insert into nodes values ("
- " 1, 'C', 0, '', 1, 'C', null, 'absent',"
+ " 1, 'C', 0, '', 1, 'C', null, 'server-excluded',"
" null, null, 'unknown', null, null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'D', 0, '', 1, 'D', null, 'not-present',"
" null, null, 'unknown', null, null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'E', 0, '', 1, 'E', null, 'incomplete',"
" null, null, 'unknown', null, null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'F', 0, '', 1, 'F', 1, 'normal',"
" null, null, 'file', '()', null, '$sha1$" SHA1_1 "', null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " 15, null, null, null);"
+ " 15, null, null, null, null);"
"insert into nodes values ("
" 1, 'G', 0, '', 2, 'G-alt', 1, 'normal',"
" null, null, 'file', '()', null, '$sha1$" SHA1_1 "', null, 2, " TIME_2s ", '" AUTHOR_2 "',"
- " 15, null, null, null);"
+ " 15, null, null, null, null);"
"insert into nodes values ("
" 1, 'H', 0, '', 1, 'H', 1, 'normal',"
" null, null, 'symlink', '()', null, null, 'H-target', 1, " TIME_1s ", '" AUTHOR_1 "',"
- " null, null, null, null);"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'I', 0, '', 1, 'I', 1, 'normal',"
" null, null, 'dir', '()', null, null, null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " null, null, null, null);"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J', 0, '', 1, 'J', 1, 'normal',"
" null, null, 'dir', '()', null, null, null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " null, null, null, null);"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-e', 0, 'J', 1, 'J/J-e', 1, 'normal',"
- " null, null, 'dir', '()', null, null, null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " null, null, null, null);"
+ " null, 'other/place', 'dir', '()', null, null, null, 1, " TIME_1s ", '" AUTHOR_1 "',"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-e/J-e-a', 0, 'J/J-e', 1, 'J/J-e/J-e-a', 1, 'normal',"
" null, null, 'file', '()', null, '$sha1$" SHA1_1 "', null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " 15, null, null, null);"
+ " 15, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-e/J-e-b', 0, 'J/J-e', 1, 'J/J-e/J-e-b', 1, 'normal',"
" null, null, 'dir', '()', null, null, null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " null, null, null, null);"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-e/J-e-b/Jeba', 0, 'J/J-e/J-e-b', 1, 'J/J-e/J-e-b/Jeba', 1, 'normal',"
" null, null, 'file', '()', null, '$sha1$" SHA1_1 "', null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " 15, null, null, null);"
+ " 15, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-f', 0, 'J', 1, 'J/J-f', 1, 'normal',"
" null, null, 'dir', '()', null, null, null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " null, null, null, null);"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-f/J-f-a', 0, 'J/J-f', 1, 'J/J-f/J-f-a', 1, 'normal',"
" null, null, 'dir', '()', null, null, null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " null, null, null, null);"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'K', 0, '', 1, 'K', 1, 'normal',"
" null, null, 'dir', '()', null, null, null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " null, null, null, null);"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'K/K-a', 0, 'K', 1, 'K/K-a', 1, 'normal',"
" null, null, 'file', '()', null, '$sha1$" SHA1_1 "', null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " 15, null, null, null);"
+ " 15, null, null, null, null);"
"insert into nodes values ("
" 1, 'K/K-b', 0, 'K', 1, 'K/K-b', 1, 'normal',"
- " null, null, 'file', '()', null, '$sha1$" SHA1_1 "', null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " 15, null, null, null);"
+ " null, 'moved/away', 'file', '()', null, '$sha1$" SHA1_1 "', null, 1, " TIME_1s ", '" AUTHOR_1 "',"
+ " 15, null, null, null, null);"
""
/* Load data into NODES table;
### op_depths have not been calculated by me yet;
the value 1 is just 'good enough' to make the nodes WORKING nodes. */
"insert into nodes values ("
" 1, 'I', 1, '', 2, 'some/dir', 2, 'normal',"
- " 0, null, 'dir', '()', 'immediates', null, null, 2, " TIME_2s ", '" AUTHOR_2 "',"
- " null, null, null, null);"
+ " null, null, 'dir', '()', 'immediates', null, null, 2, " TIME_2s ", '" AUTHOR_2 "',"
+ " null, null, null, null, null);"
/* I'm not sure what the working J is supposed to represent. It
replaces the base J, but is it a copy or not? It has no
@@ -189,112 +189,136 @@ static const char * const TESTING_DATA = (
implies they are children of a copied J. */
"insert into nodes values ("
" 1, 'J', 1, '', null, null, null, 'normal',"
- " 0, null, 'dir', '()', 'immediates', null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', 'immediates', null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-a', 1, 'J', null, null, null, 'normal',"
- " 0, null, 'file', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'file', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-b', 2, 'J', 2, 'some/dir', 2, 'normal',"
- " 0, null, 'dir', '()', 'infinity', null, null, 2, " TIME_2s ", '" AUTHOR_2 "',"
- " null, null, null, null);"
+ " null, null, 'dir', '()', 'infinity', null, null, 2, " TIME_2s ", '" AUTHOR_2 "',"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-b/J-b-a', 3, 'J/J-b', 2, 'another/dir', 2, 'normal',"
- " 0, null, 'dir', '()', 'infinity', null, null, 2, " TIME_2s ", '" AUTHOR_2 "',"
- " null, null, null, null);"
+ " null, null, 'dir', '()', 'infinity', null, null, 2, " TIME_2s ", '" AUTHOR_2 "',"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-b/J-b-b', 2, 'J/J-b', null, null, 2, 'normal',"
- " 0, null, 'file', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'file', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-c', 1, 'J', null, null, null, 'normal',"
- " 0, null, 'dir', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-c/J-c-a', 1, 'J/J-c', null, null, null, 'normal',"
- " 0, null, 'dir', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-c', 2, 'J', null, null, null, 'base-deleted',"
- " 0, null, 'dir', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-c/J-c-a', 2, 'J/J-c', null, null, null, 'base-deleted',"
- " 0, null, 'dir', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-d', 2, 'J', 2, 'moved/file', 2, 'normal',"
" 1, null, 'file', '()', null, '$sha1$" SHA1_1 "', null, 2, " TIME_2s ", '" AUTHOR_2 "',"
- " 10, null, null, null);"
+ " 10, null, null, null, null);"
+ "insert into nodes values ("
+ " 1, 'moved/file', 0, 'moved', 2, 'moved/file', 2, 'normal',"
+ " null, null, 'file', '()', null, '$sha1$" SHA1_1 "', null, 2, " TIME_2s ", '" AUTHOR_2 "',"
+ " 10, null, null, null, null);"
+ "insert into nodes values ("
+ " 1, 'moved/file', 2, 'moved', 2, 'moved/file', 2, 'base-deleted',"
+ " null, 'J/J-d', 'file', '()', null, null, null, null, null, null,"
+ " 10, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-e', 1, 'J', null, null, null, 'normal',"
- " 0, 'other/place', 'dir', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-e/J-e-a', 1, 'J/J-e', null, null, null, 'normal',"
- " 0, null, 'file', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'file', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-e/J-e-b', 1, 'J/J-e', null, null, null, 'normal',"
- " 0, null, 'dir', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-e', 2, 'J', null, null, null, 'base-deleted',"
- " 0, 'other/place', 'dir', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-e/J-e-a', 2, 'J/J-e', null, null, null, 'base-deleted',"
- " 0, null, 'file', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'file', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-e/J-e-b', 2, 'J/J-e', null, null, null, 'base-deleted',"
- " 0, null, 'dir', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-e/J-e-b/Jeba', 1, 'J/J-e/J-e-b', null, null, null, 'base-deleted',"
- " 0, null, 'file', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'file', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-f', 1, 'J', null, null, null, 'normal',"
- " 0, null, 'dir', '()', 'immediates', null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', 'immediates', null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-f/J-f-a', 1, 'J/J-f', null, null, null, 'base-deleted',"
- " 0, null, 'dir', '()', 'immediates', null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', 'immediates', null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'K', 1, '', null, null, null, 'base-deleted',"
- " 0, null, 'dir', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'K/K-a', 1, 'K', null, null, null, 'base-deleted',"
- " 0, null, 'file', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'file', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'K/K-b', 1, 'K', null, null, null, 'base-deleted',"
- " 0, 'moved/away', 'file', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'file', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'L', 1, '', null, null, null, 'normal',"
- " 0, null, 'dir', '()', 'immediates', null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', 'immediates', null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'L/L-a', 1, 'L', null, null, null, 'normal',"
- " 0, null, 'dir', '()', 'immediates', null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', 'immediates', null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'L/L-a/L-a-a', 1, 'L/L-a', null, null, null, 'normal',"
- " 0, null, 'dir', '()', 'immediates', null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', 'immediates', null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'L/L-a', 2, 'L', null, null, null, 'base-deleted',"
- " 0, null, 'dir', '()', 'immediates', null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', 'immediates', null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'L/L-a/L-a-a', 2, 'L/L-a', null, null, null, 'base-deleted',"
- " 0, null, 'dir', '()', 'immediates', null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', 'immediates', null, null, null, null, null,"
+ " null, null, null, null, null);"
+ "insert into nodes values ("
+ " 1, 'other/place', 2, 'other', null, null, null, 'normal',"
+ " 1, null, 'dir', '()', 'immediates', null, null, null, null, null,"
+ " null, null, null, null, null);"
+ "insert into nodes values ("
+ " 1, 'other/place/J-e-a', 2, 'other/place', null, null, null, 'normal',"
+ " null, null, 'dir', '()', 'immediates', null, null, null, null, null,"
+ " null, null, null, null, null);"
+ "insert into nodes values ("
+ " 1, 'other/place/J-e-b', 2, 'other/place', null, null, null, 'normal',"
+ " null, null, 'dir', '()', null, null, null, 1, " TIME_1s ", '" AUTHOR_1 "',"
+ " null, null, null, null, null);"
+ "insert into nodes values ("
+ " 1, 'other/place/J-e-b/Jeba', 0, 'other/place/J-e-b', null, null, null, 'normal',"
+ " null, null, 'file', '()', null, '$sha1$" SHA1_1 "', null, 1, " TIME_1s ", '" AUTHOR_1 "',"
+ " 15, null, null, null, null);"
"insert into actual_node values ("
" 1, 'I', '', null, null, null, null, null, 'changelist', null, "
" null, null, null, null, null);"
@@ -316,9 +340,11 @@ create_open(svn_wc__db_t **db,
SVN_ERR(svn_dirent_get_absolute(local_abspath,
svn_dirent_join("fake-wc", subdir, pool),
pool));
- SVN_ERR(svn_wc__db_open(db, NULL, TRUE, TRUE, pool, pool));
+ SVN_ERR(svn_wc__db_open(db, NULL, FALSE, TRUE, pool, pool));
SVN_ERR(svn_test__create_fake_wc(*local_abspath, TESTING_DATA, pool, pool));
+ svn_test_add_dir_cleanup(*local_abspath);
+
return SVN_NO_ERROR;
}
@@ -354,7 +380,7 @@ static svn_error_t *
test_getting_info(apr_pool_t *pool)
{
const char *local_abspath;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
svn_wc__db_status_t status;
svn_revnum_t revision;
const char *repos_relpath;
@@ -367,6 +393,7 @@ test_getting_info(apr_pool_t *pool)
const svn_checksum_t *checksum;
const char *target;
svn_boolean_t had_props;
+ apr_hash_t *props;
svn_boolean_t update_root;
svn_wc__db_lock_t *lock;
svn_wc__db_t *db;
@@ -379,11 +406,11 @@ test_getting_info(apr_pool_t *pool)
&status, &kind, &revision,
&repos_relpath, &repos_root_url, &repos_uuid,
&changed_rev, &changed_date, &changed_author,&depth, &checksum,
- &target, &lock, &had_props,
+ &target, &lock, &had_props, &props,
&update_root,
db, local_abspath,
pool, pool));
- SVN_TEST_ASSERT(kind == svn_wc__db_kind_dir);
+ SVN_TEST_ASSERT(kind == svn_node_dir);
SVN_TEST_ASSERT(status == svn_wc__db_status_normal);
SVN_TEST_ASSERT(revision == 1);
SVN_TEST_STRING_ASSERT(repos_relpath, "");
@@ -396,6 +423,9 @@ test_getting_info(apr_pool_t *pool)
SVN_TEST_ASSERT(checksum == NULL);
SVN_TEST_ASSERT(target == NULL);
SVN_TEST_ASSERT(lock == NULL);
+ SVN_TEST_ASSERT(!had_props);
+ SVN_TEST_ASSERT(apr_hash_count(props) == 0);
+ /* SVN_TEST_ASSERT(update_root == ???); */
/* Test: file-specific values. */
SVN_ERR(svn_wc__db_base_get_info(
@@ -403,10 +433,10 @@ test_getting_info(apr_pool_t *pool)
&repos_relpath, &repos_root_url, &repos_uuid,
NULL, NULL, NULL, NULL,
&checksum, NULL, NULL,
- NULL, NULL,
+ NULL, NULL, NULL,
db, svn_dirent_join(local_abspath, "A", pool),
pool, pool));
- SVN_TEST_ASSERT(kind == svn_wc__db_kind_file);
+ SVN_TEST_ASSERT(kind == svn_node_file);
SVN_TEST_STRING_ASSERT(SHA1_1, svn_checksum_to_cstring(checksum, pool));
SVN_TEST_STRING_ASSERT(repos_relpath, "A");
SVN_TEST_STRING_ASSERT(repos_root_url, ROOT_ONE);
@@ -418,10 +448,10 @@ test_getting_info(apr_pool_t *pool)
&repos_relpath, &repos_root_url, &repos_uuid,
&changed_rev, &changed_date, &changed_author,
&depth, &checksum, &target, &lock,
- NULL, NULL,
+ NULL, NULL, NULL,
db, svn_dirent_join(local_abspath, "B", pool),
pool, pool));
- SVN_TEST_ASSERT(kind == svn_wc__db_kind_symlink);
+ SVN_TEST_ASSERT(kind == svn_node_symlink);
SVN_TEST_ASSERT(status == svn_wc__db_status_excluded);
SVN_TEST_ASSERT(!SVN_IS_VALID_REVNUM(revision));
SVN_TEST_STRING_ASSERT(repos_relpath, "B");
@@ -435,16 +465,16 @@ test_getting_info(apr_pool_t *pool)
SVN_TEST_ASSERT(target == NULL);
SVN_TEST_ASSERT(lock == NULL);
- /* Test: unknown kind, absent presence. */
+ /* Test: unknown kind, server-excluded presence. */
SVN_ERR(svn_wc__db_base_get_info(
&status, &kind, NULL,
NULL, NULL, NULL,
NULL, NULL, NULL,
NULL, NULL, NULL,
- NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
db, svn_dirent_join(local_abspath, "C", pool),
pool, pool));
- SVN_TEST_ASSERT(kind == svn_wc__db_kind_unknown);
+ SVN_TEST_ASSERT(kind == svn_node_unknown);
SVN_TEST_ASSERT(status == svn_wc__db_status_server_excluded);
/* Test: not-present presence. */
@@ -453,7 +483,7 @@ test_getting_info(apr_pool_t *pool)
NULL, NULL, NULL,
NULL, NULL, NULL,
NULL, NULL, NULL,
- NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
db, svn_dirent_join(local_abspath, "D", pool),
pool, pool));
SVN_TEST_ASSERT(status == svn_wc__db_status_not_present);
@@ -464,7 +494,7 @@ test_getting_info(apr_pool_t *pool)
NULL, NULL, NULL,
NULL, NULL, NULL,
NULL, NULL, NULL,
- NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
db, svn_dirent_join(local_abspath, "E", pool),
pool, pool));
SVN_TEST_ASSERT(status == svn_wc__db_status_incomplete);
@@ -475,7 +505,7 @@ test_getting_info(apr_pool_t *pool)
NULL, NULL, NULL,
NULL, NULL, NULL,
NULL, &checksum, NULL,
- NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
db, svn_dirent_join(local_abspath, "F", pool),
pool, pool));
SVN_TEST_STRING_ASSERT(SHA1_1,
@@ -487,7 +517,7 @@ test_getting_info(apr_pool_t *pool)
&repos_relpath, &repos_root_url, &repos_uuid,
&changed_rev, &changed_date, &changed_author,
NULL, NULL, NULL,
- NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
db, svn_dirent_join(local_abspath, "G", pool),
pool, pool));
SVN_TEST_STRING_ASSERT(repos_relpath, "G-alt");
@@ -503,7 +533,7 @@ test_getting_info(apr_pool_t *pool)
NULL, NULL, NULL,
NULL, NULL, NULL,
NULL, &checksum, &target,
- NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
db, svn_dirent_join(local_abspath, "H", pool),
pool, pool));
SVN_TEST_ASSERT(checksum == NULL);
@@ -515,11 +545,10 @@ test_getting_info(apr_pool_t *pool)
NULL, NULL, NULL,
NULL, NULL, NULL,
NULL, NULL, NULL,
- NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
db, svn_dirent_join(local_abspath, "missing-file", pool),
pool, pool);
- SVN_TEST_ASSERT(err != NULL && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND);
- svn_error_clear(err);
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_WC_PATH_NOT_FOUND);
return SVN_NO_ERROR;
}
@@ -529,12 +558,12 @@ static svn_error_t *
validate_node(svn_wc__db_t *db,
const char *local_abspath,
const char *relpath,
- svn_wc__db_kind_t expected_kind,
+ svn_node_kind_t expected_kind,
svn_wc__db_status_t expected_status,
apr_pool_t *scratch_pool)
{
const char *path = svn_dirent_join(local_abspath, relpath, scratch_pool);
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
svn_wc__db_status_t status;
apr_hash_t *props;
const svn_string_t *value;
@@ -544,14 +573,12 @@ validate_node(svn_wc__db_t *db,
NULL, NULL, NULL,
NULL, NULL, NULL,
NULL, NULL, NULL,
- NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
db, path,
scratch_pool, scratch_pool));
SVN_TEST_ASSERT(kind == expected_kind);
SVN_TEST_ASSERT(status == expected_status);
- SVN_ERR(svn_wc__db_base_get_props(&props, db, path,
- scratch_pool, scratch_pool));
switch (status)
{
case svn_wc__db_status_server_excluded:
@@ -559,13 +586,18 @@ validate_node(svn_wc__db_t *db,
case svn_wc__db_status_incomplete:
case svn_wc__db_status_not_present:
/* Our tests aren't setting properties on these node types, so
- short-circuit examination of name/value pairs. */
+ short-circuit examination of name/value pairs, to avoid having
+ to handle the error from svn_wc__db_base_get_props(). */
return SVN_NO_ERROR;
-
default:
- SVN_TEST_ASSERT(props != NULL);
+ break; /* Fall through */
}
+ SVN_ERR(svn_wc__db_base_get_props(&props, db, path,
+ scratch_pool, scratch_pool));
+
+ SVN_TEST_ASSERT(props != NULL);
+
value = apr_hash_get(props, "p1", APR_HASH_KEY_STRING);
SVN_TEST_STRING_ASSERT(value->data, "v1");
@@ -628,7 +660,7 @@ test_inserting_nodes(apr_pool_t *pool)
props,
1, TIME_1a, AUTHOR_1,
children, svn_depth_infinity,
- NULL, NULL, FALSE, NULL, NULL,
+ NULL, NULL, FALSE, NULL, NULL, NULL,
pool));
/* Replace an incomplete node with a file node. */
@@ -640,7 +672,8 @@ test_inserting_nodes(apr_pool_t *pool)
props,
1, TIME_1a, AUTHOR_1,
checksum,
- NULL, NULL, FALSE, NULL, FALSE, FALSE, NULL,
+ NULL, FALSE, FALSE, NULL, NULL, FALSE, FALSE,
+ NULL, NULL,
pool));
/* Create a new symlink node. */
@@ -652,14 +685,15 @@ test_inserting_nodes(apr_pool_t *pool)
props,
1, TIME_1a, AUTHOR_1,
"O-target",
- NULL, NULL, FALSE, NULL, NULL,
+ NULL, FALSE, FALSE, NULL, NULL, FALSE, FALSE,
+ NULL, NULL,
pool));
- /* Replace an incomplete node with an absent file node. */
+ /* Replace an incomplete node with an server-excluded file node. */
SVN_ERR(svn_wc__db_base_add_excluded_node(
db, svn_dirent_join(local_abspath, "N/N-b", pool),
"N/N-b", ROOT_ONE, UUID_ONE, 3,
- svn_wc__db_kind_file, svn_wc__db_status_server_excluded,
+ svn_node_file, svn_wc__db_status_server_excluded,
NULL, NULL,
pool));
@@ -667,7 +701,7 @@ test_inserting_nodes(apr_pool_t *pool)
SVN_ERR(svn_wc__db_base_add_excluded_node(
db, svn_dirent_join(local_abspath, "P", pool),
"P", ROOT_ONE, UUID_ONE, 3,
- svn_wc__db_kind_dir, svn_wc__db_status_excluded,
+ svn_node_dir, svn_wc__db_status_excluded,
NULL, NULL,
pool));
@@ -675,44 +709,44 @@ test_inserting_nodes(apr_pool_t *pool)
SVN_ERR(svn_wc__db_base_add_not_present_node(
db, svn_dirent_join(local_abspath, "Q", pool),
"Q", ROOT_ONE, UUID_ONE, 3,
- svn_wc__db_kind_symlink,
+ svn_node_symlink,
NULL, NULL,
pool));
- /* Create a new absent unknown-kind node. */
+ /* Create a new server-excluded unknown-kind node. */
SVN_ERR(svn_wc__db_base_add_excluded_node(
db, svn_dirent_join(local_abspath, "R", pool),
"R", ROOT_ONE, UUID_ONE, 3,
- svn_wc__db_kind_unknown, svn_wc__db_status_server_excluded,
+ svn_node_unknown, svn_wc__db_status_server_excluded,
NULL, NULL,
pool));
/* Are all the nodes where we expect them to be? */
SVN_ERR(validate_node(db, local_abspath, "N",
- svn_wc__db_kind_dir, svn_wc__db_status_normal,
+ svn_node_dir, svn_wc__db_status_normal,
pool));
SVN_ERR(validate_node(db, local_abspath, "N/N-a",
- svn_wc__db_kind_file, svn_wc__db_status_normal,
+ svn_node_file, svn_wc__db_status_normal,
pool));
SVN_ERR(validate_node(db, local_abspath, "N/N-b",
- svn_wc__db_kind_file,
+ svn_node_file,
svn_wc__db_status_server_excluded,
pool));
SVN_ERR(validate_node(db, local_abspath, "N/N-c",
- svn_wc__db_kind_unknown, svn_wc__db_status_incomplete,
+ svn_node_unknown, svn_wc__db_status_incomplete,
pool));
SVN_ERR(validate_node(db, local_abspath, "O",
- svn_wc__db_kind_symlink, svn_wc__db_status_normal,
+ svn_node_symlink, svn_wc__db_status_normal,
pool));
SVN_ERR(validate_node(db, local_abspath, "P",
- svn_wc__db_kind_dir, svn_wc__db_status_excluded,
+ svn_node_dir, svn_wc__db_status_excluded,
pool));
SVN_ERR(validate_node(db, local_abspath, "Q",
- svn_wc__db_kind_symlink, svn_wc__db_status_not_present,
+ svn_node_symlink, svn_wc__db_status_not_present,
pool));
SVN_ERR(validate_node(db, local_abspath, "R",
- svn_wc__db_kind_unknown,
+ svn_node_unknown,
svn_wc__db_status_server_excluded,
pool));
@@ -768,7 +802,7 @@ static svn_error_t *
test_working_info(apr_pool_t *pool)
{
const char *local_abspath;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
svn_wc__db_status_t status;
svn_revnum_t revision;
const char *repos_relpath;
@@ -777,10 +811,10 @@ test_working_info(apr_pool_t *pool)
svn_revnum_t changed_rev;
apr_time_t changed_date;
const char *changed_author;
- apr_time_t last_mod_time;
+ apr_time_t recorded_time;
svn_depth_t depth;
const svn_checksum_t *checksum;
- svn_filesize_t translated_size;
+ svn_filesize_t recorded_size;
const char *target;
const char *changelist;
const char *original_repos_relpath;
@@ -806,13 +840,13 @@ test_working_info(apr_pool_t *pool)
&changed_rev, &changed_date, &changed_author,
&depth, &checksum, &target, &original_repos_relpath,
&original_root_url, &original_uuid, &original_revnum,
- &lock, &translated_size, &last_mod_time, &changelist,
+ &lock, &recorded_size, &recorded_time, &changelist,
&conflicted, &op_root, &had_props, &props_mod,
&have_base, &have_more_work, &have_work,
db, svn_dirent_join(local_abspath, "I", pool),
pool, pool));
SVN_TEST_ASSERT(status == svn_wc__db_status_added);
- SVN_TEST_ASSERT(kind == svn_wc__db_kind_dir);
+ SVN_TEST_ASSERT(kind == svn_node_dir);
SVN_TEST_ASSERT(revision == SVN_INVALID_REVNUM);
SVN_TEST_ASSERT(repos_relpath == NULL);
SVN_TEST_ASSERT(repos_root_url == NULL);
@@ -822,18 +856,22 @@ test_working_info(apr_pool_t *pool)
SVN_TEST_STRING_ASSERT(changed_author, AUTHOR_2);
SVN_TEST_ASSERT(depth == svn_depth_immediates);
SVN_TEST_ASSERT(checksum == NULL);
- SVN_TEST_ASSERT(translated_size == SVN_INVALID_FILESIZE);
+ SVN_TEST_ASSERT(recorded_size == SVN_INVALID_FILESIZE);
SVN_TEST_ASSERT(target == NULL);
SVN_TEST_STRING_ASSERT(changelist, "changelist");
SVN_TEST_STRING_ASSERT(original_repos_relpath, "some/dir");
SVN_TEST_STRING_ASSERT(original_root_url, ROOT_TWO);
SVN_TEST_STRING_ASSERT(original_uuid, UUID_TWO);
SVN_TEST_ASSERT(original_revnum == 2);
- SVN_TEST_ASSERT(props_mod == FALSE);
- SVN_TEST_ASSERT(have_base == TRUE);
- SVN_TEST_ASSERT(have_work == TRUE);
- SVN_TEST_ASSERT(conflicted == FALSE);
+ SVN_TEST_ASSERT(!had_props);
+ SVN_TEST_ASSERT(!props_mod);
+ SVN_TEST_ASSERT(have_base);
+ /* SVN_TEST_ASSERT(have_more_work...); */
+ SVN_TEST_ASSERT(have_work);
+ SVN_TEST_ASSERT(!conflicted);
SVN_TEST_ASSERT(lock == NULL);
+ /* SVN_TEST_ASSERT(last_mod_time...); */
+ /* SVN_TEST_ASSERT(op_root...); */
/* ### we need a hojillion more tests in here. I just want to get this
@@ -859,14 +897,14 @@ test_pdh(apr_pool_t *pool)
SVN_ERR(svn_wc__db_base_add_excluded_node(
db, svn_dirent_join(local_abspath, "sub", pool),
"sub", ROOT_ONE, UUID_ONE, 1,
- svn_wc__db_kind_file, svn_wc__db_status_server_excluded,
+ svn_node_file, svn_wc__db_status_server_excluded,
NULL, NULL,
pool));
SVN_ERR(svn_wc__db_base_add_excluded_node(
db, svn_dirent_join(local_abspath, "sub/A", pool),
"sub/A", ROOT_ONE, UUID_ONE, 1,
- svn_wc__db_kind_file, svn_wc__db_status_server_excluded,
+ svn_node_file, svn_wc__db_status_server_excluded,
NULL, NULL,
pool));
@@ -888,6 +926,10 @@ test_scan_addition(apr_pool_t *pool)
const char *original_root_url;
const char *original_uuid;
svn_revnum_t original_revision;
+ const char *moved_from_abspath;
+ const char *move_op_root_abspath;
+ const char *move_op_root_src;
+ const char *delete_op_root_abspath;
SVN_ERR(create_open(&db, &local_abspath, "test_scan_addition", pool));
@@ -935,9 +977,24 @@ test_scan_addition(apr_pool_t *pool)
&original_revision,
db, svn_dirent_join(local_abspath, "J/J-d", pool),
pool, pool));
+ SVN_ERR(svn_wc__db_scan_moved(
+ &moved_from_abspath,
+ &move_op_root_abspath,
+ &move_op_root_src,
+ &delete_op_root_abspath,
+ db, svn_dirent_join(local_abspath, "J/J-d", pool),
+ pool, pool));
SVN_TEST_ASSERT(status == svn_wc__db_status_moved_here);
SVN_TEST_ASSERT(validate_abspath(local_abspath, "J/J-d",
op_root_abspath, pool));
+ SVN_TEST_ASSERT(validate_abspath(local_abspath, "moved/file",
+ moved_from_abspath, pool));
+ SVN_TEST_ASSERT(validate_abspath(local_abspath, "J/J-d",
+ move_op_root_abspath, pool));
+ SVN_TEST_ASSERT(validate_abspath(local_abspath, "moved/file",
+ move_op_root_src, pool));
+ SVN_TEST_ASSERT(validate_abspath(local_abspath, "moved/file",
+ delete_op_root_abspath, pool));
SVN_TEST_STRING_ASSERT(repos_relpath, "J/J-d");
SVN_TEST_STRING_ASSERT(repos_root_url, ROOT_ONE);
SVN_TEST_STRING_ASSERT(repos_uuid, UUID_ONE);
@@ -1015,6 +1072,7 @@ test_scan_deletion(apr_pool_t *pool)
const char *base_del_abspath;
const char *work_del_abspath;
const char *moved_to_abspath;
+ const char *copy_op_root_abspath;
SVN_ERR(create_open(&db, &local_abspath, "test_scan_deletion", pool));
@@ -1023,34 +1081,41 @@ test_scan_deletion(apr_pool_t *pool)
&base_del_abspath,
&moved_to_abspath,
&work_del_abspath,
+ &copy_op_root_abspath,
db, svn_dirent_join(local_abspath, "J/J-e", pool),
pool, pool));
- SVN_TEST_ASSERT(validate_abspath(local_abspath, "J/J-e",
+ SVN_TEST_ASSERT(validate_abspath(local_abspath, "J",
base_del_abspath, pool));
SVN_TEST_ASSERT(validate_abspath(local_abspath, "other/place",
moved_to_abspath, pool));
SVN_TEST_ASSERT(validate_abspath(local_abspath, "J/J-e",
work_del_abspath, pool));
+ SVN_TEST_ASSERT(validate_abspath(local_abspath, "other/place",
+ copy_op_root_abspath, pool));
/* Node was moved elsewhere (child of operation root). */
SVN_ERR(svn_wc__db_scan_deletion(
&base_del_abspath,
&moved_to_abspath,
&work_del_abspath,
+ &copy_op_root_abspath,
db, svn_dirent_join(local_abspath, "J/J-e/J-e-a", pool),
pool, pool));
- SVN_TEST_ASSERT(validate_abspath(local_abspath, "J/J-e",
+ SVN_TEST_ASSERT(validate_abspath(local_abspath, "J",
base_del_abspath, pool));
- SVN_TEST_ASSERT(validate_abspath(local_abspath, "other/place",
+ SVN_TEST_ASSERT(validate_abspath(local_abspath, "other/place/J-e-a",
moved_to_abspath, pool));
SVN_TEST_ASSERT(validate_abspath(local_abspath, "J/J-e",
work_del_abspath, pool));
+ SVN_TEST_ASSERT(validate_abspath(local_abspath, "other/place",
+ copy_op_root_abspath, pool));
/* Root of delete. Parent is a WORKING node. */
SVN_ERR(svn_wc__db_scan_deletion(
&base_del_abspath,
&moved_to_abspath,
&work_del_abspath,
+ NULL,
db, svn_dirent_join(local_abspath, "J/J-c", pool),
pool, pool));
/* Implicit delete of "J" (via replacement). */
@@ -1065,6 +1130,7 @@ test_scan_deletion(apr_pool_t *pool)
&base_del_abspath,
&moved_to_abspath,
&work_del_abspath,
+ NULL,
db, svn_dirent_join(local_abspath, "J/J-c/J-c-a", pool),
pool, pool));
/* Implicit delete of "J" (via replacement). */
@@ -1079,14 +1145,15 @@ test_scan_deletion(apr_pool_t *pool)
&base_del_abspath,
&moved_to_abspath,
&work_del_abspath,
+ NULL,
db, svn_dirent_join(local_abspath, "J/J-e/J-e-b/Jeba", pool),
pool, pool));
/* ### I don't understand this. "J/J-e/J-e-b/Jeba" is a deleted
base node that is not overlayed by the replacement rooted at "J".
Why does base_del_abspath refer to "J-e"? */
- SVN_TEST_ASSERT(validate_abspath(local_abspath, "J/J-e",
+ SVN_TEST_ASSERT(validate_abspath(local_abspath, "J",
base_del_abspath, pool));
- SVN_TEST_ASSERT(validate_abspath(local_abspath, "other/place",
+ SVN_TEST_ASSERT(validate_abspath(local_abspath, "other/place/J-e-b/Jeba",
moved_to_abspath, pool));
SVN_TEST_ASSERT(work_del_abspath == NULL);
@@ -1095,6 +1162,7 @@ test_scan_deletion(apr_pool_t *pool)
&base_del_abspath,
&moved_to_abspath,
&work_del_abspath,
+ NULL,
db, svn_dirent_join(local_abspath, "J/J-f/J-f-a", pool),
pool, pool));
/* Implicit delete of "J" (via replacement). */
@@ -1108,6 +1176,7 @@ test_scan_deletion(apr_pool_t *pool)
&base_del_abspath,
&moved_to_abspath,
&work_del_abspath,
+ NULL,
db, svn_dirent_join(local_abspath, "K", pool),
pool, pool));
SVN_TEST_ASSERT(validate_abspath(local_abspath, "K",
@@ -1120,6 +1189,7 @@ test_scan_deletion(apr_pool_t *pool)
&base_del_abspath,
&moved_to_abspath,
&work_del_abspath,
+ NULL,
db, svn_dirent_join(local_abspath, "K/K-a", pool),
pool, pool));
SVN_TEST_ASSERT(validate_abspath(local_abspath, "K",
@@ -1132,12 +1202,15 @@ test_scan_deletion(apr_pool_t *pool)
&base_del_abspath,
&moved_to_abspath,
&work_del_abspath,
+ &copy_op_root_abspath,
db, svn_dirent_join(local_abspath, "K/K-b", pool),
pool, pool));
- SVN_TEST_ASSERT(validate_abspath(local_abspath, "K/K-b",
+ SVN_TEST_ASSERT(validate_abspath(local_abspath, "K",
base_del_abspath, pool));
SVN_TEST_ASSERT(validate_abspath(local_abspath, "moved/away",
moved_to_abspath, pool));
+ SVN_TEST_ASSERT(validate_abspath(local_abspath, "moved/away",
+ copy_op_root_abspath, pool));
SVN_TEST_ASSERT(work_del_abspath == NULL);
/* Subtree deletion of added tree. Start at child. */
@@ -1145,6 +1218,7 @@ test_scan_deletion(apr_pool_t *pool)
&base_del_abspath,
&moved_to_abspath,
&work_del_abspath,
+ NULL,
db, svn_dirent_join(local_abspath, "L/L-a/L-a-a", pool),
pool, pool));
SVN_TEST_ASSERT(base_del_abspath == NULL);
@@ -1157,6 +1231,7 @@ test_scan_deletion(apr_pool_t *pool)
&base_del_abspath,
&moved_to_abspath,
&work_del_abspath,
+ NULL,
db, svn_dirent_join(local_abspath, "L/L-a", pool),
pool, pool));
SVN_TEST_ASSERT(base_del_abspath == NULL);
@@ -1356,6 +1431,7 @@ test_externals_store(apr_pool_t *pool)
"not-a-uuid",
12,
props,
+ NULL,
10,
987654,
"somebody",
@@ -1368,6 +1444,7 @@ test_externals_store(apr_pool_t *pool)
FALSE, NULL,
FALSE,
NULL,
+ NULL,
pool));
SVN_ERR(svn_wc__db_external_add_dir(db,
@@ -1384,7 +1461,7 @@ test_externals_store(apr_pool_t *pool)
{
svn_wc__db_status_t status;
- svn_wc__db_kind_t kind;
+ svn_node_kind_t kind;
const char *repos_root_url;
const char *repos_uuid;
const char *defining_abspath;
@@ -1401,7 +1478,7 @@ test_externals_store(apr_pool_t *pool)
pool, pool));
SVN_TEST_ASSERT(status == svn_wc__db_status_normal);
- SVN_TEST_ASSERT(kind == svn_wc__db_kind_file);
+ SVN_TEST_ASSERT(kind == svn_node_file);
SVN_TEST_STRING_ASSERT(repos_root_url, "svn://some-repos/svn");
SVN_TEST_STRING_ASSERT(repos_uuid, "not-a-uuid");
SVN_TEST_STRING_ASSERT(defining_abspath, subdir);
@@ -1432,7 +1509,7 @@ test_externals_store(apr_pool_t *pool)
pool, pool));
SVN_TEST_ASSERT(status == svn_wc__db_status_normal);
- SVN_TEST_ASSERT(kind == svn_wc__db_kind_dir);
+ SVN_TEST_ASSERT(kind == svn_node_dir);
SVN_TEST_STRING_ASSERT(repos_root_url, "svn://other-repos/nsv");
SVN_TEST_STRING_ASSERT(repos_uuid, "no-uuid-either");
SVN_TEST_STRING_ASSERT(defining_abspath, subdir);
diff --git a/subversion/tests/libsvn_wc/entries-compat.c b/subversion/tests/libsvn_wc/entries-compat.c
index eed6bca..34ad425 100644
--- a/subversion/tests/libsvn_wc/entries-compat.c
+++ b/subversion/tests/libsvn_wc/entries-compat.c
@@ -96,171 +96,171 @@ static const char * const TESTING_DATA = (
"insert into nodes values ("
" 1, '', 0, null, 1, '', 1, 'normal',"
" null, null, 'dir', '()', 'infinity', null, null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " null, null, null, null);"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'A', 0, '', 1, 'A', 1, 'normal',"
" null, null, 'file', '()', null, '$sha1$" SHA1_1 "', null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " 10, null, null, null);"
+ " 10, null, null, null, null);"
"insert into nodes values ("
" 1, 'B', 0, '', 1, 'B', null, 'excluded',"
" null, null, 'symlink', null, null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, null, null, null);"
"insert into nodes values ("
- " 1, 'C', 0, '', 1, 'C', null, 'absent',"
+ " 1, 'C', 0, '', 1, 'C', null, 'server-excluded',"
" null, null, 'unknown', null, null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'D', 0, '', 1, 'D', null, 'not-present',"
" null, null, 'unknown', null, null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'E', 0, '', 1, 'E', null, 'incomplete',"
" null, null, 'unknown', null, null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'F', 0, '', 1, 'F', 1, 'normal',"
" null, null, 'file', '()', null, '$sha1$" SHA1_1 "', null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " 15, null, null, null);"
+ " 15, null, null, null, null);"
"insert into nodes values ("
" 1, 'G', 0, '', 2, 'G-alt', 1, 'normal',"
" null, null, 'file', '()', null, '$sha1$" SHA1_1 "', null, 2, " TIME_2s ", '" AUTHOR_2 "',"
- " 15, null, null, null);"
+ " 15, null, null, null, null);"
"insert into nodes values ("
" 1, 'H', 0, '', 1, 'H', 1, 'normal',"
" null, null, 'symlink', '()', null, null, 'H-target', 1, " TIME_1s ", '" AUTHOR_1 "',"
- " null, null, null, null);"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'I', 0, '', 1, 'I', 1, 'normal',"
" null, null, 'dir', '()', null, null, null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " null, null, null, null);"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J', 0, '', 1, 'J', 1, 'normal',"
" null, null, 'dir', '()', null, null, null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " null, null, null, null);"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-e', 0, 'J', 1, 'J/J-e', 1, 'normal',"
" null, null, 'dir', '()', null, null, null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " null, null, null, null);"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-e/J-e-a', 0, 'J/J-e', 1, 'J/J-e/J-e-a', 1, 'normal',"
" null, null, 'file', '()', null, '$sha1$" SHA1_1 "', null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " 15, null, null, null);"
+ " 15, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-e/J-e-b', 0, 'J/J-e', 1, 'J/J-e/J-e-b', 1, 'normal',"
" null, null, 'dir', '()', null, null, null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " null, null, null, null);"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-e/J-e-b/Jeba', 0, 'J/J-e/J-e-b', 1, 'J/J-e/J-e-b/Jeba', 1, 'normal',"
" null, null, 'file', '()', null, '$sha1$" SHA1_1 "', null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " 15, null, null, null);"
+ " 15, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-f', 0, 'J', 1, 'J/J-f', 1, 'normal',"
" null, null, 'dir', '()', null, null, null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " null, null, null, null);"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-f/J-f-a', 0, 'J/J-f', 1, 'J/J-f/J-f-a', 1, 'normal',"
" null, null, 'dir', '()', null, null, null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " null, null, null, null);"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'K', 0, '', 1, 'K', 1, 'normal',"
" null, null, 'dir', '()', null, null, null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " null, null, null, null);"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'K/K-a', 0, 'K', 1, 'K/K-a', 1, 'normal',"
" null, null, 'file', '()', null, '$sha1$" SHA1_1 "', null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " 15, null, null, null);"
+ " 15, null, null, null, null);"
"insert into nodes values ("
" 1, 'K/K-b', 0, 'K', 1, 'K/K-b', 1, 'normal',"
" null, null, 'file', '()', null, '$sha1$" SHA1_1 "', null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " 15, null, null, null);"
+ " 15, null, null, null, null);"
""
/* Load data into NODES table;
### op_depths have not been calculated by me yet;
the value 1 is just 'good enough' to make the nodes WORKING nodes. */
"insert into nodes values ("
" 1, 'I', 1, '', 2, 'some/dir', 2, 'normal',"
- " 0, null, 'dir', '()', 'immediates', null, null, 2, " TIME_2s ", '" AUTHOR_2 "',"
- " null, null, null, null);"
+ " null, null, 'dir', '()', 'immediates', null, null, 2, " TIME_2s ", '" AUTHOR_2 "',"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J', 1, '', null, null, null, 'normal',"
- " 0, null, 'dir', '()', 'immediates', null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', 'immediates', null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-a', 1, 'J', null, null, null, 'normal',"
- " 0, null, 'file', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'file', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-b', 1, 'J', 2, 'some/dir', 2, 'normal',"
- " 0, null, 'dir', '()', 'infinity', null, null, 2, " TIME_2s ", '" AUTHOR_2 "',"
- " null, null, null, null);"
+ " null, null, 'dir', '()', 'infinity', null, null, 2, " TIME_2s ", '" AUTHOR_2 "',"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-b/J-b-a', 1, 'J/J-b', 2, 'another/dir', 2, 'normal',"
- " 0, null, 'dir', '()', 'infinity', null, null, 2, " TIME_2s ", '" AUTHOR_2 "',"
- " null, null, null, null);"
+ " null, null, 'dir', '()', 'infinity', null, null, 2, " TIME_2s ", '" AUTHOR_2 "',"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-b/J-b-b', 1, 'J/J-b', null, null, null, 'normal',"
- " 0, null, 'file', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'file', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-c', 1, 'J', null, null, null, 'not-present',"
- " 0, null, 'dir', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-c/J-c-a', 1, 'J/J-c', null, null, null, 'not-present',"
- " 0, null, 'dir', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-d', 1, 'J', 2, 'moved/file', 2, 'normal',"
" 1, null, 'file', '()', null, '$sha1$" SHA1_1 "', null, 2, " TIME_2s ", '" AUTHOR_2 "',"
- " 10, null, null, null);"
+ " 10, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-e', 1, 'J', null, null, null, 'not-present',"
- " 0, 'other/place', 'dir', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, 'other/place', 'dir', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-e/J-e-a', 1, 'J/J-e', null, null, null, 'not-present',"
- " 0, null, 'file', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'file', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-e/J-e-b', 1, 'J/J-e', null, null, null, 'not-present',"
- " 0, null, 'dir', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-e/J-e-b/Jeba', 1, 'J/J-e/J-e-b', null, null, null, 'base-deleted',"
- " 0, null, 'file', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'file', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-f', 1, 'J', null, null, null, 'normal',"
- " 0, null, 'dir', '()', 'immediates', null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', 'immediates', null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'J/J-f/J-f-a', 1, 'J/J-f', null, null, null, 'base-deleted',"
- " 0, null, 'dir', '()', 'immediates', null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', 'immediates', null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'K', 1, '', null, null, null, 'base-deleted',"
- " 0, null, 'dir', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'K/K-a', 1, 'K', null, null, null, 'base-deleted',"
- " 0, null, 'file', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'file', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'K/K-b', 1, 'K', null, null, null, 'base-deleted',"
- " 0, 'moved/away', 'file', '()', null, null, null, null, null, null,"
- " null, null, null, null);"
+ " null, 'moved/away', 'file', '()', null, null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'L', 1, '', null, null, null, 'normal',"
- " 0, null, 'dir', '()', 'immediates', null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', 'immediates', null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'L/L-a', 1, 'L', null, null, null, 'not-present',"
- " 0, null, 'dir', '()', 'immediates', null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', 'immediates', null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'L/L-a/L-a-a', 1, 'L/L-a', null, null, null, 'not-present',"
- " 0, null, 'dir', '()', 'immediates', null, null, null, null, null,"
- " null, null, null, null);"
+ " null, null, 'dir', '()', 'immediates', null, null, null, null, null,"
+ " null, null, null, null, null);"
"insert into actual_node values ("
" 1, 'I', '', null, null, null, null, null, 'changelist', null, "
" null, null, null, null, null);"
@@ -274,11 +274,11 @@ static const char * const TESTING_DATA = (
"insert into nodes values ("
" 1, 'M', 0, '', 1, 'M', 1, 'normal', "
" null, null, 'dir', '()', null, null, null, 1, " TIME_1s ", '" AUTHOR_1 "', "
- " null, null, null, null);"
+ " null, null, null, null, null);"
"insert into nodes values ("
" 1, 'M/M-a', 0, 'M', 1, 'M/M-a', 1, 'not-present', "
" null, null, 'file', '()', null, null, null, 1, null, null, "
- " null, null, null, null);"
+ " null, null, null, null, null);"
);
@@ -295,7 +295,7 @@ static const char * const M_TESTING_DATA = (
"insert into nodes values ("
" 1, '', 0, null, 1, 'M', 1, 'normal',"
" null, null, 'dir', '()', 'infinity', null, null, 1, " TIME_1s ", '" AUTHOR_1 "',"
- " null, null, null, null);"
+ " null, null, null, null, null);"
);
@@ -332,10 +332,12 @@ create_open(svn_wc__db_t **db,
pool));
SVN_ERR(svn_wc__db_open(db,
NULL /* config */,
- TRUE /* auto_upgrade */,
+ FALSE /* not_upgraded_ok */,
TRUE /* enforce_empty_wq */,
pool, pool));
+ svn_test_add_dir_cleanup(*local_abspath);
+
return SVN_NO_ERROR;
}
@@ -601,12 +603,14 @@ test_access_baton_like_locking(apr_pool_t *pool)
{
const char *url, *repos_root_url, *repos_uuid;
const char *subdir = svn_dirent_join(local_abspath, "sub-wc", pool);
+ const char *repos_relpath;
svn_boolean_t is_root;
- SVN_ERR(svn_wc__node_get_url(&url, wc_ctx, local_abspath, pool, pool));
- SVN_ERR(svn_wc__node_get_repos_info(&repos_root_url, &repos_uuid,
+ SVN_ERR(svn_wc__node_get_repos_info(NULL, &repos_relpath,
+ &repos_root_url, &repos_uuid,
wc_ctx, local_abspath,
pool, pool));
+ url = svn_path_url_add_component2(repos_root_url, repos_relpath, pool);
SVN_ERR(svn_io_make_dir_recursively(subdir, pool));
SVN_ERR(svn_wc_ensure_adm3(subdir, repos_uuid,
@@ -614,13 +618,13 @@ test_access_baton_like_locking(apr_pool_t *pool)
repos_root_url, 0, svn_depth_infinity,
pool));
- SVN_ERR(svn_wc__check_wc_root(&is_root, NULL, NULL, wc_ctx->db, subdir,
- pool));
+ SVN_ERR(svn_wc__db_is_switched(&is_root, NULL, NULL, wc_ctx->db, subdir,
+ pool));
SVN_TEST_ASSERT(is_root);
- SVN_ERR(svn_wc__check_wc_root(&is_root, NULL, NULL, wc_ctx2->db, subdir,
- pool));
+ SVN_ERR(svn_wc__db_is_switched(&is_root, NULL, NULL, wc_ctx2->db, subdir,
+ pool));
/* This test was added to show a regression where the next check failed,
but the check above this succeeded */
diff --git a/subversion/tests/libsvn_wc/op-depth-test.c b/subversion/tests/libsvn_wc/op-depth-test.c
index c385c39..39afcf4 100644
--- a/subversion/tests/libsvn_wc/op-depth-test.c
+++ b/subversion/tests/libsvn_wc/op-depth-test.c
@@ -35,6 +35,7 @@
#include "svn_wc.h"
#include "svn_client.h"
#include "svn_hash.h"
+#include "svn_sorts.h"
#include "utils.h"
@@ -43,6 +44,8 @@
#include "private/svn_dep_compat.h"
#include "../../libsvn_wc/wc.h"
#include "../../libsvn_wc/wc_db.h"
+#include "../../libsvn_wc/workqueue.h"
+#include "../../libsvn_wc/conflicts.h"
#define SVN_WC__I_AM_WC_DB
#include "../../libsvn_wc/wc_db_private.h"
@@ -52,6 +55,14 @@
#pragma warning(disable: 4221) /* nonstandard extension used */
#endif
+/* This macro is not available in 1.8.x, but let's just use it here */
+#ifndef SVN_VA_NULL
+struct svn_null_pointer_constant_stdarg_sentinel_t;
+
+/** Null pointer constant used as a sentinel in variable argument lists. */
+#define SVN_VA_NULL ((struct svn_null_pointer_constant_stdarg_sentinel_t*)0)
+#endif
+
/* Compare strings, like strcmp but either or both may be NULL which
* compares equal to NULL and not equal to any non-NULL string. */
static int
@@ -77,260 +88,14 @@ open_wc_db(svn_sqlite__db_t **sdb,
apr_pool_t *scratch_pool)
{
SVN_ERR(svn_wc__db_util_open_db(sdb, wc_root_abspath, "wc.db",
- svn_sqlite__mode_readwrite, my_statements,
+ svn_sqlite__mode_readwrite,
+ FALSE /* exclusive */, my_statements,
result_pool, scratch_pool));
return SVN_NO_ERROR;
}
/* ---------------------------------------------------------------------- */
-/* Functions for easy manipulation of a WC. Paths given to these functions
- * can be relative to the WC root as stored in the WC baton. */
-
-/* Return the abspath of PATH which is absolute or relative to the WC in B. */
-#define wc_path(b, path) (svn_dirent_join((b)->wc_abspath, (path), (b)->pool))
-
-/* Create a file on disk at PATH, with TEXT as its content. */
-static void
-file_write(svn_test__sandbox_t *b, const char *path, const char *text)
-{
- FILE *f = fopen(wc_path(b, path), "w");
- fputs(text, f);
- fclose(f);
-}
-
-/* Schedule for addition the single node that exists on disk at PATH,
- * non-recursively. */
-static svn_error_t *
-wc_add(svn_test__sandbox_t *b, const char *path)
-{
- const char *parent_abspath;
- path = wc_path(b, path);
- parent_abspath = svn_dirent_dirname(path, b->pool);
- SVN_ERR(svn_wc__acquire_write_lock(NULL, b->wc_ctx, parent_abspath, FALSE,
- b->pool, b->pool));
- SVN_ERR(svn_wc_add_from_disk(b->wc_ctx, path, NULL, NULL, b->pool));
- SVN_ERR(svn_wc__release_write_lock(b->wc_ctx, parent_abspath, b->pool));
- return SVN_NO_ERROR;
-}
-
-/* Create a single directory on disk. */
-static svn_error_t *
-disk_mkdir(svn_test__sandbox_t *b, const char *path)
-{
- path = wc_path(b, path);
- SVN_ERR(svn_io_dir_make(path, APR_FPROT_OS_DEFAULT, b->pool));
- return SVN_NO_ERROR;
-}
-
-/* Create a single directory on disk and schedule it for addition. */
-static svn_error_t *
-wc_mkdir(svn_test__sandbox_t *b, const char *path)
-{
- SVN_ERR(disk_mkdir(b, path));
- SVN_ERR(wc_add(b, path));
- return SVN_NO_ERROR;
-}
-
-#if 0 /* not used */
-/* Copy the file or directory tree FROM_PATH to TO_PATH which must not exist
- * beforehand. */
-static svn_error_t *
-disk_copy(svn_test__sandbox_t *b, const char *from_path, const char *to_path)
-{
- const char *to_dir, *to_name;
- from_path = wc_path(b, from_path);
- to_path = wc_path(b, to_path);
- svn_dirent_split(&to_dir, &to_name, to_path, b->pool);
- return svn_io_copy_dir_recursively(from_path, to_dir, to_name,
- FALSE, NULL, NULL, b->pool);
-}
-#endif
-
-/* Copy the WC file or directory tree FROM_PATH to TO_PATH which must not
- * exist beforehand. */
-static svn_error_t *
-wc_copy(svn_test__sandbox_t *b, const char *from_path, const char *to_path)
-{
- from_path = wc_path(b, from_path);
- to_path = wc_path(b, to_path);
- return svn_wc_copy3(b->wc_ctx, from_path, to_path, FALSE,
- NULL, NULL, NULL, NULL, b->pool);
-}
-
-/* Revert a WC file or directory tree at PATH */
-static svn_error_t *
-wc_revert(svn_test__sandbox_t *b, const char *path, svn_depth_t depth)
-{
- const char *abspath = wc_path(b, path);
- const char *dir_abspath = svn_dirent_dirname(abspath, b->pool);
- const char *lock_root_abspath;
-
- SVN_ERR(svn_wc__acquire_write_lock(&lock_root_abspath, b->wc_ctx,
- dir_abspath, FALSE /* lock_anchor */,
- b->pool, b->pool));
- SVN_ERR(svn_wc_revert4(b->wc_ctx, abspath, depth, FALSE, NULL,
- NULL, NULL, /* cancel baton + func */
- NULL, NULL, /* notify baton + func */
- b->pool));
- SVN_ERR(svn_wc__release_write_lock(b->wc_ctx, lock_root_abspath, b->pool));
- return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-wc_delete(svn_test__sandbox_t *b, const char *path)
-{
- const char *abspath = wc_path(b, path);
- const char *dir_abspath = svn_dirent_dirname(abspath, b->pool);
- const char *lock_root_abspath;
-
- SVN_ERR(svn_wc__acquire_write_lock(&lock_root_abspath, b->wc_ctx,
- dir_abspath, FALSE,
- b->pool, b->pool));
- SVN_ERR(svn_wc_delete4(b->wc_ctx, abspath, FALSE, TRUE,
- NULL, NULL, /* cancel baton + func */
- NULL, NULL, /* notify baton + func */
- b->pool));
- SVN_ERR(svn_wc__release_write_lock(b->wc_ctx, lock_root_abspath, b->pool));
- return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-wc_exclude(svn_test__sandbox_t *b, const char *path)
-{
- const char *abspath = wc_path(b, path);
- const char *lock_root_abspath;
-
- SVN_ERR(svn_wc__acquire_write_lock(&lock_root_abspath, b->wc_ctx,
- abspath, TRUE,
- b->pool, b->pool));
- SVN_ERR(svn_wc_exclude(b->wc_ctx, abspath,
- NULL, NULL, /* cancel baton + func */
- NULL, NULL, /* notify baton + func */
- b->pool));
- SVN_ERR(svn_wc__release_write_lock(b->wc_ctx, lock_root_abspath, b->pool));
- return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-wc_commit(svn_test__sandbox_t *b, const char *path)
-{
- svn_client_ctx_t *ctx;
- apr_array_header_t *targets = apr_array_make(b->pool, 1,
- sizeof(const char *));
-
- APR_ARRAY_PUSH(targets, const char *) = wc_path(b, path);
- SVN_ERR(svn_client_create_context(&ctx, b->pool));
- return svn_client_commit5(targets, svn_depth_infinity,
- FALSE, FALSE, TRUE, /* keep locks/cl's/use_ops*/
- NULL, NULL, NULL, NULL, ctx, b->pool);
-}
-
-static svn_error_t *
-wc_update(svn_test__sandbox_t *b, const char *path, svn_revnum_t revnum)
-{
- svn_client_ctx_t *ctx;
- apr_array_header_t *result_revs;
- apr_array_header_t *paths = apr_array_make(b->pool, 1,
- sizeof(const char *));
- svn_opt_revision_t revision;
- revision.kind = svn_opt_revision_number;
- revision.value.number = revnum;
-
- APR_ARRAY_PUSH(paths, const char *) = wc_path(b, path);
- SVN_ERR(svn_client_create_context(&ctx, b->pool));
- return svn_client_update4(&result_revs, paths, &revision, svn_depth_infinity,
- TRUE, FALSE, FALSE, FALSE, FALSE,
- ctx, b->pool);
-}
-
-static svn_error_t *
-wc_resolved(svn_test__sandbox_t *b, const char *path)
-{
- svn_client_ctx_t *ctx;
-
- SVN_ERR(svn_client_create_context(&ctx, b->pool));
- return svn_client_resolved(wc_path(b, path), TRUE, ctx, b->pool);
-}
-
-static svn_error_t *
-wc_move(svn_test__sandbox_t *b, const char *src, const char *dst)
-{
- svn_client_ctx_t *ctx;
- apr_array_header_t *paths = apr_array_make(b->pool, 1,
- sizeof(const char *));
-
- SVN_ERR(svn_client_create_context(&ctx, b->pool));
- APR_ARRAY_PUSH(paths, const char *) = wc_path(b, src);
- return svn_client_move6(paths, wc_path(b, dst),
- FALSE, FALSE, NULL, NULL, NULL, ctx, b->pool);
-}
-
-static svn_error_t *
-wc_propset(svn_test__sandbox_t *b,
- const char *name,
- const char *value,
- const char *path)
-{
- svn_client_ctx_t *ctx;
- apr_array_header_t *paths = apr_array_make(b->pool, 1,
- sizeof(const char *));
-
- SVN_ERR(svn_client_create_context(&ctx, b->pool));
- APR_ARRAY_PUSH(paths, const char *) = wc_path(b, path);
- return svn_client_propset_local(name, svn_string_create(value, b->pool),
- paths, svn_depth_empty, TRUE, NULL, ctx,
- b->pool);
-}
-
-/* Create the Greek tree on disk in the WC, and commit it. */
-static svn_error_t *
-add_and_commit_greek_tree(svn_test__sandbox_t *b)
-{
- const char *greek_tree_dirs[8] =
- {
- "A",
- "A/B",
- "A/B/E",
- "A/B/F",
- "A/C",
- "A/D",
- "A/D/G",
- "A/D/H"
- };
- const char *greek_tree_files[12][2] =
- {
- { "iota", "This is the file 'iota'.\n" },
- { "A/mu", "This is the file 'mu'.\n" },
- { "A/B/lambda", "This is the file 'lambda'.\n" },
- { "A/B/E/alpha", "This is the file 'alpha'.\n" },
- { "A/B/E/beta", "This is the file 'beta'.\n" },
- { "A/D/gamma", "This is the file 'gamma'.\n" },
- { "A/D/G/pi", "This is the file 'pi'.\n" },
- { "A/D/G/rho", "This is the file 'rho'.\n" },
- { "A/D/G/tau", "This is the file 'tau'.\n" },
- { "A/D/H/chi", "This is the file 'chi'.\n" },
- { "A/D/H/psi", "This is the file 'psi'.\n" },
- { "A/D/H/omega", "This is the file 'omega'.\n" }
- };
- int i;
-
- for (i = 0; i < 8; i++)
- SVN_ERR(wc_mkdir(b, greek_tree_dirs[i]));
-
- for (i = 0; i < 12; i++)
- {
- file_write(b, greek_tree_files[i][0], greek_tree_files[i][1]);
- SVN_ERR(wc_add(b, greek_tree_files[i][0]));
- }
-
- SVN_ERR(wc_commit(b, ""));
-
- return SVN_NO_ERROR;
-}
-
-
-/* ---------------------------------------------------------------------- */
/* Functions for comparing expected and found WC DB data. */
/* Some of the fields from a NODES table row. */
@@ -341,36 +106,87 @@ typedef struct nodes_row_t {
svn_revnum_t repo_revnum;
const char *repo_relpath;
svn_boolean_t file_external;
+ const char *moved_to;
+ svn_boolean_t moved_here;
+ const char *props; /* comma-separated list of prop names */
} nodes_row_t;
/* Macro for filling in the REPO_* fields of a non-base NODES_ROW_T
* that has no copy-from info. */
-#define NO_COPY_FROM SVN_INVALID_REVNUM, NULL
+#define NO_COPY_FROM SVN_INVALID_REVNUM, NULL, FALSE
+#define MOVED_HERE FALSE, NULL, TRUE
+#define NOT_MOVED FALSE, NULL, FALSE
+
+/* Return a comma-separated list of the prop names in PROPS, in lexically
+ * ascending order, or NULL if PROPS is empty or NULL. (Here, we don't
+ * care about the difference between 'has no props' and 'can't have props',
+ * and we choose to represent both of those as NULL.) */
+static const char *
+props_hash_to_text(apr_hash_t *props, apr_pool_t *pool)
+{
+ apr_array_header_t *props_sorted;
+ svn_stringbuf_t *str;
+ int i;
+
+ if (! props)
+ return NULL;
+
+ str = svn_stringbuf_create_empty(pool);
+ props_sorted = svn_sort__hash(props, svn_sort_compare_items_lexically, pool);
+ for (i = 0; i < props_sorted->nelts; i++)
+ {
+ const svn_sort__item_t *item
+ = &APR_ARRAY_IDX(props_sorted, i, svn_sort__item_t);
+
+ if (str->len)
+ svn_stringbuf_appendbyte(str, ',');
+ svn_stringbuf_appendcstr(str, item->key);
+ }
+ return str->len ? str->data : NULL;
+}
/* Return a human-readable string representing ROW. */
static const char *
print_row(const nodes_row_t *row,
apr_pool_t *result_pool)
{
- const char *file_external_str;
+ const char *file_external_str, *moved_here_str, *moved_to_str, *props;
if (row == NULL)
return "(null)";
+ if (row->moved_to)
+ moved_to_str = apr_psprintf(result_pool, ", moved-to %s", row->moved_to);
+ else
+ moved_to_str = "";
+
+ if (row->moved_here)
+ moved_here_str = ", moved-here";
+ else
+ moved_here_str = "";
+
if (row->file_external)
file_external_str = ", file-external";
else
file_external_str = "";
-
+
+ if (row->props)
+ props = apr_psprintf(result_pool, ", p=(%s)", row->props);
+ else
+ props = "";
+
if (row->repo_revnum == SVN_INVALID_REVNUM)
- return apr_psprintf(result_pool, "%d, %s, %s%s",
+ return apr_psprintf(result_pool, "%d, \"%s\", \"%s\"%s%s%s%s",
row->op_depth, row->local_relpath, row->presence,
- file_external_str);
+ moved_here_str, moved_to_str,
+ file_external_str, props);
else
- return apr_psprintf(result_pool, "%d, %s, %s, from ^/%s@%d%s",
+ return apr_psprintf(result_pool, "%d, \"%s\", \"%s\", %s ^/%s@%d%s%s%s%s",
row->op_depth, row->local_relpath, row->presence,
+ row->op_depth == 0 ? "base" : "copyfrom",
row->repo_relpath, (int)row->repo_revnum,
- file_external_str);
+ moved_here_str, moved_to_str,
+ file_external_str, props);
}
/* A baton to pass through svn_hash_diff() to compare_nodes_rows(). */
@@ -412,7 +228,14 @@ compare_nodes_rows(const void *key, apr_ssize_t klen,
else if (expected->repo_revnum != found->repo_revnum
|| (strcmp_null(expected->repo_relpath, found->repo_relpath) != 0)
|| (strcmp_null(expected->presence, found->presence) != 0)
- || (expected->file_external != found->file_external))
+ || (expected->file_external != found->file_external)
+ || (expected->moved_here != found->moved_here)
+ || (expected->moved_to && !found->moved_to)
+ || (!expected->moved_to && found->moved_to)
+ || (expected->moved_to
+ && strcmp(expected->moved_to, found->moved_to))
+ || (expected->props != NULL
+ && strcmp_null(expected->props, found->props) != 0))
{
b->errors = svn_error_createf(
SVN_ERR_TEST_FAILED, b->errors,
@@ -441,10 +264,13 @@ check_db_rows(svn_test__sandbox_t *b,
int i;
svn_sqlite__stmt_t *stmt;
static const char *const statements[] = {
- "SELECT op_depth, presence, local_relpath, revision, repos_path, "
- " file_external "
- "FROM nodes "
- "WHERE local_relpath = ?1 OR local_relpath LIKE ?2",
+ "SELECT op_depth, nodes.presence, nodes.local_relpath, revision,"
+ " repos_path, file_external, def_local_relpath, moved_to, moved_here,"
+ " properties"
+ " FROM nodes "
+ " LEFT OUTER JOIN externals"
+ " ON nodes.local_relpath = externals.local_relpath"
+ " WHERE nodes.local_relpath = ?1 OR nodes.local_relpath LIKE ?2",
NULL };
#define STMT_SELECT_NODES_INFO 0
@@ -470,6 +296,7 @@ check_db_rows(svn_test__sandbox_t *b,
{
const char *key;
nodes_row_t *row = apr_palloc(b->pool, sizeof(*row));
+ apr_hash_t *props_hash;
row->op_depth = svn_sqlite__column_int(stmt, 0);
row->presence = svn_sqlite__column_text(stmt, 1, b->pool);
@@ -477,6 +304,15 @@ check_db_rows(svn_test__sandbox_t *b,
row->repo_revnum = svn_sqlite__column_revnum(stmt, 3);
row->repo_relpath = svn_sqlite__column_text(stmt, 4, b->pool);
row->file_external = !svn_sqlite__column_is_null(stmt, 5);
+ if (row->file_external && svn_sqlite__column_is_null(stmt, 6))
+ comparison_baton.errors
+ = svn_error_createf(SVN_ERR_TEST_FAILED, comparison_baton.errors,
+ "incomplete {%s}", print_row(row, b->pool));
+ row->moved_to = svn_sqlite__column_text(stmt, 7, b->pool);
+ row->moved_here = svn_sqlite__column_boolean(stmt, 8);
+ SVN_ERR(svn_sqlite__column_properties(&props_hash, stmt, 9,
+ b->pool, b->pool));
+ row->props = props_hash_to_text(props_hash, b->pool);
key = apr_psprintf(b->pool, "%d %s", row->op_depth, row->local_relpath);
apr_hash_set(found_hash, key, APR_HASH_KEY_STRING, row);
@@ -534,22 +370,22 @@ struct copy_subtest_t
static svn_error_t *
wc_wc_copies(svn_test__sandbox_t *b)
{
- SVN_ERR(add_and_commit_greek_tree(b));
+ SVN_ERR(sbox_add_and_commit_greek_tree(b));
/* Create the various kinds of source node which will be copied */
- file_write(b, source_added_file, "New file");
- SVN_ERR(wc_add(b, source_added_file));
- SVN_ERR(wc_mkdir(b, source_added_dir));
- SVN_ERR(wc_mkdir(b, source_added_dir2));
+ sbox_file_write(b, source_added_file, "New file");
+ SVN_ERR(sbox_wc_add(b, source_added_file));
+ SVN_ERR(sbox_wc_mkdir(b, source_added_dir));
+ SVN_ERR(sbox_wc_mkdir(b, source_added_dir2));
- SVN_ERR(wc_copy(b, source_base_file, source_copied_file));
- SVN_ERR(wc_copy(b, source_base_dir, source_copied_dir));
+ SVN_ERR(sbox_wc_copy(b, source_base_file, source_copied_file));
+ SVN_ERR(sbox_wc_copy(b, source_base_dir, source_copied_dir));
/* Delete some nodes so that we can test copying onto these paths */
- SVN_ERR(wc_delete(b, "A/D/gamma"));
- SVN_ERR(wc_delete(b, "A/D/G"));
+ SVN_ERR(sbox_wc_delete(b, "A/D/gamma"));
+ SVN_ERR(sbox_wc_delete(b, "A/D/G"));
/* Test copying various things */
@@ -647,11 +483,7 @@ wc_wc_copies(svn_test__sandbox_t *b)
/* Perform each subtest in turn. */
for (subtest = subtests; subtest->from_path; subtest++)
{
- SVN_ERR(svn_wc_copy3(b->wc_ctx,
- wc_path(b, subtest->from_path),
- wc_path(b, subtest->to_path),
- FALSE /* metadata_only */,
- NULL, NULL, NULL, NULL, b->pool));
+ SVN_ERR(sbox_wc_copy(b, subtest->from_path, subtest->to_path));
SVN_ERR(check_db_rows(b, subtest->to_path, subtest->expected));
}
}
@@ -664,14 +496,14 @@ wc_wc_copies(svn_test__sandbox_t *b)
static svn_error_t *
repo_wc_copies(svn_test__sandbox_t *b)
{
- SVN_ERR(add_and_commit_greek_tree(b));
+ SVN_ERR(sbox_add_and_commit_greek_tree(b));
/* Delete some nodes so that we can test copying onto these paths */
- SVN_ERR(wc_delete(b, "A/B/lambda"));
- SVN_ERR(wc_delete(b, "A/D/gamma"));
- SVN_ERR(wc_delete(b, "A/D/G"));
- SVN_ERR(wc_delete(b, "A/D/H"));
+ SVN_ERR(sbox_wc_delete(b, "A/B/lambda"));
+ SVN_ERR(sbox_wc_delete(b, "A/D/gamma"));
+ SVN_ERR(sbox_wc_delete(b, "A/D/G"));
+ SVN_ERR(sbox_wc_delete(b, "A/D/H"));
/* Test copying various things */
@@ -761,7 +593,7 @@ repo_wc_copies(svn_test__sandbox_t *b)
source.peg_revision = &rev;
APR_ARRAY_PUSH(sources, svn_client_copy_source_t *) = &source;
SVN_ERR(svn_client_copy6(sources,
- wc_path(b, subtest->to_path),
+ sbox_wc_path(b, subtest->to_path),
FALSE, FALSE, FALSE,
NULL, NULL, NULL, ctx, b->pool));
}
@@ -801,7 +633,7 @@ test_reverts(const svn_test_opts_t *opts, apr_pool_t *pool)
/* Implement revert tests below, now that we have a wc with lots of
copy-changes */
- SVN_ERR(wc_revert(&b, "A/B/D-added", svn_depth_infinity));
+ SVN_ERR(sbox_wc_revert(&b, "A/B/D-added", svn_depth_infinity));
SVN_ERR(check_db_rows(&b, "A/B/D-added", no_node_rows_expected));
return SVN_NO_ERROR;
@@ -813,10 +645,10 @@ test_deletes(const svn_test_opts_t *opts, apr_pool_t *pool)
svn_test__sandbox_t b;
SVN_ERR(svn_test__sandbox_create(&b, "deletes", opts, pool));
- SVN_ERR(add_and_commit_greek_tree(&b));
+ SVN_ERR(sbox_add_and_commit_greek_tree(&b));
- file_write(&b, "A/B/E/new-file", "New file");
- SVN_ERR(wc_add(&b, "A/B/E/new-file"));
+ sbox_file_write(&b, "A/B/E/new-file", "New file");
+ SVN_ERR(sbox_wc_add(&b, "A/B/E/new-file"));
{
nodes_row_t rows[] = {
{ 4, "A/B/E/new-file", "normal", NO_COPY_FROM },
@@ -825,7 +657,7 @@ test_deletes(const svn_test_opts_t *opts, apr_pool_t *pool)
SVN_ERR(check_db_rows(&b, "A/B/E/new-file", rows));
}
- SVN_ERR(wc_delete(&b, "A/B/E/alpha"));
+ SVN_ERR(sbox_wc_delete(&b, "A/B/E/alpha"));
{
nodes_row_t rows[] = {
{ 0, "A/B/E/alpha", "normal", 1, "A/B/E/alpha" },
@@ -835,7 +667,7 @@ test_deletes(const svn_test_opts_t *opts, apr_pool_t *pool)
SVN_ERR(check_db_rows(&b, "A/B/E/alpha", rows));
}
- SVN_ERR(wc_delete(&b, "A/B/F"));
+ SVN_ERR(sbox_wc_delete(&b, "A/B/F"));
{
nodes_row_t rows[] = {
{ 0, "A/B/F", "normal", 1, "A/B/F" },
@@ -845,7 +677,7 @@ test_deletes(const svn_test_opts_t *opts, apr_pool_t *pool)
SVN_ERR(check_db_rows(&b, "A/B/F", rows));
}
- SVN_ERR(wc_delete(&b, "A/B"));
+ SVN_ERR(sbox_wc_delete(&b, "A/B"));
{
nodes_row_t rows[] = {
{ 0, "A/B", "normal", 1, "A/B", },
@@ -874,11 +706,11 @@ test_adds(const svn_test_opts_t *opts, apr_pool_t *pool)
svn_test__sandbox_t b;
SVN_ERR(svn_test__sandbox_create(&b, "adds", opts, pool));
- SVN_ERR(add_and_commit_greek_tree(&b));
+ SVN_ERR(sbox_add_and_commit_greek_tree(&b));
/* add file */
- file_write(&b, "new-file", "New file");
- SVN_ERR(wc_add(&b, "new-file"));
+ sbox_file_write(&b, "new-file", "New file");
+ SVN_ERR(sbox_wc_add(&b, "new-file"));
{
nodes_row_t rows[] = {
{ 1, "new-file", "normal", NO_COPY_FROM },
@@ -887,8 +719,8 @@ test_adds(const svn_test_opts_t *opts, apr_pool_t *pool)
}
/* add dir */
- SVN_ERR(wc_mkdir(&b, "new-dir"));
- SVN_ERR(wc_mkdir(&b, "new-dir/D2"));
+ SVN_ERR(sbox_wc_mkdir(&b, "new-dir"));
+ SVN_ERR(sbox_wc_mkdir(&b, "new-dir/D2"));
{
nodes_row_t rows[] = {
{ 1, "new-dir", "normal", NO_COPY_FROM },
@@ -898,9 +730,9 @@ test_adds(const svn_test_opts_t *opts, apr_pool_t *pool)
}
/* replace file */
- SVN_ERR(wc_delete(&b, "iota"));
- file_write(&b, "iota", "New iota file");
- SVN_ERR(wc_add(&b, "iota"));
+ SVN_ERR(sbox_wc_delete(&b, "iota"));
+ sbox_file_write(&b, "iota", "New iota file");
+ SVN_ERR(sbox_wc_add(&b, "iota"));
{
nodes_row_t rows[] = {
{ 0, "iota", "normal", 1, "iota" },
@@ -910,9 +742,9 @@ test_adds(const svn_test_opts_t *opts, apr_pool_t *pool)
}
/* replace dir */
- SVN_ERR(wc_delete(&b, "A/B/E"));
- SVN_ERR(wc_mkdir(&b, "A/B/E"));
- SVN_ERR(wc_mkdir(&b, "A/B/E/D2"));
+ SVN_ERR(sbox_wc_delete(&b, "A/B/E"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/E"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/E/D2"));
{
nodes_row_t rows[] = {
{ 0, "A/B/E", "normal", 1, "A/B/E" },
@@ -935,12 +767,12 @@ test_adds_change_kind(const svn_test_opts_t *opts, apr_pool_t *pool)
svn_test__sandbox_t b;
SVN_ERR(svn_test__sandbox_create(&b, "adds", opts, pool));
- SVN_ERR(add_and_commit_greek_tree(&b));
+ SVN_ERR(sbox_add_and_commit_greek_tree(&b));
/* replace dir with file */
- SVN_ERR(wc_delete(&b, "A/B/E"));
- file_write(&b, "A/B/E", "New E file");
- SVN_ERR(wc_add(&b, "A/B/E"));
+ SVN_ERR(sbox_wc_delete(&b, "A/B/E"));
+ sbox_file_write(&b, "A/B/E", "New E file");
+ SVN_ERR(sbox_wc_add(&b, "A/B/E"));
{
nodes_row_t rows[] = {
{ 0, "A/B/E", "normal", 1, "A/B/E" },
@@ -954,9 +786,9 @@ test_adds_change_kind(const svn_test_opts_t *opts, apr_pool_t *pool)
}
/* replace file with dir */
- SVN_ERR(wc_delete(&b, "iota"));
- SVN_ERR(wc_mkdir(&b, "iota"));
- SVN_ERR(wc_mkdir(&b, "iota/D2"));
+ SVN_ERR(sbox_wc_delete(&b, "iota"));
+ SVN_ERR(sbox_wc_mkdir(&b, "iota"));
+ SVN_ERR(sbox_wc_mkdir(&b, "iota/D2"));
{
nodes_row_t rows[] = {
{ 0, "iota", "normal", 1, "iota" },
@@ -976,10 +808,10 @@ test_delete_of_copies(const svn_test_opts_t *opts, apr_pool_t *pool)
svn_test__sandbox_t b;
SVN_ERR(svn_test__sandbox_create(&b, "deletes_of_copies", opts, pool));
- SVN_ERR(add_and_commit_greek_tree(&b));
- SVN_ERR(wc_copy(&b, "A/B", "A/B-copied"));
+ SVN_ERR(sbox_add_and_commit_greek_tree(&b));
+ SVN_ERR(sbox_wc_copy(&b, "A/B", "A/B-copied"));
- SVN_ERR(wc_delete(&b, "A/B-copied/E"));
+ SVN_ERR(sbox_wc_delete(&b, "A/B-copied/E"));
{
nodes_row_t rows[] = {
{ 2, "A/B-copied/E", "normal", 1, "A/B/E" },
@@ -993,7 +825,7 @@ test_delete_of_copies(const svn_test_opts_t *opts, apr_pool_t *pool)
SVN_ERR(check_db_rows(&b, "A/B-copied/E", rows));
}
- SVN_ERR(wc_copy(&b, "A/D/G", "A/B-copied/E"));
+ SVN_ERR(sbox_wc_copy(&b, "A/D/G", "A/B-copied/E"));
{
nodes_row_t rows[] = {
{ 2, "A/B-copied/E", "normal", 1, "A/B/E" },
@@ -1010,7 +842,7 @@ test_delete_of_copies(const svn_test_opts_t *opts, apr_pool_t *pool)
SVN_ERR(check_db_rows(&b, "A/B-copied/E", rows));
}
- SVN_ERR(wc_delete(&b, "A/B-copied/E/rho"));
+ SVN_ERR(sbox_wc_delete(&b, "A/B-copied/E/rho"));
{
nodes_row_t rows[] = {
{ 2, "A/B-copied/E", "normal", 1, "A/B/E" },
@@ -1028,7 +860,7 @@ test_delete_of_copies(const svn_test_opts_t *opts, apr_pool_t *pool)
SVN_ERR(check_db_rows(&b, "A/B-copied/E", rows));
}
- SVN_ERR(wc_delete(&b, "A/B-copied/E"));
+ SVN_ERR(sbox_wc_delete(&b, "A/B-copied/E"));
{
nodes_row_t rows[] = {
{ 2, "A/B-copied/E", "normal", 1, "A/B/E" },
@@ -1042,9 +874,9 @@ test_delete_of_copies(const svn_test_opts_t *opts, apr_pool_t *pool)
SVN_ERR(check_db_rows(&b, "A/B-copied/E", rows));
}
- SVN_ERR(wc_copy(&b, "A/B", "A/B-copied/E"));
+ SVN_ERR(sbox_wc_copy(&b, "A/B", "A/B-copied/E"));
- SVN_ERR(wc_delete(&b, "A/B-copied/E/F"));
+ SVN_ERR(sbox_wc_delete(&b, "A/B-copied/E/F"));
{
nodes_row_t rows[] = {
{ 3, "A/B-copied/E/F", "normal", 1, "A/B/F" },
@@ -1054,7 +886,7 @@ test_delete_of_copies(const svn_test_opts_t *opts, apr_pool_t *pool)
SVN_ERR(check_db_rows(&b, "A/B-copied/E/F", rows));
}
- SVN_ERR(wc_delete(&b, "A/B-copied"));
+ SVN_ERR(sbox_wc_delete(&b, "A/B-copied"));
{
nodes_row_t rows[] = { { 0 } };
SVN_ERR(check_db_rows(&b, "A/B-copied", rows));
@@ -1070,11 +902,11 @@ test_delete_with_base(const svn_test_opts_t *opts, apr_pool_t *pool)
svn_test__sandbox_t b;
SVN_ERR(svn_test__sandbox_create(&b, "deletes_with_base", opts, pool));
- SVN_ERR(add_and_commit_greek_tree(&b));
- SVN_ERR(wc_delete(&b, "A/B/E/beta"));
- SVN_ERR(wc_commit(&b, ""));
+ SVN_ERR(sbox_add_and_commit_greek_tree(&b));
+ SVN_ERR(sbox_wc_delete(&b, "A/B/E/beta"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
- SVN_ERR(wc_delete(&b, "A/B/E"));
+ SVN_ERR(sbox_wc_delete(&b, "A/B/E"));
{
nodes_row_t rows[] = {
{ 0, "A/B/E", "normal", 1, "A/B/E"},
@@ -1087,9 +919,9 @@ test_delete_with_base(const svn_test_opts_t *opts, apr_pool_t *pool)
SVN_ERR(check_db_rows(&b, "A/B/E", rows));
}
- SVN_ERR(wc_copy(&b, "A/B/F", "A/B/E"));
- SVN_ERR(wc_copy(&b, "A/mu", "A/B/E/alpha"));
- SVN_ERR(wc_copy(&b, "A/mu", "A/B/E/beta"));
+ SVN_ERR(sbox_wc_copy(&b, "A/B/F", "A/B/E"));
+ SVN_ERR(sbox_wc_copy(&b, "A/mu", "A/B/E/alpha"));
+ SVN_ERR(sbox_wc_copy(&b, "A/mu", "A/B/E/beta"));
{
nodes_row_t rows[] = {
{ 0, "A/B/E", "normal", 1, "A/B/E"},
@@ -1105,7 +937,7 @@ test_delete_with_base(const svn_test_opts_t *opts, apr_pool_t *pool)
SVN_ERR(check_db_rows(&b, "A/B/E", rows));
}
- SVN_ERR(wc_delete(&b, "A/B/E"));
+ SVN_ERR(sbox_wc_delete(&b, "A/B/E"));
{
nodes_row_t rows[] = {
{ 0, "A/B/E", "normal", 1, "A/B/E"},
@@ -1137,16 +969,16 @@ test_delete_with_update(const svn_test_opts_t *opts, apr_pool_t *pool)
svn_test__sandbox_t b;
SVN_ERR(svn_test__sandbox_create(&b, "delete_with_update", opts, pool));
- SVN_ERR(wc_mkdir(&b, "A"));
- SVN_ERR(wc_commit(&b, ""));
- SVN_ERR(wc_mkdir(&b, "A/B"));
- SVN_ERR(wc_mkdir(&b, "A/B/C"));
- SVN_ERR(wc_commit(&b, ""));
- SVN_ERR(wc_update(&b, "", 1));
-
- SVN_ERR(wc_delete(&b, "A"));
- SVN_ERR(wc_mkdir(&b, "A"));
- SVN_ERR(wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ SVN_ERR(sbox_wc_delete(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
{
nodes_row_t rows[] = {
{ 0, "A", "normal", 1, "A"},
@@ -1156,7 +988,7 @@ test_delete_with_update(const svn_test_opts_t *opts, apr_pool_t *pool)
};
SVN_ERR(check_db_rows(&b, "A", rows));
}
- SVN_ERR(wc_update(&b, "", 2));
+ SVN_ERR(sbox_wc_update(&b, "", 2));
{
nodes_row_t rows[] = {
{ 0, "A", "normal", 2, "A"},
@@ -1170,8 +1002,8 @@ test_delete_with_update(const svn_test_opts_t *opts, apr_pool_t *pool)
};
SVN_ERR(check_db_rows(&b, "A", rows));
}
- SVN_ERR(wc_resolved(&b, ""));
- SVN_ERR(wc_update(&b, "", 1));
+ SVN_ERR(sbox_wc_resolved(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
{
nodes_row_t rows[] = {
{ 0, "A", "normal", 1, "A"},
@@ -1213,9 +1045,9 @@ insert_dirs(svn_test__sandbox_t *b,
if (nodes->local_relpath[0])
{
SVN_ERR(svn_sqlite__get_statement(&stmt, sdb, 2));
- SVN_ERR(svn_sqlite__bindf(stmt, "sissrs",
+ SVN_ERR(svn_sqlite__bindf(stmt, "sdssrs",
nodes->local_relpath,
- (apr_int64_t)nodes->op_depth,
+ nodes->op_depth,
nodes->presence,
nodes->repo_relpath,
nodes->repo_revnum,
@@ -1225,9 +1057,9 @@ insert_dirs(svn_test__sandbox_t *b,
else
{
SVN_ERR(svn_sqlite__get_statement(&stmt, sdb, 1));
- SVN_ERR(svn_sqlite__bindf(stmt, "sissr",
+ SVN_ERR(svn_sqlite__bindf(stmt, "sdssr",
nodes->local_relpath,
- (apr_int64_t)nodes->op_depth,
+ nodes->op_depth,
nodes->presence,
nodes->repo_relpath,
nodes->repo_revnum));
@@ -1258,7 +1090,7 @@ base_dir_insert_remove(svn_test__sandbox_t *b,
nodes_row_t *added)
{
nodes_row_t *after;
- const char *dir_abspath = wc_path(b, local_relpath);
+ const char *dir_abspath = sbox_wc_path(b, local_relpath);
int i;
apr_int64_t num_before = count_rows(before), num_added = count_rows(added);
@@ -1270,10 +1102,10 @@ base_dir_insert_remove(svn_test__sandbox_t *b,
"not-even-a-uuid", revision,
apr_hash_make(b->pool), revision,
0, NULL, NULL, svn_depth_infinity,
- NULL, NULL, FALSE, NULL, NULL,
+ NULL, NULL, FALSE, NULL, NULL, NULL,
b->pool));
- after = apr_palloc(b->pool, sizeof(*after) * (num_before + num_added + 1));
+ after = apr_palloc(b->pool, sizeof(*after) * (apr_size_t)(num_before + num_added + 1));
for (i = 0; i < num_before; ++i)
after[i] = before[i];
for (i = 0; i < num_added; ++i)
@@ -1282,7 +1114,14 @@ base_dir_insert_remove(svn_test__sandbox_t *b,
SVN_ERR(check_db_rows(b, "", after));
- SVN_ERR(svn_wc__db_base_remove(b->wc_ctx->db, dir_abspath, b->pool));
+ SVN_ERR(svn_wc__db_base_remove(b->wc_ctx->db, dir_abspath,
+ FALSE /* keep_as_Working */,
+ FALSE /* queue_deletes */,
+ FALSE /* remove_locks */,
+ SVN_INVALID_REVNUM,
+ NULL, NULL, b->pool));
+ SVN_ERR(svn_wc__wq_run(b->wc_ctx->db, dir_abspath,
+ NULL, NULL, b->pool));
SVN_ERR(check_db_rows(b, "", before));
@@ -1598,7 +1437,7 @@ temp_op_make_copy(svn_test__sandbox_t *b,
SVN_ERR(insert_dirs(b, before));
- SVN_ERR(svn_wc__db_temp_op_make_copy(b->wc_ctx->db, dir_abspath, b->pool));
+ SVN_ERR(svn_wc__db_op_make_copy(b->wc_ctx->db, dir_abspath, NULL, NULL, b->pool));
SVN_ERR(check_db_rows(b, "", after));
@@ -1698,39 +1537,39 @@ test_wc_move(const svn_test_opts_t *opts, apr_pool_t *pool)
svn_test__sandbox_t b;
SVN_ERR(svn_test__sandbox_create(&b, "wc_move", opts, pool));
- SVN_ERR(wc_mkdir(&b, "A"));
- SVN_ERR(wc_mkdir(&b, "A/B"));
- SVN_ERR(wc_mkdir(&b, "A/B/C"));
- SVN_ERR(wc_commit(&b, ""));
- SVN_ERR(wc_update(&b, "", 1));
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
- SVN_ERR(wc_move(&b, "A/B/C", "A/B/C-move"));
+ SVN_ERR(sbox_wc_move(&b, "A/B/C", "A/B/C-move"));
{
nodes_row_t rows[] = {
{ 0, "", "normal", 1, "" },
{ 0, "A", "normal", 1, "A" },
{ 0, "A/B", "normal", 1, "A/B" },
- { 0, "A/B/C", "normal", 1, "A/B/C" },
- { 3, "A/B/C", "base-deleted", NO_COPY_FROM },
- { 3, "A/B/C-move", "normal", 1, "A/B/C" },
+ { 0, "A/B/C", "normal", 1, "A/B/C"},
+ { 3, "A/B/C", "base-deleted", NO_COPY_FROM, "A/B/C-move" },
+ { 3, "A/B/C-move", "normal", 1, "A/B/C", MOVED_HERE },
{ 0 }
};
SVN_ERR(check_db_rows(&b, "", rows));
}
- SVN_ERR(wc_move(&b, "A/B", "A/B-move"));
+ SVN_ERR(sbox_wc_move(&b, "A/B", "A/B-move"));
{
nodes_row_t rows[] = {
{ 0, "", "normal", 1, "" },
{ 0, "A", "normal", 1, "A" },
- { 0, "A/B", "normal", 1, "A/B" },
- { 0, "A/B/C", "normal", 1, "A/B/C" },
- { 2, "A/B", "base-deleted", NO_COPY_FROM },
- { 2, "A/B/C", "base-deleted", NO_COPY_FROM },
- { 2, "A/B-move", "normal", 1, "A/B" },
- { 2, "A/B-move/C", "normal", 1, "A/B/C" },
- { 3, "A/B-move/C", "base-deleted", NO_COPY_FROM },
- { 3, "A/B-move/C-move", "normal", 1, "A/B/C" },
+ { 0, "A/B", "normal", 1, "A/B"},
+ { 0, "A/B/C", "normal", 1, "A/B/C"},
+ { 2, "A/B", "base-deleted", NO_COPY_FROM, "A/B-move" },
+ { 2, "A/B/C", "base-deleted", NO_COPY_FROM},
+ { 2, "A/B-move", "normal", 1, "A/B", MOVED_HERE },
+ { 2, "A/B-move/C", "normal", 1, "A/B/C", MOVED_HERE },
+ { 3, "A/B-move/C", "base-deleted", NO_COPY_FROM, "A/B-move/C-move" },
+ { 3, "A/B-move/C-move", "normal", 1, "A/B/C", MOVED_HERE },
{ 0 }
};
SVN_ERR(check_db_rows(&b, "", rows));
@@ -1745,14 +1584,14 @@ test_mixed_rev_copy(const svn_test_opts_t *opts, apr_pool_t *pool)
svn_test__sandbox_t b;
SVN_ERR(svn_test__sandbox_create(&b, "mixed_rev_copy", opts, pool));
- SVN_ERR(wc_mkdir(&b, "A"));
- SVN_ERR(wc_commit(&b, ""));
- SVN_ERR(wc_mkdir(&b, "A/B"));
- SVN_ERR(wc_commit(&b, ""));
- SVN_ERR(wc_mkdir(&b, "A/B/C"));
- SVN_ERR(wc_commit(&b, ""));
-
- SVN_ERR(wc_copy(&b, "A", "X"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+
+ SVN_ERR(sbox_wc_copy(&b, "A", "X"));
{
nodes_row_t rows[] = {
{ 1, "X", "normal", 1, "A" },
@@ -1765,7 +1604,7 @@ test_mixed_rev_copy(const svn_test_opts_t *opts, apr_pool_t *pool)
SVN_ERR(check_db_rows(&b, "X", rows));
}
- SVN_ERR(wc_copy(&b, "A/B", "X/Y"));
+ SVN_ERR(sbox_wc_copy(&b, "A/B", "X/Y"));
{
nodes_row_t rows[] = {
{ 1, "X", "normal", 1, "A" },
@@ -1781,7 +1620,7 @@ test_mixed_rev_copy(const svn_test_opts_t *opts, apr_pool_t *pool)
SVN_ERR(check_db_rows(&b, "X", rows));
}
- SVN_ERR(wc_delete(&b, "X/B/C"));
+ SVN_ERR(sbox_wc_delete(&b, "X/B/C"));
{
nodes_row_t rows[] = {
{ 1, "X", "normal", 1, "A" },
@@ -1796,8 +1635,8 @@ test_mixed_rev_copy(const svn_test_opts_t *opts, apr_pool_t *pool)
SVN_ERR(check_db_rows(&b, "X", rows));
}
- SVN_ERR(wc_delete(&b, "X"));
- SVN_ERR(wc_update(&b, "A/B/C", 0));
+ SVN_ERR(sbox_wc_delete(&b, "X"));
+ SVN_ERR(sbox_wc_update(&b, "A/B/C", 0));
{
nodes_row_t rows[] = {
{ 0, "", "normal", 0, "" },
@@ -1809,7 +1648,7 @@ test_mixed_rev_copy(const svn_test_opts_t *opts, apr_pool_t *pool)
SVN_ERR(check_db_rows(&b, "", rows));
}
- SVN_ERR(wc_copy(&b, "A", "X"));
+ SVN_ERR(sbox_wc_copy(&b, "A", "X"));
{
nodes_row_t rows[] = {
{ 1, "X", "normal", 1, "A" },
@@ -1830,23 +1669,23 @@ test_delete_of_replace(const svn_test_opts_t *opts, apr_pool_t *pool)
svn_test__sandbox_t b;
SVN_ERR(svn_test__sandbox_create(&b, "delete_of_replace", opts, pool));
- SVN_ERR(wc_mkdir(&b, "A"));
- SVN_ERR(wc_mkdir(&b, "A/B"));
- SVN_ERR(wc_mkdir(&b, "A/B/C"));
- SVN_ERR(wc_mkdir(&b, "A/B/C/F"));
- SVN_ERR(wc_mkdir(&b, "A/B/C/F/K"));
- SVN_ERR(wc_mkdir(&b, "A/B/C/G"));
- SVN_ERR(wc_mkdir(&b, "A/B/C/G/K"));
- SVN_ERR(wc_commit(&b, ""));
- SVN_ERR(wc_update(&b, "", 1));
-
- SVN_ERR(wc_copy(&b, "A", "X"));
- SVN_ERR(wc_move(&b, "X/B/C/F", "X/B/C/H"));
- SVN_ERR(wc_commit(&b, ""));
- SVN_ERR(wc_update(&b, "", 2));
-
- SVN_ERR(wc_delete(&b, "A/B"));
- SVN_ERR(wc_copy(&b, "X/B", "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C/F"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C/F/K"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C/G"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C/G/K"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ SVN_ERR(sbox_wc_copy(&b, "A", "X"));
+ SVN_ERR(sbox_wc_move(&b, "X/B/C/F", "X/B/C/H"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 2));
+
+ SVN_ERR(sbox_wc_delete(&b, "A/B"));
+ SVN_ERR(sbox_wc_copy(&b, "X/B", "A/B"));
{
nodes_row_t rows[] = {
{ 0, "A", "normal", 2, "A" },
@@ -1869,7 +1708,7 @@ test_delete_of_replace(const svn_test_opts_t *opts, apr_pool_t *pool)
SVN_ERR(check_db_rows(&b, "A", rows));
}
- SVN_ERR(wc_delete(&b, "A/B"));
+ SVN_ERR(sbox_wc_delete(&b, "A/B"));
{
nodes_row_t rows[] = {
{ 0, "A", "normal", 2, "A" },
@@ -1899,25 +1738,25 @@ test_del_replace_not_present(const svn_test_opts_t *opts, apr_pool_t *pool)
svn_test__sandbox_t b;
SVN_ERR(svn_test__sandbox_create(&b, "del_replace_not_present", opts, pool));
- SVN_ERR(wc_mkdir(&b, "A"));
- SVN_ERR(wc_mkdir(&b, "A/B"));
- SVN_ERR(wc_mkdir(&b, "A/B/X"));
- SVN_ERR(wc_mkdir(&b, "A/B/Y"));
- SVN_ERR(wc_mkdir(&b, "A/B/Z"));
- SVN_ERR(wc_commit(&b, ""));
-
- SVN_ERR(wc_copy(&b, "A", "X"));
- SVN_ERR(wc_mkdir(&b, "X/B/W"));
- SVN_ERR(wc_commit(&b, ""));
-
- SVN_ERR(wc_update(&b, "", 2));
- SVN_ERR(wc_update(&b, "A/B/X", 0));
- SVN_ERR(wc_update(&b, "A/B/Y", 0));
- SVN_ERR(wc_update(&b, "X/B/W", 0));
- SVN_ERR(wc_update(&b, "X/B/Y", 0));
- SVN_ERR(wc_update(&b, "X/B/Z", 0));
-
- SVN_ERR(wc_delete(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/X"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/Y"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/Z"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+
+ SVN_ERR(sbox_wc_copy(&b, "A", "X"));
+ SVN_ERR(sbox_wc_mkdir(&b, "X/B/W"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+
+ SVN_ERR(sbox_wc_update(&b, "", 2));
+ SVN_ERR(sbox_wc_update(&b, "A/B/X", 0));
+ SVN_ERR(sbox_wc_update(&b, "A/B/Y", 0));
+ SVN_ERR(sbox_wc_update(&b, "X/B/W", 0));
+ SVN_ERR(sbox_wc_update(&b, "X/B/Y", 0));
+ SVN_ERR(sbox_wc_update(&b, "X/B/Z", 0));
+
+ SVN_ERR(sbox_wc_delete(&b, "A"));
{
nodes_row_t rows[] = {
{ 0, "A", "normal", 2, "A" },
@@ -1933,7 +1772,7 @@ test_del_replace_not_present(const svn_test_opts_t *opts, apr_pool_t *pool)
SVN_ERR(check_db_rows(&b, "A", rows));
}
- SVN_ERR(wc_copy(&b, "X", "A"));
+ SVN_ERR(sbox_wc_copy(&b, "X", "A"));
{
nodes_row_t rows[] = {
{ 0, "A", "normal", 2, "A" },
@@ -1952,7 +1791,7 @@ test_del_replace_not_present(const svn_test_opts_t *opts, apr_pool_t *pool)
SVN_ERR(check_db_rows(&b, "A", rows));
}
- SVN_ERR(wc_delete(&b, "A"));
+ SVN_ERR(sbox_wc_delete(&b, "A"));
{
nodes_row_t rows[] = {
{ 0, "A", "normal", 2, "A" },
@@ -2091,7 +1930,7 @@ revert(svn_test__sandbox_t *b,
actual_row_t *before_actual,
actual_row_t *after_actual)
{
- const char *local_abspath = wc_path(b, local_relpath);
+ const char *local_abspath = sbox_wc_path(b, local_relpath);
svn_error_t *err;
if (!before_actual)
@@ -2202,12 +2041,10 @@ test_op_revert(const svn_test_opts_t *opts, apr_pool_t *pool)
before, before, before_actual4, after_actual4));
err = revert(&b, "A/B", svn_depth_empty,
before, before, common_actual5, common_actual5);
- SVN_TEST_ASSERT(err && err->apr_err == SVN_ERR_WC_INVALID_OPERATION_DEPTH);
- svn_error_clear(err);
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_WC_INVALID_OPERATION_DEPTH);
err = revert(&b, "A/B/C", svn_depth_empty,
before, before, common_actual6, common_actual6);
- SVN_TEST_ASSERT(err && err->apr_err == SVN_ERR_WC_INVALID_OPERATION_DEPTH);
- svn_error_clear(err);
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_WC_INVALID_OPERATION_DEPTH);
}
{
@@ -2260,30 +2097,24 @@ test_op_revert(const svn_test_opts_t *opts, apr_pool_t *pool)
err = revert(&b, "A/B", svn_depth_empty,
common, common, NULL, NULL);
- SVN_TEST_ASSERT(err && err->apr_err == SVN_ERR_WC_INVALID_OPERATION_DEPTH);
- svn_error_clear(err);
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_WC_INVALID_OPERATION_DEPTH);
err = revert(&b, "A/B", svn_depth_empty,
common, common, common_actual, common_actual);
- SVN_TEST_ASSERT(err && err->apr_err == SVN_ERR_WC_INVALID_OPERATION_DEPTH);
- svn_error_clear(err);
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_WC_INVALID_OPERATION_DEPTH);
err = revert(&b, "P", svn_depth_empty,
common, common, NULL, NULL);
- SVN_TEST_ASSERT(err && err->apr_err == SVN_ERR_WC_INVALID_OPERATION_DEPTH);
- svn_error_clear(err);
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_WC_INVALID_OPERATION_DEPTH);
err = revert(&b, "P", svn_depth_empty,
common, common, common_actual, common_actual);
- SVN_TEST_ASSERT(err && err->apr_err == SVN_ERR_WC_INVALID_OPERATION_DEPTH);
- svn_error_clear(err);
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_WC_INVALID_OPERATION_DEPTH);
err = revert(&b, "X", svn_depth_empty,
common, common, NULL, NULL);
- SVN_TEST_ASSERT(err && err->apr_err == SVN_ERR_WC_INVALID_OPERATION_DEPTH);
- svn_error_clear(err);
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_WC_INVALID_OPERATION_DEPTH);
err = revert(&b, "X", svn_depth_empty,
common, common, common_actual, common_actual);
- SVN_TEST_ASSERT(err && err->apr_err == SVN_ERR_WC_INVALID_OPERATION_DEPTH);
- svn_error_clear(err);
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_WC_INVALID_OPERATION_DEPTH);
}
{
@@ -2484,8 +2315,7 @@ test_op_revert(const svn_test_opts_t *opts, apr_pool_t *pool)
};
err = revert(&b, "A", svn_depth_empty,
common, common, NULL, NULL);
- SVN_TEST_ASSERT(err && err->apr_err == SVN_ERR_WC_INVALID_OPERATION_DEPTH);
- svn_error_clear(err);
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_WC_INVALID_OPERATION_DEPTH);
}
{
@@ -2751,27 +2581,27 @@ test_children_of_replaced_dir(const svn_test_opts_t *opts, apr_pool_t *pool)
A_abspath = svn_dirent_join(b.wc_abspath, "A", pool);
/* Set up the base state as revision 1. */
- SVN_ERR(wc_mkdir(&b, "A"));
- SVN_ERR(wc_mkdir(&b, "A/F"));
- SVN_ERR(wc_mkdir(&b, "A/G"));
- SVN_ERR(wc_mkdir(&b, "A/H"));
- SVN_ERR(wc_mkdir(&b, "A/L"));
- SVN_ERR(wc_mkdir(&b, "X"));
- SVN_ERR(wc_mkdir(&b, "X/G"));
- SVN_ERR(wc_mkdir(&b, "X/H"));
- SVN_ERR(wc_mkdir(&b, "X/I"));
- SVN_ERR(wc_mkdir(&b, "X/K"));
- SVN_ERR(wc_commit(&b, ""));
- SVN_ERR(wc_update(&b, "", 1));
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/F"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/G"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/H"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/L"));
+ SVN_ERR(sbox_wc_mkdir(&b, "X"));
+ SVN_ERR(sbox_wc_mkdir(&b, "X/G"));
+ SVN_ERR(sbox_wc_mkdir(&b, "X/H"));
+ SVN_ERR(sbox_wc_mkdir(&b, "X/I"));
+ SVN_ERR(sbox_wc_mkdir(&b, "X/K"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
/* Replace A with a copy of X. */
- SVN_ERR(wc_delete(&b, "A"));
- SVN_ERR(wc_copy(&b, "X", "A"));
+ SVN_ERR(sbox_wc_delete(&b, "A"));
+ SVN_ERR(sbox_wc_copy(&b, "X", "A"));
/* Make other local mods. */
- SVN_ERR(wc_delete(&b, "A/G"));
- SVN_ERR(wc_mkdir(&b, "A/J"));
- SVN_ERR(wc_mkdir(&b, "A/L"));
+ SVN_ERR(sbox_wc_delete(&b, "A/G"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/J"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/L"));
/* Test several variants of "list the children of 'A'". */
@@ -2819,15 +2649,17 @@ do_delete(svn_test__sandbox_t *b,
actual_row_t *actual_before,
actual_row_t *actual_after)
{
- const char *local_abspath = wc_path(b, local_relpath);
+ const char *local_abspath = sbox_wc_path(b, local_relpath);
SVN_ERR(insert_dirs(b, before));
SVN_ERR(insert_actual(b, actual_before));
SVN_ERR(check_db_rows(b, "", before));
SVN_ERR(check_db_actual(b, actual_before));
- SVN_ERR(svn_wc__db_op_delete(b->wc_ctx->db, local_abspath,
- NULL, NULL /* notification */,
+ SVN_ERR(svn_wc__db_op_delete(b->wc_ctx->db, local_abspath, NULL,
+ TRUE /* delete_dir_externals */,
+ NULL /* conflict */, NULL /* work_item */,
NULL, NULL /* cancellation */,
+ NULL, NULL /* notification */,
b->pool));
SVN_ERR(check_db_rows(b, "", after));
SVN_ERR(check_db_actual(b, actual_after));
@@ -3069,13 +2901,13 @@ test_child_replace_with_same_origin(const svn_test_opts_t *opts,
SVN_ERR(svn_test__sandbox_create(&b, "child_replace_with_same", opts, pool));
/* Set up the base state as revision 1. */
- SVN_ERR(wc_mkdir(&b, "A"));
- SVN_ERR(wc_mkdir(&b, "A/B"));
- SVN_ERR(wc_mkdir(&b, "A/B/C"));
- SVN_ERR(wc_commit(&b, ""));
- SVN_ERR(wc_update(&b, "", 1));
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
- SVN_ERR(wc_copy(&b, "A", "X"));
+ SVN_ERR(sbox_wc_copy(&b, "A", "X"));
{
nodes_row_t rows[] = {
@@ -3087,7 +2919,7 @@ test_child_replace_with_same_origin(const svn_test_opts_t *opts,
SVN_ERR(check_db_rows(&b, "X", rows));
}
- SVN_ERR(wc_delete(&b, "X/B"));
+ SVN_ERR(sbox_wc_delete(&b, "X/B"));
{
nodes_row_t rows[] = {
{1, "X", "normal", 1, "A"},
@@ -3102,7 +2934,7 @@ test_child_replace_with_same_origin(const svn_test_opts_t *opts,
SVN_ERR(check_db_rows(&b, "X", rows));
}
- SVN_ERR(wc_copy(&b, "A/B", "X/B"));
+ SVN_ERR(sbox_wc_copy(&b, "A/B", "X/B"));
{
/* The revisions match what was here, so for an optimal commit
this should have exactly the same behavior as reverting X/B.
@@ -3138,38 +2970,38 @@ test_shadowed_update(const svn_test_opts_t *opts, apr_pool_t *pool)
SVN_ERR(svn_test__sandbox_create(&b, "shadowed_update", opts, pool));
/* Set up the base state as revision 1. */
- file_write(&b, "iota", "This is iota");
- SVN_ERR(wc_add(&b, "iota"));
- SVN_ERR(wc_commit(&b, ""));
+ sbox_file_write(&b, "iota", "This is iota");
+ SVN_ERR(sbox_wc_add(&b, "iota"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
/* And create two trees in r2 */
- SVN_ERR(wc_mkdir(&b, "A"));
- SVN_ERR(wc_mkdir(&b, "A/B"));
- SVN_ERR(wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
- SVN_ERR(wc_mkdir(&b, "K"));
- SVN_ERR(wc_mkdir(&b, "K/L"));
- SVN_ERR(wc_mkdir(&b, "K/L/M"));
- SVN_ERR(wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_mkdir(&b, "K"));
+ SVN_ERR(sbox_wc_mkdir(&b, "K/L"));
+ SVN_ERR(sbox_wc_mkdir(&b, "K/L/M"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
/* And change something in r3 */
- file_write(&b, "iota", "This is a new iota");
- SVN_ERR(wc_commit(&b, ""));
+ sbox_file_write(&b, "iota", "This is a new iota");
+ SVN_ERR(sbox_wc_commit(&b, ""));
/* And delete C & M */
- SVN_ERR(wc_delete(&b, "A/B/C"));
- SVN_ERR(wc_delete(&b, "K/L/M"));
- SVN_ERR(wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_delete(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_delete(&b, "K/L/M"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
/* And now create the shadowed situation */
- SVN_ERR(wc_update(&b, "", 2));
- SVN_ERR(wc_copy(&b, "A", "A_tmp"));
- SVN_ERR(wc_update(&b, "", 1));
- SVN_ERR(wc_move(&b, "A_tmp", "A"));
+ SVN_ERR(sbox_wc_update(&b, "", 2));
+ SVN_ERR(sbox_wc_copy(&b, "A", "A_tmp"));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+ SVN_ERR(sbox_wc_move(&b, "A_tmp", "A"));
- SVN_ERR(wc_mkdir(&b, "K"));
- SVN_ERR(wc_mkdir(&b, "K/L"));
- SVN_ERR(wc_mkdir(&b, "K/L/M"));
+ SVN_ERR(sbox_wc_mkdir(&b, "K"));
+ SVN_ERR(sbox_wc_mkdir(&b, "K/L"));
+ SVN_ERR(sbox_wc_mkdir(&b, "K/L/M"));
/* Verify situation before update */
{
@@ -3190,7 +3022,7 @@ test_shadowed_update(const svn_test_opts_t *opts, apr_pool_t *pool)
}
/* And now bring in A and K below the local information */
- SVN_ERR(wc_update(&b, "", 3));
+ SVN_ERR(sbox_wc_update(&b, "", 3));
{
nodes_row_t rows[] = {
@@ -3223,9 +3055,9 @@ test_shadowed_update(const svn_test_opts_t *opts, apr_pool_t *pool)
}
/* Update again to remove C and M */
- SVN_ERR(wc_resolved(&b, "A"));
- SVN_ERR(wc_resolved(&b, "K"));
- SVN_ERR(wc_update(&b, "", 4));
+ SVN_ERR(sbox_wc_resolved(&b, "A"));
+ SVN_ERR(sbox_wc_resolved(&b, "K"));
+ SVN_ERR(sbox_wc_update(&b, "", 4));
{
nodes_row_t rows[] = {
@@ -3255,11 +3087,11 @@ test_shadowed_update(const svn_test_opts_t *opts, apr_pool_t *pool)
}
/* Update again to bring C and M back */
- SVN_ERR(wc_resolved(&b, "A"));
- SVN_ERR(wc_resolved(&b, "K"));
- SVN_ERR(wc_update(&b, "", 3));
+ SVN_ERR(sbox_wc_resolved(&b, "A"));
+ SVN_ERR(sbox_wc_resolved(&b, "K"));
+ SVN_ERR(sbox_wc_update(&b, "", 3));
- SVN_ERR(wc_delete(&b, "K/L/M"));
+ SVN_ERR(sbox_wc_delete(&b, "K/L/M"));
{
nodes_row_t rows[] = {
{0, "", "normal", 3, ""},
@@ -3289,13 +3121,13 @@ test_shadowed_update(const svn_test_opts_t *opts, apr_pool_t *pool)
}
/* Resolve conflict on K and go back to r1 */
- SVN_ERR(wc_revert(&b, "K", svn_depth_infinity));
- SVN_ERR(wc_update(&b, "", 1));
+ SVN_ERR(sbox_wc_revert(&b, "K", svn_depth_infinity));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
- SVN_ERR(wc_mkdir(&b, "K"));
- SVN_ERR(wc_mkdir(&b, "K/L"));
+ SVN_ERR(sbox_wc_mkdir(&b, "K"));
+ SVN_ERR(sbox_wc_mkdir(&b, "K/L"));
- SVN_ERR(wc_update(&b, "", 3));
+ SVN_ERR(sbox_wc_update(&b, "", 3));
{
nodes_row_t rows[] = {
@@ -3316,10 +3148,10 @@ test_shadowed_update(const svn_test_opts_t *opts, apr_pool_t *pool)
}
/* Update the shadowed K/L/M to r4 where they do not exit */
- SVN_ERR(wc_resolved(&b, "K"));
- SVN_ERR(wc_update(&b, "K/L/M", 4));
- SVN_ERR(wc_resolved(&b, "A"));
- SVN_ERR(wc_update(&b, "A/B/C", 4));
+ SVN_ERR(sbox_wc_resolved(&b, "K"));
+ SVN_ERR(sbox_wc_update(&b, "K/L/M", 4));
+ SVN_ERR(sbox_wc_resolved(&b, "A"));
+ SVN_ERR(sbox_wc_update(&b, "A/B/C", 4));
{
nodes_row_t rows[] = {
@@ -3361,24 +3193,24 @@ test_copy_of_deleted(const svn_test_opts_t *opts, apr_pool_t *pool)
svn_test__sandbox_t b;
SVN_ERR(svn_test__sandbox_create(&b, "copy_of_deleted", opts, pool));
- SVN_ERR(add_and_commit_greek_tree(&b));
+ SVN_ERR(sbox_add_and_commit_greek_tree(&b));
- /* Recreate the test scenario from copy_tests.py copy_wc_url_with_absent */
+ /* Recreate the test scenario from copy_tests.py copy_wc_url_with_server_excluded */
/* Delete A/B */
- SVN_ERR(wc_delete(&b, "A/B"));
+ SVN_ERR(sbox_wc_delete(&b, "A/B"));
/* A/no not-present but in HEAD */
- SVN_ERR(wc_copy(&b, "A/mu", "A/no"));
- SVN_ERR(wc_commit(&b, "A/no"));
- SVN_ERR(wc_update(&b, "A/no", 1));
+ SVN_ERR(sbox_wc_copy(&b, "A/mu", "A/no"));
+ SVN_ERR(sbox_wc_commit(&b, "A/no"));
+ SVN_ERR(sbox_wc_update(&b, "A/no", 1));
/* A/mu not-present and not in HEAD */
- SVN_ERR(wc_delete(&b, "A/mu"));
- SVN_ERR(wc_commit(&b, "A/mu"));
+ SVN_ERR(sbox_wc_delete(&b, "A/mu"));
+ SVN_ERR(sbox_wc_commit(&b, "A/mu"));
/* A/D excluded */
- SVN_ERR(wc_exclude(&b, "A/D"));
+ SVN_ERR(sbox_wc_exclude(&b, "A/D"));
/* This should have created this structure */
{
@@ -3408,7 +3240,7 @@ test_copy_of_deleted(const svn_test_opts_t *opts, apr_pool_t *pool)
SVN_ERR(check_db_rows(&b, "A", rows));
}
- SVN_ERR(wc_copy(&b, "A", "A_copied"));
+ SVN_ERR(sbox_wc_copy(&b, "A", "A_copied"));
/* I would expect this behavior, as this copies all layers where possible
instead of just constructing a top level layer with not-present nodes
@@ -3451,12 +3283,12 @@ test_case_rename(const svn_test_opts_t *opts, apr_pool_t *pool)
apr_hash_t *dirents;
SVN_ERR(svn_test__sandbox_create(&b, "case_rename", opts, pool));
- SVN_ERR(add_and_commit_greek_tree(&b));
+ SVN_ERR(sbox_add_and_commit_greek_tree(&b));
- SVN_ERR(wc_move(&b, "A", "a"));
- SVN_ERR(wc_move(&b, "iota", "iotA"));
+ SVN_ERR(sbox_wc_move(&b, "A", "a"));
+ SVN_ERR(sbox_wc_move(&b, "iota", "iotA"));
- SVN_ERR(svn_io_get_dirents3(&dirents, wc_path(&b, ""), TRUE, pool, pool));
+ SVN_ERR(svn_io_get_dirents3(&dirents, sbox_wc_path(&b, ""), TRUE, pool, pool));
/* A shouldn't be there, but a should */
SVN_TEST_ASSERT(apr_hash_get(dirents, "a", APR_HASH_KEY_STRING));
@@ -3474,14 +3306,14 @@ commit_file_external(const svn_test_opts_t *opts, apr_pool_t *pool)
svn_test__sandbox_t b;
SVN_ERR(svn_test__sandbox_create(&b, "commit_file_external", opts, pool));
- file_write(&b, "f", "this is f\n");
- SVN_ERR(wc_add(&b, "f"));
- SVN_ERR(wc_propset(&b, "svn:externals", "^/f g", ""));
- SVN_ERR(wc_commit(&b, ""));
- SVN_ERR(wc_update(&b, "", 1));
- file_write(&b, "g", "this is f\nmodified via g\n");
- SVN_ERR(wc_commit(&b, ""));
- SVN_ERR(wc_update(&b, "", 2));
+ sbox_file_write(&b, "f", "this is f\n");
+ SVN_ERR(sbox_wc_add(&b, "f"));
+ SVN_ERR(sbox_wc_propset(&b, "svn:externals", "^/f g", ""));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+ sbox_file_write(&b, "g", "this is f\nmodified via g\n");
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 2));
{
nodes_row_t rows[] = {
@@ -3496,6 +3328,196 @@ commit_file_external(const svn_test_opts_t *opts, apr_pool_t *pool)
return SVN_NO_ERROR;
}
+static svn_error_t *
+revert_file_externals(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "revert_file_externals", opts, pool));
+ sbox_file_write(&b, "f", "this is f\n");
+ SVN_ERR(sbox_wc_add(&b, "f"));
+ SVN_ERR(sbox_wc_propset(&b, "svn:externals", "^/f g", ""));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+ SVN_ERR(sbox_wc_propset(&b, "svn:externals", "^/f h", ""));
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_propset(&b, "svn:externals", "^/f g", "A"));
+ {
+ nodes_row_t rows[] = {
+ { 0, "", "normal", 1, "" },
+ { 0, "f", "normal", 1, "f" },
+ { 0, "g", "normal", 1, "f", TRUE },
+ { 1, "A", "normal", NO_COPY_FROM },
+ { 0 }
+ };
+ SVN_ERR(check_db_rows(&b, "", rows));
+ }
+
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+ {
+ nodes_row_t rows[] = {
+ { 0, "", "normal", 1, "" },
+ { 0, "f", "normal", 1, "f" },
+ { 1, "A", "normal", NO_COPY_FROM },
+ { 0, "h", "normal", 1, "f", TRUE },
+ { 0, "A/g", "normal", 1, "f", TRUE },
+ { 0 }
+ };
+ SVN_ERR(check_db_rows(&b, "", rows));
+ }
+
+ SVN_ERR(sbox_wc_revert(&b, "", svn_depth_infinity));
+ {
+ nodes_row_t rows[] = {
+ { 0, "", "normal", 1, "" },
+ { 0, "f", "normal", 1, "f" },
+ { 0, "h", "normal", 1, "f", TRUE },
+ { 0, "A/g", "normal", 1, "f", TRUE },
+ { 0 }
+ };
+ SVN_ERR(check_db_rows(&b, "", rows));
+ }
+
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+ {
+ nodes_row_t rows[] = {
+ { 0, "", "normal", 1, "" },
+ { 0, "f", "normal", 1, "f" },
+ { 0, "g", "normal", 1, "f", TRUE },
+ { 0 }
+ };
+ SVN_ERR(check_db_rows(&b, "", rows));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+copy_file_externals(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "copy_file_externals", opts, pool));
+ sbox_file_write(&b, "f", "this is f\n");
+ SVN_ERR(sbox_wc_add(&b, "f"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_propset(&b, "svn:externals", "^/f g", "A"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_propset(&b, "svn:externals", "^/f g", "A/B"));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+ {
+ nodes_row_t rows[] = {
+ { 0, "", "normal", 1, "" },
+ { 0, "f", "normal", 1, "f" },
+ { 0, "A", "normal", 1, "A" },
+ { 2, "A/B", "normal", NO_COPY_FROM },
+ { 0, "A/g", "normal", 1, "f", TRUE },
+ { 0, "A/B/g", "normal", 1, "f", TRUE },
+ { 0 }
+ };
+ SVN_ERR(check_db_rows(&b, "", rows));
+ }
+
+ SVN_ERR(sbox_wc_copy(&b, "A", "X"));
+ {
+ nodes_row_t rows[] = {
+ { 0, "", "normal", 1, "" },
+ { 0, "f", "normal", 1, "f" },
+ { 0, "A", "normal", 1, "A" },
+ { 2, "A/B", "normal", NO_COPY_FROM },
+ { 0, "A/g", "normal", 1, "f", TRUE },
+ { 0, "A/B/g", "normal", 1, "f", TRUE },
+ { 1, "X", "normal", 1, "A" },
+ { 2, "X/B", "normal", NO_COPY_FROM },
+ { 0 }
+ };
+ SVN_ERR(check_db_rows(&b, "", rows));
+ }
+
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+ {
+ nodes_row_t rows[] = {
+ { 0, "", "normal", 1, "" },
+ { 0, "f", "normal", 1, "f" },
+ { 0, "A", "normal", 1, "A" },
+ { 2, "A/B", "normal", NO_COPY_FROM },
+ { 0, "A/g", "normal", 1, "f", TRUE },
+ { 0, "A/B/g", "normal", 1, "f", TRUE },
+ { 1, "X", "normal", 1, "A" },
+ { 2, "X/B", "normal", NO_COPY_FROM },
+ { 0, "X/g", "normal", 1, "f", TRUE },
+ { 0, "X/B/g", "normal", 1, "f", TRUE },
+ { 0 }
+ };
+ SVN_ERR(check_db_rows(&b, "", rows));
+ }
+
+ SVN_ERR(sbox_wc_delete(&b, "X"));
+ {
+ nodes_row_t rows[] = {
+ { 0, "", "normal", 1, "" },
+ { 0, "f", "normal", 1, "f" },
+ { 0, "A", "normal", 1, "A" },
+ { 2, "A/B", "normal", NO_COPY_FROM },
+ { 0, "A/g", "normal", 1, "f", TRUE },
+ { 0, "A/B/g", "normal", 1, "f", TRUE },
+ { 0 }
+ };
+ SVN_ERR(check_db_rows(&b, "", rows));
+ }
+
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+ {
+ nodes_row_t rows[] = {
+ { 0, "", "normal", 1, "" },
+ { 0, "f", "normal", 1, "f" },
+ { 0, "A", "normal", 1, "A" },
+ { 2, "A/B", "normal", NO_COPY_FROM },
+ { 0, "A/g", "normal", 1, "f", TRUE },
+ { 0, "A/B/g", "normal", 1, "f", TRUE },
+ { 0 }
+ };
+ SVN_ERR(check_db_rows(&b, "", rows));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+copy_wc_wc_server_excluded(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+ nodes_row_t before[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/E", "server-excluded", 1, "A/B/E"},
+ {0}
+ };
+ nodes_row_t after[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/E", "server-excluded", 1, "A/B/E"},
+ {1, "X", "normal", 1, "A"},
+ {1, "X/B", "normal", 1, "A/B"},
+ {1, "X/B/E", "incomplete", 1, "A/B/E"},
+ {0}
+ };
+ svn_error_t *err;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "copy_wc_wc_server_excluded", opts, pool));
+ SVN_ERR(insert_dirs(&b, before));
+ SVN_ERR(check_db_rows(&b, "", before));
+ SVN_ERR(sbox_disk_mkdir(&b, "A"));
+ err = sbox_wc_copy(&b, "A", "X");
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_WC_PATH_UNEXPECTED_STATUS);
+ SVN_ERR(check_db_rows(&b, "", after));
+
+ return SVN_NO_ERROR;
+}
+
/* Issue 4040 */
static svn_error_t *
incomplete_switch(const svn_test_opts_t *opts, apr_pool_t *pool)
@@ -3504,17 +3526,17 @@ incomplete_switch(const svn_test_opts_t *opts, apr_pool_t *pool)
SVN_ERR(svn_test__sandbox_create(&b, "incomplete_switch", opts, pool));
- SVN_ERR(wc_mkdir(&b, "A"));
- SVN_ERR(wc_mkdir(&b, "A/B"));
- SVN_ERR(wc_mkdir(&b, "A/B/C"));
- SVN_ERR(wc_mkdir(&b, "A/B/C/D"));
- SVN_ERR(wc_commit(&b, ""));
- SVN_ERR(wc_copy(&b, "A", "X"));
- SVN_ERR(wc_commit(&b, ""));
- SVN_ERR(wc_copy(&b, "A", "X/A"));
- SVN_ERR(wc_commit(&b, ""));
- SVN_ERR(wc_delete(&b, "X/A"));
- SVN_ERR(wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C/D"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_copy(&b, "A", "X"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_copy(&b, "A", "X/A"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_delete(&b, "X/A"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
{
/* Interrupted switch from A@1 to X@3 */
@@ -3529,7 +3551,7 @@ incomplete_switch(const svn_test_opts_t *opts, apr_pool_t *pool)
{0}
};
- nodes_row_t after_update[] = {
+ nodes_row_t after_update[] = {
{0, "", "normal", 4, "X"},
{0, "B", "normal", 4, "A/B"},
{0, "B/C", "normal", 4, "A/B/C"},
@@ -3539,13 +3561,5466 @@ incomplete_switch(const svn_test_opts_t *opts, apr_pool_t *pool)
SVN_ERR(insert_dirs(&b, before));
SVN_ERR(check_db_rows(&b, "", before));
- SVN_ERR(wc_update(&b, "", 4));
+ SVN_ERR(sbox_wc_update(&b, "", 4));
SVN_ERR(check_db_rows(&b, "", after_update));
}
return SVN_NO_ERROR;
}
+static svn_error_t *
+nested_moves_child_first(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "nested_moves_child_first", opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+ SVN_ERR(sbox_wc_move(&b, "A/B/C", "A/B/C2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {3, "A/B/C", "base-deleted", NO_COPY_FROM, "A/B/C2"},
+ {3, "A/B/C2", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+ SVN_ERR(sbox_wc_move(&b, "A/B", "A/B2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM, "A/B2"},
+ {2, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "A/B2", "normal", 1, "A/B", MOVED_HERE},
+ {2, "A/B2/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {3, "A/B2/C", "base-deleted", NO_COPY_FROM, "A/B2/C2"},
+ {3, "A/B2/C2", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+ SVN_ERR(sbox_wc_move(&b, "A", "A2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {2, "A2/B", "base-deleted", NO_COPY_FROM, "A2/B2"},
+ {2, "A2/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "A2/B2", "normal", 1, "A/B", MOVED_HERE},
+ {2, "A2/B2/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {3, "A2/B2/C", "base-deleted", NO_COPY_FROM, "A2/B2/C2"},
+ {3, "A2/B2/C2","normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Revert should leave the A to A2 move */
+ SVN_ERR(sbox_wc_revert(&b, "A2/B2", svn_depth_infinity));
+ SVN_ERR(sbox_wc_revert(&b, "A2/B", svn_depth_infinity));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+nested_moves_child_last(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "nested_moves_child_last", opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+ SVN_ERR(sbox_wc_move(&b, "A", "A2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+ SVN_ERR(sbox_wc_move(&b, "A2/B", "A2/B2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {2, "A2/B", "base-deleted", NO_COPY_FROM, "A2/B2"},
+ {2, "A2/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "A2/B2", "normal", 1, "A/B", MOVED_HERE},
+ {2, "A2/B2/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+ SVN_ERR(sbox_wc_move(&b, "A2/B2/C", "A2/B2/C2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {2, "A2/B", "base-deleted", NO_COPY_FROM, "A2/B2"},
+ {2, "A2/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "A2/B2", "normal", 1, "A/B", MOVED_HERE},
+ {2, "A2/B2/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {3, "A2/B2/C", "base-deleted", NO_COPY_FROM, "A2/B2/C2"},
+ {3, "A2/B2/C2","normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Revert should leave the A to A2 move */
+ SVN_ERR(sbox_wc_revert(&b, "A2/B2", svn_depth_infinity));
+ SVN_ERR(sbox_wc_revert(&b, "A2/B", svn_depth_infinity));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_in_copy(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_in_copy", opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+ SVN_ERR(sbox_wc_copy(&b, "A", "A2"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {1, "A2", "normal", 1, "A"},
+ {1, "A2/B", "normal", 1, "A/B"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+ SVN_ERR(sbox_wc_move(&b, "A2/B", "A2/B2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {1, "A2", "normal", 1, "A"},
+ {1, "A2/B", "normal", 1, "A/B"},
+ {2, "A2/B", "base-deleted", NO_COPY_FROM, "A2/B2"},
+ {2, "A2/B2", "normal", 1, "A/B", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_in_replace(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_in_replace", opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "X"));
+ SVN_ERR(sbox_wc_mkdir(&b, "X/B"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+ SVN_ERR(sbox_wc_delete(&b, "A"));
+ SVN_ERR(sbox_wc_copy(&b, "X", "A"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "X", "normal", 1, "X"},
+ {0, "X/B", "normal", 1, "X/B"},
+ {1, "A", "normal", 1, "X"},
+ {1, "A/B", "normal", 1, "X/B"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+ SVN_ERR(sbox_wc_move(&b, "A/B", "A/B2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "X", "normal", 1, "X"},
+ {0, "X/B", "normal", 1, "X/B"},
+ {1, "A", "normal", 1, "X"},
+ {1, "A/B", "normal", 1, "X/B"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM, "A/B2"},
+ {2, "A/B2", "normal", 1, "X/B", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+copy_a_move(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "copy_a_move", opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+ SVN_ERR(sbox_wc_move(&b, "A/B/C", "A/C2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {2, "A/C2", "normal", 1, "A/B/C", MOVED_HERE},
+ {3, "A/B/C", "base-deleted", NO_COPY_FROM, "A/C2"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+ /* Copying a move doesn't copy any moved-to/here artifacts, which
+ means that moving inside a copy is not the same as copying
+ something that contains a move? Is this behaviour correct? */
+ SVN_ERR(sbox_wc_copy(&b, "A", "A2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {2, "A/C2", "normal", 1, "A/B/C", MOVED_HERE},
+ {3, "A/B/C", "base-deleted", NO_COPY_FROM, "A/C2"},
+ {1, "A2", "normal", 1, "A"},
+ {1, "A2/B", "normal", 1, "A/B"},
+ {1, "A2/B/C", "normal", 1, "A/B/C"},
+ {2, "A2/C2", "normal", 1, "A/B/C"}, /* MOVED_HERE? */
+ {3, "A2/B/C", "base-deleted", NO_COPY_FROM}, /* "A2/C2"? */
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_to_swap(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_to_swap", opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "X"));
+ SVN_ERR(sbox_wc_mkdir(&b, "X/Y"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ SVN_ERR(sbox_wc_move(&b, "A/B", "X/B"));
+ SVN_ERR(sbox_wc_move(&b, "X/Y", "A/Y"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "X", "normal", 1, "X"},
+ {0, "X/Y", "normal", 1, "X/Y"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM, "X/B"},
+ {2, "A/Y", "normal", 1, "X/Y", MOVED_HERE},
+ {2, "X/Y", "base-deleted", NO_COPY_FROM, "A/Y"},
+ {2, "X/B", "normal", 1, "A/B", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_move(&b, "A", "A2"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "X", "normal", 1, "X"},
+ {0, "X/Y", "normal", 1, "X/Y"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {2, "A2/B", "base-deleted", NO_COPY_FROM, "X/B"},
+ {2, "A2/Y", "normal", 1, "X/Y", MOVED_HERE},
+ {2, "X/Y", "base-deleted", NO_COPY_FROM, "A2/Y"},
+ {2, "X/B", "normal", 1, "A/B", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_move(&b, "X", "A"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "X", "normal", 1, "X"},
+ {0, "X/Y", "normal", 1, "X/Y"},
+ {1, "A", "normal", 1, "X", FALSE, "A2", TRUE},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/Y", "normal", 1, "X/Y", MOVED_HERE},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "X", "base-deleted", NO_COPY_FROM, "A"},
+ {1, "X/Y", "base-deleted", NO_COPY_FROM},
+ {2, "A/B", "normal", 1, "A/B", MOVED_HERE},
+ {2, "A/Y", "base-deleted", NO_COPY_FROM, "A2/Y"},
+ {2, "A2/B", "base-deleted", NO_COPY_FROM, "A/B"},
+ {2, "A2/Y", "normal", 1, "X/Y", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_move(&b, "A2", "X"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "X", "normal", 1, "X"},
+ {0, "X/Y", "normal", 1, "X/Y"},
+ {1, "A", "normal", 1, "X", FALSE, "X", TRUE},
+ {1, "A/Y", "normal", 1, "X/Y", MOVED_HERE},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "X", "normal", 1, "A", FALSE, "A", TRUE},
+ {1, "X/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "X/Y", "base-deleted", NO_COPY_FROM},
+ {2, "A/Y", "base-deleted", NO_COPY_FROM, "X/Y"},
+ {2, "X/B", "base-deleted", NO_COPY_FROM, "A/B"},
+ {2, "A/B", "normal", 1, "A/B", MOVED_HERE},
+ {2, "X/Y", "normal", 1, "X/Y", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Revert and try in different order */
+ SVN_ERR(sbox_wc_revert(&b, "", svn_depth_infinity));
+
+ SVN_ERR(sbox_wc_move(&b, "A", "A2"));
+ SVN_ERR(sbox_wc_move(&b, "X", "A"));
+ SVN_ERR(sbox_wc_move(&b, "A2", "X"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "X", "normal", 1, "X"},
+ {0, "X/Y", "normal", 1, "X/Y"},
+ {1, "A", "normal", 1, "X", FALSE, "X", TRUE},
+ {1, "A/Y", "normal", 1, "X/Y", MOVED_HERE},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "X", "normal", 1, "A", FALSE, "A", TRUE},
+ {1, "X/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "X/Y", "base-deleted", NO_COPY_FROM},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_move(&b, "A/Y", "X/Y"));
+ SVN_ERR(sbox_wc_move(&b, "X/B", "A/B"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "X", "normal", 1, "X"},
+ {0, "X/Y", "normal", 1, "X/Y"},
+ {1, "A", "normal", 1, "X", FALSE, "X", TRUE},
+ {1, "A/Y", "normal", 1, "X/Y", MOVED_HERE},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "X", "normal", 1, "A", FALSE, "A", TRUE},
+ {1, "X/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "X/Y", "base-deleted", NO_COPY_FROM},
+ {2, "A/Y", "base-deleted", NO_COPY_FROM, "X/Y"},
+ {2, "X/B", "base-deleted", NO_COPY_FROM, "A/B"},
+ {2, "A/B", "normal", 1, "A/B", MOVED_HERE},
+ {2, "X/Y", "normal", 1, "X/Y", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* And move this last bit back and check if the db state is restored */
+ SVN_ERR(sbox_wc_move(&b, "A/B", "X/B"));
+ SVN_ERR(sbox_wc_move(&b, "X/Y", "A/Y"));
+
+ {
+ /* Exact the same as before the initial moves */
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "X", "normal", 1, "X"},
+ {0, "X/Y", "normal", 1, "X/Y"},
+ {1, "A", "normal", 1, "X", FALSE, "X", TRUE},
+ {1, "A/Y", "normal", 1, "X/Y", MOVED_HERE},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "X", "normal", 1, "A", FALSE, "A", TRUE},
+ {1, "X/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "X/Y", "base-deleted", NO_COPY_FROM},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* And try to undo the rest */
+ SVN_ERR(sbox_wc_move(&b, "A", "A2"));
+ SVN_ERR(sbox_wc_move(&b, "X", "A"));
+ SVN_ERR(sbox_wc_move(&b, "A2", "X"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "X", "normal", 1, "X"},
+ {0, "X/Y", "normal", 1, "X/Y"},
+
+ {0}
+ };
+
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+revert_nested_move(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+ nodes_row_t nodes_A_moved[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ nodes_row_t nodes_AB_moved[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {2, "A2/B", "base-deleted", NO_COPY_FROM, "A2/B2"},
+ {2, "A2/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "A2/B2", "normal", 1, "A/B", MOVED_HERE},
+ {2, "A2/B2/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ nodes_row_t nodes_ABC_moved[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {2, "A2/B", "base-deleted", NO_COPY_FROM, "A2/B2"},
+ {2, "A2/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "A2/B2", "normal", 1, "A/B", MOVED_HERE},
+ {2, "A2/B2/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {3, "A2/B2/C", "base-deleted", NO_COPY_FROM, "A2/B2/C2"},
+ {3, "A2/B2/C2", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ nodes_row_t nodes_AB_moved_C_copied[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {2, "A2/B", "base-deleted", NO_COPY_FROM, "A2/B2"},
+ {2, "A2/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "A2/B2", "normal", 1, "A/B", MOVED_HERE},
+ {2, "A2/B2/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {3, "A2/B2/C2", "normal", 1, "A/B/C"},
+ {0}
+ };
+ nodes_row_t nodes_AC_moved_B_copied[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {2, "A2/B2", "normal", 1, "A/B"},
+ {2, "A2/B2/C", "normal", 1, "A/B/C"},
+ {3, "A2/B2/C", "base-deleted", NO_COPY_FROM, "A2/B2/C2"},
+ {3, "A2/B2/C2", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+
+ SVN_ERR(svn_test__sandbox_create(&b, "revert_nested_move", opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ SVN_ERR(sbox_wc_move(&b, "A", "A2"));
+ SVN_ERR(check_db_rows(&b, "", nodes_A_moved));
+
+ SVN_ERR(sbox_wc_move(&b, "A2/B", "A2/B2"));
+ SVN_ERR(check_db_rows(&b, "", nodes_AB_moved));
+
+ SVN_ERR(sbox_wc_move(&b, "A2/B2/C", "A2/B2/C2"));
+ SVN_ERR(check_db_rows(&b, "", nodes_ABC_moved));
+
+ SVN_ERR(sbox_wc_revert(&b, "A2/B", svn_depth_infinity));
+ SVN_ERR(sbox_wc_revert(&b, "A2/B2", svn_depth_infinity));
+ SVN_ERR(check_db_rows(&b, "", nodes_A_moved));
+
+ SVN_ERR(sbox_wc_move(&b, "A2/B", "A2/B2"));
+ SVN_ERR(sbox_wc_move(&b, "A2/B2/C", "A2/B2/C2"));
+ SVN_ERR(check_db_rows(&b, "", nodes_ABC_moved));
+
+ SVN_ERR(sbox_wc_revert(&b, "A2/B2/C", svn_depth_empty));
+ SVN_ERR(check_db_rows(&b, "", nodes_AB_moved_C_copied));
+ SVN_ERR(sbox_wc_revert(&b, "A2/B2/C2", svn_depth_infinity));
+ SVN_ERR(check_db_rows(&b, "", nodes_AB_moved));
+
+ SVN_ERR(sbox_wc_move(&b, "A2/B2/C", "A2/B2/C2"));
+ SVN_ERR(check_db_rows(&b, "", nodes_ABC_moved));
+
+ SVN_ERR(sbox_wc_revert(&b, "A2/B2/C", svn_depth_infinity));
+ SVN_ERR(check_db_rows(&b, "", nodes_AB_moved_C_copied));
+ SVN_ERR(sbox_wc_revert(&b, "A2/B2/C2", svn_depth_infinity));
+ SVN_ERR(check_db_rows(&b, "", nodes_AB_moved));
+
+ SVN_ERR(sbox_wc_revert(&b, "A2/B", svn_depth_infinity));
+ SVN_ERR(sbox_wc_revert(&b, "A2/B2", svn_depth_infinity));
+ SVN_ERR(check_db_rows(&b, "", nodes_A_moved));
+
+ /* Check moves in reverse order */
+ SVN_ERR(sbox_wc_revert(&b, "", svn_depth_infinity));
+ SVN_ERR(sbox_wc_move(&b, "A/B/C", "A/B/C2"));
+ SVN_ERR(sbox_wc_move(&b, "A/B", "A/B2"));
+ SVN_ERR(sbox_wc_move(&b, "A", "A2"));
+ SVN_ERR(check_db_rows(&b, "", nodes_ABC_moved));
+
+ SVN_ERR(sbox_wc_revert(&b, "A2/B", svn_depth_infinity));
+ SVN_ERR(check_db_rows(&b, "", nodes_AC_moved_B_copied));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_on_move(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_on_move", opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "X"));
+ SVN_ERR(sbox_wc_mkdir(&b, "X/B"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ SVN_ERR(sbox_wc_move(&b, "A/B", "B2"));
+ SVN_ERR(sbox_wc_delete(&b, "A"));
+ SVN_ERR(sbox_wc_copy(&b, "X", "A"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "X", "normal", 1, "X"},
+ {0, "X/B", "normal", 1, "X/B"},
+ {1, "B2", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A", "normal", 1, "X"},
+ {1, "A/B", "normal", 1, "X/B", FALSE, "B2"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_move(&b, "A/B", "B3"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "X", "normal", 1, "X"},
+ {0, "X/B", "normal", 1, "X/B"},
+ {1, "B2", "normal", 1, "A/B", MOVED_HERE},
+ {1, "B3", "normal", 1, "X/B", MOVED_HERE},
+ {1, "A", "normal", 1, "X"},
+ {1, "A/B", "normal", 1, "X/B", FALSE, "B2"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM, "B3"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_on_move2(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_on_move2", opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "X"));
+ SVN_ERR(sbox_wc_mkdir(&b, "X/B"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ SVN_ERR(sbox_wc_move(&b, "A", "A2"));
+ SVN_ERR(sbox_wc_delete(&b, "A"));
+ SVN_ERR(sbox_wc_copy(&b, "X", "A"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "X", "normal", 1, "X"},
+ {0, "X/B", "normal", 1, "X/B"},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A", "normal", 1, "X", FALSE, "A2"},
+ {1, "A/B", "normal", 1, "X/B"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_move(&b, "A/B", "B3"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "X", "normal", 1, "X"},
+ {0, "X/B", "normal", 1, "X/B"},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "B3", "normal", 1, "X/B", MOVED_HERE},
+ {1, "A", "normal", 1, "X", FALSE, "A2"},
+ {1, "A/B", "normal", 1, "X/B"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM, "B3"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_added(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_added", opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_move(&b, "A", "A2"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A2/B/C2"));
+
+ /* Both A2/B/C and A2/B/C2 are simple adds inside the move. It
+ doesn't seem right for A2/B/C to be marked moved_here. */
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {3, "A2/B/C", "normal", NO_COPY_FROM},
+ {3, "A2/B/C2", "normal", NO_COPY_FROM},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Test the result of 'update' when the incoming changes are inside a
+ * directory that is locally moved. */
+static svn_error_t *
+move_update(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_update", opts, pool));
+
+ /* r1: Create files 'f', 'h' */
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ sbox_file_write(&b, "A/B/f", "r1 content\n");
+ sbox_file_write(&b, "A/B/h", "r1 content\n");
+ SVN_ERR(sbox_wc_add(&b, "A/B/f"));
+ SVN_ERR(sbox_wc_add(&b, "A/B/h"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+
+ /* r2: Modify 'f' */
+ sbox_file_write(&b, "A/B/f", "r1 content\nr2 content\n");
+ SVN_ERR(sbox_wc_commit(&b, ""));
+
+ /* r3: Delete 'h', add 'g' */
+ sbox_file_write(&b, "A/B/g", "r3 content\n");
+ SVN_ERR(sbox_wc_add(&b, "A/B/g"));
+ SVN_ERR(sbox_wc_delete(&b, "A/B/h"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+
+ /* r4: Add a new subtree 'X' */
+ SVN_ERR(sbox_wc_mkdir(&b, "X"));
+ sbox_file_write(&b, "X/f", "r4 content\n");
+ sbox_file_write(&b, "X/g", "r4 content\n");
+ sbox_file_write(&b, "X/h", "r4 content\n");
+ SVN_ERR(sbox_wc_add(&b, "X/f"));
+ SVN_ERR(sbox_wc_add(&b, "X/g"));
+ SVN_ERR(sbox_wc_add(&b, "X/h"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+
+ /* r5: Add a subtree 'A/B/C' */
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ /* A is single-revision so A2 is a single-revision copy */
+ SVN_ERR(sbox_wc_move(&b, "A", "A2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/f", "normal", 1, "A/B/f"},
+ {0, "A/B/h", "normal", 1, "A/B/h"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/f", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/h", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A2/B/f", "normal", 1, "A/B/f", MOVED_HERE},
+ {1, "A2/B/h", "normal", 1, "A/B/h", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Update causes a tree-conflict on A due to incoming text-change. */
+ SVN_ERR(sbox_wc_update(&b, "", 2));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 2, ""},
+ {0, "A", "normal", 2, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "A/B/f", "normal", 2, "A/B/f"},
+ {0, "A/B/h", "normal", 2, "A/B/h"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/f", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/h", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A2/B/f", "normal", 1, "A/B/f", MOVED_HERE},
+ {1, "A2/B/h", "normal", 1, "A/B/h", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Resolve should update the move. */
+ SVN_ERR(sbox_wc_resolve(&b, "A", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 2, ""},
+ {0, "A", "normal", 2, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "A/B/f", "normal", 2, "A/B/f"},
+ {0, "A/B/h", "normal", 2, "A/B/h"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/f", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/h", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 2, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 2, "A/B", MOVED_HERE},
+ {1, "A2/B/f", "normal", 2, "A/B/f", MOVED_HERE},
+ {1, "A2/B/h", "normal", 2, "A/B/h", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Update causes a tree-conflict on due to incoming add. */
+ SVN_ERR(sbox_wc_update(&b, "", 3));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 3, ""},
+ {0, "A", "normal", 3, "A"},
+ {0, "A/B", "normal", 3, "A/B"},
+ {0, "A/B/f", "normal", 3, "A/B/f"},
+ {0, "A/B/g", "normal", 3, "A/B/g"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/f", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/g", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 2, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 2, "A/B", MOVED_HERE},
+ {1, "A2/B/f", "normal", 2, "A/B/f", MOVED_HERE},
+ {1, "A2/B/h", "normal", 2, "A/B/h", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_resolve(&b, "A", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 3, ""},
+ {0, "A", "normal", 3, "A"},
+ {0, "A/B", "normal", 3, "A/B"},
+ {0, "A/B/f", "normal", 3, "A/B/f"},
+ {0, "A/B/g", "normal", 3, "A/B/g"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/f", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/g", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 3, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 3, "A/B", MOVED_HERE},
+ {1, "A2/B/f", "normal", 3, "A/B/f", MOVED_HERE},
+ {1, "A2/B/g", "normal", 3, "A/B/g", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_delete(&b, "A2/B"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 3, ""},
+ {0, "A", "normal", 3, "A"},
+ {0, "A/B", "normal", 3, "A/B"},
+ {0, "A/B/f", "normal", 3, "A/B/f"},
+ {0, "A/B/g", "normal", 3, "A/B/g"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/f", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/g", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 3, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 3, "A/B", MOVED_HERE},
+ {1, "A2/B/f", "normal", 3, "A/B/f", MOVED_HERE},
+ {1, "A2/B/g", "normal", 3, "A/B/g", MOVED_HERE},
+ {2, "A2/B", "base-deleted", NO_COPY_FROM},
+ {2, "A2/B/f", "base-deleted", NO_COPY_FROM},
+ {2, "A2/B/g", "base-deleted", NO_COPY_FROM},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_update(&b, "", 2));
+ SVN_ERR(sbox_wc_resolve(&b, "A", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 2, ""},
+ {0, "A", "normal", 2, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "A/B/f", "normal", 2, "A/B/f"},
+ {0, "A/B/h", "normal", 2, "A/B/h"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/f", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/h", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 2, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 2, "A/B", MOVED_HERE},
+ {1, "A2/B/f", "normal", 2, "A/B/f", MOVED_HERE},
+ {1, "A2/B/h", "normal", 2, "A/B/h", MOVED_HERE},
+ {2, "A2/B", "base-deleted", NO_COPY_FROM},
+ {2, "A2/B/f", "base-deleted", NO_COPY_FROM},
+ {2, "A2/B/h", "base-deleted", NO_COPY_FROM},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_update(&b, "X", 4));
+ SVN_ERR(sbox_wc_copy(&b, "X", "A2/B"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 2, ""},
+ {0, "A", "normal", 2, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "A/B/f", "normal", 2, "A/B/f"},
+ {0, "A/B/h", "normal", 2, "A/B/h"},
+ {0, "X", "normal", 4, "X"},
+ {0, "X/f", "normal", 4, "X/f"},
+ {0, "X/g", "normal", 4, "X/g"},
+ {0, "X/h", "normal", 4, "X/h"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/f", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/h", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 2, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 2, "A/B", MOVED_HERE},
+ {1, "A2/B/f", "normal", 2, "A/B/f", MOVED_HERE},
+ {1, "A2/B/h", "normal", 2, "A/B/h", MOVED_HERE},
+ {2, "A2/B", "normal", 4, "X"},
+ {2, "A2/B/f", "normal", 4, "X/f"},
+ {2, "A2/B/g", "normal", 4, "X/g"},
+ {2, "A2/B/h", "normal", 4, "X/h"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_update(&b, "", 4));
+ SVN_ERR(sbox_wc_resolve(&b, "A", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 4, ""},
+ {0, "A", "normal", 4, "A"},
+ {0, "A/B", "normal", 4, "A/B"},
+ {0, "A/B/f", "normal", 4, "A/B/f"},
+ {0, "A/B/g", "normal", 4, "A/B/g"},
+ {0, "X", "normal", 4, "X"},
+ {0, "X/f", "normal", 4, "X/f"},
+ {0, "X/g", "normal", 4, "X/g"},
+ {0, "X/h", "normal", 4, "X/h"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/f", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/g", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 4, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 4, "A/B", MOVED_HERE},
+ {1, "A2/B/f", "normal", 4, "A/B/f", MOVED_HERE},
+ {1, "A2/B/g", "normal", 4, "A/B/g", MOVED_HERE},
+ {2, "A2/B", "normal", 4, "X"},
+ {2, "A2/B/f", "normal", 4, "X/f"},
+ {2, "A2/B/g", "normal", 4, "X/g"},
+ {2, "A2/B/h", "normal", 4, "X/h"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_update(&b, "", 5));
+ SVN_ERR(sbox_wc_resolve(&b, "A", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 5, ""},
+ {0, "A", "normal", 5, "A"},
+ {0, "A/B", "normal", 5, "A/B"},
+ {0, "A/B/f", "normal", 5, "A/B/f"},
+ {0, "A/B/g", "normal", 5, "A/B/g"},
+ {0, "A/B/C", "normal", 5, "A/B/C"},
+ {0, "X", "normal", 5, "X"},
+ {0, "X/f", "normal", 5, "X/f"},
+ {0, "X/g", "normal", 5, "X/g"},
+ {0, "X/h", "normal", 5, "X/h"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/f", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/g", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 5, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 5, "A/B", MOVED_HERE},
+ {1, "A2/B/f", "normal", 5, "A/B/f", MOVED_HERE},
+ {1, "A2/B/g", "normal", 5, "A/B/g", MOVED_HERE},
+ {1, "A2/B/C", "normal", 5, "A/B/C", MOVED_HERE},
+ {2, "A2/B", "normal", 4, "X"},
+ {2, "A2/B/f", "normal", 4, "X/f"},
+ {2, "A2/B/g", "normal", 4, "X/g"},
+ {2, "A2/B/h", "normal", 4, "X/h"},
+ {2, "A2/B/C", "base-deleted", NO_COPY_FROM},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+check_moved_to(apr_array_header_t *moved_tos,
+ int i,
+ int op_depth,
+ const char *local_relpath)
+{
+ struct svn_wc__db_moved_to_t *moved_to;
+
+ if (i >= moved_tos->nelts)
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "moved-to %d not found", i);
+
+ moved_to = APR_ARRAY_IDX(moved_tos, i, struct svn_wc__db_moved_to_t *);
+
+ if (moved_to->op_depth != op_depth
+ || strcmp(moved_to->local_relpath, local_relpath))
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "expected: {%d '%s'} found[%d]: {%d '%s'}",
+ op_depth, local_relpath, i,
+ moved_to->op_depth, moved_to->local_relpath);
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_scan_delete(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+ const char *moved_to_abspath, *moved_to_op_root_abspath;
+ apr_array_header_t *moved_tos;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "scan_delete", opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A2"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A2/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "C2"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ SVN_ERR(sbox_wc_move(&b, "A2", "X"));
+ SVN_ERR(sbox_wc_move(&b, "X/B", "Z"));
+ SVN_ERR(sbox_wc_move(&b, "A/B", "X/B"));
+ SVN_ERR(sbox_wc_move(&b, "X/B/C", "Y"));
+ SVN_ERR(sbox_wc_move(&b, "C2", "X/B/C"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {0, "A2", "normal", 1, "A2"},
+ {0, "A2/B", "normal", 1, "A2/B"},
+ {0, "C2", "normal", 1, "C2"},
+ {1, "A2", "base-deleted", NO_COPY_FROM, "X"},
+ {1, "A2/B", "base-deleted", NO_COPY_FROM},
+ {1, "Z", "normal", 1, "A2/B", MOVED_HERE},
+ {1, "X", "normal", 1, "A2", MOVED_HERE},
+ {1, "X/B", "normal", 1, "A2/B", MOVED_HERE},
+ {2, "A/B", "base-deleted", NO_COPY_FROM, "X/B"},
+ {2, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "X/B", "normal", 1, "A/B", FALSE, "Z", TRUE},
+ {2, "X/B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {1, "Y", "normal", 1, "A/B/C", MOVED_HERE},
+ {1, "C2", "base-deleted", NO_COPY_FROM, "X/B/C"},
+ {3, "X/B/C", "normal", 1, "C2", FALSE, "Y", TRUE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(svn_wc__db_scan_deletion(NULL, &moved_to_abspath,
+ NULL, &moved_to_op_root_abspath,
+ b.wc_ctx->db, sbox_wc_path(&b, "C2"),
+ pool, pool));
+ SVN_TEST_STRING_ASSERT(moved_to_abspath, sbox_wc_path(&b, "X/B/C"));
+ SVN_TEST_STRING_ASSERT(moved_to_op_root_abspath, sbox_wc_path(&b, "X/B/C"));
+
+ SVN_ERR(svn_wc__db_scan_deletion(NULL, &moved_to_abspath,
+ NULL, &moved_to_op_root_abspath,
+ b.wc_ctx->db, sbox_wc_path(&b, "A/B"),
+ pool, pool));
+ SVN_TEST_STRING_ASSERT(moved_to_abspath, sbox_wc_path(&b, "X/B"));
+ SVN_TEST_STRING_ASSERT(moved_to_op_root_abspath, sbox_wc_path(&b, "X/B"));
+
+ SVN_ERR(svn_wc__db_follow_moved_to(&moved_tos, b.wc_ctx->db,
+ sbox_wc_path(&b, "A/B/C"), pool, pool));
+ SVN_ERR(check_moved_to(moved_tos, 0, 2, "X/B/C"));
+ SVN_ERR(check_moved_to(moved_tos, 1, 3, "Y"));
+ SVN_TEST_ASSERT(moved_tos->nelts == 2);
+
+ SVN_ERR(svn_wc__db_scan_deletion(NULL, &moved_to_abspath,
+ NULL, &moved_to_op_root_abspath,
+ b.wc_ctx->db, sbox_wc_path(&b, "A/B/C"),
+ pool, pool));
+ SVN_TEST_STRING_ASSERT(moved_to_abspath, sbox_wc_path(&b, "X/B/C"));
+ SVN_TEST_STRING_ASSERT(moved_to_op_root_abspath, sbox_wc_path(&b, "X/B"));
+
+ SVN_ERR(svn_wc__db_scan_deletion(NULL, &moved_to_abspath,
+ NULL, &moved_to_op_root_abspath,
+ b.wc_ctx->db, sbox_wc_path(&b, "A2"),
+ pool, pool));
+ SVN_TEST_STRING_ASSERT(moved_to_abspath, sbox_wc_path(&b, "X"));
+ SVN_TEST_STRING_ASSERT(moved_to_op_root_abspath, sbox_wc_path(&b, "X"));
+
+ SVN_ERR(svn_wc__db_scan_deletion(NULL, &moved_to_abspath,
+ NULL, &moved_to_op_root_abspath,
+ b.wc_ctx->db, sbox_wc_path(&b, "A2/B"),
+ pool, pool));
+ SVN_TEST_STRING_ASSERT(moved_to_abspath, sbox_wc_path(&b, "X/B"));
+ SVN_TEST_STRING_ASSERT(moved_to_op_root_abspath, sbox_wc_path(&b, "X"));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_follow_moved_to(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+ apr_array_header_t *moved_tos;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "follow_moved_to", opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A1"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A1/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A1/B/C"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A1/B/C/D"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A1/B/C/D/E"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A2"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A2/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A2/B/C"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A2/B/C/D"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A2/B/C/D/E"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A3"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A3/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A3/B/C"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A3/B/C/D"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A3/B/C/D/E"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A1", "normal", 1, "A1"},
+ {0, "A1/B", "normal", 1, "A1/B"},
+ {0, "A1/B/C", "normal", 1, "A1/B/C"},
+ {0, "A1/B/C/D", "normal", 1, "A1/B/C/D"},
+ {0, "A1/B/C/D/E", "normal", 1, "A1/B/C/D/E"},
+ {0, "A2", "normal", 1, "A2"},
+ {0, "A2/B", "normal", 1, "A2/B"},
+ {0, "A2/B/C", "normal", 1, "A2/B/C"},
+ {0, "A2/B/C/D", "normal", 1, "A2/B/C/D"},
+ {0, "A2/B/C/D/E", "normal", 1, "A2/B/C/D/E"},
+ {0, "A3", "normal", 1, "A3"},
+ {0, "A3/B", "normal", 1, "A3/B"},
+ {0, "A3/B/C", "normal", 1, "A3/B/C"},
+ {0, "A3/B/C/D", "normal", 1, "A3/B/C/D"},
+ {0, "A3/B/C/D/E", "normal", 1, "A3/B/C/D/E"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_move(&b, "A1", "X"));
+ SVN_ERR(sbox_wc_move(&b, "A2", "A1"));
+ SVN_ERR(sbox_wc_move(&b, "A3", "A2"));
+ SVN_ERR(sbox_wc_move(&b, "X", "A3"));
+ SVN_ERR(sbox_wc_move(&b, "A1/B", "X"));
+ SVN_ERR(sbox_wc_move(&b, "A2/B", "A1/B"));
+ SVN_ERR(sbox_wc_move(&b, "A3/B", "A2/B"));
+ SVN_ERR(sbox_wc_move(&b, "X", "A3/B"));
+ SVN_ERR(sbox_wc_move(&b, "A1/B/C/D", "X"));
+ SVN_ERR(sbox_wc_move(&b, "A2/B/C/D", "A1/B/C/D"));
+ SVN_ERR(sbox_wc_move(&b, "A3/B/C/D", "A2/B/C/D"));
+ SVN_ERR(sbox_wc_move(&b, "X", "A3/B/C/D"));
+ SVN_ERR(sbox_wc_move(&b, "A1/B/C/D/E", "X"));
+ SVN_ERR(sbox_wc_move(&b, "A2/B/C/D/E", "A1/B/C/D/E"));
+ SVN_ERR(sbox_wc_move(&b, "A3/B/C/D/E", "A2/B/C/D/E"));
+ SVN_ERR(sbox_wc_move(&b, "X", "A3/B/C/D/E"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A1", "normal", 1, "A1"},
+ {0, "A1/B", "normal", 1, "A1/B"},
+ {0, "A1/B/C", "normal", 1, "A1/B/C"},
+ {0, "A1/B/C/D", "normal", 1, "A1/B/C/D"},
+ {0, "A1/B/C/D/E", "normal", 1, "A1/B/C/D/E"},
+ {0, "A2", "normal", 1, "A2"},
+ {0, "A2/B", "normal", 1, "A2/B"},
+ {0, "A2/B/C", "normal", 1, "A2/B/C"},
+ {0, "A2/B/C/D", "normal", 1, "A2/B/C/D"},
+ {0, "A2/B/C/D/E", "normal", 1, "A2/B/C/D/E"},
+ {0, "A3", "normal", 1, "A3"},
+ {0, "A3/B", "normal", 1, "A3/B"},
+ {0, "A3/B/C", "normal", 1, "A3/B/C"},
+ {0, "A3/B/C/D", "normal", 1, "A3/B/C/D"},
+ {0, "A3/B/C/D/E", "normal", 1, "A3/B/C/D/E"},
+
+ {1, "A1", "normal", 1, "A2", FALSE, "A3", TRUE},
+ {1, "A1/B", "normal", 1, "A2/B", MOVED_HERE},
+ {1, "A1/B/C", "normal", 1, "A2/B/C", MOVED_HERE},
+ {1, "A1/B/C/D", "normal", 1, "A2/B/C/D", MOVED_HERE},
+ {1, "A1/B/C/D/E", "normal", 1, "A2/B/C/D/E", MOVED_HERE},
+
+ {1, "A2", "normal", 1, "A3", FALSE, "A1", TRUE},
+ {1, "A2/B", "normal", 1, "A3/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 1, "A3/B/C", MOVED_HERE},
+ {1, "A2/B/C/D", "normal", 1, "A3/B/C/D", MOVED_HERE},
+ {1, "A2/B/C/D/E", "normal", 1, "A3/B/C/D/E", MOVED_HERE},
+
+ {1, "A3", "normal", 1, "A1", FALSE, "A2", TRUE},
+ {1, "A3/B", "normal", 1, "A1/B", MOVED_HERE},
+ {1, "A3/B/C", "normal", 1, "A1/B/C", MOVED_HERE},
+ {1, "A3/B/C/D", "normal", 1, "A1/B/C/D", MOVED_HERE},
+ {1, "A3/B/C/D/E", "normal", 1, "A1/B/C/D/E", MOVED_HERE},
+
+ {2, "A1/B", "normal", 1, "A3/B", FALSE, "A3/B", TRUE},
+ {2, "A1/B/C", "normal", 1, "A3/B/C", MOVED_HERE},
+ {2, "A1/B/C/D", "normal", 1, "A3/B/C/D", MOVED_HERE},
+ {2, "A1/B/C/D/E", "normal", 1, "A3/B/C/D/E", MOVED_HERE},
+
+ {2, "A2/B", "normal", 1, "A1/B", FALSE, "A1/B", TRUE},
+ {2, "A2/B/C", "normal", 1, "A1/B/C", MOVED_HERE},
+ {2, "A2/B/C/D", "normal", 1, "A1/B/C/D", MOVED_HERE},
+ {2, "A2/B/C/D/E", "normal", 1, "A1/B/C/D/E", MOVED_HERE},
+
+ {2, "A3/B", "normal", 1, "A2/B", FALSE, "A2/B", TRUE},
+ {2, "A3/B/C", "normal", 1, "A2/B/C", MOVED_HERE},
+ {2, "A3/B/C/D", "normal", 1, "A2/B/C/D", MOVED_HERE},
+ {2, "A3/B/C/D/E", "normal", 1, "A2/B/C/D/E", MOVED_HERE},
+
+ {4, "A1/B/C/D", "normal", 1, "A1/B/C/D", FALSE, "A3/B/C/D", TRUE},
+ {4, "A1/B/C/D/E", "normal", 1, "A1/B/C/D/E", MOVED_HERE},
+
+ {4, "A2/B/C/D", "normal", 1, "A2/B/C/D", FALSE, "A1/B/C/D", TRUE},
+ {4, "A2/B/C/D/E", "normal", 1, "A2/B/C/D/E", MOVED_HERE},
+
+ {4, "A3/B/C/D", "normal", 1, "A3/B/C/D", FALSE, "A2/B/C/D", TRUE},
+ {4, "A3/B/C/D/E", "normal", 1, "A3/B/C/D/E", MOVED_HERE},
+
+ {5, "A1/B/C/D/E", "normal", 1, "A2/B/C/D/E", FALSE, "A3/B/C/D/E", TRUE},
+ {5, "A2/B/C/D/E", "normal", 1, "A3/B/C/D/E", FALSE, "A1/B/C/D/E", TRUE},
+ {5, "A3/B/C/D/E", "normal", 1, "A1/B/C/D/E", FALSE, "A2/B/C/D/E", TRUE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* A1->A3, A3/B->A2/B, A2/B/C/D->A1/B/C/D, A1/B/C/D/E->A3/B/C/D/E */
+ SVN_ERR(svn_wc__db_follow_moved_to(&moved_tos, b.wc_ctx->db,
+ sbox_wc_path(&b, "A1"), pool, pool));
+ SVN_ERR(check_moved_to(moved_tos, 0, 1, "A3"));
+ SVN_TEST_ASSERT(moved_tos->nelts == 1);
+
+ SVN_ERR(svn_wc__db_follow_moved_to(&moved_tos, b.wc_ctx->db,
+ sbox_wc_path(&b, "A1/B"), pool, pool));
+ SVN_ERR(check_moved_to(moved_tos, 0, 1, "A3/B"));
+ SVN_ERR(check_moved_to(moved_tos, 1, 2, "A2/B"));
+ SVN_TEST_ASSERT(moved_tos->nelts == 2);
+
+ SVN_ERR(svn_wc__db_follow_moved_to(&moved_tos, b.wc_ctx->db,
+ sbox_wc_path(&b, "A1/B/C"), pool, pool));
+ SVN_ERR(check_moved_to(moved_tos, 0, 1, "A3/B/C"));
+ SVN_ERR(check_moved_to(moved_tos, 1, 2, "A2/B/C"));
+ SVN_TEST_ASSERT(moved_tos->nelts == 2);
+
+ SVN_ERR(svn_wc__db_follow_moved_to(&moved_tos, b.wc_ctx->db,
+ sbox_wc_path(&b, "A1/B/C/D"), pool, pool));
+ SVN_ERR(check_moved_to(moved_tos, 0, 1, "A3/B/C/D"));
+ SVN_ERR(check_moved_to(moved_tos, 1, 2, "A2/B/C/D"));
+ SVN_ERR(check_moved_to(moved_tos, 2, 4, "A1/B/C/D"));
+ SVN_TEST_ASSERT(moved_tos->nelts == 3);
+
+ SVN_ERR(svn_wc__db_follow_moved_to(&moved_tos, b.wc_ctx->db,
+ sbox_wc_path(&b, "A1/B/C/D/E"), pool, pool));
+ SVN_ERR(check_moved_to(moved_tos, 0, 1, "A3/B/C/D/E"));
+ SVN_ERR(check_moved_to(moved_tos, 1, 2, "A2/B/C/D/E"));
+ SVN_ERR(check_moved_to(moved_tos, 2, 4, "A1/B/C/D/E"));
+ SVN_ERR(check_moved_to(moved_tos, 3, 5, "A3/B/C/D/E"));
+ SVN_TEST_ASSERT(moved_tos->nelts == 4);
+
+ SVN_ERR(sbox_wc_delete(&b, "A3/B/C/D/E"));
+ SVN_ERR(svn_wc__db_follow_moved_to(&moved_tos, b.wc_ctx->db,
+ sbox_wc_path(&b, "A1/B/C/D/E"), pool, pool));
+ SVN_ERR(check_moved_to(moved_tos, 0, 1, "A3/B/C/D/E"));
+ SVN_ERR(check_moved_to(moved_tos, 1, 2, "A2/B/C/D/E"));
+ SVN_ERR(check_moved_to(moved_tos, 2, 4, "A1/B/C/D/E"));
+ SVN_TEST_ASSERT(moved_tos->nelts == 3);
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+mixed_rev_move(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+ apr_array_header_t *moved_tos;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "mixed_rev_move", opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 0, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "A/B/C", "normal", 3, "A/B/C"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* We don't allow mixed-rev move in 1.8 and the command line client
+ will return an error, but for compatibility with 1.7 move has an
+ allow_mixed_revisions=TRUE flag which is being used here so the
+ move transforms automatically into copy+delete. This test was
+ written before that transforming was implemented so still expects
+ some move information. */
+ SVN_ERR(sbox_wc_move(&b, "A", "X"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 0, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "A/B/C", "normal", 3, "A/B/C"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "X"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "X", "normal", 1, "A", MOVED_HERE},
+ {1, "X/B", "not-present", 2, "A/B"},
+ {2, "X/B", "normal", 2, "A/B"},
+ {2, "X/B/C", "not-present", 3, "A/B/C"},
+ {3, "X/B/C", "normal", 3, "A/B/C"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* ### These values PASS but I'm not sure they are correct. */
+ SVN_ERR(svn_wc__db_follow_moved_to(&moved_tos, b.wc_ctx->db,
+ sbox_wc_path(&b, "A/B/C"), pool, pool));
+ SVN_ERR(check_moved_to(moved_tos, 0, 1, "X/B/C"));
+ SVN_TEST_ASSERT(moved_tos->nelts == 1);
+
+ SVN_ERR(svn_wc__db_follow_moved_to(&moved_tos, b.wc_ctx->db,
+ sbox_wc_path(&b, "A/B"), pool, pool));
+ SVN_ERR(check_moved_to(moved_tos, 0, 1, "X/B"));
+ SVN_TEST_ASSERT(moved_tos->nelts == 1);
+
+ SVN_ERR(svn_wc__db_follow_moved_to(&moved_tos, b.wc_ctx->db,
+ sbox_wc_path(&b, "A"), pool, pool));
+ SVN_ERR(check_moved_to(moved_tos, 0, 1, "X"));
+ SVN_TEST_ASSERT(moved_tos->nelts == 1);
+
+
+ /* This move doesn't record moved-to */
+ SVN_ERR(sbox_wc_move(&b, "X/B", "X/Y"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 0, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "A/B/C", "normal", 3, "A/B/C"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "X"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "X", "normal", 1, "A", MOVED_HERE},
+ {1, "X/B", "not-present", 2, "A/B"},
+ {2, "X/Y", "normal", 2, "A/B"},
+ {2, "X/Y/C", "not-present", NO_COPY_FROM},
+ {3, "X/Y/C", "normal", 3, "A/B/C"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(svn_wc__db_follow_moved_to(&moved_tos, b.wc_ctx->db,
+ sbox_wc_path(&b, "A/B/C"), pool, pool));
+ SVN_TEST_ASSERT(moved_tos->nelts == 0);
+
+ SVN_ERR(svn_wc__db_follow_moved_to(&moved_tos, b.wc_ctx->db,
+ sbox_wc_path(&b, "A/B"), pool, pool));
+ SVN_TEST_ASSERT(moved_tos->nelts == 0);
+
+ SVN_ERR(svn_wc__db_follow_moved_to(&moved_tos, b.wc_ctx->db,
+ sbox_wc_path(&b, "A"), pool, pool));
+ SVN_ERR(check_moved_to(moved_tos, 0, 1, "X"));
+ SVN_TEST_ASSERT(moved_tos->nelts == 1);
+
+ return SVN_NO_ERROR;
+}
+
+/* Test the result of 'update' when the incoming changes are inside a
+ * directory that is locally moved. */
+static svn_error_t *
+update_prop_mod_into_moved(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "update_prop_mod_into_moved", opts, pool));
+
+ /* r1: Create files 'f', 'h' */
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ sbox_file_write(&b, "A/B/f", "r1 content\n");
+ sbox_file_write(&b, "A/B/h", "r1 content\n");
+ SVN_ERR(sbox_wc_add(&b, "A/B/f"));
+ SVN_ERR(sbox_wc_add(&b, "A/B/h"));
+ SVN_ERR(sbox_wc_propset(&b, "pd", "f1", "A/B/f"));
+ SVN_ERR(sbox_wc_propset(&b, "pn", "f1", "A/B/f"));
+ SVN_ERR(sbox_wc_propset(&b, "pm", "f1", "A/B/f"));
+ SVN_ERR(sbox_wc_propset(&b, "p", "h1", "A/B/h"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+
+ /* r2: Modify 'f'. Delete prop 'pd', modify prop 'pm', add prop 'pa',
+ * leave prop 'pn' unchanged. */
+ sbox_file_write(&b, "A/B/f", "r1 content\nr2 content\n");
+ SVN_ERR(sbox_wc_propset(&b, "pd", NULL, "A/B/f"));
+ SVN_ERR(sbox_wc_propset(&b, "pm", "f2", "A/B/f"));
+ SVN_ERR(sbox_wc_propset(&b, "pa", "f2", "A/B/f"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+
+ /* r3: Delete 'h', add 'g' */
+ sbox_file_write(&b, "A/B/g", "r3 content\n");
+ SVN_ERR(sbox_wc_add(&b, "A/B/g"));
+ SVN_ERR(sbox_wc_propset(&b, "p", "g3", "A/B/g"));
+ SVN_ERR(sbox_wc_delete(&b, "A/B/h"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/f", "normal", 1, "A/B/f", NOT_MOVED, "pd,pm,pn"},
+ {0, "A/B/h", "normal", 1, "A/B/h", NOT_MOVED, "p"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* A is single-revision so A2 is a single-revision copy */
+ SVN_ERR(sbox_wc_move(&b, "A", "A2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/f", "normal", 1, "A/B/f", NOT_MOVED, "pd,pm,pn"},
+ {0, "A/B/h", "normal", 1, "A/B/h", NOT_MOVED, "p"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/f", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/h", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A2/B/f", "normal", 1, "A/B/f", MOVED_HERE, "pd,pm,pn"},
+ {1, "A2/B/h", "normal", 1, "A/B/h", MOVED_HERE, "p"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Update causes a tree-conflict on A due to incoming text-change. */
+ SVN_ERR(sbox_wc_update(&b, "", 2));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 2, ""},
+ {0, "A", "normal", 2, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "A/B/f", "normal", 2, "A/B/f", NOT_MOVED, "pa,pm,pn"},
+ {0, "A/B/h", "normal", 2, "A/B/h", NOT_MOVED, "p"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/f", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/h", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A2/B/f", "normal", 1, "A/B/f", MOVED_HERE, "pd,pm,pn"},
+ {1, "A2/B/h", "normal", 1, "A/B/h", MOVED_HERE, "p"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Resolve should update the move. */
+ SVN_ERR(sbox_wc_resolve(&b, "A", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 2, ""},
+ {0, "A", "normal", 2, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "A/B/f", "normal", 2, "A/B/f", NOT_MOVED, "pa,pm,pn"},
+ {0, "A/B/h", "normal", 2, "A/B/h", NOT_MOVED, "p"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/f", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/h", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 2, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 2, "A/B", MOVED_HERE},
+ {1, "A2/B/f", "normal", 2, "A/B/f", MOVED_HERE, "pa,pm,pn"},
+ {1, "A2/B/h", "normal", 2, "A/B/h", MOVED_HERE, "p"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+nested_move_update(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "nested_move_update", opts, pool));
+
+ /* r1: Create file 'f' */
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ sbox_file_write(&b, "A/B/C/f", "r1 content\n");
+ SVN_ERR(sbox_wc_add(&b, "A/B/C/f"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+
+ /* r2: Modify 'f' */
+ sbox_file_write(&b, "A/B/C/f", "r1 content\nr2 content\n");
+ SVN_ERR(sbox_wc_commit(&b, ""));
+
+ /* r3: Create 'X' */
+ SVN_ERR(sbox_wc_mkdir(&b, "X"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ SVN_ERR(sbox_wc_move(&b, "A", "A2"));
+ SVN_ERR(sbox_wc_move(&b, "A2/B/C", "A2/B/C2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {0, "A/B/C/f", "normal", 1, "A/B/C/f"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C/f", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {1, "A2/B/C/f", "normal", 1, "A/B/C/f", MOVED_HERE},
+ {3, "A2/B/C", "base-deleted", NO_COPY_FROM, "A2/B/C2"},
+ {3, "A2/B/C/f", "base-deleted", NO_COPY_FROM},
+ {3, "A2/B/C2", "normal", 1, "A/B/C", MOVED_HERE},
+ {3, "A2/B/C2/f", "normal", 1, "A/B/C/f", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_update(&b, "", 2));
+
+ /* Following the A->A2 move should raise a tree-conflict on A2/B/C,
+ resolving that may require an explicit resolve. */
+ SVN_ERR(sbox_wc_resolve(&b, "A", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ SVN_ERR(sbox_wc_resolve(&b, "A2/B/C", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 2, ""},
+ {0, "A", "normal", 2, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "A/B/C", "normal", 2, "A/B/C"},
+ {0, "A/B/C/f", "normal", 2, "A/B/C/f"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C/f", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 2, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 2, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 2, "A/B/C", MOVED_HERE},
+ {1, "A2/B/C/f", "normal", 2, "A/B/C/f", MOVED_HERE},
+ {3, "A2/B/C", "base-deleted", NO_COPY_FROM, "A2/B/C2"},
+ {3, "A2/B/C/f", "base-deleted", NO_COPY_FROM},
+ {3, "A2/B/C2", "normal", 2, "A/B/C", MOVED_HERE},
+ {3, "A2/B/C2/f", "normal", 2, "A/B/C/f", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Update A to r3 brings no changes but updates the revisions. */
+ SVN_ERR(sbox_wc_update(&b, "A", 3));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 2, ""},
+ {0, "A", "normal", 3, "A"},
+ {0, "A/B", "normal", 3, "A/B"},
+ {0, "A/B/C", "normal", 3, "A/B/C"},
+ {0, "A/B/C/f", "normal", 3, "A/B/C/f"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C/f", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 3, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 3, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 3, "A/B/C", MOVED_HERE},
+ {1, "A2/B/C/f", "normal", 3, "A/B/C/f", MOVED_HERE},
+ {3, "A2/B/C", "base-deleted", NO_COPY_FROM, "A2/B/C2"},
+ {3, "A2/B/C/f", "base-deleted", NO_COPY_FROM},
+ {3, "A2/B/C2", "normal", 3, "A/B/C", MOVED_HERE},
+ {3, "A2/B/C2/f", "normal", 3, "A/B/C/f", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+nested_move_commit(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "nested_move_commit", opts, pool));
+
+ /* r1: Create file 'f' */
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ sbox_file_write(&b, "A/B/C/f", "r1 content\n");
+ SVN_ERR(sbox_wc_add(&b, "A/B/C/f"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ SVN_ERR(sbox_wc_move(&b, "A/B/C", "C2"));
+
+ {
+ const char *moved_to;
+ const char *expected_to;
+ SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL, NULL, &moved_to,
+ b.wc_ctx->db, sbox_wc_path(&b, "A/B/C"),
+ pool, pool));
+
+ expected_to = sbox_wc_path(&b, "C2");
+
+ if (strcmp(moved_to, expected_to) != 0)
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "Expected moved to %s, but was %s",
+ expected_to, moved_to);
+ }
+ {
+ const char *moved_from;
+ const char *expected_from;
+ SVN_ERR(svn_wc__db_scan_moved(&moved_from, NULL, NULL, NULL,
+ b.wc_ctx->db, sbox_wc_path(&b, "C2"),
+ pool, pool));
+
+ expected_from = sbox_wc_path(&b, "A/B/C");
+
+ if (strcmp(moved_from, expected_from) != 0)
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "Expected moved from %s, but was %s",
+ expected_from, moved_from);
+ }
+
+ SVN_ERR(sbox_wc_move(&b, "A", "A2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {0, "A/B/C/f", "normal", 1, "A/B/C/f"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C/f", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {1, "A2/B/C/f", "normal", 1, "A/B/C/f", MOVED_HERE},
+ {3, "A2/B/C", "base-deleted", NO_COPY_FROM, "C2"},
+ {3, "A2/B/C/f", "base-deleted", NO_COPY_FROM},
+ {1, "C2", "normal", 1, "A/B/C", MOVED_HERE},
+ {1, "C2/f", "normal", 1, "A/B/C/f", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ {
+ const char *moved_to;
+ const char *expected_to;
+ SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL, NULL, &moved_to,
+ b.wc_ctx->db, sbox_wc_path(&b, "A/B/C"),
+ pool, pool));
+
+ /* A/B/C is part of the A->A2 move. */
+ expected_to = sbox_wc_path(&b, "A2");
+ if (strcmp(moved_to, expected_to) != 0)
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "Expected moved to %s, but was %s",
+ expected_to, moved_to);
+
+ SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL, NULL, &moved_to,
+ b.wc_ctx->db, sbox_wc_path(&b, "A2/B/C"),
+ pool, pool));
+
+ /* A2/B/C is the A2/B/C->C2 move. */
+ expected_to = sbox_wc_path(&b, "C2");
+ if (strcmp(moved_to, expected_to) != 0)
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "Expected moved to %s, but was %s",
+ expected_to, moved_to);
+ }
+ {
+ const char *moved_from;
+ const char *expected_from;
+ SVN_ERR(svn_wc__db_scan_moved(&moved_from, NULL, NULL, NULL,
+ b.wc_ctx->db, sbox_wc_path(&b, "C2"),
+ pool, pool));
+
+ /* C2 is the A2/B/C->C2 move. */
+ expected_from = sbox_wc_path(&b, "A2/B/C");
+ if (strcmp(moved_from, expected_from) != 0)
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "Expected moved from %s, but was %s",
+ expected_from, moved_from);
+ }
+
+ {
+ apr_array_header_t *targets = apr_array_make(pool, 2, sizeof(const char *));
+
+ APR_ARRAY_PUSH(targets, const char *) = sbox_wc_path(&b, "A");
+ APR_ARRAY_PUSH(targets, const char *) = sbox_wc_path(&b, "A2");
+
+ SVN_ERR(sbox_wc_commit_ex(&b, targets, svn_depth_empty));
+ }
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "not-present", 2, "A"},
+ {0, "A2", "normal", 2, "A2"},
+ {0, "A2/B", "normal", 2, "A2/B"},
+ {0, "A2/B/C", "normal", 2, "A2/B/C"},
+ {0, "A2/B/C/f", "normal", 2, "A2/B/C/f"},
+ {3, "A2/B/C", "base-deleted", NO_COPY_FROM, "C2"},
+ {3, "A2/B/C/f", "base-deleted", NO_COPY_FROM},
+
+ /* These need to have their copyfrom information updated */
+ {1, "C2", "normal", 2, "A2/B/C", MOVED_HERE},
+ {1, "C2/f", "normal", 2, "A2/B/C/f", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ {
+ const char *moved_to;
+ const char *expected_to;
+ SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL, NULL, &moved_to,
+ b.wc_ctx->db, sbox_wc_path(&b, "A2/B/C"),
+ pool, pool));
+
+ expected_to = sbox_wc_path(&b, "C2");
+
+ if (strcmp(moved_to, expected_to) != 0)
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "Expected moved to %s, but was %s",
+ expected_to, moved_to);
+ }
+
+ {
+ const char *moved_from;
+ const char *expected_from;
+ SVN_ERR(svn_wc__db_scan_moved(&moved_from, NULL, NULL, NULL,
+ b.wc_ctx->db, sbox_wc_path(&b, "C2"),
+ pool, pool));
+
+ expected_from = sbox_wc_path(&b, "A2/B/C");
+
+ if (strcmp(moved_from, expected_from) != 0)
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "Expected moved from %s, but was %s",
+ expected_from, moved_from);
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+nested_move_update2(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "nested_move_update2", opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "P"));
+ SVN_ERR(sbox_wc_mkdir(&b, "P/Q"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_mkdir(&b, "X"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+ SVN_ERR(sbox_wc_move(&b, "A", "A2"));
+ SVN_ERR(sbox_wc_move(&b, "P", "A"));
+ SVN_ERR(sbox_wc_move(&b, "A2", "P"));
+ SVN_ERR(sbox_wc_move(&b, "A/Q", "A/Q2"));
+ SVN_ERR(sbox_wc_move(&b, "P/B", "P/B2"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "P", "normal", 1, "P"},
+ {0, "P/Q", "normal", 1, "P/Q"},
+ {1, "A", "normal", 1, "P", FALSE, "P", TRUE},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/Q", "normal", 1, "P/Q", MOVED_HERE},
+ {1, "P", "normal", 1, "A", FALSE, "A", TRUE},
+ {1, "P/Q", "base-deleted", NO_COPY_FROM},
+ {1, "P/B", "normal", 1, "A/B", MOVED_HERE},
+ {2, "A/Q", "base-deleted", NO_COPY_FROM, "A/Q2"},
+ {2, "A/Q2", "normal", 1, "P/Q", MOVED_HERE},
+ {2, "P/B", "base-deleted", NO_COPY_FROM, "P/B2"},
+ {2, "P/B2", "normal", 1, "A/B", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Update A bumps revisions but only for moves originating in A. In
+ particular A/Q to A/Q2 does not get bumped. */
+ SVN_ERR(sbox_wc_update(&b, "A", 2));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 2, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "P", "normal", 1, "P"},
+ {0, "P/Q", "normal", 1, "P/Q"},
+ {1, "A", "normal", 1, "P", FALSE, "P", TRUE},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/Q", "normal", 1, "P/Q", MOVED_HERE},
+ {1, "P", "normal", 2, "A", FALSE, "A", TRUE},
+ {1, "P/Q", "base-deleted", NO_COPY_FROM},
+ {1, "P/B", "normal", 2, "A/B", MOVED_HERE},
+ {2, "A/Q", "base-deleted", NO_COPY_FROM, "A/Q2"},
+ {2, "A/Q2", "normal", 1, "P/Q", MOVED_HERE},
+ {2, "P/B", "base-deleted", NO_COPY_FROM, "P/B2"},
+ {2, "P/B2", "normal", 2, "A/B", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+check_tree_conflict_repos_path(svn_test__sandbox_t *b,
+ const char *wc_path,
+ const char *repos_path1,
+ const char *repos_path2)
+{
+ svn_skel_t *conflict;
+ svn_wc_operation_t operation;
+ const apr_array_header_t *locations;
+ svn_boolean_t text_conflicted, prop_conflicted, tree_conflicted;
+
+ SVN_ERR(svn_wc__db_read_conflict(&conflict, b->wc_ctx->db,
+ sbox_wc_path(b, wc_path),
+ b->pool, b->pool));
+
+ SVN_ERR(svn_wc__conflict_read_info(&operation, &locations,
+ &text_conflicted, &prop_conflicted,
+ &tree_conflicted,
+ b->wc_ctx->db, b->wc_abspath,
+ conflict, b->pool, b->pool));
+
+ SVN_ERR_ASSERT(tree_conflicted);
+
+ if (repos_path1)
+ {
+ svn_wc_conflict_version_t *version
+ = APR_ARRAY_IDX(locations, 0, svn_wc_conflict_version_t *);
+
+ SVN_ERR_ASSERT(!strcmp(version->path_in_repos, repos_path1));
+ }
+
+ if (repos_path2)
+ {
+ svn_wc_conflict_version_t *version
+ = APR_ARRAY_IDX(locations, 1, svn_wc_conflict_version_t *);
+
+ SVN_ERR_ASSERT(!strcmp(version->path_in_repos, repos_path2));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_update_conflicts(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_update_conflicts", opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "X"));
+ SVN_ERR(sbox_wc_mkdir(&b, "X/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "X/A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "X/A/B/C"));
+ SVN_ERR(sbox_wc_mkdir(&b, "X/A/B/C/D"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_mkdir(&b, "X/A/B/C/D/E"));
+ SVN_ERR(sbox_wc_mkdir(&b, "X/A/B/F"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_switch(&b, "", "/X", svn_depth_infinity));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+ SVN_ERR(sbox_wc_move(&b, "A", "A2"));
+ SVN_ERR(sbox_wc_move(&b, "A2/B/C", "A2/B/C2"));
+ sbox_file_write(&b, "A2/B/F", "obstruction\n");
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, "X"},
+ {0, "A", "normal", 1, "X/A"},
+ {0, "A/B", "normal", 1, "X/A/B"},
+ {0, "A/B/C", "normal", 1, "X/A/B/C"},
+ {0, "A/B/C/D", "normal", 1, "X/A/B/C/D"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C/D", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "X/A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "X/A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 1, "X/A/B/C", MOVED_HERE},
+ {1, "A2/B/C/D", "normal", 1, "X/A/B/C/D", MOVED_HERE},
+ {3, "A2/B/C", "base-deleted", NO_COPY_FROM, "A2/B/C2"},
+ {3, "A2/B/C/D", "base-deleted", NO_COPY_FROM},
+ {3, "A2/B/C2", "normal", 1, "X/A/B/C", MOVED_HERE},
+ {3, "A2/B/C2/D", "normal", 1, "X/A/B/C/D", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_update(&b, "A", 2));
+ SVN_ERR(check_tree_conflict_repos_path(&b, "A", "X/A", "X/A"));
+ SVN_ERR(sbox_wc_resolve(&b, "A", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, "X"},
+ {0, "A", "normal", 2, "X/A"},
+ {0, "A/B", "normal", 2, "X/A/B"},
+ {0, "A/B/C", "normal", 2, "X/A/B/C"},
+ {0, "A/B/C/D", "normal", 2, "X/A/B/C/D"},
+ {0, "A/B/C/D/E", "normal", 2, "X/A/B/C/D/E"},
+ {0, "A/B/F", "normal", 2, "X/A/B/F"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C/D", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C/D/E", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/F", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 2, "X/A", MOVED_HERE},
+ {1, "A2/B", "normal", 2, "X/A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 2, "X/A/B/C", MOVED_HERE},
+ {1, "A2/B/C/D", "normal", 2, "X/A/B/C/D", MOVED_HERE},
+ {1, "A2/B/C/D/E", "normal", 2, "X/A/B/C/D/E", MOVED_HERE},
+ {1, "A2/B/F", "normal", 2, "X/A/B/F", MOVED_HERE},
+ {3, "A2/B/C", "base-deleted", NO_COPY_FROM, "A2/B/C2"},
+ {3, "A2/B/C/D", "base-deleted", NO_COPY_FROM},
+ {3, "A2/B/C/D/E", "base-deleted", NO_COPY_FROM},
+ {3, "A2/B/C2", "normal", 1, "X/A/B/C", MOVED_HERE},
+ {3, "A2/B/C2/D", "normal", 1, "X/A/B/C/D", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(check_tree_conflict_repos_path(&b, "A2/B/C", "X/A/B/C", "X/A/B/C"));
+ SVN_ERR(check_tree_conflict_repos_path(&b, "A2/B/F", NULL, "X/A/B/F"));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_update_delete_mods(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_update_delete_mods", opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/D"));
+ sbox_file_write(&b, "A/B/C/f", "r1 content\n");
+ SVN_ERR(sbox_wc_add(&b, "A/B/C/f"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_delete(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_delete(&b, "A/B/D"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ SVN_ERR(sbox_wc_move(&b, "A/B", "B2"));
+ sbox_file_write(&b, "B2/C/f", "modified content\n");
+ SVN_ERR(sbox_wc_delete(&b, "B2/D"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {0, "A/B/C/f", "normal", 1, "A/B/C/f"},
+ {0, "A/B/D", "normal", 1, "A/B/D"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM, "B2"},
+ {2, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "A/B/C/f", "base-deleted", NO_COPY_FROM},
+ {2, "A/B/D", "base-deleted", NO_COPY_FROM},
+ {1, "B2", "normal", 1, "A/B", MOVED_HERE},
+ {1, "B2/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {1, "B2/C/f", "normal", 1, "A/B/C/f", MOVED_HERE},
+ {1, "B2/D", "normal", 1, "A/B/D", MOVED_HERE},
+ {2, "B2/D", "base-deleted", NO_COPY_FROM},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_update(&b, "A", 2));
+ SVN_ERR(sbox_wc_resolve(&b, "A/B", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 2, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM, "B2"},
+ {1, "B2", "normal", 2, "A/B", MOVED_HERE},
+ {2, "B2/C", "normal", 1, "A/B/C"},
+ {2, "B2/C/f", "normal", 1, "A/B/C/f"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(check_tree_conflict_repos_path(&b, "B2/C", "A/B/C", "A/B/C"));
+ SVN_ERR(check_tree_conflict_repos_path(&b, "B2/D", "A/B/D", "A/B/D"));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+nested_moves2(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "nested_moves2", opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A/A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A/A/A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A/A/A/A/A"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_mkdir(&b, "X"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+
+ SVN_ERR(sbox_wc_move(&b, "A/A/A/A/A/A", "C"));
+ SVN_ERR(sbox_wc_move(&b, "A/A/A/A", "D"));
+ SVN_ERR(sbox_wc_move(&b, "A/A", "E"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 0, ""},
+ {0, "X", "normal", 2, "X"},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/A", "normal", 1, "A/A"},
+ {0, "A/A/A", "normal", 1, "A/A/A"},
+ {0, "A/A/A/A", "normal", 1, "A/A/A/A"},
+ {0, "A/A/A/A/A", "normal", 1, "A/A/A/A/A"},
+ {0, "A/A/A/A/A/A", "normal", 1, "A/A/A/A/A/A"},
+ {2, "A/A", "base-deleted", NO_COPY_FROM, "E"},
+ {2, "A/A/A", "base-deleted", NO_COPY_FROM},
+ {2, "A/A/A/A", "base-deleted", NO_COPY_FROM},
+ {2, "A/A/A/A/A", "base-deleted", NO_COPY_FROM},
+ {2, "A/A/A/A/A/A", "base-deleted", NO_COPY_FROM},
+ {1, "E", "normal", 1, "A/A", MOVED_HERE},
+ {1, "E/A", "normal", 1, "A/A/A", MOVED_HERE},
+ {1, "E/A/A", "normal", 1, "A/A/A/A", MOVED_HERE},
+ {1, "E/A/A/A", "normal", 1, "A/A/A/A/A", MOVED_HERE},
+ {1, "E/A/A/A/A", "normal", 1, "A/A/A/A/A/A", MOVED_HERE},
+ {3, "E/A/A", "base-deleted", NO_COPY_FROM, "D"},
+ {3, "E/A/A/A", "base-deleted", NO_COPY_FROM},
+ {3, "E/A/A/A/A", "base-deleted", NO_COPY_FROM},
+ {1, "D", "normal", 1, "A/A/A/A", MOVED_HERE},
+ {1, "D/A", "normal", 1, "A/A/A/A/A", MOVED_HERE},
+ {1, "D/A/A", "normal", 1, "A/A/A/A/A/A", MOVED_HERE},
+ {3, "D/A/A", "base-deleted", NO_COPY_FROM, "C"},
+ {1, "C", "normal", 1, "A/A/A/A/A/A", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_update(&b, "A", 2));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 0, ""},
+ {0, "X", "normal", 2, "X"},
+ {0, "A", "normal", 2, "A"},
+ {0, "A/A", "normal", 2, "A/A"},
+ {0, "A/A/A", "normal", 2, "A/A/A"},
+ {0, "A/A/A/A", "normal", 2, "A/A/A/A"},
+ {0, "A/A/A/A/A", "normal", 2, "A/A/A/A/A"},
+ {0, "A/A/A/A/A/A", "normal", 2, "A/A/A/A/A/A"},
+ {2, "A/A", "base-deleted", NO_COPY_FROM, "E"},
+ {2, "A/A/A", "base-deleted", NO_COPY_FROM},
+ {2, "A/A/A/A", "base-deleted", NO_COPY_FROM},
+ {2, "A/A/A/A/A", "base-deleted", NO_COPY_FROM},
+ {2, "A/A/A/A/A/A", "base-deleted", NO_COPY_FROM},
+ {1, "E", "normal", 2, "A/A", MOVED_HERE},
+ {1, "E/A", "normal", 2, "A/A/A", MOVED_HERE},
+ {1, "E/A/A", "normal", 2, "A/A/A/A", MOVED_HERE},
+ {1, "E/A/A/A", "normal", 2, "A/A/A/A/A", MOVED_HERE},
+ {1, "E/A/A/A/A", "normal", 2, "A/A/A/A/A/A", MOVED_HERE},
+ {3, "E/A/A", "base-deleted", NO_COPY_FROM, "D"},
+ {3, "E/A/A/A", "base-deleted", NO_COPY_FROM},
+ {3, "E/A/A/A/A", "base-deleted", NO_COPY_FROM},
+ {1, "D", "normal", 2, "A/A/A/A", MOVED_HERE},
+ {1, "D/A", "normal", 2, "A/A/A/A/A", MOVED_HERE},
+ {1, "D/A/A", "normal", 2, "A/A/A/A/A/A", MOVED_HERE},
+ {3, "D/A/A", "base-deleted", NO_COPY_FROM, "C"},
+ {1, "C", "normal", 2, "A/A/A/A/A/A", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_in_delete(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_in_delete", opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C/D"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C/D/E"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_mkdir(&b, "X"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ SVN_ERR(sbox_wc_move(&b, "A/B/C", "C2"));
+ SVN_ERR(sbox_wc_delete(&b, "A/B"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM},
+ {2, "A/B/C", "base-deleted", NO_COPY_FROM, "C2"},
+ {1, "C2", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_update(&b, "", 2));
+ SVN_ERR(sbox_wc_resolve(&b, "A/B", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ SVN_ERR(sbox_wc_resolve(&b, "A/B/C", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 2, ""},
+ {0, "A", "normal", 2, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "A/B/C", "normal", 2, "A/B/C"},
+ {0, "A/B/C/D", "normal", 2, "A/B/C/D"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM},
+ {2, "A/B/C", "base-deleted", NO_COPY_FROM, "C2"},
+ {2, "A/B/C/D", "base-deleted", NO_COPY_FROM},
+ {1, "C2", "normal", 2, "A/B/C", MOVED_HERE},
+ {1, "C2/D", "normal", 2, "A/B/C/D", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_update(&b, "", 3));
+ SVN_ERR(sbox_wc_revert(&b, "A/B", svn_depth_empty));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 3, ""},
+ {0, "A", "normal", 3, "A"},
+ {0, "A/B", "normal", 3, "A/B"},
+ {0, "A/B/C", "normal", 3, "A/B/C"},
+ {0, "A/B/C/D", "normal", 3, "A/B/C/D"},
+ {0, "A/B/C/D/E", "normal", 3, "A/B/C/D/E"},
+ {3, "A/B/C", "base-deleted", NO_COPY_FROM, "C2"},
+ {3, "A/B/C/D", "base-deleted", NO_COPY_FROM},
+ {3, "A/B/C/D/E", "base-deleted", NO_COPY_FROM},
+ {1, "C2", "normal", 2, "A/B/C", MOVED_HERE},
+ {1, "C2/D", "normal", 2, "A/B/C/D", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Revert should have left a tree-conflict (or broken the move). */
+ SVN_ERR(sbox_wc_resolve(&b, "A/B/C", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 3, ""},
+ {0, "A", "normal", 3, "A"},
+ {0, "A/B", "normal", 3, "A/B"},
+ {0, "A/B/C", "normal", 3, "A/B/C"},
+ {0, "A/B/C/D", "normal", 3, "A/B/C/D"},
+ {0, "A/B/C/D/E", "normal", 3, "A/B/C/D/E"},
+ {3, "A/B/C", "base-deleted", NO_COPY_FROM, "C2"},
+ {3, "A/B/C/D", "base-deleted", NO_COPY_FROM},
+ {3, "A/B/C/D/E", "base-deleted", NO_COPY_FROM},
+ {1, "C2", "normal", 3, "A/B/C", MOVED_HERE},
+ {1, "C2/D", "normal", 3, "A/B/C/D", MOVED_HERE},
+ {1, "C2/D/E", "normal", 3, "A/B/C/D/E", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+switch_move(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "switch_move", opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/D"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/D/E"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_copy(&b, "A", "X"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_mkdir(&b, "X/B/D/E/F"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_switch(&b, "", "/A", svn_depth_infinity));
+ SVN_ERR(sbox_wc_update(&b, "", 2));
+
+ SVN_ERR(sbox_wc_move(&b, "B/C", "C2"));
+ SVN_ERR(sbox_wc_move(&b, "B/D", "D2"));
+ SVN_ERR(sbox_wc_move(&b, "D2/E", "D2/E2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 2, "A"},
+ {0, "B", "normal", 2, "A/B"},
+ {0, "B/C", "normal", 2, "A/B/C"},
+ {0, "B/D", "normal", 2, "A/B/D"},
+ {0, "B/D/E", "normal", 2, "A/B/D/E"},
+ {2, "B/C", "base-deleted", NO_COPY_FROM, "C2"},
+ {2, "B/D", "base-deleted", NO_COPY_FROM, "D2"},
+ {2, "B/D/E", "base-deleted", NO_COPY_FROM},
+ {1, "C2", "normal", 2, "A/B/C", MOVED_HERE},
+ {1, "D2", "normal", 2, "A/B/D", MOVED_HERE},
+ {1, "D2/E", "normal", 2, "A/B/D/E", MOVED_HERE},
+ {2, "D2/E", "base-deleted", NO_COPY_FROM, "D2/E2"},
+ {2, "D2/E2", "normal", 2, "A/B/D/E", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Switch "bumps" revisions and paths and raises conflicts just like
+ update. */
+ SVN_ERR(sbox_wc_switch(&b, "", "/X", svn_depth_infinity));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 3, "X"},
+ {0, "B", "normal", 3, "X/B"},
+ {0, "B/C", "normal", 3, "X/B/C"},
+ {0, "B/D", "normal", 3, "X/B/D"},
+ {0, "B/D/E", "normal", 3, "X/B/D/E"},
+ {0, "B/D/E/F", "normal", 3, "X/B/D/E/F"},
+ {2, "B/C", "base-deleted", NO_COPY_FROM, "C2"},
+ {2, "B/D", "base-deleted", NO_COPY_FROM, "D2"},
+ {2, "B/D/E", "base-deleted", NO_COPY_FROM},
+ {2, "B/D/E/F", "base-deleted", NO_COPY_FROM},
+ {1, "C2", "normal", 3, "X/B/C", MOVED_HERE},
+ {1, "D2", "normal", 2, "A/B/D", MOVED_HERE},
+ {1, "D2/E", "normal", 2, "A/B/D/E", MOVED_HERE},
+ {2, "D2/E", "base-deleted", NO_COPY_FROM, "D2/E2"},
+ {2, "D2/E2", "normal", 2, "A/B/D/E", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Conflicts from switch are resolved just like those from update. */
+ SVN_ERR(sbox_wc_resolve(&b, "B/D", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 3, "X"},
+ {0, "B", "normal", 3, "X/B"},
+ {0, "B/C", "normal", 3, "X/B/C"},
+ {0, "B/D", "normal", 3, "X/B/D"},
+ {0, "B/D/E", "normal", 3, "X/B/D/E"},
+ {0, "B/D/E/F", "normal", 3, "X/B/D/E/F"},
+ {2, "B/C", "base-deleted", NO_COPY_FROM, "C2"},
+ {2, "B/D", "base-deleted", NO_COPY_FROM, "D2"},
+ {2, "B/D/E", "base-deleted", NO_COPY_FROM},
+ {2, "B/D/E/F", "base-deleted", NO_COPY_FROM},
+ {1, "C2", "normal", 3, "X/B/C", MOVED_HERE},
+ {1, "D2", "normal", 3, "X/B/D", MOVED_HERE},
+ {1, "D2/E", "normal", 3, "X/B/D/E", MOVED_HERE},
+ {1, "D2/E/F", "normal", 3, "X/B/D/E/F", MOVED_HERE},
+ {2, "D2/E", "base-deleted", NO_COPY_FROM, "D2/E2"},
+ {2, "D2/E/F", "base-deleted", NO_COPY_FROM},
+ {2, "D2/E2", "normal", 2, "A/B/D/E", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_resolve(&b, "D2/E", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 3, "X"},
+ {0, "B", "normal", 3, "X/B"},
+ {0, "B/C", "normal", 3, "X/B/C"},
+ {0, "B/D", "normal", 3, "X/B/D"},
+ {0, "B/D/E", "normal", 3, "X/B/D/E"},
+ {0, "B/D/E/F", "normal", 3, "X/B/D/E/F"},
+ {2, "B/C", "base-deleted", NO_COPY_FROM, "C2"},
+ {2, "B/D", "base-deleted", NO_COPY_FROM, "D2"},
+ {2, "B/D/E", "base-deleted", NO_COPY_FROM},
+ {2, "B/D/E/F", "base-deleted", NO_COPY_FROM},
+ {1, "C2", "normal", 3, "X/B/C", MOVED_HERE},
+ {1, "D2", "normal", 3, "X/B/D", MOVED_HERE},
+ {1, "D2/E", "normal", 3, "X/B/D/E", MOVED_HERE},
+ {1, "D2/E/F", "normal", 3, "X/B/D/E/F", MOVED_HERE},
+ {2, "D2/E", "base-deleted", NO_COPY_FROM, "D2/E2"},
+ {2, "D2/E/F", "base-deleted", NO_COPY_FROM},
+ {2, "D2/E2", "normal", 3, "X/B/D/E", MOVED_HERE},
+ {2, "D2/E2/F", "normal", 3, "X/B/D/E/F", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_replace(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_replace", opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "B"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_mkdir(&b, "B/X"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ SVN_ERR(sbox_wc_move(&b, "A", "X"));
+ SVN_ERR(sbox_wc_move(&b, "B", "A"));
+ SVN_ERR(sbox_wc_move(&b, "X", "B"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "B", "normal", 1, "B"},
+ {1, "A", "normal", 1, "B", FALSE, "B", TRUE},
+ {1, "B", "normal", 1, "A", FALSE, "A", TRUE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_update(&b, "", 2));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 2, ""},
+ {0, "A", "normal", 2, "A"},
+ {0, "B", "normal", 2, "B"},
+ {0, "B/X", "normal", 2, "B/X"},
+ {1, "A", "normal", 1, "B", FALSE, "B", TRUE},
+ {1, "B", "normal", 2, "A", FALSE, "A", TRUE},
+ {1, "B/X", "base-deleted", NO_COPY_FROM},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_resolve(&b, "B", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 2, ""},
+ {0, "A", "normal", 2, "A"},
+ {0, "B", "normal", 2, "B"},
+ {0, "B/X", "normal", 2, "B/X"},
+ {1, "A", "normal", 2, "B", FALSE, "B", TRUE},
+ {1, "A/X", "normal", 2, "B/X", MOVED_HERE},
+ {1, "B", "normal", 2, "A", FALSE, "A", TRUE},
+ {1, "B/X", "base-deleted", NO_COPY_FROM},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+layered_moved_to(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+ svn_error_t *err;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "layered_moved_to", opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C/D"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C/D/E"));
+ SVN_ERR(sbox_wc_mkdir(&b, "C"));
+ SVN_ERR(sbox_wc_mkdir(&b, "C/D"));
+ SVN_ERR(sbox_wc_mkdir(&b, "C/D/E"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_propset(&b, "property", "value", "A/B/C/D/E"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_propset(&b, "property", "value", "C/D/E"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_mkdir(&b, "P"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_propset(&b, "property2", "value", "A/B/C/D/E"));
+ SVN_ERR(sbox_wc_propset(&b, "property2", "value", "C/D/E"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ SVN_ERR(sbox_wc_move(&b, "A", "X"));
+ SVN_ERR(sbox_wc_move(&b, "X/B/C/D/E", "E2"));
+ SVN_ERR(sbox_wc_delete(&b, "X/B/C"));
+ SVN_ERR(sbox_wc_move(&b, "C", "X/B/C"));
+ SVN_ERR(sbox_wc_move(&b, "X/B/C/D/E", "E3"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {0, "A/B/C/D", "normal", 1, "A/B/C/D"},
+ {0, "A/B/C/D/E", "normal", 1, "A/B/C/D/E"},
+ {0, "C", "normal", 1, "C"},
+ {0, "C/D", "normal", 1, "C/D"},
+ {0, "C/D/E", "normal", 1, "C/D/E"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "X"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C/D", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C/D/E", "base-deleted", NO_COPY_FROM},
+ {1, "C", "base-deleted", NO_COPY_FROM, "X/B/C"},
+ {1, "C/D", "base-deleted", NO_COPY_FROM},
+ {1, "C/D/E", "base-deleted", NO_COPY_FROM},
+ {1, "X", "normal", 1, "A", MOVED_HERE},
+ {1, "X/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "X/B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {1, "X/B/C/D", "normal", 1, "A/B/C/D", MOVED_HERE},
+ {1, "X/B/C/D/E", "normal", 1, "A/B/C/D/E", MOVED_HERE},
+ {3, "X/B/C", "normal", 1, "C", MOVED_HERE},
+ {3, "X/B/C/D", "normal", 1, "C/D", MOVED_HERE},
+ {3, "X/B/C/D/E", "normal", 1, "C/D/E", FALSE, "E2", TRUE},
+ {5, "X/B/C/D/E", "base-deleted", NO_COPY_FROM, "E3"},
+ {1, "E2", "normal", 1, "A/B/C/D/E", MOVED_HERE},
+ {1, "E3", "normal", 1, "C/D/E", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_update(&b, "A", 2));
+ SVN_ERR(sbox_wc_resolve(&b, "A", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ SVN_ERR(sbox_wc_resolve(&b, "X/B/C", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ SVN_ERR(sbox_wc_resolve(&b, "X/B/C/D/E", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 2, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "A/B/C", "normal", 2, "A/B/C"},
+ {0, "A/B/C/D", "normal", 2, "A/B/C/D"},
+ {0, "A/B/C/D/E", "normal", 2, "A/B/C/D/E"},
+ {0, "C", "normal", 1, "C"},
+ {0, "C/D", "normal", 1, "C/D"},
+ {0, "C/D/E", "normal", 1, "C/D/E"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "X"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C/D", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C/D/E", "base-deleted", NO_COPY_FROM},
+ {1, "C", "base-deleted", NO_COPY_FROM, "X/B/C"},
+ {1, "C/D", "base-deleted", NO_COPY_FROM},
+ {1, "C/D/E", "base-deleted", NO_COPY_FROM},
+ {1, "X", "normal", 2, "A", MOVED_HERE},
+ {1, "X/B", "normal", 2, "A/B", MOVED_HERE},
+ {1, "X/B/C", "normal", 2, "A/B/C", MOVED_HERE},
+ {1, "X/B/C/D", "normal", 2, "A/B/C/D", MOVED_HERE},
+ {1, "X/B/C/D/E", "normal", 2, "A/B/C/D/E", MOVED_HERE},
+ {3, "X/B/C", "normal", 1, "C", MOVED_HERE},
+ {3, "X/B/C/D", "normal", 1, "C/D", MOVED_HERE},
+ {3, "X/B/C/D/E", "normal", 1, "C/D/E", FALSE, "E2", TRUE},
+ {5, "X/B/C/D/E", "base-deleted", NO_COPY_FROM, "E3"},
+ {1, "E2", "normal", 2, "A/B/C/D/E", MOVED_HERE},
+ {1, "E3", "normal", 1, "C/D/E", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_update(&b, "C", 3));
+ SVN_ERR(sbox_wc_resolve(&b, "C", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ SVN_ERR(sbox_wc_resolve(&b, "X/B/C/D/E", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 2, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "A/B/C", "normal", 2, "A/B/C"},
+ {0, "A/B/C/D", "normal", 2, "A/B/C/D"},
+ {0, "A/B/C/D/E", "normal", 2, "A/B/C/D/E"},
+ {0, "C", "normal", 3, "C"},
+ {0, "C/D", "normal", 3, "C/D"},
+ {0, "C/D/E", "normal", 3, "C/D/E"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "X"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C/D", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C/D/E", "base-deleted", NO_COPY_FROM},
+ {1, "C", "base-deleted", NO_COPY_FROM, "X/B/C"},
+ {1, "C/D", "base-deleted", NO_COPY_FROM},
+ {1, "C/D/E", "base-deleted", NO_COPY_FROM},
+ {1, "X", "normal", 2, "A", MOVED_HERE},
+ {1, "X/B", "normal", 2, "A/B", MOVED_HERE},
+ {1, "X/B/C", "normal", 2, "A/B/C", MOVED_HERE},
+ {1, "X/B/C/D", "normal", 2, "A/B/C/D", MOVED_HERE},
+ {1, "X/B/C/D/E", "normal", 2, "A/B/C/D/E", MOVED_HERE},
+ {3, "X/B/C", "normal", 3, "C", MOVED_HERE},
+ {3, "X/B/C/D", "normal", 3, "C/D", MOVED_HERE},
+ {3, "X/B/C/D/E", "normal", 3, "C/D/E", FALSE, "E2", TRUE},
+ {5, "X/B/C/D/E", "base-deleted", NO_COPY_FROM, "E3"},
+ {1, "E2", "normal", 2, "A/B/C/D/E", MOVED_HERE},
+ {1, "E3", "normal", 3, "C/D/E", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* An update with no text/property/tree changes in A, just a revision bump. */
+ SVN_ERR(sbox_wc_update(&b, "A", 4));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 4, "A"},
+ {0, "A/B", "normal", 4, "A/B"},
+ {0, "A/B/C", "normal", 4, "A/B/C"},
+ {0, "A/B/C/D", "normal", 4, "A/B/C/D"},
+ {0, "A/B/C/D/E", "normal", 4, "A/B/C/D/E"},
+ {0, "C", "normal", 3, "C"},
+ {0, "C/D", "normal", 3, "C/D"},
+ {0, "C/D/E", "normal", 3, "C/D/E"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "X"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C/D", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C/D/E", "base-deleted", NO_COPY_FROM},
+ {1, "C", "base-deleted", NO_COPY_FROM, "X/B/C"},
+ {1, "C/D", "base-deleted", NO_COPY_FROM},
+ {1, "C/D/E", "base-deleted", NO_COPY_FROM},
+ {1, "X", "normal", 4, "A", MOVED_HERE},
+ {1, "X/B", "normal", 4, "A/B", MOVED_HERE},
+ {1, "X/B/C", "normal", 4, "A/B/C", MOVED_HERE},
+ {1, "X/B/C/D", "normal", 4, "A/B/C/D", MOVED_HERE},
+ {1, "X/B/C/D/E", "normal", 4, "A/B/C/D/E", MOVED_HERE},
+ {3, "X/B/C", "normal", 3, "C", MOVED_HERE},
+ {3, "X/B/C/D", "normal", 3, "C/D", MOVED_HERE},
+ {3, "X/B/C/D/E", "normal", 3, "C/D/E", FALSE, "E2", TRUE},
+ {5, "X/B/C/D/E", "base-deleted", NO_COPY_FROM, "E3"},
+ {1, "E2", "normal", 4, "A/B/C/D/E", MOVED_HERE},
+ {1, "E3", "normal", 3, "C/D/E", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Update for conflicts on A and C */
+ SVN_ERR(sbox_wc_update(&b, "", 5));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 5, ""},
+ {0, "A", "normal", 5, "A"},
+ {0, "A/B", "normal", 5, "A/B"},
+ {0, "A/B/C", "normal", 5, "A/B/C"},
+ {0, "A/B/C/D", "normal", 5, "A/B/C/D"},
+ {0, "A/B/C/D/E", "normal", 5, "A/B/C/D/E"},
+ {0, "P", "normal", 5, "P"},
+ {0, "C", "normal", 5, "C"},
+ {0, "C/D", "normal", 5, "C/D"},
+ {0, "C/D/E", "normal", 5, "C/D/E"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "X"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C/D", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C/D/E", "base-deleted", NO_COPY_FROM},
+ {1, "C", "base-deleted", NO_COPY_FROM, "X/B/C"},
+ {1, "C/D", "base-deleted", NO_COPY_FROM},
+ {1, "C/D/E", "base-deleted", NO_COPY_FROM},
+ {1, "X", "normal", 4, "A", MOVED_HERE},
+ {1, "X/B", "normal", 4, "A/B", MOVED_HERE},
+ {1, "X/B/C", "normal", 4, "A/B/C", MOVED_HERE},
+ {1, "X/B/C/D", "normal", 4, "A/B/C/D", MOVED_HERE},
+ {1, "X/B/C/D/E", "normal", 4, "A/B/C/D/E", MOVED_HERE},
+ {3, "X/B/C", "normal", 3, "C", MOVED_HERE},
+ {3, "X/B/C/D", "normal", 3, "C/D", MOVED_HERE},
+ {3, "X/B/C/D/E", "normal", 3, "C/D/E", FALSE, "E2", TRUE},
+ {5, "X/B/C/D/E", "base-deleted", NO_COPY_FROM, "E3"},
+ {1, "E2", "normal", 4, "A/B/C/D/E", MOVED_HERE},
+ {1, "E3", "normal", 3, "C/D/E", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Partially resolve A */
+ SVN_ERR(sbox_wc_resolve(&b, "A", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ SVN_ERR(sbox_wc_resolve(&b, "X/B/C", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+
+ /* Cannot resolve C */
+ err = sbox_wc_resolve(&b, "C", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict);
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE);
+
+ /* Complete resolving A and then resolve C */
+ SVN_ERR(sbox_wc_resolve(&b, "X/B/C/D/E", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ SVN_ERR(sbox_wc_resolve(&b, "C", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 5, ""},
+ {0, "A", "normal", 5, "A"},
+ {0, "A/B", "normal", 5, "A/B"},
+ {0, "A/B/C", "normal", 5, "A/B/C"},
+ {0, "A/B/C/D", "normal", 5, "A/B/C/D"},
+ {0, "A/B/C/D/E", "normal", 5, "A/B/C/D/E"},
+ {0, "P", "normal", 5, "P"},
+ {0, "C", "normal", 5, "C"},
+ {0, "C/D", "normal", 5, "C/D"},
+ {0, "C/D/E", "normal", 5, "C/D/E"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "X"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C/D", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C/D/E", "base-deleted", NO_COPY_FROM},
+ {1, "C", "base-deleted", NO_COPY_FROM, "X/B/C"},
+ {1, "C/D", "base-deleted", NO_COPY_FROM},
+ {1, "C/D/E", "base-deleted", NO_COPY_FROM},
+ {1, "X", "normal", 5, "A", MOVED_HERE},
+ {1, "X/B", "normal", 5, "A/B", MOVED_HERE},
+ {1, "X/B/C", "normal", 5, "A/B/C", MOVED_HERE},
+ {1, "X/B/C/D", "normal", 5, "A/B/C/D", MOVED_HERE},
+ {1, "X/B/C/D/E", "normal", 5, "A/B/C/D/E", MOVED_HERE},
+ {3, "X/B/C", "normal", 5, "C", MOVED_HERE},
+ {3, "X/B/C/D", "normal", 5, "C/D", MOVED_HERE},
+ {3, "X/B/C/D/E", "normal", 5, "C/D/E", FALSE, "E2", TRUE},
+ {5, "X/B/C/D/E", "base-deleted", NO_COPY_FROM, "E3"},
+ {1, "E2", "normal", 5, "A/B/C/D/E", MOVED_HERE},
+ {1, "E3", "normal", 3, "C/D/E", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+update_within_move(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+ svn_error_t *err;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "update_within_move", opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C/D"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ SVN_ERR(sbox_wc_move(&b, "A", "X"));
+ SVN_ERR(sbox_wc_update(&b, "A/B/C", 2));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 2, "A/B/C"},
+ {0, "A/B/C/D", "normal", 2, "A/B/C/D"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "X"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C/D", "base-deleted", NO_COPY_FROM},
+ {1, "X", "normal", 1, "A", MOVED_HERE},
+ {1, "X/B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "X/B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Can't resolve mixed-revision source to mine-conflict. */
+ err = sbox_wc_resolve(&b, "A", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict);
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE);
+
+ SVN_ERR(sbox_wc_resolve(&b, "A", svn_depth_empty,
+ svn_wc_conflict_choose_merged));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 2, "A/B/C"},
+ {0, "A/B/C/D", "normal", 2, "A/B/C/D"},
+ {1, "A", "base-deleted", NO_COPY_FROM},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C/D", "base-deleted", NO_COPY_FROM},
+ {1, "X", "normal", 1, "A"},
+ {1, "X/B", "normal", 1, "A/B"},
+ {1, "X/B/C", "normal", 1, "A/B/C"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+commit_moved_descendant(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+ SVN_ERR(svn_test__sandbox_create(&b, "commit_moved_descendant", opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A/A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A/A/A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A/A/A/A/A"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_copy(&b, "A", "A_copied"));
+ SVN_ERR(sbox_wc_move(&b, "A/A/A", "AAA_moved"));
+ SVN_ERR(sbox_wc_delete(&b, "A/A"));
+ SVN_ERR(sbox_wc_copy(&b, "A_copied/A", "A/A"));
+
+ /* And now I want to commit AAA_moved (the entire move), but not
+ the replacement of A/A */
+
+ /* For now, just start committing directly */
+ /* ### This fails, because A/A/A is not collected by the commit
+ harvester (it doesn't need committing, but our move filter
+ blocks on it) */
+ SVN_ERR(sbox_wc_commit(&b, ""));
+
+ /* It would be nicer if we could just do a: */
+ /* SVN_ERR(sbox_wc_commit(&b, "AAA_moved")); */
+ /* Which then includes the delete half of the move, when it is
+ shadowed, like in this case. The commit processing doesn't
+ support this yet though*/
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+commit_moved_away_descendant(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+ SVN_ERR(svn_test__sandbox_create(&b, "commit_moved_away_descendant",
+ opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A/A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A/A/A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A/A/A/A/A"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_copy(&b, "A", "A_copied"));
+ SVN_ERR(sbox_wc_move(&b, "A/A/A", "AAA_moved"));
+ SVN_ERR(sbox_wc_delete(&b, "A/A"));
+ SVN_ERR(sbox_wc_copy(&b, "A_copied/A", "A/A"));
+
+ /* And now I want to make sure that I can't commit A, without also
+ committing AAA_moved, as that would break the move*/
+ SVN_ERR(sbox_wc_commit(&b, "A"));
+
+ return svn_error_create(SVN_ERR_TEST_FAILED, NULL,
+ "The commit should have failed");
+
+ /*return SVN_NO_ERROR;*/
+}
+
+static svn_error_t *
+finite_move_update_bump(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+ svn_error_t *err;
+ SVN_ERR(svn_test__sandbox_create(&b, "finite_move_update_bump",
+ opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_mkdir(&b, "P"));
+ SVN_ERR(sbox_wc_mkdir(&b, "P/Q"));
+ sbox_file_write(&b, "P/Q/f", "r1 content\n");
+ SVN_ERR(sbox_wc_add(&b, "P/Q/f"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_mkdir(&b, "X"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ SVN_ERR(sbox_wc_move(&b, "A/B", "B2"));
+ SVN_ERR(sbox_wc_update(&b, "A/B/C", 2));
+ SVN_ERR(check_tree_conflict_repos_path(&b, "A/B", NULL, NULL));
+ err = sbox_wc_resolve(&b, "A/B", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict);
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE);
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 2, "A/B/C"},
+ {0, "P", "normal", 1, "P"},
+ {0, "P/Q", "normal", 1, "P/Q"},
+ {0, "P/Q/f", "normal", 1, "P/Q/f"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM, "B2"},
+ {2, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "B2", "normal", 1, "A/B", MOVED_HERE},
+ {1, "B2/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_revert(&b, "", svn_depth_infinity));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+ SVN_ERR(sbox_wc_move(&b, "A/B", "B2"));
+ SVN_ERR(sbox_wc_move(&b, "P/Q", "Q2"));
+ SVN_ERR(sbox_wc_update_depth(&b, "A/B", 2, svn_depth_files, FALSE));
+ SVN_ERR(sbox_wc_update_depth(&b, "P/Q", 2, svn_depth_files, FALSE));
+ SVN_ERR(check_tree_conflict_repos_path(&b, "A/B", NULL, NULL));
+ err = sbox_wc_resolve(&b, "A/B", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict);
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE);
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {0, "P", "normal", 1, "P"},
+ {0, "P/Q", "normal", 2, "P/Q"},
+ {0, "P/Q/f", "normal", 2, "P/Q/f"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM, "B2"},
+ {2, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "P/Q", "base-deleted", NO_COPY_FROM, "Q2"},
+ {2, "P/Q/f", "base-deleted", NO_COPY_FROM},
+ {1, "B2", "normal", 1, "A/B", MOVED_HERE},
+ {1, "B2/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {1, "Q2", "normal", 2, "P/Q", MOVED_HERE},
+ {1, "Q2/f", "normal", 2, "P/Q/f", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_revert(&b, "", svn_depth_infinity));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+ SVN_ERR(sbox_wc_move(&b, "A/B", "B2"));
+ SVN_ERR(sbox_wc_move(&b, "P", "P2"));
+ SVN_ERR(sbox_wc_update_depth(&b, "A/B", 2, svn_depth_immediates, FALSE));
+ SVN_ERR(sbox_wc_update_depth(&b, "P", 2, svn_depth_immediates, FALSE));
+ SVN_ERR(check_tree_conflict_repos_path(&b, "P", NULL, NULL));
+ err = sbox_wc_resolve(&b, "P", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict);
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE);
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "A/B/C", "normal", 2, "A/B/C"},
+ {0, "P", "normal", 2, "P"},
+ {0, "P/Q", "normal", 2, "P/Q"},
+ {0, "P/Q/f", "normal", 1, "P/Q/f"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM, "B2"},
+ {2, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "P", "base-deleted", NO_COPY_FROM, "P2"},
+ {1, "P/Q", "base-deleted", NO_COPY_FROM},
+ {1, "P/Q/f", "base-deleted", NO_COPY_FROM},
+ {1, "B2", "normal", 2, "A/B", MOVED_HERE},
+ {1, "B2/C", "normal", 2, "A/B/C", MOVED_HERE},
+ {1, "P2", "normal", 1, "P", MOVED_HERE},
+ {1, "P2/Q", "normal", 1, "P/Q", MOVED_HERE},
+ {1, "P2/Q/f", "normal", 1, "P/Q/f", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_revert(&b, "", svn_depth_infinity));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+ SVN_ERR(sbox_wc_move(&b, "A/B/C", "C2"));
+ SVN_ERR(sbox_wc_move(&b, "P/Q", "Q2"));
+ SVN_ERR(sbox_wc_update_depth(&b, "A/B/C", 2, svn_depth_empty, FALSE));
+ SVN_ERR(sbox_wc_update_depth(&b, "P/Q", 2, svn_depth_empty, FALSE));
+ SVN_ERR(check_tree_conflict_repos_path(&b, "P/Q", NULL, NULL));
+ err = sbox_wc_resolve(&b, "P/Q", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict);
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE);
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 2, "A/B/C"},
+ {0, "P", "normal", 1, "P"},
+ {0, "P/Q", "normal", 2, "P/Q"},
+ {0, "P/Q/f", "normal", 1, "P/Q/f"},
+ {3, "A/B/C", "base-deleted", NO_COPY_FROM, "C2"},
+ {2, "P/Q", "base-deleted", NO_COPY_FROM, "Q2"},
+ {2, "P/Q/f", "base-deleted", NO_COPY_FROM},
+ {1, "C2", "normal", 2, "A/B/C", MOVED_HERE},
+ {1, "Q2", "normal", 1, "P/Q", MOVED_HERE},
+ {1, "Q2/f", "normal", 1, "P/Q/f", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_away_delete_update(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+ SVN_ERR(svn_test__sandbox_create(&b, "move_away_delete_update",
+ opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_mkdir(&b, "P"));
+ SVN_ERR(sbox_wc_mkdir(&b, "P/Q"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_delete(&b, "A/B"));
+ SVN_ERR(sbox_wc_delete(&b, "P/Q"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+ SVN_ERR(sbox_wc_move(&b, "A/B/C", "C2"));
+ SVN_ERR(sbox_wc_move(&b, "P/Q", "Q2"));
+
+ /* Update to r2 removes the move sources and clears moved_here from
+ the move destinations. */
+ SVN_ERR(sbox_wc_update(&b, "", 2));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 2, ""},
+ {0, "A", "normal", 2, "A"},
+ {0, "P", "normal", 2, "P"},
+ {1, "C2", "normal", 1, "A/B/C"},
+ {1, "Q2", "normal", 1, "P/Q"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_not_present_variants(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+ SVN_ERR(svn_test__sandbox_create(&b, "move_not_present_variants",
+ opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "B/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "C"));
+ SVN_ERR(sbox_wc_mkdir(&b, "C/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "D"));
+ SVN_ERR(sbox_wc_mkdir(&b, "D/B"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ SVN_ERR(sbox_wc_delete(&b, "A/B"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+
+ SVN_ERR(sbox_wc_delete(&b, "B/B"));
+ SVN_ERR(sbox_wc_update(&b, "C/B", 0));
+ SVN_ERR(sbox_wc_exclude(&b, "D/B"));
+
+ SVN_ERR(sbox_wc_copy(&b, "A", "cA"));
+ SVN_ERR(sbox_wc_copy(&b, "B", "cB"));
+ SVN_ERR(sbox_wc_copy(&b, "C", "cC"));
+ SVN_ERR(sbox_wc_copy(&b, "D", "cD"));
+
+ SVN_ERR(sbox_wc_copy(&b, "cA", "ccA"));
+ SVN_ERR(sbox_wc_copy(&b, "cB", "ccB"));
+ SVN_ERR(sbox_wc_copy(&b, "cC", "ccC"));
+ SVN_ERR(sbox_wc_copy(&b, "cD", "ccD"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+
+ /* Copy of a deleted + committed node */
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "not-present", 2, "A/B"},
+
+ {1, "cA", "normal", 1, "A"},
+ {1, "cA/B", "not-present", 2, "A/B"},
+
+ {1, "ccA", "normal", 1, "A"},
+ {1, "ccA/B", "not-present", 2, "A/B"},
+
+ /* Copy of a local deleted node */
+ {0, "B", "normal", 1, "B"},
+ {0, "B/B", "normal", 1, "B/B"},
+ {2, "B/B", "base-deleted", NO_COPY_FROM},
+
+ {1, "cB", "normal", 1, "B",},
+ {1, "cB/B", "normal", 1, "B/B"},
+ {2, "cB/B", "base-deleted", NO_COPY_FROM},
+
+ {1, "ccB", "normal", 1, "B"},
+ {1, "ccB/B", "normal", 1, "B/B"},
+ {2, "ccB/B", "base-deleted", NO_COPY_FROM},
+
+ /* Copy of a to r0 updated node */
+ {0, "C", "normal", 1, "C"},
+ {0, "C/B", "not-present", 0, "C/B"},
+
+ {1, "cC", "normal", 1, "C"},
+ {1, "cC/B", "not-present", 0, "C/B"},
+
+ {1, "ccC", "normal", 1, "C"},
+ {1, "ccC/B", "not-present", 0, "C/B"},
+
+ /* Copy of an excluded node */
+ {0, "D", "normal", 1, "D"},
+ {0, "D/B", "excluded", 1, "D/B"},
+
+ {1, "cD", "normal", 1, "D"},
+ {1, "cD/B", "excluded", 1, "D/B"},
+
+ {1, "ccD", "normal", 1, "D"},
+ {1, "ccD/B", "excluded", 1, "D/B"},
+
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_revert(&b, "", svn_depth_infinity));
+ SVN_ERR(sbox_wc_delete(&b, "B/B"));
+
+ /* And now do the same thing with moves */
+
+ SVN_ERR(sbox_wc_move(&b, "A", "mA"));
+ SVN_ERR(sbox_wc_move(&b, "B", "mB"));
+ SVN_ERR(sbox_wc_move(&b, "C", "mC"));
+ SVN_ERR(sbox_wc_move(&b, "D", "mD"));
+
+ SVN_ERR(sbox_wc_move(&b, "mA", "mmA"));
+ SVN_ERR(sbox_wc_move(&b, "mB", "mmB"));
+ SVN_ERR(sbox_wc_move(&b, "mC", "mmC"));
+ SVN_ERR(sbox_wc_move(&b, "mD", "mmD"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+
+ /* Move of a deleted + committed node */
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "not-present", 2, "A/B"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "mmA"},
+
+ {1, "mmA", "normal", 1, "A", MOVED_HERE},
+ {1, "mmA/B", "not-present", 2, "A/B", MOVED_HERE},
+
+
+ /* Move of a local deleted node */
+ {0, "B", "normal", 1, "B"},
+ {0, "B/B", "normal", 1, "B/B"},
+ {1, "B", "base-deleted", NO_COPY_FROM, "mmB"},
+ {1, "B/B", "base-deleted", NO_COPY_FROM},
+
+ {1, "mmB", "normal", 1, "B", MOVED_HERE},
+ {1, "mmB/B", "normal", 1, "B/B", MOVED_HERE},
+ {2, "mmB/B", "base-deleted", NO_COPY_FROM},
+
+ /* Move of a to r0 updated node */
+ {0, "C", "normal", 1, "C"},
+ {0, "C/B", "not-present", 0, "C/B"},
+ {1, "C", "base-deleted", NO_COPY_FROM, "mmC"},
+
+ {1, "mmC", "normal", 1, "C", MOVED_HERE},
+ {1, "mmC/B", "not-present", 0, "C/B", MOVED_HERE},
+
+ /* Move of an excluded node */
+ {0, "D", "normal", 1, "D",},
+ {0, "D/B", "excluded", 1, "D/B", },
+ {1, "D", "base-deleted", NO_COPY_FROM, "mmD"},
+
+ {1, "mmD", "normal", 1, "D", MOVED_HERE},
+ {1, "mmD/B", "excluded", 1, "D/B", MOVED_HERE},
+
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* And move everything back */
+ SVN_ERR(sbox_wc_move(&b, "mmA", "A"));
+ SVN_ERR(sbox_wc_move(&b, "mmB", "B"));
+ SVN_ERR(sbox_wc_move(&b, "mmC", "C"));
+ SVN_ERR(sbox_wc_move(&b, "mmD", "D"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+
+ /* deleted + committed node */
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "not-present", 2, "A/B"},
+
+ /* local deleted node */
+ {0, "B", "normal", 1, "B"},
+ {0, "B/B", "normal", 1, "B/B"},
+ {2, "B/B", "base-deleted", NO_COPY_FROM},
+
+ /* To r0 updated node */
+ {0, "C", "normal", 1, "C"},
+ {0, "C/B", "not-present", 0, "C/B"},
+
+ /* Move of an excluded node */
+ {0, "D", "normal", 1, "D",},
+ {0, "D/B", "excluded", 1, "D/B", },
+
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+update_child_under_add(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+ svn_error_t *err;
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "not-present", 0, "A/B"},
+ {2, "A/B", "normal", NO_COPY_FROM},
+ {3, "A/B/C", "normal", NO_COPY_FROM},
+ {4, "A/B/C/D", "normal", NO_COPY_FROM},
+ {0}
+ };
+
+ SVN_ERR(svn_test__sandbox_create(&b, "update_child_under_add",
+ opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C/D"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+ SVN_ERR(sbox_wc_update(&b, "A/B", 0));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C/D"));
+ SVN_ERR(check_db_rows(&b, "", nodes));
+
+ /* A/B/C/D is skipped as it has no base node parent */
+ SVN_ERR(sbox_wc_update(&b, "A/B/C/D", 1));
+ SVN_ERR(check_db_rows(&b, "", nodes));
+
+ /* A/B/C should be skipped as it has a not-present base node parent */
+ err = sbox_wc_update(&b, "A/B/C", 1);
+ svn_error_clear(err); /* Allow any error and always check NODES. */
+ SVN_ERR(check_db_rows(&b, "", nodes));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+delete_over_moved_away(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "delete_over_moved_away",
+ opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ SVN_ERR(sbox_wc_move(&b, "A/B", "B"));
+ SVN_ERR(sbox_wc_delete(&b, "A"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+
+ {0, "A", "normal", 1, "A"},
+ {1, "A", "base-deleted", NO_COPY_FROM},
+ {0, "A/B", "normal", 1, "A/B"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM, "B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+
+ {1, "B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Now replace A with a similar tree */
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+
+ {0, "A", "normal", 1, "A"},
+ {1, "A", "normal", NO_COPY_FROM},
+ {0, "A/B", "normal", 1, "A/B"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM, "B"},
+ {2, "A/B", "normal", NO_COPY_FROM},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {3, "A/B/C", "normal", NO_COPY_FROM},
+
+ {1, "B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* And delete the new A */
+ SVN_ERR(sbox_wc_delete(&b, "A"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+
+ {0, "A", "normal", 1, "A"},
+ {1, "A", "base-deleted", NO_COPY_FROM},
+ {0, "A/B", "normal", 1, "A/B"},
+ /* And here the moved-to information is lost */
+ {1, "A/B", "base-deleted", NO_COPY_FROM, "B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+
+ /* But the moved-here is still there */
+ {1, "B", "normal", 1, "A/B", MOVED_HERE},
+ {1, "B/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+movedto_opdepth(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "moved_to_op_depth",
+ opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ SVN_ERR(sbox_wc_move(&b, "A/B/C", "C"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+ {3, "A/B/C", "base-deleted", NO_COPY_FROM, "C"},
+
+ {1, "C", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* And now the moved_to information has to switch op-depths */
+ SVN_ERR(sbox_wc_delete(&b, "A/B"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+
+ {2, "A/B", "base-deleted", NO_COPY_FROM},
+ {2, "A/B/C", "base-deleted", NO_COPY_FROM, "C"},
+
+ {1, "C", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* And again */
+ SVN_ERR(sbox_wc_delete(&b, "A"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+
+ {1, "A", "base-deleted", NO_COPY_FROM},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM, "C"},
+
+ {1, "C", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* And now stay at the depth of A */
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+
+ {1, "A", "normal", NO_COPY_FROM},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM, "C"},
+
+ {2, "A/B", "normal", NO_COPY_FROM},
+
+ {1, "C", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* And see if it can jump back to B again? */
+ SVN_ERR(sbox_wc_delete(&b, "A"));
+ SVN_ERR(sbox_wc_revert(&b, "A", svn_depth_empty));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+
+ {2, "A/B", "base-deleted", NO_COPY_FROM},
+ {2, "A/B/C", "base-deleted", NO_COPY_FROM, "C"},
+
+ {1, "C", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* And can we bump it back to C itself? */
+ SVN_ERR(sbox_wc_revert(&b, "A", svn_depth_immediates));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+
+ {3, "A/B/C", "base-deleted", NO_COPY_FROM, "C"},
+
+ {1, "C", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+new_basemove(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "new_basemove",
+ opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ /* We keep track of moved children of copies */
+ SVN_ERR(sbox_wc_copy(&b, "A", "Copy"));
+ SVN_ERR(sbox_wc_move(&b, "Copy/B/C", "C"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+
+ {1, "Copy", "normal", 1, "A"},
+ {1, "Copy/B", "normal", 1, "A/B"},
+ {1, "Copy/B/C", "normal", 1, "A/B/C"},
+
+ {3, "Copy/B/C", "base-deleted", NO_COPY_FROM, "C"},
+
+ /* C is a copy of A/B/C */
+ {1, "C", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ {
+ apr_array_header_t *targets = apr_array_make(pool, 1, sizeof(char *));
+ APR_ARRAY_PUSH(targets, const char*) = sbox_wc_path(&b, "Copy");
+
+ SVN_ERR(sbox_wc_commit_ex(&b, targets, svn_depth_empty));
+ }
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 1, "A/B/C"},
+
+ {0, "Copy", "normal", 2, "Copy"},
+ {0, "Copy/B", "normal", 2, "Copy/B"},
+ {0, "Copy/B/C", "normal", 2, "Copy/B/C"},
+
+ {3, "Copy/B/C", "base-deleted", NO_COPY_FROM, "C"},
+
+ /* And this node is now a copy of Copy/B/C at r2 */
+ {1, "C", "normal", 2, "Copy/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_back(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_back", opts, pool));
+
+ /* X just so we don't always test with local_relpath == repos_path */
+ SVN_ERR(sbox_wc_mkdir(&b, "X"));
+ SVN_ERR(sbox_wc_mkdir(&b, "X/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "X/A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "X/A/B/C"));
+ SVN_ERR(sbox_wc_mkdir(&b, "X/A/B/D"));
+ SVN_ERR(sbox_wc_mkdir(&b, "X/E"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_switch(&b, "", "/X", svn_depth_infinity));
+
+ SVN_ERR(sbox_wc_move(&b, "A/B", "A/B2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, "X"},
+ {0, "A", "normal", 1, "X/A"},
+ {0, "A/B", "normal", 1, "X/A/B"},
+ {0, "A/B/C", "normal", 1, "X/A/B/C"},
+ {0, "A/B/D", "normal", 1, "X/A/B/D"},
+ {0, "E", "normal", 1, "X/E"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM, "A/B2"},
+ {2, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "A/B/D", "base-deleted", NO_COPY_FROM},
+ {2, "A/B2", "normal", 1, "X/A/B", MOVED_HERE},
+ {2, "A/B2/C", "normal", 1, "X/A/B/C", MOVED_HERE},
+ {2, "A/B2/D", "normal", 1, "X/A/B/D", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+ SVN_ERR(sbox_wc_move(&b, "A/B2", "A/B"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, "X"},
+ {0, "A", "normal", 1, "X/A"},
+ {0, "A/B", "normal", 1, "X/A/B"},
+ {0, "A/B/C", "normal", 1, "X/A/B/C"},
+ {0, "A/B/D", "normal", 1, "X/A/B/D"},
+ {0, "E", "normal", 1, "X/E"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_move(&b, "A/B", "A/B2"));
+ SVN_ERR(sbox_wc_move(&b, "A/B2/C", "A/B2/C2"));
+ SVN_ERR(sbox_wc_move(&b, "A/B2/D", "D2"));
+ SVN_ERR(sbox_wc_move(&b, "E", "A/B2/E2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, "X"},
+ {0, "A", "normal", 1, "X/A"},
+ {0, "A/B", "normal", 1, "X/A/B"},
+ {0, "A/B/C", "normal", 1, "X/A/B/C"},
+ {0, "A/B/D", "normal", 1, "X/A/B/D"},
+ {0, "E", "normal", 1, "X/E"},
+ {1, "D2", "normal", 1, "X/A/B/D", MOVED_HERE},
+ {1, "E", "base-deleted", NO_COPY_FROM, "A/B2/E2"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM, "A/B2"},
+ {2, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "A/B/D", "base-deleted", NO_COPY_FROM},
+ {2, "A/B2", "normal", 1, "X/A/B", MOVED_HERE},
+ {2, "A/B2/C", "normal", 1, "X/A/B/C", MOVED_HERE},
+ {2, "A/B2/D", "normal", 1, "X/A/B/D", MOVED_HERE},
+ {3, "A/B2/C", "base-deleted", NO_COPY_FROM, "A/B2/C2"},
+ {3, "A/B2/D", "base-deleted", NO_COPY_FROM, "D2"},
+ {3, "A/B2/C2", "normal", 1, "X/A/B/C", MOVED_HERE},
+ {3, "A/B2/E2", "normal", 1, "X/E", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+ SVN_ERR(sbox_wc_move(&b, "A/B2", "A/B"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, "X"},
+ {0, "A", "normal", 1, "X/A"},
+ {0, "A/B", "normal", 1, "X/A/B"},
+ {0, "A/B/C", "normal", 1, "X/A/B/C"},
+ {0, "A/B/D", "normal", 1, "X/A/B/D"},
+ {0, "E", "normal", 1, "X/E"},
+ {1, "D2", "normal", 1, "X/A/B/D", MOVED_HERE},
+ {1, "E", "base-deleted", NO_COPY_FROM, "A/B/E2"},
+ {3, "A/B/C", "base-deleted", NO_COPY_FROM, "A/B/C2"},
+ {3, "A/B/D", "base-deleted", NO_COPY_FROM, "D2"},
+ {3, "A/B/C2", "normal", 1, "X/A/B/C", MOVED_HERE},
+ {3, "A/B/E2", "normal", 1, "X/E", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_update_subtree(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+ svn_error_t *err;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_update_subtree", opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C/D"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_mkdir(&b, "X"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 3));
+ SVN_ERR(sbox_wc_copy(&b, "A", "P"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ /* Subtree update is like an interrupted update, it leaves a
+ mixed-revision move source. */
+ SVN_ERR(sbox_wc_move(&b, "A/B", "A/B2"));
+ SVN_ERR(sbox_wc_update(&b, "A/B/C", 2));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "A/B/C", "normal", 2, "A/B/C"},
+ {0, "A/B/C/D", "normal", 2, "A/B/C/D"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM, "A/B2"},
+ {2, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "A/B/C/D", "base-deleted", NO_COPY_FROM},
+ {2, "A/B2", "normal", 1, "A/B", MOVED_HERE},
+ {2, "A/B2/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Resolve fails because of the mixed-revision. */
+ err = sbox_wc_resolve(&b, "A/B", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict);
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE);
+
+ /* Update to single-revision to allow resolve; this requires update
+ while the tree-conflict on A/B is present. */
+ SVN_ERR(sbox_wc_update(&b, "A/B", 2));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "A/B/C", "normal", 2, "A/B/C"},
+ {0, "A/B/C/D", "normal", 2, "A/B/C/D"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM, "A/B2"},
+ {2, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "A/B/C/D", "base-deleted", NO_COPY_FROM},
+ {2, "A/B2", "normal", 1, "A/B", MOVED_HERE},
+ {2, "A/B2/C", "normal", 1, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Now resolve is possible. */
+ SVN_ERR(sbox_wc_resolve(&b, "A/B", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "A/B/C", "normal", 2, "A/B/C"},
+ {0, "A/B/C/D", "normal", 2, "A/B/C/D"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM, "A/B2"},
+ {2, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "A/B/C/D", "base-deleted", NO_COPY_FROM},
+ {2, "A/B2", "normal", 2, "A/B", MOVED_HERE},
+ {2, "A/B2/C", "normal", 2, "A/B/C", MOVED_HERE},
+ {2, "A/B2/C/D", "normal", 2, "A/B/C/D", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Subtree update that only bumps. */
+ SVN_ERR(sbox_wc_update(&b, "A/B/C", 3));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "A/B/C", "normal", 3, "A/B/C"},
+ {0, "A/B/C/D", "normal", 3, "A/B/C/D"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM, "A/B2"},
+ {2, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "A/B/C/D", "base-deleted", NO_COPY_FROM},
+ {2, "A/B2", "normal", 2, "A/B", MOVED_HERE},
+ {2, "A/B2/C", "normal", 2, "A/B/C", MOVED_HERE},
+ {2, "A/B2/C/D", "normal", 2, "A/B/C/D", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Resolve fails because of the mixed-revision. */
+ err = sbox_wc_resolve(&b, "A/B", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict);
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE);
+
+ /* Update allowed while tree-conflict is present. */
+ SVN_ERR(sbox_wc_update(&b, "A/B", 3));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 3, "A/B"},
+ {0, "A/B/C", "normal", 3, "A/B/C"},
+ {0, "A/B/C/D", "normal", 3, "A/B/C/D"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM, "A/B2"},
+ {2, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "A/B/C/D", "base-deleted", NO_COPY_FROM},
+ {2, "A/B2", "normal", 2, "A/B", MOVED_HERE},
+ {2, "A/B2/C", "normal", 2, "A/B/C", MOVED_HERE},
+ {2, "A/B2/C/D", "normal", 2, "A/B/C/D", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Now resolve works. */
+ SVN_ERR(sbox_wc_resolve(&b, "A/B", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 3, "A/B"},
+ {0, "A/B/C", "normal", 3, "A/B/C"},
+ {0, "A/B/C/D", "normal", 3, "A/B/C/D"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM, "A/B2"},
+ {2, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "A/B/C/D", "base-deleted", NO_COPY_FROM},
+ {2, "A/B2", "normal", 3, "A/B", MOVED_HERE},
+ {2, "A/B2/C", "normal", 3, "A/B/C", MOVED_HERE},
+ {2, "A/B2/C/D", "normal", 3, "A/B/C/D", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Partial switch of source. */
+ SVN_ERR(sbox_wc_switch(&b, "A", "/P", svn_depth_immediates));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 4, "P"},
+ {0, "A/B", "normal", 4, "P/B"},
+ {0, "A/B/C", "normal", 3, "A/B/C"},
+ {0, "A/B/C/D", "normal", 3, "A/B/C/D"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM, "A/B2"},
+ {2, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "A/B/C/D", "base-deleted", NO_COPY_FROM},
+ {2, "A/B2", "normal", 3, "A/B", MOVED_HERE},
+ {2, "A/B2/C", "normal", 3, "A/B/C", MOVED_HERE},
+ {2, "A/B2/C/D", "normal", 3, "A/B/C/D", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Resolve fails because of the subtree-switch. */
+ err = sbox_wc_resolve(&b, "A/B", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict);
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE);
+
+ /* Switch works while tree-conflict is present. */
+ SVN_ERR(sbox_wc_switch(&b, "A", "/P", svn_depth_infinity));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 4, "P"},
+ {0, "A/B", "normal", 4, "P/B"},
+ {0, "A/B/C", "normal", 4, "P/B/C"},
+ {0, "A/B/C/D", "normal", 4, "P/B/C/D"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM, "A/B2"},
+ {2, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "A/B/C/D", "base-deleted", NO_COPY_FROM},
+ {2, "A/B2", "normal", 3, "A/B", MOVED_HERE},
+ {2, "A/B2/C", "normal", 3, "A/B/C", MOVED_HERE},
+ {2, "A/B2/C/D", "normal", 3, "A/B/C/D", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Now resolve works. */
+ SVN_ERR(sbox_wc_resolve(&b, "A/B", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 4, "P"},
+ {0, "A/B", "normal", 4, "P/B"},
+ {0, "A/B/C", "normal", 4, "P/B/C"},
+ {0, "A/B/C/D", "normal", 4, "P/B/C/D"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM, "A/B2"},
+ {2, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {2, "A/B/C/D", "base-deleted", NO_COPY_FROM},
+ {2, "A/B2", "normal", 4, "P/B", MOVED_HERE},
+ {2, "A/B2/C", "normal", 4, "P/B/C", MOVED_HERE},
+ {2, "A/B2/C/D", "normal", 4, "P/B/C/D", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_parent_into_child(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_parent_into_child", opts, pool));
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ SVN_ERR(sbox_wc_move(&b, "A/B", "B2"));
+ SVN_ERR(sbox_wc_move(&b, "A", "B2/A"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "B2/A"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "B2", "normal", 1, "A/B", MOVED_HERE},
+ {2, "B2/A", "normal", 1, "A", MOVED_HERE},
+ {2, "B2/A/B", "normal", 1, "A/B", MOVED_HERE},
+ {3, "B2/A/B", "base-deleted", NO_COPY_FROM, "B2"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_move(&b, "B2", "A"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {1, "A", "normal", 1, "A/B", FALSE, "A/A", TRUE},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {2, "A/A", "normal", 1, "A", MOVED_HERE},
+ {2, "A/A/B", "normal", 1, "A/B", MOVED_HERE},
+ {3, "A/A/B", "base-deleted", NO_COPY_FROM, "A"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_move(&b, "A/A", "A/B"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {1, "A", "normal", 1, "A/B", FALSE, "A/B", TRUE},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {2, "A/B", "normal", 1, "A", MOVED_HERE},
+ {2, "A/B/B", "normal", 1, "A/B", MOVED_HERE},
+ {3, "A/B/B", "base-deleted", NO_COPY_FROM, "A"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_depth_expand(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_depth_expand", opts, pool));
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A/A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/A/A"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 0));
+
+ SVN_ERR(sbox_wc_update_depth(&b, "", 1, svn_depth_immediates, TRUE));
+ SVN_ERR(sbox_wc_update_depth(&b, "A", 1, svn_depth_immediates, TRUE));
+ /* Make A/B not present */
+ SVN_ERR(sbox_wc_update_depth(&b, "A/B", 0, svn_depth_immediates, TRUE));
+
+ SVN_ERR(sbox_wc_move(&b, "A", "C"));
+ SVN_ERR(sbox_wc_mkdir(&b, "C/A/A")); /* Local addition obstruction */
+ SVN_ERR(sbox_wc_copy(&b, "C/A", "C/B")); /* Copied obstruction */
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, "" },
+
+ {0, "A", "normal", 1, "A" },
+ {1, "A", "base-deleted", NO_COPY_FROM, "C" },
+ {0, "A/A", "normal", 1, "A/A" },
+ {1, "A/A", "base-deleted", NO_COPY_FROM },
+ {0, "A/B", "not-present", 0, "A/B" },
+
+ {1, "C", "normal", 1, "A", MOVED_HERE },
+
+ {1, "C/A", "normal", 1, "A/A", MOVED_HERE },
+ {3, "C/A/A", "normal", NO_COPY_FROM },
+
+ {1, "C/B", "not-present", 0, "A/B", MOVED_HERE},
+ {2, "C/B", "normal", 1, "A/A" },
+ {3, "C/B/A", "normal", NO_COPY_FROM },
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_update_depth(&b, "", 1, svn_depth_infinity, TRUE));
+
+ /* This used to cause a segfault. Then it asserted in a different place */
+ SVN_ERR(sbox_wc_resolve(&b, "A", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+
+ /* And now verify that there are no not-present nodes left and a
+ consistent working copy */
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, "" },
+
+ {0, "A", "normal", 1, "A" },
+ {0, "A/A", "normal", 1, "A/A" },
+ {0, "A/A/A", "normal", 1, "A/A/A" },
+ {0, "A/A/A/A", "normal", 1, "A/A/A/A" },
+ {0, "A/B", "normal", 1, "A/B" },
+ {0, "A/B/A", "normal", 1, "A/B/A" },
+ {0, "A/B/A/A", "normal", 1, "A/B/A/A" },
+
+ {1, "A", "base-deleted", NO_COPY_FROM, "C" },
+ {1, "A/A", "base-deleted", NO_COPY_FROM },
+ {1, "A/A/A", "base-deleted", NO_COPY_FROM },
+ {1, "A/B", "base-deleted", NO_COPY_FROM },
+ {1, "A/B/A", "base-deleted", NO_COPY_FROM },
+ {1, "A/B/A/A", "base-deleted", NO_COPY_FROM },
+ {1, "A/A/A/A", "base-deleted", NO_COPY_FROM },
+
+
+ {1, "C", "normal", 1, "A", MOVED_HERE },
+ {1, "C/A", "normal", 1, "A/A", MOVED_HERE },
+ {1, "C/A/A", "normal", 1, "A/A/A", MOVED_HERE },
+ {1, "C/A/A/A", "normal", 1, "A/A/A/A", MOVED_HERE },
+
+ {3, "C/A/A", "normal", NO_COPY_FROM },
+ {3, "C/A/A/A", "base-deleted", NO_COPY_FROM },
+
+ {1, "C/B", "normal", 1, "A/B", MOVED_HERE },
+ {1, "C/B/A", "normal", 1, "A/B/A", MOVED_HERE },
+ {1, "C/B/A/A", "normal", 1, "A/B/A/A", MOVED_HERE },
+
+ {2, "C/B", "normal", 1, "A/A" },
+ {2, "C/B/A", "base-deleted", NO_COPY_FROM },
+ {2, "C/B/A/A", "base-deleted", NO_COPY_FROM },
+
+ {3, "C/B/A", "normal", NO_COPY_FROM },
+
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_retract(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_retract", opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A/A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A/A/C"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A/A/D"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/A/C"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/A/D"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_delete(&b, "A/A/A/A"));
+ SVN_ERR(sbox_wc_delete(&b, "A/A/A/C"));
+ SVN_ERR(sbox_wc_delete(&b, "A/A/A/D"));
+ SVN_ERR(sbox_wc_delete(&b, "A/B/A/C"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+ SVN_ERR(sbox_wc_move(&b, "A/B/A/D", "D"));
+ SVN_ERR(sbox_wc_delete(&b, "A/B"));
+ SVN_ERR(sbox_wc_move(&b, "A/A", "A/B"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, "" },
+
+ {0, "A", "normal", 1, "A" },
+ {0, "A/A", "normal", 1, "A/A" },
+ {0, "A/A/A", "normal", 1, "A/A/A" },
+ {0, "A/A/A/A", "normal", 1, "A/A/A/A" },
+ {0, "A/A/A/C", "normal", 1, "A/A/A/C" },
+ {0, "A/A/A/D", "normal", 1, "A/A/A/D" },
+
+ {2, "A/A", "base-deleted", NO_COPY_FROM, "A/B"},
+ {2, "A/A/A", "base-deleted", NO_COPY_FROM },
+ {2, "A/A/A/A", "base-deleted", NO_COPY_FROM },
+ {2, "A/A/A/C", "base-deleted", NO_COPY_FROM },
+ {2, "A/A/A/D", "base-deleted", NO_COPY_FROM },
+
+ {0, "A/B", "normal", 1, "A/B" },
+ {0, "A/B/A", "normal", 1, "A/B/A" },
+ {0, "A/B/A/A", "normal", 1, "A/B/A/A" },
+ {0, "A/B/A/C", "normal", 1, "A/B/A/C" },
+ {0, "A/B/A/D", "normal", 1, "A/B/A/D" },
+
+ {2, "A/B", "normal", 1, "A/A", MOVED_HERE },
+ {2, "A/B/A", "normal", 1, "A/A/A", MOVED_HERE },
+ {2, "A/B/A/A", "normal", 1, "A/A/A/A", MOVED_HERE },
+ {2, "A/B/A/C", "normal", 1, "A/A/A/C", MOVED_HERE },
+ {2, "A/B/A/D", "normal", 1, "A/A/A/D", FALSE, "D", TRUE },
+
+ {1, "D", "normal", 1, "A/B/A/D", MOVED_HERE },
+
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_update(&b, "", 2));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 2, "" },
+
+ {0, "A", "normal", 2, "A" },
+ {0, "A/A", "normal", 2, "A/A" },
+ {0, "A/A/A", "normal", 2, "A/A/A" },
+
+ {2, "A/A", "base-deleted", NO_COPY_FROM, "A/B"},
+ {2, "A/A/A", "base-deleted", NO_COPY_FROM },
+
+ {0, "A/B", "normal", 2, "A/B" },
+ {0, "A/B/A", "normal", 2, "A/B/A" },
+ {0, "A/B/A/A", "normal", 2, "A/B/A/A" },
+ {0, "A/B/A/D", "normal", 2, "A/B/A/D" },
+
+ {2, "A/B", "normal", 1, "A/A", MOVED_HERE },
+ {2, "A/B/A", "normal", 1, "A/A/A", MOVED_HERE },
+ {2, "A/B/A/A", "normal", 1, "A/A/A/A", MOVED_HERE },
+ {2, "A/B/A/C", "normal", 1, "A/A/A/C", MOVED_HERE },
+ {2, "A/B/A/D", "normal", 1, "A/A/A/D", FALSE, "D", TRUE },
+
+ {1, "D", "normal", 1, "A/B/A/D", MOVED_HERE },
+
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+
+ SVN_ERR(sbox_wc_resolve(&b, "A/A", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 2, "" },
+
+ {0, "A", "normal", 2, "A" },
+ {0, "A/A", "normal", 2, "A/A" },
+ {0, "A/A/A", "normal", 2, "A/A/A" },
+
+ {0, "A/B", "normal", 2, "A/B" },
+ {0, "A/B/A", "normal", 2, "A/B/A" },
+ {0, "A/B/A/A", "normal", 2, "A/B/A/A" },
+ {0, "A/B/A/D", "normal", 2, "A/B/A/D" },
+
+ {2, "A/A", "base-deleted", NO_COPY_FROM, "A/B"},
+ {2, "A/A/A", "base-deleted", NO_COPY_FROM },
+
+ {2, "A/B", "normal", 2, "A/A", MOVED_HERE },
+ {2, "A/B/A", "normal", 2, "A/A/A", MOVED_HERE },
+ {2, "A/B/A/A", "base-deleted", NO_COPY_FROM }, /* ### MISSING! */
+ {2, "A/B/A/D", "base-deleted", NO_COPY_FROM, "D" }, /* ### MISSING! */
+
+ /* Still conflicted */
+ {1, "D", "normal", 1, "A/B/A/D", MOVED_HERE },
+
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* ### TODO: Resolve via which specific target? */
+ SVN_ERR(sbox_wc_resolve(&b, "", svn_depth_infinity,
+ svn_wc_conflict_choose_mine_conflict));
+
+ {
+ nodes_row_t nodes[] = {
+
+ {1, "D", "normal", 2, "A/B/A/D", MOVED_HERE },
+
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "D", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_delete_file_externals(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_delete_file_externals", opts,
+ pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ sbox_file_write(&b, "f", "New file");
+ SVN_ERR(sbox_wc_add(&b, "f"));
+ SVN_ERR(sbox_wc_propset(&b, "svn:externals", "^/f B/P/g", "A"));
+ SVN_ERR(sbox_wc_propset(&b, "svn:externals", "^/f Q/g\n^/f g", "A/B"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "f", "normal", 1, "f"},
+ {0, "A/B/g", "normal", 1, "f", TRUE},
+ {0, "A/B/P/g", "normal", 1, "f", TRUE},
+ {0, "A/B/Q/g", "normal", 1, "f", TRUE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Delete removes the file external rows. */
+ SVN_ERR(sbox_wc_delete(&b, "A"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "f", "normal", 1, "f"},
+ {1, "A", "base-deleted", NO_COPY_FROM},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Revert doesn't restore the file external rows... */
+ SVN_ERR(sbox_wc_revert(&b, "A", svn_depth_infinity));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "f", "normal", 1, "f"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+ /* ... but update does. */
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "f", "normal", 1, "f"},
+ {0, "A/B/g", "normal", 1, "f", TRUE},
+ {0, "A/B/P/g", "normal", 1, "f", TRUE},
+ {0, "A/B/Q/g", "normal", 1, "f", TRUE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Move removes the file external rows. */
+ SVN_ERR(sbox_wc_move(&b, "A", "A2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "f", "normal", 1, "f"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+ /* Update adds file external rows to the copy. */
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {0, "f", "normal", 1, "f"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {0, "A2/B/g", "normal", 1, "f", TRUE},
+ {0, "A2/B/P/g", "normal", 1, "f", TRUE},
+ {0, "A2/B/Q/g", "normal", 1, "f", TRUE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+update_with_tree_conflict(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "update_with_tree_conflict", opts,
+ pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+ SVN_ERR(sbox_wc_move(&b, "A", "A2"));
+
+ SVN_ERR(sbox_wc_update_depth(&b, "A", 2, svn_depth_empty, FALSE));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 2, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_update(&b, "A", 2));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 2, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "A/B/C", "normal", 2, "A/B/C"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Second update overwrote the existing tree-conflict and that
+ causes the move-update to assert. */
+ SVN_ERR(sbox_wc_resolve(&b, "A", svn_depth_infinity,
+ svn_wc_conflict_choose_mine_conflict));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 2, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "A/B/C", "normal", 2, "A/B/C"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 2, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 2, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 2, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Same again but second update is A/B rather than A which triggers
+ the problem through open_root rather than open_directory. */
+ SVN_ERR(sbox_wc_revert(&b, "", svn_depth_infinity));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+ SVN_ERR(sbox_wc_move(&b, "A", "A2"));
+ SVN_ERR(sbox_wc_update_depth(&b, "A", 2, svn_depth_empty, FALSE));
+ SVN_ERR(sbox_wc_update(&b, "A/B", 2));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 2, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "A/B/C", "normal", 2, "A/B/C"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+ SVN_ERR(sbox_wc_resolve(&b, "A", svn_depth_infinity,
+ svn_wc_conflict_choose_mine_conflict));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 2, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "A/B/C", "normal", 2, "A/B/C"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 2, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 2, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 2, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_child_to_parent_revert(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_child_to_parent_revert", opts,
+ pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+
+
+ SVN_ERR(sbox_wc_move(&b, "A/B", "B"));
+ SVN_ERR(sbox_wc_delete(&b, "A"));
+
+ /* Verify that the move is still recorded correctly */
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 0, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+
+ {1, "A", "base-deleted", NO_COPY_FROM},
+ {1, "A/B", "base-deleted", NO_COPY_FROM, "B"},
+
+ {1, "B", "normal", 1, "A/B", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_revert(&b, "A", svn_depth_infinity));
+
+ /* Verify that the move is now just a copy */
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 0, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+
+ {1, "B", "normal", 1, "A/B"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_delete_intermediate(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_delete_intermediate", opts,
+ pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A/A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "B/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "B/A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "B/A/A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "C"));
+ SVN_ERR(sbox_wc_mkdir(&b, "C/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "C/A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "C/A/A/A"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+
+ SVN_ERR(sbox_wc_move(&b, "A/A/A", "AAA_1"));
+
+ SVN_ERR(sbox_wc_delete(&b, "A"));
+ SVN_ERR(sbox_wc_move(&b, "B", "A"));
+
+ SVN_ERR(sbox_wc_move(&b, "A/A/A", "AAA_2"));
+
+ SVN_ERR(sbox_wc_delete(&b, "A/A"));
+ SVN_ERR(sbox_wc_move(&b, "C/A", "A/A"));
+
+ SVN_ERR(sbox_wc_move(&b, "A/A/A", "AAA_3"));
+
+ /* Verify that the move is still recorded correctly */
+ {
+ nodes_row_t nodes[] = {
+
+ {0, "", "normal", 0, ""},
+
+ {1, "AAA_1", "normal", 1, "A/A/A", MOVED_HERE},
+ {1, "AAA_1/A", "normal", 1, "A/A/A/A", MOVED_HERE},
+ {1, "AAA_2", "normal", 1, "B/A/A", MOVED_HERE},
+ {1, "AAA_2/A", "normal", 1, "B/A/A/A", MOVED_HERE},
+ {1, "AAA_3", "normal", 1, "C/A/A", MOVED_HERE},
+ {1, "AAA_3/A", "normal", 1, "C/A/A/A", MOVED_HERE},
+
+ {0, "A", "normal", 1, "A"},
+ {0, "A/A", "normal", 1, "A/A"},
+ {0, "A/A/A", "normal", 1, "A/A/A"},
+ {0, "A/A/A/A", "normal", 1, "A/A/A/A"},
+
+ {1, "A", "normal", 1, "B", MOVED_HERE},
+ {1, "A/A", "normal", 1, "B/A", MOVED_HERE},
+ {1, "A/A/A", "normal", 1, "B/A/A", FALSE, "AAA_1", TRUE},
+ {1, "A/A/A/A", "normal", 1, "B/A/A/A", MOVED_HERE},
+
+ {2, "A/A", "normal", 1, "C/A", MOVED_HERE},
+ {2, "A/A/A", "normal", 1, "C/A/A", FALSE, "AAA_2", TRUE},
+ {2, "A/A/A/A", "normal", 1, "C/A/A/A", MOVED_HERE},
+
+ {3, "A/A/A", "base-deleted", NO_COPY_FROM, "AAA_3"},
+ {3, "A/A/A/A", "base-deleted", NO_COPY_FROM},
+
+ {0, "B", "normal", 1, "B"},
+ {0, "B/A", "normal", 1, "B/A"},
+ {0, "B/A/A", "normal", 1, "B/A/A"},
+ {0, "B/A/A/A", "normal", 1, "B/A/A/A"},
+
+ {1, "B", "base-deleted", NO_COPY_FROM, "A"},
+ {1, "B/A", "base-deleted", NO_COPY_FROM},
+ {1, "B/A/A", "base-deleted", NO_COPY_FROM},
+ {1, "B/A/A/A", "base-deleted", NO_COPY_FROM},
+
+ {0, "C", "normal", 1, "C"},
+ {0, "C/A", "normal", 1, "C/A"},
+ {0, "C/A/A", "normal", 1, "C/A/A"},
+ {0, "C/A/A/A", "normal", 1, "C/A/A/A"},
+
+ {2, "C/A", "base-deleted", NO_COPY_FROM, "A/A"},
+ {2, "C/A/A", "base-deleted", NO_COPY_FROM},
+ {2, "C/A/A/A", "base-deleted", NO_COPY_FROM},
+
+ {0},
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Ok, now we are in the very ugly case where A/A/A is moved away 3 times */
+
+ /* Let's delete A */
+ SVN_ERR(sbox_wc_delete(&b, "A"));
+
+ /* AAA_1, AAA_2 and AAA_3 should still be moves after deleting A */
+ {
+ nodes_row_t nodes[] = {
+
+ {0, "", "normal", 0, ""},
+
+ {1, "AAA_1", "normal", 1, "A/A/A", MOVED_HERE},
+ {1, "AAA_1/A", "normal", 1, "A/A/A/A", MOVED_HERE},
+
+ {1, "AAA_2", "normal", 1, "B/A/A", MOVED_HERE},
+ {1, "AAA_2/A", "normal", 1, "B/A/A/A", MOVED_HERE},
+
+ {1, "AAA_3", "normal", 1, "C/A/A", MOVED_HERE},
+ {1, "AAA_3/A", "normal", 1, "C/A/A/A", MOVED_HERE},
+
+ {0, "A", "normal", 1, "A"},
+ {0, "A/A", "normal", 1, "A/A"},
+ {0, "A/A/A", "normal", 1, "A/A/A"},
+ {0, "A/A/A/A", "normal", 1, "A/A/A/A"},
+
+ {1, "A", "base-deleted", NO_COPY_FROM},
+ {1, "A/A", "base-deleted", NO_COPY_FROM},
+ {1, "A/A/A", "base-deleted", NO_COPY_FROM, "AAA_1"},
+ {1, "A/A/A/A", "base-deleted", NO_COPY_FROM},
+
+ {0, "B", "normal", 1, "B"},
+ {0, "B/A", "normal", 1, "B/A"},
+ {0, "B/A/A", "normal", 1, "B/A/A"},
+ {0, "B/A/A/A", "normal", 1, "B/A/A/A"},
+
+ {1, "B", "base-deleted", NO_COPY_FROM},
+ {1, "B/A", "base-deleted", NO_COPY_FROM},
+ {1, "B/A/A", "base-deleted", NO_COPY_FROM, "AAA_2"},
+ {1, "B/A/A/A", "base-deleted", NO_COPY_FROM},
+
+ {0, "C", "normal", 1, "C"},
+ {0, "C/A", "normal", 1, "C/A"},
+ {0, "C/A/A", "normal", 1, "C/A/A"},
+ {0, "C/A/A/A", "normal", 1, "C/A/A/A"},
+
+ {2, "C/A", "base-deleted", NO_COPY_FROM},
+ {2, "C/A/A", "base-deleted", NO_COPY_FROM, "AAA_3"},
+ {2, "C/A/A/A", "base-deleted", NO_COPY_FROM},
+
+ {0},
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_revert_intermediate(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_revert_intermediate", opts,
+ pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A/A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "B/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "B/A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "B/A/A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "C"));
+ SVN_ERR(sbox_wc_mkdir(&b, "C/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "C/A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "C/A/A/A"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+
+ SVN_ERR(sbox_wc_move(&b, "A/A/A", "AAA_1"));
+
+ SVN_ERR(sbox_wc_delete(&b, "A"));
+ SVN_ERR(sbox_wc_move(&b, "B", "A"));
+
+ SVN_ERR(sbox_wc_move(&b, "A/A/A", "AAA_2"));
+
+ SVN_ERR(sbox_wc_delete(&b, "A/A"));
+ SVN_ERR(sbox_wc_move(&b, "C/A", "A/A"));
+
+ SVN_ERR(sbox_wc_move(&b, "A/A/A", "AAA_3"));
+
+ /* Verify that the move is still recorded correctly */
+ {
+ nodes_row_t nodes[] = {
+
+ {0, "", "normal", 0, ""},
+
+ {1, "AAA_1", "normal", 1, "A/A/A", MOVED_HERE},
+ {1, "AAA_1/A", "normal", 1, "A/A/A/A", MOVED_HERE},
+ {1, "AAA_2", "normal", 1, "B/A/A", MOVED_HERE},
+ {1, "AAA_2/A", "normal", 1, "B/A/A/A", MOVED_HERE},
+ {1, "AAA_3", "normal", 1, "C/A/A", MOVED_HERE},
+ {1, "AAA_3/A", "normal", 1, "C/A/A/A", MOVED_HERE},
+
+ {0, "A", "normal", 1, "A"},
+ {0, "A/A", "normal", 1, "A/A"},
+ {0, "A/A/A", "normal", 1, "A/A/A"},
+ {0, "A/A/A/A", "normal", 1, "A/A/A/A"},
+
+ {1, "A", "normal", 1, "B", MOVED_HERE},
+ {1, "A/A", "normal", 1, "B/A", MOVED_HERE},
+ {1, "A/A/A", "normal", 1, "B/A/A", FALSE, "AAA_1", TRUE},
+ {1, "A/A/A/A", "normal", 1, "B/A/A/A", MOVED_HERE},
+
+ {2, "A/A", "normal", 1, "C/A", MOVED_HERE},
+ {2, "A/A/A", "normal", 1, "C/A/A", FALSE, "AAA_2", TRUE},
+ {2, "A/A/A/A", "normal", 1, "C/A/A/A", MOVED_HERE},
+
+ {3, "A/A/A", "base-deleted", NO_COPY_FROM, "AAA_3"},
+ {3, "A/A/A/A", "base-deleted", NO_COPY_FROM},
+
+ {0, "B", "normal", 1, "B"},
+ {0, "B/A", "normal", 1, "B/A"},
+ {0, "B/A/A", "normal", 1, "B/A/A"},
+ {0, "B/A/A/A", "normal", 1, "B/A/A/A"},
+
+ {1, "B", "base-deleted", NO_COPY_FROM, "A"},
+ {1, "B/A", "base-deleted", NO_COPY_FROM},
+ {1, "B/A/A", "base-deleted", NO_COPY_FROM},
+ {1, "B/A/A/A", "base-deleted", NO_COPY_FROM},
+
+ {0, "C", "normal", 1, "C"},
+ {0, "C/A", "normal", 1, "C/A"},
+ {0, "C/A/A", "normal", 1, "C/A/A"},
+ {0, "C/A/A/A", "normal", 1, "C/A/A/A"},
+
+ {2, "C/A", "base-deleted", NO_COPY_FROM, "A/A"},
+ {2, "C/A/A", "base-deleted", NO_COPY_FROM},
+ {2, "C/A/A/A", "base-deleted", NO_COPY_FROM},
+
+ {0},
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Ok, now we are in the very ugly case where A/A/A is moved away 3 times */
+
+ /* Let's revert A */
+ SVN_ERR(sbox_wc_revert(&b, "A", svn_depth_infinity));
+
+ /* AAA_1 should now be a copy, but AAA_2 and AAA_3 should still be moves,
+ but now from the original location instead of from "A/A/A" */
+ {
+ nodes_row_t nodes[] = {
+
+ {0, "", "normal", 0, ""},
+
+ {1, "AAA_1", "normal", 1, "A/A/A",},
+ {1, "AAA_1/A", "normal", 1, "A/A/A/A"},
+ {1, "AAA_2", "normal", 1, "B/A/A", MOVED_HERE},
+ {1, "AAA_2/A", "normal", 1, "B/A/A/A", MOVED_HERE},
+ {1, "AAA_3", "normal", 1, "C/A/A", MOVED_HERE},
+ {1, "AAA_3/A", "normal", 1, "C/A/A/A", MOVED_HERE},
+
+ {0, "A", "normal", 1, "A"},
+ {0, "A/A", "normal", 1, "A/A"},
+ {0, "A/A/A", "normal", 1, "A/A/A"},
+ {0, "A/A/A/A", "normal", 1, "A/A/A/A"},
+
+ {0, "B", "normal", 1, "B"},
+ {0, "B/A", "normal", 1, "B/A"},
+ {0, "B/A/A", "normal", 1, "B/A/A"},
+ {0, "B/A/A/A", "normal", 1, "B/A/A/A"},
+
+ {1, "B", "base-deleted", NO_COPY_FROM},
+ {1, "B/A", "base-deleted", NO_COPY_FROM},
+ {1, "B/A/A", "base-deleted", NO_COPY_FROM, "AAA_2"},
+ {1, "B/A/A/A", "base-deleted", NO_COPY_FROM},
+
+ {0, "C", "normal", 1, "C"},
+ {0, "C/A", "normal", 1, "C/A"},
+ {0, "C/A/A", "normal", 1, "C/A/A"},
+ {0, "C/A/A/A", "normal", 1, "C/A/A/A"},
+
+ {2, "C/A", "base-deleted", NO_COPY_FROM},
+ {2, "C/A/A", "base-deleted", NO_COPY_FROM, "AAA_3"},
+ {2, "C/A/A/A", "base-deleted", NO_COPY_FROM},
+
+ {0},
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+copy_mixed_rev_mods(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "copy_mixed_rev_mods", opts,
+ pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+ SVN_ERR(sbox_wc_update(&b, "A/B", 2));
+ SVN_ERR(sbox_wc_delete(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "A/B/C", "normal", 2, "A/B/C"},
+ {2, "A/B", "normal", NO_COPY_FROM},
+ {2, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_copy(&b, "A", "X"));
+ {
+ nodes_row_t nodes[] = {
+ {1, "X", "normal", 1, "A"},
+ {1, "X/B", "not-present", 2, "A/B"},
+ {2, "X/B", "normal", NO_COPY_FROM},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "X", nodes));
+ }
+
+ SVN_ERR(sbox_wc_commit(&b, "X"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "X", "normal", 3, "X"},
+ {0, "X/B", "normal", 3, "X/B"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "X", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_replace_ancestor_with_child(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_replace_ancestor_with_child", opts,
+ pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A"));
+
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ SVN_ERR(sbox_wc_move(&b, "A", "A2"));
+
+ {
+ nodes_row_t nodes[] = {
+
+ { 0, "", "normal", 1, "" },
+
+ { 0, "A", "normal", 1, "A"},
+ { 0, "A/A", "normal", 1, "A/A" },
+
+ { 1, "A", "base-deleted", NO_COPY_FROM , "A2"},
+ { 1, "A/A", "base-deleted", NO_COPY_FROM },
+
+ { 1, "A2", "normal", 1, "A", MOVED_HERE },
+ { 1, "A2/A", "normal", 1, "A/A", MOVED_HERE },
+
+ { 0 },
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_move(&b, "A2/A", "A"));
+
+ {
+ nodes_row_t nodes[] = {
+ { 0, "", "normal", 1, "" },
+
+ { 0, "A", "normal", 1, "A"},
+ { 0, "A/A", "normal", 1, "A/A" },
+
+ { 1, "A", "normal", 1, "A/A", FALSE, "A2", TRUE },
+ { 1, "A/A", "base-deleted", NO_COPY_FROM },
+
+ { 1, "A2", "normal", 1, "A", MOVED_HERE },
+ { 1, "A2/A", "normal", 1, "A/A", MOVED_HERE },
+
+ { 2, "A2/A", "base-deleted", NO_COPY_FROM, "A" },
+ { 0 },
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* ### This currently fails with an assertion in maintainer mode */
+ SVN_ERR(sbox_wc_delete(&b, "A2"));
+
+ {
+ nodes_row_t nodes[] = {
+ { 0, "", "normal", 1, "" },
+
+ { 0, "A", "normal", 1, "A"},
+ { 0, "A/A", "normal", 1, "A/A" },
+
+ { 1, "A", "normal", 1, "A/A", MOVED_HERE },
+ { 1, "A/A", "base-deleted", NO_COPY_FROM, "A" },
+
+ { 0 },
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_commit(&b, "A"));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+move_twice_within_delete(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_twice_within_delete", opts,
+ pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/A/A"));
+
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "B"));
+ SVN_ERR(sbox_wc_move(&b, "A", "B/A"));
+ SVN_ERR(sbox_wc_move(&b, "B/A/A", "B/AA"));
+ SVN_ERR(sbox_wc_move(&b, "B/AA/A", "AA"));
+
+ {
+ nodes_row_t nodes[] = {
+
+ { 0, "", "normal", 1, "" },
+
+ { 0, "A", "normal", 1, "A" },
+ { 0, "A/A", "normal", 1, "A/A" },
+ { 0, "A/A/A", "normal", 1, "A/A/A" },
+
+ { 1, "A", "base-deleted", NO_COPY_FROM, "B/A" },
+ { 1, "A/A", "base-deleted", NO_COPY_FROM },
+ { 1, "A/A/A", "base-deleted", NO_COPY_FROM },
+
+ { 1, "AA", "normal", 1, "A/A/A", MOVED_HERE },
+
+ { 1, "B", "normal", NO_COPY_FROM },
+ { 2, "B/A", "normal", 1, "A", MOVED_HERE },
+ { 2, "B/A/A", "normal", 1, "A/A", MOVED_HERE },
+ { 2, "B/A/A/A", "normal", 1, "A/A/A", MOVED_HERE },
+
+ { 3, "B/A/A", "base-deleted", NO_COPY_FROM, "B/AA" },
+ { 3, "B/A/A/A", "base-deleted", NO_COPY_FROM },
+
+ { 2, "B/AA", "normal", 1, "A/A", MOVED_HERE},
+ { 2, "B/AA/A", "normal", 1, "A/A/A", MOVED_HERE },
+
+ { 3, "B/AA/A", "base-deleted", NO_COPY_FROM, "AA" },
+
+ { 0 },
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_delete(&b, "B"));
+
+ {
+ nodes_row_t nodes[] = {
+ { 0, "", "normal", 1, "" },
+
+ { 0, "A", "normal", 1, "A" },
+ { 0, "A/A", "normal", 1, "A/A" },
+ { 0, "A/A/A", "normal", 1, "A/A/A" },
+
+ { 1, "A", "base-deleted", NO_COPY_FROM },
+ { 1, "A/A", "base-deleted", NO_COPY_FROM },
+ { 1, "A/A/A", "base-deleted", NO_COPY_FROM, "AA" },
+
+ { 1, "AA", "normal", 1, "A/A/A", MOVED_HERE },
+
+ { 0 },
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+repo_wc_copy(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+ const char *repos_dir;
+ const char *new_repos_dir;
+ const char *new_repos_url;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "repo_wc_copy",
+ opts, pool));
+ SVN_ERR(sbox_add_and_commit_greek_tree(&b));
+
+ SVN_ERR(sbox_wc_copy_url(&b,
+ svn_path_url_add_component2(b.repos_url, "A/B",
+ pool),
+ -1, "AA"));
+
+ {
+ nodes_row_t nodes[] = {
+
+ {1, "AA/lambda", "normal", 1, "A/B/lambda"},
+ {1, "AA", "normal", 1, "A/B"},
+ {1, "AA/E/beta", "normal", 1, "A/B/E/beta"},
+ {1, "AA/E/alpha", "normal", 1, "A/B/E/alpha"},
+ {1, "AA/F", "normal", 1, "A/B/F"},
+ {1, "AA/E", "normal", 1, "A/B/E"},
+
+ { 0 },
+ };
+ SVN_ERR(check_db_rows(&b, "AA", nodes));
+ }
+
+ SVN_ERR(svn_uri_get_dirent_from_file_url(&repos_dir, b.repos_url,
+ pool));
+ new_repos_dir = apr_pstrcat(pool, repos_dir, "-2", SVN_VA_NULL);
+ new_repos_url = apr_pstrcat(pool, b.repos_url, "-2", SVN_VA_NULL);
+
+ svn_test_add_dir_cleanup(new_repos_dir);
+
+ SVN_ERR(svn_io_remove_dir2(new_repos_dir, TRUE, NULL, NULL, pool));
+ SVN_ERR(svn_io_copy_dir_recursively(repos_dir,
+ svn_dirent_dirname(new_repos_dir, pool),
+ svn_dirent_basename(new_repos_dir, pool),
+ FALSE, NULL, NULL, pool));
+
+ SVN_ERR(sbox_wc_relocate(&b, new_repos_url));
+
+ /* This produced an invalid copy in Subversion <= 1.8.8.
+ Status would show all descendants as incomplete */
+ SVN_ERR(sbox_wc_copy_url(&b,
+ svn_path_url_add_component2(b.repos_url, "A/B",
+ pool),
+ -1, "BB"));
+
+ {
+ nodes_row_t nodes[] = {
+
+ {1, "BB/lambda", "normal", 1, "A/B/lambda"},
+ {1, "BB", "normal", 1, "A/B"},
+ {1, "BB/E/beta", "normal", 1, "A/B/E/beta"},
+ {1, "BB/E/alpha", "normal", 1, "A/B/E/alpha"},
+ {1, "BB/F", "normal", 1, "A/B/F"},
+ {1, "BB/E", "normal", 1, "A/B/E"},
+
+ { 0 },
+ };
+ SVN_ERR(check_db_rows(&b, "BB", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+movedhere_extract_retract(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "movedhere_extract_retract",
+ opts, pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B1"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B2"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B3"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/C1"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/C2"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/C3"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/D1"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/D2"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/D3"));
+
+ SVN_ERR(sbox_wc_commit(&b, ""));
+
+ SVN_ERR(sbox_wc_propset(&b, "k", "v", "A/B1"));
+ SVN_ERR(sbox_wc_propset(&b, "k", "v", "A/B2"));
+ SVN_ERR(sbox_wc_propset(&b, "k", "v", "A/B3"));
+ SVN_ERR(sbox_wc_delete(&b, "A/C1"));
+ SVN_ERR(sbox_wc_delete(&b, "A/C2"));
+ SVN_ERR(sbox_wc_delete(&b, "A/C3"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/E1"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/E2"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/E3"));
+
+ SVN_ERR(sbox_wc_commit(&b, ""));
+
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+
+ SVN_ERR(sbox_wc_move(&b, "A", "Z"));
+
+ SVN_ERR(sbox_wc_delete(&b, "Z/B1"));
+ SVN_ERR(sbox_wc_delete(&b, "Z/C1"));
+ SVN_ERR(sbox_wc_delete(&b, "Z/D1"));
+
+ SVN_ERR(sbox_wc_move(&b, "Z/B2", "B2"));
+ SVN_ERR(sbox_wc_move(&b, "Z/C2", "C2"));
+ SVN_ERR(sbox_wc_move(&b, "Z/D2", "D2"));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "Z/B2"));
+ SVN_ERR(sbox_wc_mkdir(&b, "Z/C2"));
+ SVN_ERR(sbox_wc_mkdir(&b, "Z/D2"));
+ SVN_ERR(sbox_wc_mkdir(&b, "Z/E2"));
+
+ SVN_ERR(sbox_wc_update(&b, "", 2));
+ SVN_ERR(sbox_wc_resolve(&b, "A", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ SVN_ERR(sbox_wc_resolve(&b, "Z/B1", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+ SVN_ERR(sbox_wc_resolve(&b, "Z/B2", svn_depth_empty,
+ svn_wc_conflict_choose_mine_conflict));
+
+ SVN_ERR(sbox_wc_resolve(&b, "Z/C1", svn_depth_empty,
+ svn_wc_conflict_choose_merged));
+ SVN_ERR(sbox_wc_resolve(&b, "Z/C2", svn_depth_empty,
+ svn_wc_conflict_choose_merged));
+
+ SVN_ERR(sbox_wc_resolve(&b, "", svn_depth_infinity,
+ svn_wc_conflict_choose_mine_conflict));
+ {
+ nodes_row_t nodes[] = {
+
+ {0, "", "normal", 2, ""},
+ {0, "A", "normal", 2, "A"},
+ {0, "A/B1", "normal", 2, "A/B1", FALSE, NULL, FALSE, "k"},
+ {0, "A/B2", "normal", 2, "A/B2", FALSE, NULL, FALSE, "k"},
+ {0, "A/B3", "normal", 2, "A/B3", FALSE, NULL, FALSE, "k"},
+ {0, "A/D1", "normal", 2, "A/D1"},
+ {0, "A/D2", "normal", 2, "A/D2"},
+ {0, "A/D3", "normal", 2, "A/D3"},
+ {0, "A/E1", "normal", 2, "A/E1"},
+ {0, "A/E2", "normal", 2, "A/E2"},
+ {0, "A/E3", "normal", 2, "A/E3"},
+
+ {1, "A", "base-deleted", NO_COPY_FROM, "Z"},
+ {1, "A/B1", "base-deleted", NO_COPY_FROM},
+ {1, "A/B2", "base-deleted", NO_COPY_FROM},
+ {1, "A/B3", "base-deleted", NO_COPY_FROM},
+
+ {1, "A/D1", "base-deleted", NO_COPY_FROM},
+ {1, "A/D2", "base-deleted", NO_COPY_FROM},
+ {1, "A/D3", "base-deleted", NO_COPY_FROM},
+
+ {1, "A/E1", "base-deleted", NO_COPY_FROM},
+ {1, "A/E2", "base-deleted", NO_COPY_FROM},
+ {1, "A/E3", "base-deleted", NO_COPY_FROM},
+
+ {1, "B2", "normal", 2, "A/B2", MOVED_HERE, "k"},
+ {1, "C2", "normal", 1, "A/C2"},
+ {1, "D2", "normal", 1, "A/D2", MOVED_HERE},
+
+ {1, "Z", "normal", 2, "A", MOVED_HERE},
+ {1, "Z/B1", "normal", 2, "A/B1", MOVED_HERE, "k"},
+ {1, "Z/B2", "normal", 2, "A/B2", MOVED_HERE, "k"},
+ {1, "Z/B3", "normal", 2, "A/B3", MOVED_HERE, "k"},
+ {1, "Z/D1", "normal", 2, "A/D1", MOVED_HERE},
+ {1, "Z/D2", "normal", 2, "A/D2", MOVED_HERE},
+ {1, "Z/D3", "normal", 2, "A/D3", MOVED_HERE},
+ {1, "Z/E1", "normal", 2, "A/E1", MOVED_HERE},
+ {1, "Z/E2", "normal", 2, "A/E2", MOVED_HERE},
+ {1, "Z/E3", "normal", 2, "A/E3", MOVED_HERE},
+
+ {2, "Z/B2", "normal", NO_COPY_FROM, "B2"},
+ {2, "Z/C2", "normal", NO_COPY_FROM},
+ {2, "Z/D2", "normal", NO_COPY_FROM, "D2"},
+ {2, "Z/E2", "normal", NO_COPY_FROM},
+
+ {2, "Z/B1", "base-deleted", NO_COPY_FROM},
+ {2, "Z/D1", "base-deleted", NO_COPY_FROM},
+
+ { 0 },
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+
+static svn_error_t *
+nested_move_delete(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "nested_move_delete", opts, pool));
+
+ SVN_ERR(sbox_add_and_commit_greek_tree(&b));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A/Z"));
+ SVN_ERR(sbox_wc_move(&b, "A/B/lambda", "A/Z/lambda"));
+
+ SVN_ERR(sbox_wc_delete(&b, "A/B"));
+
+ {
+ nodes_row_t nodes_AB[] = {
+ {0, "A/B", "normal", 1, "A/B"},
+ {2, "A/B", "base-deleted", NO_COPY_FROM},
+ {0, "A/B/E", "normal", 1, "A/B/E"},
+ {2, "A/B/E", "base-deleted", NO_COPY_FROM},
+ {0, "A/B/E/alpha", "normal", 1, "A/B/E/alpha"},
+ {2, "A/B/E/alpha", "base-deleted", NO_COPY_FROM},
+ {0, "A/B/E/beta", "normal", 1, "A/B/E/beta"},
+ {2, "A/B/E/beta", "base-deleted", NO_COPY_FROM},
+ {0, "A/B/F", "normal", 1, "A/B/F"},
+ {2, "A/B/F", "base-deleted", NO_COPY_FROM},
+ {0, "A/B/lambda", "normal", 1, "A/B/lambda"},
+ {2, "A/B/lambda", "base-deleted", NO_COPY_FROM, "A/Z/lambda"},
+ {0}
+ };
+ nodes_row_t nodes_AZ[] = {
+ {2, "A/Z", "normal", NO_COPY_FROM},
+ {3, "A/Z/lambda", "normal", 1, "A/B/lambda", MOVED_HERE },
+ {0}
+ };
+
+ SVN_ERR(check_db_rows(&b, "A/B", nodes_AB));
+ SVN_ERR(check_db_rows(&b, "A/Z", nodes_AZ));
+ }
+
+ SVN_ERR(sbox_wc_move(&b, "A", "A_moved"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 0, ""},
+ {0, "A", "normal", 1, "A"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A_moved"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {0, "A/B/E", "normal", 1, "A/B/E"},
+ {1, "A/B/E", "base-deleted", NO_COPY_FROM},
+ {0, "A/B/E/alpha", "normal", 1, "A/B/E/alpha"},
+ {1, "A/B/E/alpha", "base-deleted", NO_COPY_FROM},
+ {0, "A/B/E/beta", "normal", 1, "A/B/E/beta"},
+ {1, "A/B/E/beta", "base-deleted", NO_COPY_FROM},
+ {0, "A/B/F", "normal", 1, "A/B/F"},
+ {1, "A/B/F", "base-deleted", NO_COPY_FROM},
+ {0, "A/B/lambda", "normal", 1, "A/B/lambda"},
+ {1, "A/B/lambda", "base-deleted", NO_COPY_FROM},
+ {0, "A/C", "normal", 1, "A/C"},
+ {1, "A/C", "base-deleted", NO_COPY_FROM},
+ {0, "A/D", "normal", 1, "A/D"},
+ {1, "A/D", "base-deleted", NO_COPY_FROM},
+ {0, "A/D/G", "normal", 1, "A/D/G"},
+ {1, "A/D/G", "base-deleted", NO_COPY_FROM},
+ {0, "A/D/G/pi", "normal", 1, "A/D/G/pi"},
+ {1, "A/D/G/pi", "base-deleted", NO_COPY_FROM},
+ {0, "A/D/G/rho", "normal", 1, "A/D/G/rho"},
+ {1, "A/D/G/rho", "base-deleted", NO_COPY_FROM},
+ {0, "A/D/G/tau", "normal", 1, "A/D/G/tau"},
+ {1, "A/D/G/tau", "base-deleted", NO_COPY_FROM},
+ {0, "A/D/H", "normal", 1, "A/D/H"},
+ {1, "A/D/H", "base-deleted", NO_COPY_FROM},
+ {0, "A/D/H/chi", "normal", 1, "A/D/H/chi"},
+ {1, "A/D/H/chi", "base-deleted", NO_COPY_FROM},
+ {0, "A/D/H/omega", "normal", 1, "A/D/H/omega"},
+ {1, "A/D/H/omega", "base-deleted", NO_COPY_FROM},
+ {0, "A/D/H/psi", "normal", 1, "A/D/H/psi"},
+ {1, "A/D/H/psi", "base-deleted", NO_COPY_FROM},
+ {0, "A/D/gamma", "normal", 1, "A/D/gamma"},
+ {1, "A/D/gamma", "base-deleted", NO_COPY_FROM},
+ {0, "A/mu", "normal", 1, "A/mu"},
+ {1, "A/mu", "base-deleted", NO_COPY_FROM},
+ {1, "A_moved", "normal", 1, "A", MOVED_HERE},
+ {1, "A_moved/B", "normal", 1, "A/B", MOVED_HERE},
+ {2, "A_moved/B", "base-deleted", NO_COPY_FROM},
+ {2, "A_moved/B/E", "base-deleted", NO_COPY_FROM},
+ {1, "A_moved/B/E", "normal", 1, "A/B/E", MOVED_HERE},
+ {1, "A_moved/B/E/alpha", "normal", 1, "A/B/E/alpha", MOVED_HERE},
+ {2, "A_moved/B/E/alpha", "base-deleted", NO_COPY_FROM},
+ {1, "A_moved/B/E/beta", "normal", 1, "A/B/E/beta", MOVED_HERE},
+ {2, "A_moved/B/E/beta", "base-deleted", NO_COPY_FROM},
+ {1, "A_moved/B/F", "normal", 1, "A/B/F", MOVED_HERE},
+ {2, "A_moved/B/F", "base-deleted", NO_COPY_FROM},
+ {1, "A_moved/B/lambda", "normal", 1, "A/B/lambda", MOVED_HERE},
+ {2, "A_moved/B/lambda", "base-deleted", NO_COPY_FROM, "A_moved/Z/lambda"},
+ {1, "A_moved/C", "normal", 1, "A/C", MOVED_HERE},
+ {1, "A_moved/D", "normal", 1, "A/D", MOVED_HERE},
+ {1, "A_moved/D/G", "normal", 1, "A/D/G", MOVED_HERE},
+ {1, "A_moved/D/G/pi", "normal", 1, "A/D/G/pi", MOVED_HERE},
+ {1, "A_moved/D/G/rho", "normal", 1, "A/D/G/rho", MOVED_HERE},
+ {1, "A_moved/D/G/tau", "normal", 1, "A/D/G/tau", MOVED_HERE},
+ {1, "A_moved/D/H", "normal", 1, "A/D/H", MOVED_HERE},
+ {1, "A_moved/D/H/chi", "normal", 1, "A/D/H/chi", MOVED_HERE},
+ {1, "A_moved/D/H/omega", "normal", 1, "A/D/H/omega", MOVED_HERE},
+ {1, "A_moved/D/H/psi", "normal", 1, "A/D/H/psi", MOVED_HERE},
+ {1, "A_moved/D/gamma", "normal", 1, "A/D/gamma", MOVED_HERE},
+ {2, "A_moved/Z", "normal", NO_COPY_FROM},
+ {3, "A_moved/Z/lambda", "normal", 1, "A/B/lambda", MOVED_HERE},
+ {1, "A_moved/mu", "normal", 1, "A/mu", MOVED_HERE},
+ {0, "iota", "normal", 1, "iota"},
+
+ {0}
+ };
+
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
/* ---------------------------------------------------------------------- */
/* The list of test functions */
@@ -3606,7 +9081,116 @@ struct svn_test_descriptor_t test_funcs[] =
#endif
SVN_TEST_OPTS_PASS(commit_file_external,
"commit_file_external (issue #4002)"),
+ SVN_TEST_OPTS_PASS(revert_file_externals,
+ "revert_file_externals"),
+ SVN_TEST_OPTS_PASS(copy_file_externals,
+ "copy_file_externals"),
+ SVN_TEST_OPTS_PASS(copy_wc_wc_server_excluded,
+ "test_wc_wc_copy_server_excluded"),
SVN_TEST_OPTS_PASS(incomplete_switch,
"incomplete_switch (issue 4040)"),
+ SVN_TEST_OPTS_PASS(nested_moves_child_first,
+ "nested_moves_child_first"),
+ SVN_TEST_OPTS_PASS(nested_moves_child_last,
+ "nested_moves_child_last"),
+ SVN_TEST_OPTS_PASS(move_in_copy,
+ "move_in_copy"),
+ SVN_TEST_OPTS_PASS(move_in_replace,
+ "move_in_replace"),
+ SVN_TEST_OPTS_PASS(copy_a_move,
+ "copy_a_move"),
+ SVN_TEST_OPTS_PASS(move_to_swap,
+ "move_to_swap"),
+ SVN_TEST_OPTS_PASS(revert_nested_move,
+ "revert_nested_move"),
+ SVN_TEST_OPTS_PASS(move_on_move,
+ "move_on_move"),
+ SVN_TEST_OPTS_PASS(move_on_move2,
+ "move_on_move2"),
+ SVN_TEST_OPTS_PASS(move_added,
+ "move_added"),
+ SVN_TEST_OPTS_PASS(move_update,
+ "move_update"),
+ SVN_TEST_OPTS_PASS(test_scan_delete,
+ "scan_delete"),
+ SVN_TEST_OPTS_PASS(test_follow_moved_to,
+ "follow_moved_to"),
+ SVN_TEST_OPTS_WIMP(mixed_rev_move,
+ "mixed_rev_move",
+ "needs different libsvn_wc entry point"),
+ SVN_TEST_OPTS_PASS(update_prop_mod_into_moved,
+ "update_prop_mod_into_moved"),
+ SVN_TEST_OPTS_PASS(nested_move_update,
+ "nested_move_update"),
+ SVN_TEST_OPTS_PASS(nested_move_commit,
+ "nested_move_commit (issue 4291)"),
+ SVN_TEST_OPTS_PASS(nested_move_update2,
+ "nested_move_update2"),
+ SVN_TEST_OPTS_PASS(move_update_conflicts,
+ "move_update_conflicts"),
+ SVN_TEST_OPTS_PASS(move_update_delete_mods,
+ "move_update_delete_mods"),
+ SVN_TEST_OPTS_PASS(nested_moves2,
+ "nested_moves2"),
+ SVN_TEST_OPTS_PASS(move_in_delete,
+ "move_in_delete (issue 4303)"),
+ SVN_TEST_OPTS_PASS(switch_move,
+ "switch_move"),
+ SVN_TEST_OPTS_PASS(move_replace,
+ "move_replace"),
+ SVN_TEST_OPTS_PASS(layered_moved_to,
+ "layered_moved_to"),
+ SVN_TEST_OPTS_PASS(update_within_move,
+ "update_within_move"),
+ SVN_TEST_OPTS_PASS(commit_moved_descendant,
+ "commit_moved_descendant"),
+ SVN_TEST_OPTS_XFAIL(commit_moved_away_descendant,
+ "commit_moved_away_descendant"),
+ SVN_TEST_OPTS_PASS(finite_move_update_bump,
+ "finite_move_update_bump"),
+ SVN_TEST_OPTS_PASS(move_away_delete_update,
+ "move_away_delete_update"),
+ SVN_TEST_OPTS_PASS(move_not_present_variants,
+ "move_not_present_variants"),
+ SVN_TEST_OPTS_PASS(update_child_under_add,
+ "update_child_under_add (issue 4111)"),
+ SVN_TEST_OPTS_PASS(delete_over_moved_away,
+ "delete_over_moved_away"),
+ SVN_TEST_OPTS_PASS(movedto_opdepth,
+ "moved_to op_depth"),
+ SVN_TEST_OPTS_PASS(new_basemove,
+ "new_basemove"),
+ SVN_TEST_OPTS_PASS(move_back,
+ "move_back (issue 4302)"),
+ SVN_TEST_OPTS_PASS(move_update_subtree,
+ "move_update_subtree (issue 4232)"),
+ SVN_TEST_OPTS_PASS(move_parent_into_child,
+ "move_parent_into_child (issue 4333)"),
+ SVN_TEST_OPTS_PASS(move_depth_expand,
+ "move depth expansion"),
+ SVN_TEST_OPTS_PASS(move_retract,
+ "move retract (issue 4336)"),
+ SVN_TEST_OPTS_PASS(move_delete_file_externals,
+ "move/delete file externals (issue 4293)"),
+ SVN_TEST_OPTS_PASS(update_with_tree_conflict,
+ "update with tree conflict (issue 4347)"),
+ SVN_TEST_OPTS_PASS(move_child_to_parent_revert,
+ "move child to parent and revert (issue 4436)"),
+ SVN_TEST_OPTS_PASS(move_delete_intermediate,
+ "move more than once, delete intermediate"),
+ SVN_TEST_OPTS_XFAIL(move_revert_intermediate,
+ "move more than once, revert intermediate"),
+ SVN_TEST_OPTS_PASS(move_replace_ancestor_with_child,
+ "move replace ancestor with child"),
+ SVN_TEST_OPTS_PASS(move_twice_within_delete,
+ "move twice and then delete"),
+ SVN_TEST_OPTS_PASS(repo_wc_copy,
+ "repo_wc_copy"),
+ SVN_TEST_OPTS_PASS(copy_mixed_rev_mods,
+ "copy mixed-rev with mods"),
+ SVN_TEST_OPTS_PASS(movedhere_extract_retract,
+ "movedhere extract retract"),
+ SVN_TEST_OPTS_PASS(nested_move_delete,
+ "nested move delete"),
SVN_TEST_NULL
};
diff --git a/subversion/tests/libsvn_wc/pristine-store-test.c b/subversion/tests/libsvn_wc/pristine-store-test.c
index 4227026..6df96fc 100644
--- a/subversion/tests/libsvn_wc/pristine-store-test.c
+++ b/subversion/tests/libsvn_wc/pristine-store-test.c
@@ -187,8 +187,7 @@ pristine_write_read(const svn_test_opts_t *opts,
SVN_ERR(svn_wc__db_pristine_remove(db, wc_abspath, data_sha1, pool));
err = svn_wc__db_pristine_read(&data_read_back, NULL, db, wc_abspath,
data_sha1, pool, pool);
- SVN_TEST_ASSERT(err != NULL);
- svn_error_clear(err);
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_WC_PATH_NOT_FOUND);
}
/* Ensure it's no longer found in the store. */
@@ -308,9 +307,7 @@ reject_mismatching_text(const svn_test_opts_t *opts,
SVN_ERR(write_and_checksum_temp_file(&path, NULL, NULL,
data2, pristine_tmp_dir, pool));
err = svn_wc__db_pristine_install(db, path, data_sha1, data_md5, pool);
- SVN_TEST_ASSERT(err != NULL);
- SVN_TEST_ASSERT(err->apr_err == SVN_ERR_WC_CORRUPT_TEXT_BASE);
- svn_error_clear(err);
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_WC_CORRUPT_TEXT_BASE);
}
return SVN_NO_ERROR;
diff --git a/subversion/tests/libsvn_wc/tree-conflict-data-test.c b/subversion/tests/libsvn_wc/tree-conflict-data-test.c
deleted file mode 100644
index 40d42ac..0000000
--- a/subversion/tests/libsvn_wc/tree-conflict-data-test.c
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-/*
- * tree-conflict-data-test.c -- test the storage of tree conflict data
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <apr_hash.h>
-#include <apr_tables.h>
-
-#include "svn_pools.h"
-#include "svn_hash.h"
-#include "svn_types.h"
-#include "svn_wc.h"
-#include "private/svn_wc_private.h"
-#include "utils.h"
-#include "../svn_test.h"
-#include "../../libsvn_wc/tree_conflicts.h"
-#include "../../libsvn_wc/wc.h"
-#include "../../libsvn_wc/wc_db.h"
-
-/* A quick way to create error messages. */
-static svn_error_t *
-fail(apr_pool_t *pool, const char *fmt, ...)
-{
- va_list ap;
- char *msg;
-
- va_start(ap, fmt);
- msg = apr_pvsprintf(pool, fmt, ap);
- va_end(ap);
-
- return svn_error_create(SVN_ERR_TEST_FAILED, 0, msg);
-}
-
-/* Raise a test error if EXPECTED and ACTUAL differ. */
-static svn_error_t *
-compare_version(const svn_wc_conflict_version_t *expected,
- const svn_wc_conflict_version_t *actual)
-{
- SVN_TEST_STRING_ASSERT(expected->repos_url, actual->repos_url);
- SVN_TEST_ASSERT(expected->peg_rev == actual->peg_rev);
- SVN_TEST_STRING_ASSERT(expected->path_in_repos, actual->path_in_repos);
- SVN_TEST_ASSERT(expected->node_kind == actual->node_kind);
- return SVN_NO_ERROR;
-}
-
-/* Raise a test error if EXPECTED and ACTUAL differ or if ACTUAL is NULL. */
-static svn_error_t *
-compare_conflict(const svn_wc_conflict_description2_t *expected,
- const svn_wc_conflict_description2_t *actual)
-{
- SVN_TEST_ASSERT(actual != NULL);
-
- SVN_TEST_STRING_ASSERT(expected->local_abspath, actual->local_abspath);
- SVN_TEST_ASSERT(expected->node_kind == actual->node_kind);
- SVN_TEST_ASSERT(expected->kind == actual->kind);
- SVN_TEST_STRING_ASSERT(expected->property_name, actual->property_name);
- SVN_TEST_ASSERT(expected->is_binary == actual->is_binary);
- SVN_TEST_STRING_ASSERT(expected->mime_type, actual->mime_type);
- SVN_TEST_ASSERT(expected->action == actual->action);
- SVN_TEST_ASSERT(expected->reason == actual->reason);
- SVN_TEST_STRING_ASSERT(expected->base_abspath, actual->base_abspath);
- SVN_TEST_STRING_ASSERT(expected->their_abspath, actual->their_abspath);
- SVN_TEST_STRING_ASSERT(expected->my_abspath, actual->my_abspath);
- SVN_TEST_STRING_ASSERT(expected->merged_file, actual->merged_file);
- SVN_TEST_ASSERT(expected->operation == actual->operation);
- compare_version(expected->src_left_version, actual->src_left_version);
- compare_version(expected->src_right_version, actual->src_right_version);
- return SVN_NO_ERROR;
-}
-
-/* Create and return a tree conflict description */
-static svn_wc_conflict_description2_t *
-tree_conflict_create(const char *local_abspath,
- svn_node_kind_t node_kind,
- svn_wc_operation_t operation,
- svn_wc_conflict_action_t action,
- svn_wc_conflict_reason_t reason,
- const char *left_repo,
- const char *left_path,
- svn_revnum_t left_revnum,
- svn_node_kind_t left_kind,
- const char *right_repo,
- const char *right_path,
- svn_revnum_t right_revnum,
- svn_node_kind_t right_kind,
- apr_pool_t *result_pool)
-{
- svn_wc_conflict_version_t *left, *right;
- svn_wc_conflict_description2_t *conflict;
-
- left = svn_wc_conflict_version_create(left_repo, left_path, left_revnum,
- left_kind, result_pool);
- right = svn_wc_conflict_version_create(right_repo, right_path, right_revnum,
- right_kind, result_pool);
- conflict = svn_wc_conflict_description_create_tree2(
- local_abspath, node_kind, operation,
- left, right, result_pool);
- conflict->action = action;
- conflict->reason = reason;
- return conflict;
-}
-
-static svn_error_t *
-test_deserialize_tree_conflict(apr_pool_t *pool)
-{
- const svn_wc_conflict_description2_t *conflict;
- svn_wc_conflict_description2_t *exp_conflict;
- const char *tree_conflict_data;
- const char *local_abspath;
- const svn_skel_t *skel;
-
- tree_conflict_data = "(conflict Foo.c file update deleted edited "
- "(version 0 2 -1 0 0 ) (version 0 2 -1 0 0 ))";
-
- SVN_ERR(svn_dirent_get_absolute(&local_abspath, "Foo.c", pool));
- exp_conflict = svn_wc_conflict_description_create_tree2(
- local_abspath, svn_node_file, svn_wc_operation_update,
- NULL, NULL, pool);
- exp_conflict->action = svn_wc_conflict_action_delete;
- exp_conflict->reason = svn_wc_conflict_reason_edited;
-
- skel = svn_skel__parse(tree_conflict_data, strlen(tree_conflict_data), pool);
- SVN_ERR(svn_wc__deserialize_conflict(&conflict, skel, "", pool, pool));
-
- if ((conflict->node_kind != exp_conflict->node_kind) ||
- (conflict->action != exp_conflict->action) ||
- (conflict->reason != exp_conflict->reason) ||
- (conflict->operation != exp_conflict->operation) ||
- (strcmp(conflict->local_abspath, exp_conflict->local_abspath) != 0))
- return fail(pool, "Unexpected tree conflict");
-
- return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-test_serialize_tree_conflict(apr_pool_t *pool)
-{
- svn_wc_conflict_description2_t *conflict;
- const char *tree_conflict_data;
- const char *expected;
- const char *local_abspath;
- svn_skel_t *skel;
-
- SVN_ERR(svn_dirent_get_absolute(&local_abspath, "Foo.c", pool));
-
- conflict = svn_wc_conflict_description_create_tree2(
- local_abspath, svn_node_file, svn_wc_operation_update,
- NULL, NULL, pool);
- conflict->action = svn_wc_conflict_action_delete;
- conflict->reason = svn_wc_conflict_reason_edited;
-
- SVN_ERR(svn_wc__serialize_conflict(&skel, conflict, pool, pool));
- tree_conflict_data = svn_skel__unparse(skel, pool)->data;
-
- expected = "(conflict Foo.c file update deleted edited "
- "(version 0 2 -1 0 0 ) (version 0 2 -1 0 0 ))";
-
- if (strcmp(expected, tree_conflict_data) != 0)
- return fail(pool, "Unexpected text from tree conflict\n"
- " Expected: %s\n"
- " Actual: %s\n", expected, tree_conflict_data);
-
- return SVN_NO_ERROR;
-}
-
-/* Test WC-DB-level conflict APIs. Especially tree conflicts. */
-static svn_error_t *
-test_read_write_tree_conflicts(const svn_test_opts_t *opts,
- apr_pool_t *pool)
-{
- svn_test__sandbox_t sbox;
-
- const char *parent_abspath;
- const char *child1_abspath, *child2_abspath;
- svn_wc_conflict_description2_t *conflict1, *conflict2;
-
- SVN_ERR(svn_test__sandbox_create(&sbox, "read_write_tree_conflicts", opts, pool));
- parent_abspath = svn_dirent_join(sbox.wc_abspath, "A", pool);
- SVN_ERR(svn_wc__db_op_add_directory(sbox.wc_ctx->db, parent_abspath, NULL,
- pool));
- child1_abspath = svn_dirent_join(parent_abspath, "foo", pool);
- child2_abspath = svn_dirent_join(parent_abspath, "bar", pool);
-
- conflict1 = tree_conflict_create(child1_abspath, svn_node_file,
- svn_wc_operation_update,
- svn_wc_conflict_action_delete,
- svn_wc_conflict_reason_edited,
- "dummy://localhost", "path/to/foo",
- 51, svn_node_file,
- "dummy://localhost", "path/to/foo",
- 52, svn_node_none,
- pool);
-
- conflict2 = tree_conflict_create(child2_abspath, svn_node_dir,
- svn_wc_operation_merge,
- svn_wc_conflict_action_replace,
- svn_wc_conflict_reason_edited,
- "dummy://localhost", "path/to/bar",
- 51, svn_node_dir,
- "dummy://localhost", "path/to/bar",
- 52, svn_node_file,
- pool);
-
- /* Write (conflict1 through WC-DB API, conflict2 through WC API) */
- SVN_ERR(svn_wc__db_op_set_tree_conflict(sbox.wc_ctx->db, child1_abspath,
- conflict1, pool));
- SVN_ERR(svn_wc__add_tree_conflict(sbox.wc_ctx, /*child2_abspath,*/
- conflict2, pool));
-
- /* Query (conflict1 through WC-DB API, conflict2 through WC API) */
- {
- svn_boolean_t text_c, prop_c, tree_c;
-
- SVN_ERR(svn_wc__internal_conflicted_p(&text_c, &prop_c, &tree_c,
- sbox.wc_ctx->db, child1_abspath, pool));
- SVN_TEST_ASSERT(tree_c);
- SVN_TEST_ASSERT(! text_c && ! prop_c);
-
- SVN_ERR(svn_wc_conflicted_p3(&text_c, &prop_c, &tree_c,
- sbox.wc_ctx, child2_abspath, pool));
- SVN_TEST_ASSERT(tree_c);
- SVN_TEST_ASSERT(! text_c && ! prop_c);
- }
-
- /* Read one (conflict1 through WC-DB API, conflict2 through WC API) */
- {
- const svn_wc_conflict_description2_t *read_conflict;
-
- SVN_ERR(svn_wc__db_op_read_tree_conflict(&read_conflict, sbox.wc_ctx->db,
- child1_abspath, pool, pool));
- SVN_ERR(compare_conflict(conflict1, read_conflict));
-
- SVN_ERR(svn_wc__get_tree_conflict(&read_conflict, sbox.wc_ctx,
- child2_abspath, pool, pool));
- SVN_ERR(compare_conflict(conflict2, read_conflict));
- }
-
- /* Read many (both through WC-DB API, both through WC API) */
- {
- apr_hash_t *all_conflicts;
- const svn_wc_conflict_description2_t *read_conflict;
-
- SVN_ERR(svn_wc__db_op_read_all_tree_conflicts(
- &all_conflicts, sbox.wc_ctx->db, parent_abspath, pool, pool));
- SVN_TEST_ASSERT(apr_hash_count(all_conflicts) == 2);
- read_conflict = apr_hash_get(all_conflicts, "foo", APR_HASH_KEY_STRING);
- SVN_ERR(compare_conflict(conflict1, read_conflict));
- read_conflict = apr_hash_get(all_conflicts, "bar", APR_HASH_KEY_STRING);
- SVN_ERR(compare_conflict(conflict2, read_conflict));
-
- SVN_ERR(svn_wc__get_all_tree_conflicts(
- &all_conflicts, sbox.wc_ctx, parent_abspath, pool, pool));
- SVN_TEST_ASSERT(apr_hash_count(all_conflicts) == 2);
- read_conflict = apr_hash_get(all_conflicts, child1_abspath,
- APR_HASH_KEY_STRING);
- SVN_ERR(compare_conflict(conflict1, read_conflict));
- read_conflict = apr_hash_get(all_conflicts, child2_abspath,
- APR_HASH_KEY_STRING);
- SVN_ERR(compare_conflict(conflict2, read_conflict));
- }
-
- /* ### TODO: to test...
- * svn_wc__db_read_conflict_victims
- * svn_wc__db_read_conflicts
- * svn_wc__node_get_conflict_info
- * svn_wc__del_tree_conflict
- */
-
- return SVN_NO_ERROR;
-}
-
-/* The test table. */
-
-struct svn_test_descriptor_t test_funcs[] =
- {
- SVN_TEST_NULL,
- SVN_TEST_PASS2(test_deserialize_tree_conflict,
- "deserialize tree conflict"),
- SVN_TEST_PASS2(test_serialize_tree_conflict,
- "serialize tree conflict"),
- SVN_TEST_OPTS_PASS(test_read_write_tree_conflicts,
- "read and write tree conflicts"),
- SVN_TEST_NULL
- };
-
diff --git a/subversion/tests/libsvn_wc/utils.c b/subversion/tests/libsvn_wc/utils.c
index 49d3303..1682b98 100644
--- a/subversion/tests/libsvn_wc/utils.c
+++ b/subversion/tests/libsvn_wc/utils.c
@@ -23,6 +23,7 @@
#include "svn_error.h"
#include "svn_client.h"
#include "svn_pools.h"
+#include "private/svn_dep_compat.h"
#include "utils.h"
@@ -81,17 +82,18 @@ create_repos_and_wc(const char **repos_url,
/* Create a WC. Set *WC_ABSPATH to its path. */
{
+ apr_pool_t *subpool = svn_pool_create(pool); /* To cleanup CTX */
svn_client_ctx_t *ctx;
svn_opt_revision_t head_rev = { svn_opt_revision_head, {0} };
- SVN_ERR(svn_client_create_context(&ctx, pool));
- /* SVN_ERR(svn_config_get_config(&ctx->config, config_dir, pool)); */
+ SVN_ERR(svn_client_create_context2(&ctx, NULL, subpool));
SVN_ERR(svn_dirent_get_absolute(wc_abspath, wc_path, pool));
SVN_ERR(svn_client_checkout3(NULL, *repos_url, *wc_abspath,
&head_rev, &head_rev, svn_depth_infinity,
FALSE /* ignore_externals */,
FALSE /* allow_unver_obstructions */,
- ctx, pool));
+ ctx, subpool));
+ svn_pool_destroy(subpool);
}
/* Register this WC for cleanup. */
@@ -132,7 +134,8 @@ svn_test__create_fake_wc(const char *wc_abspath,
svn_error_clear(svn_io_remove_file2(db_abspath, FALSE, scratch_pool));
SVN_ERR(svn_wc__db_util_open_db(&sdb, wc_abspath, "wc.db",
- svn_sqlite__mode_rwcreate, my_statements,
+ svn_sqlite__mode_rwcreate,
+ FALSE /* exclusive */, my_statements,
result_pool, scratch_pool));
for (i = 0; my_statements[i] != NULL; i++)
SVN_ERR(svn_sqlite__exec_statements(sdb, /* my_statements[] */ i));
@@ -153,3 +156,377 @@ svn_test__sandbox_create(svn_test__sandbox_t *sandbox,
SVN_ERR(svn_wc_context_create(&sandbox->wc_ctx, NULL, pool, pool));
return SVN_NO_ERROR;
}
+
+void
+sbox_file_write(svn_test__sandbox_t *b, const char *path, const char *text)
+{
+ FILE *f = fopen(sbox_wc_path(b, path), "w");
+
+ fputs(text, f);
+ fclose(f);
+}
+
+svn_error_t *
+sbox_wc_add(svn_test__sandbox_t *b, const char *path)
+{
+ const char *parent_abspath;
+
+ path = sbox_wc_path(b, path);
+ parent_abspath = svn_dirent_dirname(path, b->pool);
+ SVN_ERR(svn_wc__acquire_write_lock(NULL, b->wc_ctx, parent_abspath, FALSE,
+ b->pool, b->pool));
+ SVN_ERR(svn_wc_add_from_disk2(b->wc_ctx, path, NULL /*props*/,
+ NULL, NULL, b->pool));
+ SVN_ERR(svn_wc__release_write_lock(b->wc_ctx, parent_abspath, b->pool));
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+sbox_disk_mkdir(svn_test__sandbox_t *b, const char *path)
+{
+ path = sbox_wc_path(b, path);
+ SVN_ERR(svn_io_dir_make(path, APR_FPROT_OS_DEFAULT, b->pool));
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+sbox_wc_mkdir(svn_test__sandbox_t *b, const char *path)
+{
+ SVN_ERR(sbox_disk_mkdir(b, path));
+ SVN_ERR(sbox_wc_add(b, path));
+ return SVN_NO_ERROR;
+}
+
+#if 0 /* not used */
+/* Copy the file or directory tree FROM_PATH to TO_PATH which must not exist
+ * beforehand. */
+svn_error_t *
+sbox_disk_copy(svn_test__sandbox_t *b, const char *from_path, const char *to_path)
+{
+ const char *to_dir, *to_name;
+
+ from_path = sbox_wc_path(b, from_path);
+ to_path = sbox_wc_path(b, to_path);
+ svn_dirent_split(&to_dir, &to_name, to_path, b->pool);
+ return svn_io_copy_dir_recursively(from_path, to_dir, to_name,
+ FALSE, NULL, NULL, b->pool);
+}
+#endif
+
+svn_error_t *
+sbox_wc_copy(svn_test__sandbox_t *b, const char *from_path, const char *to_path)
+{
+ const char *parent_abspath;
+
+ from_path = sbox_wc_path(b, from_path);
+ to_path = sbox_wc_path(b, to_path);
+ parent_abspath = svn_dirent_dirname(to_path, b->pool);
+ SVN_ERR(svn_wc__acquire_write_lock(NULL, b->wc_ctx, parent_abspath, FALSE,
+ b->pool, b->pool));
+ SVN_ERR(svn_wc_copy3(b->wc_ctx, from_path, to_path, FALSE,
+ NULL, NULL, NULL, NULL, b->pool));
+ SVN_ERR(svn_wc__release_write_lock(b->wc_ctx, parent_abspath, b->pool));
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+sbox_wc_copy_url(svn_test__sandbox_t *b, const char *from_url,
+ svn_revnum_t revision, const char *to_path)
+{
+ apr_pool_t *scratch_pool = b->pool;
+ svn_client_ctx_t *ctx;
+ svn_opt_revision_t rev = { svn_opt_revision_unspecified, {0} };
+ svn_client_copy_source_t* src;
+ apr_array_header_t *sources = apr_array_make(
+ scratch_pool, 1,
+ sizeof(svn_client_copy_source_t *));
+
+ SVN_ERR(svn_client_create_context2(&ctx, NULL, scratch_pool));
+ ctx->wc_ctx = b->wc_ctx;
+
+ if (SVN_IS_VALID_REVNUM(revision))
+ {
+ rev.kind = svn_opt_revision_number;
+ rev.value.number = revision;
+ }
+
+ src = apr_pcalloc(scratch_pool, sizeof(*src));
+
+ src->path = from_url;
+ src->revision = &rev;
+ src->peg_revision = &rev;
+
+ APR_ARRAY_PUSH(sources, svn_client_copy_source_t *) = src;
+
+ SVN_ERR(svn_client_copy6(sources, sbox_wc_path(b, to_path),
+ FALSE, FALSE, FALSE, NULL, NULL, NULL,
+ ctx, scratch_pool));
+
+ ctx->wc_ctx = NULL;
+
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+sbox_wc_revert(svn_test__sandbox_t *b, const char *path, svn_depth_t depth)
+{
+ const char *abspath = sbox_wc_path(b, path);
+ const char *dir_abspath;
+ const char *lock_root_abspath;
+
+ if (strcmp(abspath, b->wc_abspath))
+ dir_abspath = svn_dirent_dirname(abspath, b->pool);
+ else
+ dir_abspath = abspath;
+
+ SVN_ERR(svn_wc__acquire_write_lock(&lock_root_abspath, b->wc_ctx,
+ dir_abspath, FALSE /* lock_anchor */,
+ b->pool, b->pool));
+ SVN_ERR(svn_wc_revert4(b->wc_ctx, abspath, depth, FALSE, NULL,
+ NULL, NULL, /* cancel baton + func */
+ NULL, NULL, /* notify baton + func */
+ b->pool));
+ SVN_ERR(svn_wc__release_write_lock(b->wc_ctx, lock_root_abspath, b->pool));
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+sbox_wc_delete(svn_test__sandbox_t *b, const char *path)
+{
+ const char *abspath = sbox_wc_path(b, path);
+ const char *dir_abspath = svn_dirent_dirname(abspath, b->pool);
+ const char *lock_root_abspath;
+
+ SVN_ERR(svn_wc__acquire_write_lock(&lock_root_abspath, b->wc_ctx,
+ dir_abspath, FALSE,
+ b->pool, b->pool));
+ SVN_ERR(svn_wc_delete4(b->wc_ctx, abspath, FALSE, TRUE,
+ NULL, NULL, /* cancel baton + func */
+ NULL, NULL, /* notify baton + func */
+ b->pool));
+ SVN_ERR(svn_wc__release_write_lock(b->wc_ctx, lock_root_abspath, b->pool));
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+sbox_wc_exclude(svn_test__sandbox_t *b, const char *path)
+{
+ const char *abspath = sbox_wc_path(b, path);
+ const char *lock_root_abspath;
+
+ SVN_ERR(svn_wc__acquire_write_lock(&lock_root_abspath, b->wc_ctx,
+ abspath, TRUE,
+ b->pool, b->pool));
+ SVN_ERR(svn_wc_exclude(b->wc_ctx, abspath,
+ NULL, NULL, /* cancel baton + func */
+ NULL, NULL, /* notify baton + func */
+ b->pool));
+ SVN_ERR(svn_wc__release_write_lock(b->wc_ctx, lock_root_abspath, b->pool));
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+sbox_wc_commit_ex(svn_test__sandbox_t *b,
+ apr_array_header_t *targets,
+ svn_depth_t depth)
+{
+ svn_client_ctx_t *ctx;
+ apr_pool_t *scratch_pool = svn_pool_create(b->pool);
+ svn_error_t *err;
+
+ SVN_ERR(svn_client_create_context2(&ctx, NULL, scratch_pool));
+ ctx->wc_ctx = b->wc_ctx;
+
+ /* A successfull commit doesn't close the ra session, but leaves that
+ to the caller. This leaves the BDB handle open, which might cause
+ problems in further test code. (op_depth_tests.c's repo_wc_copy) */
+ err = svn_client_commit6(targets, depth,
+ FALSE /* keep_locks */,
+ FALSE /* keep_changelist */,
+ TRUE /* commit_as_operations */,
+ TRUE /* include_file_externals */,
+ FALSE /* include_dir_externals */,
+ NULL, NULL, NULL, NULL, ctx, scratch_pool);
+
+ svn_pool_destroy(scratch_pool);
+
+ return svn_error_trace(err);
+}
+
+svn_error_t *
+sbox_wc_commit(svn_test__sandbox_t *b, const char *path)
+{
+ apr_array_header_t *targets = apr_array_make(b->pool, 1,
+ sizeof(const char *));
+
+ APR_ARRAY_PUSH(targets, const char *) = sbox_wc_path(b, path);
+ return sbox_wc_commit_ex(b, targets, svn_depth_infinity);
+}
+
+svn_error_t *
+sbox_wc_update_depth(svn_test__sandbox_t *b,
+ const char *path,
+ svn_revnum_t revnum,
+ svn_depth_t depth,
+ svn_boolean_t sticky)
+{
+ svn_client_ctx_t *ctx;
+ apr_array_header_t *result_revs;
+ apr_array_header_t *paths = apr_array_make(b->pool, 1,
+ sizeof(const char *));
+ svn_opt_revision_t revision;
+
+ revision.kind = svn_opt_revision_number;
+ revision.value.number = revnum;
+
+ APR_ARRAY_PUSH(paths, const char *) = sbox_wc_path(b, path);
+ SVN_ERR(svn_client_create_context2(&ctx, NULL, b->pool));
+ ctx->wc_ctx = b->wc_ctx;
+ return svn_client_update4(&result_revs, paths, &revision, depth,
+ sticky, FALSE, FALSE, FALSE, FALSE,
+ ctx, b->pool);
+}
+
+svn_error_t *
+sbox_wc_update(svn_test__sandbox_t *b, const char *path, svn_revnum_t revnum)
+{
+ SVN_ERR(sbox_wc_update_depth(b, path, revnum, svn_depth_unknown, FALSE));
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+sbox_wc_switch(svn_test__sandbox_t *b,
+ const char *path,
+ const char *url,
+ svn_depth_t depth)
+{
+ svn_client_ctx_t *ctx;
+ svn_revnum_t result_rev;
+ svn_opt_revision_t head_rev = { svn_opt_revision_head, {0} };
+
+ url = apr_pstrcat(b->pool, b->repos_url, url, (char*)NULL);
+ SVN_ERR(svn_client_create_context2(&ctx, NULL, b->pool));
+ ctx->wc_ctx = b->wc_ctx;
+ return svn_client_switch3(&result_rev, sbox_wc_path(b, path), url,
+ &head_rev, &head_rev, depth,
+ FALSE /* depth_is_sticky */,
+ TRUE /* ignore_externals */,
+ FALSE /* allow_unver_obstructions */,
+ TRUE /* ignore_ancestry */,
+ ctx, b->pool);
+}
+
+svn_error_t *
+sbox_wc_resolved(svn_test__sandbox_t *b, const char *path)
+{
+ return sbox_wc_resolve(b, path, svn_depth_infinity,
+ svn_wc_conflict_choose_merged);
+}
+
+svn_error_t *
+sbox_wc_resolve(svn_test__sandbox_t *b, const char *path, svn_depth_t depth,
+ svn_wc_conflict_choice_t conflict_choice)
+{
+ const char *lock_abspath;
+ svn_error_t *err;
+
+ SVN_ERR(svn_wc__acquire_write_lock_for_resolve(&lock_abspath, b->wc_ctx,
+ sbox_wc_path(b, path),
+ b->pool, b->pool));
+ err = svn_wc__resolve_conflicts(b->wc_ctx, sbox_wc_path(b, path),
+ depth,
+ TRUE /* resolve_text */,
+ "" /* resolve_prop (ALL props) */,
+ TRUE /* resolve_tree */,
+ conflict_choice,
+ NULL, NULL, /* conflict func */
+ NULL, NULL, /* cancellation */
+ NULL, NULL, /* notification */
+ b->pool);
+
+ err = svn_error_compose_create(err, svn_wc__release_write_lock(b->wc_ctx,
+ lock_abspath,
+ b->pool));
+ return err;
+}
+
+svn_error_t *
+sbox_wc_move(svn_test__sandbox_t *b, const char *src, const char *dst)
+{
+ svn_client_ctx_t *ctx;
+ apr_array_header_t *paths = apr_array_make(b->pool, 1,
+ sizeof(const char *));
+
+ SVN_ERR(svn_client_create_context2(&ctx, NULL, b->pool));
+ ctx->wc_ctx = b->wc_ctx;
+ APR_ARRAY_PUSH(paths, const char *) = sbox_wc_path(b, src);
+ return svn_client_move7(paths, sbox_wc_path(b, dst),
+ FALSE /* move_as_child */,
+ FALSE /* make_parents */,
+ TRUE /* allow_mixed_revisions */,
+ FALSE /* metadata_only */,
+ NULL /* revprop_table */,
+ NULL, NULL, /* commit callback */
+ ctx, b->pool);
+}
+
+svn_error_t *
+sbox_wc_propset(svn_test__sandbox_t *b,
+ const char *name,
+ const char *value,
+ const char *path)
+{
+ svn_client_ctx_t *ctx;
+ apr_array_header_t *paths = apr_array_make(b->pool, 1,
+ sizeof(const char *));
+ svn_string_t *pval = value ? svn_string_create(value, b->pool) : NULL;
+
+ SVN_ERR(svn_client_create_context2(&ctx, NULL, b->pool));
+ ctx->wc_ctx = b->wc_ctx;
+ APR_ARRAY_PUSH(paths, const char *) = sbox_wc_path(b, path);
+ return svn_client_propset_local(name, pval, paths, svn_depth_empty,
+ TRUE /* skip_checks */,
+ NULL, ctx, b->pool);
+}
+
+svn_error_t *
+sbox_wc_relocate(svn_test__sandbox_t *b,
+ const char *new_repos_url)
+{
+ apr_pool_t *scratch_pool = b->pool;
+ svn_client_ctx_t *ctx;
+
+ SVN_ERR(svn_client_create_context2(&ctx, NULL, scratch_pool));
+ ctx->wc_ctx = b->wc_ctx;
+
+ SVN_ERR(svn_client_relocate2(b->wc_abspath, b->repos_url,
+ new_repos_url, FALSE, ctx,scratch_pool));
+
+ b->repos_url = apr_pstrdup(b->pool, new_repos_url);
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+sbox_add_and_commit_greek_tree(svn_test__sandbox_t *b)
+{
+ const struct svn_test__tree_entry_t *node;
+
+ for (node = svn_test__greek_tree_nodes; node->path; node++)
+ {
+ if (node->contents)
+ {
+ sbox_file_write(b, node->path, node->contents);
+ SVN_ERR(sbox_wc_add(b, node->path));
+ }
+ else
+ {
+ SVN_ERR(sbox_wc_mkdir(b, node->path));
+ }
+ }
+
+ SVN_ERR(sbox_wc_commit(b, ""));
+
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/tests/libsvn_wc/utils.h b/subversion/tests/libsvn_wc/utils.h
index 83114e2..3004634 100644
--- a/subversion/tests/libsvn_wc/utils.h
+++ b/subversion/tests/libsvn_wc/utils.h
@@ -74,6 +74,107 @@ svn_test__sandbox_create(svn_test__sandbox_t *sandbox,
const svn_test_opts_t *opts,
apr_pool_t *pool);
+/* ---------------------------------------------------------------------- */
+/* Functions for easy manipulation of a WC. Paths given to these functions
+ * can be relative to the WC root as stored in the WC baton. */
+
+/* Return the abspath of PATH which is absolute or relative to the WC in B. */
+#define sbox_wc_path(b, path) \
+ (svn_dirent_join((b)->wc_abspath, (path), (b)->pool))
+
+/* Create a file on disk at PATH, with TEXT as its content. */
+void
+sbox_file_write(svn_test__sandbox_t *b, const char *path, const char *text);
+
+/* Schedule for addition the single node that exists on disk at PATH,
+ * non-recursively. */
+svn_error_t *
+sbox_wc_add(svn_test__sandbox_t *b, const char *path);
+
+/* Create a single directory on disk. */
+svn_error_t *
+sbox_disk_mkdir(svn_test__sandbox_t *b, const char *path);
+
+/* Create a single directory on disk and schedule it for addition. */
+svn_error_t *
+sbox_wc_mkdir(svn_test__sandbox_t *b, const char *path);
+
+/* Copy the WC file or directory tree FROM_PATH to TO_PATH which must not
+ * exist beforehand. */
+svn_error_t *
+sbox_wc_copy(svn_test__sandbox_t *b, const char *from_path, const char *to_path);
+
+svn_error_t *
+sbox_wc_copy_url(svn_test__sandbox_t *b, const char *from_url,
+ svn_revnum_t revision, const char *to_path);
+
+svn_error_t *
+sbox_wc_relocate(svn_test__sandbox_t *b,
+ const char *new_repos_url);
+
+/* Revert a WC file or directory tree at PATH */
+svn_error_t *
+sbox_wc_revert(svn_test__sandbox_t *b, const char *path, svn_depth_t depth);
+
+/* */
+svn_error_t *
+sbox_wc_delete(svn_test__sandbox_t *b, const char *path);
+
+/* */
+svn_error_t *
+sbox_wc_exclude(svn_test__sandbox_t *b, const char *path);
+
+/* */
+svn_error_t *
+sbox_wc_commit(svn_test__sandbox_t *b, const char *path);
+
+/* */
+svn_error_t *
+sbox_wc_commit_ex(svn_test__sandbox_t *b,
+ apr_array_header_t *targets,
+ svn_depth_t depth);
+
+/* */
+svn_error_t *
+sbox_wc_update(svn_test__sandbox_t *b, const char *path, svn_revnum_t revnum);
+
+svn_error_t *
+sbox_wc_update_depth(svn_test__sandbox_t *b,
+ const char *path,
+ svn_revnum_t revnum,
+ svn_depth_t depth,
+ svn_boolean_t sticky);
+
+svn_error_t *
+sbox_wc_switch(svn_test__sandbox_t *b,
+ const char *path,
+ const char *url,
+ svn_depth_t depth);
+
+/* */
+svn_error_t *
+sbox_wc_resolved(svn_test__sandbox_t *b, const char *path);
+
+/* */
+svn_error_t *
+sbox_wc_resolve(svn_test__sandbox_t *b, const char *path, svn_depth_t depth,
+ svn_wc_conflict_choice_t conflict_choice);
+
+/* */
+svn_error_t *
+sbox_wc_move(svn_test__sandbox_t *b, const char *src, const char *dst);
+
+/* Set property NAME to VALUE on PATH. If VALUE=NULL, delete the property. */
+svn_error_t *
+sbox_wc_propset(svn_test__sandbox_t *b,
+ const char *name,
+ const char *value,
+ const char *path);
+
+/* Create the Greek tree on disk in the WC, and commit it. */
+svn_error_t *
+sbox_add_and_commit_greek_tree(svn_test__sandbox_t *b);
+
/* Create a WC directory at WC_ABSPATH containing a fake WC DB, generated by
* executing the SQL statements EXTRA_STATEMENTS in addition to the standard
diff --git a/subversion/tests/libsvn_wc/wc-incomplete-tester.c b/subversion/tests/libsvn_wc/wc-incomplete-tester.c
index bd66641..2aac605 100644
--- a/subversion/tests/libsvn_wc/wc-incomplete-tester.c
+++ b/subversion/tests/libsvn_wc/wc-incomplete-tester.c
@@ -78,7 +78,7 @@ int main(int argc, const char *argv[])
"Mark WCPATH incomplete at REVISION [and REPOS_RELPATH]\n");
exit(EXIT_FAILURE);
}
-
+
if (apr_initialize())
{
fprintf(stderr, "apr_initialize failed\n");
diff --git a/subversion/tests/libsvn_wc/wc-queries-test.c b/subversion/tests/libsvn_wc/wc-queries-test.c
new file mode 100644
index 0000000..0621720
--- /dev/null
+++ b/subversion/tests/libsvn_wc/wc-queries-test.c
@@ -0,0 +1,897 @@
+/*
+ * wc-queries-test.c -- test the evaluation of the wc Sqlite queries
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#include "svn_pools.h"
+#include "svn_ctype.h"
+#include "private/svn_dep_compat.h"
+
+#include "svn_private_config.h"
+
+#include "../svn_test.h"
+
+#ifdef SVN_SQLITE_INLINE
+/* Include sqlite3 inline, making all symbols private. */
+ #define SQLITE_API static
+ #ifdef __APPLE__
+ #include <Availability.h>
+ #if __MAC_OS_X_VERSION_MIN_REQUIRED < 1060
+ /* <libkern/OSAtomic.h> is included on OS X by sqlite3.c, and
+ on old systems (Leopard or older), it cannot be compiled
+ with -std=c89 because it uses inline. This is a work-around. */
+ #define inline __inline__
+ #include <libkern/OSAtomic.h>
+ #undef inline
+ #endif
+ #endif
+ #include <sqlite3.c>
+#else
+ #include <sqlite3.h>
+#endif
+
+#include "../../libsvn_wc/wc-queries.h"
+
+WC_QUERIES_SQL_DECLARE_STATEMENTS(wc_queries);
+WC_QUERIES_SQL_DECLARE_STATEMENT_INFO(wc_query_info);
+
+/* The first query after the normal wc queries */
+#define STMT_SCHEMA_FIRST STMT_CREATE_SCHEMA
+
+#define SQLITE_ERR(x) \
+{ \
+ int sqlite_err__temp = (x); \
+ if (sqlite_err__temp != SQLITE_OK) \
+ return svn_error_createf(SVN_ERR_SQLITE_ERROR, \
+ NULL, "sqlite: %s", \
+ sqlite3_errmsg(sdb)); \
+} while (0)
+
+/* Schema creation statements fail during preparing when the table
+ already exists, and must be evaluated before testing the
+ queries. Statements above STMT_SCHEMA_FIRST only need to be
+ included here when they need to be evaluated before testing the
+ statements */
+static const int schema_statements[] =
+{
+ /* Usual tables */
+ STMT_CREATE_SCHEMA,
+ STMT_CREATE_NODES,
+ STMT_CREATE_NODES_TRIGGERS,
+ STMT_CREATE_EXTERNALS,
+ STMT_INSTALL_SCHEMA_STATISTICS,
+ /* Memory tables */
+ STMT_CREATE_TARGETS_LIST,
+ STMT_CREATE_CHANGELIST_LIST,
+ STMT_CREATE_CHANGELIST_TRIGGER,
+ STMT_CREATE_TARGET_PROP_CACHE,
+ STMT_CREATE_REVERT_LIST,
+ STMT_CREATE_DELETE_LIST,
+ STMT_CREATE_UPDATE_MOVE_LIST,
+ -1 /* final marker */
+};
+
+/* These statements currently trigger warnings. It would be nice if
+ we could annotate these in wc-queries.sql */
+static const int slow_statements[] =
+{
+ /* Operate on the entire WC */
+ STMT_SELECT_ALL_NODES, /* schema validation code */
+
+ /* Updates all records for a repository (designed slow) */
+ STMT_UPDATE_LOCK_REPOS_ID,
+
+ /* Full temporary table read */
+ STMT_INSERT_ACTUAL_EMPTIES,
+ STMT_SELECT_REVERT_LIST_RECURSIVE,
+ STMT_SELECT_DELETE_LIST,
+ STMT_SELECT_UPDATE_MOVE_LIST,
+
+ /* Designed as slow to avoid penalty on other queries */
+ STMT_SELECT_UNREFERENCED_PRISTINES,
+
+ /* Slow, but just if foreign keys are enabled:
+ * STMT_DELETE_PRISTINE_IF_UNREFERENCED,
+ */
+ STMT_HAVE_STAT1_TABLE, /* Queries sqlite_master which has no index */
+
+ -1 /* final marker */
+};
+
+/* Statements that just read the first record from a table,
+ using the primary key. Specialized as different sqlite
+ versions produce different results */
+static const int primary_key_statements[] =
+{
+ /* Is there a record? ### Can we somehow check for LIMIT 1,
+ and primary key instead of adding a list? */
+ STMT_LOOK_FOR_WORK,
+ STMT_SELECT_WORK_ITEM,
+
+ -1 /* final marker */
+};
+
+/* Helper function to determine if a statement is in a list */
+static svn_boolean_t
+in_list(const int list[], int stmt_idx)
+{
+ int i;
+
+ for (i = 0; list[i] != -1; i++)
+ {
+ if (list[i] == stmt_idx)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+/* Helpers to determine if a statement is in a common list */
+#define is_slow_statement(stmt_idx) in_list(slow_statements, stmt_idx)
+#define is_schema_statement(stmt_idx) \
+ ((stmt_idx >= STMT_SCHEMA_FIRST) || in_list(schema_statements, stmt_idx))
+
+
+/* Create an in-memory db for evaluating queries */
+static svn_error_t *
+create_memory_db(sqlite3 **db,
+ apr_pool_t *pool)
+{
+ sqlite3 *sdb;
+ int i;
+
+ /* Create an in-memory raw database */
+ SVN_TEST_ASSERT(sqlite3_initialize() == SQLITE_OK);
+ SQLITE_ERR(sqlite3_open_v2("", &sdb,
+ SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
+ NULL));
+
+ /* Create schema */
+ for (i = 0; schema_statements[i] != -1; i++)
+ {
+ SQLITE_ERR(sqlite3_exec(sdb, wc_queries[schema_statements[i]], NULL, NULL, NULL));
+ }
+
+ *db = sdb;
+ return SVN_NO_ERROR;
+}
+
+/* Verify sqlite3 runtime version */
+static svn_error_t *
+test_sqlite_version(apr_pool_t *scratch_pool)
+{
+ printf("DBG: Using Sqlite %s\n", sqlite3_version);
+
+ if (sqlite3_libversion_number() != SQLITE_VERSION_NUMBER)
+ printf("DBG: Compiled against Sqlite %s", SQLITE_VERSION);
+
+ if (sqlite3_libversion_number() < SQLITE_VERSION_NUMBER)
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "Compiled against Sqlite %s (at runtime we have Sqlite %s)",
+ SQLITE_VERSION, sqlite3_version);
+
+#if !SQLITE_VERSION_AT_LEAST(3, 7, 9)
+ return svn_error_create(SVN_ERR_TEST_FAILED, NULL,
+ "Sqlite upgrade recommended:\n"
+ "****************************************************************\n"
+ "* Subversion needs at least SQLite 3.7.9 to work optimally *\n"
+ "* *\n"
+ "* With older versions, at least some queries that are expected *\n"
+ "* to be using an index are not. This makes some operations use *\n"
+ "* every node in the working copy instead of just one. *\n"
+ "* *\n"
+ "* While Subversion works correctly in this case, you may see *\n"
+ "* slowdowns of WELL MORE THAN 1000* in some cases! *\n"
+ "* *\n"
+ "* *\n"
+ "* SQLITE UPGRADE RECOMMENDED *\n"
+ "****************************************************************\n");
+#else
+ return SVN_NO_ERROR;
+#endif
+}
+
+/* Parse all normal queries */
+static svn_error_t *
+test_parsable(apr_pool_t *scratch_pool)
+{
+ sqlite3 *sdb;
+ int i;
+
+ SVN_ERR(create_memory_db(&sdb, scratch_pool));
+
+ for (i=0; i < STMT_SCHEMA_FIRST; i++)
+ {
+ sqlite3_stmt *stmt;
+ const char *text = wc_queries[i];
+
+ if (is_schema_statement(i))
+ continue;
+
+ /* Some of our statement texts contain multiple queries. We prepare
+ them all. */
+ while (*text != '\0')
+ {
+ const char *tail;
+ int r = sqlite3_prepare_v2(sdb, text, -1, &stmt, &tail);
+
+ if (r != SQLITE_OK)
+ return svn_error_createf(SVN_ERR_SQLITE_ERROR, NULL,
+ "Preparing %s failed: %s\n%s",
+ wc_query_info[i][0],
+ sqlite3_errmsg(sdb),
+ text);
+
+ SQLITE_ERR(sqlite3_finalize(stmt));
+
+ /* Continue after the current statement */
+ text = tail;
+ }
+ }
+
+ SQLITE_ERR(sqlite3_close(sdb)); /* Close the DB if ok; otherwise leaked */
+
+ return SVN_NO_ERROR;
+}
+
+/* Contains a parsed record from EXPLAIN QUERY PLAN */
+struct explanation_item
+{
+ const char *operation;
+ const char *table;
+ const char *alias;
+ svn_boolean_t scan;
+ svn_boolean_t search;
+ svn_boolean_t covered_by_index;
+ svn_boolean_t primary_key;
+ svn_boolean_t automatic_index;
+ const char *index;
+ const char *expressions;
+ const char *expected;
+
+ const char *compound_left;
+ const char *compound_right;
+ svn_boolean_t create_btree;
+
+ int expression_vars;
+ int expected_rows;
+};
+
+#define MATCH_TOKEN(x, y) (x && (strcmp(x, y) == 0))
+
+/* Simple parser for the Sqlite textual explanation into an explanation_item.
+ Writes "DBG:" lines when sqlite produces unexpected results. When no
+ valid explanation_item can be parsed sets *PARSED_ITEM to NULL, otherwise
+ to a valid result. */
+static svn_error_t *
+parse_explanation_item(struct explanation_item **parsed_item,
+ const char *text,
+ apr_pool_t *result_pool)
+{
+ struct explanation_item *item = apr_pcalloc(result_pool, sizeof(*item));
+ char *token;
+ char *last;
+ char *tmp = apr_pstrdup(result_pool, text);
+ const char *tmp_end = &tmp[strlen(tmp)];
+
+ *parsed_item = NULL;
+
+ item->operation = apr_strtok(tmp, " ", &last);
+
+ if (!item->operation)
+ {
+ return SVN_NO_ERROR;
+ }
+
+ item->scan = MATCH_TOKEN(item->operation, "SCAN");
+
+ if (item->scan || MATCH_TOKEN(item->operation, "SEARCH"))
+ {
+ item->search = TRUE; /* Search or scan */
+ token = apr_strtok(NULL, " ", &last);
+
+ if (!MATCH_TOKEN(token, "TABLE"))
+ {
+ printf("DBG: Expected 'TABLE', got '%s' in '%s'\n", token, text);
+ return SVN_NO_ERROR; /* Nothing to parse */
+ }
+
+ item->table = apr_strtok(NULL, " ", &last);
+
+ token = apr_strtok(NULL, " ", &last);
+
+ /* Skip alias */
+ if (MATCH_TOKEN(token, "AS"))
+ {
+ item->alias = apr_strtok(NULL, " ", &last);
+ token = apr_strtok(NULL, " ", &last);
+ }
+
+ if (MATCH_TOKEN(token, "USING"))
+ {
+ token = apr_strtok(NULL, " ", &last);
+
+ if (MATCH_TOKEN(token, "AUTOMATIC"))
+ {
+ /* Pain: A temporary index is created */
+ item->automatic_index = TRUE;
+ token = apr_strtok(NULL, " ", &last);
+ }
+
+ /* Handle COVERING */
+ if (MATCH_TOKEN(token, "COVERING"))
+ {
+ /* Bonus: Query will be answered by just using the index */
+ item->covered_by_index = TRUE;
+ token = apr_strtok(NULL, " ", &last);
+ }
+
+ if (MATCH_TOKEN(token, "INDEX"))
+ {
+ item->index = apr_strtok(NULL, " ", &last);
+ }
+ else if (MATCH_TOKEN(token, "INTEGER"))
+ {
+ token = apr_strtok(NULL, " ", &last);
+ if (!MATCH_TOKEN(token, "PRIMARY"))
+ {
+ printf("DBG: Expected 'PRIMARY', got '%s' in '%s'\n",
+ token, text);
+ return SVN_NO_ERROR;
+ }
+
+ token = apr_strtok(NULL, " ", &last);
+ if (!MATCH_TOKEN(token, "KEY"))
+ {
+ printf("DBG: Expected 'KEY', got '%s' in '%s'\n",
+ token, text);
+ return SVN_NO_ERROR;
+ }
+
+ item->primary_key = TRUE;
+ }
+ else
+ {
+ printf("DBG: Expected 'INDEX' or 'PRIMARY', got '%s' in '%s'\n",
+ token, text);
+ return SVN_NO_ERROR;
+ }
+
+ token = apr_strtok(NULL, " ", &last);
+ }
+
+ if (token && token[0] == '(' && token[1] != '~')
+ {
+ /* Undo the tokenization to switch parser rules */
+ size_t token_len = strlen(token);
+
+ if (token + token_len < tmp_end)
+ token[token_len] = ' ';
+
+ if (token[token_len] == '\0')
+ last[-1] = ' ';
+
+ token++; /* Skip the '(' */
+
+ item->expressions = apr_strtok(token, ")", &last);
+ token = apr_strtok(NULL, " ", &last);
+ }
+
+ if (token && *token == '(' && token[1] == '~')
+ {
+ /* Undo the tokenization to switch parser rules */
+ size_t token_len = strlen(token);
+
+ if (token + token_len < tmp_end)
+ token[token_len] = ' ';
+
+ if (token[token_len] == '\0')
+ last[-1] = ' ';
+
+ token += 2; /* Skip "(~" */
+
+ item->expected = apr_strtok(token, ")", &last);
+ token = apr_strtok(NULL, " ", &last);
+ }
+
+ if (token)
+ {
+ printf("DBG: Unexpected token '%s' in '%s'\n",
+ token, text);
+ return SVN_NO_ERROR;
+ }
+
+ /* Parsing successfull */
+ }
+ else if (MATCH_TOKEN(item->operation, "EXECUTE"))
+ {
+ /* Subquery handling */
+ return SVN_NO_ERROR;
+ }
+ else if (MATCH_TOKEN(item->operation, "COMPOUND"))
+ {
+ /* Handling temporary table (E.g. UNION) */
+
+ token = apr_strtok(NULL, " ", &last);
+ if (!MATCH_TOKEN(token, "SUBQUERIES"))
+ {
+ printf("DBG: Expected 'SUBQUERIES', got '%s' in '%s'\n", token,
+ text);
+ return SVN_NO_ERROR;
+ }
+
+ item->compound_left = apr_strtok(NULL, " ", &last);
+ token = apr_strtok(NULL, " ", &last);
+
+ if (!MATCH_TOKEN(token, "AND"))
+ {
+ printf("DBG: Expected 'AND', got '%s' in '%s'\n", token, text);
+ return SVN_NO_ERROR;
+ }
+
+ item->compound_right = apr_strtok(NULL, " ", &last);
+
+ token = apr_strtok(NULL, " ", &last);
+ if (MATCH_TOKEN(token, "USING"))
+ {
+ token = apr_strtok(NULL, " ", &last);
+ if (!MATCH_TOKEN(token, "TEMP"))
+ {
+ printf("DBG: Expected 'TEMP', got '%s' in '%s'\n", token, text);
+ }
+ token = apr_strtok(NULL, " ", &last);
+ if (!MATCH_TOKEN(token, "B-TREE"))
+ {
+ printf("DBG: Expected 'B-TREE', got '%s' in '%s'\n", token,
+ text);
+ }
+ item->create_btree = TRUE;
+ }
+ }
+ else if (MATCH_TOKEN(item->operation, "USE"))
+ {
+ /* Using a temporary table for ordering results */
+ /* ### Need parsing */
+ item->create_btree = TRUE;
+ }
+ else
+ {
+ printf("DBG: Unhandled sqlite operation '%s' in explanation\n", item->operation);
+ return SVN_NO_ERROR;
+ }
+
+ if (item->expressions)
+ {
+ const char *p;
+
+ for (p = item->expressions; *p; p++)
+ {
+ if (*p == '?')
+ item->expression_vars++;
+ }
+ }
+ if (item->expected)
+ {
+ item->expected_rows = atoi(item->expected);
+ }
+
+ *parsed_item = item;
+ return SVN_NO_ERROR;
+}
+
+/* Sqlite has an SQLITE_OMIT_EXPLAIN compilation flag, which may make
+ explain query just evaluate the query. Some older versions use a
+ different number of columns (and different texts) for
+ EXPLAIN query plan.
+
+ If none of this is true set *SUPPORTED to TRUE, otherwise to FALSE */
+static svn_error_t *
+supported_explain_query_plan(svn_boolean_t *supported,
+ sqlite3 *sdb,
+ apr_pool_t *scratch_pool)
+{
+ sqlite3_stmt *stmt;
+ int r;
+
+ *supported = TRUE;
+
+ r = sqlite3_prepare(sdb, "EXPLAIN QUERY PLAN SELECT 1",
+ -1, &stmt, NULL);
+
+ if (r != SQLITE_OK)
+ {
+ *supported = FALSE;
+ return SVN_NO_ERROR;
+ }
+
+ if (sqlite3_step(stmt) == SQLITE_ROW)
+ {
+ if (sqlite3_column_count(stmt) < 4)
+ {
+ *supported = FALSE;
+ /* Fall through */
+ }
+ }
+
+ SQLITE_ERR(sqlite3_reset(stmt));
+ SQLITE_ERR(sqlite3_finalize(stmt));
+ return SVN_NO_ERROR;
+}
+
+
+/* Returns TRUE if TABLE_NAME specifies a nodes table, which should be indexed
+ by wc_id and either local_relpath or parent_relpath */
+static svn_boolean_t
+is_node_table(const char *table_name)
+{
+ return (apr_strnatcasecmp(table_name, "nodes") == 0
+ || apr_strnatcasecmp(table_name, "actual_node") == 0
+ || apr_strnatcasecmp(table_name, "externals") == 0
+ || apr_strnatcasecmp(table_name, "lock") == 0
+ || apr_strnatcasecmp(table_name, "wc_lock") == 0
+ || FALSE);
+}
+
+/* Returns TRUE if TABLE specifies an intermediate result table, which is
+ allowed to have table scans, etc. */
+static svn_boolean_t
+is_result_table(const char *table_name)
+{
+ return (apr_strnatcasecmp(table_name, "target_prop_cache") == 0
+ || apr_strnatcasecmp(table_name, "changelist_list") == 0
+ || FALSE);
+}
+
+static svn_error_t *
+test_query_expectations(apr_pool_t *scratch_pool)
+{
+ sqlite3 *sdb;
+ int i;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ svn_error_t *warnings = NULL;
+ svn_boolean_t supports_query_info;
+
+ SVN_ERR(create_memory_db(&sdb, scratch_pool));
+
+ SVN_ERR(supported_explain_query_plan(&supports_query_info, sdb,
+ scratch_pool));
+ if (!supports_query_info)
+ {
+ SQLITE_ERR(sqlite3_close(sdb));
+ return svn_error_create(SVN_ERR_TEST_SKIPPED, NULL,
+ "Sqlite doesn't support EXPLAIN QUERY PLAN");
+ }
+
+ for (i=0; i < STMT_SCHEMA_FIRST; i++)
+ {
+ sqlite3_stmt *stmt;
+ const char *tail;
+ int r;
+ svn_boolean_t warned = FALSE;
+ apr_array_header_t *rows = NULL;
+
+ if (is_schema_statement(i))
+ continue;
+
+ /* Prepare statement to find if it is a single statement. */
+ r = sqlite3_prepare_v2(sdb, wc_queries[i], -1, &stmt, &tail);
+
+ if (r != SQLITE_OK)
+ continue; /* Parse failure is already reported by 'test_parable' */
+
+ SQLITE_ERR(sqlite3_finalize(stmt));
+ if (tail[0] != '\0')
+ continue; /* Multi-queries are currently not testable */
+
+ svn_pool_clear(iterpool);
+
+ r = sqlite3_prepare_v2(sdb,
+ apr_pstrcat(iterpool,
+ "EXPLAIN QUERY PLAN ",
+ wc_queries[i],
+ NULL),
+ -1, &stmt, &tail);
+
+ if (r != SQLITE_OK)
+ continue; /* EXPLAIN not enabled or doesn't support this query */
+
+ while (SQLITE_ROW == (r = sqlite3_step(stmt)))
+ {
+ /*int iSelectid;
+ int iOrder;
+ int iFrom;*/
+ const unsigned char *zDetail;
+ char *detail;
+ struct explanation_item *item;
+
+ /* ### The following code is correct for current Sqlite versions
+ ### (tested with 3.7.x), but the EXPLAIN QUERY PLAN output
+ ### is not guaranteed to be stable for future versions. */
+
+ /* Names as in Sqlite documentation */
+ /*iSelectid = sqlite3_column_int(stmt, 0);
+ iOrder = sqlite3_column_int(stmt, 1);
+ iFrom = sqlite3_column_int(stmt, 2);*/
+ zDetail = sqlite3_column_text(stmt, 3);
+
+ if (! zDetail)
+ continue;
+
+ if (!rows)
+ rows = apr_array_make(iterpool, 10, sizeof(const char*));
+
+ detail = apr_pstrdup(iterpool, (const char*)zDetail);
+
+ APR_ARRAY_PUSH(rows, const char *) = detail;
+
+ SVN_ERR(parse_explanation_item(&item, detail, iterpool));
+
+ if (!item)
+ continue; /* Not parsable or not interesting */
+
+ if (item->search
+ && item->automatic_index)
+ {
+ warned = TRUE;
+ if (!is_slow_statement(i))
+ {
+ warnings = svn_error_createf(SVN_ERR_TEST_FAILED, warnings,
+ "%s: "
+ "Creates a temporary index: %s\n",
+ wc_query_info[i][0], wc_queries[i]);
+ }
+ }
+ else if (item->search && item->primary_key)
+ {
+ /* Nice */
+ }
+ else if (item->search
+ && ((item->expression_vars < 2 && is_node_table(item->table))
+ || (item->expression_vars < 1))
+ && !is_result_table(item->table))
+ {
+ if (in_list(primary_key_statements, i))
+ {
+ /* Reported as primary key index usage in Sqlite 3.7,
+ as table scan in 3.8+, while the execution plan is
+ identical: read first record from table */
+ }
+ else if (!is_slow_statement(i))
+ {
+ warned = TRUE;
+ warnings = svn_error_createf(SVN_ERR_TEST_FAILED, warnings,
+ "%s: "
+ "Uses %s with only %d index component: (%s)\n%s",
+ wc_query_info[i][0], item->table,
+ item->expression_vars, item->expressions,
+ wc_queries[i]);
+ }
+ else
+ warned = TRUE;
+ }
+ else if (item->search && !item->index)
+ {
+ warned = TRUE;
+ if (!is_slow_statement(i))
+ warnings = svn_error_createf(SVN_ERR_TEST_FAILED, warnings,
+ "%s: "
+ "Query on %s doesn't use an index:\n%s",
+ wc_query_info[i][0], item->table, wc_queries[i]);
+ }
+ else if (item->scan && !is_result_table(item->table))
+ {
+ warned = TRUE;
+ if (!is_slow_statement(i))
+ warnings = svn_error_createf(SVN_ERR_TEST_FAILED, warnings,
+ "Query %s: "
+ "Performs scan on %s:\n%s",
+ wc_query_info[i][0], item->table, wc_queries[i]);
+ }
+ else if (item->create_btree)
+ {
+ warned = TRUE;
+ if (!is_slow_statement(i))
+ warnings = svn_error_createf(SVN_ERR_TEST_FAILED, warnings,
+ "Query %s: Creates a temporary B-TREE:\n%s",
+ wc_query_info[i][0], wc_queries[i]);
+ }
+ }
+ SQLITE_ERR(sqlite3_reset(stmt));
+ SQLITE_ERR(sqlite3_finalize(stmt));
+
+ if (!warned && is_slow_statement(i))
+ {
+ printf("DBG: Expected %s to be reported as slow, but it wasn't\n",
+ wc_query_info[i][0]);
+ }
+
+ if (rows && warned != is_slow_statement(i))
+ {
+ int w;
+ svn_error_t *info = NULL;
+ for (w = rows->nelts-1; w >= 0; w--)
+ {
+ if (warned)
+ info = svn_error_createf(SVN_ERR_SQLITE_CONSTRAINT, info,
+ "|%s", APR_ARRAY_IDX(rows, w,
+ const char*));
+ else
+ printf("|%s\n", APR_ARRAY_IDX(rows, w, const char*));
+ }
+
+ warnings = svn_error_compose_create(warnings, info);
+ }
+ }
+ SQLITE_ERR(sqlite3_close(sdb)); /* Close the DB if ok; otherwise leaked */
+
+ return warnings;
+}
+
+/* Helper to verify a bit of data in the sqlite3 statistics */
+static int
+parse_stat_data(const char *stat)
+{
+ int n = 0;
+ apr_int64_t last = APR_INT64_MAX;
+ while (*stat)
+ {
+ apr_int64_t v;
+ char *next;
+
+ if (*stat < '0' || *stat > '9')
+ return -2;
+
+ errno = 0;
+ v = apr_strtoi64(stat, &next, 10);
+
+ /* All numbers specify the average number of rows
+ with the same values in all columns left of it,
+ so the value must be >= 1 and lower than or equal
+ to all previous seen numbers */
+ if (v <= 0 || (v > last) || (errno != 0))
+ return -1;
+
+ last = v;
+
+ n++;
+ stat = next;
+
+ if (*stat == ' ')
+ stat++;
+ }
+
+ return n;
+}
+
+static svn_error_t *
+test_schema_statistics(apr_pool_t *scratch_pool)
+{
+ sqlite3 *sdb;
+ sqlite3_stmt *stmt;
+
+ SVN_ERR(create_memory_db(&sdb, scratch_pool));
+
+ SQLITE_ERR(
+ sqlite3_exec(sdb,
+ "CREATE TABLE shadow_stat1(tbl TEXT, idx TEXT, stat TEXT)",
+ NULL, NULL, NULL));
+
+ SQLITE_ERR(
+ sqlite3_exec(sdb,
+ "INSERT INTO shadow_stat1 (tbl, idx, stat) "
+ "SELECT tbl, idx, stat FROM sqlite_stat1",
+ NULL, NULL, NULL));
+
+ SQLITE_ERR(
+ sqlite3_exec(sdb,
+ "DROP TABLE sqlite_stat1",
+ NULL, NULL, NULL));
+
+ /* Insert statement to give index at least 1 record */
+ SQLITE_ERR(
+ sqlite3_exec(sdb,
+ "INSERT INTO nodes (wc_id, local_relpath, op_depth,"
+ " presence, kind) "
+ "VALUES (1, '', 0, 'normal', 'dir')",
+ NULL, NULL, NULL));
+
+ SQLITE_ERR(
+ sqlite3_exec(sdb,
+ "INSERT INTO actual_node (wc_id, local_relpath) "
+ "VALUES (1, '')",
+ NULL, NULL, NULL));
+
+ SQLITE_ERR(
+ sqlite3_exec(sdb,
+ "INSERT INTO lock (repos_id, repos_relpath, lock_token) "
+ "VALUES (1, '', '')",
+ NULL, NULL, NULL));
+
+ /* These are currently not necessary for query optimization, but it's better
+ to tell Sqlite how we intend to use this table anyway */
+ SQLITE_ERR(
+ sqlite3_exec(sdb,
+ "INSERT INTO wc_lock (wc_id, local_dir_relpath) "
+ "VALUES (1, '')",
+ NULL, NULL, NULL));
+
+ SQLITE_ERR(
+ sqlite3_exec(sdb,
+ "INSERT INTO WORK_QUEUE (work) "
+ "VALUES ('')",
+ NULL, NULL, NULL));
+
+ SQLITE_ERR(
+ sqlite3_exec(sdb,
+ "ANALYZE",
+ NULL, NULL, NULL));
+
+ SQLITE_ERR(
+ sqlite3_prepare(sdb, "SELECT s.tbl, s.idx, s.stat, r.stat "
+ "FROM shadow_stat1 s "
+ "LEFT JOIN sqlite_stat1 r ON "
+ "s.tbl=r.tbl and s.idx=r.idx",
+ -1, &stmt, NULL));
+
+ while (sqlite3_step(stmt) == SQLITE_ROW)
+ {
+ const char *wc_stat = (const char*)sqlite3_column_text(stmt, 2);
+ const char *sqlite_stat = (const char*)sqlite3_column_text(stmt, 3);
+
+ if (! sqlite_stat)
+ {
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "Schema statistic failure:"
+ " Refering to unknown index '%s' on '%s'",
+ sqlite3_column_text(stmt, 1),
+ sqlite3_column_text(stmt, 0));
+ }
+
+ if (parse_stat_data(wc_stat) != parse_stat_data(sqlite_stat))
+ {
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "Schema statistic failure:"
+ " Column mismatch for '%s' on '%s'",
+ sqlite3_column_text(stmt, 1),
+ sqlite3_column_text(stmt, 0));
+ }
+ }
+
+ SQLITE_ERR(sqlite3_reset(stmt));
+ SQLITE_ERR(sqlite3_finalize(stmt));
+
+ SQLITE_ERR(sqlite3_close(sdb)); /* Close the DB if ok; otherwise leaked */
+
+ return SVN_NO_ERROR;
+}
+
+struct svn_test_descriptor_t test_funcs[] =
+ {
+ SVN_TEST_NULL,
+ SVN_TEST_PASS2(test_sqlite_version,
+ "sqlite up-to-date"),
+ SVN_TEST_PASS2(test_parsable,
+ "queries are parsable"),
+ SVN_TEST_PASS2(test_query_expectations,
+ "test query expectations"),
+ SVN_TEST_PASS2(test_schema_statistics,
+ "test schema statistics"),
+ SVN_TEST_NULL
+ };
diff --git a/subversion/tests/libsvn_wc/wc-test.c b/subversion/tests/libsvn_wc/wc-test.c
new file mode 100644
index 0000000..30eb18a
--- /dev/null
+++ b/subversion/tests/libsvn_wc/wc-test.c
@@ -0,0 +1,323 @@
+/*
+ * wc-test.c : test WC APIs
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#include <apr_pools.h>
+#include <apr_general.h>
+
+#include "svn_types.h"
+#include "svn_io.h"
+#include "svn_dirent_uri.h"
+#include "svn_pools.h"
+#include "svn_repos.h"
+#include "svn_wc.h"
+#include "svn_client.h"
+#include "svn_hash.h"
+
+#include "utils.h"
+
+#include "private/svn_wc_private.h"
+#include "private/svn_sqlite.h"
+#include "private/svn_dep_compat.h"
+#include "../../libsvn_wc/wc.h"
+#include "../../libsvn_wc/wc_db.h"
+#define SVN_WC__I_AM_WC_DB
+#include "../../libsvn_wc/wc_db_private.h"
+
+#include "../svn_test.h"
+
+#ifdef _MSC_VER
+#pragma warning(disable: 4221) /* nonstandard extension used */
+#endif
+
+
+/* ---------------------------------------------------------------------- */
+/* The test functions */
+
+/* Structure for testing node_get_base and node_get_origin. */
+struct base_origin_t
+{
+ /* Path to create and test, WC-relative */
+ const char *path;
+ /* Expected base rev. "-1" means no base. (Expected base path
+ * == base_rev valid ? path : NULL) */
+ svn_revnum_t base_rev;
+ /* Path to copy from, WC-relative */
+ const char *src_path;
+ /* Expected "origin" */
+ struct {
+ const char *path;
+ svn_revnum_t rev;
+ } origin;
+};
+
+/* Data for testing node_get_base and node_get_origin. */
+struct base_origin_t base_origin_subtests[] =
+ {
+ /* file copied onto nothing */
+ { "A/C/copy1", -1, "iota", {"iota", 1} },
+
+ /* dir copied onto nothing */
+ { "A/C/copy2", -1, "A/B/E", {"A/B/E", 1} },
+
+ /* replacement: file copied over a schedule-delete file */
+ { "A/B/lambda", 1, "iota", {"iota", 1} },
+
+ /* replacement: dir copied over a schedule-delete dir */
+ { "A/D/G", 1, "A/B/E", {"A/B/E", 1} },
+
+ /* replacement: dir copied over a schedule-delete file */
+ { "A/D/gamma", 1, "A/B/E", {"A/B/E", 1} },
+
+ /* replacement: file copied over a schedule-delete dir */
+ { "A/D/H", 1, "iota", {"iota", 1} },
+
+ { 0 }
+ };
+
+/* Create a WC containing lots of different node states, in the sandbox B. */
+static svn_error_t *
+create_wc_for_base_and_origin_tests(svn_test__sandbox_t *b)
+{
+ struct base_origin_t *copy;
+
+ SVN_ERR(sbox_add_and_commit_greek_tree(b));
+
+ /* Copy various things */
+ for (copy = base_origin_subtests; copy->src_path; copy++)
+ {
+ if (SVN_IS_VALID_REVNUM(copy->base_rev))
+ SVN_ERR(sbox_wc_delete(b, copy->path));
+ SVN_ERR(sbox_wc_copy(b, copy->src_path, copy->path));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Test svn_wc__node_get_base(). */
+static svn_error_t *
+test_node_get_base(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t *b = apr_palloc(pool, sizeof(*b));
+
+ SVN_ERR(svn_test__sandbox_create(b, "node_get_base", opts, pool));
+
+ SVN_ERR(create_wc_for_base_and_origin_tests(b));
+
+ {
+ struct base_origin_t *subtest;
+
+ for (subtest = base_origin_subtests; subtest->path; subtest++)
+ {
+ const char *local_abspath
+ = svn_dirent_join(b->wc_abspath, subtest->path, b->pool);
+ svn_revnum_t revision;
+ const char *repos_relpath, *repos_root_url, *repos_uuid;
+
+ SVN_ERR(svn_wc__node_get_base(NULL, &revision, &repos_relpath,
+ &repos_root_url, &repos_uuid,
+ NULL,
+ b->wc_ctx, local_abspath,
+ TRUE /* ignore_enoent */,
+ FALSE /* show_hidden */,
+ b->pool, b->pool));
+ SVN_TEST_ASSERT(revision == subtest->base_rev);
+ if (SVN_IS_VALID_REVNUM(subtest->base_rev))
+ {
+ SVN_TEST_STRING_ASSERT(repos_relpath, subtest->path);
+ SVN_TEST_STRING_ASSERT(repos_root_url, b->repos_url);
+ SVN_TEST_ASSERT(repos_uuid != NULL);
+ }
+ else
+ {
+ SVN_TEST_STRING_ASSERT(repos_relpath, NULL);
+ SVN_TEST_STRING_ASSERT(repos_root_url, NULL);
+ SVN_TEST_STRING_ASSERT(repos_uuid, NULL);
+ }
+ }
+ }
+
+ return SVN_NO_ERROR;
+}
+
+/* Test svn_wc__node_get_origin(). */
+static svn_error_t *
+test_node_get_origin(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t *b = apr_palloc(pool, sizeof(*b));
+
+ SVN_ERR(svn_test__sandbox_create(b, "node_get_origin", opts, pool));
+
+ SVN_ERR(create_wc_for_base_and_origin_tests(b));
+
+ {
+ struct base_origin_t *subtest;
+
+ for (subtest = base_origin_subtests; subtest->path; subtest++)
+ {
+ const char *local_abspath
+ = svn_dirent_join(b->wc_abspath, subtest->path, b->pool);
+ svn_revnum_t revision;
+ const char *repos_relpath, *repos_root_url, *repos_uuid;
+
+ SVN_ERR(svn_wc__node_get_origin(NULL, &revision, &repos_relpath,
+ &repos_root_url, &repos_uuid, NULL,
+ b->wc_ctx, local_abspath, FALSE,
+ b->pool, b->pool));
+ SVN_TEST_ASSERT(revision == subtest->origin.rev);
+ if (SVN_IS_VALID_REVNUM(subtest->origin.rev))
+ {
+ SVN_TEST_STRING_ASSERT(repos_relpath, subtest->origin.path);
+ SVN_TEST_STRING_ASSERT(repos_root_url, b->repos_url);
+ SVN_TEST_ASSERT(repos_uuid != NULL);
+ }
+ else
+ {
+ SVN_TEST_STRING_ASSERT(repos_relpath, NULL);
+ SVN_TEST_STRING_ASSERT(repos_root_url, NULL);
+ SVN_TEST_STRING_ASSERT(repos_uuid, NULL);
+ }
+ }
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_externals_parse(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ int i;
+ struct external_info
+ {
+ const char *line;
+ const char *url;
+ const char *local_path;
+ svn_revnum_t peg_rev;
+ svn_revnum_t rev;
+
+ } items[] = {
+ {
+ "dir http://server/svn/a",
+ "http://server/svn/a",
+ "dir"
+ },
+ {
+ "/svn/home dir",
+ "u://svr/svn/home",
+ "dir"
+ },
+ {
+ "//server/home dir",
+ "u://server/home",
+ "dir"
+ },
+ {
+ "../../../../home dir",
+ "u://svr/svn/home",
+ "dir",
+ },
+ {
+ "^/../repB/tools/scripts scripts",
+ "u://svr/svn/cur/repB/tools/scripts",
+ "scripts"
+ },
+ {
+ "^/../repB/tools/README.txt scripts/README.txt",
+ "u://svr/svn/cur/repB/tools/README.txt",
+ "scripts/README.txt"
+ },
+ };
+
+ for (i = 0; i < sizeof(items) / sizeof(items[0]); i++)
+ {
+ apr_array_header_t *results;
+ svn_wc_external_item2_t *external_item;
+ const char *resolved_url;
+ SVN_ERR(svn_wc_parse_externals_description3(&results, "/my/current/dir",
+ items[i].line, FALSE, pool));
+
+ SVN_TEST_ASSERT(results && results->nelts == 1);
+
+ external_item = APR_ARRAY_IDX(results, 0, svn_wc_external_item2_t *);
+
+ SVN_ERR(svn_wc__resolve_relative_external_url(&resolved_url,
+ external_item,
+ "u://svr/svn/cur/dir",
+ "u://svr/svn/cur/dir/sd/fl",
+ pool, pool));
+
+ SVN_TEST_STRING_ASSERT(resolved_url, items[i].url);
+ SVN_TEST_STRING_ASSERT(external_item->target_dir, items[i].local_path);
+
+ if (items[i].peg_rev != 0)
+ SVN_TEST_ASSERT(external_item->peg_revision.value.number
+ == items[i].peg_rev);
+ if (items[i].rev != 0)
+ SVN_TEST_ASSERT(external_item->revision.value.number == items[i].rev);
+ SVN_TEST_ASSERT(svn_uri_is_canonical(resolved_url, pool));
+ }
+
+
+ return SVN_NO_ERROR;
+
+}
+
+static svn_error_t *
+test_externals_parse_erratic(apr_pool_t *pool)
+{
+ svn_error_t *err;
+ apr_array_header_t *list = NULL;
+
+ err = svn_wc_parse_externals_description3(
+ &list, "parent_dir",
+ "^/valid/but/should/not/be/on/record wc_target\n"
+ "because_this_is_an_error",
+ FALSE, pool);
+
+ /* DESC above has an error, so expect one. */
+ SVN_TEST_ASSERT(err != NULL);
+ svn_error_clear(err);
+
+ /* svn_wc_parse_externals_description3() should not
+ touch LIST when DESC had an error.*/
+ SVN_TEST_ASSERT(list == NULL);
+
+ return SVN_NO_ERROR;
+}
+
+
+/* ---------------------------------------------------------------------- */
+/* The list of test functions */
+
+struct svn_test_descriptor_t test_funcs[] =
+ {
+ SVN_TEST_NULL,
+ SVN_TEST_OPTS_PASS(test_node_get_base,
+ "test_node_get_base"),
+ SVN_TEST_OPTS_PASS(test_node_get_origin,
+ "test_node_get_origin"),
+ SVN_TEST_OPTS_PASS(test_externals_parse,
+ "test svn_wc_parse_externals_description3"),
+ SVN_TEST_PASS2(test_externals_parse_erratic,
+ "parse erratic externals definition"),
+ SVN_TEST_NULL
+ };
diff --git a/subversion/tests/svn_test.h b/subversion/tests/svn_test.h
index 2559e7e..ab3a204 100644
--- a/subversion/tests/svn_test.h
+++ b/subversion/tests/svn_test.h
@@ -53,7 +53,47 @@ extern "C" {
#expr, __FILE__, __LINE__); \
} while (0)
+/** Handy macro for testing an expected svn_error_t return value.
+ * EXPECTED must be a real error (neither SVN_NO_ERROR nor APR_SUCCESS).
+ * The error returned by EXPR will be cleared.
+ */
+#define SVN_TEST_ASSERT_ERROR(expr, expected) \
+ do { \
+ svn_error_t *err__ = (expr); \
+ SVN_ERR_ASSERT((expected)); \
+ if (err__ == SVN_NO_ERROR || err__->apr_err != (expected)) \
+ return err__ ? svn_error_createf(SVN_ERR_TEST_FAILED, err__, \
+ "Expected error %d but got %d", \
+ (expected), \
+ err__->apr_err) \
+ : svn_error_createf(SVN_ERR_TEST_FAILED, err__, \
+ "Expected error %d but got %s", \
+ (expected), \
+ "SVN_NO_ERROR"); \
+ svn_error_clear(err__); \
+ } while (0)
+
+/** Handy macro for testing that an svn_error_t is returned.
+ * The result must be neither SVN_NO_ERROR nor SVN_ERR_ASSERTION_FAIL.
+ * The error returned by EXPR will be cleared.
+ */
+#define SVN_TEST__ASSERT_ANY_ERROR(expr) \
+ do { \
+ svn_error_t *err__ = (expr); \
+ if (err__ == SVN_NO_ERROR || err__->apr_err == SVN_ERR_ASSERTION_FAIL)\
+ return err__ ? svn_error_createf(SVN_ERR_TEST_FAILED, err__, \
+ "Expected error but got %s", \
+ "SVN_ERR_ASSERTION_FAIL") \
+ : svn_error_createf(SVN_ERR_TEST_FAILED, err__, \
+ "Expected error but got %s", \
+ "SVN_NO_ERROR"); \
+ svn_error_clear(err__); \
+ } while (0)
+
/** Handy macro for testing string equality.
+ *
+ * EXPR and/or EXPECTED_EXPR may be NULL which compares equal to NULL and
+ * not equal to any non-NULL string.
*/
#define SVN_TEST_STRING_ASSERT(expr, expected_expr) \
do { \
@@ -62,8 +102,8 @@ extern "C" {
\
if (tst_str2 == NULL && tst_str1 == NULL) \
break; \
- if ( (tst_str2 != NULL && tst_str1 == NULL) \
- || (strcmp(tst_str2, tst_str1) != 0) ) \
+ if ((tst_str1 == NULL) || (tst_str2 == NULL) \
+ || (strcmp(tst_str2, tst_str1) != 0)) \
return svn_error_createf(SVN_ERR_TEST_FAILED, NULL, \
"Strings not equal\n Expected: '%s'\n Found: '%s'" \
"\n at %s:%d", \
@@ -80,6 +120,8 @@ typedef struct svn_test_opts_t
const char *fs_type;
/* Config file. */
const char *config_file;
+ /* Source dir. */
+ const char *srcdir;
/* Minor version to use for servers and FS backends, or zero to use
the current latest version. */
int server_minor_version;
@@ -177,6 +219,27 @@ apr_uint32_t svn_test_rand(apr_uint32_t *seed);
void svn_test_add_dir_cleanup(const char *path);
+/* A simple representation for a tree node. */
+typedef struct svn_test__tree_entry_t
+{
+ const char *path; /* relpath of this node */
+ const char *contents; /* text contents, or NULL for a directory */
+}
+svn_test__tree_entry_t;
+
+/* Wrapper for an array of svn_test__tree_entry_t's. */
+typedef struct svn_test__tree_t
+{
+ svn_test__tree_entry_t *entries;
+ int num_entries;
+}
+svn_test__tree_t;
+
+
+/* The standard Greek tree, terminated by a node with path=NULL. */
+extern const svn_test__tree_entry_t svn_test__greek_tree_nodes[21];
+
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/subversion/tests/svn_test_fs.c b/subversion/tests/svn_test_fs.c
index 989bf3e..2dcb096 100644
--- a/subversion/tests/svn_test_fs.c
+++ b/subversion/tests/svn_test_fs.c
@@ -33,6 +33,7 @@
#include "svn_fs.h"
#include "svn_path.h"
#include "svn_delta.h"
+#include "svn_hash.h"
#include "svn_test_fs.h"
@@ -81,8 +82,8 @@ make_fs_config(const char *fs_type,
fs_type);
if (server_minor_version)
{
- if (server_minor_version == 6)
- /* no SVN_FS_CONFIG_PRE_1_7_COMPATIBLE */;
+ if (server_minor_version == 6 || server_minor_version == 7)
+ svn_hash_sets(fs_config, SVN_FS_CONFIG_PRE_1_8_COMPATIBLE, "1");
else if (server_minor_version == 5)
apr_hash_set(fs_config, SVN_FS_CONFIG_PRE_1_6_COMPATIBLE,
APR_HASH_KEY_STRING, "1");
@@ -115,10 +116,14 @@ create_fs(svn_fs_t **fs_p,
if (apr_stat(&finfo, name, APR_FINFO_TYPE, pool) == APR_SUCCESS)
{
if (finfo.filetype == APR_DIR)
- SVN_ERR(svn_fs_delete_fs(name, pool));
+ SVN_ERR_W(svn_io_remove_dir2(name, TRUE, NULL, NULL, pool),
+ apr_psprintf(pool,
+ "cannot create fs '%s' there is already "
+ "a directory of that name", name));
else
return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
- "there is already a file named '%s'", name);
+ "cannot create fs '%s' there is already "
+ "a file of that name", name);
}
SVN_ERR(svn_fs_create(fs_p, name, fs_config, pool));
@@ -135,6 +140,9 @@ create_fs(svn_fs_t **fs_p,
return SVN_NO_ERROR;
}
+/* If OPTS specifies a filesystem type of 'fsfs' and provides a config file,
+ * copy that file into the filesystem FS and set *MUST_REOPEN to TRUE, else
+ * set *MUST_REOPEN to FALSE. */
static svn_error_t *
maybe_install_fsfs_conf(svn_fs_t *fs,
const svn_test_opts_t *opts,
@@ -149,7 +157,7 @@ maybe_install_fsfs_conf(svn_fs_t *fs,
return svn_io_copy_file(opts->config_file,
svn_path_join(svn_fs_path(fs, pool),
"fsfs.conf", pool),
- FALSE,
+ FALSE /* copy_perms */,
pool);
}
@@ -206,7 +214,10 @@ svn_test__create_repos(svn_repos_t **repos_p,
if (apr_stat(&finfo, name, APR_FINFO_TYPE, pool) == APR_SUCCESS)
{
if (finfo.filetype == APR_DIR)
- SVN_ERR(svn_repos_delete(name, pool));
+ SVN_ERR_W(svn_io_remove_dir2(name, TRUE, NULL, NULL, pool),
+ apr_psprintf(pool,
+ "cannot create repos '%s' there is already "
+ "a directory of that name", name));
else
return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
"there is already a file named '%s'", name);
@@ -248,7 +259,7 @@ svn_test__stream_to_string(svn_stringbuf_t **string,
of priorities today, though. */
apr_size_t len;
- svn_stringbuf_t *str = svn_stringbuf_create("", pool);
+ svn_stringbuf_t *str = svn_stringbuf_create_empty(pool);
do
{
@@ -439,7 +450,7 @@ svn_test__validate_tree(svn_fs_root_t *root,
{
/* If we don't have a corrupt entries string, make one. */
if (! corrupt_entries)
- corrupt_entries = svn_stringbuf_create("", subpool);
+ corrupt_entries = svn_stringbuf_create_empty(subpool);
/* Append this entry name to the list of corrupt entries. */
svn_stringbuf_appendcstr(corrupt_entries, " ");
@@ -455,7 +466,7 @@ svn_test__validate_tree(svn_fs_root_t *root,
{
/* If we don't have a missing entries string, make one. */
if (! missing_entries)
- missing_entries = svn_stringbuf_create("", subpool);
+ missing_entries = svn_stringbuf_create_empty(subpool);
/* Append this entry name to the list of missing entries. */
svn_stringbuf_appendcstr(missing_entries, " ");
@@ -478,7 +489,7 @@ svn_test__validate_tree(svn_fs_root_t *root,
/* If we don't have an extra entries string, make one. */
if (! extra_entries)
- extra_entries = svn_stringbuf_create("", subpool);
+ extra_entries = svn_stringbuf_create_empty(subpool);
/* Append this entry name to the list of missing entries. */
svn_stringbuf_appendcstr(extra_entries, " ");
@@ -505,6 +516,42 @@ svn_test__validate_tree(svn_fs_root_t *root,
svn_error_t *
+svn_test__validate_changes(svn_fs_root_t *root,
+ apr_hash_t *expected,
+ apr_pool_t *pool)
+{
+ apr_hash_t *actual;
+ apr_hash_index_t *hi;
+
+ SVN_ERR(svn_fs_paths_changed2(&actual, root, pool));
+
+#if 0
+ /* Print ACTUAL and EXPECTED. */
+ {
+ int i;
+ for (i=0, hi = apr_hash_first(pool, expected); hi; hi = apr_hash_next(hi))
+ SVN_DBG(("expected[%d] = '%s'\n", i++, svn__apr_hash_index_key(hi)));
+ for (i=0, hi = apr_hash_first(pool, actual); hi; hi = apr_hash_next(hi))
+ SVN_DBG(("actual[%d] = '%s'\n", i++, svn__apr_hash_index_key(hi)));
+ }
+#endif
+
+ for (hi = apr_hash_first(pool, expected); hi; hi = apr_hash_next(hi))
+ if (NULL == svn_hash_gets(actual, svn__apr_hash_index_key(hi)))
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "Path '%s' missing from actual changed-paths",
+ svn__apr_hash_index_key(hi));
+
+ for (hi = apr_hash_first(pool, actual); hi; hi = apr_hash_next(hi))
+ if (NULL == svn_hash_gets(expected, svn__apr_hash_index_key(hi)))
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "Path '%s' missing from expected changed-paths",
+ svn__apr_hash_index_key(hi));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
svn_test__txn_script_exec(svn_fs_root_t *txn_root,
svn_test__txn_script_command_t *script,
int num_edits,
@@ -569,6 +616,30 @@ svn_test__txn_script_exec(svn_fs_root_t *txn_root,
}
+const struct svn_test__tree_entry_t svn_test__greek_tree_nodes[21] = {
+ { "iota", "This is the file 'iota'.\n" },
+ { "A", NULL },
+ { "A/mu", "This is the file 'mu'.\n" },
+ { "A/B", NULL },
+ { "A/B/lambda", "This is the file 'lambda'.\n" },
+ { "A/B/E", NULL },
+ { "A/B/E/alpha", "This is the file 'alpha'.\n" },
+ { "A/B/E/beta", "This is the file 'beta'.\n" },
+ { "A/B/F", NULL },
+ { "A/C", NULL },
+ { "A/D", NULL },
+ { "A/D/gamma", "This is the file 'gamma'.\n" },
+ { "A/D/G", NULL },
+ { "A/D/G/pi", "This is the file 'pi'.\n" },
+ { "A/D/G/rho", "This is the file 'rho'.\n" },
+ { "A/D/G/tau", "This is the file 'tau'.\n" },
+ { "A/D/H", NULL },
+ { "A/D/H/chi", "This is the file 'chi'.\n" },
+ { "A/D/H/psi", "This is the file 'psi'.\n" },
+ { "A/D/H/omega", "This is the file 'omega'.\n" },
+ { NULL, NULL },
+};
+
svn_error_t *
svn_test__check_greek_tree(svn_fs_root_t *root,
apr_pool_t *pool)
@@ -576,115 +647,47 @@ svn_test__check_greek_tree(svn_fs_root_t *root,
svn_stream_t *rstream;
svn_stringbuf_t *rstring;
svn_stringbuf_t *content;
- int i;
-
- const char *file_contents[12][2] =
- {
- { "iota", "This is the file 'iota'.\n" },
- { "A/mu", "This is the file 'mu'.\n" },
- { "A/B/lambda", "This is the file 'lambda'.\n" },
- { "A/B/E/alpha", "This is the file 'alpha'.\n" },
- { "A/B/E/beta", "This is the file 'beta'.\n" },
- { "A/D/gamma", "This is the file 'gamma'.\n" },
- { "A/D/G/pi", "This is the file 'pi'.\n" },
- { "A/D/G/rho", "This is the file 'rho'.\n" },
- { "A/D/G/tau", "This is the file 'tau'.\n" },
- { "A/D/H/chi", "This is the file 'chi'.\n" },
- { "A/D/H/psi", "This is the file 'psi'.\n" },
- { "A/D/H/omega", "This is the file 'omega'.\n" }
- };
+ const struct svn_test__tree_entry_t *node;
/* Loop through the list of files, checking for matching content. */
- for (i = 0; i < 12; i++)
+ for (node = svn_test__greek_tree_nodes; node->path; node++)
{
- SVN_ERR(svn_fs_file_contents(&rstream, root,
- file_contents[i][0], pool));
- SVN_ERR(svn_test__stream_to_string(&rstring, rstream, pool));
- content = svn_stringbuf_create(file_contents[i][1], pool);
- if (! svn_stringbuf_compare(rstring, content))
- return svn_error_createf(SVN_ERR_FS_GENERAL, NULL,
- "data read != data written in file '%s'.",
- file_contents[i][0]);
+ if (node->contents)
+ {
+ SVN_ERR(svn_fs_file_contents(&rstream, root, node->path, pool));
+ SVN_ERR(svn_test__stream_to_string(&rstring, rstream, pool));
+ content = svn_stringbuf_create(node->contents, pool);
+ if (! svn_stringbuf_compare(rstring, content))
+ return svn_error_createf(SVN_ERR_FS_GENERAL, NULL,
+ "data read != data written in file '%s'.",
+ node->path);
+ }
}
return SVN_NO_ERROR;
}
-/**
- * Loads the greek tree in a directory at ROOT_DIR under transaction TXN_ROOT.
- * ROOT_DIR should be created by the caller.
- *
- * Note: this function will not commit the transaction.
- */
svn_error_t *
svn_test__create_greek_tree_at(svn_fs_root_t *txn_root,
const char *root_dir,
apr_pool_t *pool)
{
- char *iota = svn_relpath_join(root_dir, "iota", pool);
- char *A = svn_relpath_join(root_dir, "A", pool);
- char *Amu = svn_relpath_join(root_dir, "A/mu", pool);
- char *AB = svn_relpath_join(root_dir, "A/B", pool);
- char *ABlambda = svn_relpath_join(root_dir, "A/B/lambda", pool);
- char *ABE = svn_relpath_join(root_dir, "A/B/E", pool);
- char *ABEalpha = svn_relpath_join(root_dir, "A/B/E/alpha", pool);
- char *ABEbeta = svn_relpath_join(root_dir, "A/B/E/beta", pool);
- char *ABF = svn_relpath_join(root_dir, "A/B/F", pool);
- char *AC = svn_relpath_join(root_dir, "A/C", pool);
- char *AD = svn_relpath_join(root_dir, "A/D", pool);
- char *ADgamma = svn_relpath_join(root_dir, "A/D/gamma", pool);
- char *ADG = svn_relpath_join(root_dir, "A/D/G", pool);
- char *ADGpi = svn_relpath_join(root_dir, "A/D/G/pi", pool);
- char *ADGrho = svn_relpath_join(root_dir, "A/D/G/rho", pool);
- char *ADGtau = svn_relpath_join(root_dir, "A/D/G/tau", pool);
- char *ADH = svn_relpath_join(root_dir, "A/D/H", pool);
- char *ADHchi = svn_relpath_join(root_dir, "A/D/H/chi", pool);
- char *ADHpsi = svn_relpath_join(root_dir, "A/D/H/psi", pool);
- char *ADHomega = svn_relpath_join(root_dir, "A/D/H/omega", pool);
-
- SVN_ERR(svn_fs_make_file(txn_root, iota, pool));
- SVN_ERR(svn_test__set_file_contents
- (txn_root, iota, "This is the file 'iota'.\n", pool));
- SVN_ERR(svn_fs_make_dir (txn_root, A, pool));
- SVN_ERR(svn_fs_make_file(txn_root, Amu, pool));
- SVN_ERR(svn_test__set_file_contents
- (txn_root, Amu, "This is the file 'mu'.\n", pool));
- SVN_ERR(svn_fs_make_dir (txn_root, AB, pool));
- SVN_ERR(svn_fs_make_file(txn_root, ABlambda, pool));
- SVN_ERR(svn_test__set_file_contents
- (txn_root, ABlambda, "This is the file 'lambda'.\n", pool));
- SVN_ERR(svn_fs_make_dir (txn_root, ABE, pool));
- SVN_ERR(svn_fs_make_file(txn_root, ABEalpha, pool));
- SVN_ERR(svn_test__set_file_contents
- (txn_root, ABEalpha, "This is the file 'alpha'.\n", pool));
- SVN_ERR(svn_fs_make_file(txn_root, ABEbeta, pool));
- SVN_ERR(svn_test__set_file_contents
- (txn_root, ABEbeta, "This is the file 'beta'.\n", pool));
- SVN_ERR(svn_fs_make_dir (txn_root, ABF, pool));
- SVN_ERR(svn_fs_make_dir (txn_root, AC, pool));
- SVN_ERR(svn_fs_make_dir (txn_root, AD, pool));
- SVN_ERR(svn_fs_make_file(txn_root, ADgamma, pool));
- SVN_ERR(svn_test__set_file_contents
- (txn_root, ADgamma, "This is the file 'gamma'.\n", pool));
- SVN_ERR(svn_fs_make_dir (txn_root, ADG, pool));
- SVN_ERR(svn_fs_make_file(txn_root, ADGpi, pool));
- SVN_ERR(svn_test__set_file_contents
- (txn_root, ADGpi, "This is the file 'pi'.\n", pool));
- SVN_ERR(svn_fs_make_file(txn_root, ADGrho, pool));
- SVN_ERR(svn_test__set_file_contents
- (txn_root, ADGrho, "This is the file 'rho'.\n", pool));
- SVN_ERR(svn_fs_make_file(txn_root, ADGtau, pool));
- SVN_ERR(svn_test__set_file_contents
- (txn_root, ADGtau, "This is the file 'tau'.\n", pool));
- SVN_ERR(svn_fs_make_dir (txn_root, ADH, pool));
- SVN_ERR(svn_fs_make_file(txn_root, ADHchi, pool));
- SVN_ERR(svn_test__set_file_contents
- (txn_root, ADHchi, "This is the file 'chi'.\n", pool));
- SVN_ERR(svn_fs_make_file(txn_root, ADHpsi, pool));
- SVN_ERR(svn_test__set_file_contents
- (txn_root, ADHpsi, "This is the file 'psi'.\n", pool));
- SVN_ERR(svn_fs_make_file(txn_root, ADHomega, pool));
- SVN_ERR(svn_test__set_file_contents
- (txn_root, ADHomega, "This is the file 'omega'.\n", pool));
+ const struct svn_test__tree_entry_t *node;
+
+ for (node = svn_test__greek_tree_nodes; node->path; node++)
+ {
+ const char *path = svn_relpath_join(root_dir, node->path, pool);
+
+ if (node->contents)
+ {
+ SVN_ERR(svn_fs_make_file(txn_root, path, pool));
+ SVN_ERR(svn_test__set_file_contents(txn_root, path, node->contents,
+ pool));
+ }
+ else
+ {
+ SVN_ERR(svn_fs_make_dir(txn_root, path, pool));
+ }
+ }
return SVN_NO_ERROR;
}
diff --git a/subversion/tests/svn_test_fs.h b/subversion/tests/svn_test_fs.h
index 249c726..bbbbfb8 100644
--- a/subversion/tests/svn_test_fs.h
+++ b/subversion/tests/svn_test_fs.h
@@ -102,25 +102,6 @@ svn_test__get_file_contents(svn_fs_root_t *root,
/* The Helper Functions to End All Helper Functions */
-/* Structure used for testing integrity of the filesystem's revision
- using validate_tree(). */
-typedef struct svn_test__tree_entry_t
-{
- const char *path; /* full path of this node */
- const char *contents; /* text contents (NULL for directories) */
-}
-svn_test__tree_entry_t;
-
-
-/* Wrapper for an array of the above svn_test__tree_entry_t's. */
-typedef struct svn_test__tree_t
-{
- svn_test__tree_entry_t *entries;
- int num_entries;
-}
-svn_test__tree_t;
-
-
/* Given a transaction or revision root (ROOT), check to see if the
tree that grows from that root has all the path entries, and only
those entries, passed in the array ENTRIES (which is an array of
@@ -131,6 +112,14 @@ svn_test__validate_tree(svn_fs_root_t *root,
int num_entries,
apr_pool_t *pool);
+/* Verify that svn_fs_paths_changed2(ROOT) returns a hash with exactly
+ the same keys as EXPECTED_KEYS. Values are not currently verified.
+ */
+svn_error_t *
+svn_test__validate_changes(svn_fs_root_t *root,
+ apr_hash_t *expected_keys,
+ apr_pool_t *pool);
+
/* Structure for describing script-ish commands to perform on a
transaction using svn_test__txn_script_exec(). */
typedef struct svn_test__txn_script_command_t
@@ -168,7 +157,10 @@ svn_error_t *
svn_test__create_greek_tree(svn_fs_root_t *txn_root,
apr_pool_t *pool);
-/* Create the Greek Tree under TXN_ROOT at dir ROOT_DIR. */
+/* Create the Greek Tree under TXN_ROOT at dir ROOT_DIR.
+ * ROOT_DIR should be created by the caller.
+ *
+ * Note: this function will not commit the transaction. */
svn_error_t *
svn_test__create_greek_tree_at(svn_fs_root_t *txn_root,
const char *root_dir,
diff --git a/subversion/tests/svn_test_main.c b/subversion/tests/svn_test_main.c
index f06484d..15d460c 100644
--- a/subversion/tests/svn_test_main.c
+++ b/subversion/tests/svn_test_main.c
@@ -1,5 +1,5 @@
/*
- * tests-main.c: shared main() & friends for SVN test-suite programs
+ * svn_test_main.c: shared main() & friends for SVN test-suite programs
*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
@@ -27,6 +27,9 @@
#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>
+#ifdef WIN32
+#include <crtdbg.h>
+#endif
#include <apr_pools.h>
#include <apr_general.h>
@@ -41,8 +44,11 @@
#include "svn_io.h"
#include "svn_path.h"
#include "svn_ctype.h"
-#include "svn_private_config.h"
+#include "svn_utf.h"
+
+#include "private/svn_cmdline_private.h"
+#include "svn_private_config.h"
/* Some Subversion test programs may want to parse options in the
argument list, so we remember it here. */
@@ -53,13 +59,6 @@ const char **test_argv;
/* Test option: Print more output */
static svn_boolean_t verbose_mode = FALSE;
-/* Test option: Trap SVN_ERR_ASSERT failures in the code under test. Default
- * is false so the test can easily be run in a debugger with the debugger
- * catching the assertion failure. Test suites should enable this in order
- * to be able to continue with other sub-tests and report the results even
- * when a test hits an assertion failure. */
-static svn_boolean_t trap_assertion_failures = FALSE;
-
/* Test option: Print only unexpected results */
static svn_boolean_t quiet_mode = FALSE;
@@ -75,11 +74,11 @@ enum svn_test_mode_t mode_filter = svn_test_all;
/* Option parsing enums and structures */
enum {
- cleanup_opt = SVN_OPT_FIRST_LONGOPT_ID,
+ help_opt = SVN_OPT_FIRST_LONGOPT_ID,
+ cleanup_opt,
fstype_opt,
list_opt,
verbose_opt,
- trap_assert_opt,
quiet_opt,
config_opt,
server_minor_version_opt,
@@ -90,6 +89,8 @@ enum {
static const apr_getopt_option_t cl_options[] =
{
+ {"help", help_opt, 0,
+ N_("display this help")},
{"cleanup", cleanup_opt, 0,
N_("remove test directories after success")},
{"config-file", config_opt, 1,
@@ -100,14 +101,12 @@ static const apr_getopt_option_t cl_options[] =
N_("lists all the tests with their short description")},
{"mode-filter", mode_filter_opt, 1,
N_("only run/list tests with expected mode ARG = PASS, "
- "XFAIL, SKIP, or ALL (default)\n")},
+ "XFAIL, SKIP, or ALL (default)")},
{"verbose", verbose_opt, 0,
N_("print extra information")},
{"server-minor-version", server_minor_version_opt, 1,
- N_("set the minor version for the server ('3', '4',\n"
+ N_("set the minor version for the server ('3', '4', "
"'5', or '6')")},
- {"trap-assertion-failures", trap_assert_opt, 0,
- N_("catch and report SVN_ERR_ASSERT failures")},
{"quiet", quiet_opt, 0,
N_("print only unexpected results")},
{"allow-segfaults", allow_segfault_opt, 0,
@@ -348,6 +347,26 @@ do_test_num(const char *progname,
}
+static void help(const char *progname, apr_pool_t *pool)
+{
+ int i;
+
+ svn_error_clear(svn_cmdline_fprintf(stdout, pool,
+ _("usage: %s [options] [test-numbers]\n"
+ "\n"
+ "Valid options:\n"),
+ progname));
+ for (i = 0; cl_options[i].name && cl_options[i].optch; i++)
+ {
+ const char *optstr;
+
+ svn_opt_format_option(&optstr, cl_options + i, TRUE, pool);
+ svn_error_clear(svn_cmdline_fprintf(stdout, pool, " %s\n", optstr));
+ }
+ svn_error_clear(svn_cmdline_fprintf(stdout, pool, "\n"));
+}
+
+
/* Standard svn test program */
int
main(int argc, const char *argv[])
@@ -355,7 +374,6 @@ main(int argc, const char *argv[])
const char *prog_name;
int i;
svn_boolean_t got_error = FALSE;
- apr_allocator_t *allocator;
apr_pool_t *pool, *test_pool;
svn_boolean_t ran_a_test = FALSE;
svn_boolean_t list_mode = FALSE;
@@ -378,16 +396,10 @@ main(int argc, const char *argv[])
exit(1);
}
- /* set up the global pool. Use a separate mutexless allocator,
- * given this application is single threaded.
+ /* set up the global pool. Use a separate allocator to limit memory
+ * usage but make it thread-safe to allow for multi-threaded tests.
*/
- if (apr_allocator_create(&allocator))
- return EXIT_FAILURE;
-
- apr_allocator_max_free_set(allocator, SVN_ALLOCATOR_RECOMMENDED_MAX_FREE);
-
- pool = svn_pool_create_ex(NULL, allocator);
- apr_allocator_owner_set(allocator, pool);
+ pool = apr_allocator_owner_get(svn_pool_create_allocator(TRUE));
/* Remember the command line */
test_argc = argc;
@@ -412,6 +424,27 @@ main(int argc, const char *argv[])
prog_name = argv[0];
}
+#ifdef WIN32
+#if _MSC_VER >= 1400
+ /* ### This should work for VC++ 2002 (=1300) and later */
+ /* Show the abort message on STDERR instead of a dialog to allow
+ scripts (e.g. our testsuite) to continue after an abort without
+ user intervention. Allow overriding for easier debugging. */
+ if (!getenv("SVN_CMDLINE_USE_DIALOG_FOR_ABORT"))
+ {
+ /* In release mode: Redirect abort() errors to stderr */
+ _set_error_mode(_OUT_TO_STDERR);
+
+ /* In _DEBUG mode: Redirect all debug output (E.g. assert() to stderr.
+ (Ignored in releas builds) */
+ _CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDERR);
+ _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
+ _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
+ _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
+ }
+#endif /* _MSC_VER >= 1400 */
+#endif
+
if (err)
return svn_cmdline_handle_exit_error(err, pool, prog_name);
while (1)
@@ -431,6 +464,9 @@ main(int argc, const char *argv[])
}
switch (opt_id) {
+ case help_opt:
+ help(prog_name, pool);
+ exit(0);
case cleanup_opt:
cleanup_mode = TRUE;
break;
@@ -440,6 +476,10 @@ main(int argc, const char *argv[])
case fstype_opt:
opts.fs_type = apr_pstrdup(pool, opt_arg);
break;
+ case srcdir_opt:
+ SVN_INT_ERR(svn_utf_cstring_to_utf8(&opts.srcdir, opt_arg, pool));
+ opts.srcdir = svn_dirent_internal_style(opts.srcdir, pool);
+ break;
case list_opt:
list_mode = TRUE;
break;
@@ -462,9 +502,6 @@ main(int argc, const char *argv[])
case verbose_opt:
verbose_mode = TRUE;
break;
- case trap_assert_opt:
- trap_assertion_failures = TRUE;
- break;
case quiet_opt:
quiet_mode = TRUE;
break;
@@ -474,7 +511,7 @@ main(int argc, const char *argv[])
case server_minor_version_opt:
{
char *end;
- opts.server_minor_version = strtol(opt_arg, &end, 10);
+ opts.server_minor_version = (int) strtol(opt_arg, &end, 10);
if (end == opt_arg || *end != '\0')
{
fprintf(stderr, "FAIL: Non-numeric minor version given\n");
@@ -506,7 +543,7 @@ main(int argc, const char *argv[])
cleanup_pool = svn_pool_create(pool);
test_pool = svn_pool_create(pool);
- if (trap_assertion_failures)
+ if (!allow_segfaults)
svn_error_set_malfunction_handler(svn_error_raise_on_malfunction);
if (argc >= 2) /* notice command-line arguments */